ZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY2NvbmZpZy5oIGIvaW5jbHVkZS9hY3BpL2FjY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI0MWU0NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYWNwaS9hY2NvbmZpZy5oCkBAIC0wLDAgKzEsMjE3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogTmFtZTogYWNjb25maWcuaCAtIEdsb2JhbCBjb25maWd1cmF0aW9uIGNvbnN0YW50cworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDUsIFIuIEJ5cm9uIE1vb3JlCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIsCisgKiAgICB3aXRob3V0IG1vZGlmaWNhdGlvbi4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSBhdCBtaW5pbXVtIGEgZGlzY2xhaW1lcgorICogICAgc3Vic3RhbnRpYWxseSBzaW1pbGFyIHRvIHRoZSAiTk8gV0FSUkFOVFkiIGRpc2NsYWltZXIgYmVsb3cKKyAqICAgICgiRGlzY2xhaW1lciIpIGFuZCBhbnkgcmVkaXN0cmlidXRpb24gbXVzdCBiZSBjb25kaXRpb25lZCB1cG9uCisgKiAgICBpbmNsdWRpbmcgYSBzdWJzdGFudGlhbGx5IHNpbWlsYXIgRGlzY2xhaW1lciByZXF1aXJlbWVudCBmb3IgZnVydGhlcgorICogICAgYmluYXJ5IHJlZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZXMgb2YgdGhlIGFib3ZlLWxpc3RlZCBjb3B5cmlnaHQgaG9sZGVycyBub3IgdGhlIG5hbWVzCisgKiAgICBvZiBhbnkgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhpcyBzb2Z0d2FyZSBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKCJHUEwiKSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIE5PIFdBUlJBTlRZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORworICogSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisgKi8KKworI2lmbmRlZiBfQUNDT05GSUdfSAorI2RlZmluZSBfQUNDT05GSUdfSAorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb25maWd1cmF0aW9uIG9wdGlvbnMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBBQ1BJX0RFQlVHX09VVFBVVCAgICAtIFRoaXMgc3dpdGNoIGVuYWJsZXMgYWxsIHRoZSBkZWJ1ZyBmYWNpbGl0aWVzIG9mIHRoZQorICogICAgICAgICAgICAgICAgICAgICAgICBBQ1BJIHN1YnN5c3RlbS4gIFRoaXMgaW5jbHVkZXMgdGhlIERFQlVHX1BSSU5UIG91dHB1dAorICogICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnRzLiAgV2hlbiBkaXNhYmxlZCwgYWxsIERFQlVHX1BSSU5UCisgKiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudHMgYXJlIGNvbXBpbGVkIG91dC4KKyAqCisgKiBBQ1BJX0FQUExJQ0FUSU9OICAgICAtIFVzZSB0aGlzIHN3aXRjaCBpZiB0aGUgc3Vic3lzdGVtIGlzIGdvaW5nIHRvIGJlIHJ1bgorICogICAgICAgICAgICAgICAgICAgICAgICBhdCB0aGUgYXBwbGljYXRpb24gbGV2ZWwuCisgKgorICovCisKKy8qIFZlcnNpb24gc3RyaW5nICovCisKKyNkZWZpbmUgQUNQSV9DQV9WRVJTSU9OICAgICAgICAgICAgICAgICAweDIwMDUwMzA5CisKKy8qCisgKiBPUyBuYW1lLCB1c2VkIGZvciB0aGUgX09TIG9iamVjdC4gIFRoZSBfT1Mgb2JqZWN0IGlzIGVzc2VudGlhbGx5IG9ic29sZXRlLAorICogYnV0IHRoZXJlIGlzIGEgbGFyZ2UgYmFzZSBvZiBBU0wvQU1MIGNvZGUgaW4gZXhpc3RpbmcgbWFjaGluZXMgdGhhdCBjaGVjaworICogZm9yIHRoZSBzdHJpbmcgYmVsb3cuICBUaGUgdXNlIG9mIHRoaXMgc3RyaW5nIHVzdWFsbHkgZ3VhcmFudGVlcyB0aGF0CisgKiB0aGUgQVNMIHdpbGwgZXhlY3V0ZSBkb3duIHRoZSBtb3N0IHRlc3RlZCBjb2RlIHBhdGguICBBbHNvLCB0aGVyZSBpcyBzb21lCisgKiBjb2RlIHRoYXQgd2lsbCBub3QgZXhlY3V0ZSB0aGUgX09TSSBtZXRob2QgdW5sZXNzIF9PUyBtYXRjaGVzIHRoZSBzdHJpbmcKKyAqIGJlbG93LiAgVGhlcmVmb3JlLCBjaGFuZ2UgdGhpcyBzdHJpbmcgYXQgeW91ciBvd24gcmlzay4KKyAqLworI2RlZmluZSBBQ1BJX09TX05BTUUgICAgICAgICAgICAgICAgICAgICJNaWNyb3NvZnQgV2luZG93cyBOVCIKKworLyogTWF4aW11bSBvYmplY3RzIGluIHRoZSB2YXJpb3VzIG9iamVjdCBjYWNoZXMgKi8KKworI2RlZmluZSBBQ1BJX01BWF9TVEFURV9DQUNIRV9ERVBUSCAgICAgIDY0ICAgICAgICAgIC8qIFN0YXRlIG9iamVjdHMgKi8KKyNkZWZpbmUgQUNQSV9NQVhfUEFSU0VfQ0FDSEVfREVQVEggICAgICA5NiAgICAgICAgICAvKiBQYXJzZSB0cmVlIG9iamVjdHMgKi8KKyNkZWZpbmUgQUNQSV9NQVhfRVhUUEFSU0VfQ0FDSEVfREVQVEggICA2NCAgICAgICAgICAvKiBQYXJzZSB0cmVlIG9iamVjdHMgKi8KKyNkZWZpbmUgQUNQSV9NQVhfT0JKRUNUX0NBQ0hFX0RFUFRIICAgICA2NCAgICAgICAgICAvKiBJbnRlcnByZXRlciBvcGVyYW5kIG9iamVjdHMgKi8KKyNkZWZpbmUgQUNQSV9NQVhfV0FMS19DQUNIRV9ERVBUSCAgICAgICA0ICAgICAgICAgICAvKiBPYmplY3RzIGZvciBwYXJzZSB0cmVlIHdhbGtzICovCisKKy8qCisgKiBTaG91bGQgdGhlIHN1YnlzdGVtIGFib3J0IHRoZSBsb2FkaW5nIG9mIGFuIEFDUEkgdGFibGUgaWYgdGhlCisgKiB0YWJsZSBjaGVja3N1bSBpcyBpbmNvcnJlY3Q/CisgKi8KKyNkZWZpbmUgQUNQSV9DSEVDS1NVTV9BQk9SVCAgICAgICAgICAgICBGQUxTRQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBTdWJzeXN0ZW0gQ29uc3RhbnRzCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBWZXJzaW9uIG9mIEFDUEkgc3VwcG9ydGVkICovCisKKyNkZWZpbmUgQUNQSV9DQV9TVVBQT1JUX0xFVkVMICAgICAgICAgICAzCisKKy8qIFN0cmluZyBzaXplIGNvbnN0YW50cyAqLworCisjZGVmaW5lIEFDUElfTUFYX1NUUklOR19MRU5HVEggICAgICAgICAgNTEyCisjZGVmaW5lIEFDUElfUEFUSE5BTUVfTUFYICAgICAgICAgICAgICAgMjU2ICAgICAgICAgLyogQSBmdWxsIG5hbWVzcGFjZSBwYXRobmFtZSAqLworCisvKiBNYXhpbXVtIGNvdW50IGZvciBhIHNlbWFwaG9yZSBvYmplY3QgKi8KKworI2RlZmluZSBBQ1BJX01BWF9TRU1BUEhPUkVfQ09VTlQgICAgICAgIDI1NgorCisvKiBNYXggcmVmZXJlbmNlIGNvdW50IChmb3IgZGVidWcgb25seSkgKi8KKworI2RlZmluZSBBQ1BJX01BWF9SRUZFUkVOQ0VfQ09VTlQgICAgICAgIDB4NDAwCisKKy8qIFNpemUgb2YgY2FjaGVkIG1lbW9yeSBtYXBwaW5nIGZvciBzeXN0ZW0gbWVtb3J5IG9wZXJhdGlvbiByZWdpb24gKi8KKworI2RlZmluZSBBQ1BJX1NZU01FTV9SRUdJT05fV0lORE9XX1NJWkUgIDQwOTYKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQUNQSSBTcGVjaWZpY2F0aW9uIGNvbnN0YW50cyAoRG8gbm90IGNoYW5nZSB1bmxlc3MgdGhlIHNwZWNpZmljYXRpb24gY2hhbmdlcykKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIE51bWJlciBvZiBkaXN0aW5jdCBHUEUgcmVnaXN0ZXIgYmxvY2tzIGFuZCByZWdpc3RlciB3aWR0aCAqLworCisjZGVmaW5lIEFDUElfTUFYX0dQRV9CTE9DS1MgICAgICAgICAgICAgMgorI2RlZmluZSBBQ1BJX0dQRV9SRUdJU1RFUl9XSURUSCAgICAgICAgIDgKKworLyoKKyAqIE1ldGhvZCBpbmZvIChpbiBXQUxLX1NUQVRFKSwgY29udGFpbmluZyBsb2NhbCB2YXJpYWJsZXMgYW5kIGFyZ3VtZXRucworICovCisjZGVmaW5lIEFDUElfTUVUSE9EX05VTV9MT0NBTFMgICAgICAgICAgOAorI2RlZmluZSBBQ1BJX01FVEhPRF9NQVhfTE9DQUwgICAgICAgICAgIDcKKworI2RlZmluZSBBQ1BJX01FVEhPRF9OVU1fQVJHUyAgICAgICAgICAgIDcKKyNkZWZpbmUgQUNQSV9NRVRIT0RfTUFYX0FSRyAgICAgICAgICAgICA2CisKKy8qIE1heGltdW0gbGVuZ3RoIG9mIHJlc3VsdGluZyBzdHJpbmcgd2hlbiBjb252ZXJ0aW5nIGZyb20gYSBidWZmZXIgKi8KKworI2RlZmluZSBBQ1BJX01BWF9TVFJJTkdfQ09OVkVSU0lPTiAgICAgIDIwMAorCisvKiBMZW5ndGggb2YgX0hJRCwgX1VJRCwgYW5kIF9DSUQgdmFsdWVzICovCisKKyNkZWZpbmUgQUNQSV9ERVZJQ0VfSURfTEVOR1RIICAgICAgICAgICAweDA5CisjZGVmaW5lIEFDUElfTUFYX0NJRF9MRU5HVEggICAgICAgICAgICAgNDgKKworLyoKKyAqIE9wZXJhbmQgU3RhY2sgKGluIFdBTEtfU1RBVEUpLCBNdXN0IGJlIGxhcmdlIGVub3VnaCB0byBjb250YWluIE1FVEhPRF9NQVhfQVJHCisgKi8KKyNkZWZpbmUgQUNQSV9PQkpfTlVNX09QRVJBTkRTICAgICAgICAgICA4CisjZGVmaW5lIEFDUElfT0JKX01BWF9PUEVSQU5EICAgICAgICAgICAgNworCisvKiBOYW1lcyB3aXRoaW4gdGhlIG5hbWVzcGFjZSBhcmUgNCBieXRlcyBsb25nICovCisKKyNkZWZpbmUgQUNQSV9OQU1FX1NJWkUgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEFDUElfUEFUSF9TRUdNRU5UX0xFTkdUSCAgICAgICAgNSAgICAgICAgICAgLyogNCBjaGFycyBmb3IgbmFtZSArIDEgY2hhciBmb3Igc2VwYXJhdG9yICovCisjZGVmaW5lIEFDUElfUEFUSF9TRVBBUkFUT1IgICAgICAgICAgICAgJy4nCisKKy8qIENvbnN0YW50cyB1c2VkIGluIHNlYXJjaGluZyBmb3IgdGhlIFJTRFAgaW4gbG93IG1lbW9yeSAqLworCisjZGVmaW5lIEFDUElfRUJEQV9QVFJfTE9DQVRJT04gICAgICAgICAgMHgwMDAwMDQwRSAgICAgLyogUGh5c2ljYWwgQWRkcmVzcyAqLworI2RlZmluZSBBQ1BJX0VCREFfUFRSX0xFTkdUSCAgICAgICAgICAgIDIKKyNkZWZpbmUgQUNQSV9FQkRBX1dJTkRPV19TSVpFICAgICAgICAgICAxMDI0CisjZGVmaW5lIEFDUElfSElfUlNEUF9XSU5ET1dfQkFTRSAgICAgICAgMHgwMDBFMDAwMCAgICAgLyogUGh5c2ljYWwgQWRkcmVzcyAqLworI2RlZmluZSBBQ1BJX0hJX1JTRFBfV0lORE9XX1NJWkUgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgQUNQSV9SU0RQX1NDQU5fU1RFUCAgICAgICAgICAgICAxNgorCisvKiBPcGVyYXRpb24gcmVnaW9ucyAqLworCisjZGVmaW5lIEFDUElfTlVNX1BSRURFRklORURfUkVHSU9OUyAgICAgOAorI2RlZmluZSBBQ1BJX1VTRVJfUkVHSU9OX0JFR0lOICAgICAgICAgIDB4ODAKKworLyogTWF4aW11bSBzcGFjZV9pZHMgZm9yIE9wZXJhdGlvbiBSZWdpb25zICovCisKKyNkZWZpbmUgQUNQSV9NQVhfQUREUkVTU19TUEFDRSAgICAgICAgICAyNTUKKworLyogQXJyYXkgc2l6ZXMuICBVc2VkIGZvciByYW5nZSBjaGVja2luZyBhbHNvICovCisKKyNkZWZpbmUgQUNQSV9OVU1fQUNDRVNTX1RZUEVTICAgICAgICAgICA2CisjZGVmaW5lIEFDUElfTlVNX1VQREFURV9SVUxFUyAgICAgICAgICAgMworI2RlZmluZSBBQ1BJX05VTV9MT0NLX1JVTEVTICAgICAgICAgICAgIDIKKyNkZWZpbmUgQUNQSV9OVU1fTUFUQ0hfT1BTICAgICAgICAgICAgICA2CisjZGVmaW5lIEFDUElfTlVNX09QQ09ERVMgICAgICAgICAgICAgICAgMjU2CisjZGVmaW5lIEFDUElfTlVNX0ZJRUxEX05BTUVTICAgICAgICAgICAgMgorCisvKiBSU0RQIGNoZWNrc3VtcyAqLworCisjZGVmaW5lIEFDUElfUlNEUF9DSEVDS1NVTV9MRU5HVEggICAgICAgMjAKKyNkZWZpbmUgQUNQSV9SU0RQX1hDSEVDS1NVTV9MRU5HVEggICAgICAzNgorCisvKiBTTUJ1cyBiaWRpcmVjdGlvbmFsIGJ1ZmZlciBzaXplICovCisKKyNkZWZpbmUgQUNQSV9TTUJVU19CVUZGRVJfU0laRSAgICAgICAgICAzNAorCisvKiBOdW1iZXIgb2Ygc3RyaW5ncyBhc3NvY2lhdGVkIHdpdGggdGhlIF9PU0kgcmVzZXJ2ZWQgbWV0aG9kICovCisKKyNkZWZpbmUgQUNQSV9OVU1fT1NJX1NUUklOR1MgICAgICAgICAgICAxMAorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBBQ1BJIEFNTCBEZWJ1Z2dlcgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBBQ1BJX0RFQlVHR0VSX01BWF9BUkdTICAgICAgICAgIDggIC8qIE11c3QgYmUgbWF4IG1ldGhvZCBhcmdzICsgMSAqLworCisjZGVmaW5lIEFDUElfREVCVUdHRVJfQ09NTUFORF9QUk9NUFQgICAgJy0nCisjZGVmaW5lIEFDUElfREVCVUdHRVJfRVhFQ1VURV9QUk9NUFQgICAgJyUnCisKKworI2VuZGlmIC8qIF9BQ0NPTkZJR19IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY2RlYnVnLmggYi9pbmNsdWRlL2FjcGkvYWNkZWJ1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyM2IyYTUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FjcGkvYWNkZWJ1Zy5oCkBAIC0wLDAgKzEsNDcyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogTmFtZTogYWNkZWJ1Zy5oIC0gQUNQSS9BTUwgZGVidWdnZXIKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA1LCBSLiBCeXJvbiBNb29yZQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLAorICogICAgd2l0aG91dCBtb2RpZmljYXRpb24uCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgYXQgbWluaW11bSBhIGRpc2NsYWltZXIKKyAqICAgIHN1YnN0YW50aWFsbHkgc2ltaWxhciB0byB0aGUgIk5PIFdBUlJBTlRZIiBkaXNjbGFpbWVyIGJlbG93CisgKiAgICAoIkRpc2NsYWltZXIiKSBhbmQgYW55IHJlZGlzdHJpYnV0aW9uIG11c3QgYmUgY29uZGl0aW9uZWQgdXBvbgorICogICAgaW5jbHVkaW5nIGEgc3Vic3RhbnRpYWxseSBzaW1pbGFyIERpc2NsYWltZXIgcmVxdWlyZW1lbnQgZm9yIGZ1cnRoZXIKKyAqICAgIGJpbmFyeSByZWRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWVzIG9mIHRoZSBhYm92ZS1saXN0ZWQgY29weXJpZ2h0IGhvbGRlcnMgbm9yIHRoZSBuYW1lcworICogICAgb2YgYW55IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBOTyBXQVJSQU5UWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcKKyAqIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorICovCisKKyNpZm5kZWYgX19BQ0RFQlVHX0hfXworI2RlZmluZSBfX0FDREVCVUdfSF9fCisKKworI2RlZmluZSBBQ1BJX0RFQlVHX0JVRkZFUl9TSVpFICA0MTk2CisKK3N0cnVjdCBjb21tYW5kX2luZm8KK3sKKwljaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuYW1lOyAgICAgICAgICAvKiBDb21tYW5kIE5hbWUgKi8KKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbl9hcmdzOyAgICAgICAvKiBNaW5pbXVtIGFyZ3VtZW50cyByZXF1aXJlZCAqLworfTsKKworCitzdHJ1Y3QgYXJndW1lbnRfaW5mbworeworCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5hbWU7ICAgICAgICAgIC8qIEFyZ3VtZW50IE5hbWUgKi8KK307CisKKworI2RlZmluZSBQQVJBTV9MSVNUKHBsKSAgICAgICAgICAgICAgICAgIHBsCisKKyNkZWZpbmUgREJURVNUX09VVFBVVF9MRVZFTChsdmwpICAgICAgICBpZiAoYWNwaV9nYmxfZGJfb3B0X3ZlcmJvc2UpCisKKyNkZWZpbmUgVkVSQk9TRV9QUklOVChmcCkgICAgICAgICAgICAgICBEQlRFU1RfT1VUUFVUX0xFVkVMKGx2bCkge1wKKwkJCSAgYWNwaV9vc19wcmludGYgUEFSQU1fTElTVChmcCk7fQorCisjZGVmaW5lIEVYX05PX1NJTkdMRV9TVEVQICAgICAgICAgICAgICAgMQorI2RlZmluZSBFWF9TSU5HTEVfU1RFUCAgICAgICAgICAgICAgICAgIDIKKworCisvKiBQcm90b3R5cGVzICovCisKKworLyoKKyAqIGRieGZhY2UgLSBleHRlcm5hbCBkZWJ1Z2dlciBpbnRlcmZhY2VzCisgKi8KKworYWNwaV9zdGF0dXMKK2FjcGlfZGJfaW5pdGlhbGl6ZSAoCisJdm9pZCk7CisKK3ZvaWQKK2FjcGlfZGJfdGVybWluYXRlICgKKwl2b2lkKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfZGJfc2luZ2xlX3N0ZXAgKAorCXN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgICAgICAgICAgKndhbGtfc3RhdGUsCisJdW5pb24gYWNwaV9wYXJzZV9vYmplY3QgICAgICAgICAqb3AsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcF90eXBlKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfZGJfc3RhcnRfY29tbWFuZCAoCisJc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAgICAgICAgICAqd2Fsa19zdGF0ZSwKKwl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAgICAgICAgICpvcCk7CisKK3ZvaWQKK2FjcGlfZGJfbWV0aG9kX2VuZCAoCisJc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAgICAgICAgICAqd2Fsa19zdGF0ZSk7CisKKworLyoKKyAqIGRiY21kcyAtIGRlYnVnIGNvbW1hbmRzIGFuZCBvdXRwdXQgcm91dGluZXMKKyAqLworCithY3BpX3N0YXR1cworYWNwaV9kYl9kaXNhc3NlbWJsZV9tZXRob2QgKAorCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5hbWUpOworCit2b2lkCithY3BpX2RiX2Rpc3BsYXlfdGFibGVfaW5mbyAoCisJY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdGFibGVfYXJnKTsKKwordm9pZAorYWNwaV9kYl91bmxvYWRfYWNwaV90YWJsZSAoCisJY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdGFibGVfYXJnLAorCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmluc3RhbmNlX2FyZyk7CisKK3ZvaWQKK2FjcGlfZGJfc2V0X21ldGhvZF9icmVha3BvaW50ICgKKwljaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICpsb2NhdGlvbiwKKwlzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICAgICAgICAgICp3YWxrX3N0YXRlLAorCXVuaW9uIGFjcGlfcGFyc2Vfb2JqZWN0ICAgICAgICAgKm9wKTsKKwordm9pZAorYWNwaV9kYl9zZXRfbWV0aG9kX2NhbGxfYnJlYWtwb2ludCAoCisJdW5pb24gYWNwaV9wYXJzZV9vYmplY3QgICAgICAgICAqb3ApOworCit2b2lkCithY3BpX2RiX2Rpc2Fzc2VtYmxlX2FtbCAoCisJY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGVtZW50cywKKwl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAgICAgICAgICpvcCk7CisKK3ZvaWQKK2FjcGlfZGJfZHVtcF9uYW1lc3BhY2UgKAorCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnN0YXJ0X2FyZywKKwljaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICpkZXB0aF9hcmcpOworCit2b2lkCithY3BpX2RiX2R1bXBfbmFtZXNwYWNlX2J5X293bmVyICgKKwljaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICpvd25lcl9hcmcsCisJY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqZGVwdGhfYXJnKTsKKwordm9pZAorYWNwaV9kYl9zZW5kX25vdGlmeSAoCisJY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmFtZSwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlKTsKKwordm9pZAorYWNwaV9kYl9zZXRfbWV0aG9kX2RhdGEgKAorCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnR5cGVfYXJnLAorCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmluZGV4X2FyZywKKwljaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICp2YWx1ZV9hcmcpOworCithY3BpX3N0YXR1cworYWNwaV9kYl9kaXNwbGF5X29iamVjdHMgKAorCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm9ial90eXBlX2FyZywKKwljaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICpkaXNwbGF5X2NvdW50X2FyZyk7CisKK2FjcGlfc3RhdHVzCithY3BpX2RiX2ZpbmRfbmFtZV9pbl9uYW1lc3BhY2UgKAorCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5hbWVfYXJnKTsKKwordm9pZAorYWNwaV9kYl9zZXRfc2NvcGUgKAorCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5hbWUpOworCithY3BpX3N0YXR1cworYWNwaV9kYl9zbGVlcCAoCisJY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqb2JqZWN0X2FyZyk7CisKK3ZvaWQKK2FjcGlfZGJfZmluZF9yZWZlcmVuY2VzICgKKwljaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICpvYmplY3RfYXJnKTsKKwordm9pZAorYWNwaV9kYl9kaXNwbGF5X2xvY2tzICh2b2lkKTsKKworCit2b2lkCithY3BpX2RiX2Rpc3BsYXlfcmVzb3VyY2VzICgKKwljaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICpvYmplY3RfYXJnKTsKKwordm9pZAorYWNwaV9kYl9kaXNwbGF5X2dwZXMgKHZvaWQpOworCit2b2lkCithY3BpX2RiX2NoZWNrX2ludGVncml0eSAoCisJdm9pZCk7CisKK2FjcGlfc3RhdHVzCithY3BpX2RiX2ludGVncml0eV93YWxrICgKKwlhY3BpX2hhbmRsZSAgICAgICAgICAgICAgICAgICAgIG9ial9oYW5kbGUsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXN0aW5nX2xldmVsLAorCXZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmNvbnRleHQsCisJdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKnJldHVybl92YWx1ZSk7CisKK2FjcGlfc3RhdHVzCithY3BpX2RiX3dhbGtfYW5kX21hdGNoX25hbWUgKAorCWFjcGlfaGFuZGxlICAgICAgICAgICAgICAgICAgICAgb2JqX2hhbmRsZSwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lc3RpbmdfbGV2ZWwsCisJdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqY29udGV4dCwKKwl2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqcmV0dXJuX3ZhbHVlKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfZGJfd2Fsa19mb3JfcmVmZXJlbmNlcyAoCisJYWNwaV9oYW5kbGUgICAgICAgICAgICAgICAgICAgICBvYmpfaGFuZGxlLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVzdGluZ19sZXZlbCwKKwl2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICpjb250ZXh0LAorCXZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKipyZXR1cm5fdmFsdWUpOworCithY3BpX3N0YXR1cworYWNwaV9kYl93YWxrX2Zvcl9zcGVjaWZpY19vYmplY3RzICgKKwlhY3BpX2hhbmRsZSAgICAgICAgICAgICAgICAgICAgIG9ial9oYW5kbGUsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXN0aW5nX2xldmVsLAorCXZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmNvbnRleHQsCisJdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKnJldHVybl92YWx1ZSk7CisKK3ZvaWQKK2FjcGlfZGJfZ2VuZXJhdGVfZ3BlICgKKwljaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICpncGVfYXJnLAorCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmJsb2NrX2FyZyk7CisKKy8qCisgKiBkYmRpc3BseSAtIGRlYnVnIGRpc3BsYXkgY29tbWFuZHMKKyAqLworCit2b2lkCithY3BpX2RiX2Rpc3BsYXlfbWV0aG9kX2luZm8gKAorCXVuaW9uIGFjcGlfcGFyc2Vfb2JqZWN0ICAgICAgICAgKm9wKTsKKwordm9pZAorYWNwaV9kYl9kZWNvZGVfYW5kX2Rpc3BsYXlfb2JqZWN0ICgKKwljaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICp0YXJnZXQsCisJY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqb3V0cHV0X3R5cGUpOworCit2b2lkCithY3BpX2RiX2Rpc3BsYXlfcmVzdWx0X29iamVjdCAoCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAqb2JqX2Rlc2MsCisJc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAgICAgICAgICAqd2Fsa19zdGF0ZSk7CisKK2FjcGlfc3RhdHVzCithY3BpX2RiX2Rpc3BsYXlfYWxsX21ldGhvZHMgKAorCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmRpc3BsYXlfY291bnRfYXJnKTsKKwordm9pZAorYWNwaV9kYl9kaXNwbGF5X2FyZ3VtZW50cyAoCisJdm9pZCk7CisKK3ZvaWQKK2FjcGlfZGJfZGlzcGxheV9sb2NhbHMgKAorCXZvaWQpOworCit2b2lkCithY3BpX2RiX2Rpc3BsYXlfcmVzdWx0cyAoCisJdm9pZCk7CisKK3ZvaWQKK2FjcGlfZGJfZGlzcGxheV9jYWxsaW5nX3RyZWUgKAorCXZvaWQpOworCit2b2lkCithY3BpX2RiX2Rpc3BsYXlfb2JqZWN0X3R5cGUgKAorCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm9iamVjdF9hcmcpOworCit2b2lkCithY3BpX2RiX2Rpc3BsYXlfYXJndW1lbnRfb2JqZWN0ICgKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICpvYmpfZGVzYywKKwlzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICAgICAgICAgICp3YWxrX3N0YXRlKTsKKwordm9pZAorYWNwaV9kYl9kdW1wX3BhcnNlcl9kZXNjcmlwdG9yICgKKwl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAgICAgICAgICpvcCk7CisKK3ZvaWQgKgorYWNwaV9kYl9nZXRfcG9pbnRlciAoCisJdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdGFyZ2V0KTsKKworCisvKgorICogZGJleGVjIC0gZGVidWdnZXIgY29udHJvbCBtZXRob2QgZXhlY3V0aW9uCisgKi8KKwordm9pZAorYWNwaV9kYl9leGVjdXRlICgKKwljaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuYW1lLAorCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiphcmdzLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MpOworCit2b2lkCithY3BpX2RiX2NyZWF0ZV9leGVjdXRpb25fdGhyZWFkcyAoCisJY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbnVtX3RocmVhZHNfYXJnLAorCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm51bV9sb29wc19hcmcsCisJY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbWV0aG9kX25hbWVfYXJnKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfZGJfZXhlY3V0ZV9tZXRob2QgKAorCXN0cnVjdCBhY3BpX2RiX21ldGhvZF9pbmZvICAgICAgKmluZm8sCisJc3RydWN0IGFjcGlfYnVmZmVyICAgICAgICAgICAgICAqcmV0dXJuX29iaik7CisKK3ZvaWQKK2FjcGlfZGJfZXhlY3V0ZV9zZXR1cCAoCisJc3RydWN0IGFjcGlfZGJfbWV0aG9kX2luZm8gICAgICAqaW5mbyk7CisKK3UzMgorYWNwaV9kYl9nZXRfb3V0c3RhbmRpbmdfYWxsb2NhdGlvbnMgKAorCXZvaWQpOworCit2b2lkIEFDUElfU1lTVEVNX1hGQUNFCithY3BpX2RiX21ldGhvZF90aHJlYWQgKAorCXZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmNvbnRleHQpOworCithY3BpX3N0YXR1cworYWNwaV9kYl9leGVjdXRpb25fd2FsayAoCisJYWNwaV9oYW5kbGUgICAgICAgICAgICAgICAgICAgICBvYmpfaGFuZGxlLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVzdGluZ19sZXZlbCwKKwl2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICpjb250ZXh0LAorCXZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKipyZXR1cm5fdmFsdWUpOworCisKKy8qCisgKiBkYmZpbGVpbyAtIERlYnVnZ2VyIGZpbGUgSS9PIGNvbW1hbmRzCisgKi8KKworYWNwaV9vYmplY3RfdHlwZQorYWNwaV9kYl9tYXRjaF9hcmd1bWVudCAoCisJY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdXNlcl9hcmd1bWVudCwKKwlzdHJ1Y3QgYXJndW1lbnRfaW5mbyAgICAgICAgICAgICphcmd1bWVudHMpOworCithY3BpX3N0YXR1cworYWVfbG9jYWxfbG9hZF90YWJsZSAoCisJc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICAgICAgICAqdGFibGVfcHRyKTsKKwordm9pZAorYWNwaV9kYl9jbG9zZV9kZWJ1Z19maWxlICgKKwl2b2lkKTsKKwordm9pZAorYWNwaV9kYl9vcGVuX2RlYnVnX2ZpbGUgKAorCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5hbWUpOworCithY3BpX3N0YXR1cworYWNwaV9kYl9sb2FkX2FjcGlfdGFibGUgKAorCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmZpbGVuYW1lKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfZGJfZ2V0X3RhYmxlX2Zyb21fZmlsZSAoCisJY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqZmlsZW5hbWUsCisJc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICAgICAgICAqKnRhYmxlKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfZGJfcmVhZF90YWJsZV9mcm9tX2ZpbGUgKAorCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmZpbGVuYW1lLAorCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAgICAgICAgKip0YWJsZSk7CisKKy8qCisgKiBkYmhpc3RyeSAtIGRlYnVnZ2VyIEhJU1RPUlkgY29tbWFuZAorICovCisKK3ZvaWQKK2FjcGlfZGJfYWRkX3RvX2hpc3RvcnkgKAorCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmNvbW1hbmRfbGluZSk7CisKK3ZvaWQKK2FjcGlfZGJfZGlzcGxheV9oaXN0b3J5ICh2b2lkKTsKKworY2hhciAqCithY3BpX2RiX2dldF9mcm9tX2hpc3RvcnkgKAorCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmNvbW1hbmRfbnVtX2FyZyk7CisKKworLyoKKyAqIGRiaW5wdXQgLSB1c2VyIGZyb250LWVuZCB0byB0aGUgQU1MIGRlYnVnZ2VyCisgKi8KKworYWNwaV9zdGF0dXMKK2FjcGlfZGJfY29tbWFuZF9kaXNwYXRjaCAoCisJY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqaW5wdXRfYnVmZmVyLAorCXN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgICAgICAgICAgKndhbGtfc3RhdGUsCisJdW5pb24gYWNwaV9wYXJzZV9vYmplY3QgICAgICAgICAqb3ApOworCit2b2lkIEFDUElfU1lTVEVNX1hGQUNFCithY3BpX2RiX2V4ZWN1dGVfdGhyZWFkICgKKwl2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICpjb250ZXh0KTsKKwordm9pZAorYWNwaV9kYl9kaXNwbGF5X2hlbHAgKAorCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmhlbHBfdHlwZSk7CisKK2NoYXIgKgorYWNwaV9kYl9nZXRfbmV4dF90b2tlbiAoCisJY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqc3RyaW5nLAorCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKipuZXh0KTsKKwordTMyCithY3BpX2RiX2dldF9saW5lICgKKwljaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICppbnB1dF9idWZmZXIpOworCit1MzIKK2FjcGlfZGJfbWF0Y2hfY29tbWFuZCAoCisJY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdXNlcl9jb21tYW5kKTsKKwordm9pZAorYWNwaV9kYl9zaW5nbGVfdGhyZWFkICgKKwl2b2lkKTsKKworCisvKgorICogZGJzdGF0cyAtIEdlbmVyYXRpb24gYW5kIGRpc3BsYXkgb2YgQUNQSSB0YWJsZSBzdGF0aXN0aWNzCisgKi8KKwordm9pZAorYWNwaV9kYl9nZW5lcmF0ZV9zdGF0aXN0aWNzICgKKwl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAgICAgICAgICpyb290LAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfbWV0aG9kKTsKKworCithY3BpX3N0YXR1cworYWNwaV9kYl9kaXNwbGF5X3N0YXRpc3RpY3MgKAorCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnR5cGVfYXJnKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfZGJfY2xhc3NpZnlfb25lX29iamVjdCAoCisJYWNwaV9oYW5kbGUgICAgICAgICAgICAgICAgICAgICBvYmpfaGFuZGxlLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVzdGluZ19sZXZlbCwKKwl2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICpjb250ZXh0LAorCXZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKipyZXR1cm5fdmFsdWUpOworCit2b2lkCithY3BpX2RiX2NvdW50X25hbWVzcGFjZV9vYmplY3RzICgKKwl2b2lkKTsKKwordm9pZAorYWNwaV9kYl9lbnVtZXJhdGVfb2JqZWN0ICgKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICpvYmpfZGVzYyk7CisKKworLyoKKyAqIGRidXRpbHMgLSBBTUwgZGVidWdnZXIgdXRpbGl0aWVzCisgKi8KKwordm9pZAorYWNwaV9kYl9zZXRfb3V0cHV0X2Rlc3RpbmF0aW9uICgKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlKTsKKwordm9pZAorYWNwaV9kYl9kdW1wX2J1ZmZlciAoCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzKTsKKwordm9pZAorYWNwaV9kYl9kdW1wX29iamVjdCAoCisJdW5pb24gYWNwaV9vYmplY3QgICAgICAgICAgICAgICAqb2JqX2Rlc2MsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbCk7CisKK3ZvaWQKK2FjcGlfZGJfcHJlcF9uYW1lc3RyaW5nICgKKwljaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuYW1lKTsKKworCithY3BpX3N0YXR1cworYWNwaV9kYl9zZWNvbmRfcGFzc19wYXJzZSAoCisJdW5pb24gYWNwaV9wYXJzZV9vYmplY3QgICAgICAgICAqcm9vdCk7CisKK3N0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICoKK2FjcGlfZGJfbG9jYWxfbnNfbG9va3VwICgKKwljaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuYW1lKTsKKworCisjZW5kaWYgIC8qIF9fQUNERUJVR19IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY2Rpc2FzbS5oIGIvaW5jbHVkZS9hY3BpL2FjZGlzYXNtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZkOTA3ZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYWNwaS9hY2Rpc2FzbS5oCkBAIC0wLDAgKzEsNDI4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogTmFtZTogYWNkaXNhc20uaCAtIEFNTCBkaXNhc3NlbWJsZXIKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA1LCBSLiBCeXJvbiBNb29yZQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLAorICogICAgd2l0aG91dCBtb2RpZmljYXRpb24uCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgYXQgbWluaW11bSBhIGRpc2NsYWltZXIKKyAqICAgIHN1YnN0YW50aWFsbHkgc2ltaWxhciB0byB0aGUgIk5PIFdBUlJBTlRZIiBkaXNjbGFpbWVyIGJlbG93CisgKiAgICAoIkRpc2NsYWltZXIiKSBhbmQgYW55IHJlZGlzdHJpYnV0aW9uIG11c3QgYmUgY29uZGl0aW9uZWQgdXBvbgorICogICAgaW5jbHVkaW5nIGEgc3Vic3RhbnRpYWxseSBzaW1pbGFyIERpc2NsYWltZXIgcmVxdWlyZW1lbnQgZm9yIGZ1cnRoZXIKKyAqICAgIGJpbmFyeSByZWRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWVzIG9mIHRoZSBhYm92ZS1saXN0ZWQgY29weXJpZ2h0IGhvbGRlcnMgbm9yIHRoZSBuYW1lcworICogICAgb2YgYW55IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBOTyBXQVJSQU5UWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcKKyAqIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorICovCisKKyNpZm5kZWYgX19BQ0RJU0FTTV9IX18KKyNkZWZpbmUgX19BQ0RJU0FTTV9IX18KKworI2luY2x1ZGUgImFtbHJlc3JjLmgiCisKKworI2RlZmluZSBCTE9DS19OT05FICAgICAgICAgICAgICAwCisjZGVmaW5lIEJMT0NLX1BBUkVOICAgICAgICAgICAgIDEKKyNkZWZpbmUgQkxPQ0tfQlJBQ0UgICAgICAgICAgICAgMgorI2RlZmluZSBCTE9DS19DT01NQV9MSVNUICAgICAgICA0CisKK3N0cnVjdCBhY3BpX2V4dGVybmFsX2xpc3QKK3sKKwljaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcGF0aDsKKwlzdHJ1Y3QgYWNwaV9leHRlcm5hbF9saXN0ICAgICAgICAgICAqbmV4dDsKK307CisKK2V4dGVybiBzdHJ1Y3QgYWNwaV9leHRlcm5hbF9saXN0ICAgICAgICAqYWNwaV9nYmxfZXh0ZXJuYWxfbGlzdDsKK2V4dGVybiBjb25zdCBjaGFyICAgICAgICAgICAgICAgICAgICAgICAqYWNwaV9nYmxfaW9fZGVjb2RlWzJdOworZXh0ZXJuIGNvbnN0IGNoYXIgICAgICAgICAgICAgICAgICAgICAgICphY3BpX2dibF93b3JkX2RlY29kZVs0XTsKK2V4dGVybiBjb25zdCBjaGFyICAgICAgICAgICAgICAgICAgICAgICAqYWNwaV9nYmxfY29uc3VtZV9kZWNvZGVbMl07CitleHRlcm4gY29uc3QgY2hhciAgICAgICAgICAgICAgICAgICAgICAgKmFjcGlfZ2JsX21pbl9kZWNvZGVbMl07CitleHRlcm4gY29uc3QgY2hhciAgICAgICAgICAgICAgICAgICAgICAgKmFjcGlfZ2JsX21heF9kZWNvZGVbMl07CitleHRlcm4gY29uc3QgY2hhciAgICAgICAgICAgICAgICAgICAgICAgKmFjcGlfZ2JsX0RFQ2RlY29kZVsyXTsKK2V4dGVybiBjb25zdCBjaGFyICAgICAgICAgICAgICAgICAgICAgICAqYWNwaV9nYmxfUk5HZGVjb2RlWzRdOworZXh0ZXJuIGNvbnN0IGNoYXIgICAgICAgICAgICAgICAgICAgICAgICphY3BpX2dibF9NRU1kZWNvZGVbNF07CitleHRlcm4gY29uc3QgY2hhciAgICAgICAgICAgICAgICAgICAgICAgKmFjcGlfZ2JsX1JXZGVjb2RlWzJdOworZXh0ZXJuIGNvbnN0IGNoYXIgICAgICAgICAgICAgICAgICAgICAgICphY3BpX2dibF9pcnFfZGVjb2RlWzJdOworZXh0ZXJuIGNvbnN0IGNoYXIgICAgICAgICAgICAgICAgICAgICAgICphY3BpX2dibF9IRWRlY29kZVsyXTsKK2V4dGVybiBjb25zdCBjaGFyICAgICAgICAgICAgICAgICAgICAgICAqYWNwaV9nYmxfTExkZWNvZGVbMl07CitleHRlcm4gY29uc3QgY2hhciAgICAgICAgICAgICAgICAgICAgICAgKmFjcGlfZ2JsX1NIUmRlY29kZVsyXTsKK2V4dGVybiBjb25zdCBjaGFyICAgICAgICAgICAgICAgICAgICAgICAqYWNwaV9nYmxfVFlQZGVjb2RlWzRdOworZXh0ZXJuIGNvbnN0IGNoYXIgICAgICAgICAgICAgICAgICAgICAgICphY3BpX2dibF9CTWRlY29kZVsyXTsKK2V4dGVybiBjb25zdCBjaGFyICAgICAgICAgICAgICAgICAgICAgICAqYWNwaV9nYmxfU0laZGVjb2RlWzRdOworZXh0ZXJuIGNvbnN0IGNoYXIgICAgICAgICAgICAgICAgICAgICAgICphY3BpX2dibF9UVFBkZWNvZGVbMl07CitleHRlcm4gY29uc3QgY2hhciAgICAgICAgICAgICAgICAgICAgICAgKmFjcGlfZ2JsX01UUGRlY29kZVs0XTsKK2V4dGVybiBjb25zdCBjaGFyICAgICAgICAgICAgICAgICAgICAgICAqYWNwaV9nYmxfVFJTZGVjb2RlWzJdOworCisKK2V4dGVybiBjb25zdCBjaGFyICAgICAgICAgICAgICAgICAgICAgICAqYWNwaV9nYmxfbG9ja19ydWxlW0FDUElfTlVNX0xPQ0tfUlVMRVNdOworZXh0ZXJuIGNvbnN0IGNoYXIgICAgICAgICAgICAgICAgICAgICAgICphY3BpX2dibF9hY2Nlc3NfdHlwZXNbQUNQSV9OVU1fQUNDRVNTX1RZUEVTXTsKK2V4dGVybiBjb25zdCBjaGFyICAgICAgICAgICAgICAgICAgICAgICAqYWNwaV9nYmxfdXBkYXRlX3J1bGVzW0FDUElfTlVNX1VQREFURV9SVUxFU107CitleHRlcm4gY29uc3QgY2hhciAgICAgICAgICAgICAgICAgICAgICAgKmFjcGlfZ2JsX21hdGNoX29wc1tBQ1BJX05VTV9NQVRDSF9PUFNdOworCisKK3N0cnVjdCBhY3BpX29wX3dhbGtfaW5mbworeworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWw7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRfb2Zmc2V0OworfTsKKwordHlwZWRlZgorYWNwaV9zdGF0dXMgKCphc2xfd2Fsa19jYWxsYmFjaykgKAorCXVuaW9uIGFjcGlfcGFyc2Vfb2JqZWN0ICAgICAgICAgICAgICpvcCwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbCwKKwl2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqY29udGV4dCk7CisKKworLyoKKyAqIGRtd2FsaworICovCisKK3ZvaWQKK2FjcGlfZG1fd2Fsa19wYXJzZV90cmVlICgKKwl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAgICAgICAgICpvcCwKKwlhc2xfd2Fsa19jYWxsYmFjayAgICAgICAgICAgICAgIGRlc2NlbmRpbmdfY2FsbGJhY2ssCisJYXNsX3dhbGtfY2FsbGJhY2sgICAgICAgICAgICAgICBhc2NlbmRpbmdfY2FsbGJhY2ssCisJdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqY29udGV4dCk7CisKK2FjcGlfc3RhdHVzCithY3BpX2RtX2Rlc2NlbmRpbmdfb3AgKAorCXVuaW9uIGFjcGlfcGFyc2Vfb2JqZWN0ICAgICAgICAgKm9wLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWwsCisJdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqY29udGV4dCk7CisKK2FjcGlfc3RhdHVzCithY3BpX2RtX2FzY2VuZGluZ19vcCAoCisJdW5pb24gYWNwaV9wYXJzZV9vYmplY3QgICAgICAgICAqb3AsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbCwKKwl2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICpjb250ZXh0KTsKKworCisvKgorICogZG1vcGNvZGUKKyAqLworCit2b2lkCithY3BpX2RtX3ZhbGlkYXRlX25hbWUgKAorCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5hbWUsCisJdW5pb24gYWNwaV9wYXJzZV9vYmplY3QgICAgICAgICAqb3ApOworCit1MzIKK2FjcGlfZG1fZHVtcF9uYW1lICgKKwljaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuYW1lKTsKKwordm9pZAorYWNwaV9kbV91bmljb2RlICgKKwl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAgICAgICAgICpvcCk7CisKK3ZvaWQKK2FjcGlfZG1fZGlzYXNzZW1ibGUgKAorCXN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgICAgICAgICAgKndhbGtfc3RhdGUsCisJdW5pb24gYWNwaV9wYXJzZV9vYmplY3QgICAgICAgICAqb3JpZ2luLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtX29wY29kZXMpOworCit2b2lkCithY3BpX2RtX25hbWVzdHJpbmcgKAorCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5hbWUpOworCit2b2lkCithY3BpX2RtX2Rpc3BsYXlfcGF0aCAoCisJdW5pb24gYWNwaV9wYXJzZV9vYmplY3QgICAgICAgICAqb3ApOworCit2b2lkCithY3BpX2RtX2Rpc2Fzc2VtYmxlX29uZV9vcCAoCisJc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAgICAgICAgICAqd2Fsa19zdGF0ZSwKKwlzdHJ1Y3QgYWNwaV9vcF93YWxrX2luZm8gICAgICAgICppbmZvLAorCXVuaW9uIGFjcGlfcGFyc2Vfb2JqZWN0ICAgICAgICAgKm9wKTsKKwordm9pZAorYWNwaV9kbV9kZWNvZGVfaW50ZXJuYWxfb2JqZWN0ICgKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICpvYmpfZGVzYyk7CisKK3UzMgorYWNwaV9kbV9ibG9ja190eXBlICgKKwl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAgICAgICAgICpvcCk7CisKK3UzMgorYWNwaV9kbV9saXN0X3R5cGUgKAorCXVuaW9uIGFjcGlfcGFyc2Vfb2JqZWN0ICAgICAgICAgKm9wKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfcHNfZGlzcGxheV9vYmplY3RfcGF0aG5hbWUgKAorCXN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgICAgICAgICAgKndhbGtfc3RhdGUsCisJdW5pb24gYWNwaV9wYXJzZV9vYmplY3QgICAgICAgICAqb3ApOworCit2b2lkCithY3BpX2RtX21ldGhvZF9mbGFncyAoCisJdW5pb24gYWNwaV9wYXJzZV9vYmplY3QgICAgICAgICAqb3ApOworCit2b2lkCithY3BpX2RtX2ZpZWxkX2ZsYWdzICgKKwl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAgICAgICAgICpvcCk7CisKK3ZvaWQKK2FjcGlfZG1fYWRkcmVzc19zcGFjZSAoCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFjZV9pZCk7CisKK3ZvaWQKK2FjcGlfZG1fcmVnaW9uX2ZsYWdzICgKKwl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAgICAgICAgICpvcCk7CisKK3ZvaWQKK2FjcGlfZG1fbWF0Y2hfb3AgKAorCXVuaW9uIGFjcGlfcGFyc2Vfb2JqZWN0ICAgICAgICAgKm9wKTsKKwordm9pZAorYWNwaV9kbV9tYXRjaF9rZXl3b3JkICgKKwl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAgICAgICAgICpvcCk7CisKK3U4CithY3BpX2RtX2NvbW1hX2lmX2xpc3RfbWVtYmVyICgKKwl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAgICAgICAgICpvcCk7CisKK3ZvaWQKK2FjcGlfZG1fY29tbWFfaWZfZmllbGRfbWVtYmVyICgKKwl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAgICAgICAgICpvcCk7CisKKworLyoKKyAqIGRtb2JqZWN0CisgKi8KKwordm9pZAorYWNwaV9kbV9kZWNvZGVfbm9kZSAoCisJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgICAgICAqbm9kZSk7CisKK3ZvaWQKK2FjcGlfZG1fZGlzcGxheV9pbnRlcm5hbF9vYmplY3QgKAorCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgKm9ial9kZXNjLAorCXN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgICAgICAgICAgKndhbGtfc3RhdGUpOworCit2b2lkCithY3BpX2RtX2Rpc3BsYXlfYXJndW1lbnRzICgKKwlzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICAgICAgICAgICp3YWxrX3N0YXRlKTsKKwordm9pZAorYWNwaV9kbV9kaXNwbGF5X2xvY2FscyAoCisJc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAgICAgICAgICAqd2Fsa19zdGF0ZSk7CisKK3ZvaWQKK2FjcGlfZG1fZHVtcF9tZXRob2RfaW5mbyAoCisJYWNwaV9zdGF0dXMgICAgICAgICAgICAgICAgICAgICBzdGF0dXMsCisJc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAgICAgICAgICAqd2Fsa19zdGF0ZSwKKwl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAgICAgICAgICpvcCk7CisKKworLyoKKyAqIGRtYnVmZmVyCisgKi8KKwordm9pZAorYWNwaV9pc19laXNhX2lkICgKKwl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAgICAgICAgICpvcCk7CisKK3ZvaWQKK2FjcGlfZG1fZWlzYV9pZCAoCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGVkX2lkKTsKKwordTgKK2FjcGlfZG1faXNfdW5pY29kZV9idWZmZXIgKAorCXVuaW9uIGFjcGlfcGFyc2Vfb2JqZWN0ICAgICAgICAgKm9wKTsKKwordTgKK2FjcGlfZG1faXNfc3RyaW5nX2J1ZmZlciAoCisJdW5pb24gYWNwaV9wYXJzZV9vYmplY3QgICAgICAgICAqb3ApOworCisKKy8qCisgKiBkbXJlc3JjCisgKi8KKwordm9pZAorYWNwaV9kbV9kaXNhc21fYnl0ZV9saXN0ICgKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsLAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmJ5dGVfZGF0YSwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVfY291bnQpOworCit2b2lkCithY3BpX2RtX2J5dGVfbGlzdCAoCisJc3RydWN0IGFjcGlfb3Bfd2Fsa19pbmZvICAgICAgICAqaW5mbywKKwl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAgICAgICAgICpvcCk7CisKK3ZvaWQKK2FjcGlfZG1fcmVzb3VyY2VfZGVzY3JpcHRvciAoCisJc3RydWN0IGFjcGlfb3Bfd2Fsa19pbmZvICAgICAgICAqaW5mbywKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpieXRlX2RhdGEsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlX2NvdW50KTsKKwordTgKK2FjcGlfZG1faXNfcmVzb3VyY2VfZGVzY3JpcHRvciAoCisJdW5pb24gYWNwaV9wYXJzZV9vYmplY3QgICAgICAgICAqb3ApOworCit2b2lkCithY3BpX2RtX2luZGVudCAoCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbCk7CisKK3ZvaWQKK2FjcGlfZG1fYml0X2xpc3QgKAorCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzayk7CisKK3ZvaWQKK2FjcGlfZG1fZGVjb2RlX2F0dHJpYnV0ZSAoCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUpOworCisvKgorICogZG1yZXNyY2wKKyAqLworCit2b2lkCithY3BpX2RtX2lvX2ZsYWdzICgKKwkJdTggICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzKTsKKwordm9pZAorYWNwaV9kbV9tZW1vcnlfZmxhZ3MgKAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MsCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpY19mbGFncyk7CisKK3ZvaWQKK2FjcGlfZG1fd29yZF9kZXNjcmlwdG9yICgKKwlzdHJ1Y3QgYXNsX3dvcmRfYWRkcmVzc19kZXNjICAgICpyZXNvdXJjZSwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsKTsKKwordm9pZAorYWNwaV9kbV9kd29yZF9kZXNjcmlwdG9yICgKKwlzdHJ1Y3QgYXNsX2R3b3JkX2FkZHJlc3NfZGVzYyAgICpyZXNvdXJjZSwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsKTsKKwordm9pZAorYWNwaV9kbV9leHRlbmRlZF9kZXNjcmlwdG9yICgKKwlzdHJ1Y3QgYXNsX2V4dGVuZGVkX2FkZHJlc3NfZGVzYyAgICpyZXNvdXJjZSwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsKTsKKwordm9pZAorYWNwaV9kbV9xd29yZF9kZXNjcmlwdG9yICgKKwlzdHJ1Y3QgYXNsX3F3b3JkX2FkZHJlc3NfZGVzYyAgICpyZXNvdXJjZSwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsKTsKKwordm9pZAorYWNwaV9kbV9tZW1vcnkyNF9kZXNjcmlwdG9yICgKKwlzdHJ1Y3QgYXNsX21lbW9yeV8yNF9kZXNjICAgICAgICpyZXNvdXJjZSwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsKTsKKwordm9pZAorYWNwaV9kbV9tZW1vcnkzMl9kZXNjcmlwdG9yICgKKwlzdHJ1Y3QgYXNsX21lbW9yeV8zMl9kZXNjICAgICAgICpyZXNvdXJjZSwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsKTsKKwordm9pZAorYWNwaV9kbV9maXhlZF9tZW0zMl9kZXNjcmlwdG9yICgKKwlzdHJ1Y3QgYXNsX2ZpeGVkX21lbW9yeV8zMl9kZXNjICpyZXNvdXJjZSwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsKTsKKwordm9pZAorYWNwaV9kbV9nZW5lcmljX3JlZ2lzdGVyX2Rlc2NyaXB0b3IgKAorCXN0cnVjdCBhc2xfZ2VuZXJhbF9yZWdpc3Rlcl9kZXNjICpyZXNvdXJjZSwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsKTsKKwordm9pZAorYWNwaV9kbV9pbnRlcnJ1cHRfZGVzY3JpcHRvciAoCisJc3RydWN0IGFzbF9leHRlbmRlZF94cnVwdF9kZXNjICpyZXNvdXJjZSwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsKTsKKwordm9pZAorYWNwaV9kbV92ZW5kb3JfbGFyZ2VfZGVzY3JpcHRvciAoCisJc3RydWN0IGFzbF9sYXJnZV92ZW5kb3JfZGVzYyAgICAqcmVzb3VyY2UsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGgsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbCk7CisKKworLyoKKyAqIGRtcmVzcmNzCisgKi8KKwordm9pZAorYWNwaV9kbV9pcnFfZGVzY3JpcHRvciAoCisJc3RydWN0IGFzbF9pcnFfZm9ybWF0X2Rlc2MgICAgICAqcmVzb3VyY2UsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGgsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbCk7CisKK3ZvaWQKK2FjcGlfZG1fZG1hX2Rlc2NyaXB0b3IgKAorCXN0cnVjdCBhc2xfZG1hX2Zvcm1hdF9kZXNjICAgICAgKnJlc291cmNlLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWwpOworCit2b2lkCithY3BpX2RtX2lvX2Rlc2NyaXB0b3IgKAorCXN0cnVjdCBhc2xfaW9fcG9ydF9kZXNjICAgICAgICAgKnJlc291cmNlLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWwpOworCit2b2lkCithY3BpX2RtX2ZpeGVkX2lvX2Rlc2NyaXB0b3IgKAorCXN0cnVjdCBhc2xfZml4ZWRfaW9fcG9ydF9kZXNjICAgKnJlc291cmNlLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWwpOworCit2b2lkCithY3BpX2RtX3N0YXJ0X2RlcGVuZGVudF9kZXNjcmlwdG9yICgKKwlzdHJ1Y3QgYXNsX3N0YXJ0X2RlcGVuZGVudF9kZXNjICpyZXNvdXJjZSwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsKTsKKwordm9pZAorYWNwaV9kbV9lbmRfZGVwZW5kZW50X2Rlc2NyaXB0b3IgKAorCXN0cnVjdCBhc2xfc3RhcnRfZGVwZW5kZW50X2Rlc2MgKnJlc291cmNlLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWwpOworCit2b2lkCithY3BpX2RtX3ZlbmRvcl9zbWFsbF9kZXNjcmlwdG9yICgKKwlzdHJ1Y3QgYXNsX3NtYWxsX3ZlbmRvcl9kZXNjICAgICpyZXNvdXJjZSwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsKTsKKworCisvKgorICogZG11dGlscworICovCisKK3ZvaWQKK2FjcGlfZG1fYWRkX3RvX2V4dGVybmFsX2xpc3QgKAorCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnBhdGgpOworCisjZW5kaWYgIC8qIF9fQUNESVNBU01fSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWNkaXNwYXQuaCBiL2luY2x1ZGUvYWNwaS9hY2Rpc3BhdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzN2Q2MzQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FjcGkvYWNkaXNwYXQuaApAQCAtMCwwICsxLDUzMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIE5hbWU6IGFjZGlzcGF0LmggLSBkaXNwYXRjaGVyIChwYXJzZXIgdG8gaW50ZXJwcmV0ZXIgaW50ZXJmYWNlKQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDUsIFIuIEJ5cm9uIE1vb3JlCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIsCisgKiAgICB3aXRob3V0IG1vZGlmaWNhdGlvbi4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSBhdCBtaW5pbXVtIGEgZGlzY2xhaW1lcgorICogICAgc3Vic3RhbnRpYWxseSBzaW1pbGFyIHRvIHRoZSAiTk8gV0FSUkFOVFkiIGRpc2NsYWltZXIgYmVsb3cKKyAqICAgICgiRGlzY2xhaW1lciIpIGFuZCBhbnkgcmVkaXN0cmlidXRpb24gbXVzdCBiZSBjb25kaXRpb25lZCB1cG9uCisgKiAgICBpbmNsdWRpbmcgYSBzdWJzdGFudGlhbGx5IHNpbWlsYXIgRGlzY2xhaW1lciByZXF1aXJlbWVudCBmb3IgZnVydGhlcgorICogICAgYmluYXJ5IHJlZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZXMgb2YgdGhlIGFib3ZlLWxpc3RlZCBjb3B5cmlnaHQgaG9sZGVycyBub3IgdGhlIG5hbWVzCisgKiAgICBvZiBhbnkgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhpcyBzb2Z0d2FyZSBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKCJHUEwiKSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIE5PIFdBUlJBTlRZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORworICogSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisgKi8KKworCisjaWZuZGVmIF9BQ0RJU1BBVF9IXworI2RlZmluZSBfQUNESVNQQVRfSF8KKworCisjZGVmaW5lIE5BTUVPRl9MT0NBTF9OVEUgICAgIl9fTDAiCisjZGVmaW5lIE5BTUVPRl9BUkdfTlRFICAgICAgIl9fQTAiCisKKworLyogQ29tbW9uIGludGVyZmFjZXMgKi8KKworYWNwaV9zdGF0dXMKK2FjcGlfZHNfb2JqX3N0YWNrX3B1c2ggKAorCXZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm9iamVjdCwKKwlzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICAgICAgICAgICp3YWxrX3N0YXRlKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfZHNfb2JqX3N0YWNrX3BvcCAoCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3BfY291bnQsCisJc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAgICAgICAgICAqd2Fsa19zdGF0ZSk7CisKKyNpZmRlZiBBQ1BJX0ZVVFVSRV9VU0FHRQordm9pZCAqCithY3BpX2RzX29ial9zdGFja19nZXRfdmFsdWUgKAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgsCisJc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAgICAgICAgICAqd2Fsa19zdGF0ZSk7CisjZW5kaWYKKworYWNwaV9zdGF0dXMKK2FjcGlfZHNfb2JqX3N0YWNrX3BvcF9vYmplY3QgKAorCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgKipvYmplY3QsCisJc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAgICAgICAgICAqd2Fsa19zdGF0ZSk7CisKKworLyogZHNvcGNvZGUgLSBzdXBwb3J0IGZvciBsYXRlIGV2YWx1YXRpb24gKi8KKworYWNwaV9zdGF0dXMKK2FjcGlfZHNfZXhlY3V0ZV9hcmd1bWVudHMgKAorCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICAgICAgKm5vZGUsCisJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgICAgICAqc2NvcGVfbm9kZSwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFtbF9sZW5ndGgsCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYW1sX3N0YXJ0KTsKKworYWNwaV9zdGF0dXMKK2FjcGlfZHNfZ2V0X2J1ZmZlcl9maWVsZF9hcmd1bWVudHMgKAorCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgKm9ial9kZXNjKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfZHNfZ2V0X3JlZ2lvbl9hcmd1bWVudHMgKAorCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgKnJnbl9kZXNjKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfZHNfZ2V0X2J1ZmZlcl9hcmd1bWVudHMgKAorCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgKm9ial9kZXNjKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfZHNfZ2V0X3BhY2thZ2VfYXJndW1lbnRzICgKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICpvYmpfZGVzYyk7CisKK2FjcGlfc3RhdHVzCithY3BpX2RzX2luaXRfYnVmZmVyX2ZpZWxkICgKKwl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFtbF9vcGNvZGUsCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAqb2JqX2Rlc2MsCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAqYnVmZmVyX2Rlc2MsCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAqb2Zmc2V0X2Rlc2MsCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAqbGVuZ3RoX2Rlc2MsCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAqcmVzdWx0X2Rlc2MpOworCithY3BpX3N0YXR1cworYWNwaV9kc19ldmFsX2J1ZmZlcl9maWVsZF9vcGVyYW5kcyAoCisJc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAgICAgICAgICAqd2Fsa19zdGF0ZSwKKwl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAgICAgICAgICpvcCk7CisKK2FjcGlfc3RhdHVzCithY3BpX2RzX2V2YWxfcmVnaW9uX29wZXJhbmRzICgKKwlzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICAgICAgICAgICp3YWxrX3N0YXRlLAorCXVuaW9uIGFjcGlfcGFyc2Vfb2JqZWN0ICAgICAgICAgKm9wKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfZHNfZXZhbF9kYXRhX29iamVjdF9vcGVyYW5kcyAoCisJc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAgICAgICAgICAqd2Fsa19zdGF0ZSwKKwl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAgICAgICAgICpvcCwKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICpvYmpfZGVzYyk7CisKK2FjcGlfc3RhdHVzCithY3BpX2RzX2luaXRpYWxpemVfcmVnaW9uICgKKwlhY3BpX2hhbmRsZSAgICAgICAgICAgICAgICAgICAgIG9ial9oYW5kbGUpOworCisKKy8qIGRzY3RybCAtIFBhcnNlci9JbnRlcnByZXRlciBpbnRlcmZhY2UsIGNvbnRyb2wgc3RhY2sgcm91dGluZXMgKi8KKworCithY3BpX3N0YXR1cworYWNwaV9kc19leGVjX2JlZ2luX2NvbnRyb2xfb3AgKAorCXN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgICAgICAgICAgKndhbGtfc3RhdGUsCisJdW5pb24gYWNwaV9wYXJzZV9vYmplY3QgICAgICAgICAqb3ApOworCithY3BpX3N0YXR1cworYWNwaV9kc19leGVjX2VuZF9jb250cm9sX29wICgKKwlzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICAgICAgICAgICp3YWxrX3N0YXRlLAorCXVuaW9uIGFjcGlfcGFyc2Vfb2JqZWN0ICAgICAgICAgKm9wKTsKKworCisvKiBkc2V4ZWMgLSBQYXJzZXIvSW50ZXJwcmV0ZXIgaW50ZXJmYWNlLCBtZXRob2QgZXhlY3V0aW9uIGNhbGxiYWNrcyAqLworCisKK2FjcGlfc3RhdHVzCithY3BpX2RzX2dldF9wcmVkaWNhdGVfdmFsdWUgKAorCXN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgICAgICAgICAgKndhbGtfc3RhdGUsCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAqcmVzdWx0X29iaik7CisKK2FjcGlfc3RhdHVzCithY3BpX2RzX2V4ZWNfYmVnaW5fb3AgKAorCXN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgICAgICAgICAgKndhbGtfc3RhdGUsCisJdW5pb24gYWNwaV9wYXJzZV9vYmplY3QgICAgICAgICAqKm91dF9vcCk7CisKK2FjcGlfc3RhdHVzCithY3BpX2RzX2V4ZWNfZW5kX29wICgKKwlzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICAgICAgICAgICpzdGF0ZSk7CisKKworLyogZHNmaWVsZCAtIFBhcnNlci9JbnRlcnByZXRlciBpbnRlcmZhY2UgZm9yIEFNTCBmaWVsZHMgKi8KKworYWNwaV9zdGF0dXMKK2FjcGlfZHNfZ2V0X2ZpZWxkX25hbWVzICgKKwlzdHJ1Y3QgYWNwaV9jcmVhdGVfZmllbGRfaW5mbyAgICppbmZvLAorCXN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgICAgICAgICAgKndhbGtfc3RhdGUsCisJdW5pb24gYWNwaV9wYXJzZV9vYmplY3QgICAgICAgICAqYXJnKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfZHNfY3JlYXRlX2ZpZWxkICgKKwl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAgICAgICAgICpvcCwKKwlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAgICAgICpyZWdpb25fbm9kZSwKKwlzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICAgICAgICAgICp3YWxrX3N0YXRlKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfZHNfY3JlYXRlX2JhbmtfZmllbGQgKAorCXVuaW9uIGFjcGlfcGFyc2Vfb2JqZWN0ICAgICAgICAgKm9wLAorCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICAgICAgKnJlZ2lvbl9ub2RlLAorCXN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgICAgICAgICAgKndhbGtfc3RhdGUpOworCithY3BpX3N0YXR1cworYWNwaV9kc19jcmVhdGVfaW5kZXhfZmllbGQgKAorCXVuaW9uIGFjcGlfcGFyc2Vfb2JqZWN0ICAgICAgICAgKm9wLAorCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICAgICAgKnJlZ2lvbl9ub2RlLAorCXN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgICAgICAgICAgKndhbGtfc3RhdGUpOworCithY3BpX3N0YXR1cworYWNwaV9kc19jcmVhdGVfYnVmZmVyX2ZpZWxkICgKKwl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAgICAgICAgICpvcCwKKwlzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICAgICAgICAgICp3YWxrX3N0YXRlKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfZHNfaW5pdF9maWVsZF9vYmplY3RzICgKKwl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAgICAgICAgICpvcCwKKwlzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICAgICAgICAgICp3YWxrX3N0YXRlKTsKKworCisvKiBkc2xvYWQgLSBQYXJzZXIvSW50ZXJwcmV0ZXIgaW50ZXJmYWNlLCBuYW1lc3BhY2UgbG9hZCBjYWxsYmFja3MgKi8KKworYWNwaV9zdGF0dXMKK2FjcGlfZHNfbG9hZDFfYmVnaW5fb3AgKAorCXN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgICAgICAgICAgKndhbGtfc3RhdGUsCisJdW5pb24gYWNwaV9wYXJzZV9vYmplY3QgICAgICAgICAqKm91dF9vcCk7CisKK2FjcGlfc3RhdHVzCithY3BpX2RzX2xvYWQxX2VuZF9vcCAoCisJc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAgICAgICAgICAqd2Fsa19zdGF0ZSk7CisKK2FjcGlfc3RhdHVzCithY3BpX2RzX2xvYWQyX2JlZ2luX29wICgKKwlzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICAgICAgICAgICp3YWxrX3N0YXRlLAorCXVuaW9uIGFjcGlfcGFyc2Vfb2JqZWN0ICAgICAgICAgKipvdXRfb3ApOworCithY3BpX3N0YXR1cworYWNwaV9kc19sb2FkMl9lbmRfb3AgKAorCXN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgICAgICAgICAgKndhbGtfc3RhdGUpOworCithY3BpX3N0YXR1cworYWNwaV9kc19pbml0X2NhbGxiYWNrcyAoCisJc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAgICAgICAgICAqd2Fsa19zdGF0ZSwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3NfbnVtYmVyKTsKKworCisvKiBkc210aGRhdCAtIG1ldGhvZCBkYXRhIChsb2NhbHMvYXJncykgKi8KKworCithY3BpX3N0YXR1cworYWNwaV9kc19zdG9yZV9vYmplY3RfdG9fbG9jYWwgKAorCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Bjb2RlLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgsCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAqc3JjX2Rlc2MsCisJc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAgICAgICAgICAqd2Fsa19zdGF0ZSk7CisKK2FjcGlfc3RhdHVzCithY3BpX2RzX21ldGhvZF9kYXRhX2dldF9lbnRyeSAoCisJdTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGNvZGUsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCwKKwlzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICAgICAgICAgICp3YWxrX3N0YXRlLAorCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgKioqbm9kZSk7CisKK3ZvaWQKK2FjcGlfZHNfbWV0aG9kX2RhdGFfZGVsZXRlX2FsbCAoCisJc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAgICAgICAgICAqd2Fsa19zdGF0ZSk7CisKK3U4CithY3BpX2RzX2lzX21ldGhvZF92YWx1ZSAoCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAqb2JqX2Rlc2MpOworCisjaWZkZWYgQUNQSV9GVVRVUkVfVVNBR0UKK2FjcGlfb2JqZWN0X3R5cGUKK2FjcGlfZHNfbWV0aG9kX2RhdGFfZ2V0X3R5cGUgKAorCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Bjb2RlLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgsCisJc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAgICAgICAgICAqd2Fsa19zdGF0ZSk7CisjZW5kaWYKKworYWNwaV9zdGF0dXMKK2FjcGlfZHNfbWV0aG9kX2RhdGFfZ2V0X3ZhbHVlICgKKwl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wY29kZSwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4LAorCXN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgICAgICAgICAgKndhbGtfc3RhdGUsCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAqKmRlc3RfZGVzYyk7CisKK3ZvaWQKK2FjcGlfZHNfbWV0aG9kX2RhdGFfZGVsZXRlX3ZhbHVlICgKKwl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wY29kZSwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4LAorCXN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgICAgICAgICAgKndhbGtfc3RhdGUpOworCithY3BpX3N0YXR1cworYWNwaV9kc19tZXRob2RfZGF0YV9pbml0X2FyZ3MgKAorCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgKipwYXJhbXMsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfcGFyYW1fY291bnQsCisJc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAgICAgICAgICAqd2Fsa19zdGF0ZSk7CisKK2FjcGlfc3RhdHVzCithY3BpX2RzX21ldGhvZF9kYXRhX2dldF9ub2RlICgKKwl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wY29kZSwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4LAorCXN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgICAgICAgICAgKndhbGtfc3RhdGUsCisJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgICAgICAqKm5vZGUpOworCit2b2lkCithY3BpX2RzX21ldGhvZF9kYXRhX2luaXQgKAorCXN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgICAgICAgICAgKndhbGtfc3RhdGUpOworCithY3BpX3N0YXR1cworYWNwaV9kc19tZXRob2RfZGF0YV9zZXRfdmFsdWUgKAorCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Bjb2RlLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgsCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAqb2JqZWN0LAorCXN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgICAgICAgICAgKndhbGtfc3RhdGUpOworCisKKy8qIGRzbWV0aG9kIC0gUGFyc2VyL0ludGVycHJldGVyIGludGVyZmFjZSAtIGNvbnRyb2wgbWV0aG9kIHBhcnNpbmcgKi8KKworYWNwaV9zdGF0dXMKK2FjcGlfZHNfcGFyc2VfbWV0aG9kICgKKwlhY3BpX2hhbmRsZSAgICAgICAgICAgICAgICAgICAgIG9ial9oYW5kbGUpOworCithY3BpX3N0YXR1cworYWNwaV9kc19jYWxsX2NvbnRyb2xfbWV0aG9kICgKKwlzdHJ1Y3QgYWNwaV90aHJlYWRfc3RhdGUgICAgICAgICp0aHJlYWQsCisJc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAgICAgICAgICAqd2Fsa19zdGF0ZSwKKwl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAgICAgICAgICpvcCk7CisKK2FjcGlfc3RhdHVzCithY3BpX2RzX3Jlc3RhcnRfY29udHJvbF9tZXRob2QgKAorCXN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgICAgICAgICAgKndhbGtfc3RhdGUsCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAqcmV0dXJuX2Rlc2MpOworCithY3BpX3N0YXR1cworYWNwaV9kc190ZXJtaW5hdGVfY29udHJvbF9tZXRob2QgKAorCXN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgICAgICAgICAgKndhbGtfc3RhdGUpOworCithY3BpX3N0YXR1cworYWNwaV9kc19iZWdpbl9tZXRob2RfZXhlY3V0aW9uICgKKwlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAgICAgICptZXRob2Rfbm9kZSwKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICpvYmpfZGVzYywKKwlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAgICAgICpjYWxsaW5nX21ldGhvZF9ub2RlKTsKKworCisvKiBkc29iaiAtIFBhcnNlci9JbnRlcnByZXRlciBpbnRlcmZhY2UgLSBvYmplY3QgaW5pdGlhbGl6YXRpb24gYW5kIGNvbnZlcnNpb24gKi8KKworYWNwaV9zdGF0dXMKK2FjcGlfZHNfaW5pdF9vbmVfb2JqZWN0ICgKKwlhY3BpX2hhbmRsZSAgICAgICAgICAgICAgICAgICAgIG9ial9oYW5kbGUsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbCwKKwl2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICpjb250ZXh0LAorCXZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKipyZXR1cm5fdmFsdWUpOworCithY3BpX3N0YXR1cworYWNwaV9kc19pbml0aWFsaXplX29iamVjdHMgKAorCXN0cnVjdCBhY3BpX3RhYmxlX2Rlc2MgICAgICAgICAgKnRhYmxlX2Rlc2MsCisJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgICAgICAqc3RhcnRfbm9kZSk7CisKK2FjcGlfc3RhdHVzCithY3BpX2RzX2J1aWxkX2ludGVybmFsX2J1ZmZlcl9vYmogKAorCXN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgICAgICAgICAgKndhbGtfc3RhdGUsCisJdW5pb24gYWNwaV9wYXJzZV9vYmplY3QgICAgICAgICAqb3AsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJfbGVuZ3RoLAorCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgKipvYmpfZGVzY19wdHIpOworCithY3BpX3N0YXR1cworYWNwaV9kc19idWlsZF9pbnRlcm5hbF9wYWNrYWdlX29iaiAoCisJc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAgICAgICAgICAqd2Fsa19zdGF0ZSwKKwl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAgICAgICAgICpvcCwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VfbGVuZ3RoLAorCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgKipvYmpfZGVzYyk7CisKK2FjcGlfc3RhdHVzCithY3BpX2RzX2J1aWxkX2ludGVybmFsX29iamVjdCAoCisJc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAgICAgICAgICAqd2Fsa19zdGF0ZSwKKwl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAgICAgICAgICpvcCwKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICoqb2JqX2Rlc2NfcHRyKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfZHNfaW5pdF9vYmplY3RfZnJvbV9vcCAoCisJc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAgICAgICAgICAqd2Fsa19zdGF0ZSwKKwl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAgICAgICAgICpvcCwKKwl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wY29kZSwKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICoqb2JqX2Rlc2MpOworCithY3BpX3N0YXR1cworYWNwaV9kc19jcmVhdGVfbm9kZSAoCisJc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAgICAgICAgICAqd2Fsa19zdGF0ZSwKKwlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAgICAgICpub2RlLAorCXVuaW9uIGFjcGlfcGFyc2Vfb2JqZWN0ICAgICAgICAgKm9wKTsKKworCisvKiBkc3V0aWxzIC0gUGFyc2VyL0ludGVycHJldGVyIGludGVyZmFjZSB1dGlsaXR5IHJvdXRpbmVzICovCisKK3ZvaWQKK2FjcGlfZHNfY2xlYXJfaW1wbGljaXRfcmV0dXJuICgKKwlzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICAgICAgICAgICp3YWxrX3N0YXRlKTsKKwordTgKK2FjcGlfZHNfZG9faW1wbGljaXRfcmV0dXJuICgKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICpyZXR1cm5fZGVzYywKKwlzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICAgICAgICAgICp3YWxrX3N0YXRlLAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkX3JlZmVyZW5jZSk7CisKK3U4CithY3BpX2RzX2lzX3Jlc3VsdF91c2VkICgKKwl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAgICAgICAgICpvcCwKKwlzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICAgICAgICAgICp3YWxrX3N0YXRlKTsKKwordm9pZAorYWNwaV9kc19kZWxldGVfcmVzdWx0X2lmX25vdF91c2VkICgKKwl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAgICAgICAgICpvcCwKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICpyZXN1bHRfb2JqLAorCXN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgICAgICAgICAgKndhbGtfc3RhdGUpOworCithY3BpX3N0YXR1cworYWNwaV9kc19jcmVhdGVfb3BlcmFuZCAoCisJc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAgICAgICAgICAqd2Fsa19zdGF0ZSwKKwl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAgICAgICAgICphcmcsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzX3JlbWFpbmluZyk7CisKK2FjcGlfc3RhdHVzCithY3BpX2RzX2NyZWF0ZV9vcGVyYW5kcyAoCisJc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAgICAgICAgICAqd2Fsa19zdGF0ZSwKKwl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAgICAgICAgICpmaXJzdF9hcmcpOworCithY3BpX3N0YXR1cworYWNwaV9kc19yZXNvbHZlX29wZXJhbmRzICgKKwlzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICAgICAgICAgICp3YWxrX3N0YXRlKTsKKwordm9pZAorYWNwaV9kc19jbGVhcl9vcGVyYW5kcyAoCisJc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAgICAgICAgICAqd2Fsa19zdGF0ZSk7CisKKworLyoKKyAqIGRzd3Njb3BlIC0gU2NvcGUgU3RhY2sgbWFuaXB1bGF0aW9uCisgKi8KKworYWNwaV9zdGF0dXMKK2FjcGlfZHNfc2NvcGVfc3RhY2tfcHVzaCAoCisJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgICAgICAqbm9kZSwKKwlhY3BpX29iamVjdF90eXBlICAgICAgICAgICAgICAgIHR5cGUsCisJc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAgICAgICAgICAqd2Fsa19zdGF0ZSk7CisKKworYWNwaV9zdGF0dXMKK2FjcGlfZHNfc2NvcGVfc3RhY2tfcG9wICgKKwlzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICAgICAgICAgICp3YWxrX3N0YXRlKTsKKwordm9pZAorYWNwaV9kc19zY29wZV9zdGFja19jbGVhciAoCisJc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAgICAgICAgICAqd2Fsa19zdGF0ZSk7CisKKworLyogZHN3c3RhdGUgLSBwYXJzZXIgV0FMS19TVEFURSBtYW5hZ2VtZW50IHJvdXRpbmVzICovCisKK3N0cnVjdCBhY3BpX3dhbGtfc3RhdGUgKgorYWNwaV9kc19jcmVhdGVfd2Fsa19zdGF0ZSAoCisJYWNwaV9vd25lcl9pZCAgICAgICAgICAgICAgICAgICBvd25lcl9pZCwKKwl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAgICAgICAgICpvcmlnaW4sCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAqbXRoX2Rlc2MsCisJc3RydWN0IGFjcGlfdGhyZWFkX3N0YXRlICAgICAgICAqdGhyZWFkKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfZHNfaW5pdF9hbWxfd2FsayAoCisJc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAgICAgICAgICAqd2Fsa19zdGF0ZSwKKwl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAgICAgICAgICpvcCwKKwlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAgICAgICptZXRob2Rfbm9kZSwKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICphbWxfc3RhcnQsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbWxfbGVuZ3RoLAorCXN0cnVjdCBhY3BpX3BhcmFtZXRlcl9pbmZvICAgICAgKmluZm8sCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzX251bWJlcik7CisKKyNpZmRlZiBBQ1BJX0ZVVFVSRV9VU0FHRQorYWNwaV9zdGF0dXMKK2FjcGlfZHNfb2JqX3N0YWNrX2RlbGV0ZV9hbGwgKAorCXN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgICAgICAgICAgKndhbGtfc3RhdGUpOworI2VuZGlmCisKK2FjcGlfc3RhdHVzCithY3BpX2RzX29ial9zdGFja19wb3BfYW5kX2RlbGV0ZSAoCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3BfY291bnQsCisJc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAgICAgICAgICAqd2Fsa19zdGF0ZSk7CisKK3ZvaWQKK2FjcGlfZHNfZGVsZXRlX3dhbGtfc3RhdGUgKAorCXN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgICAgICAgICAgKndhbGtfc3RhdGUpOworCitzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICoKK2FjcGlfZHNfcG9wX3dhbGtfc3RhdGUgKAorCXN0cnVjdCBhY3BpX3RocmVhZF9zdGF0ZSAgICAgICAgKnRocmVhZCk7CisKK3ZvaWQKK2FjcGlfZHNfcHVzaF93YWxrX3N0YXRlICgKKwlzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICAgICAgICAgICp3YWxrX3N0YXRlLAorCXN0cnVjdCBhY3BpX3RocmVhZF9zdGF0ZSAgICAgICAgKnRocmVhZCk7CisKK2FjcGlfc3RhdHVzCithY3BpX2RzX3Jlc3VsdF9zdGFja19wb3AgKAorCXN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgICAgICAgICAgKndhbGtfc3RhdGUpOworCithY3BpX3N0YXR1cworYWNwaV9kc19yZXN1bHRfc3RhY2tfcHVzaCAoCisJc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAgICAgICAgICAqd2Fsa19zdGF0ZSk7CisKK2FjcGlfc3RhdHVzCithY3BpX2RzX3Jlc3VsdF9zdGFja19jbGVhciAoCisJc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAgICAgICAgICAqd2Fsa19zdGF0ZSk7CisKK3N0cnVjdCBhY3BpX3dhbGtfc3RhdGUgKgorYWNwaV9kc19nZXRfY3VycmVudF93YWxrX3N0YXRlICgKKwlzdHJ1Y3QgYWNwaV90aHJlYWRfc3RhdGUgICAgICAgICp0aHJlYWQpOworCisjaWZkZWYgQUNQSV9FTkFCTEVfT0JKRUNUX0NBQ0hFCit2b2lkCithY3BpX2RzX2RlbGV0ZV93YWxrX3N0YXRlX2NhY2hlICgKKwl2b2lkKTsKKyNlbmRpZgorCisjaWZkZWYgQUNQSV9GVVRVUkVfVVNBR0UKK2FjcGlfc3RhdHVzCithY3BpX2RzX3Jlc3VsdF9pbnNlcnQgKAorCXZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm9iamVjdCwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4LAorCXN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgICAgICAgICAgKndhbGtfc3RhdGUpOworCithY3BpX3N0YXR1cworYWNwaV9kc19yZXN1bHRfcmVtb3ZlICgKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICoqb2JqZWN0LAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgsCisJc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAgICAgICAgICAqd2Fsa19zdGF0ZSk7CisjZW5kaWYKKworYWNwaV9zdGF0dXMKK2FjcGlfZHNfcmVzdWx0X3BvcCAoCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAqKm9iamVjdCwKKwlzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICAgICAgICAgICp3YWxrX3N0YXRlKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfZHNfcmVzdWx0X3B1c2ggKAorCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgKm9iamVjdCwKKwlzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICAgICAgICAgICp3YWxrX3N0YXRlKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfZHNfcmVzdWx0X3BvcF9mcm9tX2JvdHRvbSAoCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAqKm9iamVjdCwKKwlzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICAgICAgICAgICp3YWxrX3N0YXRlKTsKKworI2VuZGlmIC8qIF9BQ0RJU1BBVF9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FjZXZlbnRzLmggYi9pbmNsdWRlL2FjcGkvYWNldmVudHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGVjMDgzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hY3BpL2FjZXZlbnRzLmgKQEAgLTAsMCArMSwzMjAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBOYW1lOiBhY2V2ZW50cy5oIC0gRXZlbnQgc3ViY29tcG9uZW50IHByb3RvdHlwZXMgYW5kIGRlZmluZXMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA1LCBSLiBCeXJvbiBNb29yZQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLAorICogICAgd2l0aG91dCBtb2RpZmljYXRpb24uCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgYXQgbWluaW11bSBhIGRpc2NsYWltZXIKKyAqICAgIHN1YnN0YW50aWFsbHkgc2ltaWxhciB0byB0aGUgIk5PIFdBUlJBTlRZIiBkaXNjbGFpbWVyIGJlbG93CisgKiAgICAoIkRpc2NsYWltZXIiKSBhbmQgYW55IHJlZGlzdHJpYnV0aW9uIG11c3QgYmUgY29uZGl0aW9uZWQgdXBvbgorICogICAgaW5jbHVkaW5nIGEgc3Vic3RhbnRpYWxseSBzaW1pbGFyIERpc2NsYWltZXIgcmVxdWlyZW1lbnQgZm9yIGZ1cnRoZXIKKyAqICAgIGJpbmFyeSByZWRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWVzIG9mIHRoZSBhYm92ZS1saXN0ZWQgY29weXJpZ2h0IGhvbGRlcnMgbm9yIHRoZSBuYW1lcworICogICAgb2YgYW55IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBOTyBXQVJSQU5UWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcKKyAqIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorICovCisKKyNpZm5kZWYgX19BQ0VWRU5UU19IX18KKyNkZWZpbmUgX19BQ0VWRU5UU19IX18KKworCithY3BpX3N0YXR1cworYWNwaV9ldl9pbml0aWFsaXplX2V2ZW50cyAoCisJdm9pZCk7CisKK2FjcGlfc3RhdHVzCithY3BpX2V2X2luc3RhbGxfeHJ1cHRfaGFuZGxlcnMgKAorCXZvaWQpOworCisKKy8qCisgKiBFdmZpeGVkIC0gRml4ZWQgZXZlbnQgaGFuZGxpbmcKKyAqLworCithY3BpX3N0YXR1cworYWNwaV9ldl9maXhlZF9ldmVudF9pbml0aWFsaXplICgKKwl2b2lkKTsKKwordTMyCithY3BpX2V2X2ZpeGVkX2V2ZW50X2RldGVjdCAoCisJdm9pZCk7CisKK3UzMgorYWNwaV9ldl9maXhlZF9ldmVudF9kaXNwYXRjaCAoCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudCk7CisKKworLyoKKyAqIEV2bWlzYworICovCisKK3U4CithY3BpX2V2X2lzX25vdGlmeV9vYmplY3QgKAorCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICAgICAgKm5vZGUpOworCithY3BpX3N0YXR1cworYWNwaV9ldl9hY3F1aXJlX2dsb2JhbF9sb2NrKAorCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dCk7CisKK2FjcGlfc3RhdHVzCithY3BpX2V2X3JlbGVhc2VfZ2xvYmFsX2xvY2soCisJdm9pZCk7CisKK2FjcGlfc3RhdHVzCithY3BpX2V2X2luaXRfZ2xvYmFsX2xvY2tfaGFuZGxlciAoCisJdm9pZCk7CisKK3UzMgorYWNwaV9ldl9nZXRfZ3BlX251bWJlcl9pbmRleCAoCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncGVfbnVtYmVyKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfZXZfcXVldWVfbm90aWZ5X3JlcXVlc3QgKAorCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICAgICAgKm5vZGUsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZnlfdmFsdWUpOworCit2b2lkIEFDUElfU1lTVEVNX1hGQUNFCithY3BpX2V2X25vdGlmeV9kaXNwYXRjaCAoCisJdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqY29udGV4dCk7CisKKworLyoKKyAqIEV2Z3BlIC0gR1BFIGhhbmRsaW5nIGFuZCBkaXNwYXRjaAorICovCisKK2FjcGlfc3RhdHVzCithY3BpX2V2X3dhbGtfZ3BlX2xpc3QgKAorCUFDUElfR1BFX0NBTExCQUNLICAgICAgIGdwZV93YWxrX2NhbGxiYWNrLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MpOworCit1OAorYWNwaV9ldl92YWxpZF9ncGVfZXZlbnQgKAorCXN0cnVjdCBhY3BpX2dwZV9ldmVudF9pbmZvICAgICAgKmdwZV9ldmVudF9pbmZvKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfZXZfdXBkYXRlX2dwZV9lbmFibGVfbWFza3MgKAorCXN0cnVjdCBhY3BpX2dwZV9ldmVudF9pbmZvICAgICAgKmdwZV9ldmVudF9pbmZvLAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSk7CisKK2FjcGlfc3RhdHVzCithY3BpX2V2X2VuYWJsZV9ncGUgKAorCXN0cnVjdCBhY3BpX2dwZV9ldmVudF9pbmZvICAgICAgKmdwZV9ldmVudF9pbmZvLAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVfdG9faGFyZHdhcmUpOworCithY3BpX3N0YXR1cworYWNwaV9ldl9kaXNhYmxlX2dwZSAoCisJc3RydWN0IGFjcGlfZ3BlX2V2ZW50X2luZm8gICAgICAqZ3BlX2V2ZW50X2luZm8pOworCitzdHJ1Y3QgYWNwaV9ncGVfZXZlbnRfaW5mbyAqCithY3BpX2V2X2dldF9ncGVfZXZlbnRfaW5mbyAoCisJYWNwaV9oYW5kbGUgICAgICAgICAgICAgICAgICAgICBncGVfZGV2aWNlLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BlX251bWJlcik7CisKK2FjcGlfc3RhdHVzCithY3BpX2V2X2dwZV9pbml0aWFsaXplICgKKwl2b2lkKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfZXZfY3JlYXRlX2dwZV9ibG9jayAoCisJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgICAgICAqZ3BlX2RldmljZSwKKwlzdHJ1Y3QgYWNwaV9nZW5lcmljX2FkZHJlc3MgICAgICpncGVfYmxvY2tfYWRkcmVzcywKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyX2NvdW50LAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BlX2Jsb2NrX2Jhc2VfbnVtYmVyLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0X2xldmVsLAorCXN0cnVjdCBhY3BpX2dwZV9ibG9ja19pbmZvICAgICAgKipyZXR1cm5fZ3BlX2Jsb2NrKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfZXZfZGVsZXRlX2dwZV9ibG9jayAoCisJc3RydWN0IGFjcGlfZ3BlX2Jsb2NrX2luZm8gICAgICAqZ3BlX2Jsb2NrKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfZXZfZGVsZXRlX2dwZV9oYW5kbGVycyAoCisJc3RydWN0IGFjcGlfZ3BlX3hydXB0X2luZm8gICAgICAqZ3BlX3hydXB0X2luZm8sCisJc3RydWN0IGFjcGlfZ3BlX2Jsb2NrX2luZm8gICAgICAqZ3BlX2Jsb2NrKTsKKwordTMyCithY3BpX2V2X2dwZV9kaXNwYXRjaCAoCisJc3RydWN0IGFjcGlfZ3BlX2V2ZW50X2luZm8gICAgICAqZ3BlX2V2ZW50X2luZm8sCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncGVfbnVtYmVyKTsKKwordTMyCithY3BpX2V2X2dwZV9kZXRlY3QgKAorCXN0cnVjdCBhY3BpX2dwZV94cnVwdF9pbmZvICAgICAgKmdwZV94cnVwdF9saXN0KTsKKworYWNwaV9zdGF0dXMKK2FjcGlfZXZfc2V0X2dwZV90eXBlICgKKwlzdHJ1Y3QgYWNwaV9ncGVfZXZlbnRfaW5mbyAgICAgICpncGVfZXZlbnRfaW5mbywKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUpOworCithY3BpX3N0YXR1cworYWNwaV9ldl9jaGVja19mb3Jfd2FrZV9vbmx5X2dwZSAoCisJc3RydWN0IGFjcGlfZ3BlX2V2ZW50X2luZm8gICAgICAqZ3BlX2V2ZW50X2luZm8pOworCisvKgorICogRXZyZWdpb24gLSBBZGRyZXNzIFNwYWNlIGhhbmRsaW5nCisgKi8KKworYWNwaV9zdGF0dXMKK2FjcGlfZXZfaW5zdGFsbF9yZWdpb25faGFuZGxlcnMgKAorCXZvaWQpOworCithY3BpX3N0YXR1cworYWNwaV9ldl9pbml0aWFsaXplX29wX3JlZ2lvbnMgKAorCXZvaWQpOworCithY3BpX3N0YXR1cworYWNwaV9ldl9hZGRyZXNzX3NwYWNlX2Rpc3BhdGNoICgKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgKnJlZ2lvbl9vYmosCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiwKKwlhY3BpX3BoeXNpY2FsX2FkZHJlc3MgICAgICAgICAgIGFkZHJlc3MsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRfd2lkdGgsCisJdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdmFsdWUpOworCithY3BpX3N0YXR1cworYWNwaV9ldl9pbnN0YWxsX2hhbmRsZXIgKAorCWFjcGlfaGFuZGxlICAgICAgICAgICAgICAgICAgICAgb2JqX2hhbmRsZSwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsLAorCXZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmNvbnRleHQsCisJdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKnJldHVybl92YWx1ZSk7CisKK2FjcGlfc3RhdHVzCithY3BpX2V2X2F0dGFjaF9yZWdpb24gKAorCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgKmhhbmRsZXJfb2JqLAorCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgKnJlZ2lvbl9vYmosCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3BpX25zX2lzX2xvY2tlZCk7CisKK3ZvaWQKK2FjcGlfZXZfZGV0YWNoX3JlZ2lvbiAoCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICpyZWdpb25fb2JqLAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNwaV9uc19pc19sb2NrZWQpOworCithY3BpX3N0YXR1cworYWNwaV9ldl9pbnN0YWxsX3NwYWNlX2hhbmRsZXIgKAorCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICAgICAgKm5vZGUsCisJYWNwaV9hZHJfc3BhY2VfdHlwZSAgICAgICAgICAgICBzcGFjZV9pZCwKKwlhY3BpX2Fkcl9zcGFjZV9oYW5kbGVyICAgICAgICAgIGhhbmRsZXIsCisJYWNwaV9hZHJfc3BhY2Vfc2V0dXAgICAgICAgICAgICBzZXR1cCwKKwl2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICpjb250ZXh0KTsKKworYWNwaV9zdGF0dXMKK2FjcGlfZXZfZXhlY3V0ZV9yZWdfbWV0aG9kcyAoCisJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgICAgICAqbm9kZSwKKwlhY3BpX2Fkcl9zcGFjZV90eXBlICAgICAgICAgICAgIHNwYWNlX2lkKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfZXZfZXhlY3V0ZV9yZWdfbWV0aG9kICgKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgKnJlZ2lvbl9vYmosCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbik7CisKK2FjcGlfc3RhdHVzCithY3BpX2V2X3JlZ19ydW4gKAorCWFjcGlfaGFuZGxlICAgICAgICAgICAgICAgICAgICAgb2JqX2hhbmRsZSwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsLAorCXZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmNvbnRleHQsCisJdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKnJldHVybl92YWx1ZSk7CisKKy8qCisgKiBFdnJlZ2luaSAtIFJlZ2lvbiBpbml0aWFsaXphdGlvbiBhbmQgc2V0dXAKKyAqLworCithY3BpX3N0YXR1cworYWNwaV9ldl9zeXN0ZW1fbWVtb3J5X3JlZ2lvbl9zZXR1cCAoCisJYWNwaV9oYW5kbGUgICAgICAgICAgICAgICAgICAgICBoYW5kbGUsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiwKKwl2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICpoYW5kbGVyX2NvbnRleHQsCisJdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKnJlZ2lvbl9jb250ZXh0KTsKKworYWNwaV9zdGF0dXMKK2FjcGlfZXZfaW9fc3BhY2VfcmVnaW9uX3NldHVwICgKKwlhY3BpX2hhbmRsZSAgICAgICAgICAgICAgICAgICAgIGhhbmRsZSwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uLAorCXZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmhhbmRsZXJfY29udGV4dCwKKwl2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqcmVnaW9uX2NvbnRleHQpOworCithY3BpX3N0YXR1cworYWNwaV9ldl9wY2lfY29uZmlnX3JlZ2lvbl9zZXR1cCAoCisJYWNwaV9oYW5kbGUgICAgICAgICAgICAgICAgICAgICBoYW5kbGUsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiwKKwl2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICpoYW5kbGVyX2NvbnRleHQsCisJdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKnJlZ2lvbl9jb250ZXh0KTsKKworYWNwaV9zdGF0dXMKK2FjcGlfZXZfY21vc19yZWdpb25fc2V0dXAgKAorCWFjcGlfaGFuZGxlICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24sCisJdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqaGFuZGxlcl9jb250ZXh0LAorCXZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKipyZWdpb25fY29udGV4dCk7CisKK2FjcGlfc3RhdHVzCithY3BpX2V2X3BjaV9iYXJfcmVnaW9uX3NldHVwICgKKwlhY3BpX2hhbmRsZSAgICAgICAgICAgICAgICAgICAgIGhhbmRsZSwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uLAorCXZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmhhbmRsZXJfY29udGV4dCwKKwl2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqcmVnaW9uX2NvbnRleHQpOworCithY3BpX3N0YXR1cworYWNwaV9ldl9kZWZhdWx0X3JlZ2lvbl9zZXR1cCAoCisJYWNwaV9oYW5kbGUgICAgICAgICAgICAgICAgICAgICBoYW5kbGUsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiwKKwl2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICpoYW5kbGVyX2NvbnRleHQsCisJdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKnJlZ2lvbl9jb250ZXh0KTsKKworYWNwaV9zdGF0dXMKK2FjcGlfZXZfaW5pdGlhbGl6ZV9yZWdpb24gKAorCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgKnJlZ2lvbl9vYmosCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3BpX25zX2xvY2tlZCk7CisKKworLyoKKyAqIEV2c2NpIC0gU0NJIChTeXN0ZW0gQ29udHJvbCBJbnRlcnJ1cHQpIGhhbmRsaW5nL2Rpc3BhdGNoCisgKi8KKwordTMyIEFDUElfU1lTVEVNX1hGQUNFCithY3BpX2V2X2dwZV94cnVwdF9oYW5kbGVyICgKKwl2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICpjb250ZXh0KTsKKwordTMyCithY3BpX2V2X2luc3RhbGxfc2NpX2hhbmRsZXIgKAorCXZvaWQpOworCithY3BpX3N0YXR1cworYWNwaV9ldl9yZW1vdmVfc2NpX2hhbmRsZXIgKAorCXZvaWQpOworCit1MzIKK2FjcGlfZXZfaW5pdGlhbGl6ZV9zQ0kgKAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbV9zQ0kpOworCit2b2lkCithY3BpX2V2X3Rlcm1pbmF0ZSAoCisJdm9pZCk7CisKKworI2VuZGlmICAvKiBfX0FDRVZFTlRTX0hfXyAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY2V4Y2VwLmggYi9pbmNsdWRlL2FjcGkvYWNleGNlcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzZjhiNTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FjcGkvYWNleGNlcC5oCkBAIC0wLDAgKzEsMzA4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogTmFtZTogYWNleGNlcC5oIC0gRXhjZXB0aW9uIGNvZGVzIHJldHVybmVkIGJ5IHRoZSBBQ1BJIHN1YnN5c3RlbQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDUsIFIuIEJ5cm9uIE1vb3JlCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIsCisgKiAgICB3aXRob3V0IG1vZGlmaWNhdGlvbi4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSBhdCBtaW5pbXVtIGEgZGlzY2xhaW1lcgorICogICAgc3Vic3RhbnRpYWxseSBzaW1pbGFyIHRvIHRoZSAiTk8gV0FSUkFOVFkiIGRpc2NsYWltZXIgYmVsb3cKKyAqICAgICgiRGlzY2xhaW1lciIpIGFuZCBhbnkgcmVkaXN0cmlidXRpb24gbXVzdCBiZSBjb25kaXRpb25lZCB1cG9uCisgKiAgICBpbmNsdWRpbmcgYSBzdWJzdGFudGlhbGx5IHNpbWlsYXIgRGlzY2xhaW1lciByZXF1aXJlbWVudCBmb3IgZnVydGhlcgorICogICAgYmluYXJ5IHJlZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZXMgb2YgdGhlIGFib3ZlLWxpc3RlZCBjb3B5cmlnaHQgaG9sZGVycyBub3IgdGhlIG5hbWVzCisgKiAgICBvZiBhbnkgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhpcyBzb2Z0d2FyZSBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKCJHUEwiKSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIE5PIFdBUlJBTlRZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORworICogSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisgKi8KKworI2lmbmRlZiBfX0FDRVhDRVBfSF9fCisjZGVmaW5lIF9fQUNFWENFUF9IX18KKworCisvKgorICogRXhjZXB0aW9ucyByZXR1cm5lZCBieSBleHRlcm5hbCBBQ1BJIGludGVyZmFjZXMKKyAqLworCisjZGVmaW5lIEFFX0NPREVfRU5WSVJPTk1FTlRBTCAgICAgICAgICAgMHgwMDAwCisjZGVmaW5lIEFFX0NPREVfUFJPR1JBTU1FUiAgICAgICAgICAgICAgMHgxMDAwCisjZGVmaW5lIEFFX0NPREVfQUNQSV9UQUJMRVMgICAgICAgICAgICAgMHgyMDAwCisjZGVmaW5lIEFFX0NPREVfQU1MICAgICAgICAgICAgICAgICAgICAgMHgzMDAwCisjZGVmaW5lIEFFX0NPREVfQ09OVFJPTCAgICAgICAgICAgICAgICAgMHg0MDAwCisjZGVmaW5lIEFFX0NPREVfTUFTSyAgICAgICAgICAgICAgICAgICAgMHhGMDAwCisKKworI2RlZmluZSBBQ1BJX1NVQ0NFU1MoYSkgICAgICAgICAgICAgICAgICghKGEpKQorI2RlZmluZSBBQ1BJX0ZBSUxVUkUoYSkgICAgICAgICAgICAgICAgIChhKQorCisKKyNkZWZpbmUgQUVfT0sgICAgICAgICAgICAgICAgICAgICAgICAgICAoYWNwaV9zdGF0dXMpIDB4MDAwMAorCisvKgorICogRW52aXJvbm1lbnRhbCBleGNlcHRpb25zCisgKi8KKyNkZWZpbmUgQUVfRVJST1IgICAgICAgICAgICAgICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMDEgfCBBRV9DT0RFX0VOVklST05NRU5UQUwpCisjZGVmaW5lIEFFX05PX0FDUElfVEFCTEVTICAgICAgICAgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDAyIHwgQUVfQ09ERV9FTlZJUk9OTUVOVEFMKQorI2RlZmluZSBBRV9OT19OQU1FU1BBQ0UgICAgICAgICAgICAgICAgIChhY3BpX3N0YXR1cykgKDB4MDAwMyB8IEFFX0NPREVfRU5WSVJPTk1FTlRBTCkKKyNkZWZpbmUgQUVfTk9fTUVNT1JZICAgICAgICAgICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMDQgfCBBRV9DT0RFX0VOVklST05NRU5UQUwpCisjZGVmaW5lIEFFX05PVF9GT1VORCAgICAgICAgICAgICAgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDA1IHwgQUVfQ09ERV9FTlZJUk9OTUVOVEFMKQorI2RlZmluZSBBRV9OT1RfRVhJU1QgICAgICAgICAgICAgICAgICAgIChhY3BpX3N0YXR1cykgKDB4MDAwNiB8IEFFX0NPREVfRU5WSVJPTk1FTlRBTCkKKyNkZWZpbmUgQUVfQUxSRUFEWV9FWElTVFMgICAgICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMDcgfCBBRV9DT0RFX0VOVklST05NRU5UQUwpCisjZGVmaW5lIEFFX1RZUEUgICAgICAgICAgICAgICAgICAgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDA4IHwgQUVfQ09ERV9FTlZJUk9OTUVOVEFMKQorI2RlZmluZSBBRV9OVUxMX09CSkVDVCAgICAgICAgICAgICAgICAgIChhY3BpX3N0YXR1cykgKDB4MDAwOSB8IEFFX0NPREVfRU5WSVJPTk1FTlRBTCkKKyNkZWZpbmUgQUVfTlVMTF9FTlRSWSAgICAgICAgICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMEEgfCBBRV9DT0RFX0VOVklST05NRU5UQUwpCisjZGVmaW5lIEFFX0JVRkZFUl9PVkVSRkxPVyAgICAgICAgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDBCIHwgQUVfQ09ERV9FTlZJUk9OTUVOVEFMKQorI2RlZmluZSBBRV9TVEFDS19PVkVSRkxPVyAgICAgICAgICAgICAgIChhY3BpX3N0YXR1cykgKDB4MDAwQyB8IEFFX0NPREVfRU5WSVJPTk1FTlRBTCkKKyNkZWZpbmUgQUVfU1RBQ0tfVU5ERVJGTE9XICAgICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMEQgfCBBRV9DT0RFX0VOVklST05NRU5UQUwpCisjZGVmaW5lIEFFX05PVF9JTVBMRU1FTlRFRCAgICAgICAgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDBFIHwgQUVfQ09ERV9FTlZJUk9OTUVOVEFMKQorI2RlZmluZSBBRV9WRVJTSU9OX01JU01BVENIICAgICAgICAgICAgIChhY3BpX3N0YXR1cykgKDB4MDAwRiB8IEFFX0NPREVfRU5WSVJPTk1FTlRBTCkKKyNkZWZpbmUgQUVfU1VQUE9SVCAgICAgICAgICAgICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMTAgfCBBRV9DT0RFX0VOVklST05NRU5UQUwpCisjZGVmaW5lIEFFX1NIQVJFICAgICAgICAgICAgICAgICAgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDExIHwgQUVfQ09ERV9FTlZJUk9OTUVOVEFMKQorI2RlZmluZSBBRV9MSU1JVCAgICAgICAgICAgICAgICAgICAgICAgIChhY3BpX3N0YXR1cykgKDB4MDAxMiB8IEFFX0NPREVfRU5WSVJPTk1FTlRBTCkKKyNkZWZpbmUgQUVfVElNRSAgICAgICAgICAgICAgICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMTMgfCBBRV9DT0RFX0VOVklST05NRU5UQUwpCisjZGVmaW5lIEFFX1VOS05PV05fU1RBVFVTICAgICAgICAgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDE0IHwgQUVfQ09ERV9FTlZJUk9OTUVOVEFMKQorI2RlZmluZSBBRV9BQ1FVSVJFX0RFQURMT0NLICAgICAgICAgICAgIChhY3BpX3N0YXR1cykgKDB4MDAxNSB8IEFFX0NPREVfRU5WSVJPTk1FTlRBTCkKKyNkZWZpbmUgQUVfUkVMRUFTRV9ERUFETE9DSyAgICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMTYgfCBBRV9DT0RFX0VOVklST05NRU5UQUwpCisjZGVmaW5lIEFFX05PVF9BQ1FVSVJFRCAgICAgICAgICAgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDE3IHwgQUVfQ09ERV9FTlZJUk9OTUVOVEFMKQorI2RlZmluZSBBRV9BTFJFQURZX0FDUVVJUkVEICAgICAgICAgICAgIChhY3BpX3N0YXR1cykgKDB4MDAxOCB8IEFFX0NPREVfRU5WSVJPTk1FTlRBTCkKKyNkZWZpbmUgQUVfTk9fSEFSRFdBUkVfUkVTUE9OU0UgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMTkgfCBBRV9DT0RFX0VOVklST05NRU5UQUwpCisjZGVmaW5lIEFFX05PX0dMT0JBTF9MT0NLICAgICAgICAgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDFBIHwgQUVfQ09ERV9FTlZJUk9OTUVOVEFMKQorI2RlZmluZSBBRV9MT0dJQ0FMX0FERFJFU1MgICAgICAgICAgICAgIChhY3BpX3N0YXR1cykgKDB4MDAxQiB8IEFFX0NPREVfRU5WSVJPTk1FTlRBTCkKKyNkZWZpbmUgQUVfQUJPUlRfTUVUSE9EICAgICAgICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMUMgfCBBRV9DT0RFX0VOVklST05NRU5UQUwpCisjZGVmaW5lIEFFX1NBTUVfSEFORExFUiAgICAgICAgICAgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDFEIHwgQUVfQ09ERV9FTlZJUk9OTUVOVEFMKQorI2RlZmluZSBBRV9XQUtFX09OTFlfR1BFICAgICAgICAgICAgICAgIChhY3BpX3N0YXR1cykgKDB4MDAxRSB8IEFFX0NPREVfRU5WSVJPTk1FTlRBTCkKKworI2RlZmluZSBBRV9DT0RFX0VOVl9NQVggICAgICAgICAgICAgICAgIDB4MDAxRQorCisvKgorICogUHJvZ3JhbW1lciBleGNlcHRpb25zCisgKi8KKyNkZWZpbmUgQUVfQkFEX1BBUkFNRVRFUiAgICAgICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMDEgfCBBRV9DT0RFX1BST0dSQU1NRVIpCisjZGVmaW5lIEFFX0JBRF9DSEFSQUNURVIgICAgICAgICAgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDAyIHwgQUVfQ09ERV9QUk9HUkFNTUVSKQorI2RlZmluZSBBRV9CQURfUEFUSE5BTUUgICAgICAgICAgICAgICAgIChhY3BpX3N0YXR1cykgKDB4MDAwMyB8IEFFX0NPREVfUFJPR1JBTU1FUikKKyNkZWZpbmUgQUVfQkFEX0RBVEEgICAgICAgICAgICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMDQgfCBBRV9DT0RFX1BST0dSQU1NRVIpCisjZGVmaW5lIEFFX0JBRF9BRERSRVNTICAgICAgICAgICAgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDA1IHwgQUVfQ09ERV9QUk9HUkFNTUVSKQorI2RlZmluZSBBRV9BTElHTk1FTlQgICAgICAgICAgICAgICAgICAgIChhY3BpX3N0YXR1cykgKDB4MDAwNiB8IEFFX0NPREVfUFJPR1JBTU1FUikKKyNkZWZpbmUgQUVfQkFEX0hFWF9DT05TVEFOVCAgICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMDcgfCBBRV9DT0RFX1BST0dSQU1NRVIpCisjZGVmaW5lIEFFX0JBRF9PQ1RBTF9DT05TVEFOVCAgICAgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDA4IHwgQUVfQ09ERV9QUk9HUkFNTUVSKQorI2RlZmluZSBBRV9CQURfREVDSU1BTF9DT05TVEFOVCAgICAgICAgIChhY3BpX3N0YXR1cykgKDB4MDAwOSB8IEFFX0NPREVfUFJPR1JBTU1FUikKKworI2RlZmluZSBBRV9DT0RFX1BHTV9NQVggICAgICAgICAgICAgICAgIDB4MDAwOQorCisKKy8qCisgKiBBY3BpIHRhYmxlIGV4Y2VwdGlvbnMKKyAqLworI2RlZmluZSBBRV9CQURfU0lHTkFUVVJFICAgICAgICAgICAgICAgIChhY3BpX3N0YXR1cykgKDB4MDAwMSB8IEFFX0NPREVfQUNQSV9UQUJMRVMpCisjZGVmaW5lIEFFX0JBRF9IRUFERVIgICAgICAgICAgICAgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDAyIHwgQUVfQ09ERV9BQ1BJX1RBQkxFUykKKyNkZWZpbmUgQUVfQkFEX0NIRUNLU1VNICAgICAgICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMDMgfCBBRV9DT0RFX0FDUElfVEFCTEVTKQorI2RlZmluZSBBRV9CQURfVkFMVUUgICAgICAgICAgICAgICAgICAgIChhY3BpX3N0YXR1cykgKDB4MDAwNCB8IEFFX0NPREVfQUNQSV9UQUJMRVMpCisjZGVmaW5lIEFFX1RBQkxFX05PVF9TVVBQT1JURUQgICAgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDA1IHwgQUVfQ09ERV9BQ1BJX1RBQkxFUykKKyNkZWZpbmUgQUVfSU5WQUxJRF9UQUJMRV9MRU5HVEggICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMDYgfCBBRV9DT0RFX0FDUElfVEFCTEVTKQorCisjZGVmaW5lIEFFX0NPREVfVEJMX01BWCAgICAgICAgICAgICAgICAgMHgwMDA2CisKKworLyoKKyAqIEFNTCBleGNlcHRpb25zLiAgVGhlc2UgYXJlIGNhdXNlZCBieSBwcm9ibGVtcyB3aXRoCisgKiB0aGUgYWN0dWFsIEFNTCBieXRlIHN0cmVhbQorICovCisjZGVmaW5lIEFFX0FNTF9FUlJPUiAgICAgICAgICAgICAgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDAxIHwgQUVfQ09ERV9BTUwpCisjZGVmaW5lIEFFX0FNTF9QQVJTRSAgICAgICAgICAgICAgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDAyIHwgQUVfQ09ERV9BTUwpCisjZGVmaW5lIEFFX0FNTF9CQURfT1BDT0RFICAgICAgICAgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDAzIHwgQUVfQ09ERV9BTUwpCisjZGVmaW5lIEFFX0FNTF9OT19PUEVSQU5EICAgICAgICAgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDA0IHwgQUVfQ09ERV9BTUwpCisjZGVmaW5lIEFFX0FNTF9PUEVSQU5EX1RZUEUgICAgICAgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDA1IHwgQUVfQ09ERV9BTUwpCisjZGVmaW5lIEFFX0FNTF9PUEVSQU5EX1ZBTFVFICAgICAgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDA2IHwgQUVfQ09ERV9BTUwpCisjZGVmaW5lIEFFX0FNTF9VTklOSVRJQUxJWkVEX0xPQ0FMICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDA3IHwgQUVfQ09ERV9BTUwpCisjZGVmaW5lIEFFX0FNTF9VTklOSVRJQUxJWkVEX0FSRyAgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDA4IHwgQUVfQ09ERV9BTUwpCisjZGVmaW5lIEFFX0FNTF9VTklOSVRJQUxJWkVEX0VMRU1FTlQgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDA5IHwgQUVfQ09ERV9BTUwpCisjZGVmaW5lIEFFX0FNTF9OVU1FUklDX09WRVJGTE9XICAgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDBBIHwgQUVfQ09ERV9BTUwpCisjZGVmaW5lIEFFX0FNTF9SRUdJT05fTElNSVQgICAgICAgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDBCIHwgQUVfQ09ERV9BTUwpCisjZGVmaW5lIEFFX0FNTF9CVUZGRVJfTElNSVQgICAgICAgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDBDIHwgQUVfQ09ERV9BTUwpCisjZGVmaW5lIEFFX0FNTF9QQUNLQUdFX0xJTUlUICAgICAgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDBEIHwgQUVfQ09ERV9BTUwpCisjZGVmaW5lIEFFX0FNTF9ESVZJREVfQllfWkVSTyAgICAgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDBFIHwgQUVfQ09ERV9BTUwpCisjZGVmaW5lIEFFX0FNTF9CQURfTkFNRSAgICAgICAgICAgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDBGIHwgQUVfQ09ERV9BTUwpCisjZGVmaW5lIEFFX0FNTF9OQU1FX05PVF9GT1VORCAgICAgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDEwIHwgQUVfQ09ERV9BTUwpCisjZGVmaW5lIEFFX0FNTF9JTlRFUk5BTCAgICAgICAgICAgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDExIHwgQUVfQ09ERV9BTUwpCisjZGVmaW5lIEFFX0FNTF9JTlZBTElEX1NQQUNFX0lEICAgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDEyIHwgQUVfQ09ERV9BTUwpCisjZGVmaW5lIEFFX0FNTF9TVFJJTkdfTElNSVQgICAgICAgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDEzIHwgQUVfQ09ERV9BTUwpCisjZGVmaW5lIEFFX0FNTF9OT19SRVRVUk5fVkFMVUUgICAgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDE0IHwgQUVfQ09ERV9BTUwpCisjZGVmaW5lIEFFX0FNTF9NRVRIT0RfTElNSVQgICAgICAgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDE1IHwgQUVfQ09ERV9BTUwpCisjZGVmaW5lIEFFX0FNTF9OT1RfT1dORVIgICAgICAgICAgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDE2IHwgQUVfQ09ERV9BTUwpCisjZGVmaW5lIEFFX0FNTF9NVVRFWF9PUkRFUiAgICAgICAgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDE3IHwgQUVfQ09ERV9BTUwpCisjZGVmaW5lIEFFX0FNTF9NVVRFWF9OT1RfQUNRVUlSRUQgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDE4IHwgQUVfQ09ERV9BTUwpCisjZGVmaW5lIEFFX0FNTF9JTlZBTElEX1JFU09VUkNFX1RZUEUgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDE5IHwgQUVfQ09ERV9BTUwpCisjZGVmaW5lIEFFX0FNTF9JTlZBTElEX0lOREVYICAgICAgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDFBIHwgQUVfQ09ERV9BTUwpCisjZGVmaW5lIEFFX0FNTF9SRUdJU1RFUl9MSU1JVCAgICAgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDFCIHwgQUVfQ09ERV9BTUwpCisjZGVmaW5lIEFFX0FNTF9OT19XSElMRSAgICAgICAgICAgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDFDIHwgQUVfQ09ERV9BTUwpCisjZGVmaW5lIEFFX0FNTF9BTElHTk1FTlQgICAgICAgICAgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDFEIHwgQUVfQ09ERV9BTUwpCisjZGVmaW5lIEFFX0FNTF9OT19SRVNPVVJDRV9FTkRfVEFHICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDFFIHwgQUVfQ09ERV9BTUwpCisjZGVmaW5lIEFFX0FNTF9CQURfUkVTT1VSQ0VfVkFMVUUgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDFGIHwgQUVfQ09ERV9BTUwpCisjZGVmaW5lIEFFX0FNTF9DSVJDVUxBUl9SRUZFUkVOQ0UgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDIwIHwgQUVfQ09ERV9BTUwpCisjZGVmaW5lIEFFX0FNTF9CQURfUkVTT1VSQ0VfTEVOR1RIICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDIxIHwgQUVfQ09ERV9BTUwpCisKKyNkZWZpbmUgQUVfQ09ERV9BTUxfTUFYICAgICAgICAgICAgICAgICAweDAwMjEKKworLyoKKyAqIEludGVybmFsIGV4Y2VwdGlvbnMgdXNlZCBmb3IgY29udHJvbAorICovCisjZGVmaW5lIEFFX0NUUkxfUkVUVVJOX1ZBTFVFICAgICAgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDAxIHwgQUVfQ09ERV9DT05UUk9MKQorI2RlZmluZSBBRV9DVFJMX1BFTkRJTkcgICAgICAgICAgICAgICAgIChhY3BpX3N0YXR1cykgKDB4MDAwMiB8IEFFX0NPREVfQ09OVFJPTCkKKyNkZWZpbmUgQUVfQ1RSTF9URVJNSU5BVEUgICAgICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMDMgfCBBRV9DT0RFX0NPTlRST0wpCisjZGVmaW5lIEFFX0NUUkxfVFJVRSAgICAgICAgICAgICAgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDA0IHwgQUVfQ09ERV9DT05UUk9MKQorI2RlZmluZSBBRV9DVFJMX0ZBTFNFICAgICAgICAgICAgICAgICAgIChhY3BpX3N0YXR1cykgKDB4MDAwNSB8IEFFX0NPREVfQ09OVFJPTCkKKyNkZWZpbmUgQUVfQ1RSTF9ERVBUSCAgICAgICAgICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMDYgfCBBRV9DT0RFX0NPTlRST0wpCisjZGVmaW5lIEFFX0NUUkxfRU5EICAgICAgICAgICAgICAgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDA3IHwgQUVfQ09ERV9DT05UUk9MKQorI2RlZmluZSBBRV9DVFJMX1RSQU5TRkVSICAgICAgICAgICAgICAgIChhY3BpX3N0YXR1cykgKDB4MDAwOCB8IEFFX0NPREVfQ09OVFJPTCkKKyNkZWZpbmUgQUVfQ1RSTF9CUkVBSyAgICAgICAgICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMDkgfCBBRV9DT0RFX0NPTlRST0wpCisjZGVmaW5lIEFFX0NUUkxfQ09OVElOVUUgICAgICAgICAgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDBBIHwgQUVfQ09ERV9DT05UUk9MKQorI2RlZmluZSBBRV9DVFJMX1NLSVAgICAgICAgICAgICAgICAgICAgIChhY3BpX3N0YXR1cykgKDB4MDAwQiB8IEFFX0NPREVfQ09OVFJPTCkKKworI2RlZmluZSBBRV9DT0RFX0NUUkxfTUFYICAgICAgICAgICAgICAgIDB4MDAwQgorCisKKyNpZmRlZiBERUZJTkVfQUNQSV9HTE9CQUxTCisKKy8qCisgKiBTdHJpbmcgdmVyc2lvbnMgb2YgdGhlIGV4Y2VwdGlvbiBjb2RlcyBhYm92ZQorICogVGhlc2Ugc3RyaW5ncyBtdXN0IG1hdGNoIHRoZSBjb3JyZXNwb25kaW5nIGRlZmluZXMgZXhhY3RseQorICovCitjaGFyIGNvbnN0ICAgKmFjcGlfZ2JsX2V4Y2VwdGlvbl9uYW1lc19lbnZbXSA9Cit7CisJIkFFX09LIiwKKwkiQUVfRVJST1IiLAorCSJBRV9OT19BQ1BJX1RBQkxFUyIsCisJIkFFX05PX05BTUVTUEFDRSIsCisJIkFFX05PX01FTU9SWSIsCisJIkFFX05PVF9GT1VORCIsCisJIkFFX05PVF9FWElTVCIsCisJIkFFX0FMUkVBRFlfRVhJU1RTIiwKKwkiQUVfVFlQRSIsCisJIkFFX05VTExfT0JKRUNUIiwKKwkiQUVfTlVMTF9FTlRSWSIsCisJIkFFX0JVRkZFUl9PVkVSRkxPVyIsCisJIkFFX1NUQUNLX09WRVJGTE9XIiwKKwkiQUVfU1RBQ0tfVU5ERVJGTE9XIiwKKwkiQUVfTk9UX0lNUExFTUVOVEVEIiwKKwkiQUVfVkVSU0lPTl9NSVNNQVRDSCIsCisJIkFFX1NVUFBPUlQiLAorCSJBRV9TSEFSRSIsCisJIkFFX0xJTUlUIiwKKwkiQUVfVElNRSIsCisJIkFFX1VOS05PV05fU1RBVFVTIiwKKwkiQUVfQUNRVUlSRV9ERUFETE9DSyIsCisJIkFFX1JFTEVBU0VfREVBRExPQ0siLAorCSJBRV9OT1RfQUNRVUlSRUQiLAorCSJBRV9BTFJFQURZX0FDUVVJUkVEIiwKKwkiQUVfTk9fSEFSRFdBUkVfUkVTUE9OU0UiLAorCSJBRV9OT19HTE9CQUxfTE9DSyIsCisJIkFFX0xPR0lDQUxfQUREUkVTUyIsCisJIkFFX0FCT1JUX01FVEhPRCIsCisJIkFFX1NBTUVfSEFORExFUiIsCisJIkFFX1dBS0VfT05MWV9HUEUiCit9OworCitjaGFyIGNvbnN0ICAgKmFjcGlfZ2JsX2V4Y2VwdGlvbl9uYW1lc19wZ21bXSA9Cit7CisJIkFFX0JBRF9QQVJBTUVURVIiLAorCSJBRV9CQURfQ0hBUkFDVEVSIiwKKwkiQUVfQkFEX1BBVEhOQU1FIiwKKwkiQUVfQkFEX0RBVEEiLAorCSJBRV9CQURfQUREUkVTUyIsCisJIkFFX0FMSUdOTUVOVCIsCisJIkFFX0JBRF9IRVhfQ09OU1RBTlQiLAorCSJBRV9CQURfT0NUQUxfQ09OU1RBTlQiLAorCSJBRV9CQURfREVDSU1BTF9DT05TVEFOVCIKK307CisKK2NoYXIgY29uc3QgICAqYWNwaV9nYmxfZXhjZXB0aW9uX25hbWVzX3RibFtdID0KK3sKKwkiQUVfQkFEX1NJR05BVFVSRSIsCisJIkFFX0JBRF9IRUFERVIiLAorCSJBRV9CQURfQ0hFQ0tTVU0iLAorCSJBRV9CQURfVkFMVUUiLAorCSJBRV9UQUJMRV9OT1RfU1VQUE9SVEVEIiwKKwkiQUVfSU5WQUxJRF9UQUJMRV9MRU5HVEgiCit9OworCitjaGFyIGNvbnN0ICAgKmFjcGlfZ2JsX2V4Y2VwdGlvbl9uYW1lc19hbWxbXSA9Cit7CisJIkFFX0FNTF9FUlJPUiIsCisJIkFFX0FNTF9QQVJTRSIsCisJIkFFX0FNTF9CQURfT1BDT0RFIiwKKwkiQUVfQU1MX05PX09QRVJBTkQiLAorCSJBRV9BTUxfT1BFUkFORF9UWVBFIiwKKwkiQUVfQU1MX09QRVJBTkRfVkFMVUUiLAorCSJBRV9BTUxfVU5JTklUSUFMSVpFRF9MT0NBTCIsCisJIkFFX0FNTF9VTklOSVRJQUxJWkVEX0FSRyIsCisJIkFFX0FNTF9VTklOSVRJQUxJWkVEX0VMRU1FTlQiLAorCSJBRV9BTUxfTlVNRVJJQ19PVkVSRkxPVyIsCisJIkFFX0FNTF9SRUdJT05fTElNSVQiLAorCSJBRV9BTUxfQlVGRkVSX0xJTUlUIiwKKwkiQUVfQU1MX1BBQ0tBR0VfTElNSVQiLAorCSJBRV9BTUxfRElWSURFX0JZX1pFUk8iLAorCSJBRV9BTUxfQkFEX05BTUUiLAorCSJBRV9BTUxfTkFNRV9OT1RfRk9VTkQiLAorCSJBRV9BTUxfSU5URVJOQUwiLAorCSJBRV9BTUxfSU5WQUxJRF9TUEFDRV9JRCIsCisJIkFFX0FNTF9TVFJJTkdfTElNSVQiLAorCSJBRV9BTUxfTk9fUkVUVVJOX1ZBTFVFIiwKKwkiQUVfQU1MX01FVEhPRF9MSU1JVCIsCisJIkFFX0FNTF9OT1RfT1dORVIiLAorCSJBRV9BTUxfTVVURVhfT1JERVIiLAorCSJBRV9BTUxfTVVURVhfTk9UX0FDUVVJUkVEIiwKKwkiQUVfQU1MX0lOVkFMSURfUkVTT1VSQ0VfVFlQRSIsCisJIkFFX0FNTF9JTlZBTElEX0lOREVYIiwKKwkiQUVfQU1MX1JFR0lTVEVSX0xJTUlUIiwKKwkiQUVfQU1MX05PX1dISUxFIiwKKwkiQUVfQU1MX0FMSUdOTUVOVCIsCisJIkFFX0FNTF9OT19SRVNPVVJDRV9FTkRfVEFHIiwKKwkiQUVfQU1MX0JBRF9SRVNPVVJDRV9WQUxVRSIsCisJIkFFX0FNTF9DSVJDVUxBUl9SRUZFUkVOQ0UiLAorCSJBRV9BTUxfQkFEX1JFU09VUkNFX0xFTkdUSCIKK307CisKK2NoYXIgY29uc3QgICAqYWNwaV9nYmxfZXhjZXB0aW9uX25hbWVzX2N0cmxbXSA9Cit7CisJIkFFX0NUUkxfUkVUVVJOX1ZBTFVFIiwKKwkiQUVfQ1RSTF9QRU5ESU5HIiwKKwkiQUVfQ1RSTF9URVJNSU5BVEUiLAorCSJBRV9DVFJMX1RSVUUiLAorCSJBRV9DVFJMX0ZBTFNFIiwKKwkiQUVfQ1RSTF9ERVBUSCIsCisJIkFFX0NUUkxfRU5EIiwKKwkiQUVfQ1RSTF9UUkFOU0ZFUiIsCisJIkFFX0NUUkxfQlJFQUsiLAorCSJBRV9DVFJMX0NPTlRJTlVFIiwKKwkiQUVfQ1RSTF9TS0lQIgorfTsKKworI2VuZGlmIC8qIEFDUEkgR0xPQkFMUyAqLworCisKKyNlbmRpZiAvKiBfX0FDRVhDRVBfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWNnbG9iYWwuaCBiL2luY2x1ZGUvYWNwaS9hY2dsb2JhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3ZjM4N2EKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FjcGkvYWNnbG9iYWwuaApAQCAtMCwwICsxLDM1NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIE5hbWU6IGFjZ2xvYmFsLmggLSBEZWNsYXJhdGlvbnMgZm9yIGdsb2JhbCB2YXJpYWJsZXMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA1LCBSLiBCeXJvbiBNb29yZQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLAorICogICAgd2l0aG91dCBtb2RpZmljYXRpb24uCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgYXQgbWluaW11bSBhIGRpc2NsYWltZXIKKyAqICAgIHN1YnN0YW50aWFsbHkgc2ltaWxhciB0byB0aGUgIk5PIFdBUlJBTlRZIiBkaXNjbGFpbWVyIGJlbG93CisgKiAgICAoIkRpc2NsYWltZXIiKSBhbmQgYW55IHJlZGlzdHJpYnV0aW9uIG11c3QgYmUgY29uZGl0aW9uZWQgdXBvbgorICogICAgaW5jbHVkaW5nIGEgc3Vic3RhbnRpYWxseSBzaW1pbGFyIERpc2NsYWltZXIgcmVxdWlyZW1lbnQgZm9yIGZ1cnRoZXIKKyAqICAgIGJpbmFyeSByZWRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWVzIG9mIHRoZSBhYm92ZS1saXN0ZWQgY29weXJpZ2h0IGhvbGRlcnMgbm9yIHRoZSBuYW1lcworICogICAgb2YgYW55IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBOTyBXQVJSQU5UWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcKKyAqIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorICovCisKKyNpZm5kZWYgX19BQ0dMT0JBTF9IX18KKyNkZWZpbmUgX19BQ0dMT0JBTF9IX18KKworCisvKgorICogRW5zdXJlIHRoYXQgdGhlIGdsb2JhbHMgYXJlIGFjdHVhbGx5IGRlZmluZWQgYW5kIGluaXRpYWxpemVkIG9ubHkgb25jZS4KKyAqCisgKiBUaGUgdXNlIG9mIHRoZXNlIG1hY3JvcyBhbGxvd3MgYSBzaW5nbGUgbGlzdCBvZiBnbG9iYWxzIChoZXJlKSBpbiBvcmRlcgorICogdG8gc2ltcGxpZnkgbWFpbnRlbmFuY2Ugb2YgdGhlIGNvZGUuCisgKi8KKyNpZmRlZiBERUZJTkVfQUNQSV9HTE9CQUxTCisjZGVmaW5lIEFDUElfRVhURVJOCisjZGVmaW5lIEFDUElfSU5JVF9HTE9CQUwoYSxiKSBhPWIKKyNlbHNlCisjZGVmaW5lIEFDUElfRVhURVJOIGV4dGVybgorI2RlZmluZSBBQ1BJX0lOSVRfR0xPQkFMKGEsYikgYQorI2VuZGlmCisKKy8qCisgKiBLZWVwIGxvY2FsIGNvcGllcyBvZiB0aGVzZSBGQURULWJhc2VkIHJlZ2lzdGVycy4gIE5PVEU6IFRoZXNlIGdsb2JhbHMKKyAqIGFyZSBmaXJzdCBpbiB0aGlzIGZpbGUgZm9yIGFsaWdubWVudCByZWFzb25zIG9uIDY0LWJpdCBzeXN0ZW1zLgorICovCitBQ1BJX0VYVEVSTiBzdHJ1Y3QgYWNwaV9nZW5lcmljX2FkZHJlc3MgICAgICAgICBhY3BpX2dibF94cG0xYV9lbmFibGU7CitBQ1BJX0VYVEVSTiBzdHJ1Y3QgYWNwaV9nZW5lcmljX2FkZHJlc3MgICAgICAgICBhY3BpX2dibF94cG0xYl9lbmFibGU7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRGVidWcgc3VwcG9ydAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBSdW50aW1lIGNvbmZpZ3VyYXRpb24gb2YgZGVidWcgcHJpbnQgbGV2ZWxzICovCisKK2V4dGVybiAgICAgIHUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjcGlfZGJnX2xldmVsOworZXh0ZXJuICAgICAgdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNwaV9kYmdfbGF5ZXI7CisKKy8qIFByb2NlZHVyZSBuZXN0aW5nIGxldmVsIGZvciBkZWJ1ZyBvdXRwdXQgKi8KKworZXh0ZXJuICAgICAgdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNwaV9nYmxfbmVzdGluZ19sZXZlbDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBSdW50aW1lIGNvbmZpZ3VyYXRpb24gKHN0YXRpYyBkZWZhdWx0cyB0aGF0IGNhbiBiZSBvdmVycmlkZW4gYXQgcnVudGltZSkKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIEVuYWJsZSAic2xhY2siIGluIHRoZSBBTUwgaW50ZXJwcmV0ZXI/ICBEZWZhdWx0IGlzIEZBTFNFLCBhbmQgdGhlCisgKiBpbnRlcnByZXRlciBzdHJpY3RseSBmb2xsb3dzIHRoZSBBQ1BJIHNwZWNpZmljYXRpb24uICBTZXR0aW5nIHRvIFRSVUUKKyAqIGFsbG93cyB0aGUgaW50ZXJwcmV0ZXIgdG8gZm9yZ2l2ZSBjZXJ0YWluIGJhZCBBTUwgY29uc3RydWN0cy4gIEN1cnJlbnRseToKKyAqIDEpIEFsbG93ICJpbXBsaWNpdCByZXR1cm4iIG9mIGxhc3QgdmFsdWUgaW4gYSBjb250cm9sIG1ldGhvZAorICogMikgQWxsb3cgYWNjZXNzIGJleW9uZCBlbmQgb2Ygb3BlcmF0aW9uIHJlZ2lvbgorICogMykgQWxsb3cgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgbG9jYWxzL2FyZ3MgKGF1dG8taW5pdCB0byBpbnRlZ2VyIDApCisgKiA0KSBBbGxvdyBBTlkgb2JqZWN0IHR5cGUgdG8gYmUgYSBzb3VyY2Ugb3BlcmFuZCBmb3IgdGhlIFN0b3JlKCkgb3BlcmF0b3IKKyAqLworQUNQSV9FWFRFUk4gdTggICAgICAgQUNQSV9JTklUX0dMT0JBTCAoYWNwaV9nYmxfZW5hYmxlX2ludGVycHJldGVyX3NsYWNrLCBGQUxTRSk7CisKKy8qCisgKiBBdXRvbWF0aWNhbGx5IHNlcmlhbGl6ZSBBTEwgY29udHJvbCBtZXRob2RzPyBEZWZhdWx0IGlzIEZBTFNFLCBtZWFuaW5nCisgKiB0byB1c2UgdGhlIFNlcmlhbGl6ZWQvbm90X3NlcmlhbGl6ZWQgbWV0aG9kIGZsYWdzIG9uIGEgcGVyIG1ldGhvZCBiYXNpcy4KKyAqIE9ubHkgY2hhbmdlIHRoaXMgaWYgdGhlIEFTTCBjb2RlIGlzIHBvb3JseSB3cml0dGVuIGFuZCBjYW5ub3QgaGFuZGxlCisgKiByZWVudHJhbmN5IGV2ZW4gdGhvdWdoIG1ldGhvZHMgYXJlIG1hcmtlZCAibm90X3NlcmlhbGl6ZWQiLgorICovCitBQ1BJX0VYVEVSTiB1OCAgICAgICBBQ1BJX0lOSVRfR0xPQkFMIChhY3BpX2dibF9hbGxfbWV0aG9kc19zZXJpYWxpemVkLCBGQUxTRSk7CisKKy8qCisgKiBDcmVhdGUgdGhlIHByZWRlZmluZWQgX09TSSBtZXRob2QgaW4gdGhlIG5hbWVzcGFjZT8gRGVmYXVsdCBpcyBUUlVFCisgKiBiZWNhdXNlIEFDUEkgQ0EgaXMgZnVsbHkgY29tcGF0aWJsZSB3aXRoIG90aGVyIEFDUEkgaW1wbGVtZW50YXRpb25zLgorICogQ2hhbmdpbmcgdGhpcyB3aWxsIHJldmVydCBBQ1BJIENBIChhbmQgbWFjaGluZSBBU0wpIHRvIHByZS1PU0kgYmVoYXZpb3IuCisgKi8KK0FDUElfRVhURVJOIHU4ICAgICAgIEFDUElfSU5JVF9HTE9CQUwgKGFjcGlfZ2JsX2NyZWF0ZV9vc2lfbWV0aG9kLCBUUlVFKTsKKworLyoKKyAqIERpc2FibGUgd2FrZXVwIEdQRXMgZHVyaW5nIHJ1bnRpbWU/IERlZmF1bHQgaXMgVFJVRSBiZWNhdXNlIFdBS0UgYW5kCisgKiBSVU5USU1FIEdQRXMgc2hvdWxkIG5ldmVyIGJlIHNoYXJlZCwgYW5kIFdBS0UgR1BFcyBzaG91bGQgdHlwaWNhbGx5IG9ubHkKKyAqIGJlIGVuYWJsZWQganVzdCBiZWZvcmUgZ29pbmcgdG8gc2xlZXAuCisgKi8KK0FDUElfRVhURVJOIHU4ICAgICAgIEFDUElfSU5JVF9HTE9CQUwgKGFjcGlfZ2JsX2xlYXZlX3dha2VfZ3Blc19kaXNhYmxlZCwgVFJVRSk7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQUNQSSBUYWJsZSBnbG9iYWxzCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBUYWJsZSBwb2ludGVycy4KKyAqIEFsdGhvdWdoIHRoZXNlIHBvaW50ZXJzIGFyZSBzb21ld2hhdCByZWR1bmRhbnQgd2l0aCB0aGUgZ2xvYmFsIGFjcGlfdGFibGUsCisgKiB0aGV5IGFyZSBjb252ZW5pZW50IGJlY2F1c2UgdGhleSBhcmUgdHlwZWQgcG9pbnRlcnMuCisgKgorICogVGhlc2UgdGFibGVzIGFyZSBzaW5nbGUtdGFibGUgb25seTsgbWVhbmluZyB0aGF0IHRoZXJlIGNhbiBiZSBhdCBtb3N0IG9uZQorICogb2YgZWFjaCBpbiB0aGUgc3lzdGVtLiAgRWFjaCBnbG9iYWwgcG9pbnRzIHRvIHRoZSBhY3R1YWwgdGFibGUuCisgKi8KK0FDUElfRVhURVJOIHUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjcGlfZ2JsX3RhYmxlX2ZsYWdzOworQUNQSV9FWFRFUk4gdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNwaV9nYmxfcnNkdF90YWJsZV9jb3VudDsKK0FDUElfRVhURVJOIHN0cnVjdCByc2RwX2Rlc2NyaXB0b3IgICAgICAgICAgICAgKmFjcGlfZ2JsX1JTRFA7CitBQ1BJX0VYVEVSTiBYU0RUX0RFU0NSSVBUT1IgICAgICAgICAgICAqYWNwaV9nYmxfWFNEVDsKK0FDUElfRVhURVJOIEZBRFRfREVTQ1JJUFRPUiAgICAgICAgICAgICphY3BpX2dibF9GQURUOworQUNQSV9FWFRFUk4gc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICAgICAgICAgICAqYWNwaV9nYmxfRFNEVDsKK0FDUElfRVhURVJOIEZBQ1NfREVTQ1JJUFRPUiAgICAgICAgICAgICphY3BpX2dibF9GQUNTOworQUNQSV9FWFRFUk4gc3RydWN0IGFjcGlfY29tbW9uX2ZhY3MgICAgICAgICAgICAgYWNwaV9nYmxfY29tbW9uX2ZBQ1M7CisvKgorICogU2luY2UgdGhlcmUgbWF5IGJlIG11bHRpcGxlIFNTRFRzIGFuZCBQU0RUUywgYSBzaW5nbGUgcG9pbnRlciBpcyBub3QKKyAqIHN1ZmZpY2llbnQ7IFRoZXJlZm9yZSwgdGhlcmUgaXNuJ3Qgb25lIQorICovCisKKworLyoKKyAqIEhhbmRsZSBib3RoIEFDUEkgMS4wIGFuZCBBQ1BJIDIuMCBJbnRlZ2VyIHdpZHRocworICogSWYgd2UgYXJlIHJ1bm5pbmcgYSBtZXRob2QgdGhhdCBleGlzdHMgaW4gYSAzMi1iaXQgQUNQSSB0YWJsZS4KKyAqIFVzZSBvbmx5IDMyIGJpdHMgb2YgdGhlIEludGVnZXIgZm9yIGNvbnZlcnNpb24uCisgKi8KK0FDUElfRVhURVJOIHU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjcGlfZ2JsX2ludGVnZXJfYml0X3dpZHRoOworQUNQSV9FWFRFUk4gdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNwaV9nYmxfaW50ZWdlcl9ieXRlX3dpZHRoOworQUNQSV9FWFRFUk4gdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNwaV9nYmxfaW50ZWdlcl9ueWJibGVfd2lkdGg7CisKKy8qCisgKiBBQ1BJIFRhYmxlIGluZm8gYXJyYXlzCisgKi8KK2V4dGVybiAgICAgIHN0cnVjdCBhY3BpX3RhYmxlX2xpc3QgICAgICAgICAgICAgIGFjcGlfZ2JsX3RhYmxlX2xpc3RzW05VTV9BQ1BJX1RBQkxFX1RZUEVTXTsKK2V4dGVybiAgICAgIHN0cnVjdCBhY3BpX3RhYmxlX3N1cHBvcnQgICAgICAgICAgIGFjcGlfZ2JsX3RhYmxlX2RhdGFbTlVNX0FDUElfVEFCTEVfVFlQRVNdOworCisvKgorICogUHJlZGVmaW5lZCBtdXRleCBvYmplY3RzLiAgVGhpcyBhcnJheSBjb250YWlucyB0aGUKKyAqIGFjdHVhbCBPUyBtdXRleCBoYW5kbGVzLCBpbmRleGVkIGJ5IHRoZSBsb2NhbCBBQ1BJX01VVEVYX0hBTkRMRXMuCisgKiAoVGhlIHRhYmxlIG1hcHMgbG9jYWwgaGFuZGxlcyB0byB0aGUgcmVhbCBPUyBoYW5kbGVzKQorICovCitBQ1BJX0VYVEVSTiBzdHJ1Y3QgYWNwaV9tdXRleF9pbmZvICAgICAgICAgICAgICBhY3BpX2dibF9tdXRleF9pbmZvW05VTV9NVVRFWF07CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogTWlzY2VsbGFuZW91cyBnbG9iYWxzCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworQUNQSV9FWFRFUk4gc3RydWN0IGFjcGlfbWVtb3J5X2xpc3QgICAgICAgICAgICAgYWNwaV9nYmxfbWVtb3J5X2xpc3RzW0FDUElfTlVNX01FTV9MSVNUU107CitBQ1BJX0VYVEVSTiBzdHJ1Y3QgYWNwaV9vYmplY3Rfbm90aWZ5X2hhbmRsZXIgICBhY3BpX2dibF9kZXZpY2Vfbm90aWZ5OworQUNQSV9FWFRFUk4gc3RydWN0IGFjcGlfb2JqZWN0X25vdGlmeV9oYW5kbGVyICAgYWNwaV9nYmxfc3lzdGVtX25vdGlmeTsKK0FDUElfRVhURVJOIGFjcGlfZXhjZXB0aW9uX2hhbmRsZXIgICAgICAgICAgICAgIGFjcGlfZ2JsX2V4Y2VwdGlvbl9oYW5kbGVyOworQUNQSV9FWFRFUk4gYWNwaV9pbml0X2hhbmRsZXIgICAgICAgICAgICAgICAgICAgYWNwaV9nYmxfaW5pdF9oYW5kbGVyOworQUNQSV9FWFRFUk4gc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAgICAgICAgICAgICAqYWNwaV9nYmxfYnJlYWtwb2ludF93YWxrOworQUNQSV9FWFRFUk4gYWNwaV9oYW5kbGUgICAgICAgICAgICAgICAgICAgICAgICAgYWNwaV9nYmxfZ2xvYmFsX2xvY2tfc2VtYXBob3JlOworCitBQ1BJX0VYVEVSTiB1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3BpX2dibF9nbG9iYWxfbG9ja190aHJlYWRfY291bnQ7CitBQ1BJX0VYVEVSTiB1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3BpX2dibF9vcmlnaW5hbF9tb2RlOworQUNQSV9FWFRFUk4gdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNwaV9nYmxfcnNkcF9vcmlnaW5hbF9sb2NhdGlvbjsKK0FDUElfRVhURVJOIHUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjcGlfZ2JsX25zX2xvb2t1cF9jb3VudDsKK0FDUElfRVhURVJOIHUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjcGlfZ2JsX3BzX2ZpbmRfY291bnQ7CitBQ1BJX0VYVEVSTiB1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3BpX2dibF9wbTFfZW5hYmxlX3JlZ2lzdGVyX3NhdmU7CitBQ1BJX0VYVEVSTiB1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3BpX2dibF9uZXh0X3RhYmxlX293bmVyX2lkOworQUNQSV9FWFRFUk4gdTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNwaV9nYmxfbmV4dF9tZXRob2Rfb3duZXJfaWQ7CitBQ1BJX0VYVEVSTiB1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3BpX2dibF9nbG9iYWxfbG9ja19oYW5kbGU7CitBQ1BJX0VYVEVSTiB1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3BpX2dibF9kZWJ1Z2dlcl9jb25maWd1cmF0aW9uOworQUNQSV9FWFRFUk4gdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNwaV9nYmxfZ2xvYmFsX2xvY2tfYWNxdWlyZWQ7CitBQ1BJX0VYVEVSTiB1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3BpX2dibF9zdGVwX3RvX25leHRfY2FsbDsKK0FDUElfRVhURVJOIHU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjcGlfZ2JsX2FjcGlfaGFyZHdhcmVfcHJlc2VudDsKK0FDUElfRVhURVJOIHU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjcGlfZ2JsX2dsb2JhbF9sb2NrX3ByZXNlbnQ7CitBQ1BJX0VYVEVSTiB1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3BpX2dibF9ldmVudHNfaW5pdGlhbGl6ZWQ7CitBQ1BJX0VYVEVSTiB1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3BpX2dibF9zeXN0ZW1fYXdha2VfYW5kX3J1bm5pbmc7CisKK2V4dGVybiB1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjcGlfZ2JsX3NodXRkb3duOworZXh0ZXJuIHUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNwaV9nYmxfc3RhcnR1cF9mbGFnczsKK2V4dGVybiBjb25zdCB1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjcGlfZ2JsX2RlY29kZV90bzhiaXRbOF07CitleHRlcm4gY29uc3QgY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICphY3BpX2dibF9zbGVlcF9zdGF0ZV9uYW1lc1tBQ1BJX1NfU1RBVEVfQ09VTlRdOworZXh0ZXJuIGNvbnN0IGNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYWNwaV9nYmxfaGlnaGVzdF9kc3RhdGVfbmFtZXNbNF07CitleHRlcm4gY29uc3Qgc3RydWN0IGFjcGlfb3Bjb2RlX2luZm8gICAgICAgICAgICBhY3BpX2dibF9hbWxfb3BfaW5mb1tBTUxfTlVNX09QQ09ERVNdOworZXh0ZXJuIGNvbnN0IGNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYWNwaV9nYmxfcmVnaW9uX3R5cGVzW0FDUElfTlVNX1BSRURFRklORURfUkVHSU9OU107CitleHRlcm4gY29uc3QgY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICphY3BpX2dibF92YWxpZF9vc2lfc3RyaW5nc1tBQ1BJX05VTV9PU0lfU1RSSU5HU107CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogTmFtZXNwYWNlIGdsb2JhbHMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBOVU1fTlNfVFlQRVMgICAgICAgICAgICAgICAgICAgIEFDUElfVFlQRV9JTlZBTElEKzEKKworI2lmICFkZWZpbmVkIChBQ1BJX05PX01FVEhPRF9FWEVDVVRJT04pIHx8IGRlZmluZWQgKEFDUElfQ09OU1RBTlRfRVZBTF9PTkxZKQorI2RlZmluZSBOVU1fUFJFREVGSU5FRF9OQU1FUyAgICAgICAgICAgIDEwCisjZWxzZQorI2RlZmluZSBOVU1fUFJFREVGSU5FRF9OQU1FUyAgICAgICAgICAgIDkKKyNlbmRpZgorCitBQ1BJX0VYVEVSTiBzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAgICAgICAgICBhY3BpX2dibF9yb290X25vZGVfc3RydWN0OworQUNQSV9FWFRFUk4gc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgICAgICAgICAqYWNwaV9nYmxfcm9vdF9ub2RlOworQUNQSV9FWFRFUk4gc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgICAgICAgICAqYWNwaV9nYmxfZmFkdF9ncGVfZGV2aWNlOworCitleHRlcm4gY29uc3QgdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3BpX2dibF9uc19wcm9wZXJ0aWVzW05VTV9OU19UWVBFU107CitleHRlcm4gY29uc3Qgc3RydWN0IGFjcGlfcHJlZGVmaW5lZF9uYW1lcyAgICAgICBhY3BpX2dibF9wcmVfZGVmaW5lZF9uYW1lcyBbTlVNX1BSRURFRklORURfTkFNRVNdOworCisjaWZkZWYgQUNQSV9ERUJVR19PVVRQVVQKK0FDUElfRVhURVJOIHUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjcGlfZ2JsX2N1cnJlbnRfbm9kZV9jb3VudDsKK0FDUElfRVhURVJOIHUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjcGlfZ2JsX2N1cnJlbnRfbm9kZV9zaXplOworQUNQSV9FWFRFUk4gdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNwaV9nYmxfbWF4X2NvbmN1cnJlbnRfbm9kZV9jb3VudDsKK0FDUElfRVhURVJOIGFjcGlfc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjcGlfZ2JsX2VudHJ5X3N0YWNrX3BvaW50ZXI7CitBQ1BJX0VYVEVSTiBhY3BpX3NpemUgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3BpX2dibF9sb3dlc3Rfc3RhY2tfcG9pbnRlcjsKK0FDUElfRVhURVJOIHUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjcGlfZ2JsX2RlZXBlc3RfbmVzdGluZzsKKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBJbnRlcnByZXRlciBnbG9iYWxzCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworQUNQSV9FWFRFUk4gc3RydWN0IGFjcGlfdGhyZWFkX3N0YXRlICAgICAgICAgICAqYWNwaV9nYmxfY3VycmVudF93YWxrX2xpc3Q7CisKKy8qIENvbnRyb2wgbWV0aG9kIHNpbmdsZSBzdGVwIGZsYWcgKi8KKworQUNQSV9FWFRFUk4gdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNwaV9nYmxfY21fc2luZ2xlX3N0ZXA7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogUGFyc2VyIGdsb2JhbHMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworQUNQSV9FWFRFUk4gdW5pb24gYWNwaV9wYXJzZV9vYmplY3QgICAgICAgICAgICAqYWNwaV9nYmxfcGFyc2VkX25hbWVzcGFjZV9yb290OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBIYXJkd2FyZSBnbG9iYWxzCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2V4dGVybiAgICAgIHN0cnVjdCBhY3BpX2JpdF9yZWdpc3Rlcl9pbmZvICAgICAgIGFjcGlfZ2JsX2JpdF9yZWdpc3Rlcl9pbmZvW0FDUElfTlVNX0JJVFJFR107CitBQ1BJX0VYVEVSTiB1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3BpX2dibF9zbGVlcF90eXBlX2E7CitBQ1BJX0VYVEVSTiB1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3BpX2dibF9zbGVlcF90eXBlX2I7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRXZlbnQgYW5kIEdQRSBnbG9iYWxzCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2V4dGVybiAgICAgIHN0cnVjdCBhY3BpX2ZpeGVkX2V2ZW50X2luZm8gICAgICAgIGFjcGlfZ2JsX2ZpeGVkX2V2ZW50X2luZm9bQUNQSV9OVU1fRklYRURfRVZFTlRTXTsKK0FDUElfRVhURVJOIHN0cnVjdCBhY3BpX2ZpeGVkX2V2ZW50X2hhbmRsZXIgICAgIGFjcGlfZ2JsX2ZpeGVkX2V2ZW50X2hhbmRsZXJzW0FDUElfTlVNX0ZJWEVEX0VWRU5UU107CitBQ1BJX0VYVEVSTiBzdHJ1Y3QgYWNwaV9ncGVfeHJ1cHRfaW5mbyAgICAgICAgICphY3BpX2dibF9ncGVfeHJ1cHRfbGlzdF9oZWFkOworQUNQSV9FWFRFUk4gc3RydWN0IGFjcGlfZ3BlX2Jsb2NrX2luZm8gICAgICAgICAqYWNwaV9nYmxfZ3BlX2ZhZHRfYmxvY2tzW0FDUElfTUFYX0dQRV9CTE9DS1NdOworQUNQSV9FWFRFUk4gYWNwaV9oYW5kbGUgICAgICAgICAgICAgICAgICAgICAgICAgYWNwaV9nYmxfZ3BlX2xvY2s7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRGVidWdnZXIgZ2xvYmFscworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK0FDUElfRVhURVJOIHU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjcGlfZ2JsX2RiX291dHB1dF9mbGFnczsKKworI2lmZGVmIEFDUElfRElTQVNTRU1CTEVSCisKK0FDUElfRVhURVJOIHU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjcGlfZ2JsX2RiX29wdF9kaXNhc207CitBQ1BJX0VYVEVSTiB1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3BpX2dibF9kYl9vcHRfdmVyYm9zZTsKKyNlbmRpZgorCisKKyNpZmRlZiBBQ1BJX0RFQlVHR0VSCisKK2V4dGVybiAgICAgIHU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjcGlfZ2JsX21ldGhvZF9leGVjdXRpbmc7CitleHRlcm4gICAgICB1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3BpX2dibF9hYm9ydF9tZXRob2Q7CitleHRlcm4gICAgICB1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3BpX2dibF9kYl90ZXJtaW5hdGVfdGhyZWFkczsKKworQUNQSV9FWFRFUk4gaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW5kOworQUNQSV9FWFRFUk4gY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqb3B0YXJnOworCitBQ1BJX0VYVEVSTiB1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3BpX2dibF9kYl9vcHRfdGFibGVzOworQUNQSV9FWFRFUk4gdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNwaV9nYmxfZGJfb3B0X3N0YXRzOworQUNQSV9FWFRFUk4gdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNwaV9nYmxfZGJfb3B0X2luaV9tZXRob2RzOworCisKK0FDUElfRVhURVJOIGNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFjcGlfZ2JsX2RiX2FyZ3NbQUNQSV9ERUJVR0dFUl9NQVhfQVJHU107CitBQ1BJX0VYVEVSTiBjaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3BpX2dibF9kYl9saW5lX2J1Zls4MF07CitBQ1BJX0VYVEVSTiBjaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3BpX2dibF9kYl9wYXJzZWRfYnVmWzgwXTsKK0FDUElfRVhURVJOIGNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjcGlfZ2JsX2RiX3Njb3BlX2J1Zls0MF07CitBQ1BJX0VYVEVSTiBjaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3BpX2dibF9kYl9kZWJ1Z19maWxlbmFtZVs0MF07CitBQ1BJX0VYVEVSTiB1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3BpX2dibF9kYl9vdXRwdXRfdG9fZmlsZTsKK0FDUElfRVhURVJOIGNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFjcGlfZ2JsX2RiX2J1ZmZlcjsKK0FDUElfRVhURVJOIGNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFjcGlfZ2JsX2RiX2ZpbGVuYW1lOworQUNQSV9FWFRFUk4gdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNwaV9nYmxfZGJfZGVidWdfbGV2ZWw7CitBQ1BJX0VYVEVSTiB1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3BpX2dibF9kYl9jb25zb2xlX2RlYnVnX2xldmVsOworQUNQSV9FWFRFUk4gc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICAgICAgICAgICAqYWNwaV9nYmxfZGJfdGFibGVfcHRyOworQUNQSV9FWFRFUk4gc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgICAgICAgICAqYWNwaV9nYmxfZGJfc2NvcGVfbm9kZTsKKworLyoKKyAqIFN0YXRpc3RpYyBnbG9iYWxzCisgKi8KK0FDUElfRVhURVJOIHUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjcGlfZ2JsX29ial90eXBlX2NvdW50W0FDUElfVFlQRV9OU19OT0RFX01BWCsxXTsKK0FDUElfRVhURVJOIHUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjcGlfZ2JsX25vZGVfdHlwZV9jb3VudFtBQ1BJX1RZUEVfTlNfTk9ERV9NQVgrMV07CitBQ1BJX0VYVEVSTiB1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3BpX2dibF9vYmpfdHlwZV9jb3VudF9taXNjOworQUNQSV9FWFRFUk4gdTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNwaV9nYmxfbm9kZV90eXBlX2NvdW50X21pc2M7CitBQ1BJX0VYVEVSTiB1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3BpX2dibF9udW1fbm9kZXM7CitBQ1BJX0VYVEVSTiB1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3BpX2dibF9udW1fb2JqZWN0czsKKworCitBQ1BJX0VYVEVSTiB1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3BpX2dibF9zaXplX29mX3BhcnNlX3RyZWU7CitBQ1BJX0VYVEVSTiB1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3BpX2dibF9zaXplX29mX21ldGhvZF90cmVlczsKK0FDUElfRVhURVJOIHUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjcGlfZ2JsX3NpemVfb2Zfbm9kZV9lbnRyaWVzOworQUNQSV9FWFRFUk4gdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNwaV9nYmxfc2l6ZV9vZl9hY3BpX29iamVjdHM7CisKKyNlbmRpZiAvKiBBQ1BJX0RFQlVHR0VSICovCisKKworI2VuZGlmIC8qIF9fQUNHTE9CQUxfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWNod2FyZS5oIGIvaW5jbHVkZS9hY3BpL2FjaHdhcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGFkMTM5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hY3BpL2FjaHdhcmUuaApAQCAtMCwwICsxLDE4MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIE5hbWU6IGFjaHdhcmUuaCAtLSBoYXJkd2FyZSBzcGVjaWZpYyBpbnRlcmZhY2VzCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwNSwgUi4gQnlyb24gTW9vcmUKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciwKKyAqICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIGF0IG1pbmltdW0gYSBkaXNjbGFpbWVyCisgKiAgICBzdWJzdGFudGlhbGx5IHNpbWlsYXIgdG8gdGhlICJOTyBXQVJSQU5UWSIgZGlzY2xhaW1lciBiZWxvdworICogICAgKCJEaXNjbGFpbWVyIikgYW5kIGFueSByZWRpc3RyaWJ1dGlvbiBtdXN0IGJlIGNvbmRpdGlvbmVkIHVwb24KKyAqICAgIGluY2x1ZGluZyBhIHN1YnN0YW50aWFsbHkgc2ltaWxhciBEaXNjbGFpbWVyIHJlcXVpcmVtZW50IGZvciBmdXJ0aGVyCisgKiAgICBiaW5hcnkgcmVkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lcyBvZiB0aGUgYWJvdmUtbGlzdGVkIGNvcHlyaWdodCBob2xkZXJzIG5vciB0aGUgbmFtZXMKKyAqICAgIG9mIGFueSBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGlzIHNvZnR3YXJlIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoIkdQTCIpIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogTk8gV0FSUkFOVFkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HCisgKiBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKyAqLworCisjaWZuZGVmIF9fQUNIV0FSRV9IX18KKyNkZWZpbmUgX19BQ0hXQVJFX0hfXworCisKKy8qIFBNIFRpbWVyIHRpY2tzIHBlciBzZWNvbmQgKEhaKSAqLworI2RlZmluZSBQTV9USU1FUl9GUkVRVUVOQ1kgIDM1Nzk1NDUKKworCisvKiBQcm90b3R5cGVzICovCisKKworYWNwaV9zdGF0dXMKK2FjcGlfaHdfaW5pdGlhbGl6ZSAoCisJdm9pZCk7CisKK2FjcGlfc3RhdHVzCithY3BpX2h3X3NodXRkb3duICgKKwl2b2lkKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfaHdfaW5pdGlhbGl6ZV9zeXN0ZW1faW5mbyAoCisJdm9pZCk7CisKK2FjcGlfc3RhdHVzCithY3BpX2h3X3NldF9tb2RlICgKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUpOworCit1MzIKK2FjcGlfaHdfZ2V0X21vZGUgKAorCXZvaWQpOworCit1MzIKK2FjcGlfaHdfZ2V0X21vZGVfY2FwYWJpbGl0aWVzICgKKwl2b2lkKTsKKworLyogUmVnaXN0ZXIgSS9PIFByb3RvdHlwZXMgKi8KKworc3RydWN0IGFjcGlfYml0X3JlZ2lzdGVyX2luZm8gKgorYWNwaV9od19nZXRfYml0X3JlZ2lzdGVyX2luZm8gKAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJfaWQpOworCithY3BpX3N0YXR1cworYWNwaV9od19yZWdpc3Rlcl9yZWFkICgKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZV9sb2NrLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJfaWQsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcmV0dXJuX3ZhbHVlKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfaHdfcmVnaXN0ZXJfd3JpdGUgKAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlX2xvY2ssCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3Rlcl9pZCwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfaHdfbG93X2xldmVsX3JlYWQgKAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdmFsdWUsCisJc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzICAgICAqcmVnKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfaHdfbG93X2xldmVsX3dyaXRlICgKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsCisJc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzICAgICAqcmVnKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfaHdfY2xlYXJfYWNwaV9zdGF0dXMgKAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MpOworCisKKy8qIEdQRSBzdXBwb3J0ICovCisKK2FjcGlfc3RhdHVzCithY3BpX2h3X3dyaXRlX2dwZV9lbmFibGVfcmVnICgKKwlzdHJ1Y3QgYWNwaV9ncGVfZXZlbnRfaW5mbyAgICAgICpncGVfZXZlbnRfaW5mbyk7CisKK2FjcGlfc3RhdHVzCithY3BpX2h3X2Rpc2FibGVfZ3BlX2Jsb2NrICgKKwlzdHJ1Y3QgYWNwaV9ncGVfeHJ1cHRfaW5mbyAgICAgICpncGVfeHJ1cHRfaW5mbywKKwlzdHJ1Y3QgYWNwaV9ncGVfYmxvY2tfaW5mbyAgICAgICpncGVfYmxvY2spOworCithY3BpX3N0YXR1cworYWNwaV9od19jbGVhcl9ncGUgKAorCXN0cnVjdCBhY3BpX2dwZV9ldmVudF9pbmZvICAgICAgKmdwZV9ldmVudF9pbmZvKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfaHdfY2xlYXJfZ3BlX2Jsb2NrICgKKwlzdHJ1Y3QgYWNwaV9ncGVfeHJ1cHRfaW5mbyAgICAgICpncGVfeHJ1cHRfaW5mbywKKwlzdHJ1Y3QgYWNwaV9ncGVfYmxvY2tfaW5mbyAgICAgICpncGVfYmxvY2spOworCisjaWZkZWYgQUNQSV9GVVRVUkVfVVNBR0UKK2FjcGlfc3RhdHVzCithY3BpX2h3X2dldF9ncGVfc3RhdHVzICgKKwlzdHJ1Y3QgYWNwaV9ncGVfZXZlbnRfaW5mbyAgICAgICpncGVfZXZlbnRfaW5mbywKKwlhY3BpX2V2ZW50X3N0YXR1cyAgICAgICAgICAgICAgICpldmVudF9zdGF0dXMpOworI2VuZGlmCisKK2FjcGlfc3RhdHVzCithY3BpX2h3X2Rpc2FibGVfYWxsX2dwZXMgKAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MpOworCithY3BpX3N0YXR1cworYWNwaV9od19lbmFibGVfYWxsX3J1bnRpbWVfZ3BlcyAoCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncyk7CisKK2FjcGlfc3RhdHVzCithY3BpX2h3X2VuYWJsZV9hbGxfd2FrZXVwX2dwZXMgKAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MpOworCithY3BpX3N0YXR1cworYWNwaV9od19lbmFibGVfcnVudGltZV9ncGVfYmxvY2sgKAorCXN0cnVjdCBhY3BpX2dwZV94cnVwdF9pbmZvICAgICAgKmdwZV94cnVwdF9pbmZvLAorCXN0cnVjdCBhY3BpX2dwZV9ibG9ja19pbmZvICAgICAgKmdwZV9ibG9jayk7CisKK2FjcGlfc3RhdHVzCithY3BpX2h3X2VuYWJsZV93YWtldXBfZ3BlX2Jsb2NrICgKKwlzdHJ1Y3QgYWNwaV9ncGVfeHJ1cHRfaW5mbyAgICAgICpncGVfeHJ1cHRfaW5mbywKKwlzdHJ1Y3QgYWNwaV9ncGVfYmxvY2tfaW5mbyAgICAgICpncGVfYmxvY2spOworCisKKy8qIEFDUEkgVGltZXIgcHJvdG90eXBlcyAqLworCisjaWZkZWYgQUNQSV9GVVRVUkVfVVNBR0UKK2FjcGlfc3RhdHVzCithY3BpX2dldF90aW1lcl9yZXNvbHV0aW9uICgKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpyZXNvbHV0aW9uKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfZ2V0X3RpbWVyICgKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp0aWNrcyk7CisKK2FjcGlfc3RhdHVzCithY3BpX2dldF90aW1lcl9kdXJhdGlvbiAoCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF90aWNrcywKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZF90aWNrcywKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp0aW1lX2VsYXBzZWQpOworI2VuZGlmICAvKiAgQUNQSV9GVVRVUkVfVVNBR0UgICovCisKKyNlbmRpZiAvKiBfX0FDSFdBUkVfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWNpbnRlcnAuaCBiL2luY2x1ZGUvYWNwaS9hY2ludGVycC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1MzAxZjUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FjcGkvYWNpbnRlcnAuaApAQCAtMCwwICsxLDc2NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIE5hbWU6IGFjaW50ZXJwLmggLSBJbnRlcnByZXRlciBzdWJjb21wb25lbnQgcHJvdG90eXBlcyBhbmQgZGVmaW5lcworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDUsIFIuIEJ5cm9uIE1vb3JlCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIsCisgKiAgICB3aXRob3V0IG1vZGlmaWNhdGlvbi4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSBhdCBtaW5pbXVtIGEgZGlzY2xhaW1lcgorICogICAgc3Vic3RhbnRpYWxseSBzaW1pbGFyIHRvIHRoZSAiTk8gV0FSUkFOVFkiIGRpc2NsYWltZXIgYmVsb3cKKyAqICAgICgiRGlzY2xhaW1lciIpIGFuZCBhbnkgcmVkaXN0cmlidXRpb24gbXVzdCBiZSBjb25kaXRpb25lZCB1cG9uCisgKiAgICBpbmNsdWRpbmcgYSBzdWJzdGFudGlhbGx5IHNpbWlsYXIgRGlzY2xhaW1lciByZXF1aXJlbWVudCBmb3IgZnVydGhlcgorICogICAgYmluYXJ5IHJlZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZXMgb2YgdGhlIGFib3ZlLWxpc3RlZCBjb3B5cmlnaHQgaG9sZGVycyBub3IgdGhlIG5hbWVzCisgKiAgICBvZiBhbnkgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhpcyBzb2Z0d2FyZSBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKCJHUEwiKSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIE5PIFdBUlJBTlRZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORworICogSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisgKi8KKworI2lmbmRlZiBfX0FDSU5URVJQX0hfXworI2RlZmluZSBfX0FDSU5URVJQX0hfXworCisKKyNkZWZpbmUgQUNQSV9XQUxLX09QRVJBTkRTICAgICAgICgmKHdhbGtfc3RhdGUtPm9wZXJhbmRzIFt3YWxrX3N0YXRlLT5udW1fb3BlcmFuZHMgLTFdKSkKKworCithY3BpX3N0YXR1cworYWNwaV9leF9yZXNvbHZlX29wZXJhbmRzICgKKwl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wY29kZSwKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICoqc3RhY2tfcHRyLAorCXN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgICAgICAgICAgKndhbGtfc3RhdGUpOworCithY3BpX3N0YXR1cworYWNwaV9leF9jaGVja19vYmplY3RfdHlwZSAoCisJYWNwaV9vYmplY3RfdHlwZSAgICAgICAgICAgICAgICB0eXBlX25lZWRlZCwKKwlhY3BpX29iamVjdF90eXBlICAgICAgICAgICAgICAgIHRoaXNfdHlwZSwKKwl2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICpvYmplY3QpOworCisvKgorICogZXh4ZmFjZSAtIEV4dGVybmFsIGludGVycHJldGVyIGludGVyZmFjZXMKKyAqLworCithY3BpX3N0YXR1cworYWNwaV9leF9sb2FkX3RhYmxlICgKKwlhY3BpX3RhYmxlX3R5cGUgICAgICAgICAgICAgICAgIHRhYmxlX2lkKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfZXhfZXhlY3V0ZV9tZXRob2QgKAorCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICAgICAgKm1ldGhvZF9ub2RlLAorCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgKipwYXJhbXMsCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAqKnJldHVybl9vYmpfZGVzYyk7CisKKworLyoKKyAqIGV4Y29udnJ0IC0gb2JqZWN0IGNvbnZlcnNpb24KKyAqLworCithY3BpX3N0YXR1cworYWNwaV9leF9jb252ZXJ0X3RvX2ludGVnZXIgKAorCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgKm9ial9kZXNjLAorCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgKipyZXN1bHRfZGVzYywKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfZXhfY29udmVydF90b19idWZmZXIgKAorCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgKm9ial9kZXNjLAorCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgKipyZXN1bHRfZGVzYyk7CisKK2FjcGlfc3RhdHVzCithY3BpX2V4X2NvbnZlcnRfdG9fc3RyaW5nICgKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICpvYmpfZGVzYywKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICoqcmVzdWx0X2Rlc2MsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlKTsKKworLyogVHlwZXMgZm9yIC0+U3RyaW5nIGNvbnZlcnNpb24gKi8KKworI2RlZmluZSBBQ1BJX0VYUExJQ0lUX0JZVEVfQ09QWSAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgQUNQSV9FWFBMSUNJVF9DT05WRVJUX0hFWCAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFDUElfSU1QTElDSVRfQ09OVkVSVF9IRVggICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBQ1BJX0VYUExJQ0lUX0NPTlZFUlRfREVDSU1BTCAgIDB4MDAwMDAwMDMKKworYWNwaV9zdGF0dXMKK2FjcGlfZXhfY29udmVydF90b190YXJnZXRfdHlwZSAoCisJYWNwaV9vYmplY3RfdHlwZSAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbl90eXBlLAorCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgKnNvdXJjZV9kZXNjLAorCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgKipyZXN1bHRfZGVzYywKKwlzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICAgICAgICAgICp3YWxrX3N0YXRlKTsKKwordTMyCithY3BpX2V4X2NvbnZlcnRfdG9fYXNjaWkgKAorCWFjcGlfaW50ZWdlciAgICAgICAgICAgICAgICAgICAgaW50ZWdlciwKKwl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2UsCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqc3RyaW5nLAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2xlbmd0aCk7CisKKy8qCisgKiBleGZpZWxkIC0gQUNQSSBBTUwgKHAtY29kZSkgZXhlY3V0aW9uIC0gZmllbGQgbWFuaXB1bGF0aW9uCisgKi8KKworYWNwaV9zdGF0dXMKK2FjcGlfZXhfY29tbW9uX2J1ZmZlcl9zZXR1cCAoCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAqb2JqX2Rlc2MsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJfbGVuZ3RoLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdHVtX2NvdW50KTsKKworYWNwaV9zdGF0dXMKK2FjcGlfZXhfZXh0cmFjdF9mcm9tX2ZpZWxkICgKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICpvYmpfZGVzYywKKwl2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICpidWZmZXIsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJfbGVuZ3RoKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfZXhfaW5zZXJ0X2ludG9fZmllbGQgKAorCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgKm9ial9kZXNjLAorCXZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmJ1ZmZlciwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl9sZW5ndGgpOworCithY3BpX3N0YXR1cworYWNwaV9leF9zZXR1cF9yZWdpb24gKAorCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgKm9ial9kZXNjLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfZGF0dW1fYnl0ZV9vZmZzZXQpOworCithY3BpX3N0YXR1cworYWNwaV9leF9hY2Nlc3NfcmVnaW9uICgKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICpvYmpfZGVzYywKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX2RhdHVtX2J5dGVfb2Zmc2V0LAorCWFjcGlfaW50ZWdlciAgICAgICAgICAgICAgICAgICAgKnZhbHVlLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF93cml0ZSk7CisKK3U4CithY3BpX2V4X3JlZ2lzdGVyX292ZXJmbG93ICgKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICpvYmpfZGVzYywKKwlhY3BpX2ludGVnZXIgICAgICAgICAgICAgICAgICAgIHZhbHVlKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfZXhfZmllbGRfZGF0dW1faW8gKAorCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgKm9ial9kZXNjLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfZGF0dW1fYnl0ZV9vZmZzZXQsCisJYWNwaV9pbnRlZ2VyICAgICAgICAgICAgICAgICAgICAqdmFsdWUsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX3dyaXRlKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfZXhfd3JpdGVfd2l0aF91cGRhdGVfcnVsZSAoCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAqb2JqX2Rlc2MsCisJYWNwaV9pbnRlZ2VyICAgICAgICAgICAgICAgICAgICBtYXNrLAorCWFjcGlfaW50ZWdlciAgICAgICAgICAgICAgICAgICAgZmllbGRfdmFsdWUsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9kYXR1bV9ieXRlX29mZnNldCk7CisKK3ZvaWQKK2FjcGlfZXhfZ2V0X2J1ZmZlcl9kYXR1bSgKKwlhY3BpX2ludGVnZXIgICAgICAgICAgICAgICAgICAgICpkYXR1bSwKKwl2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICpidWZmZXIsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJfbGVuZ3RoLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZV9ncmFudWxhcml0eSwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl9vZmZzZXQpOworCit2b2lkCithY3BpX2V4X3NldF9idWZmZXJfZGF0dW0gKAorCWFjcGlfaW50ZWdlciAgICAgICAgICAgICAgICAgICAgbWVyZ2VkX2RhdHVtLAorCXZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmJ1ZmZlciwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl9sZW5ndGgsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlX2dyYW51bGFyaXR5LAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyX29mZnNldCk7CisKK2FjcGlfc3RhdHVzCithY3BpX2V4X3JlYWRfZGF0YV9mcm9tX2ZpZWxkICgKKwlzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICAgICAgICAgICp3YWxrX3N0YXRlLAorCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgKm9ial9kZXNjLAorCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgKipyZXRfYnVmZmVyX2Rlc2MpOworCithY3BpX3N0YXR1cworYWNwaV9leF93cml0ZV9kYXRhX3RvX2ZpZWxkICgKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICpzb3VyY2VfZGVzYywKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICpvYmpfZGVzYywKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICoqcmVzdWx0X2Rlc2MpOworCisvKgorICogZXhtaXNjIC0gQUNQSSBBTUwgKHAtY29kZSkgZXhlY3V0aW9uIC0gc3BlY2lmaWMgb3Bjb2RlcworICovCisKK2FjcGlfc3RhdHVzCithY3BpX2V4X29wY29kZV8zQV8wVF8wUiAoCisJc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAgICAgICAgICAqd2Fsa19zdGF0ZSk7CisKK2FjcGlfc3RhdHVzCithY3BpX2V4X29wY29kZV8zQV8xVF8xUiAoCisJc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAgICAgICAgICAqd2Fsa19zdGF0ZSk7CisKK2FjcGlfc3RhdHVzCithY3BpX2V4X29wY29kZV82QV8wVF8xUiAoCisJc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAgICAgICAgICAqd2Fsa19zdGF0ZSk7CisKK3U4CithY3BpX2V4X2RvX21hdGNoICgKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoX29wLAorCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgKnBhY2thZ2Vfb2JqLAorCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgKm1hdGNoX29iaik7CisKK2FjcGlfc3RhdHVzCithY3BpX2V4X2dldF9vYmplY3RfcmVmZXJlbmNlICgKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICpvYmpfZGVzYywKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICoqcmV0dXJuX2Rlc2MsCisJc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAgICAgICAgICAqd2Fsa19zdGF0ZSk7CisKK2FjcGlfc3RhdHVzCithY3BpX2V4X3Jlc29sdmVfbXVsdGlwbGUgKAorCXN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgICAgICAgICAgKndhbGtfc3RhdGUsCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAqb3BlcmFuZCwKKwlhY3BpX29iamVjdF90eXBlICAgICAgICAgICAgICAgICpyZXR1cm5fdHlwZSwKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICoqcmV0dXJuX2Rlc2MpOworCithY3BpX3N0YXR1cworYWNwaV9leF9jb25jYXRfdGVtcGxhdGUgKAorCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgKm9ial9kZXNjLAorCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgKm9ial9kZXNjMiwKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICoqYWN0dWFsX3JldHVybl9kZXNjLAorCXN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgICAgICAgICAgKndhbGtfc3RhdGUpOworCithY3BpX3N0YXR1cworYWNwaV9leF9kb19jb25jYXRlbmF0ZSAoCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAqb2JqX2Rlc2MsCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAqb2JqX2Rlc2MyLAorCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgKiphY3R1YWxfcmV0dXJuX2Rlc2MsCisJc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAgICAgICAgICAqd2Fsa19zdGF0ZSk7CisKK2FjcGlfc3RhdHVzCithY3BpX2V4X2RvX2xvZ2ljYWxfbnVtZXJpY19vcCAoCisJdTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGNvZGUsCisJYWNwaV9pbnRlZ2VyICAgICAgICAgICAgICAgICAgICBpbnRlZ2VyMCwKKwlhY3BpX2ludGVnZXIgICAgICAgICAgICAgICAgICAgIGludGVnZXIxLAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmxvZ2ljYWxfcmVzdWx0KTsKKworYWNwaV9zdGF0dXMKK2FjcGlfZXhfZG9fbG9naWNhbF9vcCAoCisJdTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGNvZGUsCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAqb3BlcmFuZDAsCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAqb3BlcmFuZDEsCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbG9naWNhbF9yZXN1bHQpOworCithY3BpX2ludGVnZXIKK2FjcGlfZXhfZG9fbWF0aF9vcCAoCisJdTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGNvZGUsCisJYWNwaV9pbnRlZ2VyICAgICAgICAgICAgICAgICAgICBvcGVyYW5kMCwKKwlhY3BpX2ludGVnZXIgICAgICAgICAgICAgICAgICAgIG9wZXJhbmQxKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfZXhfY3JlYXRlX211dGV4ICgKKwlzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICAgICAgICAgICp3YWxrX3N0YXRlKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfZXhfY3JlYXRlX3Byb2Nlc3NvciAoCisJc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAgICAgICAgICAqd2Fsa19zdGF0ZSk7CisKK2FjcGlfc3RhdHVzCithY3BpX2V4X2NyZWF0ZV9wb3dlcl9yZXNvdXJjZSAoCisJc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAgICAgICAgICAqd2Fsa19zdGF0ZSk7CisKK2FjcGlfc3RhdHVzCithY3BpX2V4X2NyZWF0ZV9yZWdpb24gKAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFtbF9zdGFydCwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFtbF9sZW5ndGgsCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpb25fc3BhY2UsCisJc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAgICAgICAgICAqd2Fsa19zdGF0ZSk7CisKK2FjcGlfc3RhdHVzCithY3BpX2V4X2NyZWF0ZV90YWJsZV9yZWdpb24gKAorCXN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgICAgICAgICAgKndhbGtfc3RhdGUpOworCithY3BpX3N0YXR1cworYWNwaV9leF9jcmVhdGVfZXZlbnQgKAorCXN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgICAgICAgICAgKndhbGtfc3RhdGUpOworCithY3BpX3N0YXR1cworYWNwaV9leF9jcmVhdGVfYWxpYXMgKAorCXN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgICAgICAgICAgKndhbGtfc3RhdGUpOworCithY3BpX3N0YXR1cworYWNwaV9leF9jcmVhdGVfbWV0aG9kICgKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICphbWxfc3RhcnQsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbWxfbGVuZ3RoLAorCXN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgICAgICAgICAgKndhbGtfc3RhdGUpOworCisKKy8qCisgKiBleGNvbmZpZyAtIGR5bmFtaWMgdGFibGUgbG9hZC91bmxvYWQKKyAqLworCithY3BpX3N0YXR1cworYWNwaV9leF9hZGRfdGFibGUgKAorCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAgICAgICAgKnRhYmxlLAorCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICAgICAgKnBhcmVudF9ub2RlLAorCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgKipkZGJfaGFuZGxlKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfZXhfbG9hZF9vcCAoCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAqb2JqX2Rlc2MsCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAqdGFyZ2V0LAorCXN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgICAgICAgICAgKndhbGtfc3RhdGUpOworCithY3BpX3N0YXR1cworYWNwaV9leF9sb2FkX3RhYmxlX29wICgKKwlzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICAgICAgICAgICp3YWxrX3N0YXRlLAorCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgKipyZXR1cm5fZGVzYyk7CisKK2FjcGlfc3RhdHVzCithY3BpX2V4X3VubG9hZF90YWJsZSAoCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAqZGRiX2hhbmRsZSk7CisKKworLyoKKyAqIGV4bXV0ZXggLSBtdXRleCBzdXBwb3J0CisgKi8KKworYWNwaV9zdGF0dXMKK2FjcGlfZXhfYWNxdWlyZV9tdXRleCAoCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAqdGltZV9kZXNjLAorCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgKm9ial9kZXNjLAorCXN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgICAgICAgICAgKndhbGtfc3RhdGUpOworCithY3BpX3N0YXR1cworYWNwaV9leF9yZWxlYXNlX211dGV4ICgKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICpvYmpfZGVzYywKKwlzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICAgICAgICAgICp3YWxrX3N0YXRlKTsKKwordm9pZAorYWNwaV9leF9yZWxlYXNlX2FsbF9tdXRleGVzICgKKwlzdHJ1Y3QgYWNwaV90aHJlYWRfc3RhdGUgICAgICAgICp0aHJlYWQpOworCit2b2lkCithY3BpX2V4X3VubGlua19tdXRleCAoCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAqb2JqX2Rlc2MpOworCit2b2lkCithY3BpX2V4X2xpbmtfbXV0ZXggKAorCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgKm9ial9kZXNjLAorCXN0cnVjdCBhY3BpX3RocmVhZF9zdGF0ZSAgICAgICAgKnRocmVhZCk7CisKKy8qCisgKiBleHByZXAgLSBBQ1BJIEFNTCAocC1jb2RlKSBleGVjdXRpb24gLSBwcmVwIHV0aWxpdGllcworICovCisKK2FjcGlfc3RhdHVzCithY3BpX2V4X3ByZXBfY29tbW9uX2ZpZWxkX29iamVjdCAoCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAqb2JqX2Rlc2MsCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9mbGFncywKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX2F0dHJpYnV0ZSwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX2JpdF9wb3NpdGlvbiwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX2JpdF9sZW5ndGgpOworCithY3BpX3N0YXR1cworYWNwaV9leF9wcmVwX2ZpZWxkX3ZhbHVlICgKKwlzdHJ1Y3QgYWNwaV9jcmVhdGVfZmllbGRfaW5mbyAgICppbmZvKTsKKworLyoKKyAqIGV4c3lzdGVtIC0gSW50ZXJmYWNlIHRvIE9TIHNlcnZpY2VzCisgKi8KKworYWNwaV9zdGF0dXMKK2FjcGlfZXhfc3lzdGVtX2RvX25vdGlmeV9vcCAoCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAqdmFsdWUsCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAqb2JqX2Rlc2MpOworCithY3BpX3N0YXR1cworYWNwaV9leF9zeXN0ZW1fZG9fc3VzcGVuZCgKKwlhY3BpX2ludGVnZXIgICAgICAgICAgICAgICAgICAgIHRpbWUpOworCithY3BpX3N0YXR1cworYWNwaV9leF9zeXN0ZW1fZG9fc3RhbGwgKAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZSk7CisKK2FjcGlfc3RhdHVzCithY3BpX2V4X3N5c3RlbV9hY3F1aXJlX211dGV4KAorCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgKnRpbWUsCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAqb2JqX2Rlc2MpOworCithY3BpX3N0YXR1cworYWNwaV9leF9zeXN0ZW1fcmVsZWFzZV9tdXRleCgKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICpvYmpfZGVzYyk7CisKK2FjcGlfc3RhdHVzCithY3BpX2V4X3N5c3RlbV9zaWduYWxfZXZlbnQoCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAqb2JqX2Rlc2MpOworCithY3BpX3N0YXR1cworYWNwaV9leF9zeXN0ZW1fd2FpdF9ldmVudCgKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICp0aW1lLAorCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgKm9ial9kZXNjKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfZXhfc3lzdGVtX3Jlc2V0X2V2ZW50KAorCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgKm9ial9kZXNjKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfZXhfc3lzdGVtX3dhaXRfc2VtYXBob3JlICgKKwlhY3BpX2hhbmRsZSAgICAgICAgICAgICAgICAgICAgIHNlbWFwaG9yZSwKKwl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQpOworCisKKy8qCisgKiBleG1vbmFkaWMgLSBBQ1BJIEFNTCAocC1jb2RlKSBleGVjdXRpb24sIG1vbmFkaWMgb3BlcmF0b3JzCisgKi8KKworYWNwaV9zdGF0dXMKK2FjcGlfZXhfb3Bjb2RlXzBBXzBUXzFSICgKKwlzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICAgICAgICAgICp3YWxrX3N0YXRlKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfZXhfb3Bjb2RlXzFBXzBUXzBSICgKKwlzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICAgICAgICAgICp3YWxrX3N0YXRlKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfZXhfb3Bjb2RlXzFBXzBUXzFSICgKKwlzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICAgICAgICAgICp3YWxrX3N0YXRlKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfZXhfb3Bjb2RlXzFBXzFUXzFSICgKKwlzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICAgICAgICAgICp3YWxrX3N0YXRlKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfZXhfb3Bjb2RlXzFBXzFUXzBSICgKKwlzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICAgICAgICAgICp3YWxrX3N0YXRlKTsKKworLyoKKyAqIGV4ZHlhZGljIC0gQUNQSSBBTUwgKHAtY29kZSkgZXhlY3V0aW9uLCBkeWFkaWMgb3BlcmF0b3JzCisgKi8KKworYWNwaV9zdGF0dXMKK2FjcGlfZXhfb3Bjb2RlXzJBXzBUXzBSICgKKwlzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICAgICAgICAgICp3YWxrX3N0YXRlKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfZXhfb3Bjb2RlXzJBXzBUXzFSICgKKwlzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICAgICAgICAgICp3YWxrX3N0YXRlKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfZXhfb3Bjb2RlXzJBXzFUXzFSICgKKwlzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICAgICAgICAgICp3YWxrX3N0YXRlKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfZXhfb3Bjb2RlXzJBXzJUXzFSICgKKwlzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICAgICAgICAgICp3YWxrX3N0YXRlKTsKKworCisvKgorICogZXhyZXNvbHYgIC0gT2JqZWN0IHJlc29sdXRpb24gYW5kIGdldCB2YWx1ZSBmdW5jdGlvbnMKKyAqLworCithY3BpX3N0YXR1cworYWNwaV9leF9yZXNvbHZlX3RvX3ZhbHVlICgKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICoqc3RhY2tfcHRyLAorCXN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgICAgICAgICAgKndhbGtfc3RhdGUpOworCithY3BpX3N0YXR1cworYWNwaV9leF9yZXNvbHZlX25vZGVfdG9fdmFsdWUgKAorCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICAgICAgKipzdGFja19wdHIsCisJc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAgICAgICAgICAqd2Fsa19zdGF0ZSk7CisKK2FjcGlfc3RhdHVzCithY3BpX2V4X3Jlc29sdmVfb2JqZWN0X3RvX3ZhbHVlICgKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICoqc3RhY2tfcHRyLAorCXN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgICAgICAgICAgKndhbGtfc3RhdGUpOworCisKKy8qCisgKiBleGR1bXAgLSBJbnRlcnByZXRlciBkZWJ1ZyBvdXRwdXQgcm91dGluZXMKKyAqLworCit2b2lkCithY3BpX2V4X2R1bXBfb3BlcmFuZCAoCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAqb2JqX2Rlc2MsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXB0aCk7CisKK3ZvaWQKK2FjcGlfZXhfZHVtcF9vcGVyYW5kcyAoCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAqKm9wZXJhbmRzLAorCWFjcGlfaW50ZXJwcmV0ZXJfbW9kZSAgICAgICAgICAgaW50ZXJwcmV0ZXJfbW9kZSwKKwljaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICppZGVudCwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bV9sZXZlbHMsCisJY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbm90ZSwKKwljaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICptb2R1bGVfbmFtZSwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVfbnVtYmVyKTsKKworI2lmZGVmIEFDUElfRlVUVVJFX1VTQUdFCit2b2lkCithY3BpX2V4X2R1bXBfb2JqZWN0X2Rlc2NyaXB0b3IgKAorCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgKm9iamVjdCwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzKTsKKwordm9pZAorYWNwaV9leF9kdW1wX25vZGUgKAorCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICAgICAgKm5vZGUsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncyk7CisKK3ZvaWQKK2FjcGlfZXhfb3V0X3N0cmluZyAoCisJY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdGl0bGUsCisJY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdmFsdWUpOworCit2b2lkCithY3BpX2V4X291dF9wb2ludGVyICgKKwljaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICp0aXRsZSwKKwl2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICp2YWx1ZSk7CisKK3ZvaWQKK2FjcGlfZXhfb3V0X2ludGVnZXIgKAorCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnRpdGxlLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUpOworCit2b2lkCithY3BpX2V4X291dF9hZGRyZXNzICgKKwljaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICp0aXRsZSwKKwlhY3BpX3BoeXNpY2FsX2FkZHJlc3MgICAgICAgICAgIHZhbHVlKTsKKyNlbmRpZiAgLyogIEFDUElfRlVUVVJFX1VTQUdFICAqLworCisvKgorICogZXhuYW1lcyAtIGludGVycHJldGVyL3NjYW5uZXIgbmFtZSBsb2FkL2V4ZWN1dGUKKyAqLworCitjaGFyICoKK2FjcGlfZXhfYWxsb2NhdGVfbmFtZV9zdHJpbmcgKAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4X2NvdW50LAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtX25hbWVfc2Vncyk7CisKK3UzMgorYWNwaV9leF9nb29kX2NoYXIgKAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfZXhfbmFtZV9zZWdtZW50ICgKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqaW5fYW1sX2FkZHJlc3MsCisJY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmFtZV9zdHJpbmcpOworCithY3BpX3N0YXR1cworYWNwaV9leF9nZXRfbmFtZV9zdHJpbmcgKAorCWFjcGlfb2JqZWN0X3R5cGUgICAgICAgICAgICAgICAgZGF0YV90eXBlLAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmluX2FtbF9hZGRyZXNzLAorCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKipvdXRfbmFtZV9zdHJpbmcsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqb3V0X25hbWVfbGVuZ3RoKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfZXhfZG9fbmFtZSAoCisJYWNwaV9vYmplY3RfdHlwZSAgICAgICAgICAgICAgICBkYXRhX3R5cGUsCisJYWNwaV9pbnRlcnByZXRlcl9tb2RlICAgICAgICAgICBsb2FkX2V4ZWNfbW9kZSk7CisKKworLyoKKyAqIGV4c3RvcmUgLSBPYmplY3Qgc3RvcmUgc3VwcG9ydAorICovCisKK2FjcGlfc3RhdHVzCithY3BpX2V4X3N0b3JlICgKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICp2YWxfZGVzYywKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICpkZXN0X2Rlc2MsCisJc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAgICAgICAgICAqd2Fsa19zdGF0ZSk7CisKK2FjcGlfc3RhdHVzCithY3BpX2V4X3N0b3JlX29iamVjdF90b19pbmRleCAoCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAqdmFsX2Rlc2MsCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAqZGVzdF9kZXNjLAorCXN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgICAgICAgICAgKndhbGtfc3RhdGUpOworCithY3BpX3N0YXR1cworYWNwaV9leF9zdG9yZV9vYmplY3RfdG9fbm9kZSAoCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAqc291cmNlX2Rlc2MsCisJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgICAgICAqbm9kZSwKKwlzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICAgICAgICAgICp3YWxrX3N0YXRlLAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wbGljaXRfY29udmVyc2lvbik7CisKKyNkZWZpbmUgQUNQSV9JTVBMSUNJVF9DT05WRVJTSU9OICAgICAgICBUUlVFCisjZGVmaW5lIEFDUElfTk9fSU1QTElDSVRfQ09OVkVSU0lPTiAgICAgRkFMU0UKKworLyoKKyAqIGV4c3RvcmVuCisgKi8KKworYWNwaV9zdGF0dXMKK2FjcGlfZXhfcmVzb2x2ZV9vYmplY3QgKAorCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgKipzb3VyY2VfZGVzY19wdHIsCisJYWNwaV9vYmplY3RfdHlwZSAgICAgICAgICAgICAgICB0YXJnZXRfdHlwZSwKKwlzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICAgICAgICAgICp3YWxrX3N0YXRlKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfZXhfc3RvcmVfb2JqZWN0X3RvX29iamVjdCAoCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAqc291cmNlX2Rlc2MsCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAqZGVzdF9kZXNjLAorCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgKipuZXdfZGVzYywKKwlzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICAgICAgICAgICp3YWxrX3N0YXRlKTsKKworCisvKgorICogZXhjb3B5IC0gb2JqZWN0IGNvcHkKKyAqLworCithY3BpX3N0YXR1cworYWNwaV9leF9zdG9yZV9idWZmZXJfdG9fYnVmZmVyICgKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICpzb3VyY2VfZGVzYywKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICp0YXJnZXRfZGVzYyk7CisKK2FjcGlfc3RhdHVzCithY3BpX2V4X3N0b3JlX3N0cmluZ190b19zdHJpbmcgKAorCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgKnNvdXJjZV9kZXNjLAorCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgKnRhcmdldF9kZXNjKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfZXhfY29weV9pbnRlZ2VyX3RvX2luZGV4X2ZpZWxkICgKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICpzb3VyY2VfZGVzYywKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICp0YXJnZXRfZGVzYyk7CisKK2FjcGlfc3RhdHVzCithY3BpX2V4X2NvcHlfaW50ZWdlcl90b19iYW5rX2ZpZWxkICgKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICpzb3VyY2VfZGVzYywKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICp0YXJnZXRfZGVzYyk7CisKK2FjcGlfc3RhdHVzCithY3BpX2V4X2NvcHlfZGF0YV90b19uYW1lZF9maWVsZCAoCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAqc291cmNlX2Rlc2MsCisJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgICAgICAqbm9kZSk7CisKK2FjcGlfc3RhdHVzCithY3BpX2V4X2NvcHlfaW50ZWdlcl90b19idWZmZXJfZmllbGQgKAorCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgKnNvdXJjZV9kZXNjLAorCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgKnRhcmdldF9kZXNjKTsKKworLyoKKyAqIGV4dXRpbHMgLSBpbnRlcnByZXRlci9zY2FubmVyIHV0aWxpdGllcworICovCisKK2FjcGlfc3RhdHVzCithY3BpX2V4X2VudGVyX2ludGVycHJldGVyICgKKwl2b2lkKTsKKwordm9pZAorYWNwaV9leF9leGl0X2ludGVycHJldGVyICgKKwl2b2lkKTsKKwordm9pZAorYWNwaV9leF90cnVuY2F0ZV9mb3IzMmJpdF90YWJsZSAoCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAqb2JqX2Rlc2MpOworCit1OAorYWNwaV9leF9hY3F1aXJlX2dsb2JhbF9sb2NrICgKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGUpOworCit2b2lkCithY3BpX2V4X3JlbGVhc2VfZ2xvYmFsX2xvY2sgKAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9ja2VkKTsKKwordTMyCithY3BpX2V4X2RpZ2l0c19uZWVkZWQgKAorCWFjcGlfaW50ZWdlciAgICAgICAgICAgICAgICAgICAgdmFsdWUsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlKTsKKwordm9pZAorYWNwaV9leF9laXNhX2lkX3RvX3N0cmluZyAoCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1lcmljX2lkLAorCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm91dF9zdHJpbmcpOworCit2b2lkCithY3BpX2V4X3Vuc2lnbmVkX2ludGVnZXJfdG9fc3RyaW5nICgKKwlhY3BpX2ludGVnZXIgICAgICAgICAgICAgICAgICAgIHZhbHVlLAorCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm91dF9zdHJpbmcpOworCisKKy8qCisgKiBleHJlZ2lvbiAtIGRlZmF1bHQgb3BfcmVnaW9uIGhhbmRsZXJzCisgKi8KKworYWNwaV9zdGF0dXMKK2FjcGlfZXhfc3lzdGVtX21lbW9yeV9zcGFjZV9oYW5kbGVyICgKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uLAorCWFjcGlfcGh5c2ljYWxfYWRkcmVzcyAgICAgICAgICAgYWRkcmVzcywKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdF93aWR0aCwKKwlhY3BpX2ludGVnZXIgICAgICAgICAgICAgICAgICAgICp2YWx1ZSwKKwl2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICpoYW5kbGVyX2NvbnRleHQsCisJdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcmVnaW9uX2NvbnRleHQpOworCithY3BpX3N0YXR1cworYWNwaV9leF9zeXN0ZW1faW9fc3BhY2VfaGFuZGxlciAoCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiwKKwlhY3BpX3BoeXNpY2FsX2FkZHJlc3MgICAgICAgICAgIGFkZHJlc3MsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRfd2lkdGgsCisJYWNwaV9pbnRlZ2VyICAgICAgICAgICAgICAgICAgICAqdmFsdWUsCisJdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqaGFuZGxlcl9jb250ZXh0LAorCXZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnJlZ2lvbl9jb250ZXh0KTsKKworYWNwaV9zdGF0dXMKK2FjcGlfZXhfcGNpX2NvbmZpZ19zcGFjZV9oYW5kbGVyICgKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uLAorCWFjcGlfcGh5c2ljYWxfYWRkcmVzcyAgICAgICAgICAgYWRkcmVzcywKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdF93aWR0aCwKKwlhY3BpX2ludGVnZXIgICAgICAgICAgICAgICAgICAgICp2YWx1ZSwKKwl2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICpoYW5kbGVyX2NvbnRleHQsCisJdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcmVnaW9uX2NvbnRleHQpOworCithY3BpX3N0YXR1cworYWNwaV9leF9jbW9zX3NwYWNlX2hhbmRsZXIgKAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24sCisJYWNwaV9waHlzaWNhbF9hZGRyZXNzICAgICAgICAgICBhZGRyZXNzLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0X3dpZHRoLAorCWFjcGlfaW50ZWdlciAgICAgICAgICAgICAgICAgICAgKnZhbHVlLAorCXZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmhhbmRsZXJfY29udGV4dCwKKwl2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICpyZWdpb25fY29udGV4dCk7CisKK2FjcGlfc3RhdHVzCithY3BpX2V4X3BjaV9iYXJfc3BhY2VfaGFuZGxlciAoCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiwKKwlhY3BpX3BoeXNpY2FsX2FkZHJlc3MgICAgICAgICAgIGFkZHJlc3MsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRfd2lkdGgsCisJYWNwaV9pbnRlZ2VyICAgICAgICAgICAgICAgICAgICAqdmFsdWUsCisJdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqaGFuZGxlcl9jb250ZXh0LAorCXZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnJlZ2lvbl9jb250ZXh0KTsKKworYWNwaV9zdGF0dXMKK2FjcGlfZXhfZW1iZWRkZWRfY29udHJvbGxlcl9zcGFjZV9oYW5kbGVyICgKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uLAorCWFjcGlfcGh5c2ljYWxfYWRkcmVzcyAgICAgICAgICAgYWRkcmVzcywKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdF93aWR0aCwKKwlhY3BpX2ludGVnZXIgICAgICAgICAgICAgICAgICAgICp2YWx1ZSwKKwl2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICpoYW5kbGVyX2NvbnRleHQsCisJdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcmVnaW9uX2NvbnRleHQpOworCithY3BpX3N0YXR1cworYWNwaV9leF9zbV9idXNfc3BhY2VfaGFuZGxlciAoCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiwKKwlhY3BpX3BoeXNpY2FsX2FkZHJlc3MgICAgICAgICAgIGFkZHJlc3MsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRfd2lkdGgsCisJYWNwaV9pbnRlZ2VyICAgICAgICAgICAgICAgICAgICAqdmFsdWUsCisJdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqaGFuZGxlcl9jb250ZXh0LAorCXZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnJlZ2lvbl9jb250ZXh0KTsKKworCithY3BpX3N0YXR1cworYWNwaV9leF9kYXRhX3RhYmxlX3NwYWNlX2hhbmRsZXIgKAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24sCisJYWNwaV9waHlzaWNhbF9hZGRyZXNzICAgICAgICAgICBhZGRyZXNzLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0X3dpZHRoLAorCWFjcGlfaW50ZWdlciAgICAgICAgICAgICAgICAgICAgKnZhbHVlLAorCXZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmhhbmRsZXJfY29udGV4dCwKKwl2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICpyZWdpb25fY29udGV4dCk7CisKKyNlbmRpZiAvKiBfX0lOVEVSUF9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY2xvY2FsLmggYi9pbmNsdWRlL2FjcGkvYWNsb2NhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxZDNiNGIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FjcGkvYWNsb2NhbC5oCkBAIC0wLDAgKzEsOTk0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogTmFtZTogYWNsb2NhbC5oIC0gSW50ZXJuYWwgZGF0YSB0eXBlcyB1c2VkIGFjcm9zcyB0aGUgQUNQSSBzdWJzeXN0ZW0KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA1LCBSLiBCeXJvbiBNb29yZQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLAorICogICAgd2l0aG91dCBtb2RpZmljYXRpb24uCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgYXQgbWluaW11bSBhIGRpc2NsYWltZXIKKyAqICAgIHN1YnN0YW50aWFsbHkgc2ltaWxhciB0byB0aGUgIk5PIFdBUlJBTlRZIiBkaXNjbGFpbWVyIGJlbG93CisgKiAgICAoIkRpc2NsYWltZXIiKSBhbmQgYW55IHJlZGlzdHJpYnV0aW9uIG11c3QgYmUgY29uZGl0aW9uZWQgdXBvbgorICogICAgaW5jbHVkaW5nIGEgc3Vic3RhbnRpYWxseSBzaW1pbGFyIERpc2NsYWltZXIgcmVxdWlyZW1lbnQgZm9yIGZ1cnRoZXIKKyAqICAgIGJpbmFyeSByZWRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWVzIG9mIHRoZSBhYm92ZS1saXN0ZWQgY29weXJpZ2h0IGhvbGRlcnMgbm9yIHRoZSBuYW1lcworICogICAgb2YgYW55IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBOTyBXQVJSQU5UWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcKKyAqIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorICovCisKKyNpZm5kZWYgX19BQ0xPQ0FMX0hfXworI2RlZmluZSBfX0FDTE9DQUxfSF9fCisKKworI2RlZmluZSBBQ1BJX1dBSVRfRk9SRVZFUiAgICAgICAgICAgICAgIDB4RkZGRiAgLyogdTE2LCBhcyBwZXIgQUNQSSBzcGVjICovCisKK3R5cGVkZWYgdm9pZCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjcGlfbXV0ZXg7Cit0eXBlZGVmIHUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3BpX211dGV4X2hhbmRsZTsKKworCisvKiBUb3RhbCBudW1iZXIgb2YgYW1sIG9wY29kZXMgZGVmaW5lZCAqLworCisjZGVmaW5lIEFNTF9OVU1fT1BDT0RFUyAgICAgICAgICAgICAgICAgMHg3RgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIE11dGV4IHR5cGVkZWZzIGFuZCBzdHJ1Y3RzCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyoKKyAqIFByZWRlZmluZWQgaGFuZGxlcyBmb3IgdGhlIG11dGV4IG9iamVjdHMgdXNlZCB3aXRoaW4gdGhlIHN1YnN5c3RlbQorICogQWxsIG11dGV4IG9iamVjdHMgYXJlIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCBieSBhY3BpX3V0X211dGV4X2luaXRpYWxpemUuCisgKgorICogVGhlIGFjcXVpcmUvcmVsZWFzZSBvcmRlcmluZyBwcm90b2NvbCBpcyBpbXBsaWVkIHZpYSB0aGlzIGxpc3QuICBNdXRleGVzCisgKiB3aXRoIGEgbG93ZXIgdmFsdWUgbXVzdCBiZSBhY3F1aXJlZCBiZWZvcmUgbXV0ZXhlcyB3aXRoIGEgaGlnaGVyIHZhbHVlLgorICoKKyAqIE5PVEU6IGFueSBjaGFuZ2VzIGhlcmUgbXVzdCBiZSByZWZsZWN0ZWQgaW4gdGhlIGFjcGlfZ2JsX211dGV4X25hbWVzIHRhYmxlIGFsc28hCisgKi8KKworI2RlZmluZSBBQ1BJX01UWF9FWEVDVVRFICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQUNQSV9NVFhfSU5URVJQUkVURVIgICAgICAgICAgICAxCisjZGVmaW5lIEFDUElfTVRYX1BBUlNFUiAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBBQ1BJX01UWF9ESVNQQVRDSEVSICAgICAgICAgICAgIDMKKyNkZWZpbmUgQUNQSV9NVFhfVEFCTEVTICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEFDUElfTVRYX09QX1JFR0lPTlMgICAgICAgICAgICAgNQorI2RlZmluZSBBQ1BJX01UWF9OQU1FU1BBQ0UgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQUNQSV9NVFhfRVZFTlRTICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEFDUElfTVRYX0hBUkRXQVJFICAgICAgICAgICAgICAgOAorI2RlZmluZSBBQ1BJX01UWF9DQUNIRVMgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgQUNQSV9NVFhfTUVNT1JZICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBBQ1BJX01UWF9ERUJVR19DTURfQ09NUExFVEUgICAgIDExCisjZGVmaW5lIEFDUElfTVRYX0RFQlVHX0NNRF9SRUFEWSAgICAgICAgMTIKKworI2RlZmluZSBNQVhfTVVURVggICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIE5VTV9NVVRFWCAgICAgICAgICAgICAgICAgICAgICAgTUFYX01VVEVYKzEKKworCisjaWYgZGVmaW5lZChBQ1BJX0RFQlVHX09VVFBVVCkgfHwgZGVmaW5lZChBQ1BJX0RFQlVHR0VSKQorI2lmZGVmIERFRklORV9BQ1BJX0dMT0JBTFMKKworLyogTmFtZXMgZm9yIHRoZSBtdXRleGVzIHVzZWQgaW4gdGhlIHN1YnN5c3RlbSAqLworCitzdGF0aWMgY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAqYWNwaV9nYmxfbXV0ZXhfbmFtZXNbXSA9Cit7CisJIkFDUElfTVRYX0V4ZWN1dGUiLAorCSJBQ1BJX01UWF9JbnRlcnByZXRlciIsCisJIkFDUElfTVRYX1BhcnNlciIsCisJIkFDUElfTVRYX0Rpc3BhdGNoZXIiLAorCSJBQ1BJX01UWF9UYWJsZXMiLAorCSJBQ1BJX01UWF9vcF9yZWdpb25zIiwKKwkiQUNQSV9NVFhfTmFtZXNwYWNlIiwKKwkiQUNQSV9NVFhfRXZlbnRzIiwKKwkiQUNQSV9NVFhfSGFyZHdhcmUiLAorCSJBQ1BJX01UWF9DYWNoZXMiLAorCSJBQ1BJX01UWF9NZW1vcnkiLAorCSJBQ1BJX01UWF9kZWJ1Z19jbWRfY29tcGxldGUiLAorCSJBQ1BJX01UWF9kZWJ1Z19jbWRfcmVhZHkiLAorfTsKKworI2VuZGlmCisjZW5kaWYKKworCisvKiBUYWJsZSBmb3IgdGhlIGdsb2JhbCBtdXRleGVzICovCisKK3N0cnVjdCBhY3BpX211dGV4X2luZm8KK3sKKwlhY3BpX211dGV4ICAgICAgICAgICAgICAgICAgICAgICAgICBtdXRleDsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VfY291bnQ7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3duZXJfaWQ7Cit9OworCisvKiBUaGlzIG93bmVyIElEIG1lYW5zIHRoYXQgdGhlIG11dGV4IGlzIG5vdCBpbiB1c2UgKHVubG9ja2VkKSAqLworCisjZGVmaW5lIEFDUElfTVVURVhfTk9UX0FDUVVJUkVEICAgICAgICAgKHUzMikgKC0xKQorCisKKy8qIExvY2sgZmxhZyBwYXJhbWV0ZXIgZm9yIHZhcmlvdXMgaW50ZXJmYWNlcyAqLworCisjZGVmaW5lIEFDUElfTVRYX0RPX05PVF9MT0NLICAgICAgICAgICAgMAorI2RlZmluZSBBQ1BJX01UWF9MT0NLICAgICAgICAgICAgICAgICAgIDEKKworCit0eXBlZGVmIHUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3BpX293bmVyX2lkOworI2RlZmluZSBBQ1BJX09XTkVSX1RZUEVfVEFCTEUgICAgICAgICAgIDB4MAorI2RlZmluZSBBQ1BJX09XTkVSX1RZUEVfTUVUSE9EICAgICAgICAgIDB4MQorI2RlZmluZSBBQ1BJX0ZJUlNUX01FVEhPRF9JRCAgICAgICAgICAgIDB4MDAwMQorI2RlZmluZSBBQ1BJX0ZJUlNUX1RBQkxFX0lEICAgICAgICAgICAgIDB4RjAwMAorCisKKy8qIEZpZWxkIGFjY2VzcyBncmFudWxhcml0aWVzICovCisKKyNkZWZpbmUgQUNQSV9GSUVMRF9CWVRFX0dSQU5VTEFSSVRZICAgICAxCisjZGVmaW5lIEFDUElfRklFTERfV09SRF9HUkFOVUxBUklUWSAgICAgMgorI2RlZmluZSBBQ1BJX0ZJRUxEX0RXT1JEX0dSQU5VTEFSSVRZICAgIDQKKyNkZWZpbmUgQUNQSV9GSUVMRF9RV09SRF9HUkFOVUxBUklUWSAgICA4CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIE5hbWVzcGFjZSB0eXBlZGVmcyBhbmQgc3RydWN0cworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qIE9wZXJhdGlvbmFsIG1vZGVzIG9mIHRoZSBBTUwgaW50ZXJwcmV0ZXIvc2Nhbm5lciAqLworCit0eXBlZGVmIGVudW0KK3sKKwlBQ1BJX0lNT0RFX0xPQURfUEFTUzEgICAgICAgICAgICAgICA9IDB4MDEsCisJQUNQSV9JTU9ERV9MT0FEX1BBU1MyICAgICAgICAgICAgICAgPSAweDAyLAorCUFDUElfSU1PREVfRVhFQ1VURSAgICAgICAgICAgICAgICAgID0gMHgwRQorCit9IGFjcGlfaW50ZXJwcmV0ZXJfbW9kZTsKKworCisvKgorICogVGhlIE5vZGUgZGVzY3JpYmVzIGEgbmFtZWQgb2JqZWN0IHRoYXQgYXBwZWFycyBpbiB0aGUgQU1MCisgKiBBbiBhY3BpX25vZGUgaXMgdXNlZCB0byBzdG9yZSBOb2Rlcy4KKyAqCisgKiBkYXRhX3R5cGUgaXMgdXNlZCB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gaW50ZXJuYWwgZGVzY3JpcHRvcnMsIGFuZCBNVVNUCisgKiBiZSB0aGUgZmlyc3QgYnl0ZSBpbiB0aGlzIHN0cnVjdHVyZS4KKyAqLworCit1bmlvbiBhY3BpX25hbWVfdW5pb24KK3sKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlZ2VyOworCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzY2lpWzRdOworfTsKKworc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUKK3sKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yOyAgICAgLyogVXNlZCB0byBkaWZmZXJlbnRpYXRlIG9iamVjdCBkZXNjcmlwdG9yIHR5cGVzICovCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTsgICAgICAgICAgIC8qIFR5cGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbmFtZSAqLworCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyX2lkOworCXVuaW9uIGFjcGlfbmFtZV91bmlvbiAgICAgICAgICAgICAgIG5hbWU7ICAgICAgICAgICAvKiBBQ1BJIE5hbWUsIGFsd2F5cyA0IGNoYXJzIHBlciBBQ1BJIHNwZWMgKi8KKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICAgICAqb2JqZWN0OyAgICAgICAgLyogUG9pbnRlciB0byBhdHRhY2hlZCBBQ1BJIG9iamVjdCAob3B0aW9uYWwpICovCisJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgICAgICAgICAgKmNoaWxkOyAgICAgICAgIC8qIEZpcnN0IGNoaWxkICovCisJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgICAgICAgICAgKnBlZXI7ICAgICAgICAgIC8qIE5leHQgcGVlciovCisJdTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlX2NvdW50OyAvKiBDdXJyZW50IGNvdW50IG9mIHJlZmVyZW5jZXMgYW5kIGNoaWxkcmVuICovCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3M7Cit9OworCisKKyNkZWZpbmUgQUNQSV9FTlRSWV9OT1RfRk9VTkQgICAgICAgICAgICBOVUxMCisKKworLyogTm9kZSBmbGFncyAqLworCisjZGVmaW5lIEFOT0JKX1JFU0VSVkVEICAgICAgICAgICAgICAgICAgMHgwMQorI2RlZmluZSBBTk9CSl9FTkRfT0ZfUEVFUl9MSVNUICAgICAgICAgIDB4MDIKKyNkZWZpbmUgQU5PQkpfREFUQV9XSURUSF8zMiAgICAgICAgICAgICAweDA0ICAgICAvKiBQYXJlbnQgdGFibGUgaXMgNjQtYml0cyAqLworI2RlZmluZSBBTk9CSl9NRVRIT0RfQVJHICAgICAgICAgICAgICAgIDB4MDgKKyNkZWZpbmUgQU5PQkpfTUVUSE9EX0xPQ0FMICAgICAgICAgICAgICAweDEwCisjZGVmaW5lIEFOT0JKX01FVEhPRF9OT19SRVRWQUwgICAgICAgICAgMHgyMAorI2RlZmluZSBBTk9CSl9NRVRIT0RfU09NRV9OT19SRVRWQUwgICAgIDB4NDAKKyNkZWZpbmUgQU5PQkpfSVNfQklUX09GRlNFVCAgICAgICAgICAgICAweDgwCisKKy8qCisgKiBBQ1BJIFRhYmxlIERlc2NyaXB0b3IuICBPbmUgcGVyIEFDUEkgdGFibGUKKyAqLworc3RydWN0IGFjcGlfdGFibGVfZGVzYworeworCXN0cnVjdCBhY3BpX3RhYmxlX2Rlc2MgICAgICAgICAgKnByZXY7CisJc3RydWN0IGFjcGlfdGFibGVfZGVzYyAgICAgICAgICAqbmV4dDsKKwlzdHJ1Y3QgYWNwaV90YWJsZV9kZXNjICAgICAgICAgICppbnN0YWxsZWRfZGVzYzsKKwlzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgICAgICAgICpwb2ludGVyOworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFtbF9zdGFydDsKKwl1NjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBoeXNpY2FsX2FkZHJlc3M7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbWxfbGVuZ3RoOworCWFjcGlfc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoOworCWFjcGlfb3duZXJfaWQgICAgICAgICAgICAgICAgICAgdGFibGVfaWQ7CisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb2NhdGlvbjsKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlZF9pbnRvX25hbWVzcGFjZTsKK307CisKK3N0cnVjdCBhY3BpX3RhYmxlX2xpc3QKK3sKKwlzdHJ1Y3QgYWNwaV90YWJsZV9kZXNjICAgICAgICAgICpuZXh0OworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ7Cit9OworCisKK3N0cnVjdCBhY3BpX2ZpbmRfY29udGV4dAoreworCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnNlYXJjaF9mb3I7CisJYWNwaV9oYW5kbGUgICAgICAgICAgICAgICAgICAgICAqbGlzdDsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpjb3VudDsKK307CisKKworc3RydWN0IGFjcGlfbnNfc2VhcmNoX2RhdGEKK3sKKwlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAgICAgICpub2RlOworfTsKKworCisvKgorICogUHJlZGVmaW5lZCBOYW1lc3BhY2UgaXRlbXMKKyAqLworc3RydWN0IGFjcGlfcHJlZGVmaW5lZF9uYW1lcworeworCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5hbWU7CisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOworCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnZhbDsKK307CisKKworLyogT2JqZWN0IHR5cGVzIHVzZWQgZHVyaW5nIHBhY2thZ2UgY29waWVzICovCisKKworI2RlZmluZSBBQ1BJX0NPUFlfVFlQRV9TSU1QTEUgICAgICAgICAgIDAKKyNkZWZpbmUgQUNQSV9DT1BZX1RZUEVfUEFDS0FHRSAgICAgICAgICAxCisKKy8qIEluZm8gc3RydWN0dXJlIHVzZWQgdG8gY29udmVydCBleHRlcm5hbDwtPmludGVybmFsIG5hbWVzdHJpbmdzICovCisKK3N0cnVjdCBhY3BpX25hbWVzdHJpbmdfaW5mbworeworCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmV4dGVybmFsX25hbWU7CisJY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmV4dF9leHRlcm5hbF9jaGFyOworCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmludGVybmFsX25hbWU7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGg7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1fc2VnbWVudHM7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1fY2FyYXRzOworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVsbHlfcXVhbGlmaWVkOworfTsKKworCisvKiBGaWVsZCBjcmVhdGlvbiBpbmZvICovCisKK3N0cnVjdCBhY3BpX2NyZWF0ZV9maWVsZF9pbmZvCit7CisJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgICAgICAqcmVnaW9uX25vZGU7CisJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgICAgICAqZmllbGRfbm9kZTsKKwlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAgICAgICpyZWdpc3Rlcl9ub2RlOworCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICAgICAgKmRhdGFfcmVnaXN0ZXJfbm9kZTsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhbmtfdmFsdWU7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9iaXRfcG9zaXRpb247CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9iaXRfbGVuZ3RoOworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfZmxhZ3M7CisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGU7CisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF90eXBlOworfTsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBFdmVudCB0eXBlZGVmcyBhbmQgc3RydWN0cworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBEaXNwYXRjaCBpbmZvIGZvciBlYWNoIEdQRSAtLSBlaXRoZXIgYSBtZXRob2Qgb3IgaGFuZGxlciwgY2Fubm90IGJlIGJvdGggKi8KKworc3RydWN0IGFjcGlfaGFuZGxlcl9pbmZvCit7CisJYWNwaV9ldmVudF9oYW5kbGVyICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3M7ICAgICAgICAvKiBBZGRyZXNzIG9mIGhhbmRsZXIsIGlmIGFueSAqLworCXZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqY29udGV4dDsgICAgICAgLyogQ29udGV4dCB0byBiZSBwYXNzZWQgdG8gaGFuZGxlciAqLworCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICAgICAgICAgICAgICAqbWV0aG9kX25vZGU7ICAgLyogTWV0aG9kIG5vZGUgZm9yIHRoaXMgR1BFIGxldmVsIChzYXZlZCkgKi8KK307CisKK3VuaW9uIGFjcGlfZ3BlX2Rpc3BhdGNoX2luZm8KK3sKKwlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAgICAgICAgICAgICAgKm1ldGhvZF9ub2RlOyAgIC8qIE1ldGhvZCBub2RlIGZvciB0aGlzIEdQRSBsZXZlbCAqLworCXN0cnVjdCBhY3BpX2hhbmRsZXJfaW5mbyAgICAgICAgICAgICAgICAqaGFuZGxlcjsKK307CisKKy8qCisgKiBJbmZvcm1hdGlvbiBhYm91dCBhIEdQRSwgb25lIHBlciBlYWNoIEdQRSBpbiBhbiBhcnJheS4KKyAqIE5PVEU6IEltcG9ydGFudCB0byBrZWVwIHRoaXMgc3RydWN0IGFzIHNtYWxsIGFzIHBvc3NpYmxlLgorICovCitzdHJ1Y3QgYWNwaV9ncGVfZXZlbnRfaW5mbworeworCXVuaW9uIGFjcGlfZ3BlX2Rpc3BhdGNoX2luZm8gICAgZGlzcGF0Y2g7ICAgICAgIC8qIEVpdGhlciBNZXRob2Qgb3IgSGFuZGxlciAqLworCXN0cnVjdCBhY3BpX2dwZV9yZWdpc3Rlcl9pbmZvICAgICAgICAgICAqcmVnaXN0ZXJfaW5mbzsgLyogQmFja3BvaW50ZXIgdG8gcmVnaXN0ZXIgaW5mbyAqLworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnczsgICAgICAgICAgLyogTWlzYyBpbmZvIGFib3V0IHRoaXMgR1BFICovCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyX2JpdDsgICAvKiBUaGlzIEdQRSBiaXQgd2l0aGluIHRoZSByZWdpc3RlciAqLworfTsKKworLyogSW5mb3JtYXRpb24gYWJvdXQgYSBHUEUgcmVnaXN0ZXIgcGFpciwgb25lIHBlciBlYWNoIHN0YXR1cy9lbmFibGUgcGFpciBpbiBhbiBhcnJheSAqLworCitzdHJ1Y3QgYWNwaV9ncGVfcmVnaXN0ZXJfaW5mbworeworCXN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyAgICAgICAgICAgICBzdGF0dXNfYWRkcmVzczsgLyogQWRkcmVzcyBvZiBzdGF0dXMgcmVnICovCisJc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzICAgICAgICAgICAgIGVuYWJsZV9hZGRyZXNzOyAvKiBBZGRyZXNzIG9mIGVuYWJsZSByZWcgKi8KKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlX2Zvcl93YWtlOyAvKiBHUEVzIHRvIGtlZXAgZW5hYmxlZCB3aGVuIHNsZWVwaW5nICovCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZV9mb3JfcnVuOyAvKiBHUEVzIHRvIGtlZXAgZW5hYmxlZCB3aGVuIHJ1bm5pbmcgKi8KKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZV9ncGVfbnVtYmVyOyAvKiBCYXNlIEdQRSBudW1iZXIgZm9yIHRoaXMgcmVnaXN0ZXIgKi8KK307CisKKy8qCisgKiBJbmZvcm1hdGlvbiBhYm91dCBhIEdQRSByZWdpc3RlciBibG9jaywgb25lIHBlciBlYWNoIGluc3RhbGxlZCBibG9jayAtLQorICogR1BFMCwgR1BFMSwgYW5kIG9uZSBwZXIgZWFjaCBpbnN0YWxsZWQgR1BFIEJsb2NrIERldmljZS4KKyAqLworc3RydWN0IGFjcGlfZ3BlX2Jsb2NrX2luZm8KK3sKKwlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAgICAgICAgICAgICAgKm5vZGU7CisJc3RydWN0IGFjcGlfZ3BlX2Jsb2NrX2luZm8gICAgICAgICAgICAgICpwcmV2aW91czsKKwlzdHJ1Y3QgYWNwaV9ncGVfYmxvY2tfaW5mbyAgICAgICAgICAgICAgKm5leHQ7CisJc3RydWN0IGFjcGlfZ3BlX3hydXB0X2luZm8gICAgICAgICAgICAgICp4cnVwdF9ibG9jazsgICAvKiBCYWNrcG9pbnRlciB0byBpbnRlcnJ1cHQgYmxvY2sgKi8KKwlzdHJ1Y3QgYWNwaV9ncGVfcmVnaXN0ZXJfaW5mbyAgICAgICAgICAgKnJlZ2lzdGVyX2luZm87IC8qIE9uZSBwZXIgR1BFIHJlZ2lzdGVyIHBhaXIgKi8KKwlzdHJ1Y3QgYWNwaV9ncGVfZXZlbnRfaW5mbyAgICAgICAgICAgICAgKmV2ZW50X2luZm87ICAgIC8qIE9uZSBmb3IgZWFjaCBHUEUgKi8KKwlzdHJ1Y3QgYWNwaV9nZW5lcmljX2FkZHJlc3MgICAgICAgICAgICAgYmxvY2tfYWRkcmVzczsgIC8qIEJhc2UgYWRkcmVzcyBvZiB0aGUgYmxvY2sgKi8KKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJfY291bnQ7IC8qIE51bWJlciBvZiByZWdpc3RlciBwYWlycyBpbiBibG9jayAqLworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja19iYXNlX251bWJlcjsvKiBCYXNlIEdQRSBudW1iZXIgZm9yIHRoaXMgYmxvY2sgKi8KK307CisKKy8qIEluZm9ybWF0aW9uIGFib3V0IEdQRSBpbnRlcnJ1cHQgaGFuZGxlcnMsIG9uZSBwZXIgZWFjaCBpbnRlcnJ1cHQgbGV2ZWwgdXNlZCBmb3IgR1BFcyAqLworCitzdHJ1Y3QgYWNwaV9ncGVfeHJ1cHRfaW5mbworeworCXN0cnVjdCBhY3BpX2dwZV94cnVwdF9pbmZvICAgICAgICAgICAgICAqcHJldmlvdXM7CisJc3RydWN0IGFjcGlfZ3BlX3hydXB0X2luZm8gICAgICAgICAgICAgICpuZXh0OworCXN0cnVjdCBhY3BpX2dwZV9ibG9ja19pbmZvICAgICAgICAgICAgICAqZ3BlX2Jsb2NrX2xpc3RfaGVhZDsgLyogTGlzdCBvZiBHUEUgYmxvY2tzIGZvciB0aGlzIHhydXB0ICovCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdF9sZXZlbDsgICAgLyogU3lzdGVtIGludGVycnVwdCBsZXZlbCAqLworfTsKKworCitzdHJ1Y3QgYWNwaV9ncGVfd2Fsa19pbmZvCit7CisJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgICAgICAgICAgICAgICpncGVfZGV2aWNlOworCXN0cnVjdCBhY3BpX2dwZV9ibG9ja19pbmZvICAgICAgICAgICAgICAqZ3BlX2Jsb2NrOworfTsKKworCit0eXBlZGVmIGFjcGlfc3RhdHVzICgqQUNQSV9HUEVfQ0FMTEJBQ0spICgKKwlzdHJ1Y3QgYWNwaV9ncGVfeHJ1cHRfaW5mbyAgICAgICpncGVfeHJ1cHRfaW5mbywKKwlzdHJ1Y3QgYWNwaV9ncGVfYmxvY2tfaW5mbyAgICAgICpncGVfYmxvY2spOworCisKKy8qIEluZm9ybWF0aW9uIGFib3V0IGVhY2ggcGFydGljdWxhciBmaXhlZCBldmVudCAqLworCitzdHJ1Y3QgYWNwaV9maXhlZF9ldmVudF9oYW5kbGVyCit7CisJYWNwaV9ldmVudF9oYW5kbGVyICAgICAgICAgICAgICBoYW5kbGVyOyAgICAgICAgLyogQWRkcmVzcyBvZiBoYW5kbGVyLiAqLworCXZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmNvbnRleHQ7ICAgICAgIC8qIENvbnRleHQgdG8gYmUgcGFzc2VkIHRvIGhhbmRsZXIgKi8KK307CisKK3N0cnVjdCBhY3BpX2ZpeGVkX2V2ZW50X2luZm8KK3sKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c19yZWdpc3Rlcl9pZDsKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZV9yZWdpc3Rlcl9pZDsKKwl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c19iaXRfbWFzazsKKwl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZV9iaXRfbWFzazsKK307CisKKy8qIEluZm9ybWF0aW9uIHVzZWQgZHVyaW5nIGZpZWxkIHByb2Nlc3NpbmcgKi8KKworc3RydWN0IGFjcGlfZmllbGRfaW5mbworeworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcF9maWVsZDsKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX2ZsYWc7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwa2dfbGVuZ3RoOworfTsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBHZW5lcmljICJzdGF0ZSIgb2JqZWN0IGZvciBzdGFja3MKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjZGVmaW5lIEFDUElfQ09OVFJPTF9OT1JNQUwgICAgICAgICAgICAgICAgICAweEMwCisjZGVmaW5lIEFDUElfQ09OVFJPTF9DT05ESVRJT05BTF9FWEVDVVRJTkcgICAweEMxCisjZGVmaW5lIEFDUElfQ09OVFJPTF9QUkVESUNBVEVfRVhFQ1VUSU5HICAgICAweEMyCisjZGVmaW5lIEFDUElfQ09OVFJPTF9QUkVESUNBVEVfRkFMU0UgICAgICAgICAweEMzCisjZGVmaW5lIEFDUElfQ09OVFJPTF9QUkVESUNBVEVfVFJVRSAgICAgICAgICAweEM0CisKKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgKi8KK3N0cnVjdCBhY3BpX3dhbGtfc3RhdGUgICAgICAgIDsKK3N0cnVjdCBhY3BpX29ial9tdXRleDsKK3VuaW9uIGFjcGlfcGFyc2Vfb2JqZWN0ICAgICAgICA7CisKKworI2RlZmluZSBBQ1BJX1NUQVRFX0NPTU1PTiAgICAgICAgICAgICAgICAgIC8qIFR3byAzMi1iaXQgZmllbGRzIGFuZCBhIHBvaW50ZXIgKi9cCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90eXBlOyAgICAgICAgICAvKiBUbyBkaWZmZXJlbnRpYXRlIHZhcmlvdXMgaW50ZXJuYWwgb2JqcyAqL1wKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnczsgICAgICBcCisJdTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU7ICAgICAgXAorCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlOyAgICAgIFwKKwl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNlcnZlZDsgICBcCisJdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5leHQ7ICAgICAgXAorCitzdHJ1Y3QgYWNwaV9jb21tb25fc3RhdGUKK3sKKwlBQ1BJX1NUQVRFX0NPTU1PTgorfTsKKworCisvKgorICogVXBkYXRlIHN0YXRlIC0gdXNlZCB0byB0cmF2ZXJzZSBjb21wbGV4IG9iamVjdHMgc3VjaCBhcyBwYWNrYWdlcworICovCitzdHJ1Y3QgYWNwaV91cGRhdGVfc3RhdGUKK3sKKwlBQ1BJX1NUQVRFX0NPTU1PTgorCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgICAgICpvYmplY3Q7Cit9OworCisKKy8qCisgKiBQa2cgc3RhdGUgLSB1c2VkIHRvIHRyYXZlcnNlIG5lc3RlZCBwYWNrYWdlIHN0cnVjdHVyZXMKKyAqLworc3RydWN0IGFjcGlfcGtnX3N0YXRlCit7CisJQUNQSV9TVEFURV9DT01NT04KKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICAgICAqc291cmNlX29iamVjdDsKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICAgICAqZGVzdF9vYmplY3Q7CisJc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAgICAgICAgICAgICAgKndhbGtfc3RhdGU7CisJdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnRoaXNfdGFyZ2V0X29iajsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1fcGFja2FnZXM7CisJdTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg7Cit9OworCisKKy8qCisgKiBDb250cm9sIHN0YXRlIC0gb25lIHBlciBpZi9lbHNlIGFuZCB3aGlsZSBjb25zdHJ1Y3RzLgorICogQWxsb3dzIG5lc3Rpbmcgb2YgdGhlc2UgY29uc3RydWN0cworICovCitzdHJ1Y3QgYWNwaV9jb250cm9sX3N0YXRlCit7CisJQUNQSV9TVEFURV9DT01NT04KKwl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAgICAgICAgICAgICAqcHJlZGljYXRlX29wOworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICphbWxfcHJlZGljYXRlX3N0YXJ0OyAgIC8qIFN0YXJ0IG9mIGlmL3doaWxlIHByZWRpY2F0ZSAqLworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwYWNrYWdlX2VuZDsgICAgICAgICAgIC8qIEVuZCBvZiBpZi93aGlsZSBibG9jayAqLworCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wY29kZTsKK307CisKKworLyoKKyAqIFNjb3BlIHN0YXRlIC0gY3VycmVudCBzY29wZSBkdXJpbmcgbmFtZXNwYWNlIGxvb2t1cHMKKyAqLworc3RydWN0IGFjcGlfc2NvcGVfc3RhdGUKK3sKKwlBQ1BJX1NUQVRFX0NPTU1PTgorCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICAgICAgICAgICpub2RlOworfTsKKworCitzdHJ1Y3QgYWNwaV9wc2NvcGVfc3RhdGUKK3sKKwlBQ1BJX1NUQVRFX0NPTU1PTgorCXVuaW9uIGFjcGlfcGFyc2Vfb2JqZWN0ICAgICAgICAgICAgICpvcDsgICAgICAgICAgICAgICAgICAgIC8qIEN1cnJlbnQgb3AgYmVpbmcgcGFyc2VkICovCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFyZ19lbmQ7ICAgICAgICAgICAgICAgLyogQ3VycmVudCBhcmd1bWVudCBlbmQgKi8KKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcGtnX2VuZDsgICAgICAgICAgICAgICAvKiBDdXJyZW50IHBhY2thZ2UgZW5kICovCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnX2xpc3Q7ICAgICAgICAgICAgICAgLyogTmV4dCBhcmd1bWVudCB0byBwYXJzZSAqLworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ19jb3VudDsgICAgICAgICAgICAgIC8qIE51bWJlciBvZiBmaXhlZCBhcmd1bWVudHMgKi8KK307CisKKworLyoKKyAqIFRocmVhZCBzdGF0ZSAtIG9uZSBwZXIgdGhyZWFkIGFjcm9zcyBtdWx0aXBsZSB3YWxrIHN0YXRlcy4gIE11bHRpcGxlIHdhbGsKKyAqIHN0YXRlcyBhcmUgY3JlYXRlZCB3aGVuIHRoZXJlIGFyZSBuZXN0ZWQgY29udHJvbCBtZXRob2RzIGV4ZWN1dGluZy4KKyAqLworc3RydWN0IGFjcGlfdGhyZWFkX3N0YXRlCit7CisJQUNQSV9TVEFURV9DT01NT04KKwlzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICAgICAgICAgICAgICAqd2Fsa19zdGF0ZV9saXN0OyAgICAgICAvKiBIZWFkIG9mIGxpc3Qgb2Ygd2Fsa19zdGF0ZXMgZm9yIHRoaXMgdGhyZWFkICovCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAgICAgKmFjcXVpcmVkX211dGV4X2xpc3Q7ICAgLyogTGlzdCBvZiBhbGwgY3VycmVudGx5IGFjcXVpcmVkIG11dGV4ZXMgKi8KKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlYWRfaWQ7ICAgICAgICAgICAgICAvKiBSdW5uaW5nIHRocmVhZCBJRCAqLworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfc3luY19sZXZlbDsgICAgIC8qIE11dGV4IFN5bmMgKG5lc3RlZCBhY3F1aXJlKSBsZXZlbCAqLworfTsKKworCisvKgorICogUmVzdWx0IHZhbHVlcyAtIHVzZWQgdG8gYWNjdW11bGF0ZSB0aGUgcmVzdWx0cyBvZiBuZXN0ZWQKKyAqIEFNTCBhcmd1bWVudHMKKyAqLworc3RydWN0IGFjcGlfcmVzdWx0X3ZhbHVlcworeworCUFDUElfU1RBVEVfQ09NTU9OCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAgICAgKm9ial9kZXNjIFtBQ1BJX09CSl9OVU1fT1BFUkFORFNdOworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bV9yZXN1bHRzOworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RfaW5zZXJ0OworfTsKKworCit0eXBlZGVmCithY3BpX3N0YXR1cyAoKmFjcGlfcGFyc2VfZG93bndhcmRzKSAoCisJc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAgICAgICAgICAgICAgKndhbGtfc3RhdGUsCisJdW5pb24gYWNwaV9wYXJzZV9vYmplY3QgICAgICAgICAgICAgKipvdXRfb3ApOworCit0eXBlZGVmCithY3BpX3N0YXR1cyAoKmFjcGlfcGFyc2VfdXB3YXJkcykgKAorCXN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgICAgICAgICAgICAgICp3YWxrX3N0YXRlKTsKKworCisvKgorICogTm90aWZ5IGluZm8gLSB1c2VkIHRvIHBhc3MgaW5mbyB0byB0aGUgZGVmZXJyZWQgbm90aWZ5CisgKiBoYW5kbGVyL2Rpc3BhdGNoZXIuCisgKi8KK3N0cnVjdCBhY3BpX25vdGlmeV9pbmZvCit7CisJQUNQSV9TVEFURV9DT01NT04KKwlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAgICAgICAgICAqbm9kZTsKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICAgICAqaGFuZGxlcl9vYmo7Cit9OworCisKKy8qIEdlbmVyaWMgc3RhdGUgaXMgdW5pb24gb2Ygc3RydWN0cyBhYm92ZSAqLworCit1bmlvbiBhY3BpX2dlbmVyaWNfc3RhdGUKK3sKKwlzdHJ1Y3QgYWNwaV9jb21tb25fc3RhdGUgICAgICAgICAgICBjb21tb247CisJc3RydWN0IGFjcGlfY29udHJvbF9zdGF0ZSAgICAgICAgICAgY29udHJvbDsKKwlzdHJ1Y3QgYWNwaV91cGRhdGVfc3RhdGUgICAgICAgICAgICB1cGRhdGU7CisJc3RydWN0IGFjcGlfc2NvcGVfc3RhdGUgICAgICAgICAgICAgc2NvcGU7CisJc3RydWN0IGFjcGlfcHNjb3BlX3N0YXRlICAgICAgICAgICAgcGFyc2Vfc2NvcGU7CisJc3RydWN0IGFjcGlfcGtnX3N0YXRlICAgICAgICAgICAgICAgcGtnOworCXN0cnVjdCBhY3BpX3RocmVhZF9zdGF0ZSAgICAgICAgICAgIHRocmVhZDsKKwlzdHJ1Y3QgYWNwaV9yZXN1bHRfdmFsdWVzICAgICAgICAgICByZXN1bHRzOworCXN0cnVjdCBhY3BpX25vdGlmeV9pbmZvICAgICAgICAgICAgIG5vdGlmeTsKK307CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogSW50ZXJwcmV0ZXIgdHlwZWRlZnMgYW5kIHN0cnVjdHMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordHlwZWRlZgorYWNwaV9zdGF0dXMgKCpBQ1BJX0VYRUNVVEVfT1ApICgKKwlzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICAgICAgICAgICAgICAqd2Fsa19zdGF0ZSk7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogUGFyc2VyIHR5cGVkZWZzIGFuZCBzdHJ1Y3RzCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBBTUwgb3Bjb2RlLCBuYW1lLCBhbmQgYXJndW1lbnQgbGF5b3V0CisgKi8KK3N0cnVjdCBhY3BpX29wY29kZV9pbmZvCit7CisjaWYgZGVmaW5lZChBQ1BJX0RJU0FTU0VNQkxFUikgfHwgZGVmaW5lZChBQ1BJX0RFQlVHX09VVFBVVCkKKwljaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmFtZTsgICAgICAgICAgLyogT3Bjb2RlIG5hbWUgKGRpc2Fzc2VtYmxlci9kZWJ1ZyBvbmx5KSAqLworI2VuZGlmCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VfYXJnczsgICAgIC8qIEdyYW1tYXIvUGFyc2UgdGltZSBhcmd1bWVudHMgKi8KKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW50aW1lX2FyZ3M7ICAgLyogSW50ZXJwcmV0IHRpbWUgYXJndW1lbnRzICovCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3M7ICAgICAgICAgIC8qIE1pc2MgZmxhZ3MgKi8KKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RfdHlwZTsgICAgLyogQ29ycmVzcG9uZGluZyBpbnRlcm5hbCBvYmplY3QgdHlwZSAqLworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOyAgICAgICAgICAvKiBPcGNvZGUgY2xhc3MgKi8KKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOyAgICAgICAgICAgLyogT3Bjb2RlIHR5cGUgKi8KK307CisKKwordW5pb24gYWNwaV9wYXJzZV92YWx1ZQoreworCWFjcGlfaW50ZWdlciAgICAgICAgICAgICAgICAgICAgICAgIGludGVnZXI7ICAgICAgICAvKiBJbnRlZ2VyIGNvbnN0YW50IChVcCB0byA2NCBiaXRzKSAqLworCXN0cnVjdCB1aW50NjRfc3RydWN0ICAgICAgICAgICAgICAgIGludGVnZXI2NDsgICAgICAvKiBTdHJ1Y3R1cmUgb3ZlcmxheSBmb3IgMiAzMi1iaXQgRHdvcmRzICovCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZTsgICAgICAgICAgIC8qIGJ5dGVsaXN0IG9yIGZpZWxkIHNpemUgKi8KKwljaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqc3RyaW5nOyAgICAgICAgLyogTlVMTCB0ZXJtaW5hdGVkIHN0cmluZyAqLworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpidWZmZXI7ICAgICAgICAvKiBidWZmZXIgb3Igc3RyaW5nICovCisJY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5hbWU7ICAgICAgICAgIC8qIE5VTEwgdGVybWluYXRlZCBzdHJpbmcgKi8KKwl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAgICAgICAgICAgICAqYXJnOyAgICAgICAgICAgLyogYXJndW1lbnRzIGFuZCBjb250YWluZWQgb3BzICovCit9OworCisKKyNkZWZpbmUgQUNQSV9QQVJTRV9DT01NT04gXAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdHlwZTsgICAgICAvKiBUbyBkaWZmZXJlbnRpYXRlIHZhcmlvdXMgaW50ZXJuYWwgb2JqcyAqL1wKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnczsgICAgICAgICAgLyogVHlwZSBvZiBPcCAqL1wKKwl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbWxfb3Bjb2RlOyAgICAgLyogQU1MIG9wY29kZSAqL1wKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbWxfb2Zmc2V0OyAgICAgLyogT2Zmc2V0IG9mIGRlY2xhcmF0aW9uIGluIEFNTCAqL1wKKwl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAgICAgICAgICAgICAqcGFyZW50OyAgICAgICAgLyogUGFyZW50IG9wICovXAorCXVuaW9uIGFjcGlfcGFyc2Vfb2JqZWN0ICAgICAgICAgICAgICpuZXh0OyAgICAgICAgICAvKiBOZXh0IG9wICovXAorCUFDUElfRElTQVNNX09OTFlfTUVNQkVSUyAoXAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FzbV9mbGFnczsgICAvKiBVc2VkIGR1cmluZyBBTUwgZGlzYXNzZW1ibHkgKi9cCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYXNtX29wY29kZTsgIC8qIFN1YnR5cGUgdXNlZCBmb3IgZGlzYXNzZW1ibHkgKi9cCisJY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW1sX29wX25hbWVbMTZdKSAvKiBPcCBuYW1lIChkZWJ1ZyBvbmx5KSAqL1wKKwkJCSAgIC8qIE5PTi1ERUJVRyBtZW1iZXJzIGJlbG93OiAqL1wKKwlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAgICAgICAgICAqbm9kZTsgICAgICAgICAgLyogRm9yIHVzZSBieSBpbnRlcnByZXRlciAqL1wKKwl1bmlvbiBhY3BpX3BhcnNlX3ZhbHVlICAgICAgICAgICAgICB2YWx1ZTsgICAgICAgICAgLyogVmFsdWUgb3IgYXJncyBhc3NvY2lhdGVkIHdpdGggdGhlIG9wY29kZSAqL1wKKworCisjZGVmaW5lIEFDUElfREFTTV9CVUZGRVIgICAgICAgIDB4MDAKKyNkZWZpbmUgQUNQSV9EQVNNX1JFU09VUkNFICAgICAgMHgwMQorI2RlZmluZSBBQ1BJX0RBU01fU1RSSU5HICAgICAgICAweDAyCisjZGVmaW5lIEFDUElfREFTTV9VTklDT0RFICAgICAgIDB4MDMKKyNkZWZpbmUgQUNQSV9EQVNNX0VJU0FJRCAgICAgICAgMHgwNAorI2RlZmluZSBBQ1BJX0RBU01fTUFUQ0hPUCAgICAgICAweDA1CisKKy8qCisgKiBnZW5lcmljIG9wZXJhdGlvbiAoZm9yIGV4YW1wbGU6ICBJZiwgV2hpbGUsIFN0b3JlKQorICovCitzdHJ1Y3QgYWNwaV9wYXJzZV9vYmpfY29tbW9uCit7CisJQUNQSV9QQVJTRV9DT01NT04KK307CisKKworLyoKKyAqIEV4dGVuZGVkIE9wIGZvciBuYW1lZCBvcHMgKFNjb3BlLCBNZXRob2QsIGV0Yy4pLCBkZWZlcnJlZCBvcHMgKE1ldGhvZHMgYW5kIG9wX3JlZ2lvbnMpLAorICogYW5kIGJ5dGVsaXN0cy4KKyAqLworc3RydWN0IGFjcGlfcGFyc2Vfb2JqX25hbWVkCit7CisJQUNQSV9QQVJTRV9DT01NT04KKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcGF0aDsKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YTsgICAgICAgICAgLyogQU1MIGJvZHkgb3IgYnl0ZWxpc3QgZGF0YSAqLworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aDsgICAgICAgICAvKiBBTUwgbGVuZ3RoICovCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTsgICAgICAgICAgIC8qIDQtYnl0ZSBuYW1lIG9yIHplcm8gaWYgbm8gbmFtZSAqLworfTsKKworCisvKiBUaGUgcGFyc2Ugbm9kZSBpcyB0aGUgZnVuZGFtZW50YWwgZWxlbWVudCBvZiB0aGUgcGFyc2UgdHJlZSAqLworCitzdHJ1Y3QgYWNwaV9wYXJzZV9vYmpfYXNsCit7CisJQUNQSV9QQVJTRV9DT01NT04KKwl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAgICAgICAgICAgICAqY2hpbGQ7CisJdW5pb24gYWNwaV9wYXJzZV9vYmplY3QgICAgICAgICAgICAgKnBhcmVudF9tZXRob2Q7CisJY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmZpbGVuYW1lOworCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpleHRlcm5hbF9uYW1lOworCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuYW1lcGF0aDsKKwljaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lX3NlZ1s0XTsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYV92YWx1ZTsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW47CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZV9udW1iZXI7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9naWNhbF9saW5lX251bWJlcjsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dpY2FsX2J5dGVfb2Zmc2V0OworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZF9saW5lOworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZF9sb2dpY2FsX2xpbmU7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNwaV9idHlwZTsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbWxfbGVuZ3RoOworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFtbF9zdWJ0cmVlX2xlbmd0aDsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbF9hbWxfbGVuZ3RoOworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsX2FtbF9vZmZzZXQ7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZV9mbGFnczsKKwl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZV9vcGNvZGU7CisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW1sX29wY29kZV9sZW5ndGg7CisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW1sX3BrZ19sZW5fYnl0ZXM7CisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE7CisJY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2Vfb3BfbmFtZVsxMl07Cit9OworCisKK3VuaW9uIGFjcGlfcGFyc2Vfb2JqZWN0Cit7CisJc3RydWN0IGFjcGlfcGFyc2Vfb2JqX2NvbW1vbiAgICAgICAgY29tbW9uOworCXN0cnVjdCBhY3BpX3BhcnNlX29ial9uYW1lZCAgICAgICAgIG5hbWVkOworCXN0cnVjdCBhY3BpX3BhcnNlX29ial9hc2wgICAgICAgICAgIGFzbDsKK307CisKKworLyoKKyAqIFBhcnNlIHN0YXRlIC0gb25lIHN0YXRlIHBlciBwYXJzZXIgaW52b2NhdGlvbiBhbmQgZWFjaCBjb250cm9sCisgKiBtZXRob2QuCisgKi8KK3N0cnVjdCBhY3BpX3BhcnNlX3N0YXRlCit7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW1sX3NpemU7CisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFtbF9zdGFydDsgICAgIC8qIEZpcnN0IEFNTCBieXRlICovCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFtbDsgICAgICAgICAgIC8qIE5leHQgQU1MIGJ5dGUgKi8KKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYW1sX2VuZDsgICAgICAgLyogKGxhc3QgKyAxKSBBTUwgYnl0ZSAqLworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwa2dfc3RhcnQ7ICAgICAvKiBDdXJyZW50IHBhY2thZ2UgYmVnaW4gKi8KKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcGtnX2VuZDsgICAgICAgLyogQ3VycmVudCBwYWNrYWdlIGVuZCAqLworCXVuaW9uIGFjcGlfcGFyc2Vfb2JqZWN0ICAgICAgICAgICAgICpzdGFydF9vcDsgICAgICAvKiBSb290IG9mIHBhcnNlIHRyZWUgKi8KKwlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAgICAgICAgICAqc3RhcnRfbm9kZTsKKwl1bmlvbiBhY3BpX2dlbmVyaWNfc3RhdGUgICAgICAgICAgICAqc2NvcGU7ICAgICAgICAgLyogQ3VycmVudCBzY29wZSAqLworCXVuaW9uIGFjcGlfcGFyc2Vfb2JqZWN0ICAgICAgICAgICAgICpzdGFydF9zY29wZTsKK307CisKKworLyogUGFyc2Ugb2JqZWN0IGZsYWdzICovCisKKyNkZWZpbmUgQUNQSV9QQVJTRU9QX0dFTkVSSUMgICAgICAgICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgQUNQSV9QQVJTRU9QX05BTUVEICAgICAgICAgICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgQUNQSV9QQVJTRU9QX0RFRkVSUkVEICAgICAgICAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgQUNQSV9QQVJTRU9QX0JZVEVMSVNUICAgICAgICAgICAgICAgICAgIDB4MDgKKyNkZWZpbmUgQUNQSV9QQVJTRU9QX0lOX0NBQ0hFICAgICAgICAgICAgICAgICAgIDB4ODAKKworLyogUGFyc2Ugb2JqZWN0IGRpc2FzbV9mbGFncyAqLworCisjZGVmaW5lIEFDUElfUEFSU0VPUF9JR05PUkUgICAgICAgICAgICAgICAgICAgICAweDAxCisjZGVmaW5lIEFDUElfUEFSU0VPUF9QQVJBTUxJU1QgICAgICAgICAgICAgICAgICAweDAyCisjZGVmaW5lIEFDUElfUEFSU0VPUF9FTVBUWV9URVJNTElTVCAgICAgICAgICAgICAweDA0CisjZGVmaW5lIEFDUElfUEFSU0VPUF9TUEVDSUFMICAgICAgICAgICAgICAgICAgICAweDEwCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogSGFyZHdhcmUgKEFDUEkgcmVnaXN0ZXJzKSBhbmQgUE5QCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgUENJX1JPT1RfSElEX1NUUklORyAgICAgICAgICJQTlAwQTAzIgorCitzdHJ1Y3QgYWNwaV9iaXRfcmVnaXN0ZXJfaW5mbworeworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudF9yZWdpc3RlcjsKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRfcG9zaXRpb247CisJdTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXNzX2JpdF9tYXNrOworfTsKKworCisvKgorICogUmVnaXN0ZXIgSURzCisgKiBUaGVzZSBhcmUgdGhlIGZ1bGwgQUNQSSByZWdpc3RlcnMKKyAqLworI2RlZmluZSBBQ1BJX1JFR0lTVEVSX1BNMV9TVEFUVVMgICAgICAgICAgICAgICAgMHgwMQorI2RlZmluZSBBQ1BJX1JFR0lTVEVSX1BNMV9FTkFCTEUgICAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBBQ1BJX1JFR0lTVEVSX1BNMV9DT05UUk9MICAgICAgICAgICAgICAgMHgwMworI2RlZmluZSBBQ1BJX1JFR0lTVEVSX1BNMUFfQ09OVFJPTCAgICAgICAgICAgICAgMHgwNAorI2RlZmluZSBBQ1BJX1JFR0lTVEVSX1BNMUJfQ09OVFJPTCAgICAgICAgICAgICAgMHgwNQorI2RlZmluZSBBQ1BJX1JFR0lTVEVSX1BNMl9DT05UUk9MICAgICAgICAgICAgICAgMHgwNgorI2RlZmluZSBBQ1BJX1JFR0lTVEVSX1BNX1RJTUVSICAgICAgICAgICAgICAgICAgMHgwNworI2RlZmluZSBBQ1BJX1JFR0lTVEVSX1BST0NFU1NPUl9CTE9DSyAgICAgICAgICAgMHgwOAorI2RlZmluZSBBQ1BJX1JFR0lTVEVSX1NNSV9DT01NQU5EX0JMT0NLICAgICAgICAgMHgwOQorCisKKy8qIE1hc2tzIHVzZWQgdG8gYWNjZXNzIHRoZSBiaXRfcmVnaXN0ZXJzICovCisKKyNkZWZpbmUgQUNQSV9CSVRNQVNLX1RJTUVSX1NUQVRVUyAgICAgICAgICAgICAgIDB4MDAwMQorI2RlZmluZSBBQ1BJX0JJVE1BU0tfQlVTX01BU1RFUl9TVEFUVVMgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIEFDUElfQklUTUFTS19HTE9CQUxfTE9DS19TVEFUVVMgICAgICAgICAweDAwMjAKKyNkZWZpbmUgQUNQSV9CSVRNQVNLX1BPV0VSX0JVVFRPTl9TVEFUVVMgICAgICAgIDB4MDEwMAorI2RlZmluZSBBQ1BJX0JJVE1BU0tfU0xFRVBfQlVUVE9OX1NUQVRVUyAgICAgICAgMHgwMjAwCisjZGVmaW5lIEFDUElfQklUTUFTS19SVF9DTE9DS19TVEFUVVMgICAgICAgICAgICAweDA0MDAKKyNkZWZpbmUgQUNQSV9CSVRNQVNLX1BDSUVYUF9XQUtFX1NUQVRVUyAgICAgICAgIDB4NDAwMCAgICAvKiBBQ1BJIDMuMCAqLworI2RlZmluZSBBQ1BJX0JJVE1BU0tfV0FLRV9TVEFUVVMgICAgICAgICAgICAgICAgMHg4MDAwCisKKyNkZWZpbmUgQUNQSV9CSVRNQVNLX0FMTF9GSVhFRF9TVEFUVVMgICAgICAgICAgIChBQ1BJX0JJVE1BU0tfVElNRVJfU1RBVFVTICAgICAgICAgIHwgXAorCQkJIEFDUElfQklUTUFTS19CVVNfTUFTVEVSX1NUQVRVUyAgICAgfCBcCisJCQkgQUNQSV9CSVRNQVNLX0dMT0JBTF9MT0NLX1NUQVRVUyAgICB8IFwKKwkJCSBBQ1BJX0JJVE1BU0tfUE9XRVJfQlVUVE9OX1NUQVRVUyAgIHwgXAorCQkJIEFDUElfQklUTUFTS19TTEVFUF9CVVRUT05fU1RBVFVTICAgfCBcCisJCQkgQUNQSV9CSVRNQVNLX1JUX0NMT0NLX1NUQVRVUyAgICAgICB8IFwKKwkJCSBBQ1BJX0JJVE1BU0tfV0FLRV9TVEFUVVMpCisKKyNkZWZpbmUgQUNQSV9CSVRNQVNLX1RJTUVSX0VOQUJMRSAgICAgICAgICAgICAgIDB4MDAwMQorI2RlZmluZSBBQ1BJX0JJVE1BU0tfR0xPQkFMX0xPQ0tfRU5BQkxFICAgICAgICAgMHgwMDIwCisjZGVmaW5lIEFDUElfQklUTUFTS19QT1dFUl9CVVRUT05fRU5BQkxFICAgICAgICAweDAxMDAKKyNkZWZpbmUgQUNQSV9CSVRNQVNLX1NMRUVQX0JVVFRPTl9FTkFCTEUgICAgICAgIDB4MDIwMAorI2RlZmluZSBBQ1BJX0JJVE1BU0tfUlRfQ0xPQ0tfRU5BQkxFICAgICAgICAgICAgMHgwNDAwCisjZGVmaW5lIEFDUElfQklUTUFTS19QQ0lFWFBfV0FLRV9ESVNBQkxFICAgICAgICAweDQwMDAgICAgLyogQUNQSSAzLjAgKi8KKworI2RlZmluZSBBQ1BJX0JJVE1BU0tfU0NJX0VOQUJMRSAgICAgICAgICAgICAgICAgMHgwMDAxCisjZGVmaW5lIEFDUElfQklUTUFTS19CVVNfTUFTVEVSX1JMRCAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgQUNQSV9CSVRNQVNLX0dMT0JBTF9MT0NLX1JFTEVBU0UgICAgICAgIDB4MDAwNAorI2RlZmluZSBBQ1BJX0JJVE1BU0tfU0xFRVBfVFlQRV9YICAgICAgICAgICAgICAgMHgxQzAwCisjZGVmaW5lIEFDUElfQklUTUFTS19TTEVFUF9FTkFCTEUgICAgICAgICAgICAgICAweDIwMDAKKworI2RlZmluZSBBQ1BJX0JJVE1BU0tfQVJCX0RJU0FCTEUgICAgICAgICAgICAgICAgMHgwMDAxCisKKworLyogUmF3IGJpdCBwb3NpdGlvbiBvZiBlYWNoIGJpdF9yZWdpc3RlciAqLworCisjZGVmaW5lIEFDUElfQklUUE9TSVRJT05fVElNRVJfU1RBVFVTICAgICAgICAgICAweDAwCisjZGVmaW5lIEFDUElfQklUUE9TSVRJT05fQlVTX01BU1RFUl9TVEFUVVMgICAgICAweDA0CisjZGVmaW5lIEFDUElfQklUUE9TSVRJT05fR0xPQkFMX0xPQ0tfU1RBVFVTICAgICAweDA1CisjZGVmaW5lIEFDUElfQklUUE9TSVRJT05fUE9XRVJfQlVUVE9OX1NUQVRVUyAgICAweDA4CisjZGVmaW5lIEFDUElfQklUUE9TSVRJT05fU0xFRVBfQlVUVE9OX1NUQVRVUyAgICAweDA5CisjZGVmaW5lIEFDUElfQklUUE9TSVRJT05fUlRfQ0xPQ0tfU1RBVFVTICAgICAgICAweDBBCisjZGVmaW5lIEFDUElfQklUUE9TSVRJT05fUENJRVhQX1dBS0VfU1RBVFVTICAgICAweDBFICAgIC8qIEFDUEkgMy4wICovCisjZGVmaW5lIEFDUElfQklUUE9TSVRJT05fV0FLRV9TVEFUVVMgICAgICAgICAgICAweDBGCisKKyNkZWZpbmUgQUNQSV9CSVRQT1NJVElPTl9USU1FUl9FTkFCTEUgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgQUNQSV9CSVRQT1NJVElPTl9HTE9CQUxfTE9DS19FTkFCTEUgICAgIDB4MDUKKyNkZWZpbmUgQUNQSV9CSVRQT1NJVElPTl9QT1dFUl9CVVRUT05fRU5BQkxFICAgIDB4MDgKKyNkZWZpbmUgQUNQSV9CSVRQT1NJVElPTl9TTEVFUF9CVVRUT05fRU5BQkxFICAgIDB4MDkKKyNkZWZpbmUgQUNQSV9CSVRQT1NJVElPTl9SVF9DTE9DS19FTkFCTEUgICAgICAgIDB4MEEKKyNkZWZpbmUgQUNQSV9CSVRQT1NJVElPTl9QQ0lFWFBfV0FLRV9ESVNBQkxFICAgIDB4MEUgICAgLyogQUNQSSAzLjAgKi8KKworI2RlZmluZSBBQ1BJX0JJVFBPU0lUSU9OX1NDSV9FTkFCTEUgICAgICAgICAgICAgMHgwMAorI2RlZmluZSBBQ1BJX0JJVFBPU0lUSU9OX0JVU19NQVNURVJfUkxEICAgICAgICAgMHgwMQorI2RlZmluZSBBQ1BJX0JJVFBPU0lUSU9OX0dMT0JBTF9MT0NLX1JFTEVBU0UgICAgMHgwMgorI2RlZmluZSBBQ1BJX0JJVFBPU0lUSU9OX1NMRUVQX1RZUEVfWCAgICAgICAgICAgMHgwQQorI2RlZmluZSBBQ1BJX0JJVFBPU0lUSU9OX1NMRUVQX0VOQUJMRSAgICAgICAgICAgMHgwRAorCisjZGVmaW5lIEFDUElfQklUUE9TSVRJT05fQVJCX0RJU0FCTEUgICAgICAgICAgICAweDAwCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogUmVzb3VyY2UgZGVzY3JpcHRvcnMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKiByZXNvdXJjZV90eXBlIHZhbHVlcyAqLworCisjZGVmaW5lIEFDUElfUkVTT1VSQ0VfVFlQRV9NRU1PUllfUkFOR0UgICAgICAgICAwCisjZGVmaW5lIEFDUElfUkVTT1VSQ0VfVFlQRV9JT19SQU5HRSAgICAgICAgICAgICAxCisjZGVmaW5lIEFDUElfUkVTT1VSQ0VfVFlQRV9CVVNfTlVNQkVSX1JBTkdFICAgICAyCisKKy8qIFJlc291cmNlIGRlc2NyaXB0b3IgdHlwZXMgYW5kIG1hc2tzICovCisKKyNkZWZpbmUgQUNQSV9SREVTQ19UWVBFX0xBUkdFICAgICAgICAgICAgICAgICAgIDB4ODAKKyNkZWZpbmUgQUNQSV9SREVTQ19UWVBFX1NNQUxMICAgICAgICAgICAgICAgICAgIDB4MDAKKworI2RlZmluZSBBQ1BJX1JERVNDX1RZUEVfTUFTSyAgICAgICAgICAgICAgICAgICAgMHg4MAorI2RlZmluZSBBQ1BJX1JERVNDX1NNQUxMX01BU0sgICAgICAgICAgICAgICAgICAgMHg3OCAvKiBPbmx5IGJpdHMgNjozIGNvbnRhaW4gdGhlIHR5cGUgKi8KKworCisvKgorICogU21hbGwgcmVzb3VyY2UgZGVzY3JpcHRvciB0eXBlcworICogTm90ZTogVGhlIDMgbGVuZ3RoIGJpdHMgKDI6MCkgbXVzdCBiZSB6ZXJvCisgKi8KKyNkZWZpbmUgQUNQSV9SREVTQ19UWVBFX0lSUV9GT1JNQVQgICAgICAgICAgICAgIDB4MjAKKyNkZWZpbmUgQUNQSV9SREVTQ19UWVBFX0RNQV9GT1JNQVQgICAgICAgICAgICAgIDB4MjgKKyNkZWZpbmUgQUNQSV9SREVTQ19UWVBFX1NUQVJUX0RFUEVOREVOVCAgICAgICAgIDB4MzAKKyNkZWZpbmUgQUNQSV9SREVTQ19UWVBFX0VORF9ERVBFTkRFTlQgICAgICAgICAgIDB4MzgKKyNkZWZpbmUgQUNQSV9SREVTQ19UWVBFX0lPX1BPUlQgICAgICAgICAgICAgICAgIDB4NDAKKyNkZWZpbmUgQUNQSV9SREVTQ19UWVBFX0ZJWEVEX0lPX1BPUlQgICAgICAgICAgIDB4NDgKKyNkZWZpbmUgQUNQSV9SREVTQ19UWVBFX1NNQUxMX1ZFTkRPUiAgICAgICAgICAgIDB4NzAKKyNkZWZpbmUgQUNQSV9SREVTQ19UWVBFX0VORF9UQUcgICAgICAgICAgICAgICAgIDB4NzgKKworLyoKKyAqIExhcmdlIHJlc291cmNlIGRlc2NyaXB0b3IgdHlwZXMKKyAqLworI2RlZmluZSBBQ1BJX1JERVNDX1RZUEVfTUVNT1JZXzI0ICAgICAgICAgICAgICAgMHg4MQorI2RlZmluZSBBQ1BJX1JERVNDX1RZUEVfR0VORVJBTF9SRUdJU1RFUiAgICAgICAgMHg4MgorI2RlZmluZSBBQ1BJX1JERVNDX1RZUEVfTEFSR0VfVkVORE9SICAgICAgICAgICAgMHg4NAorI2RlZmluZSBBQ1BJX1JERVNDX1RZUEVfTUVNT1JZXzMyICAgICAgICAgICAgICAgMHg4NQorI2RlZmluZSBBQ1BJX1JERVNDX1RZUEVfRklYRURfTUVNT1JZXzMyICAgICAgICAgMHg4NgorI2RlZmluZSBBQ1BJX1JERVNDX1RZUEVfRFdPUkRfQUREUkVTU19TUEFDRSAgICAgMHg4NworI2RlZmluZSBBQ1BJX1JERVNDX1RZUEVfV09SRF9BRERSRVNTX1NQQUNFICAgICAgMHg4OAorI2RlZmluZSBBQ1BJX1JERVNDX1RZUEVfRVhURU5ERURfWFJVUFQgICAgICAgICAgMHg4OQorI2RlZmluZSBBQ1BJX1JERVNDX1RZUEVfUVdPUkRfQUREUkVTU19TUEFDRSAgICAgMHg4QQorI2RlZmluZSBBQ1BJX1JERVNDX1RZUEVfRVhURU5ERURfQUREUkVTU19TUEFDRSAgMHg4QgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIE1pc2NlbGxhbmVvdXMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBBQ1BJX0FTQ0lJX1pFUk8gICAgICAgICAgICAgICAgICAgICAgMHgzMAorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIERlYnVnZ2VyCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0cnVjdCBhY3BpX2RiX21ldGhvZF9pbmZvCit7CisJYWNwaV9oYW5kbGUgICAgICAgICAgICAgICAgICAgICB0aHJlYWRfZ2F0ZTsKKwljaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuYW1lOworCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiphcmdzOworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3M7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1fbG9vcHM7CisJY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRobmFtZVsxMjhdOworfTsKKworc3RydWN0IGFjcGlfaW50ZWdyaXR5X2luZm8KK3sKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZXM7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdHM7Cit9OworCisKKyNkZWZpbmUgQUNQSV9EQl9SRURJUkVDVEFCTEVfT1VUUFVUICAweDAxCisjZGVmaW5lIEFDUElfREJfQ09OU09MRV9PVVRQVVQgICAgICAgMHgwMgorI2RlZmluZSBBQ1BJX0RCX0RVUExJQ0FURV9PVVRQVVQgICAgIDB4MDMKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBEZWJ1ZworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdHJ1Y3QgYWNwaV9kZWJ1Z19wcmludF9pbmZvCit7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRfaWQ7CisJY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcHJvY19uYW1lOworCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm1vZHVsZV9uYW1lOworfTsKKworCisvKiBFbnRyeSBmb3IgYSBtZW1vcnkgYWxsb2NhdGlvbiAoZGVidWcgb25seSkgKi8KKworI2RlZmluZSBBQ1BJX01FTV9NQUxMT0MgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBQ1BJX01FTV9DQUxMT0MgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBBQ1BJX01BWF9NT0RVTEVfTkFNRSAgICAgICAgICAgICAgICAgMTYKKworI2RlZmluZSBBQ1BJX0NPTU1PTl9ERUJVR19NRU1fSEVBREVSIFwKKwlzdHJ1Y3QgYWNwaV9kZWJ1Z19tZW1fYmxvY2sgICAgICAgICAqcHJldmlvdXM7IFwKKwlzdHJ1Y3QgYWNwaV9kZWJ1Z19tZW1fYmxvY2sgICAgICAgICAqbmV4dDsgXAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU7IFwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQ7IFwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lOyBcCisJY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlW0FDUElfTUFYX01PRFVMRV9OQU1FXTsgXAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG9jX3R5cGU7CisKK3N0cnVjdCBhY3BpX2RlYnVnX21lbV9oZWFkZXIKK3sKKwlBQ1BJX0NPTU1PTl9ERUJVR19NRU1fSEVBREVSCit9OworCitzdHJ1Y3QgYWNwaV9kZWJ1Z19tZW1fYmxvY2sKK3sKKwlBQ1BJX0NPTU1PTl9ERUJVR19NRU1fSEVBREVSCisJdTY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcl9zcGFjZTsKK307CisKKworI2RlZmluZSBBQ1BJX01FTV9MSVNUX0dMT0JBTCAgICAgICAgICAgIDAKKyNkZWZpbmUgQUNQSV9NRU1fTElTVF9OU05PREUgICAgICAgICAgICAxCisKKyNkZWZpbmUgQUNQSV9NRU1fTElTVF9GSVJTVF9DQUNIRV9MSVNUICAyCisjZGVmaW5lIEFDUElfTUVNX0xJU1RfU1RBVEUgICAgICAgICAgICAgMgorI2RlZmluZSBBQ1BJX01FTV9MSVNUX1BTTk9ERSAgICAgICAgICAgIDMKKyNkZWZpbmUgQUNQSV9NRU1fTElTVF9QU05PREVfRVhUICAgICAgICA0CisjZGVmaW5lIEFDUElfTUVNX0xJU1RfT1BFUkFORCAgICAgICAgICAgNQorI2RlZmluZSBBQ1BJX01FTV9MSVNUX1dBTEsgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQUNQSV9NRU1fTElTVF9NQVggICAgICAgICAgICAgICA2CisjZGVmaW5lIEFDUElfTlVNX01FTV9MSVNUUyAgICAgICAgICAgICAgNworCisKK3N0cnVjdCBhY3BpX21lbW9yeV9saXN0Cit7CisJdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmxpc3RfaGVhZDsKKwl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rX29mZnNldDsKKwl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfY2FjaGVfZGVwdGg7CisJdTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVfZGVwdGg7CisJdTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0X3NpemU7CisKKyNpZmRlZiBBQ1BJX0RCR19UUkFDS19BTExPQ0FUSU9OUworCisJLyogU3RhdGlzdGljcyBmb3IgZGVidWcgbWVtb3J5IHRyYWNraW5nIG9ubHkgKi8KKworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsX2FsbG9jYXRlZDsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbF9mcmVlZDsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50X3RvdGFsX3NpemU7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVfcmVxdWVzdHM7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVfaGl0czsKKwljaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbGlzdF9uYW1lOworI2VuZGlmCit9OworCisKKyNlbmRpZiAvKiBfX0FDTE9DQUxfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWNtYWNyb3MuaCBiL2luY2x1ZGUvYWNwaS9hY21hY3Jvcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjYWNlZDEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FjcGkvYWNtYWNyb3MuaApAQCAtMCwwICsxLDY3OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIE5hbWU6IGFjbWFjcm9zLmggLSBDIG1hY3JvcyBmb3IgdGhlIGVudGlyZSBzdWJzeXN0ZW0uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwNSwgUi4gQnlyb24gTW9vcmUKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciwKKyAqICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIGF0IG1pbmltdW0gYSBkaXNjbGFpbWVyCisgKiAgICBzdWJzdGFudGlhbGx5IHNpbWlsYXIgdG8gdGhlICJOTyBXQVJSQU5UWSIgZGlzY2xhaW1lciBiZWxvdworICogICAgKCJEaXNjbGFpbWVyIikgYW5kIGFueSByZWRpc3RyaWJ1dGlvbiBtdXN0IGJlIGNvbmRpdGlvbmVkIHVwb24KKyAqICAgIGluY2x1ZGluZyBhIHN1YnN0YW50aWFsbHkgc2ltaWxhciBEaXNjbGFpbWVyIHJlcXVpcmVtZW50IGZvciBmdXJ0aGVyCisgKiAgICBiaW5hcnkgcmVkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lcyBvZiB0aGUgYWJvdmUtbGlzdGVkIGNvcHlyaWdodCBob2xkZXJzIG5vciB0aGUgbmFtZXMKKyAqICAgIG9mIGFueSBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGlzIHNvZnR3YXJlIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoIkdQTCIpIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogTk8gV0FSUkFOVFkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HCisgKiBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKyAqLworCisjaWZuZGVmIF9fQUNNQUNST1NfSF9fCisjZGVmaW5lIF9fQUNNQUNST1NfSF9fCisKKworLyoKKyAqIERhdGEgbWFuaXB1bGF0aW9uIG1hY3JvcworICovCisjZGVmaW5lIEFDUElfTE9XT1JEKGwpICAgICAgICAgICAgICAgICAgKCh1MTYpKHUzMikobCkpCisjZGVmaW5lIEFDUElfSElXT1JEKGwpICAgICAgICAgICAgICAgICAgKCh1MTYpKCgoKHUzMikobCkpID4+IDE2KSAmIDB4RkZGRikpCisjZGVmaW5lIEFDUElfTE9CWVRFKGwpICAgICAgICAgICAgICAgICAgKCh1OCkodTE2KShsKSkKKyNkZWZpbmUgQUNQSV9ISUJZVEUobCkgICAgICAgICAgICAgICAgICAoKHU4KSgoKCh1MTYpKGwpKSA+PiA4KSAmIDB4RkYpKQorCisjZGVmaW5lIEFDUElfU0VUX0JJVCh0YXJnZXQsYml0KSAgICAgICAgKCh0YXJnZXQpIHw9IChiaXQpKQorI2RlZmluZSBBQ1BJX0NMRUFSX0JJVCh0YXJnZXQsYml0KSAgICAgICgodGFyZ2V0KSAmPSB+KGJpdCkpCisjZGVmaW5lIEFDUElfTUlOKGEsYikgICAgICAgICAgICAgICAgICAgKCgoYSk8KGIpKT8oYSk6KGIpKQorCisKKyNpZiBBQ1BJX01BQ0hJTkVfV0lEVEggPT0gMTYKKworLyoKKyAqIEZvciAxNi1iaXQgYWRkcmVzc2VzLCB3ZSBoYXZlIHRvIGFzc3VtZSB0aGF0IHRoZSB1cHBlciAzMiBiaXRzCisgKiBhcmUgemVyby4KKyAqLworI2RlZmluZSBBQ1BJX0xPRFdPUkQobCkgICAgICAgICAgICAgICAgICgodTMyKShsKSkKKyNkZWZpbmUgQUNQSV9ISURXT1JEKGwpICAgICAgICAgICAgICAgICAoKHUzMikoMCkpCisKKyNkZWZpbmUgQUNQSV9HRVRfQUREUkVTUyhhKSAgICAgICAgICAgICAoKGEpLmxvKQorI2RlZmluZSBBQ1BJX1NUT1JFX0FERFJFU1MoYSxiKSAgICAgICAgIHsoYSkuaGk9MDsoYSkubG89KHUzMikoYik7fQorI2RlZmluZSBBQ1BJX1ZBTElEX0FERFJFU1MoYSkgICAgICAgICAgICgoYSkuaGkgfCAoYSkubG8pCisKKyNlbHNlCisjaWZkZWYgQUNQSV9OT19JTlRFR0VSNjRfU1VQUE9SVAorLyoKKyAqIGFjcGlfaW50ZWdlciBpcyAzMi1iaXRzLCBubyA2NC1iaXQgc3VwcG9ydCBvbiB0aGlzIHBsYXRmb3JtCisgKi8KKyNkZWZpbmUgQUNQSV9MT0RXT1JEKGwpICAgICAgICAgICAgICAgICAoKHUzMikobCkpCisjZGVmaW5lIEFDUElfSElEV09SRChsKSAgICAgICAgICAgICAgICAgKCh1MzIpKDApKQorCisjZGVmaW5lIEFDUElfR0VUX0FERFJFU1MoYSkgICAgICAgICAgICAgKGEpCisjZGVmaW5lIEFDUElfU1RPUkVfQUREUkVTUyhhLGIpICAgICAgICAgKChhKT0oYikpCisjZGVmaW5lIEFDUElfVkFMSURfQUREUkVTUyhhKSAgICAgICAgICAgKGEpCisKKyNlbHNlCisKKy8qCisgKiBGdWxsIDY0LWJpdCBhZGRyZXNzL2ludGVnZXIgb24gYm90aCAzMi1iaXQgYW5kIDY0LWJpdCBwbGF0Zm9ybXMKKyAqLworI2RlZmluZSBBQ1BJX0xPRFdPUkQobCkgICAgICAgICAgICAgICAgICgodTMyKSh1NjQpKGwpKQorI2RlZmluZSBBQ1BJX0hJRFdPUkQobCkgICAgICAgICAgICAgICAgICgodTMyKSgoKCooc3RydWN0IHVpbnQ2NF9zdHJ1Y3QgKikodm9pZCAqKSgmbCkpKS5oaSkpCisKKyNkZWZpbmUgQUNQSV9HRVRfQUREUkVTUyhhKSAgICAgICAgICAgICAoYSkKKyNkZWZpbmUgQUNQSV9TVE9SRV9BRERSRVNTKGEsYikgICAgICAgICAoKGEpPShhY3BpX3BoeXNpY2FsX2FkZHJlc3MpKGIpKQorI2RlZmluZSBBQ1BJX1ZBTElEX0FERFJFU1MoYSkgICAgICAgICAgIChhKQorI2VuZGlmCisjZW5kaWYKKworLyoKKyAqIHByaW50ZigpIGZvcm1hdCBoZWxwZXJzCisgKi8KKworLyogU3BsaXQgNjQtYml0IGludGVnZXIgaW50byB0d28gMzItYml0IHZhbHVlcy4gVXNlIHdpdGggJTguOFglOC44WCAqLworCisjZGVmaW5lIEFDUElfRk9STUFUX1VJTlQ2NChpKSAgICAgICAgICAgQUNQSV9ISURXT1JEKGkpLEFDUElfTE9EV09SRChpKQorCisvKgorICogRXh0cmFjdCBhIGJ5dGUgb2YgZGF0YSB1c2luZyBhIHBvaW50ZXIuICBBbnkgbW9yZSB0aGFuIGEgYnl0ZSBhbmQgd2UKKyAqIGdldCBpbnRvIHBvdGVudGlhbCBhbGlnbWVudCBpc3N1ZXMgLS0gc2VlIHRoZSBTVE9SRSBtYWNyb3MgYmVsb3cKKyAqLworI2RlZmluZSBBQ1BJX0dFVDgoYWRkcikgICAgICAgICAgICAgICAgICgqKHU4KikoYWRkcikpCisKKy8qIFBvaW50ZXIgYXJpdGhtZXRpYyAqLworCisjZGVmaW5lIEFDUElfUFRSX0FERCh0LGEsYikgICAgICAgICAgICAgKHQgKikgKHZvaWQgKikoKGNoYXIgKikoYSkgKyAoYWNwaV9uYXRpdmVfdWludCkoYikpCisjZGVmaW5lIEFDUElfUFRSX0RJRkYoYSxiKSAgICAgICAgICAgICAgKGFjcGlfbmF0aXZlX3VpbnQpICgoY2hhciAqKShhKSAtIChjaGFyICopKGIpKQorCisvKiBQb2ludGVyL0ludGVnZXIgdHlwZSBjb252ZXJzaW9ucyAqLworCisjZGVmaW5lIEFDUElfVE9fUE9JTlRFUihpKSAgICAgICAgICAgICAgQUNQSV9QVFJfQUREICh2b2lkLCAodm9pZCAqKSBOVUxMLChhY3BpX25hdGl2ZV91aW50KWkpCisjZGVmaW5lIEFDUElfVE9fSU5URUdFUihwKSAgICAgICAgICAgICAgQUNQSV9QVFJfRElGRiAocCwodm9pZCAqKSBOVUxMKQorI2RlZmluZSBBQ1BJX09GRlNFVChkLGYpICAgICAgICAgICAgICAgIChhY3BpX3NpemUpIEFDUElfUFRSX0RJRkYgKCYoKChkICopMCktPmYpLCh2b2lkICopIE5VTEwpCisjZGVmaW5lIEFDUElfRkFEVF9PRkZTRVQoZikgICAgICAgICAgICAgQUNQSV9PRkZTRVQgKEZBRFRfREVTQ1JJUFRPUiwgZikKKworI2RlZmluZSBBQ1BJX0NBU1RfUFRSKHQsIHApICAgICAgICAgICAgICgodCAqKSh2b2lkICopKHApKQorI2RlZmluZSBBQ1BJX0NBU1RfSU5ESVJFQ1RfUFRSKHQsIHApICAgICgodCAqKikodm9pZCAqKShwKSkKKworI2lmIEFDUElfTUFDSElORV9XSURUSCA9PSAxNgorI2RlZmluZSBBQ1BJX1NUT1JFX1BPSU5URVIoZCxzKSAgICAgICAgIEFDUElfTU9WRV8zMl9UT18zMihkLHMpCisjZGVmaW5lIEFDUElfUEhZU0FERFJfVE9fUFRSKGkpICAgICAgICAgKHZvaWQgKikoaSkKKyNkZWZpbmUgQUNQSV9QVFJfVE9fUEhZU0FERFIoaSkgICAgICAgICAodTMyKSAoY2hhciAqKShpKQorI2Vsc2UKKyNkZWZpbmUgQUNQSV9QSFlTQUREUl9UT19QVFIoaSkgICAgICAgICBBQ1BJX1RPX1BPSU5URVIoaSkKKyNkZWZpbmUgQUNQSV9QVFJfVE9fUEhZU0FERFIoaSkgICAgICAgICBBQ1BJX1RPX0lOVEVHRVIoaSkKKyNlbmRpZgorCisvKgorICogTWFjcm9zIGZvciBtb3ZpbmcgZGF0YSBhcm91bmQgdG8vZnJvbSBidWZmZXJzIHRoYXQgYXJlIHBvc3NpYmx5IHVuYWxpZ25lZC4KKyAqIElmIHRoZSBoYXJkd2FyZSBzdXBwb3J0cyB0aGUgdHJhbnNmZXIgb2YgdW5hbGlnbmVkIGRhdGEsIGp1c3QgZG8gdGhlIHN0b3JlLgorICogT3RoZXJ3aXNlLCB3ZSBoYXZlIHRvIG1vdmUgb25lIGJ5dGUgYXQgYSB0aW1lLgorICovCisjaWZkZWYgQUNQSV9CSUdfRU5ESUFOCisvKgorICogTWFjcm9zIGZvciBiaWctZW5kaWFuIG1hY2hpbmVzCisgKi8KKworLyogVGhpcyBtYWNybyBzZXRzIGEgYnVmZmVyIGluZGV4LCBzdGFydGluZyBmcm9tIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciAqLworCisjZGVmaW5lIEFDUElfQlVGRkVSX0lOREVYKGJ1Zl9sZW4sYnVmX29mZnNldCxieXRlX2dyYW4pICgoYnVmX2xlbikgLSAoKChidWZfb2Zmc2V0KSsxKSAqIChieXRlX2dyYW4pKSkKKworLyogVGhlc2UgbWFjcm9zIHJldmVyc2UgdGhlIGJ5dGVzIGR1cmluZyB0aGUgbW92ZSwgY29udmVydGluZyBsaXR0bGUtZW5kaWFuIHRvIGJpZyBlbmRpYW4gKi8KKworCSAvKiBCaWcgRW5kaWFuICAgICAgPD09ICAgICAgICBMaXR0bGUgRW5kaWFuICovCisJIC8qICBIaS4uLkxvICAgICAgICAgICAgICAgICAgICAgTG8uLi5IaSAgICAgKi8KKy8qIDE2LWJpdCBzb3VyY2UsIDE2LzMyLzY0IGRlc3RpbmF0aW9uICovCisKKyNkZWZpbmUgQUNQSV9NT1ZFXzE2X1RPXzE2KGQscykgICAgICAgICB7KCggIHU4ICopKHZvaWQgKikoZCkpWzBdID0gKCh1OCAqKSh2b2lkICopKHMpKVsxXTtcCisJCQkgICgoICB1OCAqKSh2b2lkICopKGQpKVsxXSA9ICgodTggKikodm9pZCAqKShzKSlbMF07fQorCisjZGVmaW5lIEFDUElfTU9WRV8xNl9UT18zMihkLHMpICAgICAgICAgeygqKHUzMiAqKSh2b2lkICopKGQpKT0wO1wKKwkJCQkJICAoKHU4ICopKHZvaWQgKikoZCkpWzJdID0gKCh1OCAqKSh2b2lkICopKHMpKVsxXTtcCisJCQkJCSAgKCh1OCAqKSh2b2lkICopKGQpKVszXSA9ICgodTggKikodm9pZCAqKShzKSlbMF07fQorCisjZGVmaW5lIEFDUElfTU9WRV8xNl9UT182NChkLHMpICAgICAgICAgeygqKHU2NCAqKSh2b2lkICopKGQpKT0wO1wKKwkJCQkJCQkgICAoKHU4ICopKHZvaWQgKikoZCkpWzZdID0gKCh1OCAqKSh2b2lkICopKHMpKVsxXTtcCisJCQkJCQkJICAgKCh1OCAqKSh2b2lkICopKGQpKVs3XSA9ICgodTggKikodm9pZCAqKShzKSlbMF07fQorCisvKiAzMi1iaXQgc291cmNlLCAxNi8zMi82NCBkZXN0aW5hdGlvbiAqLworCisjZGVmaW5lIEFDUElfTU9WRV8zMl9UT18xNihkLHMpICAgICAgICAgQUNQSV9NT1ZFXzE2X1RPXzE2KGQscykgICAgLyogVHJ1bmNhdGUgdG8gMTYgKi8KKworI2RlZmluZSBBQ1BJX01PVkVfMzJfVE9fMzIoZCxzKSAgICAgICAgIHsoKCAgdTggKikodm9pZCAqKShkKSlbMF0gPSAoKHU4ICopKHZvaWQgKikocykpWzNdO1wKKwkJCQkJCQkJCSAgKCggIHU4ICopKHZvaWQgKikoZCkpWzFdID0gKCh1OCAqKSh2b2lkICopKHMpKVsyXTtcCisJCQkJCQkJCQkgICgoICB1OCAqKSh2b2lkICopKGQpKVsyXSA9ICgodTggKikodm9pZCAqKShzKSlbMV07XAorCQkJCQkJCQkJICAoKCAgdTggKikodm9pZCAqKShkKSlbM10gPSAoKHU4ICopKHZvaWQgKikocykpWzBdO30KKworI2RlZmluZSBBQ1BJX01PVkVfMzJfVE9fNjQoZCxzKSAgICAgICAgIHsoKih1NjQgKikodm9pZCAqKShkKSk9MDtcCisJCQkJCQkJCQkJICAgKCh1OCAqKSh2b2lkICopKGQpKVs0XSA9ICgodTggKikodm9pZCAqKShzKSlbM107XAorCQkJCQkJCQkJCSAgICgodTggKikodm9pZCAqKShkKSlbNV0gPSAoKHU4ICopKHZvaWQgKikocykpWzJdO1wKKwkJCQkJCQkJCQkgICAoKHU4ICopKHZvaWQgKikoZCkpWzZdID0gKCh1OCAqKSh2b2lkICopKHMpKVsxXTtcCisJCQkJCQkJCQkJICAgKCh1OCAqKSh2b2lkICopKGQpKVs3XSA9ICgodTggKikodm9pZCAqKShzKSlbMF07fQorCisvKiA2NC1iaXQgc291cmNlLCAxNi8zMi82NCBkZXN0aW5hdGlvbiAqLworCisjZGVmaW5lIEFDUElfTU9WRV82NF9UT18xNihkLHMpICAgICAgICAgQUNQSV9NT1ZFXzE2X1RPXzE2KGQscykgICAgLyogVHJ1bmNhdGUgdG8gMTYgKi8KKworI2RlZmluZSBBQ1BJX01PVkVfNjRfVE9fMzIoZCxzKSAgICAgICAgIEFDUElfTU9WRV8zMl9UT18zMihkLHMpICAgIC8qIFRydW5jYXRlIHRvIDMyICovCisKKyNkZWZpbmUgQUNQSV9NT1ZFXzY0X1RPXzY0KGQscykgICAgICAgICB7KCggIHU4ICopKHZvaWQgKikoZCkpWzBdID0gKCh1OCAqKSh2b2lkICopKHMpKVs3XTtcCisJCQkJCQkJCQkJICgoICB1OCAqKSh2b2lkICopKGQpKVsxXSA9ICgodTggKikodm9pZCAqKShzKSlbNl07XAorCQkJCQkJCQkJCSAoKCAgdTggKikodm9pZCAqKShkKSlbMl0gPSAoKHU4ICopKHZvaWQgKikocykpWzVdO1wKKwkJCQkJCQkJCQkgKCggIHU4ICopKHZvaWQgKikoZCkpWzNdID0gKCh1OCAqKSh2b2lkICopKHMpKVs0XTtcCisJCQkJCQkJCQkJICgoICB1OCAqKSh2b2lkICopKGQpKVs0XSA9ICgodTggKikodm9pZCAqKShzKSlbM107XAorCQkJCQkJCQkJCSAoKCAgdTggKikodm9pZCAqKShkKSlbNV0gPSAoKHU4ICopKHZvaWQgKikocykpWzJdO1wKKwkJCQkJCQkJCQkgKCggIHU4ICopKHZvaWQgKikoZCkpWzZdID0gKCh1OCAqKSh2b2lkICopKHMpKVsxXTtcCisJCQkJCQkJCQkJICgoICB1OCAqKSh2b2lkICopKGQpKVs3XSA9ICgodTggKikodm9pZCAqKShzKSlbMF07fQorI2Vsc2UKKy8qCisgKiBNYWNyb3MgZm9yIGxpdHRsZS1lbmRpYW4gbWFjaGluZXMKKyAqLworCisvKiBUaGlzIG1hY3JvIHNldHMgYSBidWZmZXIgaW5kZXgsIHN0YXJ0aW5nIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgYnVmZmVyICovCisKKyNkZWZpbmUgQUNQSV9CVUZGRVJfSU5ERVgoYnVmX2xlbixidWZfb2Zmc2V0LGJ5dGVfZ3JhbikgKGJ1Zl9vZmZzZXQpCisKKyNpZmRlZiBBQ1BJX01JU0FMSUdORURfVFJBTlNGRVJTCisKKy8qIFRoZSBoYXJkd2FyZSBzdXBwb3J0cyB1bmFsaWduZWQgdHJhbnNmZXJzLCBqdXN0IGRvIHRoZSBsaXR0bGUtZW5kaWFuIG1vdmUgKi8KKworI2lmIEFDUElfTUFDSElORV9XSURUSCA9PSAxNgorCisvKiBObyA2NC1iaXQgaW50ZWdlcnMgKi8KKy8qIDE2LWJpdCBzb3VyY2UsIDE2LzMyLzY0IGRlc3RpbmF0aW9uICovCisKKyNkZWZpbmUgQUNQSV9NT1ZFXzE2X1RPXzE2KGQscykgICAgICAgICAqKHUxNiAqKSh2b2lkICopKGQpID0gKih1MTYgKikodm9pZCAqKShzKQorI2RlZmluZSBBQ1BJX01PVkVfMTZfVE9fMzIoZCxzKSAgICAgICAgICoodTMyICopKHZvaWQgKikoZCkgPSAqKHUxNiAqKSh2b2lkICopKHMpCisjZGVmaW5lIEFDUElfTU9WRV8xNl9UT182NChkLHMpICAgICAgICAgQUNQSV9NT1ZFXzE2X1RPXzMyKGQscykKKworLyogMzItYml0IHNvdXJjZSwgMTYvMzIvNjQgZGVzdGluYXRpb24gKi8KKworI2RlZmluZSBBQ1BJX01PVkVfMzJfVE9fMTYoZCxzKSAgICAgICAgIEFDUElfTU9WRV8xNl9UT18xNihkLHMpICAgIC8qIFRydW5jYXRlIHRvIDE2ICovCisjZGVmaW5lIEFDUElfTU9WRV8zMl9UT18zMihkLHMpICAgICAgICAgKih1MzIgKikodm9pZCAqKShkKSA9ICoodTMyICopKHZvaWQgKikocykKKyNkZWZpbmUgQUNQSV9NT1ZFXzMyX1RPXzY0KGQscykgICAgICAgICBBQ1BJX01PVkVfMzJfVE9fMzIoZCxzKQorCisvKiA2NC1iaXQgc291cmNlLCAxNi8zMi82NCBkZXN0aW5hdGlvbiAqLworCisjZGVmaW5lIEFDUElfTU9WRV82NF9UT18xNihkLHMpICAgICAgICAgQUNQSV9NT1ZFXzE2X1RPXzE2KGQscykgICAgLyogVHJ1bmNhdGUgdG8gMTYgKi8KKyNkZWZpbmUgQUNQSV9NT1ZFXzY0X1RPXzMyKGQscykgICAgICAgICBBQ1BJX01PVkVfMzJfVE9fMzIoZCxzKSAgICAvKiBUcnVuY2F0ZSB0byAzMiAqLworI2RlZmluZSBBQ1BJX01PVkVfNjRfVE9fNjQoZCxzKSAgICAgICAgIEFDUElfTU9WRV8zMl9UT18zMihkLHMpCisKKyNlbHNlCisvKiAxNi1iaXQgc291cmNlLCAxNi8zMi82NCBkZXN0aW5hdGlvbiAqLworCisjZGVmaW5lIEFDUElfTU9WRV8xNl9UT18xNihkLHMpICAgICAgICAgKih1MTYgKikodm9pZCAqKShkKSA9ICoodTE2ICopKHZvaWQgKikocykKKyNkZWZpbmUgQUNQSV9NT1ZFXzE2X1RPXzMyKGQscykgICAgICAgICAqKHUzMiAqKSh2b2lkICopKGQpID0gKih1MTYgKikodm9pZCAqKShzKQorI2RlZmluZSBBQ1BJX01PVkVfMTZfVE9fNjQoZCxzKSAgICAgICAgICoodTY0ICopKHZvaWQgKikoZCkgPSAqKHUxNiAqKSh2b2lkICopKHMpCisKKy8qIDMyLWJpdCBzb3VyY2UsIDE2LzMyLzY0IGRlc3RpbmF0aW9uICovCisKKyNkZWZpbmUgQUNQSV9NT1ZFXzMyX1RPXzE2KGQscykgICAgICAgICBBQ1BJX01PVkVfMTZfVE9fMTYoZCxzKSAgICAvKiBUcnVuY2F0ZSB0byAxNiAqLworI2RlZmluZSBBQ1BJX01PVkVfMzJfVE9fMzIoZCxzKSAgICAgICAgICoodTMyICopKHZvaWQgKikoZCkgPSAqKHUzMiAqKSh2b2lkICopKHMpCisjZGVmaW5lIEFDUElfTU9WRV8zMl9UT182NChkLHMpICAgICAgICAgKih1NjQgKikodm9pZCAqKShkKSA9ICoodTMyICopKHZvaWQgKikocykKKworLyogNjQtYml0IHNvdXJjZSwgMTYvMzIvNjQgZGVzdGluYXRpb24gKi8KKworI2RlZmluZSBBQ1BJX01PVkVfNjRfVE9fMTYoZCxzKSAgICAgICAgIEFDUElfTU9WRV8xNl9UT18xNihkLHMpICAgIC8qIFRydW5jYXRlIHRvIDE2ICovCisjZGVmaW5lIEFDUElfTU9WRV82NF9UT18zMihkLHMpICAgICAgICAgQUNQSV9NT1ZFXzMyX1RPXzMyKGQscykgICAgLyogVHJ1bmNhdGUgdG8gMzIgKi8KKyNkZWZpbmUgQUNQSV9NT1ZFXzY0X1RPXzY0KGQscykgICAgICAgICAqKHU2NCAqKSh2b2lkICopKGQpID0gKih1NjQgKikodm9pZCAqKShzKQorI2VuZGlmCisKKyNlbHNlCisvKgorICogVGhlIGhhcmR3YXJlIGRvZXMgbm90IHN1cHBvcnQgdW5hbGlnbmVkIHRyYW5zZmVycy4gIFdlIG11c3QgbW92ZSB0aGUKKyAqIGRhdGEgb25lIGJ5dGUgYXQgYSB0aW1lLiAgVGhlc2UgbWFjcm9zIHdvcmsgd2hldGhlciB0aGUgc291cmNlIG9yCisgKiB0aGUgZGVzdGluYXRpb24gKG9yIGJvdGgpIGlzL2FyZSB1bmFsaWduZWQuICAoTGl0dGxlLWVuZGlhbiBtb3ZlKQorICovCisKKy8qIDE2LWJpdCBzb3VyY2UsIDE2LzMyLzY0IGRlc3RpbmF0aW9uICovCisKKyNkZWZpbmUgQUNQSV9NT1ZFXzE2X1RPXzE2KGQscykgICAgICAgICB7KCggIHU4ICopKHZvaWQgKikoZCkpWzBdID0gKCh1OCAqKSh2b2lkICopKHMpKVswXTtcCisJCQkJCQkJCQkJICgoICB1OCAqKSh2b2lkICopKGQpKVsxXSA9ICgodTggKikodm9pZCAqKShzKSlbMV07fQorCisjZGVmaW5lIEFDUElfTU9WRV8xNl9UT18zMihkLHMpICAgICAgICAgeygqKHUzMiAqKSh2b2lkICopKGQpKSA9IDA7IEFDUElfTU9WRV8xNl9UT18xNihkLHMpO30KKyNkZWZpbmUgQUNQSV9NT1ZFXzE2X1RPXzY0KGQscykgICAgICAgICB7KCoodTY0ICopKHZvaWQgKikoZCkpID0gMDsgQUNQSV9NT1ZFXzE2X1RPXzE2KGQscyk7fQorCisvKiAzMi1iaXQgc291cmNlLCAxNi8zMi82NCBkZXN0aW5hdGlvbiAqLworCisjZGVmaW5lIEFDUElfTU9WRV8zMl9UT18xNihkLHMpICAgICAgICAgQUNQSV9NT1ZFXzE2X1RPXzE2KGQscykgICAgLyogVHJ1bmNhdGUgdG8gMTYgKi8KKworI2RlZmluZSBBQ1BJX01PVkVfMzJfVE9fMzIoZCxzKSAgICAgICAgIHsoKCAgdTggKikodm9pZCAqKShkKSlbMF0gPSAoKHU4ICopKHZvaWQgKikocykpWzBdO1wKKwkJCQkJCQkJCQkgKCggIHU4ICopKHZvaWQgKikoZCkpWzFdID0gKCh1OCAqKSh2b2lkICopKHMpKVsxXTtcCisJCQkJCQkJCQkJICgoICB1OCAqKSh2b2lkICopKGQpKVsyXSA9ICgodTggKikodm9pZCAqKShzKSlbMl07XAorCQkJCQkJCQkJCSAoKCAgdTggKikodm9pZCAqKShkKSlbM10gPSAoKHU4ICopKHZvaWQgKikocykpWzNdO30KKworI2RlZmluZSBBQ1BJX01PVkVfMzJfVE9fNjQoZCxzKSAgICAgICAgIHsoKih1NjQgKikodm9pZCAqKShkKSkgPSAwOyBBQ1BJX01PVkVfMzJfVE9fMzIoZCxzKTt9CisKKy8qIDY0LWJpdCBzb3VyY2UsIDE2LzMyLzY0IGRlc3RpbmF0aW9uICovCisKKyNkZWZpbmUgQUNQSV9NT1ZFXzY0X1RPXzE2KGQscykgICAgICAgICBBQ1BJX01PVkVfMTZfVE9fMTYoZCxzKSAgICAvKiBUcnVuY2F0ZSB0byAxNiAqLworI2RlZmluZSBBQ1BJX01PVkVfNjRfVE9fMzIoZCxzKSAgICAgICAgIEFDUElfTU9WRV8zMl9UT18zMihkLHMpICAgIC8qIFRydW5jYXRlIHRvIDMyICovCisjZGVmaW5lIEFDUElfTU9WRV82NF9UT182NChkLHMpICAgICAgICAgeygoICB1OCAqKSh2b2lkICopKGQpKVswXSA9ICgodTggKikodm9pZCAqKShzKSlbMF07XAorCQkJCQkJCQkJCSAoKCAgdTggKikodm9pZCAqKShkKSlbMV0gPSAoKHU4ICopKHZvaWQgKikocykpWzFdO1wKKwkJCQkJCQkJCQkgKCggIHU4ICopKHZvaWQgKikoZCkpWzJdID0gKCh1OCAqKSh2b2lkICopKHMpKVsyXTtcCisJCQkJCQkJCQkJICgoICB1OCAqKSh2b2lkICopKGQpKVszXSA9ICgodTggKikodm9pZCAqKShzKSlbM107XAorCQkJCQkJCQkJCSAoKCAgdTggKikodm9pZCAqKShkKSlbNF0gPSAoKHU4ICopKHZvaWQgKikocykpWzRdO1wKKwkJCQkJCQkJCQkgKCggIHU4ICopKHZvaWQgKikoZCkpWzVdID0gKCh1OCAqKSh2b2lkICopKHMpKVs1XTtcCisJCQkJCQkJCQkJICgoICB1OCAqKSh2b2lkICopKGQpKVs2XSA9ICgodTggKikodm9pZCAqKShzKSlbNl07XAorCQkJCQkJCQkJCSAoKCAgdTggKikodm9pZCAqKShkKSlbN10gPSAoKHU4ICopKHZvaWQgKikocykpWzddO30KKyNlbmRpZgorI2VuZGlmCisKKy8qIE1hY3JvcyBiYXNlZCBvbiBtYWNoaW5lIGludGVnZXIgd2lkdGggKi8KKworI2lmIEFDUElfTUFDSElORV9XSURUSCA9PSAxNgorI2RlZmluZSBBQ1BJX01PVkVfU0laRV9UT18xNihkLHMpICAgICAgIEFDUElfTU9WRV8xNl9UT18xNihkLHMpCisKKyNlbGlmIEFDUElfTUFDSElORV9XSURUSCA9PSAzMgorI2RlZmluZSBBQ1BJX01PVkVfU0laRV9UT18xNihkLHMpICAgICAgIEFDUElfTU9WRV8zMl9UT18xNihkLHMpCisKKyNlbGlmIEFDUElfTUFDSElORV9XSURUSCA9PSA2NAorI2RlZmluZSBBQ1BJX01PVkVfU0laRV9UT18xNihkLHMpICAgICAgIEFDUElfTU9WRV82NF9UT18xNihkLHMpCisKKyNlbHNlCisjZXJyb3IgdW5rbm93biBBQ1BJX01BQ0hJTkVfV0lEVEgKKyNlbmRpZgorCisKKy8qCisgKiBGYXN0IHBvd2VyLW9mLXR3byBtYXRoIG1hY3JvcyBmb3Igbm9uLW9wdGltaXplZCBjb21waWxlcnMKKyAqLworI2RlZmluZSBfQUNQSV9ESVYodmFsdWUscG93ZXJfb2YyKSAgICAgICgodTMyKSAoKHZhbHVlKSA+PiAocG93ZXJfb2YyKSkpCisjZGVmaW5lIF9BQ1BJX01VTCh2YWx1ZSxwb3dlcl9vZjIpICAgICAgKCh1MzIpICgodmFsdWUpIDw8IChwb3dlcl9vZjIpKSkKKyNkZWZpbmUgX0FDUElfTU9EKHZhbHVlLGRpdmlzb3IpICAgICAgICAoKHUzMikgKCh2YWx1ZSkgJiAoKGRpdmlzb3IpIC0xKSkpCisKKyNkZWZpbmUgQUNQSV9ESVZfMihhKSAgICAgICAgICAgICAgICAgICBfQUNQSV9ESVYoYSwxKQorI2RlZmluZSBBQ1BJX01VTF8yKGEpICAgICAgICAgICAgICAgICAgIF9BQ1BJX01VTChhLDEpCisjZGVmaW5lIEFDUElfTU9EXzIoYSkgICAgICAgICAgICAgICAgICAgX0FDUElfTU9EKGEsMikKKworI2RlZmluZSBBQ1BJX0RJVl80KGEpICAgICAgICAgICAgICAgICAgIF9BQ1BJX0RJVihhLDIpCisjZGVmaW5lIEFDUElfTVVMXzQoYSkgICAgICAgICAgICAgICAgICAgX0FDUElfTVVMKGEsMikKKyNkZWZpbmUgQUNQSV9NT0RfNChhKSAgICAgICAgICAgICAgICAgICBfQUNQSV9NT0QoYSw0KQorCisjZGVmaW5lIEFDUElfRElWXzgoYSkgICAgICAgICAgICAgICAgICAgX0FDUElfRElWKGEsMykKKyNkZWZpbmUgQUNQSV9NVUxfOChhKSAgICAgICAgICAgICAgICAgICBfQUNQSV9NVUwoYSwzKQorI2RlZmluZSBBQ1BJX01PRF84KGEpICAgICAgICAgICAgICAgICAgIF9BQ1BJX01PRChhLDgpCisKKyNkZWZpbmUgQUNQSV9ESVZfMTYoYSkgICAgICAgICAgICAgICAgICBfQUNQSV9ESVYoYSw0KQorI2RlZmluZSBBQ1BJX01VTF8xNihhKSAgICAgICAgICAgICAgICAgIF9BQ1BJX01VTChhLDQpCisjZGVmaW5lIEFDUElfTU9EXzE2KGEpICAgICAgICAgICAgICAgICAgX0FDUElfTU9EKGEsMTYpCisKKworLyoKKyAqIFJvdW5kaW5nIG1hY3JvcyAoUG93ZXIgb2YgdHdvIGJvdW5kYXJpZXMgb25seSkKKyAqLworI2RlZmluZSBBQ1BJX1JPVU5EX0RPV04odmFsdWUsYm91bmRhcnkpICAgICAgKCgoYWNwaV9uYXRpdmVfdWludCkodmFsdWUpKSAmICh+KCgoYWNwaV9uYXRpdmVfdWludCkgYm91bmRhcnkpLTEpKSkKKyNkZWZpbmUgQUNQSV9ST1VORF9VUCh2YWx1ZSxib3VuZGFyeSkgICAgICAgICgoKChhY3BpX25hdGl2ZV91aW50KSh2YWx1ZSkpICsgKCgoYWNwaV9uYXRpdmVfdWludCkgYm91bmRhcnkpLTEpKSAmICh+KCgoYWNwaV9uYXRpdmVfdWludCkgYm91bmRhcnkpLTEpKSkKKworI2RlZmluZSBBQ1BJX1JPVU5EX0RPV05fVE9fMzJfQklUUyhhKSAgICAgICAgQUNQSV9ST1VORF9ET1dOKGEsNCkKKyNkZWZpbmUgQUNQSV9ST1VORF9ET1dOX1RPXzY0X0JJVFMoYSkgICAgICAgIEFDUElfUk9VTkRfRE9XTihhLDgpCisjZGVmaW5lIEFDUElfUk9VTkRfRE9XTl9UT19OQVRJVkVfV09SRChhKSAgICBBQ1BJX1JPVU5EX0RPV04oYSxBTElHTkVEX0FERFJFU1NfQk9VTkRBUlkpCisKKyNkZWZpbmUgQUNQSV9ST1VORF9VUF90b18zMl9iSVRTKGEpICAgICAgICAgIEFDUElfUk9VTkRfVVAoYSw0KQorI2RlZmluZSBBQ1BJX1JPVU5EX1VQX3RvXzY0X2JJVFMoYSkgICAgICAgICAgQUNQSV9ST1VORF9VUChhLDgpCisjZGVmaW5lIEFDUElfUk9VTkRfVVBfVE9fTkFUSVZFX1dPUkQoYSkgICAgICBBQ1BJX1JPVU5EX1VQKGEsQUxJR05FRF9BRERSRVNTX0JPVU5EQVJZKQorCisKKyNkZWZpbmUgQUNQSV9ST1VORF9CSVRTX1VQX1RPX0JZVEVTKGEpICAgICAgIEFDUElfRElWXzgoKGEpICsgNykKKyNkZWZpbmUgQUNQSV9ST1VORF9CSVRTX0RPV05fVE9fQllURVMoYSkgICAgIEFDUElfRElWXzgoKGEpKQorCisjZGVmaW5lIEFDUElfUk9VTkRfVVBfVE9fMUsoYSkgICAgICAgICAgICAgICAoKChhKSArIDEwMjMpID4+IDEwKQorCisvKiBHZW5lcmljIChub24tcG93ZXItb2YtdHdvKSByb3VuZGluZyAqLworCisjZGVmaW5lIEFDUElfUk9VTkRfVVBfVE8odmFsdWUsYm91bmRhcnkpICAgICAoKCh2YWx1ZSkgKyAoKGJvdW5kYXJ5KS0xKSkgLyAoYm91bmRhcnkpKQorCisvKgorICogQml0bWFzayBjcmVhdGlvbgorICogQml0IHBvc2l0aW9ucyBzdGFydCBhdCB6ZXJvLgorICogTUFTS19CSVRTX0FCT1ZFIGNyZWF0ZXMgYSBtYXNrIHN0YXJ0aW5nIEFUIHRoZSBwb3NpdGlvbiBhbmQgYWJvdmUKKyAqIE1BU0tfQklUU19CRUxPVyBjcmVhdGVzIGEgbWFzayBzdGFydGluZyBvbmUgYml0IEJFTE9XIHRoZSBwb3NpdGlvbgorICovCisjZGVmaW5lIEFDUElfTUFTS19CSVRTX0FCT1ZFKHBvc2l0aW9uKSAgICAgICAofigoQUNQSV9JTlRFR0VSX01BWCkgPDwgKCh1MzIpIChwb3NpdGlvbikpKSkKKyNkZWZpbmUgQUNQSV9NQVNLX0JJVFNfQkVMT1cocG9zaXRpb24pICAgICAgICgoQUNQSV9JTlRFR0VSX01BWCkgPDwgKCh1MzIpIChwb3NpdGlvbikpKQorCisjZGVmaW5lIEFDUElfSVNfT0NUQUxfRElHSVQoZCkgICAgICAgICAgICAgICAoKChjaGFyKShkKSA+PSAnMCcpICYmICgoY2hhcikoZCkgPD0gJzcnKSkKKworCisvKiBCaXRmaWVsZHMgd2l0aGluIEFDUEkgcmVnaXN0ZXJzICovCisKKyNkZWZpbmUgQUNQSV9SRUdJU1RFUl9QUkVQQVJFX0JJVFModmFsLCBwb3MsIG1hc2spICAgICAgKCh2YWwgPDwgcG9zKSAmIG1hc2spCisjZGVmaW5lIEFDUElfUkVHSVNURVJfSU5TRVJUX1ZBTFVFKHJlZywgcG9zLCBtYXNrLCB2YWwpICByZWcgPSAocmVnICYgKH4obWFzaykpKSB8IEFDUElfUkVHSVNURVJfUFJFUEFSRV9CSVRTKHZhbCwgcG9zLCBtYXNrKQorCisvKgorICogQW4gc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKiBjYW4gYXBwZWFyIGluIHNvbWUgY29udGV4dHMsCisgKiB3aGVyZSBhIHBvaW50ZXIgdG8gYW4gdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICBjYW4gYWxzbworICogYXBwZWFyLiAgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGRpc3Rpbmd1aXNoIHRoZW0uCisgKgorICogVGhlICJEZXNjcmlwdG9yIiBmaWVsZCBpcyB0aGUgZmlyc3QgZmllbGQgaW4gYm90aCBzdHJ1Y3R1cmVzLgorICovCisjZGVmaW5lIEFDUElfR0VUX0RFU0NSSVBUT1JfVFlQRShkKSAgICAgKCgodW5pb24gYWNwaV9kZXNjcmlwdG9yICopKHZvaWQgKikoZCkpLT5kZXNjcmlwdG9yX2lkKQorI2RlZmluZSBBQ1BJX1NFVF9ERVNDUklQVE9SX1RZUEUoZCx0KSAgICgoKHVuaW9uIGFjcGlfZGVzY3JpcHRvciAqKSh2b2lkICopKGQpKS0+ZGVzY3JpcHRvcl9pZCA9IHQpCisKKworLyogTWFjcm8gdG8gdGVzdCB0aGUgb2JqZWN0IHR5cGUgKi8KKworI2RlZmluZSBBQ1BJX0dFVF9PQkpFQ1RfVFlQRShkKSAgICAgICAgICgoKHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKikodm9pZCAqKShkKSktPmNvbW1vbi50eXBlKQorCisvKiBNYWNybyB0byBjaGVjayB0aGUgdGFibGUgZmxhZ3MgZm9yIFNJTkdMRSBvciBNVUxUSVBMRSB0YWJsZXMgYXJlIGFsbG93ZWQgKi8KKworI2RlZmluZSBBQ1BJX0lTX1NJTkdMRV9UQUJMRSh4KSAgICAgICAgICgoKHgpICYgMHgwMSkgPT0gQUNQSV9UQUJMRV9TSU5HTEUgPyAxIDogMCkKKworLyoKKyAqIE1hY3JvcyBmb3IgdGhlIG1hc3RlciBBTUwgb3Bjb2RlIHRhYmxlCisgKi8KKyNpZiBkZWZpbmVkKEFDUElfRElTQVNTRU1CTEVSKSB8fCBkZWZpbmVkIChBQ1BJX0RFQlVHX09VVFBVVCkKKyNkZWZpbmUgQUNQSV9PUChuYW1lLFBhcmdzLElhcmdzLG9ial90eXBlLGNsYXNzLHR5cGUsZmxhZ3MpICAgIHtuYW1lLCh1MzIpKFBhcmdzKSwodTMyKShJYXJncyksKHUzMikoZmxhZ3MpLG9ial90eXBlLGNsYXNzLHR5cGV9CisjZWxzZQorI2RlZmluZSBBQ1BJX09QKG5hbWUsUGFyZ3MsSWFyZ3Msb2JqX3R5cGUsY2xhc3MsdHlwZSxmbGFncykgICAgeyh1MzIpKFBhcmdzKSwodTMyKShJYXJncyksKHUzMikoZmxhZ3MpLG9ial90eXBlLGNsYXNzLHR5cGV9CisjZW5kaWYKKworI2lmZGVmIEFDUElfRElTQVNTRU1CTEVSCisjZGVmaW5lIEFDUElfRElTQVNNX09OTFlfTUVNQkVSUyhhKSAgICAgYTsKKyNlbHNlCisjZGVmaW5lIEFDUElfRElTQVNNX09OTFlfTUVNQkVSUyhhKQorI2VuZGlmCisKKyNkZWZpbmUgQVJHX1RZUEVfV0lEVEggICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEFSR18xKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCh1MzIpKHgpKQorI2RlZmluZSBBUkdfMih4KSAgICAgICAgICAgICAgICAgICAgICAgICgodTMyKSh4KSA8PCAoMSAqIEFSR19UWVBFX1dJRFRIKSkKKyNkZWZpbmUgQVJHXzMoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKHUzMikoeCkgPDwgKDIgKiBBUkdfVFlQRV9XSURUSCkpCisjZGVmaW5lIEFSR180KHgpICAgICAgICAgICAgICAgICAgICAgICAgKCh1MzIpKHgpIDw8ICgzICogQVJHX1RZUEVfV0lEVEgpKQorI2RlZmluZSBBUkdfNSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgodTMyKSh4KSA8PCAoNCAqIEFSR19UWVBFX1dJRFRIKSkKKyNkZWZpbmUgQVJHXzYoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKHUzMikoeCkgPDwgKDUgKiBBUkdfVFlQRV9XSURUSCkpCisKKyNkZWZpbmUgQVJHSV9MSVNUMShhKSAgICAgICAgICAgICAgICAgICAoQVJHXzEoYSkpCisjZGVmaW5lIEFSR0lfTElTVDIoYSxiKSAgICAgICAgICAgICAgICAgKEFSR18xKGIpfEFSR18yKGEpKQorI2RlZmluZSBBUkdJX0xJU1QzKGEsYixjKSAgICAgICAgICAgICAgIChBUkdfMShjKXxBUkdfMihiKXxBUkdfMyhhKSkKKyNkZWZpbmUgQVJHSV9MSVNUNChhLGIsYyxkKSAgICAgICAgICAgICAoQVJHXzEoZCl8QVJHXzIoYyl8QVJHXzMoYil8QVJHXzQoYSkpCisjZGVmaW5lIEFSR0lfTElTVDUoYSxiLGMsZCxlKSAgICAgICAgICAgKEFSR18xKGUpfEFSR18yKGQpfEFSR18zKGMpfEFSR180KGIpfEFSR181KGEpKQorI2RlZmluZSBBUkdJX0xJU1Q2KGEsYixjLGQsZSxmKSAgICAgICAgIChBUkdfMShmKXxBUkdfMihlKXxBUkdfMyhkKXxBUkdfNChjKXxBUkdfNShiKXxBUkdfNihhKSkKKworI2RlZmluZSBBUkdQX0xJU1QxKGEpICAgICAgICAgICAgICAgICAgIChBUkdfMShhKSkKKyNkZWZpbmUgQVJHUF9MSVNUMihhLGIpICAgICAgICAgICAgICAgICAoQVJHXzEoYSl8QVJHXzIoYikpCisjZGVmaW5lIEFSR1BfTElTVDMoYSxiLGMpICAgICAgICAgICAgICAgKEFSR18xKGEpfEFSR18yKGIpfEFSR18zKGMpKQorI2RlZmluZSBBUkdQX0xJU1Q0KGEsYixjLGQpICAgICAgICAgICAgIChBUkdfMShhKXxBUkdfMihiKXxBUkdfMyhjKXxBUkdfNChkKSkKKyNkZWZpbmUgQVJHUF9MSVNUNShhLGIsYyxkLGUpICAgICAgICAgICAoQVJHXzEoYSl8QVJHXzIoYil8QVJHXzMoYyl8QVJHXzQoZCl8QVJHXzUoZSkpCisjZGVmaW5lIEFSR1BfTElTVDYoYSxiLGMsZCxlLGYpICAgICAgICAgKEFSR18xKGEpfEFSR18yKGIpfEFSR18zKGMpfEFSR180KGQpfEFSR181KGUpfEFSR182KGYpKQorCisjZGVmaW5lIEdFVF9DVVJSRU5UX0FSR19UWVBFKGxpc3QpICAgICAgKGxpc3QgJiAoKHUzMikgMHgxRikpCisjZGVmaW5lIElOQ1JFTUVOVF9BUkdfTElTVChsaXN0KSAgICAgICAgKGxpc3QgPj49ICgodTMyKSBBUkdfVFlQRV9XSURUSCkpCisKKworLyoKKyAqIFJlcG9ydGluZyBtYWNyb3MgdGhhdCBhcmUgbmV2ZXIgY29tcGlsZWQgb3V0CisgKi8KKyNkZWZpbmUgQUNQSV9QQVJBTV9MSVNUKHBsKSAgICAgICAgICAgICAgICAgcGwKKworLyoKKyAqIEVycm9yIHJlcG9ydGluZy4gIFRoZXNlIHZlcnNpb25zIGFkZCBjYWxsZXJzIG1vZHVsZSBhbmQgbGluZSMuICBTaW5jZQorICogX1RISVNfTU9EVUxFIGdldHMgY29tcGlsZWQgb3V0IHdoZW4gQUNQSV9ERUJVR19PVVRQVVQgaXNuJ3QgZGVmaW5lZCwgb25seQorICogdXNlIGl0IGluIGRlYnVnIG1vZGUuCisgKi8KKyNpZmRlZiBBQ1BJX0RFQlVHX09VVFBVVAorCisjZGVmaW5lIEFDUElfUkVQT1JUX0lORk8oZnApICAgICAgICAgICAgICAgIHthY3BpX3V0X3JlcG9ydF9pbmZvKF9USElTX01PRFVMRSxfX0xJTkVfXyxfQ09NUE9ORU5UKTsgXAorCQkJCQkJCQkJCQkJYWNwaV9vc19wcmludGYgQUNQSV9QQVJBTV9MSVNUKGZwKTt9CisjZGVmaW5lIEFDUElfUkVQT1JUX0VSUk9SKGZwKSAgICAgICAgICAgICAgIHthY3BpX3V0X3JlcG9ydF9lcnJvcihfVEhJU19NT0RVTEUsX19MSU5FX18sX0NPTVBPTkVOVCk7IFwKKwkJCQkJCQkJCQkJCWFjcGlfb3NfcHJpbnRmIEFDUElfUEFSQU1fTElTVChmcCk7fQorI2RlZmluZSBBQ1BJX1JFUE9SVF9XQVJOSU5HKGZwKSAgICAgICAgICAgICB7YWNwaV91dF9yZXBvcnRfd2FybmluZyhfVEhJU19NT0RVTEUsX19MSU5FX18sX0NPTVBPTkVOVCk7IFwKKwkJCQkJCQkJCQkJCWFjcGlfb3NfcHJpbnRmIEFDUElfUEFSQU1fTElTVChmcCk7fQorI2RlZmluZSBBQ1BJX1JFUE9SVF9OU0VSUk9SKHMsZSkgICAgICAgICAgICBhY3BpX25zX3JlcG9ydF9lcnJvcihfVEhJU19NT0RVTEUsX19MSU5FX18sX0NPTVBPTkVOVCwgcywgZSk7CisKKyNkZWZpbmUgQUNQSV9SRVBPUlRfTUVUSE9EX0VSUk9SKHMsbixwLGUpICAgYWNwaV9uc19yZXBvcnRfbWV0aG9kX2Vycm9yKF9USElTX01PRFVMRSxfX0xJTkVfXyxfQ09NUE9ORU5ULCBzLCBuLCBwLCBlKTsKKworI2Vsc2UKKworI2RlZmluZSBBQ1BJX1JFUE9SVF9JTkZPKGZwKSAgICAgICAgICAgICAgICB7YWNwaV91dF9yZXBvcnRfaW5mbygiQUNQSSIsX19MSU5FX18sX0NPTVBPTkVOVCk7IFwKKwkJCQkJCQkJCQkJCWFjcGlfb3NfcHJpbnRmIEFDUElfUEFSQU1fTElTVChmcCk7fQorI2RlZmluZSBBQ1BJX1JFUE9SVF9FUlJPUihmcCkgICAgICAgICAgICAgICB7YWNwaV91dF9yZXBvcnRfZXJyb3IoIkFDUEkiLF9fTElORV9fLF9DT01QT05FTlQpOyBcCisJCQkJCQkJCQkJCQlhY3BpX29zX3ByaW50ZiBBQ1BJX1BBUkFNX0xJU1QoZnApO30KKyNkZWZpbmUgQUNQSV9SRVBPUlRfV0FSTklORyhmcCkgICAgICAgICAgICAge2FjcGlfdXRfcmVwb3J0X3dhcm5pbmcoIkFDUEkiLF9fTElORV9fLF9DT01QT05FTlQpOyBcCisJCQkJCQkJCQkJCQlhY3BpX29zX3ByaW50ZiBBQ1BJX1BBUkFNX0xJU1QoZnApO30KKyNkZWZpbmUgQUNQSV9SRVBPUlRfTlNFUlJPUihzLGUpICAgICAgICAgICAgYWNwaV9uc19yZXBvcnRfZXJyb3IoIkFDUEkiLF9fTElORV9fLF9DT01QT05FTlQsIHMsIGUpOworCisjZGVmaW5lIEFDUElfUkVQT1JUX01FVEhPRF9FUlJPUihzLG4scCxlKSAgIGFjcGlfbnNfcmVwb3J0X21ldGhvZF9lcnJvcigiQUNQSSIsX19MSU5FX18sX0NPTVBPTkVOVCwgcywgbiwgcCwgZSk7CisKKyNlbmRpZgorCisvKiBFcnJvciByZXBvcnRpbmcuICBUaGVzZSB2ZXJzaW9ucyBwYXNzIHRocnUgdGhlIG1vZHVsZSBhbmQgbGluZSMgKi8KKworI2RlZmluZSBfQUNQSV9SRVBPUlRfSU5GTyhhLGIsYyxmcCkgICAgICAgICB7YWNwaV91dF9yZXBvcnRfaW5mbyhhLGIsYyk7IFwKKwkJCQkJCQkJCQkJCWFjcGlfb3NfcHJpbnRmIEFDUElfUEFSQU1fTElTVChmcCk7fQorI2RlZmluZSBfQUNQSV9SRVBPUlRfRVJST1IoYSxiLGMsZnApICAgICAgICB7YWNwaV91dF9yZXBvcnRfZXJyb3IoYSxiLGMpOyBcCisJCQkJCQkJCQkJCQlhY3BpX29zX3ByaW50ZiBBQ1BJX1BBUkFNX0xJU1QoZnApO30KKyNkZWZpbmUgX0FDUElfUkVQT1JUX1dBUk5JTkcoYSxiLGMsZnApICAgICAge2FjcGlfdXRfcmVwb3J0X3dhcm5pbmcoYSxiLGMpOyBcCisJCQkJCQkJCQkJCQlhY3BpX29zX3ByaW50ZiBBQ1BJX1BBUkFNX0xJU1QoZnApO30KKworLyoKKyAqIERlYnVnIG1hY3JvcyB0aGF0IGFyZSBjb25kaXRpb25hbGx5IGNvbXBpbGVkCisgKi8KKyNpZmRlZiBBQ1BJX0RFQlVHX09VVFBVVAorCisjZGVmaW5lIEFDUElfTU9EVUxFX05BTUUobmFtZSkgICAgICAgICAgICAgICBzdGF0aWMgY2hhciBBQ1BJX1VOVVNFRF9WQVIgKl9USElTX01PRFVMRSA9IG5hbWU7CisKKy8qCisgKiBGdW5jdGlvbiBlbnRyeSB0cmFjaW5nLgorICogVGhlIGZpcnN0IHBhcmFtZXRlciBzaG91bGQgYmUgdGhlIHByb2NlZHVyZSBuYW1lIGFzIGEgcXVvdGVkIHN0cmluZy4gIFRoaXMgaXMgZGVjbGFyZWQKKyAqIGFzIGEgbG9jYWwgc3RyaW5nICgiX3Byb2NfbmFtZSkgc28gdGhhdCBpdCBjYW4gYmUgYWxzbyB1c2VkIGJ5IHRoZSBmdW5jdGlvbiBleGl0IG1hY3JvcyBiZWxvdy4KKyAqLworI2RlZmluZSBBQ1BJX0ZVTkNUSU9OX05BTUUoYSkgICAgICAgICAgICAgICBzdHJ1Y3QgYWNwaV9kZWJ1Z19wcmludF9pbmZvIF9kZWJ1Z19pbmZvOyBcCisJCQkJCQkJCQkJCQlfZGVidWdfaW5mby5jb21wb25lbnRfaWQgPSBfQ09NUE9ORU5UOyBcCisJCQkJCQkJCQkJCQlfZGVidWdfaW5mby5wcm9jX25hbWUgID0gYTsgXAorCQkJCQkJCQkJCQkJX2RlYnVnX2luZm8ubW9kdWxlX25hbWUgPSBfVEhJU19NT0RVTEU7CisKKyNkZWZpbmUgQUNQSV9GVU5DVElPTl9UUkFDRShhKSAgICAgICAgICAgICAgQUNQSV9GVU5DVElPTl9OQU1FKGEpIFwKKwkJCQkJCQkJCQkJCWFjcGlfdXRfdHJhY2UoX19MSU5FX18sJl9kZWJ1Z19pbmZvKQorI2RlZmluZSBBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUihhLGIpICAgICAgICBBQ1BJX0ZVTkNUSU9OX05BTUUoYSkgXAorCQkJCQkJCQkJCQkJYWNwaV91dF90cmFjZV9wdHIoX19MSU5FX18sJl9kZWJ1Z19pbmZvLCh2b2lkICopYikKKyNkZWZpbmUgQUNQSV9GVU5DVElPTl9UUkFDRV9VMzIoYSxiKSAgICAgICAgQUNQSV9GVU5DVElPTl9OQU1FKGEpIFwKKwkJCQkJCQkJCQkJCWFjcGlfdXRfdHJhY2VfdTMyKF9fTElORV9fLCZfZGVidWdfaW5mbywodTMyKWIpCisjZGVmaW5lIEFDUElfRlVOQ1RJT05fVFJBQ0VfU1RSKGEsYikgICAgICAgIEFDUElfRlVOQ1RJT05fTkFNRShhKSBcCisJCQkJCQkJCQkJCQlhY3BpX3V0X3RyYWNlX3N0cihfX0xJTkVfXywmX2RlYnVnX2luZm8sKGNoYXIgKiliKQorCisjZGVmaW5lIEFDUElfRlVOQ1RJT05fRU5UUlkoKSAgICAgICAgICAgICAgIGFjcGlfdXRfdHJhY2tfc3RhY2tfcHRyKCkKKworLyoKKyAqIEZ1bmN0aW9uIGV4aXQgdHJhY2luZy4KKyAqIFdBUk5JTkc6IFRoZXNlIG1hY3JvcyBpbmNsdWRlIGEgcmV0dXJuIHN0YXRlbWVudC4gIFRoaXMgaXMgdXN1YWxseSBjb25zaWRlcmVkCisgKiBiYWQgZm9ybSwgYnV0IGhhdmluZyBhIHNlcGFyYXRlIGV4aXQgbWFjcm8gaXMgdmVyeSB1Z2x5IGFuZCBkaWZmaWN1bHQgdG8gbWFpbnRhaW4uCisgKiBPbmUgb2YgdGhlIEZVTkNUSU9OX1RSQUNFIG1hY3JvcyBhYm92ZSBtdXN0IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGVzZSBtYWNyb3MKKyAqIHNvIHRoYXQgIl9wcm9jX25hbWUiIGlzIGRlZmluZWQuCisgKi8KKyNpZmRlZiBBQ1BJX1VTRV9ET19XSElMRV8wCisjZGVmaW5lIEFDUElfRE9fV0hJTEUwKGEpICAgICAgICAgICAgICAgZG8gYSB3aGlsZSgwKQorI2Vsc2UKKyNkZWZpbmUgQUNQSV9ET19XSElMRTAoYSkgICAgICAgICAgICAgICBhCisjZW5kaWYKKworI2RlZmluZSByZXR1cm5fVk9JRCAgICAgICAgICAgICAgICAgICAgIEFDUElfRE9fV0hJTEUwICh7YWNwaV91dF9leGl0KF9fTElORV9fLCZfZGVidWdfaW5mbyk7cmV0dXJuO30pCisjZGVmaW5lIHJldHVybl9BQ1BJX1NUQVRVUyhzKSAgICAgICAgICAgQUNQSV9ET19XSElMRTAgKHthY3BpX3V0X3N0YXR1c19leGl0KF9fTElORV9fLCZfZGVidWdfaW5mbywocykpO3JldHVybigocykpO30pCisjZGVmaW5lIHJldHVybl9WQUxVRShzKSAgICAgICAgICAgICAgICAgQUNQSV9ET19XSElMRTAgKHthY3BpX3V0X3ZhbHVlX2V4aXQoX19MSU5FX18sJl9kZWJ1Z19pbmZvLChhY3BpX2ludGVnZXIpKHMpKTtyZXR1cm4oKHMpKTt9KQorI2RlZmluZSByZXR1cm5fUFRSKHMpICAgICAgICAgICAgICAgICAgIEFDUElfRE9fV0hJTEUwICh7YWNwaV91dF9wdHJfZXhpdChfX0xJTkVfXywmX2RlYnVnX2luZm8sKHU4ICopKHMpKTtyZXR1cm4oKHMpKTt9KQorCisvKiBDb25kaXRpb25hbCBleGVjdXRpb24gKi8KKworI2RlZmluZSBBQ1BJX0RFQlVHX0VYRUMoYSkgICAgICAgICAgICAgIGEKKyNkZWZpbmUgQUNQSV9OT1JNQUxfRVhFQyhhKQorCisjZGVmaW5lIEFDUElfREVCVUdfREVGSU5FKGEpICAgICAgICAgICAgYTsKKyNkZWZpbmUgQUNQSV9ERUJVR19PTkxZX01FTUJFUlMoYSkgICAgICBhOworI2RlZmluZSBfVkVSQk9TRV9TVFJVQ1RVUkVTCisKKworLyogU3RhY2sgYW5kIGJ1ZmZlciBkdW1waW5nICovCisKKyNkZWZpbmUgQUNQSV9EVU1QX1NUQUNLX0VOVFJZKGEpICAgICAgICBhY3BpX2V4X2R1bXBfb3BlcmFuZCgoYSksMCkKKyNkZWZpbmUgQUNQSV9EVU1QX09QRVJBTkRTKGEsYixjLGQsZSkgICBhY3BpX2V4X2R1bXBfb3BlcmFuZHMoYSxiLGMsZCxlLF9USElTX01PRFVMRSxfX0xJTkVfXykKKworCisjZGVmaW5lIEFDUElfRFVNUF9FTlRSWShhLGIpICAgICAgICAgICAgYWNwaV9uc19kdW1wX2VudHJ5IChhLGIpCisKKyNpZmRlZiBBQ1BJX0ZVVFVSRV9VU0FHRQorI2RlZmluZSBBQ1BJX0RVTVBfVEFCTEVTKGEsYikgICAgICAgICAgIGFjcGlfbnNfZHVtcF90YWJsZXMoYSxiKQorI2VuZGlmCisKKyNkZWZpbmUgQUNQSV9EVU1QX1BBVEhOQU1FKGEsYixjLGQpICAgICBhY3BpX25zX2R1bXBfcGF0aG5hbWUoYSxiLGMsZCkKKyNkZWZpbmUgQUNQSV9EVU1QX1JFU09VUkNFX0xJU1QoYSkgICAgICBhY3BpX3JzX2R1bXBfcmVzb3VyY2VfbGlzdChhKQorI2RlZmluZSBBQ1BJX0RVTVBfQlVGRkVSKGEsYikgICAgICAgICAgIGFjcGlfdXRfZHVtcF9idWZmZXIoKHU4ICopYSxiLERCX0JZVEVfRElTUExBWSxfQ09NUE9ORU5UKQorI2RlZmluZSBBQ1BJX0JSRUFLX01TRyhhKSAgICAgICAgICAgICAgIGFjcGlfb3Nfc2lnbmFsIChBQ1BJX1NJR05BTF9CUkVBS1BPSU5ULChhKSkKKworCisvKgorICogR2VuZXJhdGUgSU5UMyBvbiBBQ1BJX0VSUk9SIChEZWJ1ZyBvbmx5ISkKKyAqLworI2RlZmluZSBBQ1BJX0VSUk9SX0JSRUFLCisjaWZkZWYgIEFDUElfRVJST1JfQlJFQUsKKyNkZWZpbmUgQUNQSV9CUkVBS19PTl9FUlJPUihsdmwpICAgICAgICBpZiAoKGx2bCkmQUNQSV9FUlJPUikgXAorCQkJCQkJCQkJCQlhY3BpX29zX3NpZ25hbChBQ1BJX1NJR05BTF9CUkVBS1BPSU5ULCJGYXRhbCBlcnJvciBlbmNvdW50ZXJlZFxuIikKKyNlbHNlCisjZGVmaW5lIEFDUElfQlJFQUtfT05fRVJST1IobHZsKQorI2VuZGlmCisKKy8qCisgKiBNYXN0ZXIgZGVidWcgcHJpbnQgbWFjcm9zCisgKiBQcmludCBpZmY6CisgKiAgICAxKSBEZWJ1ZyBwcmludCBmb3IgdGhlIGN1cnJlbnQgY29tcG9uZW50IGlzIGVuYWJsZWQKKyAqICAgIDIpIERlYnVnIGVycm9yIGxldmVsIG9yIHRyYWNlIGxldmVsIGZvciB0aGUgcHJpbnQgc3RhdGVtZW50IGlzIGVuYWJsZWQKKyAqLworI2RlZmluZSBBQ1BJX0RFQlVHX1BSSU5UKHBsKSAgICAgICAgICAgIGFjcGlfdXRfZGVidWdfcHJpbnQgQUNQSV9QQVJBTV9MSVNUKHBsKQorI2RlZmluZSBBQ1BJX0RFQlVHX1BSSU5UX1JBVyhwbCkgICAgICAgIGFjcGlfdXRfZGVidWdfcHJpbnRfcmF3IEFDUElfUEFSQU1fTElTVChwbCkKKworCisjZWxzZQorLyoKKyAqIFRoaXMgaXMgdGhlIG5vbi1kZWJ1ZyBjYXNlIC0tIG1ha2UgZXZlcnl0aGluZyBnbyBhd2F5LAorICogbGVhdmluZyBubyBleGVjdXRhYmxlIGRlYnVnIGNvZGUhCisgKi8KKyNkZWZpbmUgQUNQSV9NT0RVTEVfTkFNRShuYW1lKQorI2RlZmluZSBfVEhJU19NT0RVTEUgIiIKKworI2RlZmluZSBBQ1BJX0RFQlVHX0VYRUMoYSkKKyNkZWZpbmUgQUNQSV9OT1JNQUxfRVhFQyhhKSAgICAgICAgICAgICBhOworCisjZGVmaW5lIEFDUElfREVCVUdfREVGSU5FKGEpCisjZGVmaW5lIEFDUElfREVCVUdfT05MWV9NRU1CRVJTKGEpCisjZGVmaW5lIEFDUElfRlVOQ1RJT05fTkFNRShhKQorI2RlZmluZSBBQ1BJX0ZVTkNUSU9OX1RSQUNFKGEpCisjZGVmaW5lIEFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKGEsYikKKyNkZWZpbmUgQUNQSV9GVU5DVElPTl9UUkFDRV9VMzIoYSxiKQorI2RlZmluZSBBQ1BJX0ZVTkNUSU9OX1RSQUNFX1NUUihhLGIpCisjZGVmaW5lIEFDUElfRlVOQ1RJT05fRVhJVAorI2RlZmluZSBBQ1BJX0ZVTkNUSU9OX1NUQVRVU19FWElUKHMpCisjZGVmaW5lIEFDUElfRlVOQ1RJT05fVkFMVUVfRVhJVChzKQorI2RlZmluZSBBQ1BJX0ZVTkNUSU9OX0VOVFJZKCkKKyNkZWZpbmUgQUNQSV9EVU1QX1NUQUNLX0VOVFJZKGEpCisjZGVmaW5lIEFDUElfRFVNUF9PUEVSQU5EUyhhLGIsYyxkLGUpCisjZGVmaW5lIEFDUElfRFVNUF9FTlRSWShhLGIpCisKKyNpZmRlZiBBQ1BJX0ZVVFVSRV9VU0FHRQorI2RlZmluZSBBQ1BJX0RVTVBfVEFCTEVTKGEsYikKKyNlbmRpZgorCisjZGVmaW5lIEFDUElfRFVNUF9QQVRITkFNRShhLGIsYyxkKQorI2RlZmluZSBBQ1BJX0RVTVBfUkVTT1VSQ0VfTElTVChhKQorI2RlZmluZSBBQ1BJX0RVTVBfQlVGRkVSKGEsYikKKyNkZWZpbmUgQUNQSV9ERUJVR19QUklOVChwbCkKKyNkZWZpbmUgQUNQSV9ERUJVR19QUklOVF9SQVcocGwpCisjZGVmaW5lIEFDUElfQlJFQUtfTVNHKGEpCisKKyNkZWZpbmUgcmV0dXJuX1ZPSUQgICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyNkZWZpbmUgcmV0dXJuX0FDUElfU1RBVFVTKHMpICAgICAgICAgICByZXR1cm4ocykKKyNkZWZpbmUgcmV0dXJuX1ZBTFVFKHMpICAgICAgICAgICAgICAgICByZXR1cm4ocykKKyNkZWZpbmUgcmV0dXJuX1BUUihzKSAgICAgICAgICAgICAgICAgICByZXR1cm4ocykKKworI2VuZGlmCisKKy8qCisgKiBTb21lIGNvZGUgb25seSBnZXRzIGV4ZWN1dGVkIHdoZW4gdGhlIGRlYnVnZ2VyIGlzIGJ1aWx0IGluLgorICogTm90ZSB0aGF0IHRoaXMgaXMgZW50aXJlbHkgaW5kZXBlbmRlbnQgb2Ygd2hldGhlciB0aGUKKyAqIERFQlVHX1BSSU5UIHN0dWZmIChzZXQgYnkgQUNQSV9ERUJVR19PVVRQVVQpIGlzIG9uLCBvciBub3QuCisgKi8KKyNpZmRlZiBBQ1BJX0RFQlVHR0VSCisjZGVmaW5lIEFDUElfREVCVUdHRVJfRVhFQyhhKSAgICAgICAgICAgYQorI2Vsc2UKKyNkZWZpbmUgQUNQSV9ERUJVR0dFUl9FWEVDKGEpCisjZW5kaWYKKworCisvKgorICogRm9yIDE2LWJpdCBjb2RlLCB3ZSB3YW50IHRvIHNocmluayBzb21lIHRoaW5ncyBldmVuIHRob3VnaAorICogd2UgYXJlIHVzaW5nIEFDUElfREVCVUdfT1VUUFVUIHRvIGdldCB0aGUgZGVidWcgb3V0cHV0CisgKi8KKyNpZiBBQ1BJX01BQ0hJTkVfV0lEVEggPT0gMTYKKyN1bmRlZiBBQ1BJX0RFQlVHX09OTFlfTUVNQkVSUworI3VuZGVmIF9WRVJCT1NFX1NUUlVDVFVSRVMKKyNkZWZpbmUgQUNQSV9ERUJVR19PTkxZX01FTUJFUlMoYSkKKyNlbmRpZgorCisKKyNpZmRlZiBBQ1BJX0RFQlVHX09VVFBVVAorLyoKKyAqIDEpIFNldCBuYW1lIHRvIGJsYW5rcworICogMikgQ29weSB0aGUgb2JqZWN0IG5hbWUKKyAqLworI2RlZmluZSBBQ1BJX0FERF9PQkpFQ1RfTkFNRShhLGIpICAgICAgIEFDUElfTUVNU0VUIChhLT5jb21tb24ubmFtZSwgJyAnLCBzaXplb2YgKGEtPmNvbW1vbi5uYW1lKSk7XAorCQkJCQkJCQkJCUFDUElfU1RSTkNQWSAoYS0+Y29tbW9uLm5hbWUsIGFjcGlfZ2JsX25zX3R5cGVfbmFtZXNbYl0sIHNpemVvZiAoYS0+Y29tbW9uLm5hbWUpKQorI2Vsc2UKKworI2RlZmluZSBBQ1BJX0FERF9PQkpFQ1RfTkFNRShhLGIpCisjZW5kaWYKKworCisvKgorICogTWVtb3J5IGFsbG9jYXRpb24gdHJhY2tpbmcgKERFQlVHIE9OTFkpCisgKi8KKyNpZm5kZWYgQUNQSV9EQkdfVFJBQ0tfQUxMT0NBVElPTlMKKworLyogTWVtb3J5IGFsbG9jYXRpb24gKi8KKworI2RlZmluZSBBQ1BJX01FTV9BTExPQ0FURShhKSAgICAgICAgICAgIGFjcGlfdXRfYWxsb2NhdGUoKGFjcGlfc2l6ZSkoYSksX0NPTVBPTkVOVCxfVEhJU19NT0RVTEUsX19MSU5FX18pCisjZGVmaW5lIEFDUElfTUVNX0NBTExPQ0FURShhKSAgICAgICAgICAgYWNwaV91dF9jYWxsb2NhdGUoKGFjcGlfc2l6ZSkoYSksIF9DT01QT05FTlQsX1RISVNfTU9EVUxFLF9fTElORV9fKQorI2RlZmluZSBBQ1BJX01FTV9GUkVFKGEpICAgICAgICAgICAgICAgIGFjcGlfb3NfZnJlZShhKQorI2RlZmluZSBBQ1BJX01FTV9UUkFDS0lORyhhKQorCisKKyNlbHNlCisKKy8qIE1lbW9yeSBhbGxvY2F0aW9uICovCisKKyNkZWZpbmUgQUNQSV9NRU1fQUxMT0NBVEUoYSkgICAgICAgICAgICBhY3BpX3V0X2FsbG9jYXRlX2FuZF90cmFjaygoYWNwaV9zaXplKShhKSxfQ09NUE9ORU5ULF9USElTX01PRFVMRSxfX0xJTkVfXykKKyNkZWZpbmUgQUNQSV9NRU1fQ0FMTE9DQVRFKGEpICAgICAgICAgICBhY3BpX3V0X2NhbGxvY2F0ZV9hbmRfdHJhY2soKGFjcGlfc2l6ZSkoYSksIF9DT01QT05FTlQsX1RISVNfTU9EVUxFLF9fTElORV9fKQorI2RlZmluZSBBQ1BJX01FTV9GUkVFKGEpICAgICAgICAgICAgICAgIGFjcGlfdXRfZnJlZV9hbmRfdHJhY2soYSxfQ09NUE9ORU5ULF9USElTX01PRFVMRSxfX0xJTkVfXykKKyNkZWZpbmUgQUNQSV9NRU1fVFJBQ0tJTkcoYSkgICAgICAgICAgICBhCisKKyNlbmRpZiAvKiBBQ1BJX0RCR19UUkFDS19BTExPQ0FUSU9OUyAqLworCisjZW5kaWYgLyogQUNNQUNST1NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FjbmFtZXNwLmggYi9pbmNsdWRlL2FjcGkvYWNuYW1lc3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjNjZGMzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hY3BpL2FjbmFtZXNwLmgKQEAgLTAsMCArMSw1MTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBOYW1lOiBhY25hbWVzcC5oIC0gTmFtZXNwYWNlIHN1YmNvbXBvbmVudCBwcm90b3R5cGVzIGFuZCBkZWZpbmVzCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwNSwgUi4gQnlyb24gTW9vcmUKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciwKKyAqICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIGF0IG1pbmltdW0gYSBkaXNjbGFpbWVyCisgKiAgICBzdWJzdGFudGlhbGx5IHNpbWlsYXIgdG8gdGhlICJOTyBXQVJSQU5UWSIgZGlzY2xhaW1lciBiZWxvdworICogICAgKCJEaXNjbGFpbWVyIikgYW5kIGFueSByZWRpc3RyaWJ1dGlvbiBtdXN0IGJlIGNvbmRpdGlvbmVkIHVwb24KKyAqICAgIGluY2x1ZGluZyBhIHN1YnN0YW50aWFsbHkgc2ltaWxhciBEaXNjbGFpbWVyIHJlcXVpcmVtZW50IGZvciBmdXJ0aGVyCisgKiAgICBiaW5hcnkgcmVkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lcyBvZiB0aGUgYWJvdmUtbGlzdGVkIGNvcHlyaWdodCBob2xkZXJzIG5vciB0aGUgbmFtZXMKKyAqICAgIG9mIGFueSBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGlzIHNvZnR3YXJlIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoIkdQTCIpIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogTk8gV0FSUkFOVFkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HCisgKiBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKyAqLworCisjaWZuZGVmIF9fQUNOQU1FU1BfSF9fCisjZGVmaW5lIF9fQUNOQU1FU1BfSF9fCisKKworLyogVG8gc2VhcmNoIHRoZSBlbnRpcmUgbmFtZSBzcGFjZSwgcGFzcyB0aGlzIGFzIHNlYXJjaF9iYXNlICovCisKKyNkZWZpbmUgQUNQSV9OU19BTEwgICAgICAgICAgICAgICAgICgoYWNwaV9oYW5kbGUpMCkKKworLyoKKyAqIEVsZW1lbnRzIG9mIGFjcGlfbnNfcHJvcGVydGllcyBhcmUgYml0IHNpZ25pZmljYW50CisgKiBhbmQgc2hvdWxkIGJlIG9uZS10by1vbmUgd2l0aCB2YWx1ZXMgb2YgYWNwaV9vYmplY3RfdHlwZQorICovCisjZGVmaW5lIEFDUElfTlNfTk9STUFMICAgICAgICAgICAgICAwCisjZGVmaW5lIEFDUElfTlNfTkVXU0NPUEUgICAgICAgICAgICAxICAgLyogYSBkZWZpbml0aW9uIG9mIHRoaXMgdHlwZSBvcGVucyBhIG5hbWUgc2NvcGUgKi8KKyNkZWZpbmUgQUNQSV9OU19MT0NBTCAgICAgICAgICAgICAgIDIgICAvKiBzdXBwcmVzcyBzZWFyY2ggb2YgZW5jbG9zaW5nIHNjb3BlcyAqLworCisKKy8qIERlZmluaXRpb25zIG9mIHRoZSBwcmVkZWZpbmVkIG5hbWVzcGFjZSBuYW1lcyAgKi8KKworI2RlZmluZSBBQ1BJX1VOS05PV05fTkFNRSAgICAgICAgICAgKHUzMikgMHgzRjNGM0YzRiAgICAgLyogVW5rbm93biBuYW1lIGlzICAiPz8/PyIgKi8KKyNkZWZpbmUgQUNQSV9ST09UX05BTUUgICAgICAgICAgICAgICh1MzIpIDB4NUY1RjVGNUMgICAgIC8qIFJvb3QgbmFtZSBpcyAgICAgIlxfX18iICovCisjZGVmaW5lIEFDUElfU1lTX0JVU19OQU1FICAgICAgICAgICAodTMyKSAweDVGNTM0MjVGICAgICAvKiBTeXMgYnVzIG5hbWUgaXMgICJfU0JfIiAqLworCisjZGVmaW5lIEFDUElfTlNfUk9PVF9QQVRIICAgICAgICAgICAiXFwiCisjZGVmaW5lIEFDUElfTlNfU1lTVEVNX0JVUyAgICAgICAgICAiX1NCXyIKKworCisvKiBGbGFncyBmb3IgYWNwaV9uc19sb29rdXAsIGFjcGlfbnNfc2VhcmNoX2FuZF9lbnRlciAqLworCisjZGVmaW5lIEFDUElfTlNfTk9fVVBTRUFSQ0ggICAgICAgICAwCisjZGVmaW5lIEFDUElfTlNfU0VBUkNIX1BBUkVOVCAgICAgICAweDAxCisjZGVmaW5lIEFDUElfTlNfRE9OVF9PUEVOX1NDT1BFICAgICAweDAyCisjZGVmaW5lIEFDUElfTlNfTk9fUEVFUl9TRUFSQ0ggICAgICAweDA0CisjZGVmaW5lIEFDUElfTlNfRVJST1JfSUZfRk9VTkQgICAgICAweDA4CisKKyNkZWZpbmUgQUNQSV9OU19XQUxLX1VOTE9DSyAgICAgICAgIFRSVUUKKyNkZWZpbmUgQUNQSV9OU19XQUxLX05PX1VOTE9DSyAgICAgIEZBTFNFCisKKworYWNwaV9zdGF0dXMKK2FjcGlfbnNfbG9hZF9uYW1lc3BhY2UgKAorCXZvaWQpOworCithY3BpX3N0YXR1cworYWNwaV9uc19pbml0aWFsaXplX29iamVjdHMgKAorCXZvaWQpOworCithY3BpX3N0YXR1cworYWNwaV9uc19pbml0aWFsaXplX2RldmljZXMgKAorCXZvaWQpOworCisKKy8qIE5hbWVzcGFjZSBpbml0IC0gbnN4ZmluaXQgKi8KKworYWNwaV9zdGF0dXMKK2FjcGlfbnNfaW5pdF9vbmVfZGV2aWNlICgKKwlhY3BpX2hhbmRsZSAgICAgICAgICAgICAgICAgICAgIG9ial9oYW5kbGUsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXN0aW5nX2xldmVsLAorCXZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmNvbnRleHQsCisJdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKnJldHVybl92YWx1ZSk7CisKK2FjcGlfc3RhdHVzCithY3BpX25zX2luaXRfb25lX29iamVjdCAoCisJYWNwaV9oYW5kbGUgICAgICAgICAgICAgICAgICAgICBvYmpfaGFuZGxlLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWwsCisJdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqY29udGV4dCwKKwl2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqcmV0dXJuX3ZhbHVlKTsKKworCithY3BpX3N0YXR1cworYWNwaV9uc193YWxrX25hbWVzcGFjZSAoCisJYWNwaV9vYmplY3RfdHlwZSAgICAgICAgICAgICAgICB0eXBlLAorCWFjcGlfaGFuZGxlICAgICAgICAgICAgICAgICAgICAgc3RhcnRfb2JqZWN0LAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2RlcHRoLAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5sb2NrX2JlZm9yZV9jYWxsYmFjaywKKwlhY3BpX3dhbGtfY2FsbGJhY2sgICAgICAgICAgICAgIHVzZXJfZnVuY3Rpb24sCisJdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqY29udGV4dCwKKwl2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqcmV0dXJuX3ZhbHVlKTsKKworc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKgorYWNwaV9uc19nZXRfbmV4dF9ub2RlICgKKwlhY3BpX29iamVjdF90eXBlICAgICAgICAgICAgICAgIHR5cGUsCisJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgICAgICAqcGFyZW50LAorCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICAgICAgKmNoaWxkKTsKKwordm9pZAorYWNwaV9uc19kZWxldGVfbmFtZXNwYWNlX2J5X293bmVyICgKKwl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2lkKTsKKworCisvKiBOYW1lc3BhY2UgbG9hZGluZyAtIG5zbG9hZCAqLworCithY3BpX3N0YXR1cworYWNwaV9uc19vbmVfY29tcGxldGVfcGFyc2UgKAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc19udW1iZXIsCisJc3RydWN0IGFjcGlfdGFibGVfZGVzYyAgICAgICAgICAqdGFibGVfZGVzYyk7CisKK2FjcGlfc3RhdHVzCithY3BpX25zX3BhcnNlX3RhYmxlICgKKwlzdHJ1Y3QgYWNwaV90YWJsZV9kZXNjICAgICAgICAgICp0YWJsZV9kZXNjLAorCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICAgICAgKnNjb3BlKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfbnNfbG9hZF90YWJsZSAoCisJc3RydWN0IGFjcGlfdGFibGVfZGVzYyAgICAgICAgICAqdGFibGVfZGVzYywKKwlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAgICAgICpub2RlKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfbnNfbG9hZF90YWJsZV9ieV90eXBlICgKKwlhY3BpX3RhYmxlX3R5cGUgICAgICAgICAgICAgICAgIHRhYmxlX3R5cGUpOworCisKKy8qCisgKiBUb3AtbGV2ZWwgbmFtZXNwYWNlIGFjY2VzcyAtIG5zYWNjZXNzCisgKi8KKworYWNwaV9zdGF0dXMKK2FjcGlfbnNfcm9vdF9pbml0aWFsaXplICgKKwl2b2lkKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfbnNfbG9va3VwICgKKwl1bmlvbiBhY3BpX2dlbmVyaWNfc3RhdGUgICAgICAgICpzY29wZV9pbmZvLAorCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5hbWUsCisJYWNwaV9vYmplY3RfdHlwZSAgICAgICAgICAgICAgICB0eXBlLAorCWFjcGlfaW50ZXJwcmV0ZXJfbW9kZSAgICAgICAgICAgaW50ZXJwcmV0ZXJfbW9kZSwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLAorCXN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgICAgICAgICAgKndhbGtfc3RhdGUsCisJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgICAgICAqKnJldF9ub2RlKTsKKworCisvKgorICogTmFtZWQgb2JqZWN0IGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIC0gbnNhbGxvYworICovCisKK3N0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICoKK2FjcGlfbnNfY3JlYXRlX25vZGUgKAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSk7CisKK3ZvaWQKK2FjcGlfbnNfZGVsZXRlX25vZGUgKAorCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICAgICAgKm5vZGUpOworCit2b2lkCithY3BpX25zX2RlbGV0ZV9uYW1lc3BhY2Vfc3VidHJlZSAoCisJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgICAgICAqcGFyZW50X2hhbmRsZSk7CisKK3ZvaWQKK2FjcGlfbnNfZGV0YWNoX29iamVjdCAoCisJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgICAgICAqbm9kZSk7CisKK3ZvaWQKK2FjcGlfbnNfZGVsZXRlX2NoaWxkcmVuICgKKwlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAgICAgICpwYXJlbnQpOworCitpbnQKK2FjcGlfbnNfY29tcGFyZV9uYW1lcyAoCisJY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmFtZTEsCisJY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmFtZTIpOworCit2b2lkCithY3BpX25zX3JlbW92ZV9yZWZlcmVuY2UgKAorCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICAgICAgKm5vZGUpOworCisKKy8qCisgKiBOYW1lc3BhY2UgbW9kaWZpY2F0aW9uIC0gbnNtb2RpZnkKKyAqLworCisjaWZkZWYgQUNQSV9GVVRVUkVfVVNBR0UKK2FjcGlfc3RhdHVzCithY3BpX25zX3VubG9hZF9uYW1lc3BhY2UgKAorCWFjcGlfaGFuZGxlICAgICAgICAgICAgICAgICAgICAgaGFuZGxlKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfbnNfZGVsZXRlX3N1YnRyZWUgKAorCWFjcGlfaGFuZGxlICAgICAgICAgICAgICAgICAgICAgc3RhcnRfaGFuZGxlKTsKKyNlbmRpZgorCisKKy8qCisgKiBOYW1lc3BhY2UgZHVtcC9wcmludCB1dGlsaXRpZXMgLSBuc2R1bXAKKyAqLworCisjaWZkZWYgQUNQSV9GVVRVUkVfVVNBR0UKK3ZvaWQKK2FjcGlfbnNfZHVtcF90YWJsZXMgKAorCWFjcGlfaGFuZGxlICAgICAgICAgICAgICAgICAgICAgc2VhcmNoX2Jhc2UsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfZGVwdGgpOworI2VuZGlmCisKK3ZvaWQKK2FjcGlfbnNfZHVtcF9lbnRyeSAoCisJYWNwaV9oYW5kbGUgICAgICAgICAgICAgICAgICAgICBoYW5kbGUsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z19sZXZlbCk7CisKK3ZvaWQKK2FjcGlfbnNfZHVtcF9wYXRobmFtZSAoCisJYWNwaV9oYW5kbGUgICAgICAgICAgICAgICAgICAgICBoYW5kbGUsCisJY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbXNnLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWwsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQpOworCit2b2lkCithY3BpX25zX3ByaW50X3BhdGhuYW1lICgKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bV9zZWdtZW50cywKKwljaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwYXRobmFtZSk7CisKKyNpZmRlZiBBQ1BJX0ZVVFVSRV9VU0FHRQorYWNwaV9zdGF0dXMKK2FjcGlfbnNfZHVtcF9vbmVfZGV2aWNlICgKKwlhY3BpX2hhbmRsZSAgICAgICAgICAgICAgICAgICAgIG9ial9oYW5kbGUsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbCwKKwl2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICpjb250ZXh0LAorCXZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKipyZXR1cm5fdmFsdWUpOworCit2b2lkCithY3BpX25zX2R1bXBfcm9vdF9kZXZpY2VzICgKKwl2b2lkKTsKKyNlbmRpZiAgLyogIEFDUElfRlVUVVJFX1VTQUdFICAqLworCithY3BpX3N0YXR1cworYWNwaV9uc19kdW1wX29uZV9vYmplY3QgKAorCWFjcGlfaGFuZGxlICAgICAgICAgICAgICAgICAgICAgb2JqX2hhbmRsZSwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsLAorCXZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmNvbnRleHQsCisJdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKnJldHVybl92YWx1ZSk7CisKKyNpZmRlZiBBQ1BJX0ZVVFVSRV9VU0FHRQordm9pZAorYWNwaV9uc19kdW1wX29iamVjdHMgKAorCWFjcGlfb2JqZWN0X3R5cGUgICAgICAgICAgICAgICAgdHlwZSwKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlfdHlwZSwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF9kZXB0aCwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmRlcl9pZCwKKwlhY3BpX2hhbmRsZSAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2hhbmRsZSk7CisjZW5kaWYKKworCisvKgorICogTmFtZXNwYWNlIGV2YWx1YXRpb24gZnVuY3Rpb25zIC0gbnNldmFsCisgKi8KKworYWNwaV9zdGF0dXMKK2FjcGlfbnNfZXZhbHVhdGVfYnlfaGFuZGxlICgKKwlzdHJ1Y3QgYWNwaV9wYXJhbWV0ZXJfaW5mbyAgICAgICppbmZvKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfbnNfZXZhbHVhdGVfYnlfbmFtZSAoCisJY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcGF0aG5hbWUsCisJc3RydWN0IGFjcGlfcGFyYW1ldGVyX2luZm8gICAgICAqaW5mbyk7CisKK2FjcGlfc3RhdHVzCithY3BpX25zX2V2YWx1YXRlX3JlbGF0aXZlICgKKwljaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwYXRobmFtZSwKKwlzdHJ1Y3QgYWNwaV9wYXJhbWV0ZXJfaW5mbyAgICAgICppbmZvKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfbnNfZXhlY3V0ZV9jb250cm9sX21ldGhvZCAoCisJc3RydWN0IGFjcGlfcGFyYW1ldGVyX2luZm8gICAgICAqaW5mbyk7CisKK2FjcGlfc3RhdHVzCithY3BpX25zX2dldF9vYmplY3RfdmFsdWUgKAorCXN0cnVjdCBhY3BpX3BhcmFtZXRlcl9pbmZvICAgICAgKmluZm8pOworCisKKy8qCisgKiBQYXJlbnQvQ2hpbGQvUGVlciB1dGlsaXR5IGZ1bmN0aW9ucworICovCisKKyNpZmRlZiBBQ1BJX0ZVVFVSRV9VU0FHRQorYWNwaV9uYW1lCithY3BpX25zX2ZpbmRfcGFyZW50X25hbWUgKAorCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICAgICAgKm5vZGVfdG9fc2VhcmNoKTsKKyNlbmRpZgorCisKKy8qCisgKiBOYW1lIGFuZCBTY29wZSBtYW5pcHVsYXRpb24gLSBuc25hbWVzCisgKi8KKwordTMyCithY3BpX25zX29wZW5zX3Njb3BlICgKKwlhY3BpX29iamVjdF90eXBlICAgICAgICAgICAgICAgIHR5cGUpOworCit2b2lkCithY3BpX25zX2J1aWxkX2V4dGVybmFsX3BhdGggKAorCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICAgICAgKm5vZGUsCisJYWNwaV9zaXplICAgICAgICAgICAgICAgICAgICAgICBzaXplLAorCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5hbWVfYnVmZmVyKTsKKworY2hhciAqCithY3BpX25zX2dldF9leHRlcm5hbF9wYXRobmFtZSAoCisJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgICAgICAqbm9kZSk7CisKK2NoYXIgKgorYWNwaV9uc19uYW1lX29mX2N1cnJlbnRfc2NvcGUgKAorCXN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgICAgICAgICAgKndhbGtfc3RhdGUpOworCithY3BpX3N0YXR1cworYWNwaV9uc19oYW5kbGVfdG9fcGF0aG5hbWUgKAorCWFjcGlfaGFuZGxlICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X2hhbmRsZSwKKwlzdHJ1Y3QgYWNwaV9idWZmZXIgICAgICAgICAgICAgICpidWZmZXIpOworCit1OAorYWNwaV9uc19wYXR0ZXJuX21hdGNoICgKKwlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAgICAgICpvYmpfbm9kZSwKKwljaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICpzZWFyY2hfZm9yKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfbnNfZ2V0X25vZGVfYnlfcGF0aCAoCisJY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqZXh0ZXJuYWxfcGF0aG5hbWUsCisJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgICAgICAqaW5fcHJlZml4X25vZGUsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncywKKwlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAgICAgICoqb3V0X25vZGUpOworCithY3BpX3NpemUKK2FjcGlfbnNfZ2V0X3BhdGhuYW1lX2xlbmd0aCAoCisJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgICAgICAqbm9kZSk7CisKKworLyoKKyAqIE9iamVjdCBtYW5hZ2VtZW50IGZvciBuYW1lc3BhY2Ugbm9kZXMgLSBuc29iamVjdAorICovCisKK2FjcGlfc3RhdHVzCithY3BpX25zX2F0dGFjaF9vYmplY3QgKAorCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICAgICAgKm5vZGUsCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAqb2JqZWN0LAorCWFjcGlfb2JqZWN0X3R5cGUgICAgICAgICAgICAgICAgdHlwZSk7CisKK3VuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKgorYWNwaV9uc19nZXRfYXR0YWNoZWRfb2JqZWN0ICgKKwlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAgICAgICpub2RlKTsKKwordW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqCithY3BpX25zX2dldF9zZWNvbmRhcnlfb2JqZWN0ICgKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICpvYmpfZGVzYyk7CisKK2FjcGlfc3RhdHVzCithY3BpX25zX2F0dGFjaF9kYXRhICgKKwlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAgICAgICpub2RlLAorCWFjcGlfb2JqZWN0X2hhbmRsZXIgICAgICAgICAgICAgaGFuZGxlciwKKwl2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfbnNfZGV0YWNoX2RhdGEgKAorCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICAgICAgKm5vZGUsCisJYWNwaV9vYmplY3RfaGFuZGxlciAgICAgICAgICAgICBoYW5kbGVyKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfbnNfZ2V0X2F0dGFjaGVkX2RhdGEgKAorCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICAgICAgKm5vZGUsCisJYWNwaV9vYmplY3RfaGFuZGxlciAgICAgICAgICAgICBoYW5kbGVyLAorCXZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKipkYXRhKTsKKworCisvKgorICogTmFtZXNwYWNlIHNlYXJjaGluZyBhbmQgZW50cnkgLSBuc3NlYXJjaAorICovCisKK2FjcGlfc3RhdHVzCithY3BpX25zX3NlYXJjaF9hbmRfZW50ZXIgKAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnlfbmFtZSwKKwlzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICAgICAgICAgICp3YWxrX3N0YXRlLAorCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICAgICAgKm5vZGUsCisJYWNwaV9pbnRlcnByZXRlcl9tb2RlICAgICAgICAgICBpbnRlcnByZXRlcl9tb2RlLAorCWFjcGlfb2JqZWN0X3R5cGUgICAgICAgICAgICAgICAgdHlwZSwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLAorCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICAgICAgKipyZXRfbm9kZSk7CisKK2FjcGlfc3RhdHVzCithY3BpX25zX3NlYXJjaF9ub2RlICgKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5X25hbWUsCisJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgICAgICAqbm9kZSwKKwlhY3BpX29iamVjdF90eXBlICAgICAgICAgICAgICAgIHR5cGUsCisJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgICAgICAqKnJldF9ub2RlKTsKKwordm9pZAorYWNwaV9uc19pbnN0YWxsX25vZGUgKAorCXN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgICAgICAgICAgKndhbGtfc3RhdGUsCisJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgICAgICAqcGFyZW50X25vZGUsCisJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgICAgICAqbm9kZSwKKwlhY3BpX29iamVjdF90eXBlICAgICAgICAgICAgICAgIHR5cGUpOworCisKKy8qCisgKiBVdGlsaXR5IGZ1bmN0aW9ucyAtIG5zdXRpbHMKKyAqLworCit1OAorYWNwaV9uc192YWxpZF9yb290X3ByZWZpeCAoCisJY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXgpOworCit1OAorYWNwaV9uc192YWxpZF9wYXRoX3NlcGFyYXRvciAoCisJY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXApOworCithY3BpX29iamVjdF90eXBlCithY3BpX25zX2dldF90eXBlICgKKwlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAgICAgICpub2RlKTsKKwordTMyCithY3BpX25zX2xvY2FsICgKKwlhY3BpX29iamVjdF90eXBlICAgICAgICAgICAgICAgIHR5cGUpOworCit2b2lkCithY3BpX25zX3JlcG9ydF9lcnJvciAoCisJY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbW9kdWxlX25hbWUsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lX251bWJlciwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudF9pZCwKKwljaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICppbnRlcm5hbF9uYW1lLAorCWFjcGlfc3RhdHVzICAgICAgICAgICAgICAgICAgICAgbG9va3VwX3N0YXR1cyk7CisKK3ZvaWQKK2FjcGlfbnNfcmVwb3J0X21ldGhvZF9lcnJvciAoCisJY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbW9kdWxlX25hbWUsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lX251bWJlciwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudF9pZCwKKwljaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICptZXNzYWdlLAorCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICAgICAgKm5vZGUsCisJY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcGF0aCwKKwlhY3BpX3N0YXR1cyAgICAgICAgICAgICAgICAgICAgIGxvb2t1cF9zdGF0dXMpOworCit2b2lkCithY3BpX25zX3ByaW50X25vZGVfcGF0aG5hbWUgKAorCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICAgICAgKm5vZGUsCisJY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbXNnKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfbnNfYnVpbGRfaW50ZXJuYWxfbmFtZSAoCisJc3RydWN0IGFjcGlfbmFtZXN0cmluZ19pbmZvICAgICAqaW5mbyk7CisKK3ZvaWQKK2FjcGlfbnNfZ2V0X2ludGVybmFsX25hbWVfbGVuZ3RoICgKKwlzdHJ1Y3QgYWNwaV9uYW1lc3RyaW5nX2luZm8gICAgICppbmZvKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfbnNfaW50ZXJuYWxpemVfbmFtZSAoCisJY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqZG90dGVkX25hbWUsCisJY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKmNvbnZlcnRlZF9uYW1lKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfbnNfZXh0ZXJuYWxpemVfbmFtZSAoCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbF9uYW1lX2xlbmd0aCwKKwljaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICppbnRlcm5hbF9uYW1lLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmNvbnZlcnRlZF9uYW1lX2xlbmd0aCwKKwljaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqY29udmVydGVkX25hbWUpOworCitzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqCithY3BpX25zX21hcF9oYW5kbGVfdG9fbm9kZSAoCisJYWNwaV9oYW5kbGUgICAgICAgICAgICAgICAgICAgICBoYW5kbGUpOworCithY3BpX2hhbmRsZQorYWNwaV9uc19jb252ZXJ0X2VudHJ5X3RvX2hhbmRsZSgKKwlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAgICAgICpub2RlKTsKKwordm9pZAorYWNwaV9uc190ZXJtaW5hdGUgKAorCXZvaWQpOworCitzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqCithY3BpX25zX2dldF9wYXJlbnRfbm9kZSAoCisJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgICAgICAqbm9kZSk7CisKKworc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKgorYWNwaV9uc19nZXRfbmV4dF92YWxpZF9ub2RlICgKKwlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAgICAgICpub2RlKTsKKworCisjZW5kaWYgLyogX19BQ05BTUVTUF9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY29iamVjdC5oIGIvaW5jbHVkZS9hY3BpL2Fjb2JqZWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM2MDIzYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYWNwaS9hY29iamVjdC5oCkBAIC0wLDAgKzEsNTAxIEBACisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBOYW1lOiBhY29iamVjdC5oIC0gRGVmaW5pdGlvbiBvZiB1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgIChJbnRlcm5hbCBvYmplY3Qgb25seSkKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA1LCBSLiBCeXJvbiBNb29yZQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLAorICogICAgd2l0aG91dCBtb2RpZmljYXRpb24uCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgYXQgbWluaW11bSBhIGRpc2NsYWltZXIKKyAqICAgIHN1YnN0YW50aWFsbHkgc2ltaWxhciB0byB0aGUgIk5PIFdBUlJBTlRZIiBkaXNjbGFpbWVyIGJlbG93CisgKiAgICAoIkRpc2NsYWltZXIiKSBhbmQgYW55IHJlZGlzdHJpYnV0aW9uIG11c3QgYmUgY29uZGl0aW9uZWQgdXBvbgorICogICAgaW5jbHVkaW5nIGEgc3Vic3RhbnRpYWxseSBzaW1pbGFyIERpc2NsYWltZXIgcmVxdWlyZW1lbnQgZm9yIGZ1cnRoZXIKKyAqICAgIGJpbmFyeSByZWRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWVzIG9mIHRoZSBhYm92ZS1saXN0ZWQgY29weXJpZ2h0IGhvbGRlcnMgbm9yIHRoZSBuYW1lcworICogICAgb2YgYW55IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBOTyBXQVJSQU5UWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcKKyAqIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorICovCisKKyNpZm5kZWYgX0FDT0JKRUNUX0gKKyNkZWZpbmUgX0FDT0JKRUNUX0gKKworCisvKgorICogVGhlIHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgaXMgdXNlZCB0byBwYXNzIEFNTCBvcGVyYW5kcyBmcm9tIHRoZSBkaXNwYXRjaGVyCisgKiB0byB0aGUgaW50ZXJwcmV0ZXIsIGFuZCB0byBrZWVwIHRyYWNrIG9mIHRoZSB2YXJpb3VzIGhhbmRsZXJzIHN1Y2ggYXMKKyAqIGFkZHJlc3Mgc3BhY2UgaGFuZGxlcnMgYW5kIG5vdGlmeSBoYW5kbGVycy4gIFRoZSBvYmplY3QgaXMgYSBjb25zdGFudAorICogc2l6ZSBpbiBvcmRlciB0byBhbGxvdyBpdCB0byBiZSBjYWNoZWQgYW5kIHJldXNlZC4KKyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvbW1vbiBEZXNjcmlwdG9ycworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBDb21tb24gYXJlYSBmb3IgYWxsIG9iamVjdHMuCisgKgorICogZGF0YV90eXBlIGlzIHVzZWQgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIGludGVybmFsIGRlc2NyaXB0b3JzLCBhbmQgTVVTVAorICogYmUgdGhlIGZpcnN0IGJ5dGUgaW4gdGhpcyBzdHJ1Y3R1cmUuCisgKi8KKyNkZWZpbmUgQUNQSV9PQkpFQ1RfQ09NTU9OX0hFQURFUiAgIC8qIFNJWkUvQUxJR05NRU5UOiAzMiBiaXRzLCBvbmUgcHRyIHBsdXMgdHJhaWxpbmcgOC1iaXQgZmxhZyAqL1wKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvcjsgICAgICAgICAvKiBUbyBkaWZmZXJlbnRpYXRlIHZhcmlvdXMgaW50ZXJuYWwgb2JqcyAqL1wKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTsgICAgICAgICAgICAgICAvKiBhY3BpX29iamVjdF90eXBlICovXAorCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VfY291bnQ7ICAgIC8qIEZvciBvYmplY3QgZGVsZXRpb24gbWFuYWdlbWVudCAqL1wKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICAgICAgICAgKm5leHRfb2JqZWN0OyAgICAgICAvKiBPYmplY3RzIGxpbmtlZCB0byBwYXJlbnQgTlMgbm9kZSAqL1wKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3M7IFwKKworLyogVmFsdWVzIGZvciBmbGFnIGJ5dGUgYWJvdmUgKi8KKworI2RlZmluZSBBT1BPQkpfQU1MX0NPTlNUQU5UICAgICAgICAgMHgwMQorI2RlZmluZSBBT1BPQkpfU1RBVElDX1BPSU5URVIgICAgICAgMHgwMgorI2RlZmluZSBBT1BPQkpfREFUQV9WQUxJRCAgICAgICAgICAgMHgwNAorI2RlZmluZSBBT1BPQkpfT0JKRUNUX0lOSVRJQUxJWkVEICAgMHgwOAorI2RlZmluZSBBT1BPQkpfU0VUVVBfQ09NUExFVEUgICAgICAgMHgxMAorI2RlZmluZSBBT1BPQkpfU0lOR0xFX0RBVFVNICAgICAgICAgMHgyMAorCisKKy8qCisgKiBDb21tb24gYml0ZmllbGQgZm9yIHRoZSBmaWVsZCBvYmplY3RzCisgKiAiRmllbGQgRGF0dW0iICAtLSBhIGRhdHVtIGZyb20gdGhlIGFjdHVhbCBmaWVsZCBvYmplY3QKKyAqICJCdWZmZXIgRGF0dW0iIC0tIGEgZGF0dW0gZnJvbSBhIHVzZXIgYnVmZmVyLCByZWFkIGZyb20gb3IgdG8gYmUgd3JpdHRlbiB0byB0aGUgZmllbGQKKyAqLworI2RlZmluZSBBQ1BJX0NPTU1PTl9GSUVMRF9JTkZPICAgICAgLyogU0laRS9BTElHTk1FTlQ6IDI0IGJpdHMgKyB0aHJlZSAzMi1iaXQgdmFsdWVzICovXAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9mbGFnczsgICAgICAgIC8qIEFjY2VzcywgdXBkYXRlLCBhbmQgbG9jayBiaXRzICovXAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGU7ICAgICAgICAgIC8qIEZyb20gYWNjZXNzX2FzIGtleXdvcmQgKi9cCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2Vzc19ieXRlX3dpZHRoOyAgLyogUmVhZC9Xcml0ZSBzaXplIGluIGJ5dGVzICovXAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRfbGVuZ3RoOyAgICAgICAgIC8qIExlbmd0aCBvZiBmaWVsZCBpbiBiaXRzICovXAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlX2J5dGVfb2Zmc2V0OyAgIC8qIEJ5dGUgb2Zmc2V0IHdpdGhpbiBjb250YWluaW5nIG9iamVjdCAqL1wKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRfZmllbGRfYml0X29mZnNldDsvKiBCaXQgb2Zmc2V0IHdpdGhpbiBmaXJzdCBmaWVsZCBkYXR1bSAoMC02MykgKi9cCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2Vzc19iaXRfd2lkdGg7ICAgLyogUmVhZC9Xcml0ZSBzaXplIGluIGJpdHMgKDgtNjQpICovXAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTsgICAgICAgICAgICAgIC8qIFZhbHVlIHRvIHN0b3JlIGludG8gdGhlIEJhbmsgb3IgSW5kZXggcmVnaXN0ZXIgKi9cCisJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgICAgICAgICAgICAgICpub2RlOyAgICAgICAgICAgICAgLyogTGluayBiYWNrIHRvIHBhcmVudCBub2RlICovCisKKworLyoKKyAqIEZpZWxkcyBjb21tb24gdG8gYm90aCBTdHJpbmdzIGFuZCBCdWZmZXJzCisgKi8KKyNkZWZpbmUgQUNQSV9DT01NT05fQlVGRkVSX0lORk8gXAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGg7CisKKworLyoKKyAqIENvbW1vbiBmaWVsZHMgZm9yIG9iamVjdHMgdGhhdCBzdXBwb3J0IEFTTCBub3RpZmljYXRpb25zCisgKi8KKyNkZWZpbmUgQUNQSV9DT01NT05fTk9USUZZX0lORk8gXAorCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgICAgICAgICAqc3lzdGVtX25vdGlmeTsgICAgIC8qIEhhbmRsZXIgZm9yIHN5c3RlbSBub3RpZmllcyAqL1wKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICAgICAgICAgKmRldmljZV9ub3RpZnk7ICAgICAvKiBIYW5kbGVyIGZvciBkcml2ZXIgbm90aWZpZXMgKi9cCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAgICAgICAgICpoYW5kbGVyOyAgICAgICAgICAgLyogSGFuZGxlciBmb3IgQWRkcmVzcyBzcGFjZSAqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBCYXNpYyBkYXRhIHR5cGVzCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdHJ1Y3QgYWNwaV9vYmplY3RfY29tbW9uCit7CisJQUNQSV9PQkpFQ1RfQ09NTU9OX0hFQURFUgorfTsKKworCitzdHJ1Y3QgYWNwaV9vYmplY3RfaW50ZWdlcgoreworCUFDUElfT0JKRUNUX0NPTU1PTl9IRUFERVIKKwlhY3BpX2ludGVnZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU7Cit9OworCisvKgorICogTm90ZTogVGhlIFN0cmluZyBhbmQgQnVmZmVyIG9iamVjdCBtdXN0IGJlIGlkZW50aWNhbCB0aHJvdWdoIHRoZSBQb2ludGVyCisgKiBlbGVtZW50LiAgVGhlcmUgaXMgY29kZSB0aGF0IGRlcGVuZHMgb24gdGhpcy4KKyAqLworc3RydWN0IGFjcGlfb2JqZWN0X3N0cmluZyAgICAgICAgICAgLyogTnVsbCB0ZXJtaW5hdGVkLCBBU0NJSSBjaGFyYWN0ZXJzIG9ubHkgKi8KK3sKKwlBQ1BJX09CSkVDVF9DT01NT05fSEVBREVSCisJQUNQSV9DT01NT05fQlVGRkVSX0lORk8KKwljaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnBvaW50ZXI7ICAgICAgICAgICAvKiBTdHJpbmcgaW4gQU1MIHN0cmVhbSBvciBhbGxvY2F0ZWQgc3RyaW5nICovCit9OworCisKK3N0cnVjdCBhY3BpX29iamVjdF9idWZmZXIKK3sKKwlBQ1BJX09CSkVDVF9DT01NT05fSEVBREVSCisJQUNQSV9DT01NT05fQlVGRkVSX0lORk8KKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnBvaW50ZXI7ICAgICAgICAgICAvKiBCdWZmZXIgaW4gQU1MIHN0cmVhbSBvciBhbGxvY2F0ZWQgYnVmZmVyICovCisJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgICAgICAgICAgICAgICpub2RlOyAgICAgICAgICAgICAgLyogTGluayBiYWNrIHRvIHBhcmVudCBub2RlICovCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICphbWxfc3RhcnQ7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFtbF9sZW5ndGg7Cit9OworCisKK3N0cnVjdCBhY3BpX29iamVjdF9wYWNrYWdlCit7CisJQUNQSV9PQkpFQ1RfQ09NTU9OX0hFQURFUgorCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OyAgICAgICAgICAgICAgLyogIyBvZiBlbGVtZW50cyBpbiBwYWNrYWdlICovCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFtbF9sZW5ndGg7CisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICphbWxfc3RhcnQ7CisJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgICAgICAgICAgICAgICpub2RlOyAgICAgICAgICAgICAgLyogTGluayBiYWNrIHRvIHBhcmVudCBub2RlICovCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAgICAgICAgICoqZWxlbWVudHM7ICAgICAgICAgLyogQXJyYXkgb2YgcG9pbnRlcnMgdG8gYWNwaV9vYmplY3RzICovCit9OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb21wbGV4IGRhdGEgdHlwZXMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0cnVjdCBhY3BpX29iamVjdF9ldmVudAoreworCUFDUElfT0JKRUNUX0NPTU1PTl9IRUFERVIKKwl2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnNlbWFwaG9yZTsKK307CisKKworI2RlZmluZSBBQ1BJX0lORklOSVRFX0NPTkNVUlJFTkNZICAgMHhGRgorCit0eXBlZGVmCithY3BpX3N0YXR1cyAoKkFDUElfSU5URVJOQUxfTUVUSE9EKSAoCisJc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAgICAgICAgICAqd2Fsa19zdGF0ZSk7CisKK3N0cnVjdCBhY3BpX29iamVjdF9tZXRob2QKK3sKKwlBQ1BJX09CSkVDVF9DT01NT05fSEVBREVSCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZF9mbGFnczsKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1fY291bnQ7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFtbF9sZW5ndGg7CisJdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpzZW1hcGhvcmU7CisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICphbWxfc3RhcnQ7CisJQUNQSV9JTlRFUk5BTF9NRVRIT0QgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbjsKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uY3VycmVuY3k7CisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVhZF9jb3VudDsKKwlhY3BpX293bmVyX2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgb3duaW5nX2lkOworfTsKKworCitzdHJ1Y3QgYWNwaV9vYmplY3RfbXV0ZXgKK3sKKwlBQ1BJX09CSkVDVF9DT01NT05fSEVBREVSCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNfbGV2ZWw7ICAgICAgICAgLyogMC0xNSwgc3BlY2lmaWVkIGluIE11dGV4KCkgY2FsbCAqLworCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3F1aXNpdGlvbl9kZXB0aDsgIC8qIEFsbG93IG11bHRpcGxlIEFjcXVpcmVzLCBzYW1lIHRocmVhZCAqLworCXN0cnVjdCBhY3BpX3RocmVhZF9zdGF0ZSAgICAgICAgICAgICAgICAqb3duZXJfdGhyZWFkOyAgICAgIC8qIEN1cnJlbnQgb3duZXIgb2YgdGhlIG11dGV4ICovCisJdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpzZW1hcGhvcmU7ICAgICAgICAgLyogQWN0dWFsIE9TIHN5bmNocm9uaXphdGlvbiBvYmplY3QgKi8KKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICAgICAgICAgKnByZXY7ICAgICAgICAgICAgICAvKiBMaW5rIGZvciBsaXN0IG9mIGFjcXVpcmVkIG11dGV4ZXMgKi8KKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICAgICAgICAgKm5leHQ7ICAgICAgICAgICAgICAvKiBMaW5rIGZvciBsaXN0IG9mIGFjcXVpcmVkIG11dGV4ZXMgKi8KKwlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAgICAgICAgICAgICAgKm5vZGU7ICAgICAgICAgICAgICAvKiBDb250YWluaW5nIG5hbWVzcGFjZSBub2RlICovCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsX3N5bmNfbGV2ZWw7IC8qIE93bmVyJ3Mgb3JpZ2luYWwgc3luYyBsZXZlbCAoMC0xNSkgKi8KK307CisKKworc3RydWN0IGFjcGlfb2JqZWN0X3JlZ2lvbgoreworCUFDUElfT0JKRUNUX0NPTU1PTl9IRUFERVIKKworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFjZV9pZDsKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICAgICAgICAgKmhhbmRsZXI7ICAgICAgICAgICAvKiBIYW5kbGVyIGZvciByZWdpb24gYWNjZXNzICovCisJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgICAgICAgICAgICAgICpub2RlOyAgICAgICAgICAgICAgLyogQ29udGFpbmluZyBuYW1lc3BhY2Ugbm9kZSAqLworCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgICAgICAgICAqbmV4dDsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoOworCWFjcGlfcGh5c2ljYWxfYWRkcmVzcyAgICAgICAgICAgICAgICAgICBhZGRyZXNzOworfTsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogT2JqZWN0cyB0aGF0IGNhbiBiZSBub3RpZmllZC4gIEFsbCBzaGFyZSBhIGNvbW1vbiBub3RpZnlfaW5mbyBhcmVhLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RydWN0IGFjcGlfb2JqZWN0X25vdGlmeV9jb21tb24gICAgICAgICAgICAvKiBDT01NT04gTk9USUZZIGZvciBQT1dFUiwgUFJPQ0VTU09SLCBERVZJQ0UsIGFuZCBUSEVSTUFMICovCit7CisJQUNQSV9PQkpFQ1RfQ09NTU9OX0hFQURFUgorCUFDUElfQ09NTU9OX05PVElGWV9JTkZPCit9OworCisKK3N0cnVjdCBhY3BpX29iamVjdF9kZXZpY2UKK3sKKwlBQ1BJX09CSkVDVF9DT01NT05fSEVBREVSCisJQUNQSV9DT01NT05fTk9USUZZX0lORk8KKwlzdHJ1Y3QgYWNwaV9ncGVfYmxvY2tfaW5mbyAgICAgICAgICAgICAgKmdwZV9ibG9jazsKK307CisKKworc3RydWN0IGFjcGlfb2JqZWN0X3Bvd2VyX3Jlc291cmNlCit7CisJQUNQSV9PQkpFQ1RfQ09NTU9OX0hFQURFUgorCUFDUElfQ09NTU9OX05PVElGWV9JTkZPCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbV9sZXZlbDsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2Vfb3JkZXI7Cit9OworCisKK3N0cnVjdCBhY3BpX29iamVjdF9wcm9jZXNzb3IKK3sKKwlBQ1BJX09CSkVDVF9DT01NT05fSEVBREVSCisJQUNQSV9DT01NT05fTk9USUZZX0lORk8KKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY19pZDsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoOworCWFjcGlfaW9fYWRkcmVzcyAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzOworfTsKKworCitzdHJ1Y3QgYWNwaV9vYmplY3RfdGhlcm1hbF96b25lCit7CisJQUNQSV9PQkpFQ1RfQ09NTU9OX0hFQURFUgorCUFDUElfQ09NTU9OX05PVElGWV9JTkZPCit9OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWVsZHMuICBBbGwgc2hhcmUgYSBjb21tb24gaGVhZGVyL2luZm8gZmllbGQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdHJ1Y3QgYWNwaV9vYmplY3RfZmllbGRfY29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENPTU1PTiBGSUVMRCAoZm9yIEJVRkZFUiwgUkVHSU9OLCBCQU5LLCBhbmQgSU5ERVggZmllbGRzKSAqLworeworCUFDUElfT0JKRUNUX0NPTU1PTl9IRUFERVIKKwlBQ1BJX0NPTU1PTl9GSUVMRF9JTkZPCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAgICAgICAgICpyZWdpb25fb2JqOyAgICAgICAgLyogQ29udGFpbmluZyBPcGVyYXRpb24gUmVnaW9uIG9iamVjdCAqLworCQkJICAvKiAoUkVHSU9OL0JBTksgZmllbGRzIG9ubHkpICovCit9OworCisKK3N0cnVjdCBhY3BpX29iamVjdF9yZWdpb25fZmllbGQKK3sKKwlBQ1BJX09CSkVDVF9DT01NT05fSEVBREVSCisJQUNQSV9DT01NT05fRklFTERfSU5GTworCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgICAgICAgICAqcmVnaW9uX29iajsgICAgICAgIC8qIENvbnRhaW5pbmcgb3BfcmVnaW9uIG9iamVjdCAqLworfTsKKworCitzdHJ1Y3QgYWNwaV9vYmplY3RfYmFua19maWVsZAoreworCUFDUElfT0JKRUNUX0NPTU1PTl9IRUFERVIKKwlBQ1BJX0NPTU1PTl9GSUVMRF9JTkZPCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAgICAgICAgICpyZWdpb25fb2JqOyAgICAgICAgLyogQ29udGFpbmluZyBvcF9yZWdpb24gb2JqZWN0ICovCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAgICAgICAgICpiYW5rX29iajsgICAgICAgICAgLyogYmFua19zZWxlY3QgUmVnaXN0ZXIgb2JqZWN0ICovCit9OworCisKK3N0cnVjdCBhY3BpX29iamVjdF9pbmRleF9maWVsZAoreworCUFDUElfT0JKRUNUX0NPTU1PTl9IRUFERVIKKwlBQ1BJX0NPTU1PTl9GSUVMRF9JTkZPCisKKwkvKgorCSAqIE5vICJyZWdpb25fb2JqIiBwb2ludGVyIG5lZWRlZCBzaW5jZSB0aGUgSW5kZXggYW5kIERhdGEgcmVnaXN0ZXJzCisJICogYXJlIGVhY2ggZmllbGQgZGVmaW5pdGlvbnMgdW50byB0aGVtc2VsdmVzLgorCSAqLworCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgICAgICAgICAqaW5kZXhfb2JqOyAgICAgICAgIC8qIEluZGV4IHJlZ2lzdGVyICovCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAgICAgICAgICpkYXRhX29iajsgICAgICAgICAgLyogRGF0YSByZWdpc3RlciAqLworfTsKKworCisvKiBUaGUgYnVmZmVyX2ZpZWxkIGlzIGRpZmZlcmVudCBpbiB0aGF0IGl0IGlzIHBhcnQgb2YgYSBCdWZmZXIsIG5vdCBhbiBvcF9yZWdpb24gKi8KKworc3RydWN0IGFjcGlfb2JqZWN0X2J1ZmZlcl9maWVsZAoreworCUFDUElfT0JKRUNUX0NPTU1PTl9IRUFERVIKKwlBQ1BJX0NPTU1PTl9GSUVMRF9JTkZPCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAgICAgICAgICpidWZmZXJfb2JqOyAgICAgICAgLyogQ29udGFpbmluZyBCdWZmZXIgb2JqZWN0ICovCit9OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBPYmplY3RzIGZvciBoYW5kbGVycworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RydWN0IGFjcGlfb2JqZWN0X25vdGlmeV9oYW5kbGVyCit7CisJQUNQSV9PQkpFQ1RfQ09NTU9OX0hFQURFUgorCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICAgICAgICAgICAgICAqbm9kZTsgICAgICAgICAgICAgIC8qIFBhcmVudCBkZXZpY2UgKi8KKwlhY3BpX25vdGlmeV9oYW5kbGVyICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcjsKKwl2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmNvbnRleHQ7Cit9OworCisKKy8qIEZsYWdzIGZvciBhZGRyZXNzIGhhbmRsZXIgKi8KKworI2RlZmluZSBBQ1BJX0FERFJfSEFORExFUl9ERUZBVUxUX0lOU1RBTExFRCAgMHgxCisKKworc3RydWN0IGFjcGlfb2JqZWN0X2FkZHJfaGFuZGxlcgoreworCUFDUElfT0JKRUNUX0NPTU1PTl9IRUFERVIKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2VfaWQ7CisJdTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhmbGFnczsKKwlhY3BpX2Fkcl9zcGFjZV9oYW5kbGVyICAgICAgICAgICAgICAgICAgaGFuZGxlcjsKKwlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAgICAgICAgICAgICAgKm5vZGU7ICAgICAgICAgICAgICAvKiBQYXJlbnQgZGV2aWNlICovCisJdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpjb250ZXh0OworCWFjcGlfYWRyX3NwYWNlX3NldHVwICAgICAgICAgICAgICAgICAgICBzZXR1cDsKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICAgICAgICAgKnJlZ2lvbl9saXN0OyAgICAgICAvKiByZWdpb25zIHVzaW5nIHRoaXMgaGFuZGxlciAqLworCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgICAgICAgICAqbmV4dDsKK307CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFNwZWNpYWwgaW50ZXJuYWwgb2JqZWN0cworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIFRoZSBSZWZlcmVuY2Ugb2JqZWN0IHR5cGUgaXMgdXNlZCBmb3IgdGhlc2Ugb3Bjb2RlczoKKyAqIEFyZ1swLTZdLCBMb2NhbFswLTddLCBpbmRleF9vcCwgbmFtZV9vcCwgemVyb19vcCwgb25lX29wLCBvbmVzX29wLCBkZWJ1Z19vcAorICovCitzdHJ1Y3QgYWNwaV9vYmplY3RfcmVmZXJlbmNlCit7CisJQUNQSV9PQkpFQ1RfQ09NTU9OX0hFQURFUgorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRfdHlwZTsgICAgICAgIC8qIFVzZWQgZm9yIGluZGV4X29wICovCisJdTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wY29kZTsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OyAgICAgICAgICAgICAvKiBVc2VkIGZvciBhcmdfb3AsIGxvY2FsX29wLCBhbmQgaW5kZXhfb3AgKi8KKwl2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm9iamVjdDsgICAgICAgICAgICAvKiBuYW1lX29wPT5IQU5ETEUgdG8gb2JqLCBpbmRleF9vcD0+dW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgKi8KKwlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAgICAgICAgICAgICAgKm5vZGU7CisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAgICAgICAgICoqd2hlcmU7Cit9OworCisKKy8qCisgKiBFeHRyYSBvYmplY3QgaXMgdXNlZCBhcyBhZGRpdGlvbmFsIHN0b3JhZ2UgZm9yIHR5cGVzIHRoYXQKKyAqIGhhdmUgQU1MIGNvZGUgaW4gdGhlaXIgZGVjbGFyYXRpb25zICh0ZXJtX2FyZ3MpIHRoYXQgbXVzdCBiZQorICogZXZhbHVhdGVkIGF0IHJ1biB0aW1lLgorICoKKyAqIEN1cnJlbnRseTogUmVnaW9uIGFuZCBmaWVsZF91bml0IHR5cGVzCisgKi8KK3N0cnVjdCBhY3BpX29iamVjdF9leHRyYQoreworCUFDUElfT0JKRUNUX0NPTU1PTl9IRUFERVIKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZV9maWxsMTsKKwl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZF9maWxsMTsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW1sX2xlbmd0aDsKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFtbF9zdGFydDsKKwlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAgICAgICAgICAgICAgKm1ldGhvZF9SRUc7ICAgICAgICAvKiBfUkVHIG1ldGhvZCBmb3IgdGhpcyByZWdpb24gKGlmIGFueSkgKi8KKwl2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnJlZ2lvbl9jb250ZXh0OyAgICAvKiBSZWdpb24tc3BlY2lmaWMgZGF0YSAqLworfTsKKworCisvKiBBZGRpdGlvbmFsIGRhdGEgdGhhdCBjYW4gYmUgYXR0YWNoZWQgdG8gbmFtZXNwYWNlIG5vZGVzICovCisKK3N0cnVjdCBhY3BpX29iamVjdF9kYXRhCit7CisJQUNQSV9PQkpFQ1RfQ09NTU9OX0hFQURFUgorCWFjcGlfb2JqZWN0X2hhbmRsZXIgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyOworCXZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcG9pbnRlcjsKK307CisKKworLyogU3RydWN0dXJlIHVzZWQgd2hlbiBvYmplY3RzIGFyZSBjYWNoZWQgZm9yIHJldXNlICovCisKK3N0cnVjdCBhY3BpX29iamVjdF9jYWNoZV9saXN0Cit7CisJQUNQSV9PQkpFQ1RfQ09NTU9OX0hFQURFUgorCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgICAgICAgICAqbmV4dDsgICAgICAgICAgICAgIC8qIExpbmsgZm9yIG9iamVjdCBjYWNoZSBhbmQgaW50ZXJuYWwgbGlzdHMqLworfTsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCBEZXNjcmlwdG9yIC0gYSBnaWFudCB1bmlvbiBvZiBhbGwgb2YgdGhlIGFib3ZlCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0Cit7CisJc3RydWN0IGFjcGlfb2JqZWN0X2NvbW1vbiAgICAgICAgICAgICAgIGNvbW1vbjsKKwlzdHJ1Y3QgYWNwaV9vYmplY3RfaW50ZWdlciAgICAgICAgICAgICAgaW50ZWdlcjsKKwlzdHJ1Y3QgYWNwaV9vYmplY3Rfc3RyaW5nICAgICAgICAgICAgICAgc3RyaW5nOworCXN0cnVjdCBhY3BpX29iamVjdF9idWZmZXIgICAgICAgICAgICAgICBidWZmZXI7CisJc3RydWN0IGFjcGlfb2JqZWN0X3BhY2thZ2UgICAgICAgICAgICAgIHBhY2thZ2U7CisJc3RydWN0IGFjcGlfb2JqZWN0X2V2ZW50ICAgICAgICAgICAgICAgIGV2ZW50OworCXN0cnVjdCBhY3BpX29iamVjdF9tZXRob2QgICAgICAgICAgICAgICBtZXRob2Q7CisJc3RydWN0IGFjcGlfb2JqZWN0X211dGV4ICAgICAgICAgICAgICAgIG11dGV4OworCXN0cnVjdCBhY3BpX29iamVjdF9yZWdpb24gICAgICAgICAgICAgICByZWdpb247CisJc3RydWN0IGFjcGlfb2JqZWN0X25vdGlmeV9jb21tb24gICAgICAgIGNvbW1vbl9ub3RpZnk7CisJc3RydWN0IGFjcGlfb2JqZWN0X2RldmljZSAgICAgICAgICAgICAgIGRldmljZTsKKwlzdHJ1Y3QgYWNwaV9vYmplY3RfcG93ZXJfcmVzb3VyY2UgICAgICAgcG93ZXJfcmVzb3VyY2U7CisJc3RydWN0IGFjcGlfb2JqZWN0X3Byb2Nlc3NvciAgICAgICAgICAgIHByb2Nlc3NvcjsKKwlzdHJ1Y3QgYWNwaV9vYmplY3RfdGhlcm1hbF96b25lICAgICAgICAgdGhlcm1hbF96b25lOworCXN0cnVjdCBhY3BpX29iamVjdF9maWVsZF9jb21tb24gICAgICAgICBjb21tb25fZmllbGQ7CisJc3RydWN0IGFjcGlfb2JqZWN0X3JlZ2lvbl9maWVsZCAgICAgICAgIGZpZWxkOworCXN0cnVjdCBhY3BpX29iamVjdF9idWZmZXJfZmllbGQgICAgICAgICBidWZmZXJfZmllbGQ7CisJc3RydWN0IGFjcGlfb2JqZWN0X2JhbmtfZmllbGQgICAgICAgICAgIGJhbmtfZmllbGQ7CisJc3RydWN0IGFjcGlfb2JqZWN0X2luZGV4X2ZpZWxkICAgICAgICAgIGluZGV4X2ZpZWxkOworCXN0cnVjdCBhY3BpX29iamVjdF9ub3RpZnlfaGFuZGxlciAgICAgICBub3RpZnk7CisJc3RydWN0IGFjcGlfb2JqZWN0X2FkZHJfaGFuZGxlciAgICAgICAgIGFkZHJlc3Nfc3BhY2U7CisJc3RydWN0IGFjcGlfb2JqZWN0X3JlZmVyZW5jZSAgICAgICAgICAgIHJlZmVyZW5jZTsKKwlzdHJ1Y3QgYWNwaV9vYmplY3RfZXh0cmEgICAgICAgICAgICAgICAgZXh0cmE7CisJc3RydWN0IGFjcGlfb2JqZWN0X2RhdGEgICAgICAgICAgICAgICAgIGRhdGE7CisJc3RydWN0IGFjcGlfb2JqZWN0X2NhY2hlX2xpc3QgICAgICAgICAgIGNhY2hlOworfTsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogdW5pb24gYWNwaV9kZXNjcmlwdG9yIC0gb2JqZWN0cyB0aGF0IHNoYXJlIGEgY29tbW9uIGRlc2NyaXB0b3IgaWRlbnRpZmllcgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKiBPYmplY3QgZGVzY3JpcHRvciB0eXBlcyAqLworCisjZGVmaW5lIEFDUElfREVTQ19UWVBFX0NBQ0hFRCAgICAgICAgICAgMHgwMSAgICAgICAgLyogVXNlZCBvbmx5IHdoZW4gb2JqZWN0IGlzIGNhY2hlZCAqLworI2RlZmluZSBBQ1BJX0RFU0NfVFlQRV9TVEFURSAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgQUNQSV9ERVNDX1RZUEVfU1RBVEVfVVBEQVRFICAgICAweDAzCisjZGVmaW5lIEFDUElfREVTQ19UWVBFX1NUQVRFX1BBQ0tBR0UgICAgMHgwNAorI2RlZmluZSBBQ1BJX0RFU0NfVFlQRV9TVEFURV9DT05UUk9MICAgIDB4MDUKKyNkZWZpbmUgQUNQSV9ERVNDX1RZUEVfU1RBVEVfUlBTQ09QRSAgICAweDA2CisjZGVmaW5lIEFDUElfREVTQ19UWVBFX1NUQVRFX1BTQ09QRSAgICAgMHgwNworI2RlZmluZSBBQ1BJX0RFU0NfVFlQRV9TVEFURV9XU0NPUEUgICAgIDB4MDgKKyNkZWZpbmUgQUNQSV9ERVNDX1RZUEVfU1RBVEVfUkVTVUxUICAgICAweDA5CisjZGVmaW5lIEFDUElfREVTQ19UWVBFX1NUQVRFX05PVElGWSAgICAgMHgwQQorI2RlZmluZSBBQ1BJX0RFU0NfVFlQRV9TVEFURV9USFJFQUQgICAgIDB4MEIKKyNkZWZpbmUgQUNQSV9ERVNDX1RZUEVfV0FMSyAgICAgICAgICAgICAweDBDCisjZGVmaW5lIEFDUElfREVTQ19UWVBFX1BBUlNFUiAgICAgICAgICAgMHgwRAorI2RlZmluZSBBQ1BJX0RFU0NfVFlQRV9PUEVSQU5EICAgICAgICAgIDB4MEUKKyNkZWZpbmUgQUNQSV9ERVNDX1RZUEVfTkFNRUQgICAgICAgICAgICAweDBGCisjZGVmaW5lIEFDUElfREVTQ19UWVBFX01BWCAgICAgICAgICAgICAgMHgwRgorCisKK3VuaW9uIGFjcGlfZGVzY3JpcHRvcgoreworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yX2lkOyAgLyogVG8gZGlmZmVyZW50aWF0ZSB2YXJpb3VzIGludGVybmFsIG9ianMgKi9cCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAgICAgICAgIG9iamVjdDsKKwlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAgICAgICAgICAgICAgbm9kZTsKKwl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAgICAgICAgICAgICAgICAgb3A7Cit9OworCisKKyNlbmRpZiAvKiBfQUNPQkpFQ1RfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2Fjb3V0cHV0LmggYi9pbmNsdWRlL2FjcGkvYWNvdXRwdXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmJlMTgwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hY3BpL2Fjb3V0cHV0LmgKQEAgLTAsMCArMSwxODUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBOYW1lOiBhY291dHB1dC5oIC0tIGRlYnVnIG91dHB1dAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDUsIFIuIEJ5cm9uIE1vb3JlCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIsCisgKiAgICB3aXRob3V0IG1vZGlmaWNhdGlvbi4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSBhdCBtaW5pbXVtIGEgZGlzY2xhaW1lcgorICogICAgc3Vic3RhbnRpYWxseSBzaW1pbGFyIHRvIHRoZSAiTk8gV0FSUkFOVFkiIGRpc2NsYWltZXIgYmVsb3cKKyAqICAgICgiRGlzY2xhaW1lciIpIGFuZCBhbnkgcmVkaXN0cmlidXRpb24gbXVzdCBiZSBjb25kaXRpb25lZCB1cG9uCisgKiAgICBpbmNsdWRpbmcgYSBzdWJzdGFudGlhbGx5IHNpbWlsYXIgRGlzY2xhaW1lciByZXF1aXJlbWVudCBmb3IgZnVydGhlcgorICogICAgYmluYXJ5IHJlZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZXMgb2YgdGhlIGFib3ZlLWxpc3RlZCBjb3B5cmlnaHQgaG9sZGVycyBub3IgdGhlIG5hbWVzCisgKiAgICBvZiBhbnkgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhpcyBzb2Z0d2FyZSBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKCJHUEwiKSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIE5PIFdBUlJBTlRZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORworICogSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisgKi8KKworI2lmbmRlZiBfX0FDT1VUUFVUX0hfXworI2RlZmluZSBfX0FDT1VUUFVUX0hfXworCisvKgorICogRGVidWcgbGV2ZWxzIGFuZCBjb21wb25lbnQgSURzLiAgVGhlc2UgYXJlIHVzZWQgdG8gY29udHJvbCB0aGUKKyAqIGdyYW51bGFyaXR5IG9mIHRoZSBvdXRwdXQgb2YgdGhlIERFQlVHX1BSSU5UIG1hY3JvIC0tIG9uIGEgcGVyLQorICogY29tcG9uZW50IGJhc2lzIGFuZCBhIHBlci1leGNlcHRpb24tdHlwZSBiYXNpcy4KKyAqLworCisvKiBDb21wb25lbnQgSURzIGFyZSB1c2VkIGluIHRoZSBnbG9iYWwgImRlYnVnX2xheWVyIiAqLworCisjZGVmaW5lIEFDUElfVVRJTElUSUVTICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFDUElfSEFSRFdBUkUgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFDUElfRVZFTlRTICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFDUElfVEFCTEVTICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEFDUElfTkFNRVNQQUNFICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEFDUElfUEFSU0VSICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEFDUElfRElTUEFUQ0hFUiAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEFDUElfRVhFQ1VURVIgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEFDUElfUkVTT1VSQ0VTICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEFDUElfQ0FfREVCVUdHRVIgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIEFDUElfT1NfU0VSVklDRVMgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIEFDUElfQ0FfRElTQVNTRU1CTEVSICAgICAgICAweDAwMDAwODAwCisKKy8qIENvbXBvbmVudCBJRHMgZm9yIEFDUEkgdG9vbHMgYW5kIHV0aWxpdGllcyAqLworCisjZGVmaW5lIEFDUElfQ09NUElMRVIgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIEFDUElfVE9PTFMgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisKKyNkZWZpbmUgQUNQSV9BTExfQ09NUE9ORU5UUyAgICAgICAgIDB4MDAwMDNGRkYKKyNkZWZpbmUgQUNQSV9DT01QT05FTlRfREVGQVVMVCAgICAgIChBQ1BJX0FMTF9DT01QT05FTlRTKQorCisKKy8qIENvbXBvbmVudCBJRHMgcmVzZXJ2ZWQgZm9yIEFDUEkgZHJpdmVycyAqLworCisjZGVmaW5lIEFDUElfQUxMX0RSSVZFUlMgICAgICAgICAgICAweEZGRkYwMDAwCisKKworLyoKKyAqIFJhdyBkZWJ1ZyBvdXRwdXQgbGV2ZWxzLCBkbyBub3QgdXNlIHRoZXNlIGluIHRoZSBERUJVR19QUklOVCBtYWNyb3MKKyAqLworI2RlZmluZSBBQ1BJX0xWX0VSUk9SICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBQ1BJX0xWX1dBUk4gICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBQ1BJX0xWX0lOSVQgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBQ1BJX0xWX0RFQlVHX09CSkVDVCAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBQ1BJX0xWX0lORk8gICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBQ1BJX0xWX0FMTF9FWENFUFRJT05TICAgICAgMHgwMDAwMDAxRgorCisvKiBUcmFjZSB2ZXJib3NpdHkgbGV2ZWwgMSBbU3RhbmRhcmQgVHJhY2UgTGV2ZWxdICovCisKKyNkZWZpbmUgQUNQSV9MVl9JTklUX05BTUVTICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQUNQSV9MVl9QQVJTRSAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQUNQSV9MVl9MT0FEICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQUNQSV9MVl9ESVNQQVRDSCAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQUNQSV9MVl9FWEVDICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgQUNQSV9MVl9OQU1FUyAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgQUNQSV9MVl9PUFJFR0lPTiAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgQUNQSV9MVl9CRklFTEQgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgQUNQSV9MVl9UQUJMRVMgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgQUNQSV9MVl9WQUxVRVMgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgQUNQSV9MVl9PQkpFQ1RTICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgQUNQSV9MVl9SRVNPVVJDRVMgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgQUNQSV9MVl9VU0VSX1JFUVVFU1RTICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgQUNQSV9MVl9QQUNLQUdFICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgQUNQSV9MVl9WRVJCT1NJVFkxICAgICAgICAgIDB4MDAwN0ZGNDAgfCBBQ1BJX0xWX0FMTF9FWENFUFRJT05TCisKKy8qIFRyYWNlIHZlcmJvc2l0eSBsZXZlbCAyIFtGdW5jdGlvbiB0cmFjaW5nIGFuZCBtZW1vcnkgYWxsb2NhdGlvbl0gKi8KKworI2RlZmluZSBBQ1BJX0xWX0FMTE9DQVRJT05TICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBBQ1BJX0xWX0ZVTkNUSU9OUyAgICAgICAgICAgMHgwMDIwMDAwMAorI2RlZmluZSBBQ1BJX0xWX09QVElNSVpBVElPTlMgICAgICAgMHgwMDQwMDAwMAorI2RlZmluZSBBQ1BJX0xWX1ZFUkJPU0lUWTIgICAgICAgICAgMHgwMDcwMDAwMCB8IEFDUElfTFZfVkVSQk9TSVRZMQorI2RlZmluZSBBQ1BJX0xWX0FMTCAgICAgICAgICAgICAgICAgQUNQSV9MVl9WRVJCT1NJVFkyCisKKy8qIFRyYWNlIHZlcmJvc2l0eSBsZXZlbCAzIFtUaHJlYWRpbmcsIEkvTywgYW5kIEludGVycnVwdHNdICovCisKKyNkZWZpbmUgQUNQSV9MVl9NVVRFWCAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgQUNQSV9MVl9USFJFQURTICAgICAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgQUNQSV9MVl9JTyAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgQUNQSV9MVl9JTlRFUlJVUFRTICAgICAgICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgQUNQSV9MVl9WRVJCT1NJVFkzICAgICAgICAgIDB4MEYwMDAwMDAgfCBBQ1BJX0xWX1ZFUkJPU0lUWTIKKworLyogRXhjZXB0aW9uYWxseSB2ZXJib3NlIG91dHB1dCAtLSBhbHNvIHVzZWQgaW4gdGhlIGdsb2JhbCAiZGVidWdfbGV2ZWwiICovCisKKyNkZWZpbmUgQUNQSV9MVl9BTUxfRElTQVNTRU1CTEUgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgQUNQSV9MVl9WRVJCT1NFX0lORk8gICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgQUNQSV9MVl9GVUxMX1RBQkxFUyAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgQUNQSV9MVl9FVkVOVFMgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKworI2RlZmluZSBBQ1BJX0xWX1ZFUkJPU0UgICAgICAgICAgICAgMHhGMDAwMDAwMAorCisKKy8qCisgKiBEZWJ1ZyBsZXZlbCBtYWNyb3MgdGhhdCBhcmUgdXNlZCBpbiB0aGUgREVCVUdfUFJJTlQgbWFjcm9zCisgKi8KKyNkZWZpbmUgQUNQSV9ERUJVR19MRVZFTChkbCkgICAgICAgICh1MzIpIGRsLF9fTElORV9fLCZfZGVidWdfaW5mbworCisvKiBFeGNlcHRpb24gbGV2ZWwgLS0gdXNlZCBpbiB0aGUgZ2xvYmFsICJkZWJ1Z19sZXZlbCIgKi8KKworI2RlZmluZSBBQ1BJX0RCX0VSUk9SICAgICAgICAgICAgICAgQUNQSV9ERUJVR19MRVZFTCAoQUNQSV9MVl9FUlJPUikKKyNkZWZpbmUgQUNQSV9EQl9XQVJOICAgICAgICAgICAgICAgIEFDUElfREVCVUdfTEVWRUwgKEFDUElfTFZfV0FSTikKKyNkZWZpbmUgQUNQSV9EQl9JTklUICAgICAgICAgICAgICAgIEFDUElfREVCVUdfTEVWRUwgKEFDUElfTFZfSU5JVCkKKyNkZWZpbmUgQUNQSV9EQl9ERUJVR19PQkpFQ1QgICAgICAgIEFDUElfREVCVUdfTEVWRUwgKEFDUElfTFZfREVCVUdfT0JKRUNUKQorI2RlZmluZSBBQ1BJX0RCX0lORk8gICAgICAgICAgICAgICAgQUNQSV9ERUJVR19MRVZFTCAoQUNQSV9MVl9JTkZPKQorI2RlZmluZSBBQ1BJX0RCX0FMTF9FWENFUFRJT05TICAgICAgQUNQSV9ERUJVR19MRVZFTCAoQUNQSV9MVl9BTExfRVhDRVBUSU9OUykKKworCisvKiBUcmFjZSBsZXZlbCAtLSBhbHNvIHVzZWQgaW4gdGhlIGdsb2JhbCAiZGVidWdfbGV2ZWwiICovCisKKyNkZWZpbmUgQUNQSV9EQl9JTklUX05BTUVTICAgICAgICAgIEFDUElfREVCVUdfTEVWRUwgKEFDUElfTFZfSU5JVF9OQU1FUykKKyNkZWZpbmUgQUNQSV9EQl9USFJFQURTICAgICAgICAgICAgIEFDUElfREVCVUdfTEVWRUwgKEFDUElfTFZfVEhSRUFEUykKKyNkZWZpbmUgQUNQSV9EQl9QQVJTRSAgICAgICAgICAgICAgIEFDUElfREVCVUdfTEVWRUwgKEFDUElfTFZfUEFSU0UpCisjZGVmaW5lIEFDUElfREJfRElTUEFUQ0ggICAgICAgICAgICBBQ1BJX0RFQlVHX0xFVkVMIChBQ1BJX0xWX0RJU1BBVENIKQorI2RlZmluZSBBQ1BJX0RCX0xPQUQgICAgICAgICAgICAgICAgQUNQSV9ERUJVR19MRVZFTCAoQUNQSV9MVl9MT0FEKQorI2RlZmluZSBBQ1BJX0RCX0VYRUMgICAgICAgICAgICAgICAgQUNQSV9ERUJVR19MRVZFTCAoQUNQSV9MVl9FWEVDKQorI2RlZmluZSBBQ1BJX0RCX05BTUVTICAgICAgICAgICAgICAgQUNQSV9ERUJVR19MRVZFTCAoQUNQSV9MVl9OQU1FUykKKyNkZWZpbmUgQUNQSV9EQl9PUFJFR0lPTiAgICAgICAgICAgIEFDUElfREVCVUdfTEVWRUwgKEFDUElfTFZfT1BSRUdJT04pCisjZGVmaW5lIEFDUElfREJfQkZJRUxEICAgICAgICAgICAgICBBQ1BJX0RFQlVHX0xFVkVMIChBQ1BJX0xWX0JGSUVMRCkKKyNkZWZpbmUgQUNQSV9EQl9UQUJMRVMgICAgICAgICAgICAgIEFDUElfREVCVUdfTEVWRUwgKEFDUElfTFZfVEFCTEVTKQorI2RlZmluZSBBQ1BJX0RCX0ZVTkNUSU9OUyAgICAgICAgICAgQUNQSV9ERUJVR19MRVZFTCAoQUNQSV9MVl9GVU5DVElPTlMpCisjZGVmaW5lIEFDUElfREJfT1BUSU1JWkFUSU9OUyAgICAgICBBQ1BJX0RFQlVHX0xFVkVMIChBQ1BJX0xWX09QVElNSVpBVElPTlMpCisjZGVmaW5lIEFDUElfREJfVkFMVUVTICAgICAgICAgICAgICBBQ1BJX0RFQlVHX0xFVkVMIChBQ1BJX0xWX1ZBTFVFUykKKyNkZWZpbmUgQUNQSV9EQl9PQkpFQ1RTICAgICAgICAgICAgIEFDUElfREVCVUdfTEVWRUwgKEFDUElfTFZfT0JKRUNUUykKKyNkZWZpbmUgQUNQSV9EQl9BTExPQ0FUSU9OUyAgICAgICAgIEFDUElfREVCVUdfTEVWRUwgKEFDUElfTFZfQUxMT0NBVElPTlMpCisjZGVmaW5lIEFDUElfREJfUkVTT1VSQ0VTICAgICAgICAgICBBQ1BJX0RFQlVHX0xFVkVMIChBQ1BJX0xWX1JFU09VUkNFUykKKyNkZWZpbmUgQUNQSV9EQl9JTyAgICAgICAgICAgICAgICAgIEFDUElfREVCVUdfTEVWRUwgKEFDUElfTFZfSU8pCisjZGVmaW5lIEFDUElfREJfSU5URVJSVVBUUyAgICAgICAgICBBQ1BJX0RFQlVHX0xFVkVMIChBQ1BJX0xWX0lOVEVSUlVQVFMpCisjZGVmaW5lIEFDUElfREJfVVNFUl9SRVFVRVNUUyAgICAgICBBQ1BJX0RFQlVHX0xFVkVMIChBQ1BJX0xWX1VTRVJfUkVRVUVTVFMpCisjZGVmaW5lIEFDUElfREJfUEFDS0FHRSAgICAgICAgICAgICBBQ1BJX0RFQlVHX0xFVkVMIChBQ1BJX0xWX1BBQ0tBR0UpCisjZGVmaW5lIEFDUElfREJfTVVURVggICAgICAgICAgICAgICBBQ1BJX0RFQlVHX0xFVkVMIChBQ1BJX0xWX01VVEVYKQorCisjZGVmaW5lIEFDUElfREJfQUxMICAgICAgICAgICAgICAgICBBQ1BJX0RFQlVHX0xFVkVMIChBQ1BJX0xWX0FMTCkKKworCisvKiBEZWZhdWx0cyBmb3IgZGVidWdfbGV2ZWwsIGRlYnVnIGFuZCBub3JtYWwgKi8KKworI2RlZmluZSBBQ1BJX0RFQlVHX0RFRkFVTFQgICAgICAgICAgKEFDUElfTFZfSU5JVCB8IEFDUElfTFZfV0FSTiB8IEFDUElfTFZfRVJST1IgfCBBQ1BJX0xWX0RFQlVHX09CSkVDVCkKKyNkZWZpbmUgQUNQSV9OT1JNQUxfREVGQVVMVCAgICAgICAgIChBQ1BJX0xWX0lOSVQgfCBBQ1BJX0xWX1dBUk4gfCBBQ1BJX0xWX0VSUk9SIHwgQUNQSV9MVl9ERUJVR19PQkpFQ1QpCisjZGVmaW5lIEFDUElfREVCVUdfQUxMICAgICAgICAgICAgICAoQUNQSV9MVl9BTUxfRElTQVNTRU1CTEUgfCBBQ1BJX0xWX0FMTF9FWENFUFRJT05TIHwgQUNQSV9MVl9BTEwpCisKKworI2VuZGlmIC8qIF9fQUNPVVRQVVRfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWNwYXJzZXIuaCBiL2luY2x1ZGUvYWNwaS9hY3BhcnNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwMzk1ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FjcGkvYWNwYXJzZXIuaApAQCAtMCwwICsxLDM1MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIE1vZHVsZSBOYW1lOiBhY3BhcnNlci5oIC0gQU1MIFBhcnNlciBzdWJjb21wb25lbnQgcHJvdG90eXBlcyBhbmQgZGVmaW5lcworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDUsIFIuIEJ5cm9uIE1vb3JlCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIsCisgKiAgICB3aXRob3V0IG1vZGlmaWNhdGlvbi4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSBhdCBtaW5pbXVtIGEgZGlzY2xhaW1lcgorICogICAgc3Vic3RhbnRpYWxseSBzaW1pbGFyIHRvIHRoZSAiTk8gV0FSUkFOVFkiIGRpc2NsYWltZXIgYmVsb3cKKyAqICAgICgiRGlzY2xhaW1lciIpIGFuZCBhbnkgcmVkaXN0cmlidXRpb24gbXVzdCBiZSBjb25kaXRpb25lZCB1cG9uCisgKiAgICBpbmNsdWRpbmcgYSBzdWJzdGFudGlhbGx5IHNpbWlsYXIgRGlzY2xhaW1lciByZXF1aXJlbWVudCBmb3IgZnVydGhlcgorICogICAgYmluYXJ5IHJlZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZXMgb2YgdGhlIGFib3ZlLWxpc3RlZCBjb3B5cmlnaHQgaG9sZGVycyBub3IgdGhlIG5hbWVzCisgKiAgICBvZiBhbnkgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhpcyBzb2Z0d2FyZSBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKCJHUEwiKSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIE5PIFdBUlJBTlRZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORworICogSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisgKi8KKworCisjaWZuZGVmIF9fQUNQQVJTRVJfSF9fCisjZGVmaW5lIF9fQUNQQVJTRVJfSF9fCisKKworI2RlZmluZSBPUF9IQVNfUkVUVVJOX1ZBTFVFICAgICAgICAgICAgIDEKKworLyogdmFyaWFibGUgIyBhcmd1bWVudHMgKi8KKworI2RlZmluZSBBQ1BJX1ZBUl9BUkdTICAgICAgICAgICAgICAgICAgIEFDUElfVUlOVDMyX01BWAorCisKKyNkZWZpbmUgQUNQSV9QQVJTRV9ERUxFVEVfVFJFRSAgICAgICAgICAweDAwMDEKKyNkZWZpbmUgQUNQSV9QQVJTRV9OT19UUkVFX0RFTEVURSAgICAgICAweDAwMDAKKyNkZWZpbmUgQUNQSV9QQVJTRV9UUkVFX01BU0sgICAgICAgICAgICAweDAwMDEKKworI2RlZmluZSBBQ1BJX1BBUlNFX0xPQURfUEFTUzEgICAgICAgICAgIDB4MDAxMAorI2RlZmluZSBBQ1BJX1BBUlNFX0xPQURfUEFTUzIgICAgICAgICAgIDB4MDAyMAorI2RlZmluZSBBQ1BJX1BBUlNFX0VYRUNVVEUgICAgICAgICAgICAgIDB4MDAzMAorI2RlZmluZSBBQ1BJX1BBUlNFX01PREVfTUFTSyAgICAgICAgICAgIDB4MDAzMAorCisjZGVmaW5lIEFDUElfUEFSU0VfREVGRVJSRURfT1AgICAgICAgICAgMHgwMTAwCisKKy8qIFBhcnNlciBleHRlcm5hbCBpbnRlcmZhY2VzICovCisKK2FjcGlfc3RhdHVzCithY3BpX3BzeF9sb2FkX3RhYmxlICgKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwY29kZV9hZGRyLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNvZGVfbGVuZ3RoKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfcHN4X2V4ZWN1dGUgKAorCXN0cnVjdCBhY3BpX3BhcmFtZXRlcl9pbmZvICAgICAgKmluZm8pOworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBQYXJzZXIgaW50ZXJmYWNlcworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKiBwc2FyZ3MgLSBQYXJzZSBBTUwgb3Bjb2RlIGFyZ3VtZW50cyAqLworCit1OCAqCithY3BpX3BzX2dldF9uZXh0X3BhY2thZ2VfZW5kICgKKwlzdHJ1Y3QgYWNwaV9wYXJzZV9zdGF0ZSAgICAgICAgICpwYXJzZXJfc3RhdGUpOworCit1MzIKK2FjcGlfcHNfZ2V0X25leHRfcGFja2FnZV9sZW5ndGggKAorCXN0cnVjdCBhY3BpX3BhcnNlX3N0YXRlICAgICAgICAgKnBhcnNlcl9zdGF0ZSk7CisKK2NoYXIgKgorYWNwaV9wc19nZXRfbmV4dF9uYW1lc3RyaW5nICgKKwlzdHJ1Y3QgYWNwaV9wYXJzZV9zdGF0ZSAgICAgICAgICpwYXJzZXJfc3RhdGUpOworCit2b2lkCithY3BpX3BzX2dldF9uZXh0X3NpbXBsZV9hcmcgKAorCXN0cnVjdCBhY3BpX3BhcnNlX3N0YXRlICAgICAgICAgKnBhcnNlcl9zdGF0ZSwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ190eXBlLAorCXVuaW9uIGFjcGlfcGFyc2Vfb2JqZWN0ICAgICAgICAgKmFyZyk7CisKK2FjcGlfc3RhdHVzCithY3BpX3BzX2dldF9uZXh0X25hbWVwYXRoICgKKwlzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICAgICAgICAgICp3YWxrX3N0YXRlLAorCXN0cnVjdCBhY3BpX3BhcnNlX3N0YXRlICAgICAgICAgKnBhcnNlcl9zdGF0ZSwKKwl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAgICAgICAgICphcmcsCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2RfY2FsbCk7CisKK3VuaW9uIGFjcGlfcGFyc2Vfb2JqZWN0ICoKK2FjcGlfcHNfZ2V0X25leHRfZmllbGQgKAorCXN0cnVjdCBhY3BpX3BhcnNlX3N0YXRlICAgICAgICAgKnBhcnNlcl9zdGF0ZSk7CisKK2FjcGlfc3RhdHVzCithY3BpX3BzX2dldF9uZXh0X2FyZyAoCisJc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAgICAgICAgICAqd2Fsa19zdGF0ZSwKKwlzdHJ1Y3QgYWNwaV9wYXJzZV9zdGF0ZSAgICAgICAgICpwYXJzZXJfc3RhdGUsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdfdHlwZSwKKwl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAgICAgICAgICoqcmV0dXJuX2FyZyk7CisKKworLyogcHNmaW5kICovCisKK3VuaW9uIGFjcGlfcGFyc2Vfb2JqZWN0ICoKK2FjcGlfcHNfZmluZF9uYW1lICgKKwl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAgICAgICAgICpzY29wZSwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGNvZGUpOworCit1bmlvbiBhY3BpX3BhcnNlX29iamVjdCoKK2FjcGlfcHNfZ2V0X3BhcmVudCAoCisJdW5pb24gYWNwaV9wYXJzZV9vYmplY3QgICAgICAgICAqb3ApOworCisKKy8qIHBzb3Bjb2RlIC0gQU1MIE9wY29kZSBpbmZvcm1hdGlvbiAqLworCitjb25zdCBzdHJ1Y3QgYWNwaV9vcGNvZGVfaW5mbyAqCithY3BpX3BzX2dldF9vcGNvZGVfaW5mbyAoCisJdTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGNvZGUpOworCitjaGFyICoKK2FjcGlfcHNfZ2V0X29wY29kZV9uYW1lICgKKwl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wY29kZSk7CisKKworLyogcHNwYXJzZSAtIHRvcCBsZXZlbCBwYXJzaW5nIHJvdXRpbmVzICovCisKK3UzMgorYWNwaV9wc19nZXRfb3Bjb2RlX3NpemUgKAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Bjb2RlKTsKKwordm9pZAorYWNwaV9wc19jb21wbGV0ZV90aGlzX29wICgKKwlzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICAgICAgICAgICp3YWxrX3N0YXRlLAorCXVuaW9uIGFjcGlfcGFyc2Vfb2JqZWN0ICAgICAgICAgKm9wKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfcHNfbmV4dF9wYXJzZV9zdGF0ZSAoCisJc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAgICAgICAgICAqd2Fsa19zdGF0ZSwKKwl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAgICAgICAgICpvcCwKKwlhY3BpX3N0YXR1cyAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrX3N0YXR1cyk7CisKK2FjcGlfc3RhdHVzCithY3BpX3BzX2ZpbmRfb2JqZWN0ICgKKwlzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICAgICAgICAgICp3YWxrX3N0YXRlLAorCXVuaW9uIGFjcGlfcGFyc2Vfb2JqZWN0ICAgICAgICAgKipvdXRfb3ApOworCit2b2lkCithY3BpX3BzX2RlbGV0ZV9wYXJzZV90cmVlICgKKwl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAgICAgICAgICpyb290KTsKKworYWNwaV9zdGF0dXMKK2FjcGlfcHNfcGFyc2VfbG9vcCAoCisJc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAgICAgICAgICAqd2Fsa19zdGF0ZSk7CisKK2FjcGlfc3RhdHVzCithY3BpX3BzX3BhcnNlX2FtbCAoCisJc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAgICAgICAgICAqd2Fsa19zdGF0ZSk7CisKK2FjcGlfc3RhdHVzCithY3BpX3BzX3BhcnNlX3RhYmxlICgKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICphbWwsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbWxfc2l6ZSwKKwlhY3BpX3BhcnNlX2Rvd253YXJkcyAgICAgICAgICAgIGRlc2NlbmRpbmdfY2FsbGJhY2ssCisJYWNwaV9wYXJzZV91cHdhcmRzICAgICAgICAgICAgICBhc2NlbmRpbmdfY2FsbGJhY2ssCisJdW5pb24gYWNwaV9wYXJzZV9vYmplY3QgICAgICAgICAqKnJvb3Rfb2JqZWN0KTsKKwordTE2CithY3BpX3BzX3BlZWtfb3Bjb2RlICgKKwlzdHJ1Y3QgYWNwaV9wYXJzZV9zdGF0ZSAgICAgICAgICpzdGF0ZSk7CisKKworLyogcHNzY29wZSAtIFNjb3BlIHN0YWNrIG1hbmFnZW1lbnQgcm91dGluZXMgKi8KKworCithY3BpX3N0YXR1cworYWNwaV9wc19pbml0X3Njb3BlICgKKwlzdHJ1Y3QgYWNwaV9wYXJzZV9zdGF0ZSAgICAgICAgICpwYXJzZXJfc3RhdGUsCisJdW5pb24gYWNwaV9wYXJzZV9vYmplY3QgICAgICAgICAqcm9vdCk7CisKK3VuaW9uIGFjcGlfcGFyc2Vfb2JqZWN0ICoKK2FjcGlfcHNfZ2V0X3BhcmVudF9zY29wZSAoCisJc3RydWN0IGFjcGlfcGFyc2Vfc3RhdGUgICAgICAgICAqc3RhdGUpOworCit1OAorYWNwaV9wc19oYXNfY29tcGxldGVkX3Njb3BlICgKKwlzdHJ1Y3QgYWNwaV9wYXJzZV9zdGF0ZSAgICAgICAgICpwYXJzZXJfc3RhdGUpOworCit2b2lkCithY3BpX3BzX3BvcF9zY29wZSAoCisJc3RydWN0IGFjcGlfcGFyc2Vfc3RhdGUgICAgICAgICAqcGFyc2VyX3N0YXRlLAorCXVuaW9uIGFjcGlfcGFyc2Vfb2JqZWN0ICAgICAgICAgKipvcCwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICphcmdfbGlzdCwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICphcmdfY291bnQpOworCithY3BpX3N0YXR1cworYWNwaV9wc19wdXNoX3Njb3BlICgKKwlzdHJ1Y3QgYWNwaV9wYXJzZV9zdGF0ZSAgICAgICAgICpwYXJzZXJfc3RhdGUsCisJdW5pb24gYWNwaV9wYXJzZV9vYmplY3QgICAgICAgICAqb3AsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1haW5pbmdfYXJncywKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ19jb3VudCk7CisKK3ZvaWQKK2FjcGlfcHNfY2xlYW51cF9zY29wZSAoCisJc3RydWN0IGFjcGlfcGFyc2Vfc3RhdGUgICAgICAgICAqc3RhdGUpOworCisKKy8qIHBzdHJlZSAtIHBhcnNlIHRyZWUgbWFuaXB1bGF0aW9uIHJvdXRpbmVzICovCisKK3ZvaWQKK2FjcGlfcHNfYXBwZW5kX2FyZygKKwl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAgICAgICAgICpvcCwKKwl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAgICAgICAgICphcmcpOworCit1bmlvbiBhY3BpX3BhcnNlX29iamVjdCoKK2FjcGlfcHNfZmluZCAoCisJdW5pb24gYWNwaV9wYXJzZV9vYmplY3QgICAgICAgICAqc2NvcGUsCisJY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcGF0aCwKKwl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wY29kZSwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZSk7CisKK3VuaW9uIGFjcGlfcGFyc2Vfb2JqZWN0ICoKK2FjcGlfcHNfZ2V0X2FyZygKKwl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAgICAgICAgICpvcCwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmduKTsKKworI2lmZGVmIEFDUElfRlVUVVJFX1VTQUdFCit1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAqCithY3BpX3BzX2dldF9jaGlsZCAoCisJdW5pb24gYWNwaV9wYXJzZV9vYmplY3QgICAgICAgICAqb3ApOworCit1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAqCithY3BpX3BzX2dldF9kZXB0aF9uZXh0ICgKKwl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAgICAgICAgICpvcmlnaW4sCisJdW5pb24gYWNwaV9wYXJzZV9vYmplY3QgICAgICAgICAqb3ApOworI2VuZGlmICAvKiAgQUNQSV9GVVRVUkVfVVNBR0UgICovCisKKworLyogcHN3YWxrIC0gcGFyc2UgdHJlZSB3YWxrIHJvdXRpbmVzICovCisKK2FjcGlfc3RhdHVzCithY3BpX3BzX3dhbGtfcGFyc2VkX2FtbCAoCisJdW5pb24gYWNwaV9wYXJzZV9vYmplY3QgICAgICAgICAqc3RhcnRfb3AsCisJdW5pb24gYWNwaV9wYXJzZV9vYmplY3QgICAgICAgICAqZW5kX29wLAorCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgKm10aF9kZXNjLAorCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICAgICAgKnN0YXJ0X25vZGUsCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAqKnBhcmFtcywKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICoqY2FsbGVyX3JldHVybl9kZXNjLAorCWFjcGlfb3duZXJfaWQgICAgICAgICAgICAgICAgICAgb3duZXJfaWQsCisJYWNwaV9wYXJzZV9kb3dud2FyZHMgICAgICAgICAgICBkZXNjZW5kaW5nX2NhbGxiYWNrLAorCWFjcGlfcGFyc2VfdXB3YXJkcyAgICAgICAgICAgICAgYXNjZW5kaW5nX2NhbGxiYWNrKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfcHNfZ2V0X25leHRfd2Fsa19vcCAoCisJc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAgICAgICAgICAqd2Fsa19zdGF0ZSwKKwl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAgICAgICAgICpvcCwKKwlhY3BpX3BhcnNlX3Vwd2FyZHMgICAgICAgICAgICAgIGFzY2VuZGluZ19jYWxsYmFjayk7CisKK2FjcGlfc3RhdHVzCithY3BpX3BzX2RlbGV0ZV9jb21wbGV0ZWRfb3AgKAorCXN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgICAgICAgICAgKndhbGtfc3RhdGUpOworCisKKy8qIHBzdXRpbHMgLSBwYXJzZXIgdXRpbGl0aWVzICovCisKK3VuaW9uIGFjcGlfcGFyc2Vfb2JqZWN0ICoKK2FjcGlfcHNfY3JlYXRlX3Njb3BlX29wICgKKwl2b2lkKTsKKwordm9pZAorYWNwaV9wc19pbml0X29wICgKKwl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAgICAgICAgICpvcCwKKwl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wY29kZSk7CisKK3VuaW9uIGFjcGlfcGFyc2Vfb2JqZWN0ICoKK2FjcGlfcHNfYWxsb2Nfb3AgKAorCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Bjb2RlKTsKKwordm9pZAorYWNwaV9wc19mcmVlX29wICgKKwl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAgICAgICAgICpvcCk7CisKKyNpZmRlZiBBQ1BJX0VOQUJMRV9PQkpFQ1RfQ0FDSEUKK3ZvaWQKK2FjcGlfcHNfZGVsZXRlX3BhcnNlX2NhY2hlICgKKwl2b2lkKTsKKyNlbmRpZgorCit1OAorYWNwaV9wc19pc19sZWFkaW5nX2NoYXIgKAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyk7CisKK3U4CithY3BpX3BzX2lzX3ByZWZpeF9jaGFyICgKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMpOworCisjaWZkZWYgQUNQSV9GVVRVUkVfVVNBR0UKK3UzMgorYWNwaV9wc19nZXRfbmFtZSgKKwl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAgICAgICAgICpvcCk7CisjZW5kaWYKKwordm9pZAorYWNwaV9wc19zZXRfbmFtZSgKKwl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAgICAgICAgICpvcCwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUpOworCisKKy8qIHBzZHVtcCAtIGRpc3BsYXkgcGFyc2VyIHRyZWUgKi8KKwordTMyCithY3BpX3BzX3NwcmludF9wYXRoICgKKwljaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICpidWZmZXJfc3RhcnQsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJfc2l6ZSwKKwl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAgICAgICAgICpvcCk7CisKK3UzMgorYWNwaV9wc19zcHJpbnRfb3AgKAorCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmJ1ZmZlcl9zdGFydCwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl9zaXplLAorCXVuaW9uIGFjcGlfcGFyc2Vfb2JqZWN0ICAgICAgICAgKm9wKTsKKwordm9pZAorYWNwaV9wc19zaG93ICgKKwl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAgICAgICAgICpvcCk7CisKKworI2VuZGlmIC8qIF9fQUNQQVJTRVJfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWNwaS5oIGIvaW5jbHVkZS9hY3BpL2FjcGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDUzMjUyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hY3BpL2FjcGkuaApAQCAtMCwwICsxLDY5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogTmFtZTogYWNwaS5oIC0gTWFzdGVyIGluY2x1ZGUgZmlsZSwgUHVibGljcyBhbmQgZXh0ZXJuYWwgZGF0YS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA1LCBSLiBCeXJvbiBNb29yZQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLAorICogICAgd2l0aG91dCBtb2RpZmljYXRpb24uCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgYXQgbWluaW11bSBhIGRpc2NsYWltZXIKKyAqICAgIHN1YnN0YW50aWFsbHkgc2ltaWxhciB0byB0aGUgIk5PIFdBUlJBTlRZIiBkaXNjbGFpbWVyIGJlbG93CisgKiAgICAoIkRpc2NsYWltZXIiKSBhbmQgYW55IHJlZGlzdHJpYnV0aW9uIG11c3QgYmUgY29uZGl0aW9uZWQgdXBvbgorICogICAgaW5jbHVkaW5nIGEgc3Vic3RhbnRpYWxseSBzaW1pbGFyIERpc2NsYWltZXIgcmVxdWlyZW1lbnQgZm9yIGZ1cnRoZXIKKyAqICAgIGJpbmFyeSByZWRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWVzIG9mIHRoZSBhYm92ZS1saXN0ZWQgY29weXJpZ2h0IGhvbGRlcnMgbm9yIHRoZSBuYW1lcworICogICAgb2YgYW55IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBOTyBXQVJSQU5UWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcKKyAqIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorICovCisKKyNpZm5kZWYgX19BQ1BJX0hfXworI2RlZmluZSBfX0FDUElfSF9fCisKKy8qCisgKiBDb21tb24gaW5jbHVkZXMgZm9yIGFsbCBBQ1BJIGRyaXZlciBmaWxlcworICogV2UgcHV0IHRoZW0gaGVyZSBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gZHVwbGljYXRlIHRoZW0KKyAqIGluIHRoZSByZXN0IG9mIHRoZSBzb3VyY2UgY29kZSBhZ2FpbiBhbmQgYWdhaW4uCisgKi8KKyNpbmNsdWRlICJhY2NvbmZpZy5oIiAgICAgICAgICAgLyogQ29uZmlndXJhdGlvbiBjb25zdGFudHMgKi8KKyNpbmNsdWRlICJwbGF0Zm9ybS9hY2Vudi5oIiAgICAgLyogVGFyZ2V0IGVudmlyb25tZW50IHNwZWNpZmljIGl0ZW1zICovCisjaW5jbHVkZSAiYWN0eXBlcy5oIiAgICAgICAgICAgIC8qIEZ1bmRhbWVudGFsIGNvbW1vbiBkYXRhIHR5cGVzICovCisjaW5jbHVkZSAiYWNleGNlcC5oIiAgICAgICAgICAgIC8qIEFDUEkgZXhjZXB0aW9uIGNvZGVzICovCisjaW5jbHVkZSAiYWNtYWNyb3MuaCIgICAgICAgICAgIC8qIEMgbWFjcm9zICovCisjaW5jbHVkZSAiYWN0YmwuaCIgICAgICAgICAgICAgIC8qIEFDUEkgdGFibGUgZGVmaW5pdGlvbnMgKi8KKyNpbmNsdWRlICJhY2xvY2FsLmgiICAgICAgICAgICAgLyogSW50ZXJuYWwgZGF0YSB0eXBlcyAqLworI2luY2x1ZGUgImFjb3V0cHV0LmgiICAgICAgICAgICAvKiBFcnJvciBvdXRwdXQgYW5kIERlYnVnIG1hY3JvcyAqLworI2luY2x1ZGUgImFjcGlvc3hmLmgiICAgICAgICAgICAvKiBJbnRlcmZhY2VzIHRvIHRoZSBBQ1BJLXRvLU9TIGxheWVyKi8KKyNpbmNsdWRlICJhY3BpeGYuaCIgICAgICAgICAgICAgLyogQUNQSSBjb3JlIHN1YnN5c3RlbSBleHRlcm5hbCBpbnRlcmZhY2VzICovCisjaW5jbHVkZSAiYWNvYmplY3QuaCIgICAgICAgICAgIC8qIEFDUEkgaW50ZXJuYWwgb2JqZWN0ICovCisjaW5jbHVkZSAiYWNzdHJ1Y3QuaCIgICAgICAgICAgIC8qIENvbW1vbiBzdHJ1Y3R1cmVzICovCisjaW5jbHVkZSAiYWNnbG9iYWwuaCIgICAgICAgICAgIC8qIEFsbCBnbG9iYWwgdmFyaWFibGVzICovCisjaW5jbHVkZSAiYWNod2FyZS5oIiAgICAgICAgICAgIC8qIEhhcmR3YXJlIGRlZmluZXMgYW5kIGludGVyZmFjZXMgKi8KKyNpbmNsdWRlICJhY3V0aWxzLmgiICAgICAgICAgICAgLyogVXRpbGl0eSBpbnRlcmZhY2VzICovCisKKworI2VuZGlmIC8qIF9fQUNQSV9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY3BpX2J1cy5oIGIvaW5jbHVkZS9hY3BpL2FjcGlfYnVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYyN2JjNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYWNwaS9hY3BpX2J1cy5oCkBAIC0wLDAgKzEsMzQxIEBACisvKgorICogIGFjcGlfYnVzLmggLSBBQ1BJIEJ1cyBEcml2ZXIgKCRSZXZpc2lvbjogMjIgJCkKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyIEFuZHkgR3JvdmVyIDxhbmRyZXcuZ3JvdmVyQGludGVsLmNvbT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIgUGF1bCBEaWVmZW5iYXVnaCA8cGF1bC5zLmRpZWZlbmJhdWdoQGludGVsLmNvbT4KKyAqCisgKiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CisgKiAgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EuCisgKgorICogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyAqLworCisjaWZuZGVmIF9fQUNQSV9CVVNfSF9fCisjZGVmaW5lIF9fQUNQSV9CVVNfSF9fCisKKyNpbmNsdWRlIDxsaW51eC9rb2JqZWN0Lmg+CisKKyNpbmNsdWRlIDxhY3BpL2FjcGkuaD4KKworI2RlZmluZSBQUkVGSVgJCQkiQUNQSTogIgorCisvKiBUQkQ6IE1ha2UgZHluYW1pYyAqLworI2RlZmluZSBBQ1BJX01BWF9IQU5ETEVTCTEwCitzdHJ1Y3QgYWNwaV9oYW5kbGVfbGlzdCB7CisJdTMyCQkJY291bnQ7CisJYWNwaV9oYW5kbGUJCWhhbmRsZXNbQUNQSV9NQVhfSEFORExFU107Cit9OworCisKKy8qIGFjcGlfdXRpbHMuaCAqLworYWNwaV9zdGF0dXMKK2FjcGlfZXh0cmFjdF9wYWNrYWdlICgKKwl1bmlvbiBhY3BpX29iamVjdCAgICAgICAqcGFja2FnZSwKKwlzdHJ1Y3QgYWNwaV9idWZmZXIgICAgICAqZm9ybWF0LAorCXN0cnVjdCBhY3BpX2J1ZmZlciAgICAgICpidWZmZXIpOworYWNwaV9zdGF0dXMKK2FjcGlfZXZhbHVhdGVfaW50ZWdlciAoCisJYWNwaV9oYW5kbGUgICAgICAgICAgICAgaGFuZGxlLAorCWFjcGlfc3RyaW5nICAgICAgICAgICAgIHBhdGhuYW1lLAorCXN0cnVjdCBhY3BpX29iamVjdF9saXN0ICphcmd1bWVudHMsCisJdW5zaWduZWQgbG9uZyAgICAgICAgICAgKmRhdGEpOworYWNwaV9zdGF0dXMKK2FjcGlfZXZhbHVhdGVfcmVmZXJlbmNlICgKKwlhY3BpX2hhbmRsZSAgICAgICAgICAgICBoYW5kbGUsCisJYWNwaV9zdHJpbmcgICAgICAgICAgICAgcGF0aG5hbWUsCisJc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgKmFyZ3VtZW50cywKKwlzdHJ1Y3QgYWNwaV9oYW5kbGVfbGlzdCAqbGlzdCk7CisKKworI2lmZGVmIENPTkZJR19BQ1BJX0JVUworCisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorCisjZGVmaW5lIEFDUElfQlVTX0ZJTEVfUk9PVAkiYWNwaSIKK2V4dGVybiBzdHJ1Y3QgcHJvY19kaXJfZW50cnkJKmFjcGlfcm9vdF9kaXI7CitleHRlcm4gRkFEVF9ERVNDUklQVE9SCQlhY3BpX2ZhZHQ7CisKK2VudW0gYWNwaV9idXNfcmVtb3ZhbF90eXBlIHsKKwlBQ1BJX0JVU19SRU1PVkFMX05PUk1BTAk9IDAsCisJQUNQSV9CVVNfUkVNT1ZBTF9FSkVDVCwKKwlBQ1BJX0JVU19SRU1PVkFMX1NVUFJJU0UsCisJQUNQSV9CVVNfUkVNT1ZBTF9UWVBFX0NPVU5UCit9OworCitlbnVtIGFjcGlfYnVzX2RldmljZV90eXBlIHsKKwlBQ1BJX0JVU19UWVBFX0RFVklDRQk9IDAsCisJQUNQSV9CVVNfVFlQRV9QT1dFUiwKKwlBQ1BJX0JVU19UWVBFX1BST0NFU1NPUiwKKwlBQ1BJX0JVU19UWVBFX1RIRVJNQUwsCisJQUNQSV9CVVNfVFlQRV9TWVNURU0sCisJQUNQSV9CVVNfVFlQRV9QT1dFUl9CVVRUT04sCisJQUNQSV9CVVNfVFlQRV9TTEVFUF9CVVRUT04sCisJQUNQSV9CVVNfREVWSUNFX1RZUEVfQ09VTlQKK307CisKK3N0cnVjdCBhY3BpX2RyaXZlcjsKK3N0cnVjdCBhY3BpX2RldmljZTsKKworCisvKgorICogQUNQSSBEcml2ZXIKKyAqIC0tLS0tLS0tLS0tCisgKi8KKwordHlwZWRlZiBpbnQgKCphY3BpX29wX2FkZCkJKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKTsKK3R5cGVkZWYgaW50ICgqYWNwaV9vcF9yZW1vdmUpCShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgaW50IHR5cGUpOwordHlwZWRlZiBpbnQgKCphY3BpX29wX2xvY2spCShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgaW50IHR5cGUpOwordHlwZWRlZiBpbnQgKCphY3BpX29wX3N0YXJ0KQkoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpOwordHlwZWRlZiBpbnQgKCphY3BpX29wX3N0b3ApCShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgaW50IHR5cGUpOwordHlwZWRlZiBpbnQgKCphY3BpX29wX3N1c3BlbmQpCShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgaW50IHN0YXRlKTsKK3R5cGVkZWYgaW50ICgqYWNwaV9vcF9yZXN1bWUpCShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgaW50IHN0YXRlKTsKK3R5cGVkZWYgaW50ICgqYWNwaV9vcF9zY2FuKQkoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpOwordHlwZWRlZiBpbnQgKCphY3BpX29wX2JpbmQpCShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSk7Cit0eXBlZGVmIGludCAoKmFjcGlfb3BfdW5iaW5kKQkoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpOwordHlwZWRlZiBpbnQgKCphY3BpX29wX21hdGNoKQkoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsCisJCQkJIHN0cnVjdCBhY3BpX2RyaXZlciAqZHJpdmVyKTsKKworc3RydWN0IGFjcGlfZGV2aWNlX29wcyB7CisJYWNwaV9vcF9hZGQJCWFkZDsKKwlhY3BpX29wX3JlbW92ZQkJcmVtb3ZlOworCWFjcGlfb3BfbG9jawkJbG9jazsKKwlhY3BpX29wX3N0YXJ0CQlzdGFydDsKKwlhY3BpX29wX3N0b3AJCXN0b3A7CisJYWNwaV9vcF9zdXNwZW5kCQlzdXNwZW5kOworCWFjcGlfb3BfcmVzdW1lCQlyZXN1bWU7CisJYWNwaV9vcF9zY2FuCQlzY2FuOworCWFjcGlfb3BfYmluZAkJYmluZDsKKwlhY3BpX29wX3VuYmluZAkJdW5iaW5kOworCWFjcGlfb3BfbWF0Y2gJCW1hdGNoOworfTsKKworc3RydWN0IGFjcGlfZHJpdmVyIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCW5vZGU7CisJY2hhcgkJCW5hbWVbODBdOworCWNoYXIJCQljbGFzc1s4MF07CisJYXRvbWljX3QJCXJlZmVyZW5jZXM7CisJY2hhcgkJCSppZHM7CQkvKiBTdXBwb3J0ZWQgSGFyZHdhcmUgSURzICovCisJc3RydWN0IGFjcGlfZGV2aWNlX29wcwlvcHM7Cit9OworCisvKgorICogQUNQSSBEZXZpY2UKKyAqIC0tLS0tLS0tLS0tCisgKi8KKworLyogU3RhdHVzIChfU1RBKSAqLworCitzdHJ1Y3QgYWNwaV9kZXZpY2Vfc3RhdHVzIHsKKwl1MzIJCQlwcmVzZW50OjE7CisJdTMyCQkJZW5hYmxlZDoxOworCXUzMgkJCXNob3dfaW5fdWk6MTsKKwl1MzIJCQlmdW5jdGlvbmFsOjE7CisJdTMyCQkJYmF0dGVyeV9wcmVzZW50OjE7CisJdTMyCQkJcmVzZXJ2ZWQ6Mjc7Cit9OworCisKKy8qIEZsYWdzICovCisKK3N0cnVjdCBhY3BpX2RldmljZV9mbGFncyB7CisJdTMyCQkJZHluYW1pY19zdGF0dXM6MTsKKwl1MzIJCQloYXJkd2FyZV9pZDoxOworCXUzMgkJCWNvbXBhdGlibGVfaWRzOjE7CisJdTMyCQkJYnVzX2FkZHJlc3M6MTsKKwl1MzIJCQl1bmlxdWVfaWQ6MTsKKwl1MzIJCQlyZW1vdmFibGU6MTsKKwl1MzIJCQllamVjdGFibGU6MTsKKwl1MzIJCQlsb2NrYWJsZToxOworCXUzMgkJCXN1cHJpc2VfcmVtb3ZhbF9vazoxOworCXUzMgkJCXBvd2VyX21hbmFnZWFibGU6MTsKKwl1MzIJCQlwZXJmb3JtYW5jZV9tYW5hZ2VhYmxlOjE7CisJdTMyCQkJd2FrZV9jYXBhYmxlOjE7IC8qIFdha2V1cChfUFJXKSBzdXBwb3J0ZWQ/ICovCisJdTMyCQkJcmVzZXJ2ZWQ6MjA7Cit9OworCisKKy8qIEZpbGUgU3lzdGVtICovCisKK3N0cnVjdCBhY3BpX2RldmljZV9kaXIgeworCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeQkqZW50cnk7Cit9OworCisjZGVmaW5lIGFjcGlfZGV2aWNlX2RpcihkKQkoKGQpLT5kaXIuZW50cnkpCisKKworLyogUGx1ZyBhbmQgUGxheSAqLworCit0eXBlZGVmIGNoYXIJCQlhY3BpX2J1c19pZFs1XTsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZwkJYWNwaV9idXNfYWRkcmVzczsKK3R5cGVkZWYgY2hhcgkJCWFjcGlfaGFyZHdhcmVfaWRbOV07Cit0eXBlZGVmIGNoYXIJCQlhY3BpX3VuaXF1ZV9pZFs5XTsKK3R5cGVkZWYgY2hhcgkJCWFjcGlfZGV2aWNlX25hbWVbNDBdOwordHlwZWRlZiBjaGFyCQkJYWNwaV9kZXZpY2VfY2xhc3NbMjBdOworCitzdHJ1Y3QgYWNwaV9kZXZpY2VfcG5wIHsKKwlhY3BpX2J1c19pZAkJYnVzX2lkOwkJICAgICAgICAgICAgICAgLyogT2JqZWN0IG5hbWUgKi8KKwlhY3BpX2J1c19hZGRyZXNzCWJ1c19hZGRyZXNzOwkgICAgICAgICAgICAgICAgICAgICAgLyogX0FEUiAqLworCWFjcGlfaGFyZHdhcmVfaWQJaGFyZHdhcmVfaWQ7CSAgICAgICAgICAgICAgICAgICAgICAvKiBfSElEICovCisJc3RydWN0IGFjcGlfY29tcGF0aWJsZV9pZF9saXN0ICpjaWRfbGlzdDsJCSAgICAgLyogX0NJRHMgKi8KKwlhY3BpX3VuaXF1ZV9pZAkJdW5pcXVlX2lkOwkgICAgICAgICAgICAgICAgICAgICAgLyogX1VJRCAqLworCWFjcGlfZGV2aWNlX25hbWUJZGV2aWNlX25hbWU7CSAgICAgICAgIC8qIERyaXZlci1kZXRlcm1pbmVkICovCisJYWNwaV9kZXZpY2VfY2xhc3MJZGV2aWNlX2NsYXNzOwkgICAgICAgICAvKiAgICAgICAgIiAgICAgICAgICAqLworfTsKKworI2RlZmluZSBhY3BpX2RldmljZV9iaWQoZCkJKChkKS0+cG5wLmJ1c19pZCkKKyNkZWZpbmUgYWNwaV9kZXZpY2VfYWRyKGQpCSgoZCktPnBucC5idXNfYWRkcmVzcykKKyNkZWZpbmUgYWNwaV9kZXZpY2VfaGlkKGQpCSgoZCktPnBucC5oYXJkd2FyZV9pZCkKKyNkZWZpbmUgYWNwaV9kZXZpY2VfdWlkKGQpCSgoZCktPnBucC51bmlxdWVfaWQpCisjZGVmaW5lIGFjcGlfZGV2aWNlX25hbWUoZCkJKChkKS0+cG5wLmRldmljZV9uYW1lKQorI2RlZmluZSBhY3BpX2RldmljZV9jbGFzcyhkKQkoKGQpLT5wbnAuZGV2aWNlX2NsYXNzKQorCisKKy8qIFBvd2VyIE1hbmFnZW1lbnQgKi8KKworc3RydWN0IGFjcGlfZGV2aWNlX3Bvd2VyX2ZsYWdzIHsKKwl1MzIJCQlleHBsaWNpdF9nZXQ6MTsJCSAgICAgLyogX1BTQyBwcmVzZW50PyAqLworCXUzMgkJCXBvd2VyX3Jlc291cmNlczoxOwkgICAvKiBQb3dlciByZXNvdXJjZXMgKi8KKwl1MzIJCQlpbnJ1c2hfY3VycmVudDoxOwkgIC8qIFNlcmlhbGl6ZSBEeC0+RDAgKi8KKwl1MzIJCQlwb3dlcl9yZW1vdmVkOjE7CSAgIC8qIE9wdGltaXplIER4LT5EMCAqLworCXUzMgkJCXJlc2VydmVkOjI4OworfTsKKworc3RydWN0IGFjcGlfZGV2aWNlX3Bvd2VyX3N0YXRlIHsKKwlzdHJ1Y3QgeworCQl1OAkJCXZhbGlkOjE7CQorCQl1OAkJCWV4cGxpY2l0X3NldDoxOwkgICAgIC8qIF9QU3ggcHJlc2VudD8gKi8KKwkJdTgJCQlyZXNlcnZlZDo2OworCX0JCQlmbGFnczsKKwlpbnQJCQlwb3dlcjsJCSAgLyogJSBQb3dlciAoY29tcGFyZWQgdG8gRDApICovCisJaW50CQkJbGF0ZW5jeTsJLyogRHgtPkQwIHRpbWUgKG1pY3Jvc2Vjb25kcykgKi8KKwlzdHJ1Y3QgYWNwaV9oYW5kbGVfbGlzdAlyZXNvdXJjZXM7CS8qIFBvd2VyIHJlc291cmNlcyByZWZlcmVuY2VkICovCit9OworCitzdHJ1Y3QgYWNwaV9kZXZpY2VfcG93ZXIgeworCWludAkJCXN0YXRlOwkJICAgICAgICAgICAgIC8qIEN1cnJlbnQgc3RhdGUgKi8KKwlzdHJ1Y3QgYWNwaV9kZXZpY2VfcG93ZXJfZmxhZ3MgZmxhZ3M7CisJc3RydWN0IGFjcGlfZGV2aWNlX3Bvd2VyX3N0YXRlIHN0YXRlc1s0XTsgICAgIC8qIFBvd2VyIHN0YXRlcyAoRDAtRDMpICovCit9OworCisKKy8qIFBlcmZvcm1hbmNlIE1hbmFnZW1lbnQgKi8KKworc3RydWN0IGFjcGlfZGV2aWNlX3BlcmZfZmxhZ3MgeworCXU4CQkJcmVzZXJ2ZWQ6ODsKK307CisKK3N0cnVjdCBhY3BpX2RldmljZV9wZXJmX3N0YXRlIHsKKwlzdHJ1Y3QgeworCQl1OAkJCXZhbGlkOjE7CQorCQl1OAkJCXJlc2VydmVkOjc7CisJfQkJCWZsYWdzOworCXU4CQkJcG93ZXI7CQkgIC8qICUgUG93ZXIgKGNvbXBhcmVkIHRvIFAwKSAqLworCXU4CQkJcGVyZm9ybWFuY2U7CSAgLyogJSBQZXJmb3JtYW5jZSAoICAgICIgICApICovCisJaW50CQkJbGF0ZW5jeTsJLyogUHgtPlAwIHRpbWUgKG1pY3Jvc2Vjb25kcykgKi8KK307CisKK3N0cnVjdCBhY3BpX2RldmljZV9wZXJmIHsKKwlpbnQJCQlzdGF0ZTsKKwlzdHJ1Y3QgYWNwaV9kZXZpY2VfcGVyZl9mbGFncyBmbGFnczsKKwlpbnQJCQlzdGF0ZV9jb3VudDsKKwlzdHJ1Y3QgYWNwaV9kZXZpY2VfcGVyZl9zdGF0ZSAqc3RhdGVzOworfTsKKworLyogV2FrZXVwIE1hbmFnZW1lbnQgKi8KK3N0cnVjdCBhY3BpX2RldmljZV93YWtldXBfZmxhZ3MgeworCXU4CXZhbGlkOjE7IC8qIENhbiBzdWNjZXNzZnVsbHkgZW5hYmxlIHdha2V1cD8gKi8KKwl1OAlydW5fd2FrZToxOyAvKiBSdW4tV2FrZSBHUEUgZGV2aWNlcyAqLworfTsKKworc3RydWN0IGFjcGlfZGV2aWNlX3dha2V1cF9zdGF0ZSB7CisJdTgJZW5hYmxlZDoxOworCXU4CWFjdGl2ZToxOworfTsKKworc3RydWN0IGFjcGlfZGV2aWNlX3dha2V1cCB7CisJYWNwaV9oYW5kbGUJCWdwZV9kZXZpY2U7CisJYWNwaV9pbnRlZ2VyCQlncGVfbnVtYmVyOzsKKwlhY3BpX2ludGVnZXIJCXNsZWVwX3N0YXRlOworCXN0cnVjdCBhY3BpX2hhbmRsZV9saXN0CXJlc291cmNlczsKKwlzdHJ1Y3QgYWNwaV9kZXZpY2Vfd2FrZXVwX3N0YXRlCXN0YXRlOworCXN0cnVjdCBhY3BpX2RldmljZV93YWtldXBfZmxhZ3MJZmxhZ3M7Cit9OworCisvKiBEZXZpY2UgKi8KKworc3RydWN0IGFjcGlfZGV2aWNlIHsKKwlhY3BpX2hhbmRsZQkJaGFuZGxlOworCXN0cnVjdCBhY3BpX2RldmljZQkqcGFyZW50OworCXN0cnVjdCBsaXN0X2hlYWQJY2hpbGRyZW47CisJc3RydWN0IGxpc3RfaGVhZAlub2RlOworCXN0cnVjdCBsaXN0X2hlYWQJd2FrZXVwX2xpc3Q7CisJc3RydWN0IGxpc3RfaGVhZAlnX2xpc3Q7CisJc3RydWN0IGFjcGlfZGV2aWNlX3N0YXR1cyBzdGF0dXM7CisJc3RydWN0IGFjcGlfZGV2aWNlX2ZsYWdzIGZsYWdzOworCXN0cnVjdCBhY3BpX2RldmljZV9wbnAJcG5wOworCXN0cnVjdCBhY3BpX2RldmljZV9wb3dlciBwb3dlcjsKKwlzdHJ1Y3QgYWNwaV9kZXZpY2Vfd2FrZXVwIHdha2V1cDsKKwlzdHJ1Y3QgYWNwaV9kZXZpY2VfcGVyZglwZXJmb3JtYW5jZTsKKwlzdHJ1Y3QgYWNwaV9kZXZpY2VfZGlyCWRpcjsKKwlzdHJ1Y3QgYWNwaV9kZXZpY2Vfb3BzCW9wczsKKwlzdHJ1Y3QgYWNwaV9kcml2ZXIJKmRyaXZlcjsKKwl2b2lkCQkJKmRyaXZlcl9kYXRhOworCXN0cnVjdCBrb2JqZWN0CQlrb2JqOworfTsKKworI2RlZmluZSBhY3BpX2RyaXZlcl9kYXRhKGQpCSgoZCktPmRyaXZlcl9kYXRhKQorCisKKy8qCisgKiBFdmVudHMKKyAqIC0tLS0tLQorICovCisKK3N0cnVjdCBhY3BpX2J1c19ldmVudCB7CisJc3RydWN0IGxpc3RfaGVhZAlub2RlOworCWFjcGlfZGV2aWNlX2NsYXNzCWRldmljZV9jbGFzczsKKwlhY3BpX2J1c19pZAkJYnVzX2lkOworCXUzMgkJCXR5cGU7CisJdTMyCQkJZGF0YTsKK307CisKK2V4dGVybiBzdHJ1Y3Qgc3Vic3lzdGVtIGFjcGlfc3Vic3lzOworCisvKgorICogRXh0ZXJuYWwgRnVuY3Rpb25zCisgKi8KKworaW50IGFjcGlfYnVzX2dldF9kZXZpY2UoYWNwaV9oYW5kbGUgaGFuZGxlLCBzdHJ1Y3QgYWNwaV9kZXZpY2UgKipkZXZpY2UpOwordm9pZCBhY3BpX2J1c19kYXRhX2hhbmRsZXIoYWNwaV9oYW5kbGUgaGFuZGxlLCB1MzIgZnVuY3Rpb24sIHZvaWQgKmNvbnRleHQpOworaW50IGFjcGlfYnVzX2dldF9zdGF0dXMgKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKTsKK2ludCBhY3BpX2J1c19nZXRfcG93ZXIgKGFjcGlfaGFuZGxlIGhhbmRsZSwgaW50ICpzdGF0ZSk7CitpbnQgYWNwaV9idXNfc2V0X3Bvd2VyIChhY3BpX2hhbmRsZSBoYW5kbGUsIGludCBzdGF0ZSk7CitpbnQgYWNwaV9idXNfZ2VuZXJhdGVfZXZlbnQgKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLCB1OCB0eXBlLCBpbnQgZGF0YSk7CitpbnQgYWNwaV9idXNfcmVjZWl2ZV9ldmVudCAoc3RydWN0IGFjcGlfYnVzX2V2ZW50ICpldmVudCk7CitpbnQgYWNwaV9idXNfcmVnaXN0ZXJfZHJpdmVyIChzdHJ1Y3QgYWNwaV9kcml2ZXIgKmRyaXZlcik7CitpbnQgYWNwaV9idXNfdW5yZWdpc3Rlcl9kcml2ZXIgKHN0cnVjdCBhY3BpX2RyaXZlciAqZHJpdmVyKTsKK2ludCBhY3BpX2J1c19zY2FuIChzdHJ1Y3QgYWNwaV9kZXZpY2UgKnN0YXJ0KTsKK2ludCBhY3BpX2J1c19hZGQgKHN0cnVjdCBhY3BpX2RldmljZSAqKmNoaWxkLCBzdHJ1Y3QgYWNwaV9kZXZpY2UgKnBhcmVudCwKKwkJYWNwaV9oYW5kbGUgaGFuZGxlLCBpbnQgdHlwZSk7CisKKworaW50IGFjcGlfbWF0Y2hfaWRzIChzdHJ1Y3QgYWNwaV9kZXZpY2UJKmRldmljZSwgY2hhcgkqaWRzKTsKK2ludCBhY3BpX2NyZWF0ZV9kaXIoc3RydWN0IGFjcGlfZGV2aWNlICopOwordm9pZCBhY3BpX3JlbW92ZV9kaXIoc3RydWN0IGFjcGlfZGV2aWNlICopOworCisjZW5kaWYgLypDT05GSUdfQUNQSV9CVVMqLworCisjZW5kaWYgLypfX0FDUElfQlVTX0hfXyovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWNwaV9kcml2ZXJzLmggYi9pbmNsdWRlL2FjcGkvYWNwaV9kcml2ZXJzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYyZTkyZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYWNwaS9hY3BpX2RyaXZlcnMuaApAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqICBhY3BpX2RyaXZlcnMuaCAgKCRSZXZpc2lvbjogMzEgJCkKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyIEFuZHkgR3JvdmVyIDxhbmRyZXcuZ3JvdmVyQGludGVsLmNvbT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIgUGF1bCBEaWVmZW5iYXVnaCA8cGF1bC5zLmRpZWZlbmJhdWdoQGludGVsLmNvbT4KKyAqCisgKiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CisgKiAgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EuCisgKgorICogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyAqLworCisjaWZuZGVmIF9fQUNQSV9EUklWRVJTX0hfXworI2RlZmluZSBfX0FDUElfRFJJVkVSU19IX18KKworI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKyNpbmNsdWRlIDxhY3BpL2FjcGlfYnVzLmg+CisKKworI2RlZmluZSBBQ1BJX01BWF9TVFJJTkcJCQk4MAorCisjZGVmaW5lIEFDUElfQlVTX0NPTVBPTkVOVAkJMHgwMDAxMDAwMAorI2RlZmluZSBBQ1BJX1NZU1RFTV9DT01QT05FTlQJCTB4MDIwMDAwMDAKKworLyogX0hJRCBkZWZpbml0aW9ucyAqLworCisjZGVmaW5lIEFDUElfUE9XRVJfSElECQkJIkFDUElfUFdSIgorI2RlZmluZSBBQ1BJX1BST0NFU1NPUl9ISUQJCSJBQ1BJX0NQVSIKKyNkZWZpbmUgQUNQSV9TWVNURU1fSElECQkJIkFDUElfU1lTIgorI2RlZmluZSBBQ1BJX1RIRVJNQUxfSElECQkiQUNQSV9USE0iCisjZGVmaW5lIEFDUElfQlVUVE9OX0hJRF9QT1dFUkYJCSJBQ1BJX0ZQQiIKKyNkZWZpbmUgQUNQSV9CVVRUT05fSElEX1NMRUVQRgkJIkFDUElfRlNCIgorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ0kKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZmRlZiBDT05GSUdfQUNQSV9QQ0kKKworI2RlZmluZSBBQ1BJX1BDSV9DT01QT05FTlQJCTB4MDA0MDAwMDAKKworLyogQUNQSSBQQ0kgSW50ZXJydXB0IExpbmsgKHBjaV9saW5rLmMpICovCisKK2ludCBhY3BpX2lycV9wZW5hbHR5X2luaXQgKHZvaWQpOworaW50IGFjcGlfcGNpX2xpbmtfZ2V0X2lycSAoYWNwaV9oYW5kbGUgaGFuZGxlLCBpbnQgaW5kZXgsIGludCAqZWRnZV9sZXZlbCwKKwlpbnQgKmFjdGl2ZV9oaWdoX2xvdywgY2hhciAqKm5hbWUpOworCisvKiBBQ1BJIFBDSSBJbnRlcnJ1cHQgUm91dGluZyAocGNpX2lycS5jKSAqLworCitpbnQgYWNwaV9wY2lfaXJxX2FkZF9wcnQgKGFjcGlfaGFuZGxlIGhhbmRsZSwgaW50IHNlZ21lbnQsIGludCBidXMpOwordm9pZCBhY3BpX3BjaV9pcnFfZGVsX3BydCAoaW50IHNlZ21lbnQsIGludCBidXMpOworCisvKiBBQ1BJIFBDSSBEZXZpY2UgQmluZGluZyAocGNpX2JpbmQuYykgKi8KKworc3RydWN0IHBjaV9idXM7CisKK2ludCBhY3BpX3BjaV9iaW5kIChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSk7CitpbnQgYWNwaV9wY2lfdW5iaW5kIChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSk7CitpbnQgYWNwaV9wY2lfYmluZF9yb290IChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgc3RydWN0IGFjcGlfcGNpX2lkICppZCwgc3RydWN0IHBjaV9idXMgKmJ1cyk7CisKKy8qIEFyY2gtZGVmaW5lZCBmdW5jdGlvbiB0byBhZGQgYSBidXMgdG8gdGhlIHN5c3RlbSAqLworCitzdHJ1Y3QgcGNpX2J1cyAqcGNpX2FjcGlfc2Nhbl9yb290KHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLCBpbnQgZG9tYWluLCBpbnQgYnVzKTsKKworI2VuZGlmIC8qQ09ORklHX0FDUElfUENJKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvd2VyIFJlc291cmNlCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWZkZWYgQ09ORklHX0FDUElfUE9XRVIKK2ludCBhY3BpX2VuYWJsZV93YWtldXBfZGV2aWNlX3Bvd2VyIChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldik7CitpbnQgYWNwaV9kaXNhYmxlX3dha2V1cF9kZXZpY2VfcG93ZXIgKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2KTsKK2ludCBhY3BpX3Bvd2VyX2dldF9pbmZlcnJlZF9zdGF0ZSAoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpOworaW50IGFjcGlfcG93ZXJfdHJhbnNpdGlvbiAoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsIGludCBzdGF0ZSk7CisjZW5kaWYKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVtYmVkZGVkIENvbnRyb2xsZXIKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjaWZkZWYgQ09ORklHX0FDUElfRUMKK2ludCBhY3BpX2VjX2VjZHRfcHJvYmUgKHZvaWQpOworI2VuZGlmCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9jZXNzb3IKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQUNQSV9QUk9DRVNTT1JfTElNSVRfTk9ORQkweDAwCisjZGVmaW5lIEFDUElfUFJPQ0VTU09SX0xJTUlUX0lOQ1JFTUVOVAkweDAxCisjZGVmaW5lIEFDUElfUFJPQ0VTU09SX0xJTUlUX0RFQ1JFTUVOVAkweDAyCisKK2ludCBhY3BpX3Byb2Nlc3Nvcl9zZXRfdGhlcm1hbF9saW1pdChhY3BpX2hhbmRsZSBoYW5kbGUsIGludCB0eXBlKTsKKworCisjZW5kaWYgLypfX0FDUElfRFJJVkVSU19IX18qLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FjcGlvc3hmLmggYi9pbmNsdWRlL2FjcGkvYWNwaW9zeGYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTdjODA3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hY3BpL2FjcGlvc3hmLmgKQEAgLTAsMCArMSwzODkgQEAKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIE5hbWU6IGFjcGlvc3hmLmggLSBBbGwgaW50ZXJmYWNlcyB0byB0aGUgT1MgU2VydmljZXMgTGF5ZXIgKE9TTCkuICBUaGVzZQorICogICAgICAgICAgICAgICAgICAgIGludGVyZmFjZXMgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBPU0wgdG8gaW50ZXJmYWNlIHRoZQorICogICAgICAgICAgICAgICAgICAgIEFDUEkgY29tcG9uZW50cyB0byB0aGUgaG9zdCBvcGVyYXRpbmcgc3lzdGVtLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwNSwgUi4gQnlyb24gTW9vcmUKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciwKKyAqICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIGF0IG1pbmltdW0gYSBkaXNjbGFpbWVyCisgKiAgICBzdWJzdGFudGlhbGx5IHNpbWlsYXIgdG8gdGhlICJOTyBXQVJSQU5UWSIgZGlzY2xhaW1lciBiZWxvdworICogICAgKCJEaXNjbGFpbWVyIikgYW5kIGFueSByZWRpc3RyaWJ1dGlvbiBtdXN0IGJlIGNvbmRpdGlvbmVkIHVwb24KKyAqICAgIGluY2x1ZGluZyBhIHN1YnN0YW50aWFsbHkgc2ltaWxhciBEaXNjbGFpbWVyIHJlcXVpcmVtZW50IGZvciBmdXJ0aGVyCisgKiAgICBiaW5hcnkgcmVkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lcyBvZiB0aGUgYWJvdmUtbGlzdGVkIGNvcHlyaWdodCBob2xkZXJzIG5vciB0aGUgbmFtZXMKKyAqICAgIG9mIGFueSBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGlzIHNvZnR3YXJlIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoIkdQTCIpIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogTk8gV0FSUkFOVFkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HCisgKiBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKyAqLworCisjaWZuZGVmIF9fQUNQSU9TWEZfSF9fCisjZGVmaW5lIF9fQUNQSU9TWEZfSF9fCisKKyNpbmNsdWRlICJwbGF0Zm9ybS9hY2Vudi5oIgorI2luY2x1ZGUgImFjdHlwZXMuaCIKKworCisvKiBQcmlvcml0aWVzIGZvciBhY3BpX29zX3F1ZXVlX2Zvcl9leGVjdXRpb24gKi8KKworI2RlZmluZSBPU0RfUFJJT1JJVFlfR1BFICAgICAgICAgICAgMQorI2RlZmluZSBPU0RfUFJJT1JJVFlfSElHSCAgICAgICAgICAgMgorI2RlZmluZSBPU0RfUFJJT1JJVFlfTUVEICAgICAgICAgICAgMworI2RlZmluZSBPU0RfUFJJT1JJVFlfTE8gICAgICAgICAgICAgNAorCisjZGVmaW5lIEFDUElfTk9fVU5JVF9MSU1JVCAgICAgICAgICAoKHUzMikgLTEpCisjZGVmaW5lIEFDUElfTVVURVhfU0VNICAgICAgICAgICAgICAxCisKKworLyogRnVuY3Rpb25zIGZvciBhY3BpX29zX3NpZ25hbCAqLworCisjZGVmaW5lIEFDUElfU0lHTkFMX0ZBVEFMICAgICAgICAgICAwCisjZGVmaW5lIEFDUElfU0lHTkFMX0JSRUFLUE9JTlQgICAgICAxCisKK3N0cnVjdCBhY3BpX3NpZ25hbF9mYXRhbF9pbmZvCit7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZTsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50OworfTsKKworCisvKgorICogT1NMIEluaXRpYWxpemF0aW9uIGFuZCBzaHV0ZG93biBwcmltaXRpdmVzCisgKi8KKworYWNwaV9zdGF0dXMKK2FjcGlfb3NfaW5pdGlhbGl6ZSAoCisJdm9pZCk7CisKK2FjcGlfc3RhdHVzCithY3BpX29zX3Rlcm1pbmF0ZSAoCisJdm9pZCk7CisKKworLyoKKyAqIEFDUEkgVGFibGUgaW50ZXJmYWNlcworICovCisKK2FjcGlfc3RhdHVzCithY3BpX29zX2dldF9yb290X3BvaW50ZXIgKAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MsCisJc3RydWN0IGFjcGlfcG9pbnRlciAgICAgICAgICAgICAqYWRkcmVzcyk7CisKK2FjcGlfc3RhdHVzCithY3BpX29zX3ByZWRlZmluZWRfb3ZlcnJpZGUgKAorCWNvbnN0IHN0cnVjdCBhY3BpX3ByZWRlZmluZWRfbmFtZXMgKmluaXRfdmFsLAorCWFjcGlfc3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAgICpuZXdfdmFsKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfb3NfdGFibGVfb3ZlcnJpZGUgKAorCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAgICAgICAgKmV4aXN0aW5nX3RhYmxlLAorCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAgICAgICAgKipuZXdfdGFibGUpOworCisKKy8qCisgKiBTeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcworICovCisKK2FjcGlfc3RhdHVzCithY3BpX29zX2NyZWF0ZV9zZW1hcGhvcmUgKAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X3VuaXRzLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbF91bml0cywKKwlhY3BpX2hhbmRsZSAgICAgICAgICAgICAgICAgICAgICpvdXRfaGFuZGxlKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfb3NfZGVsZXRlX3NlbWFwaG9yZSAoCisJYWNwaV9oYW5kbGUgICAgICAgICAgICAgICAgICAgICBoYW5kbGUpOworCithY3BpX3N0YXR1cworYWNwaV9vc193YWl0X3NlbWFwaG9yZSAoCisJYWNwaV9oYW5kbGUgICAgICAgICAgICAgICAgICAgICBoYW5kbGUsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0cywKKwl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQpOworCithY3BpX3N0YXR1cworYWNwaV9vc19zaWduYWxfc2VtYXBob3JlICgKKwlhY3BpX2hhbmRsZSAgICAgICAgICAgICAgICAgICAgIGhhbmRsZSwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXRzKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfb3NfY3JlYXRlX2xvY2sgKAorCWFjcGlfaGFuZGxlICAgICAgICAgICAgICAgICAgICAgKm91dF9oYW5kbGUpOworCit2b2lkCithY3BpX29zX2RlbGV0ZV9sb2NrICgKKwlhY3BpX2hhbmRsZSAgICAgICAgICAgICAgICAgICAgIGhhbmRsZSk7CisKK3ZvaWQKK2FjcGlfb3NfYWNxdWlyZV9sb2NrICgKKwlhY3BpX2hhbmRsZSAgICAgICAgICAgICAgICAgICAgIGhhbmRsZSwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzKTsKKwordm9pZAorYWNwaV9vc19yZWxlYXNlX2xvY2sgKAorCWFjcGlfaGFuZGxlICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MpOworCisKKy8qCisgKiBNZW1vcnkgYWxsb2NhdGlvbiBhbmQgbWFwcGluZworICovCisKK3ZvaWQgKgorYWNwaV9vc19hbGxvY2F0ZSAoCisJYWNwaV9zaXplICAgICAgICAgICAgICAgICAgICAgICBzaXplKTsKKwordm9pZAorYWNwaV9vc19mcmVlICgKKwl2b2lkICogICAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeSk7CisKK2FjcGlfc3RhdHVzCithY3BpX29zX21hcF9tZW1vcnkgKAorCWFjcGlfcGh5c2ljYWxfYWRkcmVzcyAgICAgICAgICAgcGh5c2ljYWxfYWRkcmVzcywKKwlhY3BpX3NpemUgICAgICAgICAgICAgICAgICAgICAgIHNpemUsCisJdm9pZCBfX2lvbWVtICAgICAgICAgICAgICAgICAgKipsb2dpY2FsX2FkZHJlc3MpOworCit2b2lkCithY3BpX29zX3VubWFwX21lbW9yeSAoCisJdm9pZCBfX2lvbWVtICAgICAgICAgICAgICAgICAgKmxvZ2ljYWxfYWRkcmVzcywKKwlhY3BpX3NpemUgICAgICAgICAgICAgICAgICAgICAgIHNpemUpOworCisjaWZkZWYgQUNQSV9GVVRVUkVfVVNBR0UKK2FjcGlfc3RhdHVzCithY3BpX29zX2dldF9waHlzaWNhbF9hZGRyZXNzICgKKwl2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICpsb2dpY2FsX2FkZHJlc3MsCisJYWNwaV9waHlzaWNhbF9hZGRyZXNzICAgICAgICAgICAqcGh5c2ljYWxfYWRkcmVzcyk7CisjZW5kaWYKKworCisvKgorICogSW50ZXJydXB0IGhhbmRsZXJzCisgKi8KKworYWNwaV9zdGF0dXMKK2FjcGlfb3NfaW5zdGFsbF9pbnRlcnJ1cHRfaGFuZGxlciAoCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc2ksCisJYWNwaV9vc2RfaGFuZGxlciAgICAgICAgICAgICAgICBzZXJ2aWNlX3JvdXRpbmUsCisJdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqY29udGV4dCk7CisKK2FjcGlfc3RhdHVzCithY3BpX29zX3JlbW92ZV9pbnRlcnJ1cHRfaGFuZGxlciAoCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc2ksCisJYWNwaV9vc2RfaGFuZGxlciAgICAgICAgICAgICAgICBzZXJ2aWNlX3JvdXRpbmUpOworCisKKy8qCisgKiBUaHJlYWRzIGFuZCBTY2hlZHVsaW5nCisgKi8KKwordTMyCithY3BpX29zX2dldF90aHJlYWRfaWQgKAorCXZvaWQpOworCithY3BpX3N0YXR1cworYWNwaV9vc19xdWV1ZV9mb3JfZXhlY3V0aW9uICgKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW9yaXR5LAorCWFjcGlfb3NkX2V4ZWNfY2FsbGJhY2sgICAgICAgICAgZnVuY3Rpb24sCisJdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqY29udGV4dCk7CisKK3ZvaWQKK2FjcGlfb3Nfd2FpdF9ldmVudHNfY29tcGxldGUoCisJdm9pZCAqIGNvbnRleHQpOworCit2b2lkCithY3BpX29zX3dhaXRfZXZlbnRzX2NvbXBsZXRlICgKKwl2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICpjb250ZXh0KTsKKwordm9pZAorYWNwaV9vc19zbGVlcCAoCisJYWNwaV9pbnRlZ2VyICAgICAgICAgICAgICAgICAgICBtaWxsaXNlY29uZHMpOworCit2b2lkCithY3BpX29zX3N0YWxsICgKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pY3Jvc2Vjb25kcyk7CisKKworLyoKKyAqIFBsYXRmb3JtIGFuZCBoYXJkd2FyZS1pbmRlcGVuZGVudCBJL08gaW50ZXJmYWNlcworICovCisKK2FjcGlfc3RhdHVzCithY3BpX29zX3JlYWRfcG9ydCAoCisJYWNwaV9pb19hZGRyZXNzICAgICAgICAgICAgICAgICBhZGRyZXNzLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnZhbHVlLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgpOworCithY3BpX3N0YXR1cworYWNwaV9vc193cml0ZV9wb3J0ICgKKwlhY3BpX2lvX2FkZHJlc3MgICAgICAgICAgICAgICAgIGFkZHJlc3MsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoKTsKKworCisvKgorICogUGxhdGZvcm0gYW5kIGhhcmR3YXJlLWluZGVwZW5kZW50IHBoeXNpY2FsIG1lbW9yeSBpbnRlcmZhY2VzCisgKi8KKworYWNwaV9zdGF0dXMKK2FjcGlfb3NfcmVhZF9tZW1vcnkgKAorCWFjcGlfcGh5c2ljYWxfYWRkcmVzcyAgICAgICAgICAgYWRkcmVzcywKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp2YWx1ZSwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfb3Nfd3JpdGVfbWVtb3J5ICgKKwlhY3BpX3BoeXNpY2FsX2FkZHJlc3MgICAgICAgICAgIGFkZHJlc3MsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoKTsKKworCisvKgorICogUGxhdGZvcm0gYW5kIGhhcmR3YXJlLWluZGVwZW5kZW50IFBDSSBjb25maWd1cmF0aW9uIHNwYWNlIGFjY2VzcworICogTm90ZTogQ2FuJ3QgdXNlICJSZWdpc3RlciIgYXMgYSBwYXJhbWV0ZXIsIGNoYW5nZWQgdG8gIlJlZyIgLS0KKyAqIGNlcnRhaW4gY29tcGlsZXJzIGNvbXBsYWluLgorICovCisKK2FjcGlfc3RhdHVzCithY3BpX29zX3JlYWRfcGNpX2NvbmZpZ3VyYXRpb24gKAorCXN0cnVjdCBhY3BpX3BjaV9pZCAgICAgICAgICAgICAgKnBjaV9pZCwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZywKKwl2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICp2YWx1ZSwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfb3Nfd3JpdGVfcGNpX2NvbmZpZ3VyYXRpb24gKAorCXN0cnVjdCBhY3BpX3BjaV9pZCAgICAgICAgICAgICAgKnBjaV9pZCwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZywKKwlhY3BpX2ludGVnZXIgICAgICAgICAgICAgICAgICAgIHZhbHVlLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgpOworCisvKgorICogSW50ZXJpbSBmdW5jdGlvbiBuZWVkZWQgZm9yIFBDSSBJUlEgcm91dGluZworICovCisKK3ZvaWQKK2FjcGlfb3NfZGVyaXZlX3BjaV9pZCgKKwlhY3BpX2hhbmRsZSAgICAgICAgICAgICAgICAgICAgIHJoYW5kbGUsCisJYWNwaV9oYW5kbGUgICAgICAgICAgICAgICAgICAgICBjaGFuZGxlLAorCXN0cnVjdCBhY3BpX3BjaV9pZCAgICAgICAgICAgICAgKipwY2lfaWQpOworCisvKgorICogTWlzY2VsbGFuZW91cworICovCisKK3U4CithY3BpX29zX3JlYWRhYmxlICgKKwl2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwb2ludGVyLAorCWFjcGlfc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoKTsKKworI2lmZGVmIEFDUElfRlVUVVJFX1VTQUdFCit1OAorYWNwaV9vc193cml0YWJsZSAoCisJdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcG9pbnRlciwKKwlhY3BpX3NpemUgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCk7CisjZW5kaWYKKwordTY0CithY3BpX29zX2dldF90aW1lciAoCisJdm9pZCk7CisKK2FjcGlfc3RhdHVzCithY3BpX29zX3NpZ25hbCAoCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiwKKwl2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICppbmZvKTsKKworLyoKKyAqIERlYnVnIHByaW50IHJvdXRpbmVzCisgKi8KKwordm9pZCBBQ1BJX0lOVEVSTkFMX1ZBUl9YRkFDRQorYWNwaV9vc19wcmludGYgKAorCWNvbnN0IGNoYXIgICAgICAgICAgICAgICAgICAgICAgKmZvcm1hdCwKKwkuLi4pOworCit2b2lkCithY3BpX29zX3ZwcmludGYgKAorCWNvbnN0IGNoYXIgICAgICAgICAgICAgICAgICAgICAgKmZvcm1hdCwKKwl2YV9saXN0ICAgICAgICAgICAgICAgICBhcmdzKTsKKwordm9pZAorYWNwaV9vc19yZWRpcmVjdF9vdXRwdXQgKAorCXZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3RpbmF0aW9uKTsKKworCisvKgorICogRGVidWcgaW5wdXQKKyAqLworCisjaWZkZWYgQUNQSV9GVVRVUkVfVVNBR0UKK3UzMgorYWNwaV9vc19nZXRfbGluZSAoCisJY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYnVmZmVyKTsKKyNlbmRpZgorCisKKy8qCisgKiBEaXJlY3RvcnkgbWFuaXB1bGF0aW9uCisgKi8KKwordm9pZCAqCithY3BpX29zX29wZW5fZGlyZWN0b3J5ICgKKwljaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwYXRobmFtZSwKKwljaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICp3aWxkY2FyZF9zcGVjLAorCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdGVkX2ZpbGVfdHlwZSk7CisKKy8qIHJlcXVlc3RlX2ZpbGVfdHlwZSB2YWx1ZXMgKi8KKworI2RlZmluZSBSRVFVRVNUX0ZJTEVfT05MWSAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFJFUVVFU1RfRElSX09OTFkgICAgICAgICAgICAgICAgICAgIDEKKworCitjaGFyICoKK2FjcGlfb3NfZ2V0X25leHRfZmlsZW5hbWUgKAorCXZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmRpcl9oYW5kbGUpOworCit2b2lkCithY3BpX29zX2Nsb3NlX2RpcmVjdG9yeSAoCisJdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqZGlyX2hhbmRsZSk7CisKKy8qCisgKiBEZWJ1ZworICovCisKK3ZvaWQKK2FjcGlfb3NfZGJnX2Fzc2VydCgKKwl2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICpmYWlsZWRfYXNzZXJ0aW9uLAorCXZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmZpbGVfbmFtZSwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVfbnVtYmVyLAorCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm1lc3NhZ2UpOworCisKKyNlbmRpZiAvKiBfX0FDUElPU1hGX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FjcGl4Zi5oIGIvaW5jbHVkZS9hY3BpL2FjcGl4Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwZDc4YjcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FjcGkvYWNwaXhmLmgKQEAgLTAsMCArMSw0OTcgQEAKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIE5hbWU6IGFjcGl4Zi5oIC0gRXh0ZXJuYWwgaW50ZXJmYWNlcyB0byB0aGUgQUNQSSBzdWJzeXN0ZW0KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA1LCBSLiBCeXJvbiBNb29yZQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLAorICogICAgd2l0aG91dCBtb2RpZmljYXRpb24uCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgYXQgbWluaW11bSBhIGRpc2NsYWltZXIKKyAqICAgIHN1YnN0YW50aWFsbHkgc2ltaWxhciB0byB0aGUgIk5PIFdBUlJBTlRZIiBkaXNjbGFpbWVyIGJlbG93CisgKiAgICAoIkRpc2NsYWltZXIiKSBhbmQgYW55IHJlZGlzdHJpYnV0aW9uIG11c3QgYmUgY29uZGl0aW9uZWQgdXBvbgorICogICAgaW5jbHVkaW5nIGEgc3Vic3RhbnRpYWxseSBzaW1pbGFyIERpc2NsYWltZXIgcmVxdWlyZW1lbnQgZm9yIGZ1cnRoZXIKKyAqICAgIGJpbmFyeSByZWRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWVzIG9mIHRoZSBhYm92ZS1saXN0ZWQgY29weXJpZ2h0IGhvbGRlcnMgbm9yIHRoZSBuYW1lcworICogICAgb2YgYW55IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBOTyBXQVJSQU5UWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcKKyAqIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorICovCisKKworI2lmbmRlZiBfX0FDWEZBQ0VfSF9fCisjZGVmaW5lIF9fQUNYRkFDRV9IX18KKworI2luY2x1ZGUgImFjdHlwZXMuaCIKKyNpbmNsdWRlICJhY3RibC5oIgorCisKKyAvKgorICogR2xvYmFsIGludGVyZmFjZXMKKyAqLworCithY3BpX3N0YXR1cworYWNwaV9pbml0aWFsaXplX3N1YnN5c3RlbSAoCisJdm9pZCk7CisKK2FjcGlfc3RhdHVzCithY3BpX2VuYWJsZV9zdWJzeXN0ZW0gKAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MpOworCithY3BpX3N0YXR1cworYWNwaV9pbml0aWFsaXplX29iamVjdHMgKAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MpOworCithY3BpX3N0YXR1cworYWNwaV90ZXJtaW5hdGUgKAorCXZvaWQpOworCisjaWZkZWYgQUNQSV9GVVRVUkVfVVNBR0UKK2FjcGlfc3RhdHVzCithY3BpX3N1YnN5c3RlbV9zdGF0dXMgKAorCXZvaWQpOworI2VuZGlmCisKK2FjcGlfc3RhdHVzCithY3BpX2VuYWJsZSAoCisJdm9pZCk7CisKK2FjcGlfc3RhdHVzCithY3BpX2Rpc2FibGUgKAorCXZvaWQpOworCisjaWZkZWYgQUNQSV9GVVRVUkVfVVNBR0UKK2FjcGlfc3RhdHVzCithY3BpX2dldF9zeXN0ZW1faW5mbyAoCisJc3RydWN0IGFjcGlfYnVmZmVyICAgICAgICAgICAgICAqcmV0X2J1ZmZlcik7CisjZW5kaWYKKworY29uc3QgY2hhciAqCithY3BpX2Zvcm1hdF9leGNlcHRpb24gKAorCWFjcGlfc3RhdHVzICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfcHVyZ2VfY2FjaGVkX29iamVjdHMgKAorCXZvaWQpOworCisjaWZkZWYgQUNQSV9GVVRVUkVfVVNBR0UKK2FjcGlfc3RhdHVzCithY3BpX2luc3RhbGxfaW5pdGlhbGl6YXRpb25faGFuZGxlciAoCisJYWNwaV9pbml0X2hhbmRsZXIgICAgICAgICAgICAgICBoYW5kbGVyLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24pOworI2VuZGlmCisKKy8qCisgKiBBQ1BJIE1lbW9yeSBtYW5hZ2VyCisgKi8KKwordm9pZCAqCithY3BpX2FsbG9jYXRlICgKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUpOworCit2b2lkICoKK2FjcGlfY2FsbG9jYXRlICgKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUpOworCit2b2lkCithY3BpX2ZyZWUgKAorCXZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFkZHJlc3MpOworCisKKy8qCisgKiBBQ1BJIHRhYmxlIG1hbmlwdWxhdGlvbiBpbnRlcmZhY2VzCisgKi8KKworYWNwaV9zdGF0dXMKK2FjcGlfZmluZF9yb290X3BvaW50ZXIgKAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MsCisJc3RydWN0IGFjcGlfcG9pbnRlciAgICAgICAgICAgICAqcnNkcF9hZGRyZXNzKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfbG9hZF90YWJsZXMgKAorCXZvaWQpOworCisjaWZkZWYgQUNQSV9GVVRVUkVfVVNBR0UKK2FjcGlfc3RhdHVzCithY3BpX2xvYWRfdGFibGUgKAorCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAgICAgICAgKnRhYmxlX3B0cik7CisKK2FjcGlfc3RhdHVzCithY3BpX3VubG9hZF90YWJsZSAoCisJYWNwaV90YWJsZV90eXBlICAgICAgICAgICAgICAgICB0YWJsZV90eXBlKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfZ2V0X3RhYmxlX2hlYWRlciAoCisJYWNwaV90YWJsZV90eXBlICAgICAgICAgICAgICAgICB0YWJsZV90eXBlLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UsCisJc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICAgICAgICAqb3V0X3RhYmxlX2hlYWRlcik7CisjZW5kaWYgIC8qICBBQ1BJX0ZVVFVSRV9VU0FHRSAgKi8KKworYWNwaV9zdGF0dXMKK2FjcGlfZ2V0X3RhYmxlICgKKwlhY3BpX3RhYmxlX3R5cGUgICAgICAgICAgICAgICAgIHRhYmxlX3R5cGUsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZSwKKwlzdHJ1Y3QgYWNwaV9idWZmZXIgICAgICAgICAgICAgICpyZXRfYnVmZmVyKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfZ2V0X2Zpcm13YXJlX3RhYmxlICgKKwlhY3BpX3N0cmluZyAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZSwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MsCisJc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICAgICAgICAqKnRhYmxlX3BvaW50ZXIpOworCisKKy8qCisgKiBOYW1lc3BhY2UgYW5kIG5hbWUgaW50ZXJmYWNlcworICovCisKK2FjcGlfc3RhdHVzCithY3BpX3dhbGtfbmFtZXNwYWNlICgKKwlhY3BpX29iamVjdF90eXBlICAgICAgICAgICAgICAgIHR5cGUsCisJYWNwaV9oYW5kbGUgICAgICAgICAgICAgICAgICAgICBzdGFydF9vYmplY3QsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfZGVwdGgsCisJYWNwaV93YWxrX2NhbGxiYWNrICAgICAgICAgICAgICB1c2VyX2Z1bmN0aW9uLAorCXZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmNvbnRleHQsCisJdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKnJldHVybl92YWx1ZSk7CisKK2FjcGlfc3RhdHVzCithY3BpX2dldF9kZXZpY2VzICgKKwljaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICpISUQsCisJYWNwaV93YWxrX2NhbGxiYWNrICAgICAgICAgICAgICB1c2VyX2Z1bmN0aW9uLAorCXZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmNvbnRleHQsCisJdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKnJldHVybl92YWx1ZSk7CisKK2FjcGlfc3RhdHVzCithY3BpX2dldF9uYW1lICgKKwlhY3BpX2hhbmRsZSAgICAgICAgICAgICAgICAgICAgIGhhbmRsZSwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVfdHlwZSwKKwlzdHJ1Y3QgYWNwaV9idWZmZXIgICAgICAgICAgICAgICpyZXRfcGF0aF9wdHIpOworCithY3BpX3N0YXR1cworYWNwaV9nZXRfaGFuZGxlICgKKwlhY3BpX2hhbmRsZSAgICAgICAgICAgICAgICAgICAgIHBhcmVudCwKKwlhY3BpX3N0cmluZyAgICAgICAgICAgICAgICAgICAgIHBhdGhuYW1lLAorCWFjcGlfaGFuZGxlICAgICAgICAgICAgICAgICAgICAgKnJldF9oYW5kbGUpOworCithY3BpX3N0YXR1cworYWNwaV9hdHRhY2hfZGF0YSAoCisJYWNwaV9oYW5kbGUgICAgICAgICAgICAgICAgICAgICBvYmpfaGFuZGxlLAorCWFjcGlfb2JqZWN0X2hhbmRsZXIgICAgICAgICAgICAgaGFuZGxlciwKKwl2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfZGV0YWNoX2RhdGEgKAorCWFjcGlfaGFuZGxlICAgICAgICAgICAgICAgICAgICAgb2JqX2hhbmRsZSwKKwlhY3BpX29iamVjdF9oYW5kbGVyICAgICAgICAgICAgIGhhbmRsZXIpOworCithY3BpX3N0YXR1cworYWNwaV9nZXRfZGF0YSAoCisJYWNwaV9oYW5kbGUgICAgICAgICAgICAgICAgICAgICBvYmpfaGFuZGxlLAorCWFjcGlfb2JqZWN0X2hhbmRsZXIgICAgICAgICAgICAgaGFuZGxlciwKKwl2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqZGF0YSk7CisKKworLyoKKyAqIE9iamVjdCBtYW5pcHVsYXRpb24gYW5kIGVudW1lcmF0aW9uCisgKi8KKworYWNwaV9zdGF0dXMKK2FjcGlfZXZhbHVhdGVfb2JqZWN0ICgKKwlhY3BpX2hhbmRsZSAgICAgICAgICAgICAgICAgICAgIG9iamVjdCwKKwlhY3BpX3N0cmluZyAgICAgICAgICAgICAgICAgICAgIHBhdGhuYW1lLAorCXN0cnVjdCBhY3BpX29iamVjdF9saXN0ICAgICAgICAgKnBhcmFtZXRlcl9vYmplY3RzLAorCXN0cnVjdCBhY3BpX2J1ZmZlciAgICAgICAgICAgICAgKnJldHVybl9vYmplY3RfYnVmZmVyKTsKKworI2lmZGVmIEFDUElfRlVUVVJFX1VTQUdFCithY3BpX3N0YXR1cworYWNwaV9ldmFsdWF0ZV9vYmplY3RfdHlwZWQgKAorCWFjcGlfaGFuZGxlICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LAorCWFjcGlfc3RyaW5nICAgICAgICAgICAgICAgICAgICAgcGF0aG5hbWUsCisJc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgICAgICAgICAqZXh0ZXJuYWxfcGFyYW1zLAorCXN0cnVjdCBhY3BpX2J1ZmZlciAgICAgICAgICAgICAgKnJldHVybl9idWZmZXIsCisJYWNwaV9vYmplY3RfdHlwZSAgICAgICAgICAgICAgICByZXR1cm5fdHlwZSk7CisjZW5kaWYKKworYWNwaV9zdGF0dXMKK2FjcGlfZ2V0X29iamVjdF9pbmZvICgKKwlhY3BpX2hhbmRsZSAgICAgICAgICAgICAgICAgICAgIGhhbmRsZSwKKwlzdHJ1Y3QgYWNwaV9idWZmZXIgICAgICAgICAgICAgICpyZXR1cm5fYnVmZmVyKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfZ2V0X25leHRfb2JqZWN0ICgKKwlhY3BpX29iamVjdF90eXBlICAgICAgICAgICAgICAgIHR5cGUsCisJYWNwaV9oYW5kbGUgICAgICAgICAgICAgICAgICAgICBwYXJlbnQsCisJYWNwaV9oYW5kbGUgICAgICAgICAgICAgICAgICAgICBjaGlsZCwKKwlhY3BpX2hhbmRsZSAgICAgICAgICAgICAgICAgICAgICpvdXRfaGFuZGxlKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfZ2V0X3R5cGUgKAorCWFjcGlfaGFuZGxlICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LAorCWFjcGlfb2JqZWN0X3R5cGUgICAgICAgICAgICAgICAgKm91dF90eXBlKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfZ2V0X3BhcmVudCAoCisJYWNwaV9oYW5kbGUgICAgICAgICAgICAgICAgICAgICBvYmplY3QsCisJYWNwaV9oYW5kbGUgICAgICAgICAgICAgICAgICAgICAqb3V0X2hhbmRsZSk7CisKKworLyoKKyAqIEV2ZW50IGhhbmRsZXIgaW50ZXJmYWNlcworICovCisKK2FjcGlfc3RhdHVzCithY3BpX2luc3RhbGxfZml4ZWRfZXZlbnRfaGFuZGxlciAoCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3BpX2V2ZW50LAorCWFjcGlfZXZlbnRfaGFuZGxlciAgICAgICAgICAgICAgaGFuZGxlciwKKwl2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICpjb250ZXh0KTsKKworYWNwaV9zdGF0dXMKK2FjcGlfcmVtb3ZlX2ZpeGVkX2V2ZW50X2hhbmRsZXIgKAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNwaV9ldmVudCwKKwlhY3BpX2V2ZW50X2hhbmRsZXIgICAgICAgICAgICAgIGhhbmRsZXIpOworCithY3BpX3N0YXR1cworYWNwaV9pbnN0YWxsX25vdGlmeV9oYW5kbGVyICgKKwlhY3BpX2hhbmRsZSAgICAgICAgICAgICAgICAgICAgIGRldmljZSwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXJfdHlwZSwKKwlhY3BpX25vdGlmeV9oYW5kbGVyICAgICAgICAgICAgIGhhbmRsZXIsCisJdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqY29udGV4dCk7CisKK2FjcGlfc3RhdHVzCithY3BpX3JlbW92ZV9ub3RpZnlfaGFuZGxlciAoCisJYWNwaV9oYW5kbGUgICAgICAgICAgICAgICAgICAgICBkZXZpY2UsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyX3R5cGUsCisJYWNwaV9ub3RpZnlfaGFuZGxlciAgICAgICAgICAgICBoYW5kbGVyKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfaW5zdGFsbF9hZGRyZXNzX3NwYWNlX2hhbmRsZXIgKAorCWFjcGlfaGFuZGxlICAgICAgICAgICAgICAgICAgICAgZGV2aWNlLAorCWFjcGlfYWRyX3NwYWNlX3R5cGUgICAgICAgICAgICAgc3BhY2VfaWQsCisJYWNwaV9hZHJfc3BhY2VfaGFuZGxlciAgICAgICAgICBoYW5kbGVyLAorCWFjcGlfYWRyX3NwYWNlX3NldHVwICAgICAgICAgICAgc2V0dXAsCisJdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqY29udGV4dCk7CisKK2FjcGlfc3RhdHVzCithY3BpX3JlbW92ZV9hZGRyZXNzX3NwYWNlX2hhbmRsZXIgKAorCWFjcGlfaGFuZGxlICAgICAgICAgICAgICAgICAgICAgZGV2aWNlLAorCWFjcGlfYWRyX3NwYWNlX3R5cGUgICAgICAgICAgICAgc3BhY2VfaWQsCisJYWNwaV9hZHJfc3BhY2VfaGFuZGxlciAgICAgICAgICBoYW5kbGVyKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfaW5zdGFsbF9ncGVfaGFuZGxlciAoCisJYWNwaV9oYW5kbGUgICAgICAgICAgICAgICAgICAgICBncGVfZGV2aWNlLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BlX251bWJlciwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUsCisJYWNwaV9ldmVudF9oYW5kbGVyICAgICAgICAgICAgICBhZGRyZXNzLAorCXZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmNvbnRleHQpOworCisjaWZkZWYgQUNQSV9GVVRVUkVfVVNBR0UKK2FjcGlfc3RhdHVzCithY3BpX2luc3RhbGxfZXhjZXB0aW9uX2hhbmRsZXIgKAorCWFjcGlfZXhjZXB0aW9uX2hhbmRsZXIgICAgICAgICAgaGFuZGxlcik7CisjZW5kaWYKKworCisvKgorICogRXZlbnQgaW50ZXJmYWNlcworICovCisKK2FjcGlfc3RhdHVzCithY3BpX2FjcXVpcmVfZ2xvYmFsX2xvY2sgKAorCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dCwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpoYW5kbGUpOworCithY3BpX3N0YXR1cworYWNwaV9yZWxlYXNlX2dsb2JhbF9sb2NrICgKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZSk7CisKK2FjcGlfc3RhdHVzCithY3BpX3JlbW92ZV9ncGVfaGFuZGxlciAoCisJYWNwaV9oYW5kbGUgICAgICAgICAgICAgICAgICAgICBncGVfZGV2aWNlLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BlX251bWJlciwKKwlhY3BpX2V2ZW50X2hhbmRsZXIgICAgICAgICAgICAgIGFkZHJlc3MpOworCithY3BpX3N0YXR1cworYWNwaV9lbmFibGVfZXZlbnQgKAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncyk7CisKK2FjcGlfc3RhdHVzCithY3BpX2Rpc2FibGVfZXZlbnQgKAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncyk7CisKK2FjcGlfc3RhdHVzCithY3BpX2NsZWFyX2V2ZW50ICgKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50KTsKKworI2lmZGVmIEFDUElfRlVUVVJFX1VTQUdFCithY3BpX3N0YXR1cworYWNwaV9nZXRfZXZlbnRfc3RhdHVzICgKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LAorCWFjcGlfZXZlbnRfc3RhdHVzICAgICAgICAgICAgICAgKmV2ZW50X3N0YXR1cyk7CisjZW5kaWYgIC8qICBBQ1BJX0ZVVFVSRV9VU0FHRSAgKi8KKworYWNwaV9zdGF0dXMKK2FjcGlfc2V0X2dwZV90eXBlICgKKwlhY3BpX2hhbmRsZSAgICAgICAgICAgICAgICAgICAgIGdwZV9kZXZpY2UsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncGVfbnVtYmVyLAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSk7CisKK2FjcGlfc3RhdHVzCithY3BpX2VuYWJsZV9ncGUgKAorCWFjcGlfaGFuZGxlICAgICAgICAgICAgICAgICAgICAgZ3BlX2RldmljZSwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwZV9udW1iZXIsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncyk7CisKK2FjcGlfc3RhdHVzCithY3BpX2Rpc2FibGVfZ3BlICgKKwlhY3BpX2hhbmRsZSAgICAgICAgICAgICAgICAgICAgIGdwZV9kZXZpY2UsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncGVfbnVtYmVyLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MpOworCithY3BpX3N0YXR1cworYWNwaV9jbGVhcl9ncGUgKAorCWFjcGlfaGFuZGxlICAgICAgICAgICAgICAgICAgICAgZ3BlX2RldmljZSwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwZV9udW1iZXIsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncyk7CisKKyNpZmRlZiBBQ1BJX0ZVVFVSRV9VU0FHRQorYWNwaV9zdGF0dXMKK2FjcGlfZ2V0X2dwZV9zdGF0dXMgKAorCWFjcGlfaGFuZGxlICAgICAgICAgICAgICAgICAgICAgZ3BlX2RldmljZSwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwZV9udW1iZXIsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncywKKwlhY3BpX2V2ZW50X3N0YXR1cyAgICAgICAgICAgICAgICpldmVudF9zdGF0dXMpOworI2VuZGlmICAvKiAgQUNQSV9GVVRVUkVfVVNBR0UgICovCisKK2FjcGlfc3RhdHVzCithY3BpX2luc3RhbGxfZ3BlX2Jsb2NrICgKKwlhY3BpX2hhbmRsZSAgICAgICAgICAgICAgICAgICAgIGdwZV9kZXZpY2UsCisJc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzICAgICAqZ3BlX2Jsb2NrX2FkZHJlc3MsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3Rlcl9jb3VudCwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdF9sZXZlbCk7CisKK2FjcGlfc3RhdHVzCithY3BpX3JlbW92ZV9ncGVfYmxvY2sgKAorCWFjcGlfaGFuZGxlICAgICAgICAgICAgICAgICAgICAgZ3BlX2RldmljZSk7CisKKworLyoKKyAqIFJlc291cmNlIGludGVyZmFjZXMKKyAqLworCit0eXBlZGVmCithY3BpX3N0YXR1cyAoKkFDUElfV0FMS19SRVNPVVJDRV9DQUxMQkFDSykgKAorCXN0cnVjdCBhY3BpX3Jlc291cmNlICAgICAgICAgICAgKnJlc291cmNlLAorCXZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmNvbnRleHQpOworCisKK2FjcGlfc3RhdHVzCithY3BpX2dldF9jdXJyZW50X3Jlc291cmNlcygKKwlhY3BpX2hhbmRsZSAgICAgICAgICAgICAgICAgICAgIGRldmljZV9oYW5kbGUsCisJc3RydWN0IGFjcGlfYnVmZmVyICAgICAgICAgICAgICAqcmV0X2J1ZmZlcik7CisKKyNpZmRlZiBBQ1BJX0ZVVFVSRV9VU0FHRQorYWNwaV9zdGF0dXMKK2FjcGlfZ2V0X3Bvc3NpYmxlX3Jlc291cmNlcygKKwlhY3BpX2hhbmRsZSAgICAgICAgICAgICAgICAgICAgIGRldmljZV9oYW5kbGUsCisJc3RydWN0IGFjcGlfYnVmZmVyICAgICAgICAgICAgICAqcmV0X2J1ZmZlcik7CisjZW5kaWYKKworYWNwaV9zdGF0dXMKK2FjcGlfd2Fsa19yZXNvdXJjZXMgKAorCWFjcGlfaGFuZGxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2VfaGFuZGxlLAorCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcGF0aCwKKwlBQ1BJX1dBTEtfUkVTT1VSQ0VfQ0FMTEJBQ0sgICAgIHVzZXJfZnVuY3Rpb24sCisJdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpjb250ZXh0KTsKKworYWNwaV9zdGF0dXMKK2FjcGlfc2V0X2N1cnJlbnRfcmVzb3VyY2VzICgKKwlhY3BpX2hhbmRsZSAgICAgICAgICAgICAgICAgICAgIGRldmljZV9oYW5kbGUsCisJc3RydWN0IGFjcGlfYnVmZmVyICAgICAgICAgICAgICAqaW5fYnVmZmVyKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfZ2V0X2lycV9yb3V0aW5nX3RhYmxlICgKKwlhY3BpX2hhbmRsZSAgICAgICAgICAgICAgICAgICAgIGJ1c19kZXZpY2VfaGFuZGxlLAorCXN0cnVjdCBhY3BpX2J1ZmZlciAgICAgICAgICAgICAgKnJldF9idWZmZXIpOworCithY3BpX3N0YXR1cworYWNwaV9yZXNvdXJjZV90b19hZGRyZXNzNjQgKAorCXN0cnVjdCBhY3BpX3Jlc291cmNlICAgICAgICAgICAgKnJlc291cmNlLAorCXN0cnVjdCBhY3BpX3Jlc291cmNlX2FkZHJlc3M2NCAqb3V0KTsKKworLyoKKyAqIEhhcmR3YXJlIChBQ1BJIGRldmljZSkgaW50ZXJmYWNlcworICovCisKK2FjcGlfc3RhdHVzCithY3BpX2dldF9yZWdpc3RlciAoCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3Rlcl9pZCwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpyZXR1cm5fdmFsdWUsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncyk7CisKK2FjcGlfc3RhdHVzCithY3BpX3NldF9yZWdpc3RlciAoCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3Rlcl9pZCwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MpOworCithY3BpX3N0YXR1cworYWNwaV9zZXRfZmlybXdhcmVfd2FraW5nX3ZlY3RvciAoCisJYWNwaV9waHlzaWNhbF9hZGRyZXNzICAgICAgICAgICBwaHlzaWNhbF9hZGRyZXNzKTsKKworI2lmZGVmIEFDUElfRlVUVVJFX1VTQUdFCithY3BpX3N0YXR1cworYWNwaV9nZXRfZmlybXdhcmVfd2FraW5nX3ZlY3RvciAoCisJYWNwaV9waHlzaWNhbF9hZGRyZXNzICAgICAgICAgICAqcGh5c2ljYWxfYWRkcmVzcyk7CisjZW5kaWYKKworYWNwaV9zdGF0dXMKK2FjcGlfZ2V0X3NsZWVwX3R5cGVfZGF0YSAoCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGVlcF9zdGF0ZSwKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpzbHBfdHlwX2EsCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqc2xwX3R5cF9iKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfZW50ZXJfc2xlZXBfc3RhdGVfcHJlcCAoCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGVlcF9zdGF0ZSk7CisKK2FjcGlfc3RhdHVzIGFzbWxpbmthZ2UKK2FjcGlfZW50ZXJfc2xlZXBfc3RhdGUgKAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xlZXBfc3RhdGUpOworCithY3BpX3N0YXR1cyBhc21saW5rYWdlCithY3BpX2VudGVyX3NsZWVwX3N0YXRlX3M0YmlvcyAoCisJdm9pZCk7CisKK2FjcGlfc3RhdHVzCithY3BpX2xlYXZlX3NsZWVwX3N0YXRlICgKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsZWVwX3N0YXRlKTsKKworCisjZW5kaWYgLyogX19BQ1hGQUNFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FjcmVzcmMuaCBiL2luY2x1ZGUvYWNwaS9hY3Jlc3JjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNjNTVmZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYWNwaS9hY3Jlc3JjLmgKQEAgLTAsMCArMSwzOTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBOYW1lOiBhY3Jlc3JjLmggLSBSZXNvdXJjZSBNYW5hZ2VyIGZ1bmN0aW9uIHByb3RvdHlwZXMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA1LCBSLiBCeXJvbiBNb29yZQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLAorICogICAgd2l0aG91dCBtb2RpZmljYXRpb24uCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgYXQgbWluaW11bSBhIGRpc2NsYWltZXIKKyAqICAgIHN1YnN0YW50aWFsbHkgc2ltaWxhciB0byB0aGUgIk5PIFdBUlJBTlRZIiBkaXNjbGFpbWVyIGJlbG93CisgKiAgICAoIkRpc2NsYWltZXIiKSBhbmQgYW55IHJlZGlzdHJpYnV0aW9uIG11c3QgYmUgY29uZGl0aW9uZWQgdXBvbgorICogICAgaW5jbHVkaW5nIGEgc3Vic3RhbnRpYWxseSBzaW1pbGFyIERpc2NsYWltZXIgcmVxdWlyZW1lbnQgZm9yIGZ1cnRoZXIKKyAqICAgIGJpbmFyeSByZWRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWVzIG9mIHRoZSBhYm92ZS1saXN0ZWQgY29weXJpZ2h0IGhvbGRlcnMgbm9yIHRoZSBuYW1lcworICogICAgb2YgYW55IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBOTyBXQVJSQU5UWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcKKyAqIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorICovCisKKyNpZm5kZWYgX19BQ1JFU1JDX0hfXworI2RlZmluZSBfX0FDUkVTUkNfSF9fCisKKworLyoKKyAqICBGdW5jdGlvbiBwcm90b3R5cGVzIGNhbGxlZCBmcm9tIEFjcGkqIEFQSXMKKyAqLworCithY3BpX3N0YXR1cworYWNwaV9yc19nZXRfcHJ0X21ldGhvZF9kYXRhICgKKwlhY3BpX2hhbmRsZSAgICAgICAgICAgICAgICAgICAgIGhhbmRsZSwKKwlzdHJ1Y3QgYWNwaV9idWZmZXIgICAgICAgICAgICAgICpyZXRfYnVmZmVyKTsKKworCithY3BpX3N0YXR1cworYWNwaV9yc19nZXRfY3JzX21ldGhvZF9kYXRhICgKKwlhY3BpX2hhbmRsZSAgICAgICAgICAgICAgICAgICAgIGhhbmRsZSwKKwlzdHJ1Y3QgYWNwaV9idWZmZXIgICAgICAgICAgICAgICpyZXRfYnVmZmVyKTsKKworI2lmZGVmIEFDUElfRlVUVVJFX1VTQUdFCithY3BpX3N0YXR1cworYWNwaV9yc19nZXRfcHJzX21ldGhvZF9kYXRhICgKKwlhY3BpX2hhbmRsZSAgICAgICAgICAgICAgICAgICAgIGhhbmRsZSwKKwlzdHJ1Y3QgYWNwaV9idWZmZXIgICAgICAgICAgICAgICpyZXRfYnVmZmVyKTsKKyNlbmRpZgorCithY3BpX3N0YXR1cworYWNwaV9yc19nZXRfbWV0aG9kX2RhdGEgKAorCWFjcGlfaGFuZGxlICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLAorCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnBhdGgsCisJc3RydWN0IGFjcGlfYnVmZmVyICAgICAgICAgICAgICAqcmV0X2J1ZmZlcik7CisKK2FjcGlfc3RhdHVzCithY3BpX3JzX3NldF9zcnNfbWV0aG9kX2RhdGEgKAorCWFjcGlfaGFuZGxlICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLAorCXN0cnVjdCBhY3BpX2J1ZmZlciAgICAgICAgICAgICAgKnJldF9idWZmZXIpOworCithY3BpX3N0YXR1cworYWNwaV9yc19jcmVhdGVfcmVzb3VyY2VfbGlzdCAoCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAqYnl0ZV9zdHJlYW1fYnVmZmVyLAorCXN0cnVjdCBhY3BpX2J1ZmZlciAgICAgICAgICAgICAgKm91dHB1dF9idWZmZXIpOworCithY3BpX3N0YXR1cworYWNwaV9yc19jcmVhdGVfYnl0ZV9zdHJlYW0gKAorCXN0cnVjdCBhY3BpX3Jlc291cmNlICAgICAgICAgICAgKmxpbmtlZF9saXN0X2J1ZmZlciwKKwlzdHJ1Y3QgYWNwaV9idWZmZXIgICAgICAgICAgICAgICpvdXRwdXRfYnVmZmVyKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfcnNfY3JlYXRlX3BjaV9yb3V0aW5nX3RhYmxlICgKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICpwYWNrYWdlX29iamVjdCwKKwlzdHJ1Y3QgYWNwaV9idWZmZXIgICAgICAgICAgICAgICpvdXRwdXRfYnVmZmVyKTsKKworCisvKgorICogRnVuY3Rpb24gcHJvdG90eXBlcyBjYWxsZWQgZnJvbSBhY3BpX3JzX2NyZWF0ZSoKKyAqLworI2lmZGVmIEFDUElfRlVUVVJFX1VTQUdFCit2b2lkCithY3BpX3JzX2R1bXBfaXJxICgKKwl1bmlvbiBhY3BpX3Jlc291cmNlX2RhdGEgICAgICAgICpkYXRhKTsKKwordm9pZAorYWNwaV9yc19kdW1wX2FkZHJlc3MxNiAoCisJdW5pb24gYWNwaV9yZXNvdXJjZV9kYXRhICAgICAgICAqZGF0YSk7CisKK3ZvaWQKK2FjcGlfcnNfZHVtcF9hZGRyZXNzMzIgKAorCXVuaW9uIGFjcGlfcmVzb3VyY2VfZGF0YSAgICAgICAgKmRhdGEpOworCit2b2lkCithY3BpX3JzX2R1bXBfYWRkcmVzczY0ICgKKwl1bmlvbiBhY3BpX3Jlc291cmNlX2RhdGEgICAgICAgICpkYXRhKTsKKwordm9pZAorYWNwaV9yc19kdW1wX2RtYSAoCisJdW5pb24gYWNwaV9yZXNvdXJjZV9kYXRhICAgICAgICAqZGF0YSk7CisKK3ZvaWQKK2FjcGlfcnNfZHVtcF9pbyAoCisJdW5pb24gYWNwaV9yZXNvdXJjZV9kYXRhICAgICAgICAqZGF0YSk7CisKK3ZvaWQKK2FjcGlfcnNfZHVtcF9leHRlbmRlZF9pcnEgKAorCXVuaW9uIGFjcGlfcmVzb3VyY2VfZGF0YSAgICAgICAgKmRhdGEpOworCit2b2lkCithY3BpX3JzX2R1bXBfZml4ZWRfaW8gKAorCXVuaW9uIGFjcGlfcmVzb3VyY2VfZGF0YSAgICAgICAgKmRhdGEpOworCit2b2lkCithY3BpX3JzX2R1bXBfZml4ZWRfbWVtb3J5MzIgKAorCXVuaW9uIGFjcGlfcmVzb3VyY2VfZGF0YSAgICAgICAgKmRhdGEpOworCit2b2lkCithY3BpX3JzX2R1bXBfbWVtb3J5MjQgKAorCXVuaW9uIGFjcGlfcmVzb3VyY2VfZGF0YSAgICAgICAgKmRhdGEpOworCit2b2lkCithY3BpX3JzX2R1bXBfbWVtb3J5MzIgKAorCXVuaW9uIGFjcGlfcmVzb3VyY2VfZGF0YSAgICAgICAgKmRhdGEpOworCit2b2lkCithY3BpX3JzX2R1bXBfc3RhcnRfZGVwZW5kX2ZucyAoCisJdW5pb24gYWNwaV9yZXNvdXJjZV9kYXRhICAgICAgICAqZGF0YSk7CisKK3ZvaWQKK2FjcGlfcnNfZHVtcF92ZW5kb3Jfc3BlY2lmaWMgKAorCXVuaW9uIGFjcGlfcmVzb3VyY2VfZGF0YSAgICAgICAgKmRhdGEpOworCit2b2lkCithY3BpX3JzX2R1bXBfcmVzb3VyY2VfbGlzdCAoCisJc3RydWN0IGFjcGlfcmVzb3VyY2UgICAgICAgICAgICAqcmVzb3VyY2UpOworCit2b2lkCithY3BpX3JzX2R1bXBfaXJxX2xpc3QgKAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnJvdXRlX3RhYmxlKTsKKyNlbmRpZiAgLyogIEFDUElfRlVUVVJFX1VTQUdFICAqLworCithY3BpX3N0YXR1cworYWNwaV9yc19nZXRfYnl0ZV9zdHJlYW1fc3RhcnQgKAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmJ5dGVfc3RyZWFtX2J1ZmZlciwKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqYnl0ZV9zdHJlYW1fc3RhcnQsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqc2l6ZSk7CisKK2FjcGlfc3RhdHVzCithY3BpX3JzX2dldF9saXN0X2xlbmd0aCAoCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYnl0ZV9zdHJlYW1fYnVmZmVyLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZV9zdHJlYW1fYnVmZmVyX2xlbmd0aCwKKwlhY3BpX3NpemUgICAgICAgICAgICAgICAgICAgICAgICpzaXplX25lZWRlZCk7CisKK2FjcGlfc3RhdHVzCithY3BpX3JzX2dldF9ieXRlX3N0cmVhbV9sZW5ndGggKAorCXN0cnVjdCBhY3BpX3Jlc291cmNlICAgICAgICAgICAgKmxpbmtlZF9saXN0X2J1ZmZlciwKKwlhY3BpX3NpemUgICAgICAgICAgICAgICAgICAgICAgICpzaXplX25lZWRlZCk7CisKK2FjcGlfc3RhdHVzCithY3BpX3JzX2dldF9wY2lfcm91dGluZ190YWJsZV9sZW5ndGggKAorCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgKnBhY2thZ2Vfb2JqZWN0LAorCWFjcGlfc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgKmJ1ZmZlcl9zaXplX25lZWRlZCk7CisKK2FjcGlfc3RhdHVzCithY3BpX3JzX2J5dGVfc3RyZWFtX3RvX2xpc3QgKAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmJ5dGVfc3RyZWFtX2J1ZmZlciwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVfc3RyZWFtX2J1ZmZlcl9sZW5ndGgsCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqb3V0cHV0X2J1ZmZlcik7CisKK2FjcGlfc3RhdHVzCithY3BpX3JzX2xpc3RfdG9fYnl0ZV9zdHJlYW0gKAorCXN0cnVjdCBhY3BpX3Jlc291cmNlICAgICAgICAgICAgKmxpbmtlZF9saXN0LAorCWFjcGlfc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgYnl0ZV9zdHJlYW1fc2l6ZV9uZWVkZWQsCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqb3V0cHV0X2J1ZmZlcik7CisKK2FjcGlfc3RhdHVzCithY3BpX3JzX2lvX3Jlc291cmNlICgKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpieXRlX3N0cmVhbV9idWZmZXIsCisJYWNwaV9zaXplICAgICAgICAgICAgICAgICAgICAgICAqYnl0ZXNfY29uc3VtZWQsCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKm91dHB1dF9idWZmZXIsCisJYWNwaV9zaXplICAgICAgICAgICAgICAgICAgICAgICAqc3RydWN0dXJlX3NpemUpOworCithY3BpX3N0YXR1cworYWNwaV9yc19maXhlZF9pb19yZXNvdXJjZSAoCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYnl0ZV9zdHJlYW1fYnVmZmVyLAorCWFjcGlfc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgKmJ5dGVzX2NvbnN1bWVkLAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKipvdXRwdXRfYnVmZmVyLAorCWFjcGlfc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgKnN0cnVjdHVyZV9zaXplKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfcnNfaW9fc3RyZWFtICgKKwlzdHJ1Y3QgYWNwaV9yZXNvdXJjZSAgICAgICAgICAgICpsaW5rZWRfbGlzdCwKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqb3V0cHV0X2J1ZmZlciwKKwlhY3BpX3NpemUgICAgICAgICAgICAgICAgICAgICAgICpieXRlc19jb25zdW1lZCk7CisKK2FjcGlfc3RhdHVzCithY3BpX3JzX2ZpeGVkX2lvX3N0cmVhbSAoCisJc3RydWN0IGFjcGlfcmVzb3VyY2UgICAgICAgICAgICAqbGlua2VkX2xpc3QsCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKm91dHB1dF9idWZmZXIsCisJYWNwaV9zaXplICAgICAgICAgICAgICAgICAgICAgICAqYnl0ZXNfY29uc3VtZWQpOworCithY3BpX3N0YXR1cworYWNwaV9yc19pcnFfcmVzb3VyY2UgKAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmJ5dGVfc3RyZWFtX2J1ZmZlciwKKwlhY3BpX3NpemUgICAgICAgICAgICAgICAgICAgICAgICpieXRlc19jb25zdW1lZCwKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqb3V0cHV0X2J1ZmZlciwKKwlhY3BpX3NpemUgICAgICAgICAgICAgICAgICAgICAgICpzdHJ1Y3R1cmVfc2l6ZSk7CisKK2FjcGlfc3RhdHVzCithY3BpX3JzX2lycV9zdHJlYW0gKAorCXN0cnVjdCBhY3BpX3Jlc291cmNlICAgICAgICAgICAgKmxpbmtlZF9saXN0LAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKipvdXRwdXRfYnVmZmVyLAorCWFjcGlfc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgKmJ5dGVzX2NvbnN1bWVkKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfcnNfZG1hX3Jlc291cmNlICgKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpieXRlX3N0cmVhbV9idWZmZXIsCisJYWNwaV9zaXplICAgICAgICAgICAgICAgICAgICAgICAqYnl0ZXNfY29uc3VtZWQsCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKm91dHB1dF9idWZmZXIsCisJYWNwaV9zaXplICAgICAgICAgICAgICAgICAgICAgICAqc3RydWN0dXJlX3NpemUpOworCithY3BpX3N0YXR1cworYWNwaV9yc19kbWFfc3RyZWFtICgKKwlzdHJ1Y3QgYWNwaV9yZXNvdXJjZSAgICAgICAgICAgICpsaW5rZWRfbGlzdCwKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqb3V0cHV0X2J1ZmZlciwKKwlhY3BpX3NpemUgICAgICAgICAgICAgICAgICAgICAgICpieXRlc19jb25zdW1lZCk7CisKK2FjcGlfc3RhdHVzCithY3BpX3JzX2FkZHJlc3MxNl9yZXNvdXJjZSAoCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYnl0ZV9zdHJlYW1fYnVmZmVyLAorCWFjcGlfc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgKmJ5dGVzX2NvbnN1bWVkLAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKipvdXRwdXRfYnVmZmVyLAorCWFjcGlfc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgKnN0cnVjdHVyZV9zaXplKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfcnNfYWRkcmVzczE2X3N0cmVhbSAoCisJc3RydWN0IGFjcGlfcmVzb3VyY2UgICAgICAgICAgICAqbGlua2VkX2xpc3QsCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKm91dHB1dF9idWZmZXIsCisJYWNwaV9zaXplICAgICAgICAgICAgICAgICAgICAgICAqYnl0ZXNfY29uc3VtZWQpOworCithY3BpX3N0YXR1cworYWNwaV9yc19hZGRyZXNzMzJfcmVzb3VyY2UgKAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmJ5dGVfc3RyZWFtX2J1ZmZlciwKKwlhY3BpX3NpemUgICAgICAgICAgICAgICAgICAgICAgICpieXRlc19jb25zdW1lZCwKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqb3V0cHV0X2J1ZmZlciwKKwlhY3BpX3NpemUgICAgICAgICAgICAgICAgICAgICAgICpzdHJ1Y3R1cmVfc2l6ZSk7CisKK2FjcGlfc3RhdHVzCithY3BpX3JzX2FkZHJlc3MzMl9zdHJlYW0gKAorCXN0cnVjdCBhY3BpX3Jlc291cmNlICAgICAgICAgICAgKmxpbmtlZF9saXN0LAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKipvdXRwdXRfYnVmZmVyLAorCWFjcGlfc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgKmJ5dGVzX2NvbnN1bWVkKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfcnNfYWRkcmVzczY0X3Jlc291cmNlICgKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpieXRlX3N0cmVhbV9idWZmZXIsCisJYWNwaV9zaXplICAgICAgICAgICAgICAgICAgICAgICAqYnl0ZXNfY29uc3VtZWQsCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKm91dHB1dF9idWZmZXIsCisJYWNwaV9zaXplICAgICAgICAgICAgICAgICAgICAgICAqc3RydWN0dXJlX3NpemUpOworCithY3BpX3N0YXR1cworYWNwaV9yc19hZGRyZXNzNjRfc3RyZWFtICgKKwlzdHJ1Y3QgYWNwaV9yZXNvdXJjZSAgICAgICAgICAgICpsaW5rZWRfbGlzdCwKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqb3V0cHV0X2J1ZmZlciwKKwlhY3BpX3NpemUgICAgICAgICAgICAgICAgICAgICAgICpieXRlc19jb25zdW1lZCk7CisKK2FjcGlfc3RhdHVzCithY3BpX3JzX3N0YXJ0X2RlcGVuZF9mbnNfcmVzb3VyY2UgKAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmJ5dGVfc3RyZWFtX2J1ZmZlciwKKwlhY3BpX3NpemUgICAgICAgICAgICAgICAgICAgICAgICpieXRlc19jb25zdW1lZCwKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqb3V0cHV0X2J1ZmZlciwKKwlhY3BpX3NpemUgICAgICAgICAgICAgICAgICAgICAgICpzdHJ1Y3R1cmVfc2l6ZSk7CisKK2FjcGlfc3RhdHVzCithY3BpX3JzX2VuZF9kZXBlbmRfZm5zX3Jlc291cmNlICgKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpieXRlX3N0cmVhbV9idWZmZXIsCisJYWNwaV9zaXplICAgICAgICAgICAgICAgICAgICAgICAqYnl0ZXNfY29uc3VtZWQsCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKm91dHB1dF9idWZmZXIsCisJYWNwaV9zaXplICAgICAgICAgICAgICAgICAgICAgICAqc3RydWN0dXJlX3NpemUpOworCithY3BpX3N0YXR1cworYWNwaV9yc19zdGFydF9kZXBlbmRfZm5zX3N0cmVhbSAoCisJc3RydWN0IGFjcGlfcmVzb3VyY2UgICAgICAgICAgICAqbGlua2VkX2xpc3QsCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKm91dHB1dF9idWZmZXIsCisJYWNwaV9zaXplICAgICAgICAgICAgICAgICAgICAgICAqYnl0ZXNfY29uc3VtZWQpOworCithY3BpX3N0YXR1cworYWNwaV9yc19lbmRfZGVwZW5kX2Zuc19zdHJlYW0gKAorCXN0cnVjdCBhY3BpX3Jlc291cmNlICAgICAgICAgICAgKmxpbmtlZF9saXN0LAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKipvdXRwdXRfYnVmZmVyLAorCWFjcGlfc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgKmJ5dGVzX2NvbnN1bWVkKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfcnNfbWVtb3J5MjRfcmVzb3VyY2UgKAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmJ5dGVfc3RyZWFtX2J1ZmZlciwKKwlhY3BpX3NpemUgICAgICAgICAgICAgICAgICAgICAgICpieXRlc19jb25zdW1lZCwKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqb3V0cHV0X2J1ZmZlciwKKwlhY3BpX3NpemUgICAgICAgICAgICAgICAgICAgICAgICpzdHJ1Y3R1cmVfc2l6ZSk7CisKK2FjcGlfc3RhdHVzCithY3BpX3JzX21lbW9yeTI0X3N0cmVhbSAoCisJc3RydWN0IGFjcGlfcmVzb3VyY2UgICAgICAgICAgICAqbGlua2VkX2xpc3QsCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKm91dHB1dF9idWZmZXIsCisJYWNwaV9zaXplICAgICAgICAgICAgICAgICAgICAgICAqYnl0ZXNfY29uc3VtZWQpOworCithY3BpX3N0YXR1cworYWNwaV9yc19tZW1vcnkzMl9yYW5nZV9yZXNvdXJjZSAoCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYnl0ZV9zdHJlYW1fYnVmZmVyLAorCWFjcGlfc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgKmJ5dGVzX2NvbnN1bWVkLAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKipvdXRwdXRfYnVmZmVyLAorCWFjcGlfc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgKnN0cnVjdHVyZV9zaXplKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfcnNfZml4ZWRfbWVtb3J5MzJfcmVzb3VyY2UgKAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmJ5dGVfc3RyZWFtX2J1ZmZlciwKKwlhY3BpX3NpemUgICAgICAgICAgICAgICAgICAgICAgICpieXRlc19jb25zdW1lZCwKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqb3V0cHV0X2J1ZmZlciwKKwlhY3BpX3NpemUgICAgICAgICAgICAgICAgICAgICAgICpzdHJ1Y3R1cmVfc2l6ZSk7CisKK2FjcGlfc3RhdHVzCithY3BpX3JzX21lbW9yeTMyX3JhbmdlX3N0cmVhbSAoCisJc3RydWN0IGFjcGlfcmVzb3VyY2UgICAgICAgICAgICAqbGlua2VkX2xpc3QsCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKm91dHB1dF9idWZmZXIsCisJYWNwaV9zaXplICAgICAgICAgICAgICAgICAgICAgICAqYnl0ZXNfY29uc3VtZWQpOworCithY3BpX3N0YXR1cworYWNwaV9yc19maXhlZF9tZW1vcnkzMl9zdHJlYW0gKAorCXN0cnVjdCBhY3BpX3Jlc291cmNlICAgICAgICAgICAgKmxpbmtlZF9saXN0LAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKipvdXRwdXRfYnVmZmVyLAorCWFjcGlfc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgKmJ5dGVzX2NvbnN1bWVkKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfcnNfZXh0ZW5kZWRfaXJxX3Jlc291cmNlICgKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpieXRlX3N0cmVhbV9idWZmZXIsCisJYWNwaV9zaXplICAgICAgICAgICAgICAgICAgICAgICAqYnl0ZXNfY29uc3VtZWQsCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKm91dHB1dF9idWZmZXIsCisJYWNwaV9zaXplICAgICAgICAgICAgICAgICAgICAgICAqc3RydWN0dXJlX3NpemUpOworCithY3BpX3N0YXR1cworYWNwaV9yc19leHRlbmRlZF9pcnFfc3RyZWFtICgKKwlzdHJ1Y3QgYWNwaV9yZXNvdXJjZSAgICAgICAgICAgICpsaW5rZWRfbGlzdCwKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqb3V0cHV0X2J1ZmZlciwKKwlhY3BpX3NpemUgICAgICAgICAgICAgICAgICAgICAgICpieXRlc19jb25zdW1lZCk7CisKK2FjcGlfc3RhdHVzCithY3BpX3JzX2VuZF90YWdfcmVzb3VyY2UgKAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmJ5dGVfc3RyZWFtX2J1ZmZlciwKKwlhY3BpX3NpemUgICAgICAgICAgICAgICAgICAgICAgICpieXRlc19jb25zdW1lZCwKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqb3V0cHV0X2J1ZmZlciwKKwlhY3BpX3NpemUgICAgICAgICAgICAgICAgICAgICAgICpzdHJ1Y3R1cmVfc2l6ZSk7CisKK2FjcGlfc3RhdHVzCithY3BpX3JzX2VuZF90YWdfc3RyZWFtICgKKwlzdHJ1Y3QgYWNwaV9yZXNvdXJjZSAgICAgICAgICAgICpsaW5rZWRfbGlzdCwKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqb3V0cHV0X2J1ZmZlciwKKwlhY3BpX3NpemUgICAgICAgICAgICAgICAgICAgICAgICpieXRlc19jb25zdW1lZCk7CisKK2FjcGlfc3RhdHVzCithY3BpX3JzX3ZlbmRvcl9yZXNvdXJjZSAoCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYnl0ZV9zdHJlYW1fYnVmZmVyLAorCWFjcGlfc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgKmJ5dGVzX2NvbnN1bWVkLAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKipvdXRwdXRfYnVmZmVyLAorCWFjcGlfc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgKnN0cnVjdHVyZV9zaXplKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfcnNfdmVuZG9yX3N0cmVhbSAoCisJc3RydWN0IGFjcGlfcmVzb3VyY2UgICAgICAgICAgICAqbGlua2VkX2xpc3QsCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKm91dHB1dF9idWZmZXIsCisJYWNwaV9zaXplICAgICAgICAgICAgICAgICAgICAgICAqYnl0ZXNfY29uc3VtZWQpOworCit1OAorYWNwaV9yc19nZXRfcmVzb3VyY2VfdHlwZSAoCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZV9zdGFydF9ieXRlKTsKKworI2VuZGlmICAvKiBfX0FDUkVTUkNfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWNzdHJ1Y3QuaCBiL2luY2x1ZGUvYWNwaS9hY3N0cnVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5Nzg0M2YKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FjcGkvYWNzdHJ1Y3QuaApAQCAtMCwwICsxLDIyMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIE5hbWU6IGFjc3RydWN0LmggLSBJbnRlcm5hbCBzdHJ1Y3RzCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwNSwgUi4gQnlyb24gTW9vcmUKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciwKKyAqICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIGF0IG1pbmltdW0gYSBkaXNjbGFpbWVyCisgKiAgICBzdWJzdGFudGlhbGx5IHNpbWlsYXIgdG8gdGhlICJOTyBXQVJSQU5UWSIgZGlzY2xhaW1lciBiZWxvdworICogICAgKCJEaXNjbGFpbWVyIikgYW5kIGFueSByZWRpc3RyaWJ1dGlvbiBtdXN0IGJlIGNvbmRpdGlvbmVkIHVwb24KKyAqICAgIGluY2x1ZGluZyBhIHN1YnN0YW50aWFsbHkgc2ltaWxhciBEaXNjbGFpbWVyIHJlcXVpcmVtZW50IGZvciBmdXJ0aGVyCisgKiAgICBiaW5hcnkgcmVkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lcyBvZiB0aGUgYWJvdmUtbGlzdGVkIGNvcHlyaWdodCBob2xkZXJzIG5vciB0aGUgbmFtZXMKKyAqICAgIG9mIGFueSBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGlzIHNvZnR3YXJlIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoIkdQTCIpIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogTk8gV0FSUkFOVFkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HCisgKiBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKyAqLworCisjaWZuZGVmIF9fQUNTVFJVQ1RfSF9fCisjZGVmaW5lIF9fQUNTVFJVQ1RfSF9fCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogVHJlZSB3YWxraW5nIHR5cGVkZWZzIGFuZCBzdHJ1Y3RzCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyoKKyAqIFdhbGsgc3RhdGUgLSBjdXJyZW50IHN0YXRlIG9mIGEgcGFyc2UgdHJlZSB3YWxrLiAgVXNlZCBmb3IgYm90aCBhIGxlaXN1cmVseSBzdHJvbGwgdGhyb3VnaAorICogdGhlIHRyZWUgKGZvciB3aGF0ZXZlciByZWFzb24pLCBhbmQgZm9yIGNvbnRyb2wgbWV0aG9kIGV4ZWN1dGlvbi4KKyAqLworCisjZGVmaW5lIEFDUElfTkVYVF9PUF9ET1dOV0FSRCAgICAgICAxCisjZGVmaW5lIEFDUElfTkVYVF9PUF9VUFdBUkQgICAgICAgICAyCisKKyNkZWZpbmUgQUNQSV9XQUxLX05PTl9NRVRIT0QgICAgICAgIDAKKyNkZWZpbmUgQUNQSV9XQUxLX01FVEhPRCAgICAgICAgICAgIDEKKyNkZWZpbmUgQUNQSV9XQUxLX01FVEhPRF9SRVNUQVJUICAgIDIKKyNkZWZpbmUgQUNQSV9XQUxLX0NPTlNUX1JFUVVJUkVEICAgIDMKKyNkZWZpbmUgQUNQSV9XQUxLX0NPTlNUX09QVElPTkFMICAgIDQKKworc3RydWN0IGFjcGlfd2Fsa19zdGF0ZQoreworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdHlwZTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRvIGRpZmZlcmVudGlhdGUgdmFyaW91cyBpbnRlcm5hbCBvYmpzIE1VU1QgQkUgRklSU1QhKi9cCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2Fsa190eXBlOworCWFjcGlfb3duZXJfaWQgICAgICAgICAgICAgICAgICAgICAgIG93bmVyX2lkOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE93bmVyIG9mIG9iamVjdHMgY3JlYXRlZCBkdXJpbmcgdGhlIHdhbGsgKi8KKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0X3ByZWRpY2F0ZTsgICAgICAgICAgICAgICAgICAgICAvKiBSZXN1bHQgb2YgbGFzdCBwcmVkaWNhdGUgKi8KKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNlcnZlZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGb3IgYWxpZ25tZW50ICovCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudF9yZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgLyogKi8KKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0X29wX2luZm87ICAgICAgICAgICAgICAgICAgICAgICAvKiBJbmZvIGFib3V0IG5leHRfb3AgKi8KKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1fb3BlcmFuZHM7ICAgICAgICAgICAgICAgICAgICAgICAvKiBTdGFjayBwb2ludGVyIGZvciBPcGVyYW5kc1tdIGFycmF5ICovCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3VzZWQ7CisJdTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Bjb2RlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ3VycmVudCBBTUwgb3Bjb2RlICovCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGVfZGVwdGg7CisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQxOworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ19jb3VudDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHB1c2ggZm9yIGZpeGVkIG9yIHZhciBhcmdzICovCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW1sX29mZnNldDsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdfdHlwZXM7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kX2JyZWFrcG9pbnQ7ICAgICAgICAgICAgICAgICAgLyogRm9yIHNpbmdsZSBzdGVwcGluZyAqLworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJfYnJlYWtwb2ludDsgICAgICAgICAgICAgICAgICAgIC8qIFVzZXIgQU1MIGJyZWFrcG9pbnQgKi8KKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZV9mbGFnczsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2X2FyZ190eXBlczsKKworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICphbWxfbGFzdF93aGlsZTsKKwlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAgICAgICAgICBhcmd1bWVudHNbQUNQSV9NRVRIT0RfTlVNX0FSR1NdOyAgICAvKiBDb250cm9sIG1ldGhvZCBhcmd1bWVudHMgKi8KKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICAgICAqKmNhbGxlcl9yZXR1cm5fZGVzYzsKKwl1bmlvbiBhY3BpX2dlbmVyaWNfc3RhdGUgICAgICAgICAgICAqY29udHJvbF9zdGF0ZTsgICAgICAgICAgICAgICAgICAgICAvKiBMaXN0IG9mIGNvbnRyb2wgc3RhdGVzIChuZXN0ZWQgSUZzKSAqLworCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICAgICAgICAgICpkZWZlcnJlZF9ub2RlOyAgICAgICAgICAgICAgICAgICAgIC8qIFVzZWQgd2hlbiBleGVjdXRpbmcgZGVmZXJyZWQgb3Bjb2RlcyAqLworCXN0cnVjdCBhY3BpX2dwZV9ldmVudF9pbmZvICAgICAgICAgICpncGVfZXZlbnRfaW5mbzsgICAgICAgICAgICAgICAgICAgIC8qIEluZm8gZm9yIEdQRSAoX0x4eC9fRXh4IG1ldGhvZHMgb25seSAqLworCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgICAgICppbXBsaWNpdF9yZXR1cm5fb2JqOworCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICAgICAgICAgIGxvY2FsX3ZhcmlhYmxlc1tBQ1BJX01FVEhPRF9OVU1fTE9DQUxTXTsgICAgLyogQ29udHJvbCBtZXRob2QgbG9jYWxzICovCisJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgICAgICAgICAgKm1ldGhvZF9jYWxsX25vZGU7ICAgICAgICAgICAgICAgICAgLyogQ2FsbGVkIG1ldGhvZCBOb2RlKi8KKwl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAgICAgICAgICAgICAqbWV0aG9kX2NhbGxfb3A7ICAgICAgICAgICAgICAgICAgICAvKiBtZXRob2RfY2FsbCBPcCBpZiBydW5uaW5nIGEgbWV0aG9kICovCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAgICAgKm1ldGhvZF9kZXNjOyAgICAgICAgICAgICAgICAgICAgICAgLyogTWV0aG9kIGRlc2NyaXB0b3IgaWYgcnVubmluZyBhIG1ldGhvZCAqLworCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICAgICAgICAgICptZXRob2Rfbm9kZTsgICAgICAgICAgICAgICAgICAgICAgIC8qIE1ldGhvZCBub2RlIGlmIHJ1bm5pbmcgYSBtZXRob2QuICovCisJdW5pb24gYWNwaV9wYXJzZV9vYmplY3QgICAgICAgICAgICAgKm9wOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ3VycmVudCBwYXJzZXIgb3AgKi8KKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICAgICAqb3BlcmFuZHNbQUNQSV9PQkpfTlVNX09QRVJBTkRTKzFdOyAvKiBPcGVyYW5kcyBwYXNzZWQgdG8gdGhlIGludGVycHJldGVyICgrMSBmb3IgTlVMTCB0ZXJtaW5hdG9yKSAqLworCWNvbnN0IHN0cnVjdCBhY3BpX29wY29kZV9pbmZvICAgICAgICpvcF9pbmZvOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluZm8gb24gY3VycmVudCBvcGNvZGUgKi8KKwl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAgICAgICAgICAgICAqb3JpZ2luOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTdGFydCBvZiB3YWxrIFtPYnNvbGV0ZV0gKi8KKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICAgICAqKnBhcmFtczsKKwlzdHJ1Y3QgYWNwaV9wYXJzZV9zdGF0ZSAgICAgICAgICAgICBwYXJzZXJfc3RhdGU7ICAgICAgICAgICAgICAgICAgICAgICAvKiBDdXJyZW50IHN0YXRlIG9mIHBhcnNlciAqLworCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgICAgICpyZXN1bHRfb2JqOworCXVuaW9uIGFjcGlfZ2VuZXJpY19zdGF0ZSAgICAgICAgICAgICpyZXN1bHRzOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFN0YWNrIG9mIGFjY3VtdWxhdGVkIHJlc3VsdHMgKi8KKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICAgICAqcmV0dXJuX2Rlc2M7ICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXR1cm4gb2JqZWN0LCBpZiBhbnkgKi8KKwl1bmlvbiBhY3BpX2dlbmVyaWNfc3RhdGUgICAgICAgICAgICAqc2NvcGVfaW5mbzsgICAgICAgICAgICAgICAgICAgICAgICAvKiBTdGFjayBvZiBuZXN0ZWQgc2NvcGVzICovCisKKwl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAgICAgICAgICAgICAqcHJldl9vcDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMYXN0IG9wIHRoYXQgd2FzIHByb2Nlc3NlZCAqLworCXVuaW9uIGFjcGlfcGFyc2Vfb2JqZWN0ICAgICAgICAgICAgICpuZXh0X29wOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5leHQgb3AgdG8gYmUgcHJvY2Vzc2VkICovCisJYWNwaV9wYXJzZV9kb3dud2FyZHMgICAgICAgICAgICAgICAgZGVzY2VuZGluZ19jYWxsYmFjazsKKwlhY3BpX3BhcnNlX3Vwd2FyZHMgICAgICAgICAgICAgICAgICBhc2NlbmRpbmdfY2FsbGJhY2s7CisJc3RydWN0IGFjcGlfdGhyZWFkX3N0YXRlICAgICAgICAgICAgKnRocmVhZDsKKwlzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICAgICAgICAgICAgICAqbmV4dDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOZXh0IHdhbGtfc3RhdGUgaW4gbGlzdCAqLworfTsKKworCisvKiBJbmZvIHVzZWQgYnkgYWNwaV9wc19pbml0X29iamVjdHMgKi8KKworc3RydWN0IGFjcGlfaW5pdF93YWxrX2luZm8KK3sKKwl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZF9jb3VudDsKKwl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZV9jb3VudDsKKwl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wX3JlZ2lvbl9jb3VudDsKKwl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX2NvdW50OworCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyX2NvdW50OworCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZV9jb3VudDsKKwl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wX3JlZ2lvbl9pbml0OworCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfaW5pdDsKKwl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl9pbml0OworCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZV9pbml0OworCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0X2NvdW50OworCXN0cnVjdCBhY3BpX3RhYmxlX2Rlc2MgICAgICAgICAgKnRhYmxlX2Rlc2M7Cit9OworCisKKy8qIEluZm8gdXNlZCBieSBhY3BpX25zX2luaXRpYWxpemVfZGV2aWNlcyAqLworCitzdHJ1Y3QgYWNwaV9kZXZpY2Vfd2Fsa19pbmZvCit7CisJdTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2VfY291bnQ7CisJdTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1fU1RBOworCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtX0lOSTsKKwlzdHJ1Y3QgYWNwaV90YWJsZV9kZXNjICAgICAgICAgICp0YWJsZV9kZXNjOworfTsKKworCisvKiBUQkQ6IFtSZXN0cnVjdHVyZV0gTWVyZ2Ugd2l0aCBzdHJ1Y3QgYWJvdmUgKi8KKworc3RydWN0IGFjcGlfd2Fsa19pbmZvCit7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z19sZXZlbDsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyX2lkOworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheV90eXBlOworfTsKKworLyogRGlzcGxheSBUeXBlcyAqLworCisjZGVmaW5lIEFDUElfRElTUExBWV9TVU1NQVJZICAgIDAKKyNkZWZpbmUgQUNQSV9ESVNQTEFZX09CSkVDVFMgICAgMQorCitzdHJ1Y3QgYWNwaV9nZXRfZGV2aWNlc19pbmZvCit7CisJYWNwaV93YWxrX2NhbGxiYWNrICAgICAgICAgICAgICB1c2VyX2Z1bmN0aW9uOworCXZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmNvbnRleHQ7CisJY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqaGlkOworfTsKKworCit1bmlvbiBhY3BpX2FtbF9vcGVyYW5kcworeworCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgICAgICpvcGVyYW5kc1s3XTsKKworCXN0cnVjdAorCXsKKwkJc3RydWN0IGFjcGlfb2JqZWN0X2ludGVnZXIgICAgICAqdHlwZTsKKwkJc3RydWN0IGFjcGlfb2JqZWN0X2ludGVnZXIgICAgICAqY29kZTsKKwkJc3RydWN0IGFjcGlfb2JqZWN0X2ludGVnZXIgICAgICAqYXJndW1lbnQ7CisKKwl9IGZhdGFsOworCisJc3RydWN0CisJeworCQl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICpzb3VyY2U7CisJCXN0cnVjdCBhY3BpX29iamVjdF9pbnRlZ2VyICAgICAgKmluZGV4OworCQl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICp0YXJnZXQ7CisKKwl9IGluZGV4OworCisJc3RydWN0CisJeworCQl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICpzb3VyY2U7CisJCXN0cnVjdCBhY3BpX29iamVjdF9pbnRlZ2VyICAgICAgKmluZGV4OworCQlzdHJ1Y3QgYWNwaV9vYmplY3RfaW50ZWdlciAgICAgICpsZW5ndGg7CisJCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgKnRhcmdldDsKKworCX0gbWlkOworfTsKKworCisvKiBJbnRlcm5hbCBtZXRob2QgcGFyYW1ldGVyIGxpc3QgKi8KKworc3RydWN0IGFjcGlfcGFyYW1ldGVyX2luZm8KK3sKKwlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAgICAgICpub2RlOworCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgKipwYXJhbWV0ZXJzOworCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgKnJldHVybl9vYmplY3Q7CisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfdHlwZTsKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybl9vYmplY3RfdHlwZTsKK307CisKKy8qIFR5cGVzIGZvciBwYXJhbWV0ZXJfdHlwZSBhYm92ZSAqLworCisjZGVmaW5lIEFDUElfUEFSQU1fQVJHUyAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBQ1BJX1BBUkFNX0dQRSAgICAgICAgICAgICAgICAgIDEKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY3RhYmxlcy5oIGIvaW5jbHVkZS9hY3BpL2FjdGFibGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThmNWQ0ZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYWNwaS9hY3RhYmxlcy5oCkBAIC0wLDAgKzEsMjM1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogTmFtZTogYWN0YWJsZXMuaCAtIEFDUEkgdGFibGUgbWFuYWdlbWVudAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDUsIFIuIEJ5cm9uIE1vb3JlCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIsCisgKiAgICB3aXRob3V0IG1vZGlmaWNhdGlvbi4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSBhdCBtaW5pbXVtIGEgZGlzY2xhaW1lcgorICogICAgc3Vic3RhbnRpYWxseSBzaW1pbGFyIHRvIHRoZSAiTk8gV0FSUkFOVFkiIGRpc2NsYWltZXIgYmVsb3cKKyAqICAgICgiRGlzY2xhaW1lciIpIGFuZCBhbnkgcmVkaXN0cmlidXRpb24gbXVzdCBiZSBjb25kaXRpb25lZCB1cG9uCisgKiAgICBpbmNsdWRpbmcgYSBzdWJzdGFudGlhbGx5IHNpbWlsYXIgRGlzY2xhaW1lciByZXF1aXJlbWVudCBmb3IgZnVydGhlcgorICogICAgYmluYXJ5IHJlZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZXMgb2YgdGhlIGFib3ZlLWxpc3RlZCBjb3B5cmlnaHQgaG9sZGVycyBub3IgdGhlIG5hbWVzCisgKiAgICBvZiBhbnkgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhpcyBzb2Z0d2FyZSBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKCJHUEwiKSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIE5PIFdBUlJBTlRZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORworICogSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisgKi8KKworI2lmbmRlZiBfX0FDVEFCTEVTX0hfXworI2RlZmluZSBfX0FDVEFCTEVTX0hfXworCisKKy8qIFVzZWQgaW4gYWNwaV90Yl9tYXBfYWNwaV90YWJsZSBmb3Igc2l6ZSBwYXJhbWV0ZXIgaWYgdGFibGUgaGVhZGVyIGlzIHRvIGJlIHVzZWQgKi8KKworI2RlZmluZSBTSVpFX0lOX0hFQURFUiAgICAgICAgICAwCisKKworI2lmZGVmIEFDUElfRlVUVVJFX1VTQUdFCithY3BpX3N0YXR1cworYWNwaV90Yl9oYW5kbGVfdG9fb2JqZWN0ICgKKwl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2lkLAorCXN0cnVjdCBhY3BpX3RhYmxlX2Rlc2MgICAgICAgICAgKip0YWJsZV9kZXNjKTsKKyNlbmRpZgorCisvKgorICogdGJjb252cnQgLSBUYWJsZSBjb252ZXJzaW9uIHJvdXRpbmVzCisgKi8KKworYWNwaV9zdGF0dXMKK2FjcGlfdGJfY29udmVydF90b194c2R0ICgKKwlzdHJ1Y3QgYWNwaV90YWJsZV9kZXNjICAgICAgICAgICp0YWJsZV9pbmZvKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfdGJfY29udmVydF90YWJsZV9mYWR0ICgKKwl2b2lkKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfdGJfYnVpbGRfY29tbW9uX2ZhY3MgKAorCXN0cnVjdCBhY3BpX3RhYmxlX2Rlc2MgICAgICAgICAgKnRhYmxlX2luZm8pOworCit1MzIKK2FjcGlfdGJfZ2V0X3RhYmxlX2NvdW50ICgKKwlzdHJ1Y3QgcnNkcF9kZXNjcmlwdG9yICAgICAgICAgICpSU0RQLAorCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAgICAgICAgKlJTRFQpOworCisvKgorICogdGJnZXQgLSBUYWJsZSAiZ2V0IiByb3V0aW5lcworICovCisKK2FjcGlfc3RhdHVzCithY3BpX3RiX2dldF90YWJsZSAoCisJc3RydWN0IGFjcGlfcG9pbnRlciAgICAgICAgICAgICAqYWRkcmVzcywKKwlzdHJ1Y3QgYWNwaV90YWJsZV9kZXNjICAgICAgICAgICp0YWJsZV9pbmZvKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfdGJfZ2V0X3RhYmxlX2hlYWRlciAoCisJc3RydWN0IGFjcGlfcG9pbnRlciAgICAgICAgICAgICAqYWRkcmVzcywKKwlzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgICAgICAgICpyZXR1cm5faGVhZGVyKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfdGJfZ2V0X3RhYmxlX2JvZHkgKAorCXN0cnVjdCBhY3BpX3BvaW50ZXIgICAgICAgICAgICAgKmFkZHJlc3MsCisJc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICAgICAgICAqaGVhZGVyLAorCXN0cnVjdCBhY3BpX3RhYmxlX2Rlc2MgICAgICAgICAgKnRhYmxlX2luZm8pOworCithY3BpX3N0YXR1cworYWNwaV90Yl9nZXRfdGhpc190YWJsZSAoCisJc3RydWN0IGFjcGlfcG9pbnRlciAgICAgICAgICAgICAqYWRkcmVzcywKKwlzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgICAgICAgICpoZWFkZXIsCisJc3RydWN0IGFjcGlfdGFibGVfZGVzYyAgICAgICAgICAqdGFibGVfaW5mbyk7CisKK2FjcGlfc3RhdHVzCithY3BpX3RiX3RhYmxlX292ZXJyaWRlICgKKwlzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgICAgICAgICpoZWFkZXIsCisJc3RydWN0IGFjcGlfdGFibGVfZGVzYyAgICAgICAgICAqdGFibGVfaW5mbyk7CisKK2FjcGlfc3RhdHVzCithY3BpX3RiX2dldF90YWJsZV9wdHIgKAorCWFjcGlfdGFibGVfdHlwZSAgICAgICAgICAgICAgICAgdGFibGVfdHlwZSwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLAorCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAgICAgICAgKip0YWJsZV9wdHJfbG9jKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfdGJfdmVyaWZ5X3JzZHAgKAorCXN0cnVjdCBhY3BpX3BvaW50ZXIgICAgICAgICAgICAgKmFkZHJlc3MpOworCit2b2lkCithY3BpX3RiX2dldF9yc2R0X2FkZHJlc3MgKAorCXN0cnVjdCBhY3BpX3BvaW50ZXIgICAgICAgICAgICAgKm91dF9hZGRyZXNzKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfdGJfdmFsaWRhdGVfcnNkdCAoCisJc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICAgICAgICAqdGFibGVfcHRyKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfdGJfZ2V0X3JlcXVpcmVkX3RhYmxlcyAoCisJdm9pZCk7CisKK2FjcGlfc3RhdHVzCithY3BpX3RiX2dldF9wcmltYXJ5X3RhYmxlICgKKwlzdHJ1Y3QgYWNwaV9wb2ludGVyICAgICAgICAgICAgICphZGRyZXNzLAorCXN0cnVjdCBhY3BpX3RhYmxlX2Rlc2MgICAgICAgICAgKnRhYmxlX2luZm8pOworCithY3BpX3N0YXR1cworYWNwaV90Yl9nZXRfc2Vjb25kYXJ5X3RhYmxlICgKKwlzdHJ1Y3QgYWNwaV9wb2ludGVyICAgICAgICAgICAgICphZGRyZXNzLAorCWFjcGlfc3RyaW5nICAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlLAorCXN0cnVjdCBhY3BpX3RhYmxlX2Rlc2MgICAgICAgICAgKnRhYmxlX2luZm8pOworCisvKgorICogdGJpbnN0YWxsIC0gVGFibGUgaW5zdGFsbGF0aW9uCisgKi8KKworYWNwaV9zdGF0dXMKK2FjcGlfdGJfaW5zdGFsbF90YWJsZSAoCisJc3RydWN0IGFjcGlfdGFibGVfZGVzYyAgICAgICAgICAqdGFibGVfaW5mbyk7CisKK2FjcGlfc3RhdHVzCithY3BpX3RiX21hdGNoX3NpZ25hdHVyZSAoCisJY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqc2lnbmF0dXJlLAorCXN0cnVjdCBhY3BpX3RhYmxlX2Rlc2MgICAgICAgICAgKnRhYmxlX2luZm8sCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hfdHlwZSk7CisKK2FjcGlfc3RhdHVzCithY3BpX3RiX3JlY29nbml6ZV90YWJsZSAoCisJc3RydWN0IGFjcGlfdGFibGVfZGVzYyAgICAgICAgICAqdGFibGVfaW5mbywKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaF90eXBlKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfdGJfaW5pdF90YWJsZV9kZXNjcmlwdG9yICgKKwlhY3BpX3RhYmxlX3R5cGUgICAgICAgICAgICAgICAgIHRhYmxlX3R5cGUsCisJc3RydWN0IGFjcGlfdGFibGVfZGVzYyAgICAgICAgICAqdGFibGVfaW5mbyk7CisKKworLyoKKyAqIHRicmVtb3ZlIC0gVGFibGUgcmVtb3ZhbCBhbmQgZGVsZXRpb24KKyAqLworCit2b2lkCithY3BpX3RiX2RlbGV0ZV9hbGxfdGFibGVzICgKKwl2b2lkKTsKKwordm9pZAorYWNwaV90Yl9kZWxldGVfdGFibGVzX2J5X3R5cGUgKAorCWFjcGlfdGFibGVfdHlwZSAgICAgICAgICAgICAgICAgdHlwZSk7CisKK3ZvaWQKK2FjcGlfdGJfZGVsZXRlX3NpbmdsZV90YWJsZSAoCisJc3RydWN0IGFjcGlfdGFibGVfZGVzYyAgICAgICAgICAqdGFibGVfZGVzYyk7CisKK3N0cnVjdCBhY3BpX3RhYmxlX2Rlc2MgKgorYWNwaV90Yl91bmluc3RhbGxfdGFibGUgKAorCXN0cnVjdCBhY3BpX3RhYmxlX2Rlc2MgICAgICAgICAgKnRhYmxlX2Rlc2MpOworCisKKy8qCisgKiB0YnJzZCAtIFJTRFAsIFJTRFQgdXRpbGl0aWVzCisgKi8KKworYWNwaV9zdGF0dXMKK2FjcGlfdGJfZ2V0X3RhYmxlX3JzZHQgKAorCXZvaWQpOworCit1OCAqCithY3BpX3RiX3NjYW5fbWVtb3J5X2Zvcl9yc2RwICgKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpzdGFydF9hZGRyZXNzLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfdGJfZmluZF9yc2RwICgKKwlzdHJ1Y3QgYWNwaV90YWJsZV9kZXNjICAgICAgICAgICp0YWJsZV9pbmZvLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MpOworCisKKy8qCisgKiB0YnV0aWxzIC0gY29tbW9uIHRhYmxlIHV0aWxpdGllcworICovCisKK2FjcGlfc3RhdHVzCithY3BpX3RiX2ZpbmRfdGFibGUgKAorCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnNpZ25hdHVyZSwKKwljaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICpvZW1faWQsCisJY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqb2VtX3RhYmxlX2lkLAorCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAgICAgICAgKip0YWJsZV9wdHIpOworCithY3BpX3N0YXR1cworYWNwaV90Yl92ZXJpZnlfdGFibGVfY2hlY2tzdW0gKAorCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAgICAgICAgKnRhYmxlX2hlYWRlcik7CisKK3U4CithY3BpX3RiX2NoZWNrc3VtICgKKwl2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICpidWZmZXIsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGgpOworCithY3BpX3N0YXR1cworYWNwaV90Yl92YWxpZGF0ZV90YWJsZV9oZWFkZXIgKAorCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAgICAgICAgKnRhYmxlX2hlYWRlcik7CisKKworI2VuZGlmIC8qIF9fQUNUQUJMRVNfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWN0YmwuaCBiL2luY2x1ZGUvYWNwaS9hY3RibC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlZWU3MzEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FjcGkvYWN0YmwuaApAQCAtMCwwICsxLDM1NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIE5hbWU6IGFjdGJsLmggLSBUYWJsZSBkYXRhIHN0cnVjdHVyZXMgZGVmaW5lZCBpbiBBQ1BJIHNwZWNpZmljYXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA1LCBSLiBCeXJvbiBNb29yZQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLAorICogICAgd2l0aG91dCBtb2RpZmljYXRpb24uCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgYXQgbWluaW11bSBhIGRpc2NsYWltZXIKKyAqICAgIHN1YnN0YW50aWFsbHkgc2ltaWxhciB0byB0aGUgIk5PIFdBUlJBTlRZIiBkaXNjbGFpbWVyIGJlbG93CisgKiAgICAoIkRpc2NsYWltZXIiKSBhbmQgYW55IHJlZGlzdHJpYnV0aW9uIG11c3QgYmUgY29uZGl0aW9uZWQgdXBvbgorICogICAgaW5jbHVkaW5nIGEgc3Vic3RhbnRpYWxseSBzaW1pbGFyIERpc2NsYWltZXIgcmVxdWlyZW1lbnQgZm9yIGZ1cnRoZXIKKyAqICAgIGJpbmFyeSByZWRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWVzIG9mIHRoZSBhYm92ZS1saXN0ZWQgY29weXJpZ2h0IGhvbGRlcnMgbm9yIHRoZSBuYW1lcworICogICAgb2YgYW55IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBOTyBXQVJSQU5UWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcKKyAqIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorICovCisKKyNpZm5kZWYgX19BQ1RCTF9IX18KKyNkZWZpbmUgX19BQ1RCTF9IX18KKworCisvKgorICogIFZhbHVlcyBmb3IgZGVzY3JpcHRpb24gdGFibGUgaGVhZGVyIHNpZ25hdHVyZXMKKyAqLworI2RlZmluZSBSU0RQX05BTUUgICAgICAgICAgICAgICAiUlNEUCIKKyNkZWZpbmUgUlNEUF9TSUcgICAgICAgICAgICAgICAgIlJTRCBQVFIgIiAgLyogUlNEVCBQb2ludGVyIHNpZ25hdHVyZSAqLworI2RlZmluZSBBUElDX1NJRyAgICAgICAgICAgICAgICAiQVBJQyIgICAgICAvKiBNdWx0aXBsZSBBUElDIERlc2NyaXB0aW9uIFRhYmxlICovCisjZGVmaW5lIERTRFRfU0lHICAgICAgICAgICAgICAgICJEU0RUIiAgICAgIC8qIERpZmZlcmVudGlhdGVkIFN5c3RlbSBEZXNjcmlwdGlvbiBUYWJsZSAqLworI2RlZmluZSBGQURUX1NJRyAgICAgICAgICAgICAgICAiRkFDUCIgICAgICAvKiBGaXhlZCBBQ1BJIERlc2NyaXB0aW9uIFRhYmxlICovCisjZGVmaW5lIEZBQ1NfU0lHICAgICAgICAgICAgICAgICJGQUNTIiAgICAgIC8qIEZpcm13YXJlIEFDUEkgQ29udHJvbCBTdHJ1Y3R1cmUgKi8KKyNkZWZpbmUgUFNEVF9TSUcgICAgICAgICAgICAgICAgIlBTRFQiICAgICAgLyogUGVyc2lzdGVudCBTeXN0ZW0gRGVzY3JpcHRpb24gVGFibGUgKi8KKyNkZWZpbmUgUlNEVF9TSUcgICAgICAgICAgICAgICAgIlJTRFQiICAgICAgLyogUm9vdCBTeXN0ZW0gRGVzY3JpcHRpb24gVGFibGUgKi8KKyNkZWZpbmUgWFNEVF9TSUcgICAgICAgICAgICAgICAgIlhTRFQiICAgICAgLyogRXh0ZW5kZWQgIFN5c3RlbSBEZXNjcmlwdGlvbiBUYWJsZSAqLworI2RlZmluZSBTU0RUX1NJRyAgICAgICAgICAgICAgICAiU1NEVCIgICAgICAvKiBTZWNvbmRhcnkgU3lzdGVtIERlc2NyaXB0aW9uIFRhYmxlICovCisjZGVmaW5lIFNCU1RfU0lHICAgICAgICAgICAgICAgICJTQlNUIiAgICAgIC8qIFNtYXJ0IEJhdHRlcnkgU3BlY2lmaWNhdGlvbiBUYWJsZSAqLworI2RlZmluZSBTUElDX1NJRyAgICAgICAgICAgICAgICAiU1BJQyIgICAgICAvKiBJT1NBUElDIHRhYmxlICovCisjZGVmaW5lIEJPT1RfU0lHICAgICAgICAgICAgICAgICJCT09UIiAgICAgIC8qIEJvb3QgdGFibGUgKi8KKworCisjZGVmaW5lIEdMX09XTkVEICAgICAgICAgICAgICAgIDB4MDIgICAgICAgIC8qIE93bmVyc2hpcCBvZiBnbG9iYWwgbG9jayBpcyBiaXQgMSAqLworCisKKy8qCisgKiBDb21tb24gdGFibGUgdHlwZXMuICBUaGUgYmFzZSBjb2RlIGNhbiByZW1haW4KKyAqIGNvbnN0YW50IGlmIHRoZSB1bmRlcmx5aW5nIHRhYmxlcyBhcmUgY2hhbmdlZAorICovCisjZGVmaW5lIFJTRFRfREVTQ1JJUFRPUiAgICAgICAgIHN0cnVjdCByc2R0X2Rlc2NyaXB0b3JfcmV2MgorI2RlZmluZSBYU0RUX0RFU0NSSVBUT1IgICAgICAgICBzdHJ1Y3QgeHNkdF9kZXNjcmlwdG9yX3JldjIKKyNkZWZpbmUgRkFDU19ERVNDUklQVE9SICAgICAgICAgc3RydWN0IGZhY3NfZGVzY3JpcHRvcl9yZXYyCisjZGVmaW5lIEZBRFRfREVTQ1JJUFRPUiAgICAgICAgIHN0cnVjdCBmYWR0X2Rlc2NyaXB0b3JfcmV2MgorCisKKyNwcmFnbWEgcGFjaygxKQorCisvKgorICogQUNQSSBWZXJzaW9uLWluZGVwZW5kZW50IHRhYmxlcworICoKKyAqIE5PVEU6IFRoZSB0YWJsZXMgdGhhdCBhcmUgc3BlY2lmaWMgdG8gQUNQSSB2ZXJzaW9ucyAoMS4wLCAyLjAsIGV0Yy4pCisgKiBhcmUgaW4gc2VwYXJhdGUgZmlsZXMuCisgKi8KK3N0cnVjdCByc2RwX2Rlc2NyaXB0b3IgICAgICAgICAvKiBSb290IFN5c3RlbSBEZXNjcmlwdG9yIFBvaW50ZXIgKi8KK3sKKwljaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZSBbOF07ICAgICAgICAgIC8qIEFDUEkgc2lnbmF0dXJlLCBjb250YWlucyAiUlNEIFBUUiAiICovCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja3N1bTsgICAgICAgICAgICAgICAvKiBUbyBtYWtlIHN1bSBvZiBzdHJ1Y3QgPT0gMCAqLworCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2VtX2lkIFs2XTsgICAgICAgICAgICAgLyogT0VNIGlkZW50aWZpY2F0aW9uICovCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXZpc2lvbjsgICAgICAgICAgICAgICAvKiBNdXN0IGJlIDAgZm9yIDEuMCwgMiBmb3IgMi4wICovCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICByc2R0X3BoeXNpY2FsX2FkZHJlc3M7ICAvKiAzMi1iaXQgcGh5c2ljYWwgYWRkcmVzcyBvZiBSU0RUICovCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGg7ICAgICAgICAgICAgICAgICAvKiBYU0RUIExlbmd0aCBpbiBieXRlcyBpbmNsdWRpbmcgaGRyICovCisJdTY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4c2R0X3BoeXNpY2FsX2FkZHJlc3M7ICAvKiA2NC1iaXQgcGh5c2ljYWwgYWRkcmVzcyBvZiBYU0RUICovCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlbmRlZF9jaGVja3N1bTsgICAgICAvKiBDaGVja3N1bSBvZiBlbnRpcmUgdGFibGUgKi8KKwljaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2VydmVkIFszXTsgICAgICAgICAgIC8qIFJlc2VydmVkIGZpZWxkIG11c3QgYmUgMCAqLworfTsKKworCitzdHJ1Y3QgYWNwaV9jb21tb25fZmFjcyAgICAgICAgICAvKiBDb21tb24gRkFDUyBmb3IgaW50ZXJuYWwgdXNlICovCit7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqZ2xvYmFsX2xvY2s7CisJdTY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqZmlybXdhcmVfd2FraW5nX3ZlY3RvcjsKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3Rvcl93aWR0aDsKK307CisKKworI2RlZmluZSBBQ1BJX1RBQkxFX0hFQURFUl9ERUYgICAvKiBBQ1BJIGNvbW1vbiB0YWJsZSBoZWFkZXIgKi8gXAorCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlIFs0XTsgICAgICAgICAgLyogQUNQSSBzaWduYXR1cmUgKDQgQVNDSUkgY2hhcmFjdGVycykgKi9cCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGg7ICAgICAgICAgICAgICAgICAvKiBMZW5ndGggb2YgdGFibGUsIGluIGJ5dGVzLCBpbmNsdWRpbmcgaGVhZGVyICovXAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV2aXNpb247ICAgICAgICAgICAgICAgLyogQUNQSSBTcGVjaWZpY2F0aW9uIG1pbm9yIHZlcnNpb24gIyAqL1wKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrc3VtOyAgICAgICAgICAgICAgIC8qIFRvIG1ha2Ugc3VtIG9mIGVudGlyZSB0YWJsZSA9PSAwICovXAorCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2VtX2lkIFs2XTsgICAgICAgICAgICAgLyogT0VNIGlkZW50aWZpY2F0aW9uICovXAorCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2VtX3RhYmxlX2lkIFs4XTsgICAgICAgLyogT0VNIHRhYmxlIGlkZW50aWZpY2F0aW9uICovXAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2VtX3JldmlzaW9uOyAgICAgICAgICAgLyogT0VNIHJldmlzaW9uIG51bWJlciAqL1wKKwljaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzbF9jb21waWxlcl9pZCBbNF07ICAgIC8qIEFTTCBjb21waWxlciB2ZW5kb3IgSUQgKi9cCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc2xfY29tcGlsZXJfcmV2aXNpb247ICAvKiBBU0wgY29tcGlsZXIgcmV2aXNpb24gbnVtYmVyICovCisKKworc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICAgICAgICAgLyogQUNQSSBjb21tb24gdGFibGUgaGVhZGVyICovCit7CisJQUNQSV9UQUJMRV9IRUFERVJfREVGCit9OworCisKKy8qCisgKiBNQURUIHZhbHVlcyBhbmQgc3RydWN0dXJlcworICovCisKKy8qIFZhbHVlcyBmb3IgTUFEVCBQQ0FUQ29tcGF0ICovCisKKyNkZWZpbmUgRFVBTF9QSUMgICAgICAgICAgICAgICAgMAorI2RlZmluZSBNVUxUSVBMRV9BUElDICAgICAgICAgICAxCisKKworLyogTWFzdGVyIE1BRFQgKi8KKworc3RydWN0IG11bHRpcGxlX2FwaWNfdGFibGUKK3sKKwlBQ1BJX1RBQkxFX0hFQURFUl9ERUYgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBQ1BJIGNvbW1vbiB0YWJsZSBoZWFkZXIgKi8KKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsX2FwaWNfYWRkcmVzczsgICAgIC8qIFBoeXNpY2FsIGFkZHJlc3Mgb2YgbG9jYWwgQVBJQyAqLworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUENBVGNvbXBhdCAgICAgIDogMTsgICAgLyogQSBvbmUgaW5kaWNhdGVzIHN5c3RlbSBhbHNvIGhhcyBkdWFsIDgyNTlzICovCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNlcnZlZDEgICAgICAgOiAzMTsKK307CisKKworLyogVmFsdWVzIGZvciBUeXBlIGluIEFQSUNfSEVBREVSX0RFRiAqLworCisjZGVmaW5lIEFQSUNfUFJPQ0VTU09SICAgICAgICAgIDAKKyNkZWZpbmUgQVBJQ19JTyAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBBUElDX1hSVVBUX09WRVJSSURFICAgICAyCisjZGVmaW5lIEFQSUNfTk1JICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQVBJQ19MT0NBTF9OTUkgICAgICAgICAgNAorI2RlZmluZSBBUElDX0FERFJFU1NfT1ZFUlJJREUgICA1CisjZGVmaW5lIEFQSUNfSU9fU0FQSUMgICAgICAgICAgIDYKKyNkZWZpbmUgQVBJQ19MT0NBTF9TQVBJQyAgICAgICAgNworI2RlZmluZSBBUElDX1hSVVBUX1NPVVJDRSAgICAgICA4CisjZGVmaW5lIEFQSUNfUkVTRVJWRUQgICAgICAgICAgIDkgICAgICAgICAgIC8qIDkgYW5kIGdyZWF0ZXIgYXJlIHJlc2VydmVkICovCisKKy8qCisgKiBNQURUIHN1Yi1zdHJ1Y3R1cmVzIChGb2xsb3cgTVVMVElQTEVfQVBJQ19ERVNDUklQVElPTl9UQUJMRSkKKyAqLworI2RlZmluZSBBUElDX0hFQURFUl9ERUYgICAgICAgICAgICAgICAgICAgICAvKiBDb21tb24gQVBJQyBzdWItc3RydWN0dXJlIGhlYWRlciAqL1wKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU7IFwKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aDsKKworc3RydWN0IGFwaWNfaGVhZGVyCit7CisJQVBJQ19IRUFERVJfREVGCit9OworCisvKiBWYWx1ZXMgZm9yIE1QUyBJTlRJIGZsYWdzICovCisKKyNkZWZpbmUgUE9MQVJJVFlfQ09ORk9STVMgICAgICAgMAorI2RlZmluZSBQT0xBUklUWV9BQ1RJVkVfSElHSCAgICAxCisjZGVmaW5lIFBPTEFSSVRZX1JFU0VSVkVEICAgICAgIDIKKyNkZWZpbmUgUE9MQVJJVFlfQUNUSVZFX0xPVyAgICAgMworCisjZGVmaW5lIFRSSUdHRVJfQ09ORk9STVMgICAgICAgIDAKKyNkZWZpbmUgVFJJR0dFUl9FREdFICAgICAgICAgICAgMQorI2RlZmluZSBUUklHR0VSX1JFU0VSVkVEICAgICAgICAyCisjZGVmaW5lIFRSSUdHRVJfTEVWRUwgICAgICAgICAgIDMKKworLyogQ29tbW9uIGZsYWcgZGVmaW5pdGlvbnMgKi8KKworI2RlZmluZSBNUFNfSU5USV9GTEFHUyBcCisJdTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2xhcml0eSAgICAgICAgOiAyOyAgICAvKiBQb2xhcml0eSBvZiBBUElDIEkvTyBpbnB1dCBzaWduYWxzICovXAorCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcl9tb2RlICAgIDogMjsgICAgLyogVHJpZ2dlciBtb2RlIG9mIEFQSUMgaW5wdXQgc2lnbmFscyAqL1wKKwl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2VydmVkMSAgICAgICA6IDEyOyAgIC8qIFJlc2VydmVkLCBtdXN0IGJlIHplcm8gKi8KKworI2RlZmluZSBMT0NBTF9BUElDX0ZMQUdTIFwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3Nvcl9lbmFibGVkOiAxOyAgIC8qIFByb2Nlc3NvciBpcyB1c2FibGUgaWYgc2V0ICovXAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQyICAgICAgIDogMzE7ICAgLyogUmVzZXJ2ZWQsIG11c3QgYmUgemVybyAqLworCisvKiBTdWItc3RydWN0dXJlcyBmb3IgTUFEVCAqLworCitzdHJ1Y3QgbWFkdF9wcm9jZXNzb3JfYXBpYworeworCUFQSUNfSEVBREVSX0RFRgorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc29yX2lkOyAgICAgICAgICAgLyogQUNQSSBwcm9jZXNzb3IgaWQgKi8KKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsX2FwaWNfaWQ7ICAgICAgICAgIC8qIFByb2Nlc3NvcidzIGxvY2FsIEFQSUMgaWQgKi8KKwlMT0NBTF9BUElDX0ZMQUdTCit9OworCitzdHJ1Y3QgbWFkdF9pb19hcGljCit7CisJQVBJQ19IRUFERVJfREVGCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19hcGljX2lkOyAgICAgICAgICAgICAvKiBJL08gQVBJQyBJRCAqLworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQ7ICAgICAgICAgICAgICAgLyogUmVzZXJ2ZWQgLSBtdXN0IGJlIHplcm8gKi8KKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3M7ICAgICAgICAgICAgICAgIC8qIEFQSUMgcGh5c2ljYWwgYWRkcmVzcyAqLworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0OyAgICAgICAgICAgICAgLyogR2xvYmFsIHN5c3RlbSBpbnRlcnJ1cHQgd2hlcmUgSU5USQorCQkJICAqIGxpbmVzIHN0YXJ0ICovCit9OworCitzdHJ1Y3QgbWFkdF9pbnRlcnJ1cHRfb3ZlcnJpZGUKK3sKKwlBUElDX0hFQURFUl9ERUYKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1czsgICAgICAgICAgICAgICAgICAgIC8qIDAgLSBJU0EgKi8KKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZTsgICAgICAgICAgICAgICAgIC8qIEludGVycnVwdCBzb3VyY2UgKElSUSkgKi8KKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdDsgICAgICAgICAgICAgIC8qIEdsb2JhbCBzeXN0ZW0gaW50ZXJydXB0ICovCisJTVBTX0lOVElfRkxBR1MKK307CisKK3N0cnVjdCBtYWR0X25taV9zb3VyY2UKK3sKKwlBUElDX0hFQURFUl9ERUYKKwlNUFNfSU5USV9GTEFHUworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0OyAgICAgICAgICAgICAgLyogR2xvYmFsIHN5c3RlbSBpbnRlcnJ1cHQgKi8KK307CisKK3N0cnVjdCBtYWR0X2xvY2FsX2FwaWNfbm1pCit7CisJQVBJQ19IRUFERVJfREVGCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzb3JfaWQ7ICAgICAgICAgICAvKiBBQ1BJIHByb2Nlc3NvciBpZCAqLworCU1QU19JTlRJX0ZMQUdTCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW50OyAgICAgICAgICAgICAgICAgICAvKiBMSU5UbiB0byB3aGljaCBOTUkgaXMgY29ubmVjdGVkICovCit9OworCitzdHJ1Y3QgbWFkdF9hZGRyZXNzX292ZXJyaWRlCit7CisJQVBJQ19IRUFERVJfREVGCisJdTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNlcnZlZDsgICAgICAgICAgICAgICAvKiBSZXNlcnZlZCAtIG11c3QgYmUgemVybyAqLworCXU2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzczsgICAgICAgICAgICAgICAgLyogQVBJQyBwaHlzaWNhbCBhZGRyZXNzICovCit9OworCitzdHJ1Y3QgbWFkdF9pb19zYXBpYworeworCUFQSUNfSEVBREVSX0RFRgorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fc2FwaWNfaWQ7ICAgICAgICAgICAgLyogSS9PIFNBUElDIElEICovCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNlcnZlZDsgICAgICAgICAgICAgICAvKiBSZXNlcnZlZCAtIG11c3QgYmUgemVybyAqLworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0X2Jhc2U7ICAgICAgICAgLyogR2xvY2FsIGludGVycnVwdCBmb3IgU0FQSUMgc3RhcnQgKi8KKwl1NjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3M7ICAgICAgICAgICAgICAgIC8qIFNBUElDIHBoeXNpY2FsIGFkZHJlc3MgKi8KK307CisKK3N0cnVjdCBtYWR0X2xvY2FsX3NhcGljCit7CisJQVBJQ19IRUFERVJfREVGCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzb3JfaWQ7ICAgICAgICAgICAvKiBBQ1BJIHByb2Nlc3NvciBpZCAqLworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxfc2FwaWNfaWQ7ICAgICAgICAgLyogU0FQSUMgSUQgKi8KKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsX3NhcGljX2VpZDsgICAgICAgIC8qIFNBUElDIEVJRCAqLworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQgWzNdOyAgICAgICAgICAgLyogUmVzZXJ2ZWQgLSBtdXN0IGJlIHplcm8gKi8KKwlMT0NBTF9BUElDX0ZMQUdTCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzb3JfdUlEOyAgICAgICAgICAvKiBOdW1lcmljIFVJRCAtIEFDUEkgMy4wICovCisJY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzb3JfdUlEc3RyaW5nWzFdOyAvKiBTdHJpbmcgVUlEICAtIEFDUEkgMy4wICovCit9OworCitzdHJ1Y3QgbWFkdF9pbnRlcnJ1cHRfc291cmNlCit7CisJQVBJQ19IRUFERVJfREVGCisJTVBTX0lOVElfRkxBR1MKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdF90eXBlOyAgICAgICAgIC8qIDE9UE1JLCAyPUlOSVQsIDM9Y29ycmVjdGVkICovCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzb3JfaWQ7ICAgICAgICAgICAvKiBQcm9jZXNzb3IgSUQgKi8KKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3Nvcl9laWQ7ICAgICAgICAgIC8qIFByb2Nlc3NvciBFSUQgKi8KKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX3NhcGljX3ZlY3RvcjsgICAgICAgIC8qIFZlY3RvciB2YWx1ZSBmb3IgUE1JIGludGVycnVwdHMgKi8KKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdDsgICAgICAgICAgICAgIC8qIEdsb2JhbCBzeXN0ZW0gaW50ZXJydXB0ICovCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnczsgICAgICAgICAgICAgICAgICAvKiBJbnRlcnJ1cHQgU291cmNlIEZsYWdzICovCit9OworCisKKy8qCisgKiBTbWFydCBCYXR0ZXJ5CisgKi8KK3N0cnVjdCBzbWFydF9iYXR0ZXJ5X3RhYmxlCit7CisJQUNQSV9UQUJMRV9IRUFERVJfREVGCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nX2xldmVsOworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG93X2xldmVsOworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JpdGljYWxfbGV2ZWw7Cit9OworCisKKyNwcmFnbWEgcGFjaygpCisKKworLyoKKyAqIEFDUEkgVGFibGUgaW5mb3JtYXRpb24uICBXZSBzYXZlIHRoZSB0YWJsZSBhZGRyZXNzLCBsZW5ndGgsCisgKiBhbmQgdHlwZSBvZiBtZW1vcnkgYWxsb2NhdGlvbiAobWFwcGVkIG9yIGFsbG9jYXRlZCkgZm9yIGVhY2gKKyAqIHRhYmxlIGZvciAxKSB3aGVuIHdlIGV4aXQsIGFuZCAyKSBpZiBhIG5ldyB0YWJsZSBpcyBpbnN0YWxsZWQKKyAqLworI2RlZmluZSBBQ1BJX01FTV9OT1RfQUxMT0NBVEVEICAwCisjZGVmaW5lIEFDUElfTUVNX0FMTE9DQVRFRCAgICAgIDEKKyNkZWZpbmUgQUNQSV9NRU1fTUFQUEVEICAgICAgICAgMgorCisvKiBEZWZpbml0aW9ucyBmb3IgdGhlIEZsYWdzIGJpdGZpZWxkIG1lbWJlciBvZiBzdHJ1Y3QgYWNwaV90YWJsZV9zdXBwb3J0ICovCisKKyNkZWZpbmUgQUNQSV9UQUJMRV9TSU5HTEUgICAgICAgMHgwMAorI2RlZmluZSBBQ1BJX1RBQkxFX01VTFRJUExFICAgICAweDAxCisjZGVmaW5lIEFDUElfVEFCTEVfRVhFQ1VUQUJMRSAgIDB4MDIKKworI2RlZmluZSBBQ1BJX1RBQkxFX1JPT1QgICAgICAgICAweDAwCisjZGVmaW5lIEFDUElfVEFCTEVfUFJJTUFSWSAgICAgIDB4MTAKKyNkZWZpbmUgQUNQSV9UQUJMRV9TRUNPTkRBUlkgICAgMHgyMAorI2RlZmluZSBBQ1BJX1RBQkxFX0FMTCAgICAgICAgICAweDMwCisjZGVmaW5lIEFDUElfVEFCTEVfVFlQRV9NQVNLICAgIDB4MzAKKworLyogRGF0YSBhYm91dCBlYWNoIGtub3duIHRhYmxlIHR5cGUgKi8KKworc3RydWN0IGFjcGlfdGFibGVfc3VwcG9ydAoreworCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5hbWU7CisJY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqc2lnbmF0dXJlOworCXZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKipnbG9iYWxfcHRyOworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnX2xlbmd0aDsKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzOworfTsKKworCisvKgorICogR2V0IHRoZSBBQ1BJIHZlcnNpb24tc3BlY2lmaWMgdGFibGVzCisgKi8KKyNpbmNsdWRlICJhY3RibDEuaCIgICAvKiBBY3BpIDEuMCB0YWJsZSBkZWZpbml0aW9ucyAqLworI2luY2x1ZGUgImFjdGJsMi5oIiAgIC8qIEFjcGkgMi4wIHRhYmxlIGRlZmluaXRpb25zICovCisKK2V4dGVybiB1OCBhY3BpX2ZhZHRfaXNfdjE7IC8qIGlzIHNldCB0byAxIGlmIEZBRFQgaXMgcmV2aXNpb24gMSwKKwkJCSAgICAqIG5lZWRlZCBmb3IgY2VydGFpbiB3b3JrYXJvdW5kcyAqLworCisjcHJhZ21hIHBhY2soMSkKKy8qCisgKiBIaWdoIHBlcmZvcm1hbmNlIHRpbWVyCisgKi8KK3N0cnVjdCBocGV0X3RhYmxlCit7CisJQUNQSV9UQUJMRV9IRUFERVJfREVGCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXJkd2FyZV9pZDsKKwlzdHJ1Y3QgYWNwaV9nZW5lcmljX2FkZHJlc3MgICAgIGJhc2VfYWRkcmVzczsKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhwZXRfbnVtYmVyOworCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2tfdGljazsKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM7Cit9OworCisjcHJhZ21hIHBhY2soKQorCisjZW5kaWYgLyogX19BQ1RCTF9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY3RibDEuaCBiL2luY2x1ZGUvYWNwaS9hY3RibDEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2RlNWY0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hY3BpL2FjdGJsMS5oCkBAIC0wLDAgKzEsMTM2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogTmFtZTogYWN0YmwxLmggLSBBQ1BJIDEuMCB0YWJsZXMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA1LCBSLiBCeXJvbiBNb29yZQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLAorICogICAgd2l0aG91dCBtb2RpZmljYXRpb24uCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgYXQgbWluaW11bSBhIGRpc2NsYWltZXIKKyAqICAgIHN1YnN0YW50aWFsbHkgc2ltaWxhciB0byB0aGUgIk5PIFdBUlJBTlRZIiBkaXNjbGFpbWVyIGJlbG93CisgKiAgICAoIkRpc2NsYWltZXIiKSBhbmQgYW55IHJlZGlzdHJpYnV0aW9uIG11c3QgYmUgY29uZGl0aW9uZWQgdXBvbgorICogICAgaW5jbHVkaW5nIGEgc3Vic3RhbnRpYWxseSBzaW1pbGFyIERpc2NsYWltZXIgcmVxdWlyZW1lbnQgZm9yIGZ1cnRoZXIKKyAqICAgIGJpbmFyeSByZWRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWVzIG9mIHRoZSBhYm92ZS1saXN0ZWQgY29weXJpZ2h0IGhvbGRlcnMgbm9yIHRoZSBuYW1lcworICogICAgb2YgYW55IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBOTyBXQVJSQU5UWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcKKyAqIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorICovCisKKyNpZm5kZWYgX19BQ1RCTDFfSF9fCisjZGVmaW5lIF9fQUNUQkwxX0hfXworCisjcHJhZ21hIHBhY2soMSkKKworLyoKKyAqIEFDUEkgMS4wIFJvb3QgU3lzdGVtIERlc2NyaXB0aW9uIFRhYmxlIChSU0RUKQorICovCitzdHJ1Y3QgcnNkdF9kZXNjcmlwdG9yX3JldjEKK3sKKwlBQ1BJX1RBQkxFX0hFQURFUl9ERUYgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBQ1BJIGNvbW1vbiB0YWJsZSBoZWFkZXIgKi8KKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX29mZnNldF9lbnRyeSBbMV07IC8qIEFycmF5IG9mIHBvaW50ZXJzIHRvIG90aGVyICovCisJCQkgLyogQUNQSSB0YWJsZXMgKi8KK307CisKKworLyoKKyAqIEFDUEkgMS4wIEZpcm13YXJlIEFDUEkgQ29udHJvbCBTdHJ1Y3R1cmUgKEZBQ1MpCisgKi8KK3N0cnVjdCBmYWNzX2Rlc2NyaXB0b3JfcmV2MQoreworCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlWzRdOyAgICAgICAgICAgLyogQUNQSSBTaWduYXR1cmUgKi8KKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aDsgICAgICAgICAgICAgICAgIC8qIExlbmd0aCBvZiBzdHJ1Y3R1cmUsIGluIGJ5dGVzICovCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXJkd2FyZV9zaWduYXR1cmU7ICAgICAvKiBIYXJkd2FyZSBjb25maWd1cmF0aW9uIHNpZ25hdHVyZSAqLworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlybXdhcmVfd2FraW5nX3ZlY3RvcjsgLyogQUNQSSBPUyB3YWtpbmcgdmVjdG9yICovCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWxfbG9jazsgICAgICAgICAgICAvKiBHbG9iYWwgTG9jayAqLworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUzRiaW9zX2YgICAgICAgIDogMTsgICAgLyogSW5kaWNhdGVzIGlmIFM0QklPUyBzdXBwb3J0IGlzIHByZXNlbnQgKi8KKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2VydmVkMSAgICAgICA6IDMxOyAgIC8qIE11c3QgYmUgMCAqLworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdmVydmVkMyBbNDBdOyAgICAgICAgLyogUmVzZXJ2ZWQgLSBtdXN0IGJlIHplcm8gKi8KK307CisKKworLyoKKyAqIEFDUEkgMS4wIEZpeGVkIEFDUEkgRGVzY3JpcHRpb24gVGFibGUgKEZBRFQpCisgKi8KK3N0cnVjdCBmYWR0X2Rlc2NyaXB0b3JfcmV2MQoreworCUFDUElfVEFCTEVfSEVBREVSX0RFRiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFDUEkgY29tbW9uIHRhYmxlIGhlYWRlciAqLworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlybXdhcmVfY3RybDsgICAgICAgICAgLyogUGh5c2ljYWwgYWRkcmVzcyBvZiBGQUNTICovCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc2R0OyAgICAgICAgICAgICAgICAgICAvKiBQaHlzaWNhbCBhZGRyZXNzIG9mIERTRFQgKi8KKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsOyAgICAgICAgICAgICAgICAgIC8qIFN5c3RlbSBJbnRlcnJ1cHQgTW9kZWwgKi8KKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2VydmVkMTsgICAgICAgICAgICAgIC8qIFJlc2VydmVkICovCisJdTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2lfaW50OyAgICAgICAgICAgICAgICAvKiBTeXN0ZW0gdmVjdG9yIG9mIFNDSSBpbnRlcnJ1cHQgKi8KKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtaV9jbWQ7ICAgICAgICAgICAgICAgIC8qIFBvcnQgYWRkcmVzcyBvZiBTTUkgY29tbWFuZCBwb3J0ICovCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3BpX2VuYWJsZTsgICAgICAgICAgICAvKiBWYWx1ZSB0byB3cml0ZSB0byBzbWlfY21kIHRvIGVuYWJsZSBBQ1BJICovCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3BpX2Rpc2FibGU7ICAgICAgICAgICAvKiBWYWx1ZSB0byB3cml0ZSB0byBzbWlfY21kIHRvIGRpc2FibGUgQUNQSSAqLworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUzRiaW9zX3JlcTsgICAgICAgICAgICAgLyogVmFsdWUgdG8gd3JpdGUgdG8gU01JIENNRCB0byBlbnRlciBTNEJJT1Mgc3RhdGUgKi8KKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2VydmVkMjsgICAgICAgICAgICAgIC8qIFJlc2VydmVkIC0gbXVzdCBiZSB6ZXJvICovCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbTFhX2V2dF9ibGs7ICAgICAgICAgICAvKiBQb3J0IGFkZHJlc3Mgb2YgUG93ZXIgTWd0IDFhIGFjcGlfZXZlbnQgUmVnIEJsayAqLworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG0xYl9ldnRfYmxrOyAgICAgICAgICAgLyogUG9ydCBhZGRyZXNzIG9mIFBvd2VyIE1ndCAxYiBhY3BpX2V2ZW50IFJlZyBCbGsgKi8KKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBtMWFfY250X2JsazsgICAgICAgICAgIC8qIFBvcnQgYWRkcmVzcyBvZiBQb3dlciBNZ3QgMWEgQ29udHJvbCBSZWcgQmxrICovCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbTFiX2NudF9ibGs7ICAgICAgICAgICAvKiBQb3J0IGFkZHJlc3Mgb2YgUG93ZXIgTWd0IDFiIENvbnRyb2wgUmVnIEJsayAqLworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG0yX2NudF9ibGs7ICAgICAgICAgICAgLyogUG9ydCBhZGRyZXNzIG9mIFBvd2VyIE1ndCAyIENvbnRyb2wgUmVnIEJsayAqLworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG1fdG1yX2JsazsgICAgICAgICAgICAgLyogUG9ydCBhZGRyZXNzIG9mIFBvd2VyIE1ndCBUaW1lciBDdHJsIFJlZyBCbGsgKi8KKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwZTBfYmxrOyAgICAgICAgICAgICAgIC8qIFBvcnQgYWRkciBvZiBHZW5lcmFsIFB1cnBvc2UgYWNwaV9ldmVudCAwIFJlZyBCbGsgKi8KKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwZTFfYmxrOyAgICAgICAgICAgICAgIC8qIFBvcnQgYWRkciBvZiBHZW5lcmFsIFB1cnBvc2UgYWNwaV9ldmVudCAxIFJlZyBCbGsgKi8KKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBtMV9ldnRfbGVuOyAgICAgICAgICAgIC8qIEJ5dGUgbGVuZ3RoIG9mIHBvcnRzIGF0IHBtMV94X2V2dF9ibGsgKi8KKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBtMV9jbnRfbGVuOyAgICAgICAgICAgIC8qIEJ5dGUgbGVuZ3RoIG9mIHBvcnRzIGF0IHBtMV94X2NudF9ibGsgKi8KKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBtMl9jbnRfbGVuOyAgICAgICAgICAgIC8qIEJ5dGUgTGVuZ3RoIG9mIHBvcnRzIGF0IHBtMl9jbnRfYmxrICovCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbV90bV9sZW47ICAgICAgICAgICAgICAvKiBCeXRlIExlbmd0aCBvZiBwb3J0cyBhdCBwbV90bV9ibGsgKi8KKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwZTBfYmxrX2xlbjsgICAgICAgICAgIC8qIEJ5dGUgTGVuZ3RoIG9mIHBvcnRzIGF0IGdwZTBfYmxrICovCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncGUxX2Jsa19sZW47ICAgICAgICAgICAvKiBCeXRlIExlbmd0aCBvZiBwb3J0cyBhdCBncGUxX2JsayAqLworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BlMV9iYXNlOyAgICAgICAgICAgICAgLyogT2Zmc2V0IGluIGdwZSBtb2RlbCB3aGVyZSBncGUxIGV2ZW50cyBzdGFydCAqLworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQzOyAgICAgICAgICAgICAgLyogUmVzZXJ2ZWQgKi8KKwl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdmwyX2xhdDsgICAgICAgICAgICAgIC8qIFdvcnN0IGNhc2UgSFcgbGF0ZW5jeSB0byBlbnRlci9leGl0IEMyIHN0YXRlICovCisJdTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHZsM19sYXQ7ICAgICAgICAgICAgICAvKiBXb3JzdCBjYXNlIEhXIGxhdGVuY3kgdG8gZW50ZXIvZXhpdCBDMyBzdGF0ZSAqLworCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmx1c2hfc2l6ZTsgICAgICAgICAgICAgLyogU2l6ZSBvZiBhcmVhIHJlYWQgdG8gZmx1c2ggY2FjaGVzICovCisJdTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbHVzaF9zdHJpZGU7ICAgICAgICAgICAvKiBTdHJpZGUgdXNlZCBpbiBmbHVzaGluZyBjYWNoZXMgKi8KKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1dHlfb2Zmc2V0OyAgICAgICAgICAgIC8qIEJpdCBsb2NhdGlvbiBvZiBkdXR5IGN5Y2xlIGZpZWxkIGluIHBfY250IHJlZyAqLworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHV0eV93aWR0aDsgICAgICAgICAgICAgLyogQml0IHdpZHRoIG9mIGR1dHkgY3ljbGUgZmllbGQgaW4gcF9jbnQgcmVnICovCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXlfYWxybTsgICAgICAgICAgICAgICAvKiBJbmRleCB0byBkYXktb2YtbW9udGggYWxhcm0gaW4gUlRDIENNT1MgUkFNICovCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb25fYWxybTsgICAgICAgICAgICAgICAvKiBJbmRleCB0byBtb250aC1vZi15ZWFyIGFsYXJtIGluIFJUQyBDTU9TIFJBTSAqLworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VudHVyeTsgICAgICAgICAgICAgICAgLyogSW5kZXggdG8gY2VudHVyeSBpbiBSVEMgQ01PUyBSQU0gKi8KKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2VydmVkNDsgICAgICAgICAgICAgIC8qIFJlc2VydmVkICovCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNlcnZlZDRhOyAgICAgICAgICAgICAvKiBSZXNlcnZlZCAqLworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQ0YjsgICAgICAgICAgICAgLyogUmVzZXJ2ZWQgKi8KKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiX2ludmQgICAgICAgICA6IDE7ICAgIC8qIFRoZSB3YmludmQgaW5zdHJ1Y3Rpb24gd29ya3MgcHJvcGVybHkgKi8KKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiX2ludmRfZmx1c2ggICA6IDE7ICAgIC8qIFRoZSB3YmludmQgZmx1c2hlcyBidXQgZG9lcyBub3QgaW52YWxpZGF0ZSAqLworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY19jMSAgICAgICAgIDogMTsgICAgLyogQWxsIHByb2Nlc3NvcnMgc3VwcG9ydCBDMSBzdGF0ZSAqLworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx2bDJfdXAgICAgICAgIDogMTsgICAgLyogQzIgc3RhdGUgd29ya3Mgb24gTVAgc3lzdGVtICovCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwd3JfYnV0dG9uICAgICAgOiAxOyAgICAvKiBQb3dlciBidXR0b24gaXMgaGFuZGxlZCBhcyBhIGdlbmVyaWMgZmVhdHVyZSAqLworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xlZXBfYnV0dG9uICAgIDogMTsgICAgLyogU2xlZXAgYnV0dG9uIGlzIGhhbmRsZWQgYXMgYSBnZW5lcmljIGZlYXR1cmUsIG9yIG5vdCBwcmVzZW50ICovCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXhlZF9yVEMgICAgICAgOiAxOyAgICAvKiBSVEMgd2FrZXVwIHN0YXQgbm90IGluIGZpeGVkIHJlZ2lzdGVyIHNwYWNlICovCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydGNzNCAgICAgICAgICAgOiAxOyAgICAvKiBSVEMgd2FrZXVwIHN0YXQgbm90IHBvc3NpYmxlIGZyb20gUzQgKi8KKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcl92YWxfZXh0ICAgICA6IDE7ICAgIC8qIFRoZSB0bXJfdmFsIHdpZHRoIGlzIDMyIGJpdHMgKDAgPSAyNCBiaXRzKSAqLworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQ1ICAgICAgIDogMjM7ICAgLyogUmVzZXJ2ZWQgLSBtdXN0IGJlIHplcm8gKi8KK307CisKKyNwcmFnbWEgcGFjaygpCisKKyNlbmRpZiAvKiBfX0FDVEJMMV9IX18gKi8KKworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWN0YmwyLmggYi9pbmNsdWRlL2FjcGkvYWN0YmwyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE3MjljOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYWNwaS9hY3RibDIuaApAQCAtMCwwICsxLDI4OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIE5hbWU6IGFjdGJsMi5oIC0gQUNQSSBTcGVjaWZpY2F0aW9uIFJldmlzaW9uIDIuMCBUYWJsZXMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA1LCBSLiBCeXJvbiBNb29yZQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLAorICogICAgd2l0aG91dCBtb2RpZmljYXRpb24uCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgYXQgbWluaW11bSBhIGRpc2NsYWltZXIKKyAqICAgIHN1YnN0YW50aWFsbHkgc2ltaWxhciB0byB0aGUgIk5PIFdBUlJBTlRZIiBkaXNjbGFpbWVyIGJlbG93CisgKiAgICAoIkRpc2NsYWltZXIiKSBhbmQgYW55IHJlZGlzdHJpYnV0aW9uIG11c3QgYmUgY29uZGl0aW9uZWQgdXBvbgorICogICAgaW5jbHVkaW5nIGEgc3Vic3RhbnRpYWxseSBzaW1pbGFyIERpc2NsYWltZXIgcmVxdWlyZW1lbnQgZm9yIGZ1cnRoZXIKKyAqICAgIGJpbmFyeSByZWRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWVzIG9mIHRoZSBhYm92ZS1saXN0ZWQgY29weXJpZ2h0IGhvbGRlcnMgbm9yIHRoZSBuYW1lcworICogICAgb2YgYW55IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBOTyBXQVJSQU5UWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcKKyAqIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorICovCisKKyNpZm5kZWYgX19BQ1RCTDJfSF9fCisjZGVmaW5lIF9fQUNUQkwyX0hfXworCisvKgorICogUHJlZmVyZWQgUG93ZXIgTWFuYWdlbWVudCBQcm9maWxlcworICovCisjZGVmaW5lIFBNX1VOU1BFQ0lGSUVEICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBQTV9ERVNLVE9QICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgUE1fTU9CSUxFICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIFBNX1dPUktTVEFUSU9OICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBQTV9FTlRFUlBSSVNFX1NFUlZFUiAgICAgICAgICAgIDQKKyNkZWZpbmUgUE1fU09IT19TRVJWRVIgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIFBNX0FQUExJQU5DRV9QQyAgICAgICAgICAgICAgICAgNgorCisvKgorICogQUNQSSBCb290IEFyY2ggRmxhZ3MKKyAqLworI2RlZmluZSBCQUZfTEVHQUNZX0RFVklDRVMgICAgICAgICAgICAgIDB4MDAwMQorI2RlZmluZSBCQUZfODA0Ml9LRVlCT0FSRF9DT05UUk9MTEVSICAgIDB4MDAwMgorCisjZGVmaW5lIEZBRFQyX1JFVklTSU9OX0lEICAgICAgICAgICAgICAgMworI2RlZmluZSBGQURUMl9NSU5VU19SRVZJU0lPTl9JRCAgICAgICAgIDIKKworCisjcHJhZ21hIHBhY2soMSkKKworLyoKKyAqIEFDUEkgMi4wIFJvb3QgU3lzdGVtIERlc2NyaXB0aW9uIFRhYmxlIChSU0RUKQorICovCitzdHJ1Y3QgcnNkdF9kZXNjcmlwdG9yX3JldjIKK3sKKwlBQ1BJX1RBQkxFX0hFQURFUl9ERUYgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBQ1BJIGNvbW1vbiB0YWJsZSBoZWFkZXIgKi8KKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX29mZnNldF9lbnRyeSBbMV07IC8qIEFycmF5IG9mIHBvaW50ZXJzIHRvICAqLworCQkJIC8qIEFDUEkgdGFibGUgaGVhZGVycyAqLworfTsKKworCisvKgorICogQUNQSSAyLjAgRXh0ZW5kZWQgU3lzdGVtIERlc2NyaXB0aW9uIFRhYmxlIChYU0RUKQorICovCitzdHJ1Y3QgeHNkdF9kZXNjcmlwdG9yX3JldjIKK3sKKwlBQ1BJX1RBQkxFX0hFQURFUl9ERUYgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBQ1BJIGNvbW1vbiB0YWJsZSBoZWFkZXIgKi8KKwl1NjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX29mZnNldF9lbnRyeSBbMV07IC8qIEFycmF5IG9mIHBvaW50ZXJzIHRvICAqLworCQkJIC8qIEFDUEkgdGFibGUgaGVhZGVycyAqLworfTsKKworCisvKgorICogQUNQSSAyLjAgRmlybXdhcmUgQUNQSSBDb250cm9sIFN0cnVjdHVyZSAoRkFDUykKKyAqLworc3RydWN0IGZhY3NfZGVzY3JpcHRvcl9yZXYyCit7CisJY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmVbNF07ICAgICAgICAgICAvKiBBQ1BJIHNpZ25hdHVyZSAqLworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoOyAgICAgICAgICAgICAgICAgLyogTGVuZ3RoIG9mIHN0cnVjdHVyZSwgaW4gYnl0ZXMgKi8KKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhcmR3YXJlX3NpZ25hdHVyZTsgICAgIC8qIEhhcmR3YXJlIGNvbmZpZ3VyYXRpb24gc2lnbmF0dXJlICovCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJtd2FyZV93YWtpbmdfdmVjdG9yOyAvKiAzMmJpdCBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBGaXJtd2FyZSBXYWtpbmcgVmVjdG9yLiAqLworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsX2xvY2s7ICAgICAgICAgICAgLyogR2xvYmFsIExvY2sgdXNlZCB0byBzeW5jaHJvbml6ZSBhY2Nlc3MgdG8gc2hhcmVkIGhhcmR3YXJlIHJlc291cmNlcyAqLworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUzRiaW9zX2YgICAgICAgIDogMTsgICAgLyogUzRCaW9zX2YgLSBJbmRpY2F0ZXMgaWYgUzRCSU9TIHN1cHBvcnQgaXMgcHJlc2VudCAqLworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQxICAgICAgIDogMzE7ICAgLyogTXVzdCBiZSAwICovCisJdTY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ZmlybXdhcmVfd2FraW5nX3ZlY3RvcjsgLyogNjRiaXQgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgRmlybXdhcmUgV2FraW5nIFZlY3Rvci4gKi8KKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb247ICAgICAgICAgICAgICAgIC8qIFZlcnNpb24gb2YgdGhpcyB0YWJsZSAqLworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQzIFszMV07ICAgICAgICAgLyogUmVzZXJ2ZWQgLSBtdXN0IGJlIHplcm8gKi8KK307CisKKworLyoKKyAqIEFDUEkgMi4wKyBHZW5lcmljIEFkZHJlc3MgU3RydWN0dXJlIChHQVMpCisgKi8KK3N0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcworeworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzc19zcGFjZV9pZDsgICAgICAgLyogQWRkcmVzcyBzcGFjZSB3aGVyZSBzdHJ1Y3Qgb3IgcmVnaXN0ZXIgZXhpc3RzLiAqLworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJfYml0X3dpZHRoOyAgICAgLyogU2l6ZSBpbiBiaXRzIG9mIGdpdmVuIHJlZ2lzdGVyICovCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3Rlcl9iaXRfb2Zmc2V0OyAgICAvKiBCaXQgb2Zmc2V0IHdpdGhpbiB0aGUgcmVnaXN0ZXIgKi8KKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2Vzc193aWR0aDsgICAgICAgICAgIC8qIE1pbmltdW0gQWNjZXNzIHNpemUgKEFDUEkgMy4wKSAqLworCXU2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzczsgICAgICAgICAgICAgICAgLyogNjQtYml0IGFkZHJlc3Mgb2Ygc3RydWN0IG9yIHJlZ2lzdGVyICovCit9OworCisKKyNkZWZpbmUgRkFEVF9SRVYyX0NPTU1PTiBcCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWMV9maXJtd2FyZV9jdHJsOyAgIC8qIDMyLWJpdCBwaHlzaWNhbCBhZGRyZXNzIG9mIEZBQ1MgKi8gXAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVjFfZHNkdDsgICAgICAgICAgICAvKiAzMi1iaXQgcGh5c2ljYWwgYWRkcmVzcyBvZiBEU0RUICovIFwKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2VydmVkMTsgICAgICAgICAgLyogU3lzdGVtIEludGVycnVwdCBNb2RlbCBpc24ndCB1c2VkIGluIEFDUEkgMi4wKi8gXAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZmVyX1BNX3Byb2ZpbGU7ICAvKiBDb252ZXlzIHByZWZlcnJlZCBwb3dlciBtYW5hZ2VtZW50IHByb2ZpbGUgdG8gT1NQTS4gKi8gXAorCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NpX2ludDsgICAgICAgICAgICAvKiBTeXN0ZW0gdmVjdG9yIG9mIFNDSSBpbnRlcnJ1cHQgKi8gXAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc21pX2NtZDsgICAgICAgICAgICAvKiBQb3J0IGFkZHJlc3Mgb2YgU01JIGNvbW1hbmQgcG9ydCAqLyBcCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3BpX2VuYWJsZTsgICAgICAgIC8qIFZhbHVlIHRvIHdyaXRlIHRvIHNtaV9jbWQgdG8gZW5hYmxlIEFDUEkgKi8gXAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNwaV9kaXNhYmxlOyAgICAgICAvKiBWYWx1ZSB0byB3cml0ZSB0byBzbWlfY21kIHRvIGRpc2FibGUgQUNQSSAqLyBcCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTNGJpb3NfcmVxOyAgICAgICAgIC8qIFZhbHVlIHRvIHdyaXRlIHRvIFNNSSBDTUQgdG8gZW50ZXIgUzRCSU9TIHN0YXRlICovIFwKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzdGF0ZV9jbnQ7ICAgICAgICAgLyogUHJvY2Vzc29yIHBlcmZvcm1hbmNlIHN0YXRlIGNvbnRyb2wqLyBcCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWMV9wbTFhX2V2dF9ibGs7ICAgIC8qIFBvcnQgYWRkcmVzcyBvZiBQb3dlciBNZ3QgMWEgYWNwaV9ldmVudCBSZWcgQmxrICovIFwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFYxX3BtMWJfZXZ0X2JsazsgICAgLyogUG9ydCBhZGRyZXNzIG9mIFBvd2VyIE1ndCAxYiBhY3BpX2V2ZW50IFJlZyBCbGsgKi8gXAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVjFfcG0xYV9jbnRfYmxrOyAgICAvKiBQb3J0IGFkZHJlc3Mgb2YgUG93ZXIgTWd0IDFhIENvbnRyb2wgUmVnIEJsayAqLyBcCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWMV9wbTFiX2NudF9ibGs7ICAgIC8qIFBvcnQgYWRkcmVzcyBvZiBQb3dlciBNZ3QgMWIgQ29udHJvbCBSZWcgQmxrICovIFwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFYxX3BtMl9jbnRfYmxrOyAgICAgLyogUG9ydCBhZGRyZXNzIG9mIFBvd2VyIE1ndCAyIENvbnRyb2wgUmVnIEJsayAqLyBcCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWMV9wbV90bXJfYmxrOyAgICAgIC8qIFBvcnQgYWRkcmVzcyBvZiBQb3dlciBNZ3QgVGltZXIgQ3RybCBSZWcgQmxrICovIFwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFYxX2dwZTBfYmxrOyAgICAgICAgLyogUG9ydCBhZGRyIG9mIEdlbmVyYWwgUHVycG9zZSBhY3BpX2V2ZW50IDAgUmVnIEJsayAqLyBcCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWMV9ncGUxX2JsazsgICAgICAgIC8qIFBvcnQgYWRkciBvZiBHZW5lcmFsIFB1cnBvc2UgYWNwaV9ldmVudCAxIFJlZyBCbGsgKi8gXAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG0xX2V2dF9sZW47ICAgICAgICAvKiBCeXRlIGxlbmd0aCBvZiBwb3J0cyBhdCBwbTFfeF9ldnRfYmxrICovIFwKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBtMV9jbnRfbGVuOyAgICAgICAgLyogQnl0ZSBsZW5ndGggb2YgcG9ydHMgYXQgcG0xX3hfY250X2JsayAqLyBcCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbTJfY250X2xlbjsgICAgICAgIC8qIEJ5dGUgTGVuZ3RoIG9mIHBvcnRzIGF0IHBtMl9jbnRfYmxrICovIFwKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBtX3RtX2xlbjsgICAgICAgICAgLyogQnl0ZSBMZW5ndGggb2YgcG9ydHMgYXQgcG1fdG1fYmxrICovIFwKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwZTBfYmxrX2xlbjsgICAgICAgLyogQnl0ZSBMZW5ndGggb2YgcG9ydHMgYXQgZ3BlMF9ibGsgKi8gXAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BlMV9ibGtfbGVuOyAgICAgICAvKiBCeXRlIExlbmd0aCBvZiBwb3J0cyBhdCBncGUxX2JsayAqLyBcCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncGUxX2Jhc2U7ICAgICAgICAgIC8qIE9mZnNldCBpbiBncGUgbW9kZWwgd2hlcmUgZ3BlMSBldmVudHMgc3RhcnQgKi8gXAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3N0X2NudDsgICAgICAgICAgICAvKiBTdXBwb3J0IGZvciB0aGUgX0NTVCBvYmplY3QgYW5kIEMgU3RhdGVzIGNoYW5nZSBub3RpZmljYXRpb24uKi8gXAorCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx2bDJfbGF0OyAgICAgICAgICAvKiBXb3JzdCBjYXNlIEhXIGxhdGVuY3kgdG8gZW50ZXIvZXhpdCBDMiBzdGF0ZSAqLyBcCisJdTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHZsM19sYXQ7ICAgICAgICAgIC8qIFdvcnN0IGNhc2UgSFcgbGF0ZW5jeSB0byBlbnRlci9leGl0IEMzIHN0YXRlICovIFwKKwl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsdXNoX3NpemU7ICAgICAgICAgLyogTnVtYmVyIG9mIGZsdXNoIHN0cmlkZXMgdGhhdCBuZWVkIHRvIGJlIHJlYWQgKi8gXAorCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmx1c2hfc3RyaWRlOyAgICAgICAvKiBQcm9jZXNzb3IncyBtZW1vcnkgY2FjaGUgbGluZSB3aWR0aCwgaW4gYnl0ZXMgKi8gXAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHV0eV9vZmZzZXQ7ICAgICAgICAvKiBQcm9jZXNzb3IncyBkdXR5IGN5Y2xlIGluZGV4IGluIHByb2Nlc3NvcidzIFBfQ05UIHJlZyovIFwKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1dHlfd2lkdGg7ICAgICAgICAgLyogUHJvY2Vzc29yJ3MgZHV0eSBjeWNsZSB2YWx1ZSBiaXQgd2lkdGggaW4gUF9DTlQgcmVnaXN0ZXIuKi8gXAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF5X2Fscm07ICAgICAgICAgICAvKiBJbmRleCB0byBkYXktb2YtbW9udGggYWxhcm0gaW4gUlRDIENNT1MgUkFNICovIFwKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vbl9hbHJtOyAgICAgICAgICAgLyogSW5kZXggdG8gbW9udGgtb2YteWVhciBhbGFybSBpbiBSVEMgQ01PUyBSQU0gKi8gXAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VudHVyeTsgICAgICAgICAgICAvKiBJbmRleCB0byBjZW50dXJ5IGluIFJUQyBDTU9TIFJBTSAqLyBcCisJdTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpYXBjX2Jvb3RfYXJjaDsgICAgIC8qIElBLVBDIEJvb3QgQXJjaGl0ZWN0dXJlIEZsYWdzLiBTZWUgVGFibGUgNS0xMCBmb3IgZGVzY3JpcHRpb24qLworCisvKgorICogQUNQSSAyLjArIEZpeGVkIEFDUEkgRGVzY3JpcHRpb24gVGFibGUgKEZBRFQpCisgKi8KK3N0cnVjdCBmYWR0X2Rlc2NyaXB0b3JfcmV2MgoreworCUFDUElfVEFCTEVfSEVBREVSX0RFRiAgICAgICAgICAgICAgICAgICAgICAgLyogQUNQSSBjb21tb24gdGFibGUgaGVhZGVyICovCisJRkFEVF9SRVYyX0NPTU1PTgorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQyOyAgICAgICAgICAvKiBSZXNlcnZlZCAqLworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JfaW52ZCAgICAgOiAxOyAgICAvKiBUaGUgd2JpbnZkIGluc3RydWN0aW9uIHdvcmtzIHByb3Blcmx5ICovCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Yl9pbnZkX2ZsdXNoIDogMTsgIC8qIFRoZSB3YmludmQgZmx1c2hlcyBidXQgZG9lcyBub3QgaW52YWxpZGF0ZSAqLworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY19jMSAgICAgOiAxOyAgICAvKiBBbGwgcHJvY2Vzc29ycyBzdXBwb3J0IEMxIHN0YXRlICovCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHZsMl91cCAgICA6IDE7ICAgIC8qIEMyIHN0YXRlIHdvcmtzIG9uIE1QIHN5c3RlbSAqLworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHdyX2J1dHRvbiAgOiAxOyAgICAvKiBQb3dlciBidXR0b24gaXMgaGFuZGxlZCBhcyBhIGdlbmVyaWMgZmVhdHVyZSAqLworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xlZXBfYnV0dG9uIDogMTsgICAvKiBTbGVlcCBidXR0b24gaXMgaGFuZGxlZCBhcyBhIGdlbmVyaWMgZmVhdHVyZSwgb3Igbm90IHByZXNlbnQgKi8KKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpeGVkX3JUQyAgIDogMTsgICAgLyogUlRDIHdha2V1cCBzdGF0IG5vdCBpbiBmaXhlZCByZWdpc3RlciBzcGFjZSAqLworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnRjczQgICAgICAgOiAxOyAgICAvKiBSVEMgd2FrZXVwIHN0YXQgbm90IHBvc3NpYmxlIGZyb20gUzQgKi8KKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcl92YWxfZXh0IDogMTsgICAgLyogSW5kaWNhdGVzIHRtcl92YWwgaXMgMzIgYml0cyAwPTI0LWJpdHMgKi8KKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY2tfY2FwICAgIDogMTsgICAgLyogU3VwcG9ydHMgRG9ja2luZyAqLworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXRfcmVnX3N1cCA6IDE7ICAvKiBJbmRpY2F0ZXMgc3lzdGVtIHN1cHBvcnRzIHN5c3RlbSByZXNldCB2aWEgdGhlIEZBRFQgUkVTRVRfUkVHICovCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFsZWRfY2FzZSA6IDE7ICAgIC8qIEluZGljYXRlcyBzeXN0ZW0gaGFzIG5vIGludGVybmFsIGV4cGFuc2lvbiBjYXBhYmlsaXRpZXMgYW5kIGNhc2UgaXMgc2VhbGVkICovCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkbGVzcyAgICA6IDE7ICAgIC8qIEluZGljYXRlcyBzeXN0ZW0gZG9lcyBub3QgaGF2ZSBsb2NhbCB2aWRlbyBjYXBhYmlsaXRpZXMgb3IgbG9jYWwgaW5wdXQgZGV2aWNlcyAqLworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3B1X3N3X3NsZWVwIDogMTsgICAvKiBJbmRpY2F0ZXMgdG8gT1NQTSB0aGF0IGEgcHJvY2Vzc29yIG5hdGl2ZSBpbnN0cnVjdGlvbiAqLworCQkJICAgLyogbXVzdCBiZSBleGVjdXRlZCBhZnRlciB3cml0aW5nIHRoZSBTTFBfVFlQeCByZWdpc3RlciAqLworCS8qIEFDUEkgMy4wIGZsYWcgYml0cyAqLworCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY2lfZXhwX3dhayAgICAgICAgICAgICAgICAgICAgICAgICA6IDE7IC8qIFN5c3RlbSBzdXBwb3J0cyBQQ0lFWFBfV0FLRSAoU1RTL0VOKSBiaXRzICovCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VfcGxhdGZvcm1fY2xvY2sgICAgICAgICAgICAgICAgICA6IDE7IC8qIE9TUE0gc2hvdWxkIHVzZSBwbGF0Zm9ybS1wcm92aWRlZCB0aW1lciAqLworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUzRydGNfc3RzX3ZhbGlkICAgICAgICAgICAgICAgICAgICAgOiAxOyAvKiBDb250ZW50cyBvZiBSVENfU1RTIHZhbGlkIGFmdGVyIFM0IHdha2UgKi8KKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW90ZV9wb3dlcl9vbl9jYXBhYmxlICAgICAgICAgICAgIDogMTsgLyogU3lzdGVtIGlzIGNvbXBhdGlibGUgd2l0aCByZW1vdGUgcG93ZXIgb24gKi8KKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlX2FwaWNfY2x1c3Rlcl9tb2RlbCAgICAgICAgICAgIDogMTsgLyogQWxsIGxvY2FsIEFQSUNzIG11c3QgdXNlIGNsdXN0ZXIgbW9kZWwgKi8KKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlX2FwaWNfcGh5c2ljYWxfZGVzdGluYXRpb25fbW9kZSA6IDE7IC8qIGFsbCBsb2NhbCB4X2FQSUNzIG11c3QgdXNlIHBoeXNpY2FsIGRlc3QgbW9kZSAqLworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQ2ICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAxMjsvKiBSZXNlcnZlZCAtIG11c3QgYmUgemVybyAqLworCisJc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzICAgICByZXNldF9yZWdpc3RlcjsgICAgIC8qIFJlc2V0IHJlZ2lzdGVyIGFkZHJlc3MgaW4gR0FTIGZvcm1hdCAqLworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXRfdmFsdWU7ICAgICAgICAvKiBWYWx1ZSB0byB3cml0ZSB0byB0aGUgcmVzZXRfcmVnaXN0ZXIgcG9ydCB0byByZXNldCB0aGUgc3lzdGVtICovCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNlcnZlZDdbM107ICAgICAgIC8qIFRoZXNlIHRocmVlIGJ5dGVzIG11c3QgYmUgemVybyAqLworCXU2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGZpcm13YXJlX2N0cmw7ICAgICAvKiA2NC1iaXQgcGh5c2ljYWwgYWRkcmVzcyBvZiBGQUNTICovCisJdTY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYZHNkdDsgICAgICAgICAgICAgIC8qIDY0LWJpdCBwaHlzaWNhbCBhZGRyZXNzIG9mIERTRFQgKi8KKwlzdHJ1Y3QgYWNwaV9nZW5lcmljX2FkZHJlc3MgICAgIHhwbTFhX2V2dF9ibGs7ICAgICAgLyogRXh0ZW5kZWQgUG93ZXIgTWd0IDFhIGFjcGlfZXZlbnQgUmVnIEJsayBhZGRyZXNzICovCisJc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzICAgICB4cG0xYl9ldnRfYmxrOyAgICAgIC8qIEV4dGVuZGVkIFBvd2VyIE1ndCAxYiBhY3BpX2V2ZW50IFJlZyBCbGsgYWRkcmVzcyAqLworCXN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyAgICAgeHBtMWFfY250X2JsazsgICAgICAvKiBFeHRlbmRlZCBQb3dlciBNZ3QgMWEgQ29udHJvbCBSZWcgQmxrIGFkZHJlc3MgKi8KKwlzdHJ1Y3QgYWNwaV9nZW5lcmljX2FkZHJlc3MgICAgIHhwbTFiX2NudF9ibGs7ICAgICAgLyogRXh0ZW5kZWQgUG93ZXIgTWd0IDFiIENvbnRyb2wgUmVnIEJsayBhZGRyZXNzICovCisJc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzICAgICB4cG0yX2NudF9ibGs7ICAgICAgIC8qIEV4dGVuZGVkIFBvd2VyIE1ndCAyIENvbnRyb2wgUmVnIEJsayBhZGRyZXNzICovCisJc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzICAgICB4cG1fdG1yX2JsazsgICAgICAgIC8qIEV4dGVuZGVkIFBvd2VyIE1ndCBUaW1lciBDdHJsIFJlZyBCbGsgYWRkcmVzcyAqLworCXN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyAgICAgeGdwZTBfYmxrOyAgICAgICAgICAvKiBFeHRlbmRlZCBHZW5lcmFsIFB1cnBvc2UgYWNwaV9ldmVudCAwIFJlZyBCbGsgYWRkcmVzcyAqLworCXN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyAgICAgeGdwZTFfYmxrOyAgICAgICAgICAvKiBFeHRlbmRlZCBHZW5lcmFsIFB1cnBvc2UgYWNwaV9ldmVudCAxIFJlZyBCbGsgYWRkcmVzcyAqLworfTsKKworCisvKiAiRG93bi1yZXZ2ZWQiIEFDUEkgMi4wIEZBRFQgZGVzY3JpcHRvciAqLworCitzdHJ1Y3QgZmFkdF9kZXNjcmlwdG9yX3JldjJfbWludXMKK3sKKwlBQ1BJX1RBQkxFX0hFQURFUl9ERUYgICAgICAgICAgICAgICAgICAgICAgIC8qIEFDUEkgY29tbW9uIHRhYmxlIGhlYWRlciAqLworCUZBRFRfUkVWMl9DT01NT04KKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2VydmVkMjsgICAgICAgICAgLyogUmVzZXJ2ZWQgKi8KKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzOworCXN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyAgICAgcmVzZXRfcmVnaXN0ZXI7ICAgICAvKiBSZXNldCByZWdpc3RlciBhZGRyZXNzIGluIEdBUyBmb3JtYXQgKi8KKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0X3ZhbHVlOyAgICAgICAgLyogVmFsdWUgdG8gd3JpdGUgdG8gdGhlIHJlc2V0X3JlZ2lzdGVyIHBvcnQgdG8gcmVzZXQgdGhlIHN5c3RlbS4gKi8KKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2VydmVkN1szXTsgICAgICAgLyogVGhlc2UgdGhyZWUgYnl0ZXMgbXVzdCBiZSB6ZXJvICovCit9OworCisKKy8qIEVDRFQgLSBFbWJlZGRlZCBDb250cm9sbGVyIEJvb3QgUmVzb3VyY2VzIFRhYmxlICovCisKK3N0cnVjdCBlY19ib290X3Jlc291cmNlcworeworCUFDUElfVEFCTEVfSEVBREVSX0RFRgorCXN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyAgICAgZWNfY29udHJvbDsgICAgICAgICAvKiBBZGRyZXNzIG9mIEVDIGNvbW1hbmQvc3RhdHVzIHJlZ2lzdGVyICovCisJc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzICAgICBlY19kYXRhOyAgICAgICAgICAgIC8qIEFkZHJlc3Mgb2YgRUMgZGF0YSByZWdpc3RlciAqLworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlkOyAgICAgICAgICAgICAgICAvKiBVbmlxdWUgSUQgLSBtdXN0IGJlIHNhbWUgYXMgdGhlIEVDIF9VSUQgbWV0aG9kICovCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncGVfYml0OyAgICAgICAgICAgIC8qIFRoZSBHUEUgZm9yIHRoZSBFQyAqLworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNfaWRbMV07ICAgICAgICAgICAvKiBGdWxsIG5hbWVwYXRoIG9mIHRoZSBFQyBpbiB0aGUgQUNQSSBuYW1lc3BhY2UgKi8KK307CisKKworLyogU1JBVCAtIFN5c3RlbSBSZXNvdXJjZSBBZmZpbml0eSBUYWJsZSAqLworCitzdHJ1Y3Qgc3RhdGljX3Jlc291cmNlX2FsbG9jCit7CisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoOworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJveGltaXR5X2RvbWFpbl9sbzsKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwaWNfaWQ7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkICAgICAgICAgOjE7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNlcnZlZDMgICAgICAgOjMxOworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxfc2FwaWNfZWlkOworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJveGltaXR5X2RvbWFpbl9oaVszXTsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2VydmVkNDsKK307CisKK3N0cnVjdCBtZW1vcnlfYWZmaW5pdHkKK3sKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU7CisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGg7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm94aW1pdHlfZG9tYWluOworCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQzOworCXU2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZV9hZGRyZXNzOworCXU2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzc19sZW5ndGg7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNlcnZlZDQ7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkICAgICAgICAgOjE7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3RfcGx1Z2dhYmxlICAgOjE7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub25fdm9sYXRpbGUgICAgOjE7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNlcnZlZDUgICAgICAgOjI5OworCXU2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQ2OworfTsKKworc3RydWN0IHN5c3RlbV9yZXNvdXJjZV9hZmZpbml0eQoreworCUFDUElfVEFCTEVfSEVBREVSX0RFRgorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQxOyAgICAgICAgICAvKiBNdXN0IGJlIHZhbHVlICcxJyAqLworCXU2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQyOworfTsKKworCisvKiBTTElUIC0gU3lzdGVtIExvY2FsaXR5IERpc3RhbmNlIEluZm9ybWF0aW9uIFRhYmxlICovCisKK3N0cnVjdCBzeXN0ZW1fbG9jYWxpdHlfaW5mbworeworCUFDUElfVEFCTEVfSEVBREVSX0RFRgorCXU2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxpdHlfY291bnQ7CisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeVsxXVsxXTsKK307CisKKworI3ByYWdtYSBwYWNrKCkKKworI2VuZGlmIC8qIF9fQUNUQkwyX0hfXyAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWN0Ymw3MS5oIGIvaW5jbHVkZS9hY3BpL2FjdGJsNzEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjRmYjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hY3BpL2FjdGJsNzEuaApAQCAtMCwwICsxLDE0NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIE5hbWU6IGFjdGJsNzEuaCAtIElBLTY0IEV4dGVuc2lvbnMgdG8gdGhlIEFDUEkgU3BlYyBSZXYuIDAuNzEKKyAqICAgICAgICAgICAgICAgICAgIFRoaXMgZmlsZSBpbmNsdWRlcyB0YWJsZXMgc3BlY2lmaWMgdG8gdGhpcworICogICAgICAgICAgICAgICAgICAgc3BlY2lmaWNhdGlvbiByZXZpc2lvbi4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwMywgUi4gQnlyb24gTW9vcmUKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaWZuZGVmIF9fQUNUQkw3MV9IX18KKyNkZWZpbmUgX19BQ1RCTDcxX0hfXworCisKKy8qIDAuNzEgRkFEVCBhZGRyZXNzX3NwYWNlIGRhdGEgaXRlbSBiaXRtYXNrcyBkZWZpbmVzICovCisvKiBJZiB0aGUgYXNzb2NpYXRlZCBiaXQgaXMgemVybyB0aGVuIGl0IGlzIGluIG1lbW9yeSBzcGFjZSBlbHNlIGluIGlvIHNwYWNlICovCisKKyNkZWZpbmUgU01JX0NNRF9BRERSRVNTX1NQQUNFICAgICAgIDB4MDEKKyNkZWZpbmUgUE0xX0JMS19BRERSRVNTX1NQQUNFICAgICAgIDB4MDIKKyNkZWZpbmUgUE0yX0NOVF9CTEtfQUREUkVTU19TUEFDRSAgIDB4MDQKKyNkZWZpbmUgUE1fVE1SX0JMS19BRERSRVNTX1NQQUNFICAgIDB4MDgKKyNkZWZpbmUgR1BFMF9CTEtfQUREUkVTU19TUEFDRSAgICAgIDB4MTAKKyNkZWZpbmUgR1BFMV9CTEtfQUREUkVTU19TUEFDRSAgICAgIDB4MjAKKworLyogT25seSBmb3IgY2xhcml0eSBpbiBkZWNsYXJhdGlvbnMgKi8KKwordHlwZWRlZiB1NjQgICAgICAgICAgICAgICAgICAgICAgICAgSU9fQUREUkVTUzsKKworCisjcHJhZ21hIHBhY2soMSkKK3N0cnVjdCAgLyogUm9vdCBTeXN0ZW0gRGVzY3JpcHRvciBQb2ludGVyICovCit7CisJTkFUSVZFX0NIQVIgICAgICAgICAgICAgc2lnbmF0dXJlIFs4XTsgICAgICAgICAgLyogY29udGFpbnMgIlJTRCBQVFIgIiAqLworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tzdW07ICAgICAgICAgICAgICAgLyogdG8gbWFrZSBzdW0gb2Ygc3RydWN0ID09IDAgKi8KKwlOQVRJVkVfQ0hBUiAgICAgICAgICAgICBvZW1faWQgWzZdOyAgICAgICAgICAgICAvKiBPRU0gaWRlbnRpZmljYXRpb24gKi8KKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2VydmVkOyAgICAgICAgICAgICAgIC8qIE11c3QgYmUgMCBmb3IgMS4wLCAyIGZvciAyLjAgKi8KKwl1NjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzZHRfcGh5c2ljYWxfYWRkcmVzczsgIC8qIDY0LWJpdCBwaHlzaWNhbCBhZGRyZXNzIG9mIFJTRFQgKi8KK307CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogSUE2NCBFeHRlbnNpb25zIHRvIEFDUEkgU3BlYyBSZXYgMC43MSAqLworLyogZm9yIHRoZSBSb290IFN5c3RlbSBEZXNjcmlwdGlvbiBUYWJsZSAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RydWN0Cit7CisJc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICAgIGhlYWRlcjsgICAgICAgICAgICAgICAgIC8qIFRhYmxlIGhlYWRlciAqLworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICByZXNlcnZlZF9wYWQ7ICAgICAgICAgICAvKiBJQTY0IGFsaWdubWVudCwgbXVzdCBiZSAwICovCisJdTY0ICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX29mZnNldF9lbnRyeSBbMV07IC8qIEFycmF5IG9mIHBvaW50ZXJzIHRvIG90aGVyICovCisJCQkgICAvKiB0YWJsZXMnIGhlYWRlcnMgKi8KK307CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBJQTY0IEV4dGVuc2lvbnMgdG8gQUNQSSBTcGVjIFJldiAwLjcxICAgKi8KKy8qIGZvciB0aGUgRmlybXdhcmUgQUNQSSBDb250cm9sIFN0cnVjdHVyZSAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdHJ1Y3QKK3sKKwlOQVRJVkVfQ0hBUiAgICAgICAgIHNpZ25hdHVyZVs0XTsgICAgICAgICAvKiBzaWduYXR1cmUgIkZBQ1MiICovCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aDsgICAgICAgICAgICAgICAvKiBsZW5ndGggb2Ygc3RydWN0dXJlLCBpbiBieXRlcyAqLworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICBoYXJkd2FyZV9zaWduYXR1cmU7ICAgLyogaGFyZHdhcmUgY29uZmlndXJhdGlvbiBzaWduYXR1cmUgKi8KKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQ0OyAgICAgICAgICAgIC8qIG11c3QgYmUgMCAqLworCXU2NCAgICAgICAgICAgICAgICAgICAgICAgICBmaXJtd2FyZV93YWtpbmdfdmVjdG9yOyAvKiBBQ1BJIE9TIHdha2luZyB2ZWN0b3IgKi8KKwl1NjQgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsX2xvY2s7ICAgICAgICAgIC8qIEdsb2JhbCBMb2NrICovCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgIFM0Ymlvc19mICAgICAgOiAxOyAgICAvKiBJbmRpY2F0ZXMgaWYgUzRCSU9TIHN1cHBvcnQgaXMgcHJlc2VudCAqLworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICByZXNlcnZlZDEgICAgIDogMzE7ICAgLyogbXVzdCBiZSAwICovCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2VydmVkMyBbMjhdOyAgICAgICAvKiByZXNlcnZlZCAtIG11c3QgYmUgemVybyAqLworfTsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogSUE2NCBFeHRlbnNpb25zIHRvIEFDUEkgU3BlYyBSZXYgMC43MSAgKi8KKy8qIGZvciB0aGUgRml4ZWQgQUNQSSBEZXNjcmlwdGlvbiBUYWJsZSAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RydWN0Cit7CisJc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICAgIGhlYWRlcjsgICAgICAgICAgICAgLyogdGFibGUgaGVhZGVyICovCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2VydmVkX3BhZDsgICAgICAgLyogSUE2NCBhbGlnbm1lbnQsIG11c3QgYmUgMCAqLworCXU2NCAgICAgICAgICAgICAgICAgICAgICAgICBmaXJtd2FyZV9jdHJsOyAgICAgIC8qIDY0LWJpdCBQaHlzaWNhbCBhZGRyZXNzIG9mIEZBQ1MgKi8KKwl1NjQgICAgICAgICAgICAgICAgICAgICAgICAgZHNkdDsgICAgICAgICAgICAgICAvKiA2NC1iaXQgUGh5c2ljYWwgYWRkcmVzcyBvZiBEU0RUICovCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsOyAgICAgICAgICAgICAgLyogU3lzdGVtIEludGVycnVwdCBNb2RlbCAqLworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzX3NwYWNlOyAgICAgIC8qIEFkZHJlc3MgU3BhY2UgQml0bWFzayAqLworCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICBzY2lfaW50OyAgICAgICAgICAgIC8qIFN5c3RlbSB2ZWN0b3Igb2YgU0NJIGludGVycnVwdCAqLworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICBhY3BpX2VuYWJsZTsgICAgICAgIC8qIHZhbHVlIHRvIHdyaXRlIHRvIHNtaV9jbWQgdG8gZW5hYmxlIEFDUEkgKi8KKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgYWNwaV9kaXNhYmxlOyAgICAgICAvKiB2YWx1ZSB0byB3cml0ZSB0byBzbWlfY21kIHRvIGRpc2FibGUgQUNQSSAqLworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICBTNGJpb3NfcmVxOyAgICAgICAgIC8qIFZhbHVlIHRvIHdyaXRlIHRvIFNNSSBDTUQgdG8gZW50ZXIgUzRCSU9TIHN0YXRlICovCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2VydmVkMjsgICAgICAgICAgLyogcmVzZXJ2ZWQgLSBtdXN0IGJlIHplcm8gKi8KKwl1NjQgICAgICAgICAgICAgICAgICAgICAgICAgc21pX2NtZDsgICAgICAgICAgICAvKiBQb3J0IGFkZHJlc3Mgb2YgU01JIGNvbW1hbmQgcG9ydCAqLworCXU2NCAgICAgICAgICAgICAgICAgICAgICAgICBwbTFhX2V2dF9ibGs7ICAgICAgIC8qIFBvcnQgYWRkcmVzcyBvZiBQb3dlciBNZ3QgMWEgYWNwaV9ldmVudCBSZWcgQmxrICovCisJdTY0ICAgICAgICAgICAgICAgICAgICAgICAgIHBtMWJfZXZ0X2JsazsgICAgICAgLyogUG9ydCBhZGRyZXNzIG9mIFBvd2VyIE1ndCAxYiBhY3BpX2V2ZW50IFJlZyBCbGsgKi8KKwl1NjQgICAgICAgICAgICAgICAgICAgICAgICAgcG0xYV9jbnRfYmxrOyAgICAgICAvKiBQb3J0IGFkZHJlc3Mgb2YgUG93ZXIgTWd0IDFhIENvbnRyb2wgUmVnIEJsayAqLworCXU2NCAgICAgICAgICAgICAgICAgICAgICAgICBwbTFiX2NudF9ibGs7ICAgICAgIC8qIFBvcnQgYWRkcmVzcyBvZiBQb3dlciBNZ3QgMWIgQ29udHJvbCBSZWcgQmxrICovCisJdTY0ICAgICAgICAgICAgICAgICAgICAgICAgIHBtMl9jbnRfYmxrOyAgICAgICAgLyogUG9ydCBhZGRyZXNzIG9mIFBvd2VyIE1ndCAyIENvbnRyb2wgUmVnIEJsayAqLworCXU2NCAgICAgICAgICAgICAgICAgICAgICAgICBwbV90bXJfYmxrOyAgICAgICAgIC8qIFBvcnQgYWRkcmVzcyBvZiBQb3dlciBNZ3QgVGltZXIgQ3RybCBSZWcgQmxrICovCisJdTY0ICAgICAgICAgICAgICAgICAgICAgICAgIGdwZTBfYmxrOyAgICAgICAgICAgLyogUG9ydCBhZGRyIG9mIEdlbmVyYWwgUHVycG9zZSBhY3BpX2V2ZW50IDAgUmVnIEJsayAqLworCXU2NCAgICAgICAgICAgICAgICAgICAgICAgICBncGUxX2JsazsgICAgICAgICAgIC8qIFBvcnQgYWRkciBvZiBHZW5lcmFsIFB1cnBvc2UgYWNwaV9ldmVudCAxIFJlZyBCbGsgKi8KKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgcG0xX2V2dF9sZW47ICAgICAgICAvKiBCeXRlIGxlbmd0aCBvZiBwb3J0cyBhdCBwbTFfeF9ldnRfYmxrICovCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgIHBtMV9jbnRfbGVuOyAgICAgICAgLyogQnl0ZSBsZW5ndGggb2YgcG9ydHMgYXQgcG0xX3hfY250X2JsayAqLworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICBwbTJfY250X2xlbjsgICAgICAgIC8qIEJ5dGUgTGVuZ3RoIG9mIHBvcnRzIGF0IHBtMl9jbnRfYmxrICovCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgIHBtX3RtX2xlbjsgICAgICAgICAgLyogQnl0ZSBMZW5ndGggb2YgcG9ydHMgYXQgcG1fdG1fYmxrICovCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgIGdwZTBfYmxrX2xlbjsgICAgICAgLyogQnl0ZSBMZW5ndGggb2YgcG9ydHMgYXQgZ3BlMF9ibGsgKi8KKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BlMV9ibGtfbGVuOyAgICAgICAvKiBCeXRlIExlbmd0aCBvZiBwb3J0cyBhdCBncGUxX2JsayAqLworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICBncGUxX2Jhc2U7ICAgICAgICAgIC8qIG9mZnNldCBpbiBncGUgbW9kZWwgd2hlcmUgZ3BlMSBldmVudHMgc3RhcnQgKi8KKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQzOyAgICAgICAgICAvKiByZXNlcnZlZCAqLworCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICBwbHZsMl9sYXQ7ICAgICAgICAgIC8qIHdvcnN0IGNhc2UgSFcgbGF0ZW5jeSB0byBlbnRlci9leGl0IEMyIHN0YXRlICovCisJdTE2ICAgICAgICAgICAgICAgICAgICAgICAgIHBsdmwzX2xhdDsgICAgICAgICAgLyogd29yc3QgY2FzZSBIVyBsYXRlbmN5IHRvIGVudGVyL2V4aXQgQzMgc3RhdGUgKi8KKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgZGF5X2Fscm07ICAgICAgICAgICAvKiBpbmRleCB0byBkYXktb2YtbW9udGggYWxhcm0gaW4gUlRDIENNT1MgUkFNICovCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgIG1vbl9hbHJtOyAgICAgICAgICAgLyogaW5kZXggdG8gbW9udGgtb2YteWVhciBhbGFybSBpbiBSVEMgQ01PUyBSQU0gKi8KKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgY2VudHVyeTsgICAgICAgICAgICAvKiBpbmRleCB0byBjZW50dXJ5IGluIFJUQyBDTU9TIFJBTSAqLworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICByZXNlcnZlZDQ7ICAgICAgICAgIC8qIHJlc2VydmVkICovCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgIGZsdXNoX2Nhc2ggIDogMTsgICAgLyogUEFMX0ZMVVNIX0NBQ0hFIGlzIGNvcnJlY3RseSBzdXBwb3J0ZWQgKi8KKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQ1ICAgOiAxOyAgICAvKiByZXNlcnZlZCAtIG11c3QgYmUgemVybyAqLworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jX2MxICAgICA6IDE7ICAgIC8qIGFsbCBwcm9jZXNzb3JzIHN1cHBvcnQgQzEgc3RhdGUgKi8KKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgcGx2bDJfdXAgICAgOiAxOyAgICAvKiBDMiBzdGF0ZSB3b3JrcyBvbiBNUCBzeXN0ZW0gKi8KKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgcHdyX2J1dHRvbiAgOiAxOyAgICAvKiBQb3dlciBidXR0b24gaXMgaGFuZGxlZCBhcyBhIGdlbmVyaWMgZmVhdHVyZSAqLworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICBzbGVlcF9idXR0b24gOiAxOyAgIC8qIFNsZWVwIGJ1dHRvbiBpcyBoYW5kbGVkIGFzIGEgZ2VuZXJpYyBmZWF0dXJlLCBvciBub3QgcHJlc2VudCAqLworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICBmaXhlZF9yVEMgICA6IDE7ICAgIC8qIFJUQyB3YWtldXAgc3RhdCBub3QgaW4gZml4ZWQgcmVnaXN0ZXIgc3BhY2UgKi8KKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgcnRjczQgICAgICAgOiAxOyAgICAvKiBSVEMgd2FrZXVwIHN0YXQgbm90IHBvc3NpYmxlIGZyb20gUzQgKi8KKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgdG1yX3ZhbF9leHQgOiAxOyAgICAvKiB0bXJfdmFsIGlzIDMyIGJpdHMgKi8KKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgZG9ja19jYXAgICAgOiAxOyAgICAvKiBTdXBwb3J0cyBEb2NraW5nICovCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2VydmVkNiAgIDogMjI7ICAgIC8qIHJlc2VydmVkIC0gbXVzdCBiZSB6ZXJvICovCit9OworCisjcHJhZ21hIHBhY2soKQorCisjZW5kaWYgLyogX19BQ1RCTDcxX0hfXyAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWN0eXBlcy5oIGIvaW5jbHVkZS9hY3BpL2FjdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWNiNTUwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hY3BpL2FjdHlwZXMuaApAQCAtMCwwICsxLDEzMDQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBOYW1lOiBhY3R5cGVzLmggLSBDb21tb24gZGF0YSB0eXBlcyBmb3IgdGhlIGVudGlyZSBBQ1BJIHN1YnN5c3RlbQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDUsIFIuIEJ5cm9uIE1vb3JlCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIsCisgKiAgICB3aXRob3V0IG1vZGlmaWNhdGlvbi4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSBhdCBtaW5pbXVtIGEgZGlzY2xhaW1lcgorICogICAgc3Vic3RhbnRpYWxseSBzaW1pbGFyIHRvIHRoZSAiTk8gV0FSUkFOVFkiIGRpc2NsYWltZXIgYmVsb3cKKyAqICAgICgiRGlzY2xhaW1lciIpIGFuZCBhbnkgcmVkaXN0cmlidXRpb24gbXVzdCBiZSBjb25kaXRpb25lZCB1cG9uCisgKiAgICBpbmNsdWRpbmcgYSBzdWJzdGFudGlhbGx5IHNpbWlsYXIgRGlzY2xhaW1lciByZXF1aXJlbWVudCBmb3IgZnVydGhlcgorICogICAgYmluYXJ5IHJlZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZXMgb2YgdGhlIGFib3ZlLWxpc3RlZCBjb3B5cmlnaHQgaG9sZGVycyBub3IgdGhlIG5hbWVzCisgKiAgICBvZiBhbnkgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhpcyBzb2Z0d2FyZSBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKCJHUEwiKSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIE5PIFdBUlJBTlRZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORworICogSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisgKi8KKworI2lmbmRlZiBfX0FDVFlQRVNfSF9fCisjZGVmaW5lIF9fQUNUWVBFU19IX18KKworLyohIFtCZWdpbl0gbm8gc291cmNlIGNvZGUgdHJhbnNsYXRpb24gKGtlZXAgdGhlIHR5cGVkZWZzKSAqLworCisKKworLyoKKyAqIERhdGEgdHlwZSByYW5nZXMKKyAqIE5vdGU6IFRoZXNlIG1hY3JvcyBhcmUgZGVzaWduZWQgdG8gYmUgY29tcGlsZXIgaW5kZXBlbmRlbnQgYXMgd2VsbCBhcworICogd29ya2luZyBhcm91bmQgcHJvYmxlbXMgdGhhdCBzb21lIDMyLWJpdCBjb21waWxlcnMgaGF2ZSB3aXRoIDY0LWJpdAorICogY29uc3RhbnRzLgorICovCisjZGVmaW5lIEFDUElfVUlOVDhfTUFYICAgICAgICAgICAgICAgICAgKFVJTlQ4KSAofigoVUlOVDgpICAwKSkgLyogMHhGRiAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFDUElfVUlOVDE2X01BWCAgICAgICAgICAgICAgICAgKFVJTlQxNikofigoVUlOVDE2KSAwKSkgLyogMHhGRkZGICAgICAgICAgICAgICovCisjZGVmaW5lIEFDUElfVUlOVDMyX01BWCAgICAgICAgICAgICAgICAgKFVJTlQzMikofigoVUlOVDMyKSAwKSkgLyogMHhGRkZGRkZGRiAgICAgICAgICovCisjZGVmaW5lIEFDUElfVUlOVDY0X01BWCAgICAgICAgICAgICAgICAgKFVJTlQ2NCkofigoVUlOVDY0KSAwKSkgLyogMHhGRkZGRkZGRkZGRkZGRkZGICovCisjZGVmaW5lIEFDUElfQVNDSUlfTUFYICAgICAgICAgICAgICAgICAgMHg3RgorCisKKyNpZmRlZiBERUZJTkVfQUxURVJOQVRFX1RZUEVTCisvKgorICogVHlwZXMgdXNlZCBvbmx5IGluIHRyYW5zbGF0ZWQgc291cmNlLCBkZWZpbmVkIGhlcmUgdG8gZW5hYmxlCisgKiBjcm9zcy1wbGF0Zm9ybSBjb21waWxhdGlvbiBvbmx5LgorICovCit0eXBlZGVmIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczMyOwordHlwZWRlZiB1bnNpZ25lZCBjaGFyICAgICAgICAgICAgICAgICAgIHU4OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCAgICAgICAgICAgICAgICAgIHUxNjsKK3R5cGVkZWYgdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgICAgICB1MzI7Cit0eXBlZGVmIENPTVBJTEVSX0RFUEVOREVOVF9VSU5UNjQgICAgICAgdTY0OworCisjZW5kaWYKKworCisvKgorICogRGF0YSB0eXBlcyAtIEZpeGVkIGFjcm9zcyBhbGwgY29tcGlsYXRpb24gbW9kZWxzICgxNi8zMi82NCkKKyAqCisgKiBCT09MRUFOICAgICAgICAgIExvZ2ljYWwgQm9vbGVhbi4KKyAqIElOVDggICAgICAgICAgICAgOC1iaXQgICgxIGJ5dGUpIHNpZ25lZCB2YWx1ZQorICogVUlOVDggICAgICAgICAgICA4LWJpdCAgKDEgYnl0ZSkgdW5zaWduZWQgdmFsdWUKKyAqIElOVDE2ICAgICAgICAgICAgMTYtYml0ICgyIGJ5dGUpIHNpZ25lZCB2YWx1ZQorICogVUlOVDE2ICAgICAgICAgICAxNi1iaXQgKDIgYnl0ZSkgdW5zaWduZWQgdmFsdWUKKyAqIElOVDMyICAgICAgICAgICAgMzItYml0ICg0IGJ5dGUpIHNpZ25lZCB2YWx1ZQorICogVUlOVDMyICAgICAgICAgICAzMi1iaXQgKDQgYnl0ZSkgdW5zaWduZWQgdmFsdWUKKyAqIElOVDY0ICAgICAgICAgICAgNjQtYml0ICg4IGJ5dGUpIHNpZ25lZCB2YWx1ZQorICogVUlOVDY0ICAgICAgICAgICA2NC1iaXQgKDggYnl0ZSkgdW5zaWduZWQgdmFsdWUKKyAqIEFDUElfTkFUSVZFX0lOVCAgMzItYml0IG9uIElBLTMyLCA2NC1iaXQgb24gSUEtNjQgc2lnbmVkIHZhbHVlCisgKiBBQ1BJX05BVElWRV9VSU5UIDMyLWJpdCBvbiBJQS0zMiwgNjQtYml0IG9uIElBLTY0IHVuc2lnbmVkIHZhbHVlCisgKi8KKworI2lmbmRlZiBBQ1BJX01BQ0hJTkVfV0lEVEgKKyNlcnJvciBBQ1BJX01BQ0hJTkVfV0lEVEggbm90IGRlZmluZWQKKyNlbmRpZgorCisjaWYgQUNQSV9NQUNISU5FX1dJRFRIID09IDY0CisKKy8qISBbQmVnaW5dIG5vIHNvdXJjZSBjb2RlIHRyYW5zbGF0aW9uIChrZWVwIHRoZSB0eXBlZGVmcykgKi8KKworLyoKKyAqIDY0LWJpdCB0eXBlIGRlZmluaXRpb25zCisgKi8KK3R5cGVkZWYgdW5zaWduZWQgY2hhciAgICAgICAgICAgICAgICAgICBVSU5UODsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciAgICAgICAgICAgICAgICAgICBCT09MRUFOOwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCAgICAgICAgICAgICAgICAgIFVJTlQxNjsKK3R5cGVkZWYgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlQzMjsKK3R5cGVkZWYgdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgICAgICBVSU5UMzI7Cit0eXBlZGVmIENPTVBJTEVSX0RFUEVOREVOVF9JTlQ2NCAgICAgICAgSU5UNjQ7Cit0eXBlZGVmIENPTVBJTEVSX0RFUEVOREVOVF9VSU5UNjQgICAgICAgVUlOVDY0OworCisvKiEgW0VuZF0gbm8gc291cmNlIGNvZGUgdHJhbnNsYXRpb24gISovCisKK3R5cGVkZWYgczY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjcGlfbmF0aXZlX2ludDsKK3R5cGVkZWYgdTY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjcGlfbmF0aXZlX3VpbnQ7CisKK3R5cGVkZWYgdTY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjcGlfdGFibGVfcHRyOwordHlwZWRlZiB1NjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNwaV9pb19hZGRyZXNzOwordHlwZWRlZiB1NjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNwaV9waHlzaWNhbF9hZGRyZXNzOwordHlwZWRlZiB1NjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNwaV9zaXplOworCisjZGVmaW5lIEFMSUdORURfQUREUkVTU19CT1VOREFSWSAgICAgICAgMHgwMDAwMDAwOCAgICAgIC8qIE5vIGhhcmR3YXJlIGFsaWdubWVudCBzdXBwb3J0IGluIElBNjQgKi8KKyNkZWZpbmUgQUNQSV9VU0VfTkFUSVZFX0RJVklERSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTmF0aXZlIDY0LWJpdCBpbnRlZ2VyIHN1cHBvcnQgKi8KKyNkZWZpbmUgQUNQSV9NQVhfUFRSICAgICAgICAgICAgICAgICAgICBBQ1BJX1VJTlQ2NF9NQVgKKyNkZWZpbmUgQUNQSV9TSVpFX01BWCAgICAgICAgICAgICAgICAgICBBQ1BJX1VJTlQ2NF9NQVgKKworCisjZWxpZiBBQ1BJX01BQ0hJTkVfV0lEVEggPT0gMTYKKworLyohIFtCZWdpbl0gbm8gc291cmNlIGNvZGUgdHJhbnNsYXRpb24gKGtlZXAgdGhlIHR5cGVkZWZzKSAqLworCisvKgorICogMTYtYml0IHR5cGUgZGVmaW5pdGlvbnMKKyAqLwordHlwZWRlZiB1bnNpZ25lZCBjaGFyICAgICAgICAgICAgICAgICAgIFVJTlQ4OwordHlwZWRlZiB1bnNpZ25lZCBjaGFyICAgICAgICAgICAgICAgICAgIEJPT0xFQU47Cit0eXBlZGVmIHVuc2lnbmVkIGludCAgICAgICAgICAgICAgICAgICAgVUlOVDE2OwordHlwZWRlZiBsb25nICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVDMyOwordHlwZWRlZiBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVDE2OwordHlwZWRlZiB1bnNpZ25lZCBsb25nICAgICAgICAgICAgICAgICAgIFVJTlQzMjsKKworc3RydWN0Cit7CisJVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvOworCVVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIaTsKK307CisKKy8qISBbRW5kXSBubyBzb3VyY2UgY29kZSB0cmFuc2xhdGlvbiAhKi8KKwordHlwZWRlZiB1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNwaV9uYXRpdmVfdWludDsKK3R5cGVkZWYgczE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjcGlfbmF0aXZlX2ludDsKKwordHlwZWRlZiB1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNwaV90YWJsZV9wdHI7Cit0eXBlZGVmIHUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3BpX2lvX2FkZHJlc3M7Cit0eXBlZGVmIGNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYWNwaV9waHlzaWNhbF9hZGRyZXNzOwordHlwZWRlZiB1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNwaV9zaXplOworCisjZGVmaW5lIEFMSUdORURfQUREUkVTU19CT1VOREFSWSAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBQ1BJX01JU0FMSUdORURfVFJBTlNGRVJTCisjZGVmaW5lIEFDUElfVVNFX05BVElWRV9ESVZJREUgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vIDY0LWJpdCBpbnRlZ2Vycywgb2sgdG8gdXNlIG5hdGl2ZSBkaXZpZGUgKi8KKyNkZWZpbmUgQUNQSV9NQVhfUFRSICAgICAgICAgICAgICAgICAgICBBQ1BJX1VJTlQxNl9NQVgKKyNkZWZpbmUgQUNQSV9TSVpFX01BWCAgICAgICAgICAgICAgICAgICBBQ1BJX1VJTlQxNl9NQVgKKworLyoKKyAqICgxNi1iaXQgb25seSkgaW50ZXJuYWwgaW50ZWdlcnMgbXVzdCBiZSAzMi1iaXRzLCBzbworICogNjQtYml0IGludGVnZXJzIGNhbm5vdCBiZSBzdXBwb3J0ZWQKKyAqLworI2RlZmluZSBBQ1BJX05PX0lOVEVHRVI2NF9TVVBQT1JUCisKKworI2VsaWYgQUNQSV9NQUNISU5FX1dJRFRIID09IDMyCisKKy8qISBbQmVnaW5dIG5vIHNvdXJjZSBjb2RlIHRyYW5zbGF0aW9uIChrZWVwIHRoZSB0eXBlZGVmcykgKi8KKworLyoKKyAqIDMyLWJpdCB0eXBlIGRlZmluaXRpb25zIChkZWZhdWx0KQorICovCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgICAgICAgICAgICAgICAgICAgVUlOVDg7Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgICAgICAgICAgICAgICAgICAgQk9PTEVBTjsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgICAgICAgICAgICAgICAgICBVSU5UMTY7Cit0eXBlZGVmIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UMzI7Cit0eXBlZGVmIHVuc2lnbmVkIGludCAgICAgICAgICAgICAgICAgICAgVUlOVDMyOwordHlwZWRlZiBDT01QSUxFUl9ERVBFTkRFTlRfSU5UNjQgICAgICAgIElOVDY0OwordHlwZWRlZiBDT01QSUxFUl9ERVBFTkRFTlRfVUlOVDY0ICAgICAgIFVJTlQ2NDsKKworLyohIFtFbmRdIG5vIHNvdXJjZSBjb2RlIHRyYW5zbGF0aW9uICEqLworCit0eXBlZGVmIHMzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3BpX25hdGl2ZV9pbnQ7Cit0eXBlZGVmIHUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3BpX25hdGl2ZV91aW50OworCit0eXBlZGVmIHU2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3BpX3RhYmxlX3B0cjsKK3R5cGVkZWYgdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjcGlfaW9fYWRkcmVzczsKK3R5cGVkZWYgdTY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjcGlfcGh5c2ljYWxfYWRkcmVzczsKK3R5cGVkZWYgdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjcGlfc2l6ZTsKKworI2RlZmluZSBBTElHTkVEX0FERFJFU1NfQk9VTkRBUlkgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQUNQSV9NSVNBTElHTkVEX1RSQU5TRkVSUworI2RlZmluZSBBQ1BJX01BWF9QVFIgICAgICAgICAgICAgICAgICAgIEFDUElfVUlOVDMyX01BWAorI2RlZmluZSBBQ1BJX1NJWkVfTUFYICAgICAgICAgICAgICAgICAgIEFDUElfVUlOVDMyX01BWAorCisjZWxzZQorI2Vycm9yIHVua25vd24gQUNQSV9NQUNISU5FX1dJRFRICisjZW5kaWYKKworCisvKgorICogTWlzY2VsbGFuZW91cyBjb21tb24gdHlwZXMKKyAqLwordHlwZWRlZiB1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUlOVDE2X0JJVDsKK3R5cGVkZWYgdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJTlQzMl9CSVQ7Cit0eXBlZGVmIGFjcGlfbmF0aXZlX3VpbnQgICAgICAgICAgICAgICAgICAgICAgICBBQ1BJX1BUUkRJRkY7CisKKy8qCisgKiBQb2ludGVyIG92ZXJsYXlzIHRvIGF2b2lkIGxvdHMgb2YgdHlwZWNhc3RpbmcgZm9yCisgKiBjb2RlIHRoYXQgYWNjZXB0cyBib3RoIHBoeXNpY2FsIGFuZCBsb2dpY2FsIHBvaW50ZXJzLgorICovCit1bmlvbiBhY3BpX3BvaW50ZXJzCit7CisJYWNwaV9waHlzaWNhbF9hZGRyZXNzICAgICAgICAgICAgICAgcGh5c2ljYWw7CisJdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmxvZ2ljYWw7CisJYWNwaV90YWJsZV9wdHIgICAgICAgICAgICAgICAgICAgICAgdmFsdWU7Cit9OworCitzdHJ1Y3QgYWNwaV9wb2ludGVyCit7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlcl90eXBlOworCXVuaW9uIGFjcGlfcG9pbnRlcnMgICAgICAgICAgICAgICAgIHBvaW50ZXI7Cit9OworCisvKiBwb2ludGVyX3R5cGVzIGZvciBhYm92ZSAqLworCisjZGVmaW5lIEFDUElfUEhZU0lDQUxfUE9JTlRFUiAgICAgICAgICAgMHgwMQorI2RlZmluZSBBQ1BJX0xPR0lDQUxfUE9JTlRFUiAgICAgICAgICAgIDB4MDIKKworLyogUHJvY2Vzc29yIG1vZGUgKi8KKworI2RlZmluZSBBQ1BJX1BIWVNJQ0FMX0FERFJFU1NJTkcgICAgICAgIDB4MDQKKyNkZWZpbmUgQUNQSV9MT0dJQ0FMX0FERFJFU1NJTkcgICAgICAgICAweDA4CisjZGVmaW5lIEFDUElfTUVNT1JZX01PREUgICAgICAgICAgICAgICAgMHgwQworCisjZGVmaW5lIEFDUElfUEhZU01PREVfUEhZU1BUUiAgICAgICAgICAgQUNQSV9QSFlTSUNBTF9BRERSRVNTSU5HIHwgQUNQSV9QSFlTSUNBTF9QT0lOVEVSCisjZGVmaW5lIEFDUElfTE9HTU9ERV9QSFlTUFRSICAgICAgICAgICAgQUNQSV9MT0dJQ0FMX0FERFJFU1NJTkcgIHwgQUNQSV9QSFlTSUNBTF9QT0lOVEVSCisjZGVmaW5lIEFDUElfTE9HTU9ERV9MT0dQVFIgICAgICAgICAgICAgQUNQSV9MT0dJQ0FMX0FERFJFU1NJTkcgIHwgQUNQSV9MT0dJQ0FMX1BPSU5URVIKKworCisvKgorICogVXNlZnVsIGRlZmluZXMKKyAqLworI2lmZGVmIEZBTFNFCisjdW5kZWYgRkFMU0UKKyNlbmRpZgorI2RlZmluZSBGQUxTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICgxID09IDApCisKKyNpZmRlZiBUUlVFCisjdW5kZWYgVFJVRQorI2VuZGlmCisjZGVmaW5lIFRSVUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPT0gMSkKKworI2lmbmRlZiBOVUxMCisjZGVmaW5lIE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKikgMAorI2VuZGlmCisKKworLyoKKyAqIExvY2FsIGRhdGF0eXBlcworICovCit0eXBlZGVmIHUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3BpX3N0YXR1czsgICAgLyogQWxsIEFDUEkgRXhjZXB0aW9ucyAqLwordHlwZWRlZiB1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNwaV9uYW1lOyAgICAgIC8qIDQtYnl0ZSBBQ1BJIG5hbWUgKi8KK3R5cGVkZWYgY2hhciAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjcGlfc3RyaW5nOyAgICAvKiBOdWxsIHRlcm1pbmF0ZWQgQVNDSUkgc3RyaW5nICovCit0eXBlZGVmIHZvaWQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3BpX2hhbmRsZTsgICAgLyogQWN0dWFsbHkgYSBwdHIgdG8gYW4gTm9kZSAqLworCitzdHJ1Y3QgdWludDY0X3N0cnVjdAoreworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvOworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpOworfTsKKwordW5pb24gdWludDY0X292ZXJsYXkKK3sKKwl1NjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsOworCXN0cnVjdCB1aW50NjRfc3RydWN0ICAgICAgICAgICAgICAgIHBhcnQ7Cit9OworCitzdHJ1Y3QgdWludDMyX3N0cnVjdAoreworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvOworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpOworfTsKKworCisvKgorICogQWNwaSBpbnRlZ2VyIHdpZHRoLiBJbiBBQ1BJIHZlcnNpb24gMSwgaW50ZWdlcnMgYXJlCisgKiAzMiBiaXRzLiAgSW4gQUNQSSB2ZXJzaW9uIDIsIGludGVnZXJzIGFyZSA2NCBiaXRzLgorICogTm90ZSB0aGF0IHRoaXMgcGVydGFpbnMgdG8gdGhlIEFDUEkgaW50ZWdlciB0eXBlIG9ubHksIG5vdAorICogb3RoZXIgaW50ZWdlcnMgdXNlZCBpbiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIEFDUEkgQ0EKKyAqIHN1YnN5c3RlbS4KKyAqLworI2lmZGVmIEFDUElfTk9fSU5URUdFUjY0X1NVUFBPUlQKKworLyogMzItYml0IGludGVnZXJzIG9ubHksIG5vIDY0LWJpdCBzdXBwb3J0ICovCisKK3R5cGVkZWYgdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjcGlfaW50ZWdlcjsKKyNkZWZpbmUgQUNQSV9JTlRFR0VSX01BWCAgICAgICAgICAgICAgICBBQ1BJX1VJTlQzMl9NQVgKKyNkZWZpbmUgQUNQSV9JTlRFR0VSX0JJVF9TSVpFICAgICAgICAgICAzMgorI2RlZmluZSBBQ1BJX01BWF9ERUNJTUFMX0RJR0lUUyAgICAgICAgIDEwICAvKiAyXjMyID0gNCwyOTQsOTY3LDI5NiAqLworCisjZGVmaW5lIEFDUElfVVNFX05BVElWRV9ESVZJREUgICAgICAgICAgLyogVXNlIGNvbXBpbGVyIG5hdGl2ZSAzMi1iaXQgZGl2aWRlICovCisKKworI2Vsc2UKKworLyogNjQtYml0IGludGVnZXJzICovCisKK3R5cGVkZWYgdTY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjcGlfaW50ZWdlcjsKKyNkZWZpbmUgQUNQSV9JTlRFR0VSX01BWCAgICAgICAgICAgICAgICBBQ1BJX1VJTlQ2NF9NQVgKKyNkZWZpbmUgQUNQSV9JTlRFR0VSX0JJVF9TSVpFICAgICAgICAgICA2NAorI2RlZmluZSBBQ1BJX01BWF9ERUNJTUFMX0RJR0lUUyAgICAgICAgIDIwICAvKiAyXjY0ID0gMTgsNDQ2LDc0NCwwNzMsNzA5LDU1MSw2MTYgKi8KKworCisjaWYgQUNQSV9NQUNISU5FX1dJRFRIID09IDY0CisjZGVmaW5lIEFDUElfVVNFX05BVElWRV9ESVZJREUgICAgICAgICAgLyogVXNlIGNvbXBpbGVyIG5hdGl2ZSA2NC1iaXQgZGl2aWRlICovCisjZW5kaWYKKyNlbmRpZgorCisjZGVmaW5lIEFDUElfTUFYNjRfREVDSU1BTF9ESUdJVFMgICAgICAgMjAKKyNkZWZpbmUgQUNQSV9NQVgzMl9ERUNJTUFMX0RJR0lUUyAgICAgICAxMAorI2RlZmluZSBBQ1BJX01BWDE2X0RFQ0lNQUxfRElHSVRTICAgICAgICA1CisjZGVmaW5lIEFDUElfTUFYOF9ERUNJTUFMX0RJR0lUUyAgICAgICAgIDMKKworLyoKKyAqIENvbnN0YW50cyB3aXRoIHNwZWNpYWwgbWVhbmluZ3MKKyAqLworI2RlZmluZSBBQ1BJX1JPT1RfT0JKRUNUICAgICAgICAgICAgICAgIChhY3BpX2hhbmRsZSkgQUNQSV9QVFJfQUREIChjaGFyLCBOVUxMLCBBQ1BJX01BWF9QVFIpCisKKworLyoKKyAqIEluaXRpYWxpemF0aW9uIHNlcXVlbmNlCisgKi8KKyNkZWZpbmUgQUNQSV9GVUxMX0lOSVRJQUxJWkFUSU9OICAgICAgICAweDAwCisjZGVmaW5lIEFDUElfTk9fQUREUkVTU19TUEFDRV9JTklUICAgICAgMHgwMQorI2RlZmluZSBBQ1BJX05PX0hBUkRXQVJFX0lOSVQgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgQUNQSV9OT19FVkVOVF9JTklUICAgICAgICAgICAgICAweDA0CisjZGVmaW5lIEFDUElfTk9fSEFORExFUl9JTklUICAgICAgICAgICAgMHgwOAorI2RlZmluZSBBQ1BJX05PX0FDUElfRU5BQkxFICAgICAgICAgICAgIDB4MTAKKyNkZWZpbmUgQUNQSV9OT19ERVZJQ0VfSU5JVCAgICAgICAgICAgICAweDIwCisjZGVmaW5lIEFDUElfTk9fT0JKRUNUX0lOSVQgICAgICAgICAgICAgMHg0MAorCisvKgorICogSW5pdGlhbGl6YXRpb24gc3RhdGUKKyAqLworI2RlZmluZSBBQ1BJX0lOSVRJQUxJWkVEX09LICAgICAgICAgICAgIDB4MDEKKworLyoKKyAqIFBvd2VyIHN0YXRlIHZhbHVlcworICovCisjZGVmaW5lIEFDUElfU1RBVEVfVU5LTk9XTiAgICAgICAgICAgICAgKHU4KSAweEZGCisKKyNkZWZpbmUgQUNQSV9TVEFURV9TMCAgICAgICAgICAgICAgICAgICAodTgpIDAKKyNkZWZpbmUgQUNQSV9TVEFURV9TMSAgICAgICAgICAgICAgICAgICAodTgpIDEKKyNkZWZpbmUgQUNQSV9TVEFURV9TMiAgICAgICAgICAgICAgICAgICAodTgpIDIKKyNkZWZpbmUgQUNQSV9TVEFURV9TMyAgICAgICAgICAgICAgICAgICAodTgpIDMKKyNkZWZpbmUgQUNQSV9TVEFURV9TNCAgICAgICAgICAgICAgICAgICAodTgpIDQKKyNkZWZpbmUgQUNQSV9TVEFURV9TNSAgICAgICAgICAgICAgICAgICAodTgpIDUKKyNkZWZpbmUgQUNQSV9TX1NUQVRFU19NQVggICAgICAgICAgICAgICBBQ1BJX1NUQVRFX1M1CisjZGVmaW5lIEFDUElfU19TVEFURV9DT1VOVCAgICAgICAgICAgICAgNgorCisjZGVmaW5lIEFDUElfU1RBVEVfRDAgICAgICAgICAgICAgICAgICAgKHU4KSAwCisjZGVmaW5lIEFDUElfU1RBVEVfRDEgICAgICAgICAgICAgICAgICAgKHU4KSAxCisjZGVmaW5lIEFDUElfU1RBVEVfRDIgICAgICAgICAgICAgICAgICAgKHU4KSAyCisjZGVmaW5lIEFDUElfU1RBVEVfRDMgICAgICAgICAgICAgICAgICAgKHU4KSAzCisjZGVmaW5lIEFDUElfRF9TVEFURVNfTUFYICAgICAgICAgICAgICAgQUNQSV9TVEFURV9EMworI2RlZmluZSBBQ1BJX0RfU1RBVEVfQ09VTlQgICAgICAgICAgICAgIDQKKworI2RlZmluZSBBQ1BJX1NUQVRFX0MwICAgICAgICAgICAgICAgICAgICh1OCkgMAorI2RlZmluZSBBQ1BJX1NUQVRFX0MxICAgICAgICAgICAgICAgICAgICh1OCkgMQorI2RlZmluZSBBQ1BJX1NUQVRFX0MyICAgICAgICAgICAgICAgICAgICh1OCkgMgorI2RlZmluZSBBQ1BJX1NUQVRFX0MzICAgICAgICAgICAgICAgICAgICh1OCkgMworI2RlZmluZSBBQ1BJX0NfU1RBVEVTX01BWCAgICAgICAgICAgICAgIEFDUElfU1RBVEVfQzMKKyNkZWZpbmUgQUNQSV9DX1NUQVRFX0NPVU5UICAgICAgICAgICAgICA0CisKKy8qCisgKiBTbGVlcCB0eXBlIGludmFsaWQgdmFsdWUKKyAqLworI2RlZmluZSBBQ1BJX1NMRUVQX1RZUEVfTUFYICAgICAgICAgICAgIDB4NworI2RlZmluZSBBQ1BJX1NMRUVQX1RZUEVfSU5WQUxJRCAgICAgICAgIDB4RkYKKworLyoKKyAqIFN0YW5kYXJkIG5vdGlmeSB2YWx1ZXMKKyAqLworI2RlZmluZSBBQ1BJX05PVElGWV9CVVNfQ0hFQ0sgICAgICAgICAgICh1OCkgMAorI2RlZmluZSBBQ1BJX05PVElGWV9ERVZJQ0VfQ0hFQ0sgICAgICAgICh1OCkgMQorI2RlZmluZSBBQ1BJX05PVElGWV9ERVZJQ0VfV0FLRSAgICAgICAgICh1OCkgMgorI2RlZmluZSBBQ1BJX05PVElGWV9FSkVDVF9SRVFVRVNUICAgICAgICh1OCkgMworI2RlZmluZSBBQ1BJX05PVElGWV9ERVZJQ0VfQ0hFQ0tfTElHSFQgICh1OCkgNAorI2RlZmluZSBBQ1BJX05PVElGWV9GUkVRVUVOQ1lfTUlTTUFUQ0ggICh1OCkgNQorI2RlZmluZSBBQ1BJX05PVElGWV9CVVNfTU9ERV9NSVNNQVRDSCAgICh1OCkgNgorI2RlZmluZSBBQ1BJX05PVElGWV9QT1dFUl9GQVVMVCAgICAgICAgICh1OCkgNworCisvKgorICogIFRhYmxlIHR5cGVzLiAgVGhlc2UgdmFsdWVzIGFyZSBwYXNzZWQgdG8gdGhlIHRhYmxlIHJlbGF0ZWQgQVBJcworICovCit0eXBlZGVmIHUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3BpX3RhYmxlX3R5cGU7CisKKyNkZWZpbmUgQUNQSV9UQUJMRV9SU0RQICAgICAgICAgICAgICAgICAoYWNwaV90YWJsZV90eXBlKSAwCisjZGVmaW5lIEFDUElfVEFCTEVfRFNEVCAgICAgICAgICAgICAgICAgKGFjcGlfdGFibGVfdHlwZSkgMQorI2RlZmluZSBBQ1BJX1RBQkxFX0ZBRFQgICAgICAgICAgICAgICAgIChhY3BpX3RhYmxlX3R5cGUpIDIKKyNkZWZpbmUgQUNQSV9UQUJMRV9GQUNTICAgICAgICAgICAgICAgICAoYWNwaV90YWJsZV90eXBlKSAzCisjZGVmaW5lIEFDUElfVEFCTEVfUFNEVCAgICAgICAgICAgICAgICAgKGFjcGlfdGFibGVfdHlwZSkgNAorI2RlZmluZSBBQ1BJX1RBQkxFX1NTRFQgICAgICAgICAgICAgICAgIChhY3BpX3RhYmxlX3R5cGUpIDUKKyNkZWZpbmUgQUNQSV9UQUJMRV9YU0RUICAgICAgICAgICAgICAgICAoYWNwaV90YWJsZV90eXBlKSA2CisjZGVmaW5lIEFDUElfVEFCTEVfTUFYICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBOVU1fQUNQSV9UQUJMRV9UWVBFUyAgICAgICAgICAgIChBQ1BJX1RBQkxFX01BWCsxKQorCisvKgorICogVHlwZXMgYXNzb2NpYXRlZCB3aXRoIEFDUEkgbmFtZXMgYW5kIG9iamVjdHMuICBUaGUgZmlyc3QgZ3JvdXAgb2YKKyAqIHZhbHVlcyAodXAgdG8gQUNQSV9UWVBFX0VYVEVSTkFMX01BWCkgY29ycmVzcG9uZCB0byB0aGUgZGVmaW5pdGlvbgorICogb2YgdGhlIEFDUEkgb2JqZWN0X3R5cGUoKSBvcGVyYXRvciAoU2VlIHRoZSBBQ1BJIFNwZWMpLiBUaGVyZWZvcmUsCisgKiBvbmx5IGFkZCB0byB0aGUgZmlyc3QgZ3JvdXAgaWYgdGhlIHNwZWMgY2hhbmdlcy4KKyAqCisgKiBOT1RFOiBUeXBlcyBtdXN0IGJlIGtlcHQgaW4gc3luYyB3aXRoIHRoZSBnbG9iYWwgYWNwaV9uc19wcm9wZXJ0aWVzCisgKiBhbmQgYWNwaV9uc190eXBlX25hbWVzIGFycmF5cy4KKyAqLwordHlwZWRlZiB1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNwaV9vYmplY3RfdHlwZTsKKworI2RlZmluZSBBQ1BJX1RZUEVfQU5ZICAgICAgICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgQUNQSV9UWVBFX0lOVEVHRVIgICAgICAgICAgICAgICAweDAxICAvKiBCeXRlL1dvcmQvRHdvcmQvWmVyby9PbmUvT25lcyAqLworI2RlZmluZSBBQ1BJX1RZUEVfU1RSSU5HICAgICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgQUNQSV9UWVBFX0JVRkZFUiAgICAgICAgICAgICAgICAweDAzCisjZGVmaW5lIEFDUElfVFlQRV9QQUNLQUdFICAgICAgICAgICAgICAgMHgwNCAgLyogYnl0ZV9jb25zdCwgbXVsdGlwbGUgZGF0YV90ZXJtL0NvbnN0YW50L3N1cGVyX25hbWUgKi8KKyNkZWZpbmUgQUNQSV9UWVBFX0ZJRUxEX1VOSVQgICAgICAgICAgICAweDA1CisjZGVmaW5lIEFDUElfVFlQRV9ERVZJQ0UgICAgICAgICAgICAgICAgMHgwNiAgLyogTmFtZSwgbXVsdGlwbGUgTm9kZSAqLworI2RlZmluZSBBQ1BJX1RZUEVfRVZFTlQgICAgICAgICAgICAgICAgIDB4MDcKKyNkZWZpbmUgQUNQSV9UWVBFX01FVEhPRCAgICAgICAgICAgICAgICAweDA4ICAvKiBOYW1lLCBieXRlX2NvbnN0LCBtdWx0aXBsZSBDb2RlICovCisjZGVmaW5lIEFDUElfVFlQRV9NVVRFWCAgICAgICAgICAgICAgICAgMHgwOQorI2RlZmluZSBBQ1BJX1RZUEVfUkVHSU9OICAgICAgICAgICAgICAgIDB4MEEKKyNkZWZpbmUgQUNQSV9UWVBFX1BPV0VSICAgICAgICAgICAgICAgICAweDBCICAvKiBOYW1lLGJ5dGVfY29uc3Qsd29yZF9jb25zdCxtdWx0aSBOb2RlICovCisjZGVmaW5lIEFDUElfVFlQRV9QUk9DRVNTT1IgICAgICAgICAgICAgMHgwQyAgLyogTmFtZSxieXRlX2NvbnN0LER3b3JkX2NvbnN0LGJ5dGVfY29uc3QsbXVsdGkgbm1fbyAqLworI2RlZmluZSBBQ1BJX1RZUEVfVEhFUk1BTCAgICAgICAgICAgICAgIDB4MEQgIC8qIE5hbWUsIG11bHRpcGxlIE5vZGUgKi8KKyNkZWZpbmUgQUNQSV9UWVBFX0JVRkZFUl9GSUVMRCAgICAgICAgICAweDBFCisjZGVmaW5lIEFDUElfVFlQRV9EREJfSEFORExFICAgICAgICAgICAgMHgwRgorI2RlZmluZSBBQ1BJX1RZUEVfREVCVUdfT0JKRUNUICAgICAgICAgIDB4MTAKKworI2RlZmluZSBBQ1BJX1RZUEVfRVhURVJOQUxfTUFYICAgICAgICAgIDB4MTAKKworLyoKKyAqIFRoZXNlIGFyZSBvYmplY3QgdHlwZXMgdGhhdCBkbyBub3QgbWFwIGRpcmVjdGx5IHRvIHRoZSBBQ1BJCisgKiBvYmplY3RfdHlwZSgpIG9wZXJhdG9yLiBUaGV5IGFyZSB1c2VkIGZvciB2YXJpb3VzIGludGVybmFsIHB1cnBvc2VzIG9ubHkuCisgKiBJZiBuZXcgcHJlZGVmaW5lZCBBQ1BJX1RZUEVzIGFyZSBhZGRlZCAodmlhIHRoZSBBQ1BJIHNwZWNpZmljYXRpb24pLCB0aGVzZQorICogaW50ZXJuYWwgdHlwZXMgbXVzdCBtb3ZlIHVwd2FyZHMuIChUaGVyZSBpcyBjb2RlIHRoYXQgZGVwZW5kcyBvbiB0aGVzZQorICogdmFsdWVzIGJlaW5nIGNvbnRpZ3VvdXMgd2l0aCB0aGUgZXh0ZXJuYWwgdHlwZXMgYWJvdmUuKQorICovCisjZGVmaW5lIEFDUElfVFlQRV9MT0NBTF9SRUdJT05fRklFTEQgICAgMHgxMQorI2RlZmluZSBBQ1BJX1RZUEVfTE9DQUxfQkFOS19GSUVMRCAgICAgIDB4MTIKKyNkZWZpbmUgQUNQSV9UWVBFX0xPQ0FMX0lOREVYX0ZJRUxEICAgICAweDEzCisjZGVmaW5lIEFDUElfVFlQRV9MT0NBTF9SRUZFUkVOQ0UgICAgICAgMHgxNCAgLyogQXJnIywgTG9jYWwjLCBOYW1lLCBEZWJ1ZywgcmVmX29mLCBJbmRleCAqLworI2RlZmluZSBBQ1BJX1RZUEVfTE9DQUxfQUxJQVMgICAgICAgICAgIDB4MTUKKyNkZWZpbmUgQUNQSV9UWVBFX0xPQ0FMX01FVEhPRF9BTElBUyAgICAweDE2CisjZGVmaW5lIEFDUElfVFlQRV9MT0NBTF9OT1RJRlkgICAgICAgICAgMHgxNworI2RlZmluZSBBQ1BJX1RZUEVfTE9DQUxfQUREUkVTU19IQU5ETEVSIDB4MTgKKyNkZWZpbmUgQUNQSV9UWVBFX0xPQ0FMX1JFU09VUkNFICAgICAgICAweDE5CisjZGVmaW5lIEFDUElfVFlQRV9MT0NBTF9SRVNPVVJDRV9GSUVMRCAgMHgxQQorI2RlZmluZSBBQ1BJX1RZUEVfTE9DQUxfU0NPUEUgICAgICAgICAgIDB4MUIgIC8qIDEgTmFtZSwgbXVsdGlwbGUgb2JqZWN0X2xpc3QgTm9kZXMgKi8KKworI2RlZmluZSBBQ1BJX1RZUEVfTlNfTk9ERV9NQVggICAgICAgICAgIDB4MUIgIC8qIExhc3QgdHlwZWNvZGUgdXNlZCB3aXRoaW4gYSBOUyBOb2RlICovCisKKy8qCisgKiBUaGVzZSBhcmUgc3BlY2lhbCBvYmplY3QgdHlwZXMgdGhhdCBuZXZlciBhcHBlYXIgaW4KKyAqIGEgTmFtZXNwYWNlIG5vZGUsIG9ubHkgaW4gYW4gdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdAorICovCisjZGVmaW5lIEFDUElfVFlQRV9MT0NBTF9FWFRSQSAgICAgICAgICAgMHgxQworI2RlZmluZSBBQ1BJX1RZUEVfTE9DQUxfREFUQSAgICAgICAgICAgIDB4MUQKKworI2RlZmluZSBBQ1BJX1RZUEVfTE9DQUxfTUFYICAgICAgICAgICAgIDB4MUQKKworLyogQWxsIHR5cGVzIGFib3ZlIGhlcmUgYXJlIGludmFsaWQgKi8KKworI2RlZmluZSBBQ1BJX1RZUEVfSU5WQUxJRCAgICAgICAgICAgICAgIDB4MUUKKyNkZWZpbmUgQUNQSV9UWVBFX05PVF9GT1VORCAgICAgICAgICAgICAweEZGCisKKworLyoKKyAqIEJpdG1hcHBlZCBBQ1BJIHR5cGVzLiAgVXNlZCBpbnRlcm5hbGx5IG9ubHkKKyAqLworI2RlZmluZSBBQ1BJX0JUWVBFX0FOWSAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgQUNQSV9CVFlQRV9JTlRFR0VSICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFDUElfQlRZUEVfU1RSSU5HICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBQ1BJX0JUWVBFX0JVRkZFUiAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQUNQSV9CVFlQRV9QQUNLQUdFICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEFDUElfQlRZUEVfRklFTERfVU5JVCAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBQ1BJX0JUWVBFX0RFVklDRSAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQUNQSV9CVFlQRV9FVkVOVCAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEFDUElfQlRZUEVfTUVUSE9EICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBBQ1BJX0JUWVBFX01VVEVYICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQUNQSV9CVFlQRV9SRUdJT04gICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIEFDUElfQlRZUEVfUE9XRVIgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBBQ1BJX0JUWVBFX1BST0NFU1NPUiAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgQUNQSV9CVFlQRV9USEVSTUFMICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIEFDUElfQlRZUEVfQlVGRkVSX0ZJRUxEICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBBQ1BJX0JUWVBFX0REQl9IQU5ETEUgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgQUNQSV9CVFlQRV9ERUJVR19PQkpFQ1QgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIEFDUElfQlRZUEVfUkVGRVJFTkNFICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBBQ1BJX0JUWVBFX1JFU09VUkNFICAgICAgICAgICAgIDB4MDAwMjAwMDAKKworI2RlZmluZSBBQ1BJX0JUWVBFX0NPTVBVVEVfREFUQSAgICAgICAgIChBQ1BJX0JUWVBFX0lOVEVHRVIgfCBBQ1BJX0JUWVBFX1NUUklORyB8IEFDUElfQlRZUEVfQlVGRkVSKQorCisjZGVmaW5lIEFDUElfQlRZUEVfREFUQSAgICAgICAgICAgICAgICAgKEFDUElfQlRZUEVfQ09NUFVURV9EQVRBICB8IEFDUElfQlRZUEVfUEFDS0FHRSkKKyNkZWZpbmUgQUNQSV9CVFlQRV9EQVRBX1JFRkVSRU5DRSAgICAgICAoQUNQSV9CVFlQRV9EQVRBIHwgQUNQSV9CVFlQRV9SRUZFUkVOQ0UgfCBBQ1BJX0JUWVBFX0REQl9IQU5ETEUpCisjZGVmaW5lIEFDUElfQlRZUEVfREVWSUNFX09CSkVDVFMgICAgICAgKEFDUElfQlRZUEVfREVWSUNFIHwgQUNQSV9CVFlQRV9USEVSTUFMIHwgQUNQSV9CVFlQRV9QUk9DRVNTT1IpCisjZGVmaW5lIEFDUElfQlRZUEVfT0JKRUNUU19BTkRfUkVGUyAgICAgMHgwMDAxRkZGRiAgLyogQVJHIG9yIExPQ0FMICovCisjZGVmaW5lIEFDUElfQlRZUEVfQUxMX09CSkVDVFMgICAgICAgICAgMHgwMDAwRkZGRgorCisvKgorICogQWxsIEkvTworICovCisjZGVmaW5lIEFDUElfUkVBRCAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBQ1BJX1dSSVRFICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQUNQSV9JT19NQVNLICAgICAgICAgICAgICAgICAgICAxCisKKy8qCisgKiBFdmVudCBUeXBlczogRml4ZWQgJiBHZW5lcmFsIFB1cnBvc2UKKyAqLwordHlwZWRlZiB1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNwaV9ldmVudF90eXBlOworCisvKgorICogRml4ZWQgZXZlbnRzCisgKi8KKyNkZWZpbmUgQUNQSV9FVkVOVF9QTVRJTUVSICAgICAgICAgICAgICAwCisjZGVmaW5lIEFDUElfRVZFTlRfR0xPQkFMICAgICAgICAgICAgICAgMQorI2RlZmluZSBBQ1BJX0VWRU5UX1BPV0VSX0JVVFRPTiAgICAgICAgIDIKKyNkZWZpbmUgQUNQSV9FVkVOVF9TTEVFUF9CVVRUT04gICAgICAgICAzCisjZGVmaW5lIEFDUElfRVZFTlRfUlRDICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBBQ1BJX0VWRU5UX01BWCAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQUNQSV9OVU1fRklYRURfRVZFTlRTICAgICAgICAgICBBQ1BJX0VWRU5UX01BWCArIDEKKworLyoKKyAqIEV2ZW50IFN0YXR1cyAtIFBlciBldmVudAorICogLS0tLS0tLS0tLS0tLQorICogVGhlIGVuY29kaW5nIG9mIGFjcGlfZXZlbnRfc3RhdHVzIGlzIGlsbHVzdHJhdGVkIGJlbG93LgorICogTm90ZSB0aGF0IGEgc2V0IGJpdCAoMSkgaW5kaWNhdGVzIHRoZSBwcm9wZXJ0eSBpcyBUUlVFCisgKiAoZS5nLiBpZiBiaXQgMCBpcyBzZXQgdGhlbiB0aGUgZXZlbnQgaXMgZW5hYmxlZCkuCisgKiArLS0tLS0tLS0tLS0tLSstKy0rLSsKKyAqIHwgICBCaXRzIDMxOjMgfDJ8MXwwfAorICogKy0tLS0tLS0tLS0tLS0rLSstKy0rCisgKiAgICAgICAgICB8ICAgICB8IHwgfAorICogICAgICAgICAgfCAgICAgfCB8ICstIEVuYWJsZWQ/CisgKiAgICAgICAgICB8ICAgICB8ICstLS0gRW5hYmxlZCBmb3Igd2FrZT8KKyAqICAgICAgICAgIHwgICAgICstLS0tLSBTZXQ/CisgKiAgICAgICAgICArLS0tLS0tLS0tLS0gPFJlc2VydmVkPgorICovCit0eXBlZGVmIHUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3BpX2V2ZW50X3N0YXR1czsKKworI2RlZmluZSBBQ1BJX0VWRU5UX0ZMQUdfRElTQUJMRUQgICAgICAgIChhY3BpX2V2ZW50X3N0YXR1cykgMHgwMAorI2RlZmluZSBBQ1BJX0VWRU5UX0ZMQUdfRU5BQkxFRCAgICAgICAgIChhY3BpX2V2ZW50X3N0YXR1cykgMHgwMQorI2RlZmluZSBBQ1BJX0VWRU5UX0ZMQUdfV0FLRV9FTkFCTEVEICAgIChhY3BpX2V2ZW50X3N0YXR1cykgMHgwMgorI2RlZmluZSBBQ1BJX0VWRU5UX0ZMQUdfU0VUICAgICAgICAgICAgIChhY3BpX2V2ZW50X3N0YXR1cykgMHgwNAorCisvKgorICogR2VuZXJhbCBQdXJwb3NlIEV2ZW50cyAoR1BFKQorICovCisjZGVmaW5lIEFDUElfR1BFX0lOVkFMSUQgICAgICAgICAgICAgICAgMHhGRgorI2RlZmluZSBBQ1BJX0dQRV9NQVggICAgICAgICAgICAgICAgICAgIDB4RkYKKyNkZWZpbmUgQUNQSV9OVU1fR1BFICAgICAgICAgICAgICAgICAgICAyNTYKKworI2RlZmluZSBBQ1BJX0dQRV9FTkFCTEUgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQUNQSV9HUEVfRElTQUJMRSAgICAgICAgICAgICAgICAxCisKKworLyoKKyAqIEdQRSBpbmZvIGZsYWdzIC0gUGVyIEdQRQorICogKy0rLSstKy0tLSstLS0rLSsKKyAqIHw3fDZ8NXw0OjN8MjoxfDB8CisgKiArLSstKy0rLS0tKy0tLSstKworICogIHwgfCB8ICB8ICAgfCAgfAorICogIHwgfCB8ICB8ICAgfCAgKy0tLSBJbnRlcnJ1cHQgdHlwZTogRWRnZSBvciBMZXZlbCBUcmlnZ2VyZWQKKyAqICB8IHwgfCAgfCAgICstLS0gVHlwZTogV2FrZS1vbmx5LCBSdW50aW1lLW9ubHksIG9yIHdha2UvcnVudGltZQorICogIHwgfCB8ICArLS0tIFR5cGUgb2YgZGlzcGF0Y2ggLS0gdG8gbWV0aG9kLCBoYW5kbGVyLCBvciBub25lCisgKiAgfCB8ICstLS0gRW5hYmxlZCBmb3IgcnVudGltZT8KKyAqICB8ICstLS0gRW5hYmxlZCBmb3Igd2FrZT8KKyAqICArLS0tIFN5c3RlbSBzdGF0ZSB3aGVuIEdQRSBvY3VycmVkIChydW5uaW5nL3dha2luZykKKyAqLworI2RlZmluZSBBQ1BJX0dQRV9YUlVQVF9UWVBFX01BU0sgICAgICAgICh1OCkgMHgwMQorI2RlZmluZSBBQ1BJX0dQRV9MRVZFTF9UUklHR0VSRUQgICAgICAgICh1OCkgMHgwMQorI2RlZmluZSBBQ1BJX0dQRV9FREdFX1RSSUdHRVJFRCAgICAgICAgICh1OCkgMHgwMAorCisjZGVmaW5lIEFDUElfR1BFX1RZUEVfTUFTSyAgICAgICAgICAgICAgKHU4KSAweDA2CisjZGVmaW5lIEFDUElfR1BFX1RZUEVfV0FLRV9SVU4gICAgICAgICAgKHU4KSAweDA2CisjZGVmaW5lIEFDUElfR1BFX1RZUEVfV0FLRSAgICAgICAgICAgICAgKHU4KSAweDAyCisjZGVmaW5lIEFDUElfR1BFX1RZUEVfUlVOVElNRSAgICAgICAgICAgKHU4KSAweDA0ICAgIC8qIERlZmF1bHQgKi8KKworI2RlZmluZSBBQ1BJX0dQRV9ESVNQQVRDSF9NQVNLICAgICAgICAgICh1OCkgMHgxOAorI2RlZmluZSBBQ1BJX0dQRV9ESVNQQVRDSF9IQU5ETEVSICAgICAgICh1OCkgMHgwOAorI2RlZmluZSBBQ1BJX0dQRV9ESVNQQVRDSF9NRVRIT0QgICAgICAgICh1OCkgMHgxMAorI2RlZmluZSBBQ1BJX0dQRV9ESVNQQVRDSF9OT1RfVVNFRCAgICAgICh1OCkgMHgwMCAgICAvKiBEZWZhdWx0ICovCisKKyNkZWZpbmUgQUNQSV9HUEVfUlVOX0VOQUJMRV9NQVNLICAgICAgICAodTgpIDB4MjAKKyNkZWZpbmUgQUNQSV9HUEVfUlVOX0VOQUJMRUQgICAgICAgICAgICAodTgpIDB4MjAKKyNkZWZpbmUgQUNQSV9HUEVfUlVOX0RJU0FCTEVEICAgICAgICAgICAodTgpIDB4MDAgICAgLyogRGVmYXVsdCAqLworCisjZGVmaW5lIEFDUElfR1BFX1dBS0VfRU5BQkxFX01BU0sgICAgICAgKHU4KSAweDQwCisjZGVmaW5lIEFDUElfR1BFX1dBS0VfRU5BQkxFRCAgICAgICAgICAgKHU4KSAweDQwCisjZGVmaW5lIEFDUElfR1BFX1dBS0VfRElTQUJMRUQgICAgICAgICAgKHU4KSAweDAwICAgIC8qIERlZmF1bHQgKi8KKworI2RlZmluZSBBQ1BJX0dQRV9FTkFCTEVfTUFTSyAgICAgICAgICAgICh1OCkgMHg2MCAgICAvKiBCb3RoIHJ1bi93YWtlICovCisKKyNkZWZpbmUgQUNQSV9HUEVfU1lTVEVNX01BU0sgICAgICAgICAgICAodTgpIDB4ODAKKyNkZWZpbmUgQUNQSV9HUEVfU1lTVEVNX1JVTk5JTkcgICAgICAgICAodTgpIDB4ODAKKyNkZWZpbmUgQUNQSV9HUEVfU1lTVEVNX1dBS0lORyAgICAgICAgICAodTgpIDB4MDAKKworLyoKKyAqIEZsYWdzIGZvciBHUEUgYW5kIExvY2sgaW50ZXJmYWNlcworICovCisjZGVmaW5lIEFDUElfRVZFTlRfV0FLRV9FTkFCTEUgICAgICAgICAgMHgyICAgICAgICAgICAgIC8qIGFjcGlfZ3BlX2VuYWJsZSAqLworI2RlZmluZSBBQ1BJX0VWRU5UX1dBS0VfRElTQUJMRSAgICAgICAgIDB4MiAgICAgICAgICAgICAvKiBhY3BpX2dwZV9kaXNhYmxlICovCisKKyNkZWZpbmUgQUNQSV9OT1RfSVNSICAgICAgICAgICAgICAgICAgICAweDEKKyNkZWZpbmUgQUNQSV9JU1IgICAgICAgICAgICAgICAgICAgICAgICAweDAKKworCisvKiBOb3RpZnkgdHlwZXMgKi8KKworI2RlZmluZSBBQ1BJX1NZU1RFTV9OT1RJRlkgICAgICAgICAgICAgIDB4MQorI2RlZmluZSBBQ1BJX0RFVklDRV9OT1RJRlkgICAgICAgICAgICAgIDB4MgorI2RlZmluZSBBQ1BJX0FMTF9OT1RJRlkgICAgICAgICAgICAgICAgIDB4MworI2RlZmluZSBBQ1BJX01BWF9OT1RJRllfSEFORExFUl9UWVBFICAgIDB4MworCisjZGVmaW5lIEFDUElfTUFYX1NZU19OT1RJRlkgICAgICAgICAgICAgMHg3ZgorCisKKy8qIEFkZHJlc3MgU3BhY2UgKE9wZXJhdGlvbiBSZWdpb24pIFR5cGVzICovCisKK3R5cGVkZWYgdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjcGlfYWRyX3NwYWNlX3R5cGU7CisKKyNkZWZpbmUgQUNQSV9BRFJfU1BBQ0VfU1lTVEVNX01FTU9SWSAgICAoYWNwaV9hZHJfc3BhY2VfdHlwZSkgMAorI2RlZmluZSBBQ1BJX0FEUl9TUEFDRV9TWVNURU1fSU8gICAgICAgIChhY3BpX2Fkcl9zcGFjZV90eXBlKSAxCisjZGVmaW5lIEFDUElfQURSX1NQQUNFX1BDSV9DT05GSUcgICAgICAgKGFjcGlfYWRyX3NwYWNlX3R5cGUpIDIKKyNkZWZpbmUgQUNQSV9BRFJfU1BBQ0VfRUMgICAgICAgICAgICAgICAoYWNwaV9hZHJfc3BhY2VfdHlwZSkgMworI2RlZmluZSBBQ1BJX0FEUl9TUEFDRV9TTUJVUyAgICAgICAgICAgIChhY3BpX2Fkcl9zcGFjZV90eXBlKSA0CisjZGVmaW5lIEFDUElfQURSX1NQQUNFX0NNT1MgICAgICAgICAgICAgKGFjcGlfYWRyX3NwYWNlX3R5cGUpIDUKKyNkZWZpbmUgQUNQSV9BRFJfU1BBQ0VfUENJX0JBUl9UQVJHRVQgICAoYWNwaV9hZHJfc3BhY2VfdHlwZSkgNgorI2RlZmluZSBBQ1BJX0FEUl9TUEFDRV9EQVRBX1RBQkxFICAgICAgIChhY3BpX2Fkcl9zcGFjZV90eXBlKSA3CisjZGVmaW5lIEFDUElfQURSX1NQQUNFX0ZJWEVEX0hBUkRXQVJFICAgKGFjcGlfYWRyX3NwYWNlX3R5cGUpIDEyNworCisKKy8qCisgKiBiaXRfcmVnaXN0ZXIgSURzCisgKiBUaGVzZSBhcmUgYml0ZmllbGRzIGRlZmluZWQgd2l0aGluIHRoZSBmdWxsIEFDUEkgcmVnaXN0ZXJzCisgKi8KKyNkZWZpbmUgQUNQSV9CSVRSRUdfVElNRVJfU1RBVFVTICAgICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgQUNQSV9CSVRSRUdfQlVTX01BU1RFUl9TVEFUVVMgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgQUNQSV9CSVRSRUdfR0xPQkFMX0xPQ0tfU1RBVFVTICAgICAgICAgIDB4MDIKKyNkZWZpbmUgQUNQSV9CSVRSRUdfUE9XRVJfQlVUVE9OX1NUQVRVUyAgICAgICAgIDB4MDMKKyNkZWZpbmUgQUNQSV9CSVRSRUdfU0xFRVBfQlVUVE9OX1NUQVRVUyAgICAgICAgIDB4MDQKKyNkZWZpbmUgQUNQSV9CSVRSRUdfUlRfQ0xPQ0tfU1RBVFVTICAgICAgICAgICAgIDB4MDUKKyNkZWZpbmUgQUNQSV9CSVRSRUdfV0FLRV9TVEFUVVMgICAgICAgICAgICAgICAgIDB4MDYKKyNkZWZpbmUgQUNQSV9CSVRSRUdfUENJRVhQX1dBS0VfU1RBVFVTICAgICAgICAgIDB4MDcKKworI2RlZmluZSBBQ1BJX0JJVFJFR19USU1FUl9FTkFCTEUgICAgICAgICAgICAgICAgMHgwOAorI2RlZmluZSBBQ1BJX0JJVFJFR19HTE9CQUxfTE9DS19FTkFCTEUgICAgICAgICAgMHgwOQorI2RlZmluZSBBQ1BJX0JJVFJFR19QT1dFUl9CVVRUT05fRU5BQkxFICAgICAgICAgMHgwQQorI2RlZmluZSBBQ1BJX0JJVFJFR19TTEVFUF9CVVRUT05fRU5BQkxFICAgICAgICAgMHgwQgorI2RlZmluZSBBQ1BJX0JJVFJFR19SVF9DTE9DS19FTkFCTEUgICAgICAgICAgICAgMHgwQworI2RlZmluZSBBQ1BJX0JJVFJFR19XQUtFX0VOQUJMRSAgICAgICAgICAgICAgICAgMHgwRAorI2RlZmluZSBBQ1BJX0JJVFJFR19QQ0lFWFBfV0FLRV9ESVNBQkxFICAgICAgICAgMHgwRQorCisjZGVmaW5lIEFDUElfQklUUkVHX1NDSV9FTkFCTEUgICAgICAgICAgICAgICAgICAweDBGCisjZGVmaW5lIEFDUElfQklUUkVHX0JVU19NQVNURVJfUkxEICAgICAgICAgICAgICAweDEwCisjZGVmaW5lIEFDUElfQklUUkVHX0dMT0JBTF9MT0NLX1JFTEVBU0UgICAgICAgICAweDExCisjZGVmaW5lIEFDUElfQklUUkVHX1NMRUVQX1RZUEVfQSAgICAgICAgICAgICAgICAweDEyCisjZGVmaW5lIEFDUElfQklUUkVHX1NMRUVQX1RZUEVfQiAgICAgICAgICAgICAgICAweDEzCisjZGVmaW5lIEFDUElfQklUUkVHX1NMRUVQX0VOQUJMRSAgICAgICAgICAgICAgICAweDE0CisKKyNkZWZpbmUgQUNQSV9CSVRSRUdfQVJCX0RJU0FCTEUgICAgICAgICAgICAgICAgIDB4MTUKKworI2RlZmluZSBBQ1BJX0JJVFJFR19NQVggICAgICAgICAgICAgICAgICAgICAgICAgMHgxNQorI2RlZmluZSBBQ1BJX05VTV9CSVRSRUcgICAgICAgICAgICAgICAgICAgICAgICAgQUNQSV9CSVRSRUdfTUFYICsgMQorCisKKy8qCisgKiBFeHRlcm5hbCBBQ1BJIG9iamVjdCBkZWZpbml0aW9uCisgKi8KK3VuaW9uIGFjcGlfb2JqZWN0Cit7CisJYWNwaV9vYmplY3RfdHlwZSAgICAgICAgICAgICAgICAgICAgdHlwZTsgICAvKiBTZWUgZGVmaW5pdGlvbiBvZiBhY3BpX25zX3R5cGUgZm9yIHZhbHVlcyAqLworCXN0cnVjdAorCXsKKwkJYWNwaV9vYmplY3RfdHlwZSAgICAgICAgICAgICAgICAgICAgdHlwZTsKKwkJYWNwaV9pbnRlZ2VyICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU7ICAgICAgLyogVGhlIGFjdHVhbCBudW1iZXIgKi8KKwl9IGludGVnZXI7CisKKwlzdHJ1Y3QKKwl7CisJCWFjcGlfb2JqZWN0X3R5cGUgICAgICAgICAgICAgICAgICAgIHR5cGU7CisJCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aDsgICAgIC8qICMgb2YgYnl0ZXMgaW4gc3RyaW5nLCBleGNsdWRpbmcgdHJhaWxpbmcgbnVsbCAqLworCQljaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcG9pbnRlcjsgICAvKiBwb2ludHMgdG8gdGhlIHN0cmluZyB2YWx1ZSAqLworCX0gc3RyaW5nOworCisJc3RydWN0CisJeworCQlhY3BpX29iamVjdF90eXBlICAgICAgICAgICAgICAgICAgICB0eXBlOworCQl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGg7ICAgICAvKiAjIG9mIGJ5dGVzIGluIGJ1ZmZlciAqLworCQl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcG9pbnRlcjsgICAvKiBwb2ludHMgdG8gdGhlIGJ1ZmZlciAqLworCX0gYnVmZmVyOworCisJc3RydWN0CisJeworCQlhY3BpX29iamVjdF90eXBlICAgICAgICAgICAgICAgICAgICB0eXBlOworCQl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsMTsKKwkJYWNwaV9oYW5kbGUgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlOyAgICAgLyogb2JqZWN0IHJlZmVyZW5jZSAqLworCX0gcmVmZXJlbmNlOworCisJc3RydWN0CisJeworCQlhY3BpX29iamVjdF90eXBlICAgICAgICAgICAgICAgICAgICB0eXBlOworCQl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudDsgICAgICAvKiAjIG9mIGVsZW1lbnRzIGluIHBhY2thZ2UgKi8KKwkJdW5pb24gYWNwaV9vYmplY3QgICAgICAgICAgICAgICAgICAgKmVsZW1lbnRzOyAgLyogUG9pbnRlciB0byBhbiBhcnJheSBvZiBBQ1BJX09CSkVDVHMgKi8KKwl9IHBhY2thZ2U7CisKKwlzdHJ1Y3QKKwl7CisJCWFjcGlfb2JqZWN0X3R5cGUgICAgICAgICAgICAgICAgICAgIHR5cGU7CisJCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2NfaWQ7CisJCWFjcGlfaW9fYWRkcmVzcyAgICAgICAgICAgICAgICAgICAgIHBibGtfYWRkcmVzczsKKwkJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGJsa19sZW5ndGg7CisJfSBwcm9jZXNzb3I7CisKKwlzdHJ1Y3QKKwl7CisJCWFjcGlfb2JqZWN0X3R5cGUgICAgICAgICAgICAgICAgICAgIHR5cGU7CisJCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbV9sZXZlbDsKKwkJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2Vfb3JkZXI7CisJfSBwb3dlcl9yZXNvdXJjZTsKK307CisKKworLyoKKyAqIExpc3Qgb2Ygb2JqZWN0cywgdXNlZCBhcyBhIHBhcmFtZXRlciBsaXN0IGZvciBjb250cm9sIG1ldGhvZCBldmFsdWF0aW9uCisgKi8KK3N0cnVjdCBhY3BpX29iamVjdF9saXN0Cit7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ7CisJdW5pb24gYWNwaV9vYmplY3QgICAgICAgICAgICAgICAgICAgKnBvaW50ZXI7Cit9OworCisKKy8qCisgKiBNaXNjZWxsYW5lb3VzIGNvbW1vbiBEYXRhIFN0cnVjdHVyZXMgdXNlZCBieSB0aGUgaW50ZXJmYWNlcworICovCisjZGVmaW5lIEFDUElfTk9fQlVGRkVSICAgICAgICAgICAgICAwCisjZGVmaW5lIEFDUElfQUxMT0NBVEVfQlVGRkVSICAgICAgICAoYWNwaV9zaXplKSAoLTEpCisjZGVmaW5lIEFDUElfQUxMT0NBVEVfTE9DQUxfQlVGRkVSICAoYWNwaV9zaXplKSAoLTIpCisKK3N0cnVjdCBhY3BpX2J1ZmZlcgoreworCWFjcGlfc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aDsgICAgICAgICAvKiBMZW5ndGggaW4gYnl0ZXMgb2YgdGhlIGJ1ZmZlciAqLworCXZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwb2ludGVyOyAgICAgICAvKiBwb2ludGVyIHRvIGJ1ZmZlciAqLworfTsKKworCisvKgorICogbmFtZV90eXBlIGZvciBhY3BpX2dldF9uYW1lCisgKi8KKyNkZWZpbmUgQUNQSV9GVUxMX1BBVEhOQU1FICAgICAgICAgICAgICAwCisjZGVmaW5lIEFDUElfU0lOR0xFX05BTUUgICAgICAgICAgICAgICAgMQorI2RlZmluZSBBQ1BJX05BTUVfVFlQRV9NQVggICAgICAgICAgICAgIDEKKworCisvKgorICogU3RydWN0dXJlIGFuZCBmbGFncyBmb3IgYWNwaV9nZXRfc3lzdGVtX2luZm8KKyAqLworI2RlZmluZSBBQ1BJX1NZU19NT0RFX1VOS05PV04gICAgICAgICAgIDB4MDAwMAorI2RlZmluZSBBQ1BJX1NZU19NT0RFX0FDUEkgICAgICAgICAgICAgIDB4MDAwMQorI2RlZmluZSBBQ1BJX1NZU19NT0RFX0xFR0FDWSAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBBQ1BJX1NZU19NT0RFU19NQVNLICAgICAgICAgICAgIDB4MDAwMworCisKKy8qCisgKiBBQ1BJIFRhYmxlIEluZm8uICBPbmUgcGVyIEFDUEkgdGFibGUgX3R5cGVfCisgKi8KK3N0cnVjdCBhY3BpX3RhYmxlX2luZm8KK3sKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudDsKK307CisKKworLyoKKyAqIFN5c3RlbSBpbmZvIHJldHVybmVkIGJ5IGFjcGlfZ2V0X3N5c3RlbV9pbmZvKCkKKyAqLworc3RydWN0IGFjcGlfc3lzdGVtX2luZm8KK3sKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3BpX2NhX3ZlcnNpb247CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3M7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXJfcmVzb2x1dGlvbjsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNlcnZlZDE7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQyOworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX2xldmVsOworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX2xheWVyOworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bV90YWJsZV90eXBlczsKKwlzdHJ1Y3QgYWNwaV90YWJsZV9pbmZvICAgICAgICAgICAgICB0YWJsZV9pbmZvIFtOVU1fQUNQSV9UQUJMRV9UWVBFU107Cit9OworCisKKy8qCisgKiBUeXBlcyBzcGVjaWZpYyB0byB0aGUgT1Mgc2VydmljZSBpbnRlcmZhY2VzCisgKi8KKwordHlwZWRlZiB1MzIKKyhBQ1BJX1NZU1RFTV9YRkFDRSAqYWNwaV9vc2RfaGFuZGxlcikgKAorCXZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmNvbnRleHQpOworCit0eXBlZGVmIHZvaWQKKyhBQ1BJX1NZU1RFTV9YRkFDRSAqYWNwaV9vc2RfZXhlY19jYWxsYmFjaykgKAorCXZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmNvbnRleHQpOworCisvKgorICogVmFyaW91cyBoYW5kbGVycyBhbmQgY2FsbGJhY2sgcHJvY2VkdXJlcworICovCit0eXBlZGVmCit1MzIgKCphY3BpX2V2ZW50X2hhbmRsZXIpICgKKwl2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqY29udGV4dCk7CisKK3R5cGVkZWYKK3ZvaWQgKCphY3BpX25vdGlmeV9oYW5kbGVyKSAoCisJYWNwaV9oYW5kbGUgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLAorCXZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpjb250ZXh0KTsKKwordHlwZWRlZgordm9pZCAoKmFjcGlfb2JqZWN0X2hhbmRsZXIpICgKKwlhY3BpX2hhbmRsZSAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24sCisJdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGEpOworCit0eXBlZGVmCithY3BpX3N0YXR1cyAoKmFjcGlfaW5pdF9oYW5kbGVyKSAoCisJYWNwaV9oYW5kbGUgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKTsKKworI2RlZmluZSBBQ1BJX0lOSVRfREVWSUNFX0lOSSAgICAgICAgMQorCit0eXBlZGVmCithY3BpX3N0YXR1cyAoKmFjcGlfZXhjZXB0aW9uX2hhbmRsZXIpICgKKwlhY3BpX3N0YXR1cyAgICAgICAgICAgICAgICAgICAgIGFtbF9zdGF0dXMsCisJYWNwaV9uYW1lICAgICAgICAgICAgICAgICAgICAgICBuYW1lLAorCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Bjb2RlLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW1sX29mZnNldCwKKwl2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICpjb250ZXh0KTsKKworCisvKiBBZGRyZXNzIFNwYWNlcyAoRm9yIE9wZXJhdGlvbiBSZWdpb25zKSAqLworCit0eXBlZGVmCithY3BpX3N0YXR1cyAoKmFjcGlfYWRyX3NwYWNlX2hhbmRsZXIpICgKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiwKKwlhY3BpX3BoeXNpY2FsX2FkZHJlc3MgICAgICAgICAgICAgICBhZGRyZXNzLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdF93aWR0aCwKKwlhY3BpX2ludGVnZXIgICAgICAgICAgICAgICAgICAgICAgICAqdmFsdWUsCisJdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmhhbmRsZXJfY29udGV4dCwKKwl2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcmVnaW9uX2NvbnRleHQpOworCisjZGVmaW5lIEFDUElfREVGQVVMVF9IQU5ETEVSICAgICAgICBOVUxMCisKKwordHlwZWRlZgorYWNwaV9zdGF0dXMgKCphY3BpX2Fkcl9zcGFjZV9zZXR1cCkgKAorCWFjcGlfaGFuZGxlICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lvbl9oYW5kbGUsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24sCisJdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmhhbmRsZXJfY29udGV4dCwKKwl2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKnJlZ2lvbl9jb250ZXh0KTsKKworI2RlZmluZSBBQ1BJX1JFR0lPTl9BQ1RJVkFURSAgICAwCisjZGVmaW5lIEFDUElfUkVHSU9OX0RFQUNUSVZBVEUgIDEKKwordHlwZWRlZgorYWNwaV9zdGF0dXMgKCphY3BpX3dhbGtfY2FsbGJhY2spICgKKwlhY3BpX2hhbmRsZSAgICAgICAgICAgICAgICAgICAgICAgICBvYmpfaGFuZGxlLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lc3RpbmdfbGV2ZWwsCisJdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmNvbnRleHQsCisJdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKipyZXR1cm5fdmFsdWUpOworCisKKy8qIEludGVycnVwdCBoYW5kbGVyIHJldHVybiB2YWx1ZXMgKi8KKworI2RlZmluZSBBQ1BJX0lOVEVSUlVQVF9OT1RfSEFORExFRCAgICAgIDB4MDAKKyNkZWZpbmUgQUNQSV9JTlRFUlJVUFRfSEFORExFRCAgICAgICAgICAweDAxCisKKworLyogQ29tbW9uIHN0cmluZyB2ZXJzaW9uIG9mIGRldmljZSBISURzIGFuZCBVSURzICovCisKK3N0cnVjdCBhY3BpX2RldmljZV9pZAoreworCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVbQUNQSV9ERVZJQ0VfSURfTEVOR1RIXTsKK307CisKKy8qIENvbW1vbiBzdHJpbmcgdmVyc2lvbiBvZiBkZXZpY2UgQ0lEcyAqLworCitzdHJ1Y3QgYWNwaV9jb21wYXRpYmxlX2lkCit7CisJY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVtBQ1BJX01BWF9DSURfTEVOR1RIXTsKK307CisKK3N0cnVjdCBhY3BpX2NvbXBhdGlibGVfaWRfbGlzdAoreworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplOworCXN0cnVjdCBhY3BpX2NvbXBhdGlibGVfaWQgICAgICAgaWRbMV07Cit9OworCisKKy8qIFN0cnVjdHVyZSBhbmQgZmxhZ3MgZm9yIGFjcGlfZ2V0X29iamVjdF9pbmZvICovCisKKyNkZWZpbmUgQUNQSV9WQUxJRF9TVEEgICAgICAgICAgICAgICAgICAweDAwMDEKKyNkZWZpbmUgQUNQSV9WQUxJRF9BRFIgICAgICAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgQUNQSV9WQUxJRF9ISUQgICAgICAgICAgICAgICAgICAweDAwMDQKKyNkZWZpbmUgQUNQSV9WQUxJRF9VSUQgICAgICAgICAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgQUNQSV9WQUxJRF9DSUQgICAgICAgICAgICAgICAgICAweDAwMTAKKyNkZWZpbmUgQUNQSV9WQUxJRF9TWERTICAgICAgICAgICAgICAgICAweDAwMjAKKworCisjZGVmaW5lIEFDUElfQ09NTU9OX09CSl9JTkZPIFwKKwlhY3BpX29iamVjdF90eXBlICAgICAgICAgICAgICAgICAgICB0eXBlOyAgICAgICAgICAgLyogQUNQSSBvYmplY3QgdHlwZSAqLyBcCisJYWNwaV9uYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSAgICAgICAgICAgIC8qIEFDUEkgb2JqZWN0IE5hbWUgKi8KKworCitzdHJ1Y3QgYWNwaV9vYmpfaW5mb19oZWFkZXIKK3sKKwlBQ1BJX0NPTU1PTl9PQkpfSU5GTzsKK307CisKKworLyogU3RydWN0dXJlIHJldHVybmVkIGZyb20gR2V0IE9iamVjdCBJbmZvICovCisKK3N0cnVjdCBhY3BpX2RldmljZV9pbmZvCit7CisJQUNQSV9DT01NT05fT0JKX0lORk87CisKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZDsgICAgICAgICAgICAgIC8qIEluZGljYXRlcyB3aGljaCBmaWVsZHMgYmVsb3cgYXJlIHZhbGlkICovCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudF9zdGF0dXM7ICAgICAvKiBfU1RBIHZhbHVlICovCisJYWNwaV9pbnRlZ2VyICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzczsgICAgICAgICAgICAvKiBfQURSIHZhbHVlIGlmIGFueSAqLworCXN0cnVjdCBhY3BpX2RldmljZV9pZCAgICAgICAgICAgICAgIGhhcmR3YXJlX2lkOyAgICAgICAgLyogX0hJRCB2YWx1ZSBpZiBhbnkgKi8KKwlzdHJ1Y3QgYWNwaV9kZXZpY2VfaWQgICAgICAgICAgICAgICB1bmlxdWVfaWQ7ICAgICAgICAgIC8qIF9VSUQgdmFsdWUgaWYgYW55ICovCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlnaGVzdF9kc3RhdGVzWzRdOyAvKiBfc3hfZCB2YWx1ZXM6IDB4RkYgaW5kaWNhdGVzIG5vdCB2YWxpZCAqLworCXN0cnVjdCBhY3BpX2NvbXBhdGlibGVfaWRfbGlzdCAgICAgIGNvbXBhdGliaWxpdHlfaWQ7ICAgLyogTGlzdCBvZiBfQ0lEcyBpZiBhbnkgKi8KK307CisKKworLyogQ29udGV4dCBzdHJ1Y3RzIGZvciBhZGRyZXNzIHNwYWNlIGhhbmRsZXJzICovCisKK3N0cnVjdCBhY3BpX3BjaV9pZAoreworCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZ21lbnQ7CisJdTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzOworCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZTsKKwl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbjsKK307CisKKworc3RydWN0IGFjcGlfbWVtX3NwYWNlX2NvbnRleHQKK3sKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGg7CisJYWNwaV9waHlzaWNhbF9hZGRyZXNzICAgICAgICAgICAgICAgYWRkcmVzczsKKwlhY3BpX3BoeXNpY2FsX2FkZHJlc3MgICAgICAgICAgICAgICBtYXBwZWRfcGh5c2ljYWxfYWRkcmVzczsKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbWFwcGVkX2xvZ2ljYWxfYWRkcmVzczsKKwlhY3BpX3NpemUgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwZWRfbGVuZ3RoOworfTsKKworCisvKgorICogRGVmaW5pdGlvbnMgZm9yIFJlc291cmNlIEF0dHJpYnV0ZXMKKyAqLworCisvKgorICogIE1lbW9yeSBBdHRyaWJ1dGVzCisgKi8KKyNkZWZpbmUgQUNQSV9SRUFEX09OTFlfTUVNT1JZICAgICAgICAgICAodTgpIDB4MDAKKyNkZWZpbmUgQUNQSV9SRUFEX1dSSVRFX01FTU9SWSAgICAgICAgICAodTgpIDB4MDEKKworI2RlZmluZSBBQ1BJX05PTl9DQUNIRUFCTEVfTUVNT1JZICAgICAgICh1OCkgMHgwMAorI2RlZmluZSBBQ1BJX0NBQ0hBQkxFX01FTU9SWSAgICAgICAgICAgICh1OCkgMHgwMQorI2RlZmluZSBBQ1BJX1dSSVRFX0NPTUJJTklOR19NRU1PUlkgICAgICh1OCkgMHgwMgorI2RlZmluZSBBQ1BJX1BSRUZFVENIQUJMRV9NRU1PUlkgICAgICAgICh1OCkgMHgwMworCisvKgorICogIElPIEF0dHJpYnV0ZXMKKyAqICBUaGUgSVNBIElvIHJhbmdlcyBhcmU6ICAgICBuMDAwLW4wX2ZmaCwgbjQwMC1uNF9mZmgsIG44MDAtbjhfZmZoLCBuX2MwMC1uX2NGRmguCisgKiAgVGhlIG5vbi1JU0EgSW8gcmFuZ2VzIGFyZTogbjEwMC1uM19mZmgsIG41MDAtbjdfZmZoLCBuOTAwLW5fYkZmaCwgbl9jZDAtbl9mRkZoLgorICovCisjZGVmaW5lIEFDUElfTk9OX0lTQV9PTkxZX1JBTkdFUyAgICAgICAgKHU4KSAweDAxCisjZGVmaW5lIEFDUElfSVNBX09OTFlfUkFOR0VTICAgICAgICAgICAgKHU4KSAweDAyCisjZGVmaW5lIEFDUElfRU5USVJFX1JBTkdFICAgICAgICAgICAgICAgKEFDUElfTk9OX0lTQV9PTkxZX1JBTkdFUyB8IEFDUElfSVNBX09OTFlfUkFOR0VTKQorCisjZGVmaW5lIEFDUElfU1BBUlNFX1RSQU5TTEFUSU9OICAgICAgICAgKHU4KSAweDAzCisKKy8qCisgKiAgSU8gUG9ydCBEZXNjcmlwdG9yIERlY29kZQorICovCisjZGVmaW5lIEFDUElfREVDT0RFXzEwICAgICAgICAgICAgICAgICAgKHU4KSAweDAwICAgIC8qIDEwLWJpdCBJTyBhZGRyZXNzIGRlY29kZSAqLworI2RlZmluZSBBQ1BJX0RFQ09ERV8xNiAgICAgICAgICAgICAgICAgICh1OCkgMHgwMSAgICAvKiAxNi1iaXQgSU8gYWRkcmVzcyBkZWNvZGUgKi8KKworLyoKKyAqICBJUlEgQXR0cmlidXRlcworICovCisjZGVmaW5lIEFDUElfRURHRV9TRU5TSVRJVkUgICAgICAgICAgICAgKHU4KSAweDAwCisjZGVmaW5lIEFDUElfTEVWRUxfU0VOU0lUSVZFICAgICAgICAgICAgKHU4KSAweDAxCisKKyNkZWZpbmUgQUNQSV9BQ1RJVkVfSElHSCAgICAgICAgICAgICAgICAodTgpIDB4MDAKKyNkZWZpbmUgQUNQSV9BQ1RJVkVfTE9XICAgICAgICAgICAgICAgICAodTgpIDB4MDEKKworI2RlZmluZSBBQ1BJX0VYQ0xVU0lWRSAgICAgICAgICAgICAgICAgICh1OCkgMHgwMAorI2RlZmluZSBBQ1BJX1NIQVJFRCAgICAgICAgICAgICAgICAgICAgICh1OCkgMHgwMQorCisvKgorICogIERNQSBBdHRyaWJ1dGVzCisgKi8KKyNkZWZpbmUgQUNQSV9DT01QQVRJQklMSVRZICAgICAgICAgICAgICAodTgpIDB4MDAKKyNkZWZpbmUgQUNQSV9UWVBFX0EgICAgICAgICAgICAgICAgICAgICAodTgpIDB4MDEKKyNkZWZpbmUgQUNQSV9UWVBFX0IgICAgICAgICAgICAgICAgICAgICAodTgpIDB4MDIKKyNkZWZpbmUgQUNQSV9UWVBFX0YgICAgICAgICAgICAgICAgICAgICAodTgpIDB4MDMKKworI2RlZmluZSBBQ1BJX05PVF9CVVNfTUFTVEVSICAgICAgICAgICAgICh1OCkgMHgwMAorI2RlZmluZSBBQ1BJX0JVU19NQVNURVIgICAgICAgICAgICAgICAgICh1OCkgMHgwMQorCisjZGVmaW5lIEFDUElfVFJBTlNGRVJfOCAgICAgICAgICAgICAgICAgKHU4KSAweDAwCisjZGVmaW5lIEFDUElfVFJBTlNGRVJfOF8xNiAgICAgICAgICAgICAgKHU4KSAweDAxCisjZGVmaW5lIEFDUElfVFJBTlNGRVJfMTYgICAgICAgICAgICAgICAgKHU4KSAweDAyCisKKy8qCisgKiBTdGFydCBEZXBlbmRlbnQgRnVuY3Rpb25zIFByaW9yaXR5IGRlZmluaXRpb25zCisgKi8KKyNkZWZpbmUgQUNQSV9HT09EX0NPTkZJR1VSQVRJT04gICAgICAgICAodTgpIDB4MDAKKyNkZWZpbmUgQUNQSV9BQ0NFUFRBQkxFX0NPTkZJR1VSQVRJT04gICAodTgpIDB4MDEKKyNkZWZpbmUgQUNQSV9TVUJfT1BUSU1BTF9DT05GSUdVUkFUSU9OICAodTgpIDB4MDIKKworLyoKKyAqICAxNiwgMzIgYW5kIDY0LWJpdCBBZGRyZXNzIERlc2NyaXB0b3IgcmVzb3VyY2UgdHlwZXMKKyAqLworI2RlZmluZSBBQ1BJX01FTU9SWV9SQU5HRSAgICAgICAgICAgICAgICh1OCkgMHgwMAorI2RlZmluZSBBQ1BJX0lPX1JBTkdFICAgICAgICAgICAgICAgICAgICh1OCkgMHgwMQorI2RlZmluZSBBQ1BJX0JVU19OVU1CRVJfUkFOR0UgICAgICAgICAgICh1OCkgMHgwMgorCisjZGVmaW5lIEFDUElfQUREUkVTU19OT1RfRklYRUQgICAgICAgICAgKHU4KSAweDAwCisjZGVmaW5lIEFDUElfQUREUkVTU19GSVhFRCAgICAgICAgICAgICAgKHU4KSAweDAxCisKKyNkZWZpbmUgQUNQSV9QT1NfREVDT0RFICAgICAgICAgICAgICAgICAodTgpIDB4MDAKKyNkZWZpbmUgQUNQSV9TVUJfREVDT0RFICAgICAgICAgICAgICAgICAodTgpIDB4MDEKKworI2RlZmluZSBBQ1BJX1BST0RVQ0VSICAgICAgICAgICAgICAgICAgICh1OCkgMHgwMAorI2RlZmluZSBBQ1BJX0NPTlNVTUVSICAgICAgICAgICAgICAgICAgICh1OCkgMHgwMQorCisKKy8qCisgKiAgU3RydWN0dXJlcyB1c2VkIHRvIGRlc2NyaWJlIGRldmljZSByZXNvdXJjZXMKKyAqLworc3RydWN0IGFjcGlfcmVzb3VyY2VfaXJxCit7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRnZV9sZXZlbDsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVfaGlnaF9sb3c7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmVkX2V4Y2x1c2l2ZTsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJfb2ZfaW50ZXJydXB0czsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHRzWzFdOworfTsKKworc3RydWN0IGFjcGlfcmVzb3VyY2VfZG1hCit7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfbWFzdGVyOworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZmVyOworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlcl9vZl9jaGFubmVsczsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsc1sxXTsKK307CisKK3N0cnVjdCBhY3BpX3Jlc291cmNlX3N0YXJ0X2RwZgoreworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhdGliaWxpdHlfcHJpb3JpdHk7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyZm9ybWFuY2Vfcm9idXN0bmVzczsKK307CisKKy8qCisgKiBFTkRfREVQRU5ERU5UX0ZVTkNUSU9OU19SRVNPVVJDRSBzdHJ1Y3QgaXMgbm90CisgKiBuZWVkZWQgYmVjYXVzZSBpdCBoYXMgbm8gZmllbGRzCisgKi8KKworc3RydWN0IGFjcGlfcmVzb3VyY2VfaW8KK3sKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19kZWNvZGU7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluX2Jhc2VfYWRkcmVzczsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfYmFzZV9hZGRyZXNzOworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWdubWVudDsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZV9sZW5ndGg7Cit9OworCitzdHJ1Y3QgYWNwaV9yZXNvdXJjZV9maXhlZF9pbworeworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VfYWRkcmVzczsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZV9sZW5ndGg7Cit9OworCitzdHJ1Y3QgYWNwaV9yZXNvdXJjZV92ZW5kb3IKK3sKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGg7CisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWRbMV07Cit9OworCitzdHJ1Y3QgYWNwaV9yZXNvdXJjZV9lbmRfdGFnCit7CisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tzdW07Cit9OworCitzdHJ1Y3QgYWNwaV9yZXNvdXJjZV9tZW0yNAoreworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfd3JpdGVfYXR0cmlidXRlOworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbl9iYXNlX2FkZHJlc3M7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2Jhc2VfYWRkcmVzczsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnQ7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2VfbGVuZ3RoOworfTsKKworc3RydWN0IGFjcGlfcmVzb3VyY2VfbWVtMzIKK3sKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX3dyaXRlX2F0dHJpYnV0ZTsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5fYmFzZV9hZGRyZXNzOworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF9iYXNlX2FkZHJlc3M7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50OworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlX2xlbmd0aDsKK307CisKK3N0cnVjdCBhY3BpX3Jlc291cmNlX2ZpeGVkX21lbTMyCit7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF93cml0ZV9hdHRyaWJ1dGU7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2VfYmFzZV9hZGRyZXNzOworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlX2xlbmd0aDsKK307CisKK3N0cnVjdCBhY3BpX21lbW9yeV9hdHRyaWJ1dGUKK3sKKwl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZV9hdHRyaWJ1dGU7CisJdTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF93cml0ZV9hdHRyaWJ1dGU7Cit9OworCitzdHJ1Y3QgYWNwaV9pb19hdHRyaWJ1dGUKK3sKKwl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZV9hdHRyaWJ1dGU7CisJdTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRpb25fYXR0cmlidXRlOworfTsKKworc3RydWN0IGFjcGlfYnVzX2F0dHJpYnV0ZQoreworCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2VydmVkMTsKKwl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNlcnZlZDI7Cit9OworCit1bmlvbiBhY3BpX3Jlc291cmNlX2F0dHJpYnV0ZQoreworCXN0cnVjdCBhY3BpX21lbW9yeV9hdHRyaWJ1dGUgICAgICAgIG1lbW9yeTsKKwlzdHJ1Y3QgYWNwaV9pb19hdHRyaWJ1dGUgICAgICAgICAgICBpbzsKKwlzdHJ1Y3QgYWNwaV9idXNfYXR0cmlidXRlICAgICAgICAgICBidXM7Cit9OworCitzdHJ1Y3QgYWNwaV9yZXNvdXJjZV9zb3VyY2UKK3sKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdfbGVuZ3RoOworCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpzdHJpbmdfcHRyOworfTsKKworc3RydWN0IGFjcGlfcmVzb3VyY2VfYWRkcmVzczE2Cit7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VfdHlwZTsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWNlcl9jb25zdW1lcjsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGU7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluX2FkZHJlc3NfZml4ZWQ7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2FkZHJlc3NfZml4ZWQ7CisJdW5pb24gYWNwaV9yZXNvdXJjZV9hdHRyaWJ1dGUgICAgICAgYXR0cmlidXRlOworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyYW51bGFyaXR5OworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbl9hZGRyZXNzX3JhbmdlOworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF9hZGRyZXNzX3JhbmdlOworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3NfdHJhbnNsYXRpb25fb2Zmc2V0OworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3NfbGVuZ3RoOworCXN0cnVjdCBhY3BpX3Jlc291cmNlX3NvdXJjZSAgICAgICAgIHJlc291cmNlX3NvdXJjZTsKK307CisKK3N0cnVjdCBhY3BpX3Jlc291cmNlX2FkZHJlc3MzMgoreworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlX3R5cGU7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjZXJfY29uc3VtZXI7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlOworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbl9hZGRyZXNzX2ZpeGVkOworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF9hZGRyZXNzX2ZpeGVkOworCXVuaW9uIGFjcGlfcmVzb3VyY2VfYXR0cmlidXRlICAgICAgIGF0dHJpYnV0ZTsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmFudWxhcml0eTsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5fYWRkcmVzc19yYW5nZTsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfYWRkcmVzc19yYW5nZTsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzX3RyYW5zbGF0aW9uX29mZnNldDsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzX2xlbmd0aDsKKwlzdHJ1Y3QgYWNwaV9yZXNvdXJjZV9zb3VyY2UgICAgICAgICByZXNvdXJjZV9zb3VyY2U7Cit9OworCitzdHJ1Y3QgYWNwaV9yZXNvdXJjZV9hZGRyZXNzNjQKK3sKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZV90eXBlOworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y2VyX2NvbnN1bWVyOworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZTsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5fYWRkcmVzc19maXhlZDsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfYWRkcmVzc19maXhlZDsKKwl1bmlvbiBhY3BpX3Jlc291cmNlX2F0dHJpYnV0ZSAgICAgICBhdHRyaWJ1dGU7CisJdTY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JhbnVsYXJpdHk7CisJdTY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluX2FkZHJlc3NfcmFuZ2U7CisJdTY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2FkZHJlc3NfcmFuZ2U7CisJdTY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzc190cmFuc2xhdGlvbl9vZmZzZXQ7CisJdTY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzc19sZW5ndGg7CisJdTY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZV9zcGVjaWZpY19hdHRyaWJ1dGVzOworCXN0cnVjdCBhY3BpX3Jlc291cmNlX3NvdXJjZSAgICAgICAgIHJlc291cmNlX3NvdXJjZTsKK307CisKK3N0cnVjdCBhY3BpX3Jlc291cmNlX2V4dF9pcnEKK3sKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWNlcl9jb25zdW1lcjsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGdlX2xldmVsOworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZV9oaWdoX2xvdzsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFyZWRfZXhjbHVzaXZlOworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlcl9vZl9pbnRlcnJ1cHRzOworCXN0cnVjdCBhY3BpX3Jlc291cmNlX3NvdXJjZSAgICAgICAgIHJlc291cmNlX3NvdXJjZTsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHRzWzFdOworfTsKKworCisvKiBBQ1BJX1JFU09VUkNFX1RZUEVzICovCisKKyNkZWZpbmUgQUNQSV9SU1RZUEVfSVJRICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFDUElfUlNUWVBFX0RNQSAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBBQ1BJX1JTVFlQRV9TVEFSVF9EUEYgICAgICAgICAgIDIKKyNkZWZpbmUgQUNQSV9SU1RZUEVfRU5EX0RQRiAgICAgICAgICAgICAzCisjZGVmaW5lIEFDUElfUlNUWVBFX0lPICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBBQ1BJX1JTVFlQRV9GSVhFRF9JTyAgICAgICAgICAgIDUKKyNkZWZpbmUgQUNQSV9SU1RZUEVfVkVORE9SICAgICAgICAgICAgICA2CisjZGVmaW5lIEFDUElfUlNUWVBFX0VORF9UQUcgICAgICAgICAgICAgNworI2RlZmluZSBBQ1BJX1JTVFlQRV9NRU0yNCAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQUNQSV9SU1RZUEVfTUVNMzIgICAgICAgICAgICAgICA5CisjZGVmaW5lIEFDUElfUlNUWVBFX0ZJWEVEX01FTTMyICAgICAgICAgMTAKKyNkZWZpbmUgQUNQSV9SU1RZUEVfQUREUkVTUzE2ICAgICAgICAgICAxMQorI2RlZmluZSBBQ1BJX1JTVFlQRV9BRERSRVNTMzIgICAgICAgICAgIDEyCisjZGVmaW5lIEFDUElfUlNUWVBFX0FERFJFU1M2NCAgICAgICAgICAgMTMKKyNkZWZpbmUgQUNQSV9SU1RZUEVfRVhUX0lSUSAgICAgICAgICAgICAxNAorCit0eXBlZGVmIHUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3BpX3Jlc291cmNlX3R5cGU7CisKK3VuaW9uIGFjcGlfcmVzb3VyY2VfZGF0YQoreworCXN0cnVjdCBhY3BpX3Jlc291cmNlX2lycSAgICAgICAgICAgIGlycTsKKwlzdHJ1Y3QgYWNwaV9yZXNvdXJjZV9kbWEgICAgICAgICAgICBkbWE7CisJc3RydWN0IGFjcGlfcmVzb3VyY2Vfc3RhcnRfZHBmICAgICAgc3RhcnRfZHBmOworCXN0cnVjdCBhY3BpX3Jlc291cmNlX2lvICAgICAgICAgICAgIGlvOworCXN0cnVjdCBhY3BpX3Jlc291cmNlX2ZpeGVkX2lvICAgICAgIGZpeGVkX2lvOworCXN0cnVjdCBhY3BpX3Jlc291cmNlX3ZlbmRvciAgICAgICAgIHZlbmRvcl9zcGVjaWZpYzsKKwlzdHJ1Y3QgYWNwaV9yZXNvdXJjZV9lbmRfdGFnICAgICAgICBlbmRfdGFnOworCXN0cnVjdCBhY3BpX3Jlc291cmNlX21lbTI0ICAgICAgICAgIG1lbW9yeTI0OworCXN0cnVjdCBhY3BpX3Jlc291cmNlX21lbTMyICAgICAgICAgIG1lbW9yeTMyOworCXN0cnVjdCBhY3BpX3Jlc291cmNlX2ZpeGVkX21lbTMyICAgIGZpeGVkX21lbW9yeTMyOworCXN0cnVjdCBhY3BpX3Jlc291cmNlX2FkZHJlc3MxNiAgICAgIGFkZHJlc3MxNjsKKwlzdHJ1Y3QgYWNwaV9yZXNvdXJjZV9hZGRyZXNzMzIgICAgICBhZGRyZXNzMzI7CisJc3RydWN0IGFjcGlfcmVzb3VyY2VfYWRkcmVzczY0ICAgICAgYWRkcmVzczY0OworCXN0cnVjdCBhY3BpX3Jlc291cmNlX2V4dF9pcnEgICAgICAgIGV4dGVuZGVkX2lycTsKK307CisKK3N0cnVjdCBhY3BpX3Jlc291cmNlCit7CisJYWNwaV9yZXNvdXJjZV90eXBlICAgICAgICAgICAgICAgICAgaWQ7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoOworCXVuaW9uIGFjcGlfcmVzb3VyY2VfZGF0YSAgICAgICAgICAgIGRhdGE7Cit9OworCisjZGVmaW5lIEFDUElfUkVTT1VSQ0VfTEVOR1RIICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIEFDUElfUkVTT1VSQ0VfTEVOR1RIX05PX0RBVEEgICAgICAgIDggICAgICAgLyogSWQgKyBMZW5ndGggZmllbGRzICovCisKKyNkZWZpbmUgQUNQSV9TSVpFT0ZfUkVTT1VSQ0UodHlwZSkgICAgICAgICAgKEFDUElfUkVTT1VSQ0VfTEVOR1RIX05PX0RBVEEgKyBzaXplb2YgKHR5cGUpKQorCisjZGVmaW5lIEFDUElfTkVYVF9SRVNPVVJDRShyZXMpICAgICAgICAgICAgIChzdHJ1Y3QgYWNwaV9yZXNvdXJjZSAqKSgodTggKikgcmVzICsgcmVzLT5sZW5ndGgpCisKKyNpZmRlZiBBQ1BJX01JU0FMSUdORURfVFJBTlNGRVJTCisjZGVmaW5lIEFDUElfQUxJR05fUkVTT1VSQ0VfU0laRShsZW5ndGgpICAgIChsZW5ndGgpCisjZWxzZQorI2RlZmluZSBBQ1BJX0FMSUdOX1JFU09VUkNFX1NJWkUobGVuZ3RoKSAgICBBQ1BJX1JPVU5EX1VQX1RPX05BVElWRV9XT1JEKGxlbmd0aCkKKyNlbmRpZgorCisvKgorICogRU5EOiBvZiBkZWZpbml0aW9ucyBmb3IgUmVzb3VyY2UgQXR0cmlidXRlcworICovCisKKworc3RydWN0IGFjcGlfcGNpX3JvdXRpbmdfdGFibGUKK3sKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGg7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGluOworCWFjcGlfaW50ZWdlciAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3M7ICAgICAgICAvKiBoZXJlIGZvciA2NC1iaXQgYWxpZ25tZW50ICovCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlX2luZGV4OworCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVs0XTsgICAgICAvKiBwYWQgdG8gNjQgYml0cyBzbyBzaXplb2YoKSB3b3JrcyBpbiBhbGwgY2FzZXMgKi8KK307CisKKy8qCisgKiBFTkQ6IG9mIGRlZmluaXRpb25zIGZvciBQQ0kgUm91dGluZyB0YWJsZXMKKyAqLworCisKKyNlbmRpZiAvKiBfX0FDVFlQRVNfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWN1dGlscy5oIGIvaW5jbHVkZS9hY3BpL2FjdXRpbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGUyNmI4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hY3BpL2FjdXRpbHMuaApAQCAtMCwwICsxLDg3NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIE5hbWU6IGFjdXRpbHMuaCAtLSBwcm90b3R5cGVzIGZvciB0aGUgY29tbW9uIChzdWJzeXN0ZW0td2lkZSkgcHJvY2VkdXJlcworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDUsIFIuIEJ5cm9uIE1vb3JlCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIsCisgKiAgICB3aXRob3V0IG1vZGlmaWNhdGlvbi4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSBhdCBtaW5pbXVtIGEgZGlzY2xhaW1lcgorICogICAgc3Vic3RhbnRpYWxseSBzaW1pbGFyIHRvIHRoZSAiTk8gV0FSUkFOVFkiIGRpc2NsYWltZXIgYmVsb3cKKyAqICAgICgiRGlzY2xhaW1lciIpIGFuZCBhbnkgcmVkaXN0cmlidXRpb24gbXVzdCBiZSBjb25kaXRpb25lZCB1cG9uCisgKiAgICBpbmNsdWRpbmcgYSBzdWJzdGFudGlhbGx5IHNpbWlsYXIgRGlzY2xhaW1lciByZXF1aXJlbWVudCBmb3IgZnVydGhlcgorICogICAgYmluYXJ5IHJlZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZXMgb2YgdGhlIGFib3ZlLWxpc3RlZCBjb3B5cmlnaHQgaG9sZGVycyBub3IgdGhlIG5hbWVzCisgKiAgICBvZiBhbnkgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhpcyBzb2Z0d2FyZSBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKCJHUEwiKSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIE5PIFdBUlJBTlRZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORworICogSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisgKi8KKworI2lmbmRlZiBfQUNVVElMU19ICisjZGVmaW5lIF9BQ1VUSUxTX0gKKworCit0eXBlZGVmCithY3BpX3N0YXR1cyAoKmFjcGlfcGtnX2NhbGxiYWNrKSAoCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RfdHlwZSwKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICpzb3VyY2Vfb2JqZWN0LAorCXVuaW9uIGFjcGlfZ2VuZXJpY19zdGF0ZSAgICAgICAgKnN0YXRlLAorCXZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmNvbnRleHQpOworCithY3BpX3N0YXR1cworYWNwaV91dF93YWxrX3BhY2thZ2VfdHJlZSAoCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAqc291cmNlX29iamVjdCwKKwl2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICp0YXJnZXRfb2JqZWN0LAorCWFjcGlfcGtnX2NhbGxiYWNrICAgICAgICAgICAgICAgd2Fsa19jYWxsYmFjaywKKwl2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICpjb250ZXh0KTsKKworc3RydWN0IGFjcGlfcGtnX2luZm8KK3sKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpmcmVlX3NwYWNlOworCWFjcGlfc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoOworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0X3NwYWNlOworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtX3BhY2thZ2VzOworfTsKKworI2RlZmluZSBSRUZfSU5DUkVNRU5UICAgICAgICh1MTYpIDAKKyNkZWZpbmUgUkVGX0RFQ1JFTUVOVCAgICAgICAodTE2KSAxCisjZGVmaW5lIFJFRl9GT1JDRV9ERUxFVEUgICAgKHUxNikgMgorCisvKiBhY3BpX3V0X2R1bXBfYnVmZmVyICovCisKKyNkZWZpbmUgREJfQllURV9ESVNQTEFZICAgICAxCisjZGVmaW5lIERCX1dPUkRfRElTUExBWSAgICAgMgorI2RlZmluZSBEQl9EV09SRF9ESVNQTEFZICAgIDQKKyNkZWZpbmUgREJfUVdPUkRfRElTUExBWSAgICA4CisKKworLyogR2xvYmFsIGluaXRpYWxpemF0aW9uIGludGVyZmFjZXMgKi8KKwordm9pZAorYWNwaV91dF9pbml0X2dsb2JhbHMgKAorCXZvaWQpOworCit2b2lkCithY3BpX3V0X3Rlcm1pbmF0ZSAoCisJdm9pZCk7CisKKworLyoKKyAqIHV0X2luaXQgLSBtaXNjZWxsYW5lb3VzIGluaXRpYWxpemF0aW9uIGFuZCBzaHV0ZG93bgorICovCisKK2FjcGlfc3RhdHVzCithY3BpX3V0X2hhcmR3YXJlX2luaXRpYWxpemUgKAorCXZvaWQpOworCit2b2lkCithY3BpX3V0X3N1YnN5c3RlbV9zaHV0ZG93biAoCisJdm9pZCk7CisKK2FjcGlfc3RhdHVzCithY3BpX3V0X3ZhbGlkYXRlX2ZhZHQgKAorCXZvaWQpOworCisvKgorICogdXRfZ2xvYmFsIC0gR2xvYmFsIGRhdGEgc3RydWN0dXJlcyBhbmQgcHJvY2VkdXJlcworICovCisKKyNpZiBkZWZpbmVkKEFDUElfREVCVUdfT1VUUFVUKSB8fCBkZWZpbmVkKEFDUElfREVCVUdHRVIpCisKK2NoYXIgKgorYWNwaV91dF9nZXRfbXV0ZXhfbmFtZSAoCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXRleF9pZCk7CisKKyNlbmRpZgorCitjaGFyICoKK2FjcGlfdXRfZ2V0X3R5cGVfbmFtZSAoCisJYWNwaV9vYmplY3RfdHlwZSAgICAgICAgICAgICAgICB0eXBlKTsKKworY2hhciAqCithY3BpX3V0X2dldF9ub2RlX25hbWUgKAorCXZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm9iamVjdCk7CisKK2NoYXIgKgorYWNwaV91dF9nZXRfZGVzY3JpcHRvcl9uYW1lICgKKwl2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICpvYmplY3QpOworCitjaGFyICoKK2FjcGlfdXRfZ2V0X29iamVjdF90eXBlX25hbWUgKAorCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgKm9ial9kZXNjKTsKKworY2hhciAqCithY3BpX3V0X2dldF9yZWdpb25fbmFtZSAoCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFjZV9pZCk7CisKK2NoYXIgKgorYWNwaV91dF9nZXRfZXZlbnRfbmFtZSAoCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudF9pZCk7CisKK2NoYXIKK2FjcGlfdXRfaGV4X3RvX2FzY2lpX2NoYXIgKAorCWFjcGlfaW50ZWdlciAgICAgICAgICAgICAgICAgICAgaW50ZWdlciwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uKTsKKwordTgKK2FjcGlfdXRfdmFsaWRfb2JqZWN0X3R5cGUgKAorCWFjcGlfb2JqZWN0X3R5cGUgICAgICAgICAgICAgICAgdHlwZSk7CisKK2FjcGlfb3duZXJfaWQKK2FjcGlfdXRfYWxsb2NhdGVfb3duZXJfaWQgKAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRfdHlwZSk7CisKKworLyoKKyAqIHV0X2NsaWIgLSBMb2NhbCBpbXBsZW1lbnRhdGlvbnMgb2YgQyBsaWJyYXJ5IGZ1bmN0aW9ucworICovCisKKyNpZm5kZWYgQUNQSV9VU0VfU1lTVEVNX0NMSUJSQVJZCisKK2FjcGlfc2l6ZQorYWNwaV91dF9zdHJsZW4gKAorCWNvbnN0IGNoYXIgICAgICAgICAgICAgICAgICAgICAgKnN0cmluZyk7CisKK2NoYXIgKgorYWNwaV91dF9zdHJjcHkgKAorCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmRzdF9zdHJpbmcsCisJY29uc3QgY2hhciAgICAgICAgICAgICAgICAgICAgICAqc3JjX3N0cmluZyk7CisKK2NoYXIgKgorYWNwaV91dF9zdHJuY3B5ICgKKwljaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICpkc3Rfc3RyaW5nLAorCWNvbnN0IGNoYXIgICAgICAgICAgICAgICAgICAgICAgKnNyY19zdHJpbmcsCisJYWNwaV9zaXplICAgICAgICAgICAgICAgICAgICAgICBjb3VudCk7CisKK2ludAorYWNwaV91dF9tZW1jbXAgKAorCWNvbnN0IGNoYXIgICAgICAgICAgICAgICAgICAgICAgKmJ1ZmZlcjEsCisJY29uc3QgY2hhciAgICAgICAgICAgICAgICAgICAgICAqYnVmZmVyMiwKKwlhY3BpX3NpemUgICAgICAgICAgICAgICAgICAgICAgIGNvdW50KTsKKworaW50CithY3BpX3V0X3N0cm5jbXAgKAorCWNvbnN0IGNoYXIgICAgICAgICAgICAgICAgICAgICAgKnN0cmluZzEsCisJY29uc3QgY2hhciAgICAgICAgICAgICAgICAgICAgICAqc3RyaW5nMiwKKwlhY3BpX3NpemUgICAgICAgICAgICAgICAgICAgICAgIGNvdW50KTsKKworaW50CithY3BpX3V0X3N0cmNtcCAoCisJY29uc3QgY2hhciAgICAgICAgICAgICAgICAgICAgICAqc3RyaW5nMSwKKwljb25zdCBjaGFyICAgICAgICAgICAgICAgICAgICAgICpzdHJpbmcyKTsKKworY2hhciAqCithY3BpX3V0X3N0cmNhdCAoCisJY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqZHN0X3N0cmluZywKKwljb25zdCBjaGFyICAgICAgICAgICAgICAgICAgICAgICpzcmNfc3RyaW5nKTsKKworY2hhciAqCithY3BpX3V0X3N0cm5jYXQgKAorCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmRzdF9zdHJpbmcsCisJY29uc3QgY2hhciAgICAgICAgICAgICAgICAgICAgICAqc3JjX3N0cmluZywKKwlhY3BpX3NpemUgICAgICAgICAgICAgICAgICAgICAgIGNvdW50KTsKKwordTMyCithY3BpX3V0X3N0cnRvdWwgKAorCWNvbnN0IGNoYXIgICAgICAgICAgICAgICAgICAgICAgKnN0cmluZywKKwljaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqdGVybWluYXRvciwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2UpOworCitjaGFyICoKK2FjcGlfdXRfc3Ryc3RyICgKKwljaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICpzdHJpbmcxLAorCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnN0cmluZzIpOworCit2b2lkICoKK2FjcGlfdXRfbWVtY3B5ICgKKwl2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0LAorCWNvbnN0IHZvaWQgICAgICAgICAgICAgICAgICAgICAgKnNyYywKKwlhY3BpX3NpemUgICAgICAgICAgICAgICAgICAgICAgIGNvdW50KTsKKwordm9pZCAqCithY3BpX3V0X21lbXNldCAoCisJdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdCwKKwlhY3BpX25hdGl2ZV91aW50ICAgICAgICAgICAgICAgIHZhbHVlLAorCWFjcGlfc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgY291bnQpOworCitpbnQKK2FjcGlfdXRfdG9fdXBwZXIgKAorCWludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyk7CisKK2ludAorYWNwaV91dF90b19sb3dlciAoCisJaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjKTsKKworZXh0ZXJuIGNvbnN0IHU4IF9hY3BpX2N0eXBlW107CisKKyNkZWZpbmUgX0FDUElfWEEgICAgIDB4MDAgICAgLyogZXh0cmEgYWxwaGFiZXRpYyAtIG5vdCBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUgX0FDUElfWFMgICAgIDB4NDAgICAgLyogZXh0cmEgc3BhY2UgKi8KKyNkZWZpbmUgX0FDUElfQkIgICAgIDB4MDAgICAgLyogQkVMLCBCUywgZXRjLiAtIG5vdCBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUgX0FDUElfQ04gICAgIDB4MjAgICAgLyogQ1IsIEZGLCBIVCwgTkwsIFZUICovCisjZGVmaW5lIF9BQ1BJX0RJICAgICAweDA0ICAgIC8qICcwJy0nOScgKi8KKyNkZWZpbmUgX0FDUElfTE8gICAgIDB4MDIgICAgLyogJ2EnLSd6JyAqLworI2RlZmluZSBfQUNQSV9QVSAgICAgMHgxMCAgICAvKiBwdW5jdHVhdGlvbiAqLworI2RlZmluZSBfQUNQSV9TUCAgICAgMHgwOCAgICAvKiBzcGFjZSAqLworI2RlZmluZSBfQUNQSV9VUCAgICAgMHgwMSAgICAvKiAnQSctJ1onICovCisjZGVmaW5lIF9BQ1BJX1hEICAgICAweDgwICAgIC8qICcwJy0nOScsICdBJy0nRicsICdhJy0nZicgKi8KKworI2RlZmluZSBBQ1BJX0lTX0RJR0lUKGMpICAoX2FjcGlfY3R5cGVbKHVuc2lnbmVkIGNoYXIpKGMpXSAmIChfQUNQSV9ESSkpCisjZGVmaW5lIEFDUElfSVNfU1BBQ0UoYykgIChfYWNwaV9jdHlwZVsodW5zaWduZWQgY2hhcikoYyldICYgKF9BQ1BJX1NQKSkKKyNkZWZpbmUgQUNQSV9JU19YRElHSVQoYykgKF9hY3BpX2N0eXBlWyh1bnNpZ25lZCBjaGFyKShjKV0gJiAoX0FDUElfWEQpKQorI2RlZmluZSBBQ1BJX0lTX1VQUEVSKGMpICAoX2FjcGlfY3R5cGVbKHVuc2lnbmVkIGNoYXIpKGMpXSAmIChfQUNQSV9VUCkpCisjZGVmaW5lIEFDUElfSVNfTE9XRVIoYykgIChfYWNwaV9jdHlwZVsodW5zaWduZWQgY2hhcikoYyldICYgKF9BQ1BJX0xPKSkKKyNkZWZpbmUgQUNQSV9JU19QUklOVChjKSAgKF9hY3BpX2N0eXBlWyh1bnNpZ25lZCBjaGFyKShjKV0gJiAoX0FDUElfTE8gfCBfQUNQSV9VUCB8IF9BQ1BJX0RJIHwgX0FDUElfU1AgfCBfQUNQSV9QVSkpCisjZGVmaW5lIEFDUElfSVNfQUxQSEEoYykgIChfYWNwaV9jdHlwZVsodW5zaWduZWQgY2hhcikoYyldICYgKF9BQ1BJX0xPIHwgX0FDUElfVVApKQorI2RlZmluZSBBQ1BJX0lTX0FTQ0lJKGMpICAoKGMpIDwgMHg4MCkKKworI2VuZGlmIC8qIEFDUElfVVNFX1NZU1RFTV9DTElCUkFSWSAqLworCisvKgorICogdXRfY29weSAtIE9iamVjdCBjb25zdHJ1Y3Rpb24gYW5kIGNvbnZlcnNpb24gaW50ZXJmYWNlcworICovCisKK2FjcGlfc3RhdHVzCithY3BpX3V0X2J1aWxkX3NpbXBsZV9vYmplY3QoCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAqb2JqLAorCXVuaW9uIGFjcGlfb2JqZWN0ICAgICAgICAgICAgICAgKnVzZXJfb2JqLAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGFfc3BhY2UsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYnVmZmVyX3NwYWNlX3VzZWQpOworCithY3BpX3N0YXR1cworYWNwaV91dF9idWlsZF9wYWNrYWdlX29iamVjdCAoCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAqb2JqLAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmJ1ZmZlciwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpzcGFjZV91c2VkKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfdXRfY29weV9pZWxlbWVudF90b19lZWxlbWVudCAoCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RfdHlwZSwKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICpzb3VyY2Vfb2JqZWN0LAorCXVuaW9uIGFjcGlfZ2VuZXJpY19zdGF0ZSAgICAgICAgKnN0YXRlLAorCXZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmNvbnRleHQpOworCithY3BpX3N0YXR1cworYWNwaV91dF9jb3B5X2llbGVtZW50X3RvX2llbGVtZW50ICgKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdF90eXBlLAorCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgKnNvdXJjZV9vYmplY3QsCisJdW5pb24gYWNwaV9nZW5lcmljX3N0YXRlICAgICAgICAqc3RhdGUsCisJdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqY29udGV4dCk7CisKK2FjcGlfc3RhdHVzCithY3BpX3V0X2NvcHlfaW9iamVjdF90b19lb2JqZWN0ICgKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICpvYmosCisJc3RydWN0IGFjcGlfYnVmZmVyICAgICAgICAgICAgICAqcmV0X2J1ZmZlcik7CisKK2FjcGlfc3RhdHVzCithY3BpX3V0X2NvcHlfZXNpbXBsZV90b19pc2ltcGxlKAorCXVuaW9uIGFjcGlfb2JqZWN0ICAgICAgICAgICAgICAgKnVzZXJfb2JqLAorCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgKipyZXR1cm5fb2JqKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfdXRfY29weV9lb2JqZWN0X3RvX2lvYmplY3QgKAorCXVuaW9uIGFjcGlfb2JqZWN0ICAgICAgICAgICAgICAgKm9iaiwKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICoqaW50ZXJuYWxfb2JqKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfdXRfY29weV9pc2ltcGxlX3RvX2lzaW1wbGUgKAorCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgKnNvdXJjZV9vYmosCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAqZGVzdF9vYmopOworCithY3BpX3N0YXR1cworYWNwaV91dF9jb3B5X2lwYWNrYWdlX3RvX2lwYWNrYWdlICgKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICpzb3VyY2Vfb2JqLAorCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgKmRlc3Rfb2JqLAorCXN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgICAgICAgICAgKndhbGtfc3RhdGUpOworCithY3BpX3N0YXR1cworYWNwaV91dF9jb3B5X3NpbXBsZV9vYmplY3QgKAorCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgKnNvdXJjZV9kZXNjLAorCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgKmRlc3RfZGVzYyk7CisKK2FjcGlfc3RhdHVzCithY3BpX3V0X2NvcHlfaW9iamVjdF90b19pb2JqZWN0ICgKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICpzb3VyY2VfZGVzYywKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICoqZGVzdF9kZXNjLAorCXN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgICAgICAgICAgKndhbGtfc3RhdGUpOworCisKKy8qCisgKiB1dF9jcmVhdGUgLSBPYmplY3QgY3JlYXRpb24KKyAqLworCithY3BpX3N0YXR1cworYWNwaV91dF91cGRhdGVfb2JqZWN0X3JlZmVyZW5jZSAoCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAqb2JqZWN0LAorCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uKTsKKworCisvKgorICogdXRfZGVidWcgLSBEZWJ1ZyBpbnRlcmZhY2VzCisgKi8KKwordm9pZAorYWNwaV91dF9pbml0X3N0YWNrX3B0cl90cmFjZSAoCisJdm9pZCk7CisKK3ZvaWQKK2FjcGlfdXRfdHJhY2tfc3RhY2tfcHRyICgKKwl2b2lkKTsKKwordm9pZAorYWNwaV91dF90cmFjZSAoCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lX251bWJlciwKKwlzdHJ1Y3QgYWNwaV9kZWJ1Z19wcmludF9pbmZvICAgICpkYmdfaW5mbyk7CisKK3ZvaWQKK2FjcGlfdXRfdHJhY2VfcHRyICgKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVfbnVtYmVyLAorCXN0cnVjdCBhY3BpX2RlYnVnX3ByaW50X2luZm8gICAgKmRiZ19pbmZvLAorCXZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnBvaW50ZXIpOworCit2b2lkCithY3BpX3V0X3RyYWNlX3UzMiAoCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lX251bWJlciwKKwlzdHJ1Y3QgYWNwaV9kZWJ1Z19wcmludF9pbmZvICAgICpkYmdfaW5mbywKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVnZXIpOworCit2b2lkCithY3BpX3V0X3RyYWNlX3N0ciAoCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lX251bWJlciwKKwlzdHJ1Y3QgYWNwaV9kZWJ1Z19wcmludF9pbmZvICAgICpkYmdfaW5mbywKKwljaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICpzdHJpbmcpOworCit2b2lkCithY3BpX3V0X2V4aXQgKAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZV9udW1iZXIsCisJc3RydWN0IGFjcGlfZGVidWdfcHJpbnRfaW5mbyAgICAqZGJnX2luZm8pOworCit2b2lkCithY3BpX3V0X3N0YXR1c19leGl0ICgKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVfbnVtYmVyLAorCXN0cnVjdCBhY3BpX2RlYnVnX3ByaW50X2luZm8gICAgKmRiZ19pbmZvLAorCWFjcGlfc3RhdHVzICAgICAgICAgICAgICAgICAgICAgc3RhdHVzKTsKKwordm9pZAorYWNwaV91dF92YWx1ZV9leGl0ICgKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVfbnVtYmVyLAorCXN0cnVjdCBhY3BpX2RlYnVnX3ByaW50X2luZm8gICAgKmRiZ19pbmZvLAorCWFjcGlfaW50ZWdlciAgICAgICAgICAgICAgICAgICAgdmFsdWUpOworCit2b2lkCithY3BpX3V0X3B0cl9leGl0ICgKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVfbnVtYmVyLAorCXN0cnVjdCBhY3BpX2RlYnVnX3ByaW50X2luZm8gICAgKmRiZ19pbmZvLAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnB0cik7CisKK3ZvaWQKK2FjcGlfdXRfcmVwb3J0X2luZm8gKAorCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm1vZHVsZV9uYW1lLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZV9udW1iZXIsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRfaWQpOworCit2b2lkCithY3BpX3V0X3JlcG9ydF9lcnJvciAoCisJY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbW9kdWxlX25hbWUsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lX251bWJlciwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudF9pZCk7CisKK3ZvaWQKK2FjcGlfdXRfcmVwb3J0X3dhcm5pbmcgKAorCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm1vZHVsZV9uYW1lLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZV9udW1iZXIsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRfaWQpOworCit2b2lkCithY3BpX3V0X2R1bXBfYnVmZmVyICgKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpidWZmZXIsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXksCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRfaWQpOworCit2b2lkIEFDUElfSU5URVJOQUxfVkFSX1hGQUNFCithY3BpX3V0X2RlYnVnX3ByaW50ICgKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZF9kZWJ1Z19sZXZlbCwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVfbnVtYmVyLAorCXN0cnVjdCBhY3BpX2RlYnVnX3ByaW50X2luZm8gICAgKmRiZ19pbmZvLAorCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmZvcm1hdCwKKwkuLi4pIEFDUElfUFJJTlRGX0xJS0VfRlVOQzsKKwordm9pZCBBQ1BJX0lOVEVSTkFMX1ZBUl9YRkFDRQorYWNwaV91dF9kZWJ1Z19wcmludF9yYXcgKAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdGVkX2RlYnVnX2xldmVsLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZV9udW1iZXIsCisJc3RydWN0IGFjcGlfZGVidWdfcHJpbnRfaW5mbyAgICAqZGJnX2luZm8sCisJY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqZm9ybWF0LAorCS4uLikgQUNQSV9QUklOVEZfTElLRV9GVU5DOworCisKKy8qCisgKiB1dF9kZWxldGUgLSBPYmplY3QgZGVsZXRpb24KKyAqLworCit2b2lkCithY3BpX3V0X2RlbGV0ZV9pbnRlcm5hbF9vYmogKAorCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgKm9iamVjdCk7CisKK3ZvaWQKK2FjcGlfdXRfZGVsZXRlX2ludGVybmFsX3BhY2thZ2Vfb2JqZWN0ICgKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICpvYmplY3QpOworCit2b2lkCithY3BpX3V0X2RlbGV0ZV9pbnRlcm5hbF9zaW1wbGVfb2JqZWN0ICgKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICpvYmplY3QpOworCit2b2lkCithY3BpX3V0X2RlbGV0ZV9pbnRlcm5hbF9vYmplY3RfbGlzdCAoCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAqKm9ial9saXN0KTsKKworCisvKgorICogdXRfZXZhbCAtIG9iamVjdCBldmFsdWF0aW9uCisgKi8KKworLyogTWV0aG9kIG5hbWUgc3RyaW5ncyAqLworCisjZGVmaW5lIE1FVEhPRF9OQU1FX19ISUQgICAgICAgICJfSElEIgorI2RlZmluZSBNRVRIT0RfTkFNRV9fQ0lEICAgICAgICAiX0NJRCIKKyNkZWZpbmUgTUVUSE9EX05BTUVfX1VJRCAgICAgICAgIl9VSUQiCisjZGVmaW5lIE1FVEhPRF9OQU1FX19BRFIgICAgICAgICJfQURSIgorI2RlZmluZSBNRVRIT0RfTkFNRV9fU1RBICAgICAgICAiX1NUQSIKKyNkZWZpbmUgTUVUSE9EX05BTUVfX1JFRyAgICAgICAgIl9SRUciCisjZGVmaW5lIE1FVEhPRF9OQU1FX19TRUcgICAgICAgICJfU0VHIgorI2RlZmluZSBNRVRIT0RfTkFNRV9fQkJOICAgICAgICAiX0JCTiIKKyNkZWZpbmUgTUVUSE9EX05BTUVfX1BSVCAgICAgICAgIl9QUlQiCisjZGVmaW5lIE1FVEhPRF9OQU1FX19DUlMgICAgICAgICJfQ1JTIgorI2RlZmluZSBNRVRIT0RfTkFNRV9fUFJTICAgICAgICAiX1BSUyIKKyNkZWZpbmUgTUVUSE9EX05BTUVfX1BSVyAgICAgICAgIl9QUlciCisKKworYWNwaV9zdGF0dXMKK2FjcGlfdXRfb3NpX2ltcGxlbWVudGF0aW9uICgKKwlzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICAgICAgICAgICp3YWxrX3N0YXRlKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfdXRfZXZhbHVhdGVfb2JqZWN0ICgKKwlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAgICAgICpwcmVmaXhfbm9kZSwKKwljaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwYXRoLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfcmV0dXJuX2J0eXBlcywKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICoqcmV0dXJuX2Rlc2MpOworCithY3BpX3N0YXR1cworYWNwaV91dF9ldmFsdWF0ZV9udW1lcmljX29iamVjdCAoCisJY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqb2JqZWN0X25hbWUsCisJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgICAgICAqZGV2aWNlX25vZGUsCisJYWNwaV9pbnRlZ2VyICAgICAgICAgICAgICAgICAgICAqYWRkcmVzcyk7CisKK2FjcGlfc3RhdHVzCithY3BpX3V0X2V4ZWN1dGVfSElEICgKKwlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAgICAgICpkZXZpY2Vfbm9kZSwKKwlzdHJ1Y3QgYWNwaV9kZXZpY2VfaWQgICAgICAgICAgICpoaWQpOworCithY3BpX3N0YXR1cworYWNwaV91dF9leGVjdXRlX0NJRCAoCisJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgICAgICAqZGV2aWNlX25vZGUsCisJc3RydWN0IGFjcGlfY29tcGF0aWJsZV9pZF9saXN0ICoqcmV0dXJuX2NpZF9saXN0KTsKKworYWNwaV9zdGF0dXMKK2FjcGlfdXRfZXhlY3V0ZV9TVEEgKAorCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICAgICAgKmRldmljZV9ub2RlLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnN0YXR1c19mbGFncyk7CisKK2FjcGlfc3RhdHVzCithY3BpX3V0X2V4ZWN1dGVfVUlEICgKKwlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAgICAgICpkZXZpY2Vfbm9kZSwKKwlzdHJ1Y3QgYWNwaV9kZXZpY2VfaWQgICAgICAgICAgICp1aWQpOworCithY3BpX3N0YXR1cworYWNwaV91dF9leGVjdXRlX3N4ZHMgKAorCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICAgICAgKmRldmljZV9ub2RlLAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmhpZ2hlc3QpOworCisvKgorICogdXRfbXV0ZXggLSBtdXR1YWwgZXhjbHVzaW9uIGludGVyZmFjZXMKKyAqLworCithY3BpX3N0YXR1cworYWNwaV91dF9tdXRleF9pbml0aWFsaXplICgKKwl2b2lkKTsKKwordm9pZAorYWNwaV91dF9tdXRleF90ZXJtaW5hdGUgKAorCXZvaWQpOworCithY3BpX3N0YXR1cworYWNwaV91dF9jcmVhdGVfbXV0ZXggKAorCWFjcGlfbXV0ZXhfaGFuZGxlICAgICAgICAgICAgICAgbXV0ZXhfaWQpOworCithY3BpX3N0YXR1cworYWNwaV91dF9kZWxldGVfbXV0ZXggKAorCWFjcGlfbXV0ZXhfaGFuZGxlICAgICAgICAgICAgICAgbXV0ZXhfaWQpOworCithY3BpX3N0YXR1cworYWNwaV91dF9hY3F1aXJlX211dGV4ICgKKwlhY3BpX211dGV4X2hhbmRsZSAgICAgICAgICAgICAgIG11dGV4X2lkKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfdXRfcmVsZWFzZV9tdXRleCAoCisJYWNwaV9tdXRleF9oYW5kbGUgICAgICAgICAgICAgICBtdXRleF9pZCk7CisKKworLyoKKyAqIHV0X29iamVjdCAtIGludGVybmFsIG9iamVjdCBjcmVhdGUvZGVsZXRlL2NhY2hlIHJvdXRpbmVzCisgKi8KKwordW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAqCithY3BpX3V0X2NyZWF0ZV9pbnRlcm5hbF9vYmplY3RfZGJnICgKKwljaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICptb2R1bGVfbmFtZSwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVfbnVtYmVyLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50X2lkLAorCWFjcGlfb2JqZWN0X3R5cGUgICAgICAgICAgICAgICAgdHlwZSk7CisKK3ZvaWQgKgorYWNwaV91dF9hbGxvY2F0ZV9vYmplY3RfZGVzY19kYmcgKAorCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm1vZHVsZV9uYW1lLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZV9udW1iZXIsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRfaWQpOworCisjZGVmaW5lIGFjcGlfdXRfY3JlYXRlX2ludGVybmFsX29iamVjdCh0KSBhY3BpX3V0X2NyZWF0ZV9pbnRlcm5hbF9vYmplY3RfZGJnIChfVEhJU19NT0RVTEUsX19MSU5FX18sX0NPTVBPTkVOVCx0KQorI2RlZmluZSBhY3BpX3V0X2FsbG9jYXRlX29iamVjdF9kZXNjKCkgIGFjcGlfdXRfYWxsb2NhdGVfb2JqZWN0X2Rlc2NfZGJnIChfVEhJU19NT0RVTEUsX19MSU5FX18sX0NPTVBPTkVOVCkKKwordm9pZAorYWNwaV91dF9kZWxldGVfb2JqZWN0X2Rlc2MgKAorCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgKm9iamVjdCk7CisKK3U4CithY3BpX3V0X3ZhbGlkX2ludGVybmFsX29iamVjdCAoCisJdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqb2JqZWN0KTsKKwordW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqCithY3BpX3V0X2NyZWF0ZV9idWZmZXJfb2JqZWN0ICgKKwlhY3BpX3NpemUgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl9zaXplKTsKKwordW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqCithY3BpX3V0X2NyZWF0ZV9zdHJpbmdfb2JqZWN0ICgKKwlhY3BpX3NpemUgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ19zaXplKTsKKworCisvKgorICogdXRfcmVmX2NudCAtIE9iamVjdCByZWZlcmVuY2UgY291bnQgbWFuYWdlbWVudAorICovCisKK3ZvaWQKK2FjcGlfdXRfYWRkX3JlZmVyZW5jZSAoCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAqb2JqZWN0KTsKKwordm9pZAorYWNwaV91dF9yZW1vdmVfcmVmZXJlbmNlICgKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICpvYmplY3QpOworCisvKgorICogdXRfc2l6ZSAtIE9iamVjdCBzaXplIHJvdXRpbmVzCisgKi8KKworYWNwaV9zdGF0dXMKK2FjcGlfdXRfZ2V0X3NpbXBsZV9vYmplY3Rfc2l6ZSAoCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAqb2JqLAorCWFjcGlfc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgKm9ial9sZW5ndGgpOworCithY3BpX3N0YXR1cworYWNwaV91dF9nZXRfcGFja2FnZV9vYmplY3Rfc2l6ZSAoCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAqb2JqLAorCWFjcGlfc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgKm9ial9sZW5ndGgpOworCithY3BpX3N0YXR1cworYWNwaV91dF9nZXRfb2JqZWN0X3NpemUoCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAqb2JqLAorCWFjcGlfc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgKm9ial9sZW5ndGgpOworCithY3BpX3N0YXR1cworYWNwaV91dF9nZXRfZWxlbWVudF9sZW5ndGggKAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0X3R5cGUsCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAqc291cmNlX29iamVjdCwKKwl1bmlvbiBhY3BpX2dlbmVyaWNfc3RhdGUgICAgICAgICpzdGF0ZSwKKwl2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICpjb250ZXh0KTsKKworCisvKgorICogdXRfc3RhdGUgLSBHZW5lcmljIHN0YXRlIGNyZWF0aW9uL2NhY2hlIHJvdXRpbmVzCisgKi8KKwordm9pZAorYWNwaV91dF9wdXNoX2dlbmVyaWNfc3RhdGUgKAorCXVuaW9uIGFjcGlfZ2VuZXJpY19zdGF0ZSAgICAgICAgKipsaXN0X2hlYWQsCisJdW5pb24gYWNwaV9nZW5lcmljX3N0YXRlICAgICAgICAqc3RhdGUpOworCit1bmlvbiBhY3BpX2dlbmVyaWNfc3RhdGUgKgorYWNwaV91dF9wb3BfZ2VuZXJpY19zdGF0ZSAoCisJdW5pb24gYWNwaV9nZW5lcmljX3N0YXRlICAgICAgICAqKmxpc3RfaGVhZCk7CisKKwordW5pb24gYWNwaV9nZW5lcmljX3N0YXRlICoKK2FjcGlfdXRfY3JlYXRlX2dlbmVyaWNfc3RhdGUgKAorCXZvaWQpOworCitzdHJ1Y3QgYWNwaV90aHJlYWRfc3RhdGUgKgorYWNwaV91dF9jcmVhdGVfdGhyZWFkX3N0YXRlICgKKwl2b2lkKTsKKwordW5pb24gYWNwaV9nZW5lcmljX3N0YXRlICoKK2FjcGlfdXRfY3JlYXRlX3VwZGF0ZV9zdGF0ZSAoCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAqb2JqZWN0LAorCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uKTsKKwordW5pb24gYWNwaV9nZW5lcmljX3N0YXRlICoKK2FjcGlfdXRfY3JlYXRlX3BrZ19zdGF0ZSAoCisJdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqaW50ZXJuYWxfb2JqZWN0LAorCXZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmV4dGVybmFsX29iamVjdCwKKwl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4KTsKKworYWNwaV9zdGF0dXMKK2FjcGlfdXRfY3JlYXRlX3VwZGF0ZV9zdGF0ZV9hbmRfcHVzaCAoCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAqb2JqZWN0LAorCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLAorCXVuaW9uIGFjcGlfZ2VuZXJpY19zdGF0ZSAgICAgICAgKipzdGF0ZV9saXN0KTsKKworI2lmZGVmIEFDUElfRlVUVVJFX1VTQUdFCithY3BpX3N0YXR1cworYWNwaV91dF9jcmVhdGVfcGtnX3N0YXRlX2FuZF9wdXNoICgKKwl2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICppbnRlcm5hbF9vYmplY3QsCisJdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqZXh0ZXJuYWxfb2JqZWN0LAorCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgsCisJdW5pb24gYWNwaV9nZW5lcmljX3N0YXRlICAgICAgICAqKnN0YXRlX2xpc3QpOworI2VuZGlmCisKK3VuaW9uIGFjcGlfZ2VuZXJpY19zdGF0ZSAqCithY3BpX3V0X2NyZWF0ZV9jb250cm9sX3N0YXRlICgKKwl2b2lkKTsKKwordm9pZAorYWNwaV91dF9kZWxldGVfZ2VuZXJpY19zdGF0ZSAoCisJdW5pb24gYWNwaV9nZW5lcmljX3N0YXRlICAgICAgICAqc3RhdGUpOworCisjaWZkZWYgQUNQSV9FTkFCTEVfT0JKRUNUX0NBQ0hFCit2b2lkCithY3BpX3V0X2RlbGV0ZV9nZW5lcmljX3N0YXRlX2NhY2hlICgKKwl2b2lkKTsKKwordm9pZAorYWNwaV91dF9kZWxldGVfb2JqZWN0X2NhY2hlICgKKwl2b2lkKTsKKyNlbmRpZgorCisvKgorICogdXRtaXNjCisgKi8KKwordm9pZAorYWNwaV91dF9wcmludF9zdHJpbmcgKAorCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnN0cmluZywKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF9sZW5ndGgpOworCithY3BpX3N0YXR1cworYWNwaV91dF9kaXZpZGUgKAorCWFjcGlfaW50ZWdlciAgICAgICAgICAgICAgICAgICAgaW5fZGl2aWRlbmQsCisJYWNwaV9pbnRlZ2VyICAgICAgICAgICAgICAgICAgICBpbl9kaXZpc29yLAorCWFjcGlfaW50ZWdlciAgICAgICAgICAgICAgICAgICAgKm91dF9xdW90aWVudCwKKwlhY3BpX2ludGVnZXIgICAgICAgICAgICAgICAgICAgICpvdXRfcmVtYWluZGVyKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfdXRfc2hvcnRfZGl2aWRlICgKKwlhY3BpX2ludGVnZXIgICAgICAgICAgICAgICAgICAgIGluX2RpdmlkZW5kLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2aXNvciwKKwlhY3BpX2ludGVnZXIgICAgICAgICAgICAgICAgICAgICpvdXRfcXVvdGllbnQsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqb3V0X3JlbWFpbmRlcik7CisKK3U4CithY3BpX3V0X3ZhbGlkX2FjcGlfbmFtZSAoCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lKTsKKwordTgKK2FjcGlfdXRfdmFsaWRfYWNwaV9jaGFyYWN0ZXIgKAorCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfdXRfc3RydG91bDY0ICgKKwljaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICpzdHJpbmcsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlLAorCWFjcGlfaW50ZWdlciAgICAgICAgICAgICAgICAgICAgKnJldF9pbnRlZ2VyKTsKKworLyogVmFsdWVzIGZvciBCYXNlIGFib3ZlICgxNj1IZXgsIDEwPURlY2ltYWwpICovCisKKyNkZWZpbmUgQUNQSV9BTllfQkFTRSAgICAgICAgMAorCisjaWZkZWYgQUNQSV9GVVRVUkVfVVNBR0UKK2NoYXIgKgorYWNwaV91dF9zdHJ1cHIgKAorCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnNyY19zdHJpbmcpOworI2VuZGlmCisKK3U4ICoKK2FjcGlfdXRfZ2V0X3Jlc291cmNlX2VuZF90YWcgKAorCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgKm9ial9kZXNjKTsKKwordTgKK2FjcGlfdXRfZ2VuZXJhdGVfY2hlY2tzdW0gKAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmJ1ZmZlciwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCk7CisKK3UzMgorYWNwaV91dF9kd29yZF9ieXRlX3N3YXAgKAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUpOworCit2b2lkCithY3BpX3V0X3NldF9pbnRlZ2VyX3dpZHRoICgKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldmlzaW9uKTsKKworI2lmZGVmIEFDUElfREVCVUdfT1VUUFVUCit2b2lkCithY3BpX3V0X2Rpc3BsYXlfaW5pdF9wYXRobmFtZSAoCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLAorCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICAgICAgKm9ial9oYW5kbGUsCisJY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcGF0aCk7CisKKyNlbmRpZgorCisKKy8qCisgKiBVdGFsbG9jIC0gbWVtb3J5IGFsbG9jYXRpb24gYW5kIG9iamVjdCBjYWNoaW5nCisgKi8KKwordm9pZCAqCithY3BpX3V0X2FjcXVpcmVfZnJvbV9jYWNoZSAoCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0X2lkKTsKKwordm9pZAorYWNwaV91dF9yZWxlYXNlX3RvX2NhY2hlICgKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RfaWQsCisJdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqb2JqZWN0KTsKKworI2lmZGVmIEFDUElfRU5BQkxFX09CSkVDVF9DQUNIRQordm9pZAorYWNwaV91dF9kZWxldGVfZ2VuZXJpY19jYWNoZSAoCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0X2lkKTsKKyNlbmRpZgorCithY3BpX3N0YXR1cworYWNwaV91dF92YWxpZGF0ZV9idWZmZXIgKAorCXN0cnVjdCBhY3BpX2J1ZmZlciAgICAgICAgICAgICAgKmJ1ZmZlcik7CisKK2FjcGlfc3RhdHVzCithY3BpX3V0X2luaXRpYWxpemVfYnVmZmVyICgKKwlzdHJ1Y3QgYWNwaV9idWZmZXIgICAgICAgICAgICAgICpidWZmZXIsCisJYWNwaV9zaXplICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZF9sZW5ndGgpOworCisKKy8qIE1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9ucyAqLworCit2b2lkICoKK2FjcGlfdXRfYWxsb2NhdGUgKAorCWFjcGlfc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudCwKKwljaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICptb2R1bGUsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lKTsKKwordm9pZCAqCithY3BpX3V0X2NhbGxvY2F0ZSAoCisJYWNwaV9zaXplICAgICAgICAgICAgICAgICAgICAgICBzaXplLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LAorCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm1vZHVsZSwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUpOworCisKKyNpZmRlZiBBQ1BJX0RCR19UUkFDS19BTExPQ0FUSU9OUworCit2b2lkICoKK2FjcGlfdXRfYWxsb2NhdGVfYW5kX3RyYWNrICgKKwlhY3BpX3NpemUgICAgICAgICAgICAgICAgICAgICAgIHNpemUsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQsCisJY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbW9kdWxlLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSk7CisKK3ZvaWQgKgorYWNwaV91dF9jYWxsb2NhdGVfYW5kX3RyYWNrICgKKwlhY3BpX3NpemUgICAgICAgICAgICAgICAgICAgICAgIHNpemUsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQsCisJY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbW9kdWxlLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSk7CisKK3ZvaWQKK2FjcGlfdXRfZnJlZV9hbmRfdHJhY2sgKAorCXZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFkZHJlc3MsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQsCisJY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbW9kdWxlLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSk7CisKK3N0cnVjdCBhY3BpX2RlYnVnX21lbV9ibG9jayAqCithY3BpX3V0X2ZpbmRfYWxsb2NhdGlvbiAoCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0X2lkLAorCXZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFsbG9jYXRpb24pOworCithY3BpX3N0YXR1cworYWNwaV91dF90cmFja19hbGxvY2F0aW9uICgKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RfaWQsCisJc3RydWN0IGFjcGlfZGVidWdfbWVtX2Jsb2NrICAgICAqYWRkcmVzcywKKwlhY3BpX3NpemUgICAgICAgICAgICAgICAgICAgICAgIHNpemUsCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvY190eXBlLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LAorCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm1vZHVsZSwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUpOworCithY3BpX3N0YXR1cworYWNwaV91dF9yZW1vdmVfYWxsb2NhdGlvbiAoCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0X2lkLAorCXN0cnVjdCBhY3BpX2RlYnVnX21lbV9ibG9jayAgICAgKmFkZHJlc3MsCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQsCisJY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbW9kdWxlLAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSk7CisKKyNpZmRlZiBBQ1BJX0ZVVFVSRV9VU0FHRQordm9pZAorYWNwaV91dF9kdW1wX2FsbG9jYXRpb25faW5mbyAoCisJdm9pZCk7CisjZW5kaWYKKwordm9pZAorYWNwaV91dF9kdW1wX2FsbG9jYXRpb25zICgKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudCwKKwljaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICptb2R1bGUpOworI2VuZGlmCisKKworI2VuZGlmIC8qIF9BQ1VUSUxTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hbWxjb2RlLmggYi9pbmNsdWRlL2FjcGkvYW1sY29kZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlYzUzOGUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FjcGkvYW1sY29kZS5oCkBAIC0wLDAgKzEsNTE4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogTmFtZTogYW1sY29kZS5oIC0gRGVmaW5pdGlvbnMgZm9yIEFNTCwgYXMgaW5jbHVkZWQgaW4gImRlZmluaXRpb24gYmxvY2tzIgorICogICAgICAgICAgICAgICAgICAgRGVjbGFyYXRpb25zIGFuZCBkZWZpbml0aW9ucyBjb250YWluZWQgaGVyZWluIGFyZSBkZXJpdmVkCisgKiAgICAgICAgICAgICAgICAgICBkaXJlY3RseSBmcm9tIHRoZSBBQ1BJIHNwZWNpZmljYXRpb24uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwNSwgUi4gQnlyb24gTW9vcmUKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciwKKyAqICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIGF0IG1pbmltdW0gYSBkaXNjbGFpbWVyCisgKiAgICBzdWJzdGFudGlhbGx5IHNpbWlsYXIgdG8gdGhlICJOTyBXQVJSQU5UWSIgZGlzY2xhaW1lciBiZWxvdworICogICAgKCJEaXNjbGFpbWVyIikgYW5kIGFueSByZWRpc3RyaWJ1dGlvbiBtdXN0IGJlIGNvbmRpdGlvbmVkIHVwb24KKyAqICAgIGluY2x1ZGluZyBhIHN1YnN0YW50aWFsbHkgc2ltaWxhciBEaXNjbGFpbWVyIHJlcXVpcmVtZW50IGZvciBmdXJ0aGVyCisgKiAgICBiaW5hcnkgcmVkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lcyBvZiB0aGUgYWJvdmUtbGlzdGVkIGNvcHlyaWdodCBob2xkZXJzIG5vciB0aGUgbmFtZXMKKyAqICAgIG9mIGFueSBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGlzIHNvZnR3YXJlIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoIkdQTCIpIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogTk8gV0FSUkFOVFkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HCisgKiBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKyAqLworCisjaWZuZGVmIF9fQU1MQ09ERV9IX18KKyNkZWZpbmUgX19BTUxDT0RFX0hfXworCisvKiBwcmltYXJ5IG9wY29kZXMgKi8KKworI2RlZmluZSBBTUxfTlVMTF9DSEFSICAgICAgICAgICAgICAgKHUxNikgMHgwMAorCisjZGVmaW5lIEFNTF9aRVJPX09QICAgICAgICAgICAgICAgICAodTE2KSAweDAwCisjZGVmaW5lIEFNTF9PTkVfT1AgICAgICAgICAgICAgICAgICAodTE2KSAweDAxCisjZGVmaW5lIEFNTF9VTkFTU0lHTkVEICAgICAgICAgICAgICAodTE2KSAweDAyCisjZGVmaW5lIEFNTF9BTElBU19PUCAgICAgICAgICAgICAgICAodTE2KSAweDA2CisjZGVmaW5lIEFNTF9OQU1FX09QICAgICAgICAgICAgICAgICAodTE2KSAweDA4CisjZGVmaW5lIEFNTF9CWVRFX09QICAgICAgICAgICAgICAgICAodTE2KSAweDBhCisjZGVmaW5lIEFNTF9XT1JEX09QICAgICAgICAgICAgICAgICAodTE2KSAweDBiCisjZGVmaW5lIEFNTF9EV09SRF9PUCAgICAgICAgICAgICAgICAodTE2KSAweDBjCisjZGVmaW5lIEFNTF9TVFJJTkdfT1AgICAgICAgICAgICAgICAodTE2KSAweDBkCisjZGVmaW5lIEFNTF9RV09SRF9PUCAgICAgICAgICAgICAgICAodTE2KSAweDBlICAgICAvKiBBQ1BJIDIuMCAqLworI2RlZmluZSBBTUxfU0NPUEVfT1AgICAgICAgICAgICAgICAgKHUxNikgMHgxMAorI2RlZmluZSBBTUxfQlVGRkVSX09QICAgICAgICAgICAgICAgKHUxNikgMHgxMQorI2RlZmluZSBBTUxfUEFDS0FHRV9PUCAgICAgICAgICAgICAgKHUxNikgMHgxMgorI2RlZmluZSBBTUxfVkFSX1BBQ0tBR0VfT1AgICAgICAgICAgKHUxNikgMHgxMyAgICAgLyogQUNQSSAyLjAgKi8KKyNkZWZpbmUgQU1MX01FVEhPRF9PUCAgICAgICAgICAgICAgICh1MTYpIDB4MTQKKyNkZWZpbmUgQU1MX0RVQUxfTkFNRV9QUkVGSVggICAgICAgICh1MTYpIDB4MmUKKyNkZWZpbmUgQU1MX01VTFRJX05BTUVfUFJFRklYX09QICAgICh1MTYpIDB4MmYKKyNkZWZpbmUgQU1MX05BTUVfQ0hBUl9TVUJTRVEgICAgICAgICh1MTYpIDB4MzAKKyNkZWZpbmUgQU1MX05BTUVfQ0hBUl9GSVJTVCAgICAgICAgICh1MTYpIDB4NDEKKyNkZWZpbmUgQU1MX09QX1BSRUZJWCAgICAgICAgICAgICAgICh1MTYpIDB4NWIKKyNkZWZpbmUgQU1MX1JPT1RfUFJFRklYICAgICAgICAgICAgICh1MTYpIDB4NWMKKyNkZWZpbmUgQU1MX1BBUkVOVF9QUkVGSVggICAgICAgICAgICh1MTYpIDB4NWUKKyNkZWZpbmUgQU1MX0xPQ0FMX09QICAgICAgICAgICAgICAgICh1MTYpIDB4NjAKKyNkZWZpbmUgQU1MX0xPQ0FMMCAgICAgICAgICAgICAgICAgICh1MTYpIDB4NjAKKyNkZWZpbmUgQU1MX0xPQ0FMMSAgICAgICAgICAgICAgICAgICh1MTYpIDB4NjEKKyNkZWZpbmUgQU1MX0xPQ0FMMiAgICAgICAgICAgICAgICAgICh1MTYpIDB4NjIKKyNkZWZpbmUgQU1MX0xPQ0FMMyAgICAgICAgICAgICAgICAgICh1MTYpIDB4NjMKKyNkZWZpbmUgQU1MX0xPQ0FMNCAgICAgICAgICAgICAgICAgICh1MTYpIDB4NjQKKyNkZWZpbmUgQU1MX0xPQ0FMNSAgICAgICAgICAgICAgICAgICh1MTYpIDB4NjUKKyNkZWZpbmUgQU1MX0xPQ0FMNiAgICAgICAgICAgICAgICAgICh1MTYpIDB4NjYKKyNkZWZpbmUgQU1MX0xPQ0FMNyAgICAgICAgICAgICAgICAgICh1MTYpIDB4NjcKKyNkZWZpbmUgQU1MX0FSR19PUCAgICAgICAgICAgICAgICAgICh1MTYpIDB4NjgKKyNkZWZpbmUgQU1MX0FSRzAgICAgICAgICAgICAgICAgICAgICh1MTYpIDB4NjgKKyNkZWZpbmUgQU1MX0FSRzEgICAgICAgICAgICAgICAgICAgICh1MTYpIDB4NjkKKyNkZWZpbmUgQU1MX0FSRzIgICAgICAgICAgICAgICAgICAgICh1MTYpIDB4NmEKKyNkZWZpbmUgQU1MX0FSRzMgICAgICAgICAgICAgICAgICAgICh1MTYpIDB4NmIKKyNkZWZpbmUgQU1MX0FSRzQgICAgICAgICAgICAgICAgICAgICh1MTYpIDB4NmMKKyNkZWZpbmUgQU1MX0FSRzUgICAgICAgICAgICAgICAgICAgICh1MTYpIDB4NmQKKyNkZWZpbmUgQU1MX0FSRzYgICAgICAgICAgICAgICAgICAgICh1MTYpIDB4NmUKKyNkZWZpbmUgQU1MX1NUT1JFX09QICAgICAgICAgICAgICAgICh1MTYpIDB4NzAKKyNkZWZpbmUgQU1MX1JFRl9PRl9PUCAgICAgICAgICAgICAgICh1MTYpIDB4NzEKKyNkZWZpbmUgQU1MX0FERF9PUCAgICAgICAgICAgICAgICAgICh1MTYpIDB4NzIKKyNkZWZpbmUgQU1MX0NPTkNBVF9PUCAgICAgICAgICAgICAgICh1MTYpIDB4NzMKKyNkZWZpbmUgQU1MX1NVQlRSQUNUX09QICAgICAgICAgICAgICh1MTYpIDB4NzQKKyNkZWZpbmUgQU1MX0lOQ1JFTUVOVF9PUCAgICAgICAgICAgICh1MTYpIDB4NzUKKyNkZWZpbmUgQU1MX0RFQ1JFTUVOVF9PUCAgICAgICAgICAgICh1MTYpIDB4NzYKKyNkZWZpbmUgQU1MX01VTFRJUExZX09QICAgICAgICAgICAgICh1MTYpIDB4NzcKKyNkZWZpbmUgQU1MX0RJVklERV9PUCAgICAgICAgICAgICAgICh1MTYpIDB4NzgKKyNkZWZpbmUgQU1MX1NISUZUX0xFRlRfT1AgICAgICAgICAgICh1MTYpIDB4NzkKKyNkZWZpbmUgQU1MX1NISUZUX1JJR0hUX09QICAgICAgICAgICh1MTYpIDB4N2EKKyNkZWZpbmUgQU1MX0JJVF9BTkRfT1AgICAgICAgICAgICAgICh1MTYpIDB4N2IKKyNkZWZpbmUgQU1MX0JJVF9OQU5EX09QICAgICAgICAgICAgICh1MTYpIDB4N2MKKyNkZWZpbmUgQU1MX0JJVF9PUl9PUCAgICAgICAgICAgICAgICh1MTYpIDB4N2QKKyNkZWZpbmUgQU1MX0JJVF9OT1JfT1AgICAgICAgICAgICAgICh1MTYpIDB4N2UKKyNkZWZpbmUgQU1MX0JJVF9YT1JfT1AgICAgICAgICAgICAgICh1MTYpIDB4N2YKKyNkZWZpbmUgQU1MX0JJVF9OT1RfT1AgICAgICAgICAgICAgICh1MTYpIDB4ODAKKyNkZWZpbmUgQU1MX0ZJTkRfU0VUX0xFRlRfQklUX09QICAgICh1MTYpIDB4ODEKKyNkZWZpbmUgQU1MX0ZJTkRfU0VUX1JJR0hUX0JJVF9PUCAgICh1MTYpIDB4ODIKKyNkZWZpbmUgQU1MX0RFUkVGX09GX09QICAgICAgICAgICAgICh1MTYpIDB4ODMKKyNkZWZpbmUgQU1MX0NPTkNBVF9SRVNfT1AgICAgICAgICAgICh1MTYpIDB4ODQgICAgIC8qIEFDUEkgMi4wICovCisjZGVmaW5lIEFNTF9NT0RfT1AgICAgICAgICAgICAgICAgICAodTE2KSAweDg1ICAgICAvKiBBQ1BJIDIuMCAqLworI2RlZmluZSBBTUxfTk9USUZZX09QICAgICAgICAgICAgICAgKHUxNikgMHg4NgorI2RlZmluZSBBTUxfU0laRV9PRl9PUCAgICAgICAgICAgICAgKHUxNikgMHg4NworI2RlZmluZSBBTUxfSU5ERVhfT1AgICAgICAgICAgICAgICAgKHUxNikgMHg4OAorI2RlZmluZSBBTUxfTUFUQ0hfT1AgICAgICAgICAgICAgICAgKHUxNikgMHg4OQorI2RlZmluZSBBTUxfQ1JFQVRFX0RXT1JEX0ZJRUxEX09QICAgKHUxNikgMHg4YQorI2RlZmluZSBBTUxfQ1JFQVRFX1dPUkRfRklFTERfT1AgICAgKHUxNikgMHg4YgorI2RlZmluZSBBTUxfQ1JFQVRFX0JZVEVfRklFTERfT1AgICAgKHUxNikgMHg4YworI2RlZmluZSBBTUxfQ1JFQVRFX0JJVF9GSUVMRF9PUCAgICAgKHUxNikgMHg4ZAorI2RlZmluZSBBTUxfVFlQRV9PUCAgICAgICAgICAgICAgICAgKHUxNikgMHg4ZQorI2RlZmluZSBBTUxfQ1JFQVRFX1FXT1JEX0ZJRUxEX09QICAgKHUxNikgMHg4ZiAgICAgLyogQUNQSSAyLjAgKi8KKyNkZWZpbmUgQU1MX0xBTkRfT1AgICAgICAgICAgICAgICAgICh1MTYpIDB4OTAKKyNkZWZpbmUgQU1MX0xPUl9PUCAgICAgICAgICAgICAgICAgICh1MTYpIDB4OTEKKyNkZWZpbmUgQU1MX0xOT1RfT1AgICAgICAgICAgICAgICAgICh1MTYpIDB4OTIKKyNkZWZpbmUgQU1MX0xFUVVBTF9PUCAgICAgICAgICAgICAgICh1MTYpIDB4OTMKKyNkZWZpbmUgQU1MX0xHUkVBVEVSX09QICAgICAgICAgICAgICh1MTYpIDB4OTQKKyNkZWZpbmUgQU1MX0xMRVNTX09QICAgICAgICAgICAgICAgICh1MTYpIDB4OTUKKyNkZWZpbmUgQU1MX1RPX0JVRkZFUl9PUCAgICAgICAgICAgICh1MTYpIDB4OTYgICAgIC8qIEFDUEkgMi4wICovCisjZGVmaW5lIEFNTF9UT19ERUNTVFJJTkdfT1AgICAgICAgICAodTE2KSAweDk3ICAgICAvKiBBQ1BJIDIuMCAqLworI2RlZmluZSBBTUxfVE9fSEVYU1RSSU5HX09QICAgICAgICAgKHUxNikgMHg5OCAgICAgLyogQUNQSSAyLjAgKi8KKyNkZWZpbmUgQU1MX1RPX0lOVEVHRVJfT1AgICAgICAgICAgICh1MTYpIDB4OTkgICAgIC8qIEFDUEkgMi4wICovCisjZGVmaW5lIEFNTF9UT19TVFJJTkdfT1AgICAgICAgICAgICAodTE2KSAweDljICAgICAvKiBBQ1BJIDIuMCAqLworI2RlZmluZSBBTUxfQ09QWV9PUCAgICAgICAgICAgICAgICAgKHUxNikgMHg5ZCAgICAgLyogQUNQSSAyLjAgKi8KKyNkZWZpbmUgQU1MX01JRF9PUCAgICAgICAgICAgICAgICAgICh1MTYpIDB4OWUgICAgIC8qIEFDUEkgMi4wICovCisjZGVmaW5lIEFNTF9DT05USU5VRV9PUCAgICAgICAgICAgICAodTE2KSAweDlmICAgICAvKiBBQ1BJIDIuMCAqLworI2RlZmluZSBBTUxfSUZfT1AgICAgICAgICAgICAgICAgICAgKHUxNikgMHhhMAorI2RlZmluZSBBTUxfRUxTRV9PUCAgICAgICAgICAgICAgICAgKHUxNikgMHhhMQorI2RlZmluZSBBTUxfV0hJTEVfT1AgICAgICAgICAgICAgICAgKHUxNikgMHhhMgorI2RlZmluZSBBTUxfTk9PUF9PUCAgICAgICAgICAgICAgICAgKHUxNikgMHhhMworI2RlZmluZSBBTUxfUkVUVVJOX09QICAgICAgICAgICAgICAgKHUxNikgMHhhNAorI2RlZmluZSBBTUxfQlJFQUtfT1AgICAgICAgICAgICAgICAgKHUxNikgMHhhNQorI2RlZmluZSBBTUxfQlJFQUtfUE9JTlRfT1AgICAgICAgICAgKHUxNikgMHhjYworI2RlZmluZSBBTUxfT05FU19PUCAgICAgICAgICAgICAgICAgKHUxNikgMHhmZgorCisvKiBwcmVmaXhlZCBvcGNvZGVzICovCisKKyNkZWZpbmUgQU1MX0VYVE9QICAgICAgICAgICAgICAgICAgICh1MTYpIDB4MDA1YgorCisKKyNkZWZpbmUgQU1MX01VVEVYX09QICAgICAgICAgICAgICAgICh1MTYpIDB4NWIwMQorI2RlZmluZSBBTUxfRVZFTlRfT1AgICAgICAgICAgICAgICAgKHUxNikgMHg1YjAyCisjZGVmaW5lIEFNTF9TSElGVF9SSUdIVF9CSVRfT1AgICAgICAodTE2KSAweDViMTAKKyNkZWZpbmUgQU1MX1NISUZUX0xFRlRfQklUX09QICAgICAgICh1MTYpIDB4NWIxMQorI2RlZmluZSBBTUxfQ09ORF9SRUZfT0ZfT1AgICAgICAgICAgKHUxNikgMHg1YjEyCisjZGVmaW5lIEFNTF9DUkVBVEVfRklFTERfT1AgICAgICAgICAodTE2KSAweDViMTMKKyNkZWZpbmUgQU1MX0xPQURfVEFCTEVfT1AgICAgICAgICAgICh1MTYpIDB4NWIxZiAgICAgLyogQUNQSSAyLjAgKi8KKyNkZWZpbmUgQU1MX0xPQURfT1AgICAgICAgICAgICAgICAgICh1MTYpIDB4NWIyMAorI2RlZmluZSBBTUxfU1RBTExfT1AgICAgICAgICAgICAgICAgKHUxNikgMHg1YjIxCisjZGVmaW5lIEFNTF9TTEVFUF9PUCAgICAgICAgICAgICAgICAodTE2KSAweDViMjIKKyNkZWZpbmUgQU1MX0FDUVVJUkVfT1AgICAgICAgICAgICAgICh1MTYpIDB4NWIyMworI2RlZmluZSBBTUxfU0lHTkFMX09QICAgICAgICAgICAgICAgKHUxNikgMHg1YjI0CisjZGVmaW5lIEFNTF9XQUlUX09QICAgICAgICAgICAgICAgICAodTE2KSAweDViMjUKKyNkZWZpbmUgQU1MX1JFU0VUX09QICAgICAgICAgICAgICAgICh1MTYpIDB4NWIyNgorI2RlZmluZSBBTUxfUkVMRUFTRV9PUCAgICAgICAgICAgICAgKHUxNikgMHg1YjI3CisjZGVmaW5lIEFNTF9GUk9NX0JDRF9PUCAgICAgICAgICAgICAodTE2KSAweDViMjgKKyNkZWZpbmUgQU1MX1RPX0JDRF9PUCAgICAgICAgICAgICAgICh1MTYpIDB4NWIyOQorI2RlZmluZSBBTUxfVU5MT0FEX09QICAgICAgICAgICAgICAgKHUxNikgMHg1YjJhCisjZGVmaW5lIEFNTF9SRVZJU0lPTl9PUCAgICAgICAgICAgICAodTE2KSAweDViMzAKKyNkZWZpbmUgQU1MX0RFQlVHX09QICAgICAgICAgICAgICAgICh1MTYpIDB4NWIzMQorI2RlZmluZSBBTUxfRkFUQUxfT1AgICAgICAgICAgICAgICAgKHUxNikgMHg1YjMyCisjZGVmaW5lIEFNTF9USU1FUl9PUCAgICAgICAgICAgICAgICAodTE2KSAweDViMzMgICAgIC8qIEFDUEkgMy4wICovCisjZGVmaW5lIEFNTF9SRUdJT05fT1AgICAgICAgICAgICAgICAodTE2KSAweDViODAKKyNkZWZpbmUgQU1MX0ZJRUxEX09QICAgICAgICAgICAgICAgICh1MTYpIDB4NWI4MQorI2RlZmluZSBBTUxfREVWSUNFX09QICAgICAgICAgICAgICAgKHUxNikgMHg1YjgyCisjZGVmaW5lIEFNTF9QUk9DRVNTT1JfT1AgICAgICAgICAgICAodTE2KSAweDViODMKKyNkZWZpbmUgQU1MX1BPV0VSX1JFU19PUCAgICAgICAgICAgICh1MTYpIDB4NWI4NAorI2RlZmluZSBBTUxfVEhFUk1BTF9aT05FX09QICAgICAgICAgKHUxNikgMHg1Yjg1CisjZGVmaW5lIEFNTF9JTkRFWF9GSUVMRF9PUCAgICAgICAgICAodTE2KSAweDViODYKKyNkZWZpbmUgQU1MX0JBTktfRklFTERfT1AgICAgICAgICAgICh1MTYpIDB4NWI4NworI2RlZmluZSBBTUxfREFUQV9SRUdJT05fT1AgICAgICAgICAgKHUxNikgMHg1Yjg4ICAgICAvKiBBQ1BJIDIuMCAqLworCisKKy8qIEJvZ3VzIG9wY29kZXMgKHRoZXkgYXJlIGFjdHVhbGx5IHR3byBzZXBhcmF0ZSBvcGNvZGVzKSAqLworCisjZGVmaW5lIEFNTF9MR1JFQVRFUkVRVUFMX09QICAgICAgICAodTE2KSAweDkyOTUKKyNkZWZpbmUgQU1MX0xMRVNTRVFVQUxfT1AgICAgICAgICAgICh1MTYpIDB4OTI5NAorI2RlZmluZSBBTUxfTE5PVEVRVUFMX09QICAgICAgICAgICAgKHUxNikgMHg5MjkzCisKKworLyoKKyAqIEludGVybmFsIG9wY29kZXMKKyAqIFVzZSBvbmx5ICJVbmtub3duIiBBTUwgb3Bjb2RlcywgZG9uJ3QgYXR0ZW1wdCB0byB1c2UKKyAqIGFueSB2YWxpZCBBQ1BJIEFTQ0lJIHZhbHVlcyAoQS1aLCAwLTksICctJykKKyAqLworCisjZGVmaW5lIEFNTF9JTlRfTkFNRVBBVEhfT1AgICAgICAgICAodTE2KSAweDAwMmQKKyNkZWZpbmUgQU1MX0lOVF9OQU1FREZJRUxEX09QICAgICAgICh1MTYpIDB4MDAzMAorI2RlZmluZSBBTUxfSU5UX1JFU0VSVkVERklFTERfT1AgICAgKHUxNikgMHgwMDMxCisjZGVmaW5lIEFNTF9JTlRfQUNDRVNTRklFTERfT1AgICAgICAodTE2KSAweDAwMzIKKyNkZWZpbmUgQU1MX0lOVF9CWVRFTElTVF9PUCAgICAgICAgICh1MTYpIDB4MDAzMworI2RlZmluZSBBTUxfSU5UX1NUQVRJQ1NUUklOR19PUCAgICAgKHUxNikgMHgwMDM0CisjZGVmaW5lIEFNTF9JTlRfTUVUSE9EQ0FMTF9PUCAgICAgICAodTE2KSAweDAwMzUKKyNkZWZpbmUgQU1MX0lOVF9SRVRVUk5fVkFMVUVfT1AgICAgICh1MTYpIDB4MDAzNgorI2RlZmluZSBBTUxfSU5UX0VWQUxfU1VCVFJFRV9PUCAgICAgKHUxNikgMHgwMDM3CisKKworI2RlZmluZSBBUkdfTk9ORSAgICAgICAgICAgICAgICAgICAgMHgwCisKKy8qCisgKiBBcmd1bWVudCB0eXBlcyBmb3IgdGhlIEFNTCBQYXJzZXIKKyAqIEVhY2ggZmllbGQgaW4gdGhlIGFyZ190eXBlcyB1MzIgaXMgNSBiaXRzLCBhbGxvd2luZyBmb3IgYSBtYXhpbXVtIG9mIDYgYXJndW1lbnRzLgorICogVGhlcmUgY2FuIGJlIHVwIHRvIDMxIHVuaXF1ZSBhcmd1bWVudCB0eXBlcworICogWmVybyBpcyByZXNlcnZlZCBhcyBlbmQtb2YtbGlzdCBpbmRpY2F0b3IKKyAqLworCisjZGVmaW5lIEFSR1BfQllURURBVEEgICAgICAgICAgICAgICAweDAxCisjZGVmaW5lIEFSR1BfQllURUxJU1QgICAgICAgICAgICAgICAweDAyCisjZGVmaW5lIEFSR1BfQ0hBUkxJU1QgICAgICAgICAgICAgICAweDAzCisjZGVmaW5lIEFSR1BfREFUQU9CSiAgICAgICAgICAgICAgICAweDA0CisjZGVmaW5lIEFSR1BfREFUQU9CSkxJU1QgICAgICAgICAgICAweDA1CisjZGVmaW5lIEFSR1BfRFdPUkREQVRBICAgICAgICAgICAgICAweDA2CisjZGVmaW5lIEFSR1BfRklFTERMSVNUICAgICAgICAgICAgICAweDA3CisjZGVmaW5lIEFSR1BfTkFNRSAgICAgICAgICAgICAgICAgICAweDA4CisjZGVmaW5lIEFSR1BfTkFNRVNUUklORyAgICAgICAgICAgICAweDA5CisjZGVmaW5lIEFSR1BfT0JKTElTVCAgICAgICAgICAgICAgICAweDBBCisjZGVmaW5lIEFSR1BfUEtHTEVOR1RIICAgICAgICAgICAgICAweDBCCisjZGVmaW5lIEFSR1BfU1VQRVJOQU1FICAgICAgICAgICAgICAweDBDCisjZGVmaW5lIEFSR1BfVEFSR0VUICAgICAgICAgICAgICAgICAweDBECisjZGVmaW5lIEFSR1BfVEVSTUFSRyAgICAgICAgICAgICAgICAweDBFCisjZGVmaW5lIEFSR1BfVEVSTUxJU1QgICAgICAgICAgICAgICAweDBGCisjZGVmaW5lIEFSR1BfV09SRERBVEEgICAgICAgICAgICAgICAweDEwCisjZGVmaW5lIEFSR1BfUVdPUkREQVRBICAgICAgICAgICAgICAweDExCisjZGVmaW5lIEFSR1BfU0lNUExFTkFNRSAgICAgICAgICAgICAweDEyCisKKy8qCisgKiBSZXNvbHZlZCBhcmd1bWVudCB0eXBlcyBmb3IgdGhlIEFNTCBJbnRlcnByZXRlcgorICogRWFjaCBmaWVsZCBpbiB0aGUgYXJnX3R5cGVzIHUzMiBpcyA1IGJpdHMsIGFsbG93aW5nIGZvciBhIG1heGltdW0gb2YgNiBhcmd1bWVudHMuCisgKiBUaGVyZSBjYW4gYmUgdXAgdG8gMzEgdW5pcXVlIGFyZ3VtZW50IHR5cGVzICgwIGlzIGVuZC1vZi1hcmctbGlzdCBpbmRpY2F0b3IpCisgKgorICogTm90ZTE6IFRoZXNlIHZhbHVlcyBhcmUgY29tcGxldGVseSBpbmRlcGVuZGVudCBmcm9tIHRoZSBBQ1BJX1RZUEVzCisgKiAgICAgICAgaS5lLiwgQVJHSV9JTlRFR0VSICE9IEFDUElfVFlQRV9JTlRFR0VSCisgKgorICogTm90ZTI6IElmIGFuZCB3aGVuIDUgYml0cyBiZWNvbWVzIGluc3VmZmljaWVudCwgaXQgd291bGQgcHJvYmFibHkgYmUgYmVzdAorICogdG8gY29udmVydCB0byBhIDYtYnl0ZSBhcnJheSBvZiBhcmd1bWVudCB0eXBlcywgYWxsb3dpbmcgOCBiaXRzIHBlciBhcmd1bWVudC4KKyAqLworCisvKiBTaW5nbGUsIHNpbXBsZSB0eXBlcyAqLworCisjZGVmaW5lIEFSR0lfQU5ZVFlQRSAgICAgICAgICAgICAgICAweDAxICAgIC8qIERvbid0IGNhcmUgKi8KKyNkZWZpbmUgQVJHSV9QQUNLQUdFICAgICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgQVJHSV9FVkVOVCAgICAgICAgICAgICAgICAgIDB4MDMKKyNkZWZpbmUgQVJHSV9NVVRFWCAgICAgICAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgQVJHSV9EREJIQU5ETEUgICAgICAgICAgICAgIDB4MDUKKworLyogSW50ZXJjaGFuZ2VhYmxlIHR5cGVzICh2aWEgaW1wbGljaXQgY29udmVyc2lvbikgKi8KKworI2RlZmluZSBBUkdJX0lOVEVHRVIgICAgICAgICAgICAgICAgMHgwNgorI2RlZmluZSBBUkdJX1NUUklORyAgICAgICAgICAgICAgICAgMHgwNworI2RlZmluZSBBUkdJX0JVRkZFUiAgICAgICAgICAgICAgICAgMHgwOAorI2RlZmluZSBBUkdJX0JVRkZFUl9PUl9TVFJJTkcgICAgICAgMHgwOSAgICAvKiBVc2VkIGJ5IE1JRCBvcCBvbmx5ICovCisjZGVmaW5lIEFSR0lfQ09NUFVURURBVEEgICAgICAgICAgICAweDBBICAgIC8qIEJ1ZmZlciwgU3RyaW5nLCBvciBJbnRlZ2VyICovCisKKy8qIFJlZmVyZW5jZSBvYmplY3RzICovCisKKyNkZWZpbmUgQVJHSV9JTlRFR0VSX1JFRiAgICAgICAgICAgIDB4MEIKKyNkZWZpbmUgQVJHSV9PQkpFQ1RfUkVGICAgICAgICAgICAgIDB4MEMKKyNkZWZpbmUgQVJHSV9ERVZJQ0VfUkVGICAgICAgICAgICAgIDB4MEQKKyNkZWZpbmUgQVJHSV9SRUZFUkVOQ0UgICAgICAgICAgICAgIDB4MEUKKyNkZWZpbmUgQVJHSV9UQVJHRVRSRUYgICAgICAgICAgICAgIDB4MEYgICAgLyogVGFyZ2V0LCBzdWJqZWN0IHRvIGltcGxpY2l0IGNvbnZlcnNpb24gKi8KKyNkZWZpbmUgQVJHSV9GSVhFRF9UQVJHRVQgICAgICAgICAgIDB4MTAgICAgLyogVGFyZ2V0LCBubyBpbXBsaWNpdCBjb252ZXJzaW9uICovCisjZGVmaW5lIEFSR0lfU0lNUExFX1RBUkdFVCAgICAgICAgICAweDExICAgIC8qIE5hbWUsIExvY2FsLCBBcmcgLS0gbm8gaW1wbGljaXQgY29udmVyc2lvbiAqLworCisvKiBNdWx0aXBsZS9jb21wbGV4IHR5cGVzICovCisKKyNkZWZpbmUgQVJHSV9EQVRBT0JKRUNUICAgICAgICAgICAgIDB4MTIgICAgLyogQnVmZmVyLCBTdHJpbmcsIHBhY2thZ2Ugb3IgcmVmZXJlbmNlIHRvIGEgTm9kZSAtIFVzZWQgb25seSBieSBzaXplX29mIG9wZXJhdG9yKi8KKyNkZWZpbmUgQVJHSV9DT01QTEVYT0JKICAgICAgICAgICAgIDB4MTMgICAgLyogQnVmZmVyLCBTdHJpbmcsIG9yIHBhY2thZ2UgKFVzZWQgYnkgSU5ERVggb3Agb25seSkgKi8KKyNkZWZpbmUgQVJHSV9SRUZfT1JfU1RSSU5HICAgICAgICAgIDB4MTQgICAgLyogUmVmZXJlbmNlIG9yIFN0cmluZyAoVXNlZCBieSBERVJFRk9GIG9wIG9ubHkpICovCisjZGVmaW5lIEFSR0lfUkVHSU9OX09SX0ZJRUxEICAgICAgICAweDE1ICAgIC8qIFVzZWQgYnkgTE9BRCBvcCBvbmx5ICovCisjZGVmaW5lIEFSR0lfREFUQVJFRk9CSiAgICAgICAgICAgICAweDE2CisKKy8qIE5vdGU6IHR5cGVzIGFib3ZlIGNhbiBleHBhbmQgdG8gMHgxRiBtYXhpbXVtICovCisKKyNkZWZpbmUgQVJHSV9JTlZBTElEX09QQ09ERSAgICAgICAgIDB4RkZGRkZGRkYKKworCisvKgorICogaGFzaCBvZmZzZXRzCisgKi8KKyNkZWZpbmUgQU1MX0VYVE9QX0hBU0hfT0ZGU0VUICAgICAgIDIyCisjZGVmaW5lIEFNTF9MTk9UX0hBU0hfT0ZGU0VUICAgICAgICAxOQorCisKKy8qCisgKiBvcGNvZGUgZ3JvdXBzIGFuZCB0eXBlcworICovCisKKyNkZWZpbmUgT1BHUlBfTkFNRUQgICAgICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgT1BHUlBfRklFTEQgICAgICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgT1BHUlBfQllURUxJU1QgICAgICAgICAgICAgIDB4MDQKKworCisvKgorICogT3Bjb2RlIGluZm9ybWF0aW9uCisgKi8KKworLyogT3Bjb2RlIGZsYWdzICovCisKKyNkZWZpbmUgQU1MX0xPR0lDQUwgICAgICAgICAgICAgICAgIDB4MDAwMQorI2RlZmluZSBBTUxfTE9HSUNBTF9OVU1FUklDICAgICAgICAgMHgwMDAyCisjZGVmaW5lIEFNTF9NQVRIICAgICAgICAgICAgICAgICAgICAweDAwMDQKKyNkZWZpbmUgQU1MX0NSRUFURSAgICAgICAgICAgICAgICAgIDB4MDAwOAorI2RlZmluZSBBTUxfRklFTEQgICAgICAgICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIEFNTF9ERUZFUiAgICAgICAgICAgICAgICAgICAweDAwMjAKKyNkZWZpbmUgQU1MX05BTUVEICAgICAgICAgICAgICAgICAgIDB4MDA0MAorI2RlZmluZSBBTUxfTlNOT0RFICAgICAgICAgICAgICAgICAgMHgwMDgwCisjZGVmaW5lIEFNTF9OU09QQ09ERSAgICAgICAgICAgICAgICAweDAxMDAKKyNkZWZpbmUgQU1MX05TT0JKRUNUICAgICAgICAgICAgICAgIDB4MDIwMAorI2RlZmluZSBBTUxfSEFTX1JFVFZBTCAgICAgICAgICAgICAgMHgwNDAwCisjZGVmaW5lIEFNTF9IQVNfVEFSR0VUICAgICAgICAgICAgICAweDA4MDAKKyNkZWZpbmUgQU1MX0hBU19BUkdTICAgICAgICAgICAgICAgIDB4MTAwMAorI2RlZmluZSBBTUxfQ09OU1RBTlQgICAgICAgICAgICAgICAgMHgyMDAwCisjZGVmaW5lIEFNTF9OT19PUEVSQU5EX1JFU09MVkUgICAgICAweDQwMDAKKworLyogQ29udmVuaWVudCBmbGFnIGdyb3VwaW5ncyAqLworCisjZGVmaW5lIEFNTF9GTEFHU19FWEVDXzBBXzBUXzFSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFNTF9IQVNfUkVUVkFMCisjZGVmaW5lIEFNTF9GTEFHU19FWEVDXzFBXzBUXzBSICAgICBBTUxfSEFTX0FSR1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1vbmFkaWMxICAqLworI2RlZmluZSBBTUxfRkxBR1NfRVhFQ18xQV8wVF8xUiAgICAgQU1MX0hBU19BUkdTIHwgICAgICAgICAgICAgICAgICBBTUxfSEFTX1JFVFZBTCAvKiBNb25hZGljMiAgKi8KKyNkZWZpbmUgQU1MX0ZMQUdTX0VYRUNfMUFfMVRfMFIgICAgIEFNTF9IQVNfQVJHUyB8IEFNTF9IQVNfVEFSR0VUCisjZGVmaW5lIEFNTF9GTEFHU19FWEVDXzFBXzFUXzFSICAgICBBTUxfSEFTX0FSR1MgfCBBTUxfSEFTX1RBUkdFVCB8IEFNTF9IQVNfUkVUVkFMIC8qIG1vbmFkaWMyX3IgKi8KKyNkZWZpbmUgQU1MX0ZMQUdTX0VYRUNfMkFfMFRfMFIgICAgIEFNTF9IQVNfQVJHUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRHlhZGljMSAgICovCisjZGVmaW5lIEFNTF9GTEFHU19FWEVDXzJBXzBUXzFSICAgICBBTUxfSEFTX0FSR1MgfCAgICAgICAgICAgICAgICAgIEFNTF9IQVNfUkVUVkFMIC8qIER5YWRpYzIgICAqLworI2RlZmluZSBBTUxfRkxBR1NfRVhFQ18yQV8xVF8xUiAgICAgQU1MX0hBU19BUkdTIHwgQU1MX0hBU19UQVJHRVQgfCBBTUxfSEFTX1JFVFZBTCAvKiBkeWFkaWMyX3IgICovCisjZGVmaW5lIEFNTF9GTEFHU19FWEVDXzJBXzJUXzFSICAgICBBTUxfSEFTX0FSR1MgfCBBTUxfSEFTX1RBUkdFVCB8IEFNTF9IQVNfUkVUVkFMCisjZGVmaW5lIEFNTF9GTEFHU19FWEVDXzNBXzBUXzBSICAgICBBTUxfSEFTX0FSR1MKKyNkZWZpbmUgQU1MX0ZMQUdTX0VYRUNfM0FfMVRfMVIgICAgIEFNTF9IQVNfQVJHUyB8IEFNTF9IQVNfVEFSR0VUIHwgQU1MX0hBU19SRVRWQUwKKyNkZWZpbmUgQU1MX0ZMQUdTX0VYRUNfNkFfMFRfMVIgICAgIEFNTF9IQVNfQVJHUyB8ICAgICAgICAgICAgICAgICAgQU1MX0hBU19SRVRWQUwKKworCisvKgorICogVGhlIG9wY29kZSBUeXBlIGlzIHVzZWQgaW4gYSBkaXNwYXRjaCB0YWJsZSwgZG8gbm90IGNoYW5nZQorICogd2l0aG91dCB1cGRhdGluZyB0aGUgdGFibGUuCisgKi8KKyNkZWZpbmUgQU1MX1RZUEVfRVhFQ18wQV8wVF8xUiAgICAgIDB4MDAKKyNkZWZpbmUgQU1MX1RZUEVfRVhFQ18xQV8wVF8wUiAgICAgIDB4MDEgLyogTW9uYWRpYzEgICovCisjZGVmaW5lIEFNTF9UWVBFX0VYRUNfMUFfMFRfMVIgICAgICAweDAyIC8qIE1vbmFkaWMyICAqLworI2RlZmluZSBBTUxfVFlQRV9FWEVDXzFBXzFUXzBSICAgICAgMHgwMworI2RlZmluZSBBTUxfVFlQRV9FWEVDXzFBXzFUXzFSICAgICAgMHgwNCAvKiBtb25hZGljMl9yICovCisjZGVmaW5lIEFNTF9UWVBFX0VYRUNfMkFfMFRfMFIgICAgICAweDA1IC8qIER5YWRpYzEgICAqLworI2RlZmluZSBBTUxfVFlQRV9FWEVDXzJBXzBUXzFSICAgICAgMHgwNiAvKiBEeWFkaWMyICAgKi8KKyNkZWZpbmUgQU1MX1RZUEVfRVhFQ18yQV8xVF8xUiAgICAgIDB4MDcgLyogZHlhZGljMl9yICAqLworI2RlZmluZSBBTUxfVFlQRV9FWEVDXzJBXzJUXzFSICAgICAgMHgwOAorI2RlZmluZSBBTUxfVFlQRV9FWEVDXzNBXzBUXzBSICAgICAgMHgwOQorI2RlZmluZSBBTUxfVFlQRV9FWEVDXzNBXzFUXzFSICAgICAgMHgwQQorI2RlZmluZSBBTUxfVFlQRV9FWEVDXzZBXzBUXzFSICAgICAgMHgwQgorLyogRW5kIG9mIHR5cGVzIHVzZWQgaW4gZGlzcGF0Y2ggdGFibGUgKi8KKworI2RlZmluZSBBTUxfVFlQRV9MSVRFUkFMICAgICAgICAgICAgMHgwQgorI2RlZmluZSBBTUxfVFlQRV9DT05TVEFOVCAgICAgICAgICAgMHgwQworI2RlZmluZSBBTUxfVFlQRV9NRVRIT0RfQVJHVU1FTlQgICAgMHgwRAorI2RlZmluZSBBTUxfVFlQRV9MT0NBTF9WQVJJQUJMRSAgICAgMHgwRQorI2RlZmluZSBBTUxfVFlQRV9EQVRBX1RFUk0gICAgICAgICAgMHgwRgorCisvKiBHZW5lcmljIGZvciBhbiBvcCB0aGF0IHJldHVybnMgYSB2YWx1ZSAqLworCisjZGVmaW5lIEFNTF9UWVBFX01FVEhPRF9DQUxMICAgICAgICAweDEwCisKKy8qIE1pc2MgKi8KKworI2RlZmluZSBBTUxfVFlQRV9DUkVBVEVfRklFTEQgICAgICAgMHgxMQorI2RlZmluZSBBTUxfVFlQRV9DUkVBVEVfT0JKRUNUICAgICAgMHgxMgorI2RlZmluZSBBTUxfVFlQRV9DT05UUk9MICAgICAgICAgICAgMHgxMworI2RlZmluZSBBTUxfVFlQRV9OQU1FRF9OT19PQkogICAgICAgMHgxNAorI2RlZmluZSBBTUxfVFlQRV9OQU1FRF9GSUVMRCAgICAgICAgMHgxNQorI2RlZmluZSBBTUxfVFlQRV9OQU1FRF9TSU1QTEUgICAgICAgMHgxNgorI2RlZmluZSBBTUxfVFlQRV9OQU1FRF9DT01QTEVYICAgICAgMHgxNworI2RlZmluZSBBTUxfVFlQRV9SRVRVUk4gICAgICAgICAgICAgMHgxOAorCisjZGVmaW5lIEFNTF9UWVBFX1VOREVGSU5FRCAgICAgICAgICAweDE5CisjZGVmaW5lIEFNTF9UWVBFX0JPR1VTICAgICAgICAgICAgICAweDFBCisKKworLyoKKyAqIE9wY29kZSBjbGFzc2VzCisgKi8KKyNkZWZpbmUgQU1MX0NMQVNTX0VYRUNVVEUgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgQU1MX0NMQVNTX0NSRUFURSAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgQU1MX0NMQVNTX0FSR1VNRU5UICAgICAgICAgIDB4MDIKKyNkZWZpbmUgQU1MX0NMQVNTX05BTUVEX09CSkVDVCAgICAgIDB4MDMKKyNkZWZpbmUgQU1MX0NMQVNTX0NPTlRST0wgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgQU1MX0NMQVNTX0FTQ0lJICAgICAgICAgICAgIDB4MDUKKyNkZWZpbmUgQU1MX0NMQVNTX1BSRUZJWCAgICAgICAgICAgIDB4MDYKKyNkZWZpbmUgQU1MX0NMQVNTX0lOVEVSTkFMICAgICAgICAgIDB4MDcKKyNkZWZpbmUgQU1MX0NMQVNTX1JFVFVSTl9WQUxVRSAgICAgIDB4MDgKKyNkZWZpbmUgQU1MX0NMQVNTX01FVEhPRF9DQUxMICAgICAgIDB4MDkKKyNkZWZpbmUgQU1MX0NMQVNTX1VOS05PV04gICAgICAgICAgIDB4MEEKKworCisvKiBQcmVkZWZpbmVkIE9wZXJhdGlvbiBSZWdpb24gc3BhY2VfaURzICovCisKK3R5cGVkZWYgZW51bQoreworCVJFR0lPTl9NRU1PUlkgICAgICAgICAgICAgICAgICAgPSAwLAorCVJFR0lPTl9JTywKKwlSRUdJT05fUENJX0NPTkZJRywKKwlSRUdJT05fRUMsCisJUkVHSU9OX1NNQlVTLAorCVJFR0lPTl9DTU9TLAorCVJFR0lPTl9QQ0lfQkFSLAorCVJFR0lPTl9EQVRBX1RBQkxFLCAgICAgICAgICAgICAgLyogSW50ZXJuYWwgdXNlIG9ubHkgKi8KKwlSRUdJT05fRklYRURfSFcgICAgICAgICAgICAgICAgID0gMHg3RgorCit9IEFNTF9SRUdJT05fVFlQRVM7CisKKworLyogQ29tcGFyaXNvbiBvcGVyYXRpb24gY29kZXMgZm9yIG1hdGNoX29wIG9wZXJhdG9yICovCisKK3R5cGVkZWYgZW51bQoreworCU1BVENIX01UUiAgICAgICAgICAgICAgICAgICAgICAgPSAwLAorCU1BVENIX01FUSAgICAgICAgICAgICAgICAgICAgICAgPSAxLAorCU1BVENIX01MRSAgICAgICAgICAgICAgICAgICAgICAgPSAyLAorCU1BVENIX01MVCAgICAgICAgICAgICAgICAgICAgICAgPSAzLAorCU1BVENIX01HRSAgICAgICAgICAgICAgICAgICAgICAgPSA0LAorCU1BVENIX01HVCAgICAgICAgICAgICAgICAgICAgICAgPSA1CisKK30gQU1MX01BVENIX09QRVJBVE9SOworCisjZGVmaW5lIE1BWF9NQVRDSF9PUEVSQVRPUiAgICAgICAgICA1CisKKworLyoKKyAqIGZpZWxkX2ZsYWdzCisgKgorICogVGhpcyBieXRlIGlzIGV4dHJhY3RlZCBmcm9tIHRoZSBBTUwgYW5kIGluY2x1ZGVzIHRocmVlIHNlcGFyYXRlCisgKiBwaWVjZXMgb2YgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZpZWxkOgorICogMSkgVGhlIGZpZWxkIGFjY2VzcyB0eXBlCisgKiAyKSBUaGUgZmllbGQgdXBkYXRlIHJ1bGUKKyAqIDMpIFRoZSBsb2NrIHJ1bGUgZm9yIHRoZSBmaWVsZAorICoKKyAqIEJpdHMgMDAgLSAwMyA6IGFjY2Vzc190eXBlIChhbnlfYWNjLCBieXRlX2FjYywgZXRjLikKKyAqICAgICAgMDQgICAgICA6IGxvY2tfcnVsZSAoMSA9PSBMb2NrKQorICogICAgICAwNSAtIDA2IDogdXBkYXRlX3J1bGUKKyAqLworI2RlZmluZSBBTUxfRklFTERfQUNDRVNTX1RZUEVfTUFTSyAgMHgwRgorI2RlZmluZSBBTUxfRklFTERfTE9DS19SVUxFX01BU0sgICAgMHgxMAorI2RlZmluZSBBTUxfRklFTERfVVBEQVRFX1JVTEVfTUFTSyAgMHg2MAorCisKKy8qIDEpIEZpZWxkIEFjY2VzcyBUeXBlcyAqLworCit0eXBlZGVmIGVudW0KK3sKKwlBTUxfRklFTERfQUNDRVNTX0FOWSAgICAgICAgICAgID0gMHgwMCwKKwlBTUxfRklFTERfQUNDRVNTX0JZVEUgICAgICAgICAgID0gMHgwMSwKKwlBTUxfRklFTERfQUNDRVNTX1dPUkQgICAgICAgICAgID0gMHgwMiwKKwlBTUxfRklFTERfQUNDRVNTX0RXT1JEICAgICAgICAgID0gMHgwMywKKwlBTUxfRklFTERfQUNDRVNTX1FXT1JEICAgICAgICAgID0gMHgwNCwgICAgLyogQUNQSSAyLjAgKi8KKwlBTUxfRklFTERfQUNDRVNTX0JVRkZFUiAgICAgICAgID0gMHgwNSAgICAgLyogQUNQSSAyLjAgKi8KKworfSBBTUxfQUNDRVNTX1RZUEU7CisKKworLyogMikgRmllbGQgTG9jayBSdWxlcyAqLworCit0eXBlZGVmIGVudW0KK3sKKwlBTUxfRklFTERfTE9DS19ORVZFUiAgICAgICAgICAgID0gMHgwMCwKKwlBTUxfRklFTERfTE9DS19BTFdBWVMgICAgICAgICAgID0gMHgxMAorCit9IEFNTF9MT0NLX1JVTEU7CisKKworLyogMykgRmllbGQgVXBkYXRlIFJ1bGVzICovCisKK3R5cGVkZWYgZW51bQoreworCUFNTF9GSUVMRF9VUERBVEVfUFJFU0VSVkUgICAgICAgPSAweDAwLAorCUFNTF9GSUVMRF9VUERBVEVfV1JJVEVfQVNfT05FUyAgPSAweDIwLAorCUFNTF9GSUVMRF9VUERBVEVfV1JJVEVfQVNfWkVST1MgPSAweDQwCisKK30gQU1MX1VQREFURV9SVUxFOworCisKKy8qCisgKiBGaWVsZCBBY2Nlc3MgQXR0cmlidXRlcy4KKyAqIFRoaXMgYnl0ZSBpcyBleHRyYWN0ZWQgZnJvbSB0aGUgQU1MIHZpYSB0aGUKKyAqIGFjY2Vzc19hcyBrZXl3b3JkCisgKi8KK3R5cGVkZWYgZW51bQoreworCUFNTF9GSUVMRF9BVFRSSUJfU01CX1FVSUNLICAgICAgPSAweDAyLAorCUFNTF9GSUVMRF9BVFRSSUJfU01CX1NFTkRfUkNWICAgPSAweDA0LAorCUFNTF9GSUVMRF9BVFRSSUJfU01CX0JZVEUgICAgICAgPSAweDA2LAorCUFNTF9GSUVMRF9BVFRSSUJfU01CX1dPUkQgICAgICAgPSAweDA4LAorCUFNTF9GSUVMRF9BVFRSSUJfU01CX0JMT0NLICAgICAgPSAweDBBLAorCUFNTF9GSUVMRF9BVFRSSUJfU01CX1dPUkRfQ0FMTCAgPSAweDBDLAorCUFNTF9GSUVMRF9BVFRSSUJfU01CX0JMT0NLX0NBTEwgPSAweDBECisKK30gQU1MX0FDQ0VTU19BVFRSSUJVVEU7CisKKworLyogQml0IGZpZWxkcyBpbiBtZXRob2RfZmxhZ3MgYnl0ZSAqLworCisjZGVmaW5lIEFNTF9NRVRIT0RfQVJHX0NPVU5UICAgICAgICAweDA3CisjZGVmaW5lIEFNTF9NRVRIT0RfU0VSSUFMSVpFRCAgICAgICAweDA4CisjZGVmaW5lIEFNTF9NRVRIT0RfU1lOQ0hfTEVWRUwgICAgICAweEYwCisKKy8qIE1FVEhPRF9GTEFHU19BUkdfQ09VTlQgaXMgbm90IHVzZWQgaW50ZXJuYWxseSwgZGVmaW5lIGFkZGl0aW9uYWwgZmxhZ3MgKi8KKworI2RlZmluZSBBTUxfTUVUSE9EX0lOVEVSTkFMX09OTFkgICAgMHgwMQorI2RlZmluZSBBTUxfTUVUSE9EX1JFU0VSVkVEMSAgICAgICAgMHgwMgorI2RlZmluZSBBTUxfTUVUSE9EX1JFU0VSVkVEMiAgICAgICAgMHgwNAorCisKKyNlbmRpZiAvKiBfX0FNTENPREVfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYW1scmVzcmMuaCBiL2luY2x1ZGUvYWNwaS9hbWxyZXNyYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyMGVjMzAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FjcGkvYW1scmVzcmMuaApAQCAtMCwwICsxLDM1MyBAQAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogTW9kdWxlIE5hbWU6IGFtbHJlc3JjLmggLSBBTUwgcmVzb3VyY2UgZGVzY3JpcHRvcnMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA1LCBSLiBCeXJvbiBNb29yZQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLAorICogICAgd2l0aG91dCBtb2RpZmljYXRpb24uCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgYXQgbWluaW11bSBhIGRpc2NsYWltZXIKKyAqICAgIHN1YnN0YW50aWFsbHkgc2ltaWxhciB0byB0aGUgIk5PIFdBUlJBTlRZIiBkaXNjbGFpbWVyIGJlbG93CisgKiAgICAoIkRpc2NsYWltZXIiKSBhbmQgYW55IHJlZGlzdHJpYnV0aW9uIG11c3QgYmUgY29uZGl0aW9uZWQgdXBvbgorICogICAgaW5jbHVkaW5nIGEgc3Vic3RhbnRpYWxseSBzaW1pbGFyIERpc2NsYWltZXIgcmVxdWlyZW1lbnQgZm9yIGZ1cnRoZXIKKyAqICAgIGJpbmFyeSByZWRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWVzIG9mIHRoZSBhYm92ZS1saXN0ZWQgY29weXJpZ2h0IGhvbGRlcnMgbm9yIHRoZSBuYW1lcworICogICAgb2YgYW55IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBOTyBXQVJSQU5UWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcKKyAqIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorICovCisKKworI2lmbmRlZiBfX0FNTFJFU1JDX0gKKyNkZWZpbmUgX19BTUxSRVNSQ19ICisKKworI2RlZmluZSBBU0xfUkVTTkFNRV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgIl9BRFIiCisjZGVmaW5lIEFTTF9SRVNOQU1FX0FMSUdOTUVOVCAgICAgICAgICAgICAgICAgICAiX0FMTiIKKyNkZWZpbmUgQVNMX1JFU05BTUVfQUREUkVTU1NQQUNFICAgICAgICAgICAgICAgICJfQVNJIgorI2RlZmluZSBBU0xfUkVTTkFNRV9BQ0NFU1NTSVpFICAgICAgICAgICAgICAgICAgIl9BU1oiCisjZGVmaW5lIEFTTF9SRVNOQU1FX1RZUEVTUEVDSUZJQ0FUVFJJQlVURVMgICAgICAiX0FUVCIKKyNkZWZpbmUgQVNMX1JFU05BTUVfQkFTRUFERFJFU1MgICAgICAgICAgICAgICAgICJfQkFTIgorI2RlZmluZSBBU0xfUkVTTkFNRV9CVVNNQVNURVIgICAgICAgICAgICAgICAgICAgIl9CTV8iICAvKiBNYXN0ZXIoMSksIFNsYXZlKDApICovCisjZGVmaW5lIEFTTF9SRVNOQU1FX0RFQ09ERSAgICAgICAgICAgICAgICAgICAgICAiX0RFQyIKKyNkZWZpbmUgQVNMX1JFU05BTUVfRE1BICAgICAgICAgICAgICAgICAgICAgICAgICJfRE1BIgorI2RlZmluZSBBU0xfUkVTTkFNRV9ETUFUWVBFICAgICAgICAgICAgICAgICAgICAgIl9UWVAiICAvKiBDb21wYXRpYmxlKDApLCBBKDEpLCBCKDIpLCBGKDMpICovCisjZGVmaW5lIEFTTF9SRVNOQU1FX0dSQU5VTEFSSVRZICAgICAgICAgICAgICAgICAiX0dSQSIKKyNkZWZpbmUgQVNMX1JFU05BTUVfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICJfSU5UIgorI2RlZmluZSBBU0xfUkVTTkFNRV9JTlRFUlJVUFRMRVZFTCAgICAgICAgICAgICAgIl9MTF8iICAvKiBhY3RpdmVfbG8oMSksIGFjdGl2ZV9oaSgwKSAqLworI2RlZmluZSBBU0xfUkVTTkFNRV9JTlRFUlJVUFRTSEFSRSAgICAgICAgICAgICAgIl9TSFIiICAvKiBTaGFyZWFibGUoMSksIG5vX3NoYXJlKDApICovCisjZGVmaW5lIEFTTF9SRVNOQU1FX0lOVEVSUlVQVFRZUEUgICAgICAgICAgICAgICAiX0hFXyIgIC8qIEVkZ2UoMSksIExldmVsKDApICovCisjZGVmaW5lIEFTTF9SRVNOQU1FX0xFTkdUSCAgICAgICAgICAgICAgICAgICAgICAiX0xFTiIKKyNkZWZpbmUgQVNMX1JFU05BTUVfTUVNQVRUUklCVVRFUyAgICAgICAgICAgICAgICJfTVRQIiAgLyogTWVtb3J5KDApLCBSZXNlcnZlZCgxKSwgQUNQSSgyKSwgTlZTKDMpICovCisjZGVmaW5lIEFTTF9SRVNOQU1FX01FTVRZUEUgICAgICAgICAgICAgICAgICAgICAiX01FTSIgIC8qIG5vbl9jYWNoZSgwKSwgQ2FjaGVhYmxlKDEpIENhY2hlK2NvbWJpbmUoMiksIENhY2hlK3ByZWZldGNoKDMpICovCisjZGVmaW5lIEFTTF9SRVNOQU1FX01BWEFERFIgICAgICAgICAgICAgICAgICAgICAiX01BWCIKKyNkZWZpbmUgQVNMX1JFU05BTUVfTUlOQUREUiAgICAgICAgICAgICAgICAgICAgICJfTUlOIgorI2RlZmluZSBBU0xfUkVTTkFNRV9NQVhUWVBFICAgICAgICAgICAgICAgICAgICAgIl9NQUYiCisjZGVmaW5lIEFTTF9SRVNOQU1FX01JTlRZUEUgICAgICAgICAgICAgICAgICAgICAiX01JRiIKKyNkZWZpbmUgQVNMX1JFU05BTUVfUkVHSVNURVJCSVRPRkZTRVQgICAgICAgICAgICJfUkJPIgorI2RlZmluZSBBU0xfUkVTTkFNRV9SRUdJU1RFUkJJVFdJRFRIICAgICAgICAgICAgIl9SQlciCisjZGVmaW5lIEFTTF9SRVNOQU1FX1JBTkdFVFlQRSAgICAgICAgICAgICAgICAgICAiX1JORyIKKyNkZWZpbmUgQVNMX1JFU05BTUVfUkVBRFdSSVRFVFlQRSAgICAgICAgICAgICAgICJfUldfIiAgLyogcmVhZF9vbmx5KDApLCBXcml0ZWFibGUgKDEpICovCisjZGVmaW5lIEFTTF9SRVNOQU1FX1RSQU5TTEFUSU9OICAgICAgICAgICAgICAgICAiX1RSQSIKKyNkZWZpbmUgQVNMX1JFU05BTUVfVFJBTlNUWVBFICAgICAgICAgICAgICAgICAgICJfVFJTIiAgLyogU3BhcnNlKDEpLCBEZW5zZSgwKSAqLworI2RlZmluZSBBU0xfUkVTTkFNRV9UWVBFICAgICAgICAgICAgICAgICAgICAgICAgIl9UVFAiICAvKiBUcmFuc2xhdGlvbigxKSwgU3RhdGljICgwKSAqLworI2RlZmluZSBBU0xfUkVTTkFNRV9YRkVSVFlQRSAgICAgICAgICAgICAgICAgICAgIl9TSXoiICAvKiA4KDApLCA4X2FuZDE2KDEpLCAxNigyKSAqLworCisKKy8qIERlZmF1bHQgc2l6ZXMgZm9yICJzbWFsbCIgcmVzb3VyY2UgZGVzY3JpcHRvcnMgKi8KKworI2RlZmluZSBBU0xfUkRFU0NfSVJRX1NJWkUgICAgICAgICAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBBU0xfUkRFU0NfRE1BX1NJWkUgICAgICAgICAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBBU0xfUkRFU0NfU1RfREVQRU5EX1NJWkUgICAgICAgICAgICAgICAgMHgwMAorI2RlZmluZSBBU0xfUkRFU0NfRU5EX0RFUEVORF9TSVpFICAgICAgICAgICAgICAgMHgwMAorI2RlZmluZSBBU0xfUkRFU0NfSU9fU0laRSAgICAgICAgICAgICAgICAgICAgICAgMHgwNworI2RlZmluZSBBU0xfUkRFU0NfRklYRURfSU9fU0laRSAgICAgICAgICAgICAgICAgMHgwMworI2RlZmluZSBBU0xfUkRFU0NfRU5EX1RBR19TSVpFICAgICAgICAgICAgICAgICAgMHgwMQorCisKK3N0cnVjdCBhc2xfcmVzb3VyY2Vfbm9kZQoreworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl9sZW5ndGg7CisJdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmJ1ZmZlcjsKKwlzdHJ1Y3QgYXNsX3Jlc291cmNlX25vZGUgICAgICAgICAgICAqbmV4dDsKK307CisKKworLyoKKyAqIFJlc291cmNlIGRlc2NyaXB0b3JzIGRlZmluZWQgaW4gdGhlIEFDUEkgc3BlY2lmaWNhdGlvbi4KKyAqCisgKiBQYWNraW5nL2FsaWdubWVudCBtdXN0IGJlIEJZVEUgYmVjYXVzZSB0aGVzZSBkZXNjcmlwdG9ycworICogYXJlIHVzZWQgdG8gb3ZlcmxheSB0aGUgQU1MIGJ5dGUgc3RyZWFtLgorICovCisjcHJhZ21hIHBhY2soMSkKKworc3RydWN0IGFzbF9pcnFfZm9ybWF0X2Rlc2MKK3sKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yX3R5cGU7CisJdTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXJxX21hc2s7CisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3M7Cit9OworCisKK3N0cnVjdCBhc2xfaXJxX25vZmxhZ3NfZGVzYworeworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3JfdHlwZTsKKwl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcnFfbWFzazsKK307CisKKworc3RydWN0IGFzbF9kbWFfZm9ybWF0X2Rlc2MKK3sKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yX3R5cGU7CisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1hX2NoYW5uZWxfbWFzazsKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnczsKK307CisKKworc3RydWN0IGFzbF9zdGFydF9kZXBlbmRlbnRfZGVzYworeworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3JfdHlwZTsKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnczsKK307CisKKworc3RydWN0IGFzbF9zdGFydF9kZXBlbmRlbnRfbm9wcmlvX2Rlc2MKK3sKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yX3R5cGU7Cit9OworCisKK3N0cnVjdCBhc2xfZW5kX2RlcGVuZGVudF9kZXNjCit7CisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvcl90eXBlOworfTsKKworCitzdHJ1Y3QgYXNsX2lvX3BvcnRfZGVzYworeworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3JfdHlwZTsKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbjsKKwl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzX21pbjsKKwl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzX21heDsKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnQ7CisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoOworfTsKKworCitzdHJ1Y3QgYXNsX2ZpeGVkX2lvX3BvcnRfZGVzYworeworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3JfdHlwZTsKKwl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlX2FkZHJlc3M7CisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoOworfTsKKworCitzdHJ1Y3QgYXNsX3NtYWxsX3ZlbmRvcl9kZXNjCit7CisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvcl90eXBlOworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlbmRvcl9kZWZpbmVkWzddOworfTsKKworCitzdHJ1Y3QgYXNsX2VuZF90YWdfZGVzYworeworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3JfdHlwZTsKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja3N1bTsKK307CisKKworLyogTEFSR0UgZGVzY3JpcHRvcnMgKi8KKworc3RydWN0IGFzbF9tZW1vcnlfMjRfZGVzYworeworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3JfdHlwZTsKKwl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGg7CisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb247CisJdTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzc19taW47CisJdTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzc19tYXg7CisJdTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50OworCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlX2xlbmd0aDsKK307CisKKworc3RydWN0IGFzbF9sYXJnZV92ZW5kb3JfZGVzYworeworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3JfdHlwZTsKKwl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGg7CisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVuZG9yX2RlZmluZWRbMV07Cit9OworCisKK3N0cnVjdCBhc2xfbWVtb3J5XzMyX2Rlc2MKK3sKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yX3R5cGU7CisJdTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoOworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uOworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3NfbWluOworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3NfbWF4OworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWdubWVudDsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZV9sZW5ndGg7Cit9OworCisKK3N0cnVjdCBhc2xfZml4ZWRfbWVtb3J5XzMyX2Rlc2MKK3sKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yX3R5cGU7CisJdTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoOworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uOworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VfYWRkcmVzczsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZV9sZW5ndGg7Cit9OworCisKK3N0cnVjdCBhc2xfZXh0ZW5kZWRfYWRkcmVzc19kZXNjCit7CisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvcl90eXBlOworCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aDsKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZV90eXBlOworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzOworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmljX2ZsYWdzOworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldmlzaW9uX2lEOworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2VydmVkOworCXU2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyYW51bGFyaXR5OworCXU2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3NfbWluOworCXU2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3NfbWF4OworCXU2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uX29mZnNldDsKKwl1NjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzX2xlbmd0aDsKKwl1NjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlX3NwZWNpZmljX2F0dHJpYnV0ZXM7CisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxfZmllbGRzWzJdOyAvKiBVc2VkIGZvciBsZW5ndGggY2FsY3VsYXRpb24gb25seSAqLworfTsKKworI2RlZmluZSBBU0xfRVhURU5ERURfQUREUkVTU19ERVNDX1JFVklTSU9OICAgICAgICAgIDEgICAgICAgLyogQUNQSSAzLjAgKi8KKworCitzdHJ1Y3QgYXNsX3F3b3JkX2FkZHJlc3NfZGVzYworeworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3JfdHlwZTsKKwl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGg7CisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VfdHlwZTsKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnczsKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpY19mbGFnczsKKwl1NjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmFudWxhcml0eTsKKwl1NjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzX21pbjsKKwl1NjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzX21heDsKKwl1NjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbl9vZmZzZXQ7CisJdTY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzc19sZW5ndGg7CisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxfZmllbGRzWzJdOworfTsKKworCitzdHJ1Y3QgYXNsX2R3b3JkX2FkZHJlc3NfZGVzYworeworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3JfdHlwZTsKKwl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGg7CisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VfdHlwZTsKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnczsKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpY19mbGFnczsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmFudWxhcml0eTsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzX21pbjsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzX21heDsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbl9vZmZzZXQ7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzc19sZW5ndGg7CisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxfZmllbGRzWzJdOworfTsKKworCitzdHJ1Y3QgYXNsX3dvcmRfYWRkcmVzc19kZXNjCit7CisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvcl90eXBlOworCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aDsKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZV90eXBlOworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzOworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmljX2ZsYWdzOworCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyYW51bGFyaXR5OworCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3NfbWluOworCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3NfbWF4OworCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uX29mZnNldDsKKwl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzX2xlbmd0aDsKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbF9maWVsZHNbMl07Cit9OworCisKK3N0cnVjdCBhc2xfZXh0ZW5kZWRfeHJ1cHRfZGVzYworeworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3JfdHlwZTsKKwl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGg7CisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3M7CisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfbGVuZ3RoOworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdF9udW1iZXJbMV07CisJLyogcmVzX3NvdXJjZV9pbmRleCwgcmVzX3NvdXJjZSBvcHRpb25hbCBmaWVsZHMgZm9sbG93ICovCit9OworCisKK3N0cnVjdCBhc2xfZ2VuZXJhbF9yZWdpc3Rlcl9kZXNjCit7CisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvcl90eXBlOworCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aDsKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzX3NwYWNlX2lkOworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdF93aWR0aDsKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRfb2Zmc2V0OworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2Vzc19zaXplOyAvKiBBQ1BJIDMuMCwgd2FzIFJlc2VydmVkICovCisJdTY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzczsKK307CisKKy8qIHJlc3RvcmUgZGVmYXVsdCBhbGlnbm1lbnQgKi8KKworI3ByYWdtYSBwYWNrKCkKKworLyogVW5pb24gb2YgYWxsIHJlc291cmNlIGRlc2NyaXB0b3JzLCBzbyB3ZSBjYW4gYWxsb2NhdGUgdGhlIHdvcnN0IGNhc2UgKi8KKwordW5pb24gYXNsX3Jlc291cmNlX2Rlc2MKK3sKKwlzdHJ1Y3QgYXNsX2lycV9mb3JtYXRfZGVzYyAgICAgICAgICBpcnE7CisJc3RydWN0IGFzbF9kbWFfZm9ybWF0X2Rlc2MgICAgICAgICAgZG1hOworCXN0cnVjdCBhc2xfc3RhcnRfZGVwZW5kZW50X2Rlc2MgICAgIHN0ZDsKKwlzdHJ1Y3QgYXNsX2VuZF9kZXBlbmRlbnRfZGVzYyAgICAgICBlbmQ7CisJc3RydWN0IGFzbF9pb19wb3J0X2Rlc2MgICAgICAgICAgICAgaW9wOworCXN0cnVjdCBhc2xfZml4ZWRfaW9fcG9ydF9kZXNjICAgICAgIGZpbzsKKwlzdHJ1Y3QgYXNsX3NtYWxsX3ZlbmRvcl9kZXNjICAgICAgICBzbXY7CisJc3RydWN0IGFzbF9lbmRfdGFnX2Rlc2MgICAgICAgICAgICAgZXQ7CisKKwlzdHJ1Y3QgYXNsX21lbW9yeV8yNF9kZXNjICAgICAgICAgICBNMjQ7CisJc3RydWN0IGFzbF9sYXJnZV92ZW5kb3JfZGVzYyAgICAgICAgbGd2OworCXN0cnVjdCBhc2xfbWVtb3J5XzMyX2Rlc2MgICAgICAgICAgIE0zMjsKKwlzdHJ1Y3QgYXNsX2ZpeGVkX21lbW9yeV8zMl9kZXNjICAgICBGMzI7CisJc3RydWN0IGFzbF9xd29yZF9hZGRyZXNzX2Rlc2MgICAgICAgcWFzOworCXN0cnVjdCBhc2xfZHdvcmRfYWRkcmVzc19kZXNjICAgICAgIGRhczsKKwlzdHJ1Y3QgYXNsX3dvcmRfYWRkcmVzc19kZXNjICAgICAgICB3YXM7CisJc3RydWN0IGFzbF9leHRlbmRlZF9hZGRyZXNzX2Rlc2MgICAgZWFzOworCXN0cnVjdCBhc2xfZXh0ZW5kZWRfeHJ1cHRfZGVzYyAgICAgIGV4eDsKKwlzdHJ1Y3QgYXNsX2dlbmVyYWxfcmVnaXN0ZXJfZGVzYyAgICBncmc7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyX2l0ZW07CisJdTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2X2l0ZW07CisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVThpdGVtOworfTsKKworCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2NvbnRhaW5lci5oIGIvaW5jbHVkZS9hY3BpL2NvbnRhaW5lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3MTZkZjAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FjcGkvY29udGFpbmVyLmgKQEAgLTAsMCArMSwxMyBAQAorI2lmbmRlZiBfX0FDUElfQ09OVEFJTkVSX0gKKyNkZWZpbmUgX19BQ1BJX0NPTlRBSU5FUl9ICisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKworc3RydWN0IGFjcGlfY29udGFpbmVyIHsKKwlhY3BpX2hhbmRsZSBoYW5kbGU7CisJdW5zaWduZWQgbG9uZyBzdW47CisJaW50IHN0YXRlOworfTsKKworI2VuZGlmIC8qIF9fQUNQSV9DT05UQUlORVJfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvcGxhdGZvcm0vYWNlbnYuaCBiL2luY2x1ZGUvYWNwaS9wbGF0Zm9ybS9hY2Vudi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3YmY5MzYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FjcGkvcGxhdGZvcm0vYWNlbnYuaApAQCAtMCwwICsxLDM3OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIE5hbWU6IGFjZW52LmggLSBHZW5lcmF0aW9uIGVudmlyb25tZW50IHNwZWNpZmljIGl0ZW1zCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwNSwgUi4gQnlyb24gTW9vcmUKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciwKKyAqICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIGF0IG1pbmltdW0gYSBkaXNjbGFpbWVyCisgKiAgICBzdWJzdGFudGlhbGx5IHNpbWlsYXIgdG8gdGhlICJOTyBXQVJSQU5UWSIgZGlzY2xhaW1lciBiZWxvdworICogICAgKCJEaXNjbGFpbWVyIikgYW5kIGFueSByZWRpc3RyaWJ1dGlvbiBtdXN0IGJlIGNvbmRpdGlvbmVkIHVwb24KKyAqICAgIGluY2x1ZGluZyBhIHN1YnN0YW50aWFsbHkgc2ltaWxhciBEaXNjbGFpbWVyIHJlcXVpcmVtZW50IGZvciBmdXJ0aGVyCisgKiAgICBiaW5hcnkgcmVkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lcyBvZiB0aGUgYWJvdmUtbGlzdGVkIGNvcHlyaWdodCBob2xkZXJzIG5vciB0aGUgbmFtZXMKKyAqICAgIG9mIGFueSBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGlzIHNvZnR3YXJlIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoIkdQTCIpIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogTk8gV0FSUkFOVFkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HCisgKiBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKyAqLworCisjaWZuZGVmIF9fQUNFTlZfSF9fCisjZGVmaW5lIF9fQUNFTlZfSF9fCisKKworLyoKKyAqIENvbmZpZ3VyYXRpb24gZm9yIEFDUEkgdG9vbHMgYW5kIHV0aWxpdGllcworICovCisKKyNpZmRlZiBfQUNQSV9EVU1QX0FQUAorI2lmbmRlZiBNU0RPUworI2RlZmluZSBBQ1BJX0RFQlVHX09VVFBVVAorI2VuZGlmCisjZGVmaW5lIEFDUElfQVBQTElDQVRJT04KKyNkZWZpbmUgQUNQSV9ESVNBU1NFTUJMRVIKKyNkZWZpbmUgQUNQSV9OT19NRVRIT0RfRVhFQ1VUSU9OCisjZGVmaW5lIEFDUElfVVNFX1NZU1RFTV9DTElCUkFSWQorI2RlZmluZSBBQ1BJX0VOQUJMRV9PQkpFQ1RfQ0FDSEUKKyNlbmRpZgorCisjaWZkZWYgX0FDUElfRVhFQ19BUFAKKyN1bmRlZiBERUJVR0dFUl9USFJFQURJTkcKKyNkZWZpbmUgREVCVUdHRVJfVEhSRUFESU5HICAgICAgREVCVUdHRVJfU0lOR0xFX1RIUkVBREVECisjZGVmaW5lIEFDUElfREVCVUdfT1VUUFVUCisjZGVmaW5lIEFDUElfQVBQTElDQVRJT04KKyNkZWZpbmUgQUNQSV9ERUJVR0dFUgorI2RlZmluZSBBQ1BJX0RJU0FTU0VNQkxFUgorI2RlZmluZSBBQ1BJX1VTRV9TWVNURU1fQ0xJQlJBUlkKKyNkZWZpbmUgQUNQSV9FTkFCTEVfT0JKRUNUX0NBQ0hFCisjZW5kaWYKKworI2lmZGVmIF9BQ1BJX0FTTF9DT01QSUxFUgorI2RlZmluZSBBQ1BJX0RFQlVHX09VVFBVVAorI2RlZmluZSBBQ1BJX0FQUExJQ0FUSU9OCisjZGVmaW5lIEFDUElfRElTQVNTRU1CTEVSCisjZGVmaW5lIEFDUElfQ09OU1RBTlRfRVZBTF9PTkxZCisjZGVmaW5lIEFDUElfVVNFX1NZU1RFTV9DTElCUkFSWQorI2RlZmluZSBBQ1BJX0VOQUJMRV9PQkpFQ1RfQ0FDSEUKKyNlbmRpZgorCisvKgorICogRW52aXJvbm1lbnQgY29uZmlndXJhdGlvbi4gIFRoZSBwdXJwb3NlIG9mIHRoaXMgZmlsZSBpcyB0byBpbnRlcmZhY2UgdG8gdGhlCisgKiBsb2NhbCBnZW5lcmF0aW9uIGVudmlyb25tZW50LgorICoKKyAqIDEpIEFDUElfVVNFX1NZU1RFTV9DTElCUkFSWSAtIERlZmluZSB0aGlzIGlmIGxpbmtpbmcgdG8gYW4gYWN0dWFsIEMgbGlicmFyeS4KKyAqICAgICAgT3RoZXJ3aXNlLCBsb2NhbCB2ZXJzaW9ucyBvZiBzdHJpbmcvbWVtb3J5IGZ1bmN0aW9ucyB3aWxsIGJlIHVzZWQuCisgKiAyKSBBQ1BJX1VTRV9TVEFOREFSRF9IRUFERVJTIC0gRGVmaW5lIHRoaXMgaWYgbGlua2luZyB0byBhIEMgbGlicmFyeSBhbmQKKyAqICAgICAgdGhlIHN0YW5kYXJkIGhlYWRlciBmaWxlcyBtYXkgYmUgdXNlZC4KKyAqCisgKiBUaGUgQUNQSSBzdWJzeXN0ZW0gb25seSB1c2VzIGxvdyBsZXZlbCBDIGxpYnJhcnkgZnVuY3Rpb25zIHRoYXQgZG8gbm90IGNhbGwKKyAqIG9wZXJhdGluZyBzeXN0ZW0gc2VydmljZXMgYW5kIG1heSB0aGVyZWZvcmUgYmUgaW5saW5lZCBpbiB0aGUgY29kZS4KKyAqCisgKiBJdCBtYXkgYmUgbmVjZXNzYXJ5IHRvIHRhaWxvciB0aGVzZSBpbmNsdWRlIGZpbGVzIHRvIHRoZSB0YXJnZXQKKyAqIGdlbmVyYXRpb24gZW52aXJvbm1lbnQuCisgKgorICoKKyAqIEZ1bmN0aW9ucyBhbmQgY29uc3RhbnRzIHVzZWQgZnJvbSBlYWNoIGhlYWRlcjoKKyAqCisgKiBzdHJpbmcuaDogICAgbWVtY3B5CisgKiAgICAgICAgICAgICAgbWVtc2V0CisgKiAgICAgICAgICAgICAgc3RyY2F0CisgKiAgICAgICAgICAgICAgc3RyY21wCisgKiAgICAgICAgICAgICAgc3RyY3B5CisgKiAgICAgICAgICAgICAgc3RybGVuCisgKiAgICAgICAgICAgICAgc3RybmNtcAorICogICAgICAgICAgICAgIHN0cm5jYXQKKyAqICAgICAgICAgICAgICBzdHJuY3B5CisgKgorICogc3RkbGliLmg6ICAgIHN0cnRvdWwKKyAqCisgKiBzdGRhcmcuaDogICAgdmFfbGlzdAorICogICAgICAgICAgICAgIHZhX2FyZworICogICAgICAgICAgICAgIHZhX3N0YXJ0CisgKiAgICAgICAgICAgICAgdmFfZW5kCisgKgorICovCisKKy8qISBbQmVnaW5dIG5vIHNvdXJjZSBjb2RlIHRyYW5zbGF0aW9uICovCisKKyNpZiBkZWZpbmVkKF9fbGludXhfXykKKyNpbmNsdWRlICJhY2xpbnV4LmgiCisKKyNlbGlmIGRlZmluZWQoX0FFRF9FRkkpCisjaW5jbHVkZSAiYWNlZmkuaCIKKworI2VsaWYgZGVmaW5lZChXSU4zMikKKyNpbmNsdWRlICJhY3dpbi5oIgorCisjZWxpZiBkZWZpbmVkKFdJTjY0KQorI2luY2x1ZGUgImFjd2luNjQuaCIKKworI2VsaWYgZGVmaW5lZChNU0RPUykgICAgICAgIC8qIE11c3QgYXBwZWFyIGFmdGVyIFdJTjMyIGFuZCBXSU42NCBjaGVjayAqLworI2luY2x1ZGUgImFjZG9zMTYuaCIKKworI2VsaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKyNpbmNsdWRlICJhY2ZyZWVic2QuaCIKKworI2VsaWYgZGVmaW5lZChfX05ldEJTRF9fKQorI2luY2x1ZGUgImFjbmV0YnNkLmgiCisKKyNlbGlmIGRlZmluZWQoTU9ERVNUTykKKyNpbmNsdWRlICJhY21vZGVzdG8uaCIKKworI2VsaWYgZGVmaW5lZChORVRXQVJFKQorI2luY2x1ZGUgImFjbmV0d2FyZS5oIgorCisjZWxzZQorCisvKiBBbGwgb3RoZXIgZW52aXJvbm1lbnRzICovCisKKyNkZWZpbmUgQUNQSV9VU0VfU1RBTkRBUkRfSEVBREVSUworCisjZGVmaW5lIENPTVBJTEVSX0RFUEVOREVOVF9JTlQ2NCAgIGxvbmcgbG9uZworI2RlZmluZSBDT01QSUxFUl9ERVBFTkRFTlRfVUlOVDY0ICB1bnNpZ25lZCBsb25nIGxvbmcKKworLyoKKyAqIFRoaXMgbWFjcm8gaXMgdXNlZCB0byB0YWcgZnVuY3Rpb25zIGFzICJwcmludGYtbGlrZSIgYmVjYXVzZQorICogc29tZSBjb21waWxlcnMgY2FuIGNhdGNoIHByaW50ZiBmb3JtYXQgc3RyaW5nIHByb2JsZW1zLiBNU1ZDCisgKiBkb2Vzbid0LCBzbyB0aGlzIGlzIHByb3Byb2Nlc3NlZCBhd2F5LgorICovCisjZGVmaW5lIEFDUElfUFJJTlRGX0xJS0VfRlVOQworCisjZW5kaWYKKworLyoKKyAqIE1lbW9yeSBhbGxvY2F0aW9uIHRyYWNraW5nLiAgVXNlZCBvbmx5IGlmCisgKiAxKSBUaGlzIGlzIHRoZSBkZWJ1ZyB2ZXJzaW9uCisgKiAyKSBUaGlzIGlzIE5PVCBhIDE2LWJpdCB2ZXJzaW9uIG9mIHRoZSBjb2RlIChub3QgZW5vdWdoIHJlYWwtbW9kZSBtZW1vcnkpCisgKi8KKyNpZmRlZiBBQ1BJX0RFQlVHX09VVFBVVAorI2lmIEFDUElfTUFDSElORV9XSURUSCAhPSAxNgorI2RlZmluZSBBQ1BJX0RCR19UUkFDS19BTExPQ0FUSU9OUworI2VuZGlmCisjZW5kaWYKKworLyohIFtFbmRdIG5vIHNvdXJjZSBjb2RlIHRyYW5zbGF0aW9uICEqLworCisKKy8qCisgKiBEZWJ1Z2dlciB0aHJlYWRpbmcgbW9kZWwKKyAqIFVzZSBzaW5nbGUgdGhyZWFkZWQgaWYgdGhlIGVudGlyZSBzdWJzeXN0ZW0gaXMgY29udGFpbmVkIGluIGFuIGFwcGxpY2F0aW9uCisgKiBVc2UgbXVsdGlwbGUgdGhyZWFkZWQgd2hlbiB0aGUgc3Vic3lzdGVtIGlzIHJ1bm5pbmcgaW4gdGhlIGtlcm5lbC4KKyAqCisgKiBCeSBkZWZhdWx0IHRoZSBtb2RlbCBpcyBzaW5nbGUgdGhyZWFkZWQgaWYgQUNQSV9BUFBMSUNBVElPTiBpcyBzZXQsCisgKiBtdWx0aS10aHJlYWRlZCBpZiBBQ1BJX0FQUExJQ0FUSU9OIGlzIG5vdCBzZXQuCisgKi8KKyNkZWZpbmUgREVCVUdHRVJfU0lOR0xFX1RIUkVBREVEICAgIDAKKyNkZWZpbmUgREVCVUdHRVJfTVVMVElfVEhSRUFERUQgICAgIDEKKworI2lmbmRlZiBERUJVR0dFUl9USFJFQURJTkcKKyNpZmRlZiBBQ1BJX0FQUExJQ0FUSU9OCisjZGVmaW5lIERFQlVHR0VSX1RIUkVBRElORyAgICAgICAgICBERUJVR0dFUl9TSU5HTEVfVEhSRUFERUQKKworI2Vsc2UKKyNkZWZpbmUgREVCVUdHRVJfVEhSRUFESU5HICAgICAgICAgIERFQlVHR0VSX01VTFRJX1RIUkVBREVECisjZW5kaWYKKyNlbmRpZiAvKiAhREVCVUdHRVJfVEhSRUFESU5HICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDIGxpYnJhcnkgY29uZmlndXJhdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmZGVmIEFDUElfVVNFX1NZU1RFTV9DTElCUkFSWQorLyoKKyAqIFVzZSB0aGUgc3RhbmRhcmQgQyBsaWJyYXJ5IGhlYWRlcnMuCisgKiBXZSB3YW50IHRvIGtlZXAgdGhlc2UgdG8gYSBtaW5pbXVtLgorICovCisKKyNpZmRlZiBBQ1BJX1VTRV9TVEFOREFSRF9IRUFERVJTCisvKgorICogVXNlIHRoZSBzdGFuZGFyZCBoZWFkZXJzIGZyb20gdGhlIHN0YW5kYXJkIGxvY2F0aW9ucworICovCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKworI2VuZGlmIC8qIEFDUElfVVNFX1NUQU5EQVJEX0hFQURFUlMgKi8KKworLyoKKyAqIFdlIHdpbGwgYmUgbGlua2luZyB0byB0aGUgc3RhbmRhcmQgQ2xpYiBmdW5jdGlvbnMKKyAqLworCisjZGVmaW5lIEFDUElfU1RSU1RSKHMxLHMyKSAgICAgIHN0cnN0cigoczEpLCAoczIpKQorI2RlZmluZSBBQ1BJX1NUUkNIUihzMSxjKSAgICAgICBzdHJjaHIoKHMxKSwgKGMpKQorCisjaWZkZWYgQUNQSV9GVVRVUkVfVVNBR0UKKyNkZWZpbmUgQUNQSV9TVFJVUFIocykgICAgICAgICAgKHZvaWQpIGFjcGlfdXRfc3RydXByICgocykpCisjZW5kaWYKKworI2RlZmluZSBBQ1BJX1NUUkxFTihzKSAgICAgICAgICAoYWNwaV9zaXplKSBzdHJsZW4oKHMpKQorI2RlZmluZSBBQ1BJX1NUUkNQWShkLHMpICAgICAgICAodm9pZCkgc3RyY3B5KChkKSwgKHMpKQorI2RlZmluZSBBQ1BJX1NUUk5DUFkoZCxzLG4pICAgICAodm9pZCkgc3RybmNweSgoZCksIChzKSwgKGFjcGlfc2l6ZSkobikpCisjZGVmaW5lIEFDUElfU1RSTkNNUChkLHMsbikgICAgIHN0cm5jbXAoKGQpLCAocyksIChhY3BpX3NpemUpKG4pKQorI2RlZmluZSBBQ1BJX1NUUkNNUChkLHMpICAgICAgICBzdHJjbXAoKGQpLCAocykpCisjZGVmaW5lIEFDUElfU1RSQ0FUKGQscykgICAgICAgICh2b2lkKSBzdHJjYXQoKGQpLCAocykpCisjZGVmaW5lIEFDUElfU1RSTkNBVChkLHMsbikgICAgIHN0cm5jYXQoKGQpLCAocyksIChhY3BpX3NpemUpKG4pKQorI2RlZmluZSBBQ1BJX1NUUlRPVUwoZCxzLG4pICAgICBzdHJ0b3VsKChkKSwgKHMpLCAoYWNwaV9zaXplKShuKSkKKyNkZWZpbmUgQUNQSV9NRU1DTVAoczEsczIsbikgICAgbWVtY21wKChzMSksIChzMiksIChhY3BpX3NpemUpKG4pKQorI2RlZmluZSBBQ1BJX01FTUNQWShkLHMsbikgICAgICAodm9pZCkgbWVtY3B5KChkKSwgKHMpLCAoYWNwaV9zaXplKShuKSkKKyNkZWZpbmUgQUNQSV9NRU1TRVQoZCxzLG4pICAgICAgKHZvaWQpIG1lbXNldCgoZCksIChzKSwgKGFjcGlfc2l6ZSkobikpCisKKyNkZWZpbmUgQUNQSV9UT1VQUEVSICAgICAgICAgICAgdG91cHBlcgorI2RlZmluZSBBQ1BJX1RPTE9XRVIgICAgICAgICAgICB0b2xvd2VyCisjZGVmaW5lIEFDUElfSVNfWERJR0lUICAgICAgICAgIGlzeGRpZ2l0CisjZGVmaW5lIEFDUElfSVNfRElHSVQgICAgICAgICAgIGlzZGlnaXQKKyNkZWZpbmUgQUNQSV9JU19TUEFDRSAgICAgICAgICAgaXNzcGFjZQorI2RlZmluZSBBQ1BJX0lTX1VQUEVSICAgICAgICAgICBpc3VwcGVyCisjZGVmaW5lIEFDUElfSVNfUFJJTlQgICAgICAgICAgIGlzcHJpbnQKKyNkZWZpbmUgQUNQSV9JU19BTFBIQSAgICAgICAgICAgaXNhbHBoYQorI2RlZmluZSBBQ1BJX0lTX0FTQ0lJICAgICAgICAgICBpc2FzY2lpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBOb3QgdXNpbmcgbmF0aXZlIEMgbGlicmFyeSwgdXNlIGxvY2FsIGltcGxlbWVudGF0aW9ucworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNlbHNlCisKKy8qCisgKiBVc2UgbG9jYWwgZGVmaW5pdGlvbnMgb2YgQyBsaWJyYXJ5IG1hY3JvcyBhbmQgZnVuY3Rpb25zCisgKiBOT1RFOiBUaGUgZnVuY3Rpb24gaW1wbGVtZW50YXRpb25zIG1heSBub3QgYmUgYXMgZWZmaWNpZW50CisgKiBhcyBhbiBpbmxpbmUgb3IgYXNzZW1ibHkgY29kZSBpbXBsZW1lbnRhdGlvbiBwcm92aWRlZCBieSBhCisgKiBuYXRpdmUgQyBsaWJyYXJ5LgorICovCisKKyNpZm5kZWYgdmFfYXJnCisKKyNpZm5kZWYgX1ZBTElTVAorI2RlZmluZSBfVkFMSVNUCit0eXBlZGVmIGNoYXIgKnZhX2xpc3Q7CisjZW5kaWYgLyogX1ZBTElTVCAqLworCisvKgorICogU3RvcmFnZSBhbGlnbm1lbnQgcHJvcGVydGllcworICovCisKKyNkZWZpbmUgIF9BVVBCTkQgICAgICAgICAgICAgICAgKHNpemVvZiAoYWNwaV9uYXRpdmVfaW50KSAtIDEpCisjZGVmaW5lICBfQUROQk5EICAgICAgICAgICAgICAgIChzaXplb2YgKGFjcGlfbmF0aXZlX2ludCkgLSAxKQorCisvKgorICogVmFyaWFibGUgYXJndW1lbnQgbGlzdCBtYWNybyBkZWZpbml0aW9ucworICovCisKKyNkZWZpbmUgX2JuZChYLCBibmQpICAgICAgICAgICAgKCgoc2l6ZW9mIChYKSkgKyAoYm5kKSkgJiAofihibmQpKSkKKyNkZWZpbmUgdmFfYXJnKGFwLCBUKSAgICAgICAgICAgKCooVCAqKSgoKGFwKSArPSAoX2JuZCAoVCwgX0FVUEJORCkpKSAtIChfYm5kIChULF9BRE5CTkQpKSkpCisjZGVmaW5lIHZhX2VuZChhcCkgICAgICAgICAgICAgICh2b2lkKSAwCisjZGVmaW5lIHZhX3N0YXJ0KGFwLCBBKSAgICAgICAgICh2b2lkKSAoKGFwKSA9ICgoKGNoYXIgKikgJihBKSkgKyAoX2JuZCAoQSxfQVVQQk5EKSkpKQorCisjZW5kaWYgLyogdmFfYXJnICovCisKKworI2RlZmluZSBBQ1BJX1NUUlNUUihzMSxzMikgICAgICBhY3BpX3V0X3N0cnN0ciAoKHMxKSwgKHMyKSkKKyNkZWZpbmUgQUNQSV9TVFJDSFIoczEsYykgICAgICAgYWNwaV91dF9zdHJjaHIgKChzMSksIChjKSkKKworI2lmZGVmIEFDUElfRlVUVVJFX1VTQUdFCisjZGVmaW5lIEFDUElfU1RSVVBSKHMpICAgICAgICAgICh2b2lkKSBhY3BpX3V0X3N0cnVwciAoKHMpKQorI2VuZGlmCisKKyNkZWZpbmUgQUNQSV9TVFJMRU4ocykgICAgICAgICAgKGFjcGlfc2l6ZSkgYWNwaV91dF9zdHJsZW4gKChzKSkKKyNkZWZpbmUgQUNQSV9TVFJDUFkoZCxzKSAgICAgICAgKHZvaWQpIGFjcGlfdXRfc3RyY3B5ICgoZCksIChzKSkKKyNkZWZpbmUgQUNQSV9TVFJOQ1BZKGQscyxuKSAgICAgKHZvaWQpIGFjcGlfdXRfc3RybmNweSAoKGQpLCAocyksIChhY3BpX3NpemUpKG4pKQorI2RlZmluZSBBQ1BJX1NUUk5DTVAoZCxzLG4pICAgICBhY3BpX3V0X3N0cm5jbXAgKChkKSwgKHMpLCAoYWNwaV9zaXplKShuKSkKKyNkZWZpbmUgQUNQSV9TVFJDTVAoZCxzKSAgICAgICAgYWNwaV91dF9zdHJjbXAgKChkKSwgKHMpKQorI2RlZmluZSBBQ1BJX1NUUkNBVChkLHMpICAgICAgICAodm9pZCkgYWNwaV91dF9zdHJjYXQgKChkKSwgKHMpKQorI2RlZmluZSBBQ1BJX1NUUk5DQVQoZCxzLG4pICAgICBhY3BpX3V0X3N0cm5jYXQgKChkKSwgKHMpLCAoYWNwaV9zaXplKShuKSkKKyNkZWZpbmUgQUNQSV9TVFJUT1VMKGQscyxuKSAgICAgYWNwaV91dF9zdHJ0b3VsICgoZCksIChzKSwgKGFjcGlfc2l6ZSkobikpCisjZGVmaW5lIEFDUElfTUVNQ01QKHMxLHMyLG4pICAgIGFjcGlfdXRfbWVtY21wKChzMSksIChzMiksIChhY3BpX3NpemUpKG4pKQorI2RlZmluZSBBQ1BJX01FTUNQWShkLHMsbikgICAgICAodm9pZCkgYWNwaV91dF9tZW1jcHkgKChkKSwgKHMpLCAoYWNwaV9zaXplKShuKSkKKyNkZWZpbmUgQUNQSV9NRU1TRVQoZCx2LG4pICAgICAgKHZvaWQpIGFjcGlfdXRfbWVtc2V0ICgoZCksICh2KSwgKGFjcGlfc2l6ZSkobikpCisjZGVmaW5lIEFDUElfVE9VUFBFUiAgICAgICAgICAgIGFjcGlfdXRfdG9fdXBwZXIKKyNkZWZpbmUgQUNQSV9UT0xPV0VSICAgICAgICAgICAgYWNwaV91dF90b19sb3dlcgorCisjZW5kaWYgLyogQUNQSV9VU0VfU1lTVEVNX0NMSUJSQVJZICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEFzc2VtYmx5IGNvZGUgbWFjcm9zCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogSGFuZGxlIHBsYXRmb3JtLSBhbmQgY29tcGlsZXItc3BlY2lmaWMgYXNzZW1ibHkgbGFuZ3VhZ2UgZGlmZmVyZW5jZXMuCisgKiBUaGVzZSBzaG91bGQgYWxyZWFkeSBoYXZlIGJlZW4gZGVmaW5lZCBieSB0aGUgcGxhdGZvcm0gaW5jbHVkZXMgYWJvdmUuCisgKgorICogTm90ZXM6CisgKiAxKSBJbnRlcnJ1cHQgMyBpcyB1c2VkIHRvIGJyZWFrIGludG8gYSBkZWJ1Z2dlcgorICogMikgSW50ZXJydXB0cyBhcmUgdHVybmVkIG9mZiBkdXJpbmcgQUNQSSByZWdpc3RlciBzZXR1cAorICovCisKKy8qIFVucmVjb2duaXplZCBjb21waWxlciwgdXNlIGRlZmF1bHRzICovCisKKyNpZm5kZWYgQUNQSV9BU01fTUFDUk9TCisKKy8qCisgKiBDYWxsaW5nIGNvbnZlbnRpb25zOgorICoKKyAqIEFDUElfU1lTVEVNX1hGQUNFICAgICAgICAtIEludGVyZmFjZXMgdG8gaG9zdCBPUyAoaGFuZGxlcnMsIHRocmVhZHMpCisgKiBBQ1BJX0VYVEVSTkFMX1hGQUNFICAgICAgLSBFeHRlcm5hbCBBQ1BJIGludGVyZmFjZXMKKyAqIEFDUElfSU5URVJOQUxfWEZBQ0UgICAgICAtIEludGVybmFsIEFDUEkgaW50ZXJmYWNlcworICogQUNQSV9JTlRFUk5BTF9WQVJfWEZBQ0UgIC0gSW50ZXJuYWwgdmFyaWFibGUtcGFyYW1ldGVyIGxpc3QgaW50ZXJmYWNlcworICovCisjZGVmaW5lIEFDUElfU1lTVEVNX1hGQUNFCisjZGVmaW5lIEFDUElfRVhURVJOQUxfWEZBQ0UKKyNkZWZpbmUgQUNQSV9JTlRFUk5BTF9YRkFDRQorI2RlZmluZSBBQ1BJX0lOVEVSTkFMX1ZBUl9YRkFDRQorCisjZGVmaW5lIEFDUElfQVNNX01BQ1JPUworI2RlZmluZSBCUkVBS1BPSU5UMworI2RlZmluZSBBQ1BJX0RJU0FCTEVfSVJRUygpCisjZGVmaW5lIEFDUElfRU5BQkxFX0lSUVMoKQorI2RlZmluZSBBQ1BJX0FDUVVJUkVfR0xPQkFMX0xPQ0soR2xwdHIsIGFjcSkKKyNkZWZpbmUgQUNQSV9SRUxFQVNFX0dMT0JBTF9MT0NLKEdscHRyLCBhY3EpCisKKyNlbmRpZiAvKiBBQ1BJX0FTTV9NQUNST1MgKi8KKworCisjaWZkZWYgQUNQSV9BUFBMSUNBVElPTgorCisvKiBEb24ndCB3YW50IHNvZnR3YXJlIGludGVycnVwdHMgd2l0aGluIGEgcmluZzMgYXBwbGljYXRpb24gKi8KKworI3VuZGVmIEJSRUFLUE9JTlQzCisjZGVmaW5lIEJSRUFLUE9JTlQzCisjZW5kaWYKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29tcGlsZXItc3BlY2lmaWMgaW5mb3JtYXRpb24gaXMgY29udGFpbmVkIGluIHRoZSBjb21waWxlci1zcGVjaWZpYworICogaGVhZGVycy4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZW5kaWYgLyogX19BQ0VOVl9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9wbGF0Zm9ybS9hY2djYy5oIGIvaW5jbHVkZS9hY3BpL3BsYXRmb3JtL2FjZ2NjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFmZGEzNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYWNwaS9wbGF0Zm9ybS9hY2djYy5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBOYW1lOiBhY2djYy5oIC0gR0NDIHNwZWNpZmljIGRlZmluZXMsIGV0Yy4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA1LCBSLiBCeXJvbiBNb29yZQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLAorICogICAgd2l0aG91dCBtb2RpZmljYXRpb24uCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgYXQgbWluaW11bSBhIGRpc2NsYWltZXIKKyAqICAgIHN1YnN0YW50aWFsbHkgc2ltaWxhciB0byB0aGUgIk5PIFdBUlJBTlRZIiBkaXNjbGFpbWVyIGJlbG93CisgKiAgICAoIkRpc2NsYWltZXIiKSBhbmQgYW55IHJlZGlzdHJpYnV0aW9uIG11c3QgYmUgY29uZGl0aW9uZWQgdXBvbgorICogICAgaW5jbHVkaW5nIGEgc3Vic3RhbnRpYWxseSBzaW1pbGFyIERpc2NsYWltZXIgcmVxdWlyZW1lbnQgZm9yIGZ1cnRoZXIKKyAqICAgIGJpbmFyeSByZWRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWVzIG9mIHRoZSBhYm92ZS1saXN0ZWQgY29weXJpZ2h0IGhvbGRlcnMgbm9yIHRoZSBuYW1lcworICogICAgb2YgYW55IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBOTyBXQVJSQU5UWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcKKyAqIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorICovCisKKyNpZm5kZWYgX19BQ0dDQ19IX18KKyNkZWZpbmUgX19BQ0dDQ19IX18KKworLyogVGhpcyBtYWNybyBpcyB1c2VkIHRvIHRhZyBmdW5jdGlvbnMgYXMgInByaW50Zi1saWtlIiBiZWNhdXNlCisgKiBzb21lIGNvbXBpbGVycyAobGlrZSBHQ0MpIGNhbiBjYXRjaCBwcmludGYgZm9ybWF0IHN0cmluZyBwcm9ibGVtcy4KKyAqLworI2RlZmluZSBBQ1BJX1BSSU5URl9MSUtFX0ZVTkMgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDQsIDUpKSkKKworLyogU29tZSBjb21waWxlcnMgY29tcGxhaW4gYWJvdXQgdW51c2VkIHZhcmlhYmxlcy4gU29tZXRpbWVzIHdlIGRvbid0IHdhbnQgdG8KKyAqIHVzZSBhbGwgdGhlIHZhcmlhYmxlcyAobW9zdCBzcGVjaWZpY2FsbHkgZm9yIF9USElTX01PRFVMRSkuIFRoaXMgYWxsb3cgdXMKKyAqIHRvIHRvIHRlbGwgdGhlIGNvbXBpbGVyIHdhcm5pbmcgaW4gYSBwZXItdmFyaWFibGUgbWFubmVyIHRoYXQgYSB2YXJpYWJsZQorICogaXMgdW51c2VkLgorICovCisjZGVmaW5lIEFDUElfVU5VU0VEX1ZBUiBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSkKKworI2VuZGlmIC8qIF9fQUNHQ0NfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvcGxhdGZvcm0vYWNsaW51eC5oIGIvaW5jbHVkZS9hY3BpL3BsYXRmb3JtL2FjbGludXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2RlMGRiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hY3BpL3BsYXRmb3JtL2FjbGludXguaApAQCAtMCwwICsxLDkyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogTmFtZTogYWNsaW51eC5oIC0gT1Mgc3BlY2lmaWMgZGVmaW5lcywgZXRjLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDUsIFIuIEJ5cm9uIE1vb3JlCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIsCisgKiAgICB3aXRob3V0IG1vZGlmaWNhdGlvbi4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSBhdCBtaW5pbXVtIGEgZGlzY2xhaW1lcgorICogICAgc3Vic3RhbnRpYWxseSBzaW1pbGFyIHRvIHRoZSAiTk8gV0FSUkFOVFkiIGRpc2NsYWltZXIgYmVsb3cKKyAqICAgICgiRGlzY2xhaW1lciIpIGFuZCBhbnkgcmVkaXN0cmlidXRpb24gbXVzdCBiZSBjb25kaXRpb25lZCB1cG9uCisgKiAgICBpbmNsdWRpbmcgYSBzdWJzdGFudGlhbGx5IHNpbWlsYXIgRGlzY2xhaW1lciByZXF1aXJlbWVudCBmb3IgZnVydGhlcgorICogICAgYmluYXJ5IHJlZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZXMgb2YgdGhlIGFib3ZlLWxpc3RlZCBjb3B5cmlnaHQgaG9sZGVycyBub3IgdGhlIG5hbWVzCisgKiAgICBvZiBhbnkgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhpcyBzb2Z0d2FyZSBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKCJHUEwiKSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIE5PIFdBUlJBTlRZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORworICogSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisgKi8KKworI2lmbmRlZiBfX0FDTElOVVhfSF9fCisjZGVmaW5lIF9fQUNMSU5VWF9IX18KKworI2RlZmluZSBBQ1BJX1VTRV9TWVNURU1fQ0xJQlJBUlkKKyNkZWZpbmUgQUNQSV9VU0VfRE9fV0hJTEVfMAorCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgorI2luY2x1ZGUgPGFzbS9hY3BpLmg+CisKKyNkZWZpbmUgc3RydG91bCBzaW1wbGVfc3RydG91bAorCisjZGVmaW5lIEFDUElfTUFDSElORV9XSURUSCAgQklUU19QRVJfTE9ORworCisjZWxzZSAvKiAhX19LRVJORUxfXyAqLworCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2lmIGRlZmluZWQoX19pYTY0X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykKKyNkZWZpbmUgQUNQSV9NQUNISU5FX1dJRFRIICAgICAgICAgIDY0CisjZGVmaW5lIENPTVBJTEVSX0RFUEVOREVOVF9JTlQ2NCAgICBsb25nCisjZGVmaW5lIENPTVBJTEVSX0RFUEVOREVOVF9VSU5UNjQgICB1bnNpZ25lZCBsb25nCisjZWxzZQorI2RlZmluZSBBQ1BJX01BQ0hJTkVfV0lEVEggICAgICAgICAgMzIKKyNkZWZpbmUgQ09NUElMRVJfREVQRU5ERU5UX0lOVDY0ICAgIGxvbmcgbG9uZworI2RlZmluZSBDT01QSUxFUl9ERVBFTkRFTlRfVUlOVDY0ICAgdW5zaWduZWQgbG9uZyBsb25nCisjZGVmaW5lIEFDUElfVVNFX05BVElWRV9ESVZJREUKKyNlbmRpZgorCisjZGVmaW5lIF9fY2RlY2wKKyNkZWZpbmUgQUNQSV9GTFVTSF9DUFVfQ0FDSEUoKQorI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworLyogTGludXggdXNlcyBHQ0MgKi8KKworI2luY2x1ZGUgImFjZ2NjLmgiCisKKyNlbmRpZiAvKiBfX0FDTElOVVhfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvcHJvY2Vzc29yLmggYi9pbmNsdWRlL2FjcGkvcHJvY2Vzc29yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY1MGE1YgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYWNwaS9wcm9jZXNzb3IuaApAQCAtMCwwICsxLDIzNSBAQAorI2lmbmRlZiBfX0FDUElfUFJPQ0VTU09SX0gKKyNkZWZpbmUgX19BQ1BJX1BST0NFU1NPUl9ICisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2RlZmluZSBBQ1BJX1BST0NFU1NPUl9CVVNZX01FVFJJQwkxMAorCisjZGVmaW5lIEFDUElfUFJPQ0VTU09SX01BWF9QT1dFUgk4CisjZGVmaW5lIEFDUElfUFJPQ0VTU09SX01BWF9DMl9MQVRFTkNZCTEwMAorI2RlZmluZSBBQ1BJX1BST0NFU1NPUl9NQVhfQzNfTEFURU5DWQkxMDAwCisKKyNkZWZpbmUgQUNQSV9QUk9DRVNTT1JfTUFYX1RIUk9UVExJTkcJMTYKKyNkZWZpbmUgQUNQSV9QUk9DRVNTT1JfTUFYX1RIUk9UVExFCTI1MAkvKiAyNSUgKi8KKyNkZWZpbmUgQUNQSV9QUk9DRVNTT1JfTUFYX0RVVFlfV0lEVEgJNAorCisvKiBQb3dlciBNYW5hZ2VtZW50ICovCisKK3N0cnVjdCBhY3BpX3Byb2Nlc3Nvcl9jeDsKKworc3RydWN0IGFjcGlfcG93ZXJfcmVnaXN0ZXIgeworCXU4CQkJZGVzY3JpcHRvcjsKKwl1MTYJCQlsZW5ndGg7CisJdTgJCQlzcGFjZV9pZDsKKwl1OAkJCWJpdF93aWR0aDsKKwl1OAkJCWJpdF9vZmZzZXQ7CisJdTgJCQlyZXNlcnZlZDsKKwl1NjQJCQlhZGRyZXNzOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKworc3RydWN0IGFjcGlfcHJvY2Vzc29yX2N4X3BvbGljeSB7CisJdTMyCQkJY291bnQ7CisJc3RydWN0IGFjcGlfcHJvY2Vzc29yX2N4ICpzdGF0ZTsKKwlzdHJ1Y3QgeworCQl1MzIJCQl0aW1lOworCQl1MzIJCQl0aWNrczsKKwkJdTMyCQkJY291bnQ7CisJCXUzMgkJCWJtOworCX0JCQl0aHJlc2hvbGQ7Cit9OworCitzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfY3ggeworCXU4CQkJdmFsaWQ7CisJdTgJCQl0eXBlOworCXUzMgkJCWFkZHJlc3M7CisJdTMyCQkJbGF0ZW5jeTsKKwl1MzIJCQlsYXRlbmN5X3RpY2tzOworCXUzMgkJCXBvd2VyOworCXUzMgkJCXVzYWdlOworCXN0cnVjdCBhY3BpX3Byb2Nlc3Nvcl9jeF9wb2xpY3kgcHJvbW90aW9uOworCXN0cnVjdCBhY3BpX3Byb2Nlc3Nvcl9jeF9wb2xpY3kgZGVtb3Rpb247Cit9OworCitzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfcG93ZXIgeworCXN0cnVjdCBhY3BpX3Byb2Nlc3Nvcl9jeCAqc3RhdGU7CisJdW5zaWduZWQgbG9uZwkJYm1fY2hlY2tfdGltZXN0YW1wOworCXUzMgkJCWRlZmF1bHRfc3RhdGU7CisJdTMyCQkJYm1fYWN0aXZpdHk7CisJaW50CQkJY291bnQ7CisJc3RydWN0IGFjcGlfcHJvY2Vzc29yX2N4IHN0YXRlc1tBQ1BJX1BST0NFU1NPUl9NQVhfUE9XRVJdOworfTsKKworLyogUGVyZm9ybWFuY2UgTWFuYWdlbWVudCAqLworCitzdHJ1Y3QgYWNwaV9wY3RfcmVnaXN0ZXIgeworCXU4CQkJZGVzY3JpcHRvcjsKKwl1MTYJCQlsZW5ndGg7CisJdTgJCQlzcGFjZV9pZDsKKwl1OAkJCWJpdF93aWR0aDsKKwl1OAkJCWJpdF9vZmZzZXQ7CisJdTgJCQlyZXNlcnZlZDsKKwl1NjQJCQlhZGRyZXNzOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBhY3BpX3Byb2Nlc3Nvcl9weCB7CisJYWNwaV9pbnRlZ2VyCQljb3JlX2ZyZXF1ZW5jeTsJCS8qIG1lZ2FoZXJ0eiAqLworCWFjcGlfaW50ZWdlcgkJcG93ZXI7CQkJLyogbWlsbGlXYXR0cyAqLworCWFjcGlfaW50ZWdlcgkJdHJhbnNpdGlvbl9sYXRlbmN5OwkvKiBtaWNyb3NlY29uZHMgKi8KKwlhY3BpX2ludGVnZXIJCWJ1c19tYXN0ZXJfbGF0ZW5jeTsJLyogbWljcm9zZWNvbmRzICovCisJYWNwaV9pbnRlZ2VyCQljb250cm9sOwkJLyogY29udHJvbCB2YWx1ZSAqLworCWFjcGlfaW50ZWdlcgkJc3RhdHVzOwkJCS8qIHN1Y2Nlc3MgaW5kaWNhdG9yICovCit9OworCisjZGVmaW5lIEFDUElfUERDX1JFVklTSU9OX0lEICAgICAgICAgICAgICAgICAgIDB4MQorCitzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfcGVyZm9ybWFuY2UgeworCXVuc2lnbmVkIGludAkJIHN0YXRlOworCXVuc2lnbmVkIGludAkJIHBsYXRmb3JtX2xpbWl0OworCXN0cnVjdCBhY3BpX3BjdF9yZWdpc3RlciBjb250cm9sX3JlZ2lzdGVyOworCXN0cnVjdCBhY3BpX3BjdF9yZWdpc3RlciBzdGF0dXNfcmVnaXN0ZXI7CisJdW5zaWduZWQgaW50CQkgc3RhdGVfY291bnQ7CisJc3RydWN0IGFjcGlfcHJvY2Vzc29yX3B4ICpzdGF0ZXM7CisKKwkvKiB0aGUgX1BEQyBvYmplY3RzIHBhc3NlZCBieSB0aGUgZHJpdmVyLCBpZiBhbnkgKi8KKwlzdHJ1Y3QgYWNwaV9vYmplY3RfbGlzdCAqcGRjOworfTsKKworCisKKy8qIFRocm90dGxpbmcgQ29udHJvbCAqLworCitzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfdHggeworCXUxNgkJCXBvd2VyOworCXUxNgkJCXBlcmZvcm1hbmNlOworfTsKKworc3RydWN0IGFjcGlfcHJvY2Vzc29yX3Rocm90dGxpbmcgeworCWludAkJCXN0YXRlOworCXUzMgkJCWFkZHJlc3M7CisJdTgJCQlkdXR5X29mZnNldDsKKwl1OAkJCWR1dHlfd2lkdGg7CisJaW50CQkJc3RhdGVfY291bnQ7CisJc3RydWN0IGFjcGlfcHJvY2Vzc29yX3R4IHN0YXRlc1tBQ1BJX1BST0NFU1NPUl9NQVhfVEhST1RUTElOR107Cit9OworCisvKiBMaW1pdCBJbnRlcmZhY2UgKi8KKworc3RydWN0IGFjcGlfcHJvY2Vzc29yX2x4IHsKKwlpbnQJCQlweDsJCS8qIHBlcmZvcm1hY2Ugc3RhdGUgKi8JCisJaW50CQkJdHg7CQkvKiB0aHJvdHRsZSBsZXZlbCAqLworfTsKKworc3RydWN0IGFjcGlfcHJvY2Vzc29yX2xpbWl0IHsKKwlzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfbHggc3RhdGU7CQkvKiBjdXJyZW50IGxpbWl0ICovCisJc3RydWN0IGFjcGlfcHJvY2Vzc29yX2x4IHRoZXJtYWw7CS8qIHRoZXJtYWwgbGltaXQgKi8KKwlzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfbHggdXNlcjsJCS8qIHVzZXIgbGltaXQgKi8KK307CisKKworc3RydWN0IGFjcGlfcHJvY2Vzc29yX2ZsYWdzIHsKKwl1OAkJCXBvd2VyOjE7CisJdTgJCQlwZXJmb3JtYW5jZToxOworCXU4CQkJdGhyb3R0bGluZzoxOworCXU4CQkJbGltaXQ6MTsKKwl1OAkJCWJtX2NvbnRyb2w6MTsKKwl1OAkJCWJtX2NoZWNrOjE7CisJdTgJCQloYXNfY3N0OjE7CisJdTgJCQlwb3dlcl9zZXR1cF9kb25lOjE7Cit9OworCitzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgeworCWFjcGlfaGFuZGxlCQloYW5kbGU7CisJdTMyCQkJYWNwaV9pZDsKKwl1MzIJCQlpZDsKKwl1MzIJCQlwYmxrOworCWludAkJCXBlcmZvcm1hbmNlX3BsYXRmb3JtX2xpbWl0OworCXN0cnVjdCBhY3BpX3Byb2Nlc3Nvcl9mbGFncyBmbGFnczsKKwlzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfcG93ZXIgcG93ZXI7CisJc3RydWN0IGFjcGlfcHJvY2Vzc29yX3BlcmZvcm1hbmNlICpwZXJmb3JtYW5jZTsKKwlzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfdGhyb3R0bGluZyB0aHJvdHRsaW5nOworCXN0cnVjdCBhY3BpX3Byb2Nlc3Nvcl9saW1pdCBsaW1pdDsKK307CisKK3N0cnVjdCBhY3BpX3Byb2Nlc3Nvcl9lcnJhdGEgeworCXU4CQkJc21wOworCXN0cnVjdCB7CisJCXU4CQkJdGhyb3R0bGU6MTsKKwkJdTgJCQlmZG1hOjE7CisJCXU4CQkJcmVzZXJ2ZWQ6NjsKKwkJdTMyCQkJYm1pc3g7CisJfQkJCXBpaXg0OworfTsKKworZXh0ZXJuIGludCBhY3BpX3Byb2Nlc3Nvcl9yZWdpc3Rlcl9wZXJmb3JtYW5jZSAoCisJc3RydWN0IGFjcGlfcHJvY2Vzc29yX3BlcmZvcm1hbmNlICogcGVyZm9ybWFuY2UsCisJdW5zaWduZWQgaW50IGNwdSk7CitleHRlcm4gdm9pZCBhY3BpX3Byb2Nlc3Nvcl91bnJlZ2lzdGVyX3BlcmZvcm1hbmNlICgKKwlzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfcGVyZm9ybWFuY2UgKiBwZXJmb3JtYW5jZSwKKwl1bnNpZ25lZCBpbnQgY3B1KTsKKworLyogbm90ZTogdGhpcyBsb2NrcyBib3RoIHRoZSBjYWxsaW5nIG1vZHVsZSBhbmQgdGhlIHByb2Nlc3NvciBtb2R1bGUKKyAgICAgICAgIGlmIGEgX1BQQyBvYmplY3QgZXhpc3RzLCBybW1vZCBpcyBkaXNhbGxvd2VkIHRoZW4gKi8KK2ludCBhY3BpX3Byb2Nlc3Nvcl9ub3RpZnlfc21tKHN0cnVjdCBtb2R1bGUgKmNhbGxpbmdfbW9kdWxlKTsKKworCisKKy8qIGZvciBjb21tdW5pY2F0aW9uIGJldHdlZW4gbXVsdGlwbGUgcGFydHMgb2YgdGhlIHByb2Nlc3NvciBrZXJuZWwgbW9kdWxlICovCitleHRlcm4gc3RydWN0IGFjcGlfcHJvY2Vzc29yCSpwcm9jZXNzb3JzW05SX0NQVVNdOworZXh0ZXJuIHN0cnVjdCBhY3BpX3Byb2Nlc3Nvcl9lcnJhdGEgZXJyYXRhOworCisvKiBpbiBwcm9jZXNzb3JfcGVyZmxpYi5jICovCisjaWZkZWYgQ09ORklHX0NQVV9GUkVRCit2b2lkIGFjcGlfcHJvY2Vzc29yX3BwY19pbml0KHZvaWQpOwordm9pZCBhY3BpX3Byb2Nlc3Nvcl9wcGNfZXhpdCh2b2lkKTsKK2ludCBhY3BpX3Byb2Nlc3Nvcl9wcGNfaGFzX2NoYW5nZWQoc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwcik7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGFjcGlfcHJvY2Vzc29yX3BwY19pbml0KHZvaWQpIHsgcmV0dXJuOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgYWNwaV9wcm9jZXNzb3JfcHBjX2V4aXQodm9pZCkgeyByZXR1cm47IH0KK3N0YXRpYyBpbmxpbmUgaW50IGFjcGlfcHJvY2Vzc29yX3BwY19oYXNfY2hhbmdlZChzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByKSB7CisJc3RhdGljIHVuc2lnbmVkIGludCBwcmludG91dCA9IDE7CisJaWYgKHByaW50b3V0KSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIldhcm5pbmc6IFByb2Nlc3NvciBQbGF0Zm9ybSBMaW1pdCBldmVudCBkZXRlY3RlZCwgYnV0IG5vdCBoYW5kbGVkLlxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkNvbnNpZGVyIGNvbXBpbGluZyBDUFVmcmVxIHN1cHBvcnQgaW50byB5b3VyIGtlcm5lbC5cbiIpOworCQlwcmludG91dCA9IDA7CisJfQorCXJldHVybiAwOworfQorI2VuZGlmIC8qIENPTkZJR19DUFVfRlJFUSAqLworCisvKiBpbiBwcm9jZXNzb3JfdGhyb3R0bGluZy5jICovCitpbnQgYWNwaV9wcm9jZXNzb3JfZ2V0X3Rocm90dGxpbmdfaW5mbyAoc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwcik7CitpbnQgYWNwaV9wcm9jZXNzb3Jfc2V0X3Rocm90dGxpbmcgKHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIsIGludCBzdGF0ZSk7Citzc2l6ZV90IGFjcGlfcHJvY2Vzc29yX3dyaXRlX3Rocm90dGxpbmcgKAorICAgICAgICBzdHJ1Y3QgZmlsZQkJKmZpbGUsCisgICAgICAgIGNvbnN0IGNoYXIJCV9fdXNlciAqYnVmZmVyLAorICAgICAgICBzaXplX3QJCQljb3VudCwKKyAgICAgICAgbG9mZl90CQkJKmRhdGEpOworZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWNwaV9wcm9jZXNzb3JfdGhyb3R0bGluZ19mb3BzOworCisvKiBpbiBwcm9jZXNzb3JfaWRsZS5jICovCitpbnQgYWNwaV9wcm9jZXNzb3JfcG93ZXJfaW5pdChzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByLCBzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSk7CitpbnQgYWNwaV9wcm9jZXNzb3JfY3N0X2hhc19jaGFuZ2VkIChzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByKTsKK2ludCBhY3BpX3Byb2Nlc3Nvcl9wb3dlcl9leGl0KHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIsIHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKTsKKworCisvKiBpbiBwcm9jZXNzb3JfdGhlcm1hbC5jICovCitpbnQgYWNwaV9wcm9jZXNzb3JfZ2V0X2xpbWl0X2luZm8gKHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIpOworc3NpemVfdCBhY3BpX3Byb2Nlc3Nvcl93cml0ZV9saW1pdCAoCisJc3RydWN0IGZpbGUJCSpmaWxlLAorCWNvbnN0IGNoYXIJCV9fdXNlciAqYnVmZmVyLAorCXNpemVfdAkJCWNvdW50LAorCWxvZmZfdAkJCSpkYXRhKTsKK2V4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFjcGlfcHJvY2Vzc29yX2xpbWl0X2ZvcHM7CisKKyNpZmRlZiBDT05GSUdfQ1BVX0ZSRVEKK3ZvaWQgYWNwaV90aGVybWFsX2NwdWZyZXFfaW5pdCh2b2lkKTsKK3ZvaWQgYWNwaV90aGVybWFsX2NwdWZyZXFfZXhpdCh2b2lkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgYWNwaV90aGVybWFsX2NwdWZyZXFfaW5pdCh2b2lkKSB7IHJldHVybjsgfQorc3RhdGljIGlubGluZSB2b2lkIGFjcGlfdGhlcm1hbF9jcHVmcmVxX2V4aXQodm9pZCkgeyByZXR1cm47IH0KKyNlbmRpZgorCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvODI1M3BpdC5oIGIvaW5jbHVkZS9hc20tYWxwaGEvODI1M3BpdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlZjVjMTQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS84MjUzcGl0LmgKQEAgLTAsMCArMSwxMCBAQAorLyoKKyAqIDgyNTMvODI1NCBQcm9ncmFtbWFibGUgSW50ZXJ2YWwgVGltZXIKKyAqLworCisjaWZuZGVmIF84MjUzUElUX0gKKyNkZWZpbmUgXzgyNTNQSVRfSAorCisjZGVmaW5lIFBJVF9USUNLX1JBVEUgCTExOTMxODBVTAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL2Eub3V0LmggYi9pbmNsdWRlL2FzbS1hbHBoYS9hLm91dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5N2RhZjQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9hLm91dC5oCkBAIC0wLDAgKzEsMTA2IEBACisjaWZuZGVmIF9fQUxQSEFfQV9PVVRfSF9fCisjZGVmaW5lIF9fQUxQSEFfQV9PVVRfSF9fCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKgorICogT1NGLzEgRUNPRkYgaGVhZGVyIHN0cnVjdHMuICBFQ09GRiBmaWxlcyBjb25zaXN0IG9mOgorICogCS0gYSBmaWxlIGhlYWRlciAoc3RydWN0IGZpbGVoZHIpLAorICoJLSBhbiBhLm91dCBoZWFkZXIgKHN0cnVjdCBhb3V0aGRyKSwKKyAqCS0gb25lIG9yIG1vcmUgc2VjdGlvbiBoZWFkZXJzIChzdHJ1Y3Qgc2NuaGRyKS4gCisgKgkgIFRoZSBmaWxoZHIncyAiZl9uc2NucyIgZmllbGQgY29udGFpbnMgdGhlCisgKgkgIG51bWJlciBvZiBzZWN0aW9uIGhlYWRlcnMuCisgKi8KKworc3RydWN0IGZpbGVoZHIKK3sKKwkvKiBPU0YvMSAiZmlsZSIgaGVhZGVyICovCisJX191MTYgZl9tYWdpYywgZl9uc2NuczsKKwlfX3UzMiBmX3RpbWRhdDsKKwlfX3U2NCBmX3N5bXB0cjsKKwlfX3UzMiBmX25zeW1zOworCV9fdTE2IGZfb3B0aGRyLCBmX2ZsYWdzOworfTsKKworc3RydWN0IGFvdXRoZHIKK3sKKwlfX3U2NCBpbmZvOwkJLyogYWZ0ZXIgdGhhdCBpdCBsb29rcyBxdWl0ZSBub3JtYWwuLiAqLworCV9fdTY0IHRzaXplOworCV9fdTY0IGRzaXplOworCV9fdTY0IGJzaXplOworCV9fdTY0IGVudHJ5OworCV9fdTY0IHRleHRfc3RhcnQ7CS8qIHdpdGggYSBmZXcgYWRkaXRpb25zIHRoYXQgYWN0dWFsbHkgbWFrZSBzZW5zZSAqLworCV9fdTY0IGRhdGFfc3RhcnQ7CisJX191NjQgYnNzX3N0YXJ0OworCV9fdTMyIGdwcm1hc2ssIGZwcm1hc2s7CS8qIGJpdG1hc2sgb2YgZ2VuZXJhbCAmIGZsb2F0aW5nIHBvaW50IHJlZ3MgdXNlZCBpbiBiaW5hcnkgKi8KKwlfX3U2NCBncHZhbHVlOworfTsKKworc3RydWN0IHNjbmhkcgoreworCWNoYXIJc19uYW1lWzhdOworCV9fdTY0CXNfcGFkZHI7CisJX191NjQJc192YWRkcjsKKwlfX3U2NAlzX3NpemU7CisJX191NjQJc19zY25wdHI7CisJX191NjQJc19yZWxwdHI7CisJX191NjQJc19sbm5vcHRyOworCV9fdTE2CXNfbnJlbG9jOworCV9fdTE2CXNfbmxubm87CisJX191MzIJc19mbGFnczsKK307CisKK3N0cnVjdCBleGVjCit7CisJLyogT1NGLzEgImZpbGUiIGhlYWRlciAqLworCXN0cnVjdCBmaWxlaGRyCQlmaDsKKwlzdHJ1Y3QgYW91dGhkcgkJYWg7Cit9OworCisvKgorICogRGVmaW5lJ3Mgc28gdGhhdCB0aGUga2VybmVsIGV4ZWMgY29kZSBjYW4gYWNjZXNzIHRoZSBhLm91dCBoZWFkZXIKKyAqIGZpZWxkcy4uLgorICovCisjZGVmaW5lCWFfaW5mbwkJYWguaW5mbworI2RlZmluZQlhX3RleHQJCWFoLnRzaXplCisjZGVmaW5lIGFfZGF0YQkJYWguZHNpemUKKyNkZWZpbmUgYV9ic3MJCWFoLmJzaXplCisjZGVmaW5lIGFfZW50cnkJCWFoLmVudHJ5CisjZGVmaW5lIGFfdGV4dHN0YXJ0CWFoLnRleHRfc3RhcnQKKyNkZWZpbmUJYV9kYXRhc3RhcnQJYWguZGF0YV9zdGFydAorI2RlZmluZQlhX2Jzc3N0YXJ0CWFoLmJzc19zdGFydAorI2RlZmluZQlhX2dwcm1hc2sJYWguZ3BybWFzaworI2RlZmluZSBhX2Zwcm1hc2sJYWguZnBybWFzaworI2RlZmluZSBhX2dwdmFsdWUJYWguZ3B2YWx1ZQorCisjZGVmaW5lIE5fVFhUQUREUih4KSAoKHgpLmFfdGV4dHN0YXJ0KQorI2RlZmluZSBOX0RBVEFERFIoeCkgKCh4KS5hX2RhdGFzdGFydCkKKyNkZWZpbmUgTl9CU1NBRERSKHgpICgoeCkuYV9ic3NzdGFydCkKKyNkZWZpbmUgTl9EUlNJWkUoeCkgMAorI2RlZmluZSBOX1RSU0laRSh4KSAwCisjZGVmaW5lIE5fU1lNU0laRSh4KSAwCisKKyNkZWZpbmUgQU9VVEhTWgkJc2l6ZW9mKHN0cnVjdCBhb3V0aGRyKQorI2RlZmluZSBTQ05IU1oJCXNpemVvZihzdHJ1Y3Qgc2NuaGRyKQorI2RlZmluZSBTQ05ST1VORAkxNgorCisjZGVmaW5lIE5fVFhUT0ZGKHgpIFwKKyAgKChsb25nKSBOX01BR0lDKHgpID09IFpNQUdJQyA/IDAgOiBcCisgICAoc2l6ZW9mKHN0cnVjdCBleGVjKSArICh4KS5maC5mX25zY25zKlNDTkhTWiArIFNDTlJPVU5EIC0gMSkgJiB+KFNDTlJPVU5EIC0gMSkpCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKy8qIEFzc3VtZSB0aGF0IHN0YXJ0IGFkZHJlc3NlcyBiZWxvdyA0RyBiZWxvbmcgdG8gYSBUQVNPIGFwcGxpY2F0aW9uLgorICAgVW5mb3J0dW5hdGVseSwgdGhlcmUgaXMgbm8gcHJvcGVyIGJpdCBpbiB0aGUgZXhlYyBoZWFkZXIgdG8gY2hlY2suCisgICBXb3JzZSwgd2UgaGF2ZSB0byBub3RpY2UgdGhlIHN0YXJ0IGFkZHJlc3MgYmVmb3JlIHN3YXBwaW5nIHRvIHVzZQorICAgL3NiaW4vbG9hZGVyLCB3aGljaCBvZiBjb3Vyc2UgaXMgX25vdF8gYSBUQVNPIGFwcGxpY2F0aW9uLiAgKi8KKyNkZWZpbmUgU0VUX0FPVVRfUEVSU09OQUxJVFkoQkZQTSwgRVgpIFwKKwlzZXRfcGVyc29uYWxpdHkgKCgoQkZQTS0+c2hfYmFuZyB8fCBFWC5haC5lbnRyeSA8IDB4MTAwMDAwMDAwTCBcCisJCQkgICA/IEFERFJfTElNSVRfMzJCSVQgOiAwKSB8IFBFUl9PU0Y0KSkKKworI2RlZmluZSBTVEFDS19UT1AgXAorICAoY3VycmVudC0+cGVyc29uYWxpdHkgJiBBRERSX0xJTUlUXzMyQklUID8gMHg4MDAwMDAwMCA6IDB4MDAxMjAwMDAwMDBVTCkKKworI2VuZGlmCisKKyNlbmRpZiAvKiBfX0FfT1VUX0dOVV9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL2FncC5oIGIvaW5jbHVkZS9hc20tYWxwaGEvYWdwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk5ZGJiYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL2FncC5oCkBAIC0wLDAgKzEsMTMgQEAKKyNpZm5kZWYgQUdQX0gKKyNkZWZpbmUgQUdQX0ggMQorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKy8qIGR1bW15IGZvciBub3cgKi8KKworI2RlZmluZSBtYXBfcGFnZV9pbnRvX2FncChwYWdlKSAKKyNkZWZpbmUgdW5tYXBfcGFnZV9mcm9tX2FncChwYWdlKSAKKyNkZWZpbmUgZmx1c2hfYWdwX21hcHBpbmdzKCkgCisjZGVmaW5lIGZsdXNoX2FncF9jYWNoZSgpIG1iKCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9hZ3BfYmFja2VuZC5oIGIvaW5jbHVkZS9hc20tYWxwaGEvYWdwX2JhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWRkNDRhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvYWdwX2JhY2tlbmQuaApAQCAtMCwwICsxLDQyIEBACisjaWZuZGVmIF9BTFBIQV9BR1BfQkFDS0VORF9ICisjZGVmaW5lIF9BTFBIQV9BR1BfQkFDS0VORF9IIDEKKwordHlwZWRlZgl1bmlvbiBfYWxwaGFfYWdwX21vZGUgeworCXN0cnVjdCB7CisJCXUzMiByYXRlIDogMzsKKwkJdTMyIHJlc2VydmVkMCA6IDE7CisJCXUzMiBmdyA6IDE7CisJCXUzMiBmb3VyZ2IgOiAxOworCQl1MzIgcmVzZXJ2ZWQxIDogMjsKKwkJdTMyIGVuYWJsZSA6IDE7CisJCXUzMiBzYmEgOiAxOworCQl1MzIgcmVzZXJ2ZWQyIDogMTQ7CisJCXUzMiBycSA6IDg7CisJfSBiaXRzOworCXUzMiBsdzsKK30gYWxwaGFfYWdwX21vZGU7CisKK3R5cGVkZWYgc3RydWN0IF9hbHBoYV9hZ3BfaW5mbyB7CisJc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlOworCXN0cnVjdCB7CisJCWRtYV9hZGRyX3QgYnVzX2Jhc2U7CisJCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwkJdm9pZCAqc3lzZGF0YTsKKwl9IGFwZXJ0dXJlOworCWFscGhhX2FncF9tb2RlIGNhcGFiaWxpdHk7CisJYWxwaGFfYWdwX21vZGUgbW9kZTsKKwl2b2lkICpwcml2YXRlOworCXN0cnVjdCBhbHBoYV9hZ3Bfb3BzICpvcHM7Cit9IGFscGhhX2FncF9pbmZvOworCitzdHJ1Y3QgYWxwaGFfYWdwX29wcyB7CisJaW50ICgqc2V0dXApKGFscGhhX2FncF9pbmZvICopOworCXZvaWQgKCpjbGVhbnVwKShhbHBoYV9hZ3BfaW5mbyAqKTsKKwlpbnQgKCpjb25maWd1cmUpKGFscGhhX2FncF9pbmZvICopOworCWludCAoKmJpbmQpKGFscGhhX2FncF9pbmZvICosIG9mZl90LCBzdHJ1Y3QgYWdwX21lbW9yeSAqKTsKKwlpbnQgKCp1bmJpbmQpKGFscGhhX2FncF9pbmZvICosIG9mZl90LCBzdHJ1Y3QgYWdwX21lbW9yeSAqKTsKKwl1bnNpZ25lZCBsb25nICgqdHJhbnNsYXRlKShhbHBoYV9hZ3BfaW5mbyAqLCBkbWFfYWRkcl90KTsKK307CisKKworI2VuZGlmIC8qIF9BTFBIQV9BR1BfQkFDS0VORF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9hdG9taWMuaCBiL2luY2x1ZGUvYXNtLWFscGhhL2F0b21pYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMzgzZTMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9hdG9taWMuaApAQCAtMCwwICsxLDE5OCBAQAorI2lmbmRlZiBfQUxQSEFfQVRPTUlDX0gKKyNkZWZpbmUgX0FMUEhBX0FUT01JQ19ICisKKy8qCisgKiBBdG9taWMgb3BlcmF0aW9ucyB0aGF0IEMgY2FuJ3QgZ3VhcmFudGVlIHVzLiAgVXNlZnVsIGZvcgorICogcmVzb3VyY2UgY291bnRpbmcgZXRjLi4uCisgKgorICogQnV0IHVzZSB0aGVzZSBhcyBzZWxkb20gYXMgcG9zc2libGUgc2luY2UgdGhleSBhcmUgbXVjaCBzbG93ZXIKKyAqIHRoYW4gcmVndWxhciBvcGVyYXRpb25zLgorICovCisKKworLyoKKyAqIENvdW50ZXIgaXMgdm9sYXRpbGUgdG8gbWFrZSBzdXJlIGdjYyBkb2Vzbid0IHRyeSB0byBiZSBjbGV2ZXIKKyAqIGFuZCBtb3ZlIHRoaW5ncyBhcm91bmQgb24gdXMuIFdlIG5lZWQgdG8gdXNlIF9leGFjdGx5XyB0aGUgYWRkcmVzcworICogdGhlIHVzZXIgZ2F2ZSB1cywgbm90IHNvbWUgYWxpYXMgdGhhdCBjb250YWlucyB0aGUgc2FtZSBpbmZvcm1hdGlvbi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeyB2b2xhdGlsZSBpbnQgY291bnRlcjsgfSBhdG9taWNfdDsKK3R5cGVkZWYgc3RydWN0IHsgdm9sYXRpbGUgbG9uZyBjb3VudGVyOyB9IGF0b21pYzY0X3Q7CisKKyNkZWZpbmUgQVRPTUlDX0lOSVQoaSkJCSggKGF0b21pY190KSB7IChpKSB9ICkKKyNkZWZpbmUgQVRPTUlDNjRfSU5JVChpKQkoIChhdG9taWM2NF90KSB7IChpKSB9ICkKKworI2RlZmluZSBhdG9taWNfcmVhZCh2KQkJKCh2KS0+Y291bnRlciArIDApCisjZGVmaW5lIGF0b21pYzY0X3JlYWQodikJKCh2KS0+Y291bnRlciArIDApCisKKyNkZWZpbmUgYXRvbWljX3NldCh2LGkpCQkoKHYpLT5jb3VudGVyID0gKGkpKQorI2RlZmluZSBhdG9taWM2NF9zZXQodixpKQkoKHYpLT5jb3VudGVyID0gKGkpKQorCisvKgorICogVG8gZ2V0IHByb3BlciBicmFuY2ggcHJlZGljdGlvbiBmb3IgdGhlIG1haW4gbGluZSwgd2UgbXVzdCBicmFuY2gKKyAqIGZvcndhcmQgdG8gY29kZSBhdCB0aGUgZW5kIG9mIHRoaXMgb2JqZWN0J3MgLnRleHQgc2VjdGlvbiwgdGhlbgorICogYnJhbmNoIGJhY2sgdG8gcmVzdGFydCB0aGUgb3BlcmF0aW9uLgorICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgYXRvbWljX2FkZChpbnQgaSwgYXRvbWljX3QgKiB2KQoreworCXVuc2lnbmVkIGxvbmcgdGVtcDsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkiMToJbGRsX2wgJTAsJTFcbiIKKwkiCWFkZGwgJTAsJTIsJTBcbiIKKwkiCXN0bF9jICUwLCUxXG4iCisJIgliZXEgJTAsMmZcbiIKKwkiLnN1YnNlY3Rpb24gMlxuIgorCSIyOgliciAxYlxuIgorCSIucHJldmlvdXMiCisJOiI9JnIiICh0ZW1wKSwgIj1tIiAodi0+Y291bnRlcikKKwk6IklyIiAoaSksICJtIiAodi0+Y291bnRlcikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGF0b21pYzY0X2FkZChsb25nIGksIGF0b21pYzY0X3QgKiB2KQoreworCXVuc2lnbmVkIGxvbmcgdGVtcDsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkiMToJbGRxX2wgJTAsJTFcbiIKKwkiCWFkZHEgJTAsJTIsJTBcbiIKKwkiCXN0cV9jICUwLCUxXG4iCisJIgliZXEgJTAsMmZcbiIKKwkiLnN1YnNlY3Rpb24gMlxuIgorCSIyOgliciAxYlxuIgorCSIucHJldmlvdXMiCisJOiI9JnIiICh0ZW1wKSwgIj1tIiAodi0+Y291bnRlcikKKwk6IklyIiAoaSksICJtIiAodi0+Y291bnRlcikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGF0b21pY19zdWIoaW50IGksIGF0b21pY190ICogdikKK3sKKwl1bnNpZ25lZCBsb25nIHRlbXA7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJIjE6CWxkbF9sICUwLCUxXG4iCisJIglzdWJsICUwLCUyLCUwXG4iCisJIglzdGxfYyAlMCwlMVxuIgorCSIJYmVxICUwLDJmXG4iCisJIi5zdWJzZWN0aW9uIDJcbiIKKwkiMjoJYnIgMWJcbiIKKwkiLnByZXZpb3VzIgorCToiPSZyIiAodGVtcCksICI9bSIgKHYtPmNvdW50ZXIpCisJOiJJciIgKGkpLCAibSIgKHYtPmNvdW50ZXIpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBhdG9taWM2NF9zdWIobG9uZyBpLCBhdG9taWM2NF90ICogdikKK3sKKwl1bnNpZ25lZCBsb25nIHRlbXA7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJIjE6CWxkcV9sICUwLCUxXG4iCisJIglzdWJxICUwLCUyLCUwXG4iCisJIglzdHFfYyAlMCwlMVxuIgorCSIJYmVxICUwLDJmXG4iCisJIi5zdWJzZWN0aW9uIDJcbiIKKwkiMjoJYnIgMWJcbiIKKwkiLnByZXZpb3VzIgorCToiPSZyIiAodGVtcCksICI9bSIgKHYtPmNvdW50ZXIpCisJOiJJciIgKGkpLCAibSIgKHYtPmNvdW50ZXIpKTsKK30KKworCisvKgorICogU2FtZSBhcyBhYm92ZSwgYnV0IHJldHVybiB0aGUgcmVzdWx0IHZhbHVlCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIGxvbmcgYXRvbWljX2FkZF9yZXR1cm4oaW50IGksIGF0b21pY190ICogdikKK3sKKwlsb25nIHRlbXAsIHJlc3VsdDsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkiMToJbGRsX2wgJTAsJTFcbiIKKwkiCWFkZGwgJTAsJTMsJTJcbiIKKwkiCWFkZGwgJTAsJTMsJTBcbiIKKwkiCXN0bF9jICUwLCUxXG4iCisJIgliZXEgJTAsMmZcbiIKKwkiCW1iXG4iCisJIi5zdWJzZWN0aW9uIDJcbiIKKwkiMjoJYnIgMWJcbiIKKwkiLnByZXZpb3VzIgorCToiPSZyIiAodGVtcCksICI9bSIgKHYtPmNvdW50ZXIpLCAiPSZyIiAocmVzdWx0KQorCToiSXIiIChpKSwgIm0iICh2LT5jb3VudGVyKSA6ICJtZW1vcnkiKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisjZGVmaW5lIGF0b21pY19hZGRfbmVnYXRpdmUoYSwgdikJKGF0b21pY19hZGRfcmV0dXJuKChhKSwgKHYpKSA8IDApCisKK3N0YXRpYyBfX2lubGluZV9fIGxvbmcgYXRvbWljNjRfYWRkX3JldHVybihsb25nIGksIGF0b21pYzY0X3QgKiB2KQoreworCWxvbmcgdGVtcCwgcmVzdWx0OworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCSIxOglsZHFfbCAlMCwlMVxuIgorCSIJYWRkcSAlMCwlMywlMlxuIgorCSIJYWRkcSAlMCwlMywlMFxuIgorCSIJc3RxX2MgJTAsJTFcbiIKKwkiCWJlcSAlMCwyZlxuIgorCSIJbWJcbiIKKwkiLnN1YnNlY3Rpb24gMlxuIgorCSIyOgliciAxYlxuIgorCSIucHJldmlvdXMiCisJOiI9JnIiICh0ZW1wKSwgIj1tIiAodi0+Y291bnRlciksICI9JnIiIChyZXN1bHQpCisJOiJJciIgKGkpLCAibSIgKHYtPmNvdW50ZXIpIDogIm1lbW9yeSIpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGxvbmcgYXRvbWljX3N1Yl9yZXR1cm4oaW50IGksIGF0b21pY190ICogdikKK3sKKwlsb25nIHRlbXAsIHJlc3VsdDsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkiMToJbGRsX2wgJTAsJTFcbiIKKwkiCXN1YmwgJTAsJTMsJTJcbiIKKwkiCXN1YmwgJTAsJTMsJTBcbiIKKwkiCXN0bF9jICUwLCUxXG4iCisJIgliZXEgJTAsMmZcbiIKKwkiCW1iXG4iCisJIi5zdWJzZWN0aW9uIDJcbiIKKwkiMjoJYnIgMWJcbiIKKwkiLnByZXZpb3VzIgorCToiPSZyIiAodGVtcCksICI9bSIgKHYtPmNvdW50ZXIpLCAiPSZyIiAocmVzdWx0KQorCToiSXIiIChpKSwgIm0iICh2LT5jb3VudGVyKSA6ICJtZW1vcnkiKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgX19pbmxpbmVfXyBsb25nIGF0b21pYzY0X3N1Yl9yZXR1cm4obG9uZyBpLCBhdG9taWM2NF90ICogdikKK3sKKwlsb25nIHRlbXAsIHJlc3VsdDsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkiMToJbGRxX2wgJTAsJTFcbiIKKwkiCXN1YnEgJTAsJTMsJTJcbiIKKwkiCXN1YnEgJTAsJTMsJTBcbiIKKwkiCXN0cV9jICUwLCUxXG4iCisJIgliZXEgJTAsMmZcbiIKKwkiCW1iXG4iCisJIi5zdWJzZWN0aW9uIDJcbiIKKwkiMjoJYnIgMWJcbiIKKwkiLnByZXZpb3VzIgorCToiPSZyIiAodGVtcCksICI9bSIgKHYtPmNvdW50ZXIpLCAiPSZyIiAocmVzdWx0KQorCToiSXIiIChpKSwgIm0iICh2LT5jb3VudGVyKSA6ICJtZW1vcnkiKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisjZGVmaW5lIGF0b21pY19kZWNfcmV0dXJuKHYpIGF0b21pY19zdWJfcmV0dXJuKDEsKHYpKQorI2RlZmluZSBhdG9taWM2NF9kZWNfcmV0dXJuKHYpIGF0b21pYzY0X3N1Yl9yZXR1cm4oMSwodikpCisKKyNkZWZpbmUgYXRvbWljX2luY19yZXR1cm4odikgYXRvbWljX2FkZF9yZXR1cm4oMSwodikpCisjZGVmaW5lIGF0b21pYzY0X2luY19yZXR1cm4odikgYXRvbWljNjRfYWRkX3JldHVybigxLCh2KSkKKworI2RlZmluZSBhdG9taWNfc3ViX2FuZF90ZXN0KGksdikgKGF0b21pY19zdWJfcmV0dXJuKChpKSwgKHYpKSA9PSAwKQorI2RlZmluZSBhdG9taWM2NF9zdWJfYW5kX3Rlc3QoaSx2KSAoYXRvbWljNjRfc3ViX3JldHVybigoaSksICh2KSkgPT0gMCkKKworI2RlZmluZSBhdG9taWNfaW5jX2FuZF90ZXN0KHYpIChhdG9taWNfYWRkX3JldHVybigxLCAodikpID09IDApCisjZGVmaW5lIGF0b21pY19kZWNfYW5kX3Rlc3QodikgKGF0b21pY19zdWJfcmV0dXJuKDEsICh2KSkgPT0gMCkKKyNkZWZpbmUgYXRvbWljNjRfZGVjX2FuZF90ZXN0KHYpIChhdG9taWM2NF9zdWJfcmV0dXJuKDEsICh2KSkgPT0gMCkKKworI2RlZmluZSBhdG9taWNfaW5jKHYpIGF0b21pY19hZGQoMSwodikpCisjZGVmaW5lIGF0b21pYzY0X2luYyh2KSBhdG9taWM2NF9hZGQoMSwodikpCisKKyNkZWZpbmUgYXRvbWljX2RlYyh2KSBhdG9taWNfc3ViKDEsKHYpKQorI2RlZmluZSBhdG9taWM2NF9kZWModikgYXRvbWljNjRfc3ViKDEsKHYpKQorCisjZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19kZWMoKQlzbXBfbWIoKQorI2RlZmluZSBzbXBfbWJfX2FmdGVyX2F0b21pY19kZWMoKQlzbXBfbWIoKQorI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfaW5jKCkJc21wX21iKCkKKyNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWNfaW5jKCkJc21wX21iKCkKKworI2VuZGlmIC8qIF9BTFBIQV9BVE9NSUNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvYml0b3BzLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9iaXRvcHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzhlZDNmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvYml0b3BzLmgKQEAgLTAsMCArMSw1MDcgQEAKKyNpZm5kZWYgX0FMUEhBX0JJVE9QU19ICisjZGVmaW5lIF9BTFBIQV9CSVRPUFNfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL2NvbXBpbGVyLmg+CisKKy8qCisgKiBDb3B5cmlnaHQgMTk5NCwgTGludXMgVG9ydmFsZHMuCisgKi8KKworLyoKKyAqIFRoZXNlIGhhdmUgdG8gYmUgZG9uZSB3aXRoIGlubGluZSBhc3NlbWJseTogdGhhdCB3YXkgdGhlIGJpdC1zZXR0aW5nCisgKiBpcyBndWFyYW50ZWVkIHRvIGJlIGF0b21pYy4gQWxsIGJpdCBvcGVyYXRpb25zIHJldHVybiAwIGlmIHRoZSBiaXQKKyAqIHdhcyBjbGVhcmVkIGJlZm9yZSB0aGUgb3BlcmF0aW9uIGFuZCAhPSAwIGlmIGl0IHdhcyBub3QuCisgKgorICogVG8gZ2V0IHByb3BlciBicmFuY2ggcHJlZGljdGlvbiBmb3IgdGhlIG1haW4gbGluZSwgd2UgbXVzdCBicmFuY2gKKyAqIGZvcndhcmQgdG8gY29kZSBhdCB0aGUgZW5kIG9mIHRoaXMgb2JqZWN0J3MgLnRleHQgc2VjdGlvbiwgdGhlbgorICogYnJhbmNoIGJhY2sgdG8gcmVzdGFydCB0aGUgb3BlcmF0aW9uLgorICoKKyAqIGJpdCAwIGlzIHRoZSBMU0Igb2YgYWRkcjsgYml0IDY0IGlzIHRoZSBMU0Igb2YgKGFkZHIrMSkuCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitzZXRfYml0KHVuc2lnbmVkIGxvbmcgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQoreworCXVuc2lnbmVkIGxvbmcgdGVtcDsKKwlpbnQgKm0gPSAoKGludCAqKSBhZGRyKSArIChuciA+PiA1KTsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCSIxOglsZGxfbCAlMCwlM1xuIgorCSIJYmlzICUwLCUyLCUwXG4iCisJIglzdGxfYyAlMCwlMVxuIgorCSIJYmVxICUwLDJmXG4iCisJIi5zdWJzZWN0aW9uIDJcbiIKKwkiMjoJYnIgMWJcbiIKKwkiLnByZXZpb3VzIgorCToiPSZyIiAodGVtcCksICI9bSIgKCptKQorCToiSXIiICgxVUwgPDwgKG5yICYgMzEpKSwgIm0iICgqbSkpOworfQorCisvKgorICogV0FSTklORzogbm9uIGF0b21pYyB2ZXJzaW9uLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK19fc2V0X2JpdCh1bnNpZ25lZCBsb25nIG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKK3sKKwlpbnQgKm0gPSAoKGludCAqKSBhZGRyKSArIChuciA+PiA1KTsKKworCSptIHw9IDEgPDwgKG5yICYgMzEpOworfQorCisjZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpCXNtcF9tYigpCisjZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCkJc21wX21iKCkKKworc3RhdGljIGlubGluZSB2b2lkCitjbGVhcl9iaXQodW5zaWduZWQgbG9uZyBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCit7CisJdW5zaWduZWQgbG9uZyB0ZW1wOworCWludCAqbSA9ICgoaW50ICopIGFkZHIpICsgKG5yID4+IDUpOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJIjE6CWxkbF9sICUwLCUzXG4iCisJIgliaWMgJTAsJTIsJTBcbiIKKwkiCXN0bF9jICUwLCUxXG4iCisJIgliZXEgJTAsMmZcbiIKKwkiLnN1YnNlY3Rpb24gMlxuIgorCSIyOgliciAxYlxuIgorCSIucHJldmlvdXMiCisJOiI9JnIiICh0ZW1wKSwgIj1tIiAoKm0pCisJOiJJciIgKDFVTCA8PCAobnIgJiAzMSkpLCAibSIgKCptKSk7Cit9CisKKy8qCisgKiBXQVJOSU5HOiBub24gYXRvbWljIHZlcnNpb24uCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQKK19fY2xlYXJfYml0KHVuc2lnbmVkIGxvbmcgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQoreworCWludCAqbSA9ICgoaW50ICopIGFkZHIpICsgKG5yID4+IDUpOworCisJKm0gJj0gfigxIDw8IChuciAmIDMxKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorY2hhbmdlX2JpdCh1bnNpZ25lZCBsb25nIG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIHRlbXA7CisJaW50ICptID0gKChpbnQgKikgYWRkcikgKyAobnIgPj4gNSk7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkiMToJbGRsX2wgJTAsJTNcbiIKKwkiCXhvciAlMCwlMiwlMFxuIgorCSIJc3RsX2MgJTAsJTFcbiIKKwkiCWJlcSAlMCwyZlxuIgorCSIuc3Vic2VjdGlvbiAyXG4iCisJIjI6CWJyIDFiXG4iCisJIi5wcmV2aW91cyIKKwk6Ij0mciIgKHRlbXApLCAiPW0iICgqbSkKKwk6IklyIiAoMVVMIDw8IChuciAmIDMxKSksICJtIiAoKm0pKTsKK30KKworLyoKKyAqIFdBUk5JTkc6IG5vbiBhdG9taWMgdmVyc2lvbi4KKyAqLworc3RhdGljIF9faW5saW5lX18gdm9pZAorX19jaGFuZ2VfYml0KHVuc2lnbmVkIGxvbmcgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQoreworCWludCAqbSA9ICgoaW50ICopIGFkZHIpICsgKG5yID4+IDUpOworCisJKm0gXj0gMSA8PCAobnIgJiAzMSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50Cit0ZXN0X2FuZF9zZXRfYml0KHVuc2lnbmVkIGxvbmcgbnIsIHZvbGF0aWxlIHZvaWQgKmFkZHIpCit7CisJdW5zaWduZWQgbG9uZyBvbGRiaXQ7CisJdW5zaWduZWQgbG9uZyB0ZW1wOworCWludCAqbSA9ICgoaW50ICopIGFkZHIpICsgKG5yID4+IDUpOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJIjE6CWxkbF9sICUwLCU0XG4iCisJIglhbmQgJTAsJTMsJTJcbiIKKwkiCWJuZSAlMiwyZlxuIgorCSIJeG9yICUwLCUzLCUwXG4iCisJIglzdGxfYyAlMCwlMVxuIgorCSIJYmVxICUwLDNmXG4iCisJIjI6XG4iCisjaWZkZWYgQ09ORklHX1NNUAorCSIJbWJcbiIKKyNlbmRpZgorCSIuc3Vic2VjdGlvbiAyXG4iCisJIjM6CWJyIDFiXG4iCisJIi5wcmV2aW91cyIKKwk6Ij0mciIgKHRlbXApLCAiPW0iICgqbSksICI9JnIiIChvbGRiaXQpCisJOiJJciIgKDFVTCA8PCAobnIgJiAzMSkpLCAibSIgKCptKSA6ICJtZW1vcnkiKTsKKworCXJldHVybiBvbGRiaXQgIT0gMDsKK30KKworLyoKKyAqIFdBUk5JTkc6IG5vbiBhdG9taWMgdmVyc2lvbi4KKyAqLworc3RhdGljIGlubGluZSBpbnQKK19fdGVzdF9hbmRfc2V0X2JpdCh1bnNpZ25lZCBsb25nIG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIG1hc2sgPSAxIDw8IChuciAmIDB4MWYpOworCWludCAqbSA9ICgoaW50ICopIGFkZHIpICsgKG5yID4+IDUpOworCWludCBvbGQgPSAqbTsKKworCSptID0gb2xkIHwgbWFzazsKKwlyZXR1cm4gKG9sZCAmIG1hc2spICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50Cit0ZXN0X2FuZF9jbGVhcl9iaXQodW5zaWduZWQgbG9uZyBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCit7CisJdW5zaWduZWQgbG9uZyBvbGRiaXQ7CisJdW5zaWduZWQgbG9uZyB0ZW1wOworCWludCAqbSA9ICgoaW50ICopIGFkZHIpICsgKG5yID4+IDUpOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJIjE6CWxkbF9sICUwLCU0XG4iCisJIglhbmQgJTAsJTMsJTJcbiIKKwkiCWJlcSAlMiwyZlxuIgorCSIJeG9yICUwLCUzLCUwXG4iCisJIglzdGxfYyAlMCwlMVxuIgorCSIJYmVxICUwLDNmXG4iCisJIjI6XG4iCisjaWZkZWYgQ09ORklHX1NNUAorCSIJbWJcbiIKKyNlbmRpZgorCSIuc3Vic2VjdGlvbiAyXG4iCisJIjM6CWJyIDFiXG4iCisJIi5wcmV2aW91cyIKKwk6Ij0mciIgKHRlbXApLCAiPW0iICgqbSksICI9JnIiIChvbGRiaXQpCisJOiJJciIgKDFVTCA8PCAobnIgJiAzMSkpLCAibSIgKCptKSA6ICJtZW1vcnkiKTsKKworCXJldHVybiBvbGRiaXQgIT0gMDsKK30KKworLyoKKyAqIFdBUk5JTkc6IG5vbiBhdG9taWMgdmVyc2lvbi4KKyAqLworc3RhdGljIGlubGluZSBpbnQKK19fdGVzdF9hbmRfY2xlYXJfYml0KHVuc2lnbmVkIGxvbmcgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQoreworCXVuc2lnbmVkIGxvbmcgbWFzayA9IDEgPDwgKG5yICYgMHgxZik7CisJaW50ICptID0gKChpbnQgKikgYWRkcikgKyAobnIgPj4gNSk7CisJaW50IG9sZCA9ICptOworCisJKm0gPSBvbGQgJiB+bWFzazsKKwlyZXR1cm4gKG9sZCAmIG1hc2spICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50Cit0ZXN0X2FuZF9jaGFuZ2VfYml0KHVuc2lnbmVkIGxvbmcgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQoreworCXVuc2lnbmVkIGxvbmcgb2xkYml0OworCXVuc2lnbmVkIGxvbmcgdGVtcDsKKwlpbnQgKm0gPSAoKGludCAqKSBhZGRyKSArIChuciA+PiA1KTsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCSIxOglsZGxfbCAlMCwlNFxuIgorCSIJYW5kICUwLCUzLCUyXG4iCisJIgl4b3IgJTAsJTMsJTBcbiIKKwkiCXN0bF9jICUwLCUxXG4iCisJIgliZXEgJTAsM2ZcbiIKKyNpZmRlZiBDT05GSUdfU01QCisJIgltYlxuIgorI2VuZGlmCisJIi5zdWJzZWN0aW9uIDJcbiIKKwkiMzoJYnIgMWJcbiIKKwkiLnByZXZpb3VzIgorCToiPSZyIiAodGVtcCksICI9bSIgKCptKSwgIj0mciIgKG9sZGJpdCkKKwk6IklyIiAoMVVMIDw8IChuciAmIDMxKSksICJtIiAoKm0pIDogIm1lbW9yeSIpOworCisJcmV0dXJuIG9sZGJpdCAhPSAwOworfQorCisvKgorICogV0FSTklORzogbm9uIGF0b21pYyB2ZXJzaW9uLgorICovCitzdGF0aWMgX19pbmxpbmVfXyBpbnQKK19fdGVzdF9hbmRfY2hhbmdlX2JpdCh1bnNpZ25lZCBsb25nIG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIG1hc2sgPSAxIDw8IChuciAmIDB4MWYpOworCWludCAqbSA9ICgoaW50ICopIGFkZHIpICsgKG5yID4+IDUpOworCWludCBvbGQgPSAqbTsKKworCSptID0gb2xkIF4gbWFzazsKKwlyZXR1cm4gKG9sZCAmIG1hc2spICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50Cit0ZXN0X2JpdChpbnQgbnIsIGNvbnN0IHZvbGF0aWxlIHZvaWQgKiBhZGRyKQoreworCXJldHVybiAoMVVMICYgKCgoY29uc3QgaW50ICopIGFkZHIpW25yID4+IDVdID4+IChuciAmIDMxKSkpICE9IDBVTDsKK30KKworLyoKKyAqIGZmeiA9IEZpbmQgRmlyc3QgWmVybyBpbiB3b3JkLiBVbmRlZmluZWQgaWYgbm8gemVybyBleGlzdHMsCisgKiBzbyBjb2RlIHNob3VsZCBjaGVjayBhZ2FpbnN0IH4wVUwgZmlyc3QuLgorICoKKyAqIERvIGEgYmluYXJ5IHNlYXJjaCBvbiB0aGUgYml0cy4gIER1ZSB0byB0aGUgbmF0dXJlIG9mIGxhcmdlCisgKiBjb25zdGFudHMgb24gdGhlIGFscGhhLCBpdCBpcyB3b3J0aHdoaWxlIHRvIHNwbGl0IHRoZSBzZWFyY2guCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBmZnpfYih1bnNpZ25lZCBsb25nIHgpCit7CisJdW5zaWduZWQgbG9uZyBzdW0sIHgxLCB4MiwgeDQ7CisKKwl4ID0gfnggJiAtfng7CQkvKiBzZXQgZmlyc3QgMCBiaXQsIGNsZWFyIG90aGVycyAqLworCXgxID0geCAmIDB4QUE7CisJeDIgPSB4ICYgMHhDQzsKKwl4NCA9IHggJiAweEYwOworCXN1bSA9IHgyID8gMiA6IDA7CisJc3VtICs9ICh4NCAhPSAwKSAqIDQ7CisJc3VtICs9ICh4MSAhPSAwKTsKKworCXJldHVybiBzdW07Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBmZnoodW5zaWduZWQgbG9uZyB3b3JkKQoreworI2lmIGRlZmluZWQoX19hbHBoYV9jaXhfXykgJiYgZGVmaW5lZChfX2FscGhhX2ZpeF9fKQorCS8qIFdoZWUuICBFVjY3IGNhbiBjYWxjdWxhdGUgaXQgZGlyZWN0bHkuICAqLworCXJldHVybiBfX2tlcm5lbF9jdHR6KH53b3JkKTsKKyNlbHNlCisJdW5zaWduZWQgbG9uZyBiaXRzLCBxb2ZzLCBib2ZzOworCisJYml0cyA9IF9fa2VybmVsX2NtcGJnZSh3b3JkLCB+MFVMKTsKKwlxb2ZzID0gZmZ6X2IoYml0cyk7CisJYml0cyA9IF9fa2VybmVsX2V4dGJsKHdvcmQsIHFvZnMpOworCWJvZnMgPSBmZnpfYihiaXRzKTsKKworCXJldHVybiBxb2ZzKjggKyBib2ZzOworI2VuZGlmCit9CisKKy8qCisgKiBfX2ZmcyA9IEZpbmQgRmlyc3Qgc2V0IGJpdCBpbiB3b3JkLiAgVW5kZWZpbmVkIGlmIG5vIHNldCBiaXQgZXhpc3RzLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19mZnModW5zaWduZWQgbG9uZyB3b3JkKQoreworI2lmIGRlZmluZWQoX19hbHBoYV9jaXhfXykgJiYgZGVmaW5lZChfX2FscGhhX2ZpeF9fKQorCS8qIFdoZWUuICBFVjY3IGNhbiBjYWxjdWxhdGUgaXQgZGlyZWN0bHkuICAqLworCXJldHVybiBfX2tlcm5lbF9jdHR6KHdvcmQpOworI2Vsc2UKKwl1bnNpZ25lZCBsb25nIGJpdHMsIHFvZnMsIGJvZnM7CisKKwliaXRzID0gX19rZXJuZWxfY21wYmdlKDAsIHdvcmQpOworCXFvZnMgPSBmZnpfYihiaXRzKTsKKwliaXRzID0gX19rZXJuZWxfZXh0Ymwod29yZCwgcW9mcyk7CisJYm9mcyA9IGZmel9iKH5iaXRzKTsKKworCXJldHVybiBxb2ZzKjggKyBib2ZzOworI2VuZGlmCit9CisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKy8qCisgKiBmZnM6IGZpbmQgZmlyc3QgYml0IHNldC4gVGhpcyBpcyBkZWZpbmVkIHRoZSBzYW1lIHdheSBhcworICogdGhlIGxpYmMgYW5kIGNvbXBpbGVyIGJ1aWx0aW4gZmZzIHJvdXRpbmVzLCB0aGVyZWZvcmUKKyAqIGRpZmZlcnMgaW4gc3Bpcml0IGZyb20gdGhlIGFib3ZlIF9fZmZzLgorICovCisKK3N0YXRpYyBpbmxpbmUgaW50IGZmcyhpbnQgd29yZCkKK3sKKwlpbnQgcmVzdWx0ID0gX19mZnMod29yZCkgKyAxOworCXJldHVybiB3b3JkID8gcmVzdWx0IDogMDsKK30KKworLyoKKyAqIGZsczogZmluZCBsYXN0IGJpdCBzZXQuCisgKi8KKyNpZiBkZWZpbmVkKF9fYWxwaGFfY2l4X18pICYmIGRlZmluZWQoX19hbHBoYV9maXhfXykKK3N0YXRpYyBpbmxpbmUgaW50IGZscyhpbnQgd29yZCkKK3sKKwlyZXR1cm4gNjQgLSBfX2tlcm5lbF9jdGx6KHdvcmQgJiAweGZmZmZmZmZmKTsKK30KKyNlbHNlCisjZGVmaW5lIGZscwlnZW5lcmljX2ZscworI2VuZGlmCisKKy8qIENvbXB1dGUgcG93ZXJzIG9mIHR3byBmb3IgdGhlIGdpdmVuIGludGVnZXIuICAqLworc3RhdGljIGlubGluZSBsb25nIGZsb29yX2xvZzIodW5zaWduZWQgbG9uZyB3b3JkKQoreworI2lmIGRlZmluZWQoX19hbHBoYV9jaXhfXykgJiYgZGVmaW5lZChfX2FscGhhX2ZpeF9fKQorCXJldHVybiA2MyAtIF9fa2VybmVsX2N0bHood29yZCk7CisjZWxzZQorCWxvbmcgYml0OworCWZvciAoYml0ID0gLTE7IHdvcmQgOyBiaXQrKykKKwkJd29yZCA+Pj0gMTsKKwlyZXR1cm4gYml0OworI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgbG9uZyBjZWlsX2xvZzIodW5zaWduZWQgbG9uZyB3b3JkKQoreworCWxvbmcgYml0ID0gZmxvb3JfbG9nMih3b3JkKTsKKwlyZXR1cm4gYml0ICsgKHdvcmQgPiAoMVVMIDw8IGJpdCkpOworfQorCisvKgorICogaHdlaWdodE46IHJldHVybnMgdGhlIGhhbW1pbmcgd2VpZ2h0IChpLmUuIHRoZSBudW1iZXIKKyAqIG9mIGJpdHMgc2V0KSBvZiBhIE4tYml0IHdvcmQKKyAqLworCisjaWYgZGVmaW5lZChfX2FscGhhX2NpeF9fKSAmJiBkZWZpbmVkKF9fYWxwaGFfZml4X18pCisvKiBXaGVlLiAgRVY2NyBjYW4gY2FsY3VsYXRlIGl0IGRpcmVjdGx5LiAgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBod2VpZ2h0NjQodW5zaWduZWQgbG9uZyB3KQoreworCXJldHVybiBfX2tlcm5lbF9jdHBvcCh3KTsKK30KKworI2RlZmluZSBod2VpZ2h0MzIoeCkJKHVuc2lnbmVkIGludCkgaHdlaWdodDY0KCh4KSAmIDB4ZmZmZmZmZmZ1bCkKKyNkZWZpbmUgaHdlaWdodDE2KHgpCSh1bnNpZ25lZCBpbnQpIGh3ZWlnaHQ2NCgoeCkgJiAweGZmZmZ1bCkKKyNkZWZpbmUgaHdlaWdodDgoeCkJKHVuc2lnbmVkIGludCkgaHdlaWdodDY0KCh4KSAmIDB4ZmZ1bCkKKyNlbHNlCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaHdlaWdodDY0KHVuc2lnbmVkIGxvbmcgdykKK3sKKwl1bnNpZ25lZCBsb25nIHJlc3VsdDsKKwlmb3IgKHJlc3VsdCA9IDA7IHcgOyB3ID4+PSAxKQorCQlyZXN1bHQgKz0gKHcgJiAxKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisjZGVmaW5lIGh3ZWlnaHQzMih4KSBnZW5lcmljX2h3ZWlnaHQzMih4KQorI2RlZmluZSBod2VpZ2h0MTYoeCkgZ2VuZXJpY19od2VpZ2h0MTYoeCkKKyNkZWZpbmUgaHdlaWdodDgoeCkgIGdlbmVyaWNfaHdlaWdodDgoeCkKKyNlbmRpZgorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisvKgorICogRmluZCBuZXh0IHplcm8gYml0IGluIGEgYml0bWFwIHJlYXNvbmFibHkgZWZmaWNpZW50bHkuLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK2ZpbmRfbmV4dF96ZXJvX2JpdChjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQoreworCWNvbnN0IHVuc2lnbmVkIGxvbmcgKnAgPSBhZGRyOworCXVuc2lnbmVkIGxvbmcgcmVzdWx0ID0gb2Zmc2V0ICYgfjYzVUw7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlwICs9IG9mZnNldCA+PiA2OworCWlmIChvZmZzZXQgPj0gc2l6ZSkKKwkJcmV0dXJuIHNpemU7CisJc2l6ZSAtPSByZXN1bHQ7CisJb2Zmc2V0ICY9IDYzVUw7CisJaWYgKG9mZnNldCkgeworCQl0bXAgPSAqKHArKyk7CisJCXRtcCB8PSB+MFVMID4+ICg2NC1vZmZzZXQpOworCQlpZiAoc2l6ZSA8IDY0KQorCQkJZ290byBmb3VuZF9maXJzdDsKKwkJaWYgKH50bXApCisJCQlnb3RvIGZvdW5kX21pZGRsZTsKKwkJc2l6ZSAtPSA2NDsKKwkJcmVzdWx0ICs9IDY0OworCX0KKwl3aGlsZSAoc2l6ZSAmIH42M1VMKSB7CisJCWlmICh+KHRtcCA9ICoocCsrKSkpCisJCQlnb3RvIGZvdW5kX21pZGRsZTsKKwkJcmVzdWx0ICs9IDY0OworCQlzaXplIC09IDY0OworCX0KKwlpZiAoIXNpemUpCisJCXJldHVybiByZXN1bHQ7CisJdG1wID0gKnA7CisgZm91bmRfZmlyc3Q6CisJdG1wIHw9IH4wVUwgPDwgc2l6ZTsKKwlpZiAodG1wID09IH4wVUwpICAgICAgICAvKiBBcmUgYW55IGJpdHMgemVybz8gKi8KKwkJcmV0dXJuIHJlc3VsdCArIHNpemU7IC8qIE5vcGUuICovCisgZm91bmRfbWlkZGxlOgorCXJldHVybiByZXN1bHQgKyBmZnoodG1wKTsKK30KKworLyoKKyAqIEZpbmQgbmV4dCBvbmUgYml0IGluIGEgYml0bWFwIHJlYXNvbmFibHkgZWZmaWNpZW50bHkuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZworZmluZF9uZXh0X2JpdChjb25zdCB2b2lkICogYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIG9mZnNldCkKK3sKKwljb25zdCB1bnNpZ25lZCBsb25nICpwID0gYWRkcjsKKwl1bnNpZ25lZCBsb25nIHJlc3VsdCA9IG9mZnNldCAmIH42M1VMOworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJcCArPSBvZmZzZXQgPj4gNjsKKwlpZiAob2Zmc2V0ID49IHNpemUpCisJCXJldHVybiBzaXplOworCXNpemUgLT0gcmVzdWx0OworCW9mZnNldCAmPSA2M1VMOworCWlmIChvZmZzZXQpIHsKKwkJdG1wID0gKihwKyspOworCQl0bXAgJj0gfjBVTCA8PCBvZmZzZXQ7CisJCWlmIChzaXplIDwgNjQpCisJCQlnb3RvIGZvdW5kX2ZpcnN0OworCQlpZiAodG1wKQorCQkJZ290byBmb3VuZF9taWRkbGU7CisJCXNpemUgLT0gNjQ7CisJCXJlc3VsdCArPSA2NDsKKwl9CisJd2hpbGUgKHNpemUgJiB+NjNVTCkgeworCQlpZiAoKHRtcCA9ICoocCsrKSkpCisJCQlnb3RvIGZvdW5kX21pZGRsZTsKKwkJcmVzdWx0ICs9IDY0OworCQlzaXplIC09IDY0OworCX0KKwlpZiAoIXNpemUpCisJCXJldHVybiByZXN1bHQ7CisJdG1wID0gKnA7CisgZm91bmRfZmlyc3Q6CisJdG1wICY9IH4wVUwgPj4gKDY0IC0gc2l6ZSk7CisJaWYgKCF0bXApCisJCXJldHVybiByZXN1bHQgKyBzaXplOworIGZvdW5kX21pZGRsZToKKwlyZXR1cm4gcmVzdWx0ICsgX19mZnModG1wKTsKK30KKworLyoKKyAqIFRoZSBvcHRpbWl6ZXIgYWN0dWFsbHkgZG9lcyBnb29kIGNvZGUgZm9yIHRoaXMgY2FzZS4KKyAqLworI2RlZmluZSBmaW5kX2ZpcnN0X3plcm9fYml0KGFkZHIsIHNpemUpIFwKKwlmaW5kX25leHRfemVyb19iaXQoKGFkZHIpLCAoc2l6ZSksIDApCisjZGVmaW5lIGZpbmRfZmlyc3RfYml0KGFkZHIsIHNpemUpIFwKKwlmaW5kX25leHRfYml0KChhZGRyKSwgKHNpemUpLCAwKQorCisjaWZkZWYgX19LRVJORUxfXworCisvKgorICogRXZlcnkgYXJjaGl0ZWN0dXJlIG11c3QgZGVmaW5lIHRoaXMgZnVuY3Rpb24uIEl0J3MgdGhlIGZhc3Rlc3QKKyAqIHdheSBvZiBzZWFyY2hpbmcgYSAxNDAtYml0IGJpdG1hcCB3aGVyZSB0aGUgZmlyc3QgMTAwIGJpdHMgYXJlCisgKiB1bmxpa2VseSB0byBiZSBzZXQuIEl0J3MgZ3VhcmFudGVlZCB0aGF0IGF0IGxlYXN0IG9uZSBvZiB0aGUgMTQwCisgKiBiaXRzIGlzIHNldC4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCitzY2hlZF9maW5kX2ZpcnN0X2JpdCh1bnNpZ25lZCBsb25nIGJbM10pCit7CisJdW5zaWduZWQgbG9uZyBiMCA9IGJbMF0sIGIxID0gYlsxXSwgYjIgPSBiWzJdOworCXVuc2lnbmVkIGxvbmcgb2ZzOworCisJb2ZzID0gKGIxID8gNjQgOiAxMjgpOworCWIxID0gKGIxID8gYjEgOiBiMik7CisJb2ZzID0gKGIwID8gMCA6IG9mcyk7CisJYjAgPSAoYjAgPyBiMCA6IGIxKTsKKworCXJldHVybiBfX2ZmcyhiMCkgKyBvZnM7Cit9CisKKworI2RlZmluZSBleHQyX3NldF9iaXQgICAgICAgICAgICAgICAgIF9fdGVzdF9hbmRfc2V0X2JpdAorI2RlZmluZSBleHQyX3NldF9iaXRfYXRvbWljKGwsbixhKSAgIHRlc3RfYW5kX3NldF9iaXQobixhKQorI2RlZmluZSBleHQyX2NsZWFyX2JpdCAgICAgICAgICAgICAgIF9fdGVzdF9hbmRfY2xlYXJfYml0CisjZGVmaW5lIGV4dDJfY2xlYXJfYml0X2F0b21pYyhsLG4sYSkgdGVzdF9hbmRfY2xlYXJfYml0KG4sYSkKKyNkZWZpbmUgZXh0Ml90ZXN0X2JpdCAgICAgICAgICAgICAgICB0ZXN0X2JpdAorI2RlZmluZSBleHQyX2ZpbmRfZmlyc3RfemVyb19iaXQgICAgIGZpbmRfZmlyc3RfemVyb19iaXQKKyNkZWZpbmUgZXh0Ml9maW5kX25leHRfemVyb19iaXQgICAgICBmaW5kX25leHRfemVyb19iaXQKKworLyogQml0bWFwIGZ1bmN0aW9ucyBmb3IgdGhlIG1pbml4IGZpbGVzeXN0ZW0uICAqLworI2RlZmluZSBtaW5peF90ZXN0X2FuZF9zZXRfYml0KG5yLGFkZHIpIF9fdGVzdF9hbmRfc2V0X2JpdChucixhZGRyKQorI2RlZmluZSBtaW5peF9zZXRfYml0KG5yLGFkZHIpIF9fc2V0X2JpdChucixhZGRyKQorI2RlZmluZSBtaW5peF90ZXN0X2FuZF9jbGVhcl9iaXQobnIsYWRkcikgX190ZXN0X2FuZF9jbGVhcl9iaXQobnIsYWRkcikKKyNkZWZpbmUgbWluaXhfdGVzdF9iaXQobnIsYWRkcikgdGVzdF9iaXQobnIsYWRkcikKKyNkZWZpbmUgbWluaXhfZmluZF9maXJzdF96ZXJvX2JpdChhZGRyLHNpemUpIGZpbmRfZmlyc3RfemVyb19iaXQoYWRkcixzaXplKQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX0FMUEhBX0JJVE9QU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9idWcuaCBiL2luY2x1ZGUvYXNtLWFscGhhL2J1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMWUwYTUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9idWcuaApAQCAtMCwwICsxLDE1IEBACisjaWZuZGVmIF9BTFBIQV9CVUdfSAorI2RlZmluZSBfQUxQSEFfQlVHX0gKKworI2luY2x1ZGUgPGFzbS9wYWwuaD4KKworLyogPz8/IFdvdWxkIGJlIG5pY2UgdG8gdXNlIC5ncHJlbDMyIGhlcmUsIGJ1dCB3ZSBjYW4ndCBiZSBzdXJlIHRoYXQgdGhlCisgICBmdW5jdGlvbiBsb2FkZWQgdGhlIEdQLCBzbyB0aGlzIGNvdWxkIGZhaWwgaW4gbW9kdWxlcy4gICovCisjZGVmaW5lIEJVRygpIFwKKyAgX19hc21fXyBfX3ZvbGF0aWxlX18oImNhbGxfcGFsICUwICAjIGJ1Z2Noa1xuXHQiIi5sb25nICUxXG5cdC44Ynl0ZSAlMiIgXAorCQkgICAgICAgOiA6ICJpIiAoUEFMX2J1Z2NoayksICJpIihfX0xJTkVfXyksICJpIihfX0ZJTEVfXykpCisKKyNkZWZpbmUgSEFWRV9BUkNIX0JVRworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2J1Zy5oPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL2J1Z3MuaCBiL2luY2x1ZGUvYXNtLWFscGhhL2J1Z3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODAzMGQxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvYnVncy5oCkBAIC0wLDAgKzEsMjAgQEAKKy8qCisgKiAgaW5jbHVkZS9hc20tYWxwaGEvYnVncy5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NCAgTGludXMgVG9ydmFsZHMKKyAqLworCisvKgorICogVGhpcyBpcyBpbmNsdWRlZCBieSBpbml0L21haW4uYyB0byBjaGVjayBmb3IgYXJjaGl0ZWN0dXJlLWRlcGVuZGVudCBidWdzLgorICoKKyAqIE5lZWRzOgorICoJdm9pZCBjaGVja19idWdzKHZvaWQpOworICovCisKKy8qCisgKiBJIGRvbid0IGtub3cgb2YgYW55IGFscGhhIGJ1Z3MgeWV0Li4gTmljZSBjaGlwCisgKi8KKworc3RhdGljIHZvaWQgY2hlY2tfYnVncyh2b2lkKQoreworfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvYnl0ZW9yZGVyLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9ieXRlb3JkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWYyYjhkMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL2J5dGVvcmRlci5oCkBAIC0wLDAgKzEsNDcgQEAKKyNpZm5kZWYgX0FMUEhBX0JZVEVPUkRFUl9ICisjZGVmaW5lIF9BTFBIQV9CWVRFT1JERVJfSAorCisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxhc20vY29tcGlsZXIuaD4KKworI2lmZGVmIF9fR05VQ19fCisKK3N0YXRpYyBfX2lubGluZSBfX2F0dHJpYnV0ZV9jb25zdF9fIF9fdTMyIF9fYXJjaF9fc3dhYjMyKF9fdTMyIHgpCit7CisJLyoKKwkgKiBVbmZvcnR1bmF0ZWx5LCB3ZSBjYW4ndCB1c2UgdGhlIDYgaW5zdHJ1Y3Rpb24gc2VxdWVuY2UKKwkgKiBvbiBldjYgc2luY2UgdGhlIGxhdGVuY3kgb2YgdGhlIFVOUEtCVyBpcyAzLCB3aGljaCBpcworCSAqIHByZXR0eSBoYXJkIHRvIGhpZGUuICBKdXN0IGluIGNhc2UgYSBmdXR1cmUgaW1wbGVtZW50YXRpb24KKwkgKiBoYXMgYSBsb3dlciBsYXRlbmN5LCBoZXJlJ3MgdGhlIHNlcXVlbmNlIChhbHNvIGJ5IE1pa2UgQnVycm93cykKKwkgKgorCSAqIFVOUEtCVyBhMCwgdjAgICAgICAgdjA6IDAwQUEwMEJCMDBDQzAwREQKKwkgKiBTTEwgdjAsIDI0LCBhMCAgICAgIGEwOiBCQjAwQ0MwMEREMDAwMDAwCisJICogQklTIHYwLCBhMCwgYTAgICAgICBhMDogQkJBQUNDQkJERENDMDBERAorCSAqIEVYVFdMIGEwLCA2LCB2MCAgICAgdjA6IDAwMDAwMDAwMDAwMEJCQUEKKwkgKiBaQVAgYTAsIDB4ZjMsIGEwICAgIGEwOiAwMDAwMDAwMEREQ0MwMDAwCisJICogQURETCBhMCwgdjAsIHYwICAgICB2MDogc3Nzc3Nzc3NERENDQkJBQQorCSAqLworCisJX191NjQgdDAsIHQxLCB0MiwgdDM7CisKKwl0MCA9IF9fa2VybmVsX2luc2xoKHgsIDcpOwkvKiB0MCA6IDAwMDAwMDAwMDBBQUJCQ0MgKi8KKwl0MSA9IF9fa2VybmVsX2luc3dsKHgsIDMpOwkvKiB0MSA6IDAwMDAwMENDREQwMDAwMDAgKi8KKwl0MSB8PSB0MDsJCQkvKiB0MSA6IDAwMDAwMENDRERBQUJCQ0MgKi8KKwl0MiA9IHQxID4+IDE2OwkJCS8qIHQyIDogMDAwMDAwMDAwMENDRERBQSAqLworCXQwID0gdDEgJiAweEZGMDBGRjAwOwkJLyogdDAgOiAwMDAwMDAwMEREMDBCQjAwICovCisJdDMgPSB0MiAmIDB4MDBGRjAwRkY7CQkvKiB0MyA6IDAwMDAwMDAwMDBDQzAwQUEgKi8KKwl0MSA9IHQwICsgdDM7CQkJLyogdDEgOiBzc3Nzc3Nzc0REQ0NCQkFBICovCisKKwlyZXR1cm4gdDE7Cit9CisKKyNkZWZpbmUgX19hcmNoX19zd2FiMzIgX19hcmNoX19zd2FiMzIKKworI2VuZGlmIC8qIF9fR05VQ19fICovCisKKyNkZWZpbmUgX19CWVRFT1JERVJfSEFTX1U2NF9fCisKKyNpbmNsdWRlIDxsaW51eC9ieXRlb3JkZXIvbGl0dGxlX2VuZGlhbi5oPgorCisjZW5kaWYgLyogX0FMUEhBX0JZVEVPUkRFUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9jYWNoZS5oIGIvaW5jbHVkZS9hc20tYWxwaGEvY2FjaGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjliMjk1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvY2FjaGUuaApAQCAtMCwwICsxLDI1IEBACisvKgorICogaW5jbHVkZS9hc20tYWxwaGEvY2FjaGUuaAorICovCisjaWZuZGVmIF9fQVJDSF9BTFBIQV9DQUNIRV9ICisjZGVmaW5lIF9fQVJDSF9BTFBIQV9DQUNIRV9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworLyogQnl0ZXMgcGVyIEwxIChkYXRhKSBjYWNoZSBsaW5lLiAqLworI2lmIGRlZmluZWQoQ09ORklHX0FMUEhBX0dFTkVSSUMpIHx8IGRlZmluZWQoQ09ORklHX0FMUEhBX0VWNikKKyMgZGVmaW5lIEwxX0NBQ0hFX0JZVEVTICAgICA2NAorIyBkZWZpbmUgTDFfQ0FDSEVfU0hJRlQgICAgIDYKKyNlbHNlCisvKiBCb3RoIEVWNCBhbmQgRVY1IGFyZSB3cml0ZS10aHJvdWdoLCByZWFkLWFsbG9jYXRlLAorICAgZGlyZWN0LW1hcHBlZCwgcGh5c2ljYWwuCisqLworIyBkZWZpbmUgTDFfQ0FDSEVfQllURVMgICAgIDMyCisjIGRlZmluZSBMMV9DQUNIRV9TSElGVCAgICAgNQorI2VuZGlmCisKKyNkZWZpbmUgTDFfQ0FDSEVfQUxJR04oeCkgICgoKHgpKyhMMV9DQUNIRV9CWVRFUy0xKSkmfihMMV9DQUNIRV9CWVRFUy0xKSkKKyNkZWZpbmUgU01QX0NBQ0hFX0JZVEVTICAgIEwxX0NBQ0hFX0JZVEVTCisjZGVmaW5lIEwxX0NBQ0hFX1NISUZUX01BWCBMMV9DQUNIRV9TSElGVAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL2NhY2hlZmx1c2guaCBiL2luY2x1ZGUvYXNtLWFscGhhL2NhY2hlZmx1c2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmM2ZWY3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvY2FjaGVmbHVzaC5oCkBAIC0wLDAgKzEsNzQgQEAKKyNpZm5kZWYgX0FMUEhBX0NBQ0hFRkxVU0hfSAorI2RlZmluZSBfQUxQSEFfQ0FDSEVGTFVTSF9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorCisvKiBDYWNoZXMgYXJlbid0IGJyYWluLWRlYWQgb24gdGhlIEFscGhhLiAqLworI2RlZmluZSBmbHVzaF9jYWNoZV9hbGwoKQkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfbW0obW0pCQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9jYWNoZV9yYW5nZSh2bWEsIHN0YXJ0LCBlbmQpCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfcGFnZSh2bWEsIHZtYWRkciwgcGZuKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpCQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9kY2FjaGVfbW1hcF9sb2NrKG1hcHBpbmcpCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2RjYWNoZV9tbWFwX3VubG9jayhtYXBwaW5nKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2NhY2hlX3ZtYXAoc3RhcnQsIGVuZCkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfdnVubWFwKHN0YXJ0LCBlbmQpCQlkbyB7IH0gd2hpbGUgKDApCisKKy8qIE5vdGUgdGhhdCB0aGUgZm9sbG93aW5nIHR3byBkZWZpbml0aW9ucyBhcmUgX2hpZ2hseV8gZGVwZW5kZW50CisgICBvbiB0aGUgY29udGV4dHMgaW4gd2hpY2ggdGhleSBhcmUgdXNlZCBpbiB0aGUga2VybmVsLiAgSSBwZXJzb25hbGx5CisgICB0aGluayBpdCBpcyBjcmltaW5hbCBob3cgbG9vc2VseSBkZWZpbmVkIHRoZXNlIG1hY3JvcyBhcmUuICAqLworCisvKiBXZSBuZWVkIHRvIGZsdXNoIHRoZSBrZXJuZWwncyBpY2FjaGUgYWZ0ZXIgbG9hZGluZyBtb2R1bGVzLiAgVGhlCisgICBvbmx5IG90aGVyIHVzZSBvZiB0aGlzIG1hY3JvIGlzIGluIGxvYWRfYW91dF9pbnRlcnAgd2hpY2ggaXMgbm90CisgICB1c2VkIG9uIEFscGhhLiAKKworICAgTm90ZSB0aGF0IHRoaXMgZGVmaW5pdGlvbiBzaG91bGQgKm5vdCogYmUgdXNlZCBmb3IgdXNlcnNwYWNlCisgICBpY2FjaGUgZmx1c2hpbmcuICBXaGlsZSBmdW5jdGlvbmFsLCBpdCBpcyBfd2F5XyBvdmVya2lsbC4gIFRoZQorICAgaWNhY2hlIGlzIHRhZ2dlZCB3aXRoIEFTTnMgYW5kIGl0IHN1ZmZpY2VzIHRvIGFsbG9jYXRlIGEgbmV3IEFTTgorICAgZm9yIHRoZSBwcm9jZXNzLiAgKi8KKyNpZm5kZWYgQ09ORklHX1NNUAorI2RlZmluZSBmbHVzaF9pY2FjaGVfcmFuZ2Uoc3RhcnQsIGVuZCkJCWltYigpCisjZWxzZQorI2RlZmluZSBmbHVzaF9pY2FjaGVfcmFuZ2Uoc3RhcnQsIGVuZCkJCXNtcF9pbWIoKQorZXh0ZXJuIHZvaWQgc21wX2ltYih2b2lkKTsKKyNlbmRpZgorCisvKiBXZSBuZWVkIHRvIGZsdXNoIHRoZSB1c2Vyc3BhY2UgaWNhY2hlIGFmdGVyIHNldHRpbmcgYnJlYWtwb2ludHMgaW4KKyAgIHB0cmFjZS4KKworICAgSW5zdGVhZCBvZiBpbmRpc2NyaW1pbmF0ZWx5IHVzaW5nIGltYiwgdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIGZhY3QKKyAgIHRoYXQgaWNhY2hlIGVudHJpZXMgYXJlIHRhZ2dlZCB3aXRoIHRoZSBBU04gYW5kIGxvYWQgYSBuZXcgbW0gY29udGV4dC4gICovCisvKiA/Pz8gT3VnaHQgdG8gdXNlIHRoaXMgaW4gYXJjaC9hbHBoYS9rZXJuZWwvc2lnbmFsLmMgdG9vLiAgKi8KKworI2lmbmRlZiBDT05GSUdfU01QCitleHRlcm4gdm9pZCBfX2xvYWRfbmV3X21tX2NvbnRleHQoc3RydWN0IG1tX3N0cnVjdCAqKTsKK3N0YXRpYyBpbmxpbmUgdm9pZAorZmx1c2hfaWNhY2hlX3VzZXJfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJdW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbGVuKQoreworCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fRVhFQykgeworCQlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS0+dm1fbW07CisJCWlmIChjdXJyZW50LT5hY3RpdmVfbW0gPT0gbW0pCisJCQlfX2xvYWRfbmV3X21tX2NvbnRleHQobW0pOworCQllbHNlCisJCQltbS0+Y29udGV4dFtzbXBfcHJvY2Vzc29yX2lkKCldID0gMDsKKwl9Cit9CisjZWxzZQorZXh0ZXJuIHZvaWQgZmx1c2hfaWNhY2hlX3VzZXJfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCXN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIGFkZHIsIGludCBsZW4pOworI2VuZGlmCisKKy8qIFRoaXMgaXMgdXNlZCBvbmx5IGluIGRvX25vX3BhZ2UgYW5kIGRvX3N3YXBfcGFnZS4gICovCisjZGVmaW5lIGZsdXNoX2ljYWNoZV9wYWdlKHZtYSwgcGFnZSkgXAorICBmbHVzaF9pY2FjaGVfdXNlcl9yYW5nZSgodm1hKSwgKHBhZ2UpLCAwLCAwKQorCisjZGVmaW5lIGNvcHlfdG9fdXNlcl9wYWdlKHZtYSwgcGFnZSwgdmFkZHIsIGRzdCwgc3JjLCBsZW4pIFwKK2RvIHsgbWVtY3B5KGRzdCwgc3JjLCBsZW4pOyBcCisgICAgIGZsdXNoX2ljYWNoZV91c2VyX3JhbmdlKHZtYSwgcGFnZSwgdmFkZHIsIGxlbik7IFwKK30gd2hpbGUgKDApCisjZGVmaW5lIGNvcHlfZnJvbV91c2VyX3BhZ2Uodm1hLCBwYWdlLCB2YWRkciwgZHN0LCBzcmMsIGxlbikgXAorCW1lbWNweShkc3QsIHNyYywgbGVuKQorCisjZW5kaWYgLyogX0FMUEhBX0NBQ0hFRkxVU0hfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvY2hlY2tzdW0uaCBiL2luY2x1ZGUvYXNtLWFscGhhL2NoZWNrc3VtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTVjOWYwOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL2NoZWNrc3VtLmgKQEAgLTAsMCArMSw3NyBAQAorI2lmbmRlZiBfQUxQSEFfQ0hFQ0tTVU1fSAorI2RlZmluZSBfQUxQSEFfQ0hFQ0tTVU1fSAorCisjaW5jbHVkZSA8bGludXgvaW42Lmg+CisKKy8qCisgKglUaGlzIGlzIGEgdmVyc2lvbiBvZiBpcF9jb21wdXRlX2NzdW0oKSBvcHRpbWl6ZWQgZm9yIElQIGhlYWRlcnMsCisgKgl3aGljaCBhbHdheXMgY2hlY2tzdW0gb24gNCBvY3RldCBib3VuZGFyaWVzLgorICovCitleHRlcm4gdW5zaWduZWQgc2hvcnQgaXBfZmFzdF9jc3VtKHVuc2lnbmVkIGNoYXIgKiBpcGgsIHVuc2lnbmVkIGludCBpaGwpOworCisvKgorICogY29tcHV0ZXMgdGhlIGNoZWNrc3VtIG9mIHRoZSBUQ1AvVURQIHBzZXVkby1oZWFkZXIKKyAqIHJldHVybnMgYSAxNi1iaXQgY2hlY2tzdW0sIGFscmVhZHkgY29tcGxlbWVudGVkCisgKi8KK2V4dGVybiB1bnNpZ25lZCBzaG9ydCBpbnQgY3N1bV90Y3B1ZHBfbWFnaWModW5zaWduZWQgbG9uZyBzYWRkciwKKwkJCQkJICAgdW5zaWduZWQgbG9uZyBkYWRkciwKKwkJCQkJICAgdW5zaWduZWQgc2hvcnQgbGVuLAorCQkJCQkgICB1bnNpZ25lZCBzaG9ydCBwcm90bywKKwkJCQkJICAgdW5zaWduZWQgaW50IHN1bSk7CisKK3Vuc2lnbmVkIGludCBjc3VtX3RjcHVkcF9ub2ZvbGQodW5zaWduZWQgbG9uZyBzYWRkciwgdW5zaWduZWQgbG9uZyBkYWRkciwKKwkJCQl1bnNpZ25lZCBzaG9ydCBsZW4sIHVuc2lnbmVkIHNob3J0IHByb3RvLAorCQkJCXVuc2lnbmVkIGludCBzdW0pOworCisvKgorICogY29tcHV0ZXMgdGhlIGNoZWNrc3VtIG9mIGEgbWVtb3J5IGJsb2NrIGF0IGJ1ZmYsIGxlbmd0aCBsZW4sCisgKiBhbmQgYWRkcyBpbiAic3VtIiAoMzItYml0KQorICoKKyAqIHJldHVybnMgYSAzMi1iaXQgbnVtYmVyIHN1aXRhYmxlIGZvciBmZWVkaW5nIGludG8gaXRzZWxmCisgKiBvciBjc3VtX3RjcHVkcF9tYWdpYworICoKKyAqIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aCBldmVuIGxlbmd0aHMsIGV4Y2VwdAorICogZm9yIHRoZSBsYXN0IGZyYWdtZW50LCB3aGljaCBtYXkgYmUgb2RkCisgKgorICogaXQncyBiZXN0IHRvIGhhdmUgYnVmZiBhbGlnbmVkIG9uIGEgMzItYml0IGJvdW5kYXJ5CisgKi8KK2V4dGVybiB1bnNpZ25lZCBpbnQgY3N1bV9wYXJ0aWFsKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiBidWZmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgc3VtKTsKKworLyoKKyAqIHRoZSBzYW1lIGFzIGNzdW1fcGFydGlhbCwgYnV0IGNvcGllcyBmcm9tIHNyYyB3aGlsZSBpdAorICogY2hlY2tzdW1zCisgKgorICogaGVyZSBldmVuIG1vcmUgaW1wb3J0YW50IHRvIGFsaWduIHNyYyBhbmQgZHN0IG9uIGEgMzItYml0IChvciBldmVuCisgKiBiZXR0ZXIgNjQtYml0KSBib3VuZGFyeQorICovCit1bnNpZ25lZCBpbnQgY3N1bV9wYXJ0aWFsX2NvcHlfZnJvbV91c2VyKGNvbnN0IGNoYXIgX191c2VyICpzcmMsIGNoYXIgKmRzdCwgaW50IGxlbiwgdW5zaWduZWQgaW50IHN1bSwgaW50ICplcnJwKTsKKwordW5zaWduZWQgaW50IGNzdW1fcGFydGlhbF9jb3B5X25vY2hlY2soY29uc3QgY2hhciAqc3JjLCBjaGFyICpkc3QsIGludCBsZW4sIHVuc2lnbmVkIGludCBzdW0pOworCisKKy8qCisgKiB0aGlzIHJvdXRpbmUgaXMgdXNlZCBmb3IgbWlzY2VsbGFuZW91cyBJUC1saWtlIGNoZWNrc3VtcywgbWFpbmx5CisgKiBpbiBpY21wLmMKKyAqLworCitleHRlcm4gdW5zaWduZWQgc2hvcnQgaXBfY29tcHV0ZV9jc3VtKHVuc2lnbmVkIGNoYXIgKiBidWZmLCBpbnQgbGVuKTsKKworLyoKKyAqCUZvbGQgYSBwYXJ0aWFsIGNoZWNrc3VtIHdpdGhvdXQgYWRkaW5nIHBzZXVkbyBoZWFkZXJzCisgKi8KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBjc3VtX2ZvbGQodW5zaWduZWQgaW50IHN1bSkKK3sKKwlzdW0gPSAoc3VtICYgMHhmZmZmKSArIChzdW0gPj4gMTYpOworCXN1bSA9IChzdW0gJiAweGZmZmYpICsgKHN1bSA+PiAxNik7CisJcmV0dXJuIH5zdW07Cit9CisKKyNkZWZpbmUgX0hBVkVfQVJDSF9JUFY2X0NTVU0KK2V4dGVybiB1bnNpZ25lZCBzaG9ydCBpbnQgY3N1bV9pcHY2X21hZ2ljKHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191MzIgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcHJvdG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc3VtKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9jb21waWxlci5oIGIvaW5jbHVkZS9hc20tYWxwaGEvY29tcGlsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTljMzNiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvY29tcGlsZXIuaApAQCAtMCwwICsxLDEwMyBAQAorI2lmbmRlZiBfX0FMUEhBX0NPTVBJTEVSX0gKKyNkZWZpbmUgX19BTFBIQV9DT01QSUxFUl9ICisKKy8qIAorICogSGVyZWluIGFyZSBtYWNyb3Mgd2UgdXNlIHdoZW4gZGVzY3JpYmluZyB2YXJpb3VzIHBhdHRlcm5zIHdlIHdhbnQgdG8gR0NDLgorICogSW4gYWxsIGNhc2VzIHdlIGNhbiBnZXQgYmV0dGVyIHNjaGVkdWxlcyBvdXQgb2YgdGhlIGNvbXBpbGVyIGlmIHdlIGhpZGUKKyAqIGFzIGxpdHRsZSBhcyBwb3NzaWJsZSBpbnNpZGUgaW5saW5lIGFzc2VtYmx5LiAgSG93ZXZlciwgd2Ugd2FudCB0byBiZQorICogYWJsZSB0byBrbm93IHdoYXQgd2UnbGwgZ2V0IG91dCBiZWZvcmUgZ2l2aW5nIHVwIGlubGluZSBhc3NlbWJseS4gIFRodXMKKyAqIHRoZXNlIHRlc3RzIGFuZCBtYWNyb3MuCisgKi8KKworI2lmIF9fR05VQ19fID09IDMgJiYgX19HTlVDX01JTk9SX18gPj0gNCB8fCBfX0dOVUNfXyA+IDMKKyMgZGVmaW5lIF9fa2VybmVsX2luc2JsKHZhbCwgc2hpZnQpCV9fYnVpbHRpbl9hbHBoYV9pbnNibCh2YWwsIHNoaWZ0KQorIyBkZWZpbmUgX19rZXJuZWxfaW5zd2wodmFsLCBzaGlmdCkJX19idWlsdGluX2FscGhhX2luc3dsKHZhbCwgc2hpZnQpCisjIGRlZmluZSBfX2tlcm5lbF9pbnNxbCh2YWwsIHNoaWZ0KQlfX2J1aWx0aW5fYWxwaGFfaW5zcWwodmFsLCBzaGlmdCkKKyMgZGVmaW5lIF9fa2VybmVsX2luc2xoKHZhbCwgc2hpZnQpCV9fYnVpbHRpbl9hbHBoYV9pbnNsaCh2YWwsIHNoaWZ0KQorIyBkZWZpbmUgX19rZXJuZWxfZXh0YmwodmFsLCBzaGlmdCkJX19idWlsdGluX2FscGhhX2V4dGJsKHZhbCwgc2hpZnQpCisjIGRlZmluZSBfX2tlcm5lbF9leHR3bCh2YWwsIHNoaWZ0KQlfX2J1aWx0aW5fYWxwaGFfZXh0d2wodmFsLCBzaGlmdCkKKyMgZGVmaW5lIF9fa2VybmVsX2NtcGJnZShhLCBiKQkJX19idWlsdGluX2FscGhhX2NtcGJnZShhLCBiKQorIyBkZWZpbmUgX19rZXJuZWxfY3R0eih4KQkJX19idWlsdGluX2N0emwoeCkKKyMgZGVmaW5lIF9fa2VybmVsX2N0bHooeCkJCV9fYnVpbHRpbl9jbHpsKHgpCisjIGRlZmluZSBfX2tlcm5lbF9jdHBvcCh4KQkJX19idWlsdGluX3BvcGNvdW50bCh4KQorI2Vsc2UKKyMgZGVmaW5lIF9fa2VybmVsX2luc2JsKHZhbCwgc2hpZnQpCQkJCQlcCisgICh7IHVuc2lnbmVkIGxvbmcgX19raXI7CQkJCQkJXAorICAgICBfX2FzbV9fKCJpbnNibCAlMiwlMSwlMCIgOiAiPXIiKF9fa2lyKSA6ICJySSIoc2hpZnQpLCAiciIodmFsKSk7CVwKKyAgICAgX19raXI7IH0pCisjIGRlZmluZSBfX2tlcm5lbF9pbnN3bCh2YWwsIHNoaWZ0KQkJCQkJXAorICAoeyB1bnNpZ25lZCBsb25nIF9fa2lyOwkJCQkJCVwKKyAgICAgX19hc21fXygiaW5zd2wgJTIsJTEsJTAiIDogIj1yIihfX2tpcikgOiAickkiKHNoaWZ0KSwgInIiKHZhbCkpOwlcCisgICAgIF9fa2lyOyB9KQorIyBkZWZpbmUgX19rZXJuZWxfaW5zcWwodmFsLCBzaGlmdCkJCQkJCVwKKyAgKHsgdW5zaWduZWQgbG9uZyBfX2tpcjsJCQkJCQlcCisgICAgIF9fYXNtX18oImluc3FsICUyLCUxLCUwIiA6ICI9ciIoX19raXIpIDogInJJIihzaGlmdCksICJyIih2YWwpKTsJXAorICAgICBfX2tpcjsgfSkKKyMgZGVmaW5lIF9fa2VybmVsX2luc2xoKHZhbCwgc2hpZnQpCQkJCQlcCisgICh7IHVuc2lnbmVkIGxvbmcgX19raXI7CQkJCQkJXAorICAgICBfX2FzbV9fKCJpbnNsaCAlMiwlMSwlMCIgOiAiPXIiKF9fa2lyKSA6ICJySSIoc2hpZnQpLCAiciIodmFsKSk7CVwKKyAgICAgX19raXI7IH0pCisjIGRlZmluZSBfX2tlcm5lbF9leHRibCh2YWwsIHNoaWZ0KQkJCQkJXAorICAoeyB1bnNpZ25lZCBsb25nIF9fa2lyOwkJCQkJCVwKKyAgICAgX19hc21fXygiZXh0YmwgJTIsJTEsJTAiIDogIj1yIihfX2tpcikgOiAickkiKHNoaWZ0KSwgInIiKHZhbCkpOwlcCisgICAgIF9fa2lyOyB9KQorIyBkZWZpbmUgX19rZXJuZWxfZXh0d2wodmFsLCBzaGlmdCkJCQkJCVwKKyAgKHsgdW5zaWduZWQgbG9uZyBfX2tpcjsJCQkJCQlcCisgICAgIF9fYXNtX18oImV4dHdsICUyLCUxLCUwIiA6ICI9ciIoX19raXIpIDogInJJIihzaGlmdCksICJyIih2YWwpKTsJXAorICAgICBfX2tpcjsgfSkKKyMgZGVmaW5lIF9fa2VybmVsX2NtcGJnZShhLCBiKQkJCQkJCVwKKyAgKHsgdW5zaWduZWQgbG9uZyBfX2tpcjsJCQkJCQlcCisgICAgIF9fYXNtX18oImNtcGJnZSAlcjIsJTEsJTAiIDogIj1yIihfX2tpcikgOiAickkiKGIpLCAickoiKGEpKTsJXAorICAgICBfX2tpcjsgfSkKKyMgZGVmaW5lIF9fa2VybmVsX2N0dHooeCkJCQkJCQlcCisgICh7IHVuc2lnbmVkIGxvbmcgX19raXI7CQkJCQkJXAorICAgICBfX2FzbV9fKCJjdHR6ICUxLCUwIiA6ICI9ciIoX19raXIpIDogInIiKHgpKTsJCQlcCisgICAgIF9fa2lyOyB9KQorIyBkZWZpbmUgX19rZXJuZWxfY3Rseih4KQkJCQkJCVwKKyAgKHsgdW5zaWduZWQgbG9uZyBfX2tpcjsJCQkJCQlcCisgICAgIF9fYXNtX18oImN0bHogJTEsJTAiIDogIj1yIihfX2tpcikgOiAiciIoeCkpOwkJCVwKKyAgICAgX19raXI7IH0pCisjIGRlZmluZSBfX2tlcm5lbF9jdHBvcCh4KQkJCQkJCVwKKyAgKHsgdW5zaWduZWQgbG9uZyBfX2tpcjsJCQkJCQlcCisgICAgIF9fYXNtX18oImN0cG9wICUxLCUwIiA6ICI9ciIoX19raXIpIDogInIiKHgpKTsJCQlcCisgICAgIF9fa2lyOyB9KQorI2VuZGlmCisKKworLyogCisgKiBCZWdpbm5pbmcgd2l0aCBFR0NTIDEuMSwgR0NDIGRlZmluZXMgX19hbHBoYV9id3hfXyB3aGVuIHRoZSBCV1ggCisgKiBleHRlbnNpb24gaXMgZW5hYmxlZC4gIFByZXZpb3VzIHZlcnNpb25zIGRpZCBub3QgZGVmaW5lIGFueXRoaW5nCisgKiB3ZSBjb3VsZCB0ZXN0IGR1cmluZyBjb21waWxhdGlvbiAtLSB0b28gYmFkLCBzbyBzYWQuCisgKi8KKworI2lmIGRlZmluZWQoX19hbHBoYV9id3hfXykKKyNkZWZpbmUgX19rZXJuZWxfbGRidShtZW0pCShtZW0pCisjZGVmaW5lIF9fa2VybmVsX2xkd3UobWVtKQkobWVtKQorI2RlZmluZSBfX2tlcm5lbF9zdGIodmFsLG1lbSkJKChtZW0pID0gKHZhbCkpCisjZGVmaW5lIF9fa2VybmVsX3N0dyh2YWwsbWVtKQkoKG1lbSkgPSAodmFsKSkKKyNlbHNlCisjZGVmaW5lIF9fa2VybmVsX2xkYnUobWVtKQkJCQlcCisgICh7IHVuc2lnbmVkIGNoYXIgX19raXI7CQkJCVwKKyAgICAgX19hc21fXygibGRidSAlMCwlMSIgOiAiPXIiKF9fa2lyKSA6ICJtIihtZW0pKTsJXAorICAgICBfX2tpcjsgfSkKKyNkZWZpbmUgX19rZXJuZWxfbGR3dShtZW0pCQkJCVwKKyAgKHsgdW5zaWduZWQgc2hvcnQgX19raXI7CQkJCVwKKyAgICAgX19hc21fXygibGR3dSAlMCwlMSIgOiAiPXIiKF9fa2lyKSA6ICJtIihtZW0pKTsJXAorICAgICBfX2tpcjsgfSkKKyNkZWZpbmUgX19rZXJuZWxfc3RiKHZhbCxtZW0pIFwKKyAgX19hc21fXygic3RiICUxLCUwIiA6ICI9bSIobWVtKSA6ICJyIih2YWwpKQorI2RlZmluZSBfX2tlcm5lbF9zdHcodmFsLG1lbSkgXAorICBfX2FzbV9fKCJzdHcgJTEsJTAiIDogIj1tIihtZW0pIDogInIiKHZhbCkpCisjZW5kaWYKKworLyogU29tZSBpZGlvdHMgb3ZlciBpbiA8bGludXgvY29tcGlsZXIuaD4gdGhvdWdodCBpbmxpbmUgc2hvdWxkIGltcGx5CisgICBhbHdheXNfaW5saW5lLiAgVGhpcyBicmVha3Mgc3R1ZmYuICBXZSdsbCBpbmNsdWRlIHRoaXMgZmlsZSB3aGVuZXZlcgorICAgd2UgcnVuIGludG8gc3VjaCBwcm9ibGVtcy4gICovCisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI3VuZGVmIGlubGluZQorI3VuZGVmIF9faW5saW5lX18KKyN1bmRlZiBfX2lubGluZQorCisKKyNlbmRpZiAvKiBfX0FMUEhBX0NPTVBJTEVSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL2NvbnNvbGUuaCBiL2luY2x1ZGUvYXNtLWFscGhhL2NvbnNvbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2NlNGU2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvY29uc29sZS5oCkBAIC0wLDAgKzEsNzUgQEAKKyNpZm5kZWYgX19BWFBfQ09OU09MRV9ICisjZGVmaW5lIF9fQVhQX0NPTlNPTEVfSAorCisvKgorICogQ29uc29sZSBjYWxsYmFjayByb3V0aW5lIG51bWJlcnMKKyAqLworI2RlZmluZSBDQ0JfR0VUQwkJMHgwMQorI2RlZmluZSBDQ0JfUFVUUwkJMHgwMgorI2RlZmluZSBDQ0JfUkVTRVRfVEVSTQkJMHgwMworI2RlZmluZSBDQ0JfU0VUX1RFUk1fSU5UCTB4MDQKKyNkZWZpbmUgQ0NCX1NFVF9URVJNX0NUTAkweDA1CisjZGVmaW5lIENDQl9QUk9DRVNTX0tFWUNPREUJMHgwNgorI2RlZmluZSBDQ0JfT1BFTl9DT05TT0xFCTB4MDcKKyNkZWZpbmUgQ0NCX0NMT1NFX0NPTlNPTEUJMHgwOAorCisjZGVmaW5lIENDQl9PUEVOCQkweDEwCisjZGVmaW5lIENDQl9DTE9TRQkJMHgxMQorI2RlZmluZSBDQ0JfSU9DVEwJCTB4MTIKKyNkZWZpbmUgQ0NCX1JFQUQJCTB4MTMKKyNkZWZpbmUgQ0NCX1dSSVRFCQkweDE0CisKKyNkZWZpbmUgQ0NCX1NFVF9FTlYJCTB4MjAKKyNkZWZpbmUgQ0NCX1JFU0VUX0VOVgkJMHgyMQorI2RlZmluZSBDQ0JfR0VUX0VOVgkJMHgyMgorI2RlZmluZSBDQ0JfU0FWRV9FTlYJCTB4MjMKKworI2RlZmluZSBDQ0JfUFNXSVRDSAkJMHgzMAorI2RlZmluZSBDQ0JfQklPU19FTVVMCQkweDMyCisKKy8qCisgKiBFbnZpcm9ubWVudCB2YXJpYWJsZSBudW1iZXJzCisgKi8KKyNkZWZpbmUgRU5WX0FVVE9fQUNUSU9OCQkweDAxCisjZGVmaW5lIEVOVl9CT09UX0RFVgkJMHgwMgorI2RlZmluZSBFTlZfQk9PVERFRl9ERVYJCTB4MDMKKyNkZWZpbmUgRU5WX0JPT1RFRF9ERVYJCTB4MDQKKyNkZWZpbmUgRU5WX0JPT1RfRklMRQkJMHgwNQorI2RlZmluZSBFTlZfQk9PVEVEX0ZJTEUJCTB4MDYKKyNkZWZpbmUgRU5WX0JPT1RfT1NGTEFHUwkweDA3CisjZGVmaW5lIEVOVl9CT09URURfT1NGTEFHUwkweDA4CisjZGVmaW5lIEVOVl9CT09UX1JFU0VUCQkweDA5CisjZGVmaW5lIEVOVl9EVU1QX0RFVgkJMHgwQQorI2RlZmluZSBFTlZfRU5BQkxFX0FVRElUCTB4MEIKKyNkZWZpbmUgRU5WX0xJQ0VOU0UJCTB4MEMKKyNkZWZpbmUgRU5WX0NIQVJfU0VUCQkweDBECisjZGVmaW5lIEVOVl9MQU5HVUFHRQkJMHgwRQorI2RlZmluZSBFTlZfVFRZX0RFVgkJMHgwRgorCisjaWZkZWYgX19LRVJORUxfXworI2lmbmRlZiBfX0FTU0VNQkxZX18KK2V4dGVybiBsb25nIGNhbGxiYWNrX3B1dHMobG9uZyB1bml0LCBjb25zdCBjaGFyICpzLCBsb25nIGxlbmd0aCk7CitleHRlcm4gbG9uZyBjYWxsYmFja19nZXRjKGxvbmcgdW5pdCk7CitleHRlcm4gbG9uZyBjYWxsYmFja19vcGVuX2NvbnNvbGUodm9pZCk7CitleHRlcm4gbG9uZyBjYWxsYmFja19jbG9zZV9jb25zb2xlKHZvaWQpOworZXh0ZXJuIGxvbmcgY2FsbGJhY2tfb3Blbihjb25zdCBjaGFyICpkZXZpY2UsIGxvbmcgbGVuZ3RoKTsKK2V4dGVybiBsb25nIGNhbGxiYWNrX2Nsb3NlKGxvbmcgdW5pdCk7CitleHRlcm4gbG9uZyBjYWxsYmFja19yZWFkKGxvbmcgY2hhbm5lbCwgbG9uZyBjb3VudCwgY29uc3QgY2hhciAqYnVmLCBsb25nIGxibik7CitleHRlcm4gbG9uZyBjYWxsYmFja19nZXRlbnYobG9uZyBpZCwgY29uc3QgY2hhciAqYnVmLCB1bnNpZ25lZCBsb25nIGJ1Zl9zaXplKTsKK2V4dGVybiBsb25nIGNhbGxiYWNrX3NldGVudihsb25nIGlkLCBjb25zdCBjaGFyICpidWYsIHVuc2lnbmVkIGxvbmcgYnVmX3NpemUpOworZXh0ZXJuIGxvbmcgY2FsbGJhY2tfc2F2ZV9lbnYodm9pZCk7CisKK2V4dGVybiBpbnQgc3JtX2ZpeHVwKHVuc2lnbmVkIGxvbmcgbmV3X2NhbGxiYWNrX2FkZHIsCisJCSAgICAgdW5zaWduZWQgbG9uZyBuZXdfaHdycGJfYWRkcik7CitleHRlcm4gbG9uZyBzcm1fcHV0cyhjb25zdCBjaGFyICosIGxvbmcpOworZXh0ZXJuIGxvbmcgc3JtX3ByaW50ayhjb25zdCBjaGFyICosIC4uLikKKwlfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDEsIDIpKSk7CisKK3N0cnVjdCBjcmJfc3RydWN0Oworc3RydWN0IGh3cnBiX3N0cnVjdDsKK2V4dGVybiBpbnQgY2FsbGJhY2tfaW5pdF9kb25lOworZXh0ZXJuIHZvaWQgKiBjYWxsYmFja19pbml0KHZvaWQgKik7CisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX19BWFBfQ09OU09MRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9jb3JlX2FwZWNzLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9jb3JlX2FwZWNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc4NWZmNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL2NvcmVfYXBlY3MuaApAQCAtMCwwICsxLDUxNyBAQAorI2lmbmRlZiBfX0FMUEhBX0FQRUNTX19IX18KKyNkZWZpbmUgX19BTFBIQV9BUEVDU19fSF9fCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9jb21waWxlci5oPgorCisvKgorICogQVBFQ1MgaXMgdGhlIGludGVybmFsIG5hbWUgZm9yIHRoZSAyMTA3eCBjaGlwc2V0IHdoaWNoIHByb3ZpZGVzCisgKiBtZW1vcnkgY29udHJvbGxlciBhbmQgUENJIGFjY2VzcyBmb3IgdGhlIDIxMDY0IGNoaXAgYmFzZWQgc3lzdGVtcy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgYmFzZWQgb246CisgKgorICogREVDY2hpcCAyMTA3MS1BQSBhbmQgREVDY2hpcCAyMTA3Mi1BQSBDb3JlIExvZ2ljIENoaXBzZXRzCisgKiBEYXRhIFNoZWV0CisgKgorICogRUMtTjA2NDgtNzIKKyAqCisgKgorICogZGF2aWQucnVzbGluZ0ByZW8ubXRzLmRlYy5jb20gSW5pdGlhbCBWZXJzaW9uLgorICoKKyAqLworCisvKgorICAgQW4gQVZBTlRJICptaWdodCogYmUgYW4gWEwsIGFuZCBhbiBYTCBoYXMgb25seSAyNyBiaXRzIG9mIElTQSBhZGRyZXNzCisgICB0aGF0IGdldCBwYXNzZWQgdGhyb3VnaCB0aGUgUENJPC0+SVNBIGJyaWRnZSBjaGlwLiBTbyB3ZSd2ZSBnb3R0YSB1c2UKKyAgIGJvdGggd2luZG93cyB0byBtYXggb3V0IHRoZSBwaHlzaWNhbCBtZW1vcnkgd2UgY2FuIERNQSB0by4gU2lnaC4uLgorCisgICBJZiB3ZSB0cnkgYSB3aW5kb3cgYXQgMCBmb3IgMUdCIGFzIGEgd29yay1hcm91bmQsIHdlIHJ1biBpbnRvIGNvbmZsaWN0cworICAgd2l0aCBJU0EvUENJIGJ1cyBtZW1vcnkgd2hpY2ggY2FuJ3QgYmUgcmVsb2NhdGVkLCBsaWtlIFZHQSBhcGVydHVyZSBhbmQKKyAgIEJJT1MgUk9Ncy4gU28gd2UgbXVzdCBwdXQgdGhlIHdpbmRvd3MgaGlnaCBlbm91Z2ggdG8gYXZvaWQgdGhlc2UgYXJlYXMuCisKKyAgIFdlIHB1dCB3aW5kb3cgMSBhdCBCVVMgNjRNYiBmb3IgNjRNYiwgbWFwcGluZyBwaHlzaWNhbCAwIHRvIDY0TWItMSwKKyAgIGFuZCB3aW5kb3cgMiBhdCBCVVMgMUdiIGZvciAxR2IsIG1hcHBpbmcgcGh5c2ljYWwgMCB0byAxR2ItMS4KKyAgIFllcywgdGhpcyBkb2VzIG1hcCAwIHRvIDY0TWItMSB0d2ljZSwgYnV0IG9ubHkgd2luZG93IDEgd2lsbCBhY3R1YWxseQorICAgYmUgdXNlZCBmb3IgdGhhdCByYW5nZSAodmlhIHZpcnRfdG9fYnVzKCkpLgorCisgICBOb3RlIHRoYXQgd2UgYWN0dWFsbHkgZnVkZ2UgdGhlIHdpbmRvdyAxIG1heGltdW0gYXMgNDhNYiBpbnN0ZWFkIG9mIDY0TWIsCisgICB0byBrZWVwIHZpcnRfdG9fYnVzKCkgZnJvbSByZXR1cm5pbmcgYW4gYWRkcmVzcyBpbiB0aGUgZmlyc3Qgd2luZG93LCBmb3IKKyAgIGEgZGF0YSBhcmVhIHRoYXQgZ29lcyBiZXlvbmQgdGhlIDY0TWIgZmlyc3QgRE1BIHdpbmRvdy4gIFNpZ2guLi4KKyAgIFRoZSBmdWRnZSBmYWN0b3IgTVVTVCBtYXRjaCB3aXRoIDxhc20vZG1hLmg+IE1BWF9ETUFfQUREUkVTUywgYnV0CisgICB3ZSBjYW4ndCBqdXN0IHVzZSB0aGF0IGhlcmUsIGJlY2F1c2Ugb2YgaGVhZGVyIGZpbGUgbG9vcGluZy4uLiA6LSgKKworICAgV2luZG93IDEgd2lsbCBiZSB1c2VkIGZvciBhbGwgRE1BIGZyb20gdGhlIElTQSBidXM7IHllcywgdGhhdCBkb2VzCisgICBsaW1pdCB3aGF0IG1lbW9yeSBhbiBJU0EgZmxvcHB5IG9yIHNvdW5kIGNhcmQgb3IgRXRoZXJuZXQgY2FuIHRvdWNoLCBidXQKKyAgIGl0J3MgYWxzbyBhIGtub3duIGxpbWl0YXRpb24gb24gb3RoZXIgcGxhdGZvcm1zIGFzIHdlbGwuIFdlIHVzZSB0aGUKKyAgIHNhbWUgdGVjaG5pcXVlIHRoYXQgaXMgdXNlZCBvbiBJTlRFTCBwbGF0Zm9ybXMgd2l0aCBzaW1pbGFyIGxpbWl0YXRpb246CisgICBzZXQgTUFYX0RNQV9BRERSRVNTIGFuZCBjbGVhciBzb21lIHBhZ2VzJyBETUFhYmxlIGZsYWdzIGR1cmluZyBtZW1faW5pdCgpLgorICAgV2UgdHJ1c3QgdGhhdCBhbnkgSVNBIGJ1cyBkZXZpY2UgZHJpdmVycyB3aWxsICphbHdheXMqIGFzayBmb3IgRE1BYWJsZQorICAgbWVtb3J5IGV4cGxpY2l0bHkgdmlhIGttYWxsb2MoKS9nZXRfZnJlZV9wYWdlcygpIGZsYWdzIGFyZ3VtZW50cy4KKworICAgTm90ZSB0aGF0IG1vc3QgUENJIGJ1cyBkZXZpY2VzJyBkcml2ZXJzIGRvICpub3QqIGV4cGxpY2l0bHkgYXNrIGZvcgorICAgRE1BYWJsZSBtZW1vcnk7IHRoZXkgY291bnQgb24gYmVpbmcgYWJsZSB0byBETUEgdG8gYW55IG1lbW9yeSB0aGV5CisgICBnZXQgZnJvbSBrbWFsbG9jKCkvZ2V0X2ZyZWVfcGFnZXMoKS4gVGhleSB3aWxsIGFsc28gdXNlIHdpbmRvdyAxIGZvcgorICAgYW55IHBoeXNpY2FsIG1lbW9yeSBhY2Nlc3NlcyBiZWxvdyA2NE1iOyB0aGUgcmVzdCB3aWxsIGJlIGhhbmRsZWQgYnkKKyAgIHdpbmRvdyAyLCBtYXhpbmcgb3V0IGF0IDFHYiBvZiBtZW1vcnkuIEkgdHJ1c3QgdGhpcyBpcyBlbm91Z2guLi4gOi0pCisKKyAgIFdlIGhvcGUgdGhhdCB0aGUgYXJlYSBiZWZvcmUgdGhlIGZpcnN0IHdpbmRvdyBpcyBsYXJnZSBlbm91Z2ggc28gdGhhdAorICAgdGhlcmUgd2lsbCBiZSBubyBvdmVybGFwIGF0IHRoZSB0b3AgZW5kICg2NE1iKS4gV2UgKm11c3QqIGxvY2F0ZSB0aGUKKyAgIFBDSSBjYXJkcycgbWVtb3J5IGp1c3QgYmVsb3cgd2luZG93IDEsIHNvIHRoYXQgdGhlcmUncyBzdGlsbCB0aGUKKyAgIHBvc3NpYmlsaXR5IG9mIGJlaW5nIGFibGUgdG8gYWNjZXNzIGl0IHZpYSBTUEFSU0Ugc3BhY2UuIFRoaXMgaXMKKyAgIGltcG9ydGFudCBmb3IgY2FyZHMgc3VjaCBhcyB0aGUgTWF0cm94IE1pbGxlbm5pdW0sIHdob3NlIFhzZXJ2ZXIKKyAgIHdhbnRzIHRvIGFjY2VzcyBtZW1vcnktbWFwcGVkIHJlZ2lzdGVycyBpbiBieXRlIGFuZCBzaG9ydCBsZW5ndGhzLgorCisgICBOb3RlIHRoYXQgdGhlIFhMIGlzIHRyZWF0ZWQgZGlmZmVyZW50bHkgZnJvbSB0aGUgQVZBTlRJLCBldmVuIHRob3VnaAorICAgZm9yIG1vc3Qgb3RoZXIgdGhpbmdzIHRoZXkgYXJlIGlkZW50aWNhbC4gSXQgZGlkbid0IHNlZW0gcmVhc29uYWJsZSB0bworICAgbWFrZSB0aGUgQVZBTlRJIHN1cHBvcnQgcGF5IGZvciB0aGUgbGltaXRhdGlvbnMgb2YgdGhlIFhMLiBJdCBpcyB0cnVlLAorICAgaG93ZXZlciwgdGhhdCBhbiBYTCBrZXJuZWwgd2lsbCBydW4gb24gYW4gQVZBTlRJIHdpdGhvdXQgcHJvYmxlbXMuCisKKyAgICUlJSBBbGwgb2YgdGhpcyBzaG91bGQgYmUgb2J2aWF0ZWQgYnkgdGhlIGFiaWxpdHkgdG8gcm91dGUKKyAgIGV2ZXJ5dGhpbmcgdGhyb3VnaCB0aGUgaW9tbXUuCisqLworCisvKgorICogMjEwNzEtREEgQ29udHJvbCBhbmQgU3RhdHVzIHJlZ2lzdGVycy4KKyAqIFRoZXNlIGFyZSB1c2VkIGZvciBQQ0kgbWVtb3J5IGFjY2Vzcy4KKyAqLworI2RlZmluZSBBUEVDU19JT0NfRENTUiAgICAgICAgICAgICAgICAgIChJREVOVF9BRERSICsgMHgxQTAwMDAwMDBVTCkKKyNkZWZpbmUgQVBFQ1NfSU9DX1BFQVIgICAgICAgICAgICAgICAgICAoSURFTlRfQUREUiArIDB4MUEwMDAwMDIwVUwpCisjZGVmaW5lIEFQRUNTX0lPQ19TRUFSICAgICAgICAgICAgICAgICAgKElERU5UX0FERFIgKyAweDFBMDAwMDA0MFVMKQorI2RlZmluZSBBUEVDU19JT0NfRFIxICAgICAgICAgICAgICAgICAgIChJREVOVF9BRERSICsgMHgxQTAwMDAwNjBVTCkKKyNkZWZpbmUgQVBFQ1NfSU9DX0RSMiAgICAgICAgICAgICAgICAgICAoSURFTlRfQUREUiArIDB4MUEwMDAwMDgwVUwpCisjZGVmaW5lIEFQRUNTX0lPQ19EUjMgICAgICAgICAgICAgICAgICAgKElERU5UX0FERFIgKyAweDFBMDAwMDBBMFVMKQorCisjZGVmaW5lIEFQRUNTX0lPQ19UQjFSICAgICAgICAgICAgICAgICAgKElERU5UX0FERFIgKyAweDFBMDAwMDBDMFVMKQorI2RlZmluZSBBUEVDU19JT0NfVEIyUiAgICAgICAgICAgICAgICAgIChJREVOVF9BRERSICsgMHgxQTAwMDAwRTBVTCkKKworI2RlZmluZSBBUEVDU19JT0NfUEIxUiAgICAgICAgICAgICAgICAgIChJREVOVF9BRERSICsgMHgxQTAwMDAxMDBVTCkKKyNkZWZpbmUgQVBFQ1NfSU9DX1BCMlIgICAgICAgICAgICAgICAgICAoSURFTlRfQUREUiArIDB4MUEwMDAwMTIwVUwpCisKKyNkZWZpbmUgQVBFQ1NfSU9DX1BNMVIgICAgICAgICAgICAgICAgICAoSURFTlRfQUREUiArIDB4MUEwMDAwMTQwVUwpCisjZGVmaW5lIEFQRUNTX0lPQ19QTTJSICAgICAgICAgICAgICAgICAgKElERU5UX0FERFIgKyAweDFBMDAwMDE2MFVMKQorCisjZGVmaW5lIEFQRUNTX0lPQ19IQVhSMCAgICAgICAgICAgICAgICAgKElERU5UX0FERFIgKyAweDFBMDAwMDE4MFVMKQorI2RlZmluZSBBUEVDU19JT0NfSEFYUjEgICAgICAgICAgICAgICAgIChJREVOVF9BRERSICsgMHgxQTAwMDAxQTBVTCkKKyNkZWZpbmUgQVBFQ1NfSU9DX0hBWFIyICAgICAgICAgICAgICAgICAoSURFTlRfQUREUiArIDB4MUEwMDAwMUMwVUwpCisKKyNkZWZpbmUgQVBFQ1NfSU9DX1BNTFQgICAgICAgICAgICAgICAgICAoSURFTlRfQUREUiArIDB4MUEwMDAwMUUwVUwpCisKKyNkZWZpbmUgQVBFQ1NfSU9DX1RMQlRBRzAgICAgICAgICAgICAgICAoSURFTlRfQUREUiArIDB4MUEwMDAwMjAwVUwpCisjZGVmaW5lIEFQRUNTX0lPQ19UTEJUQUcxICAgICAgICAgICAgICAgKElERU5UX0FERFIgKyAweDFBMDAwMDIyMFVMKQorI2RlZmluZSBBUEVDU19JT0NfVExCVEFHMiAgICAgICAgICAgICAgIChJREVOVF9BRERSICsgMHgxQTAwMDAyNDBVTCkKKyNkZWZpbmUgQVBFQ1NfSU9DX1RMQlRBRzMgICAgICAgICAgICAgICAoSURFTlRfQUREUiArIDB4MUEwMDAwMjYwVUwpCisjZGVmaW5lIEFQRUNTX0lPQ19UTEJUQUc0ICAgICAgICAgICAgICAgKElERU5UX0FERFIgKyAweDFBMDAwMDI4MFVMKQorI2RlZmluZSBBUEVDU19JT0NfVExCVEFHNSAgICAgICAgICAgICAgIChJREVOVF9BRERSICsgMHgxQTAwMDAyQTBVTCkKKyNkZWZpbmUgQVBFQ1NfSU9DX1RMQlRBRzYgICAgICAgICAgICAgICAoSURFTlRfQUREUiArIDB4MUEwMDAwMkMwVUwpCisjZGVmaW5lIEFQRUNTX0lPQ19UTEJUQUc3ICAgICAgICAgICAgICAgKElERU5UX0FERFIgKyAweDFBMDAwMDJFMFVMKQorCisjZGVmaW5lIEFQRUNTX0lPQ19UTEJEQVRBMCAgICAgICAgICAgICAgKElERU5UX0FERFIgKyAweDFBMDAwMDMwMFVMKQorI2RlZmluZSBBUEVDU19JT0NfVExCREFUQTEgICAgICAgICAgICAgIChJREVOVF9BRERSICsgMHgxQTAwMDAzMjBVTCkKKyNkZWZpbmUgQVBFQ1NfSU9DX1RMQkRBVEEyICAgICAgICAgICAgICAoSURFTlRfQUREUiArIDB4MUEwMDAwMzQwVUwpCisjZGVmaW5lIEFQRUNTX0lPQ19UTEJEQVRBMyAgICAgICAgICAgICAgKElERU5UX0FERFIgKyAweDFBMDAwMDM2MFVMKQorI2RlZmluZSBBUEVDU19JT0NfVExCREFUQTQgICAgICAgICAgICAgIChJREVOVF9BRERSICsgMHgxQTAwMDAzODBVTCkKKyNkZWZpbmUgQVBFQ1NfSU9DX1RMQkRBVEE1ICAgICAgICAgICAgICAoSURFTlRfQUREUiArIDB4MUEwMDAwM0EwVUwpCisjZGVmaW5lIEFQRUNTX0lPQ19UTEJEQVRBNiAgICAgICAgICAgICAgKElERU5UX0FERFIgKyAweDFBMDAwMDNDMFVMKQorI2RlZmluZSBBUEVDU19JT0NfVExCREFUQTcgICAgICAgICAgICAgIChJREVOVF9BRERSICsgMHgxQTAwMDAzRTBVTCkKKworI2RlZmluZSBBUEVDU19JT0NfVEJJQSAgICAgICAgICAgICAgICAgIChJREVOVF9BRERSICsgMHgxQTAwMDA0MDBVTCkKKworCisvKgorICogMjEwNzEtQ0EgQ29udHJvbCBhbmQgU3RhdHVzIHJlZ2lzdGVycy4KKyAqIFRoZXNlIGFyZSB1c2VkIHRvIHByb2dyYW0gbWVtb3J5IHRpbWluZywKKyAqICBjb25maWd1cmUgbWVtb3J5IGFuZCBpbml0aWFsaXNlIHRoZSBCLUNhY2hlLgorICovCisjZGVmaW5lIEFQRUNTX01FTV9HQ1IJCSAgICAgICAgKElERU5UX0FERFIgKyAweDE4MDAwMDAwMFVMKQorI2RlZmluZSBBUEVDU19NRU1fRURTUgkJICAgICAgICAoSURFTlRfQUREUiArIDB4MTgwMDAwMDQwVUwpCisjZGVmaW5lIEFQRUNTX01FTV9UQVIgIAkJICAgICAgICAoSURFTlRfQUREUiArIDB4MTgwMDAwMDYwVUwpCisjZGVmaW5lIEFQRUNTX01FTV9FTEFSCQkgICAgICAgIChJREVOVF9BRERSICsgMHgxODAwMDAwODBVTCkKKyNkZWZpbmUgQVBFQ1NfTUVNX0VIQVIgIAkJKElERU5UX0FERFIgKyAweDE4MDAwMDBhMFVMKQorI2RlZmluZSBBUEVDU19NRU1fU0ZUX1JTVAkJKElERU5UX0FERFIgKyAweDE4MDAwMDBjMFVMKQorI2RlZmluZSBBUEVDU19NRU1fTER4TEFSIAkJKElERU5UX0FERFIgKyAweDE4MDAwMDBlMFVMKQorI2RlZmluZSBBUEVDU19NRU1fTER4SEFSIAkJKElERU5UX0FERFIgKyAweDE4MDAwMDEwMFVMKQorI2RlZmluZSBBUEVDU19NRU1fR1RSICAgIAkJKElERU5UX0FERFIgKyAweDE4MDAwMDIwMFVMKQorI2RlZmluZSBBUEVDU19NRU1fUlRSICAgIAkJKElERU5UX0FERFIgKyAweDE4MDAwMDIyMFVMKQorI2RlZmluZSBBUEVDU19NRU1fVkZQUiAgIAkJKElERU5UX0FERFIgKyAweDE4MDAwMDI0MFVMKQorI2RlZmluZSBBUEVDU19NRU1fUERMRFIgIAkJKElERU5UX0FERFIgKyAweDE4MDAwMDI2MFVMKQorI2RlZmluZSBBUEVDU19NRU1fUERoRFIgIAkJKElERU5UX0FERFIgKyAweDE4MDAwMDI4MFVMKQorCisvKiBCYW5rIHggQmFzZSBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lIEFQRUNTX01FTV9CMEJBUiAgCQkoSURFTlRfQUREUiArIDB4MTgwMDAwODAwVUwpCisjZGVmaW5lIEFQRUNTX01FTV9CMUJBUiAgCQkoSURFTlRfQUREUiArIDB4MTgwMDAwODIwVUwpCisjZGVmaW5lIEFQRUNTX01FTV9CMkJBUiAgCQkoSURFTlRfQUREUiArIDB4MTgwMDAwODQwVUwpCisjZGVmaW5lIEFQRUNTX01FTV9CM0JBUiAgCQkoSURFTlRfQUREUiArIDB4MTgwMDAwODYwVUwpCisjZGVmaW5lIEFQRUNTX01FTV9CNEJBUiAgCQkoSURFTlRfQUREUiArIDB4MTgwMDAwODgwVUwpCisjZGVmaW5lIEFQRUNTX01FTV9CNUJBUiAgCQkoSURFTlRfQUREUiArIDB4MTgwMDAwOEEwVUwpCisjZGVmaW5lIEFQRUNTX01FTV9CNkJBUiAgCQkoSURFTlRfQUREUiArIDB4MTgwMDAwOEMwVUwpCisjZGVmaW5lIEFQRUNTX01FTV9CN0JBUiAgCQkoSURFTlRfQUREUiArIDB4MTgwMDAwOEUwVUwpCisjZGVmaW5lIEFQRUNTX01FTV9COEJBUiAgCQkoSURFTlRfQUREUiArIDB4MTgwMDAwOTAwVUwpCisKKy8qIEJhbmsgeCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lIEFQRUNTX01FTV9CMEJDUiAgCQkoSURFTlRfQUREUiArIDB4MTgwMDAwQTAwVUwpCisjZGVmaW5lIEFQRUNTX01FTV9CMUJDUiAgCQkoSURFTlRfQUREUiArIDB4MTgwMDAwQTIwVUwpCisjZGVmaW5lIEFQRUNTX01FTV9CMkJDUiAgCQkoSURFTlRfQUREUiArIDB4MTgwMDAwQTQwVUwpCisjZGVmaW5lIEFQRUNTX01FTV9CM0JDUiAgCQkoSURFTlRfQUREUiArIDB4MTgwMDAwQTYwVUwpCisjZGVmaW5lIEFQRUNTX01FTV9CNEJDUiAgCQkoSURFTlRfQUREUiArIDB4MTgwMDAwQTgwVUwpCisjZGVmaW5lIEFQRUNTX01FTV9CNUJDUiAgCQkoSURFTlRfQUREUiArIDB4MTgwMDAwQUEwVUwpCisjZGVmaW5lIEFQRUNTX01FTV9CNkJDUiAgCQkoSURFTlRfQUREUiArIDB4MTgwMDAwQUMwVUwpCisjZGVmaW5lIEFQRUNTX01FTV9CN0JDUiAgCQkoSURFTlRfQUREUiArIDB4MTgwMDAwQUUwVUwpCisjZGVmaW5lIEFQRUNTX01FTV9COEJDUiAgCQkoSURFTlRfQUREUiArIDB4MTgwMDAwQjAwVUwpCisKKy8qIEJhbmsgeCBUaW1pbmcgUmVnaXN0ZXIgQSAqLworI2RlZmluZSBBUEVDU19NRU1fQjBUUkEgIAkJKElERU5UX0FERFIgKyAweDE4MDAwMEMwMFVMKQorI2RlZmluZSBBUEVDU19NRU1fQjFUUkEgIAkJKElERU5UX0FERFIgKyAweDE4MDAwMEMyMFVMKQorI2RlZmluZSBBUEVDU19NRU1fQjJUUkEgIAkJKElERU5UX0FERFIgKyAweDE4MDAwMEM0MFVMKQorI2RlZmluZSBBUEVDU19NRU1fQjNUUkEgIAkJKElERU5UX0FERFIgKyAweDE4MDAwMEM2MFVMKQorI2RlZmluZSBBUEVDU19NRU1fQjRUUkEgIAkJKElERU5UX0FERFIgKyAweDE4MDAwMEM4MFVMKQorI2RlZmluZSBBUEVDU19NRU1fQjVUUkEgIAkJKElERU5UX0FERFIgKyAweDE4MDAwMENBMFVMKQorI2RlZmluZSBBUEVDU19NRU1fQjZUUkEgIAkJKElERU5UX0FERFIgKyAweDE4MDAwMENDMFVMKQorI2RlZmluZSBBUEVDU19NRU1fQjdUUkEgIAkJKElERU5UX0FERFIgKyAweDE4MDAwMENFMFVMKQorI2RlZmluZSBBUEVDU19NRU1fQjhUUkEgIAkJKElERU5UX0FERFIgKyAweDE4MDAwMEQwMFVMKQorCisvKiBCYW5rIHggVGltaW5nIFJlZ2lzdGVyIEIgKi8KKyNkZWZpbmUgQVBFQ1NfTUVNX0IwVFJCICAgICAgICAgICAgICAgICAoSURFTlRfQUREUiArIDB4MTgwMDAwRTAwVUwpCisjZGVmaW5lIEFQRUNTX01FTV9CMVRSQiAgCQkoSURFTlRfQUREUiArIDB4MTgwMDAwRTIwVUwpCisjZGVmaW5lIEFQRUNTX01FTV9CMlRSQiAgCQkoSURFTlRfQUREUiArIDB4MTgwMDAwRTQwVUwpCisjZGVmaW5lIEFQRUNTX01FTV9CM1RSQiAgCQkoSURFTlRfQUREUiArIDB4MTgwMDAwRTYwVUwpCisjZGVmaW5lIEFQRUNTX01FTV9CNFRSQiAgCQkoSURFTlRfQUREUiArIDB4MTgwMDAwRTgwVUwpCisjZGVmaW5lIEFQRUNTX01FTV9CNVRSQiAgCQkoSURFTlRfQUREUiArIDB4MTgwMDAwRUEwVUwpCisjZGVmaW5lIEFQRUNTX01FTV9CNlRSQiAgCQkoSURFTlRfQUREUiArIDB4MTgwMDAwRUMwVUwpCisjZGVmaW5lIEFQRUNTX01FTV9CN1RSQiAgCQkoSURFTlRfQUREUiArIDB4MTgwMDAwRUUwVUwpCisjZGVmaW5lIEFQRUNTX01FTV9COFRSQiAgCQkoSURFTlRfQUREUiArIDB4MTgwMDAwRjAwVUwpCisKKworLyoKKyAqIE1lbW9yeSBzcGFjZXM6CisgKi8KKyNkZWZpbmUgQVBFQ1NfSUFDS19TQwkJICAgICAgICAoSURFTlRfQUREUiArIDB4MWIwMDAwMDAwVUwpCisjZGVmaW5lIEFQRUNTX0NPTkYJCSAgICAgICAgKElERU5UX0FERFIgKyAweDFlMDAwMDAwMFVMKQorI2RlZmluZSBBUEVDU19JTwkJCShJREVOVF9BRERSICsgMHgxYzAwMDAwMDBVTCkKKyNkZWZpbmUgQVBFQ1NfU1BBUlNFX01FTQkJKElERU5UX0FERFIgKyAweDIwMDAwMDAwMFVMKQorI2RlZmluZSBBUEVDU19ERU5TRV9NRU0JCSAgICAgICAgKElERU5UX0FERFIgKyAweDMwMDAwMDAwMFVMKQorCisKKy8qCisgKiBCaXQgZGVmaW5pdGlvbnMgZm9yIEkvTyBDb250cm9sbGVyIHN0YXR1cyByZWdpc3RlciAwOgorICovCisjZGVmaW5lIEFQRUNTX0lPQ19TVEFUMF9DTUQJCTB4ZgorI2RlZmluZSBBUEVDU19JT0NfU1RBVDBfRVJSCQkoMTw8NCkKKyNkZWZpbmUgQVBFQ1NfSU9DX1NUQVQwX0xPU1QJCSgxPDw1KQorI2RlZmluZSBBUEVDU19JT0NfU1RBVDBfVEhJVAkJKDE8PDYpCisjZGVmaW5lIEFQRUNTX0lPQ19TVEFUMF9UUkVGCQkoMTw8NykKKyNkZWZpbmUgQVBFQ1NfSU9DX1NUQVQwX0NPREVfU0hJRlQJOAorI2RlZmluZSBBUEVDU19JT0NfU1RBVDBfQ09ERV9NQVNLCTB4NworI2RlZmluZSBBUEVDU19JT0NfU1RBVDBfUF9OQlJfU0hJRlQJMTMKKyNkZWZpbmUgQVBFQ1NfSU9DX1NUQVQwX1BfTkJSX01BU0sJMHg3ZmZmZgorCisjZGVmaW5lIEFQRUNTX0hBRV9BRERSRVNTCQlBUEVDU19JT0NfSEFYUjEKKworCisvKgorICogRGF0YSBzdHJ1Y3R1cmUgZm9yIGhhbmRsaW5nIEFQRUNTIG1hY2hpbmUgY2hlY2tzOgorICovCisKK3N0cnVjdCBlbF9hcGVjc19taWthc2Ffc3lzZGF0YV9tY2hlY2sKK3sKKwl1bnNpZ25lZCBsb25nIGNvbWFfZ2NyOworCXVuc2lnbmVkIGxvbmcgY29tYV9lZHNyOworCXVuc2lnbmVkIGxvbmcgY29tYV90ZXI7CisJdW5zaWduZWQgbG9uZyBjb21hX2VsYXI7CisJdW5zaWduZWQgbG9uZyBjb21hX2VoYXI7CisJdW5zaWduZWQgbG9uZyBjb21hX2xkbHI7CisJdW5zaWduZWQgbG9uZyBjb21hX2xkaHI7CisJdW5zaWduZWQgbG9uZyBjb21hX2Jhc2UwOworCXVuc2lnbmVkIGxvbmcgY29tYV9iYXNlMTsKKwl1bnNpZ25lZCBsb25nIGNvbWFfYmFzZTI7CisJdW5zaWduZWQgbG9uZyBjb21hX2Jhc2UzOworCXVuc2lnbmVkIGxvbmcgY29tYV9jbmZnMDsKKwl1bnNpZ25lZCBsb25nIGNvbWFfY25mZzE7CisJdW5zaWduZWQgbG9uZyBjb21hX2NuZmcyOworCXVuc2lnbmVkIGxvbmcgY29tYV9jbmZnMzsKKwl1bnNpZ25lZCBsb25nIGVwaWNfZGNzcjsKKwl1bnNpZ25lZCBsb25nIGVwaWNfcGVhcjsKKwl1bnNpZ25lZCBsb25nIGVwaWNfc2VhcjsKKwl1bnNpZ25lZCBsb25nIGVwaWNfdGJyMTsKKwl1bnNpZ25lZCBsb25nIGVwaWNfdGJyMjsKKwl1bnNpZ25lZCBsb25nIGVwaWNfcGJyMTsKKwl1bnNpZ25lZCBsb25nIGVwaWNfcGJyMjsKKwl1bnNpZ25lZCBsb25nIGVwaWNfcG1yMTsKKwl1bnNpZ25lZCBsb25nIGVwaWNfcG1yMjsKKwl1bnNpZ25lZCBsb25nIGVwaWNfaGFyeDE7CisJdW5zaWduZWQgbG9uZyBlcGljX2hhcngyOworCXVuc2lnbmVkIGxvbmcgZXBpY19wbWx0OworCXVuc2lnbmVkIGxvbmcgZXBpY190YWcwOworCXVuc2lnbmVkIGxvbmcgZXBpY190YWcxOworCXVuc2lnbmVkIGxvbmcgZXBpY190YWcyOworCXVuc2lnbmVkIGxvbmcgZXBpY190YWczOworCXVuc2lnbmVkIGxvbmcgZXBpY190YWc0OworCXVuc2lnbmVkIGxvbmcgZXBpY190YWc1OworCXVuc2lnbmVkIGxvbmcgZXBpY190YWc2OworCXVuc2lnbmVkIGxvbmcgZXBpY190YWc3OworCXVuc2lnbmVkIGxvbmcgZXBpY19kYXRhMDsKKwl1bnNpZ25lZCBsb25nIGVwaWNfZGF0YTE7CisJdW5zaWduZWQgbG9uZyBlcGljX2RhdGEyOworCXVuc2lnbmVkIGxvbmcgZXBpY19kYXRhMzsKKwl1bnNpZ25lZCBsb25nIGVwaWNfZGF0YTQ7CisJdW5zaWduZWQgbG9uZyBlcGljX2RhdGE1OworCXVuc2lnbmVkIGxvbmcgZXBpY19kYXRhNjsKKwl1bnNpZ25lZCBsb25nIGVwaWNfZGF0YTc7CisKKwl1bnNpZ25lZCBsb25nIHBjZWJfdmlkOworCXVuc2lnbmVkIGxvbmcgcGNlYl9kaWQ7CisJdW5zaWduZWQgbG9uZyBwY2ViX3JldmlzaW9uOworCXVuc2lnbmVkIGxvbmcgcGNlYl9jb21tYW5kOworCXVuc2lnbmVkIGxvbmcgcGNlYl9zdGF0dXM7CisJdW5zaWduZWQgbG9uZyBwY2ViX2xhdGVuY3k7CisJdW5zaWduZWQgbG9uZyBwY2ViX2NvbnRyb2w7CisJdW5zaWduZWQgbG9uZyBwY2ViX2FyYmNvbjsKKwl1bnNpZ25lZCBsb25nIHBjZWJfYXJicHJpOworCisJdW5zaWduZWQgbG9uZyBlc2NfaWQ7CisJdW5zaWduZWQgbG9uZyBlc2NfcmV2aXNpb247CisJdW5zaWduZWQgbG9uZyBlc2NfaW50MDsKKwl1bnNpZ25lZCBsb25nIGVzY19pbnQxOworCXVuc2lnbmVkIGxvbmcgZXNjX2VsY3IwOworCXVuc2lnbmVkIGxvbmcgZXNjX2VsY3IxOworCXVuc2lnbmVkIGxvbmcgZXNjX2xhc3RfZWlzYTsKKwl1bnNpZ25lZCBsb25nIGVzY19ubWlfc3RhdDsKKworCXVuc2lnbmVkIGxvbmcgcGNpX2lyOworCXVuc2lnbmVkIGxvbmcgcGNpX2ltcjsKKwl1bnNpZ25lZCBsb25nIHN2cl9tZ3I7Cit9OworCisvKiBUaGlzIGZvciB0aGUgbm9ybWFsIEFQRUNTIG1hY2hpbmVzLiAgKi8KK3N0cnVjdCBlbF9hcGVjc19zeXNkYXRhX21jaGVjaworeworCXVuc2lnbmVkIGxvbmcgY29tYV9nY3I7CisJdW5zaWduZWQgbG9uZyBjb21hX2Vkc3I7CisJdW5zaWduZWQgbG9uZyBjb21hX3RlcjsKKwl1bnNpZ25lZCBsb25nIGNvbWFfZWxhcjsKKwl1bnNpZ25lZCBsb25nIGNvbWFfZWhhcjsKKwl1bnNpZ25lZCBsb25nIGNvbWFfbGRscjsKKwl1bnNpZ25lZCBsb25nIGNvbWFfbGRocjsKKwl1bnNpZ25lZCBsb25nIGNvbWFfYmFzZTA7CisJdW5zaWduZWQgbG9uZyBjb21hX2Jhc2UxOworCXVuc2lnbmVkIGxvbmcgY29tYV9iYXNlMjsKKwl1bnNpZ25lZCBsb25nIGNvbWFfY25mZzA7CisJdW5zaWduZWQgbG9uZyBjb21hX2NuZmcxOworCXVuc2lnbmVkIGxvbmcgY29tYV9jbmZnMjsKKwl1bnNpZ25lZCBsb25nIGVwaWNfZGNzcjsKKwl1bnNpZ25lZCBsb25nIGVwaWNfcGVhcjsKKwl1bnNpZ25lZCBsb25nIGVwaWNfc2VhcjsKKwl1bnNpZ25lZCBsb25nIGVwaWNfdGJyMTsKKwl1bnNpZ25lZCBsb25nIGVwaWNfdGJyMjsKKwl1bnNpZ25lZCBsb25nIGVwaWNfcGJyMTsKKwl1bnNpZ25lZCBsb25nIGVwaWNfcGJyMjsKKwl1bnNpZ25lZCBsb25nIGVwaWNfcG1yMTsKKwl1bnNpZ25lZCBsb25nIGVwaWNfcG1yMjsKKwl1bnNpZ25lZCBsb25nIGVwaWNfaGFyeDE7CisJdW5zaWduZWQgbG9uZyBlcGljX2hhcngyOworCXVuc2lnbmVkIGxvbmcgZXBpY19wbWx0OworCXVuc2lnbmVkIGxvbmcgZXBpY190YWcwOworCXVuc2lnbmVkIGxvbmcgZXBpY190YWcxOworCXVuc2lnbmVkIGxvbmcgZXBpY190YWcyOworCXVuc2lnbmVkIGxvbmcgZXBpY190YWczOworCXVuc2lnbmVkIGxvbmcgZXBpY190YWc0OworCXVuc2lnbmVkIGxvbmcgZXBpY190YWc1OworCXVuc2lnbmVkIGxvbmcgZXBpY190YWc2OworCXVuc2lnbmVkIGxvbmcgZXBpY190YWc3OworCXVuc2lnbmVkIGxvbmcgZXBpY19kYXRhMDsKKwl1bnNpZ25lZCBsb25nIGVwaWNfZGF0YTE7CisJdW5zaWduZWQgbG9uZyBlcGljX2RhdGEyOworCXVuc2lnbmVkIGxvbmcgZXBpY19kYXRhMzsKKwl1bnNpZ25lZCBsb25nIGVwaWNfZGF0YTQ7CisJdW5zaWduZWQgbG9uZyBlcGljX2RhdGE1OworCXVuc2lnbmVkIGxvbmcgZXBpY19kYXRhNjsKKwl1bnNpZ25lZCBsb25nIGVwaWNfZGF0YTc7Cit9OworCitzdHJ1Y3QgZWxfYXBlY3NfcHJvY2RhdGEKK3sKKwl1bnNpZ25lZCBsb25nIHBhbHRlbXBbMzJdOyAgLyogUEFMIFRFTVAgUkVHUy4gKi8KKwkvKiBFVjQtc3BlY2lmaWMgZmllbGRzICovCisJdW5zaWduZWQgbG9uZyBleGNfYWRkcjsgICAgIC8qIEFkZHJlc3Mgb2YgZXhjZXB0aW5nIGluc3RydWN0aW9uLiAqLworCXVuc2lnbmVkIGxvbmcgZXhjX3N1bTsgICAgICAvKiBTdW1tYXJ5IG9mIGFyaXRobWV0aWMgdHJhcHMuICovCisJdW5zaWduZWQgbG9uZyBleGNfbWFzazsgICAgIC8qIEV4Y2VwdGlvbiBtYXNrIChmcm9tIGV4Y19zdW0pLiAqLworCXVuc2lnbmVkIGxvbmcgaWNjc3I7ICAgICAgICAvKiBJQm94IGhhcmR3YXJlIGVuYWJsZXMuICovCisJdW5zaWduZWQgbG9uZyBwYWxfYmFzZTsgICAgIC8qIEJhc2UgYWRkcmVzcyBmb3IgUEFMY29kZS4gKi8KKwl1bnNpZ25lZCBsb25nIGhpZXI7ICAgICAgICAgLyogSGFyZHdhcmUgSW50ZXJydXB0IEVuYWJsZS4gKi8KKwl1bnNpZ25lZCBsb25nIGhpcnI7ICAgICAgICAgLyogSGFyZHdhcmUgSW50ZXJydXB0IFJlcXVlc3QuICovCisJdW5zaWduZWQgbG9uZyBjc3I7ICAgICAgICAgIC8qIEQtc3RyZWFtIGZhdWx0IGluZm8uICovCisJdW5zaWduZWQgbG9uZyBkY19zdGF0OyAgICAgIC8qIEQtY2FjaGUgc3RhdHVzIChFQ0MvUGFyaXR5IEVycikuICovCisJdW5zaWduZWQgbG9uZyBkY19hZGRyOyAgICAgIC8qIEVWMyBQaHlzIEFkZHIgZm9yIEVDQy9EUEVSUi4gKi8KKwl1bnNpZ25lZCBsb25nIGFib3hfY3RsOyAgICAgLyogQUJveCBDb250cm9sIFJlZ2lzdGVyLiAqLworCXVuc2lnbmVkIGxvbmcgYml1X3N0YXQ7ICAgICAvKiBCSVUgU3RhdHVzLiAqLworCXVuc2lnbmVkIGxvbmcgYml1X2FkZHI7ICAgICAvKiBCVUkgQWRkcmVzcy4gKi8KKwl1bnNpZ25lZCBsb25nIGJpdV9jdGw7ICAgICAgLyogQklVIENvbnRyb2wuICovCisJdW5zaWduZWQgbG9uZyBmaWxsX3N5bmRyb21lOy8qIEZvciBjb3JyZWN0aW5nIEVDQyBlcnJvcnMuICovCisJdW5zaWduZWQgbG9uZyBmaWxsX2FkZHI7ICAgIC8qIENhY2hlIGJsb2NrIHdoaWNoIHdhcyBiZWluZyByZWFkICovCisJdW5zaWduZWQgbG9uZyB2YTsgICAgICAgICAgIC8qIEVmZmVjdGl2ZSBWQSBvZiBmYXVsdCBvciBtaXNzLiAqLworCXVuc2lnbmVkIGxvbmcgYmNfdGFnOyAgICAgICAvKiBCYWNrdXAgQ2FjaGUgVGFnIFByb2JlIFJlc3VsdHMuKi8KK307CisKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2lmbmRlZiBfX0VYVEVSTl9JTkxJTkUKKyNkZWZpbmUgX19FWFRFUk5fSU5MSU5FIGV4dGVybiBpbmxpbmUKKyNkZWZpbmUgX19JT19FWFRFUk5fSU5MSU5FCisjZW5kaWYKKworLyoKKyAqIEkvTyBmdW5jdGlvbnM6CisgKgorICogVW5saWtlIEplbnNlbiwgdGhlIEFQRUNTIG1hY2hpbmVzIGhhdmUgbm8gY29uY2VwdCBvZiBsb2NhbAorICogSS9PLS0tZXZlcnl0aGluZyBnb2VzIG92ZXIgdGhlIFBDSSBidXMuCisgKgorICogVGhlcmUgaXMgcGxlbnR5IHJvb20gZm9yIG9wdGltaXphdGlvbiBoZXJlLiAgSW4gcGFydGljdWxhciwKKyAqIHRoZSBBbHBoYSdzIGluc2IvaW5zdy9leHRiL2V4dHcgc2hvdWxkIGJlIHVzZWZ1bCBpbiBtb3ZpbmcKKyAqIGRhdGEgdG8vZnJvbSB0aGUgcmlnaHQgYnl0ZS1sYW5lcy4KKyAqLworCisjZGVmaW5lIHZpcAl2b2xhdGlsZSBpbnQgX19mb3JjZSAqCisjZGVmaW5lIHZ1aXAJdm9sYXRpbGUgdW5zaWduZWQgaW50IF9fZm9yY2UgKgorI2RlZmluZSB2dWxwCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgX19mb3JjZSAqCisKKyNkZWZpbmUgQVBFQ1NfU0VUX0hBRQkJCQkJCVwKKwlkbyB7CQkJCQkJCVwKKwkJaWYgKGFkZHIgPj0gKDFVTCA8PCAyNCkpIHsJCQlcCisJCQl1bnNpZ25lZCBsb25nIG1zYiA9IGFkZHIgJiAweGY4MDAwMDAwOwlcCisJCQlhZGRyIC09IG1zYjsJCQkJXAorCQkJc2V0X2hhZShtc2IpOwkJCQlcCisJCX0JCQkJCQlcCisJfSB3aGlsZSAoMCkKKworX19FWFRFUk5fSU5MSU5FIHVuc2lnbmVkIGludCBhcGVjc19pb3JlYWQ4KHZvaWQgX19pb21lbSAqeGFkZHIpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpIHhhZGRyOworCXVuc2lnbmVkIGxvbmcgcmVzdWx0LCBiYXNlX2FuZF90eXBlOworCisJaWYgKGFkZHIgPj0gQVBFQ1NfREVOU0VfTUVNKSB7CisJCWFkZHIgLT0gQVBFQ1NfREVOU0VfTUVNOworCQlBUEVDU19TRVRfSEFFOworCQliYXNlX2FuZF90eXBlID0gQVBFQ1NfU1BBUlNFX01FTSArIDB4MDA7CisJfSBlbHNlIHsKKwkJYWRkciAtPSBBUEVDU19JTzsKKwkJYmFzZV9hbmRfdHlwZSA9IEFQRUNTX0lPICsgMHgwMDsKKwl9CisKKwlyZXN1bHQgPSAqKHZpcCkgKChhZGRyIDw8IDUpICsgYmFzZV9hbmRfdHlwZSk7CisJcmV0dXJuIF9fa2VybmVsX2V4dGJsKHJlc3VsdCwgYWRkciAmIDMpOworfQorCitfX0VYVEVSTl9JTkxJTkUgdm9pZCBhcGVjc19pb3dyaXRlOCh1OCBiLCB2b2lkIF9faW9tZW0gKnhhZGRyKQoreworCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKSB4YWRkcjsKKwl1bnNpZ25lZCBsb25nIHcsIGJhc2VfYW5kX3R5cGU7CisKKwlpZiAoYWRkciA+PSBBUEVDU19ERU5TRV9NRU0pIHsKKwkJYWRkciAtPSBBUEVDU19ERU5TRV9NRU07CisJCUFQRUNTX1NFVF9IQUU7CisJCWJhc2VfYW5kX3R5cGUgPSBBUEVDU19TUEFSU0VfTUVNICsgMHgwMDsKKwl9IGVsc2UgeworCQlhZGRyIC09IEFQRUNTX0lPOworCQliYXNlX2FuZF90eXBlID0gQVBFQ1NfSU8gKyAweDAwOworCX0KKworCXcgPSBfX2tlcm5lbF9pbnNibChiLCBhZGRyICYgMyk7CisJKih2dWlwKSAoKGFkZHIgPDwgNSkgKyBiYXNlX2FuZF90eXBlKSA9IHc7Cit9CisKK19fRVhURVJOX0lOTElORSB1bnNpZ25lZCBpbnQgYXBlY3NfaW9yZWFkMTYodm9pZCBfX2lvbWVtICp4YWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZykgeGFkZHI7CisJdW5zaWduZWQgbG9uZyByZXN1bHQsIGJhc2VfYW5kX3R5cGU7CisKKwlpZiAoYWRkciA+PSBBUEVDU19ERU5TRV9NRU0pIHsKKwkJYWRkciAtPSBBUEVDU19ERU5TRV9NRU07CisJCUFQRUNTX1NFVF9IQUU7CisJCWJhc2VfYW5kX3R5cGUgPSBBUEVDU19TUEFSU0VfTUVNICsgMHgwODsKKwl9IGVsc2UgeworCQlhZGRyIC09IEFQRUNTX0lPOworCQliYXNlX2FuZF90eXBlID0gQVBFQ1NfSU8gKyAweDA4OworCX0KKworCXJlc3VsdCA9ICoodmlwKSAoKGFkZHIgPDwgNSkgKyBiYXNlX2FuZF90eXBlKTsKKwlyZXR1cm4gX19rZXJuZWxfZXh0d2wocmVzdWx0LCBhZGRyICYgMyk7Cit9CisKK19fRVhURVJOX0lOTElORSB2b2lkIGFwZWNzX2lvd3JpdGUxNih1MTYgYiwgdm9pZCBfX2lvbWVtICp4YWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZykgeGFkZHI7CisJdW5zaWduZWQgbG9uZyB3LCBiYXNlX2FuZF90eXBlOworCisJaWYgKGFkZHIgPj0gQVBFQ1NfREVOU0VfTUVNKSB7CisJCWFkZHIgLT0gQVBFQ1NfREVOU0VfTUVNOworCQlBUEVDU19TRVRfSEFFOworCQliYXNlX2FuZF90eXBlID0gQVBFQ1NfU1BBUlNFX01FTSArIDB4MDg7CisJfSBlbHNlIHsKKwkJYWRkciAtPSBBUEVDU19JTzsKKwkJYmFzZV9hbmRfdHlwZSA9IEFQRUNTX0lPICsgMHgwODsKKwl9CisKKwl3ID0gX19rZXJuZWxfaW5zd2woYiwgYWRkciAmIDMpOworCSoodnVpcCkgKChhZGRyIDw8IDUpICsgYmFzZV9hbmRfdHlwZSkgPSB3OworfQorCitfX0VYVEVSTl9JTkxJTkUgdW5zaWduZWQgaW50IGFwZWNzX2lvcmVhZDMyKHZvaWQgX19pb21lbSAqeGFkZHIpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpIHhhZGRyOworCWlmIChhZGRyIDwgQVBFQ1NfREVOU0VfTUVNKQorCQlhZGRyID0gKChhZGRyIC0gQVBFQ1NfSU8pIDw8IDUpICsgQVBFQ1NfSU8gKyAweDE4OworCXJldHVybiAqKHZ1aXApYWRkcjsKK30KKworX19FWFRFUk5fSU5MSU5FIHZvaWQgYXBlY3NfaW93cml0ZTMyKHUzMiBiLCB2b2lkIF9faW9tZW0gKnhhZGRyKQoreworCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKSB4YWRkcjsKKwlpZiAoYWRkciA8IEFQRUNTX0RFTlNFX01FTSkKKwkJYWRkciA9ICgoYWRkciAtIEFQRUNTX0lPKSA8PCA1KSArIEFQRUNTX0lPICsgMHgxODsKKwkqKHZ1aXApYWRkciA9IGI7Cit9CisKK19fRVhURVJOX0lOTElORSB2b2lkIF9faW9tZW0gKmFwZWNzX2lvcG9ydG1hcCh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcmV0dXJuICh2b2lkIF9faW9tZW0gKikoYWRkciArIEFQRUNTX0lPKTsKK30KKworX19FWFRFUk5fSU5MSU5FIHZvaWQgX19pb21lbSAqYXBlY3NfaW9yZW1hcCh1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkJCSAgICB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJcmV0dXJuICh2b2lkIF9faW9tZW0gKikoYWRkciArIEFQRUNTX0RFTlNFX01FTSk7Cit9CisKK19fRVhURVJOX0lOTElORSBpbnQgYXBlY3NfaXNfaW9hZGRyKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gYWRkciA+PSBJREVOVF9BRERSICsgMHgxODAwMDAwMDBVTDsKK30KKworX19FWFRFUk5fSU5MSU5FIGludCBhcGVjc19pc19tbWlvKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpYWRkciA+PSBBUEVDU19ERU5TRV9NRU07Cit9CisKKyN1bmRlZiBBUEVDU19TRVRfSEFFCisKKyN1bmRlZiB2aXAKKyN1bmRlZiB2dWlwCisjdW5kZWYgdnVscAorCisjdW5kZWYgX19JT19QUkVGSVgKKyNkZWZpbmUgX19JT19QUkVGSVgJCWFwZWNzCisjZGVmaW5lIGFwZWNzX3RyaXZpYWxfaW9fYncJMAorI2RlZmluZSBhcGVjc190cml2aWFsX2lvX2xxCTAKKyNkZWZpbmUgYXBlY3NfdHJpdmlhbF9yd19idwkyCisjZGVmaW5lIGFwZWNzX3RyaXZpYWxfcndfbHEJMQorI2RlZmluZSBhcGVjc190cml2aWFsX2lvdW5tYXAJMQorI2luY2x1ZGUgPGFzbS9pb190cml2aWFsLmg+CisKKyNpZmRlZiBfX0lPX0VYVEVSTl9JTkxJTkUKKyN1bmRlZiBfX0VYVEVSTl9JTkxJTkUKKyN1bmRlZiBfX0lPX0VYVEVSTl9JTkxJTkUKKyNlbmRpZgorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX19BTFBIQV9BUEVDU19fSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9jb3JlX2NpYS5oIGIvaW5jbHVkZS9hc20tYWxwaGEvY29yZV9jaWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTcwZDY4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvY29yZV9jaWEuaApAQCAtMCwwICsxLDUwMSBAQAorI2lmbmRlZiBfX0FMUEhBX0NJQV9fSF9fCisjZGVmaW5lIF9fQUxQSEFfQ0lBX19IX18KKworLyogRGVmaW5lIHRvIGV4cGVyaW1lbnQgd2l0aCBmaXR0aW5nIGV2ZXJ5dGhpbmcgaW50byBvbmUgNTEyTUIgSEFFIHdpbmRvdy4gICovCisjZGVmaW5lIENJQV9PTkVfSEFFX1dJTkRPVyAxCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9jb21waWxlci5oPgorCisvKgorICogQ0lBIGlzIHRoZSBpbnRlcm5hbCBuYW1lIGZvciB0aGUgMjExNzEgY2hpcHNldCB3aGljaCBwcm92aWRlcworICogbWVtb3J5IGNvbnRyb2xsZXIgYW5kIFBDSSBhY2Nlc3MgZm9yIHRoZSAyMTE2NCBjaGlwIGJhc2VkIHN5c3RlbXMuCisgKiBBbHNvIHN1cHBvcnRlZCBoZXJlIGlzIHRoZSAyMTE3MiAoQ0lBLTIpIGFuZCAyMTE3NCAoUFlYSVMpLgorICoKKyAqIFRoZSBsaW5lYWdlIGlzIGEgYml0IGNvbmZ1c2VkLCBzaW5jZSB0aGUgMjExNzQgd2FzIHJlcG9ydGVkbHkgc3RhcnRlZAorICogZnJvbSB0aGUgMjExNzEgUGFzcyAxIG1hc2ssIGFuZCBzbyBpcyBtaXNzaW5nIGJ1ZyBmaXhlcyB0aGF0IGFwcGVhcgorICogaW4gMjExNzEgUGFzcyAyIGFuZCAyMTE3MiwgYnV0IGl0IGFsc28gY29udGFpbnMgYWRkaXRpb25hbCBmZWF0dXJlcy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgYmFzZWQgb246CisgKgorICogREVDY2hpcCAyMTE3MSBDb3JlIExvZ2ljIENoaXBzZXQKKyAqIFRlY2huaWNhbCBSZWZlcmVuY2UgTWFudWFsCisgKgorICogRUMtUUUxOEItVEUKKyAqCisgKiBkYXZpZC5ydXNsaW5nQHJlby5tdHMuZGVjLmNvbSBJbml0aWFsIFZlcnNpb24uCisgKgorICovCisKKy8qCisgKiBDSUEgQUREUkVTUyBCSVQgREVGSU5JVElPTlMKKyAqCisgKiAgMzMzMyAzMzMzIDMzMjIgMjIyMiAyMjIyIDExMTEgMTExMSAxMQorICogIDk4NzYgNTQzMiAxMDk4IDc2NTQgMzIxMCA5ODc2IDU0MzIgMTA5OCA3NjU0IDMyMTAKKyAqICAtLS0tIC0tLS0gLS0tLSAtLS0tIC0tLS0gLS0tLSAtLS0tIC0tLS0gLS0tLSAtLS0tCisgKiAgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAwMAorICogIC0tLS0gLS0tLSAtLS0tIC0tLS0gLS0tLSAtLS0tIC0tLS0gLS0tLSAtLS0tIC0tLS0KKyAqICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFx8CisgKiAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCeXRlIEVuYWJsZSAtLSsgfAorICogIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZmVyIExlbmd0aCAtLSsKKyAqICArLS0gSU8gc3BhY2UsIG5vdCBjYWNoZWQKKyAqCisgKiAgIEJ5dGUgICAgICBUcmFuc2ZlcgorICogICBFbmFibGUgICAgTGVuZ3RoICAgIFRyYW5zZmVyICBCeXRlICAgIEFkZHJlc3MKKyAqICAgYWRyPDY6NT4gIGFkcjw0OjM+ICBMZW5ndGggICAgRW5hYmxlICBBZGRlcgorICogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgICAgMDAgICAgICAgIDAwICAgICAgQnl0ZSAgICAgIDExMTAgICAweDAwMAorICogICAgICAwMSAgICAgICAgMDAgICAgICBCeXRlICAgICAgMTEwMSAgIDB4MDIwCisgKiAgICAgIDEwICAgICAgICAwMCAgICAgIEJ5dGUgICAgICAxMDExICAgMHgwNDAKKyAqICAgICAgMTEgICAgICAgIDAwICAgICAgQnl0ZSAgICAgIDAxMTEgICAweDA2MAorICoKKyAqICAgICAgMDAgICAgICAgIDAxICAgICAgV29yZCAgICAgIDExMDAgICAweDAwOAorICogICAgICAwMSAgICAgICAgMDEgICAgICBXb3JkICAgICAgMTAwMSAgIDB4MDI4IDw9IE5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBjb2RlLgorICogICAgICAxMCAgICAgICAgMDEgICAgICBXb3JkICAgICAgMDAxMSAgIDB4MDQ4CisgKgorICogICAgICAwMCAgICAgICAgMTAgICAgICBUcmlieXRlICAgMTAwMCAgIDB4MDEwCisgKiAgICAgIDAxICAgICAgICAxMCAgICAgIFRyaWJ5dGUgICAwMDAxICAgMHgwMzAKKyAqCisgKiAgICAgIDEwICAgICAgICAxMSAgICAgIExvbmd3b3JkICAwMDAwICAgMHgwNTgKKyAqCisgKiAgICAgIE5vdGUgdGhhdCBieXRlIGVuYWJsZXMgYXJlIGFzc2VydGVkIGxvdy4KKyAqCisgKi8KKworI2RlZmluZSBDSUFfTUVNX1IxX01BU0sgMHgxZmZmZmZmZiAgLyogU1BBUlNFIE1lbSByZWdpb24gMSBtYXNrIGlzIDI5IGJpdHMgKi8KKyNkZWZpbmUgQ0lBX01FTV9SMl9NQVNLIDB4MDdmZmZmZmYgIC8qIFNQQVJTRSBNZW0gcmVnaW9uIDIgbWFzayBpcyAyNyBiaXRzICovCisjZGVmaW5lIENJQV9NRU1fUjNfTUFTSyAweDAzZmZmZmZmICAvKiBTUEFSU0UgTWVtIHJlZ2lvbiAzIG1hc2sgaXMgMjYgYml0cyAqLworCisvKgorICogMjExNzEtQ0EgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVycworICovCisjZGVmaW5lIENJQV9JT0NfQ0lBX1JFVgkJCShJREVOVF9BRERSICsgMHg4NzQwMDAwMDgwVUwpCisjICBkZWZpbmUgQ0lBX1JFVl9NQVNLCQkJMHhmZgorI2RlZmluZSBDSUFfSU9DX1BDSV9MQVQJCQkoSURFTlRfQUREUiArIDB4ODc0MDAwMDBDMFVMKQorI2RlZmluZSBDSUFfSU9DX0NJQV9DVFJMCQkoSURFTlRfQUREUiArIDB4ODc0MDAwMDEwMFVMKQorIyAgZGVmaW5lIENJQV9DVFJMX1BDSV9FTgkJKDEgPDwgMCkKKyMgIGRlZmluZSBDSUFfQ1RSTF9QQ0lfTE9DS19FTgkJKDEgPDwgMSkKKyMgIGRlZmluZSBDSUFfQ1RSTF9QQ0lfTE9PUF9FTgkJKDEgPDwgMikKKyMgIGRlZmluZSBDSUFfQ1RSTF9GU1RfQkJfRU4JCSgxIDw8IDMpCisjICBkZWZpbmUgQ0lBX0NUUkxfUENJX01TVF9FTgkJKDEgPDwgNCkKKyMgIGRlZmluZSBDSUFfQ1RSTF9QQ0lfTUVNX0VOCQkoMSA8PCA1KQorIyAgZGVmaW5lIENJQV9DVFJMX1BDSV9SRVE2NF9FTgkJKDEgPDwgNikKKyMgIGRlZmluZSBDSUFfQ1RSTF9QQ0lfQUNLNjRfRU4JCSgxIDw8IDcpCisjICBkZWZpbmUgQ0lBX0NUUkxfQUREUl9QRV9FTgkJKDEgPDwgOCkKKyMgIGRlZmluZSBDSUFfQ1RSTF9QRVJSX0VOCQkoMSA8PCA5KQorIyAgZGVmaW5lIENJQV9DVFJMX0ZJTExfRVJSX0VOCQkoMSA8PCAxMCkKKyMgIGRlZmluZSBDSUFfQ1RSTF9NQ0hLX0VSUl9FTgkJKDEgPDwgMTEpCisjICBkZWZpbmUgQ0lBX0NUUkxfRUNDX0NIS19FTgkJKDEgPDwgMTIpCisjICBkZWZpbmUgQ0lBX0NUUkxfQVNTRVJUX0lETEVfQkMJKDEgPDwgMTMpCisjICBkZWZpbmUgQ0lBX0NUUkxfQ09NX0lETEVfQkMJCSgxIDw8IDE0KQorIyAgZGVmaW5lIENJQV9DVFJMX0NTUl9JT0FfQllQQVNTCSgxIDw8IDE1KQorIyAgZGVmaW5lIENJQV9DVFJMX0lPX0ZMVVNIUkVRX0VOCSgxIDw8IDE2KQorIyAgZGVmaW5lIENJQV9DVFJMX0NQVV9GTFVTSFJFUV9FTgkoMSA8PCAxNykKKyMgIGRlZmluZSBDSUFfQ1RSTF9BUkJfQ1BVX0VOCQkoMSA8PCAxOCkKKyMgIGRlZmluZSBDSUFfQ1RSTF9FTl9BUkJfTElOSwkJKDEgPDwgMTkpCisjICBkZWZpbmUgQ0lBX0NUUkxfUkRfVFlQRV9TSElGVAkyMAorIyAgZGVmaW5lIENJQV9DVFJMX1JMX1RZUEVfU0hJRlQJMjQKKyMgIGRlZmluZSBDSUFfQ1RSTF9STV9UWVBFX1NISUZUCTI4CisjICBkZWZpbmUgQ0lBX0NUUkxfRU5fRE1BX1JEX1BFUkYJKDEgPDwgMzEpCisjZGVmaW5lIENJQV9JT0NfQ0lBX0NORkcJCShJREVOVF9BRERSICsgMHg4NzQwMDAwMTQwVUwpCisjICBkZWZpbmUgQ0lBX0NORkdfSU9BX0JXRU4JCSgxIDw8IDApCisjICBkZWZpbmUgQ0lBX0NORkdfUENJX01XRU4JCSgxIDw8IDQpCisjICBkZWZpbmUgQ0lBX0NORkdfUENJX0RXRU4JCSgxIDw8IDUpCisjICBkZWZpbmUgQ0lBX0NORkdfUENJX1dMRU4JCSgxIDw8IDgpCisjZGVmaW5lIENJQV9JT0NfRkxBU0hfQ1RSTAkJKElERU5UX0FERFIgKyAweDg3NDAwMDAyMDBVTCkKKyNkZWZpbmUgQ0lBX0lPQ19IQUVfTUVNCQkJKElERU5UX0FERFIgKyAweDg3NDAwMDA0MDBVTCkKKyNkZWZpbmUgQ0lBX0lPQ19IQUVfSU8JCQkoSURFTlRfQUREUiArIDB4ODc0MDAwMDQ0MFVMKQorI2RlZmluZSBDSUFfSU9DX0NGRwkJCShJREVOVF9BRERSICsgMHg4NzQwMDAwNDgwVUwpCisjZGVmaW5lIENJQV9JT0NfQ0FDS19FTgkJCShJREVOVF9BRERSICsgMHg4NzQwMDAwNjAwVUwpCisjICBkZWZpbmUgQ0lBX0NBQ0tfRU5fTE9DS19FTgkJKDEgPDwgMCkKKyMgIGRlZmluZSBDSUFfQ0FDS19FTl9NQl9FTgkJKDEgPDwgMSkKKyMgIGRlZmluZSBDSUFfQ0FDS19FTl9TRVRfRElSVFlfRU4JKDEgPDwgMikKKyMgIGRlZmluZSBDSUFfQ0FDS19FTl9CQ19WSUNUSU1fRU4JKDEgPDwgMykKKworCisvKgorICogMjExNzEtQ0EgRGlhZ25vc3RpYyBSZWdpc3RlcnMKKyAqLworI2RlZmluZSBDSUFfSU9DX0NJQV9ESUFHCQkoSURFTlRfQUREUiArIDB4ODc0MDAwMjAwMFVMKQorI2RlZmluZSBDSUFfSU9DX0RJQUdfQ0hFQ0sJCShJREVOVF9BRERSICsgMHg4NzQwMDAzMDAwVUwpCisKKy8qCisgKiAyMTE3MS1DQSBQZXJmb3JtYW5jZSBNb25pdG9yIHJlZ2lzdGVycworICovCisjZGVmaW5lIENJQV9JT0NfUEVSRl9NT05JVE9SCQkoSURFTlRfQUREUiArIDB4ODc0MDAwNDAwMFVMKQorI2RlZmluZSBDSUFfSU9DX1BFUkZfQ09OVFJPTAkJKElERU5UX0FERFIgKyAweDg3NDAwMDQwNDBVTCkKKworLyoKKyAqIDIxMTcxLUNBIEVycm9yIHJlZ2lzdGVycworICovCisjZGVmaW5lIENJQV9JT0NfQ1BVX0VSUjAJCShJREVOVF9BRERSICsgMHg4NzQwMDA4MDAwVUwpCisjZGVmaW5lIENJQV9JT0NfQ1BVX0VSUjEJCShJREVOVF9BRERSICsgMHg4NzQwMDA4MDQwVUwpCisjZGVmaW5lIENJQV9JT0NfQ0lBX0VSUgkJCShJREVOVF9BRERSICsgMHg4NzQwMDA4MjAwVUwpCisjICBkZWZpbmUgQ0lBX0VSUl9DT1JfRVJSCQkoMSA8PCAwKQorIyAgZGVmaW5lIENJQV9FUlJfVU5fQ09SX0VSUgkJKDEgPDwgMSkKKyMgIGRlZmluZSBDSUFfRVJSX0NQVV9QRQkJKDEgPDwgMikKKyMgIGRlZmluZSBDSUFfRVJSX01FTV9ORU0JCSgxIDw8IDMpCisjICBkZWZpbmUgQ0lBX0VSUl9QQ0lfU0VSUgkJKDEgPDwgNCkKKyMgIGRlZmluZSBDSUFfRVJSX1BFUlIJCQkoMSA8PCA1KQorIyAgZGVmaW5lIENJQV9FUlJfUENJX0FERFJfUEUJCSgxIDw8IDYpCisjICBkZWZpbmUgQ0lBX0VSUl9SQ1ZEX01BU19BQlQJCSgxIDw8IDcpCisjICBkZWZpbmUgQ0lBX0VSUl9SQ1ZEX1RBUl9BQlQJCSgxIDw8IDgpCisjICBkZWZpbmUgQ0lBX0VSUl9QQV9QVEVfSU5WCQkoMSA8PCA5KQorIyAgZGVmaW5lIENJQV9FUlJfRlJPTV9XUlRfRVJSCQkoMSA8PCAxMCkKKyMgIGRlZmluZSBDSUFfRVJSX0lPQV9USU1FT1VUCQkoMSA8PCAxMSkKKyMgIGRlZmluZSBDSUFfRVJSX0xPU1RfQ09SUl9FUlIJCSgxIDw8IDE2KQorIyAgZGVmaW5lIENJQV9FUlJfTE9TVF9VTl9DT1JSX0VSUgkoMSA8PCAxNykKKyMgIGRlZmluZSBDSUFfRVJSX0xPU1RfQ1BVX1BFCQkoMSA8PCAxOCkKKyMgIGRlZmluZSBDSUFfRVJSX0xPU1RfTUVNX05FTQkJKDEgPDwgMTkpCisjICBkZWZpbmUgQ0lBX0VSUl9MT1NUX1BFUlIJCSgxIDw8IDIxKQorIyAgZGVmaW5lIENJQV9FUlJfTE9TVF9QQ0lfQUREUl9QRQkoMSA8PCAyMikKKyMgIGRlZmluZSBDSUFfRVJSX0xPU1RfUkNWRF9NQVNfQUJUCSgxIDw8IDIzKQorIyAgZGVmaW5lIENJQV9FUlJfTE9TVF9SQ1ZEX1RBUl9BQlQJKDEgPDwgMjQpCisjICBkZWZpbmUgQ0lBX0VSUl9MT1NUX1BBX1BURV9JTlYJKDEgPDwgMjUpCisjICBkZWZpbmUgQ0lBX0VSUl9MT1NUX0ZST01fV1JUX0VSUgkoMSA8PCAyNikKKyMgIGRlZmluZSBDSUFfRVJSX0xPU1RfSU9BX1RJTUVPVVQJKDEgPDwgMjcpCisjICBkZWZpbmUgQ0lBX0VSUl9WQUxJRAkJCSgxIDw8IDMxKQorI2RlZmluZSBDSUFfSU9DX0NJQV9TVEFUCQkoSURFTlRfQUREUiArIDB4ODc0MDAwODI0MFVMKQorI2RlZmluZSBDSUFfSU9DX0VSUl9NQVNLCQkoSURFTlRfQUREUiArIDB4ODc0MDAwODI4MFVMKQorI2RlZmluZSBDSUFfSU9DX0NJQV9TWU4JCQkoSURFTlRfQUREUiArIDB4ODc0MDAwODMwMFVMKQorI2RlZmluZSBDSUFfSU9DX01FTV9FUlIwCQkoSURFTlRfQUREUiArIDB4ODc0MDAwODQwMFVMKQorI2RlZmluZSBDSUFfSU9DX01FTV9FUlIxCQkoSURFTlRfQUREUiArIDB4ODc0MDAwODQ0MFVMKQorI2RlZmluZSBDSUFfSU9DX1BDSV9FUlIwCQkoSURFTlRfQUREUiArIDB4ODc0MDAwODgwMFVMKQorI2RlZmluZSBDSUFfSU9DX1BDSV9FUlIxCQkoSURFTlRfQUREUiArIDB4ODc0MDAwODg0MFVMKQorI2RlZmluZSBDSUFfSU9DX1BDSV9FUlIzCQkoSURFTlRfQUREUiArIDB4ODc0MDAwODg4MFVMKQorCisvKgorICogMjExNzEtQ0EgU3lzdGVtIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzCisgKi8KKyNkZWZpbmUgQ0lBX0lPQ19NQ1IJCQkoSURFTlRfQUREUiArIDB4ODc1MDAwMDAwMFVMKQorI2RlZmluZSBDSUFfSU9DX01CQTAJCQkoSURFTlRfQUREUiArIDB4ODc1MDAwMDYwMFVMKQorI2RlZmluZSBDSUFfSU9DX01CQTIJCQkoSURFTlRfQUREUiArIDB4ODc1MDAwMDY4MFVMKQorI2RlZmluZSBDSUFfSU9DX01CQTQJCQkoSURFTlRfQUREUiArIDB4ODc1MDAwMDcwMFVMKQorI2RlZmluZSBDSUFfSU9DX01CQTYJCQkoSURFTlRfQUREUiArIDB4ODc1MDAwMDc4MFVMKQorI2RlZmluZSBDSUFfSU9DX01CQTgJCQkoSURFTlRfQUREUiArIDB4ODc1MDAwMDgwMFVMKQorI2RlZmluZSBDSUFfSU9DX01CQUEJCQkoSURFTlRfQUREUiArIDB4ODc1MDAwMDg4MFVMKQorI2RlZmluZSBDSUFfSU9DX01CQUMJCQkoSURFTlRfQUREUiArIDB4ODc1MDAwMDkwMFVMKQorI2RlZmluZSBDSUFfSU9DX01CQUUJCQkoSURFTlRfQUREUiArIDB4ODc1MDAwMDk4MFVMKQorI2RlZmluZSBDSUFfSU9DX1RNRzAJCQkoSURFTlRfQUREUiArIDB4ODc1MDAwMEIwMFVMKQorI2RlZmluZSBDSUFfSU9DX1RNRzEJCQkoSURFTlRfQUREUiArIDB4ODc1MDAwMEI0MFVMKQorI2RlZmluZSBDSUFfSU9DX1RNRzIJCQkoSURFTlRfQUREUiArIDB4ODc1MDAwMEI4MFVMKQorCisvKgorICogMjExN0EtQ0EgUENJIEFkZHJlc3MgYW5kIFNjYXR0ZXItR2F0aGVyIFJlZ2lzdGVycy4KKyAqLworI2RlZmluZSBDSUFfSU9DX1BDSV9UQklBCQkoSURFTlRfQUREUiArIDB4ODc2MDAwMDEwMFVMKQorCisjZGVmaW5lIENJQV9JT0NfUENJX1cwX0JBU0UJCShJREVOVF9BRERSICsgMHg4NzYwMDAwNDAwVUwpCisjZGVmaW5lIENJQV9JT0NfUENJX1cwX01BU0sJCShJREVOVF9BRERSICsgMHg4NzYwMDAwNDQwVUwpCisjZGVmaW5lIENJQV9JT0NfUENJX1QwX0JBU0UJCShJREVOVF9BRERSICsgMHg4NzYwMDAwNDgwVUwpCisKKyNkZWZpbmUgQ0lBX0lPQ19QQ0lfVzFfQkFTRQkJKElERU5UX0FERFIgKyAweDg3NjAwMDA1MDBVTCkKKyNkZWZpbmUgQ0lBX0lPQ19QQ0lfVzFfTUFTSwkJKElERU5UX0FERFIgKyAweDg3NjAwMDA1NDBVTCkKKyNkZWZpbmUgQ0lBX0lPQ19QQ0lfVDFfQkFTRQkJKElERU5UX0FERFIgKyAweDg3NjAwMDA1ODBVTCkKKworI2RlZmluZSBDSUFfSU9DX1BDSV9XMl9CQVNFCQkoSURFTlRfQUREUiArIDB4ODc2MDAwMDYwMFVMKQorI2RlZmluZSBDSUFfSU9DX1BDSV9XMl9NQVNLCQkoSURFTlRfQUREUiArIDB4ODc2MDAwMDY0MFVMKQorI2RlZmluZSBDSUFfSU9DX1BDSV9UMl9CQVNFCQkoSURFTlRfQUREUiArIDB4ODc2MDAwMDY4MFVMKQorCisjZGVmaW5lIENJQV9JT0NfUENJX1czX0JBU0UJCShJREVOVF9BRERSICsgMHg4NzYwMDAwNzAwVUwpCisjZGVmaW5lIENJQV9JT0NfUENJX1czX01BU0sJCShJREVOVF9BRERSICsgMHg4NzYwMDAwNzQwVUwpCisjZGVmaW5lIENJQV9JT0NfUENJX1QzX0JBU0UJCShJREVOVF9BRERSICsgMHg4NzYwMDAwNzgwVUwpCisKKyNkZWZpbmUgQ0lBX0lPQ19QQ0lfV25fQkFTRShOKQkoSURFTlRfQUREUiArIDB4ODc2MDAwMDQwMFVMICsgKE4pKjB4MTAwKSAKKyNkZWZpbmUgQ0lBX0lPQ19QQ0lfV25fTUFTSyhOKQkoSURFTlRfQUREUiArIDB4ODc2MDAwMDQ0MFVMICsgKE4pKjB4MTAwKSAKKyNkZWZpbmUgQ0lBX0lPQ19QQ0lfVG5fQkFTRShOKQkoSURFTlRfQUREUiArIDB4ODc2MDAwMDQ4MFVMICsgKE4pKjB4MTAwKSAKKworI2RlZmluZSBDSUFfSU9DX1BDSV9XX0RBQwkJKElERU5UX0FERFIgKyAweDg3NjAwMDA3QzBVTCkKKworLyoKKyAqIDIxMTdBLUNBIEFkZHJlc3MgVHJhbnNsYXRpb24gUmVnaXN0ZXJzLgorICovCisKKy8qIDggdGFnIHJlZ2lzdGVycywgdGhlIGZpcnN0IDQgb2Ygd2hpY2ggYXJlIGxvY2thYmxlLiAgKi8KKyNkZWZpbmUgQ0lBX0lPQ19UQl9UQUduKG4pIFwKKwkoSURFTlRfQUREUiArIDB4ODc2MDAwMDgwMFVMICsgKG4pKjB4NDApCisKKy8qIDQgcGFnZSByZWdpc3RlcnMgcGVyIHRhZyByZWdpc3Rlci4gICovCisjZGVmaW5lIENJQV9JT0NfVEJuX1BBR0VtKG4sbSkgXAorCShJREVOVF9BRERSICsgMHg4NzYwMDAxMDAwVUwgKyAobikqMHgxMDAgKyAobSkqMHg0MCkKKworLyoKKyAqIE1lbW9yeSBzcGFjZXM6CisgKi8KKyNkZWZpbmUgQ0lBX0lBQ0tfU0MJCQkoSURFTlRfQUREUiArIDB4ODcyMDAwMDAwMFVMKQorI2RlZmluZSBDSUFfQ09ORgkJCShJREVOVF9BRERSICsgMHg4NzAwMDAwMDAwVUwpCisjZGVmaW5lIENJQV9JTwkJCQkoSURFTlRfQUREUiArIDB4ODU4MDAwMDAwMFVMKQorI2RlZmluZSBDSUFfU1BBUlNFX01FTQkJCShJREVOVF9BRERSICsgMHg4MDAwMDAwMDAwVUwpCisjZGVmaW5lIENJQV9TUEFSU0VfTUVNX1IyCQkoSURFTlRfQUREUiArIDB4ODQwMDAwMDAwMFVMKQorI2RlZmluZSBDSUFfU1BBUlNFX01FTV9SMwkJKElERU5UX0FERFIgKyAweDg1MDAwMDAwMDBVTCkKKyNkZWZpbmUgQ0lBX0RFTlNFX01FTQkJICAgICAgICAoSURFTlRfQUREUiArIDB4ODYwMDAwMDAwMFVMKQorI2RlZmluZSBDSUFfQldfTUVNCQkJKElERU5UX0FERFIgKyAweDg4MDAwMDAwMDBVTCkKKyNkZWZpbmUgQ0lBX0JXX0lPCQkJKElERU5UX0FERFIgKyAweDg5MDAwMDAwMDBVTCkKKyNkZWZpbmUgQ0lBX0JXX0NGR18wCQkJKElERU5UX0FERFIgKyAweDhhMDAwMDAwMDBVTCkKKyNkZWZpbmUgQ0lBX0JXX0NGR18xCQkJKElERU5UX0FERFIgKyAweDhiMDAwMDAwMDBVTCkKKworLyoKKyAqIEFMQ09SJ3MgR1JVIEFTSUMgcmVnaXN0ZXJzCisgKi8KKyNkZWZpbmUgR1JVX0lOVF9SRVEJCQkoSURFTlRfQUREUiArIDB4ODc4MDAwMDAwMFVMKQorI2RlZmluZSBHUlVfSU5UX01BU0sJCQkoSURFTlRfQUREUiArIDB4ODc4MDAwMDA0MFVMKQorI2RlZmluZSBHUlVfSU5UX0VER0UJCQkoSURFTlRfQUREUiArIDB4ODc4MDAwMDA4MFVMKQorI2RlZmluZSBHUlVfSU5UX0hJTE8JCQkoSURFTlRfQUREUiArIDB4ODc4MDAwMDBDMFVMKQorI2RlZmluZSBHUlVfSU5UX0NMRUFSCQkJKElERU5UX0FERFIgKyAweDg3ODAwMDAxMDBVTCkKKworI2RlZmluZSBHUlVfQ0FDSEVfQ05GRwkJCShJREVOVF9BRERSICsgMHg4NzgwMDAwMjAwVUwpCisjZGVmaW5lIEdSVV9TQ1IJCQkJKElERU5UX0FERFIgKyAweDg3ODAwMDAzMDBVTCkKKyNkZWZpbmUgR1JVX0xFRAkJCQkoSURFTlRfQUREUiArIDB4ODc4MDAwMDgwMFVMKQorI2RlZmluZSBHUlVfUkVTRVQJCQkoSURFTlRfQUREUiArIDB4ODc4MDAwMDkwMFVMKQorCisjZGVmaW5lIEFMQ09SX0dSVV9JTlRfUkVRX0JJVFMJCTB4ODAwZmZmZmZVTAorI2RlZmluZSBYTFRfR1JVX0lOVF9SRVFfQklUUwkJMHg4MDAwM2ZmZlVMCisjZGVmaW5lIEdSVV9JTlRfUkVRX0JJVFMJCShhbHBoYV9tdi5zeXMuY2lhLmdydV9pbnRfcmVxX2JpdHMrMCkKKworLyoKKyAqIFBZWElTIGludGVycnVwdCBjb250cm9sIHJlZ2lzdGVycworICovCisjZGVmaW5lIFBZWElTX0lOVF9SRVEJCQkoSURFTlRfQUREUiArIDB4ODdBMDAwMDAwMFVMKQorI2RlZmluZSBQWVhJU19JTlRfTUFTSwkJCShJREVOVF9BRERSICsgMHg4N0EwMDAwMDQwVUwpCisjZGVmaW5lIFBZWElTX0lOVF9ISUxPCQkJKElERU5UX0FERFIgKyAweDg3QTAwMDAwQzBVTCkKKyNkZWZpbmUgUFlYSVNfSU5UX1JPVVRFCQkJKElERU5UX0FERFIgKyAweDg3QTAwMDAxNDBVTCkKKyNkZWZpbmUgUFlYSVNfR1BPCQkJKElERU5UX0FERFIgKyAweDg3QTAwMDAxODBVTCkKKyNkZWZpbmUgUFlYSVNfSU5UX0NORkcJCQkoSURFTlRfQUREUiArIDB4ODdBMDAwMDFDMFVMKQorI2RlZmluZSBQWVhJU19SVF9DT1VOVAkJCShJREVOVF9BRERSICsgMHg4N0EwMDAwMjAwVUwpCisjZGVmaW5lIFBZWElTX0lOVF9USU1FCQkJKElERU5UX0FERFIgKyAweDg3QTAwMDAyNDBVTCkKKyNkZWZpbmUgUFlYSVNfSUlDX0NUUkwJCQkoSURFTlRfQUREUiArIDB4ODdBMDAwMDJDMFVMKQorI2RlZmluZSBQWVhJU19SRVNFVAkJCShJREVOVF9BRERSICsgMHg4NzgwMDAwOTAwVUwpCisKKy8qIE9mZnNldCBiZXR3ZWVuIHJhbSBwaHlzaWNhbCBhZGRyZXNzZXMgYW5kIHBjaTY0IERBQyBidXMgYWRkcmVzc2VzLiAgKi8KKyNkZWZpbmUgUFlYSVNfREFDX09GRlNFVAkJKDFVTCA8PCA0MCkKKworLyoKKyAqIERhdGEgc3RydWN0dXJlIGZvciBoYW5kbGluZyBDSUEgbWFjaGluZSBjaGVja3MuCisgKi8KKworLyogU3lzdGVtLXNwZWNpZmljIGluZm8uICAqLworc3RydWN0IGVsX0NJQV9zeXNkYXRhX21jaGVjayB7CisJdW5zaWduZWQgbG9uZwljcHVfZXJyMDsKKwl1bnNpZ25lZCBsb25nCWNwdV9lcnIxOworCXVuc2lnbmVkIGxvbmcJY2lhX2VycjsKKwl1bnNpZ25lZCBsb25nCWNpYV9zdGF0OworCXVuc2lnbmVkIGxvbmcJZXJyX21hc2s7CisJdW5zaWduZWQgbG9uZwljaWFfc3luOworCXVuc2lnbmVkIGxvbmcJbWVtX2VycjA7CisJdW5zaWduZWQgbG9uZwltZW1fZXJyMTsKKwl1bnNpZ25lZCBsb25nCXBjaV9lcnIwOworCXVuc2lnbmVkIGxvbmcJcGNpX2VycjE7CisJdW5zaWduZWQgbG9uZwlwY2lfZXJyMjsKK307CisKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2lmbmRlZiBfX0VYVEVSTl9JTkxJTkUKKy8qIERvIG5vdCB0b3VjaCwgdGhpcyBzaG91bGQgKk5PVCogYmUgc3RhdGljIGlubGluZSAqLworI2RlZmluZSBfX0VYVEVSTl9JTkxJTkUgZXh0ZXJuIGlubGluZQorI2RlZmluZSBfX0lPX0VYVEVSTl9JTkxJTkUKKyNlbmRpZgorCisvKgorICogSS9PIGZ1bmN0aW9uczoKKyAqCisgKiBDSUEgKHRoZSAyMTE3eCBQQ0kvbWVtb3J5IHN1cHBvcnQgY2hpcHNldCBmb3IgdGhlIEVWNSAoMjExNjQpCisgKiBzZXJpZXMgb2YgcHJvY2Vzc29ycyB1c2VzIGEgc3BhcnNlIGFkZHJlc3MgbWFwcGluZyBzY2hlbWUgdG8KKyAqIGdldCBhdCBQQ0kgbWVtb3J5IGFuZCBJL08uCisgKi8KKworLyoKKyAqIE1lbW9yeSBmdW5jdGlvbnMuICA2NC1iaXQgYW5kIDMyLWJpdCBhY2Nlc3NlcyBhcmUgZG9uZSB0aHJvdWdoCisgKiBkZW5zZSBtZW1vcnkgc3BhY2UsIGV2ZXJ5dGhpbmcgZWxzZSB0aHJvdWdoIHNwYXJzZSBzcGFjZS4KKyAqCisgKiBGb3IgcmVhZGluZyBhbmQgd3JpdGluZyA4IGFuZCAxNiBiaXQgcXVhbnRpdGllcyB3ZSBuZWVkIHRvCisgKiBnbyB0aHJvdWdoIG9uZSBvZiB0aGUgdGhyZWUgc3BhcnNlIGFkZHJlc3MgbWFwcGluZyByZWdpb25zCisgKiBhbmQgdXNlIHRoZSBIQUVfTUVNIENTUiB0byBwcm92aWRlIHNvbWUgYml0cyBvZiB0aGUgYWRkcmVzcy4KKyAqIFRoZSBmb2xsb3dpbmcgZmV3IHJvdXRpbmVzIHVzZSBvbmx5IHNwYXJzZSBhZGRyZXNzIHJlZ2lvbiAxCisgKiB3aGljaCBnaXZlcyAxR2J5dGUgb2YgYWNjZXNzaWJsZSBzcGFjZSB3aGljaCByZWxhdGVzIGV4YWN0bHkKKyAqIHRvIHRoZSBhbW91bnQgb2YgUENJIG1lbW9yeSBtYXBwaW5nICppbnRvKiBzeXN0ZW0gYWRkcmVzcyBzcGFjZS4KKyAqIFNlZSBwIDYtMTcgb2YgdGhlIHNwZWNpZmljYXRpb24gYnV0IGl0IGxvb2tzIHNvbWV0aGluZyBsaWtlIHRoaXM6CisgKgorICogMjExNjQgQWRkcmVzczoKKyAqCisgKiAgICAgICAgICAzICAgICAgICAgMiAgICAgICAgIDEKKyAqIDk4NzY1NDMyMTA5ODc2NTQzMjEwOTg3NjU0MzIxMDk4NzY1NDMyMTAKKyAqIDFaWlpaMC5QQ0kuUVcuQWRkcmVzcy4uLi4uLi4uLi4uLkJCTEwKKyAqCisgKiBaWiA9IFNCWgorICogQkIgPSBCeXRlIG9mZnNldAorICogTEwgPSBUcmFuc2ZlciBsZW5ndGgKKyAqCisgKiBQQ0kgQWRkcmVzczoKKyAqCisgKiAzICAgICAgICAgMiAgICAgICAgIDEKKyAqIDEwOTg3NjU0MzIxMDk4NzY1NDMyMTA5ODc2NTQzMjEwCisgKiBISEguLi4uUENJLlFXLkFkZHJlc3MuLi4uLi4uLiAwMAorICoKKyAqIEhISCA9IDMxOjI5IEhBRV9NRU0gQ1NSCisgKgorICovCisKKyNkZWZpbmUgdmlwCXZvbGF0aWxlIGludCBfX2ZvcmNlICoKKyNkZWZpbmUgdnVpcAl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgX19mb3JjZSAqCisjZGVmaW5lIHZ1bHAJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBfX2ZvcmNlICoKKworX19FWFRFUk5fSU5MSU5FIHVuc2lnbmVkIGludCBjaWFfaW9yZWFkOCh2b2lkIF9faW9tZW0gKnhhZGRyKQoreworCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKSB4YWRkcjsKKwl1bnNpZ25lZCBsb25nIHJlc3VsdCwgYmFzZV9hbmRfdHlwZTsKKworCWlmIChhZGRyID49IENJQV9ERU5TRV9NRU0pCisJCWJhc2VfYW5kX3R5cGUgPSBDSUFfU1BBUlNFX01FTSArIDB4MDA7CisJZWxzZQorCQliYXNlX2FuZF90eXBlID0gQ0lBX0lPICsgMHgwMDsKKworCS8qIFdlIGNhbiB1c2UgQ0lBX01FTV9SMV9NQVNLIGZvciBpbyBwb3J0cyB0b28sIHNpbmNlIGl0IGlzIGxhcmdlCisJICAgZW5vdWdoIHRvIGNvdmVyIGFsbCBpbyBwb3J0cywgYW5kIHNtYWxsZXIgdGhhbiBDSUFfSU8uICAqLworCWFkZHIgJj0gQ0lBX01FTV9SMV9NQVNLOworCXJlc3VsdCA9ICoodmlwKSAoKGFkZHIgPDwgNSkgKyBiYXNlX2FuZF90eXBlKTsKKwlyZXR1cm4gX19rZXJuZWxfZXh0YmwocmVzdWx0LCBhZGRyICYgMyk7Cit9CisKK19fRVhURVJOX0lOTElORSB2b2lkIGNpYV9pb3dyaXRlOCh1OCBiLCB2b2lkIF9faW9tZW0gKnhhZGRyKQoreworCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKSB4YWRkcjsKKwl1bnNpZ25lZCBsb25nIHcsIGJhc2VfYW5kX3R5cGU7CisKKwlpZiAoYWRkciA+PSBDSUFfREVOU0VfTUVNKQorCQliYXNlX2FuZF90eXBlID0gQ0lBX1NQQVJTRV9NRU0gKyAweDAwOworCWVsc2UKKwkJYmFzZV9hbmRfdHlwZSA9IENJQV9JTyArIDB4MDA7CisKKwlhZGRyICY9IENJQV9NRU1fUjFfTUFTSzsKKwl3ID0gX19rZXJuZWxfaW5zYmwoYiwgYWRkciAmIDMpOworCSoodnVpcCkgKChhZGRyIDw8IDUpICsgYmFzZV9hbmRfdHlwZSkgPSB3OworfQorCitfX0VYVEVSTl9JTkxJTkUgdW5zaWduZWQgaW50IGNpYV9pb3JlYWQxNih2b2lkIF9faW9tZW0gKnhhZGRyKQoreworCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKSB4YWRkcjsKKwl1bnNpZ25lZCBsb25nIHJlc3VsdCwgYmFzZV9hbmRfdHlwZTsKKworCWlmIChhZGRyID49IENJQV9ERU5TRV9NRU0pCisJCWJhc2VfYW5kX3R5cGUgPSBDSUFfU1BBUlNFX01FTSArIDB4MDg7CisJZWxzZQorCQliYXNlX2FuZF90eXBlID0gQ0lBX0lPICsgMHgwODsKKworCWFkZHIgJj0gQ0lBX01FTV9SMV9NQVNLOworCXJlc3VsdCA9ICoodmlwKSAoKGFkZHIgPDwgNSkgKyBiYXNlX2FuZF90eXBlKTsKKwlyZXR1cm4gX19rZXJuZWxfZXh0d2wocmVzdWx0LCBhZGRyICYgMyk7Cit9CisKK19fRVhURVJOX0lOTElORSB2b2lkIGNpYV9pb3dyaXRlMTYodTE2IGIsIHZvaWQgX19pb21lbSAqeGFkZHIpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpIHhhZGRyOworCXVuc2lnbmVkIGxvbmcgdywgYmFzZV9hbmRfdHlwZTsKKworCWlmIChhZGRyID49IENJQV9ERU5TRV9NRU0pCisJCWJhc2VfYW5kX3R5cGUgPSBDSUFfU1BBUlNFX01FTSArIDB4MDg7CisJZWxzZQorCQliYXNlX2FuZF90eXBlID0gQ0lBX0lPICsgMHgwODsKKworCWFkZHIgJj0gQ0lBX01FTV9SMV9NQVNLOworCXcgPSBfX2tlcm5lbF9pbnN3bChiLCBhZGRyICYgMyk7CisJKih2dWlwKSAoKGFkZHIgPDwgNSkgKyBiYXNlX2FuZF90eXBlKSA9IHc7Cit9CisKK19fRVhURVJOX0lOTElORSB1bnNpZ25lZCBpbnQgY2lhX2lvcmVhZDMyKHZvaWQgX19pb21lbSAqeGFkZHIpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpIHhhZGRyOworCWlmIChhZGRyIDwgQ0lBX0RFTlNFX01FTSkKKwkJYWRkciA9ICgoYWRkciAtIENJQV9JTykgPDwgNSkgKyBDSUFfSU8gKyAweDE4OworCXJldHVybiAqKHZ1aXApYWRkcjsKK30KKworX19FWFRFUk5fSU5MSU5FIHZvaWQgY2lhX2lvd3JpdGUzMih1MzIgYiwgdm9pZCBfX2lvbWVtICp4YWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZykgeGFkZHI7CisJaWYgKGFkZHIgPCBDSUFfREVOU0VfTUVNKQorCQlhZGRyID0gKChhZGRyIC0gQ0lBX0lPKSA8PCA1KSArIENJQV9JTyArIDB4MTg7CisJKih2dWlwKWFkZHIgPSBiOworfQorCitfX0VYVEVSTl9JTkxJTkUgdm9pZCBfX2lvbWVtICpjaWFfaW9wb3J0bWFwKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gKHZvaWQgX19pb21lbSAqKShhZGRyICsgQ0lBX0lPKTsKK30KKworX19FWFRFUk5fSU5MSU5FIHZvaWQgX19pb21lbSAqY2lhX2lvcmVtYXAodW5zaWduZWQgbG9uZyBhZGRyLAorCQkJCQkgIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlyZXR1cm4gKHZvaWQgX19pb21lbSAqKShhZGRyICsgQ0lBX0RFTlNFX01FTSk7Cit9CisKK19fRVhURVJOX0lOTElORSBpbnQgY2lhX2lzX2lvYWRkcih1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcmV0dXJuIGFkZHIgPj0gSURFTlRfQUREUiArIDB4ODAwMDAwMDAwMFVMOworfQorCitfX0VYVEVSTl9JTkxJTkUgaW50IGNpYV9pc19tbWlvKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpYWRkciA+PSBDSUFfREVOU0VfTUVNOworfQorCitfX0VYVEVSTl9JTkxJTkUgdm9pZCBfX2lvbWVtICpjaWFfYnd4X2lvcG9ydG1hcCh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcmV0dXJuICh2b2lkIF9faW9tZW0gKikoYWRkciArIENJQV9CV19JTyk7Cit9CisKK19fRVhURVJOX0lOTElORSB2b2lkIF9faW9tZW0gKmNpYV9id3hfaW9yZW1hcCh1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlyZXR1cm4gKHZvaWQgX19pb21lbSAqKShhZGRyICsgQ0lBX0JXX01FTSk7Cit9CisKK19fRVhURVJOX0lOTElORSBpbnQgY2lhX2J3eF9pc19pb2FkZHIodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXJldHVybiBhZGRyID49IElERU5UX0FERFIgKyAweDgwMDAwMDAwMDBVTDsKK30KKworX19FWFRFUk5fSU5MSU5FIGludCBjaWFfYnd4X2lzX21taW8oY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCXJldHVybiAodW5zaWduZWQgbG9uZylhZGRyIDwgQ0lBX0JXX0lPOworfQorCisjdW5kZWYgdmlwCisjdW5kZWYgdnVpcAorI3VuZGVmIHZ1bHAKKworI3VuZGVmIF9fSU9fUFJFRklYCisjZGVmaW5lIF9fSU9fUFJFRklYCQljaWEKKyNkZWZpbmUgY2lhX3RyaXZpYWxfcndfYncJMgorI2RlZmluZSBjaWFfdHJpdmlhbF9yd19scQkxCisjZGVmaW5lIGNpYV90cml2aWFsX2lvX2J3CTAKKyNkZWZpbmUgY2lhX3RyaXZpYWxfaW9fbHEJMAorI2RlZmluZSBjaWFfdHJpdmlhbF9pb3VubWFwCTEKKyNpbmNsdWRlIDxhc20vaW9fdHJpdmlhbC5oPgorCisjdW5kZWYgX19JT19QUkVGSVgKKyNkZWZpbmUgX19JT19QUkVGSVgJCWNpYV9id3gKKyNkZWZpbmUgY2lhX2J3eF90cml2aWFsX3J3X2J3CTEKKyNkZWZpbmUgY2lhX2J3eF90cml2aWFsX3J3X2xxCTEKKyNkZWZpbmUgY2lhX2J3eF90cml2aWFsX2lvX2J3CTEKKyNkZWZpbmUgY2lhX2J3eF90cml2aWFsX2lvX2xxCTEKKyNkZWZpbmUgY2lhX2J3eF90cml2aWFsX2lvdW5tYXAJMQorI2luY2x1ZGUgPGFzbS9pb190cml2aWFsLmg+CisKKyN1bmRlZiBfX0lPX1BSRUZJWAorI2lmZGVmIENPTkZJR19BTFBIQV9QWVhJUworI2RlZmluZSBfX0lPX1BSRUZJWAkJY2lhX2J3eAorI2Vsc2UKKyNkZWZpbmUgX19JT19QUkVGSVgJCWNpYQorI2VuZGlmCisKKyNpZmRlZiBfX0lPX0VYVEVSTl9JTkxJTkUKKyN1bmRlZiBfX0VYVEVSTl9JTkxJTkUKKyN1bmRlZiBfX0lPX0VYVEVSTl9JTkxJTkUKKyNlbmRpZgorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX19BTFBIQV9DSUFfX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvY29yZV9pcm9uZ2F0ZS5oIGIvaW5jbHVkZS9hc20tYWxwaGEvY29yZV9pcm9uZ2F0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0YjJkYjUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9jb3JlX2lyb25nYXRlLmgKQEAgLTAsMCArMSwyMzIgQEAKKyNpZm5kZWYgX19BTFBIQV9JUk9OR0FURV9fSF9fCisjZGVmaW5lIF9fQUxQSEFfSVJPTkdBVEVfX0hfXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vY29tcGlsZXIuaD4KKworLyoKKyAqIElST05HQVRFIGlzIHRoZSBpbnRlcm5hbCBuYW1lIGZvciB0aGUgQU1ELTc1MSBLNyBjb3JlIGxvZ2ljIGNoaXBzZXQKKyAqIHdoaWNoIHByb3ZpZGVzIG1lbW9yeSBjb250cm9sbGVyIGFuZCBQQ0kgYWNjZXNzIGZvciBOQVVUSUxVUy1iYXNlZAorICogRVY2ICgyMTI2NCkgc3lzdGVtcy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgYmFzZWQgb246CisgKgorICogSXJvbkdhdGUgbWFuYWdlbWVudCBsaWJyYXJ5LCAoYykgMTk5OSBBbHBoYSBQcm9jZXNzb3IsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMTk5OSBBbHBoYSBQcm9jZXNzb3IsIEluYy4sCisgKgkoRGF2aWQgRGFuaWVsLCBTdGlnIFRlbGZlciwgU29vaG9vbiBMZWUpCisgKi8KKworLyoKKyAqIFRoZSAyMTI2NCBzdXBwb3J0cywgYW5kIGludGVybmFsbHkgcmVjb2duaXplcywgYSA0NC1iaXQgcGh5c2ljYWwKKyAqIGFkZHJlc3Mgc3BhY2UgdGhhdCBpcyBkaXZpZGVkIGVxdWFsbHkgYmV0d2VlbiBtZW1vcnkgYWRkcmVzcyBzcGFjZQorICogYW5kIEkvTyBhZGRyZXNzIHNwYWNlLiBNZW1vcnkgYWRkcmVzcyBzcGFjZSByZXNpZGVzIGluIHRoZSBsb3dlcgorICogaGFsZiBvZiB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZSAoUEFbNDNdPTApIGFuZCBJL08gYWRkcmVzcyBzcGFjZQorICogcmVzaWRlcyBpbiB0aGUgdXBwZXIgaGFsZiBvZiB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZSAoUEFbNDNdPTEpLgorICovCisKKy8qCisgKiBJcm9uZ2F0ZSBDU1IgbWFwLiAgU29tZSBvZiB0aGUgQ1NScyBhcmUgOCBvciAxNiBiaXRzLCBidXQgYWxsIGFjY2VzcworICogdGhyb3VnaCB0aGUgcm91dGluZXMgZ2l2ZW4gaXMgMzItYml0LgorICoKKyAqIFRoZSBmaXJzdCAweDQwIGJ5dGVzIGFyZSBzdGFuZGFyZCBhcyBwZXIgdGhlIFBDSSBzcGVjLgorICovCisKK3R5cGVkZWYgdm9sYXRpbGUgX191MzIJaWdjc3IzMjsKKwordHlwZWRlZiBzdHJ1Y3QgeworCWlnY3NyMzIgZGV2X3ZlbmRvcjsJCS8qIDB4MDAgLSBkZXZpY2UgSUQsIHZlbmRvciBJRCAqLworCWlnY3NyMzIgc3RhdF9jbWQ7CQkvKiAweDA0IC0gc3RhdHVzLCBjb21tYW5kICovCisJaWdjc3IzMiBjbGFzczsJCQkvKiAweDA4IC0gY2xhc3MgY29kZSwgcmV2IElEICovCisJaWdjc3IzMiBsYXRlbmN5OwkJLyogMHgwQyAtIGhlYWRlciB0eXBlLCBQQ0kgbGF0ZW5jeSAqLworCWlnY3NyMzIgYmFyMDsJCQkvKiAweDEwIC0gQkFSMCAtIEFHUCAqLworCWlnY3NyMzIgYmFyMTsJCQkvKiAweDE0IC0gQkFSMSAtIEdBUlQgKi8KKwlpZ2NzcjMyIGJhcjI7CQkJLyogMHgxOCAtIFBvd2VyIE1hbmFnZW1lbnQgcmVnIGJsb2NrICovCisKKwlpZ2NzcjMyIHJzcnZkMFs2XTsJCS8qIDB4MUMtMHgzMyByZXNlcnZlZCAqLworCisJaWdjc3IzMiBjYXBwdHI7CQkJLyogMHgzNCAtIENhcGFiaWxpdGllcyBwb2ludGVyICovCisKKwlpZ2NzcjMyIHJzcnZkMVsyXTsJCS8qIDB4MzgtMHgzRiByZXNlcnZlZCAqLworCisJaWdjc3IzMiBiYWNzcjEwOwkJLyogMHg0MCAtIGJhc2UgYWRkcmVzcyBjaGlwIHNlbGVjdHMgKi8KKwlpZ2NzcjMyIGJhY3NyMzI7CQkvKiAweDQ0IC0gYmFzZSBhZGRyZXNzIGNoaXAgc2VsZWN0cyAqLworCWlnY3NyMzIgYmFjc3I1NF9lY2Ntczc2MTsJLyogMHg0OCAtIDc1MTogYmFzZSBhZGRyLiBjaGlwIHNlbGVjdHMKKwkJCQkJCSAgNzYxOiBFQ0MsIG1vZGUvc3RhdHVzICovCisKKwlpZ2NzcjMyIHJzcnZkMlsxXTsJCS8qIDB4NEMtMHg0RiByZXNlcnZlZCAqLworCisJaWdjc3IzMiBkcmFtbWFwOwkJLyogMHg1MCAtIGFkZHJlc3MgbWFwcGluZyBjb250cm9sICovCisJaWdjc3IzMiBkcmFtdG07CQkJLyogMHg1NCAtIHRpbWluZywgZHJpdmVyIHN0cmVuZ3RoICovCisJaWdjc3IzMiBkcmFtbXM7CQkJLyogMHg1OCAtIERSQU0gbW9kZS9zdGF0dXMgKi8KKworCWlnY3NyMzIgcnNydmQzWzFdOwkJLyogMHg1Qy0weDVGIHJlc2VydmVkICovCisKKwlpZ2NzcjMyIGJpdTA7CQkJLyogMHg2MCAtIGJ1cyBpbnRlcmZhY2UgdW5pdCAqLworCWlnY3NyMzIgYml1c2lwOwkJCS8qIDB4NjQgLSBTZXJpYWwgaW5pdGlhbGlzYXRpb24gcGt0ICovCisKKwlpZ2NzcjMyIHJzcnZkNFsyXTsJCS8qIDB4NjgtMHg2RiByZXNlcnZlZCAqLworCisJaWdjc3IzMiBtcm87CQkJLyogMHg3MCAtIG1lbW9yeSByZXF1ZXN0IG9wdGltaXNlciAqLworCisJaWdjc3IzMiByc3J2ZDVbM107CQkvKiAweDc0LTB4N0YgcmVzZXJ2ZWQgKi8KKworCWlnY3NyMzIgd2hhbWk7CQkJLyogMHg4MCAtIHdobyBhbSBJICovCisJaWdjc3IzMiBwY2lhcmI7CQkJLyogMHg4NCAtIFBDSSBhcmJpdHJhdGlvbiBjb250cm9sICovCisJaWdjc3IzMiBwY2ljZmc7CQkJLyogMHg4OCAtIFBDSSBjb25maWcgc3RhdHVzICovCisKKwlpZ2NzcjMyIHJzcnZkNls0XTsJCS8qIDB4OEMtMHg5QiByZXNlcnZlZCAqLworCisJaWdjc3IzMiBwY2lfbWVtOwkJLyogMHg5QyAtIFBDSSB0b3Agb2YgbWVtb3J5LAorCQkJCQkJICA3NjEgb25seSAqLworCisJLyogQUdQIChidXMgMSkgY29udHJvbCByZWdpc3RlcnMgKi8KKwlpZ2NzcjMyIGFncGNhcDsJCQkvKiAweEEwIC0gQUdQIENhcGFiaWxpdHkgSWRlbnRpZmllciAqLworCWlnY3NyMzIgYWdwc3RhdDsJCS8qIDB4QTQgLSBBR1Agc3RhdHVzIHJlZ2lzdGVyICovCisJaWdjc3IzMiBhZ3BjbWQ7CQkJLyogMHhBOCAtIEFHUCBjb250cm9sIHJlZ2lzdGVyICovCisJaWdjc3IzMiBhZ3B2YTsJCQkvKiAweEFDIC0gQUdQIFZpcnR1YWwgQWRkcmVzcyBTcGFjZSAqLworCWlnY3NyMzIgYWdwbW9kZTsJCS8qIDB4QjAgLSBBR1AvR0FSVCBtb2RlIGNvbnRyb2wgKi8KK30gSXJvbmdhdGUwOworCisKK3R5cGVkZWYgc3RydWN0IHsKKworCWlnY3NyMzIgZGV2X3ZlbmRvcjsJCS8qIDB4MDAgLSBEZXZpY2UgYW5kIFZlbmRvciBJRHMgKi8KKwlpZ2NzcjMyIHN0YXRfY21kOwkJLyogMHgwNCAtIFN0YXR1cyBhbmQgQ29tbWFuZCByZWdzICovCisJaWdjc3IzMiBjbGFzczsJCQkvKiAweDA4IC0gc3ViY2xhc3MsIGJhc2VjbGFzcyBldGMgKi8KKwlpZ2NzcjMyIGh0eXBlOwkJCS8qIDB4MEMgLSBoZWFkZXIgdHlwZSAoYXQgMHgwRSkgKi8KKwlpZ2NzcjMyIHJzcnZkMFsyXTsJCS8qIDB4MTAtMHgxNyByZXNlcnZlZCAqLworCWlnY3NyMzIgYnVzbm9zOwkJCS8qIDB4MTggLSBQcmltYXJ5LCBzZWNvbmRhcnkgYnVzIG5vcyAqLworCWlnY3NyMzIgaW9fYmFzZWxpbV9yZWdzOwkvKiAweDFDIC0gSU8gYmFzZSwgSU8gbGltLCBBR1Agc3RhdHVzICovCisJaWdjc3IzMgltZW1fYmFzZWxpbTsJCS8qIDB4MjAgLSBtZW1vcnkgYmFzZSwgbWVtb3J5IGxpbSAqLworCWlnY3NyMzIgcGZtZW1fYmFzZWxpbTsJCS8qIDB4MjQgLSBwcmVmZXRjaGFibGUgYmFzZSwgbGltICovCisJaWdjc3IzMiByc3J2ZDFbMl07CQkvKiAweDI4LTB4MkYgcmVzZXJ2ZWQgKi8KKwlpZ2NzcjMyIGlvX2Jhc2VsaW07CQkvKiAweDMwIC0gSU8gYmFzZSwgSU8gbGltaXQgKi8KKwlpZ2NzcjMyIHJzcnZkMlsyXTsJCS8qIDB4MzQtMHgzQiAtIHJlc2VydmVkICovCisJaWdjc3IzMiBpbnRlcnJ1cHQ7CQkvKiAweDNDIC0gaW50ZXJydXB0LCBQQ0kgYnJpZGdlIGN0cmwgKi8KKworfSBJcm9uZ2F0ZTE7CisKK2V4dGVybiBpZ2NzcjMyICpJcm9uRUNDOworCisvKgorICogTWVtb3J5IHNwYWNlczoKKyAqLworCisvKiBJcm9uZ2F0ZSBpcyBjb25zaXN0ZW50IHdpdGggYSBzdWJzZXQgb2YgdGhlIFRzdW5hbWkgbWVtb3J5IG1hcCAqLworI2lmZGVmIFVTRV80OF9CSVRfS1NFRworI2RlZmluZSBJUk9OR0FURV9CSUFTIDB4ODAwMDAwMDAwMDBVTAorI2Vsc2UKKyNkZWZpbmUgSVJPTkdBVEVfQklBUyAweDEwMDAwMDAwMDAwVUwKKyNlbmRpZgorCisKKyNkZWZpbmUgSVJPTkdBVEVfTUVNCQkoSURFTlRfQUREUiB8IElST05HQVRFX0JJQVMgfCAweDAwMDAwMDAwMFVMKQorI2RlZmluZSBJUk9OR0FURV9JQUNLX1NDCShJREVOVF9BRERSIHwgSVJPTkdBVEVfQklBUyB8IDB4MUY4MDAwMDAwVUwpCisjZGVmaW5lIElST05HQVRFX0lPCQkoSURFTlRfQUREUiB8IElST05HQVRFX0JJQVMgfCAweDFGQzAwMDAwMFVMKQorI2RlZmluZSBJUk9OR0FURV9DT05GCQkoSURFTlRfQUREUiB8IElST05HQVRFX0JJQVMgfCAweDFGRTAwMDAwMFVMKQorCisvKgorICogUENJIENvbmZpZ3VyYXRpb24gc3BhY2UgYWNjZXNzZXMgYXJlIGZvcm1lZCBsaWtlIHNvOgorICoKKyAqIDB4MUZFIDw8IDI0IHwgIDogMiAyIDIgMiAxIDEgMSAxIDogMSAxIDEgMSAxIDEgMCAwIDogMCAwIDAgMCAwIDAgMCAwIDoKKyAqICAgICAgICAgICAgICAgIDogMyAyIDEgMCA5IDggNyA2IDogNSA0IDMgMiAxIDAgOSA4IDogNyA2IDUgNCAzIDIgMSAwIDoKKyAqICAgICAgICAgICAgICAgICAgLS0tYnVzIG51bWVyLS0tICAgLWRldmljZS0tIC1mdW4tICAgLS0tcmVnaXN0ZXItLS0tCisgKi8KKworI2RlZmluZSBJR0NTUihkZXYsZnVuLHJlZykJKCBJUk9OR0FURV9DT05GIHwgXAorCQkJCSgoZGV2KTw8MTEpIHwgXAorCQkJCSgoZnVuKTw8OCkgfCBcCisJCQkJKHJlZykgKQorCisjZGVmaW5lIElST05HQVRFMAkJKChJcm9uZ2F0ZTAgKikgSUdDU1IoMCwgMCwgMCkpCisjZGVmaW5lIElST05HQVRFMQkJKChJcm9uZ2F0ZTEgKikgSUdDU1IoMSwgMCwgMCkpCisKKy8qCisgKiBEYXRhIHN0cnVjdHVyZSBmb3IgaGFuZGxpbmcgSVJPTkdBVEUgbWFjaGluZSBjaGVja3M6CisgKiBUaGlzIGlzIHRoZSBzdGFuZGFyZCBPU0YgbG9nb3V0IGZyYW1lCisgKi8KKworI2RlZmluZSBTQ0JfUV9TWVNFUlIJMHg2MjAJCQkvKiBPU0YgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NCX1FfUFJPQ0VSUgkweDYzMAorI2RlZmluZSBTQ0JfUV9TWVNNQ0hLCTB4NjYwCisjZGVmaW5lIFNDQl9RX1BST0NNQ0hLCTB4NjcwCisKK3N0cnVjdCBlbF9JUk9OR0FURV9zeXNkYXRhX21jaGVjayB7CisJX191MzIgRnJhbWVTaXplOyAgICAgICAgICAgICAgICAgLyogQnl0ZXMsIGluY2x1ZGluZyB0aGlzIGZpZWxkICovCisJX191MzIgRnJhbWVGbGFnczsgICAgICAgICAgICAgICAgLyogPDMxPiA9IFJldHJ5LCA8MzA+ID0gU2Vjb25kIEVycm9yICovCisJX191MzIgQ3B1T2Zmc2V0OyAgICAgICAgICAgICAgICAgLyogT2Zmc2V0IHRvIENQVS1zcGVjaWZpYyBpbnRvICovCisJX191MzIgU3lzdGVtT2Zmc2V0OyAgICAgICAgICAgICAgLyogT2Zmc2V0IHRvIHN5c3RlbS1zcGVjaWZpYyBpbmZvICovCisJX191MzIgTUNIS19Db2RlOworCV9fdTMyIE1DSEtfRnJhbWVfUmV2OworCV9fdTY0IElfU1RBVDsKKwlfX3U2NCBEQ19TVEFUOworCV9fdTY0IENfQUREUjsKKwlfX3U2NCBEQzFfU1lORFJPTUU7CisJX191NjQgREMwX1NZTkRST01FOworCV9fdTY0IENfU1RBVDsKKwlfX3U2NCBDX1NUUzsKKwlfX3U2NCBSRVNFUlZFRDA7CisJX191NjQgRVhDX0FERFI7CisJX191NjQgSUVSX0NNOworCV9fdTY0IElTVU07CisJX191NjQgTU1fU1RBVDsKKwlfX3U2NCBQQUxfQkFTRTsKKwlfX3U2NCBJX0NUTDsKKwlfX3U2NCBQQ1RYOworfTsKKworCisjaWZkZWYgX19LRVJORUxfXworCisjaWZuZGVmIF9fRVhURVJOX0lOTElORQorI2RlZmluZSBfX0VYVEVSTl9JTkxJTkUgZXh0ZXJuIGlubGluZQorI2RlZmluZSBfX0lPX0VYVEVSTl9JTkxJTkUKKyNlbmRpZgorCisvKgorICogSS9PIGZ1bmN0aW9uczoKKyAqCisgKiBJUk9OR0FURSAoQU1ELTc1MSkgUENJL21lbW9yeSBzdXBwb3J0IGNoaXAgZm9yIHRoZSBFVjYgKDIxMjY0KSBhbmQKKyAqIEs3IGNhbiBvbmx5IHVzZSBsaW5lYXIgYWNjZXNzZXMgdG8gZ2V0IGF0IFBDSSBtZW1vcnkgYW5kIEkvTyBzcGFjZXMuCisgKi8KKworLyoKKyAqIE1lbW9yeSBmdW5jdGlvbnMuICBBbGwgYWNjZXNzZXMgYXJlIGRvbmUgdGhyb3VnaCBsaW5lYXIgc3BhY2UuCisgKi8KKworX19FWFRFUk5fSU5MSU5FIHZvaWQgX19pb21lbSAqaXJvbmdhdGVfaW9wb3J0bWFwKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gKHZvaWQgX19pb21lbSAqKShhZGRyICsgSVJPTkdBVEVfSU8pOworfQorCitleHRlcm4gdm9pZCBfX2lvbWVtICppcm9uZ2F0ZV9pb3JlbWFwKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKTsKK2V4dGVybiB2b2lkIGlyb25nYXRlX2lvdW5tYXAodm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKTsKKworX19FWFRFUk5fSU5MSU5FIGludCBpcm9uZ2F0ZV9pc19pb2FkZHIodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXJldHVybiBhZGRyID49IElST05HQVRFX01FTTsKK30KKworX19FWFRFUk5fSU5MSU5FIGludCBpcm9uZ2F0ZV9pc19tbWlvKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqeGFkZHIpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpeGFkZHI7CisJcmV0dXJuIGFkZHIgPCBJUk9OR0FURV9JTyB8fCBhZGRyID49IElST05HQVRFX0NPTkY7Cit9CisKKyN1bmRlZiBfX0lPX1BSRUZJWAorI2RlZmluZSBfX0lPX1BSRUZJWAkJCWlyb25nYXRlCisjZGVmaW5lIGlyb25nYXRlX3RyaXZpYWxfcndfYncJCTEKKyNkZWZpbmUgaXJvbmdhdGVfdHJpdmlhbF9yd19scQkJMQorI2RlZmluZSBpcm9uZ2F0ZV90cml2aWFsX2lvX2J3CQkxCisjZGVmaW5lIGlyb25nYXRlX3RyaXZpYWxfaW9fbHEJCTEKKyNkZWZpbmUgaXJvbmdhdGVfdHJpdmlhbF9pb3VubWFwCTAKKyNpbmNsdWRlIDxhc20vaW9fdHJpdmlhbC5oPgorCisjaWZkZWYgX19JT19FWFRFUk5fSU5MSU5FCisjdW5kZWYgX19FWFRFUk5fSU5MSU5FCisjdW5kZWYgX19JT19FWFRFUk5fSU5MSU5FCisjZW5kaWYKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9fQUxQSEFfSVJPTkdBVEVfX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvY29yZV9sY2EuaCBiL2luY2x1ZGUvYXNtLWFscGhhL2NvcmVfbGNhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdjYjRiNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL2NvcmVfbGNhLmgKQEAgLTAsMCArMSwzNjEgQEAKKyNpZm5kZWYgX19BTFBIQV9MQ0FfX0hfXworI2RlZmluZSBfX0FMUEhBX0xDQV9fSF9fCisKKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2NvbXBpbGVyLmg+CisKKy8qCisgKiBMb3cgQ29zdCBBbHBoYSAoTENBKSBkZWZpbml0aW9ucyAodGhlc2UgYXBwbHkgdG8gMjEwNjYgYW5kIDIxMDY4LAorICogZm9yIGV4YW1wbGUpLgorICoKKyAqIFRoaXMgZmlsZSBpcyBiYXNlZCBvbjoKKyAqCisgKglERUNjaGlwIDIxMDY2IGFuZCBERUNjaGlwIDIxMDY4IEFscGhhIEFYUCBNaWNyb3Byb2Nlc3NvcnMKKyAqCUhhcmR3YXJlIFJlZmVyZW5jZSBNYW51YWw7IERpZ2l0YWwgRXF1aXBtZW50IENvcnAuOyBNYXkgMTk5NDsKKyAqCU1heW5hcmQsIE1BOyBPcmRlciBOdW1iZXI6IEVDLU4yNjgxLTcxLgorICovCisKKy8qCisgKiBOT1RFOiBUaGUgTENBIHVzZXMgYSBIb3N0IEFkZHJlc3MgRXh0ZW5zaW9uIChIQUUpIHJlZ2lzdGVyIHRvIGFjY2VzcworICoJIFBDSSBhZGRyZXNzZXMgdGhhdCBhcmUgYmV5b25kIHRoZSBmaXJzdCAyNyBiaXRzIG9mIGFkZHJlc3MKKyAqCSBzcGFjZS4gIFVwZGF0aW5nIHRoZSBIQUUgcmVxdWlyZXMgYW4gZXh0ZXJuYWwgY3ljbGUgKGFuZAorICoJIGEgbWVtb3J5IGJhcnJpZXIpLCB3aGljaCB0ZW5kcyB0byBiZSBzbG93LiAgSW5zdGVhZCBvZiB1cGRhdGluZworICoJIGl0IG9uIGVhY2ggc3BhcnNlIG1lbW9yeSBhY2Nlc3MsIHdlIGtlZXAgdGhlIGN1cnJlbnQgSEFFIHZhbHVlCisgKgkgY2FjaGVkIGluIHZhcmlhYmxlIGNhY2hlX2hhZS4gIE9ubHkgaWYgdGhlIGNhY2hlZCBIQUUgZGlmZmVycworICoJIGZyb20gdGhlIGRlc2lyZWQgSEFFIHZhbHVlIGRvIHdlIGFjdHVhbGx5IHVwZGF0ZWQgSEFFIHJlZ2lzdGVyLgorICoJIFRoZSBIQUUgcmVnaXN0ZXIgaXMgcHJlc2VydmVkIGJ5IHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBlbnRyeS9leGl0CisgKgkgY29kZSwgc28gdGhpcyBzY2hlbWUgd29ya3MgZXZlbiBpbiB0aGUgcHJlc2VuY2Ugb2YgaW50ZXJydXB0cy4KKyAqCisgKiBEZW5zZSBtZW1vcnkgc3BhY2UgZG9lc24ndCByZXF1aXJlIHRoZSBIQUUsIGJ1dCBpcyByZXN0cmljdGVkIHRvCisgKiBhbGlnbmVkIDMyIGFuZCA2NCBiaXQgYWNjZXNzZXMuICBTcGVjaWFsIEN5Y2xlIGFuZCBJbnRlcnJ1cHQKKyAqIEFja25vd2xlZGdlIGN5Y2xlcyBtYXkgYWxzbyByZXF1aXJlIHRoZSB1c2Ugb2YgdGhlIEhBRS4gIFRoZSBMQ0EKKyAqIGxpbWl0cyBJL08gYWRkcmVzcyBzcGFjZSB0byB0aGUgYm90dG9tIDI0IGJpdHMgb2YgYWRkcmVzcyBzcGFjZSwKKyAqIGJ1dCB0aGlzIGVhc2lseSBjb3ZlcnMgdGhlIDE2IGJpdCBJU0EgSS9PIGFkZHJlc3Mgc3BhY2UuCisgKi8KKworLyoKKyAqIE5PVEUgMiEgVGhlIG1lbW9yeSBvcGVyYXRpb25zIGRvIG5vdCBzZXQgYW55IG1lbW9yeSBiYXJyaWVycywgYXMKKyAqIGl0J3Mgbm90IG5lZWRlZCBmb3IgY2FzZXMgbGlrZSBhIGZyYW1lIGJ1ZmZlciB0aGF0IGlzIGVzc2VudGlhbGx5CisgKiBtZW1vcnktbGlrZS4gIFlvdSBuZWVkIHRvIGRvIHRoZW0gYnkgaGFuZCBpZiB0aGUgb3BlcmF0aW9ucyBkZXBlbmQKKyAqIG9uIG9yZGVyaW5nLgorICoKKyAqIFNpbWlsYXJseSwgdGhlIHBvcnQgSS9PIG9wZXJhdGlvbnMgZG8gYSAibWIiIG9ubHkgYWZ0ZXIgYSB3cml0ZQorICogb3BlcmF0aW9uOiBpZiBhbiBtYiBpcyBuZWVkZWQgYmVmb3JlIChhcyBpbiB0aGUgY2FzZSBvZiBkb2luZworICogbWVtb3J5IG1hcHBlZCBJL08gZmlyc3QsIGFuZCB0aGVuIGEgcG9ydCBJL08gb3BlcmF0aW9uIHRvIHRoZSBzYW1lCisgKiBkZXZpY2UpLCBpdCBuZWVkcyB0byBiZSBkb25lIGJ5IGhhbmQuCisgKgorICogQWZ0ZXIgdGhlIGFib3ZlIGhhcyBiaXR0ZW4gbWUgMTAwIHRpbWVzLCBJJ2xsIGdpdmUgdXAgYW5kIGp1c3QgZG8KKyAqIHRoZSBtYiBhbGwgdGhlIHRpbWUsIGJ1dCByaWdodCBub3cgSSdtIGhvcGluZyB0aGlzIHdpbGwgd29yayBvdXQuCisgKiBBdm9pZGluZyBtYidzIG1heSBwb3RlbnRpYWxseSBiZSBhIG5vdGljZWFibGUgc3BlZWQgaW1wcm92ZW1lbnQsCisgKiBidXQgSSBjYW4ndCBob25lc3RseSBzYXkgSSd2ZSB0ZXN0ZWQgaXQuCisgKgorICogSGFuZGxpbmcgaW50ZXJydXB0cyB0aGF0IG5lZWQgdG8gZG8gbWIncyB0byBzeW5jaHJvbml6ZSB0bworICogbm9uLWludGVycnVwdHMgaXMgYW5vdGhlciBmdW4gcmFjZSBhcmVhLiAgRG9uJ3QgZG8gaXQgKGJlY2F1c2UgaWYKKyAqIHlvdSBkbywgSSdsbCBoYXZlIHRvIGRvICpldmVyeXRoaW5nKiB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQsCisgKiB1Z2gpLgorICovCisKKy8qCisgKiBNZW1vcnkgQ29udHJvbGxlciByZWdpc3RlcnM6CisgKi8KKyNkZWZpbmUgTENBX01FTV9CQ1IwCQkoSURFTlRfQUREUiArIDB4MTIwMDAwMDAwVUwpCisjZGVmaW5lIExDQV9NRU1fQkNSMQkJKElERU5UX0FERFIgKyAweDEyMDAwMDAwOFVMKQorI2RlZmluZSBMQ0FfTUVNX0JDUjIJCShJREVOVF9BRERSICsgMHgxMjAwMDAwMTBVTCkKKyNkZWZpbmUgTENBX01FTV9CQ1IzCQkoSURFTlRfQUREUiArIDB4MTIwMDAwMDE4VUwpCisjZGVmaW5lIExDQV9NRU1fQk1SMAkJKElERU5UX0FERFIgKyAweDEyMDAwMDAyMFVMKQorI2RlZmluZSBMQ0FfTUVNX0JNUjEJCShJREVOVF9BRERSICsgMHgxMjAwMDAwMjhVTCkKKyNkZWZpbmUgTENBX01FTV9CTVIyCQkoSURFTlRfQUREUiArIDB4MTIwMDAwMDMwVUwpCisjZGVmaW5lIExDQV9NRU1fQk1SMwkJKElERU5UX0FERFIgKyAweDEyMDAwMDAzOFVMKQorI2RlZmluZSBMQ0FfTUVNX0JUUjAJCShJREVOVF9BRERSICsgMHgxMjAwMDAwNDBVTCkKKyNkZWZpbmUgTENBX01FTV9CVFIxCQkoSURFTlRfQUREUiArIDB4MTIwMDAwMDQ4VUwpCisjZGVmaW5lIExDQV9NRU1fQlRSMgkJKElERU5UX0FERFIgKyAweDEyMDAwMDA1MFVMKQorI2RlZmluZSBMQ0FfTUVNX0JUUjMJCShJREVOVF9BRERSICsgMHgxMjAwMDAwNThVTCkKKyNkZWZpbmUgTENBX01FTV9HVFIJCShJREVOVF9BRERSICsgMHgxMjAwMDAwNjBVTCkKKyNkZWZpbmUgTENBX01FTV9FU1IJCShJREVOVF9BRERSICsgMHgxMjAwMDAwNjhVTCkKKyNkZWZpbmUgTENBX01FTV9FQVIJCShJREVOVF9BRERSICsgMHgxMjAwMDAwNzBVTCkKKyNkZWZpbmUgTENBX01FTV9DQVIJCShJREVOVF9BRERSICsgMHgxMjAwMDAwNzhVTCkKKyNkZWZpbmUgTENBX01FTV9WR1IJCShJREVOVF9BRERSICsgMHgxMjAwMDAwODBVTCkKKyNkZWZpbmUgTENBX01FTV9QTE0JCShJREVOVF9BRERSICsgMHgxMjAwMDAwODhVTCkKKyNkZWZpbmUgTENBX01FTV9GT1IJCShJREVOVF9BRERSICsgMHgxMjAwMDAwOTBVTCkKKworLyoKKyAqIEkvTyBDb250cm9sbGVyIHJlZ2lzdGVyczoKKyAqLworI2RlZmluZSBMQ0FfSU9DX0hBRQkJKElERU5UX0FERFIgKyAweDE4MDAwMDAwMFVMKQorI2RlZmluZSBMQ0FfSU9DX0NPTkYJCShJREVOVF9BRERSICsgMHgxODAwMDAwMjBVTCkKKyNkZWZpbmUgTENBX0lPQ19TVEFUMAkJKElERU5UX0FERFIgKyAweDE4MDAwMDA0MFVMKQorI2RlZmluZSBMQ0FfSU9DX1NUQVQxCQkoSURFTlRfQUREUiArIDB4MTgwMDAwMDYwVUwpCisjZGVmaW5lIExDQV9JT0NfVEJJQQkJKElERU5UX0FERFIgKyAweDE4MDAwMDA4MFVMKQorI2RlZmluZSBMQ0FfSU9DX1RCX0VOQQkJKElERU5UX0FERFIgKyAweDE4MDAwMDBhMFVMKQorI2RlZmluZSBMQ0FfSU9DX1NGVF9SU1QJCShJREVOVF9BRERSICsgMHgxODAwMDAwYzBVTCkKKyNkZWZpbmUgTENBX0lPQ19QQVJfRElTCQkoSURFTlRfQUREUiArIDB4MTgwMDAwMGUwVUwpCisjZGVmaW5lIExDQV9JT0NfV19CQVNFMAkJKElERU5UX0FERFIgKyAweDE4MDAwMDEwMFVMKQorI2RlZmluZSBMQ0FfSU9DX1dfQkFTRTEJCShJREVOVF9BRERSICsgMHgxODAwMDAxMjBVTCkKKyNkZWZpbmUgTENBX0lPQ19XX01BU0swCQkoSURFTlRfQUREUiArIDB4MTgwMDAwMTQwVUwpCisjZGVmaW5lIExDQV9JT0NfV19NQVNLMQkJKElERU5UX0FERFIgKyAweDE4MDAwMDE2MFVMKQorI2RlZmluZSBMQ0FfSU9DX1RfQkFTRTAJCShJREVOVF9BRERSICsgMHgxODAwMDAxODBVTCkKKyNkZWZpbmUgTENBX0lPQ19UX0JBU0UxCQkoSURFTlRfQUREUiArIDB4MTgwMDAwMWEwVUwpCisjZGVmaW5lIExDQV9JT0NfVEJfVEFHMAkJKElERU5UX0FERFIgKyAweDE4ODAwMDAwMFVMKQorI2RlZmluZSBMQ0FfSU9DX1RCX1RBRzEJCShJREVOVF9BRERSICsgMHgxODgwMDAwMjBVTCkKKyNkZWZpbmUgTENBX0lPQ19UQl9UQUcyCQkoSURFTlRfQUREUiArIDB4MTg4MDAwMDQwVUwpCisjZGVmaW5lIExDQV9JT0NfVEJfVEFHMwkJKElERU5UX0FERFIgKyAweDE4ODAwMDA2MFVMKQorI2RlZmluZSBMQ0FfSU9DX1RCX1RBRzQJCShJREVOVF9BRERSICsgMHgxODgwMDAwNzBVTCkKKyNkZWZpbmUgTENBX0lPQ19UQl9UQUc1CQkoSURFTlRfQUREUiArIDB4MTg4MDAwMGEwVUwpCisjZGVmaW5lIExDQV9JT0NfVEJfVEFHNgkJKElERU5UX0FERFIgKyAweDE4ODAwMDBjMFVMKQorI2RlZmluZSBMQ0FfSU9DX1RCX1RBRzcJCShJREVOVF9BRERSICsgMHgxODgwMDAwZTBVTCkKKworLyoKKyAqIE1lbW9yeSBzcGFjZXM6CisgKi8KKyNkZWZpbmUgTENBX0lBQ0tfU0MJCShJREVOVF9BRERSICsgMHgxYTAwMDAwMDBVTCkKKyNkZWZpbmUgTENBX0NPTkYJCShJREVOVF9BRERSICsgMHgxZTAwMDAwMDBVTCkKKyNkZWZpbmUgTENBX0lPCQkJKElERU5UX0FERFIgKyAweDFjMDAwMDAwMFVMKQorI2RlZmluZSBMQ0FfU1BBUlNFX01FTQkJKElERU5UX0FERFIgKyAweDIwMDAwMDAwMFVMKQorI2RlZmluZSBMQ0FfREVOU0VfTUVNCQkoSURFTlRfQUREUiArIDB4MzAwMDAwMDAwVUwpCisKKy8qCisgKiBCaXQgZGVmaW5pdGlvbnMgZm9yIEkvTyBDb250cm9sbGVyIHN0YXR1cyByZWdpc3RlciAwOgorICovCisjZGVmaW5lIExDQV9JT0NfU1RBVDBfQ01ECQkweGYKKyNkZWZpbmUgTENBX0lPQ19TVEFUMF9FUlIJCSgxPDw0KQorI2RlZmluZSBMQ0FfSU9DX1NUQVQwX0xPU1QJCSgxPDw1KQorI2RlZmluZSBMQ0FfSU9DX1NUQVQwX1RISVQJCSgxPDw2KQorI2RlZmluZSBMQ0FfSU9DX1NUQVQwX1RSRUYJCSgxPDw3KQorI2RlZmluZSBMQ0FfSU9DX1NUQVQwX0NPREVfU0hJRlQJOAorI2RlZmluZSBMQ0FfSU9DX1NUQVQwX0NPREVfTUFTSwkJMHg3CisjZGVmaW5lIExDQV9JT0NfU1RBVDBfUF9OQlJfU0hJRlQJMTMKKyNkZWZpbmUgTENBX0lPQ19TVEFUMF9QX05CUl9NQVNLCTB4N2ZmZmYKKworI2RlZmluZSBMQ0FfSEFFX0FERFJFU1MJCUxDQV9JT0NfSEFFCisKKy8qIExDQSBQTVIgUG93ZXIgTWFuYWdlbWVudCByZWdpc3RlciBkZWZpbmVzICovCisjZGVmaW5lIExDQV9QTVJfQUREUgkoSURFTlRfQUREUiArIDB4MTIwMDAwMDk4VUwpCisjZGVmaW5lIExDQV9QTVJfUERJViAgICAweDcgICAgICAgICAgICAgICAgICAgICAvKiBQcmltYXJ5IGNsb2NrIGRpdmlzb3IgKi8KKyNkZWZpbmUgTENBX1BNUl9PRElWICAgIDB4MzggICAgICAgICAgICAgICAgICAgIC8qIE92ZXJyaWRlIGNsb2NrIGRpdmlzb3IgKi8KKyNkZWZpbmUgTENBX1BNUl9JTlRPICAgIDB4NDAgICAgICAgICAgICAgICAgICAgIC8qIEludGVycnVwdCBvdmVycmlkZSAqLworI2RlZmluZSBMQ0FfUE1SX0RNQU8gICAgMHg4MCAgICAgICAgICAgICAgICAgICAgLyogRE1BIG92ZXJyaWRlICovCisjZGVmaW5lIExDQV9QTVJfT0NDRUIgICAweGZmZmYwMDAwTCAgICAgICAgICAgICAvKiBPdmVycmlkZSBjeWNsZSBjb3VudGVyIC0gZXZlbiBiaXRzICovCisjZGVmaW5lIExDQV9QTVJfT0NDT0IgICAweGZmZmYwMDAwMDAwMDAwMDBMICAgICAvKiBPdmVycmlkZSBjeWNsZSBjb3VudGVyIC0gZXZlbiBiaXRzICovCisjZGVmaW5lIExDQV9QTVJfUFJJTUFSWV9NQVNLICAgIDB4ZmZmZmZmZmZmZmZmZmZmOEwKKworLyogTENBIFBNUiBNYWNyb3MgKi8KKworI2RlZmluZSBMQ0FfUkVBRF9QTVIgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKilMQ0FfUE1SX0FERFIpCisjZGVmaW5lIExDQV9XUklURV9QTVIoZCkgICAgKCooKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKilMQ0FfUE1SX0FERFIpID0gKGQpKQorCisjZGVmaW5lIExDQV9HRVRfUFJJTUFSWShyKSAgKChyKSAmIExDQV9QTVJfUERJVikKKyNkZWZpbmUgTENBX0dFVF9PVkVSUklERShyKSAoKChyKSA+PiAzKSAmIExDQV9QTVJfUERJVikKKyNkZWZpbmUgTENBX1NFVF9QUklNQVJZX0NMT0NLKHIsIGMpICgocikgPSAoKChyKSAmIExDQV9QTVJfUFJJTUFSWV9NQVNLKXwoYykpKQorCisvKiBMQ0EgUE1SIERpdmlzb3IgdmFsdWVzICovCisjZGVmaW5lIExDQV9QTVJfRElWXzEgICAweDAKKyNkZWZpbmUgTENBX1BNUl9ESVZfMV81IDB4MQorI2RlZmluZSBMQ0FfUE1SX0RJVl8yICAgMHgyCisjZGVmaW5lIExDQV9QTVJfRElWXzQgICAweDMKKyNkZWZpbmUgTENBX1BNUl9ESVZfOCAgIDB4NAorI2RlZmluZSBMQ0FfUE1SX0RJVl8xNiAgMHg1CisjZGVmaW5lIExDQV9QTVJfRElWX01JTiBESVZfMQorI2RlZmluZSBMQ0FfUE1SX0RJVl9NQVggRElWXzE2CisKKworLyoKKyAqIERhdGEgc3RydWN0dXJlIGZvciBoYW5kbGluZyBMQ0EgbWFjaGluZSBjaGVja3MuICBDb3JyZWN0YWJsZSBlcnJvcnMKKyAqIHJlc3VsdCBpbiBhIHNob3J0IGxvZ291dCBmcmFtZSwgdW5jb3JyZWN0YWJsZSBvbmVzIGluIGEgbG9uZyBvbmUuCisgKi8KK3N0cnVjdCBlbF9sY2FfbWNoZWNrX3Nob3J0IHsKKwlzdHJ1Y3QgZWxfY29tbW9uCWg7CQkvKiBjb21tb24gbG9nb3V0IGhlYWRlciAqLworCXVuc2lnbmVkIGxvbmcJCWVzcjsJCS8qIGVycm9yLXN0YXR1cyByZWdpc3RlciAqLworCXVuc2lnbmVkIGxvbmcJCWVhcjsJCS8qIGVycm9yLWFkZHJlc3MgcmVnaXN0ZXIgKi8KKwl1bnNpZ25lZCBsb25nCQlkY19zdGF0OwkvKiBkY2FjaGUgc3RhdHVzIHJlZ2lzdGVyICovCisJdW5zaWduZWQgbG9uZwkJaW9jX3N0YXQwOwkvKiBJL08gY29udHJvbGxlciBzdGF0dXMgcmVnaXN0ZXIgMCAqLworCXVuc2lnbmVkIGxvbmcJCWlvY19zdGF0MTsJLyogSS9PIGNvbnRyb2xsZXIgc3RhdHVzIHJlZ2lzdGVyIDEgKi8KK307CisKK3N0cnVjdCBlbF9sY2FfbWNoZWNrX2xvbmcgeworCXN0cnVjdCBlbF9jb21tb24JaDsJCS8qIGNvbW1vbiBsb2dvdXQgaGVhZGVyICovCisJdW5zaWduZWQgbG9uZwkJcHRbMzFdOwkJLyogUEFMIHRlbXBzICovCisJdW5zaWduZWQgbG9uZwkJZXhjX2FkZHI7CS8qIGV4Y2VwdGlvbiBhZGRyZXNzICovCisJdW5zaWduZWQgbG9uZwkJcGFkMVszXTsKKwl1bnNpZ25lZCBsb25nCQlwYWxfYmFzZTsJLyogUEFMY29kZSBiYXNlIGFkZHJlc3MgKi8KKwl1bnNpZ25lZCBsb25nCQloaWVyOwkJLyogaHcgaW50ZXJydXB0IGVuYWJsZSAqLworCXVuc2lnbmVkIGxvbmcJCWhpcnI7CQkvKiBodyBpbnRlcnJ1cHQgcmVxdWVzdCAqLworCXVuc2lnbmVkIGxvbmcJCW1tX2NzcjsJCS8qIE1NVSBjb250cm9sICYgc3RhdHVzICovCisJdW5zaWduZWQgbG9uZwkJZGNfc3RhdDsJLyogZGF0YSBjYWNoZSBzdGF0dXMgKi8KKwl1bnNpZ25lZCBsb25nCQlkY19hZGRyOwkvKiBkYXRhIGNhY2hlIGFkZHIgcmVnaXN0ZXIgKi8KKwl1bnNpZ25lZCBsb25nCQlhYm94X2N0bDsJLyogYWRkcmVzcyBib3ggY29udHJvbCByZWdpc3RlciAqLworCXVuc2lnbmVkIGxvbmcJCWVzcjsJCS8qIGVycm9yIHN0YXR1cyByZWdpc3RlciAqLworCXVuc2lnbmVkIGxvbmcJCWVhcjsJCS8qIGVycm9yIGFkZHJlc3MgcmVnaXN0ZXIgKi8KKwl1bnNpZ25lZCBsb25nCQljYXI7CQkvKiBjYWNoZSBjb250cm9sIHJlZ2lzdGVyICovCisJdW5zaWduZWQgbG9uZwkJaW9jX3N0YXQwOwkvKiBJL08gY29udHJvbGxlciBzdGF0dXMgcmVnaXN0ZXIgMCAqLworCXVuc2lnbmVkIGxvbmcJCWlvY19zdGF0MTsJLyogSS9PIGNvbnRyb2xsZXIgc3RhdHVzIHJlZ2lzdGVyIDEgKi8KKwl1bnNpZ25lZCBsb25nCQl2YTsJCS8qIHZpcnR1YWwgYWRkcmVzcyByZWdpc3RlciAqLworfTsKKwordW5pb24gZWxfbGNhIHsKKwlzdHJ1Y3QgZWxfY29tbW9uICoJCWM7CisJc3RydWN0IGVsX2xjYV9tY2hlY2tfbG9uZyAqCWw7CisJc3RydWN0IGVsX2xjYV9tY2hlY2tfc2hvcnQgKglzOworfTsKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2lmbmRlZiBfX0VYVEVSTl9JTkxJTkUKKyNkZWZpbmUgX19FWFRFUk5fSU5MSU5FIGV4dGVybiBpbmxpbmUKKyNkZWZpbmUgX19JT19FWFRFUk5fSU5MSU5FCisjZW5kaWYKKworLyoKKyAqIEkvTyBmdW5jdGlvbnM6CisgKgorICogVW5saWtlIEplbnNlbiwgdGhlIE5vbmFtZSBtYWNoaW5lcyBoYXZlIG5vIGNvbmNlcHQgb2YgbG9jYWwKKyAqIEkvTy0tLWV2ZXJ5dGhpbmcgZ29lcyBvdmVyIHRoZSBQQ0kgYnVzLgorICoKKyAqIFRoZXJlIGlzIHBsZW50eSByb29tIGZvciBvcHRpbWl6YXRpb24gaGVyZS4gIEluIHBhcnRpY3VsYXIsCisgKiB0aGUgQWxwaGEncyBpbnNiL2luc3cvZXh0Yi9leHR3IHNob3VsZCBiZSB1c2VmdWwgaW4gbW92aW5nCisgKiBkYXRhIHRvL2Zyb20gdGhlIHJpZ2h0IGJ5dGUtbGFuZXMuCisgKi8KKworI2RlZmluZSB2aXAJdm9sYXRpbGUgaW50IF9fZm9yY2UgKgorI2RlZmluZSB2dWlwCXZvbGF0aWxlIHVuc2lnbmVkIGludCBfX2ZvcmNlICoKKyNkZWZpbmUgdnVscAl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIF9fZm9yY2UgKgorCisjZGVmaW5lIExDQV9TRVRfSEFFCQkJCQkJXAorCWRvIHsJCQkJCQkJXAorCQlpZiAoYWRkciA+PSAoMVVMIDw8IDI0KSkgewkJCVwKKwkJCXVuc2lnbmVkIGxvbmcgbXNiID0gYWRkciAmIDB4ZjgwMDAwMDA7CVwKKwkJCWFkZHIgLT0gbXNiOwkJCQlcCisJCQlzZXRfaGFlKG1zYik7CQkJCVwKKwkJfQkJCQkJCVwKKwl9IHdoaWxlICgwKQorCisKK19fRVhURVJOX0lOTElORSB1bnNpZ25lZCBpbnQgbGNhX2lvcmVhZDgodm9pZCBfX2lvbWVtICp4YWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZykgeGFkZHI7CisJdW5zaWduZWQgbG9uZyByZXN1bHQsIGJhc2VfYW5kX3R5cGU7CisKKwlpZiAoYWRkciA+PSBMQ0FfREVOU0VfTUVNKSB7CisJCWFkZHIgLT0gTENBX0RFTlNFX01FTTsKKwkJTENBX1NFVF9IQUU7CisJCWJhc2VfYW5kX3R5cGUgPSBMQ0FfU1BBUlNFX01FTSArIDB4MDA7CisJfSBlbHNlIHsKKwkJYWRkciAtPSBMQ0FfSU87CisJCWJhc2VfYW5kX3R5cGUgPSBMQ0FfSU8gKyAweDAwOworCX0KKworCXJlc3VsdCA9ICoodmlwKSAoKGFkZHIgPDwgNSkgKyBiYXNlX2FuZF90eXBlKTsKKwlyZXR1cm4gX19rZXJuZWxfZXh0YmwocmVzdWx0LCBhZGRyICYgMyk7Cit9CisKK19fRVhURVJOX0lOTElORSB2b2lkIGxjYV9pb3dyaXRlOCh1OCBiLCB2b2lkIF9faW9tZW0gKnhhZGRyKQoreworCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKSB4YWRkcjsKKwl1bnNpZ25lZCBsb25nIHcsIGJhc2VfYW5kX3R5cGU7CisKKwlpZiAoYWRkciA+PSBMQ0FfREVOU0VfTUVNKSB7CisJCWFkZHIgLT0gTENBX0RFTlNFX01FTTsKKwkJTENBX1NFVF9IQUU7CisJCWJhc2VfYW5kX3R5cGUgPSBMQ0FfU1BBUlNFX01FTSArIDB4MDA7CisJfSBlbHNlIHsKKwkJYWRkciAtPSBMQ0FfSU87CisJCWJhc2VfYW5kX3R5cGUgPSBMQ0FfSU8gKyAweDAwOworCX0KKworCXcgPSBfX2tlcm5lbF9pbnNibChiLCBhZGRyICYgMyk7CisJKih2dWlwKSAoKGFkZHIgPDwgNSkgKyBiYXNlX2FuZF90eXBlKSA9IHc7Cit9CisKK19fRVhURVJOX0lOTElORSB1bnNpZ25lZCBpbnQgbGNhX2lvcmVhZDE2KHZvaWQgX19pb21lbSAqeGFkZHIpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpIHhhZGRyOworCXVuc2lnbmVkIGxvbmcgcmVzdWx0LCBiYXNlX2FuZF90eXBlOworCisJaWYgKGFkZHIgPj0gTENBX0RFTlNFX01FTSkgeworCQlhZGRyIC09IExDQV9ERU5TRV9NRU07CisJCUxDQV9TRVRfSEFFOworCQliYXNlX2FuZF90eXBlID0gTENBX1NQQVJTRV9NRU0gKyAweDA4OworCX0gZWxzZSB7CisJCWFkZHIgLT0gTENBX0lPOworCQliYXNlX2FuZF90eXBlID0gTENBX0lPICsgMHgwODsKKwl9CisKKwlyZXN1bHQgPSAqKHZpcCkgKChhZGRyIDw8IDUpICsgYmFzZV9hbmRfdHlwZSk7CisJcmV0dXJuIF9fa2VybmVsX2V4dHdsKHJlc3VsdCwgYWRkciAmIDMpOworfQorCitfX0VYVEVSTl9JTkxJTkUgdm9pZCBsY2FfaW93cml0ZTE2KHUxNiBiLCB2b2lkIF9faW9tZW0gKnhhZGRyKQoreworCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKSB4YWRkcjsKKwl1bnNpZ25lZCBsb25nIHcsIGJhc2VfYW5kX3R5cGU7CisKKwlpZiAoYWRkciA+PSBMQ0FfREVOU0VfTUVNKSB7CisJCWFkZHIgLT0gTENBX0RFTlNFX01FTTsKKwkJTENBX1NFVF9IQUU7CisJCWJhc2VfYW5kX3R5cGUgPSBMQ0FfU1BBUlNFX01FTSArIDB4MDg7CisJfSBlbHNlIHsKKwkJYWRkciAtPSBMQ0FfSU87CisJCWJhc2VfYW5kX3R5cGUgPSBMQ0FfSU8gKyAweDA4OworCX0KKworCXcgPSBfX2tlcm5lbF9pbnN3bChiLCBhZGRyICYgMyk7CisJKih2dWlwKSAoKGFkZHIgPDwgNSkgKyBiYXNlX2FuZF90eXBlKSA9IHc7Cit9CisKK19fRVhURVJOX0lOTElORSB1bnNpZ25lZCBpbnQgbGNhX2lvcmVhZDMyKHZvaWQgX19pb21lbSAqeGFkZHIpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpIHhhZGRyOworCWlmIChhZGRyIDwgTENBX0RFTlNFX01FTSkKKwkJYWRkciA9ICgoYWRkciAtIExDQV9JTykgPDwgNSkgKyBMQ0FfSU8gKyAweDE4OworCXJldHVybiAqKHZ1aXApYWRkcjsKK30KKworX19FWFRFUk5fSU5MSU5FIHZvaWQgbGNhX2lvd3JpdGUzMih1MzIgYiwgdm9pZCBfX2lvbWVtICp4YWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZykgeGFkZHI7CisJaWYgKGFkZHIgPCBMQ0FfREVOU0VfTUVNKQorCQlhZGRyID0gKChhZGRyIC0gTENBX0lPKSA8PCA1KSArIExDQV9JTyArIDB4MTg7CisJKih2dWlwKWFkZHIgPSBiOworfQorCitfX0VYVEVSTl9JTkxJTkUgdm9pZCBfX2lvbWVtICpsY2FfaW9wb3J0bWFwKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gKHZvaWQgX19pb21lbSAqKShhZGRyICsgTENBX0lPKTsKK30KKworX19FWFRFUk5fSU5MSU5FIHZvaWQgX19pb21lbSAqbGNhX2lvcmVtYXAodW5zaWduZWQgbG9uZyBhZGRyLAorCQkJCQkgIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlyZXR1cm4gKHZvaWQgX19pb21lbSAqKShhZGRyICsgTENBX0RFTlNFX01FTSk7Cit9CisKK19fRVhURVJOX0lOTElORSBpbnQgbGNhX2lzX2lvYWRkcih1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcmV0dXJuIGFkZHIgPj0gSURFTlRfQUREUiArIDB4MTIwMDAwMDAwVUw7Cit9CisKK19fRVhURVJOX0lOTElORSBpbnQgbGNhX2lzX21taW8oY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCXJldHVybiAodW5zaWduZWQgbG9uZylhZGRyID49IExDQV9ERU5TRV9NRU07Cit9CisKKyN1bmRlZiB2aXAKKyN1bmRlZiB2dWlwCisjdW5kZWYgdnVscAorCisjdW5kZWYgX19JT19QUkVGSVgKKyNkZWZpbmUgX19JT19QUkVGSVgJCWxjYQorI2RlZmluZSBsY2FfdHJpdmlhbF9yd19idwkyCisjZGVmaW5lIGxjYV90cml2aWFsX3J3X2xxCTEKKyNkZWZpbmUgbGNhX3RyaXZpYWxfaW9fYncJMAorI2RlZmluZSBsY2FfdHJpdmlhbF9pb19scQkwCisjZGVmaW5lIGxjYV90cml2aWFsX2lvdW5tYXAJMQorI2luY2x1ZGUgPGFzbS9pb190cml2aWFsLmg+CisKKyNpZmRlZiBfX0lPX0VYVEVSTl9JTkxJTkUKKyN1bmRlZiBfX0VYVEVSTl9JTkxJTkUKKyN1bmRlZiBfX0lPX0VYVEVSTl9JTkxJTkUKKyNlbmRpZgorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX19BTFBIQV9MQ0FfX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvY29yZV9tYXJ2ZWwuaCBiL2luY2x1ZGUvYXNtLWFscGhhL2NvcmVfbWFydmVsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBkNTVmZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL2NvcmVfbWFydmVsLmgKQEAgLTAsMCArMSwzNzggQEAKKy8qCisgKiBNYXJ2ZWwgc3lzdGVtcyB1c2UgdGhlIElPNyBJL08gY2hpcCBwcm92aWRlcyBQQ0kvUENJWC9BR1AgYWNjZXNzCisgKgorICogVGhpcyBmaWxlIGlzIGJhc2VkIG9uOgorICoKKyAqIE1hcnZlbCAvIEVWNyBTeXN0ZW0gUHJvZ3JhbW1lcidzIE1hbnVhbAorICogUmV2aXNpb24gMS4wMAorICogMTQgTWF5IDIwMDEKKyAqLworCisjaWZuZGVmIF9fQUxQSEFfTUFSVkVMX19IX18KKyNkZWZpbmUgX19BTFBIQV9NQVJWRUxfX0hfXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorCisjaW5jbHVkZSA8YXNtL2NvbXBpbGVyLmg+CisKKyNkZWZpbmUgTUFSVkVMX01BWF9QSURTCQkgMzIgLyogYXMgbG9uZyBhcyB3ZSByZWx5IG9uIDQzLWJpdCBzdXBlcnBhZ2UgKi8KKyNkZWZpbmUgTUFSVkVMX0lSUV9WRUNfUEVfU0hJRlQJKDEwKQorI2RlZmluZSBNQVJWRUxfSVJRX1ZFQ19JUlFfTUFTSwkoKDEgPDwgTUFSVkVMX0lSUV9WRUNfUEVfU0hJRlQpIC0gMSkKKyNkZWZpbmUgTUFSVkVMX05SX0lSUVMJCVwKKwkoMTYgKyAoTUFSVkVMX01BWF9QSURTICogKDEgPDwgTUFSVkVMX0lSUV9WRUNfUEVfU0hJRlQpKSkKKworLyoKKyAqIEVWNyBSQk9YIFJlZ2lzdGVycworICovCit0eXBlZGVmIHN0cnVjdCB7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBjc3IgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgxNikpKTsKK30gZXY3X2NzcjsKKwordHlwZWRlZiBzdHJ1Y3QgeworCWV2N19jc3IJUkJPWF9DRkc7CQkvKiAweDAwMDAgKi8KKwlldjdfY3NyCVJCT1hfTlNWQzsKKwlldjdfY3NyCVJCT1hfRVdWQzsKKwlldjdfY3NyCVJCT1hfV0hBTUk7CisJZXY3X2NzcglSQk9YX1RDVEw7CQkvKiAweDAwNDAgKi8KKwlldjdfY3NyCVJCT1hfSU5UOworCWV2N19jc3IJUkJPWF9JTUFTSzsKKwlldjdfY3NyCVJCT1hfSVJFUTsKKwlldjdfY3NyCVJCT1hfSU5UUTsJCS8qIDB4MDA4MCAqLworCWV2N19jc3IJUkJPWF9JTlRBOworCWV2N19jc3IJUkJPWF9JVDsKKwlldjdfY3NyCVJCT1hfU0NSQVRDSDE7CisJZXY3X2NzcglSQk9YX1NDUkFUQ0gyOwkJLyogMHgwMGMwICovCisJZXY3X2NzcglSQk9YX0xfRVJSOworfSBldjdfY3NyczsKKworLyoKKyAqIEVWNyBDU1IgYWRkcmVzc2luZyBtYWNyb3MKKyAqLworI2RlZmluZSBFVjdfTUFTSzQwKGFkZHIpICAgICAgICAoKGFkZHIpICYgKCgxVUwgPDwgNDEpIC0gMSkpCisjZGVmaW5lIEVWN19LRVJOX0FERFIoYWRkcikJKCh2b2lkICopKElERU5UX0FERFIgfCBFVjdfTUFTSzQwKGFkZHIpKSkKKworI2RlZmluZSBFVjdfUEVfTUFTSwkJMHgxZmZVTCAvKiA5IGJpdHMgKCAyNTYgKyBtZW0vaW8gKSAqLworI2RlZmluZSBFVjdfSVBFKHBlKQkJKCh+KChsb25nKShwZSkpICYgRVY3X1BFX01BU0spIDw8IDM1KQorCisjZGVmaW5lIEVWN19DU1JfUEhZUyhwZSwgb2ZmKQkoRVY3X0lQRShwZSkgfCAoMHg3RkZDVUwgPDwgMjApIHwgKG9mZikpCisjZGVmaW5lIEVWN19DU1JTX1BIWVMocGUpCShFVjdfQ1NSX1BIWVMocGUsIDBVTCkpCisKKyNkZWZpbmUgRVY3X0NTUl9LRVJOKHBlLCBvZmYpCShFVjdfS0VSTl9BRERSKEVWN19DU1JfUEhZUyhwZSwgb2ZmKSkpCisjZGVmaW5lIEVWN19DU1JTX0tFUk4ocGUpCShFVjdfS0VSTl9BRERSKEVWN19DU1JTX1BIWVMocGUpKSkKKworI2RlZmluZSBFVjdfQ1NSX09GRlNFVChuYW1lKQkoKHVuc2lnbmVkIGxvbmcpJigoZXY3X2NzcnMgKilOVUxMKS0+bmFtZS5jc3IpCisKKy8qCisgKiBJTzcgcmVnaXN0ZXJzCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGNzciBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDY0KSkpOworfSBpbzdfY3NyOworCit0eXBlZGVmIHN0cnVjdCB7CisJLyogSS9PIFBvcnQgQ29udHJvbCBSZWdpc3RlcnMgKi8KKwlpbzdfY3NyCVBPeF9DVFJMOwkgICAgICAgCS8qIDB4MDAwMCAqLworCWlvN19jc3IJUE94X0NBQ0hFX0NUTDsKKwlpbzdfY3NyIFBPeF9USU1FUjsKKwlpbzdfY3NyIFBPeF9JT19BRFJfRVhUOworCWlvN19jc3IJUE94X01FTV9BRFJfRVhUOwkvKiAweDAxMDAgKi8KKwlpbzdfY3NyIFBPeF9YQ0FMX0NUUkw7CisJaW83X2NzciByc3ZkMVsyXTsJLyogPz8gc3BlYyBkb2Vzbid0IHNob3cgMHgxODAgKi8KKwlpbzdfY3NyIFBPeF9ETV9TT1VSQ0U7CQkvKiAweDAyMDAgKi8KKwlpbzdfY3NyIFBPeF9ETV9ERVNUOworCWlvN19jc3IgUE94X0RNX1NJWkU7CisJaW83X2NzciBQT3hfRE1fQ1RSTDsKKwlpbzdfY3NyIHJzdmQyWzRdOwkJLyogMHgwMzAwICovCisKKwkvKiBBR1AgQ29udHJvbCBSZWdpc3RlcnMgLS0gcG9ydCAzIG9ubHkgKi8KKwlpbzdfY3NyIEFHUF9DQVBfSUQ7CQkvKiAweDA0MDAgKi8KKwlpbzdfY3NyIEFHUF9TVEFUOworCWlvN19jc3IJQUdQX0NNRDsKKwlpbzdfY3NyCXJzdmQzOworCisJLyogSS9PIFBvcnQgTW9uaXRvciBSZWdpc3RlcnMgKi8KKwlpbzdfY3NyCVBPeF9NT05DVEw7CQkvKiAweDA1MDAgKi8KKwlpbzdfY3NyIFBPeF9DVFJBOworCWlvN19jc3IgUE94X0NUUkI7CisJaW83X2NzciBQT3hfQ1RSNTY7CisJaW83X2NzciBQT3hfU0NSQVRDSDsJCS8qIDB4MDYwMCAqLworCWlvN19jc3IgUE94X1hUUkFfQTsKKwlpbzdfY3NyIFBPeF9YVFJBX1RTOworCWlvN19jc3IgUE94X1hUUkFfWjsKKwlpbzdfY3NyIHJzdmQ0OwkJCS8qIDB4MDcwMCAqLworCWlvN19jc3IgUE94X1RIUkVTSEE7CisJaW83X2NzciBQT3hfVEhSRVNIQjsKKwlpbzdfY3NyIHJzdmQ1WzMzXTsKKworCS8qIFN5c3RlbSBBZGRyZXNzIFNwYWNlIFdpbmRvdyBDb250cm9sIFJlZ2lzdGVycyAqLworCisJaW83X2NzciBQT3hfV0JBU0VbNF07CQkvKiAweDEwMDAgKi8KKwlpbzdfY3NyIFBPeF9XTUFTS1s0XTsKKwlpbzdfY3NyIFBPeF9UQkFTRVs0XTsKKwlpbzdfY3NyIFBPeF9TR19UQklBOworCWlvN19jc3IgUE94X01TSV9XQkFTRTsKKwlpbzdfY3NyIHJzdmQ2WzUwXTsKKworCS8qIEkvTyBQb3J0IEVycm9yIFJlZ2lzdGVycyAqLworCWlvN19jc3IgUE94X0VSUl9TVU07CisJaW83X2NzciBQT3hfRklSU1RfRVJSOworCWlvN19jc3IgUE94X01TS19IRUk7CisJaW83X2NzciBQT3hfVExCX0VSUjsKKwlpbzdfY3NyIFBPeF9TUExfQ09NUExUOworCWlvN19jc3IgUE94X1RSQU5TX1NVTTsKKwlpbzdfY3NyIFBPeF9GUkNfUENJX0VSUjsKKwlpbzdfY3NyIFBPeF9NVUxUX0VSUjsKKwlpbzdfY3NyIHJzdmQ3WzhdOworCisJLyogSS9PIFBvcnQgRW5kIG9mIEludGVycnVwdCBSZWdpc3RlcnMgKi8KKwlpbzdfY3NyIEVPSV9EQVQ7CisJaW83X2NzciByc3ZkOFs3XTsKKwlpbzdfY3NyIFBPeF9JQUNLX1NQRUNJQUw7CisJaW83X2NzciByc3ZkOVsxMDNdOworfSBpbzdfaW9wb3J0X2NzcnM7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlpbzdfY3NyIElPX0FTSUNfUkVWOwkJLyogMHgzMC4wMDAwICovCisJaW83X2NzciBJT19TWVNfUkVWOworCWlvN19jc3IgU0VSX0NIQUlOMzsKKwlpbzdfY3NyIFBPN19SU1QxOworCWlvN19jc3IgUE83X1JTVDI7CQkvKiAweDMwLjAxMDAgKi8KKwlpbzdfY3NyIFBPeF9SU1RbNF07CisJaW83X2NzciBJTzdfRFdOSDsKKwlpbzdfY3NyIElPN19NQUY7CisJaW83X2NzciBJTzdfTUFGX1RPOworCWlvN19jc3IgSU83X0FDQ19DTFVNUDsJCS8qIDB4MzAuMDMwMCAqLworCWlvN19jc3IgSU83X1BNQVNLOworCWlvN19jc3IgSU83X0lPTUFTSzsKKwlpbzdfY3NyIElPN19VUEg7CisJaW83X2NzciBJTzdfVVBIX1RPOwkJLyogMHgzMC4wNDAwICovCisJaW83X2NzciBSQlhfSVJFUV9PRkY7CisJaW83X2NzciBSQlhfSU5UQV9PRkY7CisJaW83X2NzciBJTlRfUlRZOworCWlvN19jc3IgUE83X01PTkNUTDsJCS8qIDB4MzAuMDUwMCAqLworCWlvN19jc3IgUE83X0NUUkE7CisJaW83X2NzciBQTzdfQ1RSQjsKKwlpbzdfY3NyIFBPN19DVFI1NjsKKwlpbzdfY3NyIFBPN19TQ1JBVENIOwkJLyogMHgzMC4wNjAwICovCisJaW83X2NzciBQTzdfWFRSQV9BOworCWlvN19jc3IgUE83X1hUUkFfVFM7CisJaW83X2NzciBQTzdfWFRSQV9aOworCWlvN19jc3IgUE83X1BNQVNLOwkJLyogMHgzMC4wNzAwICovCisJaW83X2NzciBQTzdfVEhSRVNIQTsKKwlpbzdfY3NyIFBPN19USFJFU0hCOworCWlvN19jc3IgcnN2ZDFbOTddOworCWlvN19jc3IgUE83X0VSUk9SX1NVTTsJCS8qIDB4MzAuMjAwMCAqLworCWlvN19jc3IgUE83X0JIT0xFX01BU0s7CisJaW83X2NzciBQTzdfSEVJX01TSzsKKwlpbzdfY3NyIFBPN19DUkRfTVNLOworCWlvN19jc3IgUE83X1VOQ1JSX1NZTTsJCS8qIDB4MzAuMjEwMCAqLworCWlvN19jc3IgUE83X0NSUkNUX1NZTTsKKwlpbzdfY3NyIFBPN19FUlJfUEtUWzJdOworCWlvN19jc3IgUE83X1VHQkdFX1NZTTsJCS8qIDB4MzAuMjIwMCAqLworCWlvN19jc3IgcnNidjJbODg3XTsKKwlpbzdfY3NyIFBPN19MU0lfQ1RMWzEyOF07CS8qIDB4MzEuMDAwMCAqLworCWlvN19jc3IgcnN2ZDNbMTIzXTsKKwlpbzdfY3NyIEhMVF9DVEw7CQkvKiAweDMxLjNlYzAgKi8KKwlpbzdfY3NyIEhQSV9DVEw7CQkvKiAweDMxLjNmMDAgKi8KKwlpbzdfY3NyIENSRF9DVEw7CisJaW83X2NzciBTVFZfQ1RMOworCWlvN19jc3IgSEVJX0NUTDsKKwlpbzdfY3NyIFBPN19NU0lfQ1RMWzE2XTsJLyogMHgzMS40MDAwICovCisJaW83X2NzciByc3ZkNFsyNDBdOworCisJLyoKKwkgKiBJbnRlcnJ1cHQgRGlhZ25vc3RpYyAvIFRlc3QKKwkgKi8KKwlzdHJ1Y3QgeworCQlpbzdfY3NyIElOVF9QTkQ7CisJCWlvN19jc3IgSU5UX0NMUjsKKwkJaW83X2NzciBJTlRfRU9JOworCQlpbzdfY3NyIHJzdmRbMjldOworCX0gSU5UX0RJQUdbNF07CisJaW83X2NzciByc3ZkNVsxMjVdOwkgICAgCS8qIDB4MzEuYTAwMCAqLworCWlvN19jc3IgTUlTQ19QTkQ7CQkvKiAweDMxLmI4MDAgKi8KKwlpbzdfY3NyIHJzdmQ2WzMxXTsKKwlpbzdfY3NyIE1TSV9QTkRbMTZdOwkJLyogMHgzMS5jMDAwICovCisJaW83X2NzciByc3ZkN1sxNl07CisJaW83X2NzciBNU0lfQ0xSWzE2XTsJCS8qIDB4MzEuYzgwMCAqLworfSBpbzdfcG9ydDdfY3NyczsKKworLyogCisgKiBJTzcgRE1BIFdpbmRvdyBCYXNlIHJlZ2lzdGVyIChQT3hfV0JBU0V4KQorICovCisjZGVmaW5lIHdiYXNlX21fZW5hICAweDEKKyNkZWZpbmUgd2Jhc2VfbV9zZyAgIDB4MgorI2RlZmluZSB3YmFzZV9tX2RhYyAgMHg0CisjZGVmaW5lIHdiYXNlX21fYWRkciAweEZGRjAwMDAwCit1bmlvbiBJTzdfUE94X1dCQVNFIHsKKwlzdHJ1Y3QgeworCQl1bnNpZ25lZCBlbmEgOiAxOwkvKiA8MD4JCQkqLworCQl1bnNpZ25lZCBzZyA6IDE7CS8qIDwxPgkJCSovCisJCXVuc2lnbmVkIGRhYyA6IDE7CS8qIDwyPiAtLSB3aW5kb3cgMyBvbmx5ICovCisJCXVuc2lnbmVkIHJzdmQxIDogMTc7IAorCQl1bnNpZ25lZCBhZGRyIDogMTI7CS8qIDwzMToyMD4JCSovCisJCXVuc2lnbmVkIHJzdmQyIDogMzI7CisJfSBiaXRzOworCXVuc2lnbmVkIGFzX2xvbmdbMl07CisJdW5zaWduZWQgYXNfcXVhZDsKK307CisKKy8qCisgKiBJTzcgSUlEIChJbnRlcnJ1cHQgSURlbnRpZmllcikgZm9ybWF0CisgKgorICogRm9yIGxldmVsLXNlbnNhdGl2ZSBpbnRlcnJ1cHRzLCBpbnRfbnVtIGlzIGVuY29kZWQgYXM6CisgKgorICoJYnVzL3BvcnQJc2xvdC9kZXZpY2UJSU5UeAorICoJPDc6NT4JCTw0OjI+CQk8MTowPgorICovCit1bmlvbiBJTzdfSUlEIHsKKwlzdHJ1Y3QgeworCQl1bnNpZ25lZCBpbnRfbnVtIDogOTsJCS8qIDw4OjA+ICAgIAkqLworCQl1bnNpZ25lZCB0cHVfbWFzayA6IDQ7CQkvKiA8MTI6OT4gcnN2ZAkqLworCQl1bnNpZ25lZCBtc2kgOiAxOwkJLyogMTMJCSovCisJCXVuc2lnbmVkIGlwZSA6IDEwOwkJLyogPDIzOjE0PgkqLworCQl1bnNpZ25lZCBsb25nIHJzdmQgOiA0MDsJCQorCX0gYml0czsKKwl1bnNpZ25lZCBpbnQgYXNfbG9uZ1syXTsKKwl1bnNpZ25lZCBsb25nIGFzX3F1YWQ7Cit9OworCisvKgorICogSU83IGFkZHJlc3NpbmcgbWFjcm9zCisgKi8KKyNkZWZpbmUgSU83X0tFUk5fQUREUihhZGRyKQkoRVY3X0tFUk5fQUREUihhZGRyKSkKKworI2RlZmluZSBJTzdfUE9SVF9NQVNLCSAgIAkweDA3VUwJLyogMyBiaXRzIG9mIHBvcnQgCSAgICovCisKKyNkZWZpbmUgSU83X0lQRShwZSkJCShFVjdfSVBFKHBlKSkKKyNkZWZpbmUgSU83X0lQT1JUKHBvcnQpCQkoKH4oKGxvbmcpKHBvcnQpKSAmIElPN19QT1JUX01BU0spIDw8IDMyKQorCisjZGVmaW5lIElPN19IT1NFKHBlLCBwb3J0KQkoSU83X0lQRShwZSkgfCBJTzdfSVBPUlQocG9ydCkpCisKKyNkZWZpbmUgSU83X01FTV9QSFlTKHBlLCBwb3J0KQkoSU83X0hPU0UocGUsIHBvcnQpIHwgMHgwMDAwMDAwMFVMKQorI2RlZmluZSBJTzdfQ09ORl9QSFlTKHBlLCBwb3J0KQkoSU83X0hPU0UocGUsIHBvcnQpIHwgMHhGRTAwMDAwMFVMKQorI2RlZmluZSBJTzdfSU9fUEhZUyhwZSwgcG9ydCkJKElPN19IT1NFKHBlLCBwb3J0KSB8IDB4RkYwMDAwMDBVTCkKKyNkZWZpbmUgSU83X0NTUl9QSFlTKHBlLCBwb3J0LCBvZmYpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKElPN19IT1NFKHBlLCBwb3J0KSB8IDB4RkY4MDAwMDBVTCB8IChvZmYpKQorI2RlZmluZSBJTzdfQ1NSU19QSFlTKHBlLCBwb3J0KQkoSU83X0NTUl9QSFlTKHBlLCBwb3J0LCAwVUwpKQorI2RlZmluZSBJTzdfUE9SVDdfQ1NSU19QSFlTKHBlKSAoSU83X0NTUl9QSFlTKHBlLCA3LCAweDMwMDAwMFVMKSkKKworI2RlZmluZSBJTzdfTUVNX0tFUk4ocGUsIHBvcnQpICAgICAgKElPN19LRVJOX0FERFIoSU83X01FTV9QSFlTKHBlLCBwb3J0KSkpCisjZGVmaW5lIElPN19DT05GX0tFUk4ocGUsIHBvcnQpICAgICAoSU83X0tFUk5fQUREUihJTzdfQ09ORl9QSFlTKHBlLCBwb3J0KSkpCisjZGVmaW5lIElPN19JT19LRVJOKHBlLCBwb3J0KSAgICAgICAoSU83X0tFUk5fQUREUihJTzdfSU9fUEhZUyhwZSwgcG9ydCkpKQorI2RlZmluZSBJTzdfQ1NSX0tFUk4ocGUsIHBvcnQsIG9mZikgKElPN19LRVJOX0FERFIoSU83X0NTUl9QSFlTKHBlLHBvcnQsb2ZmKSkpCisjZGVmaW5lIElPN19DU1JTX0tFUk4ocGUsIHBvcnQpICAgICAoSU83X0tFUk5fQUREUihJTzdfQ1NSU19QSFlTKHBlLCBwb3J0KSkpCisjZGVmaW5lIElPN19QT1JUN19DU1JTX0tFUk4ocGUpCSAgICAoSU83X0tFUk5fQUREUihJTzdfUE9SVDdfQ1NSU19QSFlTKHBlKSkpCisKKyNkZWZpbmUgSU83X1BMTF9STkdBKHBsbCkJKCgocGxsKSA+PiAzKSAmIDB4NykKKyNkZWZpbmUgSU83X1BMTF9STkdCKHBsbCkJKCgocGxsKSA+PiA2KSAmIDB4NykKKworI2RlZmluZSBJTzdfTUVNX1NQQUNFCQkoMlVMICogMTAyNCAqIDEwMjQgKiAxMDI0KQkvKiAyR0IgTUVNICovCisjZGVmaW5lIElPN19JT19TUEFDRQkJKDhVTCAqIDEwMjQgKiAxMDI0KQkJLyogOE1CIEkvTyAqLworCisgCisvKiAKKyAqIE9mZnNldCBiZXR3ZWVuIHJhbSBwaHlzaWNhbCBhZGRyZXNzZXMgYW5kIHBjaTY0IERBQyBhZGRyZXNzZXMKKyAqLworI2RlZmluZSBJTzdfREFDX09GRlNFVAkJKDFVTCA8PCA0OSkKKworLyoKKyAqIFRoaXMgaXMgbmVlZGVkIHRvIHNhdGlzaWZ5IHRoZSBJTygpIG1hY3JvIHVzZWQgaW4gaW5pdGlhbGl6aW5nIHRoZSBtYWNodmVjCisgKi8KKyNkZWZpbmUgTUFSVkVMX0lBQ0tfU0MgCQkJCQkJCVwKKyAgICAgICAgKCh1bnNpZ25lZCBsb25nKQkJCQkJCVwKKwkgKCYoKChpbzdfaW9wb3J0X2NzcnMgKilJTzdfQ1NSU19LRVJOKDAsIDApKS0+UE94X0lBQ0tfU1BFQ0lBTCkpKQorCisjaWZkZWYgX19LRVJORUxfXworCisvKgorICogSU83IHN0cnVjdHMKKyAqLworI2RlZmluZSBJTzdfTlVNX1BPUlRTIDQKKyNkZWZpbmUgSU83X0FHUF9QT1JUICAzCisKK3N0cnVjdCBpbzdfcG9ydCB7CisJc3RydWN0IGlvNyAqaW83OworCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZTsKKworCWludCBlbmFibGVkOworCXVuc2lnbmVkIGludCBwb3J0OworCWlvN19pb3BvcnRfY3NycyAqY3NyczsKKworCXVuc2lnbmVkIGxvbmcgc2F2ZWRfd2Jhc2VbNF07CisJdW5zaWduZWQgbG9uZyBzYXZlZF93bWFza1s0XTsKKwl1bnNpZ25lZCBsb25nIHNhdmVkX3RiYXNlWzRdOworfTsKKworc3RydWN0IGlvNyB7CisJc3RydWN0IGlvNyAqbmV4dDsKKworCXVuc2lnbmVkIGludCBwZTsKKwlpbzdfcG9ydDdfY3NycyAqY3NyczsKKwlzdHJ1Y3QgaW83X3BvcnQgcG9ydHNbSU83X05VTV9QT1JUU107CisKKwlzcGlubG9ja190IGlycV9sb2NrOworfTsKKworI2lmbmRlZiBfX0VYVEVSTl9JTkxJTkUKKyMgZGVmaW5lIF9fRVhURVJOX0lOTElORSBleHRlcm4gaW5saW5lCisjIGRlZmluZSBfX0lPX0VYVEVSTl9JTkxJTkUKKyNlbmRpZgorCisvKgorICogSS9PIGZ1bmN0aW9ucy4gQWxsIGFjY2VzcyB0aHJvdWdoIGxpbmVhciBzcGFjZS4KKyAqLworCisvKgorICogTWVtb3J5IGZ1bmN0aW9ucy4gIEFsbCBhY2Nlc3NlcyB0aHJvdWdoIGxpbmVhciBzcGFjZS4KKyAqLworCisjZGVmaW5lIHZ1Y3AJdm9sYXRpbGUgdW5zaWduZWQgY2hhciBfX2ZvcmNlICoKKyNkZWZpbmUgdnVzcAl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBfX2ZvcmNlICoKKworZXh0ZXJuIHVuc2lnbmVkIGludCBtYXJ2ZWxfaW9yZWFkOCh2b2lkIF9faW9tZW0gKik7CitleHRlcm4gdm9pZCBtYXJ2ZWxfaW93cml0ZTgodTggYiwgdm9pZCBfX2lvbWVtICopOworCitfX0VYVEVSTl9JTkxJTkUgdW5zaWduZWQgaW50IG1hcnZlbF9pb3JlYWQxNih2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJcmV0dXJuIF9fa2VybmVsX2xkd3UoKih2dXNwKWFkZHIpOworfQorCitfX0VYVEVSTl9JTkxJTkUgdm9pZCBtYXJ2ZWxfaW93cml0ZTE2KHUxNiBiLCB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJX19rZXJuZWxfc3R3KGIsICoodnVzcClhZGRyKTsKK30KKworZXh0ZXJuIHZvaWQgX19pb21lbSAqbWFydmVsX2lvcmVtYXAodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpOworZXh0ZXJuIHZvaWQgbWFydmVsX2lvdW5tYXAodm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKTsKK2V4dGVybiB2b2lkIF9faW9tZW0gKm1hcnZlbF9pb3BvcnRtYXAgKHVuc2lnbmVkIGxvbmcgYWRkcik7CisKK19fRVhURVJOX0lOTElORSBpbnQgbWFydmVsX2lzX2lvYWRkcih1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcmV0dXJuIChhZGRyID4+IDQwKSAmIDE7Cit9CisKK2V4dGVybiBpbnQgbWFydmVsX2lzX21taW8oY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICopOworCisjdW5kZWYgdnVjcAorI3VuZGVmIHZ1c3AKKworI3VuZGVmIF9fSU9fUFJFRklYCisjZGVmaW5lIF9fSU9fUFJFRklYCQltYXJ2ZWwKKyNkZWZpbmUgbWFydmVsX3RyaXZpYWxfcndfYncJMQorI2RlZmluZSBtYXJ2ZWxfdHJpdmlhbF9yd19scQkxCisjZGVmaW5lIG1hcnZlbF90cml2aWFsX2lvX2J3CTAKKyNkZWZpbmUgbWFydmVsX3RyaXZpYWxfaW9fbHEJMQorI2RlZmluZSBtYXJ2ZWxfdHJpdmlhbF9pb3VubWFwCTAKKyNpbmNsdWRlIDxhc20vaW9fdHJpdmlhbC5oPgorCisjaWZkZWYgX19JT19FWFRFUk5fSU5MSU5FCisjIHVuZGVmIF9fRVhURVJOX0lOTElORQorIyB1bmRlZiBfX0lPX0VYVEVSTl9JTkxJTkUKKyNlbmRpZgorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX19BTFBIQV9NQVJWRUxfX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvY29yZV9tY3BjaWEuaCBiL2luY2x1ZGUvYXNtLWFscGhhL2NvcmVfbWNwY2lhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTgwYTNjNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL2NvcmVfbWNwY2lhLmgKQEAgLTAsMCArMSwzNzkgQEAKKyNpZm5kZWYgX19BTFBIQV9NQ1BDSUFfX0hfXworI2RlZmluZSBfX0FMUEhBX01DUENJQV9fSF9fCisKKy8qIERlZmluZSB0byBleHBlcmltZW50IHdpdGggZml0dGluZyBldmVyeXRoaW5nIGludG8gb25lIDEyOE1CIEhBRSB3aW5kb3cuCisgICBPbmUgd2luZG93IHBlciBidXMsIHRoYXQgaXMuICAqLworI2RlZmluZSBNQ1BDSUFfT05FX0hBRV9XSU5ET1cgMQorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxhc20vY29tcGlsZXIuaD4KKworLyoKKyAqIE1DUENJQSBpcyB0aGUgaW50ZXJuYWwgbmFtZSBmb3IgYSBjb3JlIGxvZ2ljIGNoaXBzZXQgd2hpY2ggcHJvdmlkZXMKKyAqIFBDSSBhY2Nlc3MgZm9yIHRoZSBSQVdISURFIGZhbWlseSBvZiBzeXN0ZW1zLgorICoKKyAqIFRoaXMgZmlsZSBpcyBiYXNlZCBvbjoKKyAqCisgKiBSQVdISURFIFN5c3RlbSBQcm9ncmFtbWVyJ3MgTWFudWFsCisgKiAxNi1NYXktOTYKKyAqIFJldi4gMS40CisgKgorICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKioKKyoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioKKyoqICBJL08gcHJvY2VkdXJlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioKKyoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioKKyoqICAgICAgaW5wb3J0W2J8d3x0fGxdLCBvdXRwb3J0W2J8d3x0fGxdIDg6MTY6MjQ6MzIgSU8geGZlcnMgICAgICAgICAgICAgKioKKyoqCWlucG9ydGJ4dDogOCBiaXRzIG9ubHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqCisqKiAgICAgIGlucG9ydDogICAgYWxpYXMgb2YgaW5wb3J0dyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqCisqKiAgICAgIG91dHBvcnQ6ICAgYWxpYXMgb2Ygb3V0cG9ydHcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqCisqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqCisqKiAgICAgIGlubWVtW2J8d3x0fGxdLCBvdXRtZW1bYnx3fHR8bF0gODoxNjoyNDozMiBJU0EgbWVtb3J5IHhmZXJzICAgICAgICoqCisqKglpbm1lbWJ4dDogOCBiaXRzIG9ubHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKgorKiogICAgICBpbm1lbTogICAgYWxpYXMgb2YgaW5tZW13ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKgorKiogICAgICBvdXRtZW06ICAgYWxpYXMgb2Ygb3V0bWVtdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKgorKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKgorKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisKKy8qIE1DUENJQSBBRERSRVNTIEJJVCBERUZJTklUSU9OUworICoKKyAqICAzMzMzIDMzMzMgMzMyMiAyMjIyIDIyMjIgMTExMSAxMTExIDExCisgKiAgOTg3NiA1NDMyIDEwOTggNzY1NCAzMjEwIDk4NzYgNTQzMiAxMDk4IDc2NTQgMzIxMAorICogIC0tLS0gLS0tLSAtLS0tIC0tLS0gLS0tLSAtLS0tIC0tLS0gLS0tLSAtLS0tIC0tLS0KKyAqICAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDAwCisgKiAgLS0tLSAtLS0tIC0tLS0gLS0tLSAtLS0tIC0tLS0gLS0tLSAtLS0tIC0tLS0gLS0tLQorICogIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XHwKKyAqICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ5dGUgRW5hYmxlIC0tKyB8CisgKiAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmZXIgTGVuZ3RoIC0tKworICogICstLSBJTyBzcGFjZSwgbm90IGNhY2hlZAorICoKKyAqICAgQnl0ZSAgICAgIFRyYW5zZmVyCisgKiAgIEVuYWJsZSAgICBMZW5ndGggICAgVHJhbnNmZXIgIEJ5dGUgICAgQWRkcmVzcworICogICBhZHI8Njo1PiAgYWRyPDQ6Mz4gIExlbmd0aCAgICBFbmFibGUgIEFkZGVyCisgKiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogICAgICAwMCAgICAgICAgMDAgICAgICBCeXRlICAgICAgMTExMCAgIDB4MDAwCisgKiAgICAgIDAxICAgICAgICAwMCAgICAgIEJ5dGUgICAgICAxMTAxICAgMHgwMjAKKyAqICAgICAgMTAgICAgICAgIDAwICAgICAgQnl0ZSAgICAgIDEwMTEgICAweDA0MAorICogICAgICAxMSAgICAgICAgMDAgICAgICBCeXRlICAgICAgMDExMSAgIDB4MDYwCisgKgorICogICAgICAwMCAgICAgICAgMDEgICAgICBXb3JkICAgICAgMTEwMCAgIDB4MDA4CisgKiAgICAgIDAxICAgICAgICAwMSAgICAgIFdvcmQgICAgICAxMDAxICAgMHgwMjggPD0gTm90IHN1cHBvcnRlZCBpbiB0aGlzIGNvZGUuCisgKiAgICAgIDEwICAgICAgICAwMSAgICAgIFdvcmQgICAgICAwMDExICAgMHgwNDgKKyAqCisgKiAgICAgIDAwICAgICAgICAxMCAgICAgIFRyaWJ5dGUgICAxMDAwICAgMHgwMTAKKyAqICAgICAgMDEgICAgICAgIDEwICAgICAgVHJpYnl0ZSAgIDAwMDEgICAweDAzMAorICoKKyAqICAgICAgMTAgICAgICAgIDExICAgICAgTG9uZ3dvcmQgIDAwMDAgICAweDA1OAorICoKKyAqICAgICAgTm90ZSB0aGF0IGJ5dGUgZW5hYmxlcyBhcmUgYXNzZXJ0ZWQgbG93LgorICoKKyAqLworCisjZGVmaW5lIE1DUENJQV9NSUQobSkJCSgodW5zaWduZWQgbG9uZykobSkgPDwgMzMpCisKKy8qIERvZGdlIGhhcyBQQ0kwIGFuZCBQQ0kxIGF0IE1JRCA0IGFuZCA1IHJlc3BlY3RpdmVseS4gCisgICBEdXJhbmdvIGFkZHMgUENJMiBhbmQgUENJMyBhdCBNSUQgNiBhbmQgNyByZXNwZWN0aXZlbHkuICAqLworI2RlZmluZSBNQ1BDSUFfSE9TRTJNSUQoaCkJKChoKSArIDQpCisKKyNkZWZpbmUgTUNQQ0lBX01FTV9NQVNLIDB4MDdmZmZmZmYgLyogU1BBUlNFIE1lbSByZWdpb24gbWFzayBpcyAyNyBiaXRzICovCisKKy8qCisgKiBNZW1vcnkgc3BhY2VzOgorICovCisjZGVmaW5lIE1DUENJQV9TUEFSU0UobSkJKElERU5UX0FERFIgKyAweGYwMDAwMDAwMDBVTCArIE1DUENJQV9NSUQobSkpCisjZGVmaW5lIE1DUENJQV9ERU5TRShtKQkJKElERU5UX0FERFIgKyAweGYxMDAwMDAwMDBVTCArIE1DUENJQV9NSUQobSkpCisjZGVmaW5lIE1DUENJQV9JTyhtKQkJKElERU5UX0FERFIgKyAweGYxODAwMDAwMDBVTCArIE1DUENJQV9NSUQobSkpCisjZGVmaW5lIE1DUENJQV9DT05GKG0pCQkoSURFTlRfQUREUiArIDB4ZjFjMDAwMDAwMFVMICsgTUNQQ0lBX01JRChtKSkKKyNkZWZpbmUgTUNQQ0lBX0NTUihtKQkJKElERU5UX0FERFIgKyAweGYxZTAwMDAwMDBVTCArIE1DUENJQV9NSUQobSkpCisjZGVmaW5lIE1DUENJQV9JT19JQUNLKG0pCShJREVOVF9BRERSICsgMHhmMWYwMDAwMDAwVUwgKyBNQ1BDSUFfTUlEKG0pKQorI2RlZmluZSBNQ1BDSUFfREVOU0VfSU8obSkJKElERU5UX0FERFIgKyAweGUxZmMwMDAwMDBVTCArIE1DUENJQV9NSUQobSkpCisjZGVmaW5lIE1DUENJQV9ERU5TRV9DT05GKG0pCShJREVOVF9BRERSICsgMHhlMWZlMDAwMDAwVUwgKyBNQ1BDSUFfTUlEKG0pKQorCisvKgorICogIEdlbmVyYWwgUmVnaXN0ZXJzCisgKi8KKyNkZWZpbmUgTUNQQ0lBX1JFVihtKQkJKE1DUENJQV9DU1IobSkgKyAweDAwMCkKKyNkZWZpbmUgTUNQQ0lBX1dIT0FNSShtKQkoTUNQQ0lBX0NTUihtKSArIDB4MDQwKQorI2RlZmluZSBNQ1BDSUFfUENJX0xBVChtKQkoTUNQQ0lBX0NTUihtKSArIDB4MDgwKQorI2RlZmluZSBNQ1BDSUFfQ0FQX0NUUkwobSkJKE1DUENJQV9DU1IobSkgKyAweDEwMCkKKyNkZWZpbmUgTUNQQ0lBX0hBRV9NRU0obSkJKE1DUENJQV9DU1IobSkgKyAweDQwMCkKKyNkZWZpbmUgTUNQQ0lBX0hBRV9JTyhtKQkoTUNQQ0lBX0NTUihtKSArIDB4NDQwKQorI2RlZmluZSBfTUNQQ0lBX0lBQ0tfU0MobSkJKE1DUENJQV9DU1IobSkgKyAweDQ4MCkKKyNkZWZpbmUgTUNQQ0lBX0hBRV9ERU5TRShtKQkoTUNQQ0lBX0NTUihtKSArIDB4NEMwKQorCisvKgorICogSW50ZXJydXB0IENvbnRyb2wgcmVnaXN0ZXJzCisgKi8KKyNkZWZpbmUgTUNQQ0lBX0lOVF9DVEwobSkJKE1DUENJQV9DU1IobSkgKyAweDUwMCkKKyNkZWZpbmUgTUNQQ0lBX0lOVF9SRVEobSkJKE1DUENJQV9DU1IobSkgKyAweDU0MCkKKyNkZWZpbmUgTUNQQ0lBX0lOVF9UQVJHKG0pCShNQ1BDSUFfQ1NSKG0pICsgMHg1ODApCisjZGVmaW5lIE1DUENJQV9JTlRfQURSKG0pCShNQ1BDSUFfQ1NSKG0pICsgMHg1QzApCisjZGVmaW5lIE1DUENJQV9JTlRfQURSX0VYVChtKQkoTUNQQ0lBX0NTUihtKSArIDB4NjAwKQorI2RlZmluZSBNQ1BDSUFfSU5UX01BU0swKG0pCShNQ1BDSUFfQ1NSKG0pICsgMHg2NDApCisjZGVmaW5lIE1DUENJQV9JTlRfTUFTSzEobSkJKE1DUENJQV9DU1IobSkgKyAweDY4MCkKKyNkZWZpbmUgTUNQQ0lBX0lOVF9BQ0swKG0pCShNQ1BDSUFfQ1NSKG0pICsgMHgxMDAwM2YwMCkKKyNkZWZpbmUgTUNQQ0lBX0lOVF9BQ0sxKG0pCShNQ1BDSUFfQ1NSKG0pICsgMHgxMDAwM2Y0MCkKKworLyoKKyAqIFBlcmZvcm1hbmNlIE1vbml0b3IgcmVnaXN0ZXJzCisgKi8KKyNkZWZpbmUgTUNQQ0lBX1BFUkZfTU9OKG0pCShNQ1BDSUFfQ1NSKG0pICsgMHgzMDApCisjZGVmaW5lIE1DUENJQV9QRVJGX0NPTlQobSkJKE1DUENJQV9DU1IobSkgKyAweDM0MCkKKworLyoKKyAqIERpYWdub3N0aWMgUmVnaXN0ZXJzCisgKi8KKyNkZWZpbmUgTUNQQ0lBX0NBUF9ESUFHKG0pCShNQ1BDSUFfQ1NSKG0pICsgMHg3MDApCisjZGVmaW5lIE1DUENJQV9UT1BfT0ZfTUVNKG0pCShNQ1BDSUFfQ1NSKG0pICsgMHg3QzApCisKKy8qCisgKiBFcnJvciByZWdpc3RlcnMKKyAqLworI2RlZmluZSBNQ1BDSUFfTUNfRVJSMChtKQkoTUNQQ0lBX0NTUihtKSArIDB4ODAwKQorI2RlZmluZSBNQ1BDSUFfTUNfRVJSMShtKQkoTUNQQ0lBX0NTUihtKSArIDB4ODQwKQorI2RlZmluZSBNQ1BDSUFfQ0FQX0VSUihtKQkoTUNQQ0lBX0NTUihtKSArIDB4ODgwKQorI2RlZmluZSBNQ1BDSUFfUENJX0VSUjEobSkJKE1DUENJQV9DU1IobSkgKyAweDEwNDApCisjZGVmaW5lIE1DUENJQV9NRFBBX1NUQVQobSkJKE1DUENJQV9DU1IobSkgKyAweDQwMDApCisjZGVmaW5lIE1DUENJQV9NRFBBX1NZTihtKQkoTUNQQ0lBX0NTUihtKSArIDB4NDA0MCkKKyNkZWZpbmUgTUNQQ0lBX01EUEFfRElBRyhtKQkoTUNQQ0lBX0NTUihtKSArIDB4NDA4MCkKKyNkZWZpbmUgTUNQQ0lBX01EUEJfU1RBVChtKQkoTUNQQ0lBX0NTUihtKSArIDB4ODAwMCkKKyNkZWZpbmUgTUNQQ0lBX01EUEJfU1lOKG0pCShNQ1BDSUFfQ1NSKG0pICsgMHg4MDQwKQorI2RlZmluZSBNQ1BDSUFfTURQQl9ESUFHKG0pCShNQ1BDSUFfQ1NSKG0pICsgMHg4MDgwKQorCisvKgorICogUENJIEFkZHJlc3MgVHJhbnNsYXRpb24gUmVnaXN0ZXJzLgorICovCisjZGVmaW5lIE1DUENJQV9TR19UQklBKG0pCShNQ1BDSUFfQ1NSKG0pICsgMHgxMzAwKQorI2RlZmluZSBNQ1BDSUFfSEJBU0UobSkJCShNQ1BDSUFfQ1NSKG0pICsgMHgxMzQwKQorCisjZGVmaW5lIE1DUENJQV9XMF9CQVNFKG0pCShNQ1BDSUFfQ1NSKG0pICsgMHgxNDAwKQorI2RlZmluZSBNQ1BDSUFfVzBfTUFTSyhtKQkoTUNQQ0lBX0NTUihtKSArIDB4MTQ0MCkKKyNkZWZpbmUgTUNQQ0lBX1QwX0JBU0UobSkJKE1DUENJQV9DU1IobSkgKyAweDE0ODApCisKKyNkZWZpbmUgTUNQQ0lBX1cxX0JBU0UobSkJKE1DUENJQV9DU1IobSkgKyAweDE1MDApCisjZGVmaW5lIE1DUENJQV9XMV9NQVNLKG0pCShNQ1BDSUFfQ1NSKG0pICsgMHgxNTQwKQorI2RlZmluZSBNQ1BDSUFfVDFfQkFTRShtKQkoTUNQQ0lBX0NTUihtKSArIDB4MTU4MCkKKworI2RlZmluZSBNQ1BDSUFfVzJfQkFTRShtKQkoTUNQQ0lBX0NTUihtKSArIDB4MTYwMCkKKyNkZWZpbmUgTUNQQ0lBX1cyX01BU0sobSkJKE1DUENJQV9DU1IobSkgKyAweDE2NDApCisjZGVmaW5lIE1DUENJQV9UMl9CQVNFKG0pCShNQ1BDSUFfQ1NSKG0pICsgMHgxNjgwKQorCisjZGVmaW5lIE1DUENJQV9XM19CQVNFKG0pCShNQ1BDSUFfQ1NSKG0pICsgMHgxNzAwKQorI2RlZmluZSBNQ1BDSUFfVzNfTUFTSyhtKQkoTUNQQ0lBX0NTUihtKSArIDB4MTc0MCkKKyNkZWZpbmUgTUNQQ0lBX1QzX0JBU0UobSkJKE1DUENJQV9DU1IobSkgKyAweDE3ODApCisKKy8qIEhhY2shICBPbmx5IHdvcmRzIGZvciBidXMgMC4gICovCisKKyNpZm5kZWYgTUNQQ0lBX09ORV9IQUVfV0lORE9XCisjZGVmaW5lIE1DUENJQV9IQUVfQUREUkVTUwlNQ1BDSUFfSEFFX01FTSg0KQorI2VuZGlmCisjZGVmaW5lIE1DUENJQV9JQUNLX1NDCQlfTUNQQ0lBX0lBQ0tfU0MoNCkKKworLyogCisgKiBUaGUgY2Fub25pY2FsIG5vbi1yZW1hcGVkIEkvTyBhbmQgTUVNIGFkZHJlc3NlcyBoYXZlIHRoZXNlIHZhbHVlcworICogc3VidHJhY3RlZCBvdXQuICBUaGlzIGlzIGFycmFuZ2VkIHNvIHRoYXQgZm9sa3MgbWFuaXB1bGF0aW5nIElTQQorICogZGV2aWNlcyBjYW4gdXNlIHRoZWlyIGZhbWlsaWFyIG51bWJlcnMgYW5kIGhhdmUgdGhlbSBtYXAgdG8gYnVzIDAuCisgKi8KKworI2RlZmluZSBNQ1BDSUFfSU9fQklBUwkJTUNQQ0lBX0lPKDQpCisjZGVmaW5lIE1DUENJQV9NRU1fQklBUwkJTUNQQ0lBX0RFTlNFKDQpCisKKy8qIE9mZnNldCBiZXR3ZWVuIHJhbSBwaHlzaWNhbCBhZGRyZXNzZXMgYW5kIHBjaTY0IERBQyBidXMgYWRkcmVzc2VzLiAgKi8KKyNkZWZpbmUgTUNQQ0lBX0RBQ19PRkZTRVQJKDFVTCA8PCA0MCkKKworLyoKKyAqIERhdGEgc3RydWN0dXJlIGZvciBoYW5kbGluZyBNQ1BDSUEgbWFjaGluZSBjaGVja3M6CisgKi8KK3N0cnVjdCBlbF9NQ1BDSUFfdW5jb3JyZWN0ZWRfZnJhbWVfbWNoZWNrIHsKKwlzdHJ1Y3QgZWxfY29tbW9uIGhlYWRlcjsKKwlzdHJ1Y3QgZWxfY29tbW9uX0VWNV91bmNvcnJlY3RhYmxlX21jaGVjayBwcm9jZGF0YTsKK307CisKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2lmbmRlZiBfX0VYVEVSTl9JTkxJTkUKKyNkZWZpbmUgX19FWFRFUk5fSU5MSU5FIGV4dGVybiBpbmxpbmUKKyNkZWZpbmUgX19JT19FWFRFUk5fSU5MSU5FCisjZW5kaWYKKworLyoKKyAqIEkvTyBmdW5jdGlvbnM6CisgKgorICogTUNQQ0lBLCB0aGUgUkFXSElERSBmYW1pbHkgUENJL21lbW9yeSBzdXBwb3J0IGNoaXBzZXQgZm9yIHRoZSBFVjUgKDIxMTY0KQorICogYW5kIEVWNTYgKDIxMTY0YSkgcHJvY2Vzc29ycywgY2FuIHVzZSBlaXRoZXIgYSBzcGFyc2UgYWRkcmVzcyBtYXBwaW5nCisgKiBzY2hlbWUsIG9yIHRoZSBzby1jYWxsZWQgYnl0ZS13b3JkIFBDSSBhZGRyZXNzIHNwYWNlLCB0byBnZXQgYXQgUENJIG1lbW9yeQorICogYW5kIEkvTy4KKyAqCisgKiBVbmZvcnR1bmF0ZWx5LCB3ZSBjYW4ndCB1c2UgQldJTyB3aXRoIEVWNSwgc28gZm9yIG5vdywgd2UgYWx3YXlzIHVzZSBTUEFSU0UuCisgKi8KKworLyoKKyAqIE1lbW9yeSBmdW5jdGlvbnMuICA2NC1iaXQgYW5kIDMyLWJpdCBhY2Nlc3NlcyBhcmUgZG9uZSB0aHJvdWdoCisgKiBkZW5zZSBtZW1vcnkgc3BhY2UsIGV2ZXJ5dGhpbmcgZWxzZSB0aHJvdWdoIHNwYXJzZSBzcGFjZS4KKyAqCisgKiBGb3IgcmVhZGluZyBhbmQgd3JpdGluZyA4IGFuZCAxNiBiaXQgcXVhbnRpdGllcyB3ZSBuZWVkIHRvCisgKiBnbyB0aHJvdWdoIG9uZSBvZiB0aGUgdGhyZWUgc3BhcnNlIGFkZHJlc3MgbWFwcGluZyByZWdpb25zCisgKiBhbmQgdXNlIHRoZSBIQUVfTUVNIENTUiB0byBwcm92aWRlIHNvbWUgYml0cyBvZiB0aGUgYWRkcmVzcy4KKyAqIFRoZSBmb2xsb3dpbmcgZmV3IHJvdXRpbmVzIHVzZSBvbmx5IHNwYXJzZSBhZGRyZXNzIHJlZ2lvbiAxCisgKiB3aGljaCBnaXZlcyAxR2J5dGUgb2YgYWNjZXNzaWJsZSBzcGFjZSB3aGljaCByZWxhdGVzIGV4YWN0bHkKKyAqIHRvIHRoZSBhbW91bnQgb2YgUENJIG1lbW9yeSBtYXBwaW5nICppbnRvKiBzeXN0ZW0gYWRkcmVzcyBzcGFjZS4KKyAqIFNlZSBwIDYtMTcgb2YgdGhlIHNwZWNpZmljYXRpb24gYnV0IGl0IGxvb2tzIHNvbWV0aGluZyBsaWtlIHRoaXM6CisgKgorICogMjExNjQgQWRkcmVzczoKKyAqCisgKiAgICAgICAgICAzICAgICAgICAgMiAgICAgICAgIDEKKyAqIDk4NzY1NDMyMTA5ODc2NTQzMjEwOTg3NjU0MzIxMDk4NzY1NDMyMTAKKyAqIDFaWlpaMC5QQ0kuUVcuQWRkcmVzcy4uLi4uLi4uLi4uLkJCTEwKKyAqCisgKiBaWiA9IFNCWgorICogQkIgPSBCeXRlIG9mZnNldAorICogTEwgPSBUcmFuc2ZlciBsZW5ndGgKKyAqCisgKiBQQ0kgQWRkcmVzczoKKyAqCisgKiAzICAgICAgICAgMiAgICAgICAgIDEKKyAqIDEwOTg3NjU0MzIxMDk4NzY1NDMyMTA5ODc2NTQzMjEwCisgKiBISEguLi4uUENJLlFXLkFkZHJlc3MuLi4uLi4uLiAwMAorICoKKyAqIEhISCA9IDMxOjI5IEhBRV9NRU0gQ1NSCisgKgorICovCisKKyNkZWZpbmUgdmlwCXZvbGF0aWxlIGludCBfX2ZvcmNlICoKKyNkZWZpbmUgdnVpcAl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgX19mb3JjZSAqCisKKyNpZmRlZiBNQ1BDSUFfT05FX0hBRV9XSU5ET1cKKyNkZWZpbmUgTUNQQ0lBX0ZST0JfTU1JTwkJCQkJCVwKKwlpZiAoX19tY3BjaWFfaXNfbW1pbyhob3NlKSkgewkJCQkJXAorCQlzZXRfaGFlKGhvc2UgJiAweGZmZmZmZmZmKTsJCQkJXAorCQlob3NlID0gaG9zZSAtIE1DUENJQV9ERU5TRSg0KSArIE1DUENJQV9TUEFSU0UoNCk7CVwKKwl9CisjZWxzZQorI2RlZmluZSBNQ1BDSUFfRlJPQl9NTUlPCQkJCQkJXAorCWlmIChfX21jcGNpYV9pc19tbWlvKGhvc2UpKSB7CQkJCQlcCisJCWhvc2UgPSBob3NlIC0gTUNQQ0lBX0RFTlNFKDQpICsgTUNQQ0lBX1NQQVJTRSg0KTsJXAorCX0KKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIGludCBfX21jcGNpYV9pc19tbWlvKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gKGFkZHIgJiAweDgwMDAwMDAwVUwpID09IDA7Cit9CisKK19fRVhURVJOX0lOTElORSB1bnNpZ25lZCBpbnQgbWNwY2lhX2lvcmVhZDgodm9pZCBfX2lvbWVtICp4YWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZyl4YWRkciAmIE1DUENJQV9NRU1fTUFTSzsKKwl1bnNpZ25lZCBsb25nIGhvc2UgPSAodW5zaWduZWQgbG9uZyl4YWRkciAmIH5NQ1BDSUFfTUVNX01BU0s7CisJdW5zaWduZWQgbG9uZyByZXN1bHQ7CisKKwlNQ1BDSUFfRlJPQl9NTUlPOworCisJcmVzdWx0ID0gKih2aXApICgoYWRkciA8PCA1KSArIGhvc2UgKyAweDAwKTsKKwlyZXR1cm4gX19rZXJuZWxfZXh0YmwocmVzdWx0LCBhZGRyICYgMyk7Cit9CisKK19fRVhURVJOX0lOTElORSB2b2lkIG1jcGNpYV9pb3dyaXRlOCh1OCBiLCB2b2lkIF9faW9tZW0gKnhhZGRyKQoreworCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKXhhZGRyICYgTUNQQ0lBX01FTV9NQVNLOworCXVuc2lnbmVkIGxvbmcgaG9zZSA9ICh1bnNpZ25lZCBsb25nKXhhZGRyICYgfk1DUENJQV9NRU1fTUFTSzsKKwl1bnNpZ25lZCBsb25nIHc7CisKKwlNQ1BDSUFfRlJPQl9NTUlPOworCisJdyA9IF9fa2VybmVsX2luc2JsKGIsIGFkZHIgJiAzKTsKKwkqKHZ1aXApICgoYWRkciA8PCA1KSArIGhvc2UgKyAweDAwKSA9IHc7Cit9CisKK19fRVhURVJOX0lOTElORSB1bnNpZ25lZCBpbnQgbWNwY2lhX2lvcmVhZDE2KHZvaWQgX19pb21lbSAqeGFkZHIpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpeGFkZHIgJiBNQ1BDSUFfTUVNX01BU0s7CisJdW5zaWduZWQgbG9uZyBob3NlID0gKHVuc2lnbmVkIGxvbmcpeGFkZHIgJiB+TUNQQ0lBX01FTV9NQVNLOworCXVuc2lnbmVkIGxvbmcgcmVzdWx0OworCisJTUNQQ0lBX0ZST0JfTU1JTzsKKworCXJlc3VsdCA9ICoodmlwKSAoKGFkZHIgPDwgNSkgKyBob3NlICsgMHgwOCk7CisJcmV0dXJuIF9fa2VybmVsX2V4dHdsKHJlc3VsdCwgYWRkciAmIDMpOworfQorCitfX0VYVEVSTl9JTkxJTkUgdm9pZCBtY3BjaWFfaW93cml0ZTE2KHUxNiBiLCB2b2lkIF9faW9tZW0gKnhhZGRyKQoreworCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKXhhZGRyICYgTUNQQ0lBX01FTV9NQVNLOworCXVuc2lnbmVkIGxvbmcgaG9zZSA9ICh1bnNpZ25lZCBsb25nKXhhZGRyICYgfk1DUENJQV9NRU1fTUFTSzsKKwl1bnNpZ25lZCBsb25nIHc7CisKKwlNQ1BDSUFfRlJPQl9NTUlPOworCisJdyA9IF9fa2VybmVsX2luc3dsKGIsIGFkZHIgJiAzKTsKKwkqKHZ1aXApICgoYWRkciA8PCA1KSArIGhvc2UgKyAweDA4KSA9IHc7Cit9CisKK19fRVhURVJOX0lOTElORSB1bnNpZ25lZCBpbnQgbWNwY2lhX2lvcmVhZDMyKHZvaWQgX19pb21lbSAqeGFkZHIpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpeGFkZHI7CisKKwlpZiAoIV9fbWNwY2lhX2lzX21taW8oYWRkcikpCisJCWFkZHIgPSAoKGFkZHIgJiAweGZmZmYpIDw8IDUpICsgKGFkZHIgJiB+MHhmZmZmdWwpICsgMHgxODsKKworCXJldHVybiAqKHZ1aXApYWRkcjsKK30KKworX19FWFRFUk5fSU5MSU5FIHZvaWQgbWNwY2lhX2lvd3JpdGUzMih1MzIgYiwgdm9pZCBfX2lvbWVtICp4YWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZyl4YWRkcjsKKworCWlmICghX19tY3BjaWFfaXNfbW1pbyhhZGRyKSkKKwkJYWRkciA9ICgoYWRkciAmIDB4ZmZmZikgPDwgNSkgKyAoYWRkciAmIH4weGZmZmZ1bCkgKyAweDE4OworCisJKih2dWlwKWFkZHIgPSBiOworfQorCisKK19fRVhURVJOX0lOTElORSB2b2lkIF9faW9tZW0gKm1jcGNpYV9pb3BvcnRtYXAodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXJldHVybiAodm9pZCBfX2lvbWVtICopKGFkZHIgKyBNQ1BDSUFfSU9fQklBUyk7Cit9CisKK19fRVhURVJOX0lOTElORSB2b2lkIF9faW9tZW0gKm1jcGNpYV9pb3JlbWFwKHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCQkJICAgICB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJcmV0dXJuICh2b2lkIF9faW9tZW0gKikoYWRkciArIE1DUENJQV9NRU1fQklBUyk7Cit9CisKK19fRVhURVJOX0lOTElORSBpbnQgbWNwY2lhX2lzX2lvYWRkcih1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcmV0dXJuIGFkZHIgPj0gTUNQQ0lBX1NQQVJTRSgwKTsKK30KKworX19FWFRFUk5fSU5MSU5FIGludCBtY3BjaWFfaXNfbW1pbyhjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKnhhZGRyKQoreworCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKSB4YWRkcjsKKwlyZXR1cm4gX19tY3BjaWFfaXNfbW1pbyhhZGRyKTsKK30KKworI3VuZGVmIE1DUENJQV9GUk9CX01NSU8KKworI3VuZGVmIHZpcAorI3VuZGVmIHZ1aXAKKworI3VuZGVmIF9fSU9fUFJFRklYCisjZGVmaW5lIF9fSU9fUFJFRklYCQltY3BjaWEKKyNkZWZpbmUgbWNwY2lhX3RyaXZpYWxfcndfYncJMgorI2RlZmluZSBtY3BjaWFfdHJpdmlhbF9yd19scQkxCisjZGVmaW5lIG1jcGNpYV90cml2aWFsX2lvX2J3CTAKKyNkZWZpbmUgbWNwY2lhX3RyaXZpYWxfaW9fbHEJMAorI2RlZmluZSBtY3BjaWFfdHJpdmlhbF9pb3VubWFwCTEKKyNpbmNsdWRlIDxhc20vaW9fdHJpdmlhbC5oPgorCisjaWZkZWYgX19JT19FWFRFUk5fSU5MSU5FCisjdW5kZWYgX19FWFRFUk5fSU5MSU5FCisjdW5kZWYgX19JT19FWFRFUk5fSU5MSU5FCisjZW5kaWYKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9fQUxQSEFfTUNQQ0lBX19IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL2NvcmVfcG9sYXJpcy5oIGIvaW5jbHVkZS9hc20tYWxwaGEvY29yZV9wb2xhcmlzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY5NjZiNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL2NvcmVfcG9sYXJpcy5oCkBAIC0wLDAgKzEsMTEwIEBACisjaWZuZGVmIF9fQUxQSEFfUE9MQVJJU19fSF9fCisjZGVmaW5lIF9fQUxQSEFfUE9MQVJJU19fSF9fCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9jb21waWxlci5oPgorCisvKgorICogUE9MQVJJUyBpcyB0aGUgaW50ZXJuYWwgbmFtZSBmb3IgYSBjb3JlIGxvZ2ljIGNoaXBzZXQgd2hpY2ggcHJvdmlkZXMKKyAqIG1lbW9yeSBjb250cm9sbGVyIGFuZCBQQ0kgYWNjZXNzIGZvciB0aGUgMjExNjRQQyBjaGlwIGJhc2VkIHN5c3RlbXMuCisgKgorICogVGhpcyBmaWxlIGlzIGJhc2VkIG9uOgorICoKKyAqIFBvbGFyaXMgU3lzdGVtIENvbnRyb2xsZXIKKyAqIERldmljZSBGdW5jdGlvbmFsIFNwZWNpZmljYXRpb24KKyAqIDIyLUphbi05OAorICogUmV2LiA0LjIKKyAqCisgKi8KKworLyogUG9sYXJpcyBtZW1vcnkgcmVnaW9ucyAqLworI2RlZmluZSBQT0xBUklTX1NQQVJTRV9NRU1fQkFTRQkJKElERU5UX0FERFIgKyAweGY4MDAwMDAwMDBVTCkKKyNkZWZpbmUgUE9MQVJJU19ERU5TRV9NRU1fQkFTRQkJKElERU5UX0FERFIgKyAweGY5MDAwMDAwMDBVTCkKKyNkZWZpbmUgUE9MQVJJU19TUEFSU0VfSU9fQkFTRQkJKElERU5UX0FERFIgKyAweGY5ODAwMDAwMDBVTCkKKyNkZWZpbmUgUE9MQVJJU19TUEFSU0VfQ09ORklHX0JBU0UJKElERU5UX0FERFIgKyAweGY5YzAwMDAwMDBVTCkKKyNkZWZpbmUgUE9MQVJJU19JQUNLX0JBU0UJCShJREVOVF9BRERSICsgMHhmOWY4MDAwMDAwVUwpCisjZGVmaW5lIFBPTEFSSVNfREVOU0VfSU9fQkFTRQkJKElERU5UX0FERFIgKyAweGY5ZmMwMDAwMDBVTCkKKyNkZWZpbmUgUE9MQVJJU19ERU5TRV9DT05GSUdfQkFTRQkoSURFTlRfQUREUiArIDB4ZjlmZTAwMDAwMFVMKQorCisjZGVmaW5lIFBPTEFSSVNfSUFDS19TQwkJCVBPTEFSSVNfSUFDS19CQVNFCisKKy8qIFRoZSBQb2xhcmlzIGNvbW1hbmQvc3RhdHVzIHJlZ2lzdGVycyBsaXZlIGluIFBDSSBDb25maWcgc3BhY2UgZm9yCisgKiBidXMgMC9kZXZpY2UgMC4gIEFzIHN1Y2gsIHRoZXkgbWF5IGJlIGJ5dGVzLCB3b3Jkcywgb3IgZG91Ymxld29yZHMuCisgKi8KKyNkZWZpbmUgUE9MQVJJU19XX1ZFTklECQkoUE9MQVJJU19ERU5TRV9DT05GSUdfQkFTRSkKKyNkZWZpbmUgUE9MQVJJU19XX0RFVklECQkoUE9MQVJJU19ERU5TRV9DT05GSUdfQkFTRSsyKQorI2RlZmluZSBQT0xBUklTX1dfQ01ECQkoUE9MQVJJU19ERU5TRV9DT05GSUdfQkFTRSs0KQorI2RlZmluZSBQT0xBUklTX1dfU1RBVFVTCShQT0xBUklTX0RFTlNFX0NPTkZJR19CQVNFKzYpCisKKy8qCisgKiBEYXRhIHN0cnVjdHVyZSBmb3IgaGFuZGxpbmcgUE9MQVJJUyBtYWNoaW5lIGNoZWNrczoKKyAqLworc3RydWN0IGVsX1BPTEFSSVNfc3lzZGF0YV9tY2hlY2sgeworICAgIHVfbG9uZyAgICAgIHBzY19zdGF0dXM7CisgICAgdV9sb25nCXBzY19wY2ljdGwwOworICAgIHVfbG9uZwlwc2NfcGNpY3RsMTsKKyAgICB1X2xvbmcJcHNjX3BjaWN0bDI7Cit9OworCisjaWZkZWYgX19LRVJORUxfXworCisjaWZuZGVmIF9fRVhURVJOX0lOTElORQorI2RlZmluZSBfX0VYVEVSTl9JTkxJTkUgZXh0ZXJuIGlubGluZQorI2RlZmluZSBfX0lPX0VYVEVSTl9JTkxJTkUKKyNlbmRpZgorCisvKgorICogSS9PIGZ1bmN0aW9uczoKKyAqCisgKiBQT0xBUklTLCB0aGUgUENJL21lbW9yeSBzdXBwb3J0IGNoaXBzZXQgZm9yIHRoZSBQQ0E1NiAoMjExNjRQQykKKyAqIHByb2Nlc3NvcnMsIGNhbiB1c2UgZWl0aGVyIGEgc3BhcnNlIGFkZHJlc3MgIG1hcHBpbmcgc2NoZW1lLCBvciB0aGUgCisgKiBzby1jYWxsZWQgYnl0ZS13b3JkIFBDSSBhZGRyZXNzIHNwYWNlLCB0byBnZXQgYXQgUENJIG1lbW9yeSBhbmQgSS9PLgorICoKKyAqIEhvd2V2ZXIsIHdlIHdpbGwgc3VwcG9ydCBvbmx5IHRoZSBCV1ggZm9ybS4KKyAqLworCisvKgorICogTWVtb3J5IGZ1bmN0aW9ucy4gIFBvbGFyaXMgYWxsb3dzIGFsbCBhY2Nlc3NlcyAoYnl0ZS93b3JkCisgKiBhcyB3ZWxsIGFzIGxvbmcvcXVhZCkgdG8gYmUgZG9uZSB0aHJvdWdoIGRlbnNlIHNwYWNlLgorICoKKyAqIFdlIHdpbGwgb25seSBzdXBwb3J0IERFTlNFIGFjY2VzcyB2aWEgQldYIGluc25zLgorICovCisKK19fRVhURVJOX0lOTElORSB2b2lkIF9faW9tZW0gKnBvbGFyaXNfaW9wb3J0bWFwKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gKHZvaWQgX19pb21lbSAqKShhZGRyICsgUE9MQVJJU19ERU5TRV9JT19CQVNFKTsKK30KKworX19FWFRFUk5fSU5MSU5FIHZvaWQgX19pb21lbSAqcG9sYXJpc19pb3JlbWFwKHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCQkJICAgICAgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXJldHVybiAodm9pZCBfX2lvbWVtICopKGFkZHIgKyBQT0xBUklTX0RFTlNFX01FTV9CQVNFKTsKK30KKworX19FWFRFUk5fSU5MSU5FIGludCBwb2xhcmlzX2lzX2lvYWRkcih1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcmV0dXJuIGFkZHIgPj0gUE9MQVJJU19TUEFSU0VfTUVNX0JBU0U7Cit9CisKK19fRVhURVJOX0lOTElORSBpbnQgcG9sYXJpc19pc19tbWlvKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpYWRkciA8IFBPTEFSSVNfU1BBUlNFX0lPX0JBU0U7Cit9CisKKyN1bmRlZiBfX0lPX1BSRUZJWAorI2RlZmluZSBfX0lPX1BSRUZJWAkJcG9sYXJpcworI2RlZmluZSBwb2xhcmlzX3RyaXZpYWxfcndfYncJMQorI2RlZmluZSBwb2xhcmlzX3RyaXZpYWxfcndfbHEJMQorI2RlZmluZSBwb2xhcmlzX3RyaXZpYWxfaW9fYncJMQorI2RlZmluZSBwb2xhcmlzX3RyaXZpYWxfaW9fbHEJMQorI2RlZmluZSBwb2xhcmlzX3RyaXZpYWxfaW91bm1hcAkxCisjaW5jbHVkZSA8YXNtL2lvX3RyaXZpYWwuaD4KKworI2lmZGVmIF9fSU9fRVhURVJOX0lOTElORQorI3VuZGVmIF9fRVhURVJOX0lOTElORQorI3VuZGVmIF9fSU9fRVhURVJOX0lOTElORQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfX0FMUEhBX1BPTEFSSVNfX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvY29yZV90Mi5oIGIvaW5jbHVkZS9hc20tYWxwaGEvY29yZV90Mi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjMWM0MDMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9jb3JlX3QyLmgKQEAgLTAsMCArMSw2MjggQEAKKyNpZm5kZWYgX19BTFBIQV9UMl9fSF9fCisjZGVmaW5lIF9fQUxQSEFfVDJfX0hfXworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGFzbS9jb21waWxlci5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKworLyoKKyAqIFQyIGlzIHRoZSBpbnRlcm5hbCBuYW1lIGZvciB0aGUgY29yZSBsb2dpYyBjaGlwc2V0IHdoaWNoIHByb3ZpZGVzCisgKiBtZW1vcnkgY29udHJvbGxlciBhbmQgUENJIGFjY2VzcyBmb3IgdGhlIFNBQkxFLWJhc2VkIHN5c3RlbXMuCisgKgorICogVGhpcyBmaWxlIGlzIGJhc2VkIG9uOgorICoKKyAqIFNBQkxFIEkvTyBTcGVjaWZpY2F0aW9uCisgKiBSZXZpc2lvbi9VcGRhdGUgSW5mb3JtYXRpb246IDEuMworICoKKyAqIGplc3RhYnJvQGFtdC50YXkxLmRlYy5jb20gSW5pdGlhbCBWZXJzaW9uLgorICoKKyAqLworCisjZGVmaW5lIFQyX01FTV9SMV9NQVNLIDB4MDdmZmZmZmYgIC8qIE1lbSBzcGFyc2UgcmVnaW9uIDEgbWFzayBpcyAyNiBiaXRzICovCisKKy8qIEdBTU1BLVNBQkxFIGlzIGEgU0FCTEUgd2l0aCBFVjUtYmFzZWQgQ1BVcyAqLworLyogQWxsIExZTlggbWFjaGluZXMsIEVWNCBvciBFVjUsIHVzZSB0aGUgR0FNTUEgYmlhcyBhbHNvICovCisjZGVmaW5lIF9HQU1NQV9CSUFTCQkweDgwMDAwMDAwMDBVTAorCisjaWYgZGVmaW5lZChDT05GSUdfQUxQSEFfR0VORVJJQykKKyNkZWZpbmUgR0FNTUFfQklBUwkJYWxwaGFfbXYuc3lzLnQyLmdhbW1hX2JpYXMKKyNlbGlmIGRlZmluZWQoQ09ORklHX0FMUEhBX0dBTU1BKQorI2RlZmluZSBHQU1NQV9CSUFTCQlfR0FNTUFfQklBUworI2Vsc2UKKyNkZWZpbmUgR0FNTUFfQklBUwkJMAorI2VuZGlmCisKKy8qCisgKiBNZW1vcnkgc3BhY2VzOgorICovCisjZGVmaW5lIFQyX0NPTkYJCSAgICAgICAgKElERU5UX0FERFIgKyBHQU1NQV9CSUFTICsgMHgzOTAwMDAwMDBVTCkKKyNkZWZpbmUgVDJfSU8JCQkoSURFTlRfQUREUiArIEdBTU1BX0JJQVMgKyAweDNhMDAwMDAwMFVMKQorI2RlZmluZSBUMl9TUEFSU0VfTUVNCQkoSURFTlRfQUREUiArIEdBTU1BX0JJQVMgKyAweDIwMDAwMDAwMFVMKQorI2RlZmluZSBUMl9ERU5TRV9NRU0JICAgICAgICAoSURFTlRfQUREUiArIEdBTU1BX0JJQVMgKyAweDNjMDAwMDAwMFVMKQorCisjZGVmaW5lIFQyX0lPQ1NSCQkoSURFTlRfQUREUiArIEdBTU1BX0JJQVMgKyAweDM4ZTAwMDAwMFVMKQorI2RlZmluZSBUMl9DRVJSMQkJKElERU5UX0FERFIgKyBHQU1NQV9CSUFTICsgMHgzOGUwMDAwMjBVTCkKKyNkZWZpbmUgVDJfQ0VSUjIJCShJREVOVF9BRERSICsgR0FNTUFfQklBUyArIDB4MzhlMDAwMDQwVUwpCisjZGVmaW5lIFQyX0NFUlIzCQkoSURFTlRfQUREUiArIEdBTU1BX0JJQVMgKyAweDM4ZTAwMDA2MFVMKQorI2RlZmluZSBUMl9QRVJSMQkJKElERU5UX0FERFIgKyBHQU1NQV9CSUFTICsgMHgzOGUwMDAwODBVTCkKKyNkZWZpbmUgVDJfUEVSUjIJCShJREVOVF9BRERSICsgR0FNTUFfQklBUyArIDB4MzhlMDAwMGEwVUwpCisjZGVmaW5lIFQyX1BTQ1IJCQkoSURFTlRfQUREUiArIEdBTU1BX0JJQVMgKyAweDM4ZTAwMDBjMFVMKQorI2RlZmluZSBUMl9IQUVfMQkJKElERU5UX0FERFIgKyBHQU1NQV9CSUFTICsgMHgzOGUwMDAwZTBVTCkKKyNkZWZpbmUgVDJfSEFFXzIJCShJREVOVF9BRERSICsgR0FNTUFfQklBUyArIDB4MzhlMDAwMTAwVUwpCisjZGVmaW5lIFQyX0hCQVNFCQkoSURFTlRfQUREUiArIEdBTU1BX0JJQVMgKyAweDM4ZTAwMDEyMFVMKQorI2RlZmluZSBUMl9XQkFTRTEJCShJREVOVF9BRERSICsgR0FNTUFfQklBUyArIDB4MzhlMDAwMTQwVUwpCisjZGVmaW5lIFQyX1dNQVNLMQkJKElERU5UX0FERFIgKyBHQU1NQV9CSUFTICsgMHgzOGUwMDAxNjBVTCkKKyNkZWZpbmUgVDJfVEJBU0UxCQkoSURFTlRfQUREUiArIEdBTU1BX0JJQVMgKyAweDM4ZTAwMDE4MFVMKQorI2RlZmluZSBUMl9XQkFTRTIJCShJREVOVF9BRERSICsgR0FNTUFfQklBUyArIDB4MzhlMDAwMWEwVUwpCisjZGVmaW5lIFQyX1dNQVNLMgkJKElERU5UX0FERFIgKyBHQU1NQV9CSUFTICsgMHgzOGUwMDAxYzBVTCkKKyNkZWZpbmUgVDJfVEJBU0UyCQkoSURFTlRfQUREUiArIEdBTU1BX0JJQVMgKyAweDM4ZTAwMDFlMFVMKQorI2RlZmluZSBUMl9UTEJCUgkJKElERU5UX0FERFIgKyBHQU1NQV9CSUFTICsgMHgzOGUwMDAyMDBVTCkKKyNkZWZpbmUgVDJfSVZSCQkJKElERU5UX0FERFIgKyBHQU1NQV9CSUFTICsgMHgzOGUwMDAyMjBVTCkKKyNkZWZpbmUgVDJfSEFFXzMJCShJREVOVF9BRERSICsgR0FNTUFfQklBUyArIDB4MzhlMDAwMjQwVUwpCisjZGVmaW5lIFQyX0hBRV80CQkoSURFTlRfQUREUiArIEdBTU1BX0JJQVMgKyAweDM4ZTAwMDI2MFVMKQorCisvKiBUaGUgQ1NScyBiZWxvdyBhcmUgVDMvVDQgb25seSAqLworI2RlZmluZSBUMl9XQkFTRTMJCShJREVOVF9BRERSICsgR0FNTUFfQklBUyArIDB4MzhlMDAwMjgwVUwpCisjZGVmaW5lIFQyX1dNQVNLMwkJKElERU5UX0FERFIgKyBHQU1NQV9CSUFTICsgMHgzOGUwMDAyYTBVTCkKKyNkZWZpbmUgVDJfVEJBU0UzCQkoSURFTlRfQUREUiArIEdBTU1BX0JJQVMgKyAweDM4ZTAwMDJjMFVMKQorCisjZGVmaW5lIFQyX1REUjAJCQkoSURFTlRfQUREUiArIEdBTU1BX0JJQVMgKyAweDM4ZTAwMDMwMFVMKQorI2RlZmluZSBUMl9URFIxCQkJKElERU5UX0FERFIgKyBHQU1NQV9CSUFTICsgMHgzOGUwMDAzMjBVTCkKKyNkZWZpbmUgVDJfVERSMgkJCShJREVOVF9BRERSICsgR0FNTUFfQklBUyArIDB4MzhlMDAwMzQwVUwpCisjZGVmaW5lIFQyX1REUjMJCQkoSURFTlRfQUREUiArIEdBTU1BX0JJQVMgKyAweDM4ZTAwMDM2MFVMKQorI2RlZmluZSBUMl9URFI0CQkJKElERU5UX0FERFIgKyBHQU1NQV9CSUFTICsgMHgzOGUwMDAzODBVTCkKKyNkZWZpbmUgVDJfVERSNQkJCShJREVOVF9BRERSICsgR0FNTUFfQklBUyArIDB4MzhlMDAwM2EwVUwpCisjZGVmaW5lIFQyX1REUjYJCQkoSURFTlRfQUREUiArIEdBTU1BX0JJQVMgKyAweDM4ZTAwMDNjMFVMKQorI2RlZmluZSBUMl9URFI3CQkJKElERU5UX0FERFIgKyBHQU1NQV9CSUFTICsgMHgzOGUwMDAzZTBVTCkKKworI2RlZmluZSBUMl9XQkFTRTQJCShJREVOVF9BRERSICsgR0FNTUFfQklBUyArIDB4MzhlMDAwNDAwVUwpCisjZGVmaW5lIFQyX1dNQVNLNAkJKElERU5UX0FERFIgKyBHQU1NQV9CSUFTICsgMHgzOGUwMDA0MjBVTCkKKyNkZWZpbmUgVDJfVEJBU0U0CQkoSURFTlRfQUREUiArIEdBTU1BX0JJQVMgKyAweDM4ZTAwMDQ0MFVMKQorCisjZGVmaW5lIFQyX0FJUgkJCShJREVOVF9BRERSICsgR0FNTUFfQklBUyArIDB4MzhlMDAwNDYwVUwpCisjZGVmaW5lIFQyX1ZBUgkJCShJREVOVF9BRERSICsgR0FNTUFfQklBUyArIDB4MzhlMDAwNDgwVUwpCisjZGVmaW5lIFQyX0RJUgkJCShJREVOVF9BRERSICsgR0FNTUFfQklBUyArIDB4MzhlMDAwNGEwVUwpCisjZGVmaW5lIFQyX0lDRQkJCShJREVOVF9BRERSICsgR0FNTUFfQklBUyArIDB4MzhlMDAwNGMwVUwpCisKKyNkZWZpbmUgVDJfSEFFX0FERFJFU1MJCVQyX0hBRV8xCisKKy8qICBUMiBDU1JzIGFyZSBpbiB0aGUgbm9uLWNhY2hhYmxlIHByaW1hcnkgSU8gc3BhY2UgZnJvbSAzLjgwMDAuMDAwMCB0bworIDMuOGZmZi5mZmZmCisgKgorICogICstLS0tLS0tLS0tLS0tLSsgMyA4MDAwIDAwMDAKKyAqICB8IENQVSAwIENTUnMgICB8CisgKiAgKy0tLS0tLS0tLS0tLS0tKyAzIDgxMDAgMDAwMAorICogIHwgQ1BVIDEgQ1NScyAgIHwKKyAqICArLS0tLS0tLS0tLS0tLS0rIDMgODIwMCAwMDAwCisgKiAgfCBDUFUgMiBDU1JzICAgfAorICogICstLS0tLS0tLS0tLS0tLSsgMyA4MzAwIDAwMDAKKyAqICB8IENQVSAzIENTUnMgICB8CisgKiAgKy0tLS0tLS0tLS0tLS0tKyAzIDg0MDAgMDAwMAorICogIHwgQ1BVIFJlc2VydmVkIHwKKyAqICArLS0tLS0tLS0tLS0tLS0rIDMgODcwMCAwMDAwCisgKiAgfCBNZW0gUmVzZXJ2ZWQgfAorICogICstLS0tLS0tLS0tLS0tLSsgMyA4ODAwIDAwMDAKKyAqICB8IE1lbSAwIENTUnMgICB8CisgKiAgKy0tLS0tLS0tLS0tLS0tKyAzIDg5MDAgMDAwMAorICogIHwgTWVtIDEgQ1NScyAgIHwKKyAqICArLS0tLS0tLS0tLS0tLS0rIDMgOGEwMCAwMDAwCisgKiAgfCBNZW0gMiBDU1JzICAgfAorICogICstLS0tLS0tLS0tLS0tLSsgMyA4YjAwIDAwMDAKKyAqICB8IE1lbSAzIENTUnMgICB8CisgKiAgKy0tLS0tLS0tLS0tLS0tKyAzIDhjMDAgMDAwMAorICogIHwgTWVtIFJlc2VydmVkIHwKKyAqICArLS0tLS0tLS0tLS0tLS0rIDMgOGUwMCAwMDAwCisgKiAgfCBQQ0kgQnJpZGdlICAgfAorICogICstLS0tLS0tLS0tLS0tLSsgMyA4ZjAwIDAwMDAKKyAqICB8IEV4cGFuc2lvbiBJTyB8CisgKiAgKy0tLS0tLS0tLS0tLS0tKyAzIDkwMDAgMDAwMAorICoKKyAqCisgKi8KKyNkZWZpbmUgVDJfQ1BVMF9CQVNFICAgICAgICAgICAgKElERU5UX0FERFIgKyBHQU1NQV9CSUFTICsgMHgzODAwMDAwMDBMKQorI2RlZmluZSBUMl9DUFUxX0JBU0UgICAgICAgICAgICAoSURFTlRfQUREUiArIEdBTU1BX0JJQVMgKyAweDM4MTAwMDAwMEwpCisjZGVmaW5lIFQyX0NQVTJfQkFTRSAgICAgICAgICAgIChJREVOVF9BRERSICsgR0FNTUFfQklBUyArIDB4MzgyMDAwMDAwTCkKKyNkZWZpbmUgVDJfQ1BVM19CQVNFICAgICAgICAgICAgKElERU5UX0FERFIgKyBHQU1NQV9CSUFTICsgMHgzODMwMDAwMDBMKQorCisjZGVmaW5lIFQyX0NQVW5fQkFTRShuKQkJKFQyX0NQVTBfQkFTRSArICgoKG4pJjMpICogMHgwMDEwMDAwMDBMKSkKKworI2RlZmluZSBUMl9NRU0wX0JBU0UgICAgICAgICAgICAoSURFTlRfQUREUiArIEdBTU1BX0JJQVMgKyAweDM4ODAwMDAwMEwpCisjZGVmaW5lIFQyX01FTTFfQkFTRSAgICAgICAgICAgIChJREVOVF9BRERSICsgR0FNTUFfQklBUyArIDB4Mzg5MDAwMDAwTCkKKyNkZWZpbmUgVDJfTUVNMl9CQVNFICAgICAgICAgICAgKElERU5UX0FERFIgKyBHQU1NQV9CSUFTICsgMHgzOGEwMDAwMDBMKQorI2RlZmluZSBUMl9NRU0zX0JBU0UgICAgICAgICAgICAoSURFTlRfQUREUiArIEdBTU1BX0JJQVMgKyAweDM4YjAwMDAwMEwpCisKKworLyoKKyAqIFNhYmxlIENQVSBNb2R1bGUgQ1NSUworICoKKyAqIFRoZXNlIGFyZSBDU1JzIGZvciBoYXJkd2FyZSBvdGhlciB0aGFuIHRoZSBDUFUgY2hpcCBvbiB0aGUgQ1BVIG1vZHVsZS4KKyAqIFRoZSBDUFUgbW9kdWxlIGhhcyBCYWNrdXAgQ2FjaGUgY29udHJvbCBsb2dpYywgQ2J1cyBjb250cm9sIGxvZ2ljLCBhbmQKKyAqIGludGVycnVwdCBjb250cm9sIGxvZ2ljIG9uIGl0LiAgVGhlcmUgaXMgYSBkdXBsaWNhdGUgdGFnIHN0b3JlIHRvIHNwZWVkCisgKiB1cCBtYWludGFpbmluZyBjYWNoZSBjb2hlcmVuY3kuCisgKi8KKworc3RydWN0IHNhYmxlX2NwdV9jc3IgeworICB1bnNpZ25lZCBsb25nIGJjYzsgICAgIGxvbmcgZmlsbF8wMFszXTsgLyogQmFja3VwIENhY2hlIENvbnRyb2wgKi8KKyAgdW5zaWduZWQgbG9uZyBiY2NlOyAgICBsb25nIGZpbGxfMDFbM107IC8qIEJhY2t1cCBDYWNoZSBDb3JyZWN0YWJsZSBFcnJvciAqLworICB1bnNpZ25lZCBsb25nIGJjY2VhOyAgIGxvbmcgZmlsbF8wMlszXTsgLyogQi1DYWNoZSBDb3JyIEVyciBBZGRyZXNzIExhdGNoICovCisgIHVuc2lnbmVkIGxvbmcgYmN1ZTsgICAgbG9uZyBmaWxsXzAzWzNdOyAvKiBCLUNhY2hlIFVuY29ycmVjdGFibGUgRXJyb3IgKi8KKyAgdW5zaWduZWQgbG9uZyBiY3VlYTsgICBsb25nIGZpbGxfMDRbM107IC8qIEItQ2FjaGUgVW5jb3JyIEVyciBBZGRyIExhdGNoICovCisgIHVuc2lnbmVkIGxvbmcgZHRlcjsgICAgbG9uZyBmaWxsXzA1WzNdOyAvKiBEdXBsaWNhdGUgVGFnIEVycm9yICovCisgIHVuc2lnbmVkIGxvbmcgY2JjdGw7ICAgbG9uZyBmaWxsXzA2WzNdOyAvKiBDQnVzIENvbnRyb2wgKi8KKyAgdW5zaWduZWQgbG9uZyBjYmU7ICAgICBsb25nIGZpbGxfMDdbM107IC8qIENCdXMgRXJyb3IgKi8KKyAgdW5zaWduZWQgbG9uZyBjYmVhbDsgICBsb25nIGZpbGxfMDhbM107IC8qIENCdXMgRXJyb3IgQWRkciBMYXRjaCBsb3cgKi8KKyAgdW5zaWduZWQgbG9uZyBjYmVhaDsgICBsb25nIGZpbGxfMDlbM107IC8qIENCdXMgRXJyb3IgQWRkciBMYXRjaCBoaWdoICovCisgIHVuc2lnbmVkIGxvbmcgcG1ieDsgICAgbG9uZyBmaWxsXzEwWzNdOyAvKiBQcm9jZXNzb3IgTWFpbGJveCAqLworICB1bnNpZ25lZCBsb25nIGlwaXI7ICAgIGxvbmcgZmlsbF8xMVszXTsgLyogSW50ZXItUHJvY2Vzc29yIEludCBSZXF1ZXN0ICovCisgIHVuc2lnbmVkIGxvbmcgc2ljOyAgICAgbG9uZyBmaWxsXzEyWzNdOyAvKiBTeXN0ZW0gSW50ZXJydXB0IENsZWFyICovCisgIHVuc2lnbmVkIGxvbmcgYWRsazsgICAgbG9uZyBmaWxsXzEzWzNdOyAvKiBBZGRyZXNzIExvY2sgKExEeEwvU1R4QykgKi8KKyAgdW5zaWduZWQgbG9uZyBtYWRybDsgICBsb25nIGZpbGxfMTRbM107IC8qIENCdXMgTWlzcyBBZGRyZXNzICovCisgIHVuc2lnbmVkIGxvbmcgcmV2OyAgICAgbG9uZyBmaWxsXzE1WzNdOyAvKiBDTUlDIFJldmlzaW9uICovCit9OworCisvKgorICogRGF0YSBzdHJ1Y3R1cmUgZm9yIGhhbmRsaW5nIFQyIG1hY2hpbmUgY2hlY2tzOgorICovCitzdHJ1Y3QgZWxfdDJfZnJhbWVfaGVhZGVyIHsKKwl1bnNpZ25lZCBpbnQJZWxjZl9maWQ7CS8qIEZyYW1lIElEIChmcm9tIGFib3ZlKSAqLworCXVuc2lnbmVkIGludAllbGNmX3NpemU7CS8qIFNpemUgb2YgZnJhbWUgaW4gYnl0ZXMgKi8KK307CisKK3N0cnVjdCBlbF90Ml9wcm9jZGF0YV9tY2hlY2sgeworCXVuc2lnbmVkIGxvbmcJZWxmbWNfcGFsdGVtcFszMl07CS8qIFBBTCBURU1QIFJFR1MuICovCisJLyogRVY0LXNwZWNpZmljIGZpZWxkcyAqLworCXVuc2lnbmVkIGxvbmcJZWxmbWNfZXhjX2FkZHI7CS8qIEFkZHIgb2YgZXhjZXB0aW5nIGluc24uICovCisJdW5zaWduZWQgbG9uZwllbGZtY19leGNfc3VtOwkvKiBTdW1tYXJ5IG9mIGFyaXRoIHRyYXBzLiAqLworCXVuc2lnbmVkIGxvbmcJZWxmbWNfZXhjX21hc2s7CS8qIEV4Y2VwdGlvbiBtYXNrIChmcm9tIGV4Y19zdW0pLiAqLworCXVuc2lnbmVkIGxvbmcJZWxmbWNfaWNjc3I7CS8qIElCb3ggaGFyZHdhcmUgZW5hYmxlcy4gKi8KKwl1bnNpZ25lZCBsb25nCWVsZm1jX3BhbF9iYXNlOwkvKiBCYXNlIGFkZHJlc3MgZm9yIFBBTGNvZGUuICovCisJdW5zaWduZWQgbG9uZwllbGZtY19oaWVyOwkvKiBIYXJkd2FyZSBJbnRlcnJ1cHQgRW5hYmxlLiAqLworCXVuc2lnbmVkIGxvbmcJZWxmbWNfaGlycjsJLyogSGFyZHdhcmUgSW50ZXJydXB0IFJlcXVlc3QuICovCisJdW5zaWduZWQgbG9uZwllbGZtY19tbV9jc3I7CS8qIEQtc3RyZWFtIGZhdWx0IGluZm8uICovCisJdW5zaWduZWQgbG9uZwllbGZtY19kY19zdGF0OwkvKiBELWNhY2hlIHN0YXR1cyAoRUNDL1Bhcml0eSBFcnIpLiAqLworCXVuc2lnbmVkIGxvbmcJZWxmbWNfZGNfYWRkcjsJLyogRVYzIFBoeXMgQWRkciBmb3IgRUNDL0RQRVJSLiAqLworCXVuc2lnbmVkIGxvbmcJZWxmbWNfYWJveF9jdGw7CS8qIEFCb3ggQ29udHJvbCBSZWdpc3Rlci4gKi8KKwl1bnNpZ25lZCBsb25nCWVsZm1jX2JpdV9zdGF0OwkvKiBCSVUgU3RhdHVzLiAqLworCXVuc2lnbmVkIGxvbmcJZWxmbWNfYml1X2FkZHI7CS8qIEJVSSBBZGRyZXNzLiAqLworCXVuc2lnbmVkIGxvbmcJZWxmbWNfYml1X2N0bDsJLyogQklVIENvbnRyb2wuICovCisJdW5zaWduZWQgbG9uZwllbGZtY19maWxsX3N5bmRyb21lOyAvKiBGb3IgY29ycmVjdGluZyBFQ0MgZXJyb3JzLiAqLworCXVuc2lnbmVkIGxvbmcJZWxmbWNfZmlsbF9hZGRyOy8qIENhY2hlIGJsb2NrIHdoaWNoIHdhcyBiZWluZyByZWFkLiAqLworCXVuc2lnbmVkIGxvbmcJZWxmbWNfdmE7CS8qIEVmZmVjdGl2ZSBWQSBvZiBmYXVsdCBvciBtaXNzLiAqLworCXVuc2lnbmVkIGxvbmcJZWxmbWNfYmNfdGFnOwkvKiBCYWNrdXAgQ2FjaGUgVGFnIFByb2JlIFJlc3VsdHMuICovCit9OworCisvKgorICogU2FibGUgcHJvY2Vzc29yIHNwZWNpZmljIE1hY2hpbmUgQ2hlY2sgRGF0YSBzZWdtZW50LgorICovCisKK3N0cnVjdCBlbF90Ml9sb2dvdXRfaGVhZGVyIHsKKwl1bnNpZ25lZCBpbnQJZWxmbF9zaXplOwkvKiBzaXplIGluIGJ5dGVzIG9mIGxvZ291dCBhcmVhLiAqLworCXVuc2lnbmVkIGludAllbGZsX3NiejE6MzE7CS8qIFNob3VsZCBiZSB6ZXJvLiAqLworCXVuc2lnbmVkIGludAllbGZsX3JldHJ5OjE7CS8qIFJldHJ5IGZsYWcuICovCisJdW5zaWduZWQgaW50CWVsZmxfcHJvY29mZnNldDsgLyogUHJvY2Vzc29yLXNwZWNpZmljIG9mZnNldC4gKi8KKwl1bnNpZ25lZCBpbnQJZWxmbF9zeXNvZmZzZXQ7CSAvKiBPZmZzZXQgb2Ygc3lzdGVtLXNwZWNpZmljLiAqLworCXVuc2lnbmVkIGludAllbGZsX2Vycm9yX3R5cGU7CS8qIFBBTCBlcnJvciB0eXBlIGNvZGUuICovCisJdW5zaWduZWQgaW50CWVsZmxfZnJhbWVfcmV2OwkJLyogUEFMIEZyYW1lIHJldmlzaW9uLiAqLworfTsKK3N0cnVjdCBlbF90Ml9zeXNkYXRhX21jaGVjayB7CisJdW5zaWduZWQgbG9uZyAgICBlbGNtY19iY2M7CSAgICAgIC8qIENTUiAwICovCisJdW5zaWduZWQgbG9uZyAgICBlbGNtY19iY2NlOwkgICAgICAvKiBDU1IgMSAqLworCXVuc2lnbmVkIGxvbmcgICAgZWxjbWNfYmNjZWE7ICAgICAgLyogQ1NSIDIgKi8KKwl1bnNpZ25lZCBsb25nICAgIGVsY21jX2JjdWU7CSAgICAgIC8qIENTUiAzICovCisJdW5zaWduZWQgbG9uZyAgICBlbGNtY19iY3VlYTsgICAgICAvKiBDU1IgNCAqLworCXVuc2lnbmVkIGxvbmcgICAgZWxjbWNfZHRlcjsJICAgICAgLyogQ1NSIDUgKi8KKwl1bnNpZ25lZCBsb25nICAgIGVsY21jX2NiY3RsOyAgICAgIC8qIENTUiA2ICovCisJdW5zaWduZWQgbG9uZyAgICBlbGNtY19jYmU7CSAgICAgIC8qIENTUiA3ICovCisJdW5zaWduZWQgbG9uZyAgICBlbGNtY19jYmVhbDsgICAgICAvKiBDU1IgOCAqLworCXVuc2lnbmVkIGxvbmcgICAgZWxjbWNfY2JlYWg7ICAgICAgLyogQ1NSIDkgKi8KKwl1bnNpZ25lZCBsb25nICAgIGVsY21jX3BtYng7CSAgICAgIC8qIENTUiAxMCAqLworCXVuc2lnbmVkIGxvbmcgICAgZWxjbWNfaXBpcjsJICAgICAgLyogQ1NSIDExICovCisJdW5zaWduZWQgbG9uZyAgICBlbGNtY19zaWM7CSAgICAgIC8qIENTUiAxMiAqLworCXVuc2lnbmVkIGxvbmcgICAgZWxjbWNfYWRsazsJICAgICAgLyogQ1NSIDEzICovCisJdW5zaWduZWQgbG9uZyAgICBlbGNtY19tYWRybDsgICAgICAvKiBDU1IgMTQgKi8KKwl1bnNpZ25lZCBsb25nICAgIGVsY21jX2NycmV2NDsgICAgIC8qIENTUiAxNSAqLworfTsKKworLyoKKyAqIFNhYmxlIG1lbW9yeSBlcnJvciBmcmFtZSAtIHNhYmxlIHBmbXMgc2VjdGlvbiAzLjQyCisgKi8KK3N0cnVjdCBlbF90Ml9kYXRhX21lbW9yeSB7CisJc3RydWN0CWVsX3QyX2ZyYW1lX2hlYWRlciBlbGNtX2hkcjsJLyogSUQkTUVNLUZFUlIgPSAweDA4ICovCisJdW5zaWduZWQgaW50ICBlbGNtX21vZHVsZTsJLyogTW9kdWxlIGlkLiAqLworCXVuc2lnbmVkIGludCAgZWxjbV9yZXMwNDsJLyogUmVzZXJ2ZWQuICovCisJdW5zaWduZWQgbG9uZyBlbGNtX21lcnI7CS8qIENTUjA6IEVycm9yIFJlZyAxLiAqLworCXVuc2lnbmVkIGxvbmcgZWxjbV9tY21kMTsJLyogQ1NSMTogQ29tbWFuZCBUcmFwIDEuICovCisJdW5zaWduZWQgbG9uZyBlbGNtX21jbWQyOwkvKiBDU1IyOiBDb21tYW5kIFRyYXAgMi4gKi8KKwl1bnNpZ25lZCBsb25nIGVsY21fbWNvbmY7CS8qIENTUjM6IENvbmZpZ3VyYXRpb24uICovCisJdW5zaWduZWQgbG9uZyBlbGNtX21lZGMxOwkvKiBDU1I0OiBFREMgU3RhdHVzIDEuICovCisJdW5zaWduZWQgbG9uZyBlbGNtX21lZGMyOwkvKiBDU1I1OiBFREMgU3RhdHVzIDIuICovCisJdW5zaWduZWQgbG9uZyBlbGNtX21lZGNjOwkvKiBDU1I2OiBFREMgQ29udHJvbC4gKi8KKwl1bnNpZ25lZCBsb25nIGVsY21fbXNjdGw7CS8qIENTUjc6IFN0cmVhbSBCdWZmZXIgQ29udHJvbC4gKi8KKwl1bnNpZ25lZCBsb25nIGVsY21fbXJlZjsJLyogQ1NSODogUmVmcmVzaCBDb250cm9sLiAqLworCXVuc2lnbmVkIGxvbmcgZWxjbV9maWx0ZXI7CS8qIENTUjk6IENSRCBGaWx0ZXIgQ29udHJvbC4gKi8KK307CisKKworLyoKKyAqIFNhYmxlIG90aGVyIENQVSBlcnJvciBmcmFtZSAtIHNhYmxlIHBmbXMgc2VjdGlvbiAzLjQzCisgKi8KK3N0cnVjdCBlbF90Ml9kYXRhX290aGVyX2NwdSB7CisJc2hvcnQJICAgICAgZWxjb19jcHVpZDsJLyogQ1BVIElEICovCisJc2hvcnQJICAgICAgZWxjb19yZXMwMlszXTsKKwl1bnNpZ25lZCBsb25nIGVsY29fYmNjOwkvKiBDU1IgMCAqLworCXVuc2lnbmVkIGxvbmcgZWxjb19iY2NlOwkvKiBDU1IgMSAqLworCXVuc2lnbmVkIGxvbmcgZWxjb19iY2NlYTsJLyogQ1NSIDIgKi8KKwl1bnNpZ25lZCBsb25nIGVsY29fYmN1ZTsJLyogQ1NSIDMgKi8KKwl1bnNpZ25lZCBsb25nIGVsY29fYmN1ZWE7CS8qIENTUiA0ICovCisJdW5zaWduZWQgbG9uZyBlbGNvX2R0ZXI7CS8qIENTUiA1ICovCisJdW5zaWduZWQgbG9uZyBlbGNvX2NiY3RsOwkvKiBDU1IgNiAqLworCXVuc2lnbmVkIGxvbmcgZWxjb19jYmU7CS8qIENTUiA3ICovCisJdW5zaWduZWQgbG9uZyBlbGNvX2NiZWFsOwkvKiBDU1IgOCAqLworCXVuc2lnbmVkIGxvbmcgZWxjb19jYmVhaDsJLyogQ1NSIDkgKi8KKwl1bnNpZ25lZCBsb25nIGVsY29fcG1ieDsJLyogQ1NSIDEwICovCisJdW5zaWduZWQgbG9uZyBlbGNvX2lwaXI7CS8qIENTUiAxMSAqLworCXVuc2lnbmVkIGxvbmcgZWxjb19zaWM7CS8qIENTUiAxMiAqLworCXVuc2lnbmVkIGxvbmcgZWxjb19hZGxrOwkvKiBDU1IgMTMgKi8KKwl1bnNpZ25lZCBsb25nIGVsY29fbWFkcmw7CS8qIENTUiAxNCAqLworCXVuc2lnbmVkIGxvbmcgZWxjb19jcnJldjQ7CS8qIENTUiAxNSAqLworfTsKKworLyoKKyAqIFNhYmxlIG90aGVyIENQVSBlcnJvciBmcmFtZSAtIHNhYmxlIHBmbXMgc2VjdGlvbiAzLjQ0CisgKi8KK3N0cnVjdCBlbF90Ml9kYXRhX3QyeworCXN0cnVjdCBlbF90Ml9mcmFtZV9oZWFkZXIgZWxjdF9oZHI7CS8qIElEJFQyLUZSQU1FICovCisJdW5zaWduZWQgbG9uZyBlbGN0X2lvY3NyOwkvKiBJTyBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgKi8KKwl1bnNpZ25lZCBsb25nIGVsY3RfY2VycjE7CS8qIENidXMgRXJyb3IgUmVnaXN0ZXIgMSAqLworCXVuc2lnbmVkIGxvbmcgZWxjdF9jZXJyMjsJLyogQ2J1cyBFcnJvciBSZWdpc3RlciAyICovCisJdW5zaWduZWQgbG9uZyBlbGN0X2NlcnIzOwkvKiBDYnVzIEVycm9yIFJlZ2lzdGVyIDMgKi8KKwl1bnNpZ25lZCBsb25nIGVsY3RfcGVycjE7CS8qIFBDSSBFcnJvciBSZWdpc3RlciAxICovCisJdW5zaWduZWQgbG9uZyBlbGN0X3BlcnIyOwkvKiBQQ0kgRXJyb3IgUmVnaXN0ZXIgMiAqLworCXVuc2lnbmVkIGxvbmcgZWxjdF9oYWUwXzE7CS8qIEhpZ2ggQWRkcmVzcyBFeHRlbnNpb24gUmVnaXN0ZXIgMSAqLworCXVuc2lnbmVkIGxvbmcgZWxjdF9oYWUwXzI7CS8qIEhpZ2ggQWRkcmVzcyBFeHRlbnNpb24gUmVnaXN0ZXIgMiAqLworCXVuc2lnbmVkIGxvbmcgZWxjdF9oYmFzZTsJLyogSGlnaCBCYXNlIFJlZ2lzdGVyICovCisJdW5zaWduZWQgbG9uZyBlbGN0X3diYXNlMTsJLyogV2luZG93IEJhc2UgUmVnaXN0ZXIgMSAqLworCXVuc2lnbmVkIGxvbmcgZWxjdF93bWFzazE7CS8qIFdpbmRvdyBNYXNrIFJlZ2lzdGVyIDEgKi8KKwl1bnNpZ25lZCBsb25nIGVsY3RfdGJhc2UxOwkvKiBUcmFuc2xhdGVkIEJhc2UgUmVnaXN0ZXIgMSAqLworCXVuc2lnbmVkIGxvbmcgZWxjdF93YmFzZTI7CS8qIFdpbmRvdyBCYXNlIFJlZ2lzdGVyIDIgKi8KKwl1bnNpZ25lZCBsb25nIGVsY3Rfd21hc2syOwkvKiBXaW5kb3cgTWFzayBSZWdpc3RlciAyICovCisJdW5zaWduZWQgbG9uZyBlbGN0X3RiYXNlMjsJLyogVHJhbnNsYXRlZCBCYXNlIFJlZ2lzdGVyIDIgKi8KKwl1bnNpZ25lZCBsb25nIGVsY3RfdGRyMDsJLyogVExCIERhdGEgUmVnaXN0ZXIgMCAqLworCXVuc2lnbmVkIGxvbmcgZWxjdF90ZHIxOwkvKiBUTEIgRGF0YSBSZWdpc3RlciAxICovCisJdW5zaWduZWQgbG9uZyBlbGN0X3RkcjI7CS8qIFRMQiBEYXRhIFJlZ2lzdGVyIDIgKi8KKwl1bnNpZ25lZCBsb25nIGVsY3RfdGRyMzsJLyogVExCIERhdGEgUmVnaXN0ZXIgMyAqLworCXVuc2lnbmVkIGxvbmcgZWxjdF90ZHI0OwkvKiBUTEIgRGF0YSBSZWdpc3RlciA0ICovCisJdW5zaWduZWQgbG9uZyBlbGN0X3RkcjU7CS8qIFRMQiBEYXRhIFJlZ2lzdGVyIDUgKi8KKwl1bnNpZ25lZCBsb25nIGVsY3RfdGRyNjsJLyogVExCIERhdGEgUmVnaXN0ZXIgNiAqLworCXVuc2lnbmVkIGxvbmcgZWxjdF90ZHI3OwkvKiBUTEIgRGF0YSBSZWdpc3RlciA3ICovCit9OworCisvKgorICogU2FibGUgZXJyb3IgbG9nIGRhdGEgc3RydWN0dXJlIC0gc2FibGUgcGZtcyBzZWN0aW9uIDMuNDAKKyAqLworc3RydWN0IGVsX3QyX2RhdGFfY29ycmVjdGVkIHsKKwl1bnNpZ25lZCBsb25nIGVsY3BiX2JpdV9zdGF0OworCXVuc2lnbmVkIGxvbmcgZWxjcGJfYml1X2FkZHI7CisJdW5zaWduZWQgbG9uZyBlbGNwYl9iaXVfY3RsOworCXVuc2lnbmVkIGxvbmcgZWxjcGJfZmlsbF9zeW5kcm9tZTsKKwl1bnNpZ25lZCBsb25nIGVsY3BiX2ZpbGxfYWRkcjsKKwl1bnNpZ25lZCBsb25nIGVsY3BiX2JjX3RhZzsKK307CisKKy8qCisgKiBTYWJsZSBlcnJvciBsb2cgZGF0YSBzdHJ1Y3R1cmUKKyAqIE5vdGUgdGhlcmUgYXJlIDQgbWVtb3J5IHNsb3RzIG9uIHNhYmxlIChzZWUgdDIuaCkKKyAqLworc3RydWN0IGVsX3QyX2ZyYW1lX21jaGVjayB7CisJc3RydWN0IGVsX3QyX2ZyYW1lX2hlYWRlciBlbGZtY19oZWFkZXI7CS8qIElEJFAtRlJBTUVfTUNIRUNLICovCisJc3RydWN0IGVsX3QyX2xvZ291dF9oZWFkZXIgZWxmbWNfaGRyOworCXN0cnVjdCBlbF90Ml9wcm9jZGF0YV9tY2hlY2sgZWxmbWNfcHJvY2RhdGE7CisJc3RydWN0IGVsX3QyX3N5c2RhdGFfbWNoZWNrIGVsZm1jX3N5c2RhdGE7CisJc3RydWN0IGVsX3QyX2RhdGFfdDIgZWxmbWNfdDJkYXRhOworCXN0cnVjdCBlbF90Ml9kYXRhX21lbW9yeSBlbGZtY19tZW1kYXRhWzRdOworCXN0cnVjdCBlbF90Ml9mcmFtZV9oZWFkZXIgZWxmbWNfZm9vdGVyOwkvKiBlbXB0eSAqLworfTsKKworCisvKgorICogU2FibGUgZXJyb3IgbG9nIGRhdGEgc3RydWN0dXJlcyBvbiBtZW1vcnkgZXJyb3JzCisgKi8KK3N0cnVjdCBlbF90Ml9mcmFtZV9jb3JyZWN0ZWQgeworCXN0cnVjdCBlbF90Ml9mcmFtZV9oZWFkZXIgZWxmY2NfaGVhZGVyOwkvKiBJRCRQLUJDLUNPUiAqLworCXN0cnVjdCBlbF90Ml9sb2dvdXRfaGVhZGVyIGVsZmNjX2hkcjsKKwlzdHJ1Y3QgZWxfdDJfZGF0YV9jb3JyZWN0ZWQgZWxmY2NfcHJvY2RhdGE7CisvKglzdHJ1Y3QgZWxfdDJfZGF0YV90MiBlbGZjY190MmRhdGE7CQkqLworLyoJc3RydWN0IGVsX3QyX2RhdGFfbWVtb3J5IGVsZmNjX21lbWRhdGFbNF07CSovCisJc3RydWN0IGVsX3QyX2ZyYW1lX2hlYWRlciBlbGZjY19mb290ZXI7CS8qIGVtcHR5ICovCit9OworCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpZm5kZWYgX19FWFRFUk5fSU5MSU5FCisjZGVmaW5lIF9fRVhURVJOX0lOTElORSBleHRlcm4gaW5saW5lCisjZGVmaW5lIF9fSU9fRVhURVJOX0lOTElORQorI2VuZGlmCisKKy8qCisgKiBJL08gZnVuY3Rpb25zOgorICoKKyAqIFQyICh0aGUgY29yZSBsb2dpYyBQQ0kvbWVtb3J5IHN1cHBvcnQgY2hpcHNldCBmb3IgdGhlIFNBQkxFCisgKiBzZXJpZXMgb2YgcHJvY2Vzc29ycyB1c2VzIGEgc3BhcnNlIGFkZHJlc3MgbWFwcGluZyBzY2hlbWUgdG8KKyAqIGdldCBhdCBQQ0kgbWVtb3J5IGFuZCBJL08uCisgKi8KKworI2RlZmluZSB2aXAJdm9sYXRpbGUgaW50ICoKKyNkZWZpbmUgdnVpcAl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKgorCitzdGF0aWMgaW5saW5lIHU4IHQyX2luYih1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJbG9uZyByZXN1bHQgPSAqKHZpcCkgKChhZGRyIDw8IDUpICsgVDJfSU8gKyAweDAwKTsKKwlyZXR1cm4gX19rZXJuZWxfZXh0YmwocmVzdWx0LCBhZGRyICYgMyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0Ml9vdXRiKHU4IGIsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIHc7CisKKwl3ID0gX19rZXJuZWxfaW5zYmwoYiwgYWRkciAmIDMpOworCSoodnVpcCkgKChhZGRyIDw8IDUpICsgVDJfSU8gKyAweDAwKSA9IHc7CisJbWIoKTsKK30KKworc3RhdGljIGlubGluZSB1MTYgdDJfaW53KHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlsb25nIHJlc3VsdCA9ICoodmlwKSAoKGFkZHIgPDwgNSkgKyBUMl9JTyArIDB4MDgpOworCXJldHVybiBfX2tlcm5lbF9leHR3bChyZXN1bHQsIGFkZHIgJiAzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHQyX291dHcodTE2IGIsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIHc7CisKKwl3ID0gX19rZXJuZWxfaW5zd2woYiwgYWRkciAmIDMpOworCSoodnVpcCkgKChhZGRyIDw8IDUpICsgVDJfSU8gKyAweDA4KSA9IHc7CisJbWIoKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgdDJfaW5sKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gKih2dWlwKSAoKGFkZHIgPDwgNSkgKyBUMl9JTyArIDB4MTgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdDJfb3V0bCh1MzIgYiwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCSoodnVpcCkgKChhZGRyIDw8IDUpICsgVDJfSU8gKyAweDE4KSA9IGI7CisJbWIoKTsKK30KKworCisvKgorICogTWVtb3J5IGZ1bmN0aW9ucy4KKyAqCisgKiBGb3IgcmVhZGluZyBhbmQgd3JpdGluZyA4IGFuZCAxNiBiaXQgcXVhbnRpdGllcyB3ZSBuZWVkIHRvCisgKiBnbyB0aHJvdWdoIG9uZSBvZiB0aGUgdGhyZWUgc3BhcnNlIGFkZHJlc3MgbWFwcGluZyByZWdpb25zCisgKiBhbmQgdXNlIHRoZSBIQUVfTUVNIENTUiB0byBwcm92aWRlIHNvbWUgYml0cyBvZiB0aGUgYWRkcmVzcy4KKyAqIFRoZSBmb2xsb3dpbmcgZmV3IHJvdXRpbmVzIHVzZSBvbmx5IHNwYXJzZSBhZGRyZXNzIHJlZ2lvbiAxCisgKiB3aGljaCBnaXZlcyAxR2J5dGUgb2YgYWNjZXNzaWJsZSBzcGFjZSB3aGljaCByZWxhdGVzIGV4YWN0bHkKKyAqIHRvIHRoZSBhbW91bnQgb2YgUENJIG1lbW9yeSBtYXBwaW5nICppbnRvKiBzeXN0ZW0gYWRkcmVzcyBzcGFjZS4KKyAqIFNlZSBwIDYtMTcgb2YgdGhlIHNwZWNpZmljYXRpb24gYnV0IGl0IGxvb2tzIHNvbWV0aGluZyBsaWtlIHRoaXM6CisgKgorICogMjExNjQgQWRkcmVzczoKKyAqCisgKiAgICAgICAgICAzICAgICAgICAgMiAgICAgICAgIDEKKyAqIDk4NzY1NDMyMTA5ODc2NTQzMjEwOTg3NjU0MzIxMDk4NzY1NDMyMTAKKyAqIDFaWlpaMC5QQ0kuUVcuQWRkcmVzcy4uLi4uLi4uLi4uLkJCTEwKKyAqCisgKiBaWiA9IFNCWgorICogQkIgPSBCeXRlIG9mZnNldAorICogTEwgPSBUcmFuc2ZlciBsZW5ndGgKKyAqCisgKiBQQ0kgQWRkcmVzczoKKyAqCisgKiAzICAgICAgICAgMiAgICAgICAgIDEKKyAqIDEwOTg3NjU0MzIxMDk4NzY1NDMyMTA5ODc2NTQzMjEwCisgKiBISEguLi4uUENJLlFXLkFkZHJlc3MuLi4uLi4uLiAwMAorICoKKyAqIEhISCA9IDMxOjI5IEhBRV9NRU0gQ1NSCisgKgorICovCisKKyNkZWZpbmUgdDJfc2V0X2hhZSB7IFwKKwltc2IgPSBhZGRyICA+PiAyNzsgXAorCWFkZHIgJj0gVDJfTUVNX1IxX01BU0s7IFwKKwlzZXRfaGFlKG1zYik7IFwKK30KKworc3RhdGljIHNwaW5sb2NrX3QgdDJfaGFlX2xvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7CisKK19fRVhURVJOX0lOTElORSB1OCB0Ml9yZWFkYihjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKnhhZGRyKQoreworCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKSB4YWRkcjsKKwl1bnNpZ25lZCBsb25nIHJlc3VsdCwgbXNiOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnQyX2hhZV9sb2NrLCBmbGFncyk7CisKKwl0Ml9zZXRfaGFlOworCisJcmVzdWx0ID0gKih2aXApICgoYWRkciA8PCA1KSArIFQyX1NQQVJTRV9NRU0gKyAweDAwKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0Ml9oYWVfbG9jaywgZmxhZ3MpOworCXJldHVybiBfX2tlcm5lbF9leHRibChyZXN1bHQsIGFkZHIgJiAzKTsKK30KKworX19FWFRFUk5fSU5MSU5FIHUxNiB0Ml9yZWFkdyhjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKnhhZGRyKQoreworCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKSB4YWRkcjsKKwl1bnNpZ25lZCBsb25nIHJlc3VsdCwgbXNiOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnQyX2hhZV9sb2NrLCBmbGFncyk7CisKKwl0Ml9zZXRfaGFlOworCisJcmVzdWx0ID0gKih2dWlwKSAoKGFkZHIgPDwgNSkgKyBUMl9TUEFSU0VfTUVNICsgMHgwOCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdDJfaGFlX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gX19rZXJuZWxfZXh0d2wocmVzdWx0LCBhZGRyICYgMyk7Cit9CisKKy8qCisgKiBPbiBTQUJMRSB3aXRoIFQyLCB3ZSBtdXN0IHVzZSBTUEFSU0UgbWVtb3J5IGV2ZW4gZm9yIDMyLWJpdCBhY2Nlc3MsCisgKiBiZWNhdXNlIHdlIGNhbm5vdCBhY2Nlc3MgYWxsIG9mIERFTlNFIHdpdGhvdXQgY2hhbmdpbmcgaXRzIEhBRS4KKyAqLworX19FWFRFUk5fSU5MSU5FIHUzMiB0Ml9yZWFkbChjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKnhhZGRyKQoreworCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKSB4YWRkcjsKKwl1bnNpZ25lZCBsb25nIHJlc3VsdCwgbXNiOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnQyX2hhZV9sb2NrLCBmbGFncyk7CisKKwl0Ml9zZXRfaGFlOworCisJcmVzdWx0ID0gKih2dWlwKSAoKGFkZHIgPDwgNSkgKyBUMl9TUEFSU0VfTUVNICsgMHgxOCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdDJfaGFlX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmVzdWx0ICYgMHhmZmZmZmZmZlVMOworfQorCitfX0VYVEVSTl9JTkxJTkUgdTY0IHQyX3JlYWRxKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqeGFkZHIpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpIHhhZGRyOworCXVuc2lnbmVkIGxvbmcgcjAsIHIxLCB3b3JrLCBtc2I7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdDJfaGFlX2xvY2ssIGZsYWdzKTsKKworCXQyX3NldF9oYWU7CisKKwl3b3JrID0gKGFkZHIgPDwgNSkgKyBUMl9TUEFSU0VfTUVNICsgMHgxODsKKwlyMCA9ICoodnVpcCkod29yayk7CisJcjEgPSAqKHZ1aXApKHdvcmsgKyAoNCA8PCA1KSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdDJfaGFlX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcjEgPDwgMzIgfCByMDsKK30KKworX19FWFRFUk5fSU5MSU5FIHZvaWQgdDJfd3JpdGViKHU4IGIsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqeGFkZHIpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpIHhhZGRyOworCXVuc2lnbmVkIGxvbmcgbXNiLCB3OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnQyX2hhZV9sb2NrLCBmbGFncyk7CisKKwl0Ml9zZXRfaGFlOworCisJdyA9IF9fa2VybmVsX2luc2JsKGIsIGFkZHIgJiAzKTsKKwkqKHZ1aXApICgoYWRkciA8PCA1KSArIFQyX1NQQVJTRV9NRU0gKyAweDAwKSA9IHc7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdDJfaGFlX2xvY2ssIGZsYWdzKTsKK30KKworX19FWFRFUk5fSU5MSU5FIHZvaWQgdDJfd3JpdGV3KHUxNiBiLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKnhhZGRyKQoreworCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKSB4YWRkcjsKKwl1bnNpZ25lZCBsb25nIG1zYiwgdzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXNwaW5fbG9ja19pcnFzYXZlKCZ0Ml9oYWVfbG9jaywgZmxhZ3MpOworCisJdDJfc2V0X2hhZTsKKworCXcgPSBfX2tlcm5lbF9pbnN3bChiLCBhZGRyICYgMyk7CisJKih2dWlwKSAoKGFkZHIgPDwgNSkgKyBUMl9TUEFSU0VfTUVNICsgMHgwOCkgPSB3OworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnQyX2hhZV9sb2NrLCBmbGFncyk7Cit9CisKKy8qCisgKiBPbiBTQUJMRSB3aXRoIFQyLCB3ZSBtdXN0IHVzZSBTUEFSU0UgbWVtb3J5IGV2ZW4gZm9yIDMyLWJpdCBhY2Nlc3MsCisgKiBiZWNhdXNlIHdlIGNhbm5vdCBhY2Nlc3MgYWxsIG9mIERFTlNFIHdpdGhvdXQgY2hhbmdpbmcgaXRzIEhBRS4KKyAqLworX19FWFRFUk5fSU5MSU5FIHZvaWQgdDJfd3JpdGVsKHUzMiBiLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKnhhZGRyKQoreworCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKSB4YWRkcjsKKwl1bnNpZ25lZCBsb25nIG1zYjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXNwaW5fbG9ja19pcnFzYXZlKCZ0Ml9oYWVfbG9jaywgZmxhZ3MpOworCisJdDJfc2V0X2hhZTsKKworCSoodnVpcCkgKChhZGRyIDw8IDUpICsgVDJfU1BBUlNFX01FTSArIDB4MTgpID0gYjsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0Ml9oYWVfbG9jaywgZmxhZ3MpOworfQorCitfX0VYVEVSTl9JTkxJTkUgdm9pZCB0Ml93cml0ZXEodTY0IGIsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqeGFkZHIpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpIHhhZGRyOworCXVuc2lnbmVkIGxvbmcgbXNiLCB3b3JrOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnQyX2hhZV9sb2NrLCBmbGFncyk7CisKKwl0Ml9zZXRfaGFlOworCisJd29yayA9IChhZGRyIDw8IDUpICsgVDJfU1BBUlNFX01FTSArIDB4MTg7CisJKih2dWlwKXdvcmsgPSBiOworCSoodnVpcCkod29yayArICg0IDw8IDUpKSA9IGIgPj4gMzI7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdDJfaGFlX2xvY2ssIGZsYWdzKTsKK30KKworX19FWFRFUk5fSU5MSU5FIHZvaWQgX19pb21lbSAqdDJfaW9wb3J0bWFwKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gKHZvaWQgX19pb21lbSAqKShhZGRyICsgVDJfSU8pOworfQorCitfX0VYVEVSTl9JTkxJTkUgdm9pZCBfX2lvbWVtICp0Ml9pb3JlbWFwKHVuc2lnbmVkIGxvbmcgYWRkciwgCisJCQkJCSB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJcmV0dXJuICh2b2lkIF9faW9tZW0gKikoYWRkciArIFQyX0RFTlNFX01FTSk7Cit9CisKK19fRVhURVJOX0lOTElORSBpbnQgdDJfaXNfaW9hZGRyKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gKGxvbmcpYWRkciA+PSAwOworfQorCitfX0VYVEVSTl9JTkxJTkUgaW50IHQyX2lzX21taW8oY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCXJldHVybiAodW5zaWduZWQgbG9uZylhZGRyID49IFQyX0RFTlNFX01FTTsKK30KKworLyogTmV3LXN0eWxlIGlvcmVhZCBpbnRlcmZhY2UuICBUaGUgbW1pbyByb3V0aW5lcyBhcmUgc28gdWdseSBmb3IgVDIgdGhhdAorICAgaXQgZG9lc24ndCBtYWtlIHNlbnNlIHRvIG1lcmdlIHRoZSBwaW8gYW5kIG1taW8gcm91dGluZXMuICAqLworCisjZGVmaW5lIElPUE9SVChPUywgTlMpCQkJCQkJCVwKK19fRVhURVJOX0lOTElORSB1bnNpZ25lZCBpbnQgdDJfaW9yZWFkIyNOUyh2b2lkIF9faW9tZW0gKnhhZGRyKQkJXAorewkJCQkJCQkJCVwKKwlpZiAodDJfaXNfbW1pbyh4YWRkcikpCQkJCQkJXAorCQlyZXR1cm4gdDJfcmVhZCMjT1MoeGFkZHIgLSBUMl9ERU5TRV9NRU0pOwkJXAorCWVsc2UJCQkJCQkJCVwKKwkJcmV0dXJuIHQyX2luIyNPUygodW5zaWduZWQgbG9uZyl4YWRkciAtIFQyX0lPKTsJCVwKK30JCQkJCQkJCQlcCitfX0VYVEVSTl9JTkxJTkUgdm9pZCB0Ml9pb3dyaXRlIyNOUyh1IyNOUyBiLCB2b2lkIF9faW9tZW0gKnhhZGRyKQlcCit7CQkJCQkJCQkJXAorCWlmICh0Ml9pc19tbWlvKHhhZGRyKSkJCQkJCQlcCisJCXQyX3dyaXRlIyNPUyhiLCB4YWRkciAtIFQyX0RFTlNFX01FTSk7CQkJXAorCWVsc2UJCQkJCQkJCVwKKwkJdDJfb3V0IyNPUyhiLCAodW5zaWduZWQgbG9uZyl4YWRkciAtIFQyX0lPKTsJCVwKK30KKworSU9QT1JUKGIsIDgpCitJT1BPUlQodywgMTYpCitJT1BPUlQobCwgMzIpCisKKyN1bmRlZiBJT1BPUlQKKworI3VuZGVmIHZpcAorI3VuZGVmIHZ1aXAKKworI3VuZGVmIF9fSU9fUFJFRklYCisjZGVmaW5lIF9fSU9fUFJFRklYCQl0MgorI2RlZmluZSB0Ml90cml2aWFsX3J3X2J3CTAKKyNkZWZpbmUgdDJfdHJpdmlhbF9yd19scQkwCisjZGVmaW5lIHQyX3RyaXZpYWxfaW9fYncJMAorI2RlZmluZSB0Ml90cml2aWFsX2lvX2xxCTAKKyNkZWZpbmUgdDJfdHJpdmlhbF9pb3VubWFwCTEKKyNpbmNsdWRlIDxhc20vaW9fdHJpdmlhbC5oPgorCisjaWZkZWYgX19JT19FWFRFUk5fSU5MSU5FCisjdW5kZWYgX19FWFRFUk5fSU5MSU5FCisjdW5kZWYgX19JT19FWFRFUk5fSU5MSU5FCisjZW5kaWYKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9fQUxQSEFfVDJfX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvY29yZV90aXRhbi5oIGIvaW5jbHVkZS9hc20tYWxwaGEvY29yZV90aXRhbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2NGNjYmYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9jb3JlX3RpdGFuLmgKQEAgLTAsMCArMSw0MTUgQEAKKyNpZm5kZWYgX19BTFBIQV9USVRBTl9fSF9fCisjZGVmaW5lIF9fQUxQSEFfVElUQU5fX0hfXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxhc20vY29tcGlsZXIuaD4KKworLyoKKyAqIFRJVEFOIGlzIHRoZSBpbnRlcm5hbCBuYW1lcyBmb3IgYSBjb3JlIGxvZ2ljIGNoaXBzZXQgd2hpY2ggcHJvdmlkZXMKKyAqIG1lbW9yeSBjb250cm9sbGVyIGFuZCBQQ0kvQUdQIGFjY2VzcyBmb3IgMjEyNjQgYmFzZWQgc3lzdGVtcy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgYmFzZWQgb246CisgKgorICogVGl0YW4gQ2hpcHNldCBFbmdpbmVlcmluZyBTcGVjaWZpY2F0aW9uCisgKiBSZXZpc2lvbiAwLjEyCisgKiAxMyBKdWx5IDE5OTkKKyAqCisgKi8KKworLyogWFhYOiBEbyB3ZSBuZWVkIHRvIGNvbmRpdGlvbmFsaXplIG9uIHRoaXM/ICAqLworI2lmZGVmIFVTRV80OF9CSVRfS1NFRworI2RlZmluZSBUSV9CSUFTIDB4ODAwMDAwMDAwMDBVTAorI2Vsc2UKKyNkZWZpbmUgVElfQklBUyAweDEwMDAwMDAwMDAwVUwKKyNlbmRpZgorCisvKgorICogQ0NoaXAsIERDaGlwLCBhbmQgUENoaXAgcmVnaXN0ZXJzCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgY3NyIF9fYXR0cmlidXRlX18oKGFsaWduZWQoNjQpKSk7Cit9IHRpdGFuXzY0OworCit0eXBlZGVmIHN0cnVjdCB7CisJdGl0YW5fNjQJY3NjOworCXRpdGFuXzY0CW10cjsKKwl0aXRhbl82NAltaXNjOworCXRpdGFuXzY0CW1wZDsKKwl0aXRhbl82NAlhYXIwOworCXRpdGFuXzY0CWFhcjE7CisJdGl0YW5fNjQJYWFyMjsKKwl0aXRhbl82NAlhYXIzOworCXRpdGFuXzY0CWRpbTA7CisJdGl0YW5fNjQJZGltMTsKKwl0aXRhbl82NAlkaXIwOworCXRpdGFuXzY0CWRpcjE7CisJdGl0YW5fNjQJZHJpcjsKKwl0aXRhbl82NAlwcmJlbjsKKwl0aXRhbl82NAlpaWMwOworCXRpdGFuXzY0CWlpYzE7CisJdGl0YW5fNjQJbXByMDsKKwl0aXRhbl82NAltcHIxOworCXRpdGFuXzY0CW1wcjI7CisJdGl0YW5fNjQJbXByMzsKKwl0aXRhbl82NAlyc3ZkWzJdOworCXRpdGFuXzY0CXR0cjsKKwl0aXRhbl82NAl0ZHI7CisJdGl0YW5fNjQJZGltMjsKKwl0aXRhbl82NAlkaW0zOworCXRpdGFuXzY0CWRpcjI7CisJdGl0YW5fNjQJZGlyMzsKKwl0aXRhbl82NAlpaWMyOworCXRpdGFuXzY0CWlpYzM7CisJdGl0YW5fNjQJcHdyOworCXRpdGFuXzY0CXJlc2VydmVkWzE3XTsKKwl0aXRhbl82NAljbW9uY3RsYTsKKwl0aXRhbl82NAljbW9uY3RsYjsKKwl0aXRhbl82NAljbW9uY250MDE7CisJdGl0YW5fNjQJY21vbmNudDIzOworCXRpdGFuXzY0CWNwZW47Cit9IHRpdGFuX2NjaGlwOworCit0eXBlZGVmIHN0cnVjdCB7CisJdGl0YW5fNjQJZHNjOworCXRpdGFuXzY0CXN0cjsKKwl0aXRhbl82NAlkcmV2OworCXRpdGFuXzY0CWRzYzI7Cit9IHRpdGFuX2RjaGlwOworCit0eXBlZGVmIHN0cnVjdCB7CisJdGl0YW5fNjQJd3NiYVs0XTsKKwl0aXRhbl82NAl3c21bNF07CisJdGl0YW5fNjQJdGJhWzRdOworCXRpdGFuXzY0CXBjdGw7CisJdGl0YW5fNjQJcGxhdDsKKwl0aXRhbl82NAlyZXNlcnZlZDBbMl07CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJdGl0YW5fNjQJc2Vycm9yOworCQkJdGl0YW5fNjQJc2VycmVuOworCQkJdGl0YW5fNjQJc2VycnNldDsKKwkJCXRpdGFuXzY0CXJlc2VydmVkMDsKKwkJCXRpdGFuXzY0CWdwZXJyb3I7CisJCQl0aXRhbl82NAlncGVycmVuOworCQkJdGl0YW5fNjQJZ3BlcnJzZXQ7CisJCQl0aXRhbl82NAlyZXNlcnZlZDE7CisJCQl0aXRhbl82NAlndGxiaXY7CisJCQl0aXRhbl82NAlndGxiaWE7CisJCQl0aXRhbl82NAlyZXNlcnZlZDJbMl07CisJCQl0aXRhbl82NAlzY3RsOworCQkJdGl0YW5fNjQJcmVzZXJ2ZWQzWzNdOworCQl9IGc7CisJCXN0cnVjdCB7CisJCQl0aXRhbl82NAlhZ3BlcnJvcjsKKwkJCXRpdGFuXzY0CWFncGVycmVuOworCQkJdGl0YW5fNjQJYWdwZXJyc2V0OworCQkJdGl0YW5fNjQJYWdwbGFzdHdyOworCQkJdGl0YW5fNjQJYXBlcnJvcjsKKwkJCXRpdGFuXzY0CWFwZXJyZW47CisJCQl0aXRhbl82NAlhcGVycnNldDsKKwkJCXRpdGFuXzY0CXJlc2VydmVkMDsKKwkJCXRpdGFuXzY0CWF0bGJpdjsKKwkJCXRpdGFuXzY0CWF0bGJpYTsKKwkJCXRpdGFuXzY0CXJlc2VydmVkMVs2XTsKKwkJfSBhOworCX0gcG9ydF9zcGVjaWZpYzsKKwl0aXRhbl82NAlzcHJzdDsKKwl0aXRhbl82NAlyZXNlcnZlZDFbMzFdOworfSB0aXRhbl9wYWNoaXBfcG9ydDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXRpdGFuX3BhY2hpcF9wb3J0CWdfcG9ydDsKKwl0aXRhbl9wYWNoaXBfcG9ydAlhX3BvcnQ7Cit9IHRpdGFuX3BhY2hpcDsKKworI2RlZmluZSBUSVRBTl9jY2hpcAkoKHRpdGFuX2NjaGlwICAqKShJREVOVF9BRERSK1RJX0JJQVMrMHgxQTAwMDAwMDBVTCkpCisjZGVmaW5lIFRJVEFOX2RjaGlwICAgIAkoKHRpdGFuX2RjaGlwICAqKShJREVOVF9BRERSK1RJX0JJQVMrMHgxQjAwMDA4MDBVTCkpCisjZGVmaW5lIFRJVEFOX3BhY2hpcDAgCSgodGl0YW5fcGFjaGlwICopKElERU5UX0FERFIrVElfQklBUysweDE4MDAwMDAwMFVMKSkKKyNkZWZpbmUgVElUQU5fcGFjaGlwMSAJKCh0aXRhbl9wYWNoaXAgKikoSURFTlRfQUREUitUSV9CSUFTKzB4MzgwMDAwMDAwVUwpKQorZXh0ZXJuIHVuc2lnbmVkIFRJVEFOX2FncDsKK2V4dGVybiBpbnQgVElUQU5fYm9vdGNwdTsKKworLyoKKyAqIFRJVEFOIFBBLWNoaXAgV2luZG93IFNwYWNlIEJhc2UgQWRkcmVzcyByZWdpc3Rlci4KKyAqIChXU0JBWzAtMl0pCisgKi8KKyNkZWZpbmUgd3NiYV9tX2VuYSAweDEgICAgICAgICAgICAgICAgCisjZGVmaW5lIHdzYmFfbV9zZyAweDIKKyNkZWZpbmUgd3NiYV9tX2FkZHIgMHhGRkYwMDAwMCAgCisjZGVmaW5lIHdtYXNrX2tfc3oxZ2IgMHgzRkYwMDAwMCAgICAgICAgICAgICAgICAgICAKK3VuaW9uIFRQQWNoaXBXU0JBIHsKKwlzdHJ1Y3QgIHsKKwkJdW5zaWduZWQgd3NiYV92X2VuYSA6IDE7CisJCXVuc2lnbmVkIHdzYmFfdl9zZyA6IDE7CisJCXVuc2lnbmVkIHdzYmFfdl9yc3ZkMSA6IDE4OworCQl1bnNpZ25lZCB3c2JhX3ZfYWRkciA6IDEyOworCQl1bnNpZ25lZCB3c2JhX3ZfcnN2ZDIgOiAzMjsKKyAgICAgICAgfSB3c2JhX3JfYml0czsKKwlpbnQgd3NiYV9xX3dob2xlIFsyXTsKK307CisKKy8qCisgKiBUSVRBTiBQQS1jaGlwIENvbnRyb2wgUmVnaXN0ZXIKKyAqIFRoaXMgZGVmaW5pdGlvbiBjb3ZlcnMgYm90aCB0aGUgRy1Qb3J0IEdQQ1RMIGFuZCB0aGUgQS1QT1JUIEFQQ1RMLgorICogQml0cyA8NTE6MD4gYXJlIHRoZSBzYW1lIGluIGJvdGggY2FzZXMuIEFQQ1RMPDYzOjUyPiBhcmUgb25seSAKKyAqIGFwcGxpY2FibGUgdG8gQUdQLgorICovCisjZGVmaW5lIHBjdGxfbV9mYnRiIAkJCTB4MDAwMDAwMDEKKyNkZWZpbmUgcGN0bF9tX3RoZGlzIAkJCTB4MDAwMDAwMDIKKyNkZWZpbmUgcGN0bF9tX2NoYWluZGlzIAkJMHgwMDAwMDAwNAorI2RlZmluZSBwY3RsX21fdGd0bGF0IAkJCTB4MDAwMDAwMTgKKyNkZWZpbmUgcGN0bF9tX2hvbGUgIAkgIAkJMHgwMDAwMDAyMAorI2RlZmluZSBwY3RsX21fbXdpbiAJICAJCTB4MDAwMDAwNDAKKyNkZWZpbmUgcGN0bF9tX2FyYmVuYSAJICAJCTB4MDAwMDAwODAKKyNkZWZpbmUgcGN0bF9tX3ByaWdycCAJICAJCTB4MDAwMEZGMDAKKyNkZWZpbmUgcGN0bF9tX3BwcmkgCSAgCQkweDAwMDEwMDAwCisjZGVmaW5lIHBjdGxfbV9wY2lzcGQ2NiAgCQkweDAwMDIwMDAwCisjZGVmaW5lIHBjdGxfbV9jbmdzdGx0CSAgCQkweDAwM0MwMDAwCisjZGVmaW5lIHBjdGxfbV9wdHBkZXN0ZW4gCQkweDNGQzAwMDAwCisjZGVmaW5lIHBjdGxfbV9kcGNlbgkJCTB4NDAwMDAwMDAKKyNkZWZpbmUgcGN0bF9tX2FwY2VuCQkweDAwMDAwMDAwODAwMDAwMDBVTAorI2RlZmluZSBwY3RsX21fZGNydHYJCTB4MDAwMDAwMDMwMDAwMDAwMFVMCisjZGVmaW5lIHBjdGxfbV9lbl9zdGVwcGluZwkweDAwMDAwMDA0MDAwMDAwMDBVTAorI2RlZmluZSBhcGN0bF9tX3JzdmQxCQkweDAwMEZGRkY4MDAwMDAwMDBVTAorI2RlZmluZSBhcGN0bF9tX2FncF9yYXRlCTB4MDAzMDAwMDAwMDAwMDAwMFVMCisjZGVmaW5lIGFwY3RsX21fYWdwX3NiYV9lbgkweDAwNDAwMDAwMDAwMDAwMDBVTAorI2RlZmluZSBhcGN0bF9tX2FncF9lbgkJMHgwMDgwMDAwMDAwMDAwMDAwVUwKKyNkZWZpbmUgYXBjdGxfbV9yc3ZkMgkJMHgwMTAwMDAwMDAwMDAwMDAwVUwKKyNkZWZpbmUgYXBjdGxfbV9hZ3BfcHJlc2VudAkweDAyMDAwMDAwMDAwMDAwMDBVTAorI2RlZmluZSBhcGN0bF9hZ3BfaHBfcmQJCTB4MUMwMDAwMDAwMDAwMDAwMFVMCisjZGVmaW5lIGFwY3RsX2FncF9scF9yZAkJMHhFMDAwMDAwMDAwMDAwMDAwVUwKKyNkZWZpbmUgZ3BjdGxfbV9yc3ZkCQkweEZGRkZGRkY4MDAwMDAwMDBVTAordW5pb24gVFBBY2hpcFBDVEwgeworCXN0cnVjdCB7CisJCXVuc2lnbmVkIHBjdGxfdl9mYnRiIDogMTsJCS8qIEEvRyBbMF0gICAgICovCisJCXVuc2lnbmVkIHBjdGxfdl90aGRpcyA6IDE7CQkvKiBBL0cgWzFdICAgICAqLworCQl1bnNpZ25lZCBwY3RsX3ZfY2hhaW5kaXMgOiAxOwkJLyogQS9HIFsyXSAgICAgKi8KKwkJdW5zaWduZWQgcGN0bF92X3RndGxhdCA6IDI7CQkvKiBBL0cgWzQ6M10gICAqLworCQl1bnNpZ25lZCBwY3RsX3ZfaG9sZSA6IDE7CQkvKiBBL0cgWzVdICAgICAqLworCQl1bnNpZ25lZCBwY3RsX3ZfbXdpbiA6IDE7CQkvKiBBL0cgWzZdICAgICAqLworCQl1bnNpZ25lZCBwY3RsX3ZfYXJiZW5hIDogMTsJCS8qIEEvRyBbN10gICAgICovCisJCXVuc2lnbmVkIHBjdGxfdl9wcmlncnAgOiA4OwkJLyogQS9HIFsxNTo4XSAgKi8KKwkJdW5zaWduZWQgcGN0bF92X3BwcmkgOiAxOwkJLyogQS9HIFsxNl0gICAgKi8KKwkJdW5zaWduZWQgcGN0bF92X3BjaXNwZDY2IDogMTsJCS8qIEEvRyBbMTddICAgICovCisJCXVuc2lnbmVkIHBjdGxfdl9jbmdzdGx0IDogNDsJCS8qIEEvRyBbMjE6MThdICovCisJCXVuc2lnbmVkIHBjdGxfdl9wdHBkZXN0ZW4gOiA4OwkJLyogQS9HIFsyOToyMl0gKi8KKwkJdW5zaWduZWQgcGN0bF92X2RwY2VuIDogMTsJCS8qIEEvRyBbMzBdICAgICovCisJCXVuc2lnbmVkIHBjdGxfdl9hcGNlbiA6IDE7CQkvKiBBL0cgWzMxXSAgICAqLworCQl1bnNpZ25lZCBwY3RsX3ZfZGNydHYgOiAyOwkJLyogQS9HIFszMzozMl0gKi8KKwkJdW5zaWduZWQgcGN0bF92X2VuX3N0ZXBwaW5nIDoxOwkJLyogQS9HIFszNF0gICAgKi8KKwkJdW5zaWduZWQgYXBjdGxfdl9yc3ZkMSA6IDE3OwkJLyogQSAgIFs1MTozNV0gKi8KKwkJdW5zaWduZWQgYXBjdGxfdl9hZ3BfcmF0ZSA6IDI7CQkvKiBBICAgWzUzOjUyXSAqLworCQl1bnNpZ25lZCBhcGN0bF92X2FncF9zYmFfZW4gOiAxOwkvKiBBICAgWzU0XSAgICAqLworCQl1bnNpZ25lZCBhcGN0bF92X2FncF9lbiA6IDE7CQkvKiBBICAgWzU1XSAgICAqLworCQl1bnNpZ25lZCBhcGN0bF92X3JzdmQyIDogMTsJCS8qIEEgICBbNTZdICAgICovCisJCXVuc2lnbmVkIGFwY3RsX3ZfYWdwX3ByZXNlbnQgOiAxOwkvKiBBICAgWzU3XSAgICAqLworCQl1bnNpZ25lZCBhcGN0bF92X2FncF9ocF9yZCA6IDM7CQkvKiBBICAgWzYwOjU4XSAqLworCQl1bnNpZ25lZCBhcGN0bF92X2FncF9scF9yZCA6IDM7CQkvKiBBICAgWzYzOjYxXSAqLworCX0gcGN0bF9yX2JpdHM7CisJdW5zaWduZWQgaW50IHBjdGxfbF93aG9sZSBbMl07CisJdW5zaWduZWQgbG9uZyBwY3RsX3Ffd2hvbGU7Cit9OworCisvKgorICogU0VSUk9SIC8gU0VSUkVOIC8gU0VSUlNFVAorICovCit1bmlvbiBUUEFjaGlwU0VSUiB7CisJc3RydWN0IHsKKwkJdW5zaWduZWQgc2Vycl92X2xvc3RfdWVjYyA6IDE7CQkvKiBbMF0JCSovCisJCXVuc2lnbmVkIHNlcnJfdl91ZWNjIDogMTsJCS8qIFsxXSAgCSovCisJCXVuc2lnbmVkIHNlcnJfdl9jcmUgOiAxOwkJLyogWzJdCQkqLworCQl1bnNpZ25lZCBzZXJyX3ZfbnhpbyA6IDE7CQkvKiBbM10JCSovCisJCXVuc2lnbmVkIHNlcnJfdl9sb3N0X2NyZSA6IDE7CQkvKiBbNF0JCSovCisJCXVuc2lnbmVkIHNlcnJfdl9yc3ZkMCA6IDEwOwkJLyogWzE0OjVdCSovCisJCXVuc2lnbmVkIHNlcnJfdl9hZGRyIDogMzI7CQkvKiBbNDY6MTVdCSovCisJCXVuc2lnbmVkIHNlcnJfdl9yc3ZkMSA6IDU7CQkvKiBbNTE6NDddCSovCisJCXVuc2lnbmVkIHNlcnJfdl9zb3VyY2UgOiAyOwkJLyogWzUzOjUyXQkqLworCQl1bnNpZ25lZCBzZXJyX3ZfY21kIDogMjsJCS8qIFs1NTo1NF0JKi8KKwkJdW5zaWduZWQgc2Vycl92X3N5biA6IDg7CQkvKiBbNjM6NTZdCSovCisJfSBzZXJyX3JfYml0czsKKwl1bnNpZ25lZCBpbnQgc2Vycl9sX3dob2xlWzJdOworCXVuc2lnbmVkIGxvbmcgc2Vycl9xX3dob2xlOworfTsKKworLyoKKyAqIEdQRVJST1IgLyBBUEVSUk9SIC8gR1BFUlJFTiAvIEFQRVJSRU4gLyBHUEVSUlNFVCAvIEFQRVJSU0VUCisgKi8KK3VuaW9uIFRQQWNoaXBQRVJSIHsKKwlzdHJ1Y3QgeworCQl1bnNpZ25lZCBsb25nIHBlcnJfdl9sb3N0IDogMTsJICAgICAJLyogWzBdCQkqLworCQl1bnNpZ25lZCBsb25nIHBlcnJfdl9zZXJyIDogMTsJCS8qIFsxXQkJKi8KKwkJdW5zaWduZWQgbG9uZyBwZXJyX3ZfcGVyciA6IDE7CQkvKiBbMl0JCSovCisJCXVuc2lnbmVkIGxvbmcgcGVycl92X2RjcnRvIDogMTsJCS8qIFszXQkJKi8KKwkJdW5zaWduZWQgbG9uZyBwZXJyX3Zfc2dlIDogMTsJCS8qIFs0XQkJKi8KKwkJdW5zaWduZWQgbG9uZyBwZXJyX3ZfYXBlIDogMTsJCS8qIFs1XQkJKi8KKwkJdW5zaWduZWQgbG9uZyBwZXJyX3ZfdGEgOiAxOwkJLyogWzZdCQkqLworCQl1bnNpZ25lZCBsb25nIHBlcnJfdl9kcGUgOiAxOwkJLyogWzddCQkqLworCQl1bnNpZ25lZCBsb25nIHBlcnJfdl9uZHMgOiAxOwkJLyogWzhdCQkqLworCQl1bnNpZ25lZCBsb25nIHBlcnJfdl9pcHRwciA6IDE7CQkvKiBbOV0JCSovCisJCXVuc2lnbmVkIGxvbmcgcGVycl92X2lwdHB3IDogMTsJCS8qIFsxMF0gCSovCisJCXVuc2lnbmVkIGxvbmcgcGVycl92X3JzdmQwIDogMzsJCS8qIFsxMzoxMV0JKi8KKwkJdW5zaWduZWQgbG9uZyBwZXJyX3ZfYWRkciA6IDMzOwkJLyogWzQ2OjE0XQkqLworCQl1bnNpZ25lZCBsb25nIHBlcnJfdl9kYWMgOiAxOwkJLyogWzQ3XQkJKi8KKwkJdW5zaWduZWQgbG9uZyBwZXJyX3ZfbXdpbiA6IDE7CQkvKiBbNDhdCQkqLworCQl1bnNpZ25lZCBsb25nIHBlcnJfdl9yc3ZkMSA6IDM7CQkvKiBbNTE6NDldCSovCisJCXVuc2lnbmVkIGxvbmcgcGVycl92X2NtZCA6IDQ7CQkvKiBbNTU6NTJdCSovCisJCXVuc2lnbmVkIGxvbmcgcGVycl92X3JzdmQyIDogODsJCS8qIFs2Mzo1Nl0JKi8KKwl9IHBlcnJfcl9iaXRzOworCXVuc2lnbmVkIGludCBwZXJyX2xfd2hvbGVbMl07CisJdW5zaWduZWQgbG9uZyBwZXJyX3Ffd2hvbGU7Cit9OworCisvKgorICogQUdQRVJST1IgLyBBR1BFUlJFTiAvIEFHUEVSUlNFVAorICovCit1bmlvbiBUUEFjaGlwQUdQRVJSIHsKKwlzdHJ1Y3QgeworCQl1bnNpZ25lZCBhZ3BlcnJfdl9sb3N0IDogMTsJCS8qIFswXQkJKi8KKwkJdW5zaWduZWQgYWdwZXJyX3ZfbHBxZnVsbCA6IDE7CQkvKiBbMV0JCSovCisJCXVuc2lnbmVkIGFwZ2Vycl92X2hwcWZ1bGwgOiAxOwkJLyogWzJdCQkqLworCQl1bnNpZ25lZCBhZ3BlcnJfdl9yZXNjbWQgOiAxOwkJLyogWzNdCQkqLworCQl1bnNpZ25lZCBhZ3BlcnJfdl9pcHRlIDogMTsJCS8qIFs0XQkJKi8KKwkJdW5zaWduZWQgYWdwZXJyX3ZfcHRwIDoJMTsgICAgICAJLyogWzVdCQkqLworCQl1bnNpZ25lZCBhZ3BlcnJfdl9ub3dpbmRvdyA6IDE7CQkvKiBbNl0JCSovCisJCXVuc2lnbmVkIGFncGVycl92X3JzdmQwIDogODsJCS8qIFsxNDo3XQkqLworCQl1bnNpZ25lZCBhZ3BlcnJfdl9hZGRyIDogMzI7CQkvKiBbNDY6MTVdCSovCisJCXVuc2lnbmVkIGFncGVycl92X3JzdmQxIDogMTsJCS8qIFs0N10JCSovCisJCXVuc2lnbmVkIGFncGVycl92X2RhYyA6IDE7CQkvKiBbNDhdCQkqLworCQl1bnNpZ25lZCBhZ3BlcnJfdl9td2luIDogMTsJCS8qIFs0OV0JCSovCisJCXVuc2lnbmVkIGFncGVycl92X2NtZCA6IDM7CQkvKiBbNTI6NTBdCSovCisJCXVuc2lnbmVkIGFncGVycl92X2xlbmd0aCA6IDY7CQkvKiBbNTg6NTNdCSovCisJCXVuc2lnbmVkIGFncGVycl92X2ZlbmNlIDogMTsJCS8qIFs1OV0JCSovCisJCXVuc2lnbmVkIGFncGVycl92X3JzdmQyIDogNDsJCS8qIFs2Mzo2MF0JKi8KKwl9IGFncGVycl9yX2JpdHM7CisJdW5zaWduZWQgaW50IGFncGVycl9sX3dob2xlWzJdOworCXVuc2lnbmVkIGxvbmcgYWdwZXJyX3Ffd2hvbGU7Cit9OworLyoKKyAqIE1lbW9yeSBzcGFjZXM6CisgKiBIb3NlIG51bWJlcnMgYXJlIGFzc2lnbmVkIGFzIGZvbGxvd3M6CisgKgkJMCAtIHBhY2hpcCAwIC8gRyBQb3J0CisgKgkJMSAtIHBhY2hpcCAxIC8gRyBQb3J0CisgKiAJCTIgLSBwYWNoaXAgMCAvIEEgUG9ydAorICogICAgICAJMyAtIHBhY2hpcCAxIC8gQSBQb3J0CisgKi8KKyNkZWZpbmUgVElUQU5fSE9TRV9TSElGVCAgICAgICAoMzMpIAorI2RlZmluZSBUSVRBTl9IT1NFKGgpCQkoKCh1bnNpZ25lZCBsb25nKShoKSkgPDwgVElUQU5fSE9TRV9TSElGVCkKKyNkZWZpbmUgVElUQU5fQkFTRQkJKElERU5UX0FERFIgKyBUSV9CSUFTKQorI2RlZmluZSBUSVRBTl9NRU0oaCkJICAgICAJKFRJVEFOX0JBU0UrVElUQU5fSE9TRShoKSsweDAwMDAwMDAwMFVMKQorI2RlZmluZSBfVElUQU5fSUFDS19TQyhoKSAgICAJKFRJVEFOX0JBU0UrVElUQU5fSE9TRShoKSsweDFGODAwMDAwMFVMKQorI2RlZmluZSBUSVRBTl9JTyhoKQkgICAgIAkoVElUQU5fQkFTRStUSVRBTl9IT1NFKGgpKzB4MUZDMDAwMDAwVUwpCisjZGVmaW5lIFRJVEFOX0NPTkYoaCkJICAgICAJKFRJVEFOX0JBU0UrVElUQU5fSE9TRShoKSsweDFGRTAwMDAwMFVMKQorCisjZGVmaW5lIFRJVEFOX0hPU0VfTUFTSwkJVElUQU5fSE9TRSgzKQorI2RlZmluZSBUSVRBTl9JQUNLX1NDCSAgICAgCV9USVRBTl9JQUNLX1NDKDApIC8qIGhhY2shICovCisKKy8qIAorICogVGhlIGNhbm9uaWNhbCBub24tcmVtYXBlZCBJL08gYW5kIE1FTSBhZGRyZXNzZXMgaGF2ZSB0aGVzZSB2YWx1ZXMKKyAqIHN1YnRyYWN0ZWQgb3V0LiAgVGhpcyBpcyBhcnJhbmdlZCBzbyB0aGF0IGZvbGtzIG1hbmlwdWxhdGluZyBJU0EKKyAqIGRldmljZXMgY2FuIHVzZSB0aGVpciBmYW1pbGlhciBudW1iZXJzIGFuZCBoYXZlIHRoZW0gbWFwIHRvIGJ1cyAwLgorICovCisKKyNkZWZpbmUgVElUQU5fSU9fQklBUwkJVElUQU5fSU8oMCkKKyNkZWZpbmUgVElUQU5fTUVNX0JJQVMJCVRJVEFOX01FTSgwKQorCisvKiBUaGUgSU8gYWRkcmVzcyBzcGFjZSBpcyBsYXJnZXIgdGhhbiAweGZmZmYgKi8KKyNkZWZpbmUgVElUQU5fSU9fU1BBQ0UJCShUSVRBTl9DT05GKDApIC0gVElUQU5fSU8oMCkpCisKKy8qIFRJRyBTcGFjZSAqLworI2RlZmluZSBUSVRBTl9USUdfU1BBQ0UJCShUSVRBTl9CQVNFICsgMHgxMDAwMDAwMDBVTCkKKworLyogT2Zmc2V0IGJldHdlZW4gcmFtIHBoeXNpY2FsIGFkZHJlc3NlcyBhbmQgcGNpNjQgREFDIGJ1cyBhZGRyZXNzZXMuICAqLworLyogPz8/IEp1c3QgYSBndWVzcy4gIE91Z2h0IHRvIGNvbmZpcm0gaXQgaGFzbid0IGJlZW4gbW92ZWQuICAqLworI2RlZmluZSBUSVRBTl9EQUNfT0ZGU0VUCSgxVUwgPDwgNDApCisKKy8qCisgKiBEYXRhIHN0cnVjdHVyZSBmb3IgaGFuZGxpbmcgVElUQU4gbWFjaGluZSBjaGVja3M6CisgKi8KKyNkZWZpbmUgU0NCX1FfU1lTRVJSCTB4NjIwCisjZGVmaW5lIFNDQl9RX1BST0NFUlIJMHg2MzAKKyNkZWZpbmUgU0NCX1FfU1lTTUNISwkweDY2MAorI2RlZmluZSBTQ0JfUV9QUk9DTUNISwkweDY3MAorI2RlZmluZSBTQ0JfUV9TWVNFVkVOVAkweDY4MAkvKiBlbnZpcm9ubWVudGFsIC8gc3lzdGVtIG1hbmFnZW1lbnQgKi8KK3N0cnVjdCBlbF9USVRBTl9zeXNkYXRhX21jaGVjayB7CisJdTY0IHN1bW1hcnk7CS8qIDB4MDAgKi8KKwl1NjQgY19kaXJ4OwkvKiAweDA4ICovCisJdTY0IGNfbWlzYzsJLyogMHgxMCAqLworCXU2NCBwMF9zZXJyb3I7CS8qIDB4MTggKi8KKwl1NjQgcDBfZ3BlcnJvcjsgLyogMHgyMCAqLworCXU2NCBwMF9hcGVycm9yOyAvKiAweDI4ICovCisJdTY0IHAwX2FncGVycm9yOy8qIDB4MzAgKi8KKwl1NjQgcDFfc2Vycm9yOwkvKiAweDM4ICovCisJdTY0IHAxX2dwZXJyb3I7IC8qIDB4NDAgKi8KKwl1NjQgcDFfYXBlcnJvcjsgLyogMHg0OCAqLworCXU2NCBwMV9hZ3BlcnJvcjsvKiAweDUwICovCit9OworCisvKgorICogU3lzdGVtIGFyZWEgZm9yIGEgcHJpdmF0ZWVyIDY4MCBlbnZpcm9ubWVudGFsL3N5c3RlbSBtYW5hZ2VtZW50IG1jaGVjayAKKyAqLworc3RydWN0IGVsX1BSSVZBVEVFUl9lbnZkYXRhX21jaGVjayB7CisJdTY0IHN1bW1hcnk7CS8qIDB4MDAgKi8KKwl1NjQgY19kaXJ4OwkvKiAweDA4ICovCisJdTY0IHNtaXI7CS8qIDB4MTAgKi8KKwl1NjQgY3B1aXI7CS8qIDB4MTggKi8KKwl1NjQgcHNpcjsJLyogMHgyMCAqLworCXU2NCBmYXVsdDsJLyogMHgyOCAqLworCXU2NCBzeXNfZG9vcnM7CS8qIDB4MzAgKi8KKwl1NjQgdGVtcF93YXJuOwkvKiAweDM4ICovCisJdTY0IGZhbl9jdHJsOwkvKiAweDQwICovCisJdTY0IGNvZGU7CS8qIDB4NDggKi8KKwl1NjQgcmVzZXJ2ZWQ7CS8qIDB4NTAgKi8KK307CisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpZm5kZWYgX19FWFRFUk5fSU5MSU5FCisjZGVmaW5lIF9fRVhURVJOX0lOTElORSBleHRlcm4gaW5saW5lCisjZGVmaW5lIF9fSU9fRVhURVJOX0lOTElORQorI2VuZGlmCisKKy8qCisgKiBJL08gZnVuY3Rpb25zOgorICoKKyAqIFRJVEFOLCBhIDIxPz8/IFBDSS9tZW1vcnkgc3VwcG9ydCBjaGlwc2V0IGZvciB0aGUgRVY2ICgyMTI2NCkKKyAqIGNhbiBvbmx5IHVzZSBsaW5lYXIgYWNjZXNzZXMgdG8gZ2V0IGF0IFBDSS9BR1AgbWVtb3J5IGFuZCBJL08gc3BhY2VzLgorICovCisKKy8qCisgKiBNZW1vcnkgZnVuY3Rpb25zLiAgYWxsIGFjY2Vzc2VzIGFyZSBkb25lIHRocm91Z2ggbGluZWFyIHNwYWNlLgorICovCisKK19fRVhURVJOX0lOTElORSB2b2lkIF9faW9tZW0gKnRpdGFuX2lvcG9ydG1hcCh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcmV0dXJuICh2b2lkIF9faW9tZW0gKikoYWRkciArIFRJVEFOX0lPX0JJQVMpOworfQorCitleHRlcm4gdm9pZCBfX2lvbWVtICp0aXRhbl9pb3JlbWFwKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKTsKK2V4dGVybiB2b2lkIHRpdGFuX2lvdW5tYXAodm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKTsKKworX19FWFRFUk5fSU5MSU5FIGludCB0aXRhbl9pc19pb2FkZHIodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXJldHVybiBhZGRyID49IFRJVEFOX0JBU0U7Cit9CisKK2V4dGVybiBpbnQgdGl0YW5faXNfbW1pbyhjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpOworCisjdW5kZWYgX19JT19QUkVGSVgKKyNkZWZpbmUgX19JT19QUkVGSVgJCXRpdGFuCisjZGVmaW5lIHRpdGFuX3RyaXZpYWxfcndfYncJMQorI2RlZmluZSB0aXRhbl90cml2aWFsX3J3X2xxCTEKKyNkZWZpbmUgdGl0YW5fdHJpdmlhbF9pb19idwkxCisjZGVmaW5lIHRpdGFuX3RyaXZpYWxfaW9fbHEJMQorI2RlZmluZSB0aXRhbl90cml2aWFsX2lvdW5tYXAJMAorI2luY2x1ZGUgPGFzbS9pb190cml2aWFsLmg+CisKKyNpZmRlZiBfX0lPX0VYVEVSTl9JTkxJTkUKKyN1bmRlZiBfX0VYVEVSTl9JTkxJTkUKKyN1bmRlZiBfX0lPX0VYVEVSTl9JTkxJTkUKKyNlbmRpZgorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX19BTFBIQV9USVRBTl9fSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9jb3JlX3RzdW5hbWkuaCBiL2luY2x1ZGUvYXNtLWFscGhhL2NvcmVfdHN1bmFtaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0ZTYzNWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9jb3JlX3RzdW5hbWkuaApAQCAtMCwwICsxLDM0NCBAQAorI2lmbmRlZiBfX0FMUEhBX1RTVU5BTUlfX0hfXworI2RlZmluZSBfX0FMUEhBX1RTVU5BTUlfX0hfXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vY29tcGlsZXIuaD4KKworLyoKKyAqIFRTVU5BTUkvVFlQSE9PTiBhcmUgdGhlIGludGVybmFsIG5hbWVzIGZvciB0aGUgY29yZSBsb2dpYyBjaGlwc2V0IHdoaWNoCisgKiBwcm92aWRlcyBtZW1vcnkgY29udHJvbGxlciBhbmQgUENJIGFjY2VzcyBmb3IgdGhlIDIxMjY0IGJhc2VkIHN5c3RlbXMuCisgKgorICogVGhpcyBmaWxlIGlzIGJhc2VkIG9uOgorICoKKyAqIFRzdW5hbWkgU3lzdGVtIFByb2dyYW1tZXJzIE1hbnVhbAorICogUHJlbGltaW5hcnksIENoYXB0ZXJzIDItNQorICoKKyAqLworCisvKiBYWFg6IERvIHdlIG5lZWQgdG8gY29uZGl0aW9uYWxpemUgb24gdGhpcz8gICovCisjaWZkZWYgVVNFXzQ4X0JJVF9LU0VHCisjZGVmaW5lIFRTX0JJQVMgMHg4MDAwMDAwMDAwMFVMCisjZWxzZQorI2RlZmluZSBUU19CSUFTIDB4MTAwMDAwMDAwMDBVTAorI2VuZGlmCisKKy8qCisgKiBDQ2hpcCwgRENoaXAsIGFuZCBQQ2hpcCByZWdpc3RlcnMKKyAqLworCit0eXBlZGVmIHN0cnVjdCB7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBjc3IgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg2NCkpKTsKK30gdHN1bmFtaV82NDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXRzdW5hbWlfNjQJY3NjOworCXRzdW5hbWlfNjQJbXRyOworCXRzdW5hbWlfNjQJbWlzYzsKKwl0c3VuYW1pXzY0CW1wZDsKKwl0c3VuYW1pXzY0CWFhcjA7CisJdHN1bmFtaV82NAlhYXIxOworCXRzdW5hbWlfNjQJYWFyMjsKKwl0c3VuYW1pXzY0CWFhcjM7CisJdHN1bmFtaV82NAlkaW0wOworCXRzdW5hbWlfNjQJZGltMTsKKwl0c3VuYW1pXzY0CWRpcjA7CisJdHN1bmFtaV82NAlkaXIxOworCXRzdW5hbWlfNjQJZHJpcjsKKwl0c3VuYW1pXzY0CXByYmVuOworCXRzdW5hbWlfNjQJaWljOwkvKiBhLmsuYS4gaWljMCAqLworCXRzdW5hbWlfNjQJd2RyOwkvKiBhLmsuYS4gaWljMSAqLworCXRzdW5hbWlfNjQJbXByMDsKKwl0c3VuYW1pXzY0CW1wcjE7CisJdHN1bmFtaV82NAltcHIyOworCXRzdW5hbWlfNjQJbXByMzsKKwl0c3VuYW1pXzY0CW1jdGw7CisJdHN1bmFtaV82NAlfX3BhZDE7CisJdHN1bmFtaV82NAl0dHI7CisJdHN1bmFtaV82NAl0ZHI7CisJdHN1bmFtaV82NAlkaW0yOworCXRzdW5hbWlfNjQJZGltMzsKKwl0c3VuYW1pXzY0CWRpcjI7CisJdHN1bmFtaV82NAlkaXIzOworCXRzdW5hbWlfNjQJaWljMjsKKwl0c3VuYW1pXzY0CWlpYzM7Cit9IHRzdW5hbWlfY2NoaXA7CisKK3R5cGVkZWYgc3RydWN0IHsKKwl0c3VuYW1pXzY0CWRzYzsKKwl0c3VuYW1pXzY0CXN0cjsKKwl0c3VuYW1pXzY0CWRyZXY7Cit9IHRzdW5hbWlfZGNoaXA7CisKK3R5cGVkZWYgc3RydWN0IHsKKwl0c3VuYW1pXzY0CXdzYmFbNF07CisJdHN1bmFtaV82NAl3c21bNF07CisJdHN1bmFtaV82NAl0YmFbNF07CisJdHN1bmFtaV82NAlwY3RsOworCXRzdW5hbWlfNjQJcGxhdDsKKwl0c3VuYW1pXzY0CXJlc2VydmVkOworCXRzdW5hbWlfNjQJcGVycm9yOworCXRzdW5hbWlfNjQJcGVycm1hc2s7CisJdHN1bmFtaV82NAlwZXJyc2V0OworCXRzdW5hbWlfNjQJdGxiaXY7CisJdHN1bmFtaV82NAl0bGJpYTsKKwl0c3VuYW1pXzY0CXBtb25jdGw7CisJdHN1bmFtaV82NAlwbW9uY250OworfSB0c3VuYW1pX3BjaGlwOworCisjZGVmaW5lIFRTVU5BTUlfY2NoaXAgICgodHN1bmFtaV9jY2hpcCAqKShJREVOVF9BRERSK1RTX0JJQVMrMHgxQTAwMDAwMDBVTCkpCisjZGVmaW5lIFRTVU5BTUlfZGNoaXAgICgodHN1bmFtaV9kY2hpcCAqKShJREVOVF9BRERSK1RTX0JJQVMrMHgxQjAwMDA4MDBVTCkpCisjZGVmaW5lIFRTVU5BTUlfcGNoaXAwICgodHN1bmFtaV9wY2hpcCAqKShJREVOVF9BRERSK1RTX0JJQVMrMHgxODAwMDAwMDBVTCkpCisjZGVmaW5lIFRTVU5BTUlfcGNoaXAxICgodHN1bmFtaV9wY2hpcCAqKShJREVOVF9BRERSK1RTX0JJQVMrMHgzODAwMDAwMDBVTCkpCitleHRlcm4gaW50IFRTVU5BTUlfYm9vdGNwdTsKKworLyoKKyAqIFRTVU5BTUkgUGNoaXAgRXJyb3IgcmVnaXN0ZXIuCisgKi8KKworI2RlZmluZSBwZXJyb3JfbV9sb3N0IDB4MQorI2RlZmluZSBwZXJyb3JfbV9zZXJyIDB4MgorI2RlZmluZSBwZXJyb3JfbV9wZXJyIDB4NAorI2RlZmluZSBwZXJyb3JfbV9kY3J0byAweDgKKyNkZWZpbmUgcGVycm9yX21fc2dlIDB4MTAKKyNkZWZpbmUgcGVycm9yX21fYXBlIDB4MjAKKyNkZWZpbmUgcGVycm9yX21fdGEgMHg0MAorI2RlZmluZSBwZXJyb3JfbV9yZHBlIDB4ODAKKyNkZWZpbmUgcGVycm9yX21fbmRzIDB4MTAwCisjZGVmaW5lIHBlcnJvcl9tX3J0byAweDIwMAorI2RlZmluZSBwZXJyb3JfbV91ZWNjIDB4NDAwCisjZGVmaW5lIHBlcnJvcl9tX2NyZSAweDgwMAorI2RlZmluZSBwZXJyb3JfbV9hZGRybCAweEZGRkZGRkZGMDAwMFVMCisjZGVmaW5lIHBlcnJvcl9tX2FkZHJoIDB4NzAwMDAwMDAwMDAwMFVMCisjZGVmaW5lIHBlcnJvcl9tX2NtZCAweEYwMDAwMDAwMDAwMDAwVUwKKyNkZWZpbmUgcGVycm9yX21fc3luIDB4RkYwMDAwMDAwMDAwMDAwMFVMCit1bmlvbiBUUGNoaXBQRVJST1IgeyAgIAorCXN0cnVjdCAgeworCQl1bnNpZ25lZCBpbnQgcGVycm9yX3ZfbG9zdCA6IDE7CisJCXVuc2lnbmVkIHBlcnJvcl92X3NlcnIgOiAxOworCQl1bnNpZ25lZCBwZXJyb3Jfdl9wZXJyIDogMTsKKwkJdW5zaWduZWQgcGVycm9yX3ZfZGNydG8gOiAxOworCQl1bnNpZ25lZCBwZXJyb3Jfdl9zZ2UgOiAxOworCQl1bnNpZ25lZCBwZXJyb3Jfdl9hcGUgOiAxOworCQl1bnNpZ25lZCBwZXJyb3Jfdl90YSA6IDE7CisJCXVuc2lnbmVkIHBlcnJvcl92X3JkcGUgOiAxOworCQl1bnNpZ25lZCBwZXJyb3Jfdl9uZHMgOiAxOworCQl1bnNpZ25lZCBwZXJyb3Jfdl9ydG8gOiAxOworCQl1bnNpZ25lZCBwZXJyb3Jfdl91ZWNjIDogMTsKKwkJdW5zaWduZWQgcGVycm9yX3ZfY3JlIDogMTsgICAgICAgICAgICAgICAgIAorCQl1bnNpZ25lZCBwZXJyb3Jfdl9yc3ZkMSA6IDQ7CisJCXVuc2lnbmVkIHBlcnJvcl92X2FkZHJsIDogMzI7CisJCXVuc2lnbmVkIHBlcnJvcl92X2FkZHJoIDogMzsKKwkJdW5zaWduZWQgcGVycm9yX3ZfcnN2ZDIgOiAxOworCQl1bnNpZ25lZCBwZXJyb3Jfdl9jbWQgOiA0OworCQl1bnNpZ25lZCBwZXJyb3Jfdl9zeW4gOiA4OworCX0gcGVycm9yX3JfYml0czsKKwlpbnQgcGVycm9yX3Ffd2hvbGUgWzJdOworfTsgICAgICAgICAgICAgICAgICAgICAgIAorCisvKgorICogVFNVTkFNSSBQY2hpcCBXaW5kb3cgU3BhY2UgQmFzZSBBZGRyZXNzIHJlZ2lzdGVyLgorICovCisjZGVmaW5lIHdzYmFfbV9lbmEgMHgxICAgICAgICAgICAgICAgIAorI2RlZmluZSB3c2JhX21fc2cgMHgyCisjZGVmaW5lIHdzYmFfbV9wdHAgMHg0CisjZGVmaW5lIHdzYmFfbV9hZGRyIDB4RkZGMDAwMDAgIAorI2RlZmluZSB3bWFza19rX3N6MWdiIDB4M0ZGMDAwMDAgICAgICAgICAgICAgICAgICAgCit1bmlvbiBUUGNoaXBXU0JBIHsKKwlzdHJ1Y3QgIHsKKwkJdW5zaWduZWQgd3NiYV92X2VuYSA6IDE7CisJCXVuc2lnbmVkIHdzYmFfdl9zZyA6IDE7CisJCXVuc2lnbmVkIHdzYmFfdl9wdHAgOiAxOworCQl1bnNpZ25lZCB3c2JhX3ZfcnN2ZDEgOiAxNzsKKwkJdW5zaWduZWQgd3NiYV92X2FkZHIgOiAxMjsKKwkJdW5zaWduZWQgd3NiYV92X3JzdmQyIDogMzI7CisJfSB3c2JhX3JfYml0czsKKwlpbnQgd3NiYV9xX3dob2xlIFsyXTsKK307CisKKy8qCisgKiBUU1VOQU1JIFBjaGlwIENvbnRyb2wgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBwY3RsX21fZmRzYyAweDEKKyNkZWZpbmUgcGN0bF9tX2ZidGIgMHgyCisjZGVmaW5lIHBjdGxfbV90aGRpcyAweDQKKyNkZWZpbmUgcGN0bF9tX2NoYWluZGlzIDB4OAorI2RlZmluZSBwY3RsX21fdGd0bGF0IDB4MTAKKyNkZWZpbmUgcGN0bF9tX2hvbGUgMHgyMAorI2RlZmluZSBwY3RsX21fbXdpbiAweDQwCisjZGVmaW5lIHBjdGxfbV9hcmJlbmEgMHg4MAorI2RlZmluZSBwY3RsX21fcHJpZ3JwIDB4N0YwMAorI2RlZmluZSBwY3RsX21fcHByaSAweDgwMDAKKyNkZWZpbmUgcGN0bF9tX3JzdmQxIDB4MzAwMDAKKyNkZWZpbmUgcGN0bF9tX2VjY2VuIDB4NDAwMDAKKyNkZWZpbmUgcGN0bF9tX3BhZG0gMHg4MDAwMAorI2RlZmluZSBwY3RsX21fY2RxbWF4IDB4RjAwMDAwCisjZGVmaW5lIHBjdGxfbV9yZXYgMHhGRjAwMDAwMAorI2RlZmluZSBwY3RsX21fY3JxbWF4IDB4RjAwMDAwMDAwVUwKKyNkZWZpbmUgcGN0bF9tX3B0cG1heCAweEYwMDAwMDAwMDBVTAorI2RlZmluZSBwY3RsX21fcGNsa3ggMHgzMDAwMDAwMDAwMFVMCisjZGVmaW5lIHBjdGxfbV9mZHNkaXMgMHg0MDAwMDAwMDAwMFVMCisjZGVmaW5lIHBjdGxfbV9mZHdkaXMgMHg4MDAwMDAwMDAwMFVMCisjZGVmaW5lIHBjdGxfbV9wdGV2cmZ5IDB4MTAwMDAwMDAwMDAwVUwKKyNkZWZpbmUgcGN0bF9tX3JwcCAweDIwMDAwMDAwMDAwMFVMCisjZGVmaW5lIHBjdGxfbV9waWQgMHhDMDAwMDAwMDAwMDBVTAorI2RlZmluZSBwY3RsX21fcnN2ZDIgMHhGRkZGMDAwMDAwMDAwMDAwVUwKKwordW5pb24gVFBjaGlwUENUTCB7CisJc3RydWN0IHsKKwkJdW5zaWduZWQgcGN0bF92X2Zkc2MgOiAxOworCQl1bnNpZ25lZCBwY3RsX3ZfZmJ0YiA6IDE7CisJCXVuc2lnbmVkIHBjdGxfdl90aGRpcyA6IDE7CisJCXVuc2lnbmVkIHBjdGxfdl9jaGFpbmRpcyA6IDE7CisJCXVuc2lnbmVkIHBjdGxfdl90Z3RsYXQgOiAxOworCQl1bnNpZ25lZCBwY3RsX3ZfaG9sZSA6IDE7CisJCXVuc2lnbmVkIHBjdGxfdl9td2luIDogMTsKKwkJdW5zaWduZWQgcGN0bF92X2FyYmVuYSA6IDE7CisJCXVuc2lnbmVkIHBjdGxfdl9wcmlncnAgOiA3OworCQl1bnNpZ25lZCBwY3RsX3ZfcHByaSA6IDE7CisJCXVuc2lnbmVkIHBjdGxfdl9yc3ZkMSA6IDI7CisJCXVuc2lnbmVkIHBjdGxfdl9lY2NlbiA6IDE7CisJCXVuc2lnbmVkIHBjdGxfdl9wYWRtIDogMTsKKwkJdW5zaWduZWQgcGN0bF92X2NkcW1heCA6IDQ7CisJCXVuc2lnbmVkIHBjdGxfdl9yZXYgOiA4OworCQl1bnNpZ25lZCBwY3RsX3ZfY3JxbWF4IDogNDsKKwkJdW5zaWduZWQgcGN0bF92X3B0cG1heCA6IDQ7CisJCXVuc2lnbmVkIHBjdGxfdl9wY2xreCA6IDI7CisJCXVuc2lnbmVkIHBjdGxfdl9mZHNkaXMgOiAxOworCQl1bnNpZ25lZCBwY3RsX3ZfZmR3ZGlzIDogMTsKKwkJdW5zaWduZWQgcGN0bF92X3B0ZXZyZnkgOiAxOworCQl1bnNpZ25lZCBwY3RsX3ZfcnBwIDogMTsKKwkJdW5zaWduZWQgcGN0bF92X3BpZCA6IDI7CisJCXVuc2lnbmVkIHBjdGxfdl9yc3ZkMiA6IDE2OworCX0gcGN0bF9yX2JpdHM7CisJaW50IHBjdGxfcV93aG9sZSBbMl07Cit9OworCisvKgorICogVFNVTkFNSSBQY2hpcCBFcnJvciBNYXNrIFJlZ2lzdGVyLgorICovCisjZGVmaW5lIHBlcnJtYXNrX21fbG9zdCAweDEKKyNkZWZpbmUgcGVycm1hc2tfbV9zZXJyIDB4MgorI2RlZmluZSBwZXJybWFza19tX3BlcnIgMHg0CisjZGVmaW5lIHBlcnJtYXNrX21fZGNydG8gMHg4CisjZGVmaW5lIHBlcnJtYXNrX21fc2dlIDB4MTAKKyNkZWZpbmUgcGVycm1hc2tfbV9hcGUgMHgyMAorI2RlZmluZSBwZXJybWFza19tX3RhIDB4NDAKKyNkZWZpbmUgcGVycm1hc2tfbV9yZHBlIDB4ODAKKyNkZWZpbmUgcGVycm1hc2tfbV9uZHMgMHgxMDAKKyNkZWZpbmUgcGVycm1hc2tfbV9ydG8gMHgyMDAKKyNkZWZpbmUgcGVycm1hc2tfbV91ZWNjIDB4NDAwCisjZGVmaW5lIHBlcnJtYXNrX21fY3JlIDB4ODAwCisjZGVmaW5lIHBlcnJtYXNrX21fcnN2ZCAweEZGRkZGRkZGRkZGRkYwMDBVTAordW5pb24gVFBjaGlwUEVSUk1BU0sgeyAgIAorCXN0cnVjdCAgeworCQl1bnNpZ25lZCBpbnQgcGVycm1hc2tfdl9sb3N0IDogMTsKKwkJdW5zaWduZWQgcGVycm1hc2tfdl9zZXJyIDogMTsKKwkJdW5zaWduZWQgcGVycm1hc2tfdl9wZXJyIDogMTsKKwkJdW5zaWduZWQgcGVycm1hc2tfdl9kY3J0byA6IDE7CisJCXVuc2lnbmVkIHBlcnJtYXNrX3Zfc2dlIDogMTsKKwkJdW5zaWduZWQgcGVycm1hc2tfdl9hcGUgOiAxOworCQl1bnNpZ25lZCBwZXJybWFza192X3RhIDogMTsKKwkJdW5zaWduZWQgcGVycm1hc2tfdl9yZHBlIDogMTsKKwkJdW5zaWduZWQgcGVycm1hc2tfdl9uZHMgOiAxOworCQl1bnNpZ25lZCBwZXJybWFza192X3J0byA6IDE7CisJCXVuc2lnbmVkIHBlcnJtYXNrX3ZfdWVjYyA6IDE7CisJCXVuc2lnbmVkIHBlcnJtYXNrX3ZfY3JlIDogMTsgICAgICAgICAgICAgICAgIAorCQl1bnNpZ25lZCBwZXJybWFza192X3JzdmQxIDogMjA7CisJCXVuc2lnbmVkIHBlcnJtYXNrX3ZfcnN2ZDIgOiAzMjsKKwl9IHBlcnJtYXNrX3JfYml0czsKKwlpbnQgcGVycm1hc2tfcV93aG9sZSBbMl07Cit9OyAgICAgICAgICAgICAgICAgICAgICAgCisKKy8qCisgKiBNZW1vcnkgc3BhY2VzOgorICovCisjZGVmaW5lIFRTVU5BTUlfSE9TRShoKQkJKCgodW5zaWduZWQgbG9uZykoaCkpIDw8IDMzKQorI2RlZmluZSBUU1VOQU1JX0JBU0UJCShJREVOVF9BRERSICsgVFNfQklBUykKKworI2RlZmluZSBUU1VOQU1JX01FTShoKQkJKFRTVU5BTUlfQkFTRStUU1VOQU1JX0hPU0UoaCkgKyAweDAwMDAwMDAwMFVMKQorI2RlZmluZSBfVFNVTkFNSV9JQUNLX1NDKGgpCShUU1VOQU1JX0JBU0UrVFNVTkFNSV9IT1NFKGgpICsgMHgxRjgwMDAwMDBVTCkKKyNkZWZpbmUgVFNVTkFNSV9JTyhoKQkJKFRTVU5BTUlfQkFTRStUU1VOQU1JX0hPU0UoaCkgKyAweDFGQzAwMDAwMFVMKQorI2RlZmluZSBUU1VOQU1JX0NPTkYoaCkJCShUU1VOQU1JX0JBU0UrVFNVTkFNSV9IT1NFKGgpICsgMHgxRkUwMDAwMDBVTCkKKworI2RlZmluZSBUU1VOQU1JX0lBQ0tfU0MJCV9UU1VOQU1JX0lBQ0tfU0MoMCkgLyogaGFjayEgKi8KKworCisvKiAKKyAqIFRoZSBjYW5vbmljYWwgbm9uLXJlbWFwZWQgSS9PIGFuZCBNRU0gYWRkcmVzc2VzIGhhdmUgdGhlc2UgdmFsdWVzCisgKiBzdWJ0cmFjdGVkIG91dC4gIFRoaXMgaXMgYXJyYW5nZWQgc28gdGhhdCBmb2xrcyBtYW5pcHVsYXRpbmcgSVNBCisgKiBkZXZpY2VzIGNhbiB1c2UgdGhlaXIgZmFtaWxpYXIgbnVtYmVycyBhbmQgaGF2ZSB0aGVtIG1hcCB0byBidXMgMC4KKyAqLworCisjZGVmaW5lIFRTVU5BTUlfSU9fQklBUyAgICAgICAgICBUU1VOQU1JX0lPKDApCisjZGVmaW5lIFRTVU5BTUlfTUVNX0JJQVMgICAgICAgICBUU1VOQU1JX01FTSgwKQorCisvKiBUaGUgSU8gYWRkcmVzcyBzcGFjZSBpcyBsYXJnZXIgdGhhbiAweGZmZmYgKi8KKyNkZWZpbmUgVFNVTkFNSV9JT19TUEFDRQkoVFNVTkFNSV9DT05GKDApIC0gVFNVTkFNSV9JTygwKSkKKworLyogT2Zmc2V0IGJldHdlZW4gcmFtIHBoeXNpY2FsIGFkZHJlc3NlcyBhbmQgcGNpNjQgREFDIGJ1cyBhZGRyZXNzZXMuICAqLworI2RlZmluZSBUU1VOQU1JX0RBQ19PRkZTRVQJKDFVTCA8PCA0MCkKKworLyoKKyAqIERhdGEgc3RydWN0dXJlIGZvciBoYW5kbGluZyBUU1VOQU1JIG1hY2hpbmUgY2hlY2tzOgorICovCitzdHJ1Y3QgZWxfVFNVTkFNSV9zeXNkYXRhX21jaGVjayB7Cit9OworCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpZm5kZWYgX19FWFRFUk5fSU5MSU5FCisjZGVmaW5lIF9fRVhURVJOX0lOTElORSBleHRlcm4gaW5saW5lCisjZGVmaW5lIF9fSU9fRVhURVJOX0lOTElORQorI2VuZGlmCisKKy8qCisgKiBJL08gZnVuY3Rpb25zOgorICoKKyAqIFRTVU5BTUksIHRoZSAyMT8/PyBQQ0kvbWVtb3J5IHN1cHBvcnQgY2hpcHNldCBmb3IgdGhlIEVWNiAoMjEyNjQpCisgKiBjYW4gb25seSB1c2UgbGluZWFyIGFjY2Vzc2VzIHRvIGdldCBhdCBQQ0kgbWVtb3J5IGFuZCBJL08gc3BhY2VzLgorICovCisKKy8qCisgKiBNZW1vcnkgZnVuY3Rpb25zLiAgYWxsIGFjY2Vzc2VzIGFyZSBkb25lIHRocm91Z2ggbGluZWFyIHNwYWNlLgorICovCisKK19fRVhURVJOX0lOTElORSB2b2lkIF9faW9tZW0gKnRzdW5hbWlfaW9wb3J0bWFwKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gKHZvaWQgX19pb21lbSAqKShhZGRyICsgVFNVTkFNSV9JT19CSUFTKTsKK30KKworX19FWFRFUk5fSU5MSU5FIHZvaWQgX19pb21lbSAqdHN1bmFtaV9pb3JlbWFwKHVuc2lnbmVkIGxvbmcgYWRkciwgCisJCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlyZXR1cm4gKHZvaWQgX19pb21lbSAqKShhZGRyICsgVFNVTkFNSV9NRU1fQklBUyk7Cit9CisKK19fRVhURVJOX0lOTElORSBpbnQgdHN1bmFtaV9pc19pb2FkZHIodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXJldHVybiBhZGRyID49IFRTVU5BTUlfQkFTRTsKK30KKworX19FWFRFUk5fSU5MSU5FIGludCB0c3VuYW1pX2lzX21taW8oY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICp4YWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZykgeGFkZHI7CisJcmV0dXJuIChhZGRyICYgMHgxMDAwMDAwMDBVTCkgPT0gMDsKK30KKworI3VuZGVmIF9fSU9fUFJFRklYCisjZGVmaW5lIF9fSU9fUFJFRklYCQl0c3VuYW1pCisjZGVmaW5lIHRzdW5hbWlfdHJpdmlhbF9yd19idwkxCisjZGVmaW5lIHRzdW5hbWlfdHJpdmlhbF9yd19scQkxCisjZGVmaW5lIHRzdW5hbWlfdHJpdmlhbF9pb19idwkxCisjZGVmaW5lIHRzdW5hbWlfdHJpdmlhbF9pb19scQkxCisjZGVmaW5lIHRzdW5hbWlfdHJpdmlhbF9pb3VubWFwCTEKKyNpbmNsdWRlIDxhc20vaW9fdHJpdmlhbC5oPgorCisjaWZkZWYgX19JT19FWFRFUk5fSU5MSU5FCisjdW5kZWYgX19FWFRFUk5fSU5MSU5FCisjdW5kZWYgX19JT19FWFRFUk5fSU5MSU5FCisjZW5kaWYKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9fQUxQSEFfVFNVTkFNSV9fSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9jb3JlX3dpbGRmaXJlLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9jb3JlX3dpbGRmaXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJhZjgwMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL2NvcmVfd2lsZGZpcmUuaApAQCAtMCwwICsxLDMxOCBAQAorI2lmbmRlZiBfX0FMUEhBX1dJTERGSVJFX19IX18KKyNkZWZpbmUgX19BTFBIQV9XSUxERklSRV9fSF9fCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9jb21waWxlci5oPgorCisjZGVmaW5lIFdJTERGSVJFX01BWF9RQkIJOAkvKiBtb3JlIHRoYW4gOCByZXF1aXJlcyBvdGhlciBtb2RzICovCisjZGVmaW5lIFdJTERGSVJFX1BDQV9QRVJfUUJCCTQKKyNkZWZpbmUgV0lMREZJUkVfSVJRX1BFUl9QQ0EJNjQKKworI2RlZmluZSBXSUxERklSRV9OUl9JUlFTIFwKKyAgKFdJTERGSVJFX01BWF9RQkIgKiBXSUxERklSRV9QQ0FfUEVSX1FCQiAqIFdJTERGSVJFX0lSUV9QRVJfUENBKQorCitleHRlcm4gdW5zaWduZWQgY2hhciB3aWxkZmlyZV9oYXJkX3FiYl9tYXBbV0lMREZJUkVfTUFYX1FCQl07CitleHRlcm4gdW5zaWduZWQgY2hhciB3aWxkZmlyZV9zb2Z0X3FiYl9tYXBbV0lMREZJUkVfTUFYX1FCQl07CisjZGVmaW5lIFFCQl9NQVBfRU1QVFkJMHhmZgorCitleHRlcm4gdW5zaWduZWQgbG9uZyB3aWxkZmlyZV9oYXJkX3FiYl9tYXNrOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgd2lsZGZpcmVfc29mdF9xYmJfbWFzazsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHdpbGRmaXJlX2dwX21hc2s7CitleHRlcm4gdW5zaWduZWQgbG9uZyB3aWxkZmlyZV9oc19tYXNrOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgd2lsZGZpcmVfaW9wX21hc2s7CitleHRlcm4gdW5zaWduZWQgbG9uZyB3aWxkZmlyZV9pb3JfbWFzazsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHdpbGRmaXJlX3BjYV9tYXNrOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgd2lsZGZpcmVfY3B1X21hc2s7CitleHRlcm4gdW5zaWduZWQgbG9uZyB3aWxkZmlyZV9tZW1fbWFzazsKKworI2RlZmluZSBXSUxERklSRV9RQkJfRVhJU1RTKHFiYm5vKSAod2lsZGZpcmVfc29mdF9xYmJfbWFzayAmICgxIDw8IChxYmJubykpKQorCisjZGVmaW5lIFdJTERGSVJFX01FTV9FWElTVFMocWJibm8pICh3aWxkZmlyZV9tZW1fbWFzayAmICgweGYgPDwgKChxYmJubykgPDwgMikpKQorCisjZGVmaW5lIFdJTERGSVJFX1BDQV9FWElTVFMocWJibm8sIHBjYW5vKSBcCisJCSh3aWxkZmlyZV9wY2FfbWFzayAmICgxIDw8ICgoKHFiYm5vKSA8PCAyKSArIChwY2FubykpKSkKKwordHlwZWRlZiBzdHJ1Y3QgeworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgY3NyIF9fYXR0cmlidXRlX18oKGFsaWduZWQoNjQpKSk7Cit9IHdpbGRmaXJlXzY0OworCit0eXBlZGVmIHN0cnVjdCB7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBjc3IgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgyNTYpKSk7Cit9IHdpbGRmaXJlXzI1NjsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgY3NyIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMjA0OCkpKTsKK30gd2lsZGZpcmVfMms7CisKK3R5cGVkZWYgc3RydWN0IHsKKwl3aWxkZmlyZV82NAlxc2Rfd2hhbWk7CisJd2lsZGZpcmVfNjQJcXNkX3JldjsKKwl3aWxkZmlyZV82NAlxc2RfcG9ydF9wcmVzZW50OworCXdpbGRmaXJlXzY0CXFzZF9wb3J0X2FjdGl2ZTsKKwl3aWxkZmlyZV82NAlxc2RfZmF1bHRfZW5hOworCXdpbGRmaXJlXzY0CXFzZF9jcHVfaW50X2VuYTsKKwl3aWxkZmlyZV82NAlxc2RfbWVtX2NvbmZpZzsKKwl3aWxkZmlyZV82NAlxc2RfZXJyX3N1bTsKKwl3aWxkZmlyZV82NAljZV9zdW1bNF07CisJd2lsZGZpcmVfNjQJZGV2X2luaXRbNF07CisJd2lsZGZpcmVfNjQJaXRfaW50WzRdOworCXdpbGRmaXJlXzY0CWlwX2ludFs0XTsKKwl3aWxkZmlyZV82NAl1Y2Vfc3VtWzRdOworCXdpbGRmaXJlXzY0CXNlX3N1bV9fbm9uX2Rldl9pbnRbNF07CisJd2lsZGZpcmVfNjQJc2NyYXRjaFs0XTsKKwl3aWxkZmlyZV82NAlxc2RfdGltZXI7CisJd2lsZGZpcmVfNjQJcXNkX2RpYWc7Cit9IHdpbGRmaXJlX3FzZDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXdpbGRmaXJlXzI1Nglxc2Rfd2hhbWk7CisJd2lsZGZpcmVfMjU2CV9fcGFkMTsKKwl3aWxkZmlyZV8yNTYJY2Vfc3VtOworCXdpbGRmaXJlXzI1NglkZXZfaW5pdDsKKwl3aWxkZmlyZV8yNTYJaXRfaW50OworCXdpbGRmaXJlXzI1NglpcF9pbnQ7CisJd2lsZGZpcmVfMjU2CXVjZV9zdW07CisJd2lsZGZpcmVfMjU2CXNlX3N1bTsKK30gd2lsZGZpcmVfZmFzdF9xc2Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKwl3aWxkZmlyZV8yawlxc2FfcWJiX2lkOworCXdpbGRmaXJlXzJrCV9fcGFkMTsKKwl3aWxkZmlyZV8yawlxc2FfcG9ydF9lbmE7CisJd2lsZGZpcmVfMmsJcXNhX3NjcmF0Y2g7CisJd2lsZGZpcmVfMmsJcXNhX2NvbmZpZ1s1XTsKKwl3aWxkZmlyZV8yawlxc2FfcmVmX2ludDsKKwl3aWxkZmlyZV8yawlxc2FfcWJiX3BvcFsyXTsKKwl3aWxkZmlyZV8yawlxc2FfZHRhZ19mYzsKKwl3aWxkZmlyZV8yawlfX3BhZDJbM107CisJd2lsZGZpcmVfMmsJcXNhX2RpYWc7CisJd2lsZGZpcmVfMmsJcXNhX2RpYWdfbG9ja1s0XTsKKwl3aWxkZmlyZV8yawlfX3BhZDNbMTFdOworCXdpbGRmaXJlXzJrCXFzYV9jcHVfZXJyX3N1bTsKKwl3aWxkZmlyZV8yawlxc2FfbWlzY19lcnJfc3VtOworCXdpbGRmaXJlXzJrCXFzYV90bW9fZXJyX3N1bTsKKwl3aWxkZmlyZV8yawlxc2FfZXJyX2VuYTsKKwl3aWxkZmlyZV8yawlxc2FfdG1vX2NvbmZpZzsKKwl3aWxkZmlyZV8yawlxc2FfaWxsX2NtZF9lcnJfc3VtOworCXdpbGRmaXJlXzJrCV9fcGFkNFsyNl07CisJd2lsZGZpcmVfMmsJcXNhX2J1c3lfbWFzazsKKwl3aWxkZmlyZV8yawlxc2FfYXJyX3ZhbGlkOworCXdpbGRmaXJlXzJrCV9fcGFkNVsyXTsKKwl3aWxkZmlyZV8yawlxc2FfcG9ydF9tYXBbNF07CisJd2lsZGZpcmVfMmsJcXNhX2Fycl9hZGRyWzhdOworCXdpbGRmaXJlXzJrCXFzYV9hcnJfbWFza1s4XTsKK30gd2lsZGZpcmVfcXNhOworCit0eXBlZGVmIHN0cnVjdCB7CisJd2lsZGZpcmVfNjQJaW9hX2NvbmZpZzsKKwl3aWxkZmlyZV82NAlpb2RfY29uZmlnOworCXdpbGRmaXJlXzY0CWlvcF9zd2l0Y2hfY3JlZGl0czsKKwl3aWxkZmlyZV82NAlfX3BhZDE7CisJd2lsZGZpcmVfNjQJaW9wX2hvc2VfY3JlZGl0czsKKwl3aWxkZmlyZV82NAlfX3BhZDJbMTFdOworCXN0cnVjdCB7CisJCXdpbGRmaXJlXzY0CV9fcGFkMzsKKwkJd2lsZGZpcmVfNjQJaW5pdDsKKwl9IGlvcF9ob3NlWzRdOworCXdpbGRmaXJlXzY0CWlvYV9ob3NlXzBfY3RybDsKKwl3aWxkZmlyZV82NAlpb2RfaG9zZV8wX2N0cmw7CisJd2lsZGZpcmVfNjQJaW9hX2hvc2VfMV9jdHJsOworCXdpbGRmaXJlXzY0CWlvZF9ob3NlXzFfY3RybDsKKwl3aWxkZmlyZV82NAlpb2FfaG9zZV8yX2N0cmw7CisJd2lsZGZpcmVfNjQJaW9kX2hvc2VfMl9jdHJsOworCXdpbGRmaXJlXzY0CWlvYV9ob3NlXzNfY3RybDsKKwl3aWxkZmlyZV82NAlpb2RfaG9zZV8zX2N0cmw7CisJc3RydWN0IHsKKwkJd2lsZGZpcmVfNjQJdGFyZ2V0OworCQl3aWxkZmlyZV82NAlfX3BhZDQ7CisJfSBpb3BfZGV2X2ludFs0XTsKKworCXdpbGRmaXJlXzY0CWlvcF9lcnJfaW50X3RhcmdldDsKKwl3aWxkZmlyZV82NAlfX3BhZDVbN107CisJd2lsZGZpcmVfNjQJaW9wX3FiYl9lcnJfc3VtOworCXdpbGRmaXJlXzY0CV9fcGFkNjsKKwl3aWxkZmlyZV82NAlpb3BfcWJiX3NlX3N1bTsKKwl3aWxkZmlyZV82NAlfX3BhZDc7CisJd2lsZGZpcmVfNjQJaW9hX2Vycl9zdW07CisJd2lsZGZpcmVfNjQJaW9kX2Vycl9zdW07CisJd2lsZGZpcmVfNjQJX19wYWQ4WzRdOworCXdpbGRmaXJlXzY0CWlvYV9kaWFnX2ZvcmNlX2VycjsKKwl3aWxkZmlyZV82NAlpb2RfZGlhZ19mb3JjZV9lcnI7CisJd2lsZGZpcmVfNjQJX19wYWQ5WzRdOworCXdpbGRmaXJlXzY0CWlvcF9kaWFnX3NlbmRfZXJyX2ludDsKKwl3aWxkZmlyZV82NAlfX3BhZDEwWzE1XTsKKwl3aWxkZmlyZV82NAlpb2Ffc2NyYXRjaDsKKwl3aWxkZmlyZV82NAlpb2Rfc2NyYXRjaDsKK30gd2lsZGZpcmVfaW9wOworCit0eXBlZGVmIHN0cnVjdCB7CisJd2lsZGZpcmVfMmsJZ3BhX3FiYl9tYXBbNF07CisJd2lsZGZpcmVfMmsJZ3BhX21lbV9wb3BfbWFwOworCXdpbGRmaXJlXzJrCWdwYV9zY3JhdGNoOworCXdpbGRmaXJlXzJrCWdwYV9kaWFnOworCXdpbGRmaXJlXzJrCWdwYV9jb25maWdfMDsKKwl3aWxkZmlyZV8yawlfX3BhZDE7CisJd2lsZGZpcmVfMmsJZ3BhX2luaXRfaWQ7CisJd2lsZGZpcmVfMmsJZ3BhX2NvbmZpZ18yOworCS8qIG5vdCBjb21wbGV0ZSAqLworfSB3aWxkZmlyZV9ncDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXdpbGRmaXJlXzY0CXBjYV93aGF0X2FtX2k7CisJd2lsZGZpcmVfNjQJcGNhX2Vycl9zdW07CisJd2lsZGZpcmVfNjQJcGNhX2RpYWdfZm9yY2VfZXJyOworCXdpbGRmaXJlXzY0CXBjYV9kaWFnX3NlbmRfZXJyX2ludDsKKwl3aWxkZmlyZV82NAlwY2FfaG9zZV9jcmVkaXRzOworCXdpbGRmaXJlXzY0CXBjYV9zY3JhdGNoOworCXdpbGRmaXJlXzY0CXBjYV9taWNyb19hZGRyOworCXdpbGRmaXJlXzY0CXBjYV9taWNyb19kYXRhOworCXdpbGRmaXJlXzY0CXBjYV9wZW5kX2ludDsKKwl3aWxkZmlyZV82NAlwY2Ffc2VudF9pbnQ7CisJd2lsZGZpcmVfNjQJX19wYWQxOworCXdpbGRmaXJlXzY0CXBjYV9zdGRpb19lZGdlX2xldmVsOworCXdpbGRmaXJlXzY0CV9fcGFkMls1Ml07CisJc3RydWN0IHsKKwkJd2lsZGZpcmVfNjQJdGFyZ2V0OworCQl3aWxkZmlyZV82NAllbmFibGU7CisJfSBwY2FfaW50WzRdOworCXdpbGRmaXJlXzY0CV9fcGFkM1s1Nl07CisJd2lsZGZpcmVfNjQJcGNhX2FsdF9zZW50X2ludFszMl07Cit9IHdpbGRmaXJlX3BjYTsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXdpbGRmaXJlXzY0CW5lX3doYXRfYW1faTsKKwkvKiBub3QgY29tcGxldGUgKi8KK30gd2lsZGZpcmVfbmU7CisKK3R5cGVkZWYgc3RydWN0IHsKKwl3aWxkZmlyZV82NAlmZV93aGF0X2FtX2k7CisJLyogbm90IGNvbXBsZXRlICovCit9IHdpbGRmaXJlX2ZlOworCit0eXBlZGVmIHN0cnVjdCB7CisJd2lsZGZpcmVfNjQJcGNpX2lvX2FkZHJfZXh0OworCXdpbGRmaXJlXzY0CXBjaV9jdHJsOworCXdpbGRmaXJlXzY0CXBjaV9lcnJfc3VtOworCXdpbGRmaXJlXzY0CXBjaV9lcnJfYWRkcjsKKwl3aWxkZmlyZV82NAlwY2lfc3RhbGxfY250OworCXdpbGRmaXJlXzY0CXBjaV9pYWNrX3NwZWNpYWw7CisJd2lsZGZpcmVfNjQJX19wYWQxWzJdOworCXdpbGRmaXJlXzY0CXBjaV9wZW5kX2ludDsKKwl3aWxkZmlyZV82NAlwY2lfc2VudF9pbnQ7CisJd2lsZGZpcmVfNjQJX19wYWQyWzU0XTsKKwlzdHJ1Y3QgeworCQl3aWxkZmlyZV82NAl3YmFzZTsKKwkJd2lsZGZpcmVfNjQJd21hc2s7CisJCXdpbGRmaXJlXzY0CXRiYXNlOworCX0gcGNpX3dpbmRvd1s0XTsKKwl3aWxkZmlyZV82NAlwY2lfZmx1c2hfdGxiOworCXdpbGRmaXJlXzY0CXBjaV9wZXJmX21vbjsKK30gd2lsZGZpcmVfcGNpOworCisjZGVmaW5lIFdJTERGSVJFX0VOVElUWV9TSElGVAkJMTgKKworI2RlZmluZSBXSUxERklSRV9HUF9FTlRJVFkJCSgweDEwVUwgPDwgV0lMREZJUkVfRU5USVRZX1NISUZUKQorI2RlZmluZSBXSUxERklSRV9JT1BfRU5USVRZCQkoMHgwOFVMIDw8IFdJTERGSVJFX0VOVElUWV9TSElGVCkKKyNkZWZpbmUgV0lMREZJUkVfUVNBX0VOVElUWQkJKDB4MDRVTCA8PCBXSUxERklSRV9FTlRJVFlfU0hJRlQpCisjZGVmaW5lIFdJTERGSVJFX1FTRF9FTlRJVFlfU0xPVwkoMHgwNVVMIDw8IFdJTERGSVJFX0VOVElUWV9TSElGVCkKKyNkZWZpbmUgV0lMREZJUkVfUVNEX0VOVElUWV9GQVNUCSgweDAxVUwgPDwgV0lMREZJUkVfRU5USVRZX1NISUZUKQorCisjZGVmaW5lIFdJTERGSVJFX1BDQV9FTlRJVFkocGNhKQkoKDB4Y3wocGNhKSk8PFdJTERGSVJFX0VOVElUWV9TSElGVCkKKworI2RlZmluZSBXSUxERklSRV9CQVNFCQkoSURFTlRfQUREUiB8ICgxVUwgPDwgNDApKQorCisjZGVmaW5lIFdJTERGSVJFX1FCQl9NQVNLCTB4MGZVTAkvKiBmb3Igbm93LCBvbmx5IDQgYml0cy8xNiBRQkJzICovCisKKyNkZWZpbmUgV0lMREZJUkVfUUJCKHEpCQkoKH4oKGxvbmcpKHEpKSAmIFdJTERGSVJFX1FCQl9NQVNLKSA8PCAzNikKKyNkZWZpbmUgV0lMREZJUkVfSE9TRShoKQkoKGxvbmcpKGgpIDw8IDMzKQorCisjZGVmaW5lIFdJTERGSVJFX1FCQl9JTyhxKQkoV0lMREZJUkVfQkFTRSB8IFdJTERGSVJFX1FCQihxKSkKKyNkZWZpbmUgV0lMREZJUkVfUUJCX0hPU0UocSxoKQkoV0lMREZJUkVfUUJCX0lPKHEpIHwgV0lMREZJUkVfSE9TRShoKSkKKworI2RlZmluZSBXSUxERklSRV9NRU0ocSxoKQkoV0lMREZJUkVfUUJCX0hPU0UocSxoKSB8IDB4MDAwMDAwMDAwVUwpCisjZGVmaW5lIFdJTERGSVJFX0NPTkYocSxoKQkoV0lMREZJUkVfUUJCX0hPU0UocSxoKSB8IDB4MUZFMDAwMDAwVUwpCisjZGVmaW5lIFdJTERGSVJFX0lPKHEsaCkJKFdJTERGSVJFX1FCQl9IT1NFKHEsaCkgfCAweDFGRjAwMDAwMFVMKQorCisjZGVmaW5lIFdJTERGSVJFX3FzZChxKSBcCisgKCh3aWxkZmlyZV9xc2QgKikoV0lMREZJUkVfUUJCX0lPKHEpfFdJTERGSVJFX1FTRF9FTlRJVFlfU0xPV3woKCgxVUw8PDEzKS0xKTw8MjMpKSkKKworI2RlZmluZSBXSUxERklSRV9mYXN0X3FzZCgpIFwKKyAoKHdpbGRmaXJlX2Zhc3RfcXNkICopKFdJTERGSVJFX1FCQl9JTygwKXxXSUxERklSRV9RU0RfRU5USVRZX0ZBU1R8KCgoMVVMPDwxMyktMSk8PDIzKSkpCisKKyNkZWZpbmUgV0lMREZJUkVfcXNhKHEpIFwKKyAoKHdpbGRmaXJlX3FzYSAqKShXSUxERklSRV9RQkJfSU8ocSl8V0lMREZJUkVfUVNBX0VOVElUWXwoKCgxVUw8PDEzKS0xKTw8MjMpKSkKKworI2RlZmluZSBXSUxERklSRV9pb3AocSkgXAorICgod2lsZGZpcmVfaW9wICopKFdJTERGSVJFX1FCQl9JTyhxKXxXSUxERklSRV9JT1BfRU5USVRZfCgoKDFVTDw8MTMpLTEpPDwyMykpKQorCisjZGVmaW5lIFdJTERGSVJFX2dwKHEpIFwKKyAoKHdpbGRmaXJlX2dwICopKFdJTERGSVJFX1FCQl9JTyhxKXxXSUxERklSRV9HUF9FTlRJVFl8KCgoMVVMPDwxMyktMSk8PDIzKSkpCisKKyNkZWZpbmUgV0lMREZJUkVfcGNhKHEscGNhKSBcCisgKCh3aWxkZmlyZV9wY2EgKikoV0lMREZJUkVfUUJCX0lPKHEpfFdJTERGSVJFX1BDQV9FTlRJVFkocGNhKXwoKCgxVUw8PDEzKS0xKTw8MjMpKSkKKworI2RlZmluZSBXSUxERklSRV9uZShxLHBjYSkgXAorICgod2lsZGZpcmVfbmUgKikoV0lMREZJUkVfUUJCX0lPKHEpfFdJTERGSVJFX1BDQV9FTlRJVFkocGNhKXwoKCgxVUw8PDEzKS0xKTw8MjMpfCgxVUw8PDE2KSkpCisKKyNkZWZpbmUgV0lMREZJUkVfZmUocSxwY2EpIFwKKyAoKHdpbGRmaXJlX2ZlICopKFdJTERGSVJFX1FCQl9JTyhxKXxXSUxERklSRV9QQ0FfRU5USVRZKHBjYSl8KCgoMVVMPDwxMyktMSk8PDIzKXwoM1VMPDwxNSkpKQorCisjZGVmaW5lIFdJTERGSVJFX3BjaShxLGgpIFwKKyAoKHdpbGRmaXJlX3BjaSAqKShXSUxERklSRV9RQkJfSU8ocSl8V0lMREZJUkVfUENBX0VOVElUWSgoKGgpJjYpPj4xKXwoKCgoaCkmMSl8Mik8PDE2KXwoKCgxVUw8PDEzKS0xKTw8MjMpKSkKKworI2RlZmluZSBXSUxERklSRV9JT19CSUFTICAgICAgICBXSUxERklSRV9JTygwLDApCisjZGVmaW5lIFdJTERGSVJFX01FTV9CSUFTICAgICAgIFdJTERGSVJFX01FTSgwLDApIC8qID8/PyAqLworCisvKiBUaGUgSU8gYWRkcmVzcyBzcGFjZSBpcyBsYXJnZXIgdGhhbiAweGZmZmYgKi8KKyNkZWZpbmUgV0lMREZJUkVfSU9fU1BBQ0UJKDhVTCoxMDI0KjEwMjQpCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpZm5kZWYgX19FWFRFUk5fSU5MSU5FCisjZGVmaW5lIF9fRVhURVJOX0lOTElORSBleHRlcm4gaW5saW5lCisjZGVmaW5lIF9fSU9fRVhURVJOX0lOTElORQorI2VuZGlmCisKKy8qCisgKiBNZW1vcnkgZnVuY3Rpb25zLiAgYWxsIGFjY2Vzc2VzIGFyZSBkb25lIHRocm91Z2ggbGluZWFyIHNwYWNlLgorICovCisKK19fRVhURVJOX0lOTElORSB2b2lkIF9faW9tZW0gKndpbGRmaXJlX2lvcG9ydG1hcCh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcmV0dXJuICh2b2lkIF9faW9tZW0gKikoYWRkciArIFdJTERGSVJFX0lPX0JJQVMpOworfQorCitfX0VYVEVSTl9JTkxJTkUgdm9pZCBfX2lvbWVtICp3aWxkZmlyZV9pb3JlbWFwKHVuc2lnbmVkIGxvbmcgYWRkciwgCisJCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJcmV0dXJuICh2b2lkIF9faW9tZW0gKikoYWRkciArIFdJTERGSVJFX01FTV9CSUFTKTsKK30KKworX19FWFRFUk5fSU5MSU5FIGludCB3aWxkZmlyZV9pc19pb2FkZHIodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXJldHVybiBhZGRyID49IFdJTERGSVJFX0JBU0U7Cit9CisKK19fRVhURVJOX0lOTElORSBpbnQgd2lsZGZpcmVfaXNfbW1pbyhjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKnhhZGRyKQoreworCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKWFkZHI7CisJcmV0dXJuIChhZGRyICYgMHgxMDAwMDAwMDBVTCkgPT0gMDsKK30KKworI3VuZGVmIF9fSU9fUFJFRklYCisjZGVmaW5lIF9fSU9fUFJFRklYCQkJd2lsZGZpcmUKKyNkZWZpbmUgd2lsZGZpcmVfdHJpdmlhbF9yd19idwkJMQorI2RlZmluZSB3aWxkZmlyZV90cml2aWFsX3J3X2xxCQkxCisjZGVmaW5lIHdpbGRmaXJlX3RyaXZpYWxfaW9fYncJCTEKKyNkZWZpbmUgd2lsZGZpcmVfdHJpdmlhbF9pb19scQkJMQorI2RlZmluZSB3aWxkZmlyZV90cml2aWFsX2lvdW5tYXAJMQorI2luY2x1ZGUgPGFzbS9pb190cml2aWFsLmg+CisKKyNpZmRlZiBfX0lPX0VYVEVSTl9JTkxJTkUKKyN1bmRlZiBfX0VYVEVSTl9JTkxJTkUKKyN1bmRlZiBfX0lPX0VYVEVSTl9JTkxJTkUKKyNlbmRpZgorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX19BTFBIQV9XSUxERklSRV9fSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9jcHV0aW1lLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9jcHV0aW1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk1NzdmZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL2NwdXRpbWUuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19BTFBIQV9DUFVUSU1FX0gKKyNkZWZpbmUgX19BTFBIQV9DUFVUSU1FX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2NwdXRpbWUuaD4KKworI2VuZGlmIC8qIF9fQUxQSEFfQ1BVVElNRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9jdXJyZW50LmggYi9pbmNsdWRlL2FzbS1hbHBoYS9jdXJyZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ4OGExMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL2N1cnJlbnQuaApAQCAtMCwwICsxLDkgQEAKKyNpZm5kZWYgX0FMUEhBX0NVUlJFTlRfSAorI2RlZmluZSBfQUxQSEFfQ1VSUkVOVF9ICisKKyNpbmNsdWRlIDxsaW51eC90aHJlYWRfaW5mby5oPgorCisjZGVmaW5lIGdldF9jdXJyZW50KCkJKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+dGFzayArIDApCisjZGVmaW5lIGN1cnJlbnQJCWdldF9jdXJyZW50KCkKKworI2VuZGlmIC8qIF9BTFBIQV9DVVJSRU5UX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL2RlbGF5LmggYi9pbmNsdWRlL2FzbS1hbHBoYS9kZWxheS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhYTNmNDEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9kZWxheS5oCkBAIC0wLDAgKzEsMTAgQEAKKyNpZm5kZWYgX19BTFBIQV9ERUxBWV9ICisjZGVmaW5lIF9fQUxQSEFfREVMQVlfSAorCitleHRlcm4gdm9pZCBfX2RlbGF5KGludCBsb29wcyk7CitleHRlcm4gdm9pZCB1ZGVsYXkodW5zaWduZWQgbG9uZyB1c2Vjcyk7CisKK2V4dGVybiB2b2lkIG5kZWxheSh1bnNpZ25lZCBsb25nIG5zZWNzKTsKKyNkZWZpbmUgbmRlbGF5IG5kZWxheQorCisjZW5kaWYgLyogZGVmaW5lZChfX0FMUEhBX0RFTEFZX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9kaXY2NC5oIGIvaW5jbHVkZS9hc20tYWxwaGEvZGl2NjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2Q5NzhjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvZGl2NjQuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZGl2NjQuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL2RtYS1tYXBwaW5nLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9kbWEtbWFwcGluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2NzVmMjgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9kbWEtbWFwcGluZy5oCkBAIC0wLDAgKzEsNjcgQEAKKyNpZm5kZWYgX0FMUEhBX0RNQV9NQVBQSU5HX0gKKyNkZWZpbmUgX0FMUEhBX0RNQV9NQVBQSU5HX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjaWZkZWYgQ09ORklHX1BDSQorCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisKKyNkZWZpbmUgZG1hX21hcF9zaW5nbGUoZGV2LCB2YSwgc2l6ZSwgZGlyKQkJXAorCQlwY2lfbWFwX3NpbmdsZShhbHBoYV9nZW5kZXZfdG9fcGNpKGRldiksIHZhLCBzaXplLCBkaXIpCisjZGVmaW5lIGRtYV91bm1hcF9zaW5nbGUoZGV2LCBhZGRyLCBzaXplLCBkaXIpCQlcCisJCXBjaV91bm1hcF9zaW5nbGUoYWxwaGFfZ2VuZGV2X3RvX3BjaShkZXYpLCBhZGRyLCBzaXplLCBkaXIpCisjZGVmaW5lIGRtYV9hbGxvY19jb2hlcmVudChkZXYsIHNpemUsIGFkZHIsIGdmcCkJXAorCQlwY2lfYWxsb2NfY29uc2lzdGVudChhbHBoYV9nZW5kZXZfdG9fcGNpKGRldiksIHNpemUsIGFkZHIpCisjZGVmaW5lIGRtYV9mcmVlX2NvaGVyZW50KGRldiwgc2l6ZSwgdmEsIGFkZHIpCQlcCisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWxwaGFfZ2VuZGV2X3RvX3BjaShkZXYpLCBzaXplLCB2YSwgYWRkcikKKyNkZWZpbmUgZG1hX21hcF9wYWdlKGRldiwgcGFnZSwgb2ZmLCBzaXplLCBkaXIpCQlcCisJCXBjaV9tYXBfc2luZ2xlKGFscGhhX2dlbmRldl90b19wY2koZGV2KSwgcGFnZSwgb2ZmLCBzaXplLCBkaXIpCisjZGVmaW5lIGRtYV91bm1hcF9wYWdlKGRldiwgYWRkciwgc2l6ZSwgZGlyKQkJXAorCQlwY2lfdW5tYXBfcGFnZShhbHBoYV9nZW5kZXZfdG9fcGNpKGRldiksIGFkZHIsIHNpemUsIGRpcikKKyNkZWZpbmUgZG1hX21hcF9zZyhkZXYsIHNnLCBuZW50cywgZGlyKQkJCVwKKwkJcGNpX21hcF9zZyhhbHBoYV9nZW5kZXZfdG9fcGNpKGRldiksIHNnLCBuZW50cywgZGlyKQorI2RlZmluZSBkbWFfdW5tYXBfc2coZGV2LCBzZywgbmVudHMsIGRpcikJCVwKKwkJcGNpX3VubWFwX3NnKGFscGhhX2dlbmRldl90b19wY2koZGV2KSwgc2csIG5lbnRzLCBkaXIpCisjZGVmaW5lIGRtYV9zdXBwb3J0ZWQoZGV2LCBtYXNrKQkJCVwKKwkJcGNpX2RtYV9zdXBwb3J0ZWQoYWxwaGFfZ2VuZGV2X3RvX3BjaShkZXYpLCBtYXNrKQorI2RlZmluZSBkbWFfbWFwcGluZ19lcnJvcihhZGRyKQkJCQlcCisJCXBjaV9kbWFfbWFwcGluZ19lcnJvcihhZGRyKQorCisjZWxzZQkvKiBubyBQQ0kgLSBubyBJT01NVS4gKi8KKwordm9pZCAqZG1hX2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCisJCQkgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgaW50IGdmcCk7CitpbnQgZG1hX21hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZW50cywKKwkgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKTsKKworI2RlZmluZSBkbWFfZnJlZV9jb2hlcmVudChkZXYsIHNpemUsIHZhLCBhZGRyKQkJXAorCQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXZhLCBnZXRfb3JkZXIoc2l6ZSkpCisjZGVmaW5lIGRtYV9zdXBwb3J0ZWQoZGV2LCBtYXNrKQkJKG1hc2sgPCAweDAwZmZmZmZmVUwgPyAwIDogMSkKKyNkZWZpbmUgZG1hX21hcF9zaW5nbGUoZGV2LCB2YSwgc2l6ZSwgZGlyKQl2aXJ0X3RvX3BoeXModmEpCisjZGVmaW5lIGRtYV9tYXBfcGFnZShkZXYsIHBhZ2UsIG9mZiwgc2l6ZSwgZGlyKQkocGFnZV90b19wYShwYWdlKSArIG9mZikKKworI2RlZmluZSBkbWFfdW5tYXBfc2luZ2xlKGRldiwgYWRkciwgc2l6ZSwgZGlyKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGRtYV91bm1hcF9wYWdlKGRldiwgYWRkciwgc2l6ZSwgZGlyKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGRtYV91bm1hcF9zZyhkZXYsIHNnLCBuZW50cywgZGlyKQlkbyB7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgZG1hX21hcHBpbmdfZXJyb3IoYWRkcikgICgwKQorCisjZW5kaWYJLyogIUNPTkZJR19QQ0kgKi8KKworI2RlZmluZSBkbWFfYWxsb2Nfbm9uY29oZXJlbnQoZCwgcywgaCwgZikJZG1hX2FsbG9jX2NvaGVyZW50KGQsIHMsIGgsIGYpCisjZGVmaW5lIGRtYV9mcmVlX25vbmNvaGVyZW50KGQsIHMsIHYsIGgpCWRtYV9mcmVlX2NvaGVyZW50KGQsIHMsIHYsIGgpCisjZGVmaW5lIGRtYV9pc19jb25zaXN0ZW50KGRldikJCQkoMSkKKworaW50IGRtYV9zZXRfbWFzayhzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBtYXNrKTsKKworI2RlZmluZSBkbWFfc3luY19zaW5nbGVfZm9yX2NwdShkZXYsIGFkZHIsIHNpemUsIGRpcikJICBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGRldiwgYWRkciwgc2l6ZSwgZGlyKSAgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBkbWFfc3luY19zaW5nbGVfcmFuZ2UoZGV2LCBhZGRyLCBvZmYsIHNpemUsIGRpcikgIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZG1hX3N5bmNfc2dfZm9yX2NwdShkZXYsIHNnLCBuZW50cywgZGlyKQkgIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZG1hX3N5bmNfc2dfZm9yX2RldmljZShkZXYsIHNnLCBuZW50cywgZGlyKQkgIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZG1hX2NhY2hlX3N5bmModmEsIHNpemUsIGRpcikJCQkgIGRvIHsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBkbWFfZ2V0X2NhY2hlX2FsaWdubWVudCgpCQkJICBMMV9DQUNIRV9CWVRFUworCisjZW5kaWYJLyogX0FMUEhBX0RNQV9NQVBQSU5HX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL2RtYS5oIGIvaW5jbHVkZS9hc20tYWxwaGEvZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgzYWZhYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL2RtYS5oCkBAIC0wLDAgKzEsMzc3IEBACisvKgorICogaW5jbHVkZS9hc20tYWxwaGEvZG1hLmgKKyAqCisgKiBUaGlzIGlzIGVzc2VudGlhbGx5IHRoZSBzYW1lIGFzIHRoZSBpMzg2IERNQSBzdHVmZiwgYXMgdGhlIEFscGhhUENzCisgKiB1c2UgSVNBLWNvbXBhdGlibGUgZG1hLiAgVGhlIG9ubHkgZXh0ZW5zaW9uIGlzIHN1cHBvcnQgZm9yIGhpZ2gtcGFnZQorICogcmVnaXN0ZXJzIHRoYXQgYWxsb3cgdG8gc2V0IHRoZSB0b3AgOCBiaXRzIG9mIGEgMzItYml0IERNQSBhZGRyZXNzLgorICogVGhpcyByZWdpc3RlciBzaG91bGQgYmUgd3JpdHRlbiBsYXN0IHdoZW4gc2V0dGluZyB1cCBhIERNQSBhZGRyZXNzCisgKiBhcyB0aGlzIHdpbGwgYWxzbyBlbmFibGUgRE1BIGFjcm9zcyA2NCBLQiBib3VuZGFyaWVzLgorICovCisKKy8qICRJZDogZG1hLmgsdiAxLjcgMTk5Mi8xMi8xNCAwMDoyOTozNCByb290IEV4cCByb290ICQKKyAqIGxpbnV4L2luY2x1ZGUvYXNtL2RtYS5oOiBEZWZpbmVzIGZvciB1c2luZyBhbmQgYWxsb2NhdGluZyBkbWEgY2hhbm5lbHMuCisgKiBXcml0dGVuIGJ5IEhlbm51cyBCZXJnbWFuLCAxOTkyLgorICogSGlnaCBETUEgY2hhbm5lbCBzdXBwb3J0ICYgaW5mbyBieSBIYW5udSBTYXZvbGFpbmVuCisgKiBhbmQgSm9obiBCb3lkLCBOb3YuIDE5OTIuCisgKi8KKworI2lmbmRlZiBfQVNNX0RNQV9ICisjZGVmaW5lIF9BU01fRE1BX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNkZWZpbmUgZG1hX291dGIJb3V0YgorI2RlZmluZSBkbWFfaW5iCQlpbmIKKworLyoKKyAqIE5PVEVTIGFib3V0IERNQSB0cmFuc2ZlcnM6CisgKgorICogIGNvbnRyb2xsZXIgMTogY2hhbm5lbHMgMC0zLCBieXRlIG9wZXJhdGlvbnMsIHBvcnRzIDAwLTFGCisgKiAgY29udHJvbGxlciAyOiBjaGFubmVscyA0LTcsIHdvcmQgb3BlcmF0aW9ucywgcG9ydHMgQzAtREYKKyAqCisgKiAgLSBBTEwgcmVnaXN0ZXJzIGFyZSA4IGJpdHMgb25seSwgcmVnYXJkbGVzcyBvZiB0cmFuc2ZlciBzaXplCisgKiAgLSBjaGFubmVsIDQgaXMgbm90IHVzZWQgLSBjYXNjYWRlcyAxIGludG8gMi4KKyAqICAtIGNoYW5uZWxzIDAtMyBhcmUgYnl0ZSAtIGFkZHJlc3Nlcy9jb3VudHMgYXJlIGZvciBwaHlzaWNhbCBieXRlcworICogIC0gY2hhbm5lbHMgNS03IGFyZSB3b3JkIC0gYWRkcmVzc2VzL2NvdW50cyBhcmUgZm9yIHBoeXNpY2FsIHdvcmRzCisgKiAgLSB0cmFuc2ZlcnMgbXVzdCBub3QgY3Jvc3MgcGh5c2ljYWwgNjRLICgwLTMpIG9yIDEyOEsgKDUtNykgYm91bmRhcmllcworICogIC0gdHJhbnNmZXIgY291bnQgbG9hZGVkIHRvIHJlZ2lzdGVycyBpcyAxIGxlc3MgdGhhbiBhY3R1YWwgY291bnQKKyAqICAtIGNvbnRyb2xsZXIgMiBvZmZzZXRzIGFyZSBhbGwgZXZlbiAoMnggb2Zmc2V0cyBmb3IgY29udHJvbGxlciAxKQorICogIC0gcGFnZSByZWdpc3RlcnMgZm9yIDUtNyBkb24ndCB1c2UgZGF0YSBiaXQgMCwgcmVwcmVzZW50IDEyOEsgcGFnZXMKKyAqICAtIHBhZ2UgcmVnaXN0ZXJzIGZvciAwLTMgdXNlIGJpdCAwLCByZXByZXNlbnQgNjRLIHBhZ2VzCisgKgorICogRE1BIHRyYW5zZmVycyBhcmUgbGltaXRlZCB0byB0aGUgbG93ZXIgMTZNQiBvZiBfcGh5c2ljYWxfIG1lbW9yeS4gIAorICogTm90ZSB0aGF0IGFkZHJlc3NlcyBsb2FkZWQgaW50byByZWdpc3RlcnMgbXVzdCBiZSBfcGh5c2ljYWxfIGFkZHJlc3NlcywKKyAqIG5vdCBsb2dpY2FsIGFkZHJlc3NlcyAod2hpY2ggbWF5IGRpZmZlciBpZiBwYWdpbmcgaXMgYWN0aXZlKS4KKyAqCisgKiAgQWRkcmVzcyBtYXBwaW5nIGZvciBjaGFubmVscyAwLTM6CisgKgorICogICBBMjMgLi4uIEExNiBBMTUgLi4uIEE4ICBBNyAuLi4gQTAgICAgKFBoeXNpY2FsIGFkZHJlc3NlcykKKyAqICAgIHwgIC4uLiAgfCAgIHwgIC4uLiB8ICAgfCAgLi4uIHwKKyAqICAgIHwgIC4uLiAgfCAgIHwgIC4uLiB8ICAgfCAgLi4uIHwKKyAqICAgIHwgIC4uLiAgfCAgIHwgIC4uLiB8ICAgfCAgLi4uIHwKKyAqICAgUDcgIC4uLiAgUDAgIEE3IC4uLiBBMCAgQTcgLi4uIEEwICAgCisgKiB8ICAgIFBhZ2UgICAgfCBBZGRyIE1TQiB8IEFkZHIgTFNCIHwgICAoRE1BIHJlZ2lzdGVycykKKyAqCisgKiAgQWRkcmVzcyBtYXBwaW5nIGZvciBjaGFubmVscyA1LTc6CisgKgorICogICBBMjMgLi4uIEExNyBBMTYgQTE1IC4uLiBBOSBBOCBBNyAuLi4gQTEgQTAgICAgKFBoeXNpY2FsIGFkZHJlc3NlcykKKyAqICAgIHwgIC4uLiAgfCAgIFwgICBcICAgLi4uIFwgIFwgIFwgIC4uLiBcICBcCisgKiAgICB8ICAuLi4gIHwgICAgXCAgIFwgICAuLi4gXCAgXCAgXCAgLi4uIFwgIChub3QgdXNlZCkKKyAqICAgIHwgIC4uLiAgfCAgICAgXCAgIFwgICAuLi4gXCAgXCAgXCAgLi4uIFwKKyAqICAgUDcgIC4uLiAgUDEgKDApIEE3IEE2ICAuLi4gQTAgQTcgQTYgLi4uIEEwICAgCisgKiB8ICAgICAgUGFnZSAgICAgIHwgIEFkZHIgTVNCICAgfCAgQWRkciBMU0IgIHwgICAoRE1BIHJlZ2lzdGVycykKKyAqCisgKiBBZ2FpbiwgY2hhbm5lbHMgNS03IHRyYW5zZmVyIF9waHlzaWNhbF8gd29yZHMgKDE2IGJpdHMpLCBzbyBhZGRyZXNzZXMKKyAqIGFuZCBjb3VudHMgX211c3RfIGJlIHdvcmQtYWxpZ25lZCAodGhlIGxvd2VzdCBhZGRyZXNzIGJpdCBpcyBfaWdub3JlZF8gYXQKKyAqIHRoZSBoYXJkd2FyZSBsZXZlbCwgc28gb2RkLWJ5dGUgdHJhbnNmZXJzIGFyZW4ndCBwb3NzaWJsZSkuCisgKgorICogVHJhbnNmZXIgY291bnQgKF9ub3QgIyBieXRlc18pIGlzIGxpbWl0ZWQgdG8gNjRLLCByZXByZXNlbnRlZCBhcyBhY3R1YWwKKyAqIGNvdW50IC0gMSA6IDY0SyA9PiAweEZGRkYsIDEgPT4gMHgwMDAwLiAgVGh1cywgY291bnQgaXMgYWx3YXlzIDEgb3IgbW9yZSwKKyAqIGFuZCB1cCB0byAxMjhLIGJ5dGVzIG1heSBiZSB0cmFuc2ZlcnJlZCBvbiBjaGFubmVscyA1LTcgaW4gb25lIG9wZXJhdGlvbi4gCisgKgorICovCisKKyNkZWZpbmUgTUFYX0RNQV9DSEFOTkVMUwk4CisKKy8qCisgIElTQSBETUEgbGltaXRhdGlvbnMgb24gQWxwaGEgcGxhdGZvcm1zLAorCisgIFRoZXNlIG1heSBiZSBkdWUgdG8gU0lPIChQQ0k8LT5JU0EgYnJpZGdlKSBjaGlwc2V0IGxpbWl0YXRpb24sIG9yCisgIGp1c3QgYSB3aXJpbmcgbGltaXQuCisqLworCisvKiBUaGUgbWF4aW11bSBhZGRyZXNzIGZvciBJU0EgRE1BIHRyYW5zZmVyIG9uIEFscGhhIFhMLCBkdWUgdG8gYW4KKyAgIGhhcmR3YXJlIFNJTyBsaW1pdGF0aW9uLCBpcyA2NE1CLgorKi8KKyNkZWZpbmUgQUxQSEFfWExfTUFYX0lTQV9ETUFfQUREUkVTUwkJMHgwNDAwMDAwMFVMCisKKy8qIFRoZSBtYXhpbXVtIGFkZHJlc3MgZm9yIElTQSBETUEgdHJhbnNmZXIgb24gUlVGRklBTiwKKyAgIGR1ZSB0byBhbiBoYXJkd2FyZSBTSU8gbGltaXRhdGlvbiwgaXMgMTZNQi4KKyovCisjZGVmaW5lIEFMUEhBX1JVRkZJQU5fTUFYX0lTQV9ETUFfQUREUkVTUwkweDAxMDAwMDAwVUwKKworLyogVGhlIG1heGltdW0gYWRkcmVzcyBmb3IgSVNBIERNQSB0cmFuc2ZlciBvbiBTQUJMRSwgYW5kIHNvbWUgQUxDT1JzLAorICAgZHVlIHRvIGFuIGhhcmR3YXJlIFNJTyBjaGlwIGxpbWl0YXRpb24sIGlzIDJHQi4KKyovCisjZGVmaW5lIEFMUEhBX1NBQkxFX01BWF9JU0FfRE1BX0FERFJFU1MJCTB4ODAwMDAwMDBVTAorI2RlZmluZSBBTFBIQV9BTENPUl9NQVhfSVNBX0RNQV9BRERSRVNTCQkweDgwMDAwMDAwVUwKKworLyoKKyAgTWF4aW11bSBhZGRyZXNzIGZvciBhbGwgdGhlIG90aGVycyBpcyB0aGUgY29tcGxldGUgMzItYml0IGJ1cworICBhZGRyZXNzIHNwYWNlLgorKi8KKyNkZWZpbmUgQUxQSEFfTUFYX0lTQV9ETUFfQUREUkVTUwkJMHgxMDAwMDAwMDBVTAorCisjaWZkZWYgQ09ORklHX0FMUEhBX0dFTkVSSUMKKyMgZGVmaW5lIE1BWF9JU0FfRE1BX0FERFJFU1MJCShhbHBoYV9tdi5tYXhfaXNhX2RtYV9hZGRyZXNzKQorI2Vsc2UKKyMgaWYgZGVmaW5lZChDT05GSUdfQUxQSEFfWEwpCisjICBkZWZpbmUgTUFYX0lTQV9ETUFfQUREUkVTUwkJQUxQSEFfWExfTUFYX0lTQV9ETUFfQUREUkVTUworIyBlbGlmIGRlZmluZWQoQ09ORklHX0FMUEhBX1JVRkZJQU4pCisjICBkZWZpbmUgTUFYX0lTQV9ETUFfQUREUkVTUwkJQUxQSEFfUlVGRklBTl9NQVhfSVNBX0RNQV9BRERSRVNTCisjIGVsaWYgZGVmaW5lZChDT05GSUdfQUxQSEFfU0FCTEUpCisjICBkZWZpbmUgTUFYX0lTQV9ETUFfQUREUkVTUwkJQUxQSEFfU0FCTEVfTUFYX0lTQV9ETUFfQUREUkVTUworIyBlbGlmIGRlZmluZWQoQ09ORklHX0FMUEhBX0FMQ09SKQorIyAgZGVmaW5lIE1BWF9JU0FfRE1BX0FERFJFU1MJCUFMUEhBX0FMQ09SX01BWF9JU0FfRE1BX0FERFJFU1MKKyMgZWxzZQorIyAgZGVmaW5lIE1BWF9JU0FfRE1BX0FERFJFU1MJCUFMUEhBX01BWF9JU0FfRE1BX0FERFJFU1MKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBJZiB3ZSBoYXZlIHRoZSBpb21tdSwgd2UgZG9uJ3QgaGF2ZSBhbnkgYWRkcmVzcyBsaW1pdGF0aW9ucyBvbiBETUEuCisgICBPdGhlcndpc2UgKE5hdXRpbHVzLCBSWDE2NCksIHdlIGhhdmUgdG8gaGF2ZSAwLTE2IE1iIERNQSB6b25lCisgICBsaWtlIGkzODYuICovCisjZGVmaW5lIE1BWF9ETUFfQUREUkVTUwkJKGFscGhhX212Lm12X3BjaV90YmkgPwlcCisJCQkJIH4wVUwgOiBJREVOVF9BRERSICsgMHgwMTAwMDAwMCkKKworLyogODIzNyBETUEgY29udHJvbGxlcnMgKi8KKyNkZWZpbmUgSU9fRE1BMV9CQVNFCTB4MDAJLyogOCBiaXQgc2xhdmUgRE1BLCBjaGFubmVscyAwLi4zICovCisjZGVmaW5lIElPX0RNQTJfQkFTRQkweEMwCS8qIDE2IGJpdCBtYXN0ZXIgRE1BLCBjaCA0KD1zbGF2ZSBpbnB1dCkuLjcgKi8KKworLyogRE1BIGNvbnRyb2xsZXIgcmVnaXN0ZXJzICovCisjZGVmaW5lIERNQTFfQ01EX1JFRwkJMHgwOAkvKiBjb21tYW5kIHJlZ2lzdGVyICh3KSAqLworI2RlZmluZSBETUExX1NUQVRfUkVHCQkweDA4CS8qIHN0YXR1cyByZWdpc3RlciAocikgKi8KKyNkZWZpbmUgRE1BMV9SRVFfUkVHICAgICAgICAgICAgMHgwOSAgICAvKiByZXF1ZXN0IHJlZ2lzdGVyICh3KSAqLworI2RlZmluZSBETUExX01BU0tfUkVHCQkweDBBCS8qIHNpbmdsZS1jaGFubmVsIG1hc2sgKHcpICovCisjZGVmaW5lIERNQTFfTU9ERV9SRUcJCTB4MEIJLyogbW9kZSByZWdpc3RlciAodykgKi8KKyNkZWZpbmUgRE1BMV9DTEVBUl9GRl9SRUcJMHgwQwkvKiBjbGVhciBwb2ludGVyIGZsaXAtZmxvcCAodykgKi8KKyNkZWZpbmUgRE1BMV9URU1QX1JFRyAgICAgICAgICAgMHgwRCAgICAvKiBUZW1wb3JhcnkgUmVnaXN0ZXIgKHIpICovCisjZGVmaW5lIERNQTFfUkVTRVRfUkVHCQkweDBECS8qIE1hc3RlciBDbGVhciAodykgKi8KKyNkZWZpbmUgRE1BMV9DTFJfTUFTS19SRUcgICAgICAgMHgwRSAgICAvKiBDbGVhciBNYXNrICovCisjZGVmaW5lIERNQTFfTUFTS19BTExfUkVHICAgICAgIDB4MEYgICAgLyogYWxsLWNoYW5uZWxzIG1hc2sgKHcpICovCisjZGVmaW5lIERNQTFfRVhUX01PREVfUkVHCSgweDQwMCB8IERNQTFfTU9ERV9SRUcpCisKKyNkZWZpbmUgRE1BMl9DTURfUkVHCQkweEQwCS8qIGNvbW1hbmQgcmVnaXN0ZXIgKHcpICovCisjZGVmaW5lIERNQTJfU1RBVF9SRUcJCTB4RDAJLyogc3RhdHVzIHJlZ2lzdGVyIChyKSAqLworI2RlZmluZSBETUEyX1JFUV9SRUcgICAgICAgICAgICAweEQyICAgIC8qIHJlcXVlc3QgcmVnaXN0ZXIgKHcpICovCisjZGVmaW5lIERNQTJfTUFTS19SRUcJCTB4RDQJLyogc2luZ2xlLWNoYW5uZWwgbWFzayAodykgKi8KKyNkZWZpbmUgRE1BMl9NT0RFX1JFRwkJMHhENgkvKiBtb2RlIHJlZ2lzdGVyICh3KSAqLworI2RlZmluZSBETUEyX0NMRUFSX0ZGX1JFRwkweEQ4CS8qIGNsZWFyIHBvaW50ZXIgZmxpcC1mbG9wICh3KSAqLworI2RlZmluZSBETUEyX1RFTVBfUkVHICAgICAgICAgICAweERBICAgIC8qIFRlbXBvcmFyeSBSZWdpc3RlciAocikgKi8KKyNkZWZpbmUgRE1BMl9SRVNFVF9SRUcJCTB4REEJLyogTWFzdGVyIENsZWFyICh3KSAqLworI2RlZmluZSBETUEyX0NMUl9NQVNLX1JFRyAgICAgICAweERDICAgIC8qIENsZWFyIE1hc2sgKi8KKyNkZWZpbmUgRE1BMl9NQVNLX0FMTF9SRUcgICAgICAgMHhERSAgICAvKiBhbGwtY2hhbm5lbHMgbWFzayAodykgKi8KKyNkZWZpbmUgRE1BMl9FWFRfTU9ERV9SRUcJKDB4NDAwIHwgRE1BMl9NT0RFX1JFRykKKworI2RlZmluZSBETUFfQUREUl8wICAgICAgICAgICAgICAweDAwICAgIC8qIERNQSBhZGRyZXNzIHJlZ2lzdGVycyAqLworI2RlZmluZSBETUFfQUREUl8xICAgICAgICAgICAgICAweDAyCisjZGVmaW5lIERNQV9BRERSXzIgICAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgRE1BX0FERFJfMyAgICAgICAgICAgICAgMHgwNgorI2RlZmluZSBETUFfQUREUl80ICAgICAgICAgICAgICAweEMwCisjZGVmaW5lIERNQV9BRERSXzUgICAgICAgICAgICAgIDB4QzQKKyNkZWZpbmUgRE1BX0FERFJfNiAgICAgICAgICAgICAgMHhDOAorI2RlZmluZSBETUFfQUREUl83ICAgICAgICAgICAgICAweENDCisKKyNkZWZpbmUgRE1BX0NOVF8wICAgICAgICAgICAgICAgMHgwMSAgICAvKiBETUEgY291bnQgcmVnaXN0ZXJzICovCisjZGVmaW5lIERNQV9DTlRfMSAgICAgICAgICAgICAgIDB4MDMKKyNkZWZpbmUgRE1BX0NOVF8yICAgICAgICAgICAgICAgMHgwNQorI2RlZmluZSBETUFfQ05UXzMgICAgICAgICAgICAgICAweDA3CisjZGVmaW5lIERNQV9DTlRfNCAgICAgICAgICAgICAgIDB4QzIKKyNkZWZpbmUgRE1BX0NOVF81ICAgICAgICAgICAgICAgMHhDNgorI2RlZmluZSBETUFfQ05UXzYgICAgICAgICAgICAgICAweENBCisjZGVmaW5lIERNQV9DTlRfNyAgICAgICAgICAgICAgIDB4Q0UKKworI2RlZmluZSBETUFfUEFHRV8wICAgICAgICAgICAgICAweDg3ICAgIC8qIERNQSBwYWdlIHJlZ2lzdGVycyAqLworI2RlZmluZSBETUFfUEFHRV8xICAgICAgICAgICAgICAweDgzCisjZGVmaW5lIERNQV9QQUdFXzIgICAgICAgICAgICAgIDB4ODEKKyNkZWZpbmUgRE1BX1BBR0VfMyAgICAgICAgICAgICAgMHg4MgorI2RlZmluZSBETUFfUEFHRV81ICAgICAgICAgICAgICAweDhCCisjZGVmaW5lIERNQV9QQUdFXzYgICAgICAgICAgICAgIDB4ODkKKyNkZWZpbmUgRE1BX1BBR0VfNyAgICAgICAgICAgICAgMHg4QQorCisjZGVmaW5lIERNQV9ISVBBR0VfMAkJKDB4NDAwIHwgRE1BX1BBR0VfMCkKKyNkZWZpbmUgRE1BX0hJUEFHRV8xCQkoMHg0MDAgfCBETUFfUEFHRV8xKQorI2RlZmluZSBETUFfSElQQUdFXzIJCSgweDQwMCB8IERNQV9QQUdFXzIpCisjZGVmaW5lIERNQV9ISVBBR0VfMwkJKDB4NDAwIHwgRE1BX1BBR0VfMykKKyNkZWZpbmUgRE1BX0hJUEFHRV80CQkoMHg0MDAgfCBETUFfUEFHRV80KQorI2RlZmluZSBETUFfSElQQUdFXzUJCSgweDQwMCB8IERNQV9QQUdFXzUpCisjZGVmaW5lIERNQV9ISVBBR0VfNgkJKDB4NDAwIHwgRE1BX1BBR0VfNikKKyNkZWZpbmUgRE1BX0hJUEFHRV83CQkoMHg0MDAgfCBETUFfUEFHRV83KQorCisjZGVmaW5lIERNQV9NT0RFX1JFQUQJMHg0NAkvKiBJL08gdG8gbWVtb3J5LCBubyBhdXRvaW5pdCwgaW5jcmVtZW50LCBzaW5nbGUgbW9kZSAqLworI2RlZmluZSBETUFfTU9ERV9XUklURQkweDQ4CS8qIG1lbW9yeSB0byBJL08sIG5vIGF1dG9pbml0LCBpbmNyZW1lbnQsIHNpbmdsZSBtb2RlICovCisjZGVmaW5lIERNQV9NT0RFX0NBU0NBREUgMHhDMCAgIC8qIHBhc3MgdGhydSBEUkVRLT5IUlEsIERBQ0s8LUhMREEgb25seSAqLworCisjZGVmaW5lIERNQV9BVVRPSU5JVAkweDEwCisKK2V4dGVybiBzcGlubG9ja190ICBkbWFfc3Bpbl9sb2NrOworCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGNsYWltX2RtYV9sb2NrKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZG1hX3NwaW5fbG9jaywgZmxhZ3MpOworCXJldHVybiBmbGFnczsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCByZWxlYXNlX2RtYV9sb2NrKHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZG1hX3NwaW5fbG9jaywgZmxhZ3MpOworfQorCisvKiBlbmFibGUvZGlzYWJsZSBhIHNwZWNpZmljIERNQSBjaGFubmVsICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGVuYWJsZV9kbWEodW5zaWduZWQgaW50IGRtYW5yKQoreworCWlmIChkbWFucjw9MykKKwkJZG1hX291dGIoZG1hbnIsICBETUExX01BU0tfUkVHKTsKKwllbHNlCisJCWRtYV9vdXRiKGRtYW5yICYgMywgIERNQTJfTUFTS19SRUcpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGRpc2FibGVfZG1hKHVuc2lnbmVkIGludCBkbWFucikKK3sKKwlpZiAoZG1hbnI8PTMpCisJCWRtYV9vdXRiKGRtYW5yIHwgNCwgIERNQTFfTUFTS19SRUcpOworCWVsc2UKKwkJZG1hX291dGIoKGRtYW5yICYgMykgfCA0LCAgRE1BMl9NQVNLX1JFRyk7Cit9CisKKy8qIENsZWFyIHRoZSAnRE1BIFBvaW50ZXIgRmxpcCBGbG9wJy4KKyAqIFdyaXRlIDAgZm9yIExTQi9NU0IsIDEgZm9yIE1TQi9MU0IgYWNjZXNzLgorICogVXNlIHRoaXMgb25jZSB0byBpbml0aWFsaXplIHRoZSBGRiB0byBhIGtub3duIHN0YXRlLgorICogQWZ0ZXIgdGhhdCwga2VlcCB0cmFjayBvZiBpdC4gOi0pCisgKiAtLS0gSW4gb3JkZXIgdG8gZG8gdGhhdCwgdGhlIERNQSByb3V0aW5lcyBiZWxvdyBzaG91bGQgLS0tCisgKiAtLS0gb25seSBiZSB1c2VkIHdoaWxlIGludGVycnVwdHMgYXJlIGRpc2FibGVkISAtLS0KKyAqLworc3RhdGljIF9faW5saW5lX18gdm9pZCBjbGVhcl9kbWFfZmYodW5zaWduZWQgaW50IGRtYW5yKQoreworCWlmIChkbWFucjw9MykKKwkJZG1hX291dGIoMCwgIERNQTFfQ0xFQVJfRkZfUkVHKTsKKwllbHNlCisJCWRtYV9vdXRiKDAsICBETUEyX0NMRUFSX0ZGX1JFRyk7Cit9CisKKy8qIHNldCBtb2RlIChhYm92ZSkgZm9yIGEgc3BlY2lmaWMgRE1BIGNoYW5uZWwgKi8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgc2V0X2RtYV9tb2RlKHVuc2lnbmVkIGludCBkbWFuciwgY2hhciBtb2RlKQoreworCWlmIChkbWFucjw9MykKKwkJZG1hX291dGIobW9kZSB8IGRtYW5yLCAgRE1BMV9NT0RFX1JFRyk7CisJZWxzZQorCQlkbWFfb3V0Yihtb2RlIHwgKGRtYW5yJjMpLCAgRE1BMl9NT0RFX1JFRyk7Cit9CisKKy8qIHNldCBleHRlbmRlZCBtb2RlIGZvciBhIHNwZWNpZmljIERNQSBjaGFubmVsICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHNldF9kbWFfZXh0X21vZGUodW5zaWduZWQgaW50IGRtYW5yLCBjaGFyIGV4dF9tb2RlKQoreworCWlmIChkbWFucjw9MykKKwkJZG1hX291dGIoZXh0X21vZGUgfCBkbWFuciwgIERNQTFfRVhUX01PREVfUkVHKTsKKwllbHNlCisJCWRtYV9vdXRiKGV4dF9tb2RlIHwgKGRtYW5yJjMpLCAgRE1BMl9FWFRfTU9ERV9SRUcpOworfQorCisvKiBTZXQgb25seSB0aGUgcGFnZSByZWdpc3RlciBiaXRzIG9mIHRoZSB0cmFuc2ZlciBhZGRyZXNzLgorICogVGhpcyBpcyB1c2VkIGZvciBzdWNjZXNzaXZlIHRyYW5zZmVycyB3aGVuIHdlIGtub3cgdGhlIGNvbnRlbnRzIG9mCisgKiB0aGUgbG93ZXIgMTYgYml0cyBvZiB0aGUgRE1BIGN1cnJlbnQgYWRkcmVzcyByZWdpc3Rlci4KKyAqLworc3RhdGljIF9faW5saW5lX18gdm9pZCBzZXRfZG1hX3BhZ2UodW5zaWduZWQgaW50IGRtYW5yLCB1bnNpZ25lZCBpbnQgcGFnZW5yKQoreworCXN3aXRjaChkbWFucikgeworCQljYXNlIDA6CisJCQlkbWFfb3V0YihwYWdlbnIsIERNQV9QQUdFXzApOworCQkJZG1hX291dGIoKHBhZ2VuciA+PiA4KSwgRE1BX0hJUEFHRV8wKTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlkbWFfb3V0YihwYWdlbnIsIERNQV9QQUdFXzEpOworCQkJZG1hX291dGIoKHBhZ2VuciA+PiA4KSwgRE1BX0hJUEFHRV8xKTsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlkbWFfb3V0YihwYWdlbnIsIERNQV9QQUdFXzIpOworCQkJZG1hX291dGIoKHBhZ2VuciA+PiA4KSwgRE1BX0hJUEFHRV8yKTsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCQlkbWFfb3V0YihwYWdlbnIsIERNQV9QQUdFXzMpOworCQkJZG1hX291dGIoKHBhZ2VuciA+PiA4KSwgRE1BX0hJUEFHRV8zKTsKKwkJCWJyZWFrOworCQljYXNlIDU6CisJCQlkbWFfb3V0YihwYWdlbnIgJiAweGZlLCBETUFfUEFHRV81KTsKKwkJCWRtYV9vdXRiKChwYWdlbnIgPj4gOCksIERNQV9ISVBBR0VfNSk7CisJCQlicmVhazsKKwkJY2FzZSA2OgorCQkJZG1hX291dGIocGFnZW5yICYgMHhmZSwgRE1BX1BBR0VfNik7CisJCQlkbWFfb3V0YigocGFnZW5yID4+IDgpLCBETUFfSElQQUdFXzYpOworCQkJYnJlYWs7CisJCWNhc2UgNzoKKwkJCWRtYV9vdXRiKHBhZ2VuciAmIDB4ZmUsIERNQV9QQUdFXzcpOworCQkJZG1hX291dGIoKHBhZ2VuciA+PiA4KSwgRE1BX0hJUEFHRV83KTsKKwkJCWJyZWFrOworCX0KK30KKworCisvKiBTZXQgdHJhbnNmZXIgYWRkcmVzcyAmIHBhZ2UgYml0cyBmb3Igc3BlY2lmaWMgRE1BIGNoYW5uZWwuCisgKiBBc3N1bWVzIGRtYSBmbGlwZmxvcCBpcyBjbGVhci4KKyAqLworc3RhdGljIF9faW5saW5lX18gdm9pZCBzZXRfZG1hX2FkZHIodW5zaWduZWQgaW50IGRtYW5yLCB1bnNpZ25lZCBpbnQgYSkKK3sKKwlpZiAoZG1hbnIgPD0gMykgIHsKKwkgICAgZG1hX291dGIoIGEgJiAweGZmLCAoKGRtYW5yJjMpPDwxKSArIElPX0RNQTFfQkFTRSApOworICAgICAgICAgICAgZG1hX291dGIoIChhPj44KSAmIDB4ZmYsICgoZG1hbnImMyk8PDEpICsgSU9fRE1BMV9CQVNFICk7CisJfSAgZWxzZSAgeworCSAgICBkbWFfb3V0YiggKGE+PjEpICYgMHhmZiwgKChkbWFuciYzKTw8MikgKyBJT19ETUEyX0JBU0UgKTsKKwkgICAgZG1hX291dGIoIChhPj45KSAmIDB4ZmYsICgoZG1hbnImMyk8PDIpICsgSU9fRE1BMl9CQVNFICk7CisJfQorCXNldF9kbWFfcGFnZShkbWFuciwgYT4+MTYpOwkvKiBzZXQgaGlwYWdlIGxhc3QgdG8gZW5hYmxlIDMyLWJpdCBtb2RlICovCit9CisKKworLyogU2V0IHRyYW5zZmVyIHNpemUgKG1heCA2NGsgZm9yIERNQTEuLjMsIDEyOGsgZm9yIERNQTUuLjcpIGZvcgorICogYSBzcGVjaWZpYyBETUEgY2hhbm5lbC4KKyAqIFlvdSBtdXN0IGVuc3VyZSB0aGUgcGFyYW1ldGVycyBhcmUgdmFsaWQuCisgKiBOT1RFOiBmcm9tIGEgbWFudWFsOiAidGhlIG51bWJlciBvZiB0cmFuc2ZlcnMgaXMgb25lIG1vcmUKKyAqIHRoYW4gdGhlIGluaXRpYWwgd29yZCBjb3VudCIhIFRoaXMgaXMgdGFrZW4gaW50byBhY2NvdW50LgorICogQXNzdW1lcyBkbWEgZmxpcC1mbG9wIGlzIGNsZWFyLgorICogTk9URSAyOiAiY291bnQiIHJlcHJlc2VudHMgX2J5dGVzXyBhbmQgbXVzdCBiZSBldmVuIGZvciBjaGFubmVscyA1LTcuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgc2V0X2RtYV9jb3VudCh1bnNpZ25lZCBpbnQgZG1hbnIsIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKyAgICAgICAgY291bnQtLTsKKwlpZiAoZG1hbnIgPD0gMykgIHsKKwkgICAgZG1hX291dGIoIGNvdW50ICYgMHhmZiwgKChkbWFuciYzKTw8MSkgKyAxICsgSU9fRE1BMV9CQVNFICk7CisJICAgIGRtYV9vdXRiKCAoY291bnQ+PjgpICYgMHhmZiwgKChkbWFuciYzKTw8MSkgKyAxICsgSU9fRE1BMV9CQVNFICk7CisgICAgICAgIH0gZWxzZSB7CisJICAgIGRtYV9vdXRiKCAoY291bnQ+PjEpICYgMHhmZiwgKChkbWFuciYzKTw8MikgKyAyICsgSU9fRE1BMl9CQVNFICk7CisJICAgIGRtYV9vdXRiKCAoY291bnQ+PjkpICYgMHhmZiwgKChkbWFuciYzKTw8MikgKyAyICsgSU9fRE1BMl9CQVNFICk7CisgICAgICAgIH0KK30KKworCisvKiBHZXQgRE1BIHJlc2lkdWUgY291bnQuIEFmdGVyIGEgRE1BIHRyYW5zZmVyLCB0aGlzCisgKiBzaG91bGQgcmV0dXJuIHplcm8uIFJlYWRpbmcgdGhpcyB3aGlsZSBhIERNQSB0cmFuc2ZlciBpcworICogc3RpbGwgaW4gcHJvZ3Jlc3Mgd2lsbCByZXR1cm4gdW5wcmVkaWN0YWJsZSByZXN1bHRzLgorICogSWYgY2FsbGVkIGJlZm9yZSB0aGUgY2hhbm5lbCBoYXMgYmVlbiB1c2VkLCBpdCBtYXkgcmV0dXJuIDEuCisgKiBPdGhlcndpc2UsIGl0IHJldHVybnMgdGhlIG51bWJlciBvZiBfYnl0ZXNfIGxlZnQgdG8gdHJhbnNmZXIuCisgKgorICogQXNzdW1lcyBETUEgZmxpcC1mbG9wIGlzIGNsZWFyLgorICovCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgZ2V0X2RtYV9yZXNpZHVlKHVuc2lnbmVkIGludCBkbWFucikKK3sKKwl1bnNpZ25lZCBpbnQgaW9fcG9ydCA9IChkbWFucjw9Myk/ICgoZG1hbnImMyk8PDEpICsgMSArIElPX0RNQTFfQkFTRQorCQkJCQkgOiAoKGRtYW5yJjMpPDwyKSArIDIgKyBJT19ETUEyX0JBU0U7CisKKwkvKiB1c2luZyBzaG9ydCB0byBnZXQgMTYtYml0IHdyYXAgYXJvdW5kICovCisJdW5zaWduZWQgc2hvcnQgY291bnQ7CisKKwljb3VudCA9IDEgKyBkbWFfaW5iKGlvX3BvcnQpOworCWNvdW50ICs9IGRtYV9pbmIoaW9fcG9ydCkgPDwgODsKKwkKKwlyZXR1cm4gKGRtYW5yPD0zKT8gY291bnQgOiAoY291bnQ8PDEpOworfQorCisKKy8qIFRoZXNlIGFyZSBpbiBrZXJuZWwvZG1hLmM6ICovCitleHRlcm4gaW50IHJlcXVlc3RfZG1hKHVuc2lnbmVkIGludCBkbWFuciwgY29uc3QgY2hhciAqIGRldmljZV9pZCk7CS8qIHJlc2VydmUgYSBETUEgY2hhbm5lbCAqLworZXh0ZXJuIHZvaWQgZnJlZV9kbWEodW5zaWduZWQgaW50IGRtYW5yKTsJLyogcmVsZWFzZSBpdCBhZ2FpbiAqLworI2RlZmluZSBLRVJORUxfSEFWRV9DSEVDS19ETUEKK2V4dGVybiBpbnQgY2hlY2tfZG1hKHVuc2lnbmVkIGludCBkbWFucik7CisKKy8qIEZyb20gUENJICovCisKKyNpZmRlZiBDT05GSUdfUENJCitleHRlcm4gaW50IGlzYV9kbWFfYnJpZGdlX2J1Z2d5OworI2Vsc2UKKyNkZWZpbmUgaXNhX2RtYV9icmlkZ2VfYnVnZ3kgCSgwKQorI2VuZGlmCisKKworI2VuZGlmIC8qIF9BU01fRE1BX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL2VsZi5oIGIvaW5jbHVkZS9hc20tYWxwaGEvZWxmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk0YTk0NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL2VsZi5oCkBAIC0wLDAgKzEsMTg1IEBACisjaWZuZGVmIF9fQVNNX0FMUEhBX0VMRl9ICisjZGVmaW5lIF9fQVNNX0FMUEhBX0VMRl9ICisKKy8qIFNwZWNpYWwgdmFsdWVzIGZvciB0aGUgc3Rfb3RoZXIgZmllbGQgaW4gdGhlIHN5bWJvbCB0YWJsZS4gICovCisKKyNkZWZpbmUgU1RPX0FMUEhBX05PUFYJCTB4ODAKKyNkZWZpbmUgU1RPX0FMUEhBX1NURF9HUExPQUQJMHg4OAorCisvKgorICogQWxwaGEgRUxGIHJlbG9jYXRpb24gdHlwZXMKKyAqLworI2RlZmluZSBSX0FMUEhBX05PTkUgICAgICAgICAgICAwICAgICAgIC8qIE5vIHJlbG9jICovCisjZGVmaW5lIFJfQUxQSEFfUkVGTE9ORyAgICAgICAgIDEgICAgICAgLyogRGlyZWN0IDMyIGJpdCAqLworI2RlZmluZSBSX0FMUEhBX1JFRlFVQUQgICAgICAgICAyICAgICAgIC8qIERpcmVjdCA2NCBiaXQgKi8KKyNkZWZpbmUgUl9BTFBIQV9HUFJFTDMyICAgICAgICAgMyAgICAgICAvKiBHUCByZWxhdGl2ZSAzMiBiaXQgKi8KKyNkZWZpbmUgUl9BTFBIQV9MSVRFUkFMICAgICAgICAgNCAgICAgICAvKiBHUCByZWxhdGl2ZSAxNiBiaXQgdy9vcHRpbWl6YXRpb24gKi8KKyNkZWZpbmUgUl9BTFBIQV9MSVRVU0UgICAgICAgICAgNSAgICAgICAvKiBPcHRpbWl6YXRpb24gaGludCBmb3IgTElURVJBTCAqLworI2RlZmluZSBSX0FMUEhBX0dQRElTUCAgICAgICAgICA2ICAgICAgIC8qIEFkZCBkaXNwbGFjZW1lbnQgdG8gR1AgKi8KKyNkZWZpbmUgUl9BTFBIQV9CUkFERFIgICAgICAgICAgNyAgICAgICAvKiBQQys0IHJlbGF0aXZlIDIzIGJpdCBzaGlmdGVkICovCisjZGVmaW5lIFJfQUxQSEFfSElOVCAgICAgICAgICAgIDggICAgICAgLyogUEMrNCByZWxhdGl2ZSAxNiBiaXQgc2hpZnRlZCAqLworI2RlZmluZSBSX0FMUEhBX1NSRUwxNiAgICAgICAgICA5ICAgICAgIC8qIFBDIHJlbGF0aXZlIDE2IGJpdCAqLworI2RlZmluZSBSX0FMUEhBX1NSRUwzMiAgICAgICAgICAxMCAgICAgIC8qIFBDIHJlbGF0aXZlIDMyIGJpdCAqLworI2RlZmluZSBSX0FMUEhBX1NSRUw2NCAgICAgICAgICAxMSAgICAgIC8qIFBDIHJlbGF0aXZlIDY0IGJpdCAqLworI2RlZmluZSBSX0FMUEhBX0dQUkVMSElHSCAgICAgICAxNyAgICAgIC8qIEdQIHJlbGF0aXZlIDMyIGJpdCwgaGlnaCAxNiBiaXRzICovCisjZGVmaW5lIFJfQUxQSEFfR1BSRUxMT1cgICAgICAgIDE4ICAgICAgLyogR1AgcmVsYXRpdmUgMzIgYml0LCBsb3cgMTYgYml0cyAqLworI2RlZmluZSBSX0FMUEhBX0dQUkVMMTYgICAgICAgICAxOSAgICAgIC8qIEdQIHJlbGF0aXZlIDE2IGJpdCAqLworI2RlZmluZSBSX0FMUEhBX0NPUFkgICAgICAgICAgICAyNCAgICAgIC8qIENvcHkgc3ltYm9sIGF0IHJ1bnRpbWUgKi8KKyNkZWZpbmUgUl9BTFBIQV9HTE9CX0RBVCAgICAgICAgMjUgICAgICAvKiBDcmVhdGUgR09UIGVudHJ5ICovCisjZGVmaW5lIFJfQUxQSEFfSk1QX1NMT1QgICAgICAgIDI2ICAgICAgLyogQ3JlYXRlIFBMVCBlbnRyeSAqLworI2RlZmluZSBSX0FMUEhBX1JFTEFUSVZFICAgICAgICAyNyAgICAgIC8qIEFkanVzdCBieSBwcm9ncmFtIGJhc2UgKi8KKyNkZWZpbmUgUl9BTFBIQV9CUlNHUAkJMjgKKyNkZWZpbmUgUl9BTFBIQV9UTFNHRCAgICAgICAgICAgMjkKKyNkZWZpbmUgUl9BTFBIQV9UTFNfTERNICAgICAgICAgMzAKKyNkZWZpbmUgUl9BTFBIQV9EVFBNT0Q2NCAgICAgICAgMzEKKyNkZWZpbmUgUl9BTFBIQV9HT1REVFBSRUwgICAgICAgMzIKKyNkZWZpbmUgUl9BTFBIQV9EVFBSRUw2NCAgICAgICAgMzMKKyNkZWZpbmUgUl9BTFBIQV9EVFBSRUxISSAgICAgICAgMzQKKyNkZWZpbmUgUl9BTFBIQV9EVFBSRUxMTyAgICAgICAgMzUKKyNkZWZpbmUgUl9BTFBIQV9EVFBSRUwxNiAgICAgICAgMzYKKyNkZWZpbmUgUl9BTFBIQV9HT1RUUFJFTCAgICAgICAgMzcKKyNkZWZpbmUgUl9BTFBIQV9UUFJFTDY0ICAgICAgICAgMzgKKyNkZWZpbmUgUl9BTFBIQV9UUFJFTEhJICAgICAgICAgMzkKKyNkZWZpbmUgUl9BTFBIQV9UUFJFTExPICAgICAgICAgNDAKKyNkZWZpbmUgUl9BTFBIQV9UUFJFTDE2ICAgICAgICAgNDEKKworI2RlZmluZSBTSEZfQUxQSEFfR1BSRUwJCTB4MTAwMDAwMDAKKworLyogTGVnYWwgdmFsdWVzIGZvciBlX2ZsYWdzIGZpZWxkIG9mIEVsZjY0X0VoZHIuICAqLworCisjZGVmaW5lIEVGX0FMUEhBXzMyQklUCQkxCS8qIEFsbCBhZGRyZXNzZXMgYXJlIGJlbG93IDJHQiAqLworCisvKgorICogRUxGIHJlZ2lzdGVyIGRlZmluaXRpb25zLi4KKyAqLworCisvKgorICogVGhlIE9TRi8xIHZlcnNpb24gb2YgPHN5cy9wcm9jZnMuaD4gbWFrZXMgZ3JlZ3NldF90IDQ2IGVudHJpZXMgbG9uZy4KKyAqIEkgaGF2ZSBubyBpZGVhIHdoeSB0aGF0IGlzIHNvLiAgRm9yIG5vdywgd2UganVzdCBsZWF2ZSBpdCBhdCAzMworICogKDMyIGdlbmVyYWwgcmVncyArIHByb2Nlc3NvciBzdGF0dXMgd29yZCkuIAorICovCisjZGVmaW5lIEVMRl9OR1JFRwkzMworI2RlZmluZSBFTEZfTkZQUkVHCTMyCisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBlbGZfZ3JlZ190OwordHlwZWRlZiBlbGZfZ3JlZ190IGVsZl9ncmVnc2V0X3RbRUxGX05HUkVHXTsKKwordHlwZWRlZiBkb3VibGUgZWxmX2ZwcmVnX3Q7Cit0eXBlZGVmIGVsZl9mcHJlZ190IGVsZl9mcHJlZ3NldF90W0VMRl9ORlBSRUddOworCisvKgorICogVGhpcyBpcyB1c2VkIHRvIGVuc3VyZSB3ZSBkb24ndCBsb2FkIHNvbWV0aGluZyBmb3IgdGhlIHdyb25nIGFyY2hpdGVjdHVyZS4KKyAqLworI2RlZmluZSBlbGZfY2hlY2tfYXJjaCh4KSAoKHgpLT5lX21hY2hpbmUgPT0gRU1fQUxQSEEpCisKKy8qCisgKiBUaGVzZSBhcmUgdXNlZCB0byBzZXQgcGFyYW1ldGVycyBpbiB0aGUgY29yZSBkdW1wcy4KKyAqLworI2RlZmluZSBFTEZfQ0xBU1MJRUxGQ0xBU1M2NAorI2RlZmluZSBFTEZfREFUQQlFTEZEQVRBMkxTQgorI2RlZmluZSBFTEZfQVJDSAlFTV9BTFBIQQorCisjZGVmaW5lIFVTRV9FTEZfQ09SRV9EVU1QCisjZGVmaW5lIEVMRl9FWEVDX1BBR0VTSVpFCTgxOTIKKworLyogVGhpcyBpcyB0aGUgbG9jYXRpb24gdGhhdCBhbiBFVF9EWU4gcHJvZ3JhbSBpcyBsb2FkZWQgaWYgZXhlYydlZC4gIFR5cGljYWwKKyAgIHVzZSBvZiB0aGlzIGlzIHRvIGludm9rZSAiLi9sZC5zbyBzb21lcHJvZyIgdG8gdGVzdCBvdXQgYSBuZXcgdmVyc2lvbiBvZgorICAgdGhlIGxvYWRlci4gIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgaXQgaXMgb3V0IG9mIHRoZSB3YXkgb2YgdGhlIHByb2dyYW0KKyAgIHRoYXQgaXQgd2lsbCAiZXhlYyIsIGFuZCB0aGF0IHRoZXJlIGlzIHN1ZmZpY2llbnQgcm9vbSBmb3IgdGhlIGJyay4gICovCisKKyNkZWZpbmUgRUxGX0VUX0RZTl9CQVNFCQkoVEFTS19VTk1BUFBFRF9CQVNFICsgMHgxMDAwMDAwKQorCisvKiAkMCBpcyBzZXQgYnkgbGQuc28gdG8gYSBwb2ludGVyIHRvIGEgZnVuY3Rpb24gd2hpY2ggbWlnaHQgYmUgCisgICByZWdpc3RlcmVkIHVzaW5nIGF0ZXhpdC4gIFRoaXMgcHJvdmlkZXMgYSBtZWFuIGZvciB0aGUgZHluYW1pYworICAgbGlua2VyIHRvIGNhbGwgRFRfRklOSSBmdW5jdGlvbnMgZm9yIHNoYXJlZCBsaWJyYXJpZXMgdGhhdCBoYXZlCisgICBiZWVuIGxvYWRlZCBiZWZvcmUgdGhlIGNvZGUgcnVucy4KKworICAgU28gdGhhdCB3ZSBjYW4gdXNlIHRoZSBzYW1lIHN0YXJ0dXAgZmlsZSB3aXRoIHN0YXRpYyBleGVjdXRhYmxlcywKKyAgIHdlIHN0YXJ0IHByb2dyYW1zIHdpdGggYSB2YWx1ZSBvZiAwIHRvIGluZGljYXRlIHRoYXQgdGhlcmUgaXMgbm8KKyAgIHN1Y2ggZnVuY3Rpb24uICAqLworCisjZGVmaW5lIEVMRl9QTEFUX0lOSVQoX3IsIGxvYWRfYWRkcikJX3ItPnIwID0gMAorCisvKiBUaGUgcmVnaXN0ZXJzIGFyZSBsYXllZCBvdXQgaW4gcHRfcmVncyBmb3IgUEFMIGFuZCBzeXNjYWxsCisgICBjb252ZW5pZW5jZS4gIFJlLW9yZGVyIHRoZW0gZm9yIHRoZSBsaW5lYXIgZWxmX2dyZWdzZXRfdC4gICovCisKK3N0cnVjdCBwdF9yZWdzOworc3RydWN0IHRocmVhZF9pbmZvOworc3RydWN0IHRhc2tfc3RydWN0OworZXh0ZXJuIHZvaWQgZHVtcF9lbGZfdGhyZWFkKGVsZl9ncmVnX3QgKmRlc3QsIHN0cnVjdCBwdF9yZWdzICpwdCwKKwkJCSAgICBzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpKTsKKyNkZWZpbmUgRUxGX0NPUkVfQ09QWV9SRUdTKERFU1QsIFJFR1MpIFwKKwlkdW1wX2VsZl90aHJlYWQoREVTVCwgUkVHUywgY3VycmVudF90aHJlYWRfaW5mbygpKTsKKworLyogU2ltaWxhciwgYnV0IGZvciBhIHRocmVhZCBvdGhlciB0aGFuIGN1cnJlbnQuICAqLworCitleHRlcm4gaW50IGR1bXBfZWxmX3Rhc2soZWxmX2dyZWdfdCAqZGVzdCwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTsKKyNkZWZpbmUgRUxGX0NPUkVfQ09QWV9UQVNLX1JFR1MoVEFTSywgREVTVCkgXAorCWR1bXBfZWxmX3Rhc2soKihERVNUKSwgVEFTSykKKworLyogU2ltaWxhciwgYnV0IGZvciB0aGUgRlAgcmVnaXN0ZXJzLiAgKi8KKworZXh0ZXJuIGludCBkdW1wX2VsZl90YXNrX2ZwKGVsZl9mcHJlZ190ICpkZXN0LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOworI2RlZmluZSBFTEZfQ09SRV9DT1BZX0ZQUkVHUyhUQVNLLCBERVNUKSBcCisJZHVtcF9lbGZfdGFza19mcCgqKERFU1QpLCBUQVNLKQorCisvKiBUaGlzIHlpZWxkcyBhIG1hc2sgdGhhdCB1c2VyIHByb2dyYW1zIGNhbiB1c2UgdG8gZmlndXJlIG91dCB3aGF0CisgICBpbnN0cnVjdGlvbiBzZXQgdGhpcyBDUFUgc3VwcG9ydHMuICBUaGlzIGlzIHRyaXZpYWwgb24gQWxwaGEsIAorICAgYnV0IG5vdCBzbyBvbiBvdGhlciBtYWNoaW5lcy4gKi8KKworI2RlZmluZSBFTEZfSFdDQVAgICh+YW1hc2soLTEpKQorCisvKiBUaGlzIHlpZWxkcyBhIHN0cmluZyB0aGF0IGxkLnNvIHdpbGwgdXNlIHRvIGxvYWQgaW1wbGVtZW50YXRpb24KKyAgIHNwZWNpZmljIGxpYnJhcmllcyBmb3Igb3B0aW1pemF0aW9uLiAgVGhpcyBpcyBtb3JlIHNwZWNpZmljIGluCisgICBpbnRlbnQgdGhhbiBwb2tpbmcgYXQgdW5hbWUgb3IgL3Byb2MvY3B1aW5mby4gICovCisKKyNkZWZpbmUgRUxGX1BMQVRGT1JNCQkJCVwKKyh7CQkJCQkJXAorCWVudW0gaW1wbHZlcl9lbnVtIGlfID0gaW1wbHZlcigpOwlcCisJKCBpXyA9PSBJTVBMVkVSX0VWNCA/ICJldjQiCQlcCisJOiBpXyA9PSBJTVBMVkVSX0VWNQkJCVwKKwkgID8gKGFtYXNrKEFNQVNLX0JXWCkgPyAiZXY1IiA6ICJldjU2IikJXAorCTogYW1hc2sgKEFNQVNLX0NJWCkgPyAiZXY2IiA6ICJldjY3Iik7CVwKK30pCisKKy8qIFJlc2VydmUgdGhlc2UgbnVtYmVycyBmb3IgYW55IGZ1dHVyZSB1c2Ugb2YgYSBWRFNPLiAgKi8KKyNpZiAwCisjZGVmaW5lIEFUX1NZU0lORk8JCTMyCisjZGVmaW5lIEFUX1NZU0lORk9fRUhEUgkJMzMKKyNlbmRpZgorCisvKiBNb3JlIGNvbXBsZXRlIGNhY2hlIGRlc2NyaXB0aW9ucyB0aGFuIEFUX1tESVVdQ0FDSEVCU0laRS4gIElmIHRoZQorICAgdmFsdWUgaXMgLTEsIHRoZW4gdGhlIGNhY2hlIGRvZXNuJ3QgZXhpc3QuICBPdGhlcndpc2U6CisKKyAgICAgIGJpdCAwLTM6CSAgQ2FjaGUgc2V0LWFzc29jaWF0aXZpdHk7IDAgbWVhbnMgZnVsbHkgYXNzb2NpYXRpdmUuCisgICAgICBiaXQgNC03OgkgIExvZzIgb2YgY2FjaGVsaW5lIHNpemUuCisgICAgICBiaXQgOC0zMToJICBTaXplIG9mIHRoZSBlbnRpcmUgY2FjaGUgPj4gOC4KKyAgICAgIGJpdCAzMi02MzogIFJlc2VydmVkLgorKi8KKworI2RlZmluZSBBVF9MMUlfQ0FDSEVTSEFQRQkzNAorI2RlZmluZSBBVF9MMURfQ0FDSEVTSEFQRQkzNQorI2RlZmluZSBBVF9MMl9DQUNIRVNIQVBFCTM2CisjZGVmaW5lIEFUX0wzX0NBQ0hFU0hBUEUJMzcKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoRVgsIElCQ1MyKQkJCQlcCisJc2V0X3BlcnNvbmFsaXR5KCgoRVgpLmVfZmxhZ3MgJiBFRl9BTFBIQV8zMkJJVCkJCVwKKwkgICA/IFBFUl9MSU5VWF8zMkJJVCA6IChJQkNTMikgPyBQRVJfU1ZSNCA6IFBFUl9MSU5VWCkKKworZXh0ZXJuIGludCBhbHBoYV9sMWlfY2FjaGVzaGFwZTsKK2V4dGVybiBpbnQgYWxwaGFfbDFkX2NhY2hlc2hhcGU7CitleHRlcm4gaW50IGFscGhhX2wyX2NhY2hlc2hhcGU7CitleHRlcm4gaW50IGFscGhhX2wzX2NhY2hlc2hhcGU7CisKKyNkZWZpbmUgQVJDSF9ETElORk8JCQkJCQlcCisgIGRvIHsJCQkJCQkJCVwKKyAgICBORVdfQVVYX0VOVChBVF9MMUlfQ0FDSEVTSEFQRSwgYWxwaGFfbDFpX2NhY2hlc2hhcGUpOwlcCisgICAgTkVXX0FVWF9FTlQoQVRfTDFEX0NBQ0hFU0hBUEUsIGFscGhhX2wxZF9jYWNoZXNoYXBlKTsJXAorICAgIE5FV19BVVhfRU5UKEFUX0wyX0NBQ0hFU0hBUEUsIGFscGhhX2wyX2NhY2hlc2hhcGUpOwkJXAorICAgIE5FV19BVVhfRU5UKEFUX0wzX0NBQ0hFU0hBUEUsIGFscGhhX2wzX2NhY2hlc2hhcGUpOwkJXAorICB9IHdoaWxlICgwKQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9fQVNNX0FMUEhBX0VMRl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9lcnJfY29tbW9uLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9lcnJfY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI1MDk1OQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL2Vycl9jb21tb24uaApAQCAtMCwwICsxLDExOCBAQAorLyoKKyAqCWxpbnV4L2luY2x1ZGUvYXNtLWFscGhhL2Vycl9jb21tb24uaAorICoKKyAqCUNvcHlyaWdodCAoQykgMjAwMCBKZWZmIFdpZWRlbWVpZXIgKENvbXBhcSBDb21wdXRlciBDb3Jwb3JhdGlvbikKKyAqCisgKglDb250YWlucyBkZWNsYXJhdGlvbnMgYW5kIG1hY3JvcyB0byBzdXBwb3J0IEFscGhhIGVycm9yIGhhbmRsaW5nCisgKiAJaW1wbGVtZW50YXRpb25zLgorICovCisKKyNpZm5kZWYgX19BTFBIQV9FUlJfQ09NTU9OX0gKKyNkZWZpbmUgX19BTFBIQV9FUlJfQ09NTU9OX0ggMQorCisvKgorICogU0NCIFZlY3RvciBkZWZpbml0aW9ucworICovCisjZGVmaW5lIFNDQl9RX1NZU0VSUgkweDYyMAorI2RlZmluZSBTQ0JfUV9QUk9DRVJSCTB4NjMwCisjZGVmaW5lIFNDQl9RX1NZU01DSEsJMHg2NjAKKyNkZWZpbmUgU0NCX1FfUFJPQ01DSEsJMHg2NzAKKyNkZWZpbmUgU0NCX1FfU1lTRVZFTlQJMHg2ODAKKworLyoKKyAqIERpc3Bvc2l0aW9uIGRlZmluaXRpb25zIGZvciBsb2dvdXQgZnJhbWUgcGFyc2VyCisgKi8KKyNkZWZpbmUgTUNIS19ESVNQT1NJVElPTl9VTktOT1dOX0VSUk9SCQkweDAwCisjZGVmaW5lIE1DSEtfRElTUE9TSVRJT05fUkVQT1JUCQkJMHgwMQorI2RlZmluZSBNQ0hLX0RJU1BPU0lUSU9OX0RJU01JU1MJCTB4MDIKKworLyoKKyAqIEVycm9yIExvZyBkZWZpbml0aW9ucworICovCisvKgorICogVHlwZXMKKyAqLworCisjZGVmaW5lIEVMX0NMQVNTX19URVJNSU5BVElPTgkJKDApCisjICBkZWZpbmUgRUxfVFlQRV9fVEVSTUlOQVRJT05fX1RFUk1JTkFUSU9OCQkoMCkKKyNkZWZpbmUgRUxfQ0xBU1NfX0hFQURFUgkJKDUpCisjICBkZWZpbmUgRUxfVFlQRV9fSEVBREVSX19TWVNURU1fRVJST1JfRlJBTUUJCSgxKQorIyAgZGVmaW5lIEVMX1RZUEVfX0hFQURFUl9fU1lTVEVNX0VWRU5UX0ZSQU1FCQkoMikKKyMgIGRlZmluZSBFTF9UWVBFX19IRUFERVJfX0hBTFRfRlJBTUUJCQkoMykKKyMgIGRlZmluZSBFTF9UWVBFX19IRUFERVJfX0xPR09VVF9GUkFNRQkJCSgxOSkKKyNkZWZpbmUgRUxfQ0xBU1NfX0dFTkVSQUxfTk9USUZJQ0FUSU9OCSg5KQorI2RlZmluZSBFTF9DTEFTU19fUENJX0VSUk9SX0ZSQU1FCSgxMSkKKyNkZWZpbmUgRUxfQ0xBU1NfX1JFR0FUVEFfRkFNSUxZCSgxMikKKyMgIGRlZmluZSBFTF9UWVBFX19SRUdBVFRBX19QUk9DRVNTT1JfRVJST1JfRlJBTUUJKDEpCisjICBkZWZpbmUgRUxfVFlQRV9fUkVHQVRUQV9fU1lTVEVNX0VSUk9SX0ZSQU1FCQkoMikKKyMgIGRlZmluZSBFTF9UWVBFX19SRUdBVFRBX19FTlZJUk9OTUVOVEFMX0ZSQU1FCQkoMykKKyMgIGRlZmluZSBFTF9UWVBFX19SRUdBVFRBX19USVRBTl9QQ0hJUDBfRVhURU5ERUQJKDgpCisjICBkZWZpbmUgRUxfVFlQRV9fUkVHQVRUQV9fVElUQU5fUENISVAxX0VYVEVOREVECSg5KQorIyAgZGVmaW5lIEVMX1RZUEVfX1JFR0FUVEFfX1RJVEFOX01FTU9SWV9FWFRFTkRFRAkoMTApCisjICBkZWZpbmUgRUxfVFlQRV9fUkVHQVRUQV9fUFJPQ0VTU09SX0RCTF9FUlJPUl9IQUxUCSgxMSkKKyMgIGRlZmluZSBFTF9UWVBFX19SRUdBVFRBX19TWVNURU1fREJMX0VSUk9SX0hBTFQJKDEyKQorI2RlZmluZSBFTF9DTEFTU19fUEFMICAgICAgICAgICAgICAgICAgICgxNCkKKyMgIGRlZmluZSBFTF9UWVBFX19QQUxfX0xPR09VVF9GUkFNRSAgICAgICAgICAgICAgICAgICAgKDEpCisjICBkZWZpbmUgRUxfVFlQRV9fUEFMX19FVjdfUFJPQ0VTU09SCQkJKDQpCisjICBkZWZpbmUgRUxfVFlQRV9fUEFMX19FVjdfWkJPWAkJCSg1KQorIyAgZGVmaW5lIEVMX1RZUEVfX1BBTF9fRVY3X1JCT1gJCQkoNikKKyMgIGRlZmluZSBFTF9UWVBFX19QQUxfX0VWN19JTwkJCQkoNykKKyMgIGRlZmluZSBFTF9UWVBFX19QQUxfX0VOVl9fQU1CSUVOVF9URU1QRVJBVFVSRQkoMTApCisjICBkZWZpbmUgRUxfVFlQRV9fUEFMX19FTlZfX0FJUk1PVkVSX0ZBTgkJKDExKQorIyAgZGVmaW5lIEVMX1RZUEVfX1BBTF9fRU5WX19WT0xUQUdFCQkJKDEyKQorIyAgZGVmaW5lIEVMX1RZUEVfX1BBTF9fRU5WX19JTlRSVVNJT04JCQkoMTMpCisjICBkZWZpbmUgRUxfVFlQRV9fUEFMX19FTlZfX1BPV0VSX1NVUFBMWQkJKDE0KQorIyAgZGVmaW5lIEVMX1RZUEVfX1BBTF9fRU5WX19MQU4JCQkoMTUpCisjICBkZWZpbmUgRUxfVFlQRV9fUEFMX19FTlZfX0hPVF9QTFVHCQkJKDE2KQorCit1bmlvbiBlbF90aW1lc3RhbXAgeworCXN0cnVjdCB7CisJCXU4IHNlY29uZDsKKwkJdTggbWludXRlOworCQl1OCBob3VyOworCQl1OCBkYXk7CisJCXU4IG1vbnRoOworCQl1OCB5ZWFyOworCX0gYjsKKwl1NjQgYXNfaW50OworfTsKKworc3RydWN0IGVsX3N1YnBhY2tldCB7CisJdTE2IGxlbmd0aDsJCS8qIGxlbmd0aCBvZiBoZWFkZXIgKGluIGJ5dGVzKQkqLworCXUxNiBjbGFzczsJCS8qIGhlYWRlciBjbGFzcyBhbmQgdHlwZS4uLiAgIAkqLworCXUxNiB0eXBlOwkJLyogLi4uZGV0ZXJtaW5lIGNvbnRlbnQgICAgIAkqLworCXUxNiByZXZpc2lvbjsJCS8qIGhlYWRlciByZXZpc2lvbiAJCSovCisJdW5pb24geworCQlzdHJ1Y3QgewkvKiBDbGFzcyA1LCBUeXBlIDEgLSBTeXN0ZW0gRXJyb3IJKi8KKwkJCXUzMiBmcmFtZV9sZW5ndGg7CisJCQl1MzIgZnJhbWVfcGFja2V0X2NvdW50OwkJCQorCQl9IHN5c19lcnI7CQkJCisJCXN0cnVjdCB7CS8qIENsYXNzIDUsIFR5cGUgMiAtIFN5c3RlbSBFdmVudCAJKi8KKwkJCXVuaW9uIGVsX3RpbWVzdGFtcCB0aW1lc3RhbXA7CisJCQl1MzIgZnJhbWVfbGVuZ3RoOworCQkJdTMyIGZyYW1lX3BhY2tldF9jb3VudDsJCQkKKwkJfSBzeXNfZXZlbnQ7CisJCXN0cnVjdCB7CS8qIENsYXNzIDUsIFR5cGUgMyAtIERvdWJsZSBFcnJvciBIYWx0CSovCisJCQl1MTYgaGFsdF9jb2RlOworCQkJdTE2IHJlc2VydmVkOworCQkJdW5pb24gZWxfdGltZXN0YW1wIHRpbWVzdGFtcDsKKwkJCXUzMiBmcmFtZV9sZW5ndGg7CisJCQl1MzIgZnJhbWVfcGFja2V0X2NvdW50OworCQl9IGVycl9oYWx0OworCQlzdHJ1Y3QgewkvKiBDbGFzZWUgNSwgVHlwZSAxOSAtIExvZ291dCBGcmFtZSBIZWFkZXIgKi8KKwkJCXUzMiBmcmFtZV9sZW5ndGg7CisJCQl1MzIgZnJhbWVfZmxhZ3M7CisJCQl1MzIgY3B1X29mZnNldDsJCisJCQl1MzIgc3lzdGVtX29mZnNldDsKKwkJfSBsb2dvdXRfaGVhZGVyOworCQlzdHJ1Y3QgewkvKiBDbGFzcyAxMiAtIFJlZ2F0dGEJCQkqLworCQkJdTY0IGNwdWlkOworCQkJdTY0IGRhdGFfc3RhcnRbMV07CisJCX0gcmVnYXR0YV9mcmFtZTsKKwkJc3RydWN0IHsJLyogUmF3IAkJCQkgICAgICAgICovCisJCQl1NjQgZGF0YV9zdGFydFsxXTsKKwkJfSByYXc7CisJfSBieV90eXBlOworfTsKKworI2VuZGlmIC8qIF9fQUxQSEFfRVJSX0NPTU1PTl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9lcnJfZXY2LmggYi9pbmNsdWRlL2FzbS1hbHBoYS9lcnJfZXY2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE2Mzc3OQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL2Vycl9ldjYuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19BTFBIQV9FUlJfRVY2X0gKKyNkZWZpbmUgX19BTFBIQV9FUlJfRVY2X0ggMQorCisvKiBEdW1teSBpbmNsdWRlIGZvciBub3cuICovCisKKyNlbmRpZiAvKiBfX0FMUEhBX0VSUl9FVjZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvZXJyX2V2Ny5oIGIvaW5jbHVkZS9hc20tYWxwaGEvZXJyX2V2Ny5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3Zjk5NzcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9lcnJfZXY3LmgKQEAgLTAsMCArMSwyMDIgQEAKKyNpZm5kZWYgX19BTFBIQV9FUlJfRVY3X0gKKyNkZWZpbmUgX19BTFBIQV9FUlJfRVY3X0ggMQorCisvKgorICogRGF0YSBmb3IgZWwgcGFja2V0IGNsYXNzIFBBTCAoMTQpLCB0eXBlIExPR09VVF9GUkFNRSAoMSkKKyAqLworc3RydWN0IGV2N19wYWxfbG9nb3V0X3N1YnBhY2tldCB7CisJdTMyIG1jaGtfY29kZTsKKwl1MzIgc3VicGFja2V0X2NvdW50OworCXU2NCB3aGFtaTsKKwl1NjQgcmJveF93aGFtaTsKKwl1NjQgcmJveF9pbnQ7CisJdTY0IGV4Y19hZGRyOworCXVuaW9uIGVsX3RpbWVzdGFtcCB0aW1lc3RhbXA7CisJdTY0IGhhbHRfY29kZTsKKwl1NjQgcmVzZXJ2ZWQ7Cit9OworCisvKgorICogRGF0YSBmb3IgZWwgcGFja2V0IGNsYXNzIFBBTCAoMTQpLCB0eXBlIEVWN19QUk9DRVNTT1IgKDQpCisgKi8KK3N0cnVjdCBldjdfcGFsX3Byb2Nlc3Nvcl9zdWJwYWNrZXQgeworCXU2NCBpX3N0YXQ7CisJdTY0IGRjX3N0YXQ7CisJdTY0IGNfYWRkcjsKKwl1NjQgY19zeW5kcm9tZV8xOworCXU2NCBjX3N5bmRyb21lXzA7CisJdTY0IGNfc3RhdDsKKwl1NjQgY19zdHM7CisJdTY0IG1tX3N0YXQ7CisJdTY0IGV4Y19hZGRyOworCXU2NCBpZXJfY207CisJdTY0IGlzdW07CisJdTY0IHBhbF9iYXNlOworCXU2NCBpX2N0bDsKKwl1NjQgcHJvY2Vzc19jb250ZXh0OworCXU2NCBjYm94X2N0bDsKKwl1NjQgY2JveF9zdHBfY3RsOworCXU2NCBjYm94X2FjY19jdGw7CisJdTY0IGNib3hfbGNsX3NldDsKKwl1NjQgY2JveF9nYmxfc2V0OworCXU2NCBiYm94X2N0bDsKKwl1NjQgYmJveF9lcnJfc3RzOworCXU2NCBiYm94X2Vycl9pZHg7CisJdTY0IGNib3hfZGRwX2Vycl9zdHM7CisJdTY0IGJib3hfZGF0X3JtcDsKKwl1NjQgcmVzZXJ2ZWRbMl07Cit9OworCisvKgorICogRGF0YSBmb3IgZWwgcGFja2V0IGNsYXNzIFBBTCAoMTQpLCB0eXBlIEVWN19aQk9YICg1KQorICovCitzdHJ1Y3QgZXY3X3BhbF96Ym94X3N1YnBhY2tldCB7CisJdTMyIHpib3gwX2RyYW1fZXJyX3N0YXR1c18xOworCXUzMiB6Ym94MF9kcmFtX2Vycl9zdGF0dXNfMjsKKwl1MzIgemJveDBfZHJhbV9lcnJfc3RhdHVzXzM7CisJdTMyIHpib3gwX2RyYW1fZXJyX2N0bDsKKwl1MzIgemJveDBfZHJhbV9lcnJfYWRyOworCXUzMiB6Ym94MF9kaWZ0X3RpbWVvdXQ7CisJdTMyIHpib3gwX2RyYW1fbWFwcGVyX2N0bDsKKwl1MzIgemJveDBfZnJjX2Vycl9hZHI7CisJdTMyIHpib3gwX2RpZnRfZXJyX3N0YXR1czsKKwl1MzIgcmVzZXJ2ZWQxOworCXUzMiB6Ym94MV9kcmFtX2Vycl9zdGF0dXNfMTsKKwl1MzIgemJveDFfZHJhbV9lcnJfc3RhdHVzXzI7CisJdTMyIHpib3gxX2RyYW1fZXJyX3N0YXR1c18zOworCXUzMiB6Ym94MV9kcmFtX2Vycl9jdGw7CisJdTMyIHpib3gxX2RyYW1fZXJyX2FkcjsKKwl1MzIgemJveDFfZGlmdF90aW1lb3V0OworCXUzMiB6Ym94MV9kcmFtX21hcHBlcl9jdGw7CisJdTMyIHpib3gxX2ZyY19lcnJfYWRyOworCXUzMiB6Ym94MV9kaWZ0X2Vycl9zdGF0dXM7CisJdTMyIHJlc2VydmVkMjsKKwl1NjQgY2JveF9jdGw7CisJdTY0IGNib3hfc3RwX2N0bDsKKwl1NjQgemJveDBfZXJyb3JfcGE7CisJdTY0IHpib3gxX2Vycm9yX3BhOworCXU2NCB6Ym94MF9vcmVkX3N5bmRyb21lOworCXU2NCB6Ym94MV9vcmVkX3N5bmRyb21lOworCXU2NCByZXNlcnZlZDNbMl07Cit9OworCisvKgorICogRGF0YSBmb3IgZWwgcGFja2V0IGNsYXNzIFBBTCAoMTQpLCB0eXBlIEVWN19SQk9YICg2KQorICovCitzdHJ1Y3QgZXY3X3BhbF9yYm94X3N1YnBhY2tldCB7CisJdTY0IHJib3hfY2ZnOworCXU2NCByYm94X25fY2ZnOworCXU2NCByYm94X3NfY2ZnOworCXU2NCByYm94X2VfY2ZnOworCXU2NCByYm94X3dfY2ZnOworCXU2NCByYm94X25fZXJyOworCXU2NCByYm94X3NfZXJyOworCXU2NCByYm94X2VfZXJyOworCXU2NCByYm94X3dfZXJyOworCXU2NCByYm94X2lvX2NmZzsKKwl1NjQgcmJveF9pb19lcnI7CisJdTY0IHJib3hfbF9lcnI7CisJdTY0IHJib3hfd2hvYW1pOworCXU2NCByYm94X2ltYXNrOworCXU2NCByYm94X2ludHE7CisJdTY0IHJib3hfaW50OworCXU2NCByZXNlcnZlZFsyXTsKK307CisKKy8qCisgKiBEYXRhIGZvciBlbCBwYWNrZXQgY2xhc3MgUEFMICgxNCksIHR5cGUgRVY3X0lPICg3KQorICovCitzdHJ1Y3QgZXY3X3BhbF9pb19vbmVfcG9ydCB7CisJdTY0IHBveF9lcnJfc3VtOworCXU2NCBwb3hfdGxiX2VycjsKKwl1NjQgcG94X3NwbF9jbXBsdDsKKwl1NjQgcG94X3RyYW5zX3N1bTsKKwl1NjQgcG94X2ZpcnN0X2VycjsKKwl1NjQgcG94X211bHRfZXJyOworCXU2NCBwb3hfZG1fc291cmNlOworCXU2NCBwb3hfZG1fZGVzdDsKKwl1NjQgcG94X2RtX3NpemU7CisJdTY0IHBveF9kbV9jdHJsOworCXU2NCByZXNlcnZlZDsKK307CisKK3N0cnVjdCBldjdfcGFsX2lvX3N1YnBhY2tldCB7CisJdTY0IGlvX2FzaWNfcmV2OworCXU2NCBpb19zeXNfcmV2OworCXU2NCBpbzdfdXBoOworCXU2NCBocGlfY3RsOworCXU2NCBjcmRfY3RsOworCXU2NCBoZWlfY3RsOworCXU2NCBwbzdfZXJyb3Jfc3VtOworCXU2NCBwbzdfdW5jcnJfc3ltOworCXU2NCBwbzdfY3JyY3Rfc3ltOworCXU2NCBwbzdfdWdiZ2Vfc3ltOworCXU2NCBwbzdfZXJyX3BrdDA7CisJdTY0IHBvN19lcnJfcGt0MTsKKwl1NjQgcmVzZXJ2ZWRbMl07CisJc3RydWN0IGV2N19wYWxfaW9fb25lX3BvcnQgcG9ydHNbNF07Cit9OworCisvKgorICogRW52aXJvbm1lbnRhbCBzdWJwYWNrZXQuIERhdGEgdXNlZCBmb3IgZWwgcGFja2V0czoKKyAqIAkgICBjbGFzcyBQQUwgKDE0KSwgdHlwZSBBTUJJRU5UX1RFTVBFUkFUVVJFICgxMCkKKyAqIAkgICBjbGFzcyBQQUwgKDE0KSwgdHlwZSBBSVJNT1ZFUl9GQU4gKDExKQorICogCSAgIGNsYXNzIFBBTCAoMTQpLCB0eXBlIFZPTFRBR0UgKDEyKQorICogCSAgIGNsYXNzIFBBTCAoMTQpLCB0eXBlIElOVFJVU0lPTiAoMTMpCisgKgkgICBjbGFzcyBQQUwgKDE0KSwgdHlwZSBQT1dFUl9TVVBQTFkgKDE0KQorICoJICAgY2xhc3MgUEFMICgxNCksIHR5cGUgTEFOICgxNSkKKyAqCSAgIGNsYXNzIFBBTCAoMTQpLCB0eXBlIEhPVF9QTFVHICgxNikKKyAqLworc3RydWN0IGV2N19wYWxfZW52aXJvbm1lbnRhbF9zdWJwYWNrZXQgeworCXUxNiBjYWJpbmV0OworCXUxNiBkcmF3ZXI7CisJdTE2IHJlc2VydmVkMVsyXTsKKwl1OCBtb2R1bGVfdHlwZTsKKwl1OCB1bml0X2lkOwkJLyogdW5pdCByZXBvcnRpbmcgY29uZGl0aW9uICovCisJdTggcmVzZXJ2ZWQyOworCXU4IGNvbmRpdGlvbjsJCS8qIGNvbmRpdGlvbiByZXBvcnRlZCAgICAgICAqLworfTsKKworLyoKKyAqIENvbnZlcnQgZW52aXJvbm1lbnRhbCB0eXBlIHRvIGluZGV4CisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGV2N19sZl9lbnZfaW5kZXgoaW50IHR5cGUpCit7CisJQlVHX09OKCh0eXBlIDwgRUxfVFlQRV9fUEFMX19FTlZfX0FNQklFTlRfVEVNUEVSQVRVUkUpIAorCSAgICAgICB8fCAodHlwZSA+IEVMX1RZUEVfX1BBTF9fRU5WX19IT1RfUExVRykpOworCisJcmV0dXJuIHR5cGUgLSBFTF9UWVBFX19QQUxfX0VOVl9fQU1CSUVOVF9URU1QRVJBVFVSRTsKK30KKworLyoKKyAqIERhdGEgZm9yIGdlbmVyaWMgZWwgcGFja2V0IGNsYXNzIFBBTC4KKyAqLworc3RydWN0IGV2N19wYWxfc3VicGFja2V0IHsKKwl1bmlvbiB7CisJCXN0cnVjdCBldjdfcGFsX2xvZ291dF9zdWJwYWNrZXQgbG9nb3V0OwkgICAgIC8qIFR5cGUgICAgIDEgKi8KKwkJc3RydWN0IGV2N19wYWxfcHJvY2Vzc29yX3N1YnBhY2tldCBldjc7CSAgICAgLyogVHlwZSAgICAgNCAqLworCQlzdHJ1Y3QgZXY3X3BhbF96Ym94X3N1YnBhY2tldCB6Ym94OwkgICAgIC8qIFR5cGUgICAgIDUgKi8KKwkJc3RydWN0IGV2N19wYWxfcmJveF9zdWJwYWNrZXQgcmJveDsJICAgICAvKiBUeXBlICAgICA2ICovCisJCXN0cnVjdCBldjdfcGFsX2lvX3N1YnBhY2tldCBpbzsJCSAgICAgLyogVHlwZSAgICAgNyAqLworCQlzdHJ1Y3QgZXY3X3BhbF9lbnZpcm9ubWVudGFsX3N1YnBhY2tldCBlbnY7ICAvKiBUeXBlIDEwLTE2ICovCisJCXU2NCBhc19xdWFkWzFdOwkJCQkgICAgIC8qIFJhdyB1NjQgICAgKi8KKwl9IGJ5X3R5cGU7Cit9OworCisvKgorICogU3RydWN0IHRvIGNvbnRhaW4gY29sbGVjdGVkIGxvZ291dCBmcm9tIHN1YnBhY2tldHMuCisgKi8KK3N0cnVjdCBldjdfbGZfc3VicGFja2V0cyB7CisJc3RydWN0IGV2N19wYWxfbG9nb3V0X3N1YnBhY2tldCAqbG9nb3V0OwkJLyogVHlwZSAgMSAqLworCXN0cnVjdCBldjdfcGFsX3Byb2Nlc3Nvcl9zdWJwYWNrZXQgKmV2NzsJCS8qIFR5cGUgIDQgKi8KKwlzdHJ1Y3QgZXY3X3BhbF96Ym94X3N1YnBhY2tldCAqemJveDsJCQkvKiBUeXBlICA1ICovCisJc3RydWN0IGV2N19wYWxfcmJveF9zdWJwYWNrZXQgKnJib3g7CQkJLyogVHlwZSAgNiAqLworCXN0cnVjdCBldjdfcGFsX2lvX3N1YnBhY2tldCAqaW87CQkJLyogVHlwZSAgNyAqLworCXN0cnVjdCBldjdfcGFsX2Vudmlyb25tZW50YWxfc3VicGFja2V0ICplbnZbN107CSAgICAgLyogVHlwZSAxMC0xNiAqLworCisJdW5zaWduZWQgaW50IGlvX3BpZDsKK307CisKKyNlbmRpZiAvKiBfX0FMUEhBX0VSUl9FVjdfSCAqLworCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL2Vycm5vLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9lcnJuby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4NWFiNmIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9lcnJuby5oCkBAIC0wLDAgKzEsMTE5IEBACisjaWZuZGVmIF9BTFBIQV9FUlJOT19ICisjZGVmaW5lIF9BTFBIQV9FUlJOT19ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9lcnJuby1iYXNlLmg+CisKKyN1bmRlZglFQUdBSU4JCQkvKiAxMSBpbiBlcnJuby1iYXNlLmggKi8KKworI2RlZmluZQlFREVBRExLCQkxMQkvKiBSZXNvdXJjZSBkZWFkbG9jayB3b3VsZCBvY2N1ciAqLworCisjZGVmaW5lCUVBR0FJTgkJMzUJLyogVHJ5IGFnYWluICovCisjZGVmaW5lCUVXT1VMREJMT0NLCUVBR0FJTgkvKiBPcGVyYXRpb24gd291bGQgYmxvY2sgKi8KKyNkZWZpbmUJRUlOUFJPR1JFU1MJMzYJLyogT3BlcmF0aW9uIG5vdyBpbiBwcm9ncmVzcyAqLworI2RlZmluZQlFQUxSRUFEWQkzNwkvKiBPcGVyYXRpb24gYWxyZWFkeSBpbiBwcm9ncmVzcyAqLworI2RlZmluZQlFTk9UU09DSwkzOAkvKiBTb2NrZXQgb3BlcmF0aW9uIG9uIG5vbi1zb2NrZXQgKi8KKyNkZWZpbmUJRURFU1RBRERSUkVRCTM5CS8qIERlc3RpbmF0aW9uIGFkZHJlc3MgcmVxdWlyZWQgKi8KKyNkZWZpbmUJRU1TR1NJWkUJNDAJLyogTWVzc2FnZSB0b28gbG9uZyAqLworI2RlZmluZQlFUFJPVE9UWVBFCTQxCS8qIFByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldCAqLworI2RlZmluZQlFTk9QUk9UT09QVAk0MgkvKiBQcm90b2NvbCBub3QgYXZhaWxhYmxlICovCisjZGVmaW5lCUVQUk9UT05PU1VQUE9SVAk0MwkvKiBQcm90b2NvbCBub3Qgc3VwcG9ydGVkICovCisjZGVmaW5lCUVTT0NLVE5PU1VQUE9SVAk0NAkvKiBTb2NrZXQgdHlwZSBub3Qgc3VwcG9ydGVkICovCisjZGVmaW5lCUVPUE5PVFNVUFAJNDUJLyogT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQgb24gdHJhbnNwb3J0IGVuZHBvaW50ICovCisjZGVmaW5lCUVQRk5PU1VQUE9SVAk0NgkvKiBQcm90b2NvbCBmYW1pbHkgbm90IHN1cHBvcnRlZCAqLworI2RlZmluZQlFQUZOT1NVUFBPUlQJNDcJLyogQWRkcmVzcyBmYW1pbHkgbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbCAqLworI2RlZmluZQlFQUREUklOVVNFCTQ4CS8qIEFkZHJlc3MgYWxyZWFkeSBpbiB1c2UgKi8KKyNkZWZpbmUJRUFERFJOT1RBVkFJTAk0OQkvKiBDYW5ub3QgYXNzaWduIHJlcXVlc3RlZCBhZGRyZXNzICovCisjZGVmaW5lCUVORVRET1dOCTUwCS8qIE5ldHdvcmsgaXMgZG93biAqLworI2RlZmluZQlFTkVUVU5SRUFDSAk1MQkvKiBOZXR3b3JrIGlzIHVucmVhY2hhYmxlICovCisjZGVmaW5lCUVORVRSRVNFVAk1MgkvKiBOZXR3b3JrIGRyb3BwZWQgY29ubmVjdGlvbiBiZWNhdXNlIG9mIHJlc2V0ICovCisjZGVmaW5lCUVDT05OQUJPUlRFRAk1MwkvKiBTb2Z0d2FyZSBjYXVzZWQgY29ubmVjdGlvbiBhYm9ydCAqLworI2RlZmluZQlFQ09OTlJFU0VUCTU0CS8qIENvbm5lY3Rpb24gcmVzZXQgYnkgcGVlciAqLworI2RlZmluZQlFTk9CVUZTCQk1NQkvKiBObyBidWZmZXIgc3BhY2UgYXZhaWxhYmxlICovCisjZGVmaW5lCUVJU0NPTk4JCTU2CS8qIFRyYW5zcG9ydCBlbmRwb2ludCBpcyBhbHJlYWR5IGNvbm5lY3RlZCAqLworI2RlZmluZQlFTk9UQ09OTgk1NwkvKiBUcmFuc3BvcnQgZW5kcG9pbnQgaXMgbm90IGNvbm5lY3RlZCAqLworI2RlZmluZQlFU0hVVERPV04JNTgJLyogQ2Fubm90IHNlbmQgYWZ0ZXIgdHJhbnNwb3J0IGVuZHBvaW50IHNodXRkb3duICovCisjZGVmaW5lCUVUT09NQU5ZUkVGUwk1OQkvKiBUb28gbWFueSByZWZlcmVuY2VzOiBjYW5ub3Qgc3BsaWNlICovCisjZGVmaW5lCUVUSU1FRE9VVAk2MAkvKiBDb25uZWN0aW9uIHRpbWVkIG91dCAqLworI2RlZmluZQlFQ09OTlJFRlVTRUQJNjEJLyogQ29ubmVjdGlvbiByZWZ1c2VkICovCisjZGVmaW5lCUVMT09QCQk2MgkvKiBUb28gbWFueSBzeW1ib2xpYyBsaW5rcyBlbmNvdW50ZXJlZCAqLworI2RlZmluZQlFTkFNRVRPT0xPTkcJNjMJLyogRmlsZSBuYW1lIHRvbyBsb25nICovCisjZGVmaW5lCUVIT1NURE9XTgk2NAkvKiBIb3N0IGlzIGRvd24gKi8KKyNkZWZpbmUJRUhPU1RVTlJFQUNICTY1CS8qIE5vIHJvdXRlIHRvIGhvc3QgKi8KKyNkZWZpbmUJRU5PVEVNUFRZCTY2CS8qIERpcmVjdG9yeSBub3QgZW1wdHkgKi8KKworI2RlZmluZQlFVVNFUlMJCTY4CS8qIFRvbyBtYW55IHVzZXJzICovCisjZGVmaW5lCUVEUVVPVAkJNjkJLyogUXVvdGEgZXhjZWVkZWQgKi8KKyNkZWZpbmUJRVNUQUxFCQk3MAkvKiBTdGFsZSBORlMgZmlsZSBoYW5kbGUgKi8KKyNkZWZpbmUJRVJFTU9URQkJNzEJLyogT2JqZWN0IGlzIHJlbW90ZSAqLworCisjZGVmaW5lCUVOT0xDSwkJNzcJLyogTm8gcmVjb3JkIGxvY2tzIGF2YWlsYWJsZSAqLworI2RlZmluZQlFTk9TWVMJCTc4CS8qIEZ1bmN0aW9uIG5vdCBpbXBsZW1lbnRlZCAqLworCisjZGVmaW5lCUVOT01TRwkJODAJLyogTm8gbWVzc2FnZSBvZiBkZXNpcmVkIHR5cGUgKi8KKyNkZWZpbmUJRUlEUk0JCTgxCS8qIElkZW50aWZpZXIgcmVtb3ZlZCAqLworI2RlZmluZQlFTk9TUgkJODIJLyogT3V0IG9mIHN0cmVhbXMgcmVzb3VyY2VzICovCisjZGVmaW5lCUVUSU1FCQk4MwkvKiBUaW1lciBleHBpcmVkICovCisjZGVmaW5lCUVCQURNU0cJCTg0CS8qIE5vdCBhIGRhdGEgbWVzc2FnZSAqLworI2RlZmluZQlFUFJPVE8JCTg1CS8qIFByb3RvY29sIGVycm9yICovCisjZGVmaW5lCUVOT0RBVEEJCTg2CS8qIE5vIGRhdGEgYXZhaWxhYmxlICovCisjZGVmaW5lCUVOT1NUUgkJODcJLyogRGV2aWNlIG5vdCBhIHN0cmVhbSAqLworCisjZGVmaW5lCUVOT1BLRwkJOTIJLyogUGFja2FnZSBub3QgaW5zdGFsbGVkICovCisKKyNkZWZpbmUJRUlMU0VRCQkxMTYJLyogSWxsZWdhbCBieXRlIHNlcXVlbmNlICovCisKKy8qIFRoZSBmb2xsb3dpbmcgYXJlIGp1c3QgcmFuZG9tIG5vaXNlLi4gKi8KKyNkZWZpbmUJRUNIUk5HCQk4OAkvKiBDaGFubmVsIG51bWJlciBvdXQgb2YgcmFuZ2UgKi8KKyNkZWZpbmUJRUwyTlNZTkMJODkJLyogTGV2ZWwgMiBub3Qgc3luY2hyb25pemVkICovCisjZGVmaW5lCUVMM0hMVAkJOTAJLyogTGV2ZWwgMyBoYWx0ZWQgKi8KKyNkZWZpbmUJRUwzUlNUCQk5MQkvKiBMZXZlbCAzIHJlc2V0ICovCisKKyNkZWZpbmUJRUxOUk5HCQk5MwkvKiBMaW5rIG51bWJlciBvdXQgb2YgcmFuZ2UgKi8KKyNkZWZpbmUJRVVOQVRDSAkJOTQJLyogUHJvdG9jb2wgZHJpdmVyIG5vdCBhdHRhY2hlZCAqLworI2RlZmluZQlFTk9DU0kJCTk1CS8qIE5vIENTSSBzdHJ1Y3R1cmUgYXZhaWxhYmxlICovCisjZGVmaW5lCUVMMkhMVAkJOTYJLyogTGV2ZWwgMiBoYWx0ZWQgKi8KKyNkZWZpbmUJRUJBREUJCTk3CS8qIEludmFsaWQgZXhjaGFuZ2UgKi8KKyNkZWZpbmUJRUJBRFIJCTk4CS8qIEludmFsaWQgcmVxdWVzdCBkZXNjcmlwdG9yICovCisjZGVmaW5lCUVYRlVMTAkJOTkJLyogRXhjaGFuZ2UgZnVsbCAqLworI2RlZmluZQlFTk9BTk8JCTEwMAkvKiBObyBhbm9kZSAqLworI2RlZmluZQlFQkFEUlFDCQkxMDEJLyogSW52YWxpZCByZXF1ZXN0IGNvZGUgKi8KKyNkZWZpbmUJRUJBRFNMVAkJMTAyCS8qIEludmFsaWQgc2xvdCAqLworCisjZGVmaW5lCUVERUFETE9DSwlFREVBRExLCisKKyNkZWZpbmUJRUJGT05UCQkxMDQJLyogQmFkIGZvbnQgZmlsZSBmb3JtYXQgKi8KKyNkZWZpbmUJRU5PTkVUCQkxMDUJLyogTWFjaGluZSBpcyBub3Qgb24gdGhlIG5ldHdvcmsgKi8KKyNkZWZpbmUJRU5PTElOSwkJMTA2CS8qIExpbmsgaGFzIGJlZW4gc2V2ZXJlZCAqLworI2RlZmluZQlFQURWCQkxMDcJLyogQWR2ZXJ0aXNlIGVycm9yICovCisjZGVmaW5lCUVTUk1OVAkJMTA4CS8qIFNybW91bnQgZXJyb3IgKi8KKyNkZWZpbmUJRUNPTU0JCTEwOQkvKiBDb21tdW5pY2F0aW9uIGVycm9yIG9uIHNlbmQgKi8KKyNkZWZpbmUJRU1VTFRJSE9QCTExMAkvKiBNdWx0aWhvcCBhdHRlbXB0ZWQgKi8KKyNkZWZpbmUJRURPVERPVAkJMTExCS8qIFJGUyBzcGVjaWZpYyBlcnJvciAqLworI2RlZmluZQlFT1ZFUkZMT1cJMTEyCS8qIFZhbHVlIHRvbyBsYXJnZSBmb3IgZGVmaW5lZCBkYXRhIHR5cGUgKi8KKyNkZWZpbmUJRU5PVFVOSVEJMTEzCS8qIE5hbWUgbm90IHVuaXF1ZSBvbiBuZXR3b3JrICovCisjZGVmaW5lCUVCQURGRAkJMTE0CS8qIEZpbGUgZGVzY3JpcHRvciBpbiBiYWQgc3RhdGUgKi8KKyNkZWZpbmUJRVJFTUNIRwkJMTE1CS8qIFJlbW90ZSBhZGRyZXNzIGNoYW5nZWQgKi8KKworI2RlZmluZQlFVUNMRUFOCQkxMTcJLyogU3RydWN0dXJlIG5lZWRzIGNsZWFuaW5nICovCisjZGVmaW5lCUVOT1ROQU0JCTExOAkvKiBOb3QgYSBYRU5JWCBuYW1lZCB0eXBlIGZpbGUgKi8KKyNkZWZpbmUJRU5BVkFJTAkJMTE5CS8qIE5vIFhFTklYIHNlbWFwaG9yZXMgYXZhaWxhYmxlICovCisjZGVmaW5lCUVJU05BTQkJMTIwCS8qIElzIGEgbmFtZWQgdHlwZSBmaWxlICovCisjZGVmaW5lCUVSRU1PVEVJTwkxMjEJLyogUmVtb3RlIEkvTyBlcnJvciAqLworCisjZGVmaW5lCUVMSUJBQ0MJCTEyMgkvKiBDYW4gbm90IGFjY2VzcyBhIG5lZWRlZCBzaGFyZWQgbGlicmFyeSAqLworI2RlZmluZQlFTElCQkFECQkxMjMJLyogQWNjZXNzaW5nIGEgY29ycnVwdGVkIHNoYXJlZCBsaWJyYXJ5ICovCisjZGVmaW5lCUVMSUJTQ04JCTEyNAkvKiAubGliIHNlY3Rpb24gaW4gYS5vdXQgY29ycnVwdGVkICovCisjZGVmaW5lCUVMSUJNQVgJCTEyNQkvKiBBdHRlbXB0aW5nIHRvIGxpbmsgaW4gdG9vIG1hbnkgc2hhcmVkIGxpYnJhcmllcyAqLworI2RlZmluZQlFTElCRVhFQwkxMjYJLyogQ2Fubm90IGV4ZWMgYSBzaGFyZWQgbGlicmFyeSBkaXJlY3RseSAqLworI2RlZmluZQlFUkVTVEFSVAkxMjcJLyogSW50ZXJydXB0ZWQgc3lzdGVtIGNhbGwgc2hvdWxkIGJlIHJlc3RhcnRlZCAqLworI2RlZmluZQlFU1RSUElQRQkxMjgJLyogU3RyZWFtcyBwaXBlIGVycm9yICovCisKKyNkZWZpbmUgRU5PTUVESVVNCTEyOQkvKiBObyBtZWRpdW0gZm91bmQgKi8KKyNkZWZpbmUgRU1FRElVTVRZUEUJMTMwCS8qIFdyb25nIG1lZGl1bSB0eXBlICovCisjZGVmaW5lCUVDQU5DRUxFRAkxMzEJLyogT3BlcmF0aW9uIENhbmNlbGxlZCAqLworI2RlZmluZQlFTk9LRVkJCTEzMgkvKiBSZXF1aXJlZCBrZXkgbm90IGF2YWlsYWJsZSAqLworI2RlZmluZQlFS0VZRVhQSVJFRAkxMzMJLyogS2V5IGhhcyBleHBpcmVkICovCisjZGVmaW5lCUVLRVlSRVZPS0VECTEzNAkvKiBLZXkgaGFzIGJlZW4gcmV2b2tlZCAqLworI2RlZmluZQlFS0VZUkVKRUNURUQJMTM1CS8qIEtleSB3YXMgcmVqZWN0ZWQgYnkgc2VydmljZSAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL2ZjbnRsLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9mY250bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiN2Q2YzEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9mY250bC5oCkBAIC0wLDAgKzEsNzUgQEAKKyNpZm5kZWYgX0FMUEhBX0ZDTlRMX0gKKyNkZWZpbmUgX0FMUEhBX0ZDTlRMX0gKKworLyogb3Blbi9mY250bCAtIE9fU1lOQyBpcyBvbmx5IGltcGxlbWVudGVkIG9uIGJsb2NrcyBkZXZpY2VzIGFuZCBvbiBmaWxlcworICAgbG9jYXRlZCBvbiBhbiBleHQyIGZpbGUgc3lzdGVtICovCisjZGVmaW5lIE9fQUNDTU9ERQkgIDAwMDMKKyNkZWZpbmUgT19SRE9OTFkJICAgIDAwCisjZGVmaW5lIE9fV1JPTkxZCSAgICAwMQorI2RlZmluZSBPX1JEV1IJCSAgICAwMgorI2RlZmluZSBPX0NSRUFUCQkgMDEwMDAJLyogbm90IGZjbnRsICovCisjZGVmaW5lIE9fVFJVTkMJCSAwMjAwMAkvKiBub3QgZmNudGwgKi8KKyNkZWZpbmUgT19FWENMCQkgMDQwMDAJLyogbm90IGZjbnRsICovCisjZGVmaW5lIE9fTk9DVFRZCTAxMDAwMAkvKiBub3QgZmNudGwgKi8KKworI2RlZmluZSBPX05PTkJMT0NLCSAwMDAwNAorI2RlZmluZSBPX0FQUEVORAkgMDAwMTAKKyNkZWZpbmUgT19OREVMQVkJT19OT05CTE9DSworI2RlZmluZSBPX1NZTkMJCTA0MDAwMAorI2RlZmluZSBGQVNZTkMJCTAyMDAwMAkvKiBmY250bCwgZm9yIEJTRCBjb21wYXRpYmlsaXR5ICovCisjZGVmaW5lIE9fRElSRUNUT1JZCTAxMDAwMDAJLyogbXVzdCBiZSBhIGRpcmVjdG9yeSAqLworI2RlZmluZSBPX05PRk9MTE9XCTAyMDAwMDAgLyogZG9uJ3QgZm9sbG93IGxpbmtzICovCisjZGVmaW5lIE9fTEFSR0VGSUxFCTA0MDAwMDAgLyogd2lsbCBiZSBzZXQgYnkgdGhlIGtlcm5lbCBvbiBldmVyeSBvcGVuICovCisjZGVmaW5lIE9fRElSRUNUCTAyMDAwMDAwIC8qIGRpcmVjdCBkaXNrIGFjY2VzcyAtIHNob3VsZCBjaGVjayB3aXRoIE9TRi8xICovCisjZGVmaW5lIE9fTk9BVElNRQkwNDAwMDAwMAorCisjZGVmaW5lIEZfRFVQRkQJCTAJLyogZHVwICovCisjZGVmaW5lIEZfR0VURkQJCTEJLyogZ2V0IGNsb3NlX29uX2V4ZWMgKi8KKyNkZWZpbmUgRl9TRVRGRAkJMgkvKiBzZXQvY2xlYXIgY2xvc2Vfb25fZXhlYyAqLworI2RlZmluZSBGX0dFVEZMCQkzCS8qIGdldCBmaWxlLT5mX2ZsYWdzICovCisjZGVmaW5lIEZfU0VURkwJCTQgICAgICAgLyogc2V0IGZpbGUtPmZfZmxhZ3MgKi8KKyNkZWZpbmUgRl9HRVRMSwkJNworI2RlZmluZSBGX1NFVExLCQk4CisjZGVmaW5lIEZfU0VUTEtXCTkKKworI2RlZmluZSBGX1NFVE9XTgk1CS8qICBmb3Igc29ja2V0cy4gKi8KKyNkZWZpbmUgRl9HRVRPV04JNgkvKiAgZm9yIHNvY2tldHMuICovCisjZGVmaW5lIEZfU0VUU0lHCTEwCS8qICBmb3Igc29ja2V0cy4gKi8KKyNkZWZpbmUgRl9HRVRTSUcJMTEJLyogIGZvciBzb2NrZXRzLiAqLworCisvKiBmb3IgRl9bR0VUfFNFVF1GTCAqLworI2RlZmluZSBGRF9DTE9FWEVDCTEJLyogYWN0dWFsbHkgYW55dGhpbmcgd2l0aCBsb3cgYml0IHNldCBnb2VzICovCisKKy8qIGZvciBwb3NpeCBmY250bCgpIGFuZCBsb2NrZigpICovCisjZGVmaW5lIEZfUkRMQ0sJCTEKKyNkZWZpbmUgRl9XUkxDSwkJMgorI2RlZmluZSBGX1VOTENLCQk4CisKKy8qIGZvciBvbGQgaW1wbGVtZW50YXRpb24gb2YgYnNkIGZsb2NrICgpICovCisjZGVmaW5lIEZfRVhMQ0sJCTE2CS8qIG9yIDMgKi8KKyNkZWZpbmUgRl9TSExDSwkJMzIJLyogb3IgNCAqLworCisjZGVmaW5lIEZfSU5QUk9HUkVTUwk2NAorCisvKiBvcGVyYXRpb25zIGZvciBic2QgZmxvY2soKSwgYWxzbyB1c2VkIGJ5IHRoZSBrZXJuZWwgaW1wbGVtZW50YXRpb24gKi8KKyNkZWZpbmUgTE9DS19TSAkJMQkvKiBzaGFyZWQgbG9jayAqLworI2RlZmluZSBMT0NLX0VYCQkyCS8qIGV4Y2x1c2l2ZSBsb2NrICovCisjZGVmaW5lIExPQ0tfTkIJCTQJLyogb3InZCB3aXRoIG9uZSBvZiB0aGUgYWJvdmUgdG8gcHJldmVudAorCQkJCSAgIGJsb2NraW5nICovCisjZGVmaW5lIExPQ0tfVU4JCTgJLyogcmVtb3ZlIGxvY2sgKi8KKyNkZWZpbmUgTE9DS19NQU5EICAgICAgMzIgICAgICAvKiBUaGlzIGlzIGEgbWFuZGF0b3J5IGZsb2NrICovCisjZGVmaW5lIExPQ0tfUkVBRCAgICAgIDY0ICAgICAgLyogLi4uIFdoaWNoIGFsbG93cyBjb25jdXJyZW50IHJlYWQgb3BlcmF0aW9ucyAqLworI2RlZmluZSBMT0NLX1dSSVRFICAgICAxMjggICAgIC8qIC4uLiBXaGljaCBhbGxvd3MgY29uY3VycmVudCB3cml0ZSBvcGVyYXRpb25zICovCisjZGVmaW5lIExPQ0tfUlcgICAgICAgIDE5MiAgICAgLyogLi4uIFdoaWNoIGFsbG93cyBjb25jdXJyZW50IHJlYWQgJiB3cml0ZSBvcHMgKi8KKyAKK3N0cnVjdCBmbG9jayB7CisJc2hvcnQgbF90eXBlOworCXNob3J0IGxfd2hlbmNlOworCV9fa2VybmVsX29mZl90IGxfc3RhcnQ7CisJX19rZXJuZWxfb2ZmX3QgbF9sZW47CisJX19rZXJuZWxfcGlkX3QgbF9waWQ7Cit9OworCisjZGVmaW5lIEZfTElOVVhfU1BFQ0lGSUNfQkFTRSAgMTAyNAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL2Zsb3BweS5oIGIvaW5jbHVkZS9hc20tYWxwaGEvZmxvcHB5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg5YTAwZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL2Zsb3BweS5oCkBAIC0wLDAgKzEsMTE5IEBACisvKgorICogQXJjaGl0ZWN0dXJlIHNwZWNpZmljIHBhcnRzIG9mIHRoZSBGbG9wcHkgZHJpdmVyCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1CisgKi8KKyNpZm5kZWYgX19BU01fQUxQSEFfRkxPUFBZX0gKKyNkZWZpbmUgX19BU01fQUxQSEFfRkxPUFBZX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjZGVmaW5lIGZkX2luYihwb3J0KQkJCWluYl9wKHBvcnQpCisjZGVmaW5lIGZkX291dGIodmFsdWUscG9ydCkJCW91dGJfcCh2YWx1ZSxwb3J0KQorCisjZGVmaW5lIGZkX2VuYWJsZV9kbWEoKSAgICAgICAgIGVuYWJsZV9kbWEoRkxPUFBZX0RNQSkKKyNkZWZpbmUgZmRfZGlzYWJsZV9kbWEoKSAgICAgICAgZGlzYWJsZV9kbWEoRkxPUFBZX0RNQSkKKyNkZWZpbmUgZmRfcmVxdWVzdF9kbWEoKSAgICAgICAgcmVxdWVzdF9kbWEoRkxPUFBZX0RNQSwiZmxvcHB5IikKKyNkZWZpbmUgZmRfZnJlZV9kbWEoKSAgICAgICAgICAgZnJlZV9kbWEoRkxPUFBZX0RNQSkKKyNkZWZpbmUgZmRfY2xlYXJfZG1hX2ZmKCkgICAgICAgY2xlYXJfZG1hX2ZmKEZMT1BQWV9ETUEpCisjZGVmaW5lIGZkX3NldF9kbWFfbW9kZShtb2RlKSAgIHNldF9kbWFfbW9kZShGTE9QUFlfRE1BLG1vZGUpCisjZGVmaW5lIGZkX3NldF9kbWFfYWRkcihhZGRyKSAgIHNldF9kbWFfYWRkcihGTE9QUFlfRE1BLHZpcnRfdG9fYnVzKGFkZHIpKQorI2RlZmluZSBmZF9zZXRfZG1hX2NvdW50KGNvdW50KSBzZXRfZG1hX2NvdW50KEZMT1BQWV9ETUEsY291bnQpCisjZGVmaW5lIGZkX2VuYWJsZV9pcnEoKSAgICAgICAgIGVuYWJsZV9pcnEoRkxPUFBZX0lSUSkKKyNkZWZpbmUgZmRfZGlzYWJsZV9pcnEoKSAgICAgICAgZGlzYWJsZV9pcnEoRkxPUFBZX0lSUSkKKyNkZWZpbmUgZmRfY2FjaGVmbHVzaChhZGRyLHNpemUpIC8qIG5vdGhpbmcgKi8KKyNkZWZpbmUgZmRfcmVxdWVzdF9pcnEoKSAgICAgICAgcmVxdWVzdF9pcnEoRkxPUFBZX0lSUSwgZmxvcHB5X2ludGVycnVwdCwgXAorCQkJCQkgICAgU0FfSU5URVJSVVBUfFNBX1NBTVBMRV9SQU5ET00sIFwKKwkJCQkgICAgICAgICAgICAiZmxvcHB5IiwgTlVMTCkKKyNkZWZpbmUgZmRfZnJlZV9pcnEoKSAgICAgICAgICAgZnJlZV9pcnEoRkxPUFBZX0lSUSwgTlVMTCk7CisKKyNpZmRlZiBDT05GSUdfUENJCisKKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKworI2RlZmluZSBmZF9kbWFfc2V0dXAoYWRkcixzaXplLG1vZGUsaW8pIGFscGhhX2ZkX2RtYV9zZXR1cChhZGRyLHNpemUsbW9kZSxpbykKKworc3RhdGljIF9faW5saW5lX18gaW50IAorYWxwaGFfZmRfZG1hX3NldHVwKGNoYXIgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IG1vZGUsIGludCBpbykKK3sKKwlzdGF0aWMgdW5zaWduZWQgbG9uZyBwcmV2X3NpemU7CisJc3RhdGljIGRtYV9hZGRyX3QgYnVzX2FkZHIgPSAwOworCXN0YXRpYyBjaGFyICpwcmV2X2FkZHI7CisJc3RhdGljIGludCBwcmV2X2RpcjsKKwlpbnQgZGlyOworCisJZGlyID0gKG1vZGUgIT0gRE1BX01PREVfUkVBRCkgPyBQQ0lfRE1BX0ZST01ERVZJQ0UgOiBQQ0lfRE1BX1RPREVWSUNFOworCisJaWYgKGJ1c19hZGRyIAorCSAgICAmJiAoYWRkciAhPSBwcmV2X2FkZHIgfHwgc2l6ZSAhPSBwcmV2X3NpemUgfHwgZGlyICE9IHByZXZfZGlyKSkgeworCQkvKiBkaWZmZXJlbnQgZnJvbSBsYXN0IHRpbWUgLS0gdW5tYXAgcHJldiAqLworCQlwY2lfdW5tYXBfc2luZ2xlKGlzYV9icmlkZ2UsIGJ1c19hZGRyLCBwcmV2X3NpemUsIHByZXZfZGlyKTsKKwkJYnVzX2FkZHIgPSAwOworCX0KKworCWlmICghYnVzX2FkZHIpCS8qIG5lZWQgdG8gbWFwIGl0ICovCisJCWJ1c19hZGRyID0gcGNpX21hcF9zaW5nbGUoaXNhX2JyaWRnZSwgYWRkciwgc2l6ZSwgZGlyKTsKKworCS8qIHJlbWVtYmVyIHRoaXMgb25lIGFzIHByZXYgKi8KKwlwcmV2X2FkZHIgPSBhZGRyOworCXByZXZfc2l6ZSA9IHNpemU7CisJcHJldl9kaXIgPSBkaXI7CisKKwlmZF9jbGVhcl9kbWFfZmYoKTsKKwlmZF9jYWNoZWZsdXNoKGFkZHIsIHNpemUpOworCWZkX3NldF9kbWFfbW9kZShtb2RlKTsKKwlzZXRfZG1hX2FkZHIoRkxPUFBZX0RNQSwgYnVzX2FkZHIpOworCWZkX3NldF9kbWFfY291bnQoc2l6ZSk7CisJdmlydHVhbF9kbWFfcG9ydCA9IGlvOworCWZkX2VuYWJsZV9kbWEoKTsKKworCXJldHVybiAwOworfQorCisjZW5kaWYgLyogQ09ORklHX1BDSSAqLworCitfX2lubGluZV9fIHZvaWQgdmlydHVhbF9kbWFfaW5pdCh2b2lkKQoreworCS8qIE5vdGhpbmcgdG8gZG8gb24gYW4gQWxwaGEgKi8KK30KKworc3RhdGljIGludCBGREMxID0gMHgzZjA7CitzdGF0aWMgaW50IEZEQzIgPSAtMTsKKworLyoKKyAqIEFnYWluLCB0aGUgQ01PUyBpbmZvcm1hdGlvbiBkb2Vzbid0IHdvcmsgb24gdGhlIGFscGhhLi4KKyAqLworI2RlZmluZSBGTE9QUFkwX1RZUEUgNgorI2RlZmluZSBGTE9QUFkxX1RZUEUgMAorCisjZGVmaW5lIE5fRkRDIDIKKyNkZWZpbmUgTl9EUklWRSA4CisKKyNkZWZpbmUgRkxPUFBZX01PVE9SX01BU0sgMHhmMAorCisvKgorICogTW9zdCBBbHBoYXMgaGF2ZSBubyBwcm9ibGVtcyB3aXRoIGZsb3BweSBETUEgY3Jvc3NpbmcgNjRrIGJvcmRlcnMsCisgKiBleGNlcHQgZm9yIGNlcnRhaW4gb25lcywgbGlrZSBYTCBhbmQgUlVGRklBTi4KKyAqCisgKiBIb3dldmVyLCB0aGUgdGVzdCBpcyBzaW1wbGUgYW5kIGZhc3QsIGFuZCB0aGlzICppcyogZmxvcHB5LCBhZnRlciBhbGwsCisgKiBzbyB3ZSBkbyBpdCBmb3IgYWxsIHBsYXRmb3JtcywganVzdCB0byBtYWtlIHN1cmUuCisgKgorICogVGhpcyBpcyBhZHZhbnRhZ2VvdXMgaW4gb3RoZXIgY2lyY3Vtc3RhbmNlcyBhcyB3ZWxsLCBhcyBpbiBtb3ZpbmcKKyAqIGFib3V0IHRoZSBQQ0kgRE1BIHdpbmRvd3MgYW5kIGZvcmNpbmcgdGhlIGZsb3BweSB0byBzdGFydCBkb2luZworICogc2NhdHRlci1nYXRoZXIgd2hlbiBpdCBuZXZlciBoYWQgYmVmb3JlLCBhbmQgdGhlcmUgKmlzKiBhIHByb2JsZW0KKyAqIG9uIHRoYXQgcGxhdGZvcm0uLi4gOy19CisgKi8KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIENST1NTXzY0S0Iodm9pZCAqYSwgdW5zaWduZWQgbG9uZyBzKQoreworCXVuc2lnbmVkIGxvbmcgcCA9ICh1bnNpZ25lZCBsb25nKWE7CisJcmV0dXJuICgocCArIHMgLSAxKSBeIHApICYgfjB4ZmZmZlVMOworfQorCisjZGVmaW5lIEVYVFJBX0ZMT1BQWV9QQVJBTVMKKworI2VuZGlmIC8qIF9fQVNNX0FMUEhBX0ZMT1BQWV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9mcHUuaCBiL2luY2x1ZGUvYXNtLWFscGhhL2ZwdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyMDNmYzIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9mcHUuaApAQCAtMCwwICsxLDE5MyBAQAorI2lmbmRlZiBfX0FTTV9BTFBIQV9GUFVfSAorI2RlZmluZSBfX0FTTV9BTFBIQV9GUFVfSAorCisvKgorICogQWxwaGEgZmxvYXRpbmctcG9pbnQgY29udHJvbCByZWdpc3RlciBkZWZpbmVzOgorICovCisjZGVmaW5lIEZQQ1JfRE5PRAkoMVVMPDw0NykJLyogZGVub3JtIElOViB0cmFwIGRpc2FibGUgKi8KKyNkZWZpbmUgRlBDUl9ETloJKDFVTDw8NDgpCS8qIGRlbm9ybXMgdG8gemVybyAqLworI2RlZmluZSBGUENSX0lOVkQJKDFVTDw8NDkpCS8qIGludmFsaWQgb3AgZGlzYWJsZSAob3B0LikgKi8KKyNkZWZpbmUgRlBDUl9EWkVECSgxVUw8PDUwKQkvKiBkaXZpc2lvbiBieSB6ZXJvIGRpc2FibGUgKG9wdC4pICovCisjZGVmaW5lIEZQQ1JfT1ZGRAkoMVVMPDw1MSkJLyogb3ZlcmZsb3cgZGlzYWJsZSAob3B0aW9uYWwpICovCisjZGVmaW5lIEZQQ1JfSU5WCSgxVUw8PDUyKQkvKiBpbnZhbGlkIG9wZXJhdGlvbiAqLworI2RlZmluZSBGUENSX0RaRQkoMVVMPDw1MykJLyogZGl2aXNpb24gYnkgemVybyAqLworI2RlZmluZSBGUENSX09WRgkoMVVMPDw1NCkJLyogb3ZlcmZsb3cgKi8KKyNkZWZpbmUgRlBDUl9VTkYJKDFVTDw8NTUpCS8qIHVuZGVyZmxvdyAqLworI2RlZmluZSBGUENSX0lORQkoMVVMPDw1NikJLyogaW5leGFjdCAqLworI2RlZmluZSBGUENSX0lPVgkoMVVMPDw1NykJLyogaW50ZWdlciBvdmVyZmxvdyAqLworI2RlZmluZSBGUENSX1VORFoJKDFVTDw8NjApCS8qIHVuZGVyZmxvdyB0byB6ZXJvIChvcHQuKSAqLworI2RlZmluZSBGUENSX1VORkQJKDFVTDw8NjEpCS8qIHVuZGVyZmxvdyBkaXNhYmxlIChvcHQuKSAqLworI2RlZmluZSBGUENSX0lORUQJKDFVTDw8NjIpCS8qIGluZXhhY3QgZGlzYWJsZSAob3B0LikgKi8KKyNkZWZpbmUgRlBDUl9TVU0JKDFVTDw8NjMpCS8qIHN1bW1hcnkgYml0ICovCisKKyNkZWZpbmUgRlBDUl9EWU5fU0hJRlQJNTgJCS8qIGZpcnN0IGR5bmFtaWMgcm91bmRpbmcgbW9kZSBiaXQgKi8KKyNkZWZpbmUgRlBDUl9EWU5fQ0hPUFBFRCAoMHgwVUwgPDwgRlBDUl9EWU5fU0hJRlQpCS8qIHRvd2FyZHMgMCAqLworI2RlZmluZSBGUENSX0RZTl9NSU5VUwkgKDB4MVVMIDw8IEZQQ1JfRFlOX1NISUZUKQkvKiB0b3dhcmRzIC1JTkYgKi8KKyNkZWZpbmUgRlBDUl9EWU5fTk9STUFMCSAoMHgyVUwgPDwgRlBDUl9EWU5fU0hJRlQpCS8qIHRvd2FyZHMgbmVhcmVzdCAqLworI2RlZmluZSBGUENSX0RZTl9QTFVTCSAoMHgzVUwgPDwgRlBDUl9EWU5fU0hJRlQpCS8qIHRvd2FyZHMgK0lORiAqLworI2RlZmluZSBGUENSX0RZTl9NQVNLCSAoMHgzVUwgPDwgRlBDUl9EWU5fU0hJRlQpCisKKyNkZWZpbmUgRlBDUl9NQVNLCTB4ZmZmZjgwMDAwMDAwMDAwMEwKKworLyoKKyAqIElFRUUgdHJhcCBlbmFibGVzIGFyZSBpbXBsZW1lbnRlZCBpbiBzb2Z0d2FyZS4gIFRoZXNlIHBlci10aHJlYWQKKyAqIGJpdHMgYXJlIHN0b3JlZCBpbiB0aGUgImllZWVfc3RhdGUiIGZpZWxkIG9mICJzdHJ1Y3QgdGhyZWFkX2luZm8iLgorICogVGh1cywgdGhlIGJpdHMgYXJlIGRlZmluZWQgc28gYXMgbm90IHRvIGNvbmZsaWN0IHdpdGggdGhlCisgKiBmbG9hdGluZy1wb2ludCBlbmFibGUgYml0ICh3aGljaCBpcyBhcmNoaXRlY3RlZCkuICBPbiB0b3Agb2YgdGhhdCwKKyAqIHdlIHdhbnQgdG8gbWFrZSB0aGVzZSBiaXRzIGNvbXBhdGlibGUgd2l0aCBPU0YvMSBzbworICogaWVlZV9zZXRfZnBfY29udHJvbCgpIGV0Yy4gY2FuIGJlIGltcGxlbWVudGVkIGVhc2lseSBhbmQKKyAqIGNvbXBhdGlibHkuICBUaGUgY29ycmVzcG9uZGluZyBkZWZpbml0aW9ucyBhcmUgaW4KKyAqIC91c3IvaW5jbHVkZS9tYWNoaW5lL2ZwdS5oIHVuZGVyIE9TRi8xLgorICovCisjZGVmaW5lIElFRUVfVFJBUF9FTkFCTEVfSU5WCSgxVUw8PDEpCS8qIGludmFsaWQgb3AgKi8KKyNkZWZpbmUgSUVFRV9UUkFQX0VOQUJMRV9EWkUJKDFVTDw8MikJLyogZGl2aXNpb24gYnkgemVybyAqLworI2RlZmluZSBJRUVFX1RSQVBfRU5BQkxFX09WRgkoMVVMPDwzKQkvKiBvdmVyZmxvdyAqLworI2RlZmluZSBJRUVFX1RSQVBfRU5BQkxFX1VORgkoMVVMPDw0KQkvKiB1bmRlcmZsb3cgKi8KKyNkZWZpbmUgSUVFRV9UUkFQX0VOQUJMRV9JTkUJKDFVTDw8NSkJLyogaW5leGFjdCAqLworI2RlZmluZSBJRUVFX1RSQVBfRU5BQkxFX0ROTwkoMVVMPDw2KQkvKiBkZW5vcm0gKi8KKyNkZWZpbmUgSUVFRV9UUkFQX0VOQUJMRV9NQVNLCShJRUVFX1RSQVBfRU5BQkxFX0lOViB8IElFRUVfVFJBUF9FTkFCTEVfRFpFIHxcCisJCQkJIElFRUVfVFJBUF9FTkFCTEVfT1ZGIHwgSUVFRV9UUkFQX0VOQUJMRV9VTkYgfFwKKwkJCQkgSUVFRV9UUkFQX0VOQUJMRV9JTkUgfCBJRUVFX1RSQVBfRU5BQkxFX0ROTykKKworLyogRGVub3JtIGFuZCBVbmRlcmZsb3cgZmx1c2hpbmcgKi8KKyNkZWZpbmUgSUVFRV9NQVBfRE1aCQkoMVVMPDwxMikJLyogTWFwIGRlbm9ybSBpbnB1dHMgdG8gemVybyAqLworI2RlZmluZSBJRUVFX01BUF9VTVoJCSgxVUw8PDEzKQkvKiBNYXAgdW5kZXJmbG93ZWQgb3V0cHV0cyB0byB6ZXJvICovCisKKyNkZWZpbmUgSUVFRV9NQVBfTUFTSwkJKElFRUVfTUFQX0RNWiB8IElFRUVfTUFQX1VNWikKKworLyogc3RhdHVzIGJpdHMgY29taW5nIGZyb20gZnBjcjogKi8KKyNkZWZpbmUgSUVFRV9TVEFUVVNfSU5WCQkoMVVMPDwxNykKKyNkZWZpbmUgSUVFRV9TVEFUVVNfRFpFCQkoMVVMPDwxOCkKKyNkZWZpbmUgSUVFRV9TVEFUVVNfT1ZGCQkoMVVMPDwxOSkKKyNkZWZpbmUgSUVFRV9TVEFUVVNfVU5GCQkoMVVMPDwyMCkKKyNkZWZpbmUgSUVFRV9TVEFUVVNfSU5FCQkoMVVMPDwyMSkKKyNkZWZpbmUgSUVFRV9TVEFUVVNfRE5PCQkoMVVMPDwyMikKKworI2RlZmluZSBJRUVFX1NUQVRVU19NQVNLCShJRUVFX1NUQVRVU19JTlYgfCBJRUVFX1NUQVRVU19EWkUgfAlcCisJCQkJIElFRUVfU1RBVFVTX09WRiB8IElFRUVfU1RBVFVTX1VORiB8CVwKKwkJCQkgSUVFRV9TVEFUVVNfSU5FIHwgSUVFRV9TVEFUVVNfRE5PKQorCisjZGVmaW5lIElFRUVfU1dfTUFTSwkJKElFRUVfVFJBUF9FTkFCTEVfTUFTSyB8CQlcCisJCQkJIElFRUVfU1RBVFVTX01BU0sgfCBJRUVFX01BUF9NQVNLKQorCisjZGVmaW5lIElFRUVfQ1VSUkVOVF9STV9TSElGVAkzMgorI2RlZmluZSBJRUVFX0NVUlJFTlRfUk1fTUFTSwkoM1VMPDxJRUVFX0NVUlJFTlRfUk1fU0hJRlQpCisKKyNkZWZpbmUgSUVFRV9TVEFUVVNfVE9fRVhDU1VNX1NISUZUCTE2CisKKyNkZWZpbmUgSUVFRV9JTkhFUklUICAgICgxVUw8PDYzKQkvKiBpbmhlcml0IG9uIHRocmVhZCBjcmVhdGU/ICovCisKKy8qCisgKiBDb252ZXJ0IHRoZSBzb2Z0d2FyZSBJRUVFIHRyYXAgZW5hYmxlIGFuZCBzdGF0dXMgYml0cyBpbnRvIHRoZQorICogaGFyZHdhcmUgZnBjciBmb3JtYXQuIAorICoKKyAqIERpZ2l0YWwgVW5peCBlbmdpbmVlcnMgcmVjZWl2ZSBteSB0aGFua3MgZm9yIG5vdCBkZWZpbmluZyB0aGUKKyAqIHNvZnR3YXJlIGJpdHMgaWRlbnRpY2FsIHRvIHRoZSBoYXJkd2FyZSBiaXRzLiAgVGhlIGNoaXAgZGVzaWduZXJzCisgKiByZWNlaXZlIG15IHRoYW5rcyBmb3IgbWFraW5nIGFsbCB0aGUgbm90LWltcGxlbWVudGVkIGZwY3IgYml0cworICogUkFaIGZvcmNpbmcgdXMgdG8gdXNlIHN5c3RlbSBjYWxscyB0byByZWFkL3dyaXRlIHRoaXMgdmFsdWUuCisgKi8KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCitpZWVlX3N3Y3JfdG9fZnBjcih1bnNpZ25lZCBsb25nIHN3KQoreworCXVuc2lnbmVkIGxvbmcgZnA7CisJZnAgPSAoc3cgJiBJRUVFX1NUQVRVU19NQVNLKSA8PCAzNTsKKwlmcCB8PSAoc3cgJiBJRUVFX01BUF9ETVopIDw8IDM2OworCWZwIHw9IChzdyAmIElFRUVfU1RBVFVTX01BU0sgPyBGUENSX1NVTSA6IDApOworCWZwIHw9ICh+c3cgJiAoSUVFRV9UUkFQX0VOQUJMRV9JTlYKKwkJICAgICAgfCBJRUVFX1RSQVBfRU5BQkxFX0RaRQorCQkgICAgICB8IElFRUVfVFJBUF9FTkFCTEVfT1ZGKSkgPDwgNDg7CisJZnAgfD0gKH5zdyAmIChJRUVFX1RSQVBfRU5BQkxFX1VORiB8IElFRUVfVFJBUF9FTkFCTEVfSU5FKSkgPDwgNTc7CisJZnAgfD0gKHN3ICYgSUVFRV9NQVBfVU1aID8gRlBDUl9VTkRaIHwgRlBDUl9VTkZEIDogMCk7CisJZnAgfD0gKH5zdyAmIElFRUVfVFJBUF9FTkFCTEVfRE5PKSA8PCA0MTsKKwlyZXR1cm4gZnA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZworaWVlZV9mcGNyX3RvX3N3Y3IodW5zaWduZWQgbG9uZyBmcCkKK3sKKwl1bnNpZ25lZCBsb25nIHN3OworCXN3ID0gKGZwID4+IDM1KSAmIElFRUVfU1RBVFVTX01BU0s7CisJc3cgfD0gKGZwID4+IDM2KSAmIElFRUVfTUFQX0RNWjsKKwlzdyB8PSAofmZwID4+IDQ4KSAmIChJRUVFX1RSQVBfRU5BQkxFX0lOVgorCQkJICAgICB8IElFRUVfVFJBUF9FTkFCTEVfRFpFCisJCQkgICAgIHwgSUVFRV9UUkFQX0VOQUJMRV9PVkYpOworCXN3IHw9ICh+ZnAgPj4gNTcpICYgKElFRUVfVFJBUF9FTkFCTEVfVU5GIHwgSUVFRV9UUkFQX0VOQUJMRV9JTkUpOworCXN3IHw9IChmcCA+PiA0NykgJiBJRUVFX01BUF9VTVo7CisJc3cgfD0gKH5mcCA+PiA0MSkgJiBJRUVFX1RSQVBfRU5BQkxFX0ROTzsKKwlyZXR1cm4gc3c7Cit9CisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKy8qIFRoZSBmb2xsb3dpbmcgdHdvIGZ1bmN0aW9ucyBkb24ndCBuZWVkIHRyYXBiL2V4Y2IgaW5zdHJ1Y3Rpb25zCisgICBhcm91bmQgdGhlIG1mX2ZwY3IvbXRfZnBjciBpbnN0cnVjdGlvbnMgYmVjYXVzZSAoYSkgdGhlIGtlcm5lbAorICAgbmV2ZXIgZ2VuZXJhdGVzIGFyaXRobWV0aWMgZmF1bHRzIGFuZCAoYikgY2FsbF9wYWwgaW5zdHJ1Y3Rpb25zCisgICBhcmUgaW1wbGllZCB0cmFwIGJhcnJpZXJzLiAgKi8KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCityZGZwY3Iodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHRtcCwgcmV0OworCisjaWYgZGVmaW5lZChfX2FscGhhX2NpeF9fKSB8fCBkZWZpbmVkKF9fYWxwaGFfZml4X18pCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCQkiZnRvaXQgJGYwLCUwXG5cdCIKKwkJIm1mX2ZwY3IgJGYwXG5cdCIKKwkJImZ0b2l0ICRmMCwlMVxuXHQiCisJCSJpdG9mdCAlMCwkZjAiCisJCTogIj1yIih0bXApLCAiPXIiKHJldCkpOworI2Vsc2UKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCSJzdHQgJGYwLCUwXG5cdCIKKwkJIm1mX2ZwY3IgJGYwXG5cdCIKKwkJInN0dCAkZjAsJTFcblx0IgorCQkibGR0ICRmMCwlMCIKKwkJOiAiPW0iKHRtcCksICI9bSIocmV0KSk7CisjZW5kaWYKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAord3JmcGNyKHVuc2lnbmVkIGxvbmcgdmFsKQoreworCXVuc2lnbmVkIGxvbmcgdG1wOworCisjaWYgZGVmaW5lZChfX2FscGhhX2NpeF9fKSB8fCBkZWZpbmVkKF9fYWxwaGFfZml4X18pCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCQkiZnRvaXQgJGYwLCUwXG5cdCIKKwkJIml0b2Z0ICUxLCRmMFxuXHQiCisJCSJtdF9mcGNyICRmMFxuXHQiCisJCSJpdG9mdCAlMCwkZjAiCisJCTogIj0mciIodG1wKSA6ICJyIih2YWwpKTsKKyNlbHNlCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCQkic3R0ICRmMCwlMFxuXHQiCisJCSJsZHQgJGYwLCUxXG5cdCIKKwkJIm10X2ZwY3IgJGYwXG5cdCIKKwkJImxkdCAkZjAsJTAiCisJCTogIj1tIih0bXApIDogIm0iKHZhbCkpOworI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZworc3djcl91cGRhdGVfc3RhdHVzKHVuc2lnbmVkIGxvbmcgc3djciwgdW5zaWduZWQgbG9uZyBmcGNyKQoreworCS8qIEVWNiBpbXBsZW1lbnRzIG1vc3Qgb2YgdGhlIGJpdHMgaW4gaGFyZHdhcmUuICBDb2xsZWN0CisJICAgdGhlIGFjcnVlZCBleGNlcHRpb24gYml0cyBmcm9tIHRoZSByZWFsIGZwY3IuICAqLworCWlmIChpbXBsdmVyKCkgPT0gSU1QTFZFUl9FVjYpIHsKKwkJc3djciAmPSB+SUVFRV9TVEFUVVNfTUFTSzsKKwkJc3djciB8PSAoZnBjciA+PiAzNSkgJiBJRUVFX1NUQVRVU19NQVNLOworCX0KKwlyZXR1cm4gc3djcjsKK30KKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgYWxwaGFfcmVhZF9mcF9yZWcgKHVuc2lnbmVkIGxvbmcgcmVnKTsKK2V4dGVybiB2b2lkIGFscGhhX3dyaXRlX2ZwX3JlZyAodW5zaWduZWQgbG9uZyByZWcsIHVuc2lnbmVkIGxvbmcgdmFsKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGFscGhhX3JlYWRfZnBfcmVnX3MgKHVuc2lnbmVkIGxvbmcgcmVnKTsKK2V4dGVybiB2b2lkIGFscGhhX3dyaXRlX2ZwX3JlZ19zICh1bnNpZ25lZCBsb25nIHJlZywgdW5zaWduZWQgbG9uZyB2YWwpOworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX19BU01fQUxQSEFfRlBVX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL2djdC5oIGIvaW5jbHVkZS9hc20tYWxwaGEvZ2N0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzUwNGM3MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL2djdC5oCkBAIC0wLDAgKzEsNTggQEAKKyNpZm5kZWYgX19BTFBIQV9HQ1RfSAorI2RlZmluZSBfX0FMUEhBX0dDVF9ICisKK3R5cGVkZWYgdTY0IGdjdF9pZDsKK3R5cGVkZWYgdTY0IGdjdDZfaGFuZGxlOworCit0eXBlZGVmIHN0cnVjdCBfX2djdDZfbm9kZSB7CisJdTggdHlwZTsJCisJdTggc3VidHlwZTsKKwl1MTYgc2l6ZTsKKwl1MzIgaGRfZXh0ZW5zaW9uOworCWdjdDZfaGFuZGxlIG93bmVyOworCWdjdDZfaGFuZGxlIGFjdGl2ZV91c2VyOworCWdjdF9pZCBpZDsKKwl1NjQgZmxhZ3M7CisJdTE2IHJldjsKKwl1MTYgY2hhbmdlX2NvdW50ZXI7CisJdTE2IG1heF9jaGlsZDsKKwl1MTYgcmVzZXJ2ZWQxOworCWdjdDZfaGFuZGxlIHNhdmVkX293bmVyOworCWdjdDZfaGFuZGxlIGFmZmluaXR5OworCWdjdDZfaGFuZGxlIHBhcmVudDsKKwlnY3Q2X2hhbmRsZSBuZXh0OworCWdjdDZfaGFuZGxlIHByZXY7CisJZ2N0Nl9oYW5kbGUgY2hpbGQ7CisJdTY0IGZ3X2ZsYWdzOworCXU2NCBvc191c2FnZTsKKwl1NjQgZnJ1X2lkOworCXUzMiBjaGVja3N1bTsKKwl1MzIgbWFnaWM7CS8qICdHTFhZJyAqLworfSBnY3Q2X25vZGU7CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1OCB0eXBlOwkKKwl1OCBzdWJ0eXBlOworCXZvaWQgKCpjYWxsb3V0KShnY3Q2X25vZGUgKik7Cit9IGdjdDZfc2VhcmNoX3N0cnVjdDsKKworI2RlZmluZSBHQ1RfTk9ERV9NQUdJQwkgIDB4NTk1ODRjNDcJLyogJ0dMWFknICovCisKKy8qIAorICogbm9kZSB0eXBlcyAKKyAqLworI2RlZmluZSBHQ1RfVFlQRV9IT1NFCQkJMHgwRQorCisvKgorICogbm9kZSBzdWJ0eXBlcworICovCisjZGVmaW5lIEdDVF9TVUJUWVBFX0lPX1BPUlRfTU9EVUxFCTB4MkMKKworI2RlZmluZSBHQ1RfTk9ERV9QVFIob2ZmKSAoKGdjdDZfbm9kZSAqKSgoY2hhciAqKWh3cnBiICsgCQlcCisJCQkJCSBod3JwYi0+ZnJ1dF9vZmZzZXQgKyAJCVwKKwkJCQkJIChnY3Q2X2hhbmRsZSkob2ZmKSkpCQlcCisKK2ludCBnY3Q2X2ZpbmRfbm9kZXMoZ2N0Nl9ub2RlICosIGdjdDZfc2VhcmNoX3N0cnVjdCAqKTsKKworI2VuZGlmIC8qIF9fQUxQSEFfR0NUX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvZ2VudHJhcC5oIGIvaW5jbHVkZS9hc20tYWxwaGEvZ2VudHJhcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlNTBjYzMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9nZW50cmFwLmgKQEAgLTAsMCArMSwzNyBAQAorI2lmbmRlZiBfQVNNQVhQX0dFTlRSQVBfSAorI2RlZmluZSBfQVNNQVhQX0dFTlRSQVBfSAorCisvKgorICogRGVmaW5pdGlvbnMgZm9yIGdlbnRyYXAgY2F1c2VzLiAgVGhleSBhcmUgZ2VuZXJhdGVkIGJ5IHVzZXItbGV2ZWwKKyAqIHByb2dyYW1zIGFuZCB0aGVyZWZvcmUgc2hvdWxkIGJlIGNvbXBhdGlibGUgd2l0aCB0aGUgY29ycmVzcG9uZGluZworICogT1NGLzEgZGVmaW5pdGlvbnMuCisgKi8KKyNkZWZpbmUgR0VOX0lOVE9WRgktMQkvKiBpbnRlZ2VyIG92ZXJmbG93ICovCisjZGVmaW5lIEdFTl9JTlRESVYJLTIJLyogaW50ZWdlciBkaXZpc2lvbiBieSB6ZXJvICovCisjZGVmaW5lIEdFTl9GTFRPVkYJLTMJLyogZnAgb3ZlcmZsb3cgKi8KKyNkZWZpbmUgR0VOX0ZMVERJVgktNAkvKiBmcCBkaXZpc2lvbiBieSB6ZXJvICovCisjZGVmaW5lIEdFTl9GTFRVTkQJLTUJLyogZnAgdW5kZXJmbG93ICovCisjZGVmaW5lIEdFTl9GTFRJTlYJLTYJLyogaW52YWxpZCBmcCBvcGVyYW5kICovCisjZGVmaW5lIEdFTl9GTFRJTkUJLTcJLyogaW5leGFjdCBmcCBvcGVyYW5kICovCisjZGVmaW5lIEdFTl9ERUNPVkYJLTgJLyogZGVjaW1hbCBvdmVyZmxvdyAoZm9yIENPQk9MPz8pICovCisjZGVmaW5lIEdFTl9ERUNESVYJLTkJLyogZGVjaW1hbCBkaXZpc2lvbiBieSB6ZXJvICovCisjZGVmaW5lIEdFTl9ERUNJTlYJLTEwCS8qIGludmFsaWQgZGVjaW1hbCBvcGVyYW5kICovCisjZGVmaW5lIEdFTl9ST1BSQU5ECS0xMQkvKiByZXNlcnZlZCBvcGVyYW5kICovCisjZGVmaW5lIEdFTl9BU1NFUlRFUlIJLTEyCS8qIGFzc2VydGlvbiBlcnJvciAqLworI2RlZmluZSBHRU5fTlVMUFRSRVJSCS0xMwkvKiBudWxsIHBvaW50ZXIgZXJyb3IgKi8KKyNkZWZpbmUgR0VOX1NUS09WRgktMTQJLyogc3RhY2sgb3ZlcmZsb3cgKi8KKyNkZWZpbmUgR0VOX1NUUkxFTkVSUgktMTUJLyogc3RyaW5nIGxlbmd0aCBlcnJvciAqLworI2RlZmluZSBHRU5fU1VCU1RSRVJSCS0xNgkvKiBzdWJzdHJpbmcgZXJyb3IgKi8KKyNkZWZpbmUgR0VOX1JBTkdFUlIJLTE3CS8qIHJhbmdlIGVycm9yICovCisjZGVmaW5lIEdFTl9TVUJSTkcJLTE4CisjZGVmaW5lIEdFTl9TVUJSTkcxCS0xOQkgCisjZGVmaW5lIEdFTl9TVUJSTkcyCS0yMAorI2RlZmluZSBHRU5fU1VCUk5HMwktMjEJLyogdGhlc2UgcmVwb3J0IHJhbmdlIGVycm9ycyBmb3IgKi8KKyNkZWZpbmUgR0VOX1NVQlJORzQJLTIyCS8qIHN1YnNjcmlwdGluZyAoaW5kZXhpbmcpIGF0IGxldmVscyAwLi43ICovCisjZGVmaW5lIEdFTl9TVUJSTkc1CS0yMworI2RlZmluZSBHRU5fU1VCUk5HNgktMjQKKyNkZWZpbmUgR0VOX1NVQlJORzcJLTI1CisKKy8qIHRoZSByZW1haW5pbmcgY29kZXMgKC0yNi4uLTEwMjMpIGFyZSByZXNlcnZlZC4gKi8KKworI2VuZGlmIC8qIF9BU01BWFBfR0VOVFJBUF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9oYXJkaXJxLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9oYXJkaXJxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA1OTNmOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL2hhcmRpcnEuaApAQCAtMCwwICsxLDI5IEBACisjaWZuZGVmIF9BTFBIQV9IQVJESVJRX0gKKyNkZWZpbmUgX0FMUEhBX0hBUkRJUlFfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CisKKworLyogZW50cnkuUyBpcyBzZW5zaXRpdmUgdG8gdGhlIG9mZnNldHMgb2YgdGhlc2UgZmllbGRzICovCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgbG9uZyBfX3NvZnRpcnFfcGVuZGluZzsKK30gX19fX2NhY2hlbGluZV9hbGlnbmVkIGlycV9jcHVzdGF0X3Q7CisKKyNpbmNsdWRlIDxsaW51eC9pcnFfY3B1c3RhdC5oPgkvKiBTdGFuZGFyZCBtYXBwaW5ncyBmb3IgaXJxX2NwdXN0YXRfdCBhYm92ZSAqLworCisjZGVmaW5lIEhBUkRJUlFfQklUUwkxMgorCisvKgorICogVGhlIGhhcmRpcnEgbWFzayBoYXMgdG8gYmUgbGFyZ2UgZW5vdWdoIHRvIGhhdmUKKyAqIHNwYWNlIGZvciBwb3RlbnRpYWxseSBuZXN0YWJsZSBJUlEgc291cmNlcyBpbiB0aGUgc3lzdGVtCisgKiB0byBuZXN0IG9uIGEgc2luZ2xlIENQVS4gT24gQWxwaGEsIGludGVycnVwdHMgYXJlIG1hc2tlZCBhdCB0aGUgQ1BVCisgKiBieSBJUEwgYXMgd2VsbCBhcyBhdCB0aGUgc3lzdGVtIGxldmVsLiBXZSBvbmx5IGhhdmUgOCBJUExzIChVTklYIFBBTGNvZGUpCisgKiBzbyB3ZSByZWFsbHkgb25seSBoYXZlIDggbmVzdGFibGUgSVJRcywgYnV0IGFsbG93IHNvbWUgb3ZlcmhlYWQKKyAqLworI2lmICgxIDw8IEhBUkRJUlFfQklUUykgPCAxNgorI2Vycm9yIEhBUkRJUlFfQklUUyBpcyB0b28gbG93IQorI2VuZGlmCisKKyNlbmRpZiAvKiBfQUxQSEFfSEFSRElSUV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9oZHJlZy5oIGIvaW5jbHVkZS9hc20tYWxwaGEvaGRyZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjdmZDFhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvaGRyZWcuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvaGRyZWcuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL2h3X2lycS5oIGIvaW5jbHVkZS9hc20tYWxwaGEvaHdfaXJxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMxMGI5ZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL2h3X2lycS5oCkBAIC0wLDAgKzEsMTYgQEAKKyNpZm5kZWYgX0FMUEhBX0hXX0lSUV9ICisjZGVmaW5lIF9BTFBIQV9IV19JUlFfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBod19yZXNlbmRfaXJxKHN0cnVjdCBod19pbnRlcnJ1cHRfdHlwZSAqaCwgdW5zaWduZWQgaW50IGkpIHt9CisKK2V4dGVybiB2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGlycV9lcnJfY291bnQ7CisKKyNpZmRlZiBDT05GSUdfQUxQSEFfR0VORVJJQworI2RlZmluZSBBQ1RVQUxfTlJfSVJRUwlhbHBoYV9tdi5ucl9pcnFzCisjZWxzZQorI2RlZmluZSBBQ1RVQUxfTlJfSVJRUwlOUl9JUlFTCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9od3JwYi5oIGIvaW5jbHVkZS9hc20tYWxwaGEvaHdycGIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZThmODcxYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL2h3cnBiLmgKQEAgLTAsMCArMSwyMjAgQEAKKyNpZm5kZWYgX19BTFBIQV9IV1JQQl9ICisjZGVmaW5lIF9fQUxQSEFfSFdSUEJfSAorCisjZGVmaW5lIElOSVRfSFdSUEIgKChzdHJ1Y3QgaHdycGJfc3RydWN0ICopIDB4MTAwMDAwMDApCisKKy8qCisgKiBERUMgcHJvY2Vzc29yIHR5cGVzIGZvciBBbHBoYSBzeXN0ZW1zLiAgRm91bmQgaW4gSFdSUEIuCisgKiBUaGVzZSB2YWx1ZXMgYXJlIGFyY2hpdGVjdGVkLgorICovCisKKyNkZWZpbmUgRVYzX0NQVSAgICAgICAgICAgICAgICAgMSAgICAgICAvKiBFVjMgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBFVjRfQ1BVICAgICAgICAgICAgICAgICAyICAgICAgIC8qIEVWNCAoMjEwNjQpICAgICAgICAgICovCisjZGVmaW5lIExDQTRfQ1BVICAgICAgICAgICAgICAgIDQgICAgICAgLyogTENBNCAoMjEwNjYvMjEwNjgpICAgKi8KKyNkZWZpbmUgRVY1X0NQVSAgICAgICAgICAgICAgICAgNSAgICAgICAvKiBFVjUgKDIxMTY0KSAgICAgICAgICAqLworI2RlZmluZSBFVjQ1X0NQVSAgICAgICAgICAgICAgICA2ICAgICAgIC8qIEVWNC41ICgyMTA2NC94eHgpICAgICovCisjZGVmaW5lIEVWNTZfQ1BVCQk3CS8qIEVWNS42ICgyMTE2NCkJKi8KKyNkZWZpbmUgRVY2X0NQVQkJCTgJLyogRVY2ICgyMTI2NCkJCSovCisjZGVmaW5lIFBDQTU2X0NQVQkJOQkvKiBQQ0E1NiAoMjExNjRQQykJKi8KKyNkZWZpbmUgUENBNTdfQ1BVCQkxMAkvKiBQQ0E1NyAobm90eWV0KQkqLworI2RlZmluZSBFVjY3X0NQVQkJMTEJLyogRVY2NyAoMjEyNjRBKQkqLworI2RlZmluZSBFVjY4Q0JfQ1BVCQkxMgkvKiBFVjY4Q0IgKDIxMjY0QykJKi8KKyNkZWZpbmUgRVY2OEFMX0NQVQkJMTMJLyogRVY2OEFMICgyMTI2NEIpCSovCisjZGVmaW5lIEVWNjhDWF9DUFUJCTE0CS8qIEVWNjhDWCAoMjEyNjREKQkqLworI2RlZmluZSBFVjdfQ1BVCQkJMTUJLyogRVY3ICgyMTM2NCkJCSovCisjZGVmaW5lIEVWNzlfQ1BVCQkxNgkvKiBFVjc5ICgyMTM2ND8/KQkqLworI2RlZmluZSBFVjY5X0NQVQkJMTcJLyogRVY2OSAoMjEyNjQvRVY2OUEpCSovCisKKy8qCisgKiBERUMgc3lzdGVtIHR5cGVzIGZvciBBbHBoYSBzeXN0ZW1zLiAgRm91bmQgaW4gSFdSUEIuCisgKiBUaGVzZSB2YWx1ZXMgYXJlIGFyY2hpdGVjdGVkLgorICovCisKKyNkZWZpbmUgU1RfQURVCQkJICAxCS8qIEFscGhhIEFEVSBzeXN0eXBlCSovCisjZGVmaW5lIFNUX0RFQ180MDAwCQkgIDIJLyogQ29icmEgc3lzdHlwZQkqLworI2RlZmluZSBTVF9ERUNfNzAwMAkJICAzCS8qIFJ1Ynkgc3lzdHlwZQkJKi8KKyNkZWZpbmUgU1RfREVDXzMwMDBfNTAwCQkgIDQJLyogRmxhbWluZ28gc3lzdHlwZQkqLworI2RlZmluZSBTVF9ERUNfMjAwMF8zMDAJCSAgNgkvKiBKZW5zZW4gc3lzdHlwZQkqLworI2RlZmluZSBTVF9ERUNfMzAwMF8zMDAJCSAgNwkvKiBQZWxpY2FuIHN5c3R5cGUJKi8KKyNkZWZpbmUgU1RfREVDXzIxMDBfQTUwMAkgIDkJLyogU2FibGUgc3lzdHlwZQkqLworI2RlZmluZSBTVF9ERUNfQVhQVk1FXzY0CSAxMAkvKiBBWFB2bWUgc3lzdGVtIHR5cGUJKi8KKyNkZWZpbmUgU1RfREVDX0FYUFBDSV8zMwkgMTEJLyogTm9OYW1lIHN5c3RlbSB0eXBlCSovCisjZGVmaW5lIFNUX0RFQ19UTEFTRVIJCSAxMgkvKiBUdXJib2xhc2VyIHN5c3R5cGUJKi8KKyNkZWZpbmUgU1RfREVDXzIxMDBfQTUwCQkgMTMJLyogQXZhbnRpIHN5c3R5cGUJKi8KKyNkZWZpbmUgU1RfREVDX01VU1RBTkcJCSAxNAkvKiBNdXN0YW5nIHN5c3R5cGUJKi8KKyNkZWZpbmUgU1RfREVDX0FMQ09SCQkgMTUJLyogQWxjb3IgKEVWNSkgc3lzdHlwZQkqLworI2RlZmluZSBTVF9ERUNfMTAwMAkJIDE3CS8qIE1pa2FzYSBzeXN0eXBlCSovCisjZGVmaW5lIFNUX0RFQ19FQjY0CQkgMTgJLyogRUI2NCBzeXN0eXBlCQkqLworI2RlZmluZSBTVF9ERUNfRUI2NgkJIDE5CS8qIEVCNjYgc3lzdHlwZQkJKi8KKyNkZWZpbmUgU1RfREVDX0VCNjRQCQkgMjAJLyogRUI2NCsgc3lzdHlwZQkqLworI2RlZmluZSBTVF9ERUNfQlVSTlMJCSAyMQkvKiBsYXB0b3Agc3lzdHlwZQkqLworI2RlZmluZSBTVF9ERUNfUkFXSElERQkJIDIyCS8qIFJhd2hpZGUgc3lzdHlwZQkqLworI2RlZmluZSBTVF9ERUNfSzIJCSAyMwkvKiBLMiBzeXN0eXBlCQkqLworI2RlZmluZSBTVF9ERUNfTFlOWAkJIDI0CS8qIEx5bnggc3lzdHlwZQkJKi8KKyNkZWZpbmUgU1RfREVDX1hMCQkgMjUJLyogQWxwaGEgWEwgc3lzdHlwZQkqLworI2RlZmluZSBTVF9ERUNfRUIxNjQJCSAyNgkvKiBFQjE2NCBzeXN0eXBlCSovCisjZGVmaW5lIFNUX0RFQ19OT1JJVEFLRQkJIDI3CS8qIE5vcml0YWtlIHN5c3R5cGUJKi8KKyNkZWZpbmUgU1RfREVDX0NPUlRFWAkJIDI4CS8qIENvcnRleCBzeXN0eXBlCSovCisjZGVmaW5lIFNUX0RFQ19NSUFUQQkJIDMwCS8qIE1pYXRhIHN5c3R5cGUgICAgICAgICovCisjZGVmaW5lIFNUX0RFQ19YWE0JCSAzMQkvKiBYWE0gc3lzdHlwZQkJKi8KKyNkZWZpbmUgU1RfREVDX1RBS0FSQQkJIDMyCS8qIFRha2FyYSBzeXN0eXBlCSovCisjZGVmaW5lIFNUX0RFQ19ZVUtPTgkJIDMzCS8qIFl1a29uIHN5c3R5cGUJKi8KKyNkZWZpbmUgU1RfREVDX1RTVU5BTUkJCSAzNAkvKiBUc3VuYW1pIHN5c3R5cGUJKi8KKyNkZWZpbmUgU1RfREVDX1dJTERGSVJFCQkgMzUJLyogV2lsZGZpcmUgc3lzdHlwZQkqLworI2RlZmluZSBTVF9ERUNfQ1VTQ08JCSAzNgkvKiBDVVNDTyBzeXN0eXBlCSovCisjZGVmaW5lIFNUX0RFQ19FSUdFUgkJIDM3CS8qIEVpZ2VyIHN5c3R5cGUJKi8KKyNkZWZpbmUgU1RfREVDX1RJVEFOCQkgMzgJLyogVGl0YW4gc3lzdHlwZQkqLworI2RlZmluZSBTVF9ERUNfTUFSVkVMCQkgMzkJLyogTWFydmVsIHN5c3R5cGUJKi8KKworLyogVU5PRkZJQ0lBTCEhISAqLworI2RlZmluZSBTVF9VTk9GRklDSUFMX0JJQVMJMTAwCisjZGVmaW5lIFNUX0RUSV9SVUZGSUFOCQkxMDEJLyogUlVGRklBTiBzeXN0eXBlCSovCisKKy8qIEFscGhhIFByb2Nlc3NvciwgSW5jLiBzeXN0ZW1zICovCisjZGVmaW5lIFNUX0FQSV9CSUFTCQkyMDAKKyNkZWZpbmUgU1RfQVBJX05BVVRJTFVTCQkyMDEJLyogVVAxMDAwIHN5c3R5cGUJKi8KKworc3RydWN0IHBjYl9zdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcga3NwOworCXVuc2lnbmVkIGxvbmcgdXNwOworCXVuc2lnbmVkIGxvbmcgcHRicjsKKwl1bnNpZ25lZCBpbnQgcGNjOworCXVuc2lnbmVkIGludCBhc247CisJdW5zaWduZWQgbG9uZyB1bmlxdWU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIHJlczEsIHJlczI7Cit9OworCitzdHJ1Y3QgcGVyY3B1X3N0cnVjdCB7CisJdW5zaWduZWQgbG9uZyBod3BjYlsxNl07CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIHBhbF9tZW1fc2l6ZTsKKwl1bnNpZ25lZCBsb25nIHBhbF9zY3JhdGNoX3NpemU7CisJdW5zaWduZWQgbG9uZyBwYWxfbWVtX3BhOworCXVuc2lnbmVkIGxvbmcgcGFsX3NjcmF0Y2hfcGE7CisJdW5zaWduZWQgbG9uZyBwYWxfcmV2aXNpb247CisJdW5zaWduZWQgbG9uZyB0eXBlOworCXVuc2lnbmVkIGxvbmcgdmFyaWF0aW9uOworCXVuc2lnbmVkIGxvbmcgcmV2aXNpb247CisJdW5zaWduZWQgbG9uZyBzZXJpYWxfbm9bMl07CisJdW5zaWduZWQgbG9uZyBsb2dvdXRfYXJlYV9wYTsKKwl1bnNpZ25lZCBsb25nIGxvZ291dF9hcmVhX2xlbjsKKwl1bnNpZ25lZCBsb25nIGhhbHRfUENCQjsKKwl1bnNpZ25lZCBsb25nIGhhbHRfUEM7CisJdW5zaWduZWQgbG9uZyBoYWx0X1BTOworCXVuc2lnbmVkIGxvbmcgaGFsdF9hcmc7CisJdW5zaWduZWQgbG9uZyBoYWx0X3JhOworCXVuc2lnbmVkIGxvbmcgaGFsdF9wdjsKKwl1bnNpZ25lZCBsb25nIGhhbHRfcmVhc29uOworCXVuc2lnbmVkIGxvbmcgcmVzOworCXVuc2lnbmVkIGxvbmcgaXBjX2J1ZmZlclsyMV07CisJdW5zaWduZWQgbG9uZyBwYWxjb2RlX2F2YWlsWzE2XTsKKwl1bnNpZ25lZCBsb25nIGNvbXBhdGliaWxpdHk7CisJdW5zaWduZWQgbG9uZyBjb25zb2xlX2RhdGFfbG9nX3BhOworCXVuc2lnbmVkIGxvbmcgY29uc29sZV9kYXRhX2xvZ19sZW5ndGg7CisJdW5zaWduZWQgbG9uZyBiY2FjaGVfaW5mbzsKK307CisKK3N0cnVjdCBwcm9jZGVzY19zdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcgd2VpcmRfdm1zX3N0dWZmOworCXVuc2lnbmVkIGxvbmcgYWRkcmVzczsKK307CisKK3N0cnVjdCB2Zl9tYXBfc3RydWN0IHsKKwl1bnNpZ25lZCBsb25nIHZhOworCXVuc2lnbmVkIGxvbmcgcGE7CisJdW5zaWduZWQgbG9uZyBjb3VudDsKK307CisKK3N0cnVjdCBjcmJfc3RydWN0IHsKKwlzdHJ1Y3QgcHJvY2Rlc2Nfc3RydWN0ICogZGlzcGF0Y2hfdmE7CisJc3RydWN0IHByb2NkZXNjX3N0cnVjdCAqIGRpc3BhdGNoX3BhOworCXN0cnVjdCBwcm9jZGVzY19zdHJ1Y3QgKiBmaXh1cF92YTsKKwlzdHJ1Y3QgcHJvY2Rlc2Nfc3RydWN0ICogZml4dXBfcGE7CisJLyogdmlydHVhbC0+cGh5c2ljYWwgbWFwICovCisJdW5zaWduZWQgbG9uZyBtYXBfZW50cmllczsKKwl1bnNpZ25lZCBsb25nIG1hcF9wYWdlczsKKwlzdHJ1Y3QgdmZfbWFwX3N0cnVjdCBtYXBbMV07Cit9OworCitzdHJ1Y3QgbWVtY2x1c3Rfc3RydWN0IHsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbjsKKwl1bnNpZ25lZCBsb25nIG51bXBhZ2VzOworCXVuc2lnbmVkIGxvbmcgbnVtdGVzdGVkOworCXVuc2lnbmVkIGxvbmcgYml0bWFwX3ZhOworCXVuc2lnbmVkIGxvbmcgYml0bWFwX3BhOworCXVuc2lnbmVkIGxvbmcgYml0bWFwX2Noa3N1bTsKKwl1bnNpZ25lZCBsb25nIHVzYWdlOworfTsKKworc3RydWN0IG1lbWRlc2Nfc3RydWN0IHsKKwl1bnNpZ25lZCBsb25nIGNoa3N1bTsKKwl1bnNpZ25lZCBsb25nIG9wdGlvbmFsX3BhOworCXVuc2lnbmVkIGxvbmcgbnVtY2x1c3RlcnM7CisJc3RydWN0IG1lbWNsdXN0X3N0cnVjdCBjbHVzdGVyWzBdOworfTsKKworc3RydWN0IGRzcl9zdHJ1Y3QgeworCWxvbmcgc21tOwkJCS8qIFNNTSBudWJiZXIgdXNlZCBieSBMTUYgICAgICAgKi8KKwl1bnNpZ25lZCBsb25nICBsdXJ0X29mZjsJLyogb2Zmc2V0IHRvIExVUlQgdGFibGUgICAgICAgICAqLworCXVuc2lnbmVkIGxvbmcgIHN5c25hbWVfb2ZmOwkvKiBvZmZzZXQgdG8gc3lzbmFtZSBjaGFyIGNvdW50ICovCit9OworCitzdHJ1Y3QgaHdycGJfc3RydWN0IHsKKwl1bnNpZ25lZCBsb25nIHBoeXNfYWRkcjsJLyogY2hlY2s6IHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIGh3cnBiICovCisJdW5zaWduZWQgbG9uZyBpZDsJCS8qIGNoZWNrOiAiSFdSUEJcMFwwXDAiICovCisJdW5zaWduZWQgbG9uZyByZXZpc2lvbjsJCisJdW5zaWduZWQgbG9uZyBzaXplOwkJLyogc2l6ZSBvZiBod3JwYiAqLworCXVuc2lnbmVkIGxvbmcgY3B1aWQ7CisJdW5zaWduZWQgbG9uZyBwYWdlc2l6ZTsJCS8qIDgxOTIsIEkgaG9wZSAqLworCXVuc2lnbmVkIGxvbmcgcGFfYml0czsJCS8qIG51bWJlciBvZiBwaHlzaWNhbCBhZGRyZXNzIGJpdHMgKi8KKwl1bnNpZ25lZCBsb25nIG1heF9hc247CisJdW5zaWduZWQgY2hhciBzc25bMTZdOwkJLyogc3lzdGVtIHNlcmlhbCBudW1iZXI6IGJpZyBib3RoZXIgaXMgd2F0Y2hpbmcgKi8KKwl1bnNpZ25lZCBsb25nIHN5c190eXBlOworCXVuc2lnbmVkIGxvbmcgc3lzX3ZhcmlhdGlvbjsKKwl1bnNpZ25lZCBsb25nIHN5c19yZXZpc2lvbjsKKwl1bnNpZ25lZCBsb25nIGludHJfZnJlcTsJLyogaW50ZXJ2YWwgY2xvY2sgZnJlcXVlbmN5ICogNDA5NiAqLworCXVuc2lnbmVkIGxvbmcgY3ljbGVfZnJlcTsJLyogY3ljbGUgY291bnRlciBmcmVxdWVuY3kgKi8KKwl1bnNpZ25lZCBsb25nIHZwdGI7CQkvKiBWaXJ0dWFsIFBhZ2UgVGFibGUgQmFzZSBhZGRyZXNzICovCisJdW5zaWduZWQgbG9uZyByZXMxOworCXVuc2lnbmVkIGxvbmcgdGJoYl9vZmZzZXQ7CS8qIFRyYW5zbGF0aW9uIEJ1ZmZlciBIaW50IEJsb2NrICovCisJdW5zaWduZWQgbG9uZyBucl9wcm9jZXNzb3JzOworCXVuc2lnbmVkIGxvbmcgcHJvY2Vzc29yX3NpemU7CisJdW5zaWduZWQgbG9uZyBwcm9jZXNzb3Jfb2Zmc2V0OworCXVuc2lnbmVkIGxvbmcgY3RiX25yOworCXVuc2lnbmVkIGxvbmcgY3RiX3NpemU7CQkvKiBjb25zb2xlIHRlcm1pbmFsIGJsb2NrIHNpemUgKi8KKwl1bnNpZ25lZCBsb25nIGN0YnRfb2Zmc2V0OwkvKiBjb25zb2xlIHRlcm1pbmFsIGJsb2NrIHRhYmxlIG9mZnNldCAqLworCXVuc2lnbmVkIGxvbmcgY3JiX29mZnNldDsJLyogY29uc29sZSBjYWxsYmFjayByb3V0aW5lIGJsb2NrICovCisJdW5zaWduZWQgbG9uZyBtZGR0X29mZnNldDsJLyogbWVtb3J5IGRhdGEgZGVzY3JpcHRvciB0YWJsZSAqLworCXVuc2lnbmVkIGxvbmcgY2RiX29mZnNldDsJLyogY29uZmlndXJhdGlvbiBkYXRhIGJsb2NrIChvciBOVUxMKSAqLworCXVuc2lnbmVkIGxvbmcgZnJ1dF9vZmZzZXQ7CS8qIEZSVSB0YWJsZSAob3IgTlVMTCkgKi8KKwl2b2lkICgqc2F2ZV90ZXJtaW5hbCkodW5zaWduZWQgbG9uZyk7CisJdW5zaWduZWQgbG9uZyBzYXZlX3Rlcm1pbmFsX2RhdGE7CisJdm9pZCAoKnJlc3RvcmVfdGVybWluYWwpKHVuc2lnbmVkIGxvbmcpOworCXVuc2lnbmVkIGxvbmcgcmVzdG9yZV90ZXJtaW5hbF9kYXRhOworCXZvaWQgKCpDUFVfcmVzdGFydCkodW5zaWduZWQgbG9uZyk7CisJdW5zaWduZWQgbG9uZyBDUFVfcmVzdGFydF9kYXRhOworCXVuc2lnbmVkIGxvbmcgcmVzMjsKKwl1bnNpZ25lZCBsb25nIHJlczM7CisJdW5zaWduZWQgbG9uZyBjaGtzdW07CisJdW5zaWduZWQgbG9uZyByeHJkeTsKKwl1bnNpZ25lZCBsb25nIHR4cmR5OworCXVuc2lnbmVkIGxvbmcgZHNyX29mZnNldDsJLyogIkR5bmFtaWMgU3lzdGVtIFJlY29nbml0aW9uIERhdGEgQmxvY2sgVGFibGUiICovCit9OworCisjaWZkZWYgX19LRVJORUxfXworCitleHRlcm4gc3RydWN0IGh3cnBiX3N0cnVjdCAqaHdycGI7CisKK3N0YXRpYyBpbmxpbmUgdm9pZAoraHdycGJfdXBkYXRlX2NoZWNrc3VtKHN0cnVjdCBod3JwYl9zdHJ1Y3QgKmgpCit7CisJdW5zaWduZWQgbG9uZyBzdW0gPSAwLCAqbDsKKyAgICAgICAgZm9yIChsID0gKHVuc2lnbmVkIGxvbmcgKikgaDsgbCA8ICh1bnNpZ25lZCBsb25nICopICZoLT5jaGtzdW07ICsrbCkKKyAgICAgICAgICAgICAgICBzdW0gKz0gKmw7CisgICAgICAgIGgtPmNoa3N1bSA9IHN1bTsKK30KKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9fQUxQSEFfSFdSUEJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvaWRlLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9pZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODkzNGEyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvaWRlLmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hbHBoYS9pZGUuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTQtMTk5NiAgTGludXMgVG9ydmFsZHMgJiBhdXRob3JzCisgKi8KKworLyoKKyAqICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGFscGhhIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBJREUgY29kZS4KKyAqLworCisjaWZuZGVmIF9fQVNNYWxwaGFfSURFX0gKKyNkZWZpbmUgX19BU01hbHBoYV9JREVfSAorCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpZm5kZWYgTUFYX0hXSUZTCisjZGVmaW5lIE1BWF9IV0lGUwlDT05GSUdfSURFX01BWF9IV0lGUworI2VuZGlmCisKKyNkZWZpbmUgSURFX0FSQ0hfT0JTT0xFVEVfREVGQVVMVFMKKworc3RhdGljIGlubGluZSBpbnQgaWRlX2RlZmF1bHRfaXJxKHVuc2lnbmVkIGxvbmcgYmFzZSkKK3sKKwlzd2l0Y2ggKGJhc2UpIHsKKwkJY2FzZSAweDFmMDogcmV0dXJuIDE0OworCQljYXNlIDB4MTcwOiByZXR1cm4gMTU7CisJCWNhc2UgMHgxZTg6IHJldHVybiAxMTsKKwkJY2FzZSAweDE2ODogcmV0dXJuIDEwOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaWRlX2RlZmF1bHRfaW9fYmFzZShpbnQgaW5kZXgpCit7CisJc3dpdGNoIChpbmRleCkgeworCQljYXNlIDA6CXJldHVybiAweDFmMDsKKwkJY2FzZSAxOglyZXR1cm4gMHgxNzA7CisJCWNhc2UgMjogcmV0dXJuIDB4MWU4OworCQljYXNlIDM6IHJldHVybiAweDE2ODsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAwOworCX0KK30KKworI2RlZmluZSBJREVfQVJDSF9PQlNPTEVURV9JTklUCisjZGVmaW5lIGlkZV9kZWZhdWx0X2lvX2N0bChiYXNlKQkoKGJhc2UpICsgMHgyMDYpIC8qIG9ic29sZXRlICovCisKKyNpZmRlZiBDT05GSUdfUENJCisjZGVmaW5lIGlkZV9pbml0X2RlZmF1bHRfaXJxKGJhc2UpCSgwKQorI2Vsc2UKKyNkZWZpbmUgaWRlX2luaXRfZGVmYXVsdF9pcnEoYmFzZSkJaWRlX2RlZmF1bHRfaXJxKGJhc2UpCisjZW5kaWYKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2lkZV9pb3BzLmg+CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfX0FTTWFscGhhX0lERV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9pby5oIGIvaW5jbHVkZS9hc20tYWxwaGEvaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzFkZDdhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvaW8uaApAQCAtMCwwICsxLDY4MiBAQAorI2lmbmRlZiBfX0FMUEhBX0lPX0gKKyNkZWZpbmUgX19BTFBIQV9JT19ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxhc20vY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgorI2luY2x1ZGUgPGFzbS9od3JwYi5oPgorCisvKiBUaGUgZ2VuZXJpYyBoZWFkZXIgY29udGFpbnMgb25seSBwcm90b3R5cGVzLiAgSW5jbHVkaW5nIGl0IGVuc3VyZXMgdGhhdAorICAgdGhlIGltcGxlbWVudGF0aW9uIHdlIGhhdmUgaGVyZSBtYXRjaGVzIHRoYXQgaW50ZXJmYWNlLiAgKi8KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pb21hcC5oPgorCisvKiBXZSBkb24ndCB1c2UgSU8gc2xvd2Rvd25zIG9uIHRoZSBBbHBoYSwgYnV0Li4gKi8KKyNkZWZpbmUgX19TTE9XX0RPV05fSU8JZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBTTE9XX0RPV05fSU8JZG8geyB9IHdoaWxlICgwKQorCisvKgorICogVmlydHVhbCAtPiBwaHlzaWNhbCBpZGVudGl0eSBtYXBwaW5nIHN0YXJ0cyBhdCB0aGlzIG9mZnNldAorICovCisjaWZkZWYgVVNFXzQ4X0JJVF9LU0VHCisjZGVmaW5lIElERU5UX0FERFIgICAgIDB4ZmZmZjgwMDAwMDAwMDAwMFVMCisjZWxzZQorI2RlZmluZSBJREVOVF9BRERSICAgICAweGZmZmZmYzAwMDAwMDAwMDBVTAorI2VuZGlmCisKKy8qCisgKiBXZSB0cnkgdG8gYXZvaWQgaGFlIHVwZGF0ZXMgKHRodXMgdGhlIGNhY2hlKSwgYnV0IHdoZW4gd2UKKyAqIGRvIG5lZWQgdG8gdXBkYXRlIHRoZSBoYWUsIHdlIG5lZWQgdG8gZG8gaXQgYXRvbWljYWxseSwgc28KKyAqIHRoYXQgYW55IGludGVycnVwdHMgd291bGRuJ3QgZ2V0IGNvbmZ1c2VkIHdpdGggdGhlIGhhZQorICogcmVnaXN0ZXIgbm90IGJlaW5nIHVwLXRvLWRhdGUgd2l0aCByZXNwZWN0IHRvIHRoZSBoYXJkd2FyZQorICogdmFsdWUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3NldF9oYWUodW5zaWduZWQgbG9uZyBuZXdfaGFlKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJYWxwaGFfbXYuaGFlX2NhY2hlID0gbmV3X2hhZTsKKwkqYWxwaGFfbXYuaGFlX3JlZ2lzdGVyID0gbmV3X2hhZTsKKwltYigpOworCS8qIFJlLXJlYWQgdG8gbWFrZSBzdXJlIGl0IHdhcyB3cml0dGVuLiAgKi8KKwluZXdfaGFlID0gKmFscGhhX212LmhhZV9yZWdpc3RlcjsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldF9oYWUodW5zaWduZWQgbG9uZyBuZXdfaGFlKQoreworCWlmIChuZXdfaGFlICE9IGFscGhhX212LmhhZV9jYWNoZSkKKwkJX19zZXRfaGFlKG5ld19oYWUpOworfQorCisvKgorICogQ2hhbmdlIHZpcnR1YWwgYWRkcmVzc2VzIHRvIHBoeXNpY2FsIGFkZHJlc3NlcyBhbmQgdnYuCisgKi8KKyNpZmRlZiBVU0VfNDhfQklUX0tTRUcKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB2aXJ0X3RvX3BoeXModm9pZCAqYWRkcmVzcykKK3sKKwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpYWRkcmVzcyAtIElERU5UX0FERFI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqIHBoeXNfdG9fdmlydCh1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisJcmV0dXJuICh2b2lkICopIChhZGRyZXNzICsgSURFTlRfQUREUik7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHZpcnRfdG9fcGh5cyh2b2lkICphZGRyZXNzKQoreworICAgICAgICB1bnNpZ25lZCBsb25nIHBoeXMgPSAodW5zaWduZWQgbG9uZylhZGRyZXNzOworCisJLyogU2lnbi1leHRlbmQgZnJvbSBiaXQgNDEuICAqLworCXBoeXMgPDw9ICg2NCAtIDQxKTsKKwlwaHlzID0gKGxvbmcpcGh5cyA+PiAoNjQgLSA0MSk7CisKKwkvKiBDcm9wIHRvIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHdpZHRoIG9mIHRoZSBwcm9jZXNzb3IuICAqLworICAgICAgICBwaHlzICY9ICgxdWwgPDwgaHdycGItPnBhX2JpdHMpIC0gMTsKKworICAgICAgICByZXR1cm4gcGh5czsKK30KKworc3RhdGljIGlubGluZSB2b2lkICogcGh5c190b192aXJ0KHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKyAgICAgICAgcmV0dXJuICh2b2lkICopKElERU5UX0FERFIgKyAoYWRkcmVzcyAmICgoMXVsIDw8IDQxKSAtIDEpKSk7Cit9CisjZW5kaWYKKworI2RlZmluZSBwYWdlX3RvX3BoeXMocGFnZSkJcGFnZV90b19wYShwYWdlKQorCisvKiBUaGlzIGRlcGVuZHMgb24gd29ya2luZyBpb21tdS4gICovCisjZGVmaW5lIEJJT19WTUVSR0VfQk9VTkRBUlkJKGFscGhhX212Lm12X3BjaV90YmkgPyBQQUdFX1NJWkUgOiAwKQorCisvKiBNYXhpbXVtIFBJTyBzcGFjZSBhZGRyZXNzIHN1cHBvcnRlZD8gICovCisjZGVmaW5lIElPX1NQQUNFX0xJTUlUIDB4ZmZmZgorCisvKgorICogQ2hhbmdlIGFkZHJlc3NlcyBhcyBzZWVuIGJ5IHRoZSBrZXJuZWwgKHZpcnR1YWwpIHRvIGFkZHJlc3NlcyBhcworICogc2VlbiBieSBhIGRldmljZSAoYnVzKSwgYW5kIHZpY2UgdmVyc2EuCisgKgorICogTm90ZSB0aGF0IHRoaXMgb25seSB3b3JrcyBmb3IgYSBsaW1pdGVkIHJhbmdlIG9mIGtlcm5lbCBhZGRyZXNzZXMsCisgKiBhbmQgdmVyeSB3ZWxsIG1heSBub3Qgc3BhbiBhbGwgbWVtb3J5LiAgQ29uc2lkZXIgdGhpcyBpbnRlcmZhY2UgCisgKiBkZXByZWNhdGVkIGluIGZhdm91ciBvZiB0aGUgbWFwcGluZyBmdW5jdGlvbnMgaW4gPGFzbS9wY2kuaD4uCisgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fZGlyZWN0X21hcF9iYXNlOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19kaXJlY3RfbWFwX3NpemU7CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB2aXJ0X3RvX2J1cyh2b2lkICphZGRyZXNzKQoreworCXVuc2lnbmVkIGxvbmcgcGh5cyA9IHZpcnRfdG9fcGh5cyhhZGRyZXNzKTsKKwl1bnNpZ25lZCBsb25nIGJ1cyA9IHBoeXMgKyBfX2RpcmVjdF9tYXBfYmFzZTsKKwlyZXR1cm4gcGh5cyA8PSBfX2RpcmVjdF9tYXBfc2l6ZSA/IGJ1cyA6IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqYnVzX3RvX3ZpcnQodW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCXZvaWQgKnZpcnQ7CisKKwkvKiBUaGlzIGNoZWNrIGlzIGEgc2FuaXR5IGNoZWNrIGJ1dCBhbHNvIGVuc3VyZXMgdGhhdCBidXMgYWRkcmVzcyAwCisJICAgbWFwcyB0byB2aXJ0dWFsIGFkZHJlc3MgMCB3aGljaCBpcyB1c2VmdWwgdG8gZGV0ZWN0IG51bGwgcG9pbnRlcnMKKwkgICAodGhlIE5DUiBkcml2ZXIgaXMgbXVjaCBzaW1wbGVyIGlmIE5VTEwgcG9pbnRlcnMgYXJlIHByZXNlcnZlZCkuICAqLworCWFkZHJlc3MgLT0gX19kaXJlY3RfbWFwX2Jhc2U7CisJdmlydCA9IHBoeXNfdG9fdmlydChhZGRyZXNzKTsKKwlyZXR1cm4gKGxvbmcpYWRkcmVzcyA8PSAwID8gTlVMTCA6IHZpcnQ7Cit9CisKKy8qCisgKiBUaGVyZSBhcmUgZGlmZmVyZW50IGNoaXBzZXRzIHRvIGludGVyZmFjZSB0aGUgQWxwaGEgQ1BVcyB0byB0aGUgd29ybGQuCisgKi8KKworI2RlZmluZSBJT19DT05DQVQoYSxiKQlfSU9fQ09OQ0FUKGEsYikKKyNkZWZpbmUgX0lPX0NPTkNBVChhLGIpCWEgIyMgXyAjIyBiCisKKyNpZmRlZiBDT05GSUdfQUxQSEFfR0VORVJJQworCisvKiBJbiBhIGdlbmVyaWMga2VybmVsLCB3ZSBhbHdheXMgZ28gdGhyb3VnaCB0aGUgbWFjaGluZSB2ZWN0b3IuICAqLworCisjZGVmaW5lIFJFTUFQMShUWVBFLCBOQU1FLCBRVUFMKQkJCQkJXAorc3RhdGljIGlubGluZSBUWVBFIGdlbmVyaWNfIyNOQU1FKFFVQUwgdm9pZCBfX2lvbWVtICphZGRyKQkJXAorewkJCQkJCQkJCVwKKwlyZXR1cm4gYWxwaGFfbXYubXZfIyNOQU1FKGFkZHIpOwkJCQlcCit9CisKKyNkZWZpbmUgUkVNQVAyKFRZUEUsIE5BTUUsIFFVQUwpCQkJCQlcCitzdGF0aWMgaW5saW5lIHZvaWQgZ2VuZXJpY18jI05BTUUoVFlQRSBiLCBRVUFMIHZvaWQgX19pb21lbSAqYWRkcikJXAorewkJCQkJCQkJCVwKKwlhbHBoYV9tdi5tdl8jI05BTUUoYiwgYWRkcik7CQkJCQlcCit9CisKK1JFTUFQMSh1bnNpZ25lZCBpbnQsIGlvcmVhZDgsIC8qKi8pCitSRU1BUDEodW5zaWduZWQgaW50LCBpb3JlYWQxNiwgLyoqLykKK1JFTUFQMSh1bnNpZ25lZCBpbnQsIGlvcmVhZDMyLCAvKiovKQorUkVNQVAxKHU4LCByZWFkYiwgY29uc3Qgdm9sYXRpbGUpCitSRU1BUDEodTE2LCByZWFkdywgY29uc3Qgdm9sYXRpbGUpCitSRU1BUDEodTMyLCByZWFkbCwgY29uc3Qgdm9sYXRpbGUpCitSRU1BUDEodTY0LCByZWFkcSwgY29uc3Qgdm9sYXRpbGUpCisKK1JFTUFQMih1OCwgaW93cml0ZTgsIC8qKi8pCitSRU1BUDIodTE2LCBpb3dyaXRlMTYsIC8qKi8pCitSRU1BUDIodTMyLCBpb3dyaXRlMzIsIC8qKi8pCitSRU1BUDIodTgsIHdyaXRlYiwgdm9sYXRpbGUpCitSRU1BUDIodTE2LCB3cml0ZXcsIHZvbGF0aWxlKQorUkVNQVAyKHUzMiwgd3JpdGVsLCB2b2xhdGlsZSkKK1JFTUFQMih1NjQsIHdyaXRlcSwgdm9sYXRpbGUpCisKKyN1bmRlZiBSRU1BUDEKKyN1bmRlZiBSRU1BUDIKKworc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKmdlbmVyaWNfaW9wb3J0bWFwKHVuc2lnbmVkIGxvbmcgYSkKK3sKKwlyZXR1cm4gYWxwaGFfbXYubXZfaW9wb3J0bWFwKGEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqZ2VuZXJpY19pb3JlbWFwKHVuc2lnbmVkIGxvbmcgYSwgdW5zaWduZWQgbG9uZyBzKQoreworCXJldHVybiBhbHBoYV9tdi5tdl9pb3JlbWFwKGEsIHMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ2VuZXJpY19pb3VubWFwKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYSkKK3sKKwlyZXR1cm4gYWxwaGFfbXYubXZfaW91bm1hcChhKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZ2VuZXJpY19pc19pb2FkZHIodW5zaWduZWQgbG9uZyBhKQoreworCXJldHVybiBhbHBoYV9tdi5tdl9pc19pb2FkZHIoYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGdlbmVyaWNfaXNfbW1pbyhjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmEpCit7CisJcmV0dXJuIGFscGhhX212Lm12X2lzX21taW8oYSk7Cit9CisKKyNkZWZpbmUgX19JT19QUkVGSVgJCWdlbmVyaWMKKyNkZWZpbmUgZ2VuZXJpY190cml2aWFsX3J3X2J3CTAKKyNkZWZpbmUgZ2VuZXJpY190cml2aWFsX3J3X2xxCTAKKyNkZWZpbmUgZ2VuZXJpY190cml2aWFsX2lvX2J3CTAKKyNkZWZpbmUgZ2VuZXJpY190cml2aWFsX2lvX2xxCTAKKyNkZWZpbmUgZ2VuZXJpY190cml2aWFsX2lvdW5tYXAJMAorCisjZWxzZQorCisjaWYgZGVmaW5lZChDT05GSUdfQUxQSEFfQVBFQ1MpCisjIGluY2x1ZGUgPGFzbS9jb3JlX2FwZWNzLmg+CisjZWxpZiBkZWZpbmVkKENPTkZJR19BTFBIQV9DSUEpCisjIGluY2x1ZGUgPGFzbS9jb3JlX2NpYS5oPgorI2VsaWYgZGVmaW5lZChDT05GSUdfQUxQSEFfSVJPTkdBVEUpCisjIGluY2x1ZGUgPGFzbS9jb3JlX2lyb25nYXRlLmg+CisjZWxpZiBkZWZpbmVkKENPTkZJR19BTFBIQV9KRU5TRU4pCisjIGluY2x1ZGUgPGFzbS9qZW5zZW4uaD4KKyNlbGlmIGRlZmluZWQoQ09ORklHX0FMUEhBX0xDQSkKKyMgaW5jbHVkZSA8YXNtL2NvcmVfbGNhLmg+CisjZWxpZiBkZWZpbmVkKENPTkZJR19BTFBIQV9NQVJWRUwpCisjIGluY2x1ZGUgPGFzbS9jb3JlX21hcnZlbC5oPgorI2VsaWYgZGVmaW5lZChDT05GSUdfQUxQSEFfTUNQQ0lBKQorIyBpbmNsdWRlIDxhc20vY29yZV9tY3BjaWEuaD4KKyNlbGlmIGRlZmluZWQoQ09ORklHX0FMUEhBX1BPTEFSSVMpCisjIGluY2x1ZGUgPGFzbS9jb3JlX3BvbGFyaXMuaD4KKyNlbGlmIGRlZmluZWQoQ09ORklHX0FMUEhBX1QyKQorIyBpbmNsdWRlIDxhc20vY29yZV90Mi5oPgorI2VsaWYgZGVmaW5lZChDT05GSUdfQUxQSEFfVFNVTkFNSSkKKyMgaW5jbHVkZSA8YXNtL2NvcmVfdHN1bmFtaS5oPgorI2VsaWYgZGVmaW5lZChDT05GSUdfQUxQSEFfVElUQU4pCisjIGluY2x1ZGUgPGFzbS9jb3JlX3RpdGFuLmg+CisjZWxpZiBkZWZpbmVkKENPTkZJR19BTFBIQV9XSUxERklSRSkKKyMgaW5jbHVkZSA8YXNtL2NvcmVfd2lsZGZpcmUuaD4KKyNlbHNlCisjZXJyb3IgIldoYXQgc3lzdGVtIGlzIHRoaXM/IgorI2VuZGlmCisKKyNlbmRpZiAvKiBHRU5FUklDICovCisKKy8qCisgKiBXZSBhbHdheXMgaGF2ZSBleHRlcm5hbCB2ZXJzaW9ucyBvZiB0aGVzZSByb3V0aW5lcy4KKyAqLworZXh0ZXJuIHU4CQlpbmIodW5zaWduZWQgbG9uZyBwb3J0KTsKK2V4dGVybiB1MTYJCWludyh1bnNpZ25lZCBsb25nIHBvcnQpOworZXh0ZXJuIHUzMgkJaW5sKHVuc2lnbmVkIGxvbmcgcG9ydCk7CitleHRlcm4gdm9pZAkJb3V0Yih1OCBiLCB1bnNpZ25lZCBsb25nIHBvcnQpOworZXh0ZXJuIHZvaWQJCW91dHcodTE2IGIsIHVuc2lnbmVkIGxvbmcgcG9ydCk7CitleHRlcm4gdm9pZAkJb3V0bCh1MzIgYiwgdW5zaWduZWQgbG9uZyBwb3J0KTsKKworZXh0ZXJuIHU4CQlyZWFkYihjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpOworZXh0ZXJuIHUxNgkJcmVhZHcoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKTsKK2V4dGVybiB1MzIJCXJlYWRsKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcik7CitleHRlcm4gdTY0CQlyZWFkcShjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpOworZXh0ZXJuIHZvaWQJCXdyaXRlYih1OCBiLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpOworZXh0ZXJuIHZvaWQJCXdyaXRldyh1MTYgYiwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKTsKK2V4dGVybiB2b2lkCQl3cml0ZWwodTMyIGIsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcik7CitleHRlcm4gdm9pZAkJd3JpdGVxKHU2NCBiLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpOworCitleHRlcm4gdTgJCV9fcmF3X3JlYWRiKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcik7CitleHRlcm4gdTE2CQlfX3Jhd19yZWFkdyhjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpOworZXh0ZXJuIHUzMgkJX19yYXdfcmVhZGwoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKTsKK2V4dGVybiB1NjQJCV9fcmF3X3JlYWRxKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcik7CitleHRlcm4gdm9pZAkJX19yYXdfd3JpdGViKHU4IGIsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcik7CitleHRlcm4gdm9pZAkJX19yYXdfd3JpdGV3KHUxNiBiLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpOworZXh0ZXJuIHZvaWQJCV9fcmF3X3dyaXRlbCh1MzIgYiwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKTsKK2V4dGVybiB2b2lkCQlfX3Jhd193cml0ZXEodTY0IGIsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcik7CisKKy8qCisgKiBNYXBwaW5nIGZyb20gcG9ydCBudW1iZXJzIHRvIF9faW9tZW0gc3BhY2UgaXMgcHJldHR5IGVhc3kuCisgKi8KKworLyogVGhlc2UgdHdvIGhhdmUgdG8gYmUgZXh0ZXJuIGlubGluZSBiZWNhdXNlIG9mIHRoZSBleHRlcm4gcHJvdG90eXBlIGZyb20KKyAgIDxhc20tZ2VuZXJpYy9pb21hcC5oPi4gIEl0IGlzIG5vdCBsZWdhbCB0byBtaXggImV4dGVybiIgYW5kICJzdGF0aWMiIGZvcgorICAgdGhlIHNhbWUgZGVjbGFyYXRpb24uICAqLworZXh0ZXJuIGlubGluZSB2b2lkIF9faW9tZW0gKmlvcG9ydF9tYXAodW5zaWduZWQgbG9uZyBwb3J0LCB1bnNpZ25lZCBpbnQgc2l6ZSkKK3sKKwlyZXR1cm4gSU9fQ09OQ0FUKF9fSU9fUFJFRklYLGlvcG9ydG1hcCkgKHBvcnQpOworfQorCitleHRlcm4gaW5saW5lIHZvaWQgaW9wb3J0X3VubWFwKHZvaWQgX19pb21lbSAqYWRkcikKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKmlvcmVtYXAodW5zaWduZWQgbG9uZyBwb3J0LCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJcmV0dXJuIElPX0NPTkNBVChfX0lPX1BSRUZJWCxpb3JlbWFwKSAocG9ydCwgc2l6ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbWVtICpfX2lvcmVtYXAodW5zaWduZWQgbG9uZyBwb3J0LCB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlyZXR1cm4gaW9yZW1hcChwb3J0LCBzaXplKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKiBpb3JlbWFwX25vY2FjaGUodW5zaWduZWQgbG9uZyBvZmZzZXQsCisJCQkJCSAgICAgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXJldHVybiBpb3JlbWFwKG9mZnNldCwgc2l6ZSk7Cit9IAorCitzdGF0aWMgaW5saW5lIHZvaWQgaW91bm1hcCh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJSU9fQ09OQ0FUKF9fSU9fUFJFRklYLGlvdW5tYXApKGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIGludCBfX2lzX2lvYWRkcih1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcmV0dXJuIElPX0NPTkNBVChfX0lPX1BSRUZJWCxpc19pb2FkZHIpKGFkZHIpOworfQorI2RlZmluZSBfX2lzX2lvYWRkcihhKQkJX19pc19pb2FkZHIoKHVuc2lnbmVkIGxvbmcpKGEpKQorCitzdGF0aWMgaW5saW5lIGludCBfX2lzX21taW8oY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCXJldHVybiBJT19DT05DQVQoX19JT19QUkVGSVgsaXNfbW1pbykoYWRkcik7Cit9CisKKworLyoKKyAqIElmIHRoZSBhY3R1YWwgSS9PIGJpdHMgYXJlIHN1ZmZpY2llbnRseSB0cml2aWFsLCB0aGVuIGV4cGFuZCBpbmxpbmUuCisgKi8KKworI2lmIElPX0NPTkNBVChfX0lPX1BSRUZJWCx0cml2aWFsX2lvX2J3KQorZXh0ZXJuIGlubGluZSB1bnNpZ25lZCBpbnQgaW9yZWFkOCh2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJdW5zaWduZWQgaW50IHJldCA9IElPX0NPTkNBVChfX0lPX1BSRUZJWCxpb3JlYWQ4KShhZGRyKTsKKwltYigpOworCXJldHVybiByZXQ7Cit9CisKK2V4dGVybiBpbmxpbmUgdW5zaWduZWQgaW50IGlvcmVhZDE2KHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwl1bnNpZ25lZCBpbnQgcmV0ID0gSU9fQ09OQ0FUKF9fSU9fUFJFRklYLGlvcmVhZDE2KShhZGRyKTsKKwltYigpOworCXJldHVybiByZXQ7Cit9CisKK2V4dGVybiBpbmxpbmUgdm9pZCBpb3dyaXRlOCh1OCBiLCB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJSU9fQ09OQ0FUKF9fSU9fUFJFRklYLGlvd3JpdGU4KShiLCBhZGRyKTsKKwltYigpOworfQorCitleHRlcm4gaW5saW5lIHZvaWQgaW93cml0ZTE2KHUxNiBiLCB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJSU9fQ09OQ0FUKF9fSU9fUFJFRklYLGlvd3JpdGUxNikoYiwgYWRkcik7CisJbWIoKTsKK30KKworZXh0ZXJuIGlubGluZSB1OCBpbmIodW5zaWduZWQgbG9uZyBwb3J0KQoreworCXJldHVybiBpb3JlYWQ4KGlvcG9ydF9tYXAocG9ydCwgMSkpOworfQorCitleHRlcm4gaW5saW5lIHUxNiBpbncodW5zaWduZWQgbG9uZyBwb3J0KQoreworCXJldHVybiBpb3JlYWQxNihpb3BvcnRfbWFwKHBvcnQsIDIpKTsKK30KKworZXh0ZXJuIGlubGluZSB2b2lkIG91dGIodTggYiwgdW5zaWduZWQgbG9uZyBwb3J0KQoreworCWlvd3JpdGU4KGIsIGlvcG9ydF9tYXAocG9ydCwgMSkpOworfQorCitleHRlcm4gaW5saW5lIHZvaWQgb3V0dyh1MTYgYiwgdW5zaWduZWQgbG9uZyBwb3J0KQoreworCWlvd3JpdGUxNihiLCBpb3BvcnRfbWFwKHBvcnQsIDIpKTsKK30KKyNlbmRpZgorCisjaWYgSU9fQ09OQ0FUKF9fSU9fUFJFRklYLHRyaXZpYWxfaW9fbHEpCitleHRlcm4gaW5saW5lIHVuc2lnbmVkIGludCBpb3JlYWQzMih2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJdW5zaWduZWQgaW50IHJldCA9IElPX0NPTkNBVChfX0lPX1BSRUZJWCxpb3JlYWQzMikoYWRkcik7CisJbWIoKTsKKwlyZXR1cm4gcmV0OworfQorCitleHRlcm4gaW5saW5lIHZvaWQgaW93cml0ZTMyKHUzMiBiLCB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJSU9fQ09OQ0FUKF9fSU9fUFJFRklYLGlvd3JpdGUzMikoYiwgYWRkcik7CisJbWIoKTsKK30KKworZXh0ZXJuIGlubGluZSB1MzIgaW5sKHVuc2lnbmVkIGxvbmcgcG9ydCkKK3sKKwlyZXR1cm4gaW9yZWFkMzIoaW9wb3J0X21hcChwb3J0LCA0KSk7Cit9CisKK2V4dGVybiBpbmxpbmUgdm9pZCBvdXRsKHUzMiBiLCB1bnNpZ25lZCBsb25nIHBvcnQpCit7CisJaW93cml0ZTMyKGIsIGlvcG9ydF9tYXAocG9ydCwgNCkpOworfQorI2VuZGlmCisKKyNpZiBJT19DT05DQVQoX19JT19QUkVGSVgsdHJpdmlhbF9yd19idykgPT0gMQorZXh0ZXJuIGlubGluZSB1OCBfX3Jhd19yZWFkYihjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJcmV0dXJuIElPX0NPTkNBVChfX0lPX1BSRUZJWCxyZWFkYikoYWRkcik7Cit9CisKK2V4dGVybiBpbmxpbmUgdTE2IF9fcmF3X3JlYWR3KGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlyZXR1cm4gSU9fQ09OQ0FUKF9fSU9fUFJFRklYLHJlYWR3KShhZGRyKTsKK30KKworZXh0ZXJuIGlubGluZSB2b2lkIF9fcmF3X3dyaXRlYih1OCBiLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJSU9fQ09OQ0FUKF9fSU9fUFJFRklYLHdyaXRlYikoYiwgYWRkcik7Cit9CisKK2V4dGVybiBpbmxpbmUgdm9pZCBfX3Jhd193cml0ZXcodTE2IGIsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlJT19DT05DQVQoX19JT19QUkVGSVgsd3JpdGV3KShiLCBhZGRyKTsKK30KKworZXh0ZXJuIGlubGluZSB1OCByZWFkYihjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJdTggcmV0ID0gX19yYXdfcmVhZGIoYWRkcik7CisJbWIoKTsKKwlyZXR1cm4gcmV0OworfQorCitleHRlcm4gaW5saW5lIHUxNiByZWFkdyhjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJdTE2IHJldCA9IF9fcmF3X3JlYWR3KGFkZHIpOworCW1iKCk7CisJcmV0dXJuIHJldDsKK30KKworZXh0ZXJuIGlubGluZSB2b2lkIHdyaXRlYih1OCBiLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJX19yYXdfd3JpdGViKGIsIGFkZHIpOworCW1iKCk7Cit9CisKK2V4dGVybiBpbmxpbmUgdm9pZCB3cml0ZXcodTE2IGIsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlfX3Jhd193cml0ZXcoYiwgYWRkcik7CisJbWIoKTsKK30KKyNlbmRpZgorCisjaWYgSU9fQ09OQ0FUKF9fSU9fUFJFRklYLHRyaXZpYWxfcndfbHEpID09IDEKK2V4dGVybiBpbmxpbmUgdTMyIF9fcmF3X3JlYWRsKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlyZXR1cm4gSU9fQ09OQ0FUKF9fSU9fUFJFRklYLHJlYWRsKShhZGRyKTsKK30KKworZXh0ZXJuIGlubGluZSB1NjQgX19yYXdfcmVhZHEoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCXJldHVybiBJT19DT05DQVQoX19JT19QUkVGSVgscmVhZHEpKGFkZHIpOworfQorCitleHRlcm4gaW5saW5lIHZvaWQgX19yYXdfd3JpdGVsKHUzMiBiLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJSU9fQ09OQ0FUKF9fSU9fUFJFRklYLHdyaXRlbCkoYiwgYWRkcik7Cit9CisKK2V4dGVybiBpbmxpbmUgdm9pZCBfX3Jhd193cml0ZXEodTY0IGIsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlJT19DT05DQVQoX19JT19QUkVGSVgsd3JpdGVxKShiLCBhZGRyKTsKK30KKworZXh0ZXJuIGlubGluZSB1MzIgcmVhZGwoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCXUzMiByZXQgPSBfX3Jhd19yZWFkbChhZGRyKTsKKwltYigpOworCXJldHVybiByZXQ7Cit9CisKK2V4dGVybiBpbmxpbmUgdTY0IHJlYWRxKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwl1NjQgcmV0ID0gX19yYXdfcmVhZHEoYWRkcik7CisJbWIoKTsKKwlyZXR1cm4gcmV0OworfQorCitleHRlcm4gaW5saW5lIHZvaWQgd3JpdGVsKHUzMiBiLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJX19yYXdfd3JpdGVsKGIsIGFkZHIpOworCW1iKCk7Cit9CisKK2V4dGVybiBpbmxpbmUgdm9pZCB3cml0ZXEodTY0IGIsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlfX3Jhd193cml0ZXEoYiwgYWRkcik7CisJbWIoKTsKK30KKyNlbmRpZgorCisjZGVmaW5lIGluYl9wCQlpbmIKKyNkZWZpbmUgaW53X3AJCWludworI2RlZmluZSBpbmxfcAkJaW5sCisjZGVmaW5lIG91dGJfcAkJb3V0YgorI2RlZmluZSBvdXR3X3AJCW91dHcKKyNkZWZpbmUgb3V0bF9wCQlvdXRsCisjZGVmaW5lIHJlYWRiX3JlbGF4ZWQoYWRkcikgX19yYXdfcmVhZGIoYWRkcikKKyNkZWZpbmUgcmVhZHdfcmVsYXhlZChhZGRyKSBfX3Jhd19yZWFkdyhhZGRyKQorI2RlZmluZSByZWFkbF9yZWxheGVkKGFkZHIpIF9fcmF3X3JlYWRsKGFkZHIpCisjZGVmaW5lIHJlYWRxX3JlbGF4ZWQoYWRkcikgX19yYXdfcmVhZHEoYWRkcikKKworI2RlZmluZSBtbWlvd2IoKQorCisvKgorICogU3RyaW5nIHZlcnNpb24gb2YgSU8gbWVtb3J5IGFjY2VzcyBvcHM6CisgKi8KK2V4dGVybiB2b2lkIG1lbWNweV9mcm9taW8odm9pZCAqLCBjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKiwgbG9uZyk7CitleHRlcm4gdm9pZCBtZW1jcHlfdG9pbyh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKiwgY29uc3Qgdm9pZCAqLCBsb25nKTsKK2V4dGVybiB2b2lkIF9tZW1zZXRfY19pbyh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKiwgdW5zaWduZWQgbG9uZywgbG9uZyk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtZW1zZXRfaW8odm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyLCB1OCBjLCBsb25nIGxlbikKK3sKKwlfbWVtc2V0X2NfaW8oYWRkciwgMHgwMTAxMDEwMTAxMDEwMTAxVUwgKiBjLCBsZW4pOworfQorCisjZGVmaW5lIF9fSEFWRV9BUkNIX01FTVNFVFdfSU8KK3N0YXRpYyBpbmxpbmUgdm9pZCBtZW1zZXR3X2lvKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkciwgdTE2IGMsIGxvbmcgbGVuKQoreworCV9tZW1zZXRfY19pbyhhZGRyLCAweDAwMDEwMDAxMDAwMTAwMDFVTCAqIGMsIGxlbik7Cit9CisKKy8qCisgKiBTdHJpbmcgdmVyc2lvbnMgb2YgaW4vb3V0IG9wczoKKyAqLworZXh0ZXJuIHZvaWQgaW5zYiAodW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICpkc3QsIHVuc2lnbmVkIGxvbmcgY291bnQpOworZXh0ZXJuIHZvaWQgaW5zdyAodW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICpkc3QsIHVuc2lnbmVkIGxvbmcgY291bnQpOworZXh0ZXJuIHZvaWQgaW5zbCAodW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICpkc3QsIHVuc2lnbmVkIGxvbmcgY291bnQpOworZXh0ZXJuIHZvaWQgb3V0c2IgKHVuc2lnbmVkIGxvbmcgcG9ydCwgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKK2V4dGVybiB2b2lkIG91dHN3ICh1bnNpZ25lZCBsb25nIHBvcnQsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgbG9uZyBjb3VudCk7CitleHRlcm4gdm9pZCBvdXRzbCAodW5zaWduZWQgbG9uZyBwb3J0LCBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGxvbmcgY291bnQpOworCisvKgorICogWFhYIC0gV2UgZG9uJ3QgaGF2ZSBjc3VtX3BhcnRpYWxfY29weV9mcm9taW8oKSB5ZXQsIHNvIHdlIGNoZWF0IGhlcmUgYW5kIAorICoganVzdCBjb3B5IGl0LiBUaGUgbmV0IGNvZGUgd2lsbCB0aGVuIGRvIHRoZSBjaGVja3N1bSBsYXRlci4gUHJlc2VudGx5IAorICogb25seSB1c2VkIGJ5IHNvbWUgc2hhcmVkIG1lbW9yeSA4MzkwIEV0aGVybmV0IGNhcmRzIGFueXdheS4KKyAqLworCisjZGVmaW5lIGV0aF9pb19jb3B5X2FuZF9zdW0oc2tiLHNyYyxsZW4sdW51c2VkKSBcCisgIG1lbWNweV9mcm9taW8oKHNrYiktPmRhdGEsc3JjLGxlbikKKworI2RlZmluZSBpc2FfZXRoX2lvX2NvcHlfYW5kX3N1bShza2Isc3JjLGxlbix1bnVzZWQpIFwKKyAgaXNhX21lbWNweV9mcm9taW8oKHNrYiktPmRhdGEsc3JjLGxlbikKKworc3RhdGljIGlubGluZSBpbnQKK2NoZWNrX3NpZ25hdHVyZShjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmlvX2FkZHIsCisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNpZ25hdHVyZSwgaW50IGxlbmd0aCkKK3sKKwlkbyB7CisJCWlmIChyZWFkYihpb19hZGRyKSAhPSAqc2lnbmF0dXJlKQorCQkJcmV0dXJuIDA7CisJCWlvX2FkZHIrKzsKKwkJc2lnbmF0dXJlKys7CisJfSB3aGlsZSAoLS1sZW5ndGgpOworCXJldHVybiAxOworfQorCisKKy8qCisgKiBJU0Egc3BhY2UgaXMgbWFwcGVkIHRvIHNvbWUgbWFjaGluZS1zcGVjaWZpYyBsb2NhdGlvbiBvbiBBbHBoYS4KKyAqIENhbGwgaW50byB0aGUgZXhpc3RpbmcgaG9va3MgdG8gZ2V0IHRoZSBhZGRyZXNzIHRyYW5zbGF0ZWQuCisgKi8KKworc3RhdGljIGlubGluZSB1OAoraXNhX3JlYWRiKHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQoreworCXZvaWQgX19pb21lbSAqYWRkciA9IGlvcmVtYXAob2Zmc2V0LCAxKTsKKwl1OCByZXQgPSByZWFkYihhZGRyKTsKKwlpb3VubWFwKGFkZHIpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTE2Citpc2FfcmVhZHcodW5zaWduZWQgbG9uZyBvZmZzZXQpCit7CisJdm9pZCBfX2lvbWVtICphZGRyID0gaW9yZW1hcChvZmZzZXQsIDIpOworCXUxNiByZXQgPSByZWFkdyhhZGRyKTsKKwlpb3VubWFwKGFkZHIpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyCitpc2FfcmVhZGwodW5zaWduZWQgbG9uZyBvZmZzZXQpCit7CisJdm9pZCBfX2lvbWVtICphZGRyID0gaW9yZW1hcChvZmZzZXQsIDIpOworCXUzMiByZXQgPSByZWFkbChhZGRyKTsKKwlpb3VubWFwKGFkZHIpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAoraXNhX3dyaXRlYih1OCBiLCB1bnNpZ25lZCBsb25nIG9mZnNldCkKK3sKKwl2b2lkIF9faW9tZW0gKmFkZHIgPSBpb3JlbWFwKG9mZnNldCwgMik7CisJd3JpdGViKGIsIGFkZHIpOworCWlvdW5tYXAoYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAoraXNhX3dyaXRldyh1MTYgdywgdW5zaWduZWQgbG9uZyBvZmZzZXQpCit7CisJdm9pZCBfX2lvbWVtICphZGRyID0gaW9yZW1hcChvZmZzZXQsIDIpOworCXdyaXRldyh3LCBhZGRyKTsKKwlpb3VubWFwKGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2lzYV93cml0ZWwodTMyIGwsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQoreworCXZvaWQgX19pb21lbSAqYWRkciA9IGlvcmVtYXAob2Zmc2V0LCAyKTsKKwl3cml0ZWwobCwgYWRkcik7CisJaW91bm1hcChhZGRyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitpc2FfbWVtc2V0X2lvKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1OCB2YWwsIGxvbmcgbikKK3sKKwl2b2lkIF9faW9tZW0gKmFkZHIgPSBpb3JlbWFwKG9mZnNldCwgbik7CisJbWVtc2V0X2lvKGFkZHIsIHZhbCwgbik7CisJaW91bm1hcChhZGRyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitpc2FfbWVtY3B5X2Zyb21pbyh2b2lkICpkZXN0LCB1bnNpZ25lZCBsb25nIG9mZnNldCwgbG9uZyBuKQoreworCXZvaWQgX19pb21lbSAqYWRkciA9IGlvcmVtYXAob2Zmc2V0LCBuKTsKKwltZW1jcHlfZnJvbWlvKGRlc3QsIGFkZHIsIG4pOworCWlvdW5tYXAoYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAoraXNhX21lbWNweV90b2lvKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBjb25zdCB2b2lkICpzcmMsIGxvbmcgbikKK3sKKwl2b2lkIF9faW9tZW0gKmFkZHIgPSBpb3JlbWFwKG9mZnNldCwgbik7CisJbWVtY3B5X3RvaW8oYWRkciwgc3JjLCBuKTsKKwlpb3VubWFwKGFkZHIpOworfQorCisvKgorICogVGhlIEFscGhhIEplbnNlbiBoYXJkd2FyZSBmb3Igc29tZSByYXRoZXIgc3RyYW5nZSByZWFzb24gcHV0cworICogdGhlIFJUQyBjbG9jayBhdCAweDE3MCBpbnN0ZWFkIG9mIDB4NzAuIFByb2JhYmx5IGR1ZSB0byBzb21lCisgKiBtaXNndWlkZWQgaWRlYSBhYm91dCB1c2luZyAweDcwIGZvciBOTUkgc3R1ZmYuCisgKgorICogVGhlc2UgZGVmaW5lcyB3aWxsIG92ZXJyaWRlIHRoZSBkZWZhdWx0cyB3aGVuIGRvaW5nIFJUQyBxdWVyaWVzCisgKi8KKworI2lmZGVmIENPTkZJR19BTFBIQV9HRU5FUklDCisjIGRlZmluZSBSVENfUE9SVCh4KQkoKHgpICsgYWxwaGFfbXYucnRjX3BvcnQpCisjZWxzZQorIyBpZmRlZiBDT05GSUdfQUxQSEFfSkVOU0VOCisjICBkZWZpbmUgUlRDX1BPUlQoeCkJKDB4MTcwKyh4KSkKKyMgZWxzZQorIyAgZGVmaW5lIFJUQ19QT1JUKHgpCSgweDcwICsgKHgpKQorIyBlbmRpZgorI2VuZGlmCisjZGVmaW5lIFJUQ19BTFdBWVNfQkNECTAKKworLyogTm90aGluZyB0byBkbyAqLworCisjZGVmaW5lIGRtYV9jYWNoZV9pbnYoX3N0YXJ0LF9zaXplKQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBkbWFfY2FjaGVfd2JhY2soX3N0YXJ0LF9zaXplKQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBkbWFfY2FjaGVfd2JhY2tfaW52KF9zdGFydCxfc2l6ZSkJZG8geyB9IHdoaWxlICgwKQorCisvKgorICogU29tZSBtdWNraW5nIGZvcm9ucyB1c2UgaWZbbl1kZWYgd3JpdGVxIHRvIGNoZWNrIGlmIHBsYXRmb3JtIGhhcyBpdC4KKyAqIEl0J3MgYSBibG9vZHkgYmFkIGlkZWEgYW5kIHdlIHByb2JhYmx5IHdhbnQgQVJDSF9IQVNfV1JJVEVRIGZvciB0aGVtCisgKiB0byBwbGF5IHdpdGg7IGZvciBub3cganVzdCB1c2UgY3BwIGFudGktcmVjdXJzaW9uIGxvZ2ljcyBhbmQgbWFrZSBzdXJlCisgKiB0aGF0IGRhbW4gdGhpbmcgaXMgZGVmaW5lZCBhbmQgZXhwYW5kcyB0byBpdHNlbGYuCisgKi8KKworI2RlZmluZSB3cml0ZXEgd3JpdGVxCisjZGVmaW5lIHJlYWRxIHJlYWRxCisKKy8qCisgKiBDb252ZXJ0IGEgcGh5c2ljYWwgcG9pbnRlciB0byBhIHZpcnR1YWwga2VybmVsIHBvaW50ZXIgZm9yIC9kZXYvbWVtCisgKiBhY2Nlc3MKKyAqLworI2RlZmluZSB4bGF0ZV9kZXZfbWVtX3B0cihwKQlfX3ZhKHApCisKKy8qCisgKiBDb252ZXJ0IGEgdmlydHVhbCBjYWNoZWQgcG9pbnRlciB0byBhbiB1bmNhY2hlZCBwb2ludGVyCisgKi8KKyNkZWZpbmUgeGxhdGVfZGV2X2ttZW1fcHRyKHApCXAKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9fQUxQSEFfSU9fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvaW9fdHJpdmlhbC5oIGIvaW5jbHVkZS9hc20tYWxwaGEvaW9fdHJpdmlhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxMGQxYWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9pb190cml2aWFsLmgKQEAgLTAsMCArMSwxMjcgQEAKKy8qIFRyaXZpYWwgaW1wbGVtZW50YXRpb25zIG9mIGJhc2ljIGkvbyByb3V0aW5lcy4gIEFzc3VtZXMgdGhhdCBhbGwKKyAgIG9mIHRoZSBoYXJkIHdvcmsgaGFzIGJlZW4gZG9uZSBieSBpb3JlbWFwIGFuZCBpb3BvcnRtYXAsIGFuZCB0aGF0CisgICBhY2Nlc3MgdG8gaS9vIHNwYWNlIGlzIGxpbmVhci4gICovCisKKy8qIFRoaXMgZmlsZSBtYXkgYmUgaW5jbHVkZWQgbXVsdGlwbGUgdGltZXMuICAqLworCisjaWYgSU9fQ09OQ0FUKF9fSU9fUFJFRklYLHRyaXZpYWxfaW9fYncpCitfX0VYVEVSTl9JTkxJTkUgdW5zaWduZWQgaW50CitJT19DT05DQVQoX19JT19QUkVGSVgsaW9yZWFkOCkodm9pZCBfX2lvbWVtICphKQoreworCXJldHVybiBfX2tlcm5lbF9sZGJ1KCoodm9sYXRpbGUgdTggX19mb3JjZSAqKWEpOworfQorCitfX0VYVEVSTl9JTkxJTkUgdW5zaWduZWQgaW50CitJT19DT05DQVQoX19JT19QUkVGSVgsaW9yZWFkMTYpKHZvaWQgX19pb21lbSAqYSkKK3sKKwlyZXR1cm4gX19rZXJuZWxfbGR3dSgqKHZvbGF0aWxlIHUxNiBfX2ZvcmNlICopYSk7Cit9CisKK19fRVhURVJOX0lOTElORSB2b2lkCitJT19DT05DQVQoX19JT19QUkVGSVgsaW93cml0ZTgpKHU4IGIsIHZvaWQgX19pb21lbSAqYSkKK3sKKwlfX2tlcm5lbF9zdGIoYiwgKih2b2xhdGlsZSB1OCBfX2ZvcmNlICopYSk7Cit9CisKK19fRVhURVJOX0lOTElORSB2b2lkCitJT19DT05DQVQoX19JT19QUkVGSVgsaW93cml0ZTE2KSh1MTYgYiwgdm9pZCBfX2lvbWVtICphKQoreworCV9fa2VybmVsX3N0dyhiLCAqKHZvbGF0aWxlIHUxNiBfX2ZvcmNlICopYSk7Cit9CisjZW5kaWYKKworI2lmIElPX0NPTkNBVChfX0lPX1BSRUZJWCx0cml2aWFsX2lvX2xxKQorX19FWFRFUk5fSU5MSU5FIHVuc2lnbmVkIGludAorSU9fQ09OQ0FUKF9fSU9fUFJFRklYLGlvcmVhZDMyKSh2b2lkIF9faW9tZW0gKmEpCit7CisJcmV0dXJuICoodm9sYXRpbGUgdTMyIF9fZm9yY2UgKilhOworfQorCitfX0VYVEVSTl9JTkxJTkUgdm9pZAorSU9fQ09OQ0FUKF9fSU9fUFJFRklYLGlvd3JpdGUzMikodTMyIGIsIHZvaWQgX19pb21lbSAqYSkKK3sKKwkqKHZvbGF0aWxlIHUzMiBfX2ZvcmNlICopYSA9IGI7Cit9CisjZW5kaWYKKworI2lmIElPX0NPTkNBVChfX0lPX1BSRUZJWCx0cml2aWFsX3J3X2J3KSA9PSAxCitfX0VYVEVSTl9JTkxJTkUgdTgKK0lPX0NPTkNBVChfX0lPX1BSRUZJWCxyZWFkYikoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphKQoreworCXJldHVybiBfX2tlcm5lbF9sZGJ1KCooY29uc3Qgdm9sYXRpbGUgdTggX19mb3JjZSAqKWEpOworfQorCitfX0VYVEVSTl9JTkxJTkUgdTE2CitJT19DT05DQVQoX19JT19QUkVGSVgscmVhZHcpKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYSkKK3sKKwlyZXR1cm4gX19rZXJuZWxfbGR3dSgqKGNvbnN0IHZvbGF0aWxlIHUxNiBfX2ZvcmNlICopYSk7Cit9CisKK19fRVhURVJOX0lOTElORSB2b2lkCitJT19DT05DQVQoX19JT19QUkVGSVgsd3JpdGViKSh1OCBiLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmEpCit7CisJX19rZXJuZWxfc3RiKGIsICoodm9sYXRpbGUgdTggX19mb3JjZSAqKWEpOworfQorCitfX0VYVEVSTl9JTkxJTkUgdm9pZAorSU9fQ09OQ0FUKF9fSU9fUFJFRklYLHdyaXRldykodTE2IGIsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYSkKK3sKKwlfX2tlcm5lbF9zdHcoYiwgKih2b2xhdGlsZSB1MTYgX19mb3JjZSAqKWEpOworfQorI2VsaWYgSU9fQ09OQ0FUKF9fSU9fUFJFRklYLHRyaXZpYWxfcndfYncpID09IDIKK19fRVhURVJOX0lOTElORSB1OAorSU9fQ09OQ0FUKF9fSU9fUFJFRklYLHJlYWRiKShjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmEpCit7CisJcmV0dXJuIElPX0NPTkNBVChfX0lPX1BSRUZJWCxpb3JlYWQ4KSgodm9pZCBfX2lvbWVtICopYSk7Cit9CisKK19fRVhURVJOX0lOTElORSB1MTYKK0lPX0NPTkNBVChfX0lPX1BSRUZJWCxyZWFkdykoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphKQoreworCXJldHVybiBJT19DT05DQVQoX19JT19QUkVGSVgsaW9yZWFkMTYpKCh2b2lkIF9faW9tZW0gKilhKTsKK30KKworX19FWFRFUk5fSU5MSU5FIHZvaWQKK0lPX0NPTkNBVChfX0lPX1BSRUZJWCx3cml0ZWIpKHU4IGIsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYSkKK3sKKwlJT19DT05DQVQoX19JT19QUkVGSVgsaW93cml0ZTgpKGIsICh2b2lkIF9faW9tZW0gKilhKTsKK30KKworX19FWFRFUk5fSU5MSU5FIHZvaWQKK0lPX0NPTkNBVChfX0lPX1BSRUZJWCx3cml0ZXcpKHUxNiBiLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmEpCit7CisJSU9fQ09OQ0FUKF9fSU9fUFJFRklYLGlvd3JpdGUxNikoYiwgKHZvaWQgX19pb21lbSAqKWEpOworfQorI2VuZGlmCisKKyNpZiBJT19DT05DQVQoX19JT19QUkVGSVgsdHJpdmlhbF9yd19scSkgPT0gMQorX19FWFRFUk5fSU5MSU5FIHUzMgorSU9fQ09OQ0FUKF9fSU9fUFJFRklYLHJlYWRsKShjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmEpCit7CisJcmV0dXJuICooY29uc3Qgdm9sYXRpbGUgdTMyIF9fZm9yY2UgKilhOworfQorCitfX0VYVEVSTl9JTkxJTkUgdTY0CitJT19DT05DQVQoX19JT19QUkVGSVgscmVhZHEpKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYSkKK3sKKwlyZXR1cm4gKihjb25zdCB2b2xhdGlsZSB1NjQgX19mb3JjZSAqKWE7Cit9CisKK19fRVhURVJOX0lOTElORSB2b2lkCitJT19DT05DQVQoX19JT19QUkVGSVgsd3JpdGVsKSh1MzIgYiwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphKQoreworCSoodm9sYXRpbGUgdTMyIF9fZm9yY2UgKilhID0gYjsKK30KKworX19FWFRFUk5fSU5MSU5FIHZvaWQKK0lPX0NPTkNBVChfX0lPX1BSRUZJWCx3cml0ZXEpKHU2NCBiLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmEpCit7CisJKih2b2xhdGlsZSB1NjQgX19mb3JjZSAqKWEgPSBiOworfQorI2VuZGlmCisKKyNpZiBJT19DT05DQVQoX19JT19QUkVGSVgsdHJpdmlhbF9pb3VubWFwKQorX19FWFRFUk5fSU5MSU5FIHZvaWQgSU9fQ09OQ0FUKF9fSU9fUFJFRklYLGlvdW5tYXApKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYSkKK3sKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvaW9jdGwuaCBiL2luY2x1ZGUvYXNtLWFscGhhL2lvY3RsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM2MzcyNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL2lvY3RsLmgKQEAgLTAsMCArMSw2NiBAQAorI2lmbmRlZiBfQUxQSEFfSU9DVExfSAorI2RlZmluZSBfQUxQSEFfSU9DVExfSAorCisvKgorICogVGhlIG9yaWdpbmFsIGxpbnV4IGlvY3RsIG51bWJlcmluZyBzY2hlbWUgd2FzIGp1c3QgYSBnZW5lcmFsCisgKiAiYW55dGhpbmcgZ29lcyIgc2V0dXAsIHdoZXJlIG1vcmUgb3IgbGVzcyByYW5kb20gbnVtYmVycyB3ZXJlCisgKiBhc3NpZ25lZC4gIFNvcnJ5LCBJIHdhcyBjbHVlbGVzcyB3aGVuIEkgc3RhcnRlZCBvdXQgb24gdGhpcy4KKyAqCisgKiBPbiB0aGUgYWxwaGEsIHdlJ2xsIHRyeSB0byBjbGVhbiBpdCB1cCBhIGJpdCwgdXNpbmcgYSBtb3JlIHNhbmUKKyAqIGlvY3RsIG51bWJlcmluZywgYW5kIGFsc28gdHJ5aW5nIHRvIGJlIGNvbXBhdGlibGUgd2l0aCBPU0YvMSBpbgorICogdGhlIHByb2Nlc3MuIEknZCBsaWtlIHRvIGNsZWFuIGl0IHVwIGZvciB0aGUgaTM4NiBhcyB3ZWxsLCBidXQKKyAqIGl0J3Mgc28gcGFpbmZ1bCByZWNvZ25pemluZyBib3RoIHRoZSBuZXcgYW5kIHRoZSBvbGQgbnVtYmVycy4uCisgKi8KKworI2RlZmluZSBfSU9DX05SQklUUwk4CisjZGVmaW5lIF9JT0NfVFlQRUJJVFMJOAorI2RlZmluZSBfSU9DX1NJWkVCSVRTCTEzCisjZGVmaW5lIF9JT0NfRElSQklUUwkzCisKKyNkZWZpbmUgX0lPQ19OUk1BU0sJKCgxIDw8IF9JT0NfTlJCSVRTKS0xKQorI2RlZmluZSBfSU9DX1RZUEVNQVNLCSgoMSA8PCBfSU9DX1RZUEVCSVRTKS0xKQorI2RlZmluZSBfSU9DX1NJWkVNQVNLCSgoMSA8PCBfSU9DX1NJWkVCSVRTKS0xKQorI2RlZmluZSBfSU9DX0RJUk1BU0sJKCgxIDw8IF9JT0NfRElSQklUUyktMSkKKworI2RlZmluZSBfSU9DX05SU0hJRlQJMAorI2RlZmluZSBfSU9DX1RZUEVTSElGVAkoX0lPQ19OUlNISUZUK19JT0NfTlJCSVRTKQorI2RlZmluZSBfSU9DX1NJWkVTSElGVAkoX0lPQ19UWVBFU0hJRlQrX0lPQ19UWVBFQklUUykKKyNkZWZpbmUgX0lPQ19ESVJTSElGVAkoX0lPQ19TSVpFU0hJRlQrX0lPQ19TSVpFQklUUykKKworLyoKKyAqIERpcmVjdGlvbiBiaXRzIF9JT0NfTk9ORSBjb3VsZCBiZSAwLCBidXQgT1NGLzEgZ2l2ZXMgaXQgYSBiaXQuCisgKiBBbmQgdGhpcyB0dXJucyBvdXQgdXNlZnVsIHRvIGNhdGNoIG9sZCBpb2N0bCBudW1iZXJzIGluIGhlYWRlcgorICogZmlsZXMgZm9yIHVzLgorICovCisjZGVmaW5lIF9JT0NfTk9ORQkxVQorI2RlZmluZSBfSU9DX1JFQUQJMlUKKyNkZWZpbmUgX0lPQ19XUklURQk0VQorCisjZGVmaW5lIF9JT0MoZGlyLHR5cGUsbnIsc2l6ZSkJCQlcCisJKCh1bnNpZ25lZCBpbnQpCQkJCVwKKwkgKCgoZGlyKSAgPDwgX0lPQ19ESVJTSElGVCkgfAkJXAorCSAgKCh0eXBlKSA8PCBfSU9DX1RZUEVTSElGVCkgfAkJXAorCSAgKChucikgICA8PCBfSU9DX05SU0hJRlQpIHwJCVwKKwkgICgoc2l6ZSkgPDwgX0lPQ19TSVpFU0hJRlQpKSkKKworLyogdXNlZCB0byBjcmVhdGUgbnVtYmVycyAqLworI2RlZmluZSBfSU8odHlwZSxucikJCV9JT0MoX0lPQ19OT05FLCh0eXBlKSwobnIpLDApCisjZGVmaW5lIF9JT1IodHlwZSxucixzaXplKQlfSU9DKF9JT0NfUkVBRCwodHlwZSksKG5yKSxzaXplb2Yoc2l6ZSkpCisjZGVmaW5lIF9JT1codHlwZSxucixzaXplKQlfSU9DKF9JT0NfV1JJVEUsKHR5cGUpLChuciksc2l6ZW9mKHNpemUpKQorI2RlZmluZSBfSU9XUih0eXBlLG5yLHNpemUpCV9JT0MoX0lPQ19SRUFEfF9JT0NfV1JJVEUsKHR5cGUpLChuciksc2l6ZW9mKHNpemUpKQorCisvKiB1c2VkIHRvIGRlY29kZSB0aGVtLi4gKi8KKyNkZWZpbmUgX0lPQ19ESVIobnIpCQkoKChucikgPj4gX0lPQ19ESVJTSElGVCkgJiBfSU9DX0RJUk1BU0spCisjZGVmaW5lIF9JT0NfVFlQRShucikJCSgoKG5yKSA+PiBfSU9DX1RZUEVTSElGVCkgJiBfSU9DX1RZUEVNQVNLKQorI2RlZmluZSBfSU9DX05SKG5yKQkJKCgobnIpID4+IF9JT0NfTlJTSElGVCkgJiBfSU9DX05STUFTSykKKyNkZWZpbmUgX0lPQ19TSVpFKG5yKQkJKCgobnIpID4+IF9JT0NfU0laRVNISUZUKSAmIF9JT0NfU0laRU1BU0spCisKKy8qIC4uLmFuZCBmb3IgdGhlIGRyaXZlcnMvc291bmQgZmlsZXMuLi4gKi8KKworI2RlZmluZSBJT0NfSU4JCShfSU9DX1dSSVRFIDw8IF9JT0NfRElSU0hJRlQpCisjZGVmaW5lIElPQ19PVVQJCShfSU9DX1JFQUQgPDwgX0lPQ19ESVJTSElGVCkKKyNkZWZpbmUgSU9DX0lOT1VUCSgoX0lPQ19XUklURXxfSU9DX1JFQUQpIDw8IF9JT0NfRElSU0hJRlQpCisjZGVmaW5lIElPQ1NJWkVfTUFTSwkoX0lPQ19TSVpFTUFTSyA8PCBfSU9DX1NJWkVTSElGVCkKKyNkZWZpbmUgSU9DU0laRV9TSElGVAkoX0lPQ19TSVpFU0hJRlQpCisKKyNlbmRpZiAvKiBfQUxQSEFfSU9DVExfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvaW9jdGxzLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9pb2N0bHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2JiOWY2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvaW9jdGxzLmgKQEAgLTAsMCArMSwxMTIgQEAKKyNpZm5kZWYgX0FTTV9BTFBIQV9JT0NUTFNfSAorI2RlZmluZSBfQVNNX0FMUEhBX0lPQ1RMU19ICisKKyNpbmNsdWRlIDxhc20vaW9jdGwuaD4KKworI2RlZmluZSBGSU9DTEVYCQlfSU8oJ2YnLCAxKQorI2RlZmluZSBGSU9OQ0xFWAlfSU8oJ2YnLCAyKQorI2RlZmluZSBGSU9BU1lOQwlfSU9XKCdmJywgMTI1LCBpbnQpCisjZGVmaW5lIEZJT05CSU8JCV9JT1coJ2YnLCAxMjYsIGludCkKKyNkZWZpbmUgRklPTlJFQUQJX0lPUignZicsIDEyNywgaW50KQorI2RlZmluZSBUSU9DSU5RCQlGSU9OUkVBRAorI2RlZmluZSBGSU9RU0laRQlfSU9SKCdmJywgMTI4LCBsb2ZmX3QpCisKKyNkZWZpbmUgVElPQ0dFVFAJX0lPUigndCcsIDgsIHN0cnVjdCBzZ3R0eWIpCisjZGVmaW5lIFRJT0NTRVRQCV9JT1coJ3QnLCA5LCBzdHJ1Y3Qgc2d0dHliKQorI2RlZmluZSBUSU9DU0VUTglfSU9XKCd0JywgMTAsIHN0cnVjdCBzZ3R0eWIpCS8qIFRJT0NTRVRQIHdvIGZsdXNoICovCisKKyNkZWZpbmUgVElPQ1NFVEMJX0lPVygndCcsIDE3LCBzdHJ1Y3QgdGNoYXJzKQorI2RlZmluZSBUSU9DR0VUQwlfSU9SKCd0JywgMTgsIHN0cnVjdCB0Y2hhcnMpCisjZGVmaW5lIFRDR0VUUwkJX0lPUigndCcsIDE5LCBzdHJ1Y3QgdGVybWlvcykKKyNkZWZpbmUgVENTRVRTCQlfSU9XKCd0JywgMjAsIHN0cnVjdCB0ZXJtaW9zKQorI2RlZmluZSBUQ1NFVFNXCQlfSU9XKCd0JywgMjEsIHN0cnVjdCB0ZXJtaW9zKQorI2RlZmluZSBUQ1NFVFNGCQlfSU9XKCd0JywgMjIsIHN0cnVjdCB0ZXJtaW9zKQorCisjZGVmaW5lIFRDR0VUQQkJX0lPUigndCcsIDIzLCBzdHJ1Y3QgdGVybWlvKQorI2RlZmluZSBUQ1NFVEEJCV9JT1coJ3QnLCAyNCwgc3RydWN0IHRlcm1pbykKKyNkZWZpbmUgVENTRVRBVwkJX0lPVygndCcsIDI1LCBzdHJ1Y3QgdGVybWlvKQorI2RlZmluZSBUQ1NFVEFGCQlfSU9XKCd0JywgMjgsIHN0cnVjdCB0ZXJtaW8pCisKKyNkZWZpbmUgVENTQlJLCQlfSU8oJ3QnLCAyOSkKKyNkZWZpbmUgVENYT05DCQlfSU8oJ3QnLCAzMCkKKyNkZWZpbmUgVENGTFNICQlfSU8oJ3QnLCAzMSkKKworI2RlZmluZSBUSU9DU1dJTlNaCV9JT1coJ3QnLCAxMDMsIHN0cnVjdCB3aW5zaXplKQorI2RlZmluZSBUSU9DR1dJTlNaCV9JT1IoJ3QnLCAxMDQsIHN0cnVjdCB3aW5zaXplKQorI2RlZmluZQlUSU9DU1RBUlQJX0lPKCd0JywgMTEwKQkJLyogc3RhcnQgb3V0cHV0LCBsaWtlIF5RICovCisjZGVmaW5lCVRJT0NTVE9QCV9JTygndCcsIDExMSkJCS8qIHN0b3Agb3V0cHV0LCBsaWtlIF5TICovCisjZGVmaW5lIFRJT0NPVVRRICAgICAgICBfSU9SKCd0JywgMTE1LCBpbnQpICAgICAvKiBvdXRwdXQgcXVldWUgc2l6ZSAqLworCisjZGVmaW5lIFRJT0NHTFRDCV9JT1IoJ3QnLCAxMTYsIHN0cnVjdCBsdGNoYXJzKQorI2RlZmluZSBUSU9DU0xUQwlfSU9XKCd0JywgMTE3LCBzdHJ1Y3QgbHRjaGFycykKKyNkZWZpbmUgVElPQ1NQR1JQCV9JT1coJ3QnLCAxMTgsIGludCkKKyNkZWZpbmUgVElPQ0dQR1JQCV9JT1IoJ3QnLCAxMTksIGludCkKKworI2RlZmluZSBUSU9DRVhDTAkweDU0MEMKKyNkZWZpbmUgVElPQ05YQ0wJMHg1NDBECisjZGVmaW5lIFRJT0NTQ1RUWQkweDU0MEUKKworI2RlZmluZSBUSU9DU1RJCQkweDU0MTIKKyNkZWZpbmUgVElPQ01HRVQJMHg1NDE1CisjZGVmaW5lIFRJT0NNQklTCTB4NTQxNgorI2RlZmluZSBUSU9DTUJJQwkweDU0MTcKKyNkZWZpbmUgVElPQ01TRVQJMHg1NDE4CisjIGRlZmluZSBUSU9DTV9MRQkweDAwMQorIyBkZWZpbmUgVElPQ01fRFRSCTB4MDAyCisjIGRlZmluZSBUSU9DTV9SVFMJMHgwMDQKKyMgZGVmaW5lIFRJT0NNX1NUCTB4MDA4CisjIGRlZmluZSBUSU9DTV9TUgkweDAxMAorIyBkZWZpbmUgVElPQ01fQ1RTCTB4MDIwCisjIGRlZmluZSBUSU9DTV9DQVIJMHgwNDAKKyMgZGVmaW5lIFRJT0NNX1JORwkweDA4MAorIyBkZWZpbmUgVElPQ01fRFNSCTB4MTAwCisjIGRlZmluZSBUSU9DTV9DRAlUSU9DTV9DQVIKKyMgZGVmaW5lIFRJT0NNX1JJCVRJT0NNX1JORworIyBkZWZpbmUgVElPQ01fT1VUMQkweDIwMDAKKyMgZGVmaW5lIFRJT0NNX09VVDIJMHg0MDAwCisjIGRlZmluZSBUSU9DTV9MT09QCTB4ODAwMAorCisjZGVmaW5lIFRJT0NHU09GVENBUgkweDU0MTkKKyNkZWZpbmUgVElPQ1NTT0ZUQ0FSCTB4NTQxQQorI2RlZmluZSBUSU9DTElOVVgJMHg1NDFDCisjZGVmaW5lIFRJT0NDT05TCTB4NTQxRAorI2RlZmluZSBUSU9DR1NFUklBTAkweDU0MUUKKyNkZWZpbmUgVElPQ1NTRVJJQUwJMHg1NDFGCisjZGVmaW5lIFRJT0NQS1QJCTB4NTQyMAorIyBkZWZpbmUgVElPQ1BLVF9EQVRBCQkgMAorIyBkZWZpbmUgVElPQ1BLVF9GTFVTSFJFQUQJIDEKKyMgZGVmaW5lIFRJT0NQS1RfRkxVU0hXUklURQkgMgorIyBkZWZpbmUgVElPQ1BLVF9TVE9QCQkgNAorIyBkZWZpbmUgVElPQ1BLVF9TVEFSVAkJIDgKKyMgZGVmaW5lIFRJT0NQS1RfTk9TVE9QCQkxNgorIyBkZWZpbmUgVElPQ1BLVF9ET1NUT1AJCTMyCisKKworI2RlZmluZSBUSU9DTk9UVFkJMHg1NDIyCisjZGVmaW5lIFRJT0NTRVRECTB4NTQyMworI2RlZmluZSBUSU9DR0VURAkweDU0MjQKKyNkZWZpbmUgVENTQlJLUAkJMHg1NDI1CS8qIE5lZWRlZCBmb3IgUE9TSVggdGNzZW5kYnJlYWsoKSAqLworI2RlZmluZSBUSU9DU0JSSwkweDU0MjcgIC8qIEJTRCBjb21wYXRpYmlsaXR5ICovCisjZGVmaW5lIFRJT0NDQlJLCTB4NTQyOCAgLyogQlNEIGNvbXBhdGliaWxpdHkgKi8KKyNkZWZpbmUgVElPQ0dTSUQJMHg1NDI5ICAvKiBSZXR1cm4gdGhlIHNlc3Npb24gSUQgb2YgRkQgKi8KKyNkZWZpbmUgVElPQ0dQVE4JX0lPUignVCcsMHgzMCwgdW5zaWduZWQgaW50KSAvKiBHZXQgUHR5IE51bWJlciAob2YgcHR5LW11eCBkZXZpY2UpICovCisjZGVmaW5lIFRJT0NTUFRMQ0sJX0lPVygnVCcsMHgzMSwgaW50KSAgLyogTG9jay91bmxvY2sgUHR5ICovCisKKyNkZWZpbmUgVElPQ1NFUkNPTkZJRwkweDU0NTMKKyNkZWZpbmUgVElPQ1NFUkdXSUxECTB4NTQ1NAorI2RlZmluZSBUSU9DU0VSU1dJTEQJMHg1NDU1CisjZGVmaW5lIFRJT0NHTENLVFJNSU9TCTB4NTQ1NgorI2RlZmluZSBUSU9DU0xDS1RSTUlPUwkweDU0NTcKKyNkZWZpbmUgVElPQ1NFUkdTVFJVQ1QJMHg1NDU4IC8qIEZvciBkZWJ1Z2dpbmcgb25seSAqLworI2RlZmluZSBUSU9DU0VSR0VUTFNSICAgMHg1NDU5IC8qIEdldCBsaW5lIHN0YXR1cyByZWdpc3RlciAqLworICAvKiBpb2N0bCAoZmQsIFRJT0NTRVJHRVRMU1IsICZyZXN1bHQpIHdoZXJlIHJlc3VsdCBtYXkgYmUgYXMgYmVsb3cgKi8KKyMgZGVmaW5lIFRJT0NTRVJfVEVNVCAgICAweDAxCS8qIFRyYW5zbWl0dGVyIHBoeXNpY2FsbHkgZW1wdHkgKi8KKyNkZWZpbmUgVElPQ1NFUkdFVE1VTFRJIDB4NTQ1QSAvKiBHZXQgbXVsdGlwb3J0IGNvbmZpZyAgKi8KKyNkZWZpbmUgVElPQ1NFUlNFVE1VTFRJIDB4NTQ1QiAvKiBTZXQgbXVsdGlwb3J0IGNvbmZpZyAqLworCisjZGVmaW5lIFRJT0NNSVdBSVQJMHg1NDVDCS8qIHdhaXQgZm9yIGEgY2hhbmdlIG9uIHNlcmlhbCBpbnB1dCBsaW5lKHMpICovCisjZGVmaW5lIFRJT0NHSUNPVU5UCTB4NTQ1RAkvKiByZWFkIHNlcmlhbCBwb3J0IGlubGluZSBpbnRlcnJ1cHQgY291bnRzICovCisjZGVmaW5lIFRJT0NHSEFZRVNFU1AJMHg1NDVFICAvKiBHZXQgSGF5ZXMgRVNQIGNvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgVElPQ1NIQVlFU0VTUAkweDU0NUYgIC8qIFNldCBIYXllcyBFU1AgY29uZmlndXJhdGlvbiAqLworCisjZW5kaWYgLyogX0FTTV9BTFBIQV9JT0NUTFNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvaXBjYnVmLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9pcGNidWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWMwZTFhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvaXBjYnVmLmgKQEAgLTAsMCArMSwyOCBAQAorI2lmbmRlZiBfQUxQSEFfSVBDQlVGX0gKKyNkZWZpbmUgX0FMUEhBX0lQQ0JVRl9ICisKKy8qIAorICogVGhlIGlwYzY0X3Blcm0gc3RydWN0dXJlIGZvciBhbHBoYSBhcmNoaXRlY3R1cmUuCisgKiBOb3RlIGV4dHJhIHBhZGRpbmcgYmVjYXVzZSB0aGlzIHN0cnVjdHVyZSBpcyBwYXNzZWQgYmFjayBhbmQgZm9ydGgKKyAqIGJldHdlZW4ga2VybmVsIGFuZCB1c2VyIHNwYWNlLgorICoKKyAqIFBhZCBzcGFjZSBpcyBsZWZ0IGZvcjoKKyAqIC0gMzItYml0IHNlcQorICogLSAyIG1pc2NlbGxhbmVvdXMgNjQtYml0IHZhbHVlcworICovCisKK3N0cnVjdCBpcGM2NF9wZXJtCit7CisJX19rZXJuZWxfa2V5X3QJa2V5OworCV9fa2VybmVsX3VpZF90CXVpZDsKKwlfX2tlcm5lbF9naWRfdAlnaWQ7CisJX19rZXJuZWxfdWlkX3QJY3VpZDsKKwlfX2tlcm5lbF9naWRfdAljZ2lkOworCV9fa2VybmVsX21vZGVfdAltb2RlOyAKKwl1bnNpZ25lZCBzaG9ydAlzZXE7CisJdW5zaWduZWQgc2hvcnQJX19wYWQxOworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQxOworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQyOworfTsKKworI2VuZGlmIC8qIF9BTFBIQV9JUENCVUZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvaXJxLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9pcnEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjZkYjcyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvaXJxLmgKQEAgLTAsMCArMSwxMDAgQEAKKyNpZm5kZWYgX0FMUEhBX0lSUV9ICisjZGVmaW5lIF9BTFBIQV9JUlFfSAorCisvKgorICoJbGludXgvaW5jbHVkZS9hbHBoYS9pcnEuaAorICoKKyAqCShDKSAxOTk0IExpbnVzIFRvcnZhbGRzCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2lmICAgZGVmaW5lZChDT05GSUdfQUxQSEFfR0VORVJJQykKKworLyogSGVyZSBOUl9JUlFTIGlzIG5vdCBleGFjdCwgYnV0IHJhdGhlciBhbiB1cHBlciBib3VuZC4gIFRoaXMgaXMgdXNlZAorICAgbWFueSBwbGFjZXMgdGhyb3VnaG91dCB0aGUga2VybmVsIHRvIHNpemUgc3RhdGljIGFycmF5cy4gIFRoYXQncyBvaywKKyAgIHdlJ2xsIHVzZSBhbHBoYV9tdi5ucl9pcnFzIHdoZW4gd2Ugd2FudCB0aGUgcmVhbCB0aGluZy4gICovCisKKy8qIFdoZW4gTEVHQUNZX1NUQVJUX0FERFJFU1MgaXMgc2VsZWN0ZWQsIHdlIGxlYXZlIG91dDoKKyAgICAgVElUQU4KKyAgICAgV0lMREZJUkUKKyAgICAgTUFSVkVMCisKKyAgIFRoaXMgaGVscHMga2VlcCB0aGUga2VybmVsIG9iamVjdCBzaXplIHJlYXNvbmFibGUgZm9yIHRoZSBtYWpvcml0eQorICAgb2YgbWFjaGluZXMuCisqLworCisjIGlmIGRlZmluZWQoQ09ORklHX0FMUEhBX0xFR0FDWV9TVEFSVF9BRERSRVNTKQorIyAgZGVmaW5lIE5SX0lSUVMgICAgICAoMTI4KSAgICAgICAgICAgLyogbWF4IGlzIFJBV0hJREUvVEFLQVJBICovCisjIGVsc2UKKyMgIGRlZmluZSBOUl9JUlFTICAgICAgKDMyNzY4ICsgMTYpICAgIC8qIG1hcnZlbCAtIDMyIHBpZHMgKi8KKyMgZW5kaWYKKworI2VsaWYgZGVmaW5lZChDT05GSUdfQUxQSEFfQ0FCUklPTEVUKSB8fCBcCisgICAgICBkZWZpbmVkKENPTkZJR19BTFBIQV9FQjY2UCkgICAgIHx8IFwKKyAgICAgIGRlZmluZWQoQ09ORklHX0FMUEhBX0VCMTY0KSAgICAgfHwgXAorICAgICAgZGVmaW5lZChDT05GSUdfQUxQSEFfUEMxNjQpICAgICB8fCBcCisgICAgICBkZWZpbmVkKENPTkZJR19BTFBIQV9MWDE2NCkKKyMgZGVmaW5lIE5SX0lSUVMJMzUKKworI2VsaWYgZGVmaW5lZChDT05GSUdfQUxQSEFfRUI2NikgICAgICB8fCBcCisgICAgICBkZWZpbmVkKENPTkZJR19BTFBIQV9FQjY0UCkgICAgIHx8IFwKKyAgICAgIGRlZmluZWQoQ09ORklHX0FMUEhBX01JS0FTQSkKKyMgZGVmaW5lIE5SX0lSUVMJMzIKKworI2VsaWYgZGVmaW5lZChDT05GSUdfQUxQSEFfQUxDT1IpICAgICB8fCBcCisgICAgICBkZWZpbmVkKENPTkZJR19BTFBIQV9NSUFUQSkgICAgIHx8IFwKKyAgICAgIGRlZmluZWQoQ09ORklHX0FMUEhBX1JVRkZJQU4pICAgfHwgXAorICAgICAgZGVmaW5lZChDT05GSUdfQUxQSEFfUlgxNjQpICAgICB8fCBcCisgICAgICBkZWZpbmVkKENPTkZJR19BTFBIQV9OT1JJVEFLRSkKKyMgZGVmaW5lIE5SX0lSUVMJNDgKKworI2VsaWYgZGVmaW5lZChDT05GSUdfQUxQSEFfU0FCTEUpICAgICB8fCBcCisgICAgICBkZWZpbmVkKENPTkZJR19BTFBIQV9TWDE2NCkKKyMgZGVmaW5lIE5SX0lSUVMJNDAKKworI2VsaWYgZGVmaW5lZChDT05GSUdfQUxQSEFfRFAyNjQpIHx8IFwKKyAgICAgIGRlZmluZWQoQ09ORklHX0FMUEhBX0xZTlgpICB8fCBcCisgICAgICBkZWZpbmVkKENPTkZJR19BTFBIQV9TSEFSSykgfHwgXAorICAgICAgZGVmaW5lZChDT05GSUdfQUxQSEFfRUlHRVIpCisjIGRlZmluZSBOUl9JUlFTCTY0CisKKyNlbGlmIGRlZmluZWQoQ09ORklHX0FMUEhBX1RJVEFOKQorI2RlZmluZSBOUl9JUlFTCQk4MAorCisjZWxpZiBkZWZpbmVkKENPTkZJR19BTFBIQV9SQVdISURFKSB8fCBcCisJZGVmaW5lZChDT05GSUdfQUxQSEFfVEFLQVJBKQorIyBkZWZpbmUgTlJfSVJRUwkxMjgKKworI2VsaWYgZGVmaW5lZChDT05GSUdfQUxQSEFfV0lMREZJUkUpCisjIGRlZmluZSBOUl9JUlFTCTIwNDggLyogZW51ZmYgZm9yIDggUUJCcyAqLworCisjZWxpZiBkZWZpbmVkKENPTkZJR19BTFBIQV9NQVJWRUwpCisjIGRlZmluZSBOUl9JUlFTCSgzMjc2OCArIDE2KSAJLyogbWFydmVsIC0gMzIgcGlkcyovCisKKyNlbHNlIC8qIGV2ZXJ5b25lIGVsc2UgKi8KKyMgZGVmaW5lIE5SX0lSUVMJMTYKKyNlbmRpZgorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgaXJxX2Nhbm9uaWNhbGl6ZShpbnQgaXJxKQoreworCS8qCisJICogWFhYIGlzIHRoaXMgdHJ1ZSBmb3IgYWxsIEFscGhhJ3M/ICBUaGUgb2xkIHNlcmlhbCBkcml2ZXIKKwkgKiBkaWQgaXQgdGhpcyB3YXkgZm9yIHllYXJzIHdpdGhvdXQgYW55IGNvbXBsYWludHMsIHNvLi4uLgorCSAqLworCXJldHVybiAoKGlycSA9PSAyKSA/IDkgOiBpcnEpOworfQorCitleHRlcm4gdm9pZCBkaXNhYmxlX2lycSh1bnNpZ25lZCBpbnQpOworZXh0ZXJuIHZvaWQgZGlzYWJsZV9pcnFfbm9zeW5jKHVuc2lnbmVkIGludCk7CitleHRlcm4gdm9pZCBlbmFibGVfaXJxKHVuc2lnbmVkIGludCk7CisKK3N0cnVjdCBwdF9yZWdzOworZXh0ZXJuIHZvaWQgKCpwZXJmX2lycSkodW5zaWduZWQgbG9uZywgc3RydWN0IHB0X3JlZ3MgKik7CisKK3N0cnVjdCBpcnFhY3Rpb247CitpbnQgaGFuZGxlX0lSUV9ldmVudCh1bnNpZ25lZCBpbnQsIHN0cnVjdCBwdF9yZWdzICosIHN0cnVjdCBpcnFhY3Rpb24gKik7CisKKworI2VuZGlmIC8qIF9BTFBIQV9JUlFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvamVuc2VuLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9qZW5zZW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjRiMDZlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvamVuc2VuLmgKQEAgLTAsMCArMSwzNDYgQEAKKyNpZm5kZWYgX19BTFBIQV9KRU5TRU5fSAorI2RlZmluZSBfX0FMUEhBX0pFTlNFTl9ICisKKyNpbmNsdWRlIDxhc20vY29tcGlsZXIuaD4KKworLyoKKyAqIERlZmluZXMgZm9yIHRoZSBBbHBoYVBDIEVJU0EgSU8gYW5kIG1lbW9yeSBhZGRyZXNzIHNwYWNlLgorICovCisKKy8qCisgKiBOT1RFISBUaGUgbWVtb3J5IG9wZXJhdGlvbnMgZG8gbm90IHNldCBhbnkgbWVtb3J5IGJhcnJpZXJzLCBhcyBpdCdzCisgKiBub3QgbmVlZGVkIGZvciBjYXNlcyBsaWtlIGEgZnJhbWUgYnVmZmVyIHRoYXQgaXMgZXNzZW50aWFsbHkgbWVtb3J5LWxpa2UuCisgKiBZb3UgbmVlZCB0byBkbyB0aGVtIGJ5IGhhbmQgaWYgdGhlIG9wZXJhdGlvbnMgZGVwZW5kIG9uIG9yZGVyaW5nLgorICoKKyAqIFNpbWlsYXJseSwgdGhlIHBvcnQgSU8gb3BlcmF0aW9ucyBkbyBhICJtYiIgb25seSBhZnRlciBhIHdyaXRlIG9wZXJhdGlvbjoKKyAqIGlmIGFuIG1iIGlzIG5lZWRlZCBiZWZvcmUgKGFzIGluIHRoZSBjYXNlIG9mIGRvaW5nIG1lbW9yeSBtYXBwZWQgSU8KKyAqIGZpcnN0LCBhbmQgdGhlbiBhIHBvcnQgSU8gb3BlcmF0aW9uIHRvIHRoZSBzYW1lIGRldmljZSksIGl0IG5lZWRzIHRvIGJlCisgKiBkb25lIGJ5IGhhbmQuCisgKgorICogQWZ0ZXIgdGhlIGFib3ZlIGhhcyBiaXR0ZW4gbWUgMTAwIHRpbWVzLCBJJ2xsIGdpdmUgdXAgYW5kIGp1c3QgZG8gdGhlCisgKiBtYiBhbGwgdGhlIHRpbWUsIGJ1dCByaWdodCBub3cgSSdtIGhvcGluZyB0aGlzIHdpbGwgd29yayBvdXQuICBBdm9pZGluZworICogbWIncyBtYXkgcG90ZW50aWFsbHkgYmUgYSBub3RpY2VhYmxlIHNwZWVkIGltcHJvdmVtZW50LCBidXQgSSBjYW4ndAorICogaG9uZXN0bHkgc2F5IEkndmUgdGVzdGVkIGl0LgorICoKKyAqIEhhbmRsaW5nIGludGVycnVwdHMgdGhhdCBuZWVkIHRvIGRvIG1iJ3MgdG8gc3luY2hyb25pemUgdG8gbm9uLWludGVycnVwdHMKKyAqIGlzIGFub3RoZXIgZnVuIHJhY2UgYXJlYS4gIERvbid0IGRvIGl0IChiZWNhdXNlIGlmIHlvdSBkbywgSSdsbCBoYXZlIHRvCisgKiBkbyAqZXZlcnl0aGluZyogd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLCB1Z2gpLgorICovCisKKy8qCisgKiBFSVNBIEludGVycnVwdCBBY2tub3dsZWRnZSBhZGRyZXNzCisgKi8KKyNkZWZpbmUgRUlTQV9JTlRBCQkoSURFTlRfQUREUiArIDB4MTAwMDAwMDAwVUwpCisKKy8qCisgKiBGRVBST00gYWRkcmVzc2VzCisgKi8KKyNkZWZpbmUgRUlTQV9GRVBST00wCQkoSURFTlRfQUREUiArIDB4MTgwMDAwMDAwVUwpCisjZGVmaW5lIEVJU0FfRkVQUk9NMQkJKElERU5UX0FERFIgKyAweDFBMDAwMDAwMFVMKQorCisvKgorICogVkw4MkMxMDYgYmFzZSBhZGRyZXNzCisgKi8KKyNkZWZpbmUgRUlTQV9WTDgyQzEwNgkJKElERU5UX0FERFIgKyAweDFDMDAwMDAwMFVMKQorCisvKgorICogRUlTQSAiSG9zdCBBZGRyZXNzIEV4dGVuc2lvbiIgYWRkcmVzcyAoYml0cyAyNS0zMSBvZiB0aGUgRUlTQSBhZGRyZXNzKQorICovCisjZGVmaW5lIEVJU0FfSEFFCQkoSURFTlRfQUREUiArIDB4MUQwMDAwMDAwVUwpCisKKy8qCisgKiAiU1lTQ1RMIiByZWdpc3RlciBhZGRyZXNzCisgKi8KKyNkZWZpbmUgRUlTQV9TWVNDVEwJCShJREVOVF9BRERSICsgMHgxRTAwMDAwMDBVTCkKKworLyoKKyAqICJzcGFyZSIgcmVnaXN0ZXIgYWRkcmVzcworICovCisjZGVmaW5lIEVJU0FfU1BBUkUJCShJREVOVF9BRERSICsgMHgxRjAwMDAwMDBVTCkKKworLyoKKyAqIEVJU0EgbWVtb3J5IGFkZHJlc3Mgb2Zmc2V0CisgKi8KKyNkZWZpbmUgRUlTQV9NRU0JCShJREVOVF9BRERSICsgMHgyMDAwMDAwMDBVTCkKKworLyoKKyAqIEVJU0EgSU8gYWRkcmVzcyBvZmZzZXQKKyAqLworI2RlZmluZSBFSVNBX0lPCQkJKElERU5UX0FERFIgKyAweDMwMDAwMDAwMFVMKQorCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpZm5kZWYgX19FWFRFUk5fSU5MSU5FCisjZGVmaW5lIF9fRVhURVJOX0lOTElORSBleHRlcm4gaW5saW5lCisjZGVmaW5lIF9fSU9fRVhURVJOX0lOTElORQorI2VuZGlmCisKKy8qCisgKiBIYW5kbGUgdGhlICJob3N0IGFkZHJlc3MgcmVnaXN0ZXIiLiBUaGlzIG5lZWRzIHRvIGJlIHNldAorICogdG8gdGhlIGhpZ2ggNyBiaXRzIG9mIHRoZSBFSVNBIGFkZHJlc3MuICBUaGlzIGlzIGFsc28gbmVlZGVkCisgKiBmb3IgRUlTQSBJTyBhZGRyZXNzZXMsIHdoaWNoIGFyZSBvbmx5IDE2IGJpdHMgd2lkZSAodGhlCisgKiBoYWUgbmVlZHMgdG8gYmUgc2V0IHRvIDApLgorICoKKyAqIEhBRSBpc24ndCBuZWVkZWQgZm9yIHRoZSBsb2NhbCBJTyBvcGVyYXRpb25zLCB0aG91Z2guCisgKi8KKworI2RlZmluZSBKRU5TRU5fSEFFX0FERFJFU1MJRUlTQV9IQUUKKyNkZWZpbmUgSkVOU0VOX0hBRV9NQVNLCQkweDFmZmZmZmYKKworX19FWFRFUk5fSU5MSU5FIHZvaWQgamVuc2VuX3NldF9oYWUodW5zaWduZWQgbG9uZyBhZGRyKQoreworCS8qIGhhZSBvbiB0aGUgSmVuc2VuIGlzIGJpdHMgMzE6MjUgc2hpZnRlZCByaWdodCAqLworCWFkZHIgPj49IDI1OworCWlmIChhZGRyICE9IGFscGhhX212LmhhZV9jYWNoZSkKKwkJc2V0X2hhZShhZGRyKTsKK30KKworI2RlZmluZSB2dWlwCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqCisKKy8qCisgKiBJTyBmdW5jdGlvbnMKKyAqCisgKiBUaGUgImxvY2FsIiBmdW5jdGlvbnMgYXJlIHRob3NlIHRoYXQgZG9uJ3QgZ28gb3V0IHRvIHRoZSBFSVNBIGJ1cywKKyAqIGJ1dCBpbnN0ZWFkIGFjdCBvbiB0aGUgVkw4MkMxMDYgY2hpcCBkaXJlY3RseS4uIFRoaXMgaXMgbWFpbmx5IHRoZQorICoga2V5Ym9hcmQsIFJUQywgIHByaW50ZXIgYW5kIGZpcnN0IHR3byBzZXJpYWwgbGluZXMuLgorICoKKyAqIFRoZSBsb2NhbCBzdHVmZiBtYWtlcyBmb3Igc29tZSBjb21wbGljYXRpb25zLCBidXQgaXQgc2VlbXMgdG8gYmUKKyAqIGdvbmUgaW4gdGhlIFBDSSB2ZXJzaW9uLiBJIGhvcGUgSSBjYW4gZ2V0IERFQyBzdWNrZXJlZF5IXkheSF5IXkheSF5IXkgKKyAqIGNvbnZpbmNlZCB0aGF0IEkgbmVlZCBvbmUgb2YgdGhlIG5ld2VyIG1hY2hpbmVzLgorICovCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGplbnNlbl9sb2NhbF9pbmIodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXJldHVybiAweGZmICYgKih2dWlwKSgoYWRkciA8PCA5KSArIEVJU0FfVkw4MkMxMDYpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgamVuc2VuX2xvY2FsX291dGIodTggYiwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCSoodnVpcCkoKGFkZHIgPDwgOSkgKyBFSVNBX1ZMODJDMTA2KSA9IGI7CisJbWIoKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgamVuc2VuX2J1c19pbmIodW5zaWduZWQgbG9uZyBhZGRyKQoreworCWxvbmcgcmVzdWx0OworCisJamVuc2VuX3NldF9oYWUoMCk7CisJcmVzdWx0ID0gKih2b2xhdGlsZSBpbnQgKikoKGFkZHIgPDwgNykgKyBFSVNBX0lPICsgMHgwMCk7CisJcmV0dXJuIF9fa2VybmVsX2V4dGJsKHJlc3VsdCwgYWRkciAmIDMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgamVuc2VuX2J1c19vdXRiKHU4IGIsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlqZW5zZW5fc2V0X2hhZSgwKTsKKwkqKHZ1aXApKChhZGRyIDw8IDcpICsgRUlTQV9JTyArIDB4MDApID0gYiAqIDB4MDEwMTAxMDE7CisJbWIoKTsKK30KKworLyoKKyAqIEl0IHNlZW1zIGdjYyBpcyBub3QgdmVyeSBnb29kIGF0IG9wdGltaXppbmcgYXdheSBsb2dpY2FsCisgKiBvcGVyYXRpb25zIHRoYXQgcmVzdWx0IGluIG9wZXJhdGlvbnMgYWNyb3NzIGlubGluZSBmdW5jdGlvbnMuCisgKiBXaGljaCBpcyB3aHkgdGhpcyBpcyBhIG1hY3JvLgorICovCisKKyNkZWZpbmUgamVuc2VuX2lzX2xvY2FsKGFkZHIpICggXAorLyoga2V5Ym9hcmQgKi8JKGFkZHIgPT0gMHg2MCB8fCBhZGRyID09IDB4NjQpIHx8IFwKKy8qIFJUQyAqLwkoYWRkciA9PSAweDE3MCB8fCBhZGRyID09IDB4MTcxKSB8fCBcCisvKiBtYiBDT00yICovCShhZGRyID49IDB4MmY4ICYmIGFkZHIgPD0gMHgyZmYpIHx8IFwKKy8qIG1iIExQVDEgKi8JKGFkZHIgPj0gMHgzYmMgJiYgYWRkciA8PSAweDNiZSkgfHwgXAorLyogbWIgQ09NMiAqLwkoYWRkciA+PSAweDNmOCAmJiBhZGRyIDw9IDB4M2ZmKSkKKworX19FWFRFUk5fSU5MSU5FIHU4IGplbnNlbl9pbmIodW5zaWduZWQgbG9uZyBhZGRyKQoreworCWlmIChqZW5zZW5faXNfbG9jYWwoYWRkcikpCisJCXJldHVybiBqZW5zZW5fbG9jYWxfaW5iKGFkZHIpOworCWVsc2UKKwkJcmV0dXJuIGplbnNlbl9idXNfaW5iKGFkZHIpOworfQorCitfX0VYVEVSTl9JTkxJTkUgdm9pZCBqZW5zZW5fb3V0Yih1OCBiLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJaWYgKGplbnNlbl9pc19sb2NhbChhZGRyKSkKKwkJamVuc2VuX2xvY2FsX291dGIoYiwgYWRkcik7CisJZWxzZQorCQlqZW5zZW5fYnVzX291dGIoYiwgYWRkcik7Cit9CisKK19fRVhURVJOX0lOTElORSB1MTYgamVuc2VuX2ludyh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJbG9uZyByZXN1bHQ7CisKKwlqZW5zZW5fc2V0X2hhZSgwKTsKKwlyZXN1bHQgPSAqKHZvbGF0aWxlIGludCAqKSAoKGFkZHIgPDwgNykgKyBFSVNBX0lPICsgMHgyMCk7CisJcmVzdWx0ID4+PSAoYWRkciAmIDMpICogODsKKwlyZXR1cm4gMHhmZmZmVUwgJiByZXN1bHQ7Cit9CisKK19fRVhURVJOX0lOTElORSB1MzIgamVuc2VuX2lubCh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJamVuc2VuX3NldF9oYWUoMCk7CisJcmV0dXJuICoodnVpcCkgKChhZGRyIDw8IDcpICsgRUlTQV9JTyArIDB4NjApOworfQorCitfX0VYVEVSTl9JTkxJTkUgdm9pZCBqZW5zZW5fb3V0dyh1MTYgYiwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCWplbnNlbl9zZXRfaGFlKDApOworCSoodnVpcCkgKChhZGRyIDw8IDcpICsgRUlTQV9JTyArIDB4MjApID0gYiAqIDB4MDAwMTAwMDE7CisJbWIoKTsKK30KKworX19FWFRFUk5fSU5MSU5FIHZvaWQgamVuc2VuX291dGwodTMyIGIsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlqZW5zZW5fc2V0X2hhZSgwKTsKKwkqKHZ1aXApICgoYWRkciA8PCA3KSArIEVJU0FfSU8gKyAweDYwKSA9IGI7CisJbWIoKTsKK30KKworLyoKKyAqIE1lbW9yeSBmdW5jdGlvbnMuCisgKi8KKworX19FWFRFUk5fSU5MSU5FIHU4IGplbnNlbl9yZWFkYihjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKnhhZGRyKQoreworCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKSB4YWRkcjsKKwlsb25nIHJlc3VsdDsKKworCWplbnNlbl9zZXRfaGFlKGFkZHIpOworCWFkZHIgJj0gSkVOU0VOX0hBRV9NQVNLOworCXJlc3VsdCA9ICoodm9sYXRpbGUgaW50ICopICgoYWRkciA8PCA3KSArIEVJU0FfTUVNICsgMHgwMCk7CisJcmVzdWx0ID4+PSAoYWRkciAmIDMpICogODsKKwlyZXR1cm4gMHhmZlVMICYgcmVzdWx0OworfQorCitfX0VYVEVSTl9JTkxJTkUgdTE2IGplbnNlbl9yZWFkdyhjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKnhhZGRyKQoreworCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKSB4YWRkcjsKKwlsb25nIHJlc3VsdDsKKworCWplbnNlbl9zZXRfaGFlKGFkZHIpOworCWFkZHIgJj0gSkVOU0VOX0hBRV9NQVNLOworCXJlc3VsdCA9ICoodm9sYXRpbGUgaW50ICopICgoYWRkciA8PCA3KSArIEVJU0FfTUVNICsgMHgyMCk7CisJcmVzdWx0ID4+PSAoYWRkciAmIDMpICogODsKKwlyZXR1cm4gMHhmZmZmVUwgJiByZXN1bHQ7Cit9CisKK19fRVhURVJOX0lOTElORSB1MzIgamVuc2VuX3JlYWRsKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqeGFkZHIpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpIHhhZGRyOworCWplbnNlbl9zZXRfaGFlKGFkZHIpOworCWFkZHIgJj0gSkVOU0VOX0hBRV9NQVNLOworCXJldHVybiAqKHZ1aXApICgoYWRkciA8PCA3KSArIEVJU0FfTUVNICsgMHg2MCk7Cit9CisKK19fRVhURVJOX0lOTElORSB1NjQgamVuc2VuX3JlYWRxKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqeGFkZHIpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpIHhhZGRyOworCXVuc2lnbmVkIGxvbmcgcjAsIHIxOworCisJamVuc2VuX3NldF9oYWUoYWRkcik7CisJYWRkciAmPSBKRU5TRU5fSEFFX01BU0s7CisJYWRkciA9IChhZGRyIDw8IDcpICsgRUlTQV9NRU0gKyAweDYwOworCXIwID0gKih2dWlwKSAoYWRkcik7CisJcjEgPSAqKHZ1aXApIChhZGRyICsgKDQgPDwgNykpOworCXJldHVybiByMSA8PCAzMiB8IHIwOworfQorCitfX0VYVEVSTl9JTkxJTkUgdm9pZCBqZW5zZW5fd3JpdGViKHU4IGIsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqeGFkZHIpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpIHhhZGRyOworCWplbnNlbl9zZXRfaGFlKGFkZHIpOworCWFkZHIgJj0gSkVOU0VOX0hBRV9NQVNLOworCSoodnVpcCkgKChhZGRyIDw8IDcpICsgRUlTQV9NRU0gKyAweDAwKSA9IGIgKiAweDAxMDEwMTAxOworfQorCitfX0VYVEVSTl9JTkxJTkUgdm9pZCBqZW5zZW5fd3JpdGV3KHUxNiBiLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKnhhZGRyKQoreworCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKSB4YWRkcjsKKwlqZW5zZW5fc2V0X2hhZShhZGRyKTsKKwlhZGRyICY9IEpFTlNFTl9IQUVfTUFTSzsKKwkqKHZ1aXApICgoYWRkciA8PCA3KSArIEVJU0FfTUVNICsgMHgyMCkgPSBiICogMHgwMDAxMDAwMTsKK30KKworX19FWFRFUk5fSU5MSU5FIHZvaWQgamVuc2VuX3dyaXRlbCh1MzIgYiwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICp4YWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZykgeGFkZHI7CisJamVuc2VuX3NldF9oYWUoYWRkcik7CisJYWRkciAmPSBKRU5TRU5fSEFFX01BU0s7CisJKih2dWlwKSAoKGFkZHIgPDwgNykgKyBFSVNBX01FTSArIDB4NjApID0gYjsKK30KKworX19FWFRFUk5fSU5MSU5FIHZvaWQgamVuc2VuX3dyaXRlcSh1NjQgYiwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICp4YWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZykgeGFkZHI7CisJamVuc2VuX3NldF9oYWUoYWRkcik7CisJYWRkciAmPSBKRU5TRU5fSEFFX01BU0s7CisJYWRkciA9IChhZGRyIDw8IDcpICsgRUlTQV9NRU0gKyAweDYwOworCSoodnVpcCkgKGFkZHIpID0gYjsKKwkqKHZ1aXApIChhZGRyICsgKDQgPDwgNykpID0gYiA+PiAzMjsKK30KKworX19FWFRFUk5fSU5MSU5FIHZvaWQgX19pb21lbSAqamVuc2VuX2lvcG9ydG1hcCh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcmV0dXJuICh2b2lkIF9faW9tZW0gKilhZGRyOworfQorCitfX0VYVEVSTl9JTkxJTkUgdm9pZCBfX2lvbWVtICpqZW5zZW5faW9yZW1hcCh1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkJCSAgICAgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXJldHVybiAodm9pZCBfX2lvbWVtICopKGFkZHIgKyAweDEwMDAwMDAwMHVsKTsKK30KKworX19FWFRFUk5fSU5MSU5FIGludCBqZW5zZW5faXNfaW9hZGRyKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gKGxvbmcpYWRkciA+PSAwOworfQorCitfX0VYVEVSTl9JTkxJTkUgaW50IGplbnNlbl9pc19tbWlvKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpYWRkciA+PSAweDEwMDAwMDAwMHVsOworfQorCisvKiBOZXctc3R5bGUgaW9yZWFkIGludGVyZmFjZS4gIEFsbCB0aGUgcm91dGluZXMgYXJlIHNvIHVnbHkgZm9yIEplbnNlbgorICAgdGhhdCBpdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgdG8gbWVyZ2UgdGhlbS4gICovCisKKyNkZWZpbmUgSU9QT1JUKE9TLCBOUykJCQkJCQkJXAorX19FWFRFUk5fSU5MSU5FIHVuc2lnbmVkIGludCBqZW5zZW5faW9yZWFkIyNOUyh2b2lkIF9faW9tZW0gKnhhZGRyKQlcCit7CQkJCQkJCQkJXAorCWlmIChqZW5zZW5faXNfbW1pbyh4YWRkcikpCQkJCQlcCisJCXJldHVybiBqZW5zZW5fcmVhZCMjT1MoeGFkZHIgLSAweDEwMDAwMDAwMHVsKTsJCVwKKwllbHNlCQkJCQkJCQlcCisJCXJldHVybiBqZW5zZW5faW4jI09TKCh1bnNpZ25lZCBsb25nKXhhZGRyKTsJCVwKK30JCQkJCQkJCQlcCitfX0VYVEVSTl9JTkxJTkUgdm9pZCBqZW5zZW5faW93cml0ZSMjTlModSMjTlMgYiwgdm9pZCBfX2lvbWVtICp4YWRkcikJXAorewkJCQkJCQkJCVwKKwlpZiAoamVuc2VuX2lzX21taW8oeGFkZHIpKQkJCQkJXAorCQlqZW5zZW5fd3JpdGUjI09TKGIsIHhhZGRyIC0gMHgxMDAwMDAwMDB1bCk7CQlcCisJZWxzZQkJCQkJCQkJXAorCQlqZW5zZW5fb3V0IyNPUyhiLCAodW5zaWduZWQgbG9uZyl4YWRkcik7CQlcCit9CisKK0lPUE9SVChiLCA4KQorSU9QT1JUKHcsIDE2KQorSU9QT1JUKGwsIDMyKQorCisjdW5kZWYgSU9QT1JUCisKKyN1bmRlZiB2dWlwCisKKyN1bmRlZiBfX0lPX1BSRUZJWAorI2RlZmluZSBfX0lPX1BSRUZJWAkJamVuc2VuCisjZGVmaW5lIGplbnNlbl90cml2aWFsX3J3X2J3CTAKKyNkZWZpbmUgamVuc2VuX3RyaXZpYWxfcndfbHEJMAorI2RlZmluZSBqZW5zZW5fdHJpdmlhbF9pb19idwkwCisjZGVmaW5lIGplbnNlbl90cml2aWFsX2lvX2xxCTAKKyNkZWZpbmUgamVuc2VuX3RyaXZpYWxfaW91bm1hcAkxCisjaW5jbHVkZSA8YXNtL2lvX3RyaXZpYWwuaD4KKworI2lmZGVmIF9fSU9fRVhURVJOX0lOTElORQorI3VuZGVmIF9fRVhURVJOX0lOTElORQorI3VuZGVmIF9fSU9fRVhURVJOX0lOTElORQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfX0FMUEhBX0pFTlNFTl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9rbWFwX3R5cGVzLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9rbWFwX3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2QxMGNkMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL2ttYXBfdHlwZXMuaApAQCAtMCwwICsxLDMzIEBACisjaWZuZGVmIF9BU01fS01BUF9UWVBFU19ICisjZGVmaW5lIF9BU01fS01BUF9UWVBFU19ICisKKy8qIER1bW15IGhlYWRlciBqdXN0IHRvIGRlZmluZSBrbV90eXBlLiAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpZmRlZiBDT05GSUdfREVCVUdfSElHSE1FTQorIyBkZWZpbmUgRChuKSBfX0tNX0ZFTkNFXyMjbiAsCisjZWxzZQorIyBkZWZpbmUgRChuKQorI2VuZGlmCisKK2VudW0ga21fdHlwZSB7CitEKDApCUtNX0JPVU5DRV9SRUFELAorRCgxKQlLTV9TS0JfU1VOUlBDX0RBVEEsCitEKDIpCUtNX1NLQl9EQVRBX1NPRlRJUlEsCitEKDMpCUtNX1VTRVIwLAorRCg0KQlLTV9VU0VSMSwKK0QoNSkJS01fQklPX1NSQ19JUlEsCitEKDYpCUtNX0JJT19EU1RfSVJRLAorRCg3KQlLTV9QVEUwLAorRCg4KQlLTV9QVEUxLAorRCg5KQlLTV9JUlEwLAorRCgxMCkJS01fSVJRMSwKK0QoMTEpCUtNX1NPRlRJUlEwLAorRCgxMikJS01fU09GVElSUTEsCitEKDEzKQlLTV9UWVBFX05SCit9OworCisjdW5kZWYgRAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL2xpbmthZ2UuaCBiL2luY2x1ZGUvYXNtLWFscGhhL2xpbmthZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTFjMmQwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvbGlua2FnZS5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfX0FTTV9MSU5LQUdFX0gKKyNkZWZpbmUgX19BU01fTElOS0FHRV9ICisKKy8qIE5vdGhpbmcgdG8gc2VlIGhlcmUuLi4gKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9sb2NhbC5oIGIvaW5jbHVkZS9hc20tYWxwaGEvbG9jYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGE1MTBmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvbG9jYWwuaApAQCAtMCwwICsxLDQwIEBACisjaWZuZGVmIF9BTFBIQV9MT0NBTF9ICisjZGVmaW5lIF9BTFBIQV9MT0NBTF9ICisKKyNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisKK3R5cGVkZWYgYXRvbWljNjRfdCBsb2NhbF90OworCisjZGVmaW5lIExPQ0FMX0lOSVQoaSkJQVRPTUlDNjRfSU5JVChpKQorI2RlZmluZSBsb2NhbF9yZWFkKHYpCWF0b21pYzY0X3JlYWQodikKKyNkZWZpbmUgbG9jYWxfc2V0KHYsaSkJYXRvbWljNjRfc2V0KHYsaSkKKworI2RlZmluZSBsb2NhbF9pbmModikJYXRvbWljNjRfaW5jKHYpCisjZGVmaW5lIGxvY2FsX2RlYyh2KQlhdG9taWM2NF9kZWModikKKyNkZWZpbmUgbG9jYWxfYWRkKGksIHYpCWF0b21pYzY0X2FkZChpLCB2KQorI2RlZmluZSBsb2NhbF9zdWIoaSwgdikJYXRvbWljNjRfc3ViKGksIHYpCisKKyNkZWZpbmUgX19sb2NhbF9pbmModikJCSgodiktPmNvdW50ZXIrKykKKyNkZWZpbmUgX19sb2NhbF9kZWModikJCSgodiktPmNvdW50ZXIrKykKKyNkZWZpbmUgX19sb2NhbF9hZGQoaSx2KQkoKHYpLT5jb3VudGVyKz0oaSkpCisjZGVmaW5lIF9fbG9jYWxfc3ViKGksdikJKCh2KS0+Y291bnRlci09KGkpKQorCisvKiBVc2UgdGhlc2UgZm9yIHBlci1jcHUgbG9jYWxfdCB2YXJpYWJsZXM6IG9uIHNvbWUgYXJjaHMgdGhleSBhcmUKKyAqIG11Y2ggbW9yZSBlZmZpY2llbnQgdGhhbiB0aGVzZSBuYWl2ZSBpbXBsZW1lbnRhdGlvbnMuICBOb3RlIHRoZXkgdGFrZQorICogYSB2YXJpYWJsZSwgbm90IGFuIGFkZHJlc3MuCisgKi8KKyNkZWZpbmUgY3B1X2xvY2FsX3JlYWQodikJbG9jYWxfcmVhZCgmX19nZXRfY3B1X3Zhcih2KSkKKyNkZWZpbmUgY3B1X2xvY2FsX3NldCh2LCBpKQlsb2NhbF9zZXQoJl9fZ2V0X2NwdV92YXIodiksIChpKSkKKworI2RlZmluZSBjcHVfbG9jYWxfaW5jKHYpCWxvY2FsX2luYygmX19nZXRfY3B1X3Zhcih2KSkKKyNkZWZpbmUgY3B1X2xvY2FsX2RlYyh2KQlsb2NhbF9kZWMoJl9fZ2V0X2NwdV92YXIodikpCisjZGVmaW5lIGNwdV9sb2NhbF9hZGQoaSwgdikJbG9jYWxfYWRkKChpKSwgJl9fZ2V0X2NwdV92YXIodikpCisjZGVmaW5lIGNwdV9sb2NhbF9zdWIoaSwgdikJbG9jYWxfc3ViKChpKSwgJl9fZ2V0X2NwdV92YXIodikpCisKKyNkZWZpbmUgX19jcHVfbG9jYWxfaW5jKHYpCV9fbG9jYWxfaW5jKCZfX2dldF9jcHVfdmFyKHYpKQorI2RlZmluZSBfX2NwdV9sb2NhbF9kZWModikJX19sb2NhbF9kZWMoJl9fZ2V0X2NwdV92YXIodikpCisjZGVmaW5lIF9fY3B1X2xvY2FsX2FkZChpLCB2KQlfX2xvY2FsX2FkZCgoaSksICZfX2dldF9jcHVfdmFyKHYpKQorI2RlZmluZSBfX2NwdV9sb2NhbF9zdWIoaSwgdikJX19sb2NhbF9zdWIoKGkpLCAmX19nZXRfY3B1X3Zhcih2KSkKKworI2VuZGlmIC8qIF9BTFBIQV9MT0NBTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9tYWNodmVjLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9tYWNodmVjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNlMTY2YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL21hY2h2ZWMuaApAQCAtMCwwICsxLDEzNiBAQAorI2lmbmRlZiBfX0FMUEhBX01BQ0hWRUNfSAorI2RlZmluZSBfX0FMUEhBX01BQ0hWRUNfSCAxCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKgorICoJVGhpcyBmaWxlIGdldHMgcHVsbGVkIGluIGJ5IGFzbS9pby5oIGZyb20gdXNlciBzcGFjZS4gV2UgZG9uJ3QKKyAqCXdhbnQgbW9zdCBvZiB0aGlzIGVzY2FwaW5nLgorICovCisgCisjaWZkZWYgX19LRVJORUxfXworCisvKiBUaGUgZm9sbG93aW5nIHN0cnVjdHVyZSB2ZWN0b3JzIGFsbCBvZiB0aGUgSS9PIGFuZCBJUlEgbWFuaXB1bGF0aW9uCisgICBmcm9tIHRoZSBnZW5lcmljIGtlcm5lbCB0byB0aGUgaGFyZHdhcmUgc3BlY2lmaWMgYmFja2VuZC4gICovCisKK3N0cnVjdCB0YXNrX3N0cnVjdDsKK3N0cnVjdCBtbV9zdHJ1Y3Q7CitzdHJ1Y3QgcHRfcmVnczsKK3N0cnVjdCB2bV9hcmVhX3N0cnVjdDsKK3N0cnVjdCBsaW51eF9ob3NlX2luZm87CitzdHJ1Y3QgcGNpX2RldjsKK3N0cnVjdCBwY2lfb3BzOworc3RydWN0IHBjaV9jb250cm9sbGVyOworc3RydWN0IF9hbHBoYV9hZ3BfaW5mbzsKKworc3RydWN0IGFscGhhX21hY2hpbmVfdmVjdG9yCit7CisJLyogVGhpcyAiYmVsb25ncyIgZG93biBiZWxvdyB3aXRoIHRoZSByZXN0IG9mIHRoZSBydW50aW1lCisJICAgdmFyaWFibGVzLCBidXQgaXQgaXMgY29udmVuaWVudCBmb3IgZW50cnkuUyBpZiB0aGVzZSAKKwkgICB0d28gc2xvdHMgYXJlIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHN0cnVjdC4gICovCisJdW5zaWduZWQgbG9uZyBoYWVfY2FjaGU7CisJdW5zaWduZWQgbG9uZyAqaGFlX3JlZ2lzdGVyOworCisJaW50IG5yX2lycXM7CisJaW50IHJ0Y19wb3J0OworCXVuc2lnbmVkIGludCBtYXhfYXNuOworCXVuc2lnbmVkIGxvbmcgbWF4X2lzYV9kbWFfYWRkcmVzczsKKwl1bnNpZ25lZCBsb25nIGlycV9wcm9iZV9tYXNrOworCXVuc2lnbmVkIGxvbmcgaWFja19zYzsKKwl1bnNpZ25lZCBsb25nIG1pbl9pb19hZGRyZXNzOworCXVuc2lnbmVkIGxvbmcgbWluX21lbV9hZGRyZXNzOworCXVuc2lnbmVkIGxvbmcgcGNpX2RhY19vZmZzZXQ7CisKKwl2b2lkICgqbXZfcGNpX3RiaSkoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlLAorCQkJICAgZG1hX2FkZHJfdCBzdGFydCwgZG1hX2FkZHJfdCBlbmQpOworCisJdW5zaWduZWQgaW50ICgqbXZfaW9yZWFkOCkodm9pZCBfX2lvbWVtICopOworCXVuc2lnbmVkIGludCAoKm12X2lvcmVhZDE2KSh2b2lkIF9faW9tZW0gKik7CisJdW5zaWduZWQgaW50ICgqbXZfaW9yZWFkMzIpKHZvaWQgX19pb21lbSAqKTsKKworCXZvaWQgKCptdl9pb3dyaXRlOCkodTgsIHZvaWQgX19pb21lbSAqKTsKKwl2b2lkICgqbXZfaW93cml0ZTE2KSh1MTYsIHZvaWQgX19pb21lbSAqKTsKKwl2b2lkICgqbXZfaW93cml0ZTMyKSh1MzIsIHZvaWQgX19pb21lbSAqKTsKKworCXU4ICgqbXZfcmVhZGIpKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqKTsKKwl1MTYgKCptdl9yZWFkdykoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICopOworCXUzMiAoKm12X3JlYWRsKShjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKik7CisJdTY0ICgqbXZfcmVhZHEpKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqKTsKKworCXZvaWQgKCptdl93cml0ZWIpKHU4LCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKik7CisJdm9pZCAoKm12X3dyaXRldykodTE2LCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKik7CisJdm9pZCAoKm12X3dyaXRlbCkodTMyLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKik7CisJdm9pZCAoKm12X3dyaXRlcSkodTY0LCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKik7CisKKwl2b2lkIF9faW9tZW0gKigqbXZfaW9wb3J0bWFwKSh1bnNpZ25lZCBsb25nKTsKKwl2b2lkIF9faW9tZW0gKigqbXZfaW9yZW1hcCkodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CisJdm9pZCAoKm12X2lvdW5tYXApKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqKTsKKwlpbnQgKCptdl9pc19pb2FkZHIpKHVuc2lnbmVkIGxvbmcpOworCWludCAoKm12X2lzX21taW8pKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqKTsKKworCXZvaWQgKCptdl9zd2l0Y2hfbW0pKHN0cnVjdCBtbV9zdHJ1Y3QgKiwgc3RydWN0IG1tX3N0cnVjdCAqLAorCQkJICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CisJdm9pZCAoKm12X2FjdGl2YXRlX21tKShzdHJ1Y3QgbW1fc3RydWN0ICosIHN0cnVjdCBtbV9zdHJ1Y3QgKik7CisKKwl2b2lkICgqbXZfZmx1c2hfdGxiX2N1cnJlbnQpKHN0cnVjdCBtbV9zdHJ1Y3QgKik7CisJdm9pZCAoKm12X2ZsdXNoX3RsYl9jdXJyZW50X3BhZ2UpKHN0cnVjdCBtbV9zdHJ1Y3QgKiBtbSwKKwkJCQkJICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCQkJICB1bnNpZ25lZCBsb25nIGFkZHIpOworCisJdm9pZCAoKnVwZGF0ZV9pcnFfaHcpKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIGludCk7CisJdm9pZCAoKmFja19pcnEpKHVuc2lnbmVkIGxvbmcpOworCXZvaWQgKCpkZXZpY2VfaW50ZXJydXB0KSh1bnNpZ25lZCBsb25nIHZlY3Rvciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCXZvaWQgKCptYWNoaW5lX2NoZWNrKSh1NjQgdmVjdG9yLCB1NjQgbGEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworCXZvaWQgKCpzbXBfY2FsbGluKSh2b2lkKTsKKwl2b2lkICgqaW5pdF9hcmNoKSh2b2lkKTsKKwl2b2lkICgqaW5pdF9pcnEpKHZvaWQpOworCXZvaWQgKCppbml0X3J0Yykodm9pZCk7CisJdm9pZCAoKmluaXRfcGNpKSh2b2lkKTsKKwl2b2lkICgqa2lsbF9hcmNoKShpbnQpOworCisJdTggKCpwY2lfc3dpenpsZSkoc3RydWN0IHBjaV9kZXYgKiwgdTggKik7CisJaW50ICgqcGNpX21hcF9pcnEpKHN0cnVjdCBwY2lfZGV2ICosIHU4LCB1OCk7CisJc3RydWN0IHBjaV9vcHMgKnBjaV9vcHM7CisKKwlzdHJ1Y3QgX2FscGhhX2FncF9pbmZvICooKmFncF9pbmZvKSh2b2lkKTsKKworCWNvbnN0IGNoYXIgKnZlY3Rvcl9uYW1lOworCisJLyogTlVNQSBpbmZvcm1hdGlvbiAqLworCWludCAoKnBhX3RvX25pZCkodW5zaWduZWQgbG9uZyk7CisJaW50ICgqY3B1aWRfdG9fbmlkKShpbnQpOworCXVuc2lnbmVkIGxvbmcgKCpub2RlX21lbV9zdGFydCkoaW50KTsKKwl1bnNpZ25lZCBsb25nICgqbm9kZV9tZW1fc2l6ZSkoaW50KTsKKworCS8qIFN5c3RlbSBzcGVjaWZpYyBwYXJhbWV0ZXJzLiAgKi8KKwl1bmlvbiB7CisJICAgIHN0cnVjdCB7CisJCXVuc2lnbmVkIGxvbmcgZ3J1X2ludF9yZXFfYml0czsKKwkgICAgfSBjaWE7CisKKwkgICAgc3RydWN0IHsKKwkJdW5zaWduZWQgbG9uZyBnYW1tYV9iaWFzOworCSAgICB9IHQyOworCisJICAgIHN0cnVjdCB7CisJCXVuc2lnbmVkIGludCByb3V0ZV90YWI7CisJICAgIH0gc2lvOworCX0gc3lzOworfTsKKworZXh0ZXJuIHN0cnVjdCBhbHBoYV9tYWNoaW5lX3ZlY3RvciBhbHBoYV9tdjsKKworI2lmZGVmIENPTkZJR19BTFBIQV9HRU5FUklDCitleHRlcm4gaW50IGFscGhhX3VzaW5nX3NybTsKKyNlbHNlCisjaWZkZWYgQ09ORklHX0FMUEhBX1NSTQorI2RlZmluZSBhbHBoYV91c2luZ19zcm0gMQorI2Vsc2UKKyNkZWZpbmUgYWxwaGFfdXNpbmdfc3JtIDAKKyNlbmRpZgorI2VuZGlmIC8qIEdFTkVSSUMgKi8KKworI2VuZGlmCisjZW5kaWYgLyogX19BTFBIQV9NQUNIVkVDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL21jMTQ2ODE4cnRjLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9tYzE0NjgxOHJ0Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5NzcwM2YKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9tYzE0NjgxOHJ0Yy5oCkBAIC0wLDAgKzEsMjcgQEAKKy8qCisgKiBNYWNoaW5lIGRlcGVuZGVudCBhY2Nlc3MgZnVuY3Rpb25zIGZvciBSVEMgcmVnaXN0ZXJzLgorICovCisjaWZuZGVmIF9fQVNNX0FMUEhBX01DMTQ2ODE4UlRDX0gKKyNkZWZpbmUgX19BU01fQUxQSEFfTUMxNDY4MThSVENfSAorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNpZm5kZWYgUlRDX1BPUlQKKyNkZWZpbmUgUlRDX1BPUlQoeCkJKDB4NzAgKyAoeCkpCisjZGVmaW5lIFJUQ19BTFdBWVNfQkNECTEJLyogUlRDIG9wZXJhdGVzIGluIGJpbmFyeSBtb2RlICovCisjZW5kaWYKKworLyoKKyAqIFRoZSB5ZXQgc3VwcG9ydGVkIG1hY2hpbmVzIGFsbCBhY2Nlc3MgdGhlIFJUQyBpbmRleCByZWdpc3RlciB2aWEKKyAqIGFuIElTQSBwb3J0IGFjY2VzcyBidXQgdGhlIHdheSB0byBhY2Nlc3MgdGhlIGRhdGUgcmVnaXN0ZXIgZGlmZmVycyAuLi4KKyAqLworI2RlZmluZSBDTU9TX1JFQUQoYWRkcikgKHsgXAorb3V0Yl9wKChhZGRyKSxSVENfUE9SVCgwKSk7IFwKK2luYl9wKFJUQ19QT1JUKDEpKTsgXAorfSkKKyNkZWZpbmUgQ01PU19XUklURSh2YWwsIGFkZHIpICh7IFwKK291dGJfcCgoYWRkciksUlRDX1BPUlQoMCkpOyBcCitvdXRiX3AoKHZhbCksUlRDX1BPUlQoMSkpOyBcCit9KQorCisjZW5kaWYgLyogX19BU01fQUxQSEFfTUMxNDY4MThSVENfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvbWQuaCBiL2luY2x1ZGUvYXNtLWFscGhhL21kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM5YjgyMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL21kLmgKQEAgLTAsMCArMSwxMyBAQAorLyogJElkOiBtZC5oLHYgMS4xIDE5OTcvMTIvMTUgMTU6MTE6NDggamogRXhwICQKKyAqIG1kLmg6IEhpZ2ggc3BlZWQgeG9yX2Jsb2NrIG9wZXJhdGlvbiBmb3IgUkFJRDQvNSAKKyAqCisgKi8KKyAKKyNpZm5kZWYgX19BU01fTURfSAorI2RlZmluZSBfX0FTTV9NRF9ICisKKy8qICNkZWZpbmUgSEFWRV9BUkNIX1hPUkJMT0NLICovCisKKyNkZWZpbmUgTURfWE9SQkxPQ0tfQUxJR05NRU5UCXNpemVvZihsb25nKQorCisjZW5kaWYgLyogX19BU01fTURfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvbW1hbi5oIGIvaW5jbHVkZS9hc20tYWxwaGEvbW1hbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViOWMyNzkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9tbWFuLmgKQEAgLTAsMCArMSw1MCBAQAorI2lmbmRlZiBfX0FMUEhBX01NQU5fSF9fCisjZGVmaW5lIF9fQUxQSEFfTU1BTl9IX18KKworI2RlZmluZSBQUk9UX1JFQUQJMHgxCQkvKiBwYWdlIGNhbiBiZSByZWFkICovCisjZGVmaW5lIFBST1RfV1JJVEUJMHgyCQkvKiBwYWdlIGNhbiBiZSB3cml0dGVuICovCisjZGVmaW5lIFBST1RfRVhFQwkweDQJCS8qIHBhZ2UgY2FuIGJlIGV4ZWN1dGVkICovCisjZGVmaW5lIFBST1RfU0VNCTB4OAkJLyogcGFnZSBtYXkgYmUgdXNlZCBmb3IgYXRvbWljIG9wcyAqLworI2RlZmluZSBQUk9UX05PTkUJMHgwCQkvKiBwYWdlIGNhbiBub3QgYmUgYWNjZXNzZWQgKi8KKyNkZWZpbmUgUFJPVF9HUk9XU0RPV04JMHgwMTAwMDAwMAkvKiBtcHJvdGVjdCBmbGFnOiBleHRlbmQgY2hhbmdlIHRvIHN0YXJ0IG9mIGdyb3dzZG93biB2bWEgKi8KKyNkZWZpbmUgUFJPVF9HUk9XU1VQCTB4MDIwMDAwMDAJLyogbXByb3RlY3QgZmxhZzogZXh0ZW5kIGNoYW5nZSB0byBlbmQgb2YgZ3Jvd3N1cCB2bWEgKi8KKworI2RlZmluZSBNQVBfU0hBUkVECTB4MDEJCS8qIFNoYXJlIGNoYW5nZXMgKi8KKyNkZWZpbmUgTUFQX1BSSVZBVEUJMHgwMgkJLyogQ2hhbmdlcyBhcmUgcHJpdmF0ZSAqLworI2RlZmluZSBNQVBfVFlQRQkweDBmCQkvKiBNYXNrIGZvciB0eXBlIG9mIG1hcHBpbmcgKE9TRi8xIGlzIF93cm9uZ18pICovCisjZGVmaW5lIE1BUF9GSVhFRAkweDEwMAkJLyogSW50ZXJwcmV0IGFkZHIgZXhhY3RseSAqLworI2RlZmluZSBNQVBfQU5PTllNT1VTCTB4MTAJCS8qIGRvbid0IHVzZSBhIGZpbGUgKi8KKworLyogbm90IHVzZWQgYnkgbGludXgsIGJ1dCBoZXJlIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBjbGFzaCB3aXRoIE9TRi8xIGRlZmluZXMgKi8KKyNkZWZpbmUgX01BUF9IQVNTRU1BUEhPUkUgMHgwMjAwCisjZGVmaW5lIF9NQVBfSU5IRVJJVAkweDA0MDAKKyNkZWZpbmUgX01BUF9VTkFMSUdORUQJMHgwODAwCisKKy8qIFRoZXNlIGFyZSBsaW51eC1zcGVjaWZpYyAqLworI2RlZmluZSBNQVBfR1JPV1NET1dOCTB4MDEwMDAJCS8qIHN0YWNrLWxpa2Ugc2VnbWVudCAqLworI2RlZmluZSBNQVBfREVOWVdSSVRFCTB4MDIwMDAJCS8qIEVUWFRCU1kgKi8KKyNkZWZpbmUgTUFQX0VYRUNVVEFCTEUJMHgwNDAwMAkJLyogbWFyayBpdCBhcyBhbiBleGVjdXRhYmxlICovCisjZGVmaW5lIE1BUF9MT0NLRUQJMHgwODAwMAkJLyogbG9jayB0aGUgbWFwcGluZyAqLworI2RlZmluZSBNQVBfTk9SRVNFUlZFCTB4MTAwMDAJCS8qIGRvbid0IGNoZWNrIGZvciByZXNlcnZhdGlvbnMgKi8KKyNkZWZpbmUgTUFQX1BPUFVMQVRFCTB4MjAwMDAJCS8qIHBvcHVsYXRlIChwcmVmYXVsdCkgcGFnZXRhYmxlcyAqLworI2RlZmluZSBNQVBfTk9OQkxPQ0sJMHg0MDAwMAkJLyogZG8gbm90IGJsb2NrIG9uIElPICovCisKKyNkZWZpbmUgTVNfQVNZTkMJMQkJLyogc3luYyBtZW1vcnkgYXN5bmNocm9ub3VzbHkgKi8KKyNkZWZpbmUgTVNfU1lOQwkJMgkJLyogc3luY2hyb25vdXMgbWVtb3J5IHN5bmMgKi8KKyNkZWZpbmUgTVNfSU5WQUxJREFURQk0CQkvKiBpbnZhbGlkYXRlIHRoZSBjYWNoZXMgKi8KKworI2RlZmluZSBNQ0xfQ1VSUkVOVAkgODE5MgkJLyogbG9jayBhbGwgY3VycmVudGx5IG1hcHBlZCBwYWdlcyAqLworI2RlZmluZSBNQ0xfRlVUVVJFCTE2Mzg0CQkvKiBsb2NrIGFsbCBhZGRpdGlvbnMgdG8gYWRkcmVzcyBzcGFjZSAqLworCisjZGVmaW5lIE1BRFZfTk9STUFMCTAJCS8qIG5vIGZ1cnRoZXIgc3BlY2lhbCB0cmVhdG1lbnQgKi8KKyNkZWZpbmUgTUFEVl9SQU5ET00JMQkJLyogZXhwZWN0IHJhbmRvbSBwYWdlIHJlZmVyZW5jZXMgKi8KKyNkZWZpbmUgTUFEVl9TRVFVRU5USUFMCTIJCS8qIGV4cGVjdCBzZXF1ZW50aWFsIHBhZ2UgcmVmZXJlbmNlcyAqLworI2RlZmluZSBNQURWX1dJTExORUVECTMJCS8qIHdpbGwgbmVlZCB0aGVzZSBwYWdlcyAqLworI2RlZmluZQlNQURWX1NQQUNFQVZBSUwJNQkJLyogZW5zdXJlIHJlc291cmNlcyBhcmUgYXZhaWxhYmxlICovCisjZGVmaW5lIE1BRFZfRE9OVE5FRUQJNgkJLyogZG9uJ3QgbmVlZCB0aGVzZSBwYWdlcyAqLworCisvKiBjb21wYXRpYmlsaXR5IGZsYWdzICovCisjZGVmaW5lIE1BUF9BTk9OCU1BUF9BTk9OWU1PVVMKKyNkZWZpbmUgTUFQX0ZJTEUJMAorCisjZW5kaWYgLyogX19BTFBIQV9NTUFOX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvbW11LmggYi9pbmNsdWRlL2FzbS1hbHBoYS9tbXUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGMxMjc3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvbW11LmgKQEAgLTAsMCArMSw3IEBACisjaWZuZGVmIF9fQUxQSEFfTU1VX0gKKyNkZWZpbmUgX19BTFBIQV9NTVVfSAorCisvKiBUaGUgYWxwaGEgTU1VIGNvbnRleHQgaXMgb25lICJ1bnNpZ25lZCBsb25nIiBiaXRtYXAgcGVyIENQVSAqLwordHlwZWRlZiB1bnNpZ25lZCBsb25nIG1tX2NvbnRleHRfdFtOUl9DUFVTXTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9tbXVfY29udGV4dC5oIGIvaW5jbHVkZS9hc20tYWxwaGEvbW11X2NvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzE0ZDBjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvbW11X2NvbnRleHQuaApAQCAtMCwwICsxLDI2MSBAQAorI2lmbmRlZiBfX0FMUEhBX01NVV9DT05URVhUX0gKKyNkZWZpbmUgX19BTFBIQV9NTVVfQ09OVEVYVF9ICisKKy8qCisgKiBnZXQgYSBuZXcgbW11IGNvbnRleHQuLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NiwgTGludXMgVG9ydmFsZHMKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+CisjaW5jbHVkZSA8YXNtL2NvbXBpbGVyLmg+CisKKy8qCisgKiBGb3JjZSBhIGNvbnRleHQgcmVsb2FkLiBUaGlzIGlzIG5lZWRlZCB3aGVuIHdlIGNoYW5nZSB0aGUgcGFnZQorICogdGFibGUgcG9pbnRlciBvciB3aGVuIHdlIHVwZGF0ZSB0aGUgQVNOIG9mIHRoZSBjdXJyZW50IHByb2Nlc3MuCisgKi8KKworLyogRG9uJ3QgZ2V0IGludG8gdHJvdWJsZSB3aXRoIGR1ZWxpbmcgX19FWFRFUk5fSU5MSU5Fcy4gICovCisjaWZuZGVmIF9fRVhURVJOX0lOTElORQorI2luY2x1ZGUgPGFzbS9pby5oPgorI2VuZGlmCisKKworZXh0ZXJuIGlubGluZSB1bnNpZ25lZCBsb25nCitfX3JlbG9hZF90aHJlYWQoc3RydWN0IHBjYl9zdHJ1Y3QgKnBjYikKK3sKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIGEwIF9fYXNtX18oIiQxNiIpOworCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgdjAgX19hc21fXygiJDAiKTsKKworCWEwID0gdmlydF90b19waHlzKHBjYik7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSJjYWxsX3BhbCAlMiAjX19yZWxvYWRfdGhyZWFkIgorCQk6ICI9ciIodjApLCAiPXIiKGEwKQorCQk6ICJpIihQQUxfc3dwY3R4KSwgInIiKGEwKQorCQk6ICIkMSIsICIkMjIiLCAiJDIzIiwgIiQyNCIsICIkMjUiKTsKKworCXJldHVybiB2MDsKK30KKworCisvKgorICogVGhlIG1heGltdW0gQVNOJ3MgdGhlIHByb2Nlc3NvciBzdXBwb3J0cy4gIE9uIHRoZSBFVjQgdGhpcyBpcyA2MworICogYnV0IHRoZSBQQUwtY29kZSBkb2Vzbid0IGFjdHVhbGx5IHVzZSB0aGlzIGluZm9ybWF0aW9uLiAgT24gdGhlCisgKiBFVjUgdGhpcyBpcyAxMjcsIGFuZCBFVjYgaGFzIDI1NS4KKyAqCisgKiBPbiB0aGUgRVY0LCB0aGUgQVNOcyBhcmUgbW9yZS1vci1sZXNzIHVzZWxlc3MgYW55d2F5LCBhcyB0aGV5IGFyZQorICogb25seSB1c2VkIGFzIGFuIGljYWNoZSB0YWcsIG5vdCBmb3IgVEIgZW50cmllcy4gIE9uIHRoZSBFVjUgYW5kIEVWNiwKKyAqIEFTTidzIGFsc28gdmFsaWRhdGUgdGhlIFRCIGVudHJpZXMsIGFuZCB0aHVzIG1ha2UgYSBsb3QgbW9yZSBzZW5zZS4KKyAqCisgKiBUaGUgRVY0IEFTTidzIGRvbid0IGV2ZW4gbWF0Y2ggdGhlIGFyY2hpdGVjdHVyZSBtYW51YWwsIHVnaC4gIEFuZAorICogSSBxdW90ZTogIklmIGEgcHJvY2Vzc29yIGltcGxlbWVudHMgYWRkcmVzcyBzcGFjZSBudW1iZXJzIChBU05zKSwKKyAqIGFuZCB0aGUgb2xkIFBURSBoYXMgdGhlIEFkZHJlc3MgU3BhY2UgTWF0Y2ggKEFTTSkgYml0IGNsZWFyIChBU05zCisgKiBpbiB1c2UpIGFuZCB0aGUgVmFsaWQgYml0IHNldCwgdGhlbiBlbnRyaWVzIGNhbiBhbHNvIGVmZmVjdGl2ZWx5IGJlCisgKiBtYWRlIGNvaGVyZW50IGJ5IGFzc2lnbmluZyBhIG5ldywgdW51c2VkIEFTTiB0byB0aGUgY3VycmVudGx5CisgKiBydW5uaW5nIHByb2Nlc3MgYW5kIG5vdCByZXVzaW5nIHRoZSBwcmV2aW91cyBBU04gYmVmb3JlIGNhbGxpbmcgdGhlCisgKiBhcHByb3ByaWF0ZSBQQUxjb2RlIHJvdXRpbmUgdG8gaW52YWxpZGF0ZSB0aGUgdHJhbnNsYXRpb24gYnVmZmVyIChUQikiLiAKKyAqCisgKiBJbiBzaG9ydCwgdGhlIEVWNCBoYXMgYSAia2luZCBvZiIgQVNOIGNhcGFiaWxpdHksIGJ1dCBpdCBkb2Vzbid0IGFjdHVhbGx5CisgKiB3b3JrIGNvcnJlY3RseSBhbmQgY2FuIHRodXMgbm90IGJlIHVzZWQgKGV4cGxhaW5pbmcgdGhlIGxhY2sgb2YgUEFMLWNvZGUKKyAqIHN1cHBvcnQpLgorICovCisjZGVmaW5lIEVWNF9NQVhfQVNOIDYzCisjZGVmaW5lIEVWNV9NQVhfQVNOIDEyNworI2RlZmluZSBFVjZfTUFYX0FTTiAyNTUKKworI2lmZGVmIENPTkZJR19BTFBIQV9HRU5FUklDCisjIGRlZmluZSBNQVhfQVNOCShhbHBoYV9tdi5tYXhfYXNuKQorI2Vsc2UKKyMgaWZkZWYgQ09ORklHX0FMUEhBX0VWNAorIyAgZGVmaW5lIE1BWF9BU04JRVY0X01BWF9BU04KKyMgZWxpZiBkZWZpbmVkKENPTkZJR19BTFBIQV9FVjUpCisjICBkZWZpbmUgTUFYX0FTTglFVjVfTUFYX0FTTgorIyBlbHNlCisjICBkZWZpbmUgTUFYX0FTTglFVjZfTUFYX0FTTgorIyBlbmRpZgorI2VuZGlmCisKKy8qCisgKiBjcHVfbGFzdF9hc24ocHJvY2Vzc29yKToKKyAqIDYzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisgKiArLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKworICogfCBhc24gdmVyc2lvbiB8IHRoaXMgcHJvY2Vzc29yIHwgaGFyZHdhcmUgYXNuIHwKKyAqICstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rCisgKi8KKworI2lmZGVmIENPTkZJR19TTVAKKyNpbmNsdWRlIDxhc20vc21wLmg+CisjZGVmaW5lIGNwdV9sYXN0X2FzbihjcHVpZCkJKGNwdV9kYXRhW2NwdWlkXS5sYXN0X2FzbikKKyNlbHNlCitleHRlcm4gdW5zaWduZWQgbG9uZyBsYXN0X2FzbjsKKyNkZWZpbmUgY3B1X2xhc3RfYXNuKGNwdWlkKQlsYXN0X2FzbgorI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KKworI2RlZmluZSBXSURUSF9IQVJEV0FSRV9BU04JOAorI2RlZmluZSBBU05fRklSU1RfVkVSU0lPTiAoMVVMIDw8IFdJRFRIX0hBUkRXQVJFX0FTTikKKyNkZWZpbmUgSEFSRFdBUkVfQVNOX01BU0sgKCgxVUwgPDwgV0lEVEhfSEFSRFdBUkVfQVNOKSAtIDEpCisKKy8qCisgKiBOT1RFISBUaGUgd2F5IHRoaXMgaXMgc2V0IHVwLCB0aGUgaGlnaCBiaXRzIG9mIHRoZSAiYXNuX2NhY2hlIiAoYW5kCisgKiB0aGUgIm1tLT5jb250ZXh0IikgYXJlIHRoZSBBU04gX3ZlcnNpb25fIGNvZGUuIEEgdmVyc2lvbiBvZiAwIGlzCisgKiBhbHdheXMgY29uc2lkZXJlZCBpbnZhbGlkLCBzbyB0byBpbnZhbGlkYXRlIGFub3RoZXIgcHJvY2VzcyB5b3Ugb25seQorICogbmVlZCB0byBkbyAicC0+bW0tPmNvbnRleHQgPSAwIi4KKyAqCisgKiBJZiB3ZSBuZWVkIG1vcmUgQVNOJ3MgdGhhbiB0aGUgcHJvY2Vzc29yIGhhcywgd2UgaW52YWxpZGF0ZSB0aGUgb2xkCisgKiB1c2VyIFRMQidzICh0YmlhcCgpKSBhbmQgc3RhcnQgYSBuZXcgQVNOIHZlcnNpb24uIFRoYXQgd2lsbCBhdXRvbWF0aWNhbGx5CisgKiBmb3JjZSBhIG5ldyBhc24gZm9yIGFueSBvdGhlciBwcm9jZXNzZXMgdGhlIG5leHQgdGltZSB0aGV5IHdhbnQgdG8KKyAqIHJ1bi4KKyAqLworCisjaWZuZGVmIF9fRVhURVJOX0lOTElORQorI2RlZmluZSBfX0VYVEVSTl9JTkxJTkUgZXh0ZXJuIGlubGluZQorI2RlZmluZSBfX01NVV9FWFRFUk5fSU5MSU5FCisjZW5kaWYKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCitfX2dldF9uZXdfbW1fY29udGV4dChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgbG9uZyBjcHUpCit7CisJdW5zaWduZWQgbG9uZyBhc24gPSBjcHVfbGFzdF9hc24oY3B1KTsKKwl1bnNpZ25lZCBsb25nIG5leHQgPSBhc24gKyAxOworCisJaWYgKChhc24gJiBIQVJEV0FSRV9BU05fTUFTSykgPj0gTUFYX0FTTikgeworCQl0YmlhcCgpOworCQlpbWIoKTsKKwkJbmV4dCA9IChhc24gJiB+SEFSRFdBUkVfQVNOX01BU0spICsgQVNOX0ZJUlNUX1ZFUlNJT047CisJfQorCWNwdV9sYXN0X2FzbihjcHUpID0gbmV4dDsKKwlyZXR1cm4gbmV4dDsKK30KKworX19FWFRFUk5fSU5MSU5FIHZvaWQKK2V2NV9zd2l0Y2hfbW0oc3RydWN0IG1tX3N0cnVjdCAqcHJldl9tbSwgc3RydWN0IG1tX3N0cnVjdCAqbmV4dF9tbSwKKwkgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQpCit7CisJLyogQ2hlY2sgaWYgb3VyIEFTTiBpcyBvZiBhbiBvbGRlciB2ZXJzaW9uLCBhbmQgdGh1cyBpbnZhbGlkLiAqLworCXVuc2lnbmVkIGxvbmcgYXNuOworCXVuc2lnbmVkIGxvbmcgbW1jOworCWxvbmcgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCisjaWZkZWYgQ09ORklHX1NNUAorCWNwdV9kYXRhW2NwdV0uYXNuX2xvY2sgPSAxOworCWJhcnJpZXIoKTsKKyNlbmRpZgorCWFzbiA9IGNwdV9sYXN0X2FzbihjcHUpOworCW1tYyA9IG5leHRfbW0tPmNvbnRleHRbY3B1XTsKKwlpZiAoKG1tYyBeIGFzbikgJiB+SEFSRFdBUkVfQVNOX01BU0spIHsKKwkJbW1jID0gX19nZXRfbmV3X21tX2NvbnRleHQobmV4dF9tbSwgY3B1KTsKKwkJbmV4dF9tbS0+Y29udGV4dFtjcHVdID0gbW1jOworCX0KKyNpZmRlZiBDT05GSUdfU01QCisJZWxzZQorCQljcHVfZGF0YVtjcHVdLm5lZWRfbmV3X2FzbiA9IDE7CisjZW5kaWYKKworCS8qIEFsd2F5cyB1cGRhdGUgdGhlIFBDQiBBU04uICBBbm90aGVyIHRocmVhZCBtYXkgaGF2ZSBhbGxvY2F0ZWQKKwkgICBhIG5ldyBtbS0+Y29udGV4dCAodmlhIGZsdXNoX3RsYl9tbSkgd2l0aG91dCB0aGUgQVNOIHNlcmlhbAorCSAgIG51bWJlciB3cmFwcGluZy4gIFdlIGhhdmUgbm8gd2F5IHRvIGRldGVjdCB3aGVuIHRoaXMgaXMgbmVlZGVkLiAgKi8KKwluZXh0LT50aHJlYWRfaW5mby0+cGNiLmFzbiA9IG1tYyAmIEhBUkRXQVJFX0FTTl9NQVNLOworfQorCitfX0VYVEVSTl9JTkxJTkUgdm9pZAorZXY0X3N3aXRjaF9tbShzdHJ1Y3QgbW1fc3RydWN0ICpwcmV2X21tLCBzdHJ1Y3QgbW1fc3RydWN0ICpuZXh0X21tLAorCSAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCkKK3sKKwkvKiBBcyBkZXNjcmliZWQsIEFTTidzIGFyZSBicm9rZW4gZm9yIFRMQiB1c2FnZS4gIEJ1dCB3ZSBjYW4KKwkgICBvcHRpbWl6ZSBmb3Igc3dpdGNoaW5nIGJldHdlZW4gdGhyZWFkcyAtLSBpZiB0aGUgbW0gaXMKKwkgICB1bmNoYW5nZWQgZnJvbSBjdXJyZW50IHdlIG5lZWRuJ3QgZmx1c2guICAqLworCS8qID8/PyBNYXkgbm90IGJlIG5lZWRlZCBiZWNhdXNlIEVWNCBQQUxjb2RlIHJlY29nbml6ZXMgdGhhdAorCSAgIEFTTidzIGFyZSBicm9rZW4gYW5kIGRvZXMgYSB0YmlhcCBpdHNlbGYgb24gc3dwY3R4LCB1bmRlcgorCSAgIHRoZSAiTXVzdCBzZXQgQVNOIG9yIGZsdXNoIiBydWxlLiAgQXQgbGVhc3QgdGhpcyBpcyB0cnVlCisJICAgZm9yIGEgMTk5MiBTUk0sIHJlcG9ydHMgSm9zZXBoIE1hcnRpbiAoam1hcnRpbkBobG8uZGVjLmNvbSkuCisJICAgSSdtIGdvaW5nIHRvIGxlYXZlIHRoaXMgaGVyZSBhbnl3YXksIGp1c3QgdG8gQmUgU3VyZS4gIC0tIHJ+ICAqLworCWlmIChwcmV2X21tICE9IG5leHRfbW0pCisJCXRiaWFwKCk7CisKKwkvKiBEbyBjb250aW51ZSB0byBhbGxvY2F0ZSBBU05zLCBiZWNhdXNlIHdlIGNhbiBzdGlsbCB1c2UgdGhlbQorCSAgIHRvIGF2b2lkIGZsdXNoaW5nIHRoZSBpY2FjaGUuICAqLworCWV2NV9zd2l0Y2hfbW0ocHJldl9tbSwgbmV4dF9tbSwgbmV4dCk7Cit9CisKK2V4dGVybiB2b2lkIF9fbG9hZF9uZXdfbW1fY29udGV4dChzdHJ1Y3QgbW1fc3RydWN0ICopOworCisjaWZkZWYgQ09ORklHX1NNUAorI2RlZmluZSBjaGVja19tbXVfY29udGV4dCgpCQkJCQlcCitkbyB7CQkJCQkJCQlcCisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsJCQkJXAorCWNwdV9kYXRhW2NwdV0uYXNuX2xvY2sgPSAwOwkJCQlcCisJYmFycmllcigpOwkJCQkJCVwKKwlpZiAoY3B1X2RhdGFbY3B1XS5uZWVkX25ld19hc24pIHsJCQlcCisJCXN0cnVjdCBtbV9zdHJ1Y3QgKiBtbSA9IGN1cnJlbnQtPmFjdGl2ZV9tbTsJXAorCQljcHVfZGF0YVtjcHVdLm5lZWRfbmV3X2FzbiA9IDA7CQkJXAorCQlpZiAoIW1tLT5jb250ZXh0W2NwdV0pCQkJXAorCQkJX19sb2FkX25ld19tbV9jb250ZXh0KG1tKTsJCVwKKwl9CQkJCQkJCVwKK30gd2hpbGUoMCkKKyNlbHNlCisjZGVmaW5lIGNoZWNrX21tdV9jb250ZXh0KCkgIGRvIHsgfSB3aGlsZSgwKQorI2VuZGlmCisKK19fRVhURVJOX0lOTElORSB2b2lkCitldjVfYWN0aXZhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqcHJldl9tbSwgc3RydWN0IG1tX3N0cnVjdCAqbmV4dF9tbSkKK3sKKwlfX2xvYWRfbmV3X21tX2NvbnRleHQobmV4dF9tbSk7Cit9CisKK19fRVhURVJOX0lOTElORSB2b2lkCitldjRfYWN0aXZhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqcHJldl9tbSwgc3RydWN0IG1tX3N0cnVjdCAqbmV4dF9tbSkKK3sKKwlfX2xvYWRfbmV3X21tX2NvbnRleHQobmV4dF9tbSk7CisJdGJpYXAoKTsKK30KKworI2RlZmluZSBkZWFjdGl2YXRlX21tKHRzayxtbSkJZG8geyB9IHdoaWxlICgwKQorCisjaWZkZWYgQ09ORklHX0FMUEhBX0dFTkVSSUMKKyMgZGVmaW5lIHN3aXRjaF9tbShhLGIsYykJYWxwaGFfbXYubXZfc3dpdGNoX21tKChhKSwoYiksKGMpKQorIyBkZWZpbmUgYWN0aXZhdGVfbW0oeCx5KQlhbHBoYV9tdi5tdl9hY3RpdmF0ZV9tbSgoeCksKHkpKQorI2Vsc2UKKyMgaWZkZWYgQ09ORklHX0FMUEhBX0VWNAorIyAgZGVmaW5lIHN3aXRjaF9tbShhLGIsYykJZXY0X3N3aXRjaF9tbSgoYSksKGIpLChjKSkKKyMgIGRlZmluZSBhY3RpdmF0ZV9tbSh4LHkpCWV2NF9hY3RpdmF0ZV9tbSgoeCksKHkpKQorIyBlbHNlCisjICBkZWZpbmUgc3dpdGNoX21tKGEsYixjKQlldjVfc3dpdGNoX21tKChhKSwoYiksKGMpKQorIyAgZGVmaW5lIGFjdGl2YXRlX21tKHgseSkJZXY1X2FjdGl2YXRlX21tKCh4KSwoeSkpCisjIGVuZGlmCisjZW5kaWYKKworZXh0ZXJuIGlubGluZSBpbnQKK2luaXRfbmV3X2NvbnRleHQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IE5SX0NQVVM7IGkrKykKKwkJaWYgKGNwdV9vbmxpbmUoaSkpCisJCQltbS0+Y29udGV4dFtpXSA9IDA7CisJaWYgKHRzayAhPSBjdXJyZW50KQorCQl0c2stPnRocmVhZF9pbmZvLT5wY2IucHRicgorCQkgID0gKCh1bnNpZ25lZCBsb25nKW1tLT5wZ2QgLSBJREVOVF9BRERSKSA+PiBQQUdFX1NISUZUOworCXJldHVybiAwOworfQorCitleHRlcm4gaW5saW5lIHZvaWQKK2Rlc3Ryb3lfY29udGV4dChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwkvKiBOb3RoaW5nIHRvIGRvLiAgKi8KK30KKworc3RhdGljIGlubGluZSB2b2lkCitlbnRlcl9sYXp5X3RsYihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJdHNrLT50aHJlYWRfaW5mby0+cGNiLnB0YnIKKwkgID0gKCh1bnNpZ25lZCBsb25nKW1tLT5wZ2QgLSBJREVOVF9BRERSKSA+PiBQQUdFX1NISUZUOworfQorCisjaWZkZWYgX19NTVVfRVhURVJOX0lOTElORQorI3VuZGVmIF9fRVhURVJOX0lOTElORQorI3VuZGVmIF9fTU1VX0VYVEVSTl9JTkxJTkUKKyNlbmRpZgorCisjZW5kaWYgLyogX19BTFBIQV9NTVVfQ09OVEVYVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9tbXpvbmUuaCBiL2luY2x1ZGUvYXNtLWFscGhhL21tem9uZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyNmMxNTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9tbXpvbmUuaApAQCAtMCwwICsxLDEzMSBAQAorLyoKKyAqIFdyaXR0ZW4gYnkgS2Fub2ogU2FyY2FyIChrYW5vakBzZ2kuY29tKSBBdWcgOTkKKyAqIEFkYXB0ZWQgZm9yIHRoZSBhbHBoYSB3aWxkZmlyZSBhcmNoaXRlY3R1cmUgSmFuIDIwMDEuCisgKi8KKyNpZm5kZWYgX0FTTV9NTVpPTkVfSF8KKyNkZWZpbmUgX0FTTV9NTVpPTkVfSF8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS9zbXAuaD4KKworc3RydWN0IGJvb3RtZW1fZGF0YV90OyAvKiBzdHVwaWQgZm9yd2FyZCBkZWNsLiAqLworCisvKgorICogRm9sbG93aW5nIGFyZSBtYWNyb3MgdGhhdCBhcmUgc3BlY2lmaWMgdG8gdGhpcyBudW1hIHBsYXRmb3JtLgorICovCisKK2V4dGVybiBwZ19kYXRhX3Qgbm9kZV9kYXRhW107CisKKyNkZWZpbmUgYWxwaGFfcGFfdG9fbmlkKHBhKQkJXAorICAgICAgICAoYWxwaGFfbXYucGFfdG9fbmlkIAkJXAorCSA/IGFscGhhX212LnBhX3RvX25pZChwYSkJXAorCSA6ICgwKSkKKyNkZWZpbmUgbm9kZV9tZW1fc3RhcnQobmlkKQkJXAorICAgICAgICAoYWxwaGFfbXYubm9kZV9tZW1fc3RhcnQgCVwKKwkgPyBhbHBoYV9tdi5ub2RlX21lbV9zdGFydChuaWQpIFwKKwkgOiAoMFVMKSkKKyNkZWZpbmUgbm9kZV9tZW1fc2l6ZShuaWQpCQlcCisgICAgICAgIChhbHBoYV9tdi5ub2RlX21lbV9zaXplIAlcCisJID8gYWxwaGFfbXYubm9kZV9tZW1fc2l6ZShuaWQpIAlcCisJIDogKChuaWQpID8gKDBVTCkgOiAofjBVTCkpKQorCisjZGVmaW5lIHBhX3RvX25pZChwYSkJCWFscGhhX3BhX3RvX25pZChwYSkKKyNkZWZpbmUgTk9ERV9EQVRBKG5pZCkJCSgmbm9kZV9kYXRhWyhuaWQpXSkKKworI2RlZmluZSBub2RlX2xvY2FsbnIocGZuLCBuaWQpCSgocGZuKSAtIE5PREVfREFUQShuaWQpLT5ub2RlX3N0YXJ0X3BmbikKKworI2lmIDEKKyNkZWZpbmUgUExBVF9OT0RFX0RBVEFfTE9DQUxOUihwLCBuKQlcCisJKCgocCkgPj4gUEFHRV9TSElGVCkgLSBQTEFUX05PREVfREFUQShuKS0+Z2VuZGF0YS5ub2RlX3N0YXJ0X3BmbikKKyNlbHNlCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK1BMQVRfTk9ERV9EQVRBX0xPQ0FMTlIodW5zaWduZWQgbG9uZyBwLCBpbnQgbikKK3sKKwl1bnNpZ25lZCBsb25nIHRlbXA7CisJdGVtcCA9IHAgPj4gUEFHRV9TSElGVDsKKwlyZXR1cm4gdGVtcCAtIFBMQVRfTk9ERV9EQVRBKG4pLT5nZW5kYXRhLm5vZGVfc3RhcnRfcGZuOworfQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfRElTQ09OVElHTUVNCisKKy8qCisgKiBGb2xsb3dpbmcgYXJlIG1hY3JvcyB0aGF0IGVhY2ggbnVtYSBpbXBsZW1lbnRhdGlvbiBtdXN0IGRlZmluZS4KKyAqLworCisvKgorICogR2l2ZW4gYSBrZXJuZWwgYWRkcmVzcywgZmluZCB0aGUgaG9tZSBub2RlIG9mIHRoZSB1bmRlcmx5aW5nIG1lbW9yeS4KKyAqLworI2RlZmluZSBrdmFkZHJfdG9fbmlkKGthZGRyKQlwYV90b19uaWQoX19wYShrYWRkcikpCisjZGVmaW5lIG5vZGVfbWVtX21hcChuaWQpCShOT0RFX0RBVEEobmlkKS0+bm9kZV9tZW1fbWFwKQorI2RlZmluZSBub2RlX3N0YXJ0X3BmbihuaWQpCShOT0RFX0RBVEEobmlkKS0+bm9kZV9zdGFydF9wZm4pCisKKyNkZWZpbmUgbG9jYWxfbWFwbnIoa3ZhZGRyKSBcCisgICAgICAoKF9fcGEoa3ZhZGRyKSA+PiBQQUdFX1NISUZUKSAtIG5vZGVfc3RhcnRfcGZuKGt2YWRkcl90b19uaWQoa3ZhZGRyKSkpCisKKy8qCisgKiBHaXZlbiBhIGthZGRyLCBMT0NBTF9CQVNFX0FERFIgZmluZHMgdGhlIG93bmluZyBub2RlIG9mIHRoZSBtZW1vcnkKKyAqIGFuZCByZXR1cm5zIHRoZSBrYWRkciBjb3JyZXNwb25kaW5nIHRvIGZpcnN0IHBoeXNpY2FsIHBhZ2UgaW4gdGhlCisgKiBub2RlJ3MgbWVtX21hcC4KKyAqLworI2RlZmluZSBMT0NBTF9CQVNFX0FERFIoa2FkZHIpCQkJCQkJICBcCisgICAgKCh1bnNpZ25lZCBsb25nKV9fdmEoTk9ERV9EQVRBKGt2YWRkcl90b19uaWQoa2FkZHIpKS0+bm9kZV9zdGFydF9wZm4gIFwKKwkJCSA8PCBQQUdFX1NISUZUKSkKKworLyogWFhYOiBGSVhNRSAtLSB3bGkgKi8KKyNkZWZpbmUga2Vybl9hZGRyX3ZhbGlkKGthZGRyKQkoMCkKKworI2RlZmluZSB2aXJ0X3RvX3BhZ2Uoa2FkZHIpCXBmbl90b19wYWdlKF9fcGEoa2FkZHIpID4+IFBBR0VfU0hJRlQpCisKKyNkZWZpbmUgVkFMSURfUEFHRShwYWdlKQkoKChwYWdlKSAtIG1lbV9tYXApIDwgbWF4X21hcG5yKQorCisjZGVmaW5lIHBtZF9wYWdlKHBtZCkJCShwZm5fdG9fcGFnZShwbWRfdmFsKHBtZCkgPj4gMzIpKQorI2RlZmluZSBwdGVfcGZuKHB0ZSkJCShwdGVfdmFsKHB0ZSkgPj4gMzIpCisKKyNkZWZpbmUgbWtfcHRlKHBhZ2UsIHBncHJvdCkJCQkJCQkgICAgIFwKKyh7CQkJCQkJCQkgCSAgICAgXAorCXB0ZV90IHB0ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl1bnNpZ25lZCBsb25nIHBmbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkJCQkJCQkgICAgIFwKKwlwZm4gPSAoKHVuc2lnbmVkIGxvbmcpKChwYWdlKS1wYWdlX3pvbmUocGFnZSktPnpvbmVfbWVtX21hcCkpIDw8IDMyOyBcCisJcGZuICs9IHBhZ2Vfem9uZShwYWdlKS0+em9uZV9zdGFydF9wZm4gPDwgMzI7CQkJICAgICBcCisJcHRlX3ZhbChwdGUpID0gcGZuIHwgcGdwcm90X3ZhbChwZ3Byb3QpOwkJCSAgICAgXAorCQkJCQkJCQkJICAgICBcCisJcHRlOwkJCQkJCQkJICAgICBcCit9KQorCisjZGVmaW5lIHB0ZV9wYWdlKHgpCQkJCQkJCVwKKyh7CQkJCQkJCQkJXAorICAgICAgIAl1bnNpZ25lZCBsb25nIGt2aXJ0OwkJCQkJCVwKKwlzdHJ1Y3QgcGFnZSAqIF9feHg7CQkJCQkJXAorCQkJCQkJCQkJXAorCWt2aXJ0ID0gKHVuc2lnbmVkIGxvbmcpX192YShwdGVfdmFsKHgpID4+ICgzMi1QQUdFX1NISUZUKSk7CVwKKwlfX3h4ID0gdmlydF90b19wYWdlKGt2aXJ0KTsJCQkJCVwKKwkJCQkJCQkJCVwKKwlfX3h4OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSkKKworI2RlZmluZSBwZm5fdG9fcGFnZShwZm4pCQkJCQkJXAorKHsJCQkJCQkJCQlcCisgCXVuc2lnbmVkIGxvbmcga2FkZHIgPSAodW5zaWduZWQgbG9uZylfX3ZhKChwZm4pIDw8IFBBR0VfU0hJRlQpOwlcCisJKG5vZGVfbWVtX21hcChrdmFkZHJfdG9fbmlkKGthZGRyKSkgKyBsb2NhbF9tYXBucihrYWRkcikpOwlcCit9KQorCisjZGVmaW5lIHBhZ2VfdG9fcGZuKHBhZ2UpCQkJCQkJXAorCSgocGFnZSkgLSBwYWdlX3pvbmUocGFnZSktPnpvbmVfbWVtX21hcCArCQkJXAorCSAocGFnZV96b25lKHBhZ2UpLT56b25lX3N0YXJ0X3BmbikpCisKKyNkZWZpbmUgcGFnZV90b19wYShwYWdlKQkJCQkJCVwKKwkoKCggKHBhZ2UpIC0gcGFnZV96b25lKHBhZ2UpLT56b25lX21lbV9tYXAgKQkJCVwKKwkrIHBhZ2Vfem9uZShwYWdlKS0+em9uZV9zdGFydF9wZm4pIDw8IFBBR0VfU0hJRlQpCisKKyNkZWZpbmUgcGZuX3RvX25pZChwZm4pCQlwYV90b19uaWQoKCh1NjQpKHBmbikgPDwgUEFHRV9TSElGVCkpCisjZGVmaW5lIHBmbl92YWxpZChwZm4pCQkJCQkJCVwKKwkoKChwZm4pIC0gbm9kZV9zdGFydF9wZm4ocGZuX3RvX25pZChwZm4pKSkgPAkJCVwKKwkgbm9kZV9zcGFubmVkX3BhZ2VzKHBmbl90b19uaWQocGZuKSkpCQkJCQlcCisKKyNkZWZpbmUgdmlydF9hZGRyX3ZhbGlkKGthZGRyKQlwZm5fdmFsaWQoKF9fcGEoa2FkZHIpID4+IFBBR0VfU0hJRlQpKQorCisjZW5kaWYgLyogQ09ORklHX0RJU0NPTlRJR01FTSAqLworCisjZW5kaWYgLyogX0FTTV9NTVpPTkVfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL21vZHVsZS5oIGIvaW5jbHVkZS9hc20tYWxwaGEvbW9kdWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I2Mzc0MwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL21vZHVsZS5oCkBAIC0wLDAgKzEsMjMgQEAKKyNpZm5kZWYgX0FMUEhBX01PRFVMRV9ICisjZGVmaW5lIF9BTFBIQV9NT0RVTEVfSAorCitzdHJ1Y3QgbW9kX2FyY2hfc3BlY2lmaWMKK3sKKwl1bnNpZ25lZCBpbnQgZ290c2VjaW5kZXg7Cit9OworCisjZGVmaW5lIEVsZl9TeW0gRWxmNjRfU3ltCisjZGVmaW5lIEVsZl9TaGRyIEVsZjY0X1NoZHIKKyNkZWZpbmUgRWxmX0VoZHIgRWxmNjRfRWhkcgorI2RlZmluZSBFbGZfUGhkciBFbGY2NF9QaGRyCisjZGVmaW5lIEVsZl9EeW4gRWxmNjRfRHluCisjZGVmaW5lIEVsZl9SZWwgRWxmNjRfUmVsCisjZGVmaW5lIEVsZl9SZWxhIEVsZjY0X1JlbGEKKworI2RlZmluZSBBUkNIX1NIRl9TTUFMTCBTSEZfQUxQSEFfR1BSRUwKKworI2lmZGVmIE1PRFVMRQorYXNtKCIuc2VjdGlvbiAuZ290LFwiYXdzXCIsQHByb2diaXRzOyAuYWxpZ24gMzsgLnByZXZpb3VzIik7CisjZW5kaWYKKworI2VuZGlmIC8qX0FMUEhBX01PRFVMRV9IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL21zZ2J1Zi5oIGIvaW5jbHVkZS9hc20tYWxwaGEvbXNnYnVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg0OTY1MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL21zZ2J1Zi5oCkBAIC0wLDAgKzEsMjcgQEAKKyNpZm5kZWYgX0FMUEhBX01TR0JVRl9ICisjZGVmaW5lIF9BTFBIQV9NU0dCVUZfSAorCisvKiAKKyAqIFRoZSBtc3FpZDY0X2RzIHN0cnVjdHVyZSBmb3IgYWxwaGEgYXJjaGl0ZWN0dXJlLgorICogTm90ZSBleHRyYSBwYWRkaW5nIGJlY2F1c2UgdGhpcyBzdHJ1Y3R1cmUgaXMgcGFzc2VkIGJhY2sgYW5kIGZvcnRoCisgKiBiZXR3ZWVuIGtlcm5lbCBhbmQgdXNlciBzcGFjZS4KKyAqCisgKiBQYWQgc3BhY2UgaXMgbGVmdCBmb3I6CisgKiAtIDIgbWlzY2VsbGFuZW91cyA2NC1iaXQgdmFsdWVzCisgKi8KKworc3RydWN0IG1zcWlkNjRfZHMgeworCXN0cnVjdCBpcGM2NF9wZXJtIG1zZ19wZXJtOworCV9fa2VybmVsX3RpbWVfdCBtc2dfc3RpbWU7CS8qIGxhc3QgbXNnc25kIHRpbWUgKi8KKwlfX2tlcm5lbF90aW1lX3QgbXNnX3J0aW1lOwkvKiBsYXN0IG1zZ3JjdiB0aW1lICovCisJX19rZXJuZWxfdGltZV90IG1zZ19jdGltZTsJLyogbGFzdCBjaGFuZ2UgdGltZSAqLworCXVuc2lnbmVkIGxvbmcgIG1zZ19jYnl0ZXM7CS8qIGN1cnJlbnQgbnVtYmVyIG9mIGJ5dGVzIG9uIHF1ZXVlICovCisJdW5zaWduZWQgbG9uZyAgbXNnX3FudW07CS8qIG51bWJlciBvZiBtZXNzYWdlcyBpbiBxdWV1ZSAqLworCXVuc2lnbmVkIGxvbmcgIG1zZ19xYnl0ZXM7CS8qIG1heCBudW1iZXIgb2YgYnl0ZXMgb24gcXVldWUgKi8KKwlfX2tlcm5lbF9waWRfdCBtc2dfbHNwaWQ7CS8qIHBpZCBvZiBsYXN0IG1zZ3NuZCAqLworCV9fa2VybmVsX3BpZF90IG1zZ19scnBpZDsJLyogbGFzdCByZWNlaXZlIHBpZCAqLworCXVuc2lnbmVkIGxvbmcgIF9fdW51c2VkMTsKKwl1bnNpZ25lZCBsb25nICBfX3VudXNlZDI7Cit9OworCisjZW5kaWYgLyogX0FMUEhBX01TR0JVRl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9uYW1laS5oIGIvaW5jbHVkZS9hc20tYWxwaGEvbmFtZWkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2M5YmIzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvbmFtZWkuaApAQCAtMCwwICsxLDE3IEBACisvKiAkSWQ6IG5hbWVpLmgsdiAxLjEgMTk5Ni8xMi8xMyAxNDo0ODoyMSBqaiBFeHAgJAorICogbGludXgvaW5jbHVkZS9hc20tYWxwaGEvbmFtZWkuaAorICoKKyAqIEluY2x1ZGVkIGZyb20gbGludXgvZnMvbmFtZWkuYworICovCisKKyNpZm5kZWYgX19BTFBIQV9OQU1FSV9ICisjZGVmaW5lIF9fQUxQSEFfTkFNRUlfSAorCisvKiBUaGlzIGR1bW15IHJvdXRpbmUgbWF5YmUgY2hhbmdlZCB0byBzb21ldGhpbmcgdXNlZnVsCisgKiBmb3IgL3Vzci9nbmVtdWwvIGVtdWxhdGlvbiBzdHVmZi4KKyAqIExvb2sgYXQgYXNtLXNwYXJjL25hbWVpLmggZm9yIGRldGFpbHMuCisgKi8KKworI2RlZmluZSBfX2VtdWxfcHJlZml4KCkgTlVMTAorCisjZW5kaWYgLyogX19BTFBIQV9OQU1FSV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9udW1ub2Rlcy5oIGIvaW5jbHVkZS9hc20tYWxwaGEvbnVtbm9kZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDQyNTgyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvbnVtbm9kZXMuaApAQCAtMCwwICsxLDcgQEAKKyNpZm5kZWYgX0FTTV9NQVhfTlVNTk9ERVNfSAorI2RlZmluZSBfQVNNX01BWF9OVU1OT0RFU19ICisKKy8qIE1heCAxMjggTm9kZXMgLSBNYXJ2ZWwgKi8KKyNkZWZpbmUgTk9ERVNfU0hJRlQJNworCisjZW5kaWYgLyogX0FTTV9NQVhfTlVNTk9ERVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvcGFnZS5oIGIvaW5jbHVkZS9hc20tYWxwaGEvcGFnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1NzdkYWYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9wYWdlLmgKQEAgLTAsMCArMSwxMTUgQEAKKyNpZm5kZWYgX0FMUEhBX1BBR0VfSAorI2RlZmluZSBfQUxQSEFfUEFHRV9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxhc20vcGFsLmg+CisKKy8qIFBBR0VfU0hJRlQgZGV0ZXJtaW5lcyB0aGUgcGFnZSBzaXplICovCisjZGVmaW5lIFBBR0VfU0hJRlQJMTMKKyNkZWZpbmUgUEFHRV9TSVpFCSgxVUwgPDwgUEFHRV9TSElGVCkKKyNkZWZpbmUgUEFHRV9NQVNLCSh+KFBBR0VfU0laRS0xKSkKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworI2RlZmluZSBTVFJJQ1RfTU1fVFlQRUNIRUNLUworCitleHRlcm4gdm9pZCBjbGVhcl9wYWdlKHZvaWQgKnBhZ2UpOworI2RlZmluZSBjbGVhcl91c2VyX3BhZ2UocGFnZSwgdmFkZHIsIHBnKQljbGVhcl9wYWdlKHBhZ2UpCisKKyNkZWZpbmUgYWxsb2NfemVyb2VkX3VzZXJfaGlnaHBhZ2Uodm1hLCB2YWRkcikgYWxsb2NfcGFnZV92bWEoR0ZQX0hJR0hVU0VSIHwgX19HRlBfWkVSTywgdm1hLCB2bWFkZHIpCisjZGVmaW5lIF9fSEFWRV9BUkNIX0FMTE9DX1pFUk9FRF9VU0VSX0hJR0hQQUdFCisKK2V4dGVybiB2b2lkIGNvcHlfcGFnZSh2b2lkICogX3RvLCB2b2lkICogX2Zyb20pOworI2RlZmluZSBjb3B5X3VzZXJfcGFnZSh0bywgZnJvbSwgdmFkZHIsIHBnKQljb3B5X3BhZ2UodG8sIGZyb20pCisKKyNpZmRlZiBTVFJJQ1RfTU1fVFlQRUNIRUNLUworLyoKKyAqIFRoZXNlIGFyZSB1c2VkIHRvIG1ha2UgdXNlIG9mIEMgdHlwZS1jaGVja2luZy4uCisgKi8KK3R5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBwdGU7IH0gcHRlX3Q7Cit0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgcG1kOyB9IHBtZF90OwordHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHBnZDsgfSBwZ2RfdDsKK3R5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBwZ3Byb3Q7IH0gcGdwcm90X3Q7CisKKyNkZWZpbmUgcHRlX3ZhbCh4KQkoKHgpLnB0ZSkKKyNkZWZpbmUgcG1kX3ZhbCh4KQkoKHgpLnBtZCkKKyNkZWZpbmUgcGdkX3ZhbCh4KQkoKHgpLnBnZCkKKyNkZWZpbmUgcGdwcm90X3ZhbCh4KQkoKHgpLnBncHJvdCkKKworI2RlZmluZSBfX3B0ZSh4KQkoKHB0ZV90KSB7ICh4KSB9ICkKKyNkZWZpbmUgX19wbWQoeCkJKChwbWRfdCkgeyAoeCkgfSApCisjZGVmaW5lIF9fcGdkKHgpCSgocGdkX3QpIHsgKHgpIH0gKQorI2RlZmluZSBfX3BncHJvdCh4KQkoKHBncHJvdF90KSB7ICh4KSB9ICkKKworI2Vsc2UKKy8qCisgKiAuLiB3aGlsZSB0aGVzZSBtYWtlIGl0IGVhc2llciBvbiB0aGUgY29tcGlsZXIKKyAqLwordHlwZWRlZiB1bnNpZ25lZCBsb25nIHB0ZV90OwordHlwZWRlZiB1bnNpZ25lZCBsb25nIHBtZF90OwordHlwZWRlZiB1bnNpZ25lZCBsb25nIHBnZF90OwordHlwZWRlZiB1bnNpZ25lZCBsb25nIHBncHJvdF90OworCisjZGVmaW5lIHB0ZV92YWwoeCkJKHgpCisjZGVmaW5lIHBtZF92YWwoeCkJKHgpCisjZGVmaW5lIHBnZF92YWwoeCkJKHgpCisjZGVmaW5lIHBncHJvdF92YWwoeCkJKHgpCisKKyNkZWZpbmUgX19wdGUoeCkJKHgpCisjZGVmaW5lIF9fcGdkKHgpCSh4KQorI2RlZmluZSBfX3BncHJvdCh4KQkoeCkKKworI2VuZGlmIC8qIFNUUklDVF9NTV9UWVBFQ0hFQ0tTICovCisKKy8qIFB1cmUgMl5uIHZlcnNpb24gb2YgZ2V0X29yZGVyICovCitleHRlcm4gX19pbmxpbmVfXyBpbnQgZ2V0X29yZGVyKHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlpbnQgb3JkZXI7CisKKwlzaXplID0gKHNpemUtMSkgPj4gKFBBR0VfU0hJRlQtMSk7CisJb3JkZXIgPSAtMTsKKwlkbyB7CisJCXNpemUgPj49IDE7CisJCW9yZGVyKys7CisJfSB3aGlsZSAoc2l6ZSk7CisJcmV0dXJuIG9yZGVyOworfQorCisjaWZkZWYgVVNFXzQ4X0JJVF9LU0VHCisjZGVmaW5lIFBBR0VfT0ZGU0VUCQkweGZmZmY4MDAwMDAwMDAwMDBVTAorI2Vsc2UKKyNkZWZpbmUgUEFHRV9PRkZTRVQJCTB4ZmZmZmZjMDAwMDAwMDAwMFVMCisjZW5kaWYKKworI2Vsc2UKKworI2lmZGVmIFVTRV80OF9CSVRfS1NFRworI2RlZmluZSBQQUdFX09GRlNFVAkJMHhmZmZmODAwMDAwMDAwMDAwCisjZWxzZQorI2RlZmluZSBQQUdFX09GRlNFVAkJMHhmZmZmZmMwMDAwMDAwMDAwCisjZW5kaWYKKworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKworLyogdG8gYWxpZ24gdGhlIHBvaW50ZXIgdG8gdGhlIChuZXh0KSBwYWdlIGJvdW5kYXJ5ICovCisjZGVmaW5lIFBBR0VfQUxJR04oYWRkcikJKCgoYWRkcikrUEFHRV9TSVpFLTEpJlBBR0VfTUFTSykKKworI2RlZmluZSBfX3BhKHgpCQkJKCh1bnNpZ25lZCBsb25nKSAoeCkgLSBQQUdFX09GRlNFVCkKKyNkZWZpbmUgX192YSh4KQkJCSgodm9pZCAqKSgodW5zaWduZWQgbG9uZykgKHgpICsgUEFHRV9PRkZTRVQpKQorI2lmbmRlZiBDT05GSUdfRElTQ09OVElHTUVNCisjZGVmaW5lIHBmbl90b19wYWdlKHBmbikJKG1lbV9tYXAgKyAocGZuKSkKKyNkZWZpbmUgcGFnZV90b19wZm4ocGFnZSkJKCh1bnNpZ25lZCBsb25nKSgocGFnZSkgLSBtZW1fbWFwKSkKKyNkZWZpbmUgdmlydF90b19wYWdlKGthZGRyKQlwZm5fdG9fcGFnZShfX3BhKGthZGRyKSA+PiBQQUdFX1NISUZUKQorCisjZGVmaW5lIHBmbl92YWxpZChwZm4pCQkoKHBmbikgPCBtYXhfbWFwbnIpCisjZGVmaW5lIHZpcnRfYWRkcl92YWxpZChrYWRkcikJcGZuX3ZhbGlkKF9fcGEoa2FkZHIpID4+IFBBR0VfU0hJRlQpCisjZW5kaWYgLyogQ09ORklHX0RJU0NPTlRJR01FTSAqLworCisjZGVmaW5lIFZNX0RBVEFfREVGQVVMVF9GTEFHUwkJKFZNX1JFQUQgfCBWTV9XUklURSB8IFZNX0VYRUMgfCBcCisJCQkJCSBWTV9NQVlSRUFEIHwgVk1fTUFZV1JJVEUgfCBWTV9NQVlFWEVDKQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX0FMUEhBX1BBR0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvcGFsLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9wYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjRiYTBkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvcGFsLmgKQEAgLTAsMCArMSw1MSBAQAorI2lmbmRlZiBfX0FMUEhBX1BBTF9ICisjZGVmaW5lIF9fQUxQSEFfUEFMX0gKKworLyoKKyAqIENvbW1vbiBQQUwtY29kZQorICovCisjZGVmaW5lIFBBTF9oYWx0CSAgMAorI2RlZmluZSBQQUxfY2ZsdXNoCSAgMQorI2RlZmluZSBQQUxfZHJhaW5hCSAgMgorI2RlZmluZSBQQUxfYnB0CQkxMjgKKyNkZWZpbmUgUEFMX2J1Z2NoawkxMjkKKyNkZWZpbmUgUEFMX2NobWsJMTMxCisjZGVmaW5lIFBBTF9jYWxsc3lzCTEzMQorI2RlZmluZSBQQUxfaW1iCQkxMzQKKyNkZWZpbmUgUEFMX3JkdW5pcQkxNTgKKyNkZWZpbmUgUEFMX3dydW5pcQkxNTkKKyNkZWZpbmUgUEFMX2dlbnRyYXAJMTcwCisjZGVmaW5lIFBBTF9ucGhhbHQJMTkwCisKKy8qCisgKiBWTVMgc3BlY2lmaWMgUEFMLWNvZGUKKyAqLworI2RlZmluZSBQQUxfc3dwcGFsCTEwCisjZGVmaW5lIFBBTF9tZnByX3ZwdGIJNDEKKworLyoKKyAqIE9TRiBzcGVjaWZpYyBQQUwtY29kZQorICovCisjZGVmaW5lIFBBTF9jc2VydmUJIDkKKyNkZWZpbmUgUEFMX3dyaXBpcgkxMworI2RlZmluZSBQQUxfcmRtY2VzCTE2CisjZGVmaW5lIFBBTF93cm1jZXMJMTcKKyNkZWZpbmUgUEFMX3dyZmVuCTQzCisjZGVmaW5lIFBBTF93cnZwdHB0cgk0NQorI2RlZmluZSBQQUxfanRvcGFsCTQ2CisjZGVmaW5lIFBBTF9zd3BjdHgJNDgKKyNkZWZpbmUgUEFMX3dydmFsCTQ5CisjZGVmaW5lIFBBTF9yZHZhbAk1MAorI2RlZmluZSBQQUxfdGJpCQk1MQorI2RlZmluZSBQQUxfd3JlbnQJNTIKKyNkZWZpbmUgUEFMX3N3cGlwbAk1MworI2RlZmluZSBQQUxfcmRwcwk1NAorI2RlZmluZSBQQUxfd3JrZ3AJNTUKKyNkZWZpbmUgUEFMX3dydXNwCTU2CisjZGVmaW5lIFBBTF93cnBlcmZtb24JNTcKKyNkZWZpbmUgUEFMX3JkdXNwCTU4CisjZGVmaW5lIFBBTF93aGFtaQk2MAorI2RlZmluZSBQQUxfcmV0c3lzCTYxCisjZGVmaW5lIFBBTF9ydGkJCTYzCisKKyNlbmRpZiAvKiBfX0FMUEhBX1BBTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9wYXJhbS5oIGIvaW5jbHVkZS9hc20tYWxwaGEvcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWQwYjNiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvcGFyYW0uaApAQCAtMCwwICsxLDMyIEBACisjaWZuZGVmIF9BU01fQUxQSEFfUEFSQU1fSAorI2RlZmluZSBfQVNNX0FMUEhBX1BBUkFNX0gKKworLyogPz8/IEdyb3NzLiAgSSBkb24ndCB3YW50IHRvIHBhcmFtZXRlcml6ZSB0aGlzLCBhbmQgc3VwcG9zZWRseSB0aGUKKyAgIGhhcmR3YXJlIGlnbm9yZXMgcmVwcm9ncmFtbWluZy4gIFdlIGFsc28gbmVlZCB1c2VybGFuZCBidXktaW4gdG8gdGhlIAorICAgY2hhbmdlIGluIEhaLCBzaW5jZSB0aGlzIGlzIHZpc2libGUgaW4gdGhlIHdhaXQ0IHJlc291cmNlcyBldGMuICAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpZm5kZWYgSFoKKyMgaWZuZGVmIENPTkZJR19BTFBIQV9SQVdISURFCisjICBkZWZpbmUgSFoJMTAyNAorIyBlbHNlCisjICBkZWZpbmUgSFoJMTIwMAorIyBlbmRpZgorI2VuZGlmCisKKyNkZWZpbmUgVVNFUl9IWgkJSFoKKworI2RlZmluZSBFWEVDX1BBR0VTSVpFCTgxOTIKKworI2lmbmRlZiBOT0dST1VQCisjZGVmaW5lIE5PR1JPVVAJCSgtMSkKKyNlbmRpZgorCisjZGVmaW5lIE1BWEhPU1ROQU1FTEVOCTY0CS8qIG1heCBsZW5ndGggb2YgaG9zdG5hbWUgKi8KKworI2lmZGVmIF9fS0VSTkVMX18KKyMgZGVmaW5lIENMT0NLU19QRVJfU0VDCUhaCS8qIGZyZXF1ZW5jeSBhdCB3aGljaCB0aW1lcygpIGNvdW50cyAqLworI2VuZGlmCisKKyNlbmRpZiAvKiBfQVNNX0FMUEhBX1BBUkFNX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL3BhcnBvcnQuaCBiL2luY2x1ZGUvYXNtLWFscGhhL3BhcnBvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWVlN2NiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvcGFycG9ydC5oCkBAIC0wLDAgKzEsMTggQEAKKy8qCisgKiBwYXJwb3J0Lmg6IHBsYXRmb3JtLXNwZWNpZmljIFBDLXN0eWxlIHBhcnBvcnQgaW5pdGlhbGlzYXRpb24KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAgIFRpbSBXYXVnaCA8dGltQGN5YmVyZWxrLmRlbW9uLmNvLnVrPgorICoKKyAqIFRoaXMgZmlsZSBzaG91bGQgb25seSBiZSBpbmNsdWRlZCBieSBkcml2ZXJzL3BhcnBvcnQvcGFycG9ydF9wYy5jLgorICovCisKKyNpZm5kZWYgX0FTTV9BWFBfUEFSUE9SVF9ICisjZGVmaW5lIF9BU01fQVhQX1BBUlBPUlRfSCAxCisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHBhcnBvcnRfcGNfZmluZF9pc2FfcG9ydHMgKGludCBhdXRvaXJxLCBpbnQgYXV0b2RtYSk7CitzdGF0aWMgaW50IF9fZGV2aW5pdCBwYXJwb3J0X3BjX2ZpbmRfbm9ucGNpX3BvcnRzIChpbnQgYXV0b2lycSwgaW50IGF1dG9kbWEpCit7CisJcmV0dXJuIHBhcnBvcnRfcGNfZmluZF9pc2FfcG9ydHMgKGF1dG9pcnEsIGF1dG9kbWEpOworfQorCisjZW5kaWYgLyogIShfQVNNX0FYUF9QQVJQT1JUX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9wY2kuaCBiL2luY2x1ZGUvYXNtLWFscGhhL3BjaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjN2I1N2IKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9wY2kuaApAQCAtMCwwICsxLDI2MSBAQAorI2lmbmRlZiBfX0FMUEhBX1BDSV9ICisjZGVmaW5lIF9fQUxQSEFfUENJX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIGlzIHVzZWQgdG8gbWFuYWdlIG11bHRpcGxlIFBDSSBidXNzZXMuCisgKi8KKworc3RydWN0IHBjaV9kZXY7CitzdHJ1Y3QgcGNpX2J1czsKK3N0cnVjdCByZXNvdXJjZTsKK3N0cnVjdCBwY2lfaW9tbXVfYXJlbmE7CitzdHJ1Y3QgcGFnZTsKKworLyogQSBjb250cm9sbGVyLiAgVXNlZCB0byBtYW5hZ2UgbXVsdGlwbGUgUENJIGJ1c3Nlcy4gICovCisKK3N0cnVjdCBwY2lfY29udHJvbGxlciB7CisJc3RydWN0IHBjaV9jb250cm9sbGVyICpuZXh0OworICAgICAgICBzdHJ1Y3QgcGNpX2J1cyAqYnVzOworCXN0cnVjdCByZXNvdXJjZSAqaW9fc3BhY2U7CisJc3RydWN0IHJlc291cmNlICptZW1fc3BhY2U7CisKKwkvKiBUaGUgZm9sbG93aW5nIGFyZSBmb3IgcmVwb3J0aW5nIHRvIHVzZXJsYW5kLiAgVGhlIGludmFyaWFudCBpcworCSAgIHRoYXQgaWYgd2UgcmVwb3J0IGEgQldYLWNhcGFibGUgZGVuc2UgbWVtb3J5LCB3ZSBkbyBub3QgcmVwb3J0CisJICAgYSBzcGFyc2UgbWVtb3J5IGF0IGFsbCwgZXZlbiBpZiBpdCBleGlzdHMuICAqLworCXVuc2lnbmVkIGxvbmcgc3BhcnNlX21lbV9iYXNlOworCXVuc2lnbmVkIGxvbmcgZGVuc2VfbWVtX2Jhc2U7CisJdW5zaWduZWQgbG9uZyBzcGFyc2VfaW9fYmFzZTsKKwl1bnNpZ25lZCBsb25nIGRlbnNlX2lvX2Jhc2U7CisKKwkvKiBUaGlzIG9uZSdzIGZvciB0aGUga2VybmVsIG9ubHkuICBJdCdzIGluIEtTRUcgc29tZXdoZXJlLiAgKi8KKwl1bnNpZ25lZCBsb25nIGNvbmZpZ19zcGFjZV9iYXNlOworCisJdW5zaWduZWQgaW50IGluZGV4OworCS8qIEZvciBjb21wYXRpYmlsaXR5IHdpdGggY3VycmVudCAoYXMgb2YgSnVseSAyMDAzKSBwY2l1dGlscworCSAgIGFuZCBYRnJlZTg2LiBFdmVudHVhbGx5IHdpbGwgYmUgcmVtb3ZlZC4gKi8KKwl1bnNpZ25lZCBpbnQgbmVlZF9kb21haW5faW5mbzsKKworCXN0cnVjdCBwY2lfaW9tbXVfYXJlbmEgKnNnX3BjaTsKKwlzdHJ1Y3QgcGNpX2lvbW11X2FyZW5hICpzZ19pc2E7CisKKwl2b2lkICpzeXNkYXRhOworfTsKKworLyogT3ZlcnJpZGUgdGhlIGxvZ2ljIGluIHBjaV9zY2FuX2J1cyBmb3Igc2tpcHBpbmcgYWxyZWFkeS1jb25maWd1cmVkCisgICBidXMgbnVtYmVycy4gICovCisKKyNkZWZpbmUgcGNpYmlvc19hc3NpZ25fYWxsX2J1c3NlcygpCTEKKyNkZWZpbmUgcGNpYmlvc19zY2FuX2FsbF9mbnMoYSwgYikJMAorCisjZGVmaW5lIFBDSUJJT1NfTUlOX0lPCQlhbHBoYV9tdi5taW5faW9fYWRkcmVzcworI2RlZmluZSBQQ0lCSU9TX01JTl9NRU0JCWFscGhhX212Lm1pbl9tZW1fYWRkcmVzcworCitleHRlcm4gdm9pZCBwY2liaW9zX3NldF9tYXN0ZXIoc3RydWN0IHBjaV9kZXYgKmRldik7CisKK2V4dGVybiBpbmxpbmUgdm9pZCBwY2liaW9zX3BlbmFsaXplX2lzYV9pcnEoaW50IGlycSkKK3sKKwkvKiBXZSBkb24ndCBkbyBkeW5hbWljIFBDSSBJUlEgYWxsb2NhdGlvbiAqLworfQorCisvKiBJT01NVSBjb250cm9scy4gICovCisKKy8qIFRoZSBQQ0kgYWRkcmVzcyBzcGFjZSBkb2VzIG5vdCBlcXVhbCB0aGUgcGh5c2ljYWwgbWVtb3J5IGFkZHJlc3Mgc3BhY2UuCisgICBUaGUgbmV0d29ya2luZyBhbmQgYmxvY2sgZGV2aWNlIGxheWVycyB1c2UgdGhpcyBib29sZWFuIGZvciBib3VuY2UgYnVmZmVyCisgICBkZWNpc2lvbnMuICAqLworI2RlZmluZSBQQ0lfRE1BX0JVU19JU19QSFlTICAwCisKKy8qIEFsbG9jYXRlIGFuZCBtYXAga2VybmVsIGJ1ZmZlciB1c2luZyBjb25zaXN0ZW50IG1vZGUgRE1BIGZvciBQQ0kKKyAgIGRldmljZS4gIFJldHVybnMgbm9uLU5VTEwgY3B1LXZpZXcgcG9pbnRlciB0byB0aGUgYnVmZmVyIGlmCisgICBzdWNjZXNzZnVsIGFuZCBzZXRzICpETUFfQUREUlAgdG8gdGhlIHBjaSBzaWRlIGRtYSBhZGRyZXNzIGFzIHdlbGwsCisgICBlbHNlIERNQV9BRERSUCBpcyB1bmRlZmluZWQuICAqLworCitleHRlcm4gdm9pZCAqcGNpX2FsbG9jX2NvbnNpc3RlbnQoc3RydWN0IHBjaV9kZXYgKiwgc2l6ZV90LCBkbWFfYWRkcl90ICopOworCisvKiBGcmVlIGFuZCB1bm1hcCBhIGNvbnNpc3RlbnQgRE1BIGJ1ZmZlci4gIENQVV9BRERSIGFuZCBETUFfQUREUiBtdXN0CisgICBiZSB2YWx1ZXMgdGhhdCB3ZXJlIHJldHVybmVkIGZyb20gcGNpX2FsbG9jX2NvbnNpc3RlbnQuICBTSVpFIG11c3QKKyAgIGJlIHRoZSBzYW1lIGFzIHdoYXQgYXMgcGFzc2VkIGludG8gcGNpX2FsbG9jX2NvbnNpc3RlbnQuCisgICBSZWZlcmVuY2VzIHRvIHRoZSBtZW1vcnkgYW5kIG1hcHBpbmdzIGFzc29jaWF0ZWQgd2l0aCBDUFVfQUREUiBvcgorICAgRE1BX0FERFIgcGFzdCB0aGlzIGNhbGwgYXJlIGlsbGVnYWwuICAqLworCitleHRlcm4gdm9pZCBwY2lfZnJlZV9jb25zaXN0ZW50KHN0cnVjdCBwY2lfZGV2ICosIHNpemVfdCwgdm9pZCAqLCBkbWFfYWRkcl90KTsKKworLyogTWFwIGEgc2luZ2xlIGJ1ZmZlciBvZiB0aGUgaW5kaWNhdGUgc2l6ZSBmb3IgUENJIERNQSBpbiBzdHJlYW1pbmcgbW9kZS4KKyAgIFRoZSAzMi1iaXQgUENJIGJ1cyBtYXN0ZXJpbmcgYWRkcmVzcyB0byB1c2UgaXMgcmV0dXJuZWQuICBPbmNlIHRoZSBkZXZpY2UKKyAgIGlzIGdpdmVuIHRoZSBkbWEgYWRkcmVzcywgdGhlIGRldmljZSBvd25zIHRoaXMgbWVtb3J5IHVudGlsIGVpdGhlcgorICAgcGNpX3VubWFwX3NpbmdsZSBvciBwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUgaXMgcGVyZm9ybWVkLiAgKi8KKworZXh0ZXJuIGRtYV9hZGRyX3QgcGNpX21hcF9zaW5nbGUoc3RydWN0IHBjaV9kZXYgKiwgdm9pZCAqLCBzaXplX3QsIGludCk7CisKKy8qIExpa2V3aXNlLCBidXQgZm9yIGEgcGFnZSBpbnN0ZWFkIG9mIGFuIGFkZHJlc3MuICAqLworZXh0ZXJuIGRtYV9hZGRyX3QgcGNpX21hcF9wYWdlKHN0cnVjdCBwY2lfZGV2ICosIHN0cnVjdCBwYWdlICosCisJCQkgICAgICAgdW5zaWduZWQgbG9uZywgc2l6ZV90LCBpbnQpOworCisvKiBUZXN0IGZvciBwY2lfbWFwX3NpbmdsZSBvciBwY2lfbWFwX3BhZ2UgaGF2aW5nIGdlbmVyYXRlZCBhbiBlcnJvci4gICovCisKK3N0YXRpYyBpbmxpbmUgaW50CitwY2lfZG1hX21hcHBpbmdfZXJyb3IoZG1hX2FkZHJfdCBkbWFfYWRkcikKK3sKKwlyZXR1cm4gZG1hX2FkZHIgPT0gMDsKK30KKworLyogVW5tYXAgYSBzaW5nbGUgc3RyZWFtaW5nIG1vZGUgRE1BIHRyYW5zbGF0aW9uLiAgVGhlIERNQV9BRERSIGFuZAorICAgU0laRSBtdXN0IG1hdGNoIHdoYXQgd2FzIHByb3ZpZGVkIGZvciBpbiBhIHByZXZpb3VzIHBjaV9tYXBfc2luZ2xlCisgICBjYWxsLiAgQWxsIG90aGVyIHVzYWdlcyBhcmUgdW5kZWZpbmVkLiAgQWZ0ZXIgdGhpcyBjYWxsLCByZWFkcyBieQorICAgdGhlIGNwdSB0byB0aGUgYnVmZmVyIGFyZSBndWFyYW50ZWVkIHRvIHNlZSB3aGF0ZXZlciB0aGUgZGV2aWNlCisgICB3cm90ZSB0aGVyZS4gICovCisKK2V4dGVybiB2b2lkIHBjaV91bm1hcF9zaW5nbGUoc3RydWN0IHBjaV9kZXYgKiwgZG1hX2FkZHJfdCwgc2l6ZV90LCBpbnQpOworZXh0ZXJuIHZvaWQgcGNpX3VubWFwX3BhZ2Uoc3RydWN0IHBjaV9kZXYgKiwgZG1hX2FkZHJfdCwgc2l6ZV90LCBpbnQpOworCisvKiBwY2lfdW5tYXBfe3NpbmdsZSxwYWdlfSBpcyBub3QgYSBub3AsIHRodXMuLi4gKi8KKyNkZWZpbmUgREVDTEFSRV9QQ0lfVU5NQVBfQUREUihBRERSX05BTUUpCVwKKwlkbWFfYWRkcl90IEFERFJfTkFNRTsKKyNkZWZpbmUgREVDTEFSRV9QQ0lfVU5NQVBfTEVOKExFTl9OQU1FKQkJXAorCV9fdTMyIExFTl9OQU1FOworI2RlZmluZSBwY2lfdW5tYXBfYWRkcihQVFIsIEFERFJfTkFNRSkJCQlcCisJKChQVFIpLT5BRERSX05BTUUpCisjZGVmaW5lIHBjaV91bm1hcF9hZGRyX3NldChQVFIsIEFERFJfTkFNRSwgVkFMKQkJXAorCSgoKFBUUiktPkFERFJfTkFNRSkgPSAoVkFMKSkKKyNkZWZpbmUgcGNpX3VubWFwX2xlbihQVFIsIExFTl9OQU1FKQkJCVwKKwkoKFBUUiktPkxFTl9OQU1FKQorI2RlZmluZSBwY2lfdW5tYXBfbGVuX3NldChQVFIsIExFTl9OQU1FLCBWQUwpCQlcCisJKCgoUFRSKS0+TEVOX05BTUUpID0gKFZBTCkpCisKKy8qIE1hcCBhIHNldCBvZiBidWZmZXJzIGRlc2NyaWJlZCBieSBzY2F0dGVybGlzdCBpbiBzdHJlYW1pbmcgbW9kZSBmb3IKKyAgIFBDSSBETUEuICBUaGlzIGlzIHRoZSBzY2F0dGVyLWdhdGhlciB2ZXJzaW9uIG9mIHRoZSBhYm92ZQorICAgcGNpX21hcF9zaW5nbGUgaW50ZXJmYWNlLiAgSGVyZSB0aGUgc2NhdHRlciBnYXRoZXIgbGlzdCBlbGVtZW50cworICAgYXJlIGVhY2ggdGFnZ2VkIHdpdGggdGhlIGFwcHJvcHJpYXRlIFBDSSBkbWEgYWRkcmVzcyBhbmQgbGVuZ3RoLgorICAgVGhleSBhcmUgb2J0YWluZWQgdmlhIHNnX2RtYV97YWRkcmVzcyxsZW5ndGh9KFNHKS4KKworICAgTk9URTogQW4gaW1wbGVtZW50YXRpb24gbWF5IGJlIGFibGUgdG8gdXNlIGEgc21hbGxlciBudW1iZXIgb2YgRE1BCisgICBhZGRyZXNzL2xlbmd0aCBwYWlycyB0aGFuIHRoZXJlIGFyZSBTRyB0YWJsZSBlbGVtZW50cy4gIChmb3IKKyAgIGV4YW1wbGUgdmlhIHZpcnR1YWwgbWFwcGluZyBjYXBhYmlsaXRpZXMpIFRoZSByb3V0aW5lIHJldHVybnMgdGhlCisgICBudW1iZXIgb2YgYWRkci9sZW5ndGggcGFpcnMgYWN0dWFsbHkgdXNlZCwgYXQgbW9zdCBuZW50cy4KKworICAgRGV2aWNlIG93bmVyc2hpcCBpc3N1ZXMgYXMgbWVudGlvbmVkIGFib3ZlIGZvciBwY2lfbWFwX3NpbmdsZSBhcmUKKyAgIHRoZSBzYW1lIGhlcmUuICAqLworCitleHRlcm4gaW50IHBjaV9tYXBfc2coc3RydWN0IHBjaV9kZXYgKiwgc3RydWN0IHNjYXR0ZXJsaXN0ICosIGludCwgaW50KTsKKworLyogVW5tYXAgYSBzZXQgb2Ygc3RyZWFtaW5nIG1vZGUgRE1BIHRyYW5zbGF0aW9ucy4gIEFnYWluLCBjcHUgcmVhZAorICAgcnVsZXMgY29uY2VybmluZyBjYWxscyBoZXJlIGFyZSB0aGUgc2FtZSBhcyBmb3IgcGNpX3VubWFwX3NpbmdsZSgpCisgICBhYm92ZS4gICovCisKK2V4dGVybiB2b2lkIHBjaV91bm1hcF9zZyhzdHJ1Y3QgcGNpX2RldiAqLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKiwgaW50LCBpbnQpOworCisvKiBNYWtlIHBoeXNpY2FsIG1lbW9yeSBjb25zaXN0ZW50IGZvciBhIHNpbmdsZSBzdHJlYW1pbmcgbW9kZSBETUEKKyAgIHRyYW5zbGF0aW9uIGFmdGVyIGEgdHJhbnNmZXIgYW5kIGRldmljZSBjdXJyZW50bHkgaGFzIG93bmVyc2hpcAorICAgb2YgdGhlIGJ1ZmZlci4KKworICAgSWYgeW91IHBlcmZvcm0gYSBwY2lfbWFwX3NpbmdsZSgpIGJ1dCB3aXNoIHRvIGludGVycm9nYXRlIHRoZQorICAgYnVmZmVyIHVzaW5nIHRoZSBjcHUsIHlldCBkbyBub3Qgd2lzaCB0byB0ZWFyZG93biB0aGUgUENJIGRtYQorICAgbWFwcGluZywgeW91IG11c3QgY2FsbCB0aGlzIGZ1bmN0aW9uIGJlZm9yZSBkb2luZyBzby4gIEF0IHRoZSBuZXh0CisgICBwb2ludCB5b3UgZ2l2ZSB0aGUgUENJIGRtYSBhZGRyZXNzIGJhY2sgdG8gdGhlIGNhcmQsIHlvdSBtdXN0IGZpcnN0CisgICBwZXJmb3JtIGEgcGNpX2RtYV9zeW5jX2Zvcl9kZXZpY2UsIGFuZCB0aGVuIHRoZSBkZXZpY2UgYWdhaW4gb3ducworICAgdGhlIGJ1ZmZlci4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHN0cnVjdCBwY2lfZGV2ICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIsCisJCQkgICAgbG9uZyBzaXplLCBpbnQgZGlyZWN0aW9uKQoreworCS8qIE5vdGhpbmcgdG8gZG8uICAqLworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3BjaV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyLAorCQkJICAgICAgIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKQoreworCS8qIE5vdGhpbmcgdG8gZG8uICAqLworfQorCisvKiBNYWtlIHBoeXNpY2FsIG1lbW9yeSBjb25zaXN0ZW50IGZvciBhIHNldCBvZiBzdHJlYW1pbmcgbW9kZSBETUEKKyAgIHRyYW5zbGF0aW9ucyBhZnRlciBhIHRyYW5zZmVyLiAgVGhlIHNhbWUgYXMgcGNpX2RtYV9zeW5jX3NpbmdsZV8qCisgICBidXQgZm9yIGEgc2NhdHRlci1nYXRoZXIgbGlzdCwgc2FtZSBydWxlcyBhbmQgdXNhZ2UuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK3BjaV9kbWFfc3luY19zZ19mb3JfY3B1KHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJCQlpbnQgbmVudHMsIGludCBkaXJlY3Rpb24pCit7CisJLyogTm90aGluZyB0byBkby4gICovCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcGNpX2RtYV9zeW5jX3NnX2Zvcl9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwkJCSAgIGludCBuZW50cywgaW50IGRpcmVjdGlvbikKK3sKKwkvKiBOb3RoaW5nIHRvIGRvLiAgKi8KK30KKworLyogUmV0dXJuIHdoZXRoZXIgdGhlIGdpdmVuIFBDSSBkZXZpY2UgRE1BIGFkZHJlc3MgbWFzayBjYW4KKyAgIGJlIHN1cHBvcnRlZCBwcm9wZXJseS4gIEZvciBleGFtcGxlLCBpZiB5b3VyIGRldmljZSBjYW4KKyAgIG9ubHkgZHJpdmUgdGhlIGxvdyAyNC1iaXRzIGR1cmluZyBQQ0kgYnVzIG1hc3RlcmluZywgdGhlbgorICAgeW91IHdvdWxkIHBhc3MgMHgwMGZmZmZmZiBhcyB0aGUgbWFzayB0byB0aGlzIGZ1bmN0aW9uLiAgKi8KKworZXh0ZXJuIGludCBwY2lfZG1hX3N1cHBvcnRlZChzdHJ1Y3QgcGNpX2RldiAqaHdkZXYsIHU2NCBtYXNrKTsKKworLyogVHJ1ZSBpZiB0aGUgbWFjaGluZSBzdXBwb3J0cyBEQUMgYWRkcmVzc2luZywgYW5kIERFViBjYW4KKyAgIG1ha2UgdXNlIG9mIGl0IGdpdmVuIE1BU0suICAqLworZXh0ZXJuIGludCBwY2lfZGFjX2RtYV9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCB1NjQgbWFzayk7CisKKy8qIENvbnZlcnQgdG8vZnJvbSBEQUMgZG1hIGFkZHJlc3MgYW5kIHN0cnVjdCBwYWdlLiAgKi8KK2V4dGVybiBkbWE2NF9hZGRyX3QgcGNpX2RhY19wYWdlX3RvX2RtYShzdHJ1Y3QgcGNpX2RldiAqLCBzdHJ1Y3QgcGFnZSAqLAorCQkJCQl1bnNpZ25lZCBsb25nLCBpbnQpOworZXh0ZXJuIHN0cnVjdCBwYWdlICpwY2lfZGFjX2RtYV90b19wYWdlKHN0cnVjdCBwY2lfZGV2ICosIGRtYTY0X2FkZHJfdCk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBwY2lfZGFjX2RtYV90b19vZmZzZXQoc3RydWN0IHBjaV9kZXYgKiwgZG1hNjRfYWRkcl90KTsKKworc3RhdGljIGlubGluZSB2b2lkCitwY2lfZGFjX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBkbWE2NF9hZGRyX3QgZG1hX2FkZHIsCisJCQkJc2l6ZV90IGxlbiwgaW50IGRpcmVjdGlvbikKK3sKKwkvKiBOb3RoaW5nIHRvIGRvLiAqLworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3BjaV9kYWNfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGRtYTY0X2FkZHJfdCBkbWFfYWRkciwKKwkJCQkgICBzaXplX3QgbGVuLCBpbnQgZGlyZWN0aW9uKQoreworCS8qIE5vdGhpbmcgdG8gZG8uICovCit9CisKKy8qIFRPRE86IGludGVncmF0ZSB3aXRoIGluY2x1ZGUvYXNtLWdlbmVyaWMvcGNpLmggPyAqLworc3RhdGljIGlubGluZSBpbnQgcGNpX2dldF9sZWdhY3lfaWRlX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgY2hhbm5lbCkKK3sKKwlyZXR1cm4gY2hhbm5lbCA/IDE1IDogMTQ7Cit9CisKK2V4dGVybiB2b2lkIHBjaWJpb3NfcmVzb3VyY2VfdG9fYnVzKHN0cnVjdCBwY2lfZGV2ICosIHN0cnVjdCBwY2lfYnVzX3JlZ2lvbiAqLAorCQkJCSAgICBzdHJ1Y3QgcmVzb3VyY2UgKik7CisKKyNkZWZpbmUgcGNpX2RvbWFpbl9ucihidXMpICgoc3RydWN0IHBjaV9jb250cm9sbGVyICopKGJ1cyktPnN5c2RhdGEpLT5pbmRleAorCitzdGF0aWMgaW5saW5lIGludCBwY2lfcHJvY19kb21haW4oc3RydWN0IHBjaV9idXMgKmJ1cykKK3sKKwlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UgPSBidXMtPnN5c2RhdGE7CisJcmV0dXJuIGhvc2UtPm5lZWRfZG9tYWluX2luZm87Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcGNpYmlvc19hZGRfcGxhdGZvcm1fZW50cmllcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworfQorCitzdHJ1Y3QgcGNpX2RldiAqYWxwaGFfZ2VuZGV2X3RvX3BjaShzdHJ1Y3QgZGV2aWNlICpkZXYpOworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisvKiBWYWx1ZXMgZm9yIHRoZSBgd2hpY2gnIGFyZ3VtZW50IHRvIHN5c19wY2ljb25maWdfaW9iYXNlLiAgKi8KKyNkZWZpbmUgSU9CQVNFX0hPU0UJCTAKKyNkZWZpbmUgSU9CQVNFX1NQQVJTRV9NRU0JMQorI2RlZmluZSBJT0JBU0VfREVOU0VfTUVNCTIKKyNkZWZpbmUgSU9CQVNFX1NQQVJTRV9JTwkzCisjZGVmaW5lIElPQkFTRV9ERU5TRV9JTwkJNAorI2RlZmluZSBJT0JBU0VfUk9PVF9CVVMJCTUKKyNkZWZpbmUgSU9CQVNFX0ZST01fSE9TRQkweDEwMDAwCisKKyNlbmRpZiAvKiBfX0FMUEhBX1BDSV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9wZXJjcHUuaCBiL2luY2x1ZGUvYXNtLWFscGhhL3BlcmNwdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4MzQ4ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9wZXJjcHUuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19BTFBIQV9QRVJDUFVfSAorI2RlZmluZSBfX0FMUEhBX1BFUkNQVV9ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wZXJjcHUuaD4KKworI2VuZGlmIC8qIF9fQUxQSEFfUEVSQ1BVX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL3BnYWxsb2MuaCBiL2luY2x1ZGUvYXNtLWFscGhhL3BnYWxsb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDg0NzU2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvcGdhbGxvYy5oCkBAIC0wLDAgKzEsNzggQEAKKyNpZm5kZWYgX0FMUEhBX1BHQUxMT0NfSAorI2RlZmluZSBfQUxQSEFfUEdBTExPQ19ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L21tem9uZS5oPgorCisvKiAgICAgIAorICogQWxsb2NhdGUgYW5kIGZyZWUgcGFnZSB0YWJsZXMuIFRoZSB4eHhfa2VybmVsKCkgdmVyc2lvbnMgYXJlCisgKiB1c2VkIHRvIGFsbG9jYXRlIGEga2VybmVsIHBhZ2UgdGFibGUgLSB0aGlzIHR1cm5zIG9uIEFTTiBiaXRzCisgKiBpZiBhbnkuCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitwbWRfcG9wdWxhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQsIHN0cnVjdCBwYWdlICpwdGUpCit7CisJcG1kX3NldChwbWQsIChwdGVfdCAqKShwYWdlX3RvX3BhKHB0ZSkgKyBQQUdFX09GRlNFVCkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3BtZF9wb3B1bGF0ZV9rZXJuZWwoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQsIHB0ZV90ICpwdGUpCit7CisJcG1kX3NldChwbWQsIHB0ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcGdkX3BvcHVsYXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkLCBwbWRfdCAqcG1kKQoreworCXBnZF9zZXQocGdkLCBwbWQpOworfQorCitleHRlcm4gcGdkX3QgKnBnZF9hbGxvYyhzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcGdkX2ZyZWUocGdkX3QgKnBnZCkKK3sKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcGdkKTsKK30KKworc3RhdGljIGlubGluZSBwbWRfdCAqCitwbWRfYWxsb2Nfb25lKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisJcG1kX3QgKnJldCA9IChwbWRfdCAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMfF9fR0ZQX1JFUEVBVHxfX0dGUF9aRVJPKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3BtZF9mcmVlKHBtZF90ICpwbWQpCit7CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXBtZCk7Cit9CisKK2V4dGVybiBwdGVfdCAqcHRlX2FsbG9jX29uZV9rZXJuZWwoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcik7CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcHRlX2ZyZWVfa2VybmVsKHB0ZV90ICpwdGUpCit7CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXB0ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKgorcHRlX2FsbG9jX29uZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCXB0ZV90ICpwdGUgPSBwdGVfYWxsb2Nfb25lX2tlcm5lbChtbSwgYWRkcik7CisJaWYgKHB0ZSkKKwkJcmV0dXJuIHZpcnRfdG9fcGFnZShwdGUpOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3B0ZV9mcmVlKHN0cnVjdCBwYWdlICpwYWdlKQoreworCV9fZnJlZV9wYWdlKHBhZ2UpOworfQorCisjZGVmaW5lIGNoZWNrX3BndF9jYWNoZSgpCWRvIHsgfSB3aGlsZSAoMCkKKworI2VuZGlmIC8qIF9BTFBIQV9QR0FMTE9DX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLWFscGhhL3BndGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWFlMTk2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvcGd0YWJsZS5oCkBAIC0wLDAgKzEsMzY5IEBACisjaWZuZGVmIF9BTFBIQV9QR1RBQkxFX0gKKyNkZWZpbmUgX0FMUEhBX1BHVEFCTEVfSAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvNGxldmVsLWZpeHVwLmg+CisKKy8qCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGZ1bmN0aW9ucyBhbmQgZGVmaW5lcyBuZWNlc3NhcnkgdG8gbW9kaWZ5IGFuZCB1c2UKKyAqIHRoZSBBbHBoYSBwYWdlIHRhYmxlIHRyZWUuCisgKgorICogVGhpcyBob3BlZnVsbHkgd29ya3Mgd2l0aCBhbnkgc3RhbmRhcmQgQWxwaGEgcGFnZS1zaXplLCBhcyBkZWZpbmVkCisgKiBpbiA8YXNtL3BhZ2UuaD4gKGN1cnJlbnRseSA4MTkyKS4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21tem9uZS5oPgorCisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CS8qIEZvciBUQVNLX1NJWkUgKi8KKyNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgorCisvKiBDZXJ0YWluIGFyY2hpdGVjdHVyZXMgbmVlZCB0byBkbyBzcGVjaWFsIHRoaW5ncyB3aGVuIFBURXMKKyAqIHdpdGhpbiBhIHBhZ2UgdGFibGUgYXJlIGRpcmVjdGx5IG1vZGlmaWVkLiAgVGh1cywgdGhlIGZvbGxvd2luZworICogaG9vayBpcyBtYWRlIGF2YWlsYWJsZS4KKyAqLworI2RlZmluZSBzZXRfcHRlKHB0ZXB0ciwgcHRldmFsKSAoKCoocHRlcHRyKSkgPSAocHRldmFsKSkKKyNkZWZpbmUgc2V0X3B0ZV9hdChtbSxhZGRyLHB0ZXAscHRldmFsKSBzZXRfcHRlKHB0ZXAscHRldmFsKQorCisvKiBQTURfU0hJRlQgZGV0ZXJtaW5lcyB0aGUgc2l6ZSBvZiB0aGUgYXJlYSBhIHNlY29uZC1sZXZlbCBwYWdlIHRhYmxlIGNhbiBtYXAgKi8KKyNkZWZpbmUgUE1EX1NISUZUCShQQUdFX1NISUZUICsgKFBBR0VfU0hJRlQtMykpCisjZGVmaW5lIFBNRF9TSVpFCSgxVUwgPDwgUE1EX1NISUZUKQorI2RlZmluZSBQTURfTUFTSwkofihQTURfU0laRS0xKSkKKworLyogUEdESVJfU0hJRlQgZGV0ZXJtaW5lcyB3aGF0IGEgdGhpcmQtbGV2ZWwgcGFnZSB0YWJsZSBlbnRyeSBjYW4gbWFwICovCisjZGVmaW5lIFBHRElSX1NISUZUCShQQUdFX1NISUZUICsgMiooUEFHRV9TSElGVC0zKSkKKyNkZWZpbmUgUEdESVJfU0laRQkoMVVMIDw8IFBHRElSX1NISUZUKQorI2RlZmluZSBQR0RJUl9NQVNLCSh+KFBHRElSX1NJWkUtMSkpCisKKy8qCisgKiBFbnRyaWVzIHBlciBwYWdlIGRpcmVjdG9yeSBsZXZlbDogIHRoZSBBbHBoYSBpcyB0aHJlZS1sZXZlbCwgd2l0aAorICogYWxsIGxldmVscyBoYXZpbmcgYSBvbmUtcGFnZSBwYWdlIHRhYmxlLgorICovCisjZGVmaW5lIFBUUlNfUEVSX1BURQkoMVVMIDw8IChQQUdFX1NISUZULTMpKQorI2RlZmluZSBQVFJTX1BFUl9QTUQJKDFVTCA8PCAoUEFHRV9TSElGVC0zKSkKKyNkZWZpbmUgUFRSU19QRVJfUEdECSgxVUwgPDwgKFBBR0VfU0hJRlQtMykpCisjZGVmaW5lIFVTRVJfUFRSU19QRVJfUEdECShUQVNLX1NJWkUgLyBQR0RJUl9TSVpFKQorI2RlZmluZSBGSVJTVF9VU0VSX1BHRF9OUgkwCisKKy8qIE51bWJlciBvZiBwb2ludGVycyB0aGF0IGZpdCBvbiBhIHBhZ2U6ICB0aGlzIHdpbGwgZ28gYXdheS4gKi8KKyNkZWZpbmUgUFRSU19QRVJfUEFHRQkoMVVMIDw8IChQQUdFX1NISUZULTMpKQorCisjaWZkZWYgQ09ORklHX0FMUEhBX0xBUkdFX1ZNQUxMT0MKKyNkZWZpbmUgVk1BTExPQ19TVEFSVAkJMHhmZmZmZmUwMDAwMDAwMDAwCisjZWxzZQorI2RlZmluZSBWTUFMTE9DX1NUQVJUCQkoLTIqUEdESVJfU0laRSkKKyNlbmRpZgorI2RlZmluZSBWTUFMTE9DX0VORAkJKC1QR0RJUl9TSVpFKQorCisvKgorICogT1NGLzEgUEFMLWNvZGUtaW1wb3NlZCBwYWdlIHRhYmxlIGJpdHMKKyAqLworI2RlZmluZSBfUEFHRV9WQUxJRAkweDAwMDEKKyNkZWZpbmUgX1BBR0VfRk9SCTB4MDAwMgkvKiB1c2VkIGZvciBwYWdlIHByb3RlY3Rpb24gKGZhdWx0IG9uIHJlYWQpICovCisjZGVmaW5lIF9QQUdFX0ZPVwkweDAwMDQJLyogdXNlZCBmb3IgcGFnZSBwcm90ZWN0aW9uIChmYXVsdCBvbiB3cml0ZSkgKi8KKyNkZWZpbmUgX1BBR0VfRk9FCTB4MDAwOAkvKiB1c2VkIGZvciBwYWdlIHByb3RlY3Rpb24gKGZhdWx0IG9uIGV4ZWMpICovCisjZGVmaW5lIF9QQUdFX0FTTQkweDAwMTAKKyNkZWZpbmUgX1BBR0VfS1JFCTB4MDEwMAkvKiB4eHggLSBzZWUgYmVsb3cgb24gdGhlICJhY2Nlc3NlZCIgYml0ICovCisjZGVmaW5lIF9QQUdFX1VSRQkweDAyMDAJLyogeHh4ICovCisjZGVmaW5lIF9QQUdFX0tXRQkweDEwMDAJLyogdXNlZCB0byBkbyB0aGUgZGlydHkgYml0IGluIHNvZnR3YXJlICovCisjZGVmaW5lIF9QQUdFX1VXRQkweDIwMDAJLyogdXNlZCB0byBkbyB0aGUgZGlydHkgYml0IGluIHNvZnR3YXJlICovCisKKy8qIC4uIGFuZCB0aGVzZSBhcmUgb3VycyAuLi4gKi8KKyNkZWZpbmUgX1BBR0VfRElSVFkJMHgyMDAwMAorI2RlZmluZSBfUEFHRV9BQ0NFU1NFRAkweDQwMDAwCisjZGVmaW5lIF9QQUdFX0ZJTEUJMHg4MDAwMAkvKiBzZXQ6cGFnZWNhY2hlLCB1bnNldDpzd2FwICovCisKKy8qCisgKiBOT1RFISBUaGUgImFjY2Vzc2VkIiBiaXQgaXNuJ3QgbmVjZXNzYXJpbHkgZXhhY3Q6ICBpdCBjYW4gYmUga2VwdCBleGFjdGx5CisgKiBieSBzb2Z0d2FyZSAodXNlIHRoZSBLUkUvVVJFL0tXRS9VV0UgYml0cyBhcHByb3ByaWF0ZWx5KSwgYnV0IEknbGwgZmFrZSBpdC4KKyAqIFVuZGVyIExpbnV4L0FYUCwgdGhlICJhY2Nlc3NlZCIgYml0IGp1c3QgbWVhbnMgInJlYWQiLCBhbmQgSSdsbCBqdXN0IHVzZQorICogdGhlIEtSRS9VUkUgYml0cyB0byB3YXRjaCBmb3IgaXQuIFRoYXQgd2F5IHdlIGRvbid0IG5lZWQgdG8gb3ZlcmxvYWQgdGhlCisgKiBLV0UvVVdFIGJpdHMgd2l0aCBib3RoIGhhbmRsaW5nIGRpcnR5IGFuZCBhY2Nlc3NlZC4KKyAqCisgKiBOb3RlIHRoYXQgdGhlIGtlcm5lbCB1c2VzIHRoZSBhY2Nlc3NlZCBiaXQganVzdCB0byBjaGVjayB3aGV0aGVyIHRvIHBhZ2UKKyAqIG91dCBhIHBhZ2Ugb3Igbm90LCBzbyBpdCBkb2Vzbid0IGhhdmUgdG8gYmUgZXhhY3QgYW55d2F5LgorICovCisKKyNkZWZpbmUgX19ESVJUWV9CSVRTCShfUEFHRV9ESVJUWSB8IF9QQUdFX0tXRSB8IF9QQUdFX1VXRSkKKyNkZWZpbmUgX19BQ0NFU1NfQklUUwkoX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9LUkUgfCBfUEFHRV9VUkUpCisKKyNkZWZpbmUgX1BGTl9NQVNLCTB4RkZGRkZGRkYwMDAwMDAwMFVMCisKKyNkZWZpbmUgX1BBR0VfVEFCTEUJKF9QQUdFX1ZBTElEIHwgX19ESVJUWV9CSVRTIHwgX19BQ0NFU1NfQklUUykKKyNkZWZpbmUgX1BBR0VfQ0hHX01BU0sJKF9QRk5fTUFTSyB8IF9fRElSVFlfQklUUyB8IF9fQUNDRVNTX0JJVFMpCisKKy8qCisgKiBBbGwgdGhlIG5vcm1hbCBtYXNrcyBoYXZlIHRoZSAicGFnZSBhY2Nlc3NlZCIgYml0cyBvbiwgYXMgYW55IHRpbWUgdGhleSBhcmUgdXNlZCwKKyAqIHRoZSBwYWdlIGlzIGFjY2Vzc2VkLiBUaGV5IGFyZSBjbGVhcmVkIG9ubHkgYnkgdGhlIHBhZ2Utb3V0IHJvdXRpbmVzCisgKi8KKyNkZWZpbmUgUEFHRV9OT05FCV9fcGdwcm90KF9QQUdFX1ZBTElEIHwgX19BQ0NFU1NfQklUUyB8IF9QQUdFX0ZPUiB8IF9QQUdFX0ZPVyB8IF9QQUdFX0ZPRSkKKyNkZWZpbmUgUEFHRV9TSEFSRUQJX19wZ3Byb3QoX1BBR0VfVkFMSUQgfCBfX0FDQ0VTU19CSVRTKQorI2RlZmluZSBQQUdFX0NPUFkJX19wZ3Byb3QoX1BBR0VfVkFMSUQgfCBfX0FDQ0VTU19CSVRTIHwgX1BBR0VfRk9XKQorI2RlZmluZSBQQUdFX1JFQURPTkxZCV9fcGdwcm90KF9QQUdFX1ZBTElEIHwgX19BQ0NFU1NfQklUUyB8IF9QQUdFX0ZPVykKKyNkZWZpbmUgUEFHRV9LRVJORUwJX19wZ3Byb3QoX1BBR0VfVkFMSUQgfCBfUEFHRV9BU00gfCBfUEFHRV9LUkUgfCBfUEFHRV9LV0UpCisKKyNkZWZpbmUgX1BBR0VfTk9STUFMKHgpIF9fcGdwcm90KF9QQUdFX1ZBTElEIHwgX19BQ0NFU1NfQklUUyB8ICh4KSkKKworI2RlZmluZSBfUEFHRV9QKHgpIF9QQUdFX05PUk1BTCgoeCkgfCAoKCh4KSAmIF9QQUdFX0ZPVyk/MDpfUEFHRV9GT1cpKQorI2RlZmluZSBfUEFHRV9TKHgpIF9QQUdFX05PUk1BTCh4KQorCisvKgorICogVGhlIGhhcmR3YXJlIGNhbiBoYW5kbGUgd3JpdGUtb25seSBtYXBwaW5ncywgYnV0IGFzIHRoZSBBbHBoYQorICogYXJjaGl0ZWN0dXJlIGRvZXMgYnl0ZS13aWRlIHdyaXRlcyB3aXRoIGEgcmVhZC1tb2RpZnktd3JpdGUKKyAqIHNlcXVlbmNlLCBpdCdzIG5vdCBwcmFjdGljYWwgdG8gaGF2ZSB3cml0ZS13aXRob3V0LXJlYWQgcHJpdnMuCisgKiBUaHVzIHRoZSAiLXctIC0+IHJ3LSIgYW5kICItd3ggLT4gcnd4IiBtYXBwaW5nIGhlcmUgKGFuZCBpbgorICogYXJjaC9hbHBoYS9tbS9mYXVsdC5jKQorICovCisJLyogeHdyICovCisjZGVmaW5lIF9fUDAwMAlfUEFHRV9QKF9QQUdFX0ZPRSB8IF9QQUdFX0ZPVyB8IF9QQUdFX0ZPUikKKyNkZWZpbmUgX19QMDAxCV9QQUdFX1AoX1BBR0VfRk9FIHwgX1BBR0VfRk9XKQorI2RlZmluZSBfX1AwMTAJX1BBR0VfUChfUEFHRV9GT0UpCisjZGVmaW5lIF9fUDAxMQlfUEFHRV9QKF9QQUdFX0ZPRSkKKyNkZWZpbmUgX19QMTAwCV9QQUdFX1AoX1BBR0VfRk9XIHwgX1BBR0VfRk9SKQorI2RlZmluZSBfX1AxMDEJX1BBR0VfUChfUEFHRV9GT1cpCisjZGVmaW5lIF9fUDExMAlfUEFHRV9QKDApCisjZGVmaW5lIF9fUDExMQlfUEFHRV9QKDApCisKKyNkZWZpbmUgX19TMDAwCV9QQUdFX1MoX1BBR0VfRk9FIHwgX1BBR0VfRk9XIHwgX1BBR0VfRk9SKQorI2RlZmluZSBfX1MwMDEJX1BBR0VfUyhfUEFHRV9GT0UgfCBfUEFHRV9GT1cpCisjZGVmaW5lIF9fUzAxMAlfUEFHRV9TKF9QQUdFX0ZPRSkKKyNkZWZpbmUgX19TMDExCV9QQUdFX1MoX1BBR0VfRk9FKQorI2RlZmluZSBfX1MxMDAJX1BBR0VfUyhfUEFHRV9GT1cgfCBfUEFHRV9GT1IpCisjZGVmaW5lIF9fUzEwMQlfUEFHRV9TKF9QQUdFX0ZPVykKKyNkZWZpbmUgX19TMTEwCV9QQUdFX1MoMCkKKyNkZWZpbmUgX19TMTExCV9QQUdFX1MoMCkKKworLyoKKyAqIEJBRF9QQUdFVEFCTEUgaXMgdXNlZCB3aGVuIHdlIG5lZWQgYSBib2d1cyBwYWdlLXRhYmxlLCB3aGlsZQorICogQkFEX1BBR0UgaXMgdXNlZCBmb3IgYSBib2d1cyBwYWdlLgorICoKKyAqIFpFUk9fUEFHRSBpcyBhIGdsb2JhbCBzaGFyZWQgcGFnZSB0aGF0IGlzIGFsd2F5cyB6ZXJvOiAgdXNlZAorICogZm9yIHplcm8tbWFwcGVkIG1lbW9yeSBhcmVhcyBldGMuLgorICovCitleHRlcm4gcHRlX3QgX19iYWRfcGFnZSh2b2lkKTsKK2V4dGVybiBwbWRfdCAqIF9fYmFkX3BhZ2V0YWJsZSh2b2lkKTsKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX196ZXJvX3BhZ2Uodm9pZCk7CisKKyNkZWZpbmUgQkFEX1BBR0VUQUJMRQlfX2JhZF9wYWdldGFibGUoKQorI2RlZmluZSBCQURfUEFHRQlfX2JhZF9wYWdlKCkKKyNkZWZpbmUgWkVST19QQUdFKHZhZGRyKQkodmlydF90b19wYWdlKFpFUk9fUEdFKSkKKworLyogbnVtYmVyIG9mIGJpdHMgdGhhdCBmaXQgaW50byBhIG1lbW9yeSBwb2ludGVyICovCisjZGVmaW5lIEJJVFNfUEVSX1BUUgkJCSg4KnNpemVvZih1bnNpZ25lZCBsb25nKSkKKworLyogdG8gYWxpZ24gdGhlIHBvaW50ZXIgdG8gYSBwb2ludGVyIGFkZHJlc3MgKi8KKyNkZWZpbmUgUFRSX01BU0sJCQkofihzaXplb2Yodm9pZCopLTEpKQorCisvKiBzaXplb2Yodm9pZCopPT0xPDxTSVpFT0ZfUFRSX0xPRzIgKi8KKyNkZWZpbmUgU0laRU9GX1BUUl9MT0cyCQkJMworCisvKiB0byBmaW5kIGFuIGVudHJ5IGluIGEgcGFnZS10YWJsZSAqLworI2RlZmluZSBQQUdFX1BUUihhZGRyZXNzKQkJXAorICAoKHVuc2lnbmVkIGxvbmcpKGFkZHJlc3MpPj4oUEFHRV9TSElGVC1TSVpFT0ZfUFRSX0xPRzIpJlBUUl9NQVNLJn5QQUdFX01BU0spCisKKy8qCisgKiBPbiBjZXJ0YWluIHBsYXRmb3JtcyB3aG9zZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlIGNhbiBvdmVybGFwIEtTRUcsCisgKiBuYW1lbHkgRVY2IGFuZCBhYm92ZSwgd2UgbXVzdCByZS10d2lkZGxlIHRoZSBwaHlzYWRkciB0byByZXN0b3JlIHRoZQorICogY29ycmVjdCBoaWdoLW9yZGVyIGJpdHMuCisgKgorICogVGhpcyBpcyBleHRyZW1lbHkgY29uZnVzaW5nIHVudGlsIHlvdSByZWFsaXplIHRoYXQgdGhpcyBpcyBhY3R1YWxseQorICoganVzdCB3b3JraW5nIGFyb3VuZCBhIHVzZXJzcGFjZSBidWcuICBUaGUgWCBzZXJ2ZXIgd2FzIGludGVuZGluZyB0bworICogcHJvdmlkZSB0aGUgcGh5c2ljYWwgYWRkcmVzcyBidXQgaW5zdGVhZCBwcm92aWRlZCB0aGUgS1NFRyBhZGRyZXNzLgorICogT3IgdHJpZWQgdG8sIGV4Y2VwdCBpdCdzIG5vdCByZXByZXNlbnRhYmxlLgorICogCisgKiBPbiBUc3VuYW1pIHRoZXJlJ3Mgbm90aGluZyBtZWFuaW5nZnVsIGF0IDB4NDAwMDAwMDAwMDAsIHNvIHRoaXMgaXMKKyAqIGEgc2FmZSB0aGluZyB0byBkby4gIENvbWUgdGhlIGZpcnN0IGNvcmUgbG9naWMgdGhhdCBkb2VzIHB1dCBzb21ldGhpbmcKKyAqIGluIHRoaXMgYXJlYSAtLSBtZW1vcnkgb3Igd2hhdGhhdmV5b3UgLS0gdGhlbiB0aGlzIGhhY2sgd2lsbCBoYXZlCisgKiB0byBnbyBhd2F5LiAgU28gYmUgcHJlcGFyZWQhCisgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX0FMUEhBX0dFTkVSSUMpICYmIGRlZmluZWQoVVNFXzQ4X0JJVF9LU0VHKQorI2Vycm9yICJFVjYtb25seSBmZWF0dXJlIGluIGEgZ2VuZXJpYyBrZXJuZWwiCisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19BTFBIQV9HRU5FUklDKSB8fCBcCisgICAgKGRlZmluZWQoQ09ORklHX0FMUEhBX0VWNikgJiYgIWRlZmluZWQoVVNFXzQ4X0JJVF9LU0VHKSkKKyNkZWZpbmUgS1NFR19QRk4JKDB4YzAwMDAwMDAwMDBVTCA+PiBQQUdFX1NISUZUKQorI2RlZmluZSBQSFlTX1RXSURETEUocGZuKSBcCisgICgoKChwZm4pICYgS1NFR19QRk4pID09ICgweDQwMDAwMDAwMDAwVUwgPj4gUEFHRV9TSElGVCkpIFwKKyAgPyAoKHBmbikgXj0gS1NFR19QRk4pIDogKHBmbikpCisjZWxzZQorI2RlZmluZSBQSFlTX1RXSURETEUocGZuKSAocGZuKQorI2VuZGlmCisKKy8qCisgKiBDb252ZXJzaW9uIGZ1bmN0aW9uczogIGNvbnZlcnQgYSBwYWdlIGFuZCBwcm90ZWN0aW9uIHRvIGEgcGFnZSBlbnRyeSwKKyAqIGFuZCBhIHBhZ2UgZW50cnkgYW5kIHBhZ2UgZGlyZWN0b3J5IHRvIHRoZSBwYWdlIHRoZXkgcmVmZXIgdG8uCisgKi8KKyNpZm5kZWYgQ09ORklHX0RJU0NPTlRJR01FTQorI2RlZmluZSBwYWdlX3RvX3BhKHBhZ2UpCSgoKHBhZ2UpIC0gbWVtX21hcCkgPDwgUEFHRV9TSElGVCkKKworI2RlZmluZSBwdGVfcGZuKHB0ZSkJKHB0ZV92YWwocHRlKSA+PiAzMikKKyNkZWZpbmUgcHRlX3BhZ2UocHRlKQlwZm5fdG9fcGFnZShwdGVfcGZuKHB0ZSkpCisjZGVmaW5lIG1rX3B0ZShwYWdlLCBwZ3Byb3QpCQkJCQkJXAorKHsJCQkJCQkJCQlcCisJcHRlX3QgcHRlOwkJCQkJCQlcCisJCQkJCQkJCQlcCisJcHRlX3ZhbChwdGUpID0gKHBhZ2VfdG9fcGZuKHBhZ2UpIDw8IDMyKSB8IHBncHJvdF92YWwocGdwcm90KTsJXAorCXB0ZTsJCQkJCQkJCVwKK30pCisjZW5kaWYKKworZXh0ZXJuIGlubGluZSBwdGVfdCBwZm5fcHRlKHVuc2lnbmVkIGxvbmcgcGh5c3BmbiwgcGdwcm90X3QgcGdwcm90KQoreyBwdGVfdCBwdGU7IHB0ZV92YWwocHRlKSA9IChQSFlTX1RXSURETEUocGh5c3BmbikgPDwgMzIpIHwgcGdwcm90X3ZhbChwZ3Byb3QpOyByZXR1cm4gcHRlOyB9CisKK2V4dGVybiBpbmxpbmUgcHRlX3QgcHRlX21vZGlmeShwdGVfdCBwdGUsIHBncHJvdF90IG5ld3Byb3QpCit7IHB0ZV92YWwocHRlKSA9IChwdGVfdmFsKHB0ZSkgJiBfUEFHRV9DSEdfTUFTSykgfCBwZ3Byb3RfdmFsKG5ld3Byb3QpOyByZXR1cm4gcHRlOyB9CisKK2V4dGVybiBpbmxpbmUgdm9pZCBwbWRfc2V0KHBtZF90ICogcG1kcCwgcHRlX3QgKiBwdGVwKQoreyBwbWRfdmFsKCpwbWRwKSA9IF9QQUdFX1RBQkxFIHwgKCgoKHVuc2lnbmVkIGxvbmcpIHB0ZXApIC0gUEFHRV9PRkZTRVQpIDw8ICgzMi1QQUdFX1NISUZUKSk7IH0KKworZXh0ZXJuIGlubGluZSB2b2lkIHBnZF9zZXQocGdkX3QgKiBwZ2RwLCBwbWRfdCAqIHBtZHApCit7IHBnZF92YWwoKnBnZHApID0gX1BBR0VfVEFCTEUgfCAoKCgodW5zaWduZWQgbG9uZykgcG1kcCkgLSBQQUdFX09GRlNFVCkgPDwgKDMyLVBBR0VfU0hJRlQpKTsgfQorCisKK2V4dGVybiBpbmxpbmUgdW5zaWduZWQgbG9uZworcG1kX3BhZ2Vfa2VybmVsKHBtZF90IHBtZCkKK3sKKwlyZXR1cm4gKChwbWRfdmFsKHBtZCkgJiBfUEZOX01BU0spID4+ICgzMi1QQUdFX1NISUZUKSkgKyBQQUdFX09GRlNFVDsKK30KKworI2lmbmRlZiBDT05GSUdfRElTQ09OVElHTUVNCisjZGVmaW5lIHBtZF9wYWdlKHBtZCkJKG1lbV9tYXAgKyAoKHBtZF92YWwocG1kKSAmIF9QRk5fTUFTSykgPj4gMzIpKQorI2VuZGlmCisKK2V4dGVybiBpbmxpbmUgdW5zaWduZWQgbG9uZyBwZ2RfcGFnZShwZ2RfdCBwZ2QpCit7IHJldHVybiBQQUdFX09GRlNFVCArICgocGdkX3ZhbChwZ2QpICYgX1BGTl9NQVNLKSA+PiAoMzItUEFHRV9TSElGVCkpOyB9CisKK2V4dGVybiBpbmxpbmUgaW50IHB0ZV9ub25lKHB0ZV90IHB0ZSkJCXsgcmV0dXJuICFwdGVfdmFsKHB0ZSk7IH0KK2V4dGVybiBpbmxpbmUgaW50IHB0ZV9wcmVzZW50KHB0ZV90IHB0ZSkJeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfVkFMSUQ7IH0KK2V4dGVybiBpbmxpbmUgdm9pZCBwdGVfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApCit7CisJcHRlX3ZhbCgqcHRlcCkgPSAwOworfQorCitleHRlcm4gaW5saW5lIGludCBwbWRfbm9uZShwbWRfdCBwbWQpCQl7IHJldHVybiAhcG1kX3ZhbChwbWQpOyB9CitleHRlcm4gaW5saW5lIGludCBwbWRfYmFkKHBtZF90IHBtZCkJCXsgcmV0dXJuIChwbWRfdmFsKHBtZCkgJiB+X1BGTl9NQVNLKSAhPSBfUEFHRV9UQUJMRTsgfQorZXh0ZXJuIGlubGluZSBpbnQgcG1kX3ByZXNlbnQocG1kX3QgcG1kKQl7IHJldHVybiBwbWRfdmFsKHBtZCkgJiBfUEFHRV9WQUxJRDsgfQorZXh0ZXJuIGlubGluZSB2b2lkIHBtZF9jbGVhcihwbWRfdCAqIHBtZHApCXsgcG1kX3ZhbCgqcG1kcCkgPSAwOyB9CisKK2V4dGVybiBpbmxpbmUgaW50IHBnZF9ub25lKHBnZF90IHBnZCkJCXsgcmV0dXJuICFwZ2RfdmFsKHBnZCk7IH0KK2V4dGVybiBpbmxpbmUgaW50IHBnZF9iYWQocGdkX3QgcGdkKQkJeyByZXR1cm4gKHBnZF92YWwocGdkKSAmIH5fUEZOX01BU0spICE9IF9QQUdFX1RBQkxFOyB9CitleHRlcm4gaW5saW5lIGludCBwZ2RfcHJlc2VudChwZ2RfdCBwZ2QpCXsgcmV0dXJuIHBnZF92YWwocGdkKSAmIF9QQUdFX1ZBTElEOyB9CitleHRlcm4gaW5saW5lIHZvaWQgcGdkX2NsZWFyKHBnZF90ICogcGdkcCkJeyBwZ2RfdmFsKCpwZ2RwKSA9IDA7IH0KKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgb25seSB3b3JrIGlmIHB0ZV9wcmVzZW50KCkgaXMgdHJ1ZS4KKyAqIFVuZGVmaW5lZCBiZWhhdmlvdXIgaWYgbm90Li4KKyAqLworZXh0ZXJuIGlubGluZSBpbnQgcHRlX3JlYWQocHRlX3QgcHRlKQkJeyByZXR1cm4gIShwdGVfdmFsKHB0ZSkgJiBfUEFHRV9GT1IpOyB9CitleHRlcm4gaW5saW5lIGludCBwdGVfd3JpdGUocHRlX3QgcHRlKQkJeyByZXR1cm4gIShwdGVfdmFsKHB0ZSkgJiBfUEFHRV9GT1cpOyB9CitleHRlcm4gaW5saW5lIGludCBwdGVfZXhlYyhwdGVfdCBwdGUpCQl7IHJldHVybiAhKHB0ZV92YWwocHRlKSAmIF9QQUdFX0ZPRSk7IH0KK2V4dGVybiBpbmxpbmUgaW50IHB0ZV9kaXJ0eShwdGVfdCBwdGUpCQl7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9ESVJUWTsgfQorZXh0ZXJuIGlubGluZSBpbnQgcHRlX3lvdW5nKHB0ZV90IHB0ZSkJCXsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX0FDQ0VTU0VEOyB9CitleHRlcm4gaW5saW5lIGludCBwdGVfZmlsZShwdGVfdCBwdGUpCQl7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9GSUxFOyB9CisKK2V4dGVybiBpbmxpbmUgcHRlX3QgcHRlX3dycHJvdGVjdChwdGVfdCBwdGUpCXsgcHRlX3ZhbChwdGUpIHw9IF9QQUdFX0ZPVzsgcmV0dXJuIHB0ZTsgfQorZXh0ZXJuIGlubGluZSBwdGVfdCBwdGVfcmRwcm90ZWN0KHB0ZV90IHB0ZSkJeyBwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfRk9SOyByZXR1cm4gcHRlOyB9CitleHRlcm4gaW5saW5lIHB0ZV90IHB0ZV9leHByb3RlY3QocHRlX3QgcHRlKQl7IHB0ZV92YWwocHRlKSB8PSBfUEFHRV9GT0U7IHJldHVybiBwdGU7IH0KK2V4dGVybiBpbmxpbmUgcHRlX3QgcHRlX21rY2xlYW4ocHRlX3QgcHRlKQl7IHB0ZV92YWwocHRlKSAmPSB+KF9fRElSVFlfQklUUyk7IHJldHVybiBwdGU7IH0KK2V4dGVybiBpbmxpbmUgcHRlX3QgcHRlX21rb2xkKHB0ZV90IHB0ZSkJeyBwdGVfdmFsKHB0ZSkgJj0gfihfX0FDQ0VTU19CSVRTKTsgcmV0dXJuIHB0ZTsgfQorZXh0ZXJuIGlubGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUpCXsgcHRlX3ZhbChwdGUpICY9IH5fUEFHRV9GT1c7IHJldHVybiBwdGU7IH0KK2V4dGVybiBpbmxpbmUgcHRlX3QgcHRlX21rcmVhZChwdGVfdCBwdGUpCXsgcHRlX3ZhbChwdGUpICY9IH5fUEFHRV9GT1I7IHJldHVybiBwdGU7IH0KK2V4dGVybiBpbmxpbmUgcHRlX3QgcHRlX21rZXhlYyhwdGVfdCBwdGUpCXsgcHRlX3ZhbChwdGUpICY9IH5fUEFHRV9GT0U7IHJldHVybiBwdGU7IH0KK2V4dGVybiBpbmxpbmUgcHRlX3QgcHRlX21rZGlydHkocHRlX3QgcHRlKQl7IHB0ZV92YWwocHRlKSB8PSBfX0RJUlRZX0JJVFM7IHJldHVybiBwdGU7IH0KK2V4dGVybiBpbmxpbmUgcHRlX3QgcHRlX21reW91bmcocHRlX3QgcHRlKQl7IHB0ZV92YWwocHRlKSB8PSBfX0FDQ0VTU19CSVRTOyByZXR1cm4gcHRlOyB9CisKKyNkZWZpbmUgUEFHRV9ESVJfT0ZGU0VUKHRzayxhZGRyZXNzKSBwZ2Rfb2Zmc2V0KCh0c2spLChhZGRyZXNzKSkKKworLyogdG8gZmluZCBhbiBlbnRyeSBpbiBhIGtlcm5lbCBwYWdlLXRhYmxlLWRpcmVjdG9yeSAqLworI2RlZmluZSBwZ2Rfb2Zmc2V0X2soYWRkcmVzcykgcGdkX29mZnNldCgmaW5pdF9tbSwgKGFkZHJlc3MpKQorCisvKiB0byBmaW5kIGFuIGVudHJ5IGluIGEgcGFnZS10YWJsZS1kaXJlY3RvcnkuICovCisjZGVmaW5lIHBnZF9pbmRleChhZGRyZXNzKQkoKChhZGRyZXNzKSA+PiBQR0RJUl9TSElGVCkgJiAoUFRSU19QRVJfUEdELTEpKQorI2RlZmluZSBwZ2Rfb2Zmc2V0KG1tLCBhZGRyZXNzKQkoKG1tKS0+cGdkK3BnZF9pbmRleChhZGRyZXNzKSkKKworLyogRmluZCBhbiBlbnRyeSBpbiB0aGUgc2Vjb25kLWxldmVsIHBhZ2UgdGFibGUuLiAqLworZXh0ZXJuIGlubGluZSBwbWRfdCAqIHBtZF9vZmZzZXQocGdkX3QgKiBkaXIsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwlyZXR1cm4gKHBtZF90ICopIHBnZF9wYWdlKCpkaXIpICsgKChhZGRyZXNzID4+IFBNRF9TSElGVCkgJiAoUFRSU19QRVJfUEFHRSAtIDEpKTsKK30KKworLyogRmluZCBhbiBlbnRyeSBpbiB0aGUgdGhpcmQtbGV2ZWwgcGFnZSB0YWJsZS4uICovCitleHRlcm4gaW5saW5lIHB0ZV90ICogcHRlX29mZnNldF9rZXJuZWwocG1kX3QgKiBkaXIsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwlyZXR1cm4gKHB0ZV90ICopIHBtZF9wYWdlX2tlcm5lbCgqZGlyKQorCQkrICgoYWRkcmVzcyA+PiBQQUdFX1NISUZUKSAmIChQVFJTX1BFUl9QQUdFIC0gMSkpOworfQorCisjZGVmaW5lIHB0ZV9vZmZzZXRfbWFwKGRpcixhZGRyKQlwdGVfb2Zmc2V0X2tlcm5lbCgoZGlyKSwoYWRkcikpCisjZGVmaW5lIHB0ZV9vZmZzZXRfbWFwX25lc3RlZChkaXIsYWRkcikJcHRlX29mZnNldF9rZXJuZWwoKGRpciksKGFkZHIpKQorI2RlZmluZSBwdGVfdW5tYXAocHRlKQkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgcHRlX3VubWFwX25lc3RlZChwdGUpCQlkbyB7IH0gd2hpbGUgKDApCisKK2V4dGVybiBwZ2RfdCBzd2FwcGVyX3BnX2RpclsxMDI0XTsKKworLyoKKyAqIFRoZSBBbHBoYSBkb2Vzbid0IGhhdmUgYW55IGV4dGVybmFsIE1NVSBpbmZvOiAgdGhlIGtlcm5lbCBwYWdlCisgKiB0YWJsZXMgY29udGFpbiBhbGwgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbi4KKyAqLworZXh0ZXJuIGlubGluZSB2b2lkIHVwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICogdm1hLAorCXVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgcHRlKQoreworfQorCisvKgorICogTm9uLXByZXNlbnQgcGFnZXM6ICBoaWdoIDI0IGJpdHMgYXJlIG9mZnNldCwgbmV4dCA4IGJpdHMgdHlwZSwKKyAqIGxvdyAzMiBiaXRzIHplcm8uCisgKi8KK2V4dGVybiBpbmxpbmUgcHRlX3QgbWtfc3dhcF9wdGUodW5zaWduZWQgbG9uZyB0eXBlLCB1bnNpZ25lZCBsb25nIG9mZnNldCkKK3sgcHRlX3QgcHRlOyBwdGVfdmFsKHB0ZSkgPSAodHlwZSA8PCAzMikgfCAob2Zmc2V0IDw8IDQwKTsgcmV0dXJuIHB0ZTsgfQorCisjZGVmaW5lIF9fc3dwX3R5cGUoeCkJCSgoKHgpLnZhbCA+PiAzMikgJiAweGZmKQorI2RlZmluZSBfX3N3cF9vZmZzZXQoeCkJCSgoeCkudmFsID4+IDQwKQorI2RlZmluZSBfX3N3cF9lbnRyeSh0eXBlLCBvZmYpCSgoc3dwX2VudHJ5X3QpIHsgcHRlX3ZhbChta19zd2FwX3B0ZSgodHlwZSksIChvZmYpKSkgfSkKKyNkZWZpbmUgX19wdGVfdG9fc3dwX2VudHJ5KHB0ZSkJKChzd3BfZW50cnlfdCkgeyBwdGVfdmFsKHB0ZSkgfSkKKyNkZWZpbmUgX19zd3BfZW50cnlfdG9fcHRlKHgpCSgocHRlX3QpIHsgKHgpLnZhbCB9KQorCisjZGVmaW5lIHB0ZV90b19wZ29mZihwdGUpCShwdGVfdmFsKHB0ZSkgPj4gMzIpCisjZGVmaW5lIHBnb2ZmX3RvX3B0ZShvZmYpCSgocHRlX3QpIHsgKChvZmYpIDw8IDMyKSB8IF9QQUdFX0ZJTEUgfSkKKworI2RlZmluZSBQVEVfRklMRV9NQVhfQklUUwkzMgorCisjaWZuZGVmIENPTkZJR19ESVNDT05USUdNRU0KKyNkZWZpbmUga2Vybl9hZGRyX3ZhbGlkKGFkZHIpCSgxKQorI2VuZGlmCisKKyNkZWZpbmUgaW9fcmVtYXBfcGFnZV9yYW5nZSh2bWEsIHN0YXJ0LCBidXNhZGRyLCBzaXplLCBwcm90KQlcCisoewkJCQkJCQkJXAorCXZvaWQgKnZhID0gKHZvaWQgX19mb3JjZSAqKWlvcmVtYXAoYnVzYWRkciwgc2l6ZSk7CVwKKwl1bnNpZ25lZCBsb25nIHBmbiA9IHZpcnRfdG9fcGh5cyh2YSkgPj4gUEFHRV9TSElGVDsJXAorCXJlbWFwX3Bmbl9yYW5nZSh2bWEsIHN0YXJ0LCBwZm4sIHNpemUsIHByb3QpOwkJXAorfSkKKworI2RlZmluZSBpb19yZW1hcF9wZm5fcmFuZ2Uodm1hLCBzdGFydCwgcGZuLCBzaXplLCBwcm90KQlcCisJCXJlbWFwX3Bmbl9yYW5nZSh2bWEsIHN0YXJ0LCBwZm4sIHNpemUsIHByb3QpCisKKyNkZWZpbmUgTUtfSU9TUEFDRV9QRk4oc3BhY2UsIHBmbikJKHBmbikKKyNkZWZpbmUgR0VUX0lPU1BBQ0UocGZuKQkJMAorI2RlZmluZSBHRVRfUEZOKHBmbikJCQkocGZuKQorCisjZGVmaW5lIHB0ZV9FUlJPUihlKSBcCisJcHJpbnRrKCIlczolZDogYmFkIHB0ZSAlMDE2bHguXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sIHB0ZV92YWwoZSkpCisjZGVmaW5lIHBtZF9FUlJPUihlKSBcCisJcHJpbnRrKCIlczolZDogYmFkIHBtZCAlMDE2bHguXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sIHBtZF92YWwoZSkpCisjZGVmaW5lIHBnZF9FUlJPUihlKSBcCisJcHJpbnRrKCIlczolZDogYmFkIHBnZCAlMDE2bHguXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sIHBnZF92YWwoZSkpCisKK2V4dGVybiB2b2lkIHBhZ2luZ19pbml0KHZvaWQpOworCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGd0YWJsZS5oPgorCisvKgorICogTm8gcGFnZSB0YWJsZSBjYWNoZXMgdG8gaW5pdGlhbGlzZQorICovCisjZGVmaW5lIHBndGFibGVfY2FjaGVfaW5pdCgpCWRvIHsgfSB3aGlsZSAoMCkKKworLyogV2UgaGF2ZSBvdXIgb3duIGdldF91bm1hcHBlZF9hcmVhIHRvIGNvcGUgd2l0aCBBRERSX0xJTUlUXzMyQklULiAgKi8KKyNkZWZpbmUgSEFWRV9BUkNIX1VOTUFQUEVEX0FSRUEKKworI2VuZGlmIC8qIF9BTFBIQV9QR1RBQkxFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL3BvbGwuaCBiL2luY2x1ZGUvYXNtLWFscGhhL3BvbGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGYzMzNiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvcG9sbC5oCkBAIC0wLDAgKzEsMjMgQEAKKyNpZm5kZWYgX19BTFBIQV9QT0xMX0gKKyNkZWZpbmUgX19BTFBIQV9QT0xMX0gKKworI2RlZmluZSBQT0xMSU4JCSgxIDw8IDApCisjZGVmaW5lIFBPTExQUkkJCSgxIDw8IDEpCisjZGVmaW5lIFBPTExPVVQJCSgxIDw8IDIpCisjZGVmaW5lIFBPTExFUlIJCSgxIDw8IDMpCisjZGVmaW5lIFBPTExIVVAJCSgxIDw8IDQpCisjZGVmaW5lIFBPTExOVkFMCSgxIDw8IDUpCisjZGVmaW5lIFBPTExSRE5PUk0JKDEgPDwgNikKKyNkZWZpbmUgUE9MTFJEQkFORAkoMSA8PCA3KQorI2RlZmluZSBQT0xMV1JOT1JNCSgxIDw8IDgpCisjZGVmaW5lIFBPTExXUkJBTkQJKDEgPDwgOSkKKyNkZWZpbmUgUE9MTE1TRwkJKDEgPDwgMTApCisjZGVmaW5lIFBPTExSRU1PVkUJKDEgPDwgMTEpCisKK3N0cnVjdCBwb2xsZmQgeworCWludCBmZDsKKwlzaG9ydCBldmVudHM7CisJc2hvcnQgcmV2ZW50czsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvcG9zaXhfdHlwZXMuaCBiL2luY2x1ZGUvYXNtLWFscGhhL3Bvc2l4X3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc4YzA0YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL3Bvc2l4X3R5cGVzLmgKQEAgLTAsMCArMSwxMjMgQEAKKyNpZm5kZWYgX0FMUEhBX1BPU0lYX1RZUEVTX0gKKyNkZWZpbmUgX0FMUEhBX1BPU0lYX1RZUEVTX0gKKworLyoKKyAqIFRoaXMgZmlsZSBpcyBnZW5lcmFsbHkgdXNlZCBieSB1c2VyLWxldmVsIHNvZnR3YXJlLCBzbyB5b3UgbmVlZCB0bworICogYmUgYSBsaXR0bGUgY2FyZWZ1bCBhYm91dCBuYW1lc3BhY2UgcG9sbHV0aW9uIGV0Yy4gIEFsc28sIHdlIGNhbm5vdAorICogYXNzdW1lIEdDQyBpcyBiZWluZyB1c2VkLgorICovCisKK3R5cGVkZWYgdW5zaWduZWQgaW50CV9fa2VybmVsX2lub190OwordHlwZWRlZiB1bnNpZ25lZCBpbnQJX19rZXJuZWxfbW9kZV90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQJX19rZXJuZWxfbmxpbmtfdDsKK3R5cGVkZWYgbG9uZwkJX19rZXJuZWxfb2ZmX3Q7Cit0eXBlZGVmIGxvbmcgbG9uZwlfX2tlcm5lbF9sb2ZmX3Q7Cit0eXBlZGVmIGludAkJX19rZXJuZWxfcGlkX3Q7Cit0eXBlZGVmIGludAkJX19rZXJuZWxfaXBjX3BpZF90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQJX19rZXJuZWxfdWlkX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludAlfX2tlcm5lbF9naWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZwlfX2tlcm5lbF9zaXplX3Q7Cit0eXBlZGVmIGxvbmcJCV9fa2VybmVsX3NzaXplX3Q7Cit0eXBlZGVmIGxvbmcJCV9fa2VybmVsX3B0cmRpZmZfdDsKK3R5cGVkZWYgbG9uZwkJX19rZXJuZWxfdGltZV90OwordHlwZWRlZiBsb25nCQlfX2tlcm5lbF9zdXNlY29uZHNfdDsKK3R5cGVkZWYgbG9uZwkJX19rZXJuZWxfY2xvY2tfdDsKK3R5cGVkZWYgaW50CQlfX2tlcm5lbF9kYWRkcl90OwordHlwZWRlZiBjaGFyICoJCV9fa2VybmVsX2NhZGRyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcJX19rZXJuZWxfc2lnc2V0X3Q7CS8qIGF0IGxlYXN0IDMyIGJpdHMgKi8KK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJX19rZXJuZWxfdWlkMTZfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJX19rZXJuZWxfZ2lkMTZfdDsKK3R5cGVkZWYgaW50CQlfX2tlcm5lbF9jbG9ja2lkX3Q7Cit0eXBlZGVmIGludAkJX19rZXJuZWxfdGltZXJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCWludAl2YWxbMl07Cit9IF9fa2VybmVsX2ZzaWRfdDsKKwordHlwZWRlZiBfX2tlcm5lbF91aWRfdCBfX2tlcm5lbF9vbGRfdWlkX3Q7Cit0eXBlZGVmIF9fa2VybmVsX2dpZF90IF9fa2VybmVsX29sZF9naWRfdDsKK3R5cGVkZWYgX19rZXJuZWxfdWlkX3QgX19rZXJuZWxfdWlkMzJfdDsKK3R5cGVkZWYgX19rZXJuZWxfZ2lkX3QgX19rZXJuZWxfZ2lkMzJfdDsKKwordHlwZWRlZiB1bnNpZ25lZCBpbnQJX19rZXJuZWxfb2xkX2Rldl90OworCisjaWZkZWYgX19LRVJORUxfXworCisjaWZuZGVmIF9fR05VQ19fCisKKyNkZWZpbmUJX19GRF9TRVQoZCwgc2V0KQkoKHNldCktPmZkc19iaXRzW19fRkRFTFQoZCldIHw9IF9fRkRNQVNLKGQpKQorI2RlZmluZQlfX0ZEX0NMUihkLCBzZXQpCSgoc2V0KS0+ZmRzX2JpdHNbX19GREVMVChkKV0gJj0gfl9fRkRNQVNLKGQpKQorI2RlZmluZQlfX0ZEX0lTU0VUKGQsIHNldCkJKCgoc2V0KS0+ZmRzX2JpdHNbX19GREVMVChkKV0gJiBfX0ZETUFTSyhkKSkgIT0gMCkKKyNkZWZpbmUJX19GRF9aRVJPKHNldCkJXAorICAoKHZvaWQpIG1lbXNldCAoKF9fcHRyX3QpIChzZXQpLCAwLCBzaXplb2YgKF9fa2VybmVsX2ZkX3NldCkpKQorCisjZWxzZSAvKiBfX0dOVUNfXyAqLworCisvKiBXaXRoIEdOVSBDLCB1c2UgaW5saW5lIGZ1bmN0aW9ucyBpbnN0ZWFkIHNvIGFyZ3MgYXJlIGV2YWx1YXRlZCBvbmx5IG9uY2U6ICovCisKKyN1bmRlZiBfX0ZEX1NFVAorc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0ZEX1NFVCh1bnNpZ25lZCBsb25nIGZkLCBfX2tlcm5lbF9mZF9zZXQgKmZkc2V0cCkKK3sKKwl1bnNpZ25lZCBsb25nIF90bXAgPSBmZCAvIF9fTkZEQklUUzsKKwl1bnNpZ25lZCBsb25nIF9yZW0gPSBmZCAlIF9fTkZEQklUUzsKKwlmZHNldHAtPmZkc19iaXRzW190bXBdIHw9ICgxVUw8PF9yZW0pOworfQorCisjdW5kZWYgX19GRF9DTFIKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19GRF9DTFIodW5zaWduZWQgbG9uZyBmZCwgX19rZXJuZWxfZmRfc2V0ICpmZHNldHApCit7CisJdW5zaWduZWQgbG9uZyBfdG1wID0gZmQgLyBfX05GREJJVFM7CisJdW5zaWduZWQgbG9uZyBfcmVtID0gZmQgJSBfX05GREJJVFM7CisJZmRzZXRwLT5mZHNfYml0c1tfdG1wXSAmPSB+KDFVTDw8X3JlbSk7Cit9CisKKyN1bmRlZiBfX0ZEX0lTU0VUCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19GRF9JU1NFVCh1bnNpZ25lZCBsb25nIGZkLCBjb25zdCBfX2tlcm5lbF9mZF9zZXQgKnApCit7IAorCXVuc2lnbmVkIGxvbmcgX3RtcCA9IGZkIC8gX19ORkRCSVRTOworCXVuc2lnbmVkIGxvbmcgX3JlbSA9IGZkICUgX19ORkRCSVRTOworCXJldHVybiAocC0+ZmRzX2JpdHNbX3RtcF0gJiAoMVVMPDxfcmVtKSkgIT0gMDsKK30KKworLyoKKyAqIFRoaXMgd2lsbCB1bnJvbGwgdGhlIGxvb3AgZm9yIHRoZSBub3JtYWwgY29uc3RhbnQgY2FzZSAoOCBpbnRzLAorICogZm9yIGEgMjU2LWJpdCBmZF9zZXQpCisgKi8KKyN1bmRlZiBfX0ZEX1pFUk8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19GRF9aRVJPKF9fa2VybmVsX2ZkX3NldCAqcCkKK3sKKwl1bnNpZ25lZCBsb25nICp0bXAgPSBwLT5mZHNfYml0czsKKwlpbnQgaTsKKworCWlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChfX0ZEU0VUX0xPTkdTKSkgeworCQlzd2l0Y2ggKF9fRkRTRVRfTE9OR1MpIHsKKwkJICAgICAgY2FzZSAxNjoKKwkJCXRtcFsgMF0gPSAwOyB0bXBbIDFdID0gMDsgdG1wWyAyXSA9IDA7IHRtcFsgM10gPSAwOworCQkJdG1wWyA0XSA9IDA7IHRtcFsgNV0gPSAwOyB0bXBbIDZdID0gMDsgdG1wWyA3XSA9IDA7CisJCQl0bXBbIDhdID0gMDsgdG1wWyA5XSA9IDA7IHRtcFsxMF0gPSAwOyB0bXBbMTFdID0gMDsKKwkJCXRtcFsxMl0gPSAwOyB0bXBbMTNdID0gMDsgdG1wWzE0XSA9IDA7IHRtcFsxNV0gPSAwOworCQkJcmV0dXJuOworCisJCSAgICAgIGNhc2UgODoKKwkJCXRtcFsgMF0gPSAwOyB0bXBbIDFdID0gMDsgdG1wWyAyXSA9IDA7IHRtcFsgM10gPSAwOworCQkJdG1wWyA0XSA9IDA7IHRtcFsgNV0gPSAwOyB0bXBbIDZdID0gMDsgdG1wWyA3XSA9IDA7CisJCQlyZXR1cm47CisKKwkJICAgICAgY2FzZSA0OgorCQkJdG1wWyAwXSA9IDA7IHRtcFsgMV0gPSAwOyB0bXBbIDJdID0gMDsgdG1wWyAzXSA9IDA7CisJCQlyZXR1cm47CisJCX0KKwl9CisJaSA9IF9fRkRTRVRfTE9OR1M7CisJd2hpbGUgKGkpIHsKKwkJaS0tOworCQkqdG1wID0gMDsKKwkJdG1wKys7CisJfQorfQorCisjZW5kaWYgLyogX19HTlVDX18gKi8KKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9BTFBIQV9QT1NJWF9UWVBFU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9wcm9jZXNzb3IuaCBiL2luY2x1ZGUvYXNtLWFscGhhL3Byb2Nlc3Nvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1OTc4MGEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9wcm9jZXNzb3IuaApAQCAtMCwwICsxLDExOCBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFscGhhL3Byb2Nlc3Nvci5oCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk0IExpbnVzIFRvcnZhbGRzCisgKi8KKworI2lmbmRlZiBfX0FTTV9BTFBIQV9QUk9DRVNTT1JfSAorI2RlZmluZSBfX0FTTV9BTFBIQV9QUk9DRVNTT1JfSAorCisjaW5jbHVkZSA8bGludXgvcGVyc29uYWxpdHkuaD4JLyogZm9yIEFERFJfTElNSVRfMzJCSVQgKi8KKworLyoKKyAqIFJldHVybnMgY3VycmVudCBpbnN0cnVjdGlvbiBwb2ludGVyICgicHJvZ3JhbSBjb3VudGVyIikuCisgKi8KKyNkZWZpbmUgY3VycmVudF90ZXh0X2FkZHIoKSBcCisgICh7IHZvaWQgKl9fcGM7IF9fYXNtX18gKCJiciAlMCwuKzQiIDogIj1yIihfX3BjKSk7IF9fcGM7IH0pCisKKy8qCisgKiBXZSBoYXZlIGEgNDItYml0IHVzZXIgYWRkcmVzcyBzcGFjZTogNFRCIHVzZXIgVk0uLi4KKyAqLworI2RlZmluZSBUQVNLX1NJWkUgKDB4NDAwMDAwMDAwMDBVTCkKKworLyogVGhpcyBkZWNpZGVzIHdoZXJlIHRoZSBrZXJuZWwgd2lsbCBzZWFyY2ggZm9yIGEgZnJlZSBjaHVuayBvZiB2bQorICogc3BhY2UgZHVyaW5nIG1tYXAncy4KKyAqLworI2RlZmluZSBUQVNLX1VOTUFQUEVEX0JBU0UgXAorICAoKGN1cnJlbnQtPnBlcnNvbmFsaXR5ICYgQUREUl9MSU1JVF8zMkJJVCkgPyAweDQwMDAwMDAwIDogVEFTS19TSVpFIC8gMikKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcgc2VnOworfSBtbV9zZWdtZW50X3Q7CisKKy8qIFRoaXMgaXMgZGVhZC4gIEV2ZXJ5dGhpbmcgaGFzIGJlZW4gbW92ZWQgdG8gdGhyZWFkX2luZm8uICAqLworc3RydWN0IHRocmVhZF9zdHJ1Y3QgeyB9OworI2RlZmluZSBJTklUX1RIUkVBRCAgeyB9CisKKy8qIFJldHVybiBzYXZlZCBQQyBvZiBhIGJsb2NrZWQgdGhyZWFkLiAgKi8KK3N0cnVjdCB0YXNrX3N0cnVjdDsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHRocmVhZF9zYXZlZF9wYyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CisKKy8qIERvIG5lY2Vzc2FyeSBzZXR1cCB0byBzdGFydCB1cCBhIG5ld2x5IGV4ZWN1dGVkIHRocmVhZC4gICovCitleHRlcm4gdm9pZCBzdGFydF90aHJlYWQoc3RydWN0IHB0X3JlZ3MgKiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CisKKy8qIEZyZWUgYWxsIHJlc291cmNlcyBoZWxkIGJ5IGEgdGhyZWFkLiAqLworZXh0ZXJuIHZvaWQgcmVsZWFzZV90aHJlYWQoc3RydWN0IHRhc2tfc3RydWN0ICopOworCisvKiBQcmVwYXJlIHRvIGNvcHkgdGhyZWFkIHN0YXRlIC0gdW5sYXp5IGFsbCBsYXp5IHN0YXR1cyAqLworI2RlZmluZSBwcmVwYXJlX3RvX2NvcHkodHNrKQlkbyB7IH0gd2hpbGUgKDApCisKKy8qIENyZWF0ZSBhIGtlcm5lbCB0aHJlYWQgd2l0aG91dCByZW1vdmluZyBpdCBmcm9tIHRhc2tsaXN0cy4gICovCitleHRlcm4gbG9uZyBrZXJuZWxfdGhyZWFkKGludCAoKmZuKSh2b2lkICopLCB2b2lkICphcmcsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOworCit1bnNpZ25lZCBsb25nIGdldF93Y2hhbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApOworCisvKiBTZWUgYXJjaC9hbHBoYS9rZXJuZWwvcHRyYWNlLmMgZm9yIGRldGFpbHMuICAqLworI2RlZmluZSBQVF9SRUcocmVnKSBcCisgIChQQUdFX1NJWkUqMiAtIHNpemVvZihzdHJ1Y3QgcHRfcmVncykgKyBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgcmVnKSkKKworI2RlZmluZSBTV19SRUcocmVnKSBcCisgKFBBR0VfU0laRSoyIC0gc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKSAtIHNpemVvZihzdHJ1Y3Qgc3dpdGNoX3N0YWNrKSBcCisgICsgb2Zmc2V0b2Yoc3RydWN0IHN3aXRjaF9zdGFjaywgcmVnKSkKKworI2RlZmluZSBLU1RLX0VJUCh0c2spIFwKKyAgKCoodW5zaWduZWQgbG9uZyAqKShQVF9SRUcocGMpICsgKHVuc2lnbmVkIGxvbmcpICgodHNrKS0+dGhyZWFkX2luZm8pKSkKKworI2RlZmluZSBLU1RLX0VTUCh0c2spIFwKKyAgKCh0c2spID09IGN1cnJlbnQgPyByZHVzcCgpIDogKHRzayktPnRocmVhZF9pbmZvLT5wY2IudXNwKQorCisjZGVmaW5lIGNwdV9yZWxheCgpCWJhcnJpZXIoKQorCisjZGVmaW5lIEFSQ0hfSEFTX1BSRUZFVENICisjZGVmaW5lIEFSQ0hfSEFTX1BSRUZFVENIVworI2RlZmluZSBBUkNIX0hBU19TUElOTE9DS19QUkVGRVRDSAorCisjaWZuZGVmIENPTkZJR19TTVAKKy8qIE5vdGhpbmcgdG8gcHJlZmV0Y2guICovCisjZGVmaW5lIHNwaW5fbG9ja19wcmVmZXRjaChsb2NrKSAgCWRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisjaWYgX19HTlVDX18gPiAzIHx8IChfX0dOVUNfXyA9PSAzICYmIF9fR05VQ19NSU5PUl9fID49IDEpCitleHRlcm4gaW5saW5lIHZvaWQgcHJlZmV0Y2goY29uc3Qgdm9pZCAqcHRyKSAgCit7IAorCV9fYnVpbHRpbl9wcmVmZXRjaChwdHIsIDAsIDMpOworfQorCitleHRlcm4gaW5saW5lIHZvaWQgcHJlZmV0Y2h3KGNvbnN0IHZvaWQgKnB0cikgIAoreworCV9fYnVpbHRpbl9wcmVmZXRjaChwdHIsIDEsIDMpOworfQorCisjaWZkZWYgQ09ORklHX1NNUAorZXh0ZXJuIGlubGluZSB2b2lkIHNwaW5fbG9ja19wcmVmZXRjaChjb25zdCB2b2lkICpwdHIpICAKK3sKKwlfX2J1aWx0aW5fcHJlZmV0Y2gocHRyLCAxLCAzKTsKK30KKyNlbmRpZgorCisjZWxzZQorZXh0ZXJuIGlubGluZSB2b2lkIHByZWZldGNoKGNvbnN0IHZvaWQgKnB0cikgIAoreyAKKwlfX2FzbV9fICgibGRsICQzMSwlMCIgOiA6ICJtIigqKGNoYXIgKilwdHIpKTsgCit9CisKK2V4dGVybiBpbmxpbmUgdm9pZCBwcmVmZXRjaHcoY29uc3Qgdm9pZCAqcHRyKSAgCit7CisJX19hc21fXyAoImxkcSAkMzEsJTAiIDogOiAibSIoKihjaGFyICopcHRyKSk7IAorfQorCisjaWZkZWYgQ09ORklHX1NNUAorZXh0ZXJuIGlubGluZSB2b2lkIHNwaW5fbG9ja19wcmVmZXRjaChjb25zdCB2b2lkICpwdHIpICAKK3sKKwlfX2FzbV9fICgibGRxICQzMSwlMCIgOiA6ICJtIigqKGNoYXIgKilwdHIpKTsgCit9CisjZW5kaWYKKworI2VuZGlmIC8qIEdDQyAzLjEgKi8KKworI2VuZGlmIC8qIF9fQVNNX0FMUEhBX1BST0NFU1NPUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9wdHJhY2UuaCBiL2luY2x1ZGUvYXNtLWFscGhhL3B0cmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0NjJjNWUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9wdHJhY2UuaApAQCAtMCwwICsxLDgyIEBACisjaWZuZGVmIF9BU01BWFBfUFRSQUNFX0gKKyNkZWZpbmUgX0FTTUFYUF9QVFJBQ0VfSAorCisKKy8qCisgKiBUaGlzIHN0cnVjdCBkZWZpbmVzIHRoZSB3YXkgdGhlIHJlZ2lzdGVycyBhcmUgc3RvcmVkIG9uIHRoZQorICoga2VybmVsIHN0YWNrIGR1cmluZyBhIHN5c3RlbSBjYWxsIG9yIG90aGVyIGtlcm5lbCBlbnRyeQorICoKKyAqIE5PVEUhIEkgd2FudCB0byBtaW5pbWl6ZSB0aGUgb3ZlcmhlYWQgb2Ygc3lzdGVtIGNhbGxzLCBzbyB0aGlzCisgKiBzdHJ1Y3QgaGFzIGFzIGxpdHRsZSBpbmZvcm1hdGlvbiBhcyBwb3NzaWJsZS4gIEkgZG9lcyBub3QgaGF2ZQorICoKKyAqICAtIGZsb2F0aW5nIHBvaW50IHJlZ3M6IHRoZSBrZXJuZWwgZG9lc24ndCBjaGFuZ2UgdGhvc2UKKyAqICAtIHI5LTE1OiBzYXZlZCBieSB0aGUgQyBjb21waWxlcgorICoKKyAqIFRoaXMgbWFrZXMgImZvcmsoKSIgYW5kICJleGVjKCkiIGEgYml0IG1vcmUgY29tcGxleCwgYnV0IHNob3VsZAorICogZ2l2ZSB1cyBsb3cgc3lzdGVtIGNhbGwgbGF0ZW5jeS4KKyAqLworCitzdHJ1Y3QgcHRfcmVncyB7CisJdW5zaWduZWQgbG9uZyByMDsKKwl1bnNpZ25lZCBsb25nIHIxOworCXVuc2lnbmVkIGxvbmcgcjI7CisJdW5zaWduZWQgbG9uZyByMzsKKwl1bnNpZ25lZCBsb25nIHI0OworCXVuc2lnbmVkIGxvbmcgcjU7CisJdW5zaWduZWQgbG9uZyByNjsKKwl1bnNpZ25lZCBsb25nIHI3OworCXVuc2lnbmVkIGxvbmcgcjg7CisJdW5zaWduZWQgbG9uZyByMTk7CisJdW5zaWduZWQgbG9uZyByMjA7CisJdW5zaWduZWQgbG9uZyByMjE7CisJdW5zaWduZWQgbG9uZyByMjI7CisJdW5zaWduZWQgbG9uZyByMjM7CisJdW5zaWduZWQgbG9uZyByMjQ7CisJdW5zaWduZWQgbG9uZyByMjU7CisJdW5zaWduZWQgbG9uZyByMjY7CisJdW5zaWduZWQgbG9uZyByMjc7CisJdW5zaWduZWQgbG9uZyByMjg7CisJdW5zaWduZWQgbG9uZyBoYWU7CisvKiBKUlAgLSBUaGVzZSBhcmUgdGhlIHZhbHVlcyBwcm92aWRlZCB0byBhMC1hMiBieSBQQUxjb2RlICovCisJdW5zaWduZWQgbG9uZyB0cmFwX2EwOworCXVuc2lnbmVkIGxvbmcgdHJhcF9hMTsKKwl1bnNpZ25lZCBsb25nIHRyYXBfYTI7CisvKiBUaGVzZSBhcmUgc2F2ZWQgYnkgUEFMLWNvZGU6ICovCisJdW5zaWduZWQgbG9uZyBwczsKKwl1bnNpZ25lZCBsb25nIHBjOworCXVuc2lnbmVkIGxvbmcgZ3A7CisJdW5zaWduZWQgbG9uZyByMTY7CisJdW5zaWduZWQgbG9uZyByMTc7CisJdW5zaWduZWQgbG9uZyByMTg7Cit9OworCisvKgorICogVGhpcyBpcyB0aGUgZXh0ZW5kZWQgc3RhY2sgdXNlZCBieSBzaWduYWwgaGFuZGxlcnMgYW5kIHRoZSBjb250ZXh0CisgKiBzd2l0Y2hlcjogaXQncyBwdXNoZWQgYWZ0ZXIgdGhlIG5vcm1hbCAic3RydWN0IHB0X3JlZ3MiLgorICovCitzdHJ1Y3Qgc3dpdGNoX3N0YWNrIHsKKwl1bnNpZ25lZCBsb25nIHI5OworCXVuc2lnbmVkIGxvbmcgcjEwOworCXVuc2lnbmVkIGxvbmcgcjExOworCXVuc2lnbmVkIGxvbmcgcjEyOworCXVuc2lnbmVkIGxvbmcgcjEzOworCXVuc2lnbmVkIGxvbmcgcjE0OworCXVuc2lnbmVkIGxvbmcgcjE1OworCXVuc2lnbmVkIGxvbmcgcjI2OworCXVuc2lnbmVkIGxvbmcgZnBbMzJdOwkvKiBmcFszMV0gaXMgZnBjciAqLworfTsKKworI2lmZGVmIF9fS0VSTkVMX18KKyNkZWZpbmUgdXNlcl9tb2RlKHJlZ3MpICgoKHJlZ3MpLT5wcyAmIDgpICE9IDApCisjZGVmaW5lIGluc3RydWN0aW9uX3BvaW50ZXIocmVncykgKChyZWdzKS0+cGMpCisjZGVmaW5lIHByb2ZpbGVfcGMocmVncykgaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKQorZXh0ZXJuIHZvaWQgc2hvd19yZWdzKHN0cnVjdCBwdF9yZWdzICopOworCisjZGVmaW5lIGFscGhhX3Rhc2tfcmVncyh0YXNrKSBcCisgICgoc3RydWN0IHB0X3JlZ3MgKikgKChsb25nKSAodGFzayktPnRocmVhZF9pbmZvICsgMipQQUdFX1NJWkUpIC0gMSkKKworI2RlZmluZSBmb3JjZV9zdWNjZXNzZnVsX3N5c2NhbGxfcmV0dXJuKCkgKGFscGhhX3Rhc2tfcmVncyhjdXJyZW50KS0+cjAgPSAwKQorCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9yZWcuaCBiL2luY2x1ZGUvYXNtLWFscGhhL3JlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2ZmY5MTYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9yZWcuaApAQCAtMCwwICsxLDUyIEBACisjaWZuZGVmIF9fcmVnX2hfXworI2RlZmluZSBfX3JlZ19oX18KKworLyoKKyAqIEV4Y2VwdGlvbiBmcmFtZSBvZmZzZXRzLgorICovCisjZGVmaW5lIEVGX1YwCQkwCisjZGVmaW5lIEVGX1QwCQkxCisjZGVmaW5lIEVGX1QxCQkyCisjZGVmaW5lIEVGX1QyCQkzCisjZGVmaW5lIEVGX1QzCQk0CisjZGVmaW5lIEVGX1Q0CQk1CisjZGVmaW5lIEVGX1Q1CQk2CisjZGVmaW5lIEVGX1Q2CQk3CisjZGVmaW5lIEVGX1Q3CQk4CisjZGVmaW5lIEVGX1MwCQk5CisjZGVmaW5lIEVGX1MxCQkxMAorI2RlZmluZSBFRl9TMgkJMTEKKyNkZWZpbmUgRUZfUzMJCTEyCisjZGVmaW5lIEVGX1M0CQkxMworI2RlZmluZSBFRl9TNQkJMTQKKyNkZWZpbmUgRUZfUzYJCTE1CisjZGVmaW5lIEVGX0EzCQkxNgorI2RlZmluZSBFRl9BNAkJMTcKKyNkZWZpbmUgRUZfQTUJCTE4CisjZGVmaW5lIEVGX1Q4CQkxOQorI2RlZmluZSBFRl9UOQkJMjAKKyNkZWZpbmUgRUZfVDEwCQkyMQorI2RlZmluZSBFRl9UMTEJCTIyCisjZGVmaW5lIEVGX1JBCQkyMworI2RlZmluZSBFRl9UMTIJCTI0CisjZGVmaW5lIEVGX0FUCQkyNQorI2RlZmluZSBFRl9TUAkJMjYKKyNkZWZpbmUgRUZfUFMJCTI3CisjZGVmaW5lIEVGX1BDCQkyOAorI2RlZmluZSBFRl9HUAkJMjkKKyNkZWZpbmUgRUZfQTAJCTMwCisjZGVmaW5lIEVGX0ExCQkzMQorI2RlZmluZSBFRl9BMgkJMzIKKworI2RlZmluZSBFRl9TSVpFCQkoMzMqOCkKKyNkZWZpbmUgSFdFRl9TSVpFCSg2KjgpCQkvKiBzaXplIG9mIFBBTCBmcmFtZSAoUFMtQTIpICovCisKKyNkZWZpbmUgRUZfU1NJWkUJKEVGX1NJWkUgLSBIV0VGX1NJWkUpCisKKy8qCisgKiBNYXAgcmVnaXN0ZXIgbnVtYmVyIGludG8gY29yZSBmaWxlIG9mZnNldC4KKyAqLworI2RlZmluZSBDT1JFX1JFRyhyZWcsIHViYXNlKSBcCisJKCgodW5zaWduZWQgbG9uZyAqKSgodW5zaWduZWQgbG9uZykodWJhc2UpKSlbcmVnXSkKKworI2VuZGlmIC8qIF9fcmVnX2hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvcmVnZGVmLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9yZWdkZWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDJkZjljCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvcmVnZGVmLmgKQEAgLTAsMCArMSw0NCBAQAorI2lmbmRlZiBfX2FscGhhX3JlZ2RlZl9oX18KKyNkZWZpbmUgX19hbHBoYV9yZWdkZWZfaF9fCisKKyNkZWZpbmUgdjAJJDAJLyogZnVuY3Rpb24gcmV0dXJuIHZhbHVlICovCisKKyNkZWZpbmUgdDAJJDEJLyogdGVtcG9yYXJ5IHJlZ2lzdGVycyAoY2FsbGVyLXNhdmVkKSAqLworI2RlZmluZSB0MQkkMgorI2RlZmluZSB0MgkkMworI2RlZmluZSB0MwkkNAorI2RlZmluZSB0NAkkNQorI2RlZmluZSB0NQkkNgorI2RlZmluZSB0NgkkNworI2RlZmluZSB0NwkkOAorCisjZGVmaW5lCXMwCSQ5CS8qIHNhdmVkLXJlZ2lzdGVycyAoY2FsbGVlLXNhdmVkIHJlZ2lzdGVycykgKi8KKyNkZWZpbmUJczEJJDEwCisjZGVmaW5lCXMyCSQxMQorI2RlZmluZQlzMwkkMTIKKyNkZWZpbmUJczQJJDEzCisjZGVmaW5lCXM1CSQxNAorI2RlZmluZQlzNgkkMTUKKyNkZWZpbmUJZnAJczYJLyogZnJhbWUtcG9pbnRlciAoczYgaW4gZnJhbWUtbGVzcyBwcm9jZWR1cmVzKSAqLworCisjZGVmaW5lIGEwCSQxNgkvKiBhcmd1bWVudCByZWdpc3RlcnMgKGNhbGxlci1zYXZlZCkgKi8KKyNkZWZpbmUgYTEJJDE3CisjZGVmaW5lIGEyCSQxOAorI2RlZmluZSBhMwkkMTkKKyNkZWZpbmUgYTQJJDIwCisjZGVmaW5lIGE1CSQyMQorCisjZGVmaW5lIHQ4CSQyMgkvKiBtb3JlIHRlbXBzIChjYWxsZXItc2F2ZWQpICovCisjZGVmaW5lIHQ5CSQyMworI2RlZmluZSB0MTAJJDI0CisjZGVmaW5lIHQxMQkkMjUKKyNkZWZpbmUgcmEJJDI2CS8qIHJldHVybiBhZGRyZXNzIHJlZ2lzdGVyICovCisjZGVmaW5lIHQxMgkkMjcKKworI2RlZmluZSBwdgl0MTIJLyogcHJvY2VkdXJlLXZhcmlhYmxlIHJlZ2lzdGVyICovCisjZGVmaW5lIEFUCSRhdAkvKiBhc3NlbWJsZXIgdGVtcG9yYXJ5ICovCisjZGVmaW5lIGdwCSQyOQkvKiBnbG9iYWwgcG9pbnRlciAqLworI2RlZmluZSBzcAkkMzAJLyogc3RhY2sgcG9pbnRlciAqLworI2RlZmluZSB6ZXJvCSQzMQkvKiByZWFkcyBhcyB6ZXJvLCB3cml0ZXMgYXJlIG5vb3BzICovCisKKyNlbmRpZiAvKiBfX2FscGhhX3JlZ2RlZl9oX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL3Jlc291cmNlLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9yZXNvdXJjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxMDg3NGYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9yZXNvdXJjZS5oCkBAIC0wLDAgKzEsMjIgQEAKKyNpZm5kZWYgX0FMUEhBX1JFU09VUkNFX0gKKyNkZWZpbmUgX0FMUEhBX1JFU09VUkNFX0gKKworLyoKKyAqIEFscGhhL0xpbnV4LXNwZWNpZmljIG9yZGVyaW5nIG9mIHRoZXNlIGZvdXIgcmVzb3VyY2UgbGltaXQgSURzLAorICogdGhlIHJlc3QgY29tZXMgZnJvbSB0aGUgZ2VuZXJpYyBoZWFkZXI6CisgKi8KKyNkZWZpbmUgUkxJTUlUX05PRklMRQkJNgkvKiBtYXggbnVtYmVyIG9mIG9wZW4gZmlsZXMgKi8KKyNkZWZpbmUgUkxJTUlUX0FTCQk3CS8qIGFkZHJlc3Mgc3BhY2UgbGltaXQgKi8KKyNkZWZpbmUgUkxJTUlUX05QUk9DCQk4CS8qIG1heCBudW1iZXIgb2YgcHJvY2Vzc2VzICovCisjZGVmaW5lIFJMSU1JVF9NRU1MT0NLCQk5CS8qIG1heCBsb2NrZWQtaW4tbWVtb3J5IGFkZHJlc3Mgc3BhY2UgKi8KKworLyoKKyAqIFN1UyBzYXlzIGxpbWl0cyBoYXZlIHRvIGJlIHVuc2lnbmVkLiAgRmluZSwgaXQncyB1bnNpZ25lZCwgYnV0CisgKiB3ZSByZXRhaW4gdGhlIG9sZCB2YWx1ZSBmb3IgY29tcGF0aWJpbGl0eSwgZXNwZWNpYWxseSB3aXRoIERVLiAKKyAqIFdoZW4geW91IHJ1biBpbnRvIHRoZSAyXjYzIGJhcnJpZXIsIHlvdSBjYWxsIG1lLgorICovCisjZGVmaW5lIFJMSU1fSU5GSU5JVFkJCTB4N2ZmZmZmZmZmZmZmZmZmZnVsCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9yZXNvdXJjZS5oPgorCisjZW5kaWYgLyogX0FMUEhBX1JFU09VUkNFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL3J0Yy5oIGIvaW5jbHVkZS9hc20tYWxwaGEvcnRjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU4NTRiMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL3J0Yy5oCkBAIC0wLDAgKzEsMTAgQEAKKyNpZm5kZWYgX0FMUEhBX1JUQ19ICisjZGVmaW5lIF9BTFBIQV9SVENfSAorCisvKgorICogQWxwaGEgdXNlcyB0aGUgZGVmYXVsdCBhY2Nlc3MgbWV0aG9kcyBmb3IgdGhlIFJUQy4KKyAqLworCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcnRjLmg+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvcndzZW0uaCBiL2luY2x1ZGUvYXNtLWFscGhhL3J3c2VtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUwNThhNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL3J3c2VtLmgKQEAgLTAsMCArMSwyNjYgQEAKKyNpZm5kZWYgX0FMUEhBX1JXU0VNX0gKKyNkZWZpbmUgX0FMUEhBX1JXU0VNX0gKKworLyoKKyAqIFdyaXR0ZW4gYnkgSXZhbiBLb2tzaGF5c2t5IDxpbmtAanVyYXNzaWMucGFyay5tc3UucnU+LCAyMDAxLgorICogQmFzZWQgb24gYXNtLWFscGhhL3NlbWFwaG9yZS5oIGFuZCBhc20taTM4Ni9yd3NlbS5oCisgKi8KKworI2lmbmRlZiBfTElOVVhfUldTRU1fSAorI2Vycm9yICJwbGVhc2UgZG9uJ3QgaW5jbHVkZSBhc20vcndzZW0uaCBkaXJlY3RseSwgdXNlIGxpbnV4L3J3c2VtLmggaW5zdGVhZCIKKyNlbmRpZgorCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKworc3RydWN0IHJ3c2VtX3dhaXRlcjsKKworZXh0ZXJuIHN0cnVjdCByd19zZW1hcGhvcmUgKnJ3c2VtX2Rvd25fcmVhZF9mYWlsZWQoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKTsKK2V4dGVybiBzdHJ1Y3Qgcndfc2VtYXBob3JlICpyd3NlbV9kb3duX3dyaXRlX2ZhaWxlZChzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pOworZXh0ZXJuIHN0cnVjdCByd19zZW1hcGhvcmUgKnJ3c2VtX3dha2Uoc3RydWN0IHJ3X3NlbWFwaG9yZSAqKTsKK2V4dGVybiBzdHJ1Y3Qgcndfc2VtYXBob3JlICpyd3NlbV9kb3duZ3JhZGVfd2FrZShzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pOworCisvKgorICogdGhlIHNlbWFwaG9yZSBkZWZpbml0aW9uCisgKi8KK3N0cnVjdCByd19zZW1hcGhvcmUgeworCWxvbmcJCQljb3VudDsKKyNkZWZpbmUgUldTRU1fVU5MT0NLRURfVkFMVUUJCTB4MDAwMDAwMDAwMDAwMDAwMEwKKyNkZWZpbmUgUldTRU1fQUNUSVZFX0JJQVMJCTB4MDAwMDAwMDAwMDAwMDAwMUwKKyNkZWZpbmUgUldTRU1fQUNUSVZFX01BU0sJCTB4MDAwMDAwMDBmZmZmZmZmZkwKKyNkZWZpbmUgUldTRU1fV0FJVElOR19CSUFTCQkoLTB4MDAwMDAwMDEwMDAwMDAwMEwpCisjZGVmaW5lIFJXU0VNX0FDVElWRV9SRUFEX0JJQVMJCVJXU0VNX0FDVElWRV9CSUFTCisjZGVmaW5lIFJXU0VNX0FDVElWRV9XUklURV9CSUFTCQkoUldTRU1fV0FJVElOR19CSUFTICsgUldTRU1fQUNUSVZFX0JJQVMpCisJc3BpbmxvY2tfdAkJd2FpdF9sb2NrOworCXN0cnVjdCBsaXN0X2hlYWQJd2FpdF9saXN0OworI2lmIFJXU0VNX0RFQlVHCisJaW50CQkJZGVidWc7CisjZW5kaWYKK307CisKKyNpZiBSV1NFTV9ERUJVRworI2RlZmluZSBfX1JXU0VNX0RFQlVHX0lOSVQgICAgICAsIDAKKyNlbHNlCisjZGVmaW5lIF9fUldTRU1fREVCVUdfSU5JVAkvKiAqLworI2VuZGlmCisKKyNkZWZpbmUgX19SV1NFTV9JTklUSUFMSVpFUihuYW1lKSBcCisJeyBSV1NFTV9VTkxPQ0tFRF9WQUxVRSwgU1BJTl9MT0NLX1VOTE9DS0VELCBcCisJTElTVF9IRUFEX0lOSVQoKG5hbWUpLndhaXRfbGlzdCkgX19SV1NFTV9ERUJVR19JTklUIH0KKworI2RlZmluZSBERUNMQVJFX1JXU0VNKG5hbWUpIFwKKwlzdHJ1Y3Qgcndfc2VtYXBob3JlIG5hbWUgPSBfX1JXU0VNX0lOSVRJQUxJWkVSKG5hbWUpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3J3c2VtKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKK3sKKwlzZW0tPmNvdW50ID0gUldTRU1fVU5MT0NLRURfVkFMVUU7CisJc3Bpbl9sb2NrX2luaXQoJnNlbS0+d2FpdF9sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmc2VtLT53YWl0X2xpc3QpOworI2lmIFJXU0VNX0RFQlVHCisJc2VtLT5kZWJ1ZyA9IDA7CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fZG93bl9yZWFkKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKK3sKKwlsb25nIG9sZGNvdW50OworI2lmbmRlZglDT05GSUdfU01QCisJb2xkY291bnQgPSBzZW0tPmNvdW50OworCXNlbS0+Y291bnQgKz0gUldTRU1fQUNUSVZFX1JFQURfQklBUzsKKyNlbHNlCisJbG9uZyB0ZW1wOworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCSIxOglsZHFfbAklMCwlMVxuIgorCSIJYWRkcQklMCwlMywlMlxuIgorCSIJc3RxX2MJJTIsJTFcbiIKKwkiCWJlcQklMiwyZlxuIgorCSIJbWJcbiIKKwkiLnN1YnNlY3Rpb24gMlxuIgorCSIyOglicgkxYlxuIgorCSIucHJldmlvdXMiCisJOiI9JnIiIChvbGRjb3VudCksICI9bSIgKHNlbS0+Y291bnQpLCAiPSZyIiAodGVtcCkKKwk6IklyIiAoUldTRU1fQUNUSVZFX1JFQURfQklBUyksICJtIiAoc2VtLT5jb3VudCkgOiAibWVtb3J5Iik7CisjZW5kaWYKKwlpZiAodW5saWtlbHkob2xkY291bnQgPCAwKSkKKwkJcndzZW1fZG93bl9yZWFkX2ZhaWxlZChzZW0pOworfQorCisvKgorICogdHJ5bG9jayBmb3IgcmVhZGluZyAtLSByZXR1cm5zIDEgaWYgc3VjY2Vzc2Z1bCwgMCBpZiBjb250ZW50aW9uCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IF9fZG93bl9yZWFkX3RyeWxvY2soc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQoreworCWxvbmcgb2xkLCBuZXcsIHJlczsKKworCXJlcyA9IHNlbS0+Y291bnQ7CisJZG8geworCQluZXcgPSByZXMgKyBSV1NFTV9BQ1RJVkVfUkVBRF9CSUFTOworCQlpZiAobmV3IDw9IDApCisJCQlicmVhazsKKwkJb2xkID0gcmVzOworCQlyZXMgPSBjbXB4Y2hnKCZzZW0tPmNvdW50LCBvbGQsIG5ldyk7CisJfSB3aGlsZSAocmVzICE9IG9sZCk7CisJcmV0dXJuIHJlcyA+PSAwID8gMSA6IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2Rvd25fd3JpdGUoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQoreworCWxvbmcgb2xkY291bnQ7CisjaWZuZGVmCUNPTkZJR19TTVAKKwlvbGRjb3VudCA9IHNlbS0+Y291bnQ7CisJc2VtLT5jb3VudCArPSBSV1NFTV9BQ1RJVkVfV1JJVEVfQklBUzsKKyNlbHNlCisJbG9uZyB0ZW1wOworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCSIxOglsZHFfbAklMCwlMVxuIgorCSIJYWRkcQklMCwlMywlMlxuIgorCSIJc3RxX2MJJTIsJTFcbiIKKwkiCWJlcQklMiwyZlxuIgorCSIJbWJcbiIKKwkiLnN1YnNlY3Rpb24gMlxuIgorCSIyOglicgkxYlxuIgorCSIucHJldmlvdXMiCisJOiI9JnIiIChvbGRjb3VudCksICI9bSIgKHNlbS0+Y291bnQpLCAiPSZyIiAodGVtcCkKKwk6IklyIiAoUldTRU1fQUNUSVZFX1dSSVRFX0JJQVMpLCAibSIgKHNlbS0+Y291bnQpIDogIm1lbW9yeSIpOworI2VuZGlmCisJaWYgKHVubGlrZWx5KG9sZGNvdW50KSkKKwkJcndzZW1fZG93bl93cml0ZV9mYWlsZWQoc2VtKTsKK30KKworLyoKKyAqIHRyeWxvY2sgZm9yIHdyaXRpbmcgLS0gcmV0dXJucyAxIGlmIHN1Y2Nlc3NmdWwsIDAgaWYgY29udGVudGlvbgorICovCitzdGF0aWMgaW5saW5lIGludCBfX2Rvd25fd3JpdGVfdHJ5bG9jayhzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCit7CisJbG9uZyByZXQgPSBjbXB4Y2hnKCZzZW0tPmNvdW50LCBSV1NFTV9VTkxPQ0tFRF9WQUxVRSwKKwkJCSAgIFJXU0VNX0FDVElWRV9XUklURV9CSUFTKTsKKwlpZiAocmV0ID09IFJXU0VNX1VOTE9DS0VEX1ZBTFVFKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fdXBfcmVhZChzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCit7CisJbG9uZyBvbGRjb3VudDsKKyNpZm5kZWYJQ09ORklHX1NNUAorCW9sZGNvdW50ID0gc2VtLT5jb3VudDsKKwlzZW0tPmNvdW50IC09IFJXU0VNX0FDVElWRV9SRUFEX0JJQVM7CisjZWxzZQorCWxvbmcgdGVtcDsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkiCW1iXG4iCisJIjE6CWxkcV9sCSUwLCUxXG4iCisJIglzdWJxCSUwLCUzLCUyXG4iCisJIglzdHFfYwklMiwlMVxuIgorCSIJYmVxCSUyLDJmXG4iCisJIi5zdWJzZWN0aW9uIDJcbiIKKwkiMjoJYnIJMWJcbiIKKwkiLnByZXZpb3VzIgorCToiPSZyIiAob2xkY291bnQpLCAiPW0iIChzZW0tPmNvdW50KSwgIj0mciIgKHRlbXApCisJOiJJciIgKFJXU0VNX0FDVElWRV9SRUFEX0JJQVMpLCAibSIgKHNlbS0+Y291bnQpIDogIm1lbW9yeSIpOworI2VuZGlmCisJaWYgKHVubGlrZWx5KG9sZGNvdW50IDwgMCkpCisJCWlmICgoaW50KW9sZGNvdW50IC0gUldTRU1fQUNUSVZFX1JFQURfQklBUyA9PSAwKQorCQkJcndzZW1fd2FrZShzZW0pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX191cF93cml0ZShzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCit7CisJbG9uZyBjb3VudDsKKyNpZm5kZWYJQ09ORklHX1NNUAorCXNlbS0+Y291bnQgLT0gUldTRU1fQUNUSVZFX1dSSVRFX0JJQVM7CisJY291bnQgPSBzZW0tPmNvdW50OworI2Vsc2UKKwlsb25nIHRlbXA7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJIgltYlxuIgorCSIxOglsZHFfbAklMCwlMVxuIgorCSIJc3VicQklMCwlMywlMlxuIgorCSIJc3RxX2MJJTIsJTFcbiIKKwkiCWJlcQklMiwyZlxuIgorCSIJc3VicQklMCwlMywlMFxuIgorCSIuc3Vic2VjdGlvbiAyXG4iCisJIjI6CWJyCTFiXG4iCisJIi5wcmV2aW91cyIKKwk6Ij0mciIgKGNvdW50KSwgIj1tIiAoc2VtLT5jb3VudCksICI9JnIiICh0ZW1wKQorCToiSXIiIChSV1NFTV9BQ1RJVkVfV1JJVEVfQklBUyksICJtIiAoc2VtLT5jb3VudCkgOiAibWVtb3J5Iik7CisjZW5kaWYKKwlpZiAodW5saWtlbHkoY291bnQpKQorCQlpZiAoKGludCljb3VudCA9PSAwKQorCQkJcndzZW1fd2FrZShzZW0pOworfQorCisvKgorICogZG93bmdyYWRlIHdyaXRlIGxvY2sgdG8gcmVhZCBsb2NrCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2Rvd25ncmFkZV93cml0ZShzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCit7CisJbG9uZyBvbGRjb3VudDsKKyNpZm5kZWYJQ09ORklHX1NNUAorCW9sZGNvdW50ID0gc2VtLT5jb3VudDsKKwlzZW0tPmNvdW50IC09IFJXU0VNX1dBSVRJTkdfQklBUzsKKyNlbHNlCisJbG9uZyB0ZW1wOworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCSIxOglsZHFfbAklMCwlMVxuIgorCSIJYWRkcQklMCwlMywlMlxuIgorCSIJc3RxX2MJJTIsJTFcbiIKKwkiCWJlcQklMiwyZlxuIgorCSIJbWJcbiIKKwkiLnN1YnNlY3Rpb24gMlxuIgorCSIyOglicgkxYlxuIgorCSIucHJldmlvdXMiCisJOiI9JnIiIChvbGRjb3VudCksICI9bSIgKHNlbS0+Y291bnQpLCAiPSZyIiAodGVtcCkKKwk6IklyIiAoLVJXU0VNX1dBSVRJTkdfQklBUyksICJtIiAoc2VtLT5jb3VudCkgOiAibWVtb3J5Iik7CisjZW5kaWYKKwlpZiAodW5saWtlbHkob2xkY291bnQgPCAwKSkKKwkJcndzZW1fZG93bmdyYWRlX3dha2Uoc2VtKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJ3c2VtX2F0b21pY19hZGQobG9uZyB2YWwsIHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKK3sKKyNpZm5kZWYJQ09ORklHX1NNUAorCXNlbS0+Y291bnQgKz0gdmFsOworI2Vsc2UKKwlsb25nIHRlbXA7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJIjE6CWxkcV9sCSUwLCUxXG4iCisJIglhZGRxCSUwLCUyLCUwXG4iCisJIglzdHFfYwklMCwlMVxuIgorCSIJYmVxCSUwLDJmXG4iCisJIi5zdWJzZWN0aW9uIDJcbiIKKwkiMjoJYnIJMWJcbiIKKwkiLnByZXZpb3VzIgorCToiPSZyIiAodGVtcCksICI9bSIgKHNlbS0+Y291bnQpCisJOiJJciIgKHZhbCksICJtIiAoc2VtLT5jb3VudCkpOworI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgbG9uZyByd3NlbV9hdG9taWNfdXBkYXRlKGxvbmcgdmFsLCBzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCit7CisjaWZuZGVmCUNPTkZJR19TTVAKKwlzZW0tPmNvdW50ICs9IHZhbDsKKwlyZXR1cm4gc2VtLT5jb3VudDsKKyNlbHNlCisJbG9uZyByZXQsIHRlbXA7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJIjE6CWxkcV9sCSUwLCUxXG4iCisJIglhZGRxIAklMCwlMywlMlxuIgorCSIJYWRkcQklMCwlMywlMFxuIgorCSIJc3RxX2MJJTIsJTFcbiIKKwkiCWJlcQklMiwyZlxuIgorCSIuc3Vic2VjdGlvbiAyXG4iCisJIjI6CWJyCTFiXG4iCisJIi5wcmV2aW91cyIKKwk6Ij0mciIgKHJldCksICI9bSIgKHNlbS0+Y291bnQpLCAiPSZyIiAodGVtcCkKKwk6IklyIiAodmFsKSwgIm0iIChzZW0tPmNvdW50KSk7CisKKwlyZXR1cm4gcmV0OworI2VuZGlmCit9CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYgLyogX0FMUEhBX1JXU0VNX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL3NjYXR0ZXJsaXN0LmggYi9pbmNsdWRlL2FzbS1hbHBoYS9zY2F0dGVybGlzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhZmI4YmQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9zY2F0dGVybGlzdC5oCkBAIC0wLDAgKzEsMjEgQEAKKyNpZm5kZWYgX0FMUEhBX1NDQVRURVJMSVNUX0gKKyNkZWZpbmUgX0FMUEhBX1NDQVRURVJMSVNUX0gKKworI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisgIAorc3RydWN0IHNjYXR0ZXJsaXN0IHsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0OworCisJdW5zaWduZWQgaW50IGxlbmd0aDsKKworCWRtYV9hZGRyX3QgZG1hX2FkZHJlc3M7CisJX191MzIgZG1hX2xlbmd0aDsKK307CisKKyNkZWZpbmUgc2dfZG1hX2FkZHJlc3Moc2cpCSgoc2cpLT5kbWFfYWRkcmVzcykKKyNkZWZpbmUgc2dfZG1hX2xlbihzZykJCSgoc2cpLT5kbWFfbGVuZ3RoKQorCisjZGVmaW5lIElTQV9ETUFfVEhSRVNIT0xEICh+MFVMKQorCisjZW5kaWYgLyogIShfQUxQSEFfU0NBVFRFUkxJU1RfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL3NlY3Rpb25zLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9zZWN0aW9ucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzYjQwZWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9zZWN0aW9ucy5oCkBAIC0wLDAgKzEsNyBAQAorI2lmbmRlZiBfQUxQSEFfU0VDVElPTlNfSAorI2RlZmluZSBfQUxQSEFfU0VDVElPTlNfSAorCisvKiBub3RoaW5nIHRvIHNlZSwgbW92ZSBhbG9uZyAqLworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NlY3Rpb25zLmg+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvc2VnbWVudC5oIGIvaW5jbHVkZS9hc20tYWxwaGEvc2VnbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0NTNkOTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9zZWdtZW50LmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fQUxQSEFfU0VHTUVOVF9ICisjZGVmaW5lIF9fQUxQSEFfU0VHTUVOVF9ICisKKy8qIE9ubHkgaGVyZSBiZWNhdXNlIHdlIGhhdmUgc29tZSBvbGQgaGVhZGVyIGZpbGVzIHRoYXQgZXhwZWN0IGl0Li4gKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9zZW1hcGhvcmUuaCBiL2luY2x1ZGUvYXNtLWFscGhhL3NlbWFwaG9yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViMmNiZDkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9zZW1hcGhvcmUuaApAQCAtMCwwICsxLDE1MyBAQAorI2lmbmRlZiBfQUxQSEFfU0VNQVBIT1JFX0gKKyNkZWZpbmUgX0FMUEhBX1NFTUFQSE9SRV9ICisKKy8qCisgKiBTTVAtIGFuZCBpbnRlcnJ1cHQtc2FmZSBzZW1hcGhvcmVzLi4KKyAqCisgKiAoQykgQ29weXJpZ2h0IDE5OTYgTGludXMgVG9ydmFsZHMKKyAqIChDKSBDb3B5cmlnaHQgMTk5NiwgMjAwMCBSaWNoYXJkIEhlbmRlcnNvbgorICovCisKKyNpbmNsdWRlIDxhc20vY3VycmVudC5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KKworc3RydWN0IHNlbWFwaG9yZSB7CisJYXRvbWljX3QgY291bnQ7CisJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKK307CisKKyNkZWZpbmUgX19TRU1BUEhPUkVfSU5JVElBTElaRVIobmFtZSwgbikJCQlcCit7CQkJCQkJCQlcCisJLmNvdW50CT0gQVRPTUlDX0lOSVQobiksCQkJCVwKKyAgCS53YWl0CT0gX19XQUlUX1FVRVVFX0hFQURfSU5JVElBTElaRVIoKG5hbWUpLndhaXQpLAlcCit9CisKKyNkZWZpbmUgX19NVVRFWF9JTklUSUFMSVpFUihuYW1lKQkJCVwKKwlfX1NFTUFQSE9SRV9JTklUSUFMSVpFUihuYW1lLDEpCisKKyNkZWZpbmUgX19ERUNMQVJFX1NFTUFQSE9SRV9HRU5FUklDKG5hbWUsY291bnQpCQlcCisJc3RydWN0IHNlbWFwaG9yZSBuYW1lID0gX19TRU1BUEhPUkVfSU5JVElBTElaRVIobmFtZSxjb3VudCkKKworI2RlZmluZSBERUNMQVJFX01VVEVYKG5hbWUpCQlfX0RFQ0xBUkVfU0VNQVBIT1JFX0dFTkVSSUMobmFtZSwxKQorI2RlZmluZSBERUNMQVJFX01VVEVYX0xPQ0tFRChuYW1lKQlfX0RFQ0xBUkVfU0VNQVBIT1JFX0dFTkVSSUMobmFtZSwwKQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2VtYV9pbml0KHN0cnVjdCBzZW1hcGhvcmUgKnNlbSwgaW50IHZhbCkKK3sKKwkvKgorCSAqIExvZ2ljYWxseSwgCisJICogICAqc2VtID0gKHN0cnVjdCBzZW1hcGhvcmUpX19TRU1BUEhPUkVfSU5JVElBTElaRVIoKCpzZW0pLHZhbCk7CisJICogZXhjZXB0IHRoYXQgZ2NjIHByb2R1Y2VzIGJldHRlciBpbml0aWFsaXppbmcgYnkgcGFydHMgeWV0LgorCSAqLworCisJYXRvbWljX3NldCgmc2VtLT5jb3VudCwgdmFsKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzZW0tPndhaXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9NVVRFWCAoc3RydWN0IHNlbWFwaG9yZSAqc2VtKQoreworCXNlbWFfaW5pdChzZW0sIDEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9NVVRFWF9MT0NLRUQgKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKK3sKKwlzZW1hX2luaXQoc2VtLCAwKTsKK30KKworZXh0ZXJuIHZvaWQgZG93bihzdHJ1Y3Qgc2VtYXBob3JlICopOworZXh0ZXJuIHZvaWQgX19kb3duX2ZhaWxlZChzdHJ1Y3Qgc2VtYXBob3JlICopOworZXh0ZXJuIGludCAgZG93bl9pbnRlcnJ1cHRpYmxlKHN0cnVjdCBzZW1hcGhvcmUgKik7CitleHRlcm4gaW50ICBfX2Rvd25fZmFpbGVkX2ludGVycnVwdGlibGUoc3RydWN0IHNlbWFwaG9yZSAqKTsKK2V4dGVybiBpbnQgIGRvd25fdHJ5bG9jayhzdHJ1Y3Qgc2VtYXBob3JlICopOworZXh0ZXJuIHZvaWQgdXAoc3RydWN0IHNlbWFwaG9yZSAqKTsKK2V4dGVybiB2b2lkIF9fdXBfd2FrZXVwKHN0cnVjdCBzZW1hcGhvcmUgKik7CisKKy8qCisgKiBIaWRkZW4gb3V0IG9mIGxpbmUgY29kZSBpcyBmdW4sIGJ1dCBleHRyZW1lbHkgbWVzc3kuICBSZWx5IG9uIG5ld2VyCisgKiBjb21waWxlcnMgdG8gZG8gYSByZXNwZWN0YWJsZSBqb2Igd2l0aCB0aGlzLiAgVGhlIGNvbnRlbnRpb24gY2FzZXMKKyAqIGFyZSBoYW5kbGVkIG91dCBvZiBsaW5lIGluIGFyY2gvYWxwaGEva2VybmVsL3NlbWFwaG9yZS5jLgorICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2Rvd24oc3RydWN0IHNlbWFwaG9yZSAqc2VtKQoreworCWxvbmcgY291bnQ7CisJbWlnaHRfc2xlZXAoKTsKKwljb3VudCA9IGF0b21pY19kZWNfcmV0dXJuKCZzZW0tPmNvdW50KTsKKwlpZiAodW5saWtlbHkoY291bnQgPCAwKSkKKwkJX19kb3duX2ZhaWxlZChzZW0pOworfQorCitzdGF0aWMgaW5saW5lIGludCBfX2Rvd25faW50ZXJydXB0aWJsZShzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCit7CisJbG9uZyBjb3VudDsKKwltaWdodF9zbGVlcCgpOworCWNvdW50ID0gYXRvbWljX2RlY19yZXR1cm4oJnNlbS0+Y291bnQpOworCWlmICh1bmxpa2VseShjb3VudCA8IDApKQorCQlyZXR1cm4gX19kb3duX2ZhaWxlZF9pbnRlcnJ1cHRpYmxlKHNlbSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBkb3duX3RyeWxvY2sgcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIDEgaWYgd2UgZmFpbGVkIHRvIGdldCB0aGUgbG9jay4KKyAqLworCitzdGF0aWMgaW5saW5lIGludCBfX2Rvd25fdHJ5bG9jayhzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCit7CisJbG9uZyByZXQ7CisKKwkvKiAiRXF1aXZhbGVudCIgQzoKKworCSAgIGRvIHsKKwkJcmV0ID0gbGRsX2w7CisJCS0tcmV0OworCQlpZiAocmV0IDwgMCkKKwkJCWJyZWFrOworCQlyZXQgPSBzdGxfYyA9IHJldDsKKwkgICB9IHdoaWxlIChyZXQgPT0gMCk7CisJKi8KKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJIjE6CWxkbF9sCSUwLCUxXG4iCisJCSIJc3VibAklMCwxLCUwXG4iCisJCSIJYmx0CSUwLDJmXG4iCisJCSIJc3RsX2MJJTAsJTFcbiIKKwkJIgliZXEJJTAsM2ZcbiIKKwkJIgltYlxuIgorCQkiMjpcbiIKKwkJIi5zdWJzZWN0aW9uIDJcbiIKKwkJIjM6CWJyCTFiXG4iCisJCSIucHJldmlvdXMiCisJCTogIj0mciIgKHJldCksICI9bSIgKHNlbS0+Y291bnQpCisJCTogIm0iIChzZW0tPmNvdW50KSk7CisKKwlyZXR1cm4gcmV0IDwgMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fdXAoc3RydWN0IHNlbWFwaG9yZSAqc2VtKQoreworCWlmICh1bmxpa2VseShhdG9taWNfaW5jX3JldHVybigmc2VtLT5jb3VudCkgPD0gMCkpCisJCV9fdXBfd2FrZXVwKHNlbSk7Cit9CisKKyNpZiAhZGVmaW5lZChDT05GSUdfREVCVUdfU0VNQVBIT1JFKQorZXh0ZXJuIGlubGluZSB2b2lkIGRvd24oc3RydWN0IHNlbWFwaG9yZSAqc2VtKQoreworCV9fZG93bihzZW0pOworfQorZXh0ZXJuIGlubGluZSBpbnQgZG93bl9pbnRlcnJ1cHRpYmxlKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKK3sKKwlyZXR1cm4gX19kb3duX2ludGVycnVwdGlibGUoc2VtKTsKK30KK2V4dGVybiBpbmxpbmUgaW50IGRvd25fdHJ5bG9jayhzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCit7CisJcmV0dXJuIF9fZG93bl90cnlsb2NrKHNlbSk7Cit9CitleHRlcm4gaW5saW5lIHZvaWQgdXAoc3RydWN0IHNlbWFwaG9yZSAqc2VtKQoreworCV9fdXAoc2VtKTsKK30KKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL3NlbWJ1Zi5oIGIvaW5jbHVkZS9hc20tYWxwaGEvc2VtYnVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IzOGIxNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL3NlbWJ1Zi5oCkBAIC0wLDAgKzEsMjIgQEAKKyNpZm5kZWYgX0FMUEhBX1NFTUJVRl9ICisjZGVmaW5lIF9BTFBIQV9TRU1CVUZfSAorCisvKiAKKyAqIFRoZSBzZW1pZDY0X2RzIHN0cnVjdHVyZSBmb3IgYWxwaGEgYXJjaGl0ZWN0dXJlLgorICogTm90ZSBleHRyYSBwYWRkaW5nIGJlY2F1c2UgdGhpcyBzdHJ1Y3R1cmUgaXMgcGFzc2VkIGJhY2sgYW5kIGZvcnRoCisgKiBiZXR3ZWVuIGtlcm5lbCBhbmQgdXNlciBzcGFjZS4KKyAqCisgKiBQYWQgc3BhY2UgaXMgbGVmdCBmb3I6CisgKiAtIDIgbWlzY2VsbGFuZW91cyA2NC1iaXQgdmFsdWVzCisgKi8KKworc3RydWN0IHNlbWlkNjRfZHMgeworCXN0cnVjdCBpcGM2NF9wZXJtIHNlbV9wZXJtOwkJLyogcGVybWlzc2lvbnMgLi4gc2VlIGlwYy5oICovCisJX19rZXJuZWxfdGltZV90CXNlbV9vdGltZTsJCS8qIGxhc3Qgc2Vtb3AgdGltZSAqLworCV9fa2VybmVsX3RpbWVfdAlzZW1fY3RpbWU7CQkvKiBsYXN0IGNoYW5nZSB0aW1lICovCisJdW5zaWduZWQgbG9uZwlzZW1fbnNlbXM7CQkvKiBuby4gb2Ygc2VtYXBob3JlcyBpbiBhcnJheSAqLworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQxOworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQyOworfTsKKworI2VuZGlmIC8qIF9BTFBIQV9TRU1CVUZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvc2VyaWFsLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9zZXJpYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjJkOWVlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvc2VyaWFsLmgKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFscGhhL3NlcmlhbC5oCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisvKgorICogVGhpcyBhc3N1bWVzIHlvdSBoYXZlIGEgMS44NDMyIE1IeiBjbG9jayBmb3IgeW91ciBVQVJULgorICoKKyAqIEl0J2QgYmUgbmljZSBpZiBzb21lb25lIGJ1aWx0IGEgc2VyaWFsIGNhcmQgd2l0aCBhIDI0LjU3NiBNSHoKKyAqIGNsb2NrLCBzaW5jZSB0aGUgMTY1NTBBIGlzIGNhcGFibGUgb2YgaGFuZGxpbmcgYSB0b3Agc3BlZWQgb2YgMS41CisgKiBtZWdhYml0cy9zZWNvbmQ7IGJ1dCB0aGlzIHJlcXVpcmVzIHRoZSBmYXN0ZXIgY2xvY2suCisgKi8KKyNkZWZpbmUgQkFTRV9CQVVEICggMTg0MzIwMCAvIDE2ICkKKworLyogU3RhbmRhcmQgQ09NIGZsYWdzIChleGNlcHQgZm9yIENPTTQsIGJlY2F1c2Ugb2YgdGhlIDg1MTQgcHJvYmxlbSkgKi8KKyNpZmRlZiBDT05GSUdfU0VSSUFMX0RFVEVDVF9JUlEKKyNkZWZpbmUgU1REX0NPTV9GTEFHUyAoQVNZTkNfQk9PVF9BVVRPQ09ORiB8IEFTWU5DX1NLSVBfVEVTVCB8IEFTWU5DX0FVVE9fSVJRKQorI2RlZmluZSBTVERfQ09NNF9GTEFHUyAoQVNZTkNfQk9PVF9BVVRPQ09ORiB8IEFTWU5DX0FVVE9fSVJRKQorI2Vsc2UKKyNkZWZpbmUgU1REX0NPTV9GTEFHUyAoQVNZTkNfQk9PVF9BVVRPQ09ORiB8IEFTWU5DX1NLSVBfVEVTVCkKKyNkZWZpbmUgU1REX0NPTTRfRkxBR1MgQVNZTkNfQk9PVF9BVVRPQ09ORgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfU0VSSUFMX01BTllfUE9SVFMKKyNkZWZpbmUgRk9VUlBPUlRfRkxBR1MgQVNZTkNfRk9VUlBPUlQKKyNkZWZpbmUgQUNDRU5UX0ZMQUdTIDAKKyNkZWZpbmUgQk9DQV9GTEFHUyAwCisjZW5kaWYKKwkKKyNkZWZpbmUgU1REX1NFUklBTF9QT1JUX0RFRk5TCQkJXAorCS8qIFVBUlQgQ0xLICAgUE9SVCBJUlEgICAgIEZMQUdTICAgICAgICAqLwkJCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgzRjgsIDQsIFNURF9DT01fRkxBR1MgfSwJLyogdHR5UzAgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDJGOCwgMywgU1REX0NPTV9GTEFHUyB9LAkvKiB0dHlTMSAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4M0U4LCA0LCBTVERfQ09NX0ZMQUdTIH0sCS8qIHR0eVMyICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgyRTgsIDMsIFNURF9DT000X0ZMQUdTIH0sCS8qIHR0eVMzICovCisKKworI2lmZGVmIENPTkZJR19TRVJJQUxfTUFOWV9QT1JUUworI2RlZmluZSBFWFRSQV9TRVJJQUxfUE9SVF9ERUZOUwkJCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgxQTAsIDksIEZPVVJQT1JUX0ZMQUdTIH0sIAkvKiB0dHlTNCAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MUE4LCA5LCBGT1VSUE9SVF9GTEFHUyB9LAkvKiB0dHlTNSAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MUIwLCA5LCBGT1VSUE9SVF9GTEFHUyB9LAkvKiB0dHlTNiAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MUI4LCA5LCBGT1VSUE9SVF9GTEFHUyB9LAkvKiB0dHlTNyAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MkEwLCA1LCBGT1VSUE9SVF9GTEFHUyB9LAkvKiB0dHlTOCAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MkE4LCA1LCBGT1VSUE9SVF9GTEFHUyB9LAkvKiB0dHlTOSAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MkIwLCA1LCBGT1VSUE9SVF9GTEFHUyB9LAkvKiB0dHlTMTAgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDJCOCwgNSwgRk9VUlBPUlRfRkxBR1MgfSwJLyogdHR5UzExICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgzMzAsIDQsIEFDQ0VOVF9GTEFHUyB9LAkvKiB0dHlTMTIgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDMzOCwgNCwgQUNDRU5UX0ZMQUdTIH0sCS8qIHR0eVMxMyAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MDAwLCAwLCAwIH0sCS8qIHR0eVMxNCAoc3BhcmUpICovCQlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MDAwLCAwLCAwIH0sCS8qIHR0eVMxNSAoc3BhcmUpICovCQlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MTAwLCAxMiwgQk9DQV9GTEFHUyB9LAkvKiB0dHlTMTYgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDEwOCwgMTIsIEJPQ0FfRkxBR1MgfSwJLyogdHR5UzE3ICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgxMTAsIDEyLCBCT0NBX0ZMQUdTIH0sCS8qIHR0eVMxOCAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MTE4LCAxMiwgQk9DQV9GTEFHUyB9LAkvKiB0dHlTMTkgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDEyMCwgMTIsIEJPQ0FfRkxBR1MgfSwJLyogdHR5UzIwICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgxMjgsIDEyLCBCT0NBX0ZMQUdTIH0sCS8qIHR0eVMyMSAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MTMwLCAxMiwgQk9DQV9GTEFHUyB9LAkvKiB0dHlTMjIgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDEzOCwgMTIsIEJPQ0FfRkxBR1MgfSwJLyogdHR5UzIzICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgxNDAsIDEyLCBCT0NBX0ZMQUdTIH0sCS8qIHR0eVMyNCAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MTQ4LCAxMiwgQk9DQV9GTEFHUyB9LAkvKiB0dHlTMjUgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDE1MCwgMTIsIEJPQ0FfRkxBR1MgfSwJLyogdHR5UzI2ICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgxNTgsIDEyLCBCT0NBX0ZMQUdTIH0sCS8qIHR0eVMyNyAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MTYwLCAxMiwgQk9DQV9GTEFHUyB9LAkvKiB0dHlTMjggKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDE2OCwgMTIsIEJPQ0FfRkxBR1MgfSwJLyogdHR5UzI5ICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgxNzAsIDEyLCBCT0NBX0ZMQUdTIH0sCS8qIHR0eVMzMCAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MTc4LCAxMiwgQk9DQV9GTEFHUyB9LAkvKiB0dHlTMzEgKi8KKyNlbHNlCisjZGVmaW5lIEVYVFJBX1NFUklBTF9QT1JUX0RFRk5TCisjZW5kaWYKKworI2RlZmluZSBTRVJJQUxfUE9SVF9ERk5TCQlcCisJU1REX1NFUklBTF9QT1JUX0RFRk5TCQlcCisJRVhUUkFfU0VSSUFMX1BPUlRfREVGTlMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL3NldHVwLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9zZXR1cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlMDIzYTQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9zZXR1cC5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfX0FMUEhBX1NFVFVQX0gKKyNkZWZpbmUgX19BTFBIQV9TRVRVUF9ICisKKyNkZWZpbmUgQ09NTUFORF9MSU5FX1NJWkUJMjU2CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvc2ZwLW1hY2hpbmUuaCBiL2luY2x1ZGUvYXNtLWFscGhhL3NmcC1tYWNoaW5lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZlNjNhZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL3NmcC1tYWNoaW5lLmgKQEAgLTAsMCArMSw4MiBAQAorLyogTWFjaGluZS1kZXBlbmRlbnQgc29mdHdhcmUgZmxvYXRpbmctcG9pbnQgZGVmaW5pdGlvbnMuCisgICBBbHBoYSBrZXJuZWwgdmVyc2lvbi4KKyAgIENvcHlyaWdodCAoQykgMTk5NywxOTk4LDE5OTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKyAgIENvbnRyaWJ1dGVkIGJ5IFJpY2hhcmQgSGVuZGVyc29uIChydGhAY3lnbnVzLmNvbSksCisJCSAgSmFrdWIgSmVsaW5layAoamFrdWJAcmVkaGF0LmNvbSkgYW5kCisJCSAgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUByZWRoYXQuY29tKS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyAgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZgorICAgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisKKyNpZm5kZWYgX1NGUF9NQUNISU5FX0gKKyNkZWZpbmUgX1NGUF9NQUNISU5FX0gKKyAgIAorI2RlZmluZSBfRlBfV19UWVBFX1NJWkUJCTY0CisjZGVmaW5lIF9GUF9XX1RZUEUJCXVuc2lnbmVkIGxvbmcKKyNkZWZpbmUgX0ZQX1dTX1RZUEUJCXNpZ25lZCBsb25nCisjZGVmaW5lIF9GUF9JX1RZUEUJCWxvbmcKKworI2RlZmluZSBfRlBfTVVMX01FQVRfUyhSLFgsWSkJCQkJCVwKKyAgX0ZQX01VTF9NRUFUXzFfaW1tKF9GUF9XRlJBQ0JJVFNfUyxSLFgsWSkKKyNkZWZpbmUgX0ZQX01VTF9NRUFUX0QoUixYLFkpCQkJCQlcCisgIF9GUF9NVUxfTUVBVF8xX3dpZGUoX0ZQX1dGUkFDQklUU19ELFIsWCxZLHVtdWxfcHBtbSkKKyNkZWZpbmUgX0ZQX01VTF9NRUFUX1EoUixYLFkpCQkJCQlcCisgIF9GUF9NVUxfTUVBVF8yX3dpZGUoX0ZQX1dGUkFDQklUU19RLFIsWCxZLHVtdWxfcHBtbSkKKworI2RlZmluZSBfRlBfRElWX01FQVRfUyhSLFgsWSkJX0ZQX0RJVl9NRUFUXzFfaW1tKFMsUixYLFksX0ZQX0RJVl9IRUxQX2ltbSkKKyNkZWZpbmUgX0ZQX0RJVl9NRUFUX0QoUixYLFkpCV9GUF9ESVZfTUVBVF8xX3VkaXYoRCxSLFgsWSkKKyNkZWZpbmUgX0ZQX0RJVl9NRUFUX1EoUixYLFkpCV9GUF9ESVZfTUVBVF8yX3VkaXYoUSxSLFgsWSkKKworI2RlZmluZSBfRlBfTkFORlJBQ19TCQlfRlBfUU5BTkJJVF9TCisjZGVmaW5lIF9GUF9OQU5GUkFDX0QJCV9GUF9RTkFOQklUX0QKKyNkZWZpbmUgX0ZQX05BTkZSQUNfUQkJX0ZQX1FOQU5CSVRfUQorI2RlZmluZSBfRlBfTkFOU0lHTl9TCQkxCisjZGVmaW5lIF9GUF9OQU5TSUdOX0QJCTEKKyNkZWZpbmUgX0ZQX05BTlNJR05fUQkJMQorCisjZGVmaW5lIF9GUF9LRUVQTkFORlJBQ1AgMQorCisvKiBBbHBoYSBBcmNoaXRlY3R1cmUgSGFuZGJvb2ssIDQuNy4xMC40IHNhaXMgdGhhdAorICogd2Ugc2hvdWxkIHByZWZlciBhbnkgdHlwZSBvZiBOYU4gaW4gRmIsIHRoZW4gRmEuCisgKi8KKyNkZWZpbmUgX0ZQX0NIT09TRU5BTihmcywgd2MsIFIsIFgsIFksIE9QKQkJCVwKKyAgZG8gewkJCQkJCQkJXAorICAgIFIjI19zID0gWSMjX3M7CQkJCQkJXAorICAgIF9GUF9GUkFDX0NPUFlfIyN3YyhSLFgpOwkJCQkJXAorICAgIFIjI19jID0gRlBfQ0xTX05BTjsJCQkJCQlcCisgIH0gd2hpbGUgKDApCisKKy8qIE9idGFpbiB0aGUgY3VycmVudCByb3VuZGluZyBtb2RlLiAqLworI2RlZmluZSBGUF9ST1VORE1PREUJbW9kZQorI2RlZmluZSBGUF9STkRfTkVBUkVTVAkoRlBDUl9EWU5fTk9STUFMID4+IEZQQ1JfRFlOX1NISUZUKQorI2RlZmluZSBGUF9STkRfWkVSTwkoRlBDUl9EWU5fQ0hPUFBFRCA+PiBGUENSX0RZTl9TSElGVCkKKyNkZWZpbmUgRlBfUk5EX1BJTkYJKEZQQ1JfRFlOX1BMVVMgPj4gRlBDUl9EWU5fU0hJRlQpCisjZGVmaW5lIEZQX1JORF9NSU5GCShGUENSX0RZTl9NSU5VUyA+PiBGUENSX0RZTl9TSElGVCkKKworLyogRXhjZXB0aW9uIGZsYWdzLiAqLworI2RlZmluZSBGUF9FWF9JTlZBTElECQlJRUVFX1RSQVBfRU5BQkxFX0lOVgorI2RlZmluZSBGUF9FWF9PVkVSRkxPVwkJSUVFRV9UUkFQX0VOQUJMRV9PVkYKKyNkZWZpbmUgRlBfRVhfVU5ERVJGTE9XCQlJRUVFX1RSQVBfRU5BQkxFX1VORgorI2RlZmluZSBGUF9FWF9ESVZaRVJPCQlJRUVFX1RSQVBfRU5BQkxFX0RaRQorI2RlZmluZSBGUF9FWF9JTkVYQUNUCQlJRUVFX1RSQVBfRU5BQkxFX0lORQorI2RlZmluZSBGUF9FWF9ERU5PUk0JCUlFRUVfVFJBUF9FTkFCTEVfRE5PCisKKyNkZWZpbmUgRlBfREVOT1JNX1pFUk8JCShzd2NyICYgSUVFRV9NQVBfRE1aKQorCisvKiBXZSB3cml0ZSB0aGUgcmVzdWx0cyBhbHdheXMgKi8KKyNkZWZpbmUgRlBfSU5ISUJJVF9SRVNVTFRTIDAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9zaG1idWYuaCBiL2luY2x1ZGUvYXNtLWFscGhhL3NobWJ1Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3ZWU4NGYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9zaG1idWYuaApAQCAtMCwwICsxLDM4IEBACisjaWZuZGVmIF9BTFBIQV9TSE1CVUZfSAorI2RlZmluZSBfQUxQSEFfU0hNQlVGX0gKKworLyogCisgKiBUaGUgc2htaWQ2NF9kcyBzdHJ1Y3R1cmUgZm9yIGFscGhhIGFyY2hpdGVjdHVyZS4KKyAqIE5vdGUgZXh0cmEgcGFkZGluZyBiZWNhdXNlIHRoaXMgc3RydWN0dXJlIGlzIHBhc3NlZCBiYWNrIGFuZCBmb3J0aAorICogYmV0d2VlbiBrZXJuZWwgYW5kIHVzZXIgc3BhY2UuCisgKgorICogUGFkIHNwYWNlIGlzIGxlZnQgZm9yOgorICogLSAyIG1pc2NlbGxhbmVvdXMgNjQtYml0IHZhbHVlcworICovCisKK3N0cnVjdCBzaG1pZDY0X2RzIHsKKwlzdHJ1Y3QgaXBjNjRfcGVybQlzaG1fcGVybTsJLyogb3BlcmF0aW9uIHBlcm1zICovCisJc2l6ZV90CQkJc2htX3NlZ3N6OwkvKiBzaXplIG9mIHNlZ21lbnQgKGJ5dGVzKSAqLworCV9fa2VybmVsX3RpbWVfdAkJc2htX2F0aW1lOwkvKiBsYXN0IGF0dGFjaCB0aW1lICovCisJX19rZXJuZWxfdGltZV90CQlzaG1fZHRpbWU7CS8qIGxhc3QgZGV0YWNoIHRpbWUgKi8KKwlfX2tlcm5lbF90aW1lX3QJCXNobV9jdGltZTsJLyogbGFzdCBjaGFuZ2UgdGltZSAqLworCV9fa2VybmVsX3BpZF90CQlzaG1fY3BpZDsJLyogcGlkIG9mIGNyZWF0b3IgKi8KKwlfX2tlcm5lbF9waWRfdAkJc2htX2xwaWQ7CS8qIHBpZCBvZiBsYXN0IG9wZXJhdG9yICovCisJdW5zaWduZWQgbG9uZwkJc2htX25hdHRjaDsJLyogbm8uIG9mIGN1cnJlbnQgYXR0YWNoZXMgKi8KKwl1bnNpZ25lZCBsb25nCQlfX3VudXNlZDE7CisJdW5zaWduZWQgbG9uZwkJX191bnVzZWQyOworfTsKKworc3RydWN0IHNobWluZm82NCB7CisJdW5zaWduZWQgbG9uZwlzaG1tYXg7CisJdW5zaWduZWQgbG9uZwlzaG1taW47CisJdW5zaWduZWQgbG9uZwlzaG1tbmk7CisJdW5zaWduZWQgbG9uZwlzaG1zZWc7CisJdW5zaWduZWQgbG9uZwlzaG1hbGw7CisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDE7CisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDI7CisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDM7CisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDQ7Cit9OworCisjZW5kaWYgLyogX0FMUEhBX1NITUJVRl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9zaG1wYXJhbS5oIGIvaW5jbHVkZS9hc20tYWxwaGEvc2htcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzkwMWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvc2htcGFyYW0uaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX0FTTUFYUF9TSE1QQVJBTV9ICisjZGVmaW5lIF9BU01BWFBfU0hNUEFSQU1fSAorCisjZGVmaW5lCVNITUxCQSBQQUdFX1NJWkUJCSAvKiBhdHRhY2ggYWRkciBhIG11bHRpcGxlIG9mIHRoaXMgKi8KKworI2VuZGlmIC8qIF9BU01BWFBfU0hNUEFSQU1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvc2lnY29udGV4dC5oIGIvaW5jbHVkZS9hc20tYWxwaGEvc2lnY29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyM2NkYjAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9zaWdjb250ZXh0LmgKQEAgLTAsMCArMSwzNCBAQAorI2lmbmRlZiBfQVNNQVhQX1NJR0NPTlRFWFRfSAorI2RlZmluZSBfQVNNQVhQX1NJR0NPTlRFWFRfSAorCitzdHJ1Y3Qgc2lnY29udGV4dCB7CisJLyoKKwkgKiBXaGF0IHNob3VsZCB3ZSBoYXZlIGhlcmU/IEknZCBwcm9iYWJseSBiZXR0ZXIgdXNlIHRoZSBzYW1lCisJICogc3RhY2sgbGF5b3V0IGFzIE9TRi8xLCBqdXN0IGluIGNhc2Ugd2UgZXZlciB3YW50IHRvIHRyeQorCSAqIHJ1bm5pbmcgdGhlaXIgYmluYXJpZXMuLiAKKwkgKgorCSAqIFRoaXMgaXMgdGhlIGJhc2ljIGxheW91dCwgYnV0IEkgZG9uJ3Qga25vdyBpZiB3ZSdsbCBldmVyCisJICogYWN0dWFsbHkgZmlsbCBpbiBhbGwgdGhlIHZhbHVlcy4uCisJICovCisJIGxvbmcJCXNjX29uc3RhY2s7CisJIGxvbmcJCXNjX21hc2s7CisJIGxvbmcJCXNjX3BjOworCSBsb25nCQlzY19wczsKKwkgbG9uZwkJc2NfcmVnc1szMl07CisJIGxvbmcJCXNjX293bmVkZnA7CisJIGxvbmcJCXNjX2ZwcmVnc1szMl07CisJIHVuc2lnbmVkIGxvbmcJc2NfZnBjcjsKKwkgdW5zaWduZWQgbG9uZwlzY19mcF9jb250cm9sOworCSB1bnNpZ25lZCBsb25nCXNjX3Jlc2VydmVkMSwgc2NfcmVzZXJ2ZWQyOworCSB1bnNpZ25lZCBsb25nCXNjX3NzaXplOworCSBjaGFyICoJCXNjX3NiYXNlOworCSB1bnNpZ25lZCBsb25nCXNjX3RyYXBhcmdfYTA7CisJIHVuc2lnbmVkIGxvbmcJc2NfdHJhcGFyZ19hMTsKKwkgdW5zaWduZWQgbG9uZwlzY190cmFwYXJnX2EyOworCSB1bnNpZ25lZCBsb25nCXNjX2ZwX3RyYXBfcGM7CisJIHVuc2lnbmVkIGxvbmcJc2NfZnBfdHJpZ2dlcl9zdW07CisJIHVuc2lnbmVkIGxvbmcJc2NfZnBfdHJpZ2dlcl9pbnN0OworfTsKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL3NpZ2luZm8uaCBiL2luY2x1ZGUvYXNtLWFscGhhL3NpZ2luZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmJjYWI1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvc2lnaW5mby5oCkBAIC0wLDAgKzEsMTEgQEAKKyNpZm5kZWYgX0FMUEhBX1NJR0lORk9fSAorI2RlZmluZSBfQUxQSEFfU0lHSU5GT19ICisKKyNkZWZpbmUgX19BUkNIX1NJX1BSRUFNQkxFX1NJWkUJCSg0ICogc2l6ZW9mKGludCkpCisjZGVmaW5lIF9fQVJDSF9TSV9UUkFQTk8KKworI2RlZmluZSBTSUdFVl9QQURfU0laRQkJCSgoU0lHRVZfTUFYX1NJWkUvc2l6ZW9mKGludCkpIC0gNCkKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NpZ2luZm8uaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9zaWduYWwuaCBiL2luY2x1ZGUvYXNtLWFscGhhL3NpZ25hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1Zjk4YmMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9zaWduYWwuaApAQCAtMCwwICsxLDE5NyBAQAorI2lmbmRlZiBfQVNNQVhQX1NJR05BTF9ICisjZGVmaW5lIF9BU01BWFBfU0lHTkFMX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qIEF2b2lkIHRvbyBtYW55IGhlYWRlciBvcmRlcmluZyBwcm9ibGVtcy4gICovCitzdHJ1Y3Qgc2lnaW5mbzsKKworI2lmZGVmIF9fS0VSTkVMX18KKy8qIERpZ2l0YWwgVW5peCBkZWZpbmVzIDY0IHNpZ25hbHMuICBNb3N0IHRoaW5ncyBzaG91bGQgYmUgY2xlYW4gZW5vdWdoCisgICB0byByZWRlZmluZSB0aGlzIGF0IHdpbGwsIGlmIGNhcmUgaXMgdGFrZW4gdG8gbWFrZSBsaWJjIG1hdGNoLiAgKi8KKworI2RlZmluZSBfTlNJRwkJNjQKKyNkZWZpbmUgX05TSUdfQlBXCTY0CisjZGVmaW5lIF9OU0lHX1dPUkRTCShfTlNJRyAvIF9OU0lHX0JQVykKKwordHlwZWRlZiB1bnNpZ25lZCBsb25nIG9sZF9zaWdzZXRfdDsJCS8qIGF0IGxlYXN0IDMyIGJpdHMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcgc2lnW19OU0lHX1dPUkRTXTsKK30gc2lnc2V0X3Q7CisKKyNlbHNlCisvKiBIZXJlIHdlIG11c3QgY2F0ZXIgdG8gbGliY3MgdGhhdCBwb2tlIGFib3V0IGluIGtlcm5lbCBoZWFkZXJzLiAgKi8KKworI2RlZmluZSBOU0lHCQkzMgordHlwZWRlZiB1bnNpZ25lZCBsb25nIHNpZ3NldF90OworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisKKy8qCisgKiBMaW51eC9BWFAgaGFzIGRpZmZlcmVudCBzaWduYWwgbnVtYmVycyB0aGF0IExpbnV4L2kzODY6IEknbSB0cnlpbmcKKyAqIHRvIG1ha2UgaXQgT1NGLzEgYmluYXJ5IGNvbXBhdGlibGUsIGF0IGxlYXN0IGZvciBub3JtYWwgYmluYXJpZXMuCisgKi8KKyNkZWZpbmUgU0lHSFVQCQkgMQorI2RlZmluZSBTSUdJTlQJCSAyCisjZGVmaW5lIFNJR1FVSVQJCSAzCisjZGVmaW5lIFNJR0lMTAkJIDQKKyNkZWZpbmUgU0lHVFJBUAkJIDUKKyNkZWZpbmUgU0lHQUJSVAkJIDYKKyNkZWZpbmUgU0lHRU1UCQkgNworI2RlZmluZSBTSUdGUEUJCSA4CisjZGVmaW5lIFNJR0tJTEwJCSA5CisjZGVmaW5lIFNJR0JVUwkJMTAKKyNkZWZpbmUgU0lHU0VHVgkJMTEKKyNkZWZpbmUgU0lHU1lTCQkxMgorI2RlZmluZSBTSUdQSVBFCQkxMworI2RlZmluZSBTSUdBTFJNCQkxNAorI2RlZmluZSBTSUdURVJNCQkxNQorI2RlZmluZSBTSUdVUkcJCTE2CisjZGVmaW5lIFNJR1NUT1AJCTE3CisjZGVmaW5lIFNJR1RTVFAJCTE4CisjZGVmaW5lIFNJR0NPTlQJCTE5CisjZGVmaW5lIFNJR0NITEQJCTIwCisjZGVmaW5lIFNJR1RUSU4JCTIxCisjZGVmaW5lIFNJR1RUT1UJCTIyCisjZGVmaW5lIFNJR0lPCQkyMworI2RlZmluZSBTSUdYQ1BVCQkyNAorI2RlZmluZSBTSUdYRlNaCQkyNQorI2RlZmluZSBTSUdWVEFMUk0JMjYKKyNkZWZpbmUgU0lHUFJPRgkJMjcKKyNkZWZpbmUgU0lHV0lOQ0gJMjgKKyNkZWZpbmUgU0lHSU5GTwkJMjkKKyNkZWZpbmUgU0lHVVNSMQkJMzAKKyNkZWZpbmUgU0lHVVNSMgkJMzEKKworI2RlZmluZSBTSUdQT0xMCVNJR0lPCisjZGVmaW5lIFNJR1BXUglTSUdJTkZPCisjZGVmaW5lIFNJR0lPVAlTSUdBQlJUCisKKy8qIFRoZXNlIHNob3VsZCBub3QgYmUgY29uc2lkZXJlZCBjb25zdGFudHMgZnJvbSB1c2VybGFuZC4gICovCisjZGVmaW5lIFNJR1JUTUlOCTMyCisjZGVmaW5lIFNJR1JUTUFYCV9OU0lHCisKKy8qCisgKiBTQV9GTEFHUyB2YWx1ZXM6CisgKgorICogU0FfT05TVEFDSyBpbmRpY2F0ZXMgdGhhdCBhIHJlZ2lzdGVyZWQgc3RhY2tfdCB3aWxsIGJlIHVzZWQuCisgKiBTQV9JTlRFUlJVUFQgaXMgYSBuby1vcCwgYnV0IGxlZnQgZHVlIHRvIGhpc3RvcmljYWwgcmVhc29ucy4gVXNlIHRoZQorICogU0FfUkVTVEFSVCBmbGFnIHRvIGdldCByZXN0YXJ0aW5nIHNpZ25hbHMgKHdoaWNoIHdlcmUgdGhlIGRlZmF1bHQgbG9uZyBhZ28pCisgKiBTQV9OT0NMRFNUT1AgZmxhZyB0byB0dXJuIG9mZiBTSUdDSExEIHdoZW4gY2hpbGRyZW4gc3RvcC4KKyAqIFNBX1JFU0VUSEFORCBjbGVhcnMgdGhlIGhhbmRsZXIgd2hlbiB0aGUgc2lnbmFsIGlzIGRlbGl2ZXJlZC4KKyAqIFNBX05PQ0xEV0FJVCBmbGFnIG9uIFNJR0NITEQgdG8gaW5oaWJpdCB6b21iaWVzLgorICogU0FfTk9ERUZFUiBwcmV2ZW50cyB0aGUgY3VycmVudCBzaWduYWwgZnJvbSBiZWluZyBtYXNrZWQgaW4gdGhlIGhhbmRsZXIuCisgKgorICogU0FfT05FU0hPVCBhbmQgU0FfTk9NQVNLIGFyZSB0aGUgaGlzdG9yaWNhbCBMaW51eCBuYW1lcyBmb3IgdGhlIFNpbmdsZQorICogVW5peCBuYW1lcyBSRVNFVEhBTkQgYW5kIE5PREVGRVIgcmVzcGVjdGl2ZWx5LgorICovCisKKyNkZWZpbmUgU0FfT05TVEFDSwkweDAwMDAwMDAxCisjZGVmaW5lIFNBX1JFU1RBUlQJMHgwMDAwMDAwMgorI2RlZmluZSBTQV9OT0NMRFNUT1AJMHgwMDAwMDAwNAorI2RlZmluZSBTQV9OT0RFRkVSCTB4MDAwMDAwMDgKKyNkZWZpbmUgU0FfUkVTRVRIQU5ECTB4MDAwMDAwMTAKKyNkZWZpbmUgU0FfTk9DTERXQUlUCTB4MDAwMDAwMjAKKyNkZWZpbmUgU0FfU0lHSU5GTwkweDAwMDAwMDQwCisKKyNkZWZpbmUgU0FfT05FU0hPVAlTQV9SRVNFVEhBTkQKKyNkZWZpbmUgU0FfTk9NQVNLCVNBX05PREVGRVIKKyNkZWZpbmUgU0FfSU5URVJSVVBUCTB4MjAwMDAwMDAgLyogZHVtbXkgLS0gaWdub3JlZCAqLworCisvKiAKKyAqIHNpZ2FsdHN0YWNrIGNvbnRyb2xzCisgKi8KKyNkZWZpbmUgU1NfT05TVEFDSwkxCisjZGVmaW5lIFNTX0RJU0FCTEUJMgorCisjZGVmaW5lIE1JTlNJR1NUS1NaCTQwOTYKKyNkZWZpbmUgU0lHU1RLU1oJMTYzODQKKworCisjaWZkZWYgX19LRVJORUxfXworLyoKKyAqIFRoZXNlIHZhbHVlcyBvZiBzYV9mbGFncyBhcmUgdXNlZCBvbmx5IGJ5IHRoZSBrZXJuZWwgYXMgcGFydCBvZiB0aGUKKyAqIGlycSBoYW5kbGluZyByb3V0aW5lcy4KKyAqCisgKiBTQV9JTlRFUlJVUFQgaXMgYWxzbyB1c2VkIGJ5IHRoZSBpcnEgaGFuZGxpbmcgcm91dGluZXMuCisgKiBTQV9TSElSUSBpcyBmb3Igc2hhcmVkIGludGVycnVwdCBzdXBwb3J0IG9uIFBDSSBhbmQgRUlTQS4KKyAqLworI2RlZmluZSBTQV9QUk9CRQkJU0FfT05FU0hPVAorI2RlZmluZSBTQV9TQU1QTEVfUkFORE9NCVNBX1JFU1RBUlQKKyNkZWZpbmUgU0FfU0hJUlEJCTB4NDAwMDAwMDAKKyNlbmRpZgorCisjZGVmaW5lIFNJR19CTE9DSyAgICAgICAgICAxCS8qIGZvciBibG9ja2luZyBzaWduYWxzICovCisjZGVmaW5lIFNJR19VTkJMT0NLICAgICAgICAyCS8qIGZvciB1bmJsb2NraW5nIHNpZ25hbHMgKi8KKyNkZWZpbmUgU0lHX1NFVE1BU0sgICAgICAgIDMJLyogZm9yIHNldHRpbmcgdGhlIHNpZ25hbCBtYXNrICovCisKKy8qIFR5cGUgb2YgYSBzaWduYWwgaGFuZGxlci4gICovCit0eXBlZGVmIHZvaWQgX19zaWduYWxmbl90KGludCk7Cit0eXBlZGVmIF9fc2lnbmFsZm5fdCBfX3VzZXIgKl9fc2lnaGFuZGxlcl90OworCit0eXBlZGVmIHZvaWQgX19yZXN0b3JlZm5fdCh2b2lkKTsKK3R5cGVkZWYgX19yZXN0b3JlZm5fdCBfX3VzZXIgKl9fc2lncmVzdG9yZV90OworCisjZGVmaW5lIFNJR19ERkwJKChfX3NpZ2hhbmRsZXJfdCkwKQkvKiBkZWZhdWx0IHNpZ25hbCBoYW5kbGluZyAqLworI2RlZmluZSBTSUdfSUdOCSgoX19zaWdoYW5kbGVyX3QpMSkJLyogaWdub3JlIHNpZ25hbCAqLworI2RlZmluZSBTSUdfRVJSCSgoX19zaWdoYW5kbGVyX3QpLTEpCS8qIGVycm9yIHJldHVybiBmcm9tIHNpZ25hbCAqLworCisjaWZkZWYgX19LRVJORUxfXworc3RydWN0IG9zZl9zaWdhY3Rpb24geworCV9fc2lnaGFuZGxlcl90CXNhX2hhbmRsZXI7CisJb2xkX3NpZ3NldF90CXNhX21hc2s7CisJaW50CQlzYV9mbGFnczsKK307CisKK3N0cnVjdCBzaWdhY3Rpb24geworCV9fc2lnaGFuZGxlcl90CXNhX2hhbmRsZXI7CisJdW5zaWduZWQgbG9uZwlzYV9mbGFnczsKKwlzaWdzZXRfdAlzYV9tYXNrOwkvKiBtYXNrIGxhc3QgZm9yIGV4dGVuc2liaWxpdHkgKi8KK307CisKK3N0cnVjdCBrX3NpZ2FjdGlvbiB7CisJc3RydWN0IHNpZ2FjdGlvbiBzYTsKKwlfX3NpZ3Jlc3RvcmVfdCBrYV9yZXN0b3JlcjsKK307CisjZWxzZQorLyogSGVyZSB3ZSBtdXN0IGNhdGVyIHRvIGxpYmNzIHRoYXQgcG9rZSBhYm91dCBpbiBrZXJuZWwgaGVhZGVycy4gICovCisKK3N0cnVjdCBzaWdhY3Rpb24geworCXVuaW9uIHsKKwkgIF9fc2lnaGFuZGxlcl90CV9zYV9oYW5kbGVyOworCSAgdm9pZCAoKl9zYV9zaWdhY3Rpb24pKGludCwgc3RydWN0IHNpZ2luZm8gKiwgdm9pZCAqKTsKKwl9IF91OworCXNpZ3NldF90CXNhX21hc2s7CisJaW50CQlzYV9mbGFnczsKK307CisKKyNkZWZpbmUgc2FfaGFuZGxlcglfdS5fc2FfaGFuZGxlcgorI2RlZmluZSBzYV9zaWdhY3Rpb24JX3UuX3NhX3NpZ2FjdGlvbgorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCit0eXBlZGVmIHN0cnVjdCBzaWdhbHRzdGFjayB7CisJdm9pZCBfX3VzZXIgKnNzX3NwOworCWludCBzc19mbGFnczsKKwlzaXplX3Qgc3Nfc2l6ZTsKK30gc3RhY2tfdDsKKworLyogc2lnc3RhY2soMikgaXMgZGVwcmVjYXRlZCwgYW5kIHdpbGwgYmUgd2l0aGRyYXduIGluIGEgZnV0dXJlIHZlcnNpb24KKyAgIG9mIHRoZSBYL09wZW4gQ0FFIFNwZWNpZmljYXRpb24uICBVc2Ugc2lnYWx0c3RhY2sgaW5zdGVhZC4gIEl0IGlzIG9ubHkKKyAgIGltcGxlbWVudGVkIGhlcmUgZm9yIE9TRi8xIGNvbXBhdGliaWxpdHkuICAqLworCitzdHJ1Y3Qgc2lnc3RhY2sgeworCXZvaWQgX191c2VyICpzc19zcDsKKwlpbnQgc3Nfb25zdGFjazsKK307CisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8YXNtL3NpZ2NvbnRleHQuaD4KKworI2RlZmluZSBwdHJhY2Vfc2lnbmFsX2RlbGl2ZXIocmVncywgY29va2llKSBkbyB7IH0gd2hpbGUgKDApCisKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL3NtcC5oIGIvaW5jbHVkZS9hc20tYWxwaGEvc21wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JjMTczYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL3NtcC5oCkBAIC0wLDAgKzEsNjMgQEAKKyNpZm5kZWYgX19BU01fU01QX0gKKyNkZWZpbmUgX19BU01fU01QX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8YXNtL3BhbC5oPgorCisvKiBIQUNLOiBDYWJyaW8gV0hBTUkgcmV0dXJuIHZhbHVlIGlzIGJvZ3VzIGlmIG1vcmUgdGhhbiA4IGJpdHMgdXNlZC4uIDotKCAqLworCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBjaGFyCitfX2hhcmRfc21wX3Byb2Nlc3Nvcl9pZCh2b2lkKQoreworCXJlZ2lzdGVyIHVuc2lnbmVkIGNoYXIgX19yMCBfX2FzbV9fKCIkMCIpOworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkiY2FsbF9wYWwgJTEgI3doYW1pIgorCQk6ICI9ciIoX19yMCkKKwkJOiJpIiAoUEFMX3doYW1pKQorCQk6ICIkMSIsICIkMjIiLCAiJDIzIiwgIiQyNCIsICIkMjUiKTsKKwlyZXR1cm4gX19yMDsKK30KKworI2lmZGVmIENPTkZJR19TTVAKKworI2luY2x1ZGUgPGFzbS9pcnEuaD4KKworc3RydWN0IGNwdWluZm9fYWxwaGEgeworCXVuc2lnbmVkIGxvbmcgbG9vcHNfcGVyX2ppZmZ5OworCXVuc2lnbmVkIGxvbmcgbGFzdF9hc247CisJaW50IG5lZWRfbmV3X2FzbjsKKwlpbnQgYXNuX2xvY2s7CisJdW5zaWduZWQgbG9uZyBpcGlfY291bnQ7CisJdW5zaWduZWQgbG9uZyBwcm9mX211bHRpcGxpZXI7CisJdW5zaWduZWQgbG9uZyBwcm9mX2NvdW50ZXI7CisJdW5zaWduZWQgY2hhciBtY2hlY2tfZXhwZWN0ZWQ7CisJdW5zaWduZWQgY2hhciBtY2hlY2tfdGFrZW47CisJdW5zaWduZWQgY2hhciBtY2hlY2tfZXh0cmE7Cit9IF9fYXR0cmlidXRlX18oKGFsaWduZWQoNjQpKSk7CisKK2V4dGVybiBzdHJ1Y3QgY3B1aW5mb19hbHBoYSBjcHVfZGF0YVtOUl9DUFVTXTsKKworI2RlZmluZSBQUk9DX0NIQU5HRV9QRU5BTFRZICAgICAyMAorCisjZGVmaW5lIGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpCV9faGFyZF9zbXBfcHJvY2Vzc29yX2lkKCkKKyNkZWZpbmUgc21wX3Byb2Nlc3Nvcl9pZCgpCShjdXJyZW50X3RocmVhZF9pbmZvKCktPmNwdSkKKworZXh0ZXJuIGNwdW1hc2tfdCBjcHVfcHJlc2VudF9tYXNrOworZXh0ZXJuIGNwdW1hc2tfdCBjcHVfb25saW5lX21hcDsKK2V4dGVybiBpbnQgc21wX251bV9jcHVzOworI2RlZmluZSBjcHVfcG9zc2libGVfbWFwCWNwdV9wcmVzZW50X21hc2sKKworaW50IHNtcF9jYWxsX2Z1bmN0aW9uX29uX2NwdSh2b2lkICgqZnVuYykgKHZvaWQgKmluZm8pLCB2b2lkICppbmZvLGludCByZXRyeSwgaW50IHdhaXQsIGNwdW1hc2tfdCBjcHUpOworCisjZWxzZSAvKiBDT05GSUdfU01QICovCisKKyNkZWZpbmUgc21wX2NhbGxfZnVuY3Rpb25fb25fY3B1KGZ1bmMsaW5mbyxyZXRyeSx3YWl0LGNwdSkgICAgKHsgMDsgfSkKKworI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KKworI2RlZmluZSBOT19QUk9DX0lECSgtMSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9zb2NrZXQuaCBiL2luY2x1ZGUvYXNtLWFscGhhL3NvY2tldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwMDI1OWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9zb2NrZXQuaApAQCAtMCwwICsxLDU4IEBACisjaWZuZGVmIF9BU01fU09DS0VUX0gKKyNkZWZpbmUgX0FTTV9TT0NLRVRfSAorCisjaW5jbHVkZSA8YXNtL3NvY2tpb3MuaD4KKworLyogRm9yIHNldHNvY2tvcHQoMikgKi8KKy8qCisgKiBOb3RlOiB3ZSBvbmx5IGJvdGhlciBhYm91dCBtYWtpbmcgdGhlIFNPTF9TT0NLRVQgb3B0aW9ucworICogc2FtZSBhcyBPU0YvMSwgYXMgdGhhdCdzIGFsbCB0aGF0ICJub3JtYWwiIHByb2dyYW1zIGFyZQorICogbGlrZWx5IHRvIHNldC4gIFdlIGRvbid0IG5lY2Vzc2FyaWx5IHdhbnQgdG8gYmUgYmluYXJ5CisgKiBjb21wYXRpYmxlIHdpdGggX2V2ZXJ5dGhpbmdfLiAKKyAqLworI2RlZmluZSBTT0xfU09DS0VUCTB4ZmZmZgorCisjZGVmaW5lIFNPX0RFQlVHCTB4MDAwMQorI2RlZmluZSBTT19SRVVTRUFERFIJMHgwMDA0CisjZGVmaW5lIFNPX0tFRVBBTElWRQkweDAwMDgKKyNkZWZpbmUgU09fRE9OVFJPVVRFCTB4MDAxMAorI2RlZmluZSBTT19CUk9BRENBU1QJMHgwMDIwCisjZGVmaW5lIFNPX0xJTkdFUgkweDAwODAKKyNkZWZpbmUgU09fT09CSU5MSU5FCTB4MDEwMAorLyogVG8gYWRkIDojZGVmaW5lIFNPX1JFVVNFUE9SVCAweDAyMDAgKi8KKworI2RlZmluZSBTT19UWVBFCQkweDEwMDgKKyNkZWZpbmUgU09fRVJST1IJMHgxMDA3CisjZGVmaW5lIFNPX1NOREJVRgkweDEwMDEKKyNkZWZpbmUgU09fUkNWQlVGCTB4MTAwMgorI2RlZmluZQlTT19SQ1ZMT1dBVAkweDEwMTAKKyNkZWZpbmUJU09fU05ETE9XQVQJMHgxMDExCisjZGVmaW5lCVNPX1JDVlRJTUVPCTB4MTAxMgorI2RlZmluZQlTT19TTkRUSU1FTwkweDEwMTMKKyNkZWZpbmUgU09fQUNDRVBUQ09OTgkweDEwMTQKKworLyogbGludXgtc3BlY2lmaWMsIG1pZ2h0IGFzIHdlbGwgYmUgdGhlIHNhbWUgYXMgb24gaTM4NiAqLworI2RlZmluZSBTT19OT19DSEVDSwkxMQorI2RlZmluZSBTT19QUklPUklUWQkxMgorI2RlZmluZSBTT19CU0RDT01QQVQJMTQKKworI2RlZmluZSBTT19QQVNTQ1JFRAkxNworI2RlZmluZSBTT19QRUVSQ1JFRAkxOAorI2RlZmluZSBTT19CSU5EVE9ERVZJQ0UgMjUKKworLyogU29ja2V0IGZpbHRlcmluZyAqLworI2RlZmluZSBTT19BVFRBQ0hfRklMVEVSICAgICAgICAyNgorI2RlZmluZSBTT19ERVRBQ0hfRklMVEVSICAgICAgICAyNworCisjZGVmaW5lIFNPX1BFRVJOQU1FCQkyOAorI2RlZmluZSBTT19USU1FU1RBTVAJCTI5CisjZGVmaW5lIFNDTV9USU1FU1RBTVAJCVNPX1RJTUVTVEFNUAorCisjZGVmaW5lIFNPX1BFRVJTRUMJCTMwCisKKy8qIFNlY3VyaXR5IGxldmVscyAtIGFzIHBlciBOUkwgSVB2NiAtIGRvbid0IGFjdHVhbGx5IGRvIGFueXRoaW5nICovCisjZGVmaW5lIFNPX1NFQ1VSSVRZX0FVVEhFTlRJQ0FUSU9OCQkxOQorI2RlZmluZSBTT19TRUNVUklUWV9FTkNSWVBUSU9OX1RSQU5TUE9SVAkyMAorI2RlZmluZSBTT19TRUNVUklUWV9FTkNSWVBUSU9OX05FVFdPUksJCTIxCisKKyNlbmRpZiAvKiBfQVNNX1NPQ0tFVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9zb2NraW9zLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9zb2NraW9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ5NjFhNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL3NvY2tpb3MuaApAQCAtMCwwICsxLDE1IEBACisjaWZuZGVmIF9BU01fQUxQSEFfU09DS0lPU19ICisjZGVmaW5lIF9BU01fQUxQSEFfU09DS0lPU19ICisKKy8qIFNvY2tldC1sZXZlbCBJL08gY29udHJvbCBjYWxscy4gKi8KKworI2RlZmluZSBGSU9HRVRPV04JX0lPUignZicsIDEyMywgaW50KQorI2RlZmluZSBGSU9TRVRPV04gCV9JT1coJ2YnLCAxMjQsIGludCkKKworI2RlZmluZSBTSU9DQVRNQVJLCV9JT1IoJ3MnLCA3LCBpbnQpCisjZGVmaW5lIFNJT0NTUEdSUAlfSU9XKCdzJywgOCwgcGlkX3QpCisjZGVmaW5lIFNJT0NHUEdSUAlfSU9SKCdzJywgOSwgcGlkX3QpCisKKyNkZWZpbmUgU0lPQ0dTVEFNUAkweDg5MDYJCS8qIEdldCBzdGFtcCAtIGxpbnV4LXNwZWNpZmljICovCisKKyNlbmRpZiAvKiBfQVNNX0FMUEhBX1NPQ0tJT1NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvc3BpbmxvY2suaCBiL2luY2x1ZGUvYXNtLWFscGhhL3NwaW5sb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA3ODBkYmEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9zcGlubG9jay5oCkBAIC0wLDAgKzEsMjEyIEBACisjaWZuZGVmIF9BTFBIQV9TUElOTE9DS19ICisjZGVmaW5lIF9BTFBIQV9TUElOTE9DS19ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8YXNtL2N1cnJlbnQuaD4KKworCisvKgorICogU2ltcGxlIHNwaW4gbG9jayBvcGVyYXRpb25zLiAgVGhlcmUgYXJlIHR3byB2YXJpYW50cywgb25lIGNsZWFycyBJUlEncworICogb24gdGhlIGxvY2FsIHByb2Nlc3Nvciwgb25lIGRvZXMgbm90LgorICoKKyAqIFdlIG1ha2Ugbm8gZmFpcm5lc3MgYXNzdW1wdGlvbnMuIFRoZXkgaGF2ZSBhIGNvc3QuCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworCXZvbGF0aWxlIHVuc2lnbmVkIGludCBsb2NrOworI2lmZGVmIENPTkZJR19ERUJVR19TUElOTE9DSworCWludCBvbl9jcHU7CisJaW50IGxpbmVfbm87CisJdm9pZCAqcHJldmlvdXM7CisJc3RydWN0IHRhc2tfc3RydWN0ICogdGFzazsKKwljb25zdCBjaGFyICpiYXNlX2ZpbGU7CisjZW5kaWYKK30gc3BpbmxvY2tfdDsKKworI2lmZGVmIENPTkZJR19ERUJVR19TUElOTE9DSworI2RlZmluZSBTUElOX0xPQ0tfVU5MT0NLRUQJKHNwaW5sb2NrX3QpeyAwLCAtMSwgMCwgTlVMTCwgTlVMTCwgTlVMTCB9CisjZWxzZQorI2RlZmluZSBTUElOX0xPQ0tfVU5MT0NLRUQJKHNwaW5sb2NrX3QpeyAwIH0KKyNlbmRpZgorCisjZGVmaW5lIHNwaW5fbG9ja19pbml0KHgpCWRvIHsgKih4KSA9IFNQSU5fTE9DS19VTkxPQ0tFRDsgfSB3aGlsZSgwKQorI2RlZmluZSBzcGluX2lzX2xvY2tlZCh4KQkoKHgpLT5sb2NrICE9IDApCisjZGVmaW5lIHNwaW5fdW5sb2NrX3dhaXQoeCkJZG8geyBiYXJyaWVyKCk7IH0gd2hpbGUgKCh4KS0+bG9jaykKKworI2lmZGVmIENPTkZJR19ERUJVR19TUElOTE9DSworZXh0ZXJuIHZvaWQgX3Jhd19zcGluX3VubG9jayhzcGlubG9ja190ICogbG9jayk7CitleHRlcm4gdm9pZCBkZWJ1Z19zcGluX2xvY2soc3BpbmxvY2tfdCAqIGxvY2ssIGNvbnN0IGNoYXIgKiwgaW50KTsKK2V4dGVybiBpbnQgZGVidWdfc3Bpbl90cnlsb2NrKHNwaW5sb2NrX3QgKiBsb2NrLCBjb25zdCBjaGFyICosIGludCk7CisjZGVmaW5lIF9yYXdfc3Bpbl9sb2NrKExPQ0spIFwKKwlkZWJ1Z19zcGluX2xvY2soTE9DSywgX19CQVNFX0ZJTEVfXywgX19MSU5FX18pCisjZGVmaW5lIF9yYXdfc3Bpbl90cnlsb2NrKExPQ0spIFwKKwlkZWJ1Z19zcGluX3RyeWxvY2soTE9DSywgX19CQVNFX0ZJTEVfXywgX19MSU5FX18pCisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIF9yYXdfc3Bpbl91bmxvY2soc3BpbmxvY2tfdCAqIGxvY2spCit7CisJbWIoKTsKKwlsb2NrLT5sb2NrID0gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9yYXdfc3Bpbl9sb2NrKHNwaW5sb2NrX3QgKiBsb2NrKQoreworCWxvbmcgdG1wOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJIjE6CWxkbF9sCSUwLCUxXG4iCisJIglibmUJJTAsMmZcbiIKKwkiCWxkYQklMCwxXG4iCisJIglzdGxfYwklMCwlMVxuIgorCSIJYmVxCSUwLDJmXG4iCisJIgltYlxuIgorCSIuc3Vic2VjdGlvbiAyXG4iCisJIjI6CWxkbAklMCwlMVxuIgorCSIJYm5lCSUwLDJiXG4iCisJIglicgkxYlxuIgorCSIucHJldmlvdXMiCisJOiAiPSZyIiAodG1wKSwgIj1tIiAobG9jay0+bG9jaykKKwk6ICJtIihsb2NrLT5sb2NrKSA6ICJtZW1vcnkiKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgX3Jhd19zcGluX3RyeWxvY2soc3BpbmxvY2tfdCAqbG9jaykKK3sKKwlyZXR1cm4gIXRlc3RfYW5kX3NldF9iaXQoMCwgJmxvY2stPmxvY2spOworfQorI2VuZGlmIC8qIENPTkZJR19ERUJVR19TUElOTE9DSyAqLworCisjZGVmaW5lIF9yYXdfc3Bpbl9sb2NrX2ZsYWdzKGxvY2ssIGZsYWdzKSBfcmF3X3NwaW5fbG9jayhsb2NrKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgc3RydWN0IHsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbG9jazsKK30gcndsb2NrX3Q7CisKKyNkZWZpbmUgUldfTE9DS19VTkxPQ0tFRAkocndsb2NrX3QpeyAwIH0KKworI2RlZmluZSByd2xvY2tfaW5pdCh4KQkJZG8geyAqKHgpID0gUldfTE9DS19VTkxPQ0tFRDsgfSB3aGlsZSgwKQorCitzdGF0aWMgaW5saW5lIGludCByZWFkX2Nhbl9sb2NrKHJ3bG9ja190ICpsb2NrKQoreworCXJldHVybiAobG9jay0+bG9jayAmIDEpID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHdyaXRlX2Nhbl9sb2NrKHJ3bG9ja190ICpsb2NrKQoreworCXJldHVybiBsb2NrLT5sb2NrID09IDA7Cit9CisKKyNpZmRlZiBDT05GSUdfREVCVUdfUldMT0NLCitleHRlcm4gdm9pZCBfcmF3X3dyaXRlX2xvY2socndsb2NrX3QgKiBsb2NrKTsKK2V4dGVybiB2b2lkIF9yYXdfcmVhZF9sb2NrKHJ3bG9ja190ICogbG9jayk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIF9yYXdfd3JpdGVfbG9jayhyd2xvY2tfdCAqIGxvY2spCit7CisJbG9uZyByZWd4OworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJIjE6CWxkbF9sCSUxLCUwXG4iCisJIglibmUJJTEsNmZcbiIKKwkiCWxkYQklMSwxXG4iCisJIglzdGxfYwklMSwlMFxuIgorCSIJYmVxCSUxLDZmXG4iCisJIgltYlxuIgorCSIuc3Vic2VjdGlvbiAyXG4iCisJIjY6CWxkbAklMSwlMFxuIgorCSIJYm5lCSUxLDZiXG4iCisJIglicgkxYlxuIgorCSIucHJldmlvdXMiCisJOiAiPW0iICgqbG9jayksICI9JnIiIChyZWd4KQorCTogIm0iICgqbG9jaykgOiAibWVtb3J5Iik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfcmF3X3JlYWRfbG9jayhyd2xvY2tfdCAqIGxvY2spCit7CisJbG9uZyByZWd4OworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJIjE6CWxkbF9sCSUxLCUwXG4iCisJIglibGJzCSUxLDZmXG4iCisJIglzdWJsCSUxLDIsJTFcbiIKKwkiCXN0bF9jCSUxLCUwXG4iCisJIgliZXEJJTEsNmZcbiIKKwkiCW1iXG4iCisJIi5zdWJzZWN0aW9uIDJcbiIKKwkiNjoJbGRsCSUxLCUwXG4iCisJIglibGJzCSUxLDZiXG4iCisJIglicgkxYlxuIgorCSIucHJldmlvdXMiCisJOiAiPW0iICgqbG9jayksICI9JnIiIChyZWd4KQorCTogIm0iICgqbG9jaykgOiAibWVtb3J5Iik7Cit9CisjZW5kaWYgLyogQ09ORklHX0RFQlVHX1JXTE9DSyAqLworCitzdGF0aWMgaW5saW5lIGludCBfcmF3X3JlYWRfdHJ5bG9jayhyd2xvY2tfdCAqIGxvY2spCit7CisJbG9uZyByZWd4OworCWludCBzdWNjZXNzOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJIjE6CWxkbF9sCSUxLCUwXG4iCisJIglsZGEJJTIsMFxuIgorCSIJYmxicwklMSwyZlxuIgorCSIJc3VibAklMSwyLCUyXG4iCisJIglzdGxfYwklMiwlMFxuIgorCSIJYmVxCSUyLDZmXG4iCisJIjI6CW1iXG4iCisJIi5zdWJzZWN0aW9uIDJcbiIKKwkiNjoJYnIJMWJcbiIKKwkiLnByZXZpb3VzIgorCTogIj1tIiAoKmxvY2spLCAiPSZyIiAocmVneCksICI9JnIiIChzdWNjZXNzKQorCTogIm0iICgqbG9jaykgOiAibWVtb3J5Iik7CisKKwlyZXR1cm4gc3VjY2VzczsKK30KKworc3RhdGljIGlubGluZSBpbnQgX3Jhd193cml0ZV90cnlsb2NrKHJ3bG9ja190ICogbG9jaykKK3sKKwlsb25nIHJlZ3g7CisJaW50IHN1Y2Nlc3M7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkiMToJbGRsX2wJJTEsJTBcbiIKKwkiCWxkYQklMiwwXG4iCisJIglibmUJJTEsMmZcbiIKKwkiCWxkYQklMiwxXG4iCisJIglzdGxfYwklMiwlMFxuIgorCSIJYmVxCSUyLDZmXG4iCisJIjI6CW1iXG4iCisJIi5zdWJzZWN0aW9uIDJcbiIKKwkiNjoJYnIJMWJcbiIKKwkiLnByZXZpb3VzIgorCTogIj1tIiAoKmxvY2spLCAiPSZyIiAocmVneCksICI9JnIiIChzdWNjZXNzKQorCTogIm0iICgqbG9jaykgOiAibWVtb3J5Iik7CisKKwlyZXR1cm4gc3VjY2VzczsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9yYXdfd3JpdGVfdW5sb2NrKHJ3bG9ja190ICogbG9jaykKK3sKKwltYigpOworCWxvY2stPmxvY2sgPSAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX3Jhd19yZWFkX3VubG9jayhyd2xvY2tfdCAqIGxvY2spCit7CisJbG9uZyByZWd4OworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCSIJbWJcbiIKKwkiMToJbGRsX2wJJTEsJTBcbiIKKwkiCWFkZGwJJTEsMiwlMVxuIgorCSIJc3RsX2MJJTEsJTBcbiIKKwkiCWJlcQklMSw2ZlxuIgorCSIuc3Vic2VjdGlvbiAyXG4iCisJIjY6CWJyCTFiXG4iCisJIi5wcmV2aW91cyIKKwk6ICI9bSIgKCpsb2NrKSwgIj0mciIgKHJlZ3gpCisJOiAibSIgKCpsb2NrKSA6ICJtZW1vcnkiKTsKK30KKworI2VuZGlmIC8qIF9BTFBIQV9TUElOTE9DS19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9zdGF0LmggYi9pbmNsdWRlL2FzbS1hbHBoYS9zdGF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdhZDNlNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL3N0YXQuaApAQCAtMCwwICsxLDQ4IEBACisjaWZuZGVmIF9BTFBIQV9TVEFUX0gKKyNkZWZpbmUgX0FMUEhBX1NUQVRfSAorCitzdHJ1Y3Qgc3RhdCB7CisJdW5zaWduZWQgaW50CXN0X2RldjsKKwl1bnNpZ25lZCBpbnQJc3RfaW5vOworCXVuc2lnbmVkIGludAlzdF9tb2RlOworCXVuc2lnbmVkIGludAlzdF9ubGluazsKKwl1bnNpZ25lZCBpbnQJc3RfdWlkOworCXVuc2lnbmVkIGludAlzdF9naWQ7CisJdW5zaWduZWQgaW50CXN0X3JkZXY7CisJbG9uZwkJc3Rfc2l6ZTsKKwl1bnNpZ25lZCBsb25nCXN0X2F0aW1lOworCXVuc2lnbmVkIGxvbmcJc3RfbXRpbWU7CisJdW5zaWduZWQgbG9uZwlzdF9jdGltZTsKKwl1bnNpZ25lZCBpbnQJc3RfYmxrc2l6ZTsKKwl1bnNpZ25lZCBpbnQJc3RfYmxvY2tzOworCXVuc2lnbmVkIGludAlzdF9mbGFnczsKKwl1bnNpZ25lZCBpbnQJc3RfZ2VuOworfTsKKworLyogVGhlIHN0YXQ2NCBzdHJ1Y3R1cmUgaW5jcmVhc2VzIHRoZSBzaXplIG9mIGRldl90LCBibGtjbnRfdCwgYWRkcworICAgbmFub3NlY29uZCByZXNvbHV0aW9uIHRpbWVzLCBhbmQgcGFkZGluZyBmb3IgZXhwYW5zaW9uLiAgKi8KKworc3RydWN0IHN0YXQ2NCB7CisJdW5zaWduZWQgbG9uZwlzdF9kZXY7CisJdW5zaWduZWQgbG9uZwlzdF9pbm87CisJdW5zaWduZWQgbG9uZwlzdF9yZGV2OworCWxvbmcJCXN0X3NpemU7CisJdW5zaWduZWQgbG9uZwlzdF9ibG9ja3M7CisKKwl1bnNpZ25lZCBpbnQJc3RfbW9kZTsKKwl1bnNpZ25lZCBpbnQJc3RfdWlkOworCXVuc2lnbmVkIGludAlzdF9naWQ7CisJdW5zaWduZWQgaW50CXN0X2Jsa3NpemU7CisJdW5zaWduZWQgaW50CXN0X25saW5rOworCXVuc2lnbmVkIGludAlfX3BhZDA7CisKKwl1bnNpZ25lZCBsb25nCXN0X2F0aW1lOworCXVuc2lnbmVkIGxvbmcgCXN0X2F0aW1lX25zZWM7IAorCXVuc2lnbmVkIGxvbmcJc3RfbXRpbWU7CisJdW5zaWduZWQgbG9uZwlzdF9tdGltZV9uc2VjOworCXVuc2lnbmVkIGxvbmcJc3RfY3RpbWU7CisJdW5zaWduZWQgbG9uZyAgIHN0X2N0aW1lX25zZWM7CisgIAlsb25nCQlfX3VudXNlZFszXTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvc3RhdGZzLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9zdGF0ZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDE1ODMwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvc3RhdGZzLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9BTFBIQV9TVEFURlNfSAorI2RlZmluZSBfQUxQSEFfU1RBVEZTX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3N0YXRmcy5oPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL3N0cmluZy5oIGIvaW5jbHVkZS9hc20tYWxwaGEvc3RyaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU0NGZlYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL3N0cmluZy5oCkBAIC0wLDAgKzEsNjggQEAKKyNpZm5kZWYgX19BTFBIQV9TVFJJTkdfSF9fCisjZGVmaW5lIF9fQUxQSEFfU1RSSU5HX0hfXworCisjaWZkZWYgX19LRVJORUxfXworCisvKgorICogR0NDIG9mIGFueSByZWNlbnQgdmludGFnZSBkb2Vzbid0IGRvIHN0dXBpZCB0aGluZ3Mgd2l0aCBiY29weS4KKyAqIEVHQ1MgMS4xIGtub3dzIGFsbCBhYm91dCBleHBhbmRpbmcgbWVtY3B5IGlubGluZSwgb3RoZXJzIGRvbid0LgorICoKKyAqIFNpbWlsYXJseSBmb3IgYSBtZW1zZXQgd2l0aCBkYXRhID0gMC4KKyAqLworCisjZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNQWQorZXh0ZXJuIHZvaWQgKiBtZW1jcHkodm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVfdCk7CisjZGVmaW5lIF9fSEFWRV9BUkNIX01FTU1PVkUKK2V4dGVybiB2b2lkICogbWVtbW92ZSh2b2lkICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsKKworLyogRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCBtb2R1bGVzLiAgVW51c2VkIG90aGVyd2lzZS4gICovCitleHRlcm4gdm9pZCAqIF9fbWVtY3B5KHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOworCisjZGVmaW5lIG1lbWNweSBfX2J1aWx0aW5fbWVtY3B5CisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNU0VUCitleHRlcm4gdm9pZCAqIF9fY29uc3RhbnRfY19tZW1zZXQodm9pZCAqLCB1bnNpZ25lZCBsb25nLCBzaXplX3QpOworZXh0ZXJuIHZvaWQgKiBfX21lbXNldCh2b2lkICosIGludCwgc2l6ZV90KTsKK2V4dGVybiB2b2lkICogbWVtc2V0KHZvaWQgKiwgaW50LCBzaXplX3QpOworCisjZGVmaW5lIG1lbXNldChzLCBjLCBuKQkJCQkJCQkgICAgXAorKF9fYnVpbHRpbl9jb25zdGFudF9wKGMpCQkJCQkJICAgIFwKKyA/IChfX2J1aWx0aW5fY29uc3RhbnRfcChuKSAmJiAoYykgPT0gMAkJCQkJICAgIFwKKyAgICA/IF9fYnVpbHRpbl9tZW1zZXQoKHMpLDAsKG4pKSAJCQkJCSAgICBcCisgICAgOiBfX2NvbnN0YW50X2NfbWVtc2V0KChzKSwweDAxMDEwMTAxMDEwMTAxMDFVTCoodW5zaWduZWQgY2hhcikoYyksKG4pKSkgXAorIDogX19tZW1zZXQoKHMpLChjKSwobikpKQorCisjZGVmaW5lIF9fSEFWRV9BUkNIX1NUUkNQWQorZXh0ZXJuIGNoYXIgKiBzdHJjcHkoY2hhciAqLGNvbnN0IGNoYXIgKik7CisjZGVmaW5lIF9fSEFWRV9BUkNIX1NUUk5DUFkKK2V4dGVybiBjaGFyICogc3RybmNweShjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKKyNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSQ0FUCitleHRlcm4gY2hhciAqIHN0cmNhdChjaGFyICosIGNvbnN0IGNoYXIgKik7CisjZGVmaW5lIF9fSEFWRV9BUkNIX1NUUk5DQVQKK2V4dGVybiBjaGFyICogc3RybmNhdChjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKKyNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSQ0hSCitleHRlcm4gY2hhciAqIHN0cmNocihjb25zdCBjaGFyICosaW50KTsKKyNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSUkNIUgorZXh0ZXJuIGNoYXIgKiBzdHJyY2hyKGNvbnN0IGNoYXIgKixpbnQpOworI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJMRU4KK2V4dGVybiBzaXplX3Qgc3RybGVuKGNvbnN0IGNoYXIgKik7CisjZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNIUgorZXh0ZXJuIHZvaWQgKiBtZW1jaHIoY29uc3Qgdm9pZCAqLCBpbnQsIHNpemVfdCk7CisKKy8qIFRoZSBmb2xsb3dpbmcgcm91dGluZSBpcyBsaWtlIG1lbXNldCBleGNlcHQgdGhhdCBpdCB3cml0ZXMgMTYtYml0CisgICBhbGlnbmVkIHZhbHVlcy4gIFRoZSBERVNUIGFuZCBDT1VOVCBwYXJhbWV0ZXJzIG11c3QgYmUgZXZlbiBmb3IgCisgICBjb3JyZWN0IG9wZXJhdGlvbi4gICovCisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNU0VUVworZXh0ZXJuIHZvaWQgKiBfX21lbXNldHcodm9pZCAqZGVzdCwgdW5zaWduZWQgc2hvcnQsIHNpemVfdCBjb3VudCk7CisKKyNkZWZpbmUgbWVtc2V0dyhzLCBjLCBuKQkJCQkJCSBcCisoX19idWlsdGluX2NvbnN0YW50X3AoYykJCQkJCQkgXAorID8gX19jb25zdGFudF9jX21lbXNldCgocyksMHgwMDAxMDAwMTAwMDEwMDAxVUwqKHVuc2lnbmVkIHNob3J0KShjKSwobikpIFwKKyA6IF9fbWVtc2V0dygocyksKGMpLChuKSkpCisKK2V4dGVybiBpbnQgc3RyY2FzZWNtcChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfX0FMUEhBX1NUUklOR19IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL3N1c3BlbmQuaCBiL2luY2x1ZGUvYXNtLWFscGhhL3N1c3BlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzA0MmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvc3VzcGVuZC5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfX0FMUEhBX1NVU1BFTkRfSAorI2RlZmluZSBfX0FMUEhBX1NVU1BFTkRfSAorCisvKiBEdW1teSBpbmNsdWRlLiAqLworCisjZW5kaWYgIC8qIF9fQUxQSEFfU1VTUEVORF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9zeXNpbmZvLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9zeXNpbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg2YWJhMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL3N5c2luZm8uaApAQCAtMCwwICsxLDM5IEBACisvKgorICogaW5jbHVkZS9hc20tYWxwaGEvc3lzaW5mby5oCisgKi8KKworI2lmbmRlZiBfX0FTTV9BTFBIQV9TWVNJTkZPX0gKKyNkZWZpbmUgX19BU01fQUxQSEFfU1lTSU5GT19ICisKKy8qIFRoaXMgZGVmaW5lcyB0aGUgc3Vic2V0IG9mIHRoZSBPU0YvMSBnZXRzeXNpbmZvL3NldHN5c2luZm8gY2FsbHMKKyAgIHRoYXQgd2Ugc3VwcG9ydC4gICovCisKKyNkZWZpbmUgR1NJX1VBQ1BST0MJCQk4CisjZGVmaW5lIEdTSV9JRUVFX0ZQX0NPTlRST0wJCTQ1CisjZGVmaW5lIEdTSV9JRUVFX1NUQVRFX0FUX1NJR05BTAk0NgorI2RlZmluZSBHU0lfUFJPQ19UWVBFCQkJNjAKKyNkZWZpbmUgR1NJX0dFVF9IV1JQQgkJCTEwMQorCisjZGVmaW5lIFNTSV9OVlBBSVJTCQkJMQorI2RlZmluZSBTU0lfSUVFRV9GUF9DT05UUk9MCQkxNAorI2RlZmluZSBTU0lfSUVFRV9TVEFURV9BVF9TSUdOQUwJMTUKKyNkZWZpbmUgU1NJX0lFRUVfSUdOT1JFX1NUQVRFX0FUX1NJR05BTAkxNgorI2RlZmluZSBTU0lfSUVFRV9SQUlTRV9FWENFUFRJT04JMTAwMQkvKiBsaW51eCBzcGVjaWZpYyAqLworCisjZGVmaW5lIFNTSU5fVUFDUFJPQwkJCTYKKworI2RlZmluZSBVQUNfQklUTUFTSwkJCTcKKyNkZWZpbmUgVUFDX05PUFJJTlQJCQkxCisjZGVmaW5lIFVBQ19OT0ZJWAkJCTIKKyNkZWZpbmUgVUFDX1NJR0JVUwkJCTQKKworCisjaWZkZWYgX19LRVJORUxfXworCisvKiBUaGlzIGlzIHRoZSBzaGlmdCB0aGF0IGlzIGFwcGxpZWQgdG8gdGhlIFVBQyBiaXRzIGFzIHN0b3JlZCBpbiB0aGUKKyAgIHBlci10aHJlYWQgZmxhZ3MuICBTZWUgdGhyZWFkX2luZm8uaC4gICovCisjZGVmaW5lIFVBQ19TSElGVAkJCTYKKworI2VuZGlmCisKKyNlbmRpZiAvKiBfX0FTTV9BTFBIQV9TWVNJTkZPX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tYWxwaGEvc3lzdGVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA4Y2U5NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL3N5c3RlbS5oCkBAIC0wLDAgKzEsNjI2IEBACisjaWZuZGVmIF9fQUxQSEFfU1lTVEVNX0gKKyNkZWZpbmUgX19BTFBIQV9TWVNURU1fSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL3BhbC5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisKKy8qCisgKiBTeXN0ZW0gZGVmaW5lcy4uIE5vdGUgdGhhdCB0aGlzIGlzIGluY2x1ZGVkIGJvdGggZnJvbSAuYyBhbmQgLlMKKyAqIGZpbGVzLCBzbyBpdCBkb2VzIG9ubHkgZGVmaW5lcywgbm90IGFueSBDIGNvZGUuCisgKi8KKworLyoKKyAqIFdlIGxlYXZlIG9uZSBwYWdlIGZvciB0aGUgaW5pdGlhbCBzdGFjayBwYWdlLCBhbmQgb25lIHBhZ2UgZm9yCisgKiB0aGUgaW5pdGlhbCBwcm9jZXNzIHN0cnVjdHVyZS4gQWxzbywgdGhlIGNvbnNvbGUgZWF0cyAzIE1CIGZvcgorICogdGhlIGluaXRpYWwgYm9vdGxvYWRlciAob25lIG9mIHdoaWNoIHdlIGNhbiByZWNsYWltIGxhdGVyKS4KKyAqLworI2RlZmluZSBCT09UX1BDQgkweDIwMDAwMDAwCisjZGVmaW5lIEJPT1RfQUREUgkweDIwMDAwMDAwCisvKiBSZW1vdmUgd2hlbiBvZmZpY2lhbCBNSUxPIHNvdXJjZXMgaGF2ZSBFTEYgc3VwcG9ydDogKi8KKyNkZWZpbmUgQk9PVF9TSVpFCSgxNioxMDI0KQorCisjaWZkZWYgQ09ORklHX0FMUEhBX0xFR0FDWV9TVEFSVF9BRERSRVNTCisjZGVmaW5lIEtFUk5FTF9TVEFSVF9QSFlTCTB4MzAwMDAwIC8qIE9sZCBib290bG9hZGVycyBoYXJkY29kZWQgdGhpcy4gICovCisjZWxzZQorI2RlZmluZSBLRVJORUxfU1RBUlRfUEhZUwkweDEwMDAwMDAgLyogcmVxdWlyZWQ6IFdpbGRmaXJlL1RpdGFuL01hcnZlbCAqLworI2VuZGlmCisKKyNkZWZpbmUgS0VSTkVMX1NUQVJUCShQQUdFX09GRlNFVCtLRVJORUxfU1RBUlRfUEhZUykKKyNkZWZpbmUgU1dBUFBFUl9QR0QJS0VSTkVMX1NUQVJUCisjZGVmaW5lIElOSVRfU1RBQ0sJKFBBR0VfT0ZGU0VUK0tFUk5FTF9TVEFSVF9QSFlTKzB4MDIwMDApCisjZGVmaW5lIEVNUFRZX1BHVAkoUEFHRV9PRkZTRVQrS0VSTkVMX1NUQVJUX1BIWVMrMHgwNDAwMCkKKyNkZWZpbmUgRU1QVFlfUEdFCShQQUdFX09GRlNFVCtLRVJORUxfU1RBUlRfUEhZUysweDA4MDAwKQorI2RlZmluZSBaRVJPX1BHRQkoUEFHRV9PRkZTRVQrS0VSTkVMX1NUQVJUX1BIWVMrMHgwQTAwMCkKKworI2RlZmluZSBTVEFSVF9BRERSCShQQUdFX09GRlNFVCtLRVJORUxfU1RBUlRfUEhZUysweDEwMDAwKQorCisvKgorICogVGhpcyBpcyBzZXR1cCBieSB0aGUgc2Vjb25kYXJ5IGJvb3RzdHJhcCBsb2FkZXIuICBCZWNhdXNlCisgKiB0aGUgemVybyBwYWdlIGlzIHplcm9lZCBvdXQgYXMgc29vbiBhcyB0aGUgdm0gc3lzdGVtIGlzCisgKiBpbml0aWFsaXplZCwgd2UgbmVlZCB0byBjb3B5IHRoaW5ncyBvdXQgaW50byBhIG1vcmUgcGVybWFuZW50CisgKiBwbGFjZS4KKyAqLworI2RlZmluZSBQQVJBTQkJCVpFUk9fUEdFCisjZGVmaW5lIENPTU1BTkRfTElORQkJKChjaGFyKikoUEFSQU0gKyAweDAwMDApKQorI2RlZmluZSBJTklUUkRfU1RBUlQJCSgqKHVuc2lnbmVkIGxvbmcgKikgKFBBUkFNKzB4MTAwKSkKKyNkZWZpbmUgSU5JVFJEX1NJWkUJCSgqKHVuc2lnbmVkIGxvbmcgKikgKFBBUkFNKzB4MTA4KSkKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKworLyoKKyAqIFRoaXMgaXMgdGhlIGxvZ291dCBoZWFkZXIgdGhhdCBzaG91bGQgYmUgY29tbW9uIHRvIGFsbCBwbGF0Zm9ybXMKKyAqIChhc3N1bWluZyB0aGV5IGFyZSBydW5uaW5nIE9TRi8xIFBBTGNvZGUsIEkgZ3Vlc3MpLgorICovCitzdHJ1Y3QgZWxfY29tbW9uIHsKKwl1bnNpZ25lZCBpbnQJc2l6ZTsJCS8qIHNpemUgaW4gYnl0ZXMgb2YgbG9nb3V0IGFyZWEgKi8KKwl1bnNpZ25lZCBpbnQJc2J6MQk6IDMwOwkvKiBzaG91bGQgYmUgemVybyAqLworCXVuc2lnbmVkIGludAllcnIyCTogIDE7CS8qIHNlY29uZCBlcnJvciAqLworCXVuc2lnbmVkIGludAlyZXRyeQk6ICAxOwkvKiByZXRyeSBmbGFnICovCisJdW5zaWduZWQgaW50CXByb2Nfb2Zmc2V0OwkvKiBwcm9jZXNzb3Itc3BlY2lmaWMgb2Zmc2V0ICovCisJdW5zaWduZWQgaW50CXN5c19vZmZzZXQ7CS8qIHN5c3RlbS1zcGVjaWZpYyBvZmZzZXQgKi8KKwl1bnNpZ25lZCBpbnQJY29kZTsJCS8qIG1hY2hpbmUgY2hlY2sgY29kZSAqLworCXVuc2lnbmVkIGludAlmcmFtZV9yZXY7CS8qIGZyYW1lIHJldmlzaW9uICovCit9OworCisvKiBNYWNoaW5lIENoZWNrIEZyYW1lIGZvciB1bmNvcnJlY3RhYmxlIGVycm9ycyAoTGFyZ2UgZm9ybWF0KQorICogICAgICAtLS0gVGhpcyBpcyB1c2VkIHRvIGxvZyB1bmNvcnJlY3RhYmxlIGVycm9ycyBzdWNoIGFzCisgKiAgICAgICAgICBkb3VibGUgYml0IEVDQyBlcnJvcnMuCisgKiAgICAgIC0tLSBUaGVzZSBlcnJvcnMgYXJlIGRldGVjdGVkIGJ5IGJvdGggcHJvY2Vzc29yIGFuZCBzeXN0ZW1zLgorICovCitzdHJ1Y3QgZWxfY29tbW9uX0VWNV91bmNvcnJlY3RhYmxlX21jaGVjayB7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgICBzaGFkb3dbOF07ICAgICAgICAvKiBTaGFkb3cgcmVnLiA4LTE0LCAyNSAgICAgICAgICAgKi8KKyAgICAgICAgdW5zaWduZWQgbG9uZyAgIHBhbHRlbXBbMjRdOyAgICAgIC8qIFBBTCBURU1QIFJFR1MuICAgICAgICAgICAgICAgICAqLworICAgICAgICB1bnNpZ25lZCBsb25nICAgZXhjX2FkZHI7ICAgICAgICAgLyogQWRkcmVzcyBvZiBleGNlcHRpbmcgaW5zdHJ1Y3Rpb24qLworICAgICAgICB1bnNpZ25lZCBsb25nICAgZXhjX3N1bTsgICAgICAgICAgLyogU3VtbWFyeSBvZiBhcml0aG1ldGljIHRyYXBzLiAgICovCisgICAgICAgIHVuc2lnbmVkIGxvbmcgICBleGNfbWFzazsgICAgICAgICAvKiBFeGNlcHRpb24gbWFzayAoZnJvbSBleGNfc3VtKS4gKi8KKyAgICAgICAgdW5zaWduZWQgbG9uZyAgIHBhbF9iYXNlOyAgICAgICAgIC8qIEJhc2UgYWRkcmVzcyBmb3IgUEFMY29kZS4gICAgICAqLworICAgICAgICB1bnNpZ25lZCBsb25nICAgaXNyOyAgICAgICAgICAgICAgLyogSW50ZXJydXB0IFN0YXR1cyBSZWcuICAgICAgICAgICovCisgICAgICAgIHVuc2lnbmVkIGxvbmcgICBpY3NyOyAgICAgICAgICAgICAvKiBDVVJSRU5UIFNFVFVQIE9GIEVWNSBJQk9YICAgICAgKi8KKyAgICAgICAgdW5zaWduZWQgbG9uZyAgIGljX3BlcnJfc3RhdDsgICAgIC8qIEktQ0FDSEUgUmVnLiA8MTE+IHNldCBEYXRhIHBhcml0eQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDEyPiBzZXQgVEFHIHBhcml0eSovCisgICAgICAgIHVuc2lnbmVkIGxvbmcgICBkY19wZXJyX3N0YXQ7ICAgICAvKiBELUNBQ0hFIGVycm9yIFJlZy4gQml0cyBzZXQgdG8gMToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDI+IERhdGEgZXJyb3IgaW4gYmFuayAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwzPiBEYXRhIGVycm9yIGluIGJhbmsgMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ND4gVGFnIGVycm9yIGluIGJhbmsgMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8NT4gVGFnIGVycm9yIGluIGJhbmsgMSAqLworICAgICAgICB1bnNpZ25lZCBsb25nICAgdmE7ICAgICAgICAgICAgICAgLyogRWZmZWN0aXZlIFZBIG9mIGZhdWx0IG9yIG1pc3MuICovCisgICAgICAgIHVuc2lnbmVkIGxvbmcgICBtbV9zdGF0OyAgICAgICAgICAvKiBIb2xkcyB0aGUgcmVhc29uIGZvciBELXN0cmVhbSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhdWx0IG9yIEQtY2FjaGUgcGFyaXR5IGVycm9ycyAqLworICAgICAgICB1bnNpZ25lZCBsb25nICAgc2NfYWRkcjsgICAgICAgICAgLyogQWRkcmVzcyB0aGF0IHdhcyBiZWluZyBhY2Nlc3NlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBFVjUgZGV0ZWN0ZWQgU2Vjb25kYXJ5IGNhY2hlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWlsdXJlLiAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgdW5zaWduZWQgbG9uZyAgIHNjX3N0YXQ7ICAgICAgICAgIC8qIEhlbHBzIGRldGVybWluZSBpZiB0aGUgZXJyb3Igd2FzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQUcvRGF0YSBwYXJpdHkoU2Vjb25kYXJ5IENhY2hlKSovCisgICAgICAgIHVuc2lnbmVkIGxvbmcgICBiY190YWdfYWRkcjsgICAgICAvKiBDb250ZW50cyBvZiBFVjUgQkNfVEFHX0FERFIgICAgKi8KKyAgICAgICAgdW5zaWduZWQgbG9uZyAgIGVpX2FkZHI7ICAgICAgICAgIC8qIFBoeXNpY2FsIGFkZHJlc3Mgb2YgYW55IHRyYW5zZmVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IGlzIGxvZ2dlZCBpbiBFVjUgRUlfU1RBVCAqLworICAgICAgICB1bnNpZ25lZCBsb25nICAgZmlsbF9zeW5kcm9tZTsgICAgLyogRm9yIGNvcnJlY3RpbmcgRUNDIGVycm9ycy4gICAgICovCisgICAgICAgIHVuc2lnbmVkIGxvbmcgICBlaV9zdGF0OyAgICAgICAgICAvKiBIZWxwcyBpZGVudGlmeSByZWFzb24gb2YgYW55IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc29yIHVuY29ycmVjdGFibGUgZXJyb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0IGl0cyBleHRlcm5hbCBpbnRlcmZhY2UuICAgICAqLworICAgICAgICB1bnNpZ25lZCBsb25nICAgbGRfbG9jazsgICAgICAgICAgLyogQ29udGVudHMgb2YgRVY1IExEX0xPQ0sgcmVnaXN0ZXIqLworfTsKKworc3RydWN0IGVsX2NvbW1vbl9FVjZfbWNoZWNrIHsKKwl1bnNpZ25lZCBpbnQgRnJhbWVTaXplOwkJLyogQnl0ZXMsIGluY2x1ZGluZyB0aGlzIGZpZWxkICovCisJdW5zaWduZWQgaW50IEZyYW1lRmxhZ3M7CS8qIDwzMT4gPSBSZXRyeSwgPDMwPiA9IFNlY29uZCBFcnJvciAqLworCXVuc2lnbmVkIGludCBDcHVPZmZzZXQ7CQkvKiBPZmZzZXQgdG8gQ1BVLXNwZWNpZmljIGluZm8gKi8KKwl1bnNpZ25lZCBpbnQgU3lzdGVtT2Zmc2V0OwkvKiBPZmZzZXQgdG8gc3lzdGVtLXNwZWNpZmljIGluZm8gKi8KKwl1bnNpZ25lZCBpbnQgTUNIS19Db2RlOworCXVuc2lnbmVkIGludCBNQ0hLX0ZyYW1lX1JldjsKKwl1bnNpZ25lZCBsb25nIElfU1RBVDsJCS8qIEVWNiBJbnRlcm5hbCBQcm9jZXNzb3IgUmVnaXN0ZXJzICovCisJdW5zaWduZWQgbG9uZyBEQ19TVEFUOwkJLyogKFNlZSB0aGUgMjEyNjQgU3BlYykgKi8KKwl1bnNpZ25lZCBsb25nIENfQUREUjsKKwl1bnNpZ25lZCBsb25nIERDMV9TWU5EUk9NRTsKKwl1bnNpZ25lZCBsb25nIERDMF9TWU5EUk9NRTsKKwl1bnNpZ25lZCBsb25nIENfU1RBVDsKKwl1bnNpZ25lZCBsb25nIENfU1RTOworCXVuc2lnbmVkIGxvbmcgTU1fU1RBVDsKKwl1bnNpZ25lZCBsb25nIEVYQ19BRERSOworCXVuc2lnbmVkIGxvbmcgSUVSX0NNOworCXVuc2lnbmVkIGxvbmcgSVNVTTsKKwl1bnNpZ25lZCBsb25nIFJFU0VSVkVEMDsKKwl1bnNpZ25lZCBsb25nIFBBTF9CQVNFOworCXVuc2lnbmVkIGxvbmcgSV9DVEw7CisJdW5zaWduZWQgbG9uZyBQQ1RYOworfTsKKworZXh0ZXJuIHZvaWQgaGFsdCh2b2lkKSBfX2F0dHJpYnV0ZV9fKChub3JldHVybikpOworI2RlZmluZSBfX2hhbHQoKSBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImNhbGxfcGFsICUwICNoYWx0IiA6IDogImkiIChQQUxfaGFsdCkpCisKKyNkZWZpbmUgc3dpdGNoX3RvKFAsTixMKQkJCQkJCVwKKyAgZG8gewkJCQkJCQkJCVwKKyAgICAoTCkgPSBhbHBoYV9zd2l0Y2hfdG8odmlydF90b19waHlzKCYoTiktPnRocmVhZF9pbmZvLT5wY2IpLCAoUCkpOwlcCisgICAgY2hlY2tfbW11X2NvbnRleHQoKTsJCQkJCQlcCisgIH0gd2hpbGUgKDApCisKK3N0cnVjdCB0YXNrX3N0cnVjdDsKK2V4dGVybiBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmFscGhhX3N3aXRjaF90byh1bnNpZ25lZCBsb25nLCBzdHJ1Y3QgdGFza19zdHJ1Y3QqKTsKKworI2RlZmluZSBtYigpIFwKK19fYXNtX18gX192b2xhdGlsZV9fKCJtYiI6IDogOiJtZW1vcnkiKQorCisjZGVmaW5lIHJtYigpIFwKK19fYXNtX18gX192b2xhdGlsZV9fKCJtYiI6IDogOiJtZW1vcnkiKQorCisjZGVmaW5lIHdtYigpIFwKK19fYXNtX18gX192b2xhdGlsZV9fKCJ3bWIiOiA6IDoibWVtb3J5IikKKworI2RlZmluZSByZWFkX2JhcnJpZXJfZGVwZW5kcygpIFwKK19fYXNtX18gX192b2xhdGlsZV9fKCJtYiI6IDogOiJtZW1vcnkiKQorCisjaWZkZWYgQ09ORklHX1NNUAorI2RlZmluZSBzbXBfbWIoKQltYigpCisjZGVmaW5lIHNtcF9ybWIoKQlybWIoKQorI2RlZmluZSBzbXBfd21iKCkJd21iKCkKKyNkZWZpbmUgc21wX3JlYWRfYmFycmllcl9kZXBlbmRzKCkJcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQorI2Vsc2UKKyNkZWZpbmUgc21wX21iKCkJYmFycmllcigpCisjZGVmaW5lIHNtcF9ybWIoKQliYXJyaWVyKCkKKyNkZWZpbmUgc21wX3dtYigpCWJhcnJpZXIoKQorI2RlZmluZSBzbXBfcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQliYXJyaWVyKCkKKyNlbmRpZgorCisjZGVmaW5lIHNldF9tYih2YXIsIHZhbHVlKSBcCitkbyB7IHZhciA9IHZhbHVlOyBtYigpOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIHNldF93bWIodmFyLCB2YWx1ZSkgXAorZG8geyB2YXIgPSB2YWx1ZTsgd21iKCk7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgaW1iKCkgXAorX19hc21fXyBfX3ZvbGF0aWxlX18gKCJjYWxsX3BhbCAlMCAjaW1iIiA6IDogImkiIChQQUxfaW1iKSA6ICJtZW1vcnkiKQorCisjZGVmaW5lIGRyYWluYSgpIFwKK19fYXNtX18gX192b2xhdGlsZV9fICgiY2FsbF9wYWwgJTAgI2RyYWluYSIgOiA6ICJpIiAoUEFMX2RyYWluYSkgOiAibWVtb3J5IikKKworZW51bSBpbXBsdmVyX2VudW0geworCUlNUExWRVJfRVY0LAorCUlNUExWRVJfRVY1LAorCUlNUExWRVJfRVY2Cit9OworCisjaWZkZWYgQ09ORklHX0FMUEhBX0dFTkVSSUMKKyNkZWZpbmUgaW1wbHZlcigpCQkJCVwKKyh7IHVuc2lnbmVkIGxvbmcgX19pbXBsdmVyOwkJCVwKKyAgIF9fYXNtX18gKCJpbXBsdmVyICUwIiA6ICI9ciIoX19pbXBsdmVyKSk7CVwKKyAgIChlbnVtIGltcGx2ZXJfZW51bSkgX19pbXBsdmVyOyB9KQorI2Vsc2UKKy8qIFRyeSB0byBlbGltaW5hdGUgc29tZSBkZWFkIGNvZGUuICAqLworI2lmZGVmIENPTkZJR19BTFBIQV9FVjQKKyNkZWZpbmUgaW1wbHZlcigpIElNUExWRVJfRVY0CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQUxQSEFfRVY1CisjZGVmaW5lIGltcGx2ZXIoKSBJTVBMVkVSX0VWNQorI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfQUxQSEFfRVY2KQorI2RlZmluZSBpbXBsdmVyKCkgSU1QTFZFUl9FVjYKKyNlbmRpZgorI2VuZGlmCisKK2VudW0gYW1hc2tfZW51bSB7CisJQU1BU0tfQldYID0gKDFVTCA8PCAwKSwKKwlBTUFTS19GSVggPSAoMVVMIDw8IDEpLAorCUFNQVNLX0NJWCA9ICgxVUwgPDwgMiksCisJQU1BU0tfTUFYID0gKDFVTCA8PCA4KSwKKwlBTUFTS19QUkVDSVNFX1RSQVAgPSAoMVVMIDw8IDkpLAorfTsKKworI2RlZmluZSBhbWFzayhtYXNrKQkJCQkJCVwKKyh7IHVuc2lnbmVkIGxvbmcgX19hbWFzaywgX19pbnB1dCA9IChtYXNrKTsJCQlcCisgICBfX2FzbV9fICgiYW1hc2sgJTEsJTAiIDogIj1yIihfX2FtYXNrKSA6ICJySSIoX19pbnB1dCkpOwlcCisgICBfX2FtYXNrOyB9KQorCisjZGVmaW5lIF9fQ0FMTF9QQUxfUjAoTkFNRSwgVFlQRSkJCQkJXAorc3RhdGljIGlubGluZSBUWVBFIE5BTUUodm9pZCkJCQkJCVwKK3sJCQkJCQkJCVwKKwlyZWdpc3RlciBUWVBFIF9fcjAgX19hc21fXygiJDAiKTsJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQlcCisJCSJjYWxsX3BhbCAlMSAjICIgI05BTUUJCQkJXAorCQk6Ij1yIiAoX19yMCkJCQkJCVwKKwkJOiJpIiAoUEFMXyAjIyBOQU1FKQkJCQlcCisJCToiJDEiLCAiJDE2IiwgIiQyMiIsICIkMjMiLCAiJDI0IiwgIiQyNSIpOwlcCisJcmV0dXJuIF9fcjA7CQkJCQkJXAorfQorCisjZGVmaW5lIF9fQ0FMTF9QQUxfVzEoTkFNRSwgVFlQRTApCQkJCVwKK3N0YXRpYyBpbmxpbmUgdm9pZCBOQU1FKFRZUEUwIGFyZzApCQkJCVwKK3sJCQkJCQkJCVwKKwlyZWdpc3RlciBUWVBFMCBfX3IxNiBfX2FzbV9fKCIkMTYiKSA9IGFyZzA7CQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQlcCisJCSJjYWxsX3BhbCAlMSAjICIjTkFNRQkJCQlcCisJCTogIj1yIihfX3IxNikJCQkJCVwKKwkJOiAiaSIoUEFMXyAjIyBOQU1FKSwgIjAiKF9fcjE2KQkJCVwKKwkJOiAiJDEiLCAiJDIyIiwgIiQyMyIsICIkMjQiLCAiJDI1Iik7CQlcCit9CisKKyNkZWZpbmUgX19DQUxMX1BBTF9XMihOQU1FLCBUWVBFMCwgVFlQRTEpCQkJXAorc3RhdGljIGlubGluZSB2b2lkIE5BTUUoVFlQRTAgYXJnMCwgVFlQRTEgYXJnMSkJCQlcCit7CQkJCQkJCQlcCisJcmVnaXN0ZXIgVFlQRTAgX19yMTYgX19hc21fXygiJDE2IikgPSBhcmcwOwkJXAorCXJlZ2lzdGVyIFRZUEUxIF9fcjE3IF9fYXNtX18oIiQxNyIpID0gYXJnMTsJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCVwKKwkJImNhbGxfcGFsICUyICMgIiNOQU1FCQkJCVwKKwkJOiAiPXIiKF9fcjE2KSwgIj1yIihfX3IxNykJCQlcCisJCTogImkiKFBBTF8gIyMgTkFNRSksICIwIihfX3IxNiksICIxIihfX3IxNykJXAorCQk6ICIkMSIsICIkMjIiLCAiJDIzIiwgIiQyNCIsICIkMjUiKTsJCVwKK30KKworI2RlZmluZSBfX0NBTExfUEFMX1JXMShOQU1FLCBSVFlQRSwgVFlQRTApCQkJXAorc3RhdGljIGlubGluZSBSVFlQRSBOQU1FKFRZUEUwIGFyZzApCQkJCVwKK3sJCQkJCQkJCVwKKwlyZWdpc3RlciBSVFlQRSBfX3IwIF9fYXNtX18oIiQwIik7CQkJXAorCXJlZ2lzdGVyIFRZUEUwIF9fcjE2IF9fYXNtX18oIiQxNiIpID0gYXJnMDsJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCVwKKwkJImNhbGxfcGFsICUyICMgIiNOQU1FCQkJCVwKKwkJOiAiPXIiKF9fcjE2KSwgIj1yIihfX3IwKQkJCVwKKwkJOiAiaSIoUEFMXyAjIyBOQU1FKSwgIjAiKF9fcjE2KQkJCVwKKwkJOiAiJDEiLCAiJDIyIiwgIiQyMyIsICIkMjQiLCAiJDI1Iik7CQlcCisJcmV0dXJuIF9fcjA7CQkJCQkJXAorfQorCisjZGVmaW5lIF9fQ0FMTF9QQUxfUlcyKE5BTUUsIFJUWVBFLCBUWVBFMCwgVFlQRTEpCQlcCitzdGF0aWMgaW5saW5lIFJUWVBFIE5BTUUoVFlQRTAgYXJnMCwgVFlQRTEgYXJnMSkJCVwKK3sJCQkJCQkJCVwKKwlyZWdpc3RlciBSVFlQRSBfX3IwIF9fYXNtX18oIiQwIik7CQkJXAorCXJlZ2lzdGVyIFRZUEUwIF9fcjE2IF9fYXNtX18oIiQxNiIpID0gYXJnMDsJCVwKKwlyZWdpc3RlciBUWVBFMSBfX3IxNyBfX2FzbV9fKCIkMTciKSA9IGFyZzE7CQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQlcCisJCSJjYWxsX3BhbCAlMyAjICIjTkFNRQkJCQlcCisJCTogIj1yIihfX3IxNiksICI9ciIoX19yMTcpLCAiPXIiKF9fcjApCQlcCisJCTogImkiKFBBTF8gIyMgTkFNRSksICIwIihfX3IxNiksICIxIihfX3IxNykJXAorCQk6ICIkMSIsICIkMjIiLCAiJDIzIiwgIiQyNCIsICIkMjUiKTsJCVwKKwlyZXR1cm4gX19yMDsJCQkJCQlcCit9CisKK19fQ0FMTF9QQUxfVzEoY2ZsdXNoLCB1bnNpZ25lZCBsb25nKTsKK19fQ0FMTF9QQUxfUjAocmRtY2VzLCB1bnNpZ25lZCBsb25nKTsKK19fQ0FMTF9QQUxfUjAocmRwcywgdW5zaWduZWQgbG9uZyk7CitfX0NBTExfUEFMX1IwKHJkdXNwLCB1bnNpZ25lZCBsb25nKTsKK19fQ0FMTF9QQUxfUlcxKHN3cGlwbCwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CitfX0NBTExfUEFMX1IwKHdoYW1pLCB1bnNpZ25lZCBsb25nKTsKK19fQ0FMTF9QQUxfVzIod3JlbnQsIHZvaWQqLCB1bnNpZ25lZCBsb25nKTsKK19fQ0FMTF9QQUxfVzEod3JpcGlyLCB1bnNpZ25lZCBsb25nKTsKK19fQ0FMTF9QQUxfVzEod3JrZ3AsIHVuc2lnbmVkIGxvbmcpOworX19DQUxMX1BBTF9XMSh3cm1jZXMsIHVuc2lnbmVkIGxvbmcpOworX19DQUxMX1BBTF9SVzIod3JwZXJmbW9uLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKK19fQ0FMTF9QQUxfVzEod3J1c3AsIHVuc2lnbmVkIGxvbmcpOworX19DQUxMX1BBTF9XMSh3cnZwdHB0ciwgdW5zaWduZWQgbG9uZyk7CisKKyNkZWZpbmUgSVBMX01JTgkJMAorI2RlZmluZSBJUExfU1cwCQkxCisjZGVmaW5lIElQTF9TVzEJCTIKKyNkZWZpbmUgSVBMX0RFVjAJMworI2RlZmluZSBJUExfREVWMQk0CisjZGVmaW5lIElQTF9USU1FUgk1CisjZGVmaW5lIElQTF9QRVJGCTYKKyNkZWZpbmUgSVBMX1BPV0VSRkFJTAk2CisjZGVmaW5lIElQTF9NQ0hFQ0sJNworI2RlZmluZSBJUExfTUFYCQk3CisKKyNpZmRlZiBDT05GSUdfQUxQSEFfQlJPS0VOX0lSUV9NQVNLCisjdW5kZWYgSVBMX01JTgorI2RlZmluZSBJUExfTUlOCQlfX21pbl9pcGwKK2V4dGVybiBpbnQgX19taW5faXBsOworI2VuZGlmCisKKyNkZWZpbmUgZ2V0aXBsKCkJCShyZHBzKCkgJiA3KQorI2RlZmluZSBzZXRpcGwoaXBsKQkJKCh2b2lkKSBzd3BpcGwoaXBsKSkKKworI2RlZmluZSBsb2NhbF9pcnFfZGlzYWJsZSgpCQkJZG8geyBzZXRpcGwoSVBMX01BWCk7IGJhcnJpZXIoKTsgfSB3aGlsZSgwKQorI2RlZmluZSBsb2NhbF9pcnFfZW5hYmxlKCkJCQlkbyB7IGJhcnJpZXIoKTsgc2V0aXBsKElQTF9NSU4pOyB9IHdoaWxlKDApCisjZGVmaW5lIGxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpCSgoZmxhZ3MpID0gcmRwcygpKQorI2RlZmluZSBsb2NhbF9pcnFfc2F2ZShmbGFncykJZG8geyAoZmxhZ3MpID0gc3dwaXBsKElQTF9NQVgpOyBiYXJyaWVyKCk7IH0gd2hpbGUoMCkKKyNkZWZpbmUgbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpCWRvIHsgYmFycmllcigpOyBzZXRpcGwoZmxhZ3MpOyBiYXJyaWVyKCk7IH0gd2hpbGUoMCkKKworI2RlZmluZSBpcnFzX2Rpc2FibGVkKCkJKGdldGlwbCgpID09IElQTF9NQVgpCisKKy8qCisgKiBUQiByb3V0aW5lcy4uCisgKi8KKyNkZWZpbmUgX190YmkobnIsYXJnLGFyZzEuLi4pCQkJCQlcCisoewkJCQkJCQkJXAorCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19yMTYgX19hc21fXygiJDE2IikgPSAobnIpOwlcCisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3IxNyBfX2FzbV9fKCIkMTciKTsgYXJnOwlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQlcCisJCSJjYWxsX3BhbCAlMyAjX190YmkiCQkJCVwKKwkJOiI9ciIgKF9fcjE2KSwiPXIiIChfX3IxNykJCQlcCisJCToiMCIgKF9fcjE2KSwiaSIgKFBBTF90YmkpICwjI2FyZzEJCVwKKwkJOiIkMCIsICIkMSIsICIkMjIiLCAiJDIzIiwgIiQyNCIsICIkMjUiKTsJXAorfSkKKworI2RlZmluZSB0YmkoeCx5KQlfX3RiaSh4LF9fcjE3PSh5KSwiMSIgKF9fcjE3KSkKKyNkZWZpbmUgdGJpc2koeCkJX190YmkoMSxfX3IxNz0oeCksIjEiIChfX3IxNykpCisjZGVmaW5lIHRiaXNkKHgpCV9fdGJpKDIsX19yMTc9KHgpLCIxIiAoX19yMTcpKQorI2RlZmluZSB0YmlzKHgpCQlfX3RiaSgzLF9fcjE3PSh4KSwiMSIgKF9fcjE3KSkKKyNkZWZpbmUgdGJpYXAoKQkJX190YmkoLTEsIC8qIG5vIHNlY29uZCBhcmd1bWVudCAqLykKKyNkZWZpbmUgdGJpYSgpCQlfX3RiaSgtMiwgLyogbm8gc2Vjb25kIGFyZ3VtZW50ICovKQorCisvKgorICogQXRvbWljIGV4Y2hhbmdlLgorICogU2luY2UgaXQgY2FuIGJlIHVzZWQgdG8gaW1wbGVtZW50IGNyaXRpY2FsIHNlY3Rpb25zCisgKiBpdCBtdXN0IGNsb2JiZXIgIm1lbW9yeSIgKGFsc28gZm9yIGludGVycnVwdHMgaW4gVVApLgorICovCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZworX194Y2hnX3U4KHZvbGF0aWxlIGNoYXIgKm0sIHVuc2lnbmVkIGxvbmcgdmFsKQoreworCXVuc2lnbmVkIGxvbmcgcmV0LCB0bXAsIGFkZHI2NDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCSIJYW5kbm90CSU0LDcsJTNcbiIKKwkiCWluc2JsCSUxLCU0LCUxXG4iCisJIjE6CWxkcV9sCSUyLDAoJTMpXG4iCisJIglleHRibAklMiwlNCwlMFxuIgorCSIJbXNrYmwJJTIsJTQsJTJcbiIKKwkiCW9yCSUxLCUyLCUyXG4iCisJIglzdHFfYwklMiwwKCUzKVxuIgorCSIJYmVxCSUyLDJmXG4iCisjaWZkZWYgQ09ORklHX1NNUAorCSIJbWJcbiIKKyNlbmRpZgorCSIuc3Vic2VjdGlvbiAyXG4iCisJIjI6CWJyCTFiXG4iCisJIi5wcmV2aW91cyIKKwk6ICI9JnIiIChyZXQpLCAiPSZyIiAodmFsKSwgIj0mciIgKHRtcCksICI9JnIiIChhZGRyNjQpCisJOiAiciIgKChsb25nKW0pLCAiMSIgKHZhbCkgOiAibWVtb3J5Iik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK19feGNoZ191MTYodm9sYXRpbGUgc2hvcnQgKm0sIHVuc2lnbmVkIGxvbmcgdmFsKQoreworCXVuc2lnbmVkIGxvbmcgcmV0LCB0bXAsIGFkZHI2NDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCSIJYW5kbm90CSU0LDcsJTNcbiIKKwkiCWluc3dsCSUxLCU0LCUxXG4iCisJIjE6CWxkcV9sCSUyLDAoJTMpXG4iCisJIglleHR3bAklMiwlNCwlMFxuIgorCSIJbXNrd2wJJTIsJTQsJTJcbiIKKwkiCW9yCSUxLCUyLCUyXG4iCisJIglzdHFfYwklMiwwKCUzKVxuIgorCSIJYmVxCSUyLDJmXG4iCisjaWZkZWYgQ09ORklHX1NNUAorCSIJbWJcbiIKKyNlbmRpZgorCSIuc3Vic2VjdGlvbiAyXG4iCisJIjI6CWJyCTFiXG4iCisJIi5wcmV2aW91cyIKKwk6ICI9JnIiIChyZXQpLCAiPSZyIiAodmFsKSwgIj0mciIgKHRtcCksICI9JnIiIChhZGRyNjQpCisJOiAiciIgKChsb25nKW0pLCAiMSIgKHZhbCkgOiAibWVtb3J5Iik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK19feGNoZ191MzIodm9sYXRpbGUgaW50ICptLCB1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwl1bnNpZ25lZCBsb25nIGR1bW15OworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJIjE6CWxkbF9sICUwLCU0XG4iCisJIgliaXMgJDMxLCUzLCUxXG4iCisJIglzdGxfYyAlMSwlMlxuIgorCSIJYmVxICUxLDJmXG4iCisjaWZkZWYgQ09ORklHX1NNUAorCSIJbWJcbiIKKyNlbmRpZgorCSIuc3Vic2VjdGlvbiAyXG4iCisJIjI6CWJyIDFiXG4iCisJIi5wcmV2aW91cyIKKwk6ICI9JnIiICh2YWwpLCAiPSZyIiAoZHVtbXkpLCAiPW0iICgqbSkKKwk6ICJySSIgKHZhbCksICJtIiAoKm0pIDogIm1lbW9yeSIpOworCisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCitfX3hjaGdfdTY0KHZvbGF0aWxlIGxvbmcgKm0sIHVuc2lnbmVkIGxvbmcgdmFsKQoreworCXVuc2lnbmVkIGxvbmcgZHVtbXk7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkiMToJbGRxX2wgJTAsJTRcbiIKKwkiCWJpcyAkMzEsJTMsJTFcbiIKKwkiCXN0cV9jICUxLCUyXG4iCisJIgliZXEgJTEsMmZcbiIKKyNpZmRlZiBDT05GSUdfU01QCisJIgltYlxuIgorI2VuZGlmCisJIi5zdWJzZWN0aW9uIDJcbiIKKwkiMjoJYnIgMWJcbiIKKwkiLnByZXZpb3VzIgorCTogIj0mciIgKHZhbCksICI9JnIiIChkdW1teSksICI9bSIgKCptKQorCTogInJJIiAodmFsKSwgIm0iICgqbSkgOiAibWVtb3J5Iik7CisKKwlyZXR1cm4gdmFsOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgZXhpc3QsIHNvIHlvdSdsbCBnZXQgYSBsaW5rZXIgZXJyb3IKKyAgIGlmIHNvbWV0aGluZyB0cmllcyB0byBkbyBhbiBpbnZhbGlkIHhjaGcoKS4gICovCitleHRlcm4gdm9pZCBfX3hjaGdfY2FsbGVkX3dpdGhfYmFkX3BvaW50ZXIodm9pZCk7CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZworX194Y2hnKHZvbGF0aWxlIHZvaWQgKnB0ciwgdW5zaWduZWQgbG9uZyB4LCBpbnQgc2l6ZSkKK3sKKwlzd2l0Y2ggKHNpemUpIHsKKwkJY2FzZSAxOgorCQkJcmV0dXJuIF9feGNoZ191OChwdHIsIHgpOworCQljYXNlIDI6CisJCQlyZXR1cm4gX194Y2hnX3UxNihwdHIsIHgpOworCQljYXNlIDQ6CisJCQlyZXR1cm4gX194Y2hnX3UzMihwdHIsIHgpOworCQljYXNlIDg6CisJCQlyZXR1cm4gX194Y2hnX3U2NChwdHIsIHgpOworCX0KKwlfX3hjaGdfY2FsbGVkX3dpdGhfYmFkX3BvaW50ZXIoKTsKKwlyZXR1cm4geDsKK30KKworI2RlZmluZSB4Y2hnKHB0cix4KQkJCQkJCQkgICAgIFwKKyAgKHsJCQkJCQkJCQkgICAgIFwKKyAgICAgX190eXBlb2ZfXygqKHB0cikpIF94XyA9ICh4KTsJCQkJCSAgICAgXAorICAgICAoX190eXBlb2ZfXygqKHB0cikpKSBfX3hjaGcoKHB0ciksICh1bnNpZ25lZCBsb25nKV94Xywgc2l6ZW9mKCoocHRyKSkpOyBcCisgIH0pCisKKyNkZWZpbmUgdGFzKHB0cikgKHhjaGcoKHB0ciksMSkpCisKKworLyogCisgKiBBdG9taWMgY29tcGFyZSBhbmQgZXhjaGFuZ2UuICBDb21wYXJlIE9MRCB3aXRoIE1FTSwgaWYgaWRlbnRpY2FsLAorICogc3RvcmUgTkVXIGluIE1FTS4gIFJldHVybiB0aGUgaW5pdGlhbCB2YWx1ZSBpbiBNRU0uICBTdWNjZXNzIGlzCisgKiBpbmRpY2F0ZWQgYnkgY29tcGFyaW5nIFJFVFVSTiB3aXRoIE9MRC4KKyAqCisgKiBUaGUgbWVtb3J5IGJhcnJpZXIgc2hvdWxkIGJlIHBsYWNlZCBpbiBTTVAgb25seSB3aGVuIHdlIGFjdHVhbGx5CisgKiBtYWtlIHRoZSBjaGFuZ2UuIElmIHdlIGRvbid0IGNoYW5nZSBhbnl0aGluZyAoc28gaWYgdGhlIHJldHVybmVkCisgKiBwcmV2IGlzIGVxdWFsIHRvIG9sZCkgdGhlbiB3ZSBhcmVuJ3QgYWNxdWlyaW5nIGFueXRoaW5nIG5ldyBhbmQKKyAqIHdlIGRvbid0IG5lZWQgYW55IG1lbW9yeSBiYXJyaWVyIGFzIGZhciBJIGNhbiB0ZWxsLgorICovCisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfQ01QWENIRyAxCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZworX19jbXB4Y2hnX3U4KHZvbGF0aWxlIGNoYXIgKm0sIGxvbmcgb2xkLCBsb25nIG5ldykKK3sKKwl1bnNpZ25lZCBsb25nIHByZXYsIHRtcCwgY21wLCBhZGRyNjQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkiCWFuZG5vdAklNSw3LCU0XG4iCisJIglpbnNibAklMSwlNSwlMVxuIgorCSIxOglsZHFfbAklMiwwKCU0KVxuIgorCSIJZXh0YmwJJTIsJTUsJTBcbiIKKwkiCWNtcGVxCSUwLCU2LCUzXG4iCisJIgliZXEJJTMsMmZcbiIKKwkiCW1za2JsCSUyLCU1LCUyXG4iCisJIglvcgklMSwlMiwlMlxuIgorCSIJc3RxX2MJJTIsMCglNClcbiIKKwkiCWJlcQklMiwzZlxuIgorI2lmZGVmIENPTkZJR19TTVAKKwkiCW1iXG4iCisjZW5kaWYKKwkiMjpcbiIKKwkiLnN1YnNlY3Rpb24gMlxuIgorCSIzOglicgkxYlxuIgorCSIucHJldmlvdXMiCisJOiAiPSZyIiAocHJldiksICI9JnIiIChuZXcpLCAiPSZyIiAodG1wKSwgIj0mciIgKGNtcCksICI9JnIiIChhZGRyNjQpCisJOiAiciIgKChsb25nKW0pLCAiSXIiIChvbGQpLCAiMSIgKG5ldykgOiAibWVtb3J5Iik7CisKKwlyZXR1cm4gcHJldjsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCitfX2NtcHhjaGdfdTE2KHZvbGF0aWxlIHNob3J0ICptLCBsb25nIG9sZCwgbG9uZyBuZXcpCit7CisJdW5zaWduZWQgbG9uZyBwcmV2LCB0bXAsIGNtcCwgYWRkcjY0OworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJIglhbmRub3QJJTUsNywlNFxuIgorCSIJaW5zd2wJJTEsJTUsJTFcbiIKKwkiMToJbGRxX2wJJTIsMCglNClcbiIKKwkiCWV4dHdsCSUyLCU1LCUwXG4iCisJIgljbXBlcQklMCwlNiwlM1xuIgorCSIJYmVxCSUzLDJmXG4iCisJIgltc2t3bAklMiwlNSwlMlxuIgorCSIJb3IJJTEsJTIsJTJcbiIKKwkiCXN0cV9jCSUyLDAoJTQpXG4iCisJIgliZXEJJTIsM2ZcbiIKKyNpZmRlZiBDT05GSUdfU01QCisJIgltYlxuIgorI2VuZGlmCisJIjI6XG4iCisJIi5zdWJzZWN0aW9uIDJcbiIKKwkiMzoJYnIJMWJcbiIKKwkiLnByZXZpb3VzIgorCTogIj0mciIgKHByZXYpLCAiPSZyIiAobmV3KSwgIj0mciIgKHRtcCksICI9JnIiIChjbXApLCAiPSZyIiAoYWRkcjY0KQorCTogInIiICgobG9uZyltKSwgIklyIiAob2xkKSwgIjEiIChuZXcpIDogIm1lbW9yeSIpOworCisJcmV0dXJuIHByZXY7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZworX19jbXB4Y2hnX3UzMih2b2xhdGlsZSBpbnQgKm0sIGludCBvbGQsIGludCBuZXcpCit7CisJdW5zaWduZWQgbG9uZyBwcmV2LCBjbXA7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkiMToJbGRsX2wgJTAsJTVcbiIKKwkiCWNtcGVxICUwLCUzLCUxXG4iCisJIgliZXEgJTEsMmZcbiIKKwkiCW1vdiAlNCwlMVxuIgorCSIJc3RsX2MgJTEsJTJcbiIKKwkiCWJlcSAlMSwzZlxuIgorI2lmZGVmIENPTkZJR19TTVAKKwkiCW1iXG4iCisjZW5kaWYKKwkiMjpcbiIKKwkiLnN1YnNlY3Rpb24gMlxuIgorCSIzOgliciAxYlxuIgorCSIucHJldmlvdXMiCisJOiAiPSZyIihwcmV2KSwgIj0mciIoY21wKSwgIj1tIigqbSkKKwk6ICJyIigobG9uZykgb2xkKSwgInIiKG5ldyksICJtIigqbSkgOiAibWVtb3J5Iik7CisKKwlyZXR1cm4gcHJldjsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCitfX2NtcHhjaGdfdTY0KHZvbGF0aWxlIGxvbmcgKm0sIHVuc2lnbmVkIGxvbmcgb2xkLCB1bnNpZ25lZCBsb25nIG5ldykKK3sKKwl1bnNpZ25lZCBsb25nIHByZXYsIGNtcDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCSIxOglsZHFfbCAlMCwlNVxuIgorCSIJY21wZXEgJTAsJTMsJTFcbiIKKwkiCWJlcSAlMSwyZlxuIgorCSIJbW92ICU0LCUxXG4iCisJIglzdHFfYyAlMSwlMlxuIgorCSIJYmVxICUxLDNmXG4iCisjaWZkZWYgQ09ORklHX1NNUAorCSIJbWJcbiIKKyNlbmRpZgorCSIyOlxuIgorCSIuc3Vic2VjdGlvbiAyXG4iCisJIjM6CWJyIDFiXG4iCisJIi5wcmV2aW91cyIKKwk6ICI9JnIiKHByZXYpLCAiPSZyIihjbXApLCAiPW0iKCptKQorCTogInIiKChsb25nKSBvbGQpLCAiciIobmV3KSwgIm0iKCptKSA6ICJtZW1vcnkiKTsKKworCXJldHVybiBwcmV2OworfQorCisvKiBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgZXhpc3QsIHNvIHlvdSdsbCBnZXQgYSBsaW5rZXIgZXJyb3IKKyAgIGlmIHNvbWV0aGluZyB0cmllcyB0byBkbyBhbiBpbnZhbGlkIGNtcHhjaGcoKS4gICovCitleHRlcm4gdm9pZCBfX2NtcHhjaGdfY2FsbGVkX3dpdGhfYmFkX3BvaW50ZXIodm9pZCk7CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZworX19jbXB4Y2hnKHZvbGF0aWxlIHZvaWQgKnB0ciwgdW5zaWduZWQgbG9uZyBvbGQsIHVuc2lnbmVkIGxvbmcgbmV3LCBpbnQgc2l6ZSkKK3sKKwlzd2l0Y2ggKHNpemUpIHsKKwkJY2FzZSAxOgorCQkJcmV0dXJuIF9fY21weGNoZ191OChwdHIsIG9sZCwgbmV3KTsKKwkJY2FzZSAyOgorCQkJcmV0dXJuIF9fY21weGNoZ191MTYocHRyLCBvbGQsIG5ldyk7CisJCWNhc2UgNDoKKwkJCXJldHVybiBfX2NtcHhjaGdfdTMyKHB0ciwgb2xkLCBuZXcpOworCQljYXNlIDg6CisJCQlyZXR1cm4gX19jbXB4Y2hnX3U2NChwdHIsIG9sZCwgbmV3KTsKKwl9CisJX19jbXB4Y2hnX2NhbGxlZF93aXRoX2JhZF9wb2ludGVyKCk7CisJcmV0dXJuIG9sZDsKK30KKworI2RlZmluZSBjbXB4Y2hnKHB0cixvLG4pCQkJCQkJIFwKKyAgKHsJCQkJCQkJCQkgXAorICAgICBfX3R5cGVvZl9fKCoocHRyKSkgX29fID0gKG8pOwkJCQkJIFwKKyAgICAgX190eXBlb2ZfXygqKHB0cikpIF9uXyA9IChuKTsJCQkJCSBcCisgICAgIChfX3R5cGVvZl9fKCoocHRyKSkpIF9fY21weGNoZygocHRyKSwgKHVuc2lnbmVkIGxvbmcpX29fLAkJIFwKKwkJCQkgICAgKHVuc2lnbmVkIGxvbmcpX25fLCBzaXplb2YoKihwdHIpKSk7IFwKKyAgfSkKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisjZGVmaW5lIGFyY2hfYWxpZ25fc3RhY2soeCkgKHgpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvdGVybWJpdHMuaCBiL2luY2x1ZGUvYXNtLWFscGhhL3Rlcm1iaXRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ4MzdmYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL3Rlcm1iaXRzLmgKQEAgLTAsMCArMSwxODYgQEAKKyNpZm5kZWYgX0FMUEhBX1RFUk1CSVRTX0gKKyNkZWZpbmUgX0FMUEhBX1RFUk1CSVRTX0gKKworI2luY2x1ZGUgPGxpbnV4L3Bvc2l4X3R5cGVzLmg+CisKK3R5cGVkZWYgdW5zaWduZWQgY2hhcgljY190OwordHlwZWRlZiB1bnNpZ25lZCBpbnQJc3BlZWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50CXRjZmxhZ190OworCisvKgorICogdGVybWlvcyB0eXBlIGFuZCBtYWNybyBkZWZpbml0aW9ucy4gIEJlIGNhcmVmdWwgYWJvdXQgYWRkaW5nIHN0dWZmCisgKiB0byB0aGlzIGZpbGUgc2luY2UgaXQncyB1c2VkIGluIEdOVSBsaWJjIGFuZCB0aGVyZSBhcmUgc3RyaWN0IHJ1bGVzCisgKiBjb25jZXJuaW5nIG5hbWVzcGFjZSBwb2xsdXRpb24uCisgKi8KKworI2RlZmluZSBOQ0NTIDE5CitzdHJ1Y3QgdGVybWlvcyB7CisJdGNmbGFnX3QgY19pZmxhZzsJCS8qIGlucHV0IG1vZGUgZmxhZ3MgKi8KKwl0Y2ZsYWdfdCBjX29mbGFnOwkJLyogb3V0cHV0IG1vZGUgZmxhZ3MgKi8KKwl0Y2ZsYWdfdCBjX2NmbGFnOwkJLyogY29udHJvbCBtb2RlIGZsYWdzICovCisJdGNmbGFnX3QgY19sZmxhZzsJCS8qIGxvY2FsIG1vZGUgZmxhZ3MgKi8KKwljY190IGNfY2NbTkNDU107CQkvKiBjb250cm9sIGNoYXJhY3RlcnMgKi8KKwljY190IGNfbGluZTsJCQkvKiBsaW5lIGRpc2NpcGxpbmUgKD09IGNfY2NbMTldKSAqLworCXNwZWVkX3QgY19pc3BlZWQ7CQkvKiBpbnB1dCBzcGVlZCAqLworCXNwZWVkX3QgY19vc3BlZWQ7CQkvKiBvdXRwdXQgc3BlZWQgKi8KK307CisKKy8qIGNfY2MgY2hhcmFjdGVycyAqLworI2RlZmluZSBWRU9GIDAKKyNkZWZpbmUgVkVPTCAxCisjZGVmaW5lIFZFT0wyIDIKKyNkZWZpbmUgVkVSQVNFIDMKKyNkZWZpbmUgVldFUkFTRSA0CisjZGVmaW5lIFZLSUxMIDUKKyNkZWZpbmUgVlJFUFJJTlQgNgorI2RlZmluZSBWU1dUQyA3CisjZGVmaW5lIFZJTlRSIDgKKyNkZWZpbmUgVlFVSVQgOQorI2RlZmluZSBWU1VTUCAxMAorI2RlZmluZSBWU1RBUlQgMTIKKyNkZWZpbmUgVlNUT1AgMTMKKyNkZWZpbmUgVkxORVhUIDE0CisjZGVmaW5lIFZESVNDQVJEIDE1CisjZGVmaW5lIFZNSU4gMTYKKyNkZWZpbmUgVlRJTUUgMTcKKworLyogY19pZmxhZyBiaXRzICovCisjZGVmaW5lIElHTkJSSwkwMDAwMDAxCisjZGVmaW5lIEJSS0lOVAkwMDAwMDAyCisjZGVmaW5lIElHTlBBUgkwMDAwMDA0CisjZGVmaW5lIFBBUk1SSwkwMDAwMDEwCisjZGVmaW5lIElOUENLCTAwMDAwMjAKKyNkZWZpbmUgSVNUUklQCTAwMDAwNDAKKyNkZWZpbmUgSU5MQ1IJMDAwMDEwMAorI2RlZmluZSBJR05DUgkwMDAwMjAwCisjZGVmaW5lIElDUk5MCTAwMDA0MDAKKyNkZWZpbmUgSVhPTgkwMDAxMDAwCisjZGVmaW5lIElYT0ZGCTAwMDIwMDAKKyNkZWZpbmUgSVhBTlkJMDAwNDAwMAorI2RlZmluZSBJVUNMQwkwMDEwMDAwCisjZGVmaW5lIElNQVhCRUwJMDAyMDAwMAorI2RlZmluZSBJVVRGOAkwMDQwMDAwCisKKy8qIGNfb2ZsYWcgYml0cyAqLworI2RlZmluZSBPUE9TVAkwMDAwMDAxCisjZGVmaW5lIE9OTENSCTAwMDAwMDIKKyNkZWZpbmUgT0xDVUMJMDAwMDAwNAorCisjZGVmaW5lIE9DUk5MCTAwMDAwMTAKKyNkZWZpbmUgT05PQ1IJMDAwMDAyMAorI2RlZmluZSBPTkxSRVQJMDAwMDA0MAorCisjZGVmaW5lIE9GSUxMCTAwMDAwMTAwCisjZGVmaW5lIE9GREVMCTAwMDAwMjAwCisjZGVmaW5lIE5MRExZCTAwMDAxNDAwCisjZGVmaW5lICAgTkwwCTAwMDAwMDAwCisjZGVmaW5lICAgTkwxCTAwMDAwNDAwCisjZGVmaW5lICAgTkwyCTAwMDAxMDAwCisjZGVmaW5lICAgTkwzCTAwMDAxNDAwCisjZGVmaW5lIFRBQkRMWQkwMDAwNjAwMAorI2RlZmluZSAgIFRBQjAJMDAwMDAwMDAKKyNkZWZpbmUgICBUQUIxCTAwMDAyMDAwCisjZGVmaW5lICAgVEFCMgkwMDAwNDAwMAorI2RlZmluZSAgIFRBQjMJMDAwMDYwMDAKKyNkZWZpbmUgQ1JETFkJMDAwMzAwMDAKKyNkZWZpbmUgICBDUjAJMDAwMDAwMDAKKyNkZWZpbmUgICBDUjEJMDAwMTAwMDAKKyNkZWZpbmUgICBDUjIJMDAwMjAwMDAKKyNkZWZpbmUgICBDUjMJMDAwMzAwMDAKKyNkZWZpbmUgRkZETFkJMDAwNDAwMDAKKyNkZWZpbmUgICBGRjAJMDAwMDAwMDAKKyNkZWZpbmUgICBGRjEJMDAwNDAwMDAKKyNkZWZpbmUgQlNETFkJMDAxMDAwMDAKKyNkZWZpbmUgICBCUzAJMDAwMDAwMDAKKyNkZWZpbmUgICBCUzEJMDAxMDAwMDAKKyNkZWZpbmUgVlRETFkJMDAyMDAwMDAKKyNkZWZpbmUgICBWVDAJMDAwMDAwMDAKKyNkZWZpbmUgICBWVDEJMDAyMDAwMDAKKyNkZWZpbmUgWFRBQlMJMDEwMDAwMDAgLyogSG1tLi4gTGludXgvaTM4NiBjb25zaWRlcnMgdGhpcyBwYXJ0IG9mIFRBQkRMWS4uICovCisKKy8qIGNfY2ZsYWcgYml0IG1lYW5pbmcgKi8KKyNkZWZpbmUgQ0JBVUQJMDAwMDAzNworI2RlZmluZSAgQjAJMDAwMDAwMAkJLyogaGFuZyB1cCAqLworI2RlZmluZSAgQjUwCTAwMDAwMDEKKyNkZWZpbmUgIEI3NQkwMDAwMDAyCisjZGVmaW5lICBCMTEwCTAwMDAwMDMKKyNkZWZpbmUgIEIxMzQJMDAwMDAwNAorI2RlZmluZSAgQjE1MAkwMDAwMDA1CisjZGVmaW5lICBCMjAwCTAwMDAwMDYKKyNkZWZpbmUgIEIzMDAJMDAwMDAwNworI2RlZmluZSAgQjYwMAkwMDAwMDEwCisjZGVmaW5lICBCMTIwMAkwMDAwMDExCisjZGVmaW5lICBCMTgwMAkwMDAwMDEyCisjZGVmaW5lICBCMjQwMAkwMDAwMDEzCisjZGVmaW5lICBCNDgwMAkwMDAwMDE0CisjZGVmaW5lICBCOTYwMAkwMDAwMDE1CisjZGVmaW5lICBCMTkyMDAJMDAwMDAxNgorI2RlZmluZSAgQjM4NDAwCTAwMDAwMTcKKyNkZWZpbmUgRVhUQSBCMTkyMDAKKyNkZWZpbmUgRVhUQiBCMzg0MDAKKyNkZWZpbmUgQ0JBVURFWCAwMDAwMDAwCisjZGVmaW5lICBCNTc2MDAgICAwMDAyMAorI2RlZmluZSAgQjExNTIwMCAgMDAwMjEKKyNkZWZpbmUgIEIyMzA0MDAgIDAwMDIyCisjZGVmaW5lICBCNDYwODAwICAwMDAyMworI2RlZmluZSAgQjUwMDAwMCAgMDAwMjQKKyNkZWZpbmUgIEI1NzYwMDAgIDAwMDI1CisjZGVmaW5lICBCOTIxNjAwICAwMDAyNgorI2RlZmluZSBCMTAwMDAwMCAgMDAwMjcKKyNkZWZpbmUgQjExNTIwMDAgIDAwMDMwCisjZGVmaW5lIEIxNTAwMDAwICAwMDAzMQorI2RlZmluZSBCMjAwMDAwMCAgMDAwMzIKKyNkZWZpbmUgQjI1MDAwMDAgIDAwMDMzCisjZGVmaW5lIEIzMDAwMDAwICAwMDAzNAorI2RlZmluZSBCMzUwMDAwMCAgMDAwMzUKKyNkZWZpbmUgQjQwMDAwMDAgIDAwMDM2CisKKyNkZWZpbmUgQ1NJWkUJMDAwMDE0MDAKKyNkZWZpbmUgICBDUzUJMDAwMDAwMDAKKyNkZWZpbmUgICBDUzYJMDAwMDA0MDAKKyNkZWZpbmUgICBDUzcJMDAwMDEwMDAKKyNkZWZpbmUgICBDUzgJMDAwMDE0MDAKKworI2RlZmluZSBDU1RPUEIJMDAwMDIwMDAKKyNkZWZpbmUgQ1JFQUQJMDAwMDQwMDAKKyNkZWZpbmUgUEFSRU5CCTAwMDEwMDAwCisjZGVmaW5lIFBBUk9ERAkwMDAyMDAwMAorI2RlZmluZSBIVVBDTAkwMDA0MDAwMAorCisjZGVmaW5lIENMT0NBTAkwMDEwMDAwMAorI2RlZmluZSBDUlRTQ1RTCSAgMDIwMDAwMDAwMDAwCQkvKiBmbG93IGNvbnRyb2wgKi8KKworLyogY19sZmxhZyBiaXRzICovCisjZGVmaW5lIElTSUcJMHgwMDAwMDA4MAorI2RlZmluZSBJQ0FOT04JMHgwMDAwMDEwMAorI2RlZmluZSBYQ0FTRQkweDAwMDA0MDAwCisjZGVmaW5lIEVDSE8JMHgwMDAwMDAwOAorI2RlZmluZSBFQ0hPRQkweDAwMDAwMDAyCisjZGVmaW5lIEVDSE9LCTB4MDAwMDAwMDQKKyNkZWZpbmUgRUNIT05MCTB4MDAwMDAwMTAKKyNkZWZpbmUgTk9GTFNICTB4ODAwMDAwMDAKKyNkZWZpbmUgVE9TVE9QCTB4MDA0MDAwMDAKKyNkZWZpbmUgRUNIT0NUTAkweDAwMDAwMDQwCisjZGVmaW5lIEVDSE9QUlQJMHgwMDAwMDAyMAorI2RlZmluZSBFQ0hPS0UJMHgwMDAwMDAwMQorI2RlZmluZSBGTFVTSE8JMHgwMDgwMDAwMAorI2RlZmluZSBQRU5ESU4JMHgyMDAwMDAwMAorI2RlZmluZSBJRVhURU4JMHgwMDAwMDQwMAorCisvKiBWYWx1ZXMgZm9yIHRoZSBBQ1RJT04gYXJndW1lbnQgdG8gYHRjZmxvdycuICAqLworI2RlZmluZQlUQ09PRkYJCTAKKyNkZWZpbmUJVENPT04JCTEKKyNkZWZpbmUJVENJT0ZGCQkyCisjZGVmaW5lCVRDSU9OCQkzCisKKy8qIFZhbHVlcyBmb3IgdGhlIFFVRVVFX1NFTEVDVE9SIGFyZ3VtZW50IHRvIGB0Y2ZsdXNoJy4gICovCisjZGVmaW5lCVRDSUZMVVNICTAKKyNkZWZpbmUJVENPRkxVU0gJMQorI2RlZmluZQlUQ0lPRkxVU0gJMgorCisvKiBWYWx1ZXMgZm9yIHRoZSBPUFRJT05BTF9BQ1RJT05TIGFyZ3VtZW50IHRvIGB0Y3NldGF0dHInLiAgKi8KKyNkZWZpbmUJVENTQU5PVwkJMAorI2RlZmluZQlUQ1NBRFJBSU4JMQorI2RlZmluZQlUQ1NBRkxVU0gJMgorCisjZW5kaWYgLyogX0FMUEhBX1RFUk1CSVRTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL3Rlcm1pb3MuaCBiL2luY2x1ZGUvYXNtLWFscGhhL3Rlcm1pb3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2ZkMjdmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvdGVybWlvcy5oCkBAIC0wLDAgKzEsMTY0IEBACisjaWZuZGVmIF9BTFBIQV9URVJNSU9TX0gKKyNkZWZpbmUgX0FMUEhBX1RFUk1JT1NfSAorCisjaW5jbHVkZSA8YXNtL2lvY3Rscy5oPgorI2luY2x1ZGUgPGFzbS90ZXJtYml0cy5oPgorCitzdHJ1Y3Qgc2d0dHliIHsKKwljaGFyCXNnX2lzcGVlZDsKKwljaGFyCXNnX29zcGVlZDsKKwljaGFyCXNnX2VyYXNlOworCWNoYXIJc2dfa2lsbDsKKwlzaG9ydAlzZ19mbGFnczsKK307CisKK3N0cnVjdCB0Y2hhcnMgeworCWNoYXIJdF9pbnRyYzsKKwljaGFyCXRfcXVpdGM7CisJY2hhcgl0X3N0YXJ0YzsKKwljaGFyCXRfc3RvcGM7CisJY2hhcgl0X2VvZmM7CisJY2hhcgl0X2Jya2M7Cit9OworCitzdHJ1Y3QgbHRjaGFycyB7CisJY2hhcgl0X3N1c3BjOworCWNoYXIJdF9kc3VzcGM7CisJY2hhcgl0X3Jwcm50YzsKKwljaGFyCXRfZmx1c2hjOworCWNoYXIJdF93ZXJhc2M7CisJY2hhcgl0X2xuZXh0YzsKK307CisKK3N0cnVjdCB3aW5zaXplIHsKKwl1bnNpZ25lZCBzaG9ydCB3c19yb3c7CisJdW5zaWduZWQgc2hvcnQgd3NfY29sOworCXVuc2lnbmVkIHNob3J0IHdzX3hwaXhlbDsKKwl1bnNpZ25lZCBzaG9ydCB3c195cGl4ZWw7Cit9OworCisjZGVmaW5lIE5DQyA4CitzdHJ1Y3QgdGVybWlvIHsKKwl1bnNpZ25lZCBzaG9ydCBjX2lmbGFnOwkJLyogaW5wdXQgbW9kZSBmbGFncyAqLworCXVuc2lnbmVkIHNob3J0IGNfb2ZsYWc7CQkvKiBvdXRwdXQgbW9kZSBmbGFncyAqLworCXVuc2lnbmVkIHNob3J0IGNfY2ZsYWc7CQkvKiBjb250cm9sIG1vZGUgZmxhZ3MgKi8KKwl1bnNpZ25lZCBzaG9ydCBjX2xmbGFnOwkJLyogbG9jYWwgbW9kZSBmbGFncyAqLworCXVuc2lnbmVkIGNoYXIgY19saW5lOwkJLyogbGluZSBkaXNjaXBsaW5lICovCisJdW5zaWduZWQgY2hhciBjX2NjW05DQ107CS8qIGNvbnRyb2wgY2hhcmFjdGVycyAqLworfTsKKworLyoKKyAqIGNfY2MgY2hhcmFjdGVycyBpbiB0aGUgdGVybWlvIHN0cnVjdHVyZS4gIE9oLCBob3cgSSBsb3ZlIGJlaW5nCisgKiBiYWNrd2FyZGx5IGNvbXBhdGlibGUuICBOb3RpY2UgdGhhdCBjaGFyYWN0ZXIgNCBhbmQgNSBhcmUKKyAqIGludGVycHJldGVkIGRpZmZlcmVudGx5IGRlcGVuZGluZyBvbiB3aGV0aGVyIElDQU5PTiBpcyBzZXQgaW4KKyAqIGNfbGZsYWcuICBJZiBpdCdzIHNldCwgdGhleSBhcmUgdXNlZCBhcyBfVkVPRiBhbmQgX1ZFT0wsIG90aGVyd2lzZQorICogYXMgX1ZNSU4gYW5kIFZfVElNRS4gIFRoaXMgaXMgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBPU0YvMSAod2hpY2gKKyAqIGlzIGNvbXBhdGlibGUgd2l0aCBzeXNWKS4uLgorICovCisjZGVmaW5lIF9WSU5UUgkwCisjZGVmaW5lIF9WUVVJVAkxCisjZGVmaW5lIF9WRVJBU0UJMgorI2RlZmluZSBfVktJTEwJMworI2RlZmluZSBfVkVPRgk0CisjZGVmaW5lIF9WTUlOCTQKKyNkZWZpbmUgX1ZFT0wJNQorI2RlZmluZSBfVlRJTUUJNQorI2RlZmluZSBfVkVPTDIJNgorI2RlZmluZSBfVlNXVEMJNworCisvKiBsaW5lIGRpc2NpcGxpbmVzICovCisjZGVmaW5lIE5fVFRZCQkwCisjZGVmaW5lIE5fU0xJUAkJMQorI2RlZmluZSBOX01PVVNFCQkyCisjZGVmaW5lIE5fUFBQCQkzCisjZGVmaW5lIE5fU1RSSVAJCTQKKyNkZWZpbmUgTl9BWDI1CQk1CisjZGVmaW5lIE5fWDI1CQk2CS8qIFguMjUgYXN5bmMgKi8KKyNkZWZpbmUgTl82UEFDSwkJNworI2RlZmluZSBOX01BU0MJCTgJLyogUmVzZXJ2ZWQgZm9yIE1vYml0ZXggbW9kdWxlIDxrYXpAY2FmZS5uZXQ+ICovCisjZGVmaW5lIE5fUjM5NjQJCTkJLyogUmVzZXJ2ZWQgZm9yIFNpbWF0aWMgUjM5NjQgbW9kdWxlICovCisjZGVmaW5lIE5fUFJPRklCVVNfRkRMCTEwCS8qIFJlc2VydmVkIGZvciBQcm9maWJ1cyA8RGF2ZUBtdmhpLmNvbT4gKi8KKyNkZWZpbmUgTl9JUkRBCQkxMQkvKiBMaW51eCBJckRhIC0gaHR0cDovL2lyZGEuc291cmNlZm9yZ2UubmV0LyAqLworI2RlZmluZSBOX1NNU0JMT0NLCTEyCS8qIFNNUyBibG9jayBtb2RlIC0gZm9yIHRhbGtpbmcgdG8gR1NNIGRhdGEgY2FyZHMgYWJvdXQgU01TIG1lc3NhZ2VzICovCisjZGVmaW5lIE5fSERMQwkJMTMJLyogc3luY2hyb25vdXMgSERMQyAqLworI2RlZmluZSBOX1NZTkNfUFBQCTE0CisjZGVmaW5lIE5fSENJCQkxNSAgLyogQmx1ZXRvb3RoIEhDSSBVQVJUICovCisKKyNpZmRlZiBfX0tFUk5FTF9fCisvKgllb2Y9XkQJCWVvbD1cMAkJZW9sMj1cMAkJZXJhc2U9ZGVsCisJd2VyYXNlPV5XCWtpbGw9XlUJCXJlcHJpbnQ9XlIJc3h0Yz1cMAorCWludHI9XkMJCXF1aXQ9XlwJCXN1c3A9XloJCTxPU0YvMSBWRFNVU1A+CisJc3RhcnQ9XlEJc3RvcD1eUwkJbG5leHQ9XlYJZGlzY2FyZD1eVQorCXZtaW49XDEJCXZ0aW1lPVwwCisqLworI2RlZmluZSBJTklUX0NfQ0MgIlwwMDRcMDAwXDAwMFwxNzdcMDI3XDAyNVwwMjJcMDAwXDAwM1wwMzRcMDMyXDAwMFwwMjFcMDIzXDAyNlwwMjVcMDAxXDAwMCIKKworLyoKKyAqIFRyYW5zbGF0ZSBhICJ0ZXJtaW8iIHN0cnVjdHVyZSBpbnRvIGEgInRlcm1pb3MiLiBVZ2guCisgKi8KKworI2RlZmluZSB1c2VyX3Rlcm1pb190b19rZXJuZWxfdGVybWlvcyhhX3Rlcm1pb3MsIHVfdGVybWlvKQkJCVwKKyh7CQkJCQkJCQkJCVwKKwlzdHJ1Y3QgdGVybWlvcyAqa190ZXJtaW9zID0gKGFfdGVybWlvcyk7CQkJCVwKKwlzdHJ1Y3QgdGVybWlvIGtfdGVybWlvOwkJCQkJCQlcCisJaW50IGNhbm9uLCByZXQ7CQkJCQkJCQlcCisJCQkJCQkJCQkJXAorCXJldCA9IGNvcHlfZnJvbV91c2VyKCZrX3Rlcm1pbywgdV90ZXJtaW8sIHNpemVvZihrX3Rlcm1pbykpOwkJXAorCWlmICghcmV0KSB7CQkJCQkJCQlcCisJCS8qIE92ZXJ3cml0ZSBvbmx5IHRoZSBsb3cgYml0cy4gICovCQkJCVwKKwkJKih1bnNpZ25lZCBzaG9ydCAqKSZrX3Rlcm1pb3MtPmNfaWZsYWcgPSBrX3Rlcm1pby5jX2lmbGFnOwlcCisJCSoodW5zaWduZWQgc2hvcnQgKikma190ZXJtaW9zLT5jX29mbGFnID0ga190ZXJtaW8uY19vZmxhZzsJXAorCQkqKHVuc2lnbmVkIHNob3J0ICopJmtfdGVybWlvcy0+Y19jZmxhZyA9IGtfdGVybWlvLmNfY2ZsYWc7CVwKKwkJKih1bnNpZ25lZCBzaG9ydCAqKSZrX3Rlcm1pb3MtPmNfbGZsYWcgPSBrX3Rlcm1pby5jX2xmbGFnOwlcCisJCWNhbm9uID0ga190ZXJtaW8uY19sZmxhZyAmIElDQU5PTjsJCQkJXAorCQkJCQkJCQkJCVwKKwkJa190ZXJtaW9zLT5jX2NjW1ZJTlRSXSAgPSBrX3Rlcm1pby5jX2NjW19WSU5UUl07CQlcCisJCWtfdGVybWlvcy0+Y19jY1tWUVVJVF0gID0ga190ZXJtaW8uY19jY1tfVlFVSVRdOwkJXAorCQlrX3Rlcm1pb3MtPmNfY2NbVkVSQVNFXSA9IGtfdGVybWlvLmNfY2NbX1ZFUkFTRV07CQlcCisJCWtfdGVybWlvcy0+Y19jY1tWS0lMTF0gID0ga190ZXJtaW8uY19jY1tfVktJTExdOwkJXAorCQlrX3Rlcm1pb3MtPmNfY2NbVkVPTDJdICA9IGtfdGVybWlvLmNfY2NbX1ZFT0wyXTsJCVwKKwkJa190ZXJtaW9zLT5jX2NjW1ZTV1RDXSAgPSBrX3Rlcm1pby5jX2NjW19WU1dUQ107CQlcCisJCWtfdGVybWlvcy0+Y19jY1tjYW5vbiA/IFZFT0YgOiBWTUlOXSAgPSBrX3Rlcm1pby5jX2NjW19WRU9GXTsJXAorCQlrX3Rlcm1pb3MtPmNfY2NbY2Fub24gPyBWRU9MIDogVlRJTUVdID0ga190ZXJtaW8uY19jY1tfVkVPTF07CVwKKwl9CQkJCQkJCQkJXAorCXJldDsJCQkJCQkJCQlcCit9KQorCisvKgorICogVHJhbnNsYXRlIGEgInRlcm1pb3MiIHN0cnVjdHVyZSBpbnRvIGEgInRlcm1pbyIuIFVnaC4KKyAqCisgKiBOb3RlIHRoZSAiZnVuIiBfVk1JTiBvdmVybG9hZGluZy4KKyAqLworI2RlZmluZSBrZXJuZWxfdGVybWlvc190b191c2VyX3Rlcm1pbyh1X3Rlcm1pbywgYV90ZXJtaW9zKQkJXAorKHsJCQkJCQkJCQlcCisJc3RydWN0IHRlcm1pb3MgKmtfdGVybWlvcyA9IChhX3Rlcm1pb3MpOwkJCVwKKwlzdHJ1Y3QgdGVybWlvIGtfdGVybWlvOwkJCQkJCVwKKwlpbnQgY2Fub247CQkJCQkJCVwKKwkJCQkJCQkJCVwKKwlrX3Rlcm1pby5jX2lmbGFnID0ga190ZXJtaW9zLT5jX2lmbGFnOwkJCQlcCisJa190ZXJtaW8uY19vZmxhZyA9IGtfdGVybWlvcy0+Y19vZmxhZzsJCQkJXAorCWtfdGVybWlvLmNfY2ZsYWcgPSBrX3Rlcm1pb3MtPmNfY2ZsYWc7CQkJCVwKKwljYW5vbiA9IChrX3Rlcm1pby5jX2xmbGFnID0ga190ZXJtaW9zLT5jX2xmbGFnKSAmIElDQU5PTjsJXAorCQkJCQkJCQkJXAorCWtfdGVybWlvLmNfbGluZSA9IGtfdGVybWlvcy0+Y19saW5lOwkJCQlcCisJa190ZXJtaW8uY19jY1tfVklOVFJdICA9IGtfdGVybWlvcy0+Y19jY1tWSU5UUl07CQlcCisJa190ZXJtaW8uY19jY1tfVlFVSVRdICA9IGtfdGVybWlvcy0+Y19jY1tWUVVJVF07CQlcCisJa190ZXJtaW8uY19jY1tfVkVSQVNFXSA9IGtfdGVybWlvcy0+Y19jY1tWRVJBU0VdOwkJXAorCWtfdGVybWlvLmNfY2NbX1ZLSUxMXSAgPSBrX3Rlcm1pb3MtPmNfY2NbVktJTExdOwkJXAorCWtfdGVybWlvLmNfY2NbX1ZFT0ZdICAgPSBrX3Rlcm1pb3MtPmNfY2NbY2Fub24gPyBWRU9GIDogVk1JTl07CVwKKwlrX3Rlcm1pby5jX2NjW19WRU9MXSAgID0ga190ZXJtaW9zLT5jX2NjW2Nhbm9uID8gVkVPTCA6IFZUSU1FXTsJXAorCWtfdGVybWlvLmNfY2NbX1ZFT0wyXSAgPSBrX3Rlcm1pb3MtPmNfY2NbVkVPTDJdOwkJXAorCWtfdGVybWlvLmNfY2NbX1ZTV1RDXSAgPSBrX3Rlcm1pb3MtPmNfY2NbVlNXVENdOwkJXAorCQkJCQkJCQkJXAorCWNvcHlfdG9fdXNlcih1X3Rlcm1pbywgJmtfdGVybWlvLCBzaXplb2Yoa190ZXJtaW8pKTsJCVwKK30pCisKKyNkZWZpbmUgdXNlcl90ZXJtaW9zX3RvX2tlcm5lbF90ZXJtaW9zKGssIHUpIFwKKwljb3B5X2Zyb21fdXNlcihrLCB1LCBzaXplb2Yoc3RydWN0IHRlcm1pb3MpKQorCisjZGVmaW5lIGtlcm5lbF90ZXJtaW9zX3RvX3VzZXJfdGVybWlvcyh1LCBrKSBcCisJY29weV90b191c2VyKHUsIGssIHNpemVvZihzdHJ1Y3QgdGVybWlvcykpCisKKyNlbmRpZgkvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZgkvKiBfQUxQSEFfVEVSTUlPU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS90aHJlYWRfaW5mby5oIGIvaW5jbHVkZS9hc20tYWxwaGEvdGhyZWFkX2luZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTE0OTFlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvdGhyZWFkX2luZm8uaApAQCAtMCwwICsxLDk4IEBACisjaWZuZGVmIF9BTFBIQV9USFJFQURfSU5GT19ICisjZGVmaW5lIF9BTFBIQV9USFJFQURfSU5GT19ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9od3JwYi5oPgorI2VuZGlmCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitzdHJ1Y3QgdGhyZWFkX2luZm8geworCXN0cnVjdCBwY2Jfc3RydWN0CXBjYjsJCS8qIHBhbGNvZGUgc3RhdGUgKi8KKworCXN0cnVjdCB0YXNrX3N0cnVjdAkqdGFzazsJCS8qIG1haW4gdGFzayBzdHJ1Y3R1cmUgKi8KKwl1bnNpZ25lZCBpbnQJCWZsYWdzOwkJLyogbG93IGxldmVsIGZsYWdzICovCisJdW5zaWduZWQgaW50CQlpZWVlX3N0YXRlOwkvKiBzZWUgZnB1LmggKi8KKworCXN0cnVjdCBleGVjX2RvbWFpbgkqZXhlY19kb21haW47CS8qIGV4ZWN1dGlvbiBkb21haW4gKi8KKwltbV9zZWdtZW50X3QJCWFkZHJfbGltaXQ7CS8qIHRocmVhZCBhZGRyZXNzIHNwYWNlICovCisJdW5zaWduZWQJCWNwdTsJCS8qIGN1cnJlbnQgQ1BVICovCisJaW50CQkJcHJlZW1wdF9jb3VudDsgLyogMCA9PiBwcmVlbXB0YWJsZSwgPDAgPT4gQlVHICovCisKKwlpbnQgYnB0X25zYXZlZDsKKwl1bnNpZ25lZCBsb25nIGJwdF9hZGRyWzJdOwkJLyogYnJlYWtwb2ludCBoYW5kbGluZyAgKi8KKwl1bnNpZ25lZCBpbnQgYnB0X2luc25bMl07CisKKwlzdHJ1Y3QgcmVzdGFydF9ibG9jawlyZXN0YXJ0X2Jsb2NrOworfTsKKworLyoKKyAqIE1hY3Jvcy9mdW5jdGlvbnMgZm9yIGdhaW5pbmcgYWNjZXNzIHRvIHRoZSB0aHJlYWQgaW5mb3JtYXRpb24gc3RydWN0dXJlLgorICovCisjZGVmaW5lIElOSVRfVEhSRUFEX0lORk8odHNrKQkJCVwKK3sJCQkJCQlcCisJLnRhc2sJCT0gJnRzaywJCQlcCisJLmV4ZWNfZG9tYWluCT0gJmRlZmF1bHRfZXhlY19kb21haW4sCVwKKwkuYWRkcl9saW1pdAk9IEtFUk5FTF9EUywJCVwKKwkucmVzdGFydF9ibG9jayA9IHsJCQlcCisJCS5mbiA9IGRvX25vX3Jlc3RhcnRfc3lzY2FsbCwJXAorCX0sCQkJCQlcCit9CisKKyNkZWZpbmUgaW5pdF90aHJlYWRfaW5mbwkoaW5pdF90aHJlYWRfdW5pb24udGhyZWFkX2luZm8pCisjZGVmaW5lIGluaXRfc3RhY2sJCShpbml0X3RocmVhZF91bmlvbi5zdGFjaykKKworLyogSG93IHRvIGdldCB0aGUgdGhyZWFkIGluZm9ybWF0aW9uIHN0cnVjdCBmcm9tIEMuICAqLworcmVnaXN0ZXIgc3RydWN0IHRocmVhZF9pbmZvICpfX2N1cnJlbnRfdGhyZWFkX2luZm8gX19hc21fXygiJDgiKTsKKyNkZWZpbmUgY3VycmVudF90aHJlYWRfaW5mbygpICBfX2N1cnJlbnRfdGhyZWFkX2luZm8KKworLyogVGhyZWFkIGluZm9ybWF0aW9uIGFsbG9jYXRpb24uICAqLworI2RlZmluZSBUSFJFQURfU0laRSAoMipQQUdFX1NJWkUpCisjZGVmaW5lIGFsbG9jX3RocmVhZF9pbmZvKHRzaykgXAorICAoKHN0cnVjdCB0aHJlYWRfaW5mbyAqKSBfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwsMSkpCisjZGVmaW5lIGZyZWVfdGhyZWFkX2luZm8odGkpIGZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpICh0aSksIDEpCisjZGVmaW5lIGdldF90aHJlYWRfaW5mbyh0aSkgZ2V0X3Rhc2tfc3RydWN0KCh0aSktPnRhc2spCisjZGVmaW5lIHB1dF90aHJlYWRfaW5mbyh0aSkgcHV0X3Rhc2tfc3RydWN0KCh0aSktPnRhc2spCisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworI2RlZmluZSBQUkVFTVBUX0FDVElWRQkJMHg0MDAwMDAwMAorCisvKgorICogVGhyZWFkIGluZm9ybWF0aW9uIGZsYWdzOgorICogLSB0aGVzZSBhcmUgcHJvY2VzcyBzdGF0ZSBmbGFncyBhbmQgdXNlZCBmcm9tIGFzc2VtYmx5CisgKiAtIHBlbmRpbmcgd29yay10by1iZS1kb25lIGZsYWdzIGNvbWUgZmlyc3QgdG8gZml0IGluIGFuZCBpbW1lZGlhdGUgb3BlcmFuZC4KKyAqCisgKiBUSUZfU1lTQ0FMTF9UUkFDRSBpcyBrbm93biB0byBiZSAwIHZpYSBibGJzLgorICovCisjZGVmaW5lIFRJRl9TWVNDQUxMX1RSQUNFCTAJLyogc3lzY2FsbCB0cmFjZSBhY3RpdmUgKi8KKyNkZWZpbmUgVElGX05PVElGWV9SRVNVTUUJMQkvKiByZXN1bXB0aW9uIG5vdGlmaWNhdGlvbiByZXF1ZXN0ZWQgKi8KKyNkZWZpbmUgVElGX1NJR1BFTkRJTkcJCTIJLyogc2lnbmFsIHBlbmRpbmcgKi8KKyNkZWZpbmUgVElGX05FRURfUkVTQ0hFRAkzCS8qIHJlc2NoZWR1bGluZyBuZWNlc3NhcnkgKi8KKyNkZWZpbmUgVElGX1BPTExJTkdfTlJGTEFHCTQJLyogcG9sbF9pZGxlIGlzIHBvbGxpbmcgTkVFRF9SRVNDSEVEICovCisjZGVmaW5lIFRJRl9ESUVfSUZfS0VSTkVMCTUJLyogZGlrIHJlY3Vyc2lvbiBsb2NrICovCisjZGVmaW5lIFRJRl9VQUNfTk9QUklOVAkJNgkvKiBzZWUgc3lzaW5mby5oICovCisjZGVmaW5lIFRJRl9VQUNfTk9GSVgJCTcKKyNkZWZpbmUgVElGX1VBQ19TSUdCVVMJCTgKKyNkZWZpbmUgVElGX01FTURJRQkJOQorCisjZGVmaW5lIF9USUZfU1lTQ0FMTF9UUkFDRQkoMTw8VElGX1NZU0NBTExfVFJBQ0UpCisjZGVmaW5lIF9USUZfTk9USUZZX1JFU1VNRQkoMTw8VElGX05PVElGWV9SRVNVTUUpCisjZGVmaW5lIF9USUZfU0lHUEVORElORwkJKDE8PFRJRl9TSUdQRU5ESU5HKQorI2RlZmluZSBfVElGX05FRURfUkVTQ0hFRAkoMTw8VElGX05FRURfUkVTQ0hFRCkKKyNkZWZpbmUgX1RJRl9QT0xMSU5HX05SRkxBRwkoMTw8VElGX1BPTExJTkdfTlJGTEFHKQorCisvKiBXb3JrIHRvIGRvIG9uIGludGVycnVwdC9leGNlcHRpb24gcmV0dXJuLiAgKi8KKyNkZWZpbmUgX1RJRl9XT1JLX01BU0sJCShfVElGX05PVElGWV9SRVNVTUUJXAorCQkJCSB8IF9USUZfU0lHUEVORElORwlcCisJCQkJIHwgX1RJRl9ORUVEX1JFU0NIRUQpCisKKy8qIFdvcmsgdG8gZG8gb24gYW55IHJldHVybiB0byB1c2Vyc3BhY2UuICAqLworI2RlZmluZSBfVElGX0FMTFdPUktfTUFTSwkoX1RJRl9XT1JLX01BU0sJCVwKKwkJCQkgfCBfVElGX1NZU0NBTExfVFJBQ0UpCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYgLyogX0FMUEhBX1RIUkVBRF9JTkZPX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL3RpbWV4LmggYi9pbmNsdWRlL2FzbS1hbHBoYS90aW1leC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmYTBjNDUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS90aW1leC5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hbHBoYS90aW1leC5oCisgKgorICogQUxQSEEgYXJjaGl0ZWN0dXJlIHRpbWV4IHNwZWNpZmljYXRpb25zCisgKi8KKyNpZm5kZWYgX0FTTUFMUEhBX1RJTUVYX0gKKyNkZWZpbmUgX0FTTUFMUEhBX1RJTUVYX0gKKworLyogV2l0aCBvbmx5IG9uZSBvciB0d28gb2RkYmFsbHMsIHdlIHVzZSB0aGUgUlRDIGFzIHRoZSB0aWNrZXIsIHNlbGVjdGluZworICAgdGhlIDMyLjc2OGtIeiByZWZlcmVuY2UgY2xvY2ssIHdoaWNoIG5pY2VseSBkaXZpZGVzIGRvd24gdG8gb3VyIEhaLiAgKi8KKyNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFCTMyNzY4CisKKy8qCisgKiBTdGFuZGFyZCB3YXkgdG8gYWNjZXNzIHRoZSBjeWNsZSBjb3VudGVyLgorICogQ3VycmVudGx5IG9ubHkgdXNlZCBvbiBTTVAgZm9yIHNjaGVkdWxpbmcuCisgKgorICogT25seSB0aGUgbG93IDMyIGJpdHMgYXJlIGF2YWlsYWJsZSBhcyBhIGNvbnRpbnVvdXNseSBjb3VudGluZyBlbnRpdHkuIAorICogQnV0IHRoaXMgb25seSBtZWFucyB3ZSdsbCBmb3JjZSBhIHJlc2NoZWR1bGUgZXZlcnkgOCBzZWNvbmRzIG9yIHNvLAorICogd2hpY2ggaXNuJ3QgYW4gZXZpbCB0aGluZy4KKyAqLworCit0eXBlZGVmIHVuc2lnbmVkIGludCBjeWNsZXNfdDsKKworc3RhdGljIGlubGluZSBjeWNsZXNfdCBnZXRfY3ljbGVzICh2b2lkKQoreworCWN5Y2xlc190IHJldDsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInJwY2MgJTAiIDogIj1yIihyZXQpKTsKKwlyZXR1cm4gcmV0OworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL3RsYi5oIGIvaW5jbHVkZS9hc20tYWxwaGEvdGxiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE5MTMzNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL3RsYi5oCkBAIC0wLDAgKzEsMTUgQEAKKyNpZm5kZWYgX0FMUEhBX1RMQl9ICisjZGVmaW5lIF9BTFBIQV9UTEJfSAorCisjZGVmaW5lIHRsYl9zdGFydF92bWEodGxiLCB2bWEpCQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSB0bGJfZW5kX3ZtYSh0bGIsIHZtYSkJCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIF9fdGxiX3JlbW92ZV90bGJfZW50cnkodGxiLCBwdGUsIGFkZHIpCWRvIHsgfSB3aGlsZSAoMCkKKworI2RlZmluZSB0bGJfZmx1c2godGxiKQkJCQlmbHVzaF90bGJfbW0oKHRsYiktPm1tKQorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdGxiLmg+CisKKyNkZWZpbmUgX19wdGVfZnJlZV90bGIodGxiLHB0ZSkJCQlwdGVfZnJlZShwdGUpCisjZGVmaW5lIF9fcG1kX2ZyZWVfdGxiKHRsYixwbWQpCQkJcG1kX2ZyZWUocG1kKQorIAorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS90bGJmbHVzaC5oIGIvaW5jbHVkZS9hc20tYWxwaGEvdGxiZmx1c2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDQ4NGMxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvdGxiZmx1c2guaApAQCAtMCwwICsxLDE1OCBAQAorI2lmbmRlZiBfQUxQSEFfVExCRkxVU0hfSAorI2RlZmluZSBfQUxQSEFfVExCRkxVU0hfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxhc20vY29tcGlsZXIuaD4KKworI2lmbmRlZiBfX0VYVEVSTl9JTkxJTkUKKyNkZWZpbmUgX19FWFRFUk5fSU5MSU5FIGV4dGVybiBpbmxpbmUKKyNkZWZpbmUgX19NTVVfRVhURVJOX0lOTElORQorI2VuZGlmCisKK2V4dGVybiB2b2lkIF9fbG9hZF9uZXdfbW1fY29udGV4dChzdHJ1Y3QgbW1fc3RydWN0ICopOworCisKKy8qIFVzZSBhIGZldyBoZWxwZXIgZnVuY3Rpb25zIHRvIGhpZGUgdGhlIHVnbHkgYnJva2VuIEFTTgorICAgbnVtYmVycyBvbiBlYXJseSBBbHBoYXMgKGV2NCBhbmQgZXY0NSkuICAqLworCitfX0VYVEVSTl9JTkxJTkUgdm9pZAorZXY0X2ZsdXNoX3RsYl9jdXJyZW50KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCV9fbG9hZF9uZXdfbW1fY29udGV4dChtbSk7CisJdGJpYXAoKTsKK30KKworX19FWFRFUk5fSU5MSU5FIHZvaWQKK2V2NV9mbHVzaF90bGJfY3VycmVudChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlfX2xvYWRfbmV3X21tX2NvbnRleHQobW0pOworfQorCisvKiBGbHVzaCBqdXN0IG9uZSBwYWdlIGluIHRoZSBjdXJyZW50IFRMQiBzZXQuICBXZSBuZWVkIHRvIGJlIHZlcnkKKyAgIGNhcmVmdWwgYWJvdXQgdGhlIGljYWNoZSBoZXJlLCB0aGVyZSBpcyBubyB3YXkgdG8gaW52YWxpZGF0ZSBhCisgICBzcGVjaWZpYyBpY2FjaGUgcGFnZS4gICovCisKK19fRVhURVJOX0lOTElORSB2b2lkCitldjRfZmx1c2hfdGxiX2N1cnJlbnRfcGFnZShzdHJ1Y3QgbW1fc3RydWN0ICogbW0sCisJCQkgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlpbnQgdGJpX2ZsYWcgPSAyOworCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fRVhFQykgeworCQlfX2xvYWRfbmV3X21tX2NvbnRleHQobW0pOworCQl0YmlfZmxhZyA9IDM7CisJfQorCXRiaSh0YmlfZmxhZywgYWRkcik7Cit9CisKK19fRVhURVJOX0lOTElORSB2b2lkCitldjVfZmx1c2hfdGxiX2N1cnJlbnRfcGFnZShzdHJ1Y3QgbW1fc3RydWN0ICogbW0sCisJCQkgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlpZiAodm1hLT52bV9mbGFncyAmIFZNX0VYRUMpCisJCV9fbG9hZF9uZXdfbW1fY29udGV4dChtbSk7CisJZWxzZQorCQl0YmkoMiwgYWRkcik7Cit9CisKKworI2lmZGVmIENPTkZJR19BTFBIQV9HRU5FUklDCisjIGRlZmluZSBmbHVzaF90bGJfY3VycmVudAkJYWxwaGFfbXYubXZfZmx1c2hfdGxiX2N1cnJlbnQKKyMgZGVmaW5lIGZsdXNoX3RsYl9jdXJyZW50X3BhZ2UJCWFscGhhX212Lm12X2ZsdXNoX3RsYl9jdXJyZW50X3BhZ2UKKyNlbHNlCisjIGlmZGVmIENPTkZJR19BTFBIQV9FVjQKKyMgIGRlZmluZSBmbHVzaF90bGJfY3VycmVudAkJZXY0X2ZsdXNoX3RsYl9jdXJyZW50CisjICBkZWZpbmUgZmx1c2hfdGxiX2N1cnJlbnRfcGFnZQlldjRfZmx1c2hfdGxiX2N1cnJlbnRfcGFnZQorIyBlbHNlCisjICBkZWZpbmUgZmx1c2hfdGxiX2N1cnJlbnQJCWV2NV9mbHVzaF90bGJfY3VycmVudAorIyAgZGVmaW5lIGZsdXNoX3RsYl9jdXJyZW50X3BhZ2UJZXY1X2ZsdXNoX3RsYl9jdXJyZW50X3BhZ2UKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgX19NTVVfRVhURVJOX0lOTElORQorI3VuZGVmIF9fRVhURVJOX0lOTElORQorI3VuZGVmIF9fTU1VX0VYVEVSTl9JTkxJTkUKKyNlbmRpZgorCisvKiBGbHVzaCBjdXJyZW50IHVzZXIgbWFwcGluZy4gICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2ZsdXNoX3RsYih2b2lkKQoreworCWZsdXNoX3RsYl9jdXJyZW50KGN1cnJlbnQtPmFjdGl2ZV9tbSk7Cit9CisKKy8qIEZsdXNoIHNvbWVvbmUgZWxzZSdzIHVzZXIgbWFwcGluZy4gICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2ZsdXNoX3RsYl9vdGhlcihzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwl1bnNpZ25lZCBsb25nICptbWMgPSAmbW0tPmNvbnRleHRbc21wX3Byb2Nlc3Nvcl9pZCgpXTsKKwkvKiBDaGVjayBpdCdzIG5vdCB6ZXJvIGZpcnN0IHRvIGF2b2lkIGNhY2hlbGluZSBwaW5nIHBvbmcKKwkgICB3aGVuIHBvc3NpYmxlLiAgKi8KKwlpZiAoKm1tYykgKm1tYyA9IDA7Cit9CisKKy8qIEZsdXNoIGEgc3BlY2lmaWVkIHJhbmdlIG9mIHVzZXIgbWFwcGluZyBwYWdlIHRhYmxlcyBmcm9tIFRMQi4KKyAgIEFsdGhvdWdoIEFscGhhIHVzZXMgVlBURSBjYWNoZXMsIHRoaXMgY2FuIGJlIGEgbm9wLCBhcyBBbHBoYSBkb2VzCisgICBub3QgaGF2ZSBmaW5lZ3JhaW5lZCB0bGIgZmx1c2hpbmcsIHNvIGl0IHdpbGwgZmx1c2ggVlBURSBzdHVmZgorICAgZHVyaW5nIG5leHQgZmx1c2hfdGxiX3JhbmdlLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitmbHVzaF90bGJfcGd0YWJsZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsCisJCSAgIHVuc2lnbmVkIGxvbmcgZW5kKQoreworfQorCisjaWZuZGVmIENPTkZJR19TTVAKKy8qIEZsdXNoIGV2ZXJ5dGhpbmcgKGtlcm5lbCBtYXBwaW5nIG1heSBhbHNvIGhhdmUgY2hhbmdlZAorICAgZHVlIHRvIHZtYWxsb2MvdmZyZWUpLiAgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfYWxsKHZvaWQpCit7CisJdGJpYSgpOworfQorCisvKiBGbHVzaCBhIHNwZWNpZmllZCB1c2VyIG1hcHBpbmcuICAqLworc3RhdGljIGlubGluZSB2b2lkCitmbHVzaF90bGJfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJaWYgKG1tID09IGN1cnJlbnQtPmFjdGl2ZV9tbSkKKwkJZmx1c2hfdGxiX2N1cnJlbnQobW0pOworCWVsc2UKKwkJZmx1c2hfdGxiX290aGVyKG1tKTsKK30KKworLyogUGFnZS1ncmFudWxhciB0bGIgZmx1c2guICAqLworc3RhdGljIGlubGluZSB2b2lkCitmbHVzaF90bGJfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdm1hLT52bV9tbTsKKworCWlmIChtbSA9PSBjdXJyZW50LT5hY3RpdmVfbW0pCisJCWZsdXNoX3RsYl9jdXJyZW50X3BhZ2UobW0sIHZtYSwgYWRkcik7CisJZWxzZQorCQlmbHVzaF90bGJfb3RoZXIobW0pOworfQorCisvKiBGbHVzaCBhIHNwZWNpZmllZCByYW5nZSBvZiB1c2VyIG1hcHBpbmcuICBPbiB0aGUgQWxwaGEgd2UgZmx1c2gKKyAgIHRoZSB3aG9sZSB1c2VyIHRsYi4gICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2ZsdXNoX3RsYl9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCwKKwkJdW5zaWduZWQgbG9uZyBlbmQpCit7CisJZmx1c2hfdGxiX21tKHZtYS0+dm1fbW0pOworfQorCisjZWxzZSAvKiBDT05GSUdfU01QICovCisKK2V4dGVybiB2b2lkIGZsdXNoX3RsYl9hbGwodm9pZCk7CitleHRlcm4gdm9pZCBmbHVzaF90bGJfbW0oc3RydWN0IG1tX3N0cnVjdCAqKTsKK2V4dGVybiB2b2lkIGZsdXNoX3RsYl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nKTsKK2V4dGVybiB2b2lkIGZsdXNoX3RsYl9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywKKwkJCSAgICB1bnNpZ25lZCBsb25nKTsKKworI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KKworI2RlZmluZSBmbHVzaF90bGJfa2VybmVsX3JhbmdlKHN0YXJ0LCBlbmQpIGZsdXNoX3RsYl9hbGwoKQorCisjZW5kaWYgLyogX0FMUEhBX1RMQkZMVVNIX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL3RvcG9sb2d5LmggYi9pbmNsdWRlL2FzbS1hbHBoYS90b3BvbG9neS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViNzQwZTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS90b3BvbG9neS5oCkBAIC0wLDAgKzEsNDggQEAKKyNpZm5kZWYgX0FTTV9BTFBIQV9UT1BPTE9HWV9ICisjZGVmaW5lIF9BU01fQUxQSEFfVE9QT0xPR1lfSAorCisjaW5jbHVkZSA8bGludXgvc21wLmg+CisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+CisKKyNpZmRlZiBDT05GSUdfTlVNQQorc3RhdGljIGlubGluZSBpbnQgY3B1X3RvX25vZGUoaW50IGNwdSkKK3sKKwlpbnQgbm9kZTsKKwkKKwlpZiAoIWFscGhhX212LmNwdWlkX3RvX25pZCkKKwkJcmV0dXJuIDA7CisKKwlub2RlID0gYWxwaGFfbXYuY3B1aWRfdG9fbmlkKGNwdSk7CisKKyNpZmRlZiBERUJVR19OVU1BCisJQlVHX09OKG5vZGUgPCAwKTsKKyNlbmRpZgorCisJcmV0dXJuIG5vZGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgY3B1bWFza190IG5vZGVfdG9fY3B1bWFzayhpbnQgbm9kZSkKK3sKKwljcHVtYXNrX3Qgbm9kZV9jcHVfbWFzayA9IENQVV9NQVNLX05PTkU7CisJaW50IGNwdTsKKworCWZvcihjcHUgPSAwOyBjcHUgPCBOUl9DUFVTOyBjcHUrKykgeworCQlpZiAoY3B1X29ubGluZShjcHUpICYmIChjcHVfdG9fbm9kZShjcHUpID09IG5vZGUpKQorCQkJY3B1X3NldChjcHUsIG5vZGVfY3B1X21hc2spOworCX0KKworI2lmZGVmIERFQlVHX05VTUEKKwlwcmludGsoIm5vZGUgJWQ6IGNwdV9tYXNrOiAlMDE2bHhcbiIsIG5vZGUsIG5vZGVfY3B1X21hc2spOworI2VuZGlmCisKKwlyZXR1cm4gbm9kZV9jcHVfbWFzazsKK30KKworI2RlZmluZSBwY2lidXNfdG9fY3B1bWFzayhidXMpCShjcHVfb25saW5lX21hcCkKKworI2Vsc2UgLyogQ09ORklHX05VTUEgKi8KKyMgaW5jbHVkZSA8YXNtLWdlbmVyaWMvdG9wb2xvZ3kuaD4KKyNlbmRpZiAvKiAhQ09ORklHX05VTUEgKi8KKworI2VuZGlmIC8qIF9BU01fQUxQSEFfVE9QT0xPR1lfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvdHlwZXMuaCBiL2luY2x1ZGUvYXNtLWFscGhhL3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDMyNjRkMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL3R5cGVzLmgKQEAgLTAsMCArMSw2MyBAQAorI2lmbmRlZiBfQUxQSEFfVFlQRVNfSAorI2RlZmluZSBfQUxQSEFfVFlQRVNfSAorCisvKgorICogVGhpcyBmaWxlIGlzIG5ldmVyIGluY2x1ZGVkIGJ5IGFwcGxpY2F0aW9uIHNvZnR3YXJlIHVubGVzcworICogZXhwbGljaXRseSByZXF1ZXN0ZWQgKGUuZy4sIHZpYSBsaW51eC90eXBlcy5oKSBpbiB3aGljaCBjYXNlIHRoZQorICogYXBwbGljYXRpb24gaXMgTGludXggc3BlY2lmaWMgc28gKHVzZXItKSBuYW1lIHNwYWNlIHBvbGx1dGlvbiBpcworICogbm90IGEgbWFqb3IgaXNzdWUuICBIb3dldmVyLCBmb3IgaW50ZXJvcGVyYWJpbGl0eSwgbGlicmFyaWVzIHN0aWxsCisgKiBuZWVkIHRvIGJlIGNhcmVmdWwgdG8gYXZvaWQgYSBuYW1lIGNsYXNoZXMuCisgKi8KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKwordHlwZWRlZiB1bnNpZ25lZCBpbnQgdW1vZGVfdDsKKworLyoKKyAqIF9feHggaXMgb2s6IGl0IGRvZXNuJ3QgcG9sbHV0ZSB0aGUgUE9TSVggbmFtZXNwYWNlLiBVc2UgdGhlc2UgaW4gdGhlCisgKiBoZWFkZXIgZmlsZXMgZXhwb3J0ZWQgdG8gdXNlciBzcGFjZQorICovCisKK3R5cGVkZWYgX19zaWduZWRfXyBjaGFyIF9fczg7Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191ODsKKwordHlwZWRlZiBfX3NpZ25lZF9fIHNob3J0IF9fczE2OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX3UxNjsKKwordHlwZWRlZiBfX3NpZ25lZF9fIGludCBfX3MzMjsKK3R5cGVkZWYgdW5zaWduZWQgaW50IF9fdTMyOworCit0eXBlZGVmIF9fc2lnbmVkX18gbG9uZyBfX3M2NDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBfX3U2NDsKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisvKgorICogVGhlc2UgYXJlbid0IGV4cG9ydGVkIG91dHNpZGUgdGhlIGtlcm5lbCB0byBhdm9pZCBuYW1lIHNwYWNlIGNsYXNoZXMKKyAqLworI2lmZGVmIF9fS0VSTkVMX18KKworI2RlZmluZSBCSVRTX1BFUl9MT05HIDY0CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK3R5cGVkZWYgc2lnbmVkIGNoYXIgczg7Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdTg7CisKK3R5cGVkZWYgc2lnbmVkIHNob3J0IHMxNjsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgdTE2OworCit0eXBlZGVmIHNpZ25lZCBpbnQgczMyOwordHlwZWRlZiB1bnNpZ25lZCBpbnQgdTMyOworCit0eXBlZGVmIHNpZ25lZCBsb25nIHM2NDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyB1NjQ7CisKK3R5cGVkZWYgdTY0IGRtYV9hZGRyX3Q7Cit0eXBlZGVmIHU2NCBkbWE2NF9hZGRyX3Q7CisKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQga21lbV9idWZjdGxfdDsKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAvKiBfQUxQSEFfVFlQRVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvdWFjY2Vzcy5oIGIvaW5jbHVkZS9hc20tYWxwaGEvdWFjY2Vzcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjMzllZTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS91YWNjZXNzLmgKQEAgLTAsMCArMSw1MTcgQEAKKyNpZm5kZWYgX19BTFBIQV9VQUNDRVNTX0gKKyNkZWZpbmUgX19BTFBIQV9VQUNDRVNTX0gKKworI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKworCisvKgorICogVGhlIGZzIHZhbHVlIGRldGVybWluZXMgd2hldGhlciBhcmd1bWVudCB2YWxpZGl0eSBjaGVja2luZyBzaG91bGQgYmUKKyAqIHBlcmZvcm1lZCBvciBub3QuICBJZiBnZXRfZnMoKSA9PSBVU0VSX0RTLCBjaGVja2luZyBpcyBwZXJmb3JtZWQsIHdpdGgKKyAqIGdldF9mcygpID09IEtFUk5FTF9EUywgY2hlY2tpbmcgaXMgYnlwYXNzZWQuCisgKgorICogT3IgYXQgbGVhc3QgaXQgZGlkIG9uY2UgdXBvbiBhIHRpbWUuICBOb3dhZGF5cyBpdCBpcyBhIG1hc2sgdGhhdAorICogZGVmaW5lcyB3aGljaCBiaXRzIG9mIHRoZSBhZGRyZXNzIHNwYWNlIGFyZSBvZmYgbGltaXRzLiAgVGhpcyBpcyBhCisgKiB3ZWUgYml0IGZhc3RlciB0aGFuIHRoZSBhYm92ZS4KKyAqCisgKiBGb3IgaGlzdG9yaWNhbCByZWFzb25zLCB0aGVzZSBtYWNyb3MgYXJlIGdyb3NzbHkgbWlzbmFtZWQuCisgKi8KKworI2RlZmluZSBLRVJORUxfRFMJKChtbV9zZWdtZW50X3QpIHsgMFVMIH0pCisjZGVmaW5lIFVTRVJfRFMJCSgobW1fc2VnbWVudF90KSB7IC0weDQwMDAwMDAwMDAwVUwgfSkKKworI2RlZmluZSBWRVJJRllfUkVBRAkwCisjZGVmaW5lIFZFUklGWV9XUklURQkxCisKKyNkZWZpbmUgZ2V0X2ZzKCkgIChjdXJyZW50X3RocmVhZF9pbmZvKCktPmFkZHJfbGltaXQpCisjZGVmaW5lIGdldF9kcygpICAoS0VSTkVMX0RTKQorI2RlZmluZSBzZXRfZnMoeCkgKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+YWRkcl9saW1pdCA9ICh4KSkKKworI2RlZmluZSBzZWdtZW50X2VxKGEsYikJKChhKS5zZWcgPT0gKGIpLnNlZykKKworLyoKKyAqIElzIGEgYWRkcmVzcyB2YWxpZD8gVGhpcyBkb2VzIGEgc3RyYWlnaHRmb3J3YXJkIGNhbGN1bGF0aW9uIHJhdGhlcgorICogdGhhbiB0ZXN0cy4KKyAqCisgKiBBZGRyZXNzIHZhbGlkIGlmOgorICogIC0gImFkZHIiIGRvZXNuJ3QgaGF2ZSBhbnkgaGlnaC1iaXRzIHNldAorICogIC0gQU5EICJzaXplIiBkb2Vzbid0IGhhdmUgYW55IGhpZ2gtYml0cyBzZXQKKyAqICAtIEFORCAiYWRkcitzaXplIiBkb2Vzbid0IGhhdmUgYW55IGhpZ2gtYml0cyBzZXQKKyAqICAtIE9SIHdlIGFyZSBpbiBrZXJuZWwgbW9kZS4KKyAqLworI2RlZmluZSBfX2FjY2Vzc19vayhhZGRyLHNpemUsc2VnbWVudCkgXAorCSgoKHNlZ21lbnQpLnNlZyAmIChhZGRyIHwgc2l6ZSB8IChhZGRyK3NpemUpKSkgPT0gMCkKKworI2RlZmluZSBhY2Nlc3Nfb2sodHlwZSxhZGRyLHNpemUpCQkJCVwKKyh7CQkJCQkJCQlcCisJX19jaGtfdXNlcl9wdHIoYWRkcik7CQkJCQlcCisJX19hY2Nlc3Nfb2soKCh1bnNpZ25lZCBsb25nKShhZGRyKSksKHNpemUpLGdldF9mcygpKTsJXAorfSkKKworLyogdGhpcyBmdW5jdGlvbiB3aWxsIGdvIGF3YXkgc29vbiAtIHVzZSBhY2Nlc3Nfb2soKSBpbnN0ZWFkICovCitleHRlcm4gaW5saW5lIGludCBfX2RlcHJlY2F0ZWQgdmVyaWZ5X2FyZWEoaW50IHR5cGUsIGNvbnN0IHZvaWQgX191c2VyICogYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXJldHVybiBhY2Nlc3Nfb2sodHlwZSxhZGRyLHNpemUpID8gMCA6IC1FRkFVTFQ7Cit9CisKKy8qCisgKiBUaGVzZSBhcmUgdGhlIG1haW4gc2luZ2xlLXZhbHVlIHRyYW5zZmVyIHJvdXRpbmVzLiAgVGhleSBhdXRvbWF0aWNhbGx5CisgKiB1c2UgdGhlIHJpZ2h0IHNpemUgaWYgd2UganVzdCBoYXZlIHRoZSByaWdodCBwb2ludGVyIHR5cGUuCisgKgorICogQXMgdGhlIGFscGhhIHVzZXMgdGhlIHNhbWUgYWRkcmVzcyBzcGFjZSBmb3Iga2VybmVsIGFuZCB1c2VyCisgKiBkYXRhLCB3ZSBjYW4ganVzdCBkbyB0aGVzZSBhcyBkaXJlY3QgYXNzaWdubWVudHMuICAoT2YgY291cnNlLCB0aGUKKyAqIGV4Y2VwdGlvbiBoYW5kbGluZyBtZWFucyB0aGF0IGl0J3Mgbm8gbG9uZ2VyICJqdXN0Ii4uLikKKyAqCisgKiBDYXJlZnVsIHRvIG5vdAorICogKGEpIHJlLXVzZSB0aGUgYXJndW1lbnRzIGZvciBzaWRlIGVmZmVjdHMgKHNpemVvZi90eXBlb2YgaXMgb2spCisgKiAoYikgcmVxdWlyZSBhbnkga25vd2xlZGdlIG9mIHByb2Nlc3NlcyBhdCB0aGlzIHN0YWdlCisgKi8KKyNkZWZpbmUgcHV0X3VzZXIoeCxwdHIpIFwKKyAgX19wdXRfdXNlcl9jaGVjaygoX190eXBlb2ZfXygqKHB0cikpKSh4KSwocHRyKSxzaXplb2YoKihwdHIpKSxnZXRfZnMoKSkKKyNkZWZpbmUgZ2V0X3VzZXIoeCxwdHIpIFwKKyAgX19nZXRfdXNlcl9jaGVjaygoeCksKHB0ciksc2l6ZW9mKCoocHRyKSksZ2V0X2ZzKCkpCisKKy8qCisgKiBUaGUgIl9feHh4IiB2ZXJzaW9ucyBkbyBub3QgZG8gYWRkcmVzcyBzcGFjZSBjaGVja2luZywgdXNlZnVsIHdoZW4KKyAqIGRvaW5nIG11bHRpcGxlIGFjY2Vzc2VzIHRvIHRoZSBzYW1lIGFyZWEgKHRoZSBwcm9ncmFtbWVyIGhhcyB0byBkbyB0aGUKKyAqIGNoZWNrcyBieSBoYW5kIHdpdGggImFjY2Vzc19vaygpIikKKyAqLworI2RlZmluZSBfX3B1dF91c2VyKHgscHRyKSBcCisgIF9fcHV0X3VzZXJfbm9jaGVjaygoX190eXBlb2ZfXygqKHB0cikpKSh4KSwocHRyKSxzaXplb2YoKihwdHIpKSkKKyNkZWZpbmUgX19nZXRfdXNlcih4LHB0cikgXAorICBfX2dldF91c2VyX25vY2hlY2soKHgpLChwdHIpLHNpemVvZigqKHB0cikpKQorICAKKy8qCisgKiBUaGUgImxkYSAlMSwgMmItMWIoJTApIiBiaXRzIGFyZSBtYWdpYyB0byBnZXQgdGhlIGFzc2VtYmxlciB0bworICogZW5jb2RlIHRoZSBiaXRzIHdlIG5lZWQgZm9yIHJlc29sdmluZyB0aGUgZXhjZXB0aW9uLiAgU2VlIHRoZQorICogbW9yZSBleHRlbnNpdmUgY29tbWVudHMgd2l0aCBmaXh1cF9pbmxpbmVfZXhjZXB0aW9uIGJlbG93IGZvcgorICogbW9yZSBpbmZvcm1hdGlvbi4KKyAqLworCitleHRlcm4gdm9pZCBfX2dldF91c2VyX3Vua25vd24odm9pZCk7CisKKyNkZWZpbmUgX19nZXRfdXNlcl9ub2NoZWNrKHgscHRyLHNpemUpCQkJCVwKKyh7CQkJCQkJCQlcCisJbG9uZyBfX2d1X2VyciA9IDA7CQkJCQlcCisJdW5zaWduZWQgbG9uZyBfX2d1X3ZhbDsJCQkJCVwKKwlfX2Noa191c2VyX3B0cihwdHIpOwkJCQkJXAorCXN3aXRjaCAoc2l6ZSkgewkJCQkJCVwKKwkgIGNhc2UgMTogX19nZXRfdXNlcl84KHB0cik7IGJyZWFrOwkJCVwKKwkgIGNhc2UgMjogX19nZXRfdXNlcl8xNihwdHIpOyBicmVhazsJCQlcCisJICBjYXNlIDQ6IF9fZ2V0X3VzZXJfMzIocHRyKTsgYnJlYWs7CQkJXAorCSAgY2FzZSA4OiBfX2dldF91c2VyXzY0KHB0cik7IGJyZWFrOwkJCVwKKwkgIGRlZmF1bHQ6IF9fZ2V0X3VzZXJfdW5rbm93bigpOyBicmVhazsJCQlcCisJfQkJCQkJCQlcCisJKHgpID0gKF9fdHlwZW9mX18oKihwdHIpKSkgX19ndV92YWw7CQkJXAorCV9fZ3VfZXJyOwkJCQkJCVwKK30pCisKKyNkZWZpbmUgX19nZXRfdXNlcl9jaGVjayh4LHB0cixzaXplLHNlZ21lbnQpCQkJCVwKKyh7CQkJCQkJCQkJXAorCWxvbmcgX19ndV9lcnIgPSAtRUZBVUxUOwkJCQkJXAorCXVuc2lnbmVkIGxvbmcgX19ndV92YWwgPSAwOwkJCQkJXAorCWNvbnN0IF9fdHlwZW9mX18oKihwdHIpKSBfX3VzZXIgKl9fZ3VfYWRkciA9IChwdHIpOwkJXAorCWlmIChfX2FjY2Vzc19vaygodW5zaWduZWQgbG9uZylfX2d1X2FkZHIsc2l6ZSxzZWdtZW50KSkgewlcCisJCV9fZ3VfZXJyID0gMDsJCQkJCQlcCisJCXN3aXRjaCAoc2l6ZSkgewkJCQkJCVwKKwkJICBjYXNlIDE6IF9fZ2V0X3VzZXJfOChfX2d1X2FkZHIpOyBicmVhazsJCVwKKwkJICBjYXNlIDI6IF9fZ2V0X3VzZXJfMTYoX19ndV9hZGRyKTsgYnJlYWs7CQlcCisJCSAgY2FzZSA0OiBfX2dldF91c2VyXzMyKF9fZ3VfYWRkcik7IGJyZWFrOwkJXAorCQkgIGNhc2UgODogX19nZXRfdXNlcl82NChfX2d1X2FkZHIpOyBicmVhazsJCVwKKwkJICBkZWZhdWx0OiBfX2dldF91c2VyX3Vua25vd24oKTsgYnJlYWs7CQkJXAorCQl9CQkJCQkJCVwKKwl9CQkJCQkJCQlcCisJKHgpID0gKF9fdHlwZW9mX18oKihwdHIpKSkgX19ndV92YWw7CQkJCVwKKwlfX2d1X2VycjsJCQkJCQkJXAorfSkKKworc3RydWN0IF9fbGFyZ2Vfc3RydWN0IHsgdW5zaWduZWQgbG9uZyBidWZbMTAwXTsgfTsKKyNkZWZpbmUgX19tKHgpICgqKHN0cnVjdCBfX2xhcmdlX3N0cnVjdCBfX3VzZXIgKikoeCkpCisKKyNkZWZpbmUgX19nZXRfdXNlcl82NChhZGRyKQkJCQlcCisJX19hc21fXygiMTogbGRxICUwLCUyXG4iCQkJXAorCSIyOlxuIgkJCQkJCVwKKwkiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgkJCVwKKwkiCS5sb25nIDFiIC0gLlxuIgkJCQlcCisJIglsZGEgJTAsIDJiLTFiKCUxKVxuIgkJCVwKKwkiLnByZXZpb3VzIgkJCQkJXAorCQk6ICI9ciIoX19ndV92YWwpLCAiPXIiKF9fZ3VfZXJyKQlcCisJCTogIm0iKF9fbShhZGRyKSksICIxIihfX2d1X2VycikpCisKKyNkZWZpbmUgX19nZXRfdXNlcl8zMihhZGRyKQkJCQlcCisJX19hc21fXygiMTogbGRsICUwLCUyXG4iCQkJXAorCSIyOlxuIgkJCQkJCVwKKwkiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgkJCVwKKwkiCS5sb25nIDFiIC0gLlxuIgkJCQlcCisJIglsZGEgJTAsIDJiLTFiKCUxKVxuIgkJCVwKKwkiLnByZXZpb3VzIgkJCQkJXAorCQk6ICI9ciIoX19ndV92YWwpLCAiPXIiKF9fZ3VfZXJyKQlcCisJCTogIm0iKF9fbShhZGRyKSksICIxIihfX2d1X2VycikpCisKKyNpZmRlZiBfX2FscGhhX2J3eF9fCisvKiBUaG9zZSBsdWNreSBiYXN0YXJkcyB3aXRoIGV2NTYgYW5kIGxhdGVyIENQVXMgY2FuIGRvIGJ5dGUvd29yZCBtb3Zlcy4gICovCisKKyNkZWZpbmUgX19nZXRfdXNlcl8xNihhZGRyKQkJCQlcCisJX19hc21fXygiMTogbGR3dSAlMCwlMlxuIgkJCVwKKwkiMjpcbiIJCQkJCQlcCisJIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIJCQlcCisJIgkubG9uZyAxYiAtIC5cbiIJCQkJXAorCSIJbGRhICUwLCAyYi0xYiglMSlcbiIJCQlcCisJIi5wcmV2aW91cyIJCQkJCVwKKwkJOiAiPXIiKF9fZ3VfdmFsKSwgIj1yIihfX2d1X2VycikJXAorCQk6ICJtIihfX20oYWRkcikpLCAiMSIoX19ndV9lcnIpKQorCisjZGVmaW5lIF9fZ2V0X3VzZXJfOChhZGRyKQkJCQlcCisJX19hc21fXygiMTogbGRidSAlMCwlMlxuIgkJCVwKKwkiMjpcbiIJCQkJCQlcCisJIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIJCQlcCisJIgkubG9uZyAxYiAtIC5cbiIJCQkJXAorCSIJbGRhICUwLCAyYi0xYiglMSlcbiIJCQlcCisJIi5wcmV2aW91cyIJCQkJCVwKKwkJOiAiPXIiKF9fZ3VfdmFsKSwgIj1yIihfX2d1X2VycikJXAorCQk6ICJtIihfX20oYWRkcikpLCAiMSIoX19ndV9lcnIpKQorI2Vsc2UKKy8qIFVuZm9ydHVuYXRlbHksIHdlIGNhbid0IGdldCBhbiB1bmFsaWduZWQgYWNjZXNzIHRyYXAgZm9yIHRoZSBzdWItd29yZAorICAgbG9hZCwgc28gd2UgaGF2ZSB0byBkbyBhIGdlbmVyYWwgdW5hbGlnbmVkIG9wZXJhdGlvbi4gICovCisKKyNkZWZpbmUgX19nZXRfdXNlcl8xNihhZGRyKQkJCQkJCVwKK3sJCQkJCQkJCQlcCisJbG9uZyBfX2d1X3RtcDsJCQkJCQkJXAorCV9fYXNtX18oIjE6IGxkcV91ICUwLDAoJTMpXG4iCQkJCQlcCisJIjI6CWxkcV91ICUxLDEoJTMpXG4iCQkJCQlcCisJIglleHR3bCAlMCwlMywlMFxuIgkJCQkJXAorCSIJZXh0d2ggJTEsJTMsJTFcbiIJCQkJCVwKKwkiCW9yICUwLCUxLCUwXG4iCQkJCQkJXAorCSIzOlxuIgkJCQkJCQkJXAorCSIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCQkJCQlcCisJIgkubG9uZyAxYiAtIC5cbiIJCQkJCQlcCisJIglsZGEgJTAsIDNiLTFiKCUyKVxuIgkJCQkJXAorCSIJLmxvbmcgMmIgLSAuXG4iCQkJCQkJXAorCSIJbGRhICUwLCAzYi0yYiglMilcbiIJCQkJCVwKKwkiLnByZXZpb3VzIgkJCQkJCQlcCisJCTogIj0mciIoX19ndV92YWwpLCAiPSZyIihfX2d1X3RtcCksICI9ciIoX19ndV9lcnIpCVwKKwkJOiAiciIoYWRkciksICIyIihfX2d1X2VycikpOwkJCQlcCit9CisKKyNkZWZpbmUgX19nZXRfdXNlcl84KGFkZHIpCQkJCQkJXAorCV9fYXNtX18oIjE6IGxkcV91ICUwLDAoJTIpXG4iCQkJCQlcCisJIglleHRibCAlMCwlMiwlMFxuIgkJCQkJXAorCSIyOlxuIgkJCQkJCQkJXAorCSIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCQkJCQlcCisJIgkubG9uZyAxYiAtIC5cbiIJCQkJCQlcCisJIglsZGEgJTAsIDJiLTFiKCUxKVxuIgkJCQkJXAorCSIucHJldmlvdXMiCQkJCQkJCVwKKwkJOiAiPSZyIihfX2d1X3ZhbCksICI9ciIoX19ndV9lcnIpCQkJXAorCQk6ICJyIihhZGRyKSwgIjEiKF9fZ3VfZXJyKSkKKyNlbmRpZgorCitleHRlcm4gdm9pZCBfX3B1dF91c2VyX3Vua25vd24odm9pZCk7CisKKyNkZWZpbmUgX19wdXRfdXNlcl9ub2NoZWNrKHgscHRyLHNpemUpCQkJCVwKKyh7CQkJCQkJCQlcCisJbG9uZyBfX3B1X2VyciA9IDA7CQkJCQlcCisJX19jaGtfdXNlcl9wdHIocHRyKTsJCQkJCVwKKwlzd2l0Y2ggKHNpemUpIHsJCQkJCQlcCisJICBjYXNlIDE6IF9fcHV0X3VzZXJfOCh4LHB0cik7IGJyZWFrOwkJCVwKKwkgIGNhc2UgMjogX19wdXRfdXNlcl8xNih4LHB0cik7IGJyZWFrOwkJCVwKKwkgIGNhc2UgNDogX19wdXRfdXNlcl8zMih4LHB0cik7IGJyZWFrOwkJCVwKKwkgIGNhc2UgODogX19wdXRfdXNlcl82NCh4LHB0cik7IGJyZWFrOwkJCVwKKwkgIGRlZmF1bHQ6IF9fcHV0X3VzZXJfdW5rbm93bigpOyBicmVhazsJCQlcCisJfQkJCQkJCQlcCisJX19wdV9lcnI7CQkJCQkJXAorfSkKKworI2RlZmluZSBfX3B1dF91c2VyX2NoZWNrKHgscHRyLHNpemUsc2VnbWVudCkJCQkJXAorKHsJCQkJCQkJCQlcCisJbG9uZyBfX3B1X2VyciA9IC1FRkFVTFQ7CQkJCQlcCisJX190eXBlb2ZfXygqKHB0cikpIF9fdXNlciAqX19wdV9hZGRyID0gKHB0cik7CQkJXAorCWlmIChfX2FjY2Vzc19vaygodW5zaWduZWQgbG9uZylfX3B1X2FkZHIsc2l6ZSxzZWdtZW50KSkgewlcCisJCV9fcHVfZXJyID0gMDsJCQkJCQlcCisJCXN3aXRjaCAoc2l6ZSkgewkJCQkJCVwKKwkJICBjYXNlIDE6IF9fcHV0X3VzZXJfOCh4LF9fcHVfYWRkcik7IGJyZWFrOwkJXAorCQkgIGNhc2UgMjogX19wdXRfdXNlcl8xNih4LF9fcHVfYWRkcik7IGJyZWFrOwkJXAorCQkgIGNhc2UgNDogX19wdXRfdXNlcl8zMih4LF9fcHVfYWRkcik7IGJyZWFrOwkJXAorCQkgIGNhc2UgODogX19wdXRfdXNlcl82NCh4LF9fcHVfYWRkcik7IGJyZWFrOwkJXAorCQkgIGRlZmF1bHQ6IF9fcHV0X3VzZXJfdW5rbm93bigpOyBicmVhazsJCQlcCisJCX0JCQkJCQkJXAorCX0JCQkJCQkJCVwKKwlfX3B1X2VycjsJCQkJCQkJXAorfSkKKworLyoKKyAqIFRoZSAiX19wdXRfdXNlcl94eCgpIiBtYWNyb3MgdGVsbCBnY2MgdGhleSByZWFkIGZyb20gbWVtb3J5CisgKiBpbnN0ZWFkIG9mIHdyaXRpbmc6IHRoaXMgaXMgYmVjYXVzZSB0aGV5IGRvIG5vdCB3cml0ZSB0bworICogYW55IG1lbW9yeSBnY2Mga25vd3MgYWJvdXQsIHNvIHRoZXJlIGFyZSBubyBhbGlhc2luZyBpc3N1ZXMKKyAqLworI2RlZmluZSBfX3B1dF91c2VyXzY0KHgsYWRkcikJCQkJCVwKK19fYXNtX18gX192b2xhdGlsZV9fKCIxOiBzdHEgJXIyLCUxXG4iCQkJCVwKKwkiMjpcbiIJCQkJCQkJXAorCSIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCQkJCVwKKwkiCS5sb25nIDFiIC0gLlxuIgkJCQkJXAorCSIJbGRhICQzMSwyYi0xYiglMClcbiIJCQkJXAorCSIucHJldmlvdXMiCQkJCQkJXAorCQk6ICI9ciIoX19wdV9lcnIpCQkJCVwKKwkJOiAibSIgKF9fbShhZGRyKSksICJySiIgKHgpLCAiMCIoX19wdV9lcnIpKQorCisjZGVmaW5lIF9fcHV0X3VzZXJfMzIoeCxhZGRyKQkJCQkJXAorX19hc21fXyBfX3ZvbGF0aWxlX18oIjE6IHN0bCAlcjIsJTFcbiIJCQkJXAorCSIyOlxuIgkJCQkJCQlcCisJIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIJCQkJXAorCSIJLmxvbmcgMWIgLSAuXG4iCQkJCQlcCisJIglsZGEgJDMxLDJiLTFiKCUwKVxuIgkJCQlcCisJIi5wcmV2aW91cyIJCQkJCQlcCisJCTogIj1yIihfX3B1X2VycikJCQkJXAorCQk6ICJtIihfX20oYWRkcikpLCAickoiKHgpLCAiMCIoX19wdV9lcnIpKQorCisjaWZkZWYgX19hbHBoYV9id3hfXworLyogVGhvc2UgbHVja3kgYmFzdGFyZHMgd2l0aCBldjU2IGFuZCBsYXRlciBDUFVzIGNhbiBkbyBieXRlL3dvcmQgbW92ZXMuICAqLworCisjZGVmaW5lIF9fcHV0X3VzZXJfMTYoeCxhZGRyKQkJCQkJXAorX19hc21fXyBfX3ZvbGF0aWxlX18oIjE6IHN0dyAlcjIsJTFcbiIJCQkJXAorCSIyOlxuIgkJCQkJCQlcCisJIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIJCQkJXAorCSIJLmxvbmcgMWIgLSAuXG4iCQkJCQlcCisJIglsZGEgJDMxLDJiLTFiKCUwKVxuIgkJCQlcCisJIi5wcmV2aW91cyIJCQkJCQlcCisJCTogIj1yIihfX3B1X2VycikJCQkJXAorCQk6ICJtIihfX20oYWRkcikpLCAickoiKHgpLCAiMCIoX19wdV9lcnIpKQorCisjZGVmaW5lIF9fcHV0X3VzZXJfOCh4LGFkZHIpCQkJCQlcCitfX2FzbV9fIF9fdm9sYXRpbGVfXygiMTogc3RiICVyMiwlMVxuIgkJCQlcCisJIjI6XG4iCQkJCQkJCVwKKwkiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgkJCQlcCisJIgkubG9uZyAxYiAtIC5cbiIJCQkJCVwKKwkiCWxkYSAkMzEsMmItMWIoJTApXG4iCQkJCVwKKwkiLnByZXZpb3VzIgkJCQkJCVwKKwkJOiAiPXIiKF9fcHVfZXJyKQkJCQlcCisJCTogIm0iKF9fbShhZGRyKSksICJySiIoeCksICIwIihfX3B1X2VycikpCisjZWxzZQorLyogVW5mb3J0dW5hdGVseSwgd2UgY2FuJ3QgZ2V0IGFuIHVuYWxpZ25lZCBhY2Nlc3MgdHJhcCBmb3IgdGhlIHN1Yi13b3JkCisgICB3cml0ZSwgc28gd2UgaGF2ZSB0byBkbyBhIGdlbmVyYWwgdW5hbGlnbmVkIG9wZXJhdGlvbi4gICovCisKKyNkZWZpbmUgX19wdXRfdXNlcl8xNih4LGFkZHIpCQkJCQlcCit7CQkJCQkJCQlcCisJbG9uZyBfX3B1X3RtcDEsIF9fcHVfdG1wMiwgX19wdV90bXAzLCBfX3B1X3RtcDQ7CVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCVwKKwkiMToJbGRxX3UgJTIsMSglNSlcbiIJCQkJXAorCSIyOglsZHFfdSAlMSwwKCU1KVxuIgkJCQlcCisJIglpbnN3aCAlNiwlNSwlNFxuIgkJCQlcCisJIglpbnN3bCAlNiwlNSwlM1xuIgkJCQlcCisJIgltc2t3aCAlMiwlNSwlMlxuIgkJCQlcCisJIgltc2t3bCAlMSwlNSwlMVxuIgkJCQlcCisJIglvciAlMiwlNCwlMlxuIgkJCQkJXAorCSIJb3IgJTEsJTMsJTFcbiIJCQkJCVwKKwkiMzoJc3RxX3UgJTIsMSglNSlcbiIJCQkJXAorCSI0OglzdHFfdSAlMSwwKCU1KVxuIgkJCQlcCisJIjU6XG4iCQkJCQkJCVwKKwkiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgkJCQlcCisJIgkubG9uZyAxYiAtIC5cbiIJCQkJCVwKKwkiCWxkYSAkMzEsIDViLTFiKCUwKVxuIgkJCQlcCisJIgkubG9uZyAyYiAtIC5cbiIJCQkJCVwKKwkiCWxkYSAkMzEsIDViLTJiKCUwKVxuIgkJCQlcCisJIgkubG9uZyAzYiAtIC5cbiIJCQkJCVwKKwkiCWxkYSAkMzEsIDViLTNiKCUwKVxuIgkJCQlcCisJIgkubG9uZyA0YiAtIC5cbiIJCQkJCVwKKwkiCWxkYSAkMzEsIDViLTRiKCUwKVxuIgkJCQlcCisJIi5wcmV2aW91cyIJCQkJCQlcCisJCTogIj1yIihfX3B1X2VyciksICI9JnIiKF9fcHVfdG1wMSksCQlcCisJCSAgIj0mciIoX19wdV90bXAyKSwgIj0mciIoX19wdV90bXAzKSwJCVwKKwkJICAiPSZyIihfX3B1X3RtcDQpCQkJCVwKKwkJOiAiciIoYWRkciksICJyIigodW5zaWduZWQgbG9uZykoeCkpLCAiMCIoX19wdV9lcnIpKTsgXAorfQorCisjZGVmaW5lIF9fcHV0X3VzZXJfOCh4LGFkZHIpCQkJCQlcCit7CQkJCQkJCQlcCisJbG9uZyBfX3B1X3RtcDEsIF9fcHVfdG1wMjsJCQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJXAorCSIxOglsZHFfdSAlMSwwKCU0KVxuIgkJCQlcCisJIglpbnNibCAlMywlNCwlMlxuIgkJCQlcCisJIgltc2tibCAlMSwlNCwlMVxuIgkJCQlcCisJIglvciAlMSwlMiwlMVxuIgkJCQkJXAorCSIyOglzdHFfdSAlMSwwKCU0KVxuIgkJCQlcCisJIjM6XG4iCQkJCQkJCVwKKwkiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgkJCQlcCisJIgkubG9uZyAxYiAtIC5cbiIJCQkJCVwKKwkiCWxkYSAkMzEsIDNiLTFiKCUwKVxuIgkJCQlcCisJIgkubG9uZyAyYiAtIC5cbiIJCQkJCVwKKwkiCWxkYSAkMzEsIDNiLTJiKCUwKVxuIgkJCQlcCisJIi5wcmV2aW91cyIJCQkJCQlcCisJCTogIj1yIihfX3B1X2VyciksCQkJCVwKKwkgIAkgICI9JnIiKF9fcHVfdG1wMSksICI9JnIiKF9fcHVfdG1wMikJCVwKKwkJOiAiciIoKHVuc2lnbmVkIGxvbmcpKHgpKSwgInIiKGFkZHIpLCAiMCIoX19wdV9lcnIpKTsgXAorfQorI2VuZGlmCisKKworLyoKKyAqIENvbXBsZXggYWNjZXNzIHJvdXRpbmVzCisgKi8KKworLyogVGhpcyBsaXR0bGUgYml0IG9mIHNpbGxpbmVzcyBpcyB0byBnZXQgdGhlIEdQIGxvYWRlZCBmb3IgYSBmdW5jdGlvbgorICAgdGhhdCBvcmRpbmFyaWx5IHdvdWxkbid0LiAgT3RoZXJ3aXNlIHdlIGNvdWxkIGhhdmUgaXQgZG9uZSBieSB0aGUgbWFjcm8KKyAgIGRpcmVjdGx5LCB3aGljaCBjYW4gYmUgb3B0aW1pemVkIHRoZSBsaW5rZXIuICAqLworI2lmZGVmIE1PRFVMRQorI2RlZmluZSBfX21vZHVsZV9hZGRyZXNzKHN5bSkJCSJyIihzeW0pLAorI2RlZmluZSBfX21vZHVsZV9jYWxsKHJhLCBhcmcsIHN5bSkJImpzciAkIiAjcmEgIiwoJSIgI2FyZyAiKSwiICNzeW0KKyNlbHNlCisjZGVmaW5lIF9fbW9kdWxlX2FkZHJlc3Moc3ltKQorI2RlZmluZSBfX21vZHVsZV9jYWxsKHJhLCBhcmcsIHN5bSkJImJzciAkIiAjcmEgIiwiICNzeW0gIiAhc2FtZWdwIgorI2VuZGlmCisKK2V4dGVybiB2b2lkIF9fY29weV91c2VyKHZvaWQpOworCitleHRlcm4gaW5saW5lIGxvbmcKK19fY29weV90b2Zyb21fdXNlcl9ub2NoZWNrKHZvaWQgKnRvLCBjb25zdCB2b2lkICpmcm9tLCBsb25nIGxlbikKK3sKKwlyZWdpc3RlciB2b2lkICogX19jdV90byBfX2FzbV9fKCIkNiIpID0gdG87CisJcmVnaXN0ZXIgY29uc3Qgdm9pZCAqIF9fY3VfZnJvbSBfX2FzbV9fKCIkNyIpID0gZnJvbTsKKwlyZWdpc3RlciBsb25nIF9fY3VfbGVuIF9fYXNtX18oIiQwIikgPSBsZW47CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJX19tb2R1bGVfY2FsbCgyOCwgMywgX19jb3B5X3VzZXIpCisJCTogIj1yIiAoX19jdV9sZW4pLCAiPXIiIChfX2N1X2Zyb20pLCAiPXIiIChfX2N1X3RvKQorCQk6IF9fbW9kdWxlX2FkZHJlc3MoX19jb3B5X3VzZXIpCisJCSAgIjAiIChfX2N1X2xlbiksICIxIiAoX19jdV9mcm9tKSwgIjIiIChfX2N1X3RvKQorCQk6ICIkMSIsIiQyIiwiJDMiLCIkNCIsIiQ1IiwiJDI4IiwibWVtb3J5Iik7CisKKwlyZXR1cm4gX19jdV9sZW47Cit9CisKK2V4dGVybiBpbmxpbmUgbG9uZworX19jb3B5X3RvZnJvbV91c2VyKHZvaWQgKnRvLCBjb25zdCB2b2lkICpmcm9tLCBsb25nIGxlbiwgY29uc3Qgdm9pZCBfX3VzZXIgKnZhbGlkYXRlKQoreworCWlmIChfX2FjY2Vzc19vaygodW5zaWduZWQgbG9uZyl2YWxpZGF0ZSwgbGVuLCBnZXRfZnMoKSkpCisJCWxlbiA9IF9fY29weV90b2Zyb21fdXNlcl9ub2NoZWNrKHRvLCBmcm9tLCBsZW4pOworCXJldHVybiBsZW47Cit9CisKKyNkZWZpbmUgX19jb3B5X3RvX3VzZXIodG8sZnJvbSxuKQkJCQkJXAorKHsJCQkJCQkJCQlcCisJX19jaGtfdXNlcl9wdHIodG8pOwkJCQkJCVwKKwlfX2NvcHlfdG9mcm9tX3VzZXJfbm9jaGVjaygoX19mb3JjZSB2b2lkICopKHRvKSwoZnJvbSksKG4pKTsJXAorfSkKKyNkZWZpbmUgX19jb3B5X2Zyb21fdXNlcih0byxmcm9tLG4pCQkJCQlcCisoewkJCQkJCQkJCVwKKwlfX2Noa191c2VyX3B0cihmcm9tKTsJCQkJCQlcCisJX19jb3B5X3RvZnJvbV91c2VyX25vY2hlY2soKHRvKSwoX19mb3JjZSB2b2lkICopKGZyb20pLChuKSk7CVwKK30pCisKKyNkZWZpbmUgX19jb3B5X3RvX3VzZXJfaW5hdG9taWMgX19jb3B5X3RvX3VzZXIKKyNkZWZpbmUgX19jb3B5X2Zyb21fdXNlcl9pbmF0b21pYyBfX2NvcHlfZnJvbV91c2VyCisKKworZXh0ZXJuIGlubGluZSBsb25nCitjb3B5X3RvX3VzZXIodm9pZCBfX3VzZXIgKnRvLCBjb25zdCB2b2lkICpmcm9tLCBsb25nIG4pCit7CisJcmV0dXJuIF9fY29weV90b2Zyb21fdXNlcigoX19mb3JjZSB2b2lkICopdG8sIGZyb20sIG4sIHRvKTsKK30KKworZXh0ZXJuIGlubGluZSBsb25nCitjb3B5X2Zyb21fdXNlcih2b2lkICp0bywgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIGxvbmcgbikKK3sKKwlyZXR1cm4gX19jb3B5X3RvZnJvbV91c2VyKHRvLCAoX19mb3JjZSB2b2lkICopZnJvbSwgbiwgZnJvbSk7Cit9CisKK2V4dGVybiB2b2lkIF9fZG9fY2xlYXJfdXNlcih2b2lkKTsKKworZXh0ZXJuIGlubGluZSBsb25nCitfX2NsZWFyX3VzZXIodm9pZCBfX3VzZXIgKnRvLCBsb25nIGxlbikKK3sKKwlyZWdpc3RlciB2b2lkIF9fdXNlciAqIF9fY2xfdG8gX19hc21fXygiJDYiKSA9IHRvOworCXJlZ2lzdGVyIGxvbmcgX19jbF9sZW4gX19hc21fXygiJDAiKSA9IGxlbjsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJX19tb2R1bGVfY2FsbCgyOCwgMiwgX19kb19jbGVhcl91c2VyKQorCQk6ICI9ciIoX19jbF9sZW4pLCAiPXIiKF9fY2xfdG8pCisJCTogX19tb2R1bGVfYWRkcmVzcyhfX2RvX2NsZWFyX3VzZXIpCisJCSAgIjAiKF9fY2xfbGVuKSwgIjEiKF9fY2xfdG8pCisJCTogIiQxIiwiJDIiLCIkMyIsIiQ0IiwiJDUiLCIkMjgiLCJtZW1vcnkiKTsKKwlyZXR1cm4gX19jbF9sZW47Cit9CisKK2V4dGVybiBpbmxpbmUgbG9uZworY2xlYXJfdXNlcih2b2lkIF9fdXNlciAqdG8sIGxvbmcgbGVuKQoreworCWlmIChfX2FjY2Vzc19vaygodW5zaWduZWQgbG9uZyl0bywgbGVuLCBnZXRfZnMoKSkpCisJCWxlbiA9IF9fY2xlYXJfdXNlcih0bywgbGVuKTsKKwlyZXR1cm4gbGVuOworfQorCisjdW5kZWYgX19tb2R1bGVfYWRkcmVzcworI3VuZGVmIF9fbW9kdWxlX2NhbGwKKworLyogUmV0dXJuczogLUVGQVVMVCBpZiBleGNlcHRpb24gYmVmb3JlIHRlcm1pbmF0b3IsIE4gaWYgdGhlIGVudGlyZQorICAgYnVmZmVyIGZpbGxlZCwgZWxzZSBzdHJsZW4uICAqLworCitleHRlcm4gbG9uZyBfX3N0cm5jcHlfZnJvbV91c2VyKGNoYXIgKl9fdG8sIGNvbnN0IGNoYXIgX191c2VyICpfX2Zyb20sIGxvbmcgX190b19sZW4pOworCitleHRlcm4gaW5saW5lIGxvbmcKK3N0cm5jcHlfZnJvbV91c2VyKGNoYXIgKnRvLCBjb25zdCBjaGFyIF9fdXNlciAqZnJvbSwgbG9uZyBuKQoreworCWxvbmcgcmV0ID0gLUVGQVVMVDsKKwlpZiAoX19hY2Nlc3Nfb2soKHVuc2lnbmVkIGxvbmcpZnJvbSwgMCwgZ2V0X2ZzKCkpKQorCQlyZXQgPSBfX3N0cm5jcHlfZnJvbV91c2VyKHRvLCBmcm9tLCBuKTsKKwlyZXR1cm4gcmV0OworfQorCisvKiBSZXR1cm5zOiAwIGlmIGJhZCwgc3RyaW5nIGxlbmd0aCsxIChtZW1vcnkgc2l6ZSkgb2Ygc3RyaW5nIGlmIG9rICovCitleHRlcm4gbG9uZyBfX3N0cmxlbl91c2VyKGNvbnN0IGNoYXIgX191c2VyICopOworCitleHRlcm4gaW5saW5lIGxvbmcgc3RybGVuX3VzZXIoY29uc3QgY2hhciBfX3VzZXIgKnN0cikKK3sKKwlyZXR1cm4gYWNjZXNzX29rKFZFUklGWV9SRUFELHN0ciwwKSA/IF9fc3RybGVuX3VzZXIoc3RyKSA6IDA7Cit9CisKKy8qIFJldHVybnM6IDAgaWYgZXhjZXB0aW9uIGJlZm9yZSBOVUwgb3IgcmVhY2hpbmcgdGhlIHN1cHBsaWVkIGxpbWl0IChOKSwKKyAqIGEgdmFsdWUgZ3JlYXRlciB0aGFuIE4gaWYgdGhlIGxpbWl0IHdvdWxkIGJlIGV4Y2VlZGVkLCBlbHNlIHN0cmxlbi4gICovCitleHRlcm4gbG9uZyBfX3N0cm5sZW5fdXNlcihjb25zdCBjaGFyIF9fdXNlciAqLCBsb25nKTsKKworZXh0ZXJuIGlubGluZSBsb25nIHN0cm5sZW5fdXNlcihjb25zdCBjaGFyIF9fdXNlciAqc3RyLCBsb25nIG4pCit7CisJcmV0dXJuIGFjY2Vzc19vayhWRVJJRllfUkVBRCxzdHIsMCkgPyBfX3N0cm5sZW5fdXNlcihzdHIsIG4pIDogMDsKK30KKworLyoKKyAqIEFib3V0IHRoZSBleGNlcHRpb24gdGFibGU6CisgKgorICogLSBpbnNuIGlzIGEgMzItYml0IHBjLXJlbGF0aXZlIG9mZnNldCBmcm9tIHRoZSBmYXVsdGluZyBpbnNuLgorICogLSBuZXh0aW5zbiBpcyBhIDE2LWJpdCBvZmZzZXQgb2ZmIG9mIHRoZSBmYXVsdGluZyBpbnN0cnVjdGlvbgorICogICAobm90IG9mZiBvZiB0aGUgKm5leHQqIGluc3RydWN0aW9uIGFzIGJyYW5jaGVzIGFyZSkuCisgKiAtIGVycnJlZyBpcyB0aGUgcmVnaXN0ZXIgaW4gd2hpY2ggdG8gcGxhY2UgLUVGQVVMVC4KKyAqIC0gdmFscmVnIGlzIHRoZSBmaW5hbCB0YXJnZXQgcmVnaXN0ZXIgZm9yIHRoZSBsb2FkIHNlcXVlbmNlCisgKiAgIGFuZCB3aWxsIGJlIHplcm9lZC4KKyAqCisgKiBFaXRoZXIgZXJycmVnIG9yIHZhbHJlZyBtYXkgYmUgJDMxLCBpbiB3aGljaCBjYXNlIG5vdGhpbmcgaGFwcGVucy4KKyAqCisgKiBUaGUgZXhjZXB0aW9uIGZpeHVwIGluZm9ybWF0aW9uICJqdXN0IHNvIGhhcHBlbnMiIHRvIGJlIGFycmFuZ2VkCisgKiBhcyBpbiBhIE1FTSBmb3JtYXQgaW5zdHJ1Y3Rpb24uICBUaGlzIGxldHMgdXMgZW1pdCBvdXIgdGhyZWUKKyAqIHZhbHVlcyBsaWtlIHNvOgorICoKKyAqICAgICAgbGRhIHZhbHJlZywgbmV4dGluc24oZXJycmVnKQorICoKKyAqLworCitzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5Cit7CisJc2lnbmVkIGludCBpbnNuOworCXVuaW9uIGV4Y2VwdGlvbl9maXh1cCB7CisJCXVuc2lnbmVkIHVuaXQ7CisJCXN0cnVjdCB7CisJCQlzaWduZWQgaW50IG5leHRpbnNuIDogMTY7CisJCQl1bnNpZ25lZCBpbnQgZXJycmVnIDogNTsKKwkJCXVuc2lnbmVkIGludCB2YWxyZWcgOiA1OworCQl9IGJpdHM7CisJfSBmaXh1cDsKK307CisKKy8qIFJldHVybnMgdGhlIG5ldyBwYyAqLworI2RlZmluZSBmaXh1cF9leGNlcHRpb24obWFwX3JlZywgZml4dXAsIHBjKQkJCVwKKyh7CQkJCQkJCQlcCisJaWYgKChmaXh1cCktPmZpeHVwLmJpdHMudmFscmVnICE9IDMxKQkJCVwKKwkJbWFwX3JlZygoZml4dXApLT5maXh1cC5iaXRzLnZhbHJlZykgPSAwOwlcCisJaWYgKChmaXh1cCktPmZpeHVwLmJpdHMuZXJycmVnICE9IDMxKQkJCVwKKwkJbWFwX3JlZygoZml4dXApLT5maXh1cC5iaXRzLmVycnJlZykgPSAtRUZBVUxUOwlcCisJKHBjKSArIChmaXh1cCktPmZpeHVwLmJpdHMubmV4dGluc247CQkJXAorfSkKKworCisjZW5kaWYgLyogX19BTFBIQV9VQUNDRVNTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL3Vjb250ZXh0LmggYi9pbmNsdWRlL2FzbS1hbHBoYS91Y29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3NTc4YWIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS91Y29udGV4dC5oCkBAIC0wLDAgKzEsMTMgQEAKKyNpZm5kZWYgX0FTTUFYUF9VQ09OVEVYVF9ICisjZGVmaW5lIF9BU01BWFBfVUNPTlRFWFRfSAorCitzdHJ1Y3QgdWNvbnRleHQgeworCXVuc2lnbmVkIGxvbmcJICB1Y19mbGFnczsKKwlzdHJ1Y3QgdWNvbnRleHQgICp1Y19saW5rOworCW9sZF9zaWdzZXRfdAkgIHVjX29zZl9zaWdtYXNrOworCXN0YWNrX3QJCSAgdWNfc3RhY2s7CisJc3RydWN0IHNpZ2NvbnRleHQgdWNfbWNvbnRleHQ7CisJc2lnc2V0X3QJICB1Y19zaWdtYXNrOwkvKiBtYXNrIGxhc3QgZm9yIGV4dGVuc2liaWxpdHkgKi8KK307CisKKyNlbmRpZiAvKiAhX0FTTUFYUF9VQ09OVEVYVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS91bmFsaWduZWQuaCBiL2luY2x1ZGUvYXNtLWFscGhhL3VuYWxpZ25lZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExZDcyODQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS91bmFsaWduZWQuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19BTFBIQV9VTkFMSUdORURfSAorI2RlZmluZSBfX0FMUEhBX1VOQUxJR05FRF9ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy91bmFsaWduZWQuaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLWFscGhhL3VuaXN0ZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0ZTcwZTgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS91bmlzdGQuaApAQCAtMCwwICsxLDY1NiBAQAorI2lmbmRlZiBfQUxQSEFfVU5JU1REX0gKKyNkZWZpbmUgX0FMUEhBX1VOSVNURF9ICisKKyNkZWZpbmUgX19OUl9vc2Zfc3lzY2FsbAkgIDAJLyogbm90IGltcGxlbWVudGVkICovCisjZGVmaW5lIF9fTlJfZXhpdAkJICAxCisjZGVmaW5lIF9fTlJfZm9yawkJICAyCisjZGVmaW5lIF9fTlJfcmVhZAkJICAzCisjZGVmaW5lIF9fTlJfd3JpdGUJCSAgNAorI2RlZmluZSBfX05SX29zZl9vbGRfb3BlbgkgIDUJLyogbm90IGltcGxlbWVudGVkICovCisjZGVmaW5lIF9fTlJfY2xvc2UJCSAgNgorI2RlZmluZSBfX05SX29zZl93YWl0NAkJICA3CisjZGVmaW5lIF9fTlJfb3NmX29sZF9jcmVhdAkgIDgJLyogbm90IGltcGxlbWVudGVkICovCisjZGVmaW5lIF9fTlJfbGluawkJICA5CisjZGVmaW5lIF9fTlJfdW5saW5rCQkgMTAKKyNkZWZpbmUgX19OUl9vc2ZfZXhlY3ZlCQkgMTEJLyogbm90IGltcGxlbWVudGVkICovCisjZGVmaW5lIF9fTlJfY2hkaXIJCSAxMgorI2RlZmluZSBfX05SX2ZjaGRpcgkJIDEzCisjZGVmaW5lIF9fTlJfbWtub2QJCSAxNAorI2RlZmluZSBfX05SX2NobW9kCQkgMTUKKyNkZWZpbmUgX19OUl9jaG93bgkJIDE2CisjZGVmaW5lIF9fTlJfYnJrCQkgMTcKKyNkZWZpbmUgX19OUl9vc2ZfZ2V0ZnNzdGF0CSAxOAkvKiBub3QgaW1wbGVtZW50ZWQgKi8KKyNkZWZpbmUgX19OUl9sc2VlawkJIDE5CisjZGVmaW5lIF9fTlJfZ2V0eHBpZAkJIDIwCisjZGVmaW5lIF9fTlJfb3NmX21vdW50CQkgMjEKKyNkZWZpbmUgX19OUl91bW91bnQJCSAyMgorI2RlZmluZSBfX05SX3NldHVpZAkJIDIzCisjZGVmaW5lIF9fTlJfZ2V0eHVpZAkJIDI0CisjZGVmaW5lIF9fTlJfZXhlY193aXRoX2xvYWRlcgkgMjUJLyogbm90IGltcGxlbWVudGVkICovCisjZGVmaW5lIF9fTlJfcHRyYWNlCQkgMjYKKyNkZWZpbmUgX19OUl9vc2ZfbnJlY3Ztc2cJIDI3CS8qIG5vdCBpbXBsZW1lbnRlZCAqLworI2RlZmluZSBfX05SX29zZl9uc2VuZG1zZwkgMjgJLyogbm90IGltcGxlbWVudGVkICovCisjZGVmaW5lIF9fTlJfb3NmX25yZWN2ZnJvbQkgMjkJLyogbm90IGltcGxlbWVudGVkICovCisjZGVmaW5lIF9fTlJfb3NmX25hY2NlcHQJIDMwCS8qIG5vdCBpbXBsZW1lbnRlZCAqLworI2RlZmluZSBfX05SX29zZl9uZ2V0cGVlcm5hbWUJIDMxCS8qIG5vdCBpbXBsZW1lbnRlZCAqLworI2RlZmluZSBfX05SX29zZl9uZ2V0c29ja25hbWUJIDMyCS8qIG5vdCBpbXBsZW1lbnRlZCAqLworI2RlZmluZSBfX05SX2FjY2VzcwkJIDMzCisjZGVmaW5lIF9fTlJfb3NmX2NoZmxhZ3MJIDM0CS8qIG5vdCBpbXBsZW1lbnRlZCAqLworI2RlZmluZSBfX05SX29zZl9mY2hmbGFncwkgMzUJLyogbm90IGltcGxlbWVudGVkICovCisjZGVmaW5lIF9fTlJfc3luYwkJIDM2CisjZGVmaW5lIF9fTlJfa2lsbAkJIDM3CisjZGVmaW5lIF9fTlJfb3NmX29sZF9zdGF0CSAzOAkvKiBub3QgaW1wbGVtZW50ZWQgKi8KKyNkZWZpbmUgX19OUl9zZXRwZ2lkCQkgMzkKKyNkZWZpbmUgX19OUl9vc2Zfb2xkX2xzdGF0CSA0MAkvKiBub3QgaW1wbGVtZW50ZWQgKi8KKyNkZWZpbmUgX19OUl9kdXAJCSA0MQorI2RlZmluZSBfX05SX3BpcGUJCSA0MgorI2RlZmluZSBfX05SX29zZl9zZXRfcHJvZ3JhbV9hdHRyaWJ1dGVzCTQzCisjZGVmaW5lIF9fTlJfb3NmX3Byb2ZpbAkJIDQ0CS8qIG5vdCBpbXBsZW1lbnRlZCAqLworI2RlZmluZSBfX05SX29wZW4JCSA0NQorI2RlZmluZSBfX05SX29zZl9vbGRfc2lnYWN0aW9uCSA0NgkvKiBub3QgaW1wbGVtZW50ZWQgKi8KKyNkZWZpbmUgX19OUl9nZXR4Z2lkCQkgNDcKKyNkZWZpbmUgX19OUl9vc2Zfc2lncHJvY21hc2sJIDQ4CisjZGVmaW5lIF9fTlJfb3NmX2dldGxvZ2luCSA0OQkvKiBub3QgaW1wbGVtZW50ZWQgKi8KKyNkZWZpbmUgX19OUl9vc2Zfc2V0bG9naW4JIDUwCS8qIG5vdCBpbXBsZW1lbnRlZCAqLworI2RlZmluZSBfX05SX2FjY3QJCSA1MQorI2RlZmluZSBfX05SX3NpZ3BlbmRpbmcJCSA1MgorCisjZGVmaW5lIF9fTlJfaW9jdGwJCSA1NAorI2RlZmluZSBfX05SX29zZl9yZWJvb3QJCSA1NQkvKiBub3QgaW1wbGVtZW50ZWQgKi8KKyNkZWZpbmUgX19OUl9vc2ZfcmV2b2tlCQkgNTYJLyogbm90IGltcGxlbWVudGVkICovCisjZGVmaW5lIF9fTlJfc3ltbGluawkJIDU3CisjZGVmaW5lIF9fTlJfcmVhZGxpbmsJCSA1OAorI2RlZmluZSBfX05SX2V4ZWN2ZQkJIDU5CisjZGVmaW5lIF9fTlJfdW1hc2sJCSA2MAorI2RlZmluZSBfX05SX2Nocm9vdAkJIDYxCisjZGVmaW5lIF9fTlJfb3NmX29sZF9mc3RhdAkgNjIJLyogbm90IGltcGxlbWVudGVkICovCisjZGVmaW5lIF9fTlJfZ2V0cGdycAkJIDYzCisjZGVmaW5lIF9fTlJfZ2V0cGFnZXNpemUJIDY0CisjZGVmaW5lIF9fTlJfb3NmX21yZW1hcAkJIDY1CS8qIG5vdCBpbXBsZW1lbnRlZCAqLworI2RlZmluZSBfX05SX3Zmb3JrCQkgNjYKKyNkZWZpbmUgX19OUl9zdGF0CQkgNjcKKyNkZWZpbmUgX19OUl9sc3RhdAkJIDY4CisjZGVmaW5lIF9fTlJfb3NmX3NicmsJCSA2OQkvKiBub3QgaW1wbGVtZW50ZWQgKi8KKyNkZWZpbmUgX19OUl9vc2Zfc3N0awkJIDcwCS8qIG5vdCBpbXBsZW1lbnRlZCAqLworI2RlZmluZSBfX05SX21tYXAJCSA3MQkvKiBPU0YvMSBtbWFwIGlzIHN1cGVyc2V0IG9mIExpbnV4ICovCisjZGVmaW5lIF9fTlJfb3NmX29sZF92YWR2aXNlCSA3MgkvKiBub3QgaW1wbGVtZW50ZWQgKi8KKyNkZWZpbmUgX19OUl9tdW5tYXAJCSA3MworI2RlZmluZSBfX05SX21wcm90ZWN0CQkgNzQKKyNkZWZpbmUgX19OUl9tYWR2aXNlCQkgNzUKKyNkZWZpbmUgX19OUl92aGFuZ3VwCQkgNzYKKyNkZWZpbmUgX19OUl9vc2Zfa21vZGNhbGwJIDc3CS8qIG5vdCBpbXBsZW1lbnRlZCAqLworI2RlZmluZSBfX05SX29zZl9taW5jb3JlCSA3OAkvKiBub3QgaW1wbGVtZW50ZWQgKi8KKyNkZWZpbmUgX19OUl9nZXRncm91cHMJCSA3OQorI2RlZmluZSBfX05SX3NldGdyb3VwcwkJIDgwCisjZGVmaW5lIF9fTlJfb3NmX29sZF9nZXRwZ3JwCSA4MQkvKiBub3QgaW1wbGVtZW50ZWQgKi8KKyNkZWZpbmUgX19OUl9zZXRwZ3JwCQkgODIJLyogQlNEIGFsaWFzIGZvciBzZXRwZ2lkICovCisjZGVmaW5lIF9fTlJfb3NmX3NldGl0aW1lcgkgODMKKyNkZWZpbmUgX19OUl9vc2Zfb2xkX3dhaXQJIDg0CS8qIG5vdCBpbXBsZW1lbnRlZCAqLworI2RlZmluZSBfX05SX29zZl90YWJsZQkJIDg1CS8qIG5vdCBpbXBsZW1lbnRlZCAqLworI2RlZmluZSBfX05SX29zZl9nZXRpdGltZXIJIDg2CisjZGVmaW5lIF9fTlJfZ2V0aG9zdG5hbWUJIDg3CisjZGVmaW5lIF9fTlJfc2V0aG9zdG5hbWUJIDg4CisjZGVmaW5lIF9fTlJfZ2V0ZHRhYmxlc2l6ZQkgODkKKyNkZWZpbmUgX19OUl9kdXAyCQkgOTAKKyNkZWZpbmUgX19OUl9mc3RhdAkJIDkxCisjZGVmaW5lIF9fTlJfZmNudGwJCSA5MgorI2RlZmluZSBfX05SX29zZl9zZWxlY3QJCSA5MworI2RlZmluZSBfX05SX3BvbGwJCSA5NAorI2RlZmluZSBfX05SX2ZzeW5jCQkgOTUKKyNkZWZpbmUgX19OUl9zZXRwcmlvcml0eQkgOTYKKyNkZWZpbmUgX19OUl9zb2NrZXQJCSA5NworI2RlZmluZSBfX05SX2Nvbm5lY3QJCSA5OAorI2RlZmluZSBfX05SX2FjY2VwdAkJIDk5CisjZGVmaW5lIF9fTlJfZ2V0cHJpb3JpdHkJMTAwCisjZGVmaW5lIF9fTlJfc2VuZAkJMTAxCisjZGVmaW5lIF9fTlJfcmVjdgkJMTAyCisjZGVmaW5lIF9fTlJfc2lncmV0dXJuCQkxMDMKKyNkZWZpbmUgX19OUl9iaW5kCQkxMDQKKyNkZWZpbmUgX19OUl9zZXRzb2Nrb3B0CQkxMDUKKyNkZWZpbmUgX19OUl9saXN0ZW4JCTEwNgorI2RlZmluZSBfX05SX29zZl9wbG9jawkJMTA3CS8qIG5vdCBpbXBsZW1lbnRlZCAqLworI2RlZmluZSBfX05SX29zZl9vbGRfc2lndmVjCTEwOAkvKiBub3QgaW1wbGVtZW50ZWQgKi8KKyNkZWZpbmUgX19OUl9vc2Zfb2xkX3NpZ2Jsb2NrCTEwOQkvKiBub3QgaW1wbGVtZW50ZWQgKi8KKyNkZWZpbmUgX19OUl9vc2Zfb2xkX3NpZ3NldG1hc2sJMTEwCS8qIG5vdCBpbXBsZW1lbnRlZCAqLworI2RlZmluZSBfX05SX3NpZ3N1c3BlbmQJCTExMQorI2RlZmluZSBfX05SX29zZl9zaWdzdGFjawkxMTIKKyNkZWZpbmUgX19OUl9yZWN2bXNnCQkxMTMKKyNkZWZpbmUgX19OUl9zZW5kbXNnCQkxMTQKKyNkZWZpbmUgX19OUl9vc2Zfb2xkX3Z0cmFjZQkxMTUJLyogbm90IGltcGxlbWVudGVkICovCisjZGVmaW5lIF9fTlJfb3NmX2dldHRpbWVvZmRheQkxMTYKKyNkZWZpbmUgX19OUl9vc2ZfZ2V0cnVzYWdlCTExNworI2RlZmluZSBfX05SX2dldHNvY2tvcHQJCTExOAorCisjZGVmaW5lIF9fTlJfcmVhZHYJCTEyMAorI2RlZmluZSBfX05SX3dyaXRldgkJMTIxCisjZGVmaW5lIF9fTlJfb3NmX3NldHRpbWVvZmRheQkxMjIKKyNkZWZpbmUgX19OUl9mY2hvd24JCTEyMworI2RlZmluZSBfX05SX2ZjaG1vZAkJMTI0CisjZGVmaW5lIF9fTlJfcmVjdmZyb20JCTEyNQorI2RlZmluZSBfX05SX3NldHJldWlkCQkxMjYKKyNkZWZpbmUgX19OUl9zZXRyZWdpZAkJMTI3CisjZGVmaW5lIF9fTlJfcmVuYW1lCQkxMjgKKyNkZWZpbmUgX19OUl90cnVuY2F0ZQkJMTI5CisjZGVmaW5lIF9fTlJfZnRydW5jYXRlCQkxMzAKKyNkZWZpbmUgX19OUl9mbG9jawkJMTMxCisjZGVmaW5lIF9fTlJfc2V0Z2lkCQkxMzIKKyNkZWZpbmUgX19OUl9zZW5kdG8JCTEzMworI2RlZmluZSBfX05SX3NodXRkb3duCQkxMzQKKyNkZWZpbmUgX19OUl9zb2NrZXRwYWlyCQkxMzUKKyNkZWZpbmUgX19OUl9ta2RpcgkJMTM2CisjZGVmaW5lIF9fTlJfcm1kaXIJCTEzNworI2RlZmluZSBfX05SX29zZl91dGltZXMJCTEzOAorI2RlZmluZSBfX05SX29zZl9vbGRfc2lncmV0dXJuCTEzOQkvKiBub3QgaW1wbGVtZW50ZWQgKi8KKyNkZWZpbmUgX19OUl9vc2ZfYWRqdGltZQkxNDAJLyogbm90IGltcGxlbWVudGVkICovCisjZGVmaW5lIF9fTlJfZ2V0cGVlcm5hbWUJMTQxCisjZGVmaW5lIF9fTlJfb3NmX2dldGhvc3RpZAkxNDIJLyogbm90IGltcGxlbWVudGVkICovCisjZGVmaW5lIF9fTlJfb3NmX3NldGhvc3RpZAkxNDMJLyogbm90IGltcGxlbWVudGVkICovCisjZGVmaW5lIF9fTlJfZ2V0cmxpbWl0CQkxNDQKKyNkZWZpbmUgX19OUl9zZXRybGltaXQJCTE0NQorI2RlZmluZSBfX05SX29zZl9vbGRfa2lsbHBnCTE0NgkvKiBub3QgaW1wbGVtZW50ZWQgKi8KKyNkZWZpbmUgX19OUl9zZXRzaWQJCTE0NworI2RlZmluZSBfX05SX3F1b3RhY3RsCQkxNDgKKyNkZWZpbmUgX19OUl9vc2Zfb2xkcXVvdGEJMTQ5CS8qIG5vdCBpbXBsZW1lbnRlZCAqLworI2RlZmluZSBfX05SX2dldHNvY2tuYW1lCTE1MAorCisjZGVmaW5lIF9fTlJfb3NmX3BpZF9ibG9jawkxNTMJLyogbm90IGltcGxlbWVudGVkICovCisjZGVmaW5lIF9fTlJfb3NmX3BpZF91bmJsb2NrCTE1NAkvKiBub3QgaW1wbGVtZW50ZWQgKi8KKworI2RlZmluZSBfX05SX3NpZ2FjdGlvbgkJMTU2CisjZGVmaW5lIF9fTlJfb3NmX3NpZ3dhaXRwcmltCTE1NwkvKiBub3QgaW1wbGVtZW50ZWQgKi8KKyNkZWZpbmUgX19OUl9vc2ZfbmZzc3ZjCQkxNTgJLyogbm90IGltcGxlbWVudGVkICovCisjZGVmaW5lIF9fTlJfb3NmX2dldGRpcmVudHJpZXMJMTU5CisjZGVmaW5lIF9fTlJfb3NmX3N0YXRmcwkJMTYwCisjZGVmaW5lIF9fTlJfb3NmX2ZzdGF0ZnMJMTYxCisKKyNkZWZpbmUgX19OUl9vc2ZfYXN5bmNoX2RhZW1vbgkxNjMJLyogbm90IGltcGxlbWVudGVkICovCisjZGVmaW5lIF9fTlJfb3NmX2dldGZoCQkxNjQJLyogbm90IGltcGxlbWVudGVkICovCQorI2RlZmluZSBfX05SX29zZl9nZXRkb21haW5uYW1lCTE2NQorI2RlZmluZSBfX05SX3NldGRvbWFpbm5hbWUJMTY2CisKKyNkZWZpbmUgX19OUl9vc2ZfZXhwb3J0ZnMJMTY5CS8qIG5vdCBpbXBsZW1lbnRlZCAqLworCisjZGVmaW5lIF9fTlJfb3NmX2FsdF9wbG9jawkxODEJLyogbm90IGltcGxlbWVudGVkICovCisKKyNkZWZpbmUgX19OUl9vc2ZfZ2V0bW50CQkxODQJLyogbm90IGltcGxlbWVudGVkICovCisKKyNkZWZpbmUgX19OUl9vc2ZfYWx0X3NpZ3BlbmRpbmcJMTg3CS8qIG5vdCBpbXBsZW1lbnRlZCAqLworI2RlZmluZSBfX05SX29zZl9hbHRfc2V0c2lkCTE4OAkvKiBub3QgaW1wbGVtZW50ZWQgKi8KKworI2RlZmluZSBfX05SX29zZl9zd2Fwb24JCTE5OQorI2RlZmluZSBfX05SX21zZ2N0bAkJMjAwCisjZGVmaW5lIF9fTlJfbXNnZ2V0CQkyMDEKKyNkZWZpbmUgX19OUl9tc2dyY3YJCTIwMgorI2RlZmluZSBfX05SX21zZ3NuZAkJMjAzCisjZGVmaW5lIF9fTlJfc2VtY3RsCQkyMDQKKyNkZWZpbmUgX19OUl9zZW1nZXQJCTIwNQorI2RlZmluZSBfX05SX3NlbW9wCQkyMDYKKyNkZWZpbmUgX19OUl9vc2ZfdXRzbmFtZQkyMDcKKyNkZWZpbmUgX19OUl9sY2hvd24JCTIwOAorI2RlZmluZSBfX05SX29zZl9zaG1hdAkJMjA5CisjZGVmaW5lIF9fTlJfc2htY3RsCQkyMTAKKyNkZWZpbmUgX19OUl9zaG1kdAkJMjExCisjZGVmaW5lIF9fTlJfc2htZ2V0CQkyMTIKKyNkZWZpbmUgX19OUl9vc2ZfbXZhbGlkCQkyMTMJLyogbm90IGltcGxlbWVudGVkICovCisjZGVmaW5lIF9fTlJfb3NmX2dldGFkZHJlc3Njb25mCTIxNAkvKiBub3QgaW1wbGVtZW50ZWQgKi8KKyNkZWZpbmUgX19OUl9vc2ZfbXNsZWVwCQkyMTUJLyogbm90IGltcGxlbWVudGVkICovCisjZGVmaW5lIF9fTlJfb3NmX213YWtldXAJMjE2CS8qIG5vdCBpbXBsZW1lbnRlZCAqLworI2RlZmluZSBfX05SX21zeW5jCQkyMTcKKyNkZWZpbmUgX19OUl9vc2Zfc2lnbmFsCQkyMTgJLyogbm90IGltcGxlbWVudGVkICovCisjZGVmaW5lIF9fTlJfb3NmX3V0Y19nZXR0aW1lCTIxOQkvKiBub3QgaW1wbGVtZW50ZWQgKi8KKyNkZWZpbmUgX19OUl9vc2ZfdXRjX2FkanRpbWUJMjIwCS8qIG5vdCBpbXBsZW1lbnRlZCAqLworCisjZGVmaW5lIF9fTlJfb3NmX3NlY3VyaXR5CTIyMgkvKiBub3QgaW1wbGVtZW50ZWQgKi8KKyNkZWZpbmUgX19OUl9vc2Zfa2xvYWRjYWxsCTIyMwkvKiBub3QgaW1wbGVtZW50ZWQgKi8KKworI2RlZmluZSBfX05SX2dldHBnaWQJCTIzMworI2RlZmluZSBfX05SX2dldHNpZAkJMjM0CisjZGVmaW5lIF9fTlJfc2lnYWx0c3RhY2sJMjM1CisjZGVmaW5lIF9fTlJfb3NmX3dhaXRpZAkJMjM2CS8qIG5vdCBpbXBsZW1lbnRlZCAqLworI2RlZmluZSBfX05SX29zZl9wcmlvY250bHNldAkyMzcJLyogbm90IGltcGxlbWVudGVkICovCisjZGVmaW5lIF9fTlJfb3NmX3NpZ3NlbmRzZXQJMjM4CS8qIG5vdCBpbXBsZW1lbnRlZCAqLworI2RlZmluZSBfX05SX29zZl9zZXRfc3BlY3VsYXRpdmUJMjM5CS8qIG5vdCBpbXBsZW1lbnRlZCAqLworI2RlZmluZSBfX05SX29zZl9tc2ZzX3N5c2NhbGwJMjQwCS8qIG5vdCBpbXBsZW1lbnRlZCAqLworI2RlZmluZSBfX05SX29zZl9zeXNpbmZvCTI0MQorI2RlZmluZSBfX05SX29zZl91YWRtaW4JCTI0MgkvKiBub3QgaW1wbGVtZW50ZWQgKi8KKyNkZWZpbmUgX19OUl9vc2ZfZnVzZXIJCTI0MwkvKiBub3QgaW1wbGVtZW50ZWQgKi8KKyNkZWZpbmUgX19OUl9vc2ZfcHJvcGxpc3Rfc3lzY2FsbCAgICAyNDQKKyNkZWZpbmUgX19OUl9vc2ZfbnRwX2FkanRpbWUJMjQ1CS8qIG5vdCBpbXBsZW1lbnRlZCAqLworI2RlZmluZSBfX05SX29zZl9udHBfZ2V0dGltZQkyNDYJLyogbm90IGltcGxlbWVudGVkICovCisjZGVmaW5lIF9fTlJfb3NmX3BhdGhjb25mCTI0NwkvKiBub3QgaW1wbGVtZW50ZWQgKi8KKyNkZWZpbmUgX19OUl9vc2ZfZnBhdGhjb25mCTI0OAkvKiBub3QgaW1wbGVtZW50ZWQgKi8KKworI2RlZmluZSBfX05SX29zZl91c3dpdGNoCTI1MAkvKiBub3QgaW1wbGVtZW50ZWQgKi8KKyNkZWZpbmUgX19OUl9vc2ZfdXNsZWVwX3RocmVhZAkyNTEKKyNkZWZpbmUgX19OUl9vc2ZfYXVkY250bAkyNTIJLyogbm90IGltcGxlbWVudGVkICovCisjZGVmaW5lIF9fTlJfb3NmX2F1ZGdlbgkJMjUzCS8qIG5vdCBpbXBsZW1lbnRlZCAqLworI2RlZmluZSBfX05SX3N5c2ZzCQkyNTQKKyNkZWZpbmUgX19OUl9vc2Zfc3Vic3lzX2luZm8JMjU1CS8qIG5vdCBpbXBsZW1lbnRlZCAqLworI2RlZmluZSBfX05SX29zZl9nZXRzeXNpbmZvCTI1NgorI2RlZmluZSBfX05SX29zZl9zZXRzeXNpbmZvCTI1NworI2RlZmluZSBfX05SX29zZl9hZnNfc3lzY2FsbAkyNTgJLyogbm90IGltcGxlbWVudGVkICovCisjZGVmaW5lIF9fTlJfb3NmX3N3YXBjdGwJMjU5CS8qIG5vdCBpbXBsZW1lbnRlZCAqLworI2RlZmluZSBfX05SX29zZl9tZW1jbnRsCTI2MAkvKiBub3QgaW1wbGVtZW50ZWQgKi8KKyNkZWZpbmUgX19OUl9vc2ZfZmRhdGFzeW5jCTI2MQkvKiBub3QgaW1wbGVtZW50ZWQgKi8KKworCisvKgorICogTGludXgtc3BlY2lmaWMgc3lzdGVtIGNhbGxzIGJlZ2luIGF0IDMwMAorICovCisjZGVmaW5lIF9fTlJfYmRmbHVzaAkJMzAwCisjZGVmaW5lIF9fTlJfc2V0aGFlCQkzMDEKKyNkZWZpbmUgX19OUl9tb3VudAkJMzAyCisjZGVmaW5lIF9fTlJfb2xkX2FkanRpbWV4CTMwMworI2RlZmluZSBfX05SX3N3YXBvZmYJCTMwNAorI2RlZmluZSBfX05SX2dldGRlbnRzCQkzMDUKKyNkZWZpbmUgX19OUl9jcmVhdGVfbW9kdWxlCTMwNgorI2RlZmluZSBfX05SX2luaXRfbW9kdWxlCTMwNworI2RlZmluZSBfX05SX2RlbGV0ZV9tb2R1bGUJMzA4CisjZGVmaW5lIF9fTlJfZ2V0X2tlcm5lbF9zeW1zCTMwOQorI2RlZmluZSBfX05SX3N5c2xvZwkJMzEwCisjZGVmaW5lIF9fTlJfcmVib290CQkzMTEKKyNkZWZpbmUgX19OUl9jbG9uZQkJMzEyCisjZGVmaW5lIF9fTlJfdXNlbGliCQkzMTMKKyNkZWZpbmUgX19OUl9tbG9jawkJMzE0CisjZGVmaW5lIF9fTlJfbXVubG9jawkJMzE1CisjZGVmaW5lIF9fTlJfbWxvY2thbGwJCTMxNgorI2RlZmluZSBfX05SX211bmxvY2thbGwJCTMxNworI2RlZmluZSBfX05SX3N5c2luZm8JCTMxOAorI2RlZmluZSBfX05SX19zeXNjdGwJCTMxOQorLyogMzIwIHdhcyBzeXNfaWRsZS4gICovCisjZGVmaW5lIF9fTlJfb2xkdW1vdW50CQkzMjEKKyNkZWZpbmUgX19OUl9zd2Fwb24JCTMyMgorI2RlZmluZSBfX05SX3RpbWVzCQkzMjMKKyNkZWZpbmUgX19OUl9wZXJzb25hbGl0eQkzMjQKKyNkZWZpbmUgX19OUl9zZXRmc3VpZAkJMzI1CisjZGVmaW5lIF9fTlJfc2V0ZnNnaWQJCTMyNgorI2RlZmluZSBfX05SX3VzdGF0CQkzMjcKKyNkZWZpbmUgX19OUl9zdGF0ZnMJCTMyOAorI2RlZmluZSBfX05SX2ZzdGF0ZnMJCTMyOQorI2RlZmluZSBfX05SX3NjaGVkX3NldHBhcmFtCQkzMzAKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRwYXJhbQkJMzMxCisjZGVmaW5lIF9fTlJfc2NoZWRfc2V0c2NoZWR1bGVyCQkzMzIKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRzY2hlZHVsZXIJCTMzMworI2RlZmluZSBfX05SX3NjaGVkX3lpZWxkCQkzMzQKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4CTMzNQorI2RlZmluZSBfX05SX3NjaGVkX2dldF9wcmlvcml0eV9taW4JMzM2CisjZGVmaW5lIF9fTlJfc2NoZWRfcnJfZ2V0X2ludGVydmFsCTMzNworI2RlZmluZSBfX05SX2Fmc19zeXNjYWxsCQkzMzgKKyNkZWZpbmUgX19OUl91bmFtZQkJCTMzOQorI2RlZmluZSBfX05SX25hbm9zbGVlcAkJCTM0MAorI2RlZmluZSBfX05SX21yZW1hcAkJCTM0MQorI2RlZmluZSBfX05SX25mc3NlcnZjdGwJCQkzNDIKKyNkZWZpbmUgX19OUl9zZXRyZXN1aWQJCQkzNDMKKyNkZWZpbmUgX19OUl9nZXRyZXN1aWQJCQkzNDQKKyNkZWZpbmUgX19OUl9wY2ljb25maWdfcmVhZAkJMzQ1CisjZGVmaW5lIF9fTlJfcGNpY29uZmlnX3dyaXRlCQkzNDYKKyNkZWZpbmUgX19OUl9xdWVyeV9tb2R1bGUJCTM0NworI2RlZmluZSBfX05SX3ByY3RsCQkJMzQ4CisjZGVmaW5lIF9fTlJfcHJlYWQ2NAkJCTM0OQorI2RlZmluZSBfX05SX3B3cml0ZTY0CQkJMzUwCisjZGVmaW5lIF9fTlJfcnRfc2lncmV0dXJuCQkzNTEKKyNkZWZpbmUgX19OUl9ydF9zaWdhY3Rpb24JCTM1MgorI2RlZmluZSBfX05SX3J0X3NpZ3Byb2NtYXNrCQkzNTMKKyNkZWZpbmUgX19OUl9ydF9zaWdwZW5kaW5nCQkzNTQKKyNkZWZpbmUgX19OUl9ydF9zaWd0aW1lZHdhaXQJCTM1NQorI2RlZmluZSBfX05SX3J0X3NpZ3F1ZXVlaW5mbwkJMzU2CisjZGVmaW5lIF9fTlJfcnRfc2lnc3VzcGVuZAkJMzU3CisjZGVmaW5lIF9fTlJfc2VsZWN0CQkJMzU4CisjZGVmaW5lIF9fTlJfZ2V0dGltZW9mZGF5CQkzNTkKKyNkZWZpbmUgX19OUl9zZXR0aW1lb2ZkYXkJCTM2MAorI2RlZmluZSBfX05SX2dldGl0aW1lcgkJCTM2MQorI2RlZmluZSBfX05SX3NldGl0aW1lcgkJCTM2MgorI2RlZmluZSBfX05SX3V0aW1lcwkJCTM2MworI2RlZmluZSBfX05SX2dldHJ1c2FnZQkJCTM2NAorI2RlZmluZSBfX05SX3dhaXQ0CQkJMzY1CisjZGVmaW5lIF9fTlJfYWRqdGltZXgJCQkzNjYKKyNkZWZpbmUgX19OUl9nZXRjd2QJCQkzNjcKKyNkZWZpbmUgX19OUl9jYXBnZXQJCQkzNjgKKyNkZWZpbmUgX19OUl9jYXBzZXQJCQkzNjkKKyNkZWZpbmUgX19OUl9zZW5kZmlsZQkJCTM3MAorI2RlZmluZSBfX05SX3NldHJlc2dpZAkJCTM3MQorI2RlZmluZSBfX05SX2dldHJlc2dpZAkJCTM3MgorI2RlZmluZSBfX05SX2RpcGMJCQkzNzMKKyNkZWZpbmUgX19OUl9waXZvdF9yb290CQkJMzc0CisjZGVmaW5lIF9fTlJfbWluY29yZQkJCTM3NQorI2RlZmluZSBfX05SX3BjaWNvbmZpZ19pb2Jhc2UJCTM3NgorI2RlZmluZSBfX05SX2dldGRlbnRzNjQJCQkzNzcKKyNkZWZpbmUgX19OUl9nZXR0aWQJCQkzNzgKKyNkZWZpbmUgX19OUl9yZWFkYWhlYWQJCQkzNzkKKy8qIDM4MCBpcyB1bnVzZWQgKi8KKyNkZWZpbmUgX19OUl90a2lsbAkJCTM4MQorI2RlZmluZSBfX05SX3NldHhhdHRyCQkJMzgyCisjZGVmaW5lIF9fTlJfbHNldHhhdHRyCQkJMzgzCisjZGVmaW5lIF9fTlJfZnNldHhhdHRyCQkJMzg0CisjZGVmaW5lIF9fTlJfZ2V0eGF0dHIJCQkzODUKKyNkZWZpbmUgX19OUl9sZ2V0eGF0dHIJCQkzODYKKyNkZWZpbmUgX19OUl9mZ2V0eGF0dHIJCQkzODcKKyNkZWZpbmUgX19OUl9saXN0eGF0dHIJCQkzODgKKyNkZWZpbmUgX19OUl9sbGlzdHhhdHRyCQkJMzg5CisjZGVmaW5lIF9fTlJfZmxpc3R4YXR0cgkJCTM5MAorI2RlZmluZSBfX05SX3JlbW92ZXhhdHRyCQkzOTEKKyNkZWZpbmUgX19OUl9scmVtb3ZleGF0dHIJCTM5MgorI2RlZmluZSBfX05SX2ZyZW1vdmV4YXR0cgkJMzkzCisjZGVmaW5lIF9fTlJfZnV0ZXgJCQkzOTQKKyNkZWZpbmUgX19OUl9zY2hlZF9zZXRhZmZpbml0eQkJMzk1ICAgICAKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRhZmZpbml0eQkJMzk2CisjZGVmaW5lIF9fTlJfdHV4Y2FsbAkJCTM5NworI2RlZmluZSBfX05SX2lvX3NldHVwCQkJMzk4CisjZGVmaW5lIF9fTlJfaW9fZGVzdHJveQkJCTM5OQorI2RlZmluZSBfX05SX2lvX2dldGV2ZW50cwkJNDAwCisjZGVmaW5lIF9fTlJfaW9fc3VibWl0CQkJNDAxCisjZGVmaW5lIF9fTlJfaW9fY2FuY2VsCQkJNDAyCisjZGVmaW5lIF9fTlJfZXhpdF9ncm91cAkJCTQwNQorI2RlZmluZSBfX05SX2xvb2t1cF9kY29va2llCQk0MDYKKyNkZWZpbmUgX19OUl9zeXNfZXBvbGxfY3JlYXRlCQk0MDcKKyNkZWZpbmUgX19OUl9zeXNfZXBvbGxfY3RsCQk0MDgKKyNkZWZpbmUgX19OUl9zeXNfZXBvbGxfd2FpdAkJNDA5CisjZGVmaW5lIF9fTlJfcmVtYXBfZmlsZV9wYWdlcwkJNDEwCisjZGVmaW5lIF9fTlJfc2V0X3RpZF9hZGRyZXNzCQk0MTEKKyNkZWZpbmUgX19OUl9yZXN0YXJ0X3N5c2NhbGwJCTQxMgorI2RlZmluZSBfX05SX2ZhZHZpc2U2NAkJCTQxMworI2RlZmluZSBfX05SX3RpbWVyX2NyZWF0ZQkJNDE0CisjZGVmaW5lIF9fTlJfdGltZXJfc2V0dGltZQkJNDE1CisjZGVmaW5lIF9fTlJfdGltZXJfZ2V0dGltZQkJNDE2CisjZGVmaW5lIF9fTlJfdGltZXJfZ2V0b3ZlcnJ1bgkJNDE3CisjZGVmaW5lIF9fTlJfdGltZXJfZGVsZXRlCQk0MTgKKyNkZWZpbmUgX19OUl9jbG9ja19zZXR0aW1lCQk0MTkKKyNkZWZpbmUgX19OUl9jbG9ja19nZXR0aW1lCQk0MjAKKyNkZWZpbmUgX19OUl9jbG9ja19nZXRyZXMJCTQyMQorI2RlZmluZSBfX05SX2Nsb2NrX25hbm9zbGVlcAkJNDIyCisjZGVmaW5lIF9fTlJfc2VtdGltZWRvcAkJCTQyMworI2RlZmluZSBfX05SX3Rna2lsbAkJCTQyNAorI2RlZmluZSBfX05SX3N0YXQ2NAkJCTQyNQorI2RlZmluZSBfX05SX2xzdGF0NjQJCQk0MjYKKyNkZWZpbmUgX19OUl9mc3RhdDY0CQkJNDI3CisjZGVmaW5lIF9fTlJfdnNlcnZlcgkJCTQyOAorI2RlZmluZSBfX05SX21iaW5kCQkJNDI5CisjZGVmaW5lIF9fTlJfZ2V0X21lbXBvbGljeQkJNDMwCisjZGVmaW5lIF9fTlJfc2V0X21lbXBvbGljeQkJNDMxCisjZGVmaW5lIF9fTlJfbXFfb3BlbgkJCTQzMgorI2RlZmluZSBfX05SX21xX3VubGluawkJCTQzMworI2RlZmluZSBfX05SX21xX3RpbWVkc2VuZAkJNDM0CisjZGVmaW5lIF9fTlJfbXFfdGltZWRyZWNlaXZlCQk0MzUKKyNkZWZpbmUgX19OUl9tcV9ub3RpZnkJCQk0MzYKKyNkZWZpbmUgX19OUl9tcV9nZXRzZXRhdHRyCQk0MzcKKyNkZWZpbmUgX19OUl93YWl0aWQJCQk0MzgKKworI2RlZmluZSBOUl9TWVNDQUxMUwkJCTQzOQorCisjaWYgZGVmaW5lZChfX0dOVUNfXykKKworI2RlZmluZSBfc3lzY2FsbF9yZXR1cm4odHlwZSkJCQkJCQlcCisJcmV0dXJuIChfc2NfZXJyID8gZXJybm8gPSBfc2NfcmV0LCBfc2NfcmV0ID0gLTFMIDogMCksICh0eXBlKSBfc2NfcmV0CisKKyNkZWZpbmUgX3N5c2NhbGxfY2xvYmJlcnMJCQkJCQlcCisJIiQxIiwgIiQyIiwgIiQzIiwgIiQ0IiwgIiQ1IiwgIiQ2IiwgIiQ3IiwgIiQ4IiwJCQlcCisJIiQyMiIsICIkMjMiLCAiJDI0IiwgIiQyNSIsICIkMjciLCAiJDI4IiAJCQlcCisKKyNkZWZpbmUgX3N5c2NhbGwwKHR5cGUsIG5hbWUpCQkJCQkJXAordHlwZSBuYW1lKHZvaWQpCQkJCQkJCQlcCit7CQkJCQkJCQkJXAorCWxvbmcgX3NjX3JldCwgX3NjX2VycjsJCQkJCQlcCisJewkJCQkJCQkJXAorCQlyZWdpc3RlciBsb25nIF9zY18wIF9fYXNtX18oIiQwIik7CQkJXAorCQlyZWdpc3RlciBsb25nIF9zY18xOSBfX2FzbV9fKCIkMTkiKTsJCQlcCisJCQkJCQkJCQlcCisJCV9zY18wID0gX19OUl8jI25hbWU7CQkJCQlcCisJCV9fYXNtX18oImNhbGxzeXMgIyAlMCAlMSAlMiIJCQkJXAorCQkJOiAiPXIiKF9zY18wKSwgIj1yIihfc2NfMTkpCQkJXAorCQkJOiAiMCIoX3NjXzApCQkJCQlcCisJCQk6IF9zeXNjYWxsX2Nsb2JiZXJzKTsJCQkJXAorCQlfc2NfcmV0ID0gX3NjXzAsIF9zY19lcnIgPSBfc2NfMTk7CQkJXAorCX0JCQkJCQkJCVwKKwlfc3lzY2FsbF9yZXR1cm4odHlwZSk7CQkJCQkJXAorfQorCisjZGVmaW5lIF9zeXNjYWxsMSh0eXBlLG5hbWUsdHlwZTEsYXJnMSkJCQkJCVwKK3R5cGUgbmFtZSh0eXBlMSBhcmcxKQkJCQkJCQlcCit7CQkJCQkJCQkJXAorCWxvbmcgX3NjX3JldCwgX3NjX2VycjsJCQkJCQlcCisJewkJCQkJCQkJXAorCQlyZWdpc3RlciBsb25nIF9zY18wIF9fYXNtX18oIiQwIik7CQkJXAorCQlyZWdpc3RlciBsb25nIF9zY18xNiBfX2FzbV9fKCIkMTYiKTsJCQlcCisJCXJlZ2lzdGVyIGxvbmcgX3NjXzE5IF9fYXNtX18oIiQxOSIpOwkJCVwKKwkJCQkJCQkJCVwKKwkJX3NjXzAgPSBfX05SXyMjbmFtZTsJCQkJCVwKKwkJX3NjXzE2ID0gKGxvbmcpIChhcmcxKTsJCQkJCVwKKwkJX19hc21fXygiY2FsbHN5cyAjICUwICUxICUyICUzIgkJCQlcCisJCQk6ICI9ciIoX3NjXzApLCAiPXIiKF9zY18xOSkJCQlcCisJCQk6ICIwIihfc2NfMCksICJyIihfc2NfMTYpCQkJXAorCQkJOiBfc3lzY2FsbF9jbG9iYmVycyk7CQkJCVwKKwkJX3NjX3JldCA9IF9zY18wLCBfc2NfZXJyID0gX3NjXzE5OwkJCVwKKwl9CQkJCQkJCQlcCisJX3N5c2NhbGxfcmV0dXJuKHR5cGUpOwkJCQkJCVwKK30KKworI2RlZmluZSBfc3lzY2FsbDIodHlwZSxuYW1lLHR5cGUxLGFyZzEsdHlwZTIsYXJnMikJCQlcCit0eXBlIG5hbWUodHlwZTEgYXJnMSx0eXBlMiBhcmcyKQkJCQkJXAorewkJCQkJCQkJCVwKKwlsb25nIF9zY19yZXQsIF9zY19lcnI7CQkJCQkJXAorCXsJCQkJCQkJCVwKKwkJcmVnaXN0ZXIgbG9uZyBfc2NfMCBfX2FzbV9fKCIkMCIpOwkJCVwKKwkJcmVnaXN0ZXIgbG9uZyBfc2NfMTYgX19hc21fXygiJDE2Iik7CQkJXAorCQlyZWdpc3RlciBsb25nIF9zY18xNyBfX2FzbV9fKCIkMTciKTsJCQlcCisJCXJlZ2lzdGVyIGxvbmcgX3NjXzE5IF9fYXNtX18oIiQxOSIpOwkJCVwKKwkJCQkJCQkJCVwKKwkJX3NjXzAgPSBfX05SXyMjbmFtZTsJCQkJCVwKKwkJX3NjXzE2ID0gKGxvbmcpIChhcmcxKTsJCQkJCVwKKwkJX3NjXzE3ID0gKGxvbmcpIChhcmcyKTsJCQkJCVwKKwkJX19hc21fXygiY2FsbHN5cyAjICUwICUxICUyICUzICU0IgkJCVwKKwkJCTogIj1yIihfc2NfMCksICI9ciIoX3NjXzE5KQkJCVwKKwkJCTogIjAiKF9zY18wKSwgInIiKF9zY18xNiksICJyIihfc2NfMTcpCQlcCisJCQk6IF9zeXNjYWxsX2Nsb2JiZXJzKTsJCQkJXAorCQlfc2NfcmV0ID0gX3NjXzAsIF9zY19lcnIgPSBfc2NfMTk7CQkJXAorCX0JCQkJCQkJCVwKKwlfc3lzY2FsbF9yZXR1cm4odHlwZSk7CQkJCQkJXAorfQorCisjZGVmaW5lIF9zeXNjYWxsMyh0eXBlLG5hbWUsdHlwZTEsYXJnMSx0eXBlMixhcmcyLHR5cGUzLGFyZzMpCQlcCit0eXBlIG5hbWUodHlwZTEgYXJnMSx0eXBlMiBhcmcyLHR5cGUzIGFyZzMpCQkJCVwKK3sJCQkJCQkJCQlcCisJbG9uZyBfc2NfcmV0LCBfc2NfZXJyOwkJCQkJCVwKKwl7CQkJCQkJCQlcCisJCXJlZ2lzdGVyIGxvbmcgX3NjXzAgX19hc21fXygiJDAiKTsJCQlcCisJCXJlZ2lzdGVyIGxvbmcgX3NjXzE2IF9fYXNtX18oIiQxNiIpOwkJCVwKKwkJcmVnaXN0ZXIgbG9uZyBfc2NfMTcgX19hc21fXygiJDE3Iik7CQkJXAorCQlyZWdpc3RlciBsb25nIF9zY18xOCBfX2FzbV9fKCIkMTgiKTsJCQlcCisJCXJlZ2lzdGVyIGxvbmcgX3NjXzE5IF9fYXNtX18oIiQxOSIpOwkJCVwKKwkJCQkJCQkJCVwKKwkJX3NjXzAgPSBfX05SXyMjbmFtZTsJCQkJCVwKKwkJX3NjXzE2ID0gKGxvbmcpIChhcmcxKTsJCQkJCVwKKwkJX3NjXzE3ID0gKGxvbmcpIChhcmcyKTsJCQkJCVwKKwkJX3NjXzE4ID0gKGxvbmcpIChhcmczKTsJCQkJCVwKKwkJX19hc21fXygiY2FsbHN5cyAjICUwICUxICUyICUzICU0ICU1IgkJCVwKKwkJCTogIj1yIihfc2NfMCksICI9ciIoX3NjXzE5KQkJCVwKKwkJCTogIjAiKF9zY18wKSwgInIiKF9zY18xNiksICJyIihfc2NfMTcpLAkJXAorCQkJICAiciIoX3NjXzE4KQkJCQkJXAorCQkJOiBfc3lzY2FsbF9jbG9iYmVycyk7CQkJCVwKKwkJX3NjX3JldCA9IF9zY18wLCBfc2NfZXJyID0gX3NjXzE5OwkJCVwKKwl9CQkJCQkJCQlcCisJX3N5c2NhbGxfcmV0dXJuKHR5cGUpOwkJCQkJCVwKK30KKworI2RlZmluZSBfc3lzY2FsbDQodHlwZSxuYW1lLHR5cGUxLGFyZzEsdHlwZTIsYXJnMix0eXBlMyxhcmczLHR5cGU0LGFyZzQpIFwKK3R5cGUgbmFtZSAodHlwZTEgYXJnMSwgdHlwZTIgYXJnMiwgdHlwZTMgYXJnMywgdHlwZTQgYXJnNCkJCSBcCit7CQkJCQkJCQkJIFwKKwlsb25nIF9zY19yZXQsIF9zY19lcnI7CQkJCQkJXAorCXsJCQkJCQkJCVwKKwkJcmVnaXN0ZXIgbG9uZyBfc2NfMCBfX2FzbV9fKCIkMCIpOwkJCVwKKwkJcmVnaXN0ZXIgbG9uZyBfc2NfMTYgX19hc21fXygiJDE2Iik7CQkJXAorCQlyZWdpc3RlciBsb25nIF9zY18xNyBfX2FzbV9fKCIkMTciKTsJCQlcCisJCXJlZ2lzdGVyIGxvbmcgX3NjXzE4IF9fYXNtX18oIiQxOCIpOwkJCVwKKwkJcmVnaXN0ZXIgbG9uZyBfc2NfMTkgX19hc21fXygiJDE5Iik7CQkJXAorCQkJCQkJCQkJXAorCQlfc2NfMCA9IF9fTlJfIyNuYW1lOwkJCQkJXAorCQlfc2NfMTYgPSAobG9uZykgKGFyZzEpOwkJCQkJXAorCQlfc2NfMTcgPSAobG9uZykgKGFyZzIpOwkJCQkJXAorCQlfc2NfMTggPSAobG9uZykgKGFyZzMpOwkJCQkJXAorCQlfc2NfMTkgPSAobG9uZykgKGFyZzQpOwkJCQkJXAorCQlfX2FzbV9fKCJjYWxsc3lzICMgJTAgJTEgJTIgJTMgJTQgJTUgJTYiCQlcCisJCQk6ICI9ciIoX3NjXzApLCAiPXIiKF9zY18xOSkJCQlcCisJCQk6ICIwIihfc2NfMCksICJyIihfc2NfMTYpLCAiciIoX3NjXzE3KSwJCVwKKwkJCSAgInIiKF9zY18xOCksICIxIihfc2NfMTkpCQkJXAorCQkJOiBfc3lzY2FsbF9jbG9iYmVycyk7CQkJCVwKKwkJX3NjX3JldCA9IF9zY18wLCBfc2NfZXJyID0gX3NjXzE5OwkJCVwKKwl9CQkJCQkJCQlcCisJX3N5c2NhbGxfcmV0dXJuKHR5cGUpOwkJCQkJCVwKK30gCisKKyNkZWZpbmUgX3N5c2NhbGw1KHR5cGUsbmFtZSx0eXBlMSxhcmcxLHR5cGUyLGFyZzIsdHlwZTMsYXJnMyx0eXBlNCxhcmc0LCBcCisJICB0eXBlNSxhcmc1KQkJCQkJCQkgXAordHlwZSBuYW1lICh0eXBlMSBhcmcxLHR5cGUyIGFyZzIsdHlwZTMgYXJnMyx0eXBlNCBhcmc0LHR5cGU1IGFyZzUpCVwKK3sJCQkJCQkJCQlcCisJbG9uZyBfc2NfcmV0LCBfc2NfZXJyOwkJCQkJCVwKKwl7CQkJCQkJCQlcCisJCXJlZ2lzdGVyIGxvbmcgX3NjXzAgX19hc21fXygiJDAiKTsJCQlcCisJCXJlZ2lzdGVyIGxvbmcgX3NjXzE2IF9fYXNtX18oIiQxNiIpOwkJCVwKKwkJcmVnaXN0ZXIgbG9uZyBfc2NfMTcgX19hc21fXygiJDE3Iik7CQkJXAorCQlyZWdpc3RlciBsb25nIF9zY18xOCBfX2FzbV9fKCIkMTgiKTsJCQlcCisJCXJlZ2lzdGVyIGxvbmcgX3NjXzE5IF9fYXNtX18oIiQxOSIpOwkJCVwKKwkJcmVnaXN0ZXIgbG9uZyBfc2NfMjAgX19hc21fXygiJDIwIik7CQkJXAorCQkJCQkJCQkJXAorCQlfc2NfMCA9IF9fTlJfIyNuYW1lOwkJCQkJXAorCQlfc2NfMTYgPSAobG9uZykgKGFyZzEpOwkJCQkJXAorCQlfc2NfMTcgPSAobG9uZykgKGFyZzIpOwkJCQkJXAorCQlfc2NfMTggPSAobG9uZykgKGFyZzMpOwkJCQkJXAorCQlfc2NfMTkgPSAobG9uZykgKGFyZzQpOwkJCQkJXAorCQlfc2NfMjAgPSAobG9uZykgKGFyZzUpOwkJCQkJXAorCQlfX2FzbV9fKCJjYWxsc3lzICMgJTAgJTEgJTIgJTMgJTQgJTUgJTYgJTciCQlcCisJCQk6ICI9ciIoX3NjXzApLCAiPXIiKF9zY18xOSkJCQlcCisJCQk6ICIwIihfc2NfMCksICJyIihfc2NfMTYpLCAiciIoX3NjXzE3KSwJCVwKKwkJCSAgInIiKF9zY18xOCksICIxIihfc2NfMTkpLCAiciIoX3NjXzIwKQkJXAorCQkJOiBfc3lzY2FsbF9jbG9iYmVycyk7CQkJCVwKKwkJX3NjX3JldCA9IF9zY18wLCBfc2NfZXJyID0gX3NjXzE5OwkJCVwKKwl9CQkJCQkJCQlcCisJX3N5c2NhbGxfcmV0dXJuKHR5cGUpOwkJCQkJCVwKK30KKworI2RlZmluZSBfc3lzY2FsbDYodHlwZSxuYW1lLHR5cGUxLGFyZzEsdHlwZTIsYXJnMix0eXBlMyxhcmczLHR5cGU0LGFyZzQsIFwKKwkgIHR5cGU1LGFyZzUsdHlwZTYsYXJnNikJCQkJCSBcCit0eXBlIG5hbWUgKHR5cGUxIGFyZzEsdHlwZTIgYXJnMix0eXBlMyBhcmczLHR5cGU0IGFyZzQsdHlwZTUgYXJnNSwgdHlwZTYgYXJnNilcCit7CQkJCQkJCQkJXAorCWxvbmcgX3NjX3JldCwgX3NjX2VycjsJCQkJCQlcCisJewkJCQkJCQkJXAorCQlyZWdpc3RlciBsb25nIF9zY18wIF9fYXNtX18oIiQwIik7CQkJXAorCQlyZWdpc3RlciBsb25nIF9zY18xNiBfX2FzbV9fKCIkMTYiKTsJCQlcCisJCXJlZ2lzdGVyIGxvbmcgX3NjXzE3IF9fYXNtX18oIiQxNyIpOwkJCVwKKwkJcmVnaXN0ZXIgbG9uZyBfc2NfMTggX19hc21fXygiJDE4Iik7CQkJXAorCQlyZWdpc3RlciBsb25nIF9zY18xOSBfX2FzbV9fKCIkMTkiKTsJCQlcCisJCXJlZ2lzdGVyIGxvbmcgX3NjXzIwIF9fYXNtX18oIiQyMCIpOwkJCVwKKwkJcmVnaXN0ZXIgbG9uZyBfc2NfMjEgX19hc21fXygiJDIxIik7CQkJXAorCQkJCQkJCQkJXAorCQlfc2NfMCA9IF9fTlJfIyNuYW1lOwkJCQkJXAorCQlfc2NfMTYgPSAobG9uZykgKGFyZzEpOwkJCQkJXAorCQlfc2NfMTcgPSAobG9uZykgKGFyZzIpOwkJCQkJXAorCQlfc2NfMTggPSAobG9uZykgKGFyZzMpOwkJCQkJXAorCQlfc2NfMTkgPSAobG9uZykgKGFyZzQpOwkJCQkJXAorCQlfc2NfMjAgPSAobG9uZykgKGFyZzUpOwkJCQkJXAorCQlfc2NfMjEgPSAobG9uZykgKGFyZzYpOwkJCQkJXAorCQlfX2FzbV9fKCJjYWxsc3lzICMgJTAgJTEgJTIgJTMgJTQgJTUgJTYgJTcgJTgiCQlcCisJCQk6ICI9ciIoX3NjXzApLCAiPXIiKF9zY18xOSkJCQlcCisJCQk6ICIwIihfc2NfMCksICJyIihfc2NfMTYpLCAiciIoX3NjXzE3KSwJCVwKKwkJCSAgInIiKF9zY18xOCksICIxIihfc2NfMTkpLCAiciIoX3NjXzIwKSwgInIiKF9zY18yMSkgXAorCQkJOiBfc3lzY2FsbF9jbG9iYmVycyk7CQkJCVwKKwkJX3NjX3JldCA9IF9zY18wLCBfc2NfZXJyID0gX3NjXzE5OwkJCVwKKwl9CQkJCQkJCQlcCisJX3N5c2NhbGxfcmV0dXJuKHR5cGUpOwkJCQkJCVwKK30KKworI2VuZGlmIC8qIF9fTElCUkFSWV9fICYmIF9fR05VQ19fICovCisKKyNpZmRlZiBfX0tFUk5FTF9fCisjZGVmaW5lIF9fQVJDSF9XQU5UX0lQQ19QQVJTRV9WRVJTSU9OCisjZGVmaW5lIF9fQVJDSF9XQU5UX09MRF9SRUFERElSCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NUQVQ2NAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfR0VUSE9TVE5BTUUKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NPQ0tFVENBTEwKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0ZBRFZJU0U2NAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfR0VUUEdSUAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfT0xEX0dFVFJMSU1JVAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfT0xEVU1PVU5UCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdQRU5ESU5HCisjZW5kaWYKKworI2lmZGVmIF9fS0VSTkVMX1NZU0NBTExTX18KKworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKworc3RhdGljIGlubGluZSBsb25nIG9wZW4oY29uc3QgY2hhciAqIG5hbWUsIGludCBtb2RlLCBpbnQgZmxhZ3MpCit7CisJcmV0dXJuIHN5c19vcGVuKG5hbWUsIG1vZGUsIGZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSBsb25nIGR1cChpbnQgZmQpCit7CisJcmV0dXJuIHN5c19kdXAoZmQpOworfQorCitzdGF0aWMgaW5saW5lIGxvbmcgY2xvc2UoaW50IGZkKQoreworCXJldHVybiBzeXNfY2xvc2UoZmQpOworfQorCitzdGF0aWMgaW5saW5lIG9mZl90IGxzZWVrKGludCBmZCwgb2ZmX3Qgb2ZmLCBpbnQgd2hlbmNlKQoreworCXJldHVybiBzeXNfbHNlZWsoZmQsIG9mZiwgd2hlbmNlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9leGl0KGludCB2YWx1ZSkKK3sKKwlzeXNfZXhpdCh2YWx1ZSk7Cit9CisKKyNkZWZpbmUgZXhpdCh4KSBfZXhpdCh4KQorCitzdGF0aWMgaW5saW5lIGxvbmcgd3JpdGUoaW50IGZkLCBjb25zdCBjaGFyICogYnVmLCBzaXplX3QgbnIpCit7CisJcmV0dXJuIHN5c193cml0ZShmZCwgYnVmLCBucik7Cit9CisKK3N0YXRpYyBpbmxpbmUgbG9uZyByZWFkKGludCBmZCwgY2hhciAqIGJ1Ziwgc2l6ZV90IG5yKQoreworCXJldHVybiBzeXNfcmVhZChmZCwgYnVmLCBucik7Cit9CisKK2V4dGVybiBpbnQgZXhlY3ZlKGNoYXIgKiwgY2hhciAqKiwgY2hhciAqKik7CisKK3N0YXRpYyBpbmxpbmUgbG9uZyBzZXRzaWQodm9pZCkKK3sKKwlyZXR1cm4gc3lzX3NldHNpZCgpOworfQorCitzdGF0aWMgaW5saW5lIHBpZF90IHdhaXRwaWQoaW50IHBpZCwgaW50ICogd2FpdF9zdGF0LCBpbnQgZmxhZ3MpCit7CisJcmV0dXJuIHN5c193YWl0NChwaWQsIHdhaXRfc3RhdCwgZmxhZ3MsIE5VTEwpOworfQorCithc21saW5rYWdlIGludCBzeXNfZXhlY3ZlKGNoYXIgKnVmaWxlbmFtZSwgY2hhciAqKmFyZ3YsIGNoYXIgKiplbnZwLAorCQkJdW5zaWduZWQgbG9uZyBhMywgdW5zaWduZWQgbG9uZyBhNCwgdW5zaWduZWQgbG9uZyBhNSwKKwkJCXN0cnVjdCBwdF9yZWdzIHJlZ3MpOworYXNtbGlua2FnZSBsb25nIHN5c19ydF9zaWdhY3Rpb24oaW50IHNpZywKKwkJCQljb25zdCBzdHJ1Y3Qgc2lnYWN0aW9uIF9fdXNlciAqYWN0LAorCQkJCXN0cnVjdCBzaWdhY3Rpb24gX191c2VyICpvYWN0LAorCQkJCXNpemVfdCBzaWdzZXRzaXplLAorCQkJCXZvaWQgKnJlc3RvcmVyKTsKKworI2VuZGlmIC8qIF9fS0VSTkVMX1NZU0NBTExTX18gKi8KKworLyogIkNvbmRpdGlvbmFsIiBzeXNjYWxscy4gIFdoYXQgd2Ugd2FudCBpcworCisJX19hdHRyaWJ1dGVfXygod2VhayxhbGlhcygic3lzX25pX3N5c2NhbGwiKSkpCisKKyAgIGJ1dCB0aGF0IHJhaXNlcyB0aGUgcHJvYmxlbSBvZiB3aGF0IHR5cGUgdG8gZ2l2ZSB0aGUgc3ltYm9sLiAgSWYgd2UgdXNlCisgICBhIHByb3RvdHlwZSwgaXQnbGwgY29uZmxpY3Qgd2l0aCB0aGUgZGVmaW5pdGlvbiBnaXZlbiBpbiB0aGlzIGZpbGUgYW5kCisgICBvdGhlcnMuICBJZiB3ZSB1c2UgX190eXBlb2YsIHdlIGRpc2NvdmVyIHRoYXQgbm90IGFsbCBzeW1ib2xzIGFjdHVhbGx5CisgICBoYXZlIGRlY2xhcmF0aW9ucy4gIElmIHdlIHVzZSBubyBwcm90b3R5cGUsIHRoZW4gd2UgZ2V0IHdhcm5pbmdzIGZyb20KKyAgIC1Xc3RyaWN0LXByb3RvdHlwZXMuICBIbyBodW0uICAqLworCisjZGVmaW5lIGNvbmRfc3lzY2FsbCh4KSAgYXNtKCIud2Vha1x0IiAjeCAiXG4iICN4ICIgPSBzeXNfbmlfc3lzY2FsbCIpCisKKyNlbmRpZiAvKiBfQUxQSEFfVU5JU1REX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL3VzZXIuaCBiL2luY2x1ZGUvYXNtLWFscGhhL3VzZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTQxN2ZjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvdXNlci5oCkBAIC0wLDAgKzEsNTMgQEAKKyNpZm5kZWYgX0FMUEhBX1VTRVJfSAorI2RlZmluZSBfQUxQSEFfVVNFUl9ICisKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorCisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vcmVnLmg+CisKKy8qCisgKiBDb3JlIGZpbGUgZm9ybWF0OiBUaGUgY29yZSBmaWxlIGlzIHdyaXR0ZW4gaW4gc3VjaCBhIHdheSB0aGF0IGdkYgorICogY2FuIHVuZGVyc3RhbmQgaXQgYW5kIHByb3ZpZGUgdXNlZnVsIGluZm9ybWF0aW9uIHRvIHRoZSB1c2VyICh1bmRlcgorICogbGludXggd2UgdXNlIHRoZSBgdHJhZC1jb3JlJyBiZmQsIE5PVCB0aGUgb3NmLWNvcmUpLiAgVGhlIGZpbGUgY29udGVudHMKKyAqIGFyZSBhcyBmb2xsb3dzOgorICoKKyAqICB1cGFnZTogMSBwYWdlIGNvbnNpc3Rpbmcgb2YgYSB1c2VyIHN0cnVjdCB0aGF0IHRlbGxzIGdkYgorICoJd2hhdCBpcyBwcmVzZW50IGluIHRoZSBmaWxlLiAgRGlyZWN0bHkgYWZ0ZXIgdGhpcyBpcyBhCisgKgljb3B5IG9mIHRoZSB0YXNrX3N0cnVjdCwgd2hpY2ggaXMgY3VycmVudGx5IG5vdCB1c2VkIGJ5IGdkYiwKKyAqCWJ1dCBpdCBtYXkgY29tZSBpbiBoYW5keSBhdCBzb21lIHBvaW50LiAgQWxsIG9mIHRoZSByZWdpc3RlcnMKKyAqCWFyZSBzdG9yZWQgYXMgcGFydCBvZiB0aGUgdXBhZ2UuICBUaGUgdXBhZ2Ugc2hvdWxkIGFsd2F5cyBiZQorICoJb25seSBvbmUgcGFnZSBsb25nLgorICogIGRhdGE6IFRoZSBkYXRhIHNlZ21lbnQgZm9sbG93cyBuZXh0LiAgV2UgdXNlIGN1cnJlbnQtPmVuZF90ZXh0IHRvCisgKgljdXJyZW50LT5icmsgdG8gcGljayB1cCBhbGwgb2YgdGhlIHVzZXIgdmFyaWFibGVzLCBwbHVzIGFueSBtZW1vcnkKKyAqCXRoYXQgbWF5IGhhdmUgYmVlbiBzYnJrJ2VkLiAgTm8gYXR0ZW1wdCBpcyBtYWRlIHRvIGRldGVybWluZSBpZiBhCisgKglwYWdlIGlzIGRlbWFuZC16ZXJvIG9yIGlmIGEgcGFnZSBpcyB0b3RhbGx5IHVudXNlZCwgd2UganVzdCBjb3ZlcgorICoJdGhlIGVudGlyZSByYW5nZS4gIEFsbCBvZiB0aGUgYWRkcmVzc2VzIGFyZSByb3VuZGVkIGluIHN1Y2ggYSB3YXkKKyAqCXRoYXQgYW4gaW50ZWdyYWwgbnVtYmVyIG9mIHBhZ2VzIGlzIHdyaXR0ZW4uCisgKiAgc3RhY2s6IFdlIG5lZWQgdGhlIHN0YWNrIGluZm9ybWF0aW9uIGluIG9yZGVyIHRvIGdldCBhIG1lYW5pbmdmdWwKKyAqCWJhY2t0cmFjZS4gIFdlIG5lZWQgdG8gd3JpdGUgdGhlIGRhdGEgZnJvbSB1c3AgdG8KKyAqCWN1cnJlbnQtPnN0YXJ0X3N0YWNrLCBzbyB3ZSByb3VuZCBlYWNoIG9mIHRoZXNlIGluIG9yZGVyIHRvIGJlIGFibGUKKyAqCXRvIHdyaXRlIGFuIGludGVnZXIgbnVtYmVyIG9mIHBhZ2VzLgorICovCitzdHJ1Y3QgdXNlciB7CisJdW5zaWduZWQgbG9uZwlyZWdzW0VGX1NJWkUvOCszMl07CS8qIGludGVnZXIgYW5kIGZwIHJlZ3MgKi8KKwlzaXplX3QJCXVfdHNpemU7CQkvKiB0ZXh0IHNpemUgKHBhZ2VzKSAqLworCXNpemVfdAkJdV9kc2l6ZTsJCS8qIGRhdGEgc2l6ZSAocGFnZXMpICovCisJc2l6ZV90CQl1X3NzaXplOwkJLyogc3RhY2sgc2l6ZSAocGFnZXMpICovCisJdW5zaWduZWQgbG9uZwlzdGFydF9jb2RlOwkJLyogdGV4dCBzdGFydGluZyBhZGRyZXNzICovCisJdW5zaWduZWQgbG9uZwlzdGFydF9kYXRhOwkJLyogZGF0YSBzdGFydGluZyBhZGRyZXNzICovCisJdW5zaWduZWQgbG9uZwlzdGFydF9zdGFjazsJCS8qIHN0YWNrIHN0YXJ0aW5nIGFkZHJlc3MgKi8KKwlsb25nIGludAlzaWduYWw7CQkJLyogc2lnbmFsIGNhdXNpbmcgY29yZSBkdW1wICovCisJc3RydWN0IHJlZ3MgKgl1X2FyMDsJCQkvKiBoZWxwIGdkYiBmaW5kIHJlZ2lzdGVycyAqLworCXVuc2lnbmVkIGxvbmcJbWFnaWM7CQkJLyogaWRlbnRpZmllcyBhIGNvcmUgZmlsZSAqLworCWNoYXIJCXVfY29tbVszMl07CQkvKiB1c2VyIGNvbW1hbmQgbmFtZSAqLworfTsKKworI2RlZmluZSBOQlBHCQkJUEFHRV9TSVpFCisjZGVmaW5lIFVQQUdFUwkJCTEKKyNkZWZpbmUgSE9TVF9URVhUX1NUQVJUX0FERFIJKHUuc3RhcnRfY29kZSkKKyNkZWZpbmUgSE9TVF9EQVRBX1NUQVJUX0FERFIJKHUuc3RhcnRfZGF0YSkKKyNkZWZpbmUgSE9TVF9TVEFDS19FTkRfQUREUgkodS5zdGFydF9zdGFjayArIHUudV9zc2l6ZSAqIE5CUEcpCisKKyNlbmRpZiAvKiBfQUxQSEFfVVNFUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS92Z2EuaCBiL2luY2x1ZGUvYXNtLWFscGhhL3ZnYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjYTRmNmIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS92Z2EuaApAQCAtMCwwICsxLDUxIEBACisvKgorICoJQWNjZXNzIHRvIFZHQSB2aWRlb3JhbQorICoKKyAqCShjKSAxOTk4IE1hcnRpbiBNYXJlcyA8bWpAdWN3LmN6PgorICovCisKKyNpZm5kZWYgX0xJTlVYX0FTTV9WR0FfSF8KKyNkZWZpbmUgX0xJTlVYX0FTTV9WR0FfSF8KKworI2luY2x1ZGUgPGFzbS9pby5oPgorCisjZGVmaW5lIFZUX0JVRl9IQVZFX1JXCisjZGVmaW5lIFZUX0JVRl9IQVZFX01FTVNFVFcKKyNkZWZpbmUgVlRfQlVGX0hBVkVfTUVNQ1BZVworCitleHRlcm4gaW5saW5lIHZvaWQgc2NyX3dyaXRldyh1MTYgdmFsLCB2b2xhdGlsZSB1MTYgKmFkZHIpCit7CisJaWYgKF9faXNfaW9hZGRyKGFkZHIpKQorCQlfX3Jhd193cml0ZXcodmFsLCAodm9sYXRpbGUgdTE2IF9faW9tZW0gKikgYWRkcik7CisJZWxzZQorCQkqYWRkciA9IHZhbDsKK30KKworZXh0ZXJuIGlubGluZSB1MTYgc2NyX3JlYWR3KHZvbGF0aWxlIGNvbnN0IHUxNiAqYWRkcikKK3sKKwlpZiAoX19pc19pb2FkZHIoYWRkcikpCisJCXJldHVybiBfX3Jhd19yZWFkdygodm9sYXRpbGUgY29uc3QgdTE2IF9faW9tZW0gKikgYWRkcik7CisJZWxzZQorCQlyZXR1cm4gKmFkZHI7Cit9CisKK2V4dGVybiBpbmxpbmUgdm9pZCBzY3JfbWVtc2V0dyh1MTYgKnMsIHUxNiBjLCB1bnNpZ25lZCBpbnQgY291bnQpCit7CisJaWYgKF9faXNfaW9hZGRyKHMpKQorCQltZW1zZXR3X2lvKCh1MTYgX19pb21lbSAqKSBzLCBjLCBjb3VudCk7CisJZWxzZQorCQltZW1zZXR3KHMsIGMsIGNvdW50KTsKK30KKworLyogRG8gbm90IHRydXN0IHRoYXQgdGhlIHVzYWdlIHdpbGwgYmUgY29ycmVjdDsgYW5hbHl6ZSB0aGUgYXJndW1lbnRzLiAgKi8KK2V4dGVybiB2b2lkIHNjcl9tZW1jcHl3KHUxNiAqZCwgY29uc3QgdTE2ICpzLCB1bnNpZ25lZCBpbnQgY291bnQpOworCisvKiA/Pz8gVGhlc2UgYXJlIGN1cnJlbnRseSBvbmx5IHVzZWQgZm9yIGRvd25sb2FkaW5nIGNoYXJhY3RlciBzZXRzLiAgQXMKKyAgIHN1Y2gsIHRoZXkgZG9uJ3QgbmVlZCBtZW1vcnkgYmFycmllcnMuICBJcyB0aGlzIGFsbCB0aGV5IGFyZSBpbnRlbmRlZAorICAgdG8gYmUgdXNlZCBmb3I/ICAqLworI2RlZmluZSB2Z2FfcmVhZGIoYSkJcmVhZGIoKHU4IF9faW9tZW0gKikoYSkpCisjZGVmaW5lIHZnYV93cml0ZWIodixhKQl3cml0ZWIodiwgKHU4IF9faW9tZW0gKikoYSkpCisKKyNkZWZpbmUgVkdBX01BUF9NRU0oeCkJKCh1bnNpZ25lZCBsb25nKSBpb3JlbWFwKHgsIDApKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL3hvci5oIGIvaW5jbHVkZS9hc20tYWxwaGEveG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVlMWMyYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL3hvci5oCkBAIC0wLDAgKzEsODU1IEBACisvKgorICogaW5jbHVkZS9hc20tYWxwaGEveG9yLmgKKyAqCisgKiBPcHRpbWl6ZWQgUkFJRC01IGNoZWNrc3VtbWluZyBmdW5jdGlvbnMgZm9yIGFscGhhIEVWNSBhbmQgRVY2CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogKGZvciBleGFtcGxlIC91c3Ivc3JjL2xpbnV4L0NPUFlJTkcpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCitleHRlcm4gdm9pZCB4b3JfYWxwaGFfMih1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nICosIHVuc2lnbmVkIGxvbmcgKik7CitleHRlcm4gdm9pZCB4b3JfYWxwaGFfMyh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nICosIHVuc2lnbmVkIGxvbmcgKiwKKwkJICAgICAgICB1bnNpZ25lZCBsb25nICopOworZXh0ZXJuIHZvaWQgeG9yX2FscGhhXzQodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyAqLCB1bnNpZ25lZCBsb25nICosCisJCSAgICAgICAgdW5zaWduZWQgbG9uZyAqLCB1bnNpZ25lZCBsb25nICopOworZXh0ZXJuIHZvaWQgeG9yX2FscGhhXzUodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyAqLCB1bnNpZ25lZCBsb25nICosCisJCSAgICAgICAgdW5zaWduZWQgbG9uZyAqLCB1bnNpZ25lZCBsb25nICosIHVuc2lnbmVkIGxvbmcgKik7CisKK2V4dGVybiB2b2lkIHhvcl9hbHBoYV9wcmVmZXRjaF8yKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcgKiwKKwkJCQkgdW5zaWduZWQgbG9uZyAqKTsKK2V4dGVybiB2b2lkIHhvcl9hbHBoYV9wcmVmZXRjaF8zKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcgKiwKKwkJCQkgdW5zaWduZWQgbG9uZyAqLCB1bnNpZ25lZCBsb25nICopOworZXh0ZXJuIHZvaWQgeG9yX2FscGhhX3ByZWZldGNoXzQodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyAqLAorCQkJCSB1bnNpZ25lZCBsb25nICosIHVuc2lnbmVkIGxvbmcgKiwKKwkJCQkgdW5zaWduZWQgbG9uZyAqKTsKK2V4dGVybiB2b2lkIHhvcl9hbHBoYV9wcmVmZXRjaF81KHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcgKiwKKwkJCQkgdW5zaWduZWQgbG9uZyAqLCB1bnNpZ25lZCBsb25nICosCisJCQkJIHVuc2lnbmVkIGxvbmcgKiwgdW5zaWduZWQgbG9uZyAqKTsKKworYXNtKCIJCQkJCQkJCVxuXAorCS50ZXh0CQkJCQkJCVxuXAorCS5hbGlnbiAzCQkJCQkJXG5cCisJLmVudCB4b3JfYWxwaGFfMgkJCQkJXG5cCit4b3JfYWxwaGFfMjoJCQkJCQkJXG5cCisJLnByb2xvZ3VlIDAJCQkJCQlcblwKKwlzcmwgJDE2LCA2LCAkMTYJCQkJCQlcblwKKwkuYWxpZ24gNAkJCQkJCVxuXAorMjoJCQkJCQkJCVxuXAorCWxkcSAkMCwwKCQxNykJCQkJCQlcblwKKwlsZHEgJDEsMCgkMTgpCQkJCQkJXG5cCisJbGRxICQyLDgoJDE3KQkJCQkJCVxuXAorCWxkcSAkMyw4KCQxOCkJCQkJCQlcblwKKwkJCQkJCQkJXG5cCisJbGRxICQ0LDE2KCQxNykJCQkJCQlcblwKKwlsZHEgJDUsMTYoJDE4KQkJCQkJCVxuXAorCWxkcSAkNiwyNCgkMTcpCQkJCQkJXG5cCisJbGRxICQ3LDI0KCQxOCkJCQkJCQlcblwKKwkJCQkJCQkJXG5cCisJbGRxICQxOSwzMigkMTcpCQkJCQkJXG5cCisJbGRxICQyMCwzMigkMTgpCQkJCQkJXG5cCisJbGRxICQyMSw0MCgkMTcpCQkJCQkJXG5cCisJbGRxICQyMiw0MCgkMTgpCQkJCQkJXG5cCisJCQkJCQkJCVxuXAorCWxkcSAkMjMsNDgoJDE3KQkJCQkJCVxuXAorCWxkcSAkMjQsNDgoJDE4KQkJCQkJCVxuXAorCWxkcSAkMjUsNTYoJDE3KQkJCQkJCVxuXAorCXhvciAkMCwkMSwkMAkJIyA3IGN5Y2xlcyBmcm9tICQxIGxvYWQJCVxuXAorCQkJCQkJCQlcblwKKwlsZHEgJDI3LDU2KCQxOCkJCQkJCQlcblwKKwl4b3IgJDIsJDMsJDIJCQkJCQlcblwKKwlzdHEgJDAsMCgkMTcpCQkJCQkJXG5cCisJeG9yICQ0LCQ1LCQ0CQkJCQkJXG5cCisJCQkJCQkJCVxuXAorCXN0cSAkMiw4KCQxNykJCQkJCQlcblwKKwl4b3IgJDYsJDcsJDYJCQkJCQlcblwKKwlzdHEgJDQsMTYoJDE3KQkJCQkJCVxuXAorCXhvciAkMTksJDIwLCQxOQkJCQkJCVxuXAorCQkJCQkJCQlcblwKKwlzdHEgJDYsMjQoJDE3KQkJCQkJCVxuXAorCXhvciAkMjEsJDIyLCQyMQkJCQkJCVxuXAorCXN0cSAkMTksMzIoJDE3KQkJCQkJCVxuXAorCXhvciAkMjMsJDI0LCQyMwkJCQkJCVxuXAorCQkJCQkJCQlcblwKKwlzdHEgJDIxLDQwKCQxNykJCQkJCQlcblwKKwl4b3IgJDI1LCQyNywkMjUJCQkJCQlcblwKKwlzdHEgJDIzLDQ4KCQxNykJCQkJCQlcblwKKwlzdWJxICQxNiwxLCQxNgkJCQkJCVxuXAorCQkJCQkJCQlcblwKKwlzdHEgJDI1LDU2KCQxNykJCQkJCQlcblwKKwlhZGRxICQxNyw2NCwkMTcJCQkJCQlcblwKKwlhZGRxICQxOCw2NCwkMTgJCQkJCQlcblwKKwliZ3QgJDE2LDJiCQkJCQkJXG5cCisJCQkJCQkJCVxuXAorCXJldAkJCQkJCQlcblwKKwkuZW5kIHhvcl9hbHBoYV8yCQkJCQlcblwKKwkJCQkJCQkJXG5cCisJLmFsaWduIDMJCQkJCQlcblwKKwkuZW50IHhvcl9hbHBoYV8zCQkJCQlcblwKK3hvcl9hbHBoYV8zOgkJCQkJCQlcblwKKwkucHJvbG9ndWUgMAkJCQkJCVxuXAorCXNybCAkMTYsIDYsICQxNgkJCQkJCVxuXAorCS5hbGlnbiA0CQkJCQkJXG5cCiszOgkJCQkJCQkJXG5cCisJbGRxICQwLDAoJDE3KQkJCQkJCVxuXAorCWxkcSAkMSwwKCQxOCkJCQkJCQlcblwKKwlsZHEgJDIsMCgkMTkpCQkJCQkJXG5cCisJbGRxICQzLDgoJDE3KQkJCQkJCVxuXAorCQkJCQkJCQlcblwKKwlsZHEgJDQsOCgkMTgpCQkJCQkJXG5cCisJbGRxICQ2LDE2KCQxNykJCQkJCQlcblwKKwlsZHEgJDcsMTYoJDE4KQkJCQkJCVxuXAorCWxkcSAkMjEsMjQoJDE3KQkJCQkJCVxuXAorCQkJCQkJCQlcblwKKwlsZHEgJDIyLDI0KCQxOCkJCQkJCQlcblwKKwlsZHEgJDI0LDMyKCQxNykJCQkJCQlcblwKKwlsZHEgJDI1LDMyKCQxOCkJCQkJCQlcblwKKwlsZHEgJDUsOCgkMTkpCQkJCQkJXG5cCisJCQkJCQkJCVxuXAorCWxkcSAkMjAsMTYoJDE5KQkJCQkJCVxuXAorCWxkcSAkMjMsMjQoJDE5KQkJCQkJCVxuXAorCWxkcSAkMjcsMzIoJDE5KQkJCQkJCVxuXAorCW5vcAkJCQkJCQlcblwKKwkJCQkJCQkJXG5cCisJeG9yICQwLCQxLCQxCQkjIDggY3ljbGVzIGZyb20gJDAgbG9hZAkJXG5cCisJeG9yICQzLCQ0LCQ0CQkjIDYgY3ljbGVzIGZyb20gJDQgbG9hZAkJXG5cCisJeG9yICQ2LCQ3LCQ3CQkjIDYgY3ljbGVzIGZyb20gJDcgbG9hZAkJXG5cCisJeG9yICQyMSwkMjIsJDIyCQkjIDUgY3ljbGVzIGZyb20gJDIyIGxvYWQJXG5cCisJCQkJCQkJCVxuXAorCXhvciAkMSwkMiwkMgkJIyA5IGN5Y2xlcyBmcm9tICQyIGxvYWQJCVxuXAorCXhvciAkMjQsJDI1LCQyNQkJIyA1IGN5Y2xlcyBmcm9tICQyNSBsb2FkCVxuXAorCXN0cSAkMiwwKCQxNykJCQkJCQlcblwKKwl4b3IgJDQsJDUsJDUJCSMgNiBjeWNsZXMgZnJvbSAkNSBsb2FkCQlcblwKKwkJCQkJCQkJXG5cCisJc3RxICQ1LDgoJDE3KQkJCQkJCVxuXAorCXhvciAkNywkMjAsJDIwCQkjIDcgY3ljbGVzIGZyb20gJDIwIGxvYWQJXG5cCisJc3RxICQyMCwxNigkMTcpCQkJCQkJXG5cCisJeG9yICQyMiwkMjMsJDIzCQkjIDcgY3ljbGVzIGZyb20gJDIzIGxvYWQJXG5cCisJCQkJCQkJCVxuXAorCXN0cSAkMjMsMjQoJDE3KQkJCQkJCVxuXAorCXhvciAkMjUsJDI3LCQyNwkJIyA3IGN5Y2xlcyBmcm9tICQyNyBsb2FkCVxuXAorCXN0cSAkMjcsMzIoJDE3KQkJCQkJCVxuXAorCW5vcAkJCQkJCQlcblwKKwkJCQkJCQkJXG5cCisJbGRxICQwLDQwKCQxNykJCQkJCQlcblwKKwlsZHEgJDEsNDAoJDE4KQkJCQkJCVxuXAorCWxkcSAkMyw0OCgkMTcpCQkJCQkJXG5cCisJbGRxICQ0LDQ4KCQxOCkJCQkJCQlcblwKKwkJCQkJCQkJXG5cCisJbGRxICQ2LDU2KCQxNykJCQkJCQlcblwKKwlsZHEgJDcsNTYoJDE4KQkJCQkJCVxuXAorCWxkcSAkMiw0MCgkMTkpCQkJCQkJXG5cCisJbGRxICQ1LDQ4KCQxOSkJCQkJCQlcblwKKwkJCQkJCQkJXG5cCisJbGRxICQyMCw1NigkMTkpCQkJCQkJXG5cCisJeG9yICQwLCQxLCQxCQkjIDQgY3ljbGVzIGZyb20gJDEgbG9hZAkJXG5cCisJeG9yICQzLCQ0LCQ0CQkjIDUgY3ljbGVzIGZyb20gJDQgbG9hZAkJXG5cCisJeG9yICQ2LCQ3LCQ3CQkjIDUgY3ljbGVzIGZyb20gJDcgbG9hZAkJXG5cCisJCQkJCQkJCVxuXAorCXhvciAkMSwkMiwkMgkJIyA0IGN5Y2xlcyBmcm9tICQyIGxvYWQJCVxuXAorCXhvciAkNCwkNSwkNQkJIyA1IGN5Y2xlcyBmcm9tICQ1IGxvYWQJCVxuXAorCXN0cSAkMiw0MCgkMTcpCQkJCQkJXG5cCisJeG9yICQ3LCQyMCwkMjAJCSMgNCBjeWNsZXMgZnJvbSAkMjAgbG9hZAlcblwKKwkJCQkJCQkJXG5cCisJc3RxICQ1LDQ4KCQxNykJCQkJCQlcblwKKwlzdWJxICQxNiwxLCQxNgkJCQkJCVxuXAorCXN0cSAkMjAsNTYoJDE3KQkJCQkJCVxuXAorCWFkZHEgJDE5LDY0LCQxOQkJCQkJCVxuXAorCQkJCQkJCQlcblwKKwlhZGRxICQxOCw2NCwkMTgJCQkJCQlcblwKKwlhZGRxICQxNyw2NCwkMTcJCQkJCQlcblwKKwliZ3QgJDE2LDNiCQkJCQkJXG5cCisJcmV0CQkJCQkJCVxuXAorCS5lbmQgeG9yX2FscGhhXzMJCQkJCVxuXAorCQkJCQkJCQlcblwKKwkuYWxpZ24gMwkJCQkJCVxuXAorCS5lbnQgeG9yX2FscGhhXzQJCQkJCVxuXAoreG9yX2FscGhhXzQ6CQkJCQkJCVxuXAorCS5wcm9sb2d1ZSAwCQkJCQkJXG5cCisJc3JsICQxNiwgNiwgJDE2CQkJCQkJXG5cCisJLmFsaWduIDQJCQkJCQlcblwKKzQ6CQkJCQkJCQlcblwKKwlsZHEgJDAsMCgkMTcpCQkJCQkJXG5cCisJbGRxICQxLDAoJDE4KQkJCQkJCVxuXAorCWxkcSAkMiwwKCQxOSkJCQkJCQlcblwKKwlsZHEgJDMsMCgkMjApCQkJCQkJXG5cCisJCQkJCQkJCVxuXAorCWxkcSAkNCw4KCQxNykJCQkJCQlcblwKKwlsZHEgJDUsOCgkMTgpCQkJCQkJXG5cCisJbGRxICQ2LDgoJDE5KQkJCQkJCVxuXAorCWxkcSAkNyw4KCQyMCkJCQkJCQlcblwKKwkJCQkJCQkJXG5cCisJbGRxICQyMSwxNigkMTcpCQkJCQkJXG5cCisJbGRxICQyMiwxNigkMTgpCQkJCQkJXG5cCisJbGRxICQyMywxNigkMTkpCQkJCQkJXG5cCisJbGRxICQyNCwxNigkMjApCQkJCQkJXG5cCisJCQkJCQkJCVxuXAorCWxkcSAkMjUsMjQoJDE3KQkJCQkJCVxuXAorCXhvciAkMCwkMSwkMQkJIyA2IGN5Y2xlcyBmcm9tICQxIGxvYWQJCVxuXAorCWxkcSAkMjcsMjQoJDE4KQkJCQkJCVxuXAorCXhvciAkMiwkMywkMwkJIyA2IGN5Y2xlcyBmcm9tICQzIGxvYWQJCVxuXAorCQkJCQkJCQlcblwKKwlsZHEgJDAsMjQoJDE5KQkJCQkJCVxuXAorCXhvciAkMSwkMywkMwkJCQkJCVxuXAorCWxkcSAkMSwyNCgkMjApCQkJCQkJXG5cCisJeG9yICQ0LCQ1LCQ1CQkjIDcgY3ljbGVzIGZyb20gJDUgbG9hZAkJXG5cCisJCQkJCQkJCVxuXAorCXN0cSAkMywwKCQxNykJCQkJCQlcblwKKwl4b3IgJDYsJDcsJDcJCQkJCQlcblwKKwl4b3IgJDIxLCQyMiwkMjIJCSMgNyBjeWNsZXMgZnJvbSAkMjIgbG9hZAlcblwKKwl4b3IgJDUsJDcsJDcJCQkJCQlcblwKKwkJCQkJCQkJXG5cCisJc3RxICQ3LDgoJDE3KQkJCQkJCVxuXAorCXhvciAkMjMsJDI0LCQyNAkJIyA3IGN5Y2xlcyBmcm9tICQyNCBsb2FkCVxuXAorCWxkcSAkMiwzMigkMTcpCQkJCQkJXG5cCisJeG9yICQyMiwkMjQsJDI0CQkJCQkJXG5cCisJCQkJCQkJCVxuXAorCWxkcSAkMywzMigkMTgpCQkJCQkJXG5cCisJbGRxICQ0LDMyKCQxOSkJCQkJCQlcblwKKwlsZHEgJDUsMzIoJDIwKQkJCQkJCVxuXAorCXhvciAkMjUsJDI3LCQyNwkJIyA4IGN5Y2xlcyBmcm9tICQyNyBsb2FkCVxuXAorCQkJCQkJCQlcblwKKwlsZHEgJDYsNDAoJDE3KQkJCQkJCVxuXAorCWxkcSAkNyw0MCgkMTgpCQkJCQkJXG5cCisJbGRxICQyMSw0MCgkMTkpCQkJCQkJXG5cCisJbGRxICQyMiw0MCgkMjApCQkJCQkJXG5cCisJCQkJCQkJCVxuXAorCXN0cSAkMjQsMTYoJDE3KQkJCQkJCVxuXAorCXhvciAkMCwkMSwkMQkJIyA5IGN5Y2xlcyBmcm9tICQxIGxvYWQJCVxuXAorCXhvciAkMiwkMywkMwkJIyA1IGN5Y2xlcyBmcm9tICQzIGxvYWQJCVxuXAorCXhvciAkMjcsJDEsJDEJCQkJCQlcblwKKwkJCQkJCQkJXG5cCisJc3RxICQxLDI0KCQxNykJCQkJCQlcblwKKwl4b3IgJDQsJDUsJDUJCSMgNSBjeWNsZXMgZnJvbSAkNSBsb2FkCQlcblwKKwlsZHEgJDIzLDQ4KCQxNykJCQkJCQlcblwKKwlsZHEgJDI0LDQ4KCQxOCkJCQkJCQlcblwKKwkJCQkJCQkJXG5cCisJbGRxICQyNSw0OCgkMTkpCQkJCQkJXG5cCisJeG9yICQzLCQ1LCQ1CQkJCQkJXG5cCisJbGRxICQyNyw0OCgkMjApCQkJCQkJXG5cCisJbGRxICQwLDU2KCQxNykJCQkJCQlcblwKKwkJCQkJCQkJXG5cCisJbGRxICQxLDU2KCQxOCkJCQkJCQlcblwKKwlsZHEgJDIsNTYoJDE5KQkJCQkJCVxuXAorCXhvciAkNiwkNywkNwkJIyA4IGN5Y2xlcyBmcm9tICQ2IGxvYWQJCVxuXAorCWxkcSAkMyw1NigkMjApCQkJCQkJXG5cCisJCQkJCQkJCVxuXAorCXN0cSAkNSwzMigkMTcpCQkJCQkJXG5cCisJeG9yICQyMSwkMjIsJDIyCQkjIDggY3ljbGVzIGZyb20gJDIyIGxvYWQJXG5cCisJeG9yICQ3LCQyMiwkMjIJCQkJCQlcblwKKwl4b3IgJDIzLCQyNCwkMjQJCSMgNSBjeWNsZXMgZnJvbSAkMjQgbG9hZAlcblwKKwkJCQkJCQkJXG5cCisJc3RxICQyMiw0MCgkMTcpCQkJCQkJXG5cCisJeG9yICQyNSwkMjcsJDI3CQkjIDUgY3ljbGVzIGZyb20gJDI3IGxvYWQJXG5cCisJeG9yICQyNCwkMjcsJDI3CQkJCQkJXG5cCisJeG9yICQwLCQxLCQxCQkjIDUgY3ljbGVzIGZyb20gJDEgbG9hZAkJXG5cCisJCQkJCQkJCVxuXAorCXN0cSAkMjcsNDgoJDE3KQkJCQkJCVxuXAorCXhvciAkMiwkMywkMwkJIyA0IGN5Y2xlcyBmcm9tICQzIGxvYWQJCVxuXAorCXhvciAkMSwkMywkMwkJCQkJCVxuXAorCXN1YnEgJDE2LDEsJDE2CQkJCQkJXG5cCisJCQkJCQkJCVxuXAorCXN0cSAkMyw1NigkMTcpCQkJCQkJXG5cCisJYWRkcSAkMjAsNjQsJDIwCQkJCQkJXG5cCisJYWRkcSAkMTksNjQsJDE5CQkJCQkJXG5cCisJYWRkcSAkMTgsNjQsJDE4CQkJCQkJXG5cCisJCQkJCQkJCVxuXAorCWFkZHEgJDE3LDY0LCQxNwkJCQkJCVxuXAorCWJndCAkMTYsNGIJCQkJCQlcblwKKwlyZXQJCQkJCQkJXG5cCisJLmVuZCB4b3JfYWxwaGFfNAkJCQkJXG5cCisJCQkJCQkJCVxuXAorCS5hbGlnbiAzCQkJCQkJXG5cCisJLmVudCB4b3JfYWxwaGFfNQkJCQkJXG5cCit4b3JfYWxwaGFfNToJCQkJCQkJXG5cCisJLnByb2xvZ3VlIDAJCQkJCQlcblwKKwlzcmwgJDE2LCA2LCAkMTYJCQkJCQlcblwKKwkuYWxpZ24gNAkJCQkJCVxuXAorNToJCQkJCQkJCVxuXAorCWxkcSAkMCwwKCQxNykJCQkJCQlcblwKKwlsZHEgJDEsMCgkMTgpCQkJCQkJXG5cCisJbGRxICQyLDAoJDE5KQkJCQkJCVxuXAorCWxkcSAkMywwKCQyMCkJCQkJCQlcblwKKwkJCQkJCQkJXG5cCisJbGRxICQ0LDAoJDIxKQkJCQkJCVxuXAorCWxkcSAkNSw4KCQxNykJCQkJCQlcblwKKwlsZHEgJDYsOCgkMTgpCQkJCQkJXG5cCisJbGRxICQ3LDgoJDE5KQkJCQkJCVxuXAorCQkJCQkJCQlcblwKKwlsZHEgJDIyLDgoJDIwKQkJCQkJCVxuXAorCWxkcSAkMjMsOCgkMjEpCQkJCQkJXG5cCisJbGRxICQyNCwxNigkMTcpCQkJCQkJXG5cCisJbGRxICQyNSwxNigkMTgpCQkJCQkJXG5cCisJCQkJCQkJCVxuXAorCWxkcSAkMjcsMTYoJDE5KQkJCQkJCVxuXAorCXhvciAkMCwkMSwkMQkJIyA2IGN5Y2xlcyBmcm9tICQxIGxvYWQJCVxuXAorCWxkcSAkMjgsMTYoJDIwKQkJCQkJCVxuXAorCXhvciAkMiwkMywkMwkJIyA2IGN5Y2xlcyBmcm9tICQzIGxvYWQJCVxuXAorCQkJCQkJCQlcblwKKwlsZHEgJDAsMTYoJDIxKQkJCQkJCVxuXAorCXhvciAkMSwkMywkMwkJCQkJCVxuXAorCWxkcSAkMSwyNCgkMTcpCQkJCQkJXG5cCisJeG9yICQzLCQ0LCQ0CQkjIDcgY3ljbGVzIGZyb20gJDQgbG9hZAkJXG5cCisJCQkJCQkJCVxuXAorCXN0cSAkNCwwKCQxNykJCQkJCQlcblwKKwl4b3IgJDUsJDYsJDYJCSMgNyBjeWNsZXMgZnJvbSAkNiBsb2FkCQlcblwKKwl4b3IgJDcsJDIyLCQyMgkJIyA3IGN5Y2xlcyBmcm9tICQyMiBsb2FkCVxuXAorCXhvciAkNiwkMjMsJDIzCQkjIDcgY3ljbGVzIGZyb20gJDIzIGxvYWQJXG5cCisJCQkJCQkJCVxuXAorCWxkcSAkMiwyNCgkMTgpCQkJCQkJXG5cCisJeG9yICQyMiwkMjMsJDIzCQkJCQkJXG5cCisJbGRxICQzLDI0KCQxOSkJCQkJCQlcblwKKwl4b3IgJDI0LCQyNSwkMjUJCSMgOCBjeWNsZXMgZnJvbSAkMjUgbG9hZAlcblwKKwkJCQkJCQkJXG5cCisJc3RxICQyMyw4KCQxNykJCQkJCQlcblwKKwl4b3IgJDI1LCQyNywkMjcJCSMgOCBjeWNsZXMgZnJvbSAkMjcgbG9hZAlcblwKKwlsZHEgJDQsMjQoJDIwKQkJCQkJCVxuXAorCXhvciAkMjgsJDAsJDAJCSMgNyBjeWNsZXMgZnJvbSAkMCBsb2FkCQlcblwKKwkJCQkJCQkJXG5cCisJbGRxICQ1LDI0KCQyMSkJCQkJCQlcblwKKwl4b3IgJDI3LCQwLCQwCQkJCQkJXG5cCisJbGRxICQ2LDMyKCQxNykJCQkJCQlcblwKKwlsZHEgJDcsMzIoJDE4KQkJCQkJCVxuXAorCQkJCQkJCQlcblwKKwlzdHEgJDAsMTYoJDE3KQkJCQkJCVxuXAorCXhvciAkMSwkMiwkMgkJIyA2IGN5Y2xlcyBmcm9tICQyIGxvYWQJCVxuXAorCWxkcSAkMjIsMzIoJDE5KQkJCQkJCVxuXAorCXhvciAkMywkNCwkNAkJIyA0IGN5Y2xlcyBmcm9tICQ0IGxvYWQJCVxuXAorCQkJCQkJCQlcblwKKwlsZHEgJDIzLDMyKCQyMCkJCQkJCQlcblwKKwl4b3IgJDIsJDQsJDQJCQkJCQlcblwKKwlsZHEgJDI0LDMyKCQyMSkJCQkJCQlcblwKKwlsZHEgJDI1LDQwKCQxNykJCQkJCQlcblwKKwkJCQkJCQkJXG5cCisJbGRxICQyNyw0MCgkMTgpCQkJCQkJXG5cCisJbGRxICQyOCw0MCgkMTkpCQkJCQkJXG5cCisJbGRxICQwLDQwKCQyMCkJCQkJCQlcblwKKwl4b3IgJDQsJDUsJDUJCSMgNyBjeWNsZXMgZnJvbSAkNSBsb2FkCQlcblwKKwkJCQkJCQkJXG5cCisJc3RxICQ1LDI0KCQxNykJCQkJCQlcblwKKwl4b3IgJDYsJDcsJDcJCSMgNyBjeWNsZXMgZnJvbSAkNyBsb2FkCQlcblwKKwlsZHEgJDEsNDAoJDIxKQkJCQkJCVxuXAorCWxkcSAkMiw0OCgkMTcpCQkJCQkJXG5cCisJCQkJCQkJCVxuXAorCWxkcSAkMyw0OCgkMTgpCQkJCQkJXG5cCisJeG9yICQ3LCQyMiwkMjIJCSMgNyBjeWNsZXMgZnJvbSAkMjIgbG9hZAlcblwKKwlsZHEgJDQsNDgoJDE5KQkJCQkJCVxuXAorCXhvciAkMjMsJDI0LCQyNAkJIyA2IGN5Y2xlcyBmcm9tICQyNCBsb2FkCVxuXAorCQkJCQkJCQlcblwKKwlsZHEgJDUsNDgoJDIwKQkJCQkJCVxuXAorCXhvciAkMjIsJDI0LCQyNAkJCQkJCVxuXAorCWxkcSAkNiw0OCgkMjEpCQkJCQkJXG5cCisJeG9yICQyNSwkMjcsJDI3CQkjIDcgY3ljbGVzIGZyb20gJDI3IGxvYWQJXG5cCisJCQkJCQkJCVxuXAorCXN0cSAkMjQsMzIoJDE3KQkJCQkJCVxuXAorCXhvciAkMjcsJDI4LCQyOAkJIyA4IGN5Y2xlcyBmcm9tICQyOCBsb2FkCVxuXAorCWxkcSAkNyw1NigkMTcpCQkJCQkJXG5cCisJeG9yICQwLCQxLCQxCQkjIDYgY3ljbGVzIGZyb20gJDEgbG9hZAkJXG5cCisJCQkJCQkJCVxuXAorCWxkcSAkMjIsNTYoJDE4KQkJCQkJCVxuXAorCWxkcSAkMjMsNTYoJDE5KQkJCQkJCVxuXAorCWxkcSAkMjQsNTYoJDIwKQkJCQkJCVxuXAorCWxkcSAkMjUsNTYoJDIxKQkJCQkJCVxuXAorCQkJCQkJCQlcblwKKwl4b3IgJDI4LCQxLCQxCQkJCQkJXG5cCisJeG9yICQyLCQzLCQzCQkjIDkgY3ljbGVzIGZyb20gJDMgbG9hZAkJXG5cCisJeG9yICQzLCQ0LCQ0CQkjIDkgY3ljbGVzIGZyb20gJDQgbG9hZAkJXG5cCisJeG9yICQ1LCQ2LCQ2CQkjIDggY3ljbGVzIGZyb20gJDYgbG9hZAkJXG5cCisJCQkJCQkJCVxuXAorCXN0cSAkMSw0MCgkMTcpCQkJCQkJXG5cCisJeG9yICQ0LCQ2LCQ2CQkJCQkJXG5cCisJeG9yICQ3LCQyMiwkMjIJCSMgNyBjeWNsZXMgZnJvbSAkMjIgbG9hZAlcblwKKwl4b3IgJDIzLCQyNCwkMjQJCSMgNiBjeWNsZXMgZnJvbSAkMjQgbG9hZAlcblwKKwkJCQkJCQkJXG5cCisJc3RxICQ2LDQ4KCQxNykJCQkJCQlcblwKKwl4b3IgJDIyLCQyNCwkMjQJCQkJCQlcblwKKwlzdWJxICQxNiwxLCQxNgkJCQkJCVxuXAorCXhvciAkMjQsJDI1LCQyNQkJIyA4IGN5Y2xlcyBmcm9tICQyNSBsb2FkCVxuXAorCQkJCQkJCQlcblwKKwlzdHEgJDI1LDU2KCQxNykJCQkJCQlcblwKKwlhZGRxICQyMSw2NCwkMjEJCQkJCQlcblwKKwlhZGRxICQyMCw2NCwkMjAJCQkJCQlcblwKKwlhZGRxICQxOSw2NCwkMTkJCQkJCQlcblwKKwkJCQkJCQkJXG5cCisJYWRkcSAkMTgsNjQsJDE4CQkJCQkJXG5cCisJYWRkcSAkMTcsNjQsJDE3CQkJCQkJXG5cCisJYmd0ICQxNiw1YgkJCQkJCVxuXAorCXJldAkJCQkJCQlcblwKKwkuZW5kIHhvcl9hbHBoYV81CQkJCQlcblwKKwkJCQkJCQkJXG5cCisJLmFsaWduIDMJCQkJCQlcblwKKwkuZW50IHhvcl9hbHBoYV9wcmVmZXRjaF8yCQkJCVxuXAoreG9yX2FscGhhX3ByZWZldGNoXzI6CQkJCQkJXG5cCisJLnByb2xvZ3VlIDAJCQkJCQlcblwKKwlzcmwgJDE2LCA2LCAkMTYJCQkJCQlcblwKKwkJCQkJCQkJXG5cCisJbGRxICQzMSwgMCgkMTcpCQkJCQkJXG5cCisJbGRxICQzMSwgMCgkMTgpCQkJCQkJXG5cCisJCQkJCQkJCVxuXAorCWxkcSAkMzEsIDY0KCQxNykJCQkJCVxuXAorCWxkcSAkMzEsIDY0KCQxOCkJCQkJCVxuXAorCQkJCQkJCQlcblwKKwlsZHEgJDMxLCAxMjgoJDE3KQkJCQkJXG5cCisJbGRxICQzMSwgMTI4KCQxOCkJCQkJCVxuXAorCQkJCQkJCQlcblwKKwlsZHEgJDMxLCAxOTIoJDE3KQkJCQkJXG5cCisJbGRxICQzMSwgMTkyKCQxOCkJCQkJCVxuXAorCS5hbGlnbiA0CQkJCQkJXG5cCisyOgkJCQkJCQkJXG5cCisJbGRxICQwLDAoJDE3KQkJCQkJCVxuXAorCWxkcSAkMSwwKCQxOCkJCQkJCQlcblwKKwlsZHEgJDIsOCgkMTcpCQkJCQkJXG5cCisJbGRxICQzLDgoJDE4KQkJCQkJCVxuXAorCQkJCQkJCQlcblwKKwlsZHEgJDQsMTYoJDE3KQkJCQkJCVxuXAorCWxkcSAkNSwxNigkMTgpCQkJCQkJXG5cCisJbGRxICQ2LDI0KCQxNykJCQkJCQlcblwKKwlsZHEgJDcsMjQoJDE4KQkJCQkJCVxuXAorCQkJCQkJCQlcblwKKwlsZHEgJDE5LDMyKCQxNykJCQkJCQlcblwKKwlsZHEgJDIwLDMyKCQxOCkJCQkJCQlcblwKKwlsZHEgJDIxLDQwKCQxNykJCQkJCQlcblwKKwlsZHEgJDIyLDQwKCQxOCkJCQkJCQlcblwKKwkJCQkJCQkJXG5cCisJbGRxICQyMyw0OCgkMTcpCQkJCQkJXG5cCisJbGRxICQyNCw0OCgkMTgpCQkJCQkJXG5cCisJbGRxICQyNSw1NigkMTcpCQkJCQkJXG5cCisJbGRxICQyNyw1NigkMTgpCQkJCQkJXG5cCisJCQkJCQkJCVxuXAorCWxkcSAkMzEsMjU2KCQxNykJCQkJCVxuXAorCXhvciAkMCwkMSwkMAkJIyA4IGN5Y2xlcyBmcm9tICQxIGxvYWQJCVxuXAorCWxkcSAkMzEsMjU2KCQxOCkJCQkJCVxuXAorCXhvciAkMiwkMywkMgkJCQkJCVxuXAorCQkJCQkJCQlcblwKKwlzdHEgJDAsMCgkMTcpCQkJCQkJXG5cCisJeG9yICQ0LCQ1LCQ0CQkJCQkJXG5cCisJc3RxICQyLDgoJDE3KQkJCQkJCVxuXAorCXhvciAkNiwkNywkNgkJCQkJCVxuXAorCQkJCQkJCQlcblwKKwlzdHEgJDQsMTYoJDE3KQkJCQkJCVxuXAorCXhvciAkMTksJDIwLCQxOQkJCQkJCVxuXAorCXN0cSAkNiwyNCgkMTcpCQkJCQkJXG5cCisJeG9yICQyMSwkMjIsJDIxCQkJCQkJXG5cCisJCQkJCQkJCVxuXAorCXN0cSAkMTksMzIoJDE3KQkJCQkJCVxuXAorCXhvciAkMjMsJDI0LCQyMwkJCQkJCVxuXAorCXN0cSAkMjEsNDAoJDE3KQkJCQkJCVxuXAorCXhvciAkMjUsJDI3LCQyNQkJCQkJCVxuXAorCQkJCQkJCQlcblwKKwlzdHEgJDIzLDQ4KCQxNykJCQkJCQlcblwKKwlzdWJxICQxNiwxLCQxNgkJCQkJCVxuXAorCXN0cSAkMjUsNTYoJDE3KQkJCQkJCVxuXAorCWFkZHEgJDE3LDY0LCQxNwkJCQkJCVxuXAorCQkJCQkJCQlcblwKKwlhZGRxICQxOCw2NCwkMTgJCQkJCQlcblwKKwliZ3QgJDE2LDJiCQkJCQkJXG5cCisJcmV0CQkJCQkJCVxuXAorCS5lbmQgeG9yX2FscGhhX3ByZWZldGNoXzIJCQkJXG5cCisJCQkJCQkJCVxuXAorCS5hbGlnbiAzCQkJCQkJXG5cCisJLmVudCB4b3JfYWxwaGFfcHJlZmV0Y2hfMwkJCQlcblwKK3hvcl9hbHBoYV9wcmVmZXRjaF8zOgkJCQkJCVxuXAorCS5wcm9sb2d1ZSAwCQkJCQkJXG5cCisJc3JsICQxNiwgNiwgJDE2CQkJCQkJXG5cCisJCQkJCQkJCVxuXAorCWxkcSAkMzEsIDAoJDE3KQkJCQkJCVxuXAorCWxkcSAkMzEsIDAoJDE4KQkJCQkJCVxuXAorCWxkcSAkMzEsIDAoJDE5KQkJCQkJCVxuXAorCQkJCQkJCQlcblwKKwlsZHEgJDMxLCA2NCgkMTcpCQkJCQlcblwKKwlsZHEgJDMxLCA2NCgkMTgpCQkJCQlcblwKKwlsZHEgJDMxLCA2NCgkMTkpCQkJCQlcblwKKwkJCQkJCQkJXG5cCisJbGRxICQzMSwgMTI4KCQxNykJCQkJCVxuXAorCWxkcSAkMzEsIDEyOCgkMTgpCQkJCQlcblwKKwlsZHEgJDMxLCAxMjgoJDE5KQkJCQkJXG5cCisJCQkJCQkJCVxuXAorCWxkcSAkMzEsIDE5MigkMTcpCQkJCQlcblwKKwlsZHEgJDMxLCAxOTIoJDE4KQkJCQkJXG5cCisJbGRxICQzMSwgMTkyKCQxOSkJCQkJCVxuXAorCS5hbGlnbiA0CQkJCQkJXG5cCiszOgkJCQkJCQkJXG5cCisJbGRxICQwLDAoJDE3KQkJCQkJCVxuXAorCWxkcSAkMSwwKCQxOCkJCQkJCQlcblwKKwlsZHEgJDIsMCgkMTkpCQkJCQkJXG5cCisJbGRxICQzLDgoJDE3KQkJCQkJCVxuXAorCQkJCQkJCQlcblwKKwlsZHEgJDQsOCgkMTgpCQkJCQkJXG5cCisJbGRxICQ2LDE2KCQxNykJCQkJCQlcblwKKwlsZHEgJDcsMTYoJDE4KQkJCQkJCVxuXAorCWxkcSAkMjEsMjQoJDE3KQkJCQkJCVxuXAorCQkJCQkJCQlcblwKKwlsZHEgJDIyLDI0KCQxOCkJCQkJCQlcblwKKwlsZHEgJDI0LDMyKCQxNykJCQkJCQlcblwKKwlsZHEgJDI1LDMyKCQxOCkJCQkJCQlcblwKKwlsZHEgJDUsOCgkMTkpCQkJCQkJXG5cCisJCQkJCQkJCVxuXAorCWxkcSAkMjAsMTYoJDE5KQkJCQkJCVxuXAorCWxkcSAkMjMsMjQoJDE5KQkJCQkJCVxuXAorCWxkcSAkMjcsMzIoJDE5KQkJCQkJCVxuXAorCW5vcAkJCQkJCQlcblwKKwkJCQkJCQkJXG5cCisJeG9yICQwLCQxLCQxCQkjIDggY3ljbGVzIGZyb20gJDAgbG9hZAkJXG5cCisJeG9yICQzLCQ0LCQ0CQkjIDcgY3ljbGVzIGZyb20gJDQgbG9hZAkJXG5cCisJeG9yICQ2LCQ3LCQ3CQkjIDYgY3ljbGVzIGZyb20gJDcgbG9hZAkJXG5cCisJeG9yICQyMSwkMjIsJDIyCQkjIDUgY3ljbGVzIGZyb20gJDIyIGxvYWQJXG5cCisJCQkJCQkJCVxuXAorCXhvciAkMSwkMiwkMgkJIyA5IGN5Y2xlcyBmcm9tICQyIGxvYWQJCVxuXAorCXhvciAkMjQsJDI1LCQyNQkJIyA1IGN5Y2xlcyBmcm9tICQyNSBsb2FkCVxuXAorCXN0cSAkMiwwKCQxNykJCQkJCQlcblwKKwl4b3IgJDQsJDUsJDUJCSMgNiBjeWNsZXMgZnJvbSAkNSBsb2FkCQlcblwKKwkJCQkJCQkJXG5cCisJc3RxICQ1LDgoJDE3KQkJCQkJCVxuXAorCXhvciAkNywkMjAsJDIwCQkjIDcgY3ljbGVzIGZyb20gJDIwIGxvYWQJXG5cCisJc3RxICQyMCwxNigkMTcpCQkJCQkJXG5cCisJeG9yICQyMiwkMjMsJDIzCQkjIDcgY3ljbGVzIGZyb20gJDIzIGxvYWQJXG5cCisJCQkJCQkJCVxuXAorCXN0cSAkMjMsMjQoJDE3KQkJCQkJCVxuXAorCXhvciAkMjUsJDI3LCQyNwkJIyA3IGN5Y2xlcyBmcm9tICQyNyBsb2FkCVxuXAorCXN0cSAkMjcsMzIoJDE3KQkJCQkJCVxuXAorCW5vcAkJCQkJCQlcblwKKwkJCQkJCQkJXG5cCisJbGRxICQwLDQwKCQxNykJCQkJCQlcblwKKwlsZHEgJDEsNDAoJDE4KQkJCQkJCVxuXAorCWxkcSAkMyw0OCgkMTcpCQkJCQkJXG5cCisJbGRxICQ0LDQ4KCQxOCkJCQkJCQlcblwKKwkJCQkJCQkJXG5cCisJbGRxICQ2LDU2KCQxNykJCQkJCQlcblwKKwlsZHEgJDcsNTYoJDE4KQkJCQkJCVxuXAorCWxkcSAkMiw0MCgkMTkpCQkJCQkJXG5cCisJbGRxICQ1LDQ4KCQxOSkJCQkJCQlcblwKKwkJCQkJCQkJXG5cCisJbGRxICQyMCw1NigkMTkpCQkJCQkJXG5cCisJbGRxICQzMSwyNTYoJDE3KQkJCQkJXG5cCisJbGRxICQzMSwyNTYoJDE4KQkJCQkJXG5cCisJbGRxICQzMSwyNTYoJDE5KQkJCQkJXG5cCisJCQkJCQkJCVxuXAorCXhvciAkMCwkMSwkMQkJIyA2IGN5Y2xlcyBmcm9tICQxIGxvYWQJCVxuXAorCXhvciAkMywkNCwkNAkJIyA1IGN5Y2xlcyBmcm9tICQ0IGxvYWQJCVxuXAorCXhvciAkNiwkNywkNwkJIyA1IGN5Y2xlcyBmcm9tICQ3IGxvYWQJCVxuXAorCXhvciAkMSwkMiwkMgkJIyA0IGN5Y2xlcyBmcm9tICQyIGxvYWQJCVxuXAorCQkJCQkJCQlcblwKKwl4b3IgJDQsJDUsJDUJCSMgNSBjeWNsZXMgZnJvbSAkNSBsb2FkCQlcblwKKwl4b3IgJDcsJDIwLCQyMAkJIyA0IGN5Y2xlcyBmcm9tICQyMCBsb2FkCVxuXAorCXN0cSAkMiw0MCgkMTcpCQkJCQkJXG5cCisJc3VicSAkMTYsMSwkMTYJCQkJCQlcblwKKwkJCQkJCQkJXG5cCisJc3RxICQ1LDQ4KCQxNykJCQkJCQlcblwKKwlhZGRxICQxOSw2NCwkMTkJCQkJCQlcblwKKwlzdHEgJDIwLDU2KCQxNykJCQkJCQlcblwKKwlhZGRxICQxOCw2NCwkMTgJCQkJCQlcblwKKwkJCQkJCQkJXG5cCisJYWRkcSAkMTcsNjQsJDE3CQkJCQkJXG5cCisJYmd0ICQxNiwzYgkJCQkJCVxuXAorCXJldAkJCQkJCQlcblwKKwkuZW5kIHhvcl9hbHBoYV9wcmVmZXRjaF8zCQkJCVxuXAorCQkJCQkJCQlcblwKKwkuYWxpZ24gMwkJCQkJCVxuXAorCS5lbnQgeG9yX2FscGhhX3ByZWZldGNoXzQJCQkJXG5cCit4b3JfYWxwaGFfcHJlZmV0Y2hfNDoJCQkJCQlcblwKKwkucHJvbG9ndWUgMAkJCQkJCVxuXAorCXNybCAkMTYsIDYsICQxNgkJCQkJCVxuXAorCQkJCQkJCQlcblwKKwlsZHEgJDMxLCAwKCQxNykJCQkJCQlcblwKKwlsZHEgJDMxLCAwKCQxOCkJCQkJCQlcblwKKwlsZHEgJDMxLCAwKCQxOSkJCQkJCQlcblwKKwlsZHEgJDMxLCAwKCQyMCkJCQkJCQlcblwKKwkJCQkJCQkJXG5cCisJbGRxICQzMSwgNjQoJDE3KQkJCQkJXG5cCisJbGRxICQzMSwgNjQoJDE4KQkJCQkJXG5cCisJbGRxICQzMSwgNjQoJDE5KQkJCQkJXG5cCisJbGRxICQzMSwgNjQoJDIwKQkJCQkJXG5cCisJCQkJCQkJCVxuXAorCWxkcSAkMzEsIDEyOCgkMTcpCQkJCQlcblwKKwlsZHEgJDMxLCAxMjgoJDE4KQkJCQkJXG5cCisJbGRxICQzMSwgMTI4KCQxOSkJCQkJCVxuXAorCWxkcSAkMzEsIDEyOCgkMjApCQkJCQlcblwKKwkJCQkJCQkJXG5cCisJbGRxICQzMSwgMTkyKCQxNykJCQkJCVxuXAorCWxkcSAkMzEsIDE5MigkMTgpCQkJCQlcblwKKwlsZHEgJDMxLCAxOTIoJDE5KQkJCQkJXG5cCisJbGRxICQzMSwgMTkyKCQyMCkJCQkJCVxuXAorCS5hbGlnbiA0CQkJCQkJXG5cCis0OgkJCQkJCQkJXG5cCisJbGRxICQwLDAoJDE3KQkJCQkJCVxuXAorCWxkcSAkMSwwKCQxOCkJCQkJCQlcblwKKwlsZHEgJDIsMCgkMTkpCQkJCQkJXG5cCisJbGRxICQzLDAoJDIwKQkJCQkJCVxuXAorCQkJCQkJCQlcblwKKwlsZHEgJDQsOCgkMTcpCQkJCQkJXG5cCisJbGRxICQ1LDgoJDE4KQkJCQkJCVxuXAorCWxkcSAkNiw4KCQxOSkJCQkJCQlcblwKKwlsZHEgJDcsOCgkMjApCQkJCQkJXG5cCisJCQkJCQkJCVxuXAorCWxkcSAkMjEsMTYoJDE3KQkJCQkJCVxuXAorCWxkcSAkMjIsMTYoJDE4KQkJCQkJCVxuXAorCWxkcSAkMjMsMTYoJDE5KQkJCQkJCVxuXAorCWxkcSAkMjQsMTYoJDIwKQkJCQkJCVxuXAorCQkJCQkJCQlcblwKKwlsZHEgJDI1LDI0KCQxNykJCQkJCQlcblwKKwl4b3IgJDAsJDEsJDEJCSMgNiBjeWNsZXMgZnJvbSAkMSBsb2FkCQlcblwKKwlsZHEgJDI3LDI0KCQxOCkJCQkJCQlcblwKKwl4b3IgJDIsJDMsJDMJCSMgNiBjeWNsZXMgZnJvbSAkMyBsb2FkCQlcblwKKwkJCQkJCQkJXG5cCisJbGRxICQwLDI0KCQxOSkJCQkJCQlcblwKKwl4b3IgJDEsJDMsJDMJCQkJCQlcblwKKwlsZHEgJDEsMjQoJDIwKQkJCQkJCVxuXAorCXhvciAkNCwkNSwkNQkJIyA3IGN5Y2xlcyBmcm9tICQ1IGxvYWQJCVxuXAorCQkJCQkJCQlcblwKKwlzdHEgJDMsMCgkMTcpCQkJCQkJXG5cCisJeG9yICQ2LCQ3LCQ3CQkJCQkJXG5cCisJeG9yICQyMSwkMjIsJDIyCQkjIDcgY3ljbGVzIGZyb20gJDIyIGxvYWQJXG5cCisJeG9yICQ1LCQ3LCQ3CQkJCQkJXG5cCisJCQkJCQkJCVxuXAorCXN0cSAkNyw4KCQxNykJCQkJCQlcblwKKwl4b3IgJDIzLCQyNCwkMjQJCSMgNyBjeWNsZXMgZnJvbSAkMjQgbG9hZAlcblwKKwlsZHEgJDIsMzIoJDE3KQkJCQkJCVxuXAorCXhvciAkMjIsJDI0LCQyNAkJCQkJCVxuXAorCQkJCQkJCQlcblwKKwlsZHEgJDMsMzIoJDE4KQkJCQkJCVxuXAorCWxkcSAkNCwzMigkMTkpCQkJCQkJXG5cCisJbGRxICQ1LDMyKCQyMCkJCQkJCQlcblwKKwl4b3IgJDI1LCQyNywkMjcJCSMgOCBjeWNsZXMgZnJvbSAkMjcgbG9hZAlcblwKKwkJCQkJCQkJXG5cCisJbGRxICQ2LDQwKCQxNykJCQkJCQlcblwKKwlsZHEgJDcsNDAoJDE4KQkJCQkJCVxuXAorCWxkcSAkMjEsNDAoJDE5KQkJCQkJCVxuXAorCWxkcSAkMjIsNDAoJDIwKQkJCQkJCVxuXAorCQkJCQkJCQlcblwKKwlzdHEgJDI0LDE2KCQxNykJCQkJCQlcblwKKwl4b3IgJDAsJDEsJDEJCSMgOSBjeWNsZXMgZnJvbSAkMSBsb2FkCQlcblwKKwl4b3IgJDIsJDMsJDMJCSMgNSBjeWNsZXMgZnJvbSAkMyBsb2FkCQlcblwKKwl4b3IgJDI3LCQxLCQxCQkJCQkJXG5cCisJCQkJCQkJCVxuXAorCXN0cSAkMSwyNCgkMTcpCQkJCQkJXG5cCisJeG9yICQ0LCQ1LCQ1CQkjIDUgY3ljbGVzIGZyb20gJDUgbG9hZAkJXG5cCisJbGRxICQyMyw0OCgkMTcpCQkJCQkJXG5cCisJeG9yICQzLCQ1LCQ1CQkJCQkJXG5cCisJCQkJCQkJCVxuXAorCWxkcSAkMjQsNDgoJDE4KQkJCQkJCVxuXAorCWxkcSAkMjUsNDgoJDE5KQkJCQkJCVxuXAorCWxkcSAkMjcsNDgoJDIwKQkJCQkJCVxuXAorCWxkcSAkMCw1NigkMTcpCQkJCQkJXG5cCisJCQkJCQkJCVxuXAorCWxkcSAkMSw1NigkMTgpCQkJCQkJXG5cCisJbGRxICQyLDU2KCQxOSkJCQkJCQlcblwKKwlsZHEgJDMsNTYoJDIwKQkJCQkJCVxuXAorCXhvciAkNiwkNywkNwkJIyA4IGN5Y2xlcyBmcm9tICQ2IGxvYWQJCVxuXAorCQkJCQkJCQlcblwKKwlsZHEgJDMxLDI1NigkMTcpCQkJCQlcblwKKwl4b3IgJDIxLCQyMiwkMjIJCSMgOCBjeWNsZXMgZnJvbSAkMjIgbG9hZAlcblwKKwlsZHEgJDMxLDI1NigkMTgpCQkJCQlcblwKKwl4b3IgJDcsJDIyLCQyMgkJCQkJCVxuXAorCQkJCQkJCQlcblwKKwlsZHEgJDMxLDI1NigkMTkpCQkJCQlcblwKKwl4b3IgJDIzLCQyNCwkMjQJCSMgNiBjeWNsZXMgZnJvbSAkMjQgbG9hZAlcblwKKwlsZHEgJDMxLDI1NigkMjApCQkJCQlcblwKKwl4b3IgJDI1LCQyNywkMjcJCSMgNiBjeWNsZXMgZnJvbSAkMjcgbG9hZAlcblwKKwkJCQkJCQkJXG5cCisJc3RxICQ1LDMyKCQxNykJCQkJCQlcblwKKwl4b3IgJDI0LCQyNywkMjcJCQkJCQlcblwKKwl4b3IgJDAsJDEsJDEJCSMgNyBjeWNsZXMgZnJvbSAkMSBsb2FkCQlcblwKKwl4b3IgJDIsJDMsJDMJCSMgNiBjeWNsZXMgZnJvbSAkMyBsb2FkCQlcblwKKwkJCQkJCQkJXG5cCisJc3RxICQyMiw0MCgkMTcpCQkJCQkJXG5cCisJeG9yICQxLCQzLCQzCQkJCQkJXG5cCisJc3RxICQyNyw0OCgkMTcpCQkJCQkJXG5cCisJc3VicSAkMTYsMSwkMTYJCQkJCQlcblwKKwkJCQkJCQkJXG5cCisJc3RxICQzLDU2KCQxNykJCQkJCQlcblwKKwlhZGRxICQyMCw2NCwkMjAJCQkJCQlcblwKKwlhZGRxICQxOSw2NCwkMTkJCQkJCQlcblwKKwlhZGRxICQxOCw2NCwkMTgJCQkJCQlcblwKKwkJCQkJCQkJXG5cCisJYWRkcSAkMTcsNjQsJDE3CQkJCQkJXG5cCisJYmd0ICQxNiw0YgkJCQkJCVxuXAorCXJldAkJCQkJCQlcblwKKwkuZW5kIHhvcl9hbHBoYV9wcmVmZXRjaF80CQkJCVxuXAorCQkJCQkJCQlcblwKKwkuYWxpZ24gMwkJCQkJCVxuXAorCS5lbnQgeG9yX2FscGhhX3ByZWZldGNoXzUJCQkJXG5cCit4b3JfYWxwaGFfcHJlZmV0Y2hfNToJCQkJCQlcblwKKwkucHJvbG9ndWUgMAkJCQkJCVxuXAorCXNybCAkMTYsIDYsICQxNgkJCQkJCVxuXAorCQkJCQkJCQlcblwKKwlsZHEgJDMxLCAwKCQxNykJCQkJCQlcblwKKwlsZHEgJDMxLCAwKCQxOCkJCQkJCQlcblwKKwlsZHEgJDMxLCAwKCQxOSkJCQkJCQlcblwKKwlsZHEgJDMxLCAwKCQyMCkJCQkJCQlcblwKKwlsZHEgJDMxLCAwKCQyMSkJCQkJCQlcblwKKwkJCQkJCQkJXG5cCisJbGRxICQzMSwgNjQoJDE3KQkJCQkJXG5cCisJbGRxICQzMSwgNjQoJDE4KQkJCQkJXG5cCisJbGRxICQzMSwgNjQoJDE5KQkJCQkJXG5cCisJbGRxICQzMSwgNjQoJDIwKQkJCQkJXG5cCisJbGRxICQzMSwgNjQoJDIxKQkJCQkJXG5cCisJCQkJCQkJCVxuXAorCWxkcSAkMzEsIDEyOCgkMTcpCQkJCQlcblwKKwlsZHEgJDMxLCAxMjgoJDE4KQkJCQkJXG5cCisJbGRxICQzMSwgMTI4KCQxOSkJCQkJCVxuXAorCWxkcSAkMzEsIDEyOCgkMjApCQkJCQlcblwKKwlsZHEgJDMxLCAxMjgoJDIxKQkJCQkJXG5cCisJCQkJCQkJCVxuXAorCWxkcSAkMzEsIDE5MigkMTcpCQkJCQlcblwKKwlsZHEgJDMxLCAxOTIoJDE4KQkJCQkJXG5cCisJbGRxICQzMSwgMTkyKCQxOSkJCQkJCVxuXAorCWxkcSAkMzEsIDE5MigkMjApCQkJCQlcblwKKwlsZHEgJDMxLCAxOTIoJDIxKQkJCQkJXG5cCisJLmFsaWduIDQJCQkJCQlcblwKKzU6CQkJCQkJCQlcblwKKwlsZHEgJDAsMCgkMTcpCQkJCQkJXG5cCisJbGRxICQxLDAoJDE4KQkJCQkJCVxuXAorCWxkcSAkMiwwKCQxOSkJCQkJCQlcblwKKwlsZHEgJDMsMCgkMjApCQkJCQkJXG5cCisJCQkJCQkJCVxuXAorCWxkcSAkNCwwKCQyMSkJCQkJCQlcblwKKwlsZHEgJDUsOCgkMTcpCQkJCQkJXG5cCisJbGRxICQ2LDgoJDE4KQkJCQkJCVxuXAorCWxkcSAkNyw4KCQxOSkJCQkJCQlcblwKKwkJCQkJCQkJXG5cCisJbGRxICQyMiw4KCQyMCkJCQkJCQlcblwKKwlsZHEgJDIzLDgoJDIxKQkJCQkJCVxuXAorCWxkcSAkMjQsMTYoJDE3KQkJCQkJCVxuXAorCWxkcSAkMjUsMTYoJDE4KQkJCQkJCVxuXAorCQkJCQkJCQlcblwKKwlsZHEgJDI3LDE2KCQxOSkJCQkJCQlcblwKKwl4b3IgJDAsJDEsJDEJCSMgNiBjeWNsZXMgZnJvbSAkMSBsb2FkCQlcblwKKwlsZHEgJDI4LDE2KCQyMCkJCQkJCQlcblwKKwl4b3IgJDIsJDMsJDMJCSMgNiBjeWNsZXMgZnJvbSAkMyBsb2FkCQlcblwKKwkJCQkJCQkJXG5cCisJbGRxICQwLDE2KCQyMSkJCQkJCQlcblwKKwl4b3IgJDEsJDMsJDMJCQkJCQlcblwKKwlsZHEgJDEsMjQoJDE3KQkJCQkJCVxuXAorCXhvciAkMywkNCwkNAkJIyA3IGN5Y2xlcyBmcm9tICQ0IGxvYWQJCVxuXAorCQkJCQkJCQlcblwKKwlzdHEgJDQsMCgkMTcpCQkJCQkJXG5cCisJeG9yICQ1LCQ2LCQ2CQkjIDcgY3ljbGVzIGZyb20gJDYgbG9hZAkJXG5cCisJeG9yICQ3LCQyMiwkMjIJCSMgNyBjeWNsZXMgZnJvbSAkMjIgbG9hZAlcblwKKwl4b3IgJDYsJDIzLCQyMwkJIyA3IGN5Y2xlcyBmcm9tICQyMyBsb2FkCVxuXAorCQkJCQkJCQlcblwKKwlsZHEgJDIsMjQoJDE4KQkJCQkJCVxuXAorCXhvciAkMjIsJDIzLCQyMwkJCQkJCVxuXAorCWxkcSAkMywyNCgkMTkpCQkJCQkJXG5cCisJeG9yICQyNCwkMjUsJDI1CQkjIDggY3ljbGVzIGZyb20gJDI1IGxvYWQJXG5cCisJCQkJCQkJCVxuXAorCXN0cSAkMjMsOCgkMTcpCQkJCQkJXG5cCisJeG9yICQyNSwkMjcsJDI3CQkjIDggY3ljbGVzIGZyb20gJDI3IGxvYWQJXG5cCisJbGRxICQ0LDI0KCQyMCkJCQkJCQlcblwKKwl4b3IgJDI4LCQwLCQwCQkjIDcgY3ljbGVzIGZyb20gJDAgbG9hZAkJXG5cCisJCQkJCQkJCVxuXAorCWxkcSAkNSwyNCgkMjEpCQkJCQkJXG5cCisJeG9yICQyNywkMCwkMAkJCQkJCVxuXAorCWxkcSAkNiwzMigkMTcpCQkJCQkJXG5cCisJbGRxICQ3LDMyKCQxOCkJCQkJCQlcblwKKwkJCQkJCQkJXG5cCisJc3RxICQwLDE2KCQxNykJCQkJCQlcblwKKwl4b3IgJDEsJDIsJDIJCSMgNiBjeWNsZXMgZnJvbSAkMiBsb2FkCQlcblwKKwlsZHEgJDIyLDMyKCQxOSkJCQkJCQlcblwKKwl4b3IgJDMsJDQsJDQJCSMgNCBjeWNsZXMgZnJvbSAkNCBsb2FkCQlcblwKKwkJCQkJCQkJXG5cCisJbGRxICQyMywzMigkMjApCQkJCQkJXG5cCisJeG9yICQyLCQ0LCQ0CQkJCQkJXG5cCisJbGRxICQyNCwzMigkMjEpCQkJCQkJXG5cCisJbGRxICQyNSw0MCgkMTcpCQkJCQkJXG5cCisJCQkJCQkJCVxuXAorCWxkcSAkMjcsNDAoJDE4KQkJCQkJCVxuXAorCWxkcSAkMjgsNDAoJDE5KQkJCQkJCVxuXAorCWxkcSAkMCw0MCgkMjApCQkJCQkJXG5cCisJeG9yICQ0LCQ1LCQ1CQkjIDcgY3ljbGVzIGZyb20gJDUgbG9hZAkJXG5cCisJCQkJCQkJCVxuXAorCXN0cSAkNSwyNCgkMTcpCQkJCQkJXG5cCisJeG9yICQ2LCQ3LCQ3CQkjIDcgY3ljbGVzIGZyb20gJDcgbG9hZAkJXG5cCisJbGRxICQxLDQwKCQyMSkJCQkJCQlcblwKKwlsZHEgJDIsNDgoJDE3KQkJCQkJCVxuXAorCQkJCQkJCQlcblwKKwlsZHEgJDMsNDgoJDE4KQkJCQkJCVxuXAorCXhvciAkNywkMjIsJDIyCQkjIDcgY3ljbGVzIGZyb20gJDIyIGxvYWQJXG5cCisJbGRxICQ0LDQ4KCQxOSkJCQkJCQlcblwKKwl4b3IgJDIzLCQyNCwkMjQJCSMgNiBjeWNsZXMgZnJvbSAkMjQgbG9hZAlcblwKKwkJCQkJCQkJXG5cCisJbGRxICQ1LDQ4KCQyMCkJCQkJCQlcblwKKwl4b3IgJDIyLCQyNCwkMjQJCQkJCQlcblwKKwlsZHEgJDYsNDgoJDIxKQkJCQkJCVxuXAorCXhvciAkMjUsJDI3LCQyNwkJIyA3IGN5Y2xlcyBmcm9tICQyNyBsb2FkCVxuXAorCQkJCQkJCQlcblwKKwlzdHEgJDI0LDMyKCQxNykJCQkJCQlcblwKKwl4b3IgJDI3LCQyOCwkMjgJCSMgOCBjeWNsZXMgZnJvbSAkMjggbG9hZAlcblwKKwlsZHEgJDcsNTYoJDE3KQkJCQkJCVxuXAorCXhvciAkMCwkMSwkMQkJIyA2IGN5Y2xlcyBmcm9tICQxIGxvYWQJCVxuXAorCQkJCQkJCQlcblwKKwlsZHEgJDIyLDU2KCQxOCkJCQkJCQlcblwKKwlsZHEgJDIzLDU2KCQxOSkJCQkJCQlcblwKKwlsZHEgJDI0LDU2KCQyMCkJCQkJCQlcblwKKwlsZHEgJDI1LDU2KCQyMSkJCQkJCQlcblwKKwkJCQkJCQkJXG5cCisJbGRxICQzMSwyNTYoJDE3KQkJCQkJXG5cCisJeG9yICQyOCwkMSwkMQkJCQkJCVxuXAorCWxkcSAkMzEsMjU2KCQxOCkJCQkJCVxuXAorCXhvciAkMiwkMywkMwkJIyA5IGN5Y2xlcyBmcm9tICQzIGxvYWQJCVxuXAorCQkJCQkJCQlcblwKKwlsZHEgJDMxLDI1NigkMTkpCQkJCQlcblwKKwl4b3IgJDMsJDQsJDQJCSMgOSBjeWNsZXMgZnJvbSAkNCBsb2FkCQlcblwKKwlsZHEgJDMxLDI1NigkMjApCQkJCQlcblwKKwl4b3IgJDUsJDYsJDYJCSMgOCBjeWNsZXMgZnJvbSAkNiBsb2FkCQlcblwKKwkJCQkJCQkJXG5cCisJc3RxICQxLDQwKCQxNykJCQkJCQlcblwKKwl4b3IgJDQsJDYsJDYJCQkJCQlcblwKKwl4b3IgJDcsJDIyLCQyMgkJIyA3IGN5Y2xlcyBmcm9tICQyMiBsb2FkCVxuXAorCXhvciAkMjMsJDI0LCQyNAkJIyA2IGN5Y2xlcyBmcm9tICQyNCBsb2FkCVxuXAorCQkJCQkJCQlcblwKKwlzdHEgJDYsNDgoJDE3KQkJCQkJCVxuXAorCXhvciAkMjIsJDI0LCQyNAkJCQkJCVxuXAorCWxkcSAkMzEsMjU2KCQyMSkJCQkJCVxuXAorCXhvciAkMjQsJDI1LCQyNQkJIyA4IGN5Y2xlcyBmcm9tICQyNSBsb2FkCVxuXAorCQkJCQkJCQlcblwKKwlzdHEgJDI1LDU2KCQxNykJCQkJCQlcblwKKwlzdWJxICQxNiwxLCQxNgkJCQkJCVxuXAorCWFkZHEgJDIxLDY0LCQyMQkJCQkJCVxuXAorCWFkZHEgJDIwLDY0LCQyMAkJCQkJCVxuXAorCQkJCQkJCQlcblwKKwlhZGRxICQxOSw2NCwkMTkJCQkJCQlcblwKKwlhZGRxICQxOCw2NCwkMTgJCQkJCQlcblwKKwlhZGRxICQxNyw2NCwkMTcJCQkJCQlcblwKKwliZ3QgJDE2LDViCQkJCQkJXG5cCisJCQkJCQkJCVxuXAorCXJldAkJCQkJCQlcblwKKwkuZW5kIHhvcl9hbHBoYV9wcmVmZXRjaF81CQkJCVxuXAorIik7CisKK3N0YXRpYyBzdHJ1Y3QgeG9yX2Jsb2NrX3RlbXBsYXRlIHhvcl9ibG9ja19hbHBoYSA9IHsKKwkubmFtZQk9ICJhbHBoYSIsCisJLmRvXzIJPSB4b3JfYWxwaGFfMiwKKwkuZG9fMwk9IHhvcl9hbHBoYV8zLAorCS5kb180CT0geG9yX2FscGhhXzQsCisJLmRvXzUJPSB4b3JfYWxwaGFfNSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgeG9yX2Jsb2NrX3RlbXBsYXRlIHhvcl9ibG9ja19hbHBoYV9wcmVmZXRjaCA9IHsKKwkubmFtZQk9ICJhbHBoYSBwcmVmZXRjaCIsCisJLmRvXzIJPSB4b3JfYWxwaGFfcHJlZmV0Y2hfMiwKKwkuZG9fMwk9IHhvcl9hbHBoYV9wcmVmZXRjaF8zLAorCS5kb180CT0geG9yX2FscGhhX3ByZWZldGNoXzQsCisJLmRvXzUJPSB4b3JfYWxwaGFfcHJlZmV0Y2hfNSwKK307CisKKy8qIEZvciBncmlucywgYWxzbyB0ZXN0IHRoZSBnZW5lcmljIHJvdXRpbmVzLiAgKi8KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy94b3IuaD4KKworI3VuZGVmIFhPUl9UUllfVEVNUExBVEVTCisjZGVmaW5lIFhPUl9UUllfVEVNUExBVEVTCQkJCVwKKwlkbyB7CQkJCQkJXAorCQl4b3Jfc3BlZWQoJnhvcl9ibG9ja184cmVncyk7CQlcCisJCXhvcl9zcGVlZCgmeG9yX2Jsb2NrXzMycmVncyk7CQlcCisJCXhvcl9zcGVlZCgmeG9yX2Jsb2NrX2FscGhhKTsJCVwKKwkJeG9yX3NwZWVkKCZ4b3JfYmxvY2tfYWxwaGFfcHJlZmV0Y2gpOwlcCisJfSB3aGlsZSAoMCkKKworLyogRm9yY2UgdGhlIHVzZSBvZiBhbHBoYV9wcmVmZXRjaCBpZiBFVjYsIGFzIGl0IGlzIHNpZ25pZmljYW50bHkKKyAgIGZhc3RlciBpbiB0aGUgY29sZCBjYWNoZSBjYXNlLiAgKi8KKyNkZWZpbmUgWE9SX1NFTEVDVF9URU1QTEFURShGQVNURVNUKSBcCisJKGltcGx2ZXIoKSA9PSBJTVBMVkVSX0VWNiA/ICZ4b3JfYmxvY2tfYWxwaGFfcHJlZmV0Y2ggOiBGQVNURVNUKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2Eub3V0LmggYi9pbmNsdWRlL2FzbS1hcm0vYS5vdXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTVmZTY0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2Eub3V0LmgKQEAgLTAsMCArMSwzOSBAQAorI2lmbmRlZiBfX0FSTV9BX09VVF9IX18KKyNkZWZpbmUgX19BUk1fQV9PVVRfSF9fCisKKyNpbmNsdWRlIDxsaW51eC9wZXJzb25hbGl0eS5oPgorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCitzdHJ1Y3QgZXhlYworeworICBfX3UzMiBhX2luZm87CQkvKiBVc2UgbWFjcm9zIE5fTUFHSUMsIGV0YyBmb3IgYWNjZXNzICovCisgIF9fdTMyIGFfdGV4dDsJCS8qIGxlbmd0aCBvZiB0ZXh0LCBpbiBieXRlcyAqLworICBfX3UzMiBhX2RhdGE7CQkvKiBsZW5ndGggb2YgZGF0YSwgaW4gYnl0ZXMgKi8KKyAgX191MzIgYV9ic3M7CQkvKiBsZW5ndGggb2YgdW5pbml0aWFsaXplZCBkYXRhIGFyZWEgZm9yIGZpbGUsIGluIGJ5dGVzICovCisgIF9fdTMyIGFfc3ltczsJCS8qIGxlbmd0aCBvZiBzeW1ib2wgdGFibGUgZGF0YSBpbiBmaWxlLCBpbiBieXRlcyAqLworICBfX3UzMiBhX2VudHJ5OwkvKiBzdGFydCBhZGRyZXNzICovCisgIF9fdTMyIGFfdHJzaXplOwkvKiBsZW5ndGggb2YgcmVsb2NhdGlvbiBpbmZvIGZvciB0ZXh0LCBpbiBieXRlcyAqLworICBfX3UzMiBhX2Ryc2l6ZTsJLyogbGVuZ3RoIG9mIHJlbG9jYXRpb24gaW5mbyBmb3IgZGF0YSwgaW4gYnl0ZXMgKi8KK307CisKKy8qCisgKiBUaGlzIGlzIGFsd2F5cyB0aGUgc2FtZQorICovCisjZGVmaW5lIE5fVFhUQUREUihhKQkoMHgwMDAwODAwMCkKKworI2RlZmluZSBOX1RSU0laRShhKQkoKGEpLmFfdHJzaXplKQorI2RlZmluZSBOX0RSU0laRShhKQkoKGEpLmFfZHJzaXplKQorI2RlZmluZSBOX1NZTVNJWkUoYSkJKChhKS5hX3N5bXMpCisKKyNkZWZpbmUgTV9BUk0gMTAzCisKKyNpZmRlZiBfX0tFUk5FTF9fCisjZGVmaW5lIFNUQUNLX1RPUAkoKGN1cnJlbnQtPnBlcnNvbmFsaXR5ID09IFBFUl9MSU5VWF8zMkJJVCkgPyBcCisJCQkgVEFTS19TSVpFIDogVEFTS19TSVpFXzI2KQorI2VuZGlmCisKKyNpZm5kZWYgTElCUkFSWV9TVEFSVF9URVhUCisjZGVmaW5lIExJQlJBUllfU1RBUlRfVEVYVAkoMHgwMGMwMDAwMCkKKyNlbmRpZgorCisjZW5kaWYgLyogX19BX09VVF9HTlVfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXBtLmggYi9pbmNsdWRlL2FzbS1hcm0vYXBtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2E1MGViNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcG0uaApAQCAtMCwwICsxLDY1IEBACisvKiAtKi0gbGludXgtYyAtKi0KKyAqCisgKiAoQykgMjAwMyB6ZWNrZUBoYW5kaGVsZHMub3JnCisgKgorICogR1BMIHZlcnNpb24gMgorICoKKyAqIGJhc2VkIG9uIGFyY2gvYXJtL2tlcm5lbC9hcG0uYworICogZmFjdG9yIG91dCB0aGUgaW5mb3JtYXRpb24gbmVlZGVkIGJ5IGFyY2hpdGVjdHVyZXMgdG8gcHJvdmlkZQorICogYXBtIHN0YXR1cworICoKKyAqCisgKi8KKyNpZm5kZWYgQVJNX0FTTV9TQTExMDBfQVBNX0gKKyNkZWZpbmUgQVJNX0FTTV9TQTExMDBfQVBNX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2FwbV9iaW9zLmg+CisKKy8qCisgKiBUaGlzIHN0cnVjdHVyZSBnZXRzIGZpbGxlZCBpbiBieSB0aGUgbWFjaGluZSBzcGVjaWZpYyAnZ2V0X3Bvd2VyX3N0YXR1cycKKyAqIGltcGxlbWVudGF0aW9uLiAgQW55IGZpZWxkcyB3aGljaCBhcmUgbm90IHNldCBkZWZhdWx0IHRvIGEgc2FmZSB2YWx1ZS4KKyAqLworc3RydWN0IGFwbV9wb3dlcl9pbmZvIHsKKwl1bnNpZ25lZCBjaGFyCWFjX2xpbmVfc3RhdHVzOworI2RlZmluZSBBUE1fQUNfT0ZGTElORQkJCTAKKyNkZWZpbmUgQVBNX0FDX09OTElORQkJCTEKKyNkZWZpbmUgQVBNX0FDX0JBQ0tVUAkJCTIKKyNkZWZpbmUgQVBNX0FDX1VOS05PV04JCQkweGZmCisKKwl1bnNpZ25lZCBjaGFyCWJhdHRlcnlfc3RhdHVzOworI2RlZmluZSBBUE1fQkFUVEVSWV9TVEFUVVNfSElHSAkJMAorI2RlZmluZSBBUE1fQkFUVEVSWV9TVEFUVVNfTE9XCQkxCisjZGVmaW5lIEFQTV9CQVRURVJZX1NUQVRVU19DUklUSUNBTAkyCisjZGVmaW5lIEFQTV9CQVRURVJZX1NUQVRVU19DSEFSR0lORwkzCisjZGVmaW5lIEFQTV9CQVRURVJZX1NUQVRVU19OT1RfUFJFU0VOVAk0CisjZGVmaW5lIEFQTV9CQVRURVJZX1NUQVRVU19VTktOT1dOCTB4ZmYKKworCXVuc2lnbmVkIGNoYXIJYmF0dGVyeV9mbGFnOworI2RlZmluZSBBUE1fQkFUVEVSWV9GTEFHX0hJR0gJCSgxIDw8IDApCisjZGVmaW5lIEFQTV9CQVRURVJZX0ZMQUdfTE9XCQkoMSA8PCAxKQorI2RlZmluZSBBUE1fQkFUVEVSWV9GTEFHX0NSSVRJQ0FMCSgxIDw8IDIpCisjZGVmaW5lIEFQTV9CQVRURVJZX0ZMQUdfQ0hBUkdJTkcJKDEgPDwgMykKKyNkZWZpbmUgQVBNX0JBVFRFUllfRkxBR19OT1RfUFJFU0VOVAkoMSA8PCA3KQorI2RlZmluZSBBUE1fQkFUVEVSWV9GTEFHX1VOS05PV04JMHhmZgorCisJaW50CQliYXR0ZXJ5X2xpZmU7CisJaW50CQl0aW1lOworCWludAkJdW5pdHM7CisjZGVmaW5lIEFQTV9VTklUU19NSU5TCQkJMAorI2RlZmluZSBBUE1fVU5JVFNfU0VDUwkJCTEKKyNkZWZpbmUgQVBNX1VOSVRTX1VOS05PV04JCS0xCisKK307CisKKy8qCisgKiBUaGlzIGFsbG93cyBtYWNoaW5lcyB0byBwcm92aWRlIHRoZWlyIG93biAiYXBtIGdldCBwb3dlciBzdGF0dXMiIGZ1bmN0aW9uLgorICovCitleHRlcm4gdm9pZCAoKmFwbV9nZXRfcG93ZXJfc3RhdHVzKShzdHJ1Y3QgYXBtX3Bvd2VyX2luZm8gKik7CisKKy8qCisgKiBRdWV1ZSBhbiBldmVudCAoQVBNX1NZU19TVVNQRU5EIG9yIEFQTV9DUklUSUNBTF9TVVNQRU5EKQorICovCit2b2lkIGFwbV9xdWV1ZV9ldmVudChhcG1fZXZlbnRfdCBldmVudCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2w3NTAwL2Fjb3JuZmIuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNsNzUwMC9hY29ybmZiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg2NzIzMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNsNzUwMC9hY29ybmZiLmgKQEAgLTAsMCArMSwzNCBAQAorI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2RlZmluZSBhY29ybmZiX3ZhbGlkX3BpeHJhdGUodmFyKSAodmFyLT5waXhjbG9jayA+PSAzOTMyNSAmJiB2YXItPnBpeGNsb2NrIDw9IDQwMTE5KQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2Fjb3JuZmJfdmlkYzIwX2ZpbmRfcmF0ZXMoc3RydWN0IHZpZGNfdGltaW5nICp2aWRjLAorCQkJICBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhcikKK3sKKwl1X2ludCBiYW5kd2lkdGg7CisgIAorCXZpZGMtPmNvbnRyb2wgfD0gVklEQzIwX0NUUkxfUElYX0NLOworCisJLyogQ2FsY3VsYXRlIGJhbmR3aWR0aCAqLworCWJhbmR3aWR0aCA9IHZhci0+cGl4Y2xvY2sgKiA4IC8gdmFyLT5iaXRzX3Blcl9waXhlbDsKKworCS8qIEVuY29kZSBiYW5kd2lkdGggYXMgVklEQzIwIHNldHRpbmcgKi8KKwlpZiAoYmFuZHdpZHRoID4gMTY2NjcqMikKKwkJdmlkYy0+Y29udHJvbCB8PSBWSURDMjBfQ1RSTF9GSUZPXzE2OworCWVsc2UgaWYgKGJhbmR3aWR0aCA+IDEzMzMzKjIpCisJCXZpZGMtPmNvbnRyb2wgfD0gVklEQzIwX0NUUkxfRklGT18yMDsKKwllbHNlIGlmIChiYW5kd2lkdGggPiAxMTExMSoyKQorCQl2aWRjLT5jb250cm9sIHw9IFZJREMyMF9DVFJMX0ZJRk9fMjQ7CisJZWxzZQorCQl2aWRjLT5jb250cm9sIHw9IFZJREMyMF9DVFJMX0ZJRk9fMjg7CisKKwl2aWRjLT5wbGxfY3RsICA9IDB4MjAyMDsKK30KKworI2lmZGVmIENPTkZJR19DSFJPTlRFTF83MDAzCisjZGVmaW5lIGFjb3JuZmJfZGVmYXVsdF9jb250cm9sKCkJVklEQzIwX0NUUkxfUElYX0hDTEsKKyNlbHNlCisjZGVmaW5lIGFjb3JuZmJfZGVmYXVsdF9jb250cm9sKCkJVklEQzIwX0NUUkxfUElYX1ZDTEsKKyNlbmRpZgorCisjZGVmaW5lIGFjb3JuZmJfZGVmYXVsdF9lY29udHJvbCgpCVZJREMyMF9FQ1RMX0RBQyB8IFZJREMyMF9FQ1RMX1JFRygzKSB8IFZJREMyMF9FQ1RMX0VDSwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2w3NTAwL2RlYnVnLW1hY3JvLlMgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbDc1MDAvZGVidWctbWFjcm8uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWQ0ODlkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2w3NTAwL2RlYnVnLW1hY3JvLlMKQEAgLTAsMCArMSwzMSBAQAorLyogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2w3NTAwL2RlYnVnLW1hY3JvLlMKKyAqCisgKiBEZWJ1Z2dpbmcgbWFjcm8gaW5jbHVkZSBoZWFkZXIKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk0LTE5OTkgUnVzc2VsbCBLaW5nCisgKiAgTW92ZWQgZnJvbSBsaW51eC9hcmNoL2FybS9rZXJuZWwvZGVidWcuUyBieSBCZW4gRG9va3MKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyovCisKKwkJLm1hY3JvCWFkZHJ1YXJ0LHJ4CisJCW1vdglccngsICMweGUwMDAwMDAwCisJCW9ycglccngsIFxyeCwgIzB4MDAwMTAwMDAKKwkJb3JyCVxyeCwgXHJ4LCAjMHgwMDAwMGJlMAorCQkuZW5kbQorCisJCS5tYWNybwlzZW5kdWFydCxyZCxyeAorCQlzdHJiCVxyZCwgW1xyeF0KKwkJLmVuZG0KKworCQkubWFjcm8JYnVzeXVhcnQscmQscngKKwkJLmVuZG0KKworCQkubWFjcm8Jd2FpdHVhcnQscmQscngKKzEwMDE6CQlsZHJiCVxyZCwgW1xyeCwgIzB4MTRdCisJCXRzdAlccmQsICMweDIwCisJCWJlcQkxMDAxYgorCQkuZW5kbQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2w3NTAwL2RtYS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2w3NTAwL2RtYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkNmE4ODIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbDc1MDAvZG1hLmgKQEAgLTAsMCArMSwyMiBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWNsNzUwMC9kbWEuaAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBOZXh1cyBFbGVjdHJvbmljcyBMdGQuCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX0RNQV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfRE1BX0gKKworLyogRE1BIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQhIEl0IHNob3VsZCBiZSB0aGUgc2FtZSBhcyBhY29ybiwgY29weSBvdmVyLi4gKi8KKworLyoKKyAqIFRoaXMgaXMgdGhlIG1heGltdW0gRE1BIGFkZHJlc3MgdGhhdCBjYW4gYmUgRE1BZCB0by4KKyAqIFRoZXJlIHNob3VsZCBub3QgYmUgbW9yZSB0aGFuICgweGQwMDAwMDAwIC0gMHhjMDAwMDAwMCkKKyAqIGJ5dGVzIG9mIFJBTS4KKyAqLworI2RlZmluZSBNQVhfRE1BX0FERFJFU1MJCTB4ZDAwMDAwMDAKKyNkZWZpbmUgTUFYX0RNQV9DSEFOTkVMUwkwCisKKyNkZWZpbmUgRE1BX1MwCQkJMAorCisjZW5kaWYgLyogX0FTTV9BUkNIX0RNQV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbDc1MDAvZW50cnktbWFjcm8uUyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNsNzUwMC9lbnRyeS1tYWNyby5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4NmY0MTMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbDc1MDAvZW50cnktbWFjcm8uUwpAQCAtMCwwICsxLDMgQEAKKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9lbnRyeS1tYWNyby1pb21kLlM+CisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNsNzUwMC9oYXJkd2FyZS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2w3NTAwL2hhcmR3YXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMzOWI3NgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNsNzUwMC9oYXJkd2FyZS5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbDc1MDAvaGFyZHdhcmUuaAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0xOTk5IFJ1c3NlbGwgS2luZy4KKyAqIENvcHlyaWdodCAoQykgMTk5OSBOZXh1cyBFbGVjdHJvbmljcyBMdGQuCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBoYXJkd2FyZSBkZWZpbml0aW9ucyBvZiB0aGUgCisgKiBDTDc1MDAgZXZhbHVhdGlvbiBib2FyZC4KKyAqLworI2lmbmRlZiBfX0FTTV9BUkNIX0hBUkRXQVJFX0gKKyNkZWZpbmUgX19BU01fQVJDSF9IQVJEV0FSRV9ICisKKyNpbmNsdWRlIDxhc20vYXJjaC9tZW1vcnkuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvaW9tZC5oPgorCisjaWZkZWYgX19BU1NFTUJMWV9fCisjZGVmaW5lIElPTUVNKHgpIHgKKyNlbHNlCisjZGVmaW5lIElPTUVNKHgpICgodm9pZCBfX2lvbWVtICopKHgpKQorI2VuZGlmCisKKy8qCisgKiBXaGF0IGhhcmR3YXJlIG11c3QgYmUgcHJlc2VudAorICovCisjZGVmaW5lIEhBU19JT01ECisjZGVmaW5lIEhBU19WSURDMjAKKworLyogSGFyZHdhcmUgYWRkcmVzc2VzIG9mIG1ham9yIGFyZWFzLgorICogICpfU1RBUlQgaXMgdGhlIHBoeXNpY2FsIGFkZHJlc3MKKyAqICAqX1NJWkUgIGlzIHRoZSBzaXplIG9mIHRoZSByZWdpb24KKyAqICAqX0JBU0UgIGlzIHRoZSB2aXJ0dWFsIGFkZHJlc3MKKyAqLworCisjZGVmaW5lIElPX1NUQVJUCQkweDAzMDAwMDAwCS8qIEkvTyAqLworI2RlZmluZSBJT19TSVpFCQkJMHgwMTAwMDAwMAorI2RlZmluZSBJT19CQVNFCQkJSU9NRU0oMHhlMDAwMDAwMCkKKworI2RlZmluZSBJU0FfU1RBUlQJCTB4MGMwMDAwMDAJLyogSVNBICovCisjZGVmaW5lIElTQV9TSVpFCQkweDAwMDEwMDAwCisjZGVmaW5lIElTQV9CQVNFCQkweGUxMDAwMDAwCisKKyNkZWZpbmUgRkxBU0hfU1RBUlQJCTB4MDEwMDAwMDAJLyogWFhYICovCisjZGVmaW5lIEZMQVNIX1NJWkUJCTB4MDEwMDAwMDAKKyNkZWZpbmUgRkxBU0hfQkFTRQkJMHhlMjAwMDAwMAorCisjZGVmaW5lIExFRF9TVEFSVAkJMHgwMzAyQjAwMAorI2RlZmluZSBMRURfU0laRQkJMHgwMDAwMTAwMAorI2RlZmluZSBMRURfQkFTRQkJMHhlMzAwMDAwMAorI2RlZmluZSBMRURfQUREUkVTUwkJKExFRF9CQVNFICsgMHhhMDApCisKKy8qIExldCdzIGRlZmluZSBTQ1JFRU5fU1RBUlQgZm9yIENMNzUwMCwgZXZlbiB0aG91Z2ggaXQncyBhIGxpZS4gKi8KKyNkZWZpbmUgU0NSRUVOX1NUQVJUCQkweDAyMDAwMDAwCS8qIFZSQU0gKi8KKyNkZWZpbmUgU0NSRUVOX0VORAkJMHhkZmMwMDAwMAorI2RlZmluZSBTQ1JFRU5fQkFTRQkJMHhkZjgwMDAwMAorCisjZGVmaW5lIEZMVVNIX0JBU0UJCTB4ZGYwMDAwMDAKKworI2RlZmluZSBWSURDX0JBU0UJCSh2b2lkIF9faW9tZW0gKikweGUwNDAwMDAwCisjZGVmaW5lIElPTURfQkFTRQkJSU9NRU0oMHhlMDIwMDAwMCkKKyNkZWZpbmUgSU9DX0JBU0UJCUlPTUVNKDB4ZTAyMDAwMDApCisjZGVmaW5lIEZMT1BQWURNQV9CQVNFCQlJT01FTSgweGUwMDJhMDAwKQorI2RlZmluZSBQQ0lPX0JBU0UJCUlPTUVNKDB4ZTAwMTAwMDApCisKKyNkZWZpbmUgRkxVU0hfQkFTRV9QSFlTCQkweDAwMDAwMDAwCS8qIFJPTSAqLworCisjZGVmaW5lIHZpZGNfd3JpdGVsKHZhbCkJX19yYXdfd3JpdGVsKHZhbCwgVklEQ19CQVNFKQorCisvKiBpbi9vdXQgYmlhcyBmb3IgdGhlIElTQSBzbG90IHJlZ2lvbiAqLworI2RlZmluZSBJU0FTTE9UX0lPCQkweDgwNDAwMDAwCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2w3NTAwL2lvLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbDc1MDAvaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDExM2JjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2w3NTAwL2lvLmgKQEAgLTAsMCArMSwyNTMgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbDc1MDAvaW8uaAorICogIGZyb20gbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtcnBjL2lvLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTcgUnVzc2VsbCBLaW5nCisgKgorICogTW9kaWZpY2F0aW9uczoKKyAqICAwNi1EZWMtMTk5NwlSTUsJQ3JlYXRlZC4KKyAqLworI2lmbmRlZiBfX0FTTV9BUk1fQVJDSF9JT19ICisjZGVmaW5lIF9fQVNNX0FSTV9BUkNIX0lPX0gKKworI2RlZmluZSBJT19TUEFDRV9MSU1JVCAweGZmZmZmZmZmCisKKy8qCisgKiBHQ0MgaXMgdG90YWxseSBjcmFwIGF0IGxvYWRpbmcvc3RvcmluZyBkYXRhLiAgV2UgdHJ5IHRvIHBlcnN1YWRlIGl0CisgKiB0byBkbyB0aGUgcmlnaHQgdGhpbmcgYnkgdXNpbmcgdGhlc2Ugd2hlcmVldmVyIHBvc3NpYmxlIGluc3RlYWQgb2YKKyAqIHRoZSBhYm92ZS4KKyAqLworI2RlZmluZSBfX2FyY2hfYmFzZV9nZXRiKGIsbykJCQlcCisgKHsJCQkJCQlcCisJdW5zaWduZWQgaW50IHYsIHIgPSAoYik7CQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJXAorCQkibGRyYgklMCwgWyUxLCAlMl0iCQlcCisJCTogIj1yIiAodikJCQlcCisJCTogInIiIChyKSwgIklyIiAobykpOwkJXAorCXY7CQkJCQlcCisgfSkKKworI2RlZmluZSBfX2FyY2hfYmFzZV9nZXRsKGIsbykJCQlcCisgKHsJCQkJCQlcCisJdW5zaWduZWQgaW50IHYsIHIgPSAoYik7CQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJXAorCQkibGRyCSUwLCBbJTEsICUyXSIJCVwKKwkJOiAiPXIiICh2KQkJCVwKKwkJOiAiciIgKHIpLCAiSXIiIChvKSk7CQlcCisJdjsJCQkJCVwKKyB9KQorCisjZGVmaW5lIF9fYXJjaF9iYXNlX3B1dGIodixiLG8pCQkJXAorICh7CQkJCQkJXAorCXVuc2lnbmVkIGludCByID0gKGIpOwkJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQlcCisJCSJzdHJiCSUwLCBbJTEsICUyXSIJCVwKKwkJOgkJCQlcCisJCTogInIiICh2KSwgInIiIChyKSwgIklyIiAobykpOwlcCisgfSkKKworI2RlZmluZSBfX2FyY2hfYmFzZV9wdXRsKHYsYixvKQkJCVwKKyAoewkJCQkJCVwKKwl1bnNpZ25lZCBpbnQgciA9IChiKTsJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJXAorCQkic3RyCSUwLCBbJTEsICUyXSIJCVwKKwkJOgkJCQlcCisJCTogInIiICh2KSwgInIiIChyKSwgIklyIiAobykpOwlcCisgfSkKKworLyoKKyAqIFdlIHVzZSB0d28gZGlmZmVyZW50IHR5cGVzIG9mIGFkZHJlc3NpbmcgLSBQQyBzdHlsZSBhZGRyZXNzZXMsIGFuZCBBUk0KKyAqIGFkZHJlc3Nlcy4gIFBDIHN0eWxlIGFjY2Vzc2VzIHRoZSBQQyBoYXJkd2FyZSB3aXRoIHRoZSBub3JtYWwgUEMgSU8KKyAqIGFkZHJlc3NlcywgZWcgMHgzZjggZm9yIHNlcmlhbCMxLiAgQVJNIGFkZHJlc3NlcyBhcmUgMHg4MDAwMDAwMCsKKyAqIGFuZCBhcmUgdHJhbnNsYXRlZCB0byB0aGUgc3RhcnQgb2YgSU8uICBOb3RlIHRoYXQgYWxsIGFkZHJlc3NlcyBhcmUKKyAqIHNoaWZ0ZWQgbGVmdCEKKyAqLworI2RlZmluZSBfX1BPUlRfUENJTyh4KQkoISgoeCkgJiAweDgwMDAwMDAwKSkKKworLyoKKyAqIER5bmFtaWMgSU8gZnVuY3Rpb25zIC0gbGV0IHRoZSBjb21waWxlcgorICogb3B0aW1pemUgdGhlIGV4cHJlc3Npb25zCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX291dGIgKHVuc2lnbmVkIGludCB2YWx1ZSwgdW5zaWduZWQgaW50IHBvcnQpCit7CisJdW5zaWduZWQgbG9uZyB0ZW1wOworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCSJ0c3QJJTIsICMweDgwMDAwMDAwXG5cdCIKKwkibW92CSUwLCAlNFxuXHQiCisJImFkZGVxCSUwLCAlMCwgJTNcblx0IgorCSJzdHJiCSUxLCBbJTAsICUyLCBsc2wgIzJdCUAgb3V0YiIKKwk6ICI9JnIiICh0ZW1wKQorCTogInIiICh2YWx1ZSksICJyIiAocG9ydCksICJJciIgKFBDSU9fQkFTRSAtIElPX0JBU0UpLCAiSXIiIChJT19CQVNFKQorCTogImNjIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX291dHcgKHVuc2lnbmVkIGludCB2YWx1ZSwgdW5zaWduZWQgaW50IHBvcnQpCit7CisJdW5zaWduZWQgbG9uZyB0ZW1wOworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCSJ0c3QJJTIsICMweDgwMDAwMDAwXG5cdCIKKwkibW92CSUwLCAlNFxuXHQiCisJImFkZGVxCSUwLCAlMCwgJTNcblx0IgorCSJzdHIJJTEsIFslMCwgJTIsIGxzbCAjMl0JQCBvdXR3IgorCTogIj0mciIgKHRlbXApCisJOiAiciIgKHZhbHVlfHZhbHVlPDwxNiksICJyIiAocG9ydCksICJJciIgKFBDSU9fQkFTRSAtIElPX0JBU0UpLCAiSXIiIChJT19CQVNFKQorCTogImNjIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX291dGwgKHVuc2lnbmVkIGludCB2YWx1ZSwgdW5zaWduZWQgaW50IHBvcnQpCit7CisJdW5zaWduZWQgbG9uZyB0ZW1wOworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCSJ0c3QJJTIsICMweDgwMDAwMDAwXG5cdCIKKwkibW92CSUwLCAlNFxuXHQiCisJImFkZGVxCSUwLCAlMCwgJTNcblx0IgorCSJzdHIJJTEsIFslMCwgJTIsIGxzbCAjMl0JQCBvdXRsIgorCTogIj0mciIgKHRlbXApCisJOiAiciIgKHZhbHVlKSwgInIiIChwb3J0KSwgIklyIiAoUENJT19CQVNFIC0gSU9fQkFTRSksICJJciIgKElPX0JBU0UpCisJOiAiY2MiKTsKK30KKworI2RlZmluZSBERUNMQVJFX0RZTl9JTihzeixmbnN1ZmZpeCxpbnN0cikJCQkJCVwKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgc3ogX19pbiMjZm5zdWZmaXggKHVuc2lnbmVkIGludCBwb3J0KQkJXAorewkJCQkJCQkJCQlcCisJdW5zaWduZWQgbG9uZyB0ZW1wLCB2YWx1ZTsJCQkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJCVwKKwkidHN0CSUyLCAjMHg4MDAwMDAwMFxuXHQiCQkJCQkJXAorCSJtb3YJJTAsICU0XG5cdCIJCQkJCQkJXAorCSJhZGRlcQklMCwgJTAsICUzXG5cdCIJCQkJCQkJXAorCSJsZHIiIGluc3RyICIJJTEsIFslMCwgJTIsIGxzbCAjMl0JQCBpbiIgI2Zuc3VmZml4CQkJXAorCTogIj0mciIgKHRlbXApLCAiPXIiICh2YWx1ZSkJCQkJCQlcCisJOiAiciIgKHBvcnQpLCAiSXIiIChQQ0lPX0JBU0UgLSBJT19CQVNFKSwgIklyIiAoSU9fQkFTRSkJCVwKKwk6ICJjYyIpOwkJCQkJCQkJXAorCXJldHVybiAodW5zaWduZWQgc3opdmFsdWU7CQkJCQkJXAorfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBfX2lvYWRkciAodW5zaWduZWQgaW50IHBvcnQpCQkJXAorewkJCQkJCQkJCQlcCisJaWYgKF9fUE9SVF9QQ0lPKHBvcnQpKQkJCQkJCQlcCisJCXJldHVybiAodW5zaWduZWQgaW50KShQQ0lPX0JBU0UgKyAocG9ydCA8PCAyKSk7CQkJXAorCWVsc2UJCQkJCQkJCQlcCisJCXJldHVybiAodW5zaWduZWQgaW50KShJT19CQVNFICsgKHBvcnQgPDwgMikpOwkJCVwKK30KKworI2RlZmluZSBERUNMQVJFX0lPKHN6LGZuc3VmZml4LGluc3RyKQlcCisJREVDTEFSRV9EWU5fSU4oc3osZm5zdWZmaXgsaW5zdHIpCisKK0RFQ0xBUkVfSU8oY2hhcixiLCJiIikKK0RFQ0xBUkVfSU8oc2hvcnQsdywiIikKK0RFQ0xBUkVfSU8oaW50LGwsIiIpCisKKyN1bmRlZiBERUNMQVJFX0lPCisjdW5kZWYgREVDTEFSRV9EWU5fSU4KKworLyoKKyAqIENvbnN0YW50IGFkZHJlc3MgSU8gZnVuY3Rpb25zCisgKgorICogVGhlc2UgaGF2ZSB0byBiZSBtYWNyb3MgZm9yIHRoZSAnSicgY29uc3RyYWludCB0byB3b3JrIC0KKyAqICsvLTQwOTYgaW1tZWRpYXRlIG9wZXJhbmQuCisgKi8KKyNkZWZpbmUgX19vdXRiYyh2YWx1ZSxwb3J0KQkJCQkJCQlcCisoewkJCQkJCQkJCQlcCisJaWYgKF9fUE9SVF9QQ0lPKChwb3J0KSkpCQkJCQkJXAorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQlcCisJCSJzdHJiCSUwLCBbJTEsICUyXQlAIG91dGJjIgkJCQlcCisJCTogOiAiciIgKHZhbHVlKSwgInIiIChQQ0lPX0JBU0UpLCAiSnIiICgocG9ydCkgPDwgMikpOwkJXAorCWVsc2UJCQkJCQkJCQlcCisJCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCVwKKwkJInN0cmIJJTAsIFslMSwgJTJdCUAgb3V0YmMiCQkJCVwKKwkJOiA6ICJyIiAodmFsdWUpLCAiciIgKElPX0JBU0UpLCAiciIgKChwb3J0KSA8PCAyKSk7CQlcCit9KQorCisjZGVmaW5lIF9faW5iYyhwb3J0KQkJCQkJCQkJXAorKHsJCQkJCQkJCQkJXAorCXVuc2lnbmVkIGNoYXIgcmVzdWx0OwkJCQkJCQlcCisJaWYgKF9fUE9SVF9QQ0lPKChwb3J0KSkpCQkJCQkJXAorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQlcCisJCSJsZHJiCSUwLCBbJTEsICUyXQlAIGluYmMiCQkJCQlcCisJCTogIj1yIiAocmVzdWx0KSA6ICJyIiAoUENJT19CQVNFKSwgIkpyIiAoKHBvcnQpIDw8IDIpKTsJCVwKKwllbHNlCQkJCQkJCQkJXAorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQlcCisJCSJsZHJiCSUwLCBbJTEsICUyXQlAIGluYmMiCQkJCQlcCisJCTogIj1yIiAocmVzdWx0KSA6ICJyIiAoSU9fQkFTRSksICJyIiAoKHBvcnQpIDw8IDIpKTsJCVwKKwlyZXN1bHQ7CQkJCQkJCQkJXAorfSkKKworI2RlZmluZSBfX291dHdjKHZhbHVlLHBvcnQpCQkJCQkJCVwKKyh7CQkJCQkJCQkJCVwKKwl1bnNpZ25lZCBsb25nIHYgPSB2YWx1ZTsJCQkJCQlcCisJaWYgKF9fUE9SVF9QQ0lPKChwb3J0KSkpCQkJCQkJXAorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQlcCisJCSJzdHIJJTAsIFslMSwgJTJdCUAgb3V0d2MiCQkJCVwKKwkJOiA6ICJyIiAodnx2PDwxNiksICJyIiAoUENJT19CQVNFKSwgIkpyIiAoKHBvcnQpIDw8IDIpKTsJXAorCWVsc2UJCQkJCQkJCQlcCisJCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCVwKKwkJInN0cgklMCwgWyUxLCAlMl0JQCBvdXR3YyIJCQkJXAorCQk6IDogInIiICh2fHY8PDE2KSwgInIiIChJT19CQVNFKSwgInIiICgocG9ydCkgPDwgMikpOwkJXAorfSkKKworI2RlZmluZSBfX2lud2MocG9ydCkJCQkJCQkJCVwKKyh7CQkJCQkJCQkJCVwKKwl1bnNpZ25lZCBzaG9ydCByZXN1bHQ7CQkJCQkJCVwKKwlpZiAoX19QT1JUX1BDSU8oKHBvcnQpKSkJCQkJCQlcCisJCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCVwKKwkJImxkcgklMCwgWyUxLCAlMl0JQCBpbndjIgkJCQkJXAorCQk6ICI9ciIgKHJlc3VsdCkgOiAiciIgKFBDSU9fQkFTRSksICJKciIgKChwb3J0KSA8PCAyKSk7CQlcCisJZWxzZQkJCQkJCQkJCVwKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAorCQkibGRyCSUwLCBbJTEsICUyXQlAIGlud2MiCQkJCQlcCisJCTogIj1yIiAocmVzdWx0KSA6ICJyIiAoSU9fQkFTRSksICJyIiAoKHBvcnQpIDw8IDIpKTsJCVwKKwlyZXN1bHQgJiAweGZmZmY7CQkJCQkJCVwKK30pCisKKyNkZWZpbmUgX19vdXRsYyh2YWx1ZSxwb3J0KQkJCQkJCQlcCisoewkJCQkJCQkJCQlcCisJdW5zaWduZWQgbG9uZyB2ID0gdmFsdWU7CQkJCQkJXAorCWlmIChfX1BPUlRfUENJTygocG9ydCkpKQkJCQkJCVwKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAorCQkic3RyCSUwLCBbJTEsICUyXQlAIG91dGxjIgkJCQlcCisJCTogOiAiciIgKHYpLCAiciIgKFBDSU9fQkFTRSksICJKciIgKChwb3J0KSA8PCAyKSk7CQlcCisJZWxzZQkJCQkJCQkJCVwKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAorCQkic3RyCSUwLCBbJTEsICUyXQlAIG91dGxjIgkJCQlcCisJCTogOiAiciIgKHYpLCAiciIgKElPX0JBU0UpLCAiciIgKChwb3J0KSA8PCAyKSk7CQkJXAorfSkKKworI2RlZmluZSBfX2lubGMocG9ydCkJCQkJCQkJCVwKKyh7CQkJCQkJCQkJCVwKKwl1bnNpZ25lZCBsb25nIHJlc3VsdDsJCQkJCQkJXAorCWlmIChfX1BPUlRfUENJTygocG9ydCkpKQkJCQkJCVwKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAorCQkibGRyCSUwLCBbJTEsICUyXQlAIGlubGMiCQkJCQlcCisJCTogIj1yIiAocmVzdWx0KSA6ICJyIiAoUENJT19CQVNFKSwgIkpyIiAoKHBvcnQpIDw8IDIpKTsJCVwKKwllbHNlCQkJCQkJCQkJXAorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQlcCisJCSJsZHIJJTAsIFslMSwgJTJdCUAgaW5sYyIJCQkJCVwKKwkJOiAiPXIiIChyZXN1bHQpIDogInIiIChJT19CQVNFKSwgInIiICgocG9ydCkgPDwgMikpOwkJXAorCXJlc3VsdDsJCQkJCQkJCQlcCit9KQorCisjZGVmaW5lIF9faW9hZGRyYyhwb3J0KQkJCQkJCQkJXAorCShfX1BPUlRfUENJTygocG9ydCkpID8gUENJT19CQVNFICsgKChwb3J0KSA8PCAyKSA6IElPX0JBU0UgKyAoKHBvcnQpIDw8IDIpKQorCisjZGVmaW5lIGluYihwKQkgCShfX2J1aWx0aW5fY29uc3RhbnRfcCgocCkpID8gX19pbmJjKHApICAgIDogX19pbmIocCkpCisjZGVmaW5lIGludyhwKQkgCShfX2J1aWx0aW5fY29uc3RhbnRfcCgocCkpID8gX19pbndjKHApICAgIDogX19pbncocCkpCisjZGVmaW5lIGlubChwKQkgCShfX2J1aWx0aW5fY29uc3RhbnRfcCgocCkpID8gX19pbmxjKHApICAgIDogX19pbmwocCkpCisjZGVmaW5lIG91dGIodixwKQkoX19idWlsdGluX2NvbnN0YW50X3AoKHApKSA/IF9fb3V0YmModixwKSA6IF9fb3V0Yih2LHApKQorI2RlZmluZSBvdXR3KHYscCkJKF9fYnVpbHRpbl9jb25zdGFudF9wKChwKSkgPyBfX291dHdjKHYscCkgOiBfX291dHcodixwKSkKKyNkZWZpbmUgb3V0bCh2LHApCShfX2J1aWx0aW5fY29uc3RhbnRfcCgocCkpID8gX19vdXRsYyh2LHApIDogX19vdXRsKHYscCkpCisjZGVmaW5lIF9faW9hZGRyKHApCShfX2J1aWx0aW5fY29uc3RhbnRfcCgocCkpID8gX19pb2FkZHIocCkgIDogX19pb2FkZHJjKHApKQorLyogdGhlIGZvbGxvd2luZyBtYWNybyBpcyBkZXByZWNhdGVkICovCisjZGVmaW5lIGlvYWRkcihwb3J0KQkJCV9faW9hZGRyKChwb3J0KSkKKworI2RlZmluZSBpbnNiKHAsZCxsKQlfX3Jhd19yZWFkc2IoX19pb2FkZHIocCksZCxsKQorI2RlZmluZSBpbnN3KHAsZCxsKQlfX3Jhd19yZWFkc3coX19pb2FkZHIocCksZCxsKQorCisjZGVmaW5lIG91dHNiKHAsZCxsKQlfX3Jhd193cml0ZXNiKF9faW9hZGRyKHApLGQsbCkKKyNkZWZpbmUgb3V0c3cocCxkLGwpCV9fcmF3X3dyaXRlc3coX19pb2FkZHIocCksZCxsKQorCisvKgorICogMToxIG1hcHBpbmcgZm9yIGlvcmVtYXBwZWQgcmVnaW9ucy4KKyAqLworI2RlZmluZSBfX21lbV9wY2koeCkJKHgpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2w3NTAwL2lycS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2w3NTAwL2lycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiMjg2MzMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbDc1MDAvaXJxLmgKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWNsNzUwMC9pcnEuaAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NiBSdXNzZWxsIEtpbmcKKyAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMSBOZXh1cyBFbGVjdHJvbmljcyBMdGQuCisgKgorICogQ2hhbmdlbG9nOgorICogICAxMC0xMC0xOTk2CVJNSwlCcm91Z2h0IHVwIHRvIGRhdGUgd2l0aCBhcmNoLXNhMTEwZXZhbAorICogICAyMi0wOC0xOTk4CVJNSwlSZXN0cnVjdHVyZWQgSVJRIHJvdXRpbmVzCisgKiAgIDExLTA4LTE5OTkJUEpCCUNyZWF0ZWQgQVJNNzUwMCB2ZXJzaW9uLCBkZXJpdmVkIGZyb20gUmlzY1BDIGNvZGUKKyAqLworCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2lvbWQuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworc3RhdGljIGlubGluZSBpbnQgZml4dXBfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJaWYgKGlycSA9PSBJUlFfSVNBKSB7CisJCWludCBpc2FiaXRzID0gKigodm9sYXRpbGUgdW5zaWduZWQgaW50ICopMHhlMDAyYjcwMCk7CisJCWlmIChpc2FiaXRzID09IDApIHsKKwkJCXByaW50aygiU3B1cmlvdXMgSVNBIElSUSFcbiIpOworCQkJcmV0dXJuIGlycTsKKwkJfQorCQlpcnEgPSBJUlFfSVNBX0JBU0U7CisJCXdoaWxlICghKGlzYWJpdHMgJiAxKSkgeworCQkJaXJxKys7CisJCQlpc2FiaXRzID4+PSAxOworCQl9CisJfQorCisJcmV0dXJuIGlycTsKK30KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNsNzUwMC9pcnFzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbDc1MDAvaXJxcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyMDk5NmUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbDc1MDAvaXJxcy5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbDc1MDAvaXJxcy5oCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5IE5leHVzIEVsZWN0cm9uaWNzIEx0ZAorICovCisKKyNkZWZpbmUgSVJRX0lOVDIJCTAKKyNkZWZpbmUgSVJRX0lOVDEJCTIKKyNkZWZpbmUgSVJRX1ZTWU5DUFVMU0UJCTMKKyNkZWZpbmUgSVJRX1BPV0VST04JCTQKKyNkZWZpbmUgSVJRX1RJTUVSMAkJNQorI2RlZmluZSBJUlFfVElNRVIxCQk2CisjZGVmaW5lIElSUV9GT1JDRQkJNworI2RlZmluZSBJUlFfSU5UOAkJOAorI2RlZmluZSBJUlFfSVNBCQkJOQorI2RlZmluZSBJUlFfSU5UNgkJMTAKKyNkZWZpbmUgSVJRX0lOVDUJCTExCisjZGVmaW5lIElSUV9JTlQ0CQkxMgorI2RlZmluZSBJUlFfSU5UMwkJMTMKKyNkZWZpbmUgSVJRX0tFWUJPQVJEVFgJCTE0CisjZGVmaW5lIElSUV9LRVlCT0FSRFJYCQkxNQorCisjZGVmaW5lIElSUV9ETUEwCQkxNgorI2RlZmluZSBJUlFfRE1BMQkJMTcKKyNkZWZpbmUgSVJRX0RNQTIJCTE4CisjZGVmaW5lIElSUV9ETUEzCQkxOQorI2RlZmluZSBJUlFfRE1BUzAJCTIwCisjZGVmaW5lIElSUV9ETUFTMQkJMjEKKworI2RlZmluZSBJUlFfSU9QMAkJMjQKKyNkZWZpbmUgSVJRX0lPUDEJCTI1CisjZGVmaW5lIElSUV9JT1AyCQkyNgorI2RlZmluZSBJUlFfSU9QMwkJMjcKKyNkZWZpbmUgSVJRX0lPUDQJCTI4CisjZGVmaW5lIElSUV9JT1A1CQkyOQorI2RlZmluZSBJUlFfSU9QNgkJMzAKKyNkZWZpbmUgSVJRX0lPUDcJCTMxCisKKyNkZWZpbmUgSVJRX01PVVNFUlgJCTQwCisjZGVmaW5lIElSUV9NT1VTRVRYCQk0MQorI2RlZmluZSBJUlFfQURDCQkJNDIKKyNkZWZpbmUgSVJRX0VWRU5UMQkJNDMKKyNkZWZpbmUgSVJRX0VWRU5UMgkJNDQKKworI2RlZmluZSBJUlFfSVNBX0JBU0UJCTQ4CisjZGVmaW5lIElSUV9JU0FfMwkJNDgKKyNkZWZpbmUgSVJRX0lTQV80CQk0OQorI2RlZmluZSBJUlFfSVNBXzUJCTUwCisjZGVmaW5lIElSUV9JU0FfNwkJNTEKKyNkZWZpbmUgSVJRX0lTQV85CQk1MgorI2RlZmluZSBJUlFfSVNBXzEwCQk1MworI2RlZmluZSBJUlFfSVNBXzExCQk1NAorI2RlZmluZSBJUlFfSVNBXzE0CQk1NQkKKworI2RlZmluZSBGSVFfSU5UOQkJMAorI2RlZmluZSBGSVFfSU5UNQkJMQorI2RlZmluZSBGSVFfSU5UNgkJNAorI2RlZmluZSBGSVFfSU5UOAkJNgorI2RlZmluZSBGSVFfRk9SQ0UJCTcKKworLyoKKyAqIFRoaXMgaXMgdGhlIG9mZnNldCBvZiB0aGUgRklRICJJUlEiIG51bWJlcnMKKyAqLworI2RlZmluZSBGSVFfU1RBUlQJCTY0CisKKyNkZWZpbmUgSVJRX1RJTUVSCQlJUlFfVElNRVIwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbDc1MDAvbWVtb3J5LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbDc1MDAvbWVtb3J5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc3NmJiYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNsNzUwMC9tZW1vcnkuaApAQCAtMCwwICsxLDI5IEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2w3NTAwL21lbW9yeS5oCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk2LDE5OTcsMTk5OCBSdXNzZWxsIEtpbmcuCisgKgorICogQ2hhbmdlbG9nOgorICogIDIwLU9jdC0xOTk2CVJNSwlDcmVhdGVkCisgKiAgMzEtRGVjLTE5OTcJUk1LCUZpeGVkIGRlZmluaXRpb25zIHRvIHJlZHVjZSB3YXJuaW5ncworICogIDExLUphbi0xOTk4CVJNSwlVbmlubGluZWQgdG8gcmVkdWNlIGhpdHMgb24gY2FjaGUKKyAqICAwOC1GZWItMTk5OAlSTUsJQWRkZWQgX192aXJ0X3RvX2J1cyBhbmQgX19idXNfdG9fdmlydAorICogIDIxLU1hci0xOTk5CVJNSwlSZW5hbWVkIHRvIG1lbW9yeS5oCisgKgkJUk1LCUFkZGVkIFRBU0tfU0laRSBhbmQgUEFHRV9PRkZTRVQKKyAqLworI2lmbmRlZiBfX0FTTV9BUkNIX01FTU9SWV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfTUVNT1JZX0gKKworLyoKKyAqIFBoeXNpY2FsIERSQU0gb2Zmc2V0LgorICovCisjZGVmaW5lIFBIWVNfT0ZGU0VUCSgweDEwMDAwMDAwVUwpCisKKy8qCisgKiBUaGVzZSBhcmUgZXhhY3RseSB0aGUgc2FtZSBvbiB0aGUgUmlzY1BDIGFzIHRoZQorICogcGh5c2ljYWwgbWVtb3J5IHZpZXcuCisgKi8KKyNkZWZpbmUgX192aXJ0X3RvX2J1cyh4KSBfX3ZpcnRfdG9fcGh5cyh4KQorI2RlZmluZSBfX2J1c190b192aXJ0KHgpIF9fcGh5c190b192aXJ0KHgpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2w3NTAwL3BhcmFtLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbDc1MDAvcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzRiZjY5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2w3NTAwL3BhcmFtLmgKQEAgLTAsMCArMSw1IEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWNsNzUwMC9wYXJhbS5oCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5IE5leHVzIEVsZWN0cm9uaWNzIEx0ZAorICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbDc1MDAvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbDc1MDAvc3lzdGVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk1MDVkNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNsNzUwMC9zeXN0ZW0uaApAQCAtMCwwICsxLDIzIEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2w3NTAwL3N5c3RlbS5oCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk5IE5leHVzIEVsZWN0cm9uaWNzIEx0ZC4KKyAqLworI2lmbmRlZiBfX0FTTV9BUkNIX1NZU1RFTV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfU1lTVEVNX0gKKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9pb21kLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2lkbGUodm9pZCkKK3sKKwlpb21kX3dyaXRlYigwLCBJT01EX1NVU01PREUpOworfQorCisjZGVmaW5lIGFyY2hfcmVzZXQobW9kZSkJCQlcCisJZG8gewkJCQkJXAorCQlpb21kX3dyaXRlYigwLCBJT01EX1JPTUNSMCk7CVwKKwkJY3B1X3Jlc2V0KDApOwkJCVwKKwl9IHdoaWxlICgwKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNsNzUwMC90aW1leC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2w3NTAwL3RpbWV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE0MTc1ZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNsNzUwMC90aW1leC5oCkBAIC0wLDAgKzEsMTMgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbDc1MDAvdGltZXguaAorICoKKyAqIENMNzUwMCBhcmNoaXRlY3R1cmUgdGltZXggc3BlY2lmaWNhdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTmV4dXMgRWxlY3Ryb25pY3MgTHRkCisgKi8KKworLyoKKyAqIE9uIHRoZSBBUk03NTAwLCB0aGUgY2xvY2sgdGlja3MgYXQgMk1Iei4KKyAqLworI2RlZmluZSBDTE9DS19USUNLX1JBVEUJCTIwMDAwMDAKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2w3NTAwL3VuY29tcHJlc3MuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNsNzUwMC91bmNvbXByZXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg2MDFiMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNsNzUwMC91bmNvbXByZXNzLmgKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWNsNzUwMC91bmNvbXByZXNzLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAgTmV4dXMgRWxlY3Ryb25pY3MgTHRkLgorICovCisKKyNkZWZpbmUgQkFTRSAweDAzMDEwMDAwCisjZGVmaW5lIFNFUkJBU0UgKEJBU0UgKyAoMHgyZjggPDwgMikpCisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgcHV0YyhjaGFyIGMpCit7CisJd2hpbGUgKCEoKigodm9sYXRpbGUgdW5zaWduZWQgaW50ICopKFNFUkJBU0UgKyAweDE0KSkgJiAweDIwKSk7CisJKigodm9sYXRpbGUgdW5zaWduZWQgaW50ICopKFNFUkJBU0UpKSA9IGM7Cit9CisKKy8qCisgKiBUaGlzIGRvZXMgbm90IGFwcGVuZCBhIG5ld2xpbmUKKyAqLworc3RhdGljIHZvaWQgcHV0c3RyKGNvbnN0IGNoYXIgKnMpCit7CisJd2hpbGUgKCpzKSB7CisJCXB1dGMoKnMpOworCQlpZiAoKnMgPT0gJ1xuJykKKwkJCXB1dGMoJ1xyJyk7CisJCXMrKzsKKwl9Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgYXJjaF9kZWNvbXBfc2V0dXAodm9pZCkKK3sKKwlpbnQgYmF1ZCA9IDM2ODY0MDAgLyAoOTYwMCAqIDMyKTsKKworCSooKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKShTRVJCQVNFICsgMHhDKSkgPSAweDgwOworCSooKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKShTRVJCQVNFICsgMHgwKSkgPSBiYXVkICYgMHhmZjsKKwkqKCh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikoU0VSQkFTRSArIDB4NCkpID0gKGJhdWQgJiAweGZmMDApID4+IDg7CisJKigodm9sYXRpbGUgdW5zaWduZWQgaW50ICopKFNFUkJBU0UgKyAweEMpKSA9IDM7IC8qIDggYml0cyAqLworCSooKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKShTRVJCQVNFICsgMHgxMCkpID0gMzsgLyogRFRSLCBSVFMgKi8KK30KKworLyoKKyAqIG5vdGhpbmcgdG8gZG8KKyAqLworI2RlZmluZSBhcmNoX2RlY29tcF93ZG9nKCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNsNzUwMC92bWFsbG9jLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbDc1MDAvdm1hbGxvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxODgzZGUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbDc1MDAvdm1hbGxvYy5oCkBAIC0wLDAgKzEsMTUgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbDc1MDAvdm1hbGxvYy5oCisgKi8KKworLyoKKyAqIEp1c3QgYW55IGFyYml0cmFyeSBvZmZzZXQgdG8gdGhlIHN0YXJ0IG9mIHRoZSB2bWFsbG9jIFZNIGFyZWE6IHRoZQorICogY3VycmVudCA4TUIgdmFsdWUganVzdCBtZWFucyB0aGF0IHRoZXJlIHdpbGwgYmUgYSA4TUIgImhvbGUiIGFmdGVyIHRoZQorICogcGh5c2ljYWwgbWVtb3J5IHVudGlsIHRoZSBrZXJuZWwgdmlydHVhbCBtZW1vcnkgc3RhcnRzLiAgVGhhdCBtZWFucyB0aGF0CisgKiBhbnkgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgd2lsbCBob3BlZnVsbHkgYmUgY2F1Z2h0LgorICogVGhlIHZtYWxsb2MoKSByb3V0aW5lcyBsZWF2ZXMgYSBob2xlIG9mIDRrQiBiZXR3ZWVuIGVhY2ggdm1hbGxvY2VkCisgKiBhcmVhIGZvciB0aGUgc2FtZSByZWFzb24uIDspCisgKi8KKyNkZWZpbmUgVk1BTExPQ19PRkZTRVQJICAoOCoxMDI0KjEwMjQpCisjZGVmaW5lIFZNQUxMT0NfU1RBUlQJICAoKCh1bnNpZ25lZCBsb25nKWhpZ2hfbWVtb3J5ICsgVk1BTExPQ19PRkZTRVQpICYgfihWTUFMTE9DX09GRlNFVC0xKSkKKyNkZWZpbmUgVk1BTExPQ19FTkQgICAgICAgKFBBR0VfT0ZGU0VUICsgMHgxYzAwMDAwMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNscHM3MTF4L2F1dGNwdTEyLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbHBzNzExeC9hdXRjcHUxMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1ODhhMzYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbHBzNzExeC9hdXRjcHUxMi5oCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBBVVRDUFUxMiBzcGVjaWZpYyBkZWZpbmVzCisgKgorICogKGMpIDIwMDEgVGhvbWFzIEdsZWl4bmVyLCBhdXRyb25peCBhdXRvbWF0aW9uIDxnbGVpeG5lckBhdXRyb25peC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKyNpZm5kZWYgX19BU01fQVJDSF9BVVRDUFUxMl9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfQVVUQ1BVMTJfSAorCisvKgorICogVGhlIENTODkwMEEgZXRoZXJuZXQgY2hpcCBoYXMgaXRzIEkvTyByZWdpc3RlcnMgd2lyZWQgdG8gY2hpcCBzZWxlY3QgMgorICogKG5DUzIpLiBUaGlzIGlzIHRoZSBtYXBwaW5nIGZvciBpdC4KKyAqLworI2RlZmluZSBBVVRDUFUxMl9QSFlTX0NTODkwMEEJCUNTMl9QSFlTX0JBU0UJCS8qIHBoeXNpY2FsICovCisjZGVmaW5lIEFVVENQVTEyX1ZJUlRfQ1M4OTAwQQkJKDB4ZmUwMDAwMDApCQkvKiB2aXJ0dWFsICovCisKKy8qCisgKiBUaGUgZmxhc2ggYmFuayBpcyB3aXJlZCB0byBjaGlwIHNlbGVjdCAwCisgKi8KKyNkZWZpbmUgQVVUQ1BVMTJfUEhZU19GTEFTSAkJQ1MwX1BIWVNfQkFTRQkJLyogcGh5c2ljYWwgKi8KKworLyogb2Zmc2V0IGZvciBkZXZpY2Ugc3BlY2lmaWMgaW5mb3JtYXRpb24gc3RydWN0dXJlICovCisjZGVmaW5lIEFVVENQVTEyX0xDRElORk9fT0ZGUwkJKDB4MDAwMTAwMDApCQorLyoKKyogVmlkZW9tZW1vcnkgaXMgdGhlIGludGVybmFsIFNSQU0gKENTIDYpCQorKi8KKyNkZWZpbmUgQVVUQ1BVMTJfUEhZU19WSURFTwkJQ1M2X1BIWVNfQkFTRQorI2RlZmluZSBBVVRDUFUxMl9WSVJUX1ZJREVPCQkoMHhmZDAwMDAwMCkKKworLyoKKyogQWxsIHNwZWNpYWwgSU8ncyBhcmUgdGllZCB0byBDUzEKKyovCisjZGVmaW5lIEFVVENQVTEyX1BIWVNfQ0hBUl9MQ0QgICAgICAgICAJQ1MxX1BIWVNfQkFTRSArMHgwMDAwMDAwMCAgLyogcGh5c2ljYWwgKi8KKworI2RlZmluZSBBVVRDUFUxMl9QSFlTX05WUkFNICAgICAgICAgICAgCUNTMV9QSFlTX0JBU0UgKzB4MDIwMDAwMDAgIC8qIHBoeXNpY2FsICovCisKKyNkZWZpbmUgQVVUQ1BVMTJfUEhZU19DU0FVWDEgICAgICAgICAgIAlDUzFfUEhZU19CQVNFICsweDA0MDAwMDAwICAvKiBwaHlzaWNhbCAqLworCisjZGVmaW5lIEFVVENQVTEyX1BIWVNfU01DICAgICAgICAgICAgICAJQ1MxX1BIWVNfQkFTRSArMHgwNjAwMDAwMCAgLyogcGh5c2ljYWwgKi8KKworI2RlZmluZSBBVVRDUFUxMl9QSFlTX0NBTiAgICAgICAgICAgICAgCUNTMV9QSFlTX0JBU0UgKzB4MDgwMDAwMDAgIC8qIHBoeXNpY2FsICovCisKKyNkZWZpbmUgQVVUQ1BVMTJfUEhZU19UT1VDSCAgICAgICAgICAgIAlDUzFfUEhZU19CQVNFICsweDBBMDAwMDAwICAvKiBwaHlzaWNhbCAqLworCisjZGVmaW5lIEFVVENQVTEyX1BIWVNfSU8gICAgICAgICAgICAgICAJQ1MxX1BIWVNfQkFTRSArMHgwQzAwMDAwMCAgLyogcGh5c2ljYWwgKi8KKworI2RlZmluZSBBVVRDUFUxMl9QSFlTX0xQVCAgICAgICAgICAgICAgCUNTMV9QSFlTX0JBU0UgKzB4MEUwMDAwMDAgIC8qIHBoeXNpY2FsICovCisKKy8qIAorKiBkZWZpbmVzIGZvciBzbWFydG1lZGlhIGNhcmQgYWNjZXNzIAorKi8KKyNkZWZpbmUgQVVUQ1BVMTJfU01DX1JEWQkJKDE8PDIpCisjZGVmaW5lIEFVVENQVTEyX1NNQ19BTEUJCSgxPDwzKQorI2RlZmluZSBBVVRDUFUxMl9TTUNfQ0xFICAJCSgxPDw0KQorI2RlZmluZSBBVVRDUFUxMl9TTUNfUE9SVF9PRkZTRVQJUEJEUgorI2RlZmluZSBBVVRDUFUxMl9TTUNfU0VMRUNUX09GRlNFVCAJMHgxMAorLyoKKyogZGVmaW5lcyBmb3IgbGNkIGNvbnRyYXN0IAorKi8KKyNkZWZpbmUgQVVUQ1BVMTJfRFBPVF9QT1JUX09GRlNFVAlQRURSCisjZGVmaW5lCUFVVENQVTEyX0RQT1RfQ1MJCSgxPDwwKQorI2RlZmluZSBBVVRDUFUxMl9EUE9UX0NMSyAgICAJCSgxPDwxKQorI2RlZmluZQlBVVRDUFUxMl9EUE9UX1VECQkoMTw8MikKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbHBzNzExeC9kZWJ1Zy1tYWNyby5TIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2xwczcxMXgvZGVidWctbWFjcm8uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzBhNTc2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2xwczcxMXgvZGVidWctbWFjcm8uUwpAQCAtMCwwICsxLDQ2IEBACisvKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbHBzNzExeC9kZWJ1Zy1tYWNyby5TCisgKgorICogRGVidWdnaW5nIG1hY3JvIGluY2x1ZGUgaGVhZGVyCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NC0xOTk5IFJ1c3NlbGwgS2luZworICogIE1vdmVkIGZyb20gbGludXgvYXJjaC9hcm0va2VybmVsL2RlYnVnLlMgYnkgQmVuIERvb2tzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisqLworCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2NscHM3MTExLmg+CisKKwkJLm1hY3JvCWFkZHJ1YXJ0LHJ4CisJCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCisJCXRzdAlccngsICMxCQkJQCBNTVUgZW5hYmxlZD8KKwkJbW92ZXEJXHJ4LCAjQ0xQUzcxMTFfUEhZU19CQVNFCisJCW1vdm5lCVxyeCwgI0NMUFM3MTExX1ZJUlRfQkFTRQorI2lmbmRlZiBDT05GSUdfREVCVUdfQ0xQUzcxMVhfVUFSVDIKKwkJYWRkCVxyeCwgXHJ4LCAjMHgwMDAwCUAgVUFSVDEKKyNlbHNlCisJCWFkZAlccngsIFxyeCwgIzB4MTAwMAlAIFVBUlQyCisjZW5kaWYKKwkJLmVuZG0KKworCQkubWFjcm8Jc2VuZHVhcnQscmQscngKKwkJc3RyCVxyZCwgW1xyeCwgIzB4MDQ4MF0JQCBVQVJURFIKKwkJLmVuZG0KKworCQkubWFjcm8Jd2FpdHVhcnQscmQscngKKzEwMDE6CQlsZHIJXHJkLCBbXHJ4LCAjMHgwMTQwXQlAIFNZU0ZMR3gKKwkJdHN0CVxyZCwgIzEgPDwgMTEJCUAgVUJVU1l4CisJCWJuZQkxMDAxYgorCQkuZW5kbQorCisJCS5tYWNybwlidXN5dWFydCxyZCxyeAorCQl0c3QJXHJ4LCAjMHgxMDAwCQlAIFVBUlQyIGRvZXMgbm90IGhhdmUgQ1RTIGhlcmUKKwkJYm5lCTEwMDJmCisxMDAxOgkJbGRyCVxyZCwgW1xyeCwgIzB4MDE0MF0JQCBTWVNGTEd4CisJCXRzdAlccmQsICMxIDw8IDgJCUAgQ1RTCisJCWJuZQkxMDAxYgorMTAwMjoKKwkJLmVuZG0KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2xwczcxMXgvZG1hLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbHBzNzExeC9kbWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzRjNWM4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2xwczcxMXgvZG1hLmgKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbHBzNzExeC9kbWEuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTcsMTk5OCBSdXNzZWxsIEtpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKyNpZm5kZWYgX19BU01fQVJDSF9ETUFfSAorI2RlZmluZSBfX0FTTV9BUkNIX0RNQV9ICisKKyNkZWZpbmUgTUFYX0RNQV9BRERSRVNTCQkweGZmZmZmZmZmCisKKyNkZWZpbmUgTUFYX0RNQV9DSEFOTkVMUwkwCisKKyNlbmRpZiAvKiBfQVNNX0FSQ0hfRE1BX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2xwczcxMXgvZW50cnktbWFjcm8uUyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNscHM3MTF4L2VudHJ5LW1hY3JvLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjMxMDc5YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNscHM3MTF4L2VudHJ5LW1hY3JvLlMKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLUNMUFM3MTF4L2VudHJ5LW1hY3JvLlMKKyAqCisgKiBMb3ctbGV2ZWwgSVJRIGhlbHBlciBtYWNyb3MgZm9yIENMUFM3MTFYLWJhc2VkIHBsYXRmb3JtcworICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2NscHM3MTExLmg+CisKKwkJLm1hY3JvCWRpc2FibGVfZmlxCisJCS5lbmRtCisKKyNpZiAoSU5UU1IyIC0gSU5UU1IxKSAhPSAoSU5UTVIyIC0gSU5UTVIxKQorI2Vycm9yIElOVFNSIHN0cmlkZSAhPSBJTlRNUiBzdHJpZGUKKyNlbmRpZgorCisJCS5tYWNybwlnZXRfaXJxbnJfYW5kX2Jhc2UsIGlycW5yLCBzdGF0LCBiYXNlLCBtYXNrCisJCW1vdglcYmFzZSwgI0NMUFM3MTExX0JBU0UKKwkJbGRyCVxzdGF0LCBbXGJhc2UsICNJTlRTUjFdCisJCWxkcglcbWFzaywgW1xiYXNlLCAjSU5UTVIxXQorCQltb3YJXGlycW5yLCAjNAorCQltb3YJXG1hc2ssIFxtYXNrLCBsc2wgIzE2CisJCWFuZAlcc3RhdCwgXHN0YXQsIFxtYXNrLCBsc3IgIzE2CisJCW1vdnMJXHN0YXQsIFxzdGF0LCBsc3IgIzQKKwkJYm5lCTEwMDFmCisKKwkJYWRkCVxiYXNlLCBcYmFzZSwgI0lOVFNSMiAtIElOVFNSMQorCQlsZHIJXHN0YXQsIFtcYmFzZSwgI0lOVFNSMV0KKwkJbGRyCVxtYXNrLCBbXGJhc2UsICNJTlRNUjFdCisJCW1vdglcaXJxbnIsICMxNgorCQltb3YJXG1hc2ssIFxtYXNrLCBsc2wgIzE2CisJCWFuZAlcc3RhdCwgXHN0YXQsIFxtYXNrLCBsc3IgIzE2CisKKzEwMDE6CQl0c3QJXHN0YXQsICMyNTUKKwkJYWRkZXEJXGlycW5yLCBcaXJxbnIsICM4CisJCW1vdmVxCVxzdGF0LCBcc3RhdCwgbHNyICM4CisJCXRzdAlcc3RhdCwgIzE1CisJCWFkZGVxCVxpcnFuciwgXGlycW5yLCAjNAorCQltb3ZlcQlcc3RhdCwgXHN0YXQsIGxzciAjNAorCQl0c3QJXHN0YXQsICMzCisJCWFkZGVxCVxpcnFuciwgXGlycW5yLCAjMgorCQltb3ZlcQlcc3RhdCwgXHN0YXQsIGxzciAjMgorCQl0c3QJXHN0YXQsICMxCisJCWFkZGVxCVxpcnFuciwgXGlycW5yLCAjMQorCQltb3ZlcQlcc3RhdCwgXHN0YXQsIGxzciAjMQorCQl0c3QJXHN0YXQsICMxCQkJQCBiaXQgMCBzaG91bGQgYmUgc2V0CisJCS5lbmRtCisKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2xwczcxMXgvaGFyZHdhcmUuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNscHM3MTF4L2hhcmR3YXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM4Njg3MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNscHM3MTF4L2hhcmR3YXJlLmgKQEAgLTAsMCArMSwyMzggQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2xwczcxMXgvaGFyZHdhcmUuaAorICoKKyAqICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGhhcmR3YXJlIGRlZmluaXRpb25zIG9mIHRoZSBQcm9zcGVjdG9yIFA3MjBULgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDAgRGVlcCBCbHVlIFNvbHV0aW9ucyBMdGQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisjaWZuZGVmIF9fQVNNX0FSQ0hfSEFSRFdBUkVfSAorI2RlZmluZSBfX0FTTV9BUkNIX0hBUkRXQVJFX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjZGVmaW5lIENMUFM3MTExX1ZJUlRfQkFTRQkweGZmMDAwMDAwCisjZGVmaW5lIENMUFM3MTExX0JBU0UJCUNMUFM3MTExX1ZJUlRfQkFTRQorCisvKgorICogVGhlIHBoeXNpY2FsIGFkZHJlc3NlcyB0aGF0IHRoZSBleHRlcm5hbCBjaGlwIHNlbGVjdCBzaWduYWxzIG1hcCB0byBpcworICogZGVwZW5kZW50IG9uIHRoZSBzZXR0aW5nIG9mIHRoZSBuTUVEQ0hHIHNpZ25hbCBvbiBFUDcyMTEgYW5kIEVQNzIxMgorICogcHJvY2Vzc29ycy4gIENPTkZJR19FUDcyWFhfQk9PVF9ST00gaXMgb25seSBhdmFpbGFibGUgaWYgdGhlc2UKKyAqIHByb2Nlc3NvcnMgYXJlIGluIHVzZS4KKyAqLworI2lmbmRlZiBDT05GSUdfRVA3MlhYX1JPTV9CT09UCisjZGVmaW5lIENTMF9QSFlTX0JBU0UJCSgweDAwMDAwMDAwKQorI2RlZmluZSBDUzFfUEhZU19CQVNFCQkoMHgxMDAwMDAwMCkKKyNkZWZpbmUgQ1MyX1BIWVNfQkFTRQkJKDB4MjAwMDAwMDApCisjZGVmaW5lIENTM19QSFlTX0JBU0UJCSgweDMwMDAwMDAwKQorI2RlZmluZSBDUzRfUEhZU19CQVNFCQkoMHg0MDAwMDAwMCkKKyNkZWZpbmUgQ1M1X1BIWVNfQkFTRQkJKDB4NTAwMDAwMDApCisjZGVmaW5lIENTNl9QSFlTX0JBU0UJCSgweDYwMDAwMDAwKQorI2RlZmluZSBDUzdfUEhZU19CQVNFCQkoMHg3MDAwMDAwMCkKKyNlbHNlCisjZGVmaW5lIENTMF9QSFlTX0JBU0UJCSgweDcwMDAwMDAwKQorI2RlZmluZSBDUzFfUEhZU19CQVNFCQkoMHg2MDAwMDAwMCkKKyNkZWZpbmUgQ1MyX1BIWVNfQkFTRQkJKDB4NTAwMDAwMDApCisjZGVmaW5lIENTM19QSFlTX0JBU0UJCSgweDQwMDAwMDAwKQorI2RlZmluZSBDUzRfUEhZU19CQVNFCQkoMHgzMDAwMDAwMCkKKyNkZWZpbmUgQ1M1X1BIWVNfQkFTRQkJKDB4MjAwMDAwMDApCisjZGVmaW5lIENTNl9QSFlTX0JBU0UJCSgweDEwMDAwMDAwKQorI2RlZmluZSBDUzdfUEhZU19CQVNFCQkoMHgwMDAwMDAwMCkKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoQ09ORklHX0FSQ0hfRVA3MjExKQorCisjZGVmaW5lIEVQNzIxMV9WSVJUX0JBU0UJQ0xQUzcxMTFfVklSVF9CQVNFCisjZGVmaW5lIEVQNzIxMV9CQVNFCQlDTFBTNzExMV9WSVJUX0JBU0UKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvZXA3MjExLmg+CisKKyNlbGlmIGRlZmluZWQgKENPTkZJR19BUkNIX0VQNzIxMikKKworI2RlZmluZSBFUDcyMTJfVklSVF9CQVNFCUNMUFM3MTExX1ZJUlRfQkFTRQorI2RlZmluZSBFUDcyMTJfQkFTRQkJQ0xQUzcxMTFfVklSVF9CQVNFCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2VwNzIxMi5oPgorCisjZW5kaWYKKworI2RlZmluZSBTWVNQTERfVklSVF9CQVNFCTB4ZmUwMDAwMDAKKyNkZWZpbmUgU1lTUExEX0JBU0UJCVNZU1BMRF9WSVJUX0JBU0UKKworI2lmbmRlZiBfX0FTU0VNQkxFUl9fCisKKyNkZWZpbmUgUENJT19CQVNFCQlJT19CQVNFCisKKyNlbmRpZgorCisKKyNpZiAgZGVmaW5lZCAoQ09ORklHX0FSQ0hfQVVUQ1BVMTIpCisKKyNkZWZpbmUgIENTODk3MTJfVklSVF9CQVNFCUNMUFM3MTExX1ZJUlRfQkFTRQorI2RlZmluZSAgQ1M4OTcxMl9CQVNFCQlDTFBTNzExMV9WSVJUX0JBU0UKKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9jbHBzNzExMS5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9lcDcyMTIuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvY3M4OTcxMi5oPgorCisjZW5kaWYKKworCisjaWYgZGVmaW5lZCAoQ09ORklHX0FSQ0hfQ0RCODk3MTIpCisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvY2xwczcxMTEuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvZXA3MjEyLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2NzODk3MTIuaD4KKworLyogZHluYW1pYyBpb3JlbWFwKCkgYXJlYXMgKi8KKyNkZWZpbmUgRkxBU0hfU1RBUlQgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIEZMQVNIX1NJWkUgICAgICAgMHg4MDAwMDAKKyNkZWZpbmUgRkxBU0hfV0lEVEggICAgICA0CisKKyNkZWZpbmUgU1JBTV9TVEFSVCAgICAgICAweDYwMDAwMDAwCisjZGVmaW5lIFNSQU1fU0laRSAgICAgICAgMHhjMDAwCisjZGVmaW5lIFNSQU1fV0lEVEggICAgICAgNAorCisjZGVmaW5lIEJPT1RST01fU1RBUlQgICAgMHg3MDAwMDAwMAorI2RlZmluZSBCT09UUk9NX1NJWkUgICAgIDB4ODAKKyNkZWZpbmUgQk9PVFJPTV9XSURUSCAgICA0CisKKworLyogc3RhdGljIGNkYjg5NzEyX21hcF9pbygpIGFyZWFzICovCisjZGVmaW5lIFJFR0lTVEVSX1NUQVJUICAgMHg4MDAwMDAwMAorI2RlZmluZSBSRUdJU1RFUl9TSVpFICAgIDB4NDAwMAorI2RlZmluZSBSRUdJU1RFUl9CQVNFICAgIDB4ZmYwMDAwMDAKKworI2RlZmluZSBFVEhFUl9TVEFSVCAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgRVRIRVJfU0laRSAgICAgICAweDEwMDAKKyNkZWZpbmUgRVRIRVJfQkFTRSAgICAgICAweGZlMDAwMDAwCisKKyNlbmRpZgorCisKKyNpZiBkZWZpbmVkIChDT05GSUdfQVJDSF9FREI3MjExKQorCisvKgorICogVGhlIGV4dHJhIDggbGluZXMgb2YgdGhlIGtleWJvYXJkIG1hdHJpeCBhcmUgd2lyZWQgdG8gY2hpcCBzZWxlY3QgMyAobkNTMykgCisgKiBhbmQgcmVwZWF0IGFjcm9zcyBpdC4gVGhpcyBpcyB0aGUgbWFwcGluZyBmb3IgaXQuCisgKgorICogSW4ganVtcGVyZWQgYm9vdCBtb2RlLCBuQ1MzIGlzIG1hcHBlZCB0byAweDQwMDAwMDAsIG5vdCAweDMwMDAwMDAuIFRoaXMgCisgKiB3YXMgY2F1c2UgZm9yIG11Y2ggY29uc3Rlcm5hdGlvbiBhbmQgaGVhZHNjcmF0Y2hpbmcuIFRoaXMgc2hvdWxkIHByb2JhYmx5CisgKiBiZSBtYWRlIGEgY29tcGlsZS9ydW4gdGltZSBrZXJuZWwgb3B0aW9uLgorICovCisjZGVmaW5lIEVQNzIxMV9QSFlTX0VYVEtCRAkJQ1MzX1BIWVNfQkFTRQkvKiBwaHlzaWNhbCAqLworCisjZGVmaW5lIEVQNzIxMV9WSVJUX0VYVEtCRAkJKDB4ZmQwMDAwMDApCS8qIHZpcnR1YWwgKi8KKworCisvKgorICogVGhlIENTODkwMEEgZXRoZXJuZXQgY2hpcCBoYXMgaXRzIEkvTyByZWdpc3RlcnMgd2lyZWQgdG8gY2hpcCBzZWxlY3QgMiAKKyAqIChuQ1MyKS4gVGhpcyBpcyB0aGUgbWFwcGluZyBmb3IgaXQuCisgKgorICogSW4ganVtcGVyZWQgYm9vdCBtb2RlLCBuQ1MyIGlzIG1hcHBlZCB0byAweDUwMDAwMDAsIG5vdCAweDIwMDAwMDAuIFRoaXMgCisgKiB3YXMgY2F1c2UgZm9yIG11Y2ggY29uc3Rlcm5hdGlvbiBhbmQgaGVhZHNjcmF0Y2hpbmcuIFRoaXMgc2hvdWxkIHByb2JhYmx5CisgKiBiZSBtYWRlIGEgY29tcGlsZS9ydW4gdGltZSBrZXJuZWwgb3B0aW9uLgorICovCisjZGVmaW5lIEVQNzIxMV9QSFlTX0NTODkwMEEJCUNTMl9QSFlTX0JBU0UJLyogcGh5c2ljYWwgKi8KKworI2RlZmluZSBFUDcyMTFfVklSVF9DUzg5MDBBCQkoMHhmYzAwMDAwMCkJLyogdmlydHVhbCAqLworCisKKy8qCisgKiBUaGUgdHdvIGZsYXNoIGJhbmtzIGFyZSB3aXJlZCB0byBjaGlwIHNlbGVjdHMgMCBhbmQgMS4gVGhpcyBpcyB0aGUgbWFwcGluZworICogZm9yIHRoZW0uCisgKgorICogbkNTMCBhbmQgbkNTMSBhcmUgYXQgMHg3MDAwMDAwMCBhbmQgMHg2MDAwMDAwMCwgcmVzcGVjdGl2ZWx5LCB3aGVuIHJ1bm5pbmcKKyAqIGluIGp1bXBlcmVkIGJvb3QgbW9kZS4KKyAqLworI2RlZmluZSBFUDcyMTFfUEhZU19GTEFTSDEJCUNTMF9QSFlTX0JBU0UJLyogcGh5c2ljYWwgKi8KKyNkZWZpbmUgRVA3MjExX1BIWVNfRkxBU0gyCQlDUzFfUEhZU19CQVNFCS8qIHBoeXNpY2FsICovCisKKyNkZWZpbmUgRVA3MjExX1ZJUlRfRkxBU0gxCQkoMHhmYTAwMDAwMCkJLyogdmlydHVhbCAqLworI2RlZmluZSBFUDcyMTFfVklSVF9GTEFTSDIJCSgweGZiMDAwMDAwKQkvKiB2aXJ0dWFsICovCisKKyNlbmRpZiAvKiBDT05GSUdfQVJDSF9FREI3MjExICovCisKKworLyoKKyAqIFJlbGV2YW50IGJpdHMgaW4gcG9ydCBELCB3aGljaCBjb250cm9scyBwb3dlciB0byB0aGUgdmFyaW91cyBwYXJ0cyBvZgorICogdGhlIExDRCBvbiB0aGUgRURCNzIxMS4KKyAqLworI2RlZmluZSBFREJfUEQxX0xDRF9EQ19EQ19FTgkoMTw8MSkKKyNkZWZpbmUgRURCX1BEMl9MQ0RFTgkJKDE8PDIpCisjZGVmaW5lIEVEQl9QRDNfTENEQkwJCSgxPDwzKQorCisKKyNpZiBkZWZpbmVkIChDT05GSUdfQVJDSF9DRUlWQSkKKworI2RlZmluZSAgQ0VJVkFfVklSVF9CQVNFCUNMUFM3MTExX1ZJUlRfQkFTRQorI2RlZmluZSAgQ0VJVkFfQkFTRQkJQ0xQUzcxMTFfVklSVF9CQVNFCisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvY2xwczcxMTEuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvZXA3MjEyLmg+CisKKworLyoKKyAqIFRoZSB0d28gZmxhc2ggYmFua3MgYXJlIHdpcmVkIHRvIGNoaXAgc2VsZWN0cyAwIGFuZCAxLiBUaGlzIGlzIHRoZSBtYXBwaW5nCisgKiBmb3IgdGhlbS4KKyAqCisgKiBuQ1MwIGFuZCBuQ1MxIGFyZSBhdCAweDcwMDAwMDAwIGFuZCAweDYwMDAwMDAwLCByZXNwZWN0aXZlbHksIHdoZW4gcnVubmluZworICogaW4ganVtcGVyZWQgYm9vdCBtb2RlLgorICovCisjZGVmaW5lIENFSVZBX1BIWVNfRkxBU0gxCUNTMF9QSFlTX0JBU0UJLyogcGh5c2ljYWwgKi8KKyNkZWZpbmUgQ0VJVkFfUEhZU19GTEFTSDIJQ1MxX1BIWVNfQkFTRQkvKiBwaHlzaWNhbCAqLworCisjZGVmaW5lIENFSVZBX1ZJUlRfRkxBU0gxCSgweGZhMDAwMDAwKQkvKiB2aXJ0dWFsICovCisjZGVmaW5lIENFSVZBX1ZJUlRfRkxBU0gyCSgweGZiMDAwMDAwKQkvKiB2aXJ0dWFsICovCisKKyNkZWZpbmUgQ0VJVkFfRkxBU0hfU0laRSAgICAgICAgMHgxMDAwMDAKKyNkZWZpbmUgQ0VJVkFfRkxBU0hfV0lEVEggICAgICAgMgorCisjZGVmaW5lIFNSQU1fU1RBUlQgICAgICAgMHg2MDAwMDAwMAorI2RlZmluZSBTUkFNX1NJWkUgICAgICAgIDB4YzAwMAorI2RlZmluZSBTUkFNX1dJRFRIICAgICAgIDQKKworI2RlZmluZSBCT09UUk9NX1NUQVJUICAgIDB4NzAwMDAwMDAKKyNkZWZpbmUgQk9PVFJPTV9TSVpFICAgICAweDgwCisjZGVmaW5lIEJPT1RST01fV0lEVEggICAgNAorCisvKgorICogU0VEMTM1NSBMQ0QgY29udHJvbGxlcgorICovCisjZGVmaW5lIENFSVZBX1BIWVNfU0VEMTM1NQlDUzJfUEhZU19CQVNFCisjZGVmaW5lIENFSVZBX1ZJUlRfU0VEMTM1NQkoMHhmYzAwMDAwMCkKKworLyoKKyAqIFJlbGV2YW50IGJpdHMgaW4gcG9ydCBELCB3aGljaCBjb250cm9scyBwb3dlciB0byB0aGUgdmFyaW91cyBwYXJ0cyBvZgorICogdGhlIExDRCBvbiB0aGUgQ2VpdmEgUGhvdG8gTWF4LCBhbmQgcmVzZXQgdG8gdGhlIExDRCBjb250cm9sbGVyLgorICovCisKKy8vIFJlc2V0IGxpbmUgdG8gU0VEMTM1NSAobXVzdCBiZSBoaWdoIHRvIG9wZXJhdGUpCisjZGVmaW5lIENFSVZBX1BEMV9MQ0RSU1QJKDE8PDEpCisvLyBMQ0QgcGFuZWwgZW5hYmxlIChzZXQgdG8gb25lLCB0byBlbmFibGUgTENEKQorI2RlZmluZSBDRUlWQV9QRDRfTENERU4JCSgxPDw0KQorLy8gQmFja2xpZ2h0IChzZXQgdG8gb25lLCB0byB0dXJuIG9uIGJhY2tsaWdodAorI2RlZmluZSBDRUlWQV9QRDVfTENEQkwJCSgxPDw1KQorCisvKgorICogUmVsZXZhbnQgYml0cyBpbiBwb3J0IEIsIHdoaWNoIHJlcG9ydCB0aGUgc3RhdHVzIG9mIHRoZSBidXR0b25zLgorICovCisKKy8vIFdoaXRlIGJ1dHRvbgorI2RlZmluZSBDRUlWQV9QQjRfV0hUX0JUTgkoMTw8NCkKKy8vIEJsYWNrIGJ1dHRvbgorI2RlZmluZSBDRUlWQV9QQjBfQkxLX0JUTgkoMTw8MCkKKyNlbmRpZiAvLyAjaWYgZGVmaW5lZCAoQ09ORklHX0FSQ0hfQ0VJVkEpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2xwczcxMXgvaW8uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNscHM3MTF4L2lvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRkN2U4ZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNscHM3MTF4L2lvLmgKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbHBzNzExeC9pby5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5OSBBUk0gTGltaXRlZAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworI2lmbmRlZiBfX0FTTV9BUk1fQVJDSF9JT19ICisjZGVmaW5lIF9fQVNNX0FSTV9BUkNIX0lPX0gKKworI2RlZmluZSBJT19TUEFDRV9MSU1JVCAweGZmZmZmZmZmCisKKyNkZWZpbmUgX19pbyhhKQkJCSgodm9pZCBfX2lvbWVtICopKGEpKQorI2RlZmluZSBfX21lbV9wY2koYSkJCShhKQorI2RlZmluZSBfX21lbV9pc2EoYSkJCShhKQorCisvKgorICogV2UgZG9uJ3Qgc3VwcG9ydCBpbnNbbGJdL291dHNbbGJdLiAgTWFrZSB0aGVtIGZhdWx0LgorICovCisjZGVmaW5lIF9fcmF3X3JlYWRzYihwLGQsbCkJZG8geyAqKGludCAqKTAgPSAwOyB9IHdoaWxlICgwKQorI2RlZmluZSBfX3Jhd19yZWFkc2wocCxkLGwpCWRvIHsgKihpbnQgKikwID0gMDsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgX19yYXdfd3JpdGVzYihwLGQsbCkJZG8geyAqKGludCAqKTAgPSAwOyB9IHdoaWxlICgwKQorI2RlZmluZSBfX3Jhd193cml0ZXNsKHAsZCxsKQlkbyB7ICooaW50ICopMCA9IDA7IH0gd2hpbGUgKDApCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2xwczcxMXgvaXJxcy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2xwczcxMXgvaXJxcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2MDI1ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbHBzNzExeC9pcnFzLmgKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbHBzNzExeC9pcnFzLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwIERlZXAgQmx1ZSBTb2x1dGlvbnMgTHRkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisvKgorICogSW50ZXJydXB0cyBmcm9tIElOVFNSMQorICovCisjZGVmaW5lIElSUV9DU0lOVAkJCTQKKyNkZWZpbmUgSVJRX0VJTlQxCQkJNQorI2RlZmluZSBJUlFfRUlOVDIJCQk2CisjZGVmaW5lIElSUV9FSU5UMwkJCTcKKyNkZWZpbmUgSVJRX1RDMU9JCQkJOAorI2RlZmluZSBJUlFfVEMyT0kJCQk5CisjZGVmaW5lIElSUV9SVENNSQkJCTEwCisjZGVmaW5lIElSUV9USU5UCQkJMTEKKyNkZWZpbmUgSVJRX1VUWElOVDEJCQkxMgorI2RlZmluZSBJUlFfVVJYSU5UMQkJCTEzCisjZGVmaW5lIElSUV9VTVNJTlQJCQkxNAorI2RlZmluZSBJUlFfU1NFT1RJCQkJMTUKKworI2RlZmluZSBJTlQxX0lSUVMJCQkoMHgwMDAwZmZmMCkKKyNkZWZpbmUgSU5UMV9BQ0tfSVJRUwkJCSgweDAwMDA0ZjEwKQorCisvKgorICogSW50ZXJydXB0cyBmcm9tIElOVFNSMgorICovCisjZGVmaW5lIElSUV9LQkRJTlQJCQkoMTYrMCkJLyogYml0IDAgKi8KKyNkZWZpbmUgSVJRX1NTMlJYCQkJKDE2KzEpCS8qIGJpdCAxICovCisjZGVmaW5lIElSUV9TUzJUWAkJCSgxNisyKQkvKiBiaXQgMiAqLworI2RlZmluZSBJUlFfVVRYSU5UMgkJCSgxNisxMikJLyogYml0IDEyICovCisjZGVmaW5lIElSUV9VUlhJTlQyCQkJKDE2KzEzKQkvKiBiaXQgMTMgKi8KKworI2RlZmluZSBJTlQyX0lSUVMJCQkoMHgzMDA3MDAwMCkKKyNkZWZpbmUgSU5UMl9BQ0tfSVJRUwkJCSgweDAwMDEwMDAwKQorCisjZGVmaW5lIE5SX0lSUVMgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2xwczcxMXgvbWVtb3J5LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbHBzNzExeC9tZW1vcnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDk3ODk0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2xwczcxMXgvbWVtb3J5LmgKQEAgLTAsMCArMSwxMjggQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2xwczcxMXgvbWVtb3J5LmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5IEFSTSBMaW1pdGVkCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisjaWZuZGVmIF9fQVNNX0FSQ0hfTUVNT1JZX0gKKyNkZWZpbmUgX19BU01fQVJDSF9NRU1PUllfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKy8qCisgKiBQaHlzaWNhbCBEUkFNIG9mZnNldC4KKyAqLworI2RlZmluZSBQSFlTX09GRlNFVAkoMHhjMDAwMDAwMFVMKQorCisvKgorICogVmlydHVhbCB2aWV3IDwtPiBETUEgdmlldyBtZW1vcnkgYWRkcmVzcyB0cmFuc2xhdGlvbnMKKyAqIHZpcnRfdG9fYnVzOiBVc2VkIHRvIHRyYW5zbGF0ZSB0aGUgdmlydHVhbCBhZGRyZXNzIHRvIGFuCisgKiAgICAgICAgICAgICAgYWRkcmVzcyBzdWl0YWJsZSB0byBiZSBwYXNzZWQgdG8gc2V0X2RtYV9hZGRyCisgKiBidXNfdG9fdmlydDogVXNlZCB0byBjb252ZXJ0IGFuIGFkZHJlc3MgZm9yIERNQSBvcGVyYXRpb25zCisgKiAgICAgICAgICAgICAgdG8gYW4gYWRkcmVzcyB0aGF0IHRoZSBrZXJuZWwgY2FuIHVzZS4KKyAqLworCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9DREI4OTcxMikKKworI2RlZmluZSBfX3ZpcnRfdG9fYnVzKHgpCSh4KQorI2RlZmluZSBfX2J1c190b192aXJ0KHgpCSh4KQorCisjZWxpZiBkZWZpbmVkIChDT05GSUdfQVJDSF9BVVRDUFUxMikKKworI2RlZmluZSBfX3ZpcnRfdG9fYnVzKHgpCSh4KQorI2RlZmluZSBfX2J1c190b192aXJ0KHgpCSh4KQorCisjZWxzZQorCisjZGVmaW5lIF9fdmlydF90b19idXMoeCkJKCh4KSAtIFBBR0VfT0ZGU0VUKQorI2RlZmluZSBfX2J1c190b192aXJ0KHgpCSgoeCkgKyBQQUdFX09GRlNFVCkKKworI2VuZGlmCisKKworLyoKKyAqIExpa2UgdGhlIFNBMTEwMCwgdGhlIEVEQjcyMTEgaGFzIGEgbGFyZ2UgZ2FwIGJldHdlZW4gcGh5c2ljYWwgUkFNCisgKiBiYW5rcy4gIEluIDIuMiwgdGhlIFBzaW9uIChDTC1QUzcxMTApIHBvcnQgYWRkZWQgY3VzdG9tIHN1cHBvcnQgZm9yCisgKiBkaXNjb250aWd1b3VzIHBoeXNpY2FsIG1lbW9yeS4gIEluIDIuNCwgd2UgY2FuIHVzZSB0aGUgc3RhbmRhcmQKKyAqIExpbnV4IE5VTUEgc3VwcG9ydC4KKyAqCisgKiBUaGlzIGlzIG5vdCBuZWNlc3NhcnkgZm9yIEVQNzIxMSBpbXBsZW1lbnRhdGlvbnMgd2l0aCBvbmx5IG9uZSB1c2VkCisgKiBtZW1vcnkgYmFuay4gIEZvciB0aG9zZSBzeXN0ZW1zLCBzaW1wbHkgdW5kZWZpbmUgQ09ORklHX0RJU0NPTlRJR01FTS4KKyAqLworCisjaWZkZWYgQ09ORklHX0RJU0NPTlRJR01FTQorLyoKKyAqIEJlY2F1c2Ugb2YgdGhlIHdpZGUgbWVtb3J5IGFkZHJlc3Mgc3BhY2UgYmV0d2VlbiBwaHlzaWNhbCBSQU0gYmFua3Mgb24gdGhlIAorICogU0ExMTAwLCBpdCdzIG11Y2ggbW9yZSBjb252ZW5pZW50IHRvIHVzZSBMaW51eCdzIE5VTUEgc3VwcG9ydCB0byBpbXBsZW1lbnQKKyAqIG91ciBtZW1vcnkgbWFwIHJlcHJlc2VudGF0aW9uLiAgQXNzdW1pbmcgYWxsIG1lbW9yeSBub2RlcyBoYXZlIGVxdWFsIGFjY2VzcyAKKyAqIGNoYXJhY3RlcmlzdGljcywgd2UgdGhlbiBoYXZlIGdlbmVyaWMgZGlzY29udGlndW91cyBtZW1vcnkgc3VwcG9ydC4KKyAqCisgKiBPZiBjb3Vyc2UsIGFsbCB0aGlzIGlzbid0IG1hbmRhdG9yeSBmb3IgU0ExMTAwIGltcGxlbWVudGF0aW9ucyB3aXRoIG9ubHkKKyAqIG9uZSB1c2VkIG1lbW9yeSBiYW5rLiAgRm9yIHRob3NlLCBzaW1wbHkgdW5kZWZpbmUgQ09ORklHX0RJU0NPTlRJR01FTS4KKyAqCisgKiBUaGUgbm9kZXMgYXJlIG1hdGNoZWQgd2l0aCB0aGUgcGh5c2ljYWwgbWVtb3J5IGJhbmsgYWRkcmVzc2VzIHdoaWNoIGFyZSAKKyAqIGluY2lkZW50YWxseSB0aGUgc2FtZSBhcyB2aXJ0dWFsIGFkZHJlc3Nlcy4KKyAqIAorICogCW5vZGUgMDogIDB4YzAwMDAwMDAgLSAweGM3ZmZmZmZmCisgKiAJbm9kZSAxOiAgMHhjODAwMDAwMCAtIDB4Y2ZmZmZmZmYKKyAqIAlub2RlIDI6ICAweGQwMDAwMDAwIC0gMHhkN2ZmZmZmZgorICogCW5vZGUgMzogIDB4ZDgwMDAwMDAgLSAweGRmZmZmZmZmCisgKi8KKworLyoKKyAqIEdpdmVuIGEga2VybmVsIGFkZHJlc3MsIGZpbmQgdGhlIGhvbWUgbm9kZSBvZiB0aGUgdW5kZXJseWluZyBtZW1vcnkuCisgKi8KKyNkZWZpbmUgS1ZBRERSX1RPX05JRChhZGRyKSBcCisJCSgoKHVuc2lnbmVkIGxvbmcpKGFkZHIpIC0gUEFHRV9PRkZTRVQpID4+IE5PREVfTUFYX01FTV9TSElGVCkKKworLyoKKyAqIEdpdmVuIGEgcGFnZSBmcmFtZSBudW1iZXIsIGNvbnZlcnQgaXQgdG8gYSBub2RlIGlkLgorICovCisjZGVmaW5lIFBGTl9UT19OSUQocGZuKSBcCisJKCgocGZuKSAtIFBIWVNfUEZOX09GRlNFVCkgPj4gKE5PREVfTUFYX01FTV9TSElGVCAtIFBBR0VfU0hJRlQpKQorCisvKgorICogR2l2ZW4gYSBrYWRkciwgQUREUl9UT19NQVBCQVNFIGZpbmRzIHRoZSBvd25pbmcgbm9kZSBvZiB0aGUgbWVtb3J5CisgKiBhbmQgcmV0dXJucyB0aGUgbWVtX21hcCBvZiB0aGF0IG5vZGUuCisgKi8KKyNkZWZpbmUgQUREUl9UT19NQVBCQVNFKGthZGRyKSBcCisJCQlOT0RFX01FTV9NQVAoS1ZBRERSX1RPX05JRCgodW5zaWduZWQgbG9uZykoa2FkZHIpKSkKKworI2RlZmluZSBQRk5fVE9fTUFQQkFTRShwZm4pCU5PREVfTUVNX01BUChQRk5fVE9fTklEKHBmbikpCisKKy8qCisgKiBHaXZlbiBhIGthZGRyLCBMT0NBTF9NQVJfTlIgZmluZHMgdGhlIG93bmluZyBub2RlIG9mIHRoZSBtZW1vcnkKKyAqIGFuZCByZXR1cm5zIHRoZSBpbmRleCBjb3JyZXNwb25kaW5nIHRvIHRoZSBhcHByb3ByaWF0ZSBwYWdlIGluIHRoZQorICogbm9kZSdzIG1lbV9tYXAuCisgKi8KKyNkZWZpbmUgTE9DQUxfTUFQX05SKGFkZHIpIFwKKwkoKCh1bnNpZ25lZCBsb25nKShhZGRyKSAmIChOT0RFX01BWF9NRU1fU0laRSAtIDEpKSA+PiBQQUdFX1NISUZUKQorCisvKgorICogVGhlIFBTNzIxMSBhbGxvd3MgdXAgdG8gMjU2TUIgbWF4IHBlciBEUkFNIGJhbmssIGJ1dCB0aGUgRURCNzIxMQorICogdXNlcyBvbmx5IG9uZSBvZiB0aGUgdHdvIGJhbmtzIChiYW5rICMxKS4gIEhvd2V2ZXIsIGV2ZW4gd2l0aGluCisgKiBiYW5rICMxLCBtZW1vcnkgaXMgZGlzY29udGlndW91cy4KKyAqCisgKiBUaGUgRURCNzIxMSBoYXMgdHdvIDhNQiBEUkFNIGFyZWFzIHdpdGggOE1CIG9mIGVtcHR5IHNwYWNlIGJldHdlZW4KKyAqIHRoZW0sIHNvIHdlIHVzZSAyNCBmb3IgdGhlIG5vZGUgbWF4IHNoaWZ0IHRvIGdldCAxNk1CIG5vZGUgc2l6ZXMuCisgKi8KKyNkZWZpbmUgTk9ERV9NQVhfTUVNX1NISUZUCTI0CisjZGVmaW5lIE5PREVfTUFYX01FTV9TSVpFCSgxPDxOT0RFX01BWF9NRU1fU0hJRlQpCisKKyNlbmRpZiAvKiBDT05GSUdfRElTQ09OVElHTUVNICovCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbHBzNzExeC9wYXJhbS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2xwczcxMXgvcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmY2YmQyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2xwczcxMXgvcGFyYW0uaApAQCAtMCwwICsxLDE5IEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWNscHM3MTF4L3BhcmFtLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwIERlZXAgQmx1ZSBTb2x1dGlvbnMgTHRkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2xwczcxMXgvc3lzcGxkLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbHBzNzExeC9zeXNwbGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjA1NzhhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2xwczcxMXgvc3lzcGxkLmgKQEAgLTAsMCArMSwxMjEgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2xwczcxMXgvc3lzcGxkLmgKKyAqCisgKiAgU3lzdGVtIENvbnRyb2wgUExEIHJlZ2lzdGVyIGRlZmluaXRpb25zLgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDAgRGVlcCBCbHVlIFNvbHV0aW9ucyBMdGQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisjaWZuZGVmIF9fQVNNX0FSQ0hfU1lTUExEX0gKKyNkZWZpbmUgX19BU01fQVJDSF9TWVNQTERfSAorCisjZGVmaW5lIFNZU1BMRF9QSFlTX0JBU0UJKDB4MTAwMDAwMDApCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisKKyNkZWZpbmUgU1lTUExEX1JFRyh0eXBlLG9mZikJKCoodm9sYXRpbGUgdHlwZSAqKShTWVNQTERfQkFTRSArIG9mZikpCisjZWxzZQorI2RlZmluZSBTWVNQTERfUkVHKHR5cGUsb2ZmKQkob2ZmKQorI2VuZGlmCisKKyNkZWZpbmUgUExEX0lOVAkJU1lTUExEX1JFRyh1MzIsIDB4MDAwMDAwKQorI2RlZmluZSBQTERfSU5UX1BFTklSUQkJKDEgPDwgNSkKKyNkZWZpbmUgUExEX0lOVF9VQ0JfSVJRCQkoMSA8PCAxKQorI2RlZmluZSBQTERfSU5UX0tCRF9BVE4JCSgxIDw8IDApCS8qIEVJTlQxICovCisKKyNkZWZpbmUgUExEX1BXUgkJU1lTUExEX1JFRyh1MzIsIDB4MDAwMDA0KQorI2RlZmluZSBQTERfUFdSX0VYVAkJKDEgPDwgNSkKKyNkZWZpbmUgUExEX1BXUl9NT0RFCQkoMSA8PCA0KQkvKiAxID0gUFdNLCAwID0gUEZNICovCisjZGVmaW5lIFBMRF9TNF9PTgkJKDEgPDwgMykJLyogTENEIGJpYXMgdm9sdGFnZSBlbmFibGUgKi8KKyNkZWZpbmUgUExEX1MzX09OCQkoMSA8PCAyKQkvKiBMQ0QgYmFja2xpZ2h0IGVuYWJsZSAqLworI2RlZmluZSBQTERfUzJfT04JCSgxIDw8IDEpCS8qIExDRCAzVjMgc3VwcGx5IGVuYWJsZSAqLworI2RlZmluZSBQTERfUzFfT04JCSgxIDw8IDApCS8qIExDRCAzViBzdXBwbHkgZW5hYmxlICovCisKKyNkZWZpbmUgUExEX0tCRAkJU1lTUExEX1JFRyh1MzIsIDB4MDAwMDA4KQorI2RlZmluZSBQTERfS0JEX1dBS0UJCSgxIDw8IDEpCisjZGVmaW5lIFBMRF9LQkRfRU4JCSgxIDw8IDApCisKKyNkZWZpbmUgUExEX1NQSQkJU1lTUExEX1JFRyh1MzIsIDB4MDAwMDBjKQorI2RlZmluZSBQTERfU1BJX0VOCQkoMSA8PCAwKQorCisjZGVmaW5lIFBMRF9JTwkJU1lTUExEX1JFRyh1MzIsIDB4MDAwMDEwKQorI2RlZmluZSBQTERfSU9fQk9PVFNFTAkJKDEgPDwgNikJLyogYm9vdCBzZWwgc3dpdGNoICovCisjZGVmaW5lIFBMRF9JT19VU0VSCQkoMSA8PCA1KQkvKiB1c2VyIGRlZmluZWQgc3dpdGNoICovCisjZGVmaW5lIFBMRF9JT19MRUQzCQkoMSA8PCA0KQorI2RlZmluZSBQTERfSU9fTEVEMgkJKDEgPDwgMykKKyNkZWZpbmUgUExEX0lPX0xFRDEJCSgxIDw8IDIpCisjZGVmaW5lIFBMRF9JT19MRUQwCQkoMSA8PCAxKQorI2RlZmluZSBQTERfSU9fTEVERU4JCSgxIDw8IDApCisKKyNkZWZpbmUgUExEX0lSREEJU1lTUExEX1JFRyh1MzIsIDB4MDAwMDE0KQorI2RlZmluZSBQTERfSVJEQV9FTgkJKDEgPDwgMCkKKworI2RlZmluZSBQTERfQ09NMglTWVNQTERfUkVHKHUzMiwgMHgwMDAwMTgpCisjZGVmaW5lIFBMRF9DT00yX0VOCQkoMSA8PCAwKQorCisjZGVmaW5lIFBMRF9DT00xCVNZU1BMRF9SRUcodTMyLCAweDAwMDAxYykKKyNkZWZpbmUgUExEX0NPTTFfRU4JCSgxIDw8IDApCisKKyNkZWZpbmUgUExEX0FVRAkJU1lTUExEX1JFRyh1MzIsIDB4MDAwMDIwKQorI2RlZmluZSBQTERfQVVEX0RJVjEJCSgxIDw8IDYpCisjZGVmaW5lIFBMRF9BVURfRElWMAkJKDEgPDwgNSkKKyNkZWZpbmUgUExEX0FVRF9DTEtfU0VMMQkoMSA8PCA0KQorI2RlZmluZSBQTERfQVVEX0NMS19TRUwwCSgxIDw8IDMpCisjZGVmaW5lIFBMRF9BVURfTUlDX1BXUgkJKDEgPDwgMikKKyNkZWZpbmUgUExEX0FVRF9NSUNfR0FJTgkoMSA8PCAxKQorI2RlZmluZSBQTERfQVVEX0NPREVDX0VOCSgxIDw8IDApCisKKyNkZWZpbmUgUExEX0NGCQlTWVNQTERfUkVHKHUzMiwgMHgwMDAwMjQpCisjZGVmaW5lIFBMRF9DRjJfU0xFRVAJCSgxIDw8IDUpCisjZGVmaW5lIFBMRF9DRjFfU0xFRVAJCSgxIDw8IDQpCisjZGVmaW5lIFBMRF9DRjJfblBEUkVRCQkoMSA8PCAzKQorI2RlZmluZSBQTERfQ0YxX25QRFJFUQkJKDEgPDwgMikKKyNkZWZpbmUgUExEX0NGMl9uSVJRCQkoMSA8PCAxKQorI2RlZmluZSBQTERfQ0YxX25JUlEJCSgxIDw8IDApCisKKyNkZWZpbmUgUExEX1NEQwkJU1lTUExEX1JFRyh1MzIsIDB4MDAwMDI4KQorI2RlZmluZSBQTERfU0RDX0lOVF9FTgkJKDEgPDwgMikKKyNkZWZpbmUgUExEX1NEQ19XUAkJKDEgPDwgMSkKKyNkZWZpbmUgUExEX1NEQ19DRAkJKDEgPDwgMCkKKworI2RlZmluZSBQTERfRlBHQQlTWVNQTERfUkVHKHUzMiwgMHgwMDAwMmMpCisKKyNkZWZpbmUgUExEX0NPREVDCVNZU1BMRF9SRUcodTMyLCAweDQwMDAwMCkKKyNkZWZpbmUgUExEX0NPREVDX0lSUTMJCSgxIDw8IDQpCisjZGVmaW5lIFBMRF9DT0RFQ19JUlEyCQkoMSA8PCAzKQorI2RlZmluZSBQTERfQ09ERUNfSVJRMQkJKDEgPDwgMikKKyNkZWZpbmUgUExEX0NPREVDX0VOCQkoMSA8PCAwKQorCisjZGVmaW5lIFBMRF9CUklURQlTWVNQTERfUkVHKHUzMiwgMHg0MDAwMDQpCisjZGVmaW5lIFBMRF9CUklURV9VUAkJKDEgPDwgMSkKKyNkZWZpbmUgUExEX0JSSVRFX0ROCQkoMSA8PCAwKQorCisjZGVmaW5lIFBMRF9MQ0RFTglTWVNQTERfUkVHKHUzMiwgMHg0MDAwMDgpCisjZGVmaW5lIFBMRF9MQ0RFTl9FTgkJKDEgPDwgMCkKKworI2RlZmluZSBQTERfSUQJCVNZU1BMRF9SRUcodTMyLCAweDQwMDAwYykKKworI2RlZmluZSBQTERfVENICQlTWVNQTERfUkVHKHUzMiwgMHg0MDAwMTApCisjZGVmaW5lIFBMRF9UQ0hfUEVOSVJRCQkoMSA8PCAxKQorI2RlZmluZSBQTERfVENIX0VOCQkoMSA8PCAwKQorCisjZGVmaW5lIFBMRF9HUElPCVNZU1BMRF9SRUcodTMyLCAweDQwMDAxNCkKKyNkZWZpbmUgUExEX0dQSU8yCQkoMSA8PCAyKQorI2RlZmluZSBQTERfR1BJTzEJCSgxIDw8IDEpCisjZGVmaW5lIFBMRF9HUElPMAkJKDEgPDwgMCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbHBzNzExeC9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNscHM3MTF4L3N5c3RlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhYjk4MWYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbHBzNzExeC9zeXN0ZW0uaApAQCAtMCwwICsxLDM4IEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWNscHM3MTF4L3N5c3RlbS5oCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMCBEZWVwIEJsdWUgU29sdXRpb25zIEx0ZAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworI2lmbmRlZiBfX0FTTV9BUkNIX1NZU1RFTV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfU1lTVEVNX0gKKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9jbHBzNzExMS5oPgorCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9pZGxlKHZvaWQpCit7CisJY2xwc193cml0ZWwoMSwgSEFMVCk7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJIm1vdglyMCwgcjBcblwKKwltb3YJcjAsIHIwIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSkKK3sKKwljcHVfcmVzZXQoMCk7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2xwczcxMXgvdGltZS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2xwczcxMXgvdGltZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljYjI3Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbHBzNzExeC90aW1lLmgKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbHBzNzExeC90aW1lLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwIERlZXAgQmx1ZSBTb2x1dGlvbnMgTHRkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworI2luY2x1ZGUgPGFzbS9sZWRzLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2NscHM3MTExLmg+CisKK2V4dGVybiB2b2lkIGNscHM3MTF4X3NldHVwX3RpbWVyKHZvaWQpOworCisvKgorICogSVJRIGhhbmRsZXIgZm9yIHRoZSB0aW1lcgorICovCitzdGF0aWMgaXJxcmV0dXJuX3QKK3A3MjB0X3RpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWRvX2xlZHMoKTsKKwlkb190aW1lcihyZWdzKTsKKyNpZm5kZWYgQ09ORklHX1NNUAorCXVwZGF0ZV9wcm9jZXNzX3RpbWVzKHVzZXJfbW9kZShyZWdzKSk7CisjZW5kaWYKKwlkb19wcm9maWxlKHJlZ3MpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyoKKyAqIFNldCB1cCB0aW1lciBpbnRlcnJ1cHQsIGFuZCByZXR1cm4gdGhlIGN1cnJlbnQgdGltZSBpbiBzZWNvbmRzLgorICovCit2b2lkIF9faW5pdCB0aW1lX2luaXQodm9pZCkKK3sKKwljbHBzNzExeF9zZXR1cF90aW1lcigpOworCXRpbWVyX2lycS5oYW5kbGVyID0gcDcyMHRfdGltZXJfaW50ZXJydXB0OworCXNldHVwX2lycShJUlFfVEMyT0ksICZ0aW1lcl9pcnEpOworfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2xwczcxMXgvdGltZXguaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNscHM3MTF4L3RpbWV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNiYjM4MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNscHM3MTF4L3RpbWV4LmgKQEAgLTAsMCArMSwyMyBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbHBzNzExeC90aW1leC5oCisgKgorICogIFByb3NwZWN0b3IgNzIwVCBhcmNoaXRlY3R1cmUgdGltZXggc3BlY2lmaWNhdGlvbnMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwIERlZXAgQmx1ZSBTb2x1dGlvbnMgTHRkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjZGVmaW5lIENMT0NLX1RJQ0tfUkFURSA1MTIwMDAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNscHM3MTF4L3VuY29tcHJlc3MuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNscHM3MTF4L3VuY29tcHJlc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDBhYjc5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2xwczcxMXgvdW5jb21wcmVzcy5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2xwczcxMXgvdW5jb21wcmVzcy5oCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMCBEZWVwIEJsdWUgU29sdXRpb25zIEx0ZAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2lvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvY2xwczcxMTEuaD4KKworI3VuZGVmIENMUFM3MTExX0JBU0UKKyNkZWZpbmUgQ0xQUzcxMTFfQkFTRSBDTFBTNzExMV9QSFlTX0JBU0UKKworI2RlZmluZSBiYXJyaWVyKCkJCV9fYXNtX18gX192b2xhdGlsZV9fKCIiOiA6IDoibWVtb3J5IikKKyNkZWZpbmUgX19yYXdfcmVhZGwocCkJCSgqKHVuc2lnbmVkIGxvbmcgKikocCkpCisjZGVmaW5lIF9fcmF3X3dyaXRlbCh2LHApCSgqKHVuc2lnbmVkIGxvbmcgKikocCkgPSAodikpCisKKyNpZmRlZiBDT05GSUdfREVCVUdfQ0xQUzcxMVhfVUFSVDIKKyNkZWZpbmUgU1lTRkxHeAlTWVNGTEcyCisjZGVmaW5lIFVBUlREUngJVUFSVERSMgorI2Vsc2UKKyNkZWZpbmUgU1lTRkxHeAlTWVNGTEcxCisjZGVmaW5lIFVBUlREUngJVUFSVERSMQorI2VuZGlmCisKKy8qCisgKiBUaGlzIGRvZXMgbm90IGFwcGVuZCBhIG5ld2xpbmUKKyAqLworc3RhdGljIHZvaWQgcHV0c3RyKGNvbnN0IGNoYXIgKnMpCit7CisJY2hhciBjOworCisJd2hpbGUgKChjID0gKnMrKykgIT0gJ1wwJykgeworCQl3aGlsZSAoY2xwc19yZWFkbChTWVNGTEd4KSAmIFNZU0ZMR19VVFhGRikKKwkJCWJhcnJpZXIoKTsKKwkJY2xwc193cml0ZWwoYywgVUFSVERSeCk7CisKKwkJaWYgKGMgPT0gJ1xuJykgeworCQkJd2hpbGUgKGNscHNfcmVhZGwoU1lTRkxHeCkgJiBTWVNGTEdfVVRYRkYpCisJCQkJYmFycmllcigpOworCQkJY2xwc193cml0ZWwoJ1xyJywgVUFSVERSeCk7CisJCX0KKwl9CisJd2hpbGUgKGNscHNfcmVhZGwoU1lTRkxHeCkgJiBTWVNGTEdfVUJVU1kpCisJCWJhcnJpZXIoKTsKK30KKworLyoKKyAqIG5vdGhpbmcgdG8gZG8KKyAqLworI2RlZmluZSBhcmNoX2RlY29tcF9zZXR1cCgpCisKKyNkZWZpbmUgYXJjaF9kZWNvbXBfd2RvZygpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbHBzNzExeC92bWFsbG9jLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbHBzNzExeC92bWFsbG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI1NzFlZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNscHM3MTF4L3ZtYWxsb2MuaApAQCAtMCwwICsxLDMxIEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWNscHM3MTF4L3ZtYWxsb2MuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDAgRGVlcCBCbHVlIFNvbHV0aW9ucyBMdGQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKy8qCisgKiBKdXN0IGFueSBhcmJpdHJhcnkgb2Zmc2V0IHRvIHRoZSBzdGFydCBvZiB0aGUgdm1hbGxvYyBWTSBhcmVhOiB0aGUKKyAqIGN1cnJlbnQgOE1CIHZhbHVlIGp1c3QgbWVhbnMgdGhhdCB0aGVyZSB3aWxsIGJlIGEgOE1CICJob2xlIiBhZnRlciB0aGUKKyAqIHBoeXNpY2FsIG1lbW9yeSB1bnRpbCB0aGUga2VybmVsIHZpcnR1YWwgbWVtb3J5IHN0YXJ0cy4gIFRoYXQgbWVhbnMgdGhhdAorICogYW55IG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIHdpbGwgaG9wZWZ1bGx5IGJlIGNhdWdodC4KKyAqIFRoZSB2bWFsbG9jKCkgcm91dGluZXMgbGVhdmVzIGEgaG9sZSBvZiA0a0IgYmV0d2VlbiBlYWNoIHZtYWxsb2NlZAorICogYXJlYSBmb3IgdGhlIHNhbWUgcmVhc29uLiA7KQorICovCisjZGVmaW5lIFZNQUxMT0NfT0ZGU0VUCSAgKDgqMTAyNCoxMDI0KQorI2RlZmluZSBWTUFMTE9DX1NUQVJUCSAgKCgodW5zaWduZWQgbG9uZyloaWdoX21lbW9yeSArIFZNQUxMT0NfT0ZGU0VUKSAmIH4oVk1BTExPQ19PRkZTRVQtMSkpCisjZGVmaW5lIFZNQUxMT0NfRU5EICAgICAgIChQQUdFX09GRlNFVCArIDB4MTAwMDAwMDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMTEwL2RlYnVnLW1hY3JvLlMgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMTEwL2RlYnVnLW1hY3JvLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNkMDNhNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2ExMTAvZGVidWctbWFjcm8uUwpAQCAtMCwwICsxLDM0IEBACisvKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMTEwL2RlYnVnLW1hY3JvLlMKKyAqCisgKiBEZWJ1Z2dpbmcgbWFjcm8gaW5jbHVkZSBoZWFkZXIKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk0LTE5OTkgUnVzc2VsbCBLaW5nCisgKiAgTW92ZWQgZnJvbSBsaW51eC9hcmNoL2FybS9rZXJuZWwvZGVidWcuUyBieSBCZW4gRG9va3MKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyoqLworCisJCS5tYWNybwlhZGRydWFydCxyeAorCQltb3YJXHJ4LCAjMHhmMDAwMDAwMAorCQlvcnIJXHJ4LCBccngsICMweDAwMDAwYmUwCisJCS5lbmRtCisKKwkJLm1hY3JvCXNlbmR1YXJ0LHJkLHJ4CisJCXN0cmIJXHJkLCBbXHJ4XQorCQkuZW5kbQorCisJCS5tYWNybwlidXN5dWFydCxyZCxyeAorMTAwMjoJCWxkcmIJXHJkLCBbXHJ4LCAjMHgxNF0KKwkJYW5kCVxyZCwgXHJkLCAjMHg2MAorCQl0ZXEJXHJkLCAjMHg2MAorCQlibmUJMTAwMmIKKwkJLmVuZG0KKworCQkubWFjcm8Jd2FpdHVhcnQscmQscngKKzEwMDE6CQlsZHJiCVxyZCwgW1xyeCwgIzB4MThdCisJCXRzdAlccmQsICMweDEwCisJCWJlcQkxMDAxYgorCQkuZW5kbQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTExMC9kbWEuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2ExMTAvZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ5MTc3NgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2ExMTAvZG1hLmgKQEAgLTAsMCArMSwxOSBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMTEwL2RtYS5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NywxOTk4IFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIEVCU0ExMTAgRE1BIGRlZmluaXRpb25zCisgKi8KKyNpZm5kZWYgX19BU01fQVJDSF9ETUFfSAorI2RlZmluZSBfX0FTTV9BUkNIX0RNQV9ICisKKyNkZWZpbmUgTUFYX0RNQV9BRERSRVNTCQkweGZmZmZmZmZmCisjZGVmaW5lIE1BWF9ETUFfQ0hBTk5FTFMJMAorCisjZW5kaWYgLyogX0FTTV9BUkNIX0RNQV9IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2ExMTAvZW50cnktbWFjcm8uUyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2ExMTAvZW50cnktbWFjcm8uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTJjYTA0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTExMC9lbnRyeS1tYWNyby5TCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMTEwL2VudHJ5LW1hY3JvLlMKKyAqCisgKiBMb3ctbGV2ZWwgSVJRIGhlbHBlciBtYWNyb3MgZm9yIGVic2ExMTAgcGxhdGZvcm0uCisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworCisKKyNkZWZpbmUgSVJRX1NUQVQJCTB4ZmYwMDAwMDAJLyogcmVhZCAqLworCisJLm1hY3JvCWRpc2FibGVfZmlxCisJLmVuZG0KKworCS5tYWNybwlnZXRfaXJxbnJfYW5kX2Jhc2UsIGlycW5yLCBzdGF0LCBiYXNlLCB0bXAKKwltb3YJXGJhc2UsICNJUlFfU1RBVAorCWxkcmIJXHN0YXQsIFtcYmFzZV0JCQlAIGdldCBpbnRlcnJ1cHRzCisJbW92CVxpcnFuciwgIzAKKwl0c3QJXHN0YXQsICMxNQorCWFkZGVxCVxpcnFuciwgXGlycW5yLCAjNAorCW1vdmVxCVxzdGF0LCBcc3RhdCwgbHNyICM0CisJdHN0CVxzdGF0LCAjMworCWFkZGVxCVxpcnFuciwgXGlycW5yLCAjMgorCW1vdmVxCVxzdGF0LCBcc3RhdCwgbHNyICMyCisJdHN0CVxzdGF0LCAjMQorCWFkZGVxCVxpcnFuciwgXGlycW5yLCAjMQorCW1vdmVxCVxzdGF0LCBcc3RhdCwgbHNyICMxCisJdHN0CVxzdGF0LCAjMQkJCUAgYml0IDAgc2hvdWxkIGJlIHNldAorCS5lbmRtCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2ExMTAvaGFyZHdhcmUuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2ExMTAvaGFyZHdhcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTQxYzIzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTExMC9oYXJkd2FyZS5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTExMC9oYXJkd2FyZS5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwIFJ1c3NlbGwgS2luZy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgaGFyZHdhcmUgZGVmaW5pdGlvbnMgb2YgdGhlIEVCU0EtMTEwLgorICovCisjaWZuZGVmIF9fQVNNX0FSQ0hfSEFSRFdBUkVfSAorI2RlZmluZSBfX0FTTV9BUkNIX0hBUkRXQVJFX0gKKworLyoKKyAqIFRoZSBFQlNBMTEwIGhhcyBhIHdlaXJkICJJU0EgSU8iIHJlZ2lvbjoKKyAqCisgKiBSZWdpb24gMCAoYWRkciA9IDB4ZjAwMDAwMDAgKyBpbyA8PCAyKQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFBoeXNpY2FsIHJlZ2lvbglJTyByZWdpb24KKyAqIGYwMDAwZmUwIC0gZjAwMDBmZmMJM2Y4IC0gM2ZmICB0dHlTMAorICogZjAwMDBlNjAgLSBmMDAwMGU2NAkzOTggLSAzOTkKKyAqIGYwMDAwZGUwIC0gZjAwMDBkZmMJMzc4IC0gMzdmICBscDAKKyAqIGYwMDAwYmUwIC0gZjAwMDBiZmMJMmY4IC0gMmZmICB0dHlTMQorICoKKyAqIFJlZ2lvbiAxIChhZGRyID0gMHhmMDAwMDAwMCArIChpbyAmIH4xKSA8PCAxICsgKGlvICYgMSkpCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUGh5c2ljYWwgcmVnaW9uCUlPIHJlZ2lvbgorICogZjAwMDE0ZjEgICAgICAgICAgICAgYTc5ICAgICAgICBwbnAgd3JpdGUgZGF0YQorICogZjAwMDA3YzAgLSBmMDAwMDdjMQkzZTAgLSAzZTEgIHBjbWNpYQorICogZjAwMDA0ZjEJCTI3OSAgICAgICAgcG5wIGFkZHJlc3MKKyAqIGYwMDAwNDQwIC0gZjAwMDA0NmMgIDIyMCAtIDIzNiAgZXRoMAorICogZjAwMDA0MDUJCTIwMyAgICAgICAgcG5wIHJlYWQgZGF0YQorICovCisKKyNkZWZpbmUgSVNBTUVNX1BIWVMJCTB4ZTAwMDAwMDAKKyNkZWZpbmUgSVNBTUVNX1NJWkUJCTB4MTAwMDAwMDAKKworI2RlZmluZSBJU0FJT19QSFlTCQkweGYwMDAwMDAwCisjZGVmaW5lIElTQUlPX1NJWkUJCVBHRElSX1NJWkUKKworI2RlZmluZSBUUklDSzBfUEhZUwkJMHhmMjAwMDAwMAorI2RlZmluZSBUUklDSzFfUEhZUwkJMHhmMjQwMDAwMAorI2RlZmluZSBUUklDSzJfUEhZUwkJMHhmMjgwMDAwMAorI2RlZmluZSBUUklDSzNfUEhZUwkJMHhmMmMwMDAwMAorI2RlZmluZSBUUklDSzRfUEhZUwkJMHhmMzAwMDAwMAorI2RlZmluZSBUUklDSzVfUEhZUwkJMHhmMzQwMDAwMAorI2RlZmluZSBUUklDSzZfUEhZUwkJMHhmMzgwMDAwMAorI2RlZmluZSBUUklDSzdfUEhZUwkJMHhmM2MwMDAwMAorCisjZGVmaW5lIElTQU1FTV9CQVNFCQkweGUwMDAwMDAwCisjZGVmaW5lIElTQUlPX0JBU0UJCTB4ZjAwMDAwMDAKKworI2RlZmluZSBQSVRfQkFTRQkJMHhmYzAwMDAwMAorI2RlZmluZSBTT0ZUX0JBU0UJCTB4ZmQwMDAwMDAKKworLyoKKyAqIFJBTSBkZWZpbml0aW9ucworICovCisjZGVmaW5lIEZMVVNIX0JBU0VfUEhZUwkJMHg0MDAwMDAwMAorI2RlZmluZSBGTFVTSF9CQVNFCQkweGRmMDAwMDAwCisKKyNkZWZpbmUgVU5DQUNIRUFCTEVfQUREUgkweGZmMDAwMDAwCS8qIElSUV9TVEFUICovCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMTEwL2lvLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMTEwL2lvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhlMDRjMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2ExMTAvaW8uaApAQCAtMCwwICsxLDc4IEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2ExMTAvaW8uaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTcsMTk5OCBSdXNzZWxsIEtpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIE1vZGlmaWNhdGlvbnM6CisgKiAgMDYtRGVjLTE5OTcJUk1LCUNyZWF0ZWQuCisgKi8KKyNpZm5kZWYgX19BU01fQVJNX0FSQ0hfSU9fSAorI2RlZmluZSBfX0FTTV9BUk1fQVJDSF9JT19ICisKKyNkZWZpbmUgSU9fU1BBQ0VfTElNSVQgMHhmZmZmCisKK3U4IF9faW5iOCh1bnNpZ25lZCBpbnQgcG9ydCk7Cit2b2lkIF9fb3V0YjgodTggIHZhbCwgdW5zaWduZWQgaW50IHBvcnQpOworCit1OCBfX2luYjE2KHVuc2lnbmVkIGludCBwb3J0KTsKK3ZvaWQgX19vdXRiMTYodTggIHZhbCwgdW5zaWduZWQgaW50IHBvcnQpOworCit1MTYgX19pbncodW5zaWduZWQgaW50IHBvcnQpOwordm9pZCBfX291dHcodTE2IHZhbCwgdW5zaWduZWQgaW50IHBvcnQpOworCit1MzIgX19pbmwodW5zaWduZWQgaW50IHBvcnQpOwordm9pZCBfX291dGwodTMyIHZhbCwgdW5zaWduZWQgaW50IHBvcnQpOworCit1OCAgX19yZWFkYih2b2lkIF9faW9tZW0gKmFkZHIpOwordTE2IF9fcmVhZHcodm9pZCBfX2lvbWVtICphZGRyKTsKK3UzMiBfX3JlYWRsKHZvaWQgX19pb21lbSAqYWRkcik7CisKK3ZvaWQgX193cml0ZWIodTggIHZhbCwgdm9pZCBfX2lvbWVtICphZGRyKTsKK3ZvaWQgX193cml0ZXcodTE2IHZhbCwgdm9pZCBfX2lvbWVtICphZGRyKTsKK3ZvaWQgX193cml0ZWwodTMyIHZhbCwgdm9pZCBfX2lvbWVtICphZGRyKTsKKworLyoKKyAqIEFyZ2gsIHNvbWVvbmUgZm9yZ290IHRoZSBJT0NTMTYgbGluZS4gIFdlIHRoZXJlZm9yZSBoYXZlIHRvIGhhbmRsZQorICogdGhlIGJ5dGUgc3RlYXJpbmcgYnkgc2VsZWN0aW5nIHRoZSBjb3JyZWN0IGJ5dGUgSU8gZnVuY3Rpb25zIGhlcmUuCisgKi8KKyNpZmRlZiBJU0FfU0lYVEVFTl9CSVRfUEVSSVBIRVJBTAorI2RlZmluZSBpbmIocCkgCQkJX19pbmIxNihwKQorI2RlZmluZSBvdXRiKHYscCkJCV9fb3V0YjE2KHYscCkKKyNlbHNlCisjZGVmaW5lIGluYihwKQkJCV9faW5iOChwKQorI2RlZmluZSBvdXRiKHYscCkJCV9fb3V0YjgodixwKQorI2VuZGlmCisKKyNkZWZpbmUgaW53KHApCQkJX19pbncocCkKKyNkZWZpbmUgb3V0dyh2LHApCQlfX291dHcodixwKQorCisjZGVmaW5lIGlubChwKQkJCV9faW5sKHApCisjZGVmaW5lIG91dGwodixwKQkJX19vdXRsKHYscCkKKworI2RlZmluZSByZWFkYihiKQkJX19yZWFkYihiKQorI2RlZmluZSByZWFkdyhiKQkJX19yZWFkdyhiKQorI2RlZmluZSByZWFkbChiKQkJX19yZWFkbChiKQorI2RlZmluZSByZWFkYl9yZWxheGVkKGFkZHIpCXJlYWRiKGFkZHIpCisjZGVmaW5lIHJlYWR3X3JlbGF4ZWQoYWRkcikJcmVhZHcoYWRkcikKKyNkZWZpbmUgcmVhZGxfcmVsYXhlZChhZGRyKQlyZWFkbChhZGRyKQorCisjZGVmaW5lIHdyaXRlYih2LGIpCQlfX3dyaXRlYih2LGIpCisjZGVmaW5lIHdyaXRldyh2LGIpCQlfX3dyaXRldyh2LGIpCisjZGVmaW5lIHdyaXRlbCh2LGIpCQlfX3dyaXRlbCh2LGIpCisKKyNkZWZpbmUgX19hcmNoX2lvcmVtYXAoY29va2llLHN6LGMsYSkJKCh2b2lkIF9faW9tZW0gKikoY29va2llKSkKKyNkZWZpbmUgX19hcmNoX2lvdW5tYXAoY29va2llKQkJZG8geyB9IHdoaWxlICgwKQorCitleHRlcm4gdm9pZCBpbnNiKHVuc2lnbmVkIGludCBwb3J0LCB2b2lkICpidWYsIGludCBzeik7CitleHRlcm4gdm9pZCBpbnN3KHVuc2lnbmVkIGludCBwb3J0LCB2b2lkICpidWYsIGludCBzeik7CitleHRlcm4gdm9pZCBpbnNsKHVuc2lnbmVkIGludCBwb3J0LCB2b2lkICpidWYsIGludCBzeik7CisKK2V4dGVybiB2b2lkIG91dHNiKHVuc2lnbmVkIGludCBwb3J0LCBjb25zdCB2b2lkICpidWYsIGludCBzeik7CitleHRlcm4gdm9pZCBvdXRzdyh1bnNpZ25lZCBpbnQgcG9ydCwgY29uc3Qgdm9pZCAqYnVmLCBpbnQgc3opOworZXh0ZXJuIHZvaWQgb3V0c2wodW5zaWduZWQgaW50IHBvcnQsIGNvbnN0IHZvaWQgKmJ1ZiwgaW50IHN6KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMTEwL2lycXMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2ExMTAvaXJxcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlZDliZDkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMTEwL2lycXMuaApAQCAtMCwwICsxLDIwIEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2ExMTAvaXJxcy5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NiBSdXNzZWxsIEtpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNkZWZpbmUgTlJfSVJRUwkJCTgKKworI2RlZmluZSBJUlFfRUJTQTExMF9QUklOVEVSCTAKKyNkZWZpbmUgSVJRX0VCU0ExMTBfQ09NMQkxCisjZGVmaW5lIElSUV9FQlNBMTEwX0NPTTIJMgorI2RlZmluZSBJUlFfRUJTQTExMF9FVEhFUk5FVAkzCisjZGVmaW5lIElSUV9FQlNBMTEwX1RJTUVSMAk0CisjZGVmaW5lIElSUV9FQlNBMTEwX1RJTUVSMQk1CisjZGVmaW5lIElSUV9FQlNBMTEwX1BDTUNJQQk2CisjZGVmaW5lIElSUV9FQlNBMTEwX0lNTUVESUFURQk3CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMTEwL21lbW9yeS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTExMC9tZW1vcnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTk0OTNlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTExMC9tZW1vcnkuaApAQCAtMCwwICsxLDMxIEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2ExMTAvbWVtb3J5LmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk2LTE5OTkgUnVzc2VsbCBLaW5nLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIENoYW5nZWxvZzoKKyAqICAgMjAtT2N0LTE5OTYgUk1LCUNyZWF0ZWQKKyAqICAgMzEtRGVjLTE5OTcgUk1LCUZpeGVkIGRlZmluaXRpb25zIHRvIHJlZHVjZSB3YXJuaW5ncworICogICAyMS1NYXItMTk5OSBSTUsJUmVuYW1lZCB0byBtZW1vcnkuaAorICoJCSBSTUsJTW92ZWQgVEFTS19TSVpFIGFuZCBQQUdFX09GRlNFVCBoZXJlCisgKi8KKyNpZm5kZWYgX19BU01fQVJDSF9NRU1PUllfSAorI2RlZmluZSBfX0FTTV9BUkNIX01FTU9SWV9ICisKKy8qCisgKiBQaHlzaWNhbCBEUkFNIG9mZnNldC4KKyAqLworI2RlZmluZSBQSFlTX09GRlNFVAkoMHgwMDAwMDAwMFVMKQorCisvKgorICogV2Uga2VlcCB0aGlzIDE6MSBzbyB0aGF0IHdlIGRvbid0IGludGVyZmVyZQorICogd2l0aCB0aGUgUENNQ0lBIG1lbW9yeSByZWdpb25zCisgKi8KKyNkZWZpbmUgX192aXJ0X3RvX2J1cyh4KQkoeCkKKyNkZWZpbmUgX19idXNfdG9fdmlydCh4KQkoeCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMTEwL3BhcmFtLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMTEwL3BhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmUxOWIwOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2ExMTAvcGFyYW0uaApAQCAtMCwwICsxLDQgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTExMC9wYXJhbS5oCisgKi8KKyNkZWZpbmUgSFoJMjAwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMTEwL3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTExMC9zeXN0ZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2M4ZmVjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTExMC9zeXN0ZW0uaApAQCAtMCwwICsxLDM5IEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2ExMTAvc3lzdGVtLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAgUnVzc2VsbCBLaW5nLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpZm5kZWYgX19BU01fQVJDSF9TWVNURU1fSAorI2RlZmluZSBfX0FTTV9BUkNIX1NZU1RFTV9ICisKKy8qCisgKiBFQlNBMTEwIGlkbGluZyBtZXRob2RvbG9neToKKyAqCisgKiBXZSBjYW4gbm90IGV4ZWN1dGUgdGhlICJ3YWl0IGZvciBpbnRlcnJ1cHQiIGluc3RydWN0aW9uIHNpbmNlIHRoYXQKKyAqIHdpbGwgc3RvcCBvdXIgTUNMSyBzaWduYWwgKHdoaWNoIHByb3ZpZGVzIHRoZSBjbG9jayBmb3IgdGhlIGdsdWUKKyAqIGxvZ2ljLCBhbmQgdGhlcmVmb3JlIHRoZSB0aW1lciBpbnRlcnJ1cHQpLgorICoKKyAqIEluc3RlYWQsIHdlIHNwaW4sIHBvbGxpbmcgdGhlIElSUV9TVEFUIHJlZ2lzdGVyIGZvciB0aGUgb2NjdXJyZW5jZQorICogb2YgYW55IGludGVycnVwdCB3aXRoIGNvcmUgY2xvY2sgZG93biB0byB0aGUgbWVtb3J5IGNsb2NrLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9pZGxlKHZvaWQpCit7CisJY29uc3QgY2hhciAqaXJxX3N0YXQgPSAoY2hhciAqKTB4ZmYwMDAwMDA7CisKKwkvKiBkaXNhYmxlIGNsb2NrIHN3aXRjaGluZyAqLworCWFzbSB2b2xhdGlsZSAoIm1jciBwMTUsIDAsIGlwLCBjMTUsIGMyLCAyIiA6IDogOiAiY2MiKTsKKworCS8qIHdhaXQgZm9yIGFuIGludGVycnVwdCB0byBvY2N1ciAqLworCXdoaWxlICghKmlycV9zdGF0KTsKKworCS8qIGVuYWJsZSBjbG9jayBzd2l0Y2hpbmcgKi8KKwlhc20gdm9sYXRpbGUgKCJtY3IgcDE1LCAwLCBpcCwgYzE1LCBjMSwgMiIgOiA6IDogImNjIik7Cit9CisKKyNkZWZpbmUgYXJjaF9yZXNldChtb2RlKQljcHVfcmVzZXQoMHg4MDAwMDAwMCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMTEwL3RpbWV4LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMTEwL3RpbWV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU5ZWYwNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2ExMTAvdGltZXguaApAQCAtMCwwICsxLDE5IEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2ExMTAvdGltZXguaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTggUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgRUJTQTExMCBhcmNoaXRlY3R1cmUgdGltZXggc3BlY2lmaWNhdGlvbnMKKyAqLworCisvKgorICogT24gdGhlIEVCU0EsIHRoZSBjbG9jayB0aWNrcyBhdCB3ZWlyZCByYXRlcy4KKyAqIFRoaXMgaXMgdGhlcmVmb3JlIG5vdCB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUKKyAqIGRpdmlzb3IuCisgKi8KKyNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFCQk0Nzg5NDAwMAorCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMTEwL3VuY29tcHJlc3MuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2ExMTAvdW5jb21wcmVzcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlZTk1NTgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMTEwL3VuY29tcHJlc3MuaApAQCAtMCwwICsxLDQ0IEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2ExMTAvdW5jb21wcmVzcy5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NiwxOTk3LDE5OTggUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisvKgorICogVGhpcyBkb2VzIG5vdCBhcHBlbmQgYSBuZXdsaW5lCisgKi8KK3N0YXRpYyB2b2lkIHB1dHN0cihjb25zdCBjaGFyICpzKQoreworCXVuc2lnbmVkIGxvbmcgdG1wMSwgdG1wMjsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkibGRyYgklMCwgWyUyXSwgIzFcbiIKKyIJdGVxCSUwLCAjMFxuIgorIgliZXEJM2ZcbiIKKyIxOglzdHJiCSUwLCBbJTNdXG4iCisiMjoJbGRyYgklMSwgWyUzLCAjMHgxNF1cbiIKKyIJYW5kCSUxLCAlMSwgIzB4NjBcbiIKKyIJdGVxCSUxLCAjMHg2MFxuIgorIglibmUJMmJcbiIKKyIJdGVxCSUwLCAjJ1xuJ1xuIgorIgltb3ZlcQklMCwgIydccidcbiIKKyIJYmVxCTFiXG4iCisiCWxkcmIJJTAsIFslMl0sICMxXG4iCisiCXRlcQklMCwgIzBcbiIKKyIJYm5lCTFiXG4iCisiMzoJbGRyYgklMSwgWyUzLCAjMHgxNF1cbiIKKyIJYW5kCSUxLCAlMSwgIzB4NjBcbiIKKyIJdGVxCSUxLCAjMHg2MFxuIgorIglibmUJM2IiCisJOiAiPSZyIiAodG1wMSksICI9JnIiICh0bXAyKQorCTogInIiIChzKSwgInIiICgweGYwMDAwYmUwKSA6ICJjYyIpOworfQorCisvKgorICogbm90aGluZyB0byBkbworICovCisjZGVmaW5lIGFyY2hfZGVjb21wX3NldHVwKCkKKyNkZWZpbmUgYXJjaF9kZWNvbXBfd2RvZygpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMTEwL3ZtYWxsb2MuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2ExMTAvdm1hbGxvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1OTY1OWIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMTEwL3ZtYWxsb2MuaApAQCAtMCwwICsxLDIxIEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2ExMTAvdm1hbGxvYy5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5OCBSdXNzZWxsIEtpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKy8qCisgKiBKdXN0IGFueSBhcmJpdHJhcnkgb2Zmc2V0IHRvIHRoZSBzdGFydCBvZiB0aGUgdm1hbGxvYyBWTSBhcmVhOiB0aGUKKyAqIGN1cnJlbnQgOE1CIHZhbHVlIGp1c3QgbWVhbnMgdGhhdCB0aGVyZSB3aWxsIGJlIGEgOE1CICJob2xlIiBhZnRlciB0aGUKKyAqIHBoeXNpY2FsIG1lbW9yeSB1bnRpbCB0aGUga2VybmVsIHZpcnR1YWwgbWVtb3J5IHN0YXJ0cy4gIFRoYXQgbWVhbnMgdGhhdAorICogYW55IG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIHdpbGwgaG9wZWZ1bGx5IGJlIGNhdWdodC4KKyAqIFRoZSB2bWFsbG9jKCkgcm91dGluZXMgbGVhdmVzIGEgaG9sZSBvZiA0a0IgYmV0d2VlbiBlYWNoIHZtYWxsb2NlZAorICogYXJlYSBmb3IgdGhlIHNhbWUgcmVhc29uLiA7KQorICovCisjZGVmaW5lIFZNQUxMT0NfT0ZGU0VUCSAgKDgqMTAyNCoxMDI0KQorI2RlZmluZSBWTUFMTE9DX1NUQVJUCSAgKCgodW5zaWduZWQgbG9uZyloaWdoX21lbW9yeSArIFZNQUxMT0NfT0ZGU0VUKSAmIH4oVk1BTExPQ19PRkZTRVQtMSkpCisjZGVmaW5lIFZNQUxMT0NfRU5EICAgICAgIChQQUdFX09GRlNFVCArIDB4MWYwMDAwMDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMjg1L2RlYnVnLW1hY3JvLlMgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMjg1L2RlYnVnLW1hY3JvLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM3ODUzZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2EyODUvZGVidWctbWFjcm8uUwpAQCAtMCwwICsxLDY2IEBACisvKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMjg1L2RlYnVnLW1hY3JvLlMKKyAqCisgKiBEZWJ1Z2dpbmcgbWFjcm8gaW5jbHVkZSBoZWFkZXIKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk0LTE5OTkgUnVzc2VsbCBLaW5nCisgKiAgTW92ZWQgZnJvbSBsaW51eC9hcmNoL2FybS9rZXJuZWwvZGVidWcuUyBieSBCZW4gRG9va3MKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyovCisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvZGVjMjEyODUuaD4KKworI2lmbmRlZiBDT05GSUdfREVCVUdfREMyMTI4NV9QT1JUCisJLyogRm9yIE5ldFdpbmRlciBkZWJ1Z2dpbmcgKi8KKwkJLm1hY3JvCWFkZHJ1YXJ0LHJ4CisJCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCisJCXRzdAlccngsICMxCQkJQCBNTVUgZW5hYmxlZD8KKwkJbW92ZXEJXHJ4LCAjMHg3YzAwMDAwMAlAIHBoeXNpY2FsCisJCW1vdm5lCVxyeCwgIzB4ZmYwMDAwMDAJQCB2aXJ0dWFsCisJCW9ycglccngsIFxyeCwgIzB4MDAwMDAzZjgKKwkJLmVuZG0KKworCQkubWFjcm8Jc2VuZHVhcnQscmQscngKKwkJc3RyYglccmQsIFtccnhdCisJCS5lbmRtCisKKwkJLm1hY3JvCWJ1c3l1YXJ0LHJkLHJ4CisxMDAyOgkJbGRyYglccmQsIFtccngsICMweDVdCisJCWFuZAlccmQsIFxyZCwgIzB4NjAKKwkJdGVxCVxyZCwgIzB4NjAKKwkJYm5lCTEwMDJiCisJCS5lbmRtCisKKwkJLm1hY3JvCXdhaXR1YXJ0LHJkLHJ4CisxMDAxOgkJbGRyYglccmQsIFtccngsICMweDZdCisJCXRzdAlccmQsICMweDEwCisJCWJlcQkxMDAxYgorCQkuZW5kbQorI2Vsc2UKKwkvKiBGb3IgRUJTQTI4NSBkZWJ1Z2dpbmcgKi8KKwkJLmVxdQlkYzIxMjg1X2hpZ2gsIEFSTUNTUl9CQVNFICYgMHhmZjAwMDAwMAorCQkuZXF1CWRjMjEyODVfbG93LCAgQVJNQ1NSX0JBU0UgJiAweDAwZmZmZmZmCisKKwkJLm1hY3JvCWFkZHJ1YXJ0LHJ4CisJCW1vdglccngsICNkYzIxMjg1X2hpZ2gKKwkJLmlmCWRjMjEyODVfbG93CisJCW9ycglccngsIFxyeCwgI2RjMjEyODVfbG93CisJCS5lbmRpZgorCQkuZW5kbQorCisJCS5tYWNybwlzZW5kdWFydCxyZCxyeAorCQlzdHIJXHJkLCBbXHJ4LCAjMHgxNjBdCUAgVUFSVERSCisJCS5lbmRtCisKKwkJLm1hY3JvCWJ1c3l1YXJ0LHJkLHJ4CisxMDAxOgkJbGRyCVxyZCwgW1xyeCwgIzB4MTc4XQlAIFVBUlRGTEcKKwkJdHN0CVxyZCwgIzEgPDwgMworCQlibmUJMTAwMWIKKwkJLmVuZG0KKworCQkubWFjcm8Jd2FpdHVhcnQscmQscngKKwkJLmVuZG0KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTI4NS9kbWEuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2EyODUvZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQzMDQ2ZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2EyODUvZG1hLmgKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMjg1L2RtYS5oCisgKgorICogIEFyY2hpdGVjdHVyZSBETUEgcm91dGluZXMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk4LDE5OTkgUnVzc2VsbCBLaW5nCisgKiAgQ29weXJpZ2h0IChDKSAxOTk4LDE5OTkgUGhpbGlwIEJsdW5kZWxsCisgKi8KKyNpZm5kZWYgX19BU01fQVJDSF9ETUFfSAorI2RlZmluZSBfX0FTTV9BUkNIX0RNQV9ICisKKy8qCisgKiBUaGlzIGlzIHRoZSBtYXhpbXVtIERNQSBhZGRyZXNzIHRoYXQgY2FuIGJlIERNQWQgdG8uCisgKi8KKyNkZWZpbmUgTUFYX0RNQV9BRERSRVNTCQkweGZmZmZmZmZmCisKKy8qCisgKiBUaGUgMjEyODUgaGFzIHR3byBpbnRlcm5hbCBETUEgY2hhbm5lbHM7IHdlIGNhbGwgdGhlc2UgOCBhbmQgOS4KKyAqIE9uIENBVFMgaGFyZHdhcmUgd2UgaGF2ZSBhbiBhZGRpdGlvbmFsIGVpZ2h0IElTQSBkbWEgY2hhbm5lbHMKKyAqIG51bWJlcmVkIDAuLjcuCisgKi8KKyNkZWZpbmUgX0lTQV9ETUEoeCkJCSgwKyh4KSkKKyNkZWZpbmUgX0RDMjEyODVfRE1BKHgpCQkoOCsoeCkpCisKKyNkZWZpbmUgTUFYX0RNQV9DSEFOTkVMUwkxMAorCisjZGVmaW5lIERNQV9GTE9QUFkJCV9JU0FfRE1BKDIpCisjZGVmaW5lIERNQV9JU0FfQ0FTQ0FERQkJX0lTQV9ETUEoNCkKKworI2VuZGlmIC8qIF9BU01fQVJDSF9ETUFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTI4NS9lbnRyeS1tYWNyby5TIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTI4NS9lbnRyeS1tYWNyby5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiNTcyOWYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMjg1L2VudHJ5LW1hY3JvLlMKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1mb290YnJpZGdlL2VudHJ5LW1hY3JvLlMKKyAqCisgKiBMb3ctbGV2ZWwgSVJRIGhlbHBlciBtYWNyb3MgZm9yIGZvb3RicmlkZ2UtYmFzZWQgcGxhdGZvcm1zCisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvZGVjMjEyODUuaD4KKworCQkubWFjcm8JZGlzYWJsZV9maXEKKwkJLmVuZG0KKworCQkuZXF1CWRjMjEyODVfaGlnaCwgQVJNQ1NSX0JBU0UgJiAweGZmMDAwMDAwCisJCS5lcXUJZGMyMTI4NV9sb3csIEFSTUNTUl9CQVNFICYgMHgwMGZmZmZmZgorCisJCS5tYWNybwlnZXRfaXJxbnJfYW5kX2Jhc2UsIGlycW5yLCBpcnFzdGF0LCBiYXNlLCB0bXAKKwkJbW92CXI0LCAjZGMyMTI4NV9oaWdoCisJCS5pZglkYzIxMjg1X2xvdworCQlvcnIJcjQsIHI0LCAjZGMyMTI4NV9sb3cKKwkJLmVuZGlmCisJCWxkcglcaXJxc3RhdCwgW3I0LCAjMHgxODBdCQlAIGdldCBpbnRlcnJ1cHRzCisKKwkJbW92CVxpcnFuciwgI0lSUV9TRFJBTVBBUklUWQorCQl0c3QJXGlycXN0YXQsICNJUlFfTUFTS19TRFJBTVBBUklUWQorCQlibmUJMTAwMWYKKworCQl0c3QJXGlycXN0YXQsICNJUlFfTUFTS19VQVJUX1JYCisJCW1vdm5lCVxpcnFuciwgI0lSUV9DT05SWAorCQlibmUJMTAwMWYKKworCQl0c3QJXGlycXN0YXQsICNJUlFfTUFTS19ETUExCisJCW1vdm5lCVxpcnFuciwgI0lSUV9ETUExCisJCWJuZQkxMDAxZgorCisJCXRzdAlcaXJxc3RhdCwgI0lSUV9NQVNLX0RNQTIKKwkJbW92bmUJXGlycW5yLCAjSVJRX0RNQTIKKwkJYm5lCTEwMDFmCisKKwkJdHN0CVxpcnFzdGF0LCAjSVJRX01BU0tfSU4wCisJCW1vdm5lCVxpcnFuciwgI0lSUV9JTjAKKwkJYm5lCTEwMDFmCisKKwkJdHN0CVxpcnFzdGF0LCAjSVJRX01BU0tfSU4xCisJCW1vdm5lCVxpcnFuciwgI0lSUV9JTjEKKwkJYm5lCTEwMDFmCisKKwkJdHN0CVxpcnFzdGF0LCAjSVJRX01BU0tfSU4yCisJCW1vdm5lCVxpcnFuciwgI0lSUV9JTjIKKwkJYm5lCTEwMDFmCisKKwkJdHN0CVxpcnFzdGF0LCAjSVJRX01BU0tfSU4zCisJCW1vdm5lCVxpcnFuciwgI0lSUV9JTjMKKwkJYm5lCTEwMDFmCisKKwkJdHN0CVxpcnFzdGF0LCAjSVJRX01BU0tfUENJCisJCW1vdm5lCVxpcnFuciwgI0lSUV9QQ0kKKwkJYm5lCTEwMDFmCisKKwkJdHN0CVxpcnFzdGF0LCAjSVJRX01BU0tfRE9PUkJFTExIT1NUCisJCW1vdm5lCVxpcnFuciwgI0lSUV9ET09SQkVMTEhPU1QKKwkJYm5lICAgICAxMDAxZgorCisJCXRzdAlcaXJxc3RhdCwgI0lSUV9NQVNLX0kyT0lOUE9TVAorCQltb3ZuZQlcaXJxbnIsICNJUlFfSTJPSU5QT1NUCisJCWJuZQkxMDAxZgorCisJCXRzdAlcaXJxc3RhdCwgI0lSUV9NQVNLX1RJTUVSMQorCQltb3ZuZQlcaXJxbnIsICNJUlFfVElNRVIxCisJCWJuZQkxMDAxZgorCisJCXRzdAlcaXJxc3RhdCwgI0lSUV9NQVNLX1RJTUVSMgorCQltb3ZuZQlcaXJxbnIsICNJUlFfVElNRVIyCisJCWJuZQkxMDAxZgorCisJCXRzdAlcaXJxc3RhdCwgI0lSUV9NQVNLX1RJTUVSMworCQltb3ZuZQlcaXJxbnIsICNJUlFfVElNRVIzCisJCWJuZQkxMDAxZgorCisJCXRzdAlcaXJxc3RhdCwgI0lSUV9NQVNLX1VBUlRfVFgKKwkJbW92bmUJXGlycW5yLCAjSVJRX0NPTlRYCisJCWJuZQkxMDAxZgorCisJCXRzdAlcaXJxc3RhdCwgI0lSUV9NQVNLX1BDSV9BQk9SVAorCQltb3ZuZQlcaXJxbnIsICNJUlFfUENJX0FCT1JUCisJCWJuZQkxMDAxZgorCisJCXRzdAlcaXJxc3RhdCwgI0lSUV9NQVNLX1BDSV9TRVJSCisJCW1vdm5lCVxpcnFuciwgI0lSUV9QQ0lfU0VSUgorCQlibmUJMTAwMWYKKworCQl0c3QJXGlycXN0YXQsICNJUlFfTUFTS19ESVNDQVJEX1RJTUVSCisJCW1vdm5lCVxpcnFuciwgI0lSUV9ESVNDQVJEX1RJTUVSCisJCWJuZQkxMDAxZgorCisJCXRzdAlcaXJxc3RhdCwgI0lSUV9NQVNLX1BDSV9EUEVSUgorCQltb3ZuZQlcaXJxbnIsICNJUlFfUENJX0RQRVJSCisJCWJuZQkxMDAxZgorCisJCXRzdAlcaXJxc3RhdCwgI0lSUV9NQVNLX1BDSV9QRVJSCisJCW1vdm5lCVxpcnFuciwgI0lSUV9QQ0lfUEVSUgorMTAwMToKKwkJLmVuZG0KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTI4NS9oYXJkd2FyZS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTI4NS9oYXJkd2FyZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlZjIyMDAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMjg1L2hhcmR3YXJlLmgKQEAgLTAsMCArMSwxMzkgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTI4NS9oYXJkd2FyZS5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5OC0xOTk5IFJ1c3NlbGwgS2luZy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGhhcmR3YXJlIGRlZmluaXRpb25zIG9mIHRoZSBFQlNBLTI4NS4KKyAqLworI2lmbmRlZiBfX0FTTV9BUkNIX0hBUkRXQVJFX0gKKyNkZWZpbmUgX19BU01fQVJDSF9IQVJEV0FSRV9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9tZW1vcnkuaD4KKworI2lmZGVmIENPTkZJR19BUkNIX0ZPT1RCUklER0UKKy8qICAgVmlydHVhbCAgICAgIFBoeXNpY2FsCVNpemUKKyAqIDB4ZmY4MDAwMDAJMHg0MDAwMDAwMAkxTUIJWC1CdXMKKyAqIDB4ZmYwMDAwMDAJMHg3YzAwMDAwMAkxTUIJUENJIEkvTyBzcGFjZQorICogMHhmZTAwMDAwMAkweDQyMDAwMDAwCTFNQglDU1IKKyAqIDB4ZmQwMDAwMDAJMHg3ODAwMDAwMAkxTUIJT3V0Ym91bmQgd3JpdGUgZmx1c2ggKG5vdCBzdXBwb3J0ZWQpCisgKiAweGZjMDAwMDAwCTB4NzkwMDAwMDAJMU1CCVBDSSBJQUNLL3NwZWNpYWwgc3BhY2UKKyAqIDB4ZmIwMDAwMDAJMHg3YTAwMDAwMAkxNk1CCVBDSSBDb25maWcgdHlwZSAxCisgKiAweGZhMDAwMDAwCTB4N2IwMDAwMDAJMTZNQglQQ0kgQ29uZmlnIHR5cGUgMAorICogMHhmOTAwMDAwMAkweDUwMDAwMDAwCTFNQglDYWNoZSBmbHVzaAorICogMHhmMDAwMDAwMAkweDgwMDAwMDAwCTE2TUIJSVNBIG1lbW9yeQorICovCisjZGVmaW5lIFhCVVNfU0laRQkJMHgwMDEwMDAwMAorI2RlZmluZSBYQlVTX0JBU0UJCTB4ZmY4MDAwMDAKKworI2RlZmluZSBQQ0lPX1NJWkUJCTB4MDAxMDAwMDAKKyNkZWZpbmUgUENJT19CQVNFCQkweGZmMDAwMDAwCisKKyNkZWZpbmUgQVJNQ1NSX1NJWkUJCTB4MDAxMDAwMDAKKyNkZWZpbmUgQVJNQ1NSX0JBU0UJCTB4ZmUwMDAwMDAKKworI2RlZmluZSBXRkxVU0hfU0laRQkJMHgwMDEwMDAwMAorI2RlZmluZSBXRkxVU0hfQkFTRQkJMHhmZDAwMDAwMAorCisjZGVmaW5lIFBDSUlBQ0tfU0laRQkJMHgwMDEwMDAwMAorI2RlZmluZSBQQ0lJQUNLX0JBU0UJCTB4ZmMwMDAwMDAKKworI2RlZmluZSBQQ0lDRkcxX1NJWkUJCTB4MDEwMDAwMDAKKyNkZWZpbmUgUENJQ0ZHMV9CQVNFCQkweGZiMDAwMDAwCisKKyNkZWZpbmUgUENJQ0ZHMF9TSVpFCQkweDAxMDAwMDAwCisjZGVmaW5lIFBDSUNGRzBfQkFTRQkJMHhmYTAwMDAwMAorCisjZGVmaW5lIEZMVVNIX1NJWkUJCTB4MDAxMDAwMDAKKyNkZWZpbmUgRkxVU0hfQkFTRQkJMHhmOTAwMDAwMAorCisjZGVmaW5lIFBDSU1FTV9TSVpFCQkweDAxMDAwMDAwCisjZGVmaW5lIFBDSU1FTV9CQVNFCQkweGYwMDAwMDAwCisKKyNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfQ08yODUpCisvKgorICogVGhpcyBpcyB0aGUgQ09FQlNBMjg1IGN1dC1kb3duIG1hcHBpbmcKKyAqLworI2RlZmluZSBQQ0lNRU1fU0laRQkJMHg4MDAwMDAwMAorI2RlZmluZSBQQ0lNRU1fQkFTRQkJMHg4MDAwMDAwMAorCisjZGVmaW5lIEZMVVNIX1NJWkUJCTB4MDAxMDAwMDAKKyNkZWZpbmUgRkxVU0hfQkFTRQkJMHg3ZTAwMDAwMAorCisjZGVmaW5lIFdGTFVTSF9TSVpFCQkweDAxMDAwMDAwCisjZGVmaW5lIFdGTFVTSF9CQVNFCQkweDdkMDAwMDAwCisKKyNkZWZpbmUgQVJNQ1NSX1NJWkUJCTB4MDAxMDAwMDAKKyNkZWZpbmUgQVJNQ1NSX0JBU0UJCTB4N2NmMDAwMDAKKworI2RlZmluZSBYQlVTX1NJWkUJCTB4MDAwMjAwMDAKKyNkZWZpbmUgWEJVU19CQVNFCQkweDdjZWUwMDAwCisKKyNkZWZpbmUgUENJT19TSVpFCQkweDAwMDEwMDAwCisjZGVmaW5lIFBDSU9fQkFTRQkJMHg3Y2VkMDAwMAorCisjZWxzZQorCisjZXJyb3IgIlVuZGVmaW5lZCBmb290YnJpZGdlIGFyY2hpdGVjdHVyZSIKKworI2VuZGlmCisKKyNkZWZpbmUgWEJVU19MRURTCQkoKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoWEJVU19CQVNFICsgMHgxMjAwMCkpCisjZGVmaW5lIFhCVVNfTEVEX0FNQkVSCQkoMSA8PCAwKQorI2RlZmluZSBYQlVTX0xFRF9HUkVFTgkJKDEgPDwgMSkKKyNkZWZpbmUgWEJVU19MRURfUkVECQkoMSA8PCAyKQorI2RlZmluZSBYQlVTX0xFRF9UT0dHTEUJCSgxIDw8IDgpCisKKyNkZWZpbmUgWEJVU19TV0lUQ0gJCSgodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKShYQlVTX0JBU0UgKyAweDEyMDAwKSkKKyNkZWZpbmUgWEJVU19TV0lUQ0hfU1dJVENICSgoKlhCVVNfU1dJVENIKSAmIDE1KQorI2RlZmluZSBYQlVTX1NXSVRDSF9KMTdfMTMJKCgqWEJVU19TV0lUQ0gpICYgKDEgPDwgNCkpCisjZGVmaW5lIFhCVVNfU1dJVENIX0oxN18xMQkoKCpYQlVTX1NXSVRDSCkgJiAoMSA8PCA1KSkKKyNkZWZpbmUgWEJVU19TV0lUQ0hfSjE3XzkJKCgqWEJVU19TV0lUQ0gpICYgKDEgPDwgNikpCisKKyNkZWZpbmUgRkxVU0hfQkFTRV9QSFlTCQkweDUwMDAwMDAwCisjZGVmaW5lIFVOQ0FDSEVBQkxFX0FERFIJKEFSTUNTUl9CQVNFICsgMHgxMDgpCisKKworLyogUElDIGlycSBjb250cm9sICovCisjZGVmaW5lIFBJQ19MTwkJCTB4MjAKKyNkZWZpbmUgUElDX01BU0tfTE8JCTB4MjEKKyNkZWZpbmUgUElDX0hJCQkJMHhBMAorI2RlZmluZSBQSUNfTUFTS19ISQkJMHhBMQorCisvKiBHUElPIHBpbnMgKi8KKyNkZWZpbmUgR1BJT19DQ0xLCQkweDgwMAorI2RlZmluZSBHUElPX0RTQ0xLCQkweDQwMAorI2RlZmluZSBHUElPX0UyQ0xLCQkweDIwMAorI2RlZmluZSBHUElPX0lPTE9BRAkJMHgxMDAKKyNkZWZpbmUgR1BJT19SRURfTEVECQkweDA4MAorI2RlZmluZSBHUElPX1dEVElNRVIJCTB4MDQwCisjZGVmaW5lIEdQSU9fREFUQQkJMHgwMjAKKyNkZWZpbmUgR1BJT19JT0NMSwkJMHgwMTAKKyNkZWZpbmUgR1BJT19ET05FCQkweDAwOAorI2RlZmluZSBHUElPX0ZBTgkJMHgwMDQKKyNkZWZpbmUgR1BJT19HUkVFTl9MRUQJCTB4MDAyCisjZGVmaW5lIEdQSU9fUkVTRVQJCTB4MDAxCisKKy8qIENQTEQgcGlucyAqLworI2RlZmluZSBDUExEX0RTX0VOQUJMRQkJOAorI2RlZmluZSBDUExEXzcxMTFfRElTQUJMRQk0CisjZGVmaW5lIENQTERfVU5NVVRFCQkyCisjZGVmaW5lIENQTERfRkxBU0hfV1JfRU5BQkxFCTEKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK2V4dGVybiB2b2lkIGdwaW9fbW9kaWZ5X29wKGludCBtYXNrLCBpbnQgc2V0KTsKK2V4dGVybiB2b2lkIGdwaW9fbW9kaWZ5X2lvKGludCBtYXNrLCBpbnQgaW4pOworZXh0ZXJuIGludCAgZ3Bpb19yZWFkKHZvaWQpOworZXh0ZXJuIHZvaWQgY3BsZF9tb2RpZnkoaW50IG1hc2ssIGludCBzZXQpOworI2VuZGlmCisKKyNkZWZpbmUgcGNpYmlvc19hc3NpZ25fYWxsX2J1c3NlcygpCTEKKworI2RlZmluZSBQQ0lCSU9TX01JTl9JTwkJMHgxMDAwCisjZGVmaW5lIFBDSUJJT1NfTUlOX01FTSAJMHg4MTAwMDAwMAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2EyODUvaW8uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2EyODUvaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDU3NmIxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTI4NS9pby5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTI4NS9pby5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5Ny0xOTk5IFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIE1vZGlmaWNhdGlvbnM6CisgKiAgIDA2LTEyLTE5OTcJUk1LCUNyZWF0ZWQuCisgKiAgIDA3LTA0LTE5OTkJUk1LCU1ham9yIGNsZWFudXAKKyAqLworI2lmbmRlZiBfX0FTTV9BUk1fQVJDSF9JT19ICisjZGVmaW5lIF9fQVNNX0FSTV9BUkNIX0lPX0gKKworI2RlZmluZSBJT19TUEFDRV9MSU1JVCAweGZmZmYKKworLyoKKyAqIFRyYW5zbGF0aW9uIG9mIHZhcmlvdXMgcmVnaW9uIGFkZHJlc3NlcyB0byB2aXJ0dWFsIGFkZHJlc3NlcworICovCisjZGVmaW5lIF9faW8oYSkJCQkoKHZvaWQgX19pb21lbSAqKShQQ0lPX0JBU0UgKyAoYSkpKQorI2lmIDEKKyNkZWZpbmUgX19tZW1fcGNpKGEpCQkoYSkKKyNkZWZpbmUgX19tZW1faXNhKGEpCQkoKGEpICsgUENJTUVNX0JBU0UpCisjZWxzZQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqX19fbWVtX3BjaSh2b2lkIF9faW9tZW0gKnApCit7CisJdW5zaWduZWQgbG9uZyBhID0gKHVuc2lnbmVkIGxvbmcpcDsKKwlCVUdfT04oYSA8PSAweGMwMDAwMDAwIHx8IGEgPj0gMHhlMDAwMDAwMCk7CisJcmV0dXJuIHA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbWVtICpfX19tZW1faXNhKHZvaWQgX19pb21lbSAqcCkKK3sKKwl1bnNpZ25lZCBsb25nIGEgPSAodW5zaWduZWQgbG9uZylwOworCUJVR19PTihhID49IDE2KjEwNDg1NzYpOworCXJldHVybiBwICsgUENJTUVNX0JBU0U7Cit9CisjZGVmaW5lIF9fbWVtX3BjaShhKQkJX19fbWVtX3BjaShhKQorI2RlZmluZSBfX21lbV9pc2EoYSkJCV9fX21lbV9pc2EoYSkKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2EyODUvaXJxcy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTI4NS9pcnFzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U3NjZmMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2EyODUvaXJxcy5oCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMjg1L2lycXMuaAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCBSdXNzZWxsIEtpbmcKKyAqIENvcHlyaWdodCAoQykgMTk5OCBQaGlsIEJsdW5kZWxsCisgKgorICogQ2hhbmdlbG9nOgorICogIDIwLUphbi0xOTk4CVJNSwlTdGFydGVkIG1lcmdlIG9mIEVCU0EyODYsIENBVFMgYW5kIE5ldFdpbmRlcgorICogIDAxLUZlYi0xOTk5CVBKQglJU0EgSVJRcyBzdGFydCBhdCAwIG5vdCAxNgorICovCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworI2RlZmluZSBOUl9JUlFTCQkJMzYKKyNkZWZpbmUgTlJfREMyMTI4NV9JUlFTCQkxNgorCisjZGVmaW5lIF9JU0FfSVJRKHgpCQkoMCArICh4KSkKKyNkZWZpbmUgX0lTQV9JTlIoeCkJCSgoeCkgLSAwKQorI2RlZmluZSBfREMyMTI4NV9JUlEoeCkJCSgxNiArICh4KSkKKyNkZWZpbmUgX0RDMjEyODVfSU5SKHgpCQkoKHgpIC0gMTYpCisKKy8qCisgKiBUaGlzIGlzIGEgbGlzdCBvZiBhbGwgaW50ZXJydXB0cyB0aGF0IHRoZSAyMTI4NQorICogY2FuIGdlbmVyYXRlIGFuZCB3ZSBoYW5kbGUuCisgKi8KKyNkZWZpbmUgSVJRX0NPTlJYCQlfREMyMTI4NV9JUlEoMCkKKyNkZWZpbmUgSVJRX0NPTlRYCQlfREMyMTI4NV9JUlEoMSkKKyNkZWZpbmUgSVJRX1RJTUVSMQkJX0RDMjEyODVfSVJRKDIpCisjZGVmaW5lIElSUV9USU1FUjIJCV9EQzIxMjg1X0lSUSgzKQorI2RlZmluZSBJUlFfVElNRVIzCQlfREMyMTI4NV9JUlEoNCkKKyNkZWZpbmUgSVJRX0lOMAkJCV9EQzIxMjg1X0lSUSg1KQorI2RlZmluZSBJUlFfSU4xCQkJX0RDMjEyODVfSVJRKDYpCisjZGVmaW5lIElSUV9JTjIJCQlfREMyMTI4NV9JUlEoNykKKyNkZWZpbmUgSVJRX0lOMwkJCV9EQzIxMjg1X0lSUSg4KQorI2RlZmluZSBJUlFfRE9PUkJFTExIT1NUCV9EQzIxMjg1X0lSUSg5KQorI2RlZmluZSBJUlFfRE1BMQkJX0RDMjEyODVfSVJRKDEwKQorI2RlZmluZSBJUlFfRE1BMgkJX0RDMjEyODVfSVJRKDExKQorI2RlZmluZSBJUlFfUENJCQkJX0RDMjEyODVfSVJRKDEyKQorI2RlZmluZSBJUlFfU0RSQU1QQVJJVFkJCV9EQzIxMjg1X0lSUSgxMykKKyNkZWZpbmUgSVJRX0kyT0lOUE9TVAkJX0RDMjEyODVfSVJRKDE0KQorI2RlZmluZSBJUlFfUENJX0FCT1JUCQlfREMyMTI4NV9JUlEoMTUpCisjZGVmaW5lIElSUV9QQ0lfU0VSUgkJX0RDMjEyODVfSVJRKDE2KQorI2RlZmluZSBJUlFfRElTQ0FSRF9USU1FUglfREMyMTI4NV9JUlEoMTcpCisjZGVmaW5lIElSUV9QQ0lfRFBFUlIJCV9EQzIxMjg1X0lSUSgxOCkKKyNkZWZpbmUgSVJRX1BDSV9QRVJSCQlfREMyMTI4NV9JUlEoMTkpCisKKyNkZWZpbmUgSVJRX0lTQV9USU1FUgkJX0lTQV9JUlEoMCkKKyNkZWZpbmUgSVJRX0lTQV9LRVlCT0FSRAlfSVNBX0lSUSgxKQorI2RlZmluZSBJUlFfSVNBX0NBU0NBREUJCV9JU0FfSVJRKDIpCisjZGVmaW5lIElSUV9JU0FfVUFSVDIJCV9JU0FfSVJRKDMpCisjZGVmaW5lIElSUV9JU0FfVUFSVAkJX0lTQV9JUlEoNCkKKyNkZWZpbmUgSVJRX0lTQV9GTE9QUFkJCV9JU0FfSVJRKDYpCisjZGVmaW5lIElSUV9JU0FfUFJJTlRFUgkJX0lTQV9JUlEoNykKKyNkZWZpbmUgSVJRX0lTQV9SVENfQUxBUk0JX0lTQV9JUlEoOCkKKyNkZWZpbmUgSVJRX0lTQV8yCQlfSVNBX0lSUSg5KQorI2RlZmluZSBJUlFfSVNBX1BTMk1PVVNFCV9JU0FfSVJRKDEyKQorI2RlZmluZSBJUlFfSVNBX0hBUkRESVNLMQlfSVNBX0lSUSgxNCkKKyNkZWZpbmUgSVJRX0lTQV9IQVJERElTSzIJX0lTQV9JUlEoMTUpCisKKyNkZWZpbmUgSVJRX01BU0tfVUFSVF9SWAkoMSA8PCAyKQorI2RlZmluZSBJUlFfTUFTS19VQVJUX1RYCSgxIDw8IDMpCisjZGVmaW5lIElSUV9NQVNLX1RJTUVSMQkJKDEgPDwgNCkKKyNkZWZpbmUgSVJRX01BU0tfVElNRVIyCQkoMSA8PCA1KQorI2RlZmluZSBJUlFfTUFTS19USU1FUjMJCSgxIDw8IDYpCisjZGVmaW5lIElSUV9NQVNLX0lOMAkJKDEgPDwgOCkKKyNkZWZpbmUgSVJRX01BU0tfSU4xCQkoMSA8PCA5KQorI2RlZmluZSBJUlFfTUFTS19JTjIJCSgxIDw8IDEwKQorI2RlZmluZSBJUlFfTUFTS19JTjMJCSgxIDw8IDExKQorI2RlZmluZSBJUlFfTUFTS19ET09SQkVMTEhPU1QJKDEgPDwgMTUpCisjZGVmaW5lIElSUV9NQVNLX0RNQTEJCSgxIDw8IDE2KQorI2RlZmluZSBJUlFfTUFTS19ETUEyCQkoMSA8PCAxNykKKyNkZWZpbmUgSVJRX01BU0tfUENJCQkoMSA8PCAxOCkKKyNkZWZpbmUgSVJRX01BU0tfU0RSQU1QQVJJVFkJKDEgPDwgMjQpCisjZGVmaW5lIElSUV9NQVNLX0kyT0lOUE9TVAkoMSA8PCAyNSkKKyNkZWZpbmUgSVJRX01BU0tfUENJX0FCT1JUCSgoMSA8PCAyOSkgfCAoMSA8PCAzMCkpCisjZGVmaW5lIElSUV9NQVNLX1BDSV9TRVJSCSgxIDw8IDIzKQorI2RlZmluZSBJUlFfTUFTS19ESVNDQVJEX1RJTUVSCSgxIDw8IDI3KQorI2RlZmluZSBJUlFfTUFTS19QQ0lfRFBFUlIJKDEgPDwgMjgpCisjZGVmaW5lIElSUV9NQVNLX1BDSV9QRVJSCSgxIDw8IDMxKQorCisvKgorICogTmV0d2luZGVyIGludGVycnVwdCBhbGxvY2F0aW9ucworICovCisjZGVmaW5lIElSUV9ORVRXSU5ERVJfRVRIRVIxMAlJUlFfSU4wCisjZGVmaW5lIElSUV9ORVRXSU5ERVJfRVRIRVIxMDAJSVJRX0lOMQorI2RlZmluZSBJUlFfTkVUV0lOREVSX1ZJRENPTVAJSVJRX0lOMgorI2RlZmluZSBJUlFfTkVUV0lOREVSX1BTMk1PVVNFCV9JU0FfSVJRKDUpCisjZGVmaW5lIElSUV9ORVRXSU5ERVJfSVIJX0lTQV9JUlEoNikKKyNkZWZpbmUgSVJRX05FVFdJTkRFUl9CVVRUT04JX0lTQV9JUlEoMTApCisjZGVmaW5lIElSUV9ORVRXSU5ERVJfVkdBCV9JU0FfSVJRKDExKQorI2RlZmluZSBJUlFfTkVUV0lOREVSX1NPVU5ECV9JU0FfSVJRKDEyKQorCisjdW5kZWYgUlRDX0lSUQorI2RlZmluZSBSVENfSVJRCQlJUlFfSVNBX1JUQ19BTEFSTQorI2RlZmluZSBJODA0Ml9LQkRfSVJRCUlSUV9JU0FfS0VZQk9BUkQKKyNkZWZpbmUgSTgwNDJfQVVYX0lSUQkobWFjaGluZV9pc19uZXR3aW5kZXIoKSA/IElSUV9ORVRXSU5ERVJfUFMyTU9VU0UgOiBJUlFfSVNBX1BTMk1PVVNFKQorI2RlZmluZSBJUlFfRkxPUFBZRElTSwlJUlFfSVNBX0ZMT1BQWQorCisjZGVmaW5lIGlycV9jYW5vbmljYWxpemUoX2kpCSgoKF9pKSA9PSBJUlFfSVNBX0NBU0NBREUpID8gSVJRX0lTQV8yIDogX2kpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMjg1L21lbW9yeS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTI4NS9tZW1vcnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDQ2NmY5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTI4NS9tZW1vcnkuaApAQCAtMCwwICsxLDc1IEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2EyODUvbWVtb3J5LmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk2LTE5OTkgUnVzc2VsbCBLaW5nLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIENoYW5nZWxvZzoKKyAqICAgMjAtT2N0LTE5OTYgUk1LCUNyZWF0ZWQKKyAqICAgMzEtRGVjLTE5OTcgUk1LCUZpeGVkIGRlZmluaXRpb25zIHRvIHJlZHVjZSB3YXJuaW5ncy4KKyAqICAgMTctTWF5LTE5OTggREFHCUFkZGVkIF9fdmlydF90b19idXMgYW5kIF9fYnVzX3RvX3ZpcnQgZnVuY3Rpb25zLgorICogICAyMS1Ob3YtMTk5OCBSTUsJQ2hhbmdlZCBfX3ZpcnRfdG9fYnVzIGFuZCBfX2J1c190b192aXJ0IHRvIG1hY3Jvcy4KKyAqICAgMjEtTWFyLTE5OTkgUk1LCUFkZGVkIFBBR0VfT0ZGU0VUIGZvciBjbzI4NSBhcmNoaXRlY3R1cmUuCisgKgkJCVJlbmFtZWQgdG8gbWVtb3J5LmgKKyAqCQkJTW92ZWQgUEFHRV9PRkZTRVQgYW5kIFRBU0tfU0laRSBoZXJlCisgKi8KKyNpZm5kZWYgX19BU01fQVJDSF9NRU1PUllfSAorI2RlZmluZSBfX0FTTV9BUkNIX01FTU9SWV9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2lmIGRlZmluZWQoQ09ORklHX0ZPT1RCUklER0VfQURESU4pCisvKgorICogSWYgd2UgbWF5IGJlIHVzaW5nIGFkZC1pbiBmb290YnJpZGdlIG1vZGUsIHRoZW4gd2UgbXVzdAorICogdXNlIHRoZSBvdXQtb2YtbGluZSB0cmFuc2xhdGlvbiB0aGF0IG1ha2VzIHVzZSBvZiB0aGUKKyAqIFBDSSBCQVIKKyAqLworI2lmbmRlZiBfX0FTU0VNQkxZX18KK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fdmlydF90b19idXModW5zaWduZWQgbG9uZyk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBfX2J1c190b192aXJ0KHVuc2lnbmVkIGxvbmcpOworI2VuZGlmCisKKyNlbGlmIGRlZmluZWQoQ09ORklHX0ZPT1RCUklER0VfSE9TVCkKKworI2RlZmluZSBfX3ZpcnRfdG9fYnVzKHgpCSgoeCkgLSAweGUwMDAwMDAwKQorI2RlZmluZSBfX2J1c190b192aXJ0KHgpCSgoeCkgKyAweGUwMDAwMDAwKQorCisjZWxzZQorCisjZXJyb3IgIlVuZGVmaW5lZCBmb290YnJpZGdlIG1vZGUiCisKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9GT09UQlJJREdFKQorCisvKiBUYXNrIHNpemUgYW5kIHBhZ2Ugb2Zmc2V0IGF0IDNHQiAqLworI2RlZmluZSBUQVNLX1NJWkUJCSgweGJmMDAwMDAwVUwpCisjZGVmaW5lIFBBR0VfT0ZGU0VUCQkoMHhjMDAwMDAwMFVMKQorCisjZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX0NPMjg1KQorCisvKiBUYXNrIHNpemUgYW5kIHBhZ2Ugb2Zmc2V0IGF0IDEuNUdCICovCisjZGVmaW5lIFRBU0tfU0laRQkJKDB4NWYwMDAwMDBVTCkKKyNkZWZpbmUgUEFHRV9PRkZTRVQJCSgweDYwMDAwMDAwVUwpCisKKyNlbHNlCisKKyNlcnJvciAiVW5kZWZpbmVkIGZvb3RicmlkZ2UgYXJjaGl0ZWN0dXJlIgorCisjZW5kaWYKKworLyoKKyAqIFBoeXNpY2FsIERSQU0gb2Zmc2V0LgorICovCisjZGVmaW5lIFBIWVNfT0ZGU0VUCQkoMHgwMDAwMDAwMFVMKQorCisvKgorICogVGhpcyBkZWNpZGVzIHdoZXJlIHRoZSBrZXJuZWwgd2lsbCBzZWFyY2ggZm9yIGEgZnJlZSBjaHVuayBvZiB2bQorICogc3BhY2UgZHVyaW5nIG1tYXAncy4KKyAqLworI2RlZmluZSBUQVNLX1VOTUFQUEVEX0JBU0UgKChUQVNLX1NJWkUgKyAweDAxMDAwMDAwKSAvIDMpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTI4NS9wYXJhbS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTI4NS9wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4MjcxMDMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMjg1L3BhcmFtLmgKQEAgLTAsMCArMSwzIEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2EyODUvcGFyYW0uaAorICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMjg1L3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTI4NS9zeXN0ZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjkxYzY5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTI4NS9zeXN0ZW0uaApAQCAtMCwwICsxLDY5IEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2EyODUvc3lzdGVtLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk2LTE5OTkgUnVzc2VsbCBLaW5nLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvZGVjMjEyODUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vbGVkcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2lkbGUodm9pZCkKK3sKKwljcHVfZG9faWRsZSgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUpCit7CisJaWYgKG1vZGUgPT0gJ3MnKSB7CisJCS8qCisJCSAqIEp1bXAgaW50byB0aGUgUk9NCisJCSAqLworCQljcHVfcmVzZXQoMHg0MTAwMDAwMCk7CisJfSBlbHNlIHsKKwkJaWYgKG1hY2hpbmVfaXNfbmV0d2luZGVyKCkpIHsKKwkJCS8qIG9wZW4gdXAgdGhlIFN1cGVySU8gY2hpcAorCQkJICovCisJCQlvdXRiKDB4ODcsIDB4MzcwKTsKKwkJCW91dGIoMHg4NywgMHgzNzApOworCisJCQkvKiBhdXggZnVuY3Rpb24gZ3JvdXAgMSAobG9naWNhbCBkZXZpY2UgNykKKwkJCSAqLworCQkJb3V0YigweDA3LCAweDM3MCk7CisJCQlvdXRiKDB4MDcsIDB4MzcxKTsKKworCQkJLyogc2V0IEdQMTYgZm9yIFdELVRJTUVSIG91dHB1dAorCQkJICovCisJCQlvdXRiKDB4ZTYsIDB4MzcwKTsKKwkJCW91dGIoMHgwMCwgMHgzNzEpOworCisJCQkvKiBzZXQgYSBSRUQgTEVEIGFuZCB0b2dnbGUgV0RfVElNRVIgZm9yIHJlYm9vdGluZworCQkJICovCisJCQlvdXRiKDB4YzQsIDB4MzM4KTsKKwkJfSBlbHNlIHsKKwkJCS8qIAorCQkJICogRm9yY2UgdGhlIHdhdGNoZG9nIHRvIGRvIGEgQ1BVIHJlc2V0LgorCQkJICoKKwkJCSAqIEFmdGVyIG1ha2luZyBzdXJlIHRoYXQgdGhlIHdhdGNoZG9nIGlzIGRpc2FibGVkCisJCQkgKiAoc28gd2UgY2FuIGNoYW5nZSB0aGUgdGltZXIgcmVnaXN0ZXJzKSB3ZSBmaXJzdAorCQkJICogZW5hYmxlIHRoZSB0aW1lciB0byBhdXRvcmVsb2FkIGl0c2VsZi4gIE5leHQsIHRoZQorCQkJICogdGltZXIgaW50ZXJ2YWwgaXMgc2V0IHJlYWxseSBzaG9ydCBhbmQgYW55CisJCQkgKiBjdXJyZW50IGludGVycnVwdCByZXF1ZXN0IGlzIGNsZWFyZWQgKHNvIHdlIGNhbgorCQkJICogc2VlIGFuIGVkZ2UgdHJhbnNpdGlvbikuICBGaW5hbGx5LCBUSU1FUjQgaXMKKwkJCSAqIGVuYWJsZWQgYXMgdGhlIHdhdGNoZG9nLgorCQkJICovCisJCQkqQ1NSX1NBMTEwX0NOVEwgJj0gfigxIDw8IDEzKTsKKwkJCSpDU1JfVElNRVI0X0NOVEwgPSBUSU1FUl9DTlRMX0VOQUJMRSB8CisJCQkJCSAgIFRJTUVSX0NOVExfQVVUT1JFTE9BRCB8CisJCQkJCSAgIFRJTUVSX0NOVExfRElWMTY7CisJCQkqQ1NSX1RJTUVSNF9MT0FEID0gMHgyOworCQkJKkNTUl9USU1FUjRfQ0xSICA9IDA7CisJCQkqQ1NSX1NBMTEwX0NOVEwgfD0gKDEgPDwgMTMpOworCQl9CisJfQorfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTI4NS90aW1leC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTI4NS90aW1leC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmNjBiMzgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMjg1L3RpbWV4LmgKQEAgLTAsMCArMSwxOCBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMjg1L3RpbWV4LmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk4IFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIEVCU0EyODUgYXJjaGl0ZWN0dXJlIHRpbWV4IHNwZWNpZmljYXRpb25zCisgKi8KKworLyoKKyAqIFdlIGFzc3VtZSBhIGNvbnN0YW50IGhlcmU7IHRoaXMgc2F0aXNmaWVzIHRoZSBtYXRocyBpbiBsaW51eC90aW1leC5oCisgKiBhbmQgbGludXgvdGltZS5oLiAgQ0xPQ0tfVElDS19SQVRFIGlzIGFjdHVhbGx5IHN5c3RlbSBkZXBlbmRlbnQsIGJ1dAorICogdGhpcyBtdXN0IGJlIGEgY29uc3RhbnQuCisgKi8KKyNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFCQkoNTAwMDAwMDAvMTYpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMjg1L3VuY29tcHJlc3MuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2EyODUvdW5jb21wcmVzcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyZmQ4NGUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMjg1L3VuY29tcHJlc3MuaApAQCAtMCwwICsxLDQ2IEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2EyODUvdW5jb21wcmVzcy5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5Ni0xOTk5IFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCisvKgorICogTm90ZSEgVGhpcyBjb3VsZCBjYXVzZSBwcm9ibGVtcyBvbiB0aGUgTmV0V2luZGVyCisgKi8KKyNkZWZpbmUgREMyMTI4NV9CQVNFICgodm9sYXRpbGUgdW5zaWduZWQgaW50ICopMHg0MjAwMDE2MCkKKyNkZWZpbmUgU0VSMF9CQVNFICAgICgodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKTB4N2MwMDAzZjgpCisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgcHV0YyhjaGFyIGMpCit7CisJaWYgKG1hY2hpbmVfaXNfbmV0d2luZGVyKCkpIHsKKwkJd2hpbGUgKChTRVIwX0JBU0VbNV0gJiAweDYwKSAhPSAweDYwKTsKKwkJU0VSMF9CQVNFWzBdID0gYzsKKwl9IGVsc2UgeworCQl3aGlsZSAoREMyMTI4NV9CQVNFWzZdICYgOCk7CisJCURDMjEyODVfQkFTRVswXSA9IGM7CisJfQorfQorCisvKgorICogVGhpcyBkb2VzIG5vdCBhcHBlbmQgYSBuZXdsaW5lCisgKi8KK3N0YXRpYyB2b2lkIHB1dHN0cihjb25zdCBjaGFyICpzKQoreworCXdoaWxlICgqcykgeworCQlwdXRjKCpzKTsKKwkJaWYgKCpzID09ICdcbicpCisJCQlwdXRjKCdccicpOworCQlzKys7CisJfQorfQorCisvKgorICogbm90aGluZyB0byBkbworICovCisjZGVmaW5lIGFyY2hfZGVjb21wX3NldHVwKCkKKyNkZWZpbmUgYXJjaF9kZWNvbXBfd2RvZygpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMjg1L3ZtYWxsb2MuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2EyODUvdm1hbGxvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlZjcwNWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMjg1L3ZtYWxsb2MuaApAQCAtMCwwICsxLDI2IEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2EyODUvdm1hbGxvYy5oCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKy8qCisgKiBKdXN0IGFueSBhcmJpdHJhcnkgb2Zmc2V0IHRvIHRoZSBzdGFydCBvZiB0aGUgdm1hbGxvYyBWTSBhcmVhOiB0aGUKKyAqIGN1cnJlbnQgOE1CIHZhbHVlIGp1c3QgbWVhbnMgdGhhdCB0aGVyZSB3aWxsIGJlIGEgOE1CICJob2xlIiBhZnRlciB0aGUKKyAqIHBoeXNpY2FsIG1lbW9yeSB1bnRpbCB0aGUga2VybmVsIHZpcnR1YWwgbWVtb3J5IHN0YXJ0cy4gIFRoYXQgbWVhbnMgdGhhdAorICogYW55IG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIHdpbGwgaG9wZWZ1bGx5IGJlIGNhdWdodC4KKyAqIFRoZSB2bWFsbG9jKCkgcm91dGluZXMgbGVhdmVzIGEgaG9sZSBvZiA0a0IgYmV0d2VlbiBlYWNoIHZtYWxsb2NlZAorICogYXJlYSBmb3IgdGhlIHNhbWUgcmVhc29uLiA7KQorICovCisjZGVmaW5lIFZNQUxMT0NfT0ZGU0VUCSAgKDgqMTAyNCoxMDI0KQorI2RlZmluZSBWTUFMTE9DX1NUQVJUCSAgKCgodW5zaWduZWQgbG9uZyloaWdoX21lbW9yeSArIFZNQUxMT0NfT0ZGU0VUKSAmIH4oVk1BTExPQ19PRkZTRVQtMSkpCisKKyNpZmRlZiBDT05GSUdfQVJDSF9GT09UQlJJREdFCisjZGVmaW5lIFZNQUxMT0NfRU5EICAgICAgIChQQUdFX09GRlNFVCArIDB4MzAwMDAwMDApCisjZWxzZQorI2RlZmluZSBWTUFMTE9DX0VORCAgICAgICAoUEFHRV9PRkZTRVQgKyAweDIwMDAwMDAwKQorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi9kZWJ1Zy1tYWNyby5TIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvZGVidWctbWFjcm8uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDExYzUxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvZGVidWctbWFjcm8uUwpAQCAtMCwwICsxLDQxIEBACisvKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi9kZWJ1Zy1tYWNyby5TCisgKgorICogRGVidWdnaW5nIG1hY3JvIGluY2x1ZGUgaGVhZGVyCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NC0xOTk5IFJ1c3NlbGwgS2luZworICogIE1vdmVkIGZyb20gbGludXgvYXJjaC9hcm0va2VybmVsL2RlYnVnLlMgYnkgQmVuIERvb2tzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisqLworCisjaW5jbHVkZSA8YXNtL2FyY2gvZXhjYWxpYnVyLmg+CisjZGVmaW5lIFVBUlQwMF9UWVBFCisjaW5jbHVkZSA8YXNtL2FyY2gvdWFydDAwLmg+CisKKwkJLm1hY3JvCWFkZHJ1YXJ0LHJ4CisJCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCisJCXRzdAlccngsICMxCQkJQCBNTVUgZW5hYmxlZD8KKwkJbGRyCVxyeCwgPUVYQ19VQVJUMDBfQkFTRQlAIHBoeXNpY2FsIGJhc2UgYWRkcmVzcworCQlvcnJuZQlccngsIFxyeCwgIzB4ZmYwMDAwMDAJQCB2aXJ0dWFsIGJhc2UKKwkJb3JybmUJXHJ4LCBccngsICMweDAwZjAwMDAwCisJCS5lbmRtCisKKwkJLm1hY3JvCXNlbmR1YXJ0LHJkLHJ4CisJCXN0cglccmQsIFtccngsICNVQVJUX1REKDApXQorCQkuZW5kbQorCisJCS5tYWNybwl3YWl0dWFydCxyZCxyeAorMTAwMToJCWxkcglccmQsIFtccngsICNVQVJUX1RTUigwKV0KKwkJYW5kIAlccmQsIFxyZCwgICNVQVJUX1RTUl9UWF9MRVZFTF9NU0sKKwkJY21wCVxyZCwgIzE1CisJCWJlcQkxMDAxYgorCQkuZW5kbQorCisJCS5tYWNybwlidXN5dWFydCxyZCxyeAorMTAwMToJCWxkcglccmQsIFtccngsICNVQVJUX1RTUigwKV0KKwkJYW5kcyAJXHJkLCBccmQsICAjVUFSVF9UU1JfVFhfTEVWRUxfTVNLCisJCWJuZQkxMDAxYgorCQkuZW5kbQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvZG1hLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi9kbWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDk3NzM0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvZG1hLmgKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jYW1lbG90L2RtYS5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NywxOTk4IFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworI2lmbmRlZiBfX0FTTV9BUkNIX0RNQV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfRE1BX0gKKworI2RlZmluZSBNQVhfRE1BX0FERFJFU1MJCTB4ZmZmZmZmZmYKKworI2RlZmluZSBNQVhfRE1BX0NIQU5ORUxTCTAKKworI2VuZGlmIC8qIF9BU01fQVJDSF9ETUFfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi9lbnRyeS1tYWNyby5TIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvZW50cnktbWFjcm8uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTZhZTA4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvZW50cnktbWFjcm8uUwpAQCAtMCwwICsxLDI1IEBACisvKgorICogaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvZW50cnktbWFjcm8uUworICoKKyAqIExvdy1sZXZlbCBJUlEgaGVscGVyIG1hY3JvcyBmb3IgZXB4YTEwZGIgcGxhdGZvcm0KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworI2luY2x1ZGUgPGFzbS9hcmNoL3BsYXRmb3JtLmg+CisjdW5kZWYgSVJRX01PREUgLyogc2FtZSBuYW1lIGRlZmluZWQgaW4gYXNtL3Byb2MvcHRyYWNlLmggKi8KKyNpbmNsdWRlIDxhc20vYXJjaC9pbnRfY3RybDAwLmg+CisKKwkJLm1hY3JvCWRpc2FibGVfZmlxCisJCS5lbmRtCisKKwkJLm1hY3JvCWdldF9pcnFucl9hbmRfYmFzZSwgaXJxbnIsIGlycXN0YXQsIGJhc2UsIHRtcAorCisJCWxkcglcaXJxc3RhdCwgPUlOVF9JRChJT19BRERSRVNTKEVYQ19JTlRfQ1RSTDAwX0JBU0UpKQorCQlsZHIJXGlycW5yLFtcaXJxc3RhdF0KKwkJY21wCVxpcnFuciwjMAorCQlzdWJuZQlcaXJxbnIsXGlycW5yLCMxCisKKwkJLmVuZG0KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvZXRoZXIwMC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvZXRoZXIwMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3MzdiOGEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi9ldGhlcjAwLmgKQEAgLTAsMCArMSw0ODIgQEAKKyNpZm5kZWYgX19FVEhFUjAwX0gKKyNkZWZpbmUgX19FVEhFUjAwX0gKKworCisKKy8qCisgKiBSZWdpc3RlciBkZWZpbml0aW9ucyBmb3IgdGhlIEV0aGVybmV0IE1BQworICovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIEFsdGVyYSBDb3Jwb3JhdGlvbiAyMDAwLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqLworCisvKgorKglTdHJ1Y3R1cmVzIGZvciB0aGUgRE1BIGNvbnRyb2xsZXIKKyovCit0eXBlZGVmIHN0cnVjdCBmZGFfZGVzYworCXsKKwlzdHJ1Y3QgZmRhX2Rlc2MgKglGRE5leHQ7CisJbG9uZwkJCQlGRFN5c3RlbTsKKwlsb25nCQkJCUZEU3RhdDsKKwlzaG9ydAkJCQlGRExlbmd0aDsKKwlzaG9ydAkJCQlGREN0bDsKKwl9RkRBX0RFU0M7CisKK3R5cGVkZWYgc3RydWN0IGJ1Zl9kZXNjCisJeworCWNoYXIgKglCdWZmRGF0YTsKKwlzaG9ydAlCdWZmTGVuZ3RoOworCWNoYXIJQkRTdGF0OworCWNoYXIJQkRDdGw7CisJfUJVRl9ERVNDOworCisvKgorKglDb250cm9sIG1hc2tzIGZvciB0aGUgRE1BIGNvbnRyb2xsZXIKKyovCisjZGVmaW5lIEZEQ1RMX0JEQ09VTlRfTVNLCQkJCQkJKDB4MUYpCisjZGVmaW5lIEZEQ1RMX0JEQ09VTlRfT0ZTVAkJCQkJCSgwKQorI2RlZmluZSBGRENUTF9GUk1PUFRfTVNLCQkJCQkJKDB4N0MwMCkKKyNkZWZpbmUgRkRDVExfRlJNT1BUX09GU1QJCQkJCQkoMTApCisjZGVmaW5lCUZEQ1RMX0NPV05TRkRfTVNLCQkJCQkJKDB4ODAwMCkKKyNkZWZpbmUJRkRDVExfQ09XTlNGRF9PRlNUCQkJCQkJKDE1KQorCisjZGVmaW5lIEJEQ1RMX1JYQkRTRVFOX01TSwkJCQkJCSgweDdGKQorI2RlZmluZSBCRENUTF9SWEJEU0VRTl9PRlNUCQkJCQkJKDApCisjZGVmaW5lCUJEQ1RMX0NPV05TQkRfTVNLCQkJCQkJKDB4ODApCisjZGVmaW5lCUJEQ1RMX0NPV05TQkRfT0ZTVAkJCQkJCSg3KQorCisjZGVmaW5lIEZETkVYVF9FT0xfTVNLCQkJCQkJCSgweDEpCisjZGVmaW5lIEZETkVYVF9FT0xfT0ZTVAkJCQkJCQkoMCkKKyNkZWZpbmUgRkRORVhUX0VPTF9QT0lOVEVSX01TSwkJCQkJKDB4RkZGRkZGRjApCisjZGVmaW5lIEZETkVYVF9FT0xfUE9JTlRFUl9PRlNUCQkJCQkoNCkKKworI2RlZmluZSBFVEhFUl9BUkNfU0laRSAgICAgICAgICgyMSkKKworLyoKKyoJUmVnaXN0ZXIgZGVmaW5pdGlvbnMgYW5kIG1hc2tzCisqLworI2RlZmluZSBFVEhFUl9ETUFfQ1RMKGJhc2UpCQkJCQkJCShFVEhFUjAwX1RZUEUgKGJhc2UgKyAweDEwMCkpCisjZGVmaW5lIEVUSEVSX0RNQV9DVExfRE1CVVJTVF9PRlNUCQkJCSgyKQorI2RlZmluZSBFVEhFUl9ETUFfQ1RMX0RNQlVSU1RfTVNLCQkJCSgweDFGQykKKyNkZWZpbmUgRVRIRVJfRE1BX0NUTF9QT1dSTUdNTlRfT0ZTVAkJCSgxMSkKKyNkZWZpbmUgRVRIRVJfRE1BX0NUTF9QT1dSTUdNTlRfTVNLCQkJCSgweDEwMDApCisjZGVmaW5lIEVUSEVSX0RNQV9DVExfVFhCSUdFX09GU1QJCQkJKDE0KQorI2RlZmluZSBFVEhFUl9ETUFfQ1RMX1RYQklHRV9NU0sJCQkJKDB4NDAwMCkKKyNkZWZpbmUgRVRIRVJfRE1BX0NUTF9SWEJJR0VfT0ZTVAkJCQkoMTUpCisjZGVmaW5lIEVUSEVSX0RNQV9DVExfUlhCSUdFX01TSwkJCQkoMHg4MDAwKQorI2RlZmluZSBFVEhFUl9ETUFfQ1RMX1RYV0FLRVVQX09GU1QJCQkJKDE2KQorI2RlZmluZSBFVEhFUl9ETUFfQ1RMX1RYV0FLRVVQX01TSwkJCQkoMHgxMDAwMCkKKyNkZWZpbmUgRVRIRVJfRE1BX0NUTF9TV0lOVFJFUV9PRlNUCQkJCSgxNykKKyNkZWZpbmUgRVRIRVJfRE1BX0NUTF9TV0lOVFJFUV9NU0sJCQkJKDB4MjAwMDApCisjZGVmaW5lIEVUSEVSX0RNQV9DVExfSU5UTUFTS19PRlNUCQkJCSgxOCkKKyNkZWZpbmUgRVRIRVJfRE1BX0NUTF9JTlRNQVNLX01TSwkJCQkoMHg0MDAwMCkKKyNkZWZpbmUgRVRIRVJfRE1BX0NUTF9NNjZFTlNUQVRfT0ZTVAkJCSgxOSkKKyNkZWZpbmUgRVRIRVJfRE1BX0NUTF9NNjZFTlNUQVRfTVNLCQkJCSgweDgwMDAwKQorI2RlZmluZSBFVEhFUl9ETUFfQ1RMX1JNVFhJTklUX09GU1QJCQkJKDIwKQorI2RlZmluZSBFVEhFUl9ETUFfQ1RMX1JNVFhJTklUX01TSwkJCQkoMHgxMDAwMDApCisjZGVmaW5lIEVUSEVSX0RNQV9DVExfUk1SWElOSVRfT0ZTVAkJCQkoMjEpCisjZGVmaW5lIEVUSEVSX0RNQV9DVExfUk1SWElOSVRfTVNLCQkJCSgweDIwMDAwMCkKKyNkZWZpbmUgRVRIRVJfRE1BX0NUTF9SWEFMSUdOX09GU1QJCQkJKDIyKQorI2RlZmluZSBFVEhFUl9ETUFfQ1RMX1JYQUxJR05fTVNLCQkJCSgweEMwMDAwMCkKKyNkZWZpbmUgRVRIRVJfRE1BX0NUTF9STVNXUlFfT0ZTVAkJCQkoMjQpCisjZGVmaW5lIEVUSEVSX0RNQV9DVExfUk1TV1JRX01TSwkJCQkoMHgxMDAwMDAwKQorI2RlZmluZSBFVEhFUl9ETUFfQ1RMX1JNRU1CQU5LX09GU1QJCQkJKDI1KQorI2RlZmluZSBFVEhFUl9ETUFfQ1RMX1JNRU1CQU5LX01TSwkJCQkoMHgyMDAwMDAwKQorCisjZGVmaW5lIEVUSEVSX1RYRlJNUFRSKGJhc2UpCQkJCQkJCShFVEhFUjAwX1RZUEUgKGJhc2UgKyAweDEwNCkpCisKKyNkZWZpbmUgRVRIRVJfVFhUSFJTSChiYXNlKQkJCQkJCQkoRVRIRVIwMF9UWVBFIChiYXNlICsgMHgzMDgpKQorCisjZGVmaW5lIEVUSEVSX1RYUE9MTENUUihiYXNlKQkJCQkJCQkoRVRIRVIwMF9UWVBFIChiYXNlICsgMHgzMGMpKQorCisjZGVmaW5lCUVUSEVSX0JMRlJNUFRSKGJhc2UpCQkJCQkJCShFVEhFUjAwX1RZUEUgKGJhc2UgKyAweDExMCkpCisjZGVmaW5lIEVUSEVSX0JMRkZSTVBUUl9FT0xfT0ZTVAkJCQkoMCkKKyNkZWZpbmUgRVRIRVJfQkxGRlJNUFRSX0VPTF9NU0sJCQkJCSgweDEpCisjZGVmaW5lIEVUSEVSX0JMRkZSTVBUUl9BRERSRVNTX09GU1QJCQkoNCkKKyNkZWZpbmUgRVRIRVJfQkxGRlJNUFRSX0FERFJFU1NfTVNLCQkJCSgweEZGRkZGRkYwKQorCisjZGVmaW5lIEVUSEVSX1JYRlJBR1NJWkUoYmFzZSkJCQkJCQkoRVRIRVIwMF9UWVBFIChiYXNlICsgMHgxMTQpKQorI2RlZmluZQlFVEhFUl9SWEZSQUdTSVpFX01JTkZSQUdfT0ZTVAkJCSgyKQorI2RlZmluZQlFVEhFUl9SWEZSQUdTSVpFX01JTkZSQUdfTVNLCQkJKDB4RkZDKQorI2RlZmluZQlFVEhFUl9SWEZSQUdTSVpFX0VOUEFDS19PRlNUCQkJKDE1KQorI2RlZmluZQlFVEhFUl9SWEZSQUdTSVpFX0VOUEFDS19NU0sJCQkJKDB4ODAwMCkKKworI2RlZmluZSBFVEhFUl9JTlRfRU4oYmFzZSkJCQkJCQkJKEVUSEVSMDBfVFlQRSAoYmFzZSArIDB4MTE4KSkKKyNkZWZpbmUgRVRIRVJfSU5UX0VOX0ZEQUVYRU5fT0ZTVAkJCQkoMCkKKyNkZWZpbmUgRVRIRVJfSU5UX0VOX0ZEQUVYRU5fTVNLCQkJCSgweDEpCisjZGVmaW5lIEVUSEVSX0lOVF9FTl9CTEVYRU5fT0ZTVAkJCQkoMSkKKyNkZWZpbmUgRVRIRVJfSU5UX0VOX0JMRVhOX01TSwkJCQkJKDB4MikKKyNkZWZpbmUgRVRIRVJfSU5UX0VOX1NUQVJHQUJURU5fT0ZTVAkJCSgyKQorI2RlZmluZSBFVEhFUl9JTlRfRU5fU1RBUkdBQlRFTl9NU0sJCQkJKDB4NCkKKyNkZWZpbmUgRVRIRVJfSU5UX0VOX1JUQVJHQUJURU5fT0ZTVAkJCSgzKQorI2RlZmluZSBFVEhFUl9JTlRfRU5fUlRBUkdBQlRFTl9NU0sJCQkJKDB4OCkKKyNkZWZpbmUgRVRIRVJfSU5UX0VOX1JNQVNBQlRFTl9PRlNUCQkJCSg0KQorI2RlZmluZSBFVEhFUl9JTlRfRU5fUk1BU0FCVEVOX01TSwkJCQkoMHgxMCkKKyNkZWZpbmUgRVRIRVJfSU5UX0VOX1NTWVNFUlJFTl9PRlNUCQkJCSg1KQorI2RlZmluZSBFVEhFUl9JTlRfRU5fU1NZU0VSUkVOX01TSwkJCQkoMHgyMCkKKyNkZWZpbmUgRVRIRVJfSU5UX0VOX0RQQVJFUlJFTl9PRlNUCQkJCSg2KQorI2RlZmluZSBFVEhFUl9JTlRfRU5fRFBBUkVSUkVOX01TSwkJCQkoMHg0MCkKKyNkZWZpbmUgRVRIRVJfSU5UX0VOX0VBUk5PVEVOX09GU1QJCQkJKDcpCisjZGVmaW5lIEVUSEVSX0lOVF9FTl9FQVJOT1RFTl9NU0sJCQkJKDB4ODApCisjZGVmaW5lIEVUSEVSX0lOVF9FTl9EUEFSREVOX09GU1QJCQkJKDgpCisjZGVmaW5lIEVUSEVSX0lOVF9FTl9EUEFSREVOX01TSwkJCQkoMHgxMDApCisjZGVmaW5lIEVUSEVSX0lOVF9FTl9ETVBBUkVSUkVOX09GU1QJCQkoOSkKKyNkZWZpbmUgRVRIRVJfSU5UX0VOX0RNUEFSRVJSRU5fTVNLCQkJCSgweDIwMCkKKyNkZWZpbmUgRVRIRVJfSU5UX0VOX1RYQ1RMQ01QRU5fT0ZTVAkJCSgxMCkKKyNkZWZpbmUgRVRIRVJfSU5UX0VOX1RYQ1RMQ01QRU5fTVNLCQkJCSgweDQwMCkKKyNkZWZpbmUgRVRIRVJfSU5UX0VOX05SQUJURU5fT0ZTVAkJCQkoMTEpCisjZGVmaW5lIEVUSEVSX0lOVF9FTl9OUkFCVEVOX01TSwkJCQkoMHg4MDApCisKKyNkZWZpbmUJRVRIRVJfRkRBX0JBUyhiYXNlKQkJCQkJCQkoRVRIRVIwMF9UWVBFIChiYXNlICsgMHgxMUMpKQorI2RlZmluZSBFVEhFUl9GREFfQkFTX0FERFJFU1NfT0ZTVAkJCQkoNCkKKyNkZWZpbmUgRVRIRVJfRkRBX0JBU19BRERSRVNTX01TSwkJCQkoMHhGRkZGRkZGMCkKKworI2RlZmluZSBFVEhFUl9GREFfTElNKGJhc2UpCQkJCQkJCShFVEhFUjAwX1RZUEUgKGJhc2UgKyAweDEyMCkpCisjZGVmaW5lIEVUSEVSX0ZEQV9MSU1fQ09VTlRfT0ZTVAkJCQkoNCkKKyNkZWZpbmUgRVRIRVJfRkRBX0xJTV9DT1VOVF9NU0sJCQkJCSgweEZGRjApCisKKyNkZWZpbmUgRVRIRVJfSU5UX1NSQyhiYXNlKQkJCQkJCQkoRVRIRVIwMF9UWVBFIChiYXNlICsgMHgxMjQpKQorI2RlZmluZSBFVEhFUl9JTlRfU1JDX0lOVE1BQ1RYX09GU1QJCQkJKDApCisjZGVmaW5lIEVUSEVSX0lOVF9TUkNfSU5UTUFDVFhfTVNLCQkJCSgweDEpCisjZGVmaW5lIEVUSEVSX0lOVF9TUkNfSU5UTUFDUlhfT0ZTVAkJCQkoMSkKKyNkZWZpbmUgRVRIRVJfSU5UX1NSQ19JTlRNQUNSWF9NU0sJCQkJKDB4MikKKyNkZWZpbmUgRVRIRVJfSU5UX1NSQ19JTlRTQlVTX09GU1QJCQkJKDIpCisjZGVmaW5lIEVUSEVSX0lOVF9TUkNfSU5UU0JVU19NU0sJCQkJKDB4NCkKKyNkZWZpbmUgRVRIRVJfSU5UX1NSQ19JTlRGREFFWF9PRlNUCQkJCSgzKQorI2RlZmluZSBFVEhFUl9JTlRfU1JDX0lOVEZEQUVYX01TSwkJCQkoMHg4KQorI2RlZmluZSBFVEhFUl9JTlRfU1JDX0lOVEJMRVhfT0ZTVAkJCQkoNCkKKyNkZWZpbmUgRVRIRVJfSU5UX1NSQ19JTlRCTEVYX01TSwkJCQkoMHgxMCkKKyNkZWZpbmUgRVRIRVJfSU5UX1NSQ19TV0lOVF9PRlNUCQkJCSg1KQorI2RlZmluZSBFVEhFUl9JTlRfU1JDX1NXSU5UX01TSwkJCQkJKDB4MjApCisjZGVmaW5lIEVUSEVSX0lOVF9TUkNfSU5URUFSTk9UX09GU1QJCQkoNikKKyNkZWZpbmUgRVRIRVJfSU5UX1NSQ19JTlRFQVJOT1RfTVNLCQkJCSgweDQwKQorI2RlZmluZSBFVEhFUl9JTlRfU1JDX0RNUEFSRVJSX09GU1QJCQkJKDcpCisjZGVmaW5lIEVUSEVSX0lOVF9TUkNfRE1QQVJFUlJfTVNLCQkJCSgweDgwKQorI2RlZmluZSBFVEhFUl9JTlRfU1JDX0lOVEVYQkRfT0ZTVAkJCQkoOCkKKyNkZWZpbmUgRVRIRVJfSU5UX1NSQ19JTlRFWEJEX01TSwkJCQkoMHgxMDApCisjZGVmaW5lIEVUSEVSX0lOVF9TUkNfSU5UVFhDVExDTVBfT0ZTVAkJCSg5KQorI2RlZmluZSBFVEhFUl9JTlRfU1JDX0lOVFRYQ1RMQ01QX01TSwkJCSgweDIwMCkKKyNkZWZpbmUgRVRIRVJfSU5UX1NSQ19JTlROUkFCVF9PRlNUCQkJCSgxMCkKKyNkZWZpbmUgRVRIRVJfSU5UX1NSQ19JTlROUkFCVF9NU0sJCQkJKDB4NDAwKQorI2RlZmluZSBFVEhFUl9JTlRfU1JDX0ZEQUVYX09GU1QJCQkJKDExKQorI2RlZmluZSBFVEhFUl9JTlRfU1JDX0ZEQUVYX01TSwkJCQkJKDB4ODAwKQorI2RlZmluZSBFVEhFUl9JTlRfU1JDX0JMRVhfT0ZTVAkJCQkJKDEyKQorI2RlZmluZSBFVEhFUl9JTlRfU1JDX0JMRVhfTVNLCQkJCQkoMHgxMDAwKQorI2RlZmluZSBFVEhFUl9JTlRfU1JDX0RNUEFSRVJSU1RBVF9PRlNUCQkJKDEzKQorI2RlZmluZSBFVEhFUl9JTlRfU1JDX0RNUEFSRVJSU1RBVF9NU0sJCQkoMHgyMDAwKQorI2RlZmluZSBFVEhFUl9JTlRfU1JDX05SQUJUX09GU1QJCQkJKDE0KQorI2RlZmluZSBFVEhFUl9JTlRfU1JDX05SQUJUX01TSwkJCQkJKDB4NDAwMCkKKyNkZWZpbmUgRVRIRVJfSU5UX1NSQ19JTlRMSU5LX09GU1QJCQkJKDE1KQorI2RlZmluZSBFVEhFUl9JTlRfU1JDX0lOVExJTktfTVNLCQkJCSgweDgwMDApCisjZGVmaW5lIEVUSEVSX0lOVF9TUkNfSU5URVhERUZFUl9PRlNUCQkJKDE2KQorI2RlZmluZSBFVEhFUl9JTlRfU1JDX0lOVEVYREVGRVJfTVNLCQkJKDB4MTAwMDApCisjZGVmaW5lIEVUSEVSX0lOVF9TUkNfSU5UUk1PTl9PRlNUCQkJCSgxNykKKyNkZWZpbmUgRVRIRVJfSU5UX1NSQ19JTlRSTU9OX01TSwkJCQkoMHgyMDAwMCkKKyNkZWZpbmUgRVRIRVJfSU5UX1NSQ19JUlFfTVNLCQkJCQkoMHg4M0ZGKQorCisjZGVmaW5lIEVUSEVSX1BBVVNFQ05UKGJhc2UpCQkJCQkJCShFVEhFUjAwX1RZUEUgKGJhc2UgKyAweDQwKSkKKyNkZWZpbmUgRVRIRVJfUEFVU0VDTlRfQ09VTlRfT0ZTVAkJCQkoMCkKKyNkZWZpbmUgRVRIRVJfUEFVU0VDTlRfQ09VTlRfTVNLCQkJCSgweEZGRkYpCisKKyNkZWZpbmUgRVRIRVJfUkVNUEFVQ05UKGJhc2UpCQkJCQkJCShFVEhFUjAwX1RZUEUgKGJhc2UgKyAweDQ0KSkKKyNkZWZpbmUgRVRIRVJfUkVNUEFVQ05UX0NPVU5UX09GU1QJCQkJKDApCisjZGVmaW5lIEVUSEVSX1JFTVBBVUNOVF9DT1VOVF9NU0sJCQkJKDB4RkZGRikKKworI2RlZmluZSBFVEhFUl9UWENPTkZSTVNUQVQoYmFzZSkJCQkJCQkoRVRIRVIwMF9UWVBFIChiYXNlICsgMHgzNDgpKQorI2RlZmluZSBFVEhFUl9UWENPTkZSTVNUQVRfVFNfU1RBVF9WQUxVRV9PRlNUCSgwKQorI2RlZmluZSBFVEhFUl9UWENPTkZSTVNUQVRfVFNfU1RBVF9WQUxVRV9NU0sJKDB4M0ZGRkZGKQorCisjZGVmaW5lIEVUSEVSX01BQ19DVEwoYmFzZSkJCQkJCQkJKEVUSEVSMDBfVFlQRSAoYmFzZSArIDApKQorI2RlZmluZSBFVEhFUl9NQUNfQ1RMX0hBTFRSRVFfT0ZTVAkJCQkoMCkKKyNkZWZpbmUgRVRIRVJfTUFDX0NUTF9IQUxUUkVRX01TSwkJCQkoMHgxKQorI2RlZmluZSBFVEhFUl9NQUNfQ1RMX0hBTFRJTU1fT0ZTVAkJCQkoMSkKKyNkZWZpbmUgRVRIRVJfTUFDX0NUTF9IQUxUSU1NX01TSwkJCQkoMHgyKQorI2RlZmluZSBFVEhFUl9NQUNfQ1RMX1JFU0VUX09GU1QJCQkJKDIpCisjZGVmaW5lIEVUSEVSX01BQ19DVExfUkVTRVRfTVNLCQkJCQkoMHg0KQorI2RlZmluZSBFVEhFUl9NQUNfQ1RMX0ZVTExEVVBfT0ZTVAkJCQkoMykKKyNkZWZpbmUgRVRIRVJfTUFDX0NUTF9GVUxMRFVQX01TSwkJCQkoMHg4KQorI2RlZmluZSBFVEhFUl9NQUNfQ1RMX01BQ0xPT1BfT0ZTVAkJCQkoNCkKKyNkZWZpbmUgRVRIRVJfTUFDX0NUTF9NQUNMT09QX01TSwkJCQkoMHgxMCkKKyNkZWZpbmUgRVRIRVJfTUFDX0NUTF9DT05OX09GU1QJCQkJCSg1KQorI2RlZmluZSBFVEhFUl9NQUNfQ1RMX0NPTk5fTVNLCQkJCQkoMHg2MCkKKyNkZWZpbmUgRVRIRVJfTUFDX0NUTF9MT09QMTBfT0ZTVAkJCQkoNykKKyNkZWZpbmUgRVRIRVJfTUFDX0NUTF9MT09QMTBfTVNLCQkJCSgweDgwKQorI2RlZmluZSBFVEhFUl9NQUNfQ1RMX0xOS0NIR19PRlNUCQkJCSg4KQorI2RlZmluZSBFVEhFUl9NQUNfQ1RMX0xOS0NIR19NU0sJCQkJKDB4MTAwKQorI2RlZmluZSBFVEhFUl9NQUNfQ1RMX01JU1NST0xMX09GU1QJCQkJKDEwKQorI2RlZmluZSBFVEhFUl9NQUNfQ1RMX01JU1NST0xMX01TSwkJCQkoMHg0MDApCisjZGVmaW5lIEVUSEVSX01BQ19DVExfRU5NSVNTUk9MTF9PRlNUCQkJKDEzKQorI2RlZmluZSBFVEhFUl9NQUNfQ1RMX0VOTUlTU1JPTExfTVNLCQkJKDB4MjAwMCkKKyNkZWZpbmUgRVRIRVJfTUFDX0NUTF9MSU5LMTBfT0ZTVAkJCQkoMTUpCisjZGVmaW5lIEVUSEVSX01BQ19DVExfTElOSzEwX01TSwkJCQkoMHg4MDAwKQorCisjZGVmaW5lIEVUSEVSX0FSQ19DVEwoYmFzZSkJCQkJCQkJKEVUSEVSMDBfVFlQRSAoYmFzZSArIDB4NCkpCisjZGVmaW5lCUVUSEVSX0FSQ19DVExfU1RBVElPTkFDQ19PRlNUCQkJKDApCisjZGVmaW5lCUVUSEVSX0FSQ19DVExfU1RBVElPTkFDQ19NU0sJCQkoMHgxKQorI2RlZmluZQlFVEhFUl9BUkNfQ1RMX0dST1VQQUNDX09GU1QJCQkJKDEpCisjZGVmaW5lCUVUSEVSX0FSQ19DVExfR1JPVVBBQ0NfTVNLCQkJCSgweDIpCisjZGVmaW5lCUVUSEVSX0FSQ19DVExfQlJPQURBQ0NfT0ZTVAkJCQkoMikKKyNkZWZpbmUJRVRIRVJfQVJDX0NUTF9CUk9BREFDQ19NU0sJCQkJKDB4NCkKKyNkZWZpbmUJRVRIRVJfQVJDX0NUTF9ORUdBUkNfT0ZTVAkJCQkoMykKKyNkZWZpbmUJRVRIRVJfQVJDX0NUTF9ORUdBUkNfTVNLCQkJCSgweDgpCisjZGVmaW5lCUVUSEVSX0FSQ19DVExfQ09NUEVOX09GU1QJCQkJKDQpCisjZGVmaW5lCUVUSEVSX0FSQ19DVExfQ09NUEVOX01TSwkJCQkoMHgxMCkKKworI2RlZmluZSBFVEhFUl9UWF9DVEwoYmFzZSkJCQkJCQkJKEVUSEVSMDBfVFlQRSAoYmFzZSArIDB4OCkpCisjZGVmaW5lIEVUSEVSX1RYX0NUTF9UWEVOX09GU1QJCQkJCSgwKQorI2RlZmluZSBFVEhFUl9UWF9DVExfVFhFTl9NU0sJCQkJCSgweDEpCisjZGVmaW5lIEVUSEVSX1RYX0NUTF9UWEhBTFRfT0ZTVAkJCQkoMSkKKyNkZWZpbmUgRVRIRVJfVFhfQ1RMX1RYSEFMVF9NU0sJCQkJCSgweDIpCisjZGVmaW5lIEVUSEVSX1RYX0NUTF9OT1BBRF9PRlNUCQkJCQkoMikKKyNkZWZpbmUgRVRIRVJfVFhfQ1RMX05PUEFEX01TSwkJCQkJKDB4NCkKKyNkZWZpbmUgRVRIRVJfVFhfQ1RMX05PQ1JDX09GU1QJCQkJCSgzKQorI2RlZmluZSBFVEhFUl9UWF9DVExfTk9DUkNfTVNLCQkJCQkoMHg4KQorI2RlZmluZSBFVEhFUl9UWF9DVExfRkJBQ0tfT0ZTVAkJCQkJKDQpCisjZGVmaW5lIEVUSEVSX1RYX0NUTF9GQkFDS19NU0sJCQkJCSgweDEwKQorI2RlZmluZSBFVEhFUl9UWF9DVExfTk9FWERFRl9PRlNUCQkJCSg1KQorI2RlZmluZSBFVEhFUl9UWF9DVExfTk9FWERFRl9NU0sJCQkJKDB4MjApCisjZGVmaW5lIEVUSEVSX1RYX0NUTF9TRFBBVVNFX09GU1QJCQkJKDYpCisjZGVmaW5lIEVUSEVSX1RYX0NUTF9TRFBBVVNFX01TSwkJCQkoMHg0MCkKKyNkZWZpbmUgRVRIRVJfVFhfQ1RMX01JSTEwX09GU1QJCQkJCSg3KQorI2RlZmluZSBFVEhFUl9UWF9DVExfTUlJMTBfTVNLCQkJCQkoMHg4MCkKKyNkZWZpbmUgRVRIRVJfVFhfQ1RMX0VOVU5ERVJfT0ZTVAkJCQkoOCkKKyNkZWZpbmUgRVRIRVJfVFhfQ1RMX0VOVU5ERVJfTVNLCQkJCSgweDEwMCkKKyNkZWZpbmUgRVRIRVJfVFhfQ1RMX0VORVhERUZFUl9PRlNUCQkJCSg5KQorI2RlZmluZSBFVEhFUl9UWF9DVExfRU5FWERFRkVSX01TSwkJCQkoMHgyMDApCisjZGVmaW5lIEVUSEVSX1RYX0NUTF9FTkxDQVJSX09GU1QJCQkJKDEwKQorI2RlZmluZSBFVEhFUl9UWF9DVExfRU5MQ0FSUl9NU0sJCQkJKDB4NDAwKQorI2RlZmluZSBFVEhFUl9UWF9DVExfRU5FWENPTExfT0ZTVAkJCQkoMTEpCisjZGVmaW5lIEVUSEVSX1RYX0NUTF9FTkVYQ09MTF9NU0sJCQkJKDB4ODAwKQorI2RlZmluZSBFVEhFUl9UWF9DVExfRU5MQVRFQ09MTF9PRlNUCQkJCSgxMikKKyNkZWZpbmUgRVRIRVJfVFhfQ1RMX0VOTEFURUNPTExfTVNLCQkJCSgweDEwMDApCisjZGVmaW5lIEVUSEVSX1RYX0NUTF9FTlRYUEFSX09GU1QJCQkJKDEzKQorI2RlZmluZSBFVEhFUl9UWF9DVExfRU5UWFBBUl9NU0sJCQkJKDB4MjAwMCkKKyNkZWZpbmUgRVRIRVJfVFhfQ1RMX0VOQ09NUF9PRlNUCQkJCSgxNCkKKyNkZWZpbmUgRVRIRVJfVFhfQ1RMX0VOQ09NUF9NU0sJCQkJCSgweDQwMDApCisKKyNkZWZpbmUgRVRIRVJfVFhfU1RBVChiYXNlKQkJCQkJCQkoRVRIRVIwMF9UWVBFIChiYXNlICsgMHhjKSkKKyNkZWZpbmUgRVRIRVJfVFhfU1RBVF9UWENPTExfT0ZTVAkJCQkoMCkKKyNkZWZpbmUgRVRIRVJfVFhfU1RBVF9UWENPTExfTVNLCQkJCSgweEYpCisjZGVmaW5lIEVUSEVSX1RYX1NUQVRfRVhDT0xMX09GU1QJCQkJKDQpCisjZGVmaW5lIEVUSEVSX1RYX1NUQVRfRVhDT0xMX01TSwkJCQkoMHgxMCkKKyNkZWZpbmUgRVRIRVJfVFhfU1RBVF9UWERFRkVSX09GU1QJCQkJKDUpCisjZGVmaW5lIEVUSEVSX1RYX1NUQVRfVFhERUZFUl9NU0sJCQkJKDB4MjApCisjZGVmaW5lIEVUSEVSX1RYX1NUQVRfUEFVU0VEX09GU1QJCQkJKDYpCisjZGVmaW5lIEVUSEVSX1RYX1NUQVRfUEFVU0VEX01TSwkJCQkoMHg0MCkKKyNkZWZpbmUgRVRIRVJfVFhfU1RBVF9JTlRUWF9PRlNUCQkJCSg3KQorI2RlZmluZSBFVEhFUl9UWF9TVEFUX0lOVFRYX01TSwkJCQkJKDB4ODApCisjZGVmaW5lIEVUSEVSX1RYX1NUQVRfVU5ERVJfT0ZTVAkJCQkoOCkKKyNkZWZpbmUgRVRIRVJfVFhfU1RBVF9VTkRFUl9NU0sJCQkJCSgweDEwMCkKKyNkZWZpbmUgRVRIRVJfVFhfU1RBVF9FWERFRkVSX09GU1QJCQkJKDkpCisjZGVmaW5lIEVUSEVSX1RYX1NUQVRfRVhERUZFUl9NU0sJCQkJKDB4MjAwKQorI2RlZmluZSBFVEhFUl9UWF9TVEFUX0xDQVJSX09GU1QJCQkJKDEwKQorI2RlZmluZSBFVEhFUl9UWF9TVEFUX0xDQVJSX01TSwkJCQkJKDB4NDAwKQorI2RlZmluZSBFVEhFUl9UWF9TVEFUX1RYMTBTVEFUX09GU1QJCQkJKDExKQorI2RlZmluZSBFVEhFUl9UWF9TVEFUX1RYMTBTVEFUX01TSwkJCQkoMHg4MDApCisjZGVmaW5lIEVUSEVSX1RYX1NUQVRfTEFURUNPTExfT0ZTVAkJCQkoMTIpCisjZGVmaW5lIEVUSEVSX1RYX1NUQVRfTEFURUNPTExfTVNLCQkJCSgweDEwMDApCisjZGVmaW5lIEVUSEVSX1RYX1NUQVRfVFhQQVJfT0ZTVAkJCQkoMTMpCisjZGVmaW5lIEVUSEVSX1RYX1NUQVRfVFhQQVJfTVNLCQkJCQkoMHgyMDAwKQorI2RlZmluZSBFVEhFUl9UWF9TVEFUX0NPTVBfT0ZTVAkJCQkJKDE0KQorI2RlZmluZSBFVEhFUl9UWF9TVEFUX0NPTVBfTVNLCQkJCQkoMHg0MDAwKQorI2RlZmluZSBFVEhFUl9UWF9TVEFUX1RYSEFMVEVEX09GU1QJCQkJKDE1KQorI2RlZmluZSBFVEhFUl9UWF9TVEFUX1RYSEFMVEVEX01TSwkJCQkoMHg4MDAwKQorI2RlZmluZSBFVEhFUl9UWF9TVEFUX1NRRVJSX09GU1QJCQkJKDE2KQorI2RlZmluZSBFVEhFUl9UWF9TVEFUX1NRRVJSX01TSwkJCQkJKDB4MTAwMDApCisjZGVmaW5lIEVUSEVSX1RYX1NUQVRfVFhNQ0FTVF9PRlNUCQkJCSgxNykKKyNkZWZpbmUgRVRIRVJfVFhfU1RBVF9UWE1DQVNUX01TSwkJCQkoMHgyMDAwMCkKKyNkZWZpbmUgRVRIRVJfVFhfU1RBVF9UWEJDQVNUX09GU1QJCQkJKDE4KQorI2RlZmluZSBFVEhFUl9UWF9TVEFUX1RYQkNBU1RfTVNLCQkJCSgweDQwMDAwKQorI2RlZmluZSBFVEhFUl9UWF9TVEFUX1ZMQU5fT0ZTVAkJCQkJKDE5KQorI2RlZmluZSBFVEhFUl9UWF9TVEFUX1ZMQU5fTVNLCQkJCQkoMHg4MDAwMCkKKyNkZWZpbmUgRVRIRVJfVFhfU1RBVF9NQUNDX09GU1QJCQkJCSgyMCkKKyNkZWZpbmUgRVRIRVJfVFhfU1RBVF9NQUNDX01TSwkJCQkJKDB4MTAwMDAwKQorI2RlZmluZSBFVEhFUl9UWF9TVEFUX1RYUEFVU0VfT0ZTVAkJCQkoMjEpCisjZGVmaW5lIEVUSEVSX1RYX1NUQVRfVFhQQVVTRV9NU0sJCQkJKDB4MjAwMDAwKQorCisjZGVmaW5lIEVUSEVSX1JYX0NUTChiYXNlKQkJCQkJCQkoRVRIRVIwMF9UWVBFIChiYXNlICsgMHgxMCkpCisjZGVmaW5lIEVUSEVSX1JYX0NUTF9SWEVOX09GU1QJCQkJCSgwKQorI2RlZmluZSBFVEhFUl9SWF9DVExfUlhFTl9NU0sJCQkJCSgweDEpCisjZGVmaW5lIEVUSEVSX1JYX0NUTF9SWEhBTFRfT0ZTVAkJCQkoMSkKKyNkZWZpbmUgRVRIRVJfUlhfQ1RMX1JYSEFMVF9NU0sJCQkJCSgweDIpCisjZGVmaW5lIEVUSEVSX1JYX0NUTF9MT05HRU5fT0ZTVAkJCQkoMikKKyNkZWZpbmUgRVRIRVJfUlhfQ1RMX0xPTkdFTl9NU0sJCQkJCSgweDQpCisjZGVmaW5lIEVUSEVSX1JYX0NUTF9TSE9SVEVOX09GU1QJCQkJKDMpCisjZGVmaW5lIEVUSEVSX1JYX0NUTF9TSE9SVEVOX01TSwkJCQkoMHg4KQorI2RlZmluZSBFVEhFUl9SWF9DVExfU1RSSVBDUkNfT0ZTVAkJCQkoNCkKKyNkZWZpbmUgRVRIRVJfUlhfQ1RMX1NUUklQQ1JDX01TSwkJCQkoMHgxMCkKKyNkZWZpbmUgRVRIRVJfUlhfQ1RMX1BBU1NDVExfT0ZTVAkJCQkoNSkKKyNkZWZpbmUgRVRIRVJfUlhfQ1RMX1BBU1NDVExfTVNLCQkJCSgweDIwKQorI2RlZmluZSBFVEhFUl9SWF9DVExfSUdOT1JFQ1JDX09GU1QJCQkJKDYpCisjZGVmaW5lIEVUSEVSX1JYX0NUTF9JR05PUkVDUkNfTVNLCQkJCSgweDQwKQorI2RlZmluZSBFVEhFUl9SWF9DVExfRU5BTElHTl9PRlNUCQkJCSg4KQorI2RlZmluZSBFVEhFUl9SWF9DVExfRU5BTElHTl9NU0sJCQkJKDB4MTAwKQorI2RlZmluZSBFVEhFUl9SWF9DVExfRU5DUkNFUlJfT0ZTVAkJCQkoOSkKKyNkZWZpbmUgRVRIRVJfUlhfQ1RMX0VOQ1JDRVJSX01TSwkJCQkoMHgyMDApCisjZGVmaW5lIEVUSEVSX1JYX0NUTF9FTk9WRVJfT0ZTVAkJCQkoMTApCisjZGVmaW5lIEVUSEVSX1JYX0NUTF9FTk9WRVJfTVNLCQkJCQkoMHg0MDApCisjZGVmaW5lIEVUSEVSX1JYX0NUTF9FTkxPTkdFUlJfT0ZTVAkJCQkoMTEpCisjZGVmaW5lIEVUSEVSX1JYX0NUTF9FTkxPTkdFUlJfTVNLCQkJCSgweDgwMCkKKyNkZWZpbmUgRVRIRVJfUlhfQ1RMX0VOUlhQQVJfT0ZTVAkJCQkoMTMpCisjZGVmaW5lIEVUSEVSX1JYX0NUTF9FTlJYUEFSX01TSwkJCQkoMHgyMDAwKQorI2RlZmluZSBFVEhFUl9SWF9DVExfRU5HT09EX09GU1QJCQkJKDE0KQorI2RlZmluZSBFVEhFUl9SWF9DVExfRU5HT09EX01TSwkJCQkJKDB4NDAwMCkKKworI2RlZmluZSBFVEhFUl9SWF9TVEFUKGJhc2UpCQkJCQkJCShFVEhFUjAwX1RZUEUgKGJhc2UgKyAweDE0KSkKKyNkZWZpbmUgRVRIRVJfUlhfU1RBVF9MRU5FUlJfT0ZTVAkJCQkoNCkKKyNkZWZpbmUgRVRIRVJfUlhfU1RBVF9MRU5FUlJfTVNLCQkJCSgweDEwKQorI2RlZmluZSBFVEhFUl9SWF9TVEFUX0NUTFJFQ0RfT0ZTVAkJCQkoNSkKKyNkZWZpbmUgRVRIRVJfUlhfU1RBVF9DVExSRUNEX01TSwkJCQkoMHgyMCkKKyNkZWZpbmUgRVRIRVJfUlhfU1RBVF9JTlRSWF9PRlNUCQkJCSg2KQorI2RlZmluZSBFVEhFUl9SWF9TVEFUX0lOVFJYX01TSwkJCQkJKDB4NDApCisjZGVmaW5lIEVUSEVSX1JYX1NUQVRfUlgxMFNUQVRfT0ZTVAkJCQkoNykKKyNkZWZpbmUgRVRIRVJfUlhfU1RBVF9SWDEwU1RBVF9NU0sJCQkJKDB4ODApCisjZGVmaW5lIEVUSEVSX1JYX1NUQVRfQUxJR05FUlJfT0ZTVAkJCQkoOCkKKyNkZWZpbmUgRVRIRVJfUlhfU1RBVF9BTElHTkVSUl9NU0sJCQkJKDB4MTAwKQorI2RlZmluZSBFVEhFUl9SWF9TVEFUX0NSQ0VSUl9PRlNUCQkJCSg5KQorI2RlZmluZSBFVEhFUl9SWF9TVEFUX0NSQ0VSUl9NU0sJCQkJKDB4MjAwKQorI2RlZmluZSBFVEhFUl9SWF9TVEFUX09WRVJGTE9XX09GU1QJCQkJKDEwKQorI2RlZmluZSBFVEhFUl9SWF9TVEFUX09WRVJGTE9XX01TSwkJCQkoMHg0MDApCisjZGVmaW5lIEVUSEVSX1JYX1NUQVRfTE9OR0VSUl9PRlNUCQkJCSgxMSkKKyNkZWZpbmUgRVRIRVJfUlhfU1RBVF9MT05HRVJSX01TSwkJCQkoMHg4MDApCisjZGVmaW5lIEVUSEVSX1JYX1NUQVRfUlhQQVJfT0ZTVAkJCQkoMTMpCisjZGVmaW5lIEVUSEVSX1JYX1NUQVRfUlhQQVJfTVNLCQkJCQkoMHgyMDAwKQorI2RlZmluZSBFVEhFUl9SWF9TVEFUX0dPT0RfT0ZTVAkJCQkJKDE0KQorI2RlZmluZSBFVEhFUl9SWF9TVEFUX0dPT0RfTVNLCQkJCQkoMHg0MDAwKQorI2RlZmluZSBFVEhFUl9SWF9TVEFUX1JYSEFMVEVEX09GU1QJCQkJKDE1KQorI2RlZmluZSBFVEhFUl9SWF9TVEFUX1JYSEFMVEVEX01TSwkJCQkoMHg4MDAwKQorI2RlZmluZSBFVEhFUl9SWF9TVEFUX1JYTUNBU1RfT0ZTVAkJCQkoMTcpCisjZGVmaW5lIEVUSEVSX1JYX1NUQVRfUlhNQ0FTVF9NU0sJCQkJKDB4MTAwMDApCisjZGVmaW5lIEVUSEVSX1JYX1NUQVRfUlhCQ0FTVF9PRlNUCQkJCSgxOCkKKyNkZWZpbmUgRVRIRVJfUlhfU1RBVF9SWEJDQVNUX01TSwkJCQkoMHgyMDAwMCkKKyNkZWZpbmUgRVRIRVJfUlhfU1RBVF9SWFZMQU5fT0ZTVAkJCQkoMTkpCisjZGVmaW5lIEVUSEVSX1JYX1NUQVRfUlhWTEFOX01TSwkJCQkoMHg0MDAwMCkKKyNkZWZpbmUgRVRIRVJfUlhfU1RBVF9SWFBBVVNFX09GU1QJCQkJKDIwKQorI2RlZmluZSBFVEhFUl9SWF9TVEFUX1JYUEFVU0VfTVNLCQkJCSgweDgwMDAwKQorI2RlZmluZSBFVEhFUl9SWF9TVEFUX0FSQ1NUQVRVU19PRlNUCQkJCSgyMSkKKyNkZWZpbmUgRVRIRVJfUlhfU1RBVF9BUkNTVEFUVVNfTVNLCQkJCSgweEYwMDAwMCkKKyNkZWZpbmUgRVRIRVJfUlhfU1RBVF9BUkNFTlRfT0ZTVAkJCQkoMjUpCisjZGVmaW5lIEVUSEVSX1JYX1NUQVRfQVJDRU5UX01TSwkJCQkoMHgxRjAwMDAwMCkKKworI2RlZmluZSBFVEhFUl9NRF9EQVRBKGJhc2UpCQkJCQkJCShFVEhFUjAwX1RZUEUgKGJhc2UgKyAweDE4KSkKKworI2RlZmluZSBFVEhFUl9NRF9DQShiYXNlKQkJCQkJCQkJKEVUSEVSMDBfVFlQRSAoYmFzZSArIDB4MWMpKQorI2RlZmluZSBFVEhFUl9NRF9DQV9BRERSX09GU1QJCQkJCSgwKQorI2RlZmluZSBFVEhFUl9NRF9DQV9BRERSX01TSwkJCQkJKDB4MUYpCisjZGVmaW5lIEVUSEVSX01EX0NBX1BIWV9PRlNUCQkJCQkoNSkKKyNkZWZpbmUgRVRIRVJfTURfQ0FfUEhZX01TSwkJCQkJKDB4M0UwKQorI2RlZmluZSBFVEhFUl9NRF9DQV9XUl9PRlNUCQkJCQkoMTApCisjZGVmaW5lIEVUSEVSX01EX0NBX1dSX01TSwkJCQkJKDB4NDAwKQorI2RlZmluZSBFVEhFUl9NRF9DQV9CVVNZX09GU1QJCQkJCSgxMSkKKyNkZWZpbmUgRVRIRVJfTURfQ0FfQlVTWV9NU0sJCQkJCSgweDgwMCkKKyNkZWZpbmUgRVRIRVJfTURfQ0FfUFJFU1VQUF9PRlNUCQkJCSgxMikKKyNkZWZpbmUgRVRIRVJfTURfQ0FfUFJFU1VQUF9NU0sJCQkJCSgweDEwMDApCisKKyNkZWZpbmUgRVRIRVJfQVJDX0FEUihiYXNlKQkgICAgICAoRVRIRVIwMF9UWVBFIChiYXNlICsgMHgxNjApKQorI2RlZmluZSBFVEhFUl9BUkNfQURSX0FSQ19MT0NfT0ZTVAkJCQkoMikKKyNkZWZpbmUgRVRIRVJfQVJDX0FEUl9BUkNfTE9DX01TSwkJCQkoMHhGRkMpCisKKyNkZWZpbmUgRVRIRVJfQVJDX0RBVEEoYmFzZSkgIChFVEhFUjAwX1RZUEUgKGJhc2UgKyAweDM2NCkpCisKKyNkZWZpbmUgRVRIRVJfQVJDX0VOQShiYXNlKSAgIChFVEhFUjAwX1RZUEUgKGJhc2UgKyAweDI4KSkKKyNkZWZpbmUgRVRIRVJfQVJDX0VOQV9NU0sJCQkJCSgweDFGRkZGRikKKworI2RlZmluZSBFVEhFUl9QUk9NX0NUTChiYXNlKQkJCQkJCQkoRVRIRVIwMF9UWVBFIChiYXNlICsgMHgyYykpCisjZGVmaW5lIEVUSEVSX1BST01fQ1RMX1BST01fQUREUl9PRlNUCQkJKDApCisjZGVmaW5lIEVUSEVSX1BST01fQ1RMX1BST01fQUREUl9NU0sJCQkoMHgzRikKKyNkZWZpbmUgRVRIRVJfUFJPTV9DVExfT1BDT0RFX09GU1QJCQkJKDEzKQorI2RlZmluZSBFVEhFUl9QUk9NX0NUTF9PUENPREVfTVNLCQkJCSgweDYwMDApCisjZGVmaW5lIEVUSEVSX1BST01fQ1RMX09QQ09ERV9SRUFEX01TSwkJCSgweDQwMDApCisjZGVmaW5lIEVUSEVSX1BST01fQ1RMX09QQ09ERV9XUklURV9NU0sJCQkoMHgyMDAwKQorI2RlZmluZSBFVEhFUl9QUk9NX0NUTF9PUENPREVfRVJBU0VfTVNLCQkJKDB4NjAwMCkKKyNkZWZpbmUgRVRIRVJfUFJPTV9DVExfRU5BQkxFX01TSwkJCQkoMHgwMDMwKQorI2RlZmluZSBFVEhFUl9QUk9NX0NUTF9ESVNBQkxFX01TSwkJCQkoMHgwMDAwKQorI2RlZmluZSBFVEhFUl9QUk9NX0NUTF9CVVNZX09GU1QJCQkJKDE1KQorI2RlZmluZSBFVEhFUl9QUk9NX0NUTF9CVVNZX01TSwkJCQkJKDB4ODAwMCkKKworI2RlZmluZSBFVEhFUl9QUk9NX0RBVEEoYmFzZSkJCQkJCQkJKEVUSEVSMDBfVFlQRSAoYmFzZSArIDB4MzApKQorCisjZGVmaW5lIEVUSEVSX01JU1NfQ05UKGJhc2UpCQkJCQkJCShFVEhFUjAwX1RZUEUgKGJhc2UgKyAweDNjKSkKKyNkZWZpbmUgRVRIRVJfTUlTU19DTlRfQ09VTlRfT0ZTVAkJCQkoMCkKKyNkZWZpbmUgRVRIRVJfTUlTU19DTlRfQ09VTlRfTVNLCQkJCSgweEZGRkYpCisKKyNkZWZpbmUgRVRIRVJfQ05UREFUQShiYXNlKQkJCQkJCQkoRVRIRVIwMF9UWVBFIChiYXNlICsgMHg4MCkpCisKKyNkZWZpbmUgRVRIRVJfQ05UQUNDKGJhc2UpCQkJCQkJCShFVEhFUjAwX1RZUEUgKGJhc2UgKyAweDg0KSkKKyNkZWZpbmUgRVRIRVJfQ05UQUNDX0FERFJfT0ZTVAkJCQkJKDApCisjZGVmaW5lIEVUSEVSX0NOVEFDQ19BRERSX01TSwkJCQkJKDB4RkYpCisjZGVmaW5lIEVUSEVSX0NOVEFDQ19XUlJETl9PRlNUCQkJCQkoOCkKKyNkZWZpbmUgRVRIRVJfQ05UQUNDX1dSUkROX01TSwkJCQkJKDB4MTAwKQorI2RlZmluZSBFVEhFUl9DTlRBQ0NfQ0xFQVJfT0ZTVAkJCQkJKDkpCisjZGVmaW5lIEVUSEVSX0NOVEFDQ19DTEVBUl9NU0sJCQkJCSgweDIwMCkKKworI2RlZmluZSBFVEhFUl9UWFJNSU5URU4oYmFzZSkJCQkJCQkJKEVUSEVSMDBfVFlQRSAoYmFzZSArIDB4ODgpKQorI2RlZmluZSBFVEhFUl9UWFJNSU5URU5fTVNLCQkJCQkJKDB4M0ZGRkZGRkYpCisKKyNkZWZpbmUgRVRIRVJfUlhSTUlOVEVOKGJhc2UpCQkJCQkJCShFVEhFUjAwX1RZUEUgKGJhc2UgKyAweDhDKSkKKyNkZWZpbmUgRVRIRVJfUlhSTUlOVEVOX01TSwkJCQkJCSgweEZGRkZGRikKKworLyoKKyoJUk1PTiBSZWdpc3RlcnMKKyovCisjZGVmaW5lCQlSTU9OX0NPTExJU0lPTjAJCQkJCQkweDAKKyNkZWZpbmUJCVJNT05fQ09MTElTSU9OMQkJCQkJCTB4MQorI2RlZmluZQkJUk1PTl9DT0xMSVNJT04yCQkJCQkJMHgyCisjZGVmaW5lCQlSTU9OX0NPTExJU0lPTjMJCQkJCQkweDMKKyNkZWZpbmUJCVJNT05fQ09MTElTSU9ONAkJCQkJCTB4NAorI2RlZmluZQkJUk1PTl9DT0xMSVNJT041CQkJCQkJMHg1CisjZGVmaW5lCQlSTU9OX0NPTExJU0lPTjYJCQkJCQkweDYKKyNkZWZpbmUJCVJNT05fQ09MTElTSU9ONwkJCQkJCTB4NworI2RlZmluZQkJUk1PTl9DT0xMSVNJT044CQkJCQkJMHg4CisjZGVmaW5lCQlSTU9OX0NPTExJU0lPTjkJCQkJCQkweDkKKyNkZWZpbmUJCVJNT05fQ09MTElTSU9OMTAJCQkJCTB4YQorI2RlZmluZQkJUk1PTl9DT0xMSVNJT04xMQkJCQkJMHhiCisjZGVmaW5lCQlSTU9OX0NPTExJU0lPTjEyCQkJCQkweGMKKyNkZWZpbmUJCVJNT05fQ09MTElTSU9OMTMJCQkJCTB4ZAorI2RlZmluZQkJUk1PTl9DT0xMSVNJT04xNAkJCQkJMHhlCisjZGVmaW5lCQlSTU9OX0NPTExJU0lPTjE1CQkJCQkweGYKKyNkZWZpbmUJCVJNT05fQ09MTElTSU9OMTYJCQkJCTB4MTAKKyNkZWZpbmUJCVJNT05fRlJBTUVTX1dJVEhfREVGRVJSRURfWE1JU1NJT05TCTB4MTEKKyNkZWZpbmUJCVJNT05fTEFURV9DT0xMSVNJT05TCQkJCTB4MTIKKyNkZWZpbmUJCVJNT05fRlJBTUVTX0xPU1RfRFVFX1RPX01BQ19YTUlUCTB4MTMKKyNkZWZpbmUJCVJNT05fQ0FSUklFUl9TRU5TRV9FUlJPUlMJCQkweDE0CisjZGVmaW5lCQlSTU9OX0ZSQU1FU19XSVRIX0VYQ0VTU0lWRV9ERUZFUkFMCTB4MTUKKyNkZWZpbmUJCVJNT05fVU5JQ0FTVF9GUkFNRVNfVFJBTlNNSVRURURfT0sJMHgxNgorI2RlZmluZQkJUk1PTl9NVUxUSUNBU1RfRlJBTUVTX1hNSVRURURfT0sJMHgxNworI2RlZmluZQkJUk1PTl9CUk9BRENBU1RfRlJBTUVTX1hNSVRURURfT0sJMHgxOAorI2RlZmluZQkJUk1PTl9TUUVfVEVTVF9FUlJPUlMJCQkJMHgxOQorI2RlZmluZQkJUk1PTl9QQVVTRV9NQUNDVFJMX0ZSQU1FU19YTUlUVEVECTB4MUEKKyNkZWZpbmUJCVJNT05fTUFDQ1RSTF9GUkFNRVNfWE1JVFRFRAkJCTB4MUIKKyNkZWZpbmUJCVJNT05fVkxBTl9GUkFNRVNfWE1JVFRFRAkJCTB4MUMKKyNkZWZpbmUJCVJNT05fT0NURVRTX1hNSVRURURfT0sJCQkJMHgxRAorI2RlZmluZQkJUk1PTl9PQ1RFVFNfWE1JVFRFRF9PS19ISQkJCTB4MUUKKworI2RlZmluZQkJUk1PTl9SWF9QQUNLRVRfU0laRVMwCQkJCTB4NDAKKyNkZWZpbmUJCVJNT05fUlhfUEFDS0VUX1NJWkVTMQkJCQkweDQxCisjZGVmaW5lCQlSTU9OX1JYX1BBQ0tFVF9TSVpFUzIJCQkJMHg0MgorI2RlZmluZQkJUk1PTl9SWF9QQUNLRVRfU0laRVMzCQkJCTB4NDMKKyNkZWZpbmUJCVJNT05fUlhfUEFDS0VUX1NJWkVTNAkJCQkweDQ0CisjZGVmaW5lCQlSTU9OX1JYX1BBQ0tFVF9TSVpFUzUJCQkJMHg0NQorI2RlZmluZQkJUk1PTl9SWF9QQUNLRVRfU0laRVM2CQkJCTB4NDYKKyNkZWZpbmUJCVJNT05fUlhfUEFDS0VUX1NJWkVTNwkJCQkweDQ3CisjZGVmaW5lCQlSTU9OX0ZSQU1FX0NIRUNLX1NFUVVFTkNFX0VSUk9SUwkweDQ4CisjZGVmaW5lCQlSTU9OX0FMSUdOTUVOVF9FUlJPUlMJCQkJMHg0OQorI2RlZmluZQkJUk1PTl9GUkFHTUVOVFMJCQkJCQkweDRBCisjZGVmaW5lCQlSTU9OX0pBQkJFUlMJCQkJCQkweDRCCisjZGVmaW5lCQlSTU9OX0ZSQU1FU19MT1NUX1RPX0lOVE1BQ1JDVkVSUgkweDRDCisjZGVmaW5lCQlSTU9OX1VOSUNBU1RfRlJBTUVTX1JDVkRfT0sJCQkweDRECisjZGVmaW5lCQlSTU9OX01VTFRJQ0FTVF9GUkFNRVNfUkNWRF9PSwkJMHg0RQorI2RlZmluZQkJUk1PTl9CUk9BRENBU1RfRlJBTUVTX1JDVkRfT0sJCTB4NEYKKyNkZWZpbmUJCVJNT05fSU5fUkFOR0VfTEVOR1RIX0VSUk9SUwkJCTB4NTAKKyNkZWZpbmUJCVJNT05fT1VUX09GX1JBTkdFX0xFTkdUSF9FUlJPUlMJCTB4NTEKKyNkZWZpbmUJCVJNT05fVkxBTl9GUkFNRVNfUkNWRAkJCQkweDUyCisjZGVmaW5lCQlSTU9OX1BBVVNFX01BQ19DVFJMX0ZSQU1FU19SQ1ZECQkweDUzCisjZGVmaW5lCQlSTU9OX01BQ19DVFJMX0ZSQU1FU19SQ1ZECQkJMHg1NAorI2RlZmluZQkJUk1PTl9PQ1RFVFNfUkNWRF9PSwkJCQkJMHg1NQorI2RlZmluZQkJUk1PTl9PQ1RFVFNfUkNWRF9PS19ISQkJCQkweDU2CisjZGVmaW5lCQlSTU9OX09DVEVUU19SQ1ZEX09USEVSCQkJCTB4NTcKKyNkZWZpbmUJCVJNT05fT0NURVRTX1JDVkRfT1RIRVJfSEkJCQkweDU4CisKKyNlbmRpZiAvKiBfX0VUSEVSMDBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvZXhjYWxpYnVyLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi9leGNhbGlidXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzkxZGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvZXhjYWxpYnVyLmgKQEAgLTAsMCArMSw5MSBAQAorLyogbWVnYWZ1bmN0aW9uIHdpemFyZDogJUFSTS1CYXNlZCBFeGNhbGlidXIlCisgICBHRU5FUkFUSU9OOiBTVEFOREFSRAorICAgVkVSU0lPTjogV00xLjAKKyAgIE1PRFVMRTogQVJNLUJhc2VkIEV4Y2FsaWJ1cgorICAgUFJPSkVDVDogZXhjYWxpYnVyCisgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIEZpbGUgTmFtZTogdjpcZW1iZWRkZWRcbGludXhcYm9vdGxkclxleGNhbGlidXIuaAorICAgTWVnYWZ1bmN0aW9uIE5hbWUocyk6IEFSTS1CYXNlZCBFeGNhbGlidXIKKyAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgIFRISVMgSVMgQSBXSVpBUkQtR0VORVJBVEVEIEZJTEUuIERPIE5PVCBFRElUIFRISVMgRklMRSEKKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZglFWENBTElCVVJfSF9JTkNMVURFRAorI2RlZmluZQlFWENBTElCVVJfSF9JTkNMVURFRAorCisjZGVmaW5lIEVYQ19ERUZJTkVfUFJPQ0VTU09SX0xJVFRMRV9FTkRJQU4KKyNkZWZpbmUgRVhDX0RFRklORV9CT09UX0ZST01fRkxBU0gKKworI2RlZmluZQlFWENfSU5QVVRfQ0xLX0ZSRVFVRU5DWSAoNTAwMDAwMDApCisjZGVmaW5lCUVYQ19BSEIxX0NMS19GUkVRVUVOQ1kgKDE1MDAwMDAwMCkKKyNkZWZpbmUJRVhDX0FIQjJfQ0xLX0ZSRVFVRU5DWSAoNzUwMDAwMDApCisjZGVmaW5lCUVYQ19TRFJBTV9DTEtfRlJFUVVFTkNZICg3NTAwMDAwMCkKKworLyogUmVnaXN0ZXJzIEJsb2NrICovCisjZGVmaW5lCUVYQ19SRUdJU1RFUlNfQkFTRSAoMHg3ZmZmYzAwMCkKKyNkZWZpbmUJRVhDX01PREVfQ1RSTDAwX0JBU0UgKEVYQ19SRUdJU1RFUlNfQkFTRSArIDB4MDAwKQorI2RlZmluZQlFWENfSU9fQ1RSTDAwX0JBU0UgKEVYQ19SRUdJU1RFUlNfQkFTRSArIDB4MDQwKQorI2RlZmluZQlFWENfTU1BUDAwX0JBU0UgKEVYQ19SRUdJU1RFUlNfQkFTRSArIDB4MDgwKQorI2RlZmluZQlFWENfUExEX0NPTkZJRzAwX0JBU0UgKEVYQ19SRUdJU1RFUlNfQkFTRSArIDB4MTQwKQorI2RlZmluZQlFWENfVElNRVIwMF9CQVNFIChFWENfUkVHSVNURVJTX0JBU0UgKyAweDIwMCkKKyNkZWZpbmUJRVhDX0lOVF9DVFJMMDBfQkFTRSAoRVhDX1JFR0lTVEVSU19CQVNFICsgMHhjMDApCisjZGVmaW5lCUVYQ19DTE9DS19DVFJMMDBfQkFTRSAoRVhDX1JFR0lTVEVSU19CQVNFICsgMHgzMDApCisjZGVmaW5lCUVYQ19XQVRDSERPRzAwX0JBU0UgKEVYQ19SRUdJU1RFUlNfQkFTRSArIDB4YTAwKQorI2RlZmluZQlFWENfVUFSVDAwX0JBU0UgKEVYQ19SRUdJU1RFUlNfQkFTRSArIDB4MjgwKQorI2RlZmluZQlFWENfRUJJMDBfQkFTRSAoRVhDX1JFR0lTVEVSU19CQVNFICsgMHgzODApCisjZGVmaW5lCUVYQ19TRFJBTTAwX0JBU0UgKEVYQ19SRUdJU1RFUlNfQkFTRSArIDB4NDAwKQorI2RlZmluZQlFWENfQUhCMTJfQlJJREdFX0NUUkwwMF9CQVNFIChFWENfUkVHSVNURVJTX0JBU0UgKyAweDgwMCkKKyNkZWZpbmUJRVhDX1BMRF9TVFJJUEVfQlJJREdFX0NUUkwwMF9CQVNFIChFWENfUkVHSVNURVJTX0JBU0UgKyAweDEwMCkKKyNkZWZpbmUJRVhDX1NUUklQRV9QTERfQlJJREdFX0NUUkwwMF9CQVNFIChFWENfUkVHSVNURVJTX0JBU0UgKyAweDEwMCkKKworI2RlZmluZQlFWENfUkVHSVNURVJTX1NJWkUgKDB4MDAwMDQwMDApCisKKy8qIEVCSSBCbG9jayhzKSAqLworI2RlZmluZQlFWENfRUJJX0JMT0NLMF9CQVNFICgweDQwMDAwMDAwKQorI2RlZmluZQlFWENfRUJJX0JMT0NLMF9TSVpFICgweDAwNDAwMDAwKQorI2RlZmluZQlFWENfRUJJX0JMT0NLMF9XSURUSCAoOCkKKyNkZWZpbmUJRVhDX0VCSV9CTE9DSzBfTk9OX0NBQ0hFQUJMRQorI2RlZmluZQlFWENfRUJJX0JMT0NLMV9CQVNFICgweDQwNDAwMDAwKQorI2RlZmluZQlFWENfRUJJX0JMT0NLMV9TSVpFICgweDAwNDAwMDAwKQorI2RlZmluZQlFWENfRUJJX0JMT0NLMV9XSURUSCAoMTYpCisjZGVmaW5lCUVYQ19FQklfQkxPQ0sxX05PTl9DQUNIRUFCTEUKKyNkZWZpbmUJRVhDX0VCSV9CTE9DSzJfQkFTRSAoMHg0MDgwMDAwMCkKKyNkZWZpbmUJRVhDX0VCSV9CTE9DSzJfU0laRSAoMHgwMDQwMDAwMCkKKyNkZWZpbmUJRVhDX0VCSV9CTE9DSzJfV0lEVEggKDE2KQorI2RlZmluZQlFWENfRUJJX0JMT0NLMl9OT05fQ0FDSEVBQkxFCisjZGVmaW5lCUVYQ19FQklfQkxPQ0szX0JBU0UgKDB4NDBjMDAwMDApCisjZGVmaW5lCUVYQ19FQklfQkxPQ0szX1NJWkUgKDB4MDA0MDAwMDApCisjZGVmaW5lCUVYQ19FQklfQkxPQ0szX1dJRFRIICgxNikKKyNkZWZpbmUJRVhDX0VCSV9CTE9DSzNfTk9OX0NBQ0hFQUJMRQorCisvKiBTRFJBTSBCbG9jayhzKSAqLworI2RlZmluZQlFWENfU0RSQU1fQkxPQ0swX0JBU0UgKDB4MDAwMDAwMDApCisjZGVmaW5lCUVYQ19TRFJBTV9CTE9DSzBfU0laRSAoMHgwNDAwMDAwMCkKKyNkZWZpbmUJRVhDX1NEUkFNX0JMT0NLMF9XSURUSCAoMzIpCisjZGVmaW5lCUVYQ19TRFJBTV9CTE9DSzFfQkFTRSAoMHgwNDAwMDAwMCkKKyNkZWZpbmUJRVhDX1NEUkFNX0JMT0NLMV9TSVpFICgweDA0MDAwMDAwKQorI2RlZmluZQlFWENfU0RSQU1fQkxPQ0sxX1dJRFRIICgzMikKKworLyogU2luZ2xlIFBvcnQgU1JBTSBCbG9jayhzKSAqLworI2RlZmluZQlFWENfU1BTUkFNX0JMT0NLMF9CQVNFICgweDA4MDAwMDAwKQorI2RlZmluZQlFWENfU1BTUkFNX0JMT0NLMF9TSVpFICgweDAwMDIwMDAwKQorI2RlZmluZQlFWENfU1BTUkFNX0JMT0NLMV9CQVNFICgweDA4MDIwMDAwKQorI2RlZmluZQlFWENfU1BTUkFNX0JMT0NLMV9TSVpFICgweDAwMDIwMDAwKQorCisvKiBQTEQgQmxvY2socykgKi8KKyNkZWZpbmUJRVhDX1BMRF9CTE9DSzBfQkFTRSAoMHg4MDAwMDAwMCkKKyNkZWZpbmUJRVhDX1BMRF9CTE9DSzBfU0laRSAoMHgwMDAwNDAwMCkKKyNkZWZpbmUJRVhDX1BMRF9CTE9DSzBfTk9OX0NBQ0hFQUJMRQorI2RlZmluZQlFWENfUExEX0JMT0NLMV9CQVNFICgweGYwMDAwMDApCisjZGVmaW5lCUVYQ19QTERfQkxPQ0sxX1NJWkUgKDB4MDAwMDQwMDApCisjZGVmaW5lCUVYQ19QTERfQkxPQ0sxX05PTl9DQUNIRUFCTEUKKyNkZWZpbmUJRVhDX1BMRF9CTE9DSzJfQkFTRSAoMHg4MDAwODAwMCkKKyNkZWZpbmUJRVhDX1BMRF9CTE9DSzJfU0laRSAoMHgwMDAwNDAwMCkKKyNkZWZpbmUJRVhDX1BMRF9CTE9DSzJfTk9OX0NBQ0hFQUJMRQorI2RlZmluZQlFWENfUExEX0JMT0NLM19CQVNFICgweDgwMDBjMDAwKQorI2RlZmluZQlFWENfUExEX0JMT0NLM19TSVpFICgweDAwMDA0MDAwKQorI2RlZmluZQlFWENfUExEX0JMT0NLM19OT05fQ0FDSEVBQkxFCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvaGFyZHdhcmUuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL2hhcmR3YXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk5MmMyOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL2hhcmR3YXJlLmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTAvaGFyZHdhcmUuaAorICoKKyAqICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGhhcmR3YXJlIGRlZmluaXRpb25zIG9mIHRoZSBJbnRlZ3JhdG9yLgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTkgQVJNIExpbWl0ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxIEFsdGVyYSBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworI2lmbmRlZiBfX0FTTV9BUkNIX0hBUkRXQVJFX0gKKyNkZWZpbmUgX19BU01fQVJDSF9IQVJEV0FSRV9ICisKKyNpbmNsdWRlIDxhc20vYXJjaC9wbGF0Zm9ybS5oPgorCisvKgorICogV2hlcmUgaW4gdmlydHVhbCBtZW1vcnkgdGhlIElPIGRldmljZXMgKHRpbWVycywgc3lzdGVtIGNvbnRyb2xsZXJzCisgKiBhbmQgc28gb24pCisgKi8KKyNkZWZpbmUgSU9fQkFTRQkJCTB4ZjAwMDAwMDAgICAgICAgICAgICAgICAgIC8vIFZBIG9mIElPIAorI2RlZmluZSBJT19TSVpFCQkJMHgxMDAwMDAwMCAgICAgICAgICAgICAgICAgLy8gSG93IG11Y2g/CisjZGVmaW5lIElPX1NUQVJUCQlFWENfUkVHSVNURVJTX0JBU0UgICAgICAgICAgICAgIC8vIFBBIG9mIElPCisvKiBtYWNybyB0byBnZXQgYXQgSU8gc3BhY2Ugd2hlbiBydW5uaW5nIHZpcnR1YWxseSAqLworI2RlZmluZSBJT19BRERSRVNTKHgpICgoeCkgfCAweGYwMDAwMDAwKSAKKworI2RlZmluZSBGTEFTSF9WQkFTRSAgICAgICAgICAgICAweEZFMDAwMDAwCisjZGVmaW5lIEZMQVNIX1NJWkUgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgRkxBU0hfU1RBUlQgICAgICAgICAgICAgRVhDX0VCSV9CTE9DSzBfQkFTRQorI2RlZmluZSBGTEFTSF9WQUREUih4KSAoKHgpfDB4RkUwMDAwMDApCisvKgorICogU2ltaWxhciB0byBhYm92ZSwgYnV0IGZvciBQQ0kgYWRkcmVzc2VzIChtZW1vcnksIElPLCBDb25maWcgYW5kIHRoZQorICogVjMgY2hpcCBpdHNlbGYpLiAgV0FSTklORzogdGhpcyBoYXMgdG8gbWlycm9yIGRlZmluaXRpb25zIGluIHBsYXRmb3JtLmgKKyAqLworI2lmIDAKKyNkZWZpbmUgUENJX01FTU9SWV9WQUREUiAgICAgICAgMHhlODAwMDAwMAorI2RlZmluZSBQQ0lfQ09ORklHX1ZBRERSICAgICAgICAweGVjMDAwMDAwCisjZGVmaW5lIFBDSV9WM19WQUREUiAgICAgICAgICAgIDB4ZWQwMDAwMDAKKyNkZWZpbmUgUENJX0lPX1ZBRERSICAgICAgICAgICAgMHhlZTAwMDAwMAorCisjZGVmaW5lIFBDSU9fQkFTRQkJUENJX0lPX1ZBRERSCisjZGVmaW5lIFBDSU1FTV9CQVNFCQlQQ0lfTUVNT1JZX1ZBRERSCisKKworI2RlZmluZSBwY2liaW9zX2Fzc2lnbl9hbGxfYnVzc2VzKCkJMQorCisjZGVmaW5lIFBDSUJJT1NfTUlOX0lPCQkweDYwMDAKKyNkZWZpbmUgUENJQklPU19NSU5fTUVNIAkweDAwMTAwMDAwCisjZW5kaWYKKworCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvaW50X2N0cmwwMC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvaW50X2N0cmwwMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzZWM4NjQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi9pbnRfY3RybDAwLmgKQEAgLTAsMCArMSwyODggQEAKKy8qCisgKiAgCisgKiAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSByZWdpc3RlciBkZWZpbml0aW9ucyBmb3IgdGhlIEV4Y2FsaWJ1cgorICogIFRpbWVyIFRJTUVSMDAuCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMSBBbHRlcmEgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2lmbmRlZiBfX0lOVF9DVFJMMDBfSAorI2RlZmluZSBfX0lOVF9DVFJMMDBfSAorCisjZGVmaW5lIElOVF9NUyhiYXNlX2FkZHIpIChJTlRfQ1RSTDAwX1RZUEUgKGJhc2VfYWRkciAgKyAweDAwICkpCisjZGVmaW5lIElOVF9NU19GQ19NU0sgKDB4MTAwMDApCisjZGVmaW5lIElOVF9NU19GQ19PRlNUICgxNikKKyNkZWZpbmUgSU5UX01TX00xX01TSyAoMHg4MDAwKQorI2RlZmluZSBJTlRfTVNfTTFfT0ZTVCAoMTUpCisjZGVmaW5lIElOVF9NU19NMF9NU0sgKDB4NDAwMCkKKyNkZWZpbmUgSU5UX01TX00wX09GU1QgKDE0KQorI2RlZmluZSBJTlRfTVNfQUVfTVNLICgweDIwMDApCisjZGVmaW5lIElOVF9NU19BRV9PRlNUICgxMykKKyNkZWZpbmUgSU5UX01TX1BFX01TSyAoMHgxMDAwKQorI2RlZmluZSBJTlRfTVNfUEVfT0ZTVCAoMTIpCisjZGVmaW5lIElOVF9NU19FRV9NU0sgKDB4MDgwMCkKKyNkZWZpbmUgSU5UX01TX0VFX09GU1QgKDExKQorI2RlZmluZSBJTlRfTVNfUFNfTVNLICgweDA0MDApCisjZGVmaW5lIElOVF9NU19QU19PRlNUICgxMCkKKyNkZWZpbmUgSU5UX01TX1QxX01TSyAoMHgwMjAwKQorI2RlZmluZSBJTlRfTVNfVDFfT0ZTVCAoOSkKKyNkZWZpbmUgSU5UX01TX1QwX01TSyAoMHgwMTAwKQorI2RlZmluZSBJTlRfTVNfVDBfT0ZTVCAoOCkKKyNkZWZpbmUgSU5UX01TX1VBX01TSyAoMHgwMDgwKQorI2RlZmluZSBJTlRfTVNfVUFfT0ZTVCAoNykKKyNkZWZpbmUgSU5UX01TX0lQX01TSyAoMHgwMDQwKQorI2RlZmluZSBJTlRfTVNfSVBfT0ZTVCAoNikKKyNkZWZpbmUgSU5UX01TX1A1X01TSyAoMHgwMDIwKQorI2RlZmluZSBJTlRfTVNfUDVfT0ZTVCAoNSkKKyNkZWZpbmUgSU5UX01TX1A0X01TSyAoMHgwMDEwKQorI2RlZmluZSBJTlRfTVNfUDRfT0ZTVCAoNCkKKyNkZWZpbmUgSU5UX01TX1AzX01TSyAoMHgwMDA4KQorI2RlZmluZSBJTlRfTVNfUDNfT0ZTVCAoMykKKyNkZWZpbmUgSU5UX01TX1AyX01TSyAoMHgwMDA0KQorI2RlZmluZSBJTlRfTVNfUDJfT0ZTVCAoMikKKyNkZWZpbmUgSU5UX01TX1AxX01TSyAoMHgwMDAyKQorI2RlZmluZSBJTlRfTVNfUDFfT0ZTVCAoMSkKKyNkZWZpbmUgSU5UX01TX1AwX01TSyAoMHgwMDAxKQorI2RlZmluZSBJTlRfTVNfUDBfT0ZTVCAoMCkKKworI2RlZmluZSBJTlRfTUMoYmFzZV9hZGRyKSAoSU5UX0NUUkwwMF9UWVBFIChiYXNlX2FkZHIgICsgMHgwNCApKQorI2RlZmluZSBJTlRfTUNfRkNfTVNLICgweDEwMDAwKQorI2RlZmluZSBJTlRfTUNfRkNfT0ZTVCAoMTYpCisjZGVmaW5lIElOVF9NQ19NMV9NU0sgKDB4ODAwMCkKKyNkZWZpbmUgSU5UX01DX00xX09GU1QgKDE1KQorI2RlZmluZSBJTlRfTUNfTTBfTVNLICgweDQwMDApCisjZGVmaW5lIElOVF9NQ19NMF9PRlNUICgxNCkKKyNkZWZpbmUgSU5UX01DX0FFX01TSyAoMHgyMDAwKQorI2RlZmluZSBJTlRfTUNfQUVfT0ZTVCAoMTMpCisjZGVmaW5lIElOVF9NQ19QRV9NU0sgKDB4MTAwMCkKKyNkZWZpbmUgSU5UX01DX1BFX09GU1QgKDEyKQorI2RlZmluZSBJTlRfTUNfRUVfTVNLICgweDA4MDApCisjZGVmaW5lIElOVF9NQ19FRV9PRlNUICgxMSkKKyNkZWZpbmUgSU5UX01DX1BTX01TSyAoMHgwNDAwKQorI2RlZmluZSBJTlRfTUNfUFNfT0ZTVCAoMTApCisjZGVmaW5lIElOVF9NQ19UMV9NU0sgKDB4MDIwMCkKKyNkZWZpbmUgSU5UX01DX1QxX09GU1QgKDkpCisjZGVmaW5lIElOVF9NQ19UMF9NU0sgKDB4MDEwMCkKKyNkZWZpbmUgSU5UX01DX1QwX09GU1QgKDgpCisjZGVmaW5lIElOVF9NQ19VQV9NU0sgKDB4MDA4MCkKKyNkZWZpbmUgSU5UX01DX1VBX09GU1QgKDcpCisjZGVmaW5lIElOVF9NQ19JUF9NU0sgKDB4MDA0MCkKKyNkZWZpbmUgSU5UX01DX0lQX09GU1QgKDYpCisjZGVmaW5lIElOVF9NQ19QNV9NU0sgKDB4MDAyMCkKKyNkZWZpbmUgSU5UX01DX1A1X09GU1QgKDUpCisjZGVmaW5lIElOVF9NQ19QNF9NU0sgKDB4MDAxMCkKKyNkZWZpbmUgSU5UX01DX1A0X09GU1QgKDQpCisjZGVmaW5lIElOVF9NQ19QM19NU0sgKDB4MDAwOCkKKyNkZWZpbmUgSU5UX01DX1AzX09GU1QgKDMpCisjZGVmaW5lIElOVF9NQ19QMl9NU0sgKDB4MDAwNCkKKyNkZWZpbmUgSU5UX01DX1AyX09GU1QgKDIpCisjZGVmaW5lIElOVF9NQ19QMV9NU0sgKDB4MDAwMikKKyNkZWZpbmUgSU5UX01DX1AxX09GU1QgKDEpCisjZGVmaW5lIElOVF9NQ19QMF9NU0sgKDB4MDAwMSkKKyNkZWZpbmUgSU5UX01DX1AwX09GU1QgKDApCisKKyNkZWZpbmUgSU5UX1NTKGJhc2VfYWRkcikgKElOVF9DVFJMMDBfVFlQRSAoYmFzZV9hZGRyICArIDB4MDggKSkKKyNkZWZpbmUgSU5UX1NTX0ZDX1NTSyAoMHg4MDAwKQorI2RlZmluZSBJTlRfU1NfRkNfT0ZTVCAoMTUpCisjZGVmaW5lIElOVF9TU19NMV9TU0sgKDB4ODAwMCkKKyNkZWZpbmUgSU5UX1NTX00xX09GU1QgKDE1KQorI2RlZmluZSBJTlRfU1NfTTBfU1NLICgweDQwMDApCisjZGVmaW5lIElOVF9TU19NMF9PRlNUICgxNCkKKyNkZWZpbmUgSU5UX1NTX0FFX1NTSyAoMHgyMDAwKQorI2RlZmluZSBJTlRfU1NfQUVfT0ZTVCAoMTMpCisjZGVmaW5lIElOVF9TU19QRV9TU0sgKDB4MTAwMCkKKyNkZWZpbmUgSU5UX1NTX1BFX09GU1QgKDEyKQorI2RlZmluZSBJTlRfU1NfRUVfU1NLICgweDA4MDApCisjZGVmaW5lIElOVF9TU19FRV9PRlNUICgxMSkKKyNkZWZpbmUgSU5UX1NTX1BTX1NTSyAoMHgwNDAwKQorI2RlZmluZSBJTlRfU1NfUFNfT0ZTVCAoMTApCisjZGVmaW5lIElOVF9TU19UMV9TU0sgKDB4MDIwMCkKKyNkZWZpbmUgSU5UX1NTX1QxX09GU1QgKDkpCisjZGVmaW5lIElOVF9TU19UMF9TU0sgKDB4MDEwMCkKKyNkZWZpbmUgSU5UX1NTX1QwX09GU1QgKDgpCisjZGVmaW5lIElOVF9TU19VQV9TU0sgKDB4MDA4MCkKKyNkZWZpbmUgSU5UX1NTX1VBX09GU1QgKDcpCisjZGVmaW5lIElOVF9TU19JUF9TU0sgKDB4MDA0MCkKKyNkZWZpbmUgSU5UX1NTX0lQX09GU1QgKDYpCisjZGVmaW5lIElOVF9TU19QNV9TU0sgKDB4MDAyMCkKKyNkZWZpbmUgSU5UX1NTX1A1X09GU1QgKDUpCisjZGVmaW5lIElOVF9TU19QNF9TU0sgKDB4MDAxMCkKKyNkZWZpbmUgSU5UX1NTX1A0X09GU1QgKDQpCisjZGVmaW5lIElOVF9TU19QM19TU0sgKDB4MDAwOCkKKyNkZWZpbmUgSU5UX1NTX1AzX09GU1QgKDMpCisjZGVmaW5lIElOVF9TU19QMl9TU0sgKDB4MDAwNCkKKyNkZWZpbmUgSU5UX1NTX1AyX09GU1QgKDIpCisjZGVmaW5lIElOVF9TU19QMV9TU0sgKDB4MDAwMikKKyNkZWZpbmUgSU5UX1NTX1AxX09GU1QgKDEpCisjZGVmaW5lIElOVF9TU19QMF9TU0sgKDB4MDAwMSkKKyNkZWZpbmUgSU5UX1NTX1AwX09GU1QgKDApCisKKyNkZWZpbmUgSU5UX1JTKGJhc2VfYWRkcikgKElOVF9DVFJMMDBfVFlQRSAoYmFzZV9hZGRyICArIDB4MEMgKSkKKyNkZWZpbmUgSU5UX1JTX0ZDX1JTSyAoMHgxMDAwMCkKKyNkZWZpbmUgSU5UX1JTX0ZDX09GU1QgKDE2KQorI2RlZmluZSBJTlRfUlNfTTFfUlNLICgweDgwMDApCisjZGVmaW5lIElOVF9SU19NMV9PRlNUICgxNSkKKyNkZWZpbmUgSU5UX1JTX00wX1JTSyAoMHg0MDAwKQorI2RlZmluZSBJTlRfUlNfTTBfT0ZTVCAoMTQpCisjZGVmaW5lIElOVF9SU19BRV9SU0sgKDB4MjAwMCkKKyNkZWZpbmUgSU5UX1JTX0FFX09GU1QgKDEzKQorI2RlZmluZSBJTlRfUlNfUEVfUlNLICgweDEwMDApCisjZGVmaW5lIElOVF9SU19QRV9PRlNUICgxMikKKyNkZWZpbmUgSU5UX1JTX0VFX1JTSyAoMHgwODAwKQorI2RlZmluZSBJTlRfUlNfRUVfT0ZTVCAoMTEpCisjZGVmaW5lIElOVF9SU19QU19SU0sgKDB4MDQwMCkKKyNkZWZpbmUgSU5UX1JTX1BTX09GU1QgKDEwKQorI2RlZmluZSBJTlRfUlNfVDFfUlNLICgweDAyMDApCisjZGVmaW5lIElOVF9SU19UMV9PRlNUICg5KQorI2RlZmluZSBJTlRfUlNfVDBfUlNLICgweDAxMDApCisjZGVmaW5lIElOVF9SU19UMF9PRlNUICg4KQorI2RlZmluZSBJTlRfUlNfVUFfUlNLICgweDAwODApCisjZGVmaW5lIElOVF9SU19VQV9PRlNUICg3KQorI2RlZmluZSBJTlRfUlNfSVBfUlNLICgweDAwNDApCisjZGVmaW5lIElOVF9SU19JUF9PRlNUICg2KQorI2RlZmluZSBJTlRfUlNfUDVfUlNLICgweDAwMjApCisjZGVmaW5lIElOVF9SU19QNV9PRlNUICg1KQorI2RlZmluZSBJTlRfUlNfUDRfUlNLICgweDAwMTApCisjZGVmaW5lIElOVF9SU19QNF9PRlNUICg0KQorI2RlZmluZSBJTlRfUlNfUDNfUlNLICgweDAwMDgpCisjZGVmaW5lIElOVF9SU19QM19PRlNUICgzKQorI2RlZmluZSBJTlRfUlNfUDJfUlNLICgweDAwMDQpCisjZGVmaW5lIElOVF9SU19QMl9PRlNUICgyKQorI2RlZmluZSBJTlRfUlNfUDFfUlNLICgweDAwMDIpCisjZGVmaW5lIElOVF9SU19QMV9PRlNUICgxKQorI2RlZmluZSBJTlRfUlNfUDBfUlNLICgweDAwMDEpCisjZGVmaW5lIElOVF9SU19QMF9PRlNUICgwKQorCisjZGVmaW5lIElOVF9JRChiYXNlX2FkZHIpIChJTlRfQ1RSTDAwX1RZUEUgKGJhc2VfYWRkciAgKyAweDEwICkpCisjZGVmaW5lIElOVF9JRF9JRF9NU0sgKDB4M0YpCisjZGVmaW5lIElOVF9JRF9JRF9PRlNUICgwKQorCisjZGVmaW5lIElOVF9QTERfUFJJT1JJVFkoYmFzZV9hZGRyKSAoSU5UX0NUUkwwMF9UWVBFIChiYXNlX2FkZHIgICsgMHgxNCApKQorI2RlZmluZSBJTlRfUExEX1BSSU9SSVRZX1BSSV9NU0sgKDB4M0YpCisjZGVmaW5lIElOVF9QTERfUFJJT1JJVFlfUFJJX09GU1QgKDApCisjZGVmaW5lIElOVF9QTERfUFJJT1JJVFlfR0FfTVNLICgweDQwKQorI2RlZmluZSBJTlRfUExEX1BSSU9SSVRZX0dBX09GU1QgKDYpCisKKyNkZWZpbmUgSU5UX01PREUoYmFzZV9hZGRyKSAoSU5UX0NUUkwwMF9UWVBFIChiYXNlX2FkZHIgICsgMHgxOCApKQorI2RlZmluZSBJTlRfTU9ERV9NT0RFX01TSyAoMHgzKQorI2RlZmluZSBJTlRfTU9ERV9NT0RFX09GU1QgKDApCisKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX1AwKGJhc2VfYWRkcikgKElOVF9DVFJMMDBfVFlQRSAoYmFzZV9hZGRyICArIDB4ODAgKSkKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX1AwX1BSSV9NU0sgKDB4M0YpCisjZGVmaW5lIElOVF9QUklPUklUWV9QMF9QUklfT0ZTVCAoMCkKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX1AwX0ZRX01TSyAoMHg0MCkKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX1AwX0ZRX09GU1QgKDYpCisKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX1AxKGJhc2VfYWRkcikgKElOVF9DVFJMMDBfVFlQRSAoYmFzZV9hZGRyICArIDB4ODQgKSkKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX1AxX1BSSV9NU0sgKDB4M0YpCisjZGVmaW5lIElOVF9QUklPUklUWV9QMV9QUklfT0ZTVCAoMCkKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX1AxX0ZRX01TSyAoMHg0MCkKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX1AxX0ZRX09GU1QgKDYpCisKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX1AyKGJhc2VfYWRkcikgKElOVF9DVFJMMDBfVFlQRSAoYmFzZV9hZGRyICArIDB4ODggKSkKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX1AyX1BSSV9NU0sgKDB4M0YpCisjZGVmaW5lIElOVF9QUklPUklUWV9QMl9QUklfT0ZTVCAoMCkKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX1AyX0ZRX01TSyAoMHg0MCkKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX1AyX0ZRX09GU1QgKDYpCisKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX1AzKGJhc2VfYWRkcikgKElOVF9DVFJMMDBfVFlQRSAoYmFzZV9hZGRyICArIDB4OEMgKSkKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX1AzX1BSSV9NU0sgKDB4M0YpCisjZGVmaW5lIElOVF9QUklPUklUWV9QM19QUklfT0ZTVCAoMCkKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX1AzX0ZRX01TSyAoMHg0MCkKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX1AzX0ZRX09GU1QgKDYpCisKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX1A0KGJhc2VfYWRkcikgKElOVF9DVFJMMDBfVFlQRSAoYmFzZV9hZGRyICArIDB4OTAgKSkKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX1A0X1BSSV9NU0sgKDB4M0YpCisjZGVmaW5lIElOVF9QUklPUklUWV9QNF9QUklfT0ZTVCAoMCkKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX1A0X0ZRX01TSyAoMHg0MCkKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX1A0X0ZRX09GU1QgKDYpCisKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX1A1KGJhc2VfYWRkcikgKElOVF9DVFJMMDBfVFlQRSAoYmFzZV9hZGRyICArIDB4OTQgKSkKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX1A1X1BSSV9NU0sgKDB4M0YpCisjZGVmaW5lIElOVF9QUklPUklUWV9QNV9QUklfT0ZTVCAoMCkKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX1A1X0ZRX01TSyAoMHg0MCkKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX1A1X0ZRX09GU1QgKDYpCisKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX0lQKGJhc2VfYWRkcikgKElOVF9DVFJMMDBfVFlQRSAoYmFzZV9hZGRyICArIDB4OTQgKSkKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX0lQX1BSSV9NU0sgKDB4M0YpCisjZGVmaW5lIElOVF9QUklPUklUWV9JUF9QUklfT0ZTVCAoMCkKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX0lQX0ZRX01TSyAoMHg0MCkKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX0lQX0ZRX09GU1QgKDYpCisKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX1VBKGJhc2VfYWRkcikgKElOVF9DVFJMMDBfVFlQRSAoYmFzZV9hZGRyICArIDB4OUMgKSkKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX1VBX1BSSV9NU0sgKDB4M0YpCisjZGVmaW5lIElOVF9QUklPUklUWV9VQV9QUklfT0ZTVCAoMCkKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX1VBX0ZRX01TSyAoMHg0MCkKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX1VBX0ZRX09GU1QgKDYpCisKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX1QwKGJhc2VfYWRkcikgKElOVF9DVFJMMDBfVFlQRSAoYmFzZV9hZGRyICArIDB4QTAgKSkKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX1QwX1BSSV9NU0sgKDB4M0YpCisjZGVmaW5lIElOVF9QUklPUklUWV9UMF9QUklfT0ZTVCAoMCkKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX1QwX0ZRX01TSyAoMHg0MCkKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX1QwX0ZRX09GU1QgKDYpCisKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX1QxKGJhc2VfYWRkcikgKElOVF9DVFJMMDBfVFlQRSAoYmFzZV9hZGRyICArIDB4QTQgKSkKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX1QxX1BSSV9NU0sgKDB4M0YpCisjZGVmaW5lIElOVF9QUklPUklUWV9UMV9QUklfT0ZTVCAoMCkKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX1QxX0ZRX01TSyAoMHg0MCkKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX1QxX0ZRX09GU1QgKDYpCisKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX1BTKGJhc2VfYWRkcikgKElOVF9DVFJMMDBfVFlQRSAoYmFzZV9hZGRyICArIDB4QTggKSkKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX1BTX1BSSV9NU0sgKDB4M0YpCisjZGVmaW5lIElOVF9QUklPUklUWV9QU19QUklfT0ZTVCAoMCkKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX1BTX0ZRX01TSyAoMHg0MCkKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX1BTX0ZRX09GU1QgKDYpCisKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX0VFKGJhc2VfYWRkcikgKElOVF9DVFJMMDBfVFlQRSAoYmFzZV9hZGRyICArIDB4QUMgKSkKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX0VFX1BSSV9NU0sgKDB4M0YpCisjZGVmaW5lIElOVF9QUklPUklUWV9FRV9QUklfT0ZTVCAoMCkKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX0VFX0ZRX01TSyAoMHg0MCkKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX0VFX0ZRX09GU1QgKDYpCisKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX1BFKGJhc2VfYWRkcikgKElOVF9DVFJMMDBfVFlQRSAoYmFzZV9hZGRyICArIDB4QjAgKSkKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX1BFX1BSSV9NU0sgKDB4M0YpCisjZGVmaW5lIElOVF9QUklPUklUWV9QRV9QUklfT0ZTVCAoMCkKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX1BFX0ZRX01TSyAoMHg0MCkKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX1BFX0ZRX09GU1QgKDYpCisKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX0FFKGJhc2VfYWRkcikgKElOVF9DVFJMMDBfVFlQRSAoYmFzZV9hZGRyICArIDB4QjQgKSkKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX0FFX1BSSV9NU0sgKDB4M0YpCisjZGVmaW5lIElOVF9QUklPUklUWV9BRV9QUklfT0ZTVCAoMCkKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX0FFX0ZRX01TSyAoMHg0MCkKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX0FFX0ZRX09GU1QgKDYpCisKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX00wKGJhc2VfYWRkcikgKElOVF9DVFJMMDBfVFlQRSAoYmFzZV9hZGRyICArIDB4QjggKSkKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX00wX1BSSV9NU0sgKDB4M0YpCisjZGVmaW5lIElOVF9QUklPUklUWV9NMF9QUklfT0ZTVCAoMCkKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX00wX0ZRX01TSyAoMHg0MCkKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX00wX0ZRX09GU1QgKDYpCisKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX00xKGJhc2VfYWRkcikgKElOVF9DVFJMMDBfVFlQRSAoYmFzZV9hZGRyICArIDB4QkMgKSkKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX00xX1BSSV9NU0sgKDB4M0YpCisjZGVmaW5lIElOVF9QUklPUklUWV9NMV9QUklfT0ZTVCAoMCkKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX00xX0ZRX01TSyAoMHg0MCkKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX00xX0ZRX09GU1QgKDYpCisKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX0ZDKGJhc2VfYWRkcikgKElOVF9DVFJMMDBfVFlQRSAoYmFzZV9hZGRyICArIDB4QzAgKSkKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX0ZDX1BSSV9NU0sgKDB4M0YpCisjZGVmaW5lIElOVF9QUklPUklUWV9GQ19QUklfT0ZTVCAoMCkKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX0ZDX0ZRX01TSyAoMHg0MCkKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX0ZDX0ZRX09GU1QgKDYpCisKKyNlbmRpZiAvKiBfX0lOVF9DVFJMMDBfSCAqLworCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL2lvLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi9pby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmMGFmYTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi9pby5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvaW8uaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTkgQVJNIExpbWl0ZWQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKyNpZm5kZWYgX19BU01fQVJNX0FSQ0hfSU9fSAorI2RlZmluZSBfX0FTTV9BUk1fQVJDSF9JT19ICisKKyNkZWZpbmUgSU9fU1BBQ0VfTElNSVQgMHhmZmZmCisKKworLyoKKyAqIEdlbmVyaWMgdmlydHVhbCByZWFkL3dyaXRlCisgKi8KKy8qI2RlZmluZSBvdXRzdyAgIF9fYXJjaF93cml0ZXN3CisjZGVmaW5lIG91dHNsICAgX19hcmNoX3dyaXRlc2wKKyNkZWZpbmUgb3V0c2IgICBfX2FyY2hfd3JpdGVzYgorI2RlZmluZSBpbnNiICAgIF9fYXJjaF9yZWFkc2IKKyNkZWZpbmUgaW5zdyAgICBfX2FyY2hfcmVhZHN3CisjZGVmaW5lIGluc2wgICAgX19hcmNoX3JlYWRzbCovCisKKyNkZWZpbmUgX19pbyhhKQkJCSgodm9pZCBfX2lvbWVtICopKGEpKQorI2RlZmluZSBfX21lbV9wY2koYSkgICAgICAgICAgICAoYSkgCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvaXJxcy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvaXJxcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNzU4YTMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi9pcnFzLmgKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jYW1lbG90L2lycXMuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEgQWx0ZXJhIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKy8qIFVzZSB0aGUgRXhjYWxpYnVyIGNoaXAgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgSU5UX0NUUkwwMF9UWVBFCisjaW5jbHVkZSAiYXNtL2FyY2gvaW50X2N0cmwwMC5oIgorCisKKyNkZWZpbmUgSVJRX1BMRDAgICAgICAgICAgICAgICAgICAgICBJTlRfTVNfUDBfT0ZTVAorI2RlZmluZSBJUlFfUExEMSAgICAgICAgICAgICAgICAgICAgIElOVF9NU19QMV9PRlNUCisjZGVmaW5lIElSUV9QTEQyICAgICAgICAgICAgICAgICAgICAgSU5UX01TX1AyX09GU1QKKyNkZWZpbmUgSVJRX1BMRDMgICAgICAgICAgICAgICAgICAgICBJTlRfTVNfUDNfT0ZTVAorI2RlZmluZSBJUlFfUExENCAgICAgICAgICAgICAgICAgICAgIElOVF9NU19QNF9PRlNUCisjZGVmaW5lIElSUV9QTEQ1ICAgICAgICAgICAgICAgICAgICAgSU5UX01TX1A1X09GU1QKKyNkZWZpbmUgSVJRX0VYVCAgICAgICAgICAgICAgICAgICAgICBJTlRfTVNfSVBfT0ZTVAorI2RlZmluZSBJUlFfVUFSVCAgICAgICAgICAgICAgICAgICAgIElOVF9NU19VQV9PRlNUCisjZGVmaW5lIElSUV9USU1FUjAgICAgICAgICAgICAgICAgICAgSU5UX01TX1QwX09GU1QKKyNkZWZpbmUgSVJRX1RJTUVSMSAgICAgICAgICAgICAgICAgICBJTlRfTVNfVDFfT0ZTVAorI2RlZmluZSBJUlFfUExMICAgICAgICAgICAgICAgICAgICAgIElOVF9NU19QTExfT0ZTVAorI2RlZmluZSBJUlFfRUJJICAgICAgICAgICAgICAgICAgICAgIElOVF9NU19FQklfT0ZTVAorI2RlZmluZSBJUlFfU1RSSVBFX0JSSURHRSAgICAgICAgICAgIElOVF9NU19QTExfT0ZTVAorI2RlZmluZSBJUlFfQUhCX0JSSURHRSAgICAgICAgICAgICAgIElOVF9NU19QTExfT0ZTVAorI2RlZmluZSBJUlFfQ09NTVJYICAgICAgICAgICAgICAgICAgIElOVF9NU19DUl9PRlNUCisjZGVmaW5lIElSUV9DT01NVFggICAgICAgICAgICAgICAgICAgSU5UX01TX0NUX09GU1QKKyNkZWZpbmUgSVJRX0ZBU1RfQ09NTSAgICAgICAgICAgICAgICBJTlRfTVNfRkNfT0ZTVAorCisjZGVmaW5lIE5SX0lSUVMgICAgICAgICAgICAgICAgICAgICAgICAgKElOVF9NU19GQ19PRlNUICsgMSkKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvbWVtb3J5LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi9tZW1vcnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjg2YmY3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvbWVtb3J5LmgKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTAvbWVtb3J5LmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxIEFsdGVyYSBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworI2lmbmRlZiBfX0FTTV9BUkNIX01FTU9SWV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfTUVNT1JZX0gKKworLyoKKyAqIFBoeXNpY2FsIERSQU0gb2Zmc2V0LgorICovCisjZGVmaW5lIFBIWVNfT0ZGU0VUCSgweDAwMDAwMDAwVUwpCisKKy8qCisgKiBWaXJ0dWFsIHZpZXcgPC0+IERNQSB2aWV3IG1lbW9yeSBhZGRyZXNzIHRyYW5zbGF0aW9ucworICogdmlydF90b19idXM6IFVzZWQgdG8gdHJhbnNsYXRlIHRoZSB2aXJ0dWFsIGFkZHJlc3MgdG8gYW4KKyAqICAgICAgICAgICAgICBhZGRyZXNzIHN1aXRhYmxlIHRvIGJlIHBhc3NlZCB0byBzZXRfZG1hX2FkZHIKKyAqIGJ1c190b192aXJ0OiBVc2VkIHRvIGNvbnZlcnQgYW4gYWRkcmVzcyBmb3IgRE1BIG9wZXJhdGlvbnMKKyAqICAgICAgICAgICAgICB0byBhbiBhZGRyZXNzIHRoYXQgdGhlIGtlcm5lbCBjYW4gdXNlLgorICovCisjZGVmaW5lIF9fdmlydF90b19idXMoeCkJKHggLSBQQUdFX09GRlNFVCArIC8qU0RSQU1fQkFTRSovMCkKKyNkZWZpbmUgX19idXNfdG9fdmlydCh4KQkoeCAtIC8qU0RSQU1fQkFTRSovMCArIFBBR0VfT0ZGU0VUKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL21vZGVfY3RybDAwLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi9tb2RlX2N0cmwwMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4YTdlZmEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi9tb2RlX2N0cmwwMC5oCkBAIC0wLDAgKzEsODAgQEAKKyNpZm5kZWYgX19NT0RFX0NUUkwwMF9ICisjZGVmaW5lIF9fTU9ERV9DVFJMMDBfSAorCisvKgorICogUmVnaXN0ZXIgZGVmaW5pdGlvbnMgZm9yIHRoZSByZXNldCBhbmQgbW9kZSBjb250cm9sCisgKi8KKworLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEgQWx0ZXJhIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKworCisjZGVmaW5lIEJPT1RfQ1IoQkFTRV9BRERSKSAoTU9ERV9DVFJMMDBfVFlQRSAoQkFTRV9BRERSICApKQorI2RlZmluZSBCT09UX0NSX0JGX01TSyAoMHgxKQorI2RlZmluZSBCT09UX0NSX0JGX09GU1QgKDApCisjZGVmaW5lIEJPT1RfQ1JfSE1fTVNLICgweDIpCisjZGVmaW5lIEJPT1RfQ1JfSE1fT0ZTVCAoMSkKKyNkZWZpbmUgQk9PVF9DUl9SRV9NU0sgKDB4NCkKKyNkZWZpbmUgQk9PVF9DUl9SRV9PRlNUICgyKQorCisjZGVmaW5lIFJFU0VUX1NSKEJBU0VfQUREUikgKE1PREVfQ1RSTDAwX1RZUEUgKEJBU0VfQUREUiAgKyAweDQgKSkKKyNkZWZpbmUgUkVTRVRfU1JfV1JfTVNLICgweDEpCisjZGVmaW5lIFJFU0VUX1NSX1dSX09GU1QgKDApCisjZGVmaW5lIFJFU0VUX1NSX0NSX01TSyAoMHgyKQorI2RlZmluZSBSRVNFVF9TUl9DUl9PRlNUICgxKQorI2RlZmluZSBSRVNFVF9TUl9KVF9NU0sgKDB4NCkKKyNkZWZpbmUgUkVTRVRfU1JfSlRfT0ZTVCAoMikKKyNkZWZpbmUgUkVTRVRfU1JfRVJfTVNLICgweDgpCisjZGVmaW5lIFJFU0VUX1NSX0VSX09GU1QgKDMpCisKKyNkZWZpbmUgSURfQ09ERShCQVNFX0FERFIpIChNT0RFX0NUUkwwMF9UWVBFIChCQVNFX0FERFIgICsgMHgwOCApKQorCisjZGVmaW5lIFNSQU0wX1NSKEJBU0VfQUREUikgKE1PREVfQ1RSTDAwX1RZUEUgKEJBU0VfQUREUiAgKyAweDIwICkpCisjZGVmaW5lIFNSQU0wX1NSX1NJWkVfTVNLICgweEZGRkZGMDAwKQorI2RlZmluZSBTUkFNMF9TUl9TSVpFX09GU1QgKDEyKQorCisjZGVmaW5lIFNSQU0xX1NSKEJBU0VfQUREUikgKE1PREVfQ1RSTDAwX1RZUEUgKEJBU0VfQUREUiAgKyAweDI0ICkpCisjZGVmaW5lIFNSQU0xX1NSX1NJWkVfTVNLICgweEZGRkZGMDAwKQorI2RlZmluZSBTUkFNMV9TUl9TSVpFX09GU1QgKDEyKQorCisjZGVmaW5lIERQU1JBTTBfU1IoQkFTRV9BRERSKSAoTU9ERV9DVFJMMDBfVFlQRSAoQkFTRV9BRERSICArIDB4MzAgKSkKKworI2RlZmluZSBEUFNSQU0wX1NSX01PREVfTVNLICgweEYpCisjZGVmaW5lIERQU1JBTTBfU1JfTU9ERV9PRlNUICgwKQorI2RlZmluZSBEUFNSQU0wX1NSX0dMQkxfTVNLICgweDMwKQorI2RlZmluZSBEUFNSQU0wX1NSX1NJWkVfTVNLICgweEZGRkZGMDAwKQorI2RlZmluZSBEUFNSQU0wX1NSX1NJWkVfT0ZTVCAoMTIpCisKKyNkZWZpbmUgRFBTUkFNMF9MQ1IoQkFTRV9BRERSKSAoTU9ERV9DVFJMMDBfVFlQRSAoQkFTRV9BRERSICArIDB4MzQgKSkKKyNkZWZpbmUgRFBTUkFNMF9MQ1JfTENLQUREUl9NU0sgKDB4MUZGRTApCisjZGVmaW5lIERQU1JBTTBfTENSX0xDS0FERFJfT0ZTVCAoNCkKKworI2RlZmluZSBEUFNSQU0xX1NSKEJBU0VfQUREUikgKE1PREVfQ1RSTDAwX1RZUEUgKEJBU0VfQUREUiAgKyAweDM4ICkpCisjZGVmaW5lIERQU1JBTTFfU1JfTU9ERV9NU0sgKDB4RikKKyNkZWZpbmUgRFBTUkFNMV9TUl9NT0RFX09GU1QgKDApCisjZGVmaW5lIERQU1JBTTFfU1JfR0xCTF9NU0sgKDB4MzApCisjZGVmaW5lIERQU1JBTTFfU1JfR0xCTF9PRlNUICg0KQorI2RlZmluZSBEUFNSQU0xX1NSX1NJWkVfTVNLICgweEZGRkZGMDAwKQorI2RlZmluZSBEUFNSQU0xX1NSX1NJWkVfT0ZTVCAoMTIpCisKKyNkZWZpbmUgRFBTUkFNMV9MQ1IoQkFTRV9BRERSKSAoTU9ERV9DVFJMMDBfVFlQRSAoQkFTRV9BRERSICArIDB4M0MgKSkKKyNkZWZpbmUgRFBTUkFNMV9MQ1JfTENLQUREUl9NU0sgKDB4MUZGRTApCisjZGVmaW5lIERQU1JBTTFfTENSX0xDS0FERFJfT0ZTVCAoNCkKKworI2VuZGlmIC8qIF9fTU9ERV9DVFJMMDBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvcGFyYW0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL3BhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzgzZGVkZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL3BhcmFtLmgKQEAgLTAsMCArMSwxOSBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi9wYXJhbS5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5OSBBUk0gTGltaXRlZAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvcGxhdGZvcm0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL3BsYXRmb3JtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI5YmIwZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL3BsYXRmb3JtLmgKQEAgLTAsMCArMSw3IEBACisjaWZuZGVmIFBMQVRGT1JNX0gKKyNkZWZpbmUgUExBVEZPUk1fSAorI2luY2x1ZGUgImV4Y2FsaWJ1ci5oIgorCisjZGVmaW5lIE1BWElSUU5VTSAxNSAKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi9wbGRfY29uZjAwLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi9wbGRfY29uZjAwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FmMmMzOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL3BsZF9jb25mMDAuaApAQCAtMCwwICsxLDczIEBACisjaWZuZGVmIF9fUExEX0NPTkYwMF9ICisjZGVmaW5lIF9fUExEX0NPTkYwMF9ICisKKy8qCisgKiBSZWdpc3RlciBkZWZpbml0aW9ucyBmb3IgdGhlIFBMRCBDb25maWd1cmF0aW9uIExvZ2ljCisgKi8KKworLyoKKyAqICAKKyAqICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHJlZ2lzdGVyIGRlZmluaXRpb25zIGZvciB0aGUgRXhjYWxpYnVyCisgKiAgSW50ZXJydXB0IGNvbnRyb2xsZXIgSU5UX0NUUkwwMC4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxIEFsdGVyYSBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworIAorI2RlZmluZSBDT05GSUdfQ09OVFJPTChCQVNFX0FERFIpIChQTERfQ09ORjAwX1RZUEUgKEJBU0VfQUREUikpICAKKyNkZWZpbmUgQ09ORklHX0NPTlRST0xfTEtfTVNLICgweDEpCisjZGVmaW5lIENPTkZJR19DT05UUk9MX0xLX09GU1QgKDApCisjZGVmaW5lIENPTkZJR19DT05UUk9MX0NPX01TSyAoMHgyKQorI2RlZmluZSBDT05GSUdfQ09OVFJPTF9DT19PRlNUICgxKQorI2RlZmluZSBDT05GSUdfQ09OVFJPTF9CX01TSyAgKDB4NCkKKyNkZWZpbmUgQ09ORklHX0NPTlRST0xfQl9PRlNUICgyKQorI2RlZmluZSBDT05GSUdfQ09OVFJPTF9QQ19NU0sgKDB4OCkKKyNkZWZpbmUgQ09ORklHX0NPTlRST0xfUENfT0ZTVCAoMykKKyNkZWZpbmUgQ09ORklHX0NPTlRST0xfRV9NU0sgKDB4MTApCisjZGVmaW5lIENPTkZJR19DT05UUk9MX0VfT0ZTVCAoNCkKKyNkZWZpbmUgQ09ORklHX0NPTlRST0xfRVNfTVNLICgweEUwKQorI2RlZmluZSBDT05GSUdfQ09OVFJPTF9FU19PRlNUICg1KQorI2RlZmluZSBDT05GSUdfQ09OVFJPTF9FU18wX01TSyAoMHgyMCkKKyNkZWZpbmUgQ09ORklHX0NPTlRST0xfRVNfMV9NU0sgKDB4NDApCisjZGVmaW5lIENPTkZJR19DT05UUk9MX0VTXzJfTVNLICgweDgwKQorCisjZGVmaW5lIENPTkZJR19DT05UUk9MX0NMT0NLKEJBU0VfQUREUikgKFBMRF9DT05GMDBfVFlQRSAoQkFTRV9BRERSICArIDB4NCApKQorI2RlZmluZSBDT05GSUdfQ09OVFJPTF9DTE9DS19SQVRJT19NU0sgKDB4RkZGRikKKyNkZWZpbmUgQ09ORklHX0NPTlRST0xfQ0xPQ0tfUkFUSU9fT0ZTVCAoMCkKKworI2RlZmluZSBDT05GSUdfQ09OVFJPTF9EQVRBKEJBU0VfQUREUikgKFBMRF9DT05GMDBfVFlQRSAoQkFTRV9BRERSICArIDB4OCApKQorI2RlZmluZSBDT05GSUdfQ09OVFJPTF9EQVRBX01TSyAoMHhGRkZGRkZGRikKKyNkZWZpbmUgQ09ORklHX0NPTlRST0xfREFUQV9PRlNUICgwKQorCisjZGVmaW5lIENPTkZJR19VTkxPQ0soQkFTRV9BRERSKSAoUExEX0NPTkYwMF9UWVBFIChCQVNFX0FERFIgICsgMHhDICkpIAorI2RlZmluZSBDT05GSUdfVU5MT0NLX01TSyAoMHhGRkZGRkZGRikKKyNkZWZpbmUgQ09ORklHX1VOTE9DS19PRlNUICgwKQorCisjZGVmaW5lIENPTkZJR19VTkxPQ0tfTUFHSUMgKDB4NTU0RTRDNEIpCisKKyNlbmRpZiAvKiBfX1BMRF9DT05GMDBfSCAqLworCisKKworCisKKworCisKKworCisKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi9zeXN0ZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDViMDkyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvc3lzdGVtLmgKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi9zeXN0ZW0uaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTkgQVJNIExpbWl0ZWQKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDAgRGVlcCBCbHVlIFNvbHV0aW9ucyBMdGQKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEgQWx0ZXJhIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisjaWZuZGVmIF9fQVNNX0FSQ0hfU1lTVEVNX0gKKyNkZWZpbmUgX19BU01fQVJDSF9TWVNURU1fSAorCisjaW5jbHVkZSA8YXNtL2FyY2gvcGxhdGZvcm0uaD4KKworc3RhdGljIGlubGluZSB2b2lkIGFyY2hfaWRsZSh2b2lkKQoreworCS8qCisJICogVGhpcyBzaG91bGQgZG8gYWxsIHRoZSBjbG9jayBzd2l0Y2hpbmcKKwkgKiBhbmQgd2FpdCBmb3IgaW50ZXJydXB0IHRyaWNrcworCSAqLworCWNwdV9kb19pZGxlKCk7Cit9CisKK2V4dGVybiBfX2lubGluZV9fIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUpCit7CisJLyogSG1tLi4uIFdlIGNhbiBwcm9iYWJseSBkbyBzb21ldGhpbmcgd2l0aCB0aGUgd2F0Y2hkb2cuLi4gKi8KK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi90ZGtwaHkuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL3Rka3BoeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlMTA3YmQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi90ZGtwaHkuaApAQCAtMCwwICsxLDIwOSBAQAorLyoKKyAqICBsaW51eC9kcml2ZXJzL3Rka3BoeS5oCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMSBBbHRlcmEgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2lmbmRlZiBfX1RES1BIWV9ICisjZGVmaW5lIF9fVERLUEhZX0gKKworLyoKKyAqIFJlZ2lzdGVyIGRlZmluaXRpb25zIGZvciB0aGUgVERLIDc4UTIxMjAgUEhZIAorICogd2hpY2ggaXMgb24gdGhlIENhbWVsb3QgYm9hcmQKKyAqLworCisvKgorICogQ29weXJpZ2h0IChjKSBBbHRlcmEgQ29ycG9yYXRpb24gMjAwMC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKi8KKyNkZWZpbmUgUEhZX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDApCisjZGVmaW5lIFBIWV9DT05UUk9MX0NPTFRfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4ODApCisjZGVmaW5lIFBIWV9DT05UUk9MX0NPTFRfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDcpCisjZGVmaW5lIFBIWV9DT05UUk9MX0RVUExFWF9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MTAwKQorI2RlZmluZSBQSFlfQ09OVFJPTF9EVVBMRVhfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg4KQorI2RlZmluZSBQSFlfQ09OVFJPTF9SQU5FR19NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDIwMCkKKyNkZWZpbmUgUEhZX0NPTlRST0xfUkFORUdfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoOSkKKyNkZWZpbmUgUEhZX0NPTlRST0xfSVNPX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDQwMCkKKyNkZWZpbmUgUEhZX0NPTlRST0xfSVNPX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTApCisjZGVmaW5lIFBIWV9DT05UUk9MX1BXUkROX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4ODAwKQorI2RlZmluZSBQSFlfQ09OVFJPTF9QV1JETl9PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxMSkKKyNkZWZpbmUgUEhZX0NPTlRST0xfQU5FR0VOX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxMDAwKQorI2RlZmluZSBQSFlfQ09OVFJPTF9BTkVHRU5fT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxMikKKyNkZWZpbmUgUEhZX0NPTlRST0xfU1BFRURTTF9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgyMDAwKQorI2RlZmluZSBQSFlfQ09OVFJPTF9TUEVFRFNMX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxMykKKyNkZWZpbmUgUEhZX0NPTlRST0xfTE9PUEJLX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg0MDAwKQorI2RlZmluZSBQSFlfQ09OVFJPTF9MT09QQktfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxNCkKKyNkZWZpbmUgUEhZX0NPTlRST0xfUkVTRVRfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg4MDAwKQorI2RlZmluZSBQSFlfQ09OVFJPTF9SRVNFVF9PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxNSkKKworI2RlZmluZSBQSFlfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSkKKyNkZWZpbmUgUEhZX1NUQVRVU19FVFhEX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDEpCisjZGVmaW5lIFBIWV9TVEFUVVNfRVhURF9PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDApCisjZGVmaW5lIFBIWV9TVEFUVVNfSkFCX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgyKQorI2RlZmluZSBQSFlfU1RBVFVTX0pBQl9PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEpCisjZGVmaW5lIFBIWV9TVEFUVVNfTElOS19NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg0KQorI2RlZmluZSBQSFlfU1RBVFVTX0xJTktfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgyKQorI2RlZmluZSBQSFlfU1RBVFVTX0FORUdBX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDgpCisjZGVmaW5lIFBIWV9TVEFUVVNfQU5FR0FfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDMpCisjZGVmaW5lIFBIWV9TVEFUVVNfUkZBVUxUX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MTApCisjZGVmaW5lIFBIWV9TVEFUVVNfUkZBVUxUX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDQpCisjZGVmaW5lIFBIWV9TVEFUVVNfQU5FR0NfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MjApCisjZGVmaW5lIFBIWV9TVEFUVVNfQU5FR0NfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDUpCisjZGVmaW5lIFBIWV9TVEFUVVNfMTBUX0hfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4ODAwKQorI2RlZmluZSBQSFlfU1RBVFVTXzEwVF9IX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxMSkKKyNkZWZpbmUgUEhZX1NUQVRVU18xMFRfRl9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxMDAwKQorI2RlZmluZSBQSFlfU1RBVFVTXzEwVF9GX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxMikKKyNkZWZpbmUgUEhZX1NUQVRVU18xMDBfWF9IX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgyMDAwKQorI2RlZmluZSBQSFlfU1RBVFVTXzEwMF9YX0hfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxMykKKyNkZWZpbmUgUEhZX1NUQVRVU18xMDBfWF9GX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg0MDAwKQorI2RlZmluZSBQSFlfU1RBVFVTXzEwMF9YX0ZfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxNCkKKyNkZWZpbmUgUEhZX1NUQVRVU18xMDBUNF9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg4MDAwKQorI2RlZmluZSBQSFlfU1RBVFVTXzEwMFQ0X09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxNSkKKworI2RlZmluZSBQSFlfSUQxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMikKKyNkZWZpbmUgUEhZX0lEMV9PVUlfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweEZGRkYpCisjZGVmaW5lIFBIWV9JRDFfT1VJX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCkKKworI2RlZmluZSBQSFlfSUQyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMykKKyNkZWZpbmUgUEhZX0lEMl9STl9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweEYpCisjZGVmaW5lIFBIWV9JRDJfUk5fT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCkKKyNkZWZpbmUgUEhZX0lEMl9NTl9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDNGMCkKKyNkZWZpbmUgUEhZX0lEMl9NTl9PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg0KQorI2RlZmluZSBQSFlfSUQyX09VSV9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4RkMwMCkKKyNkZWZpbmUgUEhZX0lEMl9PVUlfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxMCkKKworI2RlZmluZSBQSFlfQVVUT19ORUdfQURWRVJUSVNFTUVOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg0KQorI2RlZmluZSBQSFlfQVVUT19ORUdfQURWRVJUSVNFTUVOVF9TRUxFQ1RPUl9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MUYpCisjZGVmaW5lIFBIWV9BVVRPX05FR19BRFZFUlRJU0VNRU5UX1NFTEVDVE9SX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAoMCkKKyNkZWZpbmUgUEhZX0FVVE9fTkVHX0FEVkVSVElTRU1FTlRfQTBfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MjApCisjZGVmaW5lIFBIWV9BVVRPX05FR19BRFZFUlRJU0VNRU5UX0EwX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg1KQorI2RlZmluZSBQSFlfQVVUT19ORUdfQURWRVJUSVNFTUVOVF9BMV9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg0MCkKKyNkZWZpbmUgUEhZX0FVVE9fTkVHX0FEVkVSVElTRU1FTlRfQTFfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDYpCisjZGVmaW5lIFBIWV9BVVRPX05FR19BRFZFUlRJU0VNRU5UX0EyX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDgwKQorI2RlZmluZSBQSFlfQVVUT19ORUdfQURWRVJUSVNFTUVOVF9BMl9PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNykKKyNkZWZpbmUgUEhZX0FVVE9fTkVHX0FEVkVSVElTRU1FTlRfQTNfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MTAwKQorI2RlZmluZSBQSFlfQVVUT19ORUdfQURWRVJUSVNFTUVOVF9BM19PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoOCkKKyNkZWZpbmUgUEhZX0FVVE9fTkVHX0FEVkVSVElTRU1FTlRfQTRfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MjAwKQorI2RlZmluZSBQSFlfQVVUT19ORUdfQURWRVJUSVNFTUVOVF9BNF9PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoOSkKKyNkZWZpbmUgUEhZX0FVVE9fTkVHX0FEVkVSVElTRU1FTlRfVEFGX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MUZFMCkKKyNkZWZpbmUgUEhZX0FVVE9fTkVHX0FEVkVSVElTRU1FTlRfVEFGX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDUpCisjZGVmaW5lIFBIWV9BVVRPX05FR19BRFZFUlRJU0VNRU5UX1JGX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDIwMDApCisjZGVmaW5lIFBIWV9BVVRPX05FR19BRFZFUlRJU0VNRU5UX1JGX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxMykKKyNkZWZpbmUgUEhZX0FVVE9fTkVHX0FEVkVSVElTRU1FTlRfUlNWRF9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NDAwMCkKKyNkZWZpbmUgUEhZX0FVVE9fTkVHX0FEVkVSVElTRU1FTlRfUlZTRF9PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxNCkKKyNkZWZpbmUgUEhZX0FVVE9fTkVHX0FEVkVSVElTRU1FTlRfTlBfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4ODAwMCkKKyNkZWZpbmUgUEhZX0FVVE9fTkVHX0FEVkVSVElTRU1FTlRfTlBfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDE1KQorCisjZGVmaW5lIFBIWV9BVVRPX05FR19MSU5LX1BBUlRORVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDUpCisjZGVmaW5lIFBIWV9BVVRPX05FR19MSU5LX1BBUlRORVJfUzRfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDFGKQorI2RlZmluZSBQSFlfQVVUT19ORUdfTElOS19QQVJUTkVSX1M0X09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCkKKyNkZWZpbmUgUEhZX0FVVE9fTkVHX0xJTktfUEFSVE5FUl9BN19NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MUZFMCkKKyNkZWZpbmUgUEhZX0FVVE9fTkVHX0xJTktfUEFSVE5FUl9BN19PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDUpCisjZGVmaW5lIFBIWV9BVVRPX05FR19MSU5LX1BBUlRORVJfUkZfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDIwMDApCisjZGVmaW5lIFBIWV9BVVRPX05FR19MSU5LX1BBUlRORVJfUkZfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxMykKKyNkZWZpbmUgUEhZX0FVVE9fTkVHX0xJTktfUEFSVE5FUl9BQ0tfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NDAwMCkKKyNkZWZpbmUgUEhZX0FVVE9fTkVHX0xJTktfUEFSVE5FUl9BQ0tfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDE0KQorI2RlZmluZSBQSFlfQVVUT19ORUdfTElOS19QQVJUTkVSX05QX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg4MDAwKQorI2RlZmluZSBQSFlfQVVUT19ORUdfTElOS19QQVJUTkVSX05QX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTUpCisKKyNkZWZpbmUgUEhZX0FVVE9fTkVHX0VYUEFOU0lPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNikKKyNkZWZpbmUgUEhZX0FVVE9fTkVHX0VYUEFOU0lPTl9MUEFORUdBX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MSkKKyNkZWZpbmUgUEhZX0FVVE9fTkVHX0VYUEFOU0lPTl9MUEFORUdBX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDApCisjZGVmaW5lIFBIWV9BVVRPX05FR19FWFBBTlNJT05fUFJYX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDIpCisjZGVmaW5lIFBIWV9BVVRPX05FR19FWFBBTlNJT05fUFJYX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxKQorI2RlZmluZSBQSFlfQVVUT19ORUdfRVhQQU5TSU9OX05QQV9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg0KQorI2RlZmluZSBQSFlfQVVUT19ORUdfRVhQQU5TSU9OX05QQV9PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMikKKyNkZWZpbmUgUEhZX0FVVE9fTkVHX0VYUEFOU0lPTl9MUE5QQV9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4OCkKKyNkZWZpbmUgUEhZX0FVVE9fTkVHX0VYUEFOU0lPTl9MUE5QQV9PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDMpCisjZGVmaW5lIFBIWV9BVVRPX05FR19FWFBBTlNJT05fUERGX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDEwKQorI2RlZmluZSBQSFlfQVVUT19ORUdfRVhQQU5TSU9OX1BERl9PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNCkKKworI2RlZmluZSBQSFlfVkVORE9SX1NQRUNJRklDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDE2KQorI2RlZmluZSBQSFlfVkVORE9SX1NQRUNJRklDX1JYQ0NfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxKQorI2RlZmluZSBQSFlfVkVORE9SX1NQRUNJRklDX1JYQ0NfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCkKKyNkZWZpbmUgUEhZX1ZFTkRPUl9TUEVDSUZJQ19QQ1NCUF9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MikKKyNkZWZpbmUgUEhZX1ZFTkRPUl9TUEVDSUZJQ19QQ1NCUF9PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEpCisjZGVmaW5lIFBIWV9WRU5ET1JfU1BFQ0lGSUNfUlZTUE9MX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDEwKQorI2RlZmluZSBQSFlfVkVORE9SX1NQRUNJRklDX1JWU1BPTF9PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNCkKKyNkZWZpbmUgUEhZX1ZFTkRPUl9TUEVDSUZJQ19BUE9MX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MjApICAKKyNkZWZpbmUgUEhZX1ZFTkRPUl9TUEVDSUZJQ19BUE9MX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDUpCisjZGVmaW5lIFBIWV9WRU5ET1JfU1BFQ0lGSUNfR1BJTzBfRElSX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDQwKQorI2RlZmluZSBQSFlfVkVORE9SX1NQRUNJRklDX0dQSU8wX0RJUl9PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNikKKyNkZWZpbmUgUEhZX1ZFTkRPUl9TUEVDSUZJQ19HUElPMF9EQVRfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4ODApCisjZGVmaW5lIFBIWV9WRU5ET1JfU1BFQ0lGSUNfR1BJTzBfREFUX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg3KQorI2RlZmluZSBQSFlfVkVORE9SX1NQRUNJRklDX0dQSU8xX0RJUl9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxMDApCisjZGVmaW5lIFBIWV9WRU5ET1JfU1BFQ0lGSUNfR1BJTzFfRElSX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg4KQorI2RlZmluZSBQSFlfVkVORE9SX1NQRUNJRklDX0dQSU8xX0RBVF9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgyMDApCisjZGVmaW5lIFBIWV9WRU5ET1JfU1BFQ0lGSUNfR1BJTzFfREFUX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg5KQorI2RlZmluZSBQSFlfVkVORE9SX1NQRUNJRklDXzEwQlRfTkFUVVJBTF9MT09QQkFDS19EQVRfTVNLICAgICAgICgweDQwMCkKKyNkZWZpbmUgUEhZX1ZFTkRPUl9TUEVDSUZJQ18xMEJUX05BVFVSQUxfTE9PUEJBQ0tfREFUX09GU1QgICAgICAoMTApCisjZGVmaW5lIFBIWV9WRU5ET1JfU1BFQ0lGSUNfMTBCVF9TUUVfVEVTVF9JTkhJQklUX01TSyAgICAgICAgICAgKDB4ODAwKQorI2RlZmluZSBQSFlfVkVORE9SX1NQRUNJRklDXzEwQlRfU1FFX1RFU1RfSU5ISUJJVF9PRlNUICAgICAgICAgICgxMSkKKyNkZWZpbmUgUEhZX1ZFTkRPUl9TUEVDSUZJQ19UWEhJTV9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MTAwMCkKKyNkZWZpbmUgUEhZX1ZFTkRPUl9TUEVDSUZJQ19UWEhJTV9PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEyKQorI2RlZmluZSBQSFlfVkVORE9SX1NQRUNJRklDX0lOVF9MRVZFTF9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg0MDAwKQorI2RlZmluZSBQSFlfVkVORE9SX1NQRUNJRklDX0lOVF9MRVZFTF9PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTQpCisjZGVmaW5lIFBIWV9WRU5ET1JfU1BFQ0lGSUNfUlBUUl9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDgwMDApCisjZGVmaW5lIFBIWV9WRU5ET1JfU1BFQ0lGSUNfUlBUUl9PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxNSkKKworI2RlZmluZSBQSFlfSVJRX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDE3KQorI2RlZmluZSBQSFlfSVJRX0NPTlRST0xfQU5FR19DT01QX0lOVF9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxKQorI2RlZmluZSBQSFlfSVJRX0NPTlRST0xfQU5FR19DT01QX0lOVF9PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCkKKyNkZWZpbmUgUEhZX0lSUV9DT05UUk9MX1JGQVVMVF9JTlRfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MikKKyNkZWZpbmUgUEhZX0lSUV9DT05UUk9MX1JGQVVMVF9JTlRfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEpCisjZGVmaW5lIFBIWV9JUlFfQ09OVFJPTF9MU19DSEdfSU5UX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDQpCisjZGVmaW5lIFBIWV9JUlFfQ09OVFJPTF9MU19DSEdfSU5UX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgyKQorI2RlZmluZSBQSFlfSVJRX0NPTlRST0xfTFBfQUNLX0lOVF9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg4KQorI2RlZmluZSBQSFlfSVJRX0NPTlRST0xfTFBfQUNLX0lOVF9PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMykKKyNkZWZpbmUgUEhZX0lSUV9DT05UUk9MX1BERl9JTlRfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxMCkKKyNkZWZpbmUgUEhZX0lSUV9DT05UUk9MX1BERl9JTlRfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDQpCisjZGVmaW5lIFBIWV9JUlFfQ09OVFJPTF9QUlhfSU5UX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MjApCisjZGVmaW5lIFBIWV9JUlFfQ09OVFJPTF9QUlhfSU5UX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg1KQorI2RlZmluZSBQSFlfSVJRX0NPTlRST0xfUlhFUl9JTlRfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg0MCkKKyNkZWZpbmUgUEhZX0lSUV9DT05UUk9MX1JYRVJfSU5UX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDYpCisjZGVmaW5lIFBIWV9JUlFfQ09OVFJPTF9KQUJCRVJfSU5UX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDgwKQorI2RlZmluZSBQSFlfSVJRX0NPTlRST0xfSkFCQkVSX0lOVF9PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNykKKyNkZWZpbmUgUEhZX0lSUV9DT05UUk9MX0FORUdfQ09NUF9JRV9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MTAwKQorI2RlZmluZSBQSFlfSVJRX0NPTlRST0xfQU5FR19DT01QX0lFX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoOCkKKyNkZWZpbmUgUEhZX0lSUV9DT05UUk9MX1JGQVVMVF9JRV9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MjAwKQorI2RlZmluZSBQSFlfSVJRX0NPTlRST0xfUkZBVUxUX0lFX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoOSkKKyNkZWZpbmUgUEhZX0lSUV9DT05UUk9MX0xTX0NIR19JRV9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NDAwKQorI2RlZmluZSBQSFlfSVJRX0NPTlRST0xfTFNfQ0hHX0lFX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTApCisjZGVmaW5lIFBIWV9JUlFfQ09OVFJPTF9MUF9BQ0tfSUVfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDgwMCkKKyNkZWZpbmUgUEhZX0lSUV9DT05UUk9MX0xQX0FDS19JRV9PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDExKQorI2RlZmluZSBQSFlfSVJRX0NPTlRST0xfUERGX0lFX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDEwMDApCisjZGVmaW5lIFBIWV9JUlFfQ09OVFJPTF9QREZfSUVfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEyKQorI2RlZmluZSBQSFlfSVJRX0NPTlRST0xfUFJYX0lFX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDIwMDApCisjZGVmaW5lIFBIWV9JUlFfQ09OVFJPTF9QUlhfSUVfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEzKQorI2RlZmluZSBQSFlfSVJRX0NPTlRST0xfUlhFUl9JRV9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDQwMDApCisjZGVmaW5lIFBIWV9JUlFfQ09OVFJPTF9SWEVSX0lFX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxNCkKKyNkZWZpbmUgUEhZX0lSUV9DT05UUk9MX0pBQkJFUl9JRV9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4ODAwMCkKKyNkZWZpbmUgUEhZX0lSUV9DT05UUk9MX0pBQkJFUl9JRV9PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDE1KQorCisjZGVmaW5lIFBIWV9ESUFHTk9TVElDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTgpCisjZGVmaW5lIFBIWV9ESUFHTk9TVElDX1JYX0xPQ0tfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MTAwKQorI2RlZmluZSBQSFlfRElBR05PU1RJQ19SWF9MT0NLX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg4KQorI2RlZmluZSBQSFlfRElBR05PU1RJQ19SWF9QQVNTX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDIwMCkKKyNkZWZpbmUgUEhZX0RJQUdOT1NUSUNfUlhfUEFTU19PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoOSkKKyNkZWZpbmUgUEhZX0RJQUdOT1NUSUNfUkFURV9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg0MDApCisjZGVmaW5lIFBIWV9ESUFHTk9TVElDX1JBVEVfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEwKQorI2RlZmluZSBQSFlfRElBR05PU1RJQ19EUExYX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDgwMCkKKyNkZWZpbmUgUEhZX0RJQUdOT1NUSUNfRFBMWF9PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTEpCisjZGVmaW5lIFBIWV9ESUFHTk9TVElDX0FORUdGX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MTAwMCkKKyNkZWZpbmUgUEhZX0RJQUdOT1NUSUNfQU5FR0ZfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTIpCisKKyNlbmRpZiAvKiBfX1RES1BIWV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi90aW1lcjAwLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi90aW1lcjAwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJhM2ZiNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL3RpbWVyMDAuaApAQCAtMCwwICsxLDk4IEBACisvKgorICogIAorICogIFRoaXMgZmlsZSBjb250YWlucyB0aGUgcmVnaXN0ZXIgZGVmaW5pdGlvbnMgZm9yIHRoZSBFeGNhbGlidXIKKyAqICBUaW1lciBUSU1FUjAwLgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEgQWx0ZXJhIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisjaWZuZGVmIF9fVElNRVIwMF9ICisjZGVmaW5lIF9fVElNRVIwMF9ICisKKy8qCisgKiBSZWdpc3RlciBkZWZpbml0aW9ucyBmb3IgdGhlIHRpbWVycworICovCisKKworI2RlZmluZSBUSU1FUjBfQ1IoQkFTRV9BRERSKSAoVElNRVIwMF9UWVBFIChCQVNFX0FERFIgICsgMHgwMCApKQorI2RlZmluZSBUSU1FUjBfQ1JfQl9NU0sgKDB4MjApCisjZGVmaW5lIFRJTUVSMF9DUl9CX09GU1QgKDB4NSkKKyNkZWZpbmUgVElNRVIwX0NSX1NfTVNLICAoMHgxMCkKKyNkZWZpbmUgVElNRVIwX0NSX1NfT0ZTVCAoMHg0KQorI2RlZmluZSBUSU1FUjBfQ1JfQ0lfTVNLICgweDA4KQorI2RlZmluZSBUSU1FUjBfQ1JfQ0lfT0ZTVCAoMHgzKQorI2RlZmluZSBUSU1FUjBfQ1JfSUVfTVNLICgweDA0KQorI2RlZmluZSBUSU1FUjBfQ1JfSUVfT0ZTVCAoMHgyKQorI2RlZmluZSBUSU1FUjBfQ1JfTU9ERV9NU0sgKDB4MykKKyNkZWZpbmUgVElNRVIwX0NSX01PREVfT0ZTVCAoMCkKKyNkZWZpbmUgVElNRVIwX0NSX01PREVfRlJFRSAoMCkKKyNkZWZpbmUgVElNRVIwX0NSX01PREVfT05FICAoMSkKKyNkZWZpbmUgVElNRVIwX0NSX01PREVfSU5UVkwgKDIpCisKKyNkZWZpbmUgVElNRVIwX1NSKEJBU0VfQUREUikgKFRJTUVSMDBfVFlQRSAoQkFTRV9BRERSICArIDB4MDAgKSkKKyNkZWZpbmUgVElNRVIwX1NSX0JfTVNLICgweDIwKQorI2RlZmluZSBUSU1FUjBfU1JfQl9PRlNUICgweDUpCisjZGVmaW5lIFRJTUVSMF9TUl9TX01TSyAgKDB4MTApCisjZGVmaW5lIFRJTUVSMF9TUl9TX09GU1QgKDB4NCkKKyNkZWZpbmUgVElNRVIwX1NSX0NJX01TSyAoMHgwOCkKKyNkZWZpbmUgVElNRVIwX1NSX0NJX09GU1QgKDB4MykKKyNkZWZpbmUgVElNRVIwX1NSX0lFX01TSyAoMHgwNCkKKyNkZWZpbmUgVElNRVIwX1NSX0lFX09GU1QgKDB4MikKKyNkZWZpbmUgVElNRVIwX1NSX01PREVfTVNLICgweDMpCisjZGVmaW5lIFRJTUVSMF9TUl9NT0RFX09GU1QgKDApCisjZGVmaW5lIFRJTUVSMF9TUl9NT0RFX0ZSRUUgKDApCisjZGVmaW5lIFRJTUVSMF9TUl9NT0RFX09ORSAgKDEpCisjZGVmaW5lIFRJTUVSMF9TUl9NT0RFX0lOVFZMICgyKQorCisjZGVmaW5lIFRJTUVSMF9QUkVTQ0FMRShCQVNFX0FERFIpIChUSU1FUjAwX1RZUEUgKEJBU0VfQUREUiAgKyAweDAxMCApKQorI2RlZmluZSBUSU1FUjBfTElNSVQoQkFTRV9BRERSKSAoVElNRVIwMF9UWVBFIChCQVNFX0FERFIgICsgMHgwMjAgKSkKKyNkZWZpbmUgVElNRVIwX1JFQUQoQkFTRV9BRERSKSAoVElNRVIwMF9UWVBFIChCQVNFX0FERFIgICsgMHgwMzAgKSkKKworI2RlZmluZSBUSU1FUjFfQ1IoQkFTRV9BRERSKSAoVElNRVIwMF9UWVBFIChCQVNFX0FERFIgICsgMHg0MCApKQorI2RlZmluZSBUSU1FUjFfQ1JfQl9NU0sgKDB4MjApCisjZGVmaW5lIFRJTUVSMV9DUl9CX09GU1QgKDB4NSkKKyNkZWZpbmUgVElNRVIxX0NSX1NfTVNLICAoMHgxMCkKKyNkZWZpbmUgVElNRVIxX0NSX1NfT0ZTVCAoMHg0KQorI2RlZmluZSBUSU1FUjFfQ1JfQ0lfTVNLICgweDA4KQorI2RlZmluZSBUSU1FUjFfQ1JfQ0lfT0ZTVCAoMHgzKQorI2RlZmluZSBUSU1FUjFfQ1JfSUVfTVNLICgweDA0KQorI2RlZmluZSBUSU1FUjFfQ1JfSUVfT0ZTVCAoMHgyKQorI2RlZmluZSBUSU1FUjFfQ1JfTU9ERV9NU0sgKDB4MykKKyNkZWZpbmUgVElNRVIxX0NSX01PREVfT0ZTVCAoMCkKKyNkZWZpbmUgVElNRVIxX0NSX01PREVfRlJFRSAoMCkKKyNkZWZpbmUgVElNRVIxX0NSX01PREVfT05FICAoMSkKKyNkZWZpbmUgVElNRVIxX0NSX01PREVfSU5UVkwgKDIpCisKKyNkZWZpbmUgVElNRVIxX1NSKEJBU0VfQUREUikgKFRJTUVSMDBfVFlQRSAoQkFTRV9BRERSICArIDB4NDAgKSkKKyNkZWZpbmUgVElNRVIxX1NSX0JfTVNLICgweDIwKQorI2RlZmluZSBUSU1FUjFfU1JfQl9PRlNUICgweDUpCisjZGVmaW5lIFRJTUVSMV9TUl9TX01TSyAgKDB4MTApCisjZGVmaW5lIFRJTUVSMV9TUl9TX09GU1QgKDB4NCkKKyNkZWZpbmUgVElNRVIxX1NSX0NJX01TSyAoMHgwOCkKKyNkZWZpbmUgVElNRVIxX1NSX0NJX09GU1QgKDB4MykKKyNkZWZpbmUgVElNRVIxX1NSX0lFX01TSyAoMHgwNCkKKyNkZWZpbmUgVElNRVIxX1NSX0lFX09GU1QgKDB4MikKKyNkZWZpbmUgVElNRVIxX1NSX01PREVfTVNLICgweDMpCisjZGVmaW5lIFRJTUVSMV9TUl9NT0RFX09GU1QgKDApCisjZGVmaW5lIFRJTUVSMV9TUl9NT0RFX0ZSRUUgKDApCisjZGVmaW5lIFRJTUVSMV9TUl9NT0RFX09ORSAgKDEpCisjZGVmaW5lIFRJTUVSMV9TUl9NT0RFX0lOVFZMICgyKQorCisjZGVmaW5lIFRJTUVSMV9QUkVTQ0FMRShCQVNFX0FERFIpIChUSU1FUjAwX1RZUEUgKEJBU0VfQUREUiAgKyAweDA1MCApKQorI2RlZmluZSBUSU1FUjFfTElNSVQoQkFTRV9BRERSKSAoVElNRVIwMF9UWVBFIChCQVNFX0FERFIgICsgMHgwNjAgKSkKKyNkZWZpbmUgVElNRVIxX1JFQUQoQkFTRV9BRERSKSAoVElNRVIwMF9UWVBFIChCQVNFX0FERFIgICsgMHgwNzAgKSkKKworI2VuZGlmIC8qIF9fVElNRVIwMF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi90aW1leC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvdGltZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODdhNzVmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvdGltZXguaApAQCAtMCwwICsxLDI2IEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL3RpbWV4LmgKKyAqCisgKiAgRXhjYWxpYnVyIHRpbWV4IHNwZWNpZmljYXRpb25zCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMSBBbHRlcmEgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworLyoKKyAqID8/CisgKi8KKyNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFCQkoNTAwMDAwMDAgLyAxNikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL3VhcnQwMC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvdWFydDAwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFiZDg5MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL3VhcnQwMC5oCkBAIC0wLDAgKzEsMTgxIEBACisvKiAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxIEFsdGVyYSBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworI2lmbmRlZiBfX1VBUlQwMF9ICisjZGVmaW5lIF9fVUFSVDAwX0gKKworLyoKKyAqIFJlZ2lzdGVyIGRlZmluaXRpb25zIGZvciB0aGUgVUFSVAorICovCisKKyNkZWZpbmUgVUFSVF9UWF9GSUZPX1NJWkUgICAgICAoMTUpCisKKyNkZWZpbmUgVUFSVF9SU1IoQkFTRV9BRERSKSAoVUFSVDAwX1RZUEUgKEJBU0VfQUREUiAgKyAweDAwICkpCisjZGVmaW5lIFVBUlRfUlNSX1JYX0xFVkVMX01TSyAoMHgxZikKKyNkZWZpbmUgVUFSVF9SU1JfUlhfTEVWRUxfT0ZTVCAoMCkKKyNkZWZpbmUgVUFSVF9SU1JfUkVfTVNLICgweDgwKQorI2RlZmluZSBVQVJUX1JTUl9SRV9PRlNUICg3KQorCisjZGVmaW5lIFVBUlRfUkRTKEJBU0VfQUREUikgKFVBUlQwMF9UWVBFIChCQVNFX0FERFIgICsgMHgwNCApKQorI2RlZmluZSBVQVJUX1JEU19CSV9NU0sgKDB4OCkKKyNkZWZpbmUgVUFSVF9SRFNfQklfT0ZTVCAoNCkKKyNkZWZpbmUgVUFSVF9SRFNfRkVfTVNLICgweDQpCisjZGVmaW5lIFVBUlRfUkRTX0ZFX09GU1QgKDIpCisjZGVmaW5lIFVBUlRfUkRTX1BFX01TSyAoMHgyKQorI2RlZmluZSBVQVJUX1JEU19QRV9PRlNUICgxKQorI2RlZmluZSBVQVJUX1JEU19PRV9NU0sgKDB4MSkKKyNkZWZpbmUgVUFSVF9SRFNfT0VfT0ZTVCAoMCkKKworI2RlZmluZSBVQVJUX1JEKEJBU0VfQUREUikgKFVBUlQwMF9UWVBFIChCQVNFX0FERFIgICsgMHgwOCApKQorI2RlZmluZSBVQVJUX1JEX1JYX0RBVEFfTVNLICgweGZmKQorI2RlZmluZSBVQVJUX1JEX1JYX0RBVEFfT0ZTVCAoMCkKKworI2RlZmluZSBVQVJUX1RTUihCQVNFX0FERFIpIChVQVJUMDBfVFlQRSAoQkFTRV9BRERSICArIDB4MGMgKSkKKyNkZWZpbmUgVUFSVF9UU1JfVFhfTEVWRUxfTVNLICgweDFmKQorI2RlZmluZSBVQVJUX1RTUl9UWF9MRVZFTF9PRlNUICgwKQorI2RlZmluZSBVQVJUX1RTUl9UWElfTVNLICgweDgwKQorI2RlZmluZSBVQVJUX1RTUl9UWElfT0ZTVCAoNykKKworI2RlZmluZSBVQVJUX1REKEJBU0VfQUREUikgKFVBUlQwMF9UWVBFIChCQVNFX0FERFIgICsgMHgxMCApKQorI2RlZmluZSBVQVJUX1REX1RYX0RBVEFfTVNLICgweGZmKQorI2RlZmluZSBVQVJUX1REX1RYX0RBVEFfT0ZTVCAoMCkKKworI2RlZmluZSBVQVJUX0ZDUihCQVNFX0FERFIpIChVQVJUMDBfVFlQRSAoQkFTRV9BRERSICArIDB4MTQgKSkKKyNkZWZpbmUgVUFSVF9GQ1JfUlhfVEhSX01TSyAoMHhkMCkKKyNkZWZpbmUgVUFSVF9GQ1JfUlhfVEhSX09GU1QgKDUpCisjZGVmaW5lIFVBUlRfRkNSX1JYX1RIUl8xICgweDAwKQorI2RlZmluZSBVQVJUX0ZDUl9SWF9USFJfMiAoMHgyMCkKKyNkZWZpbmUgVUFSVF9GQ1JfUlhfVEhSXzQgKDB4NDApCisjZGVmaW5lIFVBUlRfRkNSX1JYX1RIUl82ICgweDYwKQorI2RlZmluZSBVQVJUX0ZDUl9SWF9USFJfOCAoMHg4MCkKKyNkZWZpbmUgVUFSVF9GQ1JfUlhfVEhSXzEwICgweGEwKQorI2RlZmluZSBVQVJUX0ZDUl9SWF9USFJfMTIgKDB4YzApCisjZGVmaW5lIFVBUlRfRkNSX1JYX1RIUl8xNCAoMHhkMCkKKyNkZWZpbmUgVUFSVF9GQ1JfVFhfVEhSX01TSyAoMHgxYykKKyNkZWZpbmUgVUFSVF9GQ1JfVFhfVEhSX09GU1QgKDIpCisjZGVmaW5lIFVBUlRfRkNSX1RYX1RIUl8wICgweDAwKQorI2RlZmluZSBVQVJUX0ZDUl9UWF9USFJfMiAoMHgwNCkKKyNkZWZpbmUgVUFSVF9GQ1JfVFhfVEhSXzQgKDB4MDgpCisjZGVmaW5lIFVBUlRfRkNSX1RYX1RIUl84ICgweDBjKQorI2RlZmluZSBVQVJUX0ZDUl9UWF9USFJfMTAgKDB4MTApCisjZGVmaW5lIFVBUlRfRkNSX1RYX1RIUl8xMiAoMHgxNCkKKyNkZWZpbmUgVUFSVF9GQ1JfVFhfVEhSXzE0ICgweDE4KQorI2RlZmluZSBVQVJUX0ZDUl9UWF9USFJfMTUgKDB4MWMpCisjZGVmaW5lIFVBUlRfRkNSX1JDX01TSyAoMHgwMikKKyNkZWZpbmUgVUFSVF9GQ1JfUkNfT0ZTVCAoMSkKKyNkZWZpbmUgVUFSVF9GQ1JfVENfTVNLICgweDAxKQorI2RlZmluZSBVQVJUX0ZDUl9UQ19PRlNUICgwKQorCisjZGVmaW5lIFVBUlRfSUVTKEJBU0VfQUREUikgKFVBUlQwMF9UWVBFIChCQVNFX0FERFIgICsgMHgxOCApKQorI2RlZmluZSBVQVJUX0lFU19NRV9NU0sgKDB4OCkKKyNkZWZpbmUgVUFSVF9JRVNfTUVfT0ZTVCAoMykKKyNkZWZpbmUgVUFSVF9JRVNfVElFX01TSyAoMHg0KQorI2RlZmluZSBVQVJUX0lFU19USUVfT0ZTVCAoMikKKyNkZWZpbmUgVUFSVF9JRVNfVEVfTVNLICgweDIpCisjZGVmaW5lIFVBUlRfSUVTX1RFX09GU1QgKDEpCisjZGVmaW5lIFVBUlRfSUVTX1JFX01TSyAoMHgxKQorI2RlZmluZSBVQVJUX0lFU19SRV9PRlNUICgwKQorCisjZGVmaW5lIFVBUlRfSUVDKEJBU0VfQUREUikgKFVBUlQwMF9UWVBFIChCQVNFX0FERFIgICsgMHgxYyApKQorI2RlZmluZSBVQVJUX0lFQ19NRV9NU0sgKDB4OCkKKyNkZWZpbmUgVUFSVF9JRUNfTUVfT0ZTVCAoMykKKyNkZWZpbmUgVUFSVF9JRUNfVElFX01TSyAoMHg0KQorI2RlZmluZSBVQVJUX0lFQ19USUVfT0ZTVCAoMikKKyNkZWZpbmUgVUFSVF9JRUNfVEVfTVNLICgweDIpCisjZGVmaW5lIFVBUlRfSUVDX1RFX09GU1QgKDEpCisjZGVmaW5lIFVBUlRfSUVDX1JFX01TSyAoMHgxKQorI2RlZmluZSBVQVJUX0lFQ19SRV9PRlNUICgwKQorCisjZGVmaW5lIFVBUlRfSVNSKEJBU0VfQUREUikgKFVBUlQwMF9UWVBFIChCQVNFX0FERFIgICsgMHgyMCApKQorI2RlZmluZSBVQVJUX0lTUl9NSV9NU0sgKDB4OCkKKyNkZWZpbmUgVUFSVF9JU1JfTUlfT0ZTVCAoMykKKyNkZWZpbmUgVUFSVF9JU1JfVElJX01TSyAoMHg0KQorI2RlZmluZSBVQVJUX0lTUl9USUlfT0ZTVCAoMikKKyNkZWZpbmUgVUFSVF9JU1JfVElfTVNLICgweDIpCisjZGVmaW5lIFVBUlRfSVNSX1RJX09GU1QgKDEpCisjZGVmaW5lIFVBUlRfSVNSX1JJX01TSyAoMHgxKQorI2RlZmluZSBVQVJUX0lTUl9SSV9PRlNUICgwKQorCisjZGVmaW5lIFVBUlRfSUlEKEJBU0VfQUREUikgKFVBUlQwMF9UWVBFIChCQVNFX0FERFIgICsgMHgyNCApKQorI2RlZmluZSBVQVJUX0lJRF9JSURfTVNLICgweDcpCisjZGVmaW5lIFVBUlRfSUlEX0lJRF9PRlNUICgwKQorCisjZGVmaW5lIFVBUlRfTUMoQkFTRV9BRERSKSAoVUFSVDAwX1RZUEUgKEJBU0VfQUREUiAgKyAweDI4ICkpCisjZGVmaW5lIFVBUlRfTUNfT0VfTVNLICgweDQwKQorI2RlZmluZSBVQVJUX01DX09FX09GU1QgKDYpCisjZGVmaW5lIFVBUlRfTUNfU1BfTVNLICgweDIwKQorI2RlZmluZSBVQVJUX01DX1NQX09GU1QgKDUpCisjZGVmaW5lIFVBUlRfTUNfRVBfTVNLICgweDEwKQorI2RlZmluZSBVQVJUX01DX0VQX09GU1QgKDQpCisjZGVmaW5lIFVBUlRfTUNfUEVfTVNLICgweDA4KQorI2RlZmluZSBVQVJUX01DX1BFX09GU1QgKDMpCisjZGVmaW5lIFVBUlRfTUNfU1RfTVNLICgweDA0KQorI2RlZmluZSBVQVJUX01DX1NUX09ORSAoMHgwKQorI2RlZmluZSBVQVJUX01DX1NUX1RXTyAoMHgwNCkKKyNkZWZpbmUgVUFSVF9NQ19TVF9PRlNUICgyKQorI2RlZmluZSBVQVJUX01DX0NMU19NU0sgKDB4MDMpCisjZGVmaW5lIFVBUlRfTUNfQ0xTX09GU1QgKDApCisjZGVmaW5lIFVBUlRfTUNfQ0xTX0NIQVJMRU5fNSAoMCkKKyNkZWZpbmUgVUFSVF9NQ19DTFNfQ0hBUkxFTl82ICgxKQorI2RlZmluZSBVQVJUX01DX0NMU19DSEFSTEVOXzcgKDIpCisjZGVmaW5lIFVBUlRfTUNfQ0xTX0NIQVJMRU5fOCAoMykKKworI2RlZmluZSBVQVJUX01DUihCQVNFX0FERFIpIChVQVJUMDBfVFlQRSAoQkFTRV9BRERSICArIDB4MmMgKSkKKyNkZWZpbmUgVUFSVF9NQ1JfQUNfTVNLICgweDgwKQorI2RlZmluZSBVQVJUX01DUl9BQ19PRlNUICg3KQorI2RlZmluZSBVQVJUX01DUl9BUl9NU0sgKDB4NDApCisjZGVmaW5lIFVBUlRfTUNSX0FSX09GU1QgKDYpCisjZGVmaW5lIFVBUlRfTUNSX0JSX01TSyAoMHgyMCkKKyNkZWZpbmUgVUFSVF9NQ1JfQlJfT0ZTVCAoNSkKKyNkZWZpbmUgVUFSVF9NQ1JfTEJfTVNLICgweDEwKQorI2RlZmluZSBVQVJUX01DUl9MQl9PRlNUICg0KQorI2RlZmluZSBVQVJUX01DUl9EQ0RfTVNLICgweDA4KQorI2RlZmluZSBVQVJUX01DUl9EQ0RfT0ZTVCAoMykKKyNkZWZpbmUgVUFSVF9NQ1JfUklfTVNLICgweDA0KQorI2RlZmluZSBVQVJUX01DUl9SSV9PRlNUICgyKQorI2RlZmluZSBVQVJUX01DUl9EVFJfTVNLICgweDAyKQorI2RlZmluZSBVQVJUX01DUl9EVFJfT0ZTVCAoMSkKKyNkZWZpbmUgVUFSVF9NQ1JfUlRTX01TSyAoMHgwMSkKKyNkZWZpbmUgVUFSVF9NQ1JfUlRTX09GU1QgKDApCisKKyNkZWZpbmUgVUFSVF9NU1IoQkFTRV9BRERSKSAoVUFSVDAwX1RZUEUgKEJBU0VfQUREUiAgKyAweDMwICkpCisjZGVmaW5lIFVBUlRfTVNSX0RDRF9NU0sgKDB4ODApCisjZGVmaW5lIFVBUlRfTVNSX0RDRF9PRlNUICg3KQorI2RlZmluZSBVQVJUX01TUl9SSV9NU0sgKDB4NDApCisjZGVmaW5lIFVBUlRfTVNSX1JJX09GU1QgKDYpCisjZGVmaW5lIFVBUlRfTVNSX0RTUl9NU0sgKDB4MjApCisjZGVmaW5lIFVBUlRfTVNSX0RTUl9PRlNUICg1KQorI2RlZmluZSBVQVJUX01TUl9DVFNfTVNLICgweDEwKQorI2RlZmluZSBVQVJUX01TUl9DVFNfT0ZTVCAoNCkKKyNkZWZpbmUgVUFSVF9NU1JfRERDRF9NU0sgKDB4MDgpCisjZGVmaW5lIFVBUlRfTVNSX0REQ0RfT0ZTVCAoMykKKyNkZWZpbmUgVUFSVF9NU1JfVEVSSV9NU0sgKDB4MDQpCisjZGVmaW5lIFVBUlRfTVNSX1RFUklfT0ZTVCAoMikKKyNkZWZpbmUgVUFSVF9NU1JfRERTUl9NU0sgKDB4MDIpCisjZGVmaW5lIFVBUlRfTVNSX0REU1JfT0ZTVCAoMSkKKyNkZWZpbmUgVUFSVF9NU1JfRENUU19NU0sgKDB4MDEpCisjZGVmaW5lIFVBUlRfTVNSX0RDVFNfT0ZTVCAoMCkKKworI2RlZmluZSBVQVJUX0RJVl9MTyhCQVNFX0FERFIpIChVQVJUMDBfVFlQRSAoQkFTRV9BRERSICArIDB4MzQgKSkKKyNkZWZpbmUgVUFSVF9ESVZfTE9fRElWX01TSyAoMHhmZikKKyNkZWZpbmUgVUFSVF9ESVZfTE9fRElWX09GU1QgKDApCisKKyNkZWZpbmUgVUFSVF9ESVZfSEkoQkFTRV9BRERSKSAoVUFSVDAwX1RZUEUgKEJBU0VfQUREUiAgKyAweDM4ICkpCisjZGVmaW5lIFVBUlRfRElWX0hJX0RJVl9NU0sgKDB4ZmYpCisjZGVmaW5lIFVBUlRfRElWX0hJX0RJVl9PRlNUICgwKQorCisjZW5kaWYgLyogX19VQVJUMDBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvdW5jb21wcmVzcy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvdW5jb21wcmVzcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzM2FkNmEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi91bmNvbXByZXNzLmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi91bmNvbXByZXNzLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5IEFSTSBMaW1pdGVkCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxIEFsdGVyYSBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworI2luY2x1ZGUgImFzbS9hcmNoL3BsYXRmb3JtLmgiCisjaW5jbHVkZSAiYXNtL2FyY2gvaGFyZHdhcmUuaCIKKyNkZWZpbmUgVUFSVDAwX1RZUEUgKHZvbGF0aWxlIHVuc2lnbmVkIGludCopCisjaW5jbHVkZSAiYXNtL2FyY2gvdWFydDAwLmgiCisKKy8qCisgKiBUaGlzIGRvZXMgbm90IGFwcGVuZCBhIG5ld2xpbmUKKyAqLworc3RhdGljIHZvaWQgcHV0c3RyKGNvbnN0IGNoYXIgKnMpCit7CisJd2hpbGUgKCpzKSB7CisJCXdoaWxlICgoKlVBUlRfVFNSKEVYQ19VQVJUMDBfQkFTRSkgJgorCQkgICAgICAgVUFSVF9UU1JfVFhfTEVWRUxfTVNLKT09MTUpCisJCQliYXJyaWVyKCk7CisKKwkJKlVBUlRfVEQoRVhDX1VBUlQwMF9CQVNFKSA9ICpzOworCisJCWlmICgqcyA9PSAnXG4nKSB7CisJCQl3aGlsZSAoKCpVQVJUX1RTUihFWENfVUFSVDAwX0JBU0UpICYKKwkJCSAgICAgICBVQVJUX1RTUl9UWF9MRVZFTF9NU0spPT0xNSkKKwkJCQliYXJyaWVyKCk7CisKKwkJCSpVQVJUX1REKEVYQ19VQVJUMDBfQkFTRSkgPSAnXHInOworCQl9CisJCXMrKzsKKwl9Cit9CisKKy8qCisgKiBub3RoaW5nIHRvIGRvCisgKi8KKyNkZWZpbmUgYXJjaF9kZWNvbXBfc2V0dXAoKQorCisjZGVmaW5lIGFyY2hfZGVjb21wX3dkb2coKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvdm1hbGxvYy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvdm1hbGxvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzMWVmODUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi92bWFsbG9jLmgKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi92bWFsbG9jLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwIFJ1c3NlbGwgS2luZy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworLyoKKyAqIEp1c3QgYW55IGFyYml0cmFyeSBvZmZzZXQgdG8gdGhlIHN0YXJ0IG9mIHRoZSB2bWFsbG9jIFZNIGFyZWE6IHRoZQorICogY3VycmVudCA4TUIgdmFsdWUganVzdCBtZWFucyB0aGF0IHRoZXJlIHdpbGwgYmUgYSA4TUIgImhvbGUiIGFmdGVyIHRoZQorICogcGh5c2ljYWwgbWVtb3J5IHVudGlsIHRoZSBrZXJuZWwgdmlydHVhbCBtZW1vcnkgc3RhcnRzLiAgVGhhdCBtZWFucyB0aGF0CisgKiBhbnkgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgd2lsbCBob3BlZnVsbHkgYmUgY2F1Z2h0LgorICogVGhlIHZtYWxsb2MoKSByb3V0aW5lcyBsZWF2ZXMgYSBob2xlIG9mIDRrQiBiZXR3ZWVuIGVhY2ggdm1hbGxvY2VkCisgKiBhcmVhIGZvciB0aGUgc2FtZSByZWFzb24uIDspCisgKi8KKyNkZWZpbmUgVk1BTExPQ19PRkZTRVQJICAoOCoxMDI0KjEwMjQpCisjZGVmaW5lIFZNQUxMT0NfU1RBUlQJICAoKCh1bnNpZ25lZCBsb25nKWhpZ2hfbWVtb3J5ICsgVk1BTExPQ19PRkZTRVQpICYgfihWTUFMTE9DX09GRlNFVC0xKSkKKyNkZWZpbmUgVk1BTExPQ19FTkQgICAgICAgKFBBR0VfT0ZGU0VUICsgMHgxMDAwMDAwMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWg3MjB4L2JvYXJkcy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaDcyMHgvYm9hcmRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAyMWY4MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWg3MjB4L2JvYXJkcy5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1oNzIweC9ib2FyZHMuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMyBUaG9tYXMgR2xlaXhuZXIgPHRnbHhAbGludXRyb25peC5kZT4KKyAqICAgICAgICAgICAoQykgMjAwMyBSb2JlcnQgU2Nod2ViZWwgPHIuc2Nod2ViZWxAcGVuZ3V0cm9uaXguZGU+CisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBib2FyZCBzcGVjaWZpYyBkZWZpbmVzIGZvciB2YXJpb3VzIGRldmljZXMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9IQVJEV0FSRV9JTkNNQUNIX0gKKyNlcnJvciBEbyBub3QgaW5jbHVkZSB0aGlzIGZpbGUgZGlyZWN0bHkuIEluY2x1ZGUgYXNtL2hhcmR3YXJlLmggaW5zdGVhZCAhCisjZW5kaWYKKworLyogSHluaXggSDcyMDIgZGV2ZWxvcGVyIGJvYXJkIHNwZWNpZmljIGRldmljZSBkZWZpbmVzICovCisjaWZkZWYgQ09ORklHX0FSQ0hfSDcyMDIKKworLyogRkxBU0ggKi8KKyNkZWZpbmUgRkxBU0hfVklSVAkJMHhkMDAwMDAwMAorI2RlZmluZSBGTEFTSF9QSFlTCQkweDAwMDAwMDAwCisjZGVmaW5lIEZMQVNIX1NJWkUJCTB4MDIwMDAwMDAKKworLyogb25ib2FyZCBMQU4gY29udHJvbGxlciAqLworIyBkZWZpbmUgRVRIMF9QSFlTCQkweDA4MDAwMDAwCisKKy8qIFRvdWNoIHNjcmVlbiBkZWZpbmVzICovCisvKiBHUElPIFBvcnQgKi8KKyNkZWZpbmUgUEVOX0dQSU8JCUdQSU9fQl9WSVJUCisvKiBCaXRtYXNrIGZvciBwZW4gZG93biBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgUEVOX0lOVF9CSVQJCSgxPDw3KQorLyogQml0bWFzayBmb3IgcGVuIHVwIGludGVycnVwdCAqLworI2RlZmluZSBQRU5fRU5BX0JJVAkJKDE8PDYpCisvKiBwZW4gdXAgaW50ZXJydXB0ICovCisjZGVmaW5lIElSUV9QRU4JCQlJUlFfTVVYX0dQSU9CKDcpCisKKyNlbmRpZgorCisvKiBIeW5peCBINzIwMSBkZXZlbG9wZXIgYm9hcmQgc3BlY2lmaWMgZGV2aWNlIGRlZmluZXMgKi8KKyNpZiBkZWZpbmVkIChDT05GSUdfQVJDSF9INzIwMSkKKy8qIFJPTSBESVNLIFNQQUNFICovCisjZGVmaW5lIFJPTV9ESVNLX0JBU0UgICAgICAgICAgIDB4YzE4MDAwMDAKKyNkZWZpbmUgUk9NX0RJU0tfU1RBUlQgICAgICAgICAgMHg0MTgwMDAwMAorI2RlZmluZSBST01fRElTS19TSVpFICAgICAgICAgICAweDAwNzAwMDAwCisKKy8qIFNSQU0gRElTSyBTUEFDRSAqLworI2RlZmluZSBTUkFNX0RJU0tfQkFTRSAgICAgICAgICAweGYxMDAwMDAwCisjZGVmaW5lIFNSQU1fRElTS19TVEFSVCAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgU1JBTV9ESVNLX1NJWkUgICAgICAgICAgMHgwMDQwMDAwMAorI2VuZGlmCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWg3MjB4L2RlYnVnLW1hY3JvLlMgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1oNzIweC9kZWJ1Zy1tYWNyby5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyODIyZDMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1oNzIweC9kZWJ1Zy1tYWNyby5TCkBAIC0wLDAgKzEsNDAgQEAKKy8qIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWg3MjB4L2RlYnVnLW1hY3JvLlMKKyAqCisgKiBEZWJ1Z2dpbmcgbWFjcm8gaW5jbHVkZSBoZWFkZXIKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk0LTE5OTkgUnVzc2VsbCBLaW5nCisgKiAgTW92ZWQgZnJvbSBsaW51eC9hcmNoL2FybS9rZXJuZWwvZGVidWcuUyBieSBCZW4gRG9va3MKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyovCisKKwkJLmVxdSAgICBpb192aXJ0LCBJT19CQVNFCisJCS5lcXUgICAgaW9fcGh5cywgSU9fU1RBUlQKKworCQkubWFjcm8gIGFkZHJ1YXJ0LHJ4CisJCW1yYyAgICAgcDE1LCAwLCBccngsIGMxLCBjMAorCQl0c3QgICAgIFxyeCwgIzEgIAkgICAgICAgQCBNTVUgZW5hYmxlZD8KKwkJbW92ZXEgICBccngsICNpb19waHlzCSAgICAgICBAIHBoeXNpY2FsIGJhc2UgYWRkcmVzcworCQltb3ZuZSAgIFxyeCwgI2lvX3ZpcnQJICAgICAgIEAgdmlydHVhbCBhZGRyZXNzCisJCWFkZCAgICAgXHJ4LCBccngsICMweDAwMDIwMDAwICAgQCBVQVJUMQorCQkuZW5kbQorCisJCS5tYWNybyAgc2VuZHVhcnQscmQscngKKwkJc3RyICAgICBccmQsIFtccngsICMweDBdICAgICAgICBAIFVBUlREUgorCisJCS5lbmRtCisKKwkJLm1hY3JvICB3YWl0dWFydCxyZCxyeAorMTAwMToJCWxkciAgICAgXHJkLCBbXHJ4LCAjMHgxOF0gICAgICAgQCBVQVJURkxHCisJCXRzdCAgICAgXHJkLCAjMSA8PCA1CSAgICAgICBAIFVBUlRGTEdVVFhGRiAtIDEgd2hlbiBmdWxsCisJCWJuZSAgICAgMTAwMWIKKwkJLmVuZG0KKworCQkubWFjcm8gIGJ1c3l1YXJ0LHJkLHJ4CisxMDAxOgkJbGRyICAgICBccmQsIFtccngsICMweDE4XSAgICAgICBAIFVBUlRGTEcKKwkJdHN0ICAgICBccmQsICMxIDw8IDMJICAgICAgIEAgVUFSVEZMR1VCVVNZIC0gMSB3aGVuIGJ1c3kKKwkJYm5lICAgICAxMDAxYgorCQkuZW5kbQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaDcyMHgvZG1hLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1oNzIweC9kbWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmM2NjM2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaDcyMHgvZG1hLmgKQEAgLTAsMCArMSwyNiBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWg3MjB4L2RtYS5oCisgKgorICogQXJjaGl0ZWN0dXJlIERNQSByb3V0ZXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTcuMTk5OCBSdXNzZWxsIEtpbmcKKyAqLworI2lmbmRlZiBfX0FTTV9BUkNIX0RNQV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfRE1BX0gKKworLyoKKyAqIFRoaXMgaXMgdGhlIG1heGltdW0gRE1BIGFkZHJlc3MgdGhhdCBjYW4gYmUgRE1BZCB0by4KKyAqIFRoZXJlIHNob3VsZCBub3QgYmUgbW9yZSB0aGFuICgweGQwMDAwMDAwIC0gMHhjMDAwMDAwMCkKKyAqIGJ5dGVzIG9mIFJBTS4KKyAqLworI2RlZmluZSBNQVhfRE1BX0FERFJFU1MJCTB4ZDAwMDAwMDAKKworI2lmIGRlZmluZWQgKENPTkZJR19DUFVfSDcyMDEpCisjZGVmaW5lIE1BWF9ETUFfQ0hBTk5FTFMJMworI2VsaWYgZGVmaW5lZCAoQ09ORklHX0NQVV9INzIwMikKKyNkZWZpbmUgTUFYX0RNQV9DSEFOTkVMUwk0CisjZWxzZQorI2Vycm9yIHByb2Nlc3NvciBkZWZpbml0aW9uIG1pc3NtYXRjaAorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX0RNQV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1oNzIweC9lbnRyeS1tYWNyby5TIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaDcyMHgvZW50cnktbWFjcm8uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjE2NTY0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaDcyMHgvZW50cnktbWFjcm8uUwpAQCAtMCwwICsxLDYwIEBACisvKgorICogaW5jbHVkZS9hc20tYXJtL2FyY2gtaDcyMHgvZW50cnktbWFjcm8uUworICoKKyAqIExvdy1sZXZlbCBJUlEgaGVscGVyIG1hY3JvcyBmb3IgSHluaXggSE1TNzIweCBiYXNlZCBwbGF0Zm9ybXMKKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisJCS5tYWNybyAgZGlzYWJsZV9maXEKKwkJLmVuZG0KKworCQkubWFjcm8gIGdldF9pcnFucl9hbmRfYmFzZSwgaXJxbnIsIGlycXN0YXQsIGJhc2UsIHRtcAorI2lmIGRlZmluZWQgKENPTkZJR19DUFVfSDcyMDEpIHx8IGRlZmluZWQgKENPTkZJR19DUFVfSDcyMDIpCisJCUAgd2UgY291bGQgdXNlIHRoZSBpZCByZWdpc3RlciBvbiBINzIwMiwgYnV0IHRoaXMgaXMgbm90CisJCUAgcHJvcGVybHkgdXBkYXRlZCB3aGVuIHdlIGNvbWUgYmFjayBmcm9tIGFzbV9kb19pcnEKKwkJQCB3aXRob3V0IGEgcHJldmlvdXMgcmV0dXJuIGZyb20gaW50ZXJydXB0CisJCUAgKHNlZSBsb29wcyBiZWxvdyBpbiBpcnFfc3ZjLCBpcnFfdXNyKQorCQlAIFdlIHNlZSB1bm1hc2tlZCBwZW5kaW5nIGludHMgb25seSwgYXMgdGhlIG1hc2tlZCBwZW5kaW5nIGludHMKKwkJQCBhcmUgbm90IHZpc2libGUgaGVyZQorCisJCW1vdiAgICAgXGJhc2UsICMweGYwMDAwMDAwCSAgICAgICBAIGJhc2UgcmVnaXN0ZXIKKwkJb3JyICAgICBcYmFzZSwgXGJhc2UsICMweDI0MDAwCSAgICAgICBAIGlycWJhc2UKKwkJbGRyICAgICBcaXJxc3RhdCwgW1xiYXNlLCAjMHgwNF0gICAgICAgIEAgZ2V0IGludGVycnVwdCBzdGF0dXMKKyNpZiBkZWZpbmVkIChDT05GSUdfQ1BVX0g3MjAxKQorCQlsZHIJXHRtcCwgPTB4MDAxZmZmZmYKKyNlbHNlCisJCW12biAgICAgXHRtcCwgIzB4YzAwMDAwMDAKKyNlbmRpZgorCQlhbmQgICAgIFxpcnFzdGF0LCBcaXJxc3RhdCwgXHRtcCAgICAgICAgQCBtYXNrIG91dCB1bnVzZWQgaW50cworCQltb3YgICAgIFxpcnFuciwgIzAKKworCQltb3YgICAgIFx0bXAsICMweGZmMDAKKwkJb3JyICAgICBcdG1wLCBcdG1wLCAjMHhmZgorCQl0c3QgICAgIFxpcnFzdGF0LCBcdG1wCisJCWFkZGVxICAgXGlycW5yLCBcaXJxbnIsICMxNgorCQltb3ZlcSAgIFxpcnFzdGF0LCBcaXJxc3RhdCwgbHNyICMxNgorCQl0c3QgICAgIFxpcnFzdGF0LCAjMjU1CisJCWFkZGVxICAgXGlycW5yLCBcaXJxbnIsICM4CisJCW1vdmVxICAgXGlycXN0YXQsIFxpcnFzdGF0LCBsc3IgIzgKKwkJdHN0ICAgICBcaXJxc3RhdCwgIzE1CisJCWFkZGVxICAgXGlycW5yLCBcaXJxbnIsICM0CisJCW1vdmVxICAgXGlycXN0YXQsIFxpcnFzdGF0LCBsc3IgIzQKKwkJdHN0ICAgICBcaXJxc3RhdCwgIzMKKwkJYWRkZXEgICBcaXJxbnIsIFxpcnFuciwgIzIKKwkJbW92ZXEgICBcaXJxc3RhdCwgXGlycXN0YXQsIGxzciAjMgorCQl0c3QgICAgIFxpcnFzdGF0LCAjMQorCQlhZGRlcSAgIFxpcnFuciwgXGlycW5yLCAjMQorCQltb3ZlcSAgIFxpcnFzdGF0LCBcaXJxc3RhdCwgbHNyICMxCisJCXRzdCAgICAgXGlycXN0YXQsICMxCQkgICAgICAgQCBiaXQgMCBzaG91bGQgYmUgc2V0CisJCS5lbmRtCisKKwkJLm1hY3JvICBpcnFfcHJpb190YWJsZQorCQkuZW5kbQorCisjZWxzZQorI2Vycm9yIGh5bml4IHByb2Nlc3NvciBzZWxlY3Rpb24gbWlzc21hdGNoCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaDcyMHgvaDcyMDEtcmVncy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaDcyMHgvaDcyMDEtcmVncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5ZDRmNmIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1oNzIweC9oNzIwMS1yZWdzLmgKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWg3MjB4L2g3MjAxLXJlZ3MuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBKdW5nanVuIEtpbSwgSHluaXggU2VtaWNvbmR1Y3RvciBJbmMuCisgKiAgICAgICAgICAgKEMpIDIwMDMgVGhvbWFzIEdsZWl4bmVyIDx0Z2x4QGxpbnV0cm9uaXguZGU+CisgKiAgICAgICAgICAgKEMpIDIwMDMgUm9iZXJ0IFNjaHdlYmVsIDxyLnNjaHdlYmVsQHBlbmd1dHJvbml4LmRlPgorICogICAgICAgICAgIChDKSAyMDA0IFNhc2NoYSBIYXVlciAgICA8cy5oYXVlckBwZW5ndXRyb25peC5kZT4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGhhcmR3YXJlIGRlZmluaXRpb25zIG9mIHRoZSBoNzIweCBwcm9jZXNzb3JzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBEbyBub3QgYWRkIGltcGxlbWVudGF0aW9ucyBzcGVjaWZpYyBkZWZpbmVzIGhlcmUuIFRoaXMgZmlsZXMgY29udGFpbnMKKyAqIG9ubHkgZGVmaW5lcyBvZiB0aGUgb25jaGlwIHBlcmlwaGVyYWxzLiBBZGQgdGhvc2UgZGVmaW5lcyB0byBib2FyZHMuaCwKKyAqIHdoaWNoIGlzIGluY2x1ZGVkIGJ5IHRoaXMgZmlsZS4KKyAqLworCisjZGVmaW5lIFNFUklBTDJfVklSVCAJCShJT19WSVJUICsgMHg1MDEwMCkKKyNkZWZpbmUgU0VSSUFMM19WSVJUIAkJKElPX1ZJUlQgKyAweDUwMjAwKQorCisvKgorICogUENNQ0lBCisgKi8KKyNkZWZpbmUgUENNQ0lBMF9BVFRfQkFTRSAgICAgICAgMHhlNTAwMDAwMAorI2RlZmluZSBQQ01DSUEwX0FUVF9TSVpFICAgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIFBDTUNJQTBfQVRUX1NUQVJUICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgUENNQ0lBMF9NRU1fQkFTRSAgICAgICAgMHhlNTIwMDAwMAorI2RlZmluZSBQQ01DSUEwX01FTV9TSVpFICAgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIFBDTUNJQTBfTUVNX1NUQVJUICAgICAgIDB4MjQwMDAwMDAKKyNkZWZpbmUgUENNQ0lBMF9JT19CQVNFICAgICAgICAgMHhlNTQwMDAwMAorI2RlZmluZSBQQ01DSUEwX0lPX1NJWkUgICAgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIFBDTUNJQTBfSU9fU1RBUlQgICAgICAgIDB4MjgwMDAwMDAKKworI2RlZmluZSBQQ01DSUExX0FUVF9CQVNFICAgICAgICAweGU1NjAwMDAwCisjZGVmaW5lIFBDTUNJQTFfQVRUX1NJWkUgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgUENNQ0lBMV9BVFRfU1RBUlQgICAgICAgMHgzMDAwMDAwMAorI2RlZmluZSBQQ01DSUExX01FTV9CQVNFICAgICAgICAweGU1ODAwMDAwCisjZGVmaW5lIFBDTUNJQTFfTUVNX1NJWkUgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgUENNQ0lBMV9NRU1fU1RBUlQgICAgICAgMHgzNDAwMDAwMAorI2RlZmluZSBQQ01DSUExX0lPX0JBU0UgICAgICAgICAweGU1YTAwMDAwCisjZGVmaW5lIFBDTUNJQTFfSU9fU0laRSAgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgUENNQ0lBMV9JT19TVEFSVCAgICAgICAgMHgzODAwMDAwMAorCisjZGVmaW5lIFBSSU1FM0NfQkFTRSAgICAgICAgICAgIDB4ZjAwNTAwMDAKKyNkZWZpbmUgUFJJTUUzQ19TSVpFICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBQUklNRTNDX1NUQVJUICAgICAgICAgICAweDEwMDAwMDAwCisKKy8qIFZHQSBDb250cm9sbGVyICovCisjZGVmaW5lIFZHQV9SQU1CQVNFIAkJMHg1MAorI2RlZmluZSBWR0FfVElNSU5HMCAJCTB4NjAKKyNkZWZpbmUgVkdBX1RJTUlORzEgCQkweDY0CisjZGVmaW5lIFZHQV9USU1JTkcyIAkJMHg2OAorI2RlZmluZSBWR0FfVElNSU5HMyAJCTB4NmMKKworI2RlZmluZSBMQ0RfQ1RSTF9WR0FfRU5BQkxFICAgCTB4MDAwMDAxMDAKKyNkZWZpbmUgTENEX0NUUkxfVkdBX0JQUF9NQVNLIAkweDAwMDAwNjAwCisjZGVmaW5lIExDRF9DVFJMX1ZHQV80QlBQICAgIAkweDAwMDAwMDAwCisjZGVmaW5lIExDRF9DVFJMX1ZHQV84QlBQICAgIAkweDAwMDAwMjAwCisjZGVmaW5lIExDRF9DVFJMX1ZHQV8xNkJQUCAgIAkweDAwMDAwMzAwCisjZGVmaW5lIExDRF9DVFJMX1NIQVJFX0RNQSAgICAJMHgwMDAwMDgwMAorI2RlZmluZSBMQ0RfQ1RSTF9WREUgICAgICAgICAgCTB4MDAxMDAwMDAKKyNkZWZpbmUgTENEX0NUUkxfTFBFICAgICAgICAgIAkweDAwNDAwMDAwCS8qIExDRCBQb3dlciBlbmFibGUgKi8KKyNkZWZpbmUgTENEX0NUUkxfQkxFICAgICAgICAgIAkweDAwODAwMDAwCS8qIExDRCBiYWNrbGlnaHQgZW5hYmxlICovCisKKyNkZWZpbmUgVkdBX1BBTEVUVEVfQkFTRQkoSU9fVklSVCArIDB4MTA4MDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1oNzIweC9oNzIwMi1yZWdzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1oNzIweC9oNzIwMi1yZWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNkOGJhOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWg3MjB4L2g3MjAyLXJlZ3MuaApAQCAtMCwwICsxLDE1NSBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWg3MjB4L2g3MjAyLXJlZ3MuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBKdW5nanVuIEtpbSwgSHluaXggU2VtaWNvbmR1Y3RvciBJbmMuCisgKiAgICAgICAgICAgKEMpIDIwMDMgVGhvbWFzIEdsZWl4bmVyIDx0Z2x4QGxpbnV0cm9uaXguZGU+CisgKiAgICAgICAgICAgKEMpIDIwMDMgUm9iZXJ0IFNjaHdlYmVsIDxyLnNjaHdlYmVsQHBlbmd1dHJvbml4LmRlPgorICogICAgICAgICAgIChDKSAyMDA0IFNhc2NoYSBIYXVlciAgICA8cy5oYXVlckBwZW5ndXRyb25peC5kZT4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGhhcmR3YXJlIGRlZmluaXRpb25zIG9mIHRoZSBoNzIweCBwcm9jZXNzb3JzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBEbyBub3QgYWRkIGltcGxlbWVudGF0aW9ucyBzcGVjaWZpYyBkZWZpbmVzIGhlcmUuIFRoaXMgZmlsZXMgY29udGFpbnMKKyAqIG9ubHkgZGVmaW5lcyBvZiB0aGUgb25jaGlwIHBlcmlwaGVyYWxzLiBBZGQgdGhvc2UgZGVmaW5lcyB0byBib2FyZHMuaCwKKyAqIHdoaWNoIGlzIGluY2x1ZGVkIGJ5IHRoaXMgZmlsZS4KKyAqLworCisjZGVmaW5lIFNFUklBTDJfT0ZTCQkweDJkMDAwCisjZGVmaW5lIFNFUklBTDJfQkFTRQkJKElPX1BIWVMgKyBTRVJJQUwyX09GUykKKyNkZWZpbmUgU0VSSUFMMl9WSVJUIAkJKElPX1ZJUlQgKyBTRVJJQUwyX09GUykKKyNkZWZpbmUgU0VSSUFMM19PRlMJCTB4MmUwMDAKKyNkZWZpbmUgU0VSSUFMM19CQVNFCQkoSU9fUEhZUyArIFNFUklBTDNfT0ZTKQorI2RlZmluZSBTRVJJQUwzX1ZJUlQgCQkoSU9fVklSVCArIFNFUklBTDNfT0ZTKQorCisvKiBNYXRyaXggS2V5Ym9hcmQgQ29udHJvbGxlciAqLworI2RlZmluZSBLQkRfVklSVAkJKElPX1ZJUlQgKyAweDIyMDAwKQorI2RlZmluZSBLQkRfS0JDUgkJMHgwMAorI2RlZmluZSBLQkRfS0JTQwkJMHgwNAorI2RlZmluZSBLQkRfS0JUUgkJMHgwOAorI2RlZmluZSBLQkRfS0JWUjAJCTB4MEMKKyNkZWZpbmUgS0JEX0tCVlIxCQkweDEwCisjZGVmaW5lIEtCRF9LQlNSCQkweDE4CisKKyNkZWZpbmUgS0JEX0tCQ1JfU0NBTkVOQUJMRQkoMSA8PCA3KQorI2RlZmluZSBLQkRfS0JDUl9OUE9XRVJET1dOCSgxIDw8IDIpCisjZGVmaW5lIEtCRF9LQkNSX0NMS1NFTF9NQVNLCSgzKQorI2RlZmluZSBLQkRfS0JDUl9DTEtTRUxfUENMSzIJMHgwCisjZGVmaW5lIEtCRF9LQkNSX0NMS1NFTF9QQ0xLMTI4CTB4MQorI2RlZmluZSBLQkRfS0JDUl9DTEtTRUxfUENMSzI1NgkweDIKKyNkZWZpbmUgS0JEX0tCQ1JfQ0xLU0VMX1BDTEs1MTIJMHgzCisKKyNkZWZpbmUgS0JEX0tCU1JfSU5UUgkJKDEgPDwgMCkKKyNkZWZpbmUgS0JEX0tCU1JfV0FLRVVQCQkoMSA8PCAxKQorCisvKiBVU0IgZGV2aWNlIGNvbnRyb2xsZXIgKi8KKworI2RlZmluZSBVU0JEX0JBU0UJCShJT19WSVJUICsgMHgxMjAwMCkKKyNkZWZpbmUgVVNCRF9MRU5HVEgJCTB4M0MKKworI2RlZmluZSBVU0JEX0dDVFJMCQkweDAwCisjZGVmaW5lIFVTQkRfRVBDVFJMCQkweDA0CisjZGVmaW5lIFVTQkRfSU5UTUFTSwkJMHgwOAorI2RlZmluZSBVU0JEX0lOVFNUQVQJCTB4MEMKKyNkZWZpbmUgVVNCRF9QV1IJCTB4MTAKKyNkZWZpbmUgVVNCRF9ETUFSWFRYCQkweDE0CisjZGVmaW5lIFVTQkRfREVWSUQJCTB4MTgKKyNkZWZpbmUgVVNCRF9ERVZDTEFTUwkJMHgxQworI2RlZmluZSBVU0JEX0lOVENMQVNTCQkweDIwCisjZGVmaW5lIFVTQkRfU0VUVVAwCQkweDI0CisjZGVmaW5lIFVTQkRfU0VUVVAxCQkweDI4CisjZGVmaW5lIFVTQkRfRU5EUDBSRAkJMHgyQworI2RlZmluZSBVU0JEX0VORFAwV1QJCTB4MzAKKyNkZWZpbmUgVVNCRF9FTkRQMVJECQkweDM0CisjZGVmaW5lIFVTQkRfRU5EUDJXVAkJMHgzOAorCisvKiBQUy8yIHBvcnQgKi8KKyNkZWZpbmUgUFNEQVRBIDB4MDAKKyNkZWZpbmUgUFNTVEFUIDB4MDQKKyNkZWZpbmUgUFNTVEFUX1RYRU1QVFkgKDE8PDApCisjZGVmaW5lIFBTU1RBVF9UWEJVU1kgKDE8PDEpCisjZGVmaW5lIFBTU1RBVF9SWEZVTEwgKDE8PDIpCisjZGVmaW5lIFBTU1RBVF9SWEJVU1kgKDE8PDMpCisjZGVmaW5lIFBTU1RBVF9DTEtJTiAoMTw8NCkKKyNkZWZpbmUgUFNTVEFUX0RBVEFJTiAoMTw8NSkKKyNkZWZpbmUgUFNTVEFUX1BBUklUWSAoMTw8NikKKworI2RlZmluZSBQU0NPTkYgMHgwOAorI2RlZmluZSBQU0NPTkZfRU5BQkxFICgxPDwwKQorI2RlZmluZSBQU0NPTkZfVFhJTlRFTiAoMTw8MikKKyNkZWZpbmUgUFNDT05GX1JYSU5URU4gKDE8PDMpCisjZGVmaW5lIFBTQ09ORl9GT1JDRUNMS0xPVyAoMTw8NCkKKyNkZWZpbmUgUFNDT05GX0ZPUkNFREFUTE9XICgxPDw1KQorI2RlZmluZSBQU0NPTkZfTENFICgxPDw2KQorCisjZGVmaW5lIFBTSU5UUiAweDBDCisjZGVmaW5lIFBTSU5UUl9UWElOVCAoMTw8MCkKKyNkZWZpbmUgUFNJTlRSX1JYSU5UICgxPDwxKQorI2RlZmluZSBQU0lOVFJfUEFSICgxPDwyKQorI2RlZmluZSBQU0lOVFJfUlhUTyAoMTw8MykKKyNkZWZpbmUgUFNJTlRSX1RYVE8gKDE8PDQpCisKKyNkZWZpbmUgUFNURExPIDB4MTAgLyogY2xrIGxvdyBiZWZvcmUgc3RhcnQgdHJhbnNtaXNzaW9uICovCisjZGVmaW5lIFBTVFBSSSAweDE0IC8qIFBSSSBjbG9jayAqLworI2RlZmluZSBQU1RYTVQgMHgxOCAvKiBtYXhpbXVtIHRyYW5zbWlzc2lvbiB0aW1lICovCisjZGVmaW5lIFBTVFJFQyAweDIwIC8qIG1heGltdW0gcmVjZWl2ZSB0aW1lICovCisjZGVmaW5lIFBTUFdETiAweDNjCisKKy8qIEFEQyBjb252ZXJ0ZXIgKi8KKyNkZWZpbmUgQURDX0JBU0UgCQkoSU9fVklSVCArIDB4MjkwMDApCisjZGVmaW5lIEFEQ19DUiAJCQkweDAwCisjZGVmaW5lIEFEQ19UU0NUUkwgCQkweDA0CisjZGVmaW5lIEFEQ19CVF9DVFJMIAkJMHgwOAorI2RlZmluZSBBRENfTUNfQ1RSTAkJMHgwQworI2RlZmluZSBBRENfU1RBVFVTCQkweDEwCisKKy8qIEFEQyBjb250cm9sIHJlZ2lzdGVyIGJpdHMgKi8KKyNkZWZpbmUgQURDX0NSX1BXX0NUUkwgCQkweDgwCisjZGVmaW5lIEFEQ19DUl9ESVJFQ1RDCQkweDA0CisjZGVmaW5lIEFEQ19DUl9DT05USU1FX05PCTB4MDAKKyNkZWZpbmUgQURDX0NSX0NPTlRJTUVfMgkweDA0CisjZGVmaW5lIEFEQ19DUl9DT05USU1FXzQJMHgwOAorI2RlZmluZSBBRENfQ1JfQ09OVElNRV9BREUJMHgwYworI2RlZmluZSBBRENfQ1JfTE9OR0NBTFRJTUUJMHgwMQorCisvKiBBREMgdG91Y2ggcGFuZWwgcmVnaXN0ZXIgYml0cyAqLworI2RlZmluZSBBRENfVFNDVFJMX0VOQUJMRSAJMHg4MAorI2RlZmluZSBBRENfVFNDVFJMX0lOVFIgICAJMHg0MAorI2RlZmluZQlBRENfVFNDVFJMX1NXQllQU1MJMHgyMAorI2RlZmluZSBBRENfVFNDVFJMX1NXSU5WVAkweDEwCisjZGVmaW5lIEFEQ19UU0NUUkxfUzQwMCAgIAkweDAzCisjZGVmaW5lIEFEQ19UU0NUUkxfUzIwMCAgIAkweDAyCisjZGVmaW5lIEFEQ19UU0NUUkxfUzEwMCAgIAkweDAxCisjZGVmaW5lIEFEQ19UU0NUUkxfUzUwICAgIAkweDAwCisKKy8qIEFEQyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIGJpdHMgKi8KKyNkZWZpbmUgQURDX1NUQVRVU19UU19CSVQJMHg4MAorI2RlZmluZSBBRENfU1RBVFVTX01CVF9CSVQJMHg0MAorI2RlZmluZSBBRENfU1RBVFVTX0JCVF9CSVQJMHgyMAorI2RlZmluZSBBRENfU1RBVFVTX01JQ19CSVQJMHgxMAorCisvKiBUb3VjaCBkYXRhIHJlZ2lzdGVycyAqLworI2RlZmluZSBBRENfVFNfWDBYMSAgCQkweDMwCisjZGVmaW5lIEFEQ19UU19YMlgzCQkweDM0CisjZGVmaW5lIEFEQ19UU19ZMFkxCQkweDM4CisjZGVmaW5lIEFEQ19UU19ZMlkzICAJCTB4M2MKKyNkZWZpbmUgQURDX1RTX1g0WDUgIAkJMHg0MAorI2RlZmluZSBBRENfVFNfWDZYNyAgCQkweDQ0CisjZGVmaW5lIEFEQ19UU19ZNFk1CQkweDQ4CisjZGVmaW5lIEFEQ19UU19ZNlk3CQkweDUwCisKKy8qIGJhdHRlcnkgZGF0YSAqLworI2RlZmluZSBBRENfTUJfREFUQQkJMHg1NAorI2RlZmluZSBBRENfQkJfREFUQQkJMHg1OAorCisvKiBTb3VuZCBkYXRhIHJlZ2lzdGVyICovCisjZGVmaW5lIEFEQ19TRF9EQVQwIAkJMHg2MAorI2RlZmluZSBBRENfU0RfREFUMQkJMHg2NAorI2RlZmluZSBBRENfU0RfREFUMgkJMHg2OAorI2RlZmluZSBBRENfU0RfREFUMwkJMHg2YworI2RlZmluZSBBRENfU0RfREFUNAkJMHg3MAorI2RlZmluZSBBRENfU0RfREFUNQkJMHg3NAorI2RlZmluZSBBRENfU0RfREFUNgkJMHg3OAorI2RlZmluZSBBRENfU0RfREFUNwkJMHg3YwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaDcyMHgvaGFyZHdhcmUuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWg3MjB4L2hhcmR3YXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGZiNzc4OQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWg3MjB4L2hhcmR3YXJlLmgKQEAgLTAsMCArMSwxOTIgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1oNzIweC9oYXJkd2FyZS5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwIEp1bmdqdW4gS2ltLCBIeW5peCBTZW1pY29uZHVjdG9yIEluYy4KKyAqICAgICAgICAgICAoQykgMjAwMyBUaG9tYXMgR2xlaXhuZXIgPHRnbHhAbGludXRyb25peC5kZT4KKyAqICAgICAgICAgICAoQykgMjAwMyBSb2JlcnQgU2Nod2ViZWwgPHIuc2Nod2ViZWxAcGVuZ3V0cm9uaXguZGU+CisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBoYXJkd2FyZSBkZWZpbml0aW9ucyBvZiB0aGUgaDcyMHggcHJvY2Vzc29ycworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogRG8gbm90IGFkZCBpbXBsZW1lbnRhdGlvbnMgc3BlY2lmaWMgZGVmaW5lcyBoZXJlLiBUaGlzIGZpbGVzIGNvbnRhaW5zCisgKiBvbmx5IGRlZmluZXMgb2YgdGhlIG9uY2hpcCBwZXJpcGhlcmFscy4gQWRkIHRob3NlIGRlZmluZXMgdG8gYm9hcmRzLmgsCisgKiB3aGljaCBpcyBpbmNsdWRlZCBieSB0aGlzIGZpbGUuCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX0hBUkRXQVJFX0gKKyNkZWZpbmUgX19BU01fQVJDSF9IQVJEV0FSRV9ICisKKyNkZWZpbmUgSU9DTEsgKDM2ODY0MDBMKQorCisvKiBPbmNoaXAgcGVyaXBoZXJhbHMgKi8KKworI2RlZmluZSBJT19WSVJUCQkJMHhmMDAwMDAwMAkvKiBJTyBwZXJpcGhlcmFscyAqLworI2RlZmluZSBJT19QSFlTCQkJMHg4MDAwMDAwMAorI2RlZmluZSBJT19TSVpFCQkJMHgwMDA1MDAwMAorCisjaWZkZWYgQ09ORklHX0NQVV9INzIwMgorI2luY2x1ZGUgImg3MjAyLXJlZ3MuaCIKKyNlbGlmIGRlZmluZWQgQ09ORklHX0NQVV9INzIwMQorI2luY2x1ZGUgImg3MjAxLXJlZ3MuaCIKKyNlbHNlCisjZXJyb3IgbWFjaGluZSBkZWZpbml0aW9uIG1pc21hdGNoCisjZW5kaWYKKworLyogTWFjcm8gdG8gYWNjZXNzIHRoZSBDUFUgSU8gKi8KKyNkZWZpbmUgQ1BVX0lPKHgpICgqKHZvbGF0aWxlIHUzMiopKHgpKQorCisvKiBNYWNybyB0byBhY2Nlc3MgZ2VuZXJhbCBwdXJwb3NlIHJlZ3MgKGJhc2UsIG9mZnNldCkgKi8KKyNkZWZpbmUgQ1BVX1JFRyh4LHkpIENQVV9JTyh4K3kpCisKKy8qIE1hY3JvIHRvIGFjY2VzcyBpcnEgcmVsYXRlZCByZWdzICovCisjZGVmaW5lIElSUV9SRUcoeCkgQ1BVX1JFRyhJUlFDX1ZJUlQseCkKKworLyogQ1BVIHJlZ2lzdGVycyAqLworLyogZ2VuZXJhbCBwdXJwb3NlIEkvTyAqLworI2RlZmluZSBHUElPX1ZJUlQoeCkJCShJT19WSVJUICsgMHgyMzAwMCArICgoeCk8PDUpKQorI2RlZmluZSBHUElPX0FfVklSVAkJKEdQSU9fVklSVCgwKSkKKyNkZWZpbmUgR1BJT19CX1ZJUlQJCShHUElPX1ZJUlQoMSkpCisjZGVmaW5lIEdQSU9fQ19WSVJUCQkoR1BJT19WSVJUKDIpKQorI2RlZmluZSBHUElPX0RfVklSVAkJKEdQSU9fVklSVCgzKSkKKyNkZWZpbmUgR1BJT19FX1ZJUlQJCShHUElPX1ZJUlQoNCkpCisjZGVmaW5lIEdQSU9fQU1VTFNFTAkJKEdQSU9fVklSVCgwKSArIDB4QTQpCisKKyNkZWZpbmUgQU1VTFNFTF9VU0lOMgkoMTw8NSkKKyNkZWZpbmUgQU1VTFNFTF9VU09VVDIJKDE8PDYpCisjZGVmaW5lIEFNVUxTRUxfVVNJTjMJKDE8PDEzKQorI2RlZmluZSBBTVVMU0VMX1VTT1VUMwkoMTw8MTQpCisjZGVmaW5lIEFNVUxTRUxfSVJESU4JKDE8PDE1KQorI2RlZmluZSBBTVVMU0VMX0lSRE9VVAkoMTw8NykKKworLyogUmVnaXN0ZXIgb2Zmc2V0cyBnZW5lcmFsIHB1cnBvc2UgSS9PICovCisjZGVmaW5lIEdQSU9fREFUQQkJMHgwMAorI2RlZmluZSBHUElPX0RJUgkJMHgwNAorI2RlZmluZSBHUElPX01BU0sJCTB4MDgKKyNkZWZpbmUgR1BJT19TVEFUCQkweDBDCisjZGVmaW5lIEdQSU9fRURHRQkJMHgxMAorI2RlZmluZSBHUElPX0NMUgkJMHgxNAorI2RlZmluZSBHUElPX1BPTAkJMHgxOAorI2RlZmluZSBHUElPX0VOCQkJMHgxQworCisvKmludGVycnVwdCBjb250cm9sbGVyICovCisjZGVmaW5lIElSUUNfVklSVAkJKElPX1ZJUlQgKyAweDI0MDAwKQorLyogcmVnaXN0ZXIgb2Zmc2V0IGludGVycnVwdCBjb250cm9sbGVyICovCisjZGVmaW5lIElSUUNfSUVSCQkweDAwCisjZGVmaW5lIElSUUNfSVNSCQkweDA0CisKKy8qIHRpbWVyIHVuaXQgKi8KKyNkZWZpbmUgVElNRVJfVklSVAkJKElPX1ZJUlQgKyAweDI1MDAwKQorLyogUmVnaXN0ZXIgb2Zmc2V0cyB0aW1lciB1bml0ICovCisjZGVmaW5lIFRNMF9QRVJJT0QgICAJCTB4MDAKKyNkZWZpbmUgVE0wX0NPVU5UICAgIAkJMHgwOAorI2RlZmluZSBUTTBfQ1RSTCAgICAgCQkweDEwCisjZGVmaW5lIFRNMV9QRVJJT0QgICAJCTB4MjAKKyNkZWZpbmUgVE0xX0NPVU5UICAgIAkJMHgyOAorI2RlZmluZSBUTTFfQ1RSTCAgICAgCQkweDMwCisjZGVmaW5lIFRNMl9QRVJJT0QgICAJCTB4NDAKKyNkZWZpbmUgVE0yX0NPVU5UICAgIAkJMHg0OAorI2RlZmluZSBUTTJfQ1RSTCAgICAgCQkweDUwCisjZGVmaW5lIFRJTUVSX1RPUENUUkwJCTB4NjAKKyNkZWZpbmUgVElNRVJfVE9QU1RBVAkJMHg2NAorI2RlZmluZSBUNjRfQ09VTlRMCQkweDgwCisjZGVmaW5lIFQ2NF9DT1VOVEgJCTB4ODQKKyNkZWZpbmUgVDY0X0NUUkwJCTB4ODgKKyNkZWZpbmUgVDY0X0JBU0VMCQkweDk0CisjZGVmaW5lIFQ2NF9CQVNFSAkJMHg5OAorLyogQml0bWFrcyB0aW1lciB1bml0IFRPUFNUQVQgcmVnICovCisjZGVmaW5lIFRTVEFUX1QwSU5UCQkweDEKKyNkZWZpbmUgVFNUQVRfVDFJTlQJCTB4MgorI2RlZmluZSBUU1RBVF9UMklOVAkJMHg0CisjZGVmaW5lIFRTVEFUX1QzSU5UCQkweDgKKy8qIEJpdCBkZXNjcmlwdGlvbiBvZiBUTXhfQ1RSTCByZWdpc3RlciAqLworI2RlZmluZSBUTV9TVEFSVCAgCQkweDEKKyNkZWZpbmUgVE1fUkVQRUFUIAkJMHgyCisjZGVmaW5lIFRNX1JFU0VUICAJCTB4NAorLyogQml0IGRlc2NyaXB0aW9uIG9mIFRJTUVSX0NUUkwgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgRU5BQkxFX1RNMF9JTlRSICAJMHgxCisjZGVmaW5lIEVOQUJMRV9UTTFfSU5UUiAgCTB4MgorI2RlZmluZSBFTkFCTEVfVE0yX0lOVFIgIAkweDQKKyNkZWZpbmUgVElNRVJfRU5BQkxFX0JJVCAJMHg4CisjZGVmaW5lIEVOQUJMRV9USU1FUjY0ICAgCTB4MTAKKyNkZWZpbmUgRU5BQkxFX1RJTUVSNjRfSU5UCTB4MjAKKworLyogUE1VICYgUExMICovCisjZGVmaW5lIFBNVV9CQVNFIAkJKElPX1ZJUlQgKyAweDEwMDApCisjZGVmaW5lIFBNVV9NT0RFCQkweDAwCisjZGVmaW5lIFBNVV9TVEFUICAgCQkweDIwCisjZGVmaW5lIFBNVV9QTExfQ1RSTCAJCTB4MjgKKworLyogUE1VIE1vZGUgYml0cyAqLworI2RlZmluZSBQTVVfTU9ERV9TTE9XCQkweDAwCisjZGVmaW5lIFBNVV9NT0RFX1JVTgkJMHgwMQorI2RlZmluZSBQTVVfTU9ERV9JRExFCQkweDAyCisjZGVmaW5lIFBNVV9NT0RFX1NMRUVQCQkweDAzCisjZGVmaW5lIFBNVV9NT0RFX0lOSVQJCTB4MDQKKyNkZWZpbmUgUE1VX01PREVfREVFUFNMRUVQCTB4MDcKKyNkZWZpbmUgUE1VX01PREVfV0FLRVVQCQkweDA4CisKKy8qIFBNVSAuLi4gKi8KKyNkZWZpbmUgUExMXzJfRU4JCTB4ODAwMAorI2RlZmluZSBQTExfMV9FTgkJMHg0MDAwCisjZGVmaW5lIFBMTF8zX01VVEUJCTB4MDA4MAorCisvKiBDb250cm9sIGJpdHMgZm9yIFBNVS8gUExMICovCisjZGVmaW5lIFBNVV9XQVJNUkVTRVQJCTB4MDAwMTAwMDAKKyNkZWZpbmUgUExMX0NUUkxfTUFTSzIzCQkweDAwMDA4MGZmCisKKy8qIExDRCBDb250cm9sbGVyICovCisjZGVmaW5lIExDRF9CQVNFIAkJKElPX1ZJUlQgKyAweDEwMDAwKQorI2RlZmluZSBMQ0RfQ1RSTCAJCTB4MDAKKyNkZWZpbmUgTENEX1NUQVRVUwkJMHgwNAorI2RlZmluZSBMQ0RfU1RBVFVTX00JCTB4MDgKKyNkZWZpbmUgTENEX0lOVEVSUlVQVAkJMHgwQworI2RlZmluZSBMQ0RfREJBUgkJMHgxMAorI2RlZmluZSBMQ0RfRENBUgkJMHgxNAorI2RlZmluZSBMQ0RfVElNSU5HMCAJCTB4MjAKKyNkZWZpbmUgTENEX1RJTUlORzEgCQkweDI0CisjZGVmaW5lIExDRF9USU1JTkcyIAkJMHgyOAorI2RlZmluZSBMQ0RfVEVTVAkJMHg0MAorCisvKiBMQ0QgQ29udHJvbCBCaXRzICovCisjZGVmaW5lIExDRF9DVFJMX0xDRF9FTkFCTEUgICAJMHgwMDAwMDAwMQorLyogQml0cyBwZXIgcGl4ZWwgKi8KKyNkZWZpbmUgTENEX0NUUkxfTENEX0JQUF9NQVNLIAkweDAwMDAwMDA2CisjZGVmaW5lIExDRF9DVFJMX0xDRF80QlBQICAgIAkweDAwMDAwMDAwCisjZGVmaW5lIExDRF9DVFJMX0xDRF84QlBQICAgIAkweDAwMDAwMDAyCisjZGVmaW5lIExDRF9DVFJMX0xDRF8xNkJQUCAgIAkweDAwMDAwMDA0CisjZGVmaW5lIExDRF9DVFJMX0xDRF9CVwkJMHgwMDAwMDAwOAorI2RlZmluZSBMQ0RfQ1RSTF9MQ0RfVEZUCTB4MDAwMDAwMTAKKyNkZWZpbmUgTENEX0NUUkxfQkdSCQkweDAwMDAxMDAwCisjZGVmaW5lIExDRF9DVFJMX0xDRF9WQ09NUAkweDAwMDgwMDAwCisjZGVmaW5lIExDRF9DVFJMX0xDRF9NT05POAkweDAwMjAwMDAwCisjZGVmaW5lIExDRF9DVFJMX0xDRF9QV1IJMHgwMDQwMDAwMAorI2RlZmluZSBMQ0RfQ1RSTF9MQ0RfQkxFCTB4MDA4MDAwMDAKKyNkZWZpbmUgTENEX0NUUkxfTERCVVNFTgkweDAxMDAwMDAwCisKKy8qIFBhbGV0dGUgKi8KKyNkZWZpbmUgTENEX1BBTEVUVEVfQkFTRSAJKElPX1ZJUlQgKyAweDEwNDAwKQorCisvKiBTZXJpYWwgcG9ydHMgKi8KKyNkZWZpbmUgU0VSSUFMMF9PRlMJCTB4MjAwMDAKKyNkZWZpbmUgU0VSSUFMMF9WSVJUIAkJKElPX1ZJUlQgKyBTRVJJQUwwX09GUykKKyNkZWZpbmUgU0VSSUFMMF9CQVNFCQkoSU9fUEhZUyArIFNFUklBTDBfT0ZTKQorCisjZGVmaW5lIFNFUklBTDFfT0ZTCQkweDIxMDAwCisjZGVmaW5lIFNFUklBTDFfVklSVCAJCShJT19WSVJUICsgU0VSSUFMMV9PRlMpCisjZGVmaW5lIFNFUklBTDFfQkFTRQkJKElPX1BIWVMgKyBTRVJJQUwxX09GUykKKworI2RlZmluZSBTRVJJQUxfRU5BQkxFCQkweDMwCisjZGVmaW5lIFNFUklBTF9FTkFCTEVfRU4JKDE8PDApCisKKy8qIEdlbmVyYWwgZGVmaW5lcyB0byBwYWNpZnkgZ2NjICovCisjZGVmaW5lIFBDSU9fQkFTRSAJCSgwKQkvKiBmb3IgaW5iLCBvdXRiIGFuZCBmcmllbmRzICovCisjZGVmaW5lIFBDSU9fVklSVAkJUENJT19CQVNFCisKKyNkZWZpbmUgX19BU01fQVJDSF9IQVJEV0FSRV9JTkNNQUNIX0gKKyNpbmNsdWRlICJib2FyZHMuaCIKKyN1bmRlZiBfX0FTTV9BUkNIX0hBUkRXQVJFX0lOQ01BQ0hfSAorCisjZW5kaWYJCQkJLyogX19BU01fQVJDSF9IQVJEV0FSRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1oNzIweC9pby5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaDcyMHgvaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODgxNDgyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaDcyMHgvaW8uaApAQCAtMCwwICsxLDI0IEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtaDcyMHgvaW8uaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBTdGV2ZSBIaWxsIChzamhpbGxAY290dy5jb20pCisgKgorICogQ2hhbmdlbG9nOgorICoKKyAqICAwOS0xOS0yMDAxCUpKS0lNCisgKiAgCQlDcmVhdGVkIGZyb20gbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtbDcyMDAvaW8uaAorICoKKyAqICAwMy0yNy0yMDAzICBSb2JlcnQgU2Nod2ViZWwgPHIuc2Nod2ViZWxAcGVuZ3V0cm9uaXguZGU+OgorICogIAkJcmUtdW5pZmllZCBoZWFkZXIgZmlsZXMgZm9yIGg3MjB4CisgKi8KKyNpZm5kZWYgX19BU01fQVJNX0FSQ0hfSU9fSAorI2RlZmluZSBfX0FTTV9BUk1fQVJDSF9JT19ICisKKyNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgorCisjZGVmaW5lIElPX1NQQUNFX0xJTUlUIDB4ZmZmZmZmZmYKKworI2RlZmluZSBfX2lvKGEpCQkoKHZvaWQgX19pb21lbSAqKShhKSkKKyNkZWZpbmUgX19tZW1fcGNpKGEpCShhKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWg3MjB4L2lycS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaDcyMHgvaXJxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM4MjFlOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWg3MjB4L2lycS5oCkBAIC0wLDAgKzEsMTQgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1oNzIweC9pcnEuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMC0yMDAyIEp1bmdqdW4gS2ltCisgKiAgICAgICAgICAgKEMpIDIwMDMgUm9iZXJ0IFNjaHdlYmVsIDxyLnNjaHdlYmVsQHBlbmd1dHJvbml4LmRlPgorICogICAgICAgICAgIChDKSAyMDAzIFRob21hcyBHbGVpeG5lciA8dGdseEBsaW51dHJvbml4LmRlPgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9JUlFfSAorI2RlZmluZSBfX0FTTV9BUkNIX0lSUV9ICisKK2V4dGVybiB2b2lkIF9faW5pdCBoNzIweF9pbml0X2lycSAodm9pZCk7CisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX0lSUV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1oNzIweC9pcnFzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1oNzIweC9pcnFzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI0NDQxMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWg3MjB4L2lycXMuaApAQCAtMCwwICsxLDExNiBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWg3MjB4L2lycXMuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBKdW5nanVuIEtpbQorICogICAgICAgICAgIChDKSAyMDAzIFJvYmVydCBTY2h3ZWJlbCA8ci5zY2h3ZWJlbEBwZW5ndXRyb25peC5kZT4KKyAqICAgICAgICAgICAoQykgMjAwMyBUaG9tYXMgR2xlaXhuZXIgPHRnbHhAbGludXRyb25peC5kZT4KKyAqCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX0lSUVNfSAorI2RlZmluZSBfX0FTTV9BUkNIX0lSUVNfSAorCisjaWYgZGVmaW5lZCAoQ09ORklHX0NQVV9INzIwMSkKKworI2RlZmluZSBJUlFfUE1VCQkwCQkvKiAweDAwMDAwMSAqLworI2RlZmluZSBJUlFfRE1BCQkxIAkJLyogMHgwMDAwMDIgKi8KKyNkZWZpbmUgSVJRX0xDRAkJMgkJLyogMHgwMDAwMDQgKi8KKyNkZWZpbmUgSVJRX1ZHQQkJMyAJCS8qIDB4MDAwMDA4ICovCisjZGVmaW5lIElSUV9QQ01DSUExIAk0IAkJLyogMHgwMDAwMTAgKi8KKyNkZWZpbmUgSVJRX1BDTUNJQTIgCTUgCQkvKiAweDAwMDAyMCAqLworI2RlZmluZSBJUlFfQUZFCQk2IAkJLyogMHgwMDAwNDAgKi8KKyNkZWZpbmUgSVJRX0FJQwkJNyAJCS8qIDB4MDAwMDgwICovCisjZGVmaW5lIElSUV9LRVlCT0FSRCAJOCAJCS8qIDB4MDAwMTAwICovCisjZGVmaW5lIElSUV9USU1FUjAJOSAJCS8qIDB4MDAwMjAwICovCisjZGVmaW5lIElSUV9SVEMJCTEwCQkvKiAweDAwMDQwMCAqLworI2RlZmluZSBJUlFfU09VTkQJMTEJCS8qIDB4MDAwODAwICovCisjZGVmaW5lIElSUV9VU0IJCTEyCQkvKiAweDAwMTAwMCAqLworI2RlZmluZSBJUlFfSXJEQSAJMTMJCS8qIDB4MDAyMDAwICovCisjZGVmaW5lIElSUV9VQVJUMAkxNAkJLyogMHgwMDQwMDAgKi8KKyNkZWZpbmUgSVJRX1VBUlQxCTE1CQkvKiAweDAwODAwMCAqLworI2RlZmluZSBJUlFfU1BJCQkxNgkJLyogMHgwMTAwMDAgKi8KKyNkZWZpbmUgSVJRX0dQSU9BIAkxNwkJLyogMHgwMjAwMDAgKi8KKyNkZWZpbmUgSVJRX0dQSU9CCTE4CQkvKiAweDA0MDAwMCAqLworI2RlZmluZSBJUlFfR1BJT0MJMTkJCS8qIDB4MDgwMDAwICovCisjZGVmaW5lIElSUV9HUElPRAkyMAkJLyogMHgxMDAwMDAgKi8KKyNkZWZpbmUgSVJRX0NvbW1SWAkyMQkJLyogMHgyMDAwMDAgKi8KKyNkZWZpbmUgSVJRX0NvbW1UWAkyMgkJLyogMHg0MDAwMDAgKi8KKyNkZWZpbmUgSVJRX1NvZnQJMjMJCS8qIDB4ODAwMDAwICovCisKKyNkZWZpbmUgTlJfR0xCTF9JUlFTCTI0CisKKyNkZWZpbmUgSVJRX0NIQUlORURfR1BJT0EoeCkgIChOUl9HTEJMX0lSUVMgKyB4KQorI2RlZmluZSBJUlFfQ0hBSU5FRF9HUElPQih4KSAgKElSUV9DSEFJTkVEX0dQSU9BKDMyKSArIHgpCisjZGVmaW5lIElSUV9DSEFJTkVEX0dQSU9DKHgpICAoSVJRX0NIQUlORURfR1BJT0IoMzIpICsgeCkKKyNkZWZpbmUgSVJRX0NIQUlORURfR1BJT0QoeCkgIChJUlFfQ0hBSU5FRF9HUElPQygzMikgKyB4KQorI2RlZmluZSBOUl9JUlFTICAgICAgICAgICAgICAgSVJRX0NIQUlORURfR1BJT0QoMzIpCisKKy8qIEVuYWJsZSBtYXNrIGZvciBtdWx0aXBsZXhlZCBpbnRlcnJ1cHRzICovCisjZGVmaW5lIElSUV9FTkFfTVVYCSgxPDxJUlFfR1BJT0EpIHwgKDE8PElSUV9HUElPQikgXAorCQkJfCAoMTw8SVJRX0dQSU9DKSB8ICgxPDxJUlFfR1BJT0QpCisKKworI2VsaWYgZGVmaW5lZCAoQ09ORklHX0NQVV9INzIwMikKKworI2RlZmluZSBJUlFfUE1VCQkwCQkvKiAweDAwMDAwMDAxICovCisjZGVmaW5lIElSUV9ETUEJCTEJCS8qIDB4MDAwMDAwMDIgKi8KKyNkZWZpbmUgSVJRX0xDRAkJMgkJLyogMHgwMDAwMDAwNCAqLworI2RlZmluZSBJUlFfU09VTkQJMwkJLyogMHgwMDAwMDAwOCAqLworI2RlZmluZSBJUlFfSTJTCQk0CQkvKiAweDAwMDAwMDEwICovCisjZGVmaW5lIElSUV9VU0IgCTUJCS8qIDB4MDAwMDAwMjAgKi8KKyNkZWZpbmUgSVJRX01NQyAJNgkJLyogMHgwMDAwMDA0MCAqLworI2RlZmluZSBJUlFfUlRDIAk3CQkvKiAweDAwMDAwMDgwICovCisjZGVmaW5lIElSUV9VQVJUMCAJOAkJLyogMHgwMDAwMDEwMCAqLworI2RlZmluZSBJUlFfVUFSVDEgCTkJCS8qIDB4MDAwMDAyMDAgKi8KKyNkZWZpbmUgSVJRX1VBUlQyIAkxMAkJLyogMHgwMDAwMDQwMCAqLworI2RlZmluZSBJUlFfVUFSVDMgCTExCQkvKiAweDAwMDAwODAwICovCisjZGVmaW5lIElSUV9LQkQgCTEyCQkvKiAweDAwMDAxMDAwICovCisjZGVmaW5lIElSUV9QUzIgCTEzCQkvKiAweDAwMDAyMDAwICovCisjZGVmaW5lIElSUV9BSUMgCTE0CQkvKiAweDAwMDA0MDAwICovCisjZGVmaW5lIElSUV9USU1FUjAgCTE1CQkvKiAweDAwMDA4MDAwICovCisjZGVmaW5lIElSUV9USU1FUlggCTE2CQkvKiAweDAwMDEwMDAwICovCisjZGVmaW5lIElSUV9XRFQgCTE3CQkvKiAweDAwMDIwMDAwICovCisjZGVmaW5lIElSUV9DQU4wIAkxOAkJLyogMHgwMDA0MDAwMCAqLworI2RlZmluZSBJUlFfQ0FOMSAJMTkJCS8qIDB4MDAwODAwMDAgKi8KKyNkZWZpbmUgSVJRX0VYVDAgCTIwCQkvKiAweDAwMTAwMDAwICovCisjZGVmaW5lIElSUV9FWFQxIAkyMQkJLyogMHgwMDIwMDAwMCAqLworI2RlZmluZSBJUlFfR1BJT0EgCTIyCQkvKiAweDAwNDAwMDAwICovCisjZGVmaW5lIElSUV9HUElPQiAJMjMJCS8qIDB4MDA4MDAwMDAgKi8KKyNkZWZpbmUgSVJRX0dQSU9DIAkyNAkJLyogMHgwMTAwMDAwMCAqLworI2RlZmluZSBJUlFfR1BJT0QgCTI1CQkvKiAweDAyMDAwMDAwICovCisjZGVmaW5lIElSUV9HUElPRSAJMjYJCS8qIDB4MDQwMDAwMDAgKi8KKyNkZWZpbmUgSVJRX0NPTU1SWCAJMjcJCS8qIDB4MDgwMDAwMDAgKi8KKyNkZWZpbmUgSVJRX0NPTU1UWCAJMjgJCS8qIDB4MTAwMDAwMDAgKi8KKyNkZWZpbmUgSVJRX1NNQyAJMjkJCS8qIDB4MjAwMDAwMDAgKi8KKyNkZWZpbmUgSVJRX1NvZnQgCTMwCQkvKiAweDQwMDAwMDAwICovCisjZGVmaW5lIElSUV9SRVNFUlZFRDEgCTMxCQkvKiAweDgwMDAwMDAwICovCisjZGVmaW5lIE5SX0dMQkxfSVJRUwkzMgorCisjZGVmaW5lIE5SX1RJTUVSWF9JUlFTCTMKKworI2RlZmluZSBJUlFfQ0hBSU5FRF9HUElPQSh4KSAgKE5SX0dMQkxfSVJRUyArIHgpCisjZGVmaW5lIElSUV9DSEFJTkVEX0dQSU9CKHgpICAoSVJRX0NIQUlORURfR1BJT0EoMzIpICsgeCkKKyNkZWZpbmUgSVJRX0NIQUlORURfR1BJT0MoeCkgIChJUlFfQ0hBSU5FRF9HUElPQigzMikgKyB4KQorI2RlZmluZSBJUlFfQ0hBSU5FRF9HUElPRCh4KSAgKElSUV9DSEFJTkVEX0dQSU9DKDMyKSArIHgpCisjZGVmaW5lIElSUV9DSEFJTkVEX0dQSU9FKHgpICAoSVJRX0NIQUlORURfR1BJT0QoMzIpICsgeCkKKyNkZWZpbmUgSVJRX0NIQUlORURfVElNRVJYKHgpIChJUlFfQ0hBSU5FRF9HUElPRSgzMikgKyB4KQorI2RlZmluZSBJUlFfVElNRVIxICAgICAgICAgICAgKElSUV9DSEFJTkVEX1RJTUVSWCgwKSkKKyNkZWZpbmUgSVJRX1RJTUVSMiAgICAgICAgICAgIChJUlFfQ0hBSU5FRF9USU1FUlgoMSkpCisjZGVmaW5lIElSUV9USU1FUjY0QiAgICAgICAgICAoSVJRX0NIQUlORURfVElNRVJYKDIpKQorCisjZGVmaW5lIE5SX0lSUVMJCShJUlFfQ0hBSU5FRF9USU1FUlgoTlJfVElNRVJYX0lSUVMpKQorCisvKiBFbmFibGUgbWFzayBmb3IgbXVsdGlwbGV4ZWQgaW50ZXJydXB0cyAqLworI2RlZmluZSBJUlFfRU5BX01VWAkoMTw8SVJRX1RJTUVSWCkgfCAoMTw8SVJRX0dQSU9BKSB8ICgxPDxJUlFfR1BJT0IpIHwgXAorCQkJKDE8PElSUV9HUElPQykgCXwgKDE8PElSUV9HUElPRCkgfCAoMTw8SVJRX0dQSU9FKSB8IFwKKwkJCSgxPDxJUlFfVElNRVJYKQorCisjZWxzZQorI2Vycm9yIGNwdSBkZWZpbml0aW9uIG1pc21hdGNoCisjZW5kaWYKKworLyogZGVjb2RlIGlycSBudW1iZXIgdG8gcmVnaXN0ZXIgbnVtYmVyICovCisjZGVmaW5lIElSUV9UT19SRUdOTyhpcnEpICgoaXJxIC0gTlJfR0xCTF9JUlFTKSA+PiA1KQorI2RlZmluZSBJUlFfVE9fQklUKGlycSkgKDEgPDwgKChpcnEgLSBOUl9HTEJMX0lSUVMpICUgMzIpKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWg3MjB4L21lbW9yeS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaDcyMHgvbWVtb3J5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYzMzQ0NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWg3MjB4L21lbW9yeS5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1oNzIweC9tZW1vcnkuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMCBKdW5nanVuIEtpbQorICoKKyAqLworI2lmbmRlZiBfX0FTTV9BUkNIX01FTU9SWV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfTUVNT1JZX0gKKworLyoKKyAqIFBhZ2Ugb2Zmc2V0OgorICogICAgKCAweGMwMDAwMDAwVUwgKQorICovCisjZGVmaW5lIFBIWVNfT0ZGU0VUCSgweDQwMDAwMDAwVUwpCisKKy8qCisgKiBWaXJ0dWFsIHZpZXcgPC0+IERNQSB2aWV3IG1lbW9yeSBhZGRyZXNzIHRyYW5zbGF0aW9ucworICogdmlydF90b19idXM6IFVzZWQgdG8gdHJhbnNsYXRlIHRoZSB2aXJ0dWFsIGFkZHJlc3MgdG8gYW4KKyAqICAgICAgICAgICAgICBhZGRyZXNzIHN1aXRhYmxlIHRvIGJlIHBhc3NlZCB0byBzZXRfZG1hX2FkZHIKKyAqIGJ1c190b192aXJ0OiBVc2VkIHRvIGNvbnZlcnQgYW4gYWRkcmVzcyBmb3IgRE1BIG9wZXJhdGlvbnMKKyAqICAgICAgICAgICAgICB0byBhbiBhZGRyZXNzIHRoYXQgdGhlIGtlcm5lbCBjYW4gdXNlLgorICoKKyAqIFRoZXJlIGlzIHNvbWV0aGluZyB0byBkbyBoZXJlIGxhdGVyICEsIE1hciAyMDAwLCBKdW5nanVuIEtpbQorICovCisKKyNkZWZpbmUgX192aXJ0X3RvX2J1c19faXNfYV9tYWNybworI2RlZmluZSBfX3ZpcnRfdG9fYnVzKHgpCV9fdmlydF90b19waHlzKHgpCisjZGVmaW5lIF9fYnVzX3RvX3ZpcnRfX2lzX2FfbWFjcm8KKyNkZWZpbmUgX19idXNfdG9fdmlydCh4KQlfX3BoeXNfdG9fdmlydCh4KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWg3MjB4L3BhcmFtLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1oNzIweC9wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiODAyMzUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1oNzIweC9wYXJhbS5oCkBAIC0wLDAgKzEsMTAgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1oNzIweC9wYXJhbS5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwIEp1bmdqdW4gS2ltCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX1BBUkFNX0gKKyNkZWZpbmUgX19BU01fQVJDSF9QQVJBTV9ICisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaDcyMHgvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1oNzIweC9zeXN0ZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjAyNWUyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaDcyMHgvc3lzdGVtLmgKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtaDcyMHgvc3lzdGVtLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiBKdW5nanVuIEtpbSwgSHluaXggU2VtaWNvbmR1Y3RvciBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWg3MjB4L3N5c3RlbS5oCisgKgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9TWVNURU1fSAorI2RlZmluZSBfX0FTTV9BUkNIX1NZU1RFTV9ICisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisKK3N0YXRpYyB2b2lkIGFyY2hfaWRsZSh2b2lkKQoreworCUNQVV9SRUcgKFBNVV9CQVNFLCBQTVVfTU9ERSkgPSBQTVVfTU9ERV9JRExFOworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCSJtb3YJcjAsIHIwXG5cdCIKKwkibW92CXIwLCByMCIpOworfQorCisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUpCit7CisJQ1BVX1JFRyAoUE1VX0JBU0UsIFBNVV9TVEFUKSB8PSBQTVVfV0FSTVJFU0VUOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWg3MjB4L3RpbWV4LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1oNzIweC90aW1leC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4YTM5MWMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1oNzIweC90aW1leC5oCkBAIC0wLDAgKzEsMTUgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1oNzIweC90aW1leC5oCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgSnVuZ2p1biBLaW0sIEh5bml4IFNlbWljb25kdWN0b3IgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX1RJTUVYCisjZGVmaW5lIF9fQVNNX0FSQ0hfVElNRVgKKworI2RlZmluZSBDTE9DS19USUNLX1JBVEUJCTM2ODY0MDAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1oNzIweC91bmNvbXByZXNzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1oNzIweC91bmNvbXByZXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZmZmFjZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWg3MjB4L3VuY29tcHJlc3MuaApAQCAtMCwwICsxLDM5IEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtaDcyMHgvdW5jb21wcmVzcy5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIgSnVuZ2p1biBLaW0KKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfVU5DT01QUkVTU19ICisjZGVmaW5lIF9fQVNNX0FSQ0hfVU5DT01QUkVTU19ICisKKyNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgorCisjZGVmaW5lIExTUiAJMHgxNAorI2RlZmluZSBURU1QVFkgCTB4NDAKKworc3RhdGljIHZvaWQgcHV0c3RyKGNvbnN0IGNoYXIgKnMpCit7CisJY2hhciBjOworCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKnAgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKShJT19QSFlTKzB4MjAwMDApOworCisJd2hpbGUgKCAoYyA9ICpzKyspICE9ICdcMCcpIHsKKwkJLyogd2FpdCB1bnRpbCB0cmFuc21pdCBidWZmZXIgaXMgZW1wdHkgKi8KKwkJd2hpbGUoKHBbTFNSXSAmIFRFTVBUWSkgPT0gMHgwKTsKKwkJLyogd3JpdGUgbmV4dCBjaGFyYWN0ZXIgKi8KKwkJKnAgPSBjOworCisJCWlmKGMgPT0gJ1xuJykgeworCQkJd2hpbGUoKHBbTFNSXSAmIFRFTVBUWSkgPT0gMHgwKTsKKwkJCSpwID0gJ1xyJzsKKwkJfQorCX0KK30KKworLyoKKyAqIG5vdGhpbmcgdG8gZG8KKyAqLworI2RlZmluZSBhcmNoX2RlY29tcF9zZXR1cCgpCisjZGVmaW5lIGFyY2hfZGVjb21wX3dkb2coKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWg3MjB4L3ZtYWxsb2MuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWg3MjB4L3ZtYWxsb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWY1MjNhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaDcyMHgvdm1hbGxvYy5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1oNzIweC92bWFsbG9jLmgKKyAqLworCisjaWZuZGVmIF9fQVJDSF9BUk1fVk1BTExPQ19ICisjZGVmaW5lIF9fQVJDSF9BUk1fVk1BTExPQ19ICisKKy8qCisgKiBKdXN0IGFueSBhcmJpdHJhcnkgb2Zmc2V0IHRvIHRoZSBzdGFydCBvZiB0aGUgdm1hbGxvYyBWTSBhcmVhOiB0aGUKKyAqIGN1cnJlbnQgOE1CIHZhbHVlIGp1c3QgbWVhbnMgdGhhdCB0aGVyZSB3aWxsIGJlIGEgOE1CICJob2xlIiBhZnRlciB0aGUKKyAqIHBoeXNpY2FsIG1lbW9yeSB1bnRpbCB0aGUga2VybmVsIHZpcnR1YWwgbWVtb3J5IHN0YXJ0cy4gIFRoYXQgbWVhbnMgdGhhdAorICogYW55IG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIHdpbGwgaG9wZWZ1bGx5IGJlIGNhdWdodC4KKyAqIFRoZSB2bWFsbG9jKCkgcm91dGluZXMgbGVhdmVzIGEgaG9sZSBvZiA0a0IgYmV0d2VlbiBlYWNoIHZtYWxsb2NlZAorICogYXJlYSBmb3IgdGhlIHNhbWUgcmVhc29uLiA7KQorICovCisjZGVmaW5lIFZNQUxMT0NfT0ZGU0VUCSAgKDgqMTAyNCoxMDI0KQorI2RlZmluZSBWTUFMTE9DX1NUQVJUCSAgKCgodW5zaWduZWQgbG9uZyloaWdoX21lbW9yeSArIFZNQUxMT0NfT0ZGU0VUKSAmIH4oVk1BTExPQ19PRkZTRVQtMSkpCisjZGVmaW5lIFZNQUxMT0NfVk1BRERSKHgpICgodW5zaWduZWQgbG9uZykoeCkpCisjZGVmaW5lIFZNQUxMT0NfRU5EICAgICAgIChQQUdFX09GRlNFVCArIDB4MTAwMDAwMDApCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW14L2RlYnVnLW1hY3JvLlMgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbXgvZGVidWctbWFjcm8uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2Y1NTJmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW14L2RlYnVnLW1hY3JvLlMKQEAgLTAsMCArMSwzNCBAQAorLyogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW14L2RlYnVnLW1hY3JvLlMKKyAqCisgKiBEZWJ1Z2dpbmcgbWFjcm8gaW5jbHVkZSBoZWFkZXIKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk0LTE5OTkgUnVzc2VsbCBLaW5nCisgKiAgTW92ZWQgZnJvbSBsaW51eC9hcmNoL2FybS9rZXJuZWwvZGVidWcuUyBieSBCZW4gRG9va3MKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyovCisKKwkJLm1hY3JvCWFkZHJ1YXJ0LHJ4CisJCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCisJCXRzdAlccngsICMxCQkJQCBNTVUgZW5hYmxlZD8KKwkJbW92ZXEJXHJ4LCAjMHgwMDAwMDAwMAlAIHBoeXNpY2FsCisJCW1vdm5lCVxyeCwgIzB4ZTAwMDAwMDAJQCB2aXJ0dWFsCisJCW9ycglccngsIFxyeCwgIzB4MDAyMDAwMDAKKwkJb3JyCVxyeCwgXHJ4LCAjMHgwMDAwNjAwMAlAIFVBUlQxIG9mZnNldAorCQkuZW5kbQorCisJCS5tYWNybwlzZW5kdWFydCxyZCxyeAorCQlzdHIJXHJkLCBbXHJ4LCAjMHg0MF0JQCBUWERBVEEKKwkJLmVuZG0KKworCQkubWFjcm8Jd2FpdHVhcnQscmQscngKKwkJLmVuZG0KKworCQkubWFjcm8JYnVzeXVhcnQscmQscngKKzEwMDI6CQlsZHIJXHJkLCBbXHJ4LCAjMHg5OF0JQCBTUjIKKwkJdHN0CVxyZCwgIzEgPDwgMwkJQCBUWERDCisJCWJlcQkxMDAyYgkJCUAgd2FpdCB1bnRpbCB0cmFuc21pdCBkb25lCisJCS5lbmRtCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbXgvZG1hLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbXgvZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJkYzAxNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlteC9kbWEuaApAQCAtMCwwICsxLDcxIEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9pbXhhZHMvZG1hLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk3LDE5OTggUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisjaWZuZGVmIF9fQVNNX0FSQ0hfRE1BX0gKKyNkZWZpbmUgX19BU01fQVJDSF9ETUFfSAorCisjZGVmaW5lIE1BWF9ETUFfQUREUkVTUwkJMHhmZmZmZmZmZgorCisjZGVmaW5lIE1BWF9ETUFfQ0hBTk5FTFMJMAorCisvKgorICogRE1BIHJlZ2lzdHJhdGlvbgorICovCisKK3R5cGVkZWYgZW51bSB7CisJRE1BX1BSSU9fSElHSCA9IDAsCisJRE1BX1BSSU9fTUVESVVNID0gMywKKwlETUFfUFJJT19MT1cgPSA2Cit9IGlteF9kbWFfcHJpbzsKKworaW50IGlteF9yZXF1ZXN0X2RtYShjaGFyICpuYW1lLCBpbXhfZG1hX3ByaW8gcHJpbywKKwkJICAgIHZvaWQgKCppcnFfaGFuZGxlcikgKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSwKKwkJICAgIHZvaWQgKCplcnJfaGFuZGxlcikgKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSwKKwkJICAgIHZvaWQgKmRhdGEpOworCit2b2lkIGlteF9mcmVlX2RtYShpbnQgZG1hX2NoKTsKKworCisjZGVmaW5lIERNQV9SRVFfVUFSVDNfVCAgICAgICAgMgorI2RlZmluZSBETUFfUkVRX1VBUlQzX1IgICAgICAgIDMKKyNkZWZpbmUgRE1BX1JFUV9TU0kyX1QgICAgICAgICA0CisjZGVmaW5lIERNQV9SRVFfU1NJMl9SICAgICAgICAgNQorI2RlZmluZSBETUFfUkVRX0NTSV9TVEFUICAgICAgIDYKKyNkZWZpbmUgRE1BX1JFUV9DU0lfUiAgICAgICAgICA3CisjZGVmaW5lIERNQV9SRVFfTVNIQyAgICAgICAgICAgOAorI2RlZmluZSBETUFfUkVRX0RTUEFfRENUX0RPVVQgIDkKKyNkZWZpbmUgRE1BX1JFUV9EU1BBX0RDVF9ESU4gIDEwCisjZGVmaW5lIERNQV9SRVFfRFNQQV9NQUMgICAgICAxMQorI2RlZmluZSBETUFfUkVRX0VYVCAgICAgICAgICAgMTIKKyNkZWZpbmUgRE1BX1JFUV9TREhDICAgICAgICAgIDEzCisjZGVmaW5lIERNQV9SRVFfU1BJMV9SICAgICAgICAxNAorI2RlZmluZSBETUFfUkVRX1NQSTFfVCAgICAgICAgMTUKKyNkZWZpbmUgRE1BX1JFUV9TU0lfVCAgICAgICAgIDE2CisjZGVmaW5lIERNQV9SRVFfU1NJX1IgICAgICAgICAxNworI2RlZmluZSBETUFfUkVRX0FTUF9EQUMgICAgICAgMTgKKyNkZWZpbmUgRE1BX1JFUV9BU1BfQURDICAgICAgIDE5CisjZGVmaW5lIERNQV9SRVFfVVNQX0VQKHgpICAgICgyMCsoeCkpCisjZGVmaW5lIERNQV9SRVFfU1BJMl9SICAgICAgICAyNgorI2RlZmluZSBETUFfUkVRX1NQSTJfVCAgICAgICAgMjcKKyNkZWZpbmUgRE1BX1JFUV9VQVJUMl9UICAgICAgIDI4CisjZGVmaW5lIERNQV9SRVFfVUFSVDJfUiAgICAgICAyOQorI2RlZmluZSBETUFfUkVRX1VBUlQxX1QgICAgICAgMzAKKyNkZWZpbmUgRE1BX1JFUV9VQVJUMV9SICAgICAgIDMxCisKKyNlbmRpZgkJCQkvKiBfQVNNX0FSQ0hfRE1BX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlteC9lbnRyeS1tYWNyby5TIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW14L2VudHJ5LW1hY3JvLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQwZWE3YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlteC9lbnRyeS1tYWNyby5TCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1pbXgvZW50cnktbWFjcm8uUworICoKKyAqIExvdy1sZXZlbCBJUlEgaGVscGVyIG1hY3JvcyBmb3IgaU1YLWJhc2VkIHBsYXRmb3JtcworICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisJCS5tYWNybwlkaXNhYmxlX2ZpcQorCQkuZW5kbQorI2RlZmluZSBBSVRDX05JVkVDU1IgICAweDQwCisJCS5tYWNybwlnZXRfaXJxbnJfYW5kX2Jhc2UsIGlycW5yLCBpcnFzdGF0LCBiYXNlLCB0bXAKKwkJbGRyCVxpcnFzdGF0LCA9SU9fQUREUkVTUyhJTVhfQUlUQ19CQVNFKQorCQlAIExvYWQgb2Zmc2V0ICYgcHJpb3JpdHkgb2YgdGhlIGhpZ2hlc3QgcHJpb3JpdHkKKwkJQCBpbnRlcnJ1cHQgcGVuZGluZy4KKwkJbGRyCVxpcnFuciwgW1xpcnFzdGF0LCAjQUlUQ19OSVZFQ1NSXQorCQlAIFNoaWZ0IG9mZiB0aGUgcHJpb3JpdHkgbGVhdmluZyB0aGUgb2Zmc2V0IG9yCisJCUAgImludGVycnVwdCBudW1iZXIiCisJCW1vdglcaXJxbnIsIFxpcnFuciwgbHNyICMxNgorIAkJbGRyCVxpcnFzdGF0LCA9MQlAIGR1bW15IGNvbXBhcmUKKwkJbGRyCVxiYXNlLCA9MHhGRkZGCQkvLyBpbnZhbGlkIGludGVycnVwdAorCQljbXAJXGlycW5yLCBcYmFzZQorCQlibmUJMTAwMWYKKwkJbGRyCVxpcnFzdGF0LCA9MAorMTAwMToKKwkJdHN0CVxpcnFzdGF0LCAjMQlAIHRvIG1ha2UgdGhlIGNvbmRpdGlvbiBjb2RlID0gVFJVRQorCQkuZW5kbQorCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbXgvaGFyZHdhcmUuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlteC9oYXJkd2FyZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkZmZiNmEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbXgvaGFyZHdhcmUuaApAQCAtMCwwICsxLDk5IEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWlteC9oYXJkd2FyZS5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5OSBBUk0gTGltaXRlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKyNpZm5kZWYgX19BU01fQVJDSF9IQVJEV0FSRV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfSEFSRFdBUkVfSAorCisjaW5jbHVkZSA8YXNtL3NpemVzLmg+CisjaW5jbHVkZSAiaW14LXJlZ3MuaCIKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyMgZGVmaW5lIF9fUkVHKHgpCSgqKCh2b2xhdGlsZSB1MzIgKilJT19BRERSRVNTKHgpKSkKKworIyBkZWZpbmUgX19SRUcyKHgseSkgICAgICAgICgqKHZvbGF0aWxlIHUzMiAqKSgodTMyKSZfX1JFRyh4KSArICh5KSkpCisjZW5kaWYKKworLyoKKyAqIE1lbW9yeSBtYXAKKyAqLworCisjZGVmaW5lIElNWF9JT19QSFlTCQkweDAwMjAwMDAwCisjZGVmaW5lIElNWF9JT19TSVpFCQkweDAwMTAwMDAwCisjZGVmaW5lIElNWF9JT19CQVNFCQkweGUwMDAwMDAwCisKKyNkZWZpbmUgSU1YX0NTMF9QSFlTCQkweDEwMDAwMDAwCisjZGVmaW5lIElNWF9DUzBfU0laRQkJMHgwMjAwMDAwMAorI2RlZmluZSBJTVhfQ1MwX1ZJUlQJCTB4ZTgwMDAwMDAKKworI2RlZmluZSBJTVhfQ1MxX1BIWVMJCTB4MTIwMDAwMDAKKyNkZWZpbmUgSU1YX0NTMV9TSVpFCQkweDAxMDAwMDAwCisjZGVmaW5lIElNWF9DUzFfVklSVAkJMHhlYTAwMDAwMAorCisjZGVmaW5lIElNWF9DUzJfUEhZUwkJMHgxMzAwMDAwMAorI2RlZmluZSBJTVhfQ1MyX1NJWkUJCTB4MDEwMDAwMDAKKyNkZWZpbmUgSU1YX0NTMl9WSVJUCQkweGViMDAwMDAwCisKKyNkZWZpbmUgSU1YX0NTM19QSFlTCQkweDE0MDAwMDAwCisjZGVmaW5lIElNWF9DUzNfU0laRQkJMHgwMTAwMDAwMAorI2RlZmluZSBJTVhfQ1MzX1ZJUlQJCTB4ZWMwMDAwMDAKKworI2RlZmluZSBJTVhfQ1M0X1BIWVMJCTB4MTUwMDAwMDAKKyNkZWZpbmUgSU1YX0NTNF9TSVpFCQkweDAxMDAwMDAwCisjZGVmaW5lIElNWF9DUzRfVklSVAkJMHhlZDAwMDAwMAorCisjZGVmaW5lIElNWF9DUzVfUEhZUwkJMHgxNjAwMDAwMAorI2RlZmluZSBJTVhfQ1M1X1NJWkUJCTB4MDEwMDAwMDAKKyNkZWZpbmUgSU1YX0NTNV9WSVJUCQkweGVlMDAwMDAwCisKKyNkZWZpbmUgSU1YX0ZCX1ZJUlQJCTB4RjEwMDAwMDAKKyNkZWZpbmUgSU1YX0ZCX1NJWkUJCSgyNTYqMTAyNCkKKworLyogbWFjcm8gdG8gZ2V0IGF0IElPIHNwYWNlIHdoZW4gcnVubmluZyB2aXJ0dWFsbHkgKi8KKyNkZWZpbmUgSU9fQUREUkVTUyh4KSAoKHgpIHwgSU1YX0lPX0JBU0UpCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisvKgorICogSGFuZHkgcm91dGluZSB0byBzZXQgR1BJTyBmdW5jdGlvbnMKKyAqLworZXh0ZXJuIHZvaWQgaW14X2dwaW9fbW9kZSggaW50IGdwaW9fbW9kZSApOworCisvKiBnZXQgZnJlcXVlbmNpZXMgaW4gSHogKi8KK2V4dGVybiB1bnNpZ25lZCBpbnQgaW14X2dldF9zeXN0ZW1fY2xrKHZvaWQpOworZXh0ZXJuIHVuc2lnbmVkIGludCBpbXhfZ2V0X21jdV9jbGsodm9pZCk7CitleHRlcm4gdW5zaWduZWQgaW50IGlteF9nZXRfcGVyY2xrMSh2b2lkKTsgLyogVUFSVFsxMl0sIFRpbWVyWzEyXSwgUFdNICovCitleHRlcm4gdW5zaWduZWQgaW50IGlteF9nZXRfcGVyY2xrMih2b2lkKTsgLyogTENELCBTRCwgU1BJWzEyXSAgICAgICAgICovCitleHRlcm4gdW5zaWduZWQgaW50IGlteF9nZXRfcGVyY2xrMyh2b2lkKTsgLyogU1NJICAgICAgICAgICAgICAgICAgICAgICovCitleHRlcm4gdW5zaWduZWQgaW50IGlteF9nZXRfaGNsayh2b2lkKTsgICAgLyogU0RSQU0sIENTSSwgTWVtb3J5IFN0aWNrLCovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSTJDLCBETUEgICAgICAgICAgICAgICAgICovCisjZW5kaWYKKworI2RlZmluZSBNQVhJUlFOVU0gICAgICAgICAgICAgICAgICAgICAgIDYyCisjZGVmaW5lIE1BWEZJUU5VTSAgICAgICAgICAgICAgICAgICAgICAgNjIKKyNkZWZpbmUgTUFYU1dJTlVNICAgICAgICAgICAgICAgICAgICAgICA2MgorCisvKgorICogVXNlIFNEUkFNIGZvciBtZW1vcnkKKyAqLworI2RlZmluZSBNRU1fU0laRQkJMHgwMTAwMDAwMAorCisjaWZkZWYgQ09ORklHX0FSQ0hfTVgxQURTCisjaW5jbHVkZSAibXgxYWRzLmgiCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbXgvaW14LXJlZ3MuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlteC9pbXgtcmVncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzMmMyMDMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbXgvaW14LXJlZ3MuaApAQCAtMCwwICsxLDU0OCBAQAorI2lmbmRlZiBfSU1YX1JFR1NfSAorI2RlZmluZSBfSU1YX1JFR1NfSAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgTW90b3JvbGEgSU1YIHN5c3RlbSByZWdpc3RlcnMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqLworCisvKgorICogIFJlZ2lzdGVyIEJBU0VzLCBiYXNlZCBvbiBPRkZTRVRzCisgKgorICovCisjZGVmaW5lIElNWF9BSVBJMV9CQVNFICAgICAgICAgICAgICgweDAwMDAwICsgSU1YX0lPX0JBU0UpCisjZGVmaW5lIElNWF9XRFRfQkFTRSAgICAgICAgICAgICAgICgweDAxMDAwICsgSU1YX0lPX0JBU0UpCisjZGVmaW5lIElNWF9USU0xX0JBU0UgICAgICAgICAgICAgICgweDAyMDAwICsgSU1YX0lPX0JBU0UpCisjZGVmaW5lIElNWF9USU0yX0JBU0UgICAgICAgICAgICAgICgweDAzMDAwICsgSU1YX0lPX0JBU0UpCisjZGVmaW5lIElNWF9SVENfQkFTRSAgICAgICAgICAgICAgICgweDA0MDAwICsgSU1YX0lPX0JBU0UpCisjZGVmaW5lIElNWF9MQ0RDX0JBU0UgICAgICAgICAgICAgICgweDA1MDAwICsgSU1YX0lPX0JBU0UpCisjZGVmaW5lIElNWF9VQVJUMV9CQVNFICAgICAgICAgICAgICgweDA2MDAwICsgSU1YX0lPX0JBU0UpCisjZGVmaW5lIElNWF9VQVJUMl9CQVNFICAgICAgICAgICAgICgweDA3MDAwICsgSU1YX0lPX0JBU0UpCisjZGVmaW5lIElNWF9QV01fQkFTRSAgICAgICAgICAgICAgICgweDA4MDAwICsgSU1YX0lPX0JBU0UpCisjZGVmaW5lIElNWF9ETUFDX0JBU0UgICAgICAgICAgICAgICgweDA5MDAwICsgSU1YX0lPX0JBU0UpCisjZGVmaW5lIElNWF9BSVBJMl9CQVNFICAgICAgICAgICAgICgweDEwMDAwICsgSU1YX0lPX0JBU0UpCisjZGVmaW5lIElNWF9TSU1fQkFTRSAgICAgICAgICAgICAgICgweDExMDAwICsgSU1YX0lPX0JBU0UpCisjZGVmaW5lIElNWF9VU0JEX0JBU0UgICAgICAgICAgICAgICgweDEyMDAwICsgSU1YX0lPX0JBU0UpCisjZGVmaW5lIElNWF9TUEkxX0JBU0UgICAgICAgICAgICAgICgweDEzMDAwICsgSU1YX0lPX0JBU0UpCisjZGVmaW5lIElNWF9NTUNfQkFTRSAgICAgICAgICAgICAgICgweDE0MDAwICsgSU1YX0lPX0JBU0UpCisjZGVmaW5lIElNWF9BU1BfQkFTRSAgICAgICAgICAgICAgICgweDE1MDAwICsgSU1YX0lPX0JBU0UpCisjZGVmaW5lIElNWF9CVEFfQkFTRSAgICAgICAgICAgICAgICgweDE2MDAwICsgSU1YX0lPX0JBU0UpCisjZGVmaW5lIElNWF9JMkNfQkFTRSAgICAgICAgICAgICAgICgweDE3MDAwICsgSU1YX0lPX0JBU0UpCisjZGVmaW5lIElNWF9TU0lfQkFTRSAgICAgICAgICAgICAgICgweDE4MDAwICsgSU1YX0lPX0JBU0UpCisjZGVmaW5lIElNWF9TUEkyX0JBU0UgICAgICAgICAgICAgICgweDE5MDAwICsgSU1YX0lPX0JBU0UpCisjZGVmaW5lIElNWF9NU0hDX0JBU0UgICAgICAgICAgICAgICgweDFBMDAwICsgSU1YX0lPX0JBU0UpCisjZGVmaW5lIElNWF9QTExfQkFTRSAgICAgICAgICAgICAgICgweDFCMDAwICsgSU1YX0lPX0JBU0UpCisjZGVmaW5lIElNWF9HUElPX0JBU0UgICAgICAgICAgICAgICgweDFDMDAwICsgSU1YX0lPX0JBU0UpCisjZGVmaW5lIElNWF9FSU1fQkFTRSAgICAgICAgICAgICAgICgweDIwMDAwICsgSU1YX0lPX0JBU0UpCisjZGVmaW5lIElNWF9TRFJBTUNfQkFTRSAgICAgICAgICAgICgweDIxMDAwICsgSU1YX0lPX0JBU0UpCisjZGVmaW5lIElNWF9NTUFfQkFTRSAgICAgICAgICAgICAgICgweDIyMDAwICsgSU1YX0lPX0JBU0UpCisjZGVmaW5lIElNWF9BSVRDX0JBU0UgICAgICAgICAgICAgICgweDIzMDAwICsgSU1YX0lPX0JBU0UpCisjZGVmaW5lIElNWF9DU0lfQkFTRSAgICAgICAgICAgICAgICgweDI0MDAwICsgSU1YX0lPX0JBU0UpCisKKy8qIFBMTCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgQ1NDUiAgIF9fUkVHKElNWF9QTExfQkFTRSkgICAgICAgIC8qIENsb2NrIFNvdXJjZSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIENTQ1JfU1lTVEVNX1NFTCAoMTw8MTYpCisKKyNkZWZpbmUgTVBDVEwwIF9fUkVHKElNWF9QTExfQkFTRSArIDB4NCkgIC8qIE1DVSBQTEwgQ29udHJvbCBSZWdpc3RlciAwICovCisjZGVmaW5lIE1QQ1RMMSBfX1JFRyhJTVhfUExMX0JBU0UgKyAweDgpICAvKiBNQ1UgUExMIGFuZCBTeXN0ZW0gQ2xvY2sgUmVnaXN0ZXIgMSAqLworI2RlZmluZSBTUENUTDAgX19SRUcoSU1YX1BMTF9CQVNFICsgMHhjKSAgLyogU3lzdGVtIFBMTCBDb250cm9sIFJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUgU1BDVEwxIF9fUkVHKElNWF9QTExfQkFTRSArIDB4MTApIC8qIFN5c3RlbSBQTEwgQ29udHJvbCBSZWdpc3RlciAxICovCisjZGVmaW5lIFBDRFIgICBfX1JFRyhJTVhfUExMX0JBU0UgKyAweDIwKSAvKiBQZXJpcGhlcmFsIENsb2NrIERpdmlkZXIgUmVnaXN0ZXIgKi8KKworI2RlZmluZSBDU0NSX01QTExfUkVTVEFSVCAoMTw8MjEpCisKKy8qCisgKiAgR1BJTyBNb2R1bGUgYW5kIEkvTyBNdWx0aXBsZXhlcgorICogIHggPSAwLi4zIGZvciByZWdfQSwgcmVnX0IsIHJlZ19DLCByZWdfRAorICovCisjZGVmaW5lIERESVIoeCkgICAgX19SRUcyKElNWF9HUElPX0JBU0UgKyAweDAwLCAoKHgpICYgMykgPDwgOCkKKyNkZWZpbmUgT0NSMSh4KSAgICBfX1JFRzIoSU1YX0dQSU9fQkFTRSArIDB4MDQsICgoeCkgJiAzKSA8PCA4KQorI2RlZmluZSBPQ1IyKHgpICAgIF9fUkVHMihJTVhfR1BJT19CQVNFICsgMHgwOCwgKCh4KSAmIDMpIDw8IDgpCisjZGVmaW5lIElDT05GQTEoeCkgX19SRUcyKElNWF9HUElPX0JBU0UgKyAweDBjLCAoKHgpICYgMykgPDwgOCkKKyNkZWZpbmUgSUNPTkZBMih4KSBfX1JFRzIoSU1YX0dQSU9fQkFTRSArIDB4MTAsICgoeCkgJiAzKSA8PCA4KQorI2RlZmluZSBJQ09ORkIxKHgpIF9fUkVHMihJTVhfR1BJT19CQVNFICsgMHgxNCwgKCh4KSAmIDMpIDw8IDgpCisjZGVmaW5lIElDT05GQjIoeCkgX19SRUcyKElNWF9HUElPX0JBU0UgKyAweDE4LCAoKHgpICYgMykgPDwgOCkKKyNkZWZpbmUgRFIoeCkgICAgICBfX1JFRzIoSU1YX0dQSU9fQkFTRSArIDB4MWMsICgoeCkgJiAzKSA8PCA4KQorI2RlZmluZSBHSVVTKHgpICAgIF9fUkVHMihJTVhfR1BJT19CQVNFICsgMHgyMCwgKCh4KSAmIDMpIDw8IDgpCisjZGVmaW5lIFNTUih4KSAgICAgX19SRUcyKElNWF9HUElPX0JBU0UgKyAweDI0LCAoKHgpICYgMykgPDwgOCkKKyNkZWZpbmUgSUNSMSh4KSAgICBfX1JFRzIoSU1YX0dQSU9fQkFTRSArIDB4MjgsICgoeCkgJiAzKSA8PCA4KQorI2RlZmluZSBJQ1IyKHgpICAgIF9fUkVHMihJTVhfR1BJT19CQVNFICsgMHgyYywgKCh4KSAmIDMpIDw8IDgpCisjZGVmaW5lIElNUih4KSAgICAgX19SRUcyKElNWF9HUElPX0JBU0UgKyAweDMwLCAoKHgpICYgMykgPDwgOCkKKyNkZWZpbmUgSVNSKHgpICAgICBfX1JFRzIoSU1YX0dQSU9fQkFTRSArIDB4MzQsICgoeCkgJiAzKSA8PCA4KQorI2RlZmluZSBHUFIoeCkgICAgIF9fUkVHMihJTVhfR1BJT19CQVNFICsgMHgzOCwgKCh4KSAmIDMpIDw8IDgpCisjZGVmaW5lIFNXUih4KSAgICAgX19SRUcyKElNWF9HUElPX0JBU0UgKyAweDNjLCAoKHgpICYgMykgPDwgOCkKKyNkZWZpbmUgUFVFTih4KSAgICBfX1JFRzIoSU1YX0dQSU9fQkFTRSArIDB4NDAsICgoeCkgJiAzKSA8PCA4KQorCisjZGVmaW5lIEdQSU9fUElOX01BU0sgMHgxZgorI2RlZmluZSBHUElPX1BPUlRfTUFTSyAoMHgzIDw8IDUpCisKKyNkZWZpbmUgR1BJT19QT1JUQSAoMDw8NSkKKyNkZWZpbmUgR1BJT19QT1JUQiAoMTw8NSkKKyNkZWZpbmUgR1BJT19QT1JUQyAoMjw8NSkKKyNkZWZpbmUgR1BJT19QT1JURCAoMzw8NSkKKworI2RlZmluZSBHUElPX09VVCAgICgxPDw3KQorI2RlZmluZSBHUElPX0lOICAgICgwPDw3KQorI2RlZmluZSBHUElPX1BVRU4gICgxPDw4KQorCisjZGVmaW5lIEdQSU9fUEYgICAgKDA8PDkpCisjZGVmaW5lIEdQSU9fQUYgICAgKDE8PDkpCisKKyNkZWZpbmUgR1BJT19PQ1JfTUFTSyAoMzw8MTApCisjZGVmaW5lIEdQSU9fQUlOICAgKDA8PDEwKQorI2RlZmluZSBHUElPX0JJTiAgICgxPDwxMCkKKyNkZWZpbmUgR1BJT19DSU4gICAoMjw8MTApCisjZGVmaW5lIEdQSU9fR1BJTyAgKDM8PDEwKQorCisjZGVmaW5lIEdQSU9fQU9VVCAgKDE8PDEyKQorI2RlZmluZSBHUElPX0JPVVQgICgxPDwxMykKKworLyogYXNzaWduZW1lbnRzIGZvciBHUElPIGFsdGVybmF0ZS9wcmltYXJ5IGZ1bmN0aW9ucyAqLworCisvKiBGSVhNRTogVGhpcyBsaXN0IGlzIG5vdCBjb21wbGV0ZWQuIFRoZSBjb3JyZWN0IGRpcmVjdGlvbnMgYXJlCisgKiBtaXNzaW5nIG9uIHNvbWUgKG1hbnkpIHBpbnMKKyAqLworI2RlZmluZSBQQTBfUEZfQTI0ICAgICAgICAgICAoIEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMCApCisjZGVmaW5lIFBBMF9BSU5fU1BJMl9DTEsgICAgICggR1BJT19QT1JUQSB8IEdQSU9fT1VUIHwgR1BJT19BSU4gfCAwICkKKyNkZWZpbmUgUEEwX0FGX0VUTVRSQUNFU1lOQyAgKCBHUElPX1BPUlRBIHwgR1BJT19BRiB8IDAgKQorI2RlZmluZSBQQTFfQU9VVF9TUEkyX1JYRCAgICAoIEdQSU9fUE9SVEEgfCBHUElPX0lOIHwgR1BJT19BT1VUIHwgMSApCisjZGVmaW5lIFBBMV9QRl9USU4gICAgICAgICAgICggR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAxICkKKyNkZWZpbmUgUEEyX1BGX1BXTTAgICAgICAgICAgKCBHUElPX1BPUlRBIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMiApCisjZGVmaW5lIFBBM19QRl9DU0lfTUNMSyAgICAgICggR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAzICkKKyNkZWZpbmUgUEE0X1BGX0NTSV9EMCAgICAgICAgKCBHUElPX1BPUlRBIHwgR1BJT19QRiB8IDQgKQorI2RlZmluZSBQQTVfUEZfQ1NJX0QxICAgICAgICAoIEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgNSApCisjZGVmaW5lIFBBNl9QRl9DU0lfRDIgICAgICAgICggR1BJT19QT1JUQSB8IEdQSU9fUEYgfCA2ICkKKyNkZWZpbmUgUEE3X1BGX0NTSV9EMyAgICAgICAgKCBHUElPX1BPUlRBIHwgR1BJT19QRiB8IDcgKQorI2RlZmluZSBQQThfUEZfQ1NJX0Q0ICAgICAgICAoIEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgOCApCisjZGVmaW5lIFBBOV9QRl9DU0lfRDUgICAgICAgICggR1BJT19QT1JUQSB8IEdQSU9fUEYgfCA5ICkKKyNkZWZpbmUgUEExMF9QRl9DU0lfRDYgICAgICAgKCBHUElPX1BPUlRBIHwgR1BJT19QRiB8IDEwICkKKyNkZWZpbmUgUEExMV9QRl9DU0lfRDcgICAgICAgKCBHUElPX1BPUlRBIHwgR1BJT19QRiB8IDExICkKKyNkZWZpbmUgUEExMl9QRl9DU0lfVlNZTkMgICAgKCBHUElPX1BPUlRBIHwgR1BJT19QRiB8IDEyICkKKyNkZWZpbmUgUEExM19QRl9DU0lfSFNZTkMgICAgKCBHUElPX1BPUlRBIHwgR1BJT19QRiB8IDEzICkKKyNkZWZpbmUgUEExNF9QRl9DU0lfUElYQ0xLICAgKCBHUElPX1BPUlRBIHwgR1BJT19QRiB8IDE0ICkKKyNkZWZpbmUgUEExNV9QRl9JMkNfU0RBICAgICAgKCBHUElPX1BPUlRBIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMTUgKQorI2RlZmluZSBQQTE2X1BGX0kyQ19TQ0wgICAgICAoIEdQSU9fUE9SVEEgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAxNiApCisjZGVmaW5lIFBBMTdfQUZfRVRNVFJBQ0VQS1Q0ICggR1BJT19QT1JUQSB8IEdQSU9fQUYgfCAxNyApCisjZGVmaW5lIFBBMTdfQUlOX1NQSTJfU1MgICAgICggR1BJT19QT1JUQSB8IEdQSU9fQUlOIHwgMTcgKQorI2RlZmluZSBQQTE4X0FGX0VUTVRSQUNFUEtUNSAoIEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMTggKQorI2RlZmluZSBQQTE5X0FGX0VUTVRSQUNFUEtUNiAoIEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMTkgKQorI2RlZmluZSBQQTIwX0FGX0VUTVRSQUNFUEtUNyAoIEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMjAgKQorI2RlZmluZSBQQTIxX1BGX0EwICAgICAgICAgICAoIEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMjEgKQorI2RlZmluZSBQQTIyX1BGX0NTNCAgICAgICAgICAoIEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMjIgKQorI2RlZmluZSBQQTIzX1BGX0NTNSAgICAgICAgICAoIEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMjMgKQorI2RlZmluZSBQQTI0X1BGX0ExNiAgICAgICAgICAoIEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMjQgKQorI2RlZmluZSBQQTI0X0FGX0VUTVRSQUNFUEtUMCAoIEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMjQgKQorI2RlZmluZSBQQTI1X1BGX0ExNyAgICAgICAgICAoIEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMjUgKQorI2RlZmluZSBQQTI1X0FGX0VUTVRSQUNFUEtUMSAoIEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMjUgKQorI2RlZmluZSBQQTI2X1BGX0ExOCAgICAgICAgICAoIEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMjYgKQorI2RlZmluZSBQQTI2X0FGX0VUTVRSQUNFUEtUMiAoIEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMjYgKQorI2RlZmluZSBQQTI3X1BGX0ExOSAgICAgICAgICAoIEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMjcgKQorI2RlZmluZSBQQTI3X0FGX0VUTVRSQUNFUEtUMyAoIEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMjcgKQorI2RlZmluZSBQQTI4X1BGX0EyMCAgICAgICAgICAoIEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMjggKQorI2RlZmluZSBQQTI4X0FGX0VUTVBJUEVTVEFUMCAoIEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMjggKQorI2RlZmluZSBQQTI5X1BGX0EyMSAgICAgICAgICAoIEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMjkgKQorI2RlZmluZSBQQTI5X0FGX0VUTVBJUEVTVEFUMSAoIEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMjkgKQorI2RlZmluZSBQQTMwX1BGX0EyMiAgICAgICAgICAoIEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMzAgKQorI2RlZmluZSBQQTMwX0FGX0VUTVBJUEVTVEFUMiAoIEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMzAgKQorI2RlZmluZSBQQTMxX1BGX0EyMyAgICAgICAgICAoIEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMzEgKQorI2RlZmluZSBQQTMxX0FGX0VUTVRSQUNFQ0xLICAoIEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMzEgKQorI2RlZmluZSBQQjhfUEZfU0RfREFUMCAgICAgICAoIEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgR1BJT19QVUVOIHwgOCApCisjZGVmaW5lIFBCOF9BRl9NU19QSU8gICAgICAgICggR1BJT19QT1JUQiB8IEdQSU9fQUYgfCA4ICkKKyNkZWZpbmUgUEI5X1BGX1NEX0RBVDEgICAgICAgKCBHUElPX1BPUlRCIHwgR1BJT19QRiB8IEdQSU9fUFVFTiAgfCA5ICkKKyNkZWZpbmUgUEI5X0FGX01TX1BJMSAgICAgICAgKCBHUElPX1BPUlRCIHwgR1BJT19BRiB8IDkgKQorI2RlZmluZSBQQjEwX1BGX1NEX0RBVDIgICAgICAoIEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgR1BJT19QVUVOICB8IDEwICkKKyNkZWZpbmUgUEIxMF9BRl9NU19TQ0xLSSAgICAgKCBHUElPX1BPUlRCIHwgR1BJT19BRiB8IDEwICkKKyNkZWZpbmUgUEIxMV9QRl9TRF9EQVQzICAgICAgKCBHUElPX1BPUlRCIHwgR1BJT19QRiB8IDExICkKKyNkZWZpbmUgUEIxMV9BRl9NU19TRElPICAgICAgKCBHUElPX1BPUlRCIHwgR1BJT19BRiB8IDExICkKKyNkZWZpbmUgUEIxMl9QRl9TRF9DTEsgICAgICAgKCBHUElPX1BPUlRCIHwgR1BJT19QRiB8IDEyICkKKyNkZWZpbmUgUEIxMl9BRl9NU19TQ0xLMCAgICAgKCBHUElPX1BPUlRCIHwgR1BJT19BRiB8IDEyICkKKyNkZWZpbmUgUEIxM19QRl9TRF9DTUQgICAgICAgKCBHUElPX1BPUlRCIHwgR1BJT19QRiB8IEdQSU9fUFVFTiB8IDEzICkKKyNkZWZpbmUgUEIxM19BRl9NU19CUyAgICAgICAgKCBHUElPX1BPUlRCIHwgR1BJT19BRiB8IDEzICkKKyNkZWZpbmUgUEIxNF9BRl9TU0lfUlhGUyAgICAgKCBHUElPX1BPUlRCIHwgR1BJT19BRiB8IDE0ICkKKyNkZWZpbmUgUEIxNV9BRl9TU0lfUlhDTEsgICAgKCBHUElPX1BPUlRCIHwgR1BJT19BRiB8IDE1ICkKKyNkZWZpbmUgUEIxNl9BRl9TU0lfUlhEQVQgICAgKCBHUElPX1BPUlRCIHwgR1BJT19JTiB8IEdQSU9fQUYgfCAxNiApCisjZGVmaW5lIFBCMTdfQUZfU1NJX1RYREFUICAgICggR1BJT19QT1JUQiB8IEdQSU9fT1VUIHwgR1BJT19BRiB8IDE3ICkKKyNkZWZpbmUgUEIxOF9BRl9TU0lfVFhGUyAgICAgKCBHUElPX1BPUlRCIHwgR1BJT19BRiB8IDE4ICkKKyNkZWZpbmUgUEIxOV9BRl9TU0lfVFhDTEsgICAgKCBHUElPX1BPUlRCIHwgR1BJT19BRiB8IDE5ICkKKyNkZWZpbmUgUEIyMF9QRl9VU0JEX0FGRSAgICAgKCBHUElPX1BPUlRCIHwgR1BJT19QRiB8IDIwICkKKyNkZWZpbmUgUEIyMV9QRl9VU0JEX09FICAgICAgKCBHUElPX1BPUlRCIHwgR1BJT19QRiB8IDIxICkKKyNkZWZpbmUgUEIyMl9QRlVTQkRfUkNWICAgICAgKCBHUElPX1BPUlRCIHwgR1BJT19QRiB8IDIyICkKKyNkZWZpbmUgUEIyM19QRl9VU0JEX1NVU1BORCAgKCBHUElPX1BPUlRCIHwgR1BJT19QRiB8IDIzICkKKyNkZWZpbmUgUEIyNF9QRl9VU0JEX1ZQICAgICAgKCBHUElPX1BPUlRCIHwgR1BJT19QRiB8IDI0ICkKKyNkZWZpbmUgUEIyNV9QRl9VU0JEX1ZNICAgICAgKCBHUElPX1BPUlRCIHwgR1BJT19QRiB8IDI1ICkKKyNkZWZpbmUgUEIyNl9QRl9VU0JEX1ZQTyAgICAgKCBHUElPX1BPUlRCIHwgR1BJT19QRiB8IDI2ICkKKyNkZWZpbmUgUEIyN19QRl9VU0JEX1ZNTyAgICAgKCBHUElPX1BPUlRCIHwgR1BJT19QRiB8IDI3ICkKKyNkZWZpbmUgUEIyOF9QRl9VQVJUMl9DVFMgICAgKCBHUElPX1BPUlRCIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMjggKQorI2RlZmluZSBQQjI5X1BGX1VBUlQyX1JUUyAgICAoIEdQSU9fUE9SVEIgfCBHUElPX0lOIHwgR1BJT19QRiB8IDI5ICkKKyNkZWZpbmUgUEIzMF9QRl9VQVJUMl9UWEQgICAgKCBHUElPX1BPUlRCIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMzAgKQorI2RlZmluZSBQQjMxX1BGX1VBUlQyX1JYRCAgICAoIEdQSU9fUE9SVEIgfCBHUElPX0lOIHwgR1BJT19QRiB8IDMxICkKKyNkZWZpbmUgUEMzX1BGX1NTSV9SWEZTICAgICAgKCBHUElPX1BPUlRDIHwgR1BJT19QRiB8IDMgKQorI2RlZmluZSBQQzRfUEZfU1NJX1JYQ0xLICAgICAoIEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgNCApCisjZGVmaW5lIFBDNV9QRl9TU0lfUlhEQVQgICAgICggR1BJT19QT1JUQyB8IEdQSU9fSU4gfCBHUElPX1BGIHwgNSApCisjZGVmaW5lIFBDNl9QRl9TU0lfVFhEQVQgICAgICggR1BJT19QT1JUQyB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDYgKQorI2RlZmluZSBQQzdfUEZfU1NJX1RYRlMgICAgICAoIEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgNyApCisjZGVmaW5lIFBDOF9QRl9TU0lfVFhDTEsgICAgICggR1BJT19QT1JUQyB8IEdQSU9fUEYgfCA4ICkKKyNkZWZpbmUgUEM5X1BGX1VBUlQxX0NUUyAgICAgKCBHUElPX1BPUlRDIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgOSApCisjZGVmaW5lIFBDMTBfUEZfVUFSVDFfUlRTICAgICggR1BJT19QT1JUQyB8IEdQSU9fSU4gfCBHUElPX1BGIHwgMTAgKQorI2RlZmluZSBQQzExX1BGX1VBUlQxX1RYRCAgICAoIEdQSU9fUE9SVEMgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAxMSApCisjZGVmaW5lIFBDMTJfUEZfVUFSVDFfUlhEICAgICggR1BJT19QT1JUQyB8IEdQSU9fSU4gfCBHUElPX1BGIHwgMTIgKQorI2RlZmluZSBQQzEzX1BGX1NQSTFfU1BJX1JEWSAoIEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgMTMgKQorI2RlZmluZSBQQzE0X1BGX1NQSTFfU0NMSyAgICAoIEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgMTQgKQorI2RlZmluZSBQQzE1X1BGX1NQSTFfU1MgICAgICAoIEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgMTUgKQorI2RlZmluZSBQQzE2X1BGX1NQSTFfTUlTTyAgICAoIEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgMTYgKQorI2RlZmluZSBQQzE3X1BGX1NQSTFfTU9TSSAgICAoIEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgMTcgKQorI2RlZmluZSBQRDZfUEZfTFNDTEsgICAgICAgICAoIEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IEdQSU9fUEYgfCA2ICkKKyNkZWZpbmUgUEQ3X1BGX1JFViAgICAgICAgICAgKCBHUElPX1BPUlREIHwgR1BJT19QRiB8IDcgKQorI2RlZmluZSBQRDdfQUZfVUFSVDJfRFRSICAgICAoIEdQSU9fUE9SVEQgfCBHUElPX0lOIHwgR1BJT19BRiB8IDcgKQorI2RlZmluZSBQRDdfQUlOX1NQSTJfU0NMSyAgICAoIEdQSU9fUE9SVEQgfCBHUElPX0FJTiB8IDcgKQorI2RlZmluZSBQRDhfUEZfQ0xTICAgICAgICAgICAoIEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgOCApCisjZGVmaW5lIFBEOF9BRl9VQVJUMl9EQ0QgICAgICggR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19BRiB8IDggKQorI2RlZmluZSBQRDhfQUlOX1NQSTJfU1MgICAgICAoIEdQSU9fUE9SVEQgfCBHUElPX0FJTiB8IDggKQorI2RlZmluZSBQRDlfUEZfUFMgICAgICAgICAgICAoIEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgOSApCisjZGVmaW5lIFBEOV9BRl9VQVJUMl9SSSAgICAgICggR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19BRiB8IDkgKQorI2RlZmluZSBQRDlfQU9VVF9TUEkyX1JYRCAgICAoIEdQSU9fUE9SVEQgfCBHUElPX0lOIHwgR1BJT19BT1VUIHwgOSApCisjZGVmaW5lIFBEMTBfUEZfU1BMX1NQUiAgICAgICggR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDEwICkKKyNkZWZpbmUgUEQxMF9BRl9VQVJUMl9EU1IgICAgKCBHUElPX1BPUlREIHwgR1BJT19PVVQgfCBHUElPX0FGIHwgMTAgKQorI2RlZmluZSBQRDEwX0FJTl9TUEkyX1RYRCAgICAoIEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IEdQSU9fQUlOIHwgMTAgKQorI2RlZmluZSBQRDExX1BGX0NPTlRSQVNUICAgICAoIEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAxMSApCisjZGVmaW5lIFBEMTJfUEZfQUNEX09FICAgICAgICggR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDEyICkKKyNkZWZpbmUgUEQxM19QRl9MUF9IU1lOQyAgICAgKCBHUElPX1BPUlREIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMTMgKQorI2RlZmluZSBQRDE0X1BGX0ZMTV9WU1lOQyAgICAoIEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAxNCApCisjZGVmaW5lIFBEMTVfUEZfTEQwICAgICAgICAgICggR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDE1ICkKKyNkZWZpbmUgUEQxNl9QRl9MRDEgICAgICAgICAgKCBHUElPX1BPUlREIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMTYgKQorI2RlZmluZSBQRDE3X1BGX0xEMiAgICAgICAgICAoIEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAxNyApCisjZGVmaW5lIFBEMThfUEZfTEQzICAgICAgICAgICggR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDE4ICkKKyNkZWZpbmUgUEQxOV9QRl9MRDQgICAgICAgICAgKCBHUElPX1BPUlREIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMTkgKQorI2RlZmluZSBQRDIwX1BGX0xENSAgICAgICAgICAoIEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAyMCApCisjZGVmaW5lIFBEMjFfUEZfTEQ2ICAgICAgICAgICggR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDIxICkKKyNkZWZpbmUgUEQyMl9QRl9MRDcgICAgICAgICAgKCBHUElPX1BPUlREIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMjIgKQorI2RlZmluZSBQRDIzX1BGX0xEOCAgICAgICAgICAoIEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAyMyApCisjZGVmaW5lIFBEMjRfUEZfTEQ5ICAgICAgICAgICggR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDI0ICkKKyNkZWZpbmUgUEQyNV9QRl9MRDEwICAgICAgICAgKCBHUElPX1BPUlREIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMjUgKQorI2RlZmluZSBQRDI2X1BGX0xEMTEgICAgICAgICAoIEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAyNiApCisjZGVmaW5lIFBEMjdfUEZfTEQxMiAgICAgICAgICggR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDI3ICkKKyNkZWZpbmUgUEQyOF9QRl9MRDEzICAgICAgICAgKCBHUElPX1BPUlREIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMjggKQorI2RlZmluZSBQRDI5X1BGX0xEMTQgICAgICAgICAoIEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAyOSApCisjZGVmaW5lIFBEMzBfUEZfTEQxNSAgICAgICAgICggR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDMwICkKKyNkZWZpbmUgUEQzMV9QRl9UTVIyT1VUICAgICAgKCBHUElPX1BPUlREIHwgR1BJT19QRiB8IDMxICkKKyNkZWZpbmUgUEQzMV9CSU5fU1BJMl9UWEQgICAgKCBHUElPX1BPUlREIHwgR1BJT19CSU4gfCAzMSApCisKKy8qCisgKiAgRE1BIENvbnRyb2xsZXIKKyAqLworI2RlZmluZSBEQ1IgICAgIF9fUkVHKElNWF9ETUFDX0JBU0UgKzB4MDApCS8qIERNQSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIERJU1IgICAgX19SRUcoSU1YX0RNQUNfQkFTRSArMHgwNCkJLyogRE1BIEludGVycnVwdCBzdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRElNUiAgICBfX1JFRyhJTVhfRE1BQ19CQVNFICsweDA4KQkvKiBETUEgSW50ZXJydXB0IG1hc2sgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgREJUT1NSICBfX1JFRyhJTVhfRE1BQ19CQVNFICsweDBjKQkvKiBETUEgQnVyc3QgdGltZW91dCBzdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRFJUT1NSICBfX1JFRyhJTVhfRE1BQ19CQVNFICsweDEwKQkvKiBETUEgUmVxdWVzdCB0aW1lb3V0IFJlZ2lzdGVyICovCisjZGVmaW5lIERTRVNSICAgX19SRUcoSU1YX0RNQUNfQkFTRSArMHgxNCkJLyogRE1BIFRyYW5zZmVyIEVycm9yIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBEQk9TUiAgIF9fUkVHKElNWF9ETUFDX0JBU0UgKzB4MTgpCS8qIERNQSBCdWZmZXIgb3ZlcmZsb3cgc3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIERCVE9DUiAgX19SRUcoSU1YX0RNQUNfQkFTRSArMHgxYykJLyogRE1BIEJ1cnN0IHRpbWVvdXQgY29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBXU1JBICAgIF9fUkVHKElNWF9ETUFDX0JBU0UgKzB4NDApCS8qIFctU2l6ZSBSZWdpc3RlciBBICovCisjZGVmaW5lIFhTUkEgICAgX19SRUcoSU1YX0RNQUNfQkFTRSArMHg0NCkJLyogWC1TaXplIFJlZ2lzdGVyIEEgKi8KKyNkZWZpbmUgWVNSQSAgICBfX1JFRyhJTVhfRE1BQ19CQVNFICsweDQ4KQkvKiBZLVNpemUgUmVnaXN0ZXIgQSAqLworI2RlZmluZSBXU1JCICAgIF9fUkVHKElNWF9ETUFDX0JBU0UgKzB4NGMpCS8qIFctU2l6ZSBSZWdpc3RlciBCICovCisjZGVmaW5lIFhTUkIgICAgX19SRUcoSU1YX0RNQUNfQkFTRSArMHg1MCkJLyogWC1TaXplIFJlZ2lzdGVyIEIgKi8KKyNkZWZpbmUgWVNSQiAgICBfX1JFRyhJTVhfRE1BQ19CQVNFICsweDU0KQkvKiBZLVNpemUgUmVnaXN0ZXIgQiAqLworI2RlZmluZSBTQVIoeCkgIF9fUkVHMiggSU1YX0RNQUNfQkFTRSArIDB4ODAsICh4KSA8PCA2KQkvKiBTb3VyY2UgQWRkcmVzcyBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgREFSKHgpICBfX1JFRzIoIElNWF9ETUFDX0JBU0UgKyAweDg0LCAoeCkgPDwgNikJLyogRGVzdGluYXRpb24gQWRkcmVzcyBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgQ05UUih4KSBfX1JFRzIoIElNWF9ETUFDX0JBU0UgKyAweDg4LCAoeCkgPDwgNikJLyogQ291bnQgUmVnaXN0ZXJzICovCisjZGVmaW5lIENDUih4KSAgX19SRUcyKCBJTVhfRE1BQ19CQVNFICsgMHg4YywgKHgpIDw8IDYpCS8qoENvbnRyb2wgUmVnaXN0ZXJzICovCisjZGVmaW5lIFJTU1IoeCkgX19SRUcyKCBJTVhfRE1BQ19CQVNFICsgMHg5MCwgKHgpIDw8IDYpCS8qIFJlcXVlc3Qgc291cmNlIHNlbGVjdCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgQkxSKHgpICBfX1JFRzIoIElNWF9ETUFDX0JBU0UgKyAweDk0LCAoeCkgPDwgNikJLyogQnVyc3QgbGVuZ3RoIFJlZ2lzdGVycyAqLworI2RlZmluZSBSVE9SKHgpIF9fUkVHMiggSU1YX0RNQUNfQkFTRSArIDB4OTgsICh4KSA8PCA2KQkvKiBSZXF1ZXN0IHRpbWVvdXQgUmVnaXN0ZXJzICovCisjZGVmaW5lIEJVQ1IoeCkgX19SRUcyKCBJTVhfRE1BQ19CQVNFICsgMHg5OCwgKHgpIDw8IDYpCS8qIEJ1cyBVdGlsaXphdGlvbiBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBEQ1JfRFJTVCAgICAgICAgICAgKDE8PDEpCisjZGVmaW5lIERDUl9ERU4gICAgICAgICAgICAoMTw8MCkKKyNkZWZpbmUgREJUT0NSX0VOICAgICAgICAgICgxPDwxNSkKKyNkZWZpbmUgREJUT0NSX0NOVCh4KSAgICAgICgoeCkgJiAweDdmZmYgKQorI2RlZmluZSBDTlRSX0NOVCh4KSAgICAgICAgKCh4KSAmIDB4ZmZmZmZmICkKKyNkZWZpbmUgQ0NSX0RNT0RfTElORUFSICAgICggMHgwIDw8IDEyICkKKyNkZWZpbmUgQ0NSX0RNT0RfMkQgICAgICAgICggMHgxIDw8IDEyICkKKyNkZWZpbmUgQ0NSX0RNT0RfRklGTyAgICAgICggMHgyIDw8IDEyICkKKyNkZWZpbmUgQ0NSX0RNT0RfRU9CRklGTyAgICggMHgzIDw8IDEyICkKKyNkZWZpbmUgQ0NSX1NNT0RfTElORUFSICAgICggMHgwIDw8IDEwICkKKyNkZWZpbmUgQ0NSX1NNT0RfMkQgICAgICAgICggMHgxIDw8IDEwICkKKyNkZWZpbmUgQ0NSX1NNT0RfRklGTyAgICAgICggMHgyIDw8IDEwICkKKyNkZWZpbmUgQ0NSX1NNT0RfRU9CRklGTyAgICggMHgzIDw8IDEwICkKKyNkZWZpbmUgQ0NSX01ESVJfREVDICAgICAgICgxPDw5KQorI2RlZmluZSBDQ1JfTVNFTF9CICAgICAgICAgKDE8PDgpCisjZGVmaW5lIENDUl9EU0laXzMyICAgICAgICAoIDB4MCA8PCA2ICkKKyNkZWZpbmUgQ0NSX0RTSVpfOCAgICAgICAgICggMHgxIDw8IDYgKQorI2RlZmluZSBDQ1JfRFNJWl8xNiAgICAgICAgKCAweDIgPDwgNiApCisjZGVmaW5lIENDUl9TU0laXzMyICAgICAgICAoIDB4MCA8PCA0ICkKKyNkZWZpbmUgQ0NSX1NTSVpfOCAgICAgICAgICggMHgxIDw8IDQgKQorI2RlZmluZSBDQ1JfU1NJWl8xNiAgICAgICAgKCAweDIgPDwgNCApCisjZGVmaW5lIENDUl9SRU4gICAgICAgICAgICAoMTw8MykKKyNkZWZpbmUgQ0NSX1JQVCAgICAgICAgICAgICgxPDwyKQorI2RlZmluZSBDQ1JfRlJDICAgICAgICAgICAgKDE8PDEpCisjZGVmaW5lIENDUl9DRU4gICAgICAgICAgICAoMTw8MCkKKyNkZWZpbmUgUlRPUl9FTiAgICAgICAgICAgICgxPDwxNSkKKyNkZWZpbmUgUlRPUl9DTEsgICAgICAgICAgICgxPDwxNCkKKyNkZWZpbmUgUlRPUl9QU0MgICAgICAgICAgICgxPDwxMykKKworLyoKKyAqICBJbnRlcnJ1cHQgY29udHJvbGxlcgorICovCisKKyNkZWZpbmUgSU1YX0lOVENOVEwgICAgICAgIF9fUkVHKElNWF9BSVRDX0JBU0UrMHgwMCkKKyNkZWZpbmUgSU5UQ05UTF9GSUFEICAgICAgICgxPDwxOSkKKyNkZWZpbmUgSU5UQ05UTF9OSUFEICAgICAgICgxPDwyMCkKKworI2RlZmluZSBJTVhfTklNQVNLICAgICAgICAgX19SRUcoSU1YX0FJVENfQkFTRSsweDA0KQorI2RlZmluZSBJTVhfSU5URU5OVU0gICAgICAgX19SRUcoSU1YX0FJVENfQkFTRSsweDA4KQorI2RlZmluZSBJTVhfSU5URElTTlVNICAgICAgX19SRUcoSU1YX0FJVENfQkFTRSsweDBjKQorI2RlZmluZSBJTVhfSU5URU5BQkxFSCAgICAgX19SRUcoSU1YX0FJVENfQkFTRSsweDEwKQorI2RlZmluZSBJTVhfSU5URU5BQkxFTCAgICAgX19SRUcoSU1YX0FJVENfQkFTRSsweDE0KQorCisvKgorICogIEdlbmVyYWwgcHVycG9zZSB0aW1lcnMKKyAqLworI2RlZmluZSBJTVhfVENUTCh4KSAgICAgICAgX19SRUcoIDB4MDAgKyAoeCkpCisjZGVmaW5lIFRDVExfU1dSICAgICAgICAgICAoMTw8MTUpCisjZGVmaW5lIFRDVExfRlJSICAgICAgICAgICAoMTw8OCkKKyNkZWZpbmUgVENUTF9DQVBfUklTICAgICAgICgxPDw2KQorI2RlZmluZSBUQ1RMX0NBUF9GQUwgICAgICAgKDI8PDYpCisjZGVmaW5lIFRDVExfQ0FQX1JJU19GQUwgICAoMzw8NikKKyNkZWZpbmUgVENUTF9PTSAgICAgICAgICAgICgxPDw1KQorI2RlZmluZSBUQ1RMX0lSUUVOICAgICAgICAgKDE8PDQpCisjZGVmaW5lIFRDVExfQ0xLX1BDTEsxICAgICAoMTw8MSkKKyNkZWZpbmUgVENUTF9DTEtfUENMSzFfMTYgICgyPDwxKQorI2RlZmluZSBUQ1RMX0NMS19USU4gICAgICAgKDM8PDEpCisjZGVmaW5lIFRDVExfQ0xLXzMyICAgICAgICAoNDw8MSkKKyNkZWZpbmUgVENUTF9URU4gICAgICAgICAgICgxPDwwKQorCisjZGVmaW5lIElNWF9UUFJFUih4KSAgICAgICBfX1JFRyggMHgwNCArICh4KSkKKyNkZWZpbmUgSU1YX1RDTVAoeCkgICAgICAgIF9fUkVHKCAweDA4ICsgKHgpKQorI2RlZmluZSBJTVhfVENSKHgpICAgICAgICAgX19SRUcoIDB4MEMgKyAoeCkpCisjZGVmaW5lIElNWF9UQ04oeCkgICAgICAgICBfX1JFRyggMHgxMCArICh4KSkKKyNkZWZpbmUgSU1YX1RTVEFUKHgpICAgICAgIF9fUkVHKCAweDE0ICsgKHgpKQorI2RlZmluZSBUU1RBVF9DQVBUICAgICAgICAgKDE8PDEpCisjZGVmaW5lIFRTVEFUX0NPTVAgICAgICAgICAoMTw8MCkKKworLyoKKyAqIExDRCBDb250cm9sbGVyCisgKi8KKworI2RlZmluZSBMQ0RDX1NTQQlfX1JFRyhJTVhfTENEQ19CQVNFKzB4MDApCisKKyNkZWZpbmUgTENEQ19TSVpFCV9fUkVHKElNWF9MQ0RDX0JBU0UrMHgwNCkKKyNkZWZpbmUgU0laRV9YTUFYKHgpCSgoKCh4KSA+PiA0KSAmIDB4M2YpIDw8IDIwKQorI2RlZmluZSBTSVpFX1lNQVgoeSkgICAgKCAoeSkgJiAweDFmZiApCisKKyNkZWZpbmUgTENEQ19WUFcJX19SRUcoSU1YX0xDRENfQkFTRSsweDA4KQorI2RlZmluZSBWUFdfVlBXKHgpCSggKHgpICYgMHgzZmYgKQorCisjZGVmaW5lIExDRENfQ1BPUwlfX1JFRyhJTVhfTENEQ19CQVNFKzB4MEMpCisjZGVmaW5lIENQT1NfQ0MxICAgICAgICAoMTw8MzEpCisjZGVmaW5lIENQT1NfQ0MwICAgICAgICAoMTw8MzApCisjZGVmaW5lIENQT1NfT1AgICAgICAgICAoMTw8MjgpCisjZGVmaW5lIENQT1NfQ1hQKHgpICAgICAoKCh4KSAmIDNmZikgPDwgMTYpCisjZGVmaW5lIENQT1NfQ1lQKHkpICAgICAoKHkpICYgMHgxZmYpCisKKyNkZWZpbmUgTENEQ19MQ1dIQglfX1JFRyhJTVhfTENEQ19CQVNFKzB4MTApCisjZGVmaW5lIExDV0hCX0JLX0VOICAgICAoMTw8MzEpCisjZGVmaW5lIExDV0hCX0NXKHcpICAgICAoKCh3KSAmIDB4MWYpIDw8IDI0KQorI2RlZmluZSBMQ1dIQl9DSChoKSAgICAgKCgoaCkgJiAweDFmKSA8PCAxNikKKyNkZWZpbmUgTENXSEJfQkQoeCkgICAgICgoeCkgJiAweGZmKQorCisjZGVmaW5lIExDRENfTENIQ0MJX19SRUcoSU1YX0xDRENfQkFTRSsweDE0KQorI2RlZmluZSBMQ0hDQ19DVVJfQ09MX1IocikgKCgocikgJiAweDFmKSA8PCAxMSkKKyNkZWZpbmUgTENIQ0NfQ1VSX0NPTF9HKGcpICgoKGcpICYgMHgzZikgPDwgNSkKKyNkZWZpbmUgTENIQ0NfQ1VSX0NPTF9CKGIpICgoYikgJiAweDFmKQorCisjZGVmaW5lIExDRENfUENSCV9fUkVHKElNWF9MQ0RDX0JBU0UrMHgxOCkKKyNkZWZpbmUgUENSX1RGVCAgICAgICAgICgxPDwzMSkKKyNkZWZpbmUgUENSX0NPTE9SICAgICAgICgxPDwzMCkKKyNkZWZpbmUgUENSX1BCU0laXzEgICAgICgwPDwyOCkKKyNkZWZpbmUgUENSX1BCU0laXzIgICAgICgxPDwyOCkKKyNkZWZpbmUgUENSX1BCU0laXzQgICAgICgyPDwyOCkKKyNkZWZpbmUgUENSX1BCU0laXzggICAgICgzPDwyOCkKKyNkZWZpbmUgUENSX0JQSVhfMSAgICAgICgwPDwyNSkKKyNkZWZpbmUgUENSX0JQSVhfMiAgICAgICgxPDwyNSkKKyNkZWZpbmUgUENSX0JQSVhfNCAgICAgICgyPDwyNSkKKyNkZWZpbmUgUENSX0JQSVhfOCAgICAgICgzPDwyNSkKKyNkZWZpbmUgUENSX0JQSVhfMTIgICAgICg0PDwyNSkKKyNkZWZpbmUgUENSX0JQSVhfMTYgICAgICg0PDwyNSkKKyNkZWZpbmUgUENSX1BJWFBPTCAgICAgICgxPDwyNCkKKyNkZWZpbmUgUENSX0ZMTVBPTCAgICAgICgxPDwyMykKKyNkZWZpbmUgUENSX0xQUE9MICAgICAgICgxPDwyMikKKyNkZWZpbmUgUENSX0NMS1BPTCAgICAgICgxPDwyMSkKKyNkZWZpbmUgUENSX09FUE9MICAgICAgICgxPDwyMCkKKyNkZWZpbmUgUENSX1NDTEtJRExFICAgICgxPDwxOSkKKyNkZWZpbmUgUENSX0VORF9TRUwgICAgICgxPDwxOCkKKyNkZWZpbmUgUENSX0VORF9CWVRFX1NXQVAgKDE8PDE3KQorI2RlZmluZSBQQ1JfUkVWX1ZTICAgICAgKDE8PDE2KQorI2RlZmluZSBQQ1JfQUNEX1NFTCAgICAgKDE8PDE1KQorI2RlZmluZSBQQ1JfQUNEKHgpICAgICAgKCgoeCkgJiAweDdmKSA8PCA4KQorI2RlZmluZSBQQ1JfU0NMS19TRUwgICAgKDE8PDcpCisjZGVmaW5lIFBDUl9TSEFSUCAgICAgICAoMTw8NikKKyNkZWZpbmUgUENSX1BDRCh4KSAgICAgICgoeCkgJiAweDNmKQorCisjZGVmaW5lIExDRENfSENSCV9fUkVHKElNWF9MQ0RDX0JBU0UrMHgxQykKKyNkZWZpbmUgSENSX0hfV0lEVEgoeCkgICgoKHgpICYgMHgzZikgPDwgMjYpCisjZGVmaW5lIEhDUl9IX1dBSVRfMSh4KSAoKCh4KSAmIDB4ZmYpIDw8IDgpCisjZGVmaW5lIEhDUl9IX1dBSVRfMih4KSAoKHgpICYgMHhmZikKKworI2RlZmluZSBMQ0RDX1ZDUglfX1JFRyhJTVhfTENEQ19CQVNFKzB4MjApCisjZGVmaW5lIFZDUl9WX1dJRFRIKHgpICAoKCh4KSAmIDB4M2YpIDw8IDI2KQorI2RlZmluZSBWQ1JfVl9XQUlUXzEoeCkgKCgoeCkgJiAweGZmKSA8PCA4KQorI2RlZmluZSBWQ1JfVl9XQUlUXzIoeCkgKCh4KSAmIDB4ZmYpCisKKyNkZWZpbmUgTENEQ19QT1MJX19SRUcoSU1YX0xDRENfQkFTRSsweDI0KQorI2RlZmluZSBQT1NfUE9TKHgpICAgICAgKCh4KSAmIDFmKQorCisjZGVmaW5lIExDRENfTFNDUjEJX19SRUcoSU1YX0xDRENfQkFTRSsweDI4KQorI2RlZmluZSBMU0NSMV9QU19SSVNFX0RFTEFZKHgpICAgICgoKHgpICYgMHg3ZikgPDwgMjYpCisjZGVmaW5lIExTQ1IxX0NMU19SSVNFX0RFTEFZKHgpICAgKCgoeCkgJiAweDNmKSA8PCAxNikKKyNkZWZpbmUgTFNDUjFfUkVWX1RPR0dMRV9ERUxBWSh4KSAoKCh4KSAmIDB4ZikgPDwgOCkKKyNkZWZpbmUgTFNDUjFfR1JBWTIoeCkgICAgICAgICAgICAoKCh4KSAmIDB4ZikgPDwgNCkKKyNkZWZpbmUgTFNDUjFfR1JBWTEoeCkgICAgICAgICAgICAoKCh4KSAmIDB4ZikpCisKKyNkZWZpbmUgTENEQ19QV01SCV9fUkVHKElNWF9MQ0RDX0JBU0UrMHgyQykKKyNkZWZpbmUgUFdNUl9DTFMoeCkgICAgICgoKHgpICYgMHgxZmYpIDw8IDE2KQorI2RlZmluZSBQV01SX0xETVNLICAgICAgKDE8PDE1KQorI2RlZmluZSBQV01SX1NDUjEgICAgICAgKDE8PDEwKQorI2RlZmluZSBQV01SX1NDUjAgICAgICAgKDE8PDkpCisjZGVmaW5lIFBXTVJfQ0NfRU4gICAgICAoMTw8OCkKKyNkZWZpbmUgUFdNUl9QVyh4KSAgICAgICgoeCkgJiAweGZmKQorCisjZGVmaW5lIExDRENfRE1BQ1IJX19SRUcoSU1YX0xDRENfQkFTRSsweDMwKQorI2RlZmluZSBETUFDUl9CVVJTVCAgICAgKDE8PDMxKQorI2RlZmluZSBETUFDUl9ITSh4KSAgICAgKCgoeCkgJiAweGYpIDw8IDE2KQorI2RlZmluZSBETUFDUl9UTSh4KSAgICAgKCh4KSAmMHhmKQorCisjZGVmaW5lIExDRENfUk1DUglfX1JFRyhJTVhfTENEQ19CQVNFKzB4MzQpCisjZGVmaW5lIFJNQ1JfTENEQ19FTgkJKDE8PDEpCisjZGVmaW5lIFJNQ1JfU0VMRl9SRUYJCSgxPDwwKQorCisjZGVmaW5lIExDRENfTENESUNSCV9fUkVHKElNWF9MQ0RDX0JBU0UrMHgzOCkKKyNkZWZpbmUgTENESUNSX0lOVF9TWU4gICgxPDwyKQorI2RlZmluZSBMQ0RJQ1JfSU5UX0NPTiAgKDEpCisKKyNkZWZpbmUgTENEQ19MQ0RJU1IJX19SRUcoSU1YX0xDRENfQkFTRSsweDQwKQorI2RlZmluZSBMQ0RJU1JfVURSX0VSUiAoMTw8MykKKyNkZWZpbmUgTENESVNSX0VSUl9SRVMgKDE8PDIpCisjZGVmaW5lIExDRElTUl9FT0YgICAgICgxPDwxKQorI2RlZmluZSBMQ0RJU1JfQk9GICAgICAoMTw8MCkKKworLyoKKyAqICBVQVJUIE1vZHVsZS4gVGFrZXMgdGhlIFVBUlQgYmFzZSBhZGRyZXNzIGFzIGFyZ3VtZW50CisgKi8KKyNkZWZpbmUgVVJYRDAoeCkgX19SRUcoIDB4MCArICh4KSkgLyogUmVjZWl2ZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVVJUWDAoeCkgX19SRUcoIDB4NDAgKyAoeCkpIC8qIFRyYW5zbWl0dGVyIFJlZ2lzdGVyICovCisjZGVmaW5lIFVDUjEoeCkgIF9fUkVHKCAweDgwICsgKHgpKSAvKiBDb250cm9sIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgVUNSMih4KSAgX19SRUcoIDB4ODQgKyAoeCkpIC8qIENvbnRyb2wgUmVnaXN0ZXIgMiAqLworI2RlZmluZSBVQ1IzKHgpICBfX1JFRyggMHg4OCArICh4KSkgLyogQ29udHJvbCBSZWdpc3RlciAzICovCisjZGVmaW5lIFVDUjQoeCkgIF9fUkVHKCAweDhjICsgKHgpKSAvKiBDb250cm9sIFJlZ2lzdGVyIDQgKi8KKyNkZWZpbmUgVUZDUih4KSAgX19SRUcoIDB4OTAgKyAoeCkpIC8qIEZJRk8gQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBVU1IxKHgpICBfX1JFRyggMHg5NCArICh4KSkgLyogU3RhdHVzIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgVVNSMih4KSAgX19SRUcoIDB4OTggKyAoeCkpIC8qIFN0YXR1cyBSZWdpc3RlciAyICovCisjZGVmaW5lIFVFU0MoeCkgIF9fUkVHKCAweDljICsgKHgpKSAvKiBFc2NhcGUgQ2hhcmFjdGVyIFJlZ2lzdGVyICovCisjZGVmaW5lIFVUSU0oeCkgIF9fUkVHKCAweGEwICsgKHgpKSAvKiBFc2NhcGUgVGltZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVUJJUih4KSAgX19SRUcoIDB4YTQgKyAoeCkpIC8qIEJSTSBJbmNyZW1lbnRhbCBSZWdpc3RlciAqLworI2RlZmluZSBVQk1SKHgpICBfX1JFRyggMHhhOCArICh4KSkgLyogQlJNIE1vZHVsYXRvciBSZWdpc3RlciAqLworI2RlZmluZSBVQlJDKHgpICBfX1JFRyggMHhhYyArICh4KSkgLyogQmF1ZCBSYXRlIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lIEJJUFIxKHgpIF9fUkVHKCAweGIwICsgKHgpKSAvKiBJbmNyZW1lbnRhbCBQcmVzZXQgUmVnaXN0ZXIgMSAqLworI2RlZmluZSBCSVBSMih4KSBfX1JFRyggMHhiNCArICh4KSkgLyogSW5jcmVtZW50YWwgUHJlc2V0IFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgQklQUjMoeCkgX19SRUcoIDB4YjggKyAoeCkpIC8qIEluY3JlbWVudGFsIFByZXNldCBSZWdpc3RlciAzICovCisjZGVmaW5lIEJJUFI0KHgpIF9fUkVHKCAweGJjICsgKHgpKSAvKiBJbmNyZW1lbnRhbCBQcmVzZXQgUmVnaXN0ZXIgNCAqLworI2RlZmluZSBCTVBSMSh4KSBfX1JFRyggMHhjMCArICh4KSkgLyogQlJNIE1vZHVsYXRvciBSZWdpc3RlciAxICovCisjZGVmaW5lIEJNUFIyKHgpIF9fUkVHKCAweGM0ICsgKHgpKSAvKiBCUk0gTW9kdWxhdG9yIFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgQk1QUjMoeCkgX19SRUcoIDB4YzggKyAoeCkpIC8qIEJSTSBNb2R1bGF0b3IgUmVnaXN0ZXIgMyAqLworI2RlZmluZSBCTVBSNCh4KSBfX1JFRyggMHhjYyArICh4KSkgLyogQlJNIE1vZHVsYXRvciBSZWdpc3RlciA0ICovCisjZGVmaW5lIFVUUyh4KSAgIF9fUkVHKCAweGQwICsgKHgpKSAvKiBVQVJUIFRlc3QgUmVnaXN0ZXIgKi8KKworLyogVUFSVCBDb250cm9sIFJlZ2lzdGVyIEJpdCBGaWVsZHMuKi8KKyNkZWZpbmUgIFVSWERfQ0hBUlJEWSAgICAoMTw8MTUpCisjZGVmaW5lICBVUlhEX0VSUiAgICAgICAgKDE8PDE0KQorI2RlZmluZSAgVVJYRF9PVlJSVU4gICAgICgxPDwxMykKKyNkZWZpbmUgIFVSWERfRlJNRVJSICAgICAoMTw8MTIpCisjZGVmaW5lICBVUlhEX0JSSyAgICAgICAgKDE8PDExKQorI2RlZmluZSAgVVJYRF9QUkVSUiAgICAgICgxPDwxMCkKKyNkZWZpbmUgIFVDUjFfQURFTiAgICAgICAoMTw8MTUpIC8qIEF1dG8gZGVjdGVjdCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgIFVDUjFfQURCUiAgICAgICAoMTw8MTQpIC8qIEF1dG8gZGV0ZWN0IGJhdWQgcmF0ZSAqLworI2RlZmluZSAgVUNSMV9UUkRZRU4gICAgICgxPDwxMykgLyogVHJhbnNtaXR0ZXIgcmVhZHkgaW50ZXJydXB0IGVuYWJsZSAqLworI2RlZmluZSAgVUNSMV9JREVOICAgICAgICgxPDwxMikgLyogSWRsZSBjb25kaXRpb24gaW50ZXJydXB0ICovCisjZGVmaW5lICBVQ1IxX1JSRFlFTiAgICAgKDE8PDkpCSAvKiBSZWN2IHJlYWR5IGludGVycnVwdCBlbmFibGUgKi8KKyNkZWZpbmUgIFVDUjFfUkRNQUVOICAgICAoMTw8OCkJIC8qIFJlY3YgcmVhZHkgRE1BIGVuYWJsZSAqLworI2RlZmluZSAgVUNSMV9JUkVOICAgICAgICgxPDw3KQkgLyogSW5mcmFyZWQgaW50ZXJmYWNlIGVuYWJsZSAqLworI2RlZmluZSAgVUNSMV9UWE1QVFlFTiAgICgxPDw2KQkgLyogVHJhbnNpbWl0dGVyIGVtcHR5IGludGVycnVwdCBlbmFibGUgKi8KKyNkZWZpbmUgIFVDUjFfUlRTREVOICAgICAoMTw8NSkJIC8qIFJUUyBkZWx0YSBpbnRlcnJ1cHQgZW5hYmxlICovCisjZGVmaW5lICBVQ1IxX1NOREJSSyAgICAgKDE8PDQpCSAvKiBTZW5kIGJyZWFrICovCisjZGVmaW5lICBVQ1IxX1RETUFFTiAgICAgKDE8PDMpCSAvKiBUcmFuc21pdHRlciByZWFkeSBETUEgZW5hYmxlICovCisjZGVmaW5lICBVQ1IxX1VBUlRDTEtFTiAgKDE8PDIpCSAvKiBVQVJUIGNsb2NrIGVuYWJsZWQgKi8KKyNkZWZpbmUgIFVDUjFfRE9aRSAgICAgICAoMTw8MSkJIC8qIERvemUgKi8KKyNkZWZpbmUgIFVDUjFfVUFSVEVOICAgICAoMTw8MCkJIC8qIFVBUlQgZW5hYmxlZCAqLworI2RlZmluZSAgVUNSMl9FU0NJICAgICAJICgxPDwxNSkgLyogRXNjYXBlIHNlcSBpbnRlcnJ1cHQgZW5hYmxlICovCisjZGVmaW5lICBVQ1IyX0lSVFMgIAkgKDE8PDE0KSAvKiBJZ25vcmUgUlRTIHBpbiAqLworI2RlZmluZSAgVUNSMl9DVFNDICAJICgxPDwxMykgLyogQ1RTIHBpbiBjb250cm9sICovCisjZGVmaW5lICBVQ1IyX0NUUyAgICAgICAgKDE8PDEyKSAvKiBDbGVhciB0byBzZW5kICovCisjZGVmaW5lICBVQ1IyX0VTQ0VOICAgICAgKDE8PDExKSAvKiBFc2NhcGUgZW5hYmxlICovCisjZGVmaW5lICBVQ1IyX1BSRU4gICAgICAgKDE8PDgpICAvKiBQYXJpdHkgZW5hYmxlICovCisjZGVmaW5lICBVQ1IyX1BST0UgICAgICAgKDE8PDcpICAvKiBQYXJpdHkgb2RkL2V2ZW4gKi8KKyNkZWZpbmUgIFVDUjJfU1RQQiAgICAgICAoMTw8NikJIC8qIFN0b3AgKi8KKyNkZWZpbmUgIFVDUjJfV1MgICAgICAgICAoMTw8NSkJIC8qIFdvcmQgc2l6ZSAqLworI2RlZmluZSAgVUNSMl9SVFNFTiAgICAgICgxPDw0KQkgLyogUmVxdWVzdCB0byBzZW5kIGludGVycnVwdCBlbmFibGUgKi8KKyNkZWZpbmUgIFVDUjJfVFhFTiAgICAgICAoMTw8MikJIC8qIFRyYW5zbWl0dGVyIGVuYWJsZWQgKi8KKyNkZWZpbmUgIFVDUjJfUlhFTiAgICAgICAoMTw8MSkJIC8qIFJlY2VpdmVyIGVuYWJsZWQgKi8KKyNkZWZpbmUgIFVDUjJfU1JTVCAJICgxPDwwKQkgLyogU1cgcmVzZXQgKi8KKyNkZWZpbmUgIFVDUjNfRFRSRU4gCSAoMTw8MTMpIC8qIERUUiBpbnRlcnJ1cHQgZW5hYmxlICovCisjZGVmaW5lICBVQ1IzX1BBUkVSUkVOICAgKDE8PDEyKSAvKiBQYXJpdHkgZW5hYmxlICovCisjZGVmaW5lICBVQ1IzX0ZSQUVSUkVOICAgKDE8PDExKSAvKiBGcmFtZSBlcnJvciBpbnRlcnJ1cHQgZW5hYmxlICovCisjZGVmaW5lICBVQ1IzX0RTUiAgICAgICAgKDE8PDEwKSAvKiBEYXRhIHNldCByZWFkeSAqLworI2RlZmluZSAgVUNSM19EQ0QgICAgICAgICgxPDw5KSAgLyogRGF0YSBjYXJyaWVyIGRldGVjdCAqLworI2RlZmluZSAgVUNSM19SSSAgICAgICAgICgxPDw4KSAgLyogUmluZyBpbmRpY2F0b3IgKi8KKyNkZWZpbmUgIFVDUjNfVElNRU9VVEVOICAoMTw8NykgIC8qIFRpbWVvdXQgaW50ZXJydXB0IGVuYWJsZSAqLworI2RlZmluZSAgVUNSM19SWERTRU4JICgxPDw2KSAgLyogUmVjZWl2ZSBzdGF0dXMgaW50ZXJydXB0IGVuYWJsZSAqLworI2RlZmluZSAgVUNSM19BSVJJTlRFTiAgICgxPDw1KSAgLyogQXN5bmMgSVIgd2FrZSBpbnRlcnJ1cHQgZW5hYmxlICovCisjZGVmaW5lICBVQ1IzX0FXQUtFTgkgKDE8PDQpICAvKiBBc3luYyB3YWtlIGludGVycnVwdCBlbmFibGUgKi8KKyNkZWZpbmUgIFVDUjNfUkVGMjUgCSAoMTw8MykgIC8qIFJlZiBmcmVxIDI1IE1IeiAqLworI2RlZmluZSAgVUNSM19SRUYzMCAJICgxPDwyKSAgLyogUmVmIEZyZXEgMzAgTUh6ICovCisjZGVmaW5lICBVQ1IzX0lOVlQgIAkgKDE8PDEpICAvKiBJbnZlcnRlZCBJbmZyYXJlZCB0cmFuc21pc3Npb24gKi8KKyNkZWZpbmUgIFVDUjNfQlBFTiAgCSAoMTw8MCkgIC8qIFByZXNldCByZWdpc3RlcnMgZW5hYmxlICovCisjZGVmaW5lICBVQ1I0X0NUU1RMXzMyICAgKDMyPDwxMCkgLyogQ1RTIHRyaWdnZXIgbGV2ZWwgKDMyIGNoYXJzKSAqLworI2RlZmluZSAgVUNSNF9JTlZSICAJICgxPDw5KSAgLyogSW52ZXJ0ZWQgaW5mcmFyZWQgcmVjZXB0aW9uICovCisjZGVmaW5lICBVQ1I0X0VOSVJJIAkgKDE8PDgpICAvKiBTZXJpYWwgaW5mcmFyZWQgaW50ZXJydXB0IGVuYWJsZSAqLworI2RlZmluZSAgVUNSNF9XS0VOICAJICgxPDw3KSAgLyogV2FrZSBpbnRlcnJ1cHQgZW5hYmxlICovCisjZGVmaW5lICBVQ1I0X1JFRjE2IAkgKDE8PDYpICAvKiBSZWYgZnJlcSAxNiBNSHogKi8KKyNkZWZpbmUgIFVDUjRfSVJTQyAgCSAoMTw8NSkgIC8qIElSIHNwZWNpYWwgY2FzZSAqLworI2RlZmluZSAgVUNSNF9UQ0VOICAJICgxPDwzKSAgLyogVHJhbnNtaXQgY29tcGxldGUgaW50ZXJydXB0IGVuYWJsZSAqLworI2RlZmluZSAgVUNSNF9CS0VOICAJICgxPDwyKSAgLyogQnJlYWsgY29uZGl0aW9uIGludGVycnVwdCBlbmFibGUgKi8KKyNkZWZpbmUgIFVDUjRfT1JFTiAgCSAoMTw8MSkgIC8qIFJlY2VpdmVyIG92ZXJydW4gaW50ZXJydXB0IGVuYWJsZSAqLworI2RlZmluZSAgVUNSNF9EUkVOICAJICgxPDwwKSAgLyogUmVjdiBkYXRhIHJlYWR5IGludGVycnVwdCBlbmFibGUgKi8KKyNkZWZpbmUgIFVGQ1JfUlhUTF9TSEYgICAwICAgICAgIC8qIFJlY2VpdmVyIHRyaWdnZXIgbGV2ZWwgc2hpZnQgKi8KKyNkZWZpbmUgIFVGQ1JfUkZESVYgICAgICAoNzw8NykgIC8qIFJlZmVyZW5jZSBmcmVxIGRpdmlkZXIgbWFzayAqLworI2RlZmluZSAgVUZDUl9UWFRMX1NIRiAgIDEwICAgICAgLyogVHJhbnNtaXR0ZXIgdHJpZ2dlciBsZXZlbCBzaGlmdCAqLworI2RlZmluZSAgVVNSMV9QQVJJVFlFUlIgICgxPDwxNSkgLyogUGFyaXR5IGVycm9yIGludGVycnVwdCBmbGFnICovCisjZGVmaW5lICBVU1IxX1JUU1MgIAkgKDE8PDE0KSAvKiBSVFMgcGluIHN0YXR1cyAqLworI2RlZmluZSAgVVNSMV9UUkRZICAJICgxPDwxMykgLyogVHJhbnNtaXR0ZXIgcmVhZHkgaW50ZXJydXB0L2RtYSBmbGFnICovCisjZGVmaW5lICBVU1IxX1JUU0QgIAkgKDE8PDEyKSAvKiBSVFMgZGVsdGEgKi8KKyNkZWZpbmUgIFVTUjFfRVNDRiAgCSAoMTw8MTEpIC8qIEVzY2FwZSBzZXEgaW50ZXJydXB0IGZsYWcgKi8KKyNkZWZpbmUgIFVTUjFfRlJBTUVSUiAgICAoMTw8MTApIC8qIEZyYW1lIGVycm9yIGludGVycnVwdCBmbGFnICovCisjZGVmaW5lICBVU1IxX1JSRFkgICAgICAgKDE8PDkpCSAvKiBSZWNlaXZlciByZWFkeSBpbnRlcnJ1cHQvZG1hIGZsYWcgKi8KKyNkZWZpbmUgIFVTUjFfVElNRU9VVCAgICAoMTw8NykJIC8qIFJlY2VpdmUgdGltZW91dCBpbnRlcnJ1cHQgc3RhdHVzICovCisjZGVmaW5lICBVU1IxX1JYRFMgIAkgKDE8PDYpCSAvKiBSZWNlaXZlciBpZGxlIGludGVycnVwdCBmbGFnICovCisjZGVmaW5lICBVU1IxX0FJUklOVAkgKDE8PDUpCSAvKiBBc3luYyBJUiB3YWtlIGludGVycnVwdCBmbGFnICovCisjZGVmaW5lICBVU1IxX0FXQUtFIAkgKDE8PDQpCSAvKiBBeXNuYyB3YWtlIGludGVycnVwdCBmbGFnICovCisjZGVmaW5lICBVU1IyX0FERVQgIAkgKDE8PDE1KSAvKiBBdXRvIGJhdWQgcmF0ZSBkZXRlY3QgY29tcGxldGUgKi8KKyNkZWZpbmUgIFVTUjJfVFhGRSAgCSAoMTw8MTQpIC8qIFRyYW5zbWl0IGJ1ZmZlciBGSUZPIGVtcHR5ICovCisjZGVmaW5lICBVU1IyX0RUUkYgIAkgKDE8PDEzKSAvKiBEVFIgZWRnZSBpbnRlcnJ1cHQgZmxhZyAqLworI2RlZmluZSAgVVNSMl9JRExFICAJICgxPDwxMikgLyogSWRsZSBjb25kaXRpb24gKi8KKyNkZWZpbmUgIFVTUjJfSVJJTlQgCSAoMTw8OCkJIC8qIFNlcmlhbCBpbmZyYXJlZCBpbnRlcnJ1cHQgZmxhZyAqLworI2RlZmluZSAgVVNSMl9XQUtFICAJICgxPDw3KQkgLyogV2FrZSAqLworI2RlZmluZSAgVVNSMl9SVFNGICAJICgxPDw0KQkgLyogUlRTIGVkZ2UgaW50ZXJydXB0IGZsYWcgKi8KKyNkZWZpbmUgIFVTUjJfVFhEQyAgCSAoMTw8MykJIC8qIFRyYW5zbWl0dGVyIGNvbXBsZXRlICovCisjZGVmaW5lICBVU1IyX0JSQ0QgIAkgKDE8PDIpCSAvKiBCcmVhayBjb25kaXRpb24gKi8KKyNkZWZpbmUgIFVTUjJfT1JFICAgICAgICAoMTw8MSkJIC8qIE92ZXJydW4gZXJyb3IgKi8KKyNkZWZpbmUgIFVTUjJfUkRSICAgICAgICAoMTw8MCkJIC8qIFJlY3YgZGF0YSByZWFkeSAqLworI2RlZmluZSAgVVRTX0ZSQ1BFUlIJICgxPDwxMykgLyogRm9yY2UgcGFyaXR5IGVycm9yICovCisjZGVmaW5lICBVVFNfTE9PUCAgICAgICAgKDE8PDEyKSAvKiBMb29wIHR4IGFuZCByeCAqLworI2RlZmluZSAgVVRTX1RYRU1QVFkJICgxPDw2KQkgLyogVHhGSUZPIGVtcHR5ICovCisjZGVmaW5lICBVVFNfUlhFTVBUWQkgKDE8PDUpCSAvKiBSeEZJRk8gZW1wdHkgKi8KKyNkZWZpbmUgIFVUU19UWEZVTEwgCSAoMTw8NCkJIC8qIFR4RklGTyBmdWxsICovCisjZGVmaW5lICBVVFNfUlhGVUxMIAkgKDE8PDMpCSAvKiBSeEZJRk8gZnVsbCAqLworI2RlZmluZSAgVVRTX1NPRlRSU1QJICgxPDwwKQkgLyogU29mdHdhcmUgcmVzZXQgKi8KKworI2VuZGlmCQkJCS8vIF9JTVhfUkVHU19ICmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbXgvaW8uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlteC9pby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4YTRjY2EKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbXgvaW8uaApAQCAtMCwwICsxLDI4IEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWlteGFkcy9pby5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5OSBBUk0gTGltaXRlZAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworI2lmbmRlZiBfX0FTTV9BUk1fQVJDSF9JT19ICisjZGVmaW5lIF9fQVNNX0FSTV9BUkNIX0lPX0gKKworI2RlZmluZSBJT19TUEFDRV9MSU1JVCAweGZmZmZmZmZmCisKKyNkZWZpbmUgX19pbyhhKQkJKCh2b2lkIF9faW9tZW0gKikoYSkpCisjZGVmaW5lIF9fbWVtX3BjaShhKQkoYSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbXgvaXJxLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbXgvaXJxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ1ZTA2NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlteC9pcnEuaApAQCAtMCwwICsxLDIwIEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWlteGFkcy9pcnEuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTkgQVJNIExpbWl0ZWQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKyNkZWZpbmUgZml4dXBfaXJxKGkpCShpKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW14L2lycXMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlteC9pcnFzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM4MTk3YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlteC9pcnFzLmgKQEAgLTAsMCArMSwxMTYgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW14YWRzL2lycXMuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTkgQVJNIExpbWl0ZWQKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDAgRGVlcCBCbHVlIFNvbHV0aW9ucyBMdGQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpZm5kZWYgX19BUk1fSVJRU19IX18KKyNkZWZpbmUgX19BUk1fSVJRU19IX18KKworLyogVXNlIHRoZSBpbXggZGVmaW5pdGlvbnMgKi8KKyNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgorCisvKgorICogIElNWCBJbnRlcnJ1cHQgbnVtYmVycworICoKKyAqLworI2RlZmluZSBJTlRfU09GVElOVCAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBDU0lfSU5UICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBEU1BBX01BQ19JTlQgICAgICAgICAgICAgICAgNworI2RlZmluZSBEU1BBX0lOVCAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDT01QX0lOVCAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBNU0hDX1hJTlQgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgR1BJT19JTlRfUE9SVEEgICAgICAgICAgICAgIDExCisjZGVmaW5lIEdQSU9fSU5UX1BPUlRCICAgICAgICAgICAgICAxMgorI2RlZmluZSBHUElPX0lOVF9QT1JUQyAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgTENEQ19JTlQgICAgICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lIFNJTV9JTlQgICAgICAgICAgICAgICAgICAgICAxNQorI2RlZmluZSBTSU1fREFUQV9JTlQgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgUlRDX0lOVCAgICAgICAgICAgICAgICAgICAgIDE3CisjZGVmaW5lIFJUQ19TQU1JTlQgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBVQVJUMl9NSU5UX1BGRVJSICAgICAgICAgICAgMTkKKyNkZWZpbmUgVUFSVDJfTUlOVF9SVFMgICAgICAgICAgICAgIDIwCisjZGVmaW5lIFVBUlQyX01JTlRfRFRSICAgICAgICAgICAgICAyMQorI2RlZmluZSBVQVJUMl9NSU5UX1VBUlRDICAgICAgICAgICAgMjIKKyNkZWZpbmUgVUFSVDJfTUlOVF9UWCAgICAgICAgICAgICAgIDIzCisjZGVmaW5lIFVBUlQyX01JTlRfUlggICAgICAgICAgICAgICAyNAorI2RlZmluZSBVQVJUMV9NSU5UX1BGRVJSICAgICAgICAgICAgMjUKKyNkZWZpbmUgVUFSVDFfTUlOVF9SVFMgICAgICAgICAgICAgIDI2CisjZGVmaW5lIFVBUlQxX01JTlRfRFRSICAgICAgICAgICAgICAyNworI2RlZmluZSBVQVJUMV9NSU5UX1VBUlRDICAgICAgICAgICAgMjgKKyNkZWZpbmUgVUFSVDFfTUlOVF9UWCAgICAgICAgICAgICAgIDI5CisjZGVmaW5lIFVBUlQxX01JTlRfUlggICAgICAgICAgICAgICAzMAorI2RlZmluZSBWT0lDRV9EQUNfSU5UICAgICAgICAgICAgICAgMzEKKyNkZWZpbmUgVk9JQ0VfQURDX0lOVCAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIFBFTl9EQVRBX0lOVCAgICAgICAgICAgICAgICAzMworI2RlZmluZSBQV01fSU5UICAgICAgICAgICAgICAgICAgICAgMzQKKyNkZWZpbmUgU0RIQ19JTlQgICAgICAgICAgICAgICAgICAgIDM1CisjZGVmaW5lIEkyQ19JTlQgICAgICAgICAgICAgICAgICAgICAzOQorI2RlZmluZSBDU1BJX0lOVCAgICAgICAgICAgICAgICAgICAgNDEKKyNkZWZpbmUgU1NJX1RYX0lOVCAgICAgICAgICAgICAgICAgIDQyCisjZGVmaW5lIFNTSV9UWF9FUlJfSU5UICAgICAgICAgICAgICA0MworI2RlZmluZSBTU0lfUlhfSU5UICAgICAgICAgICAgICAgICAgNDQKKyNkZWZpbmUgU1NJX1JYX0VSUl9JTlQgICAgICAgICAgICAgIDQ1CisjZGVmaW5lIFRPVUNIX0lOVCAgICAgICAgICAgICAgICAgICA0NgorI2RlZmluZSBVU0JEX0lOVDAgICAgICAgICAgICAgICAgICAgNDcKKyNkZWZpbmUgVVNCRF9JTlQxICAgICAgICAgICAgICAgICAgIDQ4CisjZGVmaW5lIFVTQkRfSU5UMiAgICAgICAgICAgICAgICAgICA0OQorI2RlZmluZSBVU0JEX0lOVDMgICAgICAgICAgICAgICAgICAgNTAKKyNkZWZpbmUgVVNCRF9JTlQ0ICAgICAgICAgICAgICAgICAgIDUxCisjZGVmaW5lIFVTQkRfSU5UNSAgICAgICAgICAgICAgICAgICA1MgorI2RlZmluZSBVU0JEX0lOVDYgICAgICAgICAgICAgICAgICAgNTMKKyNkZWZpbmUgQlRTWVNfSU5UICAgICAgICAgICAgICAgICAgIDU1CisjZGVmaW5lIEJUVElNX0lOVCAgICAgICAgICAgICAgICAgICA1NgorI2RlZmluZSBCVFdVSV9JTlQgICAgICAgICAgICAgICAgICAgNTcKKyNkZWZpbmUgVElNMl9JTlQgICAgICAgICAgICAgICAgICAgIDU4CisjZGVmaW5lIFRJTTFfSU5UICAgICAgICAgICAgICAgICAgICA1OQorI2RlZmluZSBETUFfRVJSICAgICAgICAgICAgICAgICAgICAgNjAKKyNkZWZpbmUgRE1BX0lOVCAgICAgICAgICAgICAgICAgICAgIDYxCisjZGVmaW5lIEdQSU9fSU5UX1BPUlREICAgICAgICAgICAgICA2MgorCisjZGVmaW5lIElNWF9JUlFTICAgICAgICAgICAgICAgICAgICAgICAgICg2NCkKKworLyogbm90ZTogdGhlIElNWCBoYXMgZm91ciBncGlvIHBvcnRzIChBLUQpLCBidXQgb25seQorICogICAgICAgdGhlIGZvbGxvd2luZyBwaW5zIGFyZSBjb25uZWN0ZWQgdG8gdGhlIG91dHNpZGUKKyAqICAgICAgIHdvcmxkOgorICoKKyAqIFBPUlQgQTogYml0cyAwLTMxCisgKiBQT1JUIEI6IGJpdHMgOC0zMQorICogUE9SVCBDOiBiaXRzIDMtMTcKKyAqIFBPUlQgRDogYml0cyA2LTMxCisgKgorICogV2UgbWFwIHRoZXNlIGludGVycnVwdHMgc3RyYWlnaHQgb24uIEFzIGEgcmVzdWx0IHdlIGhhdmUKKyAqIHNldmVyYWwgaG9sZXMgaW4gdGhlIGludGVycnVwdCBtYXBwaW5nLiBXZSBkbyB0aGlzIGZvciB0d28KKyAqIHJlYXNvbnM6CisgKiAgIC0gbWFwcGluZyB0aGUgaW50ZXJydXB0cyB3aXRob3V0IGhvbGVzIHdvdWxkIGdldAorICogICAgIGZhciBtb3JlIGNvbXBsaWNhdGVkCisgKiAgIC0gTW90b3JvbGEgY291bGQgd2VsbCBkZWNpZGUgdG8gYnJpbmcgc29tZSBwcm9jZXNzb3IKKyAqICAgICB3aXRoIG1vcmUgcGlucyBjb25uZWN0ZWQKKyAqLworCisjZGVmaW5lIElSUV9HUElPQSh4KSAgKElNWF9JUlFTICsgeCkKKyNkZWZpbmUgSVJRX0dQSU9CKHgpICAoSVJRX0dQSU9BKDMyKSArIHgpCisjZGVmaW5lIElSUV9HUElPQyh4KSAgKElSUV9HUElPQigzMikgKyB4KQorI2RlZmluZSBJUlFfR1BJT0QoeCkgIChJUlFfR1BJT0MoMzIpICsgeCkKKworLyogZGVjb2RlIGlycSBudW1iZXIgdG8gdXNlIHdpdGggSU1SKHgpLCBJU1IoeCkgYW5kIGZyaWVuZHMgKi8KKyNkZWZpbmUgSVJRX1RPX1JFRyhpcnEpICgoaXJxIC0gSU1YX0lSUVMpID4+IDUpCisKKyNkZWZpbmUgTlJfSVJRUyAoSVJRX0dQSU9EKDMyKSArIDEpCisjZGVmaW5lIElSUV9HUElPKHgpCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlteC9tZW1vcnkuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlteC9tZW1vcnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTZhOTFmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW14L21lbW9yeS5oCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW14L21lbW9yeS5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5OSBBUk0gTGltaXRlZAorICogIENvcHlyaWdodCAoQykgMjAwMiBTaGFuZSBOYXkgKHNoYW5lQG1pbmlybC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisjaWZuZGVmIF9fQVNNX0FSQ0hfTU1VX0gKKyNkZWZpbmUgX19BU01fQVJDSF9NTVVfSAorCisjZGVmaW5lIFBIWVNfT0ZGU0VUCSgweDA4MDAwMDAwVUwpCisKKy8qCisgKiBWaXJ0dWFsIHZpZXcgPC0+IERNQSB2aWV3IG1lbW9yeSBhZGRyZXNzIHRyYW5zbGF0aW9ucworICogdmlydF90b19idXM6IFVzZWQgdG8gdHJhbnNsYXRlIHRoZSB2aXJ0dWFsIGFkZHJlc3MgdG8gYW4KKyAqICAgICAgICAgICAgICBhZGRyZXNzIHN1aXRhYmxlIHRvIGJlIHBhc3NlZCB0byBzZXRfZG1hX2FkZHIKKyAqIGJ1c190b192aXJ0OiBVc2VkIHRvIGNvbnZlcnQgYW4gYWRkcmVzcyBmb3IgRE1BIG9wZXJhdGlvbnMKKyAqICAgICAgICAgICAgICB0byBhbiBhZGRyZXNzIHRoYXQgdGhlIGtlcm5lbCBjYW4gdXNlLgorICovCisjZGVmaW5lIF9fdmlydF90b19idXNfX2lzX2FfbWFjcm8KKyNkZWZpbmUgX192aXJ0X3RvX2J1cyh4KQkoeCAtIFBBR0VfT0ZGU0VUICsgIFBIWVNfT0ZGU0VUKQorI2RlZmluZSBfX2J1c190b192aXJ0X19pc19hX21hY3JvCisjZGVmaW5lIF9fYnVzX3RvX3ZpcnQoeCkJKHggLSAgUEhZU19PRkZTRVQgKyBQQUdFX09GRlNFVCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbXgvbXgxYWRzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbXgvbXgxYWRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkwZmE0YgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlteC9teDFhZHMuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW14L214MWFkcy5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IFJvYmVydCBTY2h3ZWJlbCwgUGVuZ3V0cm9uaXgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9NWDFBRFNfSAorI2RlZmluZSBfX0FTTV9BUkNIX01YMUFEU19ICisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogTWVtb3J5IE1hcCBmb3IgdGhlIE05MzI4TVgxQURTIChNWDFBRFMpIEJvYXJkICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBNWDFBRFNfRkxBU0hfUEhZUwkJMHgxMDAwMDAwMAorI2RlZmluZSBNWDFBRFNfRkxBU0hfU0laRQkJKDE2KjEwMjQqMTAyNCkKKworI2RlZmluZSBJTVhfRkJfUEhZUwkJCSgweDBDMDAwMDAwIC0gMHg0MDAwMCkKKworI2RlZmluZSBDTEszMiAzMjAwMAorCisjZW5kaWYgLyogX19BU01fQVJDSF9NWDFBRFNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW14L3BhcmFtLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbXgvcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzcyNGYwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW14L3BhcmFtLmgKQEAgLTAsMCArMSwxOSBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbXgvcGFyYW0uaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTkgQVJNIExpbWl0ZWQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlteC9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlteC9zeXN0ZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjQ1ZmU5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW14L3N5c3RlbS5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW14YWRzL3N5c3RlbS5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5OSBBUk0gTGltaXRlZAorICogIENvcHlyaWdodCAoQykgMjAwMCBEZWVwIEJsdWUgU29sdXRpb25zIEx0ZAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworI2lmbmRlZiBfX0FTTV9BUkNIX1NZU1RFTV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfU1lTVEVNX0gKKworc3RhdGljIHZvaWQKK2FyY2hfaWRsZSh2b2lkKQoreworCS8qCisJICogVGhpcyBzaG91bGQgZG8gYWxsIHRoZSBjbG9jayBzd2l0Y2hpbmcKKwkgKiBhbmQgd2FpdCBmb3IgaW50ZXJydXB0IHRyaWNrcworCSAqLworCWNwdV9kb19pZGxlKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorYXJjaF9yZXNldChjaGFyIG1vZGUpCit7CisJY3B1X3Jlc2V0KDApOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlteC90aW1leC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW14L3RpbWV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY1YWIzYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlteC90aW1leC5oCkBAIC0wLDAgKzEsMjcgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2lteC90aW1leC5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5OSBBUk0gTGltaXRlZAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfVElNRVhfSAorI2RlZmluZSBfX0FTTV9BUkNIX1RJTUVYX0gKKworI2luY2x1ZGUgPGFzbS9hcmNoL2hhcmR3YXJlLmg+CisjZGVmaW5lIENMT0NLX1RJQ0tfUkFURQkJKENMSzMyKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlteC91bmNvbXByZXNzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbXgvdW5jb21wcmVzcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5NjA3N2YKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbXgvdW5jb21wcmVzcy5oCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW14YWRzL3VuY29tcHJlc3MuaAorICoKKyAqCisgKgorICogIENvcHlyaWdodCAoQykgMTk5OSBBUk0gTGltaXRlZAorICogIENvcHlyaWdodCAoQykgU2hhbmUgTmF5IChzaGFuZUBtaW5pcmwuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjZGVmaW5lIFVBUlQoeCkgKCoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShzZXJpYWxfcG9ydCArICh4KSkpCisKKyNkZWZpbmUgVUFSVDFfQkFTRSAweDIwNjAwMAorI2RlZmluZSBVQVJUMl9CQVNFIDB4MjA3MDAwCisjZGVmaW5lIFVTUjIgMHg5OAorI2RlZmluZSBVU1IyX1RYRkUgKDE8PDE0KQorI2RlZmluZSBUWFIgIDB4NDAKKyNkZWZpbmUgVUNSMSAweDgwCisjZGVmaW5lIFVDUjFfVUFSVEVOIDEKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgY29kZSBhc3N1bWVzIHRoZSBzZXJpYWwgcG9ydCBoYXMgYWxyZWFkeSBiZWVuCisgKiBpbml0aWFsaXplZCBieSB0aGUgYm9vdGxvYWRlci4gIFdlIHNlYXJjaCBmb3IgdGhlIGZpcnN0IGVuYWJsZWQKKyAqIHBvcnQgaW4gdGhlIG1vc3QgcHJvYmFibGUgb3JkZXIuICBJZiB5b3UgZGlkbid0IHNldHVwIGEgcG9ydCBpbgorICogeW91ciBib290bG9hZGVyIHRoZW4gbm90aGluZyB3aWxsIGFwcGVhciAod2hpY2ggbWlnaHQgYmUgZGVzaXJlZCkuCisgKgorICogVGhpcyBkb2VzIG5vdCBhcHBlbmQgYSBuZXdsaW5lCisgKi8KK3N0YXRpYyB2b2lkCitwdXRzdHIoY29uc3QgY2hhciAqcykKK3sKKwl1bnNpZ25lZCBsb25nIHNlcmlhbF9wb3J0OworCisJZG8geworCQlzZXJpYWxfcG9ydCA9IFVBUlQxX0JBU0U7CisJCWlmICggVUFSVChVQ1IxKSAmIFVDUjFfVUFSVEVOICkKKwkJCWJyZWFrOworCQlzZXJpYWxfcG9ydCA9IFVBUlQyX0JBU0U7CisJCWlmICggVUFSVChVQ1IxKSAmIFVDUjFfVUFSVEVOICkKKwkJCWJyZWFrOworCQlyZXR1cm47CisJfSB3aGlsZSgwKTsKKworCXdoaWxlICgqcykgeworCQl3aGlsZSAoICEoVUFSVChVU1IyKSAmIFVTUjJfVFhGRSkgKQorCQkJYmFycmllcigpOworCisJCVVBUlQoVFhSKSA9ICpzOworCisJCWlmICgqcyA9PSAnXG4nKSB7CisJCQl3aGlsZSAoICEoVUFSVChVU1IyKSAmIFVTUjJfVFhGRSkgKQorCQkJCWJhcnJpZXIoKTsKKworCQkJVUFSVChUWFIpID0gJ1xyJzsKKwkJfQorCQlzKys7CisJfQorfQorCisvKgorICogbm90aGluZyB0byBkbworICovCisjZGVmaW5lIGFyY2hfZGVjb21wX3NldHVwKCkKKworI2RlZmluZSBhcmNoX2RlY29tcF93ZG9nKCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlteC92bWFsbG9jLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbXgvdm1hbGxvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1MjAzOGYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbXgvdm1hbGxvYy5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW14L3ZtYWxsb2MuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDAgUnVzc2VsbCBLaW5nLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisvKgorICogSnVzdCBhbnkgYXJiaXRyYXJ5IG9mZnNldCB0byB0aGUgc3RhcnQgb2YgdGhlIHZtYWxsb2MgVk0gYXJlYTogdGhlCisgKiBjdXJyZW50IDhNQiB2YWx1ZSBqdXN0IG1lYW5zIHRoYXQgdGhlcmUgd2lsbCBiZSBhIDhNQiAiaG9sZSIgYWZ0ZXIgdGhlCisgKiBwaHlzaWNhbCBtZW1vcnkgdW50aWwgdGhlIGtlcm5lbCB2aXJ0dWFsIG1lbW9yeSBzdGFydHMuICBUaGF0IG1lYW5zIHRoYXQKKyAqIGFueSBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyB3aWxsIGhvcGVmdWxseSBiZSBjYXVnaHQuCisgKiBUaGUgdm1hbGxvYygpIHJvdXRpbmVzIGxlYXZlcyBhIGhvbGUgb2YgNGtCIGJldHdlZW4gZWFjaCB2bWFsbG9jZWQKKyAqIGFyZWEgZm9yIHRoZSBzYW1lIHJlYXNvbi4gOykKKyAqLworI2RlZmluZSBWTUFMTE9DX09GRlNFVAkgICg4KjEwMjQqMTAyNCkKKyNkZWZpbmUgVk1BTExPQ19TVEFSVAkgICgoKHVuc2lnbmVkIGxvbmcpaGlnaF9tZW1vcnkgKyBWTUFMTE9DX09GRlNFVCkgJiB+KFZNQUxMT0NfT0ZGU0VULTEpKQorI2RlZmluZSBWTUFMTE9DX1ZNQUREUih4KSAoKHVuc2lnbmVkIGxvbmcpKHgpKQorI2RlZmluZSBWTUFMTE9DX0VORCAgICAgICAoUEFHRV9PRkZTRVQgKyAweDEwMDAwMDAwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW50ZWdyYXRvci9iaXRzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbnRlZ3JhdG9yL2JpdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWIwMjRlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW50ZWdyYXRvci9iaXRzLmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworLyogRE8gTk9UIEVESVQhISAtIHRoaXMgZmlsZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZAorICogICAgICAgICAgICAgICAgIGZyb20gLnMgZmlsZSBieSBhd2sgLWYgczJoLmF3aworICovCisvKiAgQml0IGZpZWxkIGRlZmluaXRpb25zCisgKiAgQ29weXJpZ2h0IChDKSBBUk0gTGltaXRlZCAxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICovCisKKyNpZm5kZWYgX19iaXRzX2gKKyNkZWZpbmUgX19iaXRzX2ggICAgICAgICAgICAgICAgICAgICAgICAxCisKKyNkZWZpbmUgQklUMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEJJVDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBCSVQyICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQklUMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEJJVDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBCSVQ1ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQklUNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEJJVDcgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBCSVQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQklUOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIEJJVDEwICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBCSVQxMSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgQklUMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIEJJVDEzICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBCSVQxNCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgQklUMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIEJJVDE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBCSVQxNyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgQklUMTggICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIEJJVDE5ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBCSVQyMCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgQklUMjEgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIEJJVDIyICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMAorI2RlZmluZSBCSVQyMyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgQklUMjQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIEJJVDI1ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMAorI2RlZmluZSBCSVQyNiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgQklUMjcgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIEJJVDI4ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBCSVQyOSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgQklUMzAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIEJJVDMxICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorCisjZW5kaWYKKworLyogICAgICAgICBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWludGVncmF0b3IvY20uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWludGVncmF0b3IvY20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzFjMWE3MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWludGVncmF0b3IvY20uaApAQCAtMCwwICsxLDM2IEBACisvKgorICogdXBkYXRlIHRoZSBjb3JlIG1vZHVsZSBjb250cm9sIHJlZ2lzdGVyLgorICovCit2b2lkIGNtX2NvbnRyb2wodTMyLCB1MzIpOworCisjZGVmaW5lIENNX0NUUkxfTEVECQkJKDEgPDwgMCkKKyNkZWZpbmUgQ01fQ1RSTF9uTUJERVQJCQkoMSA8PCAxKQorI2RlZmluZSBDTV9DVFJMX1JFTUFQCQkJKDEgPDwgMikKKyNkZWZpbmUgQ01fQ1RSTF9SRVNFVAkJCSgxIDw8IDMpCisKKy8qCisgKiBJbnRlZ3JhdG9yL0FQLFBQMiBzcGVjaWZpYworICovCisjZGVmaW5lIENNX0NUUkxfSElHSFZFQ1RPUlMJCSgxIDw8IDQpCisjZGVmaW5lIENNX0NUUkxfQklHRU5ESUFOCQkoMSA8PCA1KQorI2RlZmluZSBDTV9DVFJMX0ZBU1RCVVMJCQkoMSA8PCA2KQorI2RlZmluZSBDTV9DVFJMX1NZTkMJCQkoMSA8PCA3KQorCisvKgorICogQVJNOTI2Lzk0Ni85NjYgSW50ZWdyYXRvci9DUCBzcGVjaWZpYworICovCisjZGVmaW5lIENNX0NUUkxfTENEQklBU0VOCQkoMSA8PCA4KQorI2RlZmluZSBDTV9DVFJMX0xDREJJQVNVUAkJKDEgPDwgOSkKKyNkZWZpbmUgQ01fQ1RSTF9MQ0RCSUFTRE4JCSgxIDw8IDEwKQorI2RlZmluZSBDTV9DVFJMX0xDRE1VWFNFTF9NQVNLCQkoNyA8PCAxMSkKKyNkZWZpbmUgQ01fQ1RSTF9MQ0RNVVhTRUxfR0VOTENECSgxIDw8IDExKQorI2RlZmluZSBDTV9DVFJMX0xDRE1VWFNFTF9TSEFSUExDRDEJKDMgPDwgMTEpCisjZGVmaW5lIENNX0NUUkxfTENETVVYU0VMX1NIQVJQTENEMgkoNCA8PCAxMSkKKyNkZWZpbmUgQ01fQ1RSTF9MQ0RNVVhTRUxfVkdBCQkoNyA8PCAxMSkKKyNkZWZpbmUgQ01fQ1RSTF9MQ0RFTjAJCQkoMSA8PCAxNCkKKyNkZWZpbmUgQ01fQ1RSTF9MQ0RFTjEJCQkoMSA8PCAxNSkKKyNkZWZpbmUgQ01fQ1RSTF9TVEFUSUMxCQkJKDEgPDwgMTYpCisjZGVmaW5lIENNX0NUUkxfU1RBVElDMgkJCSgxIDw8IDE3KQorI2RlZmluZSBDTV9DVFJMX1NUQVRJQwkJCSgxIDw8IDE4KQorI2RlZmluZSBDTV9DVFJMX24yNEJJVEVOCQkoMSA8PCAxOSkKKyNkZWZpbmUgQ01fQ1RSTF9FQklXUAkJCSgxIDw8IDIwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW50ZWdyYXRvci9kZWJ1Zy1tYWNyby5TIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW50ZWdyYXRvci9kZWJ1Zy1tYWNyby5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4NGExYWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbnRlZ3JhdG9yL2RlYnVnLW1hY3JvLlMKQEAgLTAsMCArMSwzOCBAQAorLyogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW50ZWdyYXRvci9kZWJ1Zy1tYWNyby5TCisgKgorICogRGVidWdnaW5nIG1hY3JvIGluY2x1ZGUgaGVhZGVyCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NC0xOTk5IFJ1c3NlbGwgS2luZworICogIE1vdmVkIGZyb20gbGludXgvYXJjaC9hcm0va2VybmVsL2RlYnVnLlMgYnkgQmVuIERvb2tzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisqLworCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2FtYmFfc2VyaWFsLmg+CisKKwkJLm1hY3JvCWFkZHJ1YXJ0LHJ4CisJCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCisJCXRzdAlccngsICMxCQkJQCBNTVUgZW5hYmxlZD8KKwkJbW92ZXEJXHJ4LCAjMHgxNjAwMDAwMAlAIHBoeXNpY2FsIGJhc2UgYWRkcmVzcworCQltb3ZuZQlccngsICMweGYwMDAwMDAwCUAgdmlydHVhbCBiYXNlCisJCWFkZG5lCVxyeCwgXHJ4LCAjMHgxNjAwMDAwMCA+PiA0CisJCS5lbmRtCisKKwkJLm1hY3JvCXNlbmR1YXJ0LHJkLHJ4CisJCXN0cmIJXHJkLCBbXHJ4LCAjVUFSVDAxeF9EUl0KKwkJLmVuZG0KKworCQkubWFjcm8Jd2FpdHVhcnQscmQscngKKzEwMDE6CQlsZHIJXHJkLCBbXHJ4LCAjMHgxOF0JQCBVQVJURkxHCisJCXRzdAlccmQsICMxIDw8IDUJCUAgVUFSVEZMR1VUWEZGIC0gMSB3aGVuIGZ1bGwKKwkJYm5lCTEwMDFiCisJCS5lbmRtCisKKwkJLm1hY3JvCWJ1c3l1YXJ0LHJkLHJ4CisxMDAxOgkJbGRyCVxyZCwgW1xyeCwgIzB4MThdCUAgVUFSVEZMRworCQl0c3QJXHJkLCAjMSA8PCAzCQlAIFVBUlRGTEdVQlVTWSAtIDEgd2hlbiBidXN5CisJCWJuZQkxMDAxYgorCQkuZW5kbQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW50ZWdyYXRvci9kbWEuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWludGVncmF0b3IvZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE3MTc5MgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWludGVncmF0b3IvZG1hLmgKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbnRlZ3JhdG9yL2RtYS5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NywxOTk4IFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworI2lmbmRlZiBfX0FTTV9BUkNIX0RNQV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfRE1BX0gKKworI2RlZmluZSBNQVhfRE1BX0FERFJFU1MJCTB4ZmZmZmZmZmYKKworI2RlZmluZSBNQVhfRE1BX0NIQU5ORUxTCTAKKworI2VuZGlmIC8qIF9BU01fQVJDSF9ETUFfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbnRlZ3JhdG9yL2VudHJ5LW1hY3JvLlMgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbnRlZ3JhdG9yL2VudHJ5LW1hY3JvLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRmN2VlNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWludGVncmF0b3IvZW50cnktbWFjcm8uUwpAQCAtMCwwICsxLDM2IEBACisvKgorICogaW5jbHVkZS9hc20tYXJtL2FyY2gtaW50ZWdyYXRvci9lbnRyeS1tYWNyby5TCisgKgorICogTG93LWxldmVsIElSUSBoZWxwZXIgbWFjcm9zIGZvciBJbnRlZ3JhdG9yIHBsYXRmb3JtcworICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyAJCS5tYWNybwlkaXNhYmxlX2ZpcQorCQkuZW5kbQorCisJCS5tYWNybwlnZXRfaXJxbnJfYW5kX2Jhc2UsIGlycW5yLCBpcnFzdGF0LCBiYXNlLCB0bXAKKy8qIEZJWE1FOiBzaG91bGQgbm90IGJlIHVzaW5nIHNvbyBtYW55IExEUnMgaGVyZSAqLworCQlsZHIJXGJhc2UsID1JT19BRERSRVNTKElOVEVHUkFUT1JfSUNfQkFTRSkKKwkJbW92CVxpcnFuciwgI0lSUV9QSUNfU1RBUlQKKwkJbGRyCVxpcnFzdGF0LCBbXGJhc2UsICNJUlFfU1RBVFVTXQkJQCBnZXQgbWFza2VkIHN0YXR1cworCQlsZHIJXGJhc2UsID1JT19BRERSRVNTKElOVEVHUkFUT1JfSERSX0JBU0UpCisJCXRlcQlcaXJxc3RhdCwgIzAKKwkJbGRyZXEJXGlycXN0YXQsIFtcYmFzZSwgIyhJTlRFR1JBVE9SX0hEUl9JQ19PRkZTRVQrSVJRX1NUQVRVUyldCisJCW1vdmVxCVxpcnFuciwgI0lSUV9DSUNfU1RBUlQKKworMTAwMToJCXRzdAlcaXJxc3RhdCwgIzE1CisJCWJuZQkxMDAyZgorCQlhZGQJXGlycW5yLCBcaXJxbnIsICM0CisJCW1vdnMJXGlycXN0YXQsIFxpcnFzdGF0LCBsc3IgIzQKKwkJYm5lCTEwMDFiCisxMDAyOgkJdHN0CVxpcnFzdGF0LCAjMQorCQlibmUJMTAwM2YKKwkJYWRkCVxpcnFuciwgXGlycW5yLCAjMQorCQltb3ZzCVxpcnFzdGF0LCBcaXJxc3RhdCwgbHNyICMxCisJCWJuZQkxMDAyYgorMTAwMzoJCS8qIEVRIHdpbGwgYmUgc2V0IGlmIG5vIGlycXMgcGVuZGluZyAqLworCQkuZW5kbQorCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbnRlZ3JhdG9yL2hhcmR3YXJlLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbnRlZ3JhdG9yL2hhcmR3YXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmUyNzE2ZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWludGVncmF0b3IvaGFyZHdhcmUuaApAQCAtMCwwICsxLDU3IEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWludGVncmF0b3IvaGFyZHdhcmUuaAorICoKKyAqICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGhhcmR3YXJlIGRlZmluaXRpb25zIG9mIHRoZSBJbnRlZ3JhdG9yLgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTkgQVJNIExpbWl0ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisjaWZuZGVmIF9fQVNNX0FSQ0hfSEFSRFdBUkVfSAorI2RlZmluZSBfX0FTTV9BUkNIX0hBUkRXQVJFX0gKKworI2luY2x1ZGUgPGFzbS9zaXplcy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3BsYXRmb3JtLmg+CisKKy8qCisgKiBXaGVyZSBpbiB2aXJ0dWFsIG1lbW9yeSB0aGUgSU8gZGV2aWNlcyAodGltZXJzLCBzeXN0ZW0gY29udHJvbGxlcnMKKyAqIGFuZCBzbyBvbikKKyAqLworI2RlZmluZSBJT19CQVNFCQkJMHhGMDAwMDAwMCAgICAgICAgICAgICAgICAgLy8gVkEgb2YgSU8gCisjZGVmaW5lIElPX1NJWkUJCQkweDBCMDAwMDAwICAgICAgICAgICAgICAgICAvLyBIb3cgbXVjaD8KKyNkZWZpbmUgSU9fU1RBUlQJCUlOVEVHUkFUT1JfSERSX0JBU0UgICAgICAgIC8vIFBBIG9mIElPCisKKy8qCisgKiBTaW1pbGFyIHRvIGFib3ZlLCBidXQgZm9yIFBDSSBhZGRyZXNzZXMgKG1lbW9yeSwgSU8sIENvbmZpZyBhbmQgdGhlCisgKiBWMyBjaGlwIGl0c2VsZikuICBXQVJOSU5HOiB0aGlzIGhhcyB0byBtaXJyb3IgZGVmaW5pdGlvbnMgaW4gcGxhdGZvcm0uaAorICovCisjZGVmaW5lIFBDSV9NRU1PUllfVkFERFIgICAgICAgIDB4ZTgwMDAwMDAKKyNkZWZpbmUgUENJX0NPTkZJR19WQUREUiAgICAgICAgMHhlYzAwMDAwMAorI2RlZmluZSBQQ0lfVjNfVkFERFIgICAgICAgICAgICAweGVkMDAwMDAwCisjZGVmaW5lIFBDSV9JT19WQUREUiAgICAgICAgICAgIDB4ZWUwMDAwMDAKKworI2RlZmluZSBQQ0lPX0JBU0UJCVBDSV9JT19WQUREUgorI2RlZmluZSBQQ0lNRU1fQkFTRQkJUENJX01FTU9SWV9WQUREUgorCisvKiBtYWNybyB0byBnZXQgYXQgSU8gc3BhY2Ugd2hlbiBydW5uaW5nIHZpcnR1YWxseSAqLworI2RlZmluZSBJT19BRERSRVNTKHgpICgoKHgpID4+IDQpICsgSU9fQkFTRSkgCisKKyNkZWZpbmUgcGNpYmlvc19hc3NpZ25fYWxsX2J1c3NlcygpCTEKKworI2RlZmluZSBQQ0lCSU9TX01JTl9JTwkJMHg2MDAwCisjZGVmaW5lIFBDSUJJT1NfTUlOX01FTSAJMHgwMDEwMDAwMAorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW50ZWdyYXRvci9pbXBkMS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW50ZWdyYXRvci9pbXBkMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NWRlNGIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbnRlZ3JhdG9yL2ltcGQxLmgKQEAgLTAsMCArMSwxOCBAQAorI2RlZmluZSBJTVBEMV9PU0MxCTB4MDAKKyNkZWZpbmUgSU1QRDFfT1NDMgkweDA0CisjZGVmaW5lIElNUEQxX0xPQ0sJMHgwOAorI2RlZmluZSBJTVBEMV9MRURTCTB4MGMKKyNkZWZpbmUgSU1QRDFfSU5UCTB4MTAKKyNkZWZpbmUgSU1QRDFfU1cJMHgxNAorI2RlZmluZSBJTVBEMV9DVFJMCTB4MTgKKworI2RlZmluZSBJTVBEMV9DVFJMX0RJU1BfTENECSgwIDw8IDApCisjZGVmaW5lIElNUEQxX0NUUkxfRElTUF9WR0EJKDEgPDwgMCkKKyNkZWZpbmUgSU1QRDFfQ1RSTF9ESVNQX0xDRDEJKDIgPDwgMCkKKyNkZWZpbmUgSU1QRDFfQ1RSTF9ESVNQX0VOQUJMRQkoMSA8PCAyKQorI2RlZmluZSBJTVBEMV9DVFJMX0RJU1BfTUFTSwkoNyA8PCAwKQorCitzdHJ1Y3QgZGV2aWNlOworCit2b2lkIGltcGQxX3R3ZWFrX2NvbnRyb2woc3RydWN0IGRldmljZSAqZGV2LCB1MzIgbWFzaywgdTMyIHZhbCk7CisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWludGVncmF0b3IvaW8uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWludGVncmF0b3IvaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmVhOGJlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW50ZWdyYXRvci9pby5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW50ZWdyYXRvci9pby5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5OSBBUk0gTGltaXRlZAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworI2lmbmRlZiBfX0FTTV9BUk1fQVJDSF9JT19ICisjZGVmaW5lIF9fQVNNX0FSTV9BUkNIX0lPX0gKKworI2RlZmluZSBJT19TUEFDRV9MSU1JVCAweGZmZmYKKworI2RlZmluZSBfX2lvKGEpCQkJKCh2b2lkIF9faW9tZW0gKikoUENJX0lPX1ZBRERSICsgKGEpKSkKKyNkZWZpbmUgX19tZW1fcGNpKGEpCQkoYSkKKyNkZWZpbmUgX19tZW1faXNhKGEpCQkoKGEpICsgUENJX01FTU9SWV9WQUREUikKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbnRlZ3JhdG9yL2lycXMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWludGVncmF0b3IvaXJxcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhN2IzYWYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbnRlZ3JhdG9yL2lycXMuaApAQCAtMCwwICsxLDgyIEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWludGVncmF0b3IvaXJxcy5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5OSBBUk0gTGltaXRlZAorICogIENvcHlyaWdodCAoQykgMjAwMCBEZWVwIEJsdWUgU29sdXRpb25zIEx0ZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworLyogCisgKiAgSW50ZXJydXB0IG51bWJlcnMKKyAqLworI2RlZmluZSBJUlFfUElDX1NUQVJUCQkJMAorI2RlZmluZSBJUlFfU09GVElOVAkJCTAKKyNkZWZpbmUgSVJRX1VBUlRJTlQwCQkJMQorI2RlZmluZSBJUlFfVUFSVElOVDEJCQkyCisjZGVmaW5lIElSUV9LTUlJTlQwCQkJMworI2RlZmluZSBJUlFfS01JSU5UMQkJCTQKKyNkZWZpbmUgSVJRX1RJTUVSSU5UMAkJCTUKKyNkZWZpbmUgSVJRX1RJTUVSSU5UMQkJCTYKKyNkZWZpbmUgSVJRX1RJTUVSSU5UMgkJCTcKKyNkZWZpbmUgSVJRX1JUQ0lOVAkJCTgKKyNkZWZpbmUgSVJRX0FQX0VYUElOVDAJCQk5CisjZGVmaW5lIElSUV9BUF9FWFBJTlQxCQkJMTAKKyNkZWZpbmUgSVJRX0FQX0VYUElOVDIJCQkxMQorI2RlZmluZSBJUlFfQVBfRVhQSU5UMwkJCTEyCisjZGVmaW5lIElSUV9BUF9QQ0lJTlQwCQkJMTMKKyNkZWZpbmUgSVJRX0FQX1BDSUlOVDEJCQkxNAorI2RlZmluZSBJUlFfQVBfUENJSU5UMgkJCTE1CisjZGVmaW5lIElSUV9BUF9QQ0lJTlQzCQkJMTYKKyNkZWZpbmUgSVJRX0FQX1YzSU5UCQkJMTcKKyNkZWZpbmUgSVJRX0FQX0NQSU5UMAkJCTE4CisjZGVmaW5lIElSUV9BUF9DUElOVDEJCQkxOQorI2RlZmluZSBJUlFfQVBfTEJVU1RJTUVPVVQgCQkyMAorI2RlZmluZSBJUlFfQVBfQVBDSU5UCQkJMjEKKyNkZWZpbmUgSVJRX0NQX0NMQ0RDSU5UCQkJMjIKKyNkZWZpbmUgSVJRX0NQX01NQ0lJTlQwCQkJMjMKKyNkZWZpbmUgSVJRX0NQX01NQ0lJTlQxCQkJMjQKKyNkZWZpbmUgSVJRX0NQX0FBQ0lJTlQJCQkyNQorI2RlZmluZSBJUlFfQ1BfQ1BQTERJTlQJCQkyNgorI2RlZmluZSBJUlFfQ1BfRVRISU5UCQkJMjcKKyNkZWZpbmUgSVJRX0NQX1RTUEVOSU5UCQkJMjgKKyNkZWZpbmUgSVJRX1BJQ19FTkQJCQkzMQorCisjZGVmaW5lIElSUV9DSUNfU1RBUlQJCQkzMgorI2RlZmluZSBJUlFfQ01fU09GVElOVAkJCTMyCisjZGVmaW5lIElSUV9DTV9DT01NUlgJCQkzMworI2RlZmluZSBJUlFfQ01fQ09NTVRYCQkJMzQKKyNkZWZpbmUgSVJRX0NJQ19FTkQJCQkzNAorCisvKgorICogSW50ZWdyYXRvckNQIG9ubHkKKyAqLworI2RlZmluZSBJUlFfU0lDX1NUQVJUCQkJMzUKKyNkZWZpbmUgSVJRX1NJQ19DUF9TT0ZUSU5UCQkzNQorI2RlZmluZSBJUlFfU0lDX0NQX1JJMAkJCTM2CisjZGVmaW5lIElSUV9TSUNfQ1BfUkkxCQkJMzcKKyNkZWZpbmUgSVJRX1NJQ19DUF9DQVJESU4JCTM4CisjZGVmaW5lIElSUV9TSUNfQ1BfTE1JTlQwCQkzOQorI2RlZmluZSBJUlFfU0lDX0NQX0xNSU5UMQkJNDAKKyNkZWZpbmUgSVJRX1NJQ19DUF9MTUlOVDIJCTQxCisjZGVmaW5lIElSUV9TSUNfQ1BfTE1JTlQzCQk0MgorI2RlZmluZSBJUlFfU0lDX0NQX0xNSU5UNAkJNDMKKyNkZWZpbmUgSVJRX1NJQ19DUF9MTUlOVDUJCTQ0CisjZGVmaW5lIElSUV9TSUNfQ1BfTE1JTlQ2CQk0NQorI2RlZmluZSBJUlFfU0lDX0NQX0xNSU5UNwkJNDYKKyNkZWZpbmUgSVJRX1NJQ19FTkQJCQk0NgorCisjZGVmaW5lIE5SX0lSUVMgICAgICAgICAgICAgICAgICAgICAgICAgNDcKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW50ZWdyYXRvci9sbS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW50ZWdyYXRvci9sbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4MTg2YjYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbnRlZ3JhdG9yL2xtLmgKQEAgLTAsMCArMSwyMyBAQAorCitzdHJ1Y3QgbG1fZGV2aWNlIHsKKwlzdHJ1Y3QgZGV2aWNlCQlkZXY7CisJc3RydWN0IHJlc291cmNlCQlyZXNvdXJjZTsKKwl1bnNpZ25lZCBpbnQJCWlycTsKKwl1bnNpZ25lZCBpbnQJCWlkOworfTsKKworc3RydWN0IGxtX2RyaXZlciB7CisJc3RydWN0IGRldmljZV9kcml2ZXIJZHJ2OworCWludAkJCSgqcHJvYmUpKHN0cnVjdCBsbV9kZXZpY2UgKik7CisJdm9pZAkJCSgqcmVtb3ZlKShzdHJ1Y3QgbG1fZGV2aWNlICopOworCWludAkJCSgqc3VzcGVuZCkoc3RydWN0IGxtX2RldmljZSAqLCBwbV9tZXNzYWdlX3QpOworCWludAkJCSgqcmVzdW1lKShzdHJ1Y3QgbG1fZGV2aWNlICopOworfTsKKworaW50IGxtX2RyaXZlcl9yZWdpc3RlcihzdHJ1Y3QgbG1fZHJpdmVyICpkcnYpOwordm9pZCBsbV9kcml2ZXJfdW5yZWdpc3RlcihzdHJ1Y3QgbG1fZHJpdmVyICpkcnYpOworCitpbnQgbG1fZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBsbV9kZXZpY2UgKmRldik7CisKKyNkZWZpbmUgbG1fZ2V0X2RydmRhdGEobG0pCWRldl9nZXRfZHJ2ZGF0YSgmKGxtKS0+ZGV2KQorI2RlZmluZSBsbV9zZXRfZHJ2ZGF0YShsbSxkKQlkZXZfc2V0X2RydmRhdGEoJihsbSktPmRldiwgZCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWludGVncmF0b3IvbWVtb3J5LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbnRlZ3JhdG9yL21lbW9yeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwODdlYTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbnRlZ3JhdG9yL21lbW9yeS5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW50ZWdyYXRvci9tZW1vcnkuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTkgQVJNIExpbWl0ZWQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKyNpZm5kZWYgX19BU01fQVJDSF9NRU1PUllfSAorI2RlZmluZSBfX0FTTV9BUkNIX01FTU9SWV9ICisKKy8qCisgKiBQaHlzaWNhbCBEUkFNIG9mZnNldC4KKyAqLworI2RlZmluZSBQSFlTX09GRlNFVAkoMHgwMDAwMDAwMFVMKQorI2RlZmluZSBCVVNfT0ZGU0VUCSgweDgwMDAwMDAwVUwpCisKKy8qCisgKiBWaXJ0dWFsIHZpZXcgPC0+IERNQSB2aWV3IG1lbW9yeSBhZGRyZXNzIHRyYW5zbGF0aW9ucworICogdmlydF90b19idXM6IFVzZWQgdG8gdHJhbnNsYXRlIHRoZSB2aXJ0dWFsIGFkZHJlc3MgdG8gYW4KKyAqICAgICAgICAgICAgICBhZGRyZXNzIHN1aXRhYmxlIHRvIGJlIHBhc3NlZCB0byBzZXRfZG1hX2FkZHIKKyAqIGJ1c190b192aXJ0OiBVc2VkIHRvIGNvbnZlcnQgYW4gYWRkcmVzcyBmb3IgRE1BIG9wZXJhdGlvbnMKKyAqICAgICAgICAgICAgICB0byBhbiBhZGRyZXNzIHRoYXQgdGhlIGtlcm5lbCBjYW4gdXNlLgorICovCisjZGVmaW5lIF9fdmlydF90b19idXMoeCkJKHggLSBQQUdFX09GRlNFVCArIEJVU19PRkZTRVQpCisjZGVmaW5lIF9fYnVzX3RvX3ZpcnQoeCkJKHggLSBCVVNfT0ZGU0VUICsgUEFHRV9PRkZTRVQpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW50ZWdyYXRvci9wYXJhbS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW50ZWdyYXRvci9wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmYTU4MmYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbnRlZ3JhdG9yL3BhcmFtLmgKQEAgLTAsMCArMSwxOSBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbnRlZ3JhdG9yL3BhcmFtLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5IEFSTSBMaW1pdGVkCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbnRlZ3JhdG9yL3BsYXRmb3JtLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbnRlZ3JhdG9yL3BsYXRmb3JtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI2N2U0MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWludGVncmF0b3IvcGxhdGZvcm0uaApAQCAtMCwwICsxLDQ2NSBAQAorLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworLyogRE8gTk9UIEVESVQhISAtIHRoaXMgZmlsZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZAorICogICAgICAgICAgICAgICAgIGZyb20gLnMgZmlsZSBieSBhd2sgLWYgczJoLmF3aworICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICogQ29weXJpZ2h0IKkgQVJNIExpbWl0ZWQgMTk5OC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogCisgKiAgIEludGVncmF0b3IgYWRkcmVzcyBtYXAKKyAqIAorICogCU5PVEU6IFRoaXMgaXMgYSBtdWx0aS1ob3N0ZWQgaGVhZGVyIGZpbGUgZm9yIHVzZSB3aXRoIHVIQUwgYW5kCisgKiAJICAgICAgc3VwcG9ydGVkIGRlYnVnZ2Vycy4KKyAqIAorICogCSRJZDogcGxhdGZvcm0ucyx2IDEuMzIgMjAwMC8wMi8xOCAxMDo1MTozOSBhc2ltcyBFeHAgJAorICogCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX2FkZHJlc3NfaAorI2RlZmluZSBfX2FkZHJlc3NfaCAgICAgICAgICAgICAgICAgICAgIDEKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAgSW50ZWdyYXRvciBkZWZpbml0aW9ucworICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBNZW1vcnkgZGVmaW5pdGlvbnMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIEludGVncmF0b3IgbWVtb3J5IG1hcAorICogCisgKi8KKyNkZWZpbmUgSU5URUdSQVRPUl9CT09UX1JPTV9MTyAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIElOVEVHUkFUT1JfQk9PVF9ST01fSEkgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBJTlRFR1JBVE9SX0JPT1RfUk9NX0JBU0UgICAgICAgIElOVEVHUkFUT1JfQk9PVF9ST01fSEkJIC8qICBOb3JtYWwgcG9zaXRpb24gKi8KKyNkZWZpbmUgSU5URUdSQVRPUl9CT09UX1JPTV9TSVpFICAgICAgICBTWl81MTJLCisKKy8qIAorICogIE5ldyBDb3JlIE1vZHVsZXMgaGF2ZSBkaWZmZXJlbnQgYW1vdW50cyBvZiBTU1JBTSwgdGhlIGFtb3VudCBvZiBTU1JBTQorICogIGZpdHRlZCBjYW4gYmUgZm91bmQgaW4gSERSX1NUQVQuCisgKiAKKyAqICBUaGUgc3ltYm9sIElOVEVHUkFUT1JfU1NSQU1fU0laRSBpcyBrZXB0LCBob3dldmVyIHRoaXMgbm93IHJlZmVycyB0bworICogIHRoZSBtaW5pbXVtIGFtb3VudCBvZiBTU1JBTSBmaXR0ZWQgb24gYW55IGNvcmUgbW9kdWxlLgorICogCisgKiAgTmV3IENvcmUgTW9kdWxlcyBhbHNvIGFsaWFzIHRoZSBTU1JBTS4KKyAqIAorICovCisjZGVmaW5lIElOVEVHUkFUT1JfU1NSQU1fQkFTRSAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBJTlRFR1JBVE9SX1NTUkFNX0FMSUFTX0JBU0UgICAgIDB4MTA4MDAwMDAKKyNkZWZpbmUgSU5URUdSQVRPUl9TU1JBTV9TSVpFICAgICAgICAgICBTWl8yNTZLCisKKyNkZWZpbmUgSU5URUdSQVRPUl9GTEFTSF9CQVNFICAgICAgICAgICAweDI0MDAwMDAwCisjZGVmaW5lIElOVEVHUkFUT1JfRkxBU0hfU0laRSAgICAgICAgICAgU1pfMzJNCisKKyNkZWZpbmUgSU5URUdSQVRPUl9NQlJEX1NTUkFNX0JBU0UgICAgICAweDI4MDAwMDAwCisjZGVmaW5lIElOVEVHUkFUT1JfTUJSRF9TU1JBTV9TSVpFICAgICAgU1pfNTEySworCisvKiAKKyAqICBTRFJBTSBpcyBhIFNJTU0gdGhlcmVmb3JlIHRoZSBzaXplIGlzIG5vdCBrbm93bi4KKyAqIAorICovCisjZGVmaW5lIElOVEVHUkFUT1JfU0RSQU1fQkFTRSAgICAgICAgICAgMHgwMDA0MDAwMAorCisjZGVmaW5lIElOVEVHUkFUT1JfU0RSQU1fQUxJQVNfQkFTRSAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBJTlRFR1JBVE9SX0hEUjBfU0RSQU1fQkFTRSAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgSU5URUdSQVRPUl9IRFIxX1NEUkFNX0JBU0UgICAgICAweDkwMDAwMDAwCisjZGVmaW5lIElOVEVHUkFUT1JfSERSMl9TRFJBTV9CQVNFICAgICAgMHhBMDAwMDAwMAorI2RlZmluZSBJTlRFR1JBVE9SX0hEUjNfU0RSQU1fQkFTRSAgICAgIDB4QjAwMDAwMDAKKworLyogCisgKiAgTG9naWMgZXhwYW5zaW9uIG1vZHVsZXMKKyAqIAorICovCisjZGVmaW5lIElOVEVHUkFUT1JfTE9HSUNfTU9EVUxFU19CQVNFICAgMHhDMDAwMDAwMAorI2RlZmluZSBJTlRFR1JBVE9SX0xPR0lDX01PRFVMRTBfQkFTRSAgIDB4QzAwMDAwMDAKKyNkZWZpbmUgSU5URUdSQVRPUl9MT0dJQ19NT0RVTEUxX0JBU0UgICAweEQwMDAwMDAwCisjZGVmaW5lIElOVEVHUkFUT1JfTE9HSUNfTU9EVUxFMl9CQVNFICAgMHhFMDAwMDAwMAorI2RlZmluZSBJTlRFR1JBVE9SX0xPR0lDX01PRFVMRTNfQkFTRSAgIDB4RjAwMDAwMDAKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgSW50ZWdyYXRvciBoZWFkZXIgY2FyZCByZWdpc3RlcnMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogCisgKi8KKyNkZWZpbmUgSU5URUdSQVRPUl9IRFJfSURfT0ZGU0VUICAgICAgICAweDAwCisjZGVmaW5lIElOVEVHUkFUT1JfSERSX1BST0NfT0ZGU0VUICAgICAgMHgwNAorI2RlZmluZSBJTlRFR1JBVE9SX0hEUl9PU0NfT0ZGU0VUICAgICAgIDB4MDgKKyNkZWZpbmUgSU5URUdSQVRPUl9IRFJfQ1RSTF9PRkZTRVQgICAgICAweDBDCisjZGVmaW5lIElOVEVHUkFUT1JfSERSX1NUQVRfT0ZGU0VUICAgICAgMHgxMAorI2RlZmluZSBJTlRFR1JBVE9SX0hEUl9MT0NLX09GRlNFVCAgICAgIDB4MTQKKyNkZWZpbmUgSU5URUdSQVRPUl9IRFJfU0RSQU1fT0ZGU0VUICAgICAweDIwCisjZGVmaW5lIElOVEVHUkFUT1JfSERSX0lOSVRfT0ZGU0VUICAgICAgMHgyNAkgLyogIENNOXg2ICovCisjZGVmaW5lIElOVEVHUkFUT1JfSERSX0lDX09GRlNFVCAgICAgICAgMHg0MAorI2RlZmluZSBJTlRFR1JBVE9SX0hEUl9TUERCQVNFX09GRlNFVCAgIDB4MTAwCisjZGVmaW5lIElOVEVHUkFUT1JfSERSX1NQRFRPUF9PRkZTRVQgICAgMHgyMDAKKworI2RlZmluZSBJTlRFR1JBVE9SX0hEUl9CQVNFICAgICAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgSU5URUdSQVRPUl9IRFJfSUQgICAgICAgICAgICAgICAoSU5URUdSQVRPUl9IRFJfQkFTRSArIElOVEVHUkFUT1JfSERSX0lEX09GRlNFVCkKKyNkZWZpbmUgSU5URUdSQVRPUl9IRFJfUFJPQyAgICAgICAgICAgICAoSU5URUdSQVRPUl9IRFJfQkFTRSArIElOVEVHUkFUT1JfSERSX1BST0NfT0ZGU0VUKQorI2RlZmluZSBJTlRFR1JBVE9SX0hEUl9PU0MgICAgICAgICAgICAgIChJTlRFR1JBVE9SX0hEUl9CQVNFICsgSU5URUdSQVRPUl9IRFJfT1NDX09GRlNFVCkKKyNkZWZpbmUgSU5URUdSQVRPUl9IRFJfQ1RSTCAgICAgICAgICAgICAoSU5URUdSQVRPUl9IRFJfQkFTRSArIElOVEVHUkFUT1JfSERSX0NUUkxfT0ZGU0VUKQorI2RlZmluZSBJTlRFR1JBVE9SX0hEUl9TVEFUICAgICAgICAgICAgIChJTlRFR1JBVE9SX0hEUl9CQVNFICsgSU5URUdSQVRPUl9IRFJfU1RBVF9PRkZTRVQpCisjZGVmaW5lIElOVEVHUkFUT1JfSERSX0xPQ0sgICAgICAgICAgICAgKElOVEVHUkFUT1JfSERSX0JBU0UgKyBJTlRFR1JBVE9SX0hEUl9MT0NLX09GRlNFVCkKKyNkZWZpbmUgSU5URUdSQVRPUl9IRFJfU0RSQU0gICAgICAgICAgICAoSU5URUdSQVRPUl9IRFJfQkFTRSArIElOVEVHUkFUT1JfSERSX1NEUkFNX09GRlNFVCkKKyNkZWZpbmUgSU5URUdSQVRPUl9IRFJfSU5JVCAgICAgICAgICAgICAoSU5URUdSQVRPUl9IRFJfQkFTRSArIElOVEVHUkFUT1JfSERSX0lOSVRfT0ZGU0VUKQorI2RlZmluZSBJTlRFR1JBVE9SX0hEUl9JQyAgICAgICAgICAgICAgIChJTlRFR1JBVE9SX0hEUl9CQVNFICsgSU5URUdSQVRPUl9IRFJfSUNfT0ZGU0VUKQorI2RlZmluZSBJTlRFR1JBVE9SX0hEUl9TUERCQVNFICAgICAgICAgIChJTlRFR1JBVE9SX0hEUl9CQVNFICsgSU5URUdSQVRPUl9IRFJfU1BEQkFTRV9PRkZTRVQpCisjZGVmaW5lIElOVEVHUkFUT1JfSERSX1NQRFRPUCAgICAgICAgICAgKElOVEVHUkFUT1JfSERSX0JBU0UgKyBJTlRFR1JBVE9SX0hEUl9TUERUT1BfT0ZGU0VUKQorCisjZGVmaW5lIElOVEVHUkFUT1JfSERSX0NUUkxfTEVEICAgICAgICAgMHgwMQorI2RlZmluZSBJTlRFR1JBVE9SX0hEUl9DVFJMX01CUkRfREVURUNIIDB4MDIKKyNkZWZpbmUgSU5URUdSQVRPUl9IRFJfQ1RSTF9SRU1BUCAgICAgICAweDA0CisjZGVmaW5lIElOVEVHUkFUT1JfSERSX0NUUkxfUkVTRVQgICAgICAgMHgwOAorI2RlZmluZSBJTlRFR1JBVE9SX0hEUl9DVFJMX0hJR0hWRUNUT1JTIDB4MTAKKyNkZWZpbmUgSU5URUdSQVRPUl9IRFJfQ1RSTF9CSUdfRU5ESUFOICAweDIwCisjZGVmaW5lIElOVEVHUkFUT1JfSERSX0NUUkxfRkFTVEJVUyAgICAgMHg0MAorI2RlZmluZSBJTlRFR1JBVE9SX0hEUl9DVFJMX1NZTkMgICAgICAgIDB4ODAKKworI2RlZmluZSBJTlRFR1JBVE9SX0hEUl9PU0NfQ09SRV8xME1IeiAgIDB4MTAyCisjZGVmaW5lIElOVEVHUkFUT1JfSERSX09TQ19DT1JFXzE1TUh6ICAgMHgxMDcKKyNkZWZpbmUgSU5URUdSQVRPUl9IRFJfT1NDX0NPUkVfMjBNSHogICAweDEwQworI2RlZmluZSBJTlRFR1JBVE9SX0hEUl9PU0NfQ09SRV8yNU1IeiAgIDB4MTExCisjZGVmaW5lIElOVEVHUkFUT1JfSERSX09TQ19DT1JFXzMwTUh6ICAgMHgxMTYKKyNkZWZpbmUgSU5URUdSQVRPUl9IRFJfT1NDX0NPUkVfMzVNSHogICAweDExQgorI2RlZmluZSBJTlRFR1JBVE9SX0hEUl9PU0NfQ09SRV80ME1IeiAgIDB4MTIwCisjZGVmaW5lIElOVEVHUkFUT1JfSERSX09TQ19DT1JFXzQ1TUh6ICAgMHgxMjUKKyNkZWZpbmUgSU5URUdSQVRPUl9IRFJfT1NDX0NPUkVfNTBNSHogICAweDEyQQorI2RlZmluZSBJTlRFR1JBVE9SX0hEUl9PU0NfQ09SRV81NU1IeiAgIDB4MTJGCisjZGVmaW5lIElOVEVHUkFUT1JfSERSX09TQ19DT1JFXzYwTUh6ICAgMHgxMzQKKyNkZWZpbmUgSU5URUdSQVRPUl9IRFJfT1NDX0NPUkVfNjVNSHogICAweDEzOQorI2RlZmluZSBJTlRFR1JBVE9SX0hEUl9PU0NfQ09SRV83ME1IeiAgIDB4MTNFCisjZGVmaW5lIElOVEVHUkFUT1JfSERSX09TQ19DT1JFXzc1TUh6ICAgMHgxNDMKKyNkZWZpbmUgSU5URUdSQVRPUl9IRFJfT1NDX0NPUkVfODBNSHogICAweDE0OAorI2RlZmluZSBJTlRFR1JBVE9SX0hEUl9PU0NfQ09SRV84NU1IeiAgIDB4MTRECisjZGVmaW5lIElOVEVHUkFUT1JfSERSX09TQ19DT1JFXzkwTUh6ICAgMHgxNTIKKyNkZWZpbmUgSU5URUdSQVRPUl9IRFJfT1NDX0NPUkVfOTVNSHogICAweDE1NworI2RlZmluZSBJTlRFR1JBVE9SX0hEUl9PU0NfQ09SRV8xMDBNSHogIDB4MTVDCisjZGVmaW5lIElOVEVHUkFUT1JfSERSX09TQ19DT1JFXzEwNU1IeiAgMHgxNjEKKyNkZWZpbmUgSU5URUdSQVRPUl9IRFJfT1NDX0NPUkVfMTEwTUh6ICAweDE2NgorI2RlZmluZSBJTlRFR1JBVE9SX0hEUl9PU0NfQ09SRV8xMTVNSHogIDB4MTZCCisjZGVmaW5lIElOVEVHUkFUT1JfSERSX09TQ19DT1JFXzEyME1IeiAgMHgxNzAKKyNkZWZpbmUgSU5URUdSQVRPUl9IRFJfT1NDX0NPUkVfMTI1TUh6ICAweDE3NQorI2RlZmluZSBJTlRFR1JBVE9SX0hEUl9PU0NfQ09SRV8xMzBNSHogIDB4MTdBCisjZGVmaW5lIElOVEVHUkFUT1JfSERSX09TQ19DT1JFXzEzNU1IeiAgMHgxN0YKKyNkZWZpbmUgSU5URUdSQVRPUl9IRFJfT1NDX0NPUkVfMTQwTUh6ICAweDE4NAorI2RlZmluZSBJTlRFR1JBVE9SX0hEUl9PU0NfQ09SRV8xNDVNSHogIDB4MTg5CisjZGVmaW5lIElOVEVHUkFUT1JfSERSX09TQ19DT1JFXzE1ME1IeiAgMHgxOEUKKyNkZWZpbmUgSU5URUdSQVRPUl9IRFJfT1NDX0NPUkVfMTU1TUh6ICAweDE5MworI2RlZmluZSBJTlRFR1JBVE9SX0hEUl9PU0NfQ09SRV8xNjBNSHogIDB4MTk4CisjZGVmaW5lIElOVEVHUkFUT1JfSERSX09TQ19DT1JFX01BU0sgICAgMHg3RkYKKworI2RlZmluZSBJTlRFR1JBVE9SX0hEUl9PU0NfTUVNXzEwTUh6ICAgIDB4MTBDMDAwCisjZGVmaW5lIElOVEVHUkFUT1JfSERSX09TQ19NRU1fMTVNSHogICAgMHgxMTYwMDAKKyNkZWZpbmUgSU5URUdSQVRPUl9IRFJfT1NDX01FTV8yME1IeiAgICAweDEyMDAwMAorI2RlZmluZSBJTlRFR1JBVE9SX0hEUl9PU0NfTUVNXzI1TUh6ICAgIDB4MTJBMDAwCisjZGVmaW5lIElOVEVHUkFUT1JfSERSX09TQ19NRU1fMzBNSHogICAgMHgxMzQwMDAKKyNkZWZpbmUgSU5URUdSQVRPUl9IRFJfT1NDX01FTV8zM01IeiAgICAweDEzQTAwMAorI2RlZmluZSBJTlRFR1JBVE9SX0hEUl9PU0NfTUVNXzQwTUh6ICAgIDB4MTQ4MDAwCisjZGVmaW5lIElOVEVHUkFUT1JfSERSX09TQ19NRU1fNTBNSHogICAgMHgxNUMwMDAKKyNkZWZpbmUgSU5URUdSQVRPUl9IRFJfT1NDX01FTV82ME1IeiAgICAweDE3MDAwMAorI2RlZmluZSBJTlRFR1JBVE9SX0hEUl9PU0NfTUVNXzY2TUh6ICAgIDB4MTdDMDAwCisjZGVmaW5lIElOVEVHUkFUT1JfSERSX09TQ19NRU1fTUFTSyAgICAgMHg3RkYwMDAKKworI2RlZmluZSBJTlRFR1JBVE9SX0hEUl9PU0NfQlVTX01PREVfQ003eDAgIDB4MAorI2RlZmluZSBJTlRFR1JBVE9SX0hEUl9PU0NfQlVTX01PREVfQ005eDAgIDB4MDgwMDAwMAorI2RlZmluZSBJTlRFR1JBVE9SX0hEUl9PU0NfQlVTX01PREVfQ005eDYgIDB4MTAwMDAwMAorI2RlZmluZSBJTlRFR1JBVE9SX0hEUl9PU0NfQlVTX01PREVfQ00xMHgwMCAgMHgxODAwMDAwCisjZGVmaW5lIElOVEVHUkFUT1JfSERSX09TQ19CVVNfTU9ERV9NQVNLICAweDE4MDAwMDAKKworI2RlZmluZSBJTlRFR1JBVE9SX0hEUl9TRFJBTV9TUERfT0sgICAgICgxIDw8IDUpCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgSW50ZWdyYXRvciBzeXN0ZW0gcmVnaXN0ZXJzCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIAorICovCisKKy8qIAorICogIFN5c3RlbSBDb250cm9sbGVyCisgKiAKKyAqLworI2RlZmluZSBJTlRFR1JBVE9SX1NDX0lEX09GRlNFVCAgICAgICAgIDB4MDAKKyNkZWZpbmUgSU5URUdSQVRPUl9TQ19PU0NfT0ZGU0VUICAgICAgICAweDA0CisjZGVmaW5lIElOVEVHUkFUT1JfU0NfQ1RSTFNfT0ZGU0VUICAgICAgMHgwOAorI2RlZmluZSBJTlRFR1JBVE9SX1NDX0NUUkxDX09GRlNFVCAgICAgIDB4MEMKKyNkZWZpbmUgSU5URUdSQVRPUl9TQ19ERUNfT0ZGU0VUICAgICAgICAweDEwCisjZGVmaW5lIElOVEVHUkFUT1JfU0NfQVJCX09GRlNFVCAgICAgICAgMHgxNAorI2RlZmluZSBJTlRFR1JBVE9SX1NDX1BDSUVOQUJMRV9PRkZTRVQgIDB4MTgKKyNkZWZpbmUgSU5URUdSQVRPUl9TQ19MT0NLX09GRlNFVCAgICAgICAweDFDCisKKyNkZWZpbmUgSU5URUdSQVRPUl9TQ19CQVNFICAgICAgICAgICAgICAweDExMDAwMDAwCisjZGVmaW5lIElOVEVHUkFUT1JfU0NfSUQgICAgICAgICAgICAgICAgKElOVEVHUkFUT1JfU0NfQkFTRSArIElOVEVHUkFUT1JfU0NfSURfT0ZGU0VUKQorI2RlZmluZSBJTlRFR1JBVE9SX1NDX09TQyAgICAgICAgICAgICAgIChJTlRFR1JBVE9SX1NDX0JBU0UgKyBJTlRFR1JBVE9SX1NDX09TQ19PRkZTRVQpCisjZGVmaW5lIElOVEVHUkFUT1JfU0NfQ1RSTFMgICAgICAgICAgICAgKElOVEVHUkFUT1JfU0NfQkFTRSArIElOVEVHUkFUT1JfU0NfQ1RSTFNfT0ZGU0VUKQorI2RlZmluZSBJTlRFR1JBVE9SX1NDX0NUUkxDICAgICAgICAgICAgIChJTlRFR1JBVE9SX1NDX0JBU0UgKyBJTlRFR1JBVE9SX1NDX0NUUkxDX09GRlNFVCkKKyNkZWZpbmUgSU5URUdSQVRPUl9TQ19ERUMgICAgICAgICAgICAgICAoSU5URUdSQVRPUl9TQ19CQVNFICsgSU5URUdSQVRPUl9TQ19ERUNfT0ZGU0VUKQorI2RlZmluZSBJTlRFR1JBVE9SX1NDX0FSQiAgICAgICAgICAgICAgIChJTlRFR1JBVE9SX1NDX0JBU0UgKyBJTlRFR1JBVE9SX1NDX0FSQl9PRkZTRVQpCisjZGVmaW5lIElOVEVHUkFUT1JfU0NfUENJRU5BQkxFICAgICAgICAgKElOVEVHUkFUT1JfU0NfQkFTRSArIElOVEVHUkFUT1JfU0NfUENJRU5BQkxFX09GRlNFVCkKKyNkZWZpbmUgSU5URUdSQVRPUl9TQ19MT0NLICAgICAgICAgICAgICAoSU5URUdSQVRPUl9TQ19CQVNFICsgSU5URUdSQVRPUl9TQ19MT0NLX09GRlNFVCkKKworI2RlZmluZSBJTlRFR1JBVE9SX1NDX09TQ19TWVNfMTBNSHogICAgIDB4MjAKKyNkZWZpbmUgSU5URUdSQVRPUl9TQ19PU0NfU1lTXzE1TUh6ICAgICAweDM0CisjZGVmaW5lIElOVEVHUkFUT1JfU0NfT1NDX1NZU18yME1IeiAgICAgMHg0OAorI2RlZmluZSBJTlRFR1JBVE9SX1NDX09TQ19TWVNfMjVNSHogICAgIDB4NUMKKyNkZWZpbmUgSU5URUdSQVRPUl9TQ19PU0NfU1lTXzMzTUh6ICAgICAweDdDCisjZGVmaW5lIElOVEVHUkFUT1JfU0NfT1NDX1NZU19NQVNLICAgICAgMHhGRgorCisjZGVmaW5lIElOVEVHUkFUT1JfU0NfT1NDX1BDSV8yNU1IeiAgICAgMHgxMDAKKyNkZWZpbmUgSU5URUdSQVRPUl9TQ19PU0NfUENJXzMzTUh6ICAgICAweDAKKyNkZWZpbmUgSU5URUdSQVRPUl9TQ19PU0NfUENJX01BU0sgICAgICAweDEwMAorCisjZGVmaW5lIElOVEVHUkFUT1JfU0NfQ1RSTF9TT0ZUUlNUICAgICAgKDEgPDwgMCkKKyNkZWZpbmUgSU5URUdSQVRPUl9TQ19DVFJMX25GTFZQUEVOICAgICAoMSA8PCAxKQorI2RlZmluZSBJTlRFR1JBVE9SX1NDX0NUUkxfbkZMV1AgICAgICAgICgxIDw8IDIpCisjZGVmaW5lIElOVEVHUkFUT1JfU0NfQ1RSTF9VUlRTMCAgICAgICAgKDEgPDwgNCkKKyNkZWZpbmUgSU5URUdSQVRPUl9TQ19DVFJMX1VEVFIwICAgICAgICAoMSA8PCA1KQorI2RlZmluZSBJTlRFR1JBVE9SX1NDX0NUUkxfVVJUUzEgICAgICAgICgxIDw8IDYpCisjZGVmaW5lIElOVEVHUkFUT1JfU0NfQ1RSTF9VRFRSMSAgICAgICAgKDEgPDwgNykKKworLyogCisgKiAgRXh0ZXJuYWwgQnVzIEludGVyZmFjZQorICogCisgKi8KKyNkZWZpbmUgSU5URUdSQVRPUl9FQklfQkFTRSAgICAgICAgICAgICAweDEyMDAwMDAwIAorCisjZGVmaW5lIElOVEVHUkFUT1JfRUJJX0NTUjBfT0ZGU0VUICAgICAgMHgwMAorI2RlZmluZSBJTlRFR1JBVE9SX0VCSV9DU1IxX09GRlNFVCAgICAgIDB4MDQKKyNkZWZpbmUgSU5URUdSQVRPUl9FQklfQ1NSMl9PRkZTRVQgICAgICAweDA4CisjZGVmaW5lIElOVEVHUkFUT1JfRUJJX0NTUjNfT0ZGU0VUICAgICAgMHgwQworI2RlZmluZSBJTlRFR1JBVE9SX0VCSV9MT0NLX09GRlNFVCAgICAgIDB4MjAKKworI2RlZmluZSBJTlRFR1JBVE9SX0VCSV9DU1IwICAgICAgICAgICAgIChJTlRFR1JBVE9SX0VCSV9CQVNFICsgSU5URUdSQVRPUl9FQklfQ1NSMF9PRkZTRVQpCisjZGVmaW5lIElOVEVHUkFUT1JfRUJJX0NTUjEgICAgICAgICAgICAgKElOVEVHUkFUT1JfRUJJX0JBU0UgKyBJTlRFR1JBVE9SX0VCSV9DU1IxX09GRlNFVCkKKyNkZWZpbmUgSU5URUdSQVRPUl9FQklfQ1NSMiAgICAgICAgICAgICAoSU5URUdSQVRPUl9FQklfQkFTRSArIElOVEVHUkFUT1JfRUJJX0NTUjJfT0ZGU0VUKQorI2RlZmluZSBJTlRFR1JBVE9SX0VCSV9DU1IzICAgICAgICAgICAgIChJTlRFR1JBVE9SX0VCSV9CQVNFICsgSU5URUdSQVRPUl9FQklfQ1NSM19PRkZTRVQpCisjZGVmaW5lIElOVEVHUkFUT1JfRUJJX0xPQ0sgICAgICAgICAgICAgKElOVEVHUkFUT1JfRUJJX0JBU0UgKyBJTlRFR1JBVE9SX0VCSV9MT0NLX09GRlNFVCkKKworI2RlZmluZSBJTlRFR1JBVE9SX0VCSV84X0JJVCAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgSU5URUdSQVRPUl9FQklfMTZfQklUICAgICAgICAgICAweDAxCisjZGVmaW5lIElOVEVHUkFUT1JfRUJJXzMyX0JJVCAgICAgICAgICAgMHgwMgorI2RlZmluZSBJTlRFR1JBVE9SX0VCSV9XUklURV9FTkFCTEUgICAgIDB4MDQKKyNkZWZpbmUgSU5URUdSQVRPUl9FQklfU1lOQyAgICAgICAgICAgICAweDA4CisjZGVmaW5lIElOVEVHUkFUT1JfRUJJX1dTXzIgICAgICAgICAgICAgMHgwMAorI2RlZmluZSBJTlRFR1JBVE9SX0VCSV9XU18zICAgICAgICAgICAgIDB4MTAKKyNkZWZpbmUgSU5URUdSQVRPUl9FQklfV1NfNCAgICAgICAgICAgICAweDIwCisjZGVmaW5lIElOVEVHUkFUT1JfRUJJX1dTXzUgICAgICAgICAgICAgMHgzMAorI2RlZmluZSBJTlRFR1JBVE9SX0VCSV9XU182ICAgICAgICAgICAgIDB4NDAKKyNkZWZpbmUgSU5URUdSQVRPUl9FQklfV1NfNyAgICAgICAgICAgICAweDUwCisjZGVmaW5lIElOVEVHUkFUT1JfRUJJX1dTXzggICAgICAgICAgICAgMHg2MAorI2RlZmluZSBJTlRFR1JBVE9SX0VCSV9XU185ICAgICAgICAgICAgIDB4NzAKKyNkZWZpbmUgSU5URUdSQVRPUl9FQklfV1NfMTAgICAgICAgICAgICAweDgwCisjZGVmaW5lIElOVEVHUkFUT1JfRUJJX1dTXzExICAgICAgICAgICAgMHg5MAorI2RlZmluZSBJTlRFR1JBVE9SX0VCSV9XU18xMiAgICAgICAgICAgIDB4QTAKKyNkZWZpbmUgSU5URUdSQVRPUl9FQklfV1NfMTMgICAgICAgICAgICAweEIwCisjZGVmaW5lIElOVEVHUkFUT1JfRUJJX1dTXzE0ICAgICAgICAgICAgMHhDMAorI2RlZmluZSBJTlRFR1JBVE9SX0VCSV9XU18xNSAgICAgICAgICAgIDB4RDAKKyNkZWZpbmUgSU5URUdSQVRPUl9FQklfV1NfMTYgICAgICAgICAgICAweEUwCisjZGVmaW5lIElOVEVHUkFUT1JfRUJJX1dTXzE3ICAgICAgICAgICAgMHhGMAorCisKKyNkZWZpbmUgSU5URUdSQVRPUl9DVF9CQVNFICAgICAgICAgICAgICAweDEzMDAwMDAwCSAvKiAgQ291bnRlci9UaW1lcnMgKi8KKyNkZWZpbmUgSU5URUdSQVRPUl9JQ19CQVNFICAgICAgICAgICAgICAweDE0MDAwMDAwCSAvKiAgSW50ZXJydXB0IENvbnRyb2xsZXIgKi8KKyNkZWZpbmUgSU5URUdSQVRPUl9SVENfQkFTRSAgICAgICAgICAgICAweDE1MDAwMDAwCSAvKiAgUmVhbCBUaW1lIENsb2NrICovCisjZGVmaW5lIElOVEVHUkFUT1JfVUFSVDBfQkFTRSAgICAgICAgICAgMHgxNjAwMDAwMAkgLyogIFVBUlQgMCAqLworI2RlZmluZSBJTlRFR1JBVE9SX1VBUlQxX0JBU0UgICAgICAgICAgIDB4MTcwMDAwMDAJIC8qICBVQVJUIDEgKi8KKyNkZWZpbmUgSU5URUdSQVRPUl9LQkRfQkFTRSAgICAgICAgICAgICAweDE4MDAwMDAwCSAvKiAgS2V5Ym9hcmQgKi8KKyNkZWZpbmUgSU5URUdSQVRPUl9NT1VTRV9CQVNFICAgICAgICAgICAweDE5MDAwMDAwCSAvKiAgTW91c2UgKi8KKworLyogCisgKiAgTEVEJ3MgJiBTd2l0Y2hlcworICogCisgKi8KKyNkZWZpbmUgSU5URUdSQVRPUl9EQkdfQUxQSEFfT0ZGU0VUICAgICAweDAwCisjZGVmaW5lIElOVEVHUkFUT1JfREJHX0xFRFNfT0ZGU0VUICAgICAgMHgwNAorI2RlZmluZSBJTlRFR1JBVE9SX0RCR19TV0lUQ0hfT0ZGU0VUICAgIDB4MDgKKworI2RlZmluZSBJTlRFR1JBVE9SX0RCR19CQVNFICAgICAgICAgICAgIDB4MUEwMDAwMDAKKyNkZWZpbmUgSU5URUdSQVRPUl9EQkdfQUxQSEEgICAgICAgICAgICAoSU5URUdSQVRPUl9EQkdfQkFTRSArIElOVEVHUkFUT1JfREJHX0FMUEhBX09GRlNFVCkKKyNkZWZpbmUgSU5URUdSQVRPUl9EQkdfTEVEUyAgICAgICAgICAgICAoSU5URUdSQVRPUl9EQkdfQkFTRSArIElOVEVHUkFUT1JfREJHX0xFRFNfT0ZGU0VUKQorI2RlZmluZSBJTlRFR1JBVE9SX0RCR19TV0lUQ0ggICAgICAgICAgIChJTlRFR1JBVE9SX0RCR19CQVNFICsgSU5URUdSQVRPUl9EQkdfU1dJVENIX09GRlNFVCkKKworCisjZGVmaW5lIElOVEVHUkFUT1JfR1BJT19CQVNFICAgICAgICAgICAgMHgxQjAwMDAwMAkgLyogIEdQSU8gKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgS01JIGtleWJvYXJkL21vdXNlIGRlZmluaXRpb25zCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworLyogUFMyIEtleWJvYXJkIGludGVyZmFjZSAqLworI2RlZmluZSBLTUkwX0JBU0UgICAgICAgICAgICAgICAgICAgICAgIElOVEVHUkFUT1JfS0JEX0JBU0UJCQorCisvKiBQUzIgTW91c2UgaW50ZXJmYWNlICovCisjZGVmaW5lIEtNSTFfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgSU5URUdSQVRPUl9NT1VTRV9CQVNFCisKKy8qIEtNSSBkZWZpbml0aW9ucyBhcmUgbm93IGluIGluY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9hbWJhX2ttaS5oIC0tIHJtayAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBXaGVyZSBpbiB0aGUgbWVtb3J5IG1hcCBkb2VzIFBDSSBsaXZlPworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgVGhpcyByZXByZXNlbnRzIGEgZmFpcmx5IGxpYmVyYWwgdXNhZ2Ugb2YgYWRkcmVzcyBzcGFjZS4gIEV2ZW4gdGhvdWdoCisgKiAgdGhlIFYzIG9ubHkgaGFzIHR3byB3aW5kb3dzICh0aGVyZWZvcmUgd2UgbmVlZCB0byBtYXAgc3R1ZmYgb24gdGhlIGZseSksCisgKiAgd2UgbWFpbnRhaW4gdGhlIHNhbWUgYWRkcmVzc2VzLCBldmVuIGlmIHRoZXkncmUgbm90IG1hcHBlZC4KKyAqIAorICovCisjZGVmaW5lIFBIWVNfUENJX01FTV9CQVNFICAgICAgICAgICAgICAgMHg0MDAwMDAwMCAgIC8qIDUxMk0gdG8geHh4ICovCisvKiAgdW51c2VkIDI1Nk0gZnJvbSBBMDAwMDAwMC1BRkZGRkZGRiBtaWdodCBiZSB1c2VkIGZvciBJMk8gPz8/CisgKi8KKyNkZWZpbmUgUEhZU19QQ0lfSU9fQkFTRSAgICAgICAgICAgICAgICAweDYwMDAwMDAwICAgLyogMTZNIHRvIHh4eCAqLworLyogIHVudXNlZCAoMTI4LTE2KU0gZnJvbSBCMTAwMDAwMC1CN0ZGRkZGRgorICovCisjZGVmaW5lIFBIWVNfUENJX0NPTkZJR19CQVNFICAgICAgICAgICAgMHg2MTAwMDAwMCAgIC8qIDE2TSB0byB4eHggKi8KKy8qICB1bnVzZWQgKCgxMjgtMTYpTSAtIDY0SykgZnJvbSBYWFgKKyAqLworI2RlZmluZSBQSFlTX1BDSV9WM19CQVNFICAgICAgICAgICAgICAgIDB4NjIwMDAwMDAKKworI2RlZmluZSBQQ0lfRFJBTVNJWkUgICAgICAgICAgICAgICAgICAgIElOVEVHUkFUT1JfU1NSQU1fU0laRQkKKworLyogJ2V4cG9ydCcgdGhlc2UgdG8gVUhBTCAqLworI2RlZmluZSBVSEFMX1BDSV9JTyAgICAgICAgICAgICAgICAgICAgIFBDSV9JT19CQVNFCisjZGVmaW5lIFVIQUxfUENJX01FTSAgICAgICAgICAgICAgICAgICAgUENJX01FTV9CQVNFCisjZGVmaW5lIFVIQUxfUENJX0FMTE9DX0lPX0JBU0UgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBVSEFMX1BDSV9BTExPQ19NRU1fQkFTRSAgICAgICAgIFBDSV9NRU1fQkFTRQorI2RlZmluZSBVSEFMX1BDSV9NQVhfU0xPVCAgICAgICAgICAgICAgIDIwCisJCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICBTdGFydCBvZiB1SEFMIGRlZmluaXRpb25zCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBJbnRlZ3JhdG9yIEludGVycnVwdCBDb250cm9sbGVycworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAKKyAqICBPZmZzZXRzIGZyb20gaW50ZXJydXB0IGNvbnRyb2xsZXIgYmFzZSAKKyAqIAorICogIFN5c3RlbSBDb250cm9sbGVyIGludGVycnVwdCBjb250cm9sbGVyIGJhc2UgaXMKKyAqIAorICogCUlOVEVHUkFUT1JfSUNfQkFTRSArIChoZWFkZXJfbnVtYmVyIDw8IDYpCisgKiAKKyAqICBDb3JlIE1vZHVsZSBpbnRlcnJ1cHQgY29udHJvbGxlciBiYXNlIGlzCisgKiAKKyAqIAlJTlRFR1JBVE9SX0hEUl9JQyAKKyAqIAorICovCisjZGVmaW5lIElSUV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBJUlFfUkFXX1NUQVRVUyAgICAgICAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgSVJRX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAweDA4CisjZGVmaW5lIElSUV9FTkFCTEVfU0VUICAgICAgICAgICAgICAgICAgMHgwOAorI2RlZmluZSBJUlFfRU5BQkxFX0NMRUFSICAgICAgICAgICAgICAgIDB4MEMKKworI2RlZmluZSBJTlRfU09GVF9TRVQgICAgICAgICAgICAgICAgICAgIDB4MTAKKyNkZWZpbmUgSU5UX1NPRlRfQ0xFQVIgICAgICAgICAgICAgICAgICAweDE0CisKKyNkZWZpbmUgRklRX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAweDIwCisjZGVmaW5lIEZJUV9SQVdfU1RBVFVTICAgICAgICAgICAgICAgICAgMHgyNAorI2RlZmluZSBGSVFfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgIDB4MjgKKyNkZWZpbmUgRklRX0VOQUJMRV9TRVQgICAgICAgICAgICAgICAgICAweDI4CisjZGVmaW5lIEZJUV9FTkFCTEVfQ0xFQVIgICAgICAgICAgICAgICAgMHgyQworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIEludGVycnVwdHMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogCisgKiAgCisgKiAgRWFjaCBDb3JlIE1vZHVsZSBoYXMgdHdvIGludGVycnVwdHMgY29udHJvbGxlcnMsIG9uZSBvbiB0aGUgY29yZSBtb2R1bGUKKyAqICBpdHNlbGYgYW5kIG9uZSBpbiB0aGUgc3lzdGVtIGNvbnRyb2xsZXIgb24gdGhlIG1vdGhlcmJvYXJkLiAgVGhlCisgKiAgUkVBRF9JTlQgbWFjcm8gaW4gdGFyZ2V0LnMgcmVhZHMgYm90aCBpbnRlcnJ1cHQgY29udHJvbGxlcnMgYW5kIHJldHVybnMKKyAqICBhIDMyIGJpdCBiaXRtYXNrLCBiaXRzIDAgdG8gMjMgYXJlIGludGVycnVwdHMgZnJvbSB0aGUgc3lzdGVtIGNvbnRyb2xsZXIKKyAqICBhbmQgYml0cyAyNCB0byAzMSBhcmUgZnJvbSB0aGUgY29yZSBtb2R1bGUuCisgKiAgCisgKiAgVGhlIGZvbGxvd2luZyBkZWZpbml0aW9ucyByZWxhdGUgdG8gdGhlIGJpdG1hc2sgcmV0dXJuZWQgYnkgUkVBRF9JTlQuCisgKiAKKyAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBMRUQncyAtIFRoZSBoZWFkZXIgTEVEIGlzIG5vdCBhY2Nlc3NpYmxlIHZpYSB0aGUgdUhBTCBBUEkKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogCisgKi8KKyNkZWZpbmUgR1JFRU5fTEVEICAgICAgICAgICAgICAgICAgICAgICAweDAxCisjZGVmaW5lIFlFTExPV19MRUQgICAgICAgICAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBSRURfTEVEICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgR1JFRU5fTEVEXzIgICAgICAgICAgICAgICAgICAgICAweDA4CisjZGVmaW5lIEFMTF9MRURTICAgICAgICAgICAgICAgICAgICAgICAgMHgwRgorCisjZGVmaW5lIExFRF9CQU5LICAgICAgICAgICAgICAgICAgICAgICAgSU5URUdSQVRPUl9EQkdfTEVEUworCisvKiAKKyAqICBNZW1vcnkgZGVmaW5pdGlvbnMgLSBydW4gdUhBTCBvdXQgb2YgU1NSQU0uCisgKiAKKyAqLworI2RlZmluZSB1SEFMX01FTU9SWV9TSVpFICAgICAgICAgICAgICAgIElOVEVHUkFUT1JfU1NSQU1fU0laRQorCisvKiAKKyAqICBBcHBsaWNhdGlvbiBGbGFzaAorICogCisgKi8KKyNkZWZpbmUgRkxBU0hfQkFTRSAgICAgICAgICAgICAgICAgICAgICBJTlRFR1JBVE9SX0ZMQVNIX0JBU0UKKyNkZWZpbmUgRkxBU0hfU0laRSAgICAgICAgICAgICAgICAgICAgICBJTlRFR1JBVE9SX0ZMQVNIX1NJWkUKKyNkZWZpbmUgRkxBU0hfRU5EICAgICAgICAgICAgICAgICAgICAgICAoRkxBU0hfQkFTRSArIEZMQVNIX1NJWkUgLSAxKQorI2RlZmluZSBGTEFTSF9CTE9DS19TSVpFICAgICAgICAgICAgICAgIFNaXzEyOEsKKworLyogCisgKiAgQm9vdCBGbGFzaAorICogCisgKi8KKyNkZWZpbmUgRVBST01fQkFTRSAgICAgICAgICAgICAgICAgICAgICBJTlRFR1JBVE9SX0JPT1RfUk9NX0hJCisjZGVmaW5lIEVQUk9NX1NJWkUgICAgICAgICAgICAgICAgICAgICAgSU5URUdSQVRPUl9CT09UX1JPTV9TSVpFCisjZGVmaW5lIEVQUk9NX0VORCAgICAgICAgICAgICAgICAgICAgICAgKEVQUk9NX0JBU0UgKyBFUFJPTV9TSVpFIC0gMSkKKworLyogCisgKiAgQ2xlYW4gYmFzZSAtIGR1bW15CisgKiAKKyAqLworI2RlZmluZSBDTEVBTl9CQVNFICAgICAgICAgICAgICAgICAgICAgIEVQUk9NX0JBU0UKKworLyogCisgKiAgVGltZXIgZGVmaW5pdGlvbnMKKyAqIAorICogIE9ubHkgdXNlIHRpbWVyIDEgJiAyCisgKiAgKGJvdGggcnVuIGF0IDI0TUh6IGFuZCB3aWxsIG5lZWQgdGhlIGNsb2NrIGRpdmlkZXIgc2V0IHRvIDE2KS4KKyAqIAorICogIFRpbWVyIDAgcnVucyBhdCBidXMgZnJlcXVlbmN5IGFuZCB0aGVyZWZvcmUgY291bGQgdmFyeSBhbmQgY3VycmVudGx5CisgKiAgdUhBTCBjYW4ndCBoYW5kbGUgdGhhdC4KKyAqIAorICovCisKKyNkZWZpbmUgSU5URUdSQVRPUl9USU1FUjBfQkFTRSAgICAgICAgICBJTlRFR1JBVE9SX0NUX0JBU0UKKyNkZWZpbmUgSU5URUdSQVRPUl9USU1FUjFfQkFTRSAgICAgICAgICAoSU5URUdSQVRPUl9DVF9CQVNFICsgMHgxMDApCisjZGVmaW5lIElOVEVHUkFUT1JfVElNRVIyX0JBU0UgICAgICAgICAgKElOVEVHUkFUT1JfQ1RfQkFTRSArIDB4MjAwKQorCisjZGVmaW5lIE1BWF9USU1FUiAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBNQVhfUEVSSU9EICAgICAgICAgICAgICAgICAgICAgIDY5OTA1MAorI2RlZmluZSBUSUNLU19QRVJfdVNFQyAgICAgICAgICAgICAgICAgIDI0CisKKy8qIAorICogIFRoZXNlIGFyZSB1c2Vjb25kcyBOT1QgdGlja3MuICAKKyAqIAorICovCisjZGVmaW5lIG1TRUNfMSAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwMAorI2RlZmluZSBtU0VDXzUgICAgICAgICAgICAgICAgICAgICAgICAgIChtU0VDXzEgKiA1KQorI2RlZmluZSBtU0VDXzEwICAgICAgICAgICAgICAgICAgICAgICAgIChtU0VDXzEgKiAxMCkKKyNkZWZpbmUgbVNFQ18yNSAgICAgICAgICAgICAgICAgICAgICAgICAobVNFQ18xICogMjUpCisjZGVmaW5lIFNFQ18xICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1TRUNfMSAqIDEwMDApCisKKyNkZWZpbmUgSU5URUdSQVRPUl9DU1JfQkFTRSAgICAgICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIElOVEVHUkFUT1JfQ1NSX1NJWkUgICAgICAgICAgICAgMHgxMDAwMDAwMAorCisjZW5kaWYKKworLyogCUVORCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW50ZWdyYXRvci9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWludGVncmF0b3Ivc3lzdGVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVhNDQyMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWludGVncmF0b3Ivc3lzdGVtLmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbnRlZ3JhdG9yL3N5c3RlbS5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5OSBBUk0gTGltaXRlZAorICogIENvcHlyaWdodCAoQykgMjAwMCBEZWVwIEJsdWUgU29sdXRpb25zIEx0ZAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworI2lmbmRlZiBfX0FTTV9BUkNIX1NZU1RFTV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfU1lTVEVNX0gKKworI2luY2x1ZGUgPGFzbS9hcmNoL2NtLmg+CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2lkbGUodm9pZCkKK3sKKwkvKgorCSAqIFRoaXMgc2hvdWxkIGRvIGFsbCB0aGUgY2xvY2sgc3dpdGNoaW5nCisJICogYW5kIHdhaXQgZm9yIGludGVycnVwdCB0cmlja3MKKwkgKi8KKwljcHVfZG9faWRsZSgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUpCit7CisJLyoKKwkgKiBUbyByZXNldCwgd2UgaGl0IHRoZSBvbi1ib2FyZCByZXNldCByZWdpc3RlcgorCSAqIGluIHRoZSBzeXN0ZW0gRlBHQQorCSAqLworCWNtX2NvbnRyb2woQ01fQ1RSTF9SRVNFVCwgQ01fQ1RSTF9SRVNFVCk7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW50ZWdyYXRvci90aW1leC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW50ZWdyYXRvci90aW1leC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3YTc2MjgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbnRlZ3JhdG9yL3RpbWV4LmgKQEAgLTAsMCArMSwyNiBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbnRlZ3JhdG9yL3RpbWV4LmgKKyAqCisgKiAgSW50ZWdyYXRvciBhcmNoaXRlY3R1cmUgdGltZXggc3BlY2lmaWNhdGlvbnMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5IEFSTSBMaW1pdGVkCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKy8qCisgKiA/PworICovCisjZGVmaW5lIENMT0NLX1RJQ0tfUkFURQkJKDUwMDAwMDAwIC8gMTYpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbnRlZ3JhdG9yL3VuY29tcHJlc3MuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWludGVncmF0b3IvdW5jb21wcmVzcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5NTc0MDIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbnRlZ3JhdG9yL3VuY29tcHJlc3MuaApAQCAtMCwwICsxLDUzIEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWludGVncmF0b3IvdW5jb21wcmVzcy5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5OSBBUk0gTGltaXRlZAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjZGVmaW5lIEFNQkFfVUFSVF9EUgkoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopMHgxNjAwMDAwMCkKKyNkZWZpbmUgQU1CQV9VQVJUX0xDUkgJKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKTB4MTYwMDAwMDgpCisjZGVmaW5lIEFNQkFfVUFSVF9MQ1JNCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikweDE2MDAwMDBjKQorI2RlZmluZSBBTUJBX1VBUlRfTENSTAkoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopMHgxNjAwMDAxMCkKKyNkZWZpbmUgQU1CQV9VQVJUX0NSCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikweDE2MDAwMDE0KQorI2RlZmluZSBBTUJBX1VBUlRfRlIJKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKTB4MTYwMDAwMTgpCisKKy8qCisgKiBUaGlzIGRvZXMgbm90IGFwcGVuZCBhIG5ld2xpbmUKKyAqLworc3RhdGljIHZvaWQgcHV0c3RyKGNvbnN0IGNoYXIgKnMpCit7CisJd2hpbGUgKCpzKSB7CisJCXdoaWxlIChBTUJBX1VBUlRfRlIgJiAoMSA8PCA1KSk7CisKKwkJQU1CQV9VQVJUX0RSID0gKnM7CisKKwkJaWYgKCpzID09ICdcbicpIHsKKwkJCXdoaWxlIChBTUJBX1VBUlRfRlIgJiAoMSA8PCA1KSk7CisKKwkJCUFNQkFfVUFSVF9EUiA9ICdccic7CisJCX0KKwkJcysrOworCX0KKwl3aGlsZSAoQU1CQV9VQVJUX0ZSICYgKDEgPDwgMykpOworfQorCisvKgorICogbm90aGluZyB0byBkbworICovCisjZGVmaW5lIGFyY2hfZGVjb21wX3NldHVwKCkKKworI2RlZmluZSBhcmNoX2RlY29tcF93ZG9nKCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWludGVncmF0b3Ivdm1hbGxvYy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW50ZWdyYXRvci92bWFsbG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBlOWFlZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWludGVncmF0b3Ivdm1hbGxvYy5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW50ZWdyYXRvci92bWFsbG9jLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwIFJ1c3NlbGwgS2luZy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworLyoKKyAqIEp1c3QgYW55IGFyYml0cmFyeSBvZmZzZXQgdG8gdGhlIHN0YXJ0IG9mIHRoZSB2bWFsbG9jIFZNIGFyZWE6IHRoZQorICogY3VycmVudCA4TUIgdmFsdWUganVzdCBtZWFucyB0aGF0IHRoZXJlIHdpbGwgYmUgYSA4TUIgImhvbGUiIGFmdGVyIHRoZQorICogcGh5c2ljYWwgbWVtb3J5IHVudGlsIHRoZSBrZXJuZWwgdmlydHVhbCBtZW1vcnkgc3RhcnRzLiAgVGhhdCBtZWFucyB0aGF0CisgKiBhbnkgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgd2lsbCBob3BlZnVsbHkgYmUgY2F1Z2h0LgorICogVGhlIHZtYWxsb2MoKSByb3V0aW5lcyBsZWF2ZXMgYSBob2xlIG9mIDRrQiBiZXR3ZWVuIGVhY2ggdm1hbGxvY2VkCisgKiBhcmVhIGZvciB0aGUgc2FtZSByZWFzb24uIDspCisgKi8KKyNkZWZpbmUgVk1BTExPQ19PRkZTRVQJICAoOCoxMDI0KjEwMjQpCisjZGVmaW5lIFZNQUxMT0NfU1RBUlQJICAoKCh1bnNpZ25lZCBsb25nKWhpZ2hfbWVtb3J5ICsgVk1BTExPQ19PRkZTRVQpICYgfihWTUFMTE9DX09GRlNFVC0xKSkKKyNkZWZpbmUgVk1BTExPQ19FTkQgICAgICAgKFBBR0VfT0ZGU0VUICsgMHgxMDAwMDAwMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC9kZWJ1Zy1tYWNyby5TIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L2RlYnVnLW1hY3JvLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2MxNWY4MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC9kZWJ1Zy1tYWNyby5TCkBAIC0wLDAgKzEsNDggQEAKKy8qIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC9kZWJ1Zy1tYWNyby5TCisgKgorICogRGVidWdnaW5nIG1hY3JvIGluY2x1ZGUgaGVhZGVyCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NC0xOTk5IFJ1c3NlbGwgS2luZworICogIE1vdmVkIGZyb20gbGludXgvYXJjaC9hcm0va2VybmVsL2RlYnVnLlMgYnkgQmVuIERvb2tzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisqLworCisJCS5tYWNybwlhZGRydWFydCxyeAorCQltb3YJXHJ4LCAjMHhmZTAwMDAwMAlAIHBoeXNpY2FsCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9JUTgwMzIxKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX0lRMzEyNDQpCisJCW9ycglccngsIFxyeCwgIzB4MDA4MDAwMDAJQCBsb2NhdGlvbiBvZiB0aGUgVUFSVAorI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9JT1AzMzEpCisJCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCisJCXRzdAlccngsICMxCQkJQCBNTVUgZW5hYmxlZD8KKwkJbW92ZXEJXHJ4LCAjMHgwMDBmZTAwMAlAIFBoeXNpY2FsIEJhc2UKKwkJbW92bmUJXHJ4LCAjMAorCQlvcnIJXHJ4LCBccngsICMweGZlMDAwMDAwCisJCW9ycglccngsIFxyeCwgIzB4MDBmMDAwMDAJQCBWaXJ0dWFsIEJhc2UKKwkJb3JyCVxyeCwgXHJ4LCAjMHgwMDAwMTcwMCAgIEAgbG9jYXRpb24gb2YgdGhlIFVBUlQKKyNlbHNlCisjZXJyb3IgVW5rbm93biBJT1AzWFggaW1wbGVtZW50YXRpb24KKyNlbmRpZgorCQkuZW5kbQorCisJCS5tYWNybwlzZW5kdWFydCxyZCxyeAorCQlzdHJiCVxyZCwgW1xyeF0KKwkJLmVuZG0KKworCQkubWFjcm8JYnVzeXVhcnQscmQscngKKzEwMDI6CQlsZHJiCVxyZCwgW1xyeCwgIzB4NV0KKwkJYW5kCVxyZCwgXHJkLCAjMHg2MAorCQl0ZXEJXHJkLCAjMHg2MAorCQlibmUJMTAwMmIKKwkJLmVuZG0KKworCQkubWFjcm8Jd2FpdHVhcnQscmQscngKKyNpZiAhZGVmaW5lZChDT05GSUdfQVJDSF9JUTgwMzIxKSB8fCAhZGVmaW5lZChDT05GSUdfQVJDSF9JUTMxMjQ0KSB8fCAhZGVmaW5lZChDT05GSUdfQVJDSF9JUTgwMzMxKQorMTAwMToJCWxkcmIJXHJkLCBbXHJ4LCAjMHg2XQorCQl0c3QJXHJkLCAjMHgxMAorCQliZXEJMTAwMWIKKyNlbmRpZgorCQkuZW5kbQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L2RtYS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L2RtYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5N2Y5ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvZG1hLmgKQEAgLTAsMCArMSwxNiBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC9kbWEuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQgSW50ZWwgQ29ycC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX0lPUDNYWF9ETUFfSF9QCisjZGVmaW5lIF9JT1AzWFhfRE1BX0hfUAorCisjZGVmaW5lIE1BWF9ETUFfQUREUkVTUwkJMHhmZmZmZmZmZgorCisjZW5kaWYgLyogX0FTTV9BUkNIX0RNQV9IX1AgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC9lbnRyeS1tYWNyby5TIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L2VudHJ5LW1hY3JvLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJjZTdmNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC9lbnRyeS1tYWNyby5TCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvZW50cnktbWFjcm8uUworICoKKyAqIExvdy1sZXZlbCBJUlEgaGVscGVyIG1hY3JvcyBmb3IgSU9QM3h4LWJhc2VkIHBsYXRmb3JtcworICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX0lPUDMyMSkKKwkJLm1hY3JvICBkaXNhYmxlX2ZpcQorCQkuZW5kbQorCisJCS8qCisJCSAqIE5vdGU6IG9ubHkgZGVhbCB3aXRoIG5vcm1hbCBpbnRlcnJ1cHRzLCBub3QgRklRCisJCSAqLworCQkubWFjcm8gIGdldF9pcnFucl9hbmRfYmFzZSwgaXJxbnIsIGlycXN0YXQsIGJhc2UsIHRtcAorCQltb3YgICAgIFxpcnFuciwgIzAKKwkJbXJjICAgICBwNiwgMCwgXGlycXN0YXQsIGM4LCBjMCwgMCAgICAgIEAgUmVhZCBJSU5UU1JDCisJCWNtcCAgICAgXGlycXN0YXQsICMwCisJCWJlcSAgICAgMTAwMWYKKwkJY2x6ICAgICBcaXJxbnIsIFxpcnFzdGF0CisJCW1vdiAgICAgXGJhc2UsICMzMQorCQlzdWJzICAgIFxpcnFucixcYmFzZSxcaXJxbnIKKwkJYWRkICAgICBcaXJxbnIsXGlycW5yLCNJUlFfSU9QMzIxX0RNQTBfRU9UCisxMDAxOgorCQkuZW5kbQorCisjZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX0lPUDMzMSkKKwkJLm1hY3JvICBkaXNhYmxlX2ZpcQorCQkuZW5kbQorCisJCS8qCisJCSAqIE5vdGU6IG9ubHkgZGVhbCB3aXRoIG5vcm1hbCBpbnRlcnJ1cHRzLCBub3QgRklRCisJCSAqLworCQkubWFjcm8gIGdldF9pcnFucl9hbmRfYmFzZSwgaXJxbnIsIGlycXN0YXQsIGJhc2UsIHRtcAorCQltb3YgICAgIFxpcnFuciwgIzAKKwkJbXJjICAgICBwNiwgMCwgXGlycXN0YXQsIGM0LCBjMCwgMCAgICAgIEAgUmVhZCBJSU5UU1JDMAorCQljbXAgICAgIFxpcnFzdGF0LCAjMAorCQlibmUgICAgIDEwMDJmCisJCW1yYyAgICAgcDYsIDAsIFxpcnFzdGF0LCBjNSwgYzAsIDAgICAgICBAIFJlYWQgSUlOVFNSQzEKKwkJY21wCVxpcnFzdGF0LCAjMAorCQliZXEJMTAwMWYKKwkJY2x6CVxpcnFuciwgXGlycXN0YXQKKwkJcnNicyAgICBcaXJxbnIsXGlycW5yLCMzMSAgIEAgcmVjb21tZW5kIGJ5IFJNSworCQlhZGQJXGlycW5yLFxpcnFuciwjSVJRX0lPUDMzMV9YSU5UOAorCQliCTEwMDFmCisxMDAyOgljbHogICAgIFxpcnFuciwgXGlycXN0YXQKKwkJcnNicyAgICBcaXJxbnIsXGlycW5yLCMzMSAgIEAgcmVjb21tZW5kIGJ5IFJNSworCQlhZGQgICAgIFxpcnFucixcaXJxbnIsI0lSUV9JT1AzMzFfRE1BMF9FT1QKKzEwMDE6CisJCS5lbmRtCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvaGFyZHdhcmUuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC9oYXJkd2FyZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMTM4MTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvaGFyZHdhcmUuaApAQCAtMCwwICsxLDU3IEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L2hhcmR3YXJlLmgKKyAqLworI2lmbmRlZiBfX0FTTV9BUkNIX0hBUkRXQVJFX0gKKyNkZWZpbmUgX19BU01fQVJDSF9IQVJEV0FSRV9ICisKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKworLyoKKyAqIE5vdGUgYWJvdXQgUENJIElPIHNwYWNlIG1hcHBpbmdzCisgKgorICogVG8gbWFrZSBJTyBzcGFjZSBhY2Nlc3NlcyBlZmZpY2llbnQsIHdlIHN0b3JlIHZpcnR1YWwgYWRkcmVzc2VzIGluCisgKiB0aGUgSU8gcmVzb3VyY2VzLgorICoKKyAqIFRoZSBQQ0kgSU8gc3BhY2UgaXMgbG9jYXRlZCBhdCB2aXJ0dWFsIDB4ZmUwMDAwMDAgZnJvbSBwaHlzaWNhbAorICogMHg5MDAwMDAwMC4gIFRoZSBQQ0kgQkFScyBtdXN0IGJlIHByb2dyYW1tZWQgd2l0aCBwaHlzaWNhbCBhZGRyZXNzZXMsCisgKiBidXQgd2hlbiB3ZSByZWFkIHRoZW0sIHdlIGNvbnZlcnQgdGhlbSB0byB2aXJ0dWFsIGFkZHJlc3Nlcy4gIFNlZQorICogYXJjaC9hcm0vbWFjaC1pb3AzeHgvaW9wM3h4LXBjaS5jCisgKi8KKworI2RlZmluZSBwY2liaW9zX2Fzc2lnbl9hbGxfYnVzc2VzKCkgMQorCisKKy8qCisgKiBUaGUgbWluIFBDSSBJL08gYW5kIE1FTSBzcGFjZSBhcmUgZGVwZW5kZW50IG9uIHdoYXQgc3BlY2lmaWMKKyAqIGNoaXBzZXQvcGxhdGZvcm0gd2UgYXJlIHJ1bm5pbmcgb24sIHNvIGluc3RlYWQgb2YgaGFyZGNvZGluZyB3aXRoCisgKiAjaWZkZWZzLCB3ZSBqdXN0IGZpbGwgdGhlc2UgaW4gdGhlIHBsYXRmb3JtIGxldmVsIFBDSSBpbml0IGNvZGUuCisgKi8KKyNpZm5kZWYgX19BU1NFTUJMWV9fCitleHRlcm4gdW5zaWduZWQgbG9uZyBpb3AzeHhfcGNpYmlvc19taW5faW87CitleHRlcm4gdW5zaWduZWQgbG9uZyBpb3AzeHhfcGNpYmlvc19taW5fbWVtOworCitleHRlcm4gdW5zaWduZWQgaW50IHByb2Nlc3Nvcl9pZDsKKyNlbmRpZgorCisvKgorICogV2UganVzdCBzZXQgdGhlc2UgdG8gemVybyBzaW5jZSB0aGV5IGFyZSByZWFsbHkgYm9ndXMgYW55d2F5cworICovCisjZGVmaW5lIFBDSUJJT1NfTUlOX0lPICAgICAgKGlvcDN4eF9wY2liaW9zX21pbl9pbykKKyNkZWZpbmUgUENJQklPU19NSU5fTUVNICAgICAoaW9wM3h4X3BjaWJpb3NfbWluX21lbSkKKworLyoKKyAqIEdlbmVyaWMgY2hpcHNldCBiaXRzCisgKgorICovCisjaW5jbHVkZSAiaW9wMzIxLmgiCisjaW5jbHVkZSAiaW9wMzMxLmgiCisKKy8qCisgKiBCb2FyZCBzcGVjaWZpYyBiaXRzCisgKi8KKyNpbmNsdWRlICJpcTgwMzIxLmgiCisjaW5jbHVkZSAiaXEzMTI0NC5oIgorI2luY2x1ZGUgImlxODAzMzEuaCIKKyNpbmNsdWRlICJpcTgwMzMyLmgiCisKKyNlbmRpZiAgLyogX0FTTV9BUkNIX0hBUkRXQVJFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC9pby5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L2lvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc2MWRmZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC9pby5oCkBAIC0wLDAgKzEsMjAgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvaW8uaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEgIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19BU01fQVJNX0FSQ0hfSU9fSAorI2RlZmluZSBfX0FTTV9BUk1fQVJDSF9JT19ICisKKyNkZWZpbmUgSU9fU1BBQ0VfTElNSVQgMHhmZmZmZmZmZgorCisjZGVmaW5lIF9faW8ocCkJCQkoKHZvaWQgX19pb21lbSAqKShwKSkKKyNkZWZpbmUgX19tZW1fcGNpKGEpCQkoYSkKKyNkZWZpbmUgX19tZW1faXNhKGEpCQkoYSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvaW9wMzIxLWlycXMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC9pb3AzMjEtaXJxcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmY2MxNjUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvaW9wMzIxLWlycXMuaApAQCAtMCwwICsxLDEwMCBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC9pcnFzLmgKKyAqCisgKiBBdXRob3I6CVJvcnkgQm9sdCA8cm9yeWJvbHRAcGFjYmVsbC5uZXQ+CisgKiBDb3B5cmlnaHQ6CShDKSAyMDAyIFJvcnkgQm9sdAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisjaWZuZGVmIF9JT1AzMjFfSVJRU19IXworI2RlZmluZSBfSU9QMzIxX0lSUVNfSF8KKworLyoKKyAqIElPUDgwMzIxIGNoaXBzZXQgaW50ZXJydXB0cworICovCisjZGVmaW5lIElPUDMyMV9JUlFfT0ZTCQkwCisjZGVmaW5lIElPUDMyMV9JUlEoeCkJCShJT1AzMjFfSVJRX09GUyArICh4KSkKKworLyoKKyAqIE9uIElSUSBvciBGSVEgcmVnaXN0ZXIKKyAqLworI2RlZmluZSBJUlFfSU9QMzIxX0RNQTBfRU9UCUlPUDMyMV9JUlEoMCkKKyNkZWZpbmUgSVJRX0lPUDMyMV9ETUEwX0VPQwlJT1AzMjFfSVJRKDEpCisjZGVmaW5lIElSUV9JT1AzMjFfRE1BMV9FT1QJSU9QMzIxX0lSUSgyKQorI2RlZmluZSBJUlFfSU9QMzIxX0RNQTFfRU9DCUlPUDMyMV9JUlEoMykKKyNkZWZpbmUgSVJRX0lPUDMyMV9SU1ZEXzQJSU9QMzIxX0lSUSg0KQorI2RlZmluZSBJUlFfSU9QMzIxX1JTVkRfNQlJT1AzMjFfSVJRKDUpCisjZGVmaW5lIElSUV9JT1AzMjFfQUFfRU9UCUlPUDMyMV9JUlEoNikKKyNkZWZpbmUgSVJRX0lPUDMyMV9BQV9FT0MJSU9QMzIxX0lSUSg3KQorI2RlZmluZSBJUlFfSU9QMzIxX0NPUkVfUE1PTglJT1AzMjFfSVJRKDgpCisjZGVmaW5lIElSUV9JT1AzMjFfVElNRVIwCUlPUDMyMV9JUlEoOSkKKyNkZWZpbmUgSVJRX0lPUDMyMV9USU1FUjEJSU9QMzIxX0lSUSgxMCkKKyNkZWZpbmUgSVJRX0lPUDMyMV9JMkNfMAlJT1AzMjFfSVJRKDExKQorI2RlZmluZSBJUlFfSU9QMzIxX0kyQ18xCUlPUDMyMV9JUlEoMTIpCisjZGVmaW5lIElSUV9JT1AzMjFfTUVTU0FHSU5HCUlPUDMyMV9JUlEoMTMpCisjZGVmaW5lIElSUV9JT1AzMjFfQVRVX0JJU1QJSU9QMzIxX0lSUSgxNCkKKyNkZWZpbmUgSVJRX0lPUDMyMV9QRVJGTU9OCUlPUDMyMV9JUlEoMTUpCisjZGVmaW5lIElSUV9JT1AzMjFfQ09SRV9QTVUJSU9QMzIxX0lSUSgxNikKKyNkZWZpbmUgSVJRX0lPUDMyMV9CSVVfRVJSCUlPUDMyMV9JUlEoMTcpCisjZGVmaW5lIElSUV9JT1AzMjFfQVRVX0VSUglJT1AzMjFfSVJRKDE4KQorI2RlZmluZSBJUlFfSU9QMzIxX01DVV9FUlIJSU9QMzIxX0lSUSgxOSkKKyNkZWZpbmUgSVJRX0lPUDMyMV9ETUEwX0VSUglJT1AzMjFfSVJRKDIwKQorI2RlZmluZSBJUlFfSU9QMzIxX0RNQTFfRVJSCUlPUDMyMV9JUlEoMjEpCisjZGVmaW5lIElSUV9JT1AzMjFfUlNWRF8yMglJT1AzMjFfSVJRKDIyKQorI2RlZmluZSBJUlFfSU9QMzIxX0FBX0VSUglJT1AzMjFfSVJRKDIzKQorI2RlZmluZSBJUlFfSU9QMzIxX01TR19FUlIJSU9QMzIxX0lSUSgyNCkKKyNkZWZpbmUgSVJRX0lPUDMyMV9TU1AJCUlPUDMyMV9JUlEoMjUpCisjZGVmaW5lIElSUV9JT1AzMjFfUlNWRF8yNglJT1AzMjFfSVJRKDI2KQorI2RlZmluZSBJUlFfSU9QMzIxX1hJTlQwCUlPUDMyMV9JUlEoMjcpCisjZGVmaW5lIElSUV9JT1AzMjFfWElOVDEJSU9QMzIxX0lSUSgyOCkKKyNkZWZpbmUgSVJRX0lPUDMyMV9YSU5UMglJT1AzMjFfSVJRKDI5KQorI2RlZmluZSBJUlFfSU9QMzIxX1hJTlQzCUlPUDMyMV9JUlEoMzApCisjZGVmaW5lIElSUV9JT1AzMjFfSFBJCQlJT1AzMjFfSVJRKDMxKQorCisjZGVmaW5lIE5SX0lPUDMyMV9JUlFTCQkoSU9QMzIxX0lSUSgzMSkgKyAxKQorCisjZGVmaW5lIE5SX0lSUVMJCQlOUl9JT1AzMjFfSVJRUworCisKKy8qCisgKiBJbnRlcnJ1cHRzIGF2YWlsYWJsZSBvbiB0aGUgSVE4MDMyMSBib2FyZAorICovCisKKy8qCisgKiBPbiBib2FyZCBkZXZpY2VzCisgKi8KKyNkZWZpbmUJSVJRX0lRODAzMjFfSTgyNTQ0CUlSUV9JT1AzMjFfWElOVDAKKyNkZWZpbmUgSVJRX0lRODAzMjFfVUFSVAlJUlFfSU9QMzIxX1hJTlQxCisKKy8qCisgKiBQQ0kgaW50ZXJydXB0cworICovCisjZGVmaW5lCUlSUV9JUTgwMzIxX0lOVEEJSVJRX0lPUDMyMV9YSU5UMAorI2RlZmluZQlJUlFfSVE4MDMyMV9JTlRCCUlSUV9JT1AzMjFfWElOVDEKKyNkZWZpbmUJSVJRX0lRODAzMjFfSU5UQwlJUlFfSU9QMzIxX1hJTlQyCisjZGVmaW5lCUlSUV9JUTgwMzIxX0lOVEQJSVJRX0lPUDMyMV9YSU5UMworCisvKgorICogSW50ZXJydXB0cyBvbiB0aGUgSVEzMTI0NCBib2FyZAorICovCisKKy8qCisgKiBPbiBib2FyZCBkZXZpY2VzCisgKi8KKyNkZWZpbmUgSVJRX0lRMzEyNDRfVUFSVAlJUlFfSU9QMzIxX1hJTlQxCisjZGVmaW5lCUlSUV9JUTMxMjQ0X0k4MjU0NglJUlFfSU9QMzIxX1hJTlQwCisjZGVmaW5lIElSUV9JUTMxMjQ0X1NBVEEJSVJRX0lPUDMyMV9YSU5UMgorI2RlZmluZQlJUlFfSVEzMTI0NF9QQ0lYX1NMT1QJSVJRX0lPUDMyMV9YSU5UMworCisvKgorICogUENJIGludGVycnVwdHMKKyAqLworI2RlZmluZQlJUlFfSVEzMTI0NF9JTlRBCUlSUV9JT1AzMjFfWElOVDAKKyNkZWZpbmUJSVJRX0lRMzEyNDRfSU5UQglJUlFfSU9QMzIxX1hJTlQxCisjZGVmaW5lCUlSUV9JUTMxMjQ0X0lOVEMJSVJRX0lPUDMyMV9YSU5UMgorI2RlZmluZQlJUlFfSVEzMTI0NF9JTlRECUlSUV9JT1AzMjFfWElOVDMKKworI2VuZGlmIC8vIF9JT1AzMjFfSVJRX0hfCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvaW9wMzIxLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvaW9wMzIxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjAwNjIxZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC9pb3AzMjEuaApAQCAtMCwwICsxLDM0NSBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtL2FyY2gtaW9wM3h4L2lvcDMyMS5oCisgKgorICogSW50ZWwgSU9QMzIxIENoaXAgZGVmaW5pdGlvbnMKKyAqCisgKiBBdXRob3I6IFJvcnkgQm9sdCA8cm9yeWJvbHRAcGFjYmVsbC5uZXQ+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgUm9yeSBCb2x0CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgSW50ZWwgQ29ycC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX0lPUDMyMV9IV19IXworI2RlZmluZSBfSU9QMzIxX0hXX0hfCisKKworLyoKKyAqIFRoaXMgaXMgbmVlZGVkIGZvciBtaXhlZCBkcml2ZXJzIHRoYXQgbmVlZCB0byB3b3JrIG9uIGFsbAorICogSU9QM3h4IHZhcmlhbnRzIGJ1dCBiZWhhdmUgc2xpZ2h0bHkgZGlmZmVyZW50bHkgb24gZWFjaC4KKyAqLworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNpZmRlZglDT05GSUdfQVJDSF9JT1AzMjEKKyNkZWZpbmUgaW9wX2lzXzMyMSgpICgoKHByb2Nlc3Nvcl9pZCAmIDB4ZmZmZmY1ZTApID09IDB4NjkwNTI0MjApKQorI2Vsc2UKKyNkZWZpbmUJaW9wX2lzXzMyMSgpCTAKKyNlbmRpZgorI2VuZGlmCisKKy8qCisgKiBJT1AzMjEgSS9PIGFuZCBNZW0gc3BhY2UgcmVnaW9ucyBmb3IgUENJIGF1dG9jb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgSU9QMzIxX1BDSV9JT19XSU5ET1dfU0laRSAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgSU9QMzIxX1BDSV9MT1dFUl9JT19QQSAgICAgIDB4OTAwMDAwMDAKKyNkZWZpbmUgSU9QMzIxX1BDSV9MT1dFUl9JT19WQSAgICAgIDB4ZmUwMDAwMDAKKyNkZWZpbmUgSU9QMzIxX1BDSV9MT1dFUl9JT19CQSAgICAgICgqSU9QMzIxX09JT1dUVlIpCisjZGVmaW5lIElPUDMyMV9QQ0lfVVBQRVJfSU9fUEEgICAgICAoSU9QMzIxX1BDSV9MT1dFUl9JT19QQSArIElPUDMyMV9QQ0lfSU9fV0lORE9XX1NJWkUgLSAxKQorI2RlZmluZSBJT1AzMjFfUENJX1VQUEVSX0lPX1ZBICAgICAgKElPUDMyMV9QQ0lfTE9XRVJfSU9fVkEgKyBJT1AzMjFfUENJX0lPX1dJTkRPV19TSVpFIC0gMSkKKyNkZWZpbmUgSU9QMzIxX1BDSV9VUFBFUl9JT19CQSAgICAgIChJT1AzMjFfUENJX0xPV0VSX0lPX0JBICsgSU9QMzIxX1BDSV9JT19XSU5ET1dfU0laRSAtIDEpCisjZGVmaW5lIElPUDMyMV9QQ0lfSU9fT0ZGU0VUICAgICAgICAoSU9QMzIxX1BDSV9MT1dFUl9JT19WQSAtIElPUDMyMV9QQ0lfTE9XRVJfSU9fQkEpCisKKy8vI2RlZmluZSBJT1AzMjFfUENJX01FTV9XSU5ET1dfU0laRSAgKH4qSU9QMzIxX0lBTFIxICsgMSkKKyNkZWZpbmUgSU9QMzIxX1BDSV9NRU1fV0lORE9XX1NJWkUgIDB4MDQwMDAwMDAgLyogNjRNIG91dGJvdW5kIHdpbmRvdyAqLworI2RlZmluZSBJT1AzMjFfUENJX0xPV0VSX01FTV9QQSAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBJT1AzMjFfUENJX0xPV0VSX01FTV9CQSAgICAgKCpJT1AzMjFfT01XVFZSMCkKKyNkZWZpbmUgSU9QMzIxX1BDSV9VUFBFUl9NRU1fUEEgICAgIChJT1AzMjFfUENJX0xPV0VSX01FTV9QQSArIElPUDMyMV9QQ0lfTUVNX1dJTkRPV19TSVpFIC0gMSkKKyNkZWZpbmUgSU9QMzIxX1BDSV9VUFBFUl9NRU1fQkEgICAgIChJT1AzMjFfUENJX0xPV0VSX01FTV9CQSArIElPUDMyMV9QQ0lfTUVNX1dJTkRPV19TSVpFIC0gMSkKKyNkZWZpbmUgSU9QMzIxX1BDSV9NRU1fT0ZGU0VUICAgICAgIChJT1AzMjFfUENJX0xPV0VSX01FTV9QQSAtIElPUDMyMV9QQ0lfTE9XRVJfTUVNX0JBKQorCisKKy8qCisgKiBJT1AzMjEgY2hpcHNldCByZWdpc3RlcnMKKyAqLworI2RlZmluZSBJT1AzMjFfVklSVF9NRU1fQkFTRSAweGZlZmZlMDAwICAvKiBjaGlwIHZpcnR1YWwgbWVtIGFkZHJlc3MqLworI2RlZmluZSBJT1AzMjFfUEhZU19NRU1fQkFTRSAweGZmZmZlMDAwICAvKiBjaGlwIHBoeXNpY2FsIG1lbW9yeSBhZGRyZXNzICovCisjZGVmaW5lIElPUDMyMV9SRUdfQUREUihyZWcpIChJT1AzMjFfVklSVF9NRU1fQkFTRSB8IChyZWcpKQorCisvKiBSZXNlcnZlZCAweDAwMDAwMDAwIHRocm91Z2ggMHgwMDAwMDBGRiAqLworCisvKiBBZGRyZXNzIFRyYW5zbGF0aW9uIFVuaXQgMHgwMDAwMDEwMCB0aHJvdWdoIDB4MDAwMDAxRkYgKi8KKyNkZWZpbmUgSU9QMzIxX0FUVVZJRCAgICAgKHZvbGF0aWxlIHUxNiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwMTAwKQorI2RlZmluZSBJT1AzMjFfQVRVRElEICAgICAodm9sYXRpbGUgdTE2ICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDAxMDIpCisjZGVmaW5lIElPUDMyMV9BVFVDTUQgICAgICh2b2xhdGlsZSB1MTYgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDEwNCkKKyNkZWZpbmUgSU9QMzIxX0FUVVNSICAgICAgKHZvbGF0aWxlIHUxNiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwMTA2KQorI2RlZmluZSBJT1AzMjFfQVRVUklEICAgICAodm9sYXRpbGUgdTggICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDAxMDgpCisjZGVmaW5lIElPUDMyMV9BVFVDQ1IgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDEwOSkKKyNkZWZpbmUgSU9QMzIxX0FUVUNMU1IgICAgKHZvbGF0aWxlIHU4ICAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwMTBDKQorI2RlZmluZSBJT1AzMjFfQVRVTFQgICAgICAodm9sYXRpbGUgdTggICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDAxMEQpCisjZGVmaW5lIElPUDMyMV9BVFVIVFIgICAgICh2b2xhdGlsZSB1OCAgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDEwRSkKKyNkZWZpbmUgSU9QMzIxX0FUVUJJU1QgICAgKHZvbGF0aWxlIHU4ICAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwMTBGKQorI2RlZmluZSBJT1AzMjFfSUFCQVIwICAgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDAxMTApCisjZGVmaW5lIElPUDMyMV9JQVVCQVIwICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDExNCkKKyNkZWZpbmUgSU9QMzIxX0lBQkFSMSAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwMTE4KQorI2RlZmluZSBJT1AzMjFfSUFVQkFSMSAgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDAxMUMpCisjZGVmaW5lIElPUDMyMV9JQUJBUjIgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDEyMCkKKyNkZWZpbmUgSU9QMzIxX0lBVUJBUjIgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwMTI0KQorI2RlZmluZSBJT1AzMjFfQVNWSVIgICAgICAodm9sYXRpbGUgdTE2ICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDAxMkMpCisjZGVmaW5lIElPUDMyMV9BU0lSICAgICAgICh2b2xhdGlsZSB1MTYgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDEyRSkKKyNkZWZpbmUgSU9QMzIxX0VSQkFSICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwMTMwKQorLyogUmVzZXJ2ZWQgMHgwMDAwMDEzNCB0aHJvdWdoIDB4MDAwMDAxM0IgKi8KKyNkZWZpbmUgSU9QMzIxX0FUVUlMUiAgICAgKHZvbGF0aWxlIHU4ICAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwMTNDKQorI2RlZmluZSBJT1AzMjFfQVRVSVBSICAgICAodm9sYXRpbGUgdTggICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDAxM0QpCisjZGVmaW5lIElPUDMyMV9BVFVNR05UICAgICh2b2xhdGlsZSB1OCAgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDEzRSkKKyNkZWZpbmUgSU9QMzIxX0FUVU1MQVQgICAgKHZvbGF0aWxlIHU4ICAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwMTNGKQorI2RlZmluZSBJT1AzMjFfSUFMUjAgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDAxNDApCisjZGVmaW5lIElPUDMyMV9JQVRWUjAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDE0NCkKKyNkZWZpbmUgSU9QMzIxX0VSTFIgICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwMTQ4KQorI2RlZmluZSBJT1AzMjFfRVJUVlIgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDAxNEMpCisjZGVmaW5lIElPUDMyMV9JQUxSMSAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDE1MCkKKyNkZWZpbmUgSU9QMzIxX0lBTFIyICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwMTU0KQorI2RlZmluZSBJT1AzMjFfSUFUVlIyICAgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDAxNTgpCisjZGVmaW5lIElPUDMyMV9PSU9XVFZSICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDE1QykKKyNkZWZpbmUgSU9QMzIxX09NV1RWUjAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwMTYwKQorI2RlZmluZSBJT1AzMjFfT1VNV1RWUjAgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDAxNjQpCisjZGVmaW5lIElPUDMyMV9PTVdUVlIxICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDE2OCkKKyNkZWZpbmUgSU9QMzIxX09VTVdUVlIxICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwMTZDKQorLyogUmVzZXJ2ZWQgMHgwMDAwMDE3MCB0aHJvdWdoIDB4MDAwMDAxNzcqLworI2RlZmluZSBJT1AzMjFfT1VEV1RWUiAgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDAxNzgpCisvKiBSZXNlcnZlZCAweDAwMDAwMTdDIHRocm91Z2ggMHgwMDAwMDE3RiovCisjZGVmaW5lIElPUDMyMV9BVFVDUiAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDE4MCkKKyNkZWZpbmUgSU9QMzIxX1BDU1IgICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwMTg0KQorI2RlZmluZSBJT1AzMjFfQVRVSVNSICAgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDAxODgpCisjZGVmaW5lIElPUDMyMV9BVFVJTVIgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDE4QykKKyNkZWZpbmUgSU9QMzIxX0lBQkFSMyAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwMTkwKQorI2RlZmluZSBJT1AzMjFfSUFVQkFSMyAgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDAxOTQpCisjZGVmaW5lIElPUDMyMV9JQUxSMyAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDE5OCkKKyNkZWZpbmUgSU9QMzIxX0lBVFZSMyAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwMTlDKQorLyogUmVzZXJ2ZWQgMHgwMDAwMDFBMCB0aHJvdWdoIDB4MDAwMDAxQTMqLworI2RlZmluZSBJT1AzMjFfT0NDQVIgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDAxQTQpCisvKiBSZXNlcnZlZCAweDAwMDAwMUE4IHRocm91Z2ggMHgwMDAwMDFBQiovCisjZGVmaW5lIElPUDMyMV9PQ0NEUiAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDFBQykKKy8qIFJlc2VydmVkIDB4MDAwMDAxQjAgdGhyb3VnaCAweDAwMDAwMUJCKi8KKyNkZWZpbmUgSU9QMzIxX1BEU0NSICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwMUJDKQorI2RlZmluZSBJT1AzMjFfUE1DQVBJRCAgICAodm9sYXRpbGUgdTggICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDAxQzApCisjZGVmaW5lIElPUDMyMV9QTU5FWFQgICAgICh2b2xhdGlsZSB1OCAgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDFDMSkKKyNkZWZpbmUgSU9QMzIxX0FQTUNSICAgICAgKHZvbGF0aWxlIHUxNiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwMUMyKQorI2RlZmluZSBJT1AzMjFfQVBNQ1NSICAgICAodm9sYXRpbGUgdTE2ICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDAxQzQpCisvKiBSZXNlcnZlZCAweDAwMDAwMUM2IHRocm91Z2ggMHgwMDAwMDFERiAqLworI2RlZmluZSBJT1AzMjFfUENJWENBUElEICAodm9sYXRpbGUgdTggICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDAxRTApCisjZGVmaW5lIElPUDMyMV9QQ0lYTkVYVCAgICh2b2xhdGlsZSB1OCAgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDFFMSkKKyNkZWZpbmUgSU9QMzIxX1BDSVhDTUQgICAgKHZvbGF0aWxlIHUxNiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwMUUyKQorI2RlZmluZSBJT1AzMjFfUENJWFNSICAgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDAxRTQpCisjZGVmaW5lIElPUDMyMV9QQ0lJUlNSICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDFFQykKKworLyogTWVzc2FnaW5nIFVuaXQgMHgwMDAwMDMwMCB0aHJvdWdoIDB4MDAwMDAzRkYgKi8KKworLyogUmVzZXJ2ZWQgMHgwMDAwMDMwMCB0aHJvdWdoIDB4MDAwMDAzMGMgKi8KKyNkZWZpbmUgSU9QMzIxX0lNUjAgICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwMzEwKQorI2RlZmluZSBJT1AzMjFfSU1SMSAgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDAzMTQpCisjZGVmaW5lIElPUDMyMV9PTVIwICAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDMxOCkKKyNkZWZpbmUgSU9QMzIxX09NUjEgICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwMzFDKQorI2RlZmluZSBJT1AzMjFfSURSICAgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDAzMjApCisjZGVmaW5lIElPUDMyMV9JSVNSICAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDMyNCkKKyNkZWZpbmUgSU9QMzIxX0lJTVIgICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwMzI4KQorI2RlZmluZSBJT1AzMjFfT0RSICAgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDAzMkMpCisjZGVmaW5lIElPUDMyMV9PSVNSICAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDMzMCkKKyNkZWZpbmUgSU9QMzIxX09JTVIgICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwMzM0KQorLyogUmVzZXJ2ZWQgMHgwMDAwMDMzOCB0aHJvdWdoIDB4MDAwMDAzNEYgKi8KKyNkZWZpbmUgSU9QMzIxX01VQ1IgICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwMzUwKQorI2RlZmluZSBJT1AzMjFfUUJBUiAgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDAzNTQpCisvKiBSZXNlcnZlZCAweDAwMDAwMzU4IHRocm91Z2ggMHgwMDAwMDM1QyAqLworI2RlZmluZSBJT1AzMjFfSUZIUFIgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDAzNjApCisjZGVmaW5lIElPUDMyMV9JRlRQUiAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDM2NCkKKyNkZWZpbmUgSU9QMzIxX0lQSFBSICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwMzY4KQorI2RlZmluZSBJT1AzMjFfSVBUUFIgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDAzNkMpCisjZGVmaW5lIElPUDMyMV9PRkhQUiAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDM3MCkKKyNkZWZpbmUgSU9QMzIxX09GVFBSICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwMzc0KQorI2RlZmluZSBJT1AzMjFfT1BIUFIgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDAzNzgpCisjZGVmaW5lIElPUDMyMV9PUFRQUiAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDM3QykKKyNkZWZpbmUgSU9QMzIxX0lBUiAgICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwMzgwKQorCisjZGVmaW5lIElPUDMyMV9JSXhSX01BU0sJMHg3ZiAvKiBtYXNrcyBhbGwgKi8KKyNkZWZpbmUgSU9QMzIxX0lJeFJfSVJJCQkweDQwIC8qIFJDIEluZGV4IFJlZ2lzdGVyIEludGVycnVwdCAqLworI2RlZmluZSBJT1AzMjFfSUl4Ul9PRlFGCTB4MjAgLyogUkMgT3V0cHV0IEZyZWUgUSBGdWxsIChFUlJPUikgKi8KKyNkZWZpbmUgSU9QMzIxX0lJeFJfaXBxCQkweDEwIC8qIFJDIEluYm91bmQgUG9zdCBRIChwb3N0KSAqLworI2RlZmluZSBJT1AzMjFfSUl4Ul9FUlJESQkweDA4IC8qIFJPIEVycm9yIERvb3JiZWxsIEludGVycnVwdCAqLworI2RlZmluZSBJT1AzMjFfSUl4Ul9JREkJCTB4MDQgLyogUk8gSW5ib3VuZCBEb29yYmVsbCBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU9QMzIxX0lJeFJfSU0xCQkweDAyIC8qIFJDIEluYm91bmQgTWVzc2FnZSAxIEludGVycnVwdCAqLworI2RlZmluZSBJT1AzMjFfSUl4Ul9JTTAJCTB4MDEgLyogUkMgSW5ib3VuZCBNZXNzYWdlIDAgSW50ZXJydXB0ICovCisKKy8qIFJlc2VydmVkIDB4MDAwMDAzODQgdGhyb3VnaCAweDAwMDAwM0ZGICovCisKKy8qIERNQSBDb250cm9sbGVyIDB4MDAwMDA0MDAgdGhyb3VnaCAweDAwMDAwNEZGICovCisjZGVmaW5lIElPUDMyMV9ETUEwX0NDUiAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDQwMCkKKyNkZWZpbmUgSU9QMzIxX0RNQTBfQ1NSICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwNDA0KQorI2RlZmluZSBJT1AzMjFfRE1BMF9EQVIgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDA0MEMpCisjZGVmaW5lIElPUDMyMV9ETUEwX05EQVIgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDQxMCkKKyNkZWZpbmUgSU9QMzIxX0RNQTBfUEFEUiAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwNDE0KQorI2RlZmluZSBJT1AzMjFfRE1BMF9QVUFEUiAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDA0MTgpCisjZGVmaW5lIElPUDMyMV9ETUEwX0xBRFIgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMFgwMDAwMDQxQykKKyNkZWZpbmUgSU9QMzIxX0RNQTBfQkNSICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwNDIwKQorI2RlZmluZSBJT1AzMjFfRE1BMF9EQ1IgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDA0MjQpCisvKiBSZXNlcnZlZCAweDAwMDAwNDI4IHRocm91Z2ggMHgwMDAwMDQzQyAqLworI2RlZmluZSBJT1AzMjFfRE1BMV9DQ1IgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDA0NDApCisjZGVmaW5lIElPUDMyMV9ETUExX0NTUiAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDQ0NCkKKyNkZWZpbmUgSU9QMzIxX0RNQTFfREFSICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwNDRDKQorI2RlZmluZSBJT1AzMjFfRE1BMV9OREFSICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDA0NTApCisjZGVmaW5lIElPUDMyMV9ETUExX1BBRFIgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDQ1NCkKKyNkZWZpbmUgSU9QMzIxX0RNQTFfUFVBRFIgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwNDU4KQorI2RlZmluZSBJT1AzMjFfRE1BMV9MQURSICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDA0NUMpCisjZGVmaW5lIElPUDMyMV9ETUExX0JDUiAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDQ2MCkKKyNkZWZpbmUgSU9QMzIxX0RNQTFfRENSICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwNDY0KQorLyogUmVzZXJ2ZWQgMHgwMDAwMDQ2OCB0aHJvdWdoIDB4MDAwMDA0RkYgKi8KKworLyogTWVtb3J5IGNvbnRyb2xsZXIgMHgwMDAwMDUwMCB0aHJvdWdoIDB4MDAwNUZGICovCisKKy8qIFBlcmlwaGVyYWwgYnVzIGludGVyZmFjZSB1bml0IDB4MDAwMDA2ODAgdGhyb3VnaCAweDAwMDZGRiAqLworI2RlZmluZSBJT1AzMjFfUEJDUiAgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDA2ODApCisjZGVmaW5lIElPUDMyMV9QQklTUiAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDY4NCkKKyNkZWZpbmUgSU9QMzIxX1BCQkFSMCAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwNjg4KQorI2RlZmluZSBJT1AzMjFfUEJMUjAgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDA2OEMpCisjZGVmaW5lIElPUDMyMV9QQkJBUjEgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDY5MCkKKyNkZWZpbmUgSU9QMzIxX1BCTFIxICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwNjk0KQorI2RlZmluZSBJT1AzMjFfUEJCQVIyICAgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDA2OTgpCisjZGVmaW5lIElPUDMyMV9QQkxSMiAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDY5QykKKyNkZWZpbmUgSU9QMzIxX1BCQkFSMyAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwNkEwKQorI2RlZmluZSBJT1AzMjFfUEJMUjMgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDA2QTQpCisjZGVmaW5lIElPUDMyMV9QQkJBUjQgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDZBOCkKKyNkZWZpbmUgSU9QMzIxX1BCTFI0ICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwNkFDKQorI2RlZmluZSBJT1AzMjFfUEJCQVI1ICAgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDA2QjApCisjZGVmaW5lIElPUDMyMV9QQkxSNSAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDZCNCkKKyNkZWZpbmUgSU9QMzIxX1BCRFNDUiAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwNkI4KQorLyogUmVzZXJ2ZWQgMHgwMDAwMDZCQyAqLworI2RlZmluZSBJT1AzMjFfUE1CUjAgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDA2QzApCisvKiBSZXNlcnZlZCAweDAwMDAwNkM0IHRocm91Z2ggMHgwMDAwMDZEQyAqLworI2RlZmluZSBJT1AzMjFfUE1CUjEgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDA2RTApCisjZGVmaW5lIElPUDMyMV9QTUJSMiAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDZFNCkKKworI2RlZmluZSBJT1AzMjFfUEJDUl9FTiAgICAweDEKKworI2RlZmluZSBJT1AzMjFfUEJJU1JfQk9PUl9FUlIgMHgxCisKKy8qIFBlcmlwaGVyYWwgcGVyZm9ybWFuY2UgbW9uaXRvcmluZyB1bml0IDB4MDAwMDA3MDAgdGhyb3VnaCAweDAwMDc3RiAqLworI2RlZmluZSBJT1AzMjFfR1RNUgkodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDA3MDApCisjZGVmaW5lIElPUDMyMV9FU1IJKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwNzA0KQorI2RlZmluZSBJT1AzMjFfRU1JU1IJKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwNzA4KQorLyogcmVzZXJ2ZWQgMHgwMDAwMDA3MGMgKi8KKyNkZWZpbmUgSU9QMzIxX0dUU1IJKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwNzEwKQorLyogUEVSQzAgRE9FU04nVCBFWElTVCAtIGluZGV4IGZyb20gMSEgKi8KKyNkZWZpbmUgSU9QMzIxX1BFUkNSMAkodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDA3MTApCisKKyNkZWZpbmUgSU9QMzIxX0dUTVJfTkdDRQkweDA0IC8qIChOb3QpIEdsb2JhbCBDb3VudGVyIEVuYWJsZSAqLworCisvKiBJbnRlcm5hbCBhcmJpdHJhdGlvbiB1bml0IDB4MDAwMDA3ODAgdGhyb3VnaCAweDAwMDdCRiAqLworI2RlZmluZSBJT1AzMjFfSUFDUgkodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDA3ODApCisjZGVmaW5lIElPUDMyMV9NVFRSMQkodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDA3ODQpCisjZGVmaW5lIElPUDMyMV9NVFRSMgkodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDA3ODgpCisKKy8qIEdlbmVyYWwgUHVycG9zZSBJL08gUmVnaXN0ZXJzICovCisjZGVmaW5lIElPUDMyMV9HUE9FICAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDdDNCkKKyNkZWZpbmUgSU9QMzIxX0dQSUQgICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwN0M4KQorI2RlZmluZSBJT1AzMjFfR1BPRCAgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDA3Q0MpCisKKy8qIEludGVycnVwdCBDb250cm9sbGVyICovCisjZGVmaW5lIElPUDMyMV9JTlRDVEwgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDdEMCkKKyNkZWZpbmUgSU9QMzIxX0lOVFNUUiAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwN0Q0KQorI2RlZmluZSBJT1AzMjFfSUlOVFNSQyAgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDA3RDgpCisjZGVmaW5lIElPUDMyMV9GSU5UU1JDICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDdEQykKKworLyogVGltZXJzICovCisKKyNkZWZpbmUgSU9QMzIxX1RVX1RNUjAJCSh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDdFMCkKKyNkZWZpbmUgSU9QMzIxX1RVX1RNUjEJCSh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDdFNCkKKworI2lmZGVmIENPTkZJR19BUkNIX0lRODAzMjEKKyNkZWZpbmUJSU9QMzIxX1RJQ0tfUkFURQkyMDAwMDAwMDAJLyogMjAwIE1IeiBjbG9jayAqLworI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9JUTMxMjQ0KQorI2RlZmluZSBJT1AzMjFfVElDS19SQVRFCTE5ODAwMDAwMAkvKiAzMy4wMDAgTUh6IGNyeXN0YWwgKi8KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0FSQ0hfRVA4MDIxOQorI3VuZGVmIElPUDMyMV9USUNLX1JBVEUKKyNkZWZpbmUgSU9QMzIxX1RJQ0tfUkFURSAyMDAwMDAwMDAgLyogMzMuMzMzMzMzIE1oeiBjcnlzdGFsICovCisjZW5kaWYKKworI2RlZmluZSBJT1AzMjFfVE1SX1RDCQkweDAxCisjZGVmaW5lCUlPUDMyMV9UTVJfRU4JCTB4MDIKKyNkZWZpbmUgSU9QMzIxX1RNUl9SRUxPQUQJMHgwNAorI2RlZmluZQlJT1AzMjFfVE1SX1BSSVZJTEVHRUQJMHgwOQorCisjZGVmaW5lCUlPUDMyMV9UTVJfUkFUSU9fMV8xCTB4MDAKKyNkZWZpbmUJSU9QMzIxX1RNUl9SQVRJT180XzEJMHgxMAorI2RlZmluZQlJT1AzMjFfVE1SX1JBVElPXzhfMQkweDIwCisjZGVmaW5lCUlPUDMyMV9UTVJfUkFUSU9fMTZfMQkweDMwCisKKyNkZWZpbmUgSU9QMzIxX1RVX1RDUjAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwN0U4KQorI2RlZmluZSBJT1AzMjFfVFVfVENSMSAgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDA3RUMpCisjZGVmaW5lIElPUDMyMV9UVV9UUlIwICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDdGMCkKKyNkZWZpbmUgSU9QMzIxX1RVX1RSUjEgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwN0Y0KQorI2RlZmluZSBJT1AzMjFfVFVfVElTUiAgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDA3RjgpCisjZGVmaW5lIElPUDMyMV9UVV9XRFRDUiAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDdGQykKKworLyogQXBwbGljYXRpb24gYWNjZWxlcmF0b3IgdW5pdCAweDAwMDAwODAwIC0gMHgwMDAwMDhGRiAqLworI2RlZmluZSBJT1AzMjFfQUFVX0FDUiAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwODAwKQorI2RlZmluZSBJT1AzMjFfQUFVX0FTUiAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwODA0KQorI2RlZmluZSBJT1AzMjFfQUFVX0FEQVIgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwODA4KQorI2RlZmluZSBJT1AzMjFfQUFVX0FOREFSICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwODBDKQorI2RlZmluZSBJT1AzMjFfQUFVX1NBUjEgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwODEwKQorI2RlZmluZSBJT1AzMjFfQUFVX1NBUjIgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwODE0KQorI2RlZmluZSBJT1AzMjFfQUFVX1NBUjMgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwODE4KQorI2RlZmluZSBJT1AzMjFfQUFVX1NBUjQgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwODFDKQorI2RlZmluZSBJT1AzMjFfQUFVX1NBUjUgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwODJDKQorI2RlZmluZSBJT1AzMjFfQUFVX1NBUjYgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwODMwKQorI2RlZmluZSBJT1AzMjFfQUFVX1NBUjcgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwODM0KQorI2RlZmluZSBJT1AzMjFfQUFVX1NBUjggICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwODM4KQorI2RlZmluZSBJT1AzMjFfQUFVX1NBUjkgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwODQwKQorI2RlZmluZSBJT1AzMjFfQUFVX1NBUjEwICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwODQ0KQorI2RlZmluZSBJT1AzMjFfQUFVX1NBUjExICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwODQ4KQorI2RlZmluZSBJT1AzMjFfQUFVX1NBUjEyICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwODRDKQorI2RlZmluZSBJT1AzMjFfQUFVX1NBUjEzICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwODUwKQorI2RlZmluZSBJT1AzMjFfQUFVX1NBUjE0ICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwODU0KQorI2RlZmluZSBJT1AzMjFfQUFVX1NBUjE1ICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwODU4KQorI2RlZmluZSBJT1AzMjFfQUFVX1NBUjE2ICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwODVDKQorI2RlZmluZSBJT1AzMjFfQUFVX1NBUjE3ICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwODY0KQorI2RlZmluZSBJT1AzMjFfQUFVX1NBUjE4ICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwODY4KQorI2RlZmluZSBJT1AzMjFfQUFVX1NBUjE5ICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwODZDKQorI2RlZmluZSBJT1AzMjFfQUFVX1NBUjIwICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwODcwKQorI2RlZmluZSBJT1AzMjFfQUFVX1NBUjIxICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwODc0KQorI2RlZmluZSBJT1AzMjFfQUFVX1NBUjIyICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwODc4KQorI2RlZmluZSBJT1AzMjFfQUFVX1NBUjIzICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwODdDKQorI2RlZmluZSBJT1AzMjFfQUFVX1NBUjI0ICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwODgwKQorI2RlZmluZSBJT1AzMjFfQUFVX1NBUjI1ICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwODg4KQorI2RlZmluZSBJT1AzMjFfQUFVX1NBUjI2ICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwODhDKQorI2RlZmluZSBJT1AzMjFfQUFVX1NBUjI3ICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwODkwKQorI2RlZmluZSBJT1AzMjFfQUFVX1NBUjI4ICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwODk0KQorI2RlZmluZSBJT1AzMjFfQUFVX1NBUjI5ICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwODk4KQorI2RlZmluZSBJT1AzMjFfQUFVX1NBUjMwICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwODlDKQorI2RlZmluZSBJT1AzMjFfQUFVX1NBUjMxICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwOEEwKQorI2RlZmluZSBJT1AzMjFfQUFVX1NBUjMyICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwOEE0KQorI2RlZmluZSBJT1AzMjFfQUFVX0RBUiAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwODIwKQorI2RlZmluZSBJT1AzMjFfQUFVX0FCQ1IgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwODI0KQorI2RlZmluZSBJT1AzMjFfQUFVX0FEQ1IgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwODI4KQorI2RlZmluZSBJT1AzMjFfQUFVX0VEQ1IwICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwODNjKQorI2RlZmluZSBJT1AzMjFfQUFVX0VEQ1IxICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwODYwKQorI2RlZmluZSBJT1AzMjFfQUFVX0VEQ1IyICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwODg0KQorCisKKy8qIFNTUCBzZXJpYWwgcG9ydCB1bml0IDB4MDAwMDE2MDAgLSAweDAwMDAxNjdGICovCisvKiBJMkMgYnVzIGludGVyZmFjZSB1bml0IDB4MDAwMDE2ODAgLSAweDAwMDAxNkZGICovCisjZGVmaW5lIElPUDMyMV9JQ1IwICAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMTY4MCkKKyNkZWZpbmUgSU9QMzIxX0lTUjAgICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAxNjg0KQorI2RlZmluZSBJT1AzMjFfSVNBUjAgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDE2ODgpCisjZGVmaW5lIElPUDMyMV9JREJSMCAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMTY4QykKKy8qIFJlc2VydmVkIDB4MDAwMDE2OTAgKi8KKyNkZWZpbmUgSU9QMzIxX0lCTVIwICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAxNjk0KQorLyogUmVzZXJ2ZWQgMHgwMDAwMTY5OCAqLworLyogUmVzZXJ2ZWQgMHgwMDAwMTY5QyAqLworI2RlZmluZSBJT1AzMjFfSUNSMSAgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDE2QTApCisjZGVmaW5lIElPUDMyMV9JU1IxICAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMTZBNCkKKyNkZWZpbmUgSU9QMzIxX0lTQVIxICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAxNkE4KQorI2RlZmluZSBJT1AzMjFfSURCUjEgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDE2QUMpCisjZGVmaW5lIElPUDMyMV9JQk1SMSAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMTZCNCkKKy8qIFJlc2VydmVkIDB4MDAwMDE2QjggdGhyb3VnaCAweDAwMDAxNkZDICovCisKKy8qIGZvciBJMkMgYml0IGRlZnMgc2VlIGRyaXZlcnMvaTJjL2kyYy1pb3AzeHguaCAqLworCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitleHRlcm4gdm9pZCBpb3AzMjFfbWFwX2lvKHZvaWQpOworZXh0ZXJuIHZvaWQgaW9wMzIxX2luaXRfaXJxKHZvaWQpOworZXh0ZXJuIHZvaWQgaW9wMzIxX3RpbWVfaW5pdCh2b2lkKTsKKyNlbmRpZgorCisjZW5kaWYgLy8gX0lPUDMyMV9IV19IXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L2lvcDMzMS1pcnFzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvaW9wMzMxLWlycXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmY3M2Q0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L2lvcDMzMS1pcnFzLmgKQEAgLTAsMCArMSwxMzYgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvaXJxcy5oCisgKgorICogQXV0aG9yOglEYXZlIEppYW5nIChkYXZlLmppYW5nQGludGVsLmNvbSkKKyAqIENvcHlyaWdodDoJKEMpIDIwMDMgSW50ZWwgQ29ycC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworI2lmbmRlZiBfSU9QMzMxX0lSUVNfSF8KKyNkZWZpbmUgX0lPUDMzMV9JUlFTX0hfCisKKy8qCisgKiBJT1A4MDMzMSBjaGlwc2V0IGludGVycnVwdHMKKyAqLworI2RlZmluZSBJT1AzMzFfSVJRX09GUwkJMAorI2RlZmluZSBJT1AzMzFfSVJRKHgpCQkoSU9QMzMxX0lSUV9PRlMgKyAoeCkpCisKKy8qCisgKiBPbiBJUlEgb3IgRklRIHJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgSVJRX0lPUDMzMV9ETUEwX0VPVAlJT1AzMzFfSVJRKDApCisjZGVmaW5lIElSUV9JT1AzMzFfRE1BMF9FT0MJSU9QMzMxX0lSUSgxKQorI2RlZmluZSBJUlFfSU9QMzMxX0RNQTFfRU9UCUlPUDMzMV9JUlEoMikKKyNkZWZpbmUgSVJRX0lPUDMzMV9ETUExX0VPQwlJT1AzMzFfSVJRKDMpCisjZGVmaW5lIElSUV9JT1AzMzFfUlNWRF80CUlPUDMzMV9JUlEoNCkKKyNkZWZpbmUgSVJRX0lPUDMzMV9SU1ZEXzUJSU9QMzMxX0lSUSg1KQorI2RlZmluZSBJUlFfSU9QMzMxX0FBX0VPVAlJT1AzMzFfSVJRKDYpCisjZGVmaW5lIElSUV9JT1AzMzFfQUFfRU9DCUlPUDMzMV9JUlEoNykKKyNkZWZpbmUgSVJRX0lPUDMzMV9USU1FUjAJSU9QMzMxX0lSUSg4KQorI2RlZmluZSBJUlFfSU9QMzMxX1RJTUVSMQlJT1AzMzFfSVJRKDkpCisjZGVmaW5lIElSUV9JT1AzMzFfSTJDXzAJSU9QMzMxX0lSUSgxMCkKKyNkZWZpbmUgSVJRX0lPUDMzMV9JMkNfMQlJT1AzMzFfSVJRKDExKQorI2RlZmluZSBJUlFfSU9QMzMxX01TRwkgICAgSU9QMzMxX0lSUSgxMikKKyNkZWZpbmUgSVJRX0lPUDMzMV9NU0dJQlEgICBJT1AzMzFfSVJRKDEzKQorI2RlZmluZSBJUlFfSU9QMzMxX0FUVV9CSVNUCUlPUDMzMV9JUlEoMTQpCisjZGVmaW5lIElSUV9JT1AzMzFfUEVSRk1PTglJT1AzMzFfSVJRKDE1KQorI2RlZmluZSBJUlFfSU9QMzMxX0NPUkVfUE1VCUlPUDMzMV9JUlEoMTYpCisjZGVmaW5lIElSUV9JT1AzMzFfUlNWRF8xNwlJT1AzMzFfSVJRKDE3KQorI2RlZmluZSBJUlFfSU9QMzMxX1JTVkRfMTgJSU9QMzMxX0lSUSgxOCkKKyNkZWZpbmUgSVJRX0lPUDMzMV9SU1ZEXzE5CUlPUDMzMV9JUlEoMTkpCisjZGVmaW5lIElSUV9JT1AzMzFfUlNWRF8yMAlJT1AzMzFfSVJRKDIwKQorI2RlZmluZSBJUlFfSU9QMzMxX1JTVkRfMjEJSU9QMzMxX0lSUSgyMSkKKyNkZWZpbmUgSVJRX0lPUDMzMV9SU1ZEXzIyCUlPUDMzMV9JUlEoMjIpCisjZGVmaW5lIElSUV9JT1AzMzFfUlNWRF8yMwlJT1AzMzFfSVJRKDIzKQorI2RlZmluZSBJUlFfSU9QMzMxX1hJTlQwCUlPUDMzMV9JUlEoMjQpCisjZGVmaW5lIElSUV9JT1AzMzFfWElOVDEJSU9QMzMxX0lSUSgyNSkKKyNkZWZpbmUgSVJRX0lPUDMzMV9YSU5UMglJT1AzMzFfSVJRKDI2KQorI2RlZmluZSBJUlFfSU9QMzMxX1hJTlQzCUlPUDMzMV9JUlEoMjcpCisjZGVmaW5lIElSUV9JT1AzMzFfUlNWRF8yOCAgSU9QMzMxX0lSUSgyOCkKKyNkZWZpbmUgSVJRX0lPUDMzMV9SU1ZEXzI5ICBJT1AzMzFfSVJRKDI5KQorI2RlZmluZSBJUlFfSU9QMzMxX1JTVkRfMzAgIElPUDMzMV9JUlEoMzApCisjZGVmaW5lIElSUV9JT1AzMzFfUlNWRF8zMSAgSU9QMzMxX0lSUSgzMSkKKyNkZWZpbmUgSVJRX0lPUDMzMV9YSU5UOCAgICBJT1AzMzFfSVJRKDMyKSAgLy8gMAorI2RlZmluZSBJUlFfSU9QMzMxX1hJTlQ5ICAgIElPUDMzMV9JUlEoMzMpICAvLyAxCisjZGVmaW5lIElSUV9JT1AzMzFfWElOVDEwICAgSU9QMzMxX0lSUSgzNCkgIC8vIDIKKyNkZWZpbmUgSVJRX0lPUDMzMV9YSU5UMTEgICBJT1AzMzFfSVJRKDM1KSAgLy8gMworI2RlZmluZSBJUlFfSU9QMzMxX1hJTlQxMiAgIElPUDMzMV9JUlEoMzYpICAvLyA0CisjZGVmaW5lIElSUV9JT1AzMzFfWElOVDEzICAgSU9QMzMxX0lSUSgzNykgIC8vIDUKKyNkZWZpbmUgSVJRX0lPUDMzMV9YSU5UMTQgICBJT1AzMzFfSVJRKDM4KSAgLy8gNgorI2RlZmluZSBJUlFfSU9QMzMxX1hJTlQxNSAgIElPUDMzMV9JUlEoMzkpICAvLyA3CisjZGVmaW5lIElSUV9JT1AzMzFfUlNWRF80MCAgSU9QMzMxX0lSUSg0MCkgIC8vIDgKKyNkZWZpbmUgSVJRX0lPUDMzMV9SU1ZEXzQxICBJT1AzMzFfSVJRKDQxKSAgLy8gOQorI2RlZmluZSBJUlFfSU9QMzMxX1JTVkRfNDIgIElPUDMzMV9JUlEoNDIpICAvLyAxMAorI2RlZmluZSBJUlFfSU9QMzMxX1JTVkRfNDMgIElPUDMzMV9JUlEoNDMpICAvLyAxMQorI2RlZmluZSBJUlFfSU9QMzMxX1JTVkRfNDQgIElPUDMzMV9JUlEoNDQpICAvLyAxMgorI2RlZmluZSBJUlFfSU9QMzMxX1JTVkRfNDUgIElPUDMzMV9JUlEoNDUpICAvLyAxMworI2RlZmluZSBJUlFfSU9QMzMxX1JTVkRfNDYgIElPUDMzMV9JUlEoNDYpICAvLyAxNAorI2RlZmluZSBJUlFfSU9QMzMxX1JTVkRfNDcgIElPUDMzMV9JUlEoNDcpICAvLyAxNQorI2RlZmluZSBJUlFfSU9QMzMxX1JTVkRfNDggIElPUDMzMV9JUlEoNDgpICAvLyAxNgorI2RlZmluZSBJUlFfSU9QMzMxX1JTVkRfNDkgIElPUDMzMV9JUlEoNDkpICAvLyAxNworI2RlZmluZSBJUlFfSU9QMzMxX1JTVkRfNTAgIElPUDMzMV9JUlEoNTApICAvLyAxOAorI2RlZmluZSBJUlFfSU9QMzMxX1VBUlQwICAgIElPUDMzMV9JUlEoNTEpICAvLyAxOQorI2RlZmluZSBJUlFfSU9QMzMxX1VBUlQxICAgIElPUDMzMV9JUlEoNTIpICAvLyAyMAorI2RlZmluZSBJUlFfSU9QMzMxX1BCSUUgICAgIElPUDMzMV9JUlEoNTMpICAvLyAyMQorI2RlZmluZSBJUlFfSU9QMzMxX0FUVV9DUlcgIElPUDMzMV9JUlEoNTQpICAvLyAyMgorI2RlZmluZSBJUlFfSU9QMzMxX0FUVV9FUlIJSU9QMzMxX0lSUSg1NSkgIC8vIDIzCisjZGVmaW5lIElSUV9JT1AzMzFfTUNVX0VSUglJT1AzMzFfSVJRKDU2KSAgLy8gMjQKKyNkZWZpbmUgSVJRX0lPUDMzMV9ETUEwX0VSUglJT1AzMzFfSVJRKDU3KSAgLy8gMjUKKyNkZWZpbmUgSVJRX0lPUDMzMV9ETUExX0VSUglJT1AzMzFfSVJRKDU4KSAgLy8gMjYKKyNkZWZpbmUgSVJRX0lPUDMzMV9SU1ZEXzU5ICBJT1AzMzFfSVJRKDU5KSAgLy8gMjcKKyNkZWZpbmUgSVJRX0lPUDMzMV9BQV9FUlIJSU9QMzMxX0lSUSg2MCkgIC8vIDI4CisjZGVmaW5lIElSUV9JT1AzMzFfUlNWRF82MSAgSU9QMzMxX0lSUSg2MSkgIC8vIDI5CisjZGVmaW5lIElSUV9JT1AzMzFfTVNHX0VSUglJT1AzMzFfSVJRKDYyKSAgLy8gMzAKKyNkZWZpbmUgSVJRX0lPUDMzMV9IUEkJCUlPUDMzMV9JUlEoNjMpICAvLyAzMQorCisjZGVmaW5lIE5SX0lPUDMzMV9JUlFTCQkoSU9QMzMxX0lSUSg2MykgKyAxKQorCisjZGVmaW5lIE5SX0lSUVMJCQlOUl9JT1AzMzFfSVJRUworCisKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX0lRODAzMzEpCisvKgorICogSW50ZXJydXB0cyBhdmFpbGFibGUgb24gdGhlIElRODAzMzEgYm9hcmQKKyAqLworCisvKgorICogT24gYm9hcmQgZGV2aWNlcworICovCisjZGVmaW5lCUlSUV9JUTgwMzMxX0k4MjU0NAlJUlFfSU9QMzMxX1hJTlQwCisjZGVmaW5lIElSUV9JUTgwMzMxX1VBUlQwCUlSUV9JT1AzMzFfVUFSVDAKKyNkZWZpbmUgSVJRX0lRODAzMzFfVUFSVDEJSVJRX0lPUDMzMV9VQVJUMQorCisvKgorICogUENJIGludGVycnVwdHMKKyAqLworI2RlZmluZQlJUlFfSVE4MDMzMV9JTlRBCUlSUV9JT1AzMzFfWElOVDAKKyNkZWZpbmUJSVJRX0lRODAzMzFfSU5UQglJUlFfSU9QMzMxX1hJTlQxCisjZGVmaW5lCUlSUV9JUTgwMzMxX0lOVEMJSVJRX0lPUDMzMV9YSU5UMgorI2RlZmluZQlJUlFfSVE4MDMzMV9JTlRECUlSUV9JT1AzMzFfWElOVDMKKworI2VsaWYgZGVmaW5lZChDT05GSUdfTUFDSF9JUTgwMzMyKQorLyoKKyAqIEludGVycnVwdHMgYXZhaWxhYmxlIG9uIHRoZSBJUTgwMzMyIGJvYXJkCisgKi8KKworLyoKKyAqIE9uIGJvYXJkIGRldmljZXMKKyAqLworI2RlZmluZQlJUlFfSVE4MDMzMl9JODI1NDQJSVJRX0lPUDMzMV9YSU5UMAorI2RlZmluZSBJUlFfSVE4MDMzMl9VQVJUMAlJUlFfSU9QMzMxX1VBUlQwCisjZGVmaW5lIElSUV9JUTgwMzMyX1VBUlQxCUlSUV9JT1AzMzFfVUFSVDEKKworLyoKKyAqIFBDSSBpbnRlcnJ1cHRzCisgKi8KKyNkZWZpbmUJSVJRX0lRODAzMzJfSU5UQQlJUlFfSU9QMzMxX1hJTlQwCisjZGVmaW5lCUlSUV9JUTgwMzMyX0lOVEIJSVJRX0lPUDMzMV9YSU5UMQorI2RlZmluZQlJUlFfSVE4MDMzMl9JTlRDCUlSUV9JT1AzMzFfWElOVDIKKyNkZWZpbmUJSVJRX0lRODAzMzJfSU5URAlJUlFfSU9QMzMxX1hJTlQzCisKKyNlbmRpZgorCisjZW5kaWYgLy8gX0lPUDMzMV9JUlFfSF8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC9pb3AzMzEuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC9pb3AzMzEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmFkZmZkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L2lvcDMzMS5oCkBAIC0wLDAgKzEsMzYzIEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20vYXJjaC1pb3AzeHgvaW9wMzMxLmgKKyAqCisgKiBJbnRlbCBJT1AzMzEgQ2hpcCBkZWZpbml0aW9ucworICoKKyAqIEF1dGhvcjogRGF2ZSBKaWFuZyAoZGF2ZS5qaWFuZ0BpbnRlbC5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQgSW50ZWwgQ29ycC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX0lPUDMzMV9IV19IXworI2RlZmluZSBfSU9QMzMxX0hXX0hfCisKKworLyoKKyAqIFRoaXMgaXMgbmVlZGVkIGZvciBtaXhlZCBkcml2ZXJzIHRoYXQgbmVlZCB0byB3b3JrIG9uIGFsbAorICogSU9QM3h4IHZhcmlhbnRzIGJ1dCBiZWhhdmUgc2xpZ2h0bHkgZGlmZmVyZW50bHkgb24gZWFjaC4KKyAqLworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNpZmRlZglDT05GSUdfQVJDSF9JT1AzMzEKKy8qI2RlZmluZQlpb3BfaXNfMzMxKCkJKChwcm9jZXNzb3JfaWQgJiAweGZmZmZmZmIwKSA9PSAweDY5MDU0MDkwKSAqLworI2RlZmluZQlpb3BfaXNfMzMxKCkJKChwcm9jZXNzb3JfaWQgJiAweGZmZmZmZjMwKSA9PSAweDY5MDU0MDEwKQorI2Vsc2UKKyNkZWZpbmUJaW9wX2lzXzMzMSgpCTAKKyNlbmRpZgorI2VuZGlmCisKKy8qCisgKiBJT1AzMzEgSS9PIGFuZCBNZW0gc3BhY2UgcmVnaW9ucyBmb3IgUENJIGF1dG9jb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgSU9QMzMxX1BDSV9JT19XSU5ET1dfU0laRSAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgSU9QMzMxX1BDSV9MT1dFUl9JT19QQSAgICAgIDB4OTAwMDAwMDAKKyNkZWZpbmUgSU9QMzMxX1BDSV9MT1dFUl9JT19WQSAgICAgIDB4ZmUwMDAwMDAKKyNkZWZpbmUgSU9QMzMxX1BDSV9MT1dFUl9JT19CQSAgICAgICgqSU9QMzMxX09JT1dUVlIpCisjZGVmaW5lIElPUDMzMV9QQ0lfVVBQRVJfSU9fUEEgICAgICAoSU9QMzMxX1BDSV9MT1dFUl9JT19QQSArIElPUDMzMV9QQ0lfSU9fV0lORE9XX1NJWkUgLSAxKQorI2RlZmluZSBJT1AzMzFfUENJX1VQUEVSX0lPX1ZBICAgICAgKElPUDMzMV9QQ0lfTE9XRVJfSU9fVkEgKyBJT1AzMzFfUENJX0lPX1dJTkRPV19TSVpFIC0gMSkKKyNkZWZpbmUgSU9QMzMxX1BDSV9VUFBFUl9JT19CQSAgICAgIChJT1AzMzFfUENJX0xPV0VSX0lPX0JBICsgSU9QMzMxX1BDSV9JT19XSU5ET1dfU0laRSAtIDEpCisjZGVmaW5lIElPUDMzMV9QQ0lfSU9fT0ZGU0VUICAgICAgICAoSU9QMzMxX1BDSV9MT1dFUl9JT19WQSAtIElPUDMzMV9QQ0lfTE9XRVJfSU9fQkEpCisKKy8qIHRoaXMgY2FuIGJlIDEyOE0gaWYgT01XVFZSMSBpcyBzZXQgKi8KKyNkZWZpbmUgSU9QMzMxX1BDSV9NRU1fV0lORE9XX1NJWkUJMHgwNDAwMDAwMCAvKiA2NE0gb3V0Ym91bmQgd2luZG93ICovCisvLyNkZWZpbmUgSU9QMzMxX1BDSV9NRU1fV0lORE9XX1NJWkUgICh+KklPUDMzMV9JQUxSMSArIDEpCisjZGVmaW5lIElPUDMzMV9QQ0lfTE9XRVJfTUVNX1BBICAgICAweDgwMDAwMDAwCisjZGVmaW5lIElPUDMzMV9QQ0lfTE9XRVJfTUVNX0JBICAgICAoKklPUDMzMV9PTVdUVlIwKQorI2RlZmluZSBJT1AzMzFfUENJX1VQUEVSX01FTV9QQSAgICAgKElPUDMzMV9QQ0lfTE9XRVJfTUVNX1BBICsgSU9QMzMxX1BDSV9NRU1fV0lORE9XX1NJWkUgLSAxKQorI2RlZmluZSBJT1AzMzFfUENJX1VQUEVSX01FTV9CQSAgICAgKElPUDMzMV9QQ0lfTE9XRVJfTUVNX0JBICsgSU9QMzMxX1BDSV9NRU1fV0lORE9XX1NJWkUgLSAxKQorI2RlZmluZSBJT1AzMzFfUENJX01FTV9PRkZTRVQgICAgICAgKElPUDMzMV9QQ0lfTE9XRVJfTUVNX1BBIC0gSU9QMzMxX1BDSV9MT1dFUl9NRU1fQkEpCisKKy8qCisgKiBJT1AzMzEgY2hpcHNldCByZWdpc3RlcnMKKyAqLworI2RlZmluZSBJT1AzMzFfVklSVF9NRU1fQkFTRSAgMHhmZWZmZTAwMCAgLyogY2hpcCB2aXJ0dWFsIG1lbSBhZGRyZXNzKi8KKyNkZWZpbmUgSU9QMzMxX1BIWVNfTUVNX0JBU0UgIDB4ZmZmZmUwMDAgIC8qIGNoaXAgcGh5c2ljYWwgbWVtb3J5IGFkZHJlc3MgKi8KKyNkZWZpbmUgSU9QMzMxX1JFR19BRERSKHJlZykgKElPUDMzMV9WSVJUX01FTV9CQVNFIHwgKHJlZykpCisKKy8qIFJlc2VydmVkIDB4MDAwMDAwMDAgdGhyb3VnaCAweDAwMDAwMEZGICovCisKKy8qIEFkZHJlc3MgVHJhbnNsYXRpb24gVW5pdCAweDAwMDAwMTAwIHRocm91Z2ggMHgwMDAwMDFGRiAqLworI2RlZmluZSBJT1AzMzFfQVRVVklEICAgICAodm9sYXRpbGUgdTE2ICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDAxMDApCisjZGVmaW5lIElPUDMzMV9BVFVESUQgICAgICh2b2xhdGlsZSB1MTYgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDEwMikKKyNkZWZpbmUgSU9QMzMxX0FUVUNNRCAgICAgKHZvbGF0aWxlIHUxNiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwMTA0KQorI2RlZmluZSBJT1AzMzFfQVRVU1IgICAgICAodm9sYXRpbGUgdTE2ICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDAxMDYpCisjZGVmaW5lIElPUDMzMV9BVFVSSUQgICAgICh2b2xhdGlsZSB1OCAgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDEwOCkKKyNkZWZpbmUgSU9QMzMxX0FUVUNDUiAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwMTA5KQorI2RlZmluZSBJT1AzMzFfQVRVQ0xTUiAgICAodm9sYXRpbGUgdTggICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDAxMEMpCisjZGVmaW5lIElPUDMzMV9BVFVMVCAgICAgICh2b2xhdGlsZSB1OCAgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDEwRCkKKyNkZWZpbmUgSU9QMzMxX0FUVUhUUiAgICAgKHZvbGF0aWxlIHU4ICAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwMTBFKQorI2RlZmluZSBJT1AzMzFfQVRVQklTVCAgICAodm9sYXRpbGUgdTggICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDAxMEYpCisjZGVmaW5lIElPUDMzMV9JQUJBUjAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDExMCkKKyNkZWZpbmUgSU9QMzMxX0lBVUJBUjAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwMTE0KQorI2RlZmluZSBJT1AzMzFfSUFCQVIxICAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDAxMTgpCisjZGVmaW5lIElPUDMzMV9JQVVCQVIxICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDExQykKKyNkZWZpbmUgSU9QMzMxX0lBQkFSMiAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwMTIwKQorI2RlZmluZSBJT1AzMzFfSUFVQkFSMiAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDAxMjQpCisjZGVmaW5lIElPUDMzMV9BU1ZJUiAgICAgICh2b2xhdGlsZSB1MTYgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDEyQykKKyNkZWZpbmUgSU9QMzMxX0FTSVIgICAgICAgKHZvbGF0aWxlIHUxNiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwMTJFKQorI2RlZmluZSBJT1AzMzFfRVJCQVIgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDAxMzApCisjZGVmaW5lIElPUDMzMV9BVFVfQ0FQUFRSICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDEzNCkKKy8qIFJlc2VydmVkIDB4MDAwMDAxMzggdGhyb3VnaCAweDAwMDAwMTNCICovCisjZGVmaW5lIElPUDMzMV9BVFVJTFIgICAgICh2b2xhdGlsZSB1OCAgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDEzQykKKyNkZWZpbmUgSU9QMzMxX0FUVUlQUiAgICAgKHZvbGF0aWxlIHU4ICAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwMTNEKQorI2RlZmluZSBJT1AzMzFfQVRVTUdOVCAgICAodm9sYXRpbGUgdTggICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDAxM0UpCisjZGVmaW5lIElPUDMzMV9BVFVNTEFUICAgICh2b2xhdGlsZSB1OCAgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDEzRikKKyNkZWZpbmUgSU9QMzMxX0lBTFIwICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwMTQwKQorI2RlZmluZSBJT1AzMzFfSUFUVlIwICAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDAxNDQpCisjZGVmaW5lIElPUDMzMV9FUkxSICAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDE0OCkKKyNkZWZpbmUgSU9QMzMxX0VSVFZSICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwMTRDKQorI2RlZmluZSBJT1AzMzFfSUFMUjEgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDAxNTApCisjZGVmaW5lIElPUDMzMV9JQUxSMiAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDE1NCkKKyNkZWZpbmUgSU9QMzMxX0lBVFZSMiAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwMTU4KQorI2RlZmluZSBJT1AzMzFfT0lPV1RWUiAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDAxNUMpCisjZGVmaW5lIElPUDMzMV9PTVdUVlIwICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDE2MCkKKyNkZWZpbmUgSU9QMzMxX09VTVdUVlIwICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwMTY0KQorI2RlZmluZSBJT1AzMzFfT01XVFZSMSAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDAxNjgpCisjZGVmaW5lIElPUDMzMV9PVU1XVFZSMSAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDE2QykKKy8qIFJlc2VydmVkIDB4MDAwMDAxNzAgdGhyb3VnaCAweDAwMDAwMTc3Ki8KKyNkZWZpbmUgSU9QMzMxX09VRFdUVlIgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwMTc4KQorLyogUmVzZXJ2ZWQgMHgwMDAwMDE3QyB0aHJvdWdoIDB4MDAwMDAxN0YqLworI2RlZmluZSBJT1AzMzFfQVRVQ1IgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDAxODApCisjZGVmaW5lIElPUDMzMV9QQ1NSICAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDE4NCkKKyNkZWZpbmUgSU9QMzMxX0FUVUlTUiAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwMTg4KQorI2RlZmluZSBJT1AzMzFfQVRVSU1SICAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDAxOEMpCisjZGVmaW5lIElPUDMzMV9JQUJBUjMgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDE5MCkKKyNkZWZpbmUgSU9QMzMxX0lBVUJBUjMgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwMTk0KQorI2RlZmluZSBJT1AzMzFfSUFMUjMgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDAxOTgpCisjZGVmaW5lIElPUDMzMV9JQVRWUjMgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDE5QykKKy8qIFJlc2VydmVkIDB4MDAwMDAxQTAgdGhyb3VnaCAweDAwMDAwMUEzKi8KKyNkZWZpbmUgSU9QMzMxX09DQ0FSICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwMUE0KQorLyogUmVzZXJ2ZWQgMHgwMDAwMDFBOCB0aHJvdWdoIDB4MDAwMDAxQUIqLworI2RlZmluZSBJT1AzMzFfT0NDRFIgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDAxQUMpCisvKiBSZXNlcnZlZCAweDAwMDAwMUIwIHRocm91Z2ggMHgwMDAwMDFCQiovCisjZGVmaW5lIElPUDMzMV9WUERDQVBJRCAgICh2b2xhdGlsZSB1OCAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwMUI4KQorI2RlZmluZSBJT1AzMzFfVlBETlhUUCAgICAodm9sYXRpbGUgdTggKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDFCOSkKKyNkZWZpbmUgSU9QMzMxX1ZQREFSCSAgKHZvbGF0aWxlIHUxNiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwMUJBKQorI2RlZmluZSBJT1AzMzFfVlBERFIgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDAxQkMpCisjZGVmaW5lIElPUDMzMV9QTUNBUElEICAgICh2b2xhdGlsZSB1OCAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwMUMwKQorI2RlZmluZSBJT1AzMzFfUE1ORVhUICAgICAodm9sYXRpbGUgdTggKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDFDMSkKKyNkZWZpbmUgSU9QMzMxX0FQTUNSICAgICAgKHZvbGF0aWxlIHUxNiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwMUMyKQorI2RlZmluZSBJT1AzMzFfQVBNQ1NSICAgICAodm9sYXRpbGUgdTE2ICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDAxQzQpCisvKiBSZXNlcnZlZCAweDAwMDAwMUM2IHRocm91Z2ggMHgwMDAwMDFDRiAqLworI2RlZmluZSBJT1AzMzFfTVNJQ0FQSUQgICAodm9sYXRpbGUgdTggKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDFEMCkKKyNkZWZpbmUgSU9QMzMxX01TSU5YVFAJICAodm9sYXRpbGUgdTggKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDFEMSkKKyNkZWZpbmUgSU9QMzMxX01TSU1DUiAgICAgKHZvbGF0aWxlIHUxNiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwMUQyKQorI2RlZmluZSBJT1AzMzFfTVNJTUFSICAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDAxRDQpCisjZGVmaW5lIElPUDMzMV9NU0lNVUFSCSAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwMUQ4KQorI2RlZmluZSBJT1AzMzFfTVNJTURSCSAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwMURDKQorI2RlZmluZSBJT1AzMzFfUENJWENBUElEICAodm9sYXRpbGUgdTggKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDFFMCkKKyNkZWZpbmUgSU9QMzMxX1BDSVhORVhUICAgKHZvbGF0aWxlIHU4ICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDAxRTEpCisjZGVmaW5lIElPUDMzMV9QQ0lYQ01EICAgICh2b2xhdGlsZSB1MTYgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDFFMikKKyNkZWZpbmUgSU9QMzMxX1BDSVhTUiAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwMUU0KQorI2RlZmluZSBJT1AzMzFfUENJSVJTUiAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDAxRUMpCisKKy8qIE1lc3NhZ2luZyBVbml0IDB4MDAwMDAzMDAgdGhyb3VnaCAweDAwMDAwM0ZGICovCisKKy8qIFJlc2VydmVkIDB4MDAwMDAzMDAgdGhyb3VnaCAweDAwMDAwMzBjICovCisjZGVmaW5lIElPUDMzMV9JTVIwICAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDMxMCkKKyNkZWZpbmUgSU9QMzMxX0lNUjEgICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwMzE0KQorI2RlZmluZSBJT1AzMzFfT01SMCAgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDAzMTgpCisjZGVmaW5lIElPUDMzMV9PTVIxICAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDMxQykKKyNkZWZpbmUgSU9QMzMxX0lEUiAgICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwMzIwKQorI2RlZmluZSBJT1AzMzFfSUlTUiAgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDAzMjQpCisjZGVmaW5lIElPUDMzMV9JSU1SICAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDMyOCkKKyNkZWZpbmUgSU9QMzMxX09EUiAgICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwMzJDKQorI2RlZmluZSBJT1AzMzFfT0lTUiAgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDAzMzApCisjZGVmaW5lIElPUDMzMV9PSU1SICAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDMzNCkKKy8qIFJlc2VydmVkIDB4MDAwMDAzMzggdGhyb3VnaCAweDAwMDAwMzRGICovCisjZGVmaW5lIElPUDMzMV9NVUNSICAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDM1MCkKKyNkZWZpbmUgSU9QMzMxX1FCQVIgICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwMzU0KQorLyogUmVzZXJ2ZWQgMHgwMDAwMDM1OCB0aHJvdWdoIDB4MDAwMDAzNUMgKi8KKyNkZWZpbmUgSU9QMzMxX0lGSFBSICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwMzYwKQorI2RlZmluZSBJT1AzMzFfSUZUUFIgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDAzNjQpCisjZGVmaW5lIElPUDMzMV9JUEhQUiAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDM2OCkKKyNkZWZpbmUgSU9QMzMxX0lQVFBSICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwMzZDKQorI2RlZmluZSBJT1AzMzFfT0ZIUFIgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDAzNzApCisjZGVmaW5lIElPUDMzMV9PRlRQUiAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDM3NCkKKyNkZWZpbmUgSU9QMzMxX09QSFBSICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwMzc4KQorI2RlZmluZSBJT1AzMzFfT1BUUFIgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDAzN0MpCisjZGVmaW5lIElPUDMzMV9JQVIgICAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDM4MCkKKy8qIFJlc2VydmVkIDB4MDAwMDAzODQgdGhyb3VnaCAweDAwMDAwM0ZGICovCisKKy8qIERNQSBDb250cm9sbGVyIDB4MDAwMDA0MDAgdGhyb3VnaCAweDAwMDAwNEZGICovCisjZGVmaW5lIElPUDMzMV9ETUEwX0NDUiAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDQwMCkKKyNkZWZpbmUgSU9QMzMxX0RNQTBfQ1NSICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwNDA0KQorI2RlZmluZSBJT1AzMzFfRE1BMF9EQVIgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA0MEMpCisjZGVmaW5lIElPUDMzMV9ETUEwX05EQVIgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDQxMCkKKyNkZWZpbmUgSU9QMzMxX0RNQTBfUEFEUiAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwNDE0KQorI2RlZmluZSBJT1AzMzFfRE1BMF9QVUFEUiAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA0MTgpCisjZGVmaW5lIElPUDMzMV9ETUEwX0xBRFIgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMFgwMDAwMDQxQykKKyNkZWZpbmUgSU9QMzMxX0RNQTBfQkNSICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwNDIwKQorI2RlZmluZSBJT1AzMzFfRE1BMF9EQ1IgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA0MjQpCisvKiBSZXNlcnZlZCAweDAwMDAwNDI4IHRocm91Z2ggMHgwMDAwMDQzQyAqLworI2RlZmluZSBJT1AzMzFfRE1BMV9DQ1IgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA0NDApCisjZGVmaW5lIElPUDMzMV9ETUExX0NTUiAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDQ0NCkKKyNkZWZpbmUgSU9QMzMxX0RNQTFfREFSICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwNDRDKQorI2RlZmluZSBJT1AzMzFfRE1BMV9OREFSICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA0NTApCisjZGVmaW5lIElPUDMzMV9ETUExX1BBRFIgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDQ1NCkKKyNkZWZpbmUgSU9QMzMxX0RNQTFfUFVBRFIgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwNDU4KQorI2RlZmluZSBJT1AzMzFfRE1BMV9MQURSICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA0NUMpCisjZGVmaW5lIElPUDMzMV9ETUExX0JDUiAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDQ2MCkKKyNkZWZpbmUgSU9QMzMxX0RNQTFfRENSICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwNDY0KQorLyogUmVzZXJ2ZWQgMHgwMDAwMDQ2OCB0aHJvdWdoIDB4MDAwMDA0RkYgKi8KKworLyogTWVtb3J5IGNvbnRyb2xsZXIgMHgwMDAwMDUwMCB0aHJvdWdoIDB4MDAwNUZGICovCisKKy8qIFBlcmlwaGVyYWwgYnVzIGludGVyZmFjZSB1bml0IDB4MDAwMDA2ODAgdGhyb3VnaCAweDAwMDZGRiAqLworI2RlZmluZSBJT1AzMzFfUEJDUiAgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA2ODApCisjZGVmaW5lIElPUDMzMV9QQklTUiAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDY4NCkKKyNkZWZpbmUgSU9QMzMxX1BCQkFSMCAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwNjg4KQorI2RlZmluZSBJT1AzMzFfUEJMUjAgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA2OEMpCisjZGVmaW5lIElPUDMzMV9QQkJBUjEgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDY5MCkKKyNkZWZpbmUgSU9QMzMxX1BCTFIxICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwNjk0KQorI2RlZmluZSBJT1AzMzFfUEJCQVIyICAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA2OTgpCisjZGVmaW5lIElPUDMzMV9QQkxSMiAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDY5QykKKyNkZWZpbmUgSU9QMzMxX1BCQkFSMyAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwNkEwKQorI2RlZmluZSBJT1AzMzFfUEJMUjMgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA2QTQpCisjZGVmaW5lIElPUDMzMV9QQkJBUjQgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDZBOCkKKyNkZWZpbmUgSU9QMzMxX1BCTFI0ICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwNkFDKQorI2RlZmluZSBJT1AzMzFfUEJCQVI1ICAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA2QjApCisjZGVmaW5lIElPUDMzMV9QQkxSNSAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDZCNCkKKyNkZWZpbmUgSU9QMzMxX1BCRFNDUiAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwNkI4KQorLyogUmVzZXJ2ZWQgMHgwMDAwMDZCQyAqLworI2RlZmluZSBJT1AzMzFfUE1CUjAgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA2QzApCisvKiBSZXNlcnZlZCAweDAwMDAwNkM0IHRocm91Z2ggMHgwMDAwMDZEQyAqLworI2RlZmluZSBJT1AzMzFfUE1CUjEgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA2RTApCisjZGVmaW5lIElPUDMzMV9QTUJSMiAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDZFNCkKKworI2RlZmluZSBJT1AzMzFfUEJDUl9FTiAgICAweDEKKworI2RlZmluZSBJT1AzMzFfUEJJU1JfQk9PUl9FUlIgMHgxCisKKworCisvKiBQZXJpcGhlcmFsIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcgdW5pdCAweDAwMDAwNzAwIHRocm91Z2ggMHgwMDA3N0YgKi8KKy8qIEludGVybmFsIGFyYml0cmF0aW9uIHVuaXQgMHgwMDAwMDc4MCB0aHJvdWdoIDB4MDAwN0JGICovCisKKy8qIEludGVycnVwdCBDb250cm9sbGVyICovCisjZGVmaW5lIElPUDMzMV9JTlRDVEwwICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDc5MCkKKyNkZWZpbmUgSU9QMzMxX0lOVENUTDEgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwNzk0KQorI2RlZmluZSBJT1AzMzFfSU5UU1RSMCAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA3OTgpCisjZGVmaW5lIElPUDMzMV9JTlRTVFIxICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDc5QykKKyNkZWZpbmUgSU9QMzMxX0lJTlRTUkMwICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwN0EwKQorI2RlZmluZSBJT1AzMzFfSUlOVFNSQzEgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA3QTQpCisjZGVmaW5lIElPUDMzMV9GSU5UU1JDMCAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDdBOCkKKyNkZWZpbmUgSU9QMzMxX0ZJTlRTUkMxICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwN0FDKQorI2RlZmluZSBJT1AzMzFfSVBSMCAgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA3QjApCisjZGVmaW5lIElPUDMzMV9JUFIxICAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDdCNCkKKyNkZWZpbmUgSU9QMzMxX0lQUjIgICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwN0I4KQorI2RlZmluZSBJT1AzMzFfSVBSMyAgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA3QkMpCisjZGVmaW5lIElPUDMzMV9JTlRCQVNFICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDdDMCkKKyNkZWZpbmUgSU9QMzMxX0lOVFNJWkUgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwN0M0KQorI2RlZmluZSBJT1AzMzFfSUlOVFZFQyAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA3QzgpCisjZGVmaW5lIElPUDMzMV9GSU5UVkVDICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDdDQykKKworCisvKiBUaW1lcnMgKi8KKworI2RlZmluZSBJT1AzMzFfVFVfVE1SMAkJKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwN0QwKQorI2RlZmluZSBJT1AzMzFfVFVfVE1SMQkJKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwN0Q0KQorCisjZGVmaW5lIElPUDMzMV9UTVJfVEMJCTB4MDEKKyNkZWZpbmUJSU9QMzMxX1RNUl9FTgkJMHgwMgorI2RlZmluZSBJT1AzMzFfVE1SX1JFTE9BRAkweDA0CisjZGVmaW5lCUlPUDMzMV9UTVJfUFJJVklMRUdFRAkweDA5CisKKyNkZWZpbmUJSU9QMzMxX1RNUl9SQVRJT18xXzEJMHgwMAorI2RlZmluZQlJT1AzMzFfVE1SX1JBVElPXzRfMQkweDEwCisjZGVmaW5lCUlPUDMzMV9UTVJfUkFUSU9fOF8xCTB4MjAKKyNkZWZpbmUJSU9QMzMxX1RNUl9SQVRJT18xNl8xCTB4MzAKKworI2RlZmluZSBJT1AzMzFfVFVfVENSMCAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA3RDgpCisjZGVmaW5lIElPUDMzMV9UVV9UQ1IxICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDdEQykKKyNkZWZpbmUgSU9QMzMxX1RVX1RSUjAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwN0UwKQorI2RlZmluZSBJT1AzMzFfVFVfVFJSMSAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA3RTQpCisjZGVmaW5lIElPUDMzMV9UVV9USVNSICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDdFOCkKKyNkZWZpbmUgSU9QMzMxX1RVX1dEVENSICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwN0VDKQorCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9JT1AzMzEpCisjZGVmaW5lCUlPUDMzMV9USUNLX1JBVEUJMjY2MDAwMDAwCS8qIDI2NiBNSHogSUIgY2xvY2sgKi8KKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfSU9QMzMxX1NURVBEKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX0lRODAzMzMpCisjdW5kZWYgSU9QMzMxX1RJQ0tfUkFURQorI2RlZmluZSBJT1AzMzFfVElDS19SQVRFCTMzMzAwMDAwMAkvKiAzMzMgTWh6IElCIGNsb2NrICovCisjZW5kaWYKKworLyogQXBwbGljYXRpb24gYWNjZWxlcmF0b3IgdW5pdCAweDAwMDAwODAwIC0gMHgwMDAwMDhGRiAqLworI2RlZmluZSBJT1AzMzFfQUFVX0FDUiAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwODAwKQorI2RlZmluZSBJT1AzMzFfQUFVX0FTUiAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwODA0KQorI2RlZmluZSBJT1AzMzFfQUFVX0FEQVIgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwODA4KQorI2RlZmluZSBJT1AzMzFfQUFVX0FOREFSICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwODBDKQorI2RlZmluZSBJT1AzMzFfQUFVX1NBUjEgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwODEwKQorI2RlZmluZSBJT1AzMzFfQUFVX1NBUjIgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwODE0KQorI2RlZmluZSBJT1AzMzFfQUFVX1NBUjMgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwODE4KQorI2RlZmluZSBJT1AzMzFfQUFVX1NBUjQgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwODFDKQorI2RlZmluZSBJT1AzMzFfQUFVX1NBUjUgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwODJDKQorI2RlZmluZSBJT1AzMzFfQUFVX1NBUjYgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwODMwKQorI2RlZmluZSBJT1AzMzFfQUFVX1NBUjcgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwODM0KQorI2RlZmluZSBJT1AzMzFfQUFVX1NBUjggICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwODM4KQorI2RlZmluZSBJT1AzMzFfQUFVX1NBUjkgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwODQwKQorI2RlZmluZSBJT1AzMzFfQUFVX1NBUjEwICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwODQ0KQorI2RlZmluZSBJT1AzMzFfQUFVX1NBUjExICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwODQ4KQorI2RlZmluZSBJT1AzMzFfQUFVX1NBUjEyICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwODRDKQorI2RlZmluZSBJT1AzMzFfQUFVX1NBUjEzICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwODUwKQorI2RlZmluZSBJT1AzMzFfQUFVX1NBUjE0ICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwODU0KQorI2RlZmluZSBJT1AzMzFfQUFVX1NBUjE1ICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwODU4KQorI2RlZmluZSBJT1AzMzFfQUFVX1NBUjE2ICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwODVDKQorI2RlZmluZSBJT1AzMzFfQUFVX1NBUjE3ICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwODY0KQorI2RlZmluZSBJT1AzMzFfQUFVX1NBUjE4ICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwODY4KQorI2RlZmluZSBJT1AzMzFfQUFVX1NBUjE5ICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwODZDKQorI2RlZmluZSBJT1AzMzFfQUFVX1NBUjIwICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwODcwKQorI2RlZmluZSBJT1AzMzFfQUFVX1NBUjIxICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwODc0KQorI2RlZmluZSBJT1AzMzFfQUFVX1NBUjIyICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwODc4KQorI2RlZmluZSBJT1AzMzFfQUFVX1NBUjIzICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwODdDKQorI2RlZmluZSBJT1AzMzFfQUFVX1NBUjI0ICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwODgwKQorI2RlZmluZSBJT1AzMzFfQUFVX1NBUjI1ICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwODg4KQorI2RlZmluZSBJT1AzMzFfQUFVX1NBUjI2ICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwODhDKQorI2RlZmluZSBJT1AzMzFfQUFVX1NBUjI3ICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwODkwKQorI2RlZmluZSBJT1AzMzFfQUFVX1NBUjI4ICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwODk0KQorI2RlZmluZSBJT1AzMzFfQUFVX1NBUjI5ICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwODk4KQorI2RlZmluZSBJT1AzMzFfQUFVX1NBUjMwICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwODlDKQorI2RlZmluZSBJT1AzMzFfQUFVX1NBUjMxICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwOEEwKQorI2RlZmluZSBJT1AzMzFfQUFVX1NBUjMyICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwOEE0KQorI2RlZmluZSBJT1AzMzFfQUFVX0RBUiAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwODIwKQorI2RlZmluZSBJT1AzMzFfQUFVX0FCQ1IgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwODI0KQorI2RlZmluZSBJT1AzMzFfQUFVX0FEQ1IgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwODI4KQorI2RlZmluZSBJT1AzMzFfQUFVX0VEQ1IwICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwODNjKQorI2RlZmluZSBJT1AzMzFfQUFVX0VEQ1IxICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwODYwKQorI2RlZmluZSBJT1AzMzFfQUFVX0VEQ1IyICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwODg0KQorCisKKyNkZWZpbmUgSU9QMzMxX1NQRFNDUgkgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMTVDMCkKKyNkZWZpbmUgSU9QMzMxX1BQRFNDUgkgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMTVDOCkKKy8qIFNTUCBzZXJpYWwgcG9ydCB1bml0IDB4MDAwMDE2MDAgLSAweDAwMDAxNjdGICovCisKKy8qIEkyQyBidXMgaW50ZXJmYWNlIHVuaXQgMHgwMDAwMTY4MCAtIDB4MDAwMDE2RkYgKi8KKy8qIGZvciBJMkMgYml0IGRlZnMgc2VlIGRyaXZlcnMvaTJjL2kyYy1pb3AzeHguaCAqLworCisjZGVmaW5lIElPUDMzMV9JQ1IwICAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMTY4MCkKKyNkZWZpbmUgSU9QMzMxX0lTUjAgICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAxNjg0KQorI2RlZmluZSBJT1AzMzFfSVNBUjAgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDE2ODgpCisjZGVmaW5lIElPUDMzMV9JREJSMCAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMTY4QykKKy8qIFJlc2VydmVkIDB4MDAwMDE2OTAgKi8KKyNkZWZpbmUgSU9QMzMxX0lCTVIwICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAxNjk0KQorLyogUmVzZXJ2ZWQgMHgwMDAwMTY5OCAqLworLyogUmVzZXJ2ZWQgMHgwMDAwMTY5QyAqLworI2RlZmluZSBJT1AzMzFfSUNSMSAgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDE2QTApCisjZGVmaW5lIElPUDMzMV9JU1IxICAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMTZBNCkKKyNkZWZpbmUgSU9QMzMxX0lTQVIxICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAxNkE4KQorI2RlZmluZSBJT1AzMzFfSURCUjEgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDE2QUMpCisjZGVmaW5lIElPUDMzMV9JQk1SMSAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMTZCNCkKKy8qIFJlc2VydmVkIDB4MDAwMDE2QjggdGhyb3VnaCAweDAwMDAxNkZGICovCisKKy8qIDB4MDAwMDE3MDAgdGhyb3VnaCAweDAwMDAxNzJDICBVQVJUIDAgKi8KKworLyogUmVzZXJ2ZWQgMHgwMDAwMTczMCB0aHJvdWdoIDB4MDAwMDE3M0YgKi8KKworLyogMHgwMDAwMTc0MCB0aHJvdWdoIDB4MDAwMDE3NkMgVUFSVCAxICovCisKKyNkZWZpbmUgSU9QMzMxX1VBUlQwX1BIWVMgIChJT1AzMzFfUEhZU19NRU1fQkFTRSB8IDB4MDAwMDE3MDApCS8qIFVBUlQgIzEgcGh5c2ljYWwgKi8KKyNkZWZpbmUgSU9QMzMxX1VBUlQxX1BIWVMgIChJT1AzMzFfUEhZU19NRU1fQkFTRSB8IDB4MDAwMDE3NDApCS8qIFVBUlQgIzIgcGh5c2ljYWwgKi8KKyNkZWZpbmUgSU9QMzMxX1VBUlQwX1ZJUlQgIChJT1AzMzFfVklSVF9NRU1fQkFTRSB8IDB4MDAwMDE3MDApIC8qIFVBUlQgIzEgdmlydHVhbCBhZGRyICovCisjZGVmaW5lIElPUDMzMV9VQVJUMV9WSVJUICAoSU9QMzMxX1ZJUlRfTUVNX0JBU0UgfCAweDAwMDAxNzQwKSAvKiBVQVJUICMyIHZpcnR1YWwgYWRkciAqLworCisvKiBSZXNlcnZlZCAweDAwMDAxNzcwIHRocm91Z2ggMHgwMDAwMTc3RiAqLworCisvKiBHZW5lcmFsIFB1cnBvc2UgSS9PIFJlZ2lzdGVycyAqLworI2RlZmluZSBJT1AzMzFfR1BPRSAgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDE3ODApCisjZGVmaW5lIElPUDMzMV9HUElEICAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMTc4NCkKKyNkZWZpbmUgSU9QMzMxX0dQT0QgICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAxNzg4KQorCisvKiBSZXNlcnZlZCAweDAwMDAxNzhjIHRocm91Z2ggMHgwMDAwMTlmZiAqLworCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitleHRlcm4gdm9pZCBpb3AzMzFfbWFwX2lvKHZvaWQpOworZXh0ZXJuIHZvaWQgaW9wMzMxX2luaXRfaXJxKHZvaWQpOworZXh0ZXJuIHZvaWQgaW9wMzMxX3RpbWVfaW5pdCh2b2lkKTsKKyNlbmRpZgorCisjZW5kaWYgLy8gX0lPUDMzMV9IV19IXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L2lxMzEyNDQuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC9pcTMxMjQ0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE3N2NmYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC9pcTMxMjQ0LmgKQEAgLTAsMCArMSwyNCBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtL2FyY2gtaW9wM3h4L2lxMzEyNDQuaAorICoKKyAqIEludGVsIElRMzEyNDQgZXZhbHVhdGlvbiBib2FyZCByZWdpc3RlcnMKKyAqLworCisjaWZuZGVmIF9JUTMxMjQ0X0hfCisjZGVmaW5lIF9JUTMxMjQ0X0hfCisKKyNkZWZpbmUJSVEzMTI0NF9GTEFTSEJBU0UJMHhmMDAwMDAwMAkvKiBGbGFzaCAqLworI2RlZmluZQlJUTMxMjQ0X0ZMQVNIU0laRQkweDAwODAwMDAwCisjZGVmaW5lCUlRMzEyNDRfRkxBU0hXSURUSAkyCisKKyNkZWZpbmUgSVEzMTI0NF9VQVJUCQkweGZlODAwMDAwCS8qIFVBUlQgIzEgKi8KKyNkZWZpbmUgSVEzMTI0NF83U0VHXzEJCTB4ZmU4NDAwMDAJLyogNy1TZWdtZW50IE1TQiAqLworI2RlZmluZSBJUTMxMjQ0XzdTRUdfMAkJMHhmZTg1MDAwMAkvKiA3LVNlZ21lbnQgTFNCIChXTykgKi8KKyNkZWZpbmUgSVEzMTI0NF9ST1RBUllfU1cJMHhmZThkMDAwMAkvKiBSb3RhcnkgU3dpdGNoICovCisjZGVmaW5lIElRMzEyNDRfQkFUVF9TVEFUCTB4ZmU4ZjAwMDAJLyogQmF0dGVyeSBTdGF0dXMgKi8KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK2V4dGVybiB2b2lkIGlxMzEyNDRfbWFwX2lvKHZvaWQpOworI2VuZGlmCisKKyNlbmRpZgkvLyBfSVEzMTI0NF9IXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L2lxODAzMjEuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC9pcTgwMzIxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I4NzI1OQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC9pcTgwMzIxLmgKQEAgLTAsMCArMSwyNCBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtL2FyY2gtaW9wM3h4L2lxODAzMjEuaAorICoKKyAqIEludGVsIElRODAzMjEgZXZhbHVhdGlvbiBib2FyZCByZWdpc3RlcnMKKyAqLworCisjaWZuZGVmIF9JUTgwMzIxX0hfCisjZGVmaW5lIF9JUTgwMzIxX0hfCisKKyNkZWZpbmUJSVE4MDMyMV9GTEFTSEJBU0UJMHhmMDAwMDAwMAkvKiBGbGFzaCAqLworI2RlZmluZQlJUTgwMzIxX0ZMQVNIU0laRQkweDAwODAwMDAwCisjZGVmaW5lCUlRODAzMjFfRkxBU0hXSURUSAkxCisKKyNkZWZpbmUgSVE4MDMyMV9VQVJUCQkweGZlODAwMDAwCS8qIFVBUlQgIzEgKi8KKyNkZWZpbmUgSVE4MDMyMV83U0VHXzEJCTB4ZmU4NDAwMDAJLyogNy1TZWdtZW50IE1TQiAqLworI2RlZmluZSBJUTgwMzIxXzdTRUdfMAkJMHhmZTg1MDAwMAkvKiA3LVNlZ21lbnQgTFNCIChXTykgKi8KKyNkZWZpbmUgSVE4MDMyMV9ST1RBUllfU1cJMHhmZThkMDAwMAkvKiBSb3RhcnkgU3dpdGNoICovCisjZGVmaW5lIElRODAzMjFfQkFUVF9TVEFUCTB4ZmU4ZjAwMDAJLyogQmF0dGVyeSBTdGF0dXMgKi8KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK2V4dGVybiB2b2lkIGlxODAzMjFfbWFwX2lvKHZvaWQpOworI2VuZGlmCisKKyNlbmRpZgkvLyBfSVE4MDMyMV9IXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L2lxODAzMzEuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC9pcTgwMzMxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY2OGU3OAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC9pcTgwMzMxLmgKQEAgLTAsMCArMSwyMyBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtL2FyY2gtaW9wM3h4L2lxODAzMzEuaAorICoKKyAqIEludGVsIElRODAzMzEgZXZhbHVhdGlvbiBib2FyZCByZWdpc3RlcnMKKyAqLworCisjaWZuZGVmIF9JUTgwMzMxX0hfCisjZGVmaW5lIF9JUTgwMzMxX0hfCisKKyNkZWZpbmUJSVE4MDMzMV9GTEFTSEJBU0UJMHhjMDAwMDAwMAkvKiBGbGFzaCAqLworI2RlZmluZQlJUTgwMzMxX0ZMQVNIU0laRQkweDAwODAwMDAwCisjZGVmaW5lCUlRODAzMzFfRkxBU0hXSURUSAkxCisKKyNkZWZpbmUgSVE4MDMzMV83U0VHXzEJCTB4Y2U4NDAwMDAJLyogNy1TZWdtZW50IE1TQiAqLworI2RlZmluZSBJUTgwMzMxXzdTRUdfMAkJMHhjZTg1MDAwMAkvKiA3LVNlZ21lbnQgTFNCIChXTykgKi8KKyNkZWZpbmUgSVE4MDMzMV9ST1RBUllfU1cJMHhjZThkMDAwMAkvKiBSb3RhcnkgU3dpdGNoICovCisjZGVmaW5lIElRODAzMzFfQkFUVF9TVEFUCTB4Y2U4ZjAwMDAJLyogQmF0dGVyeSBTdGF0dXMgKi8KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK2V4dGVybiB2b2lkIGlxODAzMzFfbWFwX2lvKHZvaWQpOworI2VuZGlmCisKKyNlbmRpZgkvLyBfSVE4MDMzMV9IXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L2lxODAzMzIuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC9pcTgwMzMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTVmZmYxNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC9pcTgwMzMyLmgKQEAgLTAsMCArMSwyMyBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtL2FyY2gtaW9wM3h4L2lxODAzMzIuaAorICoKKyAqIEludGVsIElRODAzMzIgZXZhbHVhdGlvbiBib2FyZCByZWdpc3RlcnMKKyAqLworCisjaWZuZGVmIF9JUTgwMzMyX0hfCisjZGVmaW5lIF9JUTgwMzMyX0hfCisKKyNkZWZpbmUJSVE4MDMzMl9GTEFTSEJBU0UJMHhjMDAwMDAwMAkvKiBGbGFzaCAqLworI2RlZmluZQlJUTgwMzMyX0ZMQVNIU0laRQkweDAwODAwMDAwCisjZGVmaW5lCUlRODAzMzJfRkxBU0hXSURUSAkxCisKKyNkZWZpbmUgSVE4MDMzMl83U0VHXzEJCTB4Y2U4NDAwMDAJLyogNy1TZWdtZW50IE1TQiAqLworI2RlZmluZSBJUTgwMzMyXzdTRUdfMAkJMHhjZTg1MDAwMAkvKiA3LVNlZ21lbnQgTFNCIChXTykgKi8KKyNkZWZpbmUgSVE4MDMzMl9ST1RBUllfU1cJMHhjZThkMDAwMAkvKiBSb3RhcnkgU3dpdGNoICovCisjZGVmaW5lIElRODAzMzJfQkFUVF9TVEFUCTB4Y2U4ZjAwMDAJLyogQmF0dGVyeSBTdGF0dXMgKi8KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK2V4dGVybiB2b2lkIGlxODAzMzJfbWFwX2lvKHZvaWQpOworI2VuZGlmCisKKyNlbmRpZgkvLyBfSVE4MDMzMl9IXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L2lycXMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC9pcnFzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJjMDNmNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC9pcnFzLmgKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC9pcnFzLmgKKyAqCisgKiBDb3B5cmlnaHQ6CShDKSAyMDAxLTIwMDMgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworLyoKKyAqIENoaXBzZXQtc3BlY2lmaWMgYml0cworICovCisjaWZkZWYgQ09ORklHX0FSQ0hfSU9QMzIxCisjaW5jbHVkZSAiaW9wMzIxLWlycXMuaCIKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0FSQ0hfSU9QMzMxCisjaW5jbHVkZSAiaW9wMzMxLWlycXMuaCIKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L21lbW9yeS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L21lbW9yeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjNDczNWMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvbWVtb3J5LmgKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC9tZW1vcnkuaAorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9NRU1PUllfSAorI2RlZmluZSBfX0FTTV9BUkNIX01FTU9SWV9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKworLyoKKyAqIFBoeXNpY2FsIERSQU0gb2Zmc2V0LgorICovCisjaWZuZGVmIENPTkZJR19BUkNIX0lPUDMzMQorI2RlZmluZSBQSFlTX09GRlNFVAkoMHhhMDAwMDAwMFVMKQorI2Vsc2UKKyNkZWZpbmUgUEhZU19PRkZTRVQJKDB4MDAwMDAwMDBVTCkKKyNlbmRpZgorCisvKgorICogVmlydHVhbCB2aWV3IDwtPiBQQ0kgRE1BIHZpZXcgbWVtb3J5IGFkZHJlc3MgdHJhbnNsYXRpb25zCisgKiB2aXJ0X3RvX2J1czogVXNlZCB0byB0cmFuc2xhdGUgdGhlIHZpcnR1YWwgYWRkcmVzcyB0byBhbgorICoJCWFkZHJlc3Mgc3VpdGFibGUgdG8gYmUgcGFzc2VkIHRvIHNldF9kbWFfYWRkcgorICogYnVzX3RvX3ZpcnQ6IFVzZWQgdG8gY29udmVydCBhbiBhZGRyZXNzIGZvciBETUEgb3BlcmF0aW9ucworICoJCXRvIGFuIGFkZHJlc3MgdGhhdCB0aGUga2VybmVsIGNhbiB1c2UuCisgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX0lPUDMyMSkKKworI2RlZmluZSBfX3ZpcnRfdG9fYnVzKHgpCSgoKF9fdmlydF90b19waHlzKHgpKSAmIH4oKklPUDMyMV9JQVRWUjIpKSB8ICgoKklPUDMyMV9JQUJBUjIpICYgMHhmZmZmZmZmMCkpCisjZGVmaW5lIF9fYnVzX3RvX3ZpcnQoeCkgICAgKF9fcGh5c190b192aXJ0KCgoeCkgJiB+KCpJT1AzMjFfSUFMUjIpKSB8ICggKklPUDMyMV9JQVRWUjIpKSkKKworI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9JT1AzMzEpCisKKyNkZWZpbmUgX192aXJ0X3RvX2J1cyh4KQkoKChfX3ZpcnRfdG9fcGh5cyh4KSkgJiB+KCpJT1AzMzFfSUFUVlIyKSkgfCAoKCpJT1AzMzFfSUFCQVIyKSAmIDB4ZmZmZmZmZjApKQorI2RlZmluZSBfX2J1c190b192aXJ0KHgpICAgIChfX3BoeXNfdG9fdmlydCgoKHgpICYgfigqSU9QMzMxX0lBTFIyKSkgfCAoICpJT1AzMzFfSUFUVlIyKSkpCisKKyNlbmRpZgorCisjZGVmaW5lIFBGTl9UT19OSUQoYWRkcikJKDApCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L3BhcmFtLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2Y0MDRlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L3BhcmFtLmgKQEAgLTAsMCArMSwzIEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC9wYXJhbS5oCisgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC9zeXN0ZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjZhZThjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L3N5c3RlbS5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvc3lzdGVtLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2lkbGUodm9pZCkKK3sKKwljcHVfZG9faWRsZSgpOworfQorCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSkKK3sKKyNpZmRlZiBDT05GSUdfQVJDSF9JT1AzMjEKKyAgICAqSU9QMzIxX1BDU1IgPSAweDMwOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQVJDSF9JT1AzMzEKKyAgICAqSU9QMzMxX1BDU1IgPSAweDMwOworI2VuZGlmCisKKwlpZiAoIDEgJiYgbW9kZSA9PSAncycpIHsKKwkJLyogSnVtcCBpbnRvIFJPTSBhdCBhZGRyZXNzIDAgKi8KKwkJY3B1X3Jlc2V0KDApOworCX0gZWxzZSB7CisJCS8qIE5vIG9uLWNoaXAgcmVzZXQgY2FwYWJpbGl0eSAqLworCQljcHVfcmVzZXQoMCk7CisJfQorfQorCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvdGltZXguaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC90aW1leC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0MTg3ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvdGltZXguaApAQCAtMCwwICsxLDIxIEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L3RpbWV4LmgKKyAqCisgKiBJT1AzeHggYXJjaGl0ZWN0dXJlIHRpbWV4IHNwZWNpZmljYXRpb25zCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9JUTgwMzIxKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX0lRMzEyNDQpCisKKyNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFIElPUDMyMV9USUNLX1JBVEUKKworI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9JUTgwMzMxKSB8fCBkZWZpbmVkKENPTkZJR19NQUNIX0lRODAzMzIpCisKKyNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFIElPUDMzMV9USUNLX1JBVEUKKworI2Vsc2UKKworI2Vycm9yICJObyBJT1AzeHggdGltZXggaW5mb3JtYXRpb24gZm9yIHRoaXMgYXJjaGl0ZWN0dXJlIgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC91bmNvbXByZXNzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvdW5jb21wcmVzcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyYjg4NzYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvdW5jb21wcmVzcy5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L3VuY29tcHJlc3MuaAorICovCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfcmVnLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisKKyNpZmRlZiBDT05GSUdfQVJDSF9JT1AzMjEKKyNkZWZpbmUgVVRZUEUgdW5zaWduZWQgY2hhciAqCisjZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX0lPUDMzMSkKKyNkZWZpbmUgVVRZUEUgdTMyICoKKyNlbHNlCisjZXJyb3IgIk1pc3NpbmcgSU9QM3h4IGFyY2ggdHlwZSBkZWYiCisjZW5kaWYKKworc3RhdGljIHZvbGF0aWxlIFVUWVBFIHVhcnRfYmFzZTsKKworI2RlZmluZSBUWF9ET05FIChVQVJUX0xTUl9URU1UfFVBUlRfTFNSX1RIUkUpCisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgcHV0YyhjaGFyIGMpCit7CisJd2hpbGUgKCh1YXJ0X2Jhc2VbVUFSVF9MU1JdICYgVFhfRE9ORSkgIT0gVFhfRE9ORSk7CisJKnVhcnRfYmFzZSA9IGM7Cit9CisKKy8qCisgKiBUaGlzIGRvZXMgbm90IGFwcGVuZCBhIG5ld2xpbmUKKyAqLworc3RhdGljIHZvaWQgcHV0c3RyKGNvbnN0IGNoYXIgKnMpCit7CisJd2hpbGUgKCpzKSB7CisJCXB1dGMoKnMpOworCQlpZiAoKnMgPT0gJ1xuJykKKwkJCXB1dGMoJ1xyJyk7CisJCXMrKzsKKwl9Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19hcmNoX2RlY29tcF9zZXR1cCh1bnNpZ25lZCBsb25nIGFyY2hfaWQpCit7CisgICAgICAgIGlmKG1hY2hpbmVfaXNfaXE4MDMyMSgpKQorCQkJdWFydF9iYXNlID0gKHZvbGF0aWxlIFVUWVBFKUlRODAzMjFfVUFSVDsKKwkJZWxzZSBpZihtYWNoaW5lX2lzX2lxMzEyNDQoKSkKKwkJCXVhcnRfYmFzZSA9ICh2b2xhdGlsZSBVVFlQRSlJUTMxMjQ0X1VBUlQ7CisJCWVsc2UgaWYobWFjaGluZV9pc19pcTgwMzMxKCkgfHwgbWFjaGluZV9pc19pcTgwMzMyKCkpCisJCQl1YXJ0X2Jhc2UgPSAodm9sYXRpbGUgVVRZUEUpSU9QMzMxX1VBUlQwX1BIWVM7CisJCWVsc2UKKwkJCXVhcnRfYmFzZSA9ICh2b2xhdGlsZSBVVFlQRSkweGZlODAwMDAwOworfQorCisvKgorICogbm90aGluZyB0byBkbworICovCisjZGVmaW5lIGFyY2hfZGVjb21wX3NldHVwKCkJX19hcmNoX2RlY29tcF9zZXR1cChhcmNoX2lkKQorI2RlZmluZSBhcmNoX2RlY29tcF93ZG9nKCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC92bWFsbG9jLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvdm1hbGxvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjMWQyYTkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvdm1hbGxvYy5oCkBAIC0wLDAgKzEsMTkgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvdm1hbGxvYy5oCisgKi8KKworLyoKKyAqIEp1c3QgYW55IGFyYml0cmFyeSBvZmZzZXQgdG8gdGhlIHN0YXJ0IG9mIHRoZSB2bWFsbG9jIFZNIGFyZWE6IHRoZQorICogY3VycmVudCA4TUIgdmFsdWUganVzdCBtZWFucyB0aGF0IHRoZXJlIHdpbGwgYmUgYSA4TUIgImhvbGUiIGFmdGVyIHRoZQorICogcGh5c2ljYWwgbWVtb3J5IHVudGlsIHRoZSBrZXJuZWwgdmlydHVhbCBtZW1vcnkgc3RhcnRzLiAgVGhhdCBtZWFucyB0aGF0CisgKiBhbnkgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgd2lsbCBob3BlZnVsbHkgYmUgY2F1Z2h0LgorICogVGhlIHZtYWxsb2MoKSByb3V0aW5lcyBsZWF2ZXMgYSBob2xlIG9mIDRrQiBiZXR3ZWVuIGVhY2ggdm1hbGxvY2VkCisgKiBhcmVhIGZvciB0aGUgc2FtZSByZWFzb24uIDspCisgKi8KKyNkZWZpbmUgVk1BTExPQ19PRkZTRVQJICAoOCoxMDI0KjEwMjQpCisjZGVmaW5lIFZNQUxMT0NfU1RBUlQJICAoKCh1bnNpZ25lZCBsb25nKWhpZ2hfbWVtb3J5ICsgVk1BTExPQ19PRkZTRVQpICYgfihWTUFMTE9DX09GRlNFVC0xKSkKKyNkZWZpbmUgVk1BTExPQ19WTUFERFIoeCkgKCh1bnNpZ25lZCBsb25nKSh4KSkKKy8vI2RlZmluZSBWTUFMTE9DX0VORCAgICAgICAoMHhlODAwMDAwMCkKKy8qIGluY3JlYXNlIHVzYWJsZSBwaHlzaWNhbCBSQU0gdG8gfjk5Mk0gcGVyIFJNSyAqLworI2RlZmluZSBWTUFMTE9DX0VORCAgICAgICAoMHhmZTAwMDAwMCkKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjAwMC9kZWJ1Zy1tYWNyby5TIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjAwMC9kZWJ1Zy1tYWNyby5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MzFlMDgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyMDAwL2RlYnVnLW1hY3JvLlMKQEAgLTAsMCArMSw0MCBAQAorLyogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjAwMC9kZWJ1Zy1tYWNyby5TCisgKgorICogRGVidWdnaW5nIG1hY3JvIGluY2x1ZGUgaGVhZGVyCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NC0xOTk5IFJ1c3NlbGwgS2luZworICogIE1vdmVkIGZyb20gbGludXgvYXJjaC9hcm0va2VybmVsL2RlYnVnLlMgYnkgQmVuIERvb2tzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisqLworCisJCS5tYWNybyAgYWRkcnVhcnQscngKKwkJbXJjCXAxNSwgMCwgXHJ4LCBjMSwgYzAKKwkJdHN0CVxyeCwgIzEJCQlAIE1NVSBlbmFibGVkPworCQltb3ZlcQlccngsICMweGMwMDAwMDAwCUAgUGh5c2ljYWwgYmFzZQorCQltb3ZuZQlccngsICMweGZlMDAwMDAwCUAgdmlydHVhbCBiYXNlCisJCW9ycm5lCVxyeCwgXHJ4LCAjMHgwMGYwMDAwMAorCQlvcnIJXHJ4LCBccngsICMweDAwMDMwMDAwCisjaWZkZWYJX19BUk1FQl9fCisJCW9ycglccngsIFxyeCwgIzB4MDAwMDAwMDMKKyNlbmRpZgorCQkuZW5kbQorCisJCS5tYWNybwlzZW5kdWFydCxyZCxyeAorCQlzdHJiCVxyZCwgW1xyeF0KKwkJLmVuZG0KKworCQkubWFjcm8JYnVzeXVhcnQscmQscngKKzEwMDI6CQlsZHJiCVxyZCwgW1xyeCwgIzB4MTRdCisJCXRzdAlccmQsICMweDIwCisJCWJlcQkxMDAyYgorCQkuZW5kbQorCisJCS5tYWNybwl3YWl0dWFydCxyZCxyeAorCQlub3AKKwkJbm9wCisJCW5vcAorCQkuZW5kbQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjAwMC9kbWEuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDIwMDAvZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZiMzU2OAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDIwMDAvZG1hLmgKQEAgLTAsMCArMSwxOCBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDIwMDAvZG1hLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgSW50ZWwgQ29ycC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaWZuZGVmIF9fQVNNX0FSQ0hfRE1BX0gKKyNkZWZpbmUgX19BU01fQVJDSF9ETUFfSAorCisjZGVmaW5lIE1BWF9ETUFfQUREUkVTUwkJMHhmZmZmZmZmZgorCisvKiBObyBETUEgKi8KKyNkZWZpbmUgTUFYX0RNQV9DSEFOTkVMUwkwCisKKyNlbmRpZiAvKiBfQVNNX0FSQ0hfRE1BX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDIwMDAvZW5wMjYxMS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjAwMC9lbnAyNjExLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFhZTg4NgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDIwMDAvZW5wMjYxMS5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyMDAwL2VucDI2MTEuaAorICoKKyAqIFJlZ2lzdGVyIGFuZCBvdGhlciBkZWZpbmVzIGZvciBSYWRpc3lzIEVOUC0yNjExCisgKgorICogQ3JlYXRlZCAyMDA0IGJ5IExlbm5lcnQgQnV5dGVuaGVrIGZyb20gdGhlIGl4ZHAyeDAxIGNvZGUuICBUaGUKKyAqIG9yaWdpbmFsIHZlcnNpb24gY2FycmllcyB0aGUgZm9sbG93aW5nIG5vdGljZXM6CisgKgorICogT3JpZ2luYWwgQXV0aG9yOiBOYWVlbSBBZnphbCA8bmFlZW0ubS5hZnphbEBpbnRlbC5jb20+CisgKiBNYWludGFpbmVyOiBEZWVwYWsgU2F4ZW5hIDxkc2F4ZW5hQHBsZXhpdHkubmV0PgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMiBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDQgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgX19FTlAyNjExX0gKKyNkZWZpbmUgX19FTlAyNjExX0gKKworI2RlZmluZSBFTlAyNjExX0dQSU9fU0NMCTB4MDcKKyNkZWZpbmUgRU5QMjYxMV9HUElPX1NEQQkweDA2CisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyMDAwL2VudHJ5LW1hY3JvLlMgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyMDAwL2VudHJ5LW1hY3JvLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNhNGU0MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDIwMDAvZW50cnktbWFjcm8uUwpAQCAtMCwwICsxLDUzIEBACisvKgorICogaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjAwMC9lbnRyeS1tYWNyby5TCisgKgorICogTG93LWxldmVsIElSUSBoZWxwZXIgbWFjcm9zIGZvciBJWFAyMDAwLWJhc2VkIHBsYXRmb3JtcworICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKwkJLm1hY3JvICBkaXNhYmxlX2ZpcQorCQkuZW5kbQorCisJCS5tYWNybyAgZ2V0X2lycW5yX2FuZF9iYXNlLCBpcnFuciwgaXJxc3RhdCwgYmFzZSwgdG1wCisKKwkJbW92CVxpcnFuciwgIzB4MCAgICAgICAgICAgICAgQGNsZWFyIG91dCBpcnFuciBhcyBkZWZhdWx0CisgICAgICAgICAgICAgICAgbW92CVxiYXNlLCAjMHhmZTAwMDAwMAorCQlvcnIJXGJhc2UsIFxiYXNlLCAjMHgwMGUwMDAwMAorCQlvcnIJXGJhc2UsIFxiYXNlLCAjMHgwOAorCQlsZHIJXGlycXN0YXQsIFtcYmFzZV0gICAgICAgICBAIGdldCBpbnRlcnJ1cHRzCisKKwkJY21wCVxpcnFzdGF0LCAjMAorCQliZXEJMTAwMWYKKworCQljbHogICAgIFxpcnFuciwgXGlycXN0YXQKKwkJbW92ICAgICBcYmFzZSwgIzMxCisJCXN1YnMgICAgXGlycW5yLCBcYmFzZSwgXGlycW5yCisKKwkJLyoKKwkJICogV2UgaGFuZGxlIFBDSUEgYW5kIFBDSUIgaGVyZSBzbyB3ZSBkb24ndCBoYXZlIGFuCisJCSAqIGV4dHJhIGxheWVyIG9mIGNvZGUganVzdCB0byBjaGVjayB0aGVzZSB0d28gYml0cy4KKwkJICovCisJCWNtcAlcaXJxbnIsICNJUlFfSVhQMjAwMF9QQ0kKKwkJYm5lCTEwMDFmCisKKwkJbW92CVxiYXNlLCAjMHhmZTAwMDAwMAorCQlvcnIJXGJhc2UsIFxiYXNlLCAjMHgwMGMwMDAwMAorCQlvcnIJXGJhc2UsIFxiYXNlLCAjMHgwMDAwMDEwMAorCQlvcnIJXGJhc2UsIFxiYXNlLCAjMHgwMDAwMDA1OAorCQlsZHIJXGlycXN0YXQsIFtcYmFzZV0KKworCQltb3YJXHRtcCwgIygxPDwyNikKKwkJdHN0CVxpcnFzdGF0LCBcdG1wCisJCW1vdm5lCVxpcnFuciwgI0lSUV9JWFAyMDAwX1BDSUEKKwkJYm5lCTEwMDFmCisKKwkJbW92CVx0bXAsICMoMTw8MjcpCisJCXRzdAlcaXJxc3RhdCwgXHRtcAorCQltb3ZuZQlcaXJxbnIsICNJUlFfSVhQMjAwMF9QQ0lCCisKKzEwMDE6CisJCS5lbmRtCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDIwMDAvZ3Bpby5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjAwMC9ncGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ2MzRhZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDIwMDAvZ3Bpby5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyMDAwL2l4cDIwMDAtZ3Bpby5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAyIEludGVsIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlLCB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IAorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKy8qCisgKiBJWFAyMDAwIEdQSU8gaW4vb3V0LCBlZGdlL2xldmVsIGRldGVjdGlvbiBmb3IgSVJRczoKKyAqIElSUXMgYXJlIGdlbmVyYXRlZCBvbiBGYWxsaW5nLWVkZ2UsIFJpc2luZy1FZGdlLCBMZXZlbC1sb3csIExldmVsLUhpZ2gKKyAqIG9yIGJvdGggRmFsbGluZy1lZGdlIGFuZCBSaXNpbmctZWRnZS4gIAorICogVGhpcyBtdXN0IGJlIGNhbGxlZCAqYmVmb3JlKiB0aGUgY29ycmVzcG9uZGluZyBJUlEgaXMgcmVnaXN0ZXJkLgorICogVXNlIHRoaXMgaW5zdGVhZCBvZiBkaXJlY3RseSBzZXR0aW5nIHRoZSBHUElPIHJlZ2lzdGVycy4KKyAqIEdQSU9zIG1heSBhbHNvIGJlIHVzZWQgYXMgR1BJT3MgKGUuZy4gZm9yIGVtdWxhdGluZyBpMmMvc21iKQorICovCisjaWZuZGVmIF9BU01fQVJDSF9JWFAyMDAwX0dQSU9fSF8KKyNkZWZpbmUgX0FTTV9BUkNIX0lYUDIwMDBfR1BJT19IXworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2RlZmluZSBHUElPX09VVAkJCTB4MAorI2RlZmluZSBHUElPX0lOCQkJCTB4ODAKKworI2RlZmluZSBJWFAyMDAwX0dQSU9fTE9XCQkwCisjZGVmaW5lIElYUDIwMDBfR1BJT19ISUdICQkxCisKKyNkZWZpbmUgR1BJT19OT19FREdFUyAgICAgICAgICAgCTAKKyNkZWZpbmUgR1BJT19GQUxMSU5HX0VER0UgICAgICAgCTEKKyNkZWZpbmUgR1BJT19SSVNJTkdfRURHRSAgICAgICAgCTIKKyNkZWZpbmUgR1BJT19CT1RIX0VER0VTICAgICAgICAgCTMKKyNkZWZpbmUgR1BJT19MRVZFTF9MT1cgICAgICAgICAgCTQKKyNkZWZpbmUgR1BJT19MRVZFTF9ISUdIICAgICAgICAgCTgKKworZXh0ZXJuIHZvaWQgc2V0X0dQSU9fSVJRX2VkZ2UoaW50IGdwaW9fbnIsIGludCBlZGdlKTsKK2V4dGVybiB2b2lkIHNldF9HUElPX0lSUV9sZXZlbChpbnQgZ3Bpb19uciwgaW50IGxldmVsKTsKK2V4dGVybiB2b2lkIGdwaW9fbGluZV9jb25maWcoaW50IGxpbmUsIGludCBzdHlsZSk7CisKK3N0YXRpYyBpbmxpbmUgaW50IGdwaW9fbGluZV9nZXQoaW50IGxpbmUpCit7CisJcmV0dXJuICgoKCpJWFAyMDAwX0dQSU9fUExSKSA+PiBsaW5lKSAmIDEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ3Bpb19saW5lX3NldChpbnQgbGluZSwgaW50IHZhbHVlKQoreworCWlmICh2YWx1ZSA9PSBJWFAyMDAwX0dQSU9fSElHSCkgeworCQlpeHBfcmVnX3dyaXRlKElYUDIwMDBfR1BJT19QT1NSLCBCSVQobGluZSkpOworCX0gZWxzZSBpZiAodmFsdWUgPT0gSVhQMjAwMF9HUElPX0xPVykKKwkJaXhwX3JlZ193cml0ZShJWFAyMDAwX0dQSU9fUE9DUiwgQklUKGxpbmUpKTsKK30KKworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKyNlbmRpZiAvKiBBU01fQVJDSF9JWFAyMDAwX0dQSU9fSF8gKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjAwMC9oYXJkd2FyZS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjAwMC9oYXJkd2FyZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3ZWE3ODEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyMDAwL2hhcmR3YXJlLmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDIwMDAvaGFyZHdhcmUuaAorICoKKyAqIEhhcmR3YXJlIGRlZmluaXRpb25zIGZvciBJWFAyNDAwLzI4MDAgYmFzZWQgc3lzdGVtcworICoKKyAqIE9yaWdpbmFsIEF1dGhvcjogTmFlZW0gTSBBZnphbCA8bmFlZW0ubS5hZnphbEBpbnRlbC5jb20+CisgKgorICogTWFpbnRhaW5lcjogRGVlcGFrIFNheGVuYSA8ZHNheGVuYUBtdmlzdGEuY29tPgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMS0yMDAyIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNCBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX0hBUkRXQVJFX0hfXworI2RlZmluZSBfX0FTTV9BUkNIX0hBUkRXQVJFX0hfXworCisvKgorICogVGhpcyBuZWVkcyB0byBiZSBwbGF0Zm9ybS1zcGVjaWZpYz8KKyAqLworI2RlZmluZSBQQ0lCSU9TX01JTl9JTyAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIFBDSUJJT1NfTUlOX01FTSAgICAgICAgIDB4MDAwMDAwMDAKKworI2luY2x1ZGUgIml4cDIwMDAtcmVncy5oIgkvKiBDaGlwc2V0IFJlZ2lzdGVycyAqLworCisjZGVmaW5lIHBjaWJpb3NfYXNzaWduX2FsbF9idXNzZXMoKSAwCisKKy8qCisgKiBQbGF0Zm9ybSBoZWxwZXIgZnVuY3Rpb25zCisgKi8KKyNpbmNsdWRlICJwbGF0Zm9ybS5oIgorCisvKgorICogUGxhdGZvcm0tc3BlY2lmaWMgYml0cworICovCisjaW5jbHVkZSAiZW5wMjYxMS5oIgkJLyogRU5QLTI2MTEgKi8KKyNpbmNsdWRlICJpeGRwMngwMC5oIgkJLyogSVhEUDI0MDAvMjgwMCAqLworI2luY2x1ZGUgIml4ZHAyeDAxLmgiCQkvKiBJWERQMjQwMS8yODAxICovCisKKyNlbmRpZiAgLyogX0FTTV9BUkNIX0hBUkRXQVJFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjAwMC9pby5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjAwMC9pby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4ZTNjMmQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyMDAwL2lvLmgKQEAgLTAsMCArMSwxNTAgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyMDAwL2lvLmgKKyAqCisgKiBPcmlnaW5hbCBBdXRob3I6IE5hZWVtIE0gQWZ6YWwgPG5hZWVtLm0uYWZ6YWxAaW50ZWwuY29tPgorICogTWFpbnRhaW5lcjogRGVlcGFrIFNheGVuYSA8ZHNheGVuYUBwbGV4aXR5Lm5ldD4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgIEludGVsIENvcnAuCisgKiBDb3B5cmdpaHQgKEMpIDIwMDMtMjAwNCBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fQVNNX0FSTV9BUkNIX0lPX0gKKyNkZWZpbmUgX19BU01fQVJNX0FSQ0hfSU9fSAorCisjZGVmaW5lIElPX1NQQUNFX0xJTUlUCQkweGZmZmZmZmZmCisjZGVmaW5lIF9fbWVtX3BjaShhKQkJKGEpCisjZGVmaW5lIF9fX2lvKHApCQkoKHZvaWQgX19pb21lbSAqKSgocCkrSVhQMjAwMF9QQ0lfSU9fVklSVF9CQVNFKSkKKworLyoKKyAqIFRoZSBJWFAyNDAwIGJlZm9yZSByZXZpc2lvbiBCMCBhc3NlcnRzIGJ5dGUgbGFuZXMgZm9yIFBDSSBJL08KKyAqIHRyYW5zYWN0aW9ucyB0aGUgb3RoZXIgd2F5IHJvdW5kIChNRU0gdHJhbnNhY3Rpb25zIGRvbid0IGhhdmUgdGhpcworICogaXNzdWUpLCBzbyB3ZSBuZWVkIHRvIG92ZXJyaWRlIHRoZSBzdGFuZGFyZCBmdW5jdGlvbnMuICBCMCBhbmQgbGF0ZXIKKyAqIGhhdmUgYSBiaXQgdGhhdCBjYW4gYmUgc2V0IHRvIDEgdG8gZ2V0IHRoZSAncHJvcGVyJyBiZWhhdmlvciwgYnV0CisgKiBzaW5jZSB0aGF0IGlzbid0IGF2YWlsYWJsZSBvbiB0aGUgQT8gcmV2aXNpb25zIHdlIGp1c3Qga2VlcCBkb2luZworICogdGhpbmdzIG1hbnVhbGx5LgorICovCisjZGVmaW5lIGFsaWduYihhZGRyKQkJKHZvaWQgX19pb21lbSAqKSgodW5zaWduZWQgbG9uZylhZGRyIF4gMykKKyNkZWZpbmUgYWxpZ253KGFkZHIpCQkodm9pZCBfX2lvbWVtICopKCh1bnNpZ25lZCBsb25nKWFkZHIgXiAyKQorCisjZGVmaW5lIG91dGIodixwKQkJX19yYXdfd3JpdGViKCh2KSxhbGlnbmIoX19faW8ocCkpKQorI2RlZmluZSBvdXR3KHYscCkJCV9fcmF3X3dyaXRldygodiksYWxpZ253KF9fX2lvKHApKSkKKyNkZWZpbmUgb3V0bCh2LHApCQlfX3Jhd193cml0ZWwoKHYpLF9fX2lvKHApKQorCisjZGVmaW5lIGluYihwKQkJKHsgdW5zaWduZWQgaW50IF9fdiA9IF9fcmF3X3JlYWRiKGFsaWduYihfX19pbyhwKSkpOyBfX3Y7IH0pCisjZGVmaW5lIGludyhwKQkJXAorCSh7IHVuc2lnbmVkIGludCBfX3YgPSAoX19yYXdfcmVhZHcoYWxpZ253KF9fX2lvKHApKSkpOyBfX3Y7IH0pCisjZGVmaW5lIGlubChwKQkJXAorCSh7IHVuc2lnbmVkIGludCBfX3YgPSAoX19yYXdfcmVhZGwoX19faW8ocCkpKTsgX192OyB9KQorCisjZGVmaW5lIG91dHNiKHAsZCxsKQkJX19yYXdfd3JpdGVzYihhbGlnbmIoX19faW8ocCkpLGQsbCkKKyNkZWZpbmUgb3V0c3cocCxkLGwpCQlfX3Jhd193cml0ZXN3KGFsaWdudyhfX19pbyhwKSksZCxsKQorI2RlZmluZSBvdXRzbChwLGQsbCkJCV9fcmF3X3dyaXRlc2woX19faW8ocCksZCxsKQorCisjZGVmaW5lIGluc2IocCxkLGwpCQlfX3Jhd19yZWFkc2IoYWxpZ25iKF9fX2lvKHApKSxkLGwpCisjZGVmaW5lIGluc3cocCxkLGwpCQlfX3Jhd19yZWFkc3coYWxpZ253KF9fX2lvKHApKSxkLGwpCisjZGVmaW5lIGluc2wocCxkLGwpCQlfX3Jhd19yZWFkc2woX19faW8ocCksZCxsKQorCisKKyNpZmRlZiBDT05GSUdfQVJDSF9JWERQMlgwMQorLyoKKyAqIFRoaXMgaXMgYW4gdWdseSBoYWNrIGJ1dCB0aGUgQ1M4OTAwIG9uIHRoZSAyeDAxJ3MgZG9lcyBub3Qgc2l0IGluIGFueSBzb3J0CisgKiBvZiAiSS9PIHNwYWNlIiBhbmQgaXMganVzdCBkaXJlY3QgbWFwcGVkIGludG8gYSAzMi1iaXQtb25seSBhZGRyZXNzYWJsZQorICogYnVzLiBUaGUgYWRkcmVzcyBzcGFjZSBmb3IgdGhpcyBidXMgaXMgc3VjaCB0aGF0IHdlIGNhbid0IHJlYWxseSBlYXNpbHkKKyAqIG1ha2UgaXQgY29udGlndW91cyB0byB0aGUgUENJIEkvTyBhZGRyZXNzIHJhbmdlLCBhbmQgaXQgYWxzbyBkb2VzIG5vdAorICogbmVlZCBzd2FwcGluZyBsaWtlIFBDSSBhZGRyZXNzZXMgZG8gKElYRFAyeDAxIGlzIGEgQkUgcGxhdGZvcm0pLgorICogQi9DIG9mIHRoaXMgd2UgY2FuJ3QgdXNlIHRoZSBzdGFuZGFyZCBpbi9vdXQgZnVuY3Rpb25zIGFuZCBuZWVkIHRvCisgKiBydW50aW1lIGNoZWNrIGlmIHRoZSBpbmNvbWluZyBhZGRyZXNzIGlzIGEgUENJIGFkZHJlc3Mgb3IgZm9yCisgKiB0aGUgQ1M4OXgwLgorICovCisjdW5kZWYgaW53CisjdW5kZWYgb3V0dworI3VuZGVmIGluc3cKKyN1bmRlZiBvdXRzdworCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworc3RhdGljIGlubGluZSB2b2lkIGluc3codTMyIHB0ciwgdm9pZCAqYnVmLCBpbnQgbGVuZ3RoKQoreworCXJlZ2lzdGVyIHZvbGF0aWxlIHUzMiAqcG9ydCA9ICh2b2xhdGlsZSB1MzIgKilwdHI7CisKKwkvKgorCSAqIElzIHRoaXMgY3ljbGUgbWVhbnQgZm9yIHRoZSBDUzg5MDA/CisJICovCisJaWYgKChtYWNoaW5lX2lzX2l4ZHAyNDAxKCkgfHwgbWFjaGluZV9pc19peGRwMjgwMSgpKSAmJiAKKwkJKChwb3J0ID49IElYRFAyWDAxX0NTODkwMF9WSVJUX0JBU0UpICYmIAorCQkgKHBvcnQgPD0gSVhEUDJYMDFfQ1M4OTAwX1ZJUlRfRU5EKSkpIHsKKwkJdTggKmJ1ZjggPSAodTgqKWJ1ZjsKKwkJcmVnaXN0ZXIgdTMyIHRtcDMyOworCisJCWRvIHsKKwkJCXRtcDMyID0gKnBvcnQ7CisJCQkqYnVmOCsrID0gKHU4KXRtcDMyOworCQkJKmJ1ZjgrKyA9ICh1OCkodG1wMzIgPj4gOCk7CisJCX0gd2hpbGUoLS1sZW5ndGgpOworCisJCXJldHVybjsKKwl9CisKKwlfX3Jhd19yZWFkc3coYWxpZ253KF9fX2lvKHB0cikpLGJ1ZixsZW5ndGgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgb3V0c3codTMyIHB0ciwgdm9pZCAqYnVmLCBpbnQgbGVuZ3RoKQoreworCXJlZ2lzdGVyIHZvbGF0aWxlIHUzMiAqcG9ydCA9ICh2b2xhdGlsZSB1MzIgKilwdHI7CisKKwkvKgorCSAqIElzIHRoaXMgY3ljbGUgbWVhbnQgZm9yIHRoZSBDUzg5MDA/CisJICovCisJaWYgKChtYWNoaW5lX2lzX2l4ZHAyNDAxKCkgfHwgbWFjaGluZV9pc19peGRwMjgwMSgpKSAmJiAKKwkJKChwb3J0ID49IElYRFAyWDAxX0NTODkwMF9WSVJUX0JBU0UpICYmIAorCQkgKHBvcnQgPD0gSVhEUDJYMDFfQ1M4OTAwX1ZJUlRfRU5EKSkpIHsKKwkJcmVnaXN0ZXIgdTMyIHRtcDMyOworCQl1OCAqYnVmOCA9ICh1OCopYnVmOworCQlkbyB7CisJCQl0bXAzMiA9ICpidWY4Kys7CisJCQl0bXAzMiB8PSAoKmJ1ZjgrKykgPDwgODsKKwkJCSpwb3J0ID0gdG1wMzI7CisJCX0gd2hpbGUoLS1sZW5ndGgpOworCQlyZXR1cm47CisJfQorCisJX19yYXdfd3JpdGVzdyhhbGlnbncoX19faW8ocHRyKSksYnVmLGxlbmd0aCk7Cit9CisKKworc3RhdGljIGlubGluZSB1MTYgaW53KHUzMiBwdHIpCit7CisJcmVnaXN0ZXIgdm9sYXRpbGUgdTMyICpwb3J0ID0gKHZvbGF0aWxlIHUzMiAqKXB0cjsKKworCS8qCisJICogSXMgdGhpcyBjeWNsZSBtZWFudCBmb3IgdGhlIENTODkwMD8KKwkgKi8KKwlpZiAoKG1hY2hpbmVfaXNfaXhkcDI0MDEoKSB8fCBtYWNoaW5lX2lzX2l4ZHAyODAxKCkpICYmIAorCQkoKHBvcnQgPj0gSVhEUDJYMDFfQ1M4OTAwX1ZJUlRfQkFTRSkgJiYgCisJCSAocG9ydCA8PSBJWERQMlgwMV9DUzg5MDBfVklSVF9FTkQpKSkgeworCQlyZXR1cm4gKHUxNikoKnBvcnQpOyAgCisJfQorCisJcmV0dXJuIF9fcmF3X3JlYWR3KGFsaWdudyhfX19pbyhwdHIpKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvdXR3KHUxNiB2YWx1ZSwgdTMyIHB0cikKK3sKKwlyZWdpc3RlciB2b2xhdGlsZSB1MzIgKnBvcnQgPSAodm9sYXRpbGUgdTMyICopcHRyOworCisJaWYgKChtYWNoaW5lX2lzX2l4ZHAyNDAxKCkgfHwgbWFjaGluZV9pc19peGRwMjgwMSgpKSAmJiAKKwkJKChwb3J0ID49IElYRFAyWDAxX0NTODkwMF9WSVJUX0JBU0UpICYmIAorCQkgKHBvcnQgPD0gSVhEUDJYMDFfQ1M4OTAwX1ZJUlRfRU5EKSkpIHsKKwkJKnBvcnQgPSB2YWx1ZTsgIAorCQlyZXR1cm47CisJfQorCisJX19yYXdfd3JpdGV3KCh2YWx1ZSksYWxpZ253KF9fX2lvKHB0cikpKTsKK30KKyNlbmRpZgkvKiBJWERQMngwMSAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDIwMDAvaXJxLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyMDAwL2lycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhMDBiMjMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyMDAwL2lycS5oCkBAIC0wLDAgKzEsMTMgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjAwMC9pcnEuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDIgSW50ZWwgQ29ycC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNkZWZpbmUgZml4dXBfaXJxKGlycSkgIChpcnEpCisKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjAwMC9pcnFzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyMDAwL2lycXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGViOTZjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjAwMC9pcnFzLmgKQEAgLTAsMCArMSwxNzQgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyMDAwL2lycXMuaAorICoKKyAqIE9yaWdpbmFsIEF1dGhvcjogTmFlZW0gQWZ6YWwgPG5hZWVtLm0uYWZ6YWxAaW50ZWwuY29tPgorICogTWFpbnRhaW5lcjogRGVlcGFrIFNheGVuYSA8ZHNheGVuYUBwbGV4aXR5Lm5ldD4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA0IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqIAorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9JUlFTX0gKKyNkZWZpbmUgX0lSUVNfSAorCisvKgorICogRG8gTk9UIGFkZCAjaWZkZWYgTUFDSElORV9GT08gaW4gaGVyZS4KKyAqIFNpbXB5IGFkZCB5b3VyIG1hY2hpbmUgSVJRcyBoZXJlIGFuZCBpbmNyZWFzZSBOUl9JUlFTIGlmIG5lZWRlZCB0bworICogaG9sZCB5b3VyIG1hY2hpbmUncyBJUlEgdGFibGUuCisgKi8KKworLyoKKyAqIFNvbWUgaW50ZXJydXB0IG51bWJlcnMgZ28gdW51c2VkIGIvYyB0aGUgSVJRIG1hc2svdW1tYXNrL3N0YXR1cworICogcmVnaXN0ZXIgaGFzIHRob3NlIGJpdCByZXNlcnZlZC4gV2UganVzdCBtYXJrIHRob3NlIGludGVycnVwdHMKKyAqIGFzIGludmFsaWQgYW5kIHRoaXMgYWxsb3dzIHVzIHRvIGRvIG1hc2svdW5tYXNrIHdpdGggYSBzaW5nbGUKKyAqIHNoaWZ0IG9wZXJhdGlvbiBpbnN0ZWFkIG9mIGhhdmluZyB0byBtYXAgdGhlIElSUSBudW1iZXIgdG8KKyAqIGEgSFcgSVJRIG51bWJlci4KKyAqLworI2RlZmluZQlJUlFfSVhQMjAwMF9TT0ZUX0lOVAkJMCAvKiBzb2Z0IGludGVycnVwdCAqLworI2RlZmluZQlJUlFfSVhQMjAwMF9FUlJTVU0JCTEgLyogT1Igb2YgYWxsIGJpdHMgaW4gRXJyb3JTdGF0dXMgcmVnKi8KKyNkZWZpbmUJSVJRX0lYUDIwMDBfVUFSVAkJMgorI2RlZmluZQlJUlFfSVhQMjAwMF9HUElPCQkzCisjZGVmaW5lCUlSUV9JWFAyMDAwX1RJTUVSMSAgICAgCQk0CisjZGVmaW5lCUlSUV9JWFAyMDAwX1RJTUVSMiAgICAgCQk1CisjZGVmaW5lCUlSUV9JWFAyMDAwX1RJTUVSMyAgICAgCQk2CisjZGVmaW5lCUlSUV9JWFAyMDAwX1RJTUVSNCAgICAgCQk3CisjZGVmaW5lCUlSUV9JWFAyMDAwX1BNVSAgICAgICAgCQk4ICAgICAgICAgICAgICAgCisjZGVmaW5lCUlSUV9JWFAyMDAwX1NQRiAgICAgICAgCQk5ICAvKiBTbG93IHBvcnQgZnJhbWVyIElSUSAqLworI2RlZmluZQlJUlFfSVhQMjAwMF9ETUExICAgICAgCQkxMAorI2RlZmluZQlJUlFfSVhQMjAwMF9ETUEyICAgICAgCQkxMQorI2RlZmluZQlJUlFfSVhQMjAwMF9ETUEzICAgICAgCQkxMgorI2RlZmluZQlJUlFfSVhQMjAwMF9QQ0lfRE9PUkJFTEwJMTMKKyNkZWZpbmUJSVJRX0lYUDIwMDBfTUVfQVRUTiAgICAgICAJMTQgCisjZGVmaW5lCUlSUV9JWFAyMDAwX1BDSSAgIAkJMTUgLyogUENJIElOVEEgb3IgSU5UQiAqLworI2RlZmluZQlJUlFfSVhQMjAwMF9USERBMCAgIAkJMTYgLyogdGhyZWFkIDAtMzFBICovCisjZGVmaW5lCUlSUV9JWFAyMDAwX1RIREExICAJCTE3IC8qIHRocmVhZCAzMi02M0EsIElYUDI4MDAgb25seSAqLworI2RlZmluZQlJUlFfSVhQMjAwMF9USERBMgkJMTggLyogdGhyZWFkIDY0LTk1QSAqLworI2RlZmluZQlJUlFfSVhQMjAwMF9USERBMyAJCTE5IC8qIHRocmVhZCA5Ni0xMjdBLCBJWFAyODAwIG9ubHkgKi8KKyNkZWZpbmUJSVJRX0lYUDIwMDBfVEhEQjAJCTI0IC8qIHRocmVhZCAwLTMxQiAqLworI2RlZmluZQlJUlFfSVhQMjAwMF9USERCMQkJMjUgLyogdGhyZWFkIDMyLTYzQiwgSVhQMjgwMCBvbmx5ICovCisjZGVmaW5lCUlSUV9JWFAyMDAwX1RIREIyCQkyNiAvKiB0aHJlYWQgNjQtOTVCICovCisjZGVmaW5lCUlSUV9JWFAyMDAwX1RIREIzCQkyNyAvKiB0aHJlYWQgOTYtMTI3QiwgSVhQMjgwMCBvbmx5ICovCisKKy8qIGRlZmluZSBnZW5lcmljIEdQSU9zICovCisjZGVmaW5lIElSUV9JWFAyMDAwX0dQSU8wCQkzMgorI2RlZmluZSBJUlFfSVhQMjAwMF9HUElPMQkJMzMKKyNkZWZpbmUgSVJRX0lYUDIwMDBfR1BJTzIJCTM0CisjZGVmaW5lIElSUV9JWFAyMDAwX0dQSU8zCQkzNQorI2RlZmluZSBJUlFfSVhQMjAwMF9HUElPNAkJMzYKKyNkZWZpbmUgSVJRX0lYUDIwMDBfR1BJTzUJCTM3CisjZGVmaW5lIElSUV9JWFAyMDAwX0dQSU82CQkzOAorI2RlZmluZSBJUlFfSVhQMjAwMF9HUElPNwkJMzkKKworLyogc3BsaXQgb2ZmIHRoZSAyIFBDSSBzb3VyY2VzICovCisjZGVmaW5lIElSUV9JWFAyMDAwX1BDSUEJCTQwCisjZGVmaW5lIElSUV9JWFAyMDAwX1BDSUIJCTQxCisKKyNkZWZpbmUgTlJfSVhQMjAwMF9JUlFTICAgICAgICAgICAgICAgICA0MgorCisjZGVmaW5lCUlYUDIwMDBfQk9BUkRfSVJRKHgpCQkoTlJfSVhQMjAwMF9JUlFTICsgKHgpKQorCisjZGVmaW5lCUlYUDIwMDBfQk9BUkRfSVJRX01BU0soaXJxKQkoMSA8PCAoaXJxIC0gTlJfSVhQMjAwMF9JUlFTKSkJCisKKy8qCisgKiBUaGlzIGFsbG93cyBmb3IgYWxsIHRoZSBvbi1jaGlwIHNvdXJjZXMgcGx1cyB1cCB0byAzMiBDUExEIGJhc2VkCisgKiBJUlFzLiBTaG91bGQgYmUgbW9yZSB0aGFuIGVub3VnaC4KKyAqLworI2RlZmluZQlJWFAyMDAwX0JPQVJEX0lSUVMJCTMyCisjZGVmaW5lIE5SX0lSUVMJCQkJKE5SX0lYUDIwMDBfSVJRUyArIElYUDIwMDBfQk9BUkRfSVJRUykKKworCisvKiAKKyAqIElYRFAyNDAwIHNwZWNpZmljIElSUXMKKyAqLworI2RlZmluZQlJUlFfSVhEUDI0MDBfSU5HUkVTU19OUFUJSVhQMjAwMF9CT0FSRF9JUlEoMCkgCisjZGVmaW5lCUlSUV9JWERQMjQwMF9FTkVUCQlJWFAyMDAwX0JPQVJEX0lSUSgxKSAKKyNkZWZpbmUJSVJRX0lYRFAyNDAwX01FRElBX1BDSQkJSVhQMjAwMF9CT0FSRF9JUlEoMikgCisjZGVmaW5lCUlSUV9JWERQMjQwMF9NRURJQV9TUAkJSVhQMjAwMF9CT0FSRF9JUlEoMykgCisjZGVmaW5lCUlSUV9JWERQMjQwMF9TRl9QQ0kJCUlYUDIwMDBfQk9BUkRfSVJRKDQpIAorI2RlZmluZQlJUlFfSVhEUDI0MDBfU0ZfU1AJCUlYUDIwMDBfQk9BUkRfSVJRKDUpIAorI2RlZmluZQlJUlFfSVhEUDI0MDBfUE1DCQlJWFAyMDAwX0JPQVJEX0lSUSg2KSAKKyNkZWZpbmUJSVJRX0lYRFAyNDAwX1RWTQkJSVhQMjAwMF9CT0FSRF9JUlEoNykgCisKKyNkZWZpbmUJTlJfSVhEUDI0MDBfSVJRUwkJKChJUlFfSVhEUDI0MDBfVFZNKSsxKSAgCisjZGVmaW5lCUlYRFAyNDAwX05SX0lSUVMJCU5SX0lYRFAyNDAwX0lSUVMgLSBOUl9JWFAyMDAwX0lSUVMKKworLyogSVhEUDI4MDAgc3BlY2lmaWMgSVJRcyAqLworI2RlZmluZSBJUlFfSVhEUDI4MDBfRUdSRVNTX0VORVQJSVhQMjAwMF9CT0FSRF9JUlEoMCkKKyNkZWZpbmUgSVJRX0lYRFAyODAwX0lOR1JFU1NfTlBVCUlYUDIwMDBfQk9BUkRfSVJRKDEpCisjZGVmaW5lIElSUV9JWERQMjgwMF9QTUMJCUlYUDIwMDBfQk9BUkRfSVJRKDIpCisjZGVmaW5lIElSUV9JWERQMjgwMF9GQUJSSUNfUENJCQlJWFAyMDAwX0JPQVJEX0lSUSgzKQorI2RlZmluZSBJUlFfSVhEUDI4MDBfRkFCUklDCQlJWFAyMDAwX0JPQVJEX0lSUSg0KQorI2RlZmluZSBJUlFfSVhEUDI4MDBfTUVESUEJCUlYUDIwMDBfQk9BUkRfSVJRKDUpCisKKyNkZWZpbmUJTlJfSVhEUDI4MDBfSVJRUwkJKChJUlFfSVhEUDI4MDBfTUVESUEpKzEpCisjZGVmaW5lCUlYRFAyODAwX05SX0lSUVMJCU5SX0lYRFAyODAwX0lSUVMgLSBOUl9JWFAyMDAwX0lSUVMKKworLyogCisgKiBJUlFzIG9uIGJvdGggSVhEUDJ4MDEgYm9hcmRzCisgKi8KKyNkZWZpbmUgSVJRX0lYRFAyWDAxX1NQQ0lfREJfMAkJSVhQMjAwMF9CT0FSRF9JUlEoMikKKyNkZWZpbmUgSVJRX0lYRFAyWDAxX1NQQ0lfREJfMQkJSVhQMjAwMF9CT0FSRF9JUlEoMykKKyNkZWZpbmUgSVJRX0lYRFAyWDAxX1NQQ0lfUE1DX0lOVEEJSVhQMjAwMF9CT0FSRF9JUlEoNCkKKyNkZWZpbmUgSVJRX0lYRFAyWDAxX1NQQ0lfUE1DX0lOVEIJSVhQMjAwMF9CT0FSRF9JUlEoNSkKKyNkZWZpbmUgSVJRX0lYRFAyWDAxX1NQQ0lfUE1DX0lOVEMJSVhQMjAwMF9CT0FSRF9JUlEoNikKKyNkZWZpbmUgSVJRX0lYRFAyWDAxX1NQQ0lfUE1DX0lOVEQJSVhQMjAwMF9CT0FSRF9JUlEoNykKKyNkZWZpbmUgSVJRX0lYRFAyWDAxX1NQQ0lfRklDX0lOVAlJWFAyMDAwX0JPQVJEX0lSUSg4KQorI2RlZmluZSBJUlFfSVhEUDJYMDFfSVBNSV9GUk9NCQlJWFAyMDAwX0JPQVJEX0lSUSgxNikKKyNkZWZpbmUgSVJRX0lYRFAyWDAxXzEyNVVTCQlJWFAyMDAwX0JPQVJEX0lSUSgxNykKKyNkZWZpbmUgSVJRX0lYRFAyWDAxX0RCXzBfQURECQlJWFAyMDAwX0JPQVJEX0lSUSgxOCkKKyNkZWZpbmUgSVJRX0lYRFAyWDAxX0RCXzFfQURECQlJWFAyMDAwX0JPQVJEX0lSUSgxOSkKKyNkZWZpbmUgSVJRX0lYRFAyWDAxX1VBUlQxCQlJWFAyMDAwX0JPQVJEX0lSUSgyMSkKKyNkZWZpbmUgSVJRX0lYRFAyWDAxX1VBUlQyCQlJWFAyMDAwX0JPQVJEX0lSUSgyMikKKyNkZWZpbmUgSVJRX0lYRFAyWDAxX0ZJQ19BRERfSU5UCUlYUDIwMDBfQk9BUkRfSVJRKDI0KQorI2RlZmluZSBJUlFfSVhEUDJYMDFfQ1M4OTAwCQlJWFAyMDAwX0JPQVJEX0lSUSgyNSkKKyNkZWZpbmUgSVJRX0lYRFAyWDAxX0JCU1JBTQkJSVhQMjAwMF9CT0FSRF9JUlEoMjYpCisKKyNkZWZpbmUgSVhEUDJYMDFfVkFMSURfSVJRX01BU0sgKCBcCisJCUlYUDIwMDBfQk9BUkRfSVJRX01BU0soSVJRX0lYRFAyWDAxX1NQQ0lfREJfMCkgfCBcCisJCUlYUDIwMDBfQk9BUkRfSVJRX01BU0soSVJRX0lYRFAyWDAxX1NQQ0lfREJfMSkgfCBcCisJCUlYUDIwMDBfQk9BUkRfSVJRX01BU0soSVJRX0lYRFAyWDAxX1NQQ0lfUE1DX0lOVEEpIHwgXAorCQlJWFAyMDAwX0JPQVJEX0lSUV9NQVNLKElSUV9JWERQMlgwMV9TUENJX1BNQ19JTlRCKSB8IFwKKwkJSVhQMjAwMF9CT0FSRF9JUlFfTUFTSyhJUlFfSVhEUDJYMDFfU1BDSV9QTUNfSU5UQykgfCBcCisJCUlYUDIwMDBfQk9BUkRfSVJRX01BU0soSVJRX0lYRFAyWDAxX1NQQ0lfUE1DX0lOVEQpIHwgXAorCQlJWFAyMDAwX0JPQVJEX0lSUV9NQVNLKElSUV9JWERQMlgwMV9TUENJX0ZJQ19JTlQpIHwgXAorCQlJWFAyMDAwX0JPQVJEX0lSUV9NQVNLKElSUV9JWERQMlgwMV9JUE1JX0ZST00pIHwgXAorCQlJWFAyMDAwX0JPQVJEX0lSUV9NQVNLKElSUV9JWERQMlgwMV8xMjVVUykgfCBcCisJCUlYUDIwMDBfQk9BUkRfSVJRX01BU0soSVJRX0lYRFAyWDAxX0RCXzBfQUREKSB8IFwKKwkJSVhQMjAwMF9CT0FSRF9JUlFfTUFTSyhJUlFfSVhEUDJYMDFfREJfMV9BREQpIHwgXAorCQlJWFAyMDAwX0JPQVJEX0lSUV9NQVNLKElSUV9JWERQMlgwMV9VQVJUMSkgfCBcCisJCUlYUDIwMDBfQk9BUkRfSVJRX01BU0soSVJRX0lYRFAyWDAxX1VBUlQyKSB8IFwKKwkJSVhQMjAwMF9CT0FSRF9JUlFfTUFTSyhJUlFfSVhEUDJYMDFfRklDX0FERF9JTlQpIHwgXAorCQlJWFAyMDAwX0JPQVJEX0lSUV9NQVNLKElSUV9JWERQMlgwMV9DUzg5MDApIHwgXAorCQlJWFAyMDAwX0JPQVJEX0lSUV9NQVNLKElSUV9JWERQMlgwMV9CQlNSQU0pICkKKworLyogCisgKiBJWERQMjQwMSBzcGVjaWZpYyBJUlFzCisgKi8KKyNkZWZpbmUgSVJRX0lYRFAyNDAxX0lOVEFfODI1NDYJCUlYUDIwMDBfQk9BUkRfSVJRKDApCisjZGVmaW5lIElSUV9JWERQMjQwMV9JTlRCXzgyNTQ2CQlJWFAyMDAwX0JPQVJEX0lSUSgxKQorCisjZGVmaW5lCUlYRFAyNDAxX1ZBTElEX0lSUV9NQVNLICggXAorCQlJWERQMlgwMV9WQUxJRF9JUlFfTUFTSyB8IFwKKwkJSVhQMjAwMF9CT0FSRF9JUlFfTUFTSyhJUlFfSVhEUDI0MDFfSU5UQV84MjU0NikgfFwKKwkJSVhQMjAwMF9CT0FSRF9JUlFfTUFTSyhJUlFfSVhEUDI0MDFfSU5UQl84MjU0NikpCisKKy8qCisgKiBJWERQMjgwMS1zcGVjaWZpYyBJUlFzCisgKi8KKyNkZWZpbmUgSVJRX0lYRFAyODAxX1JJVgkJSVhQMjAwMF9CT0FSRF9JUlEoMCkKKyNkZWZpbmUgSVJRX0lYRFAyODAxX0NORkdfTUVESUEJCUlYUDIwMDBfQk9BUkRfSVJRKDI3KQorI2RlZmluZSBJUlFfSVhEUDI4MDFfQ0xPQ0tfUkVGCQlJWFAyMDAwX0JPQVJEX0lSUSgyOCkKKworI2RlZmluZQlJWERQMjgwMV9WQUxJRF9JUlFfTUFTSyAoIFwKKwkJSVhEUDJYMDFfVkFMSURfSVJRX01BU0sgfCBcCisJCUlYUDIwMDBfQk9BUkRfSVJRX01BU0soSVJRX0lYRFAyODAxX1JJVikgfFwKKwkJSVhQMjAwMF9CT0FSRF9JUlFfTUFTSyhJUlFfSVhEUDI4MDFfQ05GR19NRURJQSkgfFwKKwkJSVhQMjAwMF9CT0FSRF9JUlFfTUFTSyhJUlFfSVhEUDI4MDFfQ0xPQ0tfUkVGKSkKKworI2RlZmluZQlOUl9JWERQMlgwMV9JUlFTCQkoKElSUV9JWERQMjgwMV9DTE9DS19SRUYpICsgMSkKKworI2VuZGlmIC8qX0lSUVNfSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyMDAwL2l4ZHAyeDAwLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyMDAwL2l4ZHAyeDAwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2EzOThkZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDIwMDAvaXhkcDJ4MDAuaApAQCAtMCwwICsxLDkzIEBACisvKgorICogaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjAwMC9peGRwMngwMC5oCisgKgorICogUmVnaXN0ZXIgYW5kIG90aGVyIGRlZmluZXMgZm9yIElYRFAyWzQ4XTAwIHBsYXRmb3JtcworICoKKyAqIE9yaWdpbmFsIEF1dGhvcjogTmFlZW0gQWZ6YWwgPG5hZWVtLm0uYWZ6YWxAaW50ZWwuY29tPgorICogTWFpbnRhaW5lcjogRGVlcGFrIFNheGVuYSA8ZHNheGVuYUBwbGV4aXR5Lm5ldD4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA0IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2lmbmRlZiBfSVhEUDJYMDBfSF8KKyNkZWZpbmUgX0lYRFAyWDAwX0hfCisKKy8qCisgKiBPbiBib2FyZCBDUExEIG1lbW9yeSBtYXAKKyAqLworI2RlZmluZSBJWERQMlgwMF9QSFlTX0NQTERfQkFTRQkJMHhjNzAwMDAwMAorI2RlZmluZSBJWERQMlgwMF9WSVJUX0NQTERfQkFTRQkJMHhmYWZmZjAwMAorI2RlZmluZSBJWERQMlgwMF9DUExEX1NJWkUJCTB4MDAwMDEwMDAKKworCisjZGVmaW5lIElYRFAyWDAwX0NQTERfUkVHKHgpICAJXAorCSh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKElYRFAyWDAwX1ZJUlRfQ1BMRF9CQVNFIHwgeCkKKworLyoKKyAqIElYRFAyNDAwIENQTEQgcmVnaXN0ZXJzCisgKi8KKyNkZWZpbmUgSVhEUDI0MDBfQ1BMRF9TWVNMRUQJCUlYRFAyWDAwX0NQTERfUkVHKDB4MCkgIAorI2RlZmluZSBJWERQMjQwMF9DUExEX0RJU1BfREFUQQkJSVhEUDJYMDBfQ1BMRF9SRUcoMHg0KQorI2RlZmluZSBJWERQMjQwMF9DUExEX0NMT0NLX1NQRUVECUlYRFAyWDAwX0NQTERfUkVHKDB4OCkKKyNkZWZpbmUgSVhEUDI0MDBfQ1BMRF9JTlRfU1RBVAkJSVhEUDJYMDBfQ1BMRF9SRUcoMHhjKQorI2RlZmluZSBJWERQMjQwMF9DUExEX1JFVgkJSVhEUDJYMDBfQ1BMRF9SRUcoMHgxMCkKKyNkZWZpbmUgSVhEUDI0MDBfQ1BMRF9TWVNfQ0xLX00JCUlYRFAyWDAwX0NQTERfUkVHKDB4MTQpCisjZGVmaW5lIElYRFAyNDAwX0NQTERfU1lTX0NMS19OCQlJWERQMlgwMF9DUExEX1JFRygweDE4KQorI2RlZmluZSBJWERQMjQwMF9DUExEX0lOVF9NQVNLCQlJWERQMlgwMF9DUExEX1JFRygweDQ4KQorCisvKgorICogSVhEUDI4MDAgQ1BMRCByZWdpc3RlcnMKKyAqLworI2RlZmluZSBJWERQMjgwMF9DUExEX0lOVF9TVEFUCQlJWERQMlgwMF9DUExEX1JFRygweDApCisjZGVmaW5lIElYRFAyODAwX0NQTERfSU5UX01BU0sJCUlYRFAyWDAwX0NQTERfUkVHKDB4MTQwKQorCisKKyNkZWZpbmUJSVhEUDJYMDBfR1BJT19JMkNfRU5BQkxFCTB4MDIKKyNkZWZpbmUJSVhEUDJYMDBfR1BJT19TQ0wJCTB4MDcKKyNkZWZpbmUJSVhEUDJYMDBfR1BJT19TREEJCTB4MDYKKworLyoKKyAqIFBDSSBkZXZmbnMgZm9yIG9uLWJvYXJkIGRldmljZXMuIFdlIG5lZWQgdGhlc2UgdG8gYmUgYWJsZSB0bworICogcHJvcGVybHkgdHJhbnNsYXRlIElSUXMgYW5kIGZvciBkZXZpY2UgcmVtb3ZhbC4KKyAqLworI2RlZmluZQlJWERQMjQwMF9TTEFWRV9FTkVUX0RFVkZOCTB4MTgJLyogQnVzIDEgKi8KKyNkZWZpbmUJSVhEUDI0MDBfTUFTVEVSX0VORVRfREVWRk4JMHgyMAkvKiBCdXMgMSAqLworI2RlZmluZQlJWERQMjQwMF9NRURJQV9ERVZGTgkJMHgyOAkvKiBCdXMgMSAqLworI2RlZmluZQlJWERQMjQwMF9TV0lUQ0hfRkFCUklDX0RFVkZOCTB4MzAJLyogQnVzIDEgKi8KKworI2RlZmluZQlJWERQMjgwMF9TTEFWRV9FTkVUX0RFVkZOCTB4MjAJLyogQnVzIDEgKi8KKyNkZWZpbmUJSVhEUDI4MDBfTUFTVEVSX0VORVRfREVWRk4JMHgxOAkvKiBCdXMgMSAqLworI2RlZmluZQlJWERQMjgwMF9TV0lUQ0hfRkFCUklDX0RFVkZOCTB4MzAJLyogQnVzIDEgKi8KKworI2RlZmluZQlJWERQMlgwMF9QMlBfREVWRk4JCTB4MjAJLyogQnVzIDAgKi8KKyNkZWZpbmUJSVhEUDJYMDBfMjE1NTVfREVWRk4JCTB4MzAJLyogQnVzIDAgKi8KKyNkZWZpbmUgSVhEUDJYMDBfU0xBVkVfTlBVX0RFVkZOCTB4MjgJLyogQnVzIDEgKi8KKyNkZWZpbmUJSVhEUDJYMDBfUE1DX0RFVkZOCQkweDM4CS8qIEJ1cyAxICovCisjZGVmaW5lIElYRFAyWDAwX01BU1RFUl9OUFVfREVWRk4JMHgzOAkvKiBCdXMgMSAqLworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworLyoKKyAqIE1hc3RlciBOUFUgd2lsbCBhbHdheXMgaGF2ZSBmbGFzaCBhbmQgYmUgUENJIG1hc3Rlci4KKyAqIFNsYXZlIE5QVSBtYXkgb3IgbWF5IG5vdCBoYXZlIGZsYXNoIGJ1dCB3aWxsIG5ldmVyIGJlIFBDSSBtYXN0ZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGl4ZHAyeDAwX21hc3Rlcl9ucHUodm9pZCkKK3sKKwlyZXR1cm4gKChpeHAyMDAwX2hhc19mbGFzaCgpKSAmJiAoaXhwMjAwMF9pc19wY2ltYXN0ZXIoKSkpOworfQorCisvKgorICogSGVscGVyIGZ1bmN0aW9ucyB1c2VkIGJ5IGl4ZHAyNDAwIGFuZCBpeGRwMjgwMCBzcGVjaWZpYyBjb2RlCisgKi8KK3ZvaWQgaXhkcDJ4MDBfaW5pdF9pcnEodm9sYXRpbGUgdW5zaWduZWQgbG9uZyosIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKiwgdW5zaWduZWQgbG9uZyk7Cit2b2lkIGl4ZHAyeDAwX3NsYXZlX3BjaV9wb3N0aW5pdCh2b2lkKTsKK3ZvaWQgaXhkcDJ4MDBfaW5pdF9tYWNoaW5lKHZvaWQpOwordm9pZCBpeGRwMngwMF9tYXBfaW8odm9pZCk7CisKKyNlbmRpZgorCisjZW5kaWYgLypfSVhEUDJYMDBfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDIwMDAvaXhkcDJ4MDEuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDIwMDAvaXhkcDJ4MDEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2ExYmNkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjAwMC9peGRwMngwMS5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyMDAwL2l4ZHAyeDAxLmgKKyAqCisgKiBQbGF0Zm9ybSBkZWZpbml0aW9ucyBmb3IgSVhEUDJYMDEgJiYgSVhEUDI4MDEgc3lzdGVtcworICoKKyAqIEF1dGhvcjogRGVlcGFrIFNheGVuYSA8ZHNheGVuYUBwbGV4aXR5Lm5ldD4KKyAqCisgKiBDb3B5cmlnaHQgMjAwNCAoYykgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLiAKKyAqCisgKiBCYXNlZCBvbiBvcmlnaW5hbCBjb2RlIENvcHlyaWdodCAoYykgMjAwMi0yMDAzIEludGVsIENvcnBvcmF0aW9uCisgKiAKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgCisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2lmbmRlZiBfX0lYRFAyWDAxX0hfXworI2RlZmluZSBfX0lYRFAyWDAxX0hfXworCisjZGVmaW5lCUlYRFAyWDAxX1BIWVNfQ1BMRF9CQVNFCQkweGM2MDI0MDAwCisjZGVmaW5lCUlYRFAyWDAxX1ZJUlRfQ1BMRF9CQVNFCQkweGZhZmZmMDAwCisjZGVmaW5lCUlYRFAyWDAxX0NQTERfUkVHSU9OX1NJWkUJMHgwMDAwMTAwMAorCisjZGVmaW5lIElYRFAyWDAxX0NQTERfVklSVF9SRUcocmVnKSAodm9sYXRpbGUgdW5zaWduZWQgbG9uZyopKElYRFAyWDAxX1ZJUlRfQ1BMRF9CQVNFIHwgcmVnKQorI2RlZmluZSBJWERQMlgwMV9DUExEX1BIWVNfUkVHKHJlZykgKHZvbGF0aWxlIHUzMiopKElYRFAyWDAxX1BIWVNfQ1BMRF9CQVNFIHwgcmVnKQorCisjZGVmaW5lIElYRFAyWDAxX1VBUlQxX1ZJUlRfQkFTRQlJWERQMlgwMV9DUExEX1ZJUlRfUkVHKDB4NDApCisjZGVmaW5lIElYRFAyWDAxX1VBUlQxX1BIWVNfQkFTRQlJWERQMlgwMV9DUExEX1BIWVNfUkVHKDB4NDApCisKKyNkZWZpbmUgSVhEUDJYMDFfVUFSVDJfVklSVF9CQVNFCUlYRFAyWDAxX0NQTERfVklSVF9SRUcoMHg2MCkKKyNkZWZpbmUgSVhEUDJYMDFfVUFSVDJfUEhZU19CQVNFCUlYRFAyWDAxX0NQTERfUEhZU19SRUcoMHg2MCkKKworI2RlZmluZSBJWERQMlgwMV9DUzg5MDBfVklSVF9CQVNFCUlYRFAyWDAxX0NQTERfVklSVF9SRUcoMHg4MCkKKyNkZWZpbmUgSVhEUDJYMDFfQ1M4OTAwX1ZJUlRfRU5ECShJWERQMlgwMV9DUzg5MDBfVklSVF9CQVNFICsgMTYpCisKKyNkZWZpbmUgSVhEUDJYMDFfQ1BMRF9SRVNFVF9SRUcgICAgICAgICBJWERQMlgwMV9DUExEX1ZJUlRfUkVHKDB4MDApCisjZGVmaW5lIElYRFAyWDAxX0lOVF9NQVNLX1NFVF9SRUcJSVhEUDJYMDFfQ1BMRF9WSVJUX1JFRygweDA4KQorI2RlZmluZSBJWERQMlgwMV9JTlRfU1RBVF9SRUcJCUlYRFAyWDAxX0NQTERfVklSVF9SRUcoMHgwQykKKyNkZWZpbmUgSVhEUDJYMDFfSU5UX1JBV19SRUcJCUlYRFAyWDAxX0NQTERfVklSVF9SRUcoMHgxMCkgCisjZGVmaW5lIElYRFAyWDAxX0lOVF9NQVNLX0NMUl9SRUcJSVhEUDJYMDFfSU5UX1JBV19SRUcKKyNkZWZpbmUgSVhEUDJYMDFfSU5UX1NJTV9SRUcJCUlYRFAyWDAxX0NQTERfVklSVF9SRUcoMHgxNCkKKworI2RlZmluZSBJWERQMlgwMV9DUExEX0ZMQVNIX1JFRwkJSVhEUDJYMDFfQ1BMRF9WSVJUX1JFRygweDIwKQorCisjZGVmaW5lIElYRFAyWDAxX0NQTERfRkxBU0hfSU5URVJOIAkweDgwMDAKKyNkZWZpbmUgSVhEUDJYMDFfQ1BMRF9GTEFTSF9CQU5LX01BU0sgCTB4RgorI2RlZmluZSBJWERQMlgwMV9GTEFTSF9XSU5ET1dfQklUUyAJMjUKKyNkZWZpbmUgSVhEUDJYMDFfRkxBU0hfV0lORE9XX1NJWkUgCSgxIDw8IElYRFAyWDAxX0ZMQVNIX1dJTkRPV19CSVRTKQorI2RlZmluZSBJWERQMlgwMV9GTEFTSF9XSU5ET1dfTUFTSyAJKElYRFAyWDAxX0ZMQVNIX1dJTkRPV19TSVpFIC0gMSkKKworI2RlZmluZQlJWERQMlgwMV9VQVJUX0NMSwkJMTg0MzIwMAorCisjZGVmaW5lCUlYRFAyWDAxX0dQSU9fSTJDX0VOQUJMRQkweDAyCisjZGVmaW5lCUlYRFAyWDAxX0dQSU9fU0NMCQkweDA3CisjZGVmaW5lCUlYRFAyWDAxX0dQSU9fU0RBCQkweDA2CisKKyNlbmRpZiAvKiBfX0lYRFAyeDAxX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjAwMC9peHAyMDAwLXJlZ3MuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDIwMDAvaXhwMjAwMC1yZWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM1NjcwOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDIwMDAvaXhwMjAwMC1yZWdzLmgKQEAgLTAsMCArMSwzNzcgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyMDAwL2l4cDIwMDAtcmVncy5oCisgKgorICogQ2hpcHNldCByZWdpc3RlciBkZWZpbml0aW9ucyBmb3IgSVhQMjQwMC8yODAwIGJhc2VkIHN5c3RlbXMuCisgKgorICogT3JpZ2luYWwgQXV0aG9yOiBOYWVlbSBBZnphbCA8bmFlZW0ubS5hZnphbEBpbnRlbC5jb20+CisgKgorICogTWFpbnRhaW5lcjogRGVlcGFrIFNheGVuYSA8ZHNheGVuYUBwbGV4aXR5Lm5ldD4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA0IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2lmbmRlZiBfSVhQMjAwMF9SRUdTX0hfCisjZGVmaW5lIF9JWFAyMDAwX1JFR1NfSF8KKworLyogCisgKiBTdGF0aWMgSS9PIHJlZ2lvbnMuCisgKgorICogTW9zdCBvZiB0aGUgcmVnaXN0ZXJzIGFyZSBjbHVtcGVkIGluIDRLIHJlZ2lvbnMgc3ByZWFkIHRocm91Z2hvdXQKKyAqIHRoZSAweGMwMDAwMDAwIC0+IDB4YzAxMDAwMDAgYWRkcmVzcyByYW5nZSwgYnV0IHdlIGp1c3QgbWFwIGluCisgKiB0aGUgd2hvbGUgcmFuZ2UgdXNpbmcgYSBzaW5nbGUgMSBNQiBzZWN0aW9uIGluc3RlYWQgb2Ygc21hbGwKKyAqIDRLIHBhZ2VzLiAgVGhpcyBoYXMgdHdvIGFkdmFudGFnZXMgZm9yIHVzOgorICoKKyAqIDEpIFdlIHVzZSBvbmx5IG9uZSBUTEIgZW50cnkgZm9yIGxhcmdlIG51bWJlciBvZiBvbi1jaGlwIEkvTyBkZXZpY2VzLgorICoKKyAqIDIpIFdlIGNhbiBlYXNpbHkgc2V0IHRoZSBTZWN0aW9uIGF0dHJpYnV0ZXMgdG8gWENCPTEwMSBvbiB0aGUgSVhQMjQwMAorICogICAgYXMgcmVxdWlyZWQgcGVyIGVycmF0dW0gIzY2LiAgV2UgYWNjb21wbGlzaCB0aGlzIGJ5IHVzaW5nIGEKKyAqICAgIG5ldyBNVF9JWFAyMDAwX0RFVklDRSBtZW1vcnkgdHlwZSB3aXRoIHRoZSBiaXRzIHNldCBhcyByZXF1aXJlZC4KKyAqCisgKiBDQVAgc3RhbmRzIGZvciBDU1IgQWNjZXNzIFByb3h5LgorICoKKyAqIElmIHlvdSBjaGFuZ2UgdGhlIHZpcnR1YWwgYWRkcmVzcyBvZiB0aGlzIG1hcHBpbmcsIHBsZWFzZSBwcm9wYWdhdGUKKyAqIHRoZSBjaGFuZ2UgdG8gYXJjaC9hcm0va2VybmVsL2RlYnVnLlMsIHdoaWNoIGhhcmRjb2RlcyB0aGUgdmlydHVhbAorICogYWRkcmVzcyBvZiB0aGUgVUFSVCBsb2NhdGVkIGluIHRoaXMgcmVnaW9uLgorICovCisKKyNkZWZpbmUJSVhQMjAwMF9DQVBfUEhZU19CQVNFCQkweGMwMDAwMDAwCisjZGVmaW5lCUlYUDIwMDBfQ0FQX1ZJUlRfQkFTRQkJMHhmZWYwMDAwMAorI2RlZmluZQlJWFAyMDAwX0NBUF9TSVpFCQkweDAwMTAwMDAwCisKKy8qCisgKiBBZGRyZXNzZXMgZm9yIHNwZWNpZmljIG9uLWNoaXAgcGVyaXBoZXJhbHMKKyAqLworI2RlZmluZQlJWFAyMDAwX1NMT1dQT1JUX0NTUl9WSVJUX0JBU0UJMHhmZWY4MDAwMAorI2RlZmluZQlJWFAyMDAwX0dMT0JBTF9SRUdfVklSVF9CQVNFCTB4ZmVmMDQwMDAKKyNkZWZpbmUJSVhQMjAwMF9VQVJUX1BIWVNfQkFTRQkJMHhjMDAzMDAwMAorI2RlZmluZQlJWFAyMDAwX1VBUlRfVklSVF9CQVNFCQkweGZlZjMwMDAwCisjZGVmaW5lCUlYUDIwMDBfVElNRVJfVklSVF9CQVNFCQkweGZlZjIwMDAwCisjZGVmaW5lCUlYUDIwMDBfR1BJT19WSVJUX0JBU0UJCTBYZmVmMTAwMDAKKworLyoKKyAqIERldmljZXMgb3V0c2lkZSBvZiB0aGUgMHhjMDAwMDAwMCAtPiAweGMwMTAwMDAwIHJhbmdlLiAgVGhlIHZpcnR1YWwKKyAqIGFkZHJlc3NlcyBvZiB0aGUgSU5UQ1RMIGFuZCBQQ0lfQ1NSIG1hcHBpbmdzIGFyZSBoYXJkY29kZWQgaW4KKyAqIGVudHJ5LW1hY3JvLlMsIHNvIGlmIHlvdSBldmVyIGNoYW5nZSB0aGVzZSBwbGVhc2UgcHJvcGFnYXRlCisgKiB0aGUgY2hhbmdlLgorICovCisjZGVmaW5lIElYUDIwMDBfSU5UQ1RMX1BIWVNfQkFTRQkweGQ2MDAwMDAwCisjZGVmaW5lCUlYUDIwMDBfSU5UQ1RMX1ZJUlRfQkFTRQkweGZlZTAwMDAwCisjZGVmaW5lCUlYUDIwMDBfSU5UQ1RMX1NJWkUJCTB4MDAxMDAwMDAKKworI2RlZmluZSBJWFAyMDAwX1BDSV9DUkVHX1BIWVNfQkFTRQkweGRlMDAwMDAwCisjZGVmaW5lCUlYUDIwMDBfUENJX0NSRUdfVklSVF9CQVNFCTB4ZmVkMDAwMDAKKyNkZWZpbmUJSVhQMjAwMF9QQ0lfQ1JFR19TSVpFCQkweDAwMTAwMDAwCisKKyNkZWZpbmUgSVhQMjAwMF9QQ0lfQ1NSX1BIWVNfQkFTRQkweGRmMDAwMDAwCisjZGVmaW5lCUlYUDIwMDBfUENJX0NTUl9WSVJUX0JBU0UJMHhmZWMwMDAwMAorI2RlZmluZQlJWFAyMDAwX1BDSV9DU1JfU0laRQkJMHgwMDEwMDAwMAorCisjZGVmaW5lIElYUDIwMDBfUENJX0lPX1BIWVNfQkFTRQkweGQ4MDAwMDAwCisjZGVmaW5lCUlYUDIwMDBfUENJX0lPX1ZJUlRfQkFTRQkweGZkMDAwMDAwCisjZGVmaW5lIElYUDIwMDBfUENJX0lPX1NJWkUgICAgIAkweDAxMDAwMDAwCisKKyNkZWZpbmUgSVhQMjAwMF9QQ0lfQ0ZHMF9QSFlTX0JBU0UJMHhkYTAwMDAwMAorI2RlZmluZSBJWFAyMDAwX1BDSV9DRkcwX1ZJUlRfQkFTRQkweGZjMDAwMDAwCisjZGVmaW5lIElYUDIwMDBfUENJX0NGRzBfU0laRSAgIAkweDAxMDAwMDAwCisKKyNkZWZpbmUgSVhQMjAwMF9QQ0lfQ0ZHMV9QSFlTX0JBU0UJMHhkYjAwMDAwMAorI2RlZmluZSBJWFAyMDAwX1BDSV9DRkcxX1ZJUlRfQkFTRQkweGZiMDAwMDAwCisjZGVmaW5lIElYUDIwMDBfUENJX0NGRzFfU0laRQkJMHgwMTAwMDAwMAorCisvKiAKKyAqIFRpbWVycworICovCisjZGVmaW5lCUlYUDIwMDBfVElNRVJfUkVHKHgpCQkoKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcqKShJWFAyMDAwX1RJTUVSX1ZJUlRfQkFTRSB8ICh4KSkpCisvKiBUaW1lciBjb250cm9sICovCisjZGVmaW5lCUlYUDIwMDBfVDFfQ1RMCQkJSVhQMjAwMF9USU1FUl9SRUcoMHgwMCkKKyNkZWZpbmUJSVhQMjAwMF9UMl9DVEwJCQlJWFAyMDAwX1RJTUVSX1JFRygweDA0KQorI2RlZmluZQlJWFAyMDAwX1QzX0NUTAkJCUlYUDIwMDBfVElNRVJfUkVHKDB4MDgpCisjZGVmaW5lCUlYUDIwMDBfVDRfQ1RMCQkJSVhQMjAwMF9USU1FUl9SRUcoMHgwYykKKy8qIFN0b3JlIGluaXRpYWwgdmFsdWUgKi8KKyNkZWZpbmUJSVhQMjAwMF9UMV9DTEQJCQlJWFAyMDAwX1RJTUVSX1JFRygweDEwKQorI2RlZmluZQlJWFAyMDAwX1QyX0NMRAkJCUlYUDIwMDBfVElNRVJfUkVHKDB4MTQpCisjZGVmaW5lCUlYUDIwMDBfVDNfQ0xECQkJSVhQMjAwMF9USU1FUl9SRUcoMHgxOCkKKyNkZWZpbmUJSVhQMjAwMF9UNF9DTEQJCQlJWFAyMDAwX1RJTUVSX1JFRygweDFjKQorLyogUmVhZCBjdXJyZW50IHZhbHVlICovCisjZGVmaW5lCUlYUDIwMDBfVDFfQ1NSCQkJSVhQMjAwMF9USU1FUl9SRUcoMHgyMCkKKyNkZWZpbmUJSVhQMjAwMF9UMl9DU1IJCQlJWFAyMDAwX1RJTUVSX1JFRygweDI0KQorI2RlZmluZQlJWFAyMDAwX1QzX0NTUgkJCUlYUDIwMDBfVElNRVJfUkVHKDB4MjgpCisjZGVmaW5lCUlYUDIwMDBfVDRfQ1NSCQkJSVhQMjAwMF9USU1FUl9SRUcoMHgyYykKKy8qIENsZWFyIGFzc29jaWF0ZWQgdGltZXIgaW50ZXJydXB0ICovCisjZGVmaW5lCUlYUDIwMDBfVDFfQ0xSCQkJSVhQMjAwMF9USU1FUl9SRUcoMHgzMCkKKyNkZWZpbmUJSVhQMjAwMF9UMl9DTFIJCQlJWFAyMDAwX1RJTUVSX1JFRygweDM0KQorI2RlZmluZQlJWFAyMDAwX1QzX0NMUgkJCUlYUDIwMDBfVElNRVJfUkVHKDB4MzgpCisjZGVmaW5lCUlYUDIwMDBfVDRfQ0xSCQkJSVhQMjAwMF9USU1FUl9SRUcoMHgzYykKKy8qIFRpbWVyIHdhdGNoZG9nIGVuYWJsZSBmb3IgVDQgKi8KKyNkZWZpbmUJSVhQMjAwMF9UV0RFCQkJSVhQMjAwMF9USU1FUl9SRUcoMHg0MCkKKworI2RlZmluZQlXRFRfRU5BQkxFCQkJMHgwMDAwMDAwMQorI2RlZmluZQlUSU1FUl9ESVZJREVSXzI1NgkJMHgwMDAwMDAwOAorI2RlZmluZQlUSU1FUl9FTkFCTEUJCQkweDAwMDAwMDgwCisjZGVmaW5lCUlSUV9NQVNLX1RJTUVSMSAgICAgICAgIAkoMSA8PCA0KQorCisvKgorICogSW50ZXJydXB0IGNvbnRyb2xsZXIgcmVnaXN0ZXJzCisgKi8KKyNkZWZpbmUgSVhQMjAwMF9JTlRDVExfUkVHKHgpCQkodm9sYXRpbGUgdW5zaWduZWQgbG9uZyopKElYUDIwMDBfSU5UQ1RMX1ZJUlRfQkFTRSB8ICh4KSkKKyNkZWZpbmUgSVhQMjAwMF9JUlFfU1RBVFVTCQlJWFAyMDAwX0lOVENUTF9SRUcoMHgwOCkKKyNkZWZpbmUgSVhQMjAwMF9JUlFfRU5BQkxFCQlJWFAyMDAwX0lOVENUTF9SRUcoMHgxMCkKKyNkZWZpbmUgSVhQMjAwMF9JUlFfRU5BQkxFX1NFVAkJSVhQMjAwMF9JTlRDVExfUkVHKDB4MTApCisjZGVmaW5lIElYUDIwMDBfSVJRX0VOQUJMRV9DTFIJCUlYUDIwMDBfSU5UQ1RMX1JFRygweDE4KQorI2RlZmluZSBJWFAyMDAwX0ZJUV9FTkFCTEVfQ0xSCQlJWFAyMDAwX0lOVENUTF9SRUcoMHgxNCkKKyNkZWZpbmUgSVhQMjAwMF9JUlFfRVJSX1NUQVRVUwkJSVhQMjAwMF9JTlRDVExfUkVHKDB4MjQpCisjZGVmaW5lIElYUDIwMDBfSVJRX0VSUl9FTkFCTEVfU0VUCUlYUDIwMDBfSU5UQ1RMX1JFRygweDJjKQorI2RlZmluZSBJWFAyMDAwX0ZJUV9FUlJfRU5BQkxFX0NMUglJWFAyMDAwX0lOVENUTF9SRUcoMHgzMCkKKyNkZWZpbmUgSVhQMjAwMF9JUlFfRVJSX0VOQUJMRV9DTFIJSVhQMjAwMF9JTlRDVExfUkVHKDB4MzQpCisjZGVmaW5lIElYUDIwMDBfSVJRX1RIRF9SQVdfU1RBVFVTX0FfMAlJWFAyMDAwX0lOVENUTF9SRUcoMHg2MCkKKyNkZWZpbmUgSVhQMjAwMF9JUlFfVEhEX1JBV19TVEFUVVNfQV8xCUlYUDIwMDBfSU5UQ1RMX1JFRygweDY0KQorI2RlZmluZSBJWFAyMDAwX0lSUV9USERfUkFXX1NUQVRVU19BXzIJSVhQMjAwMF9JTlRDVExfUkVHKDB4NjgpCisjZGVmaW5lIElYUDIwMDBfSVJRX1RIRF9SQVdfU1RBVFVTX0FfMwlJWFAyMDAwX0lOVENUTF9SRUcoMHg2YykKKyNkZWZpbmUgSVhQMjAwMF9JUlFfVEhEX1JBV19TVEFUVVNfQl8wCUlYUDIwMDBfSU5UQ1RMX1JFRygweDgwKQorI2RlZmluZSBJWFAyMDAwX0lSUV9USERfUkFXX1NUQVRVU19CXzEJSVhQMjAwMF9JTlRDVExfUkVHKDB4ODQpCisjZGVmaW5lIElYUDIwMDBfSVJRX1RIRF9SQVdfU1RBVFVTX0JfMglJWFAyMDAwX0lOVENUTF9SRUcoMHg4OCkKKyNkZWZpbmUgSVhQMjAwMF9JUlFfVEhEX1JBV19TVEFUVVNfQl8zCUlYUDIwMDBfSU5UQ1RMX1JFRygweDhjKQorI2RlZmluZSBJWFAyMDAwX0lSUV9USERfRU5BQkxFX1NFVF9BXzAJSVhQMjAwMF9JTlRDVExfUkVHKDB4MTYwKQorI2RlZmluZSBJWFAyMDAwX0lSUV9USERfRU5BQkxFX1NFVF9BXzEJSVhQMjAwMF9JTlRDVExfUkVHKDB4MTY0KQorI2RlZmluZSBJWFAyMDAwX0lSUV9USERfRU5BQkxFX1NFVF9BXzIJSVhQMjAwMF9JTlRDVExfUkVHKDB4MTY4KQorI2RlZmluZSBJWFAyMDAwX0lSUV9USERfRU5BQkxFX1NFVF9BXzMJSVhQMjAwMF9JTlRDVExfUkVHKDB4MTZjKQorI2RlZmluZSBJWFAyMDAwX0lSUV9USERfRU5BQkxFX1NFVF9CXzAJSVhQMjAwMF9JTlRDVExfUkVHKDB4MTgwKQorI2RlZmluZSBJWFAyMDAwX0lSUV9USERfRU5BQkxFX1NFVF9CXzEJSVhQMjAwMF9JTlRDVExfUkVHKDB4MTg0KQorI2RlZmluZSBJWFAyMDAwX0lSUV9USERfRU5BQkxFX1NFVF9CXzIJSVhQMjAwMF9JTlRDVExfUkVHKDB4MTg4KQorI2RlZmluZSBJWFAyMDAwX0lSUV9USERfRU5BQkxFX1NFVF9CXzMJSVhQMjAwMF9JTlRDVExfUkVHKDB4MThjKQorI2RlZmluZSBJWFAyMDAwX0lSUV9USERfRU5BQkxFX0NMRUFSX0FfMAlJWFAyMDAwX0lOVENUTF9SRUcoMHgxZTApCisjZGVmaW5lIElYUDIwMDBfSVJRX1RIRF9FTkFCTEVfQ0xFQVJfQV8xCUlYUDIwMDBfSU5UQ1RMX1JFRygweDFlNCkKKyNkZWZpbmUgSVhQMjAwMF9JUlFfVEhEX0VOQUJMRV9DTEVBUl9BXzIJSVhQMjAwMF9JTlRDVExfUkVHKDB4MWU4KQorI2RlZmluZSBJWFAyMDAwX0lSUV9USERfRU5BQkxFX0NMRUFSX0FfMwlJWFAyMDAwX0lOVENUTF9SRUcoMHgxZWMpCisjZGVmaW5lIElYUDIwMDBfSVJRX1RIRF9FTkFCTEVfQ0xFQVJfQl8wCUlYUDIwMDBfSU5UQ1RMX1JFRygweDIwMCkKKyNkZWZpbmUgSVhQMjAwMF9JUlFfVEhEX0VOQUJMRV9DTEVBUl9CXzEJSVhQMjAwMF9JTlRDVExfUkVHKDB4MjA0KQorI2RlZmluZSBJWFAyMDAwX0lSUV9USERfRU5BQkxFX0NMRUFSX0JfMglJWFAyMDAwX0lOVENUTF9SRUcoMHgyMDgpCisjZGVmaW5lIElYUDIwMDBfSVJRX1RIRF9FTkFCTEVfQ0xFQVJfQl8zCUlYUDIwMDBfSU5UQ1RMX1JFRygweDIwYykKKworLyoKKyAqIE1hc2sgb2YgdmFsaWQgSVJRcyBpbiB0aGUgMzItYml0IElSUSByZWdpc3Rlci4gV2UgdXNlCisgKiB0aGlzIHRvIG1hcmsgY2VydGFpbiBJUlFzIGFzIGJlaW5nIGludmFsaWQuCisgKi8KKyNkZWZpbmUJSVhQMjAwMF9WQUxJRF9JUlFfTUFTSwkweDBmMGZmZmZmCisKKy8qCisgKiBQQ0kgY29uZmlnIHJlZ2lzdGVyIGFjY2VzcyBmcm9tIGNvcmUKKyAqLworI2RlZmluZSBJWFAyMDAwX1BDSV9DUkVHKHgpCQkodm9sYXRpbGUgdW5zaWduZWQgbG9uZyopKElYUDIwMDBfUENJX0NSRUdfVklSVF9CQVNFIHwgKHgpKQorI2RlZmluZSBJWFAyMDAwX1BDSV9DTURTVEFUIAkJSVhQMjAwMF9QQ0lfQ1JFRygweDA0KQorI2RlZmluZSBJWFAyMDAwX1BDSV9DU1JfQkFSCQlJWFAyMDAwX1BDSV9DUkVHKDB4MTApCisjZGVmaW5lIElYUDIwMDBfUENJX1NSQU1fQkFSCQlJWFAyMDAwX1BDSV9DUkVHKDB4MTQpCisjZGVmaW5lIElYUDIwMDBfUENJX1NEUkFNX0JBUgkJSVhQMjAwMF9QQ0lfQ1JFRygweDE4KQorCisvKgorICogUENJIENTUnMKKyAqLworI2RlZmluZSBJWFAyMDAwX1BDSV9DU1IoeCkJCSh2b2xhdGlsZSB1bnNpZ25lZCBsb25nKikoSVhQMjAwMF9QQ0lfQ1NSX1ZJUlRfQkFTRSB8ICh4KSkKKworLyoKKyAqIFBDSSBvdXRib3VuZCBpbnRlcnJ1cHRzCisgKi8KKyNkZWZpbmUgSVhQMjAwMF9QQ0lfT1VUX0lOVF9TVEFUVVMJSVhQMjAwMF9QQ0lfQ1NSKDB4MzApCisjZGVmaW5lIElYUDIwMDBfUENJX09VVF9JTlRfTUFTSwlJWFAyMDAwX1BDSV9DU1IoMHgzNCkKKy8qCisgKiBQQ0kgY29tbXVuaWNhdGlvbnMKKyAqLworI2RlZmluZSBJWFAyMDAwX1BDSV9NQUlMQk9YMAkJSVhQMjAwMF9QQ0lfQ1NSKDB4NTApCisjZGVmaW5lIElYUDIwMDBfUENJX01BSUxCT1gxCQlJWFAyMDAwX1BDSV9DU1IoMHg1NCkKKyNkZWZpbmUgSVhQMjAwMF9QQ0lfTUFJTEJPWDIJCUlYUDIwMDBfUENJX0NTUigweDU4KQorI2RlZmluZSBJWFAyMDAwX1BDSV9NQUlMQk9YMwkJSVhQMjAwMF9QQ0lfQ1NSKDB4NUMpCisjZGVmaW5lIElYUDIwMDBfWFNDQUxFX0RPT1JCRUxMCQlJWFAyMDAwX1BDSV9DU1IoMHg2MCkKKyNkZWZpbmUgSVhQMjAwMF9YU0NBTEVfRE9PUkJFTExfU0VUVVAJSVhQMjAwMF9QQ0lfQ1NSKDB4NjQpCisjZGVmaW5lIElYUDIwMDBfUENJX0RPT1JCRUxMCQlJWFAyMDAwX1BDSV9DU1IoMHg3MCkKKyNkZWZpbmUgSVhQMjAwMF9QQ0lfRE9PUkJFTExfU0VUVVAJSVhQMjAwMF9QQ0lfQ1NSKDB4NzQpCisKKy8qCisgKiBETUEgZW5naW5lcworICovCisjZGVmaW5lIElYUDIwMDBfUENJX0NIMV9CWVRFX0NOVAlJWFAyMDAwX1BDSV9DU1IoMHg4MCkKKyNkZWZpbmUgSVhQMjAwMF9QQ0lfQ0gxX0FERFIJCUlYUDIwMDBfUENJX0NTUigweDg0KQorI2RlZmluZSBJWFAyMDAwX1BDSV9DSDFfRFJBTV9BRERSCUlYUDIwMDBfUENJX0NTUigweDg4KQorI2RlZmluZSBJWFAyMDAwX1BDSV9DSDFfREVTQ19QVFIJSVhQMjAwMF9QQ0lfQ1NSKDB4OEMpCisjZGVmaW5lIElYUDIwMDBfUENJX0NIMV9DTlRSTAkJSVhQMjAwMF9QQ0lfQ1NSKDB4OTApCisjZGVmaW5lIElYUDIwMDBfUENJX0NIMV9NRV9QQVJBTQlJWFAyMDAwX1BDSV9DU1IoMHg5NCkKKyNkZWZpbmUgSVhQMjAwMF9QQ0lfQ0gyX0JZVEVfQ05UCUlYUDIwMDBfUENJX0NTUigweEEwKQorI2RlZmluZSBJWFAyMDAwX1BDSV9DSDJfQUREUgkJSVhQMjAwMF9QQ0lfQ1NSKDB4QTQpCisjZGVmaW5lIElYUDIwMDBfUENJX0NIMl9EUkFNX0FERFIJSVhQMjAwMF9QQ0lfQ1NSKDB4QTgpCisjZGVmaW5lIElYUDIwMDBfUENJX0NIMl9ERVNDX1BUUglJWFAyMDAwX1BDSV9DU1IoMHhBQykKKyNkZWZpbmUgSVhQMjAwMF9QQ0lfQ0gyX0NOVFJMCQlJWFAyMDAwX1BDSV9DU1IoMHhCMCkKKyNkZWZpbmUgSVhQMjAwMF9QQ0lfQ0gyX01FX1BBUkFNCUlYUDIwMDBfUENJX0NTUigweEI0KQorI2RlZmluZSBJWFAyMDAwX1BDSV9DSDNfQllURV9DTlQJSVhQMjAwMF9QQ0lfQ1NSKDB4QzApCisjZGVmaW5lIElYUDIwMDBfUENJX0NIM19BRERSCQlJWFAyMDAwX1BDSV9DU1IoMHhDNCkKKyNkZWZpbmUgSVhQMjAwMF9QQ0lfQ0gzX0RSQU1fQUREUglJWFAyMDAwX1BDSV9DU1IoMHhDOCkKKyNkZWZpbmUgSVhQMjAwMF9QQ0lfQ0gzX0RFU0NfUFRSCUlYUDIwMDBfUENJX0NTUigweENDKQorI2RlZmluZSBJWFAyMDAwX1BDSV9DSDNfQ05UUkwJCUlYUDIwMDBfUENJX0NTUigweEQwKQorI2RlZmluZSBJWFAyMDAwX1BDSV9DSDNfTUVfUEFSQU0JSVhQMjAwMF9QQ0lfQ1NSKDB4RDQpCisjZGVmaW5lIElYUDIwMDBfRE1BX0lORl9NT0RFCQlJWFAyMDAwX1BDSV9DU1IoMHhFMCkKKy8qCisgKiBTaXplIG1hc2tzIGZvciBCQVJzCisgKi8KKyNkZWZpbmUgSVhQMjAwMF9QQ0lfU1JBTV9CQVNFX0FERFJfTUFTSwlJWFAyMDAwX1BDSV9DU1IoMHhGQykKKyNkZWZpbmUgSVhQMjAwMF9QQ0lfRFJBTV9CQVNFX0FERFJfTUFTSwlJWFAyMDAwX1BDSV9DU1IoMHgxMDApCisvKgorICogQ29udHJvbCBhbmQgdUVuZ2luZSByZWxhdGVkCisgKi8KKyNkZWZpbmUgSVhQMjAwMF9QQ0lfQ09OVFJPTAkJSVhQMjAwMF9QQ0lfQ1NSKDB4MTNDKQorI2RlZmluZSBJWFAyMDAwX1BDSV9BRERSX0VYVAkJSVhQMjAwMF9QQ0lfQ1NSKDB4MTQwKQorI2RlZmluZSBJWFAyMDAwX1BDSV9NRV9QVVNIX1NUQVRVUwlJWFAyMDAwX1BDSV9DU1IoMHgxNDgpCisjZGVmaW5lIElYUDIwMDBfUENJX01FX1BVU0hfRU4JCUlYUDIwMDBfUENJX0NTUigweDE0QykKKyNkZWZpbmUgSVhQMjAwMF9QQ0lfRVJSX1NUQVRVUwkJSVhQMjAwMF9QQ0lfQ1NSKDB4MTUwKQorI2RlZmluZSBJWFAyMDAwX1BDSV9FUlJfRU5BQkxFCQlJWFAyMDAwX1BDSV9DU1IoMHgxNTQpCisvKgorICogSW5ib3VuZCBQQ0kgaW50ZXJydXB0IGNvbnRyb2wKKyAqLworI2RlZmluZSBJWFAyMDAwX1BDSV9YU0NBTEVfSU5UX1NUQVRVUwlJWFAyMDAwX1BDSV9DU1IoMHgxNTgpCisjZGVmaW5lIElYUDIwMDBfUENJX1hTQ0FMRV9JTlRfRU5BQkxFCUlYUDIwMDBfUENJX0NTUigweDE1QykKKworI2RlZmluZSBJWFAyMDAwX1BDSUNOVExfUE5SCQkoMTw8MTcpCS8qIFBDSSBub3QgUmVzZXQgYml0IG9mIFBDSV9DT05UUk9MICovCisjZGVmaW5lIElYUDIwMDBfUENJQ05UTF9QQ0YJCSgxPDwyOCkJLyogUENJIENlbnRyb2xmdW5jdGlvbiBiaXQgKi8KKyNkZWZpbmUgSVhQMjAwMF9YU0NBTEVfSU5UCQkoMTw8MSkJLyogSW50ZXJydXB0IGZyb20gWFNjYWxlIHRvIFBDSSAqLworCisvKiBUaGVzZSBhcmUgZnJvbSB0aGUgSVJRIHJlZ2lzdGVyIGluIHRoZSBQQ0kgSVNSIHJlZ2lzdGVyICovCisjZGVmaW5lIFBDSV9DT05UUk9MX0JFX0RFTwkJKDEgPDwgMjIpCS8qIEJpZyBFbmRpYW4gRGF0YSBFbmFibGUgT3V0ICovCisjZGVmaW5lIFBDSV9DT05UUk9MX0JFX0RFSQkJKDEgPDwgMjEpCS8qIEJpZyBFbmRpYW4gRGF0YSBFbmFibGUgSW4gICovCisjZGVmaW5lIFBDSV9DT05UUk9MX0JFX0JFTwkJKDEgPDwgMjApCS8qIEJpZyBFbmRpYW4gQnl0ZSBFbmFibGUgT3V0ICovCisjZGVmaW5lIFBDSV9DT05UUk9MX0JFX0JFSQkJKDEgPDwgMTkpCS8qIEJpZyBFbmRpYW4gQnl0ZSBFbmFibGUgSW4gICovCisjZGVmaW5lIFBDSV9DT05UUk9MX1BOUgkJCSgxIDw8IDE3KQkvKiBQQ0kgTm90IFJlc2V0IGJpdCAqLworCisjZGVmaW5lIElYUDIwMDBfUENJX1JTVF9SRUwJCSgxIDw8IDIpCisjZGVmaW5lIENGR19SU1RfRElSCQkJKCpJWFAyMDAwX1BDSV9DT05UUk9MICYgSVhQMjAwMF9QQ0lDTlRMX1BDRikKKyNkZWZpbmUgQ0ZHX1BDSV9CT09UX0hPU1QJCSgxIDw8IDIpCisjZGVmaW5lIENGR19CT09UX1BST00JCQkoMSA8PCAxKQorCisvKgorICogU2xvd1BvcnQgQ1NScworICoKKyAqIFRoZSBzbG93cG9ydCBpcyB1c2VkIHRvIGFjY2VzcyB0aGluZ3MgbGlrZSBmbGFzaCwgU09ORVQgZnJhbWVyIGNvbnRyb2wKKyAqIHBvcnRzLCBzbGF2ZSBtaWNyb3Byb2Nlc3NvcnMsIENQTERzLCBhbmQgb3RoZXJzIG9mIGNoaXAgbWVtb3J5IG1hcHBlZAorICogcGVyaXBoZXJhbHMuCisgKi8KKyNkZWZpbmUJU0xPV1BPUlRfQ1NSKHgpCQkodm9sYXRpbGUgdW5zaWduZWQgbG9uZyopKElYUDIwMDBfU0xPV1BPUlRfQ1NSX1ZJUlRfQkFTRSB8ICh4KSkKKworI2RlZmluZQlJWFAyMDAwX1NMT1dQT1JUX0NDUgkJU0xPV1BPUlRfQ1NSKDB4MDApCisjZGVmaW5lCUlYUDIwMDBfU0xPV1BPUlRfV1RDMQkJU0xPV1BPUlRfQ1NSKDB4MDQpCisjZGVmaW5lCUlYUDIwMDBfU0xPV1BPUlRfV1RDMgkJU0xPV1BPUlRfQ1NSKDB4MDgpCisjZGVmaW5lCUlYUDIwMDBfU0xPV1BPUlRfUlRDMQkJU0xPV1BPUlRfQ1NSKDB4MGMpCisjZGVmaW5lCUlYUDIwMDBfU0xPV1BPUlRfUlRDMgkJU0xPV1BPUlRfQ1NSKDB4MTApCisjZGVmaW5lCUlYUDIwMDBfU0xPV1BPUlRfRlNSCQlTTE9XUE9SVF9DU1IoMHgxNCkKKyNkZWZpbmUJSVhQMjAwMF9TTE9XUE9SVF9QQ1IJCVNMT1dQT1JUX0NTUigweDE4KQorI2RlZmluZQlJWFAyMDAwX1NMT1dQT1JUX0FEQwkJU0xPV1BPUlRfQ1NSKDB4MUMpCisjZGVmaW5lCUlYUDIwMDBfU0xPV1BPUlRfRkFDCQlTTE9XUE9SVF9DU1IoMHgyMCkKKyNkZWZpbmUJSVhQMjAwMF9TTE9XUE9SVF9GUk0JCVNMT1dQT1JUX0NTUigweDI0KQorI2RlZmluZQlJWFAyMDAwX1NMT1dQT1JUX0ZJTgkJU0xPV1BPUlRfQ1NSKDB4MjgpCisKKy8qCisgKiBDQ1IgdmFsdWVzLiAgCisgKiBUaGUgQ0NSIGNvbmZpZ3VyZXMgdGhlIGNsb2NrIGRpdmlzaW9uIGZvciB0aGUgc2xvd3BvcnQgaW50ZXJmYWNlLgorICovCisjZGVmaW5lCVNMT1dQT1JUX0NDUl9ESVZfMQkJMHgwMAorI2RlZmluZQlTTE9XUE9SVF9DQ1JfRElWXzIJCTB4MDEKKyNkZWZpbmUJU0xPV1BPUlRfQ0NSX0RJVl80CQkweDAyCisjZGVmaW5lCVNMT1dQT1JUX0NDUl9ESVZfNgkJMHgwMworI2RlZmluZQlTTE9XUE9SVF9DQ1JfRElWXzgJCTB4MDQKKyNkZWZpbmUJU0xPV1BPUlRfQ0NSX0RJVl8xMAkJMHgwNQorI2RlZmluZQlTTE9XUE9SVF9DQ1JfRElWXzEyCQkweDA2CisjZGVmaW5lCVNMT1dQT1JUX0NDUl9ESVZfMTQJCTB4MDcKKyNkZWZpbmUJU0xPV1BPUlRfQ0NSX0RJVl8xNgkJMHgwOAorI2RlZmluZQlTTE9XUE9SVF9DQ1JfRElWXzE4CQkweDA5CisjZGVmaW5lCVNMT1dQT1JUX0NDUl9ESVZfMjAJCTB4MGEKKyNkZWZpbmUJU0xPV1BPUlRfQ0NSX0RJVl8yMgkJMHgwYgorI2RlZmluZQlTTE9XUE9SVF9DQ1JfRElWXzI0CQkweDBjCisjZGVmaW5lCVNMT1dQT1JUX0NDUl9ESVZfMjYJCTB4MGQKKyNkZWZpbmUJU0xPV1BPUlRfQ0NSX0RJVl8yOAkJMHgwZQorI2RlZmluZQlTTE9XUE9SVF9DQ1JfRElWXzMwCQkweDBmCisKKy8qCisgKiBQQ1IgdmFsdWVzLiAgUENSIGNvbmZpZ3VyZSB0aGUgbW9kZSBvZiB0aGUgaW50ZXJmYWNlLgorICovCisjZGVmaW5lCVNMT1dQT1JUX01PREVfRkxBU0gJCTB4MDAKKyNkZWZpbmUJU0xPV1BPUlRfTU9ERV9MVUNFTlQJCTB4MDEKKyNkZWZpbmUJU0xPV1BPUlRfTU9ERV9QTUNfU0lFUlJBCTB4MDIKKyNkZWZpbmUJU0xPV1BPUlRfTU9ERV9JTlRFTF9VUAkJMHgwMworI2RlZmluZQlTTE9XUE9SVF9NT0RFX01PVE9ST0xBX1VQCTB4MDQKKworLyoKKyAqIEFEQyB2YWx1ZXMuICBEZWZpbmVzIGRhdGEgYW5kIGFkZHJlc3MgYnVzIHdpZHRocy4KKyAqLworI2RlZmluZQlTTE9XUE9SVF9BRERSX1dJRFRIXzgJCTB4MDAKKyNkZWZpbmUJU0xPV1BPUlRfQUREUl9XSURUSF8xNgkJMHgwMQorI2RlZmluZQlTTE9XUE9SVF9BRERSX1dJRFRIXzI0CQkweDAyCisjZGVmaW5lCVNMT1dQT1JUX0FERFJfV0lEVEhfMzIJCTB4MDMKKyNkZWZpbmUJU0xPV1BPUlRfREFUQV9XSURUSF84CQkweDAwCisjZGVmaW5lCVNMT1dQT1JUX0RBVEFfV0lEVEhfMTYJCTB4MTAKKyNkZWZpbmUJU0xPV1BPUlRfREFUQV9XSURUSF8yNAkJMHgyMAorI2RlZmluZQlTTE9XUE9SVF9EQVRBX1dJRFRIXzMyCQkweDMwCisKKy8qCisgKiBNYXNrcyBhbmQgc2hpZnRzIGZvciB2YXJpb3VzIGZpZWxkcyBpbiB0aGUgV1RDIGFuZCBSVEMgcmVnaXN0ZXJzLgorICovCisjZGVmaW5lCVNMT1dQT1JUX1dSVENfTUFTS19IRAkJMHgwMDAzCisjZGVmaW5lCVNMT1dQT1JUX1dSVENfTUFTS19TVQkJMHgwMDNjCisjZGVmaW5lCVNMT1dQT1JUX1dSVENfTUFTS19QVwkJMHgwM2MwCisKKyNkZWZpbmUJU0xPV1BPUlRfV1JUQ19TSElGVF9IRAkJMHgwMAorI2RlZmluZQlTTE9XUE9SVF9XUlRDX1NISUZUX1NVCQkweDAyCisjZGVmaW5lCVNMT1dQT1JUX1dSVENfU0hGSVRfUFcJCTB4MDYKKworCisvKgorICogR1BJTyByZWdpc3RlcnMgJiBHUElPIGludGVyZmFjZS4KKyAqLworI2RlZmluZSBJWFAyMDAwX0dQSU9fUkVHKHgpCQkoKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcqKShJWFAyMDAwX0dQSU9fVklSVF9CQVNFKyh4KSkpCisjZGVmaW5lIElYUDIwMDBfR1BJT19QTFIJCUlYUDIwMDBfR1BJT19SRUcoMHgwMCkKKyNkZWZpbmUgSVhQMjAwMF9HUElPX1BEUFIJCUlYUDIwMDBfR1BJT19SRUcoMHgwNCkKKyNkZWZpbmUgSVhQMjAwMF9HUElPX1BEU1IJCUlYUDIwMDBfR1BJT19SRUcoMHgwOCkKKyNkZWZpbmUgSVhQMjAwMF9HUElPX1BEQ1IJCUlYUDIwMDBfR1BJT19SRUcoMHgwYykKKyNkZWZpbmUgSVhQMjAwMF9HUElPX1BPUFIJCUlYUDIwMDBfR1BJT19SRUcoMHgxMCkKKyNkZWZpbmUgSVhQMjAwMF9HUElPX1BPU1IJCUlYUDIwMDBfR1BJT19SRUcoMHgxNCkKKyNkZWZpbmUgSVhQMjAwMF9HUElPX1BPQ1IJCUlYUDIwMDBfR1BJT19SRUcoMHgxOCkKKyNkZWZpbmUgSVhQMjAwMF9HUElPX1JFRFIJCUlYUDIwMDBfR1BJT19SRUcoMHgxYykKKyNkZWZpbmUgSVhQMjAwMF9HUElPX0ZFRFIJCUlYUDIwMDBfR1BJT19SRUcoMHgyMCkKKyNkZWZpbmUgSVhQMjAwMF9HUElPX0VEU1IJCUlYUDIwMDBfR1BJT19SRUcoMHgyNCkKKyNkZWZpbmUgSVhQMjAwMF9HUElPX0xTSFIJCUlYUDIwMDBfR1BJT19SRUcoMHgyOCkKKyNkZWZpbmUgSVhQMjAwMF9HUElPX0xTTFIJCUlYUDIwMDBfR1BJT19SRUcoMHgyYykKKyNkZWZpbmUgSVhQMjAwMF9HUElPX0xEU1IJCUlYUDIwMDBfR1BJT19SRUcoMHgzMCkKKyNkZWZpbmUgSVhQMjAwMF9HUElPX0lORVIJCUlYUDIwMDBfR1BJT19SRUcoMHgzNCkKKyNkZWZpbmUgSVhQMjAwMF9HUElPX0lOU1IJCUlYUDIwMDBfR1BJT19SRUcoMHgzOCkKKyNkZWZpbmUgSVhQMjAwMF9HUElPX0lOQ1IJCUlYUDIwMDBfR1BJT19SRUcoMHgzYykKKyNkZWZpbmUgSVhQMjAwMF9HUElPX0lOU1QJCUlYUDIwMDBfR1BJT19SRUcoMHg0MCkKKworLyoKKyAqICJHbG9iYWwiIHJlZ2lzdGVycy4uLndoYXRldmVyIHRoYXQncyBzdXBwb3NlZCB0byBtZWFuLgorICovCisjZGVmaW5lIEdMT0JBTF9SRUdfQkFTRQkJCShJWFAyMDAwX0dMT0JBTF9SRUdfVklSVF9CQVNFICsgMHgwYTAwKQorI2RlZmluZSBHTE9CQUxfUkVHKHgpCQkJKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcqKShHTE9CQUxfUkVHX0JBU0UgfCAoeCkpCisKKyNkZWZpbmUgSVhQMjAwMF9QUk9EX0lECQkJR0xPQkFMX1JFRygweDAwKQorCisjZGVmaW5lIElYUDIwMDBfTUFKX1BST0RfVFlQRV9NQVNLCTB4MDAxRjAwMDAKKyNkZWZpbmUgSVhQMjAwMF9NQUpfUFJPRF9UWVBFX0lYUDIwMDAJMHgwMDAwMDAwMAorI2RlZmluZSBJWFAyMDAwX01JTl9QUk9EX1RZUEVfTUFTSyAJMHgwMDAwRkYwMAorI2RlZmluZSBJWFAyMDAwX01JTl9QUk9EX1RZUEVfSVhQMjQwMAkweDAwMDAwMjAwCisjZGVmaW5lIElYUDIwMDBfTUlOX1BST0RfVFlQRV9JWFAyODUwCTB4MDAwMDAxMDAKKyNkZWZpbmUgSVhQMjAwMF9NSU5fUFJPRF9UWVBFX0lYUDI4MDAJMHgwMDAwMDAwMAorI2RlZmluZSBJWFAyMDAwX01BSl9SRVZfTUFTSwkgICAgICAJMHgwMDAwMDBGMAorI2RlZmluZSBJWFAyMDAwX01JTl9SRVZfTUFTSwkgICAgICAJMHgwMDAwMDAwRgorI2RlZmluZSBJWFAyMDAwX1BST0RfSURfTUFTSwkJMHhGRkZGRkZGRgorCisjZGVmaW5lIElYUDIwMDBfTUlTQ19DT05UUk9MCQlHTE9CQUxfUkVHKDB4MDQpCisjZGVmaW5lIElYUDIwMDBfTVNGX0NMS19DTlRSTCAgCQlHTE9CQUxfUkVHKDB4MDgpCisjZGVmaW5lIElYUDIwMDBfUkVTRVQwICAgICAgCQlHTE9CQUxfUkVHKDB4MGMpCisjZGVmaW5lIElYUDIwMDBfUkVTRVQxICAgICAgCQlHTE9CQUxfUkVHKDB4MTApCisjZGVmaW5lIElYUDIwMDBfQ0NSICAgICAgICAgICAgCQlHTE9CQUxfUkVHKDB4MTQpCisjZGVmaW5lCUlYUDIwMDBfU1RSQVBfT1BUSU9OUyAgCQlHTE9CQUxfUkVHKDB4MTgpCisKKyNkZWZpbmUJUlNUQUxMCQkJCSgxIDw8IDE2KQorI2RlZmluZQlXRFRfUkVTRVRfRU5BQkxFCQkweDAxMDAwMDAwCisKKworI2VuZGlmCQkJCS8qIF9JWFAyMDAwX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyMDAwL21lbW9yeS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjAwMC9tZW1vcnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGY0MTVjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjAwMC9tZW1vcnkuaApAQCAtMCwwICsxLDM0IEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjAwMC9tZW1vcnkuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMiBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDQgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9NRU1PUllfSAorI2RlZmluZSBfX0FTTV9BUkNIX01FTU9SWV9ICisKKyNkZWZpbmUgUEhZU19PRkZTRVQJKDB4MDAwMDAwMDBVTCkKKworLyoKKyAqIFZpcnR1YWwgdmlldyA8LT4gRE1BIHZpZXcgbWVtb3J5IGFkZHJlc3MgdHJhbnNsYXRpb25zCisgKiB2aXJ0X3RvX2J1czogVXNlZCB0byB0cmFuc2xhdGUgdGhlIHZpcnR1YWwgYWRkcmVzcyB0byBhbgorICoJCWFkZHJlc3Mgc3VpdGFibGUgdG8gYmUgcGFzc2VkIHRvIHNldF9kbWFfYWRkcgorICogYnVzX3RvX3ZpcnQ6IFVzZWQgdG8gY29udmVydCBhbiBhZGRyZXNzIGZvciBETUEgb3BlcmF0aW9ucworICoJCXRvIGFuIGFkZHJlc3MgdGhhdCB0aGUga2VybmVsIGNhbiB1c2UuCisgKi8KKyNpbmNsdWRlIDxhc20vYXJjaC9peHAyMDAwLXJlZ3MuaD4KKworI2RlZmluZSBfX3ZpcnRfdG9fYnVzKHYpIFwKKwkoKChfX3ZpcnRfdG9fcGh5cyh2KSAtIDB4MCkgKyAoKklYUDIwMDBfUENJX1NEUkFNX0JBUiAmIDB4ZmZmZmZmZjApKSkKKworI2RlZmluZSBfX2J1c190b192aXJ0KGIpIFwKKwlfX3BoeXNfdG9fdmlydCgoKChiIC0gKCpJWFAyMDAwX1BDSV9TRFJBTV9CQVIgJiAweGZmZmZmZmYwKSkgKyAweDApKSkKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDIwMDAvcGFyYW0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDIwMDAvcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjQ2ZDllCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjAwMC9wYXJhbS5oCkBAIC0wLDAgKzEsMyBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyMDAwL3BhcmFtLmgKKyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjAwMC9wbGF0Zm9ybS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjAwMC9wbGF0Zm9ybS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwOWU0NGQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyMDAwL3BsYXRmb3JtLmgKQEAgLTAsMCArMSwxNjYgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyMDAwL3BsYXRmb3JtLmgKKyAqCisgKiBWYXJpb3VzIGJpdHMgb2YgY29kZSB1c2VkIGJ5IHBsYXRmb3JtLWxldmVsIGNvZGUuCisgKgorICogQXV0aG9yOiBEZWVwYWsgU2F4ZW5hIDxkc2F4ZW5hQHBsZXhpdHkubmV0PgorICoKKyAqIENvcHlyaWdodCAyMDA0IChjKSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuIAorICogCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIAorICogTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IAorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworLyoKKyAqIFRoZSBJWFAyNDAwIEIwIHNpbGljb24gY29udGFpbnMgYW4gZXJyYXR1bSAoIzY2KSB0aGF0IGNhdXNlcyB3cml0ZXMKKyAqIHRvIG9uLWNoaXAgSS9PIHJlZ2lzdGVyIHRvIG5vdCBjb21wbGV0ZSBmdWxseS4gV2hhdCB0aGlzIG1lYW5zIGlzCisgKiB0aGF0IGlmIHlvdSBoYXZlIGEgd3JpdGUgdG8gb24tY2hpcCBJL08gZm9sbG93ZWQgYnkgYSBiYWNrLXRvLWJhY2sKKyAqIHJlYWQgb3Igd3JpdGUsIHRoZSBmaXJzdCB3cml0ZSB3aWxsIGhhcHBlbiB0d2ljZS4gT1IuLi5pZiBpdCdzCisgKiBub3QgYSBiYWNrLXRvLWJhY2sgdHJhbnNhY3Rpb24sIHRoZSByZWFkIG9yIHdyaXRlIHdpbGwgZ2VuZXJhdGUKKyAqIGluY29ycmVjdCBkYXRhLgorICoKKyAqIFRoZSBvZmZpY2lhbCB3b3JrIGFyb3VuZCBmb3IgdGhpcyBpcyB0byBzZXQgdGhlIG9uLWNoaXAgSS9PIHJlZ2lvbnMKKyAqIGFzIFhDQj0xMDEgYW5kIHRoZW4gZm9yY2UgYSByZWFkLWJhY2sgZnJvbSB0aGUgcmVnaXN0ZXIuCisgKgorICovCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9FTlAyNjExKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX0lYRFAyNDAwKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX0lYRFAyNDAxKQorCisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgkJLyogUGlja3VwIGxvY2FsX2lycV8gZnVuY3Rpb25zICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpeHAyMDAwX3JlZ193cml0ZSh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICpyZWcsIHVuc2lnbmVkIGxvbmcgdmFsKQoreworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgZHVtbXk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkqcmVnID0gdmFsOworCWJhcnJpZXIoKTsKKwlkdW1teSA9ICpyZWc7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorI2Vsc2UKKyNkZWZpbmUJaXhwMjAwMF9yZWdfd3JpdGUocmVnLCB2YWwpICgqcmVnID0gdmFsKQorI2VuZGlmCS8qIElYRFAyNDAwIHx8IElYRFAyNDAxICovCisKKy8qCisgKiBCb2FyZHMgbWF5IG11bHRpcGxleCBkaWZmZXJlbnQgZGV2aWNlcyBvbiB0aGUgMm5kIGNoYW5uZWwgb2YgCisgKiB0aGUgc2xvd3BvcnQgaW50ZXJmYWNlIHRoYXQgZWFjaCBuZWVkIGRpZmZlcmVudCBjb25maWd1cmF0aW9uIAorICogc2V0dGluZ3MuICBGb3IgZXhhbXBsZSwgdGhlIElYRFAyNDAwIHVzZXMgY2hhbm5lbCAyIG9uIHRoZSBpbnRlcmZhY2UgCisgKiB0byBhY2Nlc3MgdGhlIENQTEQsIHRoZSBzd2l0Y2ggZmFicmljIGNhcmQsIGFuZCB0aGUgbWVkaWEgY2FyZC4gIEVhY2gKKyAqIG9uZSBuZWVkcyBhIGRpZmZlcmVudCBtb2RlIHNvIGRyaXZlcnMgbXVzdCBzYXZlL3Jlc3RvcmUgdGhlIG1vZGUgCisgKiBiZWZvcmUgYW5kIGFmdGVyIGVhY2ggb3BlcmF0aW9uLiAgCisgKgorICogYWNxdWlyZV9zbG93cG9ydCgmeW91cl9jb25maWcpOworICogLi4uCisgKiBkbyBzbG93cG9ydCBvcGVyYXRpb25zCisgKiAuLi4KKyAqIHJlbGVhc2Vfc2xvd3BvcnQoKTsKKyAqCisgKiBOb3RlIHRoYXQgd2hpbGUgeW91IGhhdmUgdGhlIHNsb3dwb3J0LCB5b3UgYXJlIGhvbGRpbmcgYSBzcGlubG9jaywKKyAqIHNvIHlvdXIgY29kZSBzaG91bGQgYmUgd3JpdHRlbiBhcyBpZiB5b3UgZXhwbGljaXRseSBhY3F1aXJlZCBhIGxvY2suCisgKgorICogVGhlIGNvbmZpZ3VyYXRpb24gb25seSBhZmZlY3RzIGRldmljZSAyIG9uIHRoZSBzbG93cG9ydCwgc28gdGhlCisgKiBNVEQgbWFwIGRyaXZlciBkb2VzIG5vdCBhY3F1aXJlL3JlbGVhc2UgdGhlIHNsb3dwb3J0LiAgCisgKi8KK3N0cnVjdCBzbG93cG9ydF9jZmcgeworCXVuc2lnbmVkIGxvbmcgQ0NSOwkvKiBDbG9jayBkaXZpZGUgKi8KKwl1bnNpZ25lZCBsb25nIFdUQzsJLyogV3JpdGUgVGltaW5nIENvbnRyb2wgKi8KKwl1bnNpZ25lZCBsb25nIFJUQzsJLyogUmVhZCBUaW1pbmcgQ29udHJvbCAqLworCXVuc2lnbmVkIGxvbmcgUENSOwkvKiBQcm90b2NvbCBDb250cm9sIFJlZ2lzdGVyICovCisJdW5zaWduZWQgbG9uZyBBREM7CS8qIEFkZHJlc3MvRGF0YSBXaWR0aCBDb250cm9sICovCit9OworCisKK3ZvaWQgaXhwMjAwMF9hY3F1aXJlX3Nsb3dwb3J0KHN0cnVjdCBzbG93cG9ydF9jZmcgKiwgc3RydWN0IHNsb3dwb3J0X2NmZyAqKTsKK3ZvaWQgaXhwMjAwMF9yZWxlYXNlX3Nsb3dwb3J0KHN0cnVjdCBzbG93cG9ydF9jZmcgKik7CisKKy8qCisgKiBJWFAyNDAwIEEwL0ExIGFuZCAgSVhQMjgwMCBBMC9BMS9BMiBoYXZlIGJyb2tlbiBzbG93cG9ydCB0aGF0IHJlcXVpcmVzCisgKiB0d2Vha2luZyBvZiBhZGRyZXNzZXMgaW4gdGhlIE1URCBkcml2ZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaXhwMjAwMF9oYXNfYnJva2VuX3Nsb3dwb3J0KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBpZCA9ICpJWFAyMDAwX1BST0RfSUQ7CisJdW5zaWduZWQgbG9uZyBpZF9wcm9kID0gaWQgJiAoSVhQMjAwMF9NQUpfUFJPRF9UWVBFX01BU0sgfAorCQkJCSAgICAgIElYUDIwMDBfTUlOX1BST0RfVFlQRV9NQVNLKTsKKwlyZXR1cm4gKCgoaWRfcHJvZCA9PQorCQkgIC8qIGZpeGVkIGluIElYUDI0MDAtQjAgKi8KKwkJICAoSVhQMjAwMF9NQUpfUFJPRF9UWVBFX0lYUDIwMDAgfAorCQkgICBJWFAyMDAwX01JTl9QUk9EX1RZUEVfSVhQMjQwMCkpICYmCisJCSAoKGlkICYgSVhQMjAwMF9NQUpfUkVWX01BU0spID09IDApKSB8fAorCQkoKGlkX3Byb2QgPT0KKwkJICAvKiBmaXhlZCBpbiBJWFAyODAwLUIwICovCisJCSAgKElYUDIwMDBfTUFKX1BST0RfVFlQRV9JWFAyMDAwIHwKKwkJICAgSVhQMjAwMF9NSU5fUFJPRF9UWVBFX0lYUDI4MDApKSAmJgorCQkgKChpZCAmIElYUDIwMDBfTUFKX1JFVl9NQVNLKSA9PSAwKSkgfHwKKwkJKChpZF9wcm9kID09CisJCSAgLyogZml4ZWQgaW4gSVhQMjg1MC1CMCAqLworCQkgIChJWFAyMDAwX01BSl9QUk9EX1RZUEVfSVhQMjAwMCB8CisJCSAgIElYUDIwMDBfTUlOX1BST0RfVFlQRV9JWFAyODUwKSkgJiYKKwkJICgoaWQgJiBJWFAyMDAwX01BSl9SRVZfTUFTSykgPT0gMCkpKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXhwMjAwMF9oYXNfZmxhc2godm9pZCkKK3sKKwlyZXR1cm4gKCgqSVhQMjAwMF9TVFJBUF9PUFRJT05TKSAmIChDRkdfQk9PVF9QUk9NKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGl4cDIwMDBfaXNfcGNpbWFzdGVyKHZvaWQpCit7CisJcmV0dXJuICgoKklYUDIwMDBfU1RSQVBfT1BUSU9OUykgJiAoQ0ZHX1BDSV9CT09UX0hPU1QpKTsKK30KKwordm9pZCBpeHAyMDAwX21hcF9pbyh2b2lkKTsKK3ZvaWQgaXhwMjAwMF9pbml0X2lycSh2b2lkKTsKK3ZvaWQgaXhwMjAwMF9pbml0X3RpbWUodW5zaWduZWQgbG9uZyk7Cit1bnNpZ25lZCBsb25nIGl4cDIwMDBfZ2V0dGltZW9mZnNldCh2b2lkKTsKKworc3RydWN0IHBjaV9zeXNfZGF0YTsKKwordm9pZCBpeHAyMDAwX3BjaV9wcmVpbml0KHZvaWQpOworaW50IGl4cDIwMDBfcGNpX3NldHVwKGludCwgc3RydWN0IHBjaV9zeXNfZGF0YSopOworc3RydWN0IHBjaV9idXMqIGl4cDIwMDBfcGNpX3NjYW5fYnVzKGludCwgc3RydWN0IHBjaV9zeXNfZGF0YSopOworaW50IGl4cDIwMDBfcGNpX3JlYWRfY29uZmlnKHN0cnVjdCBwY2lfYnVzKiwgdW5zaWduZWQgaW50LCBpbnQsIGludCwgdTMyICopOworaW50IGl4cDIwMDBfcGNpX3dyaXRlX2NvbmZpZyhzdHJ1Y3QgcGNpX2J1cyosIHVuc2lnbmVkIGludCwgaW50LCBpbnQsIHUzMik7CisKKy8qCisgKiBTZXZlcmFsIG9mIHRoZSBJWFAyMDAwIHN5c3RlbXMgaGF2ZSBiYW5rZWQgZmxhc2ggc28gd2UgbmVlZCB0byBleHRlbmQgdGhlCisgKiBmbGFzaF9wbGF0Zm9ybV9kYXRhIHN0cnVjdHVyZSB3aXRoIHNvbWUgcHJpdmF0ZSBwb2ludGVycworICovCitzdHJ1Y3QgaXhwMjAwMF9mbGFzaF9kYXRhIHsKKwlzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1fZGF0YSAqcGxhdGZvcm1fZGF0YTsKKwlpbnQgbnJfYmFua3M7CisJdW5zaWduZWQgbG9uZyAoKmJhbmtfc2V0dXApKHVuc2lnbmVkIGxvbmcpOworfTsKKworLyoKKyAqIEdQSU8gaGVscGVyIGZ1bmN0aW9ucworICovCisjZGVmaW5lCUdQSU9fSU4JCTAKKyNkZWZpbmUJR1BJT19PVVQJMQorCitleHRlcm4gdm9pZCBncGlvX2xpbmVfY29uZmlnKGludCBsaW5lLCBpbnQgc3R5bGUpOworCitzdGF0aWMgaW5saW5lIGludCBncGlvX2xpbmVfZ2V0KGludCBsaW5lKQoreworCXJldHVybiAoKCgqSVhQMjAwMF9HUElPX1BMUikgPj4gbGluZSkgJiAxKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGdwaW9fbGluZV9zZXQoaW50IGxpbmUsIGludCB2YWx1ZSkKK3sKKwlpZiAodmFsdWUpIAorCQlpeHAyMDAwX3JlZ193cml0ZShJWFAyMDAwX0dQSU9fUE9TUiwgKDEgPDwgbGluZSkpOworCWVsc2UgCisJCWl4cDIwMDBfcmVnX3dyaXRlKElYUDIwMDBfR1BJT19QT0NSLCAoMSA8PCBsaW5lKSk7Cit9CisKK3N0cnVjdCBpeHAyMDAwX2kyY19waW5zIHsKKwl1bnNpZ25lZCBsb25nIHNkYV9waW47CisJdW5zaWduZWQgbG9uZyBzY2xfcGluOworfTsKKworI2VuZGlmIC8qICAhX19BU1NFTUJMWV9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyMDAwL3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjAwMC9zeXN0ZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjQ4OWNjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjAwMC9zeXN0ZW0uaApAQCAtMCwwICsxLDU0IEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjAwMC9zeXN0ZW0uaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMiBJbnRlbCBDb3JwLgorICogQ29weXJpY2h0IChDKSAyMDAzLTIwMDUgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2lkbGUodm9pZCkKK3sKKwljcHVfZG9faWRsZSgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUpCit7CisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKworCS8qCisJICogUmVzZXQgZmxhc2ggYmFua2luZyByZWdpc3RlciBzbyB0aGF0IHdlIGFyZSBwb2ludGluZyBhdAorCSAqIFJlZEJvb3QgYmFuay4KKwkgKi8KKwlpZiAobWFjaGluZV9pc19peGRwMjQwMSgpKSB7CisJCSpJWERQMlgwMV9DUExEX0ZMQVNIX1JFRyA9ICgoMCA+PiBJWERQMlgwMV9GTEFTSF9XSU5ET1dfQklUUykKKwkJCQkJCXwgSVhEUDJYMDFfQ1BMRF9GTEFTSF9JTlRFUk4pOworCQkqSVhEUDJYMDFfQ1BMRF9SRVNFVF9SRUcgPSAweGZmZmZmZmZmOworCX0KKworCS8qCisJICogT24gSVhEUDI4MDEgd2UgbmVlZCB0byB3cml0ZSB0aGlzIG1hZ2ljIHNlcXVlbmNlIHRvIHRoZSBDUExECisJICogdG8gY2F1c2UgYSBjb21wbGV0ZSByZXNldCBvZiB0aGUgQ1BVIGFuZCBhbGwgZXh0ZXJuYWwgZGV2aWNlcworCSAqIGFuZCBtb3ZlcyB0aGUgZmxhc2ggYmFuayByZWdpc3RlciBiYWNrIHRvIDAuCisJICovCisJaWYgKG1hY2hpbmVfaXNfaXhkcDI4MDEoKSkgeworCQl1bnNpZ25lZCBsb25nIHJlc2V0X3JlZyA9ICpJWERQMlgwMV9DUExEX1JFU0VUX1JFRzsKKwkJcmVzZXRfcmVnID0gMHg1NUFBMDAwMCB8IChyZXNldF9yZWcgJiAweDAwMDBGRkZGKTsKKwkJKklYRFAyWDAxX0NQTERfUkVTRVRfUkVHID0gcmVzZXRfcmVnOworCQltYigpOworCQkqSVhEUDJYMDFfQ1BMRF9SRVNFVF9SRUcgPSAweDgwMDAwMDAwOworCX0KKworCS8qCisJICogV2UgZG8gYSByZXNldCBhbGwgaWYgd2UgYXJlIFBDSSBtYXN0ZXIuIFdlIGNvdWxkIGJlIGEgc2xhdmUgYW5kIHdlCisJICogZG9uJ3Qgd2FudCB0byBkbyBhbnl0aGluZyBmdW5reSBvbiB0aGUgUENJIGJ1cy4KKwkgKi8KKwlpZiAoKklYUDIwMDBfU1RSQVBfT1BUSU9OUyAmIENGR19QQ0lfQk9PVF9IT1NUKSB7CisJCSooSVhQMjAwMF9SRVNFVDApIHw9IChSU1RBTEwpOworCX0KK30KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDIwMDAvdGltZXguaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDIwMDAvdGltZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzhhMTgzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjAwMC90aW1leC5oCkBAIC0wLDAgKzEsMTMgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyMDAwL3RpbWV4LmgKKyAqCisgKiBJWFAyMDAwIGFyY2hpdGVjdHVyZSB0aW1leCBzcGVjaWZpY2F0aW9ucworICovCisKKworLyoKKyAqIERlZmF1bHQgY2xvY2sgaXMgNTBNSHogQVBCLCBidXQgcGxhdGZvcm0gY29kZSBjYW4gb3ZlcnJpZGUgdGhpcworICovCisjZGVmaW5lIENMT0NLX1RJQ0tfUkFURQk1MDAwMDAwMAorCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDIwMDAvdW5jb21wcmVzcy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjAwMC91bmNvbXByZXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2QzZDViMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDIwMDAvdW5jb21wcmVzcy5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyMDAwL3VuY29tcHJlc3MuaAorICoKKyAqCisgKiBPcmlnaW5hbCBBdXRob3I6IE5hZWVtIEFmemFsIDxuYWVlbS5tLmFmemFsQGludGVsLmNvbT4KKyAqIE1haW50YWluZXI6IERlZXBhayBTYXhlbmEgPGRzYXhlbmFAcGxleGl0eS5uZXQ+CisgKgorICogQ29weXJpZ2h0IDIwMDIgSW50ZWwgQ29ycC4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9yZWcuaD4KKworI2RlZmluZSBVQVJUX0JBU0UJMHhjMDAzMDAwMAorCisjZGVmaW5lIFBIWVMoeCkgICAgICAgICAgKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKFVBUlRfQkFTRSArIHgpKQorCisjZGVmaW5lIFVBUlREUiAgICAgICAgICBQSFlTKDB4MDApICAgICAgLyogVHJhbnNtaXQgcmVnIGRsYWI9MCAqLworI2RlZmluZSBVQVJURExMICAgICAgICAgUEhZUygweDAwKSAgICAgIC8qIERpdmlzb3IgTGF0Y2ggcmVnIGRsYWI9MSovCisjZGVmaW5lIFVBUlRETE0gICAgICAgICBQSFlTKDB4MDQpICAgICAgLyogRGl2aXNvciBMYXRjaCByZWcgZGxhYj0xKi8KKyNkZWZpbmUgVUFSVElFUiAgICAgICAgIFBIWVMoMHgwNCkgICAgICAvKiBJbnRlcnJ1cHQgZW5hYmxlIHJlZyAqLworI2RlZmluZSBVQVJURkNSICAgICAgICAgUEhZUygweDA4KSAgICAgIC8qIEZJRk8gY29udHJvbCByZWcgZGxhYiA9MCovCisjZGVmaW5lIFVBUlRMQ1IgICAgICAgICBQSFlTKDB4MGMpICAgICAgLyogQ29udHJvbCByZWcgKi8KKyNkZWZpbmUgVUFSVFNSICAgICAgICAgIFBIWVMoMHgxNCkgICAgICAvKiBTdGF0dXMgcmVnICovCisKKworc3RhdGljIF9faW5saW5lX18gdm9pZCBwdXRjKGNoYXIgYykKK3sKKwlpbnQgaiA9IDB4MTAwMDsKKworCXdoaWxlICgtLWogJiYgISgqVUFSVFNSICYgVUFSVF9MU1JfVEhSRSkpOyAKKwkqVUFSVERSID0gYzsKK30KKworc3RhdGljIHZvaWQgcHV0c3RyKGNvbnN0IGNoYXIgKnMpCit7CisJd2hpbGUgKCpzKQorCXsKKwkJcHV0Yygqcyk7CisJCWlmICgqcyA9PSAnXG4nKQorCQkJcHV0YygnXHInKTsKKwkJcysrOworCX0KK30KKworI2RlZmluZSBhcmNoX2RlY29tcF9zZXR1cCgpCisjZGVmaW5lIGFyY2hfZGVjb21wX3dkb2coKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjAwMC92bWFsbG9jLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyMDAwL3ZtYWxsb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTRiY2JjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjAwMC92bWFsbG9jLmgKQEAgLTAsMCArMSwyMyBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDIwMDAvdm1hbGxvYy5oCisgKgorICogQXV0aG9yOiBOYWVlbSBBZnphbCA8bmFlZW0ubS5hZnphbEBpbnRlbC5jb20+CisgKgorICogQ29weXJpZ2h0IDIwMDIgSW50ZWwgQ29ycC4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBKdXN0IGFueSBhcmJpdHJhcnkgb2Zmc2V0IHRvIHRoZSBzdGFydCBvZiB0aGUgdm1hbGxvYyBWTSBhcmVhOiB0aGUKKyAqIGN1cnJlbnQgOE1CIHZhbHVlIGp1c3QgbWVhbnMgdGhhdCB0aGVyZSB3aWxsIGJlIGEgOE1CICJob2xlIiBhZnRlciB0aGUKKyAqIHBoeXNpY2FsIG1lbW9yeSB1bnRpbCB0aGUga2VybmVsIHZpcnR1YWwgbWVtb3J5IHN0YXJ0cy4gIFRoYXQgbWVhbnMgdGhhdAorICogYW55IG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIHdpbGwgaG9wZWZ1bGx5IGJlIGNhdWdodC4KKyAqIFRoZSB2bWFsbG9jKCkgcm91dGluZXMgbGVhdmVzIGEgaG9sZSBvZiA0a0IgYmV0d2VlbiBlYWNoIHZtYWxsb2NlZAorICogYXJlYSBmb3IgdGhlIHNhbWUgcmVhc29uLiA7KQorICovCisjZGVmaW5lIFZNQUxMT0NfT0ZGU0VUCSAgICAoOCoxMDI0KjEwMjQpCisjZGVmaW5lIFZNQUxMT0NfU1RBUlQJICAgICgoKHVuc2lnbmVkIGxvbmcpaGlnaF9tZW1vcnkgKyBWTUFMTE9DX09GRlNFVCkgJiB+KFZNQUxMT0NfT0ZGU0VULTEpKQorI2RlZmluZSBWTUFMTE9DX1ZNQUREUih4KSAgICgodW5zaWduZWQgbG9uZykoeCkpCisjZGVmaW5lIFZNQUxMT0NfRU5ECSAgICAweGZhZmZlZmZmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvY295b3RlLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvY295b3RlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQwYzJkMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9jb3lvdGUuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwNHh4L2NveW90ZS5oCisgKgorICogQURJIEVuZ2luZWVyaW5nIHBsYXRmb3JtIHNwZWNpZmljIGRlZmluaXRpb25zCisgKgorICogQXV0aG9yOiBEZWVwYWsgU2F4ZW5hIDxkc2F4ZW5hQHBsZXhpdHkubmV0PgorICoKKyAqIENvcHlyaWdodCAyMDA0IChjKSBNb250YVZpc3RhLCBTb2Z0d2FyZSwgSW5jLiAKKyAqIAorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyAKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSAKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfSEFSRFdBUkVfSF9fCisjZXJyb3IgIkRvIG5vdCBpbmNsdWRlIHRoaXMgZGlyZWN0bHksIGluc3RlYWQgI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPiIKKyNlbmRpZgorCisjZGVmaW5lCUNPWU9URV9GTEFTSF9CQVNFCUlYUDRYWF9FWFBfQlVTX0NTMF9CQVNFX1BIWVMKKyNkZWZpbmUJQ09ZT1RFX0ZMQVNIX1NJWkUJSVhQNFhYX0VYUF9CVVNfQ1NYX1JFR0lPTl9TSVpFICogMgorCisvKiBQQ0kgY29udHJvbGxlciBHUElPIHRvIElSUSBwaW4gbWFwcGluZ3MgKi8KKyNkZWZpbmUJQ09ZT1RFX1BDSV9TTE9UMF9QSU4JNgorI2RlZmluZQlDT1lPVEVfUENJX1NMT1QxX1BJTgkxMQorCisjZGVmaW5lCUNPWU9URV9QQ0lfU0xPVDBfREVWSUQJMTQKKyNkZWZpbmUJQ09ZT1RFX1BDSV9TTE9UMV9ERVZJRAkxNQorCisjZGVmaW5lCUNPWU9URV9JREVfQkFTRV9QSFlTCUlYUDRYWF9FWFBfQlVTX0NTM19CQVNFX1BIWVMKKyNkZWZpbmUJQ09ZT1RFX0lERV9CQVNFX1ZJUlQJMHhGRkZFMTAwMAorI2RlZmluZQlDT1lPVEVfSURFX1JFR0lPTl9TSVpFCTB4MTAwMAorCisjZGVmaW5lCUNPWU9URV9JREVfREFUQV9QT1JUCTB4RkZGRTEwRTAKKyNkZWZpbmUJQ09ZT1RFX0lERV9DVFJMX1BPUlQJMHhGRkZFMTBGQworI2RlZmluZQlDT1lPVEVfSURFX0VSUk9SX1BPUlQJMHhGRkZFMTBFMgorCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvZGVidWctbWFjcm8uUyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9kZWJ1Zy1tYWNyby5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0OTlhZTgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvZGVidWctbWFjcm8uUwpAQCAtMCwwICsxLDM0IEBACisvKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvZGVidWctbWFjcm8uUworICoKKyAqIERlYnVnZ2luZyBtYWNybyBpbmNsdWRlIGhlYWRlcgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTQtMTk5OSBSdXNzZWxsIEtpbmcKKyAqICBNb3ZlZCBmcm9tIGxpbnV4L2FyY2gvYXJtL2tlcm5lbC9kZWJ1Zy5TIGJ5IEJlbiBEb29rcworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisgICAgICAgICAgICAgICAgLm1hY3JvICBhZGRydWFydCxyeAorICAgICAgICAgICAgICAgIG1yYyAgICAgcDE1LCAwLCBccngsIGMxLCBjMAorICAgICAgICAgICAgICAgIHRzdCAgICAgXHJ4LCAjMSAgICAgICAgICAgICAgICAgQCBNTVUgZW5hYmxlZD8KKyAgICAgICAgICAgICAgICBtb3ZlcSAgIFxyeCwgIzB4YzgwMDAwMDAKKyAgICAgICAgICAgICAgICBtb3ZuZSAgIFxyeCwgIzB4ZmYwMDAwMDAKKyAgICAgICAgICAgICAgICBhZGQgICAgIFxyeCxccngsIzMgICAgICAgICAgICAgIEAgVWFydCByZWdzIGFyZSBhdCBvZmYgc2V0IG9mIDMgaWYKKwkJCQkJCUAgYnl0ZSB3cml0ZXMgdXNlZCAtIEJpZyBFbmRpYW4uCisgICAgICAgICAgICAgICAgLmVuZG0KKworICAgICAgICAgICAgICAgLm1hY3JvICBzZW5kdWFydCxyZCxyeAorICAgICAgICAgICAgICAgIHN0cmIgICAgXHJkLCBbXHJ4XQorICAgICAgICAgICAgICAgIC5lbmRtCisKKyAgICAgICAgICAgICAgICAubWFjcm8gIHdhaXR1YXJ0LHJkLHJ4CisxMDAyOiAgICAgICAgICAgbGRyYiAgICBccmQsIFtccngsICMweDE0XQorICAgICAgICAgICAgICAgIGFuZCAgICAgXHJkLCBccmQsICMweDYwCQlAIGNoZWNrIFRIUkUgYW5kIFRFTVQgYml0cworICAgICAgICAgICAgICAgIHRlcSAgICAgXHJkLCAjMHg2MAorICAgICAgICAgICAgICAgIGJuZSAgICAgMTAwMmIKKyAgICAgICAgICAgICAgICAuZW5kbQorCisgICAgICAgICAgICAgICAgLm1hY3JvICBidXN5dWFydCxyZCxyeAorICAgICAgICAgICAgICAgIC5lbmRtCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvZG1hLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzEyMDY1ZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9kbWEuaApAQCAtMCwwICsxLDI2IEBACisvKgorICogaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwNHh4L2RtYS5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMDQgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisjaWZuZGVmIF9fQVNNX0FSQ0hfRE1BX0gKKyNkZWZpbmUgX19BU01fQVJDSF9ETUFfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKworI2RlZmluZSBNQVhfRE1BX0FERFJFU1MJCShQQUdFX09GRlNFVCArIFNaXzY0TSkKKworLyogTm8gRE1BICovCisjZGVmaW5lIE1BWF9ETUFfQ0hBTk5FTFMJMAorCisjZW5kaWYgLyogX0FTTV9BUkNIX0RNQV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvZW50cnktbWFjcm8uUyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9lbnRyeS1tYWNyby5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1NWRhNjQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvZW50cnktbWFjcm8uUwpAQCAtMCwwICsxLDM5IEBACisvKgorICogaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwNHh4L2VudHJ5LW1hY3JvLlMKKyAqCisgKiBMb3ctbGV2ZWwgSVJRIGhlbHBlciBtYWNyb3MgZm9yIElYUDR4eC1iYXNlZCBwbGF0Zm9ybXMKKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisJCS5tYWNybwlkaXNhYmxlX2ZpcQorCQkuZW5kbQorCisJCS5tYWNybwlnZXRfaXJxbnJfYW5kX2Jhc2UsIGlycW5yLCBpcnFzdGF0LCBiYXNlLCB0bXAKKwkJbGRyCVxpcnFzdGF0LCA9KElYUDRYWF9JTlRDX0JBU0VfVklSVCtJWFA0WFhfSUNJUF9PRkZTRVQpCisJCWxkcglcaXJxc3RhdCwgW1xpcnFzdGF0XQkJQCBnZXQgaW50ZXJydXB0cworCQljbXAJXGlycXN0YXQsICMwCisJCWJlcQkxMDAxZgorCQljbHogICAgIFxpcnFuciwgXGlycXN0YXQKKwkJbW92ICAgICBcYmFzZSwgIzMxCisJCXN1YnMgICAgXGlycW5yLCBcYmFzZSwgXGlycW5yCisKKzEwMDE6CisJCS8qCisJCSAqIElYUDQ2NSBoYXMgYW4gdXBwZXIgSVJRIHN0YXR1cyByZWdpc3RlcgorCQkgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfSVhQNDZYKQorCQlibmUgCTEwMDJmCisJCWxkcglcaXJxc3RhdCwgPShJWFA0WFhfSU5UQ19CQVNFX1ZJUlQrSVhQNFhYX0lDSVAyX09GRlNFVCkKKwkJbGRyCVxpcnFzdGF0LCBbXGlycXN0YXRdCQlAIGdldCB1cHBlciBpbnRlcnJ1cHRzCisJCW1vdglcaXJxbnIsICM2MworCQljbHoJXGlycXN0YXQsIFxpcnFzdGF0CisgCQljbXAJXGlycXN0YXQsICMzMgorCQlzdWJuZQlcaXJxbnIsIFxpcnFuciwgXGlycXN0YXQKKzEwMDI6CisjZW5kaWYKKwkJLmVuZG0KKworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvZ3R3eDU3MTUuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9ndHd4NTcxNS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjNDYwYWY3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwNHh4L2d0d3g1NzE1LmgKQEAgLTAsMCArMSwxMjAgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvZ3R3eDU3MTUuaAorICoKKyAqIEdlbXRlayBHVFdYNTcxNSBHYXRld2F5IChMaW5rc3lzIFdSVjU0RykKKyAqCisgKiBDb3B5cmlnaHQgMjAwNCAoYykgR2VvcmdlIFQuIEpvc2VwaAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9IQVJEV0FSRV9IX18KKyNlcnJvciAiRG8gbm90IGluY2x1ZGUgdGhpcyBkaXJlY3RseSwgaW5zdGVhZCAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+IgorI2VuZGlmCisjaW5jbHVkZSAiaXJxcy5oIgorCisjZGVmaW5lIEdUV1g1NzE1X0dQSU8wCTAKKyNkZWZpbmUgR1RXWDU3MTVfR1BJTzEJMQorI2RlZmluZSBHVFdYNTcxNV9HUElPMgkyCisjZGVmaW5lIEdUV1g1NzE1X0dQSU8zCTMKKyNkZWZpbmUgR1RXWDU3MTVfR1BJTzQJNAorI2RlZmluZSBHVFdYNTcxNV9HUElPNQk1CisjZGVmaW5lIEdUV1g1NzE1X0dQSU82CTYKKyNkZWZpbmUgR1RXWDU3MTVfR1BJTzcJNworI2RlZmluZSBHVFdYNTcxNV9HUElPOAk4CisjZGVmaW5lIEdUV1g1NzE1X0dQSU85CTkKKyNkZWZpbmUgR1RXWDU3MTVfR1BJTzEwCTEwCisjZGVmaW5lIEdUV1g1NzE1X0dQSU8xMQkxMQorI2RlZmluZSBHVFdYNTcxNV9HUElPMTIJMTIKKyNkZWZpbmUgR1RXWDU3MTVfR1BJTzEzCTEzCisjZGVmaW5lIEdUV1g1NzE1X0dQSU8xNAkxNAorCisjZGVmaW5lIEdUV1g1NzE1X0dQSU8wX0lSUQkJCUlSUV9JWFA0WFhfR1BJTzAKKyNkZWZpbmUgR1RXWDU3MTVfR1BJTzFfSVJRCQkJSVJRX0lYUDRYWF9HUElPMQorI2RlZmluZSBHVFdYNTcxNV9HUElPMl9JUlEJCQlJUlFfSVhQNFhYX0dQSU8yCisjZGVmaW5lIEdUV1g1NzE1X0dQSU8zX0lSUQkJCUlSUV9JWFA0WFhfR1BJTzMKKyNkZWZpbmUgR1RXWDU3MTVfR1BJTzRfSVJRCQkJSVJRX0lYUDRYWF9HUElPNAorI2RlZmluZSBHVFdYNTcxNV9HUElPNV9JUlEJCQlJUlFfSVhQNFhYX0dQSU81CisjZGVmaW5lIEdUV1g1NzE1X0dQSU82X0lSUQkJCUlSUV9JWFA0WFhfR1BJTzYKKyNkZWZpbmUgR1RXWDU3MTVfR1BJTzdfSVJRCQkJSVJRX0lYUDRYWF9HUElPNworI2RlZmluZSBHVFdYNTcxNV9HUElPOF9JUlEJCQlJUlFfSVhQNFhYX0dQSU84CisjZGVmaW5lIEdUV1g1NzE1X0dQSU85X0lSUQkJCUlSUV9JWFA0WFhfR1BJTzkKKyNkZWZpbmUgR1RXWDU3MTVfR1BJTzEwX0lSUQkJSVJRX0lYUDRYWF9HUElPMTAKKyNkZWZpbmUgR1RXWDU3MTVfR1BJTzExX0lSUQkJSVJRX0lYUDRYWF9HUElPMTEKKyNkZWZpbmUgR1RXWDU3MTVfR1BJTzEyX0lSUQkJSVJRX0lYUDRYWF9HUElPMTIKKyNkZWZpbmUgR1RXWDU3MTVfR1BJTzEzX0lSUQkJSVJRX0lYUDRYWF9TV19JTlQxCisjZGVmaW5lIEdUV1g1NzE1X0dQSU8xNF9JUlEJCUlSUV9JWFA0WFhfU1dfSU5UMgorCisKKyNkZWZpbmUJR1RXWDU3MTVfRkxBU0hfQkFTRQlJWFA0WFhfRVhQX0JVU19DUzBfQkFTRV9QSFlTCisjZGVmaW5lCUdUV1g1NzE1X0ZMQVNIX1NJWkUJKDB4MDA4MDAwMDApCisKKy8qIFBDSSBjb250cm9sbGVyIEdQSU8gdG8gSVJRIHBpbiBtYXBwaW5ncworCisJCQlJTlRBCUlOVEIKK1NMT1QgMAkxMAkJMTEKK1NMT1QgMQkxMQkJMTAKKworKi8KKworI2RlZmluZQlHVFdYNTcxNV9QQ0lfU0xPVDBfREVWSUQJMAorI2RlZmluZQlHVFdYNTcxNV9QQ0lfU0xPVDBfSU5UQV9HUElPCUdUV1g1NzE1X0dQSU8xMAorI2RlZmluZQlHVFdYNTcxNV9QQ0lfU0xPVDBfSU5UQl9HUElPCUdUV1g1NzE1X0dQSU8xMQorI2RlZmluZQlHVFdYNTcxNV9QQ0lfU0xPVDBfSU5UQV9JUlEJR1RXWDU3MTVfR1BJTzEwX0lSUQorI2RlZmluZQlHVFdYNTcxNV9QQ0lfU0xPVDBfSU5UQl9JUlEJR1RXWDU3MTVfR1BJTzExX0lSUQorCisjZGVmaW5lCUdUV1g1NzE1X1BDSV9TTE9UMV9ERVZJRAkxCisjZGVmaW5lCUdUV1g1NzE1X1BDSV9TTE9UMV9JTlRBX0dQSU8JR1RXWDU3MTVfR1BJTzExCisjZGVmaW5lCUdUV1g1NzE1X1BDSV9TTE9UMV9JTlRCX0dQSU8JR1RXWDU3MTVfR1BJTzEwCisjZGVmaW5lCUdUV1g1NzE1X1BDSV9TTE9UMV9JTlRBX0lSUQlHVFdYNTcxNV9HUElPMTFfSVJRCisjZGVmaW5lCUdUV1g1NzE1X1BDSV9TTE9UMV9JTlRCX0lSUQlHVFdYNTcxNV9HUElPMTBfSVJRCisKKyNkZWZpbmUgR1RXWDU3MTVfUENJX1NMT1RfQ09VTlQJCQkyCisjZGVmaW5lIEdUV1g1NzE1X1BDSV9JTlRfUElOX0NPVU5UCQkyCisKKy8qCisgKiBHUElPIDUsNiw3IGFuZDEyIGFyZSBoYXJkIHdpcmVkIHRvIHRoZSBLZW5kaW4gS1M4OTk1TSBTd2l0Y2gKKyAqIGFuZCBvcGVyYXRlIGFzIGFuIFNQSSB0eXBlIGludGVyZmFjZS4gIFRoZSBkZXRhaWxzIG9mIHRoZSBpbnRlcmZhY2UKKyAqIGFyZSBhdmFpbGFibGUgb24gS2VuZGluL01pY3JlbCdzIHdlYiBzaXRlLgorICovCisKKyNkZWZpbmUgR1RXWDU3MTVfS1NTUElfU0VMRUNUCUdUV1g1NzE1X0dQSU81CisjZGVmaW5lIEdUV1g1NzE1X0tTU1BJX1RYRAkJR1RXWDU3MTVfR1BJTzYKKyNkZWZpbmUgR1RXWDU3MTVfS1NTUElfQ0xPQ0sJR1RXWDU3MTVfR1BJTzcKKyNkZWZpbmUgR1RXWDU3MTVfS1NTUElfUlhECQlHVFdYNTcxNV9HUElPMTIKKworLyoKKyAqIFRoZSAicmVzZXQiIGJ1dHRvbiBpcyB3aXJlZCB0byBHUElPIDMuCisgKiBUaGUgR1BJTyBpcyBicm91Z2h0ICJsb3ciIHdoZW4gdGhlIGJ1dHRvbiBpcyBwdXNoZWQuCisgKi8KKworI2RlZmluZSBHVFdYNTcxNV9CVVRUT05fR1BJTwlHVFdYNTcxNV9HUElPMworI2RlZmluZSBHVFdYNTcxNV9CVVRUT05fSVJRCUdUV1g1NzE1X0dQSU8zX0lSUQorCisvKgorICogIEJvYXJkIExhYmVsICAgICAgRnJvbnQgTGFiZWwKKyAqICBMRUQxICAgICAgICAgICAgIFBvd2VyCisgKiAgTEVEMiAgICAgICAgICAgICBXaXJlbGVzcy1HCisgKiAgTEVEMyAgICAgICAgICAgICBub3QgcG9wdWxhdGVkIGJ1dCBjb3VsZCBiZQorICogIExFRDQgICAgICAgICAgICAgSW50ZXJuZXQKKyAqICBMRUQ1IC0gTEVEOCAgICAgIENvbnRyb2xsZWQgYnkgS1M4OTk1TSBTd2l0Y2gKKyAqICBMRUQ5ICAgICAgICAgICAgIERNWgorICovCisKKyNkZWZpbmUgR1RXWDU3MTVfTEVEMV9HUElPCQlHVFdYNTcxNV9HUElPMgorI2RlZmluZSBHVFdYNTcxNV9MRUQyX0dQSU8JCUdUV1g1NzE1X0dQSU85CisjZGVmaW5lIEdUV1g1NzE1X0xFRDNfR1BJTwkJR1RXWDU3MTVfR1BJTzgKKyNkZWZpbmUgR1RXWDU3MTVfTEVENF9HUElPCQlHVFdYNTcxNV9HUElPMQorI2RlZmluZSBHVFdYNTcxNV9MRUQ5X0dQSU8JCUdUV1g1NzE1X0dQSU80CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvaGFyZHdhcmUuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9oYXJkd2FyZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhYzk2NGIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvaGFyZHdhcmUuaApAQCAtMCwwICsxLDQ4IEBACisvKgorICogaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwNHh4L2hhcmR3YXJlLmggCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAyIEludGVsIENvcnBvcmF0aW9uLgorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDQgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKy8qCisgKiBIYXJkd2FyZSBkZWZpbml0aW9ucyBmb3IgSVhQNHh4IGJhc2VkIHN5c3RlbXMKKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfSEFSRFdBUkVfSF9fCisjZGVmaW5lIF9fQVNNX0FSQ0hfSEFSRFdBUkVfSF9fCisKKyNkZWZpbmUgUENJQklPU19NSU5fSU8JCQkweDAwMDAxMDAwCisjZGVmaW5lIFBDSUJJT1NfTUlOX01FTQkJCTB4NDgwMDAwMDAKKworLyoKKyAqIFdlIG92ZXJyaWRlIHRoZSBzdGFuZGFyZCBkbWEtbWFzayByb3V0aW5lcyBmb3IgYm91bmNpbmcuCisgKi8KKyNkZWZpbmUJSEFWRV9BUkNIX1BDSV9TRVRfRE1BX01BU0sKKworI2RlZmluZSBwY2liaW9zX2Fzc2lnbl9hbGxfYnVzc2VzKCkJMQorCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX0lYUDQ2NSkgJiYgIWRlZmluZWQoX19BU1NFTUJMWV9fKQorZXh0ZXJuIHVuc2lnbmVkIGludCBwcm9jZXNzb3JfaWQ7CisjZGVmaW5lIGNwdV9pc19peHA0NjUoKSAoKHByb2Nlc3Nvcl9pZCAmIDB4ZmZmZmZmYzApID09IDB4NjkwNTQyMDApCisjZWxzZQorI2RlZmluZQljcHVfaXNfaXhwNDY1KCkJKDApCisjZW5kaWYKKworLyogUmVnaXN0ZXIgbG9jYXRpb25zIGFuZCBiaXRzICovCisjaW5jbHVkZSAiaXhwNHh4LXJlZ3MuaCIKKworLyogUGxhdGZvcm0gaGVscGVyIGZ1bmN0aW9ucyBhbmQgZGVmaW5pdGlvbnMgKi8KKyNpbmNsdWRlICJwbGF0Zm9ybS5oIgorCisvKiBQbGF0Zm9ybSBzcGVjaWZpYyBkZXRhaWxzICovCisjaW5jbHVkZSAiaXhkcDQyNS5oIgorI2luY2x1ZGUgImNveW90ZS5oIgorI2luY2x1ZGUgInBycG1jMTEwMC5oIgorCisjZW5kaWYgIC8qIF9BU01fQVJDSF9IQVJEV0FSRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvaW8uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9pby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyN2I5ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvaW8uaApAQCAtMCwwICsxLDM4OCBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9pby5oCisgKgorICogQXV0aG9yOiBEZWVwYWsgU2F4ZW5hIDxkc2F4ZW5hQHBsZXhpdHkubmV0PgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMi0yMDA0ICBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fQVNNX0FSTV9BUkNIX0lPX0gKKyNkZWZpbmUgX19BU01fQVJNX0FSQ0hfSU9fSAorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisKKyNkZWZpbmUgSU9fU1BBQ0VfTElNSVQgMHhmZmZmMDAwMAorCisjZGVmaW5lCUJJVCh4KQkoKDEpPDwoeCkpCisKKworZXh0ZXJuIGludCAoKml4cDR4eF9wY2lfcmVhZCkodTMyIGFkZHIsIHUzMiBjbWQsIHUzMiogZGF0YSk7CitleHRlcm4gaW50IGl4cDR4eF9wY2lfd3JpdGUodTMyIGFkZHIsIHUzMiBjbWQsIHUzMiBkYXRhKTsKKworCisvKgorICogSVhQNHh4IHByb3ZpZGVzIHR3byBtZXRob2RzIG9mIGFjY2Vzc2luZyBQQ0kgbWVtb3J5IHNwYWNlOgorICoKKyAqIDEpIEEgZGlyZWN0IG1hcHBlZCB3aW5kb3cgZnJvbSAweDQ4MDAwMDAwIHRvIDB4NGJmZmZmZmYgKDY0TUIpLgorICogICAgVG8gYWNjZXNzIFBDSSB2aWEgdGhpcyBzcGFjZSwgd2Ugc2ltcGx5IGlvcmVtYXAoKSB0aGUgQkFSCisgKiAgICBpbnRvIHRoZSBrZXJuZWwgYW5kIHdlIGNhbiB1c2UgdGhlIHN0YW5kYXJkIHJlYWRbYndsXS93cml0ZVtid2xdCisgKiAgICBtYWNyb3MuIFRoaXMgaXMgdGhlIHByZWZmZXJlZCBtZXRob2QgZHVlIHRvIHNwZWVkIGJ1dCBpdAorICogICAgbGltaXRzIHRoZSBzeXN0ZW0gdG8ganVzdCA2NE1CIG9mIFBDSSBtZW1vcnkuIFRoaXMgY2FuIGJlIAorICogICAgcHJvYmxhbWF0aWMgaWYgdXNpbmcgdmlkZW8gY2FyZHMgYW5kIG90aGVyIG1lbW9yeS1oZWF2eQorICogICAgdGFyZ2V0cy4KKyAqCisgKiAyKSBJZiA+IDY0TUIgb2YgbWVtb3J5IHNwYWNlIGlzIHJlcXVpcmVkLCB0aGUgSVhQNHh4IGNhbiBiZSBjb25maWd1cmVkCisgKiAgICB0byB1c2UgaW5kaXJlY3QgcmVnaXN0ZXJzIHRvIGFjY2VzcyBQQ0kgKGFzIHdlIGRvIGJlbG93IGZvciBJL08KKyAqICAgIHRyYW5zYWN0aW9ucykuIFRoaXMgYWxsb3dzIGZvciB1cCB0byAxMjhNQiAoMHg0ODAwMDAwMCB0byAweDRmZmZmZmZmKQorICogICAgb2YgbWVtb3J5IG9uIHRoZSBidXMuIFRoZSBkaXNhZHZhbnRhZGdlIG9mIHRoaXMgaXMgdGhhdCBldmVyeSAKKyAqICAgIFBDSSBhY2Nlc3MgcmVxdWlyZXMgdGhyZWUgbG9jYWwgcmVnaXN0ZXIgYWNjZXNzZXMgcGx1cyBhIHNwaW5sb2NrLAorICogICAgYnV0IGluIHNvbWUgY2FzZXMgdGhlIHBlcmZvcm1hbmNlIGhpdCBpcyBhY2NlcHRhYmxlLiBJbiBhZGRpdGlvbiwKKyAqICAgIHlvdSBjYW5ub3QgbW1hcCgpIFBDSSBkZXZpY2VzIGluIHRoaXMgY2FzZS4KKyAqCisgKi8KKyNpZm5kZWYJQ09ORklHX0lYUDRYWF9JTkRJUkVDVF9QQ0kKKworI2RlZmluZSBfX21lbV9wY2koYSkJCShhKQorCisjZWxzZQorCisjaW5jbHVkZSA8bGludXgvbW0uaD4KKworLyoKKyAqIEluIHRoZSBjYXNlIG9mIHVzaW5nIGluZGlyZWN0IFBDSSwgd2Ugc2ltcGx5IHJldHVybiB0aGUgYWN0dWFsIFBDSQorICogYWRkcmVzcyBhbmQgb3VyIHJlYWQvd3JpdGUgaW1wbGVtZW50YXRpb24gdXNlIHRoYXQgdG8gZHJpdmUgdGhlIAorICogYWNjZXNzIHJlZ2lzdGVycy4gSWYgc29tZXRoaW5nIG91dHNpZGUgb2YgUENJIGlzIGlvcmVtYXAnZCwgd2UKKyAqIGZhbGxiYWNrIHRvIHRoZSBkZWZhdWx0LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqCitfX2l4cDR4eF9pb3JlbWFwKHVuc2lnbmVkIGxvbmcgYWRkciwgc2l6ZV90IHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHVuc2lnbmVkIGxvbmcgYWxpZ24pCit7CisJZXh0ZXJuIHZvaWQgX19pb21lbSAqIF9faW9yZW1hcCh1bnNpZ25lZCBsb25nLCBzaXplX3QsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOworCWlmKChhZGRyIDwgMHg0ODAwMDAwMCkgfHwgKGFkZHIgPiAweDRmZmZmZmZmKSkKKwkJcmV0dXJuIF9faW9yZW1hcChhZGRyLCBzaXplLCBmbGFncywgYWxpZ24pOworCisJcmV0dXJuICh2b2lkICopYWRkcjsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitfX2l4cDR4eF9pb3VubWFwKHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlleHRlcm4gdm9pZCBfX2lvdW5tYXAodm9pZCBfX2lvbWVtICphZGRyKTsKKworCWlmICgodTMyKWFkZHIgPj0gVk1BTExPQ19TVEFSVCkKKwkJX19pb3VubWFwKGFkZHIpOworfQorCisjZGVmaW5lIF9fYXJjaF9pb3JlbWFwKGEsIHMsIGYsIHgpCV9faXhwNHh4X2lvcmVtYXAoYSwgcywgZiwgeCkKKyNkZWZpbmUJX19hcmNoX2lvdW5tYXAoYSkJCV9faXhwNHh4X2lvdW5tYXAoYSkKKworI2RlZmluZQl3cml0ZWIocCwgdikJCQlfX2l4cDR4eF93cml0ZWIocCwgdikKKyNkZWZpbmUJd3JpdGV3KHAsIHYpCQkJX19peHA0eHhfd3JpdGV3KHAsIHYpCisjZGVmaW5lCXdyaXRlbChwLCB2KQkJCV9faXhwNHh4X3dyaXRlbChwLCB2KQorCisjZGVmaW5lCXdyaXRlc2IocCwgdiwgbCkJCV9faXhwNHh4X3dyaXRlc2IocCwgdiwgbCkKKyNkZWZpbmUJd3JpdGVzdyhwLCB2LCBsKQkJX19peHA0eHhfd3JpdGVzdyhwLCB2LCBsKQorI2RlZmluZQl3cml0ZXNsKHAsIHYsIGwpCQlfX2l4cDR4eF93cml0ZXNsKHAsIHYsIGwpCisJCisjZGVmaW5lCXJlYWRiKHApCQkJX19peHA0eHhfcmVhZGIocCkKKyNkZWZpbmUJcmVhZHcocCkJCQlfX2l4cDR4eF9yZWFkdyhwKQorI2RlZmluZQlyZWFkbChwKQkJCV9faXhwNHh4X3JlYWRsKHApCisJCisjZGVmaW5lCXJlYWRzYihwLCB2LCBsKQkJCV9faXhwNHh4X3JlYWRzYihwLCB2LCBsKQorI2RlZmluZQlyZWFkc3cocCwgdiwgbCkJCQlfX2l4cDR4eF9yZWFkc3cocCwgdiwgbCkKKyNkZWZpbmUJcmVhZHNsKHAsIHYsIGwpCQkJX19peHA0eHhfcmVhZHNsKHAsIHYsIGwpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCAKK19faXhwNHh4X3dyaXRlYih1OCB2YWx1ZSwgdTMyIGFkZHIpCit7CisJdTMyIG4sIGJ5dGVfZW5hYmxlcywgZGF0YTsKKworCWlmIChhZGRyID49IFZNQUxMT0NfU1RBUlQpIHsKKwkJX19yYXdfd3JpdGViKHZhbHVlLCBhZGRyKTsKKwkJcmV0dXJuOworCX0KKworCW4gPSBhZGRyICUgNDsKKwlieXRlX2VuYWJsZXMgPSAoMHhmICYgfkJJVChuKSkgPDwgSVhQNFhYX1BDSV9OUF9DQkVfQkVTTDsKKwlkYXRhID0gdmFsdWUgPDwgKDgqbik7CisJaXhwNHh4X3BjaV93cml0ZShhZGRyLCBieXRlX2VuYWJsZXMgfCBOUF9DTURfTUVNV1JJVEUsIGRhdGEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK19faXhwNHh4X3dyaXRlc2IodTMyIGJ1c19hZGRyLCB1OCAqdmFkZHIsIGludCBjb3VudCkKK3sKKwl3aGlsZSAoY291bnQtLSkKKwkJd3JpdGViKCp2YWRkcisrLCBidXNfYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAKK19faXhwNHh4X3dyaXRldyh1MTYgdmFsdWUsIHUzMiBhZGRyKQoreworCXUzMiBuLCBieXRlX2VuYWJsZXMsIGRhdGE7CisKKwlpZiAoYWRkciA+PSBWTUFMTE9DX1NUQVJUKSB7CisJCV9fcmF3X3dyaXRldyh2YWx1ZSwgYWRkcik7CisJCXJldHVybjsKKwl9CisKKwluID0gYWRkciAlIDQ7CisJYnl0ZV9lbmFibGVzID0gKDB4ZiAmIH4oQklUKG4pIHwgQklUKG4rMSkpKSA8PCBJWFA0WFhfUENJX05QX0NCRV9CRVNMOworCWRhdGEgPSB2YWx1ZSA8PCAoOCpuKTsKKwlpeHA0eHhfcGNpX3dyaXRlKGFkZHIsIGJ5dGVfZW5hYmxlcyB8IE5QX0NNRF9NRU1XUklURSwgZGF0YSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorX19peHA0eHhfd3JpdGVzdyh1MzIgYnVzX2FkZHIsIHUxNiAqdmFkZHIsIGludCBjb3VudCkKK3sKKwl3aGlsZSAoY291bnQtLSkKKwkJd3JpdGV3KCp2YWRkcisrLCBidXNfYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAKK19faXhwNHh4X3dyaXRlbCh1MzIgdmFsdWUsIHUzMiBhZGRyKQoreworCWlmIChhZGRyID49IFZNQUxMT0NfU1RBUlQpIHsKKwkJX19yYXdfd3JpdGVsKHZhbHVlLCBhZGRyKTsKKwkJcmV0dXJuOworCX0KKworCWl4cDR4eF9wY2lfd3JpdGUoYWRkciwgTlBfQ01EX01FTVdSSVRFLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorX19peHA0eHhfd3JpdGVzbCh1MzIgYnVzX2FkZHIsIHUzMiAqdmFkZHIsIGludCBjb3VudCkKK3sKKwl3aGlsZSAoY291bnQtLSkKKwkJd3JpdGVsKCp2YWRkcisrLCBidXNfYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciAKK19faXhwNHh4X3JlYWRiKHUzMiBhZGRyKQoreworCXUzMiBuLCBieXRlX2VuYWJsZXMsIGRhdGE7CisKKwlpZiAoYWRkciA+PSBWTUFMTE9DX1NUQVJUKQorCQlyZXR1cm4gX19yYXdfcmVhZGIoYWRkcik7CisKKwluID0gYWRkciAlIDQ7CisJYnl0ZV9lbmFibGVzID0gKDB4ZiAmIH5CSVQobikpIDw8IElYUDRYWF9QQ0lfTlBfQ0JFX0JFU0w7CisJaWYgKGl4cDR4eF9wY2lfcmVhZChhZGRyLCBieXRlX2VuYWJsZXMgfCBOUF9DTURfTUVNUkVBRCwgJmRhdGEpKQorCQlyZXR1cm4gMHhmZjsKKworCXJldHVybiBkYXRhID4+ICg4Km4pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK19faXhwNHh4X3JlYWRzYih1MzIgYnVzX2FkZHIsIHU4ICp2YWRkciwgdTMyIGNvdW50KQoreworCXdoaWxlIChjb3VudC0tKQorCQkqdmFkZHIrKyA9IHJlYWRiKGJ1c19hZGRyKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCAKK19faXhwNHh4X3JlYWR3KHUzMiBhZGRyKQoreworCXUzMiBuLCBieXRlX2VuYWJsZXMsIGRhdGE7CisKKwlpZiAoYWRkciA+PSBWTUFMTE9DX1NUQVJUKQorCQlyZXR1cm4gX19yYXdfcmVhZHcoYWRkcik7CisKKwluID0gYWRkciAlIDQ7CisJYnl0ZV9lbmFibGVzID0gKDB4ZiAmIH4oQklUKG4pIHwgQklUKG4rMSkpKSA8PCBJWFA0WFhfUENJX05QX0NCRV9CRVNMOworCWlmIChpeHA0eHhfcGNpX3JlYWQoYWRkciwgYnl0ZV9lbmFibGVzIHwgTlBfQ01EX01FTVJFQUQsICZkYXRhKSkKKwkJcmV0dXJuIDB4ZmZmZjsKKworCXJldHVybiBkYXRhPj4oOCpuKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIAorX19peHA0eHhfcmVhZHN3KHUzMiBidXNfYWRkciwgdTE2ICp2YWRkciwgdTMyIGNvdW50KQoreworCXdoaWxlIChjb3VudC0tKQorCQkqdmFkZHIrKyA9IHJlYWR3KGJ1c19hZGRyKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIAorX19peHA0eHhfcmVhZGwodTMyIGFkZHIpCit7CisJdTMyIGRhdGE7CisKKwlpZiAoYWRkciA+PSBWTUFMTE9DX1NUQVJUKQorCQlyZXR1cm4gX19yYXdfcmVhZGwoYWRkcik7CisKKwlpZiAoaXhwNHh4X3BjaV9yZWFkKGFkZHIsIE5QX0NNRF9NRU1SRUFELCAmZGF0YSkpCisJCXJldHVybiAweGZmZmZmZmZmOworCisJcmV0dXJuIGRhdGE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAKK19faXhwNHh4X3JlYWRzbCh1MzIgYnVzX2FkZHIsIHUzMiAqdmFkZHIsIHUzMiBjb3VudCkKK3sKKwl3aGlsZSAoY291bnQtLSkKKwkJKnZhZGRyKysgPSByZWFkbChidXNfYWRkcik7Cit9CisKKworLyoKKyAqIFdlIGNhbiB1c2UgdGhlIGJ1aWx0LWluIGZ1bmN0aW9ucyBiL2MgdGhleSBlbmQgdXAgY2FsbGluZyB3cml0ZWIvcmVhZGIKKyAqLworI2RlZmluZSBtZW1zZXRfaW8oYyx2LGwpCQlfbWVtc2V0X2lvKChjKSwodiksKGwpKQorI2RlZmluZSBtZW1jcHlfZnJvbWlvKGEsYyxsKQkJX21lbWNweV9mcm9taW8oKGEpLChjKSwobCkpCisjZGVmaW5lIG1lbWNweV90b2lvKGMsYSxsKQkJX21lbWNweV90b2lvKChjKSwoYSksKGwpKQorCisjZGVmaW5lIGV0aF9pb19jb3B5X2FuZF9zdW0ocyxjLGwsYikgXAorCQkJCWV0aF9jb3B5X2FuZF9zdW0oKHMpLF9fbWVtX3BjaShjKSwobCksKGIpKQorCitzdGF0aWMgaW5saW5lIGludAorY2hlY2tfc2lnbmF0dXJlKHVuc2lnbmVkIGxvbmcgYnVzX2FkZHIsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNpZ25hdHVyZSwKKwkJaW50IGxlbmd0aCkKK3sKKwlpbnQgcmV0dmFsID0gMDsKKwlkbyB7CisJCWlmIChyZWFkYihidXNfYWRkcikgIT0gKnNpZ25hdHVyZSkKKwkJCWdvdG8gb3V0OworCQlidXNfYWRkcisrOworCQlzaWduYXR1cmUrKzsKKwkJbGVuZ3RoLS07CisJfSB3aGlsZSAobGVuZ3RoKTsKKwlyZXR2YWwgPSAxOworb3V0OgorCXJldHVybiByZXR2YWw7Cit9CisKKyNlbmRpZgorCisvKgorICogSVhQNHh4IGRvZXMgbm90IGhhdmUgYSB0cmFuc3BhcmVudCBjcHUgLT4gUENJIEkvTyB0cmFuc2xhdGlvbgorICogd2luZG93LiAgSW5zdGVhZCwgaXQgaGFzIGEgc2V0IG9mIHJlZ2lzdGVycyB0aGF0IG11c3QgYmUgdHdlYWtlZAorICogd2l0aCB0aGUgcHJvcGVyIGJ5dGUgbGFuZXMsIGNvbW1hbmQgdHlwZXMsIGFuZCBhZGRyZXNzIGZvciB0aGUKKyAqIHRyYW5zYWN0aW9uLiAgVGhpcyBtZWFucyB0aGF0IHdlIG5lZWQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQKKyAqIEkvTyBmdW5jdGlvbnMuCisgKi8KKyNkZWZpbmUJb3V0YihwLCB2KQkJCV9faXhwNHh4X291dGIocCwgdikKKyNkZWZpbmUJb3V0dyhwLCB2KQkJCV9faXhwNHh4X291dHcocCwgdikKKyNkZWZpbmUJb3V0bChwLCB2KQkJCV9faXhwNHh4X291dGwocCwgdikKKwkKKyNkZWZpbmUJb3V0c2IocCwgdiwgbCkJCQlfX2l4cDR4eF9vdXRzYihwLCB2LCBsKQorI2RlZmluZQlvdXRzdyhwLCB2LCBsKQkJCV9faXhwNHh4X291dHN3KHAsIHYsIGwpCisjZGVmaW5lCW91dHNsKHAsIHYsIGwpCQkJX19peHA0eHhfb3V0c2wocCwgdiwgbCkKKworI2RlZmluZQlpbmIocCkJCQkJX19peHA0eHhfaW5iKHApCisjZGVmaW5lCWludyhwKQkJCQlfX2l4cDR4eF9pbncocCkKKyNkZWZpbmUJaW5sKHApCQkJCV9faXhwNHh4X2lubChwKQorCisjZGVmaW5lCWluc2IocCwgdiwgbCkJCQlfX2l4cDR4eF9pbnNiKHAsIHYsIGwpCisjZGVmaW5lCWluc3cocCwgdiwgbCkJCQlfX2l4cDR4eF9pbnN3KHAsIHYsIGwpCisjZGVmaW5lCWluc2wocCwgdiwgbCkJCQlfX2l4cDR4eF9pbnNsKHAsIHYsIGwpCisKKworc3RhdGljIGlubGluZSB2b2lkIAorX19peHA0eHhfb3V0Yih1OCB2YWx1ZSwgdTMyIGFkZHIpCit7CisJdTMyIG4sIGJ5dGVfZW5hYmxlcywgZGF0YTsKKwluID0gYWRkciAlIDQ7CisJYnl0ZV9lbmFibGVzID0gKDB4ZiAmIH5CSVQobikpIDw8IElYUDRYWF9QQ0lfTlBfQ0JFX0JFU0w7CisJZGF0YSA9IHZhbHVlIDw8ICg4Km4pOworCWl4cDR4eF9wY2lfd3JpdGUoYWRkciwgYnl0ZV9lbmFibGVzIHwgTlBfQ01EX0lPV1JJVEUsIGRhdGEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgCitfX2l4cDR4eF9vdXRzYih1MzIgaW9fYWRkciwgY29uc3QgdTggKnZhZGRyLCB1MzIgY291bnQpCit7CisJd2hpbGUgKGNvdW50LS0pCisJCW91dGIoKnZhZGRyKyssIGlvX2FkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgCitfX2l4cDR4eF9vdXR3KHUxNiB2YWx1ZSwgdTMyIGFkZHIpCit7CisJdTMyIG4sIGJ5dGVfZW5hYmxlcywgZGF0YTsKKwluID0gYWRkciAlIDQ7CisJYnl0ZV9lbmFibGVzID0gKDB4ZiAmIH4oQklUKG4pIHwgQklUKG4rMSkpKSA8PCBJWFA0WFhfUENJX05QX0NCRV9CRVNMOworCWRhdGEgPSB2YWx1ZSA8PCAoOCpuKTsKKwlpeHA0eHhfcGNpX3dyaXRlKGFkZHIsIGJ5dGVfZW5hYmxlcyB8IE5QX0NNRF9JT1dSSVRFLCBkYXRhKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIAorX19peHA0eHhfb3V0c3codTMyIGlvX2FkZHIsIGNvbnN0IHUxNiAqdmFkZHIsIHUzMiBjb3VudCkKK3sKKwl3aGlsZSAoY291bnQtLSkKKwkJb3V0dyhjcHVfdG9fbGUxNigqdmFkZHIrKyksIGlvX2FkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgCitfX2l4cDR4eF9vdXRsKHUzMiB2YWx1ZSwgdTMyIGFkZHIpCit7CisJaXhwNHh4X3BjaV93cml0ZShhZGRyLCBOUF9DTURfSU9XUklURSwgdmFsdWUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgCitfX2l4cDR4eF9vdXRzbCh1MzIgaW9fYWRkciwgY29uc3QgdTMyICp2YWRkciwgdTMyIGNvdW50KQoreworCXdoaWxlIChjb3VudC0tKQorCQlvdXRsKCp2YWRkcisrLCBpb19hZGRyKTsKK30KKworc3RhdGljIGlubGluZSB1OCAKK19faXhwNHh4X2luYih1MzIgYWRkcikKK3sKKwl1MzIgbiwgYnl0ZV9lbmFibGVzLCBkYXRhOworCW4gPSBhZGRyICUgNDsKKwlieXRlX2VuYWJsZXMgPSAoMHhmICYgfkJJVChuKSkgPDwgSVhQNFhYX1BDSV9OUF9DQkVfQkVTTDsKKwlpZiAoaXhwNHh4X3BjaV9yZWFkKGFkZHIsIGJ5dGVfZW5hYmxlcyB8IE5QX0NNRF9JT1JFQUQsICZkYXRhKSkKKwkJcmV0dXJuIDB4ZmY7CisKKwlyZXR1cm4gZGF0YSA+PiAoOCpuKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIAorX19peHA0eHhfaW5zYih1MzIgaW9fYWRkciwgdTggKnZhZGRyLCB1MzIgY291bnQpCit7CisJd2hpbGUgKGNvdW50LS0pCisJCSp2YWRkcisrID0gaW5iKGlvX2FkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHUxNiAKK19faXhwNHh4X2ludyh1MzIgYWRkcikKK3sKKwl1MzIgbiwgYnl0ZV9lbmFibGVzLCBkYXRhOworCW4gPSBhZGRyICUgNDsKKwlieXRlX2VuYWJsZXMgPSAoMHhmICYgfihCSVQobikgfCBCSVQobisxKSkpIDw8IElYUDRYWF9QQ0lfTlBfQ0JFX0JFU0w7CisJaWYgKGl4cDR4eF9wY2lfcmVhZChhZGRyLCBieXRlX2VuYWJsZXMgfCBOUF9DTURfSU9SRUFELCAmZGF0YSkpCisJCXJldHVybiAweGZmZmY7CisKKwlyZXR1cm4gZGF0YT4+KDgqbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAKK19faXhwNHh4X2luc3codTMyIGlvX2FkZHIsIHUxNiAqdmFkZHIsIHUzMiBjb3VudCkKK3sKKwl3aGlsZSAoY291bnQtLSkKKwkJKnZhZGRyKysgPSBsZTE2X3RvX2NwdShpbncoaW9fYWRkcikpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiAKK19faXhwNHh4X2lubCh1MzIgYWRkcikKK3sKKwl1MzIgZGF0YTsKKwlpZiAoaXhwNHh4X3BjaV9yZWFkKGFkZHIsIE5QX0NNRF9JT1JFQUQsICZkYXRhKSkKKwkJcmV0dXJuIDB4ZmZmZmZmZmY7CisKKwlyZXR1cm4gZGF0YTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIAorX19peHA0eHhfaW5zbCh1MzIgaW9fYWRkciwgdTMyICp2YWRkciwgdTMyIGNvdW50KQoreworCXdoaWxlIChjb3VudC0tKQorCQkqdmFkZHIrKyA9IGlubChpb19hZGRyKTsKK30KKworCisjZW5kaWYJLy8gIF9fQVNNX0FSTV9BUkNIX0lPX0gKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwNHh4L2lycS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwNHh4L2lycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3ZGE3MDYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvaXJxLmgKQEAgLTAsMCArMSwxMyBAQAorLyoKKyAqIGlycS5oIAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDIgSW50ZWwgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2RlZmluZSBmaXh1cF9pcnEoaXJxKSAgKGlycSkKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwNHh4L2lycXMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9pcnFzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E4MDgyOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9pcnFzLmgKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9pcnFzLmggCisgKgorICogSVJRIGRlZmluaXRpb25zIGZvciBJWFA0WFggYmFzZWQgc3lzdGVtcworICoKKyAqIENvcHlyaWdodCAoQykgMjAwMiBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAqIENvcHlyaWdodCAoQykgMjAwMyBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2lmbmRlZiBfQVJDSF9JWFA0WFhfSVJRU19IXworI2RlZmluZSBfQVJDSF9JWFA0WFhfSVJRU19IXworCisKKyNkZWZpbmUgSVJRX0lYUDRYWF9OUEVBCQkwCisjZGVmaW5lIElSUV9JWFA0WFhfTlBFQgkJMQorI2RlZmluZSBJUlFfSVhQNFhYX05QRUMJCTIKKyNkZWZpbmUgSVJRX0lYUDRYWF9RTTEJCTMKKyNkZWZpbmUgSVJRX0lYUDRYWF9RTTIJCTQKKyNkZWZpbmUgSVJRX0lYUDRYWF9USU1FUjEJNQorI2RlZmluZSBJUlFfSVhQNFhYX0dQSU8wCTYKKyNkZWZpbmUgSVJRX0lYUDRYWF9HUElPMQk3CisjZGVmaW5lIElSUV9JWFA0WFhfUENJX0lOVAk4CisjZGVmaW5lIElSUV9JWFA0WFhfUENJX0RNQTEJOQorI2RlZmluZSBJUlFfSVhQNFhYX1BDSV9ETUEyCTEwCisjZGVmaW5lIElSUV9JWFA0WFhfVElNRVIyCTExCisjZGVmaW5lIElSUV9JWFA0WFhfVVNCCQkxMgorI2RlZmluZSBJUlFfSVhQNFhYX1VBUlQyCTEzCisjZGVmaW5lIElSUV9JWFA0WFhfVElNRVNUQU1QCTE0CisjZGVmaW5lIElSUV9JWFA0WFhfVUFSVDEJMTUKKyNkZWZpbmUgSVJRX0lYUDRYWF9XRE9HCQkxNgorI2RlZmluZSBJUlFfSVhQNFhYX0FIQl9QTVUJMTcKKyNkZWZpbmUgSVJRX0lYUDRYWF9YU0NBTEVfUE1VCTE4CisjZGVmaW5lIElSUV9JWFA0WFhfR1BJTzIJMTkKKyNkZWZpbmUgSVJRX0lYUDRYWF9HUElPMwkyMAorI2RlZmluZSBJUlFfSVhQNFhYX0dQSU80CTIxCisjZGVmaW5lIElSUV9JWFA0WFhfR1BJTzUJMjIKKyNkZWZpbmUgSVJRX0lYUDRYWF9HUElPNgkyMworI2RlZmluZSBJUlFfSVhQNFhYX0dQSU83CTI0CisjZGVmaW5lIElSUV9JWFA0WFhfR1BJTzgJMjUKKyNkZWZpbmUgSVJRX0lYUDRYWF9HUElPOQkyNgorI2RlZmluZSBJUlFfSVhQNFhYX0dQSU8xMAkyNworI2RlZmluZSBJUlFfSVhQNFhYX0dQSU8xMQkyOAorI2RlZmluZSBJUlFfSVhQNFhYX0dQSU8xMgkyOQorI2RlZmluZSBJUlFfSVhQNFhYX1NXX0lOVDEJMzAKKyNkZWZpbmUgSVJRX0lYUDRYWF9TV19JTlQyCTMxCisjZGVmaW5lIElSUV9JWFA0WFhfVVNCX0hPU1QJMzIKKyNkZWZpbmUgSVJRX0lYUDRYWF9JMkMJCTMzCisjZGVmaW5lIElSUV9JWFA0WFhfU1NQCQkzNAorI2RlZmluZSBJUlFfSVhQNFhYX1RTWU5DCTM1CisjZGVmaW5lIElSUV9JWFA0WFhfRUFVX0RPTkUJMzYKKyNkZWZpbmUgSVJRX0lYUDRYWF9TSEFfRE9ORQkzNworI2RlZmluZSBJUlFfSVhQNFhYX1NXQ1BfUEUJNTgKKyNkZWZpbmUgSVJRX0lYUDRYWF9RTV9QRQk2MAorI2RlZmluZSBJUlFfSVhQNFhYX01DVV9FQ0MJNjEKKyNkZWZpbmUgSVJRX0lYUDRYWF9FWFBfUEUJNjIKKworLyoKKyAqIE9ubHkgZmlyc3QgMzIgc291cmNlcyBhcmUgdmFsaWQgaWYgcnVubmluZyBvbiBJWFA0Mnggc3lzdGVtcworICovCisjaWZuZGVmCUNPTkZJR19DUFVfSVhQNDZYCisjZGVmaW5lIE5SX0lSUVMJCQkzMgorI2Vsc2UKKyNkZWZpbmUgTlJfSVJRUwkJCTY0CisjZW5kaWYKKworI2RlZmluZQlYU0NBTEVfUE1VX0lSUQkJKElSUV9JWFA0WFhfWFNDQUxFX1BNVSkKKworLyoKKyAqIElYRFA0MjUgYm9hcmQgSVJRcworICovCisjZGVmaW5lCUlSUV9JWERQNDI1X1BDSV9JTlRBCUlSUV9JWFA0WFhfR1BJTzExCisjZGVmaW5lCUlSUV9JWERQNDI1X1BDSV9JTlRCCUlSUV9JWFA0WFhfR1BJTzEwCisjZGVmaW5lCUlSUV9JWERQNDI1X1BDSV9JTlRDCUlSUV9JWFA0WFhfR1BJTzkKKyNkZWZpbmUJSVJRX0lYRFA0MjVfUENJX0lOVEQJSVJRX0lYUDRYWF9HUElPOAorCisvKgorICogUHJQTUMxMTAwIEJvYXJkIElSUXMKKyAqLworI2RlZmluZQlJUlFfUFJQTUMxMTAwX1BDSV9JTlRBCUlSUV9JWFA0WFhfR1BJTzExCisjZGVmaW5lCUlSUV9QUlBNQzExMDBfUENJX0lOVEIJSVJRX0lYUDRYWF9HUElPMTAKKyNkZWZpbmUJSVJRX1BSUE1DMTEwMF9QQ0lfSU5UQwlJUlFfSVhQNFhYX0dQSU85CisjZGVmaW5lCUlSUV9QUlBNQzExMDBfUENJX0lOVEQJSVJRX0lYUDRYWF9HUElPOAorCisvKgorICogQURJIENveW90ZSBCb2FyZCBJUlFzCisgKi8KKyNkZWZpbmUJSVJRX0NPWU9URV9QQ0lfU0xPVDAJSVJRX0lYUDRYWF9HUElPNgorI2RlZmluZQlJUlFfQ09ZT1RFX1BDSV9TTE9UMQlJUlFfSVhQNFhYX0dQSU8xMQorI2RlZmluZQlJUlFfQ09ZT1RFX0lERQkJSVJRX0lYUDRYWF9HUElPNQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9peGRwNDI1LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvaXhkcDQyNS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkMjFiZjkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvaXhkcDQyNS5oCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvaXhkcDQyNS5oCisgKgorICogSVhEUDQyNSBwbGF0Zm9ybSBzcGVjaWZpYyBkZWZpbml0aW9ucworICoKKyAqIEF1dGhvcjogRGVlcGFrIFNheGVuYSA8ZHNheGVuYUBwbGV4aXR5Lm5ldD4KKyAqCisgKiBDb3B5cmlnaHQgMjAwNCAoYykgTW9udGFWaXN0YSwgU29mdHdhcmUsIEluYy4gCisgKiAKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgCisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX0hBUkRXQVJFX0hfXworI2Vycm9yICJEbyBub3QgaW5jbHVkZSB0aGlzIGRpcmVjdGx5LCBpbnN0ZWFkICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4iCisjZW5kaWYKKworI2RlZmluZQlJWERQNDI1X0ZMQVNIX0JBU0UJSVhQNFhYX0VYUF9CVVNfQ1MwX0JBU0VfUEhZUworI2RlZmluZQlJWERQNDI1X0ZMQVNIX1NJWkUJSVhQNFhYX0VYUF9CVVNfQ1NYX1JFR0lPTl9TSVpFCisKKyNkZWZpbmUJSVhEUDQyNV9TREFfUElOCQk3CisjZGVmaW5lCUlYRFA0MjVfU0NMX1BJTgkJNgorCisvKgorICogSVhEUDQyNSBQQ0kgSVJRcworICovCisjZGVmaW5lIElYRFA0MjVfUENJX01BWF9ERVYJNAorI2RlZmluZSBJWERQNDI1X1BDSV9JUlFfTElORVMJNAorCisKKy8qIFBDSSBjb250cm9sbGVyIEdQSU8gdG8gSVJRIHBpbiBtYXBwaW5ncyAqLworI2RlZmluZSBJWERQNDI1X1BDSV9JTlRBX1BJTgkxMQorI2RlZmluZSBJWERQNDI1X1BDSV9JTlRCX1BJTgkxMAorI2RlZmluZQlJWERQNDI1X1BDSV9JTlRDX1BJTgk5CisjZGVmaW5lCUlYRFA0MjVfUENJX0lOVERfUElOCTgKKworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvaXhwNHh4LXJlZ3MuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9peHA0eHgtcmVncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlZWIxZGIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvaXhwNHh4LXJlZ3MuaApAQCAtMCwwICsxLDU5MSBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9peHA0eHgtcmVncy5oCisgKgorICogUmVnaXN0ZXIgZGVmaW5pdGlvbnMgZm9yIElYUDR4eCBjaGlwc2V0LiBUaGlzIGZpbGUgY29udGFpbnMgCisgKiByZWdpc3RlciBsb2NhdGlvbiBhbmQgYml0IGRlZmluaXRpb25zIG9ubHkuIFBsYXRmb3JtIHNwZWNpZmljIAorICogZGVmaW5pdGlvbnMgYW5kIGhlbHBlciBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgYXJlIGluIHBsYXRmb3JtLmggCisgKiBhbmQgbWFjaGluZS1uYW1lLmguCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAyIEludGVsIENvcnBvcmF0aW9uLgorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDQgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9IQVJEV0FSRV9IX18KKyNlcnJvciAiRG8gbm90IGluY2x1ZGUgdGhpcyBkaXJlY3RseSwgaW5zdGVhZCAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+IgorI2VuZGlmCisKKyNpZm5kZWYgX0FTTV9BUk1fSVhQNFhYX0hfCisjZGVmaW5lIF9BU01fQVJNX0lYUDRYWF9IXworCisvKgorICogSVhQNHh4IExpbnV4IE1lbW9yeSBNYXA6CisgKgorICogUGh5CQlTaXplCQlWaXJ0CQlEZXNjcmlwdGlvbgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoKKyAqIDB4MDAwMDAwMDAJMHgxMDAwMDAwMChtYXgpCVBBR0VfT0ZGU0VUCVN5c3RlbSBSQU0KKyAqCisgKiAweDQ4MDAwMDAwCTB4MDQwMDAwMDAJaW9yZW1hcCdkCVBDSSBNZW1vcnkgU3BhY2UKKyAqCisgKiAweDUwMDAwMDAwCTB4MTAwMDAwMDAJaW9yZW1hcCdkCUVYUCBCVVMKKyAqCisgKiAweDYwMDAwMDAJMHgwMDAwNDAwMAlpb3JlbWFwJ2QJUU1ncgorICoKKyAqIDB4QzAwMDAwMDAJMHgwMDAwMTAwMAkweGZmYmZlMDAwCVBDSSBDRkcgCisgKgorICogMHhDNDAwMDAwMAkweDAwMDAxMDAwCTB4ZmZiZmQwMDAJRVhQIENGRyAKKyAqCisgKiAweEM4MDAwMDAwCTB4MDAwMEMwMDAJMHhmZmJmMjAwMAlPbi1DaGlwIFBlcmlwaGVyYWxzCisgKi8KKworLyoKKyAqIFF1ZXVlIE1hbmFnZXIKKyAqLworI2RlZmluZSBJWFA0WFhfUU1HUl9CQVNFX1BIWVMJCSgweDYwMDAwMDAwKQorCisvKgorICogRXhwYW5zaW9uIEJVUyBDb25maWd1cmF0aW9uIHJlZ2lzdGVycworICovCisjZGVmaW5lIElYUDRYWF9FWFBfQ0ZHX0JBU0VfUEhZUwkoMHhDNDAwMDAwMCkKKyNkZWZpbmUgSVhQNFhYX0VYUF9DRkdfQkFTRV9WSVJUCSgweEZGQkZEMDAwKQorI2RlZmluZSBJWFA0WFhfRVhQX0NGR19SRUdJT05fU0laRQkoMHgwMDAwMTAwMCkKKworLyoKKyAqIFBDSSBDb25maWcgcmVnaXN0ZXJzCisgKi8KKyNkZWZpbmUgSVhQNFhYX1BDSV9DRkdfQkFTRV9QSFlTCSgweEMwMDAwMDAwKQorI2RlZmluZQlJWFA0WFhfUENJX0NGR19CQVNFX1ZJUlQJKDB4RkZCRkUwMDApCisjZGVmaW5lIElYUDRYWF9QQ0lfQ0ZHX1JFR0lPTl9TSVpFCSgweDAwMDAxMDAwKQorCisvKgorICogUGVyaXBoZXJhbCBzcGFjZQorICovCisjZGVmaW5lIElYUDRYWF9QRVJJUEhFUkFMX0JBU0VfUEhZUwkoMHhDODAwMDAwMCkKKyNkZWZpbmUgSVhQNFhYX1BFUklQSEVSQUxfQkFTRV9WSVJUCSgweEZGQkYyMDAwKQorI2RlZmluZSBJWFA0WFhfUEVSSVBIRVJBTF9SRUdJT05fU0laRQkoMHgwMDAwQzAwMCkKKworI2RlZmluZSBJWFA0WFhfRVhQX0NTMF9PRkZTRVQJMHgwMAorI2RlZmluZSBJWFA0WFhfRVhQX0NTMV9PRkZTRVQgICAweDA0CisjZGVmaW5lIElYUDRYWF9FWFBfQ1MyX09GRlNFVCAgIDB4MDgKKyNkZWZpbmUgSVhQNFhYX0VYUF9DUzNfT0ZGU0VUICAgMHgwQworI2RlZmluZSBJWFA0WFhfRVhQX0NTNF9PRkZTRVQgICAweDEwCisjZGVmaW5lIElYUDRYWF9FWFBfQ1M1X09GRlNFVCAgIDB4MTQKKyNkZWZpbmUgSVhQNFhYX0VYUF9DUzZfT0ZGU0VUICAgMHgxOAorI2RlZmluZSBJWFA0WFhfRVhQX0NTN19PRkZTRVQgICAweDFDCisjZGVmaW5lIElYUDRYWF9FWFBfQ0ZHMF9PRkZTRVQJMHgyMAorI2RlZmluZSBJWFA0WFhfRVhQX0NGRzFfT0ZGU0VUCTB4MjQKKyNkZWZpbmUgSVhQNFhYX0VYUF9DRkcyX09GRlNFVAkweDI4CisjZGVmaW5lIElYUDRYWF9FWFBfQ0ZHM19PRkZTRVQJMHgyQworCisvKgorICogRXhwYW5zaW9uIEJ1cyBDb250cm9sbGVyIHJlZ2lzdGVycy4KKyAqLworI2RlZmluZSBJWFA0WFhfRVhQX1JFRyh4KSAoKHZvbGF0aWxlIHUzMiAqKShJWFA0WFhfRVhQX0NGR19CQVNFX1ZJUlQrKHgpKSkKKworI2RlZmluZSBJWFA0WFhfRVhQX0NTMCAgICAgIElYUDRYWF9FWFBfUkVHKElYUDRYWF9FWFBfQ1MwX09GRlNFVCkKKyNkZWZpbmUgSVhQNFhYX0VYUF9DUzEgICAgICBJWFA0WFhfRVhQX1JFRyhJWFA0WFhfRVhQX0NTMV9PRkZTRVQpCisjZGVmaW5lIElYUDRYWF9FWFBfQ1MyICAgICAgSVhQNFhYX0VYUF9SRUcoSVhQNFhYX0VYUF9DUzJfT0ZGU0VUKSAKKyNkZWZpbmUgSVhQNFhYX0VYUF9DUzMgICAgICBJWFA0WFhfRVhQX1JFRyhJWFA0WFhfRVhQX0NTM19PRkZTRVQpCisjZGVmaW5lIElYUDRYWF9FWFBfQ1M0ICAgICAgSVhQNFhYX0VYUF9SRUcoSVhQNFhYX0VYUF9DUzRfT0ZGU0VUKQorI2RlZmluZSBJWFA0WFhfRVhQX0NTNSAgICAgIElYUDRYWF9FWFBfUkVHKElYUDRYWF9FWFBfQ1M1X09GRlNFVCkKKyNkZWZpbmUgSVhQNFhYX0VYUF9DUzYgICAgICBJWFA0WFhfRVhQX1JFRyhJWFA0WFhfRVhQX0NTNl9PRkZTRVQpICAgICAKKyNkZWZpbmUgSVhQNFhYX0VYUF9DUzcgICAgICBJWFA0WFhfRVhQX1JFRyhJWFA0WFhfRVhQX0NTN19PRkZTRVQpCisKKyNkZWZpbmUgSVhQNFhYX0VYUF9DRkcwICAgICBJWFA0WFhfRVhQX1JFRyhJWFA0WFhfRVhQX0NGRzBfT0ZGU0VUKSAKKyNkZWZpbmUgSVhQNFhYX0VYUF9DRkcxICAgICBJWFA0WFhfRVhQX1JFRyhJWFA0WFhfRVhQX0NGRzFfT0ZGU0VUKSAKKyNkZWZpbmUgSVhQNFhYX0VYUF9DRkcyICAgICBJWFA0WFhfRVhQX1JFRyhJWFA0WFhfRVhQX0NGRzJfT0ZGU0VUKSAKKyNkZWZpbmUgSVhQNFhYX0VYUF9DRkczICAgICBJWFA0WFhfRVhQX1JFRyhJWFA0WFhfRVhQX0NGRzNfT0ZGU0VUKQorCisKKy8qCisgKiBQZXJpcGhlcmFsIFNwYWNlIFJlZ2lzdGVyIFJlZ2lvbiBCYXNlIEFkZHJlc3NlcworICovCisjZGVmaW5lIElYUDRYWF9VQVJUMV9CQVNFX1BIWVMJKElYUDRYWF9QRVJJUEhFUkFMX0JBU0VfUEhZUyArIDB4MDAwMCkKKyNkZWZpbmUgSVhQNFhYX1VBUlQyX0JBU0VfUEhZUwkoSVhQNFhYX1BFUklQSEVSQUxfQkFTRV9QSFlTICsgMHgxMDAwKQorI2RlZmluZSBJWFA0WFhfUE1VX0JBU0VfUEhZUwkoSVhQNFhYX1BFUklQSEVSQUxfQkFTRV9QSFlTICsgMHgyMDAwKQorI2RlZmluZSBJWFA0WFhfSU5UQ19CQVNFX1BIWVMJKElYUDRYWF9QRVJJUEhFUkFMX0JBU0VfUEhZUyArIDB4MzAwMCkKKyNkZWZpbmUgSVhQNFhYX0dQSU9fQkFTRV9QSFlTCShJWFA0WFhfUEVSSVBIRVJBTF9CQVNFX1BIWVMgKyAweDQwMDApCisjZGVmaW5lIElYUDRYWF9USU1FUl9CQVNFX1BIWVMJKElYUDRYWF9QRVJJUEhFUkFMX0JBU0VfUEhZUyArIDB4NTAwMCkKKyNkZWZpbmUgSVhQNFhYX0V0aEFfQkFTRV9QSFlTCShJWFA0WFhfUEVSSVBIRVJBTF9CQVNFX1BIWVMgKyAweDkwMDApCisjZGVmaW5lIElYUDRYWF9FdGhCX0JBU0VfUEhZUwkoSVhQNFhYX1BFUklQSEVSQUxfQkFTRV9QSFlTICsgMHhBMDAwKQorI2RlZmluZSBJWFA0WFhfVVNCX0JBU0VfUEhZUwkoSVhQNFhYX1BFUklQSEVSQUxfQkFTRV9QSFlTICsgMHhCMDAwKQorCisjZGVmaW5lIElYUDRYWF9VQVJUMV9CQVNFX1ZJUlQJKElYUDRYWF9QRVJJUEhFUkFMX0JBU0VfVklSVCArIDB4MDAwMCkKKyNkZWZpbmUgSVhQNFhYX1VBUlQyX0JBU0VfVklSVAkoSVhQNFhYX1BFUklQSEVSQUxfQkFTRV9WSVJUICsgMHgxMDAwKQorI2RlZmluZSBJWFA0WFhfUE1VX0JBU0VfVklSVAkoSVhQNFhYX1BFUklQSEVSQUxfQkFTRV9WSVJUICsgMHgyMDAwKQorI2RlZmluZSBJWFA0WFhfSU5UQ19CQVNFX1ZJUlQJKElYUDRYWF9QRVJJUEhFUkFMX0JBU0VfVklSVCArIDB4MzAwMCkKKyNkZWZpbmUgSVhQNFhYX0dQSU9fQkFTRV9WSVJUCShJWFA0WFhfUEVSSVBIRVJBTF9CQVNFX1ZJUlQgKyAweDQwMDApCisjZGVmaW5lIElYUDRYWF9USU1FUl9CQVNFX1ZJUlQJKElYUDRYWF9QRVJJUEhFUkFMX0JBU0VfVklSVCArIDB4NTAwMCkKKyNkZWZpbmUgSVhQNFhYX0V0aEFfQkFTRV9WSVJUCShJWFA0WFhfUEVSSVBIRVJBTF9CQVNFX1ZJUlQgKyAweDkwMDApCisjZGVmaW5lIElYUDRYWF9FdGhCX0JBU0VfVklSVAkoSVhQNFhYX1BFUklQSEVSQUxfQkFTRV9WSVJUICsgMHhBMDAwKQorI2RlZmluZSBJWFA0WFhfVVNCX0JBU0VfVklSVAkoSVhQNFhYX1BFUklQSEVSQUxfQkFTRV9WSVJUICsgMHhCMDAwKQorCisvKgorICogQ29uc3RhbnRzIHRvIG1ha2UgaXQgZWFzeSB0byBhY2Nlc3MgIEludGVycnVwdCBDb250cm9sbGVyIHJlZ2lzdGVycworICovCisjZGVmaW5lIElYUDRYWF9JQ1BSX09GRlNFVAkweDAwIC8qIEludGVycnVwdCBTdGF0dXMgKi8KKyNkZWZpbmUgSVhQNFhYX0lDTVJfT0ZGU0VUCTB4MDQgLyogSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBJWFA0WFhfSUNMUl9PRkZTRVQJMHgwOCAvKiBJbnRlcnJ1cHQgSVJRL0ZJUSBTZWxlY3QgKi8KKyNkZWZpbmUgSVhQNFhYX0lDSVBfT0ZGU0VUICAgICAgMHgwQyAvKiBJUlEgU3RhdHVzICovCisjZGVmaW5lIElYUDRYWF9JQ0ZQX09GRlNFVAkweDEwIC8qIEZJUSBTdGF0dXMgKi8KKyNkZWZpbmUgSVhQNFhYX0lDSFJfT0ZGU0VUCTB4MTQgLyogSW50ZXJydXB0IFByaW9yaXR5ICovCisjZGVmaW5lIElYUDRYWF9JQ0lIX09GRlNFVAkweDE4IC8qIElSUSBIaWdoZXN0IFByaSBJbnQgKi8KKyNkZWZpbmUgSVhQNFhYX0lDRkhfT0ZGU0VUCTB4MUMgLyogRklRIEhpZ2hlc3QgUHJpIEludCAqLworCisvKgorICogSVhQNDY1LW9ubHkKKyAqLworI2RlZmluZQlJWFA0WFhfSUNQUjJfT0ZGU0VUCTB4MjAgLyogSW50ZXJydXB0IFN0YXR1cyAyICovCisjZGVmaW5lCUlYUDRYWF9JQ01SMl9PRkZTRVQJMHgyNCAvKiBJbnRlcnJ1cHQgRW5hYmxlIDIgKi8KKyNkZWZpbmUJSVhQNFhYX0lDTFIyX09GRlNFVAkweDI4IC8qIEludGVycnVwdCBJUlEvRklRIFNlbGVjdCAyICovCisjZGVmaW5lIElYUDRYWF9JQ0lQMl9PRkZTRVQgICAgIDB4MkMgLyogSVJRIFN0YXR1cyAqLworI2RlZmluZSBJWFA0WFhfSUNGUDJfT0ZGU0VUCTB4MzAgLyogRklRIFN0YXR1cyAqLworI2RlZmluZSBJWFA0WFhfSUNFRU5fT0ZGU0VUCTB4MzQgLyogRXJyb3IgSGlnaCBQcmkgRW5hYmxlICovCisKKworLyoKKyAqIEludGVycnVwdCBDb250cm9sbGVyIFJlZ2lzdGVyIERlZmluaXRpb25zLgorICovCisKKyNkZWZpbmUgSVhQNFhYX0lOVENfUkVHKHgpICgodm9sYXRpbGUgdTMyICopKElYUDRYWF9JTlRDX0JBU0VfVklSVCsoeCkpKQorCisjZGVmaW5lIElYUDRYWF9JQ1BSCUlYUDRYWF9JTlRDX1JFRyhJWFA0WFhfSUNQUl9PRkZTRVQpCisjZGVmaW5lIElYUDRYWF9JQ01SICAgICBJWFA0WFhfSU5UQ19SRUcoSVhQNFhYX0lDTVJfT0ZGU0VUKQorI2RlZmluZSBJWFA0WFhfSUNMUiAgICAgSVhQNFhYX0lOVENfUkVHKElYUDRYWF9JQ0xSX09GRlNFVCkKKyNkZWZpbmUgSVhQNFhYX0lDSVAgICAgIElYUDRYWF9JTlRDX1JFRyhJWFA0WFhfSUNJUF9PRkZTRVQpCisjZGVmaW5lIElYUDRYWF9JQ0ZQICAgICBJWFA0WFhfSU5UQ19SRUcoSVhQNFhYX0lDRlBfT0ZGU0VUKQorI2RlZmluZSBJWFA0WFhfSUNIUiAgICAgSVhQNFhYX0lOVENfUkVHKElYUDRYWF9JQ0hSX09GRlNFVCkKKyNkZWZpbmUgSVhQNFhYX0lDSUggICAgIElYUDRYWF9JTlRDX1JFRyhJWFA0WFhfSUNJSF9PRkZTRVQpIAorI2RlZmluZSBJWFA0WFhfSUNGSCAgICAgSVhQNFhYX0lOVENfUkVHKElYUDRYWF9JQ0ZIX09GRlNFVCkKKyNkZWZpbmUgSVhQNFhYX0lDUFIyCUlYUDRYWF9JTlRDX1JFRyhJWFA0WFhfSUNQUjJfT0ZGU0VUKQorI2RlZmluZSBJWFA0WFhfSUNNUjIgICAgSVhQNFhYX0lOVENfUkVHKElYUDRYWF9JQ01SMl9PRkZTRVQpCisjZGVmaW5lIElYUDRYWF9JQ0xSMiAgICBJWFA0WFhfSU5UQ19SRUcoSVhQNFhYX0lDTFIyX09GRlNFVCkKKyNkZWZpbmUgSVhQNFhYX0lDSVAyICAgIElYUDRYWF9JTlRDX1JFRyhJWFA0WFhfSUNJUDJfT0ZGU0VUKQorI2RlZmluZSBJWFA0WFhfSUNGUDIgICAgSVhQNFhYX0lOVENfUkVHKElYUDRYWF9JQ0ZQMl9PRkZTRVQpCisjZGVmaW5lIElYUDRYWF9JQ0VFTiAgICBJWFA0WFhfSU5UQ19SRUcoSVhQNFhYX0lDRUVOX09GRlNFVCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisvKgorICogQ29uc3RhbnRzIHRvIG1ha2UgaXQgZWFzeSB0byBhY2Nlc3MgR1BJTyByZWdpc3RlcnMKKyAqLworI2RlZmluZSBJWFA0WFhfR1BJT19HUE9VVFJfT0ZGU0VUICAgICAgIDB4MDAKKyNkZWZpbmUgSVhQNFhYX0dQSU9fR1BPRVJfT0ZGU0VUICAgICAgICAweDA0CisjZGVmaW5lIElYUDRYWF9HUElPX0dQSU5SX09GRlNFVCAgICAgICAgMHgwOAorI2RlZmluZSBJWFA0WFhfR1BJT19HUElTUl9PRkZTRVQgICAgICAgIDB4MEMKKyNkZWZpbmUgSVhQNFhYX0dQSU9fR1BJVDFSX09GRlNFVAkweDEwCisjZGVmaW5lIElYUDRYWF9HUElPX0dQSVQyUl9PRkZTRVQJMHgxNAorI2RlZmluZSBJWFA0WFhfR1BJT19HUENMS1JfT0ZGU0VUCTB4MTgKKyNkZWZpbmUgSVhQNFhYX0dQSU9fR1BEQlNFTFJfT0ZGU0VUCTB4MUMKKworLyogCisgKiBHUElPIFJlZ2lzdGVyIERlZmluaXRpb25zLgorICogW09ubHkgcGVyZm9ybSAzMmJpdCByZWFkcy93cml0ZXNdCisgKi8KKyNkZWZpbmUgSVhQNFhYX0dQSU9fUkVHKHgpICgodm9sYXRpbGUgdTMyICopKElYUDRYWF9HUElPX0JBU0VfVklSVCsoeCkpKQorCisjZGVmaW5lIElYUDRYWF9HUElPX0dQT1VUUglJWFA0WFhfR1BJT19SRUcoSVhQNFhYX0dQSU9fR1BPVVRSX09GRlNFVCkKKyNkZWZpbmUgSVhQNFhYX0dQSU9fR1BPRVIgICAgICAgSVhQNFhYX0dQSU9fUkVHKElYUDRYWF9HUElPX0dQT0VSX09GRlNFVCkKKyNkZWZpbmUgSVhQNFhYX0dQSU9fR1BJTlIgICAgICAgSVhQNFhYX0dQSU9fUkVHKElYUDRYWF9HUElPX0dQSU5SX09GRlNFVCkKKyNkZWZpbmUgSVhQNFhYX0dQSU9fR1BJU1IgICAgICAgSVhQNFhYX0dQSU9fUkVHKElYUDRYWF9HUElPX0dQSVNSX09GRlNFVCkKKyNkZWZpbmUgSVhQNFhYX0dQSU9fR1BJVDFSICAgICAgSVhQNFhYX0dQSU9fUkVHKElYUDRYWF9HUElPX0dQSVQxUl9PRkZTRVQpCisjZGVmaW5lIElYUDRYWF9HUElPX0dQSVQyUiAgICAgIElYUDRYWF9HUElPX1JFRyhJWFA0WFhfR1BJT19HUElUMlJfT0ZGU0VUKQorI2RlZmluZSBJWFA0WFhfR1BJT19HUENMS1IgICAgICBJWFA0WFhfR1BJT19SRUcoSVhQNFhYX0dQSU9fR1BDTEtSX09GRlNFVCkKKyNkZWZpbmUgSVhQNFhYX0dQSU9fR1BEQlNFTFIgICAgSVhQNFhYX0dQSU9fUkVHKElYUDRYWF9HUElPX0dQREJTRUxSX09GRlNFVCkKKworLyoKKyAqIEdQSU8gcmVnaXN0ZXIgYml0IGRlZmluaXRpb25zCisgKi8KKworLyogSW50ZXJydXB0IHN0eWxlcworICovCisjZGVmaW5lIElYUDRYWF9HUElPX1NUWUxFX0FDVElWRV9ISUdICTB4MAorI2RlZmluZSBJWFA0WFhfR1BJT19TVFlMRV9BQ1RJVkVfTE9XCTB4MQorI2RlZmluZSBJWFA0WFhfR1BJT19TVFlMRV9SSVNJTkdfRURHRQkweDIKKyNkZWZpbmUgSVhQNFhYX0dQSU9fU1RZTEVfRkFMTElOR19FREdFCTB4MworI2RlZmluZSBJWFA0WFhfR1BJT19TVFlMRV9UUkFOU0lUSU9OQUwJMHg0CisKKy8qIAorICogTWFzayB1c2VkIHRvIGNsZWFyIGludGVycnVwdCBzdHlsZXMgCisgKi8KKyNkZWZpbmUgSVhQNFhYX0dQSU9fU1RZTEVfQ0xFQVIJCTB4NworI2RlZmluZSBJWFA0WFhfR1BJT19TVFlMRV9TSVpFCQkzCisKKy8qCisgKiBDb25zdGFudHMgdG8gbWFrZSBpdCBlYXN5IHRvIGFjY2VzcyBUaW1lciBDb250cm9sL1N0YXR1cyByZWdpc3RlcnMKKyAqLworI2RlZmluZSBJWFA0WFhfT1NUU19PRkZTRVQJMHgwMCAgLyogQ29udGluaW91cyBUaW1lU3RhbXAgKi8KKyNkZWZpbmUgSVhQNFhYX09TVDFfT0ZGU0VUCTB4MDQgIC8qIFRpbWVyIDEgVGltZXN0YW1wICovCisjZGVmaW5lIElYUDRYWF9PU1JUMV9PRkZTRVQJMHgwOCAgLyogVGltZXIgMSBSZWxvYWQgKi8KKyNkZWZpbmUgSVhQNFhYX09TVDJfT0ZGU0VUCTB4MEMgIC8qIFRpbWVyIDIgVGltZXN0YW1wICovCisjZGVmaW5lIElYUDRYWF9PU1JUMl9PRkZTRVQJMHgxMCAgLyogVGltZXIgMiBSZWxvYWQgKi8KKyNkZWZpbmUgSVhQNFhYX09TV1RfT0ZGU0VUCTB4MTQgIC8qIFdhdGNoZG9nIFRpbWVyICovCisjZGVmaW5lIElYUDRYWF9PU1dFX09GRlNFVAkweDE4ICAvKiBXYXRjaGRvZyBFbmFibGUgKi8KKyNkZWZpbmUgSVhQNFhYX09TV0tfT0ZGU0VUCTB4MUMgIC8qIFdhdGNoZG9nIEtleSAqLworI2RlZmluZSBJWFA0WFhfT1NTVF9PRkZTRVQJMHgyMCAgLyogVGltZXIgU3RhdHVzICovCisKKy8qCisgKiBPcGVyYXRpbmcgU3lzdGVtIFRpbWVyIFJlZ2lzdGVyIERlZmluaXRpb25zLgorICovCisKKyNkZWZpbmUgSVhQNFhYX1RJTUVSX1JFRyh4KSAoKHZvbGF0aWxlIHUzMiAqKShJWFA0WFhfVElNRVJfQkFTRV9WSVJUKyh4KSkpCisKKyNkZWZpbmUgSVhQNFhYX09TVFMJSVhQNFhYX1RJTUVSX1JFRyhJWFA0WFhfT1NUU19PRkZTRVQpCisjZGVmaW5lIElYUDRYWF9PU1QxCUlYUDRYWF9USU1FUl9SRUcoSVhQNFhYX09TVDFfT0ZGU0VUKQorI2RlZmluZSBJWFA0WFhfT1NSVDEJSVhQNFhYX1RJTUVSX1JFRyhJWFA0WFhfT1NSVDFfT0ZGU0VUKQorI2RlZmluZSBJWFA0WFhfT1NUMglJWFA0WFhfVElNRVJfUkVHKElYUDRYWF9PU1QyX09GRlNFVCkKKyNkZWZpbmUgSVhQNFhYX09TUlQyCUlYUDRYWF9USU1FUl9SRUcoSVhQNFhYX09TUlQyX09GRlNFVCkKKyNkZWZpbmUgSVhQNFhYX09TV1QJSVhQNFhYX1RJTUVSX1JFRyhJWFA0WFhfT1NXVF9PRkZTRVQpCisjZGVmaW5lIElYUDRYWF9PU1dFCUlYUDRYWF9USU1FUl9SRUcoSVhQNFhYX09TV0VfT0ZGU0VUKQorI2RlZmluZSBJWFA0WFhfT1NXSwlJWFA0WFhfVElNRVJfUkVHKElYUDRYWF9PU1dLX09GRlNFVCkKKyNkZWZpbmUgSVhQNFhYX09TU1QJSVhQNFhYX1RJTUVSX1JFRyhJWFA0WFhfT1NTVF9PRkZTRVQpCisKKy8qCisgKiBUaW1lciByZWdpc3RlciB2YWx1ZXMgYW5kIGJpdCBkZWZpbml0aW9ucyAKKyAqLworI2RlZmluZSBJWFA0WFhfT1NUX0VOQUJMRQkJMHgwMDAwMDAwMQorI2RlZmluZSBJWFA0WFhfT1NUX09ORV9TSE9UCQkweDAwMDAwMDAyCisvKiBMb3cgb3JkZXIgYml0cyBvZiByZWxvYWQgdmFsdWUgaWdub3JlZCAqLworI2RlZmluZSBJWFA0WFhfT1NUX1JFTE9BRF9NQVNLCQkweDAwMDAwMDAzCisjZGVmaW5lIElYUDRYWF9PU1RfRElTQUJMRUQJCTB4MDAwMDAwMDAKKyNkZWZpbmUgSVhQNFhYX09TU1RfVElNRVJfMV9QRU5ECTB4MDAwMDAwMDEKKyNkZWZpbmUgSVhQNFhYX09TU1RfVElNRVJfMl9QRU5ECTB4MDAwMDAwMDIKKyNkZWZpbmUgSVhQNFhYX09TU1RfVElNRVJfVFNfUEVORAkweDAwMDAwMDA0CisjZGVmaW5lIElYUDRYWF9PU1NUX1RJTUVSX1dET0dfUEVORAkweDAwMDAwMDA4CisjZGVmaW5lIElYUDRYWF9PU1NUX1RJTUVSX1dBUk1fUkVTRVQJMHgwMDAwMDAxMAorCisjZGVmaW5lCUlYUDRYWF9XRFRfS0VZCQkJMHgwMDAwNDgyRQorCisjZGVmaW5lCUlYUDRYWF9XRFRfUkVTRVRfRU5BQkxFCQkweDAwMDAwMDAxCisjZGVmaW5lCUlYUDRYWF9XRFRfSVJRX0VOQUJMRQkJMHgwMDAwMDAwMgorI2RlZmluZQlJWFA0WFhfV0RUX0NPVU5UX0VOQUJMRQkJMHgwMDAwMDAwNAorCisKKy8qCisgKiBDb25zdGFudHMgdG8gbWFrZSBpdCBlYXN5IHRvIGFjY2VzcyBQQ0kgQ29udHJvbC9TdGF0dXMgcmVnaXN0ZXJzCisgKi8KKyNkZWZpbmUgUENJX05QX0FEX09GRlNFVCAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgUENJX05QX0NCRV9PRkZTRVQgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgUENJX05QX1dEQVRBX09GRlNFVCAgICAgICAgIDB4MDgKKyNkZWZpbmUgUENJX05QX1JEQVRBX09GRlNFVCAgICAgICAgIDB4MGMKKyNkZWZpbmUgUENJX0NSUF9BRF9DQkVfT0ZGU0VUICAgICAgIDB4MTAKKyNkZWZpbmUgUENJX0NSUF9XREFUQV9PRkZTRVQgICAgICAgIDB4MTQKKyNkZWZpbmUgUENJX0NSUF9SREFUQV9PRkZTRVQgICAgICAgIDB4MTgKKyNkZWZpbmUgUENJX0NTUl9PRkZTRVQgICAgICAgICAgICAgIDB4MWMKKyNkZWZpbmUgUENJX0lTUl9PRkZTRVQgICAgICAgICAgICAgIDB4MjAKKyNkZWZpbmUgUENJX0lOVEVOX09GRlNFVCAgICAgICAgICAgIDB4MjQKKyNkZWZpbmUgUENJX0RNQUNUUkxfT0ZGU0VUICAgICAgICAgIDB4MjgKKyNkZWZpbmUgUENJX0FIQk1FTUJBU0VfT0ZGU0VUICAgICAgIDB4MmMKKyNkZWZpbmUgUENJX0FIQklPQkFTRV9PRkZTRVQgICAgICAgIDB4MzAKKyNkZWZpbmUgUENJX1BDSU1FTUJBU0VfT0ZGU0VUICAgICAgIDB4MzQKKyNkZWZpbmUgUENJX0FIQkRPT1JCRUxMX09GRlNFVCAgICAgIDB4MzgKKyNkZWZpbmUgUENJX1BDSURPT1JCRUxMX09GRlNFVCAgICAgIDB4M0MKKyNkZWZpbmUgUENJX0FUUERNQTBfQUhCQUREUl9PRkZTRVQgIDB4NDAKKyNkZWZpbmUgUENJX0FUUERNQTBfUENJQUREUl9PRkZTRVQgIDB4NDQKKyNkZWZpbmUgUENJX0FUUERNQTBfTEVOQUREUl9PRkZTRVQgIDB4NDgKKyNkZWZpbmUgUENJX0FUUERNQTFfQUhCQUREUl9PRkZTRVQgIDB4NEMKKyNkZWZpbmUgUENJX0FUUERNQTFfUENJQUREUl9PRkZTRVQgIDB4NTAKKyNkZWZpbmUgUENJX0FUUERNQTFfTEVOQUREUl9PRkZTRVQJMHg1NAorCisvKgorICogUENJIENvbnRyb2wvU3RhdHVzIFJlZ2lzdGVycworICovCisjZGVmaW5lIElYUDRYWF9QQ0lfQ1NSKHgpICgodm9sYXRpbGUgdTMyICopKElYUDRYWF9QQ0lfQ0ZHX0JBU0VfVklSVCsoeCkpKQorCisjZGVmaW5lIFBDSV9OUF9BRCAgICAgICAgICAgICAgIElYUDRYWF9QQ0lfQ1NSKFBDSV9OUF9BRF9PRkZTRVQpCisjZGVmaW5lIFBDSV9OUF9DQkUgICAgICAgICAgICAgIElYUDRYWF9QQ0lfQ1NSKFBDSV9OUF9DQkVfT0ZGU0VUKQorI2RlZmluZSBQQ0lfTlBfV0RBVEEgICAgICAgICAgICBJWFA0WFhfUENJX0NTUihQQ0lfTlBfV0RBVEFfT0ZGU0VUKQorI2RlZmluZSBQQ0lfTlBfUkRBVEEgICAgICAgICAgICBJWFA0WFhfUENJX0NTUihQQ0lfTlBfUkRBVEFfT0ZGU0VUKQorI2RlZmluZSBQQ0lfQ1JQX0FEX0NCRSAgICAgICAgICBJWFA0WFhfUENJX0NTUihQQ0lfQ1JQX0FEX0NCRV9PRkZTRVQpCisjZGVmaW5lIFBDSV9DUlBfV0RBVEEgICAgICAgICAgIElYUDRYWF9QQ0lfQ1NSKFBDSV9DUlBfV0RBVEFfT0ZGU0VUKQorI2RlZmluZSBQQ0lfQ1JQX1JEQVRBICAgICAgICAgICBJWFA0WFhfUENJX0NTUihQQ0lfQ1JQX1JEQVRBX09GRlNFVCkKKyNkZWZpbmUgUENJX0NTUiAgICAgICAgICAgICAgICAgSVhQNFhYX1BDSV9DU1IoUENJX0NTUl9PRkZTRVQpIAorI2RlZmluZSBQQ0lfSVNSICAgICAgICAgICAgICAgICBJWFA0WFhfUENJX0NTUihQQ0lfSVNSX09GRlNFVCkKKyNkZWZpbmUgUENJX0lOVEVOICAgICAgICAgICAgICAgSVhQNFhYX1BDSV9DU1IoUENJX0lOVEVOX09GRlNFVCkKKyNkZWZpbmUgUENJX0RNQUNUUkwgICAgICAgICAgICAgSVhQNFhYX1BDSV9DU1IoUENJX0RNQUNUUkxfT0ZGU0VUKQorI2RlZmluZSBQQ0lfQUhCTUVNQkFTRSAgICAgICAgICBJWFA0WFhfUENJX0NTUihQQ0lfQUhCTUVNQkFTRV9PRkZTRVQpCisjZGVmaW5lIFBDSV9BSEJJT0JBU0UgICAgICAgICAgIElYUDRYWF9QQ0lfQ1NSKFBDSV9BSEJJT0JBU0VfT0ZGU0VUKQorI2RlZmluZSBQQ0lfUENJTUVNQkFTRSAgICAgICAgICBJWFA0WFhfUENJX0NTUihQQ0lfUENJTUVNQkFTRV9PRkZTRVQpCisjZGVmaW5lIFBDSV9BSEJET09SQkVMTCAgICAgICAgIElYUDRYWF9QQ0lfQ1NSKFBDSV9BSEJET09SQkVMTF9PRkZTRVQpCisjZGVmaW5lIFBDSV9QQ0lET09SQkVMTCAgICAgICAgIElYUDRYWF9QQ0lfQ1NSKFBDSV9QQ0lET09SQkVMTF9PRkZTRVQpCisjZGVmaW5lIFBDSV9BVFBETUEwX0FIQkFERFIgICAgIElYUDRYWF9QQ0lfQ1NSKFBDSV9BVFBETUEwX0FIQkFERFJfT0ZGU0VUKQorI2RlZmluZSBQQ0lfQVRQRE1BMF9QQ0lBRERSICAgICBJWFA0WFhfUENJX0NTUihQQ0lfQVRQRE1BMF9QQ0lBRERSX09GRlNFVCkKKyNkZWZpbmUgUENJX0FUUERNQTBfTEVOQUREUiAgICAgSVhQNFhYX1BDSV9DU1IoUENJX0FUUERNQTBfTEVOQUREUl9PRkZTRVQpCisjZGVmaW5lIFBDSV9BVFBETUExX0FIQkFERFIgICAgIElYUDRYWF9QQ0lfQ1NSKFBDSV9BVFBETUExX0FIQkFERFJfT0ZGU0VUKQorI2RlZmluZSBQQ0lfQVRQRE1BMV9QQ0lBRERSICAgICBJWFA0WFhfUENJX0NTUihQQ0lfQVRQRE1BMV9QQ0lBRERSX09GRlNFVCkKKyNkZWZpbmUgUENJX0FUUERNQTFfTEVOQUREUiAgICAgSVhQNFhYX1BDSV9DU1IoUENJX0FUUERNQTFfTEVOQUREUl9PRkZTRVQpCisKKy8qCisgKiBQQ0kgcmVnaXN0ZXIgdmFsdWVzIGFuZCBiaXQgZGVmaW5pdGlvbnMgCisgKi8KKworLyogQ1NSIGJpdCBkZWZpbml0aW9ucyAqLworI2RlZmluZSBQQ0lfQ1NSX0hPU1QgICAgCTB4MDAwMDAwMDEKKyNkZWZpbmUgUENJX0NTUl9BUkJFTiAgIAkweDAwMDAwMDAyCisjZGVmaW5lIFBDSV9DU1JfQURTICAgICAJMHgwMDAwMDAwNAorI2RlZmluZSBQQ0lfQ1NSX1BEUyAgICAgCTB4MDAwMDAwMDgKKyNkZWZpbmUgUENJX0NTUl9BQkUgICAgIAkweDAwMDAwMDEwCisjZGVmaW5lIFBDSV9DU1JfREJUICAgICAJMHgwMDAwMDAyMAorI2RlZmluZSBQQ0lfQ1NSX0FTRSAgICAgCTB4MDAwMDAxMDAKKyNkZWZpbmUgUENJX0NTUl9JQyAgICAgIAkweDAwMDA4MDAwCisKKy8qIElTUiAoSW50ZXJydXB0IHN0YXR1cykgUmVnaXN0ZXIgYml0IGRlZmluaXRpb25zICovCisjZGVmaW5lIFBDSV9JU1JfUFNFICAgICAJMHgwMDAwMDAwMQorI2RlZmluZSBQQ0lfSVNSX1BGRSAgICAgCTB4MDAwMDAwMDIKKyNkZWZpbmUgUENJX0lTUl9QUEUgICAgIAkweDAwMDAwMDA0CisjZGVmaW5lIFBDSV9JU1JfQUhCRSAgICAJMHgwMDAwMDAwOAorI2RlZmluZSBQQ0lfSVNSX0FQREMgICAgCTB4MDAwMDAwMTAKKyNkZWZpbmUgUENJX0lTUl9QQURDICAgIAkweDAwMDAwMDIwCisjZGVmaW5lIFBDSV9JU1JfQURCICAgICAJMHgwMDAwMDA0MAorI2RlZmluZSBQQ0lfSVNSX1BEQiAgICAgCTB4MDAwMDAwODAKKworLyogSU5URU4gKEludGVycnVwdCBFbmFibGUpIFJlZ2lzdGVyIGJpdCBkZWZpbml0aW9ucyAqLworI2RlZmluZSBQQ0lfSU5URU5fUFNFICAgCTB4MDAwMDAwMDEKKyNkZWZpbmUgUENJX0lOVEVOX1BGRSAgIAkweDAwMDAwMDAyCisjZGVmaW5lIFBDSV9JTlRFTl9QUEUgICAJMHgwMDAwMDAwNAorI2RlZmluZSBQQ0lfSU5URU5fQUhCRSAgCTB4MDAwMDAwMDgKKyNkZWZpbmUgUENJX0lOVEVOX0FQREMgIAkweDAwMDAwMDEwCisjZGVmaW5lIFBDSV9JTlRFTl9QQURDICAJMHgwMDAwMDAyMAorI2RlZmluZSBQQ0lfSU5URU5fQURCICAgCTB4MDAwMDAwNDAKKyNkZWZpbmUgUENJX0lOVEVOX1BEQiAgIAkweDAwMDAwMDgwCisKKy8qCisgKiBTaGlmdCB2YWx1ZSBmb3IgYnl0ZSBlbmFibGUgb24gTlAgY21kL2J5dGUgZW5hYmxlIHJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgSVhQNFhYX1BDSV9OUF9DQkVfQkVTTAkJNAorCisvKgorICogUENJIGNvbW1hbmRzIHN1cHBvcnRlZCBieSBOUCBhY2Nlc3MgdW5pdAorICovCisjZGVmaW5lIE5QX0NNRF9JT1JFQUQJCQkweDIKKyNkZWZpbmUgTlBfQ01EX0lPV1JJVEUJCQkweDMKKyNkZWZpbmUgTlBfQ01EX0NPTkZJR1JFQUQJCTB4YQorI2RlZmluZSBOUF9DTURfQ09ORklHV1JJVEUJCTB4YgorI2RlZmluZSBOUF9DTURfTUVNUkVBRAkJCTB4NgorI2RlZmluZQlOUF9DTURfTUVNV1JJVEUJCQkweDcKKworLyoKKyAqIENvbnN0YW50cyBmb3IgQ1JQIGFjY2VzcyBpbnRvIGxvY2FsIGNvbmZpZyBzcGFjZQorICovCisjZGVmaW5lIENSUF9BRF9DQkVfQkVTTCAgICAgICAgIDIwCisjZGVmaW5lIENSUF9BRF9DQkVfV1JJVEUJMHgwMDAxMDAwMAorCisKKy8qCisgKiBVU0IgRGV2aWNlIENvbnRyb2xsZXIKKyAqCisgKiBUaGVzZSBhcmUgdXNlZCBieSB0aGUgVVNCIGdhZGdldCBkcml2ZXIsIHNvIHRoZXkgZG9uJ3QgZm9sbG93IHRoZQorICogSVhQNFhYXyBuYW1pbmcgY29udmV0aW9ucy4KKyAqCisgKi8KKyMgZGVmaW5lIElYUDRYWF9VU0JfUkVHKHgpICAgICAgICgqKCh2b2xhdGlsZSB1MzIgKikoeCkpKQorCisvKiBVREMgVW5kb2N1bWVudGVkIC0gUmVzZXJ2ZWQxICovCisjZGVmaW5lIFVEQ19SRVMxCUlYUDRYWF9VU0JfUkVHKElYUDRYWF9VU0JfQkFTRV9WSVJUKzB4MDAwNCkgIAorLyogVURDIFVuZG9jdW1lbnRlZCAtIFJlc2VydmVkMiAqLworI2RlZmluZSBVRENfUkVTMglJWFA0WFhfVVNCX1JFRyhJWFA0WFhfVVNCX0JBU0VfVklSVCsweDAwMDgpICAKKy8qIFVEQyBVbmRvY3VtZW50ZWQgLSBSZXNlcnZlZDMgKi8KKyNkZWZpbmUgVURDX1JFUzMJSVhQNFhYX1VTQl9SRUcoSVhQNFhYX1VTQl9CQVNFX1ZJUlQrMHgwMDBDKSAgCisvKiBVREMgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBVRENDUgkJSVhQNFhYX1VTQl9SRUcoSVhQNFhYX1VTQl9CQVNFX1ZJUlQrMHgwMDAwKSAgCisvKiBVREMgRW5kcG9pbnQgMCBDb250cm9sL1N0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBVRENDUzAJCUlYUDRYWF9VU0JfUkVHKElYUDRYWF9VU0JfQkFTRV9WSVJUKzB4MDAxMCkgIAorLyogVURDIEVuZHBvaW50IDEgKElOKSBDb250cm9sL1N0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBVRENDUzEJCUlYUDRYWF9VU0JfUkVHKElYUDRYWF9VU0JfQkFTRV9WSVJUKzB4MDAxNCkgIAorLyogVURDIEVuZHBvaW50IDIgKE9VVCkgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVURDQ1MyCQlJWFA0WFhfVVNCX1JFRyhJWFA0WFhfVVNCX0JBU0VfVklSVCsweDAwMTgpICAKKy8qIFVEQyBFbmRwb2ludCAzIChJTikgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVURDQ1MzCQlJWFA0WFhfVVNCX1JFRyhJWFA0WFhfVVNCX0JBU0VfVklSVCsweDAwMUMpICAKKy8qIFVEQyBFbmRwb2ludCA0IChPVVQpIENvbnRyb2wvU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIFVEQ0NTNAkJSVhQNFhYX1VTQl9SRUcoSVhQNFhYX1VTQl9CQVNFX1ZJUlQrMHgwMDIwKSAgCisvKiBVREMgRW5kcG9pbnQgNSAoSW50ZXJydXB0KSBDb250cm9sL1N0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBVRENDUzUJCUlYUDRYWF9VU0JfUkVHKElYUDRYWF9VU0JfQkFTRV9WSVJUKzB4MDAyNCkgIAorLyogVURDIEVuZHBvaW50IDYgKElOKSBDb250cm9sL1N0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBVRENDUzYJCUlYUDRYWF9VU0JfUkVHKElYUDRYWF9VU0JfQkFTRV9WSVJUKzB4MDAyOCkgIAorLyogVURDIEVuZHBvaW50IDcgKE9VVCkgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVURDQ1M3CQlJWFA0WFhfVVNCX1JFRyhJWFA0WFhfVVNCX0JBU0VfVklSVCsweDAwMkMpICAKKy8qIFVEQyBFbmRwb2ludCA4IChJTikgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVURDQ1M4CQlJWFA0WFhfVVNCX1JFRyhJWFA0WFhfVVNCX0JBU0VfVklSVCsweDAwMzApICAKKy8qIFVEQyBFbmRwb2ludCA5IChPVVQpIENvbnRyb2wvU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIFVEQ0NTOQkJSVhQNFhYX1VTQl9SRUcoSVhQNFhYX1VTQl9CQVNFX1ZJUlQrMHgwMDM0KSAgCisvKiBVREMgRW5kcG9pbnQgMTAgKEludGVycnVwdCkgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVURDQ1MxMAkJSVhQNFhYX1VTQl9SRUcoSVhQNFhYX1VTQl9CQVNFX1ZJUlQrMHgwMDM4KSAgCisvKiBVREMgRW5kcG9pbnQgMTEgKElOKSBDb250cm9sL1N0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBVRENDUzExCQlJWFA0WFhfVVNCX1JFRyhJWFA0WFhfVVNCX0JBU0VfVklSVCsweDAwM0MpICAKKy8qIFVEQyBFbmRwb2ludCAxMiAoT1VUKSBDb250cm9sL1N0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBVRENDUzEyCQlJWFA0WFhfVVNCX1JFRyhJWFA0WFhfVVNCX0JBU0VfVklSVCsweDAwNDApICAKKy8qIFVEQyBFbmRwb2ludCAxMyAoSU4pIENvbnRyb2wvU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIFVEQ0NTMTMJCUlYUDRYWF9VU0JfUkVHKElYUDRYWF9VU0JfQkFTRV9WSVJUKzB4MDA0NCkgIAorLyogVURDIEVuZHBvaW50IDE0IChPVVQpIENvbnRyb2wvU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIFVEQ0NTMTQJCUlYUDRYWF9VU0JfUkVHKElYUDRYWF9VU0JfQkFTRV9WSVJUKzB4MDA0OCkgIAorLyogVURDIEVuZHBvaW50IDE1IChJbnRlcnJ1cHQpIENvbnRyb2wvU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIFVEQ0NTMTUJCUlYUDRYWF9VU0JfUkVHKElYUDRYWF9VU0JfQkFTRV9WSVJUKzB4MDA0QykgIAorLyogVURDIEZyYW1lIE51bWJlciBSZWdpc3RlciBIaWdoICovCisjZGVmaW5lIFVGTlJICQlJWFA0WFhfVVNCX1JFRyhJWFA0WFhfVVNCX0JBU0VfVklSVCsweDAwNjApICAKKy8qIFVEQyBGcmFtZSBOdW1iZXIgUmVnaXN0ZXIgTG93ICovCisjZGVmaW5lIFVGTlJMCQlJWFA0WFhfVVNCX1JFRyhJWFA0WFhfVVNCX0JBU0VfVklSVCsweDAwNjQpICAKKy8qIFVEQyBCeXRlIENvdW50IFJlZyAyICovCisjZGVmaW5lIFVCQ1IyCQlJWFA0WFhfVVNCX1JFRyhJWFA0WFhfVVNCX0JBU0VfVklSVCsweDAwNjgpICAKKy8qIFVEQyBCeXRlIENvdW50IFJlZyA0ICovCisjZGVmaW5lIFVCQ1I0CQlJWFA0WFhfVVNCX1JFRyhJWFA0WFhfVVNCX0JBU0VfVklSVCsweDAwNmMpICAKKy8qIFVEQyBCeXRlIENvdW50IFJlZyA3ICovCisjZGVmaW5lIFVCQ1I3CQlJWFA0WFhfVVNCX1JFRyhJWFA0WFhfVVNCX0JBU0VfVklSVCsweDAwNzApICAKKy8qIFVEQyBCeXRlIENvdW50IFJlZyA5ICovCisjZGVmaW5lIFVCQ1I5CQlJWFA0WFhfVVNCX1JFRyhJWFA0WFhfVVNCX0JBU0VfVklSVCsweDAwNzQpICAKKy8qIFVEQyBCeXRlIENvdW50IFJlZyAxMiAqLworI2RlZmluZSBVQkNSMTIJCUlYUDRYWF9VU0JfUkVHKElYUDRYWF9VU0JfQkFTRV9WSVJUKzB4MDA3OCkgIAorLyogVURDIEJ5dGUgQ291bnQgUmVnIDE0ICovCisjZGVmaW5lIFVCQ1IxNAkJSVhQNFhYX1VTQl9SRUcoSVhQNFhYX1VTQl9CQVNFX1ZJUlQrMHgwMDdjKSAgCisvKiBVREMgRW5kcG9pbnQgMCBEYXRhIFJlZ2lzdGVyICovCisjZGVmaW5lIFVERFIwCQlJWFA0WFhfVVNCX1JFRyhJWFA0WFhfVVNCX0JBU0VfVklSVCsweDAwODApICAKKy8qIFVEQyBFbmRwb2ludCAxIERhdGEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVUREUjEJCUlYUDRYWF9VU0JfUkVHKElYUDRYWF9VU0JfQkFTRV9WSVJUKzB4MDEwMCkgIAorLyogVURDIEVuZHBvaW50IDIgRGF0YSBSZWdpc3RlciAqLworI2RlZmluZSBVRERSMgkJSVhQNFhYX1VTQl9SRUcoSVhQNFhYX1VTQl9CQVNFX1ZJUlQrMHgwMTgwKSAgCisvKiBVREMgRW5kcG9pbnQgMyBEYXRhIFJlZ2lzdGVyICovCisjZGVmaW5lIFVERFIzCQlJWFA0WFhfVVNCX1JFRyhJWFA0WFhfVVNCX0JBU0VfVklSVCsweDAyMDApICAKKy8qIFVEQyBFbmRwb2ludCA0IERhdGEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVUREUjQJCUlYUDRYWF9VU0JfUkVHKElYUDRYWF9VU0JfQkFTRV9WSVJUKzB4MDQwMCkgIAorLyogVURDIEVuZHBvaW50IDUgRGF0YSBSZWdpc3RlciAqLworI2RlZmluZSBVRERSNQkJSVhQNFhYX1VTQl9SRUcoSVhQNFhYX1VTQl9CQVNFX1ZJUlQrMHgwMEEwKSAgCisvKiBVREMgRW5kcG9pbnQgNiBEYXRhIFJlZ2lzdGVyICovCisjZGVmaW5lIFVERFI2CQlJWFA0WFhfVVNCX1JFRyhJWFA0WFhfVVNCX0JBU0VfVklSVCsweDA2MDApICAKKy8qIFVEQyBFbmRwb2ludCA3IERhdGEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVUREUjcJCUlYUDRYWF9VU0JfUkVHKElYUDRYWF9VU0JfQkFTRV9WSVJUKzB4MDY4MCkgIAorLyogVURDIEVuZHBvaW50IDggRGF0YSBSZWdpc3RlciAqLworI2RlZmluZSBVRERSOAkJSVhQNFhYX1VTQl9SRUcoSVhQNFhYX1VTQl9CQVNFX1ZJUlQrMHgwNzAwKSAgCisvKiBVREMgRW5kcG9pbnQgOSBEYXRhIFJlZ2lzdGVyICovCisjZGVmaW5lIFVERFI5CQlJWFA0WFhfVVNCX1JFRyhJWFA0WFhfVVNCX0JBU0VfVklSVCsweDA5MDApICAKKy8qIFVEQyBFbmRwb2ludCAxMCBEYXRhIFJlZ2lzdGVyICovCisjZGVmaW5lIFVERFIxMAkJSVhQNFhYX1VTQl9SRUcoSVhQNFhYX1VTQl9CQVNFX1ZJUlQrMHgwMEMwKSAgCisvKiBVREMgRW5kcG9pbnQgMTEgRGF0YSBSZWdpc3RlciAqLworI2RlZmluZSBVRERSMTEJCUlYUDRYWF9VU0JfUkVHKElYUDRYWF9VU0JfQkFTRV9WSVJUKzB4MEIwMCkgIAorLyogVURDIEVuZHBvaW50IDEyIERhdGEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVUREUjEyCQlJWFA0WFhfVVNCX1JFRyhJWFA0WFhfVVNCX0JBU0VfVklSVCsweDBCODApICAKKy8qIFVEQyBFbmRwb2ludCAxMyBEYXRhIFJlZ2lzdGVyICovCisjZGVmaW5lIFVERFIxMwkJSVhQNFhYX1VTQl9SRUcoSVhQNFhYX1VTQl9CQVNFX1ZJUlQrMHgwQzAwKSAgCisvKiBVREMgRW5kcG9pbnQgMTQgRGF0YSBSZWdpc3RlciAqLworI2RlZmluZSBVRERSMTQJCUlYUDRYWF9VU0JfUkVHKElYUDRYWF9VU0JfQkFTRV9WSVJUKzB4MEUwMCkgIAorLyogVURDIEVuZHBvaW50IDE1IERhdGEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVUREUjE1CQlJWFA0WFhfVVNCX1JFRyhJWFA0WFhfVVNCX0JBU0VfVklSVCsweDAwRTApICAKKy8qIFVEQyBJbnRlcnJ1cHQgQ29udHJvbCBSZWdpc3RlciAwICovCisjZGVmaW5lIFVJQ1IwCQlJWFA0WFhfVVNCX1JFRyhJWFA0WFhfVVNCX0JBU0VfVklSVCsweDAwNTApICAKKy8qIFVEQyBJbnRlcnJ1cHQgQ29udHJvbCBSZWdpc3RlciAxICovCisjZGVmaW5lIFVJQ1IxCQlJWFA0WFhfVVNCX1JFRyhJWFA0WFhfVVNCX0JBU0VfVklSVCsweDAwNTQpICAKKy8qIFVEQyBTdGF0dXMgSW50ZXJydXB0IFJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUgVVNJUjAJCUlYUDRYWF9VU0JfUkVHKElYUDRYWF9VU0JfQkFTRV9WSVJUKzB4MDA1OCkgIAorLyogVURDIFN0YXR1cyBJbnRlcnJ1cHQgUmVnaXN0ZXIgMSAqLworI2RlZmluZSBVU0lSMQkJSVhQNFhYX1VTQl9SRUcoSVhQNFhYX1VTQl9CQVNFX1ZJUlQrMHgwMDVDKSAgCisKKyNkZWZpbmUgVURDQ1JfVURFCSgxIDw8IDApCS8qIFVEQyBlbmFibGUgKi8KKyNkZWZpbmUgVURDQ1JfVURBCSgxIDw8IDEpCS8qIFVEQyBhY3RpdmUgKi8KKyNkZWZpbmUgVURDQ1JfUlNNCSgxIDw8IDIpCS8qIERldmljZSByZXN1bWUgKi8KKyNkZWZpbmUgVURDQ1JfUkVTSVIJKDEgPDwgMykJLyogUmVzdW1lIGludGVycnVwdCByZXF1ZXN0ICovCisjZGVmaW5lIFVEQ0NSX1NVU0lSCSgxIDw8IDQpCS8qIFN1c3BlbmQgaW50ZXJydXB0IHJlcXVlc3QgKi8KKyNkZWZpbmUgVURDQ1JfU1JNCSgxIDw8IDUpCS8qIFN1c3BlbmQvcmVzdW1lIGludGVycnVwdCBtYXNrICovCisjZGVmaW5lIFVEQ0NSX1JTVElSCSgxIDw8IDYpCS8qIFJlc2V0IGludGVycnVwdCByZXF1ZXN0ICovCisjZGVmaW5lIFVEQ0NSX1JFTQkoMSA8PCA3KQkvKiBSZXNldCBpbnRlcnJ1cHQgbWFzayAqLworCisjZGVmaW5lIFVEQ0NTMF9PUFIJKDEgPDwgMCkJLyogT1VUIHBhY2tldCByZWFkeSAqLworI2RlZmluZSBVRENDUzBfSVBSCSgxIDw8IDEpCS8qIElOIHBhY2tldCByZWFkeSAqLworI2RlZmluZSBVRENDUzBfRlRGCSgxIDw8IDIpCS8qIEZsdXNoIFR4IEZJRk8gKi8KKyNkZWZpbmUgVURDQ1MwX0RSV0YJKDEgPDwgMykJLyogRGV2aWNlIHJlbW90ZSB3YWtldXAgZmVhdHVyZSAqLworI2RlZmluZSBVRENDUzBfU1NUCSgxIDw8IDQpCS8qIFNlbnQgc3RhbGwgKi8KKyNkZWZpbmUgVURDQ1MwX0ZTVAkoMSA8PCA1KQkvKiBGb3JjZSBzdGFsbCAqLworI2RlZmluZSBVRENDUzBfUk5FCSgxIDw8IDYpCS8qIFJlY2VpdmUgRklGTyBubyBlbXB0eSAqLworI2RlZmluZSBVRENDUzBfU0EJKDEgPDwgNykJLyogU2V0dXAgYWN0aXZlICovCisKKyNkZWZpbmUgVURDQ1NfQklfVEZTCSgxIDw8IDApCS8qIFRyYW5zbWl0IEZJRk8gc2VydmljZSAqLworI2RlZmluZSBVRENDU19CSV9UUEMJKDEgPDwgMSkJLyogVHJhbnNtaXQgcGFja2V0IGNvbXBsZXRlICovCisjZGVmaW5lIFVEQ0NTX0JJX0ZURgkoMSA8PCAyKQkvKiBGbHVzaCBUeCBGSUZPICovCisjZGVmaW5lIFVEQ0NTX0JJX1RVUgkoMSA8PCAzKQkvKiBUcmFuc21pdCBGSUZPIHVuZGVycnVuICovCisjZGVmaW5lIFVEQ0NTX0JJX1NTVAkoMSA8PCA0KQkvKiBTZW50IHN0YWxsICovCisjZGVmaW5lIFVEQ0NTX0JJX0ZTVAkoMSA8PCA1KQkvKiBGb3JjZSBzdGFsbCAqLworI2RlZmluZSBVRENDU19CSV9UU1AJKDEgPDwgNykJLyogVHJhbnNtaXQgc2hvcnQgcGFja2V0ICovCisKKyNkZWZpbmUgVURDQ1NfQk9fUkZTCSgxIDw8IDApCS8qIFJlY2VpdmUgRklGTyBzZXJ2aWNlICovCisjZGVmaW5lIFVEQ0NTX0JPX1JQQwkoMSA8PCAxKQkvKiBSZWNlaXZlIHBhY2tldCBjb21wbGV0ZSAqLworI2RlZmluZSBVRENDU19CT19ETUUJKDEgPDwgMykJLyogRE1BIGVuYWJsZSAqLworI2RlZmluZSBVRENDU19CT19TU1QJKDEgPDwgNCkJLyogU2VudCBzdGFsbCAqLworI2RlZmluZSBVRENDU19CT19GU1QJKDEgPDwgNSkJLyogRm9yY2Ugc3RhbGwgKi8KKyNkZWZpbmUgVURDQ1NfQk9fUk5FCSgxIDw8IDYpCS8qIFJlY2VpdmUgRklGTyBub3QgZW1wdHkgKi8KKyNkZWZpbmUgVURDQ1NfQk9fUlNQCSgxIDw8IDcpCS8qIFJlY2VpdmUgc2hvcnQgcGFja2V0ICovCisKKyNkZWZpbmUgVURDQ1NfSUlfVEZTCSgxIDw8IDApCS8qIFRyYW5zbWl0IEZJRk8gc2VydmljZSAqLworI2RlZmluZSBVRENDU19JSV9UUEMJKDEgPDwgMSkJLyogVHJhbnNtaXQgcGFja2V0IGNvbXBsZXRlICovCisjZGVmaW5lIFVEQ0NTX0lJX0ZURgkoMSA8PCAyKQkvKiBGbHVzaCBUeCBGSUZPICovCisjZGVmaW5lIFVEQ0NTX0lJX1RVUgkoMSA8PCAzKQkvKiBUcmFuc21pdCBGSUZPIHVuZGVycnVuICovCisjZGVmaW5lIFVEQ0NTX0lJX1RTUAkoMSA8PCA3KQkvKiBUcmFuc21pdCBzaG9ydCBwYWNrZXQgKi8KKworI2RlZmluZSBVRENDU19JT19SRlMJKDEgPDwgMCkJLyogUmVjZWl2ZSBGSUZPIHNlcnZpY2UgKi8KKyNkZWZpbmUgVURDQ1NfSU9fUlBDCSgxIDw8IDEpCS8qIFJlY2VpdmUgcGFja2V0IGNvbXBsZXRlICovCisjZGVmaW5lIFVEQ0NTX0lPX1JPRgkoMSA8PCAzKQkvKiBSZWNlaXZlIG92ZXJmbG93ICovCisjZGVmaW5lIFVEQ0NTX0lPX0RNRQkoMSA8PCAzKQkvKiBETUEgZW5hYmxlICovCisjZGVmaW5lIFVEQ0NTX0lPX1JORQkoMSA8PCA2KQkvKiBSZWNlaXZlIEZJRk8gbm90IGVtcHR5ICovCisjZGVmaW5lIFVEQ0NTX0lPX1JTUAkoMSA8PCA3KQkvKiBSZWNlaXZlIHNob3J0IHBhY2tldCAqLworCisjZGVmaW5lIFVEQ0NTX0lOVF9URlMJKDEgPDwgMCkJLyogVHJhbnNtaXQgRklGTyBzZXJ2aWNlICovCisjZGVmaW5lIFVEQ0NTX0lOVF9UUEMJKDEgPDwgMSkJLyogVHJhbnNtaXQgcGFja2V0IGNvbXBsZXRlICovCisjZGVmaW5lIFVEQ0NTX0lOVF9GVEYJKDEgPDwgMikJLyogRmx1c2ggVHggRklGTyAqLworI2RlZmluZSBVRENDU19JTlRfVFVSCSgxIDw8IDMpCS8qIFRyYW5zbWl0IEZJRk8gdW5kZXJydW4gKi8KKyNkZWZpbmUgVURDQ1NfSU5UX1NTVAkoMSA8PCA0KQkvKiBTZW50IHN0YWxsICovCisjZGVmaW5lIFVEQ0NTX0lOVF9GU1QJKDEgPDwgNSkJLyogRm9yY2Ugc3RhbGwgKi8KKyNkZWZpbmUgVURDQ1NfSU5UX1RTUAkoMSA8PCA3KQkvKiBUcmFuc21pdCBzaG9ydCBwYWNrZXQgKi8KKworI2RlZmluZSBVSUNSMF9JTTAJKDEgPDwgMCkJLyogSW50ZXJydXB0IG1hc2sgZXAgMCAqLworI2RlZmluZSBVSUNSMF9JTTEJKDEgPDwgMSkJLyogSW50ZXJydXB0IG1hc2sgZXAgMSAqLworI2RlZmluZSBVSUNSMF9JTTIJKDEgPDwgMikJLyogSW50ZXJydXB0IG1hc2sgZXAgMiAqLworI2RlZmluZSBVSUNSMF9JTTMJKDEgPDwgMykJLyogSW50ZXJydXB0IG1hc2sgZXAgMyAqLworI2RlZmluZSBVSUNSMF9JTTQJKDEgPDwgNCkJLyogSW50ZXJydXB0IG1hc2sgZXAgNCAqLworI2RlZmluZSBVSUNSMF9JTTUJKDEgPDwgNSkJLyogSW50ZXJydXB0IG1hc2sgZXAgNSAqLworI2RlZmluZSBVSUNSMF9JTTYJKDEgPDwgNikJLyogSW50ZXJydXB0IG1hc2sgZXAgNiAqLworI2RlZmluZSBVSUNSMF9JTTcJKDEgPDwgNykJLyogSW50ZXJydXB0IG1hc2sgZXAgNyAqLworCisjZGVmaW5lIFVJQ1IxX0lNOAkoMSA8PCAwKQkvKiBJbnRlcnJ1cHQgbWFzayBlcCA4ICovCisjZGVmaW5lIFVJQ1IxX0lNOQkoMSA8PCAxKQkvKiBJbnRlcnJ1cHQgbWFzayBlcCA5ICovCisjZGVmaW5lIFVJQ1IxX0lNMTAJKDEgPDwgMikJLyogSW50ZXJydXB0IG1hc2sgZXAgMTAgKi8KKyNkZWZpbmUgVUlDUjFfSU0xMQkoMSA8PCAzKQkvKiBJbnRlcnJ1cHQgbWFzayBlcCAxMSAqLworI2RlZmluZSBVSUNSMV9JTTEyCSgxIDw8IDQpCS8qIEludGVycnVwdCBtYXNrIGVwIDEyICovCisjZGVmaW5lIFVJQ1IxX0lNMTMJKDEgPDwgNSkJLyogSW50ZXJydXB0IG1hc2sgZXAgMTMgKi8KKyNkZWZpbmUgVUlDUjFfSU0xNAkoMSA8PCA2KQkvKiBJbnRlcnJ1cHQgbWFzayBlcCAxNCAqLworI2RlZmluZSBVSUNSMV9JTTE1CSgxIDw8IDcpCS8qIEludGVycnVwdCBtYXNrIGVwIDE1ICovCisKKyNkZWZpbmUgVVNJUjBfSVIwCSgxIDw8IDApCS8qIEludGVycnVwIHJlcXVlc3QgZXAgMCAqLworI2RlZmluZSBVU0lSMF9JUjEJKDEgPDwgMSkJLyogSW50ZXJydXAgcmVxdWVzdCBlcCAxICovCisjZGVmaW5lIFVTSVIwX0lSMgkoMSA8PCAyKQkvKiBJbnRlcnJ1cCByZXF1ZXN0IGVwIDIgKi8KKyNkZWZpbmUgVVNJUjBfSVIzCSgxIDw8IDMpCS8qIEludGVycnVwIHJlcXVlc3QgZXAgMyAqLworI2RlZmluZSBVU0lSMF9JUjQJKDEgPDwgNCkJLyogSW50ZXJydXAgcmVxdWVzdCBlcCA0ICovCisjZGVmaW5lIFVTSVIwX0lSNQkoMSA8PCA1KQkvKiBJbnRlcnJ1cCByZXF1ZXN0IGVwIDUgKi8KKyNkZWZpbmUgVVNJUjBfSVI2CSgxIDw8IDYpCS8qIEludGVycnVwIHJlcXVlc3QgZXAgNiAqLworI2RlZmluZSBVU0lSMF9JUjcJKDEgPDwgNykJLyogSW50ZXJydXAgcmVxdWVzdCBlcCA3ICovCisKKyNkZWZpbmUgVVNJUjFfSVI4CSgxIDw8IDApCS8qIEludGVycnVwIHJlcXVlc3QgZXAgOCAqLworI2RlZmluZSBVU0lSMV9JUjkJKDEgPDwgMSkJLyogSW50ZXJydXAgcmVxdWVzdCBlcCA5ICovCisjZGVmaW5lIFVTSVIxX0lSMTAJKDEgPDwgMikJLyogSW50ZXJydXAgcmVxdWVzdCBlcCAxMCAqLworI2RlZmluZSBVU0lSMV9JUjExCSgxIDw8IDMpCS8qIEludGVycnVwIHJlcXVlc3QgZXAgMTEgKi8KKyNkZWZpbmUgVVNJUjFfSVIxMgkoMSA8PCA0KQkvKiBJbnRlcnJ1cCByZXF1ZXN0IGVwIDEyICovCisjZGVmaW5lIFVTSVIxX0lSMTMJKDEgPDwgNSkJLyogSW50ZXJydXAgcmVxdWVzdCBlcCAxMyAqLworI2RlZmluZSBVU0lSMV9JUjE0CSgxIDw8IDYpCS8qIEludGVycnVwIHJlcXVlc3QgZXAgMTQgKi8KKyNkZWZpbmUgVVNJUjFfSVIxNQkoMSA8PCA3KQkvKiBJbnRlcnJ1cCByZXF1ZXN0IGVwIDE1ICovCisKKyNkZWZpbmUgRENNRF9MRU5HVEgJMHgwMWZmZgkJLyogbGVuZ3RoIG1hc2sgKG1heCA9IDhLIC0gMSkgKi8KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK3N0YXRpYyBpbmxpbmUgaW50IGNwdV9pc19peHA0Nngodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfQ1BVX0lYUDQ2WAorCXVuc2lnbmVkIGludCBwcm9jZXNzb3JfaWQ7CisKKwlhc20oIm1yYyBwMTUsIDAsICUwLCBjcjAsIGNyMCwgMDsiIDogIj1yIihwcm9jZXNzb3JfaWQpIDopOworCisJaWYgKChwcm9jZXNzb3JfaWQgJiAweGZmZmZmZjAwKSA9PSAweDY5MDU0MjAwKQorCQlyZXR1cm4gMTsKKyNlbmRpZgorCXJldHVybiAwOworfQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwNHh4L21lbW9yeS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwNHh4L21lbW9yeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzNDg1NDgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvbWVtb3J5LmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9tZW1vcnkuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA0IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfTUVNT1JZX0gKKyNkZWZpbmUgX19BU01fQVJDSF9NRU1PUllfSAorCisjaW5jbHVkZSA8YXNtL3NpemVzLmg+CisKKy8qCisgKiBQaHlzaWNhbCBEUkFNIG9mZnNldC4KKyAqLworI2RlZmluZSBQSFlTX09GRlNFVAkoMHgwMDAwMDAwMFVMKQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisvKgorICogT25seSBmaXJzdCA2NE1CIG9mIG1lbW9yeSBjYW4gYmUgYWNjZXNzZWQgdmlhIFBDSS4KKyAqIFdlIHVzZSBHRlBfRE1BIHRvIGFsbG9jYXRlIHNhZmUgYnVmZmVycyB0byBkbyBtYXAvdW5tYXAuCisgKiBUaGlzIGlzIHJlYWxseSB1Z2x5IGFuZCB3ZSBuZWVkIGEgYmV0dGVyIHdheSBvZiBzcGVjaWZ5aW5nCisgKiBETUEtY2FwYWJsZSByZWdpb25zIG9mIG1lbW9yeS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIF9fYXJjaF9hZGp1c3Rfem9uZXMoaW50IG5vZGUsIHVuc2lnbmVkIGxvbmcgKnpvbmVfc2l6ZSwgCisJdW5zaWduZWQgbG9uZyAqemhvbGVfc2l6ZSkgCit7CisJdW5zaWduZWQgaW50IHN6ID0gU1pfNjRNID4+IFBBR0VfU0hJRlQ7CisKKwkvKgorCSAqIE9ubHkgYWRqdXN0IGlmID4gNjRNIG9uIGN1cnJlbnQgc3lzdGVtCisJICovCisJaWYgKG5vZGUgfHwgKHpvbmVfc2l6ZVswXSA8PSBzeikpCisJCXJldHVybjsKKworCXpvbmVfc2l6ZVsxXSA9IHpvbmVfc2l6ZVswXSAtIHN6OworCXpvbmVfc2l6ZVswXSA9IHN6OworCXpob2xlX3NpemVbMV0gPSB6aG9sZV9zaXplWzBdOworCXpob2xlX3NpemVbMF0gPSAwOworfQorCisjZGVmaW5lIGFyY2hfYWRqdXN0X3pvbmVzKG5vZGUsIHNpemUsIGhvbGVzKSBcCisJX19hcmNoX2FkanVzdF96b25lcyhub2RlLCBzaXplLCBob2xlcykKKworI2RlZmluZSBJU0FfRE1BX1RIUkVTSE9MRCAoU1pfNjRNIC0gMSkKKworI2VuZGlmCisKKy8qCisgKiBWaXJ0dWFsIHZpZXcgPC0+IERNQSB2aWV3IG1lbW9yeSBhZGRyZXNzIHRyYW5zbGF0aW9ucworICogdmlydF90b19idXM6IFVzZWQgdG8gdHJhbnNsYXRlIHRoZSB2aXJ0dWFsIGFkZHJlc3MgdG8gYW4KKyAqCQlhZGRyZXNzIHN1aXRhYmxlIHRvIGJlIHBhc3NlZCB0byBzZXRfZG1hX2FkZHIKKyAqIGJ1c190b192aXJ0OiBVc2VkIHRvIGNvbnZlcnQgYW4gYWRkcmVzcyBmb3IgRE1BIG9wZXJhdGlvbnMKKyAqCQl0byBhbiBhZGRyZXNzIHRoYXQgdGhlIGtlcm5lbCBjYW4gdXNlLgorICoKKyAqIFRoZXNlIGFyZSBkdW1taWVzIGZvciBub3cuCisgKi8KKyNkZWZpbmUgX192aXJ0X3RvX2J1cyh4KQkgX192aXJ0X3RvX3BoeXMoeCkKKyNkZWZpbmUgX19idXNfdG9fdmlydCh4KQkgX19waHlzX3RvX3ZpcnQoeCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvcGFyYW0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNzU3MTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvcGFyYW0uaApAQCAtMCwwICsxLDMgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvcGFyYW0uaAorICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvcGxhdGZvcm0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9wbGF0Zm9ybS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhNjI2YzAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvcGxhdGZvcm0uaApAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9wbGF0Zm9ybS5oCisgKgorICogQ29uc3RhbnRzIGFuZCBmdW5jdGlvbnMgdGhhdCBhcmUgdXNlZnVsIHRvIElYUDR4eCBwbGF0Zm9ybS1zcGVjaWZpYyBjb2RlCisgKiBhbmQgZGV2aWNlIGRyaXZlcnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfSEFSRFdBUkVfSF9fCisjZXJyb3IgIkRvIG5vdCBpbmNsdWRlIHRoaXMgZGlyZWN0bHksIGluc3RlYWQgI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPiIKKyNlbmRpZgorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisKKyNpZm5kZWYJX19BUk1FQl9fCisjZGVmaW5lCVJFR19PRkZTRVQJMAorI2Vsc2UKKyNkZWZpbmUJUkVHX09GRlNFVAkzCisjZW5kaWYKKworLyoKKyAqIEV4cGFuc2lvbiBidXMgbWVtb3J5IHJlZ2lvbnMKKyAqLworI2RlZmluZSBJWFA0WFhfRVhQX0JVU19CQVNFX1BIWVMJKDB4NTAwMDAwMDApCisKKyNkZWZpbmUJSVhQNFhYX0VYUF9CVVNfQ1NYX1JFR0lPTl9TSVpFCSgweDAxMDAwMDAwKQorCisjZGVmaW5lIElYUDRYWF9FWFBfQlVTX0NTMF9CQVNFX1BIWVMJKElYUDRYWF9FWFBfQlVTX0JBU0VfUEhZUyArIDB4MDAwMDAwMDApCisjZGVmaW5lIElYUDRYWF9FWFBfQlVTX0NTMV9CQVNFX1BIWVMJKElYUDRYWF9FWFBfQlVTX0JBU0VfUEhZUyArIDB4MDEwMDAwMDApCisjZGVmaW5lIElYUDRYWF9FWFBfQlVTX0NTMl9CQVNFX1BIWVMJKElYUDRYWF9FWFBfQlVTX0JBU0VfUEhZUyArIDB4MDIwMDAwMDApCisjZGVmaW5lIElYUDRYWF9FWFBfQlVTX0NTM19CQVNFX1BIWVMJKElYUDRYWF9FWFBfQlVTX0JBU0VfUEhZUyArIDB4MDMwMDAwMDApCisjZGVmaW5lIElYUDRYWF9FWFBfQlVTX0NTNF9CQVNFX1BIWVMJKElYUDRYWF9FWFBfQlVTX0JBU0VfUEhZUyArIDB4MDQwMDAwMDApCisjZGVmaW5lIElYUDRYWF9FWFBfQlVTX0NTNV9CQVNFX1BIWVMJKElYUDRYWF9FWFBfQlVTX0JBU0VfUEhZUyArIDB4MDUwMDAwMDApCisjZGVmaW5lIElYUDRYWF9FWFBfQlVTX0NTNl9CQVNFX1BIWVMJKElYUDRYWF9FWFBfQlVTX0JBU0VfUEhZUyArIDB4MDYwMDAwMDApCisjZGVmaW5lIElYUDRYWF9FWFBfQlVTX0NTN19CQVNFX1BIWVMJKElYUDRYWF9FWFBfQlVTX0JBU0VfUEhZUyArIDB4MDcwMDAwMDApCisKKyNkZWZpbmUgSVhQNFhYX0ZMQVNIX1dSSVRBQkxFCSgweDIpCisjZGVmaW5lIElYUDRYWF9GTEFTSF9ERUZBVUxUCSgweGJjZDIzYzQwKQorI2RlZmluZSBJWFA0WFhfRkxBU0hfV1JJVEUJKDB4YmNkMjNjNDIpCisKKy8qCisgKiBDbG9jayBTcGVlZCBEZWZpbml0aW9ucy4KKyAqLworI2RlZmluZSBJWFA0WFhfUEVSSVBIRVJBTF9CVVNfQ0xPQ0sgCSg2NikgLyogNjZNaHppIEFQQiBCVVMgICAqLyAKKyNkZWZpbmUgSVhQNFhYX1VBUlRfWFRBTCAgICAgICAgCTE0NzQ1NjAwCisKKy8qCisgKiBUaGUgSVhQNHh4IGNoaXBzIGRvIG5vdCBoYXZlIGFuIEkyQyB1bml0LCBzbyBHUElPIGxpbmVzIGFyZSBqdXN0CisgKiB1c2VkIHRvIAorICogVXNlZCBhcyBwbGF0Zm9ybV9kYXRhIHRvIHByb3ZpZGUgR1BJTyBwaW4gaW5mb3JtYXRpb24gdG8gdGhlIGl4cDQyeAorICogSTJDIGRyaXZlci4KKyAqLworc3RydWN0IGl4cDR4eF9pMmNfcGlucyB7CisJdW5zaWduZWQgbG9uZyBzZGFfcGluOworCXVuc2lnbmVkIGxvbmcgc2NsX3BpbjsKK307CisKKworc3RydWN0IHN5c190aW1lcjsKKworLyoKKyAqIEZ1bmN0aW9ucyB1c2VkIGJ5IHBsYXRmb3JtLWxldmVsIHNldHVwIGNvZGUKKyAqLworZXh0ZXJuIHZvaWQgaXhwNHh4X21hcF9pbyh2b2lkKTsKK2V4dGVybiB2b2lkIGl4cDR4eF9pbml0X2lycSh2b2lkKTsKK2V4dGVybiB2b2lkIGl4cDR4eF9zeXNfaW5pdCh2b2lkKTsKK2V4dGVybiBzdHJ1Y3Qgc3lzX3RpbWVyIGl4cDR4eF90aW1lcjsKK2V4dGVybiB2b2lkIGl4cDR4eF9wY2lfcHJlaW5pdCh2b2lkKTsKK3N0cnVjdCBwY2lfc3lzX2RhdGE7CitleHRlcm4gaW50IGl4cDR4eF9zZXR1cChpbnQgbnIsIHN0cnVjdCBwY2lfc3lzX2RhdGEgKnN5cyk7CitleHRlcm4gc3RydWN0IHBjaV9idXMgKml4cDR4eF9zY2FuX2J1cyhpbnQgbnIsIHN0cnVjdCBwY2lfc3lzX2RhdGEgKnN5cyk7CisKKy8qCisgKiBHUElPLWZ1bmN0aW9ucworICovCisvKgorICogVGhlIGZvbGxvd2luZyBjb252ZXJ0ZWQgdG8gdGhlIHJlYWwgSFcgYml0cyB0aGUgZ3Bpb19saW5lX2NvbmZpZworICovCisvKiBHUElPIHBpbiB0eXBlcyAqLworI2RlZmluZSBJWFA0WFhfR1BJT19PVVQgCQkweDEKKyNkZWZpbmUgSVhQNFhYX0dQSU9fSU4gIAkJMHgyCisKKyNkZWZpbmUgSVhQNFhYX0dQSU9fSU5UU1RZTEVfTUFTSwkweDdDICAvKiBCaXRzIFs2OjJdIGRlZmluZSBpbnRlcnJ1cHQgc3R5bGUgKi8KKworLyogCisgKiBHUElPIGludGVycnVwdCB0eXBlcy4KKyAqLworI2RlZmluZSBJWFA0WFhfR1BJT19BQ1RJVkVfSElHSAkJMHg0IC8qIERlZmF1bHQgKi8KKyNkZWZpbmUgSVhQNFhYX0dQSU9fQUNUSVZFX0xPVwkJMHg4CisjZGVmaW5lIElYUDRYWF9HUElPX1JJU0lOR19FREdFCQkweDEwCisjZGVmaW5lIElYUDRYWF9HUElPX0ZBTExJTkdfRURHRSAJMHgyMAorI2RlZmluZSBJWFA0WFhfR1BJT19UUkFOU0lUSU9OQUwgCTB4NDAKKworLyogR1BJTyBzaWduYWwgdHlwZXMgKi8KKyNkZWZpbmUgSVhQNFhYX0dQSU9fTE9XCQkJMAorI2RlZmluZSBJWFA0WFhfR1BJT19ISUdICQkxCisKKy8qIEdQSU8gQ2xvY2tzICovCisjZGVmaW5lIElYUDRYWF9HUElPX0NMS18wCQkxNAorI2RlZmluZSBJWFA0WFhfR1BJT19DTEtfMQkJMTUKKworZXh0ZXJuIHZvaWQgZ3Bpb19saW5lX2NvbmZpZyh1OCBsaW5lLCB1MzIgc3R5bGUpOworCitzdGF0aWMgaW5saW5lIHZvaWQgZ3Bpb19saW5lX2dldCh1OCBsaW5lLCBpbnQgKnZhbHVlKQoreworCSp2YWx1ZSA9ICgqSVhQNFhYX0dQSU9fR1BJTlIgPj4gbGluZSkgJiAweDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBncGlvX2xpbmVfc2V0KHU4IGxpbmUsIGludCB2YWx1ZSkKK3sKKwlpZiAodmFsdWUgPT0gSVhQNFhYX0dQSU9fSElHSCkKKwkgICAgKklYUDRYWF9HUElPX0dQT1VUUiB8PSAoMSA8PCBsaW5lKTsKKwllbHNlIGlmICh2YWx1ZSA9PSBJWFA0WFhfR1BJT19MT1cpCisJICAgICpJWFA0WFhfR1BJT19HUE9VVFIgJj0gfigxIDw8IGxpbmUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ3Bpb19saW5lX2lzcl9jbGVhcih1OCBsaW5lKQoreworCSpJWFA0WFhfR1BJT19HUElTUiA9ICgxIDw8IGxpbmUpOworfQorCisjZW5kaWYgLy8gX19BU1NFTUJMWV9fCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9wcnBtYzExMDAuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9wcnBtYzExMDAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjUzMmFiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwNHh4L3BycG1jMTEwMC5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvcHJwbWMxMTAwLmgKKyAqCisgKiBNb3Rvcm9sbGEgUHJQTUMxMTAwIHBsYXRmb3JtIHNwZWNpZmljIGRlZmluaXRpb25zCisgKgorICogQXV0aG9yOiBEZWVwYWsgU2F4ZW5hIDxkc2F4ZW5hQHBsZXhpdHkubmV0PgorICoKKyAqIENvcHlyaWdodCAyMDA0IChjKSBNb250YVZpc3RhLCBTb2Z0d2FyZSwgSW5jLiAKKyAqIAorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyAKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSAKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfSEFSRFdBUkVfSF9fCisjZXJyb3IgIkRvIG5vdCBpbmNsdWRlIHRoaXMgZGlyZWN0bHksIGluc3RlYWQgI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPiIKKyNlbmRpZgorCisjZGVmaW5lCVBSUE1DMTEwMF9GTEFTSF9CQVNFCUlYUDRYWF9FWFBfQlVTX0NTMF9CQVNFX1BIWVMKKyNkZWZpbmUJUFJQTUMxMTAwX0ZMQVNIX1NJWkUJSVhQNFhYX0VYUF9CVVNfQ1NYX1JFR0lPTl9TSVpFCisKKyNkZWZpbmUJUFJQTUMxMTAwX1BDSV9NSU5fREVWSUQJMTAKKyNkZWZpbmUJUFJQTUMxMTAwX1BDSV9NQVhfREVWSUQJMTYKKyNkZWZpbmUJUFJQTUMxMTAwX1BDSV9JUlFfTElORVMJNAorCisKKy8qIFBDSSBjb250cm9sbGVyIEdQSU8gdG8gSVJRIHBpbiBtYXBwaW5ncyAqLworI2RlZmluZSBQUlBNQzExMDBfUENJX0lOVEFfUElOCTExCisjZGVmaW5lIFBSUE1DMTEwMF9QQ0lfSU5UQl9QSU4JMTAKKyNkZWZpbmUJUFJQTUMxMTAwX1BDSV9JTlRDX1BJTgk5CisjZGVmaW5lCVBSUE1DMTEwMF9QQ0lfSU5URF9QSU4JOAorCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9zeXN0ZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzU4OWFhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwNHh4L3N5c3RlbS5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eC8vc3lzdGVtLmggCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAyIEludGVsIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKworc3RhdGljIGlubGluZSB2b2lkIGFyY2hfaWRsZSh2b2lkKQoreworI2lmIDAKKwlpZiAoIWhsdF9jb3VudGVyKQorCQljcHVfZG9faWRsZSgwKTsKKyNlbmRpZgorfQorCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSkKK3sKKwlpZiAoIDEgJiYgbW9kZSA9PSAncycpIHsKKwkJLyogSnVtcCBpbnRvIFJPTSBhdCBhZGRyZXNzIDAgKi8KKwkJY3B1X3Jlc2V0KDApOworCX0gZWxzZSB7CisJCS8qIFVzZSBvbi1jaGlwIHJlc2V0IGNhcGFiaWxpdHkgKi8KKworCQkvKiBzZXQgdGhlICJrZXkiIHJlZ2lzdGVyIHRvIGVuYWJsZSBhY2Nlc3MgdG8KKwkJICogInRpbWVyIiBhbmQgImVuYWJsZSIgcmVnaXN0ZXJzCisJCSAqLworCQkqSVhQNFhYX09TV0sgPSBJWFA0WFhfV0RUX0tFWTsKKworCQkvKiB3cml0ZSAwIHRvIHRoZSB0aW1lciByZWdpc3RlciBmb3IgYW4gaW1tZWRpYXRlIHJlc2V0ICovCisJCSpJWFA0WFhfT1NXVCA9IDA7CisKKwkJKklYUDRYWF9PU1dFID0gSVhQNFhYX1dEVF9SRVNFVF9FTkFCTEUgfCBJWFA0WFhfV0RUX0NPVU5UX0VOQUJMRTsKKwl9Cit9CisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC90aW1leC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwNHh4L3RpbWV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhjOWQ3NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC90aW1leC5oCkBAIC0wLDAgKzEsMTMgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvdGltZXguaAorICogCisgKi8KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorCisvKgorICogV2UgdXNlIElYUDQyNSBHZW5lcmFsIHB1cnBvc2UgdGltZXIgZm9yIG91ciB0aW1lciBuZWVkcywgaXQgcnVucyBhdCAKKyAqIDY2LjY2Li4uIE1IegorICovCisjZGVmaW5lIENMT0NLX1RJQ0tfUkFURSAoNjY2NjY2NjYpCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC91bmNvbXByZXNzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvdW5jb21wcmVzcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2MGMzNTgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvdW5jb21wcmVzcy5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvdW5jb21wcmVzcy5oIAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMiBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA0IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaWZuZGVmIF9BUkNIX1VOQ09NUFJFU1NfSF8KKyNkZWZpbmUgX0FSQ0hfVU5DT01QUkVTU19IXworCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfcmVnLmg+CisKKyNkZWZpbmUgVFhfRE9ORSAoVUFSVF9MU1JfVEVNVHxVQVJUX0xTUl9USFJFKQorCitzdGF0aWMgdm9sYXRpbGUgdTMyKiB1YXJ0X2Jhc2U7CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgcHV0YyhjaGFyIGMpCit7CisJLyogQ2hlY2sgVEhSRSBhbmQgVEVNVCBiaXRzIGJlZm9yZSB3ZSB0cmFuc21pdCB0aGUgY2hhcmFjdGVyLgorCSAqLworCXdoaWxlICgodWFydF9iYXNlW1VBUlRfTFNSXSAmIFRYX0RPTkUpICE9IFRYX0RPTkUpOyAKKwkqdWFydF9iYXNlID0gYzsKK30KKworLyoKKyAqIFRoaXMgZG9lcyBub3QgYXBwZW5kIGEgbmV3bGluZQorICovCitzdGF0aWMgdm9pZCBwdXRzdHIoY29uc3QgY2hhciAqcykKK3sKKwl3aGlsZSAoKnMpCisJeworCQlwdXRjKCpzKTsKKwkJaWYgKCpzID09ICdcbicpCisJCQlwdXRjKCdccicpOworCQlzKys7CisJfQorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fYXJjaF9kZWNvbXBfc2V0dXAodW5zaWduZWQgbG9uZyBhcmNoX2lkKQoreworCS8qCisJICogQ295b3RlIGFuZCBndHd4NTcxNSBvbmx5IGhhdmUgVUFSVDIgY29ubmVjdGVkCisJICovCisJaWYgKG1hY2hpbmVfaXNfYWRpX2NveW90ZSgpIHx8IG1hY2hpbmVfaXNfZ3R3eDU3MTUoKSkKKwkJdWFydF9iYXNlID0gKHZvbGF0aWxlIHUzMiopIElYUDRYWF9VQVJUMl9CQVNFX1BIWVM7CisJZWxzZQorCQl1YXJ0X2Jhc2UgPSAodm9sYXRpbGUgdTMyKikgSVhQNFhYX1VBUlQxX0JBU0VfUEhZUzsKK30KKworLyoKKyAqIGFyY2hfaWQgaXMgYSB2YXJpYWJsZSBpbiBkZWNvbXByZXNzX2tlcm5lbCgpCisgKi8KKyNkZWZpbmUgYXJjaF9kZWNvbXBfc2V0dXAoKQlfX2FyY2hfZGVjb21wX3NldHVwKGFyY2hfaWQpCisKKyNkZWZpbmUgYXJjaF9kZWNvbXBfd2RvZygpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwNHh4L3ZtYWxsb2MuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC92bWFsbG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE0NmU1NgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC92bWFsbG9jLmgKQEAgLTAsMCArMSwxNyBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC92bWFsbG9jLmgKKyAqLworCisvKgorICogSnVzdCBhbnkgYXJiaXRyYXJ5IG9mZnNldCB0byB0aGUgc3RhcnQgb2YgdGhlIHZtYWxsb2MgVk0gYXJlYTogdGhlCisgKiBjdXJyZW50IDhNQiB2YWx1ZSBqdXN0IG1lYW5zIHRoYXQgdGhlcmUgd2lsbCBiZSBhIDhNQiAiaG9sZSIgYWZ0ZXIgdGhlCisgKiBwaHlzaWNhbCBtZW1vcnkgdW50aWwgdGhlIGtlcm5lbCB2aXJ0dWFsIG1lbW9yeSBzdGFydHMuICBUaGF0IG1lYW5zIHRoYXQKKyAqIGFueSBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyB3aWxsIGhvcGVmdWxseSBiZSBjYXVnaHQuCisgKiBUaGUgdm1hbGxvYygpIHJvdXRpbmVzIGxlYXZlcyBhIGhvbGUgb2YgNGtCIGJldHdlZW4gZWFjaCB2bWFsbG9jZWQKKyAqIGFyZWEgZm9yIHRoZSBzYW1lIHJlYXNvbi4gOykKKyAqLworI2RlZmluZSBWTUFMTE9DX09GRlNFVAkgICg4KjEwMjQqMTAyNCkKKyNkZWZpbmUgVk1BTExPQ19TVEFSVAkgICgoKHVuc2lnbmVkIGxvbmcpaGlnaF9tZW1vcnkgKyBWTUFMTE9DX09GRlNFVCkgJiB+KFZNQUxMT0NfT0ZGU0VULTEpKQorI2RlZmluZSBWTUFMTE9DX1ZNQUREUih4KSAoKHVuc2lnbmVkIGxvbmcpKHgpKQorI2RlZmluZSBWTUFMTE9DX0VORCAgICAgICAoMHhGRjAwMDAwMCkKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtbDcyMDAvYXV4X3JlZy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbDcyMDAvYXV4X3JlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2MmNiYzcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1sNzIwMC9hdXhfcmVnLmgKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWw3MjAwL2F1eF9yZWcuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBTdGV2ZSBIaWxsIChzamhpbGxAY290dy5jb20pCisgKgorICogQ2hhbmdlbG9nOgorICogICAwOC0wMi0yMDAwCVNKSAlDcmVhdGVkIGZpbGUKKyAqLworI2lmbmRlZiBfQVNNX0FSQ0hfQVVYUkVHX0gKKyNkZWZpbmUgX0FTTV9BUkNIX0FVWFJFR19ICisKKyNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgorCisjZGVmaW5lIGw3MjAwYXV4X3JlZwkqKCh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgKEFVWF9CQVNFKSkKKworLyoKKyAqIEF1eGlsbGFyeSByZWdpc3RlciB2YWx1ZXMKKyAqLworI2RlZmluZSBBVVhfQ0xFQVIJCTB4MDAwMDAwMDAKKyNkZWZpbmUgQVVYX0RJQUdfTEVEX09OCQkweDAwMDAwMDAyCisjZGVmaW5lIEFVWF9SVFNfVUFSVDEJCTB4MDAwMDAwMDQKKyNkZWZpbmUgQVVYX0RUUl9VQVJUMQkJMHgwMDAwMDAwOAorI2RlZmluZSBBVVhfS0JEX0NPTFVNTl8xMl9ISUdICTB4MDAwMDAwMTAKKyNkZWZpbmUgQVVYX0tCRF9DT0xVTU5fMTJfT0ZGCTB4MDAwMDAwMjAKKyNkZWZpbmUgQVVYX0tCRF9DT0xVTU5fMTNfSElHSAkweDAwMDAwMDQwCisjZGVmaW5lIEFVWF9LQkRfQ09MVU1OXzEzX09GRgkweDAwMDAwMDgwCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtbDcyMDAvZGVidWctbWFjcm8uUyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWw3MjAwL2RlYnVnLW1hY3JvLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ2NDczMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWw3MjAwL2RlYnVnLW1hY3JvLlMKQEAgLTAsMCArMSw0MCBAQAorLyogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtbDcyMDAvZGVidWctbWFjcm8uUworICoKKyAqIERlYnVnZ2luZyBtYWNybyBpbmNsdWRlIGhlYWRlcgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTQtMTk5OSBSdXNzZWxsIEtpbmcKKyAqICBNb3ZlZCBmcm9tIGxpbnV4L2FyY2gvYXJtL2tlcm5lbC9kZWJ1Zy5TIGJ5IEJlbiBEb29rcworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorKi8KKworCQkuZXF1CWlvX3ZpcnQsIElPX0JBU0UKKwkJLmVxdQlpb19waHlzLCBJT19TVEFSVAorCisJCS5tYWNybwlhZGRydWFydCxyeAorCQltcmMJcDE1LCAwLCBccngsIGMxLCBjMAorCQl0c3QJXHJ4LCAjMQkJCUAgTU1VIGVuYWJsZWQ/CisJCW1vdmVxCVxyeCwgI2lvX3BoeXMJCUAgcGh5c2ljYWwgYmFzZSBhZGRyZXNzCisJCW1vdm5lCVxyeCwgI2lvX3ZpcnQJCUAgdmlydHVhbCBhZGRyZXNzCisJCWFkZAlccngsIFxyeCwgIzB4MDAwNDQwMDAJQCBVQVJUMQorQAkJYWRkCVxyeCwgXHJ4LCAjMHgwMDA0NTAwMAlAIFVBUlQyCisJCS5lbmRtCisKKwkJLm1hY3JvCXNlbmR1YXJ0LHJkLHJ4CisJCXN0cglccmQsIFtccngsICMweDBdCUAgVUFSVERSCisJCS5lbmRtCisKKwkJLm1hY3JvCXdhaXR1YXJ0LHJkLHJ4CisxMDAxOgkJbGRyCVxyZCwgW1xyeCwgIzB4MThdCUAgVUFSVEZMRworCQl0c3QJXHJkLCAjMSA8PCA1CQlAIFVBUlRGTEdVVFhGRiAtIDEgd2hlbiBmdWxsCisJCWJuZQkxMDAxYgorCQkuZW5kbQorCisJCS5tYWNybwlidXN5dWFydCxyZCxyeAorMTAwMToJCWxkcglccmQsIFtccngsICMweDE4XQlAIFVBUlRGTEcKKwkJdHN0CVxyZCwgIzEgPDwgMwkJQCBVQVJURkxHVUJVU1kgLSAxIHdoZW4gYnVzeQorCQlibmUJMTAwMWIKKwkJLmVuZG0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWw3MjAwL2RtYS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbDcyMDAvZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU5NWIzOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWw3MjAwL2RtYS5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1sNzIwMC9kbWEuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBTdGV2ZSBIaWxsIChzamhpbGxAY290dy5jb20pCisgKgorICogQ2hhbmdlbG9nOgorICogIDA4LTI5LTIwMDAJU0pICUNyZWF0ZWQKKyAqLworI2lmbmRlZiBfX0FTTV9BUkNIX0RNQV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfRE1BX0gKKworLyogRE1BIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQhIEl0IHNob3VsZCBiZSB0aGUgc2FtZSBhcyBhY29ybiwgY29weSBvdmVyLi4gKi8KKworLyoKKyAqIFRoaXMgaXMgdGhlIG1heGltdW0gRE1BIGFkZHJlc3MgdGhhdCBjYW4gYmUgRE1BZCB0by4KKyAqIFRoZXJlIHNob3VsZCBub3QgYmUgbW9yZSB0aGFuICgweGQwMDAwMDAwIC0gMHhjMDAwMDAwMCkKKyAqIGJ5dGVzIG9mIFJBTS4KKyAqLworI2RlZmluZSBNQVhfRE1BX0FERFJFU1MgICAgICAgICAweGQwMDAwMDAwCisjZGVmaW5lIE1BWF9ETUFfQ0hBTk5FTFMgICAgICAgIDAKKworI2RlZmluZSBETUFfUzAgICAgICAgICAgICAgICAgICAwCisKKyNlbmRpZiAvKiBfQVNNX0FSQ0hfRE1BX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWw3MjAwL2VudHJ5LW1hY3JvLlMgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1sNzIwMC9lbnRyeS1tYWNyby5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNjM0MmQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1sNzIwMC9lbnRyeS1tYWNyby5TCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1sNzIwMC9lbnRyeS1tYWNyby5TCisgKgorICogTG93LWxldmVsIElSUSBoZWxwZXIgbWFjcm9zIGZvciBMNzIwMC1iYXNlZCBwbGF0Zm9ybXMKKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorCisJCS5lcXUJaXJxX2Jhc2VfYWRkciwJSU9fQkFTRV8yCisKKwkJLm1hY3JvICBkaXNhYmxlX2ZpcQorCQkuZW5kbQorCisJCS5tYWNybyAgZ2V0X2lycW5yX2FuZF9iYXNlLCBpcnFuciwgaXJxc3RhdCwgYmFzZSwgdG1wCisJCW1vdiAgICAgXGlycXN0YXQsICNpcnFfYmFzZV9hZGRyCQlAIFZpcnQgYWRkciBJUlEgcmVncworCQlhZGQJXGlycXN0YXQsIFxpcnFzdGF0LCAjMHgwMDAwMTAwMAkJQCBTdGF0dXMgcmVnCisJCWxkciAgICAgXGlycXN0YXQsIFtcaXJxc3RhdCwgIzBdCQlAIGdldCBpbnRlcnJ1cHRzCisJCW1vdiAgICAgXGlycW5yLCAjMAorMTAwMToJCXRzdCAgICAgXGlycXN0YXQsICMxCisJCWFkZGVxICAgXGlycW5yLCBcaXJxbnIsICMxCisJCW1vdmVxICAgXGlycXN0YXQsIFxpcnFzdGF0LCBsc3IgIzEKKwkJdHN0ZXEgICBcaXJxbnIsICMzMgorCQliZXEgICAgIDEwMDFiCisJCXRlcSAgICAgXGlycW5yLCAjMzIKKwkJLmVuZG0KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtbDcyMDAvZ3BfdGltZXJzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1sNzIwMC9ncF90aW1lcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjIwOTYyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbDcyMDAvZ3BfdGltZXJzLmgKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWw3MjAwL2dwX3RpbWVycy5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwIFN0ZXZlIEhpbGwgKHNqaGlsbEBjb3R3LmNvbSkKKyAqCisgKiBDaGFuZ2Vsb2c6CisgKiAgIDA3LTI4LTIwMDAJU0pICUNyZWF0ZWQgZmlsZQorICogICAwOC0wMi0yMDAwCVNKSAlVc2VkIHN0cnVjdHVyZSBmb3IgcmVnaXN0ZXJzCisgKi8KKyNpZm5kZWYgX0FTTV9BUkNIX0dQVElNRVJTX0gKKyNkZWZpbmUgX0FTTV9BUkNIX0dQVElNRVJTX0gKKworI2luY2x1ZGUgPGFzbS9hcmNoL2hhcmR3YXJlLmg+CisKKy8qCisgKiBMYXlvdXQgb2YgTDcyMDAgZ2VuZXJhbCBwdXJwb3NlIHRpbWVyIHJlZ2lzdGVycworICovCitzdHJ1Y3QgR1BUX1JlZ3MgeworCXVuc2lnbmVkIGludCBUSU1FUkxPQUQ7CisJdW5zaWduZWQgaW50IFRJTUVSVkFMVUU7CisJdW5zaWduZWQgaW50IFRJTUVSQ09OVFJPTDsKKwl1bnNpZ25lZCBpbnQgVElNRVJDTEVBUjsKK307CisKKyNkZWZpbmUgR1BUX0JBU0UJCShJT19CQVNFXzIgKyAweDMwMDApCisjZGVmaW5lIGw3MjAwX3RpbWVyMV9yZWdzCSgodm9sYXRpbGUgc3RydWN0IEdQVF9SZWdzICopIChHUFRfQkFTRSkpCisjZGVmaW5lIGw3MjAwX3RpbWVyMl9yZWdzCSgodm9sYXRpbGUgc3RydWN0IEdQVF9SZWdzICopIChHUFRfQkFTRSArIDB4MjApKQorCisvKgorICogR2VuZXJhbCByZWdpc3RlciB2YWx1ZXMKKyAqLworI2RlZmluZQlHUFRfUFJFU0NBTEVfMQkJMHgwMDAwMDAwMAorI2RlZmluZQlHUFRfUFJFU0NBTEVfMTYJCTB4MDAwMDAwMDQKKyNkZWZpbmUJR1BUX1BSRVNDQUxFXzI1NgkweDAwMDAwMDA4CisjZGVmaW5lIEdQVF9NT0RFX0ZSRUVSVU4JMHgwMDAwMDAwMAorI2RlZmluZSBHUFRfTU9ERV9QRVJJT0RJQwkweDAwMDAwMDQwCisjZGVmaW5lIEdQVF9FTkFCTEUJCTB4MDAwMDAwODAKKyNkZWZpbmUgR1BUX0JaVE9HCQkweDAwMDAwMTAwCisjZGVmaW5lIEdQVF9CWk1PRAkJMHgwMDAwMDIwMAorI2RlZmluZSBHUFRfTE9BRF9NQVNLIAkJMHgwMDAwZmZmZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWw3MjAwL2dwaW8uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWw3MjAwL2dwaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjYzZTQyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbDcyMDAvZ3Bpby5oCkBAIC0wLDAgKzEsMTA1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiAgICAgIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWw3MjAwL2dwaW8uaAorICoKKyAqICAgICAgUmVnaXN0ZXJzIGFuZCAgaGVscGVyIGZ1bmN0aW9ucyBmb3IgdGhlIEw3MjAwIExpbmstVXAgU3lzdGVtcworICogICAgICBHUElPLgorICoKKyAqICAgICAgKEMpIENvcHlyaWdodCAyMDAwLCBTIEEgTWNDb25uZWxsICAoc2FtY2Nvbm5AY290dy5jb20pCisgKgorICogIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZS4gU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3IKKyAqICBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgR1BJT19PRkYgICAweDAwMDA1MDAwICAvKiBPZmZzZXQgZnJvbSBJT19TVEFSVCB0byB0aGUgR1BJTyByZWcncy4gKi8KKworLyogSU9fU1RBUlQgYW5kIElPX0JBU0UgYXJlIGRlZmluZWQgaW4gaGFyZHdhcmUuaCAqLworCisjZGVmaW5lIEdQSU9fU1RBUlQgKElPX1NUQVJUXzIgKyBHUElPX09GRikgLyogUGh5c2ljYWwgYWRkciBvZiB0aGUgR1BJTyByZWcuICovCisjZGVmaW5lIEdQSU9fQkFTRSAgKElPX0JBU0VfMiAgKyBHUElPX09GRikgLyogVmlydHVhbCBhZGRyIG9mIHRoZSBHUElPIHJlZy4gKi8KKworLyogT2Zmc2V0cyBmcm9tIHRoZSBzdGFydCBvZiB0aGUgR1BJTyBmb3IgYWxsIHRoZSByZWdpc3RlcnMuICovCisjZGVmaW5lIFBBRFJfT0ZGICAgICAweDAwMAorI2RlZmluZSBQQUREUl9PRkYgICAgMHgwMDQKKyNkZWZpbmUgUEFTQlNSX09GRiAgIDB4MDA4CisjZGVmaW5lIFBBRUVOUl9PRkYgICAweDAwYworI2RlZmluZSBQQUVTTlJfT0ZGICAgMHgwMTAKKyNkZWZpbmUgUEFFU1RSX09GRiAgIDB4MDE0CisjZGVmaW5lIFBBSU1SX09GRiAgICAweDAxOAorI2RlZmluZSBQQUlOVF9PRkYgICAgMHgwMWMKKworI2RlZmluZSBQQkRSX09GRiAgICAgMHgwMjAKKyNkZWZpbmUgUEJERFJfT0ZGICAgIDB4MDI0CisjZGVmaW5lIFBCU0JTUl9PRkYgICAweDAyOAorI2RlZmluZSBQQklNUl9PRkYgICAgMHgwMzgKKyNkZWZpbmUgUEJJTlRfT0ZGICAgIDB4MDNjCisKKyNkZWZpbmUgUENEUl9PRkYgICAgIDB4MDQwCisjZGVmaW5lIFBDRERSX09GRiAgICAweDA0NAorI2RlZmluZSBQQ1NCU1JfT0ZGICAgMHgwNDgKKyNkZWZpbmUgUENJTVJfT0ZGICAgIDB4MDU4CisjZGVmaW5lIFBDSU5UX09GRiAgICAweDA1YworCisjZGVmaW5lIFBERFJfT0ZGICAgICAweDA2MAorI2RlZmluZSBQREREUl9PRkYgICAgMHgwNjQKKyNkZWZpbmUgUERTQlNSX09GRiAgIDB4MDY4CisjZGVmaW5lIFBERUVOUl9PRkYgICAweDA2YworI2RlZmluZSBQREVTTlJfT0ZGICAgMHgwNzAKKyNkZWZpbmUgUERFU1RSX09GRiAgIDB4MDc0CisjZGVmaW5lIFBESU1SX09GRiAgICAweDA3OAorI2RlZmluZSBQRElOVF9PRkYgICAgMHgwN2MKKworI2RlZmluZSBQRURSX09GRiAgICAgMHgwODAKKyNkZWZpbmUgUEVERFJfT0ZGICAgIDB4MDg0CisjZGVmaW5lIFBFU0JTUl9PRkYgICAweDA4OAorI2RlZmluZSBQRUVFTlJfT0ZGICAgMHgwOGMKKyNkZWZpbmUgUEVFU05SX09GRiAgIDB4MDkwCisjZGVmaW5lIFBFRVNUUl9PRkYgICAweDA5NAorI2RlZmluZSBQRUlNUl9PRkYgICAgMHgwOTgKKyNkZWZpbmUgUEVJTlRfT0ZGICAgIDB4MDljCisKKy8qIERlZmluZSB0aGUgR1BJTyByZWdpc3RlcnMgZm9yIHVzZSBieSBkZXZpY2UgZHJpdmVycyBhbmQgdGhlIGtlcm5lbC4gKi8KKyNkZWZpbmUgUEFEUiAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoR1BJT19CQVNFK1BBRFJfT0ZGKSkKKyNkZWZpbmUgUEFERFIgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoR1BJT19CQVNFK1BBRERSX09GRikpCisjZGVmaW5lIFBBU0JTUiAoKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKEdQSU9fQkFTRStQQVNCU1JfT0ZGKSkKKyNkZWZpbmUgUEFFRU5SICgqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoR1BJT19CQVNFK1BBRUVOUl9PRkYpKQorI2RlZmluZSBQQUVTTlIgKCoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShHUElPX0JBU0UrUEFFU05SX09GRikpCisjZGVmaW5lIFBBRVNUUiAoKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKEdQSU9fQkFTRStQQUVTVFJfT0ZGKSkKKyNkZWZpbmUgUEFJTVIgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoR1BJT19CQVNFK1BBSU1SX09GRikpCisjZGVmaW5lIFBBSU5UICAoKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKEdQSU9fQkFTRStQQUlOVF9PRkYpKQorCisjZGVmaW5lIFBCRFIgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKEdQSU9fQkFTRStQQkRSX09GRikpCisjZGVmaW5lIFBCRERSICAoKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKEdQSU9fQkFTRStQQkREUl9PRkYpKQorI2RlZmluZSBQQlNCU1IgKCoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShHUElPX0JBU0UrUEJTQlNSX09GRikpCisjZGVmaW5lIFBCSU1SICAoKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKEdQSU9fQkFTRStQQklNUl9PRkYpKQorI2RlZmluZSBQQklOVCAgKCoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShHUElPX0JBU0UrUEJJTlRfT0ZGKSkKKworI2RlZmluZSBQQ0RSICAgKCoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShHUElPX0JBU0UrUENEUl9PRkYpKQorI2RlZmluZSBQQ0REUiAgKCoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShHUElPX0JBU0UrUENERFJfT0ZGKSkKKyNkZWZpbmUgUENTQlNSICgqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoR1BJT19CQVNFK1BDU0JTUl9PRkYpKQorI2RlZmluZSBQQ0lNUiAgKCoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShHUElPX0JBU0UrUENJTVJfT0ZGKSkKKyNkZWZpbmUgUENJTlQgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoR1BJT19CQVNFK1BDSU5UX09GRikpCisKKyNkZWZpbmUgUEREUiAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoR1BJT19CQVNFK1BERFJfT0ZGKSkKKyNkZWZpbmUgUERERFIgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoR1BJT19CQVNFK1BERERSX09GRikpCisjZGVmaW5lIFBEU0JTUiAoKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKEdQSU9fQkFTRStQRFNCU1JfT0ZGKSkKKyNkZWZpbmUgUERFRU5SICgqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoR1BJT19CQVNFK1BERUVOUl9PRkYpKQorI2RlZmluZSBQREVTTlIgKCoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShHUElPX0JBU0UrUERFU05SX09GRikpCisjZGVmaW5lIFBERVNUUiAoKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKEdQSU9fQkFTRStQREVTVFJfT0ZGKSkKKyNkZWZpbmUgUERJTVIgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoR1BJT19CQVNFK1BESU1SX09GRikpCisjZGVmaW5lIFBESU5UICAoKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKEdQSU9fQkFTRStQRElOVF9PRkYpKQorCisjZGVmaW5lIFBFRFIgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKEdQSU9fQkFTRStQRURSX09GRikpCisjZGVmaW5lIFBFRERSICAoKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKEdQSU9fQkFTRStQRUREUl9PRkYpKQorI2RlZmluZSBQRVNCU1IgKCoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShHUElPX0JBU0UrUEVTQlNSX09GRikpCisjZGVmaW5lIFBFRUVOUiAoKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKEdQSU9fQkFTRStQRUVFTlJfT0ZGKSkKKyNkZWZpbmUgUEVFU05SICgqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoR1BJT19CQVNFK1BFRVNOUl9PRkYpKQorI2RlZmluZSBQRUVTVFIgKCoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShHUElPX0JBU0UrUEVFU1RSX09GRikpCisjZGVmaW5lIFBFSU1SICAoKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKEdQSU9fQkFTRStQRUlNUl9PRkYpKQorI2RlZmluZSBQRUlOVCAgKCoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShHUElPX0JBU0UrUEVJTlRfT0ZGKSkKKworI2RlZmluZSBWRUVfRU4gICAgICAgICAweDAyCisjZGVmaW5lIEJBQ0tMSUdIVF9FTiAgIDB4MDQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWw3MjAwL2hhcmR3YXJlLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1sNzIwMC9oYXJkd2FyZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3NTUwNzkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1sNzIwMC9oYXJkd2FyZS5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1sNzIwMC9oYXJkd2FyZS5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwIFJvYiBTY290dCAocnNjb3R0QG10cm9iLmZkbnMubmV0KQorICogICAgICAgICAgICAgICAgICAgIFN0ZXZlIEhpbGwgKHNqaGlsbEBjb3R3LmNvbSkKKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGhhcmR3YXJlIGRlZmluaXRpb25zIGZvciB0aGUgCisgKiBMaW5rVXAgU3lzdGVtcyBMNzIwMCBTT0MgZGV2ZWxvcG1lbnQgYm9hcmQuCisgKgorICogQ2hhbmdlbG9nOgorICogICAwMi0wMS0yMDAwCSBSUwlDcmVhdGVkIEw3MjAwIHZlcnNpb24sIGRlcml2ZWQgZnJvbSBycGMgY29kZQorICogICAwMy0yMS0yMDAwCVNKSAlDbGVhbmVkIHVwIGZpbGUKKyAqICAgMDQtMjEtMjAwMAkgUlMgCUNoYW5nZWQgbWFwcGluZyBvZiBJL08gaW4gdmlydHVhbCBzcGFjZQorICogICAwNC0yNS0yMDAwCVNKSAlSZW1vdmVkIHVudXNlZCBzeW1ib2xzIGFuZCBzdWNoCisgKiAgIDA1LTA1LTIwMDAJU0pICUNvbXBsZXRlIHJld3JpdGUKKyAqICAgMDctMzEtMjAwMAlTSkgJQWRkZWQgdW5kb2N1bWVudGVkIGRlYnVnIGF1eGlsbGFyeSBwb3J0IHRvCisgKgkJCWdldCBhdCBsYXN0IHR3byBjb2x1bW5zIGZvciBrZXlib2FyZCBkcml2ZXIKKyAqLworI2lmbmRlZiBfX0FTTV9BUkNIX0hBUkRXQVJFX0gKKyNkZWZpbmUgX19BU01fQVJDSF9IQVJEV0FSRV9ICisKKy8qIEhhcmR3YXJlIGFkZHJlc3NlcyBvZiBtYWpvciBhcmVhcy4KKyAqICAqX1NUQVJUIGlzIHRoZSBwaHlzaWNhbCBhZGRyZXNzCisgKiAgKl9TSVpFICBpcyB0aGUgc2l6ZSBvZiB0aGUgcmVnaW9uCisgKiAgKl9CQVNFICBpcyB0aGUgdmlydHVhbCBhZGRyZXNzCisgKi8KKyNkZWZpbmUgUkFNX1NUQVJUCQkweGYwMDAwMDAwCisjZGVmaW5lIFJBTV9TSVpFCQkweDAyMDAwMDAwCisjZGVmaW5lIFJBTV9CQVNFCQkweGMwMDAwMDAwCisKKyNkZWZpbmUgSU9fU1RBUlQJCTB4ODAwMDAwMDAgICAgICAvKiBJL08gKi8KKyNkZWZpbmUgSU9fU0laRQkJCTB4MDEwMDAwMDAKKyNkZWZpbmUgSU9fQkFTRQkJCTB4ZDAwMDAwMDAKKworI2RlZmluZSBJT19TVEFSVF8yCQkweDkwMDAwMDAwICAgICAgLyogSS9PICovCisjZGVmaW5lIElPX1NJWkVfMgkJMHgwMTAwMDAwMAorI2RlZmluZSBJT19CQVNFXzIJCTB4ZDEwMDAwMDAKKworI2RlZmluZSBBVVhfU1RBUlQJCTB4MWEwMDAwMDAgICAgICAvKiBBVVggUE9SVCAqLworI2RlZmluZSBBVVhfU0laRSAJCTB4MDEwMDAwMDAKKyNkZWZpbmUgQVVYX0JBU0UJCTB4ZDIwMDAwMDAKKworI2RlZmluZSBGTEFTSDFfU1RBUlQJCTB4MDAwMDAwMDAgICAgICAvKiBGTEFTSCBCQU5LIDEgKi8KKyNkZWZpbmUgRkxBU0gxX1NJWkUgCQkweDAxMDAwMDAwCisjZGVmaW5lIEZMQVNIMV9CQVNFCQkweGQzMDAwMDAwCisKKyNkZWZpbmUgRkxBU0gyX1NUQVJUCQkweDEwMDAwMDAwICAgICAgLyogRkxBU0ggQkFOSyAyICovCisjZGVmaW5lIEZMQVNIMl9TSVpFIAkJMHgwMTAwMDAwMAorI2RlZmluZSBGTEFTSDJfQkFTRQkJMHhkNDAwMDAwMAorCisjZGVmaW5lIElTQV9TVEFSVAkJMHgyMDAwMDAwMAkvKiBJU0EgKi8KKyNkZWZpbmUgSVNBX1NJWkUJCTB4MjAwMDAwMDAKKyNkZWZpbmUgSVNBX0JBU0UJCTB4ZTAwMDAwMDAKKworI2RlZmluZSBGTFVTSF9CQVNFX1BIWVMJCTB4NDAwMDAwMDAJLyogUk9NICovCisjZGVmaW5lIEZMVVNIX0JBU0UJCTB4ZGYwMDAwMDAKKworI2RlZmluZSBQQ0lPX0JBU0UJCUlPX0JBU0UKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1sNzIwMC9pby5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbDcyMDAvaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzAxMmEzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbDcyMDAvaW8uaApAQCAtMCwwICsxLDc2IEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtbDcyMDAvaW8uaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBTdGV2ZSBIaWxsIChzamhpbGxAY290dy5jb20pCisgKgorICogQ2hhbmdlbG9nOgorICogIDAzLTIxLTIwMDAJU0pICUNyZWF0ZWQgZnJvbSBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1uZXh1c3BjaS9pby5oCisgKiAgMDgtMzEtMjAwMAlTSkgJQWRkZWQgaW4gSU8gZnVuY3Rpb25zIG5lY2Vzc2FyeSBmb3IgbmV3IGRyaXZlcnMKKyAqLworI2lmbmRlZiBfX0FTTV9BUk1fQVJDSF9JT19ICisjZGVmaW5lIF9fQVNNX0FSTV9BUkNIX0lPX0gKKworI2luY2x1ZGUgPGFzbS9hcmNoL2hhcmR3YXJlLmg+CisKKyNkZWZpbmUgSU9fU1BBQ0VfTElNSVQgMHhmZmZmZmZmZgorCisvKgorICogVGhlcmUgYXJlIG5vdCByZWFsIElTQSBub3IgUENJIGJ1c2VzLCBzbyB3ZSBmYWtlIGl0LgorICovCisjZGVmaW5lIF9faW9fcGNpKGEpCQkoKHZvaWQgX19pb21lbSAqKShQQ0lPX0JBU0UgKyAoYSkpKQorI2RlZmluZSBfX21lbV9wY2koYSkJCShhKQorI2RlZmluZSBfX21lbV9pc2EoYSkJCShhKQorCisjZGVmaW5lIF9faW9hZGRyKHApICAgICAgICAgICAgIF9faW9fcGNpKHApCisKKy8qCisgKiBHZW5lcmljIHZpcnR1YWwgcmVhZC93cml0ZQorICovCisjZGVmaW5lIF9fYXJjaF9nZXRiKGEpICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoYSkpCisjZGVmaW5lIF9fYXJjaF9nZXRsKGEpICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAgKikoYSkpCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IF9fYXJjaF9nZXR3KHVuc2lnbmVkIGxvbmcgYSkKK3sKKwl1bnNpZ25lZCBpbnQgdmFsdWU7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oImxkciU/aCAgICAlMCwgWyUxLCAjMF0gICAgQCBnZXR3IgorCQk6ICI9JnIiICh2YWx1ZSkKKwkJOiAiciIgKGEpKTsKKwlyZXR1cm4gdmFsdWU7Cit9CisKKyNkZWZpbmUgX19hcmNoX3B1dGIodixhKSAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKShhKSA9ICh2KSkKKyNkZWZpbmUgX19hcmNoX3B1dGwodixhKSAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgaW50ICAqKShhKSA9ICh2KSkKKworc3RhdGljIGlubGluZSB2b2lkIF9fYXJjaF9wdXR3KHVuc2lnbmVkIGludCB2YWx1ZSwgdW5zaWduZWQgbG9uZyBhKQoreworICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RyJT9oICAgICUwLCBbJTEsICMwXSAgICBAIHB1dHciCisgICAgICAgICAgICAgICAgOiA6ICJyIiAodmFsdWUpLCAiciIgKGEpKTsKK30KKworLyoKKyAqIFRyYW5zbGF0ZWQgYWRkcmVzcyBJTyBmdW5jdGlvbnMKKyAqCisgKiBJTyBhZGRyZXNzIGhhcyBhbHJlYWR5IGJlZW4gdHJhbnNsYXRlZCB0byBhIHZpcnR1YWwgYWRkcmVzcworICovCisjZGVmaW5lIG91dGJfdCh2LHApCQkoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKHApID0gKHYpKQorI2RlZmluZSBpbmJfdChwKQkJKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKShwKSkKKyNkZWZpbmUgb3V0d190KHYscCkJCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKShwKSA9ICh2KSkKKyNkZWZpbmUgaW53X3QocCkJCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKShwKSkKKyNkZWZpbmUgb3V0bF90KHYscCkJCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikocCkgPSAodikpCisjZGVmaW5lIGlubF90KHApCQkoKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKHApKQorCisvKgorICogRklYTUUgLSBUaGVzZSBhcmUgdG8gYWxsb3cgZm9yIGxpbmtpbmcuIE9uIGFsbCB0aGUgb3RoZXIKKyAqICAgICAgICAgQVJNIHBsYXRmb3JtcywgdGhlIGVudGlyZSBJTyBzcGFjZSBpcyBjb250aWd1b3VzLgorICogICAgICAgICBUaGUgNzIwMCBoYXMgdGhyZWUgc2VwYXJhdGUgSU8gc3BhY2VzLiBUaGUgYmVsb3cKKyAqICAgICAgICAgbWFjcm9zIHdpbGwgZXZlbnR1YWxseSBiZWNvbWUgbW9yZSBpbnZvbHZlZC4gVXNlCisgKiAgICAgICAgIHdpdGggY2F1dGlvbiBhbmQgZG9uJ3QgYmUgc3VycHJpc2VkIGJ5IGtlcm5lbCBvb3BzZXMhISEKKyAqLworI2RlZmluZSBpbmIocCkJCSAJaW5iX3QocCkKKyNkZWZpbmUgaW53KHApCSAJCWlud190KHApCisjZGVmaW5lIGlubChwKQkgCQlpbmxfdChwKQorI2RlZmluZSBvdXRiKHYscCkJCW91dGJfdCh2LHApCisjZGVmaW5lIG91dHcodixwKQkJb3V0d190KHYscCkKKyNkZWZpbmUgb3V0bCh2LHApCQlvdXRsX3QodixwKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWw3MjAwL2lycXMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWw3MjAwL2lycXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTIwYzAxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbDcyMDAvaXJxcy5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1sNzIwMC9pcnFzLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgUm9iIFNjb3R0IChyc2NvdHRAbXRyb2IuZmRucy5uZXQpCisgKiAgICAgICAgICAgICAgICAgICAgU3RldmUgSGlsbCAoc2poaWxsQGNvdHcuY29tKQorICoKKyAqIENoYW5nZWxvZzoKKyAqICAgMDEtMDItMjAwMCBSUwlDcmVhdGUgbDcyMDAgdmVyc2lvbgorICogICAwMy0yOC0yMDAwIFNKSAlSZW1vdmVkIHVudXNlZCBpbnRlcnJ1cHQKKyAqICAgMDctMjgtMjAwMCBTSkgJQWRkZWQgcHNldWRvLWtleWJvYXJkIGludGVycnVwdAorICovCisKKy8qCisgKiBOT1RFOiBUaGUgc2Vjb25kIHRpbWVyIChUaW1lciAyKSBpcyB1c2VkIGFzIHRoZSBrZXlib2FyZAorICogICAgICAgaW50ZXJydXB0IHdoZW4gdGhlIGtleWJvYXJkIGRyaXZlciBpcyBlbmFibGVkLgorICovCisKKyNkZWZpbmUgTlJfSVJRUyAgICAgICAgICAzMgorCisjZGVmaW5lIElSUV9TVFdET0cgICAgICAgIDAgICAvKiBXYXRjaGRvZyB0aW1lciAqLworI2RlZmluZSBJUlFfUFJPRyAgICAgICAgICAxICAgLyogUHJvZ3JhbW1hYmxlIGludGVycnVwdCAqLworI2RlZmluZSBJUlFfREVCVUdfUlggICAgICAyICAgLyogQ29tbSBSeCBkZWJ1ZyAqLworI2RlZmluZSBJUlFfREVCVUdfVFggICAgICAzICAgLyogQ29tbSBUeCBkZWJ1ZyAqLworI2RlZmluZSBJUlFfR0NUQzEgICAgICAgICA0ICAgLyogVGltZXIgMSAqLworI2RlZmluZSBJUlFfR0NUQzIgICAgICAgICA1ICAgLyogVGltZXIgMiAvIEtleWJvYXJkICovCisjZGVmaW5lIElSUV9ETUEgICAgICAgICAgIDYgICAvKiBETUEgY29udHJvbGxlciAqLworI2RlZmluZSBJUlFfQ0xDRCAgICAgICAgICA3ICAgLyogQ29sb3IgTENEIGNvbnRyb2xsZXIgKi8KKyNkZWZpbmUgSVJRX1NNX1JYICAgICAgICAgOCAgIC8qIFNtYXJ0IGNhcmQgKi8KKyNkZWZpbmUgSVJRX1NNX1RYICAgICAgICAgOSAgIC8qIFNtYXJ0IGNhcnQgKi8KKyNkZWZpbmUgSVJRX1NNX1JTVCAgICAgICAxMCAgIC8qIFNtYXJ0IGNhcmQgKi8KKyNkZWZpbmUgSVJRX1NJQiAgICAgICAgICAxMSAgIC8qIFNlcmlhbCBJbnRlcmZhY2UgQnVzICovCisjZGVmaW5lIElSUV9NTUMgICAgICAgICAgMTIgICAvKiBNdWx0aU1lZGlhQ2FyZCAqLworI2RlZmluZSBJUlFfU1NQMSAgICAgICAgIDEzICAgLyogU3luY2hyb25vdXMgU2VyaWFsIFBvcnQgMSAqLworI2RlZmluZSBJUlFfU1NQMiAgICAgICAgIDE0ICAgLyogU3luY2hyb25vdXMgU2VyaWFsIFBvcnQgMSAqLworI2RlZmluZSBJUlFfU1BJICAgICAgICAgIDE1ICAgLyogU1BJIHNsYXZlICovCisjZGVmaW5lIElSUV9VQVJUXzEgICAgICAgMTYgICAvKiBVQVJUIDEgKi8KKyNkZWZpbmUgSVJRX1VBUlRfMiAgICAgICAxNyAgIC8qIFVBUlQgMiAqLworI2RlZmluZSBJUlFfSVJEQSAgICAgICAgIDE4ICAgLyogSVJEQSAqLworI2RlZmluZSBJUlFfUlRDX1RJQ0sgICAgIDE5ICAgLyogUmVhbCBUaW1lIENsb2NrIHRpY2sgKi8KKyNkZWZpbmUgSVJRX1JUQ19BTEFSTSAgICAyMCAgIC8qIFJlYWwgVGltZSBDbG9jayBhbGFybSAqLworI2RlZmluZSBJUlFfR1BJTyAgICAgICAgIDIxICAgLyogR2VuZXJhbCBQdXJwb3NlIElPICovCisjZGVmaW5lIElSUV9HUElPX0RNQSAgICAgMjIgICAvKiBHZW5lcmFsIFB1cnBvc2UgSU8sIERNQSAqLworI2RlZmluZSBJUlFfTTJNICAgICAgICAgIDIzICAgLyogTWVtb3J5IHRvIG1lbW9yeSBETUEgICovCisjZGVmaW5lIElSUV9SRVNFUlZFRCAgICAgMjQgICAvKiBSRVNFUlZFRCwgZG9uJ3QgdXNlICovCisjZGVmaW5lIElSUV9JTlRGICAgICAgICAgMjUgICAvKiBFeHRlcm5hbCBhY3RpdmUgbG93IGludGVycnVwdCAqLworI2RlZmluZSBJUlFfSU5UMCAgICAgICAgIDI2ICAgLyogRXh0ZXJuYWwgYWN0aXZlIGxvdyBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRX0lOVDEgICAgICAgICAyNyAgIC8qIEV4dGVybmFsIGFjdGl2ZSBsb3cgaW50ZXJydXB0ICovCisjZGVmaW5lIElSUV9JTlQyICAgICAgICAgMjggICAvKiBFeHRlcm5hbCBhY3RpdmUgbG93IGludGVycnVwdCAqLworI2RlZmluZSBJUlFfVUNCMTIwMCAgICAgIDI5ICAgLyogSW50ZXJydXB0IGdlbmVyYXRlZCBieSBVQ0IxMjAwKi8KKyNkZWZpbmUgSVJRX0JBVF9MTyAgICAgICAzMCAgIC8qIExvdyBiYXRlcnkgb3IgZXh0ZXJuYWwgcG93ZXIgKi8KKyNkZWZpbmUgSVJRX01FRElBX0NIRyAgICAzMSAgIC8qIE1lZGlhIGNoYW5nZSBpbnRlcnJ1cHQgKi8KKworLyoKKyAqIFRoaXMgaXMgdGhlIG9mZnNldCBvZiB0aGUgRklRICJJUlEiIG51bWJlcnMKKyAqLworI2RlZmluZSBGSVFfU1RBUlQJNjQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWw3MjAwL21lbW9yeS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbDcyMDAvbWVtb3J5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzViOTYwOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWw3MjAwL21lbW9yeS5oCkBAIC0wLDAgKzEsMjMgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1sNzIwMC9tZW1vcnkuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMCBTdGV2ZSBIaWxsIChzamhpbGxAY290dy5jb20pCisgKiBDb3B5cmlnaHQgKGMpIDIwMDAgUm9iIFNjb3R0IChyc2NvdHRAbXRyb2IuZmRucy5uZXQpCisgKgorICogQ2hhbmdlbG9nOgorICogIDAzLTEzLTIwMDAJU0pICUNyZWF0ZWQKKyAqICAwNC0xMy0yMDAwICBSUyAgICAgIENoYW5nZWQgYnVzIG1hY3JvcyBmb3IgbmV3IGFkZHIKKyAqICAwNS0wMy0yMDAwICBTSkggICAgIFJlbW92ZWQgYnVzIG1hY3JvcyBhbmQgZml4ZWQgdmlydF90b19waHlzIG1hY3JvCisgKi8KKyNpZm5kZWYgX19BU01fQVJDSF9NRU1PUllfSAorI2RlZmluZSBfX0FTTV9BUkNIX01FTU9SWV9ICisKKy8qCisgKiBQaHlzaWNhbCBEUkFNIG9mZnNldCBvbiB0aGUgTDcyMDAgU0RCLgorICovCisjZGVmaW5lIFBIWVNfT0ZGU0VUICAgICAoMHhmMDAwMDAwMFVMKQorCisjZGVmaW5lIF9fdmlydF90b19idXMoeCkgX192aXJ0X3RvX3BoeXMoeCkKKyNkZWZpbmUgX19idXNfdG9fdmlydCh4KSBfX3BoeXNfdG9fdmlydCh4KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWw3MjAwL3BhcmFtLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1sNzIwMC9wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5NjJhMTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1sNzIwMC9wYXJhbS5oCkBAIC0wLDAgKzEsMTkgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtbDcyMDAvcGFyYW0uaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBSb2IgU2NvdHQgKHJzY290dEBtdHJvYi5mZG5zLm5ldCkKKyAqICAgICAgICAgICAgICAgICAgICBTdGV2ZSBIaWxsIChzamhpbGxAY290dy5jb20pCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBoYXJkd2FyZSBkZWZpbml0aW9ucyBmb3IgdGhlCisgKiBMaW5rVXAgU3lzdGVtcyBMNzIwMCBTT0MgZGV2ZWxvcG1lbnQgYm9hcmQuCisgKgorICogQ2hhbmdlbG9nOgorICogICAwNC0yMS0yMDAwIFJTICAgICAgQ3JlYXRlZCBMNzIwMCB2ZXJzaW9uCisgKiAgIDA0LTI1LTIwMDAgU0pIICAgICBDbGVhbmVkIHVwIGZpbGUKKyAqICAgMDUtMDMtMjAwMCBTSkggICAgIENoYW5nZSBjb21tZW50cyBhbmQgcmF0ZQorICovCisKKy8qCisgKiBTZWUgJ3RpbWUuaCcgZm9yIGhvdyB0aGUgUlRDIEhaIHJhdGUgaXMgc2V0CisgKi8KKyNkZWZpbmUgSFogMTI4CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1sNzIwMC9wbXBjb24uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWw3MjAwL3BtcGNvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczMDA1NmMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1sNzIwMC9wbXBjb24uaApAQCAtMCwwICsxLDQ2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtbDcyMDAvcG1wY29uLmgKKyAqCisgKiAgIFJlZ2lzdGVycyBhbmQgIGhlbHBlciBmdW5jdGlvbnMgZm9yIHRoZSBMNzIwMCBMaW5rLVVwIFN5c3RlbXMKKyAqICAgREMvREMgY29udmVydGVyIHJlZ2lzdGVyLgorICoKKyAqICAgKEMpIENvcHlyaWdodCAyMDAwLCBTIEEgTWNDb25uZWxsICAoc2FtY2Nvbm5AY290dy5jb20pCisgKgorICogIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZS4gU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3IKKyAqICBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgUE1QQ09OX09GRiAweDAwMDA2MDAwICAvKiBPZmZzZXQgZnJvbSBJT19TVEFSVF8yLiAqLworCisvKiBJT19TVEFSVF8yIGFuZCBJT19CQVNFXzIgYXJlIGRlZmluZWQgaW4gaGFyZHdhcmUuaCAqLworCisjZGVmaW5lIFBNUENPTl9TVEFSVCAoSU9fU1RBUlRfMiArIFBNUENPTl9PRkYpICAvKiBQaHlzaWNhbCBhZGRyZXNzIG9mIHJlZy4gKi8KKyNkZWZpbmUgUE1QQ09OX0JBU0UgIChJT19CQVNFXzIgICsgUE1QQ09OX09GRikgIC8qIFZpcnR1YWwgYWRkcmVzcyBvZiByZWcuICovCisKKworI2RlZmluZSBQTVBDT04gKCoodm9sYXRpbGUgdW5zaWduZWQgaW50ICopKFBNUENPTl9CQVNFKSkKKworI2RlZmluZSBQV00yXzUwQ1lDTEUgMHg4MDAKKyNkZWZpbmUgQ09OVFJBU1QgICAgIDB4OQorCisjZGVmaW5lIFBXTTFIIChDT05UUkFTVCkKKyNkZWZpbmUgUFdNMUwgKENPTlRSQVNUIDw8IDQpCisKKyNkZWZpbmUgUE1QQ09OX1ZBTFVFICAoUFdNMl81MENZQ0xFIHwgUFdNMUwgfCBQV00xSCkgCisJCisvKiBQTVBDT04gPSAweDgxMTsgICAvLyB0b28gbGlnaHQgYW5kIGZ1enp5CisgKiBQTVBDT04gPSAweDg0NDsgICAKKyAqIFBNUENPTiA9IDB4ODY2OyAgIC8vIGJldHRlciBjb2xvciBwb29yIGRlcHRoCisgKiBQTVBDT04gPSAweDg4ODsgICAvLyBEYXJrZXIgYnV0IGJldHRlciBkZXB0aCAKKyAqIFBNUENPTiA9IDB4ODk5OyAgIC8vIERhcmtlciBldmVuIGJldHRlciBkZXB0aAorICogUE1QQ09OID0gMHg4YWE7ICAgLy8gdG9vIGRhcmsgZXZlbiBiZXR0ZXIgZGVwdGgKKyAqIFBNUENPTiA9IDBYOGNjOyAgIC8vIFdheSB0b28gZGFyaworICovCisKKy8qIEFzIENPTlRSQVNUIHZhbHVlIGluY3JlYXNlcyB0aGUgZ3JlYXRlciB0aGUgZGVwdGggcGVyY2VwdGlvbiBhbmQKKyAqIHRoZSBkYXJrZXIgdGhlIGNvbG9ycy4KKyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtbDcyMDAvcG11LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1sNzIwMC9wbXUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2ZhZWE3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbDcyMDAvcG11LmgKQEAgLTAsMCArMSwxMjUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1sNzIwMC9wbXUuaAorICoKKyAqICAgUmVnaXN0ZXJzIGFuZCAgaGVscGVyIGZ1bmN0aW9ucyBmb3IgdGhlIEw3MjAwIExpbmstVXAgU3lzdGVtcworICogICBQb3dlciBNYW5hZ2VtZW50IFVuaXQgKFBNVSkuCisgKgorICogICAoQykgQ29weXJpZ2h0IDIwMDAsIFMgQSBNY0Nvbm5lbGwgIChzYW1jY29ubkBjb3R3LmNvbSkKKyAqCisgKiAgVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlLiBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlIGZvcgorICogIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBQTVVfT0ZGICAgMHgwMDA1MDAwMCAgLyogT2Zmc2V0IGZyb20gSU9fU1RBUlQgdG8gdGhlIFBNVSByZWdpc3RlcnMuICovCisKKy8qIElPX1NUQVJUIGFuZCBJT19CQVNFIGFyZSBkZWZpbmVkIGluIGhhcmR3YXJlLmggKi8KKworI2RlZmluZSBQTVVfU1RBUlQgKElPX1NUQVJUICsgUE1VX09GRikgIC8qIFBoeXNpY2FsIGFkZHIuIG9mIHRoZSBQTVUgcmVnLiAqLworI2RlZmluZSBQTVVfQkFTRSAgKElPX0JBU0UgICsgUE1VX09GRikgIC8qIFZpcnR1YWwgYWRkci4gb2YgdGhlIFBNVSByZWcuICovCisKKworLyogRGVmaW5lIHRoZSBQTVUgcmVnaXN0ZXJzIGZvciB1c2UgYnkgZGV2aWNlIGRyaXZlcnMgYW5kIHRoZSBrZXJuZWwuICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICAgdW5zaWduZWQgaW50IENVUlJFTlQ7ICAvKiBDdXJyZW50IGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgKi8KKyAgICAgdW5zaWduZWQgaW50IE5FWFQ7ICAgICAvKiBOZXh0IGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgKi8KKyAgICAgdW5zaWduZWQgaW50IHJlc2VydmVkOworICAgICB1bnNpZ25lZCBpbnQgUlVOOyAgICAgIC8qIFJ1biBjb25maWd1cmF0aW9uIHJlZ2lzdGVyICovCisgICAgIHVuc2lnbmVkIGludCBDT01NOyAgICAgLyogQ29uZmlndXJhdGlvbiBjb21tYW5kIHJlZ2lzdGVyICovCisgICAgIHVuc2lnbmVkIGludCBTRFJBTTsgICAgLyogU0RSQU0gY29uZmlndXJhdGlvbiBieXBhc3MgcmVnaXN0ZXIgKi8KK30gcG11X2ludGVyZmFjZTsKKworI2RlZmluZSBQTVUgKCh2b2xhdGlsZSBwbXVfaW50ZXJmYWNlICopKFBNVV9CQVNFKSkKKworCisvKiBNYWNybydzIGZvciByZWFkaW5nIHRoZSBjb21tb24gcmVnaXN0ZXIgZmllbGRzLiAqLworCisjZGVmaW5lIEdFVF9UUkFOU09QKHJlZykgICgocmVnID4+IDI1KSAmIDB4MDMpIC8qIEJpdHMgMjYtMjUgKi8KKyNkZWZpbmUgR0VUX09TQ0VOKHJlZykgICAgKChyZWcgPj4gMTYpICYgMHgwMSkKKyNkZWZpbmUgR0VUX09TQ01VWChyZWcpICAgKChyZWcgPj4gMTUpICYgMHgwMSkKKyNkZWZpbmUgR0VUX1BMTE1VTChyZWcpICAgKChyZWcgPj4gIDkpICYgMHgzZikgLyogQml0cyAxNC05ICovCisjZGVmaW5lIEdFVF9QTExFTihyZWcpICAgICgocmVnID4+ICA4KSAmIDB4MDEpCisjZGVmaW5lIEdFVF9QTExNVVgocmVnKSAgICgocmVnID4+ICA3KSAmIDB4MDEpCisjZGVmaW5lIEdFVF9CQ0xLX0RJVihyZWcpICgocmVnID4+ICAzKSAmIDB4MDMpIC8qIEJpdHMgNC0zICovCisjZGVmaW5lIEdFVF9TRFJCX1NFTChyZWcpICgocmVnID4+ICAyKSAmIDB4MDEpCisjZGVmaW5lIEdFVF9TRFJGX1NFTChyZWcpICgocmVnID4+ICAxKSAmIDB4MDEpCisjZGVmaW5lIEdFVF9GQVNUQlVTKHJlZykgIChyZWcgJiAweDEpCisKKy8qIENGR19ORVhUIHJlZ2lzdGVyICovCisKKyNkZWZpbmUgQ0ZHX05FWFRfQ0xPQ0tSRUNPVkVSWSAoKFBNVS0+TkVYVCA+PiAxOCkgJiAweDdmKSAgIC8qIEJpdHMgMjQtMTggKi8KKyNkZWZpbmUgQ0ZHX05FWFRfSU5UUkVUICAgICAgICAoKFBNVS0+TkVYVCA+PiAxNykgJiAweDAxKQorI2RlZmluZSBDRkdfTkVYVF9TRFJfU1RPUCAgICAgICgoUE1VLT5ORVhUID4+ICA2KSAmIDB4MDEpCisjZGVmaW5lIENGR19ORVhUX1NZU0NMS0VOICAgICAgKChQTVUtPk5FWFQgPj4gIDUpICYgMHgwMSkKKworLyogVXNlZnVsIGZpZWxkIHZhbHVlcyB0aGF0IGNhbiBiZSB1c2VkIHRvIGNvbnN0cnVjdCB0aGUKKyAqIENGR19ORVhUIGFuZCBDRkdfUlVOIHJlZ2lzdGVycy4KKyAqLworCisjZGVmaW5lIFRSQU5TT1BfTk9QICAgICAgMDw8MjUgIC8qIE5PQ0hBTkdFX05PU1RBTEwgKi8KKyNkZWZpbmUgTk9DSEFOR0VfU1RBTEwgICAxPDwyNQorI2RlZmluZSBDSEFOR0VfTk9TVEFMTCAgIDI8PDI1CisjZGVmaW5lIENIQU5HRV9TVEFMTCAgICAgMzw8MjUKKworI2RlZmluZSBJTlRSRVQgICAgICAgICAgIDE8PDE3CisjZGVmaW5lIE9TQ0VOICAgICAgICAgICAgMTw8MTYKKyNkZWZpbmUgT1NDTVVYICAgICAgICAgICAxPDwxNQorCisvKiBQTEwgZnJlcXVlbmNpZXMgKi8KKworI2RlZmluZSBQTExNVUxfMCAgICAgICAgIDA8PDkgICAgICAgICAvKiAgMy42ODY0IE1IeiAqLworI2RlZmluZSBQTExNVUxfMSAgICAgICAgIDE8PDkgICAgICAgICAvKiAgPz8/Pz8/IE1IeiAqLworI2RlZmluZSBQTExNVUxfNSAgICAgICAgIDU8PDkgICAgICAgICAvKiAgMTguNDMyIE1IeiAqLworI2RlZmluZSBQTExNVUxfMTAgICAgICAgMTA8PDkgICAgICAgICAvKiAgMzYuODY0IE1IeiAqLworI2RlZmluZSBQTExNVUxfMTggICAgICAgMTg8PDkgICAgICAgICAvKiAgPz8/Pz8/IE1IeiAqLworI2RlZmluZSBQTExNVUxfMjAgICAgICAgMjA8PDkgICAgICAgICAvKiAgNzMuNzI4IE1IeiAqLworI2RlZmluZSBQTExNVUxfMzIgICAgICAgMzI8PDkgICAgICAgICAvKiAgPz8/Pz8/IE1IeiAqLworI2RlZmluZSBQTExNVUxfMzUgICAgICAgMzU8PDkgICAgICAgICAvKiAxMjkuMDI0IE1IeiAqLworI2RlZmluZSBQTExNVUxfMzYgICAgICAgMzY8PDkgICAgICAgICAvKiAgPz8/Pz8/IE1IeiAqLworI2RlZmluZSBQTExNVUxfMzkgICAgICAgMzk8PDkgICAgICAgICAvKiAgPz8/Pz8/IE1IeiAqLworI2RlZmluZSBQTExNVUxfNDAgICAgICAgNDA8PDkgICAgICAgICAvKiAxNDcuNDU2IE1IeiAqLworCisvKiBDbG9jayByZWNvdmVyeSB0aW1lcyAqLworCisjZGVmaW5lIENSQ0xPQ0tfMSAgICAgICAgMTw8MTgKKyNkZWZpbmUgQ1JDTE9DS18yICAgICAgICAyPDwxOAorI2RlZmluZSBDUkNMT0NLXzQgICAgICAgIDQ8PDE4CisjZGVmaW5lIENSQ0xPQ0tfOCAgICAgICAgODw8MTgKKyNkZWZpbmUgQ1JDTE9DS18xNiAgICAgIDE2PDwxOAorI2RlZmluZSBDUkNMT0NLXzMyICAgICAgMzI8PDE4CisjZGVmaW5lIENSQ0xPQ0tfNjMgICAgICA2Mzw8MTgKKyNkZWZpbmUgQ1JDTE9DS18xMjcgICAgMTI3PDwxOAorCisjZGVmaW5lIFBMTEVOICAgICAgICAgICAgMTw8OAorI2RlZmluZSBQTExNVVggICAgICAgICAgIDE8PDcKKyNkZWZpbmUgU0RSX1NUT1AgICAgICAgICAxPDw2CisjZGVmaW5lIFNZU0NMS0VOICAgICAgICAgMTw8NQorCisjZGVmaW5lIEJDTEtfRElWXzQgICAgICAgMjw8MworI2RlZmluZSBCQ0xLX0RJVl8yICAgICAgIDE8PDMKKyNkZWZpbmUgQkNMS19ESVZfMSAgICAgICAwPDwzCisKKyNkZWZpbmUgU0RSQl9TRUwgICAgICAgICAxPDwyCisjZGVmaW5lIFNEUkZfU0VMICAgICAgICAgMTw8MQorI2RlZmluZSBGQVNUQlVTICAgICAgICAgIDE8PDAKKworCisvKiBDRkdfU0RSQU0gKi8KKworI2RlZmluZSBTRFJSRUZGUSAgICAgICAgIDE8PDAgIC8qIE9ubHkgaWYgU0RSU1RPUFJRIGlzIG5vdCBzZXQuICovCisjZGVmaW5lIFNEUlJFRkFDSyAgICAgICAgMTw8MSAgLyogUmVhZC1vbmx5ICovCisjZGVmaW5lIFNEUlNUT1BSUSAgICAgICAgMTw8MiAgLyogT25seSBpZiBTRFJSRUZGUSBpcyBub3Qgc2V0LiAqLworI2RlZmluZSBTRFJTVE9QQUNLICAgICAgIDE8PDMgIC8qIFJlYWQtb25seSAqLworI2RlZmluZSBQSUNFTiAgICAgICAgICAgIDE8PDQgIC8qIEVuYWJsZSBDby1wcm9jZXNvciAqLworI2RlZmluZSBQSUNURVNUICAgICAgICAgIDE8PDUKKworI2RlZmluZSBHRVRfU0RSUkVGRlEgICAgKChQTVUtPlNEUkFNID4+IDApICYgMHgwMSkKKyNkZWZpbmUgR0VUX1NEUlJFRkFDSyAgICgoUE1VLT5TRFJBTSA+PiAxKSAmIDB4MDEpIC8qIFJlYWQtb25seSAqLworI2RlZmluZSBHRVRfU0RSU1RPUFJRICAgKChQTVUtPlNEUkFNID4+IDIpICYgMHgwMSkKKyNkZWZpbmUgR0VUX1NEUlNUT1BBQ0sgICgoUE1VLT5TRFJBTSA+PiAzKSAmIDB4MDEpIC8qIFJlYWQtb25seSAqLworI2RlZmluZSBHRVRfUElDRU4gICAgICAgKChQTVUtPlNEUkFNID4+IDQpICYgMHgwMSkKKyNkZWZpbmUgR0VUX1BJQ1RFU1QgICAgICgoUE1VLT5TRFJBTSA+PiA1KSAmIDB4MDEpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1sNzIwMC9zZXJpYWwuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWw3MjAwL3NlcmlhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlZmI4YjcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1sNzIwMC9zZXJpYWwuaApAQCAtMCwwICsxLDM3IEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtbDcyMDAvc2VyaWFsLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDAgUm9iIFNjb3R0IChyc2NvdHRAbXRyb2IuZmRucy5uZXQpCisgKiAgICAgICAgICAgICAgICAgICAgU3RldmUgSGlsbCAoc2poaWxsQGNvdHcuY29tKQorICoKKyAqIENoYW5nZWxvZzoKKyAqICAwMy0yMC0yMDAwICBTSkggICAgIENyZWF0ZWQKKyAqICAwMy0yNi0yMDAwICBTSkggICAgIEFkZGVkIGZsYWdzIGZvciBzZXJpYWwgcG9ydHMKKyAqICAwMy0yNy0yMDAwICBTSkggICAgIENvcnJlY3RlZCBCQVNFX0JBVUQgdmFsdWUKKyAqICAwNC0xNC0yMDAwICBSUyAgICAgIE1hZGUgcmVnaXN0ZXIgYWRkciBkZXBlbmRlbnQgb24gSU9fQkFTRQorICogIDA1LTAzLTIwMDAgIFNKSCAgICAgQ29tcGxldGUgcmV3cml0ZQorICogIDA1LTA5LTIwMDAJU0pICVN0cmlwcGVkIG91dCBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgc2VyaWFsIHN0dWZmCisgKiAgICAgICAgICAgICAgICAgICAgICBhbmQgcGxhY2VkIGl0IGluIGEgc2VwYXJhdGUgZmlsZQorICogIDA3LTI4LTIwMDAJU0pICU1vdmVkIGJhc2UgYmF1ZCByYXRlIHZhcmlhYmxlCisgKi8KKyNpZm5kZWYgX19BU01fQVJDSF9TRVJJQUxfSAorI2RlZmluZSBfX0FTTV9BUkNIX1NFUklBTF9ICisKKy8qCisgKiBUaGlzIGFzc3VtZXMgeW91IGhhdmUgYSAzLjY4NjQgTUh6IGNsb2NrIGZvciB5b3VyIFVBUlQuCisgKi8KKyNkZWZpbmUgQkFTRV9CQVVECTM2ODY0MDAKKworLyoKKyAqIFN0YW5kYXJkIENPTSBmbGFncworICovCisjZGVmaW5lIFNURF9DT01fRkxBR1MgKEFTWU5DX0JPT1RfQVVUT0NPTkYgfCBBU1lOQ19TS0lQX1RFU1QpCisKKyNkZWZpbmUgU1REX1NFUklBTF9QT1JUX0RFRk5TCQlcCisJLyogTUFHSUMgVUFSVCBDTEsgICBQT1JUICAgICAgIElSUSAgICAgRkxBR1MgKi8JCQlcCisJeyAwLCBCQVNFX0JBVUQsIFVBUlQxX0JBU0UsIElSUV9VQVJUXzEsIFNURF9DT01fRkxBR1MgfSwgIC8qIHR0eUxVMCAqLyBcCisJeyAwLCBCQVNFX0JBVUQsIFVBUlQyX0JBU0UsIElSUV9VQVJUXzIsIFNURF9DT01fRkxBR1MgfSwgIC8qIHR0eUxVMSAqLyBcCisKKyNkZWZpbmUgRVhUUkFfU0VSSUFMX1BPUlRfREVGTlMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1sNzIwMC9zZXJpYWxfbDcyMDAuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWw3MjAwL3NlcmlhbF9sNzIwMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzOGM1OTUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1sNzIwMC9zZXJpYWxfbDcyMDAuaApAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWw3MjAwL3NlcmlhbF9sNzIwMC5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAwIFN0ZXZlbiBIaWxsIChzamhpbGxAY290dy5jb20pCisgKgorICogQ2hhbmdlbG9nOgorICogIDA1LTA5LTIwMDAJU0pICUNyZWF0ZWQKKyAqLworI2lmbmRlZiBfX0FTTV9BUkNIX1NFUklBTF9MNzIwMF9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfU0VSSUFMX0w3MjAwX0gKKworI2luY2x1ZGUgPGFzbS9hcmNoL21lbW9yeS5oPgorCisvKgorICogVGhpcyBhc3N1bWVzIHlvdSBoYXZlIGEgMy42ODY0IE1IeiBjbG9jayBmb3IgeW91ciBVQVJULgorICovCisjZGVmaW5lIEJBU0VfQkFVRCAzNjg2NDAwCisKKy8qCisgKiBVQVJUIGJhc2UgcmVnaXN0ZXIgYWRkcmVzc2VzCisgKi8KKyNkZWZpbmUgVUFSVDFfQkFTRQkoSU9fQkFTRSArIDB4MDAwNDQwMDApCisjZGVmaW5lIFVBUlQyX0JBU0UJKElPX0JBU0UgKyAweDAwMDQ1MDAwKQorCisvKgorICogVUFSVCByZWdpc3RlciBvZmZzZXRzCisgKi8KKyNkZWZpbmUgVUFSVERSCQkJMHgwMAkvKiBUeC9SeCBkYXRhICovCisjZGVmaW5lIFJYU1RBVAkJCTB4MDQJLyogUnggc3RhdHVzICovCisjZGVmaW5lIEhfVUJSTENSCQkweDA4CS8qIG1vZGUgcmVnaXN0ZXIgaGlnaCAqLworI2RlZmluZSBNX1VCUkxDUgkJMHgwQwkvKiBtb2RlIHJlZyBtaWQgKE1TQiBvZiBidWFkKSovCisjZGVmaW5lIExfVUJSTENSCQkweDEwCS8qIG1vZGUgcmVnIGxvdyAoTFNCIG9mIGJhdWQpKi8KKyNkZWZpbmUgVUFSVENPTgkJCTB4MTQJLyogY29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBVQVJURkxHCQkJMHgxOAkvKiBmbGFnIHJlZ2lzdGVyICovCisjZGVmaW5lIFVBUlRJTlRTVEFUCQkweDFDCS8qIEZJRk8gSVJRIHN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBVQVJUSU5UTUFTSwkJMHgyMAkvKiBGSUZPIElSUSBtYXNrIHJlZ2lzdGVyICovCisKKy8qCisgKiBVQVJUIGJhdWQgcmF0ZSByZWdpc3RlciB2YWx1ZXMKKyAqLworI2RlZmluZSBCUl8xMTAJCQkweDgyNworI2RlZmluZSBCUl8xMjAwCQkJMHgwNmUKKyNkZWZpbmUgQlJfMjQwMAkJCTB4MDVmCisjZGVmaW5lIEJSXzQ4MDAJCQkweDAyZgorI2RlZmluZSBCUl85NjAwCQkJMHgwMTcKKyNkZWZpbmUgQlJfMTQ0MDAJCTB4MDBmCisjZGVmaW5lIEJSXzE5MjAwCQkweDAwYgorI2RlZmluZSBCUl8zODQwMAkJMHgwMDUKKyNkZWZpbmUgQlJfNTc2MDAJCTB4MDAzCisjZGVmaW5lIEJSXzc2ODAwIAkJMHgwMDIKKyNkZWZpbmUgQlJfMTE1MjAwCQkweDAwMQorCisvKgorICogUmVjZWl2ZXIgc3RhdHVzIHJlZ2lzdGVyIChSWFNUQVQpIG1hc2sgdmFsdWVzCisgKi8KKyNkZWZpbmUgUlhTVEFUX05PX0VSUgkJMHgwMAkvKiBObyBlcnJvciAqLworI2RlZmluZSBSWFNUQVRfRlJNX0VSUgkJMHgwMQkvKiBGcmFtaW5nIGVycm9yICovCisjZGVmaW5lIFJYU1RBVF9QQVJfRVJSCQkweDAyCS8qIFBhcml0eSBlcnJvciAqLworI2RlZmluZSBSWFNUQVRfT1ZSX0VSUgkJMHgwNAkvKiBPdmVycnVuIGVycm9yICovCisKKy8qCisgKiBIaWdoIGJ5dGUgb2YgVUFSVCBiaXQgcmF0ZSBhbmQgbGluZSBjb250cm9sIHJlZ2lzdGVyIChIX1VCUkxDUikgdmFsdWVzCisgKi8KKyNkZWZpbmUgVUJSTENSX0JSSwkJMHgwMQkvKiBnZW5lcmF0ZSBicmVhayBvbiB0eCAqLworI2RlZmluZSBVQlJMQ1JfUEVOCQkweDAyCS8qIGVuYWJsZSBwYXJpdHkgKi8KKyNkZWZpbmUgVUJSTENSX1BESVMJCTB4MDAJLyogZGlzYWJsZSBwYXJpdHkgKi8KKyNkZWZpbmUgVUJSTENSX0VWRU4JCTB4MDQJLyogMT0gZXZlbiBwYXJpdHksMCA9IG9kZCBwYXJpdHkgKi8KKyNkZWZpbmUgVUJSTENSX1NUUDIJCTB4MDgJLyogdHJhbnNtaXQgMiBzdG9wIGJpdHMgKi8KKyNkZWZpbmUgVUJSTENSX0ZJRk8JCTB4MTAJLyogZW5hYmxlIEZJRk8gKi8KKyNkZWZpbmUgVUJSTENSX0xFTjUJCTB4NjAJLyogd29yZCBsZW5ndGg1ICovCisjZGVmaW5lIFVCUkxDUl9MRU42CQkweDQwCS8qIHdvcmQgbGVuZ3RoNiAqLworI2RlZmluZSBVQlJMQ1JfTEVONwkJMHgyMAkvKiB3b3JkIGxlbmd0aDcgKi8KKyNkZWZpbmUgVUJSTENSX0xFTjgJCTB4MDAJLyogd29yZCBsZW5ndGg4ICovCisKKy8qCisgKiBVQVJUIGNvbnRyb2wgcmVnaXN0ZXIgKFVBUlRDT04pIHZhbHVlcworICovCisjZGVmaW5lIFVBUlRDT05fVUFSVEVOCQkweDAxCS8qIEVuYWJsZSBVQVJUICovCisjZGVmaW5lIFVBUlRDT05fRE1BT05FUlIJMHgwOAkvKiBNYXNrIFJ4RG1hUnEgd2hlbiBlcnJvcnMgb2NjdXIgKi8KKworLyoKKyAqIFVBUlQgZmxhZyByZWdpc3RlciAoVUFSVEZMRykgbWFzayB2YWx1ZXMKKyAqLworI2RlZmluZSBVQVJURkxHX1VUWEZGCQkweDIwCS8qIFRyYW5zbWl0IEZJRk8gZnVsbCAqLworI2RlZmluZSBVQVJURkxHX1VSWEZFCQkweDEwCS8qIFJlY2VpdmVyIEZJRk8gZW1wdHkgKi8KKyNkZWZpbmUgVUFSVEZMR19VQlVTWQkJMHgwOAkvKiBUcmFuc21pdHRlciBidXN5ICovCisjZGVmaW5lIFVBUlRGTEdfRENECQkweDA0CS8qIERhdGEgY2FycmllciBkZXRlY3QgKi8KKyNkZWZpbmUgVUFSVEZMR19EU1IJCTB4MDIJLyogRGF0YSBzZXQgcmVhZHkgKi8KKyNkZWZpbmUgVUFSVEZMR19DVFMJCTB4MDEJLyogQ2xlYXIgdG8gc2VuZCAqLworCisvKgorICogVUFSVCBpbnRlcnJ1cHQgc3RhdHVzL2NsZWFyIHJlZ2lzdGVycyAoVUFSVElOVFNUQVQvQ0xSKSB2YWx1ZXMKKyAqLworI2RlZmluZSBVQVJUX1RYSU5UCQkweDAxCS8qIFRYIGludGVycnVwdCAqLworI2RlZmluZSBVQVJUX1JYSU5UCQkweDAyCS8qIFJYIGludGVycnVwdCAqLworI2RlZmluZSBVQVJUX1JYRVJSSU5UCQkweDA0CS8qIFJYIGVycm9yIGludGVycnVwdCAqLworI2RlZmluZSBVQVJUX01TSU5UCQkweDA4CS8qIE1vZGVtIFN0YXR1cyBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgVUFSVF9VRElOVAkJMHgxMAkvKiBVQVJUIERpc2FibGVkIGludGVycnVwdCAqLworI2RlZmluZSBVQVJUX0FMTElSUVMJCTB4MWYJLyogQWxsIGludGVycnVwdHMgKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1sNzIwMC9zaWIuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWw3MjAwL3NpYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmNDM2NGUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1sNzIwMC9zaWIuaApAQCAtMCwwICsxLDExOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWw3MjAwL3NpYi5oCisgKgorICogIFJlZ2lzdGVycyBhbmQgaGVscGVyIGZ1bmN0aW9ucyBmb3IgdGhlIFNlcmlhbCBJbnRlcmZhY2UgQnVzLgorICoKKyAqICAoQykgQ29weXJpZ2h0IDIwMDAsIFMgQSBNY0Nvbm5lbGwgIChzYW1jY29ubkBjb3R3LmNvbSkKKyAqCisgKiAgVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlLiBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlIGZvcgorICogIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBTSUJfT0ZGICAgMHgwMDA0MDAwMCAgLyogT2Zmc2V0IGZyb20gSU9fU1RBUlQgdG8gdGhlIFNJQiByZWcncy4gKi8KKworLyogSU9fU1RBUlQgYW5kIElPX0JBU0UgYXJlIGRlZmluZWQgaW4gaGFyZHdhcmUuaCAqLworCisjZGVmaW5lIFNJQl9TVEFSVCAoSU9fU1RBUlQgKyBTSUJfT0ZGKSAvKiBQaHlzaWNhbCBhZGRyIG9mIHRoZSBTSUIgcmVnLiAqLworI2RlZmluZSBTSUJfQkFTRSAgKElPX0JBU0UgICsgU0lCX09GRikgLyogVmlydHVhbCBhZGRyIG9mIHRoZSBTSUIgcmVnLiAgKi8KKworLyogT2Zmc2V0cyBmcm9tIHRoZSBzdGFydCBvZiB0aGUgU0lCIGZvciBhbGwgdGhlIHJlZ2lzdGVycy4gKi8KKworLyogRGVmaW5lIHRoZSBTSUIgcmVnaXN0ZXJzIGZvciB1c2UgYnkgZGV2aWNlIGRyaXZlcnMgYW5kIHRoZSBrZXJuZWwuICovCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgIHVuc2lnbmVkIGludCBNQ0NSOyAgICAvKiBTSUIgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgT2Zmc2V0OiAweDAwICovCisgICAgIHVuc2lnbmVkIGludCBSRVMxOyAgICAvKiBSZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgT2Zmc2V0OiAweDA0ICovCisgICAgIHVuc2lnbmVkIGludCBNQ0RSMDsgICAvKiBTSUIgRGF0YSBSZWdpc3RlciAwICAgICAgICAgICAgT2Zmc2V0OiAweDA4ICovCisgICAgIHVuc2lnbmVkIGludCBNQ0RSMTsgICAvKiBTSUIgRGF0YSBSZWdpc3RlciAxICAgICAgICAgICAgT2Zmc2V0OiAweDBjICovCisgICAgIHVuc2lnbmVkIGludCBNQ0RSMjsgICAvKiBTSUIgRGF0YSBSZWdpc3RlciAyIChVQ0IxeDAwKSAgT2Zmc2V0OiAweDEwICovCisgICAgIHVuc2lnbmVkIGludCBSRVMyOyAgICAvKiBSZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgT2Zmc2V0OiAweDE0ICovCisgICAgIHVuc2lnbmVkIGludCBNQ1NSOyAgICAvKiBTSUIgU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgT2Zmc2V0OiAweDE4ICovCit9IFNJQl9JbnRlcmZhY2U7CisKKyNkZWZpbmUgU0lCICgodm9sYXRpbGUgU0lCX0ludGVyZmFjZSAqKSAoU0lCX0JBU0UpKQorCisvKiBNQ0NSICovCisKKyNkZWZpbmUgSU5URVJOQUxfRlJFUSAgIDkyMTYwMDAgIC8qIEhlcnR6ICovCisjZGVmaW5lIEFVRElPX0ZSRVEgICAgICAgICA1MDAwICAvKiBIZXJ0eiAqLworI2RlZmluZSBURUxFQ09NX0ZSRVEgICAgICAgNTAwMCAgLyogSGVydHogKi8KKworI2RlZmluZSBBVURJT19ESVZJREUgICAgKElOVEVSTkFMX0ZSRVEgLyAoMzIgKiBBVURJT19GUkVRKSkKKyNkZWZpbmUgVEVMRUNPTV9ESVZJREUgIChJTlRFUk5BTF9GUkVRIC8gKDMyICogVEVMRUNPTV9GUkVRKSkKKworI2RlZmluZSBNQ0NSX0FTRDU3ICAgICAgQVVESU9fRElWSURFCisjZGVmaW5lIE1DQ1JfVFNENTcgICAgICAoVEVMRUNPTV9ESVZJREUgPDwgOCkKKyNkZWZpbmUgTUNDUl9NQ0UgICAgICAgICgxIDw8IDE2KSAgICAgICAgICAgICAvKiBTSUIgZW5hYmxlICovCisjZGVmaW5lIE1DQ1JfRUNTICAgICAgICAoMSA8PCAxNykgICAgICAgICAgICAgLyogRXh0ZXJuYWwgQ2xvY2sgU2VsZWN0ICovCisjZGVmaW5lIE1DQ1JfQURNICAgICAgICAoMSA8PCAxOCkgICAgICAgICAgICAgLyogQS9EIERhdGEgU2FtcGxpbmcgKi8KKyNkZWZpbmUgTUNDUl9QTUMgICAgICAgICgxIDw8IDI2KSAgICAgICAgICAgICAvKiBQSU4gTXVsdGlwbGV4ZXIgQ29udHJvbCAqLworCisKKyNkZWZpbmUgR0VUX0FTRCAoKFNJQi0+TUNDUiA+PiAgMCkgJiAweDNmKSAvKiBBdWRpbyBTYW1wbGUgUmF0ZSBEaXYuICovCisjZGVmaW5lIEdFVF9UU0QgKChTSUItPk1DQ1IgPj4gIDgpICYgMHgzZikgLyogVGVsY29tIFNhbXBsZSBSYXRlIERpdi4gKi8KKyNkZWZpbmUgR0VUX01DRSAoKFNJQi0+TUNDUiA+PiAxNikgJiAweDAxKSAvKiBTSUIgRW5hYmxlICovCisjZGVmaW5lIEdFVF9FQ1MgKChTSUItPk1DQ1IgPj4gMTcpICYgMHgwMSkgLyogRXh0ZXJuYWwgQ2xvY2sgU2VsZWN0ICovCisjZGVmaW5lIEdFVF9BRE0gKChTSUItPk1DQ1IgPj4gMTgpICYgMHgwMSkgLyogQS9EIERhdGEgU2FtcGxpbmcgTW9kZSAqLworI2RlZmluZSBHRVRfVFRNICgoU0lCLT5NQ0NSID4+IDE5KSAmIDB4MDEpIC8qIFRlbGNvIFRyYW5zLiBGSUZPIEkgbWFzayAqLyAKKyNkZWZpbmUgR0VUX1RSTSAoKFNJQi0+TUNDUiA+PiAyMCkgJiAweDAxKSAvKiBUZWxjbyBSZWN2LiBGSUZPIEkgbWFzayAqLworI2RlZmluZSBHRVRfQVRNICgoU0lCLT5NQ0NSID4+IDIxKSAmIDB4MDEpIC8qIEF1ZGlvIFRyYW5zLiBGSUZPIEkgbWFzayAqLyAKKyNkZWZpbmUgR0VUX0FSTSAoKFNJQi0+TUNDUiA+PiAyMikgJiAweDAxKSAvKiBBdWRpbyBSZWN2LiBGSUZPIEkgbWFzayAqLworI2RlZmluZSBHRVRfTEJNICgoU0lCLT5NQ0NSID4+IDIzKSAmIDB4MDEpIC8qIExvb3AgQmFjayBNb2RlICovCisjZGVmaW5lIEdFVF9FQ1AgKChTSUItPk1DQ1IgPj4gMjQpICYgMHgwMykgLyogRXh0ZXJuLiBDbGNrIFByZXNjYWxlIHNlbCAqLworI2RlZmluZSBHRVRfUE1DICgoU0lCLT5NQ0NSID4+IDI2KSAmIDB4MDEpIC8qIFBJTiBNdWx0aXBsZXhlciBDb250cm9sICovCisjZGVmaW5lIEdFVF9FUkkgKChTSUItPk1DQ1IgPj4gMjcpICYgMHgwMSkgLyogRXh0ZXJuYWwgUmVhZCBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgR0VUX0VXSSAoKFNJQi0+TUNDUiA+PiAyOCkgJiAweDAxKSAvKiBFeHRlcm5hbCBXcml0ZSBJbnRlcnJ1cHQgKi8KKworLyogTUNEUjAgKi8KKworI2RlZmluZSBBVURJT19SRUNWICAgICAoKFNJQi0+TUNEUjAgPj4gNCkgJiAweGZmZikKKyNkZWZpbmUgQVVESU9fV1JJVEUodikgKChTSUItPk1DRFIwID0gKHYgJiAweGZmZikgPDwgNCkpCisKKy8qIE1DRFIxICovCisKKyNkZWZpbmUgVEVMRUNPTV9SRUNWICAgICAoKFNJQi0+TUNEUjEgPj4gMikgJiAwMzJmZmYpCisjZGVmaW5lIFRFTEVDT01fV1JJVEUodikgKChTSUItPk1DRFIxID0gKHYgJiAweDNmZmYpIDw8IDIpKQorCisKKy8qIE1DU1IgKi8KKworI2RlZmluZSBNQ1NSX0FUVSAoMSA8PCA0KSAgLyogQXVkaW8gVHJhbnNtaXQgRklGTyBVbmRlcnJ1biAqLworI2RlZmluZSBNQ1NSX0FSTyAoMSA8PCA1KSAgLyogQXVkaW8gUmVjZWl2ZSAgRklGTyBVbmRlcnJ1biAqLworI2RlZmluZSBNQ1NSX1RUVSAoMSA8PCA2KSAgLyogVEVMRUNPTSBUcmFuc21pdCBGSUZPIFVuZGVycnVuICovCisjZGVmaW5lIE1DU1JfVFJPICgxIDw8IDcpICAvKiBURUxFQ09NIFJlY2VpdmUgIEZJRk8gVW5kZXJydW4gKi8KKworI2RlZmluZSBNQ1NSX0NMRUFSX1VOREVSVU5fQklUUyAoTUNTUl9BVFUgfCBNQ1NSX0FSTyB8IE1DU1JfVFRVIHwgTUNTUl9UUk8pCisKKworI2RlZmluZSBHRVRfQVRTICgoU0lCLT5NQ1NSID4+ICAwKSAmIDB4MDEpIC8qIEF1ZGlvIFRyYW5zbWl0IEZJRk8gU2VydmljZSBSZXEqLworI2RlZmluZSBHRVRfQVJTICgoU0lCLT5NQ1NSID4+ICAxKSAmIDB4MDEpIC8qIEF1ZGlvIFJlY3YgRklGTyBTZXJ2aWNlIFJlcXVlc3QqLworI2RlZmluZSBHRVRfVFRTICgoU0lCLT5NQ1NSID4+ICAyKSAmIDB4MDEpIC8qIFRFTEVDT00gVHJhbnNtaXQgRklGTyAgRmxhZyAqLworI2RlZmluZSBHRVRfVFJTICgoU0lCLT5NQ1NSID4+ICAzKSAmIDB4MDEpIC8qIFRFTEVDT00gUmVjdiBGSUZPIFNlcnZpY2UgUmVxLiAqLworI2RlZmluZSBHRVRfQVRVICgoU0lCLT5NQ1NSID4+ICA0KSAmIDB4MDEpIC8qIEF1ZGlvIFRyYW5zbWl0IEZJRk8gVW5kZXJydW4gKi8KKyNkZWZpbmUgR0VUX0FSTyAoKFNJQi0+TUNTUiA+PiAgNSkgJiAweDAxKSAvKiBBdWRpbyBSZWNlaXZlICBGSUZPIFVuZGVycnVuICovCisjZGVmaW5lIEdFVF9UVFUgKChTSUItPk1DU1IgPj4gIDYpICYgMHgwMSkgLyogVEVMRUNPTSBUcmFuc21pdCBGSUZPIFVuZGVycnVuICovCisjZGVmaW5lIEdFVF9UUk8gKChTSUItPk1DU1IgPj4gIDcpICYgMHgwMSkgLyogVEVMRUNPTSBSZWNlaXZlICBGSUZPIFVuZGVycnVuICovCisjZGVmaW5lIEdFVF9BTkYgKChTSUItPk1DU1IgPj4gIDgpICYgMHgwMSkgLyogQXVkaW8gVHJhbnNtaXQgRklGTyBub3QgZnVsbCAqLworI2RlZmluZSBHRVRfQU5FICgoU0lCLT5NQ1NSID4+ICA5KSAmIDB4MDEpIC8qIEF1ZGlvIFJlY2VpdmUgRklGTyBub3QgZW1wdHkgKi8KKyNkZWZpbmUgR0VUX1RORiAoKFNJQi0+TUNTUiA+PiAxMCkgJiAweDAxKSAvKiBUZWxlY29tIFRyYW5zbWl0IEZJRk8gbm90IGZ1bGwgKi8KKyNkZWZpbmUgR0VUX1RORSAoKFNJQi0+TUNTUiA+PiAxMSkgJiAweDAxKSAvKiBUZWxlY29tIFJlY2VpdmUgRklGTyBub3QgZW1wdHkgKi8KKyNkZWZpbmUgR0VUX0NXQyAoKFNJQi0+TUNTUiA+PiAxMikgJiAweDAxKSAvKiBDb2RlYyBXcml0ZSBDb21wbGV0ZSAqLworI2RlZmluZSBHRVRfQ1JDICgoU0lCLT5NQ1NSID4+IDEzKSAmIDB4MDEpIC8qIENvZGVjIFJlYWQgQ29tcGxldGUgKi8KKyNkZWZpbmUgR0VUX0FDRSAoKFNJQi0+TUNTUiA+PiAxNCkgJiAweDAxKSAvKiBBdWRpbyBDb2RlYyBFbmFibGVkICovCisjZGVmaW5lIEdFVF9UQ0UgKChTSUItPk1DU1IgPj4gMTUpICYgMHgwMSkgLyogVGVsZWNvbSBDb2RlYyBFbmFibGVkICovCisKKy8qIE1DRFIyICovCisKKyNkZWZpbmUgTUNEUjJfclcgICAgICAgICAgICAgICAoMSA8PCAxNikKKworI2RlZmluZSBXUklURV9NQ0RSMihyZWcsIGRhdGEpIChTSUItPk1DRFIyID0oKHJlZzw8MTcpfE1DRFIyX3JXfChkYXRhJjB4ZmZmZikpKQorI2RlZmluZSBNQ0RSMl9XUklURV9DT01QTEVURSAgIEdFVF9DV0MKKworI2RlZmluZSBJTklUSUFURV9NQ0RSMl9SRUFEKHJlZykgKFNJQi0+TUNEUjIgPSAocmVnIDw8IDE3KSkKKyNkZWZpbmUgTUNEUjJfUkVBRF9DT01QTEVURSAgICAgIEdFVF9DUkMKKyNkZWZpbmUgTUNEUjJfUkVBRCAgICAgICAgICAgICAgIChTSUItPk1DRFIyICYgMHhmZmZmKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtbDcyMDAvc3lzLWNsb2NrLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1sNzIwMC9zeXMtY2xvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzFjNzc0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbDcyMDAvc3lzLWNsb2NrLmgKQEAgLTAsMCArMSw2NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWw3MjAwL3N5cy1jbG9jay5oCisgKgorICogICBSZWdpc3RlcnMgYW5kICBoZWxwZXIgZnVuY3Rpb25zIGZvciB0aGUgTDcyMDAgTGluay1VcCBTeXN0ZW1zCisgKiAgIFN5c3RlbSBjbG9ja3MuCisgKgorICogICAoQykgQ29weXJpZ2h0IDIwMDAsIFMgQSBNY0Nvbm5lbGwgIChzYW1jY29ubkBjb3R3LmNvbSkKKyAqCisgKiAgVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlLiBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlIGZvcgorICogIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBTWVNfQ0xPQ0tfT0ZGICAgMHgwMDA1MDAzMCAgLyogT2Zmc2V0IGZyb20gSU9fU1RBUlQuICovCisKKy8qIElPX1NUQVJUIGFuZCBJT19CQVNFIGFyZSBkZWZpbmVkIGluIGhhcmR3YXJlLmggKi8KKworI2RlZmluZSBTWVNfQ0xPQ0tfU1RBUlQgKElPX1NUQVJUICsgU1lTX0NMQ09LX09GRikgIC8qIFBoeXNpY2FsIGFkZHJlc3MgKi8KKyNkZWZpbmUgU1lTX0NMT0NLX0JBU0UgIChJT19CQVNFICArIFNZU19DTE9DS19PRkYpICAvKiBWaXJ0dWFsIGFkZHJlc3MgICovCisKKy8qIERlZmluZSB0aGUgaW50ZXJmYWNlIHRvIHRoZSBTWVNfQ0xPQ0sgKi8KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAgdW5zaWduZWQgaW50IEVOQUJMRTsKKyAgICAgdW5zaWduZWQgaW50IEVTWU5DOworICAgICB1bnNpZ25lZCBpbnQgU0VMRUNUOworfSBzeXNfY2xvY2tfaW50ZXJmYWNlOworCisjZGVmaW5lIFNZU19DTE9DSyAgICgodm9sYXRpbGUgc3lzX2Nsb2NrX2ludGVyZmFjZSAqKShTWVNfQ0xPQ0tfQkFTRSkpCisKKy8vI2RlZmluZSBDTE9DS19FTiAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKFBNVV9CQVNFK0NMT0NLX0VOX09GRikpCisvLyNkZWZpbmUgQ0xPQ0tfRVNZTkMgKCoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShQTVVfQkFTRStDTE9DS19FU1lOQ19PRkYpKQorLy8jZGVmaW5lIENMT0NLX1NFTCAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoUE1VX0JBU0UrQ0xPQ0tfU0VMX09GRikpCisKKy8qIFNZU19DTE9DSyAtPiBFTkFCTEUgKi8KKworI2RlZmluZSBTWU5fRU4gICAgICAgICAgMTw8MAorI2RlZmluZSBCMThNX0VOICAgICAgICAgMTw8MQorI2RlZmluZSBDTEszTTZfRU4gICAgICAgMTw8MgorI2RlZmluZSBCVUFSVF9FTiAgICAgICAgMTw8MworI2RlZmluZSBDTEsxOE1VX0VOICAgICAgMTw8NAorI2RlZmluZSBGSVJfRU4gICAgICAgICAgMTw8NQorI2RlZmluZSBNSVJOX0VOICAgICAgICAgMTw8NgorI2RlZmluZSBVQVJUTV9FTiAgICAgICAgMTw8NworI2RlZmluZSBTSUJBRENfRU4gICAgICAgMTw8OAorI2RlZmluZSBBTFREX0VOICAgICAgICAgMTw8OQorI2RlZmluZSBDTENMS19FTiAgICAgICAgMTw8MTAKKworLyogU1lTX0NMT0NLIC0+IFNFTEVDVCAqLworCisjZGVmaW5lIENMSzE4TV9ESVYgICAgICAxPDwwCisjZGVmaW5lIE1JUl9TRUwgICAgICAgICAxPDwxCisjZGVmaW5lIFNTUF9TRUwgICAgICAgICAxPDw0CisjZGVmaW5lIE1NX0RJViAgICAgICAgICAxPDw1CisjZGVmaW5lIE1NX1NFTCAgICAgICAgICAxPDw2CisjZGVmaW5lIEFEQ19TRUxfMiAgICAgICAwPDw3CisjZGVmaW5lIEFEQ19TRUxfNCAgICAgICAxPDw3CisjZGVmaW5lIEFEQ19TRUxfOCAgICAgICAzPDw3CisjZGVmaW5lIEFEQ19TRUxfMTYgICAgICA3PDw3CisjZGVmaW5lIEFEQ19TRUxfMzIgICAgICAweDBmPDw3CisjZGVmaW5lIEFEQ19TRUxfNjQgICAgICAweDFmPDw3CisjZGVmaW5lIEFEQ19TRUxfMTI4ICAgICAweDNmPDw3CisjZGVmaW5lIEFMVERfU0VMICAgICAgICAxPDwxMwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtbDcyMDAvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1sNzIwMC9zeXN0ZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjRmZjI5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbDcyMDAvc3lzdGVtLmgKQEAgLTAsMCArMSwyNyBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWw3MjAwL3N5c3RlbS5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAwIFN0ZXZlIEhpbGwgKHNqaGlsbEBjb3R3LmNvbSkKKyAqCisgKiBDaGFuZ2Vsb2cKKyAqICAwMy0yMS0yMDAwICBTSkgJQ3JlYXRlZAorICogIDA0LTI2LTIwMDAgIFNKSAlGaXhlZCBmdW5jdGlvbnMKKyAqICAwNS0wMy0yMDAwICBTSkgJUmVtb3ZlZCB1c2FnZSBvZiBvYnNvbGV0ZSAnaW9tZC5oJworICogIDA1LTMxLTIwMDAgIFNKSAlQcm9wZXJseSBpbXBsZW1lbnRlZCAnYXJjaF9pZGxlJworICovCisjaWZuZGVmIF9fQVNNX0FSQ0hfU1lTVEVNX0gKKyNkZWZpbmUgX19BU01fQVJDSF9TWVNURU1fSAorCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9pZGxlKHZvaWQpCit7CisJKih1bnNpZ25lZCBsb25nICopKElPX0JBU0UgKyAweDUwMDA0KSA9IDE7CS8qIGlkbGUgbW9kZSAqLworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUpCit7CisJaWYgKG1vZGUgPT0gJ3MnKSB7CisJCWNwdV9yZXNldCgwKTsKKwl9Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtbDcyMDAvdGltZS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbDcyMDAvdGltZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiOThiNTMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1sNzIwMC90aW1lLmgKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWw3MjAwL3RpbWUuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBSb2IgU2NvdHQgKHJzY290dEBtdHJvYi5mZG5zLm5ldCkKKyAqICAgICAgICAgICAgICAgICAgICBTdGV2ZSBIaWxsIChzamhpbGxAY290dy5jb20pCisgKgorICogQ2hhbmdlbG9nOgorICogICAwMS0wMi0yMDAwCVJTCUNyZWF0ZWQgbDcyMDAgdmVyc2lvbiwgZGVyaXZlZCBmcm9tIHJwYyBjb2RlCisgKiAgIDA1LTAzLTIwMDAJU0pICUNvbXBsZXRlIHJld3JpdGUKKyAqLworI2lmbmRlZiBfQVNNX0FSQ0hfVElNRV9ICisjZGVmaW5lIF9BU01fQVJDSF9USU1FX0gKKworI2luY2x1ZGUgPGFzbS9hcmNoL2lycXMuaD4KKworLyoKKyAqIFJUQyBiYXNlIHJlZ2lzdGVyIGFkZHJlc3MKKyAqLworI2RlZmluZSBSVENfQkFTRQkoSU9fQkFTRV8yICsgMHgyMDAwKQorCisvKgorICogUlRDIHJlZ2lzdGVycworICovCisjZGVmaW5lIFJUQ19SVENEUgkoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIChSVENfQkFTRSArIDB4MDAwKSkKKyNkZWZpbmUgUlRDX1JUQ01SCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgKFJUQ19CQVNFICsgMHgwMDQpKQorI2RlZmluZSBSVENfUlRDUwkoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIChSVENfQkFTRSArIDB4MDA4KSkKKyNkZWZpbmUgUlRDX1JUQ0MJKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoUlRDX0JBU0UgKyAweDAwOCkpCisjZGVmaW5lIFJUQ19SVENEVgkoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIChSVENfQkFTRSArIDB4MDBjKSkKKyNkZWZpbmUgUlRDX1JUQ0NSCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgKFJUQ19CQVNFICsgMHgwMTApKQorCisvKgorICogUlRDQ1IgcmVnaXN0ZXIgdmFsdWVzCisgKi8KKyNkZWZpbmUgUlRDX1JBVEVfMzIJMHgwMCAgICAgIC8qIDMyIEh6IHRpY2sgKi8KKyNkZWZpbmUgUlRDX1JBVEVfNjQJMHgxMCAgICAgIC8qIDY0IEh6IHRpY2sgKi8KKyNkZWZpbmUgUlRDX1JBVEVfMTI4CTB4MjAgICAgICAvKiAxMjggSHogdGljayAqLworI2RlZmluZSBSVENfUkFURV8yNTYJMHgzMCAgICAgIC8qIDI1NiBIeiB0aWNrICovCisjZGVmaW5lIFJUQ19FTl9BTEFSTQkweDAxICAgICAgLyogRW5hYmxlIGFsYXJtICovCisjZGVmaW5lIFJUQ19FTl9USUMJMHgwNCAgICAgIC8qIEVuYWJsZSBjb3VudGVyICovCisjZGVmaW5lIFJUQ19FTl9TVFdET0cJMHgwOCAgICAgIC8qIEVuYWJsZSB3YXRjaGRvZyAqLworCisvKgorICogSGFuZGxlciBmb3IgUlRDIHRpbWVyIGludGVycnVwdAorICovCitzdGF0aWMgaXJxcmV0dXJuX3QKK3RpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWRvX3RpbWVyKHJlZ3MpOworI2lmbmRlZiBDT05GSUdfU01QCisJdXBkYXRlX3Byb2Nlc3NfdGltZXModXNlcl9tb2RlKHJlZ3MpKTsKKyNlbmRpZgorCWRvX3Byb2ZpbGUocmVncyk7CisJUlRDX1JUQ0MgPSAwOwkJCQkvKiBDbGVhciBpbnRlcnJ1cHQgKi8KKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyoKKyAqIFNldCB1cCBSVEMgdGltZXIgaW50ZXJydXB0LCBhbmQgcmV0dXJuIHRoZSBjdXJyZW50IHRpbWUgaW4gc2Vjb25kcy4KKyAqLwordm9pZCBfX2luaXQgdGltZV9pbml0KHZvaWQpCit7CisJUlRDX1JUQ0MgPSAwOwkJCQkvKiBDbGVhciBpbnRlcnJ1cHQgKi8KKworCXRpbWVyX2lycS5oYW5kbGVyID0gdGltZXJfaW50ZXJydXB0OworCisJc2V0dXBfaXJxKElSUV9SVENfVElDSywgJnRpbWVyX2lycSk7CisKKwlSVENfUlRDQ1IgPSBSVENfUkFURV8xMjggfCBSVENfRU5fVElDOwkvKiBTZXQgcmF0ZSBhbmQgZW5hYmxlIHRpbWVyICovCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtbDcyMDAvdGltZXguaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWw3MjAwL3RpbWV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2MzMjAyNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWw3MjAwL3RpbWV4LmgKQEAgLTAsMCArMSwyMCBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWw3MjAwL3RpbWV4LmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgUm9iIFNjb3R0IChyc2NvdHRAbXRyb2IuZmRucy5uZXQpCisgKiAgICAgICAgICAgICAgICAgICAgU3RldmUgSGlsbCAoc2poaWxsQGNvdHcuY29tKQorICoKKyAqIDA0LTIxLTIwMDAgIFJTIENyZWF0ZWQgZmlsZQorICogMDUtMDMtMjAwMCBTSkggVGljayByYXRlIHdhcyB3cm9uZworICoKKyAqLworCisvKgorICogT24gdGhlIEFSTTcyMFQsIGNsb2NrIHRpY2tzIGFyZSBzZXQgdG8gMTI4IEh6LgorICoKKyAqIE5PVEU6IFRoZSBhY3R1YWwgUlRDIHZhbHVlIGlzIHNldCBpbiAndGltZS5oJyB3aGljaAorICogICAgICAgbXVzdCBiZSBjaGFuZ2VkIHdoZW4gY2hvb3NpbmcgYSBkaWZmZXJlbnQgdGljaworICogICAgICAgcmF0ZS4gVGhlIHZhbHVlIG9mIEhaIGluICdwYXJhbS5oJyBtdXN0IGFsc28KKyAqICAgICAgIGJlIGNoYW5nZWQgdG8gbWF0Y2ggYmVsb3cuCisgKi8KKyNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFCQkxMjgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWw3MjAwL3VuY29tcHJlc3MuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWw3MjAwL3VuY29tcHJlc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2FhMmI1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbDcyMDAvdW5jb21wcmVzcy5oCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1sNzIwMC91bmNvbXByZXNzLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgU3RldmUgSGlsbCAoc2poaWxsQGNvdHcuY29tKQorICoKKyAqIENoYW5nZWxvZzoKKyAqICAwNS0wMS0yMDAwCVNKSAlDcmVhdGVkCisgKiAgMDUtMTMtMjAwMAlTSkgJRmlsbGVkIGluIGZ1bmN0aW9uIGJvZGllcworICogIDA3LTI2LTIwMDAJU0pICVJlbW92ZWQgaGFyZCBjb2RlZCBidWFkIHJhdGUKKyAqLworCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisKKyNkZWZpbmUgSU9fVUFSVCAgSU9fU1RBUlQgKyAweDAwMDQ0MDAwCisKKyNkZWZpbmUgX19yYXdfd3JpdGViKHYscCkJKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKShwKSA9ICh2KSkKKyNkZWZpbmUgX19yYXdfcmVhZGIocCkJCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikocCkpCisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgcHV0YyhjaGFyIGMpCit7CisJd2hpbGUoX19yYXdfcmVhZGIoSU9fVUFSVCArIDB4MTgpICYgMHgyMCB8fAorCQlfX3Jhd19yZWFkYihJT19VQVJUICsgMHgxOCkgJiAweDA4KTsKKwlfX3Jhd193cml0ZWIoYywgSU9fVUFSVCArIDB4MDApOworfQorCitzdGF0aWMgdm9pZCBwdXRzdHIoY29uc3QgY2hhciAqcykKK3sKKwl3aGlsZSAoKnMpIHsKKwkJaWYgKCpzID09IDEwKSB7CQkJLyogSWYgYSBMRiwgYWRkIENSICovCisJCQlwdXRjKDEwKTsKKwkJCXB1dGMoMTMpOworCQl9CisJCXB1dGMoKihzKyspKTsKKwl9Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgYXJjaF9kZWNvbXBfc2V0dXAodm9pZCkKK3sKKwlfX3Jhd193cml0ZWIoMHgwMCwgSU9fVUFSVCArIDB4MDgpOwkvKiBTZXQgSFNCICovCisJX19yYXdfd3JpdGViKDB4MDAsIElPX1VBUlQgKyAweDIwKTsJLyogRGlzYWJsZSBJUlFzICovCisJX19yYXdfd3JpdGViKDB4MDEsIElPX1VBUlQgKyAweDE0KTsJLyogRW5hYmxlIFVBUlQgKi8KK30KKworI2RlZmluZSBhcmNoX2RlY29tcF93ZG9nKCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWw3MjAwL3ZtYWxsb2MuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWw3MjAwL3ZtYWxsb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGVhZWJlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbDcyMDAvdm1hbGxvYy5oCkBAIC0wLDAgKzEsMTUgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1sNzIwMC92bWFsbG9jLmgKKyAqLworCisvKgorICogSnVzdCBhbnkgYXJiaXRyYXJ5IG9mZnNldCB0byB0aGUgc3RhcnQgb2YgdGhlIHZtYWxsb2MgVk0gYXJlYTogdGhlCisgKiBjdXJyZW50IDhNQiB2YWx1ZSBqdXN0IG1lYW5zIHRoYXQgdGhlcmUgd2lsbCBiZSBhIDhNQiAiaG9sZSIgYWZ0ZXIgdGhlCisgKiBwaHlzaWNhbCBtZW1vcnkgdW50aWwgdGhlIGtlcm5lbCB2aXJ0dWFsIG1lbW9yeSBzdGFydHMuICBUaGF0IG1lYW5zIHRoYXQKKyAqIGFueSBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyB3aWxsIGhvcGVmdWxseSBiZSBjYXVnaHQuCisgKiBUaGUgdm1hbGxvYygpIHJvdXRpbmVzIGxlYXZlcyBhIGhvbGUgb2YgNGtCIGJldHdlZW4gZWFjaCB2bWFsbG9jZWQKKyAqIGFyZWEgZm9yIHRoZSBzYW1lIHJlYXNvbi4gOykKKyAqLworI2RlZmluZSBWTUFMTE9DX09GRlNFVAkgICg4KjEwMjQqMTAyNCkKKyNkZWZpbmUgVk1BTExPQ19TVEFSVAkgICgoKHVuc2lnbmVkIGxvbmcpaGlnaF9tZW1vcnkgKyBWTUFMTE9DX09GRlNFVCkgJiB+KFZNQUxMT0NfT0ZGU0VULTEpKQorI2RlZmluZSBWTUFMTE9DX0VORCAgICAgICAoUEFHRV9PRkZTRVQgKyAweDEwMDAwMDAwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtbGg3YTQweC9jb25zdGFudHMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvY29uc3RhbnRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJjMWNiOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvY29uc3RhbnRzLmgKQEAgLTAsMCArMSw4OCBAQAorLyogaW5jbHVkZS9hc20tYXJtL2FyY2gtbGg3YTQweC9jb25zdGFudHMuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQgQ29hc3RhbCBFbnZpcm9ubWVudGFsIFN5c3RlbXMKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQgTG9naWMgUHJvZHVjdCBEZXZlbG9wbWVudAorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9DT05TVEFOVFNfSAorI2RlZmluZSBfX0FTTV9BUkNIX0NPTlNUQU5UU19ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworLyogQWRkcmVzc2luZyBjb25zdGFudHMgKi8KKworCS8qIFNvQyBDUFUgSU8gYWRkcmVzc2luZyAqLworI2RlZmluZSBJT19QSFlTCQkJKDB4ODAwMDAwMDApCisjZGVmaW5lIElPX1ZJUlQJCQkoMHhmODAwMDAwMCkKKyNkZWZpbmUgSU9fU0laRQkJCSgweDAwMDBCMDAwKQorCisjaWZkZWYgQ09ORklHX01BQ0hfS0VWN0E0MDAKKyMgZGVmaW5lIENQTERfUEhZUwkJKDB4MjAwMDAwMDApCisjIGRlZmluZSBDUExEX1ZJUlQJCSgweGYyMDAwMDAwKQorIyBkZWZpbmUgQ1BMRF9TSVpFCQlQQUdFX1NJWkUKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoQ09ORklHX01BQ0hfTFBEN0E0MDApIHx8IGRlZmluZWQgKENPTkZJR19NQUNIX0xQRDdBNDA0KQorCisjIGRlZmluZSBJT0JBUlJJRVJfUEhZUwkJMHhjMDAwMDAwMCAvKiBTdGFydCBvZiBTRFJBTSAqLworLyojIGRlZmluZSBJT0JBUlJJRVJfUEhZUwkJMHgwMDAwMDAwMCAqLyAvKiBTdGFydCBvZiBmbGFzaCAqLworIyBkZWZpbmUgSU9CQVJSSUVSX1ZJUlQJCTB4ZjAwMDAwMDAKKyMgZGVmaW5lIElPQkFSUklFUl9TSVpFCQlQQUdFX1NJWkUKKworIyBkZWZpbmUgQ0ZfUEhZUwkJMHg2MDIwMDAwMAorIyBkZWZpbmUgQ0ZfVklSVAkJMHhmNjAyMDAwMAorIyBkZWZpbmUgQ0ZfU0laRQkJKDgqMTAyNCkKKworCS8qIFRoZSBJTyBtYXBwaW5ncyBmb3IgdGhlIExQRCBDUExEIGFyZSwgdW5mb3J0dW5hdGVseSwgc3BhcnNlLiAgKi8KKyMgZGVmaW5lIENQTERYX1BIWVMoeCkJCSgweDcwMDAwMDAwIHwgKCh4KSA8PCAyMCkpCisjIGRlZmluZSBDUExEWF9WSVJUKHgpCQkoMHhmNzAwMDAwMCB8ICgoeCkgPDwgMTYpKQorIyBkZWZpbmUgQ1BMRDAwX1BIWVMJCUNQTERYX1BIWVMgKDB4MDApIC8qIFdpcmVkIExBTiAqLworIyBkZWZpbmUgQ1BMRDAwX1ZJUlQJCUNQTERYX1ZJUlQgKDB4MDApCisjIGRlZmluZSBDUExEMDBfU0laRQkJUEFHRV9TSVpFCisjIGRlZmluZSBDUExEMDJfUEhZUwkJQ1BMRFhfUEhZUyAoMHgwMikKKyMgZGVmaW5lIENQTEQwMl9WSVJUCQlDUExEWF9WSVJUICgweDAyKQorIyBkZWZpbmUgQ1BMRDAyX1NJWkUJCVBBR0VfU0laRQorIyBkZWZpbmUgQ1BMRDA2X1BIWVMJCUNQTERYX1BIWVMgKDB4MDYpCisjIGRlZmluZSBDUExEMDZfVklSVAkJQ1BMRFhfVklSVCAoMHgwNikKKyMgZGVmaW5lIENQTEQwNl9TSVpFCQlQQUdFX1NJWkUKKyMgZGVmaW5lIENQTEQwOF9QSFlTCQlDUExEWF9QSFlTICgweDA4KQorIyBkZWZpbmUgQ1BMRDA4X1ZJUlQJCUNQTERYX1ZJUlQgKDB4MDgpCisjIGRlZmluZSBDUExEMDhfU0laRQkJUEFHRV9TSVpFCisjIGRlZmluZSBDUExEMENfUEhZUwkJQ1BMRFhfUEhZUyAoMHgwYykKKyMgZGVmaW5lIENQTEQwQ19WSVJUCQlDUExEWF9WSVJUICgweDBjKQorIyBkZWZpbmUgQ1BMRDBDX1NJWkUJCVBBR0VfU0laRQorIyBkZWZpbmUgQ1BMRDBFX1BIWVMJCUNQTERYX1BIWVMgKDB4MGUpCisjIGRlZmluZSBDUExEMEVfVklSVAkJQ1BMRFhfVklSVCAoMHgwZSkKKyMgZGVmaW5lIENQTEQwRV9TSVpFCQlQQUdFX1NJWkUKKyMgZGVmaW5lIENQTEQxMF9QSFlTCQlDUExEWF9QSFlTICgweDEwKQorIyBkZWZpbmUgQ1BMRDEwX1ZJUlQJCUNQTERYX1ZJUlQgKDB4MTApCisjIGRlZmluZSBDUExEMTBfU0laRQkJUEFHRV9TSVpFCisjIGRlZmluZSBDUExEMTJfUEhZUwkJQ1BMRFhfUEhZUyAoMHgxMikKKyMgZGVmaW5lIENQTEQxMl9WSVJUCQlDUExEWF9WSVJUICgweDEyKQorIyBkZWZpbmUgQ1BMRDEyX1NJWkUJCVBBR0VfU0laRQorIyBkZWZpbmUgQ1BMRDE0X1BIWVMJCUNQTERYX1BIWVMgKDB4MTQpCisjIGRlZmluZSBDUExEMTRfVklSVAkJQ1BMRFhfVklSVCAoMHgxNCkKKyMgZGVmaW5lIENQTEQxNF9TSVpFCQlQQUdFX1NJWkUKKyMgZGVmaW5lIENQTEQxNl9QSFlTCQlDUExEWF9QSFlTICgweDE2KQorIyBkZWZpbmUgQ1BMRDE2X1ZJUlQJCUNQTERYX1ZJUlQgKDB4MTYpCisjIGRlZmluZSBDUExEMTZfU0laRQkJUEFHRV9TSVpFCisjIGRlZmluZSBDUExEMThfUEhZUwkJQ1BMRFhfUEhZUyAoMHgxOCkKKyMgZGVmaW5lIENQTEQxOF9WSVJUCQlDUExEWF9WSVJUICgweDE4KQorIyBkZWZpbmUgQ1BMRDE4X1NJWkUJCVBBR0VfU0laRQorIyBkZWZpbmUgQ1BMRDFBX1BIWVMJCUNQTERYX1BIWVMgKDB4MWEpCisjIGRlZmluZSBDUExEMUFfVklSVAkJQ1BMRFhfVklSVCAoMHgxYSkKKyMgZGVmaW5lIENQTEQxQV9TSVpFCQlQQUdFX1NJWkUKKyNlbmRpZgorCisJLyogVGltaW5nIGNvbnN0YW50cyAqLworCisjZGVmaW5lCVhUQUxfSU4JCQkxNDc0NTYwMAkvKiAxNC43NDU2IE1IeiBjcnlzdGFsICovCisjZGVmaW5lIFBMTF9DTE9DSwkJKFhUQUxfSU4gKiAyMSkJLyogMzA5IE1IeiBQTEwgY2xvY2sgKi8KKyNkZWZpbmUgTUFYX0hDTEtfS0haCQkxMDAwMDAJCS8qIEhDTEsgbWF4IGxpbWl0IH4xMDBNSHogKi8KKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfQ09OU1RBTlRTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvZGVidWctbWFjcm8uUyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvZGVidWctbWFjcm8uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjFkY2Q2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbGg3YTQweC9kZWJ1Zy1tYWNyby5TCkBAIC0wLDAgKzEsMzkgQEAKKy8qIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvZGVidWctbWFjcm8uUworICoKKyAqIERlYnVnZ2luZyBtYWNybyBpbmNsdWRlIGhlYWRlcgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTQtMTk5OSBSdXNzZWxsIEtpbmcKKyAqICBNb3ZlZCBmcm9tIGxpbnV4L2FyY2gvYXJtL2tlcm5lbC9kZWJ1Zy5TIGJ5IEJlbiBEb29rcworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorKi8KKworCUAgSXQgaXMgbm90IGtub3duIGlmIHRoaXMgd2lsbCBiZSBhcHByb3ByaWF0ZSBmb3IgZXZlcnkgNDB4CisJQCBib2FyZC4KKworCQkubWFjcm8gIGFkZHJ1YXJ0LHJ4CisJCW1yYyAgICAgcDE1LCAwLCBccngsIGMxLCBjMAorCQl0c3QgICAgIFxyeCwgIzEgICAgICAgICAgICAgICAgIEAgTU1VIGVuYWJsZWQ/CisJCW1vdiAgICAgXHJ4LCAjMHgwMDAwMDcwMCAgICAgICAgQCBvZmZzZXQgZnJvbSBiYXNlCisJCW9ycmVxICAgXHJ4LCBccngsICMweDgwMDAwMDAwICAgQCBwaHlzaWNhbCBiYXNlCisJCW9ycm5lICAgXHJ4LCBccngsICMweGY4MDAwMDAwICAgQCB2aXJ0dWFsIGJhc2UKKwkJLmVuZG0KKworCQkubWFjcm8gIHNlbmR1YXJ0LHJkLHJ4CisJCXN0cmIgICAgXHJkLCBbXHJ4XSAgICAgICAgICAgICAgQCBEQVRBCisJCS5lbmRtCisKKwkJLm1hY3JvICBidXN5dWFydCxyZCxyeCAgICAgICAgICBAIHNwaW4gd2hpbGUgYnVzeQorMTAwMToJCWxkciAgICAgXHJkLCBbXHJ4LCAjMHgxMF0gICAgICAgQCBTVEFUVVMKKwkJdHN0ICAgICBccmQsICMxIDw8IDMgICAgICAgICAgICBAIEJVU1kgKFRYIEZJRk8gbm90IGVtcHR5KQorCQlibmUgICAgIDEwMDFiICAgICAgICAgICAgICAgICAgIEAgeWVzLCBzcGluCisJCS5lbmRtCisKKwkJLm1hY3JvICB3YWl0dWFydCxyZCxyeCAgICAgICAgICBAIHdhaXQgZm9yIFR4IEZJRk8gcm9vbQorMTAwMToJCWxkcmIgICAgXHJkLCBbXHJ4LCAjMHgxMF0gICAgICAgQCBTVEFUVVMKKwkJdHN0ICAgICBccmQsICMxIDw8IDUgICAgICAgICAgICBAIFRYRkYgKFRYIEZJRk8gZnVsbCkKKwkJYm5lICAgICAxMDAxYiAgICAgICAgICAgICAgICAgICBAIHllcywgc3BpbgorCQkuZW5kbQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtbGg3YTQweC9kbWEuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc5N2YwMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvZG1hLmgKQEAgLTAsMCArMSwxNyBAQAorLyogaW5jbHVkZS9hc20tYXJtL2FyY2gtbGg3YTQweC9kbWEuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMgQ29hc3RhbCBFbnZpcm9ubWVudGFsIFN5c3RlbXMKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfRE1BX0gKKyNkZWZpbmUgX19BU01fQVJDSF9ETUFfSAorCisjZGVmaW5lIE1BWF9ETUFfQUREUkVTUwkJMHhmZmZmZmZmZgorI2RlZmluZSBNQVhfRE1BX0NIQU5ORUxTCTAgLyogQWxsIERNQSBpcyBpbnRlcm5hbCB0byBDUFUgKi8KKworI2VuZGlmIC8qIF9BU01fQVJDSF9ETUFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtbGg3YTQweC9lbnRyeS1tYWNyby5TIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbGg3YTQweC9lbnRyeS1tYWNyby5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2NWYzOTYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L2VudHJ5LW1hY3JvLlMKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvZW50cnktbWFjcm8uUworICoKKyAqIExvdy1sZXZlbCBJUlEgaGVscGVyIG1hY3JvcyBmb3IgTEg3QTQweCBwbGF0Zm9ybXMKKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjIGlmIGRlZmluZWQgKENPTkZJR19BUkNIX0xIN0E0MDApICYmIGRlZmluZWQgKENPTkZJR19BUkNIX0xIN0E0MDQpCisjICBlcnJvciAiTEg3QTQwMCBhbmQgTEg3QTQwNCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorIyBlbmRpZgorCisjIGlmIGRlZmluZWQgKENPTkZJR19BUkNIX0xIN0E0MDApCisJCS5tYWNybwlkaXNhYmxlX2ZpcQorCQkuZW5kbQorCisJCS5tYWNybwlnZXRfaXJxbnJfYW5kX2Jhc2UsIGlycW5yLCBpcnFzdGF0LCBiYXNlLCB0bXAKKwkJbW92CVxpcnFuciwgIzAKKwkJbW92CVxiYXNlLCAjaW9fcDJ2KDB4ODAwMDAwMDApCUAgQVBCIHJlZ2lzdGVycworCQlsZHIJXGlycXN0YXQsIFtcYmFzZSwgIzB4NTAwXQlAIFBJQyBJTlRTUgorCisxMDAxOgkJbW92cwlcaXJxc3RhdCwgXGlycXN0YXQsIGxzciAjMQlAIFNoaWZ0IGludG8gY2FycnkKKwkJYmNzCTEwMDhmCQkJCUAgQml0IHNldDsgaXJxIGZvdW5kCisJCWFkZAlcaXJxbnIsIFxpcnFuciwgIzEKKwkJYm5lCTEwMDFiCQkJCUAgVW50aWwgbm8gYml0cworCQliCTEwMDlmCQkJCUAgTm90aGluZz8gIEhtbS4KKzEwMDg6CQltb3ZzCVxpcnFzdGF0LCAjMQkJCUAgRm9yY2UgIVoKKzEwMDk6CisgICAgICAgICAgICAgICAuZW5kbQorCisjZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX0xIN0E0MDQpCisKKwkJLm1hY3JvCWRpc2FibGVfZmlxCisJCS5lbmRtCisKKwkJLm1hY3JvCWdldF9pcnFucl9hbmRfYmFzZSwgaXJxbnIsIGlycXN0YXQsIGJhc2UsIHRtcAorCQltb3YJXGlycW5yLCAjMAkJCUAgVklDMSBpcnEgYmFzZQorCQltb3YJXGJhc2UsICNpb19wMnYoMHg4MDAwMDAwMCkJQCBBUEIgcmVnaXN0ZXJzCisJCWFkZAlcYmFzZSwgXGJhc2UsICMweDgwMDAKKwkJbGRyCVx0bXAsIFtcYmFzZSwgIzB4MDAzMF0JCUAgVklDMV9WRUNUQUREUgorCQl0c3QJXHRtcCwgI1ZBX1ZFQ1RPUkVECQlAIERpcmVjdCB2ZWN0b3JlZAorCQlibmUJMTAwMmYKKwkJdHN0CVx0bXAsICNWQV9WSUMxREVGQVVMVAkJQCBEZWZhdWx0IHZlY3RvcmVkIFZJQzEKKwkJbGRybmUJXGlycXN0YXQsIFtcYmFzZSwgIzBdCQlAIFZJQzFfSVJRU1RBVFVTCisJCWJuZQkxMDAxZgorCQlhZGQJXGJhc2UsIFxiYXNlLCAjKDB4YTAwMCAtIDB4ODAwMCkKKwkJbGRyCVx0bXAsIFtcYmFzZSwgIzB4MDAzMF0JCUAgVklDMl9WRUNUQUREUgorCQl0c3QJXHRtcCwgI1ZBX1ZFQ1RPUkVECQlAIERpcmVjdCB2ZWN0b3JlZAorCQlibmUJMTAwMmYKKwkJbGRyCVxpcnFzdGF0LCBbXGJhc2UsICMwXQkJQCBWSUMyX0lSUVNUQVRVUworCQltb3YJXGlycW5yLCAjMzIJCQlAIFZJQzIgaXJxIGJhc2UKKworMTAwMToJCW1vdnMJXGlycXN0YXQsIFxpcnFzdGF0LCBsc3IgIzEJQCBTaGlmdCBpbnRvIGNhcnJ5CisJCWJjcwkxMDA4ZgkJCQlAIEJpdCBzZXQ7IGlycSBmb3VuZAorCQlhZGQJXGlycW5yLCBcaXJxbnIsICMxCisJCWJuZQkxMDAxYgkJCQlAIFVudGlsIG5vIGJpdHMKKwkJYgkxMDA5ZgkJCQlAIE5vdGhpbmc/ICBIbW0uCisxMDAyOgkJYW5kCVxpcnFuciwgXHRtcCwgIzB4M2YJCUAgTWFzayBmb3IgdmFsaWQgYml0cworMTAwODoJCW1vdnMJXGlycXN0YXQsICMxCQkJQCBGb3JjZSAhWgorCQlzdHIJXHRtcCwgW1xiYXNlLCAjMHgwMDMwXQkJQCBDbGVhciB2ZWN0b3IKKzEwMDk6CisgICAgICAgICAgICAgICAuZW5kbQorI2VuZGlmCisKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtbGg3YTQweC9oYXJkd2FyZS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbGg3YTQweC9oYXJkd2FyZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlYjA3YzEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L2hhcmR3YXJlLmgKQEAgLTAsMCArMSw1OCBAQAorLyogaW5jbHVkZS9hc20tYXJtL2FyY2gtbGg3YTQweC9oYXJkd2FyZS5oCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNCBDb2FzdGFsIEVudmlyb25tZW50YWwgU3lzdGVtcworICoKKyAqICBbIFN1YnN0YW50aWFsbHkgY3JpYmJlZCBmcm9tIGluY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9oYXJkd2FyZS5oIF0KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfSEFSRFdBUkVfSAorI2RlZmluZSBfX0FTTV9BUkNIX0hBUkRXQVJFX0gKKworI2RlZmluZSBpb19wMnYoeCkgKDB4ZjAwMDAwMDAgfCAoKCh4KSAmIDB4ZmZmMDAwMDApID4+IDQpIHwgKCh4KSAmIDB4MDAwMGZmZmYpKQorI2RlZmluZSBpb192MnAoeCkgKCAgICAgICAgICAgICAoKCh4KSAmIDB4MGZmZjAwMDApIDw8IDQpIHwgKCh4KSAmIDB4MDAwMGZmZmYpKQorCisjaWZkZWYgX19BU1NFTUJMWV9fCisKKyMgZGVmaW5lIF9fUkVHKHgpCWlvX3Aydih4KQorIyBkZWZpbmUgX19QUkVHKHgpCWlvX3YycCh4KQorCisjZWxzZQorCisjIGlmIDAKKyMgIGRlZmluZSBfX1JFRyh4KQkoKigodm9sYXRpbGUgdTMyICopaW9fcDJ2KHgpKSkKKyMgZWxzZQorLyoKKyAqIFRoaXMgX19SRUcoKSB2ZXJzaW9uIGdpdmVzIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIG9uZSBhYm92ZSwgIGV4Y2VwdAorICogdGhhdCB3ZSBhcmUgZm9vbGluZyBnY2Mgc29tZWhvdyBzbyBpdCBnZW5lcmF0ZXMgZmFyIGJldHRlciBhbmQgc21hbGxlcgorICogYXNzZW1ibHkgY29kZSBmb3IgYWNjZXNzIHRvIGNvbnRpZ291cyByZWdpc3RlcnMuICBJdCdzIGEgc2hhbWUgdGhhdCBnY2MKKyAqIGRvZXNuJ3QgZ3Vlc3MgdGhpcyBieSBpdHNlbGYuCisgKi8KKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KK3R5cGVkZWYgc3RydWN0IHsgdm9sYXRpbGUgdTMyIG9mZnNldFs0MDk2XTsgfSBfX3JlZ2Jhc2U7CisjIGRlZmluZSBfX1JFR1AoeCkJKChfX3JlZ2Jhc2UgKikoKHgpJn40MDk1KSktPm9mZnNldFsoKHgpJjQwOTUpPj4yXQorIyBkZWZpbmUgX19SRUcoeCkJX19SRUdQKGlvX3Aydih4KSkKK3R5cGVkZWYgc3RydWN0IHsgdm9sYXRpbGUgdTE2IG9mZnNldFs0MDk2XTsgfSBfX3JlZ2Jhc2UxNjsKKyMgZGVmaW5lIF9fUkVHUDE2KHgpCSgoX19yZWdiYXNlMTYgKikoKHgpJn40MDk1KSktPm9mZnNldFsoKHgpJjQwOTUpPj4xXQorIyBkZWZpbmUgX19SRUcxNih4KQlfX1JFR1AxNihpb19wMnYoeCkpCit0eXBlZGVmIHN0cnVjdCB7IHZvbGF0aWxlIHU4IG9mZnNldFs0MDk2XTsgfSBfX3JlZ2Jhc2U4OworIyBkZWZpbmUgX19SRUdQOCh4KQkoKF9fcmVnYmFzZTggKikoKHgpJn40MDk1KSktPm9mZnNldFsoeCkmNDA5NV0KKyMgZGVmaW5lIF9fUkVHOCh4KQlfX1JFR1A4KGlvX3Aydih4KSkKKyNlbmRpZgorCisvKiBMZXQncyBraWNrIGdjYydzIGFzcyBhZ2Fpbi4uLiAqLworIyBkZWZpbmUgX19SRUcyKHgseSkJXAorCSggX19idWlsdGluX2NvbnN0YW50X3AoeSkgPyAoX19SRUcoKHgpICsgKHkpKSkgXAorCQkJCSAgOiAoKih2b2xhdGlsZSB1MzIgKikoKHUzMikmX19SRUcoeCkgKyAoeSkpKSApCisKKyMgZGVmaW5lIF9fUFJFRyh4KQkoaW9fdjJwKCh1MzIpJih4KSkpCisKKyNlbmRpZgorCisjaW5jbHVkZSAicmVnaXN0ZXJzLmgiCisKKyNlbmRpZiAgLyogX0FTTV9BUkNIX0hBUkRXQVJFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvaW8uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTNiZGQ5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbGg3YTQweC9pby5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qIGluY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvaW8uaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQgQ29hc3RhbCBFbnZpcm9ubWVudGFsIFN5c3RlbXMKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfSU9fSAorI2RlZmluZSBfX0FTTV9BUkNIX0lPX0gKKworI2RlZmluZSBJT19TUEFDRV9MSU1JVCAweGZmZmZmZmZmCisKKy8qIE5vIElTQSBvciBQQ0kgYnVzIG9uIHRoaXMgbWFjaGluZS4gKi8KKyNkZWZpbmUgX19pbyhhKQkJCSgodm9pZCBfX2lvbWVtICopKGEpKQorI2RlZmluZSBfX21lbV9wY2koYSkJCShhKQorI2RlZmluZSBfX21lbV9pc2EoYSkJCShhKQorCisjZW5kaWYgLyogX19BU01fQVJDSF9JT19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L2lycS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbGg3YTQweC9pcnEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjVmMGIxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbGg3YTQweC9pcnEuaApAQCAtMCwwICsxLDExIEBACisvKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L2lycS5oCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNCBMb2dpYyBQcm9kdWN0IERldmVsb3BtZW50CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKwordm9pZCBfX2luaXQgbGg3YTQweF9pbml0X2JvYXJkX2lycSAodm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L2lycXMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvaXJxcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5MWYzZTUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L2lycXMuaApAQCAtMCwwICsxLDE5NiBAQAorLyogaW5jbHVkZS9hc20tYXJtL2FyY2gtbGg3YTQweC9pcnFzLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0IENvYXN0YWwgRW52aXJvbm1lbnRhbCBTeXN0ZW1zCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0IExvZ2ljIFByb2R1Y3QgRGV2ZWxvcG1lbnQKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisvKiBJdCBpcyB0byBiZSBzZWVuIHdoZXRoZXIgb3Igbm90IHdlIGNhbiBidWlsZCBhIGtlcm5lbCBmb3IgbW9yZSB0aGFuCisgKiBvbmUgYm9hcmQuICBGb3IgdGhlIHRpbWUgYmVpbmcsIHRoZXNlIG1hY3JvcyBhc3N1bWUgdGhhdCB3ZSBjYW5ub3QuCisgKiBUaHVzLCBpdCBpcyBPSyB0byBpZmRlZiBtYWNoaW5lL2JvYXJkIHNwZWNpZmljIElSUSBhc3NpZ25tZW50cy4KKyAqLworCisKKyNpZm5kZWYgX19BU01fQVJDSF9JUlFTX0gKKyNkZWZpbmUgX19BU01fQVJDSF9JUlFTX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjZGVmaW5lIEZJUV9TVEFSVAk4MAorCisjaWYgZGVmaW5lZCAoQ09ORklHX0FSQ0hfTEg3QTQwMCkKKworICAvKiBGSVFzICovCisKKyMgZGVmaW5lIElSUV9HUElPMEZJUQkwCS8qIEdQSU8gRXh0ZXJuYWwgRklRIEludGVycnVwdCBvbiBGMCAqLworIyBkZWZpbmUgSVJRX0JMSU5UCTEJLyogQmF0dGVyeSBMb3cgKi8KKyMgZGVmaW5lIElSUV9XRUlOVAkyCS8qIFdhdGNoZG9nIFRpbWVyLCBXRFQgb3ZlcmZsb3cJKi8KKyMgZGVmaW5lIElSUV9NQ0lOVAkzCS8qIE1lZGlhIENoYW5nZSwgTUVEQ0hHIHBpbiByaXNpbmcgKi8KKworICAvKiBJUlFzICovCisKKyMgZGVmaW5lIElSUV9DU0lOVAk0CS8qIEF1ZGlvIENvZGVjIChBQ0kpICovCisjIGRlZmluZSBJUlFfR1BJTzFJTlRSCTUJLyogR1BJTyBFeHRlcm5hbCBJUlEgSW50ZXJydXB0IG9uIEYxICovCisjIGRlZmluZSBJUlFfR1BJTzJJTlRSCTYJLyogR1BJTyBFeHRlcm5hbCBJUlEgSW50ZXJydXB0IG9uIEYyICovCisjIGRlZmluZSBJUlFfR1BJTzNJTlRSCTcJLyogR1BJTyBFeHRlcm5hbCBJUlEgSW50ZXJydXB0IG9uIEYzICovCisjIGRlZmluZSBJUlFfVDFVSQk4CS8qIFRpbWVyIDEgdW5kZXJmbG93ICovCisjIGRlZmluZSBJUlFfVDJVSQk5CS8qIFRpbWVyIDIgdW5kZXJmbG93ICovCisjIGRlZmluZSBJUlFfUlRDTUkJMTAKKyMgZGVmaW5lIElSUV9USU5UUgkxMQkvKiBDbG9jayBTdGF0ZSBDb250cm9sbGVyIDY0IEh6IHRpY2sgKENTQykgKi8KKyMgZGVmaW5lIElSUV9VQVJUMUlOVFIJMTIKKyMgZGVmaW5lIElSUV9VQVJUMklOVFIJMTMKKyMgZGVmaW5lIElSUV9MQ0RJTlRSCTE0CisjIGRlZmluZSBJUlFfU1NJRU9UCTE1CS8qIFN5bmNocm9ub3VzIFNlcmlhbCBJbnRlcmZhY2UgKFNTSSkgKi8KKyMgZGVmaW5lIElSUV9VQVJUM0lOVFIJMTYKKyMgZGVmaW5lIElSUV9TQ0lJTlRSCTE3CS8qIFNtYXJ0IENhcmQgSW50ZXJmYWNlIChTQ0kpICovCisjIGRlZmluZSBJUlFfQUFDSU5UUgkxOAkvKiBBZHZhbmNlZCBBdWRpbyBDb2RlYyAoQUFDKSAqLworIyBkZWZpbmUgSVJRX01NQ0lOVFIJMTkJLyogTXVsdGltZWRpYSBDYXJkIChNTUMpICovCisjIGRlZmluZSBJUlFfVVNCSU5UUgkyMAorIyBkZWZpbmUgSVJRX0RNQUlOVFIJMjEKKyMgZGVmaW5lIElSUV9UM1VJCTIyCS8qIFRpbWVyIDMgdW5kZXJmbG93ICovCisjIGRlZmluZSBJUlFfR1BJTzRJTlRSCTIzCS8qIEdQSU8gRXh0ZXJuYWwgSVJRIEludGVycnVwdCBvbiBGNCAqLworIyBkZWZpbmUgSVJRX0dQSU81SU5UUgkyNAkvKiBHUElPIEV4dGVybmFsIElSUSBJbnRlcnJ1cHQgb24gRjUgKi8KKyMgZGVmaW5lIElSUV9HUElPNklOVFIJMjUJLyogR1BJTyBFeHRlcm5hbCBJUlEgSW50ZXJydXB0IG9uIEY2ICovCisjIGRlZmluZSBJUlFfR1BJTzdJTlRSCTI2CS8qIEdQSU8gRXh0ZXJuYWwgSVJRIEludGVycnVwdCBvbiBGNyAqLworIyBkZWZpbmUgSVJRX0JNSUlOVFIJMjcJLyogQmF0dGVyeSBNb25pdG9yIEludGVyZmFjZSAoQk1JKSAqLworCisjIGRlZmluZSBOUl9JUlFfQ1BVCTI4CS8qIElSUXMgZGlyZWN0bHkgcmVjb2duaXplZCBieSBDUFUgKi8KKworCS8qIEdpdmVuIElSUSwgcmV0dXJuIEdQSU8gaW50ZXJydXB0IG51bWJlciAwLTcgKi8KKyMgZGVmaW5lIElSUV9UT19HUElPKGkpICAoKGkpIFwKKwktICgoKGkpID4gSVJRX0dQSU8zSU5UUikgPyBJUlFfR1BJTzRJTlRSIC0gSVJRX0dQSU8zSU5UUiAtIDEgOiAwKVwKKwktICgoKGkpID4gSVJRX0dQSU8wSU5UUikgPyBJUlFfR1BJTzFJTlRSIC0gSVJRX0dQSU8wSU5UUiAtIDEgOiAwKSkKKworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChDT05GSUdfQVJDSF9MSDdBNDA0KQorCisjIGRlZmluZSBJUlFfQlJPV04JMAkvKiBCcm93bm91dCAqLworIyBkZWZpbmUgSVJRX1dEVElOVFIJMQkvKiBXYXRjaGRvZyBUaW1lciAqLworIyBkZWZpbmUgSVJRX0NPTU1SWAkyCS8qIEFSTSBDb21tIFJ4IGZvciBEZWJ1ZyAqLworIyBkZWZpbmUgSVJRX0NPTU1UWAkzCS8qIEFSTSBDb21tIFR4IGZvciBEZWJ1ZyAqLworIyBkZWZpbmUgSVJRX1QxVUkJNAkvKiBUaW1lciAxIHVuZGVyZmxvdyAqLworIyBkZWZpbmUgSVJRX1QyVUkJNQkvKiBUaW1lciAyIHVuZGVyZmxvdyAqLworIyBkZWZpbmUgSVJRX0NTSU5UCTYJLyogQ29kZWMgSW50ZXJydXB0IChzaGFyZWQgYnkgQUFDIG9uIDQwNCkgKi8KKyMgZGVmaW5lIElSUV9ETUFNMlAwCTcJLyogLS0gRE1BIE1lbW9yeSB0byBQZXJpcGhlcmFsICovCisjIGRlZmluZSBJUlFfRE1BTTJQMQk4CisjIGRlZmluZSBJUlFfRE1BTTJQMgk5CisjIGRlZmluZSBJUlFfRE1BTTJQMwkxMAorIyBkZWZpbmUgSVJRX0RNQU0yUDQJMTEKKyMgZGVmaW5lIElSUV9ETUFNMlA1CTEyCisjIGRlZmluZSBJUlFfRE1BTTJQNgkxMworIyBkZWZpbmUgSVJRX0RNQU0yUDcJMTQKKyMgZGVmaW5lIElSUV9ETUFNMlA4CTE1CisjIGRlZmluZSBJUlFfRE1BTTJQOQkxNgorIyBkZWZpbmUgSVJRX0RNQU0yTTAJMTcJLyogLS0gRE1BIE1lbW9yeSB0byBNZW1vcnkgKi8KKyMgZGVmaW5lIElSUV9ETUFNMk0xCTE4CisjIGRlZmluZSBJUlFfR1BJTzBJTlRSCTE5CS8qIC0tIEdQSU9GIEludGVycnVwdCAqLworIyBkZWZpbmUgSVJRX0dQSU8xSU5UUgkyMAorIyBkZWZpbmUgSVJRX0dQSU8ySU5UUgkyMQorIyBkZWZpbmUgSVJRX0dQSU8zSU5UUgkyMgorIyBkZWZpbmUgSVJRX1NPRlRfVjFfMjMJMjMJLyogLS0gVW5hc3NpZ25lZCAqLworIyBkZWZpbmUgSVJRX1NPRlRfVjFfMjQJMjQKKyMgZGVmaW5lIElSUV9TT0ZUX1YxXzI1CTI1CisjIGRlZmluZSBJUlFfU09GVF9WMV8yNgkyNgorIyBkZWZpbmUgSVJRX1NPRlRfVjFfMjcJMjcKKyMgZGVmaW5lIElSUV9TT0ZUX1YxXzI4CTI4CisjIGRlZmluZSBJUlFfU09GVF9WMV8yOQkyOQorIyBkZWZpbmUgSVJRX1NPRlRfVjFfMzAJMzAKKyMgZGVmaW5lIElSUV9TT0ZUX1YxXzMxCTMxCisKKyMgZGVmaW5lIElSUV9CTElOVAkzMgkvKiBCYXR0ZXJ5IExvdyAqLworIyBkZWZpbmUgSVJRX0JNSUlOVFIJMzMJLyogQmF0dGVyeSBNb25pdG9yICovCisjIGRlZmluZSBJUlFfTUNJTlRSCTM0CS8qIE1lZGlhIENoYW5nZSAqLworIyBkZWZpbmUgSVJRX1RJTlRSCTM1CS8qIDY0SHogVGljayAqLworIyBkZWZpbmUgSVJRX1dFSU5UCTM2CS8qIFdhdGNoZG9nIEV4cGlyZWQgKi8KKyMgZGVmaW5lIElSUV9SVENNSQkzNwkvKiBSZWFsLXRpbWUgQ2xvY2sgTWF0Y2ggKi8KKyMgZGVmaW5lIElSUV9VQVJUMUlOVFIJMzgJLyogVUFSVDEgSW50ZXJydXB0IChpbmNsdWRpbmcgZXJyb3IpICovCisjIGRlZmluZSBJUlFfVUFSVDFFUlIJMzkJLyogVUFSVDEgRXJyb3IgKi8KKyMgZGVmaW5lIElSUV9VQVJUMklOVFIJNDAJLyogVUFSVDIgSW50ZXJydXB0IChpbmNsdWRpbmcgZXJyb3IpICovCisjIGRlZmluZSBJUlFfVUFSVDJFUlIJNDEJLyogVUFSVDIgRXJyb3IgKi8KKyMgZGVmaW5lIElSUV9VQVJUM0lOVFIJNDIJLyogVUFSVDMgSW50ZXJydXB0IChpbmNsdWRpbmcgZXJyb3IpICovCisjIGRlZmluZSBJUlFfVUFSVDNFUlIJNDMJLyogVUFSVDMgRXJyb3IgKi8KKyMgZGVmaW5lIElSUV9TQ0lJTlRSCTQ0CS8qIFNtYXJ0IENhcmQgKi8KKyMgZGVmaW5lIElSUV9UU0NJTlRSCTQ1CS8qIFRvdWNoc2NyZWVuICovCisjIGRlZmluZSBJUlFfS01JSU5UUgk0NgkvKiBLZXlib2FyZC9Nb3VzZSAoUFMvMikgKi8KKyMgZGVmaW5lIElSUV9HUElPNElOVFIJNDcJLyogLS0gR1BJT0YgSW50ZXJydXB0ICovCisjIGRlZmluZSBJUlFfR1BJTzVJTlRSCTQ4CisjIGRlZmluZSBJUlFfR1BJTzZJTlRSCTQ5CisjIGRlZmluZSBJUlFfR1BJTzdJTlRSCTUwCisjIGRlZmluZSBJUlFfVDNVSQk1MQkvKiBUaW1lciAzIHVuZGVyZmxvdyAqLworIyBkZWZpbmUgSVJRX0xDRElOVFIJNTIJLyogTENEIENvbnRyb2xsZXIgKi8KKyMgZGVmaW5lIElSUV9TU1BJTlRSCTUzCS8qIFN5bmNocm9ub3VzIFNlcmlhbCBQb3J0ICovCisjIGRlZmluZSBJUlFfU0RJTlRSCTU0CS8qIFNlY3VyZSBEaWdpdGFsIFBvcnQgKE1NQykgKi8KKyMgZGVmaW5lIElSUV9VU0JJTlRSCTU1CS8qIFVTQiBEZXZpY2UgUG9ydCAqLworIyBkZWZpbmUgSVJRX1VTSElOVFIJNTYJLyogVVNCIEhvc3QgUG9ydCAqLworIyBkZWZpbmUgSVJRX1NPRlRfVjJfMjUJNTcJLyogLS0gVW5hc3NpZ25lZCAqLworIyBkZWZpbmUgSVJRX1NPRlRfVjJfMjYJNTgKKyMgZGVmaW5lIElSUV9TT0ZUX1YyXzI3CTU5CisjIGRlZmluZSBJUlFfU09GVF9WMl8yOAk2MAorIyBkZWZpbmUgSVJRX1NPRlRfVjJfMjkJNjEKKyMgZGVmaW5lIElSUV9TT0ZUX1YyXzMwCTYyCisjIGRlZmluZSBJUlFfU09GVF9WMl8zMQk2MworCisjIGRlZmluZSBOUl9JUlFfQ1BVCTY0CS8qIElSUXMgZGlyZWN0bHkgcmVjb2duaXplZCBieSBDUFUgKi8KKworCS8qIEdpdmVuIElSUSwgcmV0dXJuIEdQSU8gaW50ZXJydXB0IG51bWJlciAwLTcgKi8KKyMgZGVmaW5lIElSUV9UT19HUElPKGkpICAoKGkpIFwKKwktICgoKGkpID4gSVJRX0dQSU8zSU5UUikgPyBJUlFfR1BJTzRJTlRSIC0gSVJRX0dQSU8zSU5UUiAtIDEgOiAwKVwKKwktIElSUV9HUElPMElOVFIpCisKKwkJCS8qIFZlY3RvciBBZGRyZXNzIGNvbnN0YW50cyAqLworIyBkZWZpbmUgVkFfVkVDVE9SRUQJMHgxMDAJLyogU2V0IGZvciB2ZWN0b3JlZCBpbnRlcnJ1cHQgKi8KKyMgZGVmaW5lIFZBX1ZJQzFERUZBVUxUCTB4MjAwCS8qIFNldCBhcyBkZWZhdWx0IFZFQ1RBRERSIGZvciBWSUMxICovCisjIGRlZmluZSBWQV9WSUMyREVGQVVMVAkweDQwMAkvKiBTZXQgYXMgZGVmYXVsdCBWRUNUQUREUiBmb3IgVklDMiAqLworCisjZW5kaWYKKworICAvKiBJUlEgYWxpYXNlcyAqLworCisjaWYgIWRlZmluZWQgKElSUV9HUElPMElOVFIpCisjIGRlZmluZSBJUlFfR1BJTzBJTlRSCUlSUV9HUElPMEZJUQorI2VuZGlmCisjZGVmaW5lIElSUV9USUNLIAlJUlFfVElOVFIKKyNkZWZpbmUgSVJRX1BDQzFfUkRZCUlSUV9HUElPNklOVFIJLyogUENDYXJkIDEgcmVhZHkgKi8KKyNkZWZpbmUgSVJRX1BDQzJfUkRZCUlSUV9HUElPN0lOVFIJLyogUENDYXJkIDIgcmVhZHkgKi8KKworI2lmZGVmIENPTkZJR19NQUNIX0tFVjdBNDAwCisjIGRlZmluZSBJUlFfVFMJCUlSUV9HUElPRklRCS8qIFRvdWNoc2NyZWVuICovCisjIGRlZmluZSBJUlFfQ1BMRAlJUlFfR1BJTzFJTlRSCS8qIENQTEQgY2FzY2FkZSAqLworIyBkZWZpbmUgSVJRX1BDQzFfQ0QJSVJRX0dQSU9fRjIJLyogUENDYXJkIDEgY2FyZCBkZXRlY3QgKi8KKyMgZGVmaW5lIElSUV9QQ0MyX0NECUlSUV9HUElPX0YzCS8qIFBDQ2FyZCAyIGNhcmQgZGV0ZWN0ICovCisjZW5kaWYKKworI2lmIGRlZmluZWQgKENPTkZJR19NQUNIX0xQRDdBNDAwKSB8fCBkZWZpbmVkIChDT05GSUdfTUFDSF9MUEQ3QTQwNCkKKyMgZGVmaW5lIElSUV9DUExEX1YyOAlJUlFfR1BJTzdJTlRSCS8qIENQTEQgY2FzY2FkZSB0aHJvdWdoIEdQSU9fUEY3ICovCisjIGRlZmluZSBJUlFfQ1BMRF9WMzQJSVJRX0dQSU8zSU5UUgkvKiBDUExEIGNhc2NhZGUgdGhyb3VnaCBHUElPX1BGMyAqLworI2VuZGlmCisKKyAgLyogU3lzdGVtIHNwZWNpZmljIElSUXMgKi8KKworI2RlZmluZSBJUlFfQk9BUkRfU1RBUlQgTlJfSVJRX0NQVQorCisjaWZkZWYgQ09ORklHX01BQ0hfS0VWN0E0MDAKKyMgZGVmaW5lIElSUV9LRVY3QTQwMF9DUExECUlSUV9CT0FSRF9TVEFSVAorIyBkZWZpbmUgTlJfSVJRX0JPQVJECQk1CisjIGRlZmluZSBJUlFfS0VWN0E0MDBfTU1DX0NECUlSUV9LRVY3QTQwMF9DUExEICsgMAkvKiBNTUMgQ2FyZCBEZXRlY3QgKi8KKyMgZGVmaW5lIElSUV9LRVY3QTQwMF9SSTIJSVJRX0tFVjdBNDAwX0NQTEQgKyAxCS8qIFJpbmcgSW5kaWNhdG9yIDIgKi8KKyMgZGVmaW5lIElSUV9LRVY3QTQwMF9JREVfQ0YJSVJRX0tFVjdBNDAwX0NQTEQgKyAyCS8qIENvbXBhY3QgRmxhc2ggKD8pICovCisjIGRlZmluZSBJUlFfS0VWN0E0MDBfRVRIX0lOVAlJUlFfS0VWN0E0MDBfQ1BMRCArIDMJLyogRXRoZXJuZXQgY2hpcCAqLworIyBkZWZpbmUgSVJRX0tFVjdBNDAwX0lOVAlJUlFfS0VWN0E0MDBfQ1BMRCArIDQKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoQ09ORklHX01BQ0hfTFBEN0E0MDApIHx8IGRlZmluZWQgKENPTkZJR19NQUNIX0xQRDdBNDA0KQorIyBkZWZpbmUgSVJRX0xQRDdBNDBYX0NQTEQJSVJRX0JPQVJEX1NUQVJUCisjIGRlZmluZSBOUl9JUlFfQk9BUkQJCTIKKyMgZGVmaW5lIElSUV9MUEQ3QTQwWF9FVEhfSU5UCUlSUV9MUEQ3QTQwWF9DUExEICsgMAkvKiBFdGhlcm5ldCBjaGlwICovCisjIGRlZmluZSBJUlFfTFBEN0E0MDBfVFMJSVJRX0xQRDdBNDBYX0NQTEQgKyAxCS8qIFRvdWNoIHNjcmVlbiAqLworI2VuZGlmCisKKyNkZWZpbmUgTlJfSVJRUwkJKE5SX0lSUV9DUFUgKyBOUl9JUlFfQk9BUkQpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtbGg3YTQweC9tZW1vcnkuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvbWVtb3J5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2UyZmVhMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvbWVtb3J5LmgKQEAgLTAsMCArMSw5NCBAQAorLyogaW5jbHVkZS9hc20tYXJtL2FyY2gtbGg3YTQweC9tZW1vcnkuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQgQ29hc3RhbCBFbnZpcm9ubWVudGFsIFN5c3RlbXMKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqCisgKiAgUmVmZXIgdG8gPGZpbGU6RG9jdW1lbnRhdGlvbi9hcm0vU2hhcnAtTEgvU0RSQU0+IGZvciBtb3JlIGluZm9ybWF0aW9uLgorICoKKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfTUVNT1JZX0gKKyNkZWZpbmUgX19BU01fQVJDSF9NRU1PUllfSAorCisvKgorICogUGh5c2ljYWwgRFJBTSBvZmZzZXQuCisgKi8KKyNkZWZpbmUgUEhZU19PRkZTRVQJKDB4YzAwMDAwMDBVTCkKKworLyoKKyAqIFZpcnR1YWwgdmlldyA8LT4gRE1BIHZpZXcgbWVtb3J5IGFkZHJlc3MgdHJhbnNsYXRpb25zCisgKiB2aXJ0X3RvX2J1czogVXNlZCB0byB0cmFuc2xhdGUgdGhlIHZpcnR1YWwgYWRkcmVzcyB0byBhbgorICoJCWFkZHJlc3Mgc3VpdGFibGUgdG8gYmUgcGFzc2VkIHRvIHNldF9kbWFfYWRkcgorICogYnVzX3RvX3ZpcnQ6IFVzZWQgdG8gY29udmVydCBhbiBhZGRyZXNzIGZvciBETUEgb3BlcmF0aW9ucworICoJCXRvIGFuIGFkZHJlc3MgdGhhdCB0aGUga2VybmVsIGNhbiB1c2UuCisgKi8KKyNkZWZpbmUgX192aXJ0X3RvX2J1cyh4KQkgX192aXJ0X3RvX3BoeXMoeCkKKyNkZWZpbmUgX19idXNfdG9fdmlydCh4KQkgX19waHlzX3RvX3ZpcnQoeCkKKworI2lmZGVmIENPTkZJR19ESVNDT05USUdNRU0KKworI2RlZmluZSBOT0RFU19TSElGVAk0CS8qIFVwIHRvIDE2IG5vZGVzICovCisKKy8qCisgKiBHaXZlbiBhIGtlcm5lbCBhZGRyZXNzLCBmaW5kIHRoZSBob21lIG5vZGUgb2YgdGhlIHVuZGVybHlpbmcgbWVtb3J5LgorICovCisKKyMgaWZkZWYgQ09ORklHX0xIN0E0MFhfT05FX0JBTktfUEVSX05PREUKKyMgIGRlZmluZSBLVkFERFJfVE9fTklEKGFkZHIpIFwKKyAgKCAgKCgoKHVuc2lnbmVkIGxvbmcpIChhZGRyKSAtIFBBR0VfT0ZGU0VUKSA+PiAyNCkgJiAgMSlcCisgICB8ICgoKCh1bnNpZ25lZCBsb25nKSAoYWRkcikgLSBQQUdFX09GRlNFVCkgPj4gMjUpICYgfjEpKQorIyBlbHNlICAvKiAyIGJhbmtzIHBlciBub2RlICovCisjICBkZWZpbmUgS1ZBRERSX1RPX05JRChhZGRyKSBcCisgICAgICAoKCh1bnNpZ25lZCBsb25nKSAoYWRkcikgLSBQQUdFX09GRlNFVCkgPj4gMjYpCisjIGVuZGlmCisKKy8qCisgKiBHaXZlbiBhIHBhZ2UgZnJhbWUgbnVtYmVyLCBjb252ZXJ0IGl0IHRvIGEgbm9kZSBpZC4KKyAqLworCisjIGlmZGVmIENPTkZJR19MSDdBNDBYX09ORV9CQU5LX1BFUl9OT0RFCisjICBkZWZpbmUgUEZOX1RPX05JRChwZm4pIFwKKyAgKCgoKChwZm4pIC0gUEhZU19QRk5fT0ZGU0VUKSA+PiAoMjQgLSBQQUdFX1NISUZUKSkgJiAgMSlcCisgfCAoKCgocGZuKSAtIFBIWVNfUEZOX09GRlNFVCkgPj4gKDI1IC0gUEFHRV9TSElGVCkpICYgfjEpKQorIyBlbHNlICAvKiAyIGJhbmtzIHBlciBub2RlICovCisjICBkZWZpbmUgUEZOX1RPX05JRChwZm4pIFwKKyAgICAoKChwZm4pIC0gUEhZU19QRk5fT0ZGU0VUKSA+PiAoMjYgLSBQQUdFX1NISUZUKSkKKyNlbmRpZgorCisvKgorICogR2l2ZW4gYSBrYWRkciwgQUREUl9UT19NQVBCQVNFIGZpbmRzIHRoZSBvd25pbmcgbm9kZSBvZiB0aGUgbWVtb3J5CisgKiBhbmQgcmV0dXJuIHRoZSBtZW1fbWFwIG9mIHRoYXQgbm9kZS4KKyAqLworIyBkZWZpbmUgQUREUl9UT19NQVBCQVNFKGthZGRyKQlOT0RFX01FTV9NQVAoS1ZBRERSX1RPX05JRChrYWRkcikpCisKKy8qCisgKiBHaXZlbiBhIHBhZ2UgZnJhbWUgbnVtYmVyLCBmaW5kIHRoZSBvd25pbmcgbm9kZSBvZiB0aGUgbWVtb3J5CisgKiBhbmQgcmV0dXJuIHRoZSBtZW1fbWFwIG9mIHRoYXQgbm9kZS4KKyAqLworIyBkZWZpbmUgUEZOX1RPX01BUEJBU0UocGZuKQlOT0RFX01FTV9NQVAoUEZOX1RPX05JRChwZm4pKQorCisvKgorICogR2l2ZW4gYSBrYWRkciwgTE9DQUxfTUVNX01BUCBmaW5kcyB0aGUgb3duaW5nIG5vZGUgb2YgdGhlIG1lbW9yeQorICogYW5kIHJldHVybnMgdGhlIGluZGV4IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGFwcHJvcHJpYXRlIHBhZ2UgaW4gdGhlCisgKiBub2RlJ3MgbWVtX21hcC4KKyAqLworCisjIGlmZGVmIENPTkZJR19MSDdBNDBYX09ORV9CQU5LX1BFUl9OT0RFCisjICBkZWZpbmUgTE9DQUxfTUFQX05SKGFkZHIpIFwKKyAgICAgICAoKCh1bnNpZ25lZCBsb25nKShhZGRyKSAmIDB4MDAzZmZmZmYpID4+IFBBR0VfU0hJRlQpCisjIGVsc2UgIC8qIDIgYmFua3MgcGVyIG5vZGUgKi8KKyMgIGRlZmluZSBMT0NBTF9NQVBfTlIoYWRkcikgXAorICAgICAgICgoKHVuc2lnbmVkIGxvbmcpKGFkZHIpICYgMHgwMWZmZmZmZikgPj4gUEFHRV9TSElGVCkKKyMgZW5kaWYKKworI2Vsc2UKKworIyBkZWZpbmUgUEZOX1RPX05JRChhZGRyKQkoMCkKKworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtbGg3YTQweC9wYXJhbS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbGg3YTQweC9wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjYWQwYmMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L3BhcmFtLmgKQEAgLTAsMCArMSw5IEBACisvKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L3BhcmFtLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0IENvYXN0YWwgRW52aXJvbm1lbnRhbCBTeXN0ZW1zCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvcmVnaXN0ZXJzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L3JlZ2lzdGVycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlZGIyMmUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L3JlZ2lzdGVycy5oCkBAIC0wLDAgKzEsMTkzIEBACisvKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L3JlZ2lzdGVycy5oCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNCBDb2FzdGFsIEVudmlyb25tZW50YWwgU3lzdGVtcworICogIENvcHlyaWdodCAoQykgMjAwNCBMb2dpYyBQcm9kdWN0IERldmVsb3BtZW50CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2NvbnN0YW50cy5oPgorCisjaWZuZGVmIF9fQVNNX0FSQ0hfUkVHSVNURVJTX0gKKyNkZWZpbmUgX19BU01fQVJDSF9SRUdJU1RFUlNfSAorCisKKwkvKiBQaHlzaWNhbCByZWdpc3RlciBiYXNlIGFkZHJlc3NlcyAqLworCisjZGVmaW5lIEFDOTdfUEhZUwkoMHg4MDAwMDAwMCkJLyogQUM5NyBDb250cm9sbGVyICovCisjZGVmaW5lIE1NQ19QSFlTCSgweDgwMDAwMTAwKQkvKiBNdWx0aW1lZGlhIENhcmQgQ29udHJvbGxlciAqLworI2RlZmluZSBVU0JfUEhZUwkoMHg4MDAwMDIwMCkJLyogVVNCIENsaWVudCAqLworI2RlZmluZSBTQ0lfUEhZUwkoMHg4MDAwMDMwMCkJLyogU2VjdXJlIENhcmQgSW50ZXJmYWNlICovCisjZGVmaW5lIENTQ19QSFlTCSgweDgwMDAwNDAwKQkvKiBDbG9jay9TdGF0ZSBDb250cm9sbGVyICAqLworI2RlZmluZSBJTlRDX1BIWVMJKDB4ODAwMDA1MDApCS8qIEludGVycnVwdCBDb250cm9sbGVyICovCisjZGVmaW5lIFVBUlQxX1BIWVMJKDB4ODAwMDA2MDApCS8qIFVBUlQxIENvbnRyb2xsZXIgKi8KKyNkZWZpbmUgU0lSX1BIWVMJKDB4ODAwMDA2MDApCS8qIElSIENvbnRyb2xsZXIsIHNhbWUgYXJlIFVBUlQxICovCisjZGVmaW5lIFVBUlQyX1BIWVMJKDB4ODAwMDA3MDApCS8qIFVBUlQyIENvbnRyb2xsZXIgKi8KKyNkZWZpbmUgVUFSVDNfUEhZUwkoMHg4MDAwMDgwMCkJLyogVUFSVDMgQ29udHJvbGxlciAqLworI2RlZmluZSBEQ0RDX1BIWVMJKDB4ODAwMDA5MDApCS8qIERDIHRvIERDIENvbnRyb2xsZXIgKi8KKyNkZWZpbmUgQUNJX1BIWVMJKDB4ODAwMDBhMDApCS8qIEF1ZGlvIENvZGVjIEludGVyZmFjZSAqLworI2RlZmluZSBTU1BfUEhZUwkoMHg4MDAwMGIwMCkJLyogU3luY2hyb25vdXMgLi4uICovCisjZGVmaW5lIFRJTUVSX1BIWVMJKDB4ODAwMDBjMDApCS8qIFRpbWVyIENvbnRyb2xsZXIgKi8KKyNkZWZpbmUgUlRDX1BIWVMJKDB4ODAwMDBkMDApCS8qIFJlYWwtdGltZSBDbG9jayAqLworI2RlZmluZSBHUElPX1BIWVMJKDB4ODAwMDBlMDApCS8qIEdlbmVyYWwgUHVycG9zZSBJTyAqLworI2RlZmluZSBCTUlfUEhZUwkoMHg4MDAwMGYwMCkJLyogQmF0dGVyeSBNb25pdG9yIEludGVyZmFjZSAqLworI2RlZmluZSBXRFRfUEhZUwkoMHg4MDAwMTQwMCkJLyogV2F0Y2hkb2cgVGltZXIgKi8KKyNkZWZpbmUgU01DX1BIWVMJKDB4ODAwMDIwMDApCS8qIFN0YXRpYyBNZW1vcnkgQ29udHJvbGxlciAqLworI2RlZmluZSBTRFJDX1BIWVMJKDB4ODAwMDI0MDApCS8qIFNEUkFNIENvbnRyb2xsZXIgKi8KKyNkZWZpbmUgRE1BQ19QSFlTCSgweDgwMDAyODAwKQkvKiBETUEgQ29udHJvbGxlciAqLworI2RlZmluZSBDTENEQ19QSFlTCSgweDgwMDAzMDAwKQkvKiBDb2xvciBMQ0QgQ29udHJvbGxlciAqLworCisJLyogUGh5c2ljYWwgcmVnaXN0ZXJzIG9mIHRoZSBMSDdBNDA0ICovCisKKyNkZWZpbmUgVklDMV9QSFlTCSgweDgwMDA4MDAwKQkvKiBWZWN0b3JlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAxICovCisjZGVmaW5lIFVTQkhfUEhZUwkoMHg4MDAwOTAwMCkJLyogVVNCIE9IQ0kgaG9zdCBjb250cm9sbGVyICovCisjZGVmaW5lIFZJQzJfUEhZUwkoMHg4MDAwYTAwMCkJLyogVmVjdG9yZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgMiAqLworCisvKiNkZWZpbmUgS0JEX1BIWVMJKDB4ODAwMDBlMDApICovCisvKiNkZWZpbmUgTENESUNQX1BIWVMJKDB4ODAwMDEwMDApICovCisKKworCS8qIENsb2NrL1N0YXRlIENvbnRyb2xsZXIgcmVnaXN0ZXIgKi8KKworI2RlZmluZSBDU0NfUFdSQ05UCV9fUkVHKENTQ19QSFlTICsgMHgwNCkgLyogUG93ZXIgY29udHJvbCAqLworCisjZGVmaW5lIENTQ19QV1JDTlRfVVNCSF9FTgkoMTw8MjgpCS8qIFVTQiBIb3N0IHBvd2VyIGVuYWJsZSAqLworCisKKwkvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciByZWdpc3RlcnMgKi8KKworI2RlZmluZSBJTlRDX0lOVFNSCV9fUkVHKElOVENfUEhZUyArIDB4MDApCS8qIFN0YXR1cyAqLworI2RlZmluZSBJTlRDX0lOVFJTUglfX1JFRyhJTlRDX1BIWVMgKyAweDA0KQkvKiBSYXcgU3RhdHVzICovCisjZGVmaW5lIElOVENfSU5URU5TCV9fUkVHKElOVENfUEhZUyArIDB4MDgpCS8qIEVuYWJsZSBTZXQgKi8KKyNkZWZpbmUgSU5UQ19JTlRFTkMJX19SRUcoSU5UQ19QSFlTICsgMHgwYykJLyogRW5hYmxlIENsZWFyICovCisKKworCS8qIFZlY3RvcmVkIEludGVycnVwdGVkIENvbnRyb2xsZXIgcmVnaXN0ZXJzICovCisKKyNkZWZpbmUgVklDMV9JUlFTVEFUVVMJX19SRUcoVklDMV9QSFlTICsgMHgwMCkKKyNkZWZpbmUgVklDMV9GSVFTVEFUVVMJX19SRUcoVklDMV9QSFlTICsgMHgwNCkKKyNkZWZpbmUgVklDMV9SQVdJTlRSCV9fUkVHKFZJQzFfUEhZUyArIDB4MDgpCisjZGVmaW5lIFZJQzFfSU5UU0VMCV9fUkVHKFZJQzFfUEhZUyArIDB4MGMpCisjZGVmaW5lIFZJQzFfSU5URU4JX19SRUcoVklDMV9QSFlTICsgMHgxMCkKKyNkZWZpbmUgVklDMV9JTlRFTkNMUglfX1JFRyhWSUMxX1BIWVMgKyAweDE0KQorI2RlZmluZSBWSUMxX1NPRlRJTlQJX19SRUcoVklDMV9QSFlTICsgMHgxOCkKKyNkZWZpbmUgVklDMV9TT0ZUSU5UQ0xSCV9fUkVHKFZJQzFfUEhZUyArIDB4MWMpCisjZGVmaW5lIFZJQzFfUFJPVEVDVAlfX1JFRyhWSUMxX1BIWVMgKyAweDIwKQorI2RlZmluZSBWSUMxX1ZFQ1RBRERSCV9fUkVHKFZJQzFfUEhZUyArIDB4MzApCisjZGVmaW5lIFZJQzFfTlZBRERSCV9fUkVHKFZJQzFfUEhZUyArIDB4MzQpCisjZGVmaW5lIFZJQzFfVkFEMAlfX1JFRyhWSUMxX1BIWVMgKyAweDEwMCkKKyNkZWZpbmUgVklDMV9WRUNUQ05UTDAJX19SRUcoVklDMV9QSFlTICsgMHgyMDApCisjZGVmaW5lIFZJQzJfSVJRU1RBVFVTCV9fUkVHKFZJQzJfUEhZUyArIDB4MDApCisjZGVmaW5lIFZJQzJfRklRU1RBVFVTCV9fUkVHKFZJQzJfUEhZUyArIDB4MDQpCisjZGVmaW5lIFZJQzJfUkFXSU5UUglfX1JFRyhWSUMyX1BIWVMgKyAweDA4KQorI2RlZmluZSBWSUMyX0lOVFNFTAlfX1JFRyhWSUMyX1BIWVMgKyAweDBjKQorI2RlZmluZSBWSUMyX0lOVEVOCV9fUkVHKFZJQzJfUEhZUyArIDB4MTApCisjZGVmaW5lIFZJQzJfSU5URU5DTFIJX19SRUcoVklDMl9QSFlTICsgMHgxNCkKKyNkZWZpbmUgVklDMl9TT0ZUSU5UCV9fUkVHKFZJQzJfUEhZUyArIDB4MTgpCisjZGVmaW5lIFZJQzJfU09GVElOVENMUglfX1JFRyhWSUMyX1BIWVMgKyAweDFjKQorI2RlZmluZSBWSUMyX1BST1RFQ1QJX19SRUcoVklDMl9QSFlTICsgMHgyMCkKKyNkZWZpbmUgVklDMl9WRUNUQUREUglfX1JFRyhWSUMyX1BIWVMgKyAweDMwKQorI2RlZmluZSBWSUMyX05WQUREUglfX1JFRyhWSUMyX1BIWVMgKyAweDM0KQorI2RlZmluZSBWSUMyX1ZBRDAJX19SRUcoVklDMl9QSFlTICsgMHgxMDApCisjZGVmaW5lIFZJQzJfVkVDVENOVEwwCV9fUkVHKFZJQzJfUEhZUyArIDB4MjAwKQorCisjZGVmaW5lIFZJQ19DTlRMX0VOQUJMRQkoMHgyMCkKKworCS8qIFVTQiBIb3N0IHJlZ2lzdGVycyAoT3BlbiBIQ0kgY29tcGF0aWJsZSkgKi8KKworI2RlZmluZSBVU0JIX0NNRFNUQVRVUwlfX1JFRyhVU0JIX1BIWVMgKyAweDA4KQorCisKKwkvKiBHUElPIHJlZ2lzdGVycyAqLworCisjZGVmaW5lIEdQSU9fSU5UVFlQRTEJX19SRUcoR1BJT19QSFlTICsgMHg0YykJLyogSW50ZXJydXB0IFR5cGUgMSAoRWRnZSkgKi8KKyNkZWZpbmUgR1BJT19JTlRUWVBFMglfX1JFRyhHUElPX1BIWVMgKyAweDUwKQkvKiBJbnRlcnJ1cHQgVHlwZSAyICovCisjZGVmaW5lIEdQSU9fR1BJT0ZFT0kJX19SRUcoR1BJT19QSFlTICsgMHg1NCkJLyogR1BJTyBFbmQtb2YtSW50ZXJydXB0ICovCisjZGVmaW5lIEdQSU9fR1BJT0lOVEVOCV9fUkVHKEdQSU9fUEhZUyArIDB4NTgpCS8qIEdQSU8gSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBHUElPX0lOVFNUQVRVUwlfX1JFRyhHUElPX1BIWVMgKyAweDVjKQkvKiBHUElPIEludGVycnVwdCBTdGF0dXMgKi8KKworCisJLyogU3RhdGljIE1lbW9yeSBDb250cm9sbGVyIHJlZ2lzdGVycyAqLworCisjZGVmaW5lIFNNQ19CQ1IwCV9fUkVHKFNNQ19QSFlTICsgMHgwMCkJLyogQmFuayAwIENvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgU01DX0JDUjEJX19SRUcoU01DX1BIWVMgKyAweDA0KQkvKiBCYW5rIDEgQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSBTTUNfQkNSMglfX1JFRyhTTUNfUEhZUyArIDB4MDgpCS8qIEJhbmsgMiBDb25maWd1cmF0aW9uICovCisjZGVmaW5lIFNNQ19CQ1IzCV9fUkVHKFNNQ19QSFlTICsgMHgwQykJLyogQmFuayAzIENvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgU01DX0JDUjYJX19SRUcoU01DX1BIWVMgKyAweDE4KQkvKiBCYW5rIDYgQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSBTTUNfQkNSNwlfX1JFRyhTTUNfUEhZUyArIDB4MWMpCS8qIEJhbmsgNyBDb25maWd1cmF0aW9uICovCisKKworI2lmZGVmIENPTkZJR19NQUNIX0tFVjdBNDAwCisjIGRlZmluZSBDUExEX1JEX09QVF9ESVBfU1cJX19SRUcxNihDUExEX1BIWVMgKyAweDAwKSAvKiBSZWFkIE9wdGlvbiBTVyAqLworIyBkZWZpbmUgQ1BMRF9XUl9JT19CUkRfQ1RMCV9fUkVHMTYoQ1BMRF9QSFlTICsgMHgwMCkgLyogV3JpdGUgQ29udHJvbCAqLworIyBkZWZpbmUgQ1BMRF9SRF9QQl9LRVlTCV9fUkVHMTYoQ1BMRF9QSFlTICsgMHgwMikgLyogUmVhZCBCdG4gS2V5cyAqLworIyBkZWZpbmUgQ1BMRF9MQVRDSEVEX0lOVFMJX19SRUcxNihDUExEX1BIWVMgKyAweDA0KSAvKiBSZWFkIElOVFIgc3RhdC4gKi8KKyMgZGVmaW5lIENQTERfQ0xfSU5UCQlfX1JFRzE2KENQTERfUEhZUyArIDB4MDQpIC8qIENsZWFyIElOVFIgc3RhdCAqLworIyBkZWZpbmUgQ1BMRF9CT09UX01NQ19TVEFUVVMJX19SRUcxNihDUExEX1BIWVMgKyAweDA2KSAvKiBSL08gKi8KKyMgZGVmaW5lIENQTERfUkRfS1BEX1JPV19TRU5TRQlfX1JFRzE2KENQTERfUEhZUyArIDB4MDgpCisjIGRlZmluZSBDUExEX1dSX1BCX0lOVF9NQVNLCV9fUkVHMTYoQ1BMRF9QSFlTICsgMHgwOCkKKyMgZGVmaW5lIENQTERfUkRfQlJEX0RJU1BfU1cJX19SRUcxNihDUExEX1BIWVMgKyAweDBhKQorIyBkZWZpbmUgQ1BMRF9XUl9FWFRfSU5UX01BU0sJX19SRUcxNihDUExEX1BIWVMgKyAweDBhKQorIyBkZWZpbmUgQ1BMRF9MQ0RfUFdSX0NOVEwJX19SRUcxNihDUExEX1BIWVMgKyAweDBjKQorIyBkZWZpbmUgQ1BMRF9TRVZFTl9TRUcJCV9fUkVHMTYoQ1BMRF9QSFlTICsgMHgwZSkgLyogNyBzZWcuIExFRCBtYXNrICovCisKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoQ09ORklHX01BQ0hfTFBEN0E0MDApIHx8IGRlZmluZWQgKENPTkZJR19NQUNIX0xQRDdBNDA0KQorIyBkZWZpbmUgQ1BMRF9DT05UUk9MCQlfX1JFRzgoQ1BMRDAyX1BIWVMpCisjIGRlZmluZSBDUExEX1NQSV9EQVRBCQlfX1JFRzgoQ1BMRDA2X1BIWVMpCisjIGRlZmluZSBDUExEX1NQSV9DT05UUk9MCV9fUkVHOChDUExEMDhfUEhZUykKKyMgZGVmaW5lIENQTERfU1BJX0VFUFJPTQlfX1JFRzgoQ1BMRDBBX1BIWVMpCisjIGRlZmluZSBDUExEX0lOVEVSUlVQVFMJX19SRUc4KENQTEQwQ19QSFlTKSAvKiBJUlEgbWFzay9zdGF0dXMgKi8KKyMgZGVmaW5lIENQTERfQk9PVF9NT0RFCQlfX1JFRzgoQ1BMRDBFX1BIWVMpCisjIGRlZmluZSBDUExEX0ZMQVNICQlfX1JFRzgoQ1BMRDEwX1BIWVMpCisjIGRlZmluZSBDUExEX1BPV0VSX01HTVQJX19SRUc4KENQTEQxMl9QSFlTKQorIyBkZWZpbmUgQ1BMRF9SRVZJU0lPTgkJX19SRUc4KENQTEQxNF9QSFlTKQorIyBkZWZpbmUgQ1BMRF9HUElPX0VYVAkJX19SRUc4KENQTEQxNl9QSFlTKQorIyBkZWZpbmUgQ1BMRF9HUElPX0RBVEEJCV9fUkVHOChDUExEMThfUEhZUykKKyMgZGVmaW5lIENQTERfR1BJT19ESVIJCV9fUkVHOChDUExEMUFfUEhZUykKKyNlbmRpZgorCisKKwkvKiBUaW1lciByZWdpc3RlcnMgKi8KKworI2RlZmluZSBUSU1FUl9MT0FEMQlfX1JFRyhUSU1FUl9QSFlTICsgMHgwMCkgLyogVGltZXIgMSBpbml0aWFsIHZhbHVlICovCisjZGVmaW5lIFRJTUVSX1ZBTFVFMQlfX1JFRyhUSU1FUl9QSFlTICsgMHgwNCkgLyogVGltZXIgMSBjdXJyZW50IHZhbHVlICovCisjZGVmaW5lIFRJTUVSX0NPTlRST0wxCV9fUkVHKFRJTUVSX1BIWVMgKyAweDA4KSAvKiBUaW1lciAxIGNvbnRyb2wgd29yZCAqLworI2RlZmluZSBUSU1FUl9FT0kxCV9fUkVHKFRJTUVSX1BIWVMgKyAweDBjKSAvKiBUaW1lciAxIGludGVycnVwdCBjbGVhciAqLworCisjZGVmaW5lIFRJTUVSX0xPQUQyCV9fUkVHKFRJTUVSX1BIWVMgKyAweDIwKSAvKiBUaW1lciAyIGluaXRpYWwgdmFsdWUgKi8KKyNkZWZpbmUgVElNRVJfVkFMVUUyCV9fUkVHKFRJTUVSX1BIWVMgKyAweDI0KSAvKiBUaW1lciAyIGN1cnJlbnQgdmFsdWUgKi8KKyNkZWZpbmUgVElNRVJfQ09OVFJPTDIJX19SRUcoVElNRVJfUEhZUyArIDB4MjgpIC8qIFRpbWVyIDIgY29udHJvbCB3b3JkICovCisjZGVmaW5lIFRJTUVSX0VPSTIJX19SRUcoVElNRVJfUEhZUyArIDB4MmMpIC8qIFRpbWVyIDIgaW50ZXJydXB0IGNsZWFyICovCisKKyNkZWZpbmUgVElNRVJfQlVaWkNPTglfX1JFRyhUSU1FUl9QSFlTICsgMHg0MCkgLyogQnV6emVyIGNvbmZpZ3VyYXRpb24gKi8KKworI2RlZmluZSBUSU1FUl9MT0FEMwlfX1JFRyhUSU1FUl9QSFlTICsgMHg4MCkgLyogVGltZXIgMyBpbml0aWFsIHZhbHVlICovCisjZGVmaW5lIFRJTUVSX1ZBTFVFMwlfX1JFRyhUSU1FUl9QSFlTICsgMHg4NCkgLyogVGltZXIgMyBjdXJyZW50IHZhbHVlICovCisjZGVmaW5lIFRJTUVSX0NPTlRST0wzCV9fUkVHKFRJTUVSX1BIWVMgKyAweDg4KSAvKiBUaW1lciAzIGNvbnRyb2wgd29yZCAqLworI2RlZmluZSBUSU1FUl9FT0kzCV9fUkVHKFRJTUVSX1BIWVMgKyAweDhjKSAvKiBUaW1lciAzIGludGVycnVwdCBjbGVhciAqLworCisjZGVmaW5lIFRJTUVSX0NfRU5BQkxFCQkoMTw8NykKKyNkZWZpbmUgVElNRVJfQ19QRVJJT0RJQwkoMTw8NikKKyNkZWZpbmUgVElNRVJfQ19GUkVFUlVOTklORwkoMCkKKyNkZWZpbmUgVElNRVJfQ18yS0haCQkoMHgwMCkJCS8qIDEuOTg2IGtIeiAqLworI2RlZmluZSBUSU1FUl9DXzUwOEtIWgkJKDB4MDgpCisKKwkvKiBHUElPIHJlZ2lzdGVycyAqLworCisjZGVmaW5lIEdQSU9fUEZERAkJX19SRUcoR1BJT19QSFlTICsgMHgzNCkJLyogUEYgZGlyZWN0aW9uICovCisjZGVmaW5lIEdQSU9fSU5UVFlQRTEJCV9fUkVHKEdQSU9fUEhZUyArIDB4NGMpCS8qIElSUSBlZGdlIG9yIGx2bCAgKi8KKyNkZWZpbmUgR1BJT19JTlRUWVBFMgkJX19SRUcoR1BJT19QSFlTICsgMHg1MCkJLyogSVJRIGFjdGl2IGhpL2xvICovCisjZGVmaW5lIEdQSU9fR1BJT0ZFT0kJCV9fUkVHKEdQSU9fUEhZUyArIDB4NTQpCS8qIEdQSU9GIGVuZCBvZiBJUlEgKi8KKyNkZWZpbmUgR1BJT19HUElPRklOVEVOCQlfX1JFRyhHUElPX1BIWVMgKyAweDU4KQkvKiBHUElPRiBJUlEgZW5hYmxlICovCisjZGVmaW5lIEdQSU9fSU5UU1RBVFVTCQlfX1JFRyhHUElPX1BIWVMgKyAweDVjKQkvKiBHUElPRiBJUlEgbGF0Y2ggKi8KKyNkZWZpbmUgR1BJT19SQVdJTlRTVEFUVVMJX19SRUcoR1BJT19QSFlTICsgMHg2MCkJLyogR1BJT0YgSVJRIHJhdyAqLworCisKKyNlbmRpZiAgLyogX0FTTV9BUkNIX1JFR0lTVEVSU19IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L3N5c3RlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxZGY4YWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L3N5c3RlbS5oCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGluY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvc3lzdGVtLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0IENvYXN0YWwgRW52aXJvbm1lbnRhbCBTeXN0ZW1zCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkIGFyY2hfaWRsZSh2b2lkKQoreworCWNwdV9kb19pZGxlICgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUpCit7CisJY3B1X3Jlc2V0ICgwKTsKK30KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvdGltZXguaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvdGltZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTcyNmI2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbGg3YTQweC90aW1leC5oCkBAIC0wLDAgKzEsMTcgQEAKKy8qIGluY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvdGltZXguaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQgQ29hc3RhbCBFbnZpcm9ubWVudGFsIFN5c3RlbXMKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8YXNtL2FyY2gvY29uc3RhbnRzLmg+CisKKyNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFCQkoUExMX0NMT0NLLzYvMTYpCisKKy8qCisjZGVmaW5lIENMT0NLX1RJQ0tfUkFURQkJMzY4NjQwMAorKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvdW5jb21wcmVzcy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbGg3YTQweC91bmNvbXByZXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM4YWI2NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvdW5jb21wcmVzcy5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qIGluY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvdW5jb21wcmVzcy5oCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNCBDb2FzdGFsIEVudmlyb25tZW50YWwgU3lzdGVtcworICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdpc3RlcnMuaD4KKworI2lmbmRlZiBVQVJUX1JfREFUQQorIyBkZWZpbmUgVUFSVF9SX0RBVEEJKDB4MDApCisjZW5kaWYKKyNpZm5kZWYgVUFSVF9SX1NUQVRVUworIyBkZWZpbmUgVUFSVF9SX1NUQVRVUwkoMHgxMCkKKyNlbmRpZgorI2RlZmluZSBuVHhSZHkgIAkoMHgyMCkJLyogTm90IFR4UmVhZHkgKGxpdGVyYWxseSBUeCBGSUZPIGZ1bGwpICovCisKKwkvKiBBY2Nlc3MgVUFSVCB3aXRoIHBoeXNpY2FsIGFkZHJlc3NlcyBiZWZvcmUgTU1VIGlzIHNldHVwICovCisjZGVmaW5lIFVBUlRfU1RBVFVTICgqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcqKSAoVUFSVDJfUEhZUyArIFVBUlRfUl9TVEFUVVMpKQorI2RlZmluZSBVQVJUX0RBVEEgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nKikgKFVBUlQyX1BIWVMgKyBVQVJUX1JfREFUQSkpCisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgcHV0YyAoY2hhciBjaCkKK3sKKwl3aGlsZSAoVUFSVF9TVEFUVVMgJiBuVHhSZHkpCisJCTsKKwlVQVJUX0RBVEEgPSBjaDsKK30KKworc3RhdGljIHZvaWQgcHV0c3RyIChjb25zdCBjaGFyKiBzeikKK3sKKwlmb3IgKDsgKnN6OyArK3N6KSB7CisJCXB1dGMgKCpzeik7CisJCWlmICgqc3ogPT0gJ1xuJykKKwkJCXB1dGMgKCdccicpOworCX0KK30KKworCS8qIE5VTEwgZnVuY3Rpb25zOyB3ZSBkb24ndCBwcmVzZW50bHkgbmVlZCB0aGVtICovCisjZGVmaW5lIGFyY2hfZGVjb21wX3NldHVwKCkKKyNkZWZpbmUgYXJjaF9kZWNvbXBfd2RvZygpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L3ZtYWxsb2MuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvdm1hbGxvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhYzYwNzkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L3ZtYWxsb2MuaApAQCAtMCwwICsxLDIxIEBACisvKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L3ZtYWxsb2MuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQgQ29hc3RhbCBFbnZpcm9ubWVudGFsIFN5c3RlbXMKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisvKgorICogSnVzdCBhbnkgYXJiaXRyYXJ5IG9mZnNldCB0byB0aGUgc3RhcnQgb2YgdGhlIHZtYWxsb2MgVk0gYXJlYTogdGhlCisgKiBjdXJyZW50IDhNQiB2YWx1ZSBqdXN0IG1lYW5zIHRoYXQgdGhlcmUgd2lsbCBiZSBhIDhNQiAiaG9sZSIgYWZ0ZXIKKyAqIHRoZSBwaHlzaWNhbCBtZW1vcnkgdW50aWwgdGhlIGtlcm5lbCB2aXJ0dWFsIG1lbW9yeSBzdGFydHMuICBUaGF0CisgKiBtZWFucyB0aGF0IGFueSBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyB3aWxsIGhvcGVmdWxseSBiZQorICogY2F1Z2h0LiAgVGhlIHZtYWxsb2MoKSByb3V0aW5lcyBsZWF2ZXMgYSBob2xlIG9mIDRrQiAob25lIHBhZ2UpCisgKiBiZXR3ZWVuIGVhY2ggdm1hbGxvY2VkIGFyZWEgZm9yIHRoZSBzYW1lIHJlYXNvbi4gOykKKyAqLworI2RlZmluZSBWTUFMTE9DX09GRlNFVAkgICg4KjEwMjQqMTAyNCkKKyNkZWZpbmUgVk1BTExPQ19TVEFSVAkgICgoKHVuc2lnbmVkIGxvbmcpaGlnaF9tZW1vcnkgKyBWTUFMTE9DX09GRlNFVCkgJiB+KFZNQUxMT0NfT0ZGU0VULTEpKQorI2RlZmluZSBWTUFMTE9DX0VORCAgICAgICAoMHhlODAwMDAwMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvYWljMjMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvYWljMjMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTBiYWMyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9haWMyMy5oCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9haWMyMy5oCisgKgorICogSGFyZHdhcmUgZGVmaW5pdGlvbnMgZm9yIFRJIFRMVjMyMEFJQzIzIGF1ZGlvIGNvZGVjCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAyIFJpZGdlUnVuLCBJbmMuCisgKiBBdXRob3I6IFN0ZXZlIEpvaG5zb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisgKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4KKyAqIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKKyAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSAgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9BSUMyM19ICisjZGVmaW5lIF9fQVNNX0FSQ0hfQUlDMjNfSAorCisvLyBDb2RlYyBUTFYzMjBBSUMyMworI2RlZmluZSBMRUZUX0xJTkVfVk9MVU1FX0FERFIJCTB4MDAKKyNkZWZpbmUgUklHSFRfTElORV9WT0xVTUVfQUREUgkJMHgwMQorI2RlZmluZSBMRUZUX0NIQU5ORUxfVk9MVU1FX0FERFIJMHgwMgorI2RlZmluZSBSSUdIVF9DSEFOTkVMX1ZPTFVNRV9BRERSCTB4MDMKKyNkZWZpbmUgQU5BTE9HX0FVRElPX0NPTlRST0xfQUREUgkweDA0CisjZGVmaW5lIERJR0lUQUxfQVVESU9fQ09OVFJPTF9BRERSCTB4MDUKKyNkZWZpbmUgUE9XRVJfRE9XTl9DT05UUk9MX0FERFIJCTB4MDYKKyNkZWZpbmUgRElHSVRBTF9BVURJT19GT1JNQVRfQUREUgkweDA3CisjZGVmaW5lIFNBTVBMRV9SQVRFX0NPTlRST0xfQUREUgkweDA4CisjZGVmaW5lIERJR0lUQUxfSU5URVJGQUNFX0FDVF9BRERSCTB4MDkKKyNkZWZpbmUgUkVTRVRfQ09OVFJPTF9BRERSCQkweDBGCisKKy8vIExlZnQgKHJpZ2h0KSBsaW5lIGlucHV0IHZvbHVtZSBjb250cm9sIHJlZ2lzdGVyCisjZGVmaW5lIExSU19FTkFCTEVECQkJMHgwMTAwCisjZGVmaW5lIExJTV9NVVRFRAkJCTB4MDA4MAorI2RlZmluZSBMSVZfREVGQVVMVAkJCTB4MDAxNworI2RlZmluZSBMSVZfTUFYCQkJCTB4MDAxZgorI2RlZmluZSBMSVZfTUlOCQkJCTB4MDAwMAorCisvLyBMZWZ0IChyaWdodCkgY2hhbm5lbCBoZWFkcGhvbmUgdm9sdW1lIGNvbnRyb2wgcmVnaXN0ZXIKKyNkZWZpbmUgTFpDX09OCQkJCTB4MDA4MAorI2RlZmluZSBMSFZfREVGQVVMVAkJCTB4MDA3OQorI2RlZmluZSBMSFZfTUFYCQkJCTB4MDA3ZgorI2RlZmluZSBMSFZfTUlOCQkJCTB4MDAwMAorCisvLyBBbmFsb2cgYXVkaW8gcGF0aCBjb250cm9sIHJlZ2lzdGVyCisjZGVmaW5lIFNURV9FTkFCTEVECQkJMHgwMDIwCisjZGVmaW5lIERBQ19TRUxFQ1RFRAkJCTB4MDAxMAorI2RlZmluZSBCWVBBU1NfT04JCQkweDAwMDgKKyNkZWZpbmUgSU5TRUxfTUlDCQkJMHgwMDA0CisjZGVmaW5lIE1JQ01fTVVURUQJCQkweDAwMDIKKyNkZWZpbmUgTUlDQl8yMERCCQkJMHgwMDAxCisKKy8vIERpZ2l0YWwgYXVkaW8gcGF0aCBjb250cm9sIHJlZ2lzdGVyCisjZGVmaW5lIERBQ01fTVVURQkJCTB4MDAwOAorI2RlZmluZSBERUVNUF8zMksJCQkweDAwMDIKKyNkZWZpbmUgREVFTVBfNDRLCQkJMHgwMDA0CisjZGVmaW5lIERFRU1QXzQ4SwkJCTB4MDAwNgorI2RlZmluZSBBRENIUF9PTgkJCTB4MDAwMQorCisvLyBQb3dlciBjb250cm9sIGRvd24gcmVnaXN0ZXIKKyNkZWZpbmUgREVWSUNFX1BPV0VSX09GRgkgIAkweDAwODAKKyNkZWZpbmUgQ0xLX09GRgkJCQkweDAwNDAKKyNkZWZpbmUgT1NDX09GRgkJCQkweDAwMjAKKyNkZWZpbmUgT1VUX09GRgkJCQkweDAwMTAKKyNkZWZpbmUgREFDX09GRgkJCQkweDAwMDgKKyNkZWZpbmUgQURDX09GRgkJCQkweDAwMDQKKyNkZWZpbmUgTUlDX09GRgkJCQkweDAwMDIKKyNkZWZpbmUgTElORV9PRkYJCQkweDAwMDEKKworLy8gRGlnaXRhbCBhdWRpbyBpbnRlcmZhY2UgcmVnaXN0ZXIKKyNkZWZpbmUgTVNfTUFTVEVSCQkJMHgwMDQwCisjZGVmaW5lIExSU1dBUF9PTgkJCTB4MDAyMAorI2RlZmluZSBMUlBfT04JCQkJMHgwMDEwCisjZGVmaW5lIElXTF8xNgkJCQkweDAwMDAKKyNkZWZpbmUgSVdMXzIwCQkJCTB4MDAwNAorI2RlZmluZSBJV0xfMjQJCQkJMHgwMDA4CisjZGVmaW5lIElXTF8zMgkJCQkweDAwMEMKKyNkZWZpbmUgRk9SX0kyUwkJCQkweDAwMDIKKyNkZWZpbmUgRk9SX0RTUAkJCQkweDAwMDMKKworLy8gU2FtcGxlIHJhdGUgY29udHJvbCByZWdpc3RlcgorI2RlZmluZSBDTEtPVVRfSEFMRgkJCTB4MDA4MAorI2RlZmluZSBDTEtJTl9IQUxGCQkJMHgwMDQwCisjZGVmaW5lIEJPU1JfMzg0ZnMJCQkweDAwMDIgLy8gQk9TUl8yNzJmcyB3aGVuIGluIFVTQiBtb2RlCisjZGVmaW5lIFVTQl9DTEtfT04JCQkweDAwMDEKKyNkZWZpbmUgU1JfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAweGYKKyNkZWZpbmUgQ0xLT1VUX1NISUZUICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIENMS0lOX1NISUZUICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBTUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQk9TUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIERpZ2l0YWwgaW50ZXJmYWNlIHJlZ2lzdGVyCisjZGVmaW5lIEFDVF9PTgkJCQkweDAwMDEKKworI2RlZmluZSBUTFYzMjBBSUMyM0lEMSAgICAgICAgICAgICAgICAgICgweDFhKQkvLyBjcyBsb3cKKyNkZWZpbmUgVExWMzIwQUlDMjNJRDIgICAgICAgICAgICAgICAgICAoMHgxYikJLy8gY3MgaGlnaAorCisjZW5kaWYgLyogX19BU01fQVJDSF9BSUMyM19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLWgyLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLWgyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBmMDAyYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvYm9hcmQtaDIuaApAQCAtMCwwICsxLDQ3IEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC1oMi5oCisgKgorICogSGFyZHdhcmUgZGVmaW5pdGlvbnMgZm9yIFRJIE9NQVAxNjEwIEgyIGJvYXJkLgorICoKKyAqIENsZWFudXAgZm9yIExpbnV4LTIuNiBieSBEaXJrIEJlaG1lIDxkaXJrLmJlaG1lQGRlLmJvc2NoLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisgKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4KKyAqIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKKyAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfT01BUF9IMl9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfT01BUF9IMl9ICisKKy8qIFBsYWNlaG9sZGVyIGZvciBIMiBzcGVjaWZpYyBkZWZpbmVzICovCisKKy8qIEF0IE9NQVAxNjEwIElubm92YXRvciB0aGUgRXRoZXJuZXQgaXMgZGlyZWN0bHkgY29ubmVjdGVkIHRvIENTMSAqLworI2RlZmluZSBPTUFQMTYxMF9FVEhSX1NUQVJUCQkweDA0MDAwMzAwCisKKy8qIEludGVsIFNUUkFUQSBOT1IgZmxhc2ggYXQgQ1MzIG9yIENTMkIoTkFORCBCb290KSAqLworI2RlZmluZSBPTUFQX05PUl9GTEFTSF9TSVpFICAgICAgICAgICAgIFNaXzMyTQorI2RlZmluZSBPTUFQX05PUl9GTEFTSF9TVEFSVDEgICAgICAgICAgIDB4MEMwMDAwMDAgLyogQ1MzICovCisjZGVmaW5lIE9NQVBfTk9SX0ZMQVNIX1NUQVJUMiAgICAgICAgICAgMHgwQTAwMDAwMCAvKiBDUzJCICovCisKKy8qIFNhbXN1bmcgTkFORCBmbGFzaCBhdCBDUzJCIG9yIENTMyhOQU5EIEJvb3QpICovCisjZGVmaW5lIE9NQVBfTkFORF9GTEFTSF9TVEFSVDEgICAgICAgICAgIDB4MEEwMDAwMDAgLyogQ1MyQiAqLworI2RlZmluZSBPTUFQX05BTkRfRkxBU0hfU1RBUlQyICAgICAgICAgICAweDBDMDAwMDAwIC8qIENTMyAqLworCisjZW5kaWYgLyogIF9fQVNNX0FSQ0hfT01BUF9IMl9IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvYm9hcmQtaDMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvYm9hcmQtaDMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGQxY2QyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC1oMy5oCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLWgzLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgUmlkZ2VSdW4sIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKyAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTgorICogTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKyNpZm5kZWYgX19BU01fQVJDSF9PTUFQX0gzX0gKKyNkZWZpbmUgX19BU01fQVJDSF9PTUFQX0gzX0gKKworLyogSW4gT01BUDE3MTAgSDMgdGhlIEV0aGVybmV0IGlzIGRpcmVjdGx5IGNvbm5lY3RlZCB0byBDUzEgKi8KKyNkZWZpbmUgT01BUDE3MTBfRVRIUl9TVEFSVAkJMHgwNDAwMDMwMAorCisvKiBJbnRlbCBTVFJBVEEgTk9SIGZsYXNoIGF0IENTMyBvciBDUzJCKE5BTkQgQm9vdCkgKi8KKyNkZWZpbmUgT01BUF9OT1JfRkxBU0hfU0laRSAgICAgICAgICAgICBTWl8zMk0KKyNkZWZpbmUgT01BUF9OT1JfRkxBU0hfU1RBUlQxIAkJMHgwQzAwMDAwMCAvKiBDUzMgKi8KKyNkZWZpbmUgT01BUF9OT1JfRkxBU0hfU1RBUlQyIAkJMHgwQTAwMDAwMCAvKiBDUzJCICovCisKKy8qIFNhbXN1bmcgTkFORCBmbGFzaCBhdCBDUzJCIG9yIENTMyhOQU5EIEJvb3QpICovCisjZGVmaW5lIE9NQVBfTkFORF9GTEFTSF9TVEFSVDEgICAgICAgICAgIDB4MEEwMDAwMDAgLyogQ1MyQiAqLworI2RlZmluZSBPTUFQX05BTkRfRkxBU0hfU1RBUlQyICAgICAgICAgICAweDBDMDAwMDAwIC8qIENTMyAqLworCisjZGVmaW5lIE1BWElSUU5VTQkJCShJSF9CT0FSRF9CQVNFKQorI2RlZmluZSBNQVhGSVFOVU0JCQlNQVhJUlFOVU0KKyNkZWZpbmUgTUFYU1dJTlVNCQkJTUFYSVJRTlVNCisKKyNkZWZpbmUgTlJfSVJRUwkJCQkoTUFYSVJRTlVNICsgMSkKKworCisjZW5kaWYgLyogIF9fQVNNX0FSQ0hfT01BUF9IM19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLWg0LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLWg0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzkxMzhkY2YKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLWg0LmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvYm9hcmQtaDQuaAorICoKKyAqIEhhcmR3YXJlIGRlZmluaXRpb25zIGZvciBUSSBPTUFQMTYxMCBINCBib2FyZC4KKyAqCisgKiBJbml0aWFsIGNyZWF0aW9uIGJ5IERpcmsgQmVobWUgPGRpcmsuYmVobWVAZGUuYm9zY2guY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKyAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTgorICogTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9PTUFQX0g0X0gKKyNkZWZpbmUgX19BU01fQVJDSF9PTUFQX0g0X0gKKworLyogUGxhY2Vob2xkZXIgZm9yIEg0IHNwZWNpZmljIGRlZmluZXMgKi8KKworI2VuZGlmIC8qICBfX0FTTV9BUkNIX09NQVBfSDRfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLWlubm92YXRvci5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC1pbm5vdmF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjFhYmFlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC1pbm5vdmF0b3IuaApAQCAtMCwwICsxLDgwIEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC1pbm5vdmF0b3IuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMSBSaWRnZVJ1biwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKyAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTgorICogTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisjaWZuZGVmIF9fQVNNX0FSQ0hfT01BUF9JTk5PVkFUT1JfSAorI2RlZmluZSBfX0FTTV9BUkNIX09NQVBfSU5OT1ZBVE9SX0gKKworI2lmIGRlZmluZWQgKENPTkZJR19BUkNIX09NQVAxNTEwKQorCisjaWZuZGVmIE9NQVBfU0RSQU1fREVWSUNFCisjZGVmaW5lIE9NQVBfU0RSQU1fREVWSUNFCQkJRDI1Nk1fMVgxNl80QgorI2VuZGlmCisKKyNkZWZpbmUgT01BUDE1MTBQMV9JTUlGX1BSSV9WQUxVRQkJMHgwMAorI2RlZmluZSBPTUFQMTUxMFAxX0VNSUZTX1BSSV9WQUxVRQkJMHgwMAorI2RlZmluZSBPTUFQMTUxMFAxX0VNSUZGX1BSSV9WQUxVRQkJMHgwMAorCisvKgorICogVGhlc2UgZGVmaW5pdGlvbnMgZGVmaW5lIGFuIGFyZWEgb2YgRkxBU0ggc2V0IGFzaWRlCisgKiBmb3IgdGhlIHVzZSBvZiBNVEQvSkZGUzIuIFRoaXMgaXMgdGhlIGFyZWEgb2YgZmxhc2gKKyAqIHRoYXQgYSBKRkZTMiBmaWxlc3lzdGVtIHdpbGwgcmVzaWRlIHdoaWNoIGlzIG1vdW50ZWQKKyAqIGF0IGJvb3Qgd2l0aCB0aGUgInJvb3Q9L2Rldi9tdGRibG9jay8wIHJ3IgorICogY29tbWFuZCBsaW5lIG9wdGlvbi4gVGhlIGZsYXNoIGFkZHJlc3MgdXNlZCBoZXJlIG11c3QKKyAqIGZhbGwgd2l0aGluIHRoZSBsZWdhbCByYW5nZSBkZWZpbmVkIGJ5IHJybG9hZCBmb3Igc3RvcmluZworICogdGhlIGZpbGVzeXN0ZW0gY29tcG9uZW50LiBUaGlzIGFkZHJlc3Mgd2lsbCBiZSBzdWZmaWNpZW50bHkKKyAqIGRlZXAgaW50byB0aGUgb3ZlcmFsbCBmbGFzaCByYW5nZSB0byBhdm9pZCB0aGUgb3RoZXIKKyAqIGNvbXBvbmVudHMgYWxzbyBzdG9yZWQgaW4gZmxhc2ggc3VjaCBhcyB0aGUgYm9vdGxvYWRlciwKKyAqIHRoZSBib290bG9hZGVyIHBhcmFtcywgYW5kIHRoZSBrZXJuZWwuCisgKiBUaGUgU1cyIHNldHRpbmdzIGZvciB0aGUgbWFwIGJlbG93IGFyZToKKyAqIDEgb2ZmLCAyIG9mZiwgMyBvbiwgNCBvZmYuCisgKi8KKworLyogSW50ZWwgZmxhc2hfMCwgcGFydGl0aW9uZWQgYXMgZXhwZWN0ZWQgYnkgcnJsb2FkICovCisjZGVmaW5lIE9NQVBfRkxBU0hfMF9CQVNFCTB4RDgwMDAwMDAKKyNkZWZpbmUgT01BUF9GTEFTSF8wX1NUQVJUCTB4MDAwMDAwMDAKKyNkZWZpbmUgT01BUF9GTEFTSF8wX1NJWkUJU1pfMTZNCisKKy8qIEludGVsIGZsYXNoXzEsIHVzZWQgZm9yIGNyYW1mcyBvciBvdGhlciBmbGFzaCBmaWxlIHN5c3RlbXMgKi8KKyNkZWZpbmUgT01BUF9GTEFTSF8xX0JBU0UJMHhEOTAwMDAwMAorI2RlZmluZSBPTUFQX0ZMQVNIXzFfU1RBUlQJMHgwMTAwMDAwMAorI2RlZmluZSBPTUFQX0ZMQVNIXzFfU0laRQlTWl8xNk0KKworI2RlZmluZSBOUl9GUEdBX0lSUVMJCTI0CisjZGVmaW5lIE5SX0lSUVMgICAgICAgICAgICAgICAgIElIX0JPQVJEX0JBU0UgKyBOUl9GUEdBX0lSUVMKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK3ZvaWQgZnBnYV93cml0ZSh1bnNpZ25lZCBjaGFyIHZhbCwgaW50IHJlZyk7Cit1bnNpZ25lZCBjaGFyIGZwZ2FfcmVhZChpbnQgcmVnKTsKKyNlbmRpZgorCisjZW5kaWYgLyogQ09ORklHX0FSQ0hfT01BUDE1MTAgKi8KKworI2lmIGRlZmluZWQgKENPTkZJR19BUkNIX09NQVAxNlhYKQorCisvKiBBdCBPTUFQMTYxMCBJbm5vdmF0b3IgdGhlIEV0aGVybmV0IGlzIGRpcmVjdGx5IGNvbm5lY3RlZCB0byBDUzEgKi8KKyNkZWZpbmUgSU5OT1ZBVE9SMTYxMF9FVEhSX1NUQVJUCTB4MDQwMDAzMDAKKworI2VuZGlmIC8qIENPTkZJR19BUkNIX09NQVAxNjEwICovCisjZW5kaWYgLyogX19BU01fQVJDSF9PTUFQX0lOTk9WQVRPUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLW5ldHN0YXIuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvYm9hcmQtbmV0c3Rhci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3Y2MwZmIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLW5ldHN0YXIuaApAQCAtMCwwICsxLDE5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0IDJOIFRlbGVrb211bmlrYWNlLCBMYWRpc2xhdiBNaWNobCA8bWljaGxAMm4uY3o+CisgKgorICogSGFyZHdhcmUgZGVmaW5pdGlvbnMgZm9yIE9NQVA1OTEwIGJhc2VkIE5ldFN0YXIgYm9hcmQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfTkVUU1RBUl9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfTkVUU1RBUl9ICisKKyNpbmNsdWRlIDxhc20vYXJjaC90Yy5oPgorCisjZGVmaW5lIE9NQVBfTkFORF9GTEFTSF9TVEFSVDEJCU9NQVBfQ1MxX1BIWVMgKyAoMSA8PCAyMykKKyNkZWZpbmUgT01BUF9OQU5EX0ZMQVNIX1NUQVJUMgkJT01BUF9DUzFfUEhZUyArICgyIDw8IDIzKQorCisjZW5kaWYgLyogIF9fQVNNX0FSQ0hfTkVUU1RBUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLW9zay5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC1vc2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWE0OWEwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC1vc2suaApAQCAtMCwwICsxLDQxIEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC1vc2suaAorICoKKyAqIEhhcmR3YXJlIGRlZmluaXRpb25zIGZvciBUSSBPTUFQNTkxMiBPU0sgYm9hcmQuCisgKgorICogV3JpdHRlbiBieSBEaXJrIEJlaG1lIDxkaXJrLmJlaG1lQGRlLmJvc2NoLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisgKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4KKyAqIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKKyAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfT01BUF9PU0tfSAorI2RlZmluZSBfX0FTTV9BUkNIX09NQVBfT1NLX0gKKworLyogQXQgT01BUDU5MTIgT1NLIHRoZSBFdGhlcm5ldCBpcyBkaXJlY3RseSBjb25uZWN0ZWQgdG8gQ1MxICovCisjZGVmaW5lIE9NQVBfT1NLX0VUSFJfU1RBUlQJCTB4MDQ4MDAzMDAKKworLyogTWljcm9uIE5PUiBmbGFzaCBhdCBDUzMgbWFwcGVkIHRvIGFkZHJlc3MgMHgwIGlmIEJNIGJpdCBpcyAxICovCisjZGVmaW5lIE9NQVBfT1NLX05PUl9GTEFTSF9CQVNFCQkweEQ4MDAwMDAwCisjZGVmaW5lIE9NQVBfT1NLX05PUl9GTEFTSF9TSVpFCQlTWl8zMk0KKyNkZWZpbmUgT01BUF9PU0tfTk9SX0ZMQVNIX1NUQVJUCTB4MDAwMDAwMDAKKworI2VuZGlmIC8qICBfX0FTTV9BUkNIX09NQVBfT1NLX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC1wZXJzZXVzMi5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC1wZXJzZXVzMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjMjI0Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLXBlcnNldXMyLmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLXBlcnNldXMyLmgKKyAqCisgKiAgQ29weXJpZ2h0IDIwMDMgYnkgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisgKiAgICBPTUFQNzMwIC8gUGVyc2V1czIgc3VwcG9ydCBieSBKZWFuIFBpaGV0CisgKgorICogQ29weXJpZ2h0IChDKSAyMDAxIFJpZGdlUnVuLCBJbmMuIChodHRwOi8vd3d3LnJpZGdlcnVuLmNvbSkKKyAqIEF1dGhvcjogUmlkZ2VSdW4sIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisgKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4KKyAqIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKKyAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworI2lmbmRlZiBfX0FTTV9BUkNIX09NQVBfUEVSU0VVUzJfSAorI2RlZmluZSBfX0FTTV9BUkNIX09NQVBfUEVSU0VVUzJfSAorCisjaW5jbHVkZSA8YXNtL2FyY2gvZnBnYS5oPgorCisjaWZuZGVmIE9NQVBfU0RSQU1fREVWSUNFCisjZGVmaW5lIE9NQVBfU0RSQU1fREVWSUNFCQlEMjU2TV8xWDE2XzRCCisjZW5kaWYKKworLyoKKyAqIFRoZXNlIGRlZmluaXRpb25zIGRlZmluZSBhbiBhcmVhIG9mIEZMQVNIIHNldCBhc2lkZQorICogZm9yIHRoZSB1c2Ugb2YgTVREL0pGRlMyLiBUaGlzIGlzIHRoZSBhcmVhIG9mIGZsYXNoCisgKiB0aGF0IGEgSkZGUzIgZmlsZXN5c3RlbSB3aWxsIHJlc2lkZSB3aGljaCBpcyBtb3VudGVkCisgKiBhdCBib290IHdpdGggdGhlICJyb290PS9kZXYvbXRkYmxvY2svMCBydyIKKyAqIGNvbW1hbmQgbGluZSBvcHRpb24uCisgKi8KKworLyogSW50ZWwgZmxhc2hfMCwgcGFydGl0aW9uZWQgYXMgZXhwZWN0ZWQgYnkgcnJsb2FkICovCisjZGVmaW5lIE9NQVBfRkxBU0hfMF9CQVNFCTB4RDgwMDAwMDAJLyogVkEgKi8KKyNkZWZpbmUgT01BUF9GTEFTSF8wX1NUQVJUCTB4MDAwMDAwMDAJLyogUEEgKi8KKyNkZWZpbmUgT01BUF9GTEFTSF8wX1NJWkUJU1pfMzJNCisKKyNkZWZpbmUgTUFYSVJRTlVNCQlJSF9CT0FSRF9CQVNFCisjZGVmaW5lIE1BWEZJUU5VTQkJTUFYSVJRTlVNCisjZGVmaW5lIE1BWFNXSU5VTQkJTUFYSVJRTlVNCisKKyNkZWZpbmUgTlJfSVJRUwkJCShNQVhJUlFOVU0gKyAxKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvYm9hcmQtdm9pY2VibHVlLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLXZvaWNlYmx1ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzOTc3YjgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLXZvaWNlYmx1ZS5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgMk4gVGVsZWtvbXVuaWthY2UsIExhZGlzbGF2IE1pY2hsIDxtaWNobEAybi5jej4KKyAqCisgKiBIYXJkd2FyZSBkZWZpbml0aW9ucyBmb3IgT01BUDU5MTAgYmFzZWQgVm9pY2VCbHVlIGJvYXJkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX1ZPSUNFQkxVRV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfVk9JQ0VCTFVFX0gKKworI2lmIChFWFRFUk5BTF9NQVhfTlJfUE9SVFMgPCA0KQorI3VuZGVmIEVYVEVSTkFMX01BWF9OUl9QT1JUUworI2RlZmluZSBFWFRFUk5BTF9NQVhfTlJfUE9SVFMJNAorI2VuZGlmCisKK2V4dGVybiB2b2lkIHZvaWNlYmx1ZV93ZHRfZW5hYmxlKHZvaWQpOworZXh0ZXJuIHZvaWQgdm9pY2VibHVlX3dkdF9kaXNhYmxlKHZvaWQpOworZXh0ZXJuIHZvaWQgdm9pY2VibHVlX3dkdF9waW5nKHZvaWQpOworZXh0ZXJuIHZvaWQgdm9pY2VibHVlX3Jlc2V0KHZvaWQpOworCisjZW5kaWYgLyogIF9fQVNNX0FSQ0hfVk9JQ0VCTFVFX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjZWZkNjAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLmgKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC5oCisgKgorICogIEluZm9ybWF0aW9uIHN0cnVjdHVyZXMgZm9yIGJvYXJkLXNwZWNpZmljIGRhdGEKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0CU5va2lhIENvcnBvcmF0aW9uCisgKiAgV3JpdHRlbiBieSBKdWhhIFlyavZs5CA8anVoYS55cmpvbGFAbm9raWEuY29tPgorICovCisKKyNpZm5kZWYgX09NQVBfQk9BUkRfSAorI2RlZmluZSBfT01BUF9CT0FSRF9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKiBEaWZmZXJlbnQgcGVyaXBoZXJhbCBpZHMgKi8KKyNkZWZpbmUgT01BUF9UQUdfQ0xPQ0sJCTB4NGYwMQorI2RlZmluZSBPTUFQX1RBR19NTUMJCTB4NGYwMgorI2RlZmluZSBPTUFQX1RBR19VQVJUCQkweDRmMDMKKyNkZWZpbmUgT01BUF9UQUdfVVNCCQkweDRmMDQKKyNkZWZpbmUgT01BUF9UQUdfTENECQkweDRmMDUKKyNkZWZpbmUgT01BUF9UQUdfR1BJT19TV0lUQ0gJMHg0ZjA2CisKKyNkZWZpbmUgT01BUF9UQUdfQk9PVF9SRUFTT04gICAgMHg0ZjgwCisjZGVmaW5lIE9NQVBfVEFHX0ZMQVNIX1BBUlQJMHg0ZjgxCisKK3N0cnVjdCBvbWFwX2Nsb2NrX2NvbmZpZyB7CisJLyogMCBmb3IgMTIgTUh6LCAxIGZvciAxMyBNSHogYW5kIDIgZm9yIDE5LjIgTUh6ICovCisJdTggc3lzdGVtX2Nsb2NrX3R5cGU7Cit9OworCitzdHJ1Y3Qgb21hcF9tbWNfY29uZmlnIHsKKwl1OCBtbWNfYmxvY2tzOworCXMxNiBtbWMxX3Bvd2VyX3BpbiwgbW1jMl9wb3dlcl9waW47CisJczE2IG1tYzFfc3dpdGNoX3BpbiwgbW1jMl9zd2l0Y2hfcGluOworfTsKKworc3RydWN0IG9tYXBfdWFydF9jb25maWcgeworCXU4IGNvbnNvbGVfdWFydDsKKwl1MzIgY29uc29sZV9zcGVlZDsKK307CisKK3N0cnVjdCBvbWFwX3VzYl9jb25maWcgeworCS8qIENvbmZpZ3VyZSBkcml2ZXJzIGFjY29yZGluZyB0byB0aGUgY29ubmVjdG9ycyBvbiB5b3VyIGJvYXJkOgorCSAqICAtICJBIiBjb25uZWN0b3IgKHJlY3RhZ3VsYXIpCisJICoJLi4uIGZvciBob3N0L09IQ0kgdXNlLCBzZXQgInJlZ2lzdGVyX2hvc3QiLgorCSAqICAtICJCIiBjb25uZWN0b3IgKHNxdWFyaXNoKSBvciAiTWluaS1CIgorCSAqCS4uLiBmb3IgZGV2aWNlL2dhZGdldCB1c2UsIHNldCAicmVnaXN0ZXJfZGV2Ii4KKwkgKiAgLSAiTWluaS1BQiIgY29ubmVjdG9yICh2ZXJ5IHNpbWlsYXIgdG8gTWluaS1CKQorCSAqCS4uLiBmb3IgT1RHIHVzZSBhcyBkZXZpY2UgT1IgaG9zdCwgaW5pdGlhbGl6ZSAib3RnIgorCSAqLworCXVuc2lnbmVkCXJlZ2lzdGVyX2hvc3Q6MTsKKwl1bnNpZ25lZAlyZWdpc3Rlcl9kZXY6MTsKKwl1OAkJb3RnOwkvKiBwb3J0IG51bWJlciwgMS1iYXNlZDogIHVzYjEgPT0gMiAqLworCisJdTgJCWhtY19tb2RlOworCisJLyogaW1wbGljaXRseSB0cnVlIGlmIG90ZzogIGhvc3Qgc3VwcG9ydHMgcmVtb3RlIHdha2V1cD8gKi8KKwl1OAkJcndjOworCisJLyogc2lnbmFsaW5nIHBpbnMgdXNlZCB0byB0YWxrIHRvIHRyYW5zY2VpdmVyIG9uIHVzYk46CisJICogIDAgPT0gdXNiTiB1bnVzZWQKKwkgKiAgMiA9PSB1c2IwLW9ubHksIHVzaW5nIGludGVybmFsIHRyYW5zY2VpdmVyCisJICogIDMgPT0gMyB3aXJlIGJpZGlyZWN0aW9uYWwKKwkgKiAgNCA9PSA0IHdpcmUgYmlkaXJlY3Rpb25hbAorCSAqICA2ID09IDYgd2lyZSB1bmlkaXJlY3Rpb25hbCAob3IgVExMKQorCSAqLworCXU4CQlwaW5zWzNdOworfTsKKworc3RydWN0IG9tYXBfbGNkX2NvbmZpZyB7CisJY2hhciBwYW5lbF9uYW1lWzE2XTsKKwljaGFyIGN0cmxfbmFtZVsxNl07Cit9OworCisvKiBDb3ZlcjoKKyAqICAgICAgaGlnaCAtPiBjbG9zZWQKKyAqICAgICAgbG93ICAtPiBvcGVuCisgKiBDb25uZWN0aW9uOgorICogICAgICBoaWdoIC0+IGNvbm5lY3RlZAorICogICAgICBsb3cgIC0+IGRpc2Nvbm5lY3RlZAorICovCisjZGVmaW5lIE9NQVBfR1BJT19TV0lUQ0hfVFlQRV9DT1ZFUgkJMHgwMDAwCisjZGVmaW5lIE9NQVBfR1BJT19TV0lUQ0hfVFlQRV9DT05ORUNUSU9OCTB4MDAwMQorI2RlZmluZSBPTUFQX0dQSU9fU1dJVENIX0ZMQUdfSU5WRVJURUQgICAgICAgICAgMHgwMDAxCitzdHJ1Y3Qgb21hcF9ncGlvX3N3aXRjaF9jb25maWcgeworCWNoYXIgbmFtZVsxMl07CisJdTE2IGdwaW87CisJaW50IGZsYWdzOjQ7CisJaW50IHR5cGU6NDsKKwlpbnQga2V5X2NvZGU6MjQ7IC8qIExpbnV4IGtleSBjb2RlICovCit9OworCitzdHJ1Y3Qgb21hcF9mbGFzaF9wYXJ0X2NvbmZpZyB7CisJY2hhciBwYXJ0X3RhYmxlWzBdOworfTsKKworc3RydWN0IG9tYXBfYm9vdF9yZWFzb25fY29uZmlnIHsKKwljaGFyIHJlYXNvbl9zdHJbMTJdOworfTsKKworCitzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfZW50cnkgeworCXUxNiB0YWc7CisJdTE2IGxlbjsKKwl1OCAgZGF0YVswXTsKK307CisKK3N0cnVjdCBvbWFwX2JvYXJkX2NvbmZpZ19rZXJuZWwgeworCXUxNiB0YWc7CisJY29uc3Qgdm9pZCAqZGF0YTsKK307CisKK2V4dGVybiBjb25zdCB2b2lkICpfX29tYXBfZ2V0X2NvbmZpZyh1MTYgdGFnLCBzaXplX3QgbGVuLCBpbnQgbnIpOworCisjZGVmaW5lIG9tYXBfZ2V0X2NvbmZpZyh0YWcsIHR5cGUpIFwKKwkoKGNvbnN0IHR5cGUgKikgX19vbWFwX2dldF9jb25maWcoKHRhZyksIHNpemVvZih0eXBlKSwgMCkpCisjZGVmaW5lIG9tYXBfZ2V0X25yX2NvbmZpZyh0YWcsIHR5cGUsIG5yKSBcCisJKChjb25zdCB0eXBlICopIF9fb21hcF9nZXRfY29uZmlnKCh0YWcpLCBzaXplb2YodHlwZSksIChucikpKQorCitleHRlcm4gY29uc3Qgdm9pZCAqb21hcF9nZXRfdmFyX2NvbmZpZyh1MTYgdGFnLCBzaXplX3QgKmxlbik7CisKK2V4dGVybiBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfa2VybmVsICpvbWFwX2JvYXJkX2NvbmZpZzsKK2V4dGVybiBpbnQgb21hcF9ib2FyZF9jb25maWdfc2l6ZTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2NwdS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9jcHUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODc4NjcxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9jcHUuaApAQCAtMCwwICsxLDE4MyBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvY3B1LmgKKyAqCisgKiBPTUFQIGNwdSB0eXBlIGRldGVjdGlvbgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIFdyaXR0ZW4gYnkgVG9ueSBMaW5kZ3JlbiA8dG9ueS5saW5kZ3JlbkBub2tpYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICoKKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfT01BUF9DUFVfSAorI2RlZmluZSBfX0FTTV9BUkNIX09NQVBfQ1BVX0gKKworZXh0ZXJuIHVuc2lnbmVkIGludCBzeXN0ZW1fcmV2OworCisjZGVmaW5lIE9NQVBfRElFX0lEXzAJCTB4ZmZmZTE4MDAKKyNkZWZpbmUgT01BUF9ESUVfSURfMQkJMHhmZmZlMTgwNAorI2RlZmluZSBPTUFQX1BST0RVQ1RJT05fSURfMAkweGZmZmUyMDAwCisjZGVmaW5lIE9NQVBfUFJPRFVDVElPTl9JRF8xCTB4ZmZmZTIwMDQKKyNkZWZpbmUgT01BUDMyX0lEXzAJCTB4ZmZmZWQ0MDAKKyNkZWZpbmUgT01BUDMyX0lEXzEJCTB4ZmZmZWQ0MDQKKworLyoKKyAqIFRlc3QgaWYgbXVsdGljb3JlIE9NQVAgc3VwcG9ydCBpcyBuZWVkZWQKKyAqLworI3VuZGVmIE1VTFRJX09NQVAKKyN1bmRlZiBPTUFQX05BTUUKKworI2lmZGVmIENPTkZJR19BUkNIX09NQVA3MzAKKyMgaWZkZWYgT01BUF9OQU1FCisjICB1bmRlZiAgTVVMVElfT01BUAorIyAgZGVmaW5lIE1VTFRJX09NQVAKKyMgZWxzZQorIyAgZGVmaW5lIE9NQVBfTkFNRSBvbWFwNzMwCisjIGVuZGlmCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTUxMAorIyBpZmRlZiBPTUFQX05BTUUKKyMgIHVuZGVmICBNVUxUSV9PTUFQCisjICBkZWZpbmUgTVVMVElfT01BUAorIyBlbHNlCisjICBkZWZpbmUgT01BUF9OQU1FIG9tYXAxNTEwCisjIGVuZGlmCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTZYWAorIyBpZmRlZiBPTUFQX05BTUUKKyMgIHVuZGVmICBNVUxUSV9PTUFQCisjICBkZWZpbmUgTVVMVElfT01BUAorIyBlbHNlCisjICBkZWZpbmUgT01BUF9OQU1FIG9tYXAxNjEwCisjIGVuZGlmCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTZYWAorIyBpZmRlZiBPTUFQX05BTUUKKyMgIHVuZGVmICBNVUxUSV9PTUFQCisjICBkZWZpbmUgTVVMVElfT01BUAorIyBlbHNlCisjICBkZWZpbmUgT01BUF9OQU1FIG9tYXAxNzEwCisjIGVuZGlmCisjZW5kaWYKKworLyoKKyAqIEdlbmVyYXRlIHZhcmlvdXMgT01BUCBjcHUgc3BlY2lmaWMgbWFjcm9zLCBhbmQgY3B1IGNsYXNzCisgKiBzcGVjaWZpYyBtYWNyb3MKKyAqLworI2RlZmluZSBHRVRfT01BUF9UWVBFCSgoc3lzdGVtX3JldiA+PiAyNCkgJiAweGZmKQorI2RlZmluZSBHRVRfT01BUF9DTEFTUwkoc3lzdGVtX3JldiAmIDB4ZmYpCisKKyNkZWZpbmUgSVNfT01BUF9UWVBFKHR5cGUsIGlkKQkJCQlcCitzdGF0aWMgaW5saW5lIGludCBpc19vbWFwICMjdHlwZSAodm9pZCkJCQlcCit7CQkJCQkJCVwKKwlyZXR1cm4gKEdFVF9PTUFQX1RZUEUgPT0gKGlkKSkgPyAxIDogMDsJCVwKK30KKworI2RlZmluZSBJU19PTUFQX0NMQVNTKGNsYXNzLCBpZCkJCQlcCitzdGF0aWMgaW5saW5lIGludCBpc19vbWFwICMjY2xhc3MgKHZvaWQpCQlcCit7CQkJCQkJCVwKKwlyZXR1cm4gKEdFVF9PTUFQX0NMQVNTID09IChpZCkpID8gMSA6IDA7CVwKK30KKworSVNfT01BUF9UWVBFKDczMCwgMHgwNykKK0lTX09NQVBfVFlQRSgxNTEwLCAweDE1KQorSVNfT01BUF9UWVBFKDE2MTAsIDB4MTYpCitJU19PTUFQX1RZUEUoNTkxMiwgMHgxNikKK0lTX09NQVBfVFlQRSgxNzEwLCAweDE3KQorSVNfT01BUF9UWVBFKDI0MjAsIDB4MjQpCisKK0lTX09NQVBfQ0xBU1MoN3h4LCAweDA3KQorSVNfT01BUF9DTEFTUygxNXh4LCAweDE1KQorSVNfT01BUF9DTEFTUygxNnh4LCAweDE2KQorSVNfT01BUF9DTEFTUygyNHh4LCAweDI0KQorCisvKgorICogTWFjcm9zIHRvIGdyb3VwIE9NQVAgdHlwZXMgaW50byBjcHUgY2xhc3Nlcy4KKyAqIFRoZXNlIGNhbiBiZSB1c2VkIGluIG1vc3QgcGxhY2VzLgorICogY3B1X2lzX29tYXAxNXh4KCk6CVRydWUgZm9yIDE1MTAgYW5kIDU5MTAKKyAqIGNwdV9pc19vbWFwMTZ4eCgpOglUcnVlIGZvciAxNjEwLCA1OTEyIGFuZCAxNzEwCisgKi8KKyNpZiBkZWZpbmVkKE1VTFRJX09NQVApCisjIGRlZmluZSBjcHVfaXNfb21hcDd4eCgpCQlpc19vbWFwN3h4KCkKKyMgZGVmaW5lIGNwdV9pc19vbWFwMTV4eCgpCQlpc19vbWFwMTV4eCgpCisjIGlmICEoZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTUxMCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNzMwKSkKKyMgIGRlZmluZSBjcHVfaXNfb21hcDE2eHgoKQkJMQorIyBlbHNlCisjICBkZWZpbmUgY3B1X2lzX29tYXAxNnh4KCkJCWlzX29tYXAxNnh4KCkKKyMgZW5kaWYKKyNlbHNlCisjIGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDczMCkKKyMgIGRlZmluZSBjcHVfaXNfb21hcDd4eCgpCQkxCisjIGVsc2UKKyMgIGRlZmluZSBjcHVfaXNfb21hcDd4eCgpCQkwCisjIGVuZGlmCisjIGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE1MTApCisjICBkZWZpbmUgY3B1X2lzX29tYXAxNXh4KCkJCTEKKyMgZWxzZQorIyAgZGVmaW5lIGNwdV9pc19vbWFwMTV4eCgpCQkwCisjIGVuZGlmCisjIGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE2WFgpCisjICBkZWZpbmUgY3B1X2lzX29tYXAxNnh4KCkJCTEKKyMgZWxzZQorIyAgZGVmaW5lIGNwdV9pc19vbWFwMTZ4eCgpCQkwCisjIGVuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoTVVMVElfT01BUCkKKyMgZGVmaW5lIGNwdV9pc19vbWFwNzMwKCkJCWlzX29tYXA3MzAoKQorIyBkZWZpbmUgY3B1X2lzX29tYXAxNTEwKCkJCWlzX29tYXAxNTEwKCkKKyMgZGVmaW5lIGNwdV9pc19vbWFwMTYxMCgpCQlpc19vbWFwMTYxMCgpCisjIGRlZmluZSBjcHVfaXNfb21hcDU5MTIoKQkJaXNfb21hcDU5MTIoKQorIyBkZWZpbmUgY3B1X2lzX29tYXAxNzEwKCkJCWlzX29tYXAxNzEwKCkKKyNlbHNlCisjIGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDczMCkKKyMgIGRlZmluZSBjcHVfaXNfb21hcDczMCgpCQkxCisjIGVsc2UKKyMgIGRlZmluZSBjcHVfaXNfb21hcDczMCgpCQkwCisjIGVuZGlmCisjIGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE1MTApCisjICBkZWZpbmUgY3B1X2lzX29tYXAxNTEwKCkJCTEKKyMgZWxzZQorIyAgZGVmaW5lIGNwdV9pc19vbWFwMTUxMCgpCQkwCisjIGVuZGlmCisjIGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE2WFgpCisjICBkZWZpbmUgY3B1X2lzX29tYXAxNjEwKCkJCTEKKyMgZWxzZQorIyAgZGVmaW5lIGNwdV9pc19vbWFwMTYxMCgpCQkwCisjIGVuZGlmCisjIGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE2WFgpCisjICBkZWZpbmUgY3B1X2lzX29tYXA1OTEyKCkJCTEKKyMgZWxzZQorIyAgZGVmaW5lIGNwdV9pc19vbWFwNTkxMigpCQkwCisjIGVuZGlmCisjIGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE2WFgpCisjIGRlZmluZSBjcHVfaXNfb21hcDE2MTAoKQkJaXNfb21hcDE2MTAoKQorIyBkZWZpbmUgY3B1X2lzX29tYXA1OTEyKCkJCWlzX29tYXA1OTEyKCkKKyMgZGVmaW5lIGNwdV9pc19vbWFwMTcxMCgpCQlpc19vbWFwMTcxMCgpCisjIGVsc2UKKyMgZGVmaW5lIGNwdV9pc19vbWFwMTYxMCgpCQkwCisjIGRlZmluZSBjcHVfaXNfb21hcDU5MTIoKQkJMAorIyBkZWZpbmUgY3B1X2lzX29tYXAxNzEwKCkJCTAKKyMgZW5kaWYKKyMgaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjQyMCkKKyMgIGRlZmluZSBjcHVfaXNfb21hcDI0MjAoKQkJMQorIyBlbHNlCisjICBkZWZpbmUgY3B1X2lzX29tYXAyNDIwKCkJCTAKKyMgZW5kaWYKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZGVidWctbWFjcm8uUyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZGVidWctbWFjcm8uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2JiNDU4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9kZWJ1Zy1tYWNyby5TCkBAIC0wLDAgKzEsNDUgQEAKKy8qIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZGVidWctbWFjcm8uUworICoKKyAqIERlYnVnZ2luZyBtYWNybyBpbmNsdWRlIGhlYWRlcgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTQtMTk5OSBSdXNzZWxsIEtpbmcKKyAqICBNb3ZlZCBmcm9tIGxpbnV4L2FyY2gvYXJtL2tlcm5lbC9kZWJ1Zy5TIGJ5IEJlbiBEb29rcworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorKi8KKworCQkubWFjcm8JYWRkcnVhcnQscngKKwkJbXJjCXAxNSwgMCwgXHJ4LCBjMSwgYzAKKwkJdHN0CVxyeCwgIzEJCQlAIE1NVSBlbmFibGVkPworCQltb3ZlcQlccngsICMweGZmMDAwMDAwCUAgcGh5c2ljYWwgYmFzZSBhZGRyZXNzCisJCW1vdm5lCVxyeCwgIzB4ZmUwMDAwMDAJQCB2aXJ0dWFsIGJhc2UKKwkJb3JyCVxyeCwgXHJ4LCAjMHgwMGZiMDAwMAorI2lmZGVmIENPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQzCisJCW9ycglccngsIFxyeCwgIzB4MDAwMDkwMDAJQCBVQVJUIDMKKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDIpIHx8IGRlZmluZWQoQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDMpCisJCW9ycglccngsIFxyeCwgIzB4MDAwMDA4MDAJQCBVQVJUIDIgJiAzCisjZW5kaWYKKwkJLmVuZG0KKworCQkubWFjcm8Jc2VuZHVhcnQscmQscngKKwkJc3RyYglccmQsIFtccnhdCisJCS5lbmRtCisKKwkJLm1hY3JvCWJ1c3l1YXJ0LHJkLHJ4CisxMDAxOgkJbGRyYglccmQsIFtccngsICMoMHg1IDw8IDIpXQlAIE9NQVAtMTUxMCBhbmQgZnJpZW5kcworCQlhbmQJXHJkLCBccmQsICMweDYwCisJCXRlcQlccmQsICMweDYwCisJCWJlcQkxMDAyZgorCQlsZHJiCVxyZCwgW1xyeCwgIygweDUgPDwgMCldCUAgT01BUC03MzAgb25seQorCQlhbmQJXHJkLCBccmQsICMweDYwCisJCXRlcQlccmQsICMweDYwCisJCWJuZQkxMDAxYgorMTAwMjoKKwkJLmVuZG0KKworCQkubWFjcm8Jd2FpdHVhcnQscmQscngKKwkJLmVuZG0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZG1hLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2RtYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3ODUyNDgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2RtYS5oCkBAIC0wLDAgKzEsMjY0IEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZG1hLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzIE5va2lhIENvcnBvcmF0aW9uCisgKiAgQXV0aG9yOiBKdWhhIFlyavZs5CA8anVoYS55cmpvbGFAbm9raWEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworI2lmbmRlZiBfX0FTTV9BUkNIX0RNQV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfRE1BX0gKKworI2RlZmluZSBNQVhfRE1BX0FERFJFU1MJCQkweGZmZmZmZmZmCisKKyNkZWZpbmUgT01BUF9MT0dJQ0FMX0RNQV9DSF9DT1VOVAkxNworCisjZGVmaW5lIE9NQVBfRE1BX05PX0RFVklDRQkJMAorI2RlZmluZSBPTUFQX0RNQV9NQ1NJMV9UWAkJMQorI2RlZmluZSBPTUFQX0RNQV9NQ1NJMV9SWAkJMgorI2RlZmluZSBPTUFQX0RNQV9JMkNfUlgJCQkzCisjZGVmaW5lIE9NQVBfRE1BX0kyQ19UWAkJCTQKKyNkZWZpbmUgT01BUF9ETUFfRVhUX05ETUFfUkVRCQk1CisjZGVmaW5lIE9NQVBfRE1BX0VYVF9ORE1BX1JFUTIJCTYKKyNkZWZpbmUgT01BUF9ETUFfVVdJUkVfVFgJCTcKKyNkZWZpbmUgT01BUF9ETUFfTUNCU1AxX1RYCQk4CisjZGVmaW5lIE9NQVBfRE1BX01DQlNQMV9SWAkJOQorI2RlZmluZSBPTUFQX0RNQV9NQ0JTUDNfVFgJCTEwCisjZGVmaW5lIE9NQVBfRE1BX01DQlNQM19SWAkJMTEKKyNkZWZpbmUgT01BUF9ETUFfVUFSVDFfVFgJCTEyCisjZGVmaW5lIE9NQVBfRE1BX1VBUlQxX1JYCQkxMworI2RlZmluZSBPTUFQX0RNQV9VQVJUMl9UWAkJMTQKKyNkZWZpbmUgT01BUF9ETUFfVUFSVDJfUlgJCTE1CisjZGVmaW5lIE9NQVBfRE1BX01DQlNQMl9UWAkJMTYKKyNkZWZpbmUgT01BUF9ETUFfTUNCU1AyX1JYCQkxNworI2RlZmluZSBPTUFQX0RNQV9VQVJUM19UWAkJMTgKKyNkZWZpbmUgT01BUF9ETUFfVUFSVDNfUlgJCTE5CisjZGVmaW5lIE9NQVBfRE1BX0NBTUVSQV9JRl9SWAkJMjAKKyNkZWZpbmUgT01BUF9ETUFfTU1DX1RYCQkJMjEKKyNkZWZpbmUgT01BUF9ETUFfTU1DX1JYCQkJMjIKKyNkZWZpbmUgT01BUF9ETUFfTkFORAkJCTIzCisjZGVmaW5lIE9NQVBfRE1BX0lSUV9MQ0RfTElORQkJMjQKKyNkZWZpbmUgT01BUF9ETUFfTUVNT1JZX1NUSUNLCQkyNQorI2RlZmluZSBPTUFQX0RNQV9VU0JfVzJGQ19SWDAJCTI2CisjZGVmaW5lIE9NQVBfRE1BX1VTQl9XMkZDX1JYMQkJMjcKKyNkZWZpbmUgT01BUF9ETUFfVVNCX1cyRkNfUlgyCQkyOAorI2RlZmluZSBPTUFQX0RNQV9VU0JfVzJGQ19UWDAJCTI5CisjZGVmaW5lIE9NQVBfRE1BX1VTQl9XMkZDX1RYMQkJMzAKKyNkZWZpbmUgT01BUF9ETUFfVVNCX1cyRkNfVFgyCQkzMQorCisvKiBUaGVzZSBhcmUgb25seSBmb3IgMTYxMCAqLworI2RlZmluZSBPTUFQX0RNQV9DUllQVE9fREVTX0lOCQkzMgorI2RlZmluZSBPTUFQX0RNQV9TUElfVFgJCQkzMworI2RlZmluZSBPTUFQX0RNQV9TUElfUlgJCQkzNAorI2RlZmluZSBPTUFQX0RNQV9DUllQVE9fSEFTSAkJMzUKKyNkZWZpbmUgT01BUF9ETUFfQ0NQX0FUVE4JCTM2CisjZGVmaW5lIE9NQVBfRE1BX0NDUF9GSUZPX05PVF9FTVBUWQkzNworI2RlZmluZSBPTUFQX0RNQV9DTVRfQVBFX1RYX0NIQU5fMAkzOAorI2RlZmluZSBPTUFQX0RNQV9DTVRfQVBFX1JWX0NIQU5fMAkzOQorI2RlZmluZSBPTUFQX0RNQV9DTVRfQVBFX1RYX0NIQU5fMQk0MAorI2RlZmluZSBPTUFQX0RNQV9DTVRfQVBFX1JWX0NIQU5fMQk0MQorI2RlZmluZSBPTUFQX0RNQV9DTVRfQVBFX1RYX0NIQU5fMgk0MgorI2RlZmluZSBPTUFQX0RNQV9DTVRfQVBFX1JWX0NIQU5fMgk0MworI2RlZmluZSBPTUFQX0RNQV9DTVRfQVBFX1RYX0NIQU5fMwk0NAorI2RlZmluZSBPTUFQX0RNQV9DTVRfQVBFX1JWX0NIQU5fMwk0NQorI2RlZmluZSBPTUFQX0RNQV9DTVRfQVBFX1RYX0NIQU5fNAk0NgorI2RlZmluZSBPTUFQX0RNQV9DTVRfQVBFX1JWX0NIQU5fNAk0NworI2RlZmluZSBPTUFQX0RNQV9DTVRfQVBFX1RYX0NIQU5fNQk0OAorI2RlZmluZSBPTUFQX0RNQV9DTVRfQVBFX1JWX0NIQU5fNQk0OQorI2RlZmluZSBPTUFQX0RNQV9DTVRfQVBFX1RYX0NIQU5fNgk1MAorI2RlZmluZSBPTUFQX0RNQV9DTVRfQVBFX1JWX0NIQU5fNgk1MQorI2RlZmluZSBPTUFQX0RNQV9DTVRfQVBFX1RYX0NIQU5fNwk1MgorI2RlZmluZSBPTUFQX0RNQV9DTVRfQVBFX1JWX0NIQU5fNwk1MworI2RlZmluZSBPTUFQX0RNQV9NTUMyX1RYCQk1NAorI2RlZmluZSBPTUFQX0RNQV9NTUMyX1JYCQk1NQorI2RlZmluZSBPTUFQX0RNQV9DUllQVE9fREVTX09VVAkJNTYKKworCisjZGVmaW5lIE9NQVBfRE1BX0JBU0UJCQkoMHhmZmZlZDgwMCkKKyNkZWZpbmUgT01BUF9ETUFfR0NSCQkJKE9NQVBfRE1BX0JBU0UgKyAweDQwMCkKKyNkZWZpbmUgT01BUF9ETUFfR1NDUgkJCShPTUFQX0RNQV9CQVNFICsgMHg0MDQpCisjZGVmaW5lIE9NQVBfRE1BX0dSU1QJCQkoT01BUF9ETUFfQkFTRSArIDB4NDA4KQorI2RlZmluZSBPTUFQX0RNQV9IV19JRAkJCShPTUFQX0RNQV9CQVNFICsgMHg0NDIpCisjZGVmaW5lIE9NQVBfRE1BX1BDSDJfSUQJCShPTUFQX0RNQV9CQVNFICsgMHg0NDQpCisjZGVmaW5lIE9NQVBfRE1BX1BDSDBfSUQJCShPTUFQX0RNQV9CQVNFICsgMHg0NDYpCisjZGVmaW5lIE9NQVBfRE1BX1BDSDFfSUQJCShPTUFQX0RNQV9CQVNFICsgMHg0NDgpCisjZGVmaW5lIE9NQVBfRE1BX1BDSEdfSUQJCShPTUFQX0RNQV9CQVNFICsgMHg0NGEpCisjZGVmaW5lIE9NQVBfRE1BX1BDSERfSUQJCShPTUFQX0RNQV9CQVNFICsgMHg0NGMpCisjZGVmaW5lIE9NQVBfRE1BX0NBUFNfMF9VCQkoT01BUF9ETUFfQkFTRSArIDB4NDRlKQorI2RlZmluZSBPTUFQX0RNQV9DQVBTXzBfTAkJKE9NQVBfRE1BX0JBU0UgKyAweDQ1MCkKKyNkZWZpbmUgT01BUF9ETUFfQ0FQU18xX1UJCShPTUFQX0RNQV9CQVNFICsgMHg0NTIpCisjZGVmaW5lIE9NQVBfRE1BX0NBUFNfMV9MCQkoT01BUF9ETUFfQkFTRSArIDB4NDU0KQorI2RlZmluZSBPTUFQX0RNQV9DQVBTXzIJCQkoT01BUF9ETUFfQkFTRSArIDB4NDU2KQorI2RlZmluZSBPTUFQX0RNQV9DQVBTXzMJCQkoT01BUF9ETUFfQkFTRSArIDB4NDU4KQorI2RlZmluZSBPTUFQX0RNQV9DQVBTXzQJCQkoT01BUF9ETUFfQkFTRSArIDB4NDVhKQorI2RlZmluZSBPTUFQX0RNQV9QQ0gyX1NSCQkoT01BUF9ETUFfQkFTRSArIDB4NDYwKQorI2RlZmluZSBPTUFQX0RNQV9QQ0gwX1NSCQkoT01BUF9ETUFfQkFTRSArIDB4NDgwKQorI2RlZmluZSBPTUFQX0RNQV9QQ0gxX1NSCQkoT01BUF9ETUFfQkFTRSArIDB4NDgyKQorI2RlZmluZSBPTUFQX0RNQV9QQ0hEX1NSCQkoT01BUF9ETUFfQkFTRSArIDB4NGMwKQorCisjZGVmaW5lIE9NQVAxNTEwX0RNQV9MQ0RfQkFTRQkJKDB4ZmZmZWRiMDApCisjZGVmaW5lIE9NQVAxNTEwX0RNQV9MQ0RfQ1RSTAkJKE9NQVAxNTEwX0RNQV9MQ0RfQkFTRSArIDB4MDApCisjZGVmaW5lIE9NQVAxNTEwX0RNQV9MQ0RfVE9QX0YxX0wJKE9NQVAxNTEwX0RNQV9MQ0RfQkFTRSArIDB4MDIpCisjZGVmaW5lIE9NQVAxNTEwX0RNQV9MQ0RfVE9QX0YxX1UJKE9NQVAxNTEwX0RNQV9MQ0RfQkFTRSArIDB4MDQpCisjZGVmaW5lIE9NQVAxNTEwX0RNQV9MQ0RfQk9UX0YxX0wJKE9NQVAxNTEwX0RNQV9MQ0RfQkFTRSArIDB4MDYpCisjZGVmaW5lIE9NQVAxNTEwX0RNQV9MQ0RfQk9UX0YxX1UJKE9NQVAxNTEwX0RNQV9MQ0RfQkFTRSArIDB4MDgpCisKKyNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9CQVNFCQkoMHhmZmZlZTMwMCkKKyNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9DU0RQICAgICAgCShPTUFQMTYxMF9ETUFfTENEX0JBU0UgKyAweGMwKQorI2RlZmluZSBPTUFQMTYxMF9ETUFfTENEX0NDUgkJKE9NQVAxNjEwX0RNQV9MQ0RfQkFTRSArIDB4YzIpCisjZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfQ1RSTAkJKE9NQVAxNjEwX0RNQV9MQ0RfQkFTRSArIDB4YzQpCisjZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfVE9QX0IxX0wJKE9NQVAxNjEwX0RNQV9MQ0RfQkFTRSArIDB4YzgpCisjZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfVE9QX0IxX1UJKE9NQVAxNjEwX0RNQV9MQ0RfQkFTRSArIDB4Y2EpCisjZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfQk9UX0IxX0wJKE9NQVAxNjEwX0RNQV9MQ0RfQkFTRSArIDB4Y2MpCisjZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfQk9UX0IxX1UJKE9NQVAxNjEwX0RNQV9MQ0RfQkFTRSArIDB4Y2UpCisjZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfVE9QX0IyX0wJKE9NQVAxNjEwX0RNQV9MQ0RfQkFTRSArIDB4ZDApCisjZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfVE9QX0IyX1UJKE9NQVAxNjEwX0RNQV9MQ0RfQkFTRSArIDB4ZDIpCisjZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfQk9UX0IyX0wJKE9NQVAxNjEwX0RNQV9MQ0RfQkFTRSArIDB4ZDQpCisjZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfQk9UX0IyX1UJKE9NQVAxNjEwX0RNQV9MQ0RfQkFTRSArIDB4ZDYpCisjZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfU1JDX0VJX0IxCShPTUFQMTYxMF9ETUFfTENEX0JBU0UgKyAweGQ4KQorI2RlZmluZSBPTUFQMTYxMF9ETUFfTENEX1NSQ19GSV9CMV9MCShPTUFQMTYxMF9ETUFfTENEX0JBU0UgKyAweGRhKQorI2RlZmluZSBPTUFQMTYxMF9ETUFfTENEX1NSQ19FTl9CMQkoT01BUDE2MTBfRE1BX0xDRF9CQVNFICsgMHhlMCkKKyNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9TUkNfRk5fQjEJKE9NQVAxNjEwX0RNQV9MQ0RfQkFTRSArIDB4ZTQpCisjZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfTENIX0NUUkwJKE9NQVAxNjEwX0RNQV9MQ0RfQkFTRSArIDB4ZWEpCisjZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfU1JDX0ZJX0IxX1UJKE9NQVAxNjEwX0RNQV9MQ0RfQkFTRSArIDB4ZjQpCisKKworLyogRXZlcnkgTENoIGhhcyBpdHMgb3duIHNldCBvZiB0aGUgcmVnaXN0ZXJzIGJlbG93ICovCisjZGVmaW5lIE9NQVBfRE1BX0NTRFAobikJCShPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MDApCisjZGVmaW5lIE9NQVBfRE1BX0NDUihuKQkJCShPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MDIpCisjZGVmaW5lIE9NQVBfRE1BX0NJQ1IobikJCShPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MDQpCisjZGVmaW5lIE9NQVBfRE1BX0NTUihuKQkJCShPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MDYpCisjZGVmaW5lIE9NQVBfRE1BX0NTU0FfTChuKQkJKE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgwOCkKKyNkZWZpbmUgT01BUF9ETUFfQ1NTQV9VKG4pCQkoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDBhKQorI2RlZmluZSBPTUFQX0RNQV9DRFNBX0wobikJCShPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MGMpCisjZGVmaW5lIE9NQVBfRE1BX0NEU0FfVShuKQkJKE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgwZSkKKyNkZWZpbmUgT01BUF9ETUFfQ0VOKG4pCQkJKE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgxMCkKKyNkZWZpbmUgT01BUF9ETUFfQ0ZOKG4pCQkJKE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgxMikKKyNkZWZpbmUgT01BUF9ETUFfQ1NGSShuKQkJKE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgxNCkKKyNkZWZpbmUgT01BUF9ETUFfQ1NFSShuKQkJKE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgxNikKKyNkZWZpbmUgT01BUF9ETUFfQ1NBQyhuKQkJKE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgxOCkKKyNkZWZpbmUgT01BUF9ETUFfQ0RBQyhuKQkJKE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgxYSkKKyNkZWZpbmUgT01BUF9ETUFfQ0RFSShuKQkJKE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgxYykKKyNkZWZpbmUgT01BUF9ETUFfQ0RGSShuKQkJKE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgxZSkKKyNkZWZpbmUgT01BUF9ETUFfQ09MT1JfTChuKQkJKE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgyMCkKKyNkZWZpbmUgT01BUF9ETUFfQ09MT1JfVShuKQkJKE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgyMikKKyNkZWZpbmUgT01BUF9ETUFfQ0NSMihuKQkJKE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgyNCkKKyNkZWZpbmUgT01BUF9ETUFfQ0xOS19DVFJMKG4pCQkoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDI4KQorI2RlZmluZSBPTUFQX0RNQV9MQ0hfQ1RSTChuKQkJKE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgyYSkKKworI2RlZmluZSBPTUFQX0RNQV9UT1VUX0lSUQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUF9ETUFfRFJPUF9JUlEJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVBfRE1BX0hBTEZfSVJRCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQX0RNQV9GUkFNRV9JUlEJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVBfRE1BX0xBU1RfSVJRCQkoMSA8PCA0KQorI2RlZmluZSBPTUFQX0RNQV9CTE9DS19JUlEJCSgxIDw8IDUpCisjZGVmaW5lIE9NQVBfRE1BX1NZTkNfSVJRCQkoMSA8PCA2KQorCisjZGVmaW5lIE9NQVBfRE1BX0RBVEFfVFlQRV9TOAkJMHgwMAorI2RlZmluZSBPTUFQX0RNQV9EQVRBX1RZUEVfUzE2CQkweDAxCisjZGVmaW5lIE9NQVBfRE1BX0RBVEFfVFlQRV9TMzIJCTB4MDIKKworI2RlZmluZSBPTUFQX0RNQV9TWU5DX0VMRU1FTlQJCTB4MDAKKyNkZWZpbmUgT01BUF9ETUFfU1lOQ19GUkFNRQkJMHgwMQorI2RlZmluZSBPTUFQX0RNQV9TWU5DX0JMT0NLCQkweDAyCisKKyNkZWZpbmUgT01BUF9ETUFfUE9SVF9FTUlGRgkJMHgwMAorI2RlZmluZSBPTUFQX0RNQV9QT1JUX0VNSUZTCQkweDAxCisjZGVmaW5lIE9NQVBfRE1BX1BPUlRfT0NQX1QxCQkweDAyCisjZGVmaW5lIE9NQVBfRE1BX1BPUlRfVElQQgkJMHgwMworI2RlZmluZSBPTUFQX0RNQV9QT1JUX09DUF9UMgkJMHgwNAorI2RlZmluZSBPTUFQX0RNQV9QT1JUX01QVUkJCTB4MDUKKworI2RlZmluZSBPTUFQX0RNQV9BTU9ERV9DT05TVEFOVAkJMHgwMAorI2RlZmluZSBPTUFQX0RNQV9BTU9ERV9QT1NUX0lOQwkJMHgwMQorI2RlZmluZSBPTUFQX0RNQV9BTU9ERV9TSU5HTEVfSURYCTB4MDIKKyNkZWZpbmUgT01BUF9ETUFfQU1PREVfRE9VQkxFX0lEWAkweDAzCisKKy8qIExDRCBETUEgYmxvY2sgbnVtYmVycyAqLworZW51bSB7CisJT01BUF9MQ0RfRE1BX0IxX1RPUCwKKwlPTUFQX0xDRF9ETUFfQjFfQk9UVE9NLAorCU9NQVBfTENEX0RNQV9CMl9UT1AsCisJT01BUF9MQ0RfRE1BX0IyX0JPVFRPTQorfTsKKworZW51bSBvbWFwX2RtYV9idXJzdF9tb2RlIHsKKwlPTUFQX0RNQV9EQVRBX0JVUlNUX0RJUyA9IDAsCisJT01BUF9ETUFfREFUQV9CVVJTVF80LAorCU9NQVBfRE1BX0RBVEFfQlVSU1RfOAorfTsKKworZW51bSBvbWFwX2RtYV9jb2xvcl9tb2RlIHsKKwlPTUFQX0RNQV9DT0xPUl9ESVMgPSAwLAorCU9NQVBfRE1BX0NPTlNUQU5UX0ZJTEwsCisJT01BUF9ETUFfVFJBTlNQQVJFTlRfQ09QWQorfTsKKworZXh0ZXJuIHZvaWQgb21hcF9zZXRfZG1hX3ByaW9yaXR5KGludCBkc3RfcG9ydCwgaW50IHByaW9yaXR5KTsKK2V4dGVybiBpbnQgb21hcF9yZXF1ZXN0X2RtYShpbnQgZGV2X2lkLCBjb25zdCBjaGFyICpkZXZfbmFtZSwKKwkJCSAgICB2b2lkICgqIGNhbGxiYWNrKShpbnQgbGNoLCB1MTYgY2hfc3RhdHVzLCB2b2lkICpkYXRhKSwKKwkJCSAgICB2b2lkICpkYXRhLCBpbnQgKmRtYV9jaCk7CitleHRlcm4gdm9pZCBvbWFwX2VuYWJsZV9kbWFfaXJxKGludCBjaCwgdTE2IGlycV9iaXRzKTsKK2V4dGVybiB2b2lkIG9tYXBfZGlzYWJsZV9kbWFfaXJxKGludCBjaCwgdTE2IGlycV9iaXRzKTsKK2V4dGVybiB2b2lkIG9tYXBfZnJlZV9kbWEoaW50IGNoKTsKK2V4dGVybiB2b2lkIG9tYXBfc3RhcnRfZG1hKGludCBsY2gpOworZXh0ZXJuIHZvaWQgb21hcF9zdG9wX2RtYShpbnQgbGNoKTsKK2V4dGVybiB2b2lkIG9tYXBfc2V0X2RtYV90cmFuc2Zlcl9wYXJhbXMoaW50IGxjaCwgaW50IGRhdGFfdHlwZSwKKwkJCQkJIGludCBlbGVtX2NvdW50LCBpbnQgZnJhbWVfY291bnQsCisJCQkJCSBpbnQgc3luY19tb2RlKTsKK2V4dGVybiB2b2lkIG9tYXBfc2V0X2RtYV9jb2xvcl9tb2RlKGludCBsY2gsIGVudW0gb21hcF9kbWFfY29sb3JfbW9kZSBtb2RlLAorCQkJCSAgICB1MzIgY29sb3IpOworCitleHRlcm4gdm9pZCBvbWFwX3NldF9kbWFfc3JjX3BhcmFtcyhpbnQgbGNoLCBpbnQgc3JjX3BvcnQsIGludCBzcmNfYW1vZGUsCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgc3JjX3N0YXJ0KTsKK2V4dGVybiB2b2lkIG9tYXBfc2V0X2RtYV9zcmNfaW5kZXgoaW50IGxjaCwgaW50IGVpZHgsIGludCBmaWR4KTsKK2V4dGVybiB2b2lkIG9tYXBfc2V0X2RtYV9zcmNfZGF0YV9wYWNrKGludCBsY2gsIGludCBlbmFibGUpOworZXh0ZXJuIHZvaWQgb21hcF9zZXRfZG1hX3NyY19idXJzdF9tb2RlKGludCBsY2gsCisJCQkJCWVudW0gb21hcF9kbWFfYnVyc3RfbW9kZSBidXJzdF9tb2RlKTsKKworZXh0ZXJuIHZvaWQgb21hcF9zZXRfZG1hX2Rlc3RfcGFyYW1zKGludCBsY2gsIGludCBkZXN0X3BvcnQsIGludCBkZXN0X2Ftb2RlLAorCQkJCSAgICAgdW5zaWduZWQgbG9uZyBkZXN0X3N0YXJ0KTsKK2V4dGVybiB2b2lkIG9tYXBfc2V0X2RtYV9kZXN0X2luZGV4KGludCBsY2gsIGludCBlaWR4LCBpbnQgZmlkeCk7CitleHRlcm4gdm9pZCBvbWFwX3NldF9kbWFfZGVzdF9kYXRhX3BhY2soaW50IGxjaCwgaW50IGVuYWJsZSk7CitleHRlcm4gdm9pZCBvbWFwX3NldF9kbWFfZGVzdF9idXJzdF9tb2RlKGludCBsY2gsCisJCQkJCSBlbnVtIG9tYXBfZG1hX2J1cnN0X21vZGUgYnVyc3RfbW9kZSk7CisKK2V4dGVybiB2b2lkIG9tYXBfZG1hX2xpbmtfbGNoIChpbnQgbGNoX2hlYWQsIGludCBsY2hfcXVldWUpOworZXh0ZXJuIHZvaWQgb21hcF9kbWFfdW5saW5rX2xjaCAoaW50IGxjaF9oZWFkLCBpbnQgbGNoX3F1ZXVlKTsKKworZXh0ZXJuIGRtYV9hZGRyX3Qgb21hcF9nZXRfZG1hX3NyY19wb3MoaW50IGxjaCk7CitleHRlcm4gZG1hX2FkZHJfdCBvbWFwX2dldF9kbWFfZHN0X3BvcyhpbnQgbGNoKTsKK2V4dGVybiB2b2lkIG9tYXBfY2xlYXJfZG1hKGludCBsY2gpOworCisvKiBSZXR1cm5zIDEgaWYgdGhlIERNQSBtb2R1bGUgaXMgaW4gT01BUDE1MTAtY29tcGF0aWJsZSBtb2RlLCAwIG90aGVyd2lzZSAqLworZXh0ZXJuIGludCBvbWFwX2RtYV9pbl8xNTEwX21vZGUodm9pZCk7CisKKy8qIExDRCBETUEgZnVuY3Rpb25zICovCitleHRlcm4gaW50IG9tYXBfcmVxdWVzdF9sY2RfZG1hKHZvaWQgKCogY2FsbGJhY2spKHUxNiBzdGF0dXMsIHZvaWQgKmRhdGEpLAorCQkJCXZvaWQgKmRhdGEpOworZXh0ZXJuIHZvaWQgb21hcF9mcmVlX2xjZF9kbWEodm9pZCk7CitleHRlcm4gdm9pZCBvbWFwX3NldHVwX2xjZF9kbWEodm9pZCk7CitleHRlcm4gdm9pZCBvbWFwX2VuYWJsZV9sY2RfZG1hKHZvaWQpOworZXh0ZXJuIHZvaWQgb21hcF9zdG9wX2xjZF9kbWEodm9pZCk7CitleHRlcm4gdm9pZCBvbWFwX3NldF9sY2RfZG1hX2V4dF9jb250cm9sbGVyKGludCBleHRlcm5hbCk7CitleHRlcm4gdm9pZCBvbWFwX3NldF9sY2RfZG1hX3NpbmdsZV90cmFuc2ZlcihpbnQgc2luZ2xlKTsKK2V4dGVybiB2b2lkIG9tYXBfc2V0X2xjZF9kbWFfYjEodW5zaWduZWQgbG9uZyBhZGRyLCB1MTYgZmJfeHJlcywgdTE2IGZiX3lyZXMsCisJCQkJaW50IGRhdGFfdHlwZSk7CitleHRlcm4gdm9pZCBvbWFwX3NldF9sY2RfZG1hX2IxX3JvdGF0aW9uKGludCByb3RhdGUpOworZXh0ZXJuIHZvaWQgb21hcF9zZXRfbGNkX2RtYV9iMV92eHJlcyh1bnNpZ25lZCBsb25nIHZ4cmVzKTsKK2V4dGVybiB2b2lkIG9tYXBfc2V0X2xjZF9kbWFfYjFfbWlycm9yKGludCBtaXJyb3IpOworZXh0ZXJuIHZvaWQgb21hcF9zZXRfbGNkX2RtYV9iMV9zY2FsZSh1bnNpZ25lZCBpbnQgeHNjYWxlLCB1bnNpZ25lZCBpbnQgeXNjYWxlKTsKKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfRE1BX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZW50cnktbWFjcm8uUyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZW50cnktbWFjcm8uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2IxMjY4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9lbnRyeS1tYWNyby5TCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2VudHJ5LW1hY3JvLlMKKyAqCisgKiBMb3ctbGV2ZWwgSVJRIGhlbHBlciBtYWNyb3MgZm9yIE9NQVAtYmFzZWQgcGxhdGZvcm1zCisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworIAkJLm1hY3JvCWRpc2FibGVfZmlxCisJCS5lbmRtCisKKwkJLm1hY3JvCWdldF9pcnFucl9hbmRfYmFzZSwgaXJxbnIsIGlycXN0YXQsIGJhc2UsIHRtcAorCQlsZHIJXGJhc2UsID1JT19BRERSRVNTKE9NQVBfSUgxX0JBU0UpCisJCWxkcglcaXJxbnIsIFtcYmFzZSwgI0lSUV9JVFJfUkVHX09GRlNFVF0KKwkJbGRyCVx0bXAsIFtcYmFzZSwgI0lSUV9NSVJfUkVHX09GRlNFVF0KKwkJbW92CVxpcnFzdGF0LCAjMHhmZmZmZmZmZgorCQliaWMJXHRtcCwgXGlycXN0YXQsIFx0bXAKKwkJdHN0CVxpcnFuciwgXHRtcAorCQliZXEJMTUxMGYKKworCQlsZHIJXGlycW5yLCBbXGJhc2UsICNJUlFfU0lSX0ZJUV9SRUdfT0ZGU0VUXQorCQljbXAJXGlycW5yLCAjMAorCQlsZHJlcQlcaXJxbnIsIFtcYmFzZSwgI0lSUV9TSVJfSVJRX1JFR19PRkZTRVRdCisJCWNtcGVxCVxpcnFuciwgI0lOVF9JSDJfSVJRCisJCWxkcmVxCVxiYXNlLCA9SU9fQUREUkVTUyhPTUFQX0lIMl9CQVNFKQorCQlsZHJlcQlcaXJxbnIsIFtcYmFzZSwgI0lSUV9TSVJfSVJRX1JFR19PRkZTRVRdCisJCWFkZGVxcwlcaXJxbnIsIFxpcnFuciwgIzMyCisxNTEwOgorCQkuZW5kbQorCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2ZwZ2EuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZnBnYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3NjgwN2QKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2ZwZ2EuaApAQCAtMCwwICsxLDE5NiBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZnBnYS5oCisgKgorICogSW50ZXJydXB0IGhhbmRsZXIgZm9yIE9NQVAtMTUxMCBGUEdBCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAxIFJpZGdlUnVuLCBJbmMuCisgKiBBdXRob3I6IEdyZWcgTG9ubm9uIDxnbG9ubm9uQHJpZGdlcnVuLmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICoKKyAqIFNlcGFyYXRlZCBGUEdBIGludGVycnVwdHMgZnJvbSBpbm5vdmF0b3IxNTEwLmMgYW5kIGNsZWFuZWQgdXAgZm9yIDIuNgorICogQ29weXJpZ2h0IChDKSAyMDA0IE5va2lhIENvcnBvcmF0aW9uIGJ5IFRvbnkgTGluZHJnZW4gPHRvbnlAYXRvbWlkZS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfT01BUF9GUEdBX0gKKyNkZWZpbmUgX19BU01fQVJDSF9PTUFQX0ZQR0FfSAorCisjaWYgZGVmaW5lZChDT05GSUdfTUFDSF9PTUFQX0lOTk9WQVRPUikgJiYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTUxMCkKK2V4dGVybiB2b2lkIG9tYXAxNTEwX2ZwZ2FfaW5pdF9pcnEodm9pZCk7CisjZWxzZQorI2RlZmluZSBvbWFwMTUxMF9mcGdhX2luaXRfaXJxKCkJKDApCisjZW5kaWYKKworI2RlZmluZSBmcGdhX3JlYWQocmVnKQkJCV9fcmF3X3JlYWRiKHJlZykKKyNkZWZpbmUgZnBnYV93cml0ZSh2YWwsIHJlZykJCV9fcmF3X3dyaXRlYih2YWwsIHJlZykKKworLyoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIEgyL1AyIERlYnVnIGJvYXJkIEZQR0EKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisvKiBtYXBzIGluIHRoZSBGUEdBIHJlZ2lzdGVycyBhbmQgdGhlIEVUSFIgcmVnaXN0ZXJzICovCisjZGVmaW5lIEgyUDJfREJHX0ZQR0FfQkFTRQkJMHhFODAwMDAwMAkvKiBWQSAqLworI2RlZmluZSBIMlAyX0RCR19GUEdBX1NJWkUJCVNaXzRLCQkvKiBTSVpFICovCisjZGVmaW5lIEgyUDJfREJHX0ZQR0FfU1RBUlQJCTB4MDQwMDAwMDAJLyogUEEgKi8KKworI2RlZmluZSBIMlAyX0RCR19GUEdBX0VUSFJfU1RBUlQJKEgyUDJfREJHX0ZQR0FfU1RBUlQgKyAweDMwMCkKKyNkZWZpbmUgSDJQMl9EQkdfRlBHQV9GUEdBX1JFVgkJKEgyUDJfREJHX0ZQR0FfQkFTRSArIDB4MTApCS8qIEZQR0EgUmV2aXNpb24gKi8KKyNkZWZpbmUgSDJQMl9EQkdfRlBHQV9CT0FSRF9SRVYJCShIMlAyX0RCR19GUEdBX0JBU0UgKyAweDEyKQkvKiBCb2FyZCBSZXZpc2lvbiAqLworI2RlZmluZSBIMlAyX0RCR19GUEdBX0dQSU8JCShIMlAyX0RCR19GUEdBX0JBU0UgKyAweDE0KQkvKiBHUElPIG91dHB1dHMgKi8KKyNkZWZpbmUgSDJQMl9EQkdfRlBHQV9MRURTCQkoSDJQMl9EQkdfRlBHQV9CQVNFICsgMHgxNikJLyogTEVEcyBvdXRwdXRzICovCisjZGVmaW5lIEgyUDJfREJHX0ZQR0FfTUlTQ19JTlBVVFMJKEgyUDJfREJHX0ZQR0FfQkFTRSArIDB4MTgpCS8qIE1pc2MgaW5wdXRzICovCisjZGVmaW5lIEgyUDJfREJHX0ZQR0FfTEFOX1NUQVRVUwkoSDJQMl9EQkdfRlBHQV9CQVNFICsgMHgxQSkJLyogTEFOIFN0YXR1cyBsaW5lICovCisjZGVmaW5lIEgyUDJfREJHX0ZQR0FfTEFOX1JFU0VUCQkoSDJQMl9EQkdfRlBHQV9CQVNFICsgMHgxQykJLyogTEFOIFJlc2V0IGxpbmUgKi8KKworLyogTk9URTogIG1vc3QgYm9hcmRzIGRvbid0IGhhdmUgYSBzdGF0aWMgbWFwcGluZyBmb3IgdGhlIEZQR0EgLi4uICovCitzdHJ1Y3QgaDJwMl9kYmdfZnBnYSB7CisJLyogb2Zmc2V0IDB4MDAgKi8KKwl1MTYJCXNtYzkxeFs4XTsKKwkvKiBvZmZzZXQgMHgxMCAqLworCXUxNgkJZnBnYV9yZXY7CisJdTE2CQlib2FyZF9yZXY7CisJdTE2CQlncGlvX291dHB1dHM7CisJdTE2CQlsZWRzOworCS8qIG9mZnNldCAweDE4ICovCisJdTE2CQltaXNjX2lucHV0czsKKwl1MTYJCWxhbl9zdGF0dXM7CisJdTE2CQlsYW5fcmVzZXQ7CisJdTE2CQlyZXNlcnZlZDA7CisJLyogb2Zmc2V0IDB4MjAgKi8KKwl1MTYJCXBzMl9kYXRhOworCXUxNgkJcHMyX2N0cmw7CisJLyogcGx1cyBhbHNvIDQgcnMyMzIgcG9ydHMgLi4uICovCit9OworCisvKiBMRURzIGRlZmluaXRpb24gb24gZGVidWcgYm9hcmQgKDE2IExFRHMsIGFsbCBwaHlzaWNhbGx5IGdyZWVuKSAqLworI2RlZmluZSBIMlAyX0RCR19GUEdBX0xFRF9HUkVFTgkJKDEgPDwgMTUpCisjZGVmaW5lIEgyUDJfREJHX0ZQR0FfTEVEX0FNQkVSCQkoMSA8PCAxNCkKKyNkZWZpbmUgSDJQMl9EQkdfRlBHQV9MRURfUkVECQkoMSA8PCAxMykKKyNkZWZpbmUgSDJQMl9EQkdfRlBHQV9MRURfQkxVRQkJKDEgPDwgMTIpCisvKiAgY3B1MCBsb2FkLW1ldGVyIExFRHMgKi8KKyNkZWZpbmUgSDJQMl9EQkdfRlBHQV9MT0FEX01FVEVSCSgxIDw8IDApCS8vIEEgYml0IG9mIGZ1biBvbiBvdXIgYm9hcmQgLi4uCisjZGVmaW5lIEgyUDJfREJHX0ZQR0FfTE9BRF9NRVRFUl9TSVpFCTExCisjZGVmaW5lIEgyUDJfREJHX0ZQR0FfTE9BRF9NRVRFUl9NQVNLCSgoMSA8PCBIMlAyX0RCR19GUEdBX0xPQURfTUVURVJfU0laRSkgLSAxKQorCisKKy8qCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBPTUFQLTE1MTAgRlBHQQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNkZWZpbmUgT01BUDE1MTBfRlBHQV9CQVNFCQkJMHhFODAwMDAwMAkvKiBWaXJ0dWFsICovCisjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfU0laRQkJCVNaXzRLCisjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfU1RBUlQJCQkweDA4MDAwMDAwCS8qIFBoeXNpY2FsICovCisKKy8qIFJldmlzaW9uICovCisjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfUkVWX0xPVwkJCShPTUFQMTUxMF9GUEdBX0JBU0UgKyAweDApCisjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfUkVWX0hJR0gJCQkoT01BUDE1MTBfRlBHQV9CQVNFICsgMHgxKQorCisjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfTENEX1BBTkVMX0NPTlRST0wJCShPTUFQMTUxMF9GUEdBX0JBU0UgKyAweDIpCisjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfTEVEX0RJR0lUCQkJKE9NQVAxNTEwX0ZQR0FfQkFTRSArIDB4MykKKyNkZWZpbmUgSU5OT1ZBVE9SX0ZQR0FfSElEX1NQSQkJCShPTUFQMTUxMF9GUEdBX0JBU0UgKyAweDQpCisjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfUE9XRVIJCQkoT01BUDE1MTBfRlBHQV9CQVNFICsgMHg1KQorCisvKiBJbnRlcnJ1cHQgc3RhdHVzICovCisjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfSVNSX0xPCQkJKE9NQVAxNTEwX0ZQR0FfQkFTRSArIDB4NikKKyNkZWZpbmUgT01BUDE1MTBfRlBHQV9JU1JfSEkJCQkoT01BUDE1MTBfRlBHQV9CQVNFICsgMHg3KQorCisvKiBJbnRlcnJ1cHQgbWFzayAqLworI2RlZmluZSBPTUFQMTUxMF9GUEdBX0lNUl9MTwkJCShPTUFQMTUxMF9GUEdBX0JBU0UgKyAweDgpCisjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfSU1SX0hJCQkJKE9NQVAxNTEwX0ZQR0FfQkFTRSArIDB4OSkKKworLyogUmVzZXQgcmVnaXN0ZXJzICovCisjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfSE9TVF9SRVNFVAkJKE9NQVAxNTEwX0ZQR0FfQkFTRSArIDB4YSkKKyNkZWZpbmUgT01BUDE1MTBfRlBHQV9SU1QJCQkoT01BUDE1MTBfRlBHQV9CQVNFICsgMHhiKQorCisjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfQVVESU8JCQkoT01BUDE1MTBfRlBHQV9CQVNFICsgMHhjKQorI2RlZmluZSBPTUFQMTUxMF9GUEdBX0RJUAkJCShPTUFQMTUxMF9GUEdBX0JBU0UgKyAweGUpCisjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfRlBHQV9JTwkJCShPTUFQMTUxMF9GUEdBX0JBU0UgKyAweGYpCisjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfVUFSVDEJCQkoT01BUDE1MTBfRlBHQV9CQVNFICsgMHgxNCkKKyNkZWZpbmUgT01BUDE1MTBfRlBHQV9VQVJUMgkJCShPTUFQMTUxMF9GUEdBX0JBU0UgKyAweDE1KQorI2RlZmluZSBPTUFQMTUxMF9GUEdBX09NQVAxNTEwX1NUQVRVUwkJKE9NQVAxNTEwX0ZQR0FfQkFTRSArIDB4MTYpCisjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfQk9BUkRfUkVWCQkJKE9NQVAxNTEwX0ZQR0FfQkFTRSArIDB4MTgpCisjZGVmaW5lIE9NQVAxNTEwUDFfUFBUX0RBVEEJCQkoT01BUDE1MTBfRlBHQV9CQVNFICsgMHgxMDApCisjZGVmaW5lIE9NQVAxNTEwUDFfUFBUX1NUQVRVUwkJCShPTUFQMTUxMF9GUEdBX0JBU0UgKyAweDEwMSkKKyNkZWZpbmUgT01BUDE1MTBQMV9QUFRfQ09OVFJPTAkJCShPTUFQMTUxMF9GUEdBX0JBU0UgKyAweDEwMikKKworI2RlZmluZSBPTUFQMTUxMF9GUEdBX1RPVUNIU0NSRUVOCQkoT01BUDE1MTBfRlBHQV9CQVNFICsgMHgyMDQpCisKKyNkZWZpbmUgSU5OT1ZBVE9SX0ZQR0FfSU5GTwkJCShPTUFQMTUxMF9GUEdBX0JBU0UgKyAweDIwNSkKKyNkZWZpbmUgSU5OT1ZBVE9SX0ZQR0FfTENEX0JSSUdIVF9MTwkJKE9NQVAxNTEwX0ZQR0FfQkFTRSArIDB4MjA2KQorI2RlZmluZSBJTk5PVkFUT1JfRlBHQV9MQ0RfQlJJR0hUX0hJCQkoT01BUDE1MTBfRlBHQV9CQVNFICsgMHgyMDcpCisjZGVmaW5lIElOTk9WQVRPUl9GUEdBX0xFRF9HUk5fTE8JCShPTUFQMTUxMF9GUEdBX0JBU0UgKyAweDIwOCkKKyNkZWZpbmUgSU5OT1ZBVE9SX0ZQR0FfTEVEX0dSTl9ISQkJKE9NQVAxNTEwX0ZQR0FfQkFTRSArIDB4MjA5KQorI2RlZmluZSBJTk5PVkFUT1JfRlBHQV9MRURfUkVEX0xPCQkoT01BUDE1MTBfRlBHQV9CQVNFICsgMHgyMGEpCisjZGVmaW5lIElOTk9WQVRPUl9GUEdBX0xFRF9SRURfSEkJCShPTUFQMTUxMF9GUEdBX0JBU0UgKyAweDIwYikKKyNkZWZpbmUgSU5OT1ZBVE9SX0ZQR0FfQ0FNX1VTQl9DT05UUk9MCQkoT01BUDE1MTBfRlBHQV9CQVNFICsgMHgyMGMpCisjZGVmaW5lIElOTk9WQVRPUl9GUEdBX0VYUF9DT05UUk9MCQkoT01BUDE1MTBfRlBHQV9CQVNFICsgMHgyMGQpCisjZGVmaW5lIElOTk9WQVRPUl9GUEdBX0lTUjIJCQkoT01BUDE1MTBfRlBHQV9CQVNFICsgMHgyMGUpCisjZGVmaW5lIElOTk9WQVRPUl9GUEdBX0lNUjIJCQkoT01BUDE1MTBfRlBHQV9CQVNFICsgMHgyMTApCisKKyNkZWZpbmUgT01BUDE1MTBfRlBHQV9FVEhSX1NUQVJUCQkoT01BUDE1MTBfRlBHQV9TVEFSVCArIDB4MzAwKQorCisvKgorICogUG93ZXIgdXAgR2lnYSBVQVJUIGRyaXZlciwgdHVybiBvbiBISUQgY2xvY2suCisgKiBUdXJuIG9mZiBCVCBwb3dlciwgc2luY2Ugd2UncmUgbm90IHVzaW5nIGl0IGFuZCBpdAorICogZHJhd3MgcG93ZXIuCisgKi8KKyNkZWZpbmUgT01BUDE1MTBfRlBHQV9SRVNFVF9WQUxVRQkJMHg0MgorCisjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfUENSX0lGX1BEMAkJKDEgPDwgNykKKyNkZWZpbmUgT01BUDE1MTBfRlBHQV9QQ1JfQ09NMl9FTgkJKDEgPDwgNikKKyNkZWZpbmUgT01BUDE1MTBfRlBHQV9QQ1JfQ09NMV9FTgkJKDEgPDwgNSkKKyNkZWZpbmUgT01BUDE1MTBfRlBHQV9QQ1JfRVhQX1BEMAkJKDEgPDwgNCkKKyNkZWZpbmUgT01BUDE1MTBfRlBHQV9QQ1JfRVhQX1BEMQkJKDEgPDwgMykKKyNkZWZpbmUgT01BUDE1MTBfRlBHQV9QQ1JfNDhNSFpfQ0xLCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQMTUxMF9GUEdBX1BDUl80TUhaX0NMSwkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDE1MTBfRlBHQV9QQ1JfUlNSVkRfQklUMAkJKDEgPDwgMCkKKworLyoKKyAqIElubm92YXRvci9PTUFQMTUxMCBGUEdBIEhJRCByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMKKyAqLworI2RlZmluZSBPTUFQMTUxMF9GUEdBX0hJRF9TQ0xLCSgxPDwwKQkvKiBvdXRwdXQgKi8KKyNkZWZpbmUgT01BUDE1MTBfRlBHQV9ISURfTU9TSQkoMTw8MSkJLyogb3V0cHV0ICovCisjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfSElEX25TUwkoMTw8MikJLyogb3V0cHV0IDAvMSBjaGlwIGlkbGUvc2VsZWN0ICovCisjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfSElEX25IU1VTCSgxPDwzKQkvKiBvdXRwdXQgMC8xIGhvc3QgYWN0aXZlL3N1c3BlbmRlZCAqLworI2RlZmluZSBPTUFQMTUxMF9GUEdBX0hJRF9NSVNPCSgxPDw0KQkvKiBpbnB1dCAqLworI2RlZmluZSBPTUFQMTUxMF9GUEdBX0hJRF9BVE4JKDE8PDUpCS8qIGlucHV0ICAwLzEgY2hpcCBpZGxlL0FUTiAqLworI2RlZmluZSBPTUFQMTUxMF9GUEdBX0hJRF9yc3J2ZAkoMTw8NikKKyNkZWZpbmUgT01BUDE1MTBfRlBHQV9ISURfUkVTRVRuICgxPDw3KQkvKiBvdXRwdXQgLSAwLzEgVVNBUiByZXNldC9ydW4gKi8KKworLyogVGhlIEZQR0EgSVJRIGlzIGNhc2NhZGVkIHRocm91Z2ggR1BJT18xMyAqLworI2RlZmluZSBPTUFQMTUxMF9JTlRfRlBHQQkJKElIX0dQSU9fQkFTRSArIDEzKQorCisvKiBJUlEgTnVtYmVycyBmb3IgaW50ZXJydXB0cyBtdXhlZCB0aHJvdWdoIHRoZSBGUEdBICovCisjZGVmaW5lIE9NQVAxNTEwX0lIX0ZQR0FfQkFTRQkJSUhfQk9BUkRfQkFTRQorI2RlZmluZSBPTUFQMTUxMF9JTlRfRlBHQV9BVE4JCShPTUFQMTUxMF9JSF9GUEdBX0JBU0UgKyAwKQorI2RlZmluZSBPTUFQMTUxMF9JTlRfRlBHQV9BQ0sJCShPTUFQMTUxMF9JSF9GUEdBX0JBU0UgKyAxKQorI2RlZmluZSBPTUFQMTUxMF9JTlRfRlBHQTIJCShPTUFQMTUxMF9JSF9GUEdBX0JBU0UgKyAyKQorI2RlZmluZSBPTUFQMTUxMF9JTlRfRlBHQTMJCShPTUFQMTUxMF9JSF9GUEdBX0JBU0UgKyAzKQorI2RlZmluZSBPTUFQMTUxMF9JTlRfRlBHQTQJCShPTUFQMTUxMF9JSF9GUEdBX0JBU0UgKyA0KQorI2RlZmluZSBPTUFQMTUxMF9JTlRfRlBHQTUJCShPTUFQMTUxMF9JSF9GUEdBX0JBU0UgKyA1KQorI2RlZmluZSBPTUFQMTUxMF9JTlRfRlBHQTYJCShPTUFQMTUxMF9JSF9GUEdBX0JBU0UgKyA2KQorI2RlZmluZSBPTUFQMTUxMF9JTlRfRlBHQTcJCShPTUFQMTUxMF9JSF9GUEdBX0JBU0UgKyA3KQorI2RlZmluZSBPTUFQMTUxMF9JTlRfRlBHQTgJCShPTUFQMTUxMF9JSF9GUEdBX0JBU0UgKyA4KQorI2RlZmluZSBPTUFQMTUxMF9JTlRfRlBHQTkJCShPTUFQMTUxMF9JSF9GUEdBX0JBU0UgKyA5KQorI2RlZmluZSBPTUFQMTUxMF9JTlRfRlBHQTEwCQkoT01BUDE1MTBfSUhfRlBHQV9CQVNFICsgMTApCisjZGVmaW5lIE9NQVAxNTEwX0lOVF9GUEdBMTEJCShPTUFQMTUxMF9JSF9GUEdBX0JBU0UgKyAxMSkKKyNkZWZpbmUgT01BUDE1MTBfSU5UX0ZQR0ExMgkJKE9NQVAxNTEwX0lIX0ZQR0FfQkFTRSArIDEyKQorI2RlZmluZSBPTUFQMTUxMF9JTlRfRVRIRVIJCShPTUFQMTUxMF9JSF9GUEdBX0JBU0UgKyAxMykKKyNkZWZpbmUgT01BUDE1MTBfSU5UX0ZQR0FVQVJUMQkJKE9NQVAxNTEwX0lIX0ZQR0FfQkFTRSArIDE0KQorI2RlZmluZSBPTUFQMTUxMF9JTlRfRlBHQVVBUlQyCQkoT01BUDE1MTBfSUhfRlBHQV9CQVNFICsgMTUpCisjZGVmaW5lIE9NQVAxNTEwX0lOVF9GUEdBX1RTCQkoT01BUDE1MTBfSUhfRlBHQV9CQVNFICsgMTYpCisjZGVmaW5lIE9NQVAxNTEwX0lOVF9GUEdBMTcJCShPTUFQMTUxMF9JSF9GUEdBX0JBU0UgKyAxNykKKyNkZWZpbmUgT01BUDE1MTBfSU5UX0ZQR0FfQ0FNCQkoT01BUDE1MTBfSUhfRlBHQV9CQVNFICsgMTgpCisjZGVmaW5lIE9NQVAxNTEwX0lOVF9GUEdBX1JUQ19BCQkoT01BUDE1MTBfSUhfRlBHQV9CQVNFICsgMTkpCisjZGVmaW5lIE9NQVAxNTEwX0lOVF9GUEdBX1JUQ19CCQkoT01BUDE1MTBfSUhfRlBHQV9CQVNFICsgMjApCisjZGVmaW5lIE9NQVAxNTEwX0lOVF9GUEdBX0NECQkoT01BUDE1MTBfSUhfRlBHQV9CQVNFICsgMjEpCisjZGVmaW5lIE9NQVAxNTEwX0lOVF9GUEdBMjIJCShPTUFQMTUxMF9JSF9GUEdBX0JBU0UgKyAyMikKKyNkZWZpbmUgT01BUDE1MTBfSU5UX0ZQR0EyMwkJKE9NQVAxNTEwX0lIX0ZQR0FfQkFTRSArIDIzKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZ3Bpby5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ncGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFkMmZjOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZ3Bpby5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2dwaW8uaAorICoKKyAqIE9NQVAgR1BJTyBoYW5kbGluZyBkZWZpbmVzIGFuZCBmdW5jdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBXcml0dGVuIGJ5IEp1aGEgWXJq9mzkIDxqdWhhLnlyam9sYUBub2tpYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICoKKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfT01BUF9HUElPX0gKKyNkZWZpbmUgX19BU01fQVJDSF9PTUFQX0dQSU9fSAorCisjaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9pcnFzLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNkZWZpbmUgT01BUF9NUFVJT19CQVNFCQkJMHhmZmZiNTAwMAorI2RlZmluZSBPTUFQX01QVUlPX0lOUFVUX0xBVENICQkweDAwCisjZGVmaW5lIE9NQVBfTVBVSU9fT1VUUFVUCQkweDA0CisjZGVmaW5lIE9NQVBfTVBVSU9fSU9fQ05UTAkJMHgwOAorI2RlZmluZSBPTUFQX01QVUlPX0tCUl9MQVRDSAkJMHgxMAorI2RlZmluZSBPTUFQX01QVUlPX0tCQwkJCTB4MTQKKyNkZWZpbmUgT01BUF9NUFVJT19HUElPX0VWRU5UX01PREUJMHgxOAorI2RlZmluZSBPTUFQX01QVUlPX0dQSU9fSU5UX0VER0UJMHgxYworI2RlZmluZSBPTUFQX01QVUlPX0tCRF9JTlQJCTB4MjAKKyNkZWZpbmUgT01BUF9NUFVJT19HUElPX0lOVAkJMHgyNAorI2RlZmluZSBPTUFQX01QVUlPX0tCRF9NQVNLSVQJCTB4MjgKKyNkZWZpbmUgT01BUF9NUFVJT19HUElPX01BU0tJVAkJMHgyYworI2RlZmluZSBPTUFQX01QVUlPX0dQSU9fREVCT1VOQ0lORwkweDMwCisjZGVmaW5lIE9NQVBfTVBVSU9fTEFUQ0gJCTB4MzQKKworI2RlZmluZSBPTUFQX01QVUlPKG5yKQkJKE9NQVBfTUFYX0dQSU9fTElORVMgKyAobnIpKQorI2RlZmluZSBPTUFQX0dQSU9fSVNfTVBVSU8obnIpCSgobnIpID49IE9NQVBfTUFYX0dQSU9fTElORVMpCisKKyNkZWZpbmUgT01BUF9HUElPX0lSUShucikJKE9NQVBfR1BJT19JU19NUFVJTyhucikgPyBcCisJCQkJIElIX01QVUlPX0JBU0UgKyAoKG5yKSAmIDB4MGYpIDogXAorCQkJCSBJSF9HUElPX0JBU0UgKyAoKG5yKSAmIDB4M2YpKQorCisvKiBGb3IgRURHRUNUUkwgKi8KKyNkZWZpbmUgT01BUF9HUElPX05PX0VER0UJICAweDAwCisjZGVmaW5lIE9NQVBfR1BJT19GQUxMSU5HX0VER0UJICAweDAxCisjZGVmaW5lIE9NQVBfR1BJT19SSVNJTkdfRURHRQkgIDB4MDIKKyNkZWZpbmUgT01BUF9HUElPX0JPVEhfRURHRVMJICAweDAzCisKK2V4dGVybiBpbnQgb21hcF9ncGlvX2luaXQodm9pZCk7CS8qIENhbGwgZnJvbSBib2FyZCBpbml0IG9ubHkgKi8KK2V4dGVybiBpbnQgb21hcF9yZXF1ZXN0X2dwaW8oaW50IGdwaW8pOworZXh0ZXJuIHZvaWQgb21hcF9mcmVlX2dwaW8oaW50IGdwaW8pOworZXh0ZXJuIHZvaWQgb21hcF9zZXRfZ3Bpb19kaXJlY3Rpb24oaW50IGdwaW8sIGludCBpc19pbnB1dCk7CitleHRlcm4gdm9pZCBvbWFwX3NldF9ncGlvX2RhdGFvdXQoaW50IGdwaW8sIGludCBlbmFibGUpOworZXh0ZXJuIGludCBvbWFwX2dldF9ncGlvX2RhdGFpbihpbnQgZ3Bpbyk7CitleHRlcm4gdm9pZCBvbWFwX3NldF9ncGlvX2VkZ2VfY3RybChpbnQgZ3BpbywgaW50IGVkZ2UpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvaGFyZHdhcmUuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvaGFyZHdhcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2UwNmM3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9oYXJkd2FyZS5oCkBAIC0wLDAgKzEsMzI0IEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9oYXJkd2FyZS5oCisgKgorICogSGFyZHdhcmUgZGVmaW5pdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycyBhbmQgYm9hcmRzCisgKgorICogTk9URTogUGxlYXNlIHB1dCBkZXZpY2UgZHJpdmVyIHNwZWNpZmljIGRlZmluZXMgaW50byBhIHNlcGFyYXRlIGhlYWRlcgorICoJIGZpbGUgZm9yIGVhY2ggZHJpdmVyLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMSBSaWRnZVJ1biwgSW5jLgorICogQXV0aG9yOiBSaWRnZVJ1biwgSW5jLiBHcmVnIExvbm5vbiA8Z2xvbm5vbkByaWRnZXJ1bi5jb20+CisgKgorICogUmVvcmdhbml6ZWQgZm9yIExpbnV4LTIuNiBieSBUb255IExpbmRncmVuIDx0b255QGF0b21pZGUuY29tPgorICogICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBEaXJrIEJlaG1lIDxkaXJrLmJlaG1lQGRlLmJvc2NoLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisgKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4KKyAqIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKKyAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfT01BUF9IQVJEV0FSRV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfT01BUF9IQVJEV0FSRV9ICisKKyNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpZm5kZWYgX19BU1NFTUJMRVJfXworI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2NwdS5oPgorI2VuZGlmCisjaW5jbHVkZSA8YXNtL2FyY2gvaW8uaD4KKworLyoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogQ29tbW9uIGRlZmluaXRpb25zIGZvciBhbGwgT01BUCBwcm9jZXNzb3JzCisgKiBOT1RFOiBQdXQgYWxsIHByb2Nlc3NvciBvciBib2FyZCBzcGVjaWZpYyBwYXJ0cyB0byB0aGUgc3BlY2lhbCBoZWFkZXIKKyAqCSBmaWxlcy4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKy8qCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBDbG9ja3MKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2RlZmluZSBDTEtHRU5fUkVHX0JBU0UJCSgweGZmZmVjZTAwKQorI2RlZmluZSBBUk1fQ0tDVEwJCShDTEtHRU5fUkVHX0JBU0UgKyAweDApCisjZGVmaW5lIEFSTV9JRExFQ1QxCQkoQ0xLR0VOX1JFR19CQVNFICsgMHg0KQorI2RlZmluZSBBUk1fSURMRUNUMgkJKENMS0dFTl9SRUdfQkFTRSArIDB4OCkKKyNkZWZpbmUgQVJNX0VXVVBDVAkJKENMS0dFTl9SRUdfQkFTRSArIDB4QykKKyNkZWZpbmUgQVJNX1JTVENUMQkJKENMS0dFTl9SRUdfQkFTRSArIDB4MTApCisjZGVmaW5lIEFSTV9SU1RDVDIJCShDTEtHRU5fUkVHX0JBU0UgKyAweDE0KQorI2RlZmluZSBBUk1fU1lTU1QJCShDTEtHRU5fUkVHX0JBU0UgKyAweDE4KQorI2RlZmluZSBBUk1fSURMRUNUMwkJKENMS0dFTl9SRUdfQkFTRSArIDB4MjQpCisKKyNkZWZpbmUgQ0tfUkFURUYJCTEKKyNkZWZpbmUgQ0tfSURMRUYJCTIKKyNkZWZpbmUgQ0tfRU5BQkxFRgkJNAorI2RlZmluZSBDS19TRUxFQ1RGCQk4CisjZGVmaW5lIFNFVEFSTV9JRExFX1NISUZUCisKKy8qIERQTEwgY29udHJvbCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgRFBMTF9DVEwJCSgweGZmZmVjZjAwKQorCisvKiBEU1AgY2xvY2sgY29udHJvbCAqLworI2RlZmluZSBEU1BfQ09ORklHX1JFR19CQVNFICAgICAoMHhlMTAwODAwMCkKKyNkZWZpbmUgRFNQX0lETEVDVDEJCShEU1BfQ09ORklHX1JFR19CQVNFICsgMHg0KQorI2RlZmluZSBEU1BfSURMRUNUMgkJKERTUF9DT05GSUdfUkVHX0JBU0UgKyAweDgpCisKKy8qCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVQTEQKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjZGVmaW5lIFVMUERfUkVHX0JBU0UJCSgweGZmZmUwODAwKQorI2RlZmluZSBVTFBEX0lUX1NUQVRVUwkJKFVMUERfUkVHX0JBU0UgKyAweDE0KQorI2RlZmluZSBVTFBEX0NMT0NLX0NUUkwJCShVTFBEX1JFR19CQVNFICsgMHgzMCkKKyMJZGVmaW5lIERJU19VU0JfUFZDSV9DTEsJCSgxIDw8IDUpCS8qIG5vIFVTQi9GQUMgc3luY2ggKi8KKyMJZGVmaW5lIFVTQl9NQ0xLX0VOCQkoMSA8PCA0KQkvKiBlbmFibGUgVzRfVVNCX0NMS08gKi8KKyNkZWZpbmUgVUxQRF9TT0ZUX1JFUQkJKFVMUERfUkVHX0JBU0UgKyAweDM0KQorIwlkZWZpbmUgU09GVF9VRENfUkVRCQkoMSA8PCA0KQorIwlkZWZpbmUgU09GVF9VU0JfQ0xLX1JFUQkJKDEgPDwgMykKKyMJZGVmaW5lIFNPRlRfRFBMTF9SRVEJCSgxIDw8IDApCisjZGVmaW5lIFVMUERfRFBMTF9DVFJMCQkoVUxQRF9SRUdfQkFTRSArIDB4M2MpCisjZGVmaW5lIFVMUERfU1RBVFVTX1JFUQkJKFVMUERfUkVHX0JBU0UgKyAweDQwKQorI2RlZmluZSBVTFBEX0FQTExfQ1RSTAkJKFVMUERfUkVHX0JBU0UgKyAweDRjKQorI2RlZmluZSBVTFBEX1BPV0VSX0NUUkwJCShVTFBEX1JFR19CQVNFICsgMHg1MCkKKyNkZWZpbmUgVUxQRF9TT0ZUX0RJU0FCTEVfUkVRX1JFRwkoVUxQRF9SRUdfQkFTRSArIDB4NjgpCisjCWRlZmluZSBESVNfTU1DMl9EUExMX1JFUQkoMSA8PCAxMSkKKyMJZGVmaW5lIERJU19NTUMxX0RQTExfUkVRCSgxIDw8IDEwKQorIwlkZWZpbmUgRElTX1VBUlQzX0RQTExfUkVRCSgxIDw8IDkpCisjCWRlZmluZSBESVNfVUFSVDJfRFBMTF9SRVEJKDEgPDwgOCkKKyMJZGVmaW5lIERJU19VQVJUMV9EUExMX1JFUQkoMSA8PCA3KQorIwlkZWZpbmUgRElTX1VTQl9IT1NUX0RQTExfUkVRCSgxIDw8IDYpCisjZGVmaW5lIFVMUERfU0RXX0NMS19ESVZfQ1RSTF9TRUwJKFVMUERfUkVHX0JBU0UgKyAweDc0KQorI2RlZmluZSBVTFBEX0NBTV9DTEtfQ1RSTAkoVUxQRF9SRUdfQkFTRSArIDB4N2MpCisKKy8qCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFdhdGNoZG9nIHRpbWVyCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisvKiBXYXRjaGRvZyB0aW1lciB3aXRoaW4gdGhlIE9NQVAzLjIgZ2lnYWNlbGwgKi8KKyNkZWZpbmUgT01BUF9NUFVfV0FUQ0hET0dfQkFTRQkoMHhmZmZlYzgwMCkKKyNkZWZpbmUgT01BUF9XRFRfVElNRVIJCShPTUFQX01QVV9XQVRDSERPR19CQVNFICsgMHgwKQorI2RlZmluZSBPTUFQX1dEVF9MT0FEX1RJTQkoT01BUF9NUFVfV0FUQ0hET0dfQkFTRSArIDB4NCkKKyNkZWZpbmUgT01BUF9XRFRfUkVBRF9USU0JKE9NQVBfTVBVX1dBVENIRE9HX0JBU0UgKyAweDQpCisjZGVmaW5lIE9NQVBfV0RUX1RJTUVSX01PREUJKE9NQVBfTVBVX1dBVENIRE9HX0JBU0UgKyAweDgpCisKKy8qCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEludGVycnVwdHMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjZGVmaW5lIE9NQVBfSUgxX0JBU0UJCTB4ZmZmZWNiMDAKKyNkZWZpbmUgT01BUF9JSDJfQkFTRQkJMHhmZmZlMDAwMAorCisjZGVmaW5lIE9NQVBfSUgxX0lUUgkJKE9NQVBfSUgxX0JBU0UgKyAweDAwKQorI2RlZmluZSBPTUFQX0lIMV9NSVIJCShPTUFQX0lIMV9CQVNFICsgMHgwNCkKKyNkZWZpbmUgT01BUF9JSDFfU0lSX0lSUQkoT01BUF9JSDFfQkFTRSArIDB4MTApCisjZGVmaW5lIE9NQVBfSUgxX1NJUl9GSVEJKE9NQVBfSUgxX0JBU0UgKyAweDE0KQorI2RlZmluZSBPTUFQX0lIMV9DT05UUk9MCShPTUFQX0lIMV9CQVNFICsgMHgxOCkKKyNkZWZpbmUgT01BUF9JSDFfSUxSMAkJKE9NQVBfSUgxX0JBU0UgKyAweDFjKQorI2RlZmluZSBPTUFQX0lIMV9JU1IJCShPTUFQX0lIMV9CQVNFICsgMHg5YykKKworI2RlZmluZSBPTUFQX0lIMl9JVFIJCShPTUFQX0lIMl9CQVNFICsgMHgwMCkKKyNkZWZpbmUgT01BUF9JSDJfTUlSCQkoT01BUF9JSDJfQkFTRSArIDB4MDQpCisjZGVmaW5lIE9NQVBfSUgyX1NJUl9JUlEJKE9NQVBfSUgyX0JBU0UgKyAweDEwKQorI2RlZmluZSBPTUFQX0lIMl9TSVJfRklRCShPTUFQX0lIMl9CQVNFICsgMHgxNCkKKyNkZWZpbmUgT01BUF9JSDJfQ09OVFJPTAkoT01BUF9JSDJfQkFTRSArIDB4MTgpCisjZGVmaW5lIE9NQVBfSUgyX0lMUjAJCShPTUFQX0lIMl9CQVNFICsgMHgxYykKKyNkZWZpbmUgT01BUF9JSDJfSVNSCQkoT01BUF9JSDJfQkFTRSArIDB4OWMpCisKKyNkZWZpbmUgSVJRX0lUUl9SRUdfT0ZGU0VUCTB4MDAKKyNkZWZpbmUgSVJRX01JUl9SRUdfT0ZGU0VUCTB4MDQKKyNkZWZpbmUgSVJRX1NJUl9JUlFfUkVHX09GRlNFVAkweDEwCisjZGVmaW5lIElSUV9TSVJfRklRX1JFR19PRkZTRVQJMHgxNAorI2RlZmluZSBJUlFfQ09OVFJPTF9SRUdfT0ZGU0VUCTB4MTgKKyNkZWZpbmUgSVJRX0lTUl9SRUdfT0ZGU0VUCTB4OWMKKyNkZWZpbmUgSVJRX0lMUjBfUkVHX09GRlNFVAkweDFjCisjZGVmaW5lIElSUV9HTVJfUkVHX09GRlNFVAkweGEwCisKKy8qCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBTeXN0ZW0gY29udHJvbCByZWdpc3RlcnMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2RlZmluZSBNT0RfQ09ORl9DVFJMXzAJCTB4ZmZmZTEwODAKKyNkZWZpbmUgTU9EX0NPTkZfQ1RSTF8xCQkweGZmZmUxMTEwCisKKy8qCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBQaW4gbXVsdGlwbGV4aW5nIHJlZ2lzdGVycworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjZGVmaW5lIEZVTkNfTVVYX0NUUkxfMAkJMHhmZmZlMTAwMAorI2RlZmluZSBGVU5DX01VWF9DVFJMXzEJCTB4ZmZmZTEwMDQKKyNkZWZpbmUgRlVOQ19NVVhfQ1RSTF8yCQkweGZmZmUxMDA4CisjZGVmaW5lIENPTVBfTU9ERV9DVFJMXzAJMHhmZmZlMTAwYworI2RlZmluZSBGVU5DX01VWF9DVFJMXzMJCTB4ZmZmZTEwMTAKKyNkZWZpbmUgRlVOQ19NVVhfQ1RSTF80CQkweGZmZmUxMDE0CisjZGVmaW5lIEZVTkNfTVVYX0NUUkxfNQkJMHhmZmZlMTAxOAorI2RlZmluZSBGVU5DX01VWF9DVFJMXzYJCTB4ZmZmZTEwMUMKKyNkZWZpbmUgRlVOQ19NVVhfQ1RSTF83CQkweGZmZmUxMDIwCisjZGVmaW5lIEZVTkNfTVVYX0NUUkxfOAkJMHhmZmZlMTAyNAorI2RlZmluZSBGVU5DX01VWF9DVFJMXzkJCTB4ZmZmZTEwMjgKKyNkZWZpbmUgRlVOQ19NVVhfQ1RSTF9BCQkweGZmZmUxMDJDCisjZGVmaW5lIEZVTkNfTVVYX0NUUkxfQgkJMHhmZmZlMTAzMAorI2RlZmluZSBGVU5DX01VWF9DVFJMX0MJCTB4ZmZmZTEwMzQKKyNkZWZpbmUgRlVOQ19NVVhfQ1RSTF9ECQkweGZmZmUxMDM4CisjZGVmaW5lIFBVTExfRFdOX0NUUkxfMAkJMHhmZmZlMTA0MAorI2RlZmluZSBQVUxMX0RXTl9DVFJMXzEJCTB4ZmZmZTEwNDQKKyNkZWZpbmUgUFVMTF9EV05fQ1RSTF8yCQkweGZmZmUxMDQ4CisjZGVmaW5lIFBVTExfRFdOX0NUUkxfMwkJMHhmZmZlMTA0YworI2RlZmluZSBQVUxMX0RXTl9DVFJMXzQJCTB4ZmZmZTEwYWMKKworLyogT01BUC0xNjEwIHNwZWNpZmljIG11bHRpcGxleGluZyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgRlVOQ19NVVhfQ1RSTF9FCQkweGZmZmUxMDkwCisjZGVmaW5lIEZVTkNfTVVYX0NUUkxfRgkJMHhmZmZlMTA5NAorI2RlZmluZSBGVU5DX01VWF9DVFJMXzEwCTB4ZmZmZTEwOTgKKyNkZWZpbmUgRlVOQ19NVVhfQ1RSTF8xMQkweGZmZmUxMDljCisjZGVmaW5lIEZVTkNfTVVYX0NUUkxfMTIJMHhmZmZlMTBhMAorI2RlZmluZSBQVV9QRF9TRUxfMAkJMHhmZmZlMTBiNAorI2RlZmluZSBQVV9QRF9TRUxfMQkJMHhmZmZlMTBiOAorI2RlZmluZSBQVV9QRF9TRUxfMgkJMHhmZmZlMTBiYworI2RlZmluZSBQVV9QRF9TRUxfMwkJMHhmZmZlMTBjMAorI2RlZmluZSBQVV9QRF9TRUxfNAkJMHhmZmZlMTBjNAorCisvKiBUaW1lcjMySyBmb3IgMTYxMCBhbmQgMTcxMCovCisjZGVmaW5lIE9NQVBfVElNRVIzMktfQkFTRQkweEZGRkJDNDAwCisKKy8qCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFRJUEIgYnVzIGludGVyZmFjZQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNkZWZpbmUgVElQQl9QVUJMSUNfQ05UTF9CQVNFCQkweGZmZmVkMzAwCisjZGVmaW5lIE1QVV9QVUJMSUNfVElQQl9DTlRMCQkoVElQQl9QVUJMSUNfQ05UTF9CQVNFICsgMHg4KQorI2RlZmluZSBUSVBCX1BSSVZBVEVfQ05UTF9CQVNFCQkweGZmZmVjYTAwCisjZGVmaW5lIE1QVV9QUklWQVRFX1RJUEJfQ05UTAkJKFRJUEJfUFJJVkFURV9DTlRMX0JBU0UgKyAweDgpCisKKy8qCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBNUFVJIGludGVyZmFjZQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjZGVmaW5lIE1QVUlfQkFTRQkJCSgweGZmZmVjOTAwKQorI2RlZmluZSBNUFVJX0NUUkwJCQkoTVBVSV9CQVNFICsgMHgwKQorI2RlZmluZSBNUFVJX0RFQlVHX0FERFIJCQkoTVBVSV9CQVNFICsgMHg0KQorI2RlZmluZSBNUFVJX0RFQlVHX0RBVEEJCQkoTVBVSV9CQVNFICsgMHg4KQorI2RlZmluZSBNUFVJX0RFQlVHX0ZMQUcJCQkoTVBVSV9CQVNFICsgMHhjKQorI2RlZmluZSBNUFVJX1NUQVRVU19SRUcJCQkoTVBVSV9CQVNFICsgMHgxMCkKKyNkZWZpbmUgTVBVSV9EU1BfU1RBVFVTCQkJKE1QVUlfQkFTRSArIDB4MTQpCisjZGVmaW5lIE1QVUlfRFNQX0JPT1RfQ09ORklHCQkoTVBVSV9CQVNFICsgMHgxOCkKKyNkZWZpbmUgTVBVSV9EU1BfQVBJX0NPTkZJRwkJKE1QVUlfQkFTRSArIDB4MWMpCisKKy8qCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBMRUQgUHVsc2UgR2VuZXJhdG9yCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNkZWZpbmUgT01BUF9MUEcxX0JBU0UJCQkweGZmZmJkMDAwCisjZGVmaW5lIE9NQVBfTFBHMl9CQVNFCQkJMHhmZmZiZDgwMAorI2RlZmluZSBPTUFQX0xQRzFfTENSCQkJKE9NQVBfTFBHMV9CQVNFICsgMHgwMCkKKyNkZWZpbmUgT01BUF9MUEcxX1BNUgkJCShPTUFQX0xQRzFfQkFTRSArIDB4MDQpCisjZGVmaW5lIE9NQVBfTFBHMl9MQ1IJCQkoT01BUF9MUEcyX0JBU0UgKyAweDAwKQorI2RlZmluZSBPTUFQX0xQRzJfUE1SCQkJKE9NQVBfTFBHMl9CQVNFICsgMHgwNCkKKworI2lmbmRlZiBfX0FTU0VNQkxFUl9fCisKKy8qCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFNlcmlhbCBwb3J0cworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNkZWZpbmUgT01BUF9VQVJUMV9CQVNFCQkodW5zaWduZWQgY2hhciAqKTB4ZmZmYjAwMDAKKyNkZWZpbmUgT01BUF9VQVJUMl9CQVNFCQkodW5zaWduZWQgY2hhciAqKTB4ZmZmYjA4MDAKKyNkZWZpbmUgT01BUF9VQVJUM19CQVNFCQkodW5zaWduZWQgY2hhciAqKTB4ZmZmYjk4MDAKKyNkZWZpbmUgT01BUF9NQVhfTlJfUE9SVFMJMworI2RlZmluZSBPTUFQMTUxMF9CQVNFX0JBVUQJKDEyMDAwMDAwLzE2KQorI2RlZmluZSBPTUFQMTZYWF9CQVNFX0JBVUQJKDQ4MDAwMDAwLzE2KQorCisjZGVmaW5lIGlzX29tYXBfcG9ydChwKQkoe2ludCBfX3JldCA9IDA7CQkJXAorCQkJaWYgKHAgPT0gSU9fQUREUkVTUyhPTUFQX1VBUlQxX0JBU0UpIHx8CVwKKwkJCSAgICBwID09IElPX0FERFJFU1MoT01BUF9VQVJUMl9CQVNFKSB8fAlcCisJCQkgICAgcCA9PSBJT19BRERSRVNTKE9NQVBfVUFSVDNfQkFTRSkpCVwKKwkJCQlfX3JldCA9IDE7CQkJXAorCQkJX19yZXQ7CQkJCQlcCisJCQl9KQorCisvKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBQcm9jZXNzb3Igc3BlY2lmaWMgZGVmaW5lcworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQNzMwCisjaW5jbHVkZSAib21hcDczMC5oIgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTUxMAorI2luY2x1ZGUgIm9tYXAxNTEwLmgiCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNlhYCisjaW5jbHVkZSAib21hcDE2eHguaCIKKyNlbmRpZgorCisvKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBCb2FyZCBzcGVjaWZpYyBkZWZpbmVzCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaWZkZWYgQ09ORklHX01BQ0hfT01BUF9JTk5PVkFUT1IKKyNpbmNsdWRlICJib2FyZC1pbm5vdmF0b3IuaCIKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfT01BUF9IMgorI2luY2x1ZGUgImJvYXJkLWgyLmgiCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NQUNIX09NQVBfUEVSU0VVUzIKKyNpbmNsdWRlICJib2FyZC1wZXJzZXVzMi5oIgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9PTUFQX0gzCisjaW5jbHVkZSAiYm9hcmQtaDMuaCIKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfT01BUF9INAorI2luY2x1ZGUgImJvYXJkLWg0LmgiCisjZXJyb3IgIlN1cHBvcnQgZm9yIEg0IGJvYXJkIG5vdCB5ZXQgaW1wbGVtZW50ZWQuIgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9PTUFQX09TSworI2luY2x1ZGUgImJvYXJkLW9zay5oIgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9WT0lDRUJMVUUKKyNpbmNsdWRlICJib2FyZC12b2ljZWJsdWUuaCIKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfTkVUU1RBUgorI2luY2x1ZGUgImJvYXJkLW5ldHN0YXIuaCIKKyNlbmRpZgorCisjZW5kaWYgLyogIV9fQVNTRU1CTEVSX18gKi8KKworI2VuZGlmCS8qIF9fQVNNX0FSQ0hfT01BUF9IQVJEV0FSRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2lvLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2lvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM4YzlmYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvaW8uaApAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvaW8uaAorICoKKyAqIElPIGRlZmluaXRpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMgYW5kIGJvYXJkcworICoKKyAqIENvcGllZCBmcm9tIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9pby5oCisgKiBDb3B5cmlnaHQgKEMpIDE5OTctMTk5OSBSdXNzZWxsIEtpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisgKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4KKyAqIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKKyAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKiBNb2RpZmljYXRpb25zOgorICogIDA2LTEyLTE5OTcJUk1LCUNyZWF0ZWQuCisgKiAgMDctMDQtMTk5OQlSTUsJTWFqb3IgY2xlYW51cAorICovCisKKyNpZm5kZWYgX19BU01fQVJNX0FSQ0hfSU9fSAorI2RlZmluZSBfX0FTTV9BUk1fQVJDSF9JT19ICisKKyNkZWZpbmUgSU9fU1BBQ0VfTElNSVQgMHhmZmZmZmZmZgorCisvKgorICogV2UgZG9uJ3QgYWN0dWFsbHkgaGF2ZSByZWFsIElTQSBub3IgUENJIGJ1c2VzLCBidXQgdGhlcmUgaXMgc28gbWFueQorICogZHJpdmVycyBvdXQgdGhlcmUgdGhhdCBtaWdodCBqdXN0IHdvcmsgaWYgd2UgZmFrZSB0aGVtLi4uCisgKi8KKyNkZWZpbmUgX19pbyhhKQkJCSgodm9pZCBfX2lvbWVtICopKFBDSU9fQkFTRSArIChhKSkpCisjZGVmaW5lIF9fbWVtX3BjaShhKQkJKGEpCisjZGVmaW5lIF9fbWVtX2lzYShhKQkJKGEpCisKKy8qCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJL08gbWFwcGluZworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjZGVmaW5lIElPX1BIWVMJCQkweEZGRkIwMDAwCisjZGVmaW5lIElPX09GRlNFVAkJMHgwMTAwMDAwMAkvKiBWaXJ0dWFsIElPID0gMHhmZWZiMDAwMCAqLworI2RlZmluZSBJT19WSVJUCQkJKElPX1BIWVMgLSBJT19PRkZTRVQpCisjZGVmaW5lIElPX1NJWkUJCQkweDQwMDAwCisjZGVmaW5lIElPX0FERFJFU1MoeCkJCSgoeCkgLSBJT19PRkZTRVQpCisKKyNkZWZpbmUgUENJT19CQVNFCQkwCisKKyNkZWZpbmUgaW9fcDJ2KHgpICAgICAgICAgICAgICAgKCh4KSAtIElPX09GRlNFVCkKKyNkZWZpbmUgaW9fdjJwKHgpICAgICAgICAgICAgICAgKCh4KSArIElPX09GRlNFVCkKKworI2lmbmRlZiBfX0FTU0VNQkxFUl9fCisKKy8qCisgKiBGdW5jdGlvbnMgdG8gYWNjZXNzIHRoZSBPTUFQIElPIHJlZ2lvbgorICoKKyAqIE5PVEU6IC0gVXNlIG9tYXBfcmVhZC93cml0ZVtid2xdIGZvciBwaHlzaWNhbCByZWdpc3RlciBhZGRyZXNzZXMKKyAqCSAtIFVzZSBfX3Jhd19yZWFkL3dyaXRlW2J3bF0oKSBmb3IgdmlydHVhbCByZWdpc3RlciBhZGRyZXNzZXMKKyAqCSAtIFVzZSBJT19BRERSRVNTKHBoeXNfYWRkcikgdG8gY29udmVydCByZWdpc3RlcnMgdG8gdmlydHVhbCBhZGRyZXNzZXMKKyAqCSAtIERPIE5PVCB1c2UgaGFyZGNvZGVkIHZpcnR1YWwgYWRkcmVzc2VzIHRvIGFsbG93IGNoYW5naW5nIHRoZQorICoJICAgSU8gYWRkcmVzcyBzcGFjZSBhZ2FpbiBpZiBuZWVkZWQKKyAqLworI2RlZmluZSBvbWFwX3JlYWRiKGEpCQkoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICAqKUlPX0FERFJFU1MoYSkpCisjZGVmaW5lIG9tYXBfcmVhZHcoYSkJCSgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopSU9fQUREUkVTUyhhKSkKKyNkZWZpbmUgb21hcF9yZWFkbChhKQkJKCoodm9sYXRpbGUgdW5zaWduZWQgaW50ICAgKilJT19BRERSRVNTKGEpKQorCisjZGVmaW5lIG9tYXBfd3JpdGViKHYsYSkJKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAgKilJT19BRERSRVNTKGEpID0gKHYpKQorI2RlZmluZSBvbWFwX3dyaXRldyh2LGEpCSgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopSU9fQUREUkVTUyhhKSA9ICh2KSkKKyNkZWZpbmUgb21hcF93cml0ZWwodixhKQkoKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgICAqKUlPX0FERFJFU1MoYSkgPSAodikpCisKKy8qIDE2IGJpdCB1c2VzIExEUkgvU1RSSCwgYmFzZSArLy0gb2Zmc2V0XzggKi8KK3R5cGVkZWYgc3RydWN0IHsgdm9sYXRpbGUgdTE2IG9mZnNldFsyNTZdOyB9IF9fcmVnYmFzZTE2OworI2RlZmluZSBfX1JFR1YxNih2YWRkcikJCSgoX19yZWdiYXNlMTYgKikoKHZhZGRyKSZ+MHhmZikpIFwKKwkJCQkJLT5vZmZzZXRbKCh2YWRkcikmMHhmZik+PjFdCisjZGVmaW5lIF9fUkVHMTYocGFkZHIpICAgICAgICAgIF9fUkVHVjE2KGlvX3AydihwYWRkcikpCisKKy8qIDgvMzIgYml0IHVzZXMgTERSL1NUUiwgYmFzZSArLy0gb2Zmc2V0XzEyICovCit0eXBlZGVmIHN0cnVjdCB7IHZvbGF0aWxlIHU4IG9mZnNldFs0MDk2XTsgfSBfX3JlZ2Jhc2U4OworI2RlZmluZSBfX1JFR1Y4KHZhZGRyKQkJKChfX3JlZ2Jhc2U4ICAqKSgodmFkZHIpJn40MDk1KSkgXAorCQkJCQktPm9mZnNldFsoKHZhZGRyKSY0MDk1KT4+MF0KKyNkZWZpbmUgX19SRUc4KHBhZGRyKQkJX19SRUdWOChpb19wMnYocGFkZHIpKQorCit0eXBlZGVmIHN0cnVjdCB7IHZvbGF0aWxlIHUzMiBvZmZzZXRbNDA5Nl07IH0gX19yZWdiYXNlMzI7CisjZGVmaW5lIF9fUkVHVjMyKHZhZGRyKQkJKChfX3JlZ2Jhc2UzMiAqKSgodmFkZHIpJn40MDk1KSkgXAorCQkJCQktPm9mZnNldFsoKHZhZGRyKSY0MDk1KT4+Ml0KKyNkZWZpbmUgX19SRUczMihwYWRkcikJCV9fUkVHVjMyKGlvX3AydihwYWRkcikpCisKKyNlbHNlCisKKyNkZWZpbmUgX19SRUc4KHBhZGRyKQkJaW9fcDJ2KHBhZGRyKQorI2RlZmluZSBfX1JFRzE2KHBhZGRyKQkJaW9fcDJ2KHBhZGRyKQorI2RlZmluZSBfX1JFRzMyKHBhZGRyKQkJaW9fcDJ2KHBhZGRyKQorCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2lycXMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvaXJxcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3MDFmZDkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2lycXMuaApAQCAtMCwwICsxLDI1NSBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2lycXMuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIEdyZWcgTG9ubm9uIDIwMDEKKyAqICBVcGRhdGVkIGZvciBPTUFQLTE2MTAgYnkgVG9ueSBMaW5kZ3JlbiA8dG9ueUBhdG9taWRlLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKgorICogTk9URTogVGhlIGludGVycnVwdCB2ZWN0b3JzIGZvciB0aGUgT01BUC0xNTA5LCBPTUFQLTE1MTAsIGFuZCBPTUFQLTE2MTAKKyAqCSBhcmUgZGlmZmVyZW50LgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9PTUFQMTUxMF9JUlFTX0gKKyNkZWZpbmUgX19BU01fQVJDSF9PTUFQMTUxMF9JUlFTX0gKKworLyoKKyAqIElSUSBudW1iZXJzIGZvciBpbnRlcnJ1cHQgaGFuZGxlciAxCisgKgorICogTk9URTogU2VlIGFsc28gdGhlIE9NQVAtMTUxMCBhbmQgMTYxMCBzcGVjaWZpYyBJUlEgbnVtYmVycyBiZWxvdworICoKKyAqLworI2RlZmluZSBJTlRfSUgyX0lSUQkJMAorI2RlZmluZSBJTlRfQ0FNRVJBCQkxCisjZGVmaW5lIElOVF9GSVEJCQkzCisjZGVmaW5lIElOVF9SVERYCQk2CisjZGVmaW5lIElOVF9EU1BfTU1VX0FCT1JUCTcKKyNkZWZpbmUgSU5UX0hPU1QJCTgKKyNkZWZpbmUgSU5UX0FCT1JUCQk5CisjZGVmaW5lIElOVF9EU1BfTUFJTEJPWDEJMTAKKyNkZWZpbmUgSU5UX0RTUF9NQUlMQk9YMgkxMQorI2RlZmluZSBJTlRfQlJJREdFX1BSSVYJCTEzCisjZGVmaW5lIElOVF9HUElPX0JBTksxCQkxNAorI2RlZmluZSBJTlRfVUFSVDMJCTE1CisjZGVmaW5lIElOVF9USU1FUjMJCTE2CisjZGVmaW5lIElOVF9ETUFfQ0gwXzYJCTE5CisjZGVmaW5lIElOVF9ETUFfQ0gxXzcJCTIwCisjZGVmaW5lIElOVF9ETUFfQ0gyXzgJCTIxCisjZGVmaW5lIElOVF9ETUFfQ0gzCQkyMgorI2RlZmluZSBJTlRfRE1BX0NINAkJMjMKKyNkZWZpbmUgSU5UX0RNQV9DSDUJCTI0CisjZGVmaW5lIElOVF9ETUFfTENECQkyNQorI2RlZmluZSBJTlRfVElNRVIxCQkyNgorI2RlZmluZSBJTlRfV0RfVElNRVIJCTI3CisjZGVmaW5lIElOVF9CUklER0VfUFVCCQkyOAorI2RlZmluZSBJTlRfVElNRVIyCQkzMAorI2RlZmluZSBJTlRfTENEX0NUUkwJCTMxCisKKy8qCisgKiBPTUFQLTE1MTAgc3BlY2lmaWMgSVJRIG51bWJlcnMgZm9yIGludGVycnVwdCBoYW5kbGVyIDEKKyAqLworI2RlZmluZSBJTlRfMTUxMF9SRVMyCQkyCisjZGVmaW5lIElOVF8xNTEwX1NQSV9UWAkJNAorI2RlZmluZSBJTlRfMTUxMF9TUElfUlgJCTUKKyNkZWZpbmUgSU5UXzE1MTBfUkVTMTIJCTEyCisjZGVmaW5lIElOVF8xNTEwX0xCX01NVQkJMTcKKyNkZWZpbmUgSU5UXzE1MTBfUkVTMTgJCTE4CisjZGVmaW5lIElOVF8xNTEwX0xPQ0FMX0JVUwkyOQorCisvKgorICogT01BUC0xNjEwIHNwZWNpZmljIElSUSBudW1iZXJzIGZvciBpbnRlcnJ1cHQgaGFuZGxlciAxCisgKi8KKyNkZWZpbmUgSU5UXzE2MTBfSUgyX0ZJUQkyCisjZGVmaW5lIElOVF8xNjEwX01jQlNQMl9UWAk0CisjZGVmaW5lIElOVF8xNjEwX01jQlNQMl9SWAk1CisjZGVmaW5lIElOVF8xNjEwX0xDRF9MSU5FCTEyCisjZGVmaW5lIElOVF8xNjEwX0dQVElNRVIxCTE3CisjZGVmaW5lIElOVF8xNjEwX0dQVElNRVIyCTE4CisjZGVmaW5lIElOVF8xNjEwX1NTUl9GSUZPXzAJMjkKKworLyoKKyAqIE9NQVAtNzMwIHNwZWNpZmljIElSUSBudW1iZXJzIGZvciBpbnRlcnJ1cHQgaGFuZGxlciAxCisgKi8KKyNkZWZpbmUgSU5UXzczMF9JSDJfRklRCQkwCisjZGVmaW5lIElOVF83MzBfSUgyX0lSUQkJMQorI2RlZmluZSBJTlRfNzMwX1VTQl9OT05fSVNPCTIKKyNkZWZpbmUgSU5UXzczMF9VU0JfSVNPCQkzCisjZGVmaW5lIElOVF83MzBfSUNSCQk0CisjZGVmaW5lIElOVF83MzBfRUFDCQk1CisjZGVmaW5lIElOVF83MzBfR1BJT19CQU5LMQk2CisjZGVmaW5lIElOVF83MzBfR1BJT19CQU5LMgk3CisjZGVmaW5lIElOVF83MzBfR1BJT19CQU5LMwk4CisjZGVmaW5lIElOVF83MzBfTWNCU1AyVFgJMTAKKyNkZWZpbmUgSU5UXzczMF9NY0JTUDJSWAkxMQorI2RlZmluZSBJTlRfNzMwX01jQlNQMlJYX09WRgkxMgorI2RlZmluZSBJTlRfNzMwX0xDRF9MSU5FCTE0CisjZGVmaW5lIElOVF83MzBfR1NNX1BST1RFQ1QJMTUKKyNkZWZpbmUgSU5UXzczMF9USU1FUjMJCTE2CisjZGVmaW5lIElOVF83MzBfR1BJT19CQU5LNQkxNworI2RlZmluZSBJTlRfNzMwX0dQSU9fQkFOSzYJMTgKKyNkZWZpbmUgSU5UXzczMF9TUEdJT19XUgkyOQorCisvKgorICogSVJRIG51bWJlcnMgZm9yIGludGVycnVwdCBoYW5kbGVyIDIKKyAqCisgKiBOT1RFOiBTZWUgYWxzbyB0aGUgT01BUC0xNTEwIGFuZCAxNjEwIHNwZWNpZmljIElSUSBudW1iZXJzIGJlbG93CisgKi8KKyNkZWZpbmUgSUgyX0JBU0UJCTMyCisKKyNkZWZpbmUgSU5UX0tFWUJPQVJECQkoMSArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfdVdpcmVUWAkJKDIgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UX3VXaXJlUlgJCSgzICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF9JMkMJCQkoNCArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfTVBVSU8JCSg1ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF9VU0JfSEhDXzEJCSg2ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF9NY0JTUDNUWAkJKDEwICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF9NY0JTUDNSWAkJKDExICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF9NY0JTUDFUWAkJKDEyICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF9NY0JTUDFSWAkJKDEzICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF9VQVJUMQkJKDE0ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF9VQVJUMgkJKDE1ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF9CVF9NQ1NJMVRYCQkoMTYgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UX0JUX01DU0kxUlgJCSgxNyArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfVVNCX1cyRkMJCSgyMCArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfMVdJUkUJCSgyMSArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfT1NfVElNRVIJCSgyMiArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfTU1DCQkJKDIzICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF9HQVVHRV8zMksJCSgyNCArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfUlRDX1RJTUVSCQkoMjUgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UX1JUQ19BTEFSTQkJKDI2ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF9NRU1fU1RJQ0sJCSgyNyArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfRFNQX01NVQkJKDI4ICsgSUgyX0JBU0UpCisKKy8qCisgKiBPTUFQLTE1MTAgc3BlY2lmaWMgSVJRIG51bWJlcnMgZm9yIGludGVycnVwdCBoYW5kbGVyIDIKKyAqLworI2RlZmluZSBJTlRfMTUxMF9PU18zMmtIel9USU1FUiAoMjIgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzE1MTBfQ09NX1NQSV9STwkoMzEgKyBJSDJfQkFTRSkKKworLyoKKyAqIE9NQVAtMTYxMCBzcGVjaWZpYyBJUlEgbnVtYmVycyBmb3IgaW50ZXJydXB0IGhhbmRsZXIgMgorICovCisjZGVmaW5lIElOVF8xNjEwX0ZBQwkJKDAgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzE2MTBfVVNCX0hIQ18yCSg3ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF8xNjEwX1VTQl9PVEcJKDggKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzE2MTBfU29TU0kJCSg5ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF8xNjEwX1NvU1NJX01BVENICSgxOSArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfMTYxMF9NY0JTUDJSWF9PRgkoMzEgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzE2MTBfU1RJCQkoMzIgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzE2MTBfU1RJX1dBS0VVUAkoMzMgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzE2MTBfR1BUSU1FUjMJKDM0ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF8xNjEwX0dQVElNRVI0CSgzNSArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfMTYxMF9HUFRJTUVSNQkoMzYgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzE2MTBfR1BUSU1FUjYJKDM3ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF8xNjEwX0dQVElNRVI3CSgzOCArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfMTYxMF9HUFRJTUVSOAkoMzkgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzE2MTBfR1BJT19CQU5LMgkoNDAgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzE2MTBfR1BJT19CQU5LMwkoNDEgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzE2MTBfTU1DMgkJKDQyICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF8xNjEwX0NGCQkoNDMgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzE2MTBfR1BJT19CQU5LNAkoNDggKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzE2MTBfU1BJCQkoNDkgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzE2MTBfRE1BX0NINgkoNTMgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzE2MTBfRE1BX0NINwkoNTQgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzE2MTBfRE1BX0NIOAkoNTUgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzE2MTBfRE1BX0NIOQkoNTYgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzE2MTBfRE1BX0NIMTAJKDU3ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF8xNjEwX0RNQV9DSDExCSg1OCArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfMTYxMF9ETUFfQ0gxMgkoNTkgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzE2MTBfRE1BX0NIMTMJKDYwICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF8xNjEwX0RNQV9DSDE0CSg2MSArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfMTYxMF9ETUFfQ0gxNQkoNjIgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzE2MTBfTkFORAkJKDYzICsgSUgyX0JBU0UpCisKKy8qCisgKiBPTUFQLTczMCBzcGVjaWZpYyBJUlEgbnVtYmVycyBmb3IgaW50ZXJydXB0IGhhbmRsZXIgMgorICovCisjZGVmaW5lIElOVF83MzBfSFdfRVJST1JTCSgwICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF83MzBfTkZJUV9QV1JfRkFJTAkoMSArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfNzMwX0NGQ0QJCSgyICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF83MzBfQ0ZJUkVRCQkoMyArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfNzMwX0kyQwkJKDQgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzczMF9QQ0MJCSg1ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF83MzBfTVBVX0VYVF9OSVJRCSg2ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF83MzBfU1BJXzEwMEtfMQkoNyArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfNzMwX1NZUkVOX1NQSQkoOCArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfNzMwX1ZMWU5RCQkoOSArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfNzMwX0dQSU9fQkFOSzQJKDEwICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF83MzBfTWNCU1AxVFgJKDExICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF83MzBfTWNCU1AxUlgJKDEyICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF83MzBfTWNCU1AxUlhfT0YJKDEzICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF83MzBfVUFSVF9NT0RFTV9JUkRBXzIgKDE0ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF83MzBfVUFSVF9NT0RFTV8xCSgxNSArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfNzMwX01DU0kJCSgxNiArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfNzMwX3VXaXJlVFgJCSgxNyArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfNzMwX3VXaXJlUlgJCSgxOCArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfNzMwX1NNQ19DRAkJKDE5ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF83MzBfU01DX0lSRVEJKDIwICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF83MzBfSERRXzFXSVJFCSgyMSArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfNzMwX1RJTUVSMzJLCSgyMiArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfNzMwX01NQ19TRElPCSgyMyArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfNzMwX1VQTEQJCSgyNCArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfNzMwX1VTQl9ISENfMQkoMjcgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzczMF9VU0JfSEhDXzIJKDI4ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF83MzBfVVNCX0dFTkkJKDI5ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF83MzBfVVNCX09URwkJKDMwICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF83MzBfQ0FNRVJBX0lGCSgzMSArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfNzMwX1JORwkJKDMyICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF83MzBfRFVBTF9NT0RFX1RJTUVSICgzMyArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfNzMwX0RCQl9SRl9FTgkoMzQgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzczMF9NUFVJT19LRVlQQUQJKDM1ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF83MzBfU0hBMV9NRDUJKDM2ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF83MzBfU1BJXzEwMEtfMgkoMzcgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzczMF9STkdfSURMRQkoMzggKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzczMF9NUFVJTwkJKDM5ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF83MzBfTExQQ19MQ0RfQ1RSTF9DQU5fQkVfT0ZGCSg0MCArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfNzMwX0xMUENfT0VfRkFMTElORyAoNDEgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzczMF9MTFBDX09FX1JJU0lORwkoNDIgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzczMF9MTFBDX1ZTWU5DCSg0MyArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfNzMwX1dBS0VfVVBfUkVRCSg0NiArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfNzMwX0RNQV9DSDYJCSg1MyArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfNzMwX0RNQV9DSDcJCSg1NCArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfNzMwX0RNQV9DSDgJCSg1NSArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfNzMwX0RNQV9DSDkJCSg1NiArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfNzMwX0RNQV9DSDEwCSg1NyArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfNzMwX0RNQV9DSDExCSg1OCArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfNzMwX0RNQV9DSDEyCSg1OSArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfNzMwX0RNQV9DSDEzCSg2MCArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfNzMwX0RNQV9DSDE0CSg2MSArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfNzMwX0RNQV9DSDE1CSg2MiArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfNzMwX05BTkQJCSg2MyArIElIMl9CQVNFKQorCisvKiBNYXguIDEyOCBsZXZlbCAyIElSUXMgKE9NQVAxNjEwKSwgMTkyIEdQSU9zIChPTUFQNzMwKSBhbmQKKyAqIDE2IE1QVUlPIGxpbmVzICovCisjZGVmaW5lIE9NQVBfTUFYX0dQSU9fTElORVMJMTkyCisjZGVmaW5lIElIX0dQSU9fQkFTRQkJKDEyOCArIElIMl9CQVNFKQorI2RlZmluZSBJSF9NUFVJT19CQVNFCQkoT01BUF9NQVhfR1BJT19MSU5FUyArIElIX0dQSU9fQkFTRSkKKyNkZWZpbmUgSUhfQk9BUkRfQkFTRQkJKDE2ICsgSUhfTVBVSU9fQkFTRSkKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK2V4dGVybiB2b2lkIG9tYXBfaW5pdF9pcnEodm9pZCk7CisjZW5kaWYKKworLyoKKyAqIFRoZSBkZWZpbml0aW9uIG9mIE5SX0lSUVMgaXMgaW4gYm9hcmQtc3BlY2lmaWMgaGVhZGVyIGZpbGUsIHdoaWNoIGlzCisgKiBpbmNsdWRlZCB2aWEgaGFyZHdhcmUuaAorICovCisjaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KKworI2lmbmRlZiBOUl9JUlFTCisjZGVmaW5lIE5SX0lSUVMgICAgICAgICAgICAgICAgIElIX0JPQVJEX0JBU0UKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvbWNic3AuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvbWNic3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDViZGViCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9tY2JzcC5oCkBAIC0wLDAgKzEsMjU3IEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ncGlvLmgKKyAqCisgKiBEZWZpbmVzIGZvciBNdWx0aS1DaGFubmVsIEJ1ZmZlcmVkIFNlcmlhbCBQb3J0CisgKgorICogQ29weXJpZ2h0IChDKSAyMDAyIFJpZGdlUnVuLCBJbmMuCisgKiBBdXRob3I6IFN0ZXZlIEpvaG5zb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKgorICovCisjaWZuZGVmIF9fQVNNX0FSQ0hfT01BUF9NQ0JTUF9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfT01BUF9NQ0JTUF9ICisKKyNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgorCisjZGVmaW5lIE9NQVA3MzBfTUNCU1AxX0JBU0UJMHhmZmZiMTAwMAorI2RlZmluZSBPTUFQNzMwX01DQlNQMl9CQVNFCTB4ZmZmYjE4MDAKKworI2RlZmluZSBPTUFQMTUxMF9NQ0JTUDFfQkFTRQkweGUxMDExODAwCisjZGVmaW5lIE9NQVAxNTEwX01DQlNQMl9CQVNFCTB4ZmZmYjEwMDAKKyNkZWZpbmUgT01BUDE1MTBfTUNCU1AzX0JBU0UJMHhlMTAxNzAwMAorCisjZGVmaW5lIE9NQVAxNjEwX01DQlNQMV9CQVNFCTB4ZTEwMTE4MDAKKyNkZWZpbmUgT01BUDE2MTBfTUNCU1AyX0JBU0UJMHhmZmZiMTAwMAorI2RlZmluZSBPTUFQMTYxMF9NQ0JTUDNfQkFTRQkweGUxMDE3MDAwCisKKyNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfRFJSMgkweDAwCisjZGVmaW5lIE9NQVBfTUNCU1BfUkVHX0RSUjEJMHgwMgorI2RlZmluZSBPTUFQX01DQlNQX1JFR19EWFIyCTB4MDQKKyNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfRFhSMQkweDA2CisjZGVmaW5lIE9NQVBfTUNCU1BfUkVHX1NQQ1IyCTB4MDgKKyNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfU1BDUjEJMHgwYQorI2RlZmluZSBPTUFQX01DQlNQX1JFR19SQ1IyCTB4MGMKKyNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfUkNSMQkweDBlCisjZGVmaW5lIE9NQVBfTUNCU1BfUkVHX1hDUjIJMHgxMAorI2RlZmluZSBPTUFQX01DQlNQX1JFR19YQ1IxCTB4MTIKKyNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfU1JHUjIJMHgxNAorI2RlZmluZSBPTUFQX01DQlNQX1JFR19TUkdSMQkweDE2CisjZGVmaW5lIE9NQVBfTUNCU1BfUkVHX01DUjIJMHgxOAorI2RlZmluZSBPTUFQX01DQlNQX1JFR19NQ1IxCTB4MWEKKyNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfUkNFUkEJMHgxYworI2RlZmluZSBPTUFQX01DQlNQX1JFR19SQ0VSQgkweDFlCisjZGVmaW5lIE9NQVBfTUNCU1BfUkVHX1hDRVJBCTB4MjAKKyNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfWENFUkIJMHgyMgorI2RlZmluZSBPTUFQX01DQlNQX1JFR19QQ1IwCTB4MjQKKyNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfUkNFUkMJMHgyNgorI2RlZmluZSBPTUFQX01DQlNQX1JFR19SQ0VSRAkweDI4CisjZGVmaW5lIE9NQVBfTUNCU1BfUkVHX1hDRVJDCTB4MkEKKyNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfWENFUkQJMHgyQworI2RlZmluZSBPTUFQX01DQlNQX1JFR19SQ0VSRQkweDJFCisjZGVmaW5lIE9NQVBfTUNCU1BfUkVHX1JDRVJGCTB4MzAKKyNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfWENFUkUJMHgzMgorI2RlZmluZSBPTUFQX01DQlNQX1JFR19YQ0VSRgkweDM0CisjZGVmaW5lIE9NQVBfTUNCU1BfUkVHX1JDRVJHCTB4MzYKKyNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfUkNFUkgJMHgzOAorI2RlZmluZSBPTUFQX01DQlNQX1JFR19YQ0VSRwkweDNBCisjZGVmaW5lIE9NQVBfTUNCU1BfUkVHX1hDRVJICTB4M0MKKworI2RlZmluZSBPTUFQX01BWF9NQ0JTUF9DT1VOVCAzCisKKyNkZWZpbmUgT01BUF9NQ0JTUF9SRUFEKGJhc2UsIHJlZykJCV9fcmF3X3JlYWR3KChiYXNlKSArIE9NQVBfTUNCU1BfUkVHXyMjcmVnKQorI2RlZmluZSBPTUFQX01DQlNQX1dSSVRFKGJhc2UsIHJlZywgdmFsKQlfX3Jhd193cml0ZXcoKHZhbCksIChiYXNlKSArIE9NQVBfTUNCU1BfUkVHXyMjcmVnKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKiogTWNCU1AgU1BDUjEgYml0IGRlZmluaXRpb25zICoqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBSUlNUCQkJMHgwMDAxCisjZGVmaW5lIFJSRFkJCQkweDAwMDIKKyNkZWZpbmUgUkZVTEwJCQkweDAwMDQKKyNkZWZpbmUgUlNZTkNfRVJSCQkweDAwMDgKKyNkZWZpbmUgUklOVE0odmFsdWUpCQkoKHZhbHVlKTw8NCkJLyogYml0cyA0OjUgKi8KKyNkZWZpbmUgQUJJUwkJCTB4MDA0MAorI2RlZmluZSBEWEVOQQkJCTB4MDA4MAorI2RlZmluZSBDTEtTVFAodmFsdWUpCQkoKHZhbHVlKTw8MTEpCS8qIGJpdHMgMTE6MTIgKi8KKyNkZWZpbmUgUkpVU1QodmFsdWUpCQkoKHZhbHVlKTw8MTMpCS8qIGJpdHMgMTM6MTQgKi8KKyNkZWZpbmUgRExCCQkJMHg4MDAwCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKiBNY0JTUCBTUENSMiBiaXQgZGVmaW5pdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFhSU1QJCTB4MDAwMQorI2RlZmluZSBYUkRZCQkweDAwMDIKKyNkZWZpbmUgWEVNUFRZCQkweDAwMDQKKyNkZWZpbmUgWFNZTkNfRVJSCTB4MDAwOAorI2RlZmluZSBYSU5UTSh2YWx1ZSkJKCh2YWx1ZSk8PDQpCQkvKiBiaXRzIDQ6NSAqLworI2RlZmluZSBHUlNUCQkweDAwNDAKKyNkZWZpbmUgRlJTVAkJMHgwMDgwCisjZGVmaW5lIFNPRlQJCTB4MDEwMAorI2RlZmluZSBGUkVFCQkweDAyMDAKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqIE1jQlNQIFBDUiBiaXQgZGVmaW5pdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgQ0xLUlAJCTB4MDAwMQorI2RlZmluZSBDTEtYUAkJMHgwMDAyCisjZGVmaW5lIEZTUlAJCTB4MDAwNAorI2RlZmluZSBGU1hQCQkweDAwMDgKKyNkZWZpbmUgRFJfU1RBVAkJMHgwMDEwCisjZGVmaW5lIERYX1NUQVQJCTB4MDAyMAorI2RlZmluZSBDTEtTX1NUQVQJMHgwMDQwCisjZGVmaW5lIFNDTEtNRQkJMHgwMDgwCisjZGVmaW5lIENMS1JNCQkweDAxMDAKKyNkZWZpbmUgQ0xLWE0JCTB4MDIwMAorI2RlZmluZSBGU1JNCQkweDA0MDAKKyNkZWZpbmUgRlNYTQkJMHgwODAwCisjZGVmaW5lIFJJT0VOCQkweDEwMDAKKyNkZWZpbmUgWElPRU4JCTB4MjAwMAorI2RlZmluZSBJRExFX0VOCQkweDQwMDAKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqIE1jQlNQIFJDUjEgYml0IGRlZmluaXRpb25zICoqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgUldETEVOMSh2YWx1ZSkJCSgodmFsdWUpPDw1KQkvKiBCaXRzIDU6NyAqLworI2RlZmluZSBSRlJMRU4xKHZhbHVlKQkJKCh2YWx1ZSk8PDgpCS8qIEJpdHMgODoxNCAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKiogTWNCU1AgWENSMSBiaXQgZGVmaW5pdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBYV0RMRU4xKHZhbHVlKQkJKCh2YWx1ZSk8PDUpCS8qIEJpdHMgNTo3ICovCisjZGVmaW5lIFhGUkxFTjEodmFsdWUpCQkoKHZhbHVlKTw8OCkJLyogQml0cyA4OjE0ICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKiogTWNCU1AgUkNSMiBiaXQgZGVmaW5pdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFJEQVRETFkodmFsdWUpCQkodmFsdWUpCQkvKiBCaXRzIDA6MSAqLworI2RlZmluZSBSRklHCQkJMHgwMDA0CisjZGVmaW5lIFJDT01QQU5EKHZhbHVlKQkJKCh2YWx1ZSk8PDMpCS8qIEJpdHMgMzo0ICovCisjZGVmaW5lIFJXRExFTjIodmFsdWUpCQkoKHZhbHVlKTw8NSkJLyogQml0cyA1OjcgKi8KKyNkZWZpbmUgUkZSTEVOMih2YWx1ZSkJCSgodmFsdWUpPDw4KQkvKiBCaXRzIDg6MTQgKi8KKyNkZWZpbmUgUlBIQVNFCQkJMHg4MDAwCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKiogTWNCU1AgWENSMiBiaXQgZGVmaW5pdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFhEQVRETFkodmFsdWUpCQkodmFsdWUpCQkvKiBCaXRzIDA6MSAqLworI2RlZmluZSBYRklHCQkJMHgwMDA0CisjZGVmaW5lIFhDT01QQU5EKHZhbHVlKQkJKCh2YWx1ZSk8PDMpCS8qIEJpdHMgMzo0ICovCisjZGVmaW5lIFhXRExFTjIodmFsdWUpCQkoKHZhbHVlKTw8NSkJLyogQml0cyA1OjcgKi8KKyNkZWZpbmUgWEZSTEVOMih2YWx1ZSkJCSgodmFsdWUpPDw4KQkvKiBCaXRzIDg6MTQgKi8KKyNkZWZpbmUgWFBIQVNFCQkJMHg4MDAwCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqIE1jQlNQIFNSR1IxIGJpdCBkZWZpbml0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIENMS0dEVih2YWx1ZSkJCSh2YWx1ZSkJCS8qIEJpdHMgMDo3ICovCisjZGVmaW5lIEZXSUQodmFsdWUpCQkoKHZhbHVlKTw8OCkJLyogQml0cyA4OjE1ICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqIE1jQlNQIFNSR1IyIGJpdCBkZWZpbml0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIEZQRVIodmFsdWUpCQkodmFsdWUpCQkvKiBCaXRzIDA6MTEgKi8KKyNkZWZpbmUgRlNHTQkJCTB4MTAwMAorI2RlZmluZSBDTEtTTQkJCTB4MjAwMAorI2RlZmluZSBDTEtTUAkJCTB4NDAwMAorI2RlZmluZSBHU1lOQwkJCTB4ODAwMAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKiBNY0JTUCBNQ1IxIGJpdCBkZWZpbml0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBSTUNNCQkJMHgwMDAxCisjZGVmaW5lIFJDQkxLKHZhbHVlKQkJKCh2YWx1ZSk8PDIpCS8qIEJpdHMgMjo0ICovCisjZGVmaW5lIFJQQUJMSyh2YWx1ZSkJCSgodmFsdWUpPDw1KQkvKiBCaXRzIDU6NiAqLworI2RlZmluZSBSUEJCTEsodmFsdWUpCQkoKHZhbHVlKTw8NykJLyogQml0cyA3OjggKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKiogTWNCU1AgTUNSMiBiaXQgZGVmaW5pdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgWE1DTSh2YWx1ZSkJCSh2YWx1ZSkJCS8qIEJpdHMgMDoxICovCisjZGVmaW5lIFhDQkxLKHZhbHVlKQkJKCh2YWx1ZSk8PDIpCS8qIEJpdHMgMjo0ICovCisjZGVmaW5lIFhQQUJMSyh2YWx1ZSkJCSgodmFsdWUpPDw1KQkvKiBCaXRzIDU6NiAqLworI2RlZmluZSBYUEJCTEsodmFsdWUpCQkoKHZhbHVlKTw8NykJLyogQml0cyA3OjggKi8KKworCisvKiB3ZSBkb24ndCBkbyBtdWx0aWNoYW5uZWwgZm9yIG5vdyAqLworc3RydWN0IG9tYXBfbWNic3BfcmVnX2NmZyB7CisJdTE2IHNwY3IyOworCXUxNiBzcGNyMTsKKwl1MTYgcmNyMjsKKwl1MTYgcmNyMTsKKwl1MTYgeGNyMjsKKwl1MTYgeGNyMTsKKwl1MTYgc3JncjI7CisJdTE2IHNyZ3IxOworCXUxNiBtY3IyOworCXUxNiBtY3IxOworCXUxNiBwY3IwOworCXUxNiByY2VyYzsKKwl1MTYgcmNlcmQ7CisJdTE2IHhjZXJjOworCXUxNiB4Y2VyZDsKKwl1MTYgcmNlcmU7CisJdTE2IHJjZXJmOworCXUxNiB4Y2VyZTsKKwl1MTYgeGNlcmY7CisJdTE2IHJjZXJnOworCXUxNiByY2VyaDsKKwl1MTYgeGNlcmc7CisJdTE2IHhjZXJoOworfTsKKwordHlwZWRlZiBlbnVtIHsKKwlPTUFQX01DQlNQMSA9IDAsCisJT01BUF9NQ0JTUDIsCisJT01BUF9NQ0JTUDMsCit9IG9tYXBfbWNic3BfaWQ7CisKK3R5cGVkZWYgZW51bSB7CisJT01BUF9NQ0JTUF9XT1JEXzggPSAwLAorCU9NQVBfTUNCU1BfV09SRF8xMiwKKwlPTUFQX01DQlNQX1dPUkRfMTYsCisJT01BUF9NQ0JTUF9XT1JEXzIwLAorCU9NQVBfTUNCU1BfV09SRF8yNCwKKwlPTUFQX01DQlNQX1dPUkRfMzIsCit9IG9tYXBfbWNic3Bfd29yZF9sZW5ndGg7CisKK3R5cGVkZWYgZW51bSB7CisJT01BUF9NQ0JTUF9DTEtfUklTSU5HID0gMCwKKwlPTUFQX01DQlNQX0NMS19GQUxMSU5HLAorfSBvbWFwX21jYnNwX2Nsa19wb2xhcml0eTsKKwordHlwZWRlZiBlbnVtIHsKKwlPTUFQX01DQlNQX0ZTX0FDVElWRV9ISUdIID0gMCwKKwlPTUFQX01DQlNQX0ZTX0FDVElWRV9MT1csCit9IG9tYXBfbWNic3BfZnNfcG9sYXJpdHk7CisKK3R5cGVkZWYgZW51bSB7CisJT01BUF9NQ0JTUF9DTEtfU1RQX01PREVfTk9fREVMQVkgPSAwLAorCU9NQVBfTUNCU1BfQ0xLX1NUUF9NT0RFX0RFTEFZLAorfSBvbWFwX21jYnNwX2Nsa19zdHBfbW9kZTsKKworCisvKioqKioqKiBTUEkgc3BlY2lmaWMgbW9kZSAqKioqKioqKioqLwordHlwZWRlZiBlbnVtIHsKKwlPTUFQX01DQlNQX1NQSV9NQVNURVIgPSAwLAorCU9NQVBfTUNCU1BfU1BJX1NMQVZFLAorfSBvbWFwX21jYnNwX3NwaV9tb2RlOworCitzdHJ1Y3Qgb21hcF9tY2JzcF9zcGlfY2ZnIHsKKwlvbWFwX21jYnNwX3NwaV9tb2RlCQlzcGlfbW9kZTsKKwlvbWFwX21jYnNwX2Nsa19wb2xhcml0eQkJcnhfY2xvY2tfcG9sYXJpdHk7CisJb21hcF9tY2JzcF9jbGtfcG9sYXJpdHkJCXR4X2Nsb2NrX3BvbGFyaXR5OworCW9tYXBfbWNic3BfZnNfcG9sYXJpdHkJCWZzeF9wb2xhcml0eTsKKwl1OAkJCQljbGtfZGl2OworCW9tYXBfbWNic3BfY2xrX3N0cF9tb2RlCQljbGtfc3RwX21vZGU7CisJb21hcF9tY2JzcF93b3JkX2xlbmd0aAkJd29yZF9sZW5ndGg7Cit9OworCit2b2lkIG9tYXBfbWNic3BfY29uZmlnKHVuc2lnbmVkIGludCBpZCwgY29uc3Qgc3RydWN0IG9tYXBfbWNic3BfcmVnX2NmZyAqIGNvbmZpZyk7CitpbnQgb21hcF9tY2JzcF9yZXF1ZXN0KHVuc2lnbmVkIGludCBpZCk7Cit2b2lkIG9tYXBfbWNic3BfZnJlZSh1bnNpZ25lZCBpbnQgaWQpOwordm9pZCBvbWFwX21jYnNwX3N0YXJ0KHVuc2lnbmVkIGludCBpZCk7Cit2b2lkIG9tYXBfbWNic3Bfc3RvcCh1bnNpZ25lZCBpbnQgaWQpOwordm9pZCBvbWFwX21jYnNwX3htaXRfd29yZCh1bnNpZ25lZCBpbnQgaWQsIHUzMiB3b3JkKTsKK3UzMiBvbWFwX21jYnNwX3JlY3Zfd29yZCh1bnNpZ25lZCBpbnQgaWQpOworCitpbnQgb21hcF9tY2JzcF94bWl0X2J1ZmZlcih1bnNpZ25lZCBpbnQgaWQsIGRtYV9hZGRyX3QgYnVmZmVyLCB1bnNpZ25lZCBpbnQgbGVuZ3RoKTsKK2ludCBvbWFwX21jYnNwX3JlY3ZfYnVmZmVyKHVuc2lnbmVkIGludCBpZCwgZG1hX2FkZHJfdCBidWZmZXIsIHVuc2lnbmVkIGludCBsZW5ndGgpOworCisvKiBTUEkgc3BlY2lmaWMgQVBJICovCit2b2lkIG9tYXBfbWNic3Bfc2V0X3NwaV9tb2RlKHVuc2lnbmVkIGludCBpZCwgY29uc3Qgc3RydWN0IG9tYXBfbWNic3Bfc3BpX2NmZyAqIHNwaV9jZmcpOworCisvKiBQb2xsZWQgcmVhZC93cml0ZSBmdW5jdGlvbnMgKi8KK2ludCBvbWFwX21jYnNwX3BvbGxyZWFkKHVuc2lnbmVkIGludCBpZCwgdTE2ICogYnVmKTsKK2ludCBvbWFwX21jYnNwX3BvbGx3cml0ZSh1bnNpZ25lZCBpbnQgaWQsIHUxNiBidWYpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvbWVtb3J5LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL21lbW9yeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2YjU3ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL21lbW9yeS5oCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL21lbW9yeS5oCisgKgorICogTWVtb3J5IG1hcCBmb3IgT01BUC0xNTEwIGFuZCAxNjEwCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwIFJpZGdlUnVuLCBJbmMuCisgKiBBdXRob3I6IEdyZWcgTG9ubm9uIDxnbG9ubm9uQHJpZGdlcnVuLmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgd2FzIGRlcml2ZWQgZnJvbSBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbnRlcmdyYXRvci9tZW1vcnkuaAorICogQ29weXJpZ2h0IChDKSAxOTk5IEFSTSBMaW1pdGVkCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOCisgKiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCisgKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX01FTU9SWV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfTUVNT1JZX0gKKworLyoKKyAqIFBoeXNpY2FsIERSQU0gb2Zmc2V0LgorICovCisjZGVmaW5lIFBIWVNfT0ZGU0VUCQkoMHgxMDAwMDAwMFVMKQorCisvKgorICogT01BUC0xNTEwIExvY2FsIEJ1cyBhZGRyZXNzIG9mZnNldAorICovCisjZGVmaW5lIE9NQVAxNTEwX0xCX09GRlNFVAkoMHgzMDAwMDAwMFVMKQorCisvKgorICogQ29udmVyc2lvbiBiZXR3ZWVuIFNEUkFNIGFuZCBmYWtlIFBDSSBidXMsIHVzZWQgYnkgVVNCCisgKiBOT1RFOiBQaHlzaWNhbCBhZGRyZXNzIG11c3QgYmUgY29udmVydGVkIHRvIExvY2FsIEJ1cyBhZGRyZXNzCisgKgkgb24gT01BUC0xNTEwIG9ubHkKKyAqLworCisvKgorICogQnVzIGFkZHJlc3MgaXMgcGh5c2ljYWwgYWRkcmVzcywgZXhjZXB0IGZvciBPTUFQLTE1MTAgTG9jYWwgQnVzLgorICovCisjZGVmaW5lIF9fdmlydF90b19idXMoeCkJX192aXJ0X3RvX3BoeXMoeCkKKyNkZWZpbmUgX19idXNfdG9fdmlydCh4KQlfX3BoeXNfdG9fdmlydCh4KQorCisvKgorICogT01BUC0xNTEwIGJ1cyBhZGRyZXNzIGlzIHRyYW5zbGF0ZWQgaW50byBhIExvY2FsIEJ1cyBhZGRyZXNzIGlmIHRoZQorICogT01BUCBidXMgdHlwZSBpcyBsYnVzLiBXZSBkbyB0aGUgYWRkcmVzcyB0cmFuc2xhdGlvbiBiYXNlZCBvbiB0aGUKKyAqIGRldmljZSBvdmVycmlkaW5nIHRoZSBkZWZhdWx0cyB1c2VkIGluIHRoZSBkbWEtbWFwcGluZyBBUEkuCisgKiBOb3RlIHRoYXQgdGhlIGlzX2xidXNfZGV2aWNlKCkgdGVzdCBpcyBub3QgdmVyeSBlZmZpY2llbnQgb24gMTUxMAorICogYmVjYXVzZSBvZiB0aGUgc3RybmNtcCgpLgorICovCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1MTAKKworI2RlZmluZSB2aXJ0X3RvX2xidXMoeCkJCSgoeCkgLSBQQUdFX09GRlNFVCArIE9NQVAxNTEwX0xCX09GRlNFVCkKKyNkZWZpbmUgbGJ1c190b192aXJ0KHgpCQkoKHgpIC0gT01BUDE1MTBfTEJfT0ZGU0VUICsgUEFHRV9PRkZTRVQpCisjZGVmaW5lIGlzX2xidXNfZGV2aWNlKGRldikJKGNwdV9pc19vbWFwMTUxMCgpICYmIGRldiAmJiAoc3RybmNtcChkZXYtPmJ1c19pZCwgIm9oY2kiLCA0KSA9PSAwKSkKKworI2RlZmluZSBfX2FyY2hfcGFnZV90b19kbWEoZGV2LCBwYWdlKQkoe2lzX2xidXNfZGV2aWNlKGRldikgPyBcCisJCQkJCShkbWFfYWRkcl90KXZpcnRfdG9fbGJ1cyhwYWdlX2FkZHJlc3MocGFnZSkpIDogXAorCQkJCQkoZG1hX2FkZHJfdClfX3ZpcnRfdG9fYnVzKHBhZ2VfYWRkcmVzcyhwYWdlKSk7fSkKKworI2RlZmluZSBfX2FyY2hfZG1hX3RvX3ZpcnQoZGV2LCBhZGRyKQkoe2lzX2xidXNfZGV2aWNlKGRldikgPyBcCisJCQkJCWxidXNfdG9fdmlydChhZGRyKSA6IFwKKwkJCQkJX19idXNfdG9fdmlydChhZGRyKTt9KQorCisjZGVmaW5lIF9fYXJjaF92aXJ0X3RvX2RtYShkZXYsIGFkZHIpCSh7aXNfbGJ1c19kZXZpY2UoZGV2KSA/IFwKKwkJCQkJdmlydF90b19sYnVzKGFkZHIpIDogXAorCQkJCQlfX3ZpcnRfdG9fYnVzKGFkZHIpO30pCisKKyNlbmRpZgkvKiBDT05GSUdfQVJDSF9PTUFQMTUxMCAqLworCisjZGVmaW5lIFBIWVNfVE9fTklEKGFkZHIpICgwKQorI2VuZGlmCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvbXV4LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL211eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5Zjk5ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL211eC5oCkBAIC0wLDAgKzEsNTYxIEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9tdXguaAorICoKKyAqIFRhYmxlIG9mIHRoZSBPbWFwIHJlZ2lzdGVyIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgRlVOQ19NVVggYW5kCisgKiBQVUxMX0RXTiBjb21iaW5hdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzIE5va2lhIENvcnBvcmF0aW9uCisgKgorICogV3JpdHRlbiBieSBUb255IExpbmRncmVuIDx0b255LmxpbmRncmVuQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKgorICogTk9URTogUGxlYXNlIHVzZSB0aGUgZm9sbG93aW5nIG5hbWluZyBzdHlsZSBmb3IgbmV3IHBpbiBlbnRyaWVzLgorICoJIEZvciBleGFtcGxlLCBXOF8xNjEwX01NQzJfREFUMCwgd2hlcmU6CisgKgkgLSBXOAkgICAgID0gYmFsbAorICoJIC0gMTYxMAkgICAgID0gMTUxMCBvciAxNjEwLCBub25lIGlmIGNvbW1vbiBmb3IgYm90aCAxNTEwIGFuZCAxNjEwCisgKgkgLSBNTUMyX0RBVDAgPSBmdW5jdGlvbgorICoKKyAqIENoYW5nZSBsb2c6CisgKiAgIEFkZGVkIGVudHJ5IGZvciB0aGUgSTJDIGludGVyZmFjZS4gKDAyRmViIDIwMDQpCisgKiAgIENvcHlyaWdodCAoQykgMjAwNCBUZXhhcyBJbnN0cnVtZW50cworICoKKyAqICAgQWRkZWQgZW50cnkgZm9yIHRoZSBrZXlwYWQgYW5kIHV3aXJlIENTMS4gKDA5TWFyIDIwMDQpCisgKiAgIENvcHlyaWdodCAoQykgMjAwNCBUZXhhcyBJbnN0cnVtZW50cworICoKKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfTVVYX0gKKyNkZWZpbmUgX19BU01fQVJDSF9NVVhfSAorCisjZGVmaW5lIFBVX1BEX1NFTF9OQQkJMAkvKiBObyBwdV9wZCByZWcgYXZhaWxhYmxlICovCisjZGVmaW5lIFBVTExfRFdOX0NUUkxfTkEJMAkvKiBObyBwdWxsLWRvd24gY29udHJvbCBuZWVkZWQgKi8KKworI2lmZGVmCUNPTkZJR19PTUFQX01VWF9ERUJVRworI2RlZmluZSBNVVhfUkVHKHJlZywgbW9kZV9vZmZzZXQsIG1vZGUpIC5tdXhfcmVnX25hbWUgPSAiRlVOQ19NVVhfQ1RSTF8iI3JlZywgXAorCQkJCQkubXV4X3JlZyA9IEZVTkNfTVVYX0NUUkxfIyNyZWcsIFwKKwkJCQkJLm1hc2tfb2Zmc2V0ID0gbW9kZV9vZmZzZXQsIFwKKwkJCQkJLm1hc2sgPSBtb2RlLAorCisjZGVmaW5lIFBVTExfUkVHKHJlZywgYml0LCBzdGF0dXMpCS5wdWxsX25hbWUgPSAiUFVMTF9EV05fQ1RSTF8iI3JlZywgXAorCQkJCQkucHVsbF9yZWcgPSBQVUxMX0RXTl9DVFJMXyMjcmVnLCBcCisJCQkJCS5wdWxsX2JpdCA9IGJpdCwgXAorCQkJCQkucHVsbF92YWwgPSBzdGF0dXMsCisKKyNkZWZpbmUgUFVfUERfUkVHKHJlZywgc3RhdHVzKQkJLnB1X3BkX25hbWUgPSAiUFVfUERfU0VMXyIjcmVnLCBcCisJCQkJCS5wdV9wZF9yZWcgPSBQVV9QRF9TRUxfIyNyZWcsIFwKKwkJCQkJLnB1X3BkX3ZhbCA9IHN0YXR1cywKKworI2Vsc2UKKworI2RlZmluZSBNVVhfUkVHKHJlZywgbW9kZV9vZmZzZXQsIG1vZGUpIC5tdXhfcmVnID0gRlVOQ19NVVhfQ1RSTF8jI3JlZywgXAorCQkJCQkubWFza19vZmZzZXQgPSBtb2RlX29mZnNldCwgXAorCQkJCQkubWFzayA9IG1vZGUsCisKKyNkZWZpbmUgUFVMTF9SRUcocmVnLCBiaXQsIHN0YXR1cykJLnB1bGxfcmVnID0gUFVMTF9EV05fQ1RSTF8jI3JlZywgXAorCQkJCQkucHVsbF9iaXQgPSBiaXQsIFwKKwkJCQkJLnB1bGxfdmFsID0gc3RhdHVzLAorCisjZGVmaW5lIFBVX1BEX1JFRyhyZWcsIHN0YXR1cykJCS5wdV9wZF9yZWcgPSBQVV9QRF9TRUxfIyNyZWcsIFwKKwkJCQkJLnB1X3BkX3ZhbCA9IHN0YXR1cywKKworI2VuZGlmIC8qIENPTkZJR19PTUFQX01VWF9ERUJVRyAqLworCisjZGVmaW5lIE1VWF9DRkcoZGVzYywgbXV4X3JlZywgbW9kZV9vZmZzZXQsIG1vZGUsCVwKKwkJcHVsbF9yZWcsIHB1bGxfYml0LCBwdWxsX3N0YXR1cywJXAorCQlwdV9wZF9yZWcsIHB1X3BkX3N0YXR1cywgZGVidWdfc3RhdHVzKQlcCit7CQkJCQkJCVwKKwkubmFtZSA9CSBkZXNjLAkJCQkJXAorCS5kZWJ1ZyA9IGRlYnVnX3N0YXR1cywJCQkJXAorCU1VWF9SRUcobXV4X3JlZywgbW9kZV9vZmZzZXQsIG1vZGUpCQlcCisJUFVMTF9SRUcocHVsbF9yZWcsIHB1bGxfYml0LCBwdWxsX3N0YXR1cykJXAorCVBVX1BEX1JFRyhwdV9wZF9yZWcsIHB1X3BkX3N0YXR1cykJCVwKK30sCisKKyNkZWZpbmUgUFVMTF9ESVNBQkxFRAkwCisjZGVmaW5lIFBVTExfRU5BQkxFRAkxCisKKyNkZWZpbmUgUFVMTF9ET1dOCTAKKyNkZWZpbmUgUFVMTF9VUAkJMQorCit0eXBlZGVmIHN0cnVjdCB7CisJY2hhciAqbmFtZTsKKwl1bnNpZ25lZCBjaGFyIGJ1c3k7CisJdW5zaWduZWQgY2hhciBkZWJ1ZzsKKworCWNvbnN0IGNoYXIgKm11eF9yZWdfbmFtZTsKKwljb25zdCB1bnNpZ25lZCBpbnQgbXV4X3JlZzsKKwljb25zdCB1bnNpZ25lZCBjaGFyIG1hc2tfb2Zmc2V0OworCWNvbnN0IHVuc2lnbmVkIGNoYXIgbWFzazsKKworCWNvbnN0IGNoYXIgKnB1bGxfbmFtZTsKKwljb25zdCB1bnNpZ25lZCBpbnQgcHVsbF9yZWc7CisJY29uc3QgdW5zaWduZWQgY2hhciBwdWxsX3ZhbDsKKwljb25zdCB1bnNpZ25lZCBjaGFyIHB1bGxfYml0OworCisJY29uc3QgY2hhciAqcHVfcGRfbmFtZTsKKwljb25zdCB1bnNpZ25lZCBpbnQgcHVfcGRfcmVnOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgcHVfcGRfdmFsOworfSByZWdfY2ZnX3NldDsKKworLyoKKyAqIExvb2t1cCB0YWJsZSBmb3IgRlVOQ19NVVggYW5kIFBVTExfRFdOIHJlZ2lzdGVyIGNvbWJpbmF0aW9ucyBmb3IgZWFjaAorICogZGV2aWNlLiBTZWUgYWxzbyByZWdfY2ZnX3RhYmxlIGJlbG93IGZvciB0aGUgcmVnaXN0ZXIgdmFsdWVzLgorICovCit0eXBlZGVmIGVudW0geworCS8qIFVBUlQxIChCVF9VQVJUX0dBVElORykqLworCVVBUlQxX1RYID0gMCwKKwlVQVJUMV9SVFMsCisKKwkvKiBVQVJUMiAoQ09NX1VBUlRfR0FUSU5HKSovCisJVUFSVDJfVFgsCisJVUFSVDJfUlgsCisJVUFSVDJfQ1RTLAorCVVBUlQyX1JUUywKKworCS8qIFVBUlQzIChHSUdBX1VBUlRfR0FUSU5HKSAqLworCVVBUlQzX1RYLAorCVVBUlQzX1JYLAorCVVBUlQzX0NUUywKKwlVQVJUM19SVFMsCisJVUFSVDNfQ0xLUkVRLAorCVVBUlQzX0JDTEssCS8qIDEyTUh6IGNsb2NrIG91dCAqLworCVkxNV8xNjEwX1VBUlQzX1JUUywKKworCS8qIFBXVCAmIFBXTCAqLworCVBXVCwKKwlQV0wsCisKKwkvKiBVU0IgbWFzdGVyIGdlbmVyaWMgKi8KKwlSMThfVVNCX1ZCVVMsCisJUjE4XzE1MTBfVVNCX0dQSU8wLAorCVc0X1VTQl9QVUVOLAorCVc0X1VTQl9DTEtPLAorCVc0X1VTQl9ISUdIWiwKKwlXNF9HUElPNTgsCisKKwkvKiBVU0IxIG1hc3RlciAqLworCVVTQjFfU1VTUCwKKwlVU0IxX1NFTywKKwlXMTNfMTYxMF9VU0IxX1NFMCwKKwlVU0IxX1RYRU4sCisJVVNCMV9UWEQsCisJVVNCMV9WUCwKKwlVU0IxX1ZNLAorCVVTQjFfUkNWLAorCVVTQjFfU1BFRUQsCisJUjEzXzE2MTBfVVNCMV9TUEVFRCwKKwlSMTNfMTcxMF9VU0IxX1NFMCwKKworCS8qIFVTQjIgbWFzdGVyICovCisJVVNCMl9TVVNQLAorCVVTQjJfVlAsCisJVVNCMl9UWEVOLAorCVVTQjJfVk0sCisJVVNCMl9SQ1YsCisJVVNCMl9TRU8sCisJVVNCMl9UWEQsCisKKwkvKiBPTUFQLTE1MTAgR1BJTyAqLworCVIxOF8xNTEwX0dQSU8wLAorCVIxOV8xNTEwX0dQSU8xLAorCU0xNF8xNTEwX0dQSU8yLAorCisJLyogT01BUDE2MTAgR1BJTyAqLworCVAxOF8xNjEwX0dQSU8zLAorCVkxNV8xNjEwX0dQSU8xNywKKworCS8qIE9NQVAtMTcxMCBHUElPICovCisJUjE4XzE3MTBfR1BJTzAsCisJVjJfMTcxMF9HUElPMTAsCisJTjIxXzE3MTBfR1BJTzE0LAorCVcxNV8xNzEwX0dQSU80MCwKKworCS8qIE1QVUlPICovCisJTVBVSU8yLAorCU1QVUlPNCwKKwlNUFVJTzUsCisJVDIwXzE2MTBfTVBVSU81LAorCVcxMV8xNjEwX01QVUlPNiwKKwlWMTBfMTYxMF9NUFVJTzcsCisJVzExXzE2MTBfTVBVSU85LAorCVYxMF8xNjEwX01QVUlPMTAsCisJVzEwXzE2MTBfTVBVSU8xMSwKKwlFMjBfMTYxMF9NUFVJTzEzLAorCVUyMF8xNjEwX01QVUlPMTQsCisJRTE5XzE2MTBfTVBVSU8xNSwKKworCS8qIE1DQlNQMiAqLworCU1DQlNQMl9DTEtSLAorCU1DQlNQMl9DTEtYLAorCU1DQlNQMl9EUiwKKwlNQ0JTUDJfRFgsCisJTUNCU1AyX0ZTUiwKKwlNQ0JTUDJfRlNYLAorCisJLyogTUNCU1AzICovCisJTUNCU1AzX0NMS1gsCisKKwkvKiBNaXNjIGJhbGxvdXRzICovCisJQkFMTE9VVF9WOF9BUk1JTzMsCisKKwkvKiBPTUFQLTE2MTAgTU1DMiAqLworCVc4XzE2MTBfTU1DMl9EQVQwLAorCVY4XzE2MTBfTU1DMl9EQVQxLAorCVcxNV8xNjEwX01NQzJfREFUMiwKKwlSMTBfMTYxMF9NTUMyX0RBVDMsCisJWTEwXzE2MTBfTU1DMl9DTEssCisJWThfMTYxMF9NTUMyX0NNRCwKKwlWOV8xNjEwX01NQzJfQ01ERElSLAorCVY1XzE2MTBfTU1DMl9EQVRESVIwLAorCVcxOV8xNjEwX01NQzJfREFURElSMSwKKwlSMThfMTYxMF9NTUMyX0NMS0lOLAorCisJLyogT01BUC0xNjEwIEV4dGVybmFsIFRyYWNlIEludGVyZmFjZSAqLworCU0xOV8xNjEwX0VUTV9QU1RBVDAsCisJTDE1XzE2MTBfRVRNX1BTVEFUMSwKKwlMMThfMTYxMF9FVE1fUFNUQVQyLAorCUwxOV8xNjEwX0VUTV9EMCwKKwlKMTlfMTYxMF9FVE1fRDYsCisJSjE4XzE2MTBfRVRNX0Q3LAorCisJLyogT01BUC0xNjEwIEdQSU8gKi8KKwlQMjBfMTYxMF9HUElPNCwKKwlWOV8xNjEwX0dQSU83LAorCVc4XzE2MTBfR1BJTzksCisJTjE5XzE2MTBfR1BJTzEzLAorCVAxMF8xNjEwX0dQSU8yMiwKKwlWNV8xNjEwX0dQSU8yNCwKKwlBQTIwXzE2MTBfR1BJT180MSwKKwlXMTlfMTYxMF9HUElPNDgsCisJTTdfMTYxMF9HUElPNjIsCisKKwkvKiBPTUFQLTE2MTAgdVdpcmUgKi8KKwlWMTlfMTYxMF9VV0lSRV9TQ0xLLAorCVUxOF8xNjEwX1VXSVJFX1NESSwKKwlXMjFfMTYxMF9VV0lSRV9TRE8sCisJTjE0XzE2MTBfVVdJUkVfQ1MwLAorCVAxNV8xNjEwX1VXSVJFX0NTMCwKKwlOMTVfMTYxMF9VV0lSRV9DUzEsCisKKwkvKiBPTUFQLTE2MTAgRmxhc2ggKi8KKwlMM18xNjEwX0ZMQVNIX0NTMkJfT0UsCisJTThfMTYxMF9GTEFTSF9DUzJCX1dFLAorCisJLyogRmlyc3QgTU1DICovCisJTU1DX0NNRCwKKwlNTUNfREFUMSwKKwlNTUNfREFUMiwKKwlNTUNfREFUMCwKKwlNTUNfQ0xLLAorCU1NQ19EQVQzLAorCisJLyogT01BUC0xNzEwIE1NQyBDTURESVIgYW5kIERBVERJUjAgKi8KKwlNMTVfMTcxMF9NTUNfQ0xLSSwKKwlQMTlfMTcxMF9NTUNfQ01ERElSLAorCVAyMF8xNzEwX01NQ19EQVRESVIwLAorCisJLyogT01BUC0xNjEwIFVTQjAgYWx0ZXJuYXRlIHBpbiBjb25maWd1cmF0aW9uICovCisJVzlfVVNCMF9UWEVOLAorCUFBOV9VU0IwX1ZQLAorCVk1X1VTQjBfUkNWLAorCVI5X1VTQjBfVk0sCisJVjZfVVNCMF9UWEQsCisJVzVfVVNCMF9TRTAsCisJVjlfVVNCMF9TUEVFRCwKKwlWOV9VU0IwX1NVU1AsCisKKwkvKiBVU0IyICovCisJVzlfVVNCMl9UWEVOLAorCUFBOV9VU0IyX1ZQLAorCVk1X1VTQjJfUkNWLAorCVI5X1VTQjJfVk0sCisJVjZfVVNCMl9UWEQsCisJVzVfVVNCMl9TRTAsCisKKwkvKiBVQVJUMSAxNjEwICovCisKKwlSMTNfMTYxMF9VQVJUMV9UWCwKKwlWMTRfMTYxMF9VQVJUMV9SWCwKKwlSMTRfMTYxMF9VQVJUMV9DVFMsCisJQUExNV8xNjEwX1VBUlQxX1JUUywKKworCS8qIEkyQyBPTUFQLTE2MTAgKi8KKwlJMkNfU0NMLAorCUkyQ19TREEsCisKKwkvKiBLZXlwYWQgKi8KKwlGMThfMTYxMF9LQkMwLAorCUQyMF8xNjEwX0tCQzEsCisJRDE5XzE2MTBfS0JDMiwKKwlFMThfMTYxMF9LQkMzLAorCUMyMV8xNjEwX0tCQzQsCisJRzE4XzE2MTBfS0JSMCwKKwlGMTlfMTYxMF9LQlIxLAorCUgxNF8xNjEwX0tCUjIsCisJRTIwXzE2MTBfS0JSMywKKwlFMTlfMTYxMF9LQlI0LAorCU4xOV8xNjEwX0tCUjUsCisKKwkvKiBQb3dlciBtYW5hZ2VtZW50ICovCisJVDIwXzE2MTBfTE9XX1BXUiwKKworCS8qIE1DTEsgU2V0dGluZ3MgKi8KKwlWNV8xNzEwX01DTEtfT04sCisJVjVfMTcxMF9NQ0xLX09GRiwKKwlSMTBfMTYxMF9NQ0xLX09OLAorCVIxMF8xNjEwX01DTEtfT0ZGLAorCisJLyogQ29tcGFjdEZsYXNoIGNvbnRyb2xsZXIgKi8KKwlQMTFfMTYxMF9DRl9DRDIsCisJUjExXzE2MTBfQ0ZfSU9JUzE2LAorCVYxMF8xNjEwX0NGX0lSRVEsCisJVzEwXzE2MTBfQ0ZfUkVTRVQsCisJVzExXzE2MTBfQ0ZfQ0QxLAorfSByZWdfY2ZnX3Q7CisKKyNpZiBkZWZpbmVkKF9fTVVYX0NfXykgJiYgZGVmaW5lZChDT05GSUdfT01BUF9NVVgpCisKKy8qCisgKiBUYWJsZSBvZiB2YXJpb3VzIEZVTkNfTVVYIGFuZCBQVUxMX0RXTiBjb21iaW5hdGlvbnMgZm9yIGVhY2ggZGV2aWNlLgorICogU2VlIGFsc28gcmVnX2NmZ190IGFib3ZlIGZvciB0aGUgbG9va3VwIHRhYmxlLgorICovCitzdGF0aWMgcmVnX2NmZ19zZXQgX19pbml0ZGF0YV9vcl9tb2R1bGUKK3JlZ19jZmdfdGFibGVbXSA9IHsKKy8qCisgKgkgZGVzY3JpcHRpb24JCW11eCAgbW9kZSAgIG11eAkgcHVsbCBwdWxsICBwdWxsICBwdV9wZAkgcHUgIGRiZworICoJCQkJcmVnICBvZmZzZXQgbW9kZSByZWcgIGJpdCAgIGVuYQkgIHJlZworICovCitNVVhfQ0ZHKCJVQVJUMV9UWCIsCQkgOSwgICAyMSwgICAgMSwJICAyLCAgIDMsICAgMCwJIE5BLAkgMCwgIDApCitNVVhfQ0ZHKCJVQVJUMV9SVFMiLAkJIDksICAgMTIsICAgIDEsCSAgMiwgICAwLCAgIDAsCSBOQSwJIDAsICAwKQorCisvKiBVQVJUMiAoQ09NX1VBUlRfR0FUSU5HKSwgY29uZmxpY3RzIHdpdGggVVNCMiAqLworTVVYX0NGRygiVUFSVDJfVFgiLAkJIEMsICAgMjcsICAgIDEsCSAgMywgICAzLCAgIDAsCSBOQSwJIDAsICAwKQorTVVYX0NGRygiVUFSVDJfUlgiLAkJIEMsICAgMTgsICAgIDAsCSAgMywgICAxLCAgIDEsCSBOQSwJIDAsICAwKQorTVVYX0NGRygiVUFSVDJfQ1RTIiwJCSBDLCAgIDIxLCAgICAwLAkgIDMsICAgMSwgICAxLAkgTkEsCSAwLCAgMCkKK01VWF9DRkcoIlVBUlQyX1JUUyIsCQkgQywgICAyNCwgICAgMSwJICAzLCAgIDIsICAgMCwJIE5BLAkgMCwgIDApCisKKy8qIFVBUlQzIChHSUdBX1VBUlRfR0FUSU5HKSAqLworTVVYX0NGRygiVUFSVDNfVFgiLAkJIDYsICAgIDAsICAgIDEsCSAgMCwgIDMwLCAgIDAsCSBOQSwJIDAsICAwKQorTVVYX0NGRygiVUFSVDNfUlgiLAkJIDYsICAgIDMsICAgIDAsCSAgMCwgIDMxLCAgIDEsCSBOQSwJIDAsICAwKQorTVVYX0NGRygiVUFSVDNfQ1RTIiwJCSA1LCAgIDEyLCAgICAyLAkgIDAsICAyNCwgICAwLAkgTkEsCSAwLCAgMCkKK01VWF9DRkcoIlVBUlQzX1JUUyIsCQkgNSwgICAxNSwgICAgMiwJICAwLCAgMjUsICAgMCwJIE5BLAkgMCwgIDApCitNVVhfQ0ZHKCJVQVJUM19DTEtSRVEiLAkJIDksICAgMjcsICAgIDAsCSAgMiwgICA1LCAgIDAsCSBOQSwJIDAsICAwKQorTVVYX0NGRygiVUFSVDNfQkNMSyIsCQkgQSwgICAgMCwgICAgMCwJICAyLCAgIDYsICAgMCwJIE5BLAkgMCwgIDApCitNVVhfQ0ZHKCJZMTVfMTYxMF9VQVJUM19SVFMiLAkgQSwgICAgMCwgICAgMSwJICAyLCAgIDYsICAgMCwJIE5BLAkgMCwgIDApCisKKy8qIFBXVCAmIFBXTCwgY29uZmxpY3RzIHdpdGggVUFSVDMgKi8KK01VWF9DRkcoIlBXVCIsCQkgCSA2LCAgICAwLCAgICAyLAkgIDAsICAzMCwgICAwLAkgTkEsCSAwLCAgMCkKK01VWF9DRkcoIlBXTCIsCQkgCSA2LCAgICAzLCAgICAxLAkgIDAsICAzMSwgICAxLAkgTkEsCSAwLCAgMCkKKworLyogVVNCIGludGVybmFsIG1hc3RlciBnZW5lcmljICovCitNVVhfQ0ZHKCJSMThfVVNCX1ZCVVMiLAkJIDcsICAgIDksICAgIDIsCSAgMSwgIDExLCAgIDAsCSBOQSwJIDAsICAxKQorTVVYX0NGRygiUjE4XzE1MTBfVVNCX0dQSU8wIiwJIDcsICAgIDksICAgIDAsCSAgMSwgIDExLCAgIDEsCSBOQSwJIDAsICAxKQorLyogd29ya3MgYXJvdW5kIGVycmF0dW06ICBXNF9VU0JfUFVFTiBhbmQgVzRfVVNCX1BVRElTIGFyZSBzd2l0Y2hlZCEgKi8KK01VWF9DRkcoIlc0X1VTQl9QVUVOIiwJCSBELCAgICAzLCAgICAzLAkgIDMsICAgNSwgICAxLAkgTkEsCSAwLCAgMSkKK01VWF9DRkcoIlc0X1VTQl9DTEtPIiwJCSBELCAgICAzLCAgICAxLAkgIDMsICAgNSwgICAwLAkgTkEsCSAwLCAgMSkKK01VWF9DRkcoIlc0X1VTQl9ISUdIWiIsCQkgRCwgICAgMywgICAgNCwJICAzLCAgIDUsICAgMCwJICAzLAkgMCwgIDEpCitNVVhfQ0ZHKCJXNF9HUElPNTgiLAkJIEQsICAgIDMsICAgIDcsCSAgMywgICA1LCAgIDAsCSAgMywJIDAsICAxKQorCisvKiBVU0IxIG1hc3RlciAqLworTVVYX0NGRygiVVNCMV9TVVNQIiwJCSA4LCAgIDI3LCAgICAyLAkgIDEsICAyNywgICAwLAkgTkEsCSAwLCAgMSkKK01VWF9DRkcoIlVTQjFfU0UwIiwJCSA5LCAgICAwLCAgICAyLAkgIDEsICAyOCwgICAwLAkgTkEsCSAwLCAgMSkKK01VWF9DRkcoIlcxM18xNjEwX1VTQjFfU0UwIiwJIDksICAgIDAsICAgIDQsCSAgMSwgIDI4LCAgIDAsCSBOQSwJIDAsICAxKQorTVVYX0NGRygiVVNCMV9UWEVOIiwJCSA5LCAgICAzLCAgICAyLAkgIDEsICAyOSwgICAwLAkgTkEsCSAwLCAgMSkKK01VWF9DRkcoIlVTQjFfVFhEIiwJCSA5LCAgIDI0LCAgICAxLAkgIDIsICAgNCwgICAwLAkgTkEsCSAwLCAgMSkKK01VWF9DRkcoIlVTQjFfVlAiLAkJIEEsICAgIDMsICAgIDEsCSAgMiwgICA3LCAgIDAsCSBOQSwJIDAsICAxKQorTVVYX0NGRygiVVNCMV9WTSIsCQkgQSwgICAgNiwgICAgMSwJICAyLCAgIDgsICAgMCwJIE5BLAkgMCwgIDEpCitNVVhfQ0ZHKCJVU0IxX1JDViIsCQkgQSwgICAgOSwgICAgMSwJICAyLCAgIDksICAgMCwJIE5BLAkgMCwgIDEpCitNVVhfQ0ZHKCJVU0IxX1NQRUVEIiwJCSBBLCAgIDEyLCAgICAyLAkgIDIsICAxMCwgICAwLAkgTkEsCSAwLCAgMSkKK01VWF9DRkcoIlIxM18xNjEwX1VTQjFfU1BFRUQiLAkgQSwgICAxMiwgICAgNSwJICAyLCAgMTAsICAgMCwJIE5BLAkgMCwgIDEpCitNVVhfQ0ZHKCJSMTNfMTcxMF9VU0IxX1NFTyIsCSBBLCAgIDEyLCAgICA1LCAgIDIsICAxMCwgICAwLCAgIE5BLCAgICAgMCwgIDEpCisKKy8qIFVTQjIgbWFzdGVyICovCitNVVhfQ0ZHKCJVU0IyX1NVU1AiLAkJIEIsICAgIDMsICAgIDEsCSAgMiwgIDE3LCAgIDAsCSBOQSwJIDAsICAxKQorTVVYX0NGRygiVVNCMl9WUCIsCQkgQiwgICAgNiwgICAgMSwJICAyLCAgMTgsICAgMCwJIE5BLAkgMCwgIDEpCitNVVhfQ0ZHKCJVU0IyX1RYRU4iLAkJIEIsICAgIDksICAgIDEsCSAgMiwgIDE5LCAgIDAsCSBOQSwJIDAsICAxKQorTVVYX0NGRygiVVNCMl9WTSIsCQkgQywgICAxOCwgICAgMSwJICAzLCAgIDAsICAgMCwJIE5BLAkgMCwgIDEpCitNVVhfQ0ZHKCJVU0IyX1JDViIsCQkgQywgICAyMSwgICAgMSwJICAzLCAgIDEsICAgMCwJIE5BLAkgMCwgIDEpCitNVVhfQ0ZHKCJVU0IyX1NFMCIsCQkgQywgICAyNCwgICAgMiwJICAzLCAgIDIsICAgMCwJIE5BLAkgMCwgIDEpCitNVVhfQ0ZHKCJVU0IyX1RYRCIsCQkgQywgICAyNywgICAgMiwJICAzLCAgIDMsICAgMCwJIE5BLAkgMCwgIDEpCisKKy8qIE9NQVAtMTUxMCBHUElPICovCitNVVhfQ0ZHKCJSMThfMTUxMF9HUElPMCIsCSA3LCAgICA5LCAgICAwLCAgIDEsICAxMSwgICAxLCAgICAwLCAgICAgMCwgIDEpCitNVVhfQ0ZHKCJSMTlfMTUxMF9HUElPMSIsCSA3LCAgICA2LCAgICAwLCAgIDEsICAxMCwgICAxLCAgICAwLCAgICAgMCwgIDEpCitNVVhfQ0ZHKCJNMTRfMTUxMF9HUElPMiIsCSA3LCAgICAzLCAgICAwLCAgIDEsICAgOSwgICAxLCAgICAwLCAgICAgMCwgIDEpCisKKy8qIE9NQVAxNjEwIEdQSU8gKi8KK01VWF9DRkcoIlAxOF8xNjEwX0dQSU8zIiwJIDcsICAgIDAsICAgIDAsICAgMSwgICA4LCAgIDAsICAgTkEsICAgICAwLCAgMSkKK01VWF9DRkcoIlkxNV8xNjEwX0dQSU8xNyIsCSBBLCAgICAwLCAgICA3LCAgIDIsICAgNiwgICAwLCAgIE5BLCAgICAgMCwgIDEpCisKKy8qIE9NQVAtMTcxMCBHUElPICovCitNVVhfQ0ZHKCJSMThfMTcxMF9HUElPMCIsICAgICAgICA3LCAgICA5LCAgICAwLCAgIDEsICAxMSwgICAxLCAgICAxLCAgICAgMSwgIDEpCitNVVhfQ0ZHKCJWMl8xNzEwX0dQSU8xMCIsICAgICAgICBGLCAgIDI3LCAgICAxLCAgIDQsICAgMywgICAxLCAgICA0LCAgICAgMSwgIDEpCitNVVhfQ0ZHKCJOMjFfMTcxMF9HUElPMTQiLCAgICAgICA2LCAgICA5LCAgICAwLCAgIDEsICAgMSwgICAxLCAgICAxLCAgICAgMSwgIDEpCitNVVhfQ0ZHKCJXMTVfMTcxMF9HUElPNDAiLCAgICAgICA5LCAgIDI3LCAgICA3LCAgIDIsICAgNSwgICAxLCAgICAyLCAgICAgMSwgIDEpCisKKy8qIE1QVUlPICovCitNVVhfQ0ZHKCJNUFVJTzIiLAkJIDcsICAgMTgsICAgIDAsCSAgMSwgICAxLCAgIDEsCSBOQSwJIDAsICAxKQorTVVYX0NGRygiTVBVSU80IiwJCSA3LCAgIDE1LCAgICAwLAkgIDEsICAxMywgICAxLAkgTkEsCSAwLCAgMSkKK01VWF9DRkcoIk1QVUlPNSIsCQkgNywgICAxMiwgICAgMCwJICAxLCAgMTIsICAgMSwJIE5BLAkgMCwgIDEpCisKK01VWF9DRkcoIlQyMF8xNjEwX01QVUlPNSIsCSA3LCAgIDEyLCAgICAwLAkgIDEsICAxMiwgICAwLAkgIDMsCSAwLCAgMSkKK01VWF9DRkcoIlcxMV8xNjEwX01QVUlPNiIsCTEwLCAgIDE1LCAgICAyLAkgIDMsICAgOCwgICAwLAkgIDMsCSAwLCAgMSkKK01VWF9DRkcoIlYxMF8xNjEwX01QVUlPNyIsCSBBLCAgIDI0LCAgICAyLAkgIDIsICAxNCwgICAwLAkgIDIsCSAwLCAgMSkKK01VWF9DRkcoIlcxMV8xNjEwX01QVUlPOSIsCTEwLCAgIDE1LCAgICAxLAkgIDMsICAgOCwgICAwLAkgIDMsCSAwLCAgMSkKK01VWF9DRkcoIlYxMF8xNjEwX01QVUlPMTAiLAkgQSwgICAyNCwgICAgMSwJICAyLCAgMTQsICAgMCwJICAyLAkgMCwgIDEpCitNVVhfQ0ZHKCJXMTBfMTYxMF9NUFVJTzExIiwJIEEsICAgMTgsICAgIDIsCSAgMiwgIDExLCAgIDAsCSAgMiwJIDAsICAxKQorTVVYX0NGRygiRTIwXzE2MTBfTVBVSU8xMyIsCSAzLCAgIDIxLCAgICAxLAkgIDAsICAgNywgICAwLAkgIDAsCSAwLCAgMSkKK01VWF9DRkcoIlUyMF8xNjEwX01QVUlPMTQiLAkgOSwgICAgNiwgICAgNiwJICAwLCAgMzAsICAgMCwJICAwLAkgMCwgIDEpCitNVVhfQ0ZHKCJFMTlfMTYxMF9NUFVJTzE1IiwJIDMsICAgMTgsICAgIDEsCSAgMCwgICA2LCAgIDAsCSAgMCwJIDAsICAxKQorCisvKiBNQ0JTUDIgKi8KK01VWF9DRkcoIk1DQlNQMl9DTEtSIiwJCSBDLCAgICA2LCAgICAwLAkgIDIsICAyNywgICAxLAkgTkEsCSAwLCAgMSkKK01VWF9DRkcoIk1DQlNQMl9DTEtYIiwJCSBDLCAgICA5LCAgICAwLAkgIDIsICAyOSwgICAxLAkgTkEsCSAwLCAgMSkKK01VWF9DRkcoIk1DQlNQMl9EUiIsCQkgQywgICAgMCwgICAgMCwJICAyLCAgMjYsICAgMSwJIE5BLAkgMCwgIDEpCitNVVhfQ0ZHKCJNQ0JTUDJfRFgiLAkJIEMsICAgMTUsICAgIDAsCSAgMiwgIDMxLCAgIDEsCSBOQSwJIDAsICAxKQorTVVYX0NGRygiTUNCU1AyX0ZTUiIsCQkgQywgICAxMiwgICAgMCwJICAyLCAgMzAsICAgMSwJIE5BLAkgMCwgIDEpCitNVVhfQ0ZHKCJNQ0JTUDJfRlNYIiwJCSBDLCAgICAzLCAgICAwLAkgIDIsICAyNywgICAxLAkgTkEsCSAwLCAgMSkKKworLyogTUNCU1AzIE5PVEU6IE1vZGUgbXVzdCAxIGZvciBjbG9jayAqLworTVVYX0NGRygiTUNCU1AzX0NMS1giLAkJIDksICAgIDMsICAgIDEsCSAgMSwgIDI5LCAgIDAsCSBOQSwJIDAsICAxKQorCisvKiBNaXNjIGJhbGxvdXRzICovCitNVVhfQ0ZHKCJCQUxMT1VUX1Y4X0FSTUlPMyIsCSBCLCAgIDE4LCAgICAwLAkgIDIsICAyNSwgICAxLAkgTkEsCSAwLCAgMSkKKworLyogT01BUC0xNjEwIE1NQzIgKi8KK01VWF9DRkcoIlc4XzE2MTBfTU1DMl9EQVQwIiwJIEIsICAgMjEsICAgIDYsCSAgMiwgIDIzLCAgIDEsCSAgMiwJIDEsICAxKQorTVVYX0NGRygiVjhfMTYxMF9NTUMyX0RBVDEiLAkgQiwgICAyNywgICAgNiwJICAyLCAgMjUsICAgMSwJICAyLAkgMSwgIDEpCitNVVhfQ0ZHKCJXMTVfMTYxMF9NTUMyX0RBVDIiLAkgOSwgICAxMiwgICAgNiwJICAyLCAgIDUsICAgMSwJICAyLAkgMSwgIDEpCitNVVhfQ0ZHKCJSMTBfMTYxMF9NTUMyX0RBVDMiLAkgQiwgICAxOCwgICAgNiwJICAyLCAgMjIsICAgMSwJICAyLAkgMSwgIDEpCitNVVhfQ0ZHKCJZMTBfMTYxMF9NTUMyX0NMSyIsCSBCLCAgICAzLCAgICA2LAkgIDIsICAxNywgICAwLAkgIDIsCSAwLCAgMSkKK01VWF9DRkcoIlk4XzE2MTBfTU1DMl9DTUQiLAkgQiwgICAyNCwgICAgNiwJICAyLCAgMjQsICAgMSwJICAyLAkgMSwgIDEpCitNVVhfQ0ZHKCJWOV8xNjEwX01NQzJfQ01ERElSIiwJIEIsICAgMTIsICAgIDYsCSAgMiwgIDIwLCAgIDAsCSAgMiwJIDEsICAxKQorTVVYX0NGRygiVjVfMTYxMF9NTUMyX0RBVERJUjAiLAkgQiwgICAxNSwgICAgNiwJICAyLCAgMjEsICAgMCwJICAyLAkgMSwgIDEpCitNVVhfQ0ZHKCJXMTlfMTYxMF9NTUMyX0RBVERJUjEiLCA4LCAgIDE1LCAgICA2LAkgIDEsICAyMywgICAwLAkgIDEsCSAxLCAgMSkKK01VWF9DRkcoIlIxOF8xNjEwX01NQzJfQ0xLSU4iLAkgNywgICAgOSwgICAgNiwJICAxLCAgMTEsICAgMCwJICAxLAkxMSwgIDEpCisKKy8qIE9NQVAtMTYxMCBFeHRlcm5hbCBUcmFjZSBJbnRlcmZhY2UgKi8KK01VWF9DRkcoIk0xOV8xNjEwX0VUTV9QU1RBVDAiLAkgNSwgICAyNywgICAgMSwJICAwLCAgMjksICAgMCwJICAwLAkgMCwgIDEpCitNVVhfQ0ZHKCJMMTVfMTYxMF9FVE1fUFNUQVQxIiwJIDUsICAgMjQsICAgIDEsCSAgMCwgIDI4LCAgIDAsCSAgMCwJIDAsICAxKQorTVVYX0NGRygiTDE4XzE2MTBfRVRNX1BTVEFUMiIsCSA1LCAgIDIxLCAgICAxLAkgIDAsICAyNywgICAwLAkgIDAsCSAwLCAgMSkKK01VWF9DRkcoIkwxOV8xNjEwX0VUTV9EMCIsCSA1LCAgIDE4LCAgICAxLAkgIDAsICAyNiwgICAwLAkgIDAsCSAwLCAgMSkKK01VWF9DRkcoIkoxOV8xNjEwX0VUTV9ENiIsCSA1LCAgICAwLCAgICAxLAkgIDAsICAyMCwgICAwLAkgIDAsCSAwLCAgMSkKK01VWF9DRkcoIkoxOF8xNjEwX0VUTV9ENyIsCSA1LCAgIDI3LCAgICAxLAkgIDAsICAxOSwgICAwLAkgIDAsCSAwLCAgMSkKKworLyogT01BUC0xNjEwIEdQSU8gKi8KK01VWF9DRkcoIlAyMF8xNjEwX0dQSU80IiwJIDYsICAgMjcsICAgIDAsCSAgMSwgICA3LCAgIDAsCSAgMSwJIDEsICAxKQorTVVYX0NGRygiVjlfMTYxMF9HUElPNyIsCSBCLCAgIDEyLCAgICAxLAkgIDIsICAyMCwgICAwLAkgIDIsCSAxLCAgMSkKK01VWF9DRkcoIlc4XzE2MTBfR1BJTzkiLAkgQiwgICAyMSwgICAgMCwJICAyLCAgMjMsICAgMCwJICAyLAkgMSwgIDEpCitNVVhfQ0ZHKCJOMTlfMTYxMF9HUElPMTMiLAkgNiwgICAxMiwgICAgMCwJICAxLCAgIDIsICAgMCwJICAxLAkgMSwgIDEpCitNVVhfQ0ZHKCJQMTBfMTYxMF9HUElPMjIiLAkgQywgICAgMCwgICAgNywJICAyLCAgMjYsICAgMCwJICAyLAkgMSwgIDEpCitNVVhfQ0ZHKCJWNV8xNjEwX0dQSU8yNCIsCSBCLCAgIDE1LCAgICA3LAkgIDIsICAyMSwgICAwLAkgIDIsCSAxLCAgMSkKK01VWF9DRkcoIkFBMjBfMTYxMF9HUElPXzQxIiwJIDksICAgIDksICAgIDcsCSAgMSwgIDMxLCAgIDAsCSAgMSwJIDEsICAxKQorTVVYX0NGRygiVzE5XzE2MTBfR1BJTzQ4IiwJIDgsICAgMTUsICAgIDcsICAgMSwgIDIzLCAgIDEsICAgIDEsICAgICAwLCAgMSkKK01VWF9DRkcoIk03XzE2MTBfR1BJTzYyIiwJMTAsICAgIDAsICAgIDAsICAgNCwgIDI0LCAgIDAsICAgIDQsICAgICAwLCAgMSkKKworLyogT01BUC0xNjEwIHVXaXJlICovCitNVVhfQ0ZHKCJWMTlfMTYxMF9VV0lSRV9TQ0xLIiwJIDgsICAgIDYsICAgIDAsCSAgMSwgIDIwLCAgIDAsCSAgMSwJIDEsICAxKQorTVVYX0NGRygiVTE4XzE2MTBfVVdJUkVfU0RJIiwJIDgsICAgIDAsICAgIDAsCSAgMSwgIDE4LCAgIDAsCSAgMSwJIDEsICAxKQorTVVYX0NGRygiVzIxXzE2MTBfVVdJUkVfU0RPIiwJIDgsICAgIDMsICAgIDAsCSAgMSwgIDE5LCAgIDAsCSAgMSwJIDEsICAxKQorTVVYX0NGRygiTjE0XzE2MTBfVVdJUkVfQ1MwIiwJIDgsICAgIDksICAgIDEsCSAgMSwgIDIxLCAgIDAsCSAgMSwJIDEsICAxKQorTVVYX0NGRygiUDE1XzE2MTBfVVdJUkVfQ1MzIiwJIDgsICAgMTIsICAgIDEsCSAgMSwgIDIyLCAgIDAsCSAgMSwJIDEsICAxKQorTVVYX0NGRygiTjE1XzE2MTBfVVdJUkVfQ1MxIiwJIDcsICAgMTgsICAgIDIsCSAgMSwgIDE0LCAgIDAsCSBOQSwJIDAsICAxKQorCisvKiBPTUFQLTE2MTAgRmxhc2ggKi8KK01VWF9DRkcoIkwzXzE2MTBfRkxBU0hfQ1MyQl9PRSIsMTAsICAgIDYsICAgIDEsCSBOQSwgICAwLCAgIDAsCSBOQSwJIDAsICAxKQorTVVYX0NGRygiTThfMTYxMF9GTEFTSF9DUzJCX1dFIiwxMCwgICAgMywgICAgMSwJIE5BLCAgIDAsICAgMCwJIE5BLAkgMCwgIDEpCisKKy8qIEZpcnN0IE1NQyBpbnRlcmZhY2UsIHNhbWUgb24gMTUxMCwgMTYxMCBhbmQgMTcxMCAqLworTVVYX0NGRygiTU1DX0NNRCIsCQkgQSwgICAyNywgICAgMCwJICAyLCAgMTUsICAgMSwJICAyLAkgMSwgIDEpCitNVVhfQ0ZHKCJNTUNfREFUMSIsCQkgQSwgICAyNCwgICAgMCwJICAyLCAgMTQsICAgMSwJICAyLAkgMSwgIDEpCitNVVhfQ0ZHKCJNTUNfREFUMiIsCQkgQSwgICAxOCwgICAgMCwJICAyLCAgMTIsICAgMSwJICAyLAkgMSwgIDEpCitNVVhfQ0ZHKCJNTUNfREFUMCIsCQkgQiwgICAgMCwgICAgMCwJICAyLCAgMTYsICAgMSwJICAyLAkgMSwgIDEpCitNVVhfQ0ZHKCJNTUNfQ0xLIiwJCSBBLCAgIDIxLCAgICAwLAkgTkEsICAgMCwgICAwLAkgTkEsCSAwLCAgMSkKK01VWF9DRkcoIk1NQ19EQVQzIiwJCTEwLCAgIDE1LCAgICAwLAkgIDMsICAgOCwgICAxLAkgIDMsCSAxLCAgMSkKK01VWF9DRkcoIk0xNV8xNzEwX01NQ19DTEtJIiwJIDYsICAgMjEsICAgIDIsICAgMCwgICAwLCAgIDAsICAgTkEsICAgICAwLCAgMSkKK01VWF9DRkcoIlAxOV8xNzEwX01NQ19DTURESVIiLAkgNiwgICAyNCwgICAgNiwgICAwLCAgIDAsICAgMCwgICBOQSwgICAgIDAsICAxKQorTVVYX0NGRygiUDIwXzE3MTBfTU1DX0RBVERJUjAiLAkgNiwgICAyNywgICAgNSwgICAwLCAgIDAsICAgMCwgICBOQSwgICAgIDAsICAxKQorCisvKiBPTUFQLTE2MTAgVVNCMCBhbHRlcm5hdGUgY29uZmlndXJhdGlvbiAqLworTVVYX0NGRygiVzlfVVNCMF9UWEVOIiwJCSBCLCAgIDksICAgICA1LAkgIDIsICAxOSwgICAwLAkgIDIsCSAwLCAgMSkKK01VWF9DRkcoIkFBOV9VU0IwX1ZQIiwJCSBCLCAgIDYsICAgICA1LAkgIDIsICAxOCwgICAwLAkgIDIsCSAwLCAgMSkKK01VWF9DRkcoIlk1X1VTQjBfUkNWIiwJCSBDLCAgMjEsICAgICA1LAkgIDMsICAgMSwgICAwLAkgIDEsCSAwLCAgMSkKK01VWF9DRkcoIlI5X1VTQjBfVk0iLAkJIEMsICAxOCwgICAgIDUsCSAgMywgICAwLCAgIDAsCSAgMywJIDAsICAxKQorTVVYX0NGRygiVjZfVVNCMF9UWEQiLAkJIEMsICAyNywgICAgIDUsCSAgMywgICAzLCAgIDAsCSAgMywJIDAsICAxKQorTVVYX0NGRygiVzVfVVNCMF9TRTAiLAkJIEMsICAyNCwgICAgIDUsCSAgMywgICAyLCAgIDAsCSAgMywJIDAsICAxKQorTVVYX0NGRygiVjlfVVNCMF9TUEVFRCIsCSBCLCAgMTIsICAgICA1LAkgIDIsICAyMCwgICAwLAkgIDIsCSAwLCAgMSkKK01VWF9DRkcoIlkxMF9VU0IwX1NVU1AiLAkgQiwgICAzLCAgICAgNSwJICAyLCAgMTcsICAgMCwJICAyLAkgMCwgIDEpCisKKy8qIFVTQjIgaW50ZXJmYWNlICovCitNVVhfQ0ZHKCJXOV9VU0IyX1RYRU4iLAkJIEIsICAgOSwgICAgIDEsCSBOQSwgICAwLCAgIDAsCSBOQSwJIDAsICAxKQorTVVYX0NGRygiQUE5X1VTQjJfVlAiLAkJIEIsICAgNiwgICAgIDEsCSBOQSwgICAwLCAgIDAsCSBOQSwJIDAsICAxKQorTVVYX0NGRygiWTVfVVNCMl9SQ1YiLAkJIEMsICAyMSwgICAgIDEsCSBOQSwgICAwLCAgIDAsCSBOQSwJIDAsICAxKQorTVVYX0NGRygiUjhfVVNCMl9WTSIsCQkgQywgIDE4LCAgICAgMSwJIE5BLCAgIDAsICAgMCwJIE5BLAkgMCwgIDEpCitNVVhfQ0ZHKCJWNl9VU0IyX1RYRCIsCQkgQywgIDI3LCAgICAgMiwJIE5BLCAgIDAsICAgMCwJIE5BLAkgMCwgIDEpCitNVVhfQ0ZHKCJXNV9VU0IyX1NFMCIsCQkgQywgIDI0LCAgICAgMiwJIE5BLCAgIDAsICAgMCwJIE5BLAkgMCwgIDEpCisKKworLyogVUFSVDEgKi8KK01VWF9DRkcoIlIxM18xNjEwX1VBUlQxX1RYIiwJIEEsICAxMiwgICAgIDYsCSAgMiwgIDEwLCAgIDAsCSAgMiwJMTAsICAxKQorTVVYX0NGRygiVjE0XzE2MTBfVUFSVDFfUlgiLAkgOSwgIDE4LCAgICAgMCwJICAyLCAgIDIsICAgMCwJICAyLAkgMiwgIDEpCitNVVhfQ0ZHKCJSMTRfMTYxMF9VQVJUMV9DVFMiLAkgOSwgIDE1LCAgICAgMCwJICAyLCAgIDEsICAgMCwJICAyLAkgMSwgIDEpCitNVVhfQ0ZHKCJBQTE1XzE2MTBfVUFSVDFfUlRTIiwJIDksICAxMiwgICAgIDEsCSAgMiwgICAwLCAgIDAsCSAgMiwJIDAsICAxKQorCisvKiBJMkMgaW50ZXJmYWNlICovCitNVVhfQ0ZHKCJJMkNfU0NMIiwJCSA3LCAgMjQsICAgICAwLAkgTkEsICAgMCwgICAwLAkgTkEsCSAwLCAgMCkKK01VWF9DRkcoIkkyQ19TREEiLAkJIDcsICAyNywgICAgIDAsCSBOQSwgICAwLCAgIDAsCSBOQSwJIDAsICAwKQorCisvKiBLZXlwYWQgKi8KK01VWF9DRkcoIkYxOF8xNjEwX0tCQzAiLAkgMywgIDE1LCAgICAgMCwJICAwLCAgIDUsICAgMSwJICAwLAkgMCwgIDApCitNVVhfQ0ZHKCJEMjBfMTYxMF9LQkMxIiwJIDMsICAxMiwgICAgIDAsCSAgMCwgICA0LCAgIDEsCSAgMCwJIDAsICAwKQorTVVYX0NGRygiRDE5XzE2MTBfS0JDMiIsCSAzLCAgIDksICAgICAwLAkgIDAsICAgMywgICAxLAkgIDAsCSAwLCAgMCkKK01VWF9DRkcoIkUxOF8xNjEwX0tCQzMiLAkgMywgICA2LCAgICAgMCwJICAwLCAgIDIsICAgMSwJICAwLAkgMCwgIDApCitNVVhfQ0ZHKCJDMjFfMTYxMF9LQkM0IiwJIDMsICAgMywgICAgIDAsCSAgMCwgICAxLCAgIDEsCSAgMCwJIDAsICAwKQorTVVYX0NGRygiRzE4XzE2MTBfS0JSMCIsCSA0LCAgIDAsICAgICAwLAkgIDAsICAgMTAsICAxLAkgIDAsCSAxLCAgMCkKK01VWF9DRkcoIkYxOV8xNjEwX0tCUjEiLAkgMywgICAyNywgICAgMCwJICAwLCAgIDksICAgMSwJICAwLAkgMSwgIDApCitNVVhfQ0ZHKCJIMTRfMTYxMF9LQlIyIiwJIDMsICAgMjQsICAgIDAsCSAgMCwgICA4LCAgIDEsCSAgMCwJIDEsICAwKQorTVVYX0NGRygiRTIwXzE2MTBfS0JSMyIsCSAzLCAgIDIxLCAgICAwLAkgIDAsICAgNywgICAxLAkgIDAsCSAxLCAgMCkKK01VWF9DRkcoIkUxOV8xNjEwX0tCUjQiLAkgMywgICAxOCwgICAgMCwJICAwLCAgIDYsICAgMSwJICAwLAkgMSwgIDApCitNVVhfQ0ZHKCJOMTlfMTYxMF9LQlI1IiwJIDYsICAxMiwgICAgIDEsCSAgMSwgICAyLCAgIDEsCSAgMSwJIDEsICAwKQorCisvKiBQb3dlciBtYW5hZ2VtZW50ICovCitNVVhfQ0ZHKCJUMjBfMTYxMF9MT1dfUFdSIiwJIDcsICAgMTIsICAgIDEsCSAgTkEsICAgMCwgICAwLCAgIE5BLAkgMCwgIDApCisKKy8qIE1DTEsgU2V0dGluZ3MgKi8KK01VWF9DRkcoIlY1XzE3MTBfTUNMS19PTiIsCSBCLCAgIDE1LCAgICAwLAkgIE5BLCAgIDAsICAgMCwgICBOQSwJIDAsICAwKQorTVVYX0NGRygiVjVfMTcxMF9NQ0xLX09GRiIsCSBCLCAgIDE1LCAgICA2LAkgIE5BLCAgIDAsICAgMCwgICBOQSwJIDAsICAwKQorTVVYX0NGRygiUjEwXzE2MTBfTUNMS19PTiIsCSBCLCAgIDE4LCAgICAwLAkgIE5BLCAgMjIsICAgMCwJICBOQSwJIDEsICAwKQorTVVYX0NGRygiUjEwXzE2MTBfTUNMS19PRkYiLAkgQiwgICAxOCwgICAgNiwJICAyLCAgIDIyLCAgIDEsCSAgMiwJIDEsICAxKQorCisvKiBDb21wYWN0Rmxhc2ggY29udHJvbGxlciwgY29uZmxpY3RzIHdpdGggTU1DMSAqLworTVVYX0NGRygiUDExXzE2MTBfQ0ZfQ0QyIiwJIEEsICAgMjcsICAgIDMsCSAgMiwgICAxNSwgICAxLAkgIDIsCSAxLCAgMSkKK01VWF9DRkcoIlIxMV8xNjEwX0NGX0lPSVMxNiIsCSBCLCAgICAwLCAgICAzLAkgIDIsICAgMTYsICAgMSwJICAyLAkgMSwgIDEpCitNVVhfQ0ZHKCJWMTBfMTYxMF9DRl9JUkVRIiwJIEEsICAgMjQsICAgIDMsCSAgMiwgICAxNCwgICAwLAkgIDIsCSAwLCAgMSkKK01VWF9DRkcoIlcxMF8xNjEwX0NGX1JFU0VUIiwJIEEsICAgMTgsICAgIDMsCSAgMiwgICAxMiwgICAxLAkgIDIsCSAxLCAgMSkKK01VWF9DRkcoIlcxMV8xNjEwX0NGX0NEMSIsCTEwLCAgIDE1LCAgICAzLAkgIDMsICAgIDgsICAgMSwJICAzLAkgMSwgIDEpCit9OworCisjZW5kaWYJLyogX19NVVhfQ19fICovCisKKyNpZmRlZglDT05GSUdfT01BUF9NVVgKKy8qIHNldHVwIHBpbiBtdXhpbmcgaW4gTGludXggKi8KK2V4dGVybiBpbnQgb21hcF9jZmdfcmVnKHJlZ19jZmdfdCByZWdfY2ZnKTsKKyNlbHNlCisvKiBib290IGxvYWRlciBkb2VzIGl0IGFsbCAobm8gd2FybmluZ3MgZnJvbSBDT05GSUdfT01BUF9NVVhfV0FSTklOR1MpICovCitzdGF0aWMgaW5saW5lIGludCBvbWFwX2NmZ19yZWcocmVnX2NmZ190IHJlZ19jZmcpIHsgcmV0dXJuIDA7IH0KKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvb21hcDE1MTAuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvb21hcDE1MTAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDkxYTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9vbWFwMTUxMC5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvb21hcDE1MTAuaAorICoKKyAqIEhhcmR3YXJlIGRlZmluaXRpb25zIGZvciBUSSBPTUFQMTUxMCBwcm9jZXNzb3IuCisgKgorICogQ2xlYW51cCBmb3IgTGludXgtMi42IGJ5IERpcmsgQmVobWUgPGRpcmsuYmVobWVAZGUuYm9zY2guY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKyAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTgorICogTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX09NQVAxNTEwX0gKKyNkZWZpbmUgX19BU01fQVJDSF9PTUFQMTUxMF9ICisKKy8qCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBCYXNlIGFkZHJlc3NlcworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKy8qIFN5bnRheDogWFhfQkFTRSA9IFZpcnR1YWwgYmFzZSBhZGRyZXNzLCBYWF9TVEFSVCA9IFBoeXNpY2FsIGJhc2UgYWRkcmVzcyAqLworCisjZGVmaW5lIE9NQVAxNTEwX1NSQU1fQkFTRQkweEQwMDAwMDAwCisjZGVmaW5lIE9NQVAxNTEwX1NSQU1fU0laRQkoU1pfMTI4SyArIFNaXzY0SykKKyNkZWZpbmUgT01BUDE1MTBfU1JBTV9TVEFSVAkweDIwMDAwMDAwCisKKyNkZWZpbmUgT01BUDE1MTBfRFNQX0JBU0UJMHhFMDAwMDAwMAorI2RlZmluZSBPTUFQMTUxMF9EU1BfU0laRQkweDI4MDAwCisjZGVmaW5lIE9NQVAxNTEwX0RTUF9TVEFSVAkweEUwMDAwMDAwCisKKyNkZWZpbmUgT01BUDE1MTBfRFNQUkVHX0JBU0UJMHhFMTAwMDAwMAorI2RlZmluZSBPTUFQMTUxMF9EU1BSRUdfU0laRQlTWl8xMjhLCisjZGVmaW5lIE9NQVAxNTEwX0RTUFJFR19TVEFSVAkweEUxMDAwMDAwCisKKy8qCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBNZW1vcnkgdXNlZCBieSBwb3dlciBtYW5hZ2VtZW50CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2RlZmluZSBPTUFQMTUxMF9TUkFNX0lETEVfU1VTUEVORAkoT01BUDE1MTBfU1JBTV9CQVNFICsgT01BUDE1MTBfU1JBTV9TSVpFIC0gMHgyMDApCisjZGVmaW5lIE9NQVAxNTEwX1NSQU1fQVBJX1NVU1BFTkQJKE9NQVAxNTEwX1NSQU1fSURMRV9TVVNQRU5EICsgMHgxMDApCisKKyNlbmRpZiAvKiAgX19BU01fQVJDSF9PTUFQMTUxMF9IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvb21hcDE2eHguaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvb21hcDE2eHguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGIxZmU0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9vbWFwMTZ4eC5oCkBAIC0wLDAgKzEsMTg3IEBACisvKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL29tYXAxNnh4LmgKKyAqCisgKiBIYXJkd2FyZSBkZWZpbml0aW9ucyBmb3IgVEkgT01BUDE2MTAvNTkxMi8xNzEwIHByb2Nlc3NvcnMuCisgKgorICogQ2xlYW51cCBmb3IgTGludXgtMi42IGJ5IERpcmsgQmVobWUgPGRpcmsuYmVobWVAZGUuYm9zY2guY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKyAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTgorICogTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX09NQVAxNlhYX0gKKyNkZWZpbmUgX19BU01fQVJDSF9PTUFQMTZYWF9ICisKKy8qCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBCYXNlIGFkZHJlc3NlcworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKy8qIFN5bnRheDogWFhfQkFTRSA9IFZpcnR1YWwgYmFzZSBhZGRyZXNzLCBYWF9TVEFSVCA9IFBoeXNpY2FsIGJhc2UgYWRkcmVzcyAqLworCisjZGVmaW5lIE9NQVAxNlhYX1NSQU1fQkFTRQkweEQwMDAwMDAwCisjZGVmaW5lIE9NQVAxNjEwX1NSQU1fU0laRQkoU1pfMTZLKQorI2RlZmluZSBPTUFQNTkxMl9TUkFNX1NJWkUJMHgzRTgwMAorI2RlZmluZSBPTUFQMTZYWF9TUkFNX1NUQVJUCTB4MjAwMDAwMDAKKworI2RlZmluZSBPTUFQMTZYWF9EU1BfQkFTRQkweEUwMDAwMDAwCisjZGVmaW5lIE9NQVAxNlhYX0RTUF9TSVpFCTB4MjgwMDAKKyNkZWZpbmUgT01BUDE2WFhfRFNQX1NUQVJUCTB4RTAwMDAwMDAKKworI2RlZmluZSBPTUFQMTZYWF9EU1BSRUdfQkFTRQkweEUxMDAwMDAwCisjZGVmaW5lIE9NQVAxNlhYX0RTUFJFR19TSVpFCVNaXzEyOEsKKyNkZWZpbmUgT01BUDE2WFhfRFNQUkVHX1NUQVJUCTB4RTEwMDAwMDAKKworLyoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIE1lbW9yeSB1c2VkIGJ5IHBvd2VyIG1hbmFnZW1lbnQKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjZGVmaW5lIE9NQVAxNjEwX1NSQU1fSURMRV9TVVNQRU5ECShPTUFQMTZYWF9TUkFNX0JBU0UgKyBPTUFQMTYxMF9TUkFNX1NJWkUgLSAweDIwMCkKKyNkZWZpbmUgT01BUDE2MTBfU1JBTV9BUElfU1VTUEVORAkoT01BUDE2MTBfU1JBTV9JRExFX1NVU1BFTkQgKyAweDEwMCkKKyNkZWZpbmUgT01BUDU5MTJfU1JBTV9JRExFX1NVU1BFTkQJKE9NQVAxNlhYX1NSQU1fQkFTRSArIE9NQVA1OTEyX1NSQU1fU0laRSAtIDB4MjAwKQorI2RlZmluZSBPTUFQNTkxMl9TUkFNX0FQSV9TVVNQRU5ECShPTUFQNTkxMl9TUkFNX0lETEVfU1VTUEVORCArIDB4MTAwKQorCisvKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJbnRlcnJ1cHRzCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2RlZmluZSBPTUFQX0lIMl8wX0JBU0UJCSgweGZmZmUwMDAwKQorI2RlZmluZSBPTUFQX0lIMl8xX0JBU0UJCSgweGZmZmUwMTAwKQorI2RlZmluZSBPTUFQX0lIMl8yX0JBU0UJCSgweGZmZmUwMjAwKQorI2RlZmluZSBPTUFQX0lIMl8zX0JBU0UJCSgweGZmZmUwMzAwKQorCisjZGVmaW5lIE9NQVBfSUgyXzBfSVRSCQkoT01BUF9JSDJfMF9CQVNFICsgMHgwMCkKKyNkZWZpbmUgT01BUF9JSDJfMF9NSVIJCShPTUFQX0lIMl8wX0JBU0UgKyAweDA0KQorI2RlZmluZSBPTUFQX0lIMl8wX1NJUl9JUlEJKE9NQVBfSUgyXzBfQkFTRSArIDB4MTApCisjZGVmaW5lIE9NQVBfSUgyXzBfU0lSX0ZJUQkoT01BUF9JSDJfMF9CQVNFICsgMHgxNCkKKyNkZWZpbmUgT01BUF9JSDJfMF9DT05UUk9MCShPTUFQX0lIMl8wX0JBU0UgKyAweDE4KQorI2RlZmluZSBPTUFQX0lIMl8wX0lMUjAJCShPTUFQX0lIMl8wX0JBU0UgKyAweDFjKQorI2RlZmluZSBPTUFQX0lIMl8wX0lTUgkJKE9NQVBfSUgyXzBfQkFTRSArIDB4OWMpCisKKyNkZWZpbmUgT01BUF9JSDJfMV9JVFIJCShPTUFQX0lIMl8xX0JBU0UgKyAweDAwKQorI2RlZmluZSBPTUFQX0lIMl8xX01JUgkJKE9NQVBfSUgyXzFfQkFTRSArIDB4MDQpCisjZGVmaW5lIE9NQVBfSUgyXzFfU0lSX0lSUQkoT01BUF9JSDJfMV9CQVNFICsgMHgxMCkKKyNkZWZpbmUgT01BUF9JSDJfMV9TSVJfRklRCShPTUFQX0lIMl8xX0JBU0UgKyAweDE0KQorI2RlZmluZSBPTUFQX0lIMl8xX0NPTlRST0wJKE9NQVBfSUgyXzFfQkFTRSArIDB4MTgpCisjZGVmaW5lIE9NQVBfSUgyXzFfSUxSMQkJKE9NQVBfSUgyXzFfQkFTRSArIDB4MWMpCisjZGVmaW5lIE9NQVBfSUgyXzFfSVNSCQkoT01BUF9JSDJfMV9CQVNFICsgMHg5YykKKworI2RlZmluZSBPTUFQX0lIMl8yX0lUUgkJKE9NQVBfSUgyXzJfQkFTRSArIDB4MDApCisjZGVmaW5lIE9NQVBfSUgyXzJfTUlSCQkoT01BUF9JSDJfMl9CQVNFICsgMHgwNCkKKyNkZWZpbmUgT01BUF9JSDJfMl9TSVJfSVJRCShPTUFQX0lIMl8yX0JBU0UgKyAweDEwKQorI2RlZmluZSBPTUFQX0lIMl8yX1NJUl9GSVEJKE9NQVBfSUgyXzJfQkFTRSArIDB4MTQpCisjZGVmaW5lIE9NQVBfSUgyXzJfQ09OVFJPTAkoT01BUF9JSDJfMl9CQVNFICsgMHgxOCkKKyNkZWZpbmUgT01BUF9JSDJfMl9JTFIyCQkoT01BUF9JSDJfMl9CQVNFICsgMHgxYykKKyNkZWZpbmUgT01BUF9JSDJfMl9JU1IJCShPTUFQX0lIMl8yX0JBU0UgKyAweDljKQorCisjZGVmaW5lIE9NQVBfSUgyXzNfSVRSCQkoT01BUF9JSDJfM19CQVNFICsgMHgwMCkKKyNkZWZpbmUgT01BUF9JSDJfM19NSVIJCShPTUFQX0lIMl8zX0JBU0UgKyAweDA0KQorI2RlZmluZSBPTUFQX0lIMl8zX1NJUl9JUlEJKE9NQVBfSUgyXzNfQkFTRSArIDB4MTApCisjZGVmaW5lIE9NQVBfSUgyXzNfU0lSX0ZJUQkoT01BUF9JSDJfM19CQVNFICsgMHgxNCkKKyNkZWZpbmUgT01BUF9JSDJfM19DT05UUk9MCShPTUFQX0lIMl8zX0JBU0UgKyAweDE4KQorI2RlZmluZSBPTUFQX0lIMl8zX0lMUjMJCShPTUFQX0lIMl8zX0JBU0UgKyAweDFjKQorI2RlZmluZSBPTUFQX0lIMl8zX0lTUgkJKE9NQVBfSUgyXzNfQkFTRSArIDB4OWMpCisKKy8qCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBDbG9ja3MKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2RlZmluZSBPTUFQMTZYWF9BUk1fSURMRUNUMwkoQ0xLR0VOX1JFR19CQVNFICsgMHgyNCkKKworLyoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFBpbiBjb25maWd1cmF0aW9uIHJlZ2lzdGVycworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjZGVmaW5lIE9NQVAxNlhYX0NPTkZfVk9MVEFHRV9WRERTSFY2CSgxIDw8IDgpCisjZGVmaW5lIE9NQVAxNlhYX0NPTkZfVk9MVEFHRV9WRERTSFY3CSgxIDw8IDkpCisjZGVmaW5lIE9NQVAxNlhYX0NPTkZfVk9MVEFHRV9WRERTSFY4CSgxIDw8IDEwKQorI2RlZmluZSBPTUFQMTZYWF9DT05GX1ZPTFRBR0VfVkREU0hWOQkoMSA8PCAxMSkKKyNkZWZpbmUgT01BUDE2WFhfU1VCTFZEU19DT05GX1ZBTElECSgxIDw8IDEzKQorCisvKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogU3lzdGVtIGNvbnRyb2wgcmVnaXN0ZXJzCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNkZWZpbmUgT01BUDE2MTBfUkVTRVRfQ09OVFJPTCAgMHhmZmZlMTE0MAorCisvKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBUSVBCIGJ1cyBpbnRlcmZhY2UKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjZGVmaW5lIFRJUEJfU1dJVENIX0JBU0UJCSAoMHhmZmZiYzgwMCkKKyNkZWZpbmUgT01BUDE2WFhfTU1DU0QyX1NTV19NUFVfQ09ORgkoVElQQl9TV0lUQ0hfQkFTRSArIDB4MTYwKQorCisvKiBVQVJUMyBSZWdpc3RlcnMgTWFwaW5nIHRocm91Z2ggTVBVIGJ1cyAqLworI2RlZmluZSBVQVJUM19SSFIgICAgICAgICAgICAgICAoT01BUF9VQVJUM19CQVNFICsgMCkKKyNkZWZpbmUgVUFSVDNfVEhSICAgICAgICAgICAgICAgKE9NQVBfVUFSVDNfQkFTRSArIDApCisjZGVmaW5lIFVBUlQzX0RMTCAgICAgICAgICAgICAgIChPTUFQX1VBUlQzX0JBU0UgKyAwKQorI2RlZmluZSBVQVJUM19JRVIgICAgICAgICAgICAgICAoT01BUF9VQVJUM19CQVNFICsgNCkKKyNkZWZpbmUgVUFSVDNfRExIICAgICAgICAgICAgICAgKE9NQVBfVUFSVDNfQkFTRSArIDQpCisjZGVmaW5lIFVBUlQzX0lJUiAgICAgICAgICAgICAgIChPTUFQX1VBUlQzX0JBU0UgKyA4KQorI2RlZmluZSBVQVJUM19GQ1IgICAgICAgICAgICAgICAoT01BUF9VQVJUM19CQVNFICsgOCkKKyNkZWZpbmUgVUFSVDNfRUZSICAgICAgICAgICAgICAgKE9NQVBfVUFSVDNfQkFTRSArIDgpCisjZGVmaW5lIFVBUlQzX0xDUiAgICAgICAgICAgICAgIChPTUFQX1VBUlQzX0JBU0UgKyAweDBDKQorI2RlZmluZSBVQVJUM19NQ1IgICAgICAgICAgICAgICAoT01BUF9VQVJUM19CQVNFICsgMHgxMCkKKyNkZWZpbmUgVUFSVDNfWE9OMV9BRERSMSAgICAgICAgKE9NQVBfVUFSVDNfQkFTRSArIDB4MTApCisjZGVmaW5lIFVBUlQzX1hPTjJfQUREUjIgICAgICAgIChPTUFQX1VBUlQzX0JBU0UgKyAweDE0KQorI2RlZmluZSBVQVJUM19MU1IgICAgICAgICAgICAgICAoT01BUF9VQVJUM19CQVNFICsgMHgxNCkKKyNkZWZpbmUgVUFSVDNfVENSICAgICAgICAgICAgICAgKE9NQVBfVUFSVDNfQkFTRSArIDB4MTgpCisjZGVmaW5lIFVBUlQzX01TUiAgICAgICAgICAgICAgIChPTUFQX1VBUlQzX0JBU0UgKyAweDE4KQorI2RlZmluZSBVQVJUM19YT0ZGMSAgICAgICAgICAgICAoT01BUF9VQVJUM19CQVNFICsgMHgxOCkKKyNkZWZpbmUgVUFSVDNfWE9GRjIgICAgICAgICAgICAgKE9NQVBfVUFSVDNfQkFTRSArIDB4MUMpCisjZGVmaW5lIFVBUlQzX1NQUiAgICAgICAgICAgICAgIChPTUFQX1VBUlQzX0JBU0UgKyAweDFDKQorI2RlZmluZSBVQVJUM19UTFIgICAgICAgICAgICAgICAoT01BUF9VQVJUM19CQVNFICsgMHgxQykKKyNkZWZpbmUgVUFSVDNfTURSMSAgICAgICAgICAgICAgKE9NQVBfVUFSVDNfQkFTRSArIDB4MjApCisjZGVmaW5lIFVBUlQzX01EUjIgICAgICAgICAgICAgIChPTUFQX1VBUlQzX0JBU0UgKyAweDI0KQorI2RlZmluZSBVQVJUM19TRkxTUiAgICAgICAgICAgICAoT01BUF9VQVJUM19CQVNFICsgMHgyOCkKKyNkZWZpbmUgVUFSVDNfVFhGTEwgICAgICAgICAgICAgKE9NQVBfVUFSVDNfQkFTRSArIDB4MjgpCisjZGVmaW5lIFVBUlQzX1JFU1VNRSAgICAgICAgICAgIChPTUFQX1VBUlQzX0JBU0UgKyAweDJDKQorI2RlZmluZSBVQVJUM19UWEZMSCAgICAgICAgICAgICAoT01BUF9VQVJUM19CQVNFICsgMHgyQykKKyNkZWZpbmUgVUFSVDNfU0ZSRUdMICAgICAgICAgICAgKE9NQVBfVUFSVDNfQkFTRSArIDB4MzApCisjZGVmaW5lIFVBUlQzX1JYRkxMICAgICAgICAgICAgIChPTUFQX1VBUlQzX0JBU0UgKyAweDMwKQorI2RlZmluZSBVQVJUM19TRlJFR0ggICAgICAgICAgICAoT01BUF9VQVJUM19CQVNFICsgMHgzNCkKKyNkZWZpbmUgVUFSVDNfUlhGTEggICAgICAgICAgICAgKE9NQVBfVUFSVDNfQkFTRSArIDB4MzQpCisjZGVmaW5lIFVBUlQzX0JMUiAgICAgICAgICAgICAgIChPTUFQX1VBUlQzX0JBU0UgKyAweDM4KQorI2RlZmluZSBVQVJUM19BQ1JFRyAgICAgICAgICAgICAoT01BUF9VQVJUM19CQVNFICsgMHgzQykKKyNkZWZpbmUgVUFSVDNfRElWMTYgICAgICAgICAgICAgKE9NQVBfVUFSVDNfQkFTRSArIDB4M0MpCisjZGVmaW5lIFVBUlQzX1NDUiAgICAgICAgICAgICAgIChPTUFQX1VBUlQzX0JBU0UgKyAweDQwKQorI2RlZmluZSBVQVJUM19TU1IgICAgICAgICAgICAgICAoT01BUF9VQVJUM19CQVNFICsgMHg0NCkKKyNkZWZpbmUgVUFSVDNfRUJMUiAgICAgICAgICAgICAgKE9NQVBfVUFSVDNfQkFTRSArIDB4NDgpCisjZGVmaW5lIFVBUlQzX09TQ18xMk1fU0VMICAgICAgIChPTUFQX1VBUlQzX0JBU0UgKyAweDRDKQorI2RlZmluZSBVQVJUM19NVlIgICAgICAgICAgICAgICAoT01BUF9VQVJUM19CQVNFICsgMHg1MCkKKworLyoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFB1bHNlLVdpZHRoIExpZ2h0CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNkZWZpbmUgT01BUDE2WFhfUFdMX0JBU0UJKDB4ZmZmYjU4MDApCisjZGVmaW5lIE9NQVAxNlhYX1BXTF9FTkFCTEUJKE9NQVAxNlhYX1BXTF9CQVNFICsgMHgwMCkKKyNkZWZpbmUgT01BUDE2WFhfUFdMX0NMS19FTkFCTEUJKE9NQVAxNlhYX1BXTF9CQVNFICsgMHgwNCkKKworI2VuZGlmIC8qICBfX0FTTV9BUkNIX09NQVAxNlhYX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9vbWFwNzMwLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL29tYXA3MzAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTlhYjAwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9vbWFwNzMwLmgKQEAgLTAsMCArMSwxMDYgQEAKKy8qIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvb21hcDczMC5oCisgKgorICogSGFyZHdhcmUgZGVmaW5pdGlvbnMgZm9yIFRJIE9NQVA3MzAgcHJvY2Vzc29yLgorICoKKyAqIENsZWFudXAgZm9yIExpbnV4LTIuNiBieSBEaXJrIEJlaG1lIDxkaXJrLmJlaG1lQGRlLmJvc2NoLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisgKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4KKyAqIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKKyAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSAgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9PTUFQNzMwX0gKKyNkZWZpbmUgX19BU01fQVJDSF9PTUFQNzMwX0gKKworLyoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEJhc2UgYWRkcmVzc2VzCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyogU3ludGF4OiBYWF9CQVNFID0gVmlydHVhbCBiYXNlIGFkZHJlc3MsIFhYX1NUQVJUID0gUGh5c2ljYWwgYmFzZSBhZGRyZXNzICovCisKKyNkZWZpbmUgT01BUDczMF9TUkFNX0JBU0UJMHhEMDAwMDAwMAorI2RlZmluZSBPTUFQNzMwX1NSQU1fU0laRQkoU1pfMTI4SyArIFNaXzY0SyArIFNaXzhLKQorI2RlZmluZSBPTUFQNzMwX1NSQU1fU1RBUlQJMHgyMDAwMDAwMAorCisjZGVmaW5lIE9NQVA3MzBfRFNQX0JBU0UJMHhFMDAwMDAwMAorI2RlZmluZSBPTUFQNzMwX0RTUF9TSVpFCTB4NTAwMDAKKyNkZWZpbmUgT01BUDczMF9EU1BfU1RBUlQJMHhFMDAwMDAwMAorCisjZGVmaW5lIE9NQVA3MzBfRFNQUkVHX0JBU0UJMHhFMTAwMDAwMAorI2RlZmluZSBPTUFQNzMwX0RTUFJFR19TSVpFCVNaXzEyOEsKKyNkZWZpbmUgT01BUDczMF9EU1BSRUdfU1RBUlQJMHhFMTAwMDAwMAorCisvKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogT01BUDczMCBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHJlZ2lzdGVycworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjZGVmaW5lIE9NQVA3MzBfQ09ORklHX0JBU0UJMHhmZmZlMTAwMAorI2RlZmluZSBPTUFQNzMwX0lPX0NPTkZfMAkweGZmZmUxMDcwCisjZGVmaW5lIE9NQVA3MzBfSU9fQ09ORl8xCTB4ZmZmZTEwNzQKKyNkZWZpbmUgT01BUDczMF9JT19DT05GXzIJMHhmZmZlMTA3OAorI2RlZmluZSBPTUFQNzMwX0lPX0NPTkZfMwkweGZmZmUxMDdjCisjZGVmaW5lIE9NQVA3MzBfSU9fQ09ORl80CTB4ZmZmZTEwODAKKyNkZWZpbmUgT01BUDczMF9JT19DT05GXzUJMHhmZmZlMTA4NAorI2RlZmluZSBPTUFQNzMwX0lPX0NPTkZfNgkweGZmZmUxMDg4CisjZGVmaW5lIE9NQVA3MzBfSU9fQ09ORl83CTB4ZmZmZTEwOGMKKyNkZWZpbmUgT01BUDczMF9JT19DT05GXzgJMHhmZmZlMTA5MAorI2RlZmluZSBPTUFQNzMwX0lPX0NPTkZfOQkweGZmZmUxMDk0CisjZGVmaW5lIE9NQVA3MzBfSU9fQ09ORl8xMAkweGZmZmUxMDk4CisjZGVmaW5lIE9NQVA3MzBfSU9fQ09ORl8xMQkweGZmZmUxMDljCisjZGVmaW5lIE9NQVA3MzBfSU9fQ09ORl8xMgkweGZmZmUxMGEwCisjZGVmaW5lIE9NQVA3MzBfSU9fQ09ORl8xMwkweGZmZmUxMGE0CisKKyNkZWZpbmUgT01BUDczMF9NT0RFXzEJCTB4ZmZmZTEwMTAKKyNkZWZpbmUgT01BUDczMF9NT0RFXzIJCTB4ZmZmZTEwMTQKKworLyogQ1NNSSBzcGVjaWFsczogaW4gdGVybXMgb2YgYmFzZSArIG9mZnNldCAqLworI2RlZmluZSBPTUFQNzMwX01PREUyX09GRlNFVAkweDE0CisKKy8qCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBPTUFQNzMwIHRyYWZmaWMgY29udHJvbGxlciBjb25maWd1cmF0aW9uIHJlZ2lzdGVycworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjZGVmaW5lIE9NQVA3MzBfRkxBU0hfQ0ZHXzAJMHhmZmZlY2MxMAorI2RlZmluZSBPTUFQNzMwX0ZMQVNIX0FDRkdfMAkweGZmZmVjYzUwCisjZGVmaW5lIE9NQVA3MzBfRkxBU0hfQ0ZHXzEJMHhmZmZlY2MxNAorI2RlZmluZSBPTUFQNzMwX0ZMQVNIX0FDRkdfMQkweGZmZmVjYzU0CisKKy8qCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBPTUFQNzMwIERTUCBjb250cm9sIHJlZ2lzdGVycworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjZGVmaW5lIE9NQVA3MzBfSUNSX0JBU0UJMHhmZmZiYjgwMAorI2RlZmluZSBPTUFQNzMwX0RTUF9NX0NUTAkweGZmZmJiODA0CisjZGVmaW5lIE9NQVA3MzBfRFNQX01NVV9CQVNFCTB4ZmZmZWQyMDAKKworLyoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIE9NQVA3MzAgUENDX1VQTEQgY29uZmlndXJhdGlvbiByZWdpc3RlcnMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2RlZmluZSBPTUFQNzMwX1BDQ19VUExEX0NUUkxfQkFTRQkoMHhmZmZlMDkwMCkKKyNkZWZpbmUgT01BUDczMF9QQ0NfVVBMRF9DVFJMCQkoT01BUDczMF9QQ0NfVVBMRF9DVFJMX0JBU0UgKyAweDAwKQorCisjZW5kaWYgLyogIF9fQVNNX0FSQ0hfT01BUDczMF9IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvcGFyYW0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWNlOWFkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9wYXJhbS5oCkBAIC0wLDAgKzEsOCBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3BhcmFtLmgKKyAqCisgKi8KKworI2lmZGVmIENPTkZJR19PTUFQXzMyS19USU1FUl9IWgorI2RlZmluZSBIWglDT05GSUdfT01BUF8zMktfVElNRVJfSFoKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9wbS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9wbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyMDlmYzAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3BtLmgKQEAgLTAsMCArMSwyMjkgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS9hcmNoLW9tYXAvcG0uaAorICoKKyAqIEhlYWRlciBmaWxlIGZvciBPTUFQIFBvd2VyIE1hbmFnZW1lbnQgUm91dGluZXMKKyAqCisgKiBBdXRob3I6IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqCSAgIHN1cHBvcnRAbXZpc3RhLmNvbQorICoKKyAqIENvcHlyaWdodCAyMDAyIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgorICoKKyAqIENsZWFudXAgMjAwNCBmb3IgTGludXggMi42IGJ5IERpcmsgQmVobWUgPGRpcmsuYmVobWVAZGUuYm9zY2guY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKyAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTgorICogTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9PTUFQX1BNX0gKKyNkZWZpbmUgX19BU01fQVJDSF9PTUFQX1BNX0gKKworLyoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFJlZ2lzdGVyIGFuZCBvZmZzZXQgZGVmaW5pdGlvbnMgdG8gYmUgdXNlZCBpbiBQTSBhc3NlbWJsZXIgY29kZQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjZGVmaW5lIENMS0dFTl9SRUdfQVNNX0JBU0UJCWlvX3AydigweGZmZmVjZTAwKQorI2RlZmluZSBBUk1fSURMRUNUMV9BU01fT0ZGU0VUCQkweDA0CisjZGVmaW5lIEFSTV9JRExFQ1QyX0FTTV9PRkZTRVQJCTB4MDgKKworI2RlZmluZSBUQ01JRl9BU01fQkFTRQkJCWlvX3AydigweGZmZmVjYzAwKQorI2RlZmluZSBFTUlGU19DT05GSUdfQVNNX09GRlNFVAkJMHgwYworI2RlZmluZSBFTUlGRl9TRFJBTV9DT05GSUdfQVNNX09GRlNFVAkweDIwCisKKy8qCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBQb3dlcm1hbmFnZW1lbnQgYml0bWFza3MKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2RlZmluZSBJRExFX1dBSVRfQ1lDTEVTCQkweDAwMDAwZmZmCisjZGVmaW5lIFBFUklQSEVSQUxfRU5BQkxFCQkweDIKKworI2RlZmluZSBTRUxGX1JFRlJFU0hfTU9ERQkJMHgwYzAwMDAwMQorI2RlZmluZSBJRExFX0VNSUZTX1JFUVVFU1QJCTB4YworI2RlZmluZSBNT0RFTV8zMktfRU4JCQkweDEKKyNkZWZpbmUgUEVSX0VOCQkJCTB4MQorCisjZGVmaW5lIENQVV9TVVNQRU5EX1NJWkUJCTIwMAorI2RlZmluZSBVTFBEX0xPV19QT1dFUl9FTgkJMHgwMDAxCisKKyNkZWZpbmUgRFNQX0lETEVfREVMQVkJCQkxMAorI2RlZmluZSBEU1BfSURMRQkJCTB4MDA0MAorI2RlZmluZSBEU1BfUlNUCQkJCTB4MDAwNAorI2RlZmluZSBEU1BfRU5BQkxFCQkJMHgwMDAyCisjZGVmaW5lIFNVRkZJQ0lFTlRfRFNQX1JFU0VUX1RJTUUJMTAwMAorI2RlZmluZSBERUZBVUxUX01QVUlfQ09ORklHCQkweDA1Y2YKKyNkZWZpbmUgRU5BQkxFX1hPUkNMSwkJCTB4MgorI2RlZmluZSBEU1BfQ0xPQ0tfRU5BQkxFCQkweDIwMDAKKyNkZWZpbmUgRFNQX0lETEVfTU9ERQkJCTB4MgorI2RlZmluZSBUQ19JRExFX1JFUVVFU1QJCQkoMHgwMDAwMDAwYykKKworI2RlZmluZSBJUlFfTEVWRUwyCQkJKDE8PDApCisjZGVmaW5lIElSUV9LRVlCT0FSRAkJCSgxPDwxKQorI2RlZmluZSBJUlFfVUFSVDIJCQkoMTw8MTUpCisKKyNkZWZpbmUgUERFX0JJVAkJCQkweDA4CisjZGVmaW5lIFBXRF9FTl9CSVQJCQkweDA0CisjZGVmaW5lIEVOX1BFUkNLX0JJVAkJCTB4MDQKKworI2RlZmluZSBPTUFQMTUxMF9ERUVQX1NMRUVQX1JFUVVFU1QJMHgwZWM3CisjZGVmaW5lIE9NQVAxNTEwX0JJR19TTEVFUF9SRVFVRVNUCTB4MGNjNQorI2RlZmluZSBPTUFQMTUxMF9JRExFX0xPT1BfUkVRVUVTVAkweDBjMDAKKyNkZWZpbmUgT01BUDE1MTBfSURMRV9DTE9DS19ET01BSU5TCTB4MgorI2RlZmluZSBPTUFQMTUxMF9VTFBEX0xPV19QT1dFUl9SRVEJMHgwMDAxCisKKyNkZWZpbmUgT01BUDE2MTBfREVFUF9TTEVFUF9SRVFVRVNUCTB4MTdjNworI2RlZmluZSBPTUFQMTYxMF9CSUdfU0xFRVBfUkVRVUVTVAlUQkQKKyNkZWZpbmUgT01BUDE2MTBfSURMRV9MT09QX1JFUVVFU1QJMHgwNDAwCisjZGVmaW5lIE9NQVAxNjEwX0lETEVfQ0xPQ0tfRE9NQUlOUwkweDA5YzcKKyNkZWZpbmUgT01BUDE2MTBfVUxQRF9MT1dfUE9XRVJfUkVRCTB4MworCisjaWZuZGVmIE9NQVAxNTEwX1NSQU1fSURMRV9TVVNQRU5ECisjZGVmaW5lIE9NQVAxNTEwX1NSQU1fSURMRV9TVVNQRU5EIDAKKyNlbmRpZgorI2lmbmRlZiBPTUFQMTYxMF9TUkFNX0lETEVfU1VTUEVORAorI2RlZmluZSBPTUFQMTYxMF9TUkFNX0lETEVfU1VTUEVORCAwCisjZW5kaWYKKyNpZm5kZWYgT01BUDU5MTJfU1JBTV9JRExFX1NVU1BFTkQKKyNkZWZpbmUgT01BUDU5MTJfU1JBTV9JRExFX1NVU1BFTkQgMAorI2VuZGlmCisKKyNpZm5kZWYgT01BUDE1MTBfU1JBTV9BUElfU1VTUEVORAorI2RlZmluZSBPTUFQMTUxMF9TUkFNX0FQSV9TVVNQRU5EIDAKKyNlbmRpZgorI2lmbmRlZiBPTUFQMTYxMF9TUkFNX0FQSV9TVVNQRU5ECisjZGVmaW5lIE9NQVAxNjEwX1NSQU1fQVBJX1NVU1BFTkQgMAorI2VuZGlmCisjaWZuZGVmIE9NQVA1OTEyX1NSQU1fQVBJX1NVU1BFTkQKKyNkZWZpbmUgT01BUDU5MTJfU1JBTV9BUElfU1VTUEVORCAwCisjZW5kaWYKKworI2lmICAgICAhZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTUxMCkgJiYgXAorCSFkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNlhYKQorI2Vycm9yICJQb3dlciBtYW5hZ2VtZW50IGZvciB0aGlzIHByb2Nlc3NvciBub3QgaW1wbGVtZW50ZWQgeWV0IgorI2VuZGlmCisKKyNpZm5kZWYgX19BU1NFTUJMRVJfXworZXh0ZXJuIHZvaWQgb21hcF9wbV9pZGxlKHZvaWQpOworZXh0ZXJuIHZvaWQgb21hcF9wbV9zdXNwZW5kKHZvaWQpOworZXh0ZXJuIGludCBvbWFwMTUxMF9jcHVfc3VzcGVuZCh1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgc2hvcnQpOworZXh0ZXJuIGludCBvbWFwMTYxMF9jcHVfc3VzcGVuZCh1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgc2hvcnQpOworZXh0ZXJuIGludCBvbWFwMTUxMF9pZGxlX2xvb3Bfc3VzcGVuZCh2b2lkKTsKK2V4dGVybiBpbnQgb21hcDE2MTBfaWRsZV9sb29wX3N1c3BlbmQodm9pZCk7CitleHRlcm4gdW5zaWduZWQgaW50IG9tYXAxNTEwX2NwdV9zdXNwZW5kX3N6OworZXh0ZXJuIHVuc2lnbmVkIGludCBvbWFwMTUxMF9pZGxlX2xvb3Bfc3VzcGVuZF9zejsKK2V4dGVybiB1bnNpZ25lZCBpbnQgb21hcDE2MTBfY3B1X3N1c3BlbmRfc3o7CitleHRlcm4gdW5zaWduZWQgaW50IG9tYXAxNjEwX2lkbGVfbG9vcF9zdXNwZW5kX3N6OworCisjZGVmaW5lIEFSTV9TQVZFKHgpIGFybV9zbGVlcF9zYXZlW0FSTV9TTEVFUF9TQVZFXyMjeF0gPSBvbWFwX3JlYWRsKHgpCisjZGVmaW5lIEFSTV9SRVNUT1JFKHgpIG9tYXBfd3JpdGVsKChhcm1fc2xlZXBfc2F2ZVtBUk1fU0xFRVBfU0FWRV8jI3hdKSwgKHgpKQorI2RlZmluZSBBUk1fU0hPVyh4KSBhcm1fc2xlZXBfc2F2ZVtBUk1fU0xFRVBfU0FWRV8jI3hdCisKKyNkZWZpbmUgVUxQRF9TQVZFKHgpIHVscGRfc2xlZXBfc2F2ZVtVTFBEX1NMRUVQX1NBVkVfIyN4XSA9IG9tYXBfcmVhZHcoeCkKKyNkZWZpbmUgVUxQRF9SRVNUT1JFKHgpIG9tYXBfd3JpdGV3KCh1bHBkX3NsZWVwX3NhdmVbVUxQRF9TTEVFUF9TQVZFXyMjeF0pLCAoeCkpCisjZGVmaW5lIFVMUERfU0hPVyh4KSB1bHBkX3NsZWVwX3NhdmVbVUxQRF9TTEVFUF9TQVZFXyMjeF0KKworI2RlZmluZSBNUFVJMTUxMF9TQVZFKHgpIG1wdWkxNTEwX3NsZWVwX3NhdmVbTVBVSTE1MTBfU0xFRVBfU0FWRV8jI3hdID0gb21hcF9yZWFkbCh4KQorI2RlZmluZSBNUFVJMTUxMF9SRVNUT1JFKHgpIG9tYXBfd3JpdGVsKChtcHVpMTUxMF9zbGVlcF9zYXZlW01QVUkxNTEwX1NMRUVQX1NBVkVfIyN4XSksICh4KSkKKyNkZWZpbmUgTVBVSTE1MTBfU0hPVyh4KSBtcHVpMTUxMF9zbGVlcF9zYXZlW01QVUkxNTEwX1NMRUVQX1NBVkVfIyN4XQorCisjZGVmaW5lIE1QVUkxNjEwX1NBVkUoeCkgbXB1aTE2MTBfc2xlZXBfc2F2ZVtNUFVJMTYxMF9TTEVFUF9TQVZFXyMjeF0gPSBvbWFwX3JlYWRsKHgpCisjZGVmaW5lIE1QVUkxNjEwX1JFU1RPUkUoeCkgb21hcF93cml0ZWwoKG1wdWkxNjEwX3NsZWVwX3NhdmVbTVBVSTE2MTBfU0xFRVBfU0FWRV8jI3hdKSwgKHgpKQorI2RlZmluZSBNUFVJMTYxMF9TSE9XKHgpIG1wdWkxNjEwX3NsZWVwX3NhdmVbTVBVSTE2MTBfU0xFRVBfU0FWRV8jI3hdCisKKy8qCisgKiBMaXN0IG9mIGdsb2JhbCBPTUFQIHJlZ2lzdGVycyB0byBwcmVzZXJ2ZS4KKyAqIE1vcmUgb25lcyBsaWtlIENQIGFuZCBnZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXIgdmFsdWVzIGFyZSBwcmVzZXJ2ZWQKKyAqIHdpdGggdGhlIHN0YWNrIHBvaW50ZXIgaW4gc2xlZXAuUy4KKyAqLworCitlbnVtIGFybV9zYXZlX3N0YXRlIHsKKwlBUk1fU0xFRVBfU0FWRV9TVEFSVCA9IDAsCisJLyoKKwkgKiBNUFUgY29udHJvbCByZWdpc3RlcnMgMzIgYml0cworCSAqLworCUFSTV9TTEVFUF9TQVZFX0FSTV9DS0NUTCwKKwlBUk1fU0xFRVBfU0FWRV9BUk1fSURMRUNUMSwKKwlBUk1fU0xFRVBfU0FWRV9BUk1fSURMRUNUMiwKKwlBUk1fU0xFRVBfU0FWRV9BUk1fRVdVUENULAorCUFSTV9TTEVFUF9TQVZFX0FSTV9SU1RDVDEsCisJQVJNX1NMRUVQX1NBVkVfQVJNX1JTVENUMiwKKwlBUk1fU0xFRVBfU0FWRV9BUk1fU1lTU1QsCisJQVJNX1NMRUVQX1NBVkVfU0laRQorfTsKKworZW51bSB1bHBkX3NhdmVfc3RhdGUgeworCVVMUERfU0xFRVBfU0FWRV9TVEFSVCA9IDAsCisJLyoKKwkgKiBVTFBEIHJlZ2lzdGVycyAxNiBiaXRzCisJICovCisJVUxQRF9TTEVFUF9TQVZFX1VMUERfSVRfU1RBVFVTLAorCVVMUERfU0xFRVBfU0FWRV9VTFBEX0NMT0NLX0NUUkwsCisJVUxQRF9TTEVFUF9TQVZFX1VMUERfU09GVF9SRVEsCisJVUxQRF9TTEVFUF9TQVZFX1VMUERfU1RBVFVTX1JFUSwKKwlVTFBEX1NMRUVQX1NBVkVfVUxQRF9EUExMX0NUUkwsCisJVUxQRF9TTEVFUF9TQVZFX1VMUERfUE9XRVJfQ1RSTCwKKwlVTFBEX1NMRUVQX1NBVkVfU0laRQorfTsKKworZW51bSBtcHVpMTUxMF9zYXZlX3N0YXRlIHsKKwlNUFVJMTUxMF9TTEVFUF9TQVZFX1NUQVJUID0gMCwKKwkvKgorCSAqIE1QVUkgcmVnaXN0ZXJzIDMyIGJpdHMKKwkgKi8KKwlNUFVJMTUxMF9TTEVFUF9TQVZFX01QVUlfQ1RSTCwKKwlNUFVJMTUxMF9TTEVFUF9TQVZFX01QVUlfRFNQX0JPT1RfQ09ORklHLAorCU1QVUkxNTEwX1NMRUVQX1NBVkVfTVBVSV9EU1BfQVBJX0NPTkZJRywKKwlNUFVJMTUxMF9TTEVFUF9TQVZFX01QVUlfRFNQX1NUQVRVUywKKwlNUFVJMTUxMF9TTEVFUF9TQVZFX0VNSUZGX1NEUkFNX0NPTkZJRywKKwlNUFVJMTUxMF9TTEVFUF9TQVZFX0VNSUZTX0NPTkZJRywKKwlNUFVJMTUxMF9TTEVFUF9TQVZFX09NQVBfSUgxX01JUiwKKwlNUFVJMTUxMF9TTEVFUF9TQVZFX09NQVBfSUgyX01JUiwKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNTEwKQorCU1QVUkxNTEwX1NMRUVQX1NBVkVfU0laRQorI2Vsc2UKKwlNUFVJMTUxMF9TTEVFUF9TQVZFX1NJWkUgPSAwCisjZW5kaWYKK307CisKK2VudW0gbXB1aTE2MTBfc2F2ZV9zdGF0ZSB7CisJTVBVSTE2MTBfU0xFRVBfU0FWRV9TVEFSVCA9IDAsCisJLyoKKwkgKiBNUFVJIHJlZ2lzdGVycyAzMiBiaXRzCisJICovCisJTVBVSTE2MTBfU0xFRVBfU0FWRV9NUFVJX0NUUkwsCisJTVBVSTE2MTBfU0xFRVBfU0FWRV9NUFVJX0RTUF9CT09UX0NPTkZJRywKKwlNUFVJMTYxMF9TTEVFUF9TQVZFX01QVUlfRFNQX0FQSV9DT05GSUcsCisJTVBVSTE2MTBfU0xFRVBfU0FWRV9NUFVJX0RTUF9TVEFUVVMsCisJTVBVSTE2MTBfU0xFRVBfU0FWRV9FTUlGRl9TRFJBTV9DT05GSUcsCisJTVBVSTE2MTBfU0xFRVBfU0FWRV9FTUlGU19DT05GSUcsCisJTVBVSTE2MTBfU0xFRVBfU0FWRV9PTUFQX0lIMV9NSVIsCisJTVBVSTE2MTBfU0xFRVBfU0FWRV9PTUFQX0lIMl8wX01JUiwKKwlNUFVJMTYxMF9TTEVFUF9TQVZFX09NQVBfSUgyXzFfTUlSLAorCU1QVUkxNjEwX1NMRUVQX1NBVkVfT01BUF9JSDJfMl9NSVIsCisJTVBVSTE2MTBfU0xFRVBfU0FWRV9PTUFQX0lIMl8zX01JUiwKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNlhYKQorCU1QVUkxNjEwX1NMRUVQX1NBVkVfU0laRQorI2Vsc2UKKwlNUFVJMTYxMF9TTEVFUF9TQVZFX1NJWkUgPSAwCisjZW5kaWYKK307CisKKyNlbmRpZiAvKiBBU1NFTUJMRVIgKi8KKyNlbmRpZiAvKiBfX0FTTV9BUkNIX09NQVBfUE1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvc3lzdGVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdhMmM0OAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvc3lzdGVtLmgKQEAgLTAsMCArMSwyMCBAQAorLyoKKyAqIENvcGllZCBmcm9tIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9zeXN0ZW0uaAorICogQ29weXJpZ2h0IChjKSAxOTk5IE5pY29sYXMgUGl0cmUgPG5pY29AY2FtLm9yZz4KKyAqLworI2lmbmRlZiBfX0FTTV9BUkNIX1NZU1RFTV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfU1lTVEVNX0gKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgorCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9pZGxlKHZvaWQpCit7CisJY3B1X2RvX2lkbGUoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlKQoreworCW9tYXBfd3JpdGV3KDEsIEFSTV9SU1RDVDEpOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvdGMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvdGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGVkMjE4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC90Yy5oCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC90Yy5oCisgKgorICogT01BUCBUcmFmZmljIENvbnRyb2xsZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgTm9raWEgQ29ycG9yYXRpb24KKyAqIEF1dGhvcjogSW1yZSBEZWFrIDxpbXJlLmRlYWtAbm9raWEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9UQ19ICisjZGVmaW5lIF9fQVNNX0FSQ0hfVENfSAorCisjZGVmaW5lIFRDTUlGX0JBU0UJCTB4ZmZmZWNjMDAKKyNkZWZpbmUgT01BUF9UQ19PQ1BUMV9QUklPUgkoVENNSUZfQkFTRSArIDB4MDApCisjZGVmaW5lIE9NQVBfVENfRU1JRlNfUFJJT1IJKFRDTUlGX0JBU0UgKyAweDA0KQorI2RlZmluZSBPTUFQX1RDX0VNSUZGX1BSSU9SCShUQ01JRl9CQVNFICsgMHgwOCkKKyNkZWZpbmUgRU1JRlNfQ09ORklHCQkoVENNSUZfQkFTRSArIDB4MGMpCisjZGVmaW5lIEVNSUZTX0NTMF9DT05GSUcJKFRDTUlGX0JBU0UgKyAweDEwKQorI2RlZmluZSBFTUlGU19DUzFfQ09ORklHCShUQ01JRl9CQVNFICsgMHgxNCkKKyNkZWZpbmUgRU1JRlNfQ1MyX0NPTkZJRwkoVENNSUZfQkFTRSArIDB4MTgpCisjZGVmaW5lIEVNSUZTX0NTM19DT05GSUcJKFRDTUlGX0JBU0UgKyAweDFjKQorI2RlZmluZSBFTUlGRl9TRFJBTV9DT05GSUcJKFRDTUlGX0JBU0UgKyAweDIwKQorI2RlZmluZSBFTUlGRl9NUlMJCShUQ01JRl9CQVNFICsgMHgyNCkKKyNkZWZpbmUgVENfVElNRU9VVDEJCShUQ01JRl9CQVNFICsgMHgyOCkKKyNkZWZpbmUgVENfVElNRU9VVDIJCShUQ01JRl9CQVNFICsgMHgyYykKKyNkZWZpbmUgVENfVElNRU9VVDMJCShUQ01JRl9CQVNFICsgMHgzMCkKKyNkZWZpbmUgVENfRU5ESUFOSVNNCQkoVENNSUZfQkFTRSArIDB4MzQpCisjZGVmaW5lIEVNSUZGX1NEUkFNX0NPTkZJR18yCShUQ01JRl9CQVNFICsgMHgzYykKKyNkZWZpbmUgRU1JRl9DRkdfRFlOQU1JQ19XUwkoVENNSUZfQkFTRSArIDB4NDApCisjZGVmaW5lIEVNSUZTX0FDUzAJCShUQ01JRl9CQVNFICsgMHg1MCkKKyNkZWZpbmUgRU1JRlNfQUNTMQkJKFRDTUlGX0JBU0UgKyAweDU0KQorI2RlZmluZSBFTUlGU19BQ1MyCQkoVENNSUZfQkFTRSArIDB4NTgpCisjZGVmaW5lIEVNSUZTX0FDUzMJCShUQ01JRl9CQVNFICsgMHg1YykKKyNkZWZpbmUgT01BUF9UQ19PQ1BUMl9QUklPUgkoVENNSUZfQkFTRSArIDB4ZDApCisKKy8qIGV4dGVybmFsIEVNSUZTIGNoaXBzZWxlY3QgcmVnaW9ucyAqLworI2RlZmluZQlPTUFQX0NTMF9QSFlTCQkweDAwMDAwMDAwCisjZGVmaW5lCU9NQVBfQ1MwX1NJWkUJCVNaXzY0TQorCisjZGVmaW5lCU9NQVBfQ1MxX1BIWVMJCTB4MDQwMDAwMDAKKyNkZWZpbmUJT01BUF9DUzFfU0laRQkJU1pfNjRNCisKKyNkZWZpbmUJT01BUF9DUzFBX1BIWVMJCU9NQVBfQ1MxX1BIWVMKKyNkZWZpbmUJT01BUF9DUzFBX1NJWkUJCVNaXzMyTQorCisjZGVmaW5lCU9NQVBfQ1MxQl9QSFlTCQkoT01BUF9DUzFBX1BIWVMgKyBPTUFQX0NTMUFfU0laRSkKKyNkZWZpbmUJT01BUF9DUzFCX1NJWkUJCVNaXzMyTQorCisjZGVmaW5lCU9NQVBfQ1MyX1BIWVMJCTB4MDgwMDAwMDAKKyNkZWZpbmUJT01BUF9DUzJfU0laRQkJU1pfNjRNCisKKyNkZWZpbmUJT01BUF9DUzJBX1BIWVMJCU9NQVBfQ1MyX1BIWVMKKyNkZWZpbmUJT01BUF9DUzJBX1NJWkUJCVNaXzMyTQorCisjZGVmaW5lCU9NQVBfQ1MyQl9QSFlTCQkoT01BUF9DUzJBX1BIWVMgKyBPTUFQX0NTMkFfU0laRSkKKyNkZWZpbmUJT01BUF9DUzJCX1NJWkUJCVNaXzMyTQorCisjZGVmaW5lCU9NQVBfQ1MzX1BIWVMJCTB4MGMwMDAwMDAKKyNkZWZpbmUJT01BUF9DUzNfU0laRQkJU1pfNjRNCisKKyNpZm5kZWYJX19BU1NFTUJMRVJfXworCisvKiBFTUlGIFNsb3cgSW50ZXJmYWNlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJT01BUF9FTUlGU19DT05GSUdfUkVHCV9fUkVHMzIoRU1JRlNfQ09ORklHKQorCisjZGVmaW5lIE9NQVBfRU1JRlNfQ09ORklHX0ZSCQkoMSA8PCA0KQorI2RlZmluZSBPTUFQX0VNSUZTX0NPTkZJR19QREUJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVBfRU1JRlNfQ09ORklHX1BXRF9FTgkoMSA8PCAyKQorI2RlZmluZSBPTUFQX0VNSUZTX0NPTkZJR19CTQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUF9FTUlGU19DT05GSUdfV1AJCSgxIDw8IDApCisKKyNkZWZpbmUgRU1JRlNfQ0NTKG4pCQlfX1JFRzMyKEVNSUZTX0NTMF9DT05GSUcgKyAoNCAqIChuKSkpCisjZGVmaW5lIEVNSUZTX0FDUyhuKQkJX19SRUczMihFTUlGU19BQ1MwICsgKDQgKiAobikpKQorCisvKiBBbG1vc3QgYWxsIGRvY3VtZW50YXRpb24gZm9yIGNoaXAgYW5kIGJvYXJkIG1lbW9yeSBtYXBzIGFzc3VtZXMKKyAqIEJNIGlzIGNsZWFyLiAgTW9zdCBkZXZlbCBib2FyZHMgaGF2ZSBhIHN3aXRjaCB0byBjb250cm9sIGJvb3RpbmcKKyAqIGZyb20gTk9SIGZsYXNoICh1c2luZyBleHRlcm5hbCBjaGlwc2VsZWN0IDMpIHJhdGhlciB0aGFuIG1hc2sgUk9NLAorICogd2hpY2ggdXNlcyBCTSB0byBpbnRlcmNoYW5nZSB0aGUgcGh5c2ljYWwgQ1MwIGFuZCBDUzMgYWRkcmVzc2VzLgorICovCitzdGF0aWMgaW5saW5lIHUzMiBvbWFwX2NzMF9waHlzKHZvaWQpCit7CisJcmV0dXJuIChPTUFQX0VNSUZTX0NPTkZJR19SRUcgJiBPTUFQX0VNSUZTX0NPTkZJR19CTSkKKwkJCT8gIE9NQVBfQ1MzX1BIWVMgOiAwOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBvbWFwX2NzM19waHlzKHZvaWQpCit7CisJcmV0dXJuIChPTUFQX0VNSUZTX0NPTkZJR19SRUcgJiBPTUFQX0VNSUZTX0NPTkZJR19CTSkKKwkJCT8gMCA6IE9NQVBfQ1MzX1BIWVM7Cit9CisKKyNlbmRpZgkvKiBfX0FTU0VNQkxFUl9fICovCisKKyNlbmRpZgkvKiBfX0FTTV9BUkNIX1RDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvdGltZXguaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvdGltZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjFkZGI0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC90aW1leC5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3RpbWV4LmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgUmlkZ2VSdW4sIEluYy4KKyAqIEF1dGhvcjogIEdyZWcgTG9ubm9uIDxnbG9ubm9uQHJpZGdlcnVuLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisgKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4KKyAqIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKKyAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSAgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX0FTTV9BUkNIX09NQVBfVElNRVhfSCkKKyNkZWZpbmUgX19BU01fQVJDSF9PTUFQX1RJTUVYX0gKKworI2RlZmluZSBDTE9DS19USUNLX1JBVEUJCShIWiAqIDEwMDAwMFVMKQorCisjZW5kaWYgLyogX19BU01fQVJDSF9PTUFQX1RJTUVYX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvdHBzNjUwMTAuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvdHBzNjUwMTAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjk3YmIyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC90cHM2NTAxMC5oCkBAIC0wLDAgKzEsODAgQEAKKy8qIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvdHBzNjUwMTAuaAorICoKKyAqIEZ1bmN0aW9ucyB0byBhY2Nlc3MgVFBTNjUwMTAgcG93ZXIgbWFuYWdlbWVudCBkZXZpY2UuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IERpcmsgQmVobWUgPGRpcmsuYmVobWVAZGUuYm9zY2guY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKyAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTgorICogTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX1RQUzY1MDEwX0gKKyNkZWZpbmUgX19BU01fQVJDSF9UUFM2NTAxMF9ICisKKy8qCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBNYWNyb3MgdXNlZCBieSBleHBvcnRlZCBmdW5jdGlvbnMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjZGVmaW5lIExFRDEgIDEKKyNkZWZpbmUgTEVEMiAgMgorI2RlZmluZSBPRkYgICAwCisjZGVmaW5lIE9OICAgIDEKKyNkZWZpbmUgQkxJTksgMgorI2RlZmluZSBHUElPMSAxCisjZGVmaW5lIEdQSU8yIDIKKyNkZWZpbmUgR1BJTzMgMworI2RlZmluZSBHUElPNCA0CisjZGVmaW5lIExPVyAgIDAKKyNkZWZpbmUgSElHSCAgMQorCisvKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRXhwb3J0ZWQgZnVuY3Rpb25zCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyogRHJhdyBmcm9tIFZCVVM6CisgKiAgIDAgbUEgLS0gRE9OJ1QgRFJBVyAobWlnaHQgc3VwcGx5IHBvd2VyIGluc3RlYWQpCisgKiAxMDAgbUEgLS0gdXNiIHVuaXQgbG9hZCAoc2xvd2VzdCBjaGFyZ2UgcmF0ZSkKKyAqIDUwMCBtQSAtLSB1c2IgaGlnaCBwb3dlciAoZmFzdCBiYXR0ZXJ5IGNoYXJnZSkKKyAqLworZXh0ZXJuIGludCB0cHM2NTAxMF9zZXRfdmJ1c19kcmF3KHVuc2lnbmVkIG1BKTsKKworLyogdHBzNjUwMTBfc2V0X2dwaW9fb3V0X3ZhbHVlIHBhcmFtZXRlcjoKKyAqIGdwaW86ICBHUElPMSwgR1BJTzIsIEdQSU8zIG9yIEdQSU80CisgKiB2YWx1ZTogTE9XIG9yIEhJR0gKKyAqLworZXh0ZXJuIGludCB0cHM2NTAxMF9zZXRfZ3Bpb19vdXRfdmFsdWUodW5zaWduZWQgZ3BpbywgdW5zaWduZWQgdmFsdWUpOworCisvKiB0cHM2NTAxMF9zZXRfbGVkIHBhcmFtZXRlcjoKKyAqIGxlZDogIExFRDEgb3IgTEVEMgorICogbW9kZTogT04sIE9GRiBvciBCTElOSworICovCitleHRlcm4gaW50IHRwczY1MDEwX3NldF9sZWQodW5zaWduZWQgbGVkLCB1bnNpZ25lZCBtb2RlKTsKKworLyogdHBzNjUwMTBfc2V0X2xvd19wd3IgcGFyYW1ldGVyOgorICogbW9kZTogT04gb3IgT0ZGCisgKi8KK2V4dGVybiBpbnQgdHBzNjUwMTBfc2V0X2xvd19wd3IodW5zaWduZWQgbW9kZSk7CisKKyNlbmRpZiAvKiAgX19BU01fQVJDSF9UUFM2NTAxMF9IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvdW5jb21wcmVzcy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC91bmNvbXByZXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U2NDBhYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvdW5jb21wcmVzcy5oCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3VuY29tcHJlc3MuaAorICoKKyAqIFNlcmlhbCBwb3J0IHN0dWJzIGZvciBrZXJuZWwgZGVjb21wcmVzcyBzdGF0dXMgbWVzc2FnZXMKKyAqCisgKiBJbml0aWFsbHkgYmFzZWQgb246CisgKiBsaW51eC0yLjQuMTUtcm1rMS1kc3BsaW51eDEuNi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwMTUxMC91bmNvbXByZXNzLmgKKyAqIENvcHlyaWdodCAoQykgMjAwMCBSaWRnZVJ1biwgSW5jLgorICogQXV0aG9yOiBHcmVnIExvbm5vbiA8Z2xvbm5vbkByaWRnZXJ1bi5jb20+CisgKgorICogUmV3cml0dGVuIGJ5OgorICogQXV0aG9yOiA8c291cmNlQG12aXN0YS5jb20+CisgKiAyMDA0IChjKSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55CisgKiBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfcmVnLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KKwordW5zaWduZWQgaW50IHN5c3RlbV9yZXY7CisKKyNkZWZpbmUgVUFSVF9PTUFQX01EUjEJCTB4MDgJLyogbW9kZSBkZWZpbml0aW9uIHJlZ2lzdGVyICovCisjZGVmaW5lIE9NQVBfSURfNzMwCQkweDM1NUYKKyNkZWZpbmUgSURfTUFTSwkJCTB4N2ZmZgorI2RlZmluZSBjaGVja19wb3J0KGJhc2UsIHNoaWZ0KSAoKGJhc2VbVUFSVF9PTUFQX01EUjEgPDwgc2hpZnRdICYgNykgPT0gMCkKKyNkZWZpbmUgb21hcF9nZXRfaWQoKSAoKCoodm9sYXRpbGUgdW5zaWduZWQgaW50ICopKDB4ZmZmZWQ0MDQpKSA+PiAxMikgJiBJRF9NQVNLCisKK3N0YXRpYyB2b2lkCitwdXRzdHIoY29uc3QgY2hhciAqcykKK3sKKwl2b2xhdGlsZSB1OCAqIHVhcnQgPSAwOworCWludCBzaGlmdDsKKworI2lmZGVmCUNPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQzCisJdWFydCA9ICh2b2xhdGlsZSB1OCAqKShPTUFQX1VBUlQzX0JBU0UpOworI2VsaWYJQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDIKKwl1YXJ0ID0gKHZvbGF0aWxlIHU4ICopKE9NQVBfVUFSVDJfQkFTRSk7CisjZWxzZQorCXVhcnQgPSAodm9sYXRpbGUgdTggKikoT01BUF9VQVJUMV9CQVNFKTsKKyNlbmRpZgorCisJLyogRGV0ZXJtaW5lIHdoaWNoIHNlcmlhbCBwb3J0IHRvIHVzZSAqLworCWRvIHsKKwkJLyogTU1VIGlzIG5vdCBvbiwgc28gY3B1X2lzX29tYXBYWFhYKCkgd29uJ3Qgd29yayBoZXJlICovCisJCXVuc2lnbmVkIGludCBvbWFwX2lkID0gb21hcF9nZXRfaWQoKTsKKworCQlpZiAob21hcF9pZCA9PSBPTUFQX0lEXzczMCkKKwkJCXNoaWZ0ID0gMDsKKwkJZWxzZQorCQkJc2hpZnQgPSAyOworCisJCWlmIChjaGVja19wb3J0KHVhcnQsIHNoaWZ0KSkKKwkJCWJyZWFrOworCQkvKiBTaWxlbnQgYm9vdCBpZiBubyBzZXJpYWwgcG9ydHMgYXJlIGVuYWJsZWQuICovCisJCXJldHVybjsKKwl9IHdoaWxlICgwKTsKKworCS8qCisJICogTm93LCB4bWl0IGVhY2ggY2hhcmFjdGVyCisJICovCisJd2hpbGUgKCpzKSB7CisJCXdoaWxlICghKHVhcnRbVUFSVF9MU1IgPDwgc2hpZnRdICYgVUFSVF9MU1JfVEhSRSkpCisJCQliYXJyaWVyKCk7CisJCXVhcnRbVUFSVF9UWCA8PCBzaGlmdF0gPSAqczsKKwkJaWYgKCpzKysgPT0gJ1xuJykgeworCQkJd2hpbGUgKCEodWFydFtVQVJUX0xTUiA8PCBzaGlmdF0gJiBVQVJUX0xTUl9USFJFKSkKKwkJCQliYXJyaWVyKCk7CisJCQl1YXJ0W1VBUlRfVFggPDwgc2hpZnRdID0gJ1xyJzsKKwkJfQorCX0KK30KKworLyoKKyAqIG5vdGhpbmcgdG8gZG8KKyAqLworI2RlZmluZSBhcmNoX2RlY29tcF9zZXR1cCgpCisjZGVmaW5lIGFyY2hfZGVjb21wX3dkb2coKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC91c2IuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvdXNiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQzOGM2YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvdXNiLmgKQEAgLTAsMCArMSwxMDggQEAKKy8vIGluY2x1ZGUvYXNtLWFybS9tYWNoLW9tYXAvdXNiLmgKKworI2lmbmRlZglfX0FTTV9BUkNIX09NQVBfVVNCX0gKKyNkZWZpbmUJX19BU01fQVJDSF9PTUFQX1VTQl9ICisKKyNpbmNsdWRlIDxhc20vYXJjaC9ib2FyZC5oPgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZGVmaW5lIE9UR19CQVNFCQkJMHhmZmZiMDQwMAorI2RlZmluZSBVRENfQkFTRQkJCTB4ZmZmYjQwMDAKKyNkZWZpbmUgT01BUF9PSENJX0JBU0UJCQkweGZmZmJhMDAwCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBPVEcgYW5kIHRyYW5zY2VpdmVyIHJlZ2lzdGVycywgZm9yIE9NQVBzIHN0YXJ0aW5nIHdpdGggQVJNOTI2CisgKi8KKyNkZWZpbmUgT1RHX1JFRzMyKG9mZnNldCkJCV9fUkVHMzIoT1RHX0JBU0UgKyAob2Zmc2V0KSkKKyNkZWZpbmUgT1RHX1JFRzE2KG9mZnNldCkJCV9fUkVHMTYoT1RHX0JBU0UgKyAob2Zmc2V0KSkKKworI2RlZmluZSBPVEdfUkVWX1JFRwkJCU9UR19SRUczMigweDAwKQorI2RlZmluZSBPVEdfU1lTQ09OXzFfUkVHCQlPVEdfUkVHMzIoMHgwNCkKKyMJZGVmaW5lCSBVU0IyX1RSWF9NT0RFKHcpCSgoKHcpPj4yNCkmMHgwNykKKyMJZGVmaW5lCSBVU0IxX1RSWF9NT0RFKHcpCSgoKHcpPj4yMCkmMHgwNykKKyMJZGVmaW5lCSBVU0IwX1RSWF9NT0RFKHcpCSgoKHcpPj4xNikmMHgwNykKKyMJZGVmaW5lCSBPVEdfSURMRV9FTgkJKDEgPDwgMTUpCisjCWRlZmluZQkgSFNUX0lETEVfRU4JCSgxIDw8IDE0KQorIwlkZWZpbmUJIERFVl9JRExFX0VOCQkoMSA8PCAxMykKKyMJZGVmaW5lCSBPVEdfUkVTRVRfRE9ORQkJKDEgPDwgMikKKyNkZWZpbmUgT1RHX1NZU0NPTl8yX1JFRwkJT1RHX1JFRzMyKDB4MDgpCisjCWRlZmluZQkgT1RHX0VOCQkJKDEgPDwgMzEpCisjCWRlZmluZQkgVVNCWF9TWU5DSFJPCQkoMSA8PCAzMCkKKyMJZGVmaW5lCSBPVEdfTVNUMTYJCSgxIDw8IDI5KQorIwlkZWZpbmUJIFNSUF9HUERBVEEJCSgxIDw8IDI4KQorIwlkZWZpbmUJIFNSUF9HUERWQlVTCQkoMSA8PCAyNykKKyMJZGVmaW5lCSBTUlBfR1BVVkJVUyh3KQkJKCgodyk+PjI0KSYweDA3KQorIwlkZWZpbmUJIEFfV0FJVF9WUklTRSh3KQkoKCh3KT4+MjApJjB4MDcpCisjCWRlZmluZQkgQl9BU0VfQlJTVCh3KQkJKCgodyk+PjE2KSYweDA3KQorIwlkZWZpbmUJIFNSUF9EUFcJCSgxIDw8IDE0KQorIwlkZWZpbmUJIFNSUF9EQVRBCQkoMSA8PCAxMykKKyMJZGVmaW5lCSBTUlBfVkJVUwkJKDEgPDwgMTIpCisjCWRlZmluZQkgT1RHX1BBREVOCQkoMSA8PCAxMCkKKyMJZGVmaW5lCSBITUNfUEFERU4JCSgxIDw8IDkpCisjCWRlZmluZQkgVUhPU1RfRU4JCSgxIDw8IDgpCisjCWRlZmluZQkgSE1DX1RMTFNQRUVECQkoMSA8PCA3KQorIwlkZWZpbmUJIEhNQ19UTExBVFRBQ0gJCSgxIDw8IDYpCisjCWRlZmluZQkgT1RHX0hNQyh3KQkJKCgodyk+PjApJjB4M2YpCisjZGVmaW5lIE9UR19DVFJMX1JFRwkJCU9UR19SRUczMigweDBjKQorIwlkZWZpbmUJIE9UR19BU0VTU1ZMRAkJKDEgPDwgMjApCisjCWRlZmluZQkgT1RHX0JTRVNTRU5ECQkoMSA8PCAxOSkKKyMJZGVmaW5lCSBPVEdfQlNFU1NWTEQJCSgxIDw8IDE4KQorIwlkZWZpbmUJIE9UR19WQlVTVkxECQkoMSA8PCAxNykKKyMJZGVmaW5lCSBPVEdfSUQJCQkoMSA8PCAxNikKKyMJZGVmaW5lCSBPVEdfRFJJVkVSX1NFTAkJKDEgPDwgMTUpCisjCWRlZmluZQkgT1RHX0FfU0VUQl9ITlBFTgkoMSA8PCAxMikKKyMJZGVmaW5lCSBPVEdfQV9CVVNSRVEJCSgxIDw8IDExKQorIwlkZWZpbmUJIE9UR19CX0hOUEVOCQkoMSA8PCA5KQorIwlkZWZpbmUJIE9UR19CX0JVU1JFUQkJKDEgPDwgOCkKKyMJZGVmaW5lCSBPVEdfQlVTRFJPUAkJKDEgPDwgNykKKyMJZGVmaW5lCSBPVEdfUFVMTERPV04JCSgxIDw8IDUpCisjCWRlZmluZQkgT1RHX1BVTExVUAkJKDEgPDwgNCkKKyMJZGVmaW5lCSBPVEdfRFJWX1ZCVVMJCSgxIDw8IDMpCisjCWRlZmluZQkgT1RHX1BEX1ZCVVMJCSgxIDw8IDIpCisjCWRlZmluZQkgT1RHX1BVX1ZCVVMJCSgxIDw8IDEpCisjCWRlZmluZQkgT1RHX1BVX0lECQkoMSA8PCAwKQorI2RlZmluZSBPVEdfSVJRX0VOX1JFRwkJCU9UR19SRUcxNigweDEwKQorIwlkZWZpbmUJIERSSVZFUl9TV0lUQ0gJCSgxIDw8IDE1KQorIwlkZWZpbmUJIEFfVkJVU19FUlIJCSgxIDw8IDEzKQorIwlkZWZpbmUJIEFfUkVRX1RNUk9VVAkJKDEgPDwgMTIpCisjCWRlZmluZQkgQV9TUlBfREVURUNUCQkoMSA8PCAxMSkKKyMJZGVmaW5lCSBCX0hOUF9GQUlMCQkoMSA8PCAxMCkKKyMJZGVmaW5lCSBCX1NSUF9UTVJPVVQJCSgxIDw8IDkpCisjCWRlZmluZQkgQl9TUlBfRE9ORQkJKDEgPDwgOCkKKyMJZGVmaW5lCSBCX1NSUF9TVEFSVEVECQkoMSA8PCA3KQorIwlkZWZpbmUJIE9QUlRfQ0hHCQkoMSA8PCAwKQorI2RlZmluZSBPVEdfSVJRX1NSQ19SRUcJCQlPVEdfUkVHMTYoMHgxNCkKKwkvLyBzYW1lIGJpdHMgYXMgaW4gSVJRX0VOCisjZGVmaW5lIE9UR19PVVRDVFJMX1JFRwkJCU9UR19SRUcxNigweDE4KQorIwlkZWZpbmUJIE9UR1ZQRAkJCSgxIDw8IDE0KQorIwlkZWZpbmUJIE9UR1ZQVQkJCSgxIDw8IDEzKQorIwlkZWZpbmUJIE9UR1BVSUQJCSgxIDw8IDEyKQorIwlkZWZpbmUJIFVTQjJWRFIJCSgxIDw8IDEwKQorIwlkZWZpbmUJIFVTQjJQREVOCQkoMSA8PCA5KQorIwlkZWZpbmUJIFVTQjJQVUVOCQkoMSA8PCA4KQorIwlkZWZpbmUJIFVTQjFWRFIJCSgxIDw8IDYpCisjCWRlZmluZQkgVVNCMVBERU4JCSgxIDw8IDUpCisjCWRlZmluZQkgVVNCMVBVRU4JCSgxIDw8IDQpCisjCWRlZmluZQkgVVNCMFZEUgkJKDEgPDwgMikKKyMJZGVmaW5lCSBVU0IwUERFTgkJKDEgPDwgMSkKKyMJZGVmaW5lCSBVU0IwUFVFTgkJKDEgPDwgMCkKKyNkZWZpbmUgT1RHX1RFU1RfUkVHCQkJT1RHX1JFRzE2KDB4MjApCisjZGVmaW5lIE9UR19WRU5ET1JfQ09ERV9SRUcJCU9UR19SRUczMigweGZjKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZGVmaW5lCVVTQl9UUkFOU0NFSVZFUl9DVFJMX1JFRwlfX1JFRzMyKDB4ZmZmZTEwMDAgKyAweDAwNjQpCisjCWRlZmluZQlDT05GX1VTQjJfVU5JX1IJCSgxIDw8IDgpCisjCWRlZmluZQlDT05GX1VTQjFfVU5JX1IJCSgxIDw8IDcpCisjCWRlZmluZQlDT05GX1VTQl9QT1JUMF9SKHgpCSgoKHgpPj40KSYweDcpCisjCWRlZmluZQlDT05GX1VTQjBfSVNPTEFURV9SCSgxIDw8IDMpCisjCWRlZmluZQlDT05GX1VTQl9QV1JETl9ETV9SCSgxIDw8IDIpCisjCWRlZmluZQlDT05GX1VTQl9QV1JETl9EUF9SCSgxIDw8IDEpCisKKworCisKKyNlbmRpZgkvKiBfX0FTTV9BUkNIX09NQVBfVVNCX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvdm1hbGxvYy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC92bWFsbG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZhODM1OAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvdm1hbGxvYy5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC92bWFsbG9jLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwIFJ1c3NlbGwgS2luZy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworLyoKKyAqIEp1c3QgYW55IGFyYml0cmFyeSBvZmZzZXQgdG8gdGhlIHN0YXJ0IG9mIHRoZSB2bWFsbG9jIFZNIGFyZWE6IHRoZQorICogY3VycmVudCA4TUIgdmFsdWUganVzdCBtZWFucyB0aGF0IHRoZXJlIHdpbGwgYmUgYSA4TUIgImhvbGUiIGFmdGVyIHRoZQorICogcGh5c2ljYWwgbWVtb3J5IHVudGlsIHRoZSBrZXJuZWwgdmlydHVhbCBtZW1vcnkgc3RhcnRzLiAgVGhhdCBtZWFucyB0aGF0CisgKiBhbnkgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgd2lsbCBob3BlZnVsbHkgYmUgY2F1Z2h0LgorICogVGhlIHZtYWxsb2MoKSByb3V0aW5lcyBsZWF2ZXMgYSBob2xlIG9mIDRrQiBiZXR3ZWVuIGVhY2ggdm1hbGxvY2VkCisgKiBhcmVhIGZvciB0aGUgc2FtZSByZWFzb24uIDspCisgKi8KKyNkZWZpbmUgVk1BTExPQ19PRkZTRVQJICAoOCoxMDI0KjEwMjQpCisjZGVmaW5lIFZNQUxMT0NfU1RBUlQJICAoKCh1bnNpZ25lZCBsb25nKWhpZ2hfbWVtb3J5ICsgVk1BTExPQ19PRkZTRVQpICYgfihWTUFMTE9DX09GRlNFVC0xKSkKKyNkZWZpbmUgVk1BTExPQ19WTUFERFIoeCkgKCh1bnNpZ25lZCBsb25nKSh4KSkKKyNkZWZpbmUgVk1BTExPQ19FTkQJICAoUEFHRV9PRkZTRVQgKyAweDEwMDAwMDAwKQorCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvYXVkaW8uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9hdWRpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwOTc2ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvYXVkaW8uaApAQCAtMCwwICsxLDE2IEBACisjaWZuZGVmIF9fQVNNX0FSQ0hfQVVESU9fSF9fCisjZGVmaW5lIF9fQVNNX0FSQ0hfQVVESU9fSF9fCisKKyNpbmNsdWRlIDxzb3VuZC9kcml2ZXIuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisKK3R5cGVkZWYgc3RydWN0IHsKKwlpbnQgKCpzdGFydHVwKShzbmRfcGNtX3N1YnN0cmVhbV90ICosIHZvaWQgKik7CisJdm9pZCAoKnNodXRkb3duKShzbmRfcGNtX3N1YnN0cmVhbV90ICosIHZvaWQgKik7CisJdm9pZCAoKnN1c3BlbmQpKHZvaWQgKik7CisJdm9pZCAoKnJlc3VtZSkodm9pZCAqKTsKKwl2b2lkICpwcml2OworfSBweGEyeHhfYXVkaW9fb3BzX3Q7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL2JpdGZpZWxkLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvYml0ZmllbGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWYwZTMzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL2JpdGZpZWxkLmgKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKglGSUxFICAgIAliaXRmaWVsZC5oCisgKgorICoJVmVyc2lvbiAJMS4xCisgKglBdXRob3IgIAlDb3B5cmlnaHQgKGMpIE1hcmMgQS4gVmlyZWRheiwgMTk5OAorICoJICAgICAgICAJREVDIFdlc3Rlcm4gUmVzZWFyY2ggTGFib3JhdG9yeSwgUGFsbyBBbHRvLCBDQQorICoJRGF0ZSAgICAJQXByaWwgMTk5OCAoQXByaWwgMTk5NykKKyAqCVN5c3RlbSAgCUFkdmFuY2VkIFJJU0MgTWFjaGluZSAoQVJNKQorICoJTGFuZ3VhZ2UJQyBvciBBUk0gQXNzZW1ibHkKKyAqCVB1cnBvc2UgCURlZmluaXRpb24gb2YgbWFjcm9zIHRvIG9wZXJhdGUgb24gYml0IGZpZWxkcy4KKyAqLworCisKKworI2lmbmRlZiBfX0JJVEZJRUxEX0gKKyNkZWZpbmUgX19CSVRGSUVMRF9ICisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjZGVmaW5lIFVEYXRhKERhdGEpCSgodW5zaWduZWQgbG9uZykgKERhdGEpKQorI2Vsc2UKKyNkZWZpbmUgVURhdGEoRGF0YSkJKERhdGEpCisjZW5kaWYKKworCisvKgorICogTUFDUk86IEZsZAorICoKKyAqIFB1cnBvc2UKKyAqICAgIFRoZSBtYWNybyAiRmxkIiBlbmNvZGVzIGEgYml0IGZpZWxkLCBnaXZlbiBpdHMgc2l6ZSBhbmQgaXRzIHNoaWZ0IHZhbHVlCisgKiAgICB3aXRoIHJlc3BlY3QgdG8gYml0IDAuCisgKgorICogTm90ZQorICogICAgQSBtb3JlIGludHVpdGl2ZSB3YXkgdG8gZW5jb2RlIGJpdCBmaWVsZHMgd291bGQgaGF2ZSBiZWVuIHRvIHVzZSB0aGVpcgorICogICAgbWFzay4gSG93ZXZlciwgZXh0cmFjdGluZyBzaXplIGFuZCBzaGlmdCB2YWx1ZSBpbmZvcm1hdGlvbiBmcm9tIGEgYml0CisgKiAgICBmaWVsZCdzIG1hc2sgaXMgY3VtYmVyc29tZSBhbmQgbWlnaHQgYnJlYWsgdGhlIGFzc2VtYmxlciAoMjU1LWNoYXJhY3RlcgorICogICAgbGluZS1zaXplIGxpbWl0KS4KKyAqCisgKiBJbnB1dAorICogICAgU2l6ZSAgICAgIAlTaXplIG9mIHRoZSBiaXQgZmllbGQsIGluIG51bWJlciBvZiBiaXRzLgorICogICAgU2hmdCAgICAgIAlTaGlmdCB2YWx1ZSBvZiB0aGUgYml0IGZpZWxkIHdpdGggcmVzcGVjdCB0byBiaXQgMC4KKyAqCisgKiBPdXRwdXQKKyAqICAgIEZsZCAgICAgICAJRW5jb2RlZCBiaXQgZmllbGQuCisgKi8KKworI2RlZmluZSBGbGQoU2l6ZSwgU2hmdCkJKCgoU2l6ZSkgPDwgMTYpICsgKFNoZnQpKQorCisKKy8qCisgKiBNQUNST1M6IEZTaXplLCBGU2hmdCwgRk1zaywgRkFsbk1zaywgRjFzdEJpdAorICoKKyAqIFB1cnBvc2UKKyAqICAgIFRoZSBtYWNyb3MgIkZTaXplIiwgIkZTaGZ0IiwgIkZNc2siLCAiRkFsbk1zayIsIGFuZCAiRjFzdEJpdCIgcmV0dXJuCisgKiAgICB0aGUgc2l6ZSwgc2hpZnQgdmFsdWUsIG1hc2ssIGFsaWduZWQgbWFzaywgYW5kIGZpcnN0IGJpdCBvZiBhCisgKiAgICBiaXQgZmllbGQuCisgKgorICogSW5wdXQKKyAqICAgIEZpZWxkICAgICAJRW5jb2RlZCBiaXQgZmllbGQgKHVzaW5nIHRoZSBtYWNybyAiRmxkIikuCisgKgorICogT3V0cHV0CisgKiAgICBGU2l6ZSAgICAgCVNpemUgb2YgdGhlIGJpdCBmaWVsZCwgaW4gbnVtYmVyIG9mIGJpdHMuCisgKiAgICBGU2hmdCAgICAgCVNoaWZ0IHZhbHVlIG9mIHRoZSBiaXQgZmllbGQgd2l0aCByZXNwZWN0IHRvIGJpdCAwLgorICogICAgRk1zayAgICAgIAlNYXNrIGZvciB0aGUgYml0IGZpZWxkLgorICogICAgRkFsbk1zayAgIAlNYXNrIGZvciB0aGUgYml0IGZpZWxkLCBhbGlnbmVkIG9uIGJpdCAwLgorICogICAgRjFzdEJpdCAgIAlGaXJzdCBiaXQgb2YgdGhlIGJpdCBmaWVsZC4KKyAqLworCisjZGVmaW5lIEZTaXplKEZpZWxkKQkoKEZpZWxkKSA+PiAxNikKKyNkZWZpbmUgRlNoZnQoRmllbGQpCSgoRmllbGQpICYgMHgwMDAwRkZGRikKKyNkZWZpbmUgRk1zayhGaWVsZCkJKCgoVURhdGEgKDEpIDw8IEZTaXplIChGaWVsZCkpIC0gMSkgPDwgRlNoZnQgKEZpZWxkKSkKKyNkZWZpbmUgRkFsbk1zayhGaWVsZCkJKChVRGF0YSAoMSkgPDwgRlNpemUgKEZpZWxkKSkgLSAxKQorI2RlZmluZSBGMXN0Qml0KEZpZWxkKQkoVURhdGEgKDEpIDw8IEZTaGZ0IChGaWVsZCkpCisKKworLyoKKyAqIE1BQ1JPOiBGSW5zcnQKKyAqCisgKiBQdXJwb3NlCisgKiAgICBUaGUgbWFjcm8gIkZJbnNydCIgaW5zZXJ0cyBhIHZhbHVlIGludG8gYSBiaXQgZmllbGQgYnkgc2hpZnRpbmcgdGhlCisgKiAgICBmb3JtZXIgYXBwcm9wcmlhdGVseS4KKyAqCisgKiBJbnB1dAorICogICAgVmFsdWUgICAgIAlCaXQtZmllbGQgdmFsdWUuCisgKiAgICBGaWVsZCAgICAgCUVuY29kZWQgYml0IGZpZWxkICh1c2luZyB0aGUgbWFjcm8gIkZsZCIpLgorICoKKyAqIE91dHB1dAorICogICAgRkluc3J0ICAgIAlCaXQtZmllbGQgdmFsdWUgcG9zaXRpb25lZCBhcHByb3ByaWF0ZWx5LgorICovCisKKyNkZWZpbmUgRkluc3J0KFZhbHVlLCBGaWVsZCkgXAorICAgICAgICAgICAgICAgIAkoVURhdGEgKFZhbHVlKSA8PCBGU2hmdCAoRmllbGQpKQorCisKKy8qCisgKiBNQUNSTzogRkV4dHIKKyAqCisgKiBQdXJwb3NlCisgKiAgICBUaGUgbWFjcm8gIkZFeHRyIiBleHRyYWN0cyB0aGUgdmFsdWUgb2YgYSBiaXQgZmllbGQgYnkgbWFza2luZyBhbmQKKyAqICAgIHNoaWZ0aW5nIGl0IGFwcHJvcHJpYXRlbHkuCisgKgorICogSW5wdXQKKyAqICAgIERhdGEgICAgICAJRGF0YSBjb250YWluaW5nIHRoZSBiaXQtZmllbGQgdG8gYmUgZXh0cmFjdGVkLgorICogICAgRmllbGQgICAgIAlFbmNvZGVkIGJpdCBmaWVsZCAodXNpbmcgdGhlIG1hY3JvICJGbGQiKS4KKyAqCisgKiBPdXRwdXQKKyAqICAgIEZFeHRyICAgICAJQml0LWZpZWxkIHZhbHVlLgorICovCisKKyNkZWZpbmUgRkV4dHIoRGF0YSwgRmllbGQpIFwKKyAgICAgICAgICAgICAgICAJKChVRGF0YSAoRGF0YSkgPj4gRlNoZnQgKEZpZWxkKSkgJiBGQWxuTXNrIChGaWVsZCkpCisKKworI2VuZGlmIC8qIF9fQklURklFTERfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL2NvcmdpLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvY29yZ2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjRkYjA2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL2NvcmdpLmgKQEAgLTAsMCArMSwxMjAgQEAKKy8qCisgKiBIYXJkd2FyZSBzcGVjaWZpYyBkZWZpbml0aW9ucyBmb3IgU0wtQzd4eCBzZXJpZXMgb2YgUERBcworICoKKyAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA1IFJpY2hhcmQgUHVyZGllCisgKgorICogQmFzZWQgb24gU2hhcnAncyAyLjQga2VybmVsIHBhdGNoZXMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworI2lmbmRlZiBfX0FTTV9BUkNIX0NPUkdJX0gKKyNkZWZpbmUgX19BU01fQVJDSF9DT1JHSV9IICAxCisKKworLyoKKyAqIENvcmdpIChOb24gU3RhbmRhcmQpIEdQSU8gRGVmaW5pdGlvbnMKKyAqLworI2RlZmluZSBDT1JHSV9HUElPX0tFWV9JTlQJCQkoMCkJLyogS2V5Ym9hcmQgSW50ZXJydXB0ICovCisjZGVmaW5lIENPUkdJX0dQSU9fQUNfSU4JCQkoMSkgLyogQ2hhcmdlciBEZXRlY3Rpb24gKi8KKyNkZWZpbmUgQ09SR0lfR1BJT19XQUtFVVAJCQkoMykgLyogU3lzdGVtIHdha2V1cCBub3RpZmljYXRpb24/ICovCisjZGVmaW5lIENPUkdJX0dQSU9fQUtfSU5UCQkJKDQpCS8qIEhlYWRwaG9uZSBKYWNrIENvbnRyb2wgSW50ZXJydXB0ICovCisjZGVmaW5lIENPUkdJX0dQSU9fVFBfSU5UCQkJKDUpCS8qIFRvdWNoIFBhbmVsIEludGVycnVwdCAqLworI2RlZmluZSBDT1JHSV9HUElPX25TRF9XUAkJCSg3KSAvKiBTRCBXcml0ZSBQcm90ZWN0PyAqLworI2RlZmluZSBDT1JHSV9HUElPX25TRF9ERVRFQ1QJCSg5KSAvKiBNTUMvU0QgQ2FyZCBEZXRlY3QgKi8KKyNkZWZpbmUgQ09SR0lfR1BJT19uU0RfSU5UCQkJKDEwKSAvKiBTRCBJbnRlcnJ1cHQgZm9yIFNESU8/ICovCisjZGVmaW5lIENPUkdJX0dQSU9fTUFJTl9CQVRfTE9XCQkoMTEpIC8qIE1haW4gQmF0dGVyeSBMb3cgTm90aWZpY2F0aW9uICovCisjZGVmaW5lIENPUkdJX0dQSU9fQkFUX0NPVkVSCQkoMTEpIC8qIEJhdHRlcnkgQ292ZXIgRGV0ZWN0ICovCisjZGVmaW5lIENPUkdJX0dQSU9fTEVEX09SQU5HRQkJKDEzKSAvKiBPcmFuZ2UgTEVEIENvbnRyb2wgKi8KKyNkZWZpbmUgQ09SR0lfR1BJT19DRl9DRAkJCSgxNCkgLyogQ29tcGFjdCBGbGFzaCBDYXJkIERldGVjdCAqLworI2RlZmluZSBDT1JHSV9HUElPX0NIUkdfRlVMTAkJKDE2KSAvKiBDaGFyZ2luZyBDb21wbGV0ZSBOb3RpZmljYXRpb24gKi8KKyNkZWZpbmUgQ09SR0lfR1BJT19DRl9JUlEJCQkoMTcpIC8qIENvbXBhY3QgRmxhc2ggSW50ZXJydXB0ICovCisjZGVmaW5lIENPUkdJX0dQSU9fTENEQ09OX0NTCQkoMTkpIC8qIExDRCBDb250cm9sIENoaXAgU2VsZWN0ICovCisjZGVmaW5lIENPUkdJX0dQSU9fTUFYMTExMV9DUwkJKDIwKSAvKiBNQVgxMTExIENoaXAgU2VsZWN0ICovCisjZGVmaW5lIENPUkdJX0dQSU9fQURDX1RFTVBfT04JCSgyMSkgLyogU2VsZWN0IGJhdHRlcnkgdm9sdGFnZSBvciB0ZW1wZXJhdHVyZSAqLworI2RlZmluZSBDT1JHSV9HUElPX0lSX09OCQkJKDIyKSAvKiBFbmFibGUgSVIgVHJhbnNjaWV2ZXIgKi8KKyNkZWZpbmUgQ09SR0lfR1BJT19BRFM3ODQ2X0NTCQkoMjQpIC8qIEFEUzc4NDYgQ2hpcCBTZWxlY3QgKi8KKyNkZWZpbmUgQ09SR0lfR1BJT19TRF9QV1IJCQkoMzMpIC8qIE1NQy9TRCBQb3dlciAqLworI2RlZmluZSBDT1JHSV9HUElPX0NIUkdfT04JCQkoMzgpIC8qIEVuYWJsZSBiYXR0ZXJ5IENoYXJnaW5nICovCisjZGVmaW5lIENPUkdJX0dQSU9fRElTQ0hBUkdFX09OCQkoNDIpIC8qIEVuYWJsZSBiYXR0ZXJ5IERpc2NoYXJnZSAqLworI2RlZmluZSBDT1JHSV9HUElPX0NIUkdfVUtOCQkJKDQzKSAvKiBVbmtub3duIENoYXJnaW5nIChCeXBhc3MgQ29udHJvbD8pICovCisjZGVmaW5lIENPUkdJX0dQSU9fSFNZTkMJCQkoNDQpIC8qIExDRCBIU3luYyBQdWxzZSAqLworI2RlZmluZSBDT1JHSV9HUElPX1VTQl9QVUxMVVAJCSg0NSkgLyogVVNCIHNob3cgcHJlc2VuY2UgdG8gaG9zdCAqLworCisKKy8qCisgKiBDb3JnaSBLZXlib2FyZCBEZWZpbml0aW9ucworICovCisjZGVmaW5lIENPUkdJX0tFWV9TVFJPQkVfTlVNCQkoMTIpCisjZGVmaW5lIENPUkdJX0tFWV9TRU5TRV9OVU0JCQkoOCkKKyNkZWZpbmUgQ09SR0lfR1BJT19BTExfU1RST0JFX0JJVAkoMHgwMDAwM2ZmYykKKyNkZWZpbmUgQ09SR0lfR1BJT19ISUdIX1NFTlNFX0JJVAkoMHhmYzAwMDAwMCkKKyNkZWZpbmUgQ09SR0lfR1BJT19ISUdIX1NFTlNFX1JTSElGVAkoMjYpCisjZGVmaW5lIENPUkdJX0dQSU9fTE9XX1NFTlNFX0JJVAkoMHgwMDAwMDAwMykKKyNkZWZpbmUgQ09SR0lfR1BJT19MT1dfU0VOU0VfTFNISUZUCSg2KQorI2RlZmluZSBDT1JHSV9HUElPX1NUUk9CRV9CSVQoYSkJR1BJT19iaXQoNjYrKGEpKQorI2RlZmluZSBDT1JHSV9HUElPX1NFTlNFX0JJVChhKQkJR1BJT19iaXQoNTgrKGEpKQorI2RlZmluZSBDT1JHSV9HQUZSX0FMTF9TVFJPQkVfQklUCSgweDBmZmZmZmYwKQorI2RlZmluZSBDT1JHSV9HQUZSX0hJR0hfU0VOU0VfQklUCSgweGZmZjAwMDAwKQorI2RlZmluZSBDT1JHSV9HQUZSX0xPV19TRU5TRV9CSVQJKDB4MDAwMDAwMGYpCisjZGVmaW5lIENPUkdJX0dQSU9fS0VZX1NFTlNFKGEpCQkoNTgrKGEpKQorI2RlZmluZSBDT1JHSV9HUElPX0tFWV9TVFJPQkUoYSkJKDY2KyhhKSkKKworCisvKgorICogQ29yZ2kgSW50ZXJydXB0cworICovCisjZGVmaW5lIENPUkdJX0lSUV9HUElPX0tFWV9JTlQJCUlSUV9HUElPKDApCisjZGVmaW5lIENPUkdJX0lSUV9HUElPX0FDX0lOCQlJUlFfR1BJTygxKQorI2RlZmluZSBDT1JHSV9JUlFfR1BJT19XQUtFVVAJCUlSUV9HUElPKDMpCisjZGVmaW5lIENPUkdJX0lSUV9HUElPX0FLX0lOVAkJSVJRX0dQSU8oNCkKKyNkZWZpbmUgQ09SR0lfSVJRX0dQSU9fVFBfSU5UCQlJUlFfR1BJTyg1KQorI2RlZmluZSBDT1JHSV9JUlFfR1BJT19uU0RfREVURUNUCUlSUV9HUElPKDkpCisjZGVmaW5lIENPUkdJX0lSUV9HUElPX25TRF9JTlQJCUlSUV9HUElPKDEwKQorI2RlZmluZSBDT1JHSV9JUlFfR1BJT19NQUlOX0JBVF9MT1cJSVJRX0dQSU8oMTEpCisjZGVmaW5lIENPUkdJX0lSUV9HUElPX0NGX0NECQlJUlFfR1BJTygxNCkKKyNkZWZpbmUgQ09SR0lfSVJRX0dQSU9fQ0hSR19GVUxMCUlSUV9HUElPKDE2KQkvKiBCYXR0ZXJ5IGZ1bGx5IGNoYXJnZWQgKi8KKyNkZWZpbmUgQ09SR0lfSVJRX0dQSU9fQ0ZfSVJRCQlJUlFfR1BJTygxNykKKyNkZWZpbmUgQ09SR0lfSVJRX0dQSU9fS0VZX1NFTlNFKGEpCUlSUV9HUElPKDU4KyhhKSkJLyogS2V5Ym9hcmQgU2Vuc2UgbGluZXMgKi8KKworCisvKgorICogQ29yZ2kgU0NPT1AgR1BJT3MgYW5kIENvbmZpZworICovCisjZGVmaW5lIENPUkdJX1NDUF9MRURfR1JFRU4JCVNDT09QX0dQQ1JfUEExMQorI2RlZmluZSBDT1JHSV9TQ1BfU1dBCQkJU0NPT1BfR1BDUl9QQTEyICAvKiBIaW5nZSBTd2l0Y2ggQSAqLworI2RlZmluZSBDT1JHSV9TQ1BfU1dCCQkJU0NPT1BfR1BDUl9QQTEzICAvKiBIaW5nZSBTd2l0Y2ggQiAqLworI2RlZmluZSBDT1JHSV9TQ1BfTVVURV9MCQlTQ09PUF9HUENSX1BBMTQKKyNkZWZpbmUgQ09SR0lfU0NQX01VVEVfUgkJU0NPT1BfR1BDUl9QQTE1CisjZGVmaW5lIENPUkdJX1NDUF9BS0lOX1BVTExVUAlTQ09PUF9HUENSX1BBMTYKKyNkZWZpbmUgQ09SR0lfU0NQX0FQTV9PTgkJU0NPT1BfR1BDUl9QQTE3CisjZGVmaW5lIENPUkdJX1NDUF9CQUNLTElHSFRfQ09OVAlTQ09PUF9HUENSX1BBMTgKKyNkZWZpbmUgQ09SR0lfU0NQX01JQ19CSUFTCQlTQ09PUF9HUENSX1BBMTkKKworI2RlZmluZSBDT1JHSV9TQ09PUF9JT19ESVIJKCBDT1JHSV9TQ1BfTEVEX0dSRUVOIHwgQ09SR0lfU0NQX01VVEVfTCB8IENPUkdJX1NDUF9NVVRFX1IgfCBcCisJCQlDT1JHSV9TQ1BfQUtJTl9QVUxMVVAgfCBDT1JHSV9TQ1BfQVBNX09OIHwgQ09SR0lfU0NQX0JBQ0tMSUdIVF9DT05UIHwgXAorCQkJQ09SR0lfU0NQX01JQ19CSUFTICkKKyNkZWZpbmUgQ09SR0lfU0NPT1BfSU9fT1VUCSggQ09SR0lfU0NQX01VVEVfTCB8IENPUkdJX1NDUF9NVVRFX1IgKQorCisKKy8qCisgKiBTaGFyZWQgZGF0YSBzdHJ1Y3R1cmVzCisgKi8KK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNvcmdpc2Nvb3BfZGV2aWNlOworCisvKgorICogRXh0ZXJuYWwgRnVuY3Rpb25zCisgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIGNvcmdpX3NzcF9hZHM3ODQ2X3B1dGdldCh1bnNpZ25lZCBsb25nKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGNvcmdpX3NzcF9hZHM3ODQ2X2dldCh2b2lkKTsKK2V4dGVybiB2b2lkIGNvcmdpX3NzcF9hZHM3ODQ2X3B1dCh1bG9uZyBkYXRhKTsKK2V4dGVybiB2b2lkIGNvcmdpX3NzcF9hZHM3ODQ2X2xvY2sodm9pZCk7CitleHRlcm4gdm9pZCBjb3JnaV9zc3BfYWRzNzg0Nl91bmxvY2sodm9pZCk7CitleHRlcm4gdm9pZCBjb3JnaV9zc3BfbGNkdGdfc2VuZCAodTggYWRycywgdTggZGF0YSk7CitleHRlcm4gdm9pZCBjb3JnaV9zc3BfYmxkdXR5X3NldChpbnQgZHV0eSk7CitleHRlcm4gaW50IGNvcmdpX3NzcF9tYXgxMTExX2dldCh1bG9uZyBkYXRhKTsKKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfQ09SR0lfSCAgKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL2RlYnVnLW1hY3JvLlMgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvZGVidWctbWFjcm8uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjg4ZTc0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL2RlYnVnLW1hY3JvLlMKQEAgLTAsMCArMSwzNiBAQAorLyogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL2RlYnVnLW1hY3JvLlMKKyAqCisgKiBEZWJ1Z2dpbmcgbWFjcm8gaW5jbHVkZSBoZWFkZXIKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk0LTE5OTkgUnVzc2VsbCBLaW5nCisgKiAgTW92ZWQgZnJvbSBsaW51eC9hcmNoL2FybS9rZXJuZWwvZGVidWcuUyBieSBCZW4gRG9va3MKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyovCisKKwkJLm1hY3JvCWFkZHJ1YXJ0LHJ4CisJCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCisJCXRzdAlccngsICMxCQkJQCBNTVUgZW5hYmxlZD8KKwkJbW92ZXEJXHJ4LCAjMHg0MDAwMDAwMAkJQCBwaHlzaWNhbAorCQltb3ZuZQlccngsICNpb19wMnYoMHg0MDAwMDAwMCkJQCB2aXJ0dWFsCisJCW9ycglccngsIFxyeCwgIzB4MDAxMDAwMDAKKwkJLmVuZG0KKworCQkubWFjcm8Jc2VuZHVhcnQscmQscngKKwkJc3RyCVxyZCwgW1xyeCwgIzBdCisJCS5lbmRtCisKKwkJLm1hY3JvCWJ1c3l1YXJ0LHJkLHJ4CisxMDAyOgkJbGRyCVxyZCwgW1xyeCwgIzB4MTRdCisJCXRzdAlccmQsICMoMSA8PCA2KQorCQliZXEJMTAwMmIKKwkJLmVuZG0KKworCQkubWFjcm8Jd2FpdHVhcnQscmQscngKKzEwMDE6CQlsZHIJXHJkLCBbXHJ4LCAjMHgxNF0KKwkJdHN0CVxyZCwgIygxIDw8IDUpCisJCWJlcQkxMDAxYgorCQkuZW5kbQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL2RtYS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL2RtYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2ZGIzZDQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvZG1hLmgKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvZG1hLmgKKyAqCisgKiAgQXV0aG9yOglOaWNvbGFzIFBpdHJlCisgKiAgQ3JlYXRlZDoJSnVuIDE1LCAyMDAxCisgKiAgQ29weXJpZ2h0OglNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2lmbmRlZiBfX0FTTV9BUkNIX0RNQV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfRE1BX0gKKworI2RlZmluZSBNQVhfRE1BX0FERFJFU1MJCTB4ZmZmZmZmZmYKKworLyogTm8gRE1BIGFzIHRoZSByZXN0IG9mIHRoZSB3b3JsZCBzZWUgaXQgKi8KKyNkZWZpbmUgTUFYX0RNQV9DSEFOTkVMUwkwCisKKy8qCisgKiBEZXNjcmlwdG9yIHN0cnVjdHVyZSBmb3IgUFhBJ3MgRE1BIGVuZ2luZQorICogTm90ZTogdGhpcyBzdHJ1Y3R1cmUgbXVzdCBhbHdheXMgYmUgYWxpZ25lZCB0byBhIDE2LWJ5dGUgYm91bmRhcnkuCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgcHhhX2RtYV9kZXNjIHsKKwl2b2xhdGlsZSB1MzIgZGRhZHI7CS8qIFBvaW50cyB0byB0aGUgbmV4dCBkZXNjcmlwdG9yICsgZmxhZ3MgKi8KKwl2b2xhdGlsZSB1MzIgZHNhZHI7CS8qIERTQURSIHZhbHVlIGZvciB0aGUgY3VycmVudCB0cmFuc2ZlciAqLworCXZvbGF0aWxlIHUzMiBkdGFkcjsJLyogRFRBRFIgdmFsdWUgZm9yIHRoZSBjdXJyZW50IHRyYW5zZmVyICovCisJdm9sYXRpbGUgdTMyIGRjbWQ7CS8qIERDTUQgdmFsdWUgZm9yIHRoZSBjdXJyZW50IHRyYW5zZmVyICovCit9IHB4YV9kbWFfZGVzYzsKKworI2lmIGRlZmluZWQoQ09ORklHX1BYQTI3eCkKKworI2RlZmluZSBQWEFfRE1BX0NIQU5ORUxTCTMyCisjZGVmaW5lIFBYQV9ETUFfTkJDSChwcmlvKQkoKHByaW8gPT0gRE1BX1BSSU9fTE9XKSA/IDE2IDogOCkKKwordHlwZWRlZiBlbnVtIHsKKwlETUFfUFJJT19ISUdIID0gMCwKKwlETUFfUFJJT19NRURJVU0gPSA4LAorCURNQV9QUklPX0xPVyA9IDE2Cit9IHB4YV9kbWFfcHJpbzsKKworI2VsaWYgZGVmaW5lZChDT05GSUdfUFhBMjV4KQorCisjZGVmaW5lIFBYQV9ETUFfQ0hBTk5FTFMJMTYKKyNkZWZpbmUgUFhBX0RNQV9OQkNIKHByaW8pCSgocHJpbyA9PSBETUFfUFJJT19MT1cpID8gOCA6IDQpCisKK3R5cGVkZWYgZW51bSB7CisJRE1BX1BSSU9fSElHSCA9IDAsCisJRE1BX1BSSU9fTUVESVVNID0gNCwKKwlETUFfUFJJT19MT1cgPSA4Cit9IHB4YV9kbWFfcHJpbzsKKworI2VuZGlmCisKKy8qCisgKiBETUEgcmVnaXN0cmF0aW9uCisgKi8KKworaW50IHB4YV9yZXF1ZXN0X2RtYSAoY2hhciAqbmFtZSwKKwkJCSBweGFfZG1hX3ByaW8gcHJpbywKKwkJCSB2b2lkICgqaXJxX2hhbmRsZXIpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSwKKwkJCSB2b2lkICpkYXRhKTsKKwordm9pZCBweGFfZnJlZV9kbWEgKGludCBkbWFfY2gpOworCisjZW5kaWYgLyogX0FTTV9BUkNIX0RNQV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvZW50cnktbWFjcm8uUyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9lbnRyeS1tYWNyby5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhYmZjOGIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvZW50cnktbWFjcm8uUwpAQCAtMCwwICsxLDMxIEBACisvKgorICogaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL2VudHJ5LW1hY3JvLlMKKyAqCisgKiBMb3ctbGV2ZWwgSVJRIGhlbHBlciBtYWNyb3MgZm9yIFBYQS1iYXNlZCBwbGF0Zm9ybXMKKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisJCS5tYWNybwlkaXNhYmxlX2ZpcQorCQkuZW5kbQorCisJCS5tYWNybwlnZXRfaXJxbnJfYW5kX2Jhc2UsIGlycW5yLCBpcnFzdGF0LCBiYXNlLCB0bXAKKyNpZmRlZiBDT05GSUdfUFhBMjd4CisJCW1yYwlwNiwgMCwgXGlycXN0YXQsIGMwLCBjMCwgMAkJQCBJQ0lQCisJCW1yYwlwNiwgMCwgXGlycW5yLCBjMSwgYzAsIDAJCUAgSUNNUgorI2Vsc2UKKwkJbW92CVxiYXNlLCAjaW9fcDJ2KDB4NDAwMDAwMDApCUAgSUlSIEN0bCA9IDB4NDBkMDAwMDAKKwkJYWRkCVxiYXNlLCBcYmFzZSwgIzB4MDBkMDAwMDAKKwkJbGRyCVxpcnFzdGF0LCBbXGJhc2UsICMwXQkJQCBJQ0lQCisJCWxkcglcaXJxbnIsIFtcYmFzZSwgIzRdCQlAIElDTVIKKyNlbmRpZgorCQlhbmRzCVxpcnFuciwgXGlycXN0YXQsIFxpcnFucgorCQliZXEJMTAwMWYKKwkJcnNiCVxpcnFzdGF0LCBcaXJxbnIsICMwCisJCWFuZAlcaXJxc3RhdCwgXGlycXN0YXQsIFxpcnFucgorCQljbHoJXGlycW5yLCBcaXJxc3RhdAorCQlyc2IJXGlycW5yLCBcaXJxbnIsICMoMzEgLSBQWEFfSVJRX1NLSVApCisxMDAxOgorCQkuZW5kbQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL2hhcmR3YXJlLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvaGFyZHdhcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmIwNGQ4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL2hhcmR3YXJlLmgKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvaGFyZHdhcmUuaAorICoKKyAqICBBdXRob3I6CU5pY29sYXMgUGl0cmUKKyAqICBDcmVhdGVkOglKdW4gMTUsIDIwMDEKKyAqICBDb3B5cmlnaHQ6CU1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX0hBUkRXQVJFX0gKKyNkZWZpbmUgX19BU01fQVJDSF9IQVJEV0FSRV9ICisKKy8qCisgKiBXZSByZXF1aXJlcyBhYnNvbHV0ZSBhZGRyZXNzZXMuCisgKi8KKyNkZWZpbmUgUENJT19CQVNFCQkwCisKKy8qCisgKiBXb3JrYXJvdW5kcyBmb3IgYXQgbGVhc3QgMiBlcnJhdGEgc28gZmFyIHJlcXVpcmUgdGhpcy4KKyAqIFRoZSBtYXBwaW5nIGlzIHNldCBpbiBtYWNoLXB4YS9nZW5lcmljLmMuCisgKi8KKyNkZWZpbmUgVU5DQUNIRURfUEhZU18wCQkweGZmMDAwMDAwCisjZGVmaW5lIFVOQ0FDSEVEX0FERFIJCVVOQ0FDSEVEX1BIWVNfMAorCisvKgorICogSW50ZWwgUFhBMnh4IGludGVybmFsIHJlZ2lzdGVyIG1hcHBpbmc6CisgKgorICogMHg0MDAwMDAwMCAtIDB4NDFmZmZmZmYgPC0tPiAweGYyMDAwMDAwIC0gMHhmM2ZmZmZmZgorICogMHg0NDAwMDAwMCAtIDB4NDVmZmZmZmYgPC0tPiAweGY0MDAwMDAwIC0gMHhmNWZmZmZmZgorICogMHg0ODAwMDAwMCAtIDB4NDlmZmZmZmYgPC0tPiAweGY2MDAwMDAwIC0gMHhmN2ZmZmZmZgorICogMHg0YzAwMDAwMCAtIDB4NGRmZmZmZmYgPC0tPiAweGY4MDAwMDAwIC0gMHhmOWZmZmZmZgorICogMHg1MDAwMDAwMCAtIDB4NTFmZmZmZmYgPC0tPiAweGZhMDAwMDAwIC0gMHhmYmZmZmZmZgorICogMHg1NDAwMDAwMCAtIDB4NTVmZmZmZmYgPC0tPiAweGZjMDAwMDAwIC0gMHhmZGZmZmZmZgorICogMHg1ODAwMDAwMCAtIDB4NTlmZmZmZmYgPC0tPiAweGZlMDAwMDAwIC0gMHhmZmZmZmZmZgorICoKKyAqIE5vdGUgdGhhdCBub3QgYWxsIFBYQTJ4eCBjaGlwcyBpbXBsZW1lbnQgYWxsIHRob3NlIGFkZHJlc3NlcywgYW5kIHRoZQorICoga2VybmVsIG9ubHkgbWFwcyB0aGUgbWluaW11bSBuZWVkZWQgcmFuZ2Ugb2YgdGhpcyBtYXBwaW5nLgorICovCisjZGVmaW5lIGlvX3Aydih4KSAoMHhmMjAwMDAwMCArICgoeCkgJiAweDAxZmZmZmZmKSArICgoKHgpICYgMHgxYzAwMDAwMCkgPj4gMSkpCisjZGVmaW5lIGlvX3YycCh4KSAoMHgzYzAwMDAwMCArICgoeCkgJiAweDAxZmZmZmZmKSArICgoKHgpICYgMHgwZTAwMDAwMCkgPDwgMSkpCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNpZiAwCisjIGRlZmluZSBfX1JFRyh4KQkoKigodm9sYXRpbGUgdTMyICopaW9fcDJ2KHgpKSkKKyNlbHNlCisvKgorICogVGhpcyBfX1JFRygpIHZlcnNpb24gZ2l2ZXMgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgb25lIGFib3ZlLCAgZXhjZXB0CisgKiB0aGF0IHdlIGFyZSBmb29saW5nIGdjYyBzb21laG93IHNvIGl0IGdlbmVyYXRlcyBmYXIgYmV0dGVyIGFuZCBzbWFsbGVyCisgKiBhc3NlbWJseSBjb2RlIGZvciBhY2Nlc3MgdG8gY29udGlnb3VzIHJlZ2lzdGVycy4gIEl0J3MgYSBzaGFtZSB0aGF0IGdjYworICogZG9lc24ndCBndWVzcyB0aGlzIGJ5IGl0c2VsZi4KKyAqLworI2luY2x1ZGUgPGFzbS90eXBlcy5oPgordHlwZWRlZiBzdHJ1Y3QgeyB2b2xhdGlsZSB1MzIgb2Zmc2V0WzQwOTZdOyB9IF9fcmVnYmFzZTsKKyMgZGVmaW5lIF9fUkVHUCh4KQkoKF9fcmVnYmFzZSAqKSgoeCkmfjQwOTUpKS0+b2Zmc2V0WygoeCkmNDA5NSk+PjJdCisjIGRlZmluZSBfX1JFRyh4KQlfX1JFR1AoaW9fcDJ2KHgpKQorI2VuZGlmCisKKy8qIFdpdGggaW5kZXhlZCByZWdzIHdlIGRvbid0IHdhbnQgdG8gZmVlZCB0aGUgaW5kZXggdGhyb3VnaCBpb19wMnYoKQorICAgZXNwZWNpYWxseSBpZiBpdCBpcyBhIHZhcmlhYmxlLCBvdGhlcndpc2UgaG9ycmlibGUgY29kZSB3aWxsIHJlc3VsdC4gKi8KKyMgZGVmaW5lIF9fUkVHMih4LHkpICAgICAoKih2b2xhdGlsZSB1MzIgKikoKHUzMikmX19SRUcoeCkgKyAoeSkpKQorCisjIGRlZmluZSBfX1BSRUcoeCkJKGlvX3YycCgodTMyKSYoeCkpKQorCisjZWxzZQorCisjIGRlZmluZSBfX1JFRyh4KQlpb19wMnYoeCkKKyMgZGVmaW5lIF9fUFJFRyh4KQlpb192MnAoeCkKKworI2VuZGlmCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKy8qCisgKiBIYW5keSByb3V0aW5lIHRvIHNldCBHUElPIGFsdGVybmF0ZSBmdW5jdGlvbnMKKyAqLworZXh0ZXJuIHZvaWQgcHhhX2dwaW9fbW9kZSggaW50IGdwaW9fbW9kZSApOworCisvKgorICogUm91dGluZSB0byBlbmFibGUgb3IgZGlzYWJsZSBDS0VOCisgKi8KK2V4dGVybiB2b2lkIHB4YV9zZXRfY2tlbihpbnQgY2xvY2ssIGludCBlbmFibGUpOworCisvKgorICogcmV0dXJuIGN1cnJlbnQgbWVtb3J5IGFuZCBMQ0QgY2xvY2sgZnJlcXVlbmN5IGluIHVuaXRzIG9mIDEwa0h6CisgKi8KK2V4dGVybiB1bnNpZ25lZCBpbnQgZ2V0X21lbWNsa19mcmVxdWVuY3lfMTBraHoodm9pZCk7CitleHRlcm4gdW5zaWduZWQgaW50IGdldF9sY2RjbGtfZnJlcXVlbmN5XzEwa2h6KHZvaWQpOworCisjZW5kaWYKKworI2VuZGlmICAvKiBfQVNNX0FSQ0hfSEFSRFdBUkVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL2lkcC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL2lkcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3ZWY0OTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvaWRwLmgKQEAgLTAsMCArMSwyMDAgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL2lkcC5oCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEgQ2xpZmYgQnJha2UsIEFjY2VsZW50IFN5c3RlbXMgSW5jLgorICoKKyAqIDIwMDEtMDktMTM6IENsaWZmIEJyYWtlIDxjYnJha2VAYWNjZWxlbnQuY29tPgorICogICAgICAgICAgICAgSW5pdGlhbCBjb2RlCisgKgorICogMjAwNS0wMi0xNTogQ2xpZmYgQnJha2UgPGNsaWZmLmJyYWtlQGdtYWlsLmNvbT4KKyAqICAgICAgICAgICAgIDxodHRwOi8vd3d3LnZpYnJlbi5jb20+IDxodHRwOi8vYmVjLXN5c3RlbXMuY29tPgorICogICAgICAgICAgICAgQ2hhbmdlcyBmb3IgMi42IGtlcm5lbC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgbXVzdCBiZSBzYWZlIHRvIGluY2x1ZGUgaW4gYXNzZW1ibHkgZmlsZXMKKyAqCisgKiBTdXBwb3J0IGZvciB0aGUgVmlicmVuIFBYQTI1NSBJRFAgcmVxdWlyZXMgcmV2MDQgb3IgbGF0ZXIKKyAqIElEUCBoYXJkd2FyZS4KKyAqLworCisKKyNkZWZpbmUgSURQX0ZMQVNIX1BIWVMJCShQWEFfQ1MwX1BIWVMpCisjZGVmaW5lIElEUF9BTFRfRkxBU0hfUEhZUwkoUFhBX0NTMV9QSFlTKQorI2RlZmluZSBJRFBfTUVESUFRX1BIWVMJCShQWEFfQ1MzX1BIWVMpCisjZGVmaW5lIElEUF9JREVfUEhZUwkJKFBYQV9DUzVfUEhZUyArIDB4MDMwMDAwMDApCisjZGVmaW5lIElEUF9FVEhfUEhZUwkJKFBYQV9DUzVfUEhZUyArIDB4MDM0MDAwMDApCisjZGVmaW5lIElEUF9DT1JFVk9MVF9QSFlTCShQWEFfQ1M1X1BIWVMgKyAweDAzODAwMDAwKQorI2RlZmluZSBJRFBfQ1BMRF9QSFlTCQkoUFhBX0NTNV9QSFlTICsgMHgwM0MwMDAwMCkKKworCisvKgorICogdmlydHVhbCBtZW1vcnkgbWFwCisgKi8KKworI2RlZmluZSBJRFBfQ09SRVZPTFRfVklSVAkoMHhmMDAwMDAwMCkKKyNkZWZpbmUgSURQX0NPUkVWT0xUX1NJWkUJKDEqMTAyNCoxMDI0KQorCisjZGVmaW5lIElEUF9DUExEX1ZJUlQJCShJRFBfQ09SRVZPTFRfVklSVCArIElEUF9DT1JFVk9MVF9TSVpFKQorI2RlZmluZSBJRFBfQ1BMRF9TSVpFCQkoMSoxMDI0KjEwMjQpCisKKyNpZiAoSURQX0NQTERfVklSVCArIElEUF9DUExEX1NJWkUpID4gMHhmYzAwMDAwMAorI2Vycm9yIFlvdXIgY3VzdG9tIElPIHNwYWNlIGlzIGdldHRpbmcgYSBiaXQgbGFyZ2UgISEKKyNlbmRpZgorCisjZGVmaW5lIENQTERfUDJWKHgpCQkoKHgpIC0gSURQX0NQTERfUEhZUyArIElEUF9DUExEX1ZJUlQpCisjZGVmaW5lIENQTERfVjJQKHgpCQkoKHgpIC0gSURQX0NQTERfVklSVCArIElEUF9DUExEX1BIWVMpCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjICBkZWZpbmUgX19DUExEX1JFRyh4KQkJKCooKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKilDUExEX1AyVih4KSkpCisjZWxzZQorIyAgZGVmaW5lIF9fQ1BMRF9SRUcoeCkJCUNQTERfUDJWKHgpCisjZW5kaWYKKworLyogYm9hcmQgbGV2ZWwgcmVnaXN0ZXJzIGluIHRoZSBDUExEOiAob2Zmc2V0cyBmcm9tIENQTERfVklSVCkgKi8KKworI2RlZmluZSBfSURQX0NQTERfUkVWCQkJKElEUF9DUExEX1BIWVMgKyAweDAwKQorI2RlZmluZSBfSURQX0NQTERfUEVSSVBIX1BXUgkJKElEUF9DUExEX1BIWVMgKyAweDA0KQorI2RlZmluZSBfSURQX0NQTERfTEVEX0NPTlRST0wJCShJRFBfQ1BMRF9QSFlTICsgMHgwOCkKKyNkZWZpbmUgX0lEUF9DUExEX0tCX0NPTF9ISUdICQkoSURQX0NQTERfUEhZUyArIDB4MEMpCisjZGVmaW5lIF9JRFBfQ1BMRF9LQl9DT0xfTE9XCQkoSURQX0NQTERfUEhZUyArIDB4MTApCisjZGVmaW5lIF9JRFBfQ1BMRF9QQ0NBUkRfRU4JCShJRFBfQ1BMRF9QSFlTICsgMHgxNCkKKyNkZWZpbmUgX0lEUF9DUExEX0dQSU9IX0RJUgkJKElEUF9DUExEX1BIWVMgKyAweDE4KQorI2RlZmluZSBfSURQX0NQTERfR1BJT0hfVkFMVUUJCShJRFBfQ1BMRF9QSFlTICsgMHgxQykKKyNkZWZpbmUgX0lEUF9DUExEX0dQSU9MX0RJUgkJKElEUF9DUExEX1BIWVMgKyAweDIwKQorI2RlZmluZSBfSURQX0NQTERfR1BJT0xfVkFMVUUJCShJRFBfQ1BMRF9QSFlTICsgMHgyNCkKKyNkZWZpbmUgX0lEUF9DUExEX1BDQ0FSRF9QV1IJCShJRFBfQ1BMRF9QSFlTICsgMHgyOCkKKyNkZWZpbmUgX0lEUF9DUExEX01JU0NfQ1RSTAkJKElEUF9DUExEX1BIWVMgKyAweDJDKQorI2RlZmluZSBfSURQX0NQTERfTENECQkJKElEUF9DUExEX1BIWVMgKyAweDMwKQorI2RlZmluZSBfSURQX0NQTERfRkxBU0hfV0UJCShJRFBfQ1BMRF9QSFlTICsgMHgzNCkKKworI2RlZmluZSBfSURQX0NQTERfS0JfUk9XCQkoSURQX0NQTERfUEhZUyArIDB4NTApCisjZGVmaW5lIF9JRFBfQ1BMRF9QQ0NBUkQwX1NUQVRVUwkoSURQX0NQTERfUEhZUyArIDB4NTQpCisjZGVmaW5lIF9JRFBfQ1BMRF9QQ0NBUkQxX1NUQVRVUwkoSURQX0NQTERfUEhZUyArIDB4NTgpCisjZGVmaW5lIF9JRFBfQ1BMRF9NSVNDX1NUQVRVUwkJKElEUF9DUExEX1BIWVMgKyAweDVDKQorCisvKiBGUEdBIHJlZ2lzdGVyIHZpcnR1YWwgYWRkcmVzc2VzICovCisKKyNkZWZpbmUgSURQX0NQTERfUkVWCQkJX19DUExEX1JFRyhfSURQX0NQTERfUkVWKQorI2RlZmluZSBJRFBfQ1BMRF9QRVJJUEhfUFdSCQlfX0NQTERfUkVHKF9JRFBfQ1BMRF9QRVJJUEhfUFdSKQorI2RlZmluZSBJRFBfQ1BMRF9MRURfQ09OVFJPTAkJX19DUExEX1JFRyhfSURQX0NQTERfTEVEX0NPTlRST0wpCisjZGVmaW5lIElEUF9DUExEX0tCX0NPTF9ISUdICQlfX0NQTERfUkVHKF9JRFBfQ1BMRF9LQl9DT0xfSElHSCkKKyNkZWZpbmUgSURQX0NQTERfS0JfQ09MX0xPVwkJX19DUExEX1JFRyhfSURQX0NQTERfS0JfQ09MX0xPVykKKyNkZWZpbmUgSURQX0NQTERfUENDQVJEX0VOCQlfX0NQTERfUkVHKF9JRFBfQ1BMRF9QQ0NBUkRfRU4pCisjZGVmaW5lIElEUF9DUExEX0dQSU9IX0RJUgkJX19DUExEX1JFRyhfSURQX0NQTERfR1BJT0hfRElSKQorI2RlZmluZSBJRFBfQ1BMRF9HUElPSF9WQUxVRQkJX19DUExEX1JFRyhfSURQX0NQTERfR1BJT0hfVkFMVUUpCisjZGVmaW5lIElEUF9DUExEX0dQSU9MX0RJUgkJX19DUExEX1JFRyhfSURQX0NQTERfR1BJT0xfRElSKQorI2RlZmluZSBJRFBfQ1BMRF9HUElPTF9WQUxVRQkJX19DUExEX1JFRyhfSURQX0NQTERfR1BJT0xfVkFMVUUpCisjZGVmaW5lIElEUF9DUExEX1BDQ0FSRF9QV1IJCV9fQ1BMRF9SRUcoX0lEUF9DUExEX1BDQ0FSRF9QV1IpCisjZGVmaW5lIElEUF9DUExEX01JU0NfQ1RSTAkJX19DUExEX1JFRyhfSURQX0NQTERfTUlTQ19DVFJMKQorI2RlZmluZSBJRFBfQ1BMRF9MQ0QJCQlfX0NQTERfUkVHKF9JRFBfQ1BMRF9MQ0QpCisjZGVmaW5lIElEUF9DUExEX0ZMQVNIX1dFCQlfX0NQTERfUkVHKF9JRFBfQ1BMRF9GTEFTSF9XRSkKKworI2RlZmluZSBJRFBfQ1BMRF9LQl9ST1cJCSAgICAgICAgX19DUExEX1JFRyhfSURQX0NQTERfS0JfUk9XKQorI2RlZmluZSBJRFBfQ1BMRF9QQ0NBUkQwX1NUQVRVUwkgICAgICAgIF9fQ1BMRF9SRUcoX0lEUF9DUExEX1BDQ0FSRDBfU1RBVFVTKQorI2RlZmluZSBJRFBfQ1BMRF9QQ0NBUkQxX1NUQVRVUwkgICAgICAgIF9fQ1BMRF9SRUcoX0lEUF9DUExEX1BDQ0FSRDFfU1RBVFVTKQorI2RlZmluZSBJRFBfQ1BMRF9NSVNDX1NUQVRVUwkJX19DUExEX1JFRyhfSURQX0NQTERfTUlTQ19TVEFUVVMpCisKKworLyoKKyAqIEJpdCBtYXNrcyBmb3IgdmFyaW91cyByZWdpc3RlcnMKKyAqLworCisvLyBJRFBfQ1BMRF9QQ0NBUkRfUFdSCisjZGVmaW5lIFBDQzBfUFdSMAkoMSA8PCAwKQorI2RlZmluZSBQQ0MwX1BXUjEJKDEgPDwgMSkKKyNkZWZpbmUgUENDMF9QV1IyCSgxIDw8IDIpCisjZGVmaW5lIFBDQzBfUFdSMwkoMSA8PCAzKQorI2RlZmluZSBQQ0MxX1BXUjAJKDEgPDwgNCkKKyNkZWZpbmUgUENDMV9QV1IxCSgxIDw8IDUpCisjZGVmaW5lIFBDQzFfUFdSMgkoMSA8PCA2KQorI2RlZmluZSBQQ0MxX1BXUjMJKDEgPDwgNykKKworLy8gSURQX0NQTERfUENDQVJEX0VOCisjZGVmaW5lIFBDQzBfUkVTRVQJKDEgPDwgNikKKyNkZWZpbmUgUENDMV9SRVNFVAkoMSA8PCA3KQorI2RlZmluZSBQQ0MwX0VOQUJMRQkoMSA8PCAwKQorI2RlZmluZSBQQ0MxX0VOQUJMRQkoMSA8PCAxKQorCisvLyBJRFBfQ1BMRF9QQ0NBUkR4X1NUQVRVUworI2RlZmluZSBfUENDX1dSUFJPVAkoMSA8PCA3KSAvLyA3LTQgcmVhZCBhcyBsb3cgdHJ1ZQorI2RlZmluZSBfUENDX1JFU0VUCSgxIDw8IDYpCisjZGVmaW5lIF9QQ0NfSVJRCSgxIDw8IDUpCisjZGVmaW5lIF9QQ0NfSU5QQUNLCSgxIDw8IDQpCisjZGVmaW5lIFBDQ19CVkQyCSgxIDw8IDMpCisjZGVmaW5lIFBDQ19CVkQxCSgxIDw8IDIpCisjZGVmaW5lIFBDQ19WUzIJCSgxIDw8IDEpCisjZGVmaW5lIFBDQ19WUzEJCSgxIDw8IDApCisKKyNkZWZpbmUgUENDX0RFVEVDVCh4KQkoR1BMUig3ICsgKHgpKSAmIEdQSU9fYml0KDcgKyAoeCkpKQorCisvKiBBIGxpc3Rpbmcgb2YgaW50ZXJydXB0cyB1c2VkIGJ5IGV4dGVybmFsIGhhcmR3YXJlIGRldmljZXMgKi8KKworI2RlZmluZSBUT1VDSF9QQU5FTF9JUlEJCQlJUlFfR1BJTyg1KQorI2RlZmluZSBJREVfSVJRCQkJCUlSUV9HUElPKDIxKQorCisjZGVmaW5lIFRPVUNIX1BBTkVMX0lSUV9FREdFCQlJUlFUX0ZBTExJTkcKKworI2RlZmluZSBFVEhFUk5FVF9JUlEJCQlJUlFfR1BJTyg0KQorI2RlZmluZSBFVEhFUk5FVF9JUlFfRURHRQkJSVJRVF9SSVNJTkcKKworI2RlZmluZSBJREVfSVJRX0VER0UJCQlJUlFUX1JJU0lORworCisjZGVmaW5lIFBDTUNJQV9TMF9DRF9WQUxJRAkJSVJRX0dQSU8oNykKKyNkZWZpbmUgUENNQ0lBX1MwX0NEX1ZBTElEX0VER0UJCUlSUVRfQk9USEVER0UKKworI2RlZmluZSBQQ01DSUFfUzFfQ0RfVkFMSUQJCUlSUV9HUElPKDgpCisjZGVmaW5lIFBDTUNJQV9TMV9DRF9WQUxJRF9FREdFCQlJUlFUX0JPVEhFREdFCisKKyNkZWZpbmUgUENNQ0lBX1MwX1JEWUlOVAkJSVJRX0dQSU8oMTkpCisjZGVmaW5lIFBDTUNJQV9TMV9SRFlJTlQJCUlSUV9HUElPKDIyKQorCisKKy8qCisgKiBNYWNyb3MgZm9yIExFRCBEcml2ZXIKKyAqLworCisvKiBsZWRzIDAgPSBPTiAqLworI2RlZmluZSBJRFBfSEJfTEVECSgxPDw1KQorI2RlZmluZSBJRFBfQlVTWV9MRUQJKDE8PDYpCisKKyNkZWZpbmUgSURQX0xFRFNfTUFTSwkoSURQX0hCX0xFRCB8IElEUF9CVVNZX0xFRCkKKworLyoKKyAqIG1hY3JvcyBmb3IgTVREIGRyaXZlcgorICovCisKKyNkZWZpbmUgRkxBU0hfV1JJVEVfUFJPVEVDVF9ESVNBQkxFKCkJKChJRFBfQ1BMRF9GTEFTSF9XRSkgJj0gfigweDEpKQorI2RlZmluZSBGTEFTSF9XUklURV9QUk9URUNUX0VOQUJMRSgpCSgoSURQX0NQTERfRkxBU0hfV0UpIHw9ICgweDEpKQorCisvKgorICogbWFjcm9zIGZvciBtYXRyaXgga2V5Ym9hcmQgZHJpdmVyCisgKi8KKworI2RlZmluZSBLRVlCRF9NQVRSSVhfTlVNQkVSX0lOUFVUUwk3CisjZGVmaW5lIEtFWUJEX01BVFJJWF9OVU1CRVJfT1VUUFVUUwkxNAorCisjZGVmaW5lIEtFWUJEX01BVFJJWF9JTlZFUlRfT1VUUFVUX0xPR0lDCUZBTFNFCisjZGVmaW5lIEtFWUJEX01BVFJJWF9JTlZFUlRfSU5QVVRfTE9HSUMJCUZBTFNFCisKKyNkZWZpbmUgS0VZQkRfTUFUUklYX1NFVFRMSU5HX1RJTUVfVVMJCQkxMDAKKyNkZWZpbmUgS0VZQkRfTUFUUklYX0tFWVNUQVRFX0RFQk9VTkNFX0NPTlNUQU5UCQkyCisKKyNkZWZpbmUgS0VZQkRfTUFUUklYX1NFVF9PVVRQVVRTKG91dHB1dHMpIFwKK3tcCisJSURQX0NQTERfS0JfQ09MX0xPVyA9IG91dHB1dHM7XAorCUlEUF9DUExEX0tCX0NPTF9ISUdIID0gb3V0cHV0cyA+PiA3O1wKK30KKworI2RlZmluZSBLRVlCRF9NQVRSSVhfR0VUX0lOUFVUUyhpbnB1dHMpIFwKK3tcCisJaW5wdXRzID0gKElEUF9DUExEX0tCX1JPVyAmIDB4N2YpO1wKK30KKworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvaW8uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9pby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzYmRiZTQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvaW8uaApAQCAtMCwwICsxLDE5IEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL2lvLmgKKyAqCisgKiBDb3BpZWQgZnJvbSBhc20vYXJjaC9zYTExMDAvaW8uaAorICovCisjaWZuZGVmIF9fQVNNX0FSTV9BUkNIX0lPX0gKKyNkZWZpbmUgX19BU01fQVJNX0FSQ0hfSU9fSAorCisjZGVmaW5lIElPX1NQQUNFX0xJTUlUIDB4ZmZmZmZmZmYKKworLyoKKyAqIFdlIGRvbid0IGFjdHVhbGx5IGhhdmUgcmVhbCBJU0Egbm9yIFBDSSBidXNlcywgYnV0IHRoZXJlIGlzIHNvIG1hbnkKKyAqIGRyaXZlcnMgb3V0IHRoZXJlIHRoYXQgbWlnaHQganVzdCB3b3JrIGlmIHdlIGZha2UgdGhlbS4uLgorICovCisjZGVmaW5lIF9faW8oYSkJCQkoKHZvaWQgX19pb21lbSAqKShhKSkKKyNkZWZpbmUgX19tZW1fcGNpKGEpCQkoYSkKKyNkZWZpbmUgX19tZW1faXNhKGEpCQkoYSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvaXJxLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvaXJxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc3MGU0YgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9pcnEuaApAQCAtMCwwICsxLDE5IEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL2lycS5oCisgKgorICogQXV0aG9yOglOaWNvbGFzIFBpdHJlCisgKiBDcmVhdGVkOglKdW4gMTUsIDIwMDEKKyAqIENvcHlyaWdodDoJTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjZGVmaW5lIGZpeHVwX2lycSh4KQkoeCkKKworLyoKKyAqIFRoaXMgcHJvdG90eXBlIGlzIHJlcXVpcmVkIGZvciBjYXNjYWRpbmcgb2YgbXVsdGlwbGV4ZWQgaW50ZXJydXB0cy4KKyAqIFNpbmNlIGl0IGRvZXNuJ3QgZXhpc3QgZWxzZXdoZXJlLCB3ZSdsbCBwdXQgaXQgaGVyZSBmb3Igbm93LgorICovCitleHRlcm4gdm9pZCBkb19JUlEoaW50IGlycSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL2lycXMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9pcnFzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVjNGI3MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9pcnFzLmgKQEAgLTAsMCArMSwyMTkgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL2lycXMuaAorICoKKyAqICBBdXRob3I6CU5pY29sYXMgUGl0cmUKKyAqICBDcmVhdGVkOglKdW4gMTUsIDIwMDEKKyAqICBDb3B5cmlnaHQ6CU1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjaWZkZWYgQ09ORklHX1BYQTI3eAorI2RlZmluZSBQWEFfSVJRX1NLSVAJMAorI2Vsc2UKKyNkZWZpbmUgUFhBX0lSUV9TS0lQCTcKKyNlbmRpZgorCisjZGVmaW5lIFBYQV9JUlEoeCkJKCh4KSAtIFBYQV9JUlFfU0tJUCkKKworI2RlZmluZSBJUlFfU1NQMwlQWEFfSVJRKDApCS8qIFNTUDMgc2VydmljZSByZXF1ZXN0ICovCisjZGVmaW5lIElSUV9NU0wJCVBYQV9JUlEoMSkJLyogTVNMIEludGVyZmFjZSBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRX1VTQkgyCVBYQV9JUlEoMikJLyogVVNCIEhvc3QgaW50ZXJydXB0IDEgKE9IQ0kpICovCisjZGVmaW5lIElSUV9VU0JIMQlQWEFfSVJRKDMpCS8qIFVTQiBIb3N0IGludGVycnVwdCAyIChub24tT0hDSSkgKi8KKyNkZWZpbmUgSVJRX0tFWVBBRAlQWEFfSVJRKDQpCS8qIEtleSBwYWQgY29udHJvbGxlciAqLworI2RlZmluZSBJUlFfTUVNU1RLCVBYQV9JUlEoNSkJLyogTWVtb3J5IFN0aWNrIGludGVycnVwdCAqLworI2RlZmluZSBJUlFfUFdSSTJDCVBYQV9JUlEoNikJLyogUG93ZXIgSTJDIGludGVycnVwdCAqLworI2RlZmluZSBJUlFfSFdVQVJUCVBYQV9JUlEoNykJLyogSFdVQVJUIFRyYW5zbWl0L1JlY2VpdmUvRXJyb3IgKFBYQTI2eCkgKi8KKyNkZWZpbmUgSVJRX09TVF80XzExCVBYQV9JUlEoNykJLyogT1MgdGltZXIgNC0xMSBtYXRjaGVzIChQWEEyN3gpICovCisjZGVmaW5lCUlSUV9HUElPMAlQWEFfSVJRKDgpCS8qIEdQSU8wIEVkZ2UgRGV0ZWN0ICovCisjZGVmaW5lCUlSUV9HUElPMQlQWEFfSVJRKDkpCS8qIEdQSU8xIEVkZ2UgRGV0ZWN0ICovCisjZGVmaW5lCUlSUV9HUElPXzJfeAlQWEFfSVJRKDEwKQkvKiBHUElPWzIteF0gRWRnZSBEZXRlY3QgKi8KKyNkZWZpbmUJSVJRX1VTQgkJUFhBX0lSUSgxMSkJLyogVVNCIFNlcnZpY2UgKi8KKyNkZWZpbmUJSVJRX1BNVQkJUFhBX0lSUSgxMikJLyogUGVyZm9ybWFuY2UgTW9uaXRvcmluZyBVbml0ICovCisjZGVmaW5lCUlSUV9JMlMJCVBYQV9JUlEoMTMpCS8qIEkyUyBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUJSVJRX0FDOTcJUFhBX0lSUSgxNCkJLyogQUM5NyBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRX0FTU1AJUFhBX0lSUSgxNSkJLyogQXVkaW8gU1NQIFNlcnZpY2UgUmVxdWVzdCAoUFhBMjV4KSAqLworI2RlZmluZSBJUlFfVVNJTQlQWEFfSVJRKDE1KSAgICAgLyogU21hcnQgQ2FyZCBpbnRlcmZhY2UgaW50ZXJydXB0IChQWEEyN3gpICovCisjZGVmaW5lIElSUV9OU1NQCVBYQV9JUlEoMTYpCS8qIE5ldHdvcmsgU1NQIFNlcnZpY2UgUmVxdWVzdCAoUFhBMjV4KSAqLworI2RlZmluZSBJUlFfU1NQMglQWEFfSVJRKDE2KQkvKiBTU1AyIGludGVycnVwdCAoUFhBMjd4KSAqLworI2RlZmluZQlJUlFfTENECQlQWEFfSVJRKDE3KQkvKiBMQ0QgQ29udHJvbGxlciBTZXJ2aWNlIFJlcXVlc3QgKi8KKyNkZWZpbmUJSVJRX0kyQwkJUFhBX0lSUSgxOCkJLyogSTJDIFNlcnZpY2UgUmVxdWVzdCAqLworI2RlZmluZQlJUlFfSUNQCQlQWEFfSVJRKDE5KQkvKiBJQ1AgVHJhbnNtaXQvUmVjZWl2ZS9FcnJvciAqLworI2RlZmluZQlJUlFfU1RVQVJUCVBYQV9JUlEoMjApCS8qIFNUVUFSVCBUcmFuc21pdC9SZWNlaXZlL0Vycm9yICovCisjZGVmaW5lCUlSUV9CVFVBUlQJUFhBX0lSUSgyMSkJLyogQlRVQVJUIFRyYW5zbWl0L1JlY2VpdmUvRXJyb3IgKi8KKyNkZWZpbmUJSVJRX0ZGVUFSVAlQWEFfSVJRKDIyKQkvKiBGRlVBUlQgVHJhbnNtaXQvUmVjZWl2ZS9FcnJvciovCisjZGVmaW5lCUlSUV9NTUMJCVBYQV9JUlEoMjMpCS8qIE1NQyBTdGF0dXMvRXJyb3IgRGV0ZWN0aW9uICovCisjZGVmaW5lCUlSUV9TU1AJCVBYQV9JUlEoMjQpCS8qIFNTUCBTZXJ2aWNlIFJlcXVlc3QgKi8KKyNkZWZpbmUJSVJRX0RNQSAJUFhBX0lSUSgyNSkJLyogRE1BIENoYW5uZWwgU2VydmljZSBSZXF1ZXN0ICovCisjZGVmaW5lCUlSUV9PU1QwIAlQWEFfSVJRKDI2KQkvKiBPUyBUaW1lciBtYXRjaCAwICovCisjZGVmaW5lCUlSUV9PU1QxIAlQWEFfSVJRKDI3KQkvKiBPUyBUaW1lciBtYXRjaCAxICovCisjZGVmaW5lCUlSUV9PU1QyIAlQWEFfSVJRKDI4KQkvKiBPUyBUaW1lciBtYXRjaCAyICovCisjZGVmaW5lCUlSUV9PU1QzIAlQWEFfSVJRKDI5KQkvKiBPUyBUaW1lciBtYXRjaCAzICovCisjZGVmaW5lCUlSUV9SVEMxSHoJUFhBX0lSUSgzMCkJLyogUlRDIEhaIENsb2NrIFRpY2sgKi8KKyNkZWZpbmUJSVJRX1JUQ0Fscm0JUFhBX0lSUSgzMSkJLyogUlRDIEFsYXJtICovCisKKyNpZmRlZiBDT05GSUdfUFhBMjd4CisjZGVmaW5lIElSUV9UUE0JCVBYQV9JUlEoMzIpCS8qIFRQTSBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRX0NBTUVSQQlQWEFfSVJRKDMzKQkvKiBDYW1lcmEgSW50ZXJmYWNlICovCisKKyNkZWZpbmUgUFhBX0lOVEVSTkFMX0lSUVMgMzQKKyNlbHNlCisjZGVmaW5lIFBYQV9JTlRFUk5BTF9JUlFTIDMyCisjZW5kaWYKKworI2RlZmluZSBHUElPXzJfeF9UT19JUlEoeCkJXAorCQkJUFhBX0lSUSgoeCkgLSAyICsgUFhBX0lOVEVSTkFMX0lSUVMpCisjZGVmaW5lIElSUV9HUElPKHgpCSgoKHgpIDwgMikgPyAoSVJRX0dQSU8wICsgKHgpKSA6IEdQSU9fMl94X1RPX0lSUSh4KSkKKworI2RlZmluZSBJUlFfVE9fR1BJT18yX3goaSkJXAorCQkJKChpKSAtIElSUV9HUElPKDIpICsgMikKKyNkZWZpbmUgSVJRX1RPX0dQSU8oaSkJKCgoaSkgPCBJUlFfR1BJTygyKSkgPyAoKGkpIC0gSVJRX0dQSU8wKSA6IElSUV9UT19HUElPXzJfeChpKSkKKworI2lmIGRlZmluZWQoQ09ORklHX1BYQTI1eCkKKyNkZWZpbmUgUFhBX0xBU1RfR1BJTwk4MAorI2VsaWYgZGVmaW5lZChDT05GSUdfUFhBMjd4KQorI2RlZmluZSBQWEFfTEFTVF9HUElPCTEyNworI2VuZGlmCisKKy8qCisgKiBUaGUgbmV4dCAxNiBpbnRlcnJ1cHRzIGFyZSBmb3IgYm9hcmQgc3BlY2lmaWMgcHVycG9zZXMuICBTaW5jZQorICogdGhlIGtlcm5lbCBjYW4gb25seSBydW4gb24gb25lIG1hY2hpbmUgYXQgYSB0aW1lLCB3ZSBjYW4gcmUtdXNlCisgKiB0aGVzZS4gIElmIHlvdSBuZWVkIG1vcmUsIGluY3JlYXNlIElSUV9CT0FSRF9FTkQsIGJ1dCBrZWVwIGl0CisgKiB3aXRoaW4gc2Vuc2libGUgbGltaXRzLgorICovCisjZGVmaW5lIElSUV9CT0FSRF9TVEFSVAkJKElSUV9HUElPKFBYQV9MQVNUX0dQSU8pICsgMSkKKyNkZWZpbmUgSVJRX0JPQVJEX0VORAkJKElSUV9CT0FSRF9TVEFSVCArIDE2KQorCisjZGVmaW5lIElSUV9TQTExMTFfU1RBUlQJKElSUV9CT0FSRF9FTkQpCisjZGVmaW5lIElSUV9HUEFJTjAJCShJUlFfQk9BUkRfRU5EICsgMCkKKyNkZWZpbmUgSVJRX0dQQUlOMQkJKElSUV9CT0FSRF9FTkQgKyAxKQorI2RlZmluZSBJUlFfR1BBSU4yCQkoSVJRX0JPQVJEX0VORCArIDIpCisjZGVmaW5lIElSUV9HUEFJTjMJCShJUlFfQk9BUkRfRU5EICsgMykKKyNkZWZpbmUgSVJRX0dQQklOMAkJKElSUV9CT0FSRF9FTkQgKyA0KQorI2RlZmluZSBJUlFfR1BCSU4xCQkoSVJRX0JPQVJEX0VORCArIDUpCisjZGVmaW5lIElSUV9HUEJJTjIJCShJUlFfQk9BUkRfRU5EICsgNikKKyNkZWZpbmUgSVJRX0dQQklOMwkJKElSUV9CT0FSRF9FTkQgKyA3KQorI2RlZmluZSBJUlFfR1BCSU40CQkoSVJRX0JPQVJEX0VORCArIDgpCisjZGVmaW5lIElSUV9HUEJJTjUJCShJUlFfQk9BUkRfRU5EICsgOSkKKyNkZWZpbmUgSVJRX0dQQ0lOMAkJKElSUV9CT0FSRF9FTkQgKyAxMCkKKyNkZWZpbmUgSVJRX0dQQ0lOMQkJKElSUV9CT0FSRF9FTkQgKyAxMSkKKyNkZWZpbmUgSVJRX0dQQ0lOMgkJKElSUV9CT0FSRF9FTkQgKyAxMikKKyNkZWZpbmUgSVJRX0dQQ0lOMwkJKElSUV9CT0FSRF9FTkQgKyAxMykKKyNkZWZpbmUgSVJRX0dQQ0lONAkJKElSUV9CT0FSRF9FTkQgKyAxNCkKKyNkZWZpbmUgSVJRX0dQQ0lONQkJKElSUV9CT0FSRF9FTkQgKyAxNSkKKyNkZWZpbmUgSVJRX0dQQ0lONgkJKElSUV9CT0FSRF9FTkQgKyAxNikKKyNkZWZpbmUgSVJRX0dQQ0lONwkJKElSUV9CT0FSRF9FTkQgKyAxNykKKyNkZWZpbmUgSVJRX01TVFhJTlQJCShJUlFfQk9BUkRfRU5EICsgMTgpCisjZGVmaW5lIElSUV9NU1JYSU5UCQkoSVJRX0JPQVJEX0VORCArIDE5KQorI2RlZmluZSBJUlFfTVNTVE9QRVJSSU5UCShJUlFfQk9BUkRfRU5EICsgMjApCisjZGVmaW5lIElSUV9UUFRYSU5UCQkoSVJRX0JPQVJEX0VORCArIDIxKQorI2RlZmluZSBJUlFfVFBSWElOVAkJKElSUV9CT0FSRF9FTkQgKyAyMikKKyNkZWZpbmUgSVJRX1RQU1RPUEVSUklOVAkoSVJRX0JPQVJEX0VORCArIDIzKQorI2RlZmluZSBTU1BYTVRJTlQJCShJUlFfQk9BUkRfRU5EICsgMjQpCisjZGVmaW5lIFNTUFJDVklOVAkJKElSUV9CT0FSRF9FTkQgKyAyNSkKKyNkZWZpbmUgU1NQUk9SCQkJKElSUV9CT0FSRF9FTkQgKyAyNikKKyNkZWZpbmUgQVVEWE1URE1BRE9ORUEJCShJUlFfQk9BUkRfRU5EICsgMzIpCisjZGVmaW5lIEFVRFJDVkRNQURPTkVBCQkoSVJRX0JPQVJEX0VORCArIDMzKQorI2RlZmluZSBBVURYTVRETUFET05FQgkJKElSUV9CT0FSRF9FTkQgKyAzNCkKKyNkZWZpbmUgQVVEUkNWRE1BRE9ORUIJCShJUlFfQk9BUkRfRU5EICsgMzUpCisjZGVmaW5lIEFVRFRGU1IJCQkoSVJRX0JPQVJEX0VORCArIDM2KQorI2RlZmluZSBBVURSRlNSCQkJKElSUV9CT0FSRF9FTkQgKyAzNykKKyNkZWZpbmUgQVVEVFVSCQkJKElSUV9CT0FSRF9FTkQgKyAzOCkKKyNkZWZpbmUgQVVEUk9SCQkJKElSUV9CT0FSRF9FTkQgKyAzOSkKKyNkZWZpbmUgQVVERFRTCQkJKElSUV9CT0FSRF9FTkQgKyA0MCkKKyNkZWZpbmUgQVVEUkRECQkJKElSUV9CT0FSRF9FTkQgKyA0MSkKKyNkZWZpbmUgQVVEU1RPCQkJKElSUV9CT0FSRF9FTkQgKyA0MikKKyNkZWZpbmUgSVJRX1VTQlBXUgkJKElSUV9CT0FSRF9FTkQgKyA0MykKKyNkZWZpbmUgSVJRX0hDSU0JCShJUlFfQk9BUkRfRU5EICsgNDQpCisjZGVmaW5lIElSUV9IQ0lCVUZGQUNDCQkoSVJRX0JPQVJEX0VORCArIDQ1KQorI2RlZmluZSBJUlFfSENJUk1UV0tQCQkoSVJRX0JPQVJEX0VORCArIDQ2KQorI2RlZmluZSBJUlFfTkhDSU1GQ0lSCQkoSVJRX0JPQVJEX0VORCArIDQ3KQorI2RlZmluZSBJUlFfVVNCX1BPUlRfUkVTVU1FCShJUlFfQk9BUkRfRU5EICsgNDgpCisjZGVmaW5lIElSUV9TMF9SRUFEWV9OSU5UCShJUlFfQk9BUkRfRU5EICsgNDkpCisjZGVmaW5lIElSUV9TMV9SRUFEWV9OSU5UCShJUlFfQk9BUkRfRU5EICsgNTApCisjZGVmaW5lIElSUV9TMF9DRF9WQUxJRAkJKElSUV9CT0FSRF9FTkQgKyA1MSkKKyNkZWZpbmUgSVJRX1MxX0NEX1ZBTElECQkoSVJRX0JPQVJEX0VORCArIDUyKQorI2RlZmluZSBJUlFfUzBfQlZEMV9TVFNDSEcJKElSUV9CT0FSRF9FTkQgKyA1MykKKyNkZWZpbmUgSVJRX1MxX0JWRDFfU1RTQ0hHCShJUlFfQk9BUkRfRU5EICsgNTQpCisKKyNkZWZpbmUgSVJRX0xPQ09NT19TVEFSVAkoSVJRX0JPQVJEX0VORCkKKyNkZWZpbmUgSVJRX0xPQ09NT19LRVkJCShJUlFfQk9BUkRfRU5EICsgMCkKKyNkZWZpbmUgSVJRX0xPQ09NT19HUElPMAkoSVJRX0JPQVJEX0VORCArIDEpCisjZGVmaW5lIElSUV9MT0NPTU9fR1BJTzEJKElSUV9CT0FSRF9FTkQgKyAyKQorI2RlZmluZSBJUlFfTE9DT01PX0dQSU8yCShJUlFfQk9BUkRfRU5EICsgMykKKyNkZWZpbmUgSVJRX0xPQ09NT19HUElPMwkoSVJRX0JPQVJEX0VORCArIDQpCisjZGVmaW5lIElSUV9MT0NPTU9fR1BJTzQJKElSUV9CT0FSRF9FTkQgKyA1KQorI2RlZmluZSBJUlFfTE9DT01PX0dQSU81CShJUlFfQk9BUkRfRU5EICsgNikKKyNkZWZpbmUgSVJRX0xPQ09NT19HUElPNgkoSVJRX0JPQVJEX0VORCArIDcpCisjZGVmaW5lIElSUV9MT0NPTU9fR1BJTzcJKElSUV9CT0FSRF9FTkQgKyA4KQorI2RlZmluZSBJUlFfTE9DT01PX0dQSU84CShJUlFfQk9BUkRfRU5EICsgOSkKKyNkZWZpbmUgSVJRX0xPQ09NT19HUElPOQkoSVJRX0JPQVJEX0VORCArIDEwKQorI2RlZmluZSBJUlFfTE9DT01PX0dQSU8xMAkoSVJRX0JPQVJEX0VORCArIDExKQorI2RlZmluZSBJUlFfTE9DT01PX0dQSU8xMQkoSVJRX0JPQVJEX0VORCArIDEyKQorI2RlZmluZSBJUlFfTE9DT01PX0dQSU8xMgkoSVJRX0JPQVJEX0VORCArIDEzKQorI2RlZmluZSBJUlFfTE9DT01PX0dQSU8xMwkoSVJRX0JPQVJEX0VORCArIDE0KQorI2RlZmluZSBJUlFfTE9DT01PX0dQSU8xNAkoSVJRX0JPQVJEX0VORCArIDE1KQorI2RlZmluZSBJUlFfTE9DT01PX0dQSU8xNQkoSVJRX0JPQVJEX0VORCArIDE2KQorI2RlZmluZSBJUlFfTE9DT01PX0xUCQkoSVJRX0JPQVJEX0VORCArIDE3KQorI2RlZmluZSBJUlFfTE9DT01PX1NQSV9SRlIJKElSUV9CT0FSRF9FTkQgKyAxOCkKKyNkZWZpbmUgSVJRX0xPQ09NT19TUElfUkZXCShJUlFfQk9BUkRfRU5EICsgMTkpCisjZGVmaW5lIElSUV9MT0NPTU9fU1BJX09WUk4JKElSUV9CT0FSRF9FTkQgKyAyMCkKKyNkZWZpbmUgSVJRX0xPQ09NT19TUElfVEVORAkoSVJRX0JPQVJEX0VORCArIDIxKQorCisvKgorICogRmlndXJlIG91dCB0aGUgTUFYIElSUSBudW1iZXIuCisgKgorICogSWYgd2UgaGF2ZSBhbiBTQTExMTEsIHRoZSBtYXggSVJRIGlzIFMxX0JWRDFfU1RTQ0hHKzEuCisgKiBJZiB3ZSBoYXZlIGFuIExvQ29NbywgdGhlIG1heCBJUlEgaXMgSVJRX0xPQ09NT19TUElfVEVORCsxCisgKiBPdGhlcndpc2UsIHdlIGhhdmUgdGhlIHN0YW5kYXJkIElSUXMgb25seS4KKyAqLworI2lmZGVmIENPTkZJR19TQTExMTEKKyNkZWZpbmUgTlJfSVJRUwkJCShJUlFfUzFfQlZEMV9TVFNDSEcgKyAxKQorI2VsaWYgZGVmaW5lZChDT05GSUdfU0hBUlBfTE9DT01PKQorI2RlZmluZSBOUl9JUlFTCQkJKElSUV9MT0NPTU9fU1BJX1RFTkQgKyAxKQorI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9MVUJCT0NLKSB8fCBcCisgICAgICBkZWZpbmVkKENPTkZJR19NQUNIX01BSU5TVE9ORSkKKyNkZWZpbmUgTlJfSVJRUwkJCShJUlFfQk9BUkRfRU5EKQorI2Vsc2UKKyNkZWZpbmUgTlJfSVJRUwkJCShJUlFfQk9BUkRfU1RBUlQpCisjZW5kaWYKKworLyoKKyAqIEJvYXJkIHNwZWNpZmljIElSUXMuICBEZWZpbmUgdGhlbSBoZXJlLgorICogRG8gbm90IHN1cnJvdW5kIHRoZW0gd2l0aCBpZmRlZnMuCisgKi8KKyNkZWZpbmUgTFVCQk9DS19JUlEoeCkJCShJUlFfQk9BUkRfU1RBUlQgKyAoeCkpCisjZGVmaW5lIExVQkJPQ0tfU0RfSVJRCQlMVUJCT0NLX0lSUSgwKQorI2RlZmluZSBMVUJCT0NLX1NBMTExMV9JUlEJTFVCQk9DS19JUlEoMSkKKyNkZWZpbmUgTFVCQk9DS19VU0JfSVJRCQlMVUJCT0NLX0lSUSgyKSAgLyogdXNiIGNvbm5lY3QgKi8KKyNkZWZpbmUgTFVCQk9DS19FVEhfSVJRCQlMVUJCT0NLX0lSUSgzKQorI2RlZmluZSBMVUJCT0NLX1VDQjE0MDBfSVJRCUxVQkJPQ0tfSVJRKDQpCisjZGVmaW5lIExVQkJPQ0tfQkJfSVJRCQlMVUJCT0NLX0lSUSg1KQorI2RlZmluZSBMVUJCT0NLX1VTQl9ESVNDX0lSUQlMVUJCT0NLX0lSUSg2KSAgLyogdXNiIGRpc2Nvbm5lY3QgKi8KKyNkZWZpbmUgTFVCQk9DS19MQVNUX0lSUQlMVUJCT0NLX0lSUSg2KQorCisjZGVmaW5lIE1BSU5TVE9ORV9JUlEoeCkJKElSUV9CT0FSRF9TVEFSVCArICh4KSkKKyNkZWZpbmUgTUFJTlNUT05FX01NQ19JUlEJTUFJTlNUT05FX0lSUSgwKQorI2RlZmluZSBNQUlOU1RPTkVfVVNJTV9JUlEJTUFJTlNUT05FX0lSUSgxKQorI2RlZmluZSBNQUlOU1RPTkVfVVNCQ19JUlEJTUFJTlNUT05FX0lSUSgyKQorI2RlZmluZSBNQUlOU1RPTkVfRVRIRVJORVRfSVJRCU1BSU5TVE9ORV9JUlEoMykKKyNkZWZpbmUgTUFJTlNUT05FX0FDOTdfSVJRCU1BSU5TVE9ORV9JUlEoNCkKKyNkZWZpbmUgTUFJTlNUT05FX1BFTl9JUlEJTUFJTlNUT05FX0lSUSg1KQorI2RlZmluZSBNQUlOU1RPTkVfTVNJTlNfSVJRCU1BSU5TVE9ORV9JUlEoNikKKyNkZWZpbmUgTUFJTlNUT05FX0VYQlJEX0lSUQlNQUlOU1RPTkVfSVJRKDcpCisjZGVmaW5lIE1BSU5TVE9ORV9TMF9DRF9JUlEJTUFJTlNUT05FX0lSUSg5KQorI2RlZmluZSBNQUlOU1RPTkVfUzBfU1RTQ0hHX0lSUQlNQUlOU1RPTkVfSVJRKDEwKQorI2RlZmluZSBNQUlOU1RPTkVfUzBfSVJRCU1BSU5TVE9ORV9JUlEoMTEpCisjZGVmaW5lIE1BSU5TVE9ORV9TMV9DRF9JUlEJTUFJTlNUT05FX0lSUSgxMykKKyNkZWZpbmUgTUFJTlNUT05FX1MxX1NUU0NIR19JUlEJTUFJTlNUT05FX0lSUSgxNCkKKyNkZWZpbmUgTUFJTlNUT05FX1MxX0lSUQlNQUlOU1RPTkVfSVJRKDE1KQorCisvKiBMb0NvTW8gSW50ZXJydXB0cyAoQ09ORklHX1NIQVJQX0xPQ09NTykgKi8KKyNkZWZpbmUgSVJRX0xPQ09NT19LRVlfQkFTRQkoSVJRX0JPQVJEX1NUQVJUICsgMCkKKyNkZWZpbmUgSVJRX0xPQ09NT19HUElPX0JBU0UJKElSUV9CT0FSRF9TVEFSVCArIDEpCisjZGVmaW5lIElSUV9MT0NPTU9fTFRfQkFTRQkoSVJRX0JPQVJEX1NUQVJUICsgMikKKyNkZWZpbmUgSVJRX0xPQ09NT19TUElfQkFTRQkoSVJRX0JPQVJEX1NUQVJUICsgMykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9sdWJib2NrLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvbHViYm9jay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExZWU3MzUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvbHViYm9jay5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL2x1YmJvY2suaAorICoKKyAqICBBdXRob3I6CU5pY29sYXMgUGl0cmUKKyAqICBDcmVhdGVkOglKdW4gMTUsIDIwMDEKKyAqICBDb3B5cmlnaHQ6CU1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2RlZmluZSBMVUJCT0NLX0VUSF9QSFlTCVBYQV9DUzNfUEhZUworCisjZGVmaW5lIExVQkJPQ0tfRlBHQV9QSFlTCVBYQV9DUzJfUEhZUworI2RlZmluZSBMVUJCT0NLX0ZQR0FfVklSVAkoMHhmMDAwMDAwMCkKKyNkZWZpbmUgTFVCX1AyVih4KQkJKCh4KSAtIExVQkJPQ0tfRlBHQV9QSFlTICsgTFVCQk9DS19GUEdBX1ZJUlQpCisjZGVmaW5lIExVQl9WMlAoeCkJCSgoeCkgLSBMVUJCT0NLX0ZQR0FfVklSVCArIExVQkJPQ0tfRlBHQV9QSFlTKQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworIyAgZGVmaW5lIF9fTFVCX1JFRyh4KQkJKCooKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKilMVUJfUDJWKHgpKSkKKyNlbHNlCisjICBkZWZpbmUgX19MVUJfUkVHKHgpCQlMVUJfUDJWKHgpCisjZW5kaWYKKworLyogRlBHQSByZWdpc3RlciB2aXJ0dWFsIGFkZHJlc3NlcyAqLworI2RlZmluZSBMVUJfV0hPQU1JCQlfX0xVQl9SRUcoTFVCQk9DS19GUEdBX1BIWVMgKyAweDAwMCkKKyNkZWZpbmUgTFVCX0hFWExFRAkJX19MVUJfUkVHKExVQkJPQ0tfRlBHQV9QSFlTICsgMHgwMTApCisjZGVmaW5lIExVQl9ESVNDX0JMTktfTEVECV9fTFVCX1JFRyhMVUJCT0NLX0ZQR0FfUEhZUyArIDB4MDQwKQorI2RlZmluZSBMVUJfQ09ORl9TV0lUQ0hFUwlfX0xVQl9SRUcoTFVCQk9DS19GUEdBX1BIWVMgKyAweDA1MCkKKyNkZWZpbmUgTFVCX1VTRVJfU1dJVENIRVMJX19MVUJfUkVHKExVQkJPQ0tfRlBHQV9QSFlTICsgMHgwNjApCisjZGVmaW5lIExVQl9NSVNDX1dSCQlfX0xVQl9SRUcoTFVCQk9DS19GUEdBX1BIWVMgKyAweDA4MCkKKyNkZWZpbmUgTFVCX01JU0NfUkQJCV9fTFVCX1JFRyhMVUJCT0NLX0ZQR0FfUEhZUyArIDB4MDkwKQorI2RlZmluZSBMVUJfSVJRX01BU0tfRU4JCV9fTFVCX1JFRyhMVUJCT0NLX0ZQR0FfUEhZUyArIDB4MGMwKQorI2RlZmluZSBMVUJfSVJRX1NFVF9DTFIJCV9fTFVCX1JFRyhMVUJCT0NLX0ZQR0FfUEhZUyArIDB4MGQwKQorI2RlZmluZSBMVUJfR1AJCQlfX0xVQl9SRUcoTFVCQk9DS19GUEdBX1BIWVMgKyAweDEwMCkKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK2V4dGVybiB2b2lkIGx1YmJvY2tfc2V0X21pc2Nfd3IodW5zaWduZWQgaW50IG1hc2ssIHVuc2lnbmVkIGludCBzZXQpOworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvbWFpbnN0b25lLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvbWFpbnN0b25lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRjODYyYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9tYWluc3RvbmUuaApAQCAtMCwwICsxLDEyMCBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvbWFpbnN0b25lLmgKKyAqCisgKiAgQXV0aG9yOglOaWNvbGFzIFBpdHJlCisgKiAgQ3JlYXRlZDoJTm92IDE0LCAyMDAyCisgKiAgQ29weXJpZ2h0OglNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgQVNNX0FSQ0hfTUFJTlNUT05FX0gKKyNkZWZpbmUgQVNNX0FSQ0hfTUFJTlNUT05FX0gKKworI2RlZmluZSBNU1RfRVRIX1BIWVMJCVBYQV9DUzRfUEhZUworCisjZGVmaW5lIE1TVF9GUEdBX1BIWVMJCVBYQV9DUzJfUEhZUworI2RlZmluZSBNU1RfRlBHQV9WSVJUCQkoMHhmMDAwMDAwMCkKKyNkZWZpbmUgTVNUX1AyVih4KQkJKCh4KSAtIE1TVF9GUEdBX1BIWVMgKyBNU1RfRlBHQV9WSVJUKQorI2RlZmluZSBNU1RfVjJQKHgpCQkoKHgpIC0gTVNUX0ZQR0FfVklSVCArIE1TVF9GUEdBX1BIWVMpCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjIGRlZmluZSBfX01TVF9SRUcoeCkJCSgqKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopTVNUX1AyVih4KSkpCisjZWxzZQorIyBkZWZpbmUgX19NU1RfUkVHKHgpCQlNU1RfUDJWKHgpCisjZW5kaWYKKworLyogYm9hcmQgbGV2ZWwgcmVnaXN0ZXJzIGluIHRoZSBGUEdBICovCisKKyNkZWZpbmUgTVNUX0xFRERBVDEJCV9fTVNUX1JFRygweDA4MDAwMDEwKQorI2RlZmluZSBNU1RfTEVEREFUMgkJX19NU1RfUkVHKDB4MDgwMDAwMTQpCisjZGVmaW5lIE1TVF9MRURDVFJMCQlfX01TVF9SRUcoMHgwODAwMDA0MCkKKyNkZWZpbmUgTVNUX0dQU1dSCQlfX01TVF9SRUcoMHgwODAwMDA2MCkKKyNkZWZpbmUgTVNUX01TQ1dSMQkJX19NU1RfUkVHKDB4MDgwMDAwODApCisjZGVmaW5lIE1TVF9NU0NXUjIJCV9fTVNUX1JFRygweDA4MDAwMDg0KQorI2RlZmluZSBNU1RfTVNDV1IzCQlfX01TVF9SRUcoMHgwODAwMDA4OCkKKyNkZWZpbmUgTVNUX01TQ1JECQlfX01TVF9SRUcoMHgwODAwMDA5MCkKKyNkZWZpbmUgTVNUX0lOVE1TS0VOQQkJX19NU1RfUkVHKDB4MDgwMDAwYzApCisjZGVmaW5lIE1TVF9JTlRTRVRDTFIJCV9fTVNUX1JFRygweDA4MDAwMGQwKQorI2RlZmluZSBNU1RfUENNQ0lBMAkJX19NU1RfUkVHKDB4MDgwMDAwZTApCisjZGVmaW5lIE1TVF9QQ01DSUExCQlfX01TVF9SRUcoMHgwODAwMDBlNCkKKworI2RlZmluZSBNU1RfTVNDV1IxX0NBTUVSQV9PTgkoMSA8PCAxNSkgIC8qIENhbWVyYSBpbnRlcmZhY2UgcG93ZXIgY29udHJvbCAqLworI2RlZmluZSBNU1RfTVNDV1IxX0NBTUVSQV9TRUwJKDEgPDwgMTQpICAvKiBDYW1lcmEgaW50ZXJmYWNlIG11eCBjb250cm9sICovCisjZGVmaW5lIE1TVF9NU0NXUjFfTENEX0NUTAkoMSA8PCAxMykgIC8qIEdlbmVyYWwtcHVycG9zZSBMQ0QgY29udHJvbCAqLworI2RlZmluZSBNU1RfTVNDV1IxX01TX09OCSgxIDw8IDEyKSAgLyogTWVtb3J5IFN0aWNrIHBvd2VyIGNvbnRyb2wgKi8KKyNkZWZpbmUgTVNUX01TQ1dSMV9NTUNfT04JKDEgPDwgMTEpICAvKiBNdWx0aU1lZGlhQ2FyZCogcG93ZXIgY29udHJvbCAqLworI2RlZmluZSBNU1RfTVNDV1IxX01TX1NFTAkoMSA8PCAxMCkgIC8qIFNEL01TIG11bHRpcGxleGVyIGNvbnRyb2wgKi8KKyNkZWZpbmUgTVNUX01TQ1dSMV9CQl9TRUwJKDEgPDwgOSkgICAvKiBQQ01DSUEvQmFzZWJhbmQgbXVsdGlwbGV4ZXIgKi8KKyNkZWZpbmUgTVNUX01TQ1dSMV9CVF9PTgkoMSA8PCA4KSAgIC8qIEJsdWV0b290aCBVQVJUIHRyYW5zY2VpdmVyICovCisjZGVmaW5lIE1TVF9NU0NXUjFfQlREVFIJKDEgPDwgNykgICAvKiBCbHVldG9vdGggVUFSVCBEVFIgKi8KKworI2RlZmluZSBNU1RfTVNDV1IxX0lSREFfTUFTSwkoMyA8PCA1KSAgIC8qIElyREEgdHJhbnNjZWl2ZXIgbW9kZSAqLworI2RlZmluZSBNU1RfTVNDV1IxX0lSREFfRlVMTAkoMCA8PCA1KSAgIC8qIGZ1bGwgZGlzdGFuY2UgcG93ZXIgKi8KKyNkZWZpbmUgTVNUX01TQ1dSMV9JUkRBX09GRgkoMSA8PCA1KSAgIC8qIHNodXRkb3duICovCisjZGVmaW5lIE1TVF9NU0NXUjFfSVJEQV9NRUQJKDIgPDwgNSkgICAvKiAyLzMgZGlzdGFuY2UgcG93ZXIgKi8KKyNkZWZpbmUgTVNUX01TQ1dSMV9JUkRBX0xPVwkoMyA8PCA1KSAgIC8qIDEvMyBkaXN0YW5jZSBwb3dlciAqLworCisjZGVmaW5lIE1TVF9NU0NXUjFfSVJEQV9GSVIJKDEgPDwgNCkgICAvKiBJckRBIHRyYW5zY2VpdmVyIFNJUi9GSVIgKi8KKyNkZWZpbmUgTVNUX01TQ1dSMV9HUkVFTkxFRAkoMSA8PCAzKSAgIC8qIExFRCBEMSBjb250cm9sICovCisjZGVmaW5lIE1TVF9NU0NXUjFfUERDX0NUTAkoMSA8PCAyKSAgIC8qIHJlc2VydmVkICovCisjZGVmaW5lIE1TVF9NU0NXUjFfTVRSX09OCSgxIDw8IDEpICAgLyogU2lsZW50IGFsZXJ0IG1vdG9yICovCisjZGVmaW5lIE1TVF9NU0NXUjFfU1lTUkVTRVQJKDEgPDwgMCkgICAvKiBTeXN0ZW0gcmVzZXQgKi8KKworI2RlZmluZSBNU1RfTVNDV1IyX1VTQl9PVEdfUlNUCSgxIDw8IDYpICAgLyogVVNCIE9uIFRoZSBHbyByZXNldCAqLworI2RlZmluZSBNU1RfTVNDV1IyX1VTQl9PVEdfU0VMCSgxIDw8IDUpICAgLyogVVNCIE9uIFRoZSBHbyBjb250cm9sICovCisjZGVmaW5lIE1TVF9NU0NXUjJfblVTQkNfU0MJKDEgPDwgNCkgICAvKiBVU0IgY2xpZW50IHNvZnQgY29ubmVjdCBjb250cm9sICovCisjZGVmaW5lIE1TVF9NU0NXUjJfSTJTX1NQS1JPRkYJKDEgPDwgMykgICAvKiBJMlMgQ09ERUMgYW1wbGlmaWVyIGNvbnRyb2wgKi8KKyNkZWZpbmUgTVNUX01TQ1dSMl9BQzk3X1NQS1JPRkYJKDEgPDwgMikgICAvKiBBQzk3IENPREVDIGFtcGxpZmllciBjb250cm9sICovCisjZGVmaW5lIE1TVF9NU0NXUjJfUkFESU9fUFdSCSgxIDw8IDEpICAgLyogUmFkaW8gbW9kdWxlIHBvd2VyIGNvbnRyb2wgKi8KKyNkZWZpbmUgTVNUX01TQ1dSMl9SQURJT19XQUtFCSgxIDw8IDApICAgLyogUmFkaW8gbW9kdWxlIHdha2UtdXAgc2lnbmFsICovCisKKyNkZWZpbmUgTVNUX01TQ1dSM19HUElPX1JFU0VUX0VOCSgxIDw8IDIpIC8qIEVuYWJsZSBHUElPIFJlc2V0ICovCisjZGVmaW5lIE1TVF9NU0NXUjNfR1BJT19SRVNFVAkJKDEgPDwgMSkgLyogSW5pdGlhdGUgYSBHUElPIFJlc2V0ICovCisjZGVmaW5lIE1TVF9NU0NXUjNfQ09NTVNfU1dfUkVTRVQJKDEgPDwgMCkgLyogQ29tbXVuaWNhdGlvbnMgUHJvY2Vzc29yIFJlc2V0IENvbnRyb2wgKi8KKworI2RlZmluZSBNU1RfTVNDUkRfblBFTklSUQkoMSA8PCA5KSAgIC8qIEFESTc4NzMqIG5QRU5JUlEgc2lnbmFsICovCisjZGVmaW5lIE1TVF9NU0NSRF9uTUVNU1RLX0NECSgxIDw8IDgpICAgLyogTWVtb3J5IFN0aWNrIGRldGVjdGlvbiBzaWduYWwgKi8KKyNkZWZpbmUgTVNUX01TQ1JEX25NTUNfQ0QJKDEgPDwgNykgICAvKiBTRC9NTUMgY2FyZCBkZXRlY3Rpb24gc2lnbmFsICovCisjZGVmaW5lIE1TVF9NU0NSRF9uVVNJTV9DRAkoMSA8PCA2KSAgIC8qIFVTSU0gY2FyZCBkZXRlY3Rpb24gc2lnbmFsICovCisjZGVmaW5lIE1TVF9NU0NSRF9VU0JfQ0JMCSgxIDw8IDUpICAgLyogVVNCIGNsaWVudCBjYWJsZSBzdGF0dXMgKi8KKyNkZWZpbmUgTVNUX01TQ1JEX1RTX0JVU1kJKDEgPDwgNCkgICAvKiBBREk3ODczIGJ1c3kgKi8KKyNkZWZpbmUgTVNUX01TQ1JEX0JURFNSCQkoMSA8PCAzKSAgIC8qIEJsdWV0b290aCBVQVJUIERTUiAqLworI2RlZmluZSBNU1RfTVNDUkRfQlRSSQkJKDEgPDwgMikgICAvKiBCbHVldG9vdGggVUFSVCBSaW5nIEluZGljYXRvciAqLworI2RlZmluZSBNU1RfTVNDUkRfQlREQ0QJCSgxIDw8IDEpICAgLyogQmx1ZXRvb3RoIFVBUlQgRENEICovCisjZGVmaW5lIE1TVF9NU0NSRF9uTU1DX1dQCSgxIDw8IDApICAgLyogU0QvTU1DIHdyaXRlLXByb3RlY3Qgc3RhdHVzICovCisKKyNkZWZpbmUgTVNUX0lOVF9TMV9JUlEJCSgxIDw8IDE1KSAgLyogUENNQ0lBIHNvY2tldCAxIElSUSAqLworI2RlZmluZSBNU1RfSU5UX1MxX1NUU0NIRwkoMSA8PCAxNCkgIC8qIFBDTUNJQSBzb2NrZXQgMSBzdGF0dXMgY2hhbmdlZCAqLworI2RlZmluZSBNU1RfSU5UX1MxX0NECQkoMSA8PCAxMykgIC8qIFBDTUNJQSBzb2NrZXQgMSBjYXJkIGRldGVjdGlvbiAqLworI2RlZmluZSBNU1RfSU5UX1MwX0lSUQkJKDEgPDwgMTEpICAvKiBQQ01DSUEgc29ja2V0IDAgSVJRICovCisjZGVmaW5lIE1TVF9JTlRfUzBfU1RTQ0hHCSgxIDw8IDEwKSAgLyogUENNQ0lBIHNvY2tldCAwIHN0YXR1cyBjaGFuZ2VkICovCisjZGVmaW5lIE1TVF9JTlRfUzBfQ0QJCSgxIDw8IDkpICAgLyogUENNQ0lBIHNvY2tldCAwIGNhcmQgZGV0ZWN0aW9uICovCisjZGVmaW5lIE1TVF9JTlRfbkVYQlJEX0lOVAkoMSA8PCA3KSAgIC8qIEV4cGFuc2lvbiBib2FyZCBJUlEgKi8KKyNkZWZpbmUgTVNUX0lOVF9NU0lOUwkJKDEgPDwgNikgICAvKiBNZW1vcnkgU3RpY2sqIGRldGVjdGlvbiAqLworI2RlZmluZSBNU1RfSU5UX1BFTklSUQkJKDEgPDwgNSkgICAvKiBBREk3ODczKiB0b3VjaC1zY3JlZW4gSVJRICovCisjZGVmaW5lIE1TVF9JTlRfQUM5NwkJKDEgPDwgNCkgICAvKiBBQyc5NyBDT0RFQyBJUlEgKi8KKyNkZWZpbmUgTVNUX0lOVF9FVEhFUk5FVAkoMSA8PCAzKSAgIC8qIEV0aGVybmV0IGNvbnRyb2xsZXIgSVJRICovCisjZGVmaW5lIE1TVF9JTlRfVVNCQwkJKDEgPDwgMikgICAvKiBVU0IgY2xpZW50IGNhYmxlIGRldGVjdGlvbiBJUlEgKi8KKyNkZWZpbmUgTVNUX0lOVF9VU0lNCQkoMSA8PCAxKSAgIC8qIFVTSU0gY2FyZCBkZXRlY3Rpb24gSVJRICovCisjZGVmaW5lIE1TVF9JTlRfTU1DCQkoMSA8PCAwKSAgIC8qIE1NQy9TRCBjYXJkIGRldGVjdGlvbiBJUlEgKi8KKworI2RlZmluZSBNU1RfUENNQ0lBX25JUlEJCSgxIDw8IDEwKSAgLyogSVJRIC8gcmVhZHkgc2lnbmFsICovCisjZGVmaW5lIE1TVF9QQ01DSUFfblNQS1JfQlZEMgkoMSA8PCA5KSAgIC8qIFZERCBzZW5zZSAvIGRpZ2l0YWwgc3BlYWtlciAqLworI2RlZmluZSBNU1RfUENNQ0lBX25TVFNDSEdfQlZEMQkoMSA8PCA4KSAgIC8qIFZERCBzZW5zZSAvIGNhcmQgc3RhdHVzIGNoYW5nZWQgKi8KKyNkZWZpbmUgTVNUX1BDTUNJQV9uVlMyCQkoMSA8PCA3KSAgIC8qIFZTUyB2b2x0YWdlIHNlbnNlICovCisjZGVmaW5lIE1TVF9QQ01DSUFfblZTMQkJKDEgPDwgNikgICAvKiBWU1Mgdm9sdGFnZSBzZW5zZSAqLworI2RlZmluZSBNU1RfUENNQ0lBX25DRAkJKDEgPDwgNSkgICAvKiBDYXJkIGRldGVjdGlvbiBzaWduYWwgKi8KKyNkZWZpbmUgTVNUX1BDTUNJQV9SRVNFVAkoMSA8PCA0KSAgIC8qIENhcmQgcmVzZXQgc2lnbmFsICovCisjZGVmaW5lIE1TVF9QQ01DSUFfUFdSX01BU0sJKDB4MDAwZikgICAvKiBNQVgxNjAyIHBvd2VyLXN1cHBseSBjb250cm9scyAqLworCisjZGVmaW5lIE1TVF9QQ01DSUFfUFdSX1ZQUF8wICAgIDB4MAkgICAvKiB2b2x0YWdlIFZQUCA9IDBWICovCisjZGVmaW5lIE1TVF9QQ01DSUFfUFdSX1ZQUF8xMjAgIDB4MiAJICAgLyogdm9sdGFnZSBWUFAgPSAxMlYqLworI2RlZmluZSBNU1RfUENNQ0lBX1BXUl9WUFBfVkNDICAweDEJICAgLyogdm9sdGFnZSBWUFAgPSBWQ0MgKi8KKyNkZWZpbmUgTVNUX1BDTUNJQV9QV1JfVkNDXzAgICAgMHgwCSAgIC8qIHZvbHRhZ2UgVkNDID0gMFYgKi8KKyNkZWZpbmUgTVNUX1BDTUNJQV9QV1JfVkNDXzMzICAgMHg4CSAgIC8qIHZvbHRhZ2UgVkNDID0gMy4zViAqLworI2RlZmluZSBNU1RfUENNQ0lBX1BXUl9WQ0NfNTAgICAweDQJICAgLyogdm9sdGFnZSBWQ0MgPSA1LjBWICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL21lbW9yeS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL21lbW9yeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxN2E4MGIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvbWVtb3J5LmgKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvbWVtb3J5LmgKKyAqCisgKiBBdXRob3I6CU5pY29sYXMgUGl0cmUKKyAqIENvcHlyaWdodDoJKEMpIDIwMDEgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfTUVNT1JZX0gKKyNkZWZpbmUgX19BU01fQVJDSF9NRU1PUllfSAorCisvKgorICogUGh5c2ljYWwgRFJBTSBvZmZzZXQuCisgKi8KKyNkZWZpbmUgUEhZU19PRkZTRVQJKDB4YTAwMDAwMDBVTCkKKworLyoKKyAqIFZpcnR1YWwgdmlldyA8LT4gRE1BIHZpZXcgbWVtb3J5IGFkZHJlc3MgdHJhbnNsYXRpb25zCisgKiB2aXJ0X3RvX2J1czogVXNlZCB0byB0cmFuc2xhdGUgdGhlIHZpcnR1YWwgYWRkcmVzcyB0byBhbgorICoJCWFkZHJlc3Mgc3VpdGFibGUgdG8gYmUgcGFzc2VkIHRvIHNldF9kbWFfYWRkcgorICogYnVzX3RvX3ZpcnQ6IFVzZWQgdG8gY29udmVydCBhbiBhZGRyZXNzIGZvciBETUEgb3BlcmF0aW9ucworICoJCXRvIGFuIGFkZHJlc3MgdGhhdCB0aGUga2VybmVsIGNhbiB1c2UuCisgKi8KKyNkZWZpbmUgX192aXJ0X3RvX2J1cyh4KQkgX192aXJ0X3RvX3BoeXMoeCkKKyNkZWZpbmUgX19idXNfdG9fdmlydCh4KQkgX19waHlzX3RvX3ZpcnQoeCkKKworI2lmZGVmIENPTkZJR19ESVNDT05USUdNRU0KKy8qCisgKiBUaGUgbm9kZXMgYXJlIG1hdGNoZWQgd2l0aCB0aGUgcGh5c2ljYWwgU0RSQU0gYmFua3MgYXMgZm9sbG93czoKKyAqCisgKiAJbm9kZSAwOiAgMHhhMDAwMDAwMC0weGEzZmZmZmZmCS0tPiAgMHhjMDAwMDAwMC0weGMzZmZmZmZmCisgKiAJbm9kZSAxOiAgMHhhNDAwMDAwMC0weGE3ZmZmZmZmCS0tPiAgMHhjNDAwMDAwMC0weGM3ZmZmZmZmCisgKiAJbm9kZSAyOiAgMHhhODAwMDAwMC0weGFiZmZmZmZmCS0tPiAgMHhjODAwMDAwMC0weGNiZmZmZmZmCisgKiAJbm9kZSAzOiAgMHhhYzAwMDAwMC0weGFmZmZmZmZmCS0tPiAgMHhjYzAwMDAwMC0weGNmZmZmZmZmCisgKi8KKworLyoKKyAqIEdpdmVuIGEga2VybmVsIGFkZHJlc3MsIGZpbmQgdGhlIGhvbWUgbm9kZSBvZiB0aGUgdW5kZXJseWluZyBtZW1vcnkuCisgKi8KKyNkZWZpbmUgS1ZBRERSX1RPX05JRChhZGRyKSAoKCh1bnNpZ25lZCBsb25nKShhZGRyKSAtIFBBR0VfT0ZGU0VUKSA+PiAyNikKKworLyoKKyAqIEdpdmVuIGEgcGFnZSBmcmFtZSBudW1iZXIsIGNvbnZlcnQgaXQgdG8gYSBub2RlIGlkLgorICovCisjZGVmaW5lIFBGTl9UT19OSUQocGZuKQkJKCgocGZuKSAtIFBIWVNfUEZOX09GRlNFVCkgPj4gKDI2IC0gUEFHRV9TSElGVCkpCisKKy8qCisgKiBHaXZlbiBhIGthZGRyLCBBRERSX1RPX01BUEJBU0UgZmluZHMgdGhlIG93bmluZyBub2RlIG9mIHRoZSBtZW1vcnkKKyAqIGFuZCByZXR1cm5zIHRoZSBtZW1fbWFwIG9mIHRoYXQgbm9kZS4KKyAqLworI2RlZmluZSBBRERSX1RPX01BUEJBU0Uoa2FkZHIpCU5PREVfTUVNX01BUChLVkFERFJfVE9fTklEKGthZGRyKSkKKworLyoKKyAqIEdpdmVuIGEgcGFnZSBmcmFtZSBudW1iZXIsIGZpbmQgdGhlIG93bmluZyBub2RlIG9mIHRoZSBtZW1vcnkKKyAqIGFuZCByZXR1cm5zIHRoZSBtZW1fbWFwIG9mIHRoYXQgbm9kZS4KKyAqLworI2RlZmluZSBQRk5fVE9fTUFQQkFTRShwZm4pCU5PREVfTUVNX01BUChQRk5fVE9fTklEKHBmbikpCisKKy8qCisgKiBHaXZlbiBhIGthZGRyLCBMT0NBTF9NRU1fTUFQIGZpbmRzIHRoZSBvd25pbmcgbm9kZSBvZiB0aGUgbWVtb3J5CisgKiBhbmQgcmV0dXJucyB0aGUgaW5kZXggY29ycmVzcG9uZGluZyB0byB0aGUgYXBwcm9wcmlhdGUgcGFnZSBpbiB0aGUKKyAqIG5vZGUncyBtZW1fbWFwLgorICovCisjZGVmaW5lIExPQ0FMX01BUF9OUihhZGRyKSBcCisJKCgodW5zaWduZWQgbG9uZykoYWRkcikgJiAweDAzZmZmZmZmKSA+PiBQQUdFX1NISUZUKQorCisjZWxzZQorCisjZGVmaW5lIFBGTl9UT19OSUQoYWRkcikJKDApCisKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9tbWMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9tbWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDkyZWE3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL21tYy5oCkBAIC0wLDAgKzEsMTkgQEAKKyNpZm5kZWYgQVNNQVJNX0FSQ0hfTU1DX0gKKyNkZWZpbmUgQVNNQVJNX0FSQ0hfTU1DX0gKKworI2luY2x1ZGUgPGxpbnV4L21tYy9wcm90b2NvbC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorCitzdHJ1Y3QgZGV2aWNlOworc3RydWN0IG1tY19ob3N0OworCitzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgeworCXVuc2lnbmVkIGludCBvY3JfbWFzazsJCQkvKiBhdmFpbGFibGUgdm9sdGFnZXMgKi8KKwlpbnQgKCppbml0KShzdHJ1Y3QgZGV2aWNlICosIGlycXJldHVybl90ICgqKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKiksIHZvaWQgKik7CisJdm9pZCAoKnNldHBvd2VyKShzdHJ1Y3QgZGV2aWNlICosIHVuc2lnbmVkIGludCk7CisJdm9pZCAoKmV4aXQpKHN0cnVjdCBkZXZpY2UgKiwgdm9pZCAqKTsKK307CisKK2V4dGVybiB2b2lkIHB4YV9zZXRfbWNpX2luZm8oc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhICppbmZvKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvcGFyYW0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxOTdkODIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvcGFyYW0uaApAQCAtMCwwICsxLDMgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3BhcmFtLmgKKyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3Bvb2RsZS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3Bvb2RsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4YmRhOWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvcG9vZGxlLmgKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9wb29kbGUuaAorICoKKyAqIE1heSBiZSBjb3BpZWQgb3IgbW9kaWZpZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgbGludXgvQ09QWUlORyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAqCisgKiBCYXNlZCBvbjoKKyAqICAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL2NvbGxpZS5oCisgKgorICogQ2hhbmdlTG9nOgorICogICAwNC0wNi0yMDAxIExpbmVvIEphcGFuLCBJbmMuCisgKiAgIDA0LTE2LTIwMDEgU0hBUlAgQ29ycG9yYXRpb24KKyAqICAgVXBkYXRlIHRvIDIuNiBKb2huIExlbnoKKyAqLworI2lmbmRlZiBfX0FTTV9BUkNIX1BPT0RMRV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfUE9PRExFX0ggIDEKKworLyoKKyAqIEdQSU9zCisgKi8KKy8qIFBYQSBHUElPcyAqLworI2RlZmluZSBQT09ETEVfR1BJT19PTl9LRVkJCSgwKQorI2RlZmluZSBQT09ETEVfR1BJT19BQ19JTgkJKDEpCisjZGVmaW5lIFBPT0RMRV9HUElPX0NPCQkJMTYKKyNkZWZpbmUgUE9PRExFX0dQSU9fVFBfSU5UCQkoNSkKKyNkZWZpbmUgUE9PRExFX0dQSU9fV0FLRVVQCQkoMTEpCS8qIGNoYW5nZSBiYXR0ZXJ5ICovCisjZGVmaW5lIFBPT0RMRV9HUElPX0dBX0lOVAkJKDEwKQorI2RlZmluZSBQT09ETEVfR1BJT19JUl9PTgkJKDIyKQorI2RlZmluZSBQT09ETEVfR1BJT19IUF9JTgkJKDQpCisjZGVmaW5lIFBPT0RMRV9HUElPX0NGX0lSUQkJKDE3KQorI2RlZmluZSBQT09ETEVfR1BJT19DRl9DRAkJKDE0KQorI2RlZmluZSBQT09ETEVfR1BJT19DRl9TVFNDSEcJCSgxNCkKKyNkZWZpbmUgUE9PRExFX0dQSU9fU0RfUFdSCQkoMzMpCisjZGVmaW5lIFBPT0RMRV9HUElPX25TRF9DTEsJCSg2KQorI2RlZmluZSBQT09ETEVfR1BJT19uU0RfV1AJCSg3KQorI2RlZmluZSBQT09ETEVfR1BJT19uU0RfSU5UCQkoOCkKKyNkZWZpbmUgUE9PRExFX0dQSU9fblNEX0RFVEVDVAkJKDkpCisjZGVmaW5lIFBPT0RMRV9HUElPX01BSU5fQkFUX0xPVwkoMTMpCisjZGVmaW5lIFBPT0RMRV9HUElPX0JBVF9DT1ZFUgkJKDEzKQorI2RlZmluZSBQT09ETEVfR1BJT19BRENfVEVNUF9PTgkJKDIxKQorI2RlZmluZSBQT09ETEVfR1BJT19CWVBBU1NfT04JCSgzNikKKyNkZWZpbmUgUE9PRExFX0dQSU9fQ0hSR19PTgkJKDM4KQorI2RlZmluZSBQT09ETEVfR1BJT19DSFJHX0ZVTEwJCSgxNikKKworLyogUFhBIEdQSU9zICovCisjZGVmaW5lIFBPT0RMRV9JUlFfR1BJT19PTl9LRVkJCUlSUV9HUElPMAorI2RlZmluZSBQT09ETEVfSVJRX0dQSU9fQUNfSU4JCUlSUV9HUElPMQorI2RlZmluZSBQT09ETEVfSVJRX0dQSU9fSFBfSU4JCUlSUV9HUElPNAorI2RlZmluZSBQT09ETEVfSVJRX0dQSU9fQ08JCUlSUV9HUElPMTYKKyNkZWZpbmUgUE9PRExFX0lSUV9HUElPX1RQX0lOVAkJSVJRX0dQSU81CisjZGVmaW5lIFBPT0RMRV9JUlFfR1BJT19XQUtFVVAJCUlSUV9HUElPMTEKKyNkZWZpbmUgUE9PRExFX0lSUV9HUElPX0dBX0lOVAkJSVJRX0dQSU8xMAorI2RlZmluZSBQT09ETEVfSVJRX0dQSU9fQ0ZfSVJRCQlJUlFfR1BJTzE3CisjZGVmaW5lIFBPT0RMRV9JUlFfR1BJT19DRl9DRAkJSVJRX0dQSU8xNAorI2RlZmluZSBQT09ETEVfSVJRX0dQSU9fblNEX0lOVAkJSVJRX0dQSU84CisjZGVmaW5lIFBPT0RMRV9JUlFfR1BJT19uU0RfREVURUNUCUlSUV9HUElPOQorI2RlZmluZSBQT09ETEVfSVJRX0dQSU9fTUFJTl9CQVRfTE9XCUlSUV9HUElPMTMKKworLyogU0NPT1AgR1BJT3MgKi8KKyNkZWZpbmUgUE9PRExFX1NDT09QX0NIQVJHRV9PTglTQ09PUF9HUENSX1BBMTEKKyNkZWZpbmUgUE9PRExFX1NDT09QX0NQNDAxCVNDT09QX0dQQ1JfUEExMworI2RlZmluZSBQT09ETEVfU0NPT1BfVlBFTglTQ09PUF9HUENSX1BBMTgKKyNkZWZpbmUgUE9PRExFX1NDT09QX0xfUENMSwlTQ09PUF9HUENSX1BBMjAKKyNkZWZpbmUgUE9PRExFX1NDT09QX0xfTENMSwlTQ09PUF9HUENSX1BBMjEKKyNkZWZpbmUgUE9PRExFX1NDT09QX0hTX09VVAlTQ09PUF9HUENSX1BBMjIKKworI2RlZmluZSBQT09ETEVfU0NPT1BfSU9fRElSCSggUE9PRExFX1NDT09QX1ZQRU4gfCBQT09ETEVfU0NPT1BfSFNfT1VUICkKKyNkZWZpbmUgUE9PRExFX1NDT09QX0lPX09VVAkoIDAgKQorCisjZW5kaWYgLyogX19BU01fQVJDSF9QT09ETEVfSCAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9weGEtcmVncy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3B4YS1yZWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk3NDFkMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9weGEtcmVncy5oCkBAIC0wLDAgKzEsMjI1MSBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvcHhhLXJlZ3MuaAorICoKKyAqICBBdXRob3I6CU5pY29sYXMgUGl0cmUKKyAqICBDcmVhdGVkOglKdW4gMTUsIDIwMDEKKyAqICBDb3B5cmlnaHQ6CU1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfX1BYQV9SRUdTX0gKKyNkZWZpbmUgX19QWEFfUkVHU19ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworLyoKKyAqIFBYQSBDaGlwIHNlbGVjdHMKKyAqLworCisjZGVmaW5lIFBYQV9DUzBfUEhZUwkweDAwMDAwMDAwCisjZGVmaW5lIFBYQV9DUzFfUEhZUwkweDA0MDAwMDAwCisjZGVmaW5lIFBYQV9DUzJfUEhZUwkweDA4MDAwMDAwCisjZGVmaW5lIFBYQV9DUzNfUEhZUwkweDBDMDAwMDAwCisjZGVmaW5lIFBYQV9DUzRfUEhZUwkweDEwMDAwMDAwCisjZGVmaW5lIFBYQV9DUzVfUEhZUwkweDE0MDAwMDAwCisKKworLyoKKyAqIFBlcnNvbmFsIENvbXB1dGVyIE1lbW9yeSBDYXJkIEludGVybmF0aW9uYWwgQXNzb2NpYXRpb24gKFBDTUNJQSkgc29ja2V0cworICovCisKKyNkZWZpbmUgUENNQ0lBUHJ0U3AJMHgwNDAwMDAwMAkvKiBQQ01DSUEgUGFydGl0aW9uIFNwYWNlIFtieXRlXSAgICovCisjZGVmaW5lIFBDTUNJQVNwCSg0KlBDTUNJQVBydFNwKQkvKiBQQ01DSUEgU3BhY2UgW2J5dGVdICAgICAgICAgICAgICovCisjZGVmaW5lIFBDTUNJQUlPU3AJUENNQ0lBUHJ0U3AJLyogUENNQ0lBIEkvTyBTcGFjZSBbYnl0ZV0gICAgICAgICAqLworI2RlZmluZSBQQ01DSUFBdHRyU3AJUENNQ0lBUHJ0U3AJLyogUENNQ0lBIEF0dHJpYnV0ZSBTcGFjZSBbYnl0ZV0gICAqLworI2RlZmluZSBQQ01DSUFNZW1TcAlQQ01DSUFQcnRTcAkvKiBQQ01DSUEgTWVtb3J5IFNwYWNlIFtieXRlXSAgICAgICovCisKKyNkZWZpbmUgUENNQ0lBMFNwCVBDTUNJQVNwCS8qIFBDTUNJQSAwIFNwYWNlIFtieXRlXSAgICAgICAgICAgKi8KKyNkZWZpbmUgUENNQ0lBMElPU3AJUENNQ0lBSU9TcAkvKiBQQ01DSUEgMCBJL08gU3BhY2UgW2J5dGVdICAgICAgICovCisjZGVmaW5lIFBDTUNJQTBBdHRyU3AJUENNQ0lBQXR0clNwCS8qIFBDTUNJQSAwIEF0dHJpYnV0ZSBTcGFjZSBbYnl0ZV0gKi8KKyNkZWZpbmUgUENNQ0lBME1lbVNwCVBDTUNJQU1lbVNwCS8qIFBDTUNJQSAwIE1lbW9yeSBTcGFjZSBbYnl0ZV0gICAgKi8KKworI2RlZmluZSBQQ01DSUExU3AJUENNQ0lBU3AJLyogUENNQ0lBIDEgU3BhY2UgW2J5dGVdICAgICAgICAgICAqLworI2RlZmluZSBQQ01DSUExSU9TcAlQQ01DSUFJT1NwCS8qIFBDTUNJQSAxIEkvTyBTcGFjZSBbYnl0ZV0gICAgICAgKi8KKyNkZWZpbmUgUENNQ0lBMUF0dHJTcAlQQ01DSUFBdHRyU3AJLyogUENNQ0lBIDEgQXR0cmlidXRlIFNwYWNlIFtieXRlXSAqLworI2RlZmluZSBQQ01DSUExTWVtU3AJUENNQ0lBTWVtU3AJLyogUENNQ0lBIDEgTWVtb3J5IFNwYWNlIFtieXRlXSAgICAqLworCisjZGVmaW5lIF9QQ01DSUEoTmIpCSAgICAgICAgCS8qIFBDTUNJQSBbMC4uMV0gICAgICAgICAgICAgICAgICAgKi8gXAorICAgICAgICAgICAgICAgIAkoMHgyMDAwMDAwMCArIChOYikqUENNQ0lBU3ApCisjZGVmaW5lIF9QQ01DSUFJTyhOYikJX1BDTUNJQSAoTmIpCS8qIFBDTUNJQSBJL08gWzAuLjFdICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX1BDTUNJQUF0dHIoTmIpCSAgICAgICAgCS8qIFBDTUNJQSBBdHRyaWJ1dGUgWzAuLjFdICAgICAgICAgKi8gXAorICAgICAgICAgICAgICAgIAkoX1BDTUNJQSAoTmIpICsgMipQQ01DSUFQcnRTcCkKKyNkZWZpbmUgX1BDTUNJQU1lbShOYikJICAgICAgICAJLyogUENNQ0lBIE1lbW9yeSBbMC4uMV0gICAgICAgICAgICAqLyBcCisgICAgICAgICAgICAgICAgCShfUENNQ0lBIChOYikgKyAzKlBDTUNJQVBydFNwKQorCisjZGVmaW5lIF9QQ01DSUEwCV9QQ01DSUEgKDApCS8qIFBDTUNJQSAwICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX1BDTUNJQTBJTwlfUENNQ0lBSU8gKDApCS8qIFBDTUNJQSAwIEkvTyAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX1BDTUNJQTBBdHRyCV9QQ01DSUFBdHRyICgwKQkvKiBQQ01DSUEgMCBBdHRyaWJ1dGUgICAgICAgICAgICAgICovCisjZGVmaW5lIF9QQ01DSUEwTWVtCV9QQ01DSUFNZW0gKDApCS8qIFBDTUNJQSAwIE1lbW9yeSAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBfUENNQ0lBMQlfUENNQ0lBICgxKQkvKiBQQ01DSUEgMSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9QQ01DSUExSU8JX1BDTUNJQUlPICgxKQkvKiBQQ01DSUEgMSBJL08gICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9QQ01DSUExQXR0cglfUENNQ0lBQXR0ciAoMSkJLyogUENNQ0lBIDEgQXR0cmlidXRlICAgICAgICAgICAgICAqLworI2RlZmluZSBfUENNQ0lBMU1lbQlfUENNQ0lBTWVtICgxKQkvKiBQQ01DSUEgMSBNZW1vcnkgICAgICAgICAgICAgICAgICovCisKKworCisvKgorICogRE1BIENvbnRyb2xsZXIKKyAqLworCisjZGVmaW5lIERDU1IwCQlfX1JFRygweDQwMDAwMDAwKSAgLyogRE1BIENvbnRyb2wgLyBTdGF0dXMgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMCAqLworI2RlZmluZSBEQ1NSMQkJX19SRUcoMHg0MDAwMDAwNCkgIC8qIERNQSBDb250cm9sIC8gU3RhdHVzIFJlZ2lzdGVyIGZvciBDaGFubmVsIDEgKi8KKyNkZWZpbmUgRENTUjIJCV9fUkVHKDB4NDAwMDAwMDgpICAvKiBETUEgQ29udHJvbCAvIFN0YXR1cyBSZWdpc3RlciBmb3IgQ2hhbm5lbCAyICovCisjZGVmaW5lIERDU1IzCQlfX1JFRygweDQwMDAwMDBjKSAgLyogRE1BIENvbnRyb2wgLyBTdGF0dXMgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMyAqLworI2RlZmluZSBEQ1NSNAkJX19SRUcoMHg0MDAwMDAxMCkgIC8qIERNQSBDb250cm9sIC8gU3RhdHVzIFJlZ2lzdGVyIGZvciBDaGFubmVsIDQgKi8KKyNkZWZpbmUgRENTUjUJCV9fUkVHKDB4NDAwMDAwMTQpICAvKiBETUEgQ29udHJvbCAvIFN0YXR1cyBSZWdpc3RlciBmb3IgQ2hhbm5lbCA1ICovCisjZGVmaW5lIERDU1I2CQlfX1JFRygweDQwMDAwMDE4KSAgLyogRE1BIENvbnRyb2wgLyBTdGF0dXMgUmVnaXN0ZXIgZm9yIENoYW5uZWwgNiAqLworI2RlZmluZSBEQ1NSNwkJX19SRUcoMHg0MDAwMDAxYykgIC8qIERNQSBDb250cm9sIC8gU3RhdHVzIFJlZ2lzdGVyIGZvciBDaGFubmVsIDcgKi8KKyNkZWZpbmUgRENTUjgJCV9fUkVHKDB4NDAwMDAwMjApICAvKiBETUEgQ29udHJvbCAvIFN0YXR1cyBSZWdpc3RlciBmb3IgQ2hhbm5lbCA4ICovCisjZGVmaW5lIERDU1I5CQlfX1JFRygweDQwMDAwMDI0KSAgLyogRE1BIENvbnRyb2wgLyBTdGF0dXMgUmVnaXN0ZXIgZm9yIENoYW5uZWwgOSAqLworI2RlZmluZSBEQ1NSMTAJCV9fUkVHKDB4NDAwMDAwMjgpICAvKiBETUEgQ29udHJvbCAvIFN0YXR1cyBSZWdpc3RlciBmb3IgQ2hhbm5lbCAxMCAqLworI2RlZmluZSBEQ1NSMTEJCV9fUkVHKDB4NDAwMDAwMmMpICAvKiBETUEgQ29udHJvbCAvIFN0YXR1cyBSZWdpc3RlciBmb3IgQ2hhbm5lbCAxMSAqLworI2RlZmluZSBEQ1NSMTIJCV9fUkVHKDB4NDAwMDAwMzApICAvKiBETUEgQ29udHJvbCAvIFN0YXR1cyBSZWdpc3RlciBmb3IgQ2hhbm5lbCAxMiAqLworI2RlZmluZSBEQ1NSMTMJCV9fUkVHKDB4NDAwMDAwMzQpICAvKiBETUEgQ29udHJvbCAvIFN0YXR1cyBSZWdpc3RlciBmb3IgQ2hhbm5lbCAxMyAqLworI2RlZmluZSBEQ1NSMTQJCV9fUkVHKDB4NDAwMDAwMzgpICAvKiBETUEgQ29udHJvbCAvIFN0YXR1cyBSZWdpc3RlciBmb3IgQ2hhbm5lbCAxNCAqLworI2RlZmluZSBEQ1NSMTUJCV9fUkVHKDB4NDAwMDAwM2MpICAvKiBETUEgQ29udHJvbCAvIFN0YXR1cyBSZWdpc3RlciBmb3IgQ2hhbm5lbCAxNSAqLworCisjZGVmaW5lIERDU1IoeCkJCV9fUkVHMigweDQwMDAwMDAwLCAoeCkgPDwgMikKKworI2RlZmluZSBEQ1NSX1JVTgkoMSA8PCAzMSkJLyogUnVuIEJpdCAocmVhZCAvIHdyaXRlKSAqLworI2RlZmluZSBEQ1NSX05PREVTQwkoMSA8PCAzMCkJLyogTm8tRGVzY3JpcHRvciBGZXRjaCAocmVhZCAvIHdyaXRlKSAqLworI2RlZmluZSBEQ1NSX1NUT1BJUlFFTgkoMSA8PCAyOSkJLyogU3RvcCBJbnRlcnJ1cHQgRW5hYmxlIChyZWFkIC8gd3JpdGUpICovCisjaWZkZWYgQ09ORklHX1BYQTI3eAorI2RlZmluZSBEQ1NSX0VPUklSUUVOCSgxIDw8IDI4KSAgICAgICAvKiBFbmQgb2YgUmVjZWl2ZSBJbnRlcnJ1cHQgRW5hYmxlIChSL1cpICovCisjZGVmaW5lIERDU1JfRU9SSk1QRU4JKDEgPDwgMjcpICAgICAgIC8qIEp1bXAgdG8gbmV4dCBkZXNjcmlwdG9yIG9uIEVPUiAqLworI2RlZmluZSBEQ1NSX0VPUlNUT1BFTgkoMSA8PCAyNikgICAgICAgLyogU1RPUCBvbiBhbiBFT1IgKi8KKyNkZWZpbmUgRENTUl9TRVRDTVBTVAkoMSA8PCAyNSkgICAgICAgLyogU2V0IERlc2NyaXB0b3IgQ29tcGFyZSBTdGF0dXMgKi8KKyNkZWZpbmUgRENTUl9DTFJDTVBTVAkoMSA8PCAyNCkgICAgICAgLyogQ2xlYXIgRGVzY3JpcHRvciBDb21wYXJlIFN0YXR1cyAqLworI2RlZmluZSBEQ1NSX0NNUFNUCSgxIDw8IDEwKSAgICAgICAvKiBUaGUgRGVzY3JpcHRvciBDb21wYXJlIFN0YXR1cyAqLworI2RlZmluZSBEQ1NSX0VOUklOVFIJKDEgPDwgOSkgICAgICAgIC8qIFRoZSBlbmQgb2YgUmVjZWl2ZSAqLworI2VuZGlmCisjZGVmaW5lIERDU1JfUkVRUEVORAkoMSA8PCA4KQkvKiBSZXF1ZXN0IFBlbmRpbmcgKHJlYWQtb25seSkgKi8KKyNkZWZpbmUgRENTUl9TVE9QU1RBVEUJKDEgPDwgMykJLyogU3RvcCBTdGF0ZSAocmVhZC1vbmx5KSAqLworI2RlZmluZSBEQ1NSX0VORElOVFIJKDEgPDwgMikJLyogRW5kIEludGVycnVwdCAocmVhZCAvIHdyaXRlKSAqLworI2RlZmluZSBEQ1NSX1NUQVJUSU5UUgkoMSA8PCAxKQkvKiBTdGFydCBJbnRlcnJ1cHQgKHJlYWQgLyB3cml0ZSkgKi8KKyNkZWZpbmUgRENTUl9CVVNFUlIJKDEgPDwgMCkJLyogQnVzIEVycm9yIEludGVycnVwdCAocmVhZCAvIHdyaXRlKSAqLworCisjZGVmaW5lIERJTlQJCV9fUkVHKDB4NDAwMDAwZjApICAvKiBETUEgSW50ZXJydXB0IFJlZ2lzdGVyICovCisKKyNkZWZpbmUgRFJDTVIobikJX19SRUcyKDB4NDAwMDAxMDAsIChuKTw8MikKKyNkZWZpbmUgRFJDTVIwCQlfX1JFRygweDQwMDAwMTAwKSAgLyogUmVxdWVzdCB0byBDaGFubmVsIE1hcCBSZWdpc3RlciBmb3IgRFJFUSAwICovCisjZGVmaW5lIERSQ01SMQkJX19SRUcoMHg0MDAwMDEwNCkgIC8qIFJlcXVlc3QgdG8gQ2hhbm5lbCBNYXAgUmVnaXN0ZXIgZm9yIERSRVEgMSAqLworI2RlZmluZSBEUkNNUjIJCV9fUkVHKDB4NDAwMDAxMDgpICAvKiBSZXF1ZXN0IHRvIENoYW5uZWwgTWFwIFJlZ2lzdGVyIGZvciBJMlMgcmVjZWl2ZSBSZXF1ZXN0ICovCisjZGVmaW5lIERSQ01SMwkJX19SRUcoMHg0MDAwMDEwYykgIC8qIFJlcXVlc3QgdG8gQ2hhbm5lbCBNYXAgUmVnaXN0ZXIgZm9yIEkyUyB0cmFuc21pdCBSZXF1ZXN0ICovCisjZGVmaW5lIERSQ01SNAkJX19SRUcoMHg0MDAwMDExMCkgIC8qIFJlcXVlc3QgdG8gQ2hhbm5lbCBNYXAgUmVnaXN0ZXIgZm9yIEJUVUFSVCByZWNlaXZlIFJlcXVlc3QgKi8KKyNkZWZpbmUgRFJDTVI1CQlfX1JFRygweDQwMDAwMTE0KSAgLyogUmVxdWVzdCB0byBDaGFubmVsIE1hcCBSZWdpc3RlciBmb3IgQlRVQVJUIHRyYW5zbWl0IFJlcXVlc3QuICovCisjZGVmaW5lIERSQ01SNgkJX19SRUcoMHg0MDAwMDExOCkgIC8qIFJlcXVlc3QgdG8gQ2hhbm5lbCBNYXAgUmVnaXN0ZXIgZm9yIEZGVUFSVCByZWNlaXZlIFJlcXVlc3QgKi8KKyNkZWZpbmUgRFJDTVI3CQlfX1JFRygweDQwMDAwMTFjKSAgLyogUmVxdWVzdCB0byBDaGFubmVsIE1hcCBSZWdpc3RlciBmb3IgRkZVQVJUIHRyYW5zbWl0IFJlcXVlc3QgKi8KKyNkZWZpbmUgRFJDTVI4CQlfX1JFRygweDQwMDAwMTIwKSAgLyogUmVxdWVzdCB0byBDaGFubmVsIE1hcCBSZWdpc3RlciBmb3IgQUM5NyBtaWNyb3Bob25lIFJlcXVlc3QgKi8KKyNkZWZpbmUgRFJDTVI5CQlfX1JFRygweDQwMDAwMTI0KSAgLyogUmVxdWVzdCB0byBDaGFubmVsIE1hcCBSZWdpc3RlciBmb3IgQUM5NyBtb2RlbSByZWNlaXZlIFJlcXVlc3QgKi8KKyNkZWZpbmUgRFJDTVIxMAkJX19SRUcoMHg0MDAwMDEyOCkgIC8qIFJlcXVlc3QgdG8gQ2hhbm5lbCBNYXAgUmVnaXN0ZXIgZm9yIEFDOTcgbW9kZW0gdHJhbnNtaXQgUmVxdWVzdCAqLworI2RlZmluZSBEUkNNUjExCQlfX1JFRygweDQwMDAwMTJjKSAgLyogUmVxdWVzdCB0byBDaGFubmVsIE1hcCBSZWdpc3RlciBmb3IgQUM5NyBhdWRpbyByZWNlaXZlIFJlcXVlc3QgKi8KKyNkZWZpbmUgRFJDTVIxMgkJX19SRUcoMHg0MDAwMDEzMCkgIC8qIFJlcXVlc3QgdG8gQ2hhbm5lbCBNYXAgUmVnaXN0ZXIgZm9yIEFDOTcgYXVkaW8gdHJhbnNtaXQgUmVxdWVzdCAqLworI2RlZmluZSBEUkNNUjEzCQlfX1JFRygweDQwMDAwMTM0KSAgLyogUmVxdWVzdCB0byBDaGFubmVsIE1hcCBSZWdpc3RlciBmb3IgU1NQIHJlY2VpdmUgUmVxdWVzdCAqLworI2RlZmluZSBEUkNNUjE0CQlfX1JFRygweDQwMDAwMTM4KSAgLyogUmVxdWVzdCB0byBDaGFubmVsIE1hcCBSZWdpc3RlciBmb3IgU1NQIHRyYW5zbWl0IFJlcXVlc3QgKi8KKyNkZWZpbmUgRFJDTVIxNQkJX19SRUcoMHg0MDAwMDEzYykgIC8qIFJlc2VydmVkICovCisjZGVmaW5lIERSQ01SMTYJCV9fUkVHKDB4NDAwMDAxNDApICAvKiBSZXNlcnZlZCAqLworI2RlZmluZSBEUkNNUjE3CQlfX1JFRygweDQwMDAwMTQ0KSAgLyogUmVxdWVzdCB0byBDaGFubmVsIE1hcCBSZWdpc3RlciBmb3IgSUNQIHJlY2VpdmUgUmVxdWVzdCAqLworI2RlZmluZSBEUkNNUjE4CQlfX1JFRygweDQwMDAwMTQ4KSAgLyogUmVxdWVzdCB0byBDaGFubmVsIE1hcCBSZWdpc3RlciBmb3IgSUNQIHRyYW5zbWl0IFJlcXVlc3QgKi8KKyNkZWZpbmUgRFJDTVIxOQkJX19SRUcoMHg0MDAwMDE0YykgIC8qIFJlcXVlc3QgdG8gQ2hhbm5lbCBNYXAgUmVnaXN0ZXIgZm9yIFNUVUFSVCByZWNlaXZlIFJlcXVlc3QgKi8KKyNkZWZpbmUgRFJDTVIyMAkJX19SRUcoMHg0MDAwMDE1MCkgIC8qIFJlcXVlc3QgdG8gQ2hhbm5lbCBNYXAgUmVnaXN0ZXIgZm9yIFNUVUFSVCB0cmFuc21pdCBSZXF1ZXN0ICovCisjZGVmaW5lIERSQ01SMjEJCV9fUkVHKDB4NDAwMDAxNTQpICAvKiBSZXF1ZXN0IHRvIENoYW5uZWwgTWFwIFJlZ2lzdGVyIGZvciBNTUMgcmVjZWl2ZSBSZXF1ZXN0ICovCisjZGVmaW5lIERSQ01SMjIJCV9fUkVHKDB4NDAwMDAxNTgpICAvKiBSZXF1ZXN0IHRvIENoYW5uZWwgTWFwIFJlZ2lzdGVyIGZvciBNTUMgdHJhbnNtaXQgUmVxdWVzdCAqLworI2RlZmluZSBEUkNNUjIzCQlfX1JFRygweDQwMDAwMTVjKSAgLyogUmVzZXJ2ZWQgKi8KKyNkZWZpbmUgRFJDTVIyNAkJX19SRUcoMHg0MDAwMDE2MCkgIC8qIFJlc2VydmVkICovCisjZGVmaW5lIERSQ01SMjUJCV9fUkVHKDB4NDAwMDAxNjQpICAvKiBSZXF1ZXN0IHRvIENoYW5uZWwgTWFwIFJlZ2lzdGVyIGZvciBVU0IgZW5kcG9pbnQgMSBSZXF1ZXN0ICovCisjZGVmaW5lIERSQ01SMjYJCV9fUkVHKDB4NDAwMDAxNjgpICAvKiBSZXF1ZXN0IHRvIENoYW5uZWwgTWFwIFJlZ2lzdGVyIGZvciBVU0IgZW5kcG9pbnQgMiBSZXF1ZXN0ICovCisjZGVmaW5lIERSQ01SMjcJCV9fUkVHKDB4NDAwMDAxNkMpICAvKiBSZXF1ZXN0IHRvIENoYW5uZWwgTWFwIFJlZ2lzdGVyIGZvciBVU0IgZW5kcG9pbnQgMyBSZXF1ZXN0ICovCisjZGVmaW5lIERSQ01SMjgJCV9fUkVHKDB4NDAwMDAxNzApICAvKiBSZXF1ZXN0IHRvIENoYW5uZWwgTWFwIFJlZ2lzdGVyIGZvciBVU0IgZW5kcG9pbnQgNCBSZXF1ZXN0ICovCisjZGVmaW5lIERSQ01SMjkJCV9fUkVHKDB4NDAwMDAxNzQpICAvKiBSZXNlcnZlZCAqLworI2RlZmluZSBEUkNNUjMwCQlfX1JFRygweDQwMDAwMTc4KSAgLyogUmVxdWVzdCB0byBDaGFubmVsIE1hcCBSZWdpc3RlciBmb3IgVVNCIGVuZHBvaW50IDYgUmVxdWVzdCAqLworI2RlZmluZSBEUkNNUjMxCQlfX1JFRygweDQwMDAwMTdDKSAgLyogUmVxdWVzdCB0byBDaGFubmVsIE1hcCBSZWdpc3RlciBmb3IgVVNCIGVuZHBvaW50IDcgUmVxdWVzdCAqLworI2RlZmluZSBEUkNNUjMyCQlfX1JFRygweDQwMDAwMTgwKSAgLyogUmVxdWVzdCB0byBDaGFubmVsIE1hcCBSZWdpc3RlciBmb3IgVVNCIGVuZHBvaW50IDggUmVxdWVzdCAqLworI2RlZmluZSBEUkNNUjMzCQlfX1JFRygweDQwMDAwMTg0KSAgLyogUmVxdWVzdCB0byBDaGFubmVsIE1hcCBSZWdpc3RlciBmb3IgVVNCIGVuZHBvaW50IDkgUmVxdWVzdCAqLworI2RlZmluZSBEUkNNUjM0CQlfX1JFRygweDQwMDAwMTg4KSAgLyogUmVzZXJ2ZWQgKi8KKyNkZWZpbmUgRFJDTVIzNQkJX19SRUcoMHg0MDAwMDE4QykgIC8qIFJlcXVlc3QgdG8gQ2hhbm5lbCBNYXAgUmVnaXN0ZXIgZm9yIFVTQiBlbmRwb2ludCAxMSBSZXF1ZXN0ICovCisjZGVmaW5lIERSQ01SMzYJCV9fUkVHKDB4NDAwMDAxOTApICAvKiBSZXF1ZXN0IHRvIENoYW5uZWwgTWFwIFJlZ2lzdGVyIGZvciBVU0IgZW5kcG9pbnQgMTIgUmVxdWVzdCAqLworI2RlZmluZSBEUkNNUjM3CQlfX1JFRygweDQwMDAwMTk0KSAgLyogUmVxdWVzdCB0byBDaGFubmVsIE1hcCBSZWdpc3RlciBmb3IgVVNCIGVuZHBvaW50IDEzIFJlcXVlc3QgKi8KKyNkZWZpbmUgRFJDTVIzOAkJX19SRUcoMHg0MDAwMDE5OCkgIC8qIFJlcXVlc3QgdG8gQ2hhbm5lbCBNYXAgUmVnaXN0ZXIgZm9yIFVTQiBlbmRwb2ludCAxNCBSZXF1ZXN0ICovCisjZGVmaW5lIERSQ01SMzkJCV9fUkVHKDB4NDAwMDAxOUMpICAvKiBSZXNlcnZlZCAqLworCisjZGVmaW5lIERSQ01SNjgJCV9fUkVHKDB4NDAwMDExMTApICAvKiBSZXF1ZXN0IHRvIENoYW5uZWwgTWFwIFJlZ2lzdGVyIGZvciBDYW1lcmEgRklGTyAwIFJlcXVlc3QgKi8KKyNkZWZpbmUgRFJDTVI2OQkJX19SRUcoMHg0MDAwMTExNCkgIC8qIFJlcXVlc3QgdG8gQ2hhbm5lbCBNYXAgUmVnaXN0ZXIgZm9yIENhbWVyYSBGSUZPIDEgUmVxdWVzdCAqLworI2RlZmluZSBEUkNNUjcwCQlfX1JFRygweDQwMDAxMTE4KSAgLyogUmVxdWVzdCB0byBDaGFubmVsIE1hcCBSZWdpc3RlciBmb3IgQ2FtZXJhIEZJRk8gMiBSZXF1ZXN0ICovCisKKyNkZWZpbmUgRFJDTVJSWFNBRFIJRFJDTVIyCisjZGVmaW5lIERSQ01SVFhTQURSCURSQ01SMworI2RlZmluZSBEUkNNUlJYQlRSQlIJRFJDTVI0CisjZGVmaW5lIERSQ01SVFhCVFRIUglEUkNNUjUKKyNkZWZpbmUgRFJDTVJSWEZGUkJSCURSQ01SNgorI2RlZmluZSBEUkNNUlRYRkZUSFIJRFJDTVI3CisjZGVmaW5lIERSQ01SUlhNQ0RSCURSQ01SOAorI2RlZmluZSBEUkNNUlJYTU9EUglEUkNNUjkKKyNkZWZpbmUgRFJDTVJUWE1PRFIJRFJDTVIxMAorI2RlZmluZSBEUkNNUlJYUENEUglEUkNNUjExCisjZGVmaW5lIERSQ01SVFhQQ0RSCURSQ01SMTIKKyNkZWZpbmUgRFJDTVJSWFNTRFIJRFJDTVIxMworI2RlZmluZSBEUkNNUlRYU1NEUglEUkNNUjE0CisjZGVmaW5lIERSQ01SUlhTUzJEUiAgIERSQ01SMTUKKyNkZWZpbmUgRFJDTVJUWFNTMkRSICAgRFJDTVIxNgorI2RlZmluZSBEUkNNUlJYSUNEUglEUkNNUjE3CisjZGVmaW5lIERSQ01SVFhJQ0RSCURSQ01SMTgKKyNkZWZpbmUgRFJDTVJSWFNUUkJSCURSQ01SMTkKKyNkZWZpbmUgRFJDTVJUWFNUVEhSCURSQ01SMjAKKyNkZWZpbmUgRFJDTVJSWE1NQwlEUkNNUjIxCisjZGVmaW5lIERSQ01SVFhNTUMJRFJDTVIyMgorI2RlZmluZSBEUkNNUlJYU1MzRFIgICBEUkNNUjY2CisjZGVmaW5lIERSQ01SVFhTUzNEUiAgIERSQ01SNjcKKyNkZWZpbmUgRFJDTVJVREMoeCkJRFJDTVIoKHgpICsgMjQpCisKKyNkZWZpbmUgRFJDTVJfTUFQVkxECSgxIDw8IDcpCS8qIE1hcCBWYWxpZCAocmVhZCAvIHdyaXRlKSAqLworI2RlZmluZSBEUkNNUl9DSExOVU0JMHgxZgkJLyogbWFzayBmb3IgQ2hhbm5lbCBOdW1iZXIgKHJlYWQgLyB3cml0ZSkgKi8KKworI2RlZmluZSBEREFEUjAJCV9fUkVHKDB4NDAwMDAyMDApICAvKiBETUEgRGVzY3JpcHRvciBBZGRyZXNzIFJlZ2lzdGVyIENoYW5uZWwgMCAqLworI2RlZmluZSBEU0FEUjAJCV9fUkVHKDB4NDAwMDAyMDQpICAvKiBETUEgU291cmNlIEFkZHJlc3MgUmVnaXN0ZXIgQ2hhbm5lbCAwICovCisjZGVmaW5lIERUQURSMAkJX19SRUcoMHg0MDAwMDIwOCkgIC8qIERNQSBUYXJnZXQgQWRkcmVzcyBSZWdpc3RlciBDaGFubmVsIDAgKi8KKyNkZWZpbmUgRENNRDAJCV9fUkVHKDB4NDAwMDAyMGMpICAvKiBETUEgQ29tbWFuZCBBZGRyZXNzIFJlZ2lzdGVyIENoYW5uZWwgMCAqLworI2RlZmluZSBEREFEUjEJCV9fUkVHKDB4NDAwMDAyMTApICAvKiBETUEgRGVzY3JpcHRvciBBZGRyZXNzIFJlZ2lzdGVyIENoYW5uZWwgMSAqLworI2RlZmluZSBEU0FEUjEJCV9fUkVHKDB4NDAwMDAyMTQpICAvKiBETUEgU291cmNlIEFkZHJlc3MgUmVnaXN0ZXIgQ2hhbm5lbCAxICovCisjZGVmaW5lIERUQURSMQkJX19SRUcoMHg0MDAwMDIxOCkgIC8qIERNQSBUYXJnZXQgQWRkcmVzcyBSZWdpc3RlciBDaGFubmVsIDEgKi8KKyNkZWZpbmUgRENNRDEJCV9fUkVHKDB4NDAwMDAyMWMpICAvKiBETUEgQ29tbWFuZCBBZGRyZXNzIFJlZ2lzdGVyIENoYW5uZWwgMSAqLworI2RlZmluZSBEREFEUjIJCV9fUkVHKDB4NDAwMDAyMjApICAvKiBETUEgRGVzY3JpcHRvciBBZGRyZXNzIFJlZ2lzdGVyIENoYW5uZWwgMiAqLworI2RlZmluZSBEU0FEUjIJCV9fUkVHKDB4NDAwMDAyMjQpICAvKiBETUEgU291cmNlIEFkZHJlc3MgUmVnaXN0ZXIgQ2hhbm5lbCAyICovCisjZGVmaW5lIERUQURSMgkJX19SRUcoMHg0MDAwMDIyOCkgIC8qIERNQSBUYXJnZXQgQWRkcmVzcyBSZWdpc3RlciBDaGFubmVsIDIgKi8KKyNkZWZpbmUgRENNRDIJCV9fUkVHKDB4NDAwMDAyMmMpICAvKiBETUEgQ29tbWFuZCBBZGRyZXNzIFJlZ2lzdGVyIENoYW5uZWwgMiAqLworI2RlZmluZSBEREFEUjMJCV9fUkVHKDB4NDAwMDAyMzApICAvKiBETUEgRGVzY3JpcHRvciBBZGRyZXNzIFJlZ2lzdGVyIENoYW5uZWwgMyAqLworI2RlZmluZSBEU0FEUjMJCV9fUkVHKDB4NDAwMDAyMzQpICAvKiBETUEgU291cmNlIEFkZHJlc3MgUmVnaXN0ZXIgQ2hhbm5lbCAzICovCisjZGVmaW5lIERUQURSMwkJX19SRUcoMHg0MDAwMDIzOCkgIC8qIERNQSBUYXJnZXQgQWRkcmVzcyBSZWdpc3RlciBDaGFubmVsIDMgKi8KKyNkZWZpbmUgRENNRDMJCV9fUkVHKDB4NDAwMDAyM2MpICAvKiBETUEgQ29tbWFuZCBBZGRyZXNzIFJlZ2lzdGVyIENoYW5uZWwgMyAqLworI2RlZmluZSBEREFEUjQJCV9fUkVHKDB4NDAwMDAyNDApICAvKiBETUEgRGVzY3JpcHRvciBBZGRyZXNzIFJlZ2lzdGVyIENoYW5uZWwgNCAqLworI2RlZmluZSBEU0FEUjQJCV9fUkVHKDB4NDAwMDAyNDQpICAvKiBETUEgU291cmNlIEFkZHJlc3MgUmVnaXN0ZXIgQ2hhbm5lbCA0ICovCisjZGVmaW5lIERUQURSNAkJX19SRUcoMHg0MDAwMDI0OCkgIC8qIERNQSBUYXJnZXQgQWRkcmVzcyBSZWdpc3RlciBDaGFubmVsIDQgKi8KKyNkZWZpbmUgRENNRDQJCV9fUkVHKDB4NDAwMDAyNGMpICAvKiBETUEgQ29tbWFuZCBBZGRyZXNzIFJlZ2lzdGVyIENoYW5uZWwgNCAqLworI2RlZmluZSBEREFEUjUJCV9fUkVHKDB4NDAwMDAyNTApICAvKiBETUEgRGVzY3JpcHRvciBBZGRyZXNzIFJlZ2lzdGVyIENoYW5uZWwgNSAqLworI2RlZmluZSBEU0FEUjUJCV9fUkVHKDB4NDAwMDAyNTQpICAvKiBETUEgU291cmNlIEFkZHJlc3MgUmVnaXN0ZXIgQ2hhbm5lbCA1ICovCisjZGVmaW5lIERUQURSNQkJX19SRUcoMHg0MDAwMDI1OCkgIC8qIERNQSBUYXJnZXQgQWRkcmVzcyBSZWdpc3RlciBDaGFubmVsIDUgKi8KKyNkZWZpbmUgRENNRDUJCV9fUkVHKDB4NDAwMDAyNWMpICAvKiBETUEgQ29tbWFuZCBBZGRyZXNzIFJlZ2lzdGVyIENoYW5uZWwgNSAqLworI2RlZmluZSBEREFEUjYJCV9fUkVHKDB4NDAwMDAyNjApICAvKiBETUEgRGVzY3JpcHRvciBBZGRyZXNzIFJlZ2lzdGVyIENoYW5uZWwgNiAqLworI2RlZmluZSBEU0FEUjYJCV9fUkVHKDB4NDAwMDAyNjQpICAvKiBETUEgU291cmNlIEFkZHJlc3MgUmVnaXN0ZXIgQ2hhbm5lbCA2ICovCisjZGVmaW5lIERUQURSNgkJX19SRUcoMHg0MDAwMDI2OCkgIC8qIERNQSBUYXJnZXQgQWRkcmVzcyBSZWdpc3RlciBDaGFubmVsIDYgKi8KKyNkZWZpbmUgRENNRDYJCV9fUkVHKDB4NDAwMDAyNmMpICAvKiBETUEgQ29tbWFuZCBBZGRyZXNzIFJlZ2lzdGVyIENoYW5uZWwgNiAqLworI2RlZmluZSBEREFEUjcJCV9fUkVHKDB4NDAwMDAyNzApICAvKiBETUEgRGVzY3JpcHRvciBBZGRyZXNzIFJlZ2lzdGVyIENoYW5uZWwgNyAqLworI2RlZmluZSBEU0FEUjcJCV9fUkVHKDB4NDAwMDAyNzQpICAvKiBETUEgU291cmNlIEFkZHJlc3MgUmVnaXN0ZXIgQ2hhbm5lbCA3ICovCisjZGVmaW5lIERUQURSNwkJX19SRUcoMHg0MDAwMDI3OCkgIC8qIERNQSBUYXJnZXQgQWRkcmVzcyBSZWdpc3RlciBDaGFubmVsIDcgKi8KKyNkZWZpbmUgRENNRDcJCV9fUkVHKDB4NDAwMDAyN2MpICAvKiBETUEgQ29tbWFuZCBBZGRyZXNzIFJlZ2lzdGVyIENoYW5uZWwgNyAqLworI2RlZmluZSBEREFEUjgJCV9fUkVHKDB4NDAwMDAyODApICAvKiBETUEgRGVzY3JpcHRvciBBZGRyZXNzIFJlZ2lzdGVyIENoYW5uZWwgOCAqLworI2RlZmluZSBEU0FEUjgJCV9fUkVHKDB4NDAwMDAyODQpICAvKiBETUEgU291cmNlIEFkZHJlc3MgUmVnaXN0ZXIgQ2hhbm5lbCA4ICovCisjZGVmaW5lIERUQURSOAkJX19SRUcoMHg0MDAwMDI4OCkgIC8qIERNQSBUYXJnZXQgQWRkcmVzcyBSZWdpc3RlciBDaGFubmVsIDggKi8KKyNkZWZpbmUgRENNRDgJCV9fUkVHKDB4NDAwMDAyOGMpICAvKiBETUEgQ29tbWFuZCBBZGRyZXNzIFJlZ2lzdGVyIENoYW5uZWwgOCAqLworI2RlZmluZSBEREFEUjkJCV9fUkVHKDB4NDAwMDAyOTApICAvKiBETUEgRGVzY3JpcHRvciBBZGRyZXNzIFJlZ2lzdGVyIENoYW5uZWwgOSAqLworI2RlZmluZSBEU0FEUjkJCV9fUkVHKDB4NDAwMDAyOTQpICAvKiBETUEgU291cmNlIEFkZHJlc3MgUmVnaXN0ZXIgQ2hhbm5lbCA5ICovCisjZGVmaW5lIERUQURSOQkJX19SRUcoMHg0MDAwMDI5OCkgIC8qIERNQSBUYXJnZXQgQWRkcmVzcyBSZWdpc3RlciBDaGFubmVsIDkgKi8KKyNkZWZpbmUgRENNRDkJCV9fUkVHKDB4NDAwMDAyOWMpICAvKiBETUEgQ29tbWFuZCBBZGRyZXNzIFJlZ2lzdGVyIENoYW5uZWwgOSAqLworI2RlZmluZSBEREFEUjEwCQlfX1JFRygweDQwMDAwMmEwKSAgLyogRE1BIERlc2NyaXB0b3IgQWRkcmVzcyBSZWdpc3RlciBDaGFubmVsIDEwICovCisjZGVmaW5lIERTQURSMTAJCV9fUkVHKDB4NDAwMDAyYTQpICAvKiBETUEgU291cmNlIEFkZHJlc3MgUmVnaXN0ZXIgQ2hhbm5lbCAxMCAqLworI2RlZmluZSBEVEFEUjEwCQlfX1JFRygweDQwMDAwMmE4KSAgLyogRE1BIFRhcmdldCBBZGRyZXNzIFJlZ2lzdGVyIENoYW5uZWwgMTAgKi8KKyNkZWZpbmUgRENNRDEwCQlfX1JFRygweDQwMDAwMmFjKSAgLyogRE1BIENvbW1hbmQgQWRkcmVzcyBSZWdpc3RlciBDaGFubmVsIDEwICovCisjZGVmaW5lIEREQURSMTEJCV9fUkVHKDB4NDAwMDAyYjApICAvKiBETUEgRGVzY3JpcHRvciBBZGRyZXNzIFJlZ2lzdGVyIENoYW5uZWwgMTEgKi8KKyNkZWZpbmUgRFNBRFIxMQkJX19SRUcoMHg0MDAwMDJiNCkgIC8qIERNQSBTb3VyY2UgQWRkcmVzcyBSZWdpc3RlciBDaGFubmVsIDExICovCisjZGVmaW5lIERUQURSMTEJCV9fUkVHKDB4NDAwMDAyYjgpICAvKiBETUEgVGFyZ2V0IEFkZHJlc3MgUmVnaXN0ZXIgQ2hhbm5lbCAxMSAqLworI2RlZmluZSBEQ01EMTEJCV9fUkVHKDB4NDAwMDAyYmMpICAvKiBETUEgQ29tbWFuZCBBZGRyZXNzIFJlZ2lzdGVyIENoYW5uZWwgMTEgKi8KKyNkZWZpbmUgRERBRFIxMgkJX19SRUcoMHg0MDAwMDJjMCkgIC8qIERNQSBEZXNjcmlwdG9yIEFkZHJlc3MgUmVnaXN0ZXIgQ2hhbm5lbCAxMiAqLworI2RlZmluZSBEU0FEUjEyCQlfX1JFRygweDQwMDAwMmM0KSAgLyogRE1BIFNvdXJjZSBBZGRyZXNzIFJlZ2lzdGVyIENoYW5uZWwgMTIgKi8KKyNkZWZpbmUgRFRBRFIxMgkJX19SRUcoMHg0MDAwMDJjOCkgIC8qIERNQSBUYXJnZXQgQWRkcmVzcyBSZWdpc3RlciBDaGFubmVsIDEyICovCisjZGVmaW5lIERDTUQxMgkJX19SRUcoMHg0MDAwMDJjYykgIC8qIERNQSBDb21tYW5kIEFkZHJlc3MgUmVnaXN0ZXIgQ2hhbm5lbCAxMiAqLworI2RlZmluZSBEREFEUjEzCQlfX1JFRygweDQwMDAwMmQwKSAgLyogRE1BIERlc2NyaXB0b3IgQWRkcmVzcyBSZWdpc3RlciBDaGFubmVsIDEzICovCisjZGVmaW5lIERTQURSMTMJCV9fUkVHKDB4NDAwMDAyZDQpICAvKiBETUEgU291cmNlIEFkZHJlc3MgUmVnaXN0ZXIgQ2hhbm5lbCAxMyAqLworI2RlZmluZSBEVEFEUjEzCQlfX1JFRygweDQwMDAwMmQ4KSAgLyogRE1BIFRhcmdldCBBZGRyZXNzIFJlZ2lzdGVyIENoYW5uZWwgMTMgKi8KKyNkZWZpbmUgRENNRDEzCQlfX1JFRygweDQwMDAwMmRjKSAgLyogRE1BIENvbW1hbmQgQWRkcmVzcyBSZWdpc3RlciBDaGFubmVsIDEzICovCisjZGVmaW5lIEREQURSMTQJCV9fUkVHKDB4NDAwMDAyZTApICAvKiBETUEgRGVzY3JpcHRvciBBZGRyZXNzIFJlZ2lzdGVyIENoYW5uZWwgMTQgKi8KKyNkZWZpbmUgRFNBRFIxNAkJX19SRUcoMHg0MDAwMDJlNCkgIC8qIERNQSBTb3VyY2UgQWRkcmVzcyBSZWdpc3RlciBDaGFubmVsIDE0ICovCisjZGVmaW5lIERUQURSMTQJCV9fUkVHKDB4NDAwMDAyZTgpICAvKiBETUEgVGFyZ2V0IEFkZHJlc3MgUmVnaXN0ZXIgQ2hhbm5lbCAxNCAqLworI2RlZmluZSBEQ01EMTQJCV9fUkVHKDB4NDAwMDAyZWMpICAvKiBETUEgQ29tbWFuZCBBZGRyZXNzIFJlZ2lzdGVyIENoYW5uZWwgMTQgKi8KKyNkZWZpbmUgRERBRFIxNQkJX19SRUcoMHg0MDAwMDJmMCkgIC8qIERNQSBEZXNjcmlwdG9yIEFkZHJlc3MgUmVnaXN0ZXIgQ2hhbm5lbCAxNSAqLworI2RlZmluZSBEU0FEUjE1CQlfX1JFRygweDQwMDAwMmY0KSAgLyogRE1BIFNvdXJjZSBBZGRyZXNzIFJlZ2lzdGVyIENoYW5uZWwgMTUgKi8KKyNkZWZpbmUgRFRBRFIxNQkJX19SRUcoMHg0MDAwMDJmOCkgIC8qIERNQSBUYXJnZXQgQWRkcmVzcyBSZWdpc3RlciBDaGFubmVsIDE1ICovCisjZGVmaW5lIERDTUQxNQkJX19SRUcoMHg0MDAwMDJmYykgIC8qIERNQSBDb21tYW5kIEFkZHJlc3MgUmVnaXN0ZXIgQ2hhbm5lbCAxNSAqLworCisjZGVmaW5lIEREQURSKHgpCV9fUkVHMigweDQwMDAwMjAwLCAoeCkgPDwgNCkKKyNkZWZpbmUgRFNBRFIoeCkJX19SRUcyKDB4NDAwMDAyMDQsICh4KSA8PCA0KQorI2RlZmluZSBEVEFEUih4KQlfX1JFRzIoMHg0MDAwMDIwOCwgKHgpIDw8IDQpCisjZGVmaW5lIERDTUQoeCkJCV9fUkVHMigweDQwMDAwMjBjLCAoeCkgPDwgNCkKKworI2RlZmluZSBEREFEUl9ERVNDQUREUgkweGZmZmZmZmYwCS8qIEFkZHJlc3Mgb2YgbmV4dCBkZXNjcmlwdG9yIChtYXNrKSAqLworI2RlZmluZSBEREFEUl9TVE9QCSgxIDw8IDApCS8qIFN0b3AgKHJlYWQgLyB3cml0ZSkgKi8KKworI2RlZmluZSBEQ01EX0lOQ1NSQ0FERFIJKDEgPDwgMzEpCS8qIFNvdXJjZSBBZGRyZXNzIEluY3JlbWVudCBTZXR0aW5nLiAqLworI2RlZmluZSBEQ01EX0lOQ1RSR0FERFIJKDEgPDwgMzApCS8qIFRhcmdldCBBZGRyZXNzIEluY3JlbWVudCBTZXR0aW5nLiAqLworI2RlZmluZSBEQ01EX0ZMT1dTUkMJKDEgPDwgMjkpCS8qIEZsb3cgQ29udHJvbCBieSB0aGUgc291cmNlLiAqLworI2RlZmluZSBEQ01EX0ZMT1dUUkcJKDEgPDwgMjgpCS8qIEZsb3cgQ29udHJvbCBieSB0aGUgdGFyZ2V0LiAqLworI2RlZmluZSBEQ01EX1NUQVJUSVJRRU4JKDEgPDwgMjIpCS8qIFN0YXJ0IEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgRENNRF9FTkRJUlFFTgkoMSA8PCAyMSkJLyogRW5kIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgRENNRF9FTkRJQU4JKDEgPDwgMTgpCS8qIERldmljZSBFbmRpYW4tbmVzcy4gKi8KKyNkZWZpbmUgRENNRF9CVVJTVDgJKDEgPDwgMTYpCS8qIDggYnl0ZSBidXJzdCAqLworI2RlZmluZSBEQ01EX0JVUlNUMTYJKDIgPDwgMTYpCS8qIDE2IGJ5dGUgYnVyc3QgKi8KKyNkZWZpbmUgRENNRF9CVVJTVDMyCSgzIDw8IDE2KQkvKiAzMiBieXRlIGJ1cnN0ICovCisjZGVmaW5lIERDTURfV0lEVEgxCSgxIDw8IDE0KQkvKiAxIGJ5dGUgd2lkdGggKi8KKyNkZWZpbmUgRENNRF9XSURUSDIJKDIgPDwgMTQpCS8qIDIgYnl0ZSB3aWR0aCAoSGFsZldvcmQpICovCisjZGVmaW5lIERDTURfV0lEVEg0CSgzIDw8IDE0KQkvKiA0IGJ5dGUgd2lkdGggKFdvcmQpICovCisjZGVmaW5lIERDTURfTEVOR1RICTB4MDFmZmYJCS8qIGxlbmd0aCBtYXNrIChtYXggPSA4SyAtIDEpICovCisKKworLyoKKyAqIFVBUlRzCisgKi8KKworLyogRnVsbCBGdW5jdGlvbiBVQVJUIChGRlVBUlQpICovCisjZGVmaW5lIEZGVUFSVAkJRkZSQlIKKyNkZWZpbmUgRkZSQlIJCV9fUkVHKDB4NDAxMDAwMDApICAvKiBSZWNlaXZlIEJ1ZmZlciBSZWdpc3RlciAocmVhZCBvbmx5KSAqLworI2RlZmluZSBGRlRIUgkJX19SRUcoMHg0MDEwMDAwMCkgIC8qIFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXIgKHdyaXRlIG9ubHkpICovCisjZGVmaW5lIEZGSUVSCQlfX1JFRygweDQwMTAwMDA0KSAgLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAocmVhZC93cml0ZSkgKi8KKyNkZWZpbmUgRkZJSVIJCV9fUkVHKDB4NDAxMDAwMDgpICAvKiBJbnRlcnJ1cHQgSUQgUmVnaXN0ZXIgKHJlYWQgb25seSkgKi8KKyNkZWZpbmUgRkZGQ1IJCV9fUkVHKDB4NDAxMDAwMDgpICAvKiBGSUZPIENvbnRyb2wgUmVnaXN0ZXIgKHdyaXRlIG9ubHkpICovCisjZGVmaW5lIEZGTENSCQlfX1JFRygweDQwMTAwMDBDKSAgLyogTGluZSBDb250cm9sIFJlZ2lzdGVyIChyZWFkL3dyaXRlKSAqLworI2RlZmluZSBGRk1DUgkJX19SRUcoMHg0MDEwMDAxMCkgIC8qIE1vZGVtIENvbnRyb2wgUmVnaXN0ZXIgKHJlYWQvd3JpdGUpICovCisjZGVmaW5lIEZGTFNSCQlfX1JFRygweDQwMTAwMDE0KSAgLyogTGluZSBTdGF0dXMgUmVnaXN0ZXIgKHJlYWQgb25seSkgKi8KKyNkZWZpbmUgRkZNU1IJCV9fUkVHKDB4NDAxMDAwMTgpICAvKiBNb2RlbSBTdGF0dXMgUmVnaXN0ZXIgKHJlYWQgb25seSkgKi8KKyNkZWZpbmUgRkZTUFIJCV9fUkVHKDB4NDAxMDAwMUMpICAvKiBTY3JhdGNoIFBhZCBSZWdpc3RlciAocmVhZC93cml0ZSkgKi8KKyNkZWZpbmUgRkZJU1IJCV9fUkVHKDB4NDAxMDAwMjApICAvKiBJbmZyYXJlZCBTZWxlY3Rpb24gUmVnaXN0ZXIgKHJlYWQvd3JpdGUpICovCisjZGVmaW5lIEZGRExMCQlfX1JFRygweDQwMTAwMDAwKSAgLyogRGl2aXNvciBMYXRjaCBMb3cgUmVnaXN0ZXIgKERMQUIgPSAxKSAocmVhZC93cml0ZSkgKi8KKyNkZWZpbmUgRkZETEgJCV9fUkVHKDB4NDAxMDAwMDQpICAvKiBEaXZpc29yIExhdGNoIEhpZ2ggUmVnaXN0ZXIgKERMQUIgPSAxKSAocmVhZC93cml0ZSkgKi8KKworLyogQmx1ZXRvb3RoIFVBUlQgKEJUVUFSVCkgKi8KKyNkZWZpbmUgQlRVQVJUCQlCVFJCUgorI2RlZmluZSBCVFJCUgkJX19SRUcoMHg0MDIwMDAwMCkgIC8qIFJlY2VpdmUgQnVmZmVyIFJlZ2lzdGVyIChyZWFkIG9ubHkpICovCisjZGVmaW5lIEJUVEhSCQlfX1JFRygweDQwMjAwMDAwKSAgLyogVHJhbnNtaXQgSG9sZGluZyBSZWdpc3RlciAod3JpdGUgb25seSkgKi8KKyNkZWZpbmUgQlRJRVIJCV9fUkVHKDB4NDAyMDAwMDQpICAvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIChyZWFkL3dyaXRlKSAqLworI2RlZmluZSBCVElJUgkJX19SRUcoMHg0MDIwMDAwOCkgIC8qIEludGVycnVwdCBJRCBSZWdpc3RlciAocmVhZCBvbmx5KSAqLworI2RlZmluZSBCVEZDUgkJX19SRUcoMHg0MDIwMDAwOCkgIC8qIEZJRk8gQ29udHJvbCBSZWdpc3RlciAod3JpdGUgb25seSkgKi8KKyNkZWZpbmUgQlRMQ1IJCV9fUkVHKDB4NDAyMDAwMEMpICAvKiBMaW5lIENvbnRyb2wgUmVnaXN0ZXIgKHJlYWQvd3JpdGUpICovCisjZGVmaW5lIEJUTUNSCQlfX1JFRygweDQwMjAwMDEwKSAgLyogTW9kZW0gQ29udHJvbCBSZWdpc3RlciAocmVhZC93cml0ZSkgKi8KKyNkZWZpbmUgQlRMU1IJCV9fUkVHKDB4NDAyMDAwMTQpICAvKiBMaW5lIFN0YXR1cyBSZWdpc3RlciAocmVhZCBvbmx5KSAqLworI2RlZmluZSBCVE1TUgkJX19SRUcoMHg0MDIwMDAxOCkgIC8qIE1vZGVtIFN0YXR1cyBSZWdpc3RlciAocmVhZCBvbmx5KSAqLworI2RlZmluZSBCVFNQUgkJX19SRUcoMHg0MDIwMDAxQykgIC8qIFNjcmF0Y2ggUGFkIFJlZ2lzdGVyIChyZWFkL3dyaXRlKSAqLworI2RlZmluZSBCVElTUgkJX19SRUcoMHg0MDIwMDAyMCkgIC8qIEluZnJhcmVkIFNlbGVjdGlvbiBSZWdpc3RlciAocmVhZC93cml0ZSkgKi8KKyNkZWZpbmUgQlRETEwJCV9fUkVHKDB4NDAyMDAwMDApICAvKiBEaXZpc29yIExhdGNoIExvdyBSZWdpc3RlciAoRExBQiA9IDEpIChyZWFkL3dyaXRlKSAqLworI2RlZmluZSBCVERMSAkJX19SRUcoMHg0MDIwMDAwNCkgIC8qIERpdmlzb3IgTGF0Y2ggSGlnaCBSZWdpc3RlciAoRExBQiA9IDEpIChyZWFkL3dyaXRlKSAqLworCisvKiBTdGFuZGFyZCBVQVJUIChTVFVBUlQpICovCisjZGVmaW5lIFNUVUFSVAkJU1RSQlIKKyNkZWZpbmUgU1RSQlIJCV9fUkVHKDB4NDA3MDAwMDApICAvKiBSZWNlaXZlIEJ1ZmZlciBSZWdpc3RlciAocmVhZCBvbmx5KSAqLworI2RlZmluZSBTVFRIUgkJX19SRUcoMHg0MDcwMDAwMCkgIC8qIFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXIgKHdyaXRlIG9ubHkpICovCisjZGVmaW5lIFNUSUVSCQlfX1JFRygweDQwNzAwMDA0KSAgLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAocmVhZC93cml0ZSkgKi8KKyNkZWZpbmUgU1RJSVIJCV9fUkVHKDB4NDA3MDAwMDgpICAvKiBJbnRlcnJ1cHQgSUQgUmVnaXN0ZXIgKHJlYWQgb25seSkgKi8KKyNkZWZpbmUgU1RGQ1IJCV9fUkVHKDB4NDA3MDAwMDgpICAvKiBGSUZPIENvbnRyb2wgUmVnaXN0ZXIgKHdyaXRlIG9ubHkpICovCisjZGVmaW5lIFNUTENSCQlfX1JFRygweDQwNzAwMDBDKSAgLyogTGluZSBDb250cm9sIFJlZ2lzdGVyIChyZWFkL3dyaXRlKSAqLworI2RlZmluZSBTVE1DUgkJX19SRUcoMHg0MDcwMDAxMCkgIC8qIE1vZGVtIENvbnRyb2wgUmVnaXN0ZXIgKHJlYWQvd3JpdGUpICovCisjZGVmaW5lIFNUTFNSCQlfX1JFRygweDQwNzAwMDE0KSAgLyogTGluZSBTdGF0dXMgUmVnaXN0ZXIgKHJlYWQgb25seSkgKi8KKyNkZWZpbmUgU1RNU1IJCV9fUkVHKDB4NDA3MDAwMTgpICAvKiBSZXNlcnZlZCAqLworI2RlZmluZSBTVFNQUgkJX19SRUcoMHg0MDcwMDAxQykgIC8qIFNjcmF0Y2ggUGFkIFJlZ2lzdGVyIChyZWFkL3dyaXRlKSAqLworI2RlZmluZSBTVElTUgkJX19SRUcoMHg0MDcwMDAyMCkgIC8qIEluZnJhcmVkIFNlbGVjdGlvbiBSZWdpc3RlciAocmVhZC93cml0ZSkgKi8KKyNkZWZpbmUgU1RETEwJCV9fUkVHKDB4NDA3MDAwMDApICAvKiBEaXZpc29yIExhdGNoIExvdyBSZWdpc3RlciAoRExBQiA9IDEpIChyZWFkL3dyaXRlKSAqLworI2RlZmluZSBTVERMSAkJX19SRUcoMHg0MDcwMDAwNCkgIC8qIERpdmlzb3IgTGF0Y2ggSGlnaCBSZWdpc3RlciAoRExBQiA9IDEpIChyZWFkL3dyaXRlKSAqLworCisjZGVmaW5lIElFUl9ETUFFCSgxIDw8IDcpCS8qIERNQSBSZXF1ZXN0cyBFbmFibGUgKi8KKyNkZWZpbmUgSUVSX1VVRQkJKDEgPDwgNikJLyogVUFSVCBVbml0IEVuYWJsZSAqLworI2RlZmluZSBJRVJfTlJaRQkoMSA8PCA1KQkvKiBOUlogY29kaW5nIEVuYWJsZSAqLworI2RlZmluZSBJRVJfUlRJT0UJKDEgPDwgNCkJLyogUmVjZWl2ZXIgVGltZSBPdXQgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBJRVJfTUlFCQkoMSA8PCAzKQkvKiBNb2RlbSBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIElFUl9STFNFCSgxIDw8IDIpCS8qIFJlY2VpdmVyIExpbmUgU3RhdHVzIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgSUVSX1RJRQkJKDEgPDwgMSkJLyogVHJhbnNtaXQgRGF0YSByZXF1ZXN0IEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgSUVSX1JBVklFCSgxIDw8IDApCS8qIFJlY2VpdmVyIERhdGEgQXZhaWxhYmxlIEludGVycnVwdCBFbmFibGUgKi8KKworI2RlZmluZSBJSVJfRklGT0VTMQkoMSA8PCA3KQkvKiBGSUZPIE1vZGUgRW5hYmxlIFN0YXR1cyAqLworI2RlZmluZSBJSVJfRklGT0VTMAkoMSA8PCA2KQkvKiBGSUZPIE1vZGUgRW5hYmxlIFN0YXR1cyAqLworI2RlZmluZSBJSVJfVE9ECQkoMSA8PCAzKQkvKiBUaW1lIE91dCBEZXRlY3RlZCAqLworI2RlZmluZSBJSVJfSUlEMgkoMSA8PCAyKQkvKiBJbnRlcnJ1cHQgU291cmNlIEVuY29kZWQgKi8KKyNkZWZpbmUgSUlSX0lJRDEJKDEgPDwgMSkJLyogSW50ZXJydXB0IFNvdXJjZSBFbmNvZGVkICovCisjZGVmaW5lIElJUl9JUAkJKDEgPDwgMCkJLyogSW50ZXJydXB0IFBlbmRpbmcgKGFjdGl2ZSBsb3cpICovCisKKyNkZWZpbmUgRkNSX0lUTDIJKDEgPDwgNykJLyogSW50ZXJydXB0IFRyaWdnZXIgTGV2ZWwgKi8KKyNkZWZpbmUgRkNSX0lUTDEJKDEgPDwgNikJLyogSW50ZXJydXB0IFRyaWdnZXIgTGV2ZWwgKi8KKyNkZWZpbmUgRkNSX1JFU0VUVEYJKDEgPDwgMikJLyogUmVzZXQgVHJhbnNtaXR0ZXIgRklGTyAqLworI2RlZmluZSBGQ1JfUkVTRVRSRgkoMSA8PCAxKQkvKiBSZXNldCBSZWNlaXZlciBGSUZPICovCisjZGVmaW5lIEZDUl9UUkZJRk9FCSgxIDw8IDApCS8qIFRyYW5zbWl0IGFuZCBSZWNlaXZlIEZJRk8gRW5hYmxlICovCisjZGVmaW5lIEZDUl9JVExfMQkoMCkKKyNkZWZpbmUgRkNSX0lUTF84CShGQ1JfSVRMMSkKKyNkZWZpbmUgRkNSX0lUTF8xNgkoRkNSX0lUTDIpCisjZGVmaW5lIEZDUl9JVExfMzIJKEZDUl9JVEwyfEZDUl9JVEwxKQorCisjZGVmaW5lIExDUl9ETEFCCSgxIDw8IDcpCS8qIERpdmlzb3IgTGF0Y2ggQWNjZXNzIEJpdCAqLworI2RlZmluZSBMQ1JfU0IJCSgxIDw8IDYpCS8qIFNldCBCcmVhayAqLworI2RlZmluZSBMQ1JfU1RLWVAJKDEgPDwgNSkJLyogU3RpY2t5IFBhcml0eSAqLworI2RlZmluZSBMQ1JfRVBTCQkoMSA8PCA0KQkvKiBFdmVuIFBhcml0eSBTZWxlY3QgKi8KKyNkZWZpbmUgTENSX1BFTgkJKDEgPDwgMykJLyogUGFyaXR5IEVuYWJsZSAqLworI2RlZmluZSBMQ1JfU1RCCQkoMSA8PCAyKQkvKiBTdG9wIEJpdCAqLworI2RlZmluZSBMQ1JfV0xTMQkoMSA8PCAxKQkvKiBXb3JkIExlbmd0aCBTZWxlY3QgKi8KKyNkZWZpbmUgTENSX1dMUzAJKDEgPDwgMCkJLyogV29yZCBMZW5ndGggU2VsZWN0ICovCisKKyNkZWZpbmUgTFNSX0ZJRk9FCSgxIDw8IDcpCS8qIEZJRk8gRXJyb3IgU3RhdHVzICovCisjZGVmaW5lIExTUl9URU1UCSgxIDw8IDYpCS8qIFRyYW5zbWl0dGVyIEVtcHR5ICovCisjZGVmaW5lIExTUl9URFJRCSgxIDw8IDUpCS8qIFRyYW5zbWl0IERhdGEgUmVxdWVzdCAqLworI2RlZmluZSBMU1JfQkkJCSgxIDw8IDQpCS8qIEJyZWFrIEludGVycnVwdCAqLworI2RlZmluZSBMU1JfRkUJCSgxIDw8IDMpCS8qIEZyYW1pbmcgRXJyb3IgKi8KKyNkZWZpbmUgTFNSX1BFCQkoMSA8PCAyKQkvKiBQYXJpdHkgRXJyb3IgKi8KKyNkZWZpbmUgTFNSX09FCQkoMSA8PCAxKQkvKiBPdmVycnVuIEVycm9yICovCisjZGVmaW5lIExTUl9EUgkJKDEgPDwgMCkJLyogRGF0YSBSZWFkeSAqLworCisjZGVmaW5lIE1DUl9MT09QCSgxIDw8IDQpCisjZGVmaW5lIE1DUl9PVVQyCSgxIDw8IDMpCS8qIGZvcmNlIE1TUl9EQ0QgaW4gbG9vcGJhY2sgbW9kZSAqLworI2RlZmluZSBNQ1JfT1VUMQkoMSA8PCAyKQkvKiBmb3JjZSBNU1JfUkkgaW4gbG9vcGJhY2sgbW9kZSAqLworI2RlZmluZSBNQ1JfUlRTCQkoMSA8PCAxKQkvKiBSZXF1ZXN0IHRvIFNlbmQgKi8KKyNkZWZpbmUgTUNSX0RUUgkJKDEgPDwgMCkJLyogRGF0YSBUZXJtaW5hbCBSZWFkeSAqLworCisjZGVmaW5lIE1TUl9EQ0QJCSgxIDw8IDcpCS8qIERhdGEgQ2FycmllciBEZXRlY3QgKi8KKyNkZWZpbmUgTVNSX1JJCQkoMSA8PCA2KQkvKiBSaW5nIEluZGljYXRvciAqLworI2RlZmluZSBNU1JfRFNSCQkoMSA8PCA1KQkvKiBEYXRhIFNldCBSZWFkeSAqLworI2RlZmluZSBNU1JfQ1RTCQkoMSA8PCA0KQkvKiBDbGVhciBUbyBTZW5kICovCisjZGVmaW5lIE1TUl9ERENECSgxIDw8IDMpCS8qIERlbHRhIERhdGEgQ2FycmllciBEZXRlY3QgKi8KKyNkZWZpbmUgTVNSX1RFUkkJKDEgPDwgMikJLyogVHJhaWxpbmcgRWRnZSBSaW5nIEluZGljYXRvciAqLworI2RlZmluZSBNU1JfRERTUgkoMSA8PCAxKQkvKiBEZWx0YSBEYXRhIFNldCBSZWFkeSAqLworI2RlZmluZSBNU1JfRENUUwkoMSA8PCAwKQkvKiBEZWx0YSBDbGVhciBUbyBTZW5kICovCisKKy8qCisgKiBJclNSIChJbmZyYXJlZCBTZWxlY3Rpb24gUmVnaXN0ZXIpCisgKi8KKyNkZWZpbmUgU1RJU1JfUlhQTCAgICAgICgxIDw8IDQpICAgICAgICAvKiBSZWNlaXZlIERhdGEgUG9sYXJpdHkgKi8KKyNkZWZpbmUgU1RJU1JfVFhQTCAgICAgICgxIDw8IDMpICAgICAgICAvKiBUcmFuc21pdCBEYXRhIFBvbGFyaXR5ICovCisjZGVmaW5lIFNUSVNSX1hNT0RFICAgICAoMSA8PCAyKSAgICAgICAgLyogVHJhbnNtaXQgUHVsc2UgV2lkdGggU2VsZWN0ICovCisjZGVmaW5lIFNUSVNSX1JDVkVJUiAgICAoMSA8PCAxKSAgICAgICAgLyogUmVjZWl2ZXIgU0lSIEVuYWJsZSAqLworI2RlZmluZSBTVElTUl9YTUlUSVIgICAgKDEgPDwgMCkgICAgICAgIC8qIFRyYW5zbWl0dGVyIFNJUiBFbmFibGUgKi8KKworCisvKgorICogSTJDIHJlZ2lzdGVycworICovCisKKyNkZWZpbmUgSUJNUgkJX19SRUcoMHg0MDMwMTY4MCkgIC8qIEkyQyBCdXMgTW9uaXRvciBSZWdpc3RlciAtIElCTVIgKi8KKyNkZWZpbmUgSURCUgkJX19SRUcoMHg0MDMwMTY4OCkgIC8qIEkyQyBEYXRhIEJ1ZmZlciBSZWdpc3RlciAtIElEQlIgKi8KKyNkZWZpbmUgSUNSCQlfX1JFRygweDQwMzAxNjkwKSAgLyogSTJDIENvbnRyb2wgUmVnaXN0ZXIgLSBJQ1IgKi8KKyNkZWZpbmUgSVNSCQlfX1JFRygweDQwMzAxNjk4KSAgLyogSTJDIFN0YXR1cyBSZWdpc3RlciAtIElTUiAqLworI2RlZmluZSBJU0FSCQlfX1JFRygweDQwMzAxNkEwKSAgLyogSTJDIFNsYXZlIEFkZHJlc3MgUmVnaXN0ZXIgLSBJU0FSICovCisKKyNkZWZpbmUgUFdSSUJNUiAgICBfX1JFRygweDQwZjAwMTgwKSAgLyogUG93ZXIgSTJDIEJ1cyBNb25pdG9yIFJlZ2lzdGVyLUlCTVIgKi8KKyNkZWZpbmUgUFdSSURCUiAgICBfX1JFRygweDQwZjAwMTg4KSAgLyogUG93ZXIgSTJDIERhdGEgQnVmZmVyIFJlZ2lzdGVyLUlEQlIgKi8KKyNkZWZpbmUgUFdSSUNSIF9fUkVHKDB4NDBmMDAxOTApICAvKiBQb3dlciBJMkMgQ29udHJvbCBSZWdpc3RlciAtIElDUiAqLworI2RlZmluZSBQV1JJU1IgX19SRUcoMHg0MGYwMDE5OCkgIC8qIFBvd2VyIEkyQyBTdGF0dXMgUmVnaXN0ZXIgLSBJU1IgKi8KKyNkZWZpbmUgUFdSSVNBUiAgICBfX1JFRygweDQwZjAwMUEwKSAgLypQb3dlciBJMkMgU2xhdmUgQWRkcmVzcyBSZWdpc3Rlci1JU0FSICovCisKKyNkZWZpbmUgSUNSX1NUQVJUCSgxIDw8IDApCSAgIC8qIHN0YXJ0IGJpdCAqLworI2RlZmluZSBJQ1JfU1RPUAkoMSA8PCAxKQkgICAvKiBzdG9wIGJpdCAqLworI2RlZmluZSBJQ1JfQUNLTkFLCSgxIDw8IDIpCSAgIC8qIHNlbmQgQUNLKDApIG9yIE5BSygxKSAqLworI2RlZmluZSBJQ1JfVEIJCSgxIDw8IDMpCSAgIC8qIHRyYW5zZmVyIGJ5dGUgYml0ICovCisjZGVmaW5lIElDUl9NQQkJKDEgPDwgNCkJICAgLyogbWFzdGVyIGFib3J0ICovCisjZGVmaW5lIElDUl9TQ0xFCSgxIDw8IDUpCSAgIC8qIG1hc3RlciBjbG9jayBlbmFibGUgKi8KKyNkZWZpbmUgSUNSX0lVRQkJKDEgPDwgNikJICAgLyogdW5pdCBlbmFibGUgKi8KKyNkZWZpbmUgSUNSX0dDRAkJKDEgPDwgNykJICAgLyogZ2VuZXJhbCBjYWxsIGRpc2FibGUgKi8KKyNkZWZpbmUgSUNSX0lURUlFCSgxIDw8IDgpCSAgIC8qIGVuYWJsZSB0eCBpbnRlcnJ1cHRzICovCisjZGVmaW5lIElDUl9JUkZJRQkoMSA8PCA5KQkgICAvKiBlbmFibGUgcnggaW50ZXJydXB0cyAqLworI2RlZmluZSBJQ1JfQkVJRQkoMSA8PCAxMCkJICAgLyogZW5hYmxlIGJ1cyBlcnJvciBpbnRzICovCisjZGVmaW5lIElDUl9TU0RJRQkoMSA8PCAxMSkJICAgLyogc2xhdmUgU1RPUCBkZXRlY3RlZCBpbnQgZW5hYmxlICovCisjZGVmaW5lIElDUl9BTERJRQkoMSA8PCAxMikJICAgLyogZW5hYmxlIGFyYml0cmF0aW9uIGludGVycnVwdCAqLworI2RlZmluZSBJQ1JfU0FESUUJKDEgPDwgMTMpCSAgIC8qIHNsYXZlIGFkZHJlc3MgZGV0ZWN0ZWQgaW50IGVuYWJsZSAqLworI2RlZmluZSBJQ1JfVVIJCSgxIDw8IDE0KQkgICAvKiB1bml0IHJlc2V0ICovCisKKyNkZWZpbmUgSVNSX1JXTQkJKDEgPDwgMCkJICAgLyogcmVhZC93cml0ZSBtb2RlICovCisjZGVmaW5lIElTUl9BQ0tOQUsJKDEgPDwgMSkJICAgLyogYWNrL25hayBzdGF0dXMgKi8KKyNkZWZpbmUgSVNSX1VCCQkoMSA8PCAyKQkgICAvKiB1bml0IGJ1c3kgKi8KKyNkZWZpbmUgSVNSX0lCQgkJKDEgPDwgMykJICAgLyogYnVzIGJ1c3kgKi8KKyNkZWZpbmUgSVNSX1NTRAkJKDEgPDwgNCkJICAgLyogc2xhdmUgc3RvcCBkZXRlY3RlZCAqLworI2RlZmluZSBJU1JfQUxECQkoMSA8PCA1KQkgICAvKiBhcmJpdHJhdGlvbiBsb3NzIGRldGVjdGVkICovCisjZGVmaW5lIElTUl9JVEUJCSgxIDw8IDYpCSAgIC8qIHR4IGJ1ZmZlciBlbXB0eSAqLworI2RlZmluZSBJU1JfSVJGCQkoMSA8PCA3KQkgICAvKiByeCBidWZmZXIgZnVsbCAqLworI2RlZmluZSBJU1JfR0NBRAkoMSA8PCA4KQkgICAvKiBnZW5lcmFsIGNhbGwgYWRkcmVzcyBkZXRlY3RlZCAqLworI2RlZmluZSBJU1JfU0FECQkoMSA8PCA5KQkgICAvKiBzbGF2ZSBhZGRyZXNzIGRldGVjdGVkICovCisjZGVmaW5lIElTUl9CRUQJCSgxIDw8IDEwKQkgICAvKiBidXMgZXJyb3Igbm8gQUNLL05BSyAqLworCisKKy8qCisgKiBTZXJpYWwgQXVkaW8gQ29udHJvbGxlcgorICovCisKKy8qIEZJWE1FOiBUaGlzIGNsYXNoIHdpdGggU0ExMTExIGRlZmluZXMgKi8KKyNpZm5kZWYgX0FTTV9BUkNIX1NBMTExMQorCisjZGVmaW5lIFNBQ1IwCQlfX1JFRygweDQwNDAwMDAwKSAgLyogR2xvYmFsIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU0FDUjEJCV9fUkVHKDB4NDA0MDAwMDQpICAvKiBTZXJpYWwgQXVkaW8gSSAyIFMvTVNCLUp1c3RpZmllZCBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFNBU1IwCQlfX1JFRygweDQwNDAwMDBDKSAgLyogU2VyaWFsIEF1ZGlvIEkgMiBTL01TQi1KdXN0aWZpZWQgSW50ZXJmYWNlIGFuZCBGSUZPIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBTQUlNUgkJX19SRUcoMHg0MDQwMDAxNCkgIC8qIFNlcmlhbCBBdWRpbyBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLworI2RlZmluZSBTQUlDUgkJX19SRUcoMHg0MDQwMDAxOCkgIC8qIFNlcmlhbCBBdWRpbyBJbnRlcnJ1cHQgQ2xlYXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU0FESVYJCV9fUkVHKDB4NDA0MDAwNjApICAvKiBBdWRpbyBDbG9jayBEaXZpZGVyIFJlZ2lzdGVyLiAqLworI2RlZmluZSBTQURSCQlfX1JFRygweDQwNDAwMDgwKSAgLyogU2VyaWFsIEF1ZGlvIERhdGEgUmVnaXN0ZXIgKFRYIGFuZCBSWCBGSUZPIGFjY2VzcyBSZWdpc3RlcikuICovCisKKyNkZWZpbmUgU0FDUjBfUkZUSCh4KQkoeCA8PCAxMikJLyogUnggRklGTyBJbnRlcnJ1cHQgb3IgRE1BIFRyaWdnZXIgVGhyZXNob2xkICovCisjZGVmaW5lIFNBQ1IwX1RGVEgoeCkJKHggPDwgOCkJLyogVHggRklGTyBJbnRlcnJ1cHQgb3IgRE1BIFRyaWdnZXIgVGhyZXNob2xkICovCisjZGVmaW5lIFNBQ1IwX1NUUkYJKDEgPDwgNSkJLyogRklGTyBTZWxlY3QgZm9yIEVGV1IgU3BlY2lhbCBGdW5jdGlvbiAqLworI2RlZmluZSBTQUNSMF9FRldSCSgxIDw8IDQpCS8qIEVuYWJsZSBFRldSIEZ1bmN0aW9uICAqLworI2RlZmluZSBTQUNSMF9SU1QJKDEgPDwgMykJLyogRklGTywgaTJzIFJlZ2lzdGVyIFJlc2V0ICovCisjZGVmaW5lIFNBQ1IwX0JDS0QJKDEgPDwgMikgCS8qIEJpdCBDbG9jayBEaXJlY3Rpb24gKi8KKyNkZWZpbmUgU0FDUjBfRU5CCSgxIDw8IDApCS8qIEVuYWJsZSBJMlMgTGluayAqLworI2RlZmluZSBTQUNSMV9FTkxCRgkoMSA8PCA1KQkvKiBFbmFibGUgTG9vcGJhY2sgKi8KKyNkZWZpbmUgU0FDUjFfRFJQTAkoMSA8PCA0KSAJLyogRGlzYWJsZSBSZXBsYXlpbmcgRnVuY3Rpb24gKi8KKyNkZWZpbmUgU0FDUjFfRFJFQwkoMSA8PCAzKQkvKiBEaXNhYmxlIFJlY29yZGluZyBGdW5jdGlvbiAqLworI2RlZmluZSBTQUNSMV9BTVNMCSgxIDw8IDEpCS8qIFNwZWNpZnkgQWx0ZXJuYXRlIE1vZGUgKi8KKworI2RlZmluZSBTQVNSMF9JMlNPRkYJKDEgPDwgNykJLyogQ29udHJvbGxlciBTdGF0dXMgKi8KKyNkZWZpbmUgU0FTUjBfUk9SCSgxIDw8IDYpCS8qIFJ4IEZJRk8gT3ZlcnJ1biAqLworI2RlZmluZSBTQVNSMF9UVVIJKDEgPDwgNSkJLyogVHggRklGTyBVbmRlcnJ1biAqLworI2RlZmluZSBTQVNSMF9SRlMJKDEgPDwgNCkJLyogUnggRklGTyBTZXJ2aWNlIFJlcXVlc3QgKi8KKyNkZWZpbmUgU0FTUjBfVEZTCSgxIDw8IDMpCS8qIFR4IEZJRk8gU2VydmljZSBSZXF1ZXN0ICovCisjZGVmaW5lIFNBU1IwX0JTWQkoMSA8PCAyKQkvKiBJMlMgQnVzeSAqLworI2RlZmluZSBTQVNSMF9STkUJKDEgPDwgMSkJLyogUnggRklGTyBOb3QgRW1wdHkgKi8KKyNkZWZpbmUgU0FTUjBfVE5GCSgxIDw8IDApIAkvKiBUeCBGSUZPIE5vdCBFbXB0eSAqLworCisjZGVmaW5lIFNBSUNSX1JPUgkoMSA8PCA2KQkvKiBDbGVhciBSeCBGSUZPIE92ZXJydW4gSW50ZXJydXB0ICovCisjZGVmaW5lIFNBSUNSX1RVUgkoMSA8PCA1KQkvKiBDbGVhciBUeCBGSUZPIFVuZGVycnVuIEludGVycnVwdCAqLworCisjZGVmaW5lIFNBSU1SX1JPUgkoMSA8PCA2KQkvKiBFbmFibGUgUnggRklGTyBPdmVycnVuIENvbmRpdGlvbiBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgU0FJTVJfVFVSCSgxIDw8IDUpCS8qIEVuYWJsZSBUeCBGSUZPIFVuZGVycnVuIENvbmRpdGlvbiBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgU0FJTVJfUkZTCSgxIDw8IDQpCS8qIEVuYWJsZSBSeCBGSUZPIFNlcnZpY2UgSW50ZXJydXB0ICovCisjZGVmaW5lIFNBSU1SX1RGUwkoMSA8PCAzKQkvKiBFbmFibGUgVHggRklGTyBTZXJ2aWNlIEludGVycnVwdCAqLworCisjZW5kaWYKKworLyoKKyAqIEFDOTcgQ29udHJvbGxlciByZWdpc3RlcnMKKyAqLworCisjZGVmaW5lIFBPQ1IJCV9fUkVHKDB4NDA1MDAwMDApICAvKiBQQ00gT3V0IENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUE9DUl9GRUlFCSgxIDw8IDMpCS8qIEZJRk8gRXJyb3IgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBQT0NSX0ZTUklFCSgxIDw8IDEpCS8qIEZJRk8gU2VydmljZSBSZXF1ZXN0IEludGVycnVwdCBFbmFibGUgKi8KKworI2RlZmluZSBQSUNSCQlfX1JFRygweDQwNTAwMDA0KSAgLyogUENNIEluIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUElDUl9GRUlFCSgxIDw8IDMpCS8qIEZJRk8gRXJyb3IgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBQSUNSX0ZTUklFCSgxIDw8IDEpCS8qIEZJRk8gU2VydmljZSBSZXF1ZXN0IEludGVycnVwdCBFbmFibGUgKi8KKworI2RlZmluZSBNQ0NSCQlfX1JFRygweDQwNTAwMDA4KSAgLyogTWljIEluIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTUNDUl9GRUlFCSgxIDw8IDMpCS8qIEZJRk8gRXJyb3IgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBNQ0NSX0ZTUklFCSgxIDw8IDEpCS8qIEZJRk8gU2VydmljZSBSZXF1ZXN0IEludGVycnVwdCBFbmFibGUgKi8KKworI2RlZmluZSBHQ1IJCV9fUkVHKDB4NDA1MDAwMEMpICAvKiBHbG9iYWwgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBHQ1JfbkRNQUVOCSgxIDw8IDI0KQkvKiBub24gRE1BIEVuYWJsZSAqLworI2RlZmluZSBHQ1JfQ0RPTkVfSUUJKDEgPDwgMTkpCS8qIENvbW1hbmQgRG9uZSBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIEdDUl9TRE9ORV9JRQkoMSA8PCAxOCkJLyogU3RhdHVzIERvbmUgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBHQ1JfU0VDUkRZX0lFTgkoMSA8PCA5KQkvKiBTZWNvbmRhcnkgUmVhZHkgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBHQ1JfUFJJUkRZX0lFTgkoMSA8PCA4KQkvKiBQcmltYXJ5IFJlYWR5IEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgR0NSX1NFQ1JFU19JRU4JKDEgPDwgNSkJLyogU2Vjb25kYXJ5IFJlc3VtZSBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIEdDUl9QUklSRVNfSUVOCSgxIDw8IDQpCS8qIFByaW1hcnkgUmVzdW1lIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgR0NSX0FDTElOS19PRkYJKDEgPDwgMykJLyogQUMtbGluayBTaHV0IE9mZiAqLworI2RlZmluZSBHQ1JfV0FSTV9SU1QJKDEgPDwgMikJLyogQUM5NyBXYXJtIFJlc2V0ICovCisjZGVmaW5lIEdDUl9DT0xEX1JTVAkoMSA8PCAxKQkvKiBBQyc5NyBDb2xkIFJlc2V0ICgwID0gYWN0aXZlKSAqLworI2RlZmluZSBHQ1JfR0lFCQkoMSA8PCAwKQkvKiBDb2RlYyBHUEkgSW50ZXJydXB0IEVuYWJsZSAqLworCisjZGVmaW5lIFBPU1IJCV9fUkVHKDB4NDA1MDAwMTApICAvKiBQQ00gT3V0IFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBQT1NSX0ZJRk9FCSgxIDw8IDQpCS8qIEZJRk8gZXJyb3IgKi8KKyNkZWZpbmUgUE9TUl9GU1IJKDEgPDwgMikJLyogRklGTyBTZXJ2aWNlIFJlcXVlc3QgKi8KKworI2RlZmluZSBQSVNSCQlfX1JFRygweDQwNTAwMDE0KSAgLyogUENNIEluIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBQSVNSX0ZJRk9FCSgxIDw8IDQpCS8qIEZJRk8gZXJyb3IgKi8KKyNkZWZpbmUgUElTUl9FT0MJKDEgPDwgMykJLyogRE1BIEVuZC1vZi1DaGFpbiAoZXhjbHVzaXZlIGNsZWFyKSAqLworI2RlZmluZSBQSVNSX0ZTUgkoMSA8PCAyKQkvKiBGSUZPIFNlcnZpY2UgUmVxdWVzdCAqLworCisjZGVmaW5lIE1DU1IJCV9fUkVHKDB4NDA1MDAwMTgpICAvKiBNaWMgSW4gU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIE1DU1JfRklGT0UJKDEgPDwgNCkJLyogRklGTyBlcnJvciAqLworI2RlZmluZSBNQ1NSX0VPQwkoMSA8PCAzKQkvKiBETUEgRW5kLW9mLUNoYWluIChleGNsdXNpdmUgY2xlYXIpICovCisjZGVmaW5lIE1DU1JfRlNSCSgxIDw8IDIpCS8qIEZJRk8gU2VydmljZSBSZXF1ZXN0ICovCisKKyNkZWZpbmUgR1NSCQlfX1JFRygweDQwNTAwMDFDKSAgLyogR2xvYmFsIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBHU1JfQ0RPTkUJKDEgPDwgMTkpCS8qIENvbW1hbmQgRG9uZSAqLworI2RlZmluZSBHU1JfU0RPTkUJKDEgPDwgMTgpCS8qIFN0YXR1cyBEb25lICovCisjZGVmaW5lIEdTUl9SRENTCSgxIDw8IDE1KQkvKiBSZWFkIENvbXBsZXRpb24gU3RhdHVzICovCisjZGVmaW5lIEdTUl9CSVQzU0xUMTIJKDEgPDwgMTQpCS8qIEJpdCAzIG9mIHNsb3QgMTIgKi8KKyNkZWZpbmUgR1NSX0JJVDJTTFQxMgkoMSA8PCAxMykJLyogQml0IDIgb2Ygc2xvdCAxMiAqLworI2RlZmluZSBHU1JfQklUMVNMVDEyCSgxIDw8IDEyKQkvKiBCaXQgMSBvZiBzbG90IDEyICovCisjZGVmaW5lIEdTUl9TRUNSRVMJKDEgPDwgMTEpCS8qIFNlY29uZGFyeSBSZXN1bWUgSW50ZXJydXB0ICovCisjZGVmaW5lIEdTUl9QUklSRVMJKDEgPDwgMTApCS8qIFByaW1hcnkgUmVzdW1lIEludGVycnVwdCAqLworI2RlZmluZSBHU1JfU0NSCQkoMSA8PCA5KQkvKiBTZWNvbmRhcnkgQ29kZWMgUmVhZHkgKi8KKyNkZWZpbmUgR1NSX1BDUgkJKDEgPDwgOCkJLyogIFByaW1hcnkgQ29kZWMgUmVhZHkgKi8KKyNkZWZpbmUgR1NSX01DSU5UCSgxIDw8IDcpCS8qIE1pYyBJbiBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgR1NSX1BPSU5UCSgxIDw8IDYpCS8qIFBDTSBPdXQgSW50ZXJydXB0ICovCisjZGVmaW5lIEdTUl9QSUlOVAkoMSA8PCA1KQkvKiBQQ00gSW4gSW50ZXJydXB0ICovCisjZGVmaW5lIEdTUl9BQ09GRkQJKDEgPDwgMykJLyogQUMtbGluayBTaHV0IE9mZiBEb25lICovCisjZGVmaW5lIEdTUl9NT0lOVAkoMSA8PCAyKQkvKiBNb2RlbSBPdXQgSW50ZXJydXB0ICovCisjZGVmaW5lIEdTUl9NSUlOVAkoMSA8PCAxKQkvKiBNb2RlbSBJbiBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgR1NSX0dTQ0kJKDEgPDwgMCkJLyogQ29kZWMgR1BJIFN0YXR1cyBDaGFuZ2UgSW50ZXJydXB0ICovCisKKyNkZWZpbmUgQ0FSCQlfX1JFRygweDQwNTAwMDIwKSAgLyogQ09ERUMgQWNjZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lIENBUl9DQUlQCSgxIDw8IDApCS8qIENvZGVjIEFjY2VzcyBJbiBQcm9ncmVzcyAqLworCisjZGVmaW5lIFBDRFIJCV9fUkVHKDB4NDA1MDAwNDApICAvKiBQQ00gRklGTyBEYXRhIFJlZ2lzdGVyICovCisjZGVmaW5lIE1DRFIJCV9fUkVHKDB4NDA1MDAwNjApICAvKiBNaWMtaW4gRklGTyBEYXRhIFJlZ2lzdGVyICovCisKKyNkZWZpbmUgTU9DUgkJX19SRUcoMHg0MDUwMDEwMCkgIC8qIE1vZGVtIE91dCBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIE1PQ1JfRkVJRQkoMSA8PCAzKQkvKiBGSUZPIEVycm9yICovCisjZGVmaW5lIE1PQ1JfRlNSSUUJKDEgPDwgMSkJLyogRklGTyBTZXJ2aWNlIFJlcXVlc3QgSW50ZXJydXB0IEVuYWJsZSAqLworCisjZGVmaW5lIE1JQ1IJCV9fUkVHKDB4NDA1MDAxMDgpICAvKiBNb2RlbSBJbiBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIE1JQ1JfRkVJRQkoMSA8PCAzKQkvKiBGSUZPIEVycm9yICovCisjZGVmaW5lIE1JQ1JfRlNSSUUJKDEgPDwgMSkJLyogRklGTyBTZXJ2aWNlIFJlcXVlc3QgSW50ZXJydXB0IEVuYWJsZSAqLworCisjZGVmaW5lIE1PU1IJCV9fUkVHKDB4NDA1MDAxMTApICAvKiBNb2RlbSBPdXQgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIE1PU1JfRklGT0UJKDEgPDwgNCkJLyogRklGTyBlcnJvciAqLworI2RlZmluZSBNT1NSX0ZTUgkoMSA8PCAyKQkvKiBGSUZPIFNlcnZpY2UgUmVxdWVzdCAqLworCisjZGVmaW5lIE1JU1IJCV9fUkVHKDB4NDA1MDAxMTgpICAvKiBNb2RlbSBJbiBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTUlTUl9GSUZPRQkoMSA8PCA0KQkvKiBGSUZPIGVycm9yICovCisjZGVmaW5lIE1JU1JfRU9DCSgxIDw8IDMpCS8qIERNQSBFbmQtb2YtQ2hhaW4gKGV4Y2x1c2l2ZSBjbGVhcikgKi8KKyNkZWZpbmUgTUlTUl9GU1IJKDEgPDwgMikJLyogRklGTyBTZXJ2aWNlIFJlcXVlc3QgKi8KKworI2RlZmluZSBNT0RSCQlfX1JFRygweDQwNTAwMTQwKSAgLyogTW9kZW0gRklGTyBEYXRhIFJlZ2lzdGVyICovCisKKyNkZWZpbmUgUEFDX1JFR19CQVNFCV9fUkVHKDB4NDA1MDAyMDApICAvKiBQcmltYXJ5IEF1ZGlvIENvZGVjICovCisjZGVmaW5lIFNBQ19SRUdfQkFTRQlfX1JFRygweDQwNTAwMzAwKSAgLyogU2Vjb25kYXJ5IEF1ZGlvIENvZGVjICovCisjZGVmaW5lIFBNQ19SRUdfQkFTRQlfX1JFRygweDQwNTAwNDAwKSAgLyogUHJpbWFyeSBNb2RlbSBDb2RlYyAqLworI2RlZmluZSBTTUNfUkVHX0JBU0UJX19SRUcoMHg0MDUwMDUwMCkgIC8qIFNlY29uZGFyeSBNb2RlbSBDb2RlYyAqLworCisKKy8qCisgKiBVU0IgRGV2aWNlIENvbnRyb2xsZXIKKyAqIFBYQTI1eCBhbmQgUFhBMjd4IFVTQiBkZXZpY2UgY29udHJvbGxlciByZWdpc3RlcnMgYXJlIGRpZmZlcmVudC4KKyAqLworI2lmIGRlZmluZWQoQ09ORklHX1BYQTI1eCkKKworI2RlZmluZSBVRENfUkVTMQlfX1JFRygweDQwNjAwMDA0KSAgLyogVURDIFVuZG9jdW1lbnRlZCAtIFJlc2VydmVkMSAqLworI2RlZmluZSBVRENfUkVTMglfX1JFRygweDQwNjAwMDA4KSAgLyogVURDIFVuZG9jdW1lbnRlZCAtIFJlc2VydmVkMiAqLworI2RlZmluZSBVRENfUkVTMwlfX1JFRygweDQwNjAwMDBDKSAgLyogVURDIFVuZG9jdW1lbnRlZCAtIFJlc2VydmVkMyAqLworCisjZGVmaW5lIFVEQ0NSCQlfX1JFRygweDQwNjAwMDAwKSAgLyogVURDIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVURDQ1JfVURFCSgxIDw8IDApCS8qIFVEQyBlbmFibGUgKi8KKyNkZWZpbmUgVURDQ1JfVURBCSgxIDw8IDEpCS8qIFVEQyBhY3RpdmUgKi8KKyNkZWZpbmUgVURDQ1JfUlNNCSgxIDw8IDIpCS8qIERldmljZSByZXN1bWUgKi8KKyNkZWZpbmUgVURDQ1JfUkVTSVIJKDEgPDwgMykJLyogUmVzdW1lIGludGVycnVwdCByZXF1ZXN0ICovCisjZGVmaW5lIFVEQ0NSX1NVU0lSCSgxIDw8IDQpCS8qIFN1c3BlbmQgaW50ZXJydXB0IHJlcXVlc3QgKi8KKyNkZWZpbmUgVURDQ1JfU1JNCSgxIDw8IDUpCS8qIFN1c3BlbmQvcmVzdW1lIGludGVycnVwdCBtYXNrICovCisjZGVmaW5lIFVEQ0NSX1JTVElSCSgxIDw8IDYpCS8qIFJlc2V0IGludGVycnVwdCByZXF1ZXN0ICovCisjZGVmaW5lIFVEQ0NSX1JFTQkoMSA8PCA3KQkvKiBSZXNldCBpbnRlcnJ1cHQgbWFzayAqLworCisjZGVmaW5lIFVEQ0NTMAkJX19SRUcoMHg0MDYwMDAxMCkgIC8qIFVEQyBFbmRwb2ludCAwIENvbnRyb2wvU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIFVEQ0NTMF9PUFIJKDEgPDwgMCkJLyogT1VUIHBhY2tldCByZWFkeSAqLworI2RlZmluZSBVRENDUzBfSVBSCSgxIDw8IDEpCS8qIElOIHBhY2tldCByZWFkeSAqLworI2RlZmluZSBVRENDUzBfRlRGCSgxIDw8IDIpCS8qIEZsdXNoIFR4IEZJRk8gKi8KKyNkZWZpbmUgVURDQ1MwX0RSV0YJKDEgPDwgMykJLyogRGV2aWNlIHJlbW90ZSB3YWtldXAgZmVhdHVyZSAqLworI2RlZmluZSBVRENDUzBfU1NUCSgxIDw8IDQpCS8qIFNlbnQgc3RhbGwgKi8KKyNkZWZpbmUgVURDQ1MwX0ZTVAkoMSA8PCA1KQkvKiBGb3JjZSBzdGFsbCAqLworI2RlZmluZSBVRENDUzBfUk5FCSgxIDw8IDYpCS8qIFJlY2VpdmUgRklGTyBubyBlbXB0eSAqLworI2RlZmluZSBVRENDUzBfU0EJKDEgPDwgNykJLyogU2V0dXAgYWN0aXZlICovCisKKy8qIEJ1bGsgSU4gLSBFbmRwb2ludCAxLDYsMTEgKi8KKyNkZWZpbmUgVURDQ1MxCQlfX1JFRygweDQwNjAwMDE0KSAgLyogVURDIEVuZHBvaW50IDEgKElOKSBDb250cm9sL1N0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBVRENDUzYJCV9fUkVHKDB4NDA2MDAwMjgpICAvKiBVREMgRW5kcG9pbnQgNiAoSU4pIENvbnRyb2wvU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIFVEQ0NTMTEJCV9fUkVHKDB4NDA2MDAwM0MpICAvKiBVREMgRW5kcG9pbnQgMTEgKElOKSBDb250cm9sL1N0YXR1cyBSZWdpc3RlciAqLworCisjZGVmaW5lIFVEQ0NTX0JJX1RGUwkoMSA8PCAwKQkvKiBUcmFuc21pdCBGSUZPIHNlcnZpY2UgKi8KKyNkZWZpbmUgVURDQ1NfQklfVFBDCSgxIDw8IDEpCS8qIFRyYW5zbWl0IHBhY2tldCBjb21wbGV0ZSAqLworI2RlZmluZSBVRENDU19CSV9GVEYJKDEgPDwgMikJLyogRmx1c2ggVHggRklGTyAqLworI2RlZmluZSBVRENDU19CSV9UVVIJKDEgPDwgMykJLyogVHJhbnNtaXQgRklGTyB1bmRlcnJ1biAqLworI2RlZmluZSBVRENDU19CSV9TU1QJKDEgPDwgNCkJLyogU2VudCBzdGFsbCAqLworI2RlZmluZSBVRENDU19CSV9GU1QJKDEgPDwgNSkJLyogRm9yY2Ugc3RhbGwgKi8KKyNkZWZpbmUgVURDQ1NfQklfVFNQCSgxIDw8IDcpCS8qIFRyYW5zbWl0IHNob3J0IHBhY2tldCAqLworCisvKiBCdWxrIE9VVCAtIEVuZHBvaW50IDIsNywxMiAqLworI2RlZmluZSBVRENDUzIJCV9fUkVHKDB4NDA2MDAwMTgpICAvKiBVREMgRW5kcG9pbnQgMiAoT1VUKSBDb250cm9sL1N0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBVRENDUzcJCV9fUkVHKDB4NDA2MDAwMkMpICAvKiBVREMgRW5kcG9pbnQgNyAoT1VUKSBDb250cm9sL1N0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBVRENDUzEyCQlfX1JFRygweDQwNjAwMDQwKSAgLyogVURDIEVuZHBvaW50IDEyIChPVVQpIENvbnRyb2wvU3RhdHVzIFJlZ2lzdGVyICovCisKKyNkZWZpbmUgVURDQ1NfQk9fUkZTCSgxIDw8IDApCS8qIFJlY2VpdmUgRklGTyBzZXJ2aWNlICovCisjZGVmaW5lIFVEQ0NTX0JPX1JQQwkoMSA8PCAxKQkvKiBSZWNlaXZlIHBhY2tldCBjb21wbGV0ZSAqLworI2RlZmluZSBVRENDU19CT19ETUUJKDEgPDwgMykJLyogRE1BIGVuYWJsZSAqLworI2RlZmluZSBVRENDU19CT19TU1QJKDEgPDwgNCkJLyogU2VudCBzdGFsbCAqLworI2RlZmluZSBVRENDU19CT19GU1QJKDEgPDwgNSkJLyogRm9yY2Ugc3RhbGwgKi8KKyNkZWZpbmUgVURDQ1NfQk9fUk5FCSgxIDw8IDYpCS8qIFJlY2VpdmUgRklGTyBub3QgZW1wdHkgKi8KKyNkZWZpbmUgVURDQ1NfQk9fUlNQCSgxIDw8IDcpCS8qIFJlY2VpdmUgc2hvcnQgcGFja2V0ICovCisKKy8qIElzb2Nocm9ub3VzIElOIC0gRW5kcG9pbnQgMyw4LDEzICovCisjZGVmaW5lIFVEQ0NTMwkJX19SRUcoMHg0MDYwMDAxQykgIC8qIFVEQyBFbmRwb2ludCAzIChJTikgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVURDQ1M4CQlfX1JFRygweDQwNjAwMDMwKSAgLyogVURDIEVuZHBvaW50IDggKElOKSBDb250cm9sL1N0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBVRENDUzEzCQlfX1JFRygweDQwNjAwMDQ0KSAgLyogVURDIEVuZHBvaW50IDEzIChJTikgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXIgKi8KKworI2RlZmluZSBVRENDU19JSV9URlMJKDEgPDwgMCkJLyogVHJhbnNtaXQgRklGTyBzZXJ2aWNlICovCisjZGVmaW5lIFVEQ0NTX0lJX1RQQwkoMSA8PCAxKQkvKiBUcmFuc21pdCBwYWNrZXQgY29tcGxldGUgKi8KKyNkZWZpbmUgVURDQ1NfSUlfRlRGCSgxIDw8IDIpCS8qIEZsdXNoIFR4IEZJRk8gKi8KKyNkZWZpbmUgVURDQ1NfSUlfVFVSCSgxIDw8IDMpCS8qIFRyYW5zbWl0IEZJRk8gdW5kZXJydW4gKi8KKyNkZWZpbmUgVURDQ1NfSUlfVFNQCSgxIDw8IDcpCS8qIFRyYW5zbWl0IHNob3J0IHBhY2tldCAqLworCisvKiBJc29jaHJvbm91cyBPVVQgLSBFbmRwb2ludCA0LDksMTQgKi8KKyNkZWZpbmUgVURDQ1M0CQlfX1JFRygweDQwNjAwMDIwKSAgLyogVURDIEVuZHBvaW50IDQgKE9VVCkgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVURDQ1M5CQlfX1JFRygweDQwNjAwMDM0KSAgLyogVURDIEVuZHBvaW50IDkgKE9VVCkgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVURDQ1MxNAkJX19SRUcoMHg0MDYwMDA0OCkgIC8qIFVEQyBFbmRwb2ludCAxNCAoT1VUKSBDb250cm9sL1N0YXR1cyBSZWdpc3RlciAqLworCisjZGVmaW5lIFVEQ0NTX0lPX1JGUwkoMSA8PCAwKQkvKiBSZWNlaXZlIEZJRk8gc2VydmljZSAqLworI2RlZmluZSBVRENDU19JT19SUEMJKDEgPDwgMSkJLyogUmVjZWl2ZSBwYWNrZXQgY29tcGxldGUgKi8KKyNkZWZpbmUgVURDQ1NfSU9fUk9GCSgxIDw8IDMpCS8qIFJlY2VpdmUgb3ZlcmZsb3cgKi8KKyNkZWZpbmUgVURDQ1NfSU9fRE1FCSgxIDw8IDMpCS8qIERNQSBlbmFibGUgKi8KKyNkZWZpbmUgVURDQ1NfSU9fUk5FCSgxIDw8IDYpCS8qIFJlY2VpdmUgRklGTyBub3QgZW1wdHkgKi8KKyNkZWZpbmUgVURDQ1NfSU9fUlNQCSgxIDw8IDcpCS8qIFJlY2VpdmUgc2hvcnQgcGFja2V0ICovCisKKy8qIEludGVycnVwdCBJTiAtIEVuZHBvaW50IDUsMTAsMTUgKi8KKyNkZWZpbmUgVURDQ1M1CQlfX1JFRygweDQwNjAwMDI0KSAgLyogVURDIEVuZHBvaW50IDUgKEludGVycnVwdCkgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVURDQ1MxMAkJX19SRUcoMHg0MDYwMDAzOCkgIC8qIFVEQyBFbmRwb2ludCAxMCAoSW50ZXJydXB0KSBDb250cm9sL1N0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBVRENDUzE1CQlfX1JFRygweDQwNjAwMDRDKSAgLyogVURDIEVuZHBvaW50IDE1IChJbnRlcnJ1cHQpIENvbnRyb2wvU3RhdHVzIFJlZ2lzdGVyICovCisKKyNkZWZpbmUgVURDQ1NfSU5UX1RGUwkoMSA8PCAwKQkvKiBUcmFuc21pdCBGSUZPIHNlcnZpY2UgKi8KKyNkZWZpbmUgVURDQ1NfSU5UX1RQQwkoMSA8PCAxKQkvKiBUcmFuc21pdCBwYWNrZXQgY29tcGxldGUgKi8KKyNkZWZpbmUgVURDQ1NfSU5UX0ZURgkoMSA8PCAyKQkvKiBGbHVzaCBUeCBGSUZPICovCisjZGVmaW5lIFVEQ0NTX0lOVF9UVVIJKDEgPDwgMykJLyogVHJhbnNtaXQgRklGTyB1bmRlcnJ1biAqLworI2RlZmluZSBVRENDU19JTlRfU1NUCSgxIDw8IDQpCS8qIFNlbnQgc3RhbGwgKi8KKyNkZWZpbmUgVURDQ1NfSU5UX0ZTVAkoMSA8PCA1KQkvKiBGb3JjZSBzdGFsbCAqLworI2RlZmluZSBVRENDU19JTlRfVFNQCSgxIDw8IDcpCS8qIFRyYW5zbWl0IHNob3J0IHBhY2tldCAqLworCisjZGVmaW5lIFVGTlJICQlfX1JFRygweDQwNjAwMDYwKSAgLyogVURDIEZyYW1lIE51bWJlciBSZWdpc3RlciBIaWdoICovCisjZGVmaW5lIFVGTlJMCQlfX1JFRygweDQwNjAwMDY0KSAgLyogVURDIEZyYW1lIE51bWJlciBSZWdpc3RlciBMb3cgKi8KKyNkZWZpbmUgVUJDUjIJCV9fUkVHKDB4NDA2MDAwNjgpICAvKiBVREMgQnl0ZSBDb3VudCBSZWcgMiAqLworI2RlZmluZSBVQkNSNAkJX19SRUcoMHg0MDYwMDA2YykgIC8qIFVEQyBCeXRlIENvdW50IFJlZyA0ICovCisjZGVmaW5lIFVCQ1I3CQlfX1JFRygweDQwNjAwMDcwKSAgLyogVURDIEJ5dGUgQ291bnQgUmVnIDcgKi8KKyNkZWZpbmUgVUJDUjkJCV9fUkVHKDB4NDA2MDAwNzQpICAvKiBVREMgQnl0ZSBDb3VudCBSZWcgOSAqLworI2RlZmluZSBVQkNSMTIJCV9fUkVHKDB4NDA2MDAwNzgpICAvKiBVREMgQnl0ZSBDb3VudCBSZWcgMTIgKi8KKyNkZWZpbmUgVUJDUjE0CQlfX1JFRygweDQwNjAwMDdjKSAgLyogVURDIEJ5dGUgQ291bnQgUmVnIDE0ICovCisjZGVmaW5lIFVERFIwCQlfX1JFRygweDQwNjAwMDgwKSAgLyogVURDIEVuZHBvaW50IDAgRGF0YSBSZWdpc3RlciAqLworI2RlZmluZSBVRERSMQkJX19SRUcoMHg0MDYwMDEwMCkgIC8qIFVEQyBFbmRwb2ludCAxIERhdGEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVUREUjIJCV9fUkVHKDB4NDA2MDAxODApICAvKiBVREMgRW5kcG9pbnQgMiBEYXRhIFJlZ2lzdGVyICovCisjZGVmaW5lIFVERFIzCQlfX1JFRygweDQwNjAwMjAwKSAgLyogVURDIEVuZHBvaW50IDMgRGF0YSBSZWdpc3RlciAqLworI2RlZmluZSBVRERSNAkJX19SRUcoMHg0MDYwMDQwMCkgIC8qIFVEQyBFbmRwb2ludCA0IERhdGEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVUREUjUJCV9fUkVHKDB4NDA2MDAwQTApICAvKiBVREMgRW5kcG9pbnQgNSBEYXRhIFJlZ2lzdGVyICovCisjZGVmaW5lIFVERFI2CQlfX1JFRygweDQwNjAwNjAwKSAgLyogVURDIEVuZHBvaW50IDYgRGF0YSBSZWdpc3RlciAqLworI2RlZmluZSBVRERSNwkJX19SRUcoMHg0MDYwMDY4MCkgIC8qIFVEQyBFbmRwb2ludCA3IERhdGEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVUREUjgJCV9fUkVHKDB4NDA2MDA3MDApICAvKiBVREMgRW5kcG9pbnQgOCBEYXRhIFJlZ2lzdGVyICovCisjZGVmaW5lIFVERFI5CQlfX1JFRygweDQwNjAwOTAwKSAgLyogVURDIEVuZHBvaW50IDkgRGF0YSBSZWdpc3RlciAqLworI2RlZmluZSBVRERSMTAJCV9fUkVHKDB4NDA2MDAwQzApICAvKiBVREMgRW5kcG9pbnQgMTAgRGF0YSBSZWdpc3RlciAqLworI2RlZmluZSBVRERSMTEJCV9fUkVHKDB4NDA2MDBCMDApICAvKiBVREMgRW5kcG9pbnQgMTEgRGF0YSBSZWdpc3RlciAqLworI2RlZmluZSBVRERSMTIJCV9fUkVHKDB4NDA2MDBCODApICAvKiBVREMgRW5kcG9pbnQgMTIgRGF0YSBSZWdpc3RlciAqLworI2RlZmluZSBVRERSMTMJCV9fUkVHKDB4NDA2MDBDMDApICAvKiBVREMgRW5kcG9pbnQgMTMgRGF0YSBSZWdpc3RlciAqLworI2RlZmluZSBVRERSMTQJCV9fUkVHKDB4NDA2MDBFMDApICAvKiBVREMgRW5kcG9pbnQgMTQgRGF0YSBSZWdpc3RlciAqLworI2RlZmluZSBVRERSMTUJCV9fUkVHKDB4NDA2MDAwRTApICAvKiBVREMgRW5kcG9pbnQgMTUgRGF0YSBSZWdpc3RlciAqLworCisjZGVmaW5lIFVJQ1IwCQlfX1JFRygweDQwNjAwMDUwKSAgLyogVURDIEludGVycnVwdCBDb250cm9sIFJlZ2lzdGVyIDAgKi8KKworI2RlZmluZSBVSUNSMF9JTTAJKDEgPDwgMCkJLyogSW50ZXJydXB0IG1hc2sgZXAgMCAqLworI2RlZmluZSBVSUNSMF9JTTEJKDEgPDwgMSkJLyogSW50ZXJydXB0IG1hc2sgZXAgMSAqLworI2RlZmluZSBVSUNSMF9JTTIJKDEgPDwgMikJLyogSW50ZXJydXB0IG1hc2sgZXAgMiAqLworI2RlZmluZSBVSUNSMF9JTTMJKDEgPDwgMykJLyogSW50ZXJydXB0IG1hc2sgZXAgMyAqLworI2RlZmluZSBVSUNSMF9JTTQJKDEgPDwgNCkJLyogSW50ZXJydXB0IG1hc2sgZXAgNCAqLworI2RlZmluZSBVSUNSMF9JTTUJKDEgPDwgNSkJLyogSW50ZXJydXB0IG1hc2sgZXAgNSAqLworI2RlZmluZSBVSUNSMF9JTTYJKDEgPDwgNikJLyogSW50ZXJydXB0IG1hc2sgZXAgNiAqLworI2RlZmluZSBVSUNSMF9JTTcJKDEgPDwgNykJLyogSW50ZXJydXB0IG1hc2sgZXAgNyAqLworCisjZGVmaW5lIFVJQ1IxCQlfX1JFRygweDQwNjAwMDU0KSAgLyogVURDIEludGVycnVwdCBDb250cm9sIFJlZ2lzdGVyIDEgKi8KKworI2RlZmluZSBVSUNSMV9JTTgJKDEgPDwgMCkJLyogSW50ZXJydXB0IG1hc2sgZXAgOCAqLworI2RlZmluZSBVSUNSMV9JTTkJKDEgPDwgMSkJLyogSW50ZXJydXB0IG1hc2sgZXAgOSAqLworI2RlZmluZSBVSUNSMV9JTTEwCSgxIDw8IDIpCS8qIEludGVycnVwdCBtYXNrIGVwIDEwICovCisjZGVmaW5lIFVJQ1IxX0lNMTEJKDEgPDwgMykJLyogSW50ZXJydXB0IG1hc2sgZXAgMTEgKi8KKyNkZWZpbmUgVUlDUjFfSU0xMgkoMSA8PCA0KQkvKiBJbnRlcnJ1cHQgbWFzayBlcCAxMiAqLworI2RlZmluZSBVSUNSMV9JTTEzCSgxIDw8IDUpCS8qIEludGVycnVwdCBtYXNrIGVwIDEzICovCisjZGVmaW5lIFVJQ1IxX0lNMTQJKDEgPDwgNikJLyogSW50ZXJydXB0IG1hc2sgZXAgMTQgKi8KKyNkZWZpbmUgVUlDUjFfSU0xNQkoMSA8PCA3KQkvKiBJbnRlcnJ1cHQgbWFzayBlcCAxNSAqLworCisjZGVmaW5lIFVTSVIwCQlfX1JFRygweDQwNjAwMDU4KSAgLyogVURDIFN0YXR1cyBJbnRlcnJ1cHQgUmVnaXN0ZXIgMCAqLworCisjZGVmaW5lIFVTSVIwX0lSMAkoMSA8PCAwKQkvKiBJbnRlcnJ1cCByZXF1ZXN0IGVwIDAgKi8KKyNkZWZpbmUgVVNJUjBfSVIxCSgxIDw8IDEpCS8qIEludGVycnVwIHJlcXVlc3QgZXAgMSAqLworI2RlZmluZSBVU0lSMF9JUjIJKDEgPDwgMikJLyogSW50ZXJydXAgcmVxdWVzdCBlcCAyICovCisjZGVmaW5lIFVTSVIwX0lSMwkoMSA8PCAzKQkvKiBJbnRlcnJ1cCByZXF1ZXN0IGVwIDMgKi8KKyNkZWZpbmUgVVNJUjBfSVI0CSgxIDw8IDQpCS8qIEludGVycnVwIHJlcXVlc3QgZXAgNCAqLworI2RlZmluZSBVU0lSMF9JUjUJKDEgPDwgNSkJLyogSW50ZXJydXAgcmVxdWVzdCBlcCA1ICovCisjZGVmaW5lIFVTSVIwX0lSNgkoMSA8PCA2KQkvKiBJbnRlcnJ1cCByZXF1ZXN0IGVwIDYgKi8KKyNkZWZpbmUgVVNJUjBfSVI3CSgxIDw8IDcpCS8qIEludGVycnVwIHJlcXVlc3QgZXAgNyAqLworCisjZGVmaW5lIFVTSVIxCQlfX1JFRygweDQwNjAwMDVDKSAgLyogVURDIFN0YXR1cyBJbnRlcnJ1cHQgUmVnaXN0ZXIgMSAqLworCisjZGVmaW5lIFVTSVIxX0lSOAkoMSA8PCAwKQkvKiBJbnRlcnJ1cCByZXF1ZXN0IGVwIDggKi8KKyNkZWZpbmUgVVNJUjFfSVI5CSgxIDw8IDEpCS8qIEludGVycnVwIHJlcXVlc3QgZXAgOSAqLworI2RlZmluZSBVU0lSMV9JUjEwCSgxIDw8IDIpCS8qIEludGVycnVwIHJlcXVlc3QgZXAgMTAgKi8KKyNkZWZpbmUgVVNJUjFfSVIxMQkoMSA8PCAzKQkvKiBJbnRlcnJ1cCByZXF1ZXN0IGVwIDExICovCisjZGVmaW5lIFVTSVIxX0lSMTIJKDEgPDwgNCkJLyogSW50ZXJydXAgcmVxdWVzdCBlcCAxMiAqLworI2RlZmluZSBVU0lSMV9JUjEzCSgxIDw8IDUpCS8qIEludGVycnVwIHJlcXVlc3QgZXAgMTMgKi8KKyNkZWZpbmUgVVNJUjFfSVIxNAkoMSA8PCA2KQkvKiBJbnRlcnJ1cCByZXF1ZXN0IGVwIDE0ICovCisjZGVmaW5lIFVTSVIxX0lSMTUJKDEgPDwgNykJLyogSW50ZXJydXAgcmVxdWVzdCBlcCAxNSAqLworCisjZWxpZiBkZWZpbmVkKENPTkZJR19QWEEyN3gpCisKKyNkZWZpbmUgVURDQ1IgICAgICAgICAgIF9fUkVHKDB4NDA2MDAwMDApIC8qIFVEQyBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFVEQ0NSX09FTgkoMSA8PCAzMSkJLyogT24tdGhlLUdvIEVuYWJsZSAqLworI2RlZmluZSBVRENDUl9BQUxUSE5QCSgxIDw8IDMwKQkvKiBBLWRldmljZSBBbHRlcm5hdGUgSG9zdCBOZWdvdGlhdGlvbgorCQkJCQkgICBQcm90b2NvbCBQb3J0IFN1cHBvcnQgKi8KKyNkZWZpbmUgVURDQ1JfQUhOUAkoMSA8PCAyOSkJLyogQS1kZXZpY2UgSG9zdCBOZWdvdGlhdGlvbiBQcm90b2NvbAorCQkJCQkgICBTdXBwb3J0ICovCisjZGVmaW5lIFVEQ0NSX0JITlAJKDEgPDwgMjgpCS8qIEItZGV2aWNlIEhvc3QgTmVnb3RpYXRpb24gUHJvdG9jb2wKKwkJCQkJICAgRW5hYmxlICovCisjZGVmaW5lIFVEQ0NSX0RXUkUJKDEgPDwgMTYpCS8qIERldmljZSBSZW1vdGUgV2FrZS11cCBFbmFibGUgKi8KKyNkZWZpbmUgVURDQ1JfQUNOCSgweDAzIDw8IDExKQkvKiBBY3RpdmUgVURDIGNvbmZpZ3VyYXRpb24gTnVtYmVyICovCisjZGVmaW5lIFVEQ0NSX0FDTl9TCTExCisjZGVmaW5lIFVEQ0NSX0FJTgkoMHgwNyA8PCA4KQkvKiBBY3RpdmUgVURDIGludGVyZmFjZSBOdW1iZXIgKi8KKyNkZWZpbmUgVURDQ1JfQUlOX1MJOAorI2RlZmluZSBVRENDUl9BQUlTTgkoMHgwNyA8PCA1KQkvKiBBY3RpdmUgVURDIEFsdGVybmF0ZSBJbnRlcmZhY2UKKwkJCQkJICAgU2V0dGluZyBOdW1iZXIgKi8KKyNkZWZpbmUgVURDQ1JfQUFJU05fUwk1CisjZGVmaW5lIFVEQ0NSX1NNQUMJKDEgPDwgNCkJLyogU3dpdGNoIEVuZHBvaW50IE1lbW9yeSB0byBBY3RpdmUKKwkJCQkJICAgQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSBVRENDUl9FTUNFCSgxIDw8IDMpCS8qIEVuZHBvaW50IE1lbW9yeSBDb25maWd1cmF0aW9uCisJCQkJCSAgIEVycm9yICovCisjZGVmaW5lIFVEQ0NSX1VEUgkoMSA8PCAyKQkvKiBVREMgUmVzdW1lICovCisjZGVmaW5lIFVEQ0NSX1VEQQkoMSA8PCAxKQkvKiBVREMgQWN0aXZlICovCisjZGVmaW5lIFVEQ0NSX1VERQkoMSA8PCAwKQkvKiBVREMgRW5hYmxlICovCisKKyNkZWZpbmUgVURDSUNSMCAgICAgICAgIF9fUkVHKDB4NDA2MDAwMDQpIC8qIFVEQyBJbnRlcnJ1cHQgQ29udHJvbCBSZWdpc3RlcjAgKi8KKyNkZWZpbmUgVURDSUNSMSAgICAgICAgIF9fUkVHKDB4NDA2MDAwMDgpIC8qIFVEQyBJbnRlcnJ1cHQgQ29udHJvbCBSZWdpc3RlcjEgKi8KKyNkZWZpbmUgVURDSUNSX0ZJRk9FUlIJKDEgPDwgMSkJLyogRklGTyBFcnJvciBpbnRlcnJ1cHQgZm9yIEVQICovCisjZGVmaW5lIFVEQ0lDUl9QS1RDT01QTCAoMSA8PCAwKQkvKiBQYWNrZXQgQ29tcGxldGUgaW50ZXJydXB0IGZvciBFUCAqLworCisjZGVmaW5lIFVEQ19JTlRfRklGT0VSUk9SICAoMHgyKQorI2RlZmluZSBVRENfSU5UX1BBQ0tFVENNUCAgKDB4MSkKKworI2RlZmluZSBVRENJQ1JfSU5UKG4saW50cikgKCgoaW50cikgJiAweDAzKSA8PCAoKChuKSAmIDB4MEYpICogMikpCisjZGVmaW5lIFVEQ0lDUjFfSUVDQwkoMSA8PCAzMSkJLyogSW50RW4gLSBDb25maWd1cmF0aW9uIENoYW5nZSAqLworI2RlZmluZSBVRENJQ1IxX0lFU09GCSgxIDw8IDMwKQkvKiBJbnRFbiAtIFN0YXJ0IG9mIEZyYW1lICovCisjZGVmaW5lIFVEQ0lDUjFfSUVSVQkoMSA8PCAyOSkJLyogSW50RW4gLSBSZXN1bWUgKi8KKyNkZWZpbmUgVURDSUNSMV9JRVNVCSgxIDw8IDI4KQkvKiBJbnRFbiAtIFN1c3BlbmQgKi8KKyNkZWZpbmUgVURDSUNSMV9JRVJTCSgxIDw8IDI3KQkvKiBJbnRFbiAtIFJlc2V0ICovCisKKyNkZWZpbmUgVURDSVNSMCAgICAgICAgIF9fUkVHKDB4NDA2MDAwMEMpIC8qIFVEQyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUgVURDSVNSMSAgICAgICAgIF9fUkVHKDB4NDA2MDAwMTApIC8qIFVEQyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgVURDSVNSX0lOVChuLGludHIpICgoKGludHIpICYgMHgwMykgPDwgKCgobikgJiAweDBGKSAqIDIpKQorI2RlZmluZSBVRENJU1IxX0lFQ0MJKDEgPDwgMzEpCS8qIEludEVuIC0gQ29uZmlndXJhdGlvbiBDaGFuZ2UgKi8KKyNkZWZpbmUgVURDSVNSMV9JRVNPRgkoMSA8PCAzMCkJLyogSW50RW4gLSBTdGFydCBvZiBGcmFtZSAqLworI2RlZmluZSBVRENJU1IxX0lFUlUJKDEgPDwgMjkpCS8qIEludEVuIC0gUmVzdW1lICovCisjZGVmaW5lIFVEQ0lTUjFfSUVTVQkoMSA8PCAyOCkJLyogSW50RW4gLSBTdXNwZW5kICovCisjZGVmaW5lIFVEQ0lTUjFfSUVSUwkoMSA8PCAyNykJLyogSW50RW4gLSBSZXNldCAqLworCisKKyNkZWZpbmUgVURDRk5SICAgICAgICAgIF9fUkVHKDB4NDA2MDAwMTQpIC8qIFVEQyBGcmFtZSBOdW1iZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVURDT1RHSUNSCV9fUkVHKDB4NDA2MDAwMTgpIC8qIFVEQyBPbi1UaGUtR28gaW50ZXJydXB0IGNvbnRyb2wgKi8KKyNkZWZpbmUgVURDT1RHSUNSX0lFU0YJKDEgPDwgMjQpCS8qIE9URyBTRVRfRkVBVFVSRSBjb21tYW5kIHJlY3ZkICovCisjZGVmaW5lIFVEQ09UR0lDUl9JRVhSCSgxIDw8IDE3KQkvKiBFeHRyYSBUcmFuc2NpZXZlciBJbnRlcnJ1cHQKKwkJCQkJICAgUmlzaW5nIEVkZ2UgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBVRENPVEdJQ1JfSUVYRgkoMSA8PCAxNikJLyogRXh0cmEgVHJhbnNjaWV2ZXIgSW50ZXJydXB0CisJCQkJCSAgIEZhbGxpbmcgRWRnZSBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIFVEQ09UR0lDUl9JRVZWNDBSICgxIDw8IDkpCS8qIE9URyBWYnVzIFZhbGlkIDQuMFYgUmlzaW5nIEVkZ2UKKwkJCQkJICAgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBVRENPVEdJQ1JfSUVWVjQwRiAoMSA8PCA4KQkvKiBPVEcgVmJ1cyBWYWxpZCA0LjBWIEZhbGxpbmcgRWRnZQorCQkJCQkgICBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIFVEQ09UR0lDUl9JRVZWNDRSICgxIDw8IDcpCS8qIE9URyBWYnVzIFZhbGlkIDQuNFYgUmlzaW5nIEVkZ2UKKwkJCQkJICAgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBVRENPVEdJQ1JfSUVWVjQ0RiAoMSA8PCA2KQkvKiBPVEcgVmJ1cyBWYWxpZCA0LjRWIEZhbGxpbmcgRWRnZQorCQkJCQkgICBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIFVEQ09UR0lDUl9JRVNWUgkoMSA8PCA1KQkvKiBPVEcgU2Vzc2lvbiBWYWxpZCBSaXNpbmcgRWRnZQorCQkJCQkgICBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIFVEQ09UR0lDUl9JRVNWRgkoMSA8PCA0KQkvKiBPVEcgU2Vzc2lvbiBWYWxpZCBGYWxsaW5nIEVkZ2UKKwkJCQkJICAgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBVRENPVEdJQ1JfSUVTRFIJKDEgPDwgMykJLyogT1RHIEEtRGV2aWNlIFNSUCBEZXRlY3QgUmlzaW5nCisJCQkJCSAgIEVkZ2UgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBVRENPVEdJQ1JfSUVTREYJKDEgPDwgMikJLyogT1RHIEEtRGV2aWNlIFNSUCBEZXRlY3QgRmFsbGluZworCQkJCQkgICBFZGdlIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgVURDT1RHSUNSX0lFSURSCSgxIDw8IDEpCS8qIE9URyBJRCBDaGFuZ2UgUmlzaW5nIEVkZ2UKKwkJCQkJICAgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBVRENPVEdJQ1JfSUVJREYJKDEgPDwgMCkJLyogT1RHIElEIENoYW5nZSBGYWxsaW5nIEVkZ2UKKwkJCQkJICAgSW50ZXJydXB0IEVuYWJsZSAqLworCisjZGVmaW5lIFVEQ0NTTih4KQlfX1JFRzIoMHg0MDYwMDEwMCwgKHgpIDw8IDIpCisjZGVmaW5lIFVEQ0NTUjAgICAgICAgICBfX1JFRygweDQwNjAwMTAwKSAvKiBVREMgQ29udHJvbC9TdGF0dXMgcmVnaXN0ZXIgLSBFbmRwb2ludCAwICovCisjZGVmaW5lIFVEQ0NTUjBfU0EJKDEgPDwgNykJLyogU2V0dXAgQWN0aXZlICovCisjZGVmaW5lIFVEQ0NTUjBfUk5FCSgxIDw8IDYpCS8qIFJlY2VpdmUgRklGTyBOb3QgRW1wdHkgKi8KKyNkZWZpbmUgVURDQ1NSMF9GU1QJKDEgPDwgNSkJLyogRm9yY2UgU3RhbGwgKi8KKyNkZWZpbmUgVURDQ1NSMF9TU1QJKDEgPDwgNCkJLyogU2VudCBTdGFsbCAqLworI2RlZmluZSBVRENDU1IwX0RNRQkoMSA8PCAzKQkvKiBETUEgRW5hYmxlICovCisjZGVmaW5lIFVEQ0NTUjBfRlRGCSgxIDw8IDIpCS8qIEZsdXNoIFRyYW5zbWl0IEZJRk8gKi8KKyNkZWZpbmUgVURDQ1NSMF9JUFIJKDEgPDwgMSkJLyogSU4gUGFja2V0IFJlYWR5ICovCisjZGVmaW5lIFVEQ0NTUjBfT1BDCSgxIDw8IDApCS8qIE9VVCBQYWNrZXQgQ29tcGxldGUgKi8KKworI2RlZmluZSBVRENDU1JBICAgICAgICAgX19SRUcoMHg0MDYwMDEwNCkgLyogVURDIENvbnRyb2wvU3RhdHVzIHJlZ2lzdGVyIC0gRW5kcG9pbnQgQSAqLworI2RlZmluZSBVRENDU1JCICAgICAgICAgX19SRUcoMHg0MDYwMDEwOCkgLyogVURDIENvbnRyb2wvU3RhdHVzIHJlZ2lzdGVyIC0gRW5kcG9pbnQgQiAqLworI2RlZmluZSBVRENDU1JDICAgICAgICAgX19SRUcoMHg0MDYwMDEwQykgLyogVURDIENvbnRyb2wvU3RhdHVzIHJlZ2lzdGVyIC0gRW5kcG9pbnQgQyAqLworI2RlZmluZSBVRENDU1JEICAgICAgICAgX19SRUcoMHg0MDYwMDExMCkgLyogVURDIENvbnRyb2wvU3RhdHVzIHJlZ2lzdGVyIC0gRW5kcG9pbnQgRCAqLworI2RlZmluZSBVRENDU1JFICAgICAgICAgX19SRUcoMHg0MDYwMDExNCkgLyogVURDIENvbnRyb2wvU3RhdHVzIHJlZ2lzdGVyIC0gRW5kcG9pbnQgRSAqLworI2RlZmluZSBVRENDU1JGICAgICAgICAgX19SRUcoMHg0MDYwMDExOCkgLyogVURDIENvbnRyb2wvU3RhdHVzIHJlZ2lzdGVyIC0gRW5kcG9pbnQgRiAqLworI2RlZmluZSBVRENDU1JHICAgICAgICAgX19SRUcoMHg0MDYwMDExQykgLyogVURDIENvbnRyb2wvU3RhdHVzIHJlZ2lzdGVyIC0gRW5kcG9pbnQgRyAqLworI2RlZmluZSBVRENDU1JIICAgICAgICAgX19SRUcoMHg0MDYwMDEyMCkgLyogVURDIENvbnRyb2wvU3RhdHVzIHJlZ2lzdGVyIC0gRW5kcG9pbnQgSCAqLworI2RlZmluZSBVRENDU1JJICAgICAgICAgX19SRUcoMHg0MDYwMDEyNCkgLyogVURDIENvbnRyb2wvU3RhdHVzIHJlZ2lzdGVyIC0gRW5kcG9pbnQgSSAqLworI2RlZmluZSBVRENDU1JKICAgICAgICAgX19SRUcoMHg0MDYwMDEyOCkgLyogVURDIENvbnRyb2wvU3RhdHVzIHJlZ2lzdGVyIC0gRW5kcG9pbnQgSiAqLworI2RlZmluZSBVRENDU1JLICAgICAgICAgX19SRUcoMHg0MDYwMDEyQykgLyogVURDIENvbnRyb2wvU3RhdHVzIHJlZ2lzdGVyIC0gRW5kcG9pbnQgSyAqLworI2RlZmluZSBVRENDU1JMICAgICAgICAgX19SRUcoMHg0MDYwMDEzMCkgLyogVURDIENvbnRyb2wvU3RhdHVzIHJlZ2lzdGVyIC0gRW5kcG9pbnQgTCAqLworI2RlZmluZSBVRENDU1JNICAgICAgICAgX19SRUcoMHg0MDYwMDEzNCkgLyogVURDIENvbnRyb2wvU3RhdHVzIHJlZ2lzdGVyIC0gRW5kcG9pbnQgTSAqLworI2RlZmluZSBVRENDU1JOICAgICAgICAgX19SRUcoMHg0MDYwMDEzOCkgLyogVURDIENvbnRyb2wvU3RhdHVzIHJlZ2lzdGVyIC0gRW5kcG9pbnQgTiAqLworI2RlZmluZSBVRENDU1JQICAgICAgICAgX19SRUcoMHg0MDYwMDEzQykgLyogVURDIENvbnRyb2wvU3RhdHVzIHJlZ2lzdGVyIC0gRW5kcG9pbnQgUCAqLworI2RlZmluZSBVRENDU1JRICAgICAgICAgX19SRUcoMHg0MDYwMDE0MCkgLyogVURDIENvbnRyb2wvU3RhdHVzIHJlZ2lzdGVyIC0gRW5kcG9pbnQgUSAqLworI2RlZmluZSBVRENDU1JSICAgICAgICAgX19SRUcoMHg0MDYwMDE0NCkgLyogVURDIENvbnRyb2wvU3RhdHVzIHJlZ2lzdGVyIC0gRW5kcG9pbnQgUiAqLworI2RlZmluZSBVRENDU1JTICAgICAgICAgX19SRUcoMHg0MDYwMDE0OCkgLyogVURDIENvbnRyb2wvU3RhdHVzIHJlZ2lzdGVyIC0gRW5kcG9pbnQgUyAqLworI2RlZmluZSBVRENDU1JUICAgICAgICAgX19SRUcoMHg0MDYwMDE0QykgLyogVURDIENvbnRyb2wvU3RhdHVzIHJlZ2lzdGVyIC0gRW5kcG9pbnQgVCAqLworI2RlZmluZSBVRENDU1JVICAgICAgICAgX19SRUcoMHg0MDYwMDE1MCkgLyogVURDIENvbnRyb2wvU3RhdHVzIHJlZ2lzdGVyIC0gRW5kcG9pbnQgVSAqLworI2RlZmluZSBVRENDU1JWICAgICAgICAgX19SRUcoMHg0MDYwMDE1NCkgLyogVURDIENvbnRyb2wvU3RhdHVzIHJlZ2lzdGVyIC0gRW5kcG9pbnQgViAqLworI2RlZmluZSBVRENDU1JXICAgICAgICAgX19SRUcoMHg0MDYwMDE1OCkgLyogVURDIENvbnRyb2wvU3RhdHVzIHJlZ2lzdGVyIC0gRW5kcG9pbnQgVyAqLworI2RlZmluZSBVRENDU1JYICAgICAgICAgX19SRUcoMHg0MDYwMDE1QykgLyogVURDIENvbnRyb2wvU3RhdHVzIHJlZ2lzdGVyIC0gRW5kcG9pbnQgWCAqLworCisjZGVmaW5lIFVEQ0NTUl9EUEUJKDEgPDwgOSkJLyogRGF0YSBQYWNrZXQgRXJyb3IgKi8KKyNkZWZpbmUgVURDQ1NSX0ZFRgkoMSA8PCA4KQkvKiBGbHVzaCBFbmRwb2ludCBGSUZPICovCisjZGVmaW5lIFVEQ0NTUl9TUAkoMSA8PCA3KQkvKiBTaG9ydCBQYWNrZXQgQ29udHJvbC9TdGF0dXMgKi8KKyNkZWZpbmUgVURDQ1NSX0JORQkoMSA8PCA2KQkvKiBCdWZmZXIgTm90IEVtcHR5IChJTiBlbmRwb2ludHMpICovCisjZGVmaW5lIFVEQ0NTUl9CTkYJKDEgPDwgNikJLyogQnVmZmVyIE5vdCBGdWxsIChPVVQgZW5kcG9pbnRzKSAqLworI2RlZmluZSBVRENDU1JfRlNUCSgxIDw8IDUpCS8qIEZvcmNlIFNUQUxMICovCisjZGVmaW5lIFVEQ0NTUl9TU1QJKDEgPDwgNCkJLyogU2VudCBTVEFMTCAqLworI2RlZmluZSBVRENDU1JfRE1FCSgxIDw8IDMpCS8qIERNQSBFbmFibGUgKi8KKyNkZWZpbmUgVURDQ1NSX1RSTgkoMSA8PCAyKQkvKiBUeC9SeCBOQUsgKi8KKyNkZWZpbmUgVURDQ1NSX1BDCSgxIDw8IDEpCS8qIFBhY2tldCBDb21wbGV0ZSAqLworI2RlZmluZSBVRENDU1JfRlMJKDEgPDwgMCkJLyogRklGTyBuZWVkcyBzZXJ2aWNlICovCisKKyNkZWZpbmUgVURDQkNOKHgpCV9fUkVHMigweDQwNjAwMjAwLCAoeCk8PDIpCisjZGVmaW5lIFVEQ0JDUjAgICAgICAgICBfX1JFRygweDQwNjAwMjAwKSAvKiBCeXRlIENvdW50IFJlZ2lzdGVyIC0gRVAwICovCisjZGVmaW5lIFVEQ0JDUkEgICAgICAgICBfX1JFRygweDQwNjAwMjA0KSAvKiBCeXRlIENvdW50IFJlZ2lzdGVyIC0gRVBBICovCisjZGVmaW5lIFVEQ0JDUkIgICAgICAgICBfX1JFRygweDQwNjAwMjA4KSAvKiBCeXRlIENvdW50IFJlZ2lzdGVyIC0gRVBCICovCisjZGVmaW5lIFVEQ0JDUkMgICAgICAgICBfX1JFRygweDQwNjAwMjBDKSAvKiBCeXRlIENvdW50IFJlZ2lzdGVyIC0gRVBDICovCisjZGVmaW5lIFVEQ0JDUkQgICAgICAgICBfX1JFRygweDQwNjAwMjEwKSAvKiBCeXRlIENvdW50IFJlZ2lzdGVyIC0gRVBEICovCisjZGVmaW5lIFVEQ0JDUkUgICAgICAgICBfX1JFRygweDQwNjAwMjE0KSAvKiBCeXRlIENvdW50IFJlZ2lzdGVyIC0gRVBFICovCisjZGVmaW5lIFVEQ0JDUkYgICAgICAgICBfX1JFRygweDQwNjAwMjE4KSAvKiBCeXRlIENvdW50IFJlZ2lzdGVyIC0gRVBGICovCisjZGVmaW5lIFVEQ0JDUkcgICAgICAgICBfX1JFRygweDQwNjAwMjFDKSAvKiBCeXRlIENvdW50IFJlZ2lzdGVyIC0gRVBHICovCisjZGVmaW5lIFVEQ0JDUkggICAgICAgICBfX1JFRygweDQwNjAwMjIwKSAvKiBCeXRlIENvdW50IFJlZ2lzdGVyIC0gRVBIICovCisjZGVmaW5lIFVEQ0JDUkkgICAgICAgICBfX1JFRygweDQwNjAwMjI0KSAvKiBCeXRlIENvdW50IFJlZ2lzdGVyIC0gRVBJICovCisjZGVmaW5lIFVEQ0JDUkogICAgICAgICBfX1JFRygweDQwNjAwMjI4KSAvKiBCeXRlIENvdW50IFJlZ2lzdGVyIC0gRVBKICovCisjZGVmaW5lIFVEQ0JDUksgICAgICAgICBfX1JFRygweDQwNjAwMjJDKSAvKiBCeXRlIENvdW50IFJlZ2lzdGVyIC0gRVBLICovCisjZGVmaW5lIFVEQ0JDUkwgICAgICAgICBfX1JFRygweDQwNjAwMjMwKSAvKiBCeXRlIENvdW50IFJlZ2lzdGVyIC0gRVBMICovCisjZGVmaW5lIFVEQ0JDUk0gICAgICAgICBfX1JFRygweDQwNjAwMjM0KSAvKiBCeXRlIENvdW50IFJlZ2lzdGVyIC0gRVBNICovCisjZGVmaW5lIFVEQ0JDUk4gICAgICAgICBfX1JFRygweDQwNjAwMjM4KSAvKiBCeXRlIENvdW50IFJlZ2lzdGVyIC0gRVBOICovCisjZGVmaW5lIFVEQ0JDUlAgICAgICAgICBfX1JFRygweDQwNjAwMjNDKSAvKiBCeXRlIENvdW50IFJlZ2lzdGVyIC0gRVBQICovCisjZGVmaW5lIFVEQ0JDUlEgICAgICAgICBfX1JFRygweDQwNjAwMjQwKSAvKiBCeXRlIENvdW50IFJlZ2lzdGVyIC0gRVBRICovCisjZGVmaW5lIFVEQ0JDUlIgICAgICAgICBfX1JFRygweDQwNjAwMjQ0KSAvKiBCeXRlIENvdW50IFJlZ2lzdGVyIC0gRVBSICovCisjZGVmaW5lIFVEQ0JDUlMgICAgICAgICBfX1JFRygweDQwNjAwMjQ4KSAvKiBCeXRlIENvdW50IFJlZ2lzdGVyIC0gRVBTICovCisjZGVmaW5lIFVEQ0JDUlQgICAgICAgICBfX1JFRygweDQwNjAwMjRDKSAvKiBCeXRlIENvdW50IFJlZ2lzdGVyIC0gRVBUICovCisjZGVmaW5lIFVEQ0JDUlUgICAgICAgICBfX1JFRygweDQwNjAwMjUwKSAvKiBCeXRlIENvdW50IFJlZ2lzdGVyIC0gRVBVICovCisjZGVmaW5lIFVEQ0JDUlYgICAgICAgICBfX1JFRygweDQwNjAwMjU0KSAvKiBCeXRlIENvdW50IFJlZ2lzdGVyIC0gRVBWICovCisjZGVmaW5lIFVEQ0JDUlcgICAgICAgICBfX1JFRygweDQwNjAwMjU4KSAvKiBCeXRlIENvdW50IFJlZ2lzdGVyIC0gRVBXICovCisjZGVmaW5lIFVEQ0JDUlggICAgICAgICBfX1JFRygweDQwNjAwMjVDKSAvKiBCeXRlIENvdW50IFJlZ2lzdGVyIC0gRVBYICovCisKKyNkZWZpbmUgVURDRE4oeCkJX19SRUcyKDB4NDA2MDAzMDAsICh4KTw8MikKKyNkZWZpbmUgUEhZU19VRENETih4KQkoMHg0MDYwMDMwMCArICgoeCk8PDIpKQorI2RlZmluZSBQVURDRE4oeCkJKHZvbGF0aWxlIHUzMiAqKShpb19wMnYoUEhZU19VRENETigoeCkpKSkKKyNkZWZpbmUgVURDRFIwICAgICAgICAgIF9fUkVHKDB4NDA2MDAzMDApIC8qIERhdGEgUmVnaXN0ZXIgLSBFUDAgKi8KKyNkZWZpbmUgVURDRFJBICAgICAgICAgIF9fUkVHKDB4NDA2MDAzMDQpIC8qIERhdGEgUmVnaXN0ZXIgLSBFUEEgKi8KKyNkZWZpbmUgVURDRFJCICAgICAgICAgIF9fUkVHKDB4NDA2MDAzMDgpIC8qIERhdGEgUmVnaXN0ZXIgLSBFUEIgKi8KKyNkZWZpbmUgVURDRFJDICAgICAgICAgIF9fUkVHKDB4NDA2MDAzMEMpIC8qIERhdGEgUmVnaXN0ZXIgLSBFUEMgKi8KKyNkZWZpbmUgVURDRFJEICAgICAgICAgIF9fUkVHKDB4NDA2MDAzMTApIC8qIERhdGEgUmVnaXN0ZXIgLSBFUEQgKi8KKyNkZWZpbmUgVURDRFJFICAgICAgICAgIF9fUkVHKDB4NDA2MDAzMTQpIC8qIERhdGEgUmVnaXN0ZXIgLSBFUEUgKi8KKyNkZWZpbmUgVURDRFJGICAgICAgICAgIF9fUkVHKDB4NDA2MDAzMTgpIC8qIERhdGEgUmVnaXN0ZXIgLSBFUEYgKi8KKyNkZWZpbmUgVURDRFJHICAgICAgICAgIF9fUkVHKDB4NDA2MDAzMUMpIC8qIERhdGEgUmVnaXN0ZXIgLSBFUEcgKi8KKyNkZWZpbmUgVURDRFJIICAgICAgICAgIF9fUkVHKDB4NDA2MDAzMjApIC8qIERhdGEgUmVnaXN0ZXIgLSBFUEggKi8KKyNkZWZpbmUgVURDRFJJICAgICAgICAgIF9fUkVHKDB4NDA2MDAzMjQpIC8qIERhdGEgUmVnaXN0ZXIgLSBFUEkgKi8KKyNkZWZpbmUgVURDRFJKICAgICAgICAgIF9fUkVHKDB4NDA2MDAzMjgpIC8qIERhdGEgUmVnaXN0ZXIgLSBFUEogKi8KKyNkZWZpbmUgVURDRFJLICAgICAgICAgIF9fUkVHKDB4NDA2MDAzMkMpIC8qIERhdGEgUmVnaXN0ZXIgLSBFUEsgKi8KKyNkZWZpbmUgVURDRFJMICAgICAgICAgIF9fUkVHKDB4NDA2MDAzMzApIC8qIERhdGEgUmVnaXN0ZXIgLSBFUEwgKi8KKyNkZWZpbmUgVURDRFJNICAgICAgICAgIF9fUkVHKDB4NDA2MDAzMzQpIC8qIERhdGEgUmVnaXN0ZXIgLSBFUE0gKi8KKyNkZWZpbmUgVURDRFJOICAgICAgICAgIF9fUkVHKDB4NDA2MDAzMzgpIC8qIERhdGEgUmVnaXN0ZXIgLSBFUE4gKi8KKyNkZWZpbmUgVURDRFJQICAgICAgICAgIF9fUkVHKDB4NDA2MDAzM0MpIC8qIERhdGEgUmVnaXN0ZXIgLSBFUFAgKi8KKyNkZWZpbmUgVURDRFJRICAgICAgICAgIF9fUkVHKDB4NDA2MDAzNDApIC8qIERhdGEgUmVnaXN0ZXIgLSBFUFEgKi8KKyNkZWZpbmUgVURDRFJSICAgICAgICAgIF9fUkVHKDB4NDA2MDAzNDQpIC8qIERhdGEgUmVnaXN0ZXIgLSBFUFIgKi8KKyNkZWZpbmUgVURDRFJTICAgICAgICAgIF9fUkVHKDB4NDA2MDAzNDgpIC8qIERhdGEgUmVnaXN0ZXIgLSBFUFMgKi8KKyNkZWZpbmUgVURDRFJUICAgICAgICAgIF9fUkVHKDB4NDA2MDAzNEMpIC8qIERhdGEgUmVnaXN0ZXIgLSBFUFQgKi8KKyNkZWZpbmUgVURDRFJVICAgICAgICAgIF9fUkVHKDB4NDA2MDAzNTApIC8qIERhdGEgUmVnaXN0ZXIgLSBFUFUgKi8KKyNkZWZpbmUgVURDRFJWICAgICAgICAgIF9fUkVHKDB4NDA2MDAzNTQpIC8qIERhdGEgUmVnaXN0ZXIgLSBFUFYgKi8KKyNkZWZpbmUgVURDRFJXICAgICAgICAgIF9fUkVHKDB4NDA2MDAzNTgpIC8qIERhdGEgUmVnaXN0ZXIgLSBFUFcgKi8KKyNkZWZpbmUgVURDRFJYICAgICAgICAgIF9fUkVHKDB4NDA2MDAzNUMpIC8qIERhdGEgUmVnaXN0ZXIgLSBFUFggKi8KKworI2RlZmluZSBVRENDTih4KSAgICAgICBfX1JFRzIoMHg0MDYwMDQwMCwgKHgpPDwyKQorI2RlZmluZSBVRENDUkEgICAgICAgICAgX19SRUcoMHg0MDYwMDQwNCkgLyogQ29uZmlndXJhdGlvbiByZWdpc3RlciBFUEEgKi8KKyNkZWZpbmUgVURDQ1JCICAgICAgICAgIF9fUkVHKDB4NDA2MDA0MDgpIC8qIENvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgRVBCICovCisjZGVmaW5lIFVEQ0NSQyAgICAgICAgICBfX1JFRygweDQwNjAwNDBDKSAvKiBDb25maWd1cmF0aW9uIHJlZ2lzdGVyIEVQQyAqLworI2RlZmluZSBVRENDUkQgICAgICAgICAgX19SRUcoMHg0MDYwMDQxMCkgLyogQ29uZmlndXJhdGlvbiByZWdpc3RlciBFUEQgKi8KKyNkZWZpbmUgVURDQ1JFICAgICAgICAgIF9fUkVHKDB4NDA2MDA0MTQpIC8qIENvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgRVBFICovCisjZGVmaW5lIFVEQ0NSRiAgICAgICAgICBfX1JFRygweDQwNjAwNDE4KSAvKiBDb25maWd1cmF0aW9uIHJlZ2lzdGVyIEVQRiAqLworI2RlZmluZSBVRENDUkcgICAgICAgICAgX19SRUcoMHg0MDYwMDQxQykgLyogQ29uZmlndXJhdGlvbiByZWdpc3RlciBFUEcgKi8KKyNkZWZpbmUgVURDQ1JIICAgICAgICAgIF9fUkVHKDB4NDA2MDA0MjApIC8qIENvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgRVBIICovCisjZGVmaW5lIFVEQ0NSSSAgICAgICAgICBfX1JFRygweDQwNjAwNDI0KSAvKiBDb25maWd1cmF0aW9uIHJlZ2lzdGVyIEVQSSAqLworI2RlZmluZSBVRENDUkogICAgICAgICAgX19SRUcoMHg0MDYwMDQyOCkgLyogQ29uZmlndXJhdGlvbiByZWdpc3RlciBFUEogKi8KKyNkZWZpbmUgVURDQ1JLICAgICAgICAgIF9fUkVHKDB4NDA2MDA0MkMpIC8qIENvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgRVBLICovCisjZGVmaW5lIFVEQ0NSTCAgICAgICAgICBfX1JFRygweDQwNjAwNDMwKSAvKiBDb25maWd1cmF0aW9uIHJlZ2lzdGVyIEVQTCAqLworI2RlZmluZSBVRENDUk0gICAgICAgICAgX19SRUcoMHg0MDYwMDQzNCkgLyogQ29uZmlndXJhdGlvbiByZWdpc3RlciBFUE0gKi8KKyNkZWZpbmUgVURDQ1JOICAgICAgICAgIF9fUkVHKDB4NDA2MDA0MzgpIC8qIENvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgRVBOICovCisjZGVmaW5lIFVEQ0NSUCAgICAgICAgICBfX1JFRygweDQwNjAwNDNDKSAvKiBDb25maWd1cmF0aW9uIHJlZ2lzdGVyIEVQUCAqLworI2RlZmluZSBVRENDUlEgICAgICAgICAgX19SRUcoMHg0MDYwMDQ0MCkgLyogQ29uZmlndXJhdGlvbiByZWdpc3RlciBFUFEgKi8KKyNkZWZpbmUgVURDQ1JSICAgICAgICAgIF9fUkVHKDB4NDA2MDA0NDQpIC8qIENvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgRVBSICovCisjZGVmaW5lIFVEQ0NSUyAgICAgICAgICBfX1JFRygweDQwNjAwNDQ4KSAvKiBDb25maWd1cmF0aW9uIHJlZ2lzdGVyIEVQUyAqLworI2RlZmluZSBVRENDUlQgICAgICAgICAgX19SRUcoMHg0MDYwMDQ0QykgLyogQ29uZmlndXJhdGlvbiByZWdpc3RlciBFUFQgKi8KKyNkZWZpbmUgVURDQ1JVICAgICAgICAgIF9fUkVHKDB4NDA2MDA0NTApIC8qIENvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgRVBVICovCisjZGVmaW5lIFVEQ0NSViAgICAgICAgICBfX1JFRygweDQwNjAwNDU0KSAvKiBDb25maWd1cmF0aW9uIHJlZ2lzdGVyIEVQViAqLworI2RlZmluZSBVRENDUlcgICAgICAgICAgX19SRUcoMHg0MDYwMDQ1OCkgLyogQ29uZmlndXJhdGlvbiByZWdpc3RlciBFUFcgKi8KKyNkZWZpbmUgVURDQ1JYICAgICAgICAgIF9fUkVHKDB4NDA2MDA0NUMpIC8qIENvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgRVBYICovCisKKyNkZWZpbmUgVURDQ09OUl9DTgkoMHgwMyA8PCAyNSkJLyogQ29uZmlndXJhdGlvbiBOdW1iZXIgKi8KKyNkZWZpbmUgVURDQ09OUl9DTl9TCSgyNSkKKyNkZWZpbmUgVURDQ09OUl9JTgkoMHgwNyA8PCAyMikJLyogSW50ZXJmYWNlIE51bWJlciAqLworI2RlZmluZSBVRENDT05SX0lOX1MJKDIyKQorI2RlZmluZSBVRENDT05SX0FJU04JKDB4MDcgPDwgMTkpCS8qIEFsdGVybmF0ZSBJbnRlcmZhY2UgTnVtYmVyICovCisjZGVmaW5lIFVEQ0NPTlJfQUlTTl9TCSgxOSkKKyNkZWZpbmUgVURDQ09OUl9FTgkoMHgwZiA8PCAxNSkJLyogRW5kcG9pbnQgTnVtYmVyICovCisjZGVmaW5lIFVEQ0NPTlJfRU5fUwkoMTUpCisjZGVmaW5lIFVEQ0NPTlJfRVQJKDB4MDMgPDwgMTMpCS8qIEVuZHBvaW50IFR5cGU6ICovCisjZGVmaW5lIFVEQ0NPTlJfRVRfUwkoMTMpCisjZGVmaW5lIFVEQ0NPTlJfRVRfSU5UCSgweDAzIDw8IDEzKQkvKiAgIEludGVycnVwdCAqLworI2RlZmluZSBVRENDT05SX0VUX0JVTEsJKDB4MDIgPDwgMTMpCS8qICAgQnVsayAqLworI2RlZmluZSBVRENDT05SX0VUX0lTTwkoMHgwMSA8PCAxMykJLyogICBJc29jaHJvbm91cyAqLworI2RlZmluZSBVRENDT05SX0VUX05VCSgweDAwIDw8IDEzKQkvKiAgIE5vdCB1c2VkICovCisjZGVmaW5lIFVEQ0NPTlJfRUQJKDEgPDwgMTIpCS8qIEVuZHBvaW50IERpcmVjdGlvbiAqLworI2RlZmluZSBVRENDT05SX01QUwkoMHgzZmYgPDwgMikJLyogTWF4aW11bSBQYWNrZXQgU2l6ZSAqLworI2RlZmluZSBVRENDT05SX01QU19TCSgyKQorI2RlZmluZSBVRENDT05SX0RFCSgxIDw8IDEpCS8qIERvdWJsZSBCdWZmZXJpbmcgRW5hYmxlICovCisjZGVmaW5lIFVEQ0NPTlJfRUUJKDEgPDwgMCkJLyogRW5kcG9pbnQgRW5hYmxlICovCisKKworI2RlZmluZSBVRENfSU5UX0ZJRk9FUlJPUiAgKDB4MikKKyNkZWZpbmUgVURDX0lOVF9QQUNLRVRDTVAgICgweDEpCisKKyNkZWZpbmUgVURDX0ZOUl9NQVNLICAgICAoMHg3ZmYpCisKKyNkZWZpbmUgVURDQ1NSX1dSX01BU0sgICAoVURDQ1NSX0RNRXxVRENDU1JfRlNUKQorI2RlZmluZSBVRENfQkNSX01BU0sgICAgKDB4M2ZmKQorI2VuZGlmCisKKy8qCisgKiBGYXN0IEluZnJhcmVkIENvbW11bmljYXRpb24gUG9ydAorICovCisKKyNkZWZpbmUgRklDUAkJX19SRUcoMHg0MDgwMDAwMCkgIC8qIFN0YXJ0IG9mIEZJQ1AgYXJlYSAqLworI2RlZmluZSBJQ0NSMAkJX19SRUcoMHg0MDgwMDAwMCkgIC8qIElDUCBDb250cm9sIFJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUgSUNDUjEJCV9fUkVHKDB4NDA4MDAwMDQpICAvKiBJQ1AgQ29udHJvbCBSZWdpc3RlciAxICovCisjZGVmaW5lIElDQ1IyCQlfX1JFRygweDQwODAwMDA4KSAgLyogSUNQIENvbnRyb2wgUmVnaXN0ZXIgMiAqLworI2RlZmluZSBJQ0RSCQlfX1JFRygweDQwODAwMDBjKSAgLyogSUNQIERhdGEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSUNTUjAJCV9fUkVHKDB4NDA4MDAwMTQpICAvKiBJQ1AgU3RhdHVzIFJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUgSUNTUjEJCV9fUkVHKDB4NDA4MDAwMTgpICAvKiBJQ1AgU3RhdHVzIFJlZ2lzdGVyIDEgKi8KKworI2RlZmluZSBJQ0NSMF9BTUUJKDEgPDwgNykJLyogQWRyZXNzIG1hdGNoIGVuYWJsZSAqLworI2RlZmluZSBJQ0NSMF9USUUJKDEgPDwgNikJLyogVHJhbnNtaXQgRklGTyBpbnRlcnJ1cHQgZW5hYmxlICovCisjZGVmaW5lIElDQ1IwX1JJRQkoMSA8PCA1KQkvKiBSZWNpZXZlIEZJRk8gaW50ZXJydXB0IGVuYWJsZSAqLworI2RlZmluZSBJQ0NSMF9SWEUJKDEgPDwgNCkJLyogUmVjZWl2ZSBlbmFibGUgKi8KKyNkZWZpbmUgSUNDUjBfVFhFCSgxIDw8IDMpCS8qIFRyYW5zbWl0IGVuYWJsZSAqLworI2RlZmluZSBJQ0NSMF9UVVMJKDEgPDwgMikJLyogVHJhbnNtaXQgRklGTyB1bmRlcnJ1biBzZWxlY3QgKi8KKyNkZWZpbmUgSUNDUjBfTEJNCSgxIDw8IDEpCS8qIExvb3BiYWNrIG1vZGUgKi8KKyNkZWZpbmUgSUNDUjBfSVRSCSgxIDw8IDApCS8qIElyREEgdHJhbnNtaXNzaW9uICovCisKKyNpZmRlZiBDT05GSUdfUFhBMjd4CisjZGVmaW5lIElDQ1IyX1JYUCAgICAgICAoMSA8PCAzKQkvKiBSZWNlaXZlIFBpbiBQb2xhcml0eSBzZWxlY3QgKi8KKyNkZWZpbmUgSUNDUjJfVFhQICAgICAgICgxIDw8IDIpCS8qIFRyYW5zbWl0IFBpbiBQb2xhcml0eSBzZWxlY3QgKi8KKyNkZWZpbmUgSUNDUjJfVFJJRwkoMyA8PCAwKQkvKiBSZWNlaXZlIEZJRk8gVHJpZ2dlciB0aHJlc2hvbGQgKi8KKyNkZWZpbmUgSUNDUjJfVFJJR184ICAgICgwIDw8IDApCS8qIAk+PSA4IGJ5dGVzICovCisjZGVmaW5lIElDQ1IyX1RSSUdfMTYgICAoMSA8PCAwKQkvKgk+PSAxNiBieXRlcyAqLworI2RlZmluZSBJQ0NSMl9UUklHXzMyICAgKDIgPDwgMCkJLyoJPj0gMzIgYnl0ZXMgKi8KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1BYQTI3eAorI2RlZmluZSBJQ1NSMF9FT0MJKDEgPDwgNikJLyogRE1BIEVuZCBvZiBEZXNjcmlwdG9yIENoYWluICovCisjZW5kaWYKKyNkZWZpbmUgSUNTUjBfRlJFCSgxIDw8IDUpCS8qIEZyYW1pbmcgZXJyb3IgKi8KKyNkZWZpbmUgSUNTUjBfUkZTCSgxIDw8IDQpCS8qIFJlY2VpdmUgRklGTyBzZXJ2aWNlIHJlcXVlc3QgKi8KKyNkZWZpbmUgSUNTUjBfVEZTCSgxIDw8IDMpCS8qIFRyYW5zbml0IEZJRk8gc2VydmljZSByZXF1ZXN0ICovCisjZGVmaW5lIElDU1IwX1JBQgkoMSA8PCAyKQkvKiBSZWNlaXZlciBhYm9ydCAqLworI2RlZmluZSBJQ1NSMF9UVVIJKDEgPDwgMSkJLyogVHJ1bnNtaXQgRklGTyB1bmRlcnVuICovCisjZGVmaW5lIElDU1IwX0VJRgkoMSA8PCAwKQkvKiBFbmQvRXJyb3IgaW4gRklGTyAqLworCisjZGVmaW5lIElDU1IxX1JPUgkoMSA8PCA2KQkvKiBSZWNlaXZlciBGSUZPIHVuZGVycnVuICAqLworI2RlZmluZSBJQ1NSMV9DUkUJKDEgPDwgNSkJLyogQ1JDIGVycm9yICovCisjZGVmaW5lIElDU1IxX0VPRgkoMSA8PCA0KQkvKiBFbmQgb2YgZnJhbWUgKi8KKyNkZWZpbmUgSUNTUjFfVE5GCSgxIDw8IDMpCS8qIFRyYW5zbWl0IEZJRk8gbm90IGZ1bGwgKi8KKyNkZWZpbmUgSUNTUjFfUk5FCSgxIDw8IDIpCS8qIFJlY2VpdmUgRklGTyBub3QgZW1wdHkgKi8KKyNkZWZpbmUgSUNTUjFfVEJZCSgxIDw8IDEpCS8qIFRyYW1zbWl0ZXIgYnVzeSBmbGFnICovCisjZGVmaW5lIElDU1IxX1JTWQkoMSA8PCAwKQkvKiBSZWNldmllciBzeW5jaHJvbml6ZWQgZmxhZyAqLworCisKKy8qCisgKiBSZWFsIFRpbWUgQ2xvY2sKKyAqLworCisjZGVmaW5lIFJDTlIJCV9fUkVHKDB4NDA5MDAwMDApICAvKiBSVEMgQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUlRBUgkJX19SRUcoMHg0MDkwMDAwNCkgIC8qIFJUQyBBbGFybSBSZWdpc3RlciAqLworI2RlZmluZSBSVFNSCQlfX1JFRygweDQwOTAwMDA4KSAgLyogUlRDIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBSVFRSCQlfX1JFRygweDQwOTAwMDBDKSAgLyogUlRDIFRpbWVyIFRyaW0gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUElBUgkJX19SRUcoMHg0MDkwMDAzOCkgIC8qIFBlcmlvZGljIEludGVycnVwdCBBbGFybSBSZWdpc3RlciAqLworCisjZGVmaW5lIFJUU1JfUElDRQkoMSA8PCAxNSkJLyogUGVyaW9kaWMgaW50ZXJydXB0IGNvdW50IGVuYWJsZSAqLworI2RlZmluZSBSVFNSX1BJQUxFCSgxIDw8IDE0KQkvKiBQZXJpb2RpYyBpbnRlcnJ1cHQgQWxhcm0gZW5hYmxlICovCisjZGVmaW5lIFJUU1JfSFpFCSgxIDw8IDMpCS8qIEhaIGludGVycnVwdCBlbmFibGUgKi8KKyNkZWZpbmUgUlRTUl9BTEUJKDEgPDwgMikJLyogUlRDIGFsYXJtIGludGVycnVwdCBlbmFibGUgKi8KKyNkZWZpbmUgUlRTUl9IWgkJKDEgPDwgMSkJLyogSFogcmlzaW5nLWVkZ2UgZGV0ZWN0ZWQgKi8KKyNkZWZpbmUgUlRTUl9BTAkJKDEgPDwgMCkJLyogUlRDIGFsYXJtIGRldGVjdGVkICovCisKKworLyoKKyAqIE9TIFRpbWVyICYgTWF0Y2ggUmVnaXN0ZXJzCisgKi8KKworI2RlZmluZSBPU01SMAkJX19SRUcoMHg0MEEwMDAwMCkgIC8qICovCisjZGVmaW5lIE9TTVIxCQlfX1JFRygweDQwQTAwMDA0KSAgLyogKi8KKyNkZWZpbmUgT1NNUjIJCV9fUkVHKDB4NDBBMDAwMDgpICAvKiAqLworI2RlZmluZSBPU01SMwkJX19SRUcoMHg0MEEwMDAwQykgIC8qICovCisjZGVmaW5lIE9TTVI0CQlfX1JFRygweDQwQTAwMDgwKSAgLyogKi8KKyNkZWZpbmUgT1NDUgkJX19SRUcoMHg0MEEwMDAxMCkgIC8qIE9TIFRpbWVyIENvdW50ZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgT1NDUjQJCV9fUkVHKDB4NDBBMDAwNDApICAvKiBPUyBUaW1lciBDb3VudGVyIFJlZ2lzdGVyICovCisjZGVmaW5lIE9NQ1I0CQlfX1JFRygweDQwQTAwMEMwKSAgLyogKi8KKyNkZWZpbmUgT1NTUgkJX19SRUcoMHg0MEEwMDAxNCkgIC8qIE9TIFRpbWVyIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBPV0VSCQlfX1JFRygweDQwQTAwMDE4KSAgLyogT1MgVGltZXIgV2F0Y2hkb2cgRW5hYmxlIFJlZ2lzdGVyICovCisjZGVmaW5lIE9JRVIJCV9fUkVHKDB4NDBBMDAwMUMpICAvKiBPUyBUaW1lciBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovCisKKyNkZWZpbmUgT1NTUl9NMwkJKDEgPDwgMykJLyogTWF0Y2ggc3RhdHVzIGNoYW5uZWwgMyAqLworI2RlZmluZSBPU1NSX00yCQkoMSA8PCAyKQkvKiBNYXRjaCBzdGF0dXMgY2hhbm5lbCAyICovCisjZGVmaW5lIE9TU1JfTTEJCSgxIDw8IDEpCS8qIE1hdGNoIHN0YXR1cyBjaGFubmVsIDEgKi8KKyNkZWZpbmUgT1NTUl9NMAkJKDEgPDwgMCkJLyogTWF0Y2ggc3RhdHVzIGNoYW5uZWwgMCAqLworCisjZGVmaW5lIE9XRVJfV01FCSgxIDw8IDApCS8qIFdhdGNoZG9nIE1hdGNoIEVuYWJsZSAqLworCisjZGVmaW5lIE9JRVJfRTMJCSgxIDw8IDMpCS8qIEludGVycnVwdCBlbmFibGUgY2hhbm5lbCAzICovCisjZGVmaW5lIE9JRVJfRTIJCSgxIDw8IDIpCS8qIEludGVycnVwdCBlbmFibGUgY2hhbm5lbCAyICovCisjZGVmaW5lIE9JRVJfRTEJCSgxIDw8IDEpCS8qIEludGVycnVwdCBlbmFibGUgY2hhbm5lbCAxICovCisjZGVmaW5lIE9JRVJfRTAJCSgxIDw8IDApCS8qIEludGVycnVwdCBlbmFibGUgY2hhbm5lbCAwICovCisKKworLyoKKyAqIFB1bHNlIFdpZHRoIE1vZHVsYXRvcgorICovCisKKyNkZWZpbmUgUFdNX0NUUkwwCV9fUkVHKDB4NDBCMDAwMDApICAvKiBQV00gMCBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFBXTV9QV0RVVFkwCV9fUkVHKDB4NDBCMDAwMDQpICAvKiBQV00gMCBEdXR5IEN5Y2xlIFJlZ2lzdGVyICovCisjZGVmaW5lIFBXTV9QRVJWQUwwCV9fUkVHKDB4NDBCMDAwMDgpICAvKiBQV00gMCBQZXJpb2QgQ29udHJvbCBSZWdpc3RlciAqLworCisjZGVmaW5lIFBXTV9DVFJMMQlfX1JFRygweDQwQzAwMDAwKSAgLyogUFdNIDFDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFBXTV9QV0RVVFkxCV9fUkVHKDB4NDBDMDAwMDQpICAvKiBQV00gMSBEdXR5IEN5Y2xlIFJlZ2lzdGVyICovCisjZGVmaW5lIFBXTV9QRVJWQUwxCV9fUkVHKDB4NDBDMDAwMDgpICAvKiBQV00gMSBQZXJpb2QgQ29udHJvbCBSZWdpc3RlciAqLworCisKKy8qCisgKiBJbnRlcnJ1cHQgQ29udHJvbGxlcgorICovCisKKyNkZWZpbmUgSUNJUAkJX19SRUcoMHg0MEQwMDAwMCkgIC8qIEludGVycnVwdCBDb250cm9sbGVyIElSUSBQZW5kaW5nIFJlZ2lzdGVyICovCisjZGVmaW5lIElDTVIJCV9fUkVHKDB4NDBEMDAwMDQpICAvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBNYXNrIFJlZ2lzdGVyICovCisjZGVmaW5lIElDTFIJCV9fUkVHKDB4NDBEMDAwMDgpICAvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBMZXZlbCBSZWdpc3RlciAqLworI2RlZmluZSBJQ0ZQCQlfX1JFRygweDQwRDAwMDBDKSAgLyogSW50ZXJydXB0IENvbnRyb2xsZXIgRklRIFBlbmRpbmcgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSUNQUgkJX19SRUcoMHg0MEQwMDAxMCkgIC8qIEludGVycnVwdCBDb250cm9sbGVyIFBlbmRpbmcgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSUNDUgkJX19SRUcoMHg0MEQwMDAxNCkgIC8qIEludGVycnVwdCBDb250cm9sbGVyIENvbnRyb2wgUmVnaXN0ZXIgKi8KKworCisvKgorICogR2VuZXJhbCBQdXJwb3NlIEkvTworICovCisKKyNkZWZpbmUgR1BMUjAJCV9fUkVHKDB4NDBFMDAwMDApICAvKiBHUElPIFBpbi1MZXZlbCBSZWdpc3RlciBHUElPPDMxOjA+ICovCisjZGVmaW5lIEdQTFIxCQlfX1JFRygweDQwRTAwMDA0KSAgLyogR1BJTyBQaW4tTGV2ZWwgUmVnaXN0ZXIgR1BJTzw2MzozMj4gKi8KKyNkZWZpbmUgR1BMUjIJCV9fUkVHKDB4NDBFMDAwMDgpICAvKiBHUElPIFBpbi1MZXZlbCBSZWdpc3RlciBHUElPPDgwOjY0PiAqLworCisjZGVmaW5lIEdQRFIwCQlfX1JFRygweDQwRTAwMDBDKSAgLyogR1BJTyBQaW4gRGlyZWN0aW9uIFJlZ2lzdGVyIEdQSU88MzE6MD4gKi8KKyNkZWZpbmUgR1BEUjEJCV9fUkVHKDB4NDBFMDAwMTApICAvKiBHUElPIFBpbiBEaXJlY3Rpb24gUmVnaXN0ZXIgR1BJTzw2MzozMj4gKi8KKyNkZWZpbmUgR1BEUjIJCV9fUkVHKDB4NDBFMDAwMTQpICAvKiBHUElPIFBpbiBEaXJlY3Rpb24gUmVnaXN0ZXIgR1BJTzw4MDo2ND4gKi8KKworI2RlZmluZSBHUFNSMAkJX19SRUcoMHg0MEUwMDAxOCkgIC8qIEdQSU8gUGluIE91dHB1dCBTZXQgUmVnaXN0ZXIgR1BJTzwzMTowPiAqLworI2RlZmluZSBHUFNSMQkJX19SRUcoMHg0MEUwMDAxQykgIC8qIEdQSU8gUGluIE91dHB1dCBTZXQgUmVnaXN0ZXIgR1BJTzw2MzozMj4gKi8KKyNkZWZpbmUgR1BTUjIJCV9fUkVHKDB4NDBFMDAwMjApICAvKiBHUElPIFBpbiBPdXRwdXQgU2V0IFJlZ2lzdGVyIEdQSU88ODA6NjQ+ICovCisKKyNkZWZpbmUgR1BDUjAJCV9fUkVHKDB4NDBFMDAwMjQpICAvKiBHUElPIFBpbiBPdXRwdXQgQ2xlYXIgUmVnaXN0ZXIgR1BJTzwzMTowPiAqLworI2RlZmluZSBHUENSMQkJX19SRUcoMHg0MEUwMDAyOCkgIC8qIEdQSU8gUGluIE91dHB1dCBDbGVhciBSZWdpc3RlciBHUElPIDw2MzozMj4gKi8KKyNkZWZpbmUgR1BDUjIJCV9fUkVHKDB4NDBFMDAwMkMpICAvKiBHUElPIFBpbiBPdXRwdXQgQ2xlYXIgUmVnaXN0ZXIgR1BJTyA8ODA6NjQ+ICovCisKKyNkZWZpbmUgR1JFUjAJCV9fUkVHKDB4NDBFMDAwMzApICAvKiBHUElPIFJpc2luZy1FZGdlIERldGVjdCBSZWdpc3RlciBHUElPPDMxOjA+ICovCisjZGVmaW5lIEdSRVIxCQlfX1JFRygweDQwRTAwMDM0KSAgLyogR1BJTyBSaXNpbmctRWRnZSBEZXRlY3QgUmVnaXN0ZXIgR1BJTzw2MzozMj4gKi8KKyNkZWZpbmUgR1JFUjIJCV9fUkVHKDB4NDBFMDAwMzgpICAvKiBHUElPIFJpc2luZy1FZGdlIERldGVjdCBSZWdpc3RlciBHUElPPDgwOjY0PiAqLworCisjZGVmaW5lIEdGRVIwCQlfX1JFRygweDQwRTAwMDNDKSAgLyogR1BJTyBGYWxsaW5nLUVkZ2UgRGV0ZWN0IFJlZ2lzdGVyIEdQSU88MzE6MD4gKi8KKyNkZWZpbmUgR0ZFUjEJCV9fUkVHKDB4NDBFMDAwNDApICAvKiBHUElPIEZhbGxpbmctRWRnZSBEZXRlY3QgUmVnaXN0ZXIgR1BJTzw2MzozMj4gKi8KKyNkZWZpbmUgR0ZFUjIJCV9fUkVHKDB4NDBFMDAwNDQpICAvKiBHUElPIEZhbGxpbmctRWRnZSBEZXRlY3QgUmVnaXN0ZXIgR1BJTzw4MDo2ND4gKi8KKworI2RlZmluZSBHRURSMAkJX19SRUcoMHg0MEUwMDA0OCkgIC8qIEdQSU8gRWRnZSBEZXRlY3QgU3RhdHVzIFJlZ2lzdGVyIEdQSU88MzE6MD4gKi8KKyNkZWZpbmUgR0VEUjEJCV9fUkVHKDB4NDBFMDAwNEMpICAvKiBHUElPIEVkZ2UgRGV0ZWN0IFN0YXR1cyBSZWdpc3RlciBHUElPPDYzOjMyPiAqLworI2RlZmluZSBHRURSMgkJX19SRUcoMHg0MEUwMDA1MCkgIC8qIEdQSU8gRWRnZSBEZXRlY3QgU3RhdHVzIFJlZ2lzdGVyIEdQSU88ODA6NjQ+ICovCisKKyNkZWZpbmUgR0FGUjBfTAkJX19SRUcoMHg0MEUwMDA1NCkgIC8qIEdQSU8gQWx0ZXJuYXRlIEZ1bmN0aW9uIFNlbGVjdCBSZWdpc3RlciBHUElPPDE1OjA+ICovCisjZGVmaW5lIEdBRlIwX1UJCV9fUkVHKDB4NDBFMDAwNTgpICAvKiBHUElPIEFsdGVybmF0ZSBGdW5jdGlvbiBTZWxlY3QgUmVnaXN0ZXIgR1BJTzwzMToxNj4gKi8KKyNkZWZpbmUgR0FGUjFfTAkJX19SRUcoMHg0MEUwMDA1QykgIC8qIEdQSU8gQWx0ZXJuYXRlIEZ1bmN0aW9uIFNlbGVjdCBSZWdpc3RlciBHUElPPDQ3OjMyPiAqLworI2RlZmluZSBHQUZSMV9VCQlfX1JFRygweDQwRTAwMDYwKSAgLyogR1BJTyBBbHRlcm5hdGUgRnVuY3Rpb24gU2VsZWN0IFJlZ2lzdGVyIEdQSU88NjM6NDg+ICovCisjZGVmaW5lIEdBRlIyX0wJCV9fUkVHKDB4NDBFMDAwNjQpICAvKiBHUElPIEFsdGVybmF0ZSBGdW5jdGlvbiBTZWxlY3QgUmVnaXN0ZXIgR1BJTzw3OTo2ND4gKi8KKyNkZWZpbmUgR0FGUjJfVQkJX19SRUcoMHg0MEUwMDA2OCkgIC8qIEdQSU8gQWx0ZXJuYXRlIEZ1bmN0aW9uIFNlbGVjdCBSZWdpc3RlciBHUElPPDk1LTgwPiAqLworI2RlZmluZSBHQUZSM19MCQlfX1JFRygweDQwRTAwMDZDKSAgLyogR1BJTyBBbHRlcm5hdGUgRnVuY3Rpb24gU2VsZWN0IFJlZ2lzdGVyIEdQSU88MTExOjk2PiAqLworI2RlZmluZSBHQUZSM19VCQlfX1JFRygweDQwRTAwMDcwKSAgLyogR1BJTyBBbHRlcm5hdGUgRnVuY3Rpb24gU2VsZWN0IFJlZ2lzdGVyIEdQSU88MTI3OjExMj4gKi8KKworI2RlZmluZSBHUExSMwkJX19SRUcoMHg0MEUwMDEwMCkgIC8qIEdQSU8gUGluLUxldmVsIFJlZ2lzdGVyIEdQSU88MTI3Ojk2PiAqLworI2RlZmluZSBHUERSMwkJX19SRUcoMHg0MEUwMDEwQykgIC8qIEdQSU8gUGluIERpcmVjdGlvbiBSZWdpc3RlciBHUElPPDEyNzo5Nj4gKi8KKyNkZWZpbmUgR1BTUjMJCV9fUkVHKDB4NDBFMDAxMTgpICAvKiBHUElPIFBpbiBPdXRwdXQgU2V0IFJlZ2lzdGVyIEdQSU88MTI3Ojk2PiAqLworI2RlZmluZSBHUENSMwkJX19SRUcoMHg0MEUwMDEyNCkgIC8qIEdQSU8gUGluIE91dHB1dCBDbGVhciBSZWdpc3RlciBHUElPPDEyNzo5Nj4gKi8KKyNkZWZpbmUgR1JFUjMJCV9fUkVHKDB4NDBFMDAxMzApICAvKiBHUElPIFJpc2luZy1FZGdlIERldGVjdCBSZWdpc3RlciBHUElPPDEyNzo5Nj4gKi8KKyNkZWZpbmUgR0ZFUjMJCV9fUkVHKDB4NDBFMDAxM0MpICAvKiBHUElPIEZhbGxpbmctRWRnZSBEZXRlY3QgUmVnaXN0ZXIgR1BJTzwxMjc6OTY+ICovCisjZGVmaW5lIEdFRFIzCQlfX1JFRygweDQwRTAwMTQ4KSAgLyogR1BJTyBFZGdlIERldGVjdCBTdGF0dXMgUmVnaXN0ZXIgR1BJTzwxMjc6OTY+ICovCisKKy8qIE1vcmUgaGFuZHkgbWFjcm9zLiAgVGhlIGFyZ3VtZW50IGlzIGEgbGl0ZXJhbCBHUElPIG51bWJlci4gKi8KKworI2RlZmluZSBHUElPX2JpdCh4KQkoMSA8PCAoKHgpICYgMHgxZikpCisKKyNpZmRlZiBDT05GSUdfUFhBMjd4CisKKy8qIEludGVycnVwdCBDb250cm9sbGVyICovCisKKyNkZWZpbmUgSUNJUDIJCV9fUkVHKDB4NDBEMDAwOUMpICAvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBJUlEgUGVuZGluZyBSZWdpc3RlciAyICovCisjZGVmaW5lIElDTVIyCQlfX1JFRygweDQwRDAwMEEwKSAgLyogSW50ZXJydXB0IENvbnRyb2xsZXIgTWFzayBSZWdpc3RlciAyICovCisjZGVmaW5lIElDTFIyCQlfX1JFRygweDQwRDAwMEE0KSAgLyogSW50ZXJydXB0IENvbnRyb2xsZXIgTGV2ZWwgUmVnaXN0ZXIgMiAqLworI2RlZmluZSBJQ0ZQMgkJX19SRUcoMHg0MEQwMDBBOCkgIC8qIEludGVycnVwdCBDb250cm9sbGVyIEZJUSBQZW5kaW5nIFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgSUNQUjIJCV9fUkVHKDB4NDBEMDAwQUMpICAvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBQZW5kaW5nIFJlZ2lzdGVyIDIgKi8KKworI2RlZmluZSBfR1BMUih4KQlfX1JFRzIoMHg0MEUwMDAwMCwgKCh4KSAmIDB4NjApID4+IDMpCisjZGVmaW5lIF9HUERSKHgpCV9fUkVHMigweDQwRTAwMDBDLCAoKHgpICYgMHg2MCkgPj4gMykKKyNkZWZpbmUgX0dQU1IoeCkJX19SRUcyKDB4NDBFMDAwMTgsICgoeCkgJiAweDYwKSA+PiAzKQorI2RlZmluZSBfR1BDUih4KQlfX1JFRzIoMHg0MEUwMDAyNCwgKCh4KSAmIDB4NjApID4+IDMpCisjZGVmaW5lIF9HUkVSKHgpCV9fUkVHMigweDQwRTAwMDMwLCAoKHgpICYgMHg2MCkgPj4gMykKKyNkZWZpbmUgX0dGRVIoeCkJX19SRUcyKDB4NDBFMDAwM0MsICgoeCkgJiAweDYwKSA+PiAzKQorI2RlZmluZSBfR0VEUih4KQlfX1JFRzIoMHg0MEUwMDA0OCwgKCh4KSAmIDB4NjApID4+IDMpCisjZGVmaW5lIF9HQUZSKHgpCV9fUkVHMigweDQwRTAwMDU0LCAoKHgpICYgMHg3MCkgPj4gMikKKworI2RlZmluZSBHUExSKHgpIAkoKigoKCh4KSAmIDB4N2YpIDwgOTYpID8gJl9HUExSKHgpIDogJkdQTFIzKSkKKyNkZWZpbmUgR1BEUih4KQkJKCooKCgoeCkgJiAweDdmKSA8IDk2KSA/ICZfR1BEUih4KSA6ICZHUERSMykpCisjZGVmaW5lIEdQU1IoeCkJCSgqKCgoKHgpICYgMHg3ZikgPCA5NikgPyAmX0dQU1IoeCkgOiAmR1BTUjMpKQorI2RlZmluZSBHUENSKHgpCQkoKigoKCh4KSAmIDB4N2YpIDwgOTYpID8gJl9HUENSKHgpIDogJkdQQ1IzKSkKKyNkZWZpbmUgR1JFUih4KQkJKCooKCgoeCkgJiAweDdmKSA8IDk2KSA/ICZfR1JFUih4KSA6ICZHUkVSMykpCisjZGVmaW5lIEdGRVIoeCkJCSgqKCgoKHgpICYgMHg3ZikgPCA5NikgPyAmX0dGRVIoeCkgOiAmR0ZFUjMpKQorI2RlZmluZSBHRURSKHgpCQkoKigoKCh4KSAmIDB4N2YpIDwgOTYpID8gJl9HRURSKHgpIDogJkdFRFIzKSkKKyNkZWZpbmUgR0FGUih4KQkJKCooKCgoeCkgJiAweDdmKSA8IDk2KSA/ICZfR0FGUih4KSA6IFwKKwkJCSAoKCgoeCkgJiAweDdmKSA8IDExMikgPyAmR0FGUjNfTCA6ICZHQUZSM19VKSkpCisjZWxzZQorCisjZGVmaW5lIEdQTFIoeCkJCV9fUkVHMigweDQwRTAwMDAwLCAoKHgpICYgMHg2MCkgPj4gMykKKyNkZWZpbmUgR1BEUih4KQkJX19SRUcyKDB4NDBFMDAwMEMsICgoeCkgJiAweDYwKSA+PiAzKQorI2RlZmluZSBHUFNSKHgpCQlfX1JFRzIoMHg0MEUwMDAxOCwgKCh4KSAmIDB4NjApID4+IDMpCisjZGVmaW5lIEdQQ1IoeCkJCV9fUkVHMigweDQwRTAwMDI0LCAoKHgpICYgMHg2MCkgPj4gMykKKyNkZWZpbmUgR1JFUih4KQkJX19SRUcyKDB4NDBFMDAwMzAsICgoeCkgJiAweDYwKSA+PiAzKQorI2RlZmluZSBHRkVSKHgpCQlfX1JFRzIoMHg0MEUwMDAzQywgKCh4KSAmIDB4NjApID4+IDMpCisjZGVmaW5lIEdFRFIoeCkJCV9fUkVHMigweDQwRTAwMDQ4LCAoKHgpICYgMHg2MCkgPj4gMykKKyNkZWZpbmUgR0FGUih4KQkJX19SRUcyKDB4NDBFMDAwNTQsICgoeCkgJiAweDcwKSA+PiAyKQorCisjZW5kaWYKKworCisvKiBHUElPIGFsdGVybmF0ZSBmdW5jdGlvbiBhc3NpZ25tZW50cyAqLworCisjZGVmaW5lIEdQSU8xX1JTVAkJMQkvKiByZXNldCAqLworI2RlZmluZSBHUElPNl9NTUNDTEsJCTYJLyogTU1DIENsb2NrICovCisjZGVmaW5lIEdQSU83XzQ4TUh6CQk3CS8qIDQ4IE1IeiBjbG9jayBvdXRwdXQgKi8KKyNkZWZpbmUgR1BJTzhfTU1DQ1MwCQk4CS8qIE1NQyBDaGlwIFNlbGVjdCAwICovCisjZGVmaW5lIEdQSU85X01NQ0NTMQkJOQkvKiBNTUMgQ2hpcCBTZWxlY3QgMSAqLworI2RlZmluZSBHUElPMTBfUlRDQ0xLCQkxMAkvKiByZWFsIHRpbWUgY2xvY2sgKDEgSHopICovCisjZGVmaW5lIEdQSU8xMV8zXzZNSHoJCTExCS8qIDMuNiBNSHogb3NjaWxsYXRvciBvdXQgKi8KKyNkZWZpbmUgR1BJTzEyXzMyS0h6CQkxMgkvKiAzMiBrSHogb3V0ICovCisjZGVmaW5lIEdQSU8xM19NQkdOVAkJMTMJLyogbWVtb3J5IGNvbnRyb2xsZXIgZ3JhbnQgKi8KKyNkZWZpbmUgR1BJTzE0X01CUkVRCQkxNAkvKiBhbHRlcm5hdGUgYnVzIG1hc3RlciByZXF1ZXN0ICovCisjZGVmaW5lIEdQSU8xNV9uQ1NfMQkJMTUJLyogY2hpcCBzZWxlY3QgMSAqLworI2RlZmluZSBHUElPMTZfUFdNMAkJMTYJLyogUFdNMCBvdXRwdXQgKi8KKyNkZWZpbmUgR1BJTzE3X1BXTTEJCTE3CS8qIFBXTTEgb3V0cHV0ICovCisjZGVmaW5lIEdQSU8xOF9SRFkJCTE4CS8qIEV4dC4gQnVzIFJlYWR5ICovCisjZGVmaW5lIEdQSU8xOV9EUkVRMQkJMTkJLyogRXh0ZXJuYWwgRE1BIFJlcXVlc3QgKi8KKyNkZWZpbmUgR1BJTzIwX0RSRVEwCQkyMAkvKiBFeHRlcm5hbCBETUEgUmVxdWVzdCAqLworI2RlZmluZSBHUElPMjNfU0NMSwkJMjMJLyogU1NQIGNsb2NrICovCisjZGVmaW5lIEdQSU8yNF9TRlJNCQkyNAkvKiBTU1AgRnJhbWUgKi8KKyNkZWZpbmUgR1BJTzI1X1NUWEQJCTI1CS8qIFNTUCB0cmFuc21pdCAqLworI2RlZmluZSBHUElPMjZfU1JYRAkJMjYJLyogU1NQIHJlY2VpdmUgKi8KKyNkZWZpbmUgR1BJTzI3X1NFWFRDTEsJCTI3CS8qIFNTUCBleHRfY2xrICovCisjZGVmaW5lIEdQSU8yOF9CSVRDTEsJCTI4CS8qIEFDOTcvSTJTIGJpdF9jbGsgKi8KKyNkZWZpbmUgR1BJTzI5X1NEQVRBX0lOCQkyOQkvKiBBQzk3IFNkYXRhX2luMCAvIEkyUyBTZGF0YV9pbiAqLworI2RlZmluZSBHUElPMzBfU0RBVEFfT1VUCTMwCS8qIEFDOTcvSTJTIFNkYXRhX291dCAqLworI2RlZmluZSBHUElPMzFfU1lOQwkJMzEJLyogQUM5Ny9JMlMgc3luYyAqLworI2RlZmluZSBHUElPMzJfU0RBVEFfSU4xCTMyCS8qIEFDOTcgU2RhdGFfaW4xICovCisjZGVmaW5lIEdQSU8zMl9TWVNDTEsJCTMyCS8qIEkyUyBTeXN0ZW0gQ2xvY2sgKi8KKyNkZWZpbmUgR1BJTzMyX01NQ0NMSwkJMzIJLyogTU1DIENsb2NrIChQWEEyNzApICovCisjZGVmaW5lIEdQSU8zM19uQ1NfNQkJMzMJLyogY2hpcCBzZWxlY3QgNSAqLworI2RlZmluZSBHUElPMzRfRkZSWEQJCTM0CS8qIEZGVUFSVCByZWNlaXZlICovCisjZGVmaW5lIEdQSU8zNF9NTUNDUzAJCTM0CS8qIE1NQyBDaGlwIFNlbGVjdCAwICovCisjZGVmaW5lIEdQSU8zNV9GRkNUUwkJMzUJLyogRkZVQVJUIENsZWFyIHRvIHNlbmQgKi8KKyNkZWZpbmUgR1BJTzM2X0ZGRENECQkzNgkvKiBGRlVBUlQgRGF0YSBjYXJyaWVyIGRldGVjdCAqLworI2RlZmluZSBHUElPMzdfRkZEU1IJCTM3CS8qIEZGVUFSVCBkYXRhIHNldCByZWFkeSAqLworI2RlZmluZSBHUElPMzhfRkZSSQkJMzgJLyogRkZVQVJUIFJpbmcgSW5kaWNhdG9yICovCisjZGVmaW5lIEdQSU8zOV9NTUNDUzEJCTM5CS8qIE1NQyBDaGlwIFNlbGVjdCAxICovCisjZGVmaW5lIEdQSU8zOV9GRlRYRAkJMzkJLyogRkZVQVJUIHRyYW5zbWl0IGRhdGEgKi8KKyNkZWZpbmUgR1BJTzQwX0ZGRFRSCQk0MAkvKiBGRlVBUlQgZGF0YSB0ZXJtaW5hbCBSZWFkeSAqLworI2RlZmluZSBHUElPNDFfRkZSVFMJCTQxCS8qIEZGVUFSVCByZXF1ZXN0IHRvIHNlbmQgKi8KKyNkZWZpbmUgR1BJTzQyX0JUUlhECQk0MgkvKiBCVFVBUlQgcmVjZWl2ZSBkYXRhICovCisjZGVmaW5lIEdQSU80M19CVFRYRAkJNDMJLyogQlRVQVJUIHRyYW5zbWl0IGRhdGEgKi8KKyNkZWZpbmUgR1BJTzQ0X0JUQ1RTCQk0NAkvKiBCVFVBUlQgY2xlYXIgdG8gc2VuZCAqLworI2RlZmluZSBHUElPNDVfQlRSVFMJCTQ1CS8qIEJUVUFSVCByZXF1ZXN0IHRvIHNlbmQgKi8KKyNkZWZpbmUgR1BJTzQ1X0FDOTdfU1lTQ0xLCTQ1CS8qIEFDOTcgU3lzdGVtIENsb2NrICovCisjZGVmaW5lIEdQSU80Nl9JQ1BSWEQJCTQ2CS8qIElDUCByZWNlaXZlIGRhdGEgKi8KKyNkZWZpbmUgR1BJTzQ2X1NUUlhECQk0NgkvKiBTVERfVUFSVCByZWNlaXZlIGRhdGEgKi8KKyNkZWZpbmUgR1BJTzQ3X0lDUFRYRAkJNDcJLyogSUNQIHRyYW5zbWl0IGRhdGEgKi8KKyNkZWZpbmUgR1BJTzQ3X1NUVFhECQk0NwkvKiBTVERfVUFSVCB0cmFuc21pdCBkYXRhICovCisjZGVmaW5lIEdQSU80OF9uUE9FCQk0OAkvKiBPdXRwdXQgRW5hYmxlIGZvciBDYXJkIFNwYWNlICovCisjZGVmaW5lIEdQSU80OV9uUFdFCQk0OQkvKiBXcml0ZSBFbmFibGUgZm9yIENhcmQgU3BhY2UgKi8KKyNkZWZpbmUgR1BJTzUwX25QSU9SCQk1MAkvKiBJL08gUmVhZCBmb3IgQ2FyZCBTcGFjZSAqLworI2RlZmluZSBHUElPNTFfblBJT1cJCTUxCS8qIEkvTyBXcml0ZSBmb3IgQ2FyZCBTcGFjZSAqLworI2RlZmluZSBHUElPNTJfblBDRV8xCQk1MgkvKiBDYXJkIEVuYWJsZSBmb3IgQ2FyZCBTcGFjZSAqLworI2RlZmluZSBHUElPNTNfblBDRV8yCQk1MwkvKiBDYXJkIEVuYWJsZSBmb3IgQ2FyZCBTcGFjZSAqLworI2RlZmluZSBHUElPNTNfTU1DQ0xLCQk1MwkvKiBNTUMgQ2xvY2sgKi8KKyNkZWZpbmUgR1BJTzU0X01NQ0NMSwkJNTQJLyogTU1DIENsb2NrICovCisjZGVmaW5lIEdQSU81NF9wU0tUU0VMCQk1NAkvKiBTb2NrZXQgU2VsZWN0IGZvciBDYXJkIFNwYWNlICovCisjZGVmaW5lIEdQSU81NF9uUENFXzIJCTU0CS8qIENhcmQgRW5hYmxlIGZvciBDYXJkIFNwYWNlIChQWEEyN3gpICovCisjZGVmaW5lIEdQSU81NV9uUFJFRwkJNTUJLyogQ2FyZCBBZGRyZXNzIGJpdCAyNiAqLworI2RlZmluZSBHUElPNTZfblBXQUlUCQk1NgkvKiBXYWl0IHNpZ25hbCBmb3IgQ2FyZCBTcGFjZSAqLworI2RlZmluZSBHUElPNTdfbklPSVMxNgkJNTcJLyogQnVzIFdpZHRoIHNlbGVjdCBmb3IgSS9PIENhcmQgU3BhY2UgKi8KKyNkZWZpbmUgR1BJTzU4X0xERF8wCQk1OAkvKiBMQ0QgZGF0YSBwaW4gMCAqLworI2RlZmluZSBHUElPNTlfTEREXzEJCTU5CS8qIExDRCBkYXRhIHBpbiAxICovCisjZGVmaW5lIEdQSU82MF9MRERfMgkJNjAJLyogTENEIGRhdGEgcGluIDIgKi8KKyNkZWZpbmUgR1BJTzYxX0xERF8zCQk2MQkvKiBMQ0QgZGF0YSBwaW4gMyAqLworI2RlZmluZSBHUElPNjJfTEREXzQJCTYyCS8qIExDRCBkYXRhIHBpbiA0ICovCisjZGVmaW5lIEdQSU82M19MRERfNQkJNjMJLyogTENEIGRhdGEgcGluIDUgKi8KKyNkZWZpbmUgR1BJTzY0X0xERF82CQk2NAkvKiBMQ0QgZGF0YSBwaW4gNiAqLworI2RlZmluZSBHUElPNjVfTEREXzcJCTY1CS8qIExDRCBkYXRhIHBpbiA3ICovCisjZGVmaW5lIEdQSU82Nl9MRERfOAkJNjYJLyogTENEIGRhdGEgcGluIDggKi8KKyNkZWZpbmUgR1BJTzY2X01CUkVRCQk2NgkvKiBhbHRlcm5hdGUgYnVzIG1hc3RlciByZXEgKi8KKyNkZWZpbmUgR1BJTzY3X0xERF85CQk2NwkvKiBMQ0QgZGF0YSBwaW4gOSAqLworI2RlZmluZSBHUElPNjdfTU1DQ1MwCQk2NwkvKiBNTUMgQ2hpcCBTZWxlY3QgMCAqLworI2RlZmluZSBHUElPNjhfTEREXzEwCQk2OAkvKiBMQ0QgZGF0YSBwaW4gMTAgKi8KKyNkZWZpbmUgR1BJTzY4X01NQ0NTMQkJNjgJLyogTU1DIENoaXAgU2VsZWN0IDEgKi8KKyNkZWZpbmUgR1BJTzY5X0xERF8xMQkJNjkJLyogTENEIGRhdGEgcGluIDExICovCisjZGVmaW5lIEdQSU82OV9NTUNDTEsJCTY5CS8qIE1NQ19DTEsgKi8KKyNkZWZpbmUgR1BJTzcwX0xERF8xMgkJNzAJLyogTENEIGRhdGEgcGluIDEyICovCisjZGVmaW5lIEdQSU83MF9SVENDTEsJCTcwCS8qIFJlYWwgVGltZSBjbG9jayAoMSBIeikgKi8KKyNkZWZpbmUgR1BJTzcxX0xERF8xMwkJNzEJLyogTENEIGRhdGEgcGluIDEzICovCisjZGVmaW5lIEdQSU83MV8zXzZNSHoJCTcxCS8qIDMuNiBNSHogT3NjaWxsYXRvciBjbG9jayAqLworI2RlZmluZSBHUElPNzJfTEREXzE0CQk3MgkvKiBMQ0QgZGF0YSBwaW4gMTQgKi8KKyNkZWZpbmUgR1BJTzcyXzMya0h6CQk3MgkvKiAzMiBrSHogY2xvY2sgKi8KKyNkZWZpbmUgR1BJTzczX0xERF8xNQkJNzMJLyogTENEIGRhdGEgcGluIDE1ICovCisjZGVmaW5lIEdQSU83M19NQkdOVAkJNzMJLyogTWVtb3J5IGNvbnRyb2xsZXIgZ3JhbnQgKi8KKyNkZWZpbmUgR1BJTzc0X0xDRF9GQ0xLCQk3NAkvKiBMQ0QgRnJhbWUgY2xvY2sgKi8KKyNkZWZpbmUgR1BJTzc1X0xDRF9MQ0xLCQk3NQkvKiBMQ0QgbGluZSBjbG9jayAqLworI2RlZmluZSBHUElPNzZfTENEX1BDTEsJCTc2CS8qIExDRCBQaXhlbCBjbG9jayAqLworI2RlZmluZSBHUElPNzdfTENEX0FDQklBUwk3NwkvKiBMQ0QgQUMgQmlhcyAqLworI2RlZmluZSBHUElPNzhfbkNTXzIJCTc4CS8qIGNoaXAgc2VsZWN0IDIgKi8KKyNkZWZpbmUgR1BJTzc5X25DU18zCQk3OQkvKiBjaGlwIHNlbGVjdCAzICovCisjZGVmaW5lIEdQSU84MF9uQ1NfNAkJODAJLyogY2hpcCBzZWxlY3QgNCAqLworI2RlZmluZSBHUElPODFfTlNDTEsJCTgxCS8qIE5TU1AgY2xvY2sgKi8KKyNkZWZpbmUgR1BJTzgyX05TRlJNCQk4MgkvKiBOU1NQIEZyYW1lICovCisjZGVmaW5lIEdQSU84M19OU1RYRAkJODMJLyogTlNTUCB0cmFuc21pdCAqLworI2RlZmluZSBHUElPODRfTlNSWEQJCTg0CS8qIE5TU1AgcmVjZWl2ZSAqLworI2RlZmluZSBHUElPODVfblBDRV8xCQk4NQkvKiBDYXJkIEVuYWJsZSBmb3IgQ2FyZCBTcGFjZSAoUFhBMjd4KSAqLworI2RlZmluZSBHUElPOTJfTU1DREFUMAkJOTIJLyogTU1DIERBVDAgKFBYQTI3eCkgKi8KKyNkZWZpbmUgR1BJTzEwOV9NTUNEQVQxCQkxMDkJLyogTU1DIERBVDEgKFBYQTI3eCkgKi8KKyNkZWZpbmUgR1BJTzExMF9NTUNEQVQyCQkxMTAJLyogTU1DIERBVDIgKFBYQTI3eCkgKi8KKyNkZWZpbmUgR1BJTzExMF9NTUNDUzAJCTExMAkvKiBNTUMgQ2hpcCBTZWxlY3QgMCAoUFhBMjd4KSAqLworI2RlZmluZSBHUElPMTExX01NQ0RBVDMJCTExMQkvKiBNTUMgREFUMyAoUFhBMjd4KSAqLworI2RlZmluZSBHUElPMTExX01NQ0NTMQkJMTExCS8qIE1NQyBDaGlwIFNlbGVjdCAxIChQWEEyN3gpICovCisjZGVmaW5lIEdQSU8xMTJfTU1DQ01ECQkxMTIJLyogTU1DIENNRCAoUFhBMjd4KSAqLworI2RlZmluZSBHUElPMTEzX0FDOTdfUkVTRVRfTgkxMTMJLyogQUM5NyBOUkVTRVQgb24gKFBYQTI3eCkgKi8KKworLyogR1BJTyBhbHRlcm5hdGUgZnVuY3Rpb24gbW9kZSAmIGRpcmVjdGlvbiAqLworCisjZGVmaW5lIEdQSU9fSU4JCQkweDAwMAorI2RlZmluZSBHUElPX09VVAkJMHgwODAKKyNkZWZpbmUgR1BJT19BTFRfRk5fMV9JTgkweDEwMAorI2RlZmluZSBHUElPX0FMVF9GTl8xX09VVAkweDE4MAorI2RlZmluZSBHUElPX0FMVF9GTl8yX0lOCTB4MjAwCisjZGVmaW5lIEdQSU9fQUxUX0ZOXzJfT1VUCTB4MjgwCisjZGVmaW5lIEdQSU9fQUxUX0ZOXzNfSU4JMHgzMDAKKyNkZWZpbmUgR1BJT19BTFRfRk5fM19PVVQJMHgzODAKKyNkZWZpbmUgR1BJT19NRF9NQVNLX05SCQkweDA3ZgorI2RlZmluZSBHUElPX01EX01BU0tfRElSCTB4MDgwCisjZGVmaW5lIEdQSU9fTURfTUFTS19GTgkJMHgzMDAKKyNkZWZpbmUgR1BJT19ERkxUX0xPVwkJMHg0MDAKKyNkZWZpbmUgR1BJT19ERkxUX0hJR0gJCTB4ODAwCisKKyNkZWZpbmUgR1BJTzFfUlRTX01ECQkoIDEgfCBHUElPX0FMVF9GTl8xX0lOKQorI2RlZmluZSBHUElPNl9NTUNDTEtfTUQJCSggNiB8IEdQSU9fQUxUX0ZOXzFfT1VUKQorI2RlZmluZSBHUElPN180OE1Iel9NRAkJKCA3IHwgR1BJT19BTFRfRk5fMV9PVVQpCisjZGVmaW5lIEdQSU84X01NQ0NTMF9NRAkJKCA4IHwgR1BJT19BTFRfRk5fMV9PVVQpCisjZGVmaW5lIEdQSU85X01NQ0NTMV9NRAkJKCA5IHwgR1BJT19BTFRfRk5fMV9PVVQpCisjZGVmaW5lIEdQSU8xMF9SVENDTEtfTUQJKDEwIHwgR1BJT19BTFRfRk5fMV9PVVQpCisjZGVmaW5lIEdQSU8xMV8zXzZNSHpfTUQJKDExIHwgR1BJT19BTFRfRk5fMV9PVVQpCisjZGVmaW5lIEdQSU8xMl8zMktIel9NRAkJKDEyIHwgR1BJT19BTFRfRk5fMV9PVVQpCisjZGVmaW5lIEdQSU8xM19NQkdOVF9NRAkJKDEzIHwgR1BJT19BTFRfRk5fMl9PVVQpCisjZGVmaW5lIEdQSU8xNF9NQlJFUV9NRAkJKDE0IHwgR1BJT19BTFRfRk5fMV9JTikKKyNkZWZpbmUgR1BJTzE1X25DU18xX01ECQkoMTUgfCBHUElPX0FMVF9GTl8yX09VVCkKKyNkZWZpbmUgR1BJTzE2X1BXTTBfTUQJCSgxNiB8IEdQSU9fQUxUX0ZOXzJfT1VUKQorI2RlZmluZSBHUElPMTdfUFdNMV9NRAkJKDE3IHwgR1BJT19BTFRfRk5fMl9PVVQpCisjZGVmaW5lIEdQSU8xOF9SRFlfTUQJCSgxOCB8IEdQSU9fQUxUX0ZOXzFfSU4pCisjZGVmaW5lIEdQSU8xOV9EUkVRMV9NRAkJKDE5IHwgR1BJT19BTFRfRk5fMV9JTikKKyNkZWZpbmUgR1BJTzIwX0RSRVEwX01ECQkoMjAgfCBHUElPX0FMVF9GTl8xX0lOKQorI2RlZmluZSBHUElPMjNfU0NMS19NRAkJKDIzIHwgR1BJT19BTFRfRk5fMl9PVVQpCisjZGVmaW5lIEdQSU8yNF9TRlJNX01ECQkoMjQgfCBHUElPX0FMVF9GTl8yX09VVCkKKyNkZWZpbmUgR1BJTzI1X1NUWERfTUQJCSgyNSB8IEdQSU9fQUxUX0ZOXzJfT1VUKQorI2RlZmluZSBHUElPMjZfU1JYRF9NRAkJKDI2IHwgR1BJT19BTFRfRk5fMV9JTikKKyNkZWZpbmUgR1BJTzI3X1NFWFRDTEtfTUQJKDI3IHwgR1BJT19BTFRfRk5fMV9JTikKKyNkZWZpbmUgR1BJTzI4X0JJVENMS19BQzk3X01ECSgyOCB8IEdQSU9fQUxUX0ZOXzFfSU4pCisjZGVmaW5lIEdQSU8yOF9CSVRDTEtfSU5fSTJTX01ECSgyOCB8IEdQSU9fQUxUX0ZOXzJfSU4pCisjZGVmaW5lIEdQSU8yOF9CSVRDTEtfT1VUX0kyU19NRAkoMjggfCBHUElPX0FMVF9GTl8xX09VVCkKKyNkZWZpbmUgR1BJTzI5X1NEQVRBX0lOX0FDOTdfTUQJKDI5IHwgR1BJT19BTFRfRk5fMV9JTikKKyNkZWZpbmUgR1BJTzI5X1NEQVRBX0lOX0kyU19NRAkoMjkgfCBHUElPX0FMVF9GTl8yX0lOKQorI2RlZmluZSBHUElPMzBfU0RBVEFfT1VUX0FDOTdfTUQJKDMwIHwgR1BJT19BTFRfRk5fMl9PVVQpCisjZGVmaW5lIEdQSU8zMF9TREFUQV9PVVRfSTJTX01ECSgzMCB8IEdQSU9fQUxUX0ZOXzFfT1VUKQorI2RlZmluZSBHUElPMzFfU1lOQ19JMlNfTUQJKDMxIHwgR1BJT19BTFRfRk5fMV9PVVQpCisjZGVmaW5lIEdQSU8zMV9TWU5DX0FDOTdfTUQJKDMxIHwgR1BJT19BTFRfRk5fMl9PVVQpCisjZGVmaW5lIEdQSU8zMl9TREFUQV9JTjFfQUM5N19NRAkoMzIgfCBHUElPX0FMVF9GTl8xX0lOKQorI2RlZmluZSBHUElPMzJfU1lTQ0xLX0kyU19NRAkoMzIgfCBHUElPX0FMVF9GTl8xX09VVCkKKyNkZWZpbmUgR1BJTzMyX01NQ0NMS19NRAkJKCAzMiB8IEdQSU9fQUxUX0ZOXzJfT1VUKQorI2RlZmluZSBHUElPMzNfbkNTXzVfTUQJCSgzMyB8IEdQSU9fQUxUX0ZOXzJfT1VUKQorI2RlZmluZSBHUElPMzRfRkZSWERfTUQJCSgzNCB8IEdQSU9fQUxUX0ZOXzFfSU4pCisjZGVmaW5lIEdQSU8zNF9NTUNDUzBfTUQJKDM0IHwgR1BJT19BTFRfRk5fMl9PVVQpCisjZGVmaW5lIEdQSU8zNV9GRkNUU19NRAkJKDM1IHwgR1BJT19BTFRfRk5fMV9JTikKKyNkZWZpbmUgR1BJTzM2X0ZGRENEX01ECQkoMzYgfCBHUElPX0FMVF9GTl8xX0lOKQorI2RlZmluZSBHUElPMzdfRkZEU1JfTUQJCSgzNyB8IEdQSU9fQUxUX0ZOXzFfSU4pCisjZGVmaW5lIEdQSU8zOF9GRlJJX01ECQkoMzggfCBHUElPX0FMVF9GTl8xX0lOKQorI2RlZmluZSBHUElPMzlfTU1DQ1MxX01ECSgzOSB8IEdQSU9fQUxUX0ZOXzFfT1VUKQorI2RlZmluZSBHUElPMzlfRkZUWERfTUQJCSgzOSB8IEdQSU9fQUxUX0ZOXzJfT1VUKQorI2RlZmluZSBHUElPNDBfRkZEVFJfTUQJCSg0MCB8IEdQSU9fQUxUX0ZOXzJfT1VUKQorI2RlZmluZSBHUElPNDFfRkZSVFNfTUQJCSg0MSB8IEdQSU9fQUxUX0ZOXzJfT1VUKQorI2RlZmluZSBHUElPNDJfQlRSWERfTUQJCSg0MiB8IEdQSU9fQUxUX0ZOXzFfSU4pCisjZGVmaW5lIEdQSU80M19CVFRYRF9NRAkJKDQzIHwgR1BJT19BTFRfRk5fMl9PVVQpCisjZGVmaW5lIEdQSU80NF9CVENUU19NRAkJKDQ0IHwgR1BJT19BTFRfRk5fMV9JTikKKyNkZWZpbmUgR1BJTzQ1X0JUUlRTX01ECQkoNDUgfCBHUElPX0FMVF9GTl8yX09VVCkKKyNkZWZpbmUgR1BJTzQ1X1NZU0NMS19BQzk3X01ECQkoNDUgfCBHUElPX0FMVF9GTl8xX09VVCkKKyNkZWZpbmUgR1BJTzQ2X0lDUFJYRF9NRAkoNDYgfCBHUElPX0FMVF9GTl8xX0lOKQorI2RlZmluZSBHUElPNDZfU1RSWERfTUQJCSg0NiB8IEdQSU9fQUxUX0ZOXzJfSU4pCisjZGVmaW5lIEdQSU80N19JQ1BUWERfTUQJKDQ3IHwgR1BJT19BTFRfRk5fMl9PVVQpCisjZGVmaW5lIEdQSU80N19TVFRYRF9NRAkJKDQ3IHwgR1BJT19BTFRfRk5fMV9PVVQpCisjZGVmaW5lIEdQSU80OF9uUE9FX01ECQkoNDggfCBHUElPX0FMVF9GTl8yX09VVCkKKyNkZWZpbmUgR1BJTzQ5X25QV0VfTUQJCSg0OSB8IEdQSU9fQUxUX0ZOXzJfT1VUKQorI2RlZmluZSBHUElPNTBfblBJT1JfTUQJCSg1MCB8IEdQSU9fQUxUX0ZOXzJfT1VUKQorI2RlZmluZSBHUElPNTFfblBJT1dfTUQJCSg1MSB8IEdQSU9fQUxUX0ZOXzJfT1VUKQorI2RlZmluZSBHUElPNTJfblBDRV8xX01ECSg1MiB8IEdQSU9fQUxUX0ZOXzJfT1VUKQorI2RlZmluZSBHUElPNTNfblBDRV8yX01ECSg1MyB8IEdQSU9fQUxUX0ZOXzJfT1VUKQorI2RlZmluZSBHUElPNTNfTU1DQ0xLX01ECSg1MyB8IEdQSU9fQUxUX0ZOXzFfT1VUKQorI2RlZmluZSBHUElPNTRfTU1DQ0xLX01ECSg1NCB8IEdQSU9fQUxUX0ZOXzFfT1VUKQorI2RlZmluZSBHUElPNTRfblBDRV8yX01ECSg1NCB8IEdQSU9fQUxUX0ZOXzJfT1VUKQorI2RlZmluZSBHUElPNTRfcFNLVFNFTF9NRAkoNTQgfCBHUElPX0FMVF9GTl8yX09VVCkKKyNkZWZpbmUgR1BJTzU1X25QUkVHX01ECQkoNTUgfCBHUElPX0FMVF9GTl8yX09VVCkKKyNkZWZpbmUgR1BJTzU2X25QV0FJVF9NRAkoNTYgfCBHUElPX0FMVF9GTl8xX0lOKQorI2RlZmluZSBHUElPNTdfbklPSVMxNl9NRAkoNTcgfCBHUElPX0FMVF9GTl8xX0lOKQorI2RlZmluZSBHUElPNThfTEREXzBfTUQJCSg1OCB8IEdQSU9fQUxUX0ZOXzJfT1VUKQorI2RlZmluZSBHUElPNTlfTEREXzFfTUQJCSg1OSB8IEdQSU9fQUxUX0ZOXzJfT1VUKQorI2RlZmluZSBHUElPNjBfTEREXzJfTUQJCSg2MCB8IEdQSU9fQUxUX0ZOXzJfT1VUKQorI2RlZmluZSBHUElPNjFfTEREXzNfTUQJCSg2MSB8IEdQSU9fQUxUX0ZOXzJfT1VUKQorI2RlZmluZSBHUElPNjJfTEREXzRfTUQJCSg2MiB8IEdQSU9fQUxUX0ZOXzJfT1VUKQorI2RlZmluZSBHUElPNjNfTEREXzVfTUQJCSg2MyB8IEdQSU9fQUxUX0ZOXzJfT1VUKQorI2RlZmluZSBHUElPNjRfTEREXzZfTUQJCSg2NCB8IEdQSU9fQUxUX0ZOXzJfT1VUKQorI2RlZmluZSBHUElPNjVfTEREXzdfTUQJCSg2NSB8IEdQSU9fQUxUX0ZOXzJfT1VUKQorI2RlZmluZSBHUElPNjZfTEREXzhfTUQJCSg2NiB8IEdQSU9fQUxUX0ZOXzJfT1VUKQorI2RlZmluZSBHUElPNjZfTUJSRVFfTUQJCSg2NiB8IEdQSU9fQUxUX0ZOXzFfSU4pCisjZGVmaW5lIEdQSU82N19MRERfOV9NRAkJKDY3IHwgR1BJT19BTFRfRk5fMl9PVVQpCisjZGVmaW5lIEdQSU82N19NTUNDUzBfTUQJKDY3IHwgR1BJT19BTFRfRk5fMV9PVVQpCisjZGVmaW5lIEdQSU82OF9MRERfMTBfTUQJKDY4IHwgR1BJT19BTFRfRk5fMl9PVVQpCisjZGVmaW5lIEdQSU82OF9NTUNDUzFfTUQJKDY4IHwgR1BJT19BTFRfRk5fMV9PVVQpCisjZGVmaW5lIEdQSU82OV9MRERfMTFfTUQJKDY5IHwgR1BJT19BTFRfRk5fMl9PVVQpCisjZGVmaW5lIEdQSU82OV9NTUNDTEtfTUQJKDY5IHwgR1BJT19BTFRfRk5fMV9PVVQpCisjZGVmaW5lIEdQSU83MF9MRERfMTJfTUQJKDcwIHwgR1BJT19BTFRfRk5fMl9PVVQpCisjZGVmaW5lIEdQSU83MF9SVENDTEtfTUQJKDcwIHwgR1BJT19BTFRfRk5fMV9PVVQpCisjZGVmaW5lIEdQSU83MV9MRERfMTNfTUQJKDcxIHwgR1BJT19BTFRfRk5fMl9PVVQpCisjZGVmaW5lIEdQSU83MV8zXzZNSHpfTUQJKDcxIHwgR1BJT19BTFRfRk5fMV9PVVQpCisjZGVmaW5lIEdQSU83Ml9MRERfMTRfTUQJKDcyIHwgR1BJT19BTFRfRk5fMl9PVVQpCisjZGVmaW5lIEdQSU83Ml8zMmtIel9NRAkJKDcyIHwgR1BJT19BTFRfRk5fMV9PVVQpCisjZGVmaW5lIEdQSU83M19MRERfMTVfTUQJKDczIHwgR1BJT19BTFRfRk5fMl9PVVQpCisjZGVmaW5lIEdQSU83M19NQkdOVF9NRAkJKDczIHwgR1BJT19BTFRfRk5fMV9PVVQpCisjZGVmaW5lIEdQSU83NF9MQ0RfRkNMS19NRAkoNzQgfCBHUElPX0FMVF9GTl8yX09VVCkKKyNkZWZpbmUgR1BJTzc1X0xDRF9MQ0xLX01ECSg3NSB8IEdQSU9fQUxUX0ZOXzJfT1VUKQorI2RlZmluZSBHUElPNzZfTENEX1BDTEtfTUQJKDc2IHwgR1BJT19BTFRfRk5fMl9PVVQpCisjZGVmaW5lIEdQSU83N19MQ0RfQUNCSUFTX01ECSg3NyB8IEdQSU9fQUxUX0ZOXzJfT1VUKQorI2RlZmluZSBHUElPNzhfbkNTXzJfTUQJCSg3OCB8IEdQSU9fQUxUX0ZOXzJfT1VUKQorI2RlZmluZSBHUElPNzlfbkNTXzNfTUQJCSg3OSB8IEdQSU9fQUxUX0ZOXzJfT1VUKQorI2RlZmluZSBHUElPNzlfcFNLVFNFTF9NRAkoNzkgfCBHUElPX0FMVF9GTl8xX09VVCkKKyNkZWZpbmUgR1BJTzgwX25DU180X01ECQkoODAgfCBHUElPX0FMVF9GTl8yX09VVCkKKyNkZWZpbmUgR1BJTzgxX05TU1BfQ0xLX09VVCAJKDgxIHwgR1BJT19BTFRfRk5fMV9PVVQpCisjZGVmaW5lIEdQSU84MV9OU1NQX0NMS19JTiAgCSg4MSB8IEdQSU9fQUxUX0ZOXzFfSU4pCisjZGVmaW5lIEdQSU84Ml9OU1NQX0ZSTV9PVVQgCSg4MiB8IEdQSU9fQUxUX0ZOXzFfT1VUKQorI2RlZmluZSBHUElPODJfTlNTUF9GUk1fSU4gIAkoODIgfCBHUElPX0FMVF9GTl8xX0lOKQorI2RlZmluZSBHUElPODNfTlNTUF9UWCAgICAgIAkoODMgfCBHUElPX0FMVF9GTl8xX09VVCkKKyNkZWZpbmUgR1BJTzgzX05TU1BfUlggICAgICAJKDgzIHwgR1BJT19BTFRfRk5fMl9JTikKKyNkZWZpbmUgR1BJTzg0X05TU1BfVFggICAgICAJKDg0IHwgR1BJT19BTFRfRk5fMV9PVVQpCisjZGVmaW5lIEdQSU84NF9OU1NQX1JYICAgICAgCSg4NCB8IEdQSU9fQUxUX0ZOXzJfSU4pCisjZGVmaW5lIEdQSU84NV9uUENFXzFfTUQJKDg1IHwgR1BJT19BTFRfRk5fMV9PVVQpCisjZGVmaW5lIEdQSU85Ml9NTUNEQVQwX01ECSg5MiB8IEdQSU9fQUxUX0ZOXzFfT1VUKQorI2RlZmluZSBHUElPMTA5X01NQ0RBVDFfTUQJKDEwOSB8IEdQSU9fQUxUX0ZOXzFfT1VUKQorI2RlZmluZSBHUElPMTEwX01NQ0RBVDJfTUQJKDExMCB8IEdQSU9fQUxUX0ZOXzFfT1VUKQorI2RlZmluZSBHUElPMTEwX01NQ0NTMF9NRAkoMTEwIHwgR1BJT19BTFRfRk5fMV9PVVQpCisjZGVmaW5lIEdQSU8xMTFfTU1DREFUM19NRAkoMTExIHwgR1BJT19BTFRfRk5fMV9PVVQpCisjZGVmaW5lIEdQSU8xMTBfTU1DQ1MxX01ECSgxMTEgfCBHUElPX0FMVF9GTl8xX09VVCkKKyNkZWZpbmUgR1BJTzExMl9NTUNDTURfTUQJKDExMiB8IEdQSU9fQUxUX0ZOXzFfT1VUKQorI2RlZmluZSBHUElPMTEzX0FDOTdfUkVTRVRfTl9NRAkoMTEzIHwgR1BJT19BTFRfRk5fMl9PVVQpCisjZGVmaW5lIEdQSU8xMTdfSTJDU0NMX01ECSgxMTcgfCBHUElPX0FMVF9GTl8xX09VVCkKKyNkZWZpbmUgR1BJTzExOF9JMkNTREFfTUQJKDExOCB8IEdQSU9fQUxUX0ZOXzFfSU4pCisKKy8qCisgKiBQb3dlciBNYW5hZ2VyCisgKi8KKworI2RlZmluZSBQTUNSCQlfX1JFRygweDQwRjAwMDAwKSAgLyogUG93ZXIgTWFuYWdlciBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFBTU1IJCV9fUkVHKDB4NDBGMDAwMDQpICAvKiBQb3dlciBNYW5hZ2VyIFNsZWVwIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBQU1BSCQlfX1JFRygweDQwRjAwMDA4KSAgLyogUG93ZXIgTWFuYWdlciBTY3JhdGNoIFBhZCBSZWdpc3RlciAqLworI2RlZmluZSBQV0VSCQlfX1JFRygweDQwRjAwMDBDKSAgLyogUG93ZXIgTWFuYWdlciBXYWtlLXVwIEVuYWJsZSBSZWdpc3RlciAqLworI2RlZmluZSBQUkVSCQlfX1JFRygweDQwRjAwMDEwKSAgLyogUG93ZXIgTWFuYWdlciBHUElPIFJpc2luZy1FZGdlIERldGVjdCBFbmFibGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUEZFUgkJX19SRUcoMHg0MEYwMDAxNCkgIC8qIFBvd2VyIE1hbmFnZXIgR1BJTyBGYWxsaW5nLUVkZ2UgRGV0ZWN0IEVuYWJsZSBSZWdpc3RlciAqLworI2RlZmluZSBQRURSCQlfX1JFRygweDQwRjAwMDE4KSAgLyogUG93ZXIgTWFuYWdlciBHUElPIEVkZ2UgRGV0ZWN0IFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBQQ0ZSCQlfX1JFRygweDQwRjAwMDFDKSAgLyogUG93ZXIgTWFuYWdlciBHZW5lcmFsIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUEdTUjAJCV9fUkVHKDB4NDBGMDAwMjApICAvKiBQb3dlciBNYW5hZ2VyIEdQSU8gU2xlZXAgU3RhdGUgUmVnaXN0ZXIgZm9yIEdQWzMxLTBdICovCisjZGVmaW5lIFBHU1IxCQlfX1JFRygweDQwRjAwMDI0KSAgLyogUG93ZXIgTWFuYWdlciBHUElPIFNsZWVwIFN0YXRlIFJlZ2lzdGVyIGZvciBHUFs2My0zMl0gKi8KKyNkZWZpbmUgUEdTUjIJCV9fUkVHKDB4NDBGMDAwMjgpICAvKiBQb3dlciBNYW5hZ2VyIEdQSU8gU2xlZXAgU3RhdGUgUmVnaXN0ZXIgZm9yIEdQWzg0LTY0XSAqLworI2RlZmluZSBQR1NSMwkJX19SRUcoMHg0MEYwMDAyQykgIC8qIFBvd2VyIE1hbmFnZXIgR1BJTyBTbGVlcCBTdGF0ZSBSZWdpc3RlciBmb3IgR1BbMTE4LTk2XSAqLworI2RlZmluZSBSQ1NSCQlfX1JFRygweDQwRjAwMDMwKSAgLyogUmVzZXQgQ29udHJvbGxlciBTdGF0dXMgUmVnaXN0ZXIgKi8KKworI2RlZmluZSBQU0xSCQlfX1JFRygweDQwRjAwMDM0KQkvKiBQb3dlciBNYW5hZ2VyIFNsZWVwIENvbmZpZyBSZWdpc3RlciAqLworI2RlZmluZSBQU1RSCQlfX1JFRygweDQwRjAwMDM4KQkvKlBvd2VyIE1hbmFnZXIgU3RhbmRieSBDb25maWcgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUFNOUgkJX19SRUcoMHg0MEYwMDAzQykJLypQb3dlciBNYW5hZ2VyIFNlbnNlIENvbmZpZyBSZWdpc3RlciAqLworI2RlZmluZSBQVkNSCQlfX1JFRygweDQwRjAwMDQwKQkvKlBvd2VyIE1hbmFnZXIgVm9sdGFnZUNvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUEtXUgkJX19SRUcoMHg0MEYwMDA1MCkJLyogUG93ZXIgTWFuYWdlciBLQiBXYWtlLXVwIEVuYWJsZSBSZWcgKi8KKyNkZWZpbmUgUEtTUgkJX19SRUcoMHg0MEYwMDA1NCkJLyogUG93ZXIgTWFuYWdlciBLQiBMZXZlbC1EZXRlY3QgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENNRCh4KQlfX1JFRzIoMHg0MEYwMDA4MCwgKHgpPDwyKQorI2RlZmluZSBQQ01EMAlfX1JFRygweDQwRjAwMDgwICsgMCAqIDQpCisjZGVmaW5lIFBDTUQxCV9fUkVHKDB4NDBGMDAwODAgKyAxICogNCkKKyNkZWZpbmUgUENNRDIJX19SRUcoMHg0MEYwMDA4MCArIDIgKiA0KQorI2RlZmluZSBQQ01EMwlfX1JFRygweDQwRjAwMDgwICsgMyAqIDQpCisjZGVmaW5lIFBDTUQ0CV9fUkVHKDB4NDBGMDAwODAgKyA0ICogNCkKKyNkZWZpbmUgUENNRDUJX19SRUcoMHg0MEYwMDA4MCArIDUgKiA0KQorI2RlZmluZSBQQ01ENglfX1JFRygweDQwRjAwMDgwICsgNiAqIDQpCisjZGVmaW5lIFBDTUQ3CV9fUkVHKDB4NDBGMDAwODAgKyA3ICogNCkKKyNkZWZpbmUgUENNRDgJX19SRUcoMHg0MEYwMDA4MCArIDggKiA0KQorI2RlZmluZSBQQ01EOQlfX1JFRygweDQwRjAwMDgwICsgOSAqIDQpCisjZGVmaW5lIFBDTUQxMAlfX1JFRygweDQwRjAwMDgwICsgMTAgKiA0KQorI2RlZmluZSBQQ01EMTEJX19SRUcoMHg0MEYwMDA4MCArIDExICogNCkKKyNkZWZpbmUgUENNRDEyCV9fUkVHKDB4NDBGMDAwODAgKyAxMiAqIDQpCisjZGVmaW5lIFBDTUQxMwlfX1JFRygweDQwRjAwMDgwICsgMTMgKiA0KQorI2RlZmluZSBQQ01EMTQJX19SRUcoMHg0MEYwMDA4MCArIDE0ICogNCkKKyNkZWZpbmUgUENNRDE1CV9fUkVHKDB4NDBGMDAwODAgKyAxNSAqIDQpCisjZGVmaW5lIFBDTUQxNglfX1JFRygweDQwRjAwMDgwICsgMTYgKiA0KQorI2RlZmluZSBQQ01EMTcJX19SRUcoMHg0MEYwMDA4MCArIDE3ICogNCkKKyNkZWZpbmUgUENNRDE4CV9fUkVHKDB4NDBGMDAwODAgKyAxOCAqIDQpCisjZGVmaW5lIFBDTUQxOQlfX1JFRygweDQwRjAwMDgwICsgMTkgKiA0KQorI2RlZmluZSBQQ01EMjAJX19SRUcoMHg0MEYwMDA4MCArIDIwICogNCkKKyNkZWZpbmUgUENNRDIxCV9fUkVHKDB4NDBGMDAwODAgKyAyMSAqIDQpCisjZGVmaW5lIFBDTUQyMglfX1JFRygweDQwRjAwMDgwICsgMjIgKiA0KQorI2RlZmluZSBQQ01EMjMJX19SRUcoMHg0MEYwMDA4MCArIDIzICogNCkKKyNkZWZpbmUgUENNRDI0CV9fUkVHKDB4NDBGMDAwODAgKyAyNCAqIDQpCisjZGVmaW5lIFBDTUQyNQlfX1JFRygweDQwRjAwMDgwICsgMjUgKiA0KQorI2RlZmluZSBQQ01EMjYJX19SRUcoMHg0MEYwMDA4MCArIDI2ICogNCkKKyNkZWZpbmUgUENNRDI3CV9fUkVHKDB4NDBGMDAwODAgKyAyNyAqIDQpCisjZGVmaW5lIFBDTUQyOAlfX1JFRygweDQwRjAwMDgwICsgMjggKiA0KQorI2RlZmluZSBQQ01EMjkJX19SRUcoMHg0MEYwMDA4MCArIDI5ICogNCkKKyNkZWZpbmUgUENNRDMwCV9fUkVHKDB4NDBGMDAwODAgKyAzMCAqIDQpCisjZGVmaW5lIFBDTUQzMQlfX1JFRygweDQwRjAwMDgwICsgMzEgKiA0KQorCisjZGVmaW5lIFBDTURfTUJDCSgxPDwxMikKKyNkZWZpbmUgUENNRF9EQ0UJKDE8PDExKQorI2RlZmluZSBQQ01EX0xDCSgxPDwxMCkKKy8qIEZJWE1FOiAgUENNRF9TUUMgbmVlZCBiZSBjaGVja2VkLiAgICovCisjZGVmaW5lIFBDTURfU1FDCSgzPDw4KQkvKiBjdXJyZW50bHkgb25seSBiaXQgOCBpcyBjaGFuZ2VhYmxlLAorCQkJCSAgIGJpdCA5IHNob3VsZCBiZSAwIGFsbCBkYXkuICovCisjZGVmaW5lIFBWQ1JfVkNTQQkoMHgxPDwxNCkKKyNkZWZpbmUgUFZDUl9Db21tYW5kRGVsYXkgKDB4ZjgwKQorI2RlZmluZSBQQ0ZSX1BJMkNfRU4JKDB4MSA8PCA2KQorCisjZGVmaW5lIFBTU1JfT1RHUEgJKDEgPDwgNikJLyogT1RHIFBlcmlwaGVyYWwgY29udHJvbCBIb2xkICovCisjZGVmaW5lIFBTU1JfUkRICSgxIDw8IDUpCS8qIFJlYWQgRGlzYWJsZSBIb2xkICovCisjZGVmaW5lIFBTU1JfUEgJCSgxIDw8IDQpCS8qIFBlcmlwaGVyYWwgQ29udHJvbCBIb2xkICovCisjZGVmaW5lIFBTU1JfVkZTCSgxIDw8IDIpCS8qIFZERCBGYXVsdCBTdGF0dXMgKi8KKyNkZWZpbmUgUFNTUl9CRlMJKDEgPDwgMSkJLyogQmF0dGVyeSBGYXVsdCBTdGF0dXMgKi8KKyNkZWZpbmUgUFNTUl9TU1MJKDEgPDwgMCkJLyogU29mdHdhcmUgU2xlZXAgU3RhdHVzICovCisKKyNkZWZpbmUgUENGUl9STwkJKDEgPDwgMTUpCS8qIFJESCBPdmVycmlkZSAqLworI2RlZmluZSBQQ0ZSX1BPCQkoMSA8PCAxNCkJLyogUEggT3ZlcnJpZGUgKi8KKyNkZWZpbmUgUENGUl9HUFJPRAkoMSA8PCAxMikJLyogR1BJTyBuUkVTRVRfT1VUIERpc2FibGUgKi8KKyNkZWZpbmUgUENGUl9MMV9FTgkoMSA8PCAxMSkJLyogU2xlZXAgTW9kZSBMMSBjb252ZXJ0ZXIgRW5hYmxlICovCisjZGVmaW5lIFBDRlJfRlZDCSgxIDw8IDEwKQkvKiBGcmVxdWVuY3kvVm9sdGFnZSBDaGFuZ2UgKi8KKyNkZWZpbmUgUENGUl9EQ19FTgkoMSA8PCA3KQkvKiBTbGVlcC9kZWVwLXNsZWVwIERDLURDIENvbnZlcnRlciBFbmFibGUgKi8KKyNkZWZpbmUgUENGUl9QSTJDRU4JKDEgPDwgNikJLyogRW5hYmxlIFBJMkMgY29udHJvbGxlciAqLworI2RlZmluZSBQQ0ZSX0RTCQkoMSA8PCAzKQkvKiBEZWVwIFNsZWVwIE1vZGUgKi8KKyNkZWZpbmUgUENGUl9GUwkJKDEgPDwgMikJLyogRmxvYXQgU3RhdGljIENoaXAgU2VsZWN0cyAqLworI2RlZmluZSBQQ0ZSX0ZQCQkoMSA8PCAxKQkvKiBGbG9hdCBQQ01DSUEgY29udHJvbHMgKi8KKyNkZWZpbmUgUENGUl9PUERFCSgxIDw8IDApCS8qIDMuNjg2NCBNSHogb3NjaWxsYXRvciBwb3dlci1kb3duIGVuYWJsZSAqLworCisjZGVmaW5lIFJDU1JfR1BSCSgxIDw8IDMpCS8qIEdQSU8gUmVzZXQgKi8KKyNkZWZpbmUgUkNTUl9TTVIJKDEgPDwgMikJLyogU2xlZXAgTW9kZSAqLworI2RlZmluZSBSQ1NSX1dEUgkoMSA8PCAxKQkvKiBXYXRjaGRvZyBSZXNldCAqLworI2RlZmluZSBSQ1NSX0hXUgkoMSA8PCAwKQkvKiBIYXJkd2FyZSBSZXNldCAqLworCisjZGVmaW5lIFBXRVJfR1BJTyhOYikJKDEgPDwgTmIpCS8qIEdQSU8gWzAuLjE1XSB3YWtlLXVwIGVuYWJsZSAgICAgKi8KKyNkZWZpbmUgUFdFUl9HUElPMAlQV0VSX0dQSU8gKDApCS8qIEdQSU8gIFswXSB3YWtlLXVwIGVuYWJsZSAgICAgICAgKi8KKyNkZWZpbmUgUFdFUl9HUElPMQlQV0VSX0dQSU8gKDEpCS8qIEdQSU8gIFsxXSB3YWtlLXVwIGVuYWJsZSAgICAgICAgKi8KKyNkZWZpbmUgUFdFUl9HUElPMglQV0VSX0dQSU8gKDIpCS8qIEdQSU8gIFsyXSB3YWtlLXVwIGVuYWJsZSAgICAgICAgKi8KKyNkZWZpbmUgUFdFUl9HUElPMwlQV0VSX0dQSU8gKDMpCS8qIEdQSU8gIFszXSB3YWtlLXVwIGVuYWJsZSAgICAgICAgKi8KKyNkZWZpbmUgUFdFUl9HUElPNAlQV0VSX0dQSU8gKDQpCS8qIEdQSU8gIFs0XSB3YWtlLXVwIGVuYWJsZSAgICAgICAgKi8KKyNkZWZpbmUgUFdFUl9HUElPNQlQV0VSX0dQSU8gKDUpCS8qIEdQSU8gIFs1XSB3YWtlLXVwIGVuYWJsZSAgICAgICAgKi8KKyNkZWZpbmUgUFdFUl9HUElPNglQV0VSX0dQSU8gKDYpCS8qIEdQSU8gIFs2XSB3YWtlLXVwIGVuYWJsZSAgICAgICAgKi8KKyNkZWZpbmUgUFdFUl9HUElPNwlQV0VSX0dQSU8gKDcpCS8qIEdQSU8gIFs3XSB3YWtlLXVwIGVuYWJsZSAgICAgICAgKi8KKyNkZWZpbmUgUFdFUl9HUElPOAlQV0VSX0dQSU8gKDgpCS8qIEdQSU8gIFs4XSB3YWtlLXVwIGVuYWJsZSAgICAgICAgKi8KKyNkZWZpbmUgUFdFUl9HUElPOQlQV0VSX0dQSU8gKDkpCS8qIEdQSU8gIFs5XSB3YWtlLXVwIGVuYWJsZSAgICAgICAgKi8KKyNkZWZpbmUgUFdFUl9HUElPMTAJUFdFUl9HUElPICgxMCkJLyogR1BJTyBbMTBdIHdha2UtdXAgZW5hYmxlICAgICAgICAqLworI2RlZmluZSBQV0VSX0dQSU8xMQlQV0VSX0dQSU8gKDExKQkvKiBHUElPIFsxMV0gd2FrZS11cCBlbmFibGUgICAgICAgICovCisjZGVmaW5lIFBXRVJfR1BJTzEyCVBXRVJfR1BJTyAoMTIpCS8qIEdQSU8gWzEyXSB3YWtlLXVwIGVuYWJsZSAgICAgICAgKi8KKyNkZWZpbmUgUFdFUl9HUElPMTMJUFdFUl9HUElPICgxMykJLyogR1BJTyBbMTNdIHdha2UtdXAgZW5hYmxlICAgICAgICAqLworI2RlZmluZSBQV0VSX0dQSU8xNAlQV0VSX0dQSU8gKDE0KQkvKiBHUElPIFsxNF0gd2FrZS11cCBlbmFibGUgICAgICAgICovCisjZGVmaW5lIFBXRVJfR1BJTzE1CVBXRVJfR1BJTyAoMTUpCS8qIEdQSU8gWzE1XSB3YWtlLXVwIGVuYWJsZSAgICAgICAgKi8KKyNkZWZpbmUgUFdFUl9SVEMJMHg4MDAwMDAwMAkvKiBSVEMgYWxhcm0gd2FrZS11cCBlbmFibGUgICAgICAgICovCisKKworLyoKKyAqIFNTUCBTZXJpYWwgUG9ydCBSZWdpc3RlcnMKKyAqIFBYQTI1MCwgUFhBMjU1LCBQWEEyNnggYW5kIFBYQTI3eCBTU1AgY29udHJvbGxlcnMgYXJlIGFsbCBzbGlnaHRseSBkaWZmZXJlbnQuCisgKiBQWEEyNTUsIFBYQTI2eCBhbmQgUFhBMjd4IGhhdmUgZXh0cmEgcG9ydHMsIHJlZ2lzdGVycyBhbmQgYml0cy4KKyAqLworCisgLyogQ29tbW9uIFBYQTJ4eCBiaXRzIGZpcnN0ICovCisjZGVmaW5lIFNTQ1IwX0RTUwkoMHgwMDAwMDAwZikJLyogRGF0YSBTaXplIFNlbGVjdCAobWFzaykgKi8KKyNkZWZpbmUgU1NDUjBfRGF0YVNpemUoeCkgICgoeCkgLSAxKQkvKiBEYXRhIFNpemUgU2VsZWN0IFs0Li4xNl0gKi8KKyNkZWZpbmUgU1NDUjBfRlJGCSgweDAwMDAwMDMwKQkvKiBGUmFtZSBGb3JtYXQgKG1hc2spICovCisjZGVmaW5lIFNTQ1IwX01vdG9yb2xhCSgweDAgPDwgNCkJLyogTW90b3JvbGEncyBTZXJpYWwgUGVyaXBoZXJhbCBJbnRlcmZhY2UgKFNQSSkgKi8KKyNkZWZpbmUgU1NDUjBfVEkJKDB4MSA8PCA0KQkvKiBUZXhhcyBJbnN0cnVtZW50cycgU3luY2hyb25vdXMgU2VyaWFsIFByb3RvY29sIChTU1ApICovCisjZGVmaW5lIFNTQ1IwX05hdGlvbmFsCSgweDIgPDwgNCkJLyogTmF0aW9uYWwgTWljcm93aXJlICovCisjZGVmaW5lIFNTQ1IwX0VDUwkoMSA8PCA2KQkvKiBFeHRlcm5hbCBjbG9jayBzZWxlY3QgKi8KKyNkZWZpbmUgU1NDUjBfU1NFCSgxIDw8IDcpCS8qIFN5bmNocm9ub3VzIFNlcmlhbCBQb3J0IEVuYWJsZSAqLworI2RlZmluZSBTU0NSMF9TQ1IJKDB4MDAwMGZmMDApCS8qIFNlcmlhbCBDbG9jayBSYXRlIChtYXNrKSAqLworI2RlZmluZSBTU0NSMF9TZXJDbGtEaXYoeCkgKCgoKHgpIC0gMikvMikgPDwgOCkgLyogRGl2aXNvciBbMi4uNTEyXSAqLworCisjZGVmaW5lIFNTQ1IxX1JJRQkoMSA8PCAwKQkvKiBSZWNlaXZlIEZJRk8gSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBTU0NSMV9USUUJKDEgPDwgMSkJLyogVHJhbnNtaXQgRklGTyBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIFNTQ1IxX0xCTQkoMSA8PCAyKQkvKiBMb29wLUJhY2sgTW9kZSAqLworI2RlZmluZSBTU0NSMV9TUE8JKDEgPDwgMykJLyogTW90b3JvbGEgU1BJIFNTUFNDTEsgcG9sYXJpdHkgc2V0dGluZyAqLworI2RlZmluZSBTU0NSMV9TUEgJKDEgPDwgNCkJLyogTW90b3JvbGEgU1BJIFNTUFNDTEsgcGhhc2Ugc2V0dGluZyAqLworI2RlZmluZSBTU0NSMV9NV0RTCSgxIDw8IDUpCS8qIE1pY3Jvd2lyZSBUcmFuc21pdCBEYXRhIFNpemUgKi8KKyNkZWZpbmUgU1NDUjFfVEZUCSgweDAwMDAwM2MwKQkvKiBUcmFuc21pdCBGSUZPIFRocmVzaG9sZCAobWFzaykgKi8KKyNkZWZpbmUgU1NDUjFfVHhUcmVzaCh4KSAoKCh4KSAtIDEpIDw8IDYpIC8qIGxldmVsIFsxLi4xNl0gKi8KKyNkZWZpbmUgU1NDUjFfUkZUCSgweDAwMDAzYzAwKQkvKiBSZWNlaXZlIEZJRk8gVGhyZXNob2xkIChtYXNrKSAqLworI2RlZmluZSBTU0NSMV9SeFRyZXNoKHgpICgoKHgpIC0gMSkgPDwgMTApIC8qIGxldmVsIFsxLi4xNl0gKi8KKworI2RlZmluZSBTU1NSX1RORgkoMSA8PCAyKQkvKiBUcmFuc21pdCBGSUZPIE5vdCBGdWxsICovCisjZGVmaW5lIFNTU1JfUk5FCSgxIDw8IDMpCS8qIFJlY2VpdmUgRklGTyBOb3QgRW1wdHkgKi8KKyNkZWZpbmUgU1NTUl9CU1kJKDEgPDwgNCkJLyogU1NQIEJ1c3kgKi8KKyNkZWZpbmUgU1NTUl9URlMJKDEgPDwgNSkJLyogVHJhbnNtaXQgRklGTyBTZXJ2aWNlIFJlcXVlc3QgKi8KKyNkZWZpbmUgU1NTUl9SRlMJKDEgPDwgNikJLyogUmVjZWl2ZSBGSUZPIFNlcnZpY2UgUmVxdWVzdCAqLworI2RlZmluZSBTU1NSX1JPUgkoMSA8PCA3KQkvKiBSZWNlaXZlIEZJRk8gT3ZlcnJ1biAqLworCisjZGVmaW5lIFNTQ1IwX1RJTQkJKDEgPDwgMjMpCS8qIFRyYW5zbWl0IEZJRk8gVW5kZXIgUnVuIEludGVycnVwdCBNYXNrICovCisjZGVmaW5lIFNTQ1IwX1JJTQkJKDEgPDwgMjIpCS8qIFJlY2VpdmUgRklGTyBPdmVyIFJ1biBpbnRlcnJ1cHQgTWFzayAqLworI2RlZmluZSBTU0NSMF9OQ1MJCSgxIDw8IDIxKQkvKiBOZXR3b3JrIENsb2NrIFNlbGVjdCAqLworI2RlZmluZSBTU0NSMF9FRFNTCQkoMSA8PCAyMCkJLyogRXh0ZW5kZWQgRGF0YSBTaXplIFNlbGVjdCAqLworCisvKiBleHRyYSBiaXRzIGluIFBYQTI1NSwgUFhBMjZ4IGFuZCBQWEEyN3ggU1NQIHBvcnRzICovCisjZGVmaW5lIFNTQ1IwX1BTUAkJKDMgPDwgNCkJLyogUFNQIC0gUHJvZ3JhbW1hYmxlIFNlcmlhbCBQcm90b2NvbCAqLworI2RlZmluZSBTU0NSMV9UVEVMUAkJKDEgPDwgMzEpCS8qIFRYRCBUcmlzdGF0ZSBFbmFibGUgTGFzdCBQaGFzZSAqLworI2RlZmluZSBTU0NSMV9UVEUJCSgxIDw8IDMwKQkvKiBUWEQgVHJpc3RhdGUgRW5hYmxlICovCisjZGVmaW5lIFNTQ1IxX0VCQ0VJCQkoMSA8PCAyOSkJLyogRW5hYmxlIEJpdCBDb3VudCBFcnJvciBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgU1NDUjFfU0NGUgkJKDEgPDwgMjgpCS8qIFNsYXZlIENsb2NrIGZyZWUgUnVubmluZyAqLworI2RlZmluZSBTU0NSMV9FQ1JBCQkoMSA8PCAyNykJLyogRW5hYmxlIENsb2NrIFJlcXVlc3QgQSAqLworI2RlZmluZSBTU0NSMV9FQ1JCCQkoMSA8PCAyNikJLyogRW5hYmxlIENsb2NrIHJlcXVlc3QgQiAqLworI2RlZmluZSBTU0NSMV9TQ0xLRElSCSgxIDw8IDI1KQkvKiBTZXJpYWwgQml0IFJhdGUgQ2xvY2sgRGlyZWN0aW9uICovCisjZGVmaW5lIFNTQ1IxX1NGUk1ESVIJKDEgPDwgMjQpCS8qIEZyYW1lIERpcmVjdGlvbiAqLworI2RlZmluZSBTU0NSMV9SV09UCQkoMSA8PCAyMykJLyogUmVjZWl2ZSBXaXRob3V0IFRyYW5zbWl0ICovCisjZGVmaW5lIFNTQ1IxX1RSQUlMCQkoMSA8PCAyMikJLyogVHJhaWxpbmcgQnl0ZSAqLworI2RlZmluZSBTU0NSMV9UU1JFCQkoMSA8PCAyMSkJLyogVHJhbnNtaXQgU2VydmljZSBSZXF1ZXN0IEVuYWJsZSAqLworI2RlZmluZSBTU0NSMV9SU1JFCQkoMSA8PCAyMCkJLyogUmVjZWl2ZSBTZXJ2aWNlIFJlcXVlc3QgRW5hYmxlICovCisjZGVmaW5lIFNTQ1IxX1RJTlRFCQkoMSA8PCAxOSkJLyogUmVjZWl2ZXIgVGltZS1vdXQgSW50ZXJydXB0IGVuYWJsZSAqLworI2RlZmluZSBTU0NSMV9QSU5URQkJKDEgPDwgMTgpCS8qIFBlcmlwaGVyYWwgVHJhaWxpbmcgQnl0ZSBJbnRlcnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgU1NDUjFfU1RSRgkJKDEgPDwgMTUpCS8qIFNlbGVjdCBGSUZPIG9yIEVGV1IgKi8KKyNkZWZpbmUgU1NDUjFfRUZXUgkJKDEgPDwgMTQpCS8qIEVuYWJsZSBGSUZPIFdyaXRlL1JlYWQgKi8KKworI2RlZmluZSBTU1NSX0JDRQkJKDEgPDwgMjMpCS8qIEJpdCBDb3VudCBFcnJvciAqLworI2RlZmluZSBTU1NSX0NTUwkJKDEgPDwgMjIpCS8qIENsb2NrIFN5bmNocm9uaXNhdGlvbiBTdGF0dXMgKi8KKyNkZWZpbmUgU1NTUl9UVVIJCSgxIDw8IDIxKQkvKiBUcmFuc21pdCBGSUZPIFVuZGVyIFJ1biAqLworI2RlZmluZSBTU1NSX0VPQwkJKDEgPDwgMjApCS8qIEVuZCBPZiBDaGFpbiAqLworI2RlZmluZSBTU1NSX1RJTlQJCSgxIDw8IDE5KQkvKiBSZWNlaXZlciBUaW1lLW91dCBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgU1NTUl9QSU5UCQkoMSA8PCAxOCkJLyogUGVyaXBoZXJhbCBUcmFpbGluZyBCeXRlIEludGVycnVwdCAqLworCisjZGVmaW5lIFNTUFNQX0RNWVNUT1AoeCkJKHggPDwgMjMpCS8qIER1bW15IFN0b3AgKi8KKyNkZWZpbmUgU1NQU1BfU0ZSTVdEVEgoeCkJKHggPDwgMTYpCS8qIFNlcmlhbCBGcmFtZSBXaWR0aCAqLworI2RlZmluZSBTU1BTUF9TRlJNRExZKHgpCSh4IDw8IDkpCS8qIFNlcmlhbCBGcmFtZSBEZWxheSAqLworI2RlZmluZSBTU1BTUF9ETVlTVFJUKHgpCSh4IDw8IDcpCS8qIER1bW15IFN0YXJ0ICovCisjZGVmaW5lIFNTUFNQX1NUUlRETFkoeCkJKHggPDwgNCkJLyogU3RhcnQgRGVsYXkgKi8KKyNkZWZpbmUgU1NQU1BfRVREUwkJCSgxIDw8IDMpCS8qIEVuZCBvZiBUcmFuc2ZlciBkYXRhIFN0YXRlICovCisjZGVmaW5lIFNTUFNQX1NGUk1QCQkJKDEgPDwgMikJLyogU2VyaWFsIEZyYW1lIFBvbGFyaXR5ICovCisjZGVmaW5lIFNTUFNQX1NDTU9ERSh4KQkJKHggPDwgMCkJLyogU2VyaWFsIEJpdCBSYXRlIENsb2NrIE1vZGUgKi8KKworCisjZGVmaW5lIFNTQ1IwX1AxCV9fUkVHKDB4NDEwMDAwMDApICAvKiBTU1AgUG9ydCAxIENvbnRyb2wgUmVnaXN0ZXIgMCAqLworI2RlZmluZSBTU0NSMV9QMQlfX1JFRygweDQxMDAwMDA0KSAgLyogU1NQIFBvcnQgMSBDb250cm9sIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgU1NTUl9QMQkJX19SRUcoMHg0MTAwMDAwOCkgIC8qIFNTUCBQb3J0IDEgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIFNTSVRSX1AxCV9fUkVHKDB4NDEwMDAwMEMpICAvKiBTU1AgUG9ydCAxIEludGVycnVwdCBUZXN0IFJlZ2lzdGVyICovCisjZGVmaW5lIFNTRFJfUDEJCV9fUkVHKDB4NDEwMDAwMTApICAvKiAoV3JpdGUgLyBSZWFkKSBTU1AgUG9ydCAxIERhdGEgV3JpdGUgUmVnaXN0ZXIvU1NQIERhdGEgUmVhZCBSZWdpc3RlciAqLworCisvKiBTdXBwb3J0IGV4aXN0aW5nIFBYQTI1eCBkcml2ZXJzICovCisjZGVmaW5lIFNTQ1IwCQlTU0NSMF9QMSAgLyogU1NQIENvbnRyb2wgUmVnaXN0ZXIgMCAqLworI2RlZmluZSBTU0NSMQkJU1NDUjFfUDEgIC8qIFNTUCBDb250cm9sIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgU1NTUgkJU1NTUl9QMQkgIC8qIFNTUCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1NJVFIJCVNTSVRSX1AxICAvKiBTU1AgSW50ZXJydXB0IFRlc3QgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1NEUgkJU1NEUl9QMQkgIC8qIChXcml0ZSAvIFJlYWQpIFNTUCBEYXRhIFdyaXRlIFJlZ2lzdGVyL1NTUCBEYXRhIFJlYWQgUmVnaXN0ZXIgKi8KKworLyogUFhBMjd4IHBvcnRzICovCisjaWYgZGVmaW5lZCAoQ09ORklHX1BYQTI3eCkKKyNkZWZpbmUgU1NUT19QMQkJX19SRUcoMHg0MTAwMDAyOCkgIC8qIFNTUCBQb3J0IDEgVGltZSBPdXQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1NQU1BfUDEJX19SRUcoMHg0MTAwMDAyQykgIC8qIFNTUCBQb3J0IDEgUHJvZ3JhbW1hYmxlIFNlcmlhbCBQcm90b2NvbCAqLworI2RlZmluZSBTU0NSMF9QMglfX1JFRygweDQxNzAwMDAwKSAgLyogU1NQIFBvcnQgMiBDb250cm9sIFJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUgU1NDUjFfUDIJX19SRUcoMHg0MTcwMDAwNCkgIC8qIFNTUCBQb3J0IDIgQ29udHJvbCBSZWdpc3RlciAxICovCisjZGVmaW5lIFNTU1JfUDIJCV9fUkVHKDB4NDE3MDAwMDgpICAvKiBTU1AgUG9ydCAyIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBTU0lUUl9QMglfX1JFRygweDQxNzAwMDBDKSAgLyogU1NQIFBvcnQgMiBJbnRlcnJ1cHQgVGVzdCBSZWdpc3RlciAqLworI2RlZmluZSBTU0RSX1AyCQlfX1JFRygweDQxNzAwMDEwKSAgLyogKFdyaXRlIC8gUmVhZCkgU1NQIFBvcnQgMiBEYXRhIFdyaXRlIFJlZ2lzdGVyL1NTUCBEYXRhIFJlYWQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1NUT19QMgkJX19SRUcoMHg0MTcwMDAyOCkgIC8qIFNTUCBQb3J0IDIgVGltZSBPdXQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1NQU1BfUDIJX19SRUcoMHg0MTcwMDAyQykgIC8qIFNTUCBQb3J0IDIgUHJvZ3JhbW1hYmxlIFNlcmlhbCBQcm90b2NvbCAqLworI2RlZmluZSBTU0NSMF9QMwlfX1JFRygweDQxOTAwMDAwKSAgLyogU1NQIFBvcnQgMyBDb250cm9sIFJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUgU1NDUjFfUDMJX19SRUcoMHg0MTkwMDAwNCkgIC8qIFNTUCBQb3J0IDMgQ29udHJvbCBSZWdpc3RlciAxICovCisjZGVmaW5lIFNTU1JfUDMJCV9fUkVHKDB4NDE5MDAwMDgpICAvKiBTU1AgUG9ydCAzIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBTU0lUUl9QMwlfX1JFRygweDQxOTAwMDBDKSAgLyogU1NQIFBvcnQgMyBJbnRlcnJ1cHQgVGVzdCBSZWdpc3RlciAqLworI2RlZmluZSBTU0RSX1AzCQlfX1JFRygweDQxOTAwMDEwKSAgLyogKFdyaXRlIC8gUmVhZCkgU1NQIFBvcnQgMyBEYXRhIFdyaXRlIFJlZ2lzdGVyL1NTUCBEYXRhIFJlYWQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1NUT19QMwkJX19SRUcoMHg0MTkwMDAyOCkgIC8qIFNTUCBQb3J0IDMgVGltZSBPdXQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1NQU1BfUDMJX19SRUcoMHg0MTkwMDAyQykgIC8qIFNTUCBQb3J0IDMgUHJvZ3JhbW1hYmxlIFNlcmlhbCBQcm90b2NvbCAqLworI2Vsc2UgLyogUFhBMjU1IChvbmx5IHBvcnQgMikgYW5kIFBYQTI2eCBwb3J0cyovCisjZGVmaW5lIFNTVE9fUDEJCV9fUkVHKDB4NDEwMDAwMjgpICAvKiBTU1AgUG9ydCAxIFRpbWUgT3V0IFJlZ2lzdGVyICovCisjZGVmaW5lIFNTUFNQX1AxCV9fUkVHKDB4NDEwMDAwMkMpICAvKiBTU1AgUG9ydCAxIFByb2dyYW1tYWJsZSBTZXJpYWwgUHJvdG9jb2wgKi8KKyNkZWZpbmUgU1NDUjBfUDIJX19SRUcoMHg0MTQwMDAwMCkgIC8qIFNTUCBQb3J0IDIgQ29udHJvbCBSZWdpc3RlciAwICovCisjZGVmaW5lIFNTQ1IxX1AyCV9fUkVHKDB4NDE0MDAwMDQpICAvKiBTU1AgUG9ydCAyIENvbnRyb2wgUmVnaXN0ZXIgMSAqLworI2RlZmluZSBTU1NSX1AyCQlfX1JFRygweDQxNDAwMDA4KSAgLyogU1NQIFBvcnQgMiBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1NJVFJfUDIJX19SRUcoMHg0MTQwMDAwQykgIC8qIFNTUCBQb3J0IDIgSW50ZXJydXB0IFRlc3QgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1NEUl9QMgkJX19SRUcoMHg0MTQwMDAxMCkgIC8qIChXcml0ZSAvIFJlYWQpIFNTUCBQb3J0IDIgRGF0YSBXcml0ZSBSZWdpc3Rlci9TU1AgRGF0YSBSZWFkIFJlZ2lzdGVyICovCisjZGVmaW5lIFNTVE9fUDIJCV9fUkVHKDB4NDE0MDAwMjgpICAvKiBTU1AgUG9ydCAyIFRpbWUgT3V0IFJlZ2lzdGVyICovCisjZGVmaW5lIFNTUFNQX1AyCV9fUkVHKDB4NDE0MDAwMkMpICAvKiBTU1AgUG9ydCAyIFByb2dyYW1tYWJsZSBTZXJpYWwgUHJvdG9jb2wgKi8KKyNkZWZpbmUgU1NDUjBfUDMJX19SRUcoMHg0MTUwMDAwMCkgIC8qIFNTUCBQb3J0IDMgQ29udHJvbCBSZWdpc3RlciAwICovCisjZGVmaW5lIFNTQ1IxX1AzCV9fUkVHKDB4NDE1MDAwMDQpICAvKiBTU1AgUG9ydCAzIENvbnRyb2wgUmVnaXN0ZXIgMSAqLworI2RlZmluZSBTU1NSX1AzCQlfX1JFRygweDQxNTAwMDA4KSAgLyogU1NQIFBvcnQgMyBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1NJVFJfUDMJX19SRUcoMHg0MTUwMDAwQykgIC8qIFNTUCBQb3J0IDMgSW50ZXJydXB0IFRlc3QgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1NEUl9QMwkJX19SRUcoMHg0MTUwMDAxMCkgIC8qIChXcml0ZSAvIFJlYWQpIFNTUCBQb3J0IDMgRGF0YSBXcml0ZSBSZWdpc3Rlci9TU1AgRGF0YSBSZWFkIFJlZ2lzdGVyICovCisjZGVmaW5lIFNTVE9fUDMJCV9fUkVHKDB4NDE1MDAwMjgpICAvKiBTU1AgUG9ydCAzIFRpbWUgT3V0IFJlZ2lzdGVyICovCisjZGVmaW5lIFNTUFNQX1AzCV9fUkVHKDB4NDE1MDAwMkMpICAvKiBTU1AgUG9ydCAzIFByb2dyYW1tYWJsZSBTZXJpYWwgUHJvdG9jb2wgKi8KKyNlbmRpZgorCisjZGVmaW5lIFNTQ1IwX1AoeCkgKCooKCh4KSA9PSAxKSA/ICZTU0NSMF9QMSA6ICgoeCkgPT0gMikgPyAmU1NDUjBfUDIgOiAoKHgpID09IDMpID8gJlNTQ1IwX1AzIDogTlVMTCkpCisjZGVmaW5lIFNTQ1IxX1AoeCkgKCooKCh4KSA9PSAxKSA/ICZTU0NSMV9QMSA6ICgoeCkgPT0gMikgPyAmU1NDUjFfUDIgOiAoKHgpID09IDMpID8gJlNTQ1IxX1AzIDogTlVMTCkpCisjZGVmaW5lIFNTU1JfUCh4KSAoKigoKHgpID09IDEpID8gJlNTU1JfUDEgOiAoKHgpID09IDIpID8gJlNTU1JfUDIgOiAoKHgpID09IDMpID8gJlNTU1JfUDMgOiBOVUxMKSkKKyNkZWZpbmUgU1NJVFJfUCh4KSAoKigoKHgpID09IDEpID8gJlNTSVRSX1AxIDogKCh4KSA9PSAyKSA/ICZTU0lUUl9QMiA6ICgoeCkgPT0gMykgPyAmU1NJVFJfUDMgOiBOVUxMKSkKKyNkZWZpbmUgU1NEUl9QKHgpICgqKCgoeCkgPT0gMSkgPyAmU1NEUl9QMSA6ICgoeCkgPT0gMikgPyAmU1NEUl9QMiA6ICgoeCkgPT0gMykgPyAmU1NEUl9QMyA6IE5VTEwpKQorI2RlZmluZSBTU1RPX1AoeCkgKCooKCh4KSA9PSAxKSA/ICZTU1RPX1AxIDogKCh4KSA9PSAyKSA/ICZTU1RPX1AyIDogKCh4KSA9PSAzKSA/ICZTU1RPX1AzIDogTlVMTCkpCisjZGVmaW5lIFNTUFNQX1AoeCkgKCooKCh4KSA9PSAxKSA/ICZTU1BTUF9QMSA6ICgoeCkgPT0gMikgPyAmU1NQU1BfUDIgOiAoKHgpID09IDMpID8gJlNTUFNQX1AzIDogTlVMTCkpCisKKy8qCisgKiBNdWx0aU1lZGlhQ2FyZCAoTU1DKSBjb250cm9sbGVyCisgKi8KKworI2RlZmluZSBNTUNfU1RSUENMCV9fUkVHKDB4NDExMDAwMDApICAvKiBDb250cm9sIHRvIHN0YXJ0IGFuZCBzdG9wIE1NQyBjbG9jayAqLworI2RlZmluZSBNTUNfU1RBVAlfX1JFRygweDQxMTAwMDA0KSAgLyogTU1DIFN0YXR1cyBSZWdpc3RlciAocmVhZCBvbmx5KSAqLworI2RlZmluZSBNTUNfQ0xLUlQJX19SRUcoMHg0MTEwMDAwOCkgIC8qIE1NQyBjbG9jayByYXRlICovCisjZGVmaW5lIE1NQ19TUEkJCV9fUkVHKDB4NDExMDAwMGMpICAvKiBTUEkgbW9kZSBjb250cm9sIGJpdHMgKi8KKyNkZWZpbmUgTU1DX0NNREFUCV9fUkVHKDB4NDExMDAwMTApICAvKiBDb21tYW5kL3Jlc3BvbnNlL2RhdGEgc2VxdWVuY2UgY29udHJvbCAqLworI2RlZmluZSBNTUNfUkVTVE8JX19SRUcoMHg0MTEwMDAxNCkgIC8qIEV4cGVjdGVkIHJlc3BvbnNlIHRpbWUgb3V0ICovCisjZGVmaW5lIE1NQ19SRFRPCV9fUkVHKDB4NDExMDAwMTgpICAvKiBFeHBlY3RlZCBkYXRhIHJlYWQgdGltZSBvdXQgKi8KKyNkZWZpbmUgTU1DX0JMS0xFTglfX1JFRygweDQxMTAwMDFjKSAgLyogQmxvY2sgbGVuZ3RoIG9mIGRhdGEgdHJhbnNhY3Rpb24gKi8KKyNkZWZpbmUgTU1DX05PQgkJX19SRUcoMHg0MTEwMDAyMCkgIC8qIE51bWJlciBvZiBibG9ja3MsIGZvciBibG9jayBtb2RlICovCisjZGVmaW5lIE1NQ19QUlRCVUYJX19SRUcoMHg0MTEwMDAyNCkgIC8qIFBhcnRpYWwgTU1DX1RYRklGTyBGSUZPIHdyaXR0ZW4gKi8KKyNkZWZpbmUgTU1DX0lfTUFTSwlfX1JFRygweDQxMTAwMDI4KSAgLyogSW50ZXJydXB0IE1hc2sgKi8KKyNkZWZpbmUgTU1DX0lfUkVHCV9fUkVHKDB4NDExMDAwMmMpICAvKiBJbnRlcnJ1cHQgUmVnaXN0ZXIgKHJlYWQgb25seSkgKi8KKyNkZWZpbmUgTU1DX0NNRAkJX19SRUcoMHg0MTEwMDAzMCkgIC8qIEluZGV4IG9mIGN1cnJlbnQgY29tbWFuZCAqLworI2RlZmluZSBNTUNfQVJHSAlfX1JFRygweDQxMTAwMDM0KSAgLyogTVNXIHBhcnQgb2YgdGhlIGN1cnJlbnQgY29tbWFuZCBhcmd1bWVudCAqLworI2RlZmluZSBNTUNfQVJHTAlfX1JFRygweDQxMTAwMDM4KSAgLyogTFNXIHBhcnQgb2YgdGhlIGN1cnJlbnQgY29tbWFuZCBhcmd1bWVudCAqLworI2RlZmluZSBNTUNfUkVTCQlfX1JFRygweDQxMTAwMDNjKSAgLyogUmVzcG9uc2UgRklGTyAocmVhZCBvbmx5KSAqLworI2RlZmluZSBNTUNfUlhGSUZPCV9fUkVHKDB4NDExMDAwNDApICAvKiBSZWNlaXZlIEZJRk8gKHJlYWQgb25seSkgKi8KKyNkZWZpbmUgTU1DX1RYRklGTwlfX1JFRygweDQxMTAwMDQ0KSAgLyogVHJhbnNtaXQgRklGTyAod3JpdGUgb25seSkgKi8KKworCisvKgorICogQ29yZSBDbG9jaworICovCisKKyNkZWZpbmUgQ0NDUgkJX19SRUcoMHg0MTMwMDAwMCkgIC8qIENvcmUgQ2xvY2sgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworI2RlZmluZSBDS0VOCQlfX1JFRygweDQxMzAwMDA0KSAgLyogQ2xvY2sgRW5hYmxlIFJlZ2lzdGVyICovCisjZGVmaW5lIE9TQ0MJCV9fUkVHKDB4NDEzMDAwMDgpICAvKiBPc2NpbGxhdG9yIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ0NTUgkJX19SRUcoMHg0MTMwMDAwQykgIC8qIENvcmUgQ2xvY2sgU3RhdHVzIFJlZ2lzdGVyICovCisKKyNkZWZpbmUgQ0NDUl9OX01BU0sJMHgwMzgwCQkvKiBSdW4gTW9kZSBGcmVxdWVuY3kgdG8gVHVyYm8gTW9kZSBGcmVxdWVuY3kgTXVsdGlwbGllciAqLworI2RlZmluZSBDQ0NSX01fTUFTSwkweDAwNjAJCS8qIE1lbW9yeSBGcmVxdWVuY3kgdG8gUnVuIE1vZGUgRnJlcXVlbmN5IE11bHRpcGxpZXIgKi8KKyNkZWZpbmUgQ0NDUl9MX01BU0sJMHgwMDFmCQkvKiBDcnlzdGFsIEZyZXF1ZW5jeSB0byBNZW1vcnkgRnJlcXVlbmN5IE11bHRpcGxpZXIgKi8KKworI2RlZmluZSBDS0VOMjRfQ0FNRVJBCSgxIDw8IDI0KQkvKiBDYW1lcmEgSW50ZXJmYWNlIENsb2NrIEVuYWJsZSAqLworI2RlZmluZSBDS0VOMjNfU1NQMQkoMSA8PCAyMykJLyogU1NQMSBVbml0IENsb2NrIEVuYWJsZSAqLworI2RlZmluZSBDS0VOMjJfTUVNQwkoMSA8PCAyMikJLyogTWVtb3J5IENvbnRyb2xsZXIgQ2xvY2sgRW5hYmxlICovCisjZGVmaW5lIENLRU4yMV9NRU1TVEsJKDEgPDwgMjEpCS8qIE1lbW9yeSBTdGljayBIb3N0IENvbnRyb2xsZXIgKi8KKyNkZWZpbmUgQ0tFTjIwX0lNCSgxIDw8IDIwKQkvKiBJbnRlcm5hbCBNZW1vcnkgQ2xvY2sgRW5hYmxlICovCisjZGVmaW5lIENLRU4xOV9LRVlQQUQJKDEgPDwgMTkpCS8qIEtleXBhZCBJbnRlcmZhY2UgQ2xvY2sgRW5hYmxlICovCisjZGVmaW5lIENLRU4xOF9VU0lNCSgxIDw8IDE4KQkvKiBVU0lNIFVuaXQgQ2xvY2sgRW5hYmxlICovCisjZGVmaW5lIENLRU4xN19NU0wJKDEgPDwgMTcpCS8qIE1TTCBVbml0IENsb2NrIEVuYWJsZSAqLworI2RlZmluZSBDS0VOMTZfTENECSgxIDw8IDE2KQkvKiBMQ0QgVW5pdCBDbG9jayBFbmFibGUgKi8KKyNkZWZpbmUgQ0tFTjE1X1BXUkkyQwkoMSA8PCAxNSkJLyogUFdSIEkyQyBVbml0IENsb2NrIEVuYWJsZSAqLworI2RlZmluZSBDS0VOMTRfSTJDCSgxIDw8IDE0KQkvKiBJMkMgVW5pdCBDbG9jayBFbmFibGUgKi8KKyNkZWZpbmUgQ0tFTjEzX0ZJQ1AJKDEgPDwgMTMpCS8qIEZJQ1AgVW5pdCBDbG9jayBFbmFibGUgKi8KKyNkZWZpbmUgQ0tFTjEyX01NQwkoMSA8PCAxMikJLyogTU1DIFVuaXQgQ2xvY2sgRW5hYmxlICovCisjZGVmaW5lIENLRU4xMV9VU0IJKDEgPDwgMTEpCS8qIFVTQiBVbml0IENsb2NrIEVuYWJsZSAqLworI2RlZmluZSBDS0VOMTBfQVNTUAkoMSA8PCAxMCkJLyogQVNTUCAoU1NQMykgQ2xvY2sgRW5hYmxlICovCisjZGVmaW5lIENLRU4xMF9VU0JIT1NUCSgxIDw8IDEwKQkvKiBVU0IgSG9zdCBVbml0IENsb2NrIEVuYWJsZSAqLworI2RlZmluZSBDS0VOOV9PU1RJTUVSCSgxIDw8IDkpCS8qIE9TIFRpbWVyIFVuaXQgQ2xvY2sgRW5hYmxlICovCisjZGVmaW5lIENLRU45X05TU1AJKDEgPDwgOSkJLyogTlNTUCAoU1NQMikgQ2xvY2sgRW5hYmxlICovCisjZGVmaW5lIENLRU44X0kyUwkoMSA8PCA4KQkvKiBJMlMgVW5pdCBDbG9jayBFbmFibGUgKi8KKyNkZWZpbmUgQ0tFTjdfQlRVQVJUCSgxIDw8IDcpCS8qIEJUVUFSVCBVbml0IENsb2NrIEVuYWJsZSAqLworI2RlZmluZSBDS0VONl9GRlVBUlQJKDEgPDwgNikJLyogRkZVQVJUIFVuaXQgQ2xvY2sgRW5hYmxlICovCisjZGVmaW5lIENLRU41X1NUVUFSVAkoMSA8PCA1KQkvKiBTVFVBUlQgVW5pdCBDbG9jayBFbmFibGUgKi8KKyNkZWZpbmUgQ0tFTjRfU1NQMwkoMSA8PCA0KQkvKiBTU1AzIFVuaXQgQ2xvY2sgRW5hYmxlICovCisjZGVmaW5lIENLRU4zX1NTUAkoMSA8PCAzKQkvKiBTU1AgVW5pdCBDbG9jayBFbmFibGUgKi8KKyNkZWZpbmUgQ0tFTjNfU1NQMgkoMSA8PCAzKQkvKiBTU1AyIFVuaXQgQ2xvY2sgRW5hYmxlICovCisjZGVmaW5lIENLRU4yX0FDOTcJKDEgPDwgMikJLyogQUM5NyBVbml0IENsb2NrIEVuYWJsZSAqLworI2RlZmluZSBDS0VOMV9QV00xCSgxIDw8IDEpCS8qIFBXTTEgQ2xvY2sgRW5hYmxlICovCisjZGVmaW5lIENLRU4wX1BXTTAJKDEgPDwgMCkJLyogUFdNMCBDbG9jayBFbmFibGUgKi8KKworI2RlZmluZSBPU0NDX09PTgkoMSA8PCAxKQkvKiAzMi43NjhrSHogT09OICh3cml0ZS1vbmNlIG9ubHkgYml0KSAqLworI2RlZmluZSBPU0NDX09PSwkoMSA8PCAwKQkvKiAzMi43NjhrSHogT09LIChyZWFkLW9ubHkgYml0KSAqLworCisKKy8qCisgKiBMQ0QKKyAqLworCisjZGVmaW5lIExDQ1IwCQlfX1JFRygweDQ0MDAwMDAwKSAgLyogTENEIENvbnRyb2xsZXIgQ29udHJvbCBSZWdpc3RlciAwICovCisjZGVmaW5lIExDQ1IxCQlfX1JFRygweDQ0MDAwMDA0KSAgLyogTENEIENvbnRyb2xsZXIgQ29udHJvbCBSZWdpc3RlciAxICovCisjZGVmaW5lIExDQ1IyCQlfX1JFRygweDQ0MDAwMDA4KSAgLyogTENEIENvbnRyb2xsZXIgQ29udHJvbCBSZWdpc3RlciAyICovCisjZGVmaW5lIExDQ1IzCQlfX1JFRygweDQ0MDAwMDBDKSAgLyogTENEIENvbnRyb2xsZXIgQ29udHJvbCBSZWdpc3RlciAzICovCisjZGVmaW5lIERGQlIwCQlfX1JFRygweDQ0MDAwMDIwKSAgLyogRE1BIENoYW5uZWwgMCBGcmFtZSBCcmFuY2ggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgREZCUjEJCV9fUkVHKDB4NDQwMDAwMjQpICAvKiBETUEgQ2hhbm5lbCAxIEZyYW1lIEJyYW5jaCBSZWdpc3RlciAqLworI2RlZmluZSBMQ1NSCQlfX1JFRygweDQ0MDAwMDM4KSAgLyogTENEIENvbnRyb2xsZXIgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIExJSURSCQlfX1JFRygweDQ0MDAwMDNDKSAgLyogTENEIENvbnRyb2xsZXIgSW50ZXJydXB0IElEIFJlZ2lzdGVyICovCisjZGVmaW5lIFRNRURSR0JSCV9fUkVHKDB4NDQwMDAwNDApICAvKiBUTUVEIFJHQiBTZWVkIFJlZ2lzdGVyICovCisjZGVmaW5lIFRNRURDUgkJX19SRUcoMHg0NDAwMDA0NCkgIC8qIFRNRUQgQ29udHJvbCBSZWdpc3RlciAqLworCisjZGVmaW5lIExDQ1IzXzFCUFAgKDAgPDwgMjQpCisjZGVmaW5lIExDQ1IzXzJCUFAgKDEgPDwgMjQpCisjZGVmaW5lIExDQ1IzXzRCUFAgKDIgPDwgMjQpCisjZGVmaW5lIExDQ1IzXzhCUFAgKDMgPDwgMjQpCisjZGVmaW5lIExDQ1IzXzE2QlBQICg0IDw8IDI0KQorCisjZGVmaW5lIEZEQURSMAkJX19SRUcoMHg0NDAwMDIwMCkgIC8qIERNQSBDaGFubmVsIDAgRnJhbWUgRGVzY3JpcHRvciBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lIEZTQURSMAkJX19SRUcoMHg0NDAwMDIwNCkgIC8qIERNQSBDaGFubmVsIDAgRnJhbWUgU291cmNlIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRklEUjAJCV9fUkVHKDB4NDQwMDAyMDgpICAvKiBETUEgQ2hhbm5lbCAwIEZyYW1lIElEIFJlZ2lzdGVyICovCisjZGVmaW5lIExEQ01EMAkJX19SRUcoMHg0NDAwMDIwQykgIC8qIERNQSBDaGFubmVsIDAgQ29tbWFuZCBSZWdpc3RlciAqLworI2RlZmluZSBGREFEUjEJCV9fUkVHKDB4NDQwMDAyMTApICAvKiBETUEgQ2hhbm5lbCAxIEZyYW1lIERlc2NyaXB0b3IgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZSBGU0FEUjEJCV9fUkVHKDB4NDQwMDAyMTQpICAvKiBETUEgQ2hhbm5lbCAxIEZyYW1lIFNvdXJjZSBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lIEZJRFIxCQlfX1JFRygweDQ0MDAwMjE4KSAgLyogRE1BIENoYW5uZWwgMSBGcmFtZSBJRCBSZWdpc3RlciAqLworI2RlZmluZSBMRENNRDEJCV9fUkVHKDB4NDQwMDAyMUMpICAvKiBETUEgQ2hhbm5lbCAxIENvbW1hbmQgUmVnaXN0ZXIgKi8KKworI2RlZmluZSBMQ0NSMF9FTkIJKDEgPDwgMCkJLyogTENEIENvbnRyb2xsZXIgZW5hYmxlICovCisjZGVmaW5lIExDQ1IwX0NNUwkoMSA8PCAxKQkvKiBDb2xvci9Nb25vY2hyb21lIERpc3BsYXkgU2VsZWN0ICovCisjZGVmaW5lIExDQ1IwX0NvbG9yICAgICAoTENDUjBfQ01TKjApICAgLyogIENvbG9yIGRpc3BsYXkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBMQ0NSMF9Nb25vICAgICAgKExDQ1IwX0NNUyoxKSAgIC8qICBNb25vY2hyb21lIGRpc3BsYXkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTENDUjBfU0RTCSgxIDw8IDIpCS8qIFNpbmdsZS9EdWFsIFBhbmVsIERpc3BsYXkgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZWxlY3QgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIExDQ1IwX1NuZ2wgICAgICAoTENDUjBfU0RTKjApICAgLyogIFNpbmdsZSBwYW5lbCBkaXNwbGF5ICAgICAgICAgICAqLworI2RlZmluZSBMQ0NSMF9EdWFsICAgICAgKExDQ1IwX1NEUyoxKSAgIC8qICBEdWFsIHBhbmVsIGRpc3BsYXkgICAgICAgICAgICAgKi8KKworI2RlZmluZSBMQ0NSMF9MRE0JKDEgPDwgMykJLyogTENEIERpc2FibGUgRG9uZSBNYXNrICovCisjZGVmaW5lIExDQ1IwX1NGTQkoMSA8PCA0KQkvKiBTdGFydCBvZiBmcmFtZSBtYXNrICovCisjZGVmaW5lIExDQ1IwX0lVTQkoMSA8PCA1KQkvKiBJbnB1dCBGSUZPIHVuZGVycnVuIG1hc2sgKi8KKyNkZWZpbmUgTENDUjBfRUZNCSgxIDw8IDYpCS8qIEVuZCBvZiBGcmFtZSBtYXNrICovCisjZGVmaW5lIExDQ1IwX1BBUwkoMSA8PCA3KQkvKiBQYXNzaXZlL0FjdGl2ZSBkaXNwbGF5IFNlbGVjdCAgICovCisjZGVmaW5lIExDQ1IwX1BhcyAgICAgICAoTENDUjBfUEFTKjApICAgLyogIFBhc3NpdmUgZGlzcGxheSAoU1ROKSAgICAgICAgICAqLworI2RlZmluZSBMQ0NSMF9BY3QgICAgICAgKExDQ1IwX1BBUyoxKSAgIC8qICBBY3RpdmUgZGlzcGxheSAoVEZUKSAgICAgICAgICAgKi8KKyNkZWZpbmUgTENDUjBfRFBECSgxIDw8IDkpCS8qIERvdWJsZSBQaXhlbCBEYXRhIChtb25vY2hyb21lICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkaXNwbGF5IG1vZGUpICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIExDQ1IwXzRQaXhNb25vICAoTENDUjBfRFBEKjApICAgLyogIDQtUGl4ZWwvY2xvY2sgTW9ub2Nocm9tZSAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICBkaXNwbGF5ICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTENDUjBfOFBpeE1vbm8gIChMQ0NSMF9EUEQqMSkgICAvKiAgOC1QaXhlbC9jbG9jayBNb25vY2hyb21lICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIGRpc3BsYXkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBMQ0NSMF9ESVMJKDEgPDwgMTApCS8qIExDRCBEaXNhYmxlICovCisjZGVmaW5lIExDQ1IwX1FETQkoMSA8PCAxMSkJLyogTENEIFF1aWNrIERpc2FibGUgbWFzayAqLworI2RlZmluZSBMQ0NSMF9QREQJKDB4ZmYgPDwgMTIpCS8qIFBhbGV0dGUgRE1BIHJlcXVlc3QgZGVsYXkgKi8KKyNkZWZpbmUgTENDUjBfUEREX1MJMTIKKyNkZWZpbmUgTENDUjBfQk0JKDEgPDwgMjApIAkvKiBCcmFuY2ggbWFzayAqLworI2RlZmluZSBMQ0NSMF9PVU0JKDEgPDwgMjEpCS8qIE91dHB1dCBGSUZPIHVuZGVycnVuIG1hc2sgKi8KKworI2RlZmluZSBMQ0NSMV9QUEwgICAgICAgRmxkICgxMCwgMCkgICAgICAvKiBQaXhlbHMgUGVyIExpbmUgLSAxICovCisjZGVmaW5lIExDQ1IxX0Rpc1dkdGgoUGl4ZWwpICAgICAgICAgICAgLyogRGlzcGxheSBXaWR0aCBbMS4uODAwIHBpeC5dICAqLyBcCisgICAgICAgICAgICAgICAgICAgICAgICAoKChQaXhlbCkgLSAxKSA8PCBGU2hmdCAoTENDUjFfUFBMKSkKKworI2RlZmluZSBMQ0NSMV9IU1cgICAgICAgRmxkICg2LCAxMCkgICAgIC8qIEhvcml6b250YWwgU3luY2hyb25pemF0aW9uICAgICAqLworI2RlZmluZSBMQ0NSMV9Ib3JTbmNoV2R0aChUcGl4KSAgICAgICAgIC8qIEhvcml6b250YWwgU3luY2hyb25pemF0aW9uICAgICAqLyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcHVsc2UgV2lkdGggWzEuLjY0IFRwaXhdICAgICAgICovIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICgoKFRwaXgpIC0gMSkgPDwgRlNoZnQgKExDQ1IxX0hTVykpCisKKyNkZWZpbmUgTENDUjFfRUxXICAgICAgIEZsZCAoOCwgMTYpICAgICAvKiBFbmQtb2YtTGluZSBwaXhlbCBjbG9jayBXYWl0ICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY291bnQgLSAxIFtUcGl4XSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBMQ0NSMV9FbmRMbkRlbChUcGl4KSAgICAgICAgICAgIC8qICBFbmQtb2YtTGluZSBEZWxheSAgICAgICAgICAgICAgKi8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICBbMS4uMjU2IFRwaXhdICAgICAgICAgICAgICAgICAgKi8gXAorICAgICAgICAgICAgICAgICAgICAgICAgKCgoVHBpeCkgLSAxKSA8PCBGU2hmdCAoTENDUjFfRUxXKSkKKworI2RlZmluZSBMQ0NSMV9CTFcgICAgICAgRmxkICg4LCAyNCkgICAgIC8qIEJlZ2lubmluZy1vZi1MaW5lIHBpeGVsIGNsb2NrICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXYWl0IGNvdW50IC0gMSBbVHBpeF0gICAgICAgICAgICovCisjZGVmaW5lIExDQ1IxX0JlZ0xuRGVsKFRwaXgpICAgICAgICAgICAgLyogIEJlZ2lubmluZy1vZi1MaW5lIERlbGF5ICAgICAgICAqLyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIFsxLi4yNTYgVHBpeF0gICAgICAgICAgICAgICAgICAqLyBcCisgICAgICAgICAgICAgICAgICAgICAgICAoKChUcGl4KSAtIDEpIDw8IEZTaGZ0IChMQ0NSMV9CTFcpKQorCisKKyNkZWZpbmUgTENDUjJfTFBQICAgICAgIEZsZCAoMTAsIDApICAgICAvKiBMaW5lIFBlciBQYW5lbCAtIDEgICAgICAgICAgICAgICovCisjZGVmaW5lIExDQ1IyX0Rpc0hnaHQoTGluZSkgICAgICAgICAgICAgLyogIERpc3BsYXkgSGVpZ2h0IFsxLi4xMDI0IGxpbmVzXSAqLyBcCisgICAgICAgICAgICAgICAgICAgICAgICAoKChMaW5lKSAtIDEpIDw8IEZTaGZ0IChMQ0NSMl9MUFApKQorCisjZGVmaW5lIExDQ1IyX1ZTVyAgICAgICBGbGQgKDYsIDEwKSAgICAgLyogVmVydGljYWwgU3luY2hyb25pemF0aW9uIHB1bHNlICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdpZHRoIC0gMSBbVGxuXSAoTF9GQ0xLKSAgICAgICAgKi8KKyNkZWZpbmUgTENDUjJfVnJ0U25jaFdkdGgoVGxuKSAgICAgICAgICAvKiAgVmVydGljYWwgU3luY2hyb25pemF0aW9uIHB1bHNlICovIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgV2lkdGggWzEuLjY0IFRsbl0gICAgICAgICAgICAgICovIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICgoKFRsbikgLSAxKSA8PCBGU2hmdCAoTENDUjJfVlNXKSkKKworI2RlZmluZSBMQ0NSMl9FRlcgICAgICAgRmxkICg4LCAxNikgICAgIC8qIEVuZC1vZi1GcmFtZSBsaW5lIGNsb2NrIFdhaXQgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb3VudCBbVGxuXSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIExDQ1IyX0VuZEZybURlbChUbG4pICAgICAgICAgICAgLyogIEVuZC1vZi1GcmFtZSBEZWxheSAgICAgICAgICAgICAqLyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIFswLi4yNTUgVGxuXSAgICAgICAgICAgICAgICAgICAqLyBcCisgICAgICAgICAgICAgICAgICAgICAgICAoKFRsbikgPDwgRlNoZnQgKExDQ1IyX0VGVykpCisKKyNkZWZpbmUgTENDUjJfQkZXICAgICAgIEZsZCAoOCwgMjQpICAgICAvKiBCZWdpbm5pbmctb2YtRnJhbWUgbGluZSBjbG9jayAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV2FpdCBjb3VudCBbVGxuXSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBMQ0NSMl9CZWdGcm1EZWwoVGxuKSAgICAgICAgICAgIC8qICBCZWdpbm5pbmctb2YtRnJhbWUgRGVsYXkgICAgICAgKi8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICBbMC4uMjU1IFRsbl0gICAgICAgICAgICAgICAgICAgKi8gXAorICAgICAgICAgICAgICAgICAgICAgICAgKChUbG4pIDw8IEZTaGZ0IChMQ0NSMl9CRlcpKQorCisjaWYgMAorI2RlZmluZSBMQ0NSM19QQ0QJKDB4ZmYpCQkvKiBQaXhlbCBjbG9jayBkaXZpc29yICovCisjZGVmaW5lIExDQ1IzX0FDQgkoMHhmZiA8PCA4KQkvKiBBQyBCaWFzIHBpbiBmcmVxdWVuY3kgKi8KKyNkZWZpbmUgTENDUjNfQUNCX1MJOAorI2VuZGlmCisKKyNkZWZpbmUgTENDUjNfQVBJCSgweGYgPDwgMTYpCS8qIEFDIEJpYXMgcGluIHRyYXNpdGlvbnMgcGVyIGludGVycnVwdCAqLworI2RlZmluZSBMQ0NSM19BUElfUwkxNgorI2RlZmluZSBMQ0NSM19WU1AJKDEgPDwgMjApCS8qIHZlcnRpY2FsIHN5bmMgcG9sYXJpdHkgKi8KKyNkZWZpbmUgTENDUjNfSFNQCSgxIDw8IDIxKQkvKiBob3Jpem9udGFsIHN5bmMgcG9sYXJpdHkgKi8KKyNkZWZpbmUgTENDUjNfUENQCSgxIDw8IDIyKQkvKiBQaXhlbCBDbG9jayBQb2xhcml0eSAoTF9QQ0xLKSAgICovCisjZGVmaW5lIExDQ1IzX1BpeFJzRWRnICAoTENDUjNfUENQKjApICAgLyogIFBpeGVsIGNsb2NrIFJpc2luZy1FZGdlICAgICAgICAqLworI2RlZmluZSBMQ0NSM19QaXhGbEVkZyAgKExDQ1IzX1BDUCoxKSAgIC8qICBQaXhlbCBjbG9jayBGYWxsaW5nLUVkZ2UgICAgICAgKi8KKworI2RlZmluZSBMQ0NSM19PRVAgICAgICAgKDEgPDwgMjMpICAgICAgIC8qIE91dHB1dCBFbmFibGUgUG9sYXJpdHkgKExfQklBUywgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhY3RpdmUgZGlzcGxheSBtb2RlKSAgICAgICAgICAgICovCisjZGVmaW5lIExDQ1IzX091dEVuSCAgICAoTENDUjNfT0VQKjApICAgLyogIE91dHB1dCBFbmFibGUgYWN0aXZlIEhpZ2ggICAgICAqLworI2RlZmluZSBMQ0NSM19PdXRFbkwgICAgKExDQ1IzX09FUCoxKSAgIC8qICBPdXRwdXQgRW5hYmxlIGFjdGl2ZSBMb3cgICAgICAgKi8KKworI2lmIDAKKyNkZWZpbmUgTENDUjNfQlBQCSg3IDw8IDI0KQkvKiBiaXRzIHBlciBwaXhlbCAqLworI2RlZmluZSBMQ0NSM19CUFBfUwkyNAorI2VuZGlmCisjZGVmaW5lIExDQ1IzX0RQQwkoMSA8PCAyNykJLyogZG91YmxlIHBpeGVsIGNsb2NrIG1vZGUgKi8KKworCisjZGVmaW5lIExDQ1IzX1BDRCAgICAgICBGbGQgKDgsIDApICAgICAgLyogUGl4ZWwgQ2xvY2sgRGl2aXNvciAqLworI2RlZmluZSBMQ0NSM19QaXhDbGtEaXYoRGl2KSAgICAgICAgICAgIC8qIFBpeGVsIENsb2NrIERpdmlzb3IgKi8gXAorICAgICAgICAgICAgICAgICAgICAgICAgKCgoRGl2KSA8PCBGU2hmdCAoTENDUjNfUENEKSkpCisKKworI2RlZmluZSBMQ0NSM19CUFAgICAgICAgRmxkICgzLCAyNCkgICAgIC8qIEJpdCBQZXIgUGl4ZWwgKi8KKyNkZWZpbmUgTENDUjNfQnBwKEJwcCkgICAgICAgICAgICAgICAgICAvKiBCaXQgUGVyIFBpeGVsICovIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICgoKEJwcCkgPDwgRlNoZnQgKExDQ1IzX0JQUCkpKQorCisjZGVmaW5lIExDQ1IzX0FDQiAgICAgICBGbGQgKDgsIDgpICAgICAgLyogQUMgQmlhcyAqLworI2RlZmluZSBMQ0NSM19BY2IoQWNiKSAgICAgICAgICAgICAgICAgIC8qIEJBQyBCaWFzICovIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICgoKEFjYikgPDwgRlNoZnQgKExDQ1IzX0FDQikpKQorCisjZGVmaW5lIExDQ1IzX0hvclNuY2hIICAoTENDUjNfSFNQKjApICAgLyogIEhvcml6b250YWwgU3luY2hyb25pemF0aW9uICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICBwdWxzZSBhY3RpdmUgSGlnaCAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTENDUjNfSG9yU25jaEwgIChMQ0NSM19IU1AqMSkgICAvKiAgSG9yaXpvbnRhbCBTeW5jaHJvbml6YXRpb24gICAgICovCisKKyNkZWZpbmUgTENDUjNfVnJ0U25jaEggIChMQ0NSM19WU1AqMCkgICAvKiAgVmVydGljYWwgU3luY2hyb25pemF0aW9uIHB1bHNlICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIGFjdGl2ZSBIaWdoICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBMQ0NSM19WcnRTbmNoTCAgKExDQ1IzX1ZTUCoxKSAgIC8qICBWZXJ0aWNhbCBTeW5jaHJvbml6YXRpb24gcHVsc2UgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgYWN0aXZlIExvdyAgICAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgTENTUl9MREQJKDEgPDwgMCkJLyogTENEIERpc2FibGUgRG9uZSAqLworI2RlZmluZSBMQ1NSX1NPRgkoMSA8PCAxKQkvKiBTdGFydCBvZiBmcmFtZSAqLworI2RlZmluZSBMQ1NSX0JFUgkoMSA8PCAyKQkvKiBCdXMgZXJyb3IgKi8KKyNkZWZpbmUgTENTUl9BQkMJKDEgPDwgMykJLyogQUMgQmlhcyBjb3VudCAqLworI2RlZmluZSBMQ1NSX0lVTAkoMSA8PCA0KQkvKiBpbnB1dCBGSUZPIHVuZGVycnVuIExvd2VyIHBhbmVsICovCisjZGVmaW5lIExDU1JfSVVVCSgxIDw8IDUpCS8qIGlucHV0IEZJRk8gdW5kZXJydW4gVXBwZXIgcGFuZWwgKi8KKyNkZWZpbmUgTENTUl9PVQkJKDEgPDwgNikJLyogb3V0cHV0IEZJRk8gdW5kZXJydW4gKi8KKyNkZWZpbmUgTENTUl9RRAkJKDEgPDwgNykJLyogcXVpY2sgZGlzYWJsZSAqLworI2RlZmluZSBMQ1NSX0VPRgkoMSA8PCA4KQkvKiBlbmQgb2YgZnJhbWUgKi8KKyNkZWZpbmUgTENTUl9CUwkJKDEgPDwgOSkJLyogYnJhbmNoIHN0YXR1cyAqLworI2RlZmluZSBMQ1NSX1NJTlQJKDEgPDwgMTApCS8qIHN1YnNlcXVlbnQgaW50ZXJydXB0ICovCisKKyNkZWZpbmUgTERDTURfUEFMCSgxIDw8IDI2KQkvKiBpbnN0cnVjdHMgRE1BIHRvIGxvYWQgcGFsZXR0ZSBidWZmZXIgKi8KKworI2RlZmluZSBMQ1NSX0xERAkoMSA8PCAwKQkvKiBMQ0QgRGlzYWJsZSBEb25lICovCisjZGVmaW5lIExDU1JfU09GCSgxIDw8IDEpCS8qIFN0YXJ0IG9mIGZyYW1lICovCisjZGVmaW5lIExDU1JfQkVSCSgxIDw8IDIpCS8qIEJ1cyBlcnJvciAqLworI2RlZmluZSBMQ1NSX0FCQwkoMSA8PCAzKQkvKiBBQyBCaWFzIGNvdW50ICovCisjZGVmaW5lIExDU1JfSVVMCSgxIDw8IDQpCS8qIGlucHV0IEZJRk8gdW5kZXJydW4gTG93ZXIgcGFuZWwgKi8KKyNkZWZpbmUgTENTUl9JVVUJKDEgPDwgNSkJLyogaW5wdXQgRklGTyB1bmRlcnJ1biBVcHBlciBwYW5lbCAqLworI2RlZmluZSBMQ1NSX09VCQkoMSA8PCA2KQkvKiBvdXRwdXQgRklGTyB1bmRlcnJ1biAqLworI2RlZmluZSBMQ1NSX1FECQkoMSA8PCA3KQkvKiBxdWljayBkaXNhYmxlICovCisjZGVmaW5lIExDU1JfRU9GCSgxIDw8IDgpCS8qIGVuZCBvZiBmcmFtZSAqLworI2RlZmluZSBMQ1NSX0JTCQkoMSA8PCA5KQkvKiBicmFuY2ggc3RhdHVzICovCisjZGVmaW5lIExDU1JfU0lOVAkoMSA8PCAxMCkJLyogc3Vic2VxdWVudCBpbnRlcnJ1cHQgKi8KKworI2RlZmluZSBMRENNRF9QQUwJKDEgPDwgMjYpCS8qIGluc3RydWN0cyBETUEgdG8gbG9hZCBwYWxldHRlIGJ1ZmZlciAqLworCisvKgorICogTWVtb3J5IGNvbnRyb2xsZXIKKyAqLworCisjZGVmaW5lIE1EQ05GRwkJX19SRUcoMHg0ODAwMDAwMCkgIC8qIFNEUkFNIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMCAqLworI2RlZmluZSBNRFJFRlIJCV9fUkVHKDB4NDgwMDAwMDQpICAvKiBTRFJBTSBSZWZyZXNoIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTVNDMAkJX19SRUcoMHg0ODAwMDAwOCkgIC8qIFN0YXRpYyBNZW1vcnkgQ29udHJvbCBSZWdpc3RlciAwICovCisjZGVmaW5lIE1TQzEJCV9fUkVHKDB4NDgwMDAwMEMpICAvKiBTdGF0aWMgTWVtb3J5IENvbnRyb2wgUmVnaXN0ZXIgMSAqLworI2RlZmluZSBNU0MyCQlfX1JFRygweDQ4MDAwMDEwKSAgLyogU3RhdGljIE1lbW9yeSBDb250cm9sIFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgTUVDUgkJX19SRUcoMHg0ODAwMDAxNCkgIC8qIEV4cGFuc2lvbiBNZW1vcnkgKFBDTUNJQS9Db21wYWN0IEZsYXNoKSBCdXMgQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSBTWExDUgkJX19SRUcoMHg0ODAwMDAxOCkgIC8qIExDUiB2YWx1ZSB0byBiZSB3cml0dGVuIHRvIFNEUkFNLVRpbWluZyBTeW5jaHJvbm91cyBGbGFzaCAqLworI2RlZmluZSBTWENORkcJCV9fUkVHKDB4NDgwMDAwMUMpICAvKiBTeW5jaHJvbm91cyBTdGF0aWMgTWVtb3J5IENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1hNUlMJCV9fUkVHKDB4NDgwMDAwMjQpICAvKiBNUlMgdmFsdWUgdG8gYmUgd3JpdHRlbiB0byBTeW5jaHJvbm91cyBGbGFzaCBvciBTTVJPTSAqLworI2RlZmluZSBNQ01FTTAJCV9fUkVHKDB4NDgwMDAwMjgpICAvKiBDYXJkIGludGVyZmFjZSBDb21tb24gTWVtb3J5IFNwYWNlIFNvY2tldCAwIFRpbWluZyAqLworI2RlZmluZSBNQ01FTTEJCV9fUkVHKDB4NDgwMDAwMkMpICAvKiBDYXJkIGludGVyZmFjZSBDb21tb24gTWVtb3J5IFNwYWNlIFNvY2tldCAxIFRpbWluZyAqLworI2RlZmluZSBNQ0FUVDAJCV9fUkVHKDB4NDgwMDAwMzApICAvKiBDYXJkIGludGVyZmFjZSBBdHRyaWJ1dGUgU3BhY2UgU29ja2V0IDAgVGltaW5nIENvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgTUNBVFQxCQlfX1JFRygweDQ4MDAwMDM0KSAgLyogQ2FyZCBpbnRlcmZhY2UgQXR0cmlidXRlIFNwYWNlIFNvY2tldCAxIFRpbWluZyBDb25maWd1cmF0aW9uICovCisjZGVmaW5lIE1DSU8wCQlfX1JFRygweDQ4MDAwMDM4KSAgLyogQ2FyZCBpbnRlcmZhY2UgSS9PIFNwYWNlIFNvY2tldCAwIFRpbWluZyBDb25maWd1cmF0aW9uICovCisjZGVmaW5lIE1DSU8xCQlfX1JFRygweDQ4MDAwMDNDKSAgLyogQ2FyZCBpbnRlcmZhY2UgSS9PIFNwYWNlIFNvY2tldCAxIFRpbWluZyBDb25maWd1cmF0aW9uICovCisjZGVmaW5lIE1ETVJTCQlfX1JFRygweDQ4MDAwMDQwKSAgLyogTVJTIHZhbHVlIHRvIGJlIHdyaXR0ZW4gdG8gU0RSQU0gKi8KKyNkZWZpbmUgQk9PVF9ERUYJX19SRUcoMHg0ODAwMDA0NCkgIC8qIFJlYWQtT25seSBCb290LVRpbWUgUmVnaXN0ZXIuIENvbnRhaW5zIEJPT1RfU0VMIGFuZCBQS0dfU0VMICovCisKKy8qCisgKiBNb3JlIGhhbmR5IG1hY3JvcyBmb3IgUENNQ0lBCisgKgorICogQXJnIGlzIHNvY2tldCBudW1iZXIKKyAqLworI2RlZmluZSBNQ01FTShzKQlfX1JFRzIoMHg0ODAwMDAyOCwgKHMpPDwyICkgIC8qIENhcmQgaW50ZXJmYWNlIENvbW1vbiBNZW1vcnkgU3BhY2UgU29ja2V0IHMgVGltaW5nICovCisjZGVmaW5lIE1DQVRUKHMpCV9fUkVHMigweDQ4MDAwMDMwLCAocyk8PDIgKSAgLyogQ2FyZCBpbnRlcmZhY2UgQXR0cmlidXRlIFNwYWNlIFNvY2tldCBzIFRpbWluZyBDb25maWd1cmF0aW9uICovCisjZGVmaW5lIE1DSU8ocykJCV9fUkVHMigweDQ4MDAwMDM4LCAocyk8PDIgKSAgLyogQ2FyZCBpbnRlcmZhY2UgSS9PIFNwYWNlIFNvY2tldCBzIFRpbWluZyBDb25maWd1cmF0aW9uICovCisKKy8qIE1FQ1IgcmVnaXN0ZXIgZGVmaW5lcyAqLworI2RlZmluZSBNRUNSX05PUwkoMSA8PCAwKQkvKiBOdW1iZXIgT2YgU29ja2V0czogMCAtPiAxIHNvY2ssIDEgLT4gMiBzb2NrICovCisjZGVmaW5lIE1FQ1JfQ0lUCSgxIDw8IDEpCS8qIENhcmQgSXMgVGhlcmU6IDAgLT4gbm8gY2FyZCwgMSAtPiBjYXJkIGluc2VydGVkICovCisKKyNkZWZpbmUgTURSRUZSX0syRlJFRQkoMSA8PCAyNSkJLyogU0RSQU0gRnJlZS1SdW5uaW5nIENvbnRyb2wgKi8KKyNkZWZpbmUgTURSRUZSX0sxRlJFRQkoMSA8PCAyNCkJLyogU0RSQU0gRnJlZS1SdW5uaW5nIENvbnRyb2wgKi8KKyNkZWZpbmUgTURSRUZSX0swRlJFRQkoMSA8PCAyMykJLyogU0RSQU0gRnJlZS1SdW5uaW5nIENvbnRyb2wgKi8KKyNkZWZpbmUgTURSRUZSX1NMRlJTSAkoMSA8PCAyMikJLyogU0RSQU0gU2VsZi1SZWZyZXNoIENvbnRyb2wvU3RhdHVzICovCisjZGVmaW5lIE1EUkVGUl9BUEQJKDEgPDwgMjApCS8qIFNEUkFNL1NTUkFNIEF1dG8tUG93ZXItRG93biBFbmFibGUgKi8KKyNkZWZpbmUgTURSRUZSX0syREIyCSgxIDw8IDE5KQkvKiBTRENMSzIgRGl2aWRlIGJ5IDIgQ29udHJvbC9TdGF0dXMgKi8KKyNkZWZpbmUgTURSRUZSX0syUlVOCSgxIDw8IDE4KQkvKiBTRENMSzIgUnVuIENvbnRyb2wvU3RhdHVzICovCisjZGVmaW5lIE1EUkVGUl9LMURCMgkoMSA8PCAxNykJLyogU0RDTEsxIERpdmlkZSBieSAyIENvbnRyb2wvU3RhdHVzICovCisjZGVmaW5lIE1EUkVGUl9LMVJVTgkoMSA8PCAxNikJLyogU0RDTEsxIFJ1biBDb250cm9sL1N0YXR1cyAqLworI2RlZmluZSBNRFJFRlJfRTFQSU4JKDEgPDwgMTUpCS8qIFNEQ0tFMSBMZXZlbCBDb250cm9sL1N0YXR1cyAqLworI2RlZmluZSBNRFJFRlJfSzBEQjIJKDEgPDwgMTQpCS8qIFNEQ0xLMCBEaXZpZGUgYnkgMiBDb250cm9sL1N0YXR1cyAqLworI2RlZmluZSBNRFJFRlJfSzBSVU4JKDEgPDwgMTMpCS8qIFNEQ0xLMCBSdW4gQ29udHJvbC9TdGF0dXMgKi8KKyNkZWZpbmUgTURSRUZSX0UwUElOCSgxIDw8IDEyKQkvKiBTRENLRTAgTGV2ZWwgQ29udHJvbC9TdGF0dXMgKi8KKworCisjaWZkZWYgQ09ORklHX1BYQTI3eAorCisvKgorICogS2V5cGFkCisgKi8KKyNkZWZpbmUgS1BDICAgICAgICAgICAgIF9fUkVHKDB4NDE1MDAwMDApIC8qIEtleXBhZCBJbnRlcmZhY2UgQ29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBLUERLICAgICAgICAgICAgX19SRUcoMHg0MTUwMDAwOCkgLyogS2V5cGFkIEludGVyZmFjZSBEaXJlY3QgS2V5IHJlZ2lzdGVyICovCisjZGVmaW5lIEtQUkVDICAgICAgICAgICBfX1JFRygweDQxNTAwMDEwKSAvKiBLZXlwYWQgSW50ZXJmYWNlIFJvdGFyeSBFbmNvZGVyIHJlZ2lzdGVyICovCisjZGVmaW5lIEtQTUsgICAgICAgICAgICBfX1JFRygweDQxNTAwMDE4KSAvKiBLZXlwYWQgSW50ZXJmYWNlIE1hdHJpeCBLZXkgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgS1BBUyAgICAgICAgICAgIF9fUkVHKDB4NDE1MDAwMjApIC8qIEtleXBhZCBJbnRlcmZhY2UgQXV0b21hdGljIFNjYW4gcmVnaXN0ZXIgKi8KKyNkZWZpbmUgS1BBU01LUDAgICAgICAgIF9fUkVHKDB4NDE1MDAwMjgpIC8qIEtleXBhZCBJbnRlcmZhY2UgQXV0b21hdGljIFNjYW4gTXVsdGlwbGUgS2V5IFByZXNzZXIgcmVnaXN0ZXIgMCAqLworI2RlZmluZSBLUEFTTUtQMSAgICAgICAgX19SRUcoMHg0MTUwMDAzMCkgLyogS2V5cGFkIEludGVyZmFjZSBBdXRvbWF0aWMgU2NhbiBNdWx0aXBsZSBLZXkgUHJlc3NlciByZWdpc3RlciAxICovCisjZGVmaW5lIEtQQVNNS1AyICAgICAgICBfX1JFRygweDQxNTAwMDM4KSAvKiBLZXlwYWQgSW50ZXJmYWNlIEF1dG9tYXRpYyBTY2FuIE11bHRpcGxlIEtleSBQcmVzc2VyIHJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgS1BBU01LUDMgICAgICAgIF9fUkVHKDB4NDE1MDAwNDApIC8qIEtleXBhZCBJbnRlcmZhY2UgQXV0b21hdGljIFNjYW4gTXVsdGlwbGUgS2V5IFByZXNzZXIgcmVnaXN0ZXIgMyAqLworI2RlZmluZSBLUEtESSAgICAgICAgICAgX19SRUcoMHg0MTUwMDA0OCkgLyogS2V5cGFkIEludGVyZmFjZSBLZXkgRGVib3VuY2UgSW50ZXJ2YWwgcmVnaXN0ZXIgKi8KKworI2RlZmluZSBLUENfQVMgICAgICAgICAgKDB4MSA8PCAzMCkgIC8qIEF1dG9tYXRpYyBTY2FuIGJpdCAqLworI2RlZmluZSBLUENfQVNBQ1QgICAgICAgKDB4MSA8PCAyOSkgIC8qIEF1dG9tYXRpYyBTY2FuIG9uIEFjdGl2aXR5ICovCisjZGVmaW5lIEtQQ19NSSAgICAgICAgICAoMHgxIDw8IDIyKSAgLyogTWF0cml4IGludGVycnVwdCBiaXQgKi8KKyNkZWZpbmUgS1BDX0lNS1AgICAgICAgICgweDEgPDwgMjEpICAvKiBJZ25vcmUgTXVsdGlwbGUgS2V5IFByZXNzICovCisjZGVmaW5lIEtQQ19NUzcgICAgICAgICAoMHgxIDw8IDIwKSAgLyogTWF0cml4IHNjYW4gbGluZSA3ICovCisjZGVmaW5lIEtQQ19NUzYgICAgICAgICAoMHgxIDw8IDE5KSAgLyogTWF0cml4IHNjYW4gbGluZSA2ICovCisjZGVmaW5lIEtQQ19NUzUgICAgICAgICAoMHgxIDw8IDE4KSAgLyogTWF0cml4IHNjYW4gbGluZSA1ICovCisjZGVmaW5lIEtQQ19NUzQgICAgICAgICAoMHgxIDw8IDE3KSAgLyogTWF0cml4IHNjYW4gbGluZSA0ICovCisjZGVmaW5lIEtQQ19NUzMgICAgICAgICAoMHgxIDw8IDE2KSAgLyogTWF0cml4IHNjYW4gbGluZSAzICovCisjZGVmaW5lIEtQQ19NUzIgICAgICAgICAoMHgxIDw8IDE1KSAgLyogTWF0cml4IHNjYW4gbGluZSAyICovCisjZGVmaW5lIEtQQ19NUzEgICAgICAgICAoMHgxIDw8IDE0KSAgLyogTWF0cml4IHNjYW4gbGluZSAxICovCisjZGVmaW5lIEtQQ19NUzAgICAgICAgICAoMHgxIDw8IDEzKSAgLyogTWF0cml4IHNjYW4gbGluZSAwICovCisjZGVmaW5lIEtQQ19NU19BTEwgICAgICAoS1BDX01TMCB8IEtQQ19NUzEgfCBLUENfTVMyIHwgS1BDX01TMyB8IEtQQ19NUzQgfCBLUENfTVM1IHwgS1BDX01TNiB8IEtQQ19NUzcpCisjZGVmaW5lIEtQQ19NRSAgICAgICAgICAoMHgxIDw8IDEyKSAgLyogTWF0cml4IEtleXBhZCBFbmFibGUgKi8KKyNkZWZpbmUgS1BDX01JRSAgICAgICAgICgweDEgPDwgMTEpICAvKiBNYXRyaXggSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBLUENfREtfREVCX1NFTAkoMHgxIDw8ICA5KSAgLyogRGlyZWN0IEtleXBhZCBEZWJvdW5jZSBTZWxlY3QgKi8KKyNkZWZpbmUgS1BDX0RJICAgICAgICAgICgweDEgPDwgIDUpICAvKiBEaXJlY3Qga2V5IGludGVycnVwdCBiaXQgKi8KKyNkZWZpbmUgS1BDX1JFX1pFUk9fREVCICgweDEgPDwgIDQpICAvKiBSb3RhcnkgRW5jb2RlciBaZXJvIERlYm91bmNlICovCisjZGVmaW5lIEtQQ19SRUUxICAgICAgICAoMHgxIDw8ICAzKSAgLyogUm90YXJ5IEVuY29kZXIxIEVuYWJsZSAqLworI2RlZmluZSBLUENfUkVFMCAgICAgICAgKDB4MSA8PCAgMikgIC8qIFJvdGFyeSBFbmNvZGVyMCBFbmFibGUgKi8KKyNkZWZpbmUgS1BDX0RFICAgICAgICAgICgweDEgPDwgIDEpICAvKiBEaXJlY3QgS2V5cGFkIEVuYWJsZSAqLworI2RlZmluZSBLUENfRElFICAgICAgICAgKDB4MSA8PCAgMCkgIC8qIERpcmVjdCBLZXlwYWQgaW50ZXJydXB0IEVuYWJsZSAqLworCisjZGVmaW5lIEtQREtfREtQICAgICAgICAoMHgxIDw8IDMxKQorI2RlZmluZSBLUERLX0RLNyAgICAgICAgKDB4MSA8PCAgNykKKyNkZWZpbmUgS1BES19ESzYgICAgICAgICgweDEgPDwgIDYpCisjZGVmaW5lIEtQREtfREs1ICAgICAgICAoMHgxIDw8ICA1KQorI2RlZmluZSBLUERLX0RLNCAgICAgICAgKDB4MSA8PCAgNCkKKyNkZWZpbmUgS1BES19ESzMgICAgICAgICgweDEgPDwgIDMpCisjZGVmaW5lIEtQREtfREsyICAgICAgICAoMHgxIDw8ICAyKQorI2RlZmluZSBLUERLX0RLMSAgICAgICAgKDB4MSA8PCAgMSkKKyNkZWZpbmUgS1BES19ESzAgICAgICAgICgweDEgPDwgIDApCisKKyNkZWZpbmUgS1BSRUNfT0YxICAgICAgICgweDEgPDwgMzEpCisjZGVmaW5lIGtQUkVDX1VGMSAgICAgICAoMHgxIDw8IDMwKQorI2RlZmluZSBLUFJFQ19PRjAgICAgICAgKDB4MSA8PCAxNSkKKyNkZWZpbmUgS1BSRUNfVUYwICAgICAgICgweDEgPDwgMTQpCisKKyNkZWZpbmUgS1BNS19NS1AgICAgICAgICgweDEgPDwgMzEpCisjZGVmaW5lIEtQQVNfU08gICAgICAgICAoMHgxIDw8IDMxKQorI2RlZmluZSBLUEFTTUtQeF9TTyAgICAgKDB4MSA8PCAzMSkKKworLyoKKyAqIFVIQzogVVNCIEhvc3QgQ29udHJvbGxlciAoT0hDSS1saWtlKSByZWdpc3RlciBkZWZpbml0aW9ucworICovCisjZGVmaW5lIFVIQ19CQVNFX1BIWVMJKDB4NEMwMDAwMDApCisjZGVmaW5lIFVIQ1JFVgkJX19SRUcoMHg0QzAwMDAwMCkgLyogVUhDIEhDSSBTcGVjIFJldmlzaW9uICovCisjZGVmaW5lIFVIQ0hDT04JCV9fUkVHKDB4NEMwMDAwMDQpIC8qIFVIQyBIb3N0IENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVUhDQ09NUwkJX19SRUcoMHg0QzAwMDAwOCkgLyogVUhDIENvbW1hbmQgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIFVIQ0lOVFMJCV9fUkVHKDB4NEMwMDAwMEMpIC8qIFVIQyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIFVIQ0lOVEUJCV9fUkVHKDB4NEMwMDAwMTApIC8qIFVIQyBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIFVIQ0lOVEQJCV9fUkVHKDB4NEMwMDAwMTQpIC8qIFVIQyBJbnRlcnJ1cHQgRGlzYWJsZSAqLworI2RlZmluZSBVSENIQ0NBCQlfX1JFRygweDRDMDAwMDE4KSAvKiBVSEMgSG9zdCBDb250cm9sbGVyIENvbW0uIEFyZWEgKi8KKyNkZWZpbmUgVUhDUENFRAkJX19SRUcoMHg0QzAwMDAxQykgLyogVUhDIFBlcmlvZCBDdXJyZW50IEVuZHB0IERlc2NyICovCisjZGVmaW5lIFVIQ0NIRUQJCV9fUkVHKDB4NEMwMDAwMjApIC8qIFVIQyBDb250cm9sIEhlYWQgRW5kcHQgRGVzY3IgKi8KKyNkZWZpbmUgVUhDQ0NFRAkJX19SRUcoMHg0QzAwMDAyNCkgLyogVUhDIENvbnRyb2wgQ3VycmVudCBFbmRwdCBEZXNjciAqLworI2RlZmluZSBVSENCSEVECQlfX1JFRygweDRDMDAwMDI4KSAvKiBVSEMgQnVsayBIZWFkIEVuZHB0IERlc2NyICovCisjZGVmaW5lIFVIQ0JDRUQJCV9fUkVHKDB4NEMwMDAwMkMpIC8qIFVIQyBCdWxrIEN1cnJlbnQgRW5kcHQgRGVzY3IgKi8KKyNkZWZpbmUgVUhDREhFQUQJX19SRUcoMHg0QzAwMDAzMCkgLyogVUhDIERvbmUgSGVhZCAqLworI2RlZmluZSBVSENGTUkJCV9fUkVHKDB4NEMwMDAwMzQpIC8qIFVIQyBGcmFtZSBJbnRlcnZhbCAqLworI2RlZmluZSBVSENGTVIJCV9fUkVHKDB4NEMwMDAwMzgpIC8qIFVIQyBGcmFtZSBSZW1haW5pbmcgKi8KKyNkZWZpbmUgVUhDRk1OCQlfX1JFRygweDRDMDAwMDNDKSAvKiBVSEMgRnJhbWUgTnVtYmVyICovCisjZGVmaW5lIFVIQ1BFUlMJCV9fUkVHKDB4NEMwMDAwNDApIC8qIFVIQyBQZXJpb2RpYyBTdGFydCAqLworI2RlZmluZSBVSENMUwkJX19SRUcoMHg0QzAwMDA0NCkgLyogVUhDIExvdyBTcGVlZCBUaHJlc2hvbGQgKi8KKyNkZWZpbmUgVUhDUkhEQQkJX19SRUcoMHg0QzAwMDA0OCkgLyogVUhDIFJvb3QgSHViIERlc2NyaXB0b3IgQSAqLworI2RlZmluZSBVSENSSERCCQlfX1JFRygweDRDMDAwMDRDKSAvKiBVSEMgUm9vdCBIdWIgRGVzY3JpcHRvciBCICovCisjZGVmaW5lIFVIQ1JIUwkJX19SRUcoMHg0QzAwMDA1MCkgLyogVUhDIFJvb3QgSHViIFN0YXR1cyAqLworI2RlZmluZSBVSENSSFBTMQlfX1JFRygweDRDMDAwMDU0KSAvKiBVSEMgUm9vdCBIdWIgUG9ydCAxIFN0YXR1cyAqLworI2RlZmluZSBVSENSSFBTMglfX1JFRygweDRDMDAwMDU4KSAvKiBVSEMgUm9vdCBIdWIgUG9ydCAyIFN0YXR1cyAqLworI2RlZmluZSBVSENSSFBTMwlfX1JFRygweDRDMDAwMDVDKSAvKiBVSEMgUm9vdCBIdWIgUG9ydCAzIFN0YXR1cyAqLworCisjZGVmaW5lIFVIQ1NUQVQJCV9fUkVHKDB4NEMwMDAwNjApIC8qIFVIQyBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVUhDU1RBVF9VUFMzCSgxIDw8IDE2KQkvKiBVU0IgUG93ZXIgU2Vuc2UgUG9ydDMgKi8KKyNkZWZpbmUgVUhDU1RBVF9TQk1BSQkoMSA8PCAxNSkJLyogU3lzdGVtIEJ1cyBNYXN0ZXIgQWJvcnQgSW50ZXJydXB0Ki8KKyNkZWZpbmUgVUhDU1RBVF9TQlRBSQkoMSA8PCAxNCkJLyogU3lzdGVtIEJ1cyBUYXJnZXQgQWJvcnQgSW50ZXJydXB0Ki8KKyNkZWZpbmUgVUhDU1RBVF9VUFJJCSgxIDw8IDEzKQkvKiBVU0IgUG9ydCBSZXN1bWUgSW50ZXJydXB0ICovCisjZGVmaW5lIFVIQ1NUQVRfVVBTMgkoMSA8PCAxMikJLyogVVNCIFBvd2VyIFNlbnNlIFBvcnQgMiAqLworI2RlZmluZSBVSENTVEFUX1VQUzEJKDEgPDwgMTEpCS8qIFVTQiBQb3dlciBTZW5zZSBQb3J0IDEgKi8KKyNkZWZpbmUgVUhDU1RBVF9IVEEJKDEgPDwgMTApCS8qIEhDSSBUYXJnZXQgQWJvcnQgKi8KKyNkZWZpbmUgVUhDU1RBVF9IQkEJKDEgPDwgOCkJLyogSENJIEJ1ZmZlciBBY3RpdmUgKi8KKyNkZWZpbmUgVUhDU1RBVF9SV1VFCSgxIDw8IDcpCS8qIEhDSSBSZW1vdGUgV2FrZSBVcCBFdmVudCAqLworCisjZGVmaW5lIFVIQ0hSICAgICAgICAgICBfX1JFRygweDRDMDAwMDY0KSAvKiBVSEMgUmVzZXQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVUhDSFJfU1NFUDMJKDEgPDwgMTEpCS8qIFNsZWVwIFN0YW5kYnkgRW5hYmxlIGZvciBQb3J0MyAqLworI2RlZmluZSBVSENIUl9TU0VQMgkoMSA8PCAxMCkJLyogU2xlZXAgU3RhbmRieSBFbmFibGUgZm9yIFBvcnQyICovCisjZGVmaW5lIFVIQ0hSX1NTRVAxCSgxIDw8IDkpCS8qIFNsZWVwIFN0YW5kYnkgRW5hYmxlIGZvciBQb3J0MSAqLworI2RlZmluZSBVSENIUl9QQ1BMCSgxIDw8IDcpCS8qIFBvd2VyIGNvbnRyb2wgcG9sYXJpdHkgbG93ICovCisjZGVmaW5lIFVIQ0hSX1BTUEwJKDEgPDwgNikJLyogUG93ZXIgc2Vuc2UgcG9sYXJpdHkgbG93ICovCisjZGVmaW5lIFVIQ0hSX1NTRQkoMSA8PCA1KQkvKiBTbGVlcCBTdGFuZGJ5IEVuYWJsZSAqLworI2RlZmluZSBVSENIUl9VSVQJKDEgPDwgNCkJLyogVVNCIEludGVycnVwdCBUZXN0ICovCisjZGVmaW5lIFVIQ0hSX1NTREMJKDEgPDwgMykJLyogU2ltdWxhdGlvbiBTY2FsZSBEb3duIENsb2NrICovCisjZGVmaW5lIFVIQ0hSX0NHUgkoMSA8PCAyKQkvKiBDbG9jayBHZW5lcmF0aW9uIFJlc2V0ICovCisjZGVmaW5lIFVIQ0hSX0ZIUgkoMSA8PCAxKQkvKiBGb3JjZSBIb3N0IENvbnRyb2xsZXIgUmVzZXQgKi8KKyNkZWZpbmUgVUhDSFJfRlNCSVIJKDEgPDwgMCkJLyogRm9yY2UgU3lzdGVtIEJ1cyBJZmFjZSBSZXNldCAqLworCisjZGVmaW5lIFVIQ0hJRSAgICAgICAgICBfX1JFRygweDRDMDAwMDY4KSAvKiBVSEMgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciovCisjZGVmaW5lIFVIQ0hJRV9VUFMzSUUJKDEgPDwgMTQpCS8qIFBvd2VyIFNlbnNlIFBvcnQzIEludEVuICovCisjZGVmaW5lIFVIQ0hJRV9VUFJJRQkoMSA8PCAxMykJLyogUG9ydCBSZXN1bWUgSW50RW4gKi8KKyNkZWZpbmUgVUhDSElFX1VQUzJJRQkoMSA8PCAxMikJLyogUG93ZXIgU2Vuc2UgUG9ydDIgSW50RW4gKi8KKyNkZWZpbmUgVUhDSElFX1VQUzFJRQkoMSA8PCAxMSkJLyogUG93ZXIgU2Vuc2UgUG9ydDEgSW50RW4gKi8KKyNkZWZpbmUgVUhDSElFX1RBSUUJKDEgPDwgMTApCS8qIEhDSSBJbnRlcmZhY2UgVHJhbnNmZXIgQWJvcnQKKwkJCQkJICAgSW50ZXJydXB0IEVuYWJsZSovCisjZGVmaW5lIFVIQ0hJRV9IQkFJRQkoMSA8PCA4KQkvKiBIQ0kgQnVmZmVyIEFjdGl2ZSBJbnRFbiAqLworI2RlZmluZSBVSENISUVfUldJRQkoMSA8PCA3KQkvKiBSZW1vdGUgV2FrZS11cCBJbnRFbiAqLworCisjZGVmaW5lIFVIQ0hJVCAgICAgICAgICBfX1JFRygweDRDMDAwMDZDKSAvKiBVSEMgSW50ZXJydXB0IFRlc3QgcmVnaXN0ZXIgKi8KKworLyogQ2FtZXJhIEludGVyZmFjZSAqLworI2RlZmluZSBDSUNSMAkJX19SRUcoMHg1MDAwMDAwMCkKKyNkZWZpbmUgQ0lDUjEJCV9fUkVHKDB4NTAwMDAwMDQpCisjZGVmaW5lIENJQ1IyCQlfX1JFRygweDUwMDAwMDA4KQorI2RlZmluZSBDSUNSMwkJX19SRUcoMHg1MDAwMDAwQykKKyNkZWZpbmUgQ0lDUjQJCV9fUkVHKDB4NTAwMDAwMTApCisjZGVmaW5lIENJU1IJCV9fUkVHKDB4NTAwMDAwMTQpCisjZGVmaW5lIENJRlIJCV9fUkVHKDB4NTAwMDAwMTgpCisjZGVmaW5lIENJVE9SCQlfX1JFRygweDUwMDAwMDFDKQorI2RlZmluZSBDSUJSMAkJX19SRUcoMHg1MDAwMDAyOCkKKyNkZWZpbmUgQ0lCUjEJCV9fUkVHKDB4NTAwMDAwMzApCisjZGVmaW5lIENJQlIyCQlfX1JFRygweDUwMDAwMDM4KQorCisjZGVmaW5lIENJQ1IwX0RNQUVOCSgxIDw8IDMxKQkvKiBETUEgcmVxdWVzdCBlbmFibGUgKi8KKyNkZWZpbmUgQ0lDUjBfUEFSX0VOCSgxIDw8IDMwKQkvKiBQYXJpdHkgZW5hYmxlICovCisjZGVmaW5lIENJQ1IwX1NMX0NBUF9FTgkoMSA8PCAyOSkJLyogQ2FwdHVyZSBlbmFibGUgZm9yIHNsYXZlIG1vZGUgKi8KKyNkZWZpbmUgQ0lDUjBfRU5CCSgxIDw8IDI4KQkvKiBDYW1lcmEgaW50ZXJmYWNlIGVuYWJsZSAqLworI2RlZmluZSBDSUNSMF9ESVMJKDEgPDwgMjcpCS8qIENhbWVyYSBpbnRlcmZhY2UgZGlzYWJsZSAqLworI2RlZmluZSBDSUNSMF9TSU0JKDB4NyA8PCAyNCkJLyogU2Vuc29yIGludGVyZmFjZSBtb2RlIG1hc2sgKi8KKyNkZWZpbmUgQ0lDUjBfVE9NCSgxIDw8IDkpCS8qIFRpbWUtb3V0IG1hc2sgKi8KKyNkZWZpbmUgQ0lDUjBfUkRBVk0JKDEgPDwgOCkJLyogUmVjZWl2ZS1kYXRhLWF2YWlsYWJsZSBtYXNrICovCisjZGVmaW5lIENJQ1IwX0ZFTQkoMSA8PCA3KQkvKiBGSUZPLWVtcHR5IG1hc2sgKi8KKyNkZWZpbmUgQ0lDUjBfRU9MTQkoMSA8PCA2KQkvKiBFbmQtb2YtbGluZSBtYXNrICovCisjZGVmaW5lIENJQ1IwX1BFUlJNCSgxIDw8IDUpCS8qIFBhcml0eS1lcnJvciBtYXNrICovCisjZGVmaW5lIENJQ1IwX1FETQkoMSA8PCA0KQkvKiBRdWljay1kaXNhYmxlIG1hc2sgKi8KKyNkZWZpbmUgQ0lDUjBfQ0RNCSgxIDw8IDMpCS8qIERpc2FibGUtZG9uZSBtYXNrICovCisjZGVmaW5lIENJQ1IwX1NPRk0JKDEgPDwgMikJLyogU3RhcnQtb2YtZnJhbWUgbWFzayAqLworI2RlZmluZSBDSUNSMF9FT0ZNCSgxIDw8IDEpCS8qIEVuZC1vZi1mcmFtZSBtYXNrICovCisjZGVmaW5lIENJQ1IwX0ZPTQkoMSA8PCAwKQkvKiBGSUZPLW92ZXJydW4gbWFzayAqLworCisjZGVmaW5lIENJQ1IxX1RCSVQJKDEgPDwgMzEpCS8qIFRyYW5zcGFyZW5jeSBiaXQgKi8KKyNkZWZpbmUgQ0lDUjFfUkdCVF9DT05WCSgweDMgPDwgMzApCS8qIFJHQlQgY29udmVyc2lvbiBtYXNrICovCisjZGVmaW5lIENJQ1IxX1BQTAkoMHgzZiA8PCAxNSkJLyogUGl4ZWxzIHBlciBsaW5lIG1hc2sgKi8KKyNkZWZpbmUgQ0lDUjFfUkdCX0NPTlYJKDB4NyA8PCAxMikJLyogUkdCIGNvbnZlcnNpb24gbWFzayAqLworI2RlZmluZSBDSUNSMV9SR0JfRgkoMSA8PCAxMSkJLyogUkdCIGZvcm1hdCAqLworI2RlZmluZSBDSUNSMV9ZQ0JDUl9GCSgxIDw8IDEwKQkvKiBZQ2JDciBmb3JtYXQgKi8KKyNkZWZpbmUgQ0lDUjFfUkdCX0JQUAkoMHg3IDw8IDcpCS8qIFJHQiBiaXMgcGVyIHBpeGVsIG1hc2sgKi8KKyNkZWZpbmUgQ0lDUjFfUkFXX0JQUAkoMHgzIDw8IDUpCS8qIFJhdyBiaXMgcGVyIHBpeGVsIG1hc2sgKi8KKyNkZWZpbmUgQ0lDUjFfQ09MT1JfU1AJKDB4MyA8PCAzKQkvKiBDb2xvciBzcGFjZSBtYXNrICovCisjZGVmaW5lIENJQ1IxX0RXCSgweDcgPDwgMCkJLyogRGF0YSB3aWR0aCBtYXNrICovCisKKyNkZWZpbmUgQ0lDUjJfQkxXCSgweGZmIDw8IDI0KQkvKiBCZWdpbm5pbmctb2YtbGluZSBwaXhlbCBjbG9jaworCQkJCQkgICB3YWl0IGNvdW50IG1hc2sgKi8KKyNkZWZpbmUgQ0lDUjJfRUxXCSgweGZmIDw8IDE2KQkvKiBFbmQtb2YtbGluZSBwaXhlbCBjbG9jaworCQkJCQkgICB3YWl0IGNvdW50IG1hc2sgKi8KKyNkZWZpbmUgQ0lDUjJfSFNXCSgweDNmIDw8IDEwKQkvKiBIb3Jpem9udGFsIHN5bmMgcHVsc2Ugd2lkdGggbWFzayAqLworI2RlZmluZSBDSUNSMl9CRlBXCSgweDNmIDw8IDMpCS8qIEJlZ2lubmluZy1vZi1mcmFtZSBwaXhlbCBjbG9jaworCQkJCQkgICB3YWl0IGNvdW50IG1hc2sgKi8KKyNkZWZpbmUgQ0lDUjJfRlNXCSgweDcgPDwgMCkJLyogRnJhbWUgc3RhYmlsaXphdGlvbgorCQkJCQkgICB3YWl0IGNvdW50IG1hc2sgKi8KKworI2RlZmluZSBDSUNSM19CRlcJKDB4ZmYgPDwgMjQpCS8qIEJlZ2lubmluZy1vZi1mcmFtZSBsaW5lIGNsb2NrCisJCQkJCSAgIHdhaXQgY291bnQgbWFzayAqLworI2RlZmluZSBDSUNSM19FRlcJKDB4ZmYgPDwgMTYpCS8qIEVuZC1vZi1mcmFtZSBsaW5lIGNsb2NrCisJCQkJCSAgIHdhaXQgY291bnQgbWFzayAqLworI2RlZmluZSBDSUNSM19WU1cJKDB4M2YgPDwgMTApCS8qIFZlcnRpY2FsIHN5bmMgcHVsc2Ugd2lkdGggbWFzayAqLworI2RlZmluZSBDSUNSM19CRlBXCSgweDNmIDw8IDMpCS8qIEJlZ2lubmluZy1vZi1mcmFtZSBwaXhlbCBjbG9jaworCQkJCQkgICB3YWl0IGNvdW50IG1hc2sgKi8KKyNkZWZpbmUgQ0lDUjNfTFBGCSgweDNmZiA8PCAwKQkvKiBMaW5lcyBwZXIgZnJhbWUgbWFzayAqLworCisjZGVmaW5lIENJQ1I0X01DTEtfRExZCSgweDMgPDwgMjQpCS8qIE1DTEsgRGF0YSBDYXB0dXJlIERlbGF5IG1hc2sgKi8KKyNkZWZpbmUgQ0lDUjRfUENMS19FTgkoMSA8PCAyMykJLyogUGl4ZWwgY2xvY2sgZW5hYmxlICovCisjZGVmaW5lIENJQ1I0X1BDUAkoMSA8PCAyMikJLyogUGl4ZWwgY2xvY2sgcG9sYXJpdHkgKi8KKyNkZWZpbmUgQ0lDUjRfSFNQCSgxIDw8IDIxKQkvKiBIb3Jpem9udGFsIHN5bmMgcG9sYXJpdHkgKi8KKyNkZWZpbmUgQ0lDUjRfVlNQCSgxIDw8IDIwKQkvKiBWZXJ0aWNhbCBzeW5jIHBvbGFyaXR5ICovCisjZGVmaW5lIENJQ1I0X01DTEtfRU4JKDEgPDwgMTkpCS8qIE1DTEsgZW5hYmxlICovCisjZGVmaW5lIENJQ1I0X0ZSX1JBVEUJKDB4NyA8PCA4KQkvKiBGcmFtZSByYXRlIG1hc2sgKi8KKyNkZWZpbmUgQ0lDUjRfRElWCSgweGZmIDw8IDApCS8qIENsb2NrIGRpdmlzb3IgbWFzayAqLworCisjZGVmaW5lIENJU1JfRlRPCSgxIDw8IDE1KQkvKiBGSUZPIHRpbWUtb3V0ICovCisjZGVmaW5lIENJU1JfUkRBVl8yCSgxIDw8IDE0KQkvKiBDaGFubmVsIDIgcmVjZWl2ZSBkYXRhIGF2YWlsYWJsZSAqLworI2RlZmluZSBDSVNSX1JEQVZfMQkoMSA8PCAxMykJLyogQ2hhbm5lbCAxIHJlY2VpdmUgZGF0YSBhdmFpbGFibGUgKi8KKyNkZWZpbmUgQ0lTUl9SREFWXzAJKDEgPDwgMTIpCS8qIENoYW5uZWwgMCByZWNlaXZlIGRhdGEgYXZhaWxhYmxlICovCisjZGVmaW5lIENJU1JfRkVNUFRZXzIJKDEgPDwgMTEpCS8qIENoYW5uZWwgMiBGSUZPIGVtcHR5ICovCisjZGVmaW5lIENJU1JfRkVNUFRZXzEJKDEgPDwgMTApCS8qIENoYW5uZWwgMSBGSUZPIGVtcHR5ICovCisjZGVmaW5lIENJU1JfRkVNUFRZXzAJKDEgPDwgOSkJLyogQ2hhbm5lbCAwIEZJRk8gZW1wdHkgKi8KKyNkZWZpbmUgQ0lTUl9FT0wJKDEgPDwgOCkJLyogRW5kIG9mIGxpbmUgKi8KKyNkZWZpbmUgQ0lTUl9QQVJfRVJSCSgxIDw8IDcpCS8qIFBhcml0eSBlcnJvciAqLworI2RlZmluZSBDSVNSX0NRRAkoMSA8PCA2KQkvKiBDYW1lcmEgaW50ZXJmYWNlIHF1aWNrIGRpc2FibGUgKi8KKyNkZWZpbmUgQ0lTUl9TT0YJKDEgPDwgNSkJLyogU3RhcnQgb2YgZnJhbWUgKi8KKyNkZWZpbmUgQ0lTUl9DREQJKDEgPDwgNCkJLyogQ2FtZXJhIGludGVyZmFjZSBkaXNhYmxlIGRvbmUgKi8KKyNkZWZpbmUgQ0lTUl9FT0YJKDEgPDwgMykJLyogRW5kIG9mIGZyYW1lICovCisjZGVmaW5lIENJU1JfSUZPXzIJKDEgPDwgMikJLyogRklGTyBvdmVycnVuIGZvciBDaGFubmVsIDIgKi8KKyNkZWZpbmUgQ0lTUl9JRk9fMQkoMSA8PCAxKQkvKiBGSUZPIG92ZXJydW4gZm9yIENoYW5uZWwgMSAqLworI2RlZmluZSBDSVNSX0lGT18wCSgxIDw8IDApCS8qIEZJRk8gb3ZlcnJ1biBmb3IgQ2hhbm5lbCAwICovCisKKyNkZWZpbmUgQ0lGUl9GTFZMMgkoMHg3ZiA8PCAyMykJLyogRklGTyAyIGxldmVsIG1hc2sgKi8KKyNkZWZpbmUgQ0lGUl9GTFZMMQkoMHg3ZiA8PCAxNikJLyogRklGTyAxIGxldmVsIG1hc2sgKi8KKyNkZWZpbmUgQ0lGUl9GTFZMMAkoMHhmZiA8PCA4KQkvKiBGSUZPIDAgbGV2ZWwgbWFzayAqLworI2RlZmluZSBDSUZSX1RITF8wCSgweDMgPDwgNCkJLyogVGhyZXNob2xkIExldmVsIGZvciBDaGFubmVsIDAgRklGTyAqLworI2RlZmluZSBDSUZSX1JFU0VUX0YJKDEgPDwgMykJLyogUmVzZXQgaW5wdXQgRklGT3MgKi8KKyNkZWZpbmUgQ0lGUl9GRU4yCSgxIDw8IDIpCS8qIEZJRk8gZW5hYmxlIGZvciBjaGFubmVsIDIgKi8KKyNkZWZpbmUgQ0lGUl9GRU4xCSgxIDw8IDEpCS8qIEZJRk8gZW5hYmxlIGZvciBjaGFubmVsIDEgKi8KKyNkZWZpbmUgQ0lGUl9GRU4wCSgxIDw8IDApCS8qIEZJRk8gZW5hYmxlIGZvciBjaGFubmVsIDAgKi8KKworI2RlZmluZSBTUkFNX1NJWkUJCTB4NDAwMDAgLyogNHg2NEsgICovCisKKyNkZWZpbmUgU1JBTV9NRU1fUEhZUwkJMHg1QzAwMDAwMAorCisjZGVmaW5lIElNUE1DUgkJX19SRUcoMHg1ODAwMDAwMCkgLyogSU0gUG93ZXIgTWFuYWdlbWVudCBDb250cm9sIFJlZyAqLworI2RlZmluZSBJTVBNU1IJCV9fUkVHKDB4NTgwMDAwMDgpIC8qIElNIFBvd2VyIE1hbmFnZW1lbnQgU3RhdHVzIFJlZyAqLworCisjZGVmaW5lIElNUE1DUl9QQzMJCSgweDMgPDwgMjIpIC8qIEJhbmsgMyBQb3dlciBDb250cm9sICovCisjZGVmaW5lIElNUE1DUl9QQzNfUlVOX01PREUJKDB4MCA8PCAyMikgLyogICBSdW4gbW9kZSAqLworI2RlZmluZSBJTVBNQ1JfUEMzX1NUQU5EQllfTU9ERQkoMHgxIDw8IDIyKSAvKiAgIFN0YW5kYnkgbW9kZSAqLworI2RlZmluZSBJTVBNQ1JfUEMzX0FVVE9fTU9ERQkoMHgzIDw8IDIyKSAvKiAgIEF1dG9tYXRpY2FsbHkgY29udHJvbGxlZCAqLworCisjZGVmaW5lIElNUE1DUl9QQzIJCSgweDMgPDwgMjApIC8qIEJhbmsgMiBQb3dlciBDb250cm9sICovCisjZGVmaW5lIElNUE1DUl9QQzJfUlVOX01PREUJKDB4MCA8PCAyMCkgLyogICBSdW4gbW9kZSAqLworI2RlZmluZSBJTVBNQ1JfUEMyX1NUQU5EQllfTU9ERQkoMHgxIDw8IDIwKSAvKiAgIFN0YW5kYnkgbW9kZSAqLworI2RlZmluZSBJTVBNQ1JfUEMyX0FVVE9fTU9ERQkoMHgzIDw8IDIwKSAvKiAgIEF1dG9tYXRpY2FsbHkgY29udHJvbGxlZCAqLworCisjZGVmaW5lIElNUE1DUl9QQzEJCSgweDMgPDwgMTgpIC8qIEJhbmsgMSBQb3dlciBDb250cm9sICovCisjZGVmaW5lIElNUE1DUl9QQzFfUlVOX01PREUJKDB4MCA8PCAxOCkgLyogICBSdW4gbW9kZSAqLworI2RlZmluZSBJTVBNQ1JfUEMxX1NUQU5EQllfTU9ERQkoMHgxIDw8IDE4KSAvKiAgIFN0YW5kYnkgbW9kZSAqLworI2RlZmluZSBJTVBNQ1JfUEMxX0FVVE9fTU9ERQkoMHgzIDw8IDE4KSAvKiAgIEF1dG9tYXRpY2FsbHkgY29udHJvbGxlZCAqLworCisjZGVmaW5lIElNUE1DUl9QQzAJCSgweDMgPDwgMTYpIC8qIEJhbmsgMCBQb3dlciBDb250cm9sICovCisjZGVmaW5lIElNUE1DUl9QQzBfUlVOX01PREUJKDB4MCA8PCAxNikgLyogICBSdW4gbW9kZSAqLworI2RlZmluZSBJTVBNQ1JfUEMwX1NUQU5EQllfTU9ERQkoMHgxIDw8IDE2KSAvKiAgIFN0YW5kYnkgbW9kZSAqLworI2RlZmluZSBJTVBNQ1JfUEMwX0FVVE9fTU9ERQkoMHgzIDw8IDE2KSAvKiAgIEF1dG9tYXRpY2FsbHkgY29udHJvbGxlZCAqLworCisjZGVmaW5lIElNUE1DUl9BVzMJCSgxIDw8IDExKSAvKiBCYW5rIDMgQXV0b21hdGljIFdha2UtdXAgZW5hYmxlICovCisjZGVmaW5lIElNUE1DUl9BVzIJCSgxIDw8IDEwKSAvKiBCYW5rIDIgQXV0b21hdGljIFdha2UtdXAgZW5hYmxlICovCisjZGVmaW5lIElNUE1DUl9BVzEJCSgxIDw8IDkpICAvKiBCYW5rIDEgQXV0b21hdGljIFdha2UtdXAgZW5hYmxlICovCisjZGVmaW5lIElNUE1DUl9BVzAJCSgxIDw8IDgpICAvKiBCYW5rIDAgQXV0b21hdGljIFdha2UtdXAgZW5hYmxlICovCisKKyNkZWZpbmUgSU1QTUNSX0RTVAkJKDB4RkYgPDwgMCkgLyogRGVsYXkgU3RhbmRieSBUaW1lLCBtcyAqLworCisjZGVmaW5lIElNUE1TUl9QUzMJCSgweDMgPDwgNikgLyogQmFuayAzIFBvd2VyIFN0YXR1czogKi8KKyNkZWZpbmUgSU1QTVNSX1BTM19SVU5fTU9ERQkoMHgwIDw8IDYpIC8qICAgIFJ1biBtb2RlICovCisjZGVmaW5lIElNUE1TUl9QUzNfU1RBTkRCWV9NT0RFCSgweDEgPDwgNikgLyogICAgU3RhbmRieSBtb2RlICovCisKKyNkZWZpbmUgSU1QTVNSX1BTMgkJKDB4MyA8PCA0KSAvKiBCYW5rIDIgUG93ZXIgU3RhdHVzOiAqLworI2RlZmluZSBJTVBNU1JfUFMyX1JVTl9NT0RFCSgweDAgPDwgNCkgLyogICAgUnVuIG1vZGUgKi8KKyNkZWZpbmUgSU1QTVNSX1BTMl9TVEFOREJZX01PREUJKDB4MSA8PCA0KSAvKiAgICBTdGFuZGJ5IG1vZGUgKi8KKworI2RlZmluZSBJTVBNU1JfUFMxCQkoMHgzIDw8IDIpIC8qIEJhbmsgMSBQb3dlciBTdGF0dXM6ICovCisjZGVmaW5lIElNUE1TUl9QUzFfUlVOX01PREUJKDB4MCA8PCAyKSAvKiAgICBSdW4gbW9kZSAqLworI2RlZmluZSBJTVBNU1JfUFMxX1NUQU5EQllfTU9ERQkoMHgxIDw8IDIpIC8qICAgIFN0YW5kYnkgbW9kZSAqLworCisjZGVmaW5lIElNUE1TUl9QUzAJCSgweDMgPDwgMCkgLyogQmFuayAwIFBvd2VyIFN0YXR1czogKi8KKyNkZWZpbmUgSU1QTVNSX1BTMF9SVU5fTU9ERQkoMHgwIDw8IDApIC8qICAgIFJ1biBtb2RlICovCisjZGVmaW5lIElNUE1TUl9QUzBfU1RBTkRCWV9NT0RFCSgweDEgPDwgMCkgLyogICAgU3RhbmRieSBtb2RlICovCisKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9weGFmYi5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3B4YWZiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdkNzFlOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9weGFmYi5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3B4YWZiLmgKKyAqCisgKiAgU3VwcG9ydCBmb3IgdGhlIHhzY2FsZSBmcmFtZSBidWZmZXIuCisgKgorICogIEF1dGhvcjogICAgIEplYW4tRnJlZGVyaWMgQ2xlcmUKKyAqICBDcmVhdGVkOiAgICBTZXAgMjIsIDIwMDMKKyAqICBDb3B5cmlnaHQ6ICBqZmNsZXJlQHNpbml4Lm5ldAorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworLyoKKyAqIFRoaXMgc3RydWN0dXJlIGRlc2NyaWJlcyB0aGUgbWFjaGluZSB3aGljaCB3ZSBhcmUgcnVubmluZyBvbi4KKyAqIEl0IGlzIHNldCBpbiBsaW51eC9hcmNoL2FybS9tYWNoLXB4YS9tYWNoaW5lX25hbWUuYyBhbmQgdXNlZCBpbiB0aGUgcHJvYmUgcm91dGluZQorICogb2YgbGludXgvZHJpdmVycy92aWRlby9weGFmYi5jCisgKi8KK3N0cnVjdCBweGFmYl9tYWNoX2luZm8geworCXVfbG9uZwkJcGl4Y2xvY2s7CisKKwl1X3Nob3J0CQl4cmVzOworCXVfc2hvcnQJCXlyZXM7CisKKwl1X2NoYXIJCWJwcDsKKwl1X2NoYXIJCWhzeW5jX2xlbjsKKwl1X2NoYXIJCWxlZnRfbWFyZ2luOworCXVfY2hhcgkJcmlnaHRfbWFyZ2luOworCisJdV9jaGFyCQl2c3luY19sZW47CisJdV9jaGFyCQl1cHBlcl9tYXJnaW47CisJdV9jaGFyCQlsb3dlcl9tYXJnaW47CisJdV9jaGFyCQlzeW5jOworCisJdV9pbnQJCWNtYXBfZ3JleXNjYWxlOjEsCisJCQljbWFwX2ludmVyc2U6MSwKKwkJCWNtYXBfc3RhdGljOjEsCisJCQl1bnVzZWQ6Mjk7CisKKwkvKiBUaGUgZm9sbG93aW5nIHNob3VsZCBiZSBkZWZpbmVkIGluIExDQ1IwCisJICogICAgICBMQ0NSMF9BY3Qgb3IgTENDUjBfUGFzICAgICAgICAgIEFjdGl2ZSBvciBQYXNzaXZlCisJICogICAgICBMQ0NSMF9TbmdsIG9yIExDQ1IwX0R1YWwgICAgICAgIFNpbmdsZS9EdWFsIHBhbmVsCisJICogICAgICBMQ0NSMF9Nb25vIG9yIExDQ1IwX0NvbG9yICAgICAgIE1vbm8vQ29sb3IKKwkgKiAgICAgIExDQ1IwXzRQaXhNb25vIG9yIExDQ1IwXzhQaXhNb25vIChpbiBtb25vIHNpbmdsZSBtb2RlKQorCSAqICAgICAgTENDUjBfRE1BRGVsKFRjcHUpIChvcHRpb25hbCkgICBETUEgcmVxdWVzdCBkZWxheQorCSAqCisJICogVGhlIGZvbGxvd2luZyBzaG91bGQgbm90IGJlIGRlZmluZWQgaW4gTENDUjA6CisJICogICAgICBMQ0NSMF9PVU0sIExDQ1IwX0JNLCBMQ0NSMF9RRE0sIExDQ1IwX0RJUywgTENDUjBfRUZNCisJICogICAgICBMQ0NSMF9JVU0sIExDQ1IwX1NGTSwgTENDUjBfTERNLCBMQ0NSMF9FTkIKKwkgKi8KKwl1X2ludAkJbGNjcjA7CisJLyogVGhlIGZvbGxvd2luZyBzaG91bGQgYmUgZGVmaW5lZCBpbiBMQ0NSMworCSAqICAgICAgTENDUjNfT3V0RW5IIG9yIExDQ1IzX091dEVuTCAgICBPdXRwdXQgZW5hYmxlIHBvbGFyaXR5CisJICogICAgICBMQ0NSM19QaXhSc0VkZyBvciBMQ0NSM19QaXhGbEVkZyBQaXhlbCBjbG9jayBlZGdlIHR5cGUKKwkgKiAgICAgIExDQ1IzX0FjYihYKSAgICAgICAgICAgICAgICAgICAgQUIgQmlhcyBwaW4gZnJlcXVlbmN5CisJICogICAgICBMQ0NSM19EUEMgKG9wdGlvbmFsKSAgICAgICAgICAgIERvdWJsZSBQaXhlbCBDbG9jayBtb2RlICh1bnRlc3RlZCkKKwkgKgorCSAqIFRoZSBmb2xsb3dpbmcgc2hvdWxkIG5vdCBiZSBkZWZpbmVkIGluIExDQ1IzCisJICogICAgICBMQ0NSM19IU1AsIExDQ1IzX1ZTUCwgTENDUjBfUGNkKHgpLCBMQ0NSM19CcHAKKwkgKi8KKwl1X2ludAkJbGNjcjM7CisKKwl2b2lkICgqcHhhZmJfYmFja2xpZ2h0X3Bvd2VyKShpbnQpOworCXZvaWQgKCpweGFmYl9sY2RfcG93ZXIpKGludCk7CisKK307Cit2b2lkIHNldF9weGFfZmJfaW5mbyhzdHJ1Y3QgcHhhZmJfbWFjaF9pbmZvICpoYXJkX3B4YV9mYl9pbmZvKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9zc3AuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9zc3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWM2N2IwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3NzcC5oCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiAgc3NwLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzIFJ1c3NlbGwgS2luZywgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgUFhBIENQVS9TU1AgcG9ydHM6LQorICoKKyAqICAgICAgIFBYQTI1MCAgICAgU1NQCisgKiAgICAgICBQWEEyNTUgICAgIFNTUCwgTlNTUAorICogICAgICAgUFhBMjZ4ICAgICBTU1AsIE5TU1AsIEFTU1AKKyAqICAgICAgIFBYQTI3eCAgICAgU1NQMSwgU1NQMiwgU1NQMworICovCisKKyNpZm5kZWYgU1NQX0gKKyNkZWZpbmUgU1NQX0gKKworc3RydWN0IHNzcF9zdGF0ZSB7CisJdTMyCWNyMDsKKwl1MzIgY3IxOworCXUzMiB0bzsKKwl1MzIgcHNwOworfTsKKworc3RydWN0IHNzcF9kZXYgeworCXUzMiBwb3J0OworCXUzMiBtb2RlOworCXUzMiBmbGFnczsKKwl1MzIgcHNwX2ZsYWdzOworCXUzMiBzcGVlZDsKK307CisKK2ludCBzc3Bfd3JpdGVfd29yZChzdHJ1Y3Qgc3NwX2RldiAqZGV2LCB1MzIgZGF0YSk7CitpbnQgc3NwX3JlYWRfd29yZChzdHJ1Y3Qgc3NwX2RldiAqZGV2KTsKK3ZvaWQgc3NwX2ZsdXNoKHN0cnVjdCBzc3BfZGV2ICpkZXYpOwordm9pZCBzc3BfZW5hYmxlKHN0cnVjdCBzc3BfZGV2ICpkZXYpOwordm9pZCBzc3BfZGlzYWJsZShzdHJ1Y3Qgc3NwX2RldiAqZGV2KTsKK3ZvaWQgc3NwX3NhdmVfc3RhdGUoc3RydWN0IHNzcF9kZXYgKmRldiwgc3RydWN0IHNzcF9zdGF0ZSAqc3NwKTsKK3ZvaWQgc3NwX3Jlc3RvcmVfc3RhdGUoc3RydWN0IHNzcF9kZXYgKmRldiwgc3RydWN0IHNzcF9zdGF0ZSAqc3NwKTsKK2ludCBzc3BfaW5pdChzdHJ1Y3Qgc3NwX2RldiAqZGV2LCB1MzIgcG9ydCk7CitpbnQgc3NwX2NvbmZpZyhzdHJ1Y3Qgc3NwX2RldiAqZGV2LCB1MzIgbW9kZSwgdTMyIGZsYWdzLCB1MzIgcHNwX2ZsYWdzLCB1MzIgc3BlZWQpOwordm9pZCBzc3BfZXhpdChzdHJ1Y3Qgc3NwX2RldiAqZGV2KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvc3lzdGVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQwYTQ2YgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9zeXN0ZW0uaApAQCAtMCwwICsxLDM0IEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3N5c3RlbS5oCisgKgorICogQXV0aG9yOglOaWNvbGFzIFBpdHJlCisgKiBDcmVhdGVkOglKdW4gMTUsIDIwMDEKKyAqIENvcHlyaWdodDoJTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSAiaGFyZHdhcmUuaCIKKyNpbmNsdWRlICJweGEtcmVncy5oIgorCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9pZGxlKHZvaWQpCit7CisJY3B1X2RvX2lkbGUoKTsKK30KKworCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUpCit7CisJaWYgKG1vZGUgPT0gJ3MnKSB7CisJCS8qIEp1bXAgaW50byBST00gYXQgYWRkcmVzcyAwICovCisJCWNwdV9yZXNldCgwKTsKKwl9IGVsc2UgeworCQkvKiBJbml0aWFsaXplIHRoZSB3YXRjaGRvZyBhbmQgbGV0IGl0IGZpcmUgKi8KKwkJT1dFUiA9IE9XRVJfV01FOworCQlPU1NSID0gT1NTUl9NMzsKKwkJT1NNUjMgPSBPU0NSICsgMzY4NjQwOwkvKiAuLi4gaW4gMTAwIG1zICovCisJfQorfQorCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvdGltZXguaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS90aW1leC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhMTI1ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvdGltZXguaApAQCAtMCwwICsxLDI1IEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3RpbWV4LmgKKyAqCisgKiBBdXRob3I6CU5pY29sYXMgUGl0cmUKKyAqIENyZWF0ZWQ6CUp1biAxNSwgMjAwMQorICogQ29weXJpZ2h0OglNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2lmIGRlZmluZWQoQ09ORklHX1BYQTI1eCkKKy8qIFBYQTI1MC8yMTAgdGltZXIgYmFzZSAqLworI2RlZmluZSBDTE9DS19USUNLX1JBVEUgMzY4NjQwMAorI2VsaWYgZGVmaW5lZChDT05GSUdfUFhBMjd4KQorLyogUFhBMjd4IHRpbWVyIGJhc2UgKi8KKyNpZmRlZiBDT05GSUdfTUFDSF9NQUlOU1RPTkUKKyNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFIDMyNDk2MDAKKyNlbHNlCisjZGVmaW5lIENMT0NLX1RJQ0tfUkFURSAzMjUwMDAwCisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3VkYy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3VkYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNTQ4YTMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvdWRjLmgKQEAgLTAsMCArMSwxOCBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS91ZGMuaAorICoKKyAqIFRoaXMgc3VwcG9ydHMgbWFjaGluZS1zcGVjaWZpYyBkaWZmZXJlbmNlcyBpbiBob3cgdGhlIFBYQTJ4eAorICogVVNCIERldmljZSBDb250cm9sbGVyIChVREMpIGlzIHdpcmVkLgorICoKKyAqIEl0IGlzIHNldCBpbiBsaW51eC9hcmNoL2FybS9tYWNoLXB4YS88bWFjaGluZT4uYyBhbmQgdXNlZCBpbgorICogdGhlIHByb2JlIHJvdXRpbmUgb2YgbGludXgvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTJ4eF91ZGMuYworICovCitzdHJ1Y3QgcHhhMnh4X3VkY19tYWNoX2luZm8geworICAgICAgICBpbnQgICgqdWRjX2lzX2Nvbm5lY3RlZCkodm9pZCk7CQkvKiBkbyB3ZSBzZWUgaG9zdD8gKi8KKyAgICAgICAgdm9pZCAoKnVkY19jb21tYW5kKShpbnQgY21kKTsKKyNkZWZpbmUJUFhBMlhYX1VEQ19DTURfQ09OTkVDVAkJMAkvKiBsZXQgaG9zdCBzZWUgdXMgKi8KKyNkZWZpbmUJUFhBMlhYX1VEQ19DTURfRElTQ09OTkVDVAkxCS8qIHNvIGhvc3Qgd29uJ3Qgc2VlIHVzICovCit9OworCitleHRlcm4gdm9pZCBweGFfc2V0X3VkY19pbmZvKHN0cnVjdCBweGEyeHhfdWRjX21hY2hfaW5mbyAqaW5mbyk7CisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS91bmNvbXByZXNzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvdW5jb21wcmVzcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0MjhkM2UKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvdW5jb21wcmVzcy5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvdW5jb21wcmVzcy5oCisgKgorICogQXV0aG9yOglOaWNvbGFzIFBpdHJlCisgKiBDb3B5cmlnaHQ6CShDKSAyMDAxIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2RlZmluZSBGRlVBUlQJCSgodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKTB4NDAxMDAwMDApCisjZGVmaW5lIEJUVUFSVAkJKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopMHg0MDIwMDAwMCkKKyNkZWZpbmUgU1RVQVJUCQkoKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikweDQwNzAwMDAwKQorCisjZGVmaW5lIFVBUlQJCUZGVUFSVAorCisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgcHV0YyhjaGFyIGMpCit7CisJd2hpbGUgKCEoVUFSVFs1XSAmIDB4MjApKTsKKwlVQVJUWzBdID0gYzsKK30KKworLyoKKyAqIFRoaXMgZG9lcyBub3QgYXBwZW5kIGEgbmV3bGluZQorICovCitzdGF0aWMgdm9pZCBwdXRzdHIoY29uc3QgY2hhciAqcykKK3sKKwl3aGlsZSAoKnMpIHsKKwkJcHV0Yygqcyk7CisJCWlmICgqcyA9PSAnXG4nKQorCQkJcHV0YygnXHInKTsKKwkJcysrOworCX0KK30KKworLyoKKyAqIG5vdGhpbmcgdG8gZG8KKyAqLworI2RlZmluZSBhcmNoX2RlY29tcF9zZXR1cCgpCisjZGVmaW5lIGFyY2hfZGVjb21wX3dkb2coKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3ZtYWxsb2MuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS92bWFsbG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM4MWFmNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS92bWFsbG9jLmgKQEAgLTAsMCArMSwyMiBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS92bWFsbG9jLmgKKyAqCisgKiBBdXRob3I6CU5pY29sYXMgUGl0cmUKKyAqIENvcHlyaWdodDoJKEMpIDIwMDEgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisvKgorICogSnVzdCBhbnkgYXJiaXRyYXJ5IG9mZnNldCB0byB0aGUgc3RhcnQgb2YgdGhlIHZtYWxsb2MgVk0gYXJlYTogdGhlCisgKiBjdXJyZW50IDhNQiB2YWx1ZSBqdXN0IG1lYW5zIHRoYXQgdGhlcmUgd2lsbCBiZSBhIDhNQiAiaG9sZSIgYWZ0ZXIgdGhlCisgKiBwaHlzaWNhbCBtZW1vcnkgdW50aWwgdGhlIGtlcm5lbCB2aXJ0dWFsIG1lbW9yeSBzdGFydHMuICBUaGF0IG1lYW5zIHRoYXQKKyAqIGFueSBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyB3aWxsIGhvcGVmdWxseSBiZSBjYXVnaHQuCisgKiBUaGUgdm1hbGxvYygpIHJvdXRpbmVzIGxlYXZlcyBhIGhvbGUgb2YgNGtCIGJldHdlZW4gZWFjaCB2bWFsbG9jZWQKKyAqIGFyZWEgZm9yIHRoZSBzYW1lIHJlYXNvbi4gOykKKyAqLworI2RlZmluZSBWTUFMTE9DX09GRlNFVAkgICg4KjEwMjQqMTAyNCkKKyNkZWZpbmUgVk1BTExPQ19TVEFSVAkgICgoKHVuc2lnbmVkIGxvbmcpaGlnaF9tZW1vcnkgKyBWTUFMTE9DX09GRlNFVCkgJiB+KFZNQUxMT0NfT0ZGU0VULTEpKQorI2RlZmluZSBWTUFMTE9DX0VORCAgICAgICAoMHhlODAwMDAwMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXJwYy9hY29ybmZiLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1ycGMvYWNvcm5mYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjYjc3MzMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1ycGMvYWNvcm5mYi5oCkBAIC0wLDAgKzEsMTQwIEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLXJwYy9hY29ybmZiLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5IFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIEFjb3JuRkIgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGNvZGUKKyAqLworCisjZGVmaW5lIGFjb3JuZmJfYmFuZHdpZHRoKHZhcikgKCh2YXIpLT5waXhjbG9jayAqIDggLyAodmFyKS0+Yml0c19wZXJfcGl4ZWwpCisKK3N0YXRpYyBpbmxpbmUgaW50CithY29ybmZiX3ZhbGlkX3BpeHJhdGUoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIpCit7CisJdV9sb25nIGxpbWl0OworCisJaWYgKCF2YXItPnBpeGNsb2NrKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogTGltaXRzIGJlbG93IGFyZSB0YWtlbiBmcm9tIFJJU0MgT1MgYmFuZHdpZHRobGltaXQgZmlsZQorCSAqLworCWlmIChjdXJyZW50X3Bhci51c2luZ192cmFtKSB7CisJCWlmIChjdXJyZW50X3Bhci52cmFtX2hhbGZfc2FtID09IDIwNDgpCisJCQlsaW1pdCA9IDY1Nzg7CisJCWVsc2UKKwkJCWxpbWl0ID0gMTMxNTc7CisJfSBlbHNlIHsKKwkJbGltaXQgPSAyNjMxNTsKKwl9CisKKwlyZXR1cm4gYWNvcm5mYl9iYW5kd2lkdGgodmFyKSA+PSBsaW1pdDsKK30KKworLyoKKyAqIFRyeSB0byBmaW5kIHRoZSBiZXN0IFBMTCBwYXJhbWV0ZXJzIGZvciB0aGUgcGl4ZWwgY2xvY2suCisgKiBUaGlzIGFsZ29yaXRobSBzZWVtcyB0byBnaXZlIGJlc3QgcHJlZGljdGFibGUgcmVzdWx0cywKKyAqIGFuZCBwcm9kdWNlcyB0aGUgc2FtZSB2YWx1ZXMgYXMgZGV0YWlsZWQgaW4gdGhlIFZJREMyMAorICogZGF0YSBzaGVldC4KKyAqLworc3RhdGljIGlubGluZSB1X2ludAorYWNvcm5mYl92aWRjMjBfZmluZF9wbGwodV9pbnQgcGl4Y2xrKQoreworCXVfaW50IHIsIGJlc3RfciA9IDIsIGJlc3RfdiA9IDI7CisJaW50IGJlc3RfZCA9IDB4N2ZmZmZmZmY7CisKKwlmb3IgKHIgPSAyOyByIDw9IDMyOyByKyspIHsKKwkJdV9pbnQgcnIsIHYsIHA7CisJCWludCBkOworCisJCXJyID0gNDE2NjcgKiByOworCisJCXYgPSAocnIgKyBwaXhjbGsgLyAyKSAvIHBpeGNsazsKKworCQlpZiAodiA+IDMyIHx8IHYgPCAyKQorCQkJY29udGludWU7CisKKwkJcCA9IChyciArIHYgLyAyKSAvIHY7CisKKwkJZCA9IHBpeGNsayAtIHA7CisKKwkJaWYgKGQgPCAwKQorCQkJZCA9IC1kOworCisJCWlmIChkIDwgYmVzdF9kKSB7CisJCQliZXN0X2QgPSBkOworCQkJYmVzdF92ID0gdiAtIDE7CisJCQliZXN0X3IgPSByIC0gMTsKKwkJfQorCisJCWlmIChkID09IDApCisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gYmVzdF92IDw8IDggfCBiZXN0X3I7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorYWNvcm5mYl92aWRjMjBfZmluZF9yYXRlcyhzdHJ1Y3QgdmlkY190aW1pbmcgKnZpZGMsCisJCQkgIHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyKQoreworCXVfaW50IGRpdjsKKworCS8qIFNlbGVjdCBwaXhlbC1jbG9jayBkaXZpc29yIHRvIGtlZXAgUExMIGluIHJhbmdlICovCisJZGl2ID0gdmFyLT5waXhjbG9jayAvIDkwOTA7IC8qOTkyMSovCisKKwkvKiBMaW1pdCBkaXZpc29yICovCisJaWYgKGRpdiA9PSAwKQorCQlkaXYgPSAxOworCWlmIChkaXYgPiA4KQorCQlkaXYgPSA4OworCisJLyogRW5jb2RlIGRpdmlzb3IgdG8gVklEQzIwIHNldHRpbmcgKi8KKwlzd2l0Y2ggKGRpdikgeworCWNhc2UgMToJdmlkYy0+Y29udHJvbCB8PSBWSURDMjBfQ1RSTF9QSVhfQ0s7ICBicmVhazsKKwljYXNlIDI6CXZpZGMtPmNvbnRyb2wgfD0gVklEQzIwX0NUUkxfUElYX0NLMjsgYnJlYWs7CisJY2FzZSAzOgl2aWRjLT5jb250cm9sIHw9IFZJREMyMF9DVFJMX1BJWF9DSzM7IGJyZWFrOworCWNhc2UgNDoJdmlkYy0+Y29udHJvbCB8PSBWSURDMjBfQ1RSTF9QSVhfQ0s0OyBicmVhazsKKwljYXNlIDU6CXZpZGMtPmNvbnRyb2wgfD0gVklEQzIwX0NUUkxfUElYX0NLNTsgYnJlYWs7CisJY2FzZSA2Ogl2aWRjLT5jb250cm9sIHw9IFZJREMyMF9DVFJMX1BJWF9DSzY7IGJyZWFrOworCWNhc2UgNzoJdmlkYy0+Y29udHJvbCB8PSBWSURDMjBfQ1RSTF9QSVhfQ0s3OyBicmVhazsKKwljYXNlIDg6IHZpZGMtPmNvbnRyb2wgfD0gVklEQzIwX0NUUkxfUElYX0NLODsgYnJlYWs7CisJfQorCisJLyoKKwkgKiBXaXRoIFZSQU0sIHRoZSBGSUZPIGNhbiBiZSBzZXQgdG8gdGhlIGhpZ2hlc3QgcG9zc2libGUgc2V0dGluZworCSAqIGJlY2F1c2UgdGhlcmUgYXJlIG5vIGxhdGVuY3kgY29uc2lkZXJhdGlvbnMgZm9yIG90aGVyIG1lbW9yeQorCSAqIGFjY2Vzc2VzLiBIb3dldmVyLCBpbiA2NCBiaXQgYnVzIG1vZGUgdGhlIEZJRk8gcHJlbG9hZCB2YWx1ZQorCSAqIG11c3Qgbm90IGJlIHNldCB0byBWSURDMjBfQ1RSTF9GSUZPXzI4IGJlY2F1c2UgdGhpcyB3aWxsIGxldAorCSAqIHRoZSBGSUZPIG92ZXJmbG93LiBTZWUgVklEQzIwIG1hbnVhbCBwYWdlIDMzICg2LjAgU2V0dGluZyB0aGUKKwkgKiBGSUZPIHByZWxvYWQgdmFsdWUpLgorCSAqLworCWlmIChjdXJyZW50X3Bhci51c2luZ192cmFtKSB7CisJCWlmIChjdXJyZW50X3Bhci52cmFtX2hhbGZfc2FtID09IDIwNDgpCisJCQl2aWRjLT5jb250cm9sIHw9IFZJREMyMF9DVFJMX0ZJRk9fMjQ7CisJCWVsc2UKKwkJCXZpZGMtPmNvbnRyb2wgfD0gVklEQzIwX0NUUkxfRklGT18yODsKKwl9IGVsc2UgeworCQl1bnNpZ25lZCBsb25nIGJhbmR3aWR0aCA9IGFjb3JuZmJfYmFuZHdpZHRoKHZhcik7CisKKwkJLyogRW5jb2RlIGJhbmR3aWR0aCBhcyBWSURDMjAgc2V0dGluZyAqLworCQlpZiAoYmFuZHdpZHRoID4gMzMzMzQpCQkvKiA8IDMwLjBNQi9zICovCisJCQl2aWRjLT5jb250cm9sIHw9IFZJREMyMF9DVFJMX0ZJRk9fMTY7CisJCWVsc2UgaWYgKGJhbmR3aWR0aCA+IDI2NjY2KQkvKiA8IDM3LjVNQi9zICovCisJCQl2aWRjLT5jb250cm9sIHw9IFZJREMyMF9DVFJMX0ZJRk9fMjA7CisJCWVsc2UgaWYgKGJhbmR3aWR0aCA+IDIyMjIyKQkvKiA8IDQ1LjBNQi9zICovCisJCQl2aWRjLT5jb250cm9sIHw9IFZJREMyMF9DVFJMX0ZJRk9fMjQ7CisJCWVsc2UJCQkJLyogPiA0NS4wTUIvcyAqLworCQkJdmlkYy0+Y29udHJvbCB8PSBWSURDMjBfQ1RSTF9GSUZPXzI4OworCX0KKworCS8qIEZpbmQgdGhlIFBMTCB2YWx1ZXMgKi8KKwl2aWRjLT5wbGxfY3RsID0gYWNvcm5mYl92aWRjMjBfZmluZF9wbGwodmFyLT5waXhjbG9jayAvIGRpdik7Cit9CisKKyNkZWZpbmUgYWNvcm5mYl9kZWZhdWx0X2NvbnRyb2woKQkoVklEQzIwX0NUUkxfUElYX1ZDTEspCisjZGVmaW5lIGFjb3JuZmJfZGVmYXVsdF9lY29udHJvbCgpCShWSURDMjBfRUNUTF9EQUMgfCBWSURDMjBfRUNUTF9SRUcoMykpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1ycGMvZGVidWctbWFjcm8uUyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXJwYy9kZWJ1Zy1tYWNyby5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3MTE4MjgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1ycGMvZGVidWctbWFjcm8uUwpAQCAtMCwwICsxLDM1IEBACisvKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1ycGMvZGVidWctbWFjcm8uUworICoKKyAqIERlYnVnZ2luZyBtYWNybyBpbmNsdWRlIGhlYWRlcgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTQtMTk5OSBSdXNzZWxsIEtpbmcKKyAqICBNb3ZlZCBmcm9tIGxpbnV4L2FyY2gvYXJtL2tlcm5lbC9kZWJ1Zy5TIGJ5IEJlbiBEb29rcworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorKi8KKworCQkubWFjcm8JYWRkcnVhcnQscngKKwkJbW92CVxyeCwgIzB4ZTAwMDAwMDAKKwkJb3JyCVxyeCwgXHJ4LCAjMHgwMDAxMDAwMAorCQlvcnIJXHJ4LCBccngsICMweDAwMDAwZmUwCisJCS5lbmRtCisKKwkJLm1hY3JvCXNlbmR1YXJ0LHJkLHJ4CisJCXN0cmIJXHJkLCBbXHJ4XQorCQkuZW5kbQorCisJCS5tYWNybwlidXN5dWFydCxyZCxyeAorMTAwMToJCWxkcmIJXHJkLCBbXHJ4LCAjMHgxNF0KKwkJYW5kCVxyZCwgXHJkLCAjMHg2MAorCQl0ZXEJXHJkLCAjMHg2MAorCQlibmUJMTAwMWIKKwkJLmVuZG0KKworCQkubWFjcm8Jd2FpdHVhcnQscmQscngKKzEwMDE6CQlsZHJiCVxyZCwgW1xyeCwgIzB4MThdCisJCXRzdAlccmQsICMweDEwCisJCWJlcQkxMDAxYgorCQkuZW5kbQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcnBjL2RtYS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcnBjL2RtYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyNGEyN2UzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcnBjL2RtYS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtcnBjL2RtYS5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NyBSdXNzZWxsIEtpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaWZuZGVmIF9fQVNNX0FSQ0hfRE1BX0gKKyNkZWZpbmUgX19BU01fQVJDSF9ETUFfSAorCisvKgorICogVGhpcyBpcyB0aGUgbWF4aW11bSBETUEgYWRkcmVzcyB0aGF0IGNhbiBiZSBETUFkIHRvLgorICogVGhlcmUgc2hvdWxkIG5vdCBiZSBtb3JlIHRoYW4gKDB4ZDAwMDAwMDAgLSAweGMwMDAwMDAwKQorICogYnl0ZXMgb2YgUkFNLgorICovCisjZGVmaW5lIE1BWF9ETUFfQUREUkVTUwkJMHhkMDAwMDAwMAorI2RlZmluZSBNQVhfRE1BX0NIQU5ORUxTCTgKKworI2RlZmluZSBETUFfMAkJCTAKKyNkZWZpbmUgRE1BXzEJCQkxCisjZGVmaW5lIERNQV8yCQkJMgorI2RlZmluZSBETUFfMwkJCTMKKyNkZWZpbmUgRE1BX1MwCQkJNAorI2RlZmluZSBETUFfUzEJCQk1CisjZGVmaW5lIERNQV9WSVJUVUFMX0ZMT1BQWQk2CisjZGVmaW5lIERNQV9WSVJUVUFMX1NPVU5ECTcKKworI2RlZmluZSBETUFfRkxPUFBZCQlETUFfVklSVFVBTF9GTE9QUFkKKworI2VuZGlmIC8qIF9BU01fQVJDSF9ETUFfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1ycGMvZW50cnktbWFjcm8uUyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXJwYy9lbnRyeS1tYWNyby5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4NmY0MTMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1ycGMvZW50cnktbWFjcm8uUwpAQCAtMCwwICsxLDMgQEAKKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9lbnRyeS1tYWNyby1pb21kLlM+CisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXJwYy9oYXJkd2FyZS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcnBjL2hhcmR3YXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU5NzU0YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXJwYy9oYXJkd2FyZS5oCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtcnBjL2hhcmR3YXJlLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk2LTE5OTkgUnVzc2VsbCBLaW5nLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIFRoaXMgZmlsZSBjb250YWlucyB0aGUgaGFyZHdhcmUgZGVmaW5pdGlvbnMgb2YgdGhlIFJpc2NQQyBzZXJpZXMgbWFjaGluZXMuCisgKi8KKyNpZm5kZWYgX19BU01fQVJDSF9IQVJEV0FSRV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfSEFSRFdBUkVfSAorCisjaW5jbHVkZSA8YXNtL2FyY2gvbWVtb3J5Lmg+CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjZGVmaW5lIElPTUVNKHgpICgodm9pZCBfX2lvbWVtICopKHgpKQorI2Vsc2UKKyNkZWZpbmUgSU9NRU0oeCkgeAorI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisvKgorICogV2hhdCBoYXJkd2FyZSBtdXN0IGJlIHByZXNlbnQKKyAqLworI2RlZmluZSBIQVNfSU9NRAorI2RlZmluZSBIQVNfVklEQzIwCisKKy8qIEhhcmR3YXJlIGFkZHJlc3NlcyBvZiBtYWpvciBhcmVhcy4KKyAqICAqX1NUQVJUIGlzIHRoZSBwaHlzaWNhbCBhZGRyZXNzCisgKiAgKl9TSVpFICBpcyB0aGUgc2l6ZSBvZiB0aGUgcmVnaW9uCisgKiAgKl9CQVNFICBpcyB0aGUgdmlydHVhbCBhZGRyZXNzCisgKi8KKyNkZWZpbmUgUkFNX1NJWkUJCTB4MTAwMDAwMDAKKyNkZWZpbmUgUkFNX1NUQVJUCQkweDEwMDAwMDAwCisKKyNkZWZpbmUgRUFTSV9TSVpFCQkweDA4MDAwMDAwCS8qIEVBU0kgSS9PICovCisjZGVmaW5lIEVBU0lfU1RBUlQJCTB4MDgwMDAwMDAKKyNkZWZpbmUgRUFTSV9CQVNFCQkweGU1MDAwMDAwCisKKyNkZWZpbmUgSU9fU1RBUlQJCTB4MDMwMDAwMDAJLyogSS9PICovCisjZGVmaW5lIElPX1NJWkUJCQkweDAxMDAwMDAwCisjZGVmaW5lIElPX0JBU0UJCQlJT01FTSgweGUwMDAwMDAwKQorCisjZGVmaW5lIFNDUkVFTl9TVEFSVAkJMHgwMjAwMDAwMAkvKiBWUkFNICovCisjZGVmaW5lIFNDUkVFTl9FTkQJCTB4ZGZjMDAwMDAKKyNkZWZpbmUgU0NSRUVOX0JBU0UJCTB4ZGY4MDAwMDAKKworI2RlZmluZSBGTFVTSF9CQVNFCQkweGRmMDAwMDAwCisjZGVmaW5lIFVOQ0FDSEVBQkxFX0FERFIJMHhkZjAxMDAwMAorCisvKgorICogSU8gQWRkcmVzc2VzCisgKi8KKyNkZWZpbmUgVklEQ19CQVNFCQkodm9pZCBfX2lvbWVtICopMHhlMDQwMDAwMAorI2RlZmluZSBFWFBNQVNLX0JBU0UJCTB4ZTAzNjAwMDAKKyNkZWZpbmUgSU9NRF9CQVNFCQlJT01FTSgweGUwMjAwMDAwKQorI2RlZmluZSBJT0NfQkFTRQkJSU9NRU0oMHhlMDIwMDAwMCkKKyNkZWZpbmUgUENJT19CQVNFCQlJT01FTSgweGUwMDEwMDAwKQorI2RlZmluZSBGTE9QUFlETUFfQkFTRQkJSU9NRU0oMHhlMDAyYTAwMCkKKworI2RlZmluZSBGTFVTSF9CQVNFX1BIWVMJCTB4MDAwMDAwMDAJLyogUk9NICovCisKKyNkZWZpbmUgdmlkY193cml0ZWwodmFsKQlfX3Jhd193cml0ZWwodmFsLCBWSURDX0JBU0UpCisKKyNkZWZpbmUgSU9fRUNfRUFTSV9CQVNFCQkweDgxNDAwMDAwCisjZGVmaW5lIElPX0VDX0lPQzRfQkFTRQkJMHg4MDA5YzAwMAorI2RlZmluZSBJT19FQ19JT0NfQkFTRQkJMHg4MDA5MDAwMAorI2RlZmluZSBJT19FQ19NRU1DOF9CQVNFCTB4ODAwMGFjMDAKKyNkZWZpbmUgSU9fRUNfTUVNQ19CQVNFCQkweDgwMDAwMDAwCisKKyNkZWZpbmUgTkVUU0xPVF9CQVNFCQkweDAzMDJiMDAwCisjZGVmaW5lIE5FVFNMT1RfU0laRQkJMHgwMDAwMTAwMAorCisjZGVmaW5lIFBPRFNMT1RfSU9DMF9CQVNFCTB4MDMyNDAwMDAKKyNkZWZpbmUgUE9EU0xPVF9JT0M0X0JBU0UJMHgwMzI3MDAwMAorI2RlZmluZSBQT0RTTE9UX0lPQ19TSVpFCSgxIDw8IDE0KQorI2RlZmluZSBQT0RTTE9UX01FTUNfQkFTRQkweDAzMDAwMDAwCisjZGVmaW5lIFBPRFNMT1RfTUVNQ19TSVpFCSgxIDw8IDE0KQorI2RlZmluZSBQT0RTTE9UX0VBU0lfQkFTRQkweDA4MDAwMDAwCisjZGVmaW5lIFBPRFNMT1RfRUFTSV9TSVpFCSgxIDw8IDI0KQorCisjZGVmaW5lCUVYUE1BU0tfU1RBVFVTCQkoRVhQTUFTS19CQVNFICsgMHgwMCkKKyNkZWZpbmUgRVhQTUFTS19FTkFCTEUJCShFWFBNQVNLX0JBU0UgKyAweDA0KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXJwYy9pby5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcnBjL2lvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ0NTNjNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXJwYy9pby5oCkBAIC0wLDAgKzEsMjU3IEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLXJwYy9pby5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NyBSdXNzZWxsIEtpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIE1vZGlmaWNhdGlvbnM6CisgKiAgMDYtRGVjLTE5OTcJUk1LCUNyZWF0ZWQuCisgKi8KKyNpZm5kZWYgX19BU01fQVJNX0FSQ0hfSU9fSAorI2RlZmluZSBfX0FTTV9BUk1fQVJDSF9JT19ICisKKyNkZWZpbmUgSU9fU1BBQ0VfTElNSVQgMHhmZmZmZmZmZgorCisvKgorICogR0NDIGlzIHRvdGFsbHkgY3JhcCBhdCBsb2FkaW5nL3N0b3JpbmcgZGF0YS4gIFdlIHRyeSB0byBwZXJzdWFkZSBpdAorICogdG8gZG8gdGhlIHJpZ2h0IHRoaW5nIGJ5IHVzaW5nIHRoZXNlIHdoZXJlZXZlciBwb3NzaWJsZSBpbnN0ZWFkIG9mCisgKiB0aGUgYWJvdmUuCisgKi8KKyNkZWZpbmUgX19hcmNoX2Jhc2VfZ2V0YihiLG8pCQkJXAorICh7CQkJCQkJXAorCXVuc2lnbmVkIGludCBfX3YsIF9fciA9IChiKTsJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQlcCisJCSJsZHJiCSUwLCBbJTEsICUyXSIJCVwKKwkJOiAiPXIiIChfX3YpCQkJXAorCQk6ICJyIiAoX19yKSwgIklyIiAobykpOwkJXAorCV9fdjsJCQkJCVwKKyB9KQorCisjZGVmaW5lIF9fYXJjaF9iYXNlX2dldGwoYixvKQkJCVwKKyAoewkJCQkJCVwKKwl1bnNpZ25lZCBpbnQgX192LCBfX3IgPSAoYik7CQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJXAorCQkibGRyCSUwLCBbJTEsICUyXSIJCVwKKwkJOiAiPXIiIChfX3YpCQkJXAorCQk6ICJyIiAoX19yKSwgIklyIiAobykpOwkJXAorCV9fdjsJCQkJCVwKKyB9KQorCisjZGVmaW5lIF9fYXJjaF9iYXNlX3B1dGIodixiLG8pCQkJXAorICh7CQkJCQkJXAorCXVuc2lnbmVkIGludCBfX3IgPSAoYik7CQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCVwKKwkJInN0cmIJJTAsIFslMSwgJTJdIgkJXAorCQk6CQkJCVwKKwkJOiAiciIgKHYpLCAiciIgKF9fciksICJJciIgKG8pKTtcCisgfSkKKworI2RlZmluZSBfX2FyY2hfYmFzZV9wdXRsKHYsYixvKQkJCVwKKyAoewkJCQkJCVwKKwl1bnNpZ25lZCBpbnQgX19yID0gKGIpOwkJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQlcCisJCSJzdHIJJTAsIFslMSwgJTJdIgkJXAorCQk6CQkJCVwKKwkJOiAiciIgKHYpLCAiciIgKF9fciksICJJciIgKG8pKTtcCisgfSkKKworLyoKKyAqIFdlIHVzZSB0d28gZGlmZmVyZW50IHR5cGVzIG9mIGFkZHJlc3NpbmcgLSBQQyBzdHlsZSBhZGRyZXNzZXMsIGFuZCBBUk0KKyAqIGFkZHJlc3Nlcy4gIFBDIHN0eWxlIGFjY2Vzc2VzIHRoZSBQQyBoYXJkd2FyZSB3aXRoIHRoZSBub3JtYWwgUEMgSU8KKyAqIGFkZHJlc3NlcywgZWcgMHgzZjggZm9yIHNlcmlhbCMxLiAgQVJNIGFkZHJlc3NlcyBhcmUgMHg4MDAwMDAwMCsKKyAqIGFuZCBhcmUgdHJhbnNsYXRlZCB0byB0aGUgc3RhcnQgb2YgSU8uICBOb3RlIHRoYXQgYWxsIGFkZHJlc3NlcyBhcmUKKyAqIHNoaWZ0ZWQgbGVmdCEKKyAqLworI2RlZmluZSBfX1BPUlRfUENJTyh4KQkoISgoeCkgJiAweDgwMDAwMDAwKSkKKworLyoKKyAqIER5bmFtaWMgSU8gZnVuY3Rpb25zLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19vdXRiICh1bnNpZ25lZCBpbnQgdmFsdWUsIHVuc2lnbmVkIGludCBwb3J0KQoreworCXVuc2lnbmVkIGxvbmcgdGVtcDsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkidHN0CSUyLCAjMHg4MDAwMDAwMFxuXHQiCisJIm1vdgklMCwgJTRcblx0IgorCSJhZGRlcQklMCwgJTAsICUzXG5cdCIKKwkic3RyYgklMSwgWyUwLCAlMiwgbHNsICMyXQlAIG91dGIiCisJOiAiPSZyIiAodGVtcCkKKwk6ICJyIiAodmFsdWUpLCAiciIgKHBvcnQpLCAiSXIiIChQQ0lPX0JBU0UgLSBJT19CQVNFKSwgIklyIiAoSU9fQkFTRSkKKwk6ICJjYyIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19vdXR3ICh1bnNpZ25lZCBpbnQgdmFsdWUsIHVuc2lnbmVkIGludCBwb3J0KQoreworCXVuc2lnbmVkIGxvbmcgdGVtcDsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkidHN0CSUyLCAjMHg4MDAwMDAwMFxuXHQiCisJIm1vdgklMCwgJTRcblx0IgorCSJhZGRlcQklMCwgJTAsICUzXG5cdCIKKwkic3RyCSUxLCBbJTAsICUyLCBsc2wgIzJdCUAgb3V0dyIKKwk6ICI9JnIiICh0ZW1wKQorCTogInIiICh2YWx1ZXx2YWx1ZTw8MTYpLCAiciIgKHBvcnQpLCAiSXIiIChQQ0lPX0JBU0UgLSBJT19CQVNFKSwgIklyIiAoSU9fQkFTRSkKKwk6ICJjYyIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19vdXRsICh1bnNpZ25lZCBpbnQgdmFsdWUsIHVuc2lnbmVkIGludCBwb3J0KQoreworCXVuc2lnbmVkIGxvbmcgdGVtcDsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkidHN0CSUyLCAjMHg4MDAwMDAwMFxuXHQiCisJIm1vdgklMCwgJTRcblx0IgorCSJhZGRlcQklMCwgJTAsICUzXG5cdCIKKwkic3RyCSUxLCBbJTAsICUyLCBsc2wgIzJdCUAgb3V0bCIKKwk6ICI9JnIiICh0ZW1wKQorCTogInIiICh2YWx1ZSksICJyIiAocG9ydCksICJJciIgKFBDSU9fQkFTRSAtIElPX0JBU0UpLCAiSXIiIChJT19CQVNFKQorCTogImNjIik7Cit9CisKKyNkZWZpbmUgREVDTEFSRV9EWU5fSU4oc3osZm5zdWZmaXgsaW5zdHIpCQkJCQlcCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHN6IF9faW4jI2Zuc3VmZml4ICh1bnNpZ25lZCBpbnQgcG9ydCkJCVwKK3sJCQkJCQkJCQkJXAorCXVuc2lnbmVkIGxvbmcgdGVtcCwgdmFsdWU7CQkJCQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCQlcCisJInRzdAklMiwgIzB4ODAwMDAwMDBcblx0IgkJCQkJCVwKKwkibW92CSUwLCAlNFxuXHQiCQkJCQkJCVwKKwkiYWRkZXEJJTAsICUwLCAlM1xuXHQiCQkJCQkJCVwKKwkibGRyIiBpbnN0ciAiCSUxLCBbJTAsICUyLCBsc2wgIzJdCUAgaW4iICNmbnN1ZmZpeAkJCVwKKwk6ICI9JnIiICh0ZW1wKSwgIj1yIiAodmFsdWUpCQkJCQkJXAorCTogInIiIChwb3J0KSwgIklyIiAoUENJT19CQVNFIC0gSU9fQkFTRSksICJJciIgKElPX0JBU0UpCQlcCisJOiAiY2MiKTsJCQkJCQkJCVwKKwlyZXR1cm4gKHVuc2lnbmVkIHN6KXZhbHVlOwkJCQkJCVwKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKl9faW9hZGRyKHVuc2lnbmVkIGludCBwb3J0KQoreworCXZvaWQgX19pb21lbSAqcmV0OworCWlmIChfX1BPUlRfUENJTyhwb3J0KSkKKwkJcmV0ID0gUENJT19CQVNFOworCWVsc2UKKwkJcmV0ID0gSU9fQkFTRTsKKwlyZXR1cm4gcmV0ICsgKHBvcnQgPDwgMik7Cit9CisKKyNkZWZpbmUgREVDTEFSRV9JTyhzeixmbnN1ZmZpeCxpbnN0cikJXAorCURFQ0xBUkVfRFlOX0lOKHN6LGZuc3VmZml4LGluc3RyKQorCitERUNMQVJFX0lPKGNoYXIsYiwiYiIpCitERUNMQVJFX0lPKHNob3J0LHcsIiIpCitERUNMQVJFX0lPKGludCxsLCIiKQorCisjdW5kZWYgREVDTEFSRV9JTworI3VuZGVmIERFQ0xBUkVfRFlOX0lOCisKKy8qCisgKiBDb25zdGFudCBhZGRyZXNzIElPIGZ1bmN0aW9ucworICoKKyAqIFRoZXNlIGhhdmUgdG8gYmUgbWFjcm9zIGZvciB0aGUgJ0onIGNvbnN0cmFpbnQgdG8gd29yayAtCisgKiArLy00MDk2IGltbWVkaWF0ZSBvcGVyYW5kLgorICovCisjZGVmaW5lIF9fb3V0YmModmFsdWUscG9ydCkJCQkJCQkJXAorKHsJCQkJCQkJCQkJXAorCWlmIChfX1BPUlRfUENJTygocG9ydCkpKQkJCQkJCVwKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAorCQkic3RyYgklMCwgWyUxLCAlMl0JQCBvdXRiYyIJCQkJXAorCQk6IDogInIiICh2YWx1ZSksICJyIiAoUENJT19CQVNFKSwgIkpyIiAoKHBvcnQpIDw8IDIpKTsJCVwKKwllbHNlCQkJCQkJCQkJXAorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQlcCisJCSJzdHJiCSUwLCBbJTEsICUyXQlAIG91dGJjIgkJCQlcCisJCTogOiAiciIgKHZhbHVlKSwgInIiIChJT19CQVNFKSwgInIiICgocG9ydCkgPDwgMikpOwkJXAorfSkKKworI2RlZmluZSBfX2luYmMocG9ydCkJCQkJCQkJCVwKKyh7CQkJCQkJCQkJCVwKKwl1bnNpZ25lZCBjaGFyIHJlc3VsdDsJCQkJCQkJXAorCWlmIChfX1BPUlRfUENJTygocG9ydCkpKQkJCQkJCVwKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAorCQkibGRyYgklMCwgWyUxLCAlMl0JQCBpbmJjIgkJCQkJXAorCQk6ICI9ciIgKHJlc3VsdCkgOiAiciIgKFBDSU9fQkFTRSksICJKciIgKChwb3J0KSA8PCAyKSk7CQlcCisJZWxzZQkJCQkJCQkJCVwKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAorCQkibGRyYgklMCwgWyUxLCAlMl0JQCBpbmJjIgkJCQkJXAorCQk6ICI9ciIgKHJlc3VsdCkgOiAiciIgKElPX0JBU0UpLCAiciIgKChwb3J0KSA8PCAyKSk7CQlcCisJcmVzdWx0OwkJCQkJCQkJCVwKK30pCisKKyNkZWZpbmUgX19vdXR3Yyh2YWx1ZSxwb3J0KQkJCQkJCQlcCisoewkJCQkJCQkJCQlcCisJdW5zaWduZWQgbG9uZyBfX3YgPSB2YWx1ZTsJCQkJCQlcCisJaWYgKF9fUE9SVF9QQ0lPKChwb3J0KSkpCQkJCQkJXAorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQlcCisJCSJzdHIJJTAsIFslMSwgJTJdCUAgb3V0d2MiCQkJCVwKKwkJOiA6ICJyIiAoX192fF9fdjw8MTYpLCAiciIgKFBDSU9fQkFTRSksICJKciIgKChwb3J0KSA8PCAyKSk7CVwKKwllbHNlCQkJCQkJCQkJXAorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQlcCisJCSJzdHIJJTAsIFslMSwgJTJdCUAgb3V0d2MiCQkJCVwKKwkJOiA6ICJyIiAoX192fF9fdjw8MTYpLCAiciIgKElPX0JBU0UpLCAiciIgKChwb3J0KSA8PCAyKSk7CQlcCit9KQorCisjZGVmaW5lIF9faW53Yyhwb3J0KQkJCQkJCQkJXAorKHsJCQkJCQkJCQkJXAorCXVuc2lnbmVkIHNob3J0IHJlc3VsdDsJCQkJCQkJXAorCWlmIChfX1BPUlRfUENJTygocG9ydCkpKQkJCQkJCVwKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAorCQkibGRyCSUwLCBbJTEsICUyXQlAIGlud2MiCQkJCQlcCisJCTogIj1yIiAocmVzdWx0KSA6ICJyIiAoUENJT19CQVNFKSwgIkpyIiAoKHBvcnQpIDw8IDIpKTsJCVwKKwllbHNlCQkJCQkJCQkJXAorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQlcCisJCSJsZHIJJTAsIFslMSwgJTJdCUAgaW53YyIJCQkJCVwKKwkJOiAiPXIiIChyZXN1bHQpIDogInIiIChJT19CQVNFKSwgInIiICgocG9ydCkgPDwgMikpOwkJXAorCXJlc3VsdCAmIDB4ZmZmZjsJCQkJCQkJXAorfSkKKworI2RlZmluZSBfX291dGxjKHZhbHVlLHBvcnQpCQkJCQkJCVwKKyh7CQkJCQkJCQkJCVwKKwl1bnNpZ25lZCBsb25nIF9fdiA9IHZhbHVlOwkJCQkJCVwKKwlpZiAoX19QT1JUX1BDSU8oKHBvcnQpKSkJCQkJCQlcCisJCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCVwKKwkJInN0cgklMCwgWyUxLCAlMl0JQCBvdXRsYyIJCQkJXAorCQk6IDogInIiIChfX3YpLCAiciIgKFBDSU9fQkFTRSksICJKciIgKChwb3J0KSA8PCAyKSk7CQlcCisJZWxzZQkJCQkJCQkJCVwKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAorCQkic3RyCSUwLCBbJTEsICUyXQlAIG91dGxjIgkJCQlcCisJCTogOiAiciIgKF9fdiksICJyIiAoSU9fQkFTRSksICJyIiAoKHBvcnQpIDw8IDIpKTsJCVwKK30pCisKKyNkZWZpbmUgX19pbmxjKHBvcnQpCQkJCQkJCQlcCisoewkJCQkJCQkJCQlcCisJdW5zaWduZWQgbG9uZyByZXN1bHQ7CQkJCQkJCVwKKwlpZiAoX19QT1JUX1BDSU8oKHBvcnQpKSkJCQkJCQlcCisJCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCVwKKwkJImxkcgklMCwgWyUxLCAlMl0JQCBpbmxjIgkJCQkJXAorCQk6ICI9ciIgKHJlc3VsdCkgOiAiciIgKFBDSU9fQkFTRSksICJKciIgKChwb3J0KSA8PCAyKSk7CQlcCisJZWxzZQkJCQkJCQkJCVwKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAorCQkibGRyCSUwLCBbJTEsICUyXQlAIGlubGMiCQkJCQlcCisJCTogIj1yIiAocmVzdWx0KSA6ICJyIiAoSU9fQkFTRSksICJyIiAoKHBvcnQpIDw8IDIpKTsJCVwKKwlyZXN1bHQ7CQkJCQkJCQkJXAorfSkKKworI2RlZmluZSBfX2lvYWRkcmMocG9ydCkJCVwKKwkoKF9fUE9SVF9QQ0lPKHBvcnQpID8gUENJT19CQVNFIDogSU9fQkFTRSkgKyAoKHBvcnQpIDw8IDIpKQorCisjZGVmaW5lIGluYihwKQkgCShfX2J1aWx0aW5fY29uc3RhbnRfcCgocCkpID8gX19pbmJjKHApICAgIDogX19pbmIocCkpCisjZGVmaW5lIGludyhwKQkgCShfX2J1aWx0aW5fY29uc3RhbnRfcCgocCkpID8gX19pbndjKHApICAgIDogX19pbncocCkpCisjZGVmaW5lIGlubChwKQkgCShfX2J1aWx0aW5fY29uc3RhbnRfcCgocCkpID8gX19pbmxjKHApICAgIDogX19pbmwocCkpCisjZGVmaW5lIG91dGIodixwKQkoX19idWlsdGluX2NvbnN0YW50X3AoKHApKSA/IF9fb3V0YmModixwKSA6IF9fb3V0Yih2LHApKQorI2RlZmluZSBvdXR3KHYscCkJKF9fYnVpbHRpbl9jb25zdGFudF9wKChwKSkgPyBfX291dHdjKHYscCkgOiBfX291dHcodixwKSkKKyNkZWZpbmUgb3V0bCh2LHApCShfX2J1aWx0aW5fY29uc3RhbnRfcCgocCkpID8gX19vdXRsYyh2LHApIDogX19vdXRsKHYscCkpCisjZGVmaW5lIF9faW9hZGRyKHApCShfX2J1aWx0aW5fY29uc3RhbnRfcCgocCkpID8gX19pb2FkZHIocCkgIDogX19pb2FkZHJjKHApKQorLyogdGhlIGZvbGxvd2luZyBtYWNybyBpcyBkZXByZWNhdGVkICovCisjZGVmaW5lIGlvYWRkcihwb3J0KQkoKHVuc2lnbmVkIGxvbmcpX19pb2FkZHIoKHBvcnQpKSkKKworI2RlZmluZSBpbnNiKHAsZCxsKQlfX3Jhd19yZWFkc2IoX19pb2FkZHIocCksZCxsKQorI2RlZmluZSBpbnN3KHAsZCxsKQlfX3Jhd19yZWFkc3coX19pb2FkZHIocCksZCxsKQorCisjZGVmaW5lIG91dHNiKHAsZCxsKQlfX3Jhd193cml0ZXNiKF9faW9hZGRyKHApLGQsbCkKKyNkZWZpbmUgb3V0c3cocCxkLGwpCV9fcmF3X3dyaXRlc3coX19pb2FkZHIocCksZCxsKQorCisvKgorICogMToxIG1hcHBpbmcgZm9yIGlvcmVtYXBwZWQgcmVnaW9ucy4KKyAqLworI2RlZmluZSBfX21lbV9wY2koeCkJKHgpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcnBjL2lycXMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXJwYy9pcnFzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdjMzViMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXJwYy9pcnFzLmgKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1ycGMvaXJxcy5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NiBSdXNzZWxsIEtpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNkZWZpbmUgSVJRX1BSSU5URVIJCTAKKyNkZWZpbmUgSVJRX0JBVExPVwkJMQorI2RlZmluZSBJUlFfRkxPUFBZSU5ERVgJCTIKKyNkZWZpbmUgSVJRX1ZTWU5DUFVMU0UJCTMKKyNkZWZpbmUgSVJRX1BPV0VST04JCTQKKyNkZWZpbmUgSVJRX1RJTUVSMAkJNQorI2RlZmluZSBJUlFfVElNRVIxCQk2CisjZGVmaW5lIElSUV9JTU1FRElBVEUJCTcKKyNkZWZpbmUgSVJRX0VYUENBUkRGSVEJCTgKKyNkZWZpbmUgSVJRX0hBUkRESVNLCQk5CisjZGVmaW5lIElSUV9TRVJJQUxQT1JUCQkxMAorI2RlZmluZSBJUlFfRkxPUFBZRElTSwkJMTIKKyNkZWZpbmUgSVJRX0VYUEFOU0lPTkNBUkQJMTMKKyNkZWZpbmUgSVJRX0tFWUJPQVJEVFgJCTE0CisjZGVmaW5lIElSUV9LRVlCT0FSRFJYCQkxNQorCisjZGVmaW5lIElSUV9ETUEwCQkxNgorI2RlZmluZSBJUlFfRE1BMQkJMTcKKyNkZWZpbmUgSVJRX0RNQTIJCTE4CisjZGVmaW5lIElSUV9ETUEzCQkxOQorI2RlZmluZSBJUlFfRE1BUzAJCTIwCisjZGVmaW5lIElSUV9ETUFTMQkJMjEKKworI2RlZmluZSBGSVFfRkxPUFBZREFUQQkJMAorI2RlZmluZSBGSVFfRUNPTkVUCQkyCisjZGVmaW5lIEZJUV9TRVJJQUxQT1JUCQk0CisjZGVmaW5lIEZJUV9FWFBBTlNJT05DQVJECTYKKyNkZWZpbmUgRklRX0ZPUkNFCQk3CisKKy8qCisgKiBUaGlzIGlzIHRoZSBvZmZzZXQgb2YgdGhlIEZJUSAiSVJRIiBudW1iZXJzCisgKi8KKyNkZWZpbmUgRklRX1NUQVJUCQk2NAorCisjZGVmaW5lIElSUV9USU1FUgkJSVJRX1RJTUVSMAorCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1ycGMvbWVtb3J5LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1ycGMvbWVtb3J5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNmYzc1YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXJwYy9tZW1vcnkuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLXJwYy9tZW1vcnkuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTYsMTk5NywxOTk4IFJ1c3NlbGwgS2luZy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBDaGFuZ2Vsb2c6CisgKiAgIDIwLU9jdC0xOTk2IFJNSwlDcmVhdGVkCisgKiAgIDMxLURlYy0xOTk3IFJNSwlGaXhlZCBkZWZpbml0aW9ucyB0byByZWR1Y2Ugd2FybmluZ3MKKyAqICAgMTEtSmFuLTE5OTggUk1LCVVuaW5saW5lZCB0byByZWR1Y2UgaGl0cyBvbiBjYWNoZQorICogICAwOC1GZWItMTk5OCBSTUsJQWRkZWQgX192aXJ0X3RvX2J1cyBhbmQgX19idXNfdG9fdmlydAorICogICAyMS1NYXItMTk5OSBSTUsJUmVuYW1lZCB0byBtZW1vcnkuaAorICoJCSBSTUsJQWRkZWQgVEFTS19TSVpFIGFuZCBQQUdFX09GRlNFVAorICovCisjaWZuZGVmIF9fQVNNX0FSQ0hfTUVNT1JZX0gKKyNkZWZpbmUgX19BU01fQVJDSF9NRU1PUllfSAorCisvKgorICogUGh5c2ljYWwgRFJBTSBvZmZzZXQuCisgKi8KKyNkZWZpbmUgUEhZU19PRkZTRVQJKDB4MTAwMDAwMDBVTCkKKworLyoKKyAqIFRoZXNlIGFyZSBleGFjdGx5IHRoZSBzYW1lIG9uIHRoZSBSaXNjUEMgYXMgdGhlCisgKiBwaHlzaWNhbCBtZW1vcnkgdmlldy4KKyAqLworI2RlZmluZSBfX3ZpcnRfdG9fYnVzKHgpIF9fdmlydF90b19waHlzKHgpCisjZGVmaW5lIF9fYnVzX3RvX3ZpcnQoeCkgX19waHlzX3RvX3ZpcnQoeCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1ycGMvcGFyYW0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXJwYy9wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyMWRjZDYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1ycGMvcGFyYW0uaApAQCAtMCwwICsxLDMgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtcnBjL3BhcmFtLmgKKyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcnBjL3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcnBjL3N5c3RlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhMzI3N2QKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1ycGMvc3lzdGVtLmgKQEAgLTAsMCArMSwyNyBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1ycGMvc3lzdGVtLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk2LTE5OTkgUnVzc2VsbCBLaW5nLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9pb21kLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2lkbGUodm9pZCkKK3sKKwljcHVfZG9faWRsZSgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUpCit7CisJaW9tZF93cml0ZWIoMCwgSU9NRF9ST01DUjApOworCisJLyoKKwkgKiBKdW1wIGludG8gdGhlIFJPTQorCSAqLworCWNwdV9yZXNldCgwKTsKK30KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXJwYy90aW1leC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcnBjL3RpbWV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ3ZGY2NAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXJwYy90aW1leC5oCkBAIC0wLDAgKzEsMTcgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtcnBjL3RpbWV4LmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk3LCAxOTk4IFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIFJpc2NQQyBhcmNoaXRlY3R1cmUgdGltZXggc3BlY2lmaWNhdGlvbnMKKyAqLworCisvKgorICogT24gdGhlIFJpc2NQQywgdGhlIGNsb2NrIHRpY2tzIGF0IDJNSHouCisgKi8KKyNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFCQkyMDAwMDAwCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXJwYy91bmNvbXByZXNzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1ycGMvdW5jb21wcmVzcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzMDM1ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1ycGMvdW5jb21wcmVzcy5oCkBAIC0wLDAgKzEsMTU1IEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLXJwYy91bmNvbXByZXNzLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk2IFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNkZWZpbmUgVklETUVNICgoY2hhciAqKVNDUkVFTl9TVEFSVCkKKyAKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworaW50IHZpZGVvX251bV9jb2x1bW5zLCB2aWRlb19udW1fbGluZXMsIHZpZGVvX3NpemVfcm93OworaW50IHdoaXRlLCBieXRlc19wZXJfY2hhcl9oOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgY29uX2NoYXJjb252dGFibGVbMjU2XTsKKworc3RydWN0IHBhcmFtX3N0cnVjdCB7CisJdW5zaWduZWQgbG9uZyBwYWdlX3NpemU7CisJdW5zaWduZWQgbG9uZyBucl9wYWdlczsKKwl1bnNpZ25lZCBsb25nIHJhbWRpc2tfc2l6ZTsKKwl1bnNpZ25lZCBsb25nIG1vdW50cm9vdHJkb25seTsKKwl1bnNpZ25lZCBsb25nIHJvb3RkZXY7CisJdW5zaWduZWQgbG9uZyB2aWRlb19udW1fY29sczsKKwl1bnNpZ25lZCBsb25nIHZpZGVvX251bV9yb3dzOworCXVuc2lnbmVkIGxvbmcgdmlkZW9feDsKKwl1bnNpZ25lZCBsb25nIHZpZGVvX3k7CisJdW5zaWduZWQgbG9uZyBtZW1jX2NvbnRyb2xfcmVnOworCXVuc2lnbmVkIGNoYXIgc291bmRkZWZhdWx0OworCXVuc2lnbmVkIGNoYXIgYWRmc2RyaXZlczsKKwl1bnNpZ25lZCBjaGFyIGJ5dGVzX3Blcl9jaGFyX2g7CisJdW5zaWduZWQgY2hhciBieXRlc19wZXJfY2hhcl92OworCXVuc2lnbmVkIGxvbmcgdW51c2VkWzI1Ni80LTExXTsKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIHBhbGV0dGVfNFsxNl0gPSB7CisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMGNjLAorCTB4MDAwMGNjMDAsICAgICAgICAgICAgIC8qIEdyZWVuICAgKi8KKwkweDAwMDBjY2NjLCAgICAgICAgICAgICAvKiBZZWxsb3cgICovCisJMHgwMGNjMDAwMCwgICAgICAgICAgICAgLyogQmx1ZSAgICAqLworCTB4MDBjYzAwY2MsICAgICAgICAgICAgIC8qIE1hZ2VudGEgKi8KKwkweDAwY2NjYzAwLCAgICAgICAgICAgICAvKiBDeWFuICAgICovCisJMHgwMGNjY2NjYywgICAgICAgICAgICAgLyogV2hpdGUgICAqLworCTB4MDAwMDAwMDAsCisJMHgwMDAwMDBmZiwKKwkweDAwMDBmZjAwLAorCTB4MDAwMGZmZmYsCisJMHgwMGZmMDAwMCwKKwkweDAwZmYwMGZmLAorCTB4MDBmZmZmMDAsCisJMHgwMGZmZmZmZgorfTsKKworI2RlZmluZSBwYWxldHRlX3NldHBpeGVsKHApCSoodW5zaWduZWQgbG9uZyAqKShJT19TVEFSVCsweDAwNDAwMDAwKSA9IDB4MTAwMDAwMDB8KChwKSAmIDI1NSkKKyNkZWZpbmUgcGFsZXR0ZV93cml0ZSh2KQkqKHVuc2lnbmVkIGxvbmcgKikoSU9fU1RBUlQrMHgwMDQwMDAwMCkgPSAweDAwMDAwMDAwfCgodikgJiAweDAwZmZmZmZmKQorCisvKgorICogcGFyYW1zX3BoeXMgaXMgYSBsaW5rZXIgZGVmaW5lZCBzeW1ib2wgLSBzZWUKKyAqIGFyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQorICovCitleHRlcm4gX19hdHRyaWJ1dGVfXygocHVyZSkpIHN0cnVjdCBwYXJhbV9zdHJ1Y3QgKnBhcmFtcyh2b2lkKTsKKyNkZWZpbmUgcGFyYW1zIChwYXJhbXMoKSkKKworI2lmbmRlZiBTVEFOREFMT05FX0RFQlVHIAorLyoKKyAqIFRoaXMgZG9lcyBub3QgYXBwZW5kIGEgbmV3bGluZQorICovCitzdGF0aWMgdm9pZCBwdXRzdHIoY29uc3QgY2hhciAqcykKK3sKKwlleHRlcm4gdm9pZCBsbF93cml0ZV9jaGFyKGNoYXIgKiwgY2hhciBjLCBjaGFyIHdoaXRlKTsKKwlpbnQgeCx5OworCXVuc2lnbmVkIGNoYXIgYzsKKwljaGFyICpwdHI7CisKKwl4ID0gcGFyYW1zLT52aWRlb194OworCXkgPSBwYXJhbXMtPnZpZGVvX3k7CisKKwl3aGlsZSAoICggYyA9ICoodW5zaWduZWQgY2hhciAqKXMrKyApICE9ICdcMCcgKSB7CisJCWlmICggYyA9PSAnXG4nICkgeworCQkJeCA9IDA7CisJCQlpZiAoICsreSA+PSB2aWRlb19udW1fbGluZXMgKSB7CisJCQkJeS0tOworCQkJfQorCQl9IGVsc2UgeworCQkJcHRyID0gVklETUVNICsgKCh5KnZpZGVvX251bV9jb2x1bW5zKnBhcmFtcy0+Ynl0ZXNfcGVyX2NoYXJfdit4KSpieXRlc19wZXJfY2hhcl9oKTsKKwkJCWxsX3dyaXRlX2NoYXIocHRyLCBjLCB3aGl0ZSk7CisJCQlpZiAoICsreCA+PSB2aWRlb19udW1fY29sdW1ucyApIHsKKwkJCQl4ID0gMDsKKwkJCQlpZiAoICsreSA+PSB2aWRlb19udW1fbGluZXMgKSB7CisJCQkJCXktLTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwlwYXJhbXMtPnZpZGVvX3ggPSB4OworCXBhcmFtcy0+dmlkZW9feSA9IHk7Cit9CisKK3N0YXRpYyB2b2lkIGVycm9yKGNoYXIgKngpOworCisvKgorICogU2V0dXAgZm9yIGRlY29tcHJlc3Npb24KKyAqLworc3RhdGljIHZvaWQgYXJjaF9kZWNvbXBfc2V0dXAodm9pZCkKK3sKKwlpbnQgaTsKKwkKKwl2aWRlb19udW1fbGluZXMgPSBwYXJhbXMtPnZpZGVvX251bV9yb3dzOworCXZpZGVvX251bV9jb2x1bW5zID0gcGFyYW1zLT52aWRlb19udW1fY29sczsKKwlieXRlc19wZXJfY2hhcl9oID0gcGFyYW1zLT5ieXRlc19wZXJfY2hhcl9oOworCXZpZGVvX3NpemVfcm93ID0gdmlkZW9fbnVtX2NvbHVtbnMgKiBieXRlc19wZXJfY2hhcl9oOworCWlmIChieXRlc19wZXJfY2hhcl9oID09IDQpCisJCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKKwkJCWNvbl9jaGFyY29udnRhYmxlW2ldID0KKwkJCQkoaSAmIDEyOCA/IDEgPDwgMCAgOiAwKSB8CisJCQkJKGkgJiA2NCAgPyAxIDw8IDQgIDogMCkgfAorCQkJCShpICYgMzIgID8gMSA8PCA4ICA6IDApIHwKKwkJCQkoaSAmIDE2ICA/IDEgPDwgMTIgOiAwKSB8CisJCQkJKGkgJiA4ICAgPyAxIDw8IDE2IDogMCkgfAorCQkJCShpICYgNCAgID8gMSA8PCAyMCA6IDApIHwKKwkJCQkoaSAmIDIgICA/IDEgPDwgMjQgOiAwKSB8CisJCQkJKGkgJiAxICAgPyAxIDw8IDI4IDogMCk7CisJZWxzZQorCQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKKwkJCWNvbl9jaGFyY29udnRhYmxlW2ldID0KKwkJCQkoaSAmIDggICA/IDEgPDwgMCAgOiAwKSB8CisJCQkJKGkgJiA0ICAgPyAxIDw8IDggIDogMCkgfAorCQkJCShpICYgMiAgID8gMSA8PCAxNiA6IDApIHwKKwkJCQkoaSAmIDEgICA/IDEgPDwgMjQgOiAwKTsKKworCisJcGFsZXR0ZV9zZXRwaXhlbCgwKTsKKwlpZiAoYnl0ZXNfcGVyX2NoYXJfaCA9PSAxKSB7CisJCXBhbGV0dGVfd3JpdGUgKDApOworCQlwYWxldHRlX3dyaXRlICgweDAwZmZmZmZmKTsKKwkJZm9yIChpID0gMjsgaSA8IDI1NjsgaSsrKQorCQkJcGFsZXR0ZV93cml0ZSAoMCk7CisJCXdoaXRlID0gMTsKKwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCisJCQlwYWxldHRlX3dyaXRlIChpIDwgMTYgPyBwYWxldHRlXzRbaV0gOiAwKTsKKwkJd2hpdGUgPSA3OworCX0KKworCWlmIChwYXJhbXMtPm5yX3BhZ2VzICogcGFyYW1zLT5wYWdlX3NpemUgPCA0MDk2KjEwMjQpIGVycm9yKCI8NE0gb2YgbWVtXG4iKTsKK30KKyNlbmRpZgorCisvKgorICogbm90aGluZyB0byBkbworICovCisjZGVmaW5lIGFyY2hfZGVjb21wX3dkb2coKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcnBjL3ZtYWxsb2MuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXJwYy92bWFsbG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTEzYzI3ZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXJwYy92bWFsbG9jLmgKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1ycGMvdm1hbGxvYy5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NyBSdXNzZWxsIEtpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKy8qCisgKiBKdXN0IGFueSBhcmJpdHJhcnkgb2Zmc2V0IHRvIHRoZSBzdGFydCBvZiB0aGUgdm1hbGxvYyBWTSBhcmVhOiB0aGUKKyAqIGN1cnJlbnQgOE1CIHZhbHVlIGp1c3QgbWVhbnMgdGhhdCB0aGVyZSB3aWxsIGJlIGEgOE1CICJob2xlIiBhZnRlciB0aGUKKyAqIHBoeXNpY2FsIG1lbW9yeSB1bnRpbCB0aGUga2VybmVsIHZpcnR1YWwgbWVtb3J5IHN0YXJ0cy4gIFRoYXQgbWVhbnMgdGhhdAorICogYW55IG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIHdpbGwgaG9wZWZ1bGx5IGJlIGNhdWdodC4KKyAqIFRoZSB2bWFsbG9jKCkgcm91dGluZXMgbGVhdmVzIGEgaG9sZSBvZiA0a0IgYmV0d2VlbiBlYWNoIHZtYWxsb2NlZAorICogYXJlYSBmb3IgdGhlIHNhbWUgcmVhc29uLiA7KQorICovCisjZGVmaW5lIFZNQUxMT0NfT0ZGU0VUCSAgKDgqMTAyNCoxMDI0KQorI2RlZmluZSBWTUFMTE9DX1NUQVJUCSAgKCgodW5zaWduZWQgbG9uZyloaWdoX21lbW9yeSArIFZNQUxMT0NfT0ZGU0VUKSAmIH4oVk1BTExPQ19PRkZTRVQtMSkpCisjZGVmaW5lIFZNQUxMT0NfRU5EICAgICAgIChQQUdFX09GRlNFVCArIDB4MWMwMDAwMDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2Jhc3QtY3BsZC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9iYXN0LWNwbGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjhjYTUxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9iYXN0LWNwbGQuaApAQCAtMCwwICsxLDU4IEBACisvKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2Jhc3QtY3BsZC5oCisgKgorICogKGMpIDIwMDMsMjAwNCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqICBCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogQkFTVCAtIENQTEQgY29udHJvbCBjb25zdGFudHMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIENoYW5nZWxvZzoKKyAqICAyNS1NYXktMjAwMyBCSkQgIENyZWF0ZWQgZmlsZSwgYWRkZWQgQ1RSTDEgcmVnaXN0ZXJzCisgKiAgMzAtQXVnLTIwMDQgQkpEICBVcGRhdGVkIGRlZmluaXRpb25zIGZyb20gMi40LjI2IHBvcnQKKyAqICAzMC1BdWctMjAwNCBCSkQgIEFkZGVkIENUUkwzIGFuZCBDVFJMNCBkZWZpbml0aW9ucworKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX0JBU1RDUExEX0gKKyNkZWZpbmUgX19BU01fQVJDSF9CQVNUQ1BMRF9ICisKKy8qIENUUkwxIC0gQXVkaW8gTFIgcm91dGluZyAqLworCisjZGVmaW5lIEJBU1RfQ1BMRF9DVFJMMV9MUkNPRkYJICAgICgweDAwKQorI2RlZmluZSBCQVNUX0NQTERfQ1RSTDFfTFJDQURDCSAgICAoMHgwMSkKKyNkZWZpbmUgQkFTVF9DUExEX0NUUkwxX0xSQ0RBQwkgICAgKDB4MDIpCisjZGVmaW5lIEJBU1RfQ1BMRF9DVFJMMV9MUkNBUk0JICAgICgweDAzKQorI2RlZmluZSBCQVNUX0NQTERfQ1RSTDFfTFJNQVNLCSAgICAoMHgwMykKKworLyogQ1RSTDIgLSBOQU5EIFdQIGNvbnRyb2wsIElERSBSZXNldCBhc3NlcnQvY2hlY2sgKi8KKworI2RlZmluZSBCQVNUX0NQTERfQ1RSTDJfV05BTkQgICAgICAgKDB4MDQpCisjZGVmaW5lIEJBU1RfQ1BMRF9DVExSMl9JREVSU1QgICAgICAoMHgwOCkKKworLyogQ1RSTDMgLSByb20gd3JpdGUgY29udHJvbCwgQ1BMRCBpZGVudGl0eSAqLworCisjZGVmaW5lIEJBU1RfQ1BMRF9DVFJMM19JRE1BU0sgICAgICAoMHgwZSkKKyNkZWZpbmUgQkFTVF9DUExEX0NUUkwzX1JPTVdFTiAgICAgICgweDAxKQorCisvKiBDVFJMNCAtIDhiaXQgTENEIGludGVyZmFjZSBjb250cm9sL3N0YXR1cyAqLworCisjZGVmaW5lIEJBU1RfQ1BMRF9DVFJMNF9MTEFUCSAgICAoMHgwMSkKKyNkZWZpbmUgQkFTVF9DUExEX0NUUkw0X0xDRFJXCSAgICAoMHgwMikKKyNkZWZpbmUgQkFTVF9DUExEX0NUUkw0X0xDRENNRAkgICAgKDB4MDQpCisjZGVmaW5lIEJBU1RfQ1BMRF9DVFJMNF9MQ0RFMgkgICAgKDB4MDEpCisKKy8qIENUUkw1IC0gRE1BIHJvdXRpbmcgKi8KKworI2RlZmluZSBCQVNUX0NQTERfRE1BMF9QUklJREUgICAgICAoMDw8MCkKKyNkZWZpbmUgQkFTVF9DUExEX0RNQTBfU0VDSURFICAgICAgKDE8PDApCisjZGVmaW5lIEJBU1RfQ1BMRF9ETUEwX0lTQTE1ICAgICAgICgyPDwwKQorI2RlZmluZSBCQVNUX0NQTERfRE1BMF9JU0EzNiAgICAgICAoMzw8MCkKKworI2RlZmluZSBCQVNUX0NQTERfRE1BMV9QUklJREUgICAgICAoMDw8MikKKyNkZWZpbmUgQkFTVF9DUExEX0RNQTFfU0VDSURFICAgICAgKDE8PDIpCisjZGVmaW5lIEJBU1RfQ1BMRF9ETUExX0lTQTE1ICAgICAgICgyPDwyKQorI2RlZmluZSBCQVNUX0NQTERfRE1BMV9JU0EzNiAgICAgICAoMzw8MikKKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfQkFTVENQTERfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9iYXN0LWlycS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9iYXN0LWlycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3OWI0N2YKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2Jhc3QtaXJxLmgKQEAgLTAsMCArMSwzMyBAQAorLyogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9iYXN0LWlycS5oCisgKgorICogKGMpIDIwMDMsMjAwNCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqICBCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogTWFjaGluZSBCQVNUIC0gSVJRIE51bWJlciBkZWZpbml0aW9ucworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogQ2hhbmdlbG9nOgorICogIDE0LVNlcC0yMDA0IEJKRCAgRml4ZWQgSVJRX1VTQk9DIGRlZmluaXRpb24KKyAqICAwNi1KYW4tMjAwMyBCSkQgIExpbnV4IDIuNi4wIHZlcnNpb24KKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfQkFTVElSUV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfQkFTVElSUV9ICisKKy8qIGlycSBudW1iZXJzIHRvIG9uYm9hcmQgcGVyaXBoZXJhbHMgKi8KKworI2RlZmluZSBJUlFfVVNCT0MgICAgICBJUlFfRUlOVDE4CisjZGVmaW5lIElSUV9JREUwICAgICAgIElSUV9FSU5UMTYKKyNkZWZpbmUgSVJRX0lERTEgICAgICAgSVJRX0VJTlQxNworI2RlZmluZSBJUlFfUENTRVJJQUwxICBJUlFfRUlOVDE1CisjZGVmaW5lIElSUV9QQ1NFUklBTDIgIElSUV9FSU5UMTQKKyNkZWZpbmUgSVJRX1BDUEFSQUxMRUwgSVJRX0VJTlQxMworI2RlZmluZSBJUlFfQVNJWCAgICAgICBJUlFfRUlOVDExCisjZGVmaW5lIElSUV9ETTkwMDAgICAgIElSUV9FSU5UMTAKKyNkZWZpbmUgSVJRX0lTQQkgICAgICAgSVJRX0VJTlQ5CisjZGVmaW5lIElSUV9TTUFMRVJUICAgIElSUV9FSU5UOAorCisjZW5kaWYgLyogX19BU01fQVJDSF9CQVNUSVJRX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvYmFzdC1tYXAuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvYmFzdC1tYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWMwN2UzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9iYXN0LW1hcC5oCkBAIC0wLDAgKzEsMTUwIEBACisvKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2Jhc3QtbWFwLmgKKyAqCisgKiAoYykgMjAwMywyMDA0IFNpbXRlYyBFbGVjdHJvbmljcworICogIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBNYWNoaW5lIEJBU1QgLSBNZW1vcnkgbWFwIGRlZmluaXRpb25zCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBDaGFuZ2Vsb2c6CisgKiAgMDYtSmFuLTIwMDMgQkpEICBMaW51eCAyLjYuMCB2ZXJzaW9uLCBtb3ZlZCBiYXN0IHNwZWNpZmljcyBmcm9tIGFyY2gvbWFwLmgKKyAqICAxMi1NYXItMjAwNCBCSkQgIEZpeGVkIGhlYWRlciBpbmNsdWRlIHByb3RlY3Rpb24KKyovCisKKy8qIG5lZWRzIGFyY2gvbWFwLmggaW5jbHVkaW5nIHdpdGggdGhpcyAqLworCisvKiBvaywgd2UndmUgdXNlZCB1cCB0byAweDEzMDAwMDAwLCBub3cgd2UgbmVlZCB0byBmaW5kIHNwYWNlIGZvciB0aGUKKyAqIHBlcmlwaGVyYWxzIHRoYXQgbGl2ZSBpbiB0aGUgbkdDU1t4XSBhcmVhcywgd2hpY2ggYXJlIHF1aXRlIG51bWVyb3VzCisgKiBpbiB0aGVpciBzcGFjZS4gV2UgYWxzbyBoYXZlIHRoZSBib2FyZCdzIENQTEQgdG8gZmluZCByZWdpc3RlciBzcGFjZQorICogZm9yLgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9CQVNUTUFQX0gKKyNkZWZpbmUgX19BU01fQVJDSF9CQVNUTUFQX0gKKworI2RlZmluZSBCQVNUX0lPQUREUih4KQkgICAoUzNDMjQxMF9BRERSKCh4KSArIDB4MDEzMDAwMDApKQorCisvKiB3ZSBwdXQgdGhlIENQTEQgcmVnaXN0ZXJzIG5leHQsIHRvIGdldCB0aGVtIG91dCBvZiB0aGUgd2F5ICovCisKKyNkZWZpbmUgQkFTVF9WQV9DVFJMMQkgICAgQkFTVF9JT0FERFIoMHgwMDAwMDAwMCkJIC8qIDB4MDEzMDAwMDAgKi8KKyNkZWZpbmUgQkFTVF9QQV9DVFJMMQkgICAgKFMzQzI0MTBfQ1M1IHwgMHg3ODAwMDAwKQorCisjZGVmaW5lIEJBU1RfVkFfQ1RSTDIJICAgIEJBU1RfSU9BRERSKDB4MDAxMDAwMDApCSAvKiAweDAxNDAwMDAwICovCisjZGVmaW5lIEJBU1RfUEFfQ1RSTDIJICAgIChTM0MyNDEwX0NTMSB8IDB4NjAwMDAwMCkKKworI2RlZmluZSBCQVNUX1ZBX0NUUkwzCSAgICBCQVNUX0lPQUREUigweDAwMjAwMDAwKQkgLyogMHgwMTUwMDAwMCAqLworI2RlZmluZSBCQVNUX1BBX0NUUkwzCSAgICAoUzNDMjQxMF9DUzEgfCAweDY4MDAwMDApCisKKyNkZWZpbmUgQkFTVF9WQV9DVFJMNAkgICAgQkFTVF9JT0FERFIoMHgwMDMwMDAwMCkJIC8qIDB4MDE2MDAwMDAgKi8KKyNkZWZpbmUgQkFTVF9QQV9DVFJMNAkgICAgKFMzQzI0MTBfQ1MxIHwgMHg3MDAwMDAwKQorCisvKiBuZXh0LCB3ZSBoYXZlIHRoZSBQQzEwNCBJU0EgaW50ZXJydXB0IHJlZ2lzdGVycyAqLworCisjZGVmaW5lIEJBU1RfUEFfUEMxMDRfSVJRUkVRICAoUzNDMjQxMF9DUzUgfCAweDYwMDAwMDApIC8qIDB4MDE3MDAwMDAgKi8KKyNkZWZpbmUgQkFTVF9WQV9QQzEwNF9JUlFSRVEgIEJBU1RfSU9BRERSKDB4MDA0MDAwMDApCisKKyNkZWZpbmUgQkFTVF9QQV9QQzEwNF9JUlFSQVcgIChTM0MyNDEwX0NTNSB8IDB4NjgwMDAwMCkgLyogMHgwMTgwMDAwMCAqLworI2RlZmluZSBCQVNUX1ZBX1BDMTA0X0lSUVJBVyAgQkFTVF9JT0FERFIoMHgwMDUwMDAwMCkKKworI2RlZmluZSBCQVNUX1BBX1BDMTA0X0lSUU1BU0sgKFMzQzI0MTBfQ1M1IHwgMHg3MDAwMDAwKSAvKiAweDAxOTAwMDAwICovCisjZGVmaW5lIEJBU1RfVkFfUEMxMDRfSVJRTUFTSyBCQVNUX0lPQUREUigweDAwNjAwMDAwKQorCisjZGVmaW5lIEJBU1RfUEFfTENEX1JDTUQxICAgICAoMHg4ODAwMDAwKQorI2RlZmluZSBCQVNUX1ZBX0xDRF9SQ01EMSAgICAgQkFTVF9JT0FERFIoMHgwMDcwMDAwMCkKKworI2RlZmluZSBCQVNUX1BBX0xDRF9XQ01EMSAgICAgKDB4ODAwMDAwMCkKKyNkZWZpbmUgQkFTVF9WQV9MQ0RfV0NNRDEgICAgIEJBU1RfSU9BRERSKDB4MDA4MDAwMDApCisKKyNkZWZpbmUgQkFTVF9QQV9MQ0RfUkRBVEExICAgICgweDk4MDAwMDApCisjZGVmaW5lIEJBU1RfVkFfTENEX1JEQVRBMSAgICBCQVNUX0lPQUREUigweDAwOTAwMDAwKQorCisjZGVmaW5lIEJBU1RfUEFfTENEX1dEQVRBMSAgICAoMHg5MDAwMDAwKQorI2RlZmluZSBCQVNUX1ZBX0xDRF9XREFUQTEgICAgQkFTVF9JT0FERFIoMHgwMEEwMDAwMCkKKworI2RlZmluZSBCQVNUX1BBX0xDRF9SQ01EMiAgICAgKDB4QTgwMDAwMCkKKyNkZWZpbmUgQkFTVF9WQV9MQ0RfUkNNRDIgICAgIEJBU1RfSU9BRERSKDB4MDBCMDAwMDApCisKKyNkZWZpbmUgQkFTVF9QQV9MQ0RfV0NNRDIgICAgICgweEEwMDAwMDApCisjZGVmaW5lIEJBU1RfVkFfTENEX1dDTUQyICAgICBCQVNUX0lPQUREUigweDAwQzAwMDAwKQorCisjZGVmaW5lIEJBU1RfUEFfTENEX1JEQVRBMiAgICAoMHhCODAwMDAwKQorI2RlZmluZSBCQVNUX1ZBX0xDRF9SREFUQTIgICAgQkFTVF9JT0FERFIoMHgwMEQwMDAwMCkKKworI2RlZmluZSBCQVNUX1BBX0xDRF9XREFUQTIgICAgKDB4QjAwMDAwMCkKKyNkZWZpbmUgQkFTVF9WQV9MQ0RfV0RBVEEyICAgIEJBU1RfSU9BRERSKDB4MDBFMDAwMDApCisKKworLyogMHhFMDAwMDAwMCBjb250YWlucyB0aGUgSU8gc3BhY2UgdGhhdCBpcyBzcGxpdCBieSBzcGVlZCBhbmQKKyAqIHdldGhlciB0aGUgYWNjZXNzIGlzIGZvciA4IG9yIDE2Yml0IElPLi4uIHRoaXMgZW5zdXJlcyB0aGF0CisgKiB0aGUgY29ycmVjdCBhY2Nlc3MgaXMgbWFkZQorICoKKyAqIDB4MTAwMDAwMDAgb2Ygc3BhY2UsIHBhcnRpdGlvbmVkIGFzIHNvOgorICoKKyAqIDB4MDAwMDAwMDAgdG8gMHgwNDAwMDAwMCAgOGJpdCwgIHNsb3cKKyAqIDB4MDQwMDAwMDAgdG8gMHgwODAwMDAwMCAgMTZiaXQsIHNsb3cKKyAqIDB4MDgwMDAwMDAgdG8gMHgwQzAwMDAwMCAgMTZiaXQsIG5ldAorICogMHgwQzAwMDAwMCB0byAweDEwMDAwMDAwICAxNmJpdCwgZmFzdAorICoKKyAqIGVhY2ggb2YgdGhlc2Ugc3BhY2VzIGhhcyB0aGUgZm9sbG93aW5nIGluOgorICoKKyAqIDB4MDAwMDAwMDAgdG8gMHgwMTAwMDAwMCAxNk1CIElTQSBJTyBzcGFjZQorICogMHgwMTAwMDAwMCB0byAweDAyMDAwMDAwIDE2TUIgSVNBIG1lbW9yeSBzcGFjZQorICogMHgwMjAwMDAwMCB0byAweDAyMTAwMDAwIDFNQiAgSURFIHByaW1hcnkgY2hhbm5lbAorICogMHgwMjEwMDAwMCB0byAweDAyMjAwMDAwIDFNQiAgSURFIHByaW1hcnkgY2hhbm5lbCBhdXgKKyAqIDB4MDIyMDAwMDAgdG8gMHgwMjQwMDAwMCAxTUIgIElERSBzZWNvbmRhcnkgY2hhbm5lbAorICogMHgwMjMwMDAwMCB0byAweDAyNDAwMDAwIDFNQiAgSURFIHNlY29uZGFyeSBjaGFubmVsIGF1eAorICogMHgwMjQwMDAwMCB0byAweDAyNTAwMDAwIDFNQiAgQVNJWCBldGhlcm5ldCBjb250cm9sbGVyCisgKiAweDAyNTAwMDAwIHRvIDB4MDI2MDAwMDAgMU1CICBEYXZpY29tIERNOTAwMCBldGhlcm5ldCBjb250cm9sbGVyCisgKiAweDAyNjAwMDAwIHRvIDB4MDI3MDAwMDAgMU1CICBQQyBTdXBlcklPIGNvbnRyb2xsZXIKKyAqCisgKiB0aGUgcGh5aXNjYWwgbGF5b3V0IG9mIHRoZSB6b25lcyBhcmU6CisgKiAgbkdDUzIgLSA4Yml0LCBzbG93CisgKiAgbkdDUzMgLSAxNmJpdCwgc2xvdworICogIG5HQ1M0IC0gMTZiaXQsIG5ldAorICogIG5HQ1M1IC0gMTZiaXQsIGZhc3QKKyAqLworCisjZGVmaW5lIEJBU1RfVkFfTVVMVElTUEFDRSAoMHhFMDAwMDAwMCkKKworI2RlZmluZSBCQVNUX1ZBX0lTQUlPCSAgIChCQVNUX1ZBX01VTFRJU1BBQ0UgKyAweDAwMDAwMDAwKQorI2RlZmluZSBCQVNUX1ZBX0lTQU1FTQkgICAoQkFTVF9WQV9NVUxUSVNQQUNFICsgMHgwMTAwMDAwMCkKKyNkZWZpbmUgQkFTVF9WQV9JREVQUkkJICAgKEJBU1RfVkFfTVVMVElTUEFDRSArIDB4MDIwMDAwMDApCisjZGVmaW5lIEJBU1RfVkFfSURFUFJJQVVYICAoQkFTVF9WQV9NVUxUSVNQQUNFICsgMHgwMjEwMDAwMCkKKyNkZWZpbmUgQkFTVF9WQV9JREVTRUMJICAgKEJBU1RfVkFfTVVMVElTUEFDRSArIDB4MDIyMDAwMDApCisjZGVmaW5lIEJBU1RfVkFfSURFU0VDQVVYICAoQkFTVF9WQV9NVUxUSVNQQUNFICsgMHgwMjMwMDAwMCkKKyNkZWZpbmUgQkFTVF9WQV9BU0lYTkVUCSAgIChCQVNUX1ZBX01VTFRJU1BBQ0UgKyAweDAyNDAwMDAwKQorI2RlZmluZSBCQVNUX1ZBX0RNOTAwMAkgICAoQkFTVF9WQV9NVUxUSVNQQUNFICsgMHgwMjUwMDAwMCkKKyNkZWZpbmUgQkFTVF9WQV9TVVBFUklPCSAgIChCQVNUX1ZBX01VTFRJU1BBQ0UgKyAweDAyNjAwMDAwKQorCisjZGVmaW5lIEJBU1RfVkFfTVVMVElTUEFDRSAoMHhFMDAwMDAwMCkKKworI2RlZmluZSBCQVNUX1ZBTV9DUzIgKDB4MDAwMDAwMDApCisjZGVmaW5lIEJBU1RfVkFNX0NTMyAoMHgwNDAwMDAwMCkKKyNkZWZpbmUgQkFTVF9WQU1fQ1M0ICgweDA4MDAwMDAwKQorI2RlZmluZSBCQVNUX1ZBTV9DUzUgKDB4MEMwMDAwMDApCisKKy8qIHBoeXNpY2FsIG9mZnNldCBhZGRyZXNzZXMgZm9yIHRoZSBwZXJpcGhlcmFscyAqLworCisjZGVmaW5lIEJBU1RfUEFfSVNBSU8JICAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgQkFTVF9QQV9BU0lYTkVUCSAgKDB4MDEwMDAwMDApCisjZGVmaW5lIEJBU1RfUEFfU1VQRVJJTwkgICgweDAxODAwMDAwKQorI2RlZmluZSBCQVNUX1BBX0lERVBSSQkgICgweDAyMDAwMDAwKQorI2RlZmluZSBCQVNUX1BBX0lERVBSSUFVWCAoMHgwMjgwMDAwMCkKKyNkZWZpbmUgQkFTVF9QQV9JREVTRUMJICAoMHgwMzAwMDAwMCkKKyNkZWZpbmUgQkFTVF9QQV9JREVTRUNBVVggKDB4MDM4MDAwMDApCisjZGVmaW5lIEJBU1RfUEFfSVNBTUVNCSAgKDB4MDQwMDAwMDApCisjZGVmaW5lIEJBU1RfUEFfRE05MDAwCSAgKDB4MDUwMDAwMDApCisKKy8qIHNvbWUgY29uZmlndXJhdGlvbnMgZm9yIHRoZSBwZXJpcGhlcmFscyAqLworCisjZGVmaW5lIEJBU1RfUENTSU8gKEJBU1RfVkFfU1VQRVJJTyArIEJBU1RfVkFNX0NTMikKKy8qICAqLworCisjZGVmaW5lIEJBU1RfQVNJWE5FVF9DUyAgQkFTVF9WQU1fQ1M1CisjZGVmaW5lIEJBU1RfSURFX0NTCSBCQVNUX1ZBTV9DUzUKKyNkZWZpbmUgQkFTVF9ETTkwMDBfQ1MJIEJBU1RfVkFNX0NTNAorCisjZW5kaWYgLyogX19BU01fQVJDSF9CQVNUTUFQX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvYmFzdC1wbXUuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvYmFzdC1wbXUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NThjNWM1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9iYXN0LXBtdS5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvYmFzdC1wbXUuaAorICoKKyAqIChjKSAyMDAzLDIwMDQgU2ltdGVjIEVsZWN0cm9uaWNzCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKglWaW5jZW50IFNhbmRlcnMgPHZpbmNlQHNpbXRlYy5jby51az4KKyAqCisgKiBNYWNoaW5lIEJBU1QgLSBQb3dlciBNYW5hZ2VtZW50IGNoaXAKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIENoYW5nZWxvZzoKKyAqCTA4LU9jdC0yMDAzCUJKRAlJbml0aWFsIGNyZWF0aW9uCisqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfQkFTVFBNVV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfQkFTVFBNVV9IICIwOF9PQ1RfMjAwNCIKKworI2RlZmluZSBCQVNUUE1VX1JFR19JREVOVAkoMHgwMCkKKyNkZWZpbmUgQkFTVFBNVV9SRUdfVkVSU0lPTgkoMHgwMSkKKyNkZWZpbmUgQkFTVFBNVV9SRUdfRERDQ1RSTAkoMHgwMikKKyNkZWZpbmUgQkFTVFBNVV9SRUdfUE9XRVIJKDB4MDMpCisjZGVmaW5lIEJBU1RQTVVfUkVHX1JFU0VUCSgweDA0KQorI2RlZmluZSBCQVNUUE1VX1JFR19HV08JCSgweDA1KQorI2RlZmluZSBCQVNUUE1VX1JFR19XT0wJCSgweDA2KQorI2RlZmluZSBCQVNUUE1VX1JFR19XT1IJCSgweDA3KQorI2RlZmluZSBCQVNUUE1VX1JFR19VSUQJCSgweDA5KQorCisjZGVmaW5lIEJBU1RQTVVfRUVQUk9NCQkoMHhDMCkKKworI2RlZmluZSBCQVNUUE1VX0VFUF9VSUQJCShCQVNUUE1VX0VFUFJPTSArIDApCisjZGVmaW5lIEJBU1RQTVVfRUVQX1dPTAkJKEJBU1RQTVVfRUVQUk9NICsgOCkKKyNkZWZpbmUgQkFTVFBNVV9FRVBfV09SCQkoQkFTVFBNVV9FRVBST00gKyA5KQorCisjZGVmaW5lIEJBU1RQTVVfSURFTlRfMAkJMHg1MworI2RlZmluZSBCQVNUUE1VX0lERU5UXzEJCTB4NDIKKyNkZWZpbmUgQkFTVFBNVV9JREVOVF8yCQkweDUwCisjZGVmaW5lIEJBU1RQTVVfSURFTlRfMwkJMHg0ZAorCisjZGVmaW5lIEJBU1RQTVVfUkVTRVRfR1VBUkQJKDB4NTUpCisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX0JBU1RQTVVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9kZWJ1Zy1tYWNyby5TIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9kZWJ1Zy1tYWNyby5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiZmJlNDUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2RlYnVnLW1hY3JvLlMKQEAgLTAsMCArMSw5OSBAQAorLyogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9kZWJ1Zy1tYWNyby5TCisgKgorICogRGVidWdnaW5nIG1hY3JvIGluY2x1ZGUgaGVhZGVyCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NC0xOTk5IFJ1c3NlbGwgS2luZworICogIENvcHlyaWdodCAoQykgMjAwNSBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCisgKiAgTW92ZWQgZnJvbSBsaW51eC9hcmNoL2FybS9rZXJuZWwvZGVidWcuUyBieSBCZW4gRG9va3MKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIE1vZGlmaWNhdGlvbnM6CisgKiAgICAgMTAtTWFyLTIwMDUgTENWUiAgQ2hhbmdlZCBTM0MyNDEwX1ZBIHRvIFMzQzI0WFhfVkEKKyovCisKKyNpbmNsdWRlIDxhc20vYXJjaC9tYXAuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLXNlcmlhbC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtZ3Bpby5oPgorCisjZGVmaW5lIFMzQzI0MTBfVUFSVDFfT0ZGICgweDQwMDApCisjZGVmaW5lIFNISUZUXzI0NDBUWEYgKDE0LTkpCisKKwkJLm1hY3JvIGFkZHJ1YXJ0LCByeAorCQltcmMJcDE1LCAwLCBccngsIGMxLCBjMAorCQl0c3QJXHJ4LCAjMQorCQlsZHJlcQlccngsID0gUzNDMjQxMF9QQV9VQVJUCisJCWxkcm5lCVxyeCwgPSBTM0MyNFhYX1ZBX1VBUlQKKyNpZiBDT05GSUdfREVCVUdfUzNDMjQxMF9VQVJUICE9IDAKKwkJYWRkCVxyeCwgXHJ4LCAjKFMzQzI0MTBfVUFSVDFfT0ZGICogQ09ORklHX0RFQlVHX1MzQzI0MTBfVUFSVCkKKyNlbmRpZgorCQkuZW5kbQorCisJCS5tYWNybwlzZW5kdWFydCxyZCxyeAorCQlzdHIJXHJkLCBbXHJ4LCAjIFMzQzI0MTBfVVRYSCBdCisJCS5lbmRtCisKKwkJLm1hY3JvCWJ1c3l1YXJ0LCByZCwgcngKKwkJbGRyCVxyZCwgWyBccngsICMgUzNDMjQxMF9VRkNPTiBdCisJCXRzdAlccmQsICNTM0MyNDEwX1VGQ09OX0ZJRk9NT0RFCUAgZmlmbyBlbmFibGVkPworCQliZXEJMTAwMWYJCQkJQAorCQlAIEZJRk8gZW5hYmxlZC4uLgorMTAwMzoKKwkJbXJjCXAxNSwgMCwgXHJkLCBjMSwgYzAKKwkJdHN0CVxyZCwgIzEKKwkJYWRkZXEJXHJkLCBccngsICMoUzNDMjQxMF9QQV9HUElPIC0gUzNDMjQxMF9QQV9VQVJUKQorCQlhZGRuZQlccmQsIFxyeCwgIyhTM0MyNFhYX1ZBX0dQSU8gLSBTM0MyNFhYX1ZBX1VBUlQpCisJCWJpYwlccmQsIFxyZCwgIzB4ZmYwMDAKKwkJbGRyCVxyZCwgWyBccmQsICMgUzNDMjQxMF9HU1RBVFVTMSAtIFMzQzI0MTBfR1BJT1JFRygwKSBdCisJCWFuZAlccmQsIFxyZCwgIzB4MDBmZjAwMDAKKwkJdGVxCVxyZCwgIzB4MDA0NDAwMDAJCUAgaXMgaXQgMjQ0MD8KKworCQlsZHIJXHJkLCBbIFxyeCwgIyBTM0MyNDEwX1VGU1RBVCBdCisJCW1vdmVxCVxyZCwgXHJkLCBsc3IgI1NISUZUXzI0NDBUWEYKKwkJdHN0CVxyZCwgI1MzQzI0MTBfVUZTVEFUX1RYRlVMTAorCQlibmUJMTAwM2IKKwkJYgkxMDAyZgorCisxMDAxOgorCQlAIGJ1c3kgd2FpdGluZyBmb3Igbm9uIGZpZm8KKwkJbGRyCVxyZCwgWyBccngsICMgUzNDMjQxMF9VVFJTVEFUIF0KKwkJdHN0CVxyZCwgI1MzQzI0MTBfVVRSU1RBVF9UWEZFCisJCWJlcQkxMDAxYgorCisxMDAyOgkJQCBleGl0IGJ1c3l1YXJ0CisJCS5lbmRtCisKKwkJLm1hY3JvCXdhaXR1YXJ0LHJkLHJ4CisKKwkJbGRyCVxyZCwgWyBccngsICMgUzNDMjQxMF9VRkNPTiBdCisJCXRzdAlccmQsICNTM0MyNDEwX1VGQ09OX0ZJRk9NT0RFCUAgZmlmbyBlbmFibGVkPworCQliZXEJMTAwMWYJCQkJQAorCQlAIEZJRk8gZW5hYmxlZC4uLgorMTAwMzoKKwkJbXJjCXAxNSwgMCwgXHJkLCBjMSwgYzAKKwkJdHN0CVxyZCwgIzEKKwkJYWRkZXEJXHJkLCBccngsICMoUzNDMjQxMF9QQV9HUElPIC0gUzNDMjQxMF9QQV9VQVJUKQorCQlhZGRuZQlccmQsIFxyeCwgIyhTM0MyNFhYX1ZBX0dQSU8gLSBTM0MyNFhYX1ZBX1VBUlQpCisJCWJpYwlccmQsIFxyZCwgIzB4ZmYwMDAKKwkJbGRyCVxyZCwgWyBccmQsICMgUzNDMjQxMF9HU1RBVFVTMSAtIFMzQzI0MTBfR1BJT1JFRygwKSBdCisJCWFuZAlccmQsIFxyZCwgIzB4MDBmZjAwMDAKKwkJdGVxCVxyZCwgIzB4MDA0NDAwMDAJCUAgaXMgaXQgMjQ0MD8KKworCQlsZHIJXHJkLCBbIFxyeCwgIyBTM0MyNDEwX1VGU1RBVCBdCisJCWFuZG5lCVxyZCwgXHJkLCAjUzNDMjQxMF9VRlNUQVRfVFhNQVNLCisJCWFuZGVxCVxyZCwgXHJkLCAjUzNDMjQ0MF9VRlNUQVRfVFhNQVNLCisJCXRlcQlccmQsICMwCisJCWJuZQkxMDAzYgorCQliCTEwMDJmCisKKzEwMDE6CisJCUAgaWRsZSB3YWl0aW5nIGZvciBub24gZmlmbworCQlsZHIJXHJkLCBbIFxyeCwgIyBTM0MyNDEwX1VUUlNUQVQgXQorCQl0c3QJXHJkLCAjUzNDMjQxMF9VVFJTVEFUX1RYRkUKKwkJYmVxCTEwMDFiCisKKzEwMDI6CQlAIGV4aXQgYnVzeXVhcnQKKwkJLmVuZG0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvZG1hLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2RtYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4MzBhNDAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2RtYS5oCkBAIC0wLDAgKzEsMzc2IEBACisvKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1iYXN0L2RtYS5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzLDIwMDQgU2ltdGVjIEVsZWN0cm9uaWNzCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogU2Ftc3VuZyBTM0MyNDEwWCBETUEgc3VwcG9ydAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogQ2hhbmdlbG9nOgorICogID8/LU1heS0yMDAzIEJKRCAgIENyZWF0ZWQgZmlsZQorICogID8/LUp1bi0yMDAzIEJKRCAgIEFkZGVkIG1vcmUgZG1hIGZ1bmN0aW9uYWxpdHkgdG8gZ28gd2l0aCBhcmNoCisgKiAgMTAtTm92LTIwMDQgQkpEICAgQWRkZWQgc3lzX2RldmljZSBzdXBwb3J0CisqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfRE1BX0gKKyNkZWZpbmUgX19BU01fQVJDSF9ETUFfSCBfX0ZJTEVfXworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSAiaGFyZHdhcmUuaCIKKworCisvKgorICogVGhpcyBpcyB0aGUgbWF4aW11bSBETUEgYWRkcmVzcyhwaHlzaWNhbCBhZGRyZXNzKSB0aGF0IGNhbiBiZSBETUFkIHRvLgorICoKKyAqLworI2RlZmluZSBNQVhfRE1BX0FERFJFU1MJCTB4MjAwMDAwMDAKKyNkZWZpbmUgTUFYX0RNQV9UUkFOU0ZFUl9TSVpFICAgMHgxMDAwMDAgLyogRGF0YSBVbml0IGlzIGhhbGYgd29yZCAgKi8KKworCisvKiBhY2NvcmRpbmcgdG8gdGhlIHNhbXN1bmcgcG9ydCwgd2UgY2Fubm90IHVzZSB0aGUgcmVndWxhcgorICogZG1hIGNoYW5uZWxzLi4uIHdlIG11c3QgdGhlcmVmb3JlIHByb3ZpZGUgb3VyIG93biBpbnRlcmZhY2UKKyAqIGZvciBETUEsIGFuZCBhbGxvdyBvdXIgZHJpdmVycyB0byB1c2UgdGhhdC4KKyAqLworCisjZGVmaW5lIE1BWF9ETUFfQ0hBTk5FTFMJMAorCisKKy8qIHdlIGhhdmUgNCBkbWEgY2hhbm5lbHMgKi8KKyNkZWZpbmUgUzNDMjQxMF9ETUFfQ0hBTk5FTFMgICAgICAgICg0KQorCisvKiB0eXBlcyAqLworCit0eXBlZGVmIGVudW0geworCVMzQzI0MTBfRE1BX0lETEUsCisJUzNDMjQxMF9ETUFfUlVOTklORywKKwlTM0MyNDEwX0RNQV9QQVVTRUQKK30gczNjMjQxMF9kbWFfc3RhdGVfdDsKKworCisvKiBzM2MyNDEwX2RtYV9sb2Fkc3RfdAorICoKKyAqIFRoaXMgcmVwcmVzZW50cyB0aGUgc3RhdGUgb2YgdGhlIERNQSBlbmdpbmUsIHdydCB0byB0aGUgbG9hZGVkIC8gcnVubmluZworICogdHJhbnNmZXJzLiBTaW5jZSB3ZSBkb24ndCBoYXZlIGFueSB3YXkgb2Yga25vd2luZyBleGFjdGx5IHRoZSBzdGF0ZSBvZgorICogdGhlIERNQSB0cmFuc2ZlcnMsIHdlIG5lZWQgdG8ga25vdyB0aGUgc3RhdGUgdG8gbWFrZSBkZWNpc2lvbnMgb24gd2V0aGVyCisgKiB3ZSBjYW4KKyAqCisgKiBTM0MyNDEwX0RNQV9OT05FCisgKgorICogVGhlcmUgYXJlIG5vIGJ1ZmZlcnMgbG9hZGVkICh0aGUgY2hhbm5lbCBzaG91bGQgYmUgaW5hY3RpdmUpCisgKgorICogUzNDMjQxMF9ETUFfMUxPQURFRAorICoKKyAqIFRoZXJlIGlzIG9uZSBidWZmZXIgbG9hZGVkLCBob3dldmVyIGl0IGhhcyBub3QgYmVlbiBjb25maXJtZWQgdG8gYmUKKyAqIGxvYWRlZCBieSB0aGUgRE1BIGVuZ2luZS4gVGhpcyBtYXkgYmUgYmVjYXVzZSB0aGUgY2hhbm5lbCBpcyBub3QKKyAqIHlldCBydW5uaW5nLCBvciB0aGUgRE1BIGRyaXZlciBkZWNpZGVkIHRoYXQgaXQgd2FzIHRvbyBjb3N0bHkgdG8KKyAqIHNpdCBhbmQgd2FpdCBmb3IgaXQgdG8gaGFwcGVuLgorICoKKyAqIFMzQzI0MTBfRE1BXzFSVU5OSU5HCisgKgorICogVGhlIGJ1ZmZlciBoYXMgYmVlbiBjb25maXJtZWQgcnVubmluZywgYW5kIG5vdCBmaW5pc2dlZAorICoKKyAqIFMzQzI0MTBfRE1BXzFMT0FERURfMVJVTk5JTkcKKyAqCisgKiBUaGVyZSBpcyBhIGJ1ZmZlciB3YWl0aW5nIHRvIGJlIGxvYWRlZCBieSB0aGUgRE1BIGVuZ2luZSwgYW5kIG9uZQorICogY3VycmVudGx5IHJ1bm5pbmcuCisqLworCit0eXBlZGVmIGVudW0geworCVMzQzI0MTBfRE1BTE9BRF9OT05FLAorCVMzQzI0MTBfRE1BTE9BRF8xTE9BREVELAorCVMzQzI0MTBfRE1BTE9BRF8xUlVOTklORywKKwlTM0MyNDEwX0RNQUxPQURfMUxPQURFRF8xUlVOTklORywKK30gczNjMjQxMF9kbWFfbG9hZHN0X3Q7CisKK3R5cGVkZWYgZW51bSB7CisJUzNDMjQxMF9SRVNfT0ssCisJUzNDMjQxMF9SRVNfRVJSLAorCVMzQzI0MTBfUkVTX0FCT1JUCit9IHMzYzI0MTBfZG1hX2J1ZmZyZXN1bHRfdDsKKworCit0eXBlZGVmIGVudW0gczNjMjQxMF9kbWFzcmNfZSBzM2MyNDEwX2RtYXNyY190OworCitlbnVtIHMzYzI0MTBfZG1hc3JjX2UgeworCVMzQzI0MTBfRE1BU1JDX0hXLCAgICAgIC8qIHNvdXJjZSBpcyBtZW1vcnkgKi8KKwlTM0MyNDEwX0RNQVNSQ19NRU0gICAgICAvKiBzb3VyY2UgaXMgaGFyZHdhcmUgKi8KK307CisKKy8qIGVudW0gczNjMjQxMF9jaGFuX29wX2UKKyAqCisgKiBvcGVyYXRpb24gY29kZXMgcGFzc2VkIHRvIHRoZSBETUEgY29kZSBieSB0aGUgdXNlciwgYW5kIGFsc28gdXNlZAorICogdG8gaW5mb3JtIHRoZSBjdXJyZW50IGNoYW5uZWwgb3duZXIgb2YgYW55IGNoYW5nZXMgdG8gdGhlIHN5c3RlbSBzdGF0ZQorKi8KKworZW51bSBzM2MyNDEwX2NoYW5fb3BfZSB7CisJUzNDMjQxMF9ETUFPUF9TVEFSVCwKKwlTM0MyNDEwX0RNQU9QX1NUT1AsCisJUzNDMjQxMF9ETUFPUF9QQVVTRSwKKwlTM0MyNDEwX0RNQU9QX1JFU1VNRSwKKwlTM0MyNDEwX0RNQU9QX0ZMVVNILAorCVMzQzI0MTBfRE1BT1BfVElNRU9VVCwgICAgICAgICAgIC8qIGludGVybmFsIHNpZ25hbCB0byBoYW5kbGVyICovCit9OworCit0eXBlZGVmIGVudW0gczNjMjQxMF9jaGFuX29wX2UgczNjMjQxMF9jaGFuX29wX3Q7CisKKy8qIGZsYWdzICovCisKKyNkZWZpbmUgUzNDMjQxMF9ETUFGX1NMT1cgICAgICAgICAoMTw8MCkgICAvKiBzbG93LCBzbyBkb24ndCB3b3JyeSBhYm91dAorCQkJCQkgICAgKiB3YWl0aW5nIGZvciByZWxvYWRzICovCisjZGVmaW5lIFMzQzI0MTBfRE1BRl9BVVRPU1RBUlQgICAgKDE8PDEpICAgLyogYXV0by1zdGFydCBpZiBidWZmZXIgcXVldWVkICovCisKKy8qIGRtYSBidWZmZXIgKi8KKwordHlwZWRlZiBzdHJ1Y3QgczNjMjQxMF9kbWFfYnVmX3MgczNjMjQxMF9kbWFfYnVmX3Q7CisKK3N0cnVjdCBzM2MyNDEwX2RtYV9jbGllbnQgeworCWNoYXIgICAgICAgICAgICAgICAgKm5hbWU7Cit9OworCit0eXBlZGVmIHN0cnVjdCBzM2MyNDEwX2RtYV9jbGllbnQgczNjMjQxMF9kbWFfY2xpZW50X3Q7CisKKy8qIHMzYzI0MTBfZG1hX2J1Zl9zCisgKgorICogaW50ZXJuYWxseSB1c2VkIGJ1ZmZlciBzdHJ1Y3R1cmUgdG8gZGVzY3JpYmUgYSBxdWV1ZWQgb3IgcnVubmluZworICogYnVmZmVyLgorKi8KKworc3RydWN0IHMzYzI0MTBfZG1hX2J1Zl9zIHsKKwlzM2MyNDEwX2RtYV9idWZfdCAgICpuZXh0OworCWludCAgICAgICAgICAgICAgICAgIG1hZ2ljOyAgICAgICAgLyogbWFnaWMgKi8KKwlpbnQgICAgICAgICAgICAgICAgICBzaXplOyAgICAgICAgIC8qIGJ1ZmZlciBzaXplIGluIGJ5dGVzICovCisJZG1hX2FkZHJfdCAgICAgICAgICAgZGF0YTsgICAgICAgICAvKiBzdGFydCBvZiBETUEgZGF0YSAqLworCWRtYV9hZGRyX3QgICAgICAgICAgIHB0cjsgICAgICAgICAgLyogd2hlcmUgdGhlIERNQSBnb3QgdG8gWzFdICovCisJdm9pZCAgICAgICAgICAgICAgICAqaWQ7ICAgICAgICAgICAvKiBjbGllbnQncyBpZCAqLworfTsKKworLyogWzFdIGlzIHRoaXMgdXBkYXRlZCBmb3IgYm90aCByZWN2L3NlbmQgbW9kZXM/ICovCisKK3R5cGVkZWYgc3RydWN0IHMzYzI0MTBfZG1hX2NoYW5fcyBzM2MyNDEwX2RtYV9jaGFuX3Q7CisKKy8qIHMzYzI0MTBfZG1hX2NiZm5fdAorICoKKyAqIGJ1ZmZlciBjYWxsYmFjayByb3V0aW5lIHR5cGUKKyovCisKK3R5cGVkZWYgdm9pZCAoKnMzYzI0MTBfZG1hX2NiZm5fdCkoczNjMjQxMF9kbWFfY2hhbl90ICosIHZvaWQgKmJ1ZiwgaW50IHNpemUsCisJCQkJICAgczNjMjQxMF9kbWFfYnVmZnJlc3VsdF90IHJlc3VsdCk7CisKK3R5cGVkZWYgaW50ICAoKnMzYzI0MTBfZG1hX29wZm5fdCkoczNjMjQxMF9kbWFfY2hhbl90ICosCisJCQkJICAgczNjMjQxMF9jaGFuX29wX3QgKTsKKworc3RydWN0IHMzYzI0MTBfZG1hX3N0YXRzX3MgeworCXVuc2lnbmVkIGxvbmcgICAgICAgICAgbG9hZHM7CisJdW5zaWduZWQgbG9uZyAgICAgICAgICB0aW1lb3V0X2xvbmdlc3Q7CisJdW5zaWduZWQgbG9uZyAgICAgICAgICB0aW1lb3V0X3Nob3J0ZXN0OworCXVuc2lnbmVkIGxvbmcgICAgICAgICAgdGltZW91dF9hdmc7CisJdW5zaWduZWQgbG9uZyAgICAgICAgICB0aW1lb3V0X2ZhaWxlZDsKK307CisKK3R5cGVkZWYgc3RydWN0IHMzYzI0MTBfZG1hX3N0YXRzX3MgczNjMjQxMF9kbWFfc3RhdHNfdDsKKworLyogc3RydWN0IHMzYzI0MTBfZG1hX2NoYW5fcworICoKKyAqIGZ1bGwgc3RhdGUgaW5mb3JtYXRpb24gZm9yIGVhY2ggRE1BIGNoYW5uZWwKKyovCisKK3N0cnVjdCBzM2MyNDEwX2RtYV9jaGFuX3MgeworCS8qIGNoYW5uZWwgc3RhdGUgZmxhZ3MgYW5kIGluZm9ybWF0aW9uICovCisJdW5zaWduZWQgY2hhciAgICAgICAgICBudW1iZXI7ICAgICAgLyogbnVtYmVyIG9mIHRoaXMgZG1hIGNoYW5uZWwgKi8KKwl1bnNpZ25lZCBjaGFyICAgICAgICAgIGluX3VzZTsgICAgICAvKiBjaGFubmVsIGFsbG9jYXRlZCAqLworCXVuc2lnbmVkIGNoYXIgICAgICAgICAgaXJxX2NsYWltZWQ7IC8qIGlycSBjbGFpbWVkIGZvciBjaGFubmVsICovCisJdW5zaWduZWQgY2hhciAgICAgICAgICBpcnFfZW5hYmxlZDsgLyogaXJxIGVuYWJsZWQgZm9yIGNoYW5uZWwgKi8KKwl1bnNpZ25lZCBjaGFyICAgICAgICAgIHhmZXJfdW5pdDsgICAvKiBzaXplIG9mIGFuIHRyYW5zZmVyICovCisKKwkvKiBjaGFubmVsIHN0YXRlICovCisKKwlzM2MyNDEwX2RtYV9zdGF0ZV90ICAgIHN0YXRlOworCXMzYzI0MTBfZG1hX2xvYWRzdF90ICAgbG9hZF9zdGF0ZTsKKwlzM2MyNDEwX2RtYV9jbGllbnRfdCAgKmNsaWVudDsKKworCS8qIGNoYW5uZWwgY29uZmlndXJhdGlvbiAqLworCXMzYzI0MTBfZG1hc3JjX3QgICAgICAgc291cmNlOworCXVuc2lnbmVkIGxvbmcgICAgICAgICAgZGV2X2FkZHI7CisJdW5zaWduZWQgbG9uZyAgICAgICAgICBsb2FkX3RpbWVvdXQ7CisJdW5zaWduZWQgaW50ICAgICAgICAgICBmbGFnczsgICAgICAgIC8qIGNoYW5uZWwgZmxhZ3MgKi8KKworCS8qIGNoYW5uZWwncyBoYXJkd2FyZSBwb3NpdGlvbiBhbmQgY29uZmlndXJhdGlvbiAqLworCXZvaWQgX19pb21lbSAgICAgICAgICAgKnJlZ3M7ICAgICAgICAvKiBjaGFubmVscyByZWdpc3RlcnMgKi8KKwl2b2lkIF9faW9tZW0gICAgICAgICAgICphZGRyX3JlZzsgICAgLyogZGF0YSBhZGRyZXNzIHJlZ2lzdGVyICovCisJdW5zaWduZWQgaW50ICAgICAgICAgICBpcnE7ICAgICAgICAgIC8qIGNoYW5uZWwgaXJxICovCisJdW5zaWduZWQgbG9uZyAgICAgICAgICBkY29uOyAgICAgICAgIC8qIGRlZmF1bHQgdmFsdWUgb2YgRENPTiAqLworCisJLyogZHJpdmVyIGhhbmRsZXMgKi8KKwlzM2MyNDEwX2RtYV9jYmZuX3QgICAgIGNhbGxiYWNrX2ZuOyAgLyogYnVmZmVyIGRvbmUgY2FsbGJhY2sgKi8KKwlzM2MyNDEwX2RtYV9vcGZuX3QgICAgIG9wX2ZuOyAgICAgICAgLyogY2hhbm5lbCBvcGVyYXRpb24gY2FsbGJhY2sgKi8KKworCS8qIHN0YXRzIGdhdGhlcmluZyAqLworCXMzYzI0MTBfZG1hX3N0YXRzX3QgICAqc3RhdHM7CisJczNjMjQxMF9kbWFfc3RhdHNfdCAgICBzdGF0c19zdG9yZTsKKworCS8qIGJ1ZmZlciBsaXN0IGFuZCBpbmZvcm1hdGlvbiAqLworCXMzYzI0MTBfZG1hX2J1Zl90ICAgICAgKmN1cnI7ICAgICAgICAvKiBjdXJyZW50IGRtYSBidWZmZXIgKi8KKwlzM2MyNDEwX2RtYV9idWZfdCAgICAgICpuZXh0OyAgICAgICAgLyogbmV4dCBidWZmZXIgdG8gbG9hZCAqLworCXMzYzI0MTBfZG1hX2J1Zl90ICAgICAgKmVuZDsgICAgICAgICAvKiBlbmQgb2YgcXVldWUgKi8KKworCS8qIHN5c3RlbSBkZXZpY2UgKi8KKwlzdHJ1Y3Qgc3lzX2RldmljZQlkZXY7Cit9OworCisvKiB0aGUgY3VycmVudGx5IGFsbG9jYXRlZCBjaGFubmVsIGluZm9ybWF0aW9uICovCitleHRlcm4gczNjMjQxMF9kbWFfY2hhbl90IHMzYzI0MTBfY2hhbnNbXTsKKworLyogbm90ZSwgd2UgZG9uJ3QgcmVhbGx5IHVzZSBkbWFfZGV2aWNlX3QgYXQgdGhlIG1vbWVudCAqLwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGRtYV9kZXZpY2VfdDsKKworLyogZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBzM2MyNDEwX2RtYV9yZXF1ZXN0CisgKgorICogcmVxdWVzdCBhIGRtYSBjaGFubmVsIGV4Y2x1c2l2bGV5CisqLworCitleHRlcm4gaW50IHMzYzI0MTBfZG1hX3JlcXVlc3QoZG1hY2hfdCBjaGFubmVsLAorCQkJICAgICAgIHMzYzI0MTBfZG1hX2NsaWVudF90ICosIHZvaWQgKmRldik7CisKKworLyogczNjMjQxMF9kbWFfY3RybAorICoKKyAqIGNoYW5nZSB0aGUgc3RhdGUgb2YgdGhlIGRtYSBjaGFubmVsCisqLworCitleHRlcm4gaW50IHMzYzI0MTBfZG1hX2N0cmwoZG1hY2hfdCBjaGFubmVsLCBzM2MyNDEwX2NoYW5fb3BfdCBvcCk7CisKKy8qIHMzYzI0MTBfZG1hX3NldGZsYWdzCisgKgorICogc2V0IHRoZSBjaGFubmVsJ3MgZmxhZ3MgdG8gYSBnaXZlbiBzdGF0ZQorKi8KKworZXh0ZXJuIGludCBzM2MyNDEwX2RtYV9zZXRmbGFncyhkbWFjaF90IGNoYW5uZWwsCisJCQkJdW5zaWduZWQgaW50IGZsYWdzKTsKKworLyogczNjMjQxMF9kbWFfZnJlZQorICoKKyAqIGZyZWUgdGhlIGRtYSBjaGFubmVsICh3aWxsIGFsc28gYWJvcnQgYW55IG91dHN0YW5kaW5nIG9wZXJhdGlvbnMpCisqLworCitleHRlcm4gaW50IHMzYzI0MTBfZG1hX2ZyZWUoZG1hY2hfdCBjaGFubmVsLCBzM2MyNDEwX2RtYV9jbGllbnRfdCAqKTsKKworLyogczNjMjQxMF9kbWFfZW5xdWV1ZQorICoKKyAqIHBsYWNlIHRoZSBnaXZlbiBidWZmZXIgb250byB0aGUgcXVldWUgb2Ygb3BlcmF0aW9ucyBmb3IgdGhlIGNoYW5uZWwuCisgKiBUaGUgYnVmZmVyIG11c3QgYmUgYWxsb2NhdGVkIGZyb20gZG1hIGNvaGVyZW50IG1lbW9yeSwgb3IgdGhlIERjYWNoZS9XQgorICogZHJhaW5lZCBiZWZvcmUgdGhlIGJ1ZmZlciBpcyBnaXZlbiB0byB0aGUgRE1BIHN5c3RlbS4KKyovCisKK2V4dGVybiBpbnQgczNjMjQxMF9kbWFfZW5xdWV1ZShkbWFjaF90IGNoYW5uZWwsIHZvaWQgKmlkLAorCQkJICAgICAgIGRtYV9hZGRyX3QgZGF0YSwgaW50IHNpemUpOworCisvKiBzM2MyNDEwX2RtYV9jb25maWcKKyAqCisgKiBjb25maWd1cmUgdGhlIGRtYSBjaGFubmVsCisqLworCitleHRlcm4gaW50IHMzYzI0MTBfZG1hX2NvbmZpZyhkbWFjaF90IGNoYW5uZWwsIGludCB4ZmVydW5pdCwgaW50IGRjb24pOworCisvKiBzM2MyNDEwX2RtYV9kZXZjb25maWcKKyAqCisgKiBjb25maWd1cmUgdGhlIGRldmljZSB3ZSdyZSB0YWxraW5nIHRvCisqLworCitleHRlcm4gaW50IHMzYzI0MTBfZG1hX2RldmNvbmZpZyhpbnQgY2hhbm5lbCwgczNjMjQxMF9kbWFzcmNfdCBzb3VyY2UsCisJCQkJIGludCBod2NmZywgdW5zaWduZWQgbG9uZyBkZXZhZGRyKTsKKworLyogczNjMjQxMF9kbWFfZ2V0cG9zaXRpb24KKyAqCisgKiBnZXQgdGhlIHBvc2l0aW9uIHRoYXQgdGhlIGRtYSB0cmFuc2ZlciBpcyBjdXJyZW50bHkgYXQKKyovCisKK2V4dGVybiBpbnQgczNjMjQxMF9kbWFfZ2V0cG9zaXRpb24oZG1hY2hfdCBjaGFubmVsLAorCQkJCSAgIGRtYV9hZGRyX3QgKnNyYywgZG1hX2FkZHJfdCAqZGVzdCk7CisKK2V4dGVybiBpbnQgczNjMjQxMF9kbWFfc2V0X29wZm4oZG1hY2hfdCwgczNjMjQxMF9kbWFfb3Bmbl90IHJ0bik7CitleHRlcm4gaW50IHMzYzI0MTBfZG1hX3NldF9idWZmZG9uZV9mbihkbWFjaF90LCBzM2MyNDEwX2RtYV9jYmZuX3QgcnRuKTsKKworLyogRE1BIFJlZ2lzdGVyIGRlZmluaXRpb25zICovCisKKyNkZWZpbmUgUzNDMjQxMF9ETUFfRElTUkMgICAgICAgKDB4MDApCisjZGVmaW5lIFMzQzI0MTBfRE1BX0RJU1JDQyAgICAgICgweDA0KQorI2RlZmluZSBTM0MyNDEwX0RNQV9ESURTVCAgICAgICAoMHgwOCkKKyNkZWZpbmUgUzNDMjQxMF9ETUFfRElEU1RDICAgICAgKDB4MEMpCisjZGVmaW5lIFMzQzI0MTBfRE1BX0RDT04gICAgICAgICgweDEwKQorI2RlZmluZSBTM0MyNDEwX0RNQV9EU1RBVCAgICAgICAoMHgxNCkKKyNkZWZpbmUgUzNDMjQxMF9ETUFfRENTUkMgICAgICAgKDB4MTgpCisjZGVmaW5lIFMzQzI0MTBfRE1BX0RDRFNUICAgICAgICgweDFDKQorI2RlZmluZSBTM0MyNDEwX0RNQV9ETUFTS1RSSUcgICAoMHgyMCkKKworI2RlZmluZSBTM0MyNDEwX0RJU1JDQ19JTkMJKDE8PDApCisjZGVmaW5lIFMzQzI0MTBfRElTUkNDX0FQQgkoMTw8MSkKKworI2RlZmluZSBTM0MyNDEwX0RNQVNLVFJJR19TVE9QICAgKDE8PDIpCisjZGVmaW5lIFMzQzI0MTBfRE1BU0tUUklHX09OICAgICAoMTw8MSkKKyNkZWZpbmUgUzNDMjQxMF9ETUFTS1RSSUdfU1dUUklHICgxPDwwKQorCisjZGVmaW5lIFMzQzI0MTBfRENPTl9ERU1BTkQgICAgICgwPDwzMSkKKyNkZWZpbmUgUzNDMjQxMF9EQ09OX0hBTkRTSEFLRSAgKDE8PDMxKQorI2RlZmluZSBTM0MyNDEwX0RDT05fU1lOQ19QQ0xLICAoMDw8MzApCisjZGVmaW5lIFMzQzI0MTBfRENPTl9TWU5DX0hDTEsgICgxPDwzMCkKKworI2RlZmluZSBTM0MyNDEwX0RDT05fSU5UUkVRICAgICAoMTw8MjkpCisKKyNkZWZpbmUgUzNDMjQxMF9EQ09OX0NIMF9YRFJFUTAJKDA8PDI0KQorI2RlZmluZSBTM0MyNDEwX0RDT05fQ0gwX1VBUlQwCSgxPDwyNCkKKyNkZWZpbmUgUzNDMjQxMF9EQ09OX0NIMF9TREkJKDI8PDI0KQorI2RlZmluZSBTM0MyNDEwX0RDT05fQ0gwX1RJTUVSCSgzPDwyNCkKKyNkZWZpbmUgUzNDMjQxMF9EQ09OX0NIMF9VU0JFUDEJKDQ8PDI0KQorCisjZGVmaW5lIFMzQzI0MTBfRENPTl9DSDFfWERSRVExCSgwPDwyNCkKKyNkZWZpbmUgUzNDMjQxMF9EQ09OX0NIMV9VQVJUMQkoMTw8MjQpCisjZGVmaW5lIFMzQzI0MTBfRENPTl9DSDFfSTJTU0RJCSgyPDwyNCkKKyNkZWZpbmUgUzNDMjQxMF9EQ09OX0NIMV9TUEkJKDM8PDI0KQorI2RlZmluZSBTM0MyNDEwX0RDT05fQ0gxX1VTQkVQMgkoNDw8MjQpCisKKyNkZWZpbmUgUzNDMjQxMF9EQ09OX0NIMl9JMlNTRE8JKDA8PDI0KQorI2RlZmluZSBTM0MyNDEwX0RDT05fQ0gyX0kyU1NESQkoMTw8MjQpCisjZGVmaW5lIFMzQzI0MTBfRENPTl9DSDJfU0RJCSgyPDwyNCkKKyNkZWZpbmUgUzNDMjQxMF9EQ09OX0NIMl9USU1FUgkoMzw8MjQpCisjZGVmaW5lIFMzQzI0MTBfRENPTl9DSDJfVVNCRVAzCSg0PDwyNCkKKworI2RlZmluZSBTM0MyNDEwX0RDT05fQ0gzX1VBUlQyCSgwPDwyNCkKKyNkZWZpbmUgUzNDMjQxMF9EQ09OX0NIM19TREkJKDE8PDI0KQorI2RlZmluZSBTM0MyNDEwX0RDT05fQ0gzX1NQSQkoMjw8MjQpCisjZGVmaW5lIFMzQzI0MTBfRENPTl9DSDNfVElNRVIJKDM8PDI0KQorI2RlZmluZSBTM0MyNDEwX0RDT05fQ0gzX1VTQkVQNAkoNDw8MjQpCisKKyNkZWZpbmUgUzNDMjQxMF9EQ09OX1NSQ1NISUZUICAgKDI0KQorI2RlZmluZSBTM0MyNDEwX0RDT05fU1JDTUFTSwkoNzw8MjQpCisKKyNkZWZpbmUgUzNDMjQxMF9EQ09OX0JZVEUgICAgICAgKDA8PDIwKQorI2RlZmluZSBTM0MyNDEwX0RDT05fSEFMRldPUkQgICAoMTw8MjApCisjZGVmaW5lIFMzQzI0MTBfRENPTl9XT1JEICAgICAgICgyPDwyMCkKKworI2RlZmluZSBTM0MyNDEwX0RDT05fQVVUT1JFTE9BRCAoMDw8MjIpCisjZGVmaW5lIFMzQzI0MTBfRENPTl9OT1JFTE9BRCAgICgxPDwyMikKKyNkZWZpbmUgUzNDMjQxMF9EQ09OX0hXVFJJRyAgICAgKDE8PDIzKQorCisjaWZkZWYgQ09ORklHX0NQVV9TM0MyNDQwCisjZGVmaW5lIFMzQzI0NDBfRElEU1RDX0NIS0lOVAkoMTw8MikKKworI2RlZmluZSBTM0MyNDQwX0RDT05fQ0gwX0kyU1NETwkoNTw8MjQpCisjZGVmaW5lIFMzQzI0NDBfRENPTl9DSDBfUENNSU4JKDY8PDI0KQorCisjZGVmaW5lIFMzQzI0NDBfRENPTl9DSDFfUENNT1VUCSg1PDwyNCkKKyNkZWZpbmUgUzNDMjQ0MF9EQ09OX0NIMV9TREkJKDY8PDI0KQorCisjZGVmaW5lIFMzQzI0NDBfRENPTl9DSDJfUENNSU4JKDU8PDI0KQorI2RlZmluZSBTM0MyNDQwX0RDT05fQ0gyX01JQ0lOCSg2PDwyNCkKKworI2RlZmluZSBTM0MyNDQwX0RDT05fQ0gzX01JQ0lOCSg1PDwyNCkKKyNkZWZpbmUgUzNDMjQ0MF9EQ09OX0NIM19QQ01PVVQJKDY8PDI0KQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX0RNQV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2VudHJ5LW1hY3JvLlMgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2VudHJ5LW1hY3JvLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdkNGQ3ZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvZW50cnktbWFjcm8uUwpAQCAtMCwwICsxLDExOSBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvZW50cnktbWFjcm8uUworICoKKyAqIExvdy1sZXZlbCBJUlEgaGVscGVyIG1hY3JvcyBmb3IgUzNDMjQxMC1iYXNlZCBwbGF0Zm9ybXMKKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKworICogTW9kaWZpY2F0aW9uczoKKyAqICAgICAxMC1NYXItMjAwNSBMQ1ZSICBDaGFuZ2VkIFMzQzI0MTBfVkEgdG8gUzNDMjRYWF9WQQorICovCisKKworCS5tYWNybwlnZXRfaXJxbnJfYW5kX2Jhc2UsIGlycW5yLCBpcnFzdGF0LCBiYXNlLCB0bXAKKworCQltb3YJXHRtcCwgI1MzQzI0WFhfVkFfSVJRCisJCWxkcglcaXJxbnIsIFsgXHRtcCwgIzB4MTQgXQkJQCBnZXQgaXJxIG5vCiszMDAwMDoKKwkJdGVxCVxpcnFuciwgIzQKKwkJdGVxbmUJXGlycW5yLCAjNQorCQliZXEJMTAwMmYJCQkJQCBleHRlcm5hbCBpcnEgcmVnCisKKwkJQCBkZWJ1ZyBjaGVjayB0byBzZWUgaWYgaW50ZXJydXB0IHJlcG9ydGVkIGlzIHRoZSBzYW1lCisJCUAgYXMgdGhlIG9mZnNldC4uLi4KKworCQl0ZXEJXGlycW5yLCAjMAorCQliZXEJMjAwMDJmCisJCWxkcglcaXJxc3RhdCwgWyBcdG1wLCAjMHgxMCBdCUAgSU5UUE5ECisJCW1vdglcaXJxc3RhdCwgXGlycXN0YXQsIGxzciBcaXJxbnIKKwkJdHN0CVxpcnFzdGF0LCAjMQorCQlibmUJMjAwMDJmCisKKwkJLyogZGVidWcvd2FybmluZyBpZiB3ZSBnZXQgYW4gaW52YWx1ZCByZXNwb25zZSBmcm9tIHRoZQorCQkgKiBJTlRPRkZTRVQgcmVnaXN0ZXIgKi8KKyNpZiAxCisJCXN0bWZkCXIxMyEsIHsgcjAgLSByNCAsIHI4LXIxMiwgcjE0IH0KKwkJbGRyCXIxLAlbIFx0bXAsICMweDE0IF0JCUAgSU5UT0ZGU0VUCisJCWxkcglyMiwJWyBcdG1wLCAjMHgxMCBdCQlAIElOVFBORAorCQlsZHIJcjMsCVsgXHRtcCwgIzB4MDAgXQkJQCBTUkNQTkQKKwkJYWRyCXIwLCAyMDAwM2YKKwkJYmwJcHJpbnRrCisJCWIJMjAwMDRmCisKKzIwMDAzOgorCQkuYXNjaWkJIjw3PmlycTogZXJyIC0gYmFkIG9mZnNldCAlZCwgaW50cG5kPSUwOHgsIHNyY3BuZD0lMDh4XG4iCisJCS5ieXRlCTAKKwkJLmFsaWduCTQKKzIwMDA0OgorCQltb3YJcjEsICMxCisJCW1vdglcdG1wLCAjUzNDMjRYWF9WQV9JUlEKKwkJbGRtZmQJcjEzISwgeyByMCAtIHI0ICwgcjgtcjEyLCByMTQgfQorI2VuZGlmCisKKwkJQCB0cnkgd29ya2luZyBvdXQgaW50ZXJydXB0IG51bWJlciBmb3Igb3Vyc2VsdmVzCisJCW1vdglcaXJxbnIsICMwCisJCWxkcglcaXJxc3RhdCwgWyBcdG1wLCAjMHgxMCBdCUAgSU5UUE5ECisxMDAyMToKKwkJbW92cwlcaXJxc3RhdCwgXGlycXN0YXQsIGxzciMxCisJCWJjcwkzMDAwMGIJCUAgdHJ5IGFuZCByZS1zdGFydCB0aGUgcHJvY2Nlc3MKKwkJYWRkCVxpcnFuciwgXGlycW5yLCAjMQorCQljbXAJXGlycW5yLCAjMzIKKwkJYmxlCTEwMDIxYgorCisJCUAgZm91bmQgbm8gaW50ZXJydXB0LCBzZXQgWiBmbGFnIGFuZCBsZWF2ZQorCQltb3ZzCVxpcnFuciwgIzAKKwkJYgkxMDAxZgorCisyMDAwNToKKzIwMDAyOgkJQCBleGl0CisJCUAgd2UgYmFzZSB0aGUgczNjMjQxMHggaW50ZXJydXB0cyBhdCAxNiBhbmQgYWJvdmUgdG8gYWxsb3cKKwkJQCBpc2EgcGVyaXBoZXJhbHMgdG8gaGF2ZSB0aGVpciBzdGFuZGFyZCBpbnRlcnJ1cHRzLCBhbHNvCisJCUAgZW5zdXJlIHRoYXQgWiBmbGFnIGlzIHVuLXNldCBvbiBleGl0CisKKwkJQCBub3RlLCB3ZSBjYW5ub3QgYmUgc3VyZSBpZiB3ZSBnZXQgSVJRX0VJTlQwICgwKSB0aGF0CisJCUAgdGhlcmUgaXMgc2ltcGx5IG5vIGludGVycnVwdCBwZW5kaW5nLCBzbyBpbiBhbGwgb3RoZXIKKwkJQCBjYXNlcyB3ZSBqdW1wIHRvIHNheSB3ZSBoYXZlIGZvdW5kIHNvbWV0aGluZywgb3RoZXJ3aXNlCisJCUAgd2UgY2hlY2sgdG8gc2VlIGlmIHRoZSBpbnRlcnJ1cHQgcmVhbGx5IGlzIGFzc3J0ZWQKKwkJYWRkcwlcaXJxbnIsIFxpcnFuciwgI0lSUV9FSU5UMAorCQl0ZXEJXGlycW5yLCAjSVJRX0VJTlQwCisJCWJuZQkxMDAxZgkJCQlAIGV4aXQKKwkJbGRyCVxpcnFzdGF0LCBbIFx0bXAsICMweDEwIF0JQCBJTlRQTkQKKwkJdGVxCVxpcnFzdGF0LCAjMAorCQltb3ZlcQlcaXJxbnIsICMwCisJCWIJMTAwMWYKKworCQlAIHdlIGdldCBoZXJlIGZyb20gbm8gbWFpbiBvciBleHRlcm5hbCBpbnRlcnJ1cHRzIHBlbmRpbmcKKzEwMDI6CisJCWFkZAlcdG1wLCBcdG1wLCAjUzNDMjRYWF9WQV9HUElPIC0gUzNDMjRYWF9WQV9JUlEKKwkJbGRyCVxpcnFzdGF0LCBbIFx0bXAsICMgMHhhOCBdCUAgRVhUSU5UUEVORAorCQlsZHIJXGlycW5yLCBbIFx0bXAsICMgMHhhNCBdCUAgRVhUSU5UTUFTSworCisJCWJpYwlcaXJxc3RhdCwgXGlycXN0YXQsIFxpcnFucglAIGNsZWFyIG1hc2tlZCBpcnFzCisKKwkJbW92CVxpcnFuciwgI0lSUV9FSU5UNAkJQCBzdGFydCBleHRpbnQgbm9zCisJCW1vdglcaXJxc3RhdCwgXGlycXN0YXQsIGxzciM0CUAgaWdub3JlIGJvdHRvbSA0IGJpdHMKKzEwMDIxOgorCQltb3ZzCVxpcnFzdGF0LCBcaXJxc3RhdCwgbHNyIzEKKwkJYmNzCTEwMDRmCisJCWFkZAlcaXJxbnIsIFxpcnFuciwgIzEKKwkJY21wCVxpcnFuciwgI0lSUV9FSU5UMjMKKwkJYmxlCTEwMDIxYgorCisJCUAgZm91bmQgbm8gaW50ZXJydXB0LCBzZXQgWiBmbGFnIGFuZCBsZWF2ZQorCQltb3ZzCVxpcnFuciwgIzAKKworMTAwNDoJCUAgZW5zdXJlIFogZmxhZyBjbGVhciBpbiBjYXNlIG91ciBNT1ZTIHNoaWZ0ZWQgb3V0IHRoZSBsYXN0IGJpdAorCQl0ZXEJXGlycW5yLCAjMAorMTAwMToKKwkJQCBleGl0IGlycSByb3V0aW5lCisJCS5lbmRtCisKKworCQkvKiBjdXJyZW50bHkgZG9uJ3QgbmVlZCBhbiBkaXNhYmxlX2ZpcSBtYWNybyAqLworCisJCS5tYWNybwlkaXNhYmxlX2ZpcQorCQkuZW5kbQorCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvaGFyZHdhcmUuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvaGFyZHdhcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGEzOTkxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9oYXJkd2FyZS5oCkBAIC0wLDAgKzEsMTA1IEBACisvKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2hhcmR3YXJlLmgKKyAqCisgKiAoYykgMjAwMyBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqICBCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogUzNDMjQxMCAtIGhhcmR3YXJlCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBDaGFuZ2Vsb2c6CisgKiAgMjEtTWF5LTIwMDMgQkpEICBDcmVhdGVkIGZpbGUKKyAqICAwNi1KdW4tMjAwMyBCSkQgIEFkZGVkIENQVSBmcmVxdWVuY3kgc2V0dGluZ3MKKyAqICAwMy1TZXAtMjAwMyBCSkQgIExpbnV4IHYyLjYgc3VwcG9ydAorICogIDEyLU1hci0yMDA0IEJKRCAgRml4ZWQgaW5jbHVkZSBwcm90ZWN0aW9uLCBmaXhlZCB0eXBlIG9mIGNsb2NrIHZhcnMKKyAqICAxNC1TZXAtMjAwNCBCSkQgIEFkZGVkIG1pc2NjciBhbmQgZ2V0cGluIHRvIGdwaW8KKyAqICAwMS1PY3QtMjAwNCBCSkQgIEFkZGVkIHRoZSBuZXcgZ3BpbyBmdW5jdGlvbnMKKyAqICAxNi1PY3QtMjAwNCBCSkQgIFJlbW92ZWQgdGhlIGNsb2NrIHZhcmlhYmxlcworKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX0hBUkRXQVJFX0gKKyNkZWZpbmUgX19BU01fQVJDSF9IQVJEV0FSRV9ICisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKy8qIGV4dGVybmFsIGZ1bmN0aW9ucyBmb3IgR1BJTyBzdXBwb3J0CisgKgorICogVGhlc2UgYWxsb3cgdmFyaW91cyBkaWZmZXJlbnQgY2xpZW50cyB0byBhY2Nlc3MgdGhlIHNhbWUgR1BJTworICogcmVnaXN0ZXJzIHdpdGhvdXQgY29uZmxpY3RpbmcuIElmIHlvdXIgZHJpdmVyIG9ubHkgb3ducyB0aGUgZW50aXJlCisgKiBHUElPIHJlZ2lzdGVyLCB0aGVuIGl0IGlzIHNhZmUgdG8gaW9yZW1hcC9fX3Jhd197cmVhZHx3cml0ZX0gdG8gaXQuCisqLworCisvKiBzM2MyNDEwX2dwaW9fY2ZncGluCisgKgorICogc2V0IHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBnaXZlbiBwaW4gdG8gdGhlIHZhbHVlIHBhc3NlZC4KKyAqCisgKiBlZzoKKyAqICAgIHMzYzI0MTBfZ3Bpb19jZmdwaW4oUzNDMjQxMF9HUEEwLCBTM0MyNDEwX0dQQTBfQUREUjApOworICogICAgczNjMjQxMF9ncGlvX2NmZ3BpbihTM0MyNDEwX0dQRTgsIFMzQzI0MTBfR1BFOF9TRERBVDEpOworKi8KKworZXh0ZXJuIHZvaWQgczNjMjQxMF9ncGlvX2NmZ3Bpbih1bnNpZ25lZCBpbnQgcGluLCB1bnNpZ25lZCBpbnQgZnVuY3Rpb24pOworCitleHRlcm4gdW5zaWduZWQgaW50IHMzYzI0MTBfZ3Bpb19nZXRjZmcodW5zaWduZWQgaW50IHBpbik7CisKKy8qIHMzYzI0MTBfZ3Bpb19nZXRpcnEKKyAqCisgKiB0dXJuIHRoZSBnaXZlbiBwaW4gbnVtYmVyIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgSVJRIG51bWJlcgorICoKKyAqIHJldHVybnM6CisgKgk8IDAgPSBubyBpbnRlcnJ1cHQgZm9yIHRoaXMgcGluCisgKgk+PTAgPSBpbnRlcnJ1cHQgbnVtYmVyIGZvciB0aGUgcGluCisqLworCitleHRlcm4gaW50IHMzYzI0MTBfZ3Bpb19nZXRpcnEodW5zaWduZWQgaW50IHBpbik7CisKKy8qIHMzYzI0MTBfZ3Bpb19pcnFmaWx0ZXIKKyAqCisgKiBzZXQgdGhlIGlycSBmaWx0ZXJpbmcgb24gdGhlIGdpdmVuIHBpbgorICoKKyAqIG9uID0gMCA9PiBkaXNhYmxlIGZpbHRlcmluZworICogICAgICAxID0+IGVuYWJsZSBmaWx0ZXJpbmcKKyAqCisgKiBjb25maWcgPSBTM0MyNDEwX0VJTlRGTFRfUENMSyBvciBTM0MyNDEwX0VJTlRGTFRfRVhUQ0xLIG9ycmVkIHdpdGgKKyAqICAgICAgICAgIHdpZHRoIG9mIGZpbHRlciAoMCB0aHJvdWdoIDYzKQorICoKKyAqCisqLworCitleHRlcm4gaW50IHMzYzI0MTBfZ3Bpb19pcnFmaWx0ZXIodW5zaWduZWQgaW50IHBpbiwgdW5zaWduZWQgaW50IG9uLAorCQkJCSAgdW5zaWduZWQgaW50IGNvbmZpZyk7CisKKy8qIHMzYzI0MTBfZ3Bpb19wdWxsdXAKKyAqCisgKiBjb25maWd1cmUgdGhlIHB1bGwtdXAgY29udHJvbCBvbiB0aGUgZ2l2ZW4gcGluCisgKgorICogdG8gPSAxID0+IGRpc2FibGUgdGhlIHB1bGwtdXAKKyAqICAgICAgMCA9PiBlbmFibGUgdGhlIHB1bGwtdXAKKyAqCisgKiBlZzsKKyAqCisgKiAgIHMzYzI0MTBfZ3Bpb19wdWxsdXAoUzNDMjQxMF9HUEIwLCAwKTsKKyAqICAgczNjMjQxMF9ncGlvX3B1bGx1cChTM0MyNDEwX0dQRTgsIDApOworKi8KKworZXh0ZXJuIHZvaWQgczNjMjQxMF9ncGlvX3B1bGx1cCh1bnNpZ25lZCBpbnQgcGluLCB1bnNpZ25lZCBpbnQgdG8pOworCitleHRlcm4gdm9pZCBzM2MyNDEwX2dwaW9fc2V0cGluKHVuc2lnbmVkIGludCBwaW4sIHVuc2lnbmVkIGludCB0byk7CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgczNjMjQxMF9ncGlvX2dldHBpbih1bnNpZ25lZCBpbnQgcGluKTsKKworZXh0ZXJuIHVuc2lnbmVkIGludCBzM2MyNDEwX21vZGlmeV9taXNjY3IodW5zaWduZWQgaW50IGNsciwgdW5zaWduZWQgaW50IGNoZyk7CisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworI2luY2x1ZGUgPGFzbS9zaXplcy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL21hcC5oPgorCisvKiBtYWNoaW5lIHNwZWNpZmljIGhhcmR3YXJlIGRlZmluaXRpb25zIHNob3VsZCBnbyBhZnRlciB0aGlzICovCisKKy8qIGN1cnJlbnRseSBoZXJlIHVudGlsIG1vdmVkIGludG8gY29uZmlnICh0b2RvKSAqLworI2RlZmluZSBDT05GSUdfTk9fTVVMVElXT1JEX0lPCisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX0hBUkRXQVJFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvaWRsZS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9pZGxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ5MjI3YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvaWRsZS5oCkBAIC0wLDAgKzEsMjggQEAKKy8qIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvaWRsZS5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA0IFNpbXRlYyBFbGVjdHJvbmljcyA8bGludXhAc2ltdGVjLmNvLnVrPgorICoJCWh0dHA6Ly93d3cuc2ltdGVjLmNvLnVrL3Byb2R1Y3RzL1NXTElOVVgvCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBTM0MyNDEwIENQVSBJZGxlIGNvbnRyb2xzCisgKgorICogIENoYW5nZWxvZzoKKyAqCTI4LU9jdC0yMDA0ICBCSkQgIEluaXRpYWwgdmVyc2lvbgorICoKKyovCisKKyNpZm5kZWYgX19BU01fQVJDSF9JRExFX0gKKyNkZWZpbmUgX19BU01fQVJDSF9JRExFX0ggX19GSUxFX18KKworLyogVGhpcyBhbGxvd3MgdGhlIG92ZXItcmlkZSBvZiB0aGUgZGVmYXVsdCBpZGxlIGNvZGUsIGluIGNhc2UgdGhlcmUKKyAqIGlzIGFueSBvdGhlciB0aGluZ3MgdG8gYmUgZG9uZSBvdmVyIGlkbGUgKGxpa2UgRFZTKQorKi8KKworZXh0ZXJuIHZvaWQgKCpzM2MyNHh4X2lkbGUpKHZvaWQpOworCitleHRlcm4gdm9pZCBzM2MyNHh4X2RlZmF1bHRfaWRsZSh2b2lkKTsKKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfSURMRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2lpYy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9paWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTg1NDdmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9paWMuaApAQCAtMCwwICsxLDM2IEBACisvKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2lpYy5oCisgKgorICogKGMpIDIwMDQgU2ltdGVjIEVsZWN0cm9uaWNzCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogUzNDMjQxMCAtIEkyQyBDb250cm9sbGVyIHBsYXRmcm9tX2RldmljZSBpbmZvCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBDaGFuZ2Vsb2c6CisgKgkwNS1PY3QtMjAwNCBCSkQgIENyZWF0ZWQgZmlsZQorICoJMTktT2N0LTIwMDQgQkpECSBVcGRhdGVkIGZvciBzM2MyNDQwCisqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfSUlDX0gKKyNkZWZpbmUgX19BU01fQVJDSF9JSUNfSCBfX0ZJTEVfXworCisjZGVmaW5lIFMzQ19JSUNGTEdfRklMVEVSCSgxPDwwKQkvKiBlbmFibGUgczNjMjQ0MCBmaWx0ZXIgKi8KKworLyogTm90ZXM6CisgKgkxKSBBbGwgZnJlcXVlbmNpZXMgYXJlIGV4cHJlc3NlZCBpbiBIegorICoJMikgQSB2YWx1ZSBvZiB6ZXJvIGlzIGBkbyBub3QgY2FyZWAKKyovCisKK3N0cnVjdCBzM2MyNDEwX3BsYXRmb3JtX2kyYyB7CisJdW5zaWduZWQgaW50CWZsYWdzOworCXVuc2lnbmVkIGludAlzbGF2ZV9hZGRyOwkvKiBzbGF2ZSBhZGRyZXNzIGZvciBjb250cm9sbGVyICovCisJdW5zaWduZWQgbG9uZwlidXNfZnJlcTsJLyogc3RhbmRhcmQgYnVzIGZyZXF1ZW5jeSAqLworCXVuc2lnbmVkIGxvbmcJbWF4X2ZyZXE7CS8qIG1heCBmcmVxdWVuY3kgZm9yIHRoZSBidXMgKi8KKwl1bnNpZ25lZCBsb25nCW1pbl9mcmVxOwkvKiBtaW4gZnJlcXVlbmN5IGZvciB0aGUgYnVzICovCisJdW5zaWduZWQgaW50CXNkYV9kZWxheTsJLyogcGNsa3MgKHMzYzI0NDAgb25seSkgKi8KK307CisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX0lJQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2lvLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2lvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE4MjMzYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvaW8uaApAQCAtMCwwICsxLDE5NiBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvaW8uaAorICogIGZyb20gbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtcnBjL2lvLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTcgUnVzc2VsbCBLaW5nCisgKgkgICAgIChDKSAyMDAzIFNpbXRlYyBFbGVjdHJvbmljcworICoKKyAqIE1vZGlmaWNhdGlvbnM6CisgKiAgMDYtRGVjLTE5OTcJUk1LCUNyZWF0ZWQuCisgKiAgMDItU2VwLTIwMDMgQkpECU1vZGlmaWVkIGZvciBTM0MyNDEwCisgKiAgMTAtTWFyLTIwMDUgTENWUglDaGFuZ2VkIFMzQzI0MTBfVkEgdG8gUzNDMjRYWF9WQQorICoKKyAqLworCisjaWZuZGVmIF9fQVNNX0FSTV9BUkNIX0lPX0gKKyNkZWZpbmUgX19BU01fQVJNX0FSQ0hfSU9fSAorCisjZGVmaW5lIElPX1NQQUNFX0xJTUlUIDB4ZmZmZmZmZmYKKworLyoKKyAqIFdlIHVzZSB0d28gZGlmZmVyZW50IHR5cGVzIG9mIGFkZHJlc3NpbmcgLSBQQyBzdHlsZSBhZGRyZXNzZXMsIGFuZCBBUk0KKyAqIGFkZHJlc3Nlcy4gIFBDIHN0eWxlIGFjY2Vzc2VzIHRoZSBQQyBoYXJkd2FyZSB3aXRoIHRoZSBub3JtYWwgUEMgSU8KKyAqIGFkZHJlc3NlcywgZWcgMHgzZjggZm9yIHNlcmlhbCMxLiAgQVJNIGFkZHJlc3NlcyBhcmUgYWJvdmUgQTI4CisgKiBhbmQgYXJlIHRyYW5zbGF0ZWQgdG8gdGhlIHN0YXJ0IG9mIElPLiAgTm90ZSB0aGF0IGFsbCBhZGRyZXNzZXMgYXJlCisgKiBub3Qgc2hpZnRlZCBsZWZ0IQorICovCisKKyNkZWZpbmUgX19QT1JUX1BDSU8oeCkJKCh4KSA8ICgxPDwyOCkpCisKKyNkZWZpbmUgUENJT19CQVNFCSAoUzNDMjRYWF9WQV9JU0FfV09SRCkKKyNkZWZpbmUgUENJT19CQVNFX2IJIChTM0MyNFhYX1ZBX0lTQV9CWVRFKQorI2RlZmluZSBQQ0lPX0JBU0VfdwkgKFMzQzI0WFhfVkFfSVNBX1dPUkQpCisjZGVmaW5lIFBDSU9fQkFTRV9sCSAoUzNDMjRYWF9WQV9JU0FfV09SRCkKKy8qCisgKiBEeW5hbWljIElPIGZ1bmN0aW9ucyAtIGxldCB0aGUgY29tcGlsZXIKKyAqIG9wdGltaXplIHRoZSBleHByZXNzaW9ucworICovCisKKyNkZWZpbmUgREVDTEFSRV9EWU5fT1VUKHN6LGZuc3VmZml4LGluc3RyKSBcCitzdGF0aWMgaW5saW5lIHZvaWQgX19vdXQjI2Zuc3VmZml4ICh1bnNpZ25lZCBpbnQgdmFsLCB1bnNpZ25lZCBpbnQgcG9ydCkgXAoreyBcCisJdW5zaWduZWQgbG9uZyB0ZW1wOwkJCQkgICAgICBcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCSAgICAgIFwKKwkiY21wCSUyLCAjKDE8PDI4KVxuXHQiCQkJICAgICAgXAorCSJtb3YJJTAsICUyXG5cdCIJCQkJICAgICAgXAorCSJhZGRjYwklMCwgJTAsICUzXG5cdCIJCQkJICAgICAgXAorCSJzdHIiIGluc3RyICIgJTEsIFslMCwgIzAgXQlAIG91dCIgI2Zuc3VmZml4ICAgICAgXAorCTogIj0mciIgKHRlbXApCQkJCQkgICAgICBcCisJOiAiciIgKHZhbCksICJyIiAocG9ydCksICJJciIgKFBDSU9fQkFTRV8jI2Zuc3VmZml4KSAgXAorCTogImNjIik7CQkJCQkgICAgICBcCit9CisKKworI2RlZmluZSBERUNMQVJFX0RZTl9JTihzeixmbnN1ZmZpeCxpbnN0cikJCQkJXAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBzeiBfX2luIyNmbnN1ZmZpeCAodW5zaWduZWQgaW50IHBvcnQpCQlcCit7CQkJCQkJCQkJXAorCXVuc2lnbmVkIGxvbmcgdGVtcCwgdmFsdWU7CQkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAorCSJjbXAJJTIsICMoMTw8MjgpXG5cdCIJCQkJCVwKKwkibW92CSUwLCAlMlxuXHQiCQkJCQkJXAorCSJhZGRjYwklMCwgJTAsICUzXG5cdCIJCQkJCQlcCisJImxkciIgaW5zdHIgIgklMSwgWyUwLCAjMCBdCUAgaW4iICNmbnN1ZmZpeAkJXAorCTogIj0mciIgKHRlbXApLCAiPXIiICh2YWx1ZSkJCQkJCVwKKwk6ICJyIiAocG9ydCksICJJciIgKFBDSU9fQkFTRV8jI2Zuc3VmZml4KQlcCisJOiAiY2MiKTsJCQkJCQkJXAorCXJldHVybiAodW5zaWduZWQgc3opdmFsdWU7CQkJCQlcCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbWVtICpfX2lvYWRkciAodW5zaWduZWQgbG9uZyBwb3J0KQoreworCXJldHVybiBfX1BPUlRfUENJTyhwb3J0KSA/IChQQ0lPX0JBU0UgKyBwb3J0KSA6ICh2b2lkIF9faW9tZW0gKilwb3J0OworfQorCisjZGVmaW5lIERFQ0xBUkVfSU8oc3osZm5zdWZmaXgsaW5zdHIpCVwKKwlERUNMQVJFX0RZTl9JTihzeixmbnN1ZmZpeCxpbnN0cikgXAorCURFQ0xBUkVfRFlOX09VVChzeixmbnN1ZmZpeCxpbnN0cikKKworREVDTEFSRV9JTyhjaGFyLGIsImIiKQorREVDTEFSRV9JTyhzaG9ydCx3LCJoIikKK0RFQ0xBUkVfSU8oaW50LGwsIiIpCisKKyN1bmRlZiBERUNMQVJFX0lPCisjdW5kZWYgREVDTEFSRV9EWU5fSU4KKworLyoKKyAqIENvbnN0YW50IGFkZHJlc3MgSU8gZnVuY3Rpb25zCisgKgorICogVGhlc2UgaGF2ZSB0byBiZSBtYWNyb3MgZm9yIHRoZSAnSicgY29uc3RyYWludCB0byB3b3JrIC0KKyAqICsvLTQwOTYgaW1tZWRpYXRlIG9wZXJhbmQuCisgKi8KKyNkZWZpbmUgX19vdXRiYyh2YWx1ZSxwb3J0KQkJCQkJCVwKKyh7CQkJCQkJCQkJXAorCWlmIChfX1BPUlRfUENJTygocG9ydCkpKQkJCQkJXAorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCVwKKwkJInN0cmIJJTAsIFslMSwgJTJdCUAgb3V0YmMiCQkJXAorCQk6IDogInIiICh2YWx1ZSksICJyIiAoUENJT19CQVNFKSwgIkpyIiAoKHBvcnQpKSk7CVwKKwllbHNlCQkJCQkJCQlcCisJCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJXAorCQkic3RyYgklMCwgWyUxLCAjMF0JQCBvdXRiYyIJCQlcCisJCTogOiAiciIgKHZhbHVlKSwgInIiICgocG9ydCkpKTsJCVwKK30pCisKKyNkZWZpbmUgX19pbmJjKHBvcnQpCQkJCQkJCVwKKyh7CQkJCQkJCQkJXAorCXVuc2lnbmVkIGNoYXIgcmVzdWx0OwkJCQkJCVwKKwlpZiAoX19QT1JUX1BDSU8oKHBvcnQpKSkJCQkJCVwKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQlcCisJCSJsZHJiCSUwLCBbJTEsICUyXQlAIGluYmMiCQkJCVwKKwkJOiAiPXIiIChyZXN1bHQpIDogInIiIChQQ0lPX0JBU0UpLCAiSnIiICgocG9ydCkpKTsJXAorCWVsc2UJCQkJCQkJCVwKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQlcCisJCSJsZHJiCSUwLCBbJTEsICMwXQlAIGluYmMiCQkJCVwKKwkJOiAiPXIiIChyZXN1bHQpIDogInIiICgocG9ydCkpKTsJXAorCXJlc3VsdDsJCQkJCQkJCVwKK30pCisKKyNkZWZpbmUgX19vdXR3Yyh2YWx1ZSxwb3J0KQkJCQkJCVwKKyh7CQkJCQkJCQkJXAorCXVuc2lnbmVkIGxvbmcgdiA9IHZhbHVlOwkJCQkJXAorCWlmIChfX1BPUlRfUENJTygocG9ydCkpKQkJCQkJXAorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCVwKKwkJInN0cmgJJTAsIFslMSwgJTJdCUAgb3V0d2MiCQkJXAorCQk6IDogInIiICh2KSwgInIiIChQQ0lPX0JBU0UpLCAiSnIiICgocG9ydCkpKTsJXAorCWVsc2UJCQkJCQkJCVwKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQlcCisJCSJzdHJoCSUwLCBbJTEsICMwXQlAIG91dHdjIgkJCVwKKwkJOiA6ICJyIiAodiksICJyIiAoKHBvcnQpKSk7CVwKK30pCisKKyNkZWZpbmUgX19pbndjKHBvcnQpCQkJCQkJCVwKKyh7CQkJCQkJCQkJXAorCXVuc2lnbmVkIHNob3J0IHJlc3VsdDsJCQkJCQlcCisJaWYgKF9fUE9SVF9QQ0lPKChwb3J0KSkpCQkJCQlcCisJCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJXAorCQkibGRyaAklMCwgWyUxLCAlMl0JQCBpbndjIgkJCQlcCisJCTogIj1yIiAocmVzdWx0KSA6ICJyIiAoUENJT19CQVNFKSwgIkpyIiAoKHBvcnQpKSk7CVwKKwllbHNlCQkJCQkJCQlcCisJCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJXAorCQkibGRyaAklMCwgWyUxLCAjMF0JQCBpbndjIgkJCQlcCisJCTogIj1yIiAocmVzdWx0KSA6ICJyIiAoKHBvcnQpKSk7CQlcCisJcmVzdWx0OwkJCQkJCVwKK30pCisKKyNkZWZpbmUgX19vdXRsYyh2YWx1ZSxwb3J0KQkJCQkJCVwKKyh7CQkJCQkJCQkJXAorCXVuc2lnbmVkIGxvbmcgdiA9IHZhbHVlOwkJCQkJXAorCWlmIChfX1BPUlRfUENJTygocG9ydCkpKQkJCQkJXAorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCVwKKwkJInN0cgklMCwgWyUxLCAlMl0JQCBvdXRsYyIJCQlcCisJCTogOiAiciIgKHYpLCAiciIgKFBDSU9fQkFTRSksICJKciIgKChwb3J0KSkpOwlcCisJZWxzZQkJCQkJCQkJXAorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCVwKKwkJInN0cgklMCwgWyUxLCAjMF0JQCBvdXRsYyIJCQlcCisJCTogOiAiciIgKHYpLCAiciIgKChwb3J0KSkpOwkJXAorfSkKKworI2RlZmluZSBfX2lubGMocG9ydCkJCQkJCQkJXAorKHsJCQkJCQkJCQlcCisJdW5zaWduZWQgbG9uZyByZXN1bHQ7CQkJCQkJXAorCWlmIChfX1BPUlRfUENJTygocG9ydCkpKQkJCQkJXAorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCVwKKwkJImxkcgklMCwgWyUxLCAlMl0JQCBpbmxjIgkJCQlcCisJCTogIj1yIiAocmVzdWx0KSA6ICJyIiAoUENJT19CQVNFKSwgIkpyIiAoKHBvcnQpKSk7CVwKKwllbHNlCQkJCQkJCQlcCisJCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJXAorCQkibGRyCSUwLCBbJTEsICMwXQlAIGlubGMiCQkJCVwKKwkJOiAiPXIiIChyZXN1bHQpIDogInIiICgocG9ydCkpKTsJCVwKKwlyZXN1bHQ7CQkJCQkJCQlcCit9KQorCisjZGVmaW5lIF9faW9hZGRyYyhwb3J0KQkoKF9fUE9SVF9QQ0lPKHBvcnQpID8gUENJT19CQVNFICsgKHBvcnQpIDogKHZvaWQgX19pb21lbSAqKShwb3J0KSkpCisKKyNkZWZpbmUgaW5iKHApCQkoX19idWlsdGluX2NvbnN0YW50X3AoKHApKSA/IF9faW5iYyhwKQkgICA6IF9faW5iKHApKQorI2RlZmluZSBpbncocCkJCShfX2J1aWx0aW5fY29uc3RhbnRfcCgocCkpID8gX19pbndjKHApCSAgIDogX19pbncocCkpCisjZGVmaW5lIGlubChwKQkJKF9fYnVpbHRpbl9jb25zdGFudF9wKChwKSkgPyBfX2lubGMocCkJICAgOiBfX2lubChwKSkKKyNkZWZpbmUgb3V0Yih2LHApCShfX2J1aWx0aW5fY29uc3RhbnRfcCgocCkpID8gX19vdXRiYyh2LHApIDogX19vdXRiKHYscCkpCisjZGVmaW5lIG91dHcodixwKQkoX19idWlsdGluX2NvbnN0YW50X3AoKHApKSA/IF9fb3V0d2ModixwKSA6IF9fb3V0dyh2LHApKQorI2RlZmluZSBvdXRsKHYscCkJKF9fYnVpbHRpbl9jb25zdGFudF9wKChwKSkgPyBfX291dGxjKHYscCkgOiBfX291dGwodixwKSkKKyNkZWZpbmUgX19pb2FkZHIocCkJKF9fYnVpbHRpbl9jb25zdGFudF9wKChwKSkgPyBfX2lvYWRkcihwKSAgOiBfX2lvYWRkcmMocCkpCisvKiB0aGUgZm9sbG93aW5nIG1hY3JvIGlzIGRlcHJlY2F0ZWQgKi8KKyNkZWZpbmUgaW9hZGRyKHBvcnQpCV9faW9hZGRyKChwb3J0KSkKKworI2RlZmluZSBpbnNiKHAsZCxsKQlfX3Jhd19yZWFkc2IoX19pb2FkZHIocCksZCxsKQorI2RlZmluZSBpbnN3KHAsZCxsKQlfX3Jhd19yZWFkc3coX19pb2FkZHIocCksZCxsKQorI2RlZmluZSBpbnNsKHAsZCxsKQlfX3Jhd19yZWFkc2woX19pb2FkZHIocCksZCxsKQorCisjZGVmaW5lIG91dHNiKHAsZCxsKQlfX3Jhd193cml0ZXNiKF9faW9hZGRyKHApLGQsbCkKKyNkZWZpbmUgb3V0c3cocCxkLGwpCV9fcmF3X3dyaXRlc3coX19pb2FkZHIocCksZCxsKQorI2RlZmluZSBvdXRzbChwLGQsbCkJX19yYXdfd3JpdGVzbChfX2lvYWRkcihwKSxkLGwpCisKKy8qCisgKiAxOjEgbWFwcGluZyBmb3IgaW9yZW1hcHBlZCByZWdpb25zLgorICovCisjZGVmaW5lIF9fbWVtX3BjaSh4KQkoeCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2lycXMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvaXJxcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5NzczZDYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2lycXMuaApAQCAtMCwwICsxLDEyNiBAQAorLyogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9pcnFzLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwNSBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqICAgQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogQ2hhbmdlbG9nOgorICogIDEyLU1heS0yMDAzIEJKRCAgQ3JlYXRlZCBmaWxlCisgKiAgMDgtSmFuLTIwMDMgQkpEICBMaW51eCAyLjYuMCB2ZXJzaW9uLCBtb3ZlZCBCQVNUIGJpdHMgb3V0CisgKiAgMTItTWFyLTIwMDQgQkpEICBGaXhlZCBidWcgaW4gaGVhZGVyIHByb3RlY3Rpb24KKyAqICAxMC1GZWItMjAwNSBCSkQgIEFkZGVkIGNhbWVyYSBJUlEgZnJvbSBndWlsbGF1bWUuZ291cmF0QG5leHZpc2lvbi50dgorICogIDI4LUZlYi0yMDA1IEJKRCAgVXBkYXRlZCBzM2MyNDQwIElSUXMKKyAqLworCisKKyNpZm5kZWYgX19BU01fQVJDSF9JUlFTX0gKKyNkZWZpbmUgX19BU01fQVJDSF9JUlFTX0ggX19GSUxFX18KKworCisvKiB3ZSBrZWVwIHRoZSBmaXJzdCBzZXQgb2YgQ1BVIElSUXMgb3V0IG9mIHRoZSByYW5nZSBvZgorICogdGhlIElTQSBzcGFjZSwgc28gdGhhdCB0aGUgUEMxMDQgaGFzIHRoZW0gdG8gaXRzZWxmCisgKiBhbmQgd2UgZG9uJ3QgZW5kIHVwIGhhdmluZyB0byBkbyBob3JyaWJsZSB0aGluZ3MgdG8gdGhlCisgKiBzdGFuZGFyZCBJU0EgZHJpdmVycy4uLi4KKyAqLworCisjZGVmaW5lIFMzQzI0MTBfQ1BVSVJRX09GRlNFVAkgKDE2KQorCisjZGVmaW5lIFMzQzI0MTBfSVJRKHgpICgoeCkgKyBTM0MyNDEwX0NQVUlSUV9PRkZTRVQpCisKKy8qIG1haW4gY3B1IGludGVycnVwdHMgKi8KKyNkZWZpbmUgSVJRX0VJTlQwICAgICAgUzNDMjQxMF9JUlEoMCkJICAgIC8qIDE2ICovCisjZGVmaW5lIElSUV9FSU5UMSAgICAgIFMzQzI0MTBfSVJRKDEpCisjZGVmaW5lIElSUV9FSU5UMiAgICAgIFMzQzI0MTBfSVJRKDIpCisjZGVmaW5lIElSUV9FSU5UMyAgICAgIFMzQzI0MTBfSVJRKDMpCisjZGVmaW5lIElSUV9FSU5UNHQ3ICAgIFMzQzI0MTBfSVJRKDQpCSAgICAvKiAyMCAqLworI2RlZmluZSBJUlFfRUlOVDh0MjMgICBTM0MyNDEwX0lSUSg1KQorI2RlZmluZSBJUlFfUkVTRVJWRUQ2ICBTM0MyNDEwX0lSUSg2KQkgICAgLyogZm9yIHMzYzI0MTAgKi8KKyNkZWZpbmUgSVJRX0NBTSAgICAgICAgUzNDMjQxMF9JUlEoNikJICAgIC8qIGZvciBzM2MyNDQwICovCisjZGVmaW5lIElSUV9CQVRUX0ZMVCAgIFMzQzI0MTBfSVJRKDcpCisjZGVmaW5lIElSUV9USUNLICAgICAgIFMzQzI0MTBfSVJRKDgpCSAgICAvKiAyNCAqLworI2RlZmluZSBJUlFfV0RUCSAgICAgICBTM0MyNDEwX0lSUSg5KQorI2RlZmluZSBJUlFfVElNRVIwICAgICBTM0MyNDEwX0lSUSgxMCkKKyNkZWZpbmUgSVJRX1RJTUVSMSAgICAgUzNDMjQxMF9JUlEoMTEpCisjZGVmaW5lIElSUV9USU1FUjIgICAgIFMzQzI0MTBfSVJRKDEyKQorI2RlZmluZSBJUlFfVElNRVIzICAgICBTM0MyNDEwX0lSUSgxMykKKyNkZWZpbmUgSVJRX1RJTUVSNCAgICAgUzNDMjQxMF9JUlEoMTQpCisjZGVmaW5lIElSUV9VQVJUMiAgICAgIFMzQzI0MTBfSVJRKDE1KQorI2RlZmluZSBJUlFfTENECSAgICAgICBTM0MyNDEwX0lSUSgxNikJICAgIC8qIDMyICovCisjZGVmaW5lIElSUV9ETUEwICAgICAgIFMzQzI0MTBfSVJRKDE3KQorI2RlZmluZSBJUlFfRE1BMSAgICAgICBTM0MyNDEwX0lSUSgxOCkKKyNkZWZpbmUgSVJRX0RNQTIgICAgICAgUzNDMjQxMF9JUlEoMTkpCisjZGVmaW5lIElSUV9ETUEzICAgICAgIFMzQzI0MTBfSVJRKDIwKQorI2RlZmluZSBJUlFfU0RJCSAgICAgICBTM0MyNDEwX0lSUSgyMSkKKyNkZWZpbmUgSVJRX1NQSTAgICAgICAgUzNDMjQxMF9JUlEoMjIpCisjZGVmaW5lIElSUV9VQVJUMSAgICAgIFMzQzI0MTBfSVJRKDIzKQorI2RlZmluZSBJUlFfUkVTRVJWRUQyNCBTM0MyNDEwX0lSUSgyNCkJICAgIC8qIDQwICovCisjZGVmaW5lIElSUV9ORkNPTiAgICAgIFMzQzI0MTBfSVJRKDI0KQkgICAgLyogZm9yIHMzYzI0NDAgKi8KKyNkZWZpbmUgSVJRX1VTQkQgICAgICAgUzNDMjQxMF9JUlEoMjUpCisjZGVmaW5lIElSUV9VU0JIICAgICAgIFMzQzI0MTBfSVJRKDI2KQorI2RlZmluZSBJUlFfSUlDCSAgICAgICBTM0MyNDEwX0lSUSgyNykKKyNkZWZpbmUgSVJRX1VBUlQwICAgICAgUzNDMjQxMF9JUlEoMjgpCSAgICAvKiA0NCAqLworI2RlZmluZSBJUlFfU1BJMSAgICAgICBTM0MyNDEwX0lSUSgyOSkKKyNkZWZpbmUgSVJRX1JUQwkgICAgICAgUzNDMjQxMF9JUlEoMzApCisjZGVmaW5lIElSUV9BRENQQVJFTlQgIFMzQzI0MTBfSVJRKDMxKQorCisvKiBpbnRlcnJ1cHRzIGdlbmVyYXRlZCBmcm9tIHRoZSBleHRlcm5hbCBpbnRlcnJ1cHRzIHNvdXJjZXMgKi8KKyNkZWZpbmUgSVJRX0VJTlQ0ICAgICAgUzNDMjQxMF9JUlEoMzIpCSAgIC8qIDQ4ICovCisjZGVmaW5lIElSUV9FSU5UNSAgICAgIFMzQzI0MTBfSVJRKDMzKQorI2RlZmluZSBJUlFfRUlOVDYgICAgICBTM0MyNDEwX0lSUSgzNCkKKyNkZWZpbmUgSVJRX0VJTlQ3ICAgICAgUzNDMjQxMF9JUlEoMzUpCisjZGVmaW5lIElSUV9FSU5UOCAgICAgIFMzQzI0MTBfSVJRKDM2KQorI2RlZmluZSBJUlFfRUlOVDkgICAgICBTM0MyNDEwX0lSUSgzNykKKyNkZWZpbmUgSVJRX0VJTlQxMCAgICAgUzNDMjQxMF9JUlEoMzgpCisjZGVmaW5lIElSUV9FSU5UMTEgICAgIFMzQzI0MTBfSVJRKDM5KQorI2RlZmluZSBJUlFfRUlOVDEyICAgICBTM0MyNDEwX0lSUSg0MCkKKyNkZWZpbmUgSVJRX0VJTlQxMyAgICAgUzNDMjQxMF9JUlEoNDEpCisjZGVmaW5lIElSUV9FSU5UMTQgICAgIFMzQzI0MTBfSVJRKDQyKQorI2RlZmluZSBJUlFfRUlOVDE1ICAgICBTM0MyNDEwX0lSUSg0MykKKyNkZWZpbmUgSVJRX0VJTlQxNiAgICAgUzNDMjQxMF9JUlEoNDQpCisjZGVmaW5lIElSUV9FSU5UMTcgICAgIFMzQzI0MTBfSVJRKDQ1KQorI2RlZmluZSBJUlFfRUlOVDE4ICAgICBTM0MyNDEwX0lSUSg0NikKKyNkZWZpbmUgSVJRX0VJTlQxOSAgICAgUzNDMjQxMF9JUlEoNDcpCisjZGVmaW5lIElSUV9FSU5UMjAgICAgIFMzQzI0MTBfSVJRKDQ4KQkgICAvKiA2NCAqLworI2RlZmluZSBJUlFfRUlOVDIxICAgICBTM0MyNDEwX0lSUSg0OSkKKyNkZWZpbmUgSVJRX0VJTlQyMiAgICAgUzNDMjQxMF9JUlEoNTApCisjZGVmaW5lIElSUV9FSU5UMjMgICAgIFMzQzI0MTBfSVJRKDUxKQorCisKKyNkZWZpbmUgSVJRX0VJTlQoeCkgICAgUzNDMjQxMF9JUlEoKHggPj0gNCkgPyAoSVJRX0VJTlQ0ICsgKHgpIC0gNCkgOiAoUzNDMjQxMF9JUlEoMCkgKyAoeCkpKQorCisjZGVmaW5lIElSUV9MQ0RfRklGTyAgIFMzQzI0MTBfSVJRKDUyKQorI2RlZmluZSBJUlFfTENEX0ZSQU1FICBTM0MyNDEwX0lSUSg1MykKKworLyogSVJRcyBmb3IgdGhlIGludGVyYWwgVUFSVHMsIGFuZCBBREMKKyAqIHRoZXNlIG5lZWQgdG8gYmUgb3JkZXJlZCBpbiBudW1iZXIgb2YgYXBwZWFyYW5jZSBpbiB0aGUKKyAqIFNVQlNSQyBtYXNrIHJlZ2lzdGVyCisqLworI2RlZmluZSBJUlFfUzNDVUFSVF9SWDAgIFMzQzI0MTBfSVJRKDU0KSAgIC8qIDcwICovCisjZGVmaW5lIElSUV9TM0NVQVJUX1RYMCAgUzNDMjQxMF9JUlEoNTUpICAgLyogNzEgKi8KKyNkZWZpbmUgSVJRX1MzQ1VBUlRfRVJSMCBTM0MyNDEwX0lSUSg1NikKKworI2RlZmluZSBJUlFfUzNDVUFSVF9SWDEgIFMzQzI0MTBfSVJRKDU3KQorI2RlZmluZSBJUlFfUzNDVUFSVF9UWDEgIFMzQzI0MTBfSVJRKDU4KQorI2RlZmluZSBJUlFfUzNDVUFSVF9FUlIxIFMzQzI0MTBfSVJRKDU5KQorCisjZGVmaW5lIElSUV9TM0NVQVJUX1JYMiAgUzNDMjQxMF9JUlEoNjApCisjZGVmaW5lIElSUV9TM0NVQVJUX1RYMiAgUzNDMjQxMF9JUlEoNjEpCisjZGVmaW5lIElSUV9TM0NVQVJUX0VSUjIgUzNDMjQxMF9JUlEoNjIpCisKKyNkZWZpbmUgSVJRX1RDCQkgUzNDMjQxMF9JUlEoNjMpCisjZGVmaW5lIElSUV9BREMJCSBTM0MyNDEwX0lSUSg2NCkKKworLyogZXh0cmEgaXJxcyBmb3IgczNjMjQ0MCAqLworCisjZGVmaW5lIElSUV9TM0MyNDQwX0NBTV9DCVMzQzI0MTBfSVJRKDY1KQorI2RlZmluZSBJUlFfUzNDMjQ0MF9DQU1fUAlTM0MyNDEwX0lSUSg2NikKKyNkZWZpbmUgSVJRX1MzQzI0NDBfV0RUCQlTM0MyNDEwX0lSUSg2NykKKyNkZWZpbmUgSVJRX1MzQzI0NDBfQUM5NwlTM0MyNDEwX0lSUSg2OCkKKworI2RlZmluZSBOUl9JUlFTIChJUlFfUzNDMjQ0MF9BQzk3KzEpCisKKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfSVJRX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvbWFwLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL21hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4MzNlYTUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL21hcC5oCkBAIC0wLDAgKzEsMTkyIEBACisvKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL21hcC5oCisgKgorICogKGMpIDIwMDMgU2ltdGVjIEVsZWN0cm9uaWNzCisgKiAgQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIFMzQzI0MTAgLSBNZW1vcnkgbWFwIGRlZmluaXRpb25zCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBDaGFuZ2Vsb2c6CisgKiAgMTItTWF5LTIwMDMgQkpEICAgQ3JlYXRlZCBmaWxlCisgKiAgMDYtSmFuLTIwMDMgQkpEICAgTGludXggMi42LjAgdmVyc2lvbiwgbW92ZWQgYmFzdCBzcGVjaWZpY3Mgb3V0CisgKiAgMTAtRmViLTIwMDUgQkpEICAgQWRkZWQgQ0FNSUYgZGVmaW5pdGlvbiBmcm9tIGd1aWxsYXVtZS5nb3VyYXRAbmV4dmlzaW9uLnR2CisgKiAgMTAtTWFyLTIwMDUgTENWUiAgQWRkZWQgc3VwcG9ydCB0byBTM0MyNDAwLCBjaGFuZ2VkIHtWQSxTWn0gbmFtZXMKKyovCisKKyNpZm5kZWYgX19BU01fQVJDSF9NQVBfSAorI2RlZmluZSBfX0FTTV9BUkNIX01BUF9ICisKKy8qIHdlIGhhdmUgYSBiaXQgb2YgYSB0aWdodCBzcXVlZXplIHRvIGZpdCBhbGwgb3VyIHJlZ2lzdGVycyBmcm9tCisgKiAweEYwMDAwMDAwMCB1cHdhcmRzLCBzaW5jZSB3ZSB1c2UgYWxsIG9mIHRoZSBuR0NTIHNwYWNlIGluIHNvbWUKKyAqIGNhcGFjaXR5LCBhbmQgYWxzbyBuZWVkIHRvIGZpdCB0aGUgUzNDMjQxMCByZWdpc3RlcnMgaW4gYXMgd2VsbC4uLgorICoKKyAqIHdlIHRyeSB0byBlbnN1cmUgc3R1ZmYgbGlrZSB0aGUgSVJRIHJlZ2lzdGVycyBhcmUgYXZhaWxhYmxlIGZvcgorICogYW4gc2luZ2xlIE1PVlMgaW5zdHJ1Y3Rpb24gKGllLCBvbmx5IDggYml0cyBvZiBzZXQgZGF0YSkKKyAqCisgKiBOb3RlLCB3ZSBhcmUgdHJ5aW5nIHRvIHJlbW92ZSBzb21lIG9mIHRoZXNlIGZyb20gdGhlIGltcGxlbWVudGF0aW9uCisgKiBhcyB0aGV5IGFyZSBvbmx5IHVzZWZ1bCB0byBjZXJ0YWluIGRyaXZlcnMuLi4KKyAqLworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2RlZmluZSBTM0MyNDEwX0FERFIoeCkJICAoKHZvaWQgX19pb21lbSAqKTB4RjAwMDAwMDAgKyAoeCkpCisjZWxzZQorI2RlZmluZSBTM0MyNDEwX0FERFIoeCkJICAoMHhGMDAwMDAwMCArICh4KSkKKyNlbmRpZgorCisjZGVmaW5lIFMzQzI0MDBfQUREUih4KQkgIFMzQzI0MTBfQUREUih4KQorCisvKiBpbnRlcnJ1cHQgY29udHJvbGxlciBpcyB0aGUgZmlyc3QgdGhpbmcgd2UgcHV0IGluLCB0byBtYWtlCisgKiB0aGUgYXNzZW1ibHkgY29kZSBmb3IgdGhlIGlycSBkZXRlY3Rpb24gZWFzaWVyCisgKi8KKyNkZWZpbmUgUzNDMjRYWF9WQV9JUlEJICAgUzNDMjQxMF9BRERSKDB4MDAwMDAwMDApCisjZGVmaW5lIFMzQzI0MDBfUEFfSVJRCSAgICgweDE0NDAwMDAwKQorI2RlZmluZSBTM0MyNDEwX1BBX0lSUQkgICAoMHg0QTAwMDAwMCkKKyNkZWZpbmUgUzNDMjRYWF9TWl9JUlEJICAgU1pfMU0KKworLyogbWVtb3J5IGNvbnRyb2xsZXIgcmVnaXN0ZXJzICovCisjZGVmaW5lIFMzQzI0WFhfVkFfTUVNQ1RSTCBTM0MyNDEwX0FERFIoMHgwMDEwMDAwMCkKKyNkZWZpbmUgUzNDMjQwMF9QQV9NRU1DVFJMICgweDE0MDAwMDAwKQorI2RlZmluZSBTM0MyNDEwX1BBX01FTUNUUkwgKDB4NDgwMDAwMDApCisjZGVmaW5lIFMzQzI0WFhfU1pfTUVNQ1RSTCBTWl8xTQorCisvKiBVU0IgaG9zdCBjb250cm9sbGVyICovCisjZGVmaW5lIFMzQzI0WFhfVkFfVVNCSE9TVCBTM0MyNDEwX0FERFIoMHgwMDIwMDAwMCkKKyNkZWZpbmUgUzNDMjQwMF9QQV9VU0JIT1NUICgweDE0MjAwMDAwKQorI2RlZmluZSBTM0MyNDEwX1BBX1VTQkhPU1QgKDB4NDkwMDAwMDApCisjZGVmaW5lIFMzQzI0WFhfU1pfVVNCSE9TVCBTWl8xTQorCisvKiBETUEgY29udHJvbGxlciAqLworI2RlZmluZSBTM0MyNFhYX1ZBX0RNQQkgICBTM0MyNDEwX0FERFIoMHgwMDMwMDAwMCkKKyNkZWZpbmUgUzNDMjQwMF9QQV9ETUEJICAgKDB4MTQ2MDAwMDApCisjZGVmaW5lIFMzQzI0MTBfUEFfRE1BCSAgICgweDRCMDAwMDAwKQorI2RlZmluZSBTM0MyNFhYX1NaX0RNQQkgICBTWl8xTQorCisvKiBDbG9jayBhbmQgUG93ZXIgbWFuYWdlbWVudCAqLworI2RlZmluZSBTM0MyNFhYX1ZBX0NMS1BXUiAgUzNDMjQxMF9BRERSKDB4MDA0MDAwMDApCisjZGVmaW5lIFMzQzI0MDBfUEFfQ0xLUFdSICAoMHgxNDgwMDAwMCkKKyNkZWZpbmUgUzNDMjQxMF9QQV9DTEtQV1IgICgweDRDMDAwMDAwKQorI2RlZmluZSBTM0MyNFhYX1NaX0NMS1BXUiAgU1pfMU0KKworLyogTENEIGNvbnRyb2xsZXIgKi8KKyNkZWZpbmUgUzNDMjRYWF9WQV9MQ0QJICAgUzNDMjQxMF9BRERSKDB4MDA2MDAwMDApCisjZGVmaW5lIFMzQzI0MDBfUEFfTENECSAgICgweDE0QTAwMDAwKQorI2RlZmluZSBTM0MyNDEwX1BBX0xDRAkgICAoMHg0RDAwMDAwMCkKKyNkZWZpbmUgUzNDMjRYWF9TWl9MQ0QJICAgU1pfMU0KKworLyogTkFORCBmbGFzaCBjb250cm9sbGVyICovCisjZGVmaW5lIFMzQzI0WFhfVkFfTkFORAkgICBTM0MyNDEwX0FERFIoMHgwMDcwMDAwMCkKKyNkZWZpbmUgUzNDMjQxMF9QQV9OQU5ECSAgICgweDRFMDAwMDAwKQorI2RlZmluZSBTM0MyNFhYX1NaX05BTkQJICAgU1pfMU0KKworLyogTU1DIGNvbnRyb2xsZXIgLSBhdmFpbGFibGUgb24gdGhlIFMzQzI0MDAgKi8KKyNkZWZpbmUgUzNDMjQwMF9WQV9NTUMgCSAgIFMzQzI0MDBfQUREUigweDAwNzAwMDAwKQorI2RlZmluZSBTM0MyNDAwX1BBX01NQyAJICAgKDB4MTVBMDAwMDApCisjZGVmaW5lIFMzQzI0MDBfU1pfTU1DIAkgICBTWl8xTQorCisvKiBVQVJUcyAqLworI2RlZmluZSBTM0MyNFhYX1ZBX1VBUlQJICAgUzNDMjQxMF9BRERSKDB4MDA4MDAwMDApCisjZGVmaW5lIFMzQzI0MDBfUEFfVUFSVAkgICAoMHgxNTAwMDAwMCkKKyNkZWZpbmUgUzNDMjQxMF9QQV9VQVJUCSAgICgweDUwMDAwMDAwKQorI2RlZmluZSBTM0MyNFhYX1NaX1VBUlQJICAgU1pfMU0KKworLyogVGltZXJzICovCisjZGVmaW5lIFMzQzI0WFhfVkFfVElNRVIgICBTM0MyNDEwX0FERFIoMHgwMDkwMDAwMCkKKyNkZWZpbmUgUzNDMjQwMF9QQV9USU1FUiAgICgweDE1MTAwMDAwKQorI2RlZmluZSBTM0MyNDEwX1BBX1RJTUVSICAgKDB4NTEwMDAwMDApCisjZGVmaW5lIFMzQzI0WFhfU1pfVElNRVIgICBTWl8xTQorCisvKiBVU0IgRGV2aWNlIHBvcnQgKi8KKyNkZWZpbmUgUzNDMjRYWF9WQV9VU0JERVYgIFMzQzI0MTBfQUREUigweDAwQTAwMDAwKQorI2RlZmluZSBTM0MyNDAwX1BBX1VTQkRFViAgKDB4MTUyMDAxNDApCisjZGVmaW5lIFMzQzI0MTBfUEFfVVNCREVWICAoMHg1MjAwMDAwMCkKKyNkZWZpbmUgUzNDMjRYWF9TWl9VU0JERVYgIFNaXzFNCisKKy8qIFdhdGNoZG9nICovCisjZGVmaW5lIFMzQzI0WFhfVkFfV0FUQ0hET0cgUzNDMjQxMF9BRERSKDB4MDBCMDAwMDApCisjZGVmaW5lIFMzQzI0MDBfUEFfV0FUQ0hET0cgKDB4MTUzMDAwMDApCisjZGVmaW5lIFMzQzI0MTBfUEFfV0FUQ0hET0cgKDB4NTMwMDAwMDApCisjZGVmaW5lIFMzQzI0WFhfU1pfV0FUQ0hET0cgU1pfMU0KKworLyogSUlDIGhhcmR3YXJlIGNvbnRyb2xsZXIgKi8KKyNkZWZpbmUgUzNDMjRYWF9WQV9JSUMJICAgUzNDMjQxMF9BRERSKDB4MDBDMDAwMDApCisjZGVmaW5lIFMzQzI0MDBfUEFfSUlDCSAgICgweDE1NDAwMDAwKQorI2RlZmluZSBTM0MyNDEwX1BBX0lJQwkgICAoMHg1NDAwMDAwMCkKKyNkZWZpbmUgUzNDMjRYWF9TWl9JSUMJICAgU1pfMU0KKworI2RlZmluZSBWQV9JSUNfQkFTRQkgICAoUzNDMjRYWF9WQV9JSUMpCisKKy8qIElJUyBjb250cm9sbGVyICovCisjZGVmaW5lIFMzQzI0WFhfVkFfSUlTCSAgIFMzQzI0MTBfQUREUigweDAwRDAwMDAwKQorI2RlZmluZSBTM0MyNDAwX1BBX0lJUwkgICAoMHgxNTUwODAwMCkKKyNkZWZpbmUgUzNDMjQxMF9QQV9JSVMJICAgKDB4NTUwMDAwMDApCisjZGVmaW5lIFMzQzI0WFhfU1pfSUlTCSAgIFNaXzFNCisKKy8qIEdQSU8gcG9ydHMgKi8KKyNkZWZpbmUgUzNDMjRYWF9WQV9HUElPCSAgIFMzQzI0MTBfQUREUigweDAwRTAwMDAwKQorI2RlZmluZSBTM0MyNDAwX1BBX0dQSU8JICAgKDB4MTU2MDAwMDApCisjZGVmaW5lIFMzQzI0MTBfUEFfR1BJTwkgICAoMHg1NjAwMDAwMCkKKyNkZWZpbmUgUzNDMjRYWF9TWl9HUElPCSAgIFNaXzFNCisKKy8qIFJUQyAqLworI2RlZmluZSBTM0MyNFhYX1ZBX1JUQwkgICBTM0MyNDEwX0FERFIoMHgwMEYwMDAwMCkKKyNkZWZpbmUgUzNDMjQwMF9QQV9SVEMJICAgKDB4MTU3MDAwNDApCisjZGVmaW5lIFMzQzI0MTBfUEFfUlRDCSAgICgweDU3MDAwMDAwKQorI2RlZmluZSBTM0MyNFhYX1NaX1JUQwkgICBTWl8xTQorCisvKiBBREMgKi8KKyNkZWZpbmUgUzNDMjRYWF9WQV9BREMJICAgUzNDMjQxMF9BRERSKDB4MDEwMDAwMDApCisjZGVmaW5lIFMzQzI0MDBfUEFfQURDCSAgICgweDE1ODAwMDAwKQorI2RlZmluZSBTM0MyNDEwX1BBX0FEQwkgICAoMHg1ODAwMDAwMCkKKyNkZWZpbmUgUzNDMjRYWF9TWl9BREMJICAgU1pfMU0KKworLyogU1BJICovCisjZGVmaW5lIFMzQzI0WFhfVkFfU1BJCSAgIFMzQzI0MTBfQUREUigweDAxMTAwMDAwKQorI2RlZmluZSBTM0MyNDAwX1BBX1NQSQkgICAoMHgxNTkwMDAwMCkKKyNkZWZpbmUgUzNDMjQxMF9QQV9TUEkJICAgKDB4NTkwMDAwMDApCisjZGVmaW5lIFMzQzI0WFhfU1pfU1BJCSAgIFNaXzFNCisKKy8qIFNESSAqLworI2RlZmluZSBTM0MyNFhYX1ZBX1NESQkgICBTM0MyNDEwX0FERFIoMHgwMTIwMDAwMCkKKyNkZWZpbmUgUzNDMjQxMF9QQV9TREkJICAgKDB4NUEwMDAwMDApCisjZGVmaW5lIFMzQzI0WFhfU1pfU0RJCSAgIFNaXzFNCisKKy8qIENBTUlGICovCisjZGVmaW5lIFMzQzI0NDBfUEFfQ0FNSUYgICAoMHg0RjAwMDAwMCkKKyNkZWZpbmUgUzNDMjQ0MF9TWl9DQU1JRiAgIFNaXzFNCisKKy8qIElTQSBzdHlsZSBJTywgZm9yIGVhY2ggbWFjaGluZSB0byBzb3J0IG91dCBtYXBwaW5ncyBmb3IsIGlmIGl0CisgKiBpbXBsZW1lbnRzIGl0LiBXZSByZXNlcnZlIHR3byAxNk0gcmVnaW9ucyBmb3IgSVNBLgorICovCisKKyNkZWZpbmUgUzNDMjRYWF9WQV9JU0FfV09SRCAgUzNDMjQxMF9BRERSKDB4MDIwMDAwMDApCisjZGVmaW5lIFMzQzI0WFhfVkFfSVNBX0JZVEUgIFMzQzI0MTBfQUREUigweDAzMDAwMDAwKQorCisvKiBwaHlzaWNhbCBhZGRyZXNzZXMgb2YgYWxsIHRoZSBjaGlwLXNlbGVjdCBhcmVhcyAqLworCisjZGVmaW5lIFMzQzI0MTBfQ1MwICgweDAwMDAwMDAwKQorI2RlZmluZSBTM0MyNDEwX0NTMSAoMHgwODAwMDAwMCkKKyNkZWZpbmUgUzNDMjQxMF9DUzIgKDB4MTAwMDAwMDApCisjZGVmaW5lIFMzQzI0MTBfQ1MzICgweDE4MDAwMDAwKQorI2RlZmluZSBTM0MyNDEwX0NTNCAoMHgyMDAwMDAwMCkKKyNkZWZpbmUgUzNDMjQxMF9DUzUgKDB4MjgwMDAwMDApCisjZGVmaW5lIFMzQzI0MTBfQ1M2ICgweDMwMDAwMDAwKQorI2RlZmluZSBTM0MyNDEwX0NTNyAoMHgzODAwMDAwMCkKKworI2RlZmluZSBTM0MyNDEwX1NEUkFNX1BBICAgIChTM0MyNDEwX0NTNikKKworI2RlZmluZSBTM0MyNDAwX0NTMCAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgUzNDMjQwMF9DUzEgKDB4MDIwMDAwMDApCisjZGVmaW5lIFMzQzI0MDBfQ1MyICgweDA0MDAwMDAwKQorI2RlZmluZSBTM0MyNDAwX0NTMyAoMHgwNjAwMDAwMCkKKyNkZWZpbmUgUzNDMjQwMF9DUzQgKDB4MDgwMDAwMDApCisjZGVmaW5lIFMzQzI0MDBfQ1M1ICgweDBBMDAwMDAwKQorI2RlZmluZSBTM0MyNDAwX0NTNiAoMHgwQzAwMDAwMCkKKyNkZWZpbmUgUzNDMjQwMF9DUzcgKDB4MEUwMDAwMDApCisKKyNkZWZpbmUgUzNDMjQwMF9TRFJBTV9QQSAgICAoUzNDMjQwMF9DUzYpCisKKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfTUFQX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvbWVtb3J5LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL21lbW9yeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzODBhYjEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL21lbW9yeS5oCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9tZW1vcnkuaAorICoKKyAqICBmcm9tIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLXJwYy9tZW1vcnkuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTYsMTk5NywxOTk4IFJ1c3NlbGwgS2luZy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBDaGFuZ2Vsb2c6CisgKiAgIDIwLU9jdC0xOTk2IFJNSwlDcmVhdGVkCisgKiAgIDMxLURlYy0xOTk3IFJNSwlGaXhlZCBkZWZpbml0aW9ucyB0byByZWR1Y2Ugd2FybmluZ3MKKyAqICAgMTEtSmFuLTE5OTggUk1LCVVuaW5saW5lZCB0byByZWR1Y2UgaGl0cyBvbiBjYWNoZQorICogICAwOC1GZWItMTk5OCBSTUsJQWRkZWQgX192aXJ0X3RvX2J1cyBhbmQgX19idXNfdG9fdmlydAorICogICAyMS1NYXItMTk5OSBSTUsJUmVuYW1lZCB0byBtZW1vcnkuaAorICoJCSBSTUsJQWRkZWQgVEFTS19TSVpFIGFuZCBQQUdFX09GRlNFVAorICogICAwNS1BcHItMjAwNCBCSkQgICAgQ29waWVkIGFuZCBhbHRlcmVkIGZvciBhcmNoLXMzYzI0MTAKKyAqICAgMTctTWFyLTIwMDUgTENWUiAgIE1vZGlmaWVkIGZvciBTM0MyNDAwCisqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfTUVNT1JZX0gKKyNkZWZpbmUgX19BU01fQVJDSF9NRU1PUllfSAorCisvKgorICogRFJBTSBzdGFydHMgYXQgMHgzMDAwMDAwMCBmb3IgUzNDMjQxMC9TM0MyNDQwCisgKiBhbmQgYXQgMHgwQzAwMDAwMCBmb3IgUzNDMjQwMAorICovCisjaWZkZWYgQ09ORklHX0NQVV9TM0MyNDAwCisjZGVmaW5lIFBIWVNfT0ZGU0VUCSgweDBDMDAwMDAwVUwpCisjZWxzZQorI2RlZmluZSBQSFlTX09GRlNFVAkoMHgzMDAwMDAwMFVMKQorI2VuZGlmCisKKy8qCisgKiBUaGVzZSBhcmUgZXhhY3RseSB0aGUgc2FtZSBvbiB0aGUgUzNDMjQxMCBhcyB0aGUKKyAqIHBoeXNpY2FsIG1lbW9yeSB2aWV3LgorKi8KKworI2RlZmluZSBfX3ZpcnRfdG9fYnVzKHgpIF9fdmlydF90b19waHlzKHgpCisjZGVmaW5lIF9fYnVzX3RvX3ZpcnQoeCkgX19waHlzX3RvX3ZpcnQoeCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL25hbmQuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvbmFuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNDhhYzAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL25hbmQuaApAQCAtMCwwICsxLDQ4IEBACisvKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL25hbmQuaAorICoKKyAqIChjKSAyMDA0IFNpbXRlYyBFbGVjdHJvbmljcworICogIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBTM0MyNDEwIC0gTkFORCBkZXZpY2UgY29udHJvbGxlciBwbGF0ZnJvbV9kZXZpY2UgaW5mbworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogQ2hhbmdlbG9nOgorICoJMjMtU2VwLTIwMDQgQkpEICBDcmVhdGVkIGZpbGUKKyovCisKKy8qIHN0cnVjdCBzM2MyNDEwX25hbmRfc2V0CisgKgorICogZGVmaW5lIGFuIHNldCBvZiBvbmUgb3IgbW9yZSBuYW5kIGNoaXBzIHJlZ2lzdGVyZWQgd2l0aCBhbiB1bmlxdWUgbXRkCisgKgorICogbnJfY2hpcHMJID0gbnVtYmVyIG9mIGNoaXBzIGluIHRoaXMgc2V0CisgKiBucl9wYXJ0aXRpb25zID0gbnVtYmVyIG9mIHBhcnRpdGlvbnMgcG9pbnRlZCB0byBiZSBwYXJ0aXRvb25zIChvciB6ZXJvKQorICogbmFtZQkJID0gbmFtZSBvZiBzZXQgKG9wdGlvbmFsKQorICogbnJfbWFwCSA9IG1hcCBmb3IgbG93LWxheWVyIGxvZ2ljYWwgdG8gcGh5c2ljYWwgY2hpcCBudW1iZXJzIChvcHRpb24pCisgKiBwYXJ0aXRpb25zCSA9IG10ZCBwYXJ0aXRpb24gbGlzdAorKi8KKworc3RydWN0IHMzYzI0MTBfbmFuZF9zZXQgeworCWludAkJCW5yX2NoaXBzOworCWludAkJCW5yX3BhcnRpdGlvbnM7CisJY2hhcgkJCSpuYW1lOworCWludAkJCSpucl9tYXA7CisJc3RydWN0IG10ZF9wYXJ0aXRpb24JKnBhcnRpdGlvbnM7Cit9OworCitzdHJ1Y3QgczNjMjQxMF9wbGF0Zm9ybV9uYW5kIHsKKwkvKiB0aW1pbmcgaW5mb3JtYXRpb24gZm9yIGNvbnRyb2xsZXIsIGFsbCB0aW1lcyBpbiBuYW5vc2Vjb25kcyAqLworCisJaW50CXRhY2xzOwkvKiB0aW1lIGZvciBhY3RpdmUgQ0xFL0FMRSB0byBuV0Uvbk9FICovCisJaW50CXR3cnBoMDsJLyogYWN0aXZlIHRpbWUgZm9yIG5XRS9uT0UgKi8KKwlpbnQJdHdycGgxOwkvKiB0aW1lIGZvciByZWxlYXNlIENMRS9BTEUgZnJvbSBuV0Uvbk9FIGluYWN0aXZlICovCisKKwlpbnQJCQlucl9zZXRzOworCXN0cnVjdCBzM2MyNDEwX25hbmRfc2V0ICpzZXRzOworCisJdm9pZAkJCSgqc2VsZWN0X2NoaXApKHN0cnVjdCBzM2MyNDEwX25hbmRfc2V0ICosCisJCQkJCSAgICAgICBpbnQgY2hpcCk7Cit9OworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL290b20tbWFwLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL290b20tbWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQwYzkzNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvb3RvbS1tYXAuaApAQCAtMCwwICsxLDMwIEBACisvKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL290b20tbWFwLmgKKyAqCisgKiAoYykgMjAwNSBHdWlsbGF1bWUgR09VUkFUIC8gTmV4VmlzaW9uCisgKiAgICAgICAgICBndWlsbGF1bWUuZ291cmF0QG5leHZpc2lvbi5mcgorICoKKyAqIE5leFZpc2lvbiBPVE9NIGJvYXJkIG1lbW9yeSBtYXAgZGVmaW5pdGlvbnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworLyogbmVlZHMgYXJjaC9tYXAuaCBpbmNsdWRpbmcgd2l0aCB0aGlzICovCisKKy8qIG9rLCB3ZSd2ZSB1c2VkIHVwIHRvIDB4MDEzMDAwMDAsIG5vdyB3ZSBuZWVkIHRvIGZpbmQgc3BhY2UgZm9yIHRoZQorICogcGVyaXBoZXJhbHMgdGhhdCBsaXZlIGluIHRoZSBuR0NTW3hdIGFyZWFzLCB3aGljaCBhcmUgcXVpdGUgbnVtZXJvdXMKKyAqIGluIHRoZWlyIHNwYWNlLgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9PVE9NTUFQX0gKKyNkZWZpbmUgX19BU01fQVJDSF9PVE9NTUFQX0gKKworI2RlZmluZSBPVE9NX1BBX0NTODkwMEFfQkFTRSAgICAgICAoUzNDMjQxMF9DUzMgKyAweDAxMDAwMDAwKQkvKiBuR0NTMyArMHgwMTAwMDAwMCAqLworI2RlZmluZSBPVE9NX1ZBX0NTODkwMEFfQkFTRSAgICAgICBTM0MyNDEwX0FERFIoMHgwNDAwMDAwMCkJCS8qIDB4RjQwMDAwMDAgKi8KKworLyogcGh5c2ljYWwgb2Zmc2V0IGFkZHJlc3NlcyBmb3IgdGhlIHBlcmlwaGVyYWxzICovCisKKyNkZWZpbmUgT1RPTV9QQV9GTEFTSDBfQkFTRSAgICAgICAgKFMzQzI0MTBfQ1MwKQkJCQkvKiBCYW5rIDAgKi8KKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfT1RPTU1BUF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3BhcmFtLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3BhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDgzZDNmMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcGFyYW0uaApAQCAtMCwwICsxLDI3IEBACisvKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3BhcmFtLmgKKyAqCisgKiAoYykgMjAwMyBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqICBCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogUzNDMjQxMCAtIE1hY2hpbmUgcGFyYW1ldGVycworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogQ2hhbmdlbG9nOgorICogIDAyLVNlcC0yMDAzIEJKRCAgQ3JlYXRlZCBmaWxlCisgKiAgMTItTWFyLTIwMDQgQkpEICBBZGRlZCBpbmNsdWRlIHByb3RlY3Rpb24KKyovCisKKyNpZm5kZWYgX19BU01fQVJDSF9QQVJBTV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfUEFSQU1fSAorCisvKiB3ZSBjYW5ub3QgZ2V0IG91ciB0aW1lciBkb3duIHRvIDEwMEh6IHdpdGggdGhlIHNldHVwIGFzIGlzLCBidXQgd2UgY2FuCisgKiBtYW5hZ2UgMjAwIGNsb2NrIHRpY2tzIHBlciBzZWNvbmQuLi4gaWYgdGhpcyBpcyBhIHByb2JsZW0sIHdlIGNhbiBhbHdheXMKKyAqIGFkZCBhIHNvZnR3YXJlIHByZS1zY2FsZXIgdG8gdGhlIGV2aWwgdGltZXIgc3lzdGVtcy4KKyovCisKKyNkZWZpbmUgSFogICAyMDAKKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfUEFSQU1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLWFkYy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLWFkYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1YmZjMmYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3MtYWRjLmgKQEAgLTAsMCArMSw2MyBAQAorLyogbGludXgvaW5jbHVkZS9hc20vYXJjaC1zM2MyNDEwL3JlZ3MtYWRjLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgU2hhbm5vbiBIb2xsYW5kIDxob2xsYW5kQGxvc2VyLm5ldD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW9zdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBTM0MyNDEwIEFEQyByZWdpc3RlcnMKKyAqCisgKiAgQ2hhbmdlbG9nOgorICogICAgMjctMDktMjAwNCAgICAgU0FIICAgICBDcmVhdGVkIGZpbGUKKyovCisKKyNpZm5kZWYgX19BU01fQVJDSF9SRUdTX0FEQ19ICisjZGVmaW5lIF9fQVNNX0FSQ0hfUkVHU19BRENfSCAicmVncy1hZGMuaCIKKworI2RlZmluZSBTM0MyNDEwX0FEQ1JFRyh4KSAoeCkKKworI2RlZmluZSBTM0MyNDEwX0FEQ0NPTgkgICBTM0MyNDEwX0FEQ1JFRygweDAwKQorI2RlZmluZSBTM0MyNDEwX0FEQ1RTQwkgICBTM0MyNDEwX0FEQ1JFRygweDA0KQorI2RlZmluZSBTM0MyNDEwX0FEQ0RMWQkgICBTM0MyNDEwX0FEQ1JFRygweDA4KQorI2RlZmluZSBTM0MyNDEwX0FEQ0RBVDAJICAgUzNDMjQxMF9BRENSRUcoMHgwQykKKyNkZWZpbmUgUzNDMjQxMF9BRENEQVQxCSAgIFMzQzI0MTBfQURDUkVHKDB4MTApCisKKworLyogQURDQ09OIFJlZ2lzdGVyIEJpdHMgKi8KKyNkZWZpbmUgUzNDMjQxMF9BRENDT05fRUNGTEcJCSgxPDwxNSkKKyNkZWZpbmUgUzNDMjQxMF9BRENDT05fUFJTQ0VOCQkoMTw8MTQpCisjZGVmaW5lIFMzQzI0MTBfQURDQ09OX1BSU0NWTCh4KQkoKCh4KSYweEZGKTw8NikKKyNkZWZpbmUgUzNDMjQxMF9BRENDT05fUFJTQ1ZMTUFTSwkoMHhGRjw8NikKKyNkZWZpbmUgUzNDMjQxMF9BRENDT05fU0VMTVVYKHgpCSgoKHgpJjB4Nyk8PDMpCisjZGVmaW5lIFMzQzI0MTBfQURDQ09OX01VWE1BU0sJCSgweDc8PDMpCisjZGVmaW5lIFMzQzI0MTBfQURDQ09OX1NUREJNCQkoMTw8MikKKyNkZWZpbmUgUzNDMjQxMF9BRENDT05fUkVBRF9TVEFSVAkoMTw8MSkKKyNkZWZpbmUgUzNDMjQxMF9BRENDT05fRU5BQkxFX1NUQVJUCSgxPDwwKQorI2RlZmluZSBTM0MyNDEwX0FEQ0NPTl9TVEFSVE1BU0sJKDB4Mzw8MCkKKworCisvKiBBRENUU0MgUmVnaXN0ZXIgQml0cyAqLworI2RlZmluZSBTM0MyNDEwX0FEQ1RTQ19ZTV9TRU4JCSgxPDw3KQorI2RlZmluZSBTM0MyNDEwX0FEQ1RTQ19ZUF9TRU4JCSgxPDw2KQorI2RlZmluZSBTM0MyNDEwX0FEQ1RTQ19YTV9TRU4JCSgxPDw1KQorI2RlZmluZSBTM0MyNDEwX0FEQ1RTQ19YUF9TRU4JCSgxPDw0KQorI2RlZmluZSBTM0MyNDEwX0FEQ1RTQ19QVUxMX1VQX0RJU0FCTEUJKDE8PDMpCisjZGVmaW5lIFMzQzI0MTBfQURDVFNDX0FVVE9fUFNUCQkoMTw8MikKKyNkZWZpbmUgUzNDMjQxMF9BRENUU0NfWFlfUFNUCQkoMHgzPDwwKQorCisvKiBBRENEQVQwIEJpdHMgKi8KKyNkZWZpbmUgUzNDMjQxMF9BRENEQVQwX1VQRE9XTgkJKDE8PDE1KQorI2RlZmluZSBTM0MyNDEwX0FEQ0RBVDBfQVVUT19QU1QJKDE8PDE0KQorI2RlZmluZSBTM0MyNDEwX0FEQ0RBVDBfWFlfUFNUCQkoMHgzPDwxMikKKyNkZWZpbmUgUzNDMjQxMF9BRENEQVQwX1hQREFUQV9NQVNLCSgweDAzRkYpCisKKy8qIEFEQ0RBVDEgQml0cyAqLworI2RlZmluZSBTM0MyNDEwX0FEQ0RBVDFfVVBET1dOCQkoMTw8MTUpCisjZGVmaW5lIFMzQzI0MTBfQURDREFUMV9BVVRPX1BTVAkoMTw8MTQpCisjZGVmaW5lIFMzQzI0MTBfQURDREFUMV9YWV9QU1QJCSgweDM8PDEyKQorI2RlZmluZSBTM0MyNDEwX0FEQ0RBVDFfWVBEQVRBX01BU0sJKDB4MDNGRikKKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfUkVHU19BRENfSCAqLworCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1jbG9jay5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLWNsb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTVlOTM4YgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1jbG9jay5oCkBAIC0wLDAgKzEsMTIyIEBACisvKiBsaW51eC9pbmNsdWRlL2FzbS9hcmNoLXMzYzI0MTAvcmVncy1jbG9jay5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAzLDIwMDQgU2ltdGVjIEVsZWN0cm9uaWNzIDxsaW51eEBzaW10ZWMuY28udWs+CisgKgkJICAgICAgaHR0cDovL3d3dy5zaW10ZWMuY28udWsvcHJvZHVjdHMvU1dMSU5VWC8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFMzQzI0MTAgY2xvY2sgcmVnaXN0ZXIgZGVmaW5pdGlvbnMKKyAqCisgKiAgQ2hhbmdlbG9nOgorICogICAgMTgtQXVnLTIwMDQgQmVuIERvb2tzICAgICAgICAgQWRkZWQgMjQ0MCBkZWZpbml0aW9ucworICogICAgMDgtQXVnLTIwMDQgSGVyYmVydCBQ9nR6bCAgICAgQWRkZWQgQ0xLQ09OIGRlZmluaXRpb25zCisgKiAgICAxOS0wNi0yMDAzICBCZW4gRG9va3MgICAgICAgICBDcmVhdGVkIGZpbGUKKyAqICAgIDEyLTAzLTIwMDQgIEJlbiBEb29rcyAgICAgICAgIFVwZGF0ZWQgaW5jbHVkZSBwcm90ZWN0aW9uCisgKiAgICAyOS1TZXAtMjAwNCBCZW4gRG9va3MJICAgIEZpeGVkIHVzYWdlIGZvciBhc3NlbWJseSBpbmNsdXNpb24KKyAqICAgIDEwLUZlYi0yMDA1IEJlbiBEb29rcwkgICAgRml4ZWQgQ0FNRElWTiBhZGRyZXNzIChHdWlsbGF1bWUgR291cmF0KQorICogICAgMTAtTWFyLTIwMDUgTHVjYXMgVmlsbGEgUmVhbCAgQ2hhbmdlZCBTM0MyNDEwX1ZBIHRvIFMzQzI0WFhfVkEKKyAqLworCisjaWZuZGVmIF9fQVNNX0FSTV9SRUdTX0NMT0NLCisjZGVmaW5lIF9fQVNNX0FSTV9SRUdTX0NMT0NLICIkSWQ6IGNsb2NrLmgsdiAxLjQgMjAwMy8wNC8zMCAxNDo1MDo1MSBiZW4gRXhwICQiCisKKyNkZWZpbmUgUzNDMjQxMF9DTEtSRUcoeCkgKCh4KSArIFMzQzI0WFhfVkFfQ0xLUFdSKQorCisjZGVmaW5lIFMzQzI0MTBfUExMVkFMKF9tLF9wLF9zKSAoKF9tKSA8PCAxMiB8ICgoX3ApIDw8IDQpIHwgKChfcykpKQorCisjZGVmaW5lIFMzQzI0MTBfTE9DS1RJTUUgICAgUzNDMjQxMF9DTEtSRUcoMHgwMCkKKyNkZWZpbmUgUzNDMjQxMF9NUExMQ09OCSAgICBTM0MyNDEwX0NMS1JFRygweDA0KQorI2RlZmluZSBTM0MyNDEwX1VQTExDT04JICAgIFMzQzI0MTBfQ0xLUkVHKDB4MDgpCisjZGVmaW5lIFMzQzI0MTBfQ0xLQ09OCSAgICBTM0MyNDEwX0NMS1JFRygweDBDKQorI2RlZmluZSBTM0MyNDEwX0NMS1NMT1cJICAgIFMzQzI0MTBfQ0xLUkVHKDB4MTApCisjZGVmaW5lIFMzQzI0MTBfQ0xLRElWTgkgICAgUzNDMjQxMF9DTEtSRUcoMHgxNCkKKworI2RlZmluZSBTM0MyNDEwX0NMS0NPTl9JRExFCSAgICAgKDE8PDIpCisjZGVmaW5lIFMzQzI0MTBfQ0xLQ09OX1BPV0VSCSAgICAgKDE8PDMpCisjZGVmaW5lIFMzQzI0MTBfQ0xLQ09OX05BTkQJICAgICAoMTw8NCkKKyNkZWZpbmUgUzNDMjQxMF9DTEtDT05fTENEQwkgICAgICgxPDw1KQorI2RlZmluZSBTM0MyNDEwX0NMS0NPTl9VU0JICSAgICAgKDE8PDYpCisjZGVmaW5lIFMzQzI0MTBfQ0xLQ09OX1VTQkQJICAgICAoMTw8NykKKyNkZWZpbmUgUzNDMjQxMF9DTEtDT05fUFdNVAkgICAgICgxPDw4KQorI2RlZmluZSBTM0MyNDEwX0NMS0NPTl9TREkJICAgICAoMTw8OSkKKyNkZWZpbmUgUzNDMjQxMF9DTEtDT05fVUFSVDAJICAgICAoMTw8MTApCisjZGVmaW5lIFMzQzI0MTBfQ0xLQ09OX1VBUlQxCSAgICAgKDE8PDExKQorI2RlZmluZSBTM0MyNDEwX0NMS0NPTl9VQVJUMgkgICAgICgxPDwxMikKKyNkZWZpbmUgUzNDMjQxMF9DTEtDT05fR1BJTwkgICAgICgxPDwxMykKKyNkZWZpbmUgUzNDMjQxMF9DTEtDT05fUlRDCSAgICAgKDE8PDE0KQorI2RlZmluZSBTM0MyNDEwX0NMS0NPTl9BREMJICAgICAoMTw8MTUpCisjZGVmaW5lIFMzQzI0MTBfQ0xLQ09OX0lJQwkgICAgICgxPDwxNikKKyNkZWZpbmUgUzNDMjQxMF9DTEtDT05fSUlTCSAgICAgKDE8PDE3KQorI2RlZmluZSBTM0MyNDEwX0NMS0NPTl9TUEkJICAgICAoMTw8MTgpCisKKyNkZWZpbmUgUzNDMjQxMF9QTExDT05fTURJVlNISUZUICAgICAxMgorI2RlZmluZSBTM0MyNDEwX1BMTENPTl9QRElWU0hJRlQgICAgIDQKKyNkZWZpbmUgUzNDMjQxMF9QTExDT05fU0RJVlNISUZUICAgICAwCisjZGVmaW5lIFMzQzI0MTBfUExMQ09OX01ESVZNQVNLCSAgICAgKCgxPDwoMSsoMTktMTIpKSktMSkKKyNkZWZpbmUgUzNDMjQxMF9QTExDT05fUERJVk1BU0sJICAgICAoKDE8PDUpLTEpCisjZGVmaW5lIFMzQzI0MTBfUExMQ09OX1NESVZNQVNLCSAgICAgMworCisvKiBEQ0xLQ09OIHJlZ2lzdGVyIGFkZHJlc3NlcyBpbiBncGlvLmggKi8KKworI2RlZmluZSBTM0MyNDEwX0RDTEtDT05fRENMSzBFTgkgICAgICgxPDwwKQorI2RlZmluZSBTM0MyNDEwX0RDTEtDT05fRENMSzBfUENMSyAgICgwPDwxKQorI2RlZmluZSBTM0MyNDEwX0RDTEtDT05fRENMSzBfVUNMSyAgICgxPDwxKQorI2RlZmluZSBTM0MyNDEwX0RDTEtDT05fRENMSzBfRElWKHgpICgoKHgpIC0gMSApPDw0KQorI2RlZmluZSBTM0MyNDEwX0RDTEtDT05fRENMSzBfQ01QKHgpICgoKHgpIC0gMSApPDw4KQorCisjZGVmaW5lIFMzQzI0MTBfRENMS0NPTl9EQ0xLMUVOCSAgICAgKDE8PDE2KQorI2RlZmluZSBTM0MyNDEwX0RDTEtDT05fRENMSzFfUENMSyAgICgwPDwxNykKKyNkZWZpbmUgUzNDMjQxMF9EQ0xLQ09OX0RDTEsxX1VDTEsgICAoMTw8MTcpCisjZGVmaW5lIFMzQzI0MTBfRENMS0NPTl9EQ0xLMV9ESVYoeCkgKCgoeCkgLSAxKSA8PDIwKQorCisjZGVmaW5lIFMzQzI0MTBfQ0xLRElWTl9QRElWTgkgICAgICgxPDwwKQorI2RlZmluZSBTM0MyNDEwX0NMS0RJVk5fSERJVk4JICAgICAoMTw8MSkKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKK3MzYzI0MTBfZ2V0X3BsbChpbnQgcGxsdmFsLCBpbnQgYmFzZWNsaykKK3sKKwlpbnQgbWRpdiwgcGRpdiwgc2RpdjsKKworCW1kaXYgPSBwbGx2YWwgPj4gUzNDMjQxMF9QTExDT05fTURJVlNISUZUOworCXBkaXYgPSBwbGx2YWwgPj4gUzNDMjQxMF9QTExDT05fUERJVlNISUZUOworCXNkaXYgPSBwbGx2YWwgPj4gUzNDMjQxMF9QTExDT05fU0RJVlNISUZUOworCisJbWRpdiAmPSBTM0MyNDEwX1BMTENPTl9NRElWTUFTSzsKKwlwZGl2ICY9IFMzQzI0MTBfUExMQ09OX1BESVZNQVNLOworCXNkaXYgJj0gUzNDMjQxMF9QTExDT05fU0RJVk1BU0s7CisKKwlyZXR1cm4gKGJhc2VjbGsgKiAobWRpdiArIDgpKSAvICgocGRpdiArIDIpIDw8IHNkaXYpOworfQorCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKyNpZmRlZiBDT05GSUdfQ1BVX1MzQzI0NDAKKworLyogZXh0cmEgcmVnaXN0ZXJzICovCisjZGVmaW5lIFMzQzI0NDBfQ0FNRElWTgkgICAgUzNDMjQxMF9DTEtSRUcoMHgxOCkKKworI2RlZmluZSBTM0MyNDQwX0NMS0NPTl9DQU1FUkEgICAgICAgICgxPDwxOSkKKyNkZWZpbmUgUzNDMjQ0MF9DTEtDT05fQUM5NyAgICAgICAgICAoMTw8MjApCisKKyNkZWZpbmUgUzNDMjQ0MF9DTEtESVZOX1BESVZOCSAgICAgKDE8PDApCisjZGVmaW5lIFMzQzI0NDBfQ0xLRElWTl9IRElWTl9NQVNLICAgKDM8PDEpCisjZGVmaW5lIFMzQzI0NDBfQ0xLRElWTl9IRElWTl8xICAgICAgKDA8PDEpCisjZGVmaW5lIFMzQzI0NDBfQ0xLRElWTl9IRElWTl8yICAgICAgKDE8PDEpCisjZGVmaW5lIFMzQzI0NDBfQ0xLRElWTl9IRElWTl80XzggICAgKDI8PDEpCisjZGVmaW5lIFMzQzI0NDBfQ0xLRElWTl9IRElWTl8zXzYgICAgKDM8PDEpCisjZGVmaW5lIFMzQzI0NDBfQ0xLRElWTl9VQ0xLICAgICAgICAgKDE8PDMpCisKKyNkZWZpbmUgUzNDMjQ0MF9DQU1ESVZOX0NBTUNMS19NQVNLICAoMHhmPDwwKQorI2RlZmluZSBTM0MyNDQwX0NBTURJVk5fQ0FNQ0xLX1NFTCAgICgxPDw0KQorI2RlZmluZSBTM0MyNDQwX0NBTURJVk5fSENMSzNfSEFMRiAgICgxPDw4KQorI2RlZmluZSBTM0MyNDQwX0NBTURJVk5fSENMSzRfSEFMRiAgICgxPDw5KQorI2RlZmluZSBTM0MyNDQwX0NBTURJVk5fRFZTRU4gICAgICAgICgxPDwxMikKKworI2VuZGlmIC8qIENPTkZJR19DUFVfUzNDMjQ0MCAqLworCisKKyNlbmRpZiAvKiBfX0FTTV9BUk1fUkVHU19DTE9DSyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLWRzYy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLWRzYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwMjNiMDQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3MtZHNjLmgKQEAgLTAsMCArMSwxODMgQEAKKy8qIGxpbnV4L2luY2x1ZGUvYXNtL2hhcmR3YXJlL3MzYzI0MTAvcmVncy1kc2MuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNCBTaW10ZWMgRWxlY3Ryb25pY3MgPGxpbnV4QHNpbXRlYy5jby51az4KKyAqCQkgICAgICBodHRwOi8vd3d3LnNpbXRlYy5jby51ay9wcm9kdWN0cy9TV0xJTlVYLworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogUzNDMjQ0MCBTaWduYWwgRHJpdmUgU3RyZW5ndGggQ29udHJvbAorICoKKyAqICBDaGFuZ2Vsb2c6CisgKiAgICAxMS1BdWctMjAwNCAgICAgQkpEICAgICBDcmVhdGVkIGZpbGUKKyAqICAgIDI1LUF1Zy0yMDA0ICAgICBCSkQgICAgIEFkZGVkIHRoZSBfU0VMRUNUXyogZGVmcyBmb3IgdXNpbmcgd2l0aCBmdW5jdGlvbnMKKyovCisKKworI2lmbmRlZiBfX0FTTV9BUkNIX1JFR1NfRFNDX0gKKyNkZWZpbmUgX19BU01fQVJDSF9SRUdTX0RTQ19IICIyNDQwLWRzYyIKKworI2lmZGVmIENPTkZJR19DUFVfUzNDMjQ0MAorCisjZGVmaW5lIFMzQzI0NDBfRFNDMAkgICBTM0MyNDEwX0dQSU9SRUcoMHhjNCkKKyNkZWZpbmUgUzNDMjQ0MF9EU0MxCSAgIFMzQzI0MTBfR1BJT1JFRygweGM4KQorCisjZGVmaW5lIFMzQzI0NDBfU0VMRUNUX0RTQzAgKDApCisjZGVmaW5lIFMzQzI0NDBfU0VMRUNUX0RTQzEgKDE8PDMxKQorCisjZGVmaW5lIFMzQzI0NDBfRFNDX0dFVFNISUZUKHgpICgoeCkgJiAzMSkKKworI2RlZmluZSBTM0MyNDQwX0RTQzBfRElTQUJMRQkoMTw8MzEpCisKKyNkZWZpbmUgUzNDMjQ0MF9EU0MwX0FERFIgICAgICAgKFMzQzI0NDBfU0VMRUNUX0RTQzAgfCA4KQorI2RlZmluZSBTM0MyNDQwX0RTQzBfQUREUl8xMm1BICAoMDw8OCkKKyNkZWZpbmUgUzNDMjQ0MF9EU0MwX0FERFJfMTBtQSAgKDE8PDgpCisjZGVmaW5lIFMzQzI0NDBfRFNDMF9BRERSXzhtQSAgICgyPDw4KQorI2RlZmluZSBTM0MyNDQwX0RTQzBfQUREUl82bUEgICAoMzw8OCkKKyNkZWZpbmUgUzNDMjQ0MF9EU0MwX0FERFJfTUFTSyAgKDM8PDgpCisKKy8qIEQyNC4uRDMxICovCisjZGVmaW5lIFMzQzI0NDBfRFNDMF9EQVRBMyAgICAgIChTM0MyNDQwX1NFTEVDVF9EU0MwIHwgNikKKyNkZWZpbmUgUzNDMjQ0MF9EU0MwX0RBVEEzXzEybUEgKDA8PDYpCisjZGVmaW5lIFMzQzI0NDBfRFNDMF9EQVRBM18xMG1BICgxPDw2KQorI2RlZmluZSBTM0MyNDQwX0RTQzBfREFUQTNfOG1BICAoMjw8NikKKyNkZWZpbmUgUzNDMjQ0MF9EU0MwX0RBVEEzXzZtQSAgKDM8PDYpCisjZGVmaW5lIFMzQzI0NDBfRFNDMF9EQVRBM19NQVNLICgzPDw2KQorCisvKiBEMTYuLkQyMyAqLworI2RlZmluZSBTM0MyNDQwX0RTQzBfREFUQTIgICAgICAoUzNDMjQ0MF9TRUxFQ1RfRFNDMCB8IDQpCisjZGVmaW5lIFMzQzI0NDBfRFNDMF9EQVRBMl8xMm1BICgwPDw0KQorI2RlZmluZSBTM0MyNDQwX0RTQzBfREFUQTJfMTBtQSAoMTw8NCkKKyNkZWZpbmUgUzNDMjQ0MF9EU0MwX0RBVEEyXzhtQSAgKDI8PDQpCisjZGVmaW5lIFMzQzI0NDBfRFNDMF9EQVRBMl82bUEgICgzPDw0KQorI2RlZmluZSBTM0MyNDQwX0RTQzBfREFUQTJfTUFTSyAoMzw8NCkKKworLyogRDguLkQxNSAqLworI2RlZmluZSBTM0MyNDQwX0RTQzBfREFUQTEgICAgICAoUzNDMjQ0MF9TRUxFQ1RfRFNDMCB8IDIpCisjZGVmaW5lIFMzQzI0NDBfRFNDMF9EQVRBMV8xMm1BICgwPDwyKQorI2RlZmluZSBTM0MyNDQwX0RTQzBfREFUQTFfMTBtQSAoMTw8MikKKyNkZWZpbmUgUzNDMjQ0MF9EU0MwX0RBVEExXzhtQSAgKDI8PDIpCisjZGVmaW5lIFMzQzI0NDBfRFNDMF9EQVRBMV82bUEgICgzPDwyKQorI2RlZmluZSBTM0MyNDQwX0RTQzBfREFUQTFfTUFTSyAoMzw8MikKKworLyogRDAuLkQ3ICovCisjZGVmaW5lIFMzQzI0NDBfRFNDMF9EQVRBMCAgICAgIChTM0MyNDQwX1NFTEVDVF9EU0MwIHwgMCkKKyNkZWZpbmUgUzNDMjQ0MF9EU0MwX0RBVEEwXzEybUEgKDA8PDApCisjZGVmaW5lIFMzQzI0NDBfRFNDMF9EQVRBMF8xMG1BICgxPDwwKQorI2RlZmluZSBTM0MyNDQwX0RTQzBfREFUQTBfOG1BICAoMjw8MCkKKyNkZWZpbmUgUzNDMjQ0MF9EU0MwX0RBVEEwXzZtQSAgKDM8PDApCisjZGVmaW5lIFMzQzI0NDBfRFNDMF9EQVRBMF9NQVNLICgzPDwwKQorCisjZGVmaW5lIFMzQzI0NDBfRFNDMV9TQ0sxICAgICAgIChTM0MyNDQwX1NFTEVDVF9EU0MxIHwgMjgpCisjZGVmaW5lIFMzQzI0NDBfRFNDMV9TQ0sxXzEybUEgICgwPDwyOCkKKyNkZWZpbmUgUzNDMjQ0MF9EU0MxX1NDSzFfMTBtQSAgKDE8PDI4KQorI2RlZmluZSBTM0MyNDQwX0RTQzFfU0NLMV84bUEgICAoMjw8MjgpCisjZGVmaW5lIFMzQzI0NDBfRFNDMV9TQ0sxXzZtQSAgICgzPDwyOCkKKyNkZWZpbmUgUzNDMjQ0MF9EU0MxX1NDSzFfTUFTSyAgKDM8PDI4KQorCisjZGVmaW5lIFMzQzI0NDBfRFNDMV9TQ0swICAgICAgIChTM0MyNDQwX1NFTEVDVF9EU0MxIHwgMjYpCisjZGVmaW5lIFMzQzI0NDBfRFNDMV9TQ0swXzEybUEgICgwPDwyNikKKyNkZWZpbmUgUzNDMjQ0MF9EU0MxX1NDSzBfMTBtQSAgKDE8PDI2KQorI2RlZmluZSBTM0MyNDQwX0RTQzFfU0NLMF84bUEgICAoMjw8MjYpCisjZGVmaW5lIFMzQzI0NDBfRFNDMV9TQ0swXzZtQSAgICgzPDwyNikKKyNkZWZpbmUgUzNDMjQ0MF9EU0MxX1NDSzBfTUFTSyAgKDM8PDI2KQorCisjZGVmaW5lIFMzQzI0NDBfRFNDMV9TQ0tFICAgICAgIChTM0MyNDQwX1NFTEVDVF9EU0MxIHwgMjQpCisjZGVmaW5lIFMzQzI0NDBfRFNDMV9TQ0tFXzEwbUEgICgwPDwyNCkKKyNkZWZpbmUgUzNDMjQ0MF9EU0MxX1NDS0VfOG1BICAgKDE8PDI0KQorI2RlZmluZSBTM0MyNDQwX0RTQzFfU0NLRV82bUEgICAoMjw8MjQpCisjZGVmaW5lIFMzQzI0NDBfRFNDMV9TQ0tFXzRtQSAgICgzPDwyNCkKKyNkZWZpbmUgUzNDMjQ0MF9EU0MxX1NDS0VfTUFTSyAgKDM8PDI0KQorCisvKiBTRFJBTSBuUkFTL25DQVMgKi8KKyNkZWZpbmUgUzNDMjQ0MF9EU0MxX1NEUiAgICAgICAgKFMzQzI0NDBfU0VMRUNUX0RTQzEgfCAyMikKKyNkZWZpbmUgUzNDMjQ0MF9EU0MxX1NEUl8xMG1BICAgKDA8PDIyKQorI2RlZmluZSBTM0MyNDQwX0RTQzFfU0RSXzhtQSAgICAoMTw8MjIpCisjZGVmaW5lIFMzQzI0NDBfRFNDMV9TRFJfNm1BICAgICgyPDwyMikKKyNkZWZpbmUgUzNDMjQ0MF9EU0MxX1NEUl80bUEgICAgKDM8PDIyKQorI2RlZmluZSBTM0MyNDQwX0RTQzFfU0RSX01BU0sgICAoMzw8MjIpCisKKy8qIE5BTkQgRmxhc2ggQ29udHJvbGxlciAqLworI2RlZmluZSBTM0MyNDQwX0RTQzFfTkZDICAgICAgICAoUzNDMjQ0MF9TRUxFQ1RfRFNDMSB8IDIwKQorI2RlZmluZSBTM0MyNDQwX0RTQzFfTkZDXzEwbUEgICAoMDw8MjApCisjZGVmaW5lIFMzQzI0NDBfRFNDMV9ORkNfOG1BICAgICgxPDwyMCkKKyNkZWZpbmUgUzNDMjQ0MF9EU0MxX05GQ182bUEgICAgKDI8PDIwKQorI2RlZmluZSBTM0MyNDQwX0RTQzFfTkZDXzRtQSAgICAoMzw8MjApCisjZGVmaW5lIFMzQzI0NDBfRFNDMV9ORkNfTUFTSyAgICgzPDwyMCkKKworLyogbkJFWzAuLjNdICovCisjZGVmaW5lIFMzQzI0NDBfRFNDMV9uQkUgICAgICAgIChTM0MyNDQwX1NFTEVDVF9EU0MxIHwgMTgpCisjZGVmaW5lIFMzQzI0NDBfRFNDMV9uQkVfMTBtQSAgICgwPDwxOCkKKyNkZWZpbmUgUzNDMjQ0MF9EU0MxX25CRV84bUEgICAgKDE8PDE4KQorI2RlZmluZSBTM0MyNDQwX0RTQzFfbkJFXzZtQSAgICAoMjw8MTgpCisjZGVmaW5lIFMzQzI0NDBfRFNDMV9uQkVfNG1BICAgICgzPDwxOCkKKyNkZWZpbmUgUzNDMjQ0MF9EU0MxX25CRV9NQVNLICAgKDM8PDE4KQorCisjZGVmaW5lIFMzQzI0NDBfRFNDMV9XT0UgICAgICAgIChTM0MyNDQwX1NFTEVDVF9EU0MxIHwgMTYpCisjZGVmaW5lIFMzQzI0NDBfRFNDMV9XT0VfMTBtQSAgICgwPDwxNikKKyNkZWZpbmUgUzNDMjQ0MF9EU0MxX1dPRV84bUEgICAgKDE8PDE2KQorI2RlZmluZSBTM0MyNDQwX0RTQzFfV09FXzZtQSAgICAoMjw8MTYpCisjZGVmaW5lIFMzQzI0NDBfRFNDMV9XT0VfNG1BICAgICgzPDwxNikKKyNkZWZpbmUgUzNDMjQ0MF9EU0MxX1dPRV9NQVNLICAgKDM8PDE2KQorCisjZGVmaW5lIFMzQzI0NDBfRFNDMV9DUzcgICAgICAgIChTM0MyNDQwX1NFTEVDVF9EU0MxIHwgMTQpCisjZGVmaW5lIFMzQzI0NDBfRFNDMV9DUzdfMTBtQSAgICgwPDwxNCkKKyNkZWZpbmUgUzNDMjQ0MF9EU0MxX0NTN184bUEgICAgKDE8PDE0KQorI2RlZmluZSBTM0MyNDQwX0RTQzFfQ1M3XzZtQSAgICAoMjw8MTQpCisjZGVmaW5lIFMzQzI0NDBfRFNDMV9DUzdfNG1BICAgICgzPDwxNCkKKyNkZWZpbmUgUzNDMjQ0MF9EU0MxX0NTN19NQVNLICAgKDM8PDE0KQorCisjZGVmaW5lIFMzQzI0NDBfRFNDMV9DUzYgICAgICAgIChTM0MyNDQwX1NFTEVDVF9EU0MxIHwgMTIpCisjZGVmaW5lIFMzQzI0NDBfRFNDMV9DUzZfMTBtQSAgICgwPDwxMikKKyNkZWZpbmUgUzNDMjQ0MF9EU0MxX0NTNl84bUEgICAgKDE8PDEyKQorI2RlZmluZSBTM0MyNDQwX0RTQzFfQ1M2XzZtQSAgICAoMjw8MTIpCisjZGVmaW5lIFMzQzI0NDBfRFNDMV9DUzZfNG1BICAgICgzPDwxMikKKyNkZWZpbmUgUzNDMjQ0MF9EU0MxX0NTNl9NQVNLICAgKDM8PDEyKQorCisjZGVmaW5lIFMzQzI0NDBfRFNDMV9DUzUgICAgICAgIChTM0MyNDQwX1NFTEVDVF9EU0MxIHwgMTApCisjZGVmaW5lIFMzQzI0NDBfRFNDMV9DUzVfMTBtQSAgICgwPDwxMCkKKyNkZWZpbmUgUzNDMjQ0MF9EU0MxX0NTNV84bUEgICAgKDE8PDEwKQorI2RlZmluZSBTM0MyNDQwX0RTQzFfQ1M1XzZtQSAgICAoMjw8MTApCisjZGVmaW5lIFMzQzI0NDBfRFNDMV9DUzVfNG1BICAgICgzPDwxMCkKKyNkZWZpbmUgUzNDMjQ0MF9EU0MxX0NTNV9NQVNLICAgKDM8PDEwKQorCisjZGVmaW5lIFMzQzI0NDBfRFNDMV9DUzQgICAgICAgIChTM0MyNDQwX1NFTEVDVF9EU0MxIHwgOCkKKyNkZWZpbmUgUzNDMjQ0MF9EU0MxX0NTNF8xMG1BICAgKDA8PDgpCisjZGVmaW5lIFMzQzI0NDBfRFNDMV9DUzRfOG1BICAgICgxPDw4KQorI2RlZmluZSBTM0MyNDQwX0RTQzFfQ1M0XzZtQSAgICAoMjw8OCkKKyNkZWZpbmUgUzNDMjQ0MF9EU0MxX0NTNF80bUEgICAgKDM8PDgpCisjZGVmaW5lIFMzQzI0NDBfRFNDMV9DUzRfTUFTSyAgICgzPDw4KQorCisjZGVmaW5lIFMzQzI0NDBfRFNDMV9DUzMgICAgICAgIChTM0MyNDQwX1NFTEVDVF9EU0MxIHwgNikKKyNkZWZpbmUgUzNDMjQ0MF9EU0MxX0NTM18xMG1BICAgKDA8PDYpCisjZGVmaW5lIFMzQzI0NDBfRFNDMV9DUzNfOG1BICAgICgxPDw2KQorI2RlZmluZSBTM0MyNDQwX0RTQzFfQ1MzXzZtQSAgICAoMjw8NikKKyNkZWZpbmUgUzNDMjQ0MF9EU0MxX0NTM180bUEgICAgKDM8PDYpCisjZGVmaW5lIFMzQzI0NDBfRFNDMV9DUzNfTUFTSyAgICgzPDw2KQorCisjZGVmaW5lIFMzQzI0NDBfRFNDMV9DUzIgICAgICAgIChTM0MyNDQwX1NFTEVDVF9EU0MxIHwgNCkKKyNkZWZpbmUgUzNDMjQ0MF9EU0MxX0NTMl8xMG1BICAgKDA8PDQpCisjZGVmaW5lIFMzQzI0NDBfRFNDMV9DUzJfOG1BICAgICgxPDw0KQorI2RlZmluZSBTM0MyNDQwX0RTQzFfQ1MyXzZtQSAgICAoMjw8NCkKKyNkZWZpbmUgUzNDMjQ0MF9EU0MxX0NTMl80bUEgICAgKDM8PDQpCisjZGVmaW5lIFMzQzI0NDBfRFNDMV9DUzJfTUFTSyAgICgzPDw0KQorCisjZGVmaW5lIFMzQzI0NDBfRFNDMV9DUzEgICAgICAgIChTM0MyNDQwX1NFTEVDVF9EU0MxIHwgMikKKyNkZWZpbmUgUzNDMjQ0MF9EU0MxX0NTMV8xMG1BICAgKDA8PDIpCisjZGVmaW5lIFMzQzI0NDBfRFNDMV9DUzFfOG1BICAgICgxPDwyKQorI2RlZmluZSBTM0MyNDQwX0RTQzFfQ1MxXzZtQSAgICAoMjw8MikKKyNkZWZpbmUgUzNDMjQ0MF9EU0MxX0NTMV80bUEgICAgKDM8PDIpCisjZGVmaW5lIFMzQzI0NDBfRFNDMV9DUzFfTUFTSyAgICgzPDwyKQorCisjZGVmaW5lIFMzQzI0NDBfRFNDMV9DUzAgICAgICAgIChTM0MyNDQwX1NFTEVDVF9EU0MxIHwgMAorI2RlZmluZSBTM0MyNDQwX0RTQzFfQ1MwXzEwbUEgICAoMDw8MCkKKyNkZWZpbmUgUzNDMjQ0MF9EU0MxX0NTMF84bUEgICAgKDE8PDApCisjZGVmaW5lIFMzQzI0NDBfRFNDMV9DUzBfNm1BICAgICgyPDwwKQorI2RlZmluZSBTM0MyNDQwX0RTQzFfQ1MwXzRtQSAgICAoMzw8MCkKKyNkZWZpbmUgUzNDMjQ0MF9EU0MxX0NTMF9NQVNLICAgKDM8PDApCisKKyNlbmRpZiAvKiBDT05GSUdfQ1BVX1MzQzI0NDAgKi8KKworI2VuZGlmCS8qIF9fQVNNX0FSQ0hfUkVHU19EU0NfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3MtZ3Bpby5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLWdwaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDUzY2JhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLWdwaW8uaApAQCAtMCwwICsxLDgzMSBAQAorLyogbGludXgvaW5jbHVkZS9hc20vaGFyZHdhcmUvczNjMjQxMC9yZWdzLWdwaW8uaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMywyMDA0IFNpbXRlYyBFbGVjdHJvbmljcyA8bGludXhAc2ltdGVjLmNvLnVrPgorICoJCSAgICAgICAgICAgaHR0cDovL3d3dy5zaW10ZWMuY28udWsvcHJvZHVjdHMvU1dMSU5VWC8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFMzQzI0MTAgR1BJTyByZWdpc3RlciBkZWZpbml0aW9ucworICoKKyAqICBDaGFuZ2Vsb2c6CisgKiAgICAxOS0wNi0yMDAzICAgICBCSkQgICAgIENyZWF0ZWQgZmlsZQorICogICAgMjMtMDYtMjAwMyAgICAgQkpEICAgICBVcGRhdGVkIEdTVEFUVVMgcmVnaXN0ZXJzCisgKiAgICAxMi0wMy0yMDA0ICAgICBCSkQgICAgIFVwZGF0ZWQgaW5jbHVkZSBwcm90ZWN0aW9uCisgKiAgICAyMC0wNy0yMDA0ICAgICBCSkQgICAgIEFkZGVkIEdQSU8gcGluIG51bWJlcnMsIGFkZGVkIFBvcnQgQSBkZWZpbml0aW9ucworICogICAgMDQtMTAtMjAwNCAgICAgQkpEICAgICBGaXhlZCBudW1iZXIgb2YgYnVncywgYWRkZWQgRVhUIElSUSBmaWx0ZXIgZGVmcworICogICAgMTctMTAtMjAwNCAgICAgQkpEICAgICBBZGRlZCBHU1RBVFVTMSByZWdpc3RlciBkZWZpbml0aW9ucworICogICAgMTgtMTEtMjAwNCAgICAgQkpEICAgICBGaXhlZCBkZWZpbml0aW9ucyBvZiBHUEUzLCBHUEU0LCBHUEU1IGFuZCBHUEU2CisgKiAgICAxOC0xMS0yMDA0ICAgICBCSkQgICAgIEFkZGVkIFMzQzI0NDAgQUM5NyBjb250cm9scworICogICAgMTAtTWFyLTIwMDUgICAgTENWUiAgICBDaGFuZ2VkIFMzQzI0MTBfVkEgdG8gUzNDMjRYWF9WQQorICogICAgMjgtTWFyLTIwMDUgICAgTENWUiAgICBGaXhlZCBkZWZpbml0aW9uIG9mIEdQQjEwCisqLworCisKKyNpZm5kZWYgX19BU01fQVJDSF9SRUdTX0dQSU9fSAorI2RlZmluZSBfX0FTTV9BUkNIX1JFR1NfR1BJT19IICIkSWQ6IGdwaW8uaCx2IDEuNSAyMDAzLzA1LzE5IDEyOjUxOjA4IGJlbiBFeHAgJCIKKworI2RlZmluZSBTM0MyNDEwX0dQSU9OTyhiYW5rLG9mZnNldCkgKChiYW5rKSArIChvZmZzZXQpKQorCisjZGVmaW5lIFMzQzI0MTBfR1BJT19CQU5LQSAgICgzMiowKQorI2RlZmluZSBTM0MyNDEwX0dQSU9fQkFOS0IgICAoMzIqMSkKKyNkZWZpbmUgUzNDMjQxMF9HUElPX0JBTktDICAgKDMyKjIpCisjZGVmaW5lIFMzQzI0MTBfR1BJT19CQU5LRCAgICgzMiozKQorI2RlZmluZSBTM0MyNDEwX0dQSU9fQkFOS0UgICAoMzIqNCkKKyNkZWZpbmUgUzNDMjQxMF9HUElPX0JBTktGICAgKDMyKjUpCisjZGVmaW5lIFMzQzI0MTBfR1BJT19CQU5LRyAgICgzMio2KQorI2RlZmluZSBTM0MyNDEwX0dQSU9fQkFOS0ggICAoMzIqNykKKworI2RlZmluZSBTM0MyNDEwX0dQSU9fQkFTRShwaW4pICAgKCgoKHBpbikgJiB+MzEpID4+IDEpICsgUzNDMjRYWF9WQV9HUElPKQorI2RlZmluZSBTM0MyNDEwX0dQSU9fT0ZGU0VUKHBpbikgKChwaW4pICYgMzEpCisKKy8qIGdlbmVyYWwgY29uZmlndXJhdGlvbiBvcHRpb25zICovCisKKyNkZWZpbmUgUzNDMjQxMF9HUElPX0xFQVZFICAgKDB4RkZGRkZGRkYpCisKKy8qIGNvbmZpZ3VyZSBHUElPIHBvcnRzIEEuLkcgKi8KKworI2RlZmluZSBTM0MyNDEwX0dQSU9SRUcoeCkgKCh4KSArIFMzQzI0WFhfVkFfR1BJTykKKworLyogcG9ydCBBIC0gMjJiaXRzLCB6ZXJvIGluIGJpdCBYIG1ha2VzIHBpbiBYIG91dHB1dAorICogMSBtYWtlcyBwb3J0IHNwZWNpYWwgZnVuY3Rpb24sIHRoaXMgaXMgZGVmYXVsdAorKi8KKyNkZWZpbmUgUzNDMjQxMF9HUEFDT04JICAgUzNDMjQxMF9HUElPUkVHKDB4MDApCisjZGVmaW5lIFMzQzI0MTBfR1BBREFUCSAgIFMzQzI0MTBfR1BJT1JFRygweDA0KQorCisjZGVmaW5lIFMzQzI0MTBfR1BBMCAgICAgICAgIFMzQzI0MTBfR1BJT05PKFMzQzI0MTBfR1BJT19CQU5LQSwgMCkKKyNkZWZpbmUgUzNDMjQxMF9HUEEwX09VVCAgICAgKDA8PDApCisjZGVmaW5lIFMzQzI0MTBfR1BBMF9BRERSMCAgICgxPDwwKQorCisjZGVmaW5lIFMzQzI0MTBfR1BBMSAgICAgICAgIFMzQzI0MTBfR1BJT05PKFMzQzI0MTBfR1BJT19CQU5LQSwgMSkKKyNkZWZpbmUgUzNDMjQxMF9HUEExX09VVCAgICAgKDA8PDEpCisjZGVmaW5lIFMzQzI0MTBfR1BBMV9BRERSMTYgICgxPDwxKQorCisjZGVmaW5lIFMzQzI0MTBfR1BBMiAgICAgICAgIFMzQzI0MTBfR1BJT05PKFMzQzI0MTBfR1BJT19CQU5LQSwgMikKKyNkZWZpbmUgUzNDMjQxMF9HUEEyX09VVCAgICAgKDA8PDIpCisjZGVmaW5lIFMzQzI0MTBfR1BBMl9BRERSMTcgICgxPDwyKQorCisjZGVmaW5lIFMzQzI0MTBfR1BBMyAgICAgICAgIFMzQzI0MTBfR1BJT05PKFMzQzI0MTBfR1BJT19CQU5LQSwgMykKKyNkZWZpbmUgUzNDMjQxMF9HUEEzX09VVCAgICAgKDA8PDMpCisjZGVmaW5lIFMzQzI0MTBfR1BBM19BRERSMTggICgxPDwzKQorCisjZGVmaW5lIFMzQzI0MTBfR1BBNCAgICAgICAgIFMzQzI0MTBfR1BJT05PKFMzQzI0MTBfR1BJT19CQU5LQSwgNCkKKyNkZWZpbmUgUzNDMjQxMF9HUEE0X09VVCAgICAgKDA8PDQpCisjZGVmaW5lIFMzQzI0MTBfR1BBNF9BRERSMTkgICgxPDw0KQorCisjZGVmaW5lIFMzQzI0MTBfR1BBNSAgICAgICAgIFMzQzI0MTBfR1BJT05PKFMzQzI0MTBfR1BJT19CQU5LQSwgNSkKKyNkZWZpbmUgUzNDMjQxMF9HUEE1X09VVCAgICAgKDA8PDUpCisjZGVmaW5lIFMzQzI0MTBfR1BBNV9BRERSMjAgICgxPDw1KQorCisjZGVmaW5lIFMzQzI0MTBfR1BBNiAgICAgICAgIFMzQzI0MTBfR1BJT05PKFMzQzI0MTBfR1BJT19CQU5LQSwgNikKKyNkZWZpbmUgUzNDMjQxMF9HUEE2X09VVCAgICAgKDA8PDYpCisjZGVmaW5lIFMzQzI0MTBfR1BBNl9BRERSMjEgICgxPDw2KQorCisjZGVmaW5lIFMzQzI0MTBfR1BBNyAgICAgICAgIFMzQzI0MTBfR1BJT05PKFMzQzI0MTBfR1BJT19CQU5LQSwgNykKKyNkZWZpbmUgUzNDMjQxMF9HUEE3X09VVCAgICAgKDA8PDcpCisjZGVmaW5lIFMzQzI0MTBfR1BBN19BRERSMjIgICgxPDw3KQorCisjZGVmaW5lIFMzQzI0MTBfR1BBOCAgICAgICAgIFMzQzI0MTBfR1BJT05PKFMzQzI0MTBfR1BJT19CQU5LQSwgOCkKKyNkZWZpbmUgUzNDMjQxMF9HUEE4X09VVCAgICAgKDA8PDgpCisjZGVmaW5lIFMzQzI0MTBfR1BBOF9BRERSMjMgICgxPDw4KQorCisjZGVmaW5lIFMzQzI0MTBfR1BBOSAgICAgICAgIFMzQzI0MTBfR1BJT05PKFMzQzI0MTBfR1BJT19CQU5LQSwgOSkKKyNkZWZpbmUgUzNDMjQxMF9HUEE5X09VVCAgICAgKDA8PDkpCisjZGVmaW5lIFMzQzI0MTBfR1BBOV9BRERSMjQgICgxPDw5KQorCisjZGVmaW5lIFMzQzI0MTBfR1BBMTAgICAgICAgIFMzQzI0MTBfR1BJT05PKFMzQzI0MTBfR1BJT19CQU5LQSwgMTApCisjZGVmaW5lIFMzQzI0MTBfR1BBMTBfT1VUICAgICgwPDwxMCkKKyNkZWZpbmUgUzNDMjQxMF9HUEExMF9BRERSMjUgKDE8PDEwKQorCisjZGVmaW5lIFMzQzI0MTBfR1BBMTEgICAgICAgIFMzQzI0MTBfR1BJT05PKFMzQzI0MTBfR1BJT19CQU5LQSwgMTEpCisjZGVmaW5lIFMzQzI0MTBfR1BBMTFfT1VUICAgICgwPDwxMSkKKyNkZWZpbmUgUzNDMjQxMF9HUEExMV9BRERSMjYgKDE8PDExKQorCisjZGVmaW5lIFMzQzI0MTBfR1BBMTIgICAgICAgIFMzQzI0MTBfR1BJT05PKFMzQzI0MTBfR1BJT19CQU5LQSwgMTIpCisjZGVmaW5lIFMzQzI0MTBfR1BBMTJfT1VUICAgICgwPDwxMikKKyNkZWZpbmUgUzNDMjQxMF9HUEExMl9uR0NTMSAgKDE8PDEyKQorCisjZGVmaW5lIFMzQzI0MTBfR1BBMTMgICAgICAgIFMzQzI0MTBfR1BJT05PKFMzQzI0MTBfR1BJT19CQU5LQSwgMTMpCisjZGVmaW5lIFMzQzI0MTBfR1BBMTNfT1VUICAgICgwPDwxMykKKyNkZWZpbmUgUzNDMjQxMF9HUEExM19uR0NTMiAgKDE8PDEzKQorCisjZGVmaW5lIFMzQzI0MTBfR1BBMTQgICAgICAgIFMzQzI0MTBfR1BJT05PKFMzQzI0MTBfR1BJT19CQU5LQSwgMTQpCisjZGVmaW5lIFMzQzI0MTBfR1BBMTRfT1VUICAgICgwPDwxNCkKKyNkZWZpbmUgUzNDMjQxMF9HUEExNF9uR0NTMyAgKDE8PDE0KQorCisjZGVmaW5lIFMzQzI0MTBfR1BBMTUgICAgICAgIFMzQzI0MTBfR1BJT05PKFMzQzI0MTBfR1BJT19CQU5LQSwgMTUpCisjZGVmaW5lIFMzQzI0MTBfR1BBMTVfT1VUICAgICgwPDwxNSkKKyNkZWZpbmUgUzNDMjQxMF9HUEExNV9uR0NTNCAgKDE8PDE1KQorCisjZGVmaW5lIFMzQzI0MTBfR1BBMTYgICAgICAgIFMzQzI0MTBfR1BJT05PKFMzQzI0MTBfR1BJT19CQU5LQSwgMTYpCisjZGVmaW5lIFMzQzI0MTBfR1BBMTZfT1VUICAgICgwPDwxNikKKyNkZWZpbmUgUzNDMjQxMF9HUEExNl9uR0NTNSAgKDE8PDE2KQorCisjZGVmaW5lIFMzQzI0MTBfR1BBMTcgICAgICAgIFMzQzI0MTBfR1BJT05PKFMzQzI0MTBfR1BJT19CQU5LQSwgMTcpCisjZGVmaW5lIFMzQzI0MTBfR1BBMTdfT1VUICAgICgwPDwxNykKKyNkZWZpbmUgUzNDMjQxMF9HUEExN19DTEUgICAgKDE8PDE3KQorCisjZGVmaW5lIFMzQzI0MTBfR1BBMTggICAgICAgIFMzQzI0MTBfR1BJT05PKFMzQzI0MTBfR1BJT19CQU5LQSwgMTgpCisjZGVmaW5lIFMzQzI0MTBfR1BBMThfT1VUICAgICgwPDwxOCkKKyNkZWZpbmUgUzNDMjQxMF9HUEExOF9BTEUgICAgKDE8PDE4KQorCisjZGVmaW5lIFMzQzI0MTBfR1BBMTkgICAgICAgIFMzQzI0MTBfR1BJT05PKFMzQzI0MTBfR1BJT19CQU5LQSwgMTkpCisjZGVmaW5lIFMzQzI0MTBfR1BBMTlfT1VUICAgICgwPDwxOSkKKyNkZWZpbmUgUzNDMjQxMF9HUEExOV9uRldFICAgKDE8PDE5KQorCisjZGVmaW5lIFMzQzI0MTBfR1BBMjAgICAgICAgIFMzQzI0MTBfR1BJT05PKFMzQzI0MTBfR1BJT19CQU5LQSwgMjApCisjZGVmaW5lIFMzQzI0MTBfR1BBMjBfT1VUICAgICgwPDwyMCkKKyNkZWZpbmUgUzNDMjQxMF9HUEEyMF9uRlJFICAgKDE8PDIwKQorCisjZGVmaW5lIFMzQzI0MTBfR1BBMjEgICAgICAgIFMzQzI0MTBfR1BJT05PKFMzQzI0MTBfR1BJT19CQU5LQSwgMjEpCisjZGVmaW5lIFMzQzI0MTBfR1BBMjFfT1VUICAgICgwPDwyMSkKKyNkZWZpbmUgUzNDMjQxMF9HUEEyMV9uUlNUT1VUICgxPDwyMSkKKworI2RlZmluZSBTM0MyNDEwX0dQQTIyICAgICAgICBTM0MyNDEwX0dQSU9OTyhTM0MyNDEwX0dQSU9fQkFOS0EsIDIyKQorI2RlZmluZSBTM0MyNDEwX0dQQTIyX09VVCAgICAoMDw8MjIpCisjZGVmaW5lIFMzQzI0MTBfR1BBMjJfbkZDRSAgICgxPDwyMikKKworLyogMHgwOCBhbmQgMHgwYyBhcmUgcmVzZXJ2ZWQgKi8KKworLyogR1BCIGlzIDEwIElPIHBpbnMsIGVhY2ggY29uZmlndXJlZCBieSAyIGJpdHMgZWFjaCBpbiBHUEJDT04uCisgKiAgIDAwID0gaW5wdXQsIDAxID0gb3V0cHV0LCAxMD1zcGVjaWFsIGZ1bmN0aW9uLCAxMT1yZXNlcnZlZAorICogYml0IDAsMSA9IHBpbiAwLCAyLDM9IHBpbiAxLi4uCisgKgorICogQ1BCVVAgPSBwdWxsIHVwIHJlc2lzdG9yIGNvbnRyb2wsIDE9ZGlzYWJsZWQsIDA9ZW5hYmxlZAorKi8KKworI2RlZmluZSBTM0MyNDEwX0dQQkNPTgkgICBTM0MyNDEwX0dQSU9SRUcoMHgxMCkKKyNkZWZpbmUgUzNDMjQxMF9HUEJEQVQJICAgUzNDMjQxMF9HUElPUkVHKDB4MTQpCisjZGVmaW5lIFMzQzI0MTBfR1BCVVAJICAgUzNDMjQxMF9HUElPUkVHKDB4MTgpCisKKy8qIG5vIGkvbyBwaW4gaW4gcG9ydCBiIGNhbiBoYXZlIHZhbHVlIDMhICovCisKKyNkZWZpbmUgUzNDMjQxMF9HUEIwICAgICAgICAgUzNDMjQxMF9HUElPTk8oUzNDMjQxMF9HUElPX0JBTktCLCAwKQorI2RlZmluZSBTM0MyNDEwX0dQQjBfSU5QICAgICAoMHgwMCA8PCAwKQorI2RlZmluZSBTM0MyNDEwX0dQQjBfT1VUUCAgICAoMHgwMSA8PCAwKQorI2RlZmluZSBTM0MyNDEwX0dQQjBfVE9VVDAgICAoMHgwMiA8PCAwKQorCisjZGVmaW5lIFMzQzI0MTBfR1BCMSAgICAgICAgIFMzQzI0MTBfR1BJT05PKFMzQzI0MTBfR1BJT19CQU5LQiwgMSkKKyNkZWZpbmUgUzNDMjQxMF9HUEIxX0lOUCAgICAgKDB4MDAgPDwgMikKKyNkZWZpbmUgUzNDMjQxMF9HUEIxX09VVFAgICAgKDB4MDEgPDwgMikKKyNkZWZpbmUgUzNDMjQxMF9HUEIxX1RPVVQxICAgKDB4MDIgPDwgMikKKworI2RlZmluZSBTM0MyNDEwX0dQQjIgICAgICAgICBTM0MyNDEwX0dQSU9OTyhTM0MyNDEwX0dQSU9fQkFOS0IsIDIpCisjZGVmaW5lIFMzQzI0MTBfR1BCMl9JTlAgICAgICgweDAwIDw8IDQpCisjZGVmaW5lIFMzQzI0MTBfR1BCMl9PVVRQICAgICgweDAxIDw8IDQpCisjZGVmaW5lIFMzQzI0MTBfR1BCMl9UT1VUMiAgICgweDAyIDw8IDQpCisKKyNkZWZpbmUgUzNDMjQxMF9HUEIzICAgICAgICAgUzNDMjQxMF9HUElPTk8oUzNDMjQxMF9HUElPX0JBTktCLCAzKQorI2RlZmluZSBTM0MyNDEwX0dQQjNfSU5QICAgICAoMHgwMCA8PCA2KQorI2RlZmluZSBTM0MyNDEwX0dQQjNfT1VUUCAgICAoMHgwMSA8PCA2KQorI2RlZmluZSBTM0MyNDEwX0dQQjNfVE9VVDMgICAoMHgwMiA8PCA2KQorCisjZGVmaW5lIFMzQzI0MTBfR1BCNCAgICAgICAgIFMzQzI0MTBfR1BJT05PKFMzQzI0MTBfR1BJT19CQU5LQiwgNCkKKyNkZWZpbmUgUzNDMjQxMF9HUEI0X0lOUCAgICAgKDB4MDAgPDwgOCkKKyNkZWZpbmUgUzNDMjQxMF9HUEI0X09VVFAgICAgKDB4MDEgPDwgOCkKKyNkZWZpbmUgUzNDMjQxMF9HUEI0X1RDTEswICAgKDB4MDIgPDwgOCkKKyNkZWZpbmUgUzNDMjQxMF9HUEI0X01BU0sgICAgKDB4MDMgPDwgOCkKKworI2RlZmluZSBTM0MyNDEwX0dQQjUgICAgICAgICBTM0MyNDEwX0dQSU9OTyhTM0MyNDEwX0dQSU9fQkFOS0IsIDUpCisjZGVmaW5lIFMzQzI0MTBfR1BCNV9JTlAgICAgICgweDAwIDw8IDEwKQorI2RlZmluZSBTM0MyNDEwX0dQQjVfT1VUUCAgICAoMHgwMSA8PCAxMCkKKyNkZWZpbmUgUzNDMjQxMF9HUEI1X25YQkFDSyAgKDB4MDIgPDwgMTApCisKKyNkZWZpbmUgUzNDMjQxMF9HUEI2ICAgICAgICAgUzNDMjQxMF9HUElPTk8oUzNDMjQxMF9HUElPX0JBTktCLCA2KQorI2RlZmluZSBTM0MyNDEwX0dQQjZfSU5QICAgICAoMHgwMCA8PCAxMikKKyNkZWZpbmUgUzNDMjQxMF9HUEI2X09VVFAgICAgKDB4MDEgPDwgMTIpCisjZGVmaW5lIFMzQzI0MTBfR1BCNl9uWEJSRVEgICgweDAyIDw8IDEyKQorCisjZGVmaW5lIFMzQzI0MTBfR1BCNyAgICAgICAgIFMzQzI0MTBfR1BJT05PKFMzQzI0MTBfR1BJT19CQU5LQiwgNykKKyNkZWZpbmUgUzNDMjQxMF9HUEI3X0lOUCAgICAgKDB4MDAgPDwgMTQpCisjZGVmaW5lIFMzQzI0MTBfR1BCN19PVVRQICAgICgweDAxIDw8IDE0KQorI2RlZmluZSBTM0MyNDEwX0dQQjdfblhEQUNLMSAoMHgwMiA8PCAxNCkKKworI2RlZmluZSBTM0MyNDEwX0dQQjggICAgICAgICBTM0MyNDEwX0dQSU9OTyhTM0MyNDEwX0dQSU9fQkFOS0IsIDgpCisjZGVmaW5lIFMzQzI0MTBfR1BCOF9JTlAgICAgICgweDAwIDw8IDE2KQorI2RlZmluZSBTM0MyNDEwX0dQQjhfT1VUUCAgICAoMHgwMSA8PCAxNikKKyNkZWZpbmUgUzNDMjQxMF9HUEI4X25YRFJFUTEgKDB4MDIgPDwgMTYpCisKKyNkZWZpbmUgUzNDMjQxMF9HUEI5ICAgICAgICAgUzNDMjQxMF9HUElPTk8oUzNDMjQxMF9HUElPX0JBTktCLCA5KQorI2RlZmluZSBTM0MyNDEwX0dQQjlfSU5QICAgICAoMHgwMCA8PCAxOCkKKyNkZWZpbmUgUzNDMjQxMF9HUEI5X09VVFAgICAgKDB4MDEgPDwgMTgpCisjZGVmaW5lIFMzQzI0MTBfR1BCOV9uWERBQ0swICgweDAyIDw8IDE4KQorCisjZGVmaW5lIFMzQzI0MTBfR1BCMTAgICAgICAgIFMzQzI0MTBfR1BJT05PKFMzQzI0MTBfR1BJT19CQU5LQiwgMTApCisjZGVmaW5lIFMzQzI0MTBfR1BCMTBfSU5QICAgICgweDAwIDw8IDIwKQorI2RlZmluZSBTM0MyNDEwX0dQQjEwX09VVFAgICAoMHgwMSA8PCAyMCkKKyNkZWZpbmUgUzNDMjQxMF9HUEIxMF9uWERSRTAgKDB4MDIgPDwgMjApCisKKy8qIFBvcnQgQyBjb25zaXRzIG9mIDE2IEdQSU8vU3BlY2lhbCBmdW5jdGlvbgorICoKKyAqIGFsbW9zdCBpZGVudGljYWwgc2V0dXAgdG8gcG9ydCBiLCBidXQgdGhlIHNwZWNpYWwgZnVuY3Rpb25zIGFyZSBtb3N0bHkKKyAqIHRvIGRvIHdpdGggdGhlIHZpZGVvIHN5c3RlbSdzIHN5bmMvZXRjLgorKi8KKworI2RlZmluZSBTM0MyNDEwX0dQQ0NPTgkgICBTM0MyNDEwX0dQSU9SRUcoMHgyMCkKKyNkZWZpbmUgUzNDMjQxMF9HUENEQVQJICAgUzNDMjQxMF9HUElPUkVHKDB4MjQpCisjZGVmaW5lIFMzQzI0MTBfR1BDVVAJICAgUzNDMjQxMF9HUElPUkVHKDB4MjgpCisKKyNkZWZpbmUgUzNDMjQxMF9HUEMwICAgICAgICAgICAgUzNDMjQxMF9HUElPTk8oUzNDMjQxMF9HUElPX0JBTktDLCAwKQorI2RlZmluZSBTM0MyNDEwX0dQQzBfSU5QCSgweDAwIDw8IDApCisjZGVmaW5lIFMzQzI0MTBfR1BDMF9PVVRQCSgweDAxIDw8IDApCisjZGVmaW5lIFMzQzI0MTBfR1BDMF9MRU5ECSgweDAyIDw8IDApCisKKyNkZWZpbmUgUzNDMjQxMF9HUEMxICAgICAgICAgICAgUzNDMjQxMF9HUElPTk8oUzNDMjQxMF9HUElPX0JBTktDLCAxKQorI2RlZmluZSBTM0MyNDEwX0dQQzFfSU5QCSgweDAwIDw8IDIpCisjZGVmaW5lIFMzQzI0MTBfR1BDMV9PVVRQCSgweDAxIDw8IDIpCisjZGVmaW5lIFMzQzI0MTBfR1BDMV9WQ0xLCSgweDAyIDw8IDIpCisKKyNkZWZpbmUgUzNDMjQxMF9HUEMyICAgICAgICAgICAgUzNDMjQxMF9HUElPTk8oUzNDMjQxMF9HUElPX0JBTktDLCAyKQorI2RlZmluZSBTM0MyNDEwX0dQQzJfSU5QCSgweDAwIDw8IDQpCisjZGVmaW5lIFMzQzI0MTBfR1BDMl9PVVRQCSgweDAxIDw8IDQpCisjZGVmaW5lIFMzQzI0MTBfR1BDMl9WTElORQkoMHgwMiA8PCA0KQorCisjZGVmaW5lIFMzQzI0MTBfR1BDMyAgICAgICAgICAgIFMzQzI0MTBfR1BJT05PKFMzQzI0MTBfR1BJT19CQU5LQywgMykKKyNkZWZpbmUgUzNDMjQxMF9HUEMzX0lOUAkoMHgwMCA8PCA2KQorI2RlZmluZSBTM0MyNDEwX0dQQzNfT1VUUAkoMHgwMSA8PCA2KQorI2RlZmluZSBTM0MyNDEwX0dQQzNfVkZSQU1FCSgweDAyIDw8IDYpCisKKyNkZWZpbmUgUzNDMjQxMF9HUEM0ICAgICAgICAgICAgUzNDMjQxMF9HUElPTk8oUzNDMjQxMF9HUElPX0JBTktDLCA0KQorI2RlZmluZSBTM0MyNDEwX0dQQzRfSU5QCSgweDAwIDw8IDgpCisjZGVmaW5lIFMzQzI0MTBfR1BDNF9PVVRQCSgweDAxIDw8IDgpCisjZGVmaW5lIFMzQzI0MTBfR1BDNF9WTQkJKDB4MDIgPDwgOCkKKworI2RlZmluZSBTM0MyNDEwX0dQQzUgICAgICAgICAgICBTM0MyNDEwX0dQSU9OTyhTM0MyNDEwX0dQSU9fQkFOS0MsIDUpCisjZGVmaW5lIFMzQzI0MTBfR1BDNV9JTlAJKDB4MDAgPDwgMTApCisjZGVmaW5lIFMzQzI0MTBfR1BDNV9PVVRQCSgweDAxIDw8IDEwKQorI2RlZmluZSBTM0MyNDEwX0dQQzVfTENEVkYwCSgweDAyIDw8IDEwKQorCisjZGVmaW5lIFMzQzI0MTBfR1BDNiAgICAgICAgICAgIFMzQzI0MTBfR1BJT05PKFMzQzI0MTBfR1BJT19CQU5LQywgNikKKyNkZWZpbmUgUzNDMjQxMF9HUEM2X0lOUAkoMHgwMCA8PCAxMikKKyNkZWZpbmUgUzNDMjQxMF9HUEM2X09VVFAJKDB4MDEgPDwgMTIpCisjZGVmaW5lIFMzQzI0MTBfR1BDNl9MQ0RWRjEJKDB4MDIgPDwgMTIpCisKKyNkZWZpbmUgUzNDMjQxMF9HUEM3ICAgICAgICAgICAgUzNDMjQxMF9HUElPTk8oUzNDMjQxMF9HUElPX0JBTktDLCA3KQorI2RlZmluZSBTM0MyNDEwX0dQQzdfSU5QCSgweDAwIDw8IDE0KQorI2RlZmluZSBTM0MyNDEwX0dQQzdfT1VUUAkoMHgwMSA8PCAxNCkKKyNkZWZpbmUgUzNDMjQxMF9HUEM3X0xDRFZGMgkoMHgwMiA8PCAxNCkKKworI2RlZmluZSBTM0MyNDEwX0dQQzggICAgICAgICAgICBTM0MyNDEwX0dQSU9OTyhTM0MyNDEwX0dQSU9fQkFOS0MsIDgpCisjZGVmaW5lIFMzQzI0MTBfR1BDOF9JTlAJKDB4MDAgPDwgMTYpCisjZGVmaW5lIFMzQzI0MTBfR1BDOF9PVVRQCSgweDAxIDw8IDE2KQorI2RlZmluZSBTM0MyNDEwX0dQQzhfVkQwCSgweDAyIDw8IDE2KQorCisjZGVmaW5lIFMzQzI0MTBfR1BDOSAgICAgICAgICAgIFMzQzI0MTBfR1BJT05PKFMzQzI0MTBfR1BJT19CQU5LQywgOSkKKyNkZWZpbmUgUzNDMjQxMF9HUEM5X0lOUAkoMHgwMCA8PCAxOCkKKyNkZWZpbmUgUzNDMjQxMF9HUEM5X09VVFAJKDB4MDEgPDwgMTgpCisjZGVmaW5lIFMzQzI0MTBfR1BDOV9WRDEJKDB4MDIgPDwgMTgpCisKKyNkZWZpbmUgUzNDMjQxMF9HUEMxMCAgICAgICAgICAgUzNDMjQxMF9HUElPTk8oUzNDMjQxMF9HUElPX0JBTktDLCAxMCkKKyNkZWZpbmUgUzNDMjQxMF9HUEMxMF9JTlAJKDB4MDAgPDwgMjApCisjZGVmaW5lIFMzQzI0MTBfR1BDMTBfT1VUUAkoMHgwMSA8PCAyMCkKKyNkZWZpbmUgUzNDMjQxMF9HUEMxMF9WRDIJKDB4MDIgPDwgMjApCisKKyNkZWZpbmUgUzNDMjQxMF9HUEMxMSAgICAgICAgICAgUzNDMjQxMF9HUElPTk8oUzNDMjQxMF9HUElPX0JBTktDLCAxMSkKKyNkZWZpbmUgUzNDMjQxMF9HUEMxMV9JTlAJKDB4MDAgPDwgMjIpCisjZGVmaW5lIFMzQzI0MTBfR1BDMTFfT1VUUAkoMHgwMSA8PCAyMikKKyNkZWZpbmUgUzNDMjQxMF9HUEMxMV9WRDMJKDB4MDIgPDwgMjIpCisKKyNkZWZpbmUgUzNDMjQxMF9HUEMxMiAgICAgICAgICAgUzNDMjQxMF9HUElPTk8oUzNDMjQxMF9HUElPX0JBTktDLCAxMikKKyNkZWZpbmUgUzNDMjQxMF9HUEMxMl9JTlAJKDB4MDAgPDwgMjQpCisjZGVmaW5lIFMzQzI0MTBfR1BDMTJfT1VUUAkoMHgwMSA8PCAyNCkKKyNkZWZpbmUgUzNDMjQxMF9HUEMxMl9WRDQJKDB4MDIgPDwgMjQpCisKKyNkZWZpbmUgUzNDMjQxMF9HUEMxMyAgICAgICAgICAgUzNDMjQxMF9HUElPTk8oUzNDMjQxMF9HUElPX0JBTktDLCAxMykKKyNkZWZpbmUgUzNDMjQxMF9HUEMxM19JTlAJKDB4MDAgPDwgMjYpCisjZGVmaW5lIFMzQzI0MTBfR1BDMTNfT1VUUAkoMHgwMSA8PCAyNikKKyNkZWZpbmUgUzNDMjQxMF9HUEMxM19WRDUJKDB4MDIgPDwgMjYpCisKKyNkZWZpbmUgUzNDMjQxMF9HUEMxNCAgICAgICAgICAgUzNDMjQxMF9HUElPTk8oUzNDMjQxMF9HUElPX0JBTktDLCAxNCkKKyNkZWZpbmUgUzNDMjQxMF9HUEMxNF9JTlAJKDB4MDAgPDwgMjgpCisjZGVmaW5lIFMzQzI0MTBfR1BDMTRfT1VUUAkoMHgwMSA8PCAyOCkKKyNkZWZpbmUgUzNDMjQxMF9HUEMxNF9WRDYJKDB4MDIgPDwgMjgpCisKKyNkZWZpbmUgUzNDMjQxMF9HUEMxNSAgICAgICAgICAgUzNDMjQxMF9HUElPTk8oUzNDMjQxMF9HUElPX0JBTktDLCAxNSkKKyNkZWZpbmUgUzNDMjQxMF9HUEMxNV9JTlAJKDB4MDAgPDwgMzApCisjZGVmaW5lIFMzQzI0MTBfR1BDMTVfT1VUUAkoMHgwMSA8PCAzMCkKKyNkZWZpbmUgUzNDMjQxMF9HUEMxNV9WRDcJKDB4MDIgPDwgMzApCisKKy8qIFBvcnQgRCBjb25zaXN0cyBvZiAxNiBHUElPL1NwZWNpYWwgZnVuY3Rpb24KKyAqCisgKiBhbG1vc3QgaWRlbnRpY2FsIHNldHVwIHRvIHBvcnQgYiwgYnV0IHRoZSBzcGVjaWFsIGZ1bmN0aW9ucyBhcmUgbW9zdGx5CisgKiB0byBkbyB3aXRoIHRoZSB2aWRlbyBzeXN0ZW0ncyBkYXRhLgorKi8KKworI2RlZmluZSBTM0MyNDEwX0dQRENPTgkgICBTM0MyNDEwX0dQSU9SRUcoMHgzMCkKKyNkZWZpbmUgUzNDMjQxMF9HUEREQVQJICAgUzNDMjQxMF9HUElPUkVHKDB4MzQpCisjZGVmaW5lIFMzQzI0MTBfR1BEVVAJICAgUzNDMjQxMF9HUElPUkVHKDB4MzgpCisKKyNkZWZpbmUgUzNDMjQxMF9HUEQwICAgICAgICAgICAgUzNDMjQxMF9HUElPTk8oUzNDMjQxMF9HUElPX0JBTktELCAwKQorI2RlZmluZSBTM0MyNDEwX0dQRDBfSU5QCSgweDAwIDw8IDApCisjZGVmaW5lIFMzQzI0MTBfR1BEMF9PVVRQCSgweDAxIDw8IDApCisjZGVmaW5lIFMzQzI0MTBfR1BEMF9WRDgJKDB4MDIgPDwgMCkKKworI2RlZmluZSBTM0MyNDEwX0dQRDEgICAgICAgICAgICBTM0MyNDEwX0dQSU9OTyhTM0MyNDEwX0dQSU9fQkFOS0QsIDEpCisjZGVmaW5lIFMzQzI0MTBfR1BEMV9JTlAJKDB4MDAgPDwgMikKKyNkZWZpbmUgUzNDMjQxMF9HUEQxX09VVFAJKDB4MDEgPDwgMikKKyNkZWZpbmUgUzNDMjQxMF9HUEQxX1ZEOQkoMHgwMiA8PCAyKQorCisjZGVmaW5lIFMzQzI0MTBfR1BEMiAgICAgICAgICAgIFMzQzI0MTBfR1BJT05PKFMzQzI0MTBfR1BJT19CQU5LRCwgMikKKyNkZWZpbmUgUzNDMjQxMF9HUEQyX0lOUAkoMHgwMCA8PCA0KQorI2RlZmluZSBTM0MyNDEwX0dQRDJfT1VUUAkoMHgwMSA8PCA0KQorI2RlZmluZSBTM0MyNDEwX0dQRDJfVkQxMAkoMHgwMiA8PCA0KQorCisjZGVmaW5lIFMzQzI0MTBfR1BEMyAgICAgICAgICAgIFMzQzI0MTBfR1BJT05PKFMzQzI0MTBfR1BJT19CQU5LRCwgMykKKyNkZWZpbmUgUzNDMjQxMF9HUEQzX0lOUAkoMHgwMCA8PCA2KQorI2RlZmluZSBTM0MyNDEwX0dQRDNfT1VUUAkoMHgwMSA8PCA2KQorI2RlZmluZSBTM0MyNDEwX0dQRDNfVkQxMQkoMHgwMiA8PCA2KQorCisjZGVmaW5lIFMzQzI0MTBfR1BENCAgICAgICAgICAgIFMzQzI0MTBfR1BJT05PKFMzQzI0MTBfR1BJT19CQU5LRCwgNCkKKyNkZWZpbmUgUzNDMjQxMF9HUEQ0X0lOUAkoMHgwMCA8PCA4KQorI2RlZmluZSBTM0MyNDEwX0dQRDRfT1VUUAkoMHgwMSA8PCA4KQorI2RlZmluZSBTM0MyNDEwX0dQRDRfVkQxMgkoMHgwMiA8PCA4KQorCisjZGVmaW5lIFMzQzI0MTBfR1BENSAgICAgICAgICAgIFMzQzI0MTBfR1BJT05PKFMzQzI0MTBfR1BJT19CQU5LRCwgNSkKKyNkZWZpbmUgUzNDMjQxMF9HUEQ1X0lOUAkoMHgwMCA8PCAxMCkKKyNkZWZpbmUgUzNDMjQxMF9HUEQ1X09VVFAJKDB4MDEgPDwgMTApCisjZGVmaW5lIFMzQzI0MTBfR1BENV9WRDEzCSgweDAyIDw8IDEwKQorCisjZGVmaW5lIFMzQzI0MTBfR1BENiAgICAgICAgICAgIFMzQzI0MTBfR1BJT05PKFMzQzI0MTBfR1BJT19CQU5LRCwgNikKKyNkZWZpbmUgUzNDMjQxMF9HUEQ2X0lOUAkoMHgwMCA8PCAxMikKKyNkZWZpbmUgUzNDMjQxMF9HUEQ2X09VVFAJKDB4MDEgPDwgMTIpCisjZGVmaW5lIFMzQzI0MTBfR1BENl9WRDE0CSgweDAyIDw8IDEyKQorCisjZGVmaW5lIFMzQzI0MTBfR1BENyAgICAgICAgICAgIFMzQzI0MTBfR1BJT05PKFMzQzI0MTBfR1BJT19CQU5LRCwgNykKKyNkZWZpbmUgUzNDMjQxMF9HUEQ3X0lOUAkoMHgwMCA8PCAxNCkKKyNkZWZpbmUgUzNDMjQxMF9HUEQ3X09VVFAJKDB4MDEgPDwgMTQpCisjZGVmaW5lIFMzQzI0MTBfR1BEN19WRDE1CSgweDAyIDw8IDE0KQorCisjZGVmaW5lIFMzQzI0MTBfR1BEOCAgICAgICAgICAgIFMzQzI0MTBfR1BJT05PKFMzQzI0MTBfR1BJT19CQU5LRCwgOCkKKyNkZWZpbmUgUzNDMjQxMF9HUEQ4X0lOUAkoMHgwMCA8PCAxNikKKyNkZWZpbmUgUzNDMjQxMF9HUEQ4X09VVFAJKDB4MDEgPDwgMTYpCisjZGVmaW5lIFMzQzI0MTBfR1BEOF9WRDE2CSgweDAyIDw8IDE2KQorCisjZGVmaW5lIFMzQzI0MTBfR1BEOSAgICAgICAgICAgIFMzQzI0MTBfR1BJT05PKFMzQzI0MTBfR1BJT19CQU5LRCwgOSkKKyNkZWZpbmUgUzNDMjQxMF9HUEQ5X0lOUAkoMHgwMCA8PCAxOCkKKyNkZWZpbmUgUzNDMjQxMF9HUEQ5X09VVFAJKDB4MDEgPDwgMTgpCisjZGVmaW5lIFMzQzI0MTBfR1BEOV9WRDE3CSgweDAyIDw8IDE4KQorCisjZGVmaW5lIFMzQzI0MTBfR1BEMTAgICAgICAgICAgIFMzQzI0MTBfR1BJT05PKFMzQzI0MTBfR1BJT19CQU5LRCwgMTApCisjZGVmaW5lIFMzQzI0MTBfR1BEMTBfSU5QCSgweDAwIDw8IDIwKQorI2RlZmluZSBTM0MyNDEwX0dQRDEwX09VVFAJKDB4MDEgPDwgMjApCisjZGVmaW5lIFMzQzI0MTBfR1BEMTBfVkQxOAkoMHgwMiA8PCAyMCkKKworI2RlZmluZSBTM0MyNDEwX0dQRDExICAgICAgICAgICBTM0MyNDEwX0dQSU9OTyhTM0MyNDEwX0dQSU9fQkFOS0QsIDExKQorI2RlZmluZSBTM0MyNDEwX0dQRDExX0lOUAkoMHgwMCA8PCAyMikKKyNkZWZpbmUgUzNDMjQxMF9HUEQxMV9PVVRQCSgweDAxIDw8IDIyKQorI2RlZmluZSBTM0MyNDEwX0dQRDExX1ZEMTkJKDB4MDIgPDwgMjIpCisKKyNkZWZpbmUgUzNDMjQxMF9HUEQxMiAgICAgICAgICAgUzNDMjQxMF9HUElPTk8oUzNDMjQxMF9HUElPX0JBTktELCAxMikKKyNkZWZpbmUgUzNDMjQxMF9HUEQxMl9JTlAJKDB4MDAgPDwgMjQpCisjZGVmaW5lIFMzQzI0MTBfR1BEMTJfT1VUUAkoMHgwMSA8PCAyNCkKKyNkZWZpbmUgUzNDMjQxMF9HUEQxMl9WRDIwCSgweDAyIDw8IDI0KQorCisjZGVmaW5lIFMzQzI0MTBfR1BEMTMgICAgICAgICAgIFMzQzI0MTBfR1BJT05PKFMzQzI0MTBfR1BJT19CQU5LRCwgMTMpCisjZGVmaW5lIFMzQzI0MTBfR1BEMTNfSU5QCSgweDAwIDw8IDI2KQorI2RlZmluZSBTM0MyNDEwX0dQRDEzX09VVFAJKDB4MDEgPDwgMjYpCisjZGVmaW5lIFMzQzI0MTBfR1BEMTNfVkQyMQkoMHgwMiA8PCAyNikKKworI2RlZmluZSBTM0MyNDEwX0dQRDE0ICAgICAgICAgICBTM0MyNDEwX0dQSU9OTyhTM0MyNDEwX0dQSU9fQkFOS0QsIDE0KQorI2RlZmluZSBTM0MyNDEwX0dQRDE0X0lOUAkoMHgwMCA8PCAyOCkKKyNkZWZpbmUgUzNDMjQxMF9HUEQxNF9PVVRQCSgweDAxIDw8IDI4KQorI2RlZmluZSBTM0MyNDEwX0dQRDE0X1ZEMjIJKDB4MDIgPDwgMjgpCisKKyNkZWZpbmUgUzNDMjQxMF9HUEQxNSAgICAgICAgICAgUzNDMjQxMF9HUElPTk8oUzNDMjQxMF9HUElPX0JBTktELCAxNSkKKyNkZWZpbmUgUzNDMjQxMF9HUEQxNV9JTlAJKDB4MDAgPDwgMzApCisjZGVmaW5lIFMzQzI0MTBfR1BEMTVfT1VUUAkoMHgwMSA8PCAzMCkKKyNkZWZpbmUgUzNDMjQxMF9HUEQxNV9WRDIzCSgweDAyIDw8IDMwKQorCisvKiBQb3J0IEUgY29uc2lzdHMgb2YgMTYgR1BJTy9TcGVjaWFsIGZ1bmN0aW9uCisgKgorICogYWdhaW4sIHRoZSBzYW1lIGFzIHBvcnQgQiwgYnV0IGRlYWxpbmcgd2l0aCBJMlMsIFNESSwgYW5kCisgKiBtb3JlIG1pc2NlbGxhbmVvdXMgZnVuY3Rpb25zCisqLworCisjZGVmaW5lIFMzQzI0MTBfR1BFQ09OCSAgIFMzQzI0MTBfR1BJT1JFRygweDQwKQorI2RlZmluZSBTM0MyNDEwX0dQRURBVAkgICBTM0MyNDEwX0dQSU9SRUcoMHg0NCkKKyNkZWZpbmUgUzNDMjQxMF9HUEVVUAkgICBTM0MyNDEwX0dQSU9SRUcoMHg0OCkKKworI2RlZmluZSBTM0MyNDEwX0dQRTAgICAgICAgICAgIFMzQzI0MTBfR1BJT05PKFMzQzI0MTBfR1BJT19CQU5LRSwgMCkKKyNkZWZpbmUgUzNDMjQxMF9HUEUwX0lOUCAgICAgICAoMHgwMCA8PCAwKQorI2RlZmluZSBTM0MyNDEwX0dQRTBfT1VUUCAgICAgICgweDAxIDw8IDApCisjZGVmaW5lIFMzQzI0MTBfR1BFMF9JMlNMUkNLICAgKDB4MDIgPDwgMCkKKyNkZWZpbmUgUzNDMjQxMF9HUEUwX01BU0sgICAgICAoMHgwMyA8PCAwKQorCisjZGVmaW5lIFMzQzI0MTBfR1BFMSAgICAgICAgICAgUzNDMjQxMF9HUElPTk8oUzNDMjQxMF9HUElPX0JBTktFLCAxKQorI2RlZmluZSBTM0MyNDEwX0dQRTFfSU5QICAgICAgICgweDAwIDw8IDIpCisjZGVmaW5lIFMzQzI0MTBfR1BFMV9PVVRQICAgICAgKDB4MDEgPDwgMikKKyNkZWZpbmUgUzNDMjQxMF9HUEUxX0kyU1NDTEsgICAoMHgwMiA8PCAyKQorI2RlZmluZSBTM0MyNDEwX0dQRTFfTUFTSyAgICAgICgweDAzIDw8IDIpCisKKyNkZWZpbmUgUzNDMjQxMF9HUEUyICAgICAgICAgICBTM0MyNDEwX0dQSU9OTyhTM0MyNDEwX0dQSU9fQkFOS0UsIDIpCisjZGVmaW5lIFMzQzI0MTBfR1BFMl9JTlAgICAgICAgKDB4MDAgPDwgNCkKKyNkZWZpbmUgUzNDMjQxMF9HUEUyX09VVFAgICAgICAoMHgwMSA8PCA0KQorI2RlZmluZSBTM0MyNDEwX0dQRTJfQ0RDTEsgICAgICgweDAyIDw8IDQpCisKKyNkZWZpbmUgUzNDMjQxMF9HUEUzICAgICAgICAgICBTM0MyNDEwX0dQSU9OTyhTM0MyNDEwX0dQSU9fQkFOS0UsIDMpCisjZGVmaW5lIFMzQzI0MTBfR1BFM19JTlAgICAgICAgKDB4MDAgPDwgNikKKyNkZWZpbmUgUzNDMjQxMF9HUEUzX09VVFAgICAgICAoMHgwMSA8PCA2KQorI2RlZmluZSBTM0MyNDEwX0dQRTNfSTJTU0RJICAgICgweDAyIDw8IDYpCisjZGVmaW5lIFMzQzI0MTBfR1BFM19uU1MwICAgICAgKDB4MDMgPDwgNikKKyNkZWZpbmUgUzNDMjQxMF9HUEUzX01BU0sgICAgICAoMHgwMyA8PCA2KQorCisjZGVmaW5lIFMzQzI0MTBfR1BFNCAgICAgICAgICAgUzNDMjQxMF9HUElPTk8oUzNDMjQxMF9HUElPX0JBTktFLCA0KQorI2RlZmluZSBTM0MyNDEwX0dQRTRfSU5QICAgICAgICgweDAwIDw8IDgpCisjZGVmaW5lIFMzQzI0MTBfR1BFNF9PVVRQICAgICAgKDB4MDEgPDwgOCkKKyNkZWZpbmUgUzNDMjQxMF9HUEU0X0kyU1NETyAgICAoMHgwMiA8PCA4KQorI2RlZmluZSBTM0MyNDEwX0dQRTRfSTJTU0RJICAgICgweDAzIDw8IDgpCisjZGVmaW5lIFMzQzI0MTBfR1BFNF9NQVNLICAgICAgKDB4MDMgPDwgOCkKKworI2RlZmluZSBTM0MyNDEwX0dQRTUgICAgICAgICAgIFMzQzI0MTBfR1BJT05PKFMzQzI0MTBfR1BJT19CQU5LRSwgNSkKKyNkZWZpbmUgUzNDMjQxMF9HUEU1X0lOUCAgICAgICAoMHgwMCA8PCAxMCkKKyNkZWZpbmUgUzNDMjQxMF9HUEU1X09VVFAgICAgICAoMHgwMSA8PCAxMCkKKyNkZWZpbmUgUzNDMjQxMF9HUEU1X1NEQ0xLICAgICAoMHgwMiA8PCAxMCkKKworI2RlZmluZSBTM0MyNDEwX0dQRTYgICAgICAgICAgIFMzQzI0MTBfR1BJT05PKFMzQzI0MTBfR1BJT19CQU5LRSwgNikKKyNkZWZpbmUgUzNDMjQxMF9HUEU2X0lOUCAgICAgICAoMHgwMCA8PCAxMikKKyNkZWZpbmUgUzNDMjQxMF9HUEU2X09VVFAgICAgICAoMHgwMSA8PCAxMikKKyNkZWZpbmUgUzNDMjQxMF9HUEU2X1NEQ01EICAgICAoMHgwMiA8PCAxMikKKworI2RlZmluZSBTM0MyNDEwX0dQRTcgICAgICAgICAgIFMzQzI0MTBfR1BJT05PKFMzQzI0MTBfR1BJT19CQU5LRSwgNykKKyNkZWZpbmUgUzNDMjQxMF9HUEU3X0lOUCAgICAgICAoMHgwMCA8PCAxNCkKKyNkZWZpbmUgUzNDMjQxMF9HUEU3X09VVFAgICAgICAoMHgwMSA8PCAxNCkKKyNkZWZpbmUgUzNDMjQxMF9HUEU3X1NEREFUMCAgICAoMHgwMiA8PCAxNCkKKworI2RlZmluZSBTM0MyNDEwX0dQRTggICAgICAgICAgIFMzQzI0MTBfR1BJT05PKFMzQzI0MTBfR1BJT19CQU5LRSwgOCkKKyNkZWZpbmUgUzNDMjQxMF9HUEU4X0lOUCAgICAgICAoMHgwMCA8PCAxNikKKyNkZWZpbmUgUzNDMjQxMF9HUEU4X09VVFAgICAgICAoMHgwMSA8PCAxNikKKyNkZWZpbmUgUzNDMjQxMF9HUEU4X1NEREFUMSAgICAoMHgwMiA8PCAxNikKKworI2RlZmluZSBTM0MyNDEwX0dQRTkgICAgICAgICAgIFMzQzI0MTBfR1BJT05PKFMzQzI0MTBfR1BJT19CQU5LRSwgOSkKKyNkZWZpbmUgUzNDMjQxMF9HUEU5X0lOUCAgICAgICAoMHgwMCA8PCAxOCkKKyNkZWZpbmUgUzNDMjQxMF9HUEU5X09VVFAgICAgICAoMHgwMSA8PCAxOCkKKyNkZWZpbmUgUzNDMjQxMF9HUEU5X1NEREFUMiAgICAoMHgwMiA8PCAxOCkKKworI2RlZmluZSBTM0MyNDEwX0dQRTEwICAgICAgICAgIFMzQzI0MTBfR1BJT05PKFMzQzI0MTBfR1BJT19CQU5LRSwgMTApCisjZGVmaW5lIFMzQzI0MTBfR1BFMTBfSU5QICAgICAgKDB4MDAgPDwgMjApCisjZGVmaW5lIFMzQzI0MTBfR1BFMTBfT1VUUCAgICAgKDB4MDEgPDwgMjApCisjZGVmaW5lIFMzQzI0MTBfR1BFMTBfU0REQVQzICAgKDB4MDIgPDwgMjApCisKKyNkZWZpbmUgUzNDMjQxMF9HUEUxMSAgICAgICAgICBTM0MyNDEwX0dQSU9OTyhTM0MyNDEwX0dQSU9fQkFOS0UsIDExKQorI2RlZmluZSBTM0MyNDEwX0dQRTExX0lOUCAgICAgICgweDAwIDw8IDIyKQorI2RlZmluZSBTM0MyNDEwX0dQRTExX09VVFAgICAgICgweDAxIDw8IDIyKQorI2RlZmluZSBTM0MyNDEwX0dQRTExX1NQSU1JU08wICgweDAyIDw8IDIyKQorCisjZGVmaW5lIFMzQzI0MTBfR1BFMTIgICAgICAgICAgUzNDMjQxMF9HUElPTk8oUzNDMjQxMF9HUElPX0JBTktFLCAxMikKKyNkZWZpbmUgUzNDMjQxMF9HUEUxMl9JTlAgICAgICAoMHgwMCA8PCAyNCkKKyNkZWZpbmUgUzNDMjQxMF9HUEUxMl9PVVRQICAgICAoMHgwMSA8PCAyNCkKKyNkZWZpbmUgUzNDMjQxMF9HUEUxMl9TUElNT1NJMCAoMHgwMiA8PCAyNCkKKworI2RlZmluZSBTM0MyNDEwX0dQRTEzICAgICAgICAgIFMzQzI0MTBfR1BJT05PKFMzQzI0MTBfR1BJT19CQU5LRSwgMTMpCisjZGVmaW5lIFMzQzI0MTBfR1BFMTNfSU5QICAgICAgKDB4MDAgPDwgMjYpCisjZGVmaW5lIFMzQzI0MTBfR1BFMTNfT1VUUCAgICAgKDB4MDEgPDwgMjYpCisjZGVmaW5lIFMzQzI0MTBfR1BFMTNfU1BJQ0xLMCAgKDB4MDIgPDwgMjYpCisKKyNkZWZpbmUgUzNDMjQxMF9HUEUxNCAgICAgICAgICBTM0MyNDEwX0dQSU9OTyhTM0MyNDEwX0dQSU9fQkFOS0UsIDE0KQorI2RlZmluZSBTM0MyNDEwX0dQRTE0X0lOUCAgICAgICgweDAwIDw8IDI4KQorI2RlZmluZSBTM0MyNDEwX0dQRTE0X09VVFAgICAgICgweDAxIDw8IDI4KQorI2RlZmluZSBTM0MyNDEwX0dQRTE0X0lJQ1NDTCAgICgweDAyIDw8IDI4KQorI2RlZmluZSBTM0MyNDEwX0dQRTE0X01BU0sgICAgICgweDAzIDw8IDI4KQorCisjZGVmaW5lIFMzQzI0MTBfR1BFMTUgICAgICAgICAgUzNDMjQxMF9HUElPTk8oUzNDMjQxMF9HUElPX0JBTktFLCAxNSkKKyNkZWZpbmUgUzNDMjQxMF9HUEUxNV9JTlAgICAgICAoMHgwMCA8PCAzMCkKKyNkZWZpbmUgUzNDMjQxMF9HUEUxNV9PVVRQICAgICAoMHgwMSA8PCAzMCkKKyNkZWZpbmUgUzNDMjQxMF9HUEUxNV9JSUNTREEgICAoMHgwMiA8PCAzMCkKKyNkZWZpbmUgUzNDMjQxMF9HUEUxNV9NQVNLICAgICAoMHgwMyA8PCAzMCkKKworI2RlZmluZSBTM0MyNDQwX0dQRTBfQUNTWU5DICAgICgweDAzIDw8IDApCisjZGVmaW5lIFMzQzI0NDBfR1BFMV9BQ0JJVENMSyAgKDB4MDMgPDwgMikKKyNkZWZpbmUgUzNDMjQ0MF9HUEUyX0FDUkVTRVQgICAoMHgwMyA8PCA0KQorI2RlZmluZSBTM0MyNDQwX0dQRTNfQUNJTiAgICAgICgweDAzIDw8IDYpCisjZGVmaW5lIFMzQzI0NDBfR1BFNF9BQ09VVCAgICAgKDB4MDMgPDwgOCkKKworI2RlZmluZSBTM0MyNDEwX0dQRV9QVVBESVMoeCkgICgxPDwoeCkpCisKKy8qIFBvcnQgRiBjb25zaXN0cyBvZiA4IEdQSU8vU3BlY2lhbCBmdW5jdGlvbgorICoKKyAqIEdQSU8gLyBpbnRlcnJ1cHQgaW5wdXRzCisgKgorICogR1BGQ09OIGhhcyAyIGJpdHMgZm9yIGVhY2ggb2YgdGhlIGlucHV0IHBpbnMgb24gcG9ydCBGCisgKiAgIDAwID0gMCBpbnB1dCwgMSBvdXRwdXQsIDIgaW50ZXJydXB0IChFSU5UMC4uNyksIDMgdW5kZWZpbmVkCisgKgorICogcHVsbCB1cCB3b3JrcyBsaWtlIGFsbCBvdGhlciBwb3J0cy4KKyovCisKKyNkZWZpbmUgUzNDMjQxMF9HUEZDT04JICAgUzNDMjQxMF9HUElPUkVHKDB4NTApCisjZGVmaW5lIFMzQzI0MTBfR1BGREFUCSAgIFMzQzI0MTBfR1BJT1JFRygweDU0KQorI2RlZmluZSBTM0MyNDEwX0dQRlVQCSAgIFMzQzI0MTBfR1BJT1JFRygweDU4KQorCisjZGVmaW5lIFMzQzI0MTBfR1BGMCAgICAgICAgUzNDMjQxMF9HUElPTk8oUzNDMjQxMF9HUElPX0JBTktGLCAwKQorI2RlZmluZSBTM0MyNDEwX0dQRjBfSU5QICAgICgweDAwIDw8IDApCisjZGVmaW5lIFMzQzI0MTBfR1BGMF9PVVRQICAgKDB4MDEgPDwgMCkKKyNkZWZpbmUgUzNDMjQxMF9HUEYwX0VJTlQwICAoMHgwMiA8PCAwKQorCisjZGVmaW5lIFMzQzI0MTBfR1BGMSAgICAgICAgUzNDMjQxMF9HUElPTk8oUzNDMjQxMF9HUElPX0JBTktGLCAxKQorI2RlZmluZSBTM0MyNDEwX0dQRjFfSU5QICAgICgweDAwIDw8IDIpCisjZGVmaW5lIFMzQzI0MTBfR1BGMV9PVVRQICAgKDB4MDEgPDwgMikKKyNkZWZpbmUgUzNDMjQxMF9HUEYxX0VJTlQxICAoMHgwMiA8PCAyKQorCisjZGVmaW5lIFMzQzI0MTBfR1BGMiAgICAgICAgUzNDMjQxMF9HUElPTk8oUzNDMjQxMF9HUElPX0JBTktGLCAyKQorI2RlZmluZSBTM0MyNDEwX0dQRjJfSU5QICAgICgweDAwIDw8IDQpCisjZGVmaW5lIFMzQzI0MTBfR1BGMl9PVVRQICAgKDB4MDEgPDwgNCkKKyNkZWZpbmUgUzNDMjQxMF9HUEYyX0VJTlQyICAoMHgwMiA8PCA0KQorCisjZGVmaW5lIFMzQzI0MTBfR1BGMyAgICAgICAgUzNDMjQxMF9HUElPTk8oUzNDMjQxMF9HUElPX0JBTktGLCAzKQorI2RlZmluZSBTM0MyNDEwX0dQRjNfSU5QICAgICgweDAwIDw8IDYpCisjZGVmaW5lIFMzQzI0MTBfR1BGM19PVVRQICAgKDB4MDEgPDwgNikKKyNkZWZpbmUgUzNDMjQxMF9HUEYzX0VJTlQzICAoMHgwMiA8PCA2KQorCisjZGVmaW5lIFMzQzI0MTBfR1BGNCAgICAgICAgUzNDMjQxMF9HUElPTk8oUzNDMjQxMF9HUElPX0JBTktGLCA0KQorI2RlZmluZSBTM0MyNDEwX0dQRjRfSU5QICAgICgweDAwIDw8IDgpCisjZGVmaW5lIFMzQzI0MTBfR1BGNF9PVVRQICAgKDB4MDEgPDwgOCkKKyNkZWZpbmUgUzNDMjQxMF9HUEY0X0VJTlQ0ICAoMHgwMiA8PCA4KQorCisjZGVmaW5lIFMzQzI0MTBfR1BGNSAgICAgICAgUzNDMjQxMF9HUElPTk8oUzNDMjQxMF9HUElPX0JBTktGLCA1KQorI2RlZmluZSBTM0MyNDEwX0dQRjVfSU5QICAgICgweDAwIDw8IDEwKQorI2RlZmluZSBTM0MyNDEwX0dQRjVfT1VUUCAgICgweDAxIDw8IDEwKQorI2RlZmluZSBTM0MyNDEwX0dQRjVfRUlOVDUgICgweDAyIDw8IDEwKQorCisjZGVmaW5lIFMzQzI0MTBfR1BGNiAgICAgICAgUzNDMjQxMF9HUElPTk8oUzNDMjQxMF9HUElPX0JBTktGLCA2KQorI2RlZmluZSBTM0MyNDEwX0dQRjZfSU5QICAgICgweDAwIDw8IDEyKQorI2RlZmluZSBTM0MyNDEwX0dQRjZfT1VUUCAgICgweDAxIDw8IDEyKQorI2RlZmluZSBTM0MyNDEwX0dQRjZfRUlOVDYgICgweDAyIDw8IDEyKQorCisjZGVmaW5lIFMzQzI0MTBfR1BGNyAgICAgICAgUzNDMjQxMF9HUElPTk8oUzNDMjQxMF9HUElPX0JBTktGLCA3KQorI2RlZmluZSBTM0MyNDEwX0dQRjdfSU5QICAgICgweDAwIDw8IDE0KQorI2RlZmluZSBTM0MyNDEwX0dQRjdfT1VUUCAgICgweDAxIDw8IDE0KQorI2RlZmluZSBTM0MyNDEwX0dQRjdfRUlOVDcgICgweDAyIDw8IDE0KQorCisvKiBQb3J0IEcgY29uc2lzdHMgb2YgOCBHUElPL0lSUS9TcGVjaWFsIGZ1bmN0aW9uCisgKgorICogR1BHQ09OIGhhcyAyIGJpdHMgZm9yIGVhY2ggb2YgdGhlIGlucHV0IHBpbnMgb24gcG9ydCBGCisgKiAgIDAwID0gMCBpbnB1dCwgMSBvdXRwdXQsIDIgaW50ZXJydXB0IChFSU5UMC4uNyksIDMgc3BlY2lhbCBmdW5jCisgKgorICogcHVsbCB1cCB3b3JrcyBsaWtlIGFsbCBvdGhlciBwb3J0cy4KKyovCisKKyNkZWZpbmUgUzNDMjQxMF9HUEdDT04JICAgUzNDMjQxMF9HUElPUkVHKDB4NjApCisjZGVmaW5lIFMzQzI0MTBfR1BHREFUCSAgIFMzQzI0MTBfR1BJT1JFRygweDY0KQorI2RlZmluZSBTM0MyNDEwX0dQR1VQCSAgIFMzQzI0MTBfR1BJT1JFRygweDY4KQorCisjZGVmaW5lIFMzQzI0MTBfR1BHMCAgICAgICAgICBTM0MyNDEwX0dQSU9OTyhTM0MyNDEwX0dQSU9fQkFOS0csIDApCisjZGVmaW5lIFMzQzI0MTBfR1BHMF9JTlAgICAgICAoMHgwMCA8PCAwKQorI2RlZmluZSBTM0MyNDEwX0dQRzBfT1VUUCAgICAgKDB4MDEgPDwgMCkKKyNkZWZpbmUgUzNDMjQxMF9HUEcwX0VJTlQ4ICAgICgweDAyIDw8IDApCisKKyNkZWZpbmUgUzNDMjQxMF9HUEcxICAgICAgICAgIFMzQzI0MTBfR1BJT05PKFMzQzI0MTBfR1BJT19CQU5LRywgMSkKKyNkZWZpbmUgUzNDMjQxMF9HUEcxX0lOUCAgICAgICgweDAwIDw8IDIpCisjZGVmaW5lIFMzQzI0MTBfR1BHMV9PVVRQICAgICAoMHgwMSA8PCAyKQorI2RlZmluZSBTM0MyNDEwX0dQRzFfRUlOVDkgICAgKDB4MDIgPDwgMikKKworI2RlZmluZSBTM0MyNDEwX0dQRzIgICAgICAgICAgUzNDMjQxMF9HUElPTk8oUzNDMjQxMF9HUElPX0JBTktHLCAyKQorI2RlZmluZSBTM0MyNDEwX0dQRzJfSU5QICAgICAgKDB4MDAgPDwgNCkKKyNkZWZpbmUgUzNDMjQxMF9HUEcyX09VVFAgICAgICgweDAxIDw8IDQpCisjZGVmaW5lIFMzQzI0MTBfR1BHMl9FSU5UMTAgICAoMHgwMiA8PCA0KQorCisjZGVmaW5lIFMzQzI0MTBfR1BHMyAgICAgICAgICBTM0MyNDEwX0dQSU9OTyhTM0MyNDEwX0dQSU9fQkFOS0csIDMpCisjZGVmaW5lIFMzQzI0MTBfR1BHM19JTlAgICAgICAoMHgwMCA8PCA2KQorI2RlZmluZSBTM0MyNDEwX0dQRzNfT1VUUCAgICAgKDB4MDEgPDwgNikKKyNkZWZpbmUgUzNDMjQxMF9HUEczX0VJTlQxMSAgICgweDAyIDw8IDYpCisKKyNkZWZpbmUgUzNDMjQxMF9HUEc0ICAgICAgICAgIFMzQzI0MTBfR1BJT05PKFMzQzI0MTBfR1BJT19CQU5LRywgNCkKKyNkZWZpbmUgUzNDMjQxMF9HUEc0X0lOUCAgICAgICgweDAwIDw8IDgpCisjZGVmaW5lIFMzQzI0MTBfR1BHNF9PVVRQICAgICAoMHgwMSA8PCA4KQorI2RlZmluZSBTM0MyNDEwX0dQRzRfRUlOVDEyICAgKDB4MDIgPDwgOCkKKyNkZWZpbmUgUzNDMjQxMF9HUEc0X0xDRFBXUkVOICgweDAzIDw8IDgpCisKKyNkZWZpbmUgUzNDMjQxMF9HUEc1ICAgICAgICAgIFMzQzI0MTBfR1BJT05PKFMzQzI0MTBfR1BJT19CQU5LRywgNSkKKyNkZWZpbmUgUzNDMjQxMF9HUEc1X0lOUCAgICAgICgweDAwIDw8IDEwKQorI2RlZmluZSBTM0MyNDEwX0dQRzVfT1VUUCAgICAgKDB4MDEgPDwgMTApCisjZGVmaW5lIFMzQzI0MTBfR1BHNV9FSU5UMTMgICAoMHgwMiA8PCAxMCkKKyNkZWZpbmUgUzNDMjQxMF9HUEc1X1NQSU1JU08xICgweDAzIDw8IDEwKQorCisjZGVmaW5lIFMzQzI0MTBfR1BHNiAgICAgICAgICBTM0MyNDEwX0dQSU9OTyhTM0MyNDEwX0dQSU9fQkFOS0csIDYpCisjZGVmaW5lIFMzQzI0MTBfR1BHNl9JTlAgICAgICAoMHgwMCA8PCAxMikKKyNkZWZpbmUgUzNDMjQxMF9HUEc2X09VVFAgICAgICgweDAxIDw8IDEyKQorI2RlZmluZSBTM0MyNDEwX0dQRzZfRUlOVDE0ICAgKDB4MDIgPDwgMTIpCisjZGVmaW5lIFMzQzI0MTBfR1BHNl9TUElNT1NJMSAoMHgwMyA8PCAxMikKKworI2RlZmluZSBTM0MyNDEwX0dQRzcgICAgICAgICAgUzNDMjQxMF9HUElPTk8oUzNDMjQxMF9HUElPX0JBTktHLCA3KQorI2RlZmluZSBTM0MyNDEwX0dQRzdfSU5QICAgICAgKDB4MDAgPDwgMTQpCisjZGVmaW5lIFMzQzI0MTBfR1BHN19PVVRQICAgICAoMHgwMSA8PCAxNCkKKyNkZWZpbmUgUzNDMjQxMF9HUEc3X0VJTlQxNSAgICgweDAyIDw8IDE0KQorI2RlZmluZSBTM0MyNDEwX0dQRzdfU1BJQ0xLMSAgKDB4MDMgPDwgMTQpCisKKyNkZWZpbmUgUzNDMjQxMF9HUEc4ICAgICAgICAgIFMzQzI0MTBfR1BJT05PKFMzQzI0MTBfR1BJT19CQU5LRywgOCkKKyNkZWZpbmUgUzNDMjQxMF9HUEc4X0lOUCAgICAgICgweDAwIDw8IDE2KQorI2RlZmluZSBTM0MyNDEwX0dQRzhfT1VUUCAgICAgKDB4MDEgPDwgMTYpCisjZGVmaW5lIFMzQzI0MTBfR1BHOF9FSU5UMTYgICAoMHgwMiA8PCAxNikKKworI2RlZmluZSBTM0MyNDEwX0dQRzkgICAgICAgICAgUzNDMjQxMF9HUElPTk8oUzNDMjQxMF9HUElPX0JBTktHLCA5KQorI2RlZmluZSBTM0MyNDEwX0dQRzlfSU5QICAgICAgKDB4MDAgPDwgMTgpCisjZGVmaW5lIFMzQzI0MTBfR1BHOV9PVVRQICAgICAoMHgwMSA8PCAxOCkKKyNkZWZpbmUgUzNDMjQxMF9HUEc5X0VJTlQxNyAgICgweDAyIDw8IDE4KQorCisjZGVmaW5lIFMzQzI0MTBfR1BHMTAgICAgICAgICBTM0MyNDEwX0dQSU9OTyhTM0MyNDEwX0dQSU9fQkFOS0csIDEwKQorI2RlZmluZSBTM0MyNDEwX0dQRzEwX0lOUCAgICAgKDB4MDAgPDwgMjApCisjZGVmaW5lIFMzQzI0MTBfR1BHMTBfT1VUUCAgICAoMHgwMSA8PCAyMCkKKyNkZWZpbmUgUzNDMjQxMF9HUEcxMF9FSU5UMTggICgweDAyIDw8IDIwKQorCisjZGVmaW5lIFMzQzI0MTBfR1BHMTEgICAgICAgICBTM0MyNDEwX0dQSU9OTyhTM0MyNDEwX0dQSU9fQkFOS0csIDExKQorI2RlZmluZSBTM0MyNDEwX0dQRzExX0lOUCAgICAgKDB4MDAgPDwgMjIpCisjZGVmaW5lIFMzQzI0MTBfR1BHMTFfT1VUUCAgICAoMHgwMSA8PCAyMikKKyNkZWZpbmUgUzNDMjQxMF9HUEcxMV9FSU5UMTkgICgweDAyIDw8IDIyKQorI2RlZmluZSBTM0MyNDEwX0dQRzExX1RDTEsxICAgKDB4MDMgPDwgMjIpCisKKyNkZWZpbmUgUzNDMjQxMF9HUEcxMiAgICAgICAgIFMzQzI0MTBfR1BJT05PKFMzQzI0MTBfR1BJT19CQU5LRywgMTIpCisjZGVmaW5lIFMzQzI0MTBfR1BHMTJfSU5QICAgICAoMHgwMCA8PCAyNCkKKyNkZWZpbmUgUzNDMjQxMF9HUEcxMl9PVVRQICAgICgweDAxIDw8IDI0KQorI2RlZmluZSBTM0MyNDEwX0dQRzEyX0VJTlQyMCAgKDB4MDIgPDwgMjQpCisjZGVmaW5lIFMzQzI0MTBfR1BHMTJfWE1PTiAgICAoMHgwMyA8PCAyNCkKKworI2RlZmluZSBTM0MyNDEwX0dQRzEzICAgICAgICAgUzNDMjQxMF9HUElPTk8oUzNDMjQxMF9HUElPX0JBTktHLCAxMykKKyNkZWZpbmUgUzNDMjQxMF9HUEcxM19JTlAgICAgICgweDAwIDw8IDI2KQorI2RlZmluZSBTM0MyNDEwX0dQRzEzX09VVFAgICAgKDB4MDEgPDwgMjYpCisjZGVmaW5lIFMzQzI0MTBfR1BHMTNfRUlOVDIxICAoMHgwMiA8PCAyNikKKyNkZWZpbmUgUzNDMjQxMF9HUEcxM19uWFBPTiAgICgweDAzIDw8IDI2KQorCisjZGVmaW5lIFMzQzI0MTBfR1BHMTQgICAgICAgICBTM0MyNDEwX0dQSU9OTyhTM0MyNDEwX0dQSU9fQkFOS0csIDE0KQorI2RlZmluZSBTM0MyNDEwX0dQRzE0X0lOUCAgICAgKDB4MDAgPDwgMjgpCisjZGVmaW5lIFMzQzI0MTBfR1BHMTRfT1VUUCAgICAoMHgwMSA8PCAyOCkKKyNkZWZpbmUgUzNDMjQxMF9HUEcxNF9FSU5UMjIgICgweDAyIDw8IDI4KQorI2RlZmluZSBTM0MyNDEwX0dQRzE0X1lNT04gICAgKDB4MDMgPDwgMjgpCisKKyNkZWZpbmUgUzNDMjQxMF9HUEcxNSAgICAgICAgIFMzQzI0MTBfR1BJT05PKFMzQzI0MTBfR1BJT19CQU5LRywgMTUpCisjZGVmaW5lIFMzQzI0MTBfR1BHMTVfSU5QICAgICAoMHgwMCA8PCAzMCkKKyNkZWZpbmUgUzNDMjQxMF9HUEcxNV9PVVRQICAgICgweDAxIDw8IDMwKQorI2RlZmluZSBTM0MyNDEwX0dQRzE1X0VJTlQyMyAgKDB4MDIgPDwgMzApCisjZGVmaW5lIFMzQzI0MTBfR1BHMTVfbllQT04gICAoMHgwMyA8PCAzMCkKKworCisjZGVmaW5lIFMzQzI0MTBfR1BHX1BVUERJUyh4KSAgKDE8PCh4KSkKKworLyogUG9ydCBIIGNvbnNpc3RzIG9mMTEgR1BJTy9zZXJpYWwvTWlzYyBwaW5zCisgKgorICogR1BHQ09OIGhhcyAyIGJpdHMgZm9yIGVhY2ggb2YgdGhlIGlucHV0IHBpbnMgb24gcG9ydCBGCisgKiAgIDAwID0gMCBpbnB1dCwgMSBvdXRwdXQsIDIgaW50ZXJydXB0IChFSU5UMC4uNyksIDMgc3BlY2lhbCBmdW5jCisgKgorICogcHVsbCB1cCB3b3JrcyBsaWtlIGFsbCBvdGhlciBwb3J0cy4KKyovCisKKyNkZWZpbmUgUzNDMjQxMF9HUEhDT04JICAgUzNDMjQxMF9HUElPUkVHKDB4NzApCisjZGVmaW5lIFMzQzI0MTBfR1BIREFUCSAgIFMzQzI0MTBfR1BJT1JFRygweDc0KQorI2RlZmluZSBTM0MyNDEwX0dQSFVQCSAgIFMzQzI0MTBfR1BJT1JFRygweDc4KQorCisjZGVmaW5lIFMzQzI0MTBfR1BIMCAgICAgICAgUzNDMjQxMF9HUElPTk8oUzNDMjQxMF9HUElPX0JBTktILCAwKQorI2RlZmluZSBTM0MyNDEwX0dQSDBfSU5QICAgICgweDAwIDw8IDApCisjZGVmaW5lIFMzQzI0MTBfR1BIMF9PVVRQICAgKDB4MDEgPDwgMCkKKyNkZWZpbmUgUzNDMjQxMF9HUEgwX25DVFMwICAoMHgwMiA8PCAwKQorCisjZGVmaW5lIFMzQzI0MTBfR1BIMSAgICAgICAgUzNDMjQxMF9HUElPTk8oUzNDMjQxMF9HUElPX0JBTktILCAxKQorI2RlZmluZSBTM0MyNDEwX0dQSDFfSU5QICAgICgweDAwIDw8IDIpCisjZGVmaW5lIFMzQzI0MTBfR1BIMV9PVVRQICAgKDB4MDEgPDwgMikKKyNkZWZpbmUgUzNDMjQxMF9HUEgxX25SVFMwICAoMHgwMiA8PCAyKQorCisjZGVmaW5lIFMzQzI0MTBfR1BIMiAgICAgICAgUzNDMjQxMF9HUElPTk8oUzNDMjQxMF9HUElPX0JBTktILCAyKQorI2RlZmluZSBTM0MyNDEwX0dQSDJfSU5QICAgICgweDAwIDw8IDQpCisjZGVmaW5lIFMzQzI0MTBfR1BIMl9PVVRQICAgKDB4MDEgPDwgNCkKKyNkZWZpbmUgUzNDMjQxMF9HUEgyX1RYRDAgICAoMHgwMiA8PCA0KQorCisjZGVmaW5lIFMzQzI0MTBfR1BIMyAgICAgICAgUzNDMjQxMF9HUElPTk8oUzNDMjQxMF9HUElPX0JBTktILCAzKQorI2RlZmluZSBTM0MyNDEwX0dQSDNfSU5QICAgICgweDAwIDw8IDYpCisjZGVmaW5lIFMzQzI0MTBfR1BIM19PVVRQICAgKDB4MDEgPDwgNikKKyNkZWZpbmUgUzNDMjQxMF9HUEgzX1JYRDAgICAoMHgwMiA8PCA2KQorCisjZGVmaW5lIFMzQzI0MTBfR1BINCAgICAgICAgUzNDMjQxMF9HUElPTk8oUzNDMjQxMF9HUElPX0JBTktILCA0KQorI2RlZmluZSBTM0MyNDEwX0dQSDRfSU5QICAgICgweDAwIDw8IDgpCisjZGVmaW5lIFMzQzI0MTBfR1BINF9PVVRQICAgKDB4MDEgPDwgOCkKKyNkZWZpbmUgUzNDMjQxMF9HUEg0X1RYRDEgICAoMHgwMiA8PCA4KQorCisjZGVmaW5lIFMzQzI0MTBfR1BINSAgICAgICAgUzNDMjQxMF9HUElPTk8oUzNDMjQxMF9HUElPX0JBTktILCA1KQorI2RlZmluZSBTM0MyNDEwX0dQSDVfSU5QICAgICgweDAwIDw8IDEwKQorI2RlZmluZSBTM0MyNDEwX0dQSDVfT1VUUCAgICgweDAxIDw8IDEwKQorI2RlZmluZSBTM0MyNDEwX0dQSDVfUlhEMSAgICgweDAyIDw8IDEwKQorCisjZGVmaW5lIFMzQzI0MTBfR1BINiAgICAgICAgUzNDMjQxMF9HUElPTk8oUzNDMjQxMF9HUElPX0JBTktILCA2KQorI2RlZmluZSBTM0MyNDEwX0dQSDZfSU5QICAgICgweDAwIDw8IDEyKQorI2RlZmluZSBTM0MyNDEwX0dQSDZfT1VUUCAgICgweDAxIDw8IDEyKQorI2RlZmluZSBTM0MyNDEwX0dQSDZfVFhEMiAgICgweDAyIDw8IDEyKQorI2RlZmluZSBTM0MyNDEwX0dQSDZfblJUUzEgICgweDAzIDw8IDEyKQorCisjZGVmaW5lIFMzQzI0MTBfR1BINyAgICAgICAgUzNDMjQxMF9HUElPTk8oUzNDMjQxMF9HUElPX0JBTktILCA3KQorI2RlZmluZSBTM0MyNDEwX0dQSDdfSU5QICAgICgweDAwIDw8IDE0KQorI2RlZmluZSBTM0MyNDEwX0dQSDdfT1VUUCAgICgweDAxIDw8IDE0KQorI2RlZmluZSBTM0MyNDEwX0dQSDdfUlhEMiAgICgweDAyIDw8IDE0KQorI2RlZmluZSBTM0MyNDEwX0dQSDdfbkNUUzEgICgweDAzIDw8IDE0KQorCisjZGVmaW5lIFMzQzI0MTBfR1BIOCAgICAgICAgUzNDMjQxMF9HUElPTk8oUzNDMjQxMF9HUElPX0JBTktILCA4KQorI2RlZmluZSBTM0MyNDEwX0dQSDhfSU5QICAgICgweDAwIDw8IDE2KQorI2RlZmluZSBTM0MyNDEwX0dQSDhfT1VUUCAgICgweDAxIDw8IDE2KQorI2RlZmluZSBTM0MyNDEwX0dQSDhfVUNMSyAgICgweDAyIDw8IDE2KQorCisjZGVmaW5lIFMzQzI0MTBfR1BIOSAgICAgICAgICBTM0MyNDEwX0dQSU9OTyhTM0MyNDEwX0dQSU9fQkFOS0gsIDkpCisjZGVmaW5lIFMzQzI0MTBfR1BIOV9JTlAgICAgICAoMHgwMCA8PCAxOCkKKyNkZWZpbmUgUzNDMjQxMF9HUEg5X09VVFAgICAgICgweDAxIDw8IDE4KQorI2RlZmluZSBTM0MyNDEwX0dQSDlfQ0xLT1VUMCAgKDB4MDIgPDwgMTgpCisKKyNkZWZpbmUgUzNDMjQxMF9HUEgxMCAgICAgICAgIFMzQzI0MTBfR1BJT05PKFMzQzI0MTBfR1BJT19CQU5LSCwgMTApCisjZGVmaW5lIFMzQzI0MTBfR1BIMTBfSU5QICAgICAoMHgwMCA8PCAyMCkKKyNkZWZpbmUgUzNDMjQxMF9HUEgxMF9PVVRQICAgICgweDAxIDw8IDIwKQorI2RlZmluZSBTM0MyNDEwX0dQSDEwX0NMS09VVDEgKDB4MDIgPDwgMjApCisKKy8qIG1pc2NlbGxhbmVvdXMgY29udHJvbCAqLworCisjZGVmaW5lIFMzQzI0MTBfTUlTQ0NSCSAgIFMzQzI0MTBfR1BJT1JFRygweDgwKQorI2RlZmluZSBTM0MyNDEwX0RDTEtDT04JICAgUzNDMjQxMF9HUElPUkVHKDB4ODQpCisKKy8qIHNlZSBjbG9jay5oIGZvciBkY2xrIGRlZmluaXRpb25zICovCisKKy8qIHB1bGx1cCBjb250cm9sIG9uIGRhdGFidXMgKi8KKyNkZWZpbmUgUzNDMjQxMF9NSVNDQ1JfU1BVQ1JfSEVOICAgICgwKQorI2RlZmluZSBTM0MyNDEwX01JU0NDUl9TUFVDUl9IRElTICAgKDE8PDApCisjZGVmaW5lIFMzQzI0MTBfTUlTQ0NSX1NQVUNSX0xFTiAgICAoMCkKKyNkZWZpbmUgUzNDMjQxMF9NSVNDQ1JfU1BVQ1JfTERJUyAgICgxPDwxKQorCisjZGVmaW5lIFMzQzI0MTBfTUlTQ0NSX1VTQkRFVgkgICAgKDApCisjZGVmaW5lIFMzQzI0MTBfTUlTQ0NSX1VTQkhPU1QJICAgICgxPDwzKQorCisjZGVmaW5lIFMzQzI0MTBfTUlTQ0NSX0NMSzBfTVBMTCAgICAoMDw8NCkKKyNkZWZpbmUgUzNDMjQxMF9NSVNDQ1JfQ0xLMF9VUExMICAgICgxPDw0KQorI2RlZmluZSBTM0MyNDEwX01JU0NDUl9DTEswX0ZDTEsgICAgKDI8PDQpCisjZGVmaW5lIFMzQzI0MTBfTUlTQ0NSX0NMSzBfSENMSyAgICAoMzw8NCkKKyNkZWZpbmUgUzNDMjQxMF9NSVNDQ1JfQ0xLMF9QQ0xLICAgICg0PDw0KQorI2RlZmluZSBTM0MyNDEwX01JU0NDUl9DTEswX0RDTEswICAgKDU8PDQpCisKKyNkZWZpbmUgUzNDMjQxMF9NSVNDQ1JfQ0xLMV9NUExMICAgICgwPDw4KQorI2RlZmluZSBTM0MyNDEwX01JU0NDUl9DTEsxX1VQTEwgICAgKDE8PDgpCisjZGVmaW5lIFMzQzI0MTBfTUlTQ0NSX0NMSzFfRkNMSyAgICAoMjw8OCkKKyNkZWZpbmUgUzNDMjQxMF9NSVNDQ1JfQ0xLMV9IQ0xLICAgICgzPDw4KQorI2RlZmluZSBTM0MyNDEwX01JU0NDUl9DTEsxX1BDTEsgICAgKDQ8PDgpCisjZGVmaW5lIFMzQzI0MTBfTUlTQ0NSX0NMSzFfRENMSzEgICAoNTw8OCkKKworI2RlZmluZSBTM0MyNDEwX01JU0NDUl9VU0JTVVNQTkQwICAgKDE8PDEyKQorI2RlZmluZSBTM0MyNDEwX01JU0NDUl9VU0JTVVNQTkQxICAgKDE8PDEzKQorCisjZGVmaW5lIFMzQzI0MTBfTUlTQ0NSX25SU1RDT04JICAgICgxPDwxNikKKworI2RlZmluZSBTM0MyNDEwX01JU0NDUl9uRU5fU0NMSzAgICAgKDE8PDE3KQorI2RlZmluZSBTM0MyNDEwX01JU0NDUl9uRU5fU0NMSzEgICAgKDE8PDE4KQorI2RlZmluZSBTM0MyNDEwX01JU0NDUl9uRU5fU0NMS0UgICAgKDE8PDE5KQorI2RlZmluZSBTM0MyNDEwX01JU0NDUl9TRFNMRUVQCSAgICAoNzw8MTcpCisKKy8qIGV4dGVybmFsIGludGVycnVwdCBjb250cm9sLi4uICovCisvKiBTM0MyNDEwX0VYVElOVDAgLT4gaXJxIHNlbnNlIGNvbnRyb2wgZm9yIEVJTlQwLi5FSU5UNworICogUzNDMjQxMF9FWFRJTlQxIC0+IGlycSBzZW5zZSBjb250cm9sIGZvciBFSU5UOC4uRUlOVDE1CisgKiBTM0MyNDEwX0VYVElOVDIgLT4gaXJxIHNlbnNlIGNvbnRyb2wgZm9yIEVJTlQxNi4uRUlOVDIzCisgKgorICogbm90ZSBTM0MyNDEwX0VYVElOVDIgaGFzIGZpbHRlcmluZyBvcHRpb25zIGZvciBFSU5UMTYuLkVJTlQyMworICoKKyAqIFNhbXN1bmcgZGF0YXNoZWV0IHA5LTI1CisqLworCisjZGVmaW5lIFMzQzI0MTBfRVhUSU5UMAkgICBTM0MyNDEwX0dQSU9SRUcoMHg4OCkKKyNkZWZpbmUgUzNDMjQxMF9FWFRJTlQxCSAgIFMzQzI0MTBfR1BJT1JFRygweDhDKQorI2RlZmluZSBTM0MyNDEwX0VYVElOVDIJICAgUzNDMjQxMF9HUElPUkVHKDB4OTApCisKKy8qIHZhbHVlcyBmb3IgUzNDMjQxMF9FWFRJTlQwLzEvMiAqLworI2RlZmluZSBTM0MyNDEwX0VYVElOVF9MT1dMRVYJICgweDAwKQorI2RlZmluZSBTM0MyNDEwX0VYVElOVF9ISUxFVgkgKDB4MDEpCisjZGVmaW5lIFMzQzI0MTBfRVhUSU5UX0ZBTExFREdFCSAoMHgwMikKKyNkZWZpbmUgUzNDMjQxMF9FWFRJTlRfUklTRUVER0UJICgweDA0KQorI2RlZmluZSBTM0MyNDEwX0VYVElOVF9CT1RIRURHRQkgKDB4MDYpCisKKy8qIGludGVycnVwdCBmaWx0ZXJpbmcgY29ucnJvbCBmb3IgRUlOVDE2Li5FSU5UMjMgKi8KKyNkZWZpbmUgUzNDMjQxMF9FSU5GTFQwCSAgIFMzQzI0MTBfR1BJT1JFRygweDk0KQorI2RlZmluZSBTM0MyNDEwX0VJTkZMVDEJICAgUzNDMjQxMF9HUElPUkVHKDB4OTgpCisjZGVmaW5lIFMzQzI0MTBfRUlORkxUMgkgICBTM0MyNDEwX0dQSU9SRUcoMHg5QykKKyNkZWZpbmUgUzNDMjQxMF9FSU5GTFQzCSAgIFMzQzI0MTBfR1BJT1JFRygweEEwKQorCisvKiB2YWx1ZXMgZm9yIGludGVycnVwdCBmaWx0ZXJpbmcgKi8KKyNkZWZpbmUgUzNDMjQxMF9FSU5URkxUX1BDTEsJCSgweDAwKQorI2RlZmluZSBTM0MyNDEwX0VJTlRGTFRfRVhUQ0xLCQkoMTw8NykKKyNkZWZpbmUgUzNDMjQxMF9FSU5URkxUX1dJRFRITVNLKHgpCSgoeCkgJiAweDNmKQorCisvKiByZW1vdmVkIEVJTlR4eHh4IGRlZnMgZnJvbSBoZXJlLCBub3QgbWVhbnQgZm9yIHRoaXMgKi8KKworLyogR1NUQVRVUyBoYXZlIG1pc2NlbGxhbmVvdXMgaW5mb3JtYXRpb24gaW4gdGhlbQorICoKKyAqLworCisjZGVmaW5lIFMzQzI0MTBfR1NUQVRVUzAgICBTM0MyNDEwX0dQSU9SRUcoMHgwQUMpCisjZGVmaW5lIFMzQzI0MTBfR1NUQVRVUzEgICBTM0MyNDEwX0dQSU9SRUcoMHgwQjApCisjZGVmaW5lIFMzQzI0MTBfR1NUQVRVUzIgICBTM0MyNDEwX0dQSU9SRUcoMHgwQjQpCisjZGVmaW5lIFMzQzI0MTBfR1NUQVRVUzMgICBTM0MyNDEwX0dQSU9SRUcoMHgwQjgpCisjZGVmaW5lIFMzQzI0MTBfR1NUQVRVUzQgICBTM0MyNDEwX0dQSU9SRUcoMHgwQkMpCisKKyNkZWZpbmUgUzNDMjQxMF9HU1RBVFVTMF9uV0FJVAkgICAoMTw8MykKKyNkZWZpbmUgUzNDMjQxMF9HU1RBVFVTMF9OQ09OCSAgICgxPDwyKQorI2RlZmluZSBTM0MyNDEwX0dTVEFUVVMwX1JuQgkgICAoMTw8MSkKKyNkZWZpbmUgUzNDMjQxMF9HU1RBVFVTMF9uQkFUVEZMVCAgKDE8PDApCisKKyNkZWZpbmUgUzNDMjQxMF9HU1RBVFVTMV9JRE1BU0sJICAgKDB4ZmZmZjAwMDApCisjZGVmaW5lIFMzQzI0MTBfR1NUQVRVUzFfMjQxMAkgICAoMHgzMjQxMDAwMCkKKyNkZWZpbmUgUzNDMjQxMF9HU1RBVFVTMV8yNDQwCSAgICgweDMyNDQwMDAwKQorCisjZGVmaW5lIFMzQzI0MTBfR1NUQVRVUzJfV1RSRVNFVCAgICgxPDwyKQorI2RlZmluZSBTM0MyNDEwX0dTVEFUVVMyX09GRlJFU0VUICAoMTw8MSkKKyNkZWZpbmUgUzNDMjQxMF9HU1RBVFVTMl9QT05SRVNFVCAgKDE8PDApCisKKyNlbmRpZgkvKiBfX0FTTV9BUkNIX1JFR1NfR1BJT19IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1ncGlvai5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLWdwaW9qLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FkMjMyNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1ncGlvai5oCkBAIC0wLDAgKzEsMTAxIEBACisvKiBsaW51eC9pbmNsdWRlL2FzbS9oYXJkd2FyZS9zM2MyNDEwL3JlZ3MtZ3Bpb2ouaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNCBTaW10ZWMgRWxlY3Ryb25pY3MgPGxpbnV4QHNpbXRlYy5jby51az4KKyAqCQkgICAgICBodHRwOi8vd3d3LnNpbXRlYy5jby51ay9wcm9kdWN0cy9TV0xJTlVYLworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogUzNDMjQ0MCBHUElPIEogcmVnaXN0ZXIgZGVmaW5pdGlvbnMKKyAqCisgKiAgQ2hhbmdlbG9nOgorICogICAgMTEtQXVnLTIwMDQgICAgIEJKRCAgICAgQ3JlYXRlZCBmaWxlCisgKiAgICAxMC1GZWItMjAwNSAgICAgQkpEICAgICBGaXggR1BKMTIgZGVmaW5pdGlvbiAoR3VpbGxhdW1lIEdvdXJhdCkKKyovCisKKworI2lmbmRlZiBfX0FTTV9BUkNIX1JFR1NfR1BJT0pfSAorI2RlZmluZSBfX0FTTV9BUkNIX1JFR1NfR1BJT0pfSCAiZ3Bpb2oiCisKKy8qIFBvcnQgSiBjb25zaXN0cyBvZiAxMyBHUElPL0NhbWVyYSBwaW5zCisgKgorICogR1BKQ09OIGhhcyAyIGJpdHMgZm9yIGVhY2ggb2YgdGhlIGlucHV0IHBpbnMgb24gcG9ydCBGCisgKiAgIDAwID0gMCBpbnB1dCwgMSBvdXRwdXQsIDIgQ2FtZXJhCisgKgorICogcHVsbCB1cCB3b3JrcyBsaWtlIGFsbCBvdGhlciBwb3J0cy4KKyovCisKKyNkZWZpbmUgUzNDMjQ0MF9HUElPX0JBTktKICAoNDE2KQorCisjZGVmaW5lIFMzQzI0NDBfR1BKQ09OCSAgICBTM0MyNDEwX0dQSU9SRUcoMHhkMCkKKyNkZWZpbmUgUzNDMjQ0MF9HUEpEQVQJICAgIFMzQzI0MTBfR1BJT1JFRygweGQ0KQorI2RlZmluZSBTM0MyNDQwX0dQSlVQCSAgICBTM0MyNDEwX0dQSU9SRUcoMHhkOCkKKworI2RlZmluZSBTM0MyNDQwX0dQSjAgICAgICAgICAgICBTM0MyNDEwX0dQSU9OTyhTM0MyNDQwX0dQSU9fQkFOS0osIDApCisjZGVmaW5lIFMzQzI0NDBfR1BKMF9JTlAgICAgICAgICgweDAwIDw8IDApCisjZGVmaW5lIFMzQzI0NDBfR1BKMF9PVVRQICAgICAgICgweDAxIDw8IDApCisjZGVmaW5lIFMzQzI0NDBfR1BKMF9DQU1EQVRBMCAgICgweDAyIDw8IDApCisKKyNkZWZpbmUgUzNDMjQ0MF9HUEoxICAgICAgICAgICAgUzNDMjQxMF9HUElPTk8oUzNDMjQ0MF9HUElPX0JBTktKLCAxKQorI2RlZmluZSBTM0MyNDQwX0dQSjFfSU5QICAgICAgICAoMHgwMCA8PCAyKQorI2RlZmluZSBTM0MyNDQwX0dQSjFfT1VUUCAgICAgICAoMHgwMSA8PCAyKQorI2RlZmluZSBTM0MyNDQwX0dQSjFfQ0FNREFUQTEgICAoMHgwMiA8PCAyKQorCisjZGVmaW5lIFMzQzI0NDBfR1BKMiAgICAgICAgICAgIFMzQzI0MTBfR1BJT05PKFMzQzI0NDBfR1BJT19CQU5LSiwgMikKKyNkZWZpbmUgUzNDMjQ0MF9HUEoyX0lOUCAgICAgICAgKDB4MDAgPDwgNCkKKyNkZWZpbmUgUzNDMjQ0MF9HUEoyX09VVFAgICAgICAgKDB4MDEgPDwgNCkKKyNkZWZpbmUgUzNDMjQ0MF9HUEoyX0NBTURBVEEyICAgKDB4MDIgPDwgNCkKKworI2RlZmluZSBTM0MyNDQwX0dQSjMgICAgICAgICAgICBTM0MyNDEwX0dQSU9OTyhTM0MyNDQwX0dQSU9fQkFOS0osIDMpCisjZGVmaW5lIFMzQzI0NDBfR1BKM19JTlAgICAgICAgICgweDAwIDw8IDYpCisjZGVmaW5lIFMzQzI0NDBfR1BKM19PVVRQICAgICAgICgweDAxIDw8IDYpCisjZGVmaW5lIFMzQzI0NDBfR1BKM19DQU1EQVRBMyAgICgweDAyIDw8IDYpCisKKyNkZWZpbmUgUzNDMjQ0MF9HUEo0ICAgICAgICAgICAgUzNDMjQxMF9HUElPTk8oUzNDMjQ0MF9HUElPX0JBTktKLCA0KQorI2RlZmluZSBTM0MyNDQwX0dQSjRfSU5QICAgICAgICAoMHgwMCA8PCA4KQorI2RlZmluZSBTM0MyNDQwX0dQSjRfT1VUUCAgICAgICAoMHgwMSA8PCA4KQorI2RlZmluZSBTM0MyNDQwX0dQSjRfQ0FNREFUQTQgICAoMHgwMiA8PCA4KQorCisjZGVmaW5lIFMzQzI0NDBfR1BKNSAgICAgICAgICAgIFMzQzI0MTBfR1BJT05PKFMzQzI0NDBfR1BJT19CQU5LSiwgNSkKKyNkZWZpbmUgUzNDMjQ0MF9HUEo1X0lOUCAgICAgICAgKDB4MDAgPDwgMTApCisjZGVmaW5lIFMzQzI0NDBfR1BKNV9PVVRQICAgICAgICgweDAxIDw8IDEwKQorI2RlZmluZSBTM0MyNDQwX0dQSjVfQ0FNREFUQTUgICAoMHgwMiA8PCAxMCkKKworI2RlZmluZSBTM0MyNDQwX0dQSjYgICAgICAgICAgICBTM0MyNDEwX0dQSU9OTyhTM0MyNDQwX0dQSU9fQkFOS0osIDYpCisjZGVmaW5lIFMzQzI0NDBfR1BKNl9JTlAgICAgICAgICgweDAwIDw8IDEyKQorI2RlZmluZSBTM0MyNDQwX0dQSjZfT1VUUCAgICAgICAoMHgwMSA8PCAxMikKKyNkZWZpbmUgUzNDMjQ0MF9HUEo2X0NBTURBVEE2ICAgKDB4MDIgPDwgMTIpCisKKyNkZWZpbmUgUzNDMjQ0MF9HUEo3ICAgICAgICAgICAgUzNDMjQxMF9HUElPTk8oUzNDMjQ0MF9HUElPX0JBTktKLCA3KQorI2RlZmluZSBTM0MyNDQwX0dQSjdfSU5QICAgICAgICAoMHgwMCA8PCAxNCkKKyNkZWZpbmUgUzNDMjQ0MF9HUEo3X09VVFAgICAgICAgKDB4MDEgPDwgMTQpCisjZGVmaW5lIFMzQzI0NDBfR1BKN19DQU1EQVRBNyAgICgweDAyIDw8IDE0KQorCisjZGVmaW5lIFMzQzI0NDBfR1BKOCAgICAgICAgICAgIFMzQzI0MTBfR1BJT05PKFMzQzI0NDBfR1BJT19CQU5LSiwgOCkKKyNkZWZpbmUgUzNDMjQ0MF9HUEo4X0lOUCAgICAgICAgKDB4MDAgPDwgMTYpCisjZGVmaW5lIFMzQzI0NDBfR1BKOF9PVVRQICAgICAgICgweDAxIDw8IDE2KQorI2RlZmluZSBTM0MyNDQwX0dQSjhfQ0FNUENMSyAgICAoMHgwMiA8PCAxNikKKworI2RlZmluZSBTM0MyNDQwX0dQSjkgICAgICAgICAgICBTM0MyNDEwX0dQSU9OTyhTM0MyNDQwX0dQSU9fQkFOS0osIDkpCisjZGVmaW5lIFMzQzI0NDBfR1BKOV9JTlAgICAgICAgICgweDAwIDw8IDE4KQorI2RlZmluZSBTM0MyNDQwX0dQSjlfT1VUUCAgICAgICAoMHgwMSA8PCAxOCkKKyNkZWZpbmUgUzNDMjQ0MF9HUEo5X0NBTVZTWU5DICAgKDB4MDIgPDwgMTgpCisKKyNkZWZpbmUgUzNDMjQ0MF9HUEoxMCAgICAgICAgICAgUzNDMjQxMF9HUElPTk8oUzNDMjQ0MF9HUElPX0JBTktKLCAxMCkKKyNkZWZpbmUgUzNDMjQ0MF9HUEoxMF9JTlAgICAgICAgKDB4MDAgPDwgMjApCisjZGVmaW5lIFMzQzI0NDBfR1BKMTBfT1VUUCAgICAgICgweDAxIDw8IDIwKQorI2RlZmluZSBTM0MyNDQwX0dQSjEwX0NBTUhSRUYgICAoMHgwMiA8PCAyMCkKKworI2RlZmluZSBTM0MyNDQwX0dQSjExICAgICAgICAgICBTM0MyNDEwX0dQSU9OTyhTM0MyNDQwX0dQSU9fQkFOS0osIDExKQorI2RlZmluZSBTM0MyNDQwX0dQSjExX0lOUCAgICAgICAoMHgwMCA8PCAyMikKKyNkZWZpbmUgUzNDMjQ0MF9HUEoxMV9PVVRQICAgICAgKDB4MDEgPDwgMjIpCisjZGVmaW5lIFMzQzI0NDBfR1BKMTFfQ0FNQ0xLT1VUICgweDAyIDw8IDIyKQorCisjZGVmaW5lIFMzQzI0NDBfR1BKMTIgICAgICAgICAgIFMzQzI0MTBfR1BJT05PKFMzQzI0NDBfR1BJT19CQU5LSiwgMTIpCisjZGVmaW5lIFMzQzI0NDBfR1BKMTJfSU5QICAgICAgICgweDAwIDw8IDI0KQorI2RlZmluZSBTM0MyNDQwX0dQSjEyX09VVFAgICAgICAoMHgwMSA8PCAyNCkKKyNkZWZpbmUgUzNDMjQ0MF9HUEoxMl9DQU1SRVNFVCAgKDB4MDIgPDwgMjQpCisKKyNlbmRpZgkvKiBfX0FTTV9BUkNIX1JFR1NfR1BJT0pfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3MtaWljLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3MtaWljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVkMzI4OAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1paWMuaApAQCAtMCwwICsxLDYwIEBACisvKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3MtaWljLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgU2ltdGVjIEVsZWN0cm9uaWNzIDxsaW51eEBzaW10ZWMuY28udWs+CisgKgkJaHR0cDovL3d3dy5zaW10ZWMuY28udWsvcHJvZHVjdHMvU1dMSU5VWC8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFMzQzI0MTAgSTJDIENvbnRyb2xsZXIKKyAqCisgKiAgQ2hhbmdlbG9nOgorICoJMDMtT2N0LTIwMDQgIEJKRCAgSW5pdGlhbCBpbmNsdWRlIGZvciBMaW51eAorICoJMDgtTm92LTIwMDQgIEJKRCAgQWRkZWQgUzNDMjQ0MCBmaWx0ZXIgcmVnaXN0ZXIKKyovCisKKyNpZm5kZWYgX19BU01fQVJDSF9SRUdTX0lJQ19ICisjZGVmaW5lIF9fQVNNX0FSQ0hfUkVHU19JSUNfSCBfX0ZJTEVfXworCisvKiBzZWUgczNjMjQxMHggdXNlciBndWlkZSwgdjEuMSwgc2VjdGlvbiA5IChwNDQ3KSBmb3IgbW9yZSBpbmZvICovCisKKyNkZWZpbmUgUzNDMjQxMF9JSUNSRUcoeCkgKHgpCisKKyNkZWZpbmUgUzNDMjQxMF9JSUNDT04gICAgUzNDMjQxMF9JSUNSRUcoMHgwMCkKKyNkZWZpbmUgUzNDMjQxMF9JSUNTVEFUICAgUzNDMjQxMF9JSUNSRUcoMHgwNCkKKyNkZWZpbmUgUzNDMjQxMF9JSUNBREQgICAgUzNDMjQxMF9JSUNSRUcoMHgwOCkKKyNkZWZpbmUgUzNDMjQxMF9JSUNEUyAgICAgUzNDMjQxMF9JSUNSRUcoMHgwQykKKyNkZWZpbmUgUzNDMjQ0MF9JSUNMQwkgIFMzQzI0MTBfSUlDUkVHKDB4MTApCisKKyNkZWZpbmUgUzNDMjQxMF9JSUNDT05fQUNLRU4JCSgxPDw3KQorI2RlZmluZSBTM0MyNDEwX0lJQ0NPTl9UWERJVl8xNgkJKDA8PDYpCisjZGVmaW5lIFMzQzI0MTBfSUlDQ09OX1RYRElWXzUxMgkoMTw8NikKKyNkZWZpbmUgUzNDMjQxMF9JSUNDT05fSVJRRU4JCSgxPDw1KQorI2RlZmluZSBTM0MyNDEwX0lJQ0NPTl9JUlFQRU5ECQkoMTw8NCkKKyNkZWZpbmUgUzNDMjQxMF9JSUNDT05fU0NBTEUoeCkJCSgoeCkmMTUpCisjZGVmaW5lIFMzQzI0MTBfSUlDQ09OX1NDQUxFTUFTSwkoMHhmKQorCisjZGVmaW5lIFMzQzI0MTBfSUlDU1RBVF9NQVNURVJfUlgJKDI8PDYpCisjZGVmaW5lIFMzQzI0MTBfSUlDU1RBVF9NQVNURVJfVFgJKDM8PDYpCisjZGVmaW5lIFMzQzI0MTBfSUlDU1RBVF9TTEFWRV9SWAkoMDw8NikKKyNkZWZpbmUgUzNDMjQxMF9JSUNTVEFUX1NMQVZFX1RYCSgxPDw2KQorI2RlZmluZSBTM0MyNDEwX0lJQ1NUQVRfTU9ERU1BU0sJKDM8PDYpCisKKyNkZWZpbmUgUzNDMjQxMF9JSUNTVEFUX1NUQVJUCQkoMTw8NSkKKyNkZWZpbmUgUzNDMjQxMF9JSUNTVEFUX0JVU0JVU1kJCSgxPDw1KQorI2RlZmluZSBTM0MyNDEwX0lJQ1NUQVRfVFhSWEVOCQkoMTw8NCkKKyNkZWZpbmUgUzNDMjQxMF9JSUNTVEFUX0FSQklUUgkJKDE8PDMpCisjZGVmaW5lIFMzQzI0MTBfSUlDU1RBVF9BU1NMQVZFCQkoMTw8MikKKyNkZWZpbmUgUzNDMjQxMF9JSUNTVEFUX0FERFIwCQkoMTw8MSkKKyNkZWZpbmUgUzNDMjQxMF9JSUNTVEFUX0xBU1RCSVQJCSgxPDwwKQorCisjZGVmaW5lIFMzQzI0MTBfSUlDTENfU0RBX0RFTEFZMAkoMCA8PCAwKQorI2RlZmluZSBTM0MyNDEwX0lJQ0xDX1NEQV9ERUxBWTUJKDEgPDwgMCkKKyNkZWZpbmUgUzNDMjQxMF9JSUNMQ19TREFfREVMQVkxMAkoMiA8PCAwKQorI2RlZmluZSBTM0MyNDEwX0lJQ0xDX1NEQV9ERUxBWTE1CSgzIDw8IDApCisjZGVmaW5lIFMzQzI0MTBfSUlDTENfU0RBX0RFTEFZX01BU0sJKDMgPDwgMCkKKworI2RlZmluZSBTM0MyNDEwX0lJQ0xDX0ZJTFRFUl9PTgkJKDE8PDIpCisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX1JFR1NfSUlDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1paXMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1paXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWU4ZTFmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLWlpcy5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qIGxpbnV4L2luY2x1ZGUvYXNtL2FyY2gtczNjMjQxMC9yZWdzLWlpcy5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAzIFNpbXRlYyBFbGVjdHJvbmljcyA8bGludXhAc2ltdGVjLmNvLnVrPgorICoJCSAgICAgIGh0dHA6Ly93d3cuc2ltdGVjLmNvLnVrL3Byb2R1Y3RzL1NXTElOVVgvCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBTM0MyNDEwIElJUyByZWdpc3RlciBkZWZpbml0aW9uCisgKgorICogIENoYW5nZWxvZzoKKyAqICAgIDE5LTA2LTIwMDMgICAgIEJKRCAgICAgQ3JlYXRlZCBmaWxlCisgKiAgICAyNi0wNi0yMDAzICAgICBCSkQgICAgIEZpbmlzaGVkIG9mZiBkZWZpbml0aW9ucyBmb3IgcmVnaXN0ZXIgYWRkcmVzc2VzCisgKiAgICAxMi0wMy0yMDA0ICAgICBCSkQgICAgIFVwZGF0ZWQgaW5jbHVkZSBwcm90ZWN0aW9uCisgKiAgICAwNy0wMy0yMDA1ICAgICBCSkQgICAgIEFkZGVkIEZJRk8gc2l6ZSBmbGFncyBhbmQgUzNDMjQ0MCBNUExMCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX1JFR1NfSUlTX0gKKyNkZWZpbmUgX19BU01fQVJDSF9SRUdTX0lJU19ICisKKyNkZWZpbmUgUzNDMjQxMF9JSVNDT04JICgweDAwKQorCisjZGVmaW5lIFMzQzI0NDBfSUlTQ09OX01QTEwJICAoMTw8OSkKKyNkZWZpbmUgUzNDMjQxMF9JSVNDT05fTFJJTkRFWAkgICgxPDw4KQorI2RlZmluZSBTM0MyNDEwX0lJU0NPTl9UWEZJRk9SRFkgICgxPDw3KQorI2RlZmluZSBTM0MyNDEwX0lJU0NPTl9SWEZJRk9SRFkgICgxPDw2KQorI2RlZmluZSBTM0MyNDEwX0lJU0NPTl9UWERNQUVOCSAgKDE8PDUpCisjZGVmaW5lIFMzQzI0MTBfSUlTQ09OX1JYRE1BRU4JICAoMTw8NCkKKyNkZWZpbmUgUzNDMjQxMF9JSVNDT05fVFhJRExFCSAgKDE8PDMpCisjZGVmaW5lIFMzQzI0MTBfSUlTQ09OX1JYSURMRQkgICgxPDwyKQorI2RlZmluZSBTM0MyNDEwX0lJU0NPTl9JSVNFTgkgICgxPDwwKQorCisjZGVmaW5lIFMzQzI0MTBfSUlTTU9ECSAoMHgwNCkKKworI2RlZmluZSBTM0MyNDEwX0lJU01PRF9TTEFWRQkgICgxPDw4KQorI2RlZmluZSBTM0MyNDEwX0lJU01PRF9OT1hGRVIJICAoMDw8NikKKyNkZWZpbmUgUzNDMjQxMF9JSVNNT0RfUlhNT0RFCSAgKDE8PDYpCisjZGVmaW5lIFMzQzI0MTBfSUlTTU9EX1RYTU9ERQkgICgyPDw2KQorI2RlZmluZSBTM0MyNDEwX0lJU01PRF9UWFJYTU9ERQkgICgzPDw2KQorI2RlZmluZSBTM0MyNDEwX0lJU01PRF9MUl9MTE9XCSAgKDA8PDUpCisjZGVmaW5lIFMzQzI0MTBfSUlTTU9EX0xSX1JMT1cJICAoMTw8NSkKKyNkZWZpbmUgUzNDMjQxMF9JSVNNT0RfSUlTCSAgKDA8PDQpCisjZGVmaW5lIFMzQzI0MTBfSUlTTU9EX01TQgkgICgxPDw0KQorI2RlZmluZSBTM0MyNDEwX0lJU01PRF84QklUCSAgKDA8PDMpCisjZGVmaW5lIFMzQzI0MTBfSUlTTU9EXzE2QklUCSAgKDE8PDMpCisjZGVmaW5lIFMzQzI0MTBfSUlTTU9EX0JJVE1BU0sJICAoMTw8MykKKyNkZWZpbmUgUzNDMjQxMF9JSVNNT0RfMjU2RlMJICAoMDw8MSkKKyNkZWZpbmUgUzNDMjQxMF9JSVNNT0RfMzg0RlMJICAoMTw8MSkKKyNkZWZpbmUgUzNDMjQxMF9JSVNNT0RfMTZGUwkgICgwPDwwKQorI2RlZmluZSBTM0MyNDEwX0lJU01PRF8zMkZTCSAgKDE8PDApCisjZGVmaW5lIFMzQzI0MTBfSUlTTU9EXzQ4RlMJICAoMjw8MCkKKworI2RlZmluZSBTM0MyNDEwX0lJU1BTUgkJKDB4MDgpCisjZGVmaW5lIFMzQzI0MTBfSUlTUFNSX0lOVE1BU0sJKDMxPDw1KQorI2RlZmluZSBTM0MyNDEwX0lJU1BTUl9JTlRTSElGVAkoNSkKKyNkZWZpbmUgUzNDMjQxMF9JSVNQU1JfRVhUTUFTSwkoMzE8PDApCisjZGVmaW5lIFMzQzI0MTBfSUlTUFNSX0VYVFNIRklUCSgwKQorCisjZGVmaW5lIFMzQzI0MTBfSUlTRkNPTiAgKDB4MGMpCisKKyNkZWZpbmUgUzNDMjQxMF9JSVNGQ09OX1RYRE1BCSAgKDE8PDE1KQorI2RlZmluZSBTM0MyNDEwX0lJU0ZDT05fUlhETUEJICAoMTw8MTQpCisjZGVmaW5lIFMzQzI0MTBfSUlTRkNPTl9UWEVOQUJMRSAgKDE8PDEzKQorI2RlZmluZSBTM0MyNDEwX0lJU0ZDT05fUlhFTkFCTEUgICgxPDwxMikKKyNkZWZpbmUgUzNDMjQxMF9JSVNGQ09OX1RYTUFTSwkgICgweDNmIDw8IDYpCisjZGVmaW5lIFMzQzI0MTBfSUlTRkNPTl9UWFNISUZUCSAgKDYpCisjZGVmaW5lIFMzQzI0MTBfSUlTRkNPTl9SWE1BU0sJICAoMHgzZikKKyNkZWZpbmUgUzNDMjQxMF9JSVNGQ09OX1JYU0hJRlQJICAoMCkKKworI2RlZmluZSBTM0MyNDEwX0lJU0ZJRk8gICgweDEwKQorI2VuZGlmIC8qIF9fQVNNX0FSQ0hfUkVHU19JSVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLWlycS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLWlycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0YjcyOTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3MtaXJxLmgKQEAgLTAsMCArMSw0NCBAQAorLyogbGludXgvaW5jbHVkZS9hc20vYXJjaC1zM2MyNDEwL3JlZ3MtaXJxLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMgU2ltdGVjIEVsZWN0cm9uaWNzIDxsaW51eEBzaW10ZWMuY28udWs+CisgKgkJICAgICAgaHR0cDovL3d3dy5zaW10ZWMuY28udWsvcHJvZHVjdHMvU1dMSU5VWC8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqCisgKgorICogIENoYW5nZWxvZzoKKyAqICAgIDE5LTA2LTIwMDMgICAgIEJKRCAgICAgQ3JlYXRlZCBmaWxlCisgKiAgICAxMi0wMy0yMDA0ICAgICBCSkQgICAgIFVwZGF0ZWQgaW5jbHVkZSBwcm90ZWN0aW9uCisgKiAgICAxMC0wMy0yMDA1ICAgICBMQ1ZSICAgIENoYW5nZWQgUzNDMjQxMF9WQSB0byBTM0MyNFhYX1ZBCisgKi8KKworCisjaWZuZGVmIF9fX0FTTV9BUkNIX1JFR1NfSVJRX0gKKyNkZWZpbmUgX19fQVNNX0FSQ0hfUkVHU19JUlFfSCAiJElkOiBpcnEuaCx2IDEuMyAyMDAzLzAzLzI1IDIxOjI5OjA2IGJlbiBFeHAgJCIKKworLyogaW50ZXJydXB0IGNvbnRyb2xsZXIgKi8KKworI2RlZmluZSBTM0MyNDEwX0lSUVJFRyh4KSAgICgoeCkgKyBTM0MyNFhYX1ZBX0lSUSkKKyNkZWZpbmUgUzNDMjQxMF9FSU5UUkVHKHgpICAoKHgpICsgUzNDMjRYWF9WQV9HUElPKQorCisjZGVmaW5lIFMzQzI0MTBfU1JDUE5ECSAgICAgICBTM0MyNDEwX0lSUVJFRygweDAwMCkKKyNkZWZpbmUgUzNDMjQxMF9JTlRNT0QJICAgICAgIFMzQzI0MTBfSVJRUkVHKDB4MDA0KQorI2RlZmluZSBTM0MyNDEwX0lOVE1TSwkgICAgICAgUzNDMjQxMF9JUlFSRUcoMHgwMDgpCisjZGVmaW5lIFMzQzI0MTBfUFJJT1JJVFkgICAgICAgUzNDMjQxMF9JUlFSRUcoMHgwMEMpCisjZGVmaW5lIFMzQzI0MTBfSU5UUE5ECSAgICAgICBTM0MyNDEwX0lSUVJFRygweDAxMCkKKyNkZWZpbmUgUzNDMjQxMF9JTlRPRkZTRVQgICAgICBTM0MyNDEwX0lSUVJFRygweDAxNCkKKyNkZWZpbmUgUzNDMjQxMF9TVUJTUkNQTkQgICAgICBTM0MyNDEwX0lSUVJFRygweDAxOCkKKyNkZWZpbmUgUzNDMjQxMF9JTlRTVUJNU0sgICAgICBTM0MyNDEwX0lSUVJFRygweDAxQykKKworLyogbWFzazogMD1lbmFibGUsIDE9ZGlzYWJsZQorICogMSBiaXQgRUlOVCwgND1FSU5UNCwgMjM9RUlOVDIzCisgKiBFSU5UMCwxLDIsMyBhcmUgbm90IGhhbmRsZWQgaGVyZS4KKyovCisKKyNkZWZpbmUgUzNDMjQxMF9FSU5UTUFTSyAgICAgICBTM0MyNDEwX0VJTlRSRUcoMHgwQTQpCisjZGVmaW5lIFMzQzI0MTBfRUlOVFBFTkQgICAgICAgUzNDMjQxMF9FSU5UUkVHKDBYMEE4KQorCisjZW5kaWYgLyogX19fQVNNX0FSQ0hfUkVHU19JUlFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLWxjZC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLWxjZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmODgyZWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3MtbGNkLmgKQEAgLTAsMCArMSwxMTQgQEAKKy8qIGxpbnV4L2luY2x1ZGUvYXNtL2FyY2gtczNjMjQxMC9yZWdzLWxjZC5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAzIFNpbXRlYyBFbGVjdHJvbmljcyA8bGludXhAc2ltdGVjLmNvLnVrPgorICoJCSAgICAgIGh0dHA6Ly93d3cuc2ltdGVjLmNvLnVrL3Byb2R1Y3RzL1NXTElOVVgvCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKgorICoKKyAqICBDaGFuZ2Vsb2c6CisgKiAgICAxMi0wNi0yMDAzICAgICBCSkQgICAgIENyZWF0ZWQgZmlsZQorICogICAgMjYtMDYtMjAwMyAgICAgQkpEICAgICBVcGRhdGVkIExDRENPTiByZWdpc3RlciBkZWZpbml0aW9ucworICogICAgMTItMDMtMjAwNCAgICAgQkpEICAgICBVcGRhdGVkIGluY2x1ZGUgcHJvdGVjdGlvbgorICogICAgMTAtMDMtMjAwNSAgICAgTENWUiAgICBDaGFuZ2VkIFMzQzI0MTBfVkEgdG8gUzNDMjRYWF9WQQorKi8KKworCisjaWZuZGVmIF9fX0FTTV9BUkNIX1JFR1NfTENEX0gKKyNkZWZpbmUgX19fQVNNX0FSQ0hfUkVHU19MQ0RfSCAiJElkOiBsY2QuaCx2IDEuMyAyMDAzLzA2LzI2IDEzOjI1OjA2IGJlbiBFeHAgJCIKKworI2RlZmluZSBTM0MyNDEwX0xDRFJFRyh4KSAoKHgpICsgUzNDMjRYWF9WQV9MQ0QpCisKKy8qIExDRCBjb250cm9sIHJlZ2lzdGVycyAqLworI2RlZmluZSBTM0MyNDEwX0xDRENPTjEJICAgIFMzQzI0MTBfTENEUkVHKDB4MDApCisjZGVmaW5lIFMzQzI0MTBfTENEQ09OMgkgICAgUzNDMjQxMF9MQ0RSRUcoMHgwNCkKKyNkZWZpbmUgUzNDMjQxMF9MQ0RDT04zCSAgICBTM0MyNDEwX0xDRFJFRygweDA4KQorI2RlZmluZSBTM0MyNDEwX0xDRENPTjQJICAgIFMzQzI0MTBfTENEUkVHKDB4MEMpCisjZGVmaW5lIFMzQzI0MTBfTENEQ09ONQkgICAgUzNDMjQxMF9MQ0RSRUcoMHgxMCkKKworI2RlZmluZSBTM0MyNDEwX0xDRENPTjFfQ0xLVkFMKHgpICAoKHgpIDw8IDgpCisjZGVmaW5lIFMzQzI0MTBfTENEQ09OMV9NTU9ERQkgICAoMTw8NykKKyNkZWZpbmUgUzNDMjQxMF9MQ0RDT04xX0RTQ0FONAkgICAoMDw8NSkKKyNkZWZpbmUgUzNDMjQxMF9MQ0RDT04xX1NUTjQJICAgKDE8PDUpCisjZGVmaW5lIFMzQzI0MTBfTENEQ09OMV9TVE44CSAgICgyPDw1KQorI2RlZmluZSBTM0MyNDEwX0xDRENPTjFfVEZUCSAgICgzPDw1KQorCisjZGVmaW5lIFMzQzI0MTBfTENEQ09OMV9TVE4xQlBQCSAgICgwPDwxKQorI2RlZmluZSBTM0MyNDEwX0xDRENPTjFfU1ROMkdSRVkgICAoMTw8MSkKKyNkZWZpbmUgUzNDMjQxMF9MQ0RDT04xX1NUTjRHUkVZICAgKDI8PDEpCisjZGVmaW5lIFMzQzI0MTBfTENEQ09OMV9TVE44QlBQCSAgICgzPDwxKQorI2RlZmluZSBTM0MyNDEwX0xDRENPTjFfU1ROMTJCUFAgICAoNDw8MSkKKworI2RlZmluZSBTM0MyNDEwX0xDRENPTjFfVEZUMUJQUAkgICAoODw8MSkKKyNkZWZpbmUgUzNDMjQxMF9MQ0RDT04xX1RGVDJCUFAJICAgKDk8PDEpCisjZGVmaW5lIFMzQzI0MTBfTENEQ09OMV9URlQ0QlBQCSAgICgxMDw8MSkKKyNkZWZpbmUgUzNDMjQxMF9MQ0RDT04xX1RGVDhCUFAJICAgKDExPDwxKQorI2RlZmluZSBTM0MyNDEwX0xDRENPTjFfVEZUMTZCUFAgICAoMTI8PDEpCisjZGVmaW5lIFMzQzI0MTBfTENEQ09OMV9URlQyNEJQUCAgICgxMzw8MSkKKworI2RlZmluZSBTM0MyNDEwX0xDRENPTjFfRU5WSUQJICAgKDEpCisKKyNkZWZpbmUgUzNDMjQxMF9MQ0RDT04yX1ZCUEQoeCkJICAgICgoeCkgPDwgMjQpCisjZGVmaW5lIFMzQzI0MTBfTENEQ09OMl9MSU5FVkFMKHgpICAoKHgpIDw8IDE0KQorI2RlZmluZSBTM0MyNDEwX0xDRENPTjJfVkZQRCh4KQkgICAgKCh4KSA8PCA2KQorI2RlZmluZSBTM0MyNDEwX0xDRENPTjJfVlNQVyh4KQkgICAgKCh4KSA8PCAwKQorCisjZGVmaW5lIFMzQzI0MTBfTENEQ09OM19IQlBEKHgpCSAgICAoKHgpIDw8IDE5KQorI2RlZmluZSBTM0MyNDEwX0xDRENPTjNfV0RMWSh4KQkgICAgKCh4KSA8PCAxOSkKKyNkZWZpbmUgUzNDMjQxMF9MQ0RDT04zX0hPWlZBTCh4KSAgICgoeCkgPDwgOCkKKyNkZWZpbmUgUzNDMjQxMF9MQ0RDT04zX0hGUEQoeCkJICAgICgoeCkgPDwgMCkKKyNkZWZpbmUgUzNDMjQxMF9MQ0RDT04zX0xJTkVCTEFOSyh4KSgoeCkgPDwgMCkKKworI2RlZmluZSBTM0MyNDEwX0xDRENPTjRfTVZBTCh4KQkgICAgKCh4KSA8PCA4KQorI2RlZmluZSBTM0MyNDEwX0xDRENPTjRfSFNQVyh4KQkgICAgKCh4KSA8PCAwKQorI2RlZmluZSBTM0MyNDEwX0xDRENPTjRfV0xIKHgpCSAgICAoKHgpIDw8IDApCisKKyNkZWZpbmUgUzNDMjQxMF9MQ0RDT041X0JQUDI0QkwJICAgICgxPDwxMikKKyNkZWZpbmUgUzNDMjQxMF9MQ0RDT041X0ZSTTU2NQkgICAgKDE8PDExKQorI2RlZmluZSBTM0MyNDEwX0xDRENPTjVfSU5WVkNMSwkgICAgKDE8PDEwKQorI2RlZmluZSBTM0MyNDEwX0xDRENPTjVfSU5WVkxJTkUgICAgKDE8PDkpCisjZGVmaW5lIFMzQzI0MTBfTENEQ09ONV9JTlZWRlJBTUUgICAoMTw8OCkKKyNkZWZpbmUgUzNDMjQxMF9MQ0RDT041X0lOVlZECSAgICAoMTw8NykKKyNkZWZpbmUgUzNDMjQxMF9MQ0RDT041X0lOVlZERU4JICAgICgxPDw2KQorI2RlZmluZSBTM0MyNDEwX0xDRENPTjVfSU5WUFdSRU4gICAgKDE8PDUpCisjZGVmaW5lIFMzQzI0MTBfTENEQ09ONV9JTlZMRU5ECSAgICAoMTw8NCkKKyNkZWZpbmUgUzNDMjQxMF9MQ0RDT041X1BXUkVOCSAgICAoMTw8MykKKyNkZWZpbmUgUzNDMjQxMF9MQ0RDT041X0VOTEVORAkgICAgKDE8PDIpCisjZGVmaW5lIFMzQzI0MTBfTENEQ09ONV9CU1dQCSAgICAoMTw8MSkKKyNkZWZpbmUgUzNDMjQxMF9MQ0RDT041X0hXU1dQCSAgICAoMTw8MCkKKworLyogZnJhbWVidWZmZXIgc3RhcnQgYWRkcmVzc2VkICovCisjZGVmaW5lIFMzQzI0MTBfTENEU0FERFIxICAgUzNDMjQxMF9MQ0RSRUcoMHgxNCkKKyNkZWZpbmUgUzNDMjQxMF9MQ0RTQUREUjIgICBTM0MyNDEwX0xDRFJFRygweDE4KQorI2RlZmluZSBTM0MyNDEwX0xDRFNBRERSMyAgIFMzQzI0MTBfTENEUkVHKDB4MUMpCisKKyNkZWZpbmUgUzNDMjQxMF9MQ0RCQU5LKHgpCSgoeCkgPDwgMjEpCisjZGVmaW5lIFMzQzI0MTBfTENEQkFTRVUoeCkJKHgpCisKKyNkZWZpbmUgUzNDMjQxMF9PRkZTSVpFKHgpCSgoeCkgPDwgMTEpCisjZGVmaW5lIFMzQzI0MTBfUEFHRVdJRFRIKHgpCSh4KQorCisvKiBjb2xvdXIgbG9va3VwIGFuZCBtaXNjZWxsYW5lb3VzIGNvbnRyb2xzICovCisKKyNkZWZpbmUgUzNDMjQxMF9SRURMVVQJICAgUzNDMjQxMF9MQ0RSRUcoMHgyMCkKKyNkZWZpbmUgUzNDMjQxMF9HUkVFTkxVVCAgIFMzQzI0MTBfTENEUkVHKDB4MjQpCisjZGVmaW5lIFMzQzI0MTBfQkxVRUxVVAkgICBTM0MyNDEwX0xDRFJFRygweDI4KQorCisjZGVmaW5lIFMzQzI0MTBfRElUSE1PREUgICBTM0MyNDEwX0xDRFJFRygweDRDKQorI2RlZmluZSBTM0MyNDEwX1RQQUwJICAgUzNDMjQxMF9MQ0RSRUcoMHg1MCkKKworLyogaW50ZXJydXB0IGluZm8gKi8KKyNkZWZpbmUgUzNDMjQxMF9MQ0RJTlRQTkQgIFMzQzI0MTBfTENEUkVHKDB4NTQpCisjZGVmaW5lIFMzQzI0MTBfTENEU1JDUE5EICBTM0MyNDEwX0xDRFJFRygweDU4KQorI2RlZmluZSBTM0MyNDEwX0xDRElOVE1TSyAgUzNDMjQxMF9MQ0RSRUcoMHg1QykKKyNkZWZpbmUgUzNDMjQxMF9MUENTRUwJICAgUzNDMjQxMF9MQ0RSRUcoMHg2MCkKKworI2RlZmluZSBTM0MyNDEwX1RGVFBBTCh4KSAgUzNDMjQxMF9MQ0RSRUcoKDB4NDAwICsgKHgpKjQpKQorCisjZW5kaWYgLyogX19fQVNNX0FSQ0hfUkVHU19MQ0RfSCAqLworCisKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLW1lbS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLW1lbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMTMyOGEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3MtbWVtLmgKQEAgLTAsMCArMSwyMTIgQEAKKy8qIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1tZW0uaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNCBTaW10ZWMgRWxlY3Ryb25pY3MgPGxpbnV4QHNpbXRlYy5jby51az4KKyAqCQlodHRwOi8vd3d3LnNpbXRlYy5jby51ay9wcm9kdWN0cy9TV0xJTlVYLworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogUzNDMjQxMCBNZW1vcnkgQ29udHJvbCByZWdpc3RlciBkZWZpbml0aW9ucworICoKKyAqICBDaGFuZ2Vsb2c6CisgKgkyOS1TZXAtMjAwNCAgQkpEICBJbml0aWFsIGluY2x1ZGUgZm9yIExpbnV4CisgKiAgICAgIDEwLU1hci0yMDA1ICBMQ1ZSIENoYW5nZWQgUzNDMjQxMF9WQSB0byBTM0MyNFhYX1ZBCisgKgorKi8KKworI2lmbmRlZiBfX0FTTV9BUk1fTUVNUkVHU19ICisjZGVmaW5lIF9fQVNNX0FSTV9NRU1SRUdTX0ggIiRJZDogcmVncy5oLHYgMS44IDIwMDMvMDUvMDEgMTU6NTU6NDEgYmVuIEV4cCAkIgorCisjaWZuZGVmIFMzQzI0MTBfTUVNUkVHCisjZGVmaW5lIFMzQzI0MTBfTUVNUkVHKHgpIChTM0MyNFhYX1ZBX01FTUNUUkwgKyAoeCkpCisjZW5kaWYKKworLyogYnVzIHdpZHRoLCBhbmQgd2FpdCBzdGF0ZSBjb250cm9sICovCisjZGVmaW5lIFMzQzI0MTBfQldTQ09OCQkJUzNDMjQxMF9NRU1SRUcoMHgwMDAwKQorCisvKiBiYW5rIHplcm8gY29uZmlnIC0gbm90ZSwgcGluc3RyYXBwZWQgZnJvbSBPTSBwaW5zISAqLworI2RlZmluZSBTM0MyNDEwX0JXU0NPTl9EVzBfMTYJCSgxPDwxKQorI2RlZmluZSBTM0MyNDEwX0JXU0NPTl9EVzBfMzIJCSgyPDwxKQorCisvKiBiYW5rIG9uZSBjb25maWdzICovCisjZGVmaW5lIFMzQzI0MTBfQldTQ09OX0RXMV84CQkoMDw8NCkKKyNkZWZpbmUgUzNDMjQxMF9CV1NDT05fRFcxXzE2CQkoMTw8NCkKKyNkZWZpbmUgUzNDMjQxMF9CV1NDT05fRFcxXzMyCQkoMjw8NCkKKyNkZWZpbmUgUzNDMjQxMF9CV1NDT05fV1MxCQkoMTw8NikKKyNkZWZpbmUgUzNDMjQxMF9CV1NDT05fU1QxCQkoMTw8NykKKworLyogYmFuayAyIGNvbmZpZ3VyYXRpb25zICovCisjZGVmaW5lIFMzQzI0MTBfQldTQ09OX0RXMl84CQkoMDw8OCkKKyNkZWZpbmUgUzNDMjQxMF9CV1NDT05fRFcyXzE2CQkoMTw8OCkKKyNkZWZpbmUgUzNDMjQxMF9CV1NDT05fRFcyXzMyCQkoMjw8OCkKKyNkZWZpbmUgUzNDMjQxMF9CV1NDT05fV1MyCQkoMTw8MTApCisjZGVmaW5lIFMzQzI0MTBfQldTQ09OX1NUMgkJKDE8PDExKQorCisvKiBiYW5rIDMgY29uZmlndXJhdGlvbnMgKi8KKyNkZWZpbmUgUzNDMjQxMF9CV1NDT05fRFczXzgJCSgwPDwxMikKKyNkZWZpbmUgUzNDMjQxMF9CV1NDT05fRFczXzE2CQkoMTw8MTIpCisjZGVmaW5lIFMzQzI0MTBfQldTQ09OX0RXM18zMgkJKDI8PDEyKQorI2RlZmluZSBTM0MyNDEwX0JXU0NPTl9XUzMJCSgxPDwxNCkKKyNkZWZpbmUgUzNDMjQxMF9CV1NDT05fU1QzCQkoMTw8MTUpCisKKy8qIGJhbmsgNCBjb25maWd1cmF0aW9ucyAqLworI2RlZmluZSBTM0MyNDEwX0JXU0NPTl9EVzRfOAkJKDA8PDE2KQorI2RlZmluZSBTM0MyNDEwX0JXU0NPTl9EVzRfMTYJCSgxPDwxNikKKyNkZWZpbmUgUzNDMjQxMF9CV1NDT05fRFc0XzMyCQkoMjw8MTYpCisjZGVmaW5lIFMzQzI0MTBfQldTQ09OX1dTNAkJKDE8PDE4KQorI2RlZmluZSBTM0MyNDEwX0JXU0NPTl9TVDQJCSgxPDwxOSkKKworLyogYmFuayA1IGNvbmZpZ3VyYXRpb25zICovCisjZGVmaW5lIFMzQzI0MTBfQldTQ09OX0RXNV84CQkoMDw8MjApCisjZGVmaW5lIFMzQzI0MTBfQldTQ09OX0RXNV8xNgkJKDE8PDIwKQorI2RlZmluZSBTM0MyNDEwX0JXU0NPTl9EVzVfMzIJCSgyPDwyMCkKKyNkZWZpbmUgUzNDMjQxMF9CV1NDT05fV1M1CQkoMTw8MjIpCisjZGVmaW5lIFMzQzI0MTBfQldTQ09OX1NUNQkJKDE8PDIzKQorCisvKiBiYW5rIDYgY29uZmlndXJhdGlvbnMgKi8KKyNkZWZpbmUgUzNDMjQxMF9CV1NDT05fRFc2XzgJCSgwPDwyNCkKKyNkZWZpbmUgUzNDMjQxMF9CV1NDT05fRFc2XzE2CQkoMTw8MjQpCisjZGVmaW5lIFMzQzI0MTBfQldTQ09OX0RXNl8zMgkJKDI8PDI0KQorI2RlZmluZSBTM0MyNDEwX0JXU0NPTl9XUzYJCSgxPDwyNikKKyNkZWZpbmUgUzNDMjQxMF9CV1NDT05fU1Q2CQkoMTw8MjcpCisKKy8qIGJhbmsgNyBjb25maWd1cmF0aW9ucyAqLworI2RlZmluZSBTM0MyNDEwX0JXU0NPTl9EVzdfOAkJKDA8PDI4KQorI2RlZmluZSBTM0MyNDEwX0JXU0NPTl9EVzdfMTYJCSgxPDwyOCkKKyNkZWZpbmUgUzNDMjQxMF9CV1NDT05fRFc3XzMyCQkoMjw8MjgpCisjZGVmaW5lIFMzQzI0MTBfQldTQ09OX1dTNwkJKDE8PDMwKQorI2RlZmluZSBTM0MyNDEwX0JXU0NPTl9TVDcJCSgxPDwzMSkKKworLyogbWVtb3J5IHNldCAocm9tLCByYW0pICovCisjZGVmaW5lIFMzQzI0MTBfQkFOS0NPTjAJCVMzQzI0MTBfTUVNUkVHKDB4MDAwNCkKKyNkZWZpbmUgUzNDMjQxMF9CQU5LQ09OMQkJUzNDMjQxMF9NRU1SRUcoMHgwMDA4KQorI2RlZmluZSBTM0MyNDEwX0JBTktDT04yCQlTM0MyNDEwX01FTVJFRygweDAwMEMpCisjZGVmaW5lIFMzQzI0MTBfQkFOS0NPTjMJCVMzQzI0MTBfTUVNUkVHKDB4MDAxMCkKKyNkZWZpbmUgUzNDMjQxMF9CQU5LQ09ONAkJUzNDMjQxMF9NRU1SRUcoMHgwMDE0KQorI2RlZmluZSBTM0MyNDEwX0JBTktDT041CQlTM0MyNDEwX01FTVJFRygweDAwMTgpCisjZGVmaW5lIFMzQzI0MTBfQkFOS0NPTjYJCVMzQzI0MTBfTUVNUkVHKDB4MDAxQykKKyNkZWZpbmUgUzNDMjQxMF9CQU5LQ09ONwkJUzNDMjQxMF9NRU1SRUcoMHgwMDIwKQorCisvKiBiYW5rIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzICovCisKKyNkZWZpbmUgUzNDMjQxMF9CQU5LQ09OX1BNQ25vcm0JCSgweDAwKQorI2RlZmluZSBTM0MyNDEwX0JBTktDT05fUE1DNAkJKDB4MDEpCisjZGVmaW5lIFMzQzI0MTBfQkFOS0NPTl9QTUM4CQkoMHgwMikKKyNkZWZpbmUgUzNDMjQxMF9CQU5LQ09OX1BNQzE2CQkoMHgwMykKKworLyogYmFuayBjb25maWd1cmF0aW9ucyBmb3IgYmFua3MgMC4uNywgbm90ZSBiYW5rcworICogNiBhbmQgNyBoYXZlIGRpZmZlcm50IGNvbmZpZ3VyYXRpb25zIGRlcGVuZGluZyBvbgorICogdGhlIG1lbW9yeSB0eXBlIGJpdHMgKi8KKworI2RlZmluZSBTM0MyNDEwX0JBTktDT05fVGFjcDIJCSgweDAgPDwgMikKKyNkZWZpbmUgUzNDMjQxMF9CQU5LQ09OX1RhY3AzCQkoMHgxIDw8IDIpCisjZGVmaW5lIFMzQzI0MTBfQkFOS0NPTl9UYWNwNAkJKDB4MiA8PCAyKQorI2RlZmluZSBTM0MyNDEwX0JBTktDT05fVGFjcDYJCSgweDMgPDwgMikKKworI2RlZmluZSBTM0MyNDEwX0JBTktDT05fVGNhaDAJCSgweDAgPDwgNCkKKyNkZWZpbmUgUzNDMjQxMF9CQU5LQ09OX1RjYWgxCQkoMHgxIDw8IDQpCisjZGVmaW5lIFMzQzI0MTBfQkFOS0NPTl9UY2FoMgkJKDB4MiA8PCA0KQorI2RlZmluZSBTM0MyNDEwX0JBTktDT05fVGNhaDQJCSgweDMgPDwgNCkKKworI2RlZmluZSBTM0MyNDEwX0JBTktDT05fVGNvaDAJCSgweDAgPDwgNikKKyNkZWZpbmUgUzNDMjQxMF9CQU5LQ09OX1Rjb2gxCQkoMHgxIDw8IDYpCisjZGVmaW5lIFMzQzI0MTBfQkFOS0NPTl9UY29oMgkJKDB4MiA8PCA2KQorI2RlZmluZSBTM0MyNDEwX0JBTktDT05fVGNvaDQJCSgweDMgPDwgNikKKworI2RlZmluZSBTM0MyNDEwX0JBTktDT05fVGFjYzEJCSgweDAgPDwgOCkKKyNkZWZpbmUgUzNDMjQxMF9CQU5LQ09OX1RhY2MyCQkoMHgxIDw8IDgpCisjZGVmaW5lIFMzQzI0MTBfQkFOS0NPTl9UYWNjMwkJKDB4MiA8PCA4KQorI2RlZmluZSBTM0MyNDEwX0JBTktDT05fVGFjYzQJCSgweDMgPDwgOCkKKyNkZWZpbmUgUzNDMjQxMF9CQU5LQ09OX1RhY2M2CQkoMHg0IDw8IDgpCisjZGVmaW5lIFMzQzI0MTBfQkFOS0NPTl9UYWNjOAkJKDB4NSA8PCA4KQorI2RlZmluZSBTM0MyNDEwX0JBTktDT05fVGFjYzEwCQkoMHg2IDw8IDgpCisjZGVmaW5lIFMzQzI0MTBfQkFOS0NPTl9UYWNjMTQJCSgweDcgPDwgOCkKKworI2RlZmluZSBTM0MyNDEwX0JBTktDT05fVGNvczAJCSgweDAgPDwgMTEpCisjZGVmaW5lIFMzQzI0MTBfQkFOS0NPTl9UY29zMQkJKDB4MSA8PCAxMSkKKyNkZWZpbmUgUzNDMjQxMF9CQU5LQ09OX1Rjb3MyCQkoMHgyIDw8IDExKQorI2RlZmluZSBTM0MyNDEwX0JBTktDT05fVGNvczQJCSgweDMgPDwgMTEpCisKKyNkZWZpbmUgUzNDMjQxMF9CQU5LQ09OX1RhY3MwCQkoMHgwIDw8IDEzKQorI2RlZmluZSBTM0MyNDEwX0JBTktDT05fVGFjczEJCSgweDEgPDwgMTMpCisjZGVmaW5lIFMzQzI0MTBfQkFOS0NPTl9UYWNzMgkJKDB4MiA8PCAxMykKKyNkZWZpbmUgUzNDMjQxMF9CQU5LQ09OX1RhY3M0CQkoMHgzIDw8IDEzKQorCisjZGVmaW5lIFMzQzI0MTBfQkFOS0NPTl9TUkFNCQkoMHgwIDw8IDE1KQorI2RlZmluZSBTM0MyNDAwX0JBTktDT05fRURPRFJBTQkJKDB4MiA8PCAxNSkKKyNkZWZpbmUgUzNDMjQxMF9CQU5LQ09OX1NEUkFNCQkoMHgzIDw8IDE1KQorCisvKiBuZXh0IGJpdHMgb25seSBmb3IgRURPIERSQU0gaW4gNiw3ICovCisjZGVmaW5lIFMzQzI0MDBfQkFOS0NPTl9FRE9fVHJkYzEgICAgICAoMHgwMCA8PCA0KQorI2RlZmluZSBTM0MyNDAwX0JBTktDT05fRURPX1RyZGMyICAgICAgKDB4MDEgPDwgNCkKKyNkZWZpbmUgUzNDMjQwMF9CQU5LQ09OX0VET19UcmRjMyAgICAgICgweDAyIDw8IDQpCisjZGVmaW5lIFMzQzI0MDBfQkFOS0NPTl9FRE9fVHJkYzQgICAgICAoMHgwMyA8PCA0KQorCisvKiBDQVMgcHVsc2Ugd2lkdGggKi8KKyNkZWZpbmUgUzNDMjQwMF9CQU5LQ09OX0VET19QVUxTRTEgICAgICgweDAwIDw8IDMpCisjZGVmaW5lIFMzQzI0MDBfQkFOS0NPTl9FRE9fUFVMU0UyICAgICAoMHgwMSA8PCAzKQorCisvKiBDQVMgcHJlLWNoYXJnZSAqLworI2RlZmluZSBTM0MyNDAwX0JBTktDT05fRURPX1RDUDEgICAgICAgKDB4MDAgPDwgMikKKyNkZWZpbmUgUzNDMjQwMF9CQU5LQ09OX0VET19UQ1AyICAgICAgICgweDAxIDw8IDIpCisKKy8qIGNvbnRyb2wgY29sdW1uIGFkZHJlc3Mgc2VsZWN0ICovCisjZGVmaW5lIFMzQzI0MDBfQkFOS0NPTl9FRE9fU0NBTmI4ICAgICAoMHgwMCA8PCAwKQorI2RlZmluZSBTM0MyNDAwX0JBTktDT05fRURPX1NDQU5iOSAgICAgKDB4MDEgPDwgMCkKKyNkZWZpbmUgUzNDMjQwMF9CQU5LQ09OX0VET19TQ0FOYjEwICAgICgweDAyIDw8IDApCisjZGVmaW5lIFMzQzI0MDBfQkFOS0NPTl9FRE9fU0NBTmIxMSAgICAoMHgwMyA8PCAwKQorCisvKiBuZXh0IGJpdHMgb25seSBmb3IgU0RSQU0gaW4gNiw3ICovCisjZGVmaW5lIFMzQzI0MTBfQkFOS0NPTl9UcmRjMgkJKDB4MDAgPDwgMikKKyNkZWZpbmUgUzNDMjQxMF9CQU5LQ09OX1RyZGMzCQkoMHgwMSA8PCAyKQorI2RlZmluZSBTM0MyNDEwX0JBTktDT05fVHJkYzQJCSgweDAyIDw8IDIpCisKKy8qIGNvbnRyb2wgY29sdW1uIGFkZHJlc3Mgc2VsZWN0ICovCisjZGVmaW5lIFMzQzI0MTBfQkFOS0NPTl9TQ0FOYjgJCSgweDAwIDw8IDApCisjZGVmaW5lIFMzQzI0MTBfQkFOS0NPTl9TQ0FOYjkJCSgweDAxIDw8IDApCisjZGVmaW5lIFMzQzI0MTBfQkFOS0NPTl9TQ0FOYjEwCQkoMHgwMiA8PCAwKQorCisjZGVmaW5lIFMzQzI0MTBfUkVGUkVTSAkJCVMzQzI0MTBfTUVNUkVHKDB4MDAyNCkKKyNkZWZpbmUgUzNDMjQxMF9CQU5LU0laRQkJUzNDMjQxMF9NRU1SRUcoMHgwMDI4KQorI2RlZmluZSBTM0MyNDEwX01SU1JCNgkJCVMzQzI0MTBfTUVNUkVHKDB4MDAyQykKKyNkZWZpbmUgUzNDMjQxMF9NUlNSQjcJCQlTM0MyNDEwX01FTVJFRygweDAwMzApCisKKy8qIHJlZnJlc2ggY29udHJvbCAqLworCisjZGVmaW5lIFMzQzI0MTBfUkVGUkVTSF9SRUZFTgkJKDE8PDIzKQorI2RlZmluZSBTM0MyNDEwX1JFRlJFU0hfU0VMRgkJKDE8PDIyKQorI2RlZmluZSBTM0MyNDEwX1JFRlJFU0hfUkVGQ09VTlRFUgkoKDE8PDExKS0xKQorCisjZGVmaW5lIFMzQzI0MTBfUkVGUkVTSF9UUlBfTUFTSwkoMzw8MjApCisjZGVmaW5lIFMzQzI0MTBfUkVGUkVTSF9UUlBfMmNsawkoMDw8MjApCisjZGVmaW5lIFMzQzI0MTBfUkVGUkVTSF9UUlBfM2NsawkoMTw8MjApCisjZGVmaW5lIFMzQzI0MTBfUkVGUkVTSF9UUlBfNGNsawkoMjw8MjApCisKKyNkZWZpbmUgUzNDMjQxMF9SRUZSRVNIX1RTUkNfTUFTSwkoMzw8MTgpCisjZGVmaW5lIFMzQzI0MTBfUkVGUkVTSF9UU1JDXzRjbGsJKDA8PDE4KQorI2RlZmluZSBTM0MyNDEwX1JFRlJFU0hfVFNSQ181Y2xrCSgxPDwxOCkKKyNkZWZpbmUgUzNDMjQxMF9SRUZSRVNIX1RTUkNfNmNsawkoMjw8MTgpCisjZGVmaW5lIFMzQzI0MTBfUkVGUkVTSF9UU1JDXzdjbGsJKDM8PDE4KQorCisKKy8qIG1vZGUgc2VsZWN0IHJlZ2lzdGVyKHMpICovCisKKyNkZWZpbmUgIFMzQzI0MTBfTVJTUkJfQ0wxCQkoMHgwMCA8PCA0KQorI2RlZmluZSAgUzNDMjQxMF9NUlNSQl9DTDIJCSgweDAyIDw8IDQpCisjZGVmaW5lICBTM0MyNDEwX01SU1JCX0NMMwkJKDB4MDMgPDwgNCkKKworLyogYmFuayBzaXplIHJlZ2lzdGVyICovCisjZGVmaW5lIFMzQzI0MTBfQkFOS1NJWkVfMTI4TQkJKDB4MiA8PCAwKQorI2RlZmluZSBTM0MyNDEwX0JBTktTSVpFXzY0TQkJKDB4MSA8PCAwKQorI2RlZmluZSBTM0MyNDEwX0JBTktTSVpFXzMyTQkJKDB4MCA8PCAwKQorI2RlZmluZSBTM0MyNDEwX0JBTktTSVpFXzE2TQkJKDB4NyA8PCAwKQorI2RlZmluZSBTM0MyNDEwX0JBTktTSVpFXzhNCQkoMHg2IDw8IDApCisjZGVmaW5lIFMzQzI0MTBfQkFOS1NJWkVfNE0JCSgweDUgPDwgMCkKKyNkZWZpbmUgUzNDMjQxMF9CQU5LU0laRV8yTQkJKDB4NCA8PCAwKQorI2RlZmluZSBTM0MyNDEwX0JBTktTSVpFX01BU0sJCSgweDcgPDwgMCkKKyNkZWZpbmUgUzNDMjQxMF9CQU5LU0laRV9TQ0xLX0VOCSgxPDw0KQorI2RlZmluZSBTM0MyNDEwX0JBTktTSVpFX1NDS0VfRU4JKDE8PDUpCisjZGVmaW5lIFMzQzI0MTBfQkFOS1NJWkVfQlVSU1QJCSgxPDw3KQorCisjZW5kaWYgLyogX19BU01fQVJNX01FTVJFR1NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLW5hbmQuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1uYW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ0M2FjOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1uYW5kLmgKQEAgLTAsMCArMSw0MyBAQAorLyogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLW5hbmQuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNCBTaW10ZWMgRWxlY3Ryb25pY3MgPGxpbnV4QHNpbXRlYy5jby51az4KKyAqCQkgICAgICBodHRwOi8vd3d3LnNpbXRlYy5jby51ay9wcm9kdWN0cy9TV0xJTlVYLworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogUzNDMjQxMCBjbG9jayByZWdpc3RlciBkZWZpbml0aW9ucworICoKKyAqICBDaGFuZ2Vsb2c6CisgKiAgICAxOC1BdWctMjAwNCAgICBCSkQgICAgIENvcGllZCBmaWxlIGZyb20gMi40IGFuZCB1cGRhdGVkCisqLworCisjaWZuZGVmIF9fQVNNX0FSTV9SRUdTX05BTkQKKyNkZWZpbmUgX19BU01fQVJNX1JFR1NfTkFORCAiJElkOiBuYW5kLmgsdiAxLjMgMjAwMy8xMi8wOSAxMTozNjoyOSBiZW4gRXhwICQiCisKKworI2RlZmluZSBTM0MyNDEwX05GUkVHKHgpICh4KQorCisjZGVmaW5lIFMzQzI0MTBfTkZDT05GICBTM0MyNDEwX05GUkVHKDB4MDApCisjZGVmaW5lIFMzQzI0MTBfTkZDTUQgICBTM0MyNDEwX05GUkVHKDB4MDQpCisjZGVmaW5lIFMzQzI0MTBfTkZBRERSICBTM0MyNDEwX05GUkVHKDB4MDgpCisjZGVmaW5lIFMzQzI0MTBfTkZEQVRBICBTM0MyNDEwX05GUkVHKDB4MEMpCisjZGVmaW5lIFMzQzI0MTBfTkZTVEFUICBTM0MyNDEwX05GUkVHKDB4MTApCisjZGVmaW5lIFMzQzI0MTBfTkZFQ0MgICBTM0MyNDEwX05GUkVHKDB4MTQpCisKKyNkZWZpbmUgUzNDMjQxMF9ORkNPTkZfRU4gICAgICAgICAgKDE8PDE1KQorI2RlZmluZSBTM0MyNDEwX05GQ09ORl81MTJCWVRFICAgICAoMTw8MTQpCisjZGVmaW5lIFMzQzI0MTBfTkZDT05GXzRTVEVQICAgICAgICgxPDwxMykKKyNkZWZpbmUgUzNDMjQxMF9ORkNPTkZfSU5JVEVDQyAgICAgKDE8PDEyKQorI2RlZmluZSBTM0MyNDEwX05GQ09ORl9uRkNFICAgICAgICAoMTw8MTEpCisjZGVmaW5lIFMzQzI0MTBfTkZDT05GX1RBQ0xTKHgpICAgICgoeCk8PDgpCisjZGVmaW5lIFMzQzI0MTBfTkZDT05GX1RXUlBIMCh4KSAgICgoeCk8PDQpCisjZGVmaW5lIFMzQzI0MTBfTkZDT05GX1RXUlBIMSh4KSAgICgoeCk8PDApCisKKyNkZWZpbmUgUzNDMjQxMF9ORlNUQVRfQlVTWSAgICAgICAgKDE8PDApCisKKy8qIHRoaW5rIEVDQyBjYW4gb25seSBiZSA4Yml0IHJlYWQ/ICovCisKKyNlbmRpZiAvKiBfX0FTTV9BUk1fUkVHU19OQU5EICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1ydGMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1ydGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjg5ODNmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLXJ0Yy5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qIGxpbnV4L2luY2x1ZGUvYXNtL2FyY2gtczNjMjQxMC9yZWdzLXJ0Yy5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAzIFNpbXRlYyBFbGVjdHJvbmljcyA8bGludXhAc2ltdGVjLmNvLnVrPgorICoJCSAgICAgIGh0dHA6Ly93d3cuc2ltdGVjLmNvLnVrL3Byb2R1Y3RzL1NXTElOVVgvCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBTM0MyNDEwIEludGVybmFsIFJUQyByZWdpc3RlciBkZWZpbml0aW9uCisgKgorICogIENoYW5nZWxvZzoKKyAqICAgIDE5LTA2LTIwMDMgICAgIEJKRCAgICAgQ3JlYXRlZCBmaWxlCisgKiAgICAxMi0wMy0yMDA0ICAgICBCSkQgICAgIFVwZGF0ZWQgaW5jbHVkZSBwcm90ZWN0aW9uCisgKiAgICAxNS0wMS0yMDA1ICAgICBMQ1ZSICAgIENoYW5nZWQgUzNDMjQxMF9WQSB0byBTM0MyNFhYX1ZBIChzM2MyNDAwIHN1cHBvcnQpCisqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfUkVHU19SVENfSAorI2RlZmluZSBfX0FTTV9BUkNIX1JFR1NfUlRDX0ggX19GSUxFX18KKworI2RlZmluZSBTM0MyNDEwX1JUQ1JFRyh4KSAoKHgpICsgUzNDMjRYWF9WQV9SVEMpCisKKyNkZWZpbmUgUzNDMjQxMF9SVENDT04JICAgICAgUzNDMjQxMF9SVENSRUcoMHg0MCkKKyNkZWZpbmUgUzNDMjQxMF9SVENDT05fUlRDRU4gICgxPDwwKQorI2RlZmluZSBTM0MyNDEwX1JUQ0NPTl9DTEtTRUwgKDE8PDEpCisjZGVmaW5lIFMzQzI0MTBfUlRDQ09OX0NOVFNFTCAoMTw8MikKKyNkZWZpbmUgUzNDMjQxMF9SVENDT05fQ0xLUlNUICgxPDwzKQorCisjZGVmaW5lIFMzQzI0MTBfVElDTlQJICAgICAgUzNDMjQxMF9SVENSRUcoMHg0NCkKKyNkZWZpbmUgUzNDMjQxMF9USUNOVF9FTkFCTEUgICgxPDw3KQorCisjZGVmaW5lIFMzQzI0MTBfUlRDQUxNCSAgICAgIFMzQzI0MTBfUlRDUkVHKDB4NTApCisjZGVmaW5lIFMzQzI0MTBfUlRDQUxNX0FMTUVOICAoMTw8NikKKyNkZWZpbmUgUzNDMjQxMF9SVENBTE1fWUVBUkVOICgxPDw1KQorI2RlZmluZSBTM0MyNDEwX1JUQ0FMTV9NT05FTiAgKDE8PDQpCisjZGVmaW5lIFMzQzI0MTBfUlRDQUxNX0RBWUVOICAoMTw8MykKKyNkZWZpbmUgUzNDMjQxMF9SVENBTE1fSE9VUkVOICgxPDwyKQorI2RlZmluZSBTM0MyNDEwX1JUQ0FMTV9NSU5FTiAgKDE8PDEpCisjZGVmaW5lIFMzQzI0MTBfUlRDQUxNX1NFQ0VOICAoMTw8MCkKKworI2RlZmluZSBTM0MyNDEwX1JUQ0FMTV9BTEwgXAorICBTM0MyNDEwX1JUQ0FMTV9BTE1FTiB8IFMzQzI0MTBfUlRDQUxNX1lFQVJFTiB8IFMzQzI0MTBfUlRDQUxNX01PTkVOIHxcCisgIFMzQzI0MTBfUlRDQUxNX0RBWUVOIHwgUzNDMjQxMF9SVENBTE1fSE9VUkVOIHwgUzNDMjQxMF9SVENBTE1fTUlORU4gfFwKKyAgUzNDMjQxMF9SVENBTE1fU0VDRU4KKworCisjZGVmaW5lIFMzQzI0MTBfQUxNU0VDCSAgICAgIFMzQzI0MTBfUlRDUkVHKDB4NTQpCisjZGVmaW5lIFMzQzI0MTBfQUxNTUlOCSAgICAgIFMzQzI0MTBfUlRDUkVHKDB4NTgpCisjZGVmaW5lIFMzQzI0MTBfQUxNSE9VUgkgICAgICBTM0MyNDEwX1JUQ1JFRygweDVjKQorCisjZGVmaW5lIFMzQzI0MTBfQUxNREFURQkgICAgICBTM0MyNDEwX1JUQ1JFRygweDYwKQorI2RlZmluZSBTM0MyNDEwX0FMTU1PTgkgICAgICBTM0MyNDEwX1JUQ1JFRygweDY0KQorI2RlZmluZSBTM0MyNDEwX0FMTVlFQVIJICAgICAgUzNDMjQxMF9SVENSRUcoMHg2OCkKKworI2RlZmluZSBTM0MyNDEwX1JUQ1JTVAkgICAgICBTM0MyNDEwX1JUQ1JFRygweDZjKQorCisjZGVmaW5lIFMzQzI0MTBfUlRDU0VDCSAgICAgIFMzQzI0MTBfUlRDUkVHKDB4NzApCisjZGVmaW5lIFMzQzI0MTBfUlRDTUlOCSAgICAgIFMzQzI0MTBfUlRDUkVHKDB4NzQpCisjZGVmaW5lIFMzQzI0MTBfUlRDSE9VUgkgICAgICBTM0MyNDEwX1JUQ1JFRygweDc4KQorI2RlZmluZSBTM0MyNDEwX1JUQ0RBVEUJICAgICAgUzNDMjQxMF9SVENSRUcoMHg3YykKKyNkZWZpbmUgUzNDMjQxMF9SVENEQVkJICAgICAgUzNDMjQxMF9SVENSRUcoMHg4MCkKKyNkZWZpbmUgUzNDMjQxMF9SVENNT04JICAgICAgUzNDMjQxMF9SVENSRUcoMHg4NCkKKyNkZWZpbmUgUzNDMjQxMF9SVENZRUFSCSAgICAgIFMzQzI0MTBfUlRDUkVHKDB4ODgpCisKKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfUkVHU19SVENfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLXNkaS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLXNkaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhOWEyNmYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3Mtc2RpLmgKQEAgLTAsMCArMSwxMTggQEAKKy8qIGxpbnV4L2luY2x1ZGUvYXNtL2FyY2gtczNjMjQxMC9yZWdzLXNkaS5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA0IFNpbXRlYyBFbGVjdHJvbmljcyA8bGludXhAc2ltdGVjLmNvLnVrPgorICoJCSAgICAgIGh0dHA6Ly93d3cuc2ltdGVjLmNvLnVrL3Byb2R1Y3RzL1NXTElOVVgvCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBTM0MyNDEwIE1NQy9TRElPIHJlZ2lzdGVyIGRlZmluaXRpb25zCisgKgorICogIENoYW5nZWxvZzoKKyAqICAgIDE4LUF1Zy0yMDA0IEJlbiBEb29rcyAgICAgIENyZWF0ZWQgaW5pdGlhbCBmaWxlCisgKiAgICAyOS1Ob3YtMjAwNCBLb2VuIE1hcnRlbnMgICBBZGRlZCBzb21lIG1pc3NpbmcgZGVmaW5lcywgZml4ZWQgZHVwbGljYXRlcworICogICAgMjktTm92LTIwMDQgQmVuIERvb2tzCSBVcGRhdGVkIEtvZW4ncyBwYXRjaAorKi8KKworI2lmbmRlZiBfX0FTTV9BUk1fUkVHU19TREkKKyNkZWZpbmUgX19BU01fQVJNX1JFR1NfU0RJICJyZWdzLXNkaS5oIgorCisjZGVmaW5lIFMzQzI0MTBfU0RJQ09OICAgICAgICAgICAgICAgICgweDAwKQorI2RlZmluZSBTM0MyNDEwX1NESVBSRSAgICAgICAgICAgICAgICAoMHgwNCkKKyNkZWZpbmUgUzNDMjQxMF9TRElDTURBUkcgICAgICAgICAgICAgKDB4MDgpCisjZGVmaW5lIFMzQzI0MTBfU0RJQ01EQ09OICAgICAgICAgICAgICgweDBDKQorI2RlZmluZSBTM0MyNDEwX1NESUNNRFNUQVQgICAgICAgICAgICAoMHgxMCkKKyNkZWZpbmUgUzNDMjQxMF9TRElSU1AwICAgICAgICAgICAgICAgKDB4MTQpCisjZGVmaW5lIFMzQzI0MTBfU0RJUlNQMSAgICAgICAgICAgICAgICgweDE4KQorI2RlZmluZSBTM0MyNDEwX1NESVJTUDIgICAgICAgICAgICAgICAoMHgxQykKKyNkZWZpbmUgUzNDMjQxMF9TRElSU1AzICAgICAgICAgICAgICAgKDB4MjApCisjZGVmaW5lIFMzQzI0MTBfU0RJVElNRVIgICAgICAgICAgICAgICgweDI0KQorI2RlZmluZSBTM0MyNDEwX1NESUJTSVpFICAgICAgICAgICAgICAoMHgyOCkKKyNkZWZpbmUgUzNDMjQxMF9TRElEQ09OICAgICAgICAgICAgICAgKDB4MkMpCisjZGVmaW5lIFMzQzI0MTBfU0RJRENOVCAgICAgICAgICAgICAgICgweDMwKQorI2RlZmluZSBTM0MyNDEwX1NESURTVEEgICAgICAgICAgICAgICAoMHgzNCkKKyNkZWZpbmUgUzNDMjQxMF9TRElGU1RBICAgICAgICAgICAgICAgKDB4MzgpCisjZGVmaW5lIFMzQzI0MTBfU0RJREFUQSAgICAgICAgICAgICAgICgweDNDKQorI2RlZmluZSBTM0MyNDEwX1NESUlNU0sgICAgICAgICAgICAgICAoMHg0MCkKKworI2RlZmluZSBTM0MyNDEwX1NESUNPTl9CWVRFT1JERVIgICAgICAoMTw8NCkKKyNkZWZpbmUgUzNDMjQxMF9TRElDT05fU0RJT0lSUSAgICAgICAgKDE8PDMpCisjZGVmaW5lIFMzQzI0MTBfU0RJQ09OX1JXQUlURU4gICAgICAgICgxPDwyKQorI2RlZmluZSBTM0MyNDEwX1NESUNPTl9GSUZPUkVTRVQgICAgICAoMTw8MSkKKyNkZWZpbmUgUzNDMjQxMF9TRElDT05fQ0xPQ0tUWVBFICAgICAgKDE8PDApCisKKyNkZWZpbmUgUzNDMjQxMF9TRElDTURDT05fQUJPUlQgICAgICAgKDE8PDEyKQorI2RlZmluZSBTM0MyNDEwX1NESUNNRENPTl9XSVRIREFUQSAgICAoMTw8MTEpCisjZGVmaW5lIFMzQzI0MTBfU0RJQ01EQ09OX0xPTkdSU1AgICAgICgxPDwxMCkKKyNkZWZpbmUgUzNDMjQxMF9TRElDTURDT05fV0FJVFJTUCAgICAgKDE8PDkpCisjZGVmaW5lIFMzQzI0MTBfU0RJQ01EQ09OX0NNRFNUQVJUICAgICgxPDw4KQorI2RlZmluZSBTM0MyNDEwX1NESUNNRENPTl9JTkRFWCAgICAgICAoMHhmZikKKworI2RlZmluZSBTM0MyNDEwX1NESUNNRFNUQVRfQ1JDRkFJTCAgICAoMTw8MTIpCisjZGVmaW5lIFMzQzI0MTBfU0RJQ01EU1RBVF9DTURTRU5UICAgICgxPDwxMSkKKyNkZWZpbmUgUzNDMjQxMF9TRElDTURTVEFUX0NNRFRJTUVPVVQgKDE8PDEwKQorI2RlZmluZSBTM0MyNDEwX1NESUNNRFNUQVRfUlNQRklOICAgICAoMTw8OSkKKyNkZWZpbmUgUzNDMjQxMF9TRElDTURTVEFUX1hGRVJJTkcgICAgKDE8PDgpCisjZGVmaW5lIFMzQzI0MTBfU0RJQ01EU1RBVF9JTkRFWCAgICAgICgweGZmKQorCisjZGVmaW5lIFMzQzI0MTBfU0RJRENPTl9JUlFQRVJJT0QgICAgICgxPDwyMSkKKyNkZWZpbmUgUzNDMjQxMF9TRElEQ09OX1RYQUZURVJSRVNQICAgKDE8PDIwKQorI2RlZmluZSBTM0MyNDEwX1NESURDT05fUlhBRlRFUkNNRCAgICAoMTw8MTkpCisjZGVmaW5lIFMzQzI0MTBfU0RJRENPTl9CVVNZQUZURVJDTUQgICgxPDwxOCkKKyNkZWZpbmUgUzNDMjQxMF9TRElEQ09OX0JMT0NLTU9ERSAgICAgKDE8PDE3KQorI2RlZmluZSBTM0MyNDEwX1NESURDT05fV0lERUJVUyAgICAgICAoMTw8MTYpCisjZGVmaW5lIFMzQzI0MTBfU0RJRENPTl9ETUFFTiAgICAgICAgICgxPDwxNSkKKyNkZWZpbmUgUzNDMjQxMF9TRElEQ09OX1NUT1AgICAgICAgICAgKDE8PDE0KQorI2RlZmluZSBTM0MyNDEwX1NESURDT05fREFUTU9ERQkgICAgICAoMzw8MTIpCisjZGVmaW5lIFMzQzI0MTBfU0RJRENPTl9CTEtOVU0gICAgICAgICgweDdmZikKKworLyogY29uc3RhbnRzIGZvciBTM0MyNDEwX1NESURDT05fREFUTU9ERSAqLworI2RlZmluZSBTM0MyNDEwX1NESURDT05fWEZFUl9SRUFEWSAgICAoMDw8MTIpCisjZGVmaW5lIFMzQzI0MTBfU0RJRENPTl9YRkVSX0NIS1NUQVJUICgxPDwxMikKKyNkZWZpbmUgUzNDMjQxMF9TRElEQ09OX1hGRVJfUlhTVEFSVCAgKDI8PDEyKQorI2RlZmluZSBTM0MyNDEwX1NESURDT05fWEZFUl9UWFNUQVJUICAoMzw8MTIpCisKKyNkZWZpbmUgUzNDMjQxMF9TRElEQ05UX0JMS05VTV9TSElGVCAgKDEyKQorCisjZGVmaW5lIFMzQzI0MTBfU0RJRFNUQV9SRFlXQUlUUkVRICAgICgxPDwxMCkKKyNkZWZpbmUgUzNDMjQxMF9TRElEU1RBX1NESU9JUlFERVRFQ1QgKDE8PDkpCisjZGVmaW5lIFMzQzI0MTBfU0RJRFNUQV9GSUZPRkFJTCAgICAgICgxPDw4KQkvKiByZXNlcnZlZCBvbiAyNDQwICovCisjZGVmaW5lIFMzQzI0MTBfU0RJRFNUQV9DUkNGQUlMICAgICAgICgxPDw3KQorI2RlZmluZSBTM0MyNDEwX1NESURTVEFfUlhDUkNGQUlMICAgICAoMTw8NikKKyNkZWZpbmUgUzNDMjQxMF9TRElEU1RBX0RBVEFUSU1FT1VUICAgKDE8PDUpCisjZGVmaW5lIFMzQzI0MTBfU0RJRFNUQV9YRkVSRklOSVNIICAgICgxPDw0KQorI2RlZmluZSBTM0MyNDEwX1NESURTVEFfQlVTWUZJTklTSCAgICAoMTw8MykKKyNkZWZpbmUgUzNDMjQxMF9TRElEU1RBX1NCSVRFUlIgICAgICAgKDE8PDIpCS8qIHJlc2VydmVkIG9uIDI0MTBhLzI0NDAgKi8KKyNkZWZpbmUgUzNDMjQxMF9TRElEU1RBX1RYREFUQU9OICAgICAgKDE8PDEpCisjZGVmaW5lIFMzQzI0MTBfU0RJRFNUQV9SWERBVEFPTiAgICAgICgxPDwwKQorCisjZGVmaW5lIFMzQzI0MTBfU0RJRlNUQV9URkRFVCAgICAgICAgICAoMTw8MTMpCisjZGVmaW5lIFMzQzI0MTBfU0RJRlNUQV9SRkRFVCAgICAgICAgICAoMTw8MTIpCisjZGVmaW5lIFMzQzI0MTBfU0RJRlNUQV9UWEhBTEYgICAgICAgICAoMTw8MTEpCisjZGVmaW5lIFMzQzI0MTBfU0RJRlNUQV9UWEVNUFRZICAgICAgICAoMTw8MTApCisjZGVmaW5lIFMzQzI0MTBfU0RJRlNUQV9SRkxBU1QgICAgICAgICAoMTw8OSkKKyNkZWZpbmUgUzNDMjQxMF9TRElGU1RBX1JGRlVMTCAgICAgICAgICgxPDw4KQorI2RlZmluZSBTM0MyNDEwX1NESUZTVEFfUkZIQUxGICAgICAgICAgKDE8PDcpCisjZGVmaW5lIFMzQzI0MTBfU0RJRlNUQV9DT1VOVE1BU0sgICAgICAoMHg3ZikKKworI2RlZmluZSBTM0MyNDEwX1NESUlNU0tfUkVTUE9OU0VDUkMgICAgKDE8PDE3KQorI2RlZmluZSBTM0MyNDEwX1NESUlNU0tfQ01EU0VOVCAgICAgICAgKDE8PDE2KQorI2RlZmluZSBTM0MyNDEwX1NESUlNU0tfQ01EVElNRU9VVCAgICAgKDE8PDE1KQorI2RlZmluZSBTM0MyNDEwX1NESUlNU0tfUkVTUE9OU0VORCAgICAgKDE8PDE0KQorI2RlZmluZSBTM0MyNDEwX1NESUlNU0tfUkVBRFdBSVQgICAgICAgKDE8PDEzKQorI2RlZmluZSBTM0MyNDEwX1NESUlNU0tfU0RJT0lSUSAgICAgICAgKDE8PDEyKQorI2RlZmluZSBTM0MyNDEwX1NESUlNU0tfRklGT0ZBSUwgICAgICAgKDE8PDExKQorI2RlZmluZSBTM0MyNDEwX1NESUlNU0tfQ1JDU1RBVFVTICAgICAgKDE8PDEwKQorI2RlZmluZSBTM0MyNDEwX1NESUlNU0tfREFUQUNSQyAgICAgICAgKDE8PDkpCisjZGVmaW5lIFMzQzI0MTBfU0RJSU1TS19EQVRBVElNRU9VVCAgICAoMTw8OCkKKyNkZWZpbmUgUzNDMjQxMF9TRElJTVNLX0RBVEFGSU5JU0ggICAgICgxPDw3KQorI2RlZmluZSBTM0MyNDEwX1NESUlNU0tfQlVTWUZJTklTSCAgICAgKDE8PDYpCisjZGVmaW5lIFMzQzI0MTBfU0RJSU1TS19TQklURVJSICAgICAgICAoMTw8NSkJLyogcmVzZXJ2ZWQgMjQ0MC8yNDEwYSAqLworI2RlZmluZSBTM0MyNDEwX1NESUlNU0tfVFhGSUZPSEFMRiAgICAgKDE8PDQpCisjZGVmaW5lIFMzQzI0MTBfU0RJSU1TS19UWEZJRk9FTVBUWSAgICAoMTw8MykKKyNkZWZpbmUgUzNDMjQxMF9TRElJTVNLX1JYRklGT0xBU1QgICAgICgxPDwyKQorI2RlZmluZSBTM0MyNDEwX1NESUlNU0tfUlhGSUZPRlVMTCAgICAgKDE8PDEpCisjZGVmaW5lIFMzQzI0MTBfU0RJSU1TS19SWEZJRk9IQUxGICAgICAoMTw8MCkKKworI2VuZGlmIC8qIF9fQVNNX0FSTV9SRUdTX1NESSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLXNlcmlhbC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLXNlcmlhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlMWJiYmEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3Mtc2VyaWFsLmgKQEAgLTAsMCArMSwyMDkgQEAKKy8qIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1zZXJpYWwuaAorICoKKyAqICBGcm9tIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9zZXJpYWxfczNjMjQxMC5oCisgKgorICogIEludGVybmFsIGhlYWRlciBmaWxlIGZvciBTYW1zdW5nIFMzQzI0MTAgc2VyaWFsIHBvcnRzIChVQVJUMC0yKQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDIgU2hhbmUgTmF5IChzaGFuZUBtaW5pcmwuY29tKQorICoKKyAqICBBZGRpdGlvbmFsIGRlZmluZXMsIChjKSAyMDAzIFNpbXRlYyBFbGVjdHJvbmljcyAobGludXhAc2ltdGVjLmNvLnVrKQorICoKKyAqICBBZGFwdGVkIGZyb206CisgKgorICogIEludGVybmFsIGhlYWRlciBmaWxlIGZvciBNWDFBRFMgc2VyaWFsIHBvcnRzIChVQVJUMSAmIDIpCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMiBTaGFuZSBOYXkgKHNoYW5lQG1pbmlybC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqIE1vZGlmaWNhdGlvbnM6CisgKiAgICAgMTAtTWFyLTIwMDUgTENWUiAgQ2hhbmdlZCBTM0MyNDEwX1ZBIHRvIFMzQzI0WFhfVkEgKHMzYzI0MDAgc3VwcG9ydCkKKyAqLworCisjaWZuZGVmIF9fQVNNX0FSTV9SRUdTX1NFUklBTF9ICisjZGVmaW5lIF9fQVNNX0FSTV9SRUdTX1NFUklBTF9ICisKKyNkZWZpbmUgUzNDMjRYWF9WQV9VQVJUMCAgICAgIChTM0MyNFhYX1ZBX1VBUlQpCisjZGVmaW5lIFMzQzI0WFhfVkFfVUFSVDEgICAgICAoUzNDMjRYWF9WQV9VQVJUICsgMHg0MDAwICkKKyNkZWZpbmUgUzNDMjRYWF9WQV9VQVJUMiAgICAgIChTM0MyNFhYX1ZBX1VBUlQgKyAweDgwMDAgKQorCisjZGVmaW5lIFMzQzI0MTBfUEFfVUFSVDAgICAgICAoUzNDMjQxMF9QQV9VQVJUKQorI2RlZmluZSBTM0MyNDEwX1BBX1VBUlQxICAgICAgKFMzQzI0MTBfUEFfVUFSVCArIDB4NDAwMCApCisjZGVmaW5lIFMzQzI0MTBfUEFfVUFSVDIgICAgICAoUzNDMjQxMF9QQV9VQVJUICsgMHg4MDAwICkKKworI2RlZmluZSBTM0MyNDEwX1VSWEgJICAoMHgyNCkKKyNkZWZpbmUgUzNDMjQxMF9VVFhICSAgKDB4MjApCisjZGVmaW5lIFMzQzI0MTBfVUxDT04JICAoMHgwMCkKKyNkZWZpbmUgUzNDMjQxMF9VQ09OCSAgKDB4MDQpCisjZGVmaW5lIFMzQzI0MTBfVUZDT04JICAoMHgwOCkKKyNkZWZpbmUgUzNDMjQxMF9VTUNPTgkgICgweDBDKQorI2RlZmluZSBTM0MyNDEwX1VCUkRJVgkgICgweDI4KQorI2RlZmluZSBTM0MyNDEwX1VUUlNUQVQJICAoMHgxMCkKKyNkZWZpbmUgUzNDMjQxMF9VRVJTVEFUCSAgKDB4MTQpCisjZGVmaW5lIFMzQzI0MTBfVUZTVEFUCSAgKDB4MTgpCisjZGVmaW5lIFMzQzI0MTBfVU1TVEFUCSAgKDB4MUMpCisKKyNkZWZpbmUgUzNDMjQxMF9MQ09OX0NGR01BU0sJICAoKDB4Rjw8Myl8KDB4MykpCisKKyNkZWZpbmUgUzNDMjQxMF9MQ09OX0NTNQkgICgweDApCisjZGVmaW5lIFMzQzI0MTBfTENPTl9DUzYJICAoMHgxKQorI2RlZmluZSBTM0MyNDEwX0xDT05fQ1M3CSAgKDB4MikKKyNkZWZpbmUgUzNDMjQxMF9MQ09OX0NTOAkgICgweDMpCisjZGVmaW5lIFMzQzI0MTBfTENPTl9DU01BU0sJICAoMHgzKQorCisjZGVmaW5lIFMzQzI0MTBfTENPTl9QTk9ORQkgICgweDApCisjZGVmaW5lIFMzQzI0MTBfTENPTl9QRVZFTgkgICgweDUgPDwgMykKKyNkZWZpbmUgUzNDMjQxMF9MQ09OX1BPREQJICAoMHg0IDw8IDMpCisjZGVmaW5lIFMzQzI0MTBfTENPTl9QTUFTSwkgICgweDcgPDwgMykKKworI2RlZmluZSBTM0MyNDEwX0xDT05fU1RPUEIJICAoMTw8MikKKyNkZWZpbmUgUzNDMjQxMF9MQ09OX0lSTSAgICAgICAgICAoMTw8NikKKworI2RlZmluZSBTM0MyNDQwX1VDT05fQ0xLTUFTSwkgICgzPDwxMCkKKyNkZWZpbmUgUzNDMjQ0MF9VQ09OX1BDTEsJICAoMDw8MTApCisjZGVmaW5lIFMzQzI0NDBfVUNPTl9VQ0xLCSAgKDE8PDEwKQorI2RlZmluZSBTM0MyNDQwX1VDT05fUENMSzIJICAoMjw8MTApCisjZGVmaW5lIFMzQzI0NDBfVUNPTl9GQ0xLCSAgKDM8PDEwKQorI2RlZmluZSBTM0MyNDQwX1VDT04yX0ZDTEtfRU4JICAoMTw8MTUpCisjZGVmaW5lIFMzQzI0NDBfVUNPTjBfRElWTUFTSwkgICgxNSA8PCAxMikKKyNkZWZpbmUgUzNDMjQ0MF9VQ09OMV9ESVZNQVNLCSAgKDE1IDw8IDEyKQorI2RlZmluZSBTM0MyNDQwX1VDT04yX0RJVk1BU0sJICAoNyA8PCAxMikKKyNkZWZpbmUgUzNDMjQ0MF9VQ09OX0RJVlNISUZUCSAgKDEyKQorCisjZGVmaW5lIFMzQzI0MTBfVUNPTl9VQ0xLCSAgKDE8PDEwKQorI2RlZmluZSBTM0MyNDEwX1VDT05fU0JSRUFLCSAgKDE8PDQpCisKKyNkZWZpbmUgUzNDMjQxMF9VQ09OX1RYSUxFVkVMCSAgKDE8PDkpCisjZGVmaW5lIFMzQzI0MTBfVUNPTl9SWElMRVZFTAkgICgxPDw4KQorI2RlZmluZSBTM0MyNDEwX1VDT05fVFhJUlFNT0RFCSAgKDE8PDIpCisjZGVmaW5lIFMzQzI0MTBfVUNPTl9SWElSUU1PREUJICAoMTw8MCkKKyNkZWZpbmUgUzNDMjQxMF9VQ09OX1JYRklGT19UT0kJICAoMTw8NykKKworI2RlZmluZSBTM0MyNDEwX1VDT05fREVGQVVMVAkgIChTM0MyNDEwX1VDT05fVFhJTEVWRUwgIHwgXAorCQkJCSAgIFMzQzI0MTBfVUNPTl9SWElMRVZFTCAgfCBcCisJCQkJICAgUzNDMjQxMF9VQ09OX1RYSVJRTU9ERSB8IFwKKwkJCQkgICBTM0MyNDEwX1VDT05fUlhJUlFNT0RFIHwgXAorCQkJCSAgIFMzQzI0MTBfVUNPTl9SWEZJRk9fVE9JKQorCisjZGVmaW5lIFMzQzI0MTBfVUZDT05fRklGT01PREUJICAoMTw8MCkKKyNkZWZpbmUgUzNDMjQxMF9VRkNPTl9UWFRSSUcwCSAgKDA8PDYpCisjZGVmaW5lIFMzQzI0MTBfVUZDT05fUlhUUklHOAkgICgxPDw0KQorI2RlZmluZSBTM0MyNDEwX1VGQ09OX1JYVFJJRzEyCSAgKDI8PDQpCisKKy8qIFMzQzI0NDAgRklGTyB0cmlnZ2VyIGxldmVscyAqLworI2RlZmluZSBTM0MyNDQwX1VGQ09OX1JYVFJJRzEJICAoMDw8NCkKKyNkZWZpbmUgUzNDMjQ0MF9VRkNPTl9SWFRSSUc4CSAgKDE8PDQpCisjZGVmaW5lIFMzQzI0NDBfVUZDT05fUlhUUklHMTYJICAoMjw8NCkKKyNkZWZpbmUgUzNDMjQ0MF9VRkNPTl9SWFRSSUczMgkgICgzPDw0KQorCisjZGVmaW5lIFMzQzI0NDBfVUZDT05fVFhUUklHMAkgICgwPDw2KQorI2RlZmluZSBTM0MyNDQwX1VGQ09OX1RYVFJJRzE2CSAgKDE8PDYpCisjZGVmaW5lIFMzQzI0NDBfVUZDT05fVFhUUklHMzIJICAoMjw8NikKKyNkZWZpbmUgUzNDMjQ0MF9VRkNPTl9UWFRSSUc0OAkgICgzPDw2KQorCisjZGVmaW5lIFMzQzI0MTBfVUZDT05fUkVTRVRCT1RICSAgKDM8PDEpCisjZGVmaW5lIFMzQzI0MTBfVUZDT05fUkVTRVRUWAkgICgxPDwyKQorI2RlZmluZSBTM0MyNDEwX1VGQ09OX1JFU0VUUlgJICAoMTw8MSkKKworI2RlZmluZSBTM0MyNDEwX1VGQ09OX0RFRkFVTFQJICAoUzNDMjQxMF9VRkNPTl9GSUZPTU9ERSB8IFwKKwkJCQkgICBTM0MyNDEwX1VGQ09OX1RYVFJJRzAgIHwgXAorCQkJCSAgIFMzQzI0MTBfVUZDT05fUlhUUklHOCApCisKKyNkZWZpbmUJUzNDMjQxMF9VTUNPTV9BRkMJICAoMTw8NCkKKyNkZWZpbmUJUzNDMjQxMF9VTUNPTV9SVFNfTE9XCSAgKDE8PDApCisKKyNkZWZpbmUgUzNDMjQxMF9VRlNUQVRfVFhGVUxMCSAgKDE8PDkpCisjZGVmaW5lIFMzQzI0MTBfVUZTVEFUX1JYRlVMTAkgICgxPDw4KQorI2RlZmluZSBTM0MyNDEwX1VGU1RBVF9UWE1BU0sJICAoMTU8PDQpCisjZGVmaW5lIFMzQzI0MTBfVUZTVEFUX1RYU0hJRlQJICAoNCkKKyNkZWZpbmUgUzNDMjQxMF9VRlNUQVRfUlhNQVNLCSAgKDE1PDwwKQorI2RlZmluZSBTM0MyNDEwX1VGU1RBVF9SWFNISUZUCSAgKDApCisKKyNkZWZpbmUgUzNDMjQ0MF9VRlNUQVRfVFhGVUxMCSAgKDE8PDE0KQorI2RlZmluZSBTM0MyNDQwX1VGU1RBVF9SWEZVTEwJICAoMTw8NikKKyNkZWZpbmUgUzNDMjQ0MF9VRlNUQVRfVFhTSElGVAkgICg4KQorI2RlZmluZSBTM0MyNDQwX1VGU1RBVF9SWFNISUZUCSAgKDApCisjZGVmaW5lIFMzQzI0NDBfVUZTVEFUX1RYTUFTSwkgICg2Mzw8OCkKKyNkZWZpbmUgUzNDMjQ0MF9VRlNUQVRfUlhNQVNLCSAgKDYzKQorCisjZGVmaW5lIFMzQzI0MTBfVVRSU1RBVF9UWEUJICAoMTw8MikKKyNkZWZpbmUgUzNDMjQxMF9VVFJTVEFUX1RYRkUJICAoMTw8MSkKKyNkZWZpbmUgUzNDMjQxMF9VVFJTVEFUX1JYRFIJICAoMTw8MCkKKworI2RlZmluZSBTM0MyNDEwX1VFUlNUQVRfT1ZFUlJVTgkgICgxPDwwKQorI2RlZmluZSBTM0MyNDEwX1VFUlNUQVRfRlJBTUUJICAoMTw8MikKKyNkZWZpbmUgUzNDMjQxMF9VRVJTVEFUX0JSRUFLCSAgKDE8PDMpCisjZGVmaW5lIFMzQzI0MTBfVUVSU1RBVF9BTlkJICAoUzNDMjQxMF9VRVJTVEFUX09WRVJSVU4gfCBcCisJCQkJICAgUzNDMjQxMF9VRVJTVEFUX0ZSQU1FIHwgXAorCQkJCSAgIFMzQzI0MTBfVUVSU1RBVF9CUkVBSykKKworI2RlZmluZSBTM0MyNDEwX1VNU1RBVF9DVFMJICAoMTw8MCkKKyNkZWZpbmUgUzNDMjQxMF9VTVNUQVRfRGVsdGFDVFMJICAoMTw8MikKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworLyogc3RydWN0IHMzYzI0eHhfdWFydF9jbGtzcmMKKyAqCisgKiB0aGlzIHN0cnVjdHVyZSBkZWZpbmVzIGEgbmFtZWQgY2xvY2sgc291cmNlIHRoYXQgY2FuIGJlIHVzZWQgZm9yIHRoZQorICogdWFydCwgc28gdGhhdCB0aGUgYmVzdCBjbG9jayBjYW4gYmUgc2VsZWN0ZWQgZm9yIHRoZSByZXF1ZXN0ZWQgYmF1ZAorICogcmF0ZS4KKyAqCisgKiBtaW5fYmF1ZCBhbmQgbWF4X2JhdWQgZGVmaW5lIHRoZSByYW5nZSBvZiBiYXVkLXJhdGVzIHRoaXMgY2xvY2sgaXMKKyAqIGFjY2VwdGFibGUgZm9yLCBpZiB0aGV5IGFyZSBib3RoIHplcm8sIGl0IGlzIGFzc3VtZWQgYW55IGJhdWQgcmF0ZSB0aGF0CisgKiBjYW4gYmUgZ2VuZXJhdGVkIGZyb20gdGhpcyBjbG9jayB3aWxsIGJlIHVzZWQuCisgKgorICogZGl2aXNvciBnaXZlcyB0aGUgZGl2aXNvciBmcm9tIHRoZSBjbG9jayB0byB0aGUgb25lIHNlZW4gYnkgdGhlIHVhcnQKKyovCisKK3N0cnVjdCBzM2MyNHh4X3VhcnRfY2xrc3JjIHsKKwljb25zdCBjaGFyCSpuYW1lOworCXVuc2lnbmVkIGludAkgZGl2aXNvcjsKKwl1bnNpZ25lZCBpbnQJIG1pbl9iYXVkOworCXVuc2lnbmVkIGludAkgbWF4X2JhdWQ7Cit9OworCisvKiBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSBmb3IgcGVyLW1hY2hpbmUgY29uZmlndXJhdGlvbnMgZm9yIHRoZQorICogc2VyaWFsIHBvcnQKKyAqCisgKiB0aGUgcG9pbnRlciBpcyBzZXR1cCBieSB0aGUgbWFjaGluZSBzcGVjaWZpYyBpbml0aWFsaXNhdGlvbiBmcm9tIHRoZQorICogYXJjaC9hcm0vbWFjaC1zM2MyNDEwLyBkaXJlY3RvcnkuCisqLworCitzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnIHsKKwl1bnNpZ25lZCBjaGFyCSAgIGh3cG9ydDsJIC8qIGhhcmR3YXJlIHBvcnQgbnVtYmVyICovCisJdW5zaWduZWQgY2hhcgkgICB1bnVzZWQ7CisJdW5zaWduZWQgc2hvcnQJICAgZmxhZ3M7CisJdW5zaWduZWQgbG9uZwkgICB1YXJ0X2ZsYWdzOwkgLyogZGVmYXVsdCB1YXJ0IGZsYWdzICovCisKKwl1bnNpZ25lZCBsb25nCSAgIHVjb247CSAvKiB2YWx1ZSBvZiB1Y29uIGZvciBwb3J0ICovCisJdW5zaWduZWQgbG9uZwkgICB1bGNvbjsJIC8qIHZhbHVlIG9mIHVsY29uIGZvciBwb3J0ICovCisJdW5zaWduZWQgbG9uZwkgICB1ZmNvbjsJIC8qIHZhbHVlIG9mIHVmY29uIGZvciBwb3J0ICovCisKKwlzdHJ1Y3QgczNjMjR4eF91YXJ0X2Nsa3NyYyAqY2xvY2tzOworCXVuc2lnbmVkIGludAkJICAgIGNsb2Nrc19zaXplOworfTsKKworLyogczNjMjR4eF91YXJ0X2RldnMKKyAqCisgKiB0aGlzIGlzIGV4cG9ydGVkIGZyb20gdGhlIGNvcmUgYXMgd2UgY2Fubm90IHVzZSBkcml2ZXJfcmVnaXN0ZXIoKSwKKyAqIG9yIHBsYXRmb3JtX2FkZF9kZXZpY2UoKSBiZWZvcmUgdGhlIGNvbnNvbGVfaW5pdGNhbGwoKQorKi8KKworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnMzYzI0eHhfdWFydF9kZXZzWzNdOworCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiBfX0FTTV9BUk1fUkVHU19TRVJJQUxfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3Mtc3BpLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3Mtc3BpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I1MDJhOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1zcGkuaApAQCAtMCwwICsxLDU2IEBACisvKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3Mtc3BpLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgRmV0cm9uIEdtYkgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFMzQzI0MTAgU1BJIHJlZ2lzdGVyIGRlZmluaXRpb24KKyAqCisgKiAgQ2hhbmdlbG9nOgorICogICAgMjAtMDQtMjAwNCAgICAgS0YgICAgICBDcmVhdGVkIGZpbGUKKyAqICAgIDA0LTEwLTIwMDQgICAgIEJKRCAgICAgUmVtb3ZlZCBWQSBhZGRyZXNzIChubyBsb25nZXIgbWFwcGVkKQorICoJCQkgICAgIHRpZGllZCBmaWxlIGZvciBzdWJtaXNzaW9uCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX1JFR1NfU1BJX0gKKyNkZWZpbmUgX19BU01fQVJDSF9SRUdTX1NQSV9ICisKKworI2RlZmluZSBTM0MyNDEwX1NQQ09OCSgweDAwKQorCisjZGVmaW5lIFMzQzI0MTBfU1BDT05fU01PRF9ETUEJICAoMjw8NSkJLyogRE1BIG1vZGUgKi8KKyNkZWZpbmUgUzNDMjQxMF9TUENPTl9TTU9EX0lOVAkgICgxPDw1KQkvKiBpbnRlcnJ1cHQgbW9kZSAqLworI2RlZmluZSBTM0MyNDEwX1NQQ09OX1NNT0RfUE9MTCAgICgwPDw1KQkvKiBwb2xsaW5nIG1vZGUgKi8KKyNkZWZpbmUgUzNDMjQxMF9TUENPTl9FTlNDSwkgICgxPDw0KQkvKiBFbmFibGUgU0NLICovCisjZGVmaW5lIFMzQzI0MTBfU1BDT05fTVNUUgkgICgxPDwzKQkvKiBNYXN0ZXIvU2xhdmUgc2VsZWN0CisJCQkJCQkgICAwOiBzbGF2ZSwgMTogbWFzdGVyICovCisjZGVmaW5lIFMzQzI0MTBfU1BDT05fQ1BPTF9ISUdICSAgKDE8PDIpCS8qIENsb2NrIHBvbGFyaXR5IHNlbGVjdCAqLworI2RlZmluZSBTM0MyNDEwX1NQQ09OX0NQT0xfTE9XCSAgKDA8PDIpCS8qIENsb2NrIHBvbGFyaXR5IHNlbGVjdCAqLworCisjZGVmaW5lIFMzQzI0MTBfU1BDT05fQ1BIQV9GTVRCCSAgKDE8PDEpCS8qIENsb2NrIFBoYXNlIFNlbGVjdCAqLworI2RlZmluZSBTM0MyNDEwX1NQQ09OX0NQSEFfRk1UQQkgICgwPDwxKQkvKiBDbG9jayBQaGFzZSBTZWxlY3QgKi8KKworI2RlZmluZSBTM0MyNDEwX1NQQ09OX1RBR0QJICAoMTw8MCkJLyogVHggYXV0byBnYXJiYWdlIGRhdGEgbW9kZSAqLworCisKKyNkZWZpbmUgUzNDMjQxMF9TUFNUQQkgKDB4MDQpCisKKyNkZWZpbmUgUzNDMjQxMF9TUFNUQV9EQ09MCSAgKDE8PDIpCS8qIERhdGEgQ29sbGlzaW9uIEVycm9yICovCisjZGVmaW5lIFMzQzI0MTBfU1BTVEFfTVVMRAkgICgxPDwxKQkvKiBNdWx0aSBNYXN0ZXIgRXJyb3IgKi8KKyNkZWZpbmUgUzNDMjQxMF9TUFNUQV9SRUFEWQkgICgxPDwwKQkvKiBEYXRhIFR4L1J4IHJlYWR5ICovCisKKworI2RlZmluZSBTM0MyNDEwX1NQUElOCSAoMHgwOCkKKworI2RlZmluZSBTM0MyNDEwX1NQUElOX0VOTVVMCSAgKDE8PDIpCS8qIE11bHRpIE1hc3RlciBFcnJvciBkZXRlY3QgKi8KKyNkZWZpbmUgUzNDMjQxMF9TUFBJTl9SRVNFUlZFRAkgICgxPDwxKQorI2RlZmluZSBTM0MyNDEwX1NQUElOX0tFRVAJICAoMTw8MCkJLyogTWFzdGVyIE91dCBrZWVwICovCisKKworI2RlZmluZSBTM0MyNDEwX1NQUFJFCSAoMHgwQykKKyNkZWZpbmUgUzNDMjQxMF9TUFREQVQJICgweDEwKQorI2RlZmluZSBTM0MyNDEwX1NQUkRBVAkgKDB4MTQpCisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX1JFR1NfU1BJX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy10aW1lci5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLXRpbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY5MDY0ZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy10aW1lci5oCkBAIC0wLDAgKzEsMTEzIEBACisvKiBsaW51eC9pbmNsdWRlL2FzbS9hcmNoLXMzYzI0MTAvcmVncy10aW1lci5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAzIFNpbXRlYyBFbGVjdHJvbmljcyA8bGludXhAc2ltdGVjLmNvLnVrPgorICoJCSAgICAgIGh0dHA6Ly93d3cuc2ltdGVjLmNvLnVrL3Byb2R1Y3RzL1NXTElOVVgvCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBTM0MyNDEwIFRpbWVyIGNvbmZpZ3VyYXRpb24KKyAqCisgKiAgQ2hhbmdlbG9nOgorICogICAgMDUtMDYtMjAwMyAgICAgQkpEICAgICBDcmVhdGVkIGZpbGUKKyAqICAgIDI2LTA2LTIwMDMgICAgIEJKRCAgICAgQWRkZWQgbW9yZSB0aW1lciBkZWZpbml0aW9ucyB0byBtdXggLyBjb250cm9sCisgKiAgICAxMi0wMy0yMDA0ICAgICBCSkQgICAgIFVwZGF0ZWQgaW5jbHVkZSBwcm90ZWN0aW9uCisgKiAgICAxMC0wMi0yMDA1ICAgICBCSkQgICAgIEFkZGVkIFMzQzI0MTBfVENGRzFfTVVYNF9TSElGVCAoR3VpbGxhdW1lIEdvdXJhdCkKKyAqICAgIDEwLTAzLTIwMDUgICAgIExDVlIgICAgQ2hhbmdlZCBTM0MyNDEwX1ZBIHRvIFMzQzI0WFhfVkEKKyovCisKKworI2lmbmRlZiBfX0FTTV9BUkNIX1JFR1NfVElNRVJfSAorI2RlZmluZSBfX0FTTV9BUkNIX1JFR1NfVElNRVJfSCAiJElkOiB0aW1lci5oLHYgMS40IDIwMDMvMDUvMDYgMTk6MzA6NTAgYmVuIEV4cCAkIgorCisjZGVmaW5lIFMzQzI0MTBfVElNRVJSRUcoeCkgKFMzQzI0WFhfVkFfVElNRVIgKyAoeCkpCisjZGVmaW5lIFMzQzI0MTBfVElNRVJSRUcyKHRtcixyZWcpIFMzQzI0MTBfVElNRVJSRUcoKHJlZykrMHgwYysoKHRtcikqMHgwYykpCisKKyNkZWZpbmUgUzNDMjQxMF9UQ0ZHMAkgICAgICBTM0MyNDEwX1RJTUVSUkVHKDB4MDApCisjZGVmaW5lIFMzQzI0MTBfVENGRzEJICAgICAgUzNDMjQxMF9USU1FUlJFRygweDA0KQorI2RlZmluZSBTM0MyNDEwX1RDT04JICAgICAgUzNDMjQxMF9USU1FUlJFRygweDA4KQorCisjZGVmaW5lIFMzQzI0MTBfVENGR19QUkVTQ0FMRVIwX01BU0sgKDI1NTw8MCkKKyNkZWZpbmUgUzNDMjQxMF9UQ0ZHX1BSRVNDQUxFUjFfTUFTSyAoMjU1PDw4KQorI2RlZmluZSBTM0MyNDEwX1RDRkdfUFJFU0NBTEVSMV9TSElGVCAoOCkKKyNkZWZpbmUgUzNDMjQxMF9UQ0ZHX0RFQURaT05FX01BU0sgICAoMjU1PDwxNikKKyNkZWZpbmUgUzNDMjQxMF9UQ0ZHX0RFQURaT05FX1NISUZUICAoMTYpCisKKyNkZWZpbmUgUzNDMjQxMF9UQ0ZHMV9NVVg0X0RJVjIJICAoMDw8MTYpCisjZGVmaW5lIFMzQzI0MTBfVENGRzFfTVVYNF9ESVY0CSAgKDE8PDE2KQorI2RlZmluZSBTM0MyNDEwX1RDRkcxX01VWDRfRElWOAkgICgyPDwxNikKKyNkZWZpbmUgUzNDMjQxMF9UQ0ZHMV9NVVg0X0RJVjE2ICAoMzw8MTYpCisjZGVmaW5lIFMzQzI0MTBfVENGRzFfTVVYNF9UQ0xLMSAgKDQ8PDE2KQorI2RlZmluZSBTM0MyNDEwX1RDRkcxX01VWDRfTUFTSwkgICgxNTw8MTYpCisjZGVmaW5lIFMzQzI0MTBfVENGRzFfTVVYNF9TSElGVCAgKDE2KQorCisjZGVmaW5lIFMzQzI0MTBfVENGRzFfTVVYM19ESVYyCSAgKDA8PDEyKQorI2RlZmluZSBTM0MyNDEwX1RDRkcxX01VWDNfRElWNAkgICgxPDwxMikKKyNkZWZpbmUgUzNDMjQxMF9UQ0ZHMV9NVVgzX0RJVjgJICAoMjw8MTIpCisjZGVmaW5lIFMzQzI0MTBfVENGRzFfTVVYM19ESVYxNiAgKDM8PDEyKQorI2RlZmluZSBTM0MyNDEwX1RDRkcxX01VWDNfVENMSzEgICg0PDwxMikKKyNkZWZpbmUgUzNDMjQxMF9UQ0ZHMV9NVVgzX01BU0sJICAoMTU8PDEyKQorCisKKyNkZWZpbmUgUzNDMjQxMF9UQ0ZHMV9NVVgyX0RJVjIJICAoMDw8OCkKKyNkZWZpbmUgUzNDMjQxMF9UQ0ZHMV9NVVgyX0RJVjQJICAoMTw8OCkKKyNkZWZpbmUgUzNDMjQxMF9UQ0ZHMV9NVVgyX0RJVjgJICAoMjw8OCkKKyNkZWZpbmUgUzNDMjQxMF9UQ0ZHMV9NVVgyX0RJVjE2ICAoMzw8OCkKKyNkZWZpbmUgUzNDMjQxMF9UQ0ZHMV9NVVgyX1RDTEsxICAoNDw8OCkKKyNkZWZpbmUgUzNDMjQxMF9UQ0ZHMV9NVVgyX01BU0sJICAoMTU8PDgpCisKKworI2RlZmluZSBTM0MyNDEwX1RDRkcxX01VWDFfRElWMgkgICgwPDw0KQorI2RlZmluZSBTM0MyNDEwX1RDRkcxX01VWDFfRElWNAkgICgxPDw0KQorI2RlZmluZSBTM0MyNDEwX1RDRkcxX01VWDFfRElWOAkgICgyPDw0KQorI2RlZmluZSBTM0MyNDEwX1RDRkcxX01VWDFfRElWMTYgICgzPDw0KQorI2RlZmluZSBTM0MyNDEwX1RDRkcxX01VWDFfVENMSzAgICg0PDw0KQorI2RlZmluZSBTM0MyNDEwX1RDRkcxX01VWDFfTUFTSwkgICgxNTw8NCkKKworI2RlZmluZSBTM0MyNDEwX1RDRkcxX01VWDBfRElWMgkgICgwPDwwKQorI2RlZmluZSBTM0MyNDEwX1RDRkcxX01VWDBfRElWNAkgICgxPDwwKQorI2RlZmluZSBTM0MyNDEwX1RDRkcxX01VWDBfRElWOAkgICgyPDwwKQorI2RlZmluZSBTM0MyNDEwX1RDRkcxX01VWDBfRElWMTYgICgzPDwwKQorI2RlZmluZSBTM0MyNDEwX1RDRkcxX01VWDBfVENMSzAgICg0PDwwKQorI2RlZmluZSBTM0MyNDEwX1RDRkcxX01VWDBfTUFTSwkgICgxNTw8MCkKKworLyogZm9yIGVhY2ggdGltZXIsIHdlIGhhdmUgYW4gY291bnQgYnVmZmVyLCBhbiBjb21wYXJlIGJ1ZmZlciBhbmQKKyAqIGFuIG9ic2VydmF0aW9uIGJ1ZmZlcgorKi8KKworLyogV0FSTklORyAtIHRpbWVyIDQgaGFzIG5vIGJ1ZmZlciByZWcsIGFuZCBpdCdzIG9ic2VydmF0aW9uIGlzIGF0ICs0ICovCisKKyNkZWZpbmUgUzNDMjQxMF9UQ05UQih0bXIpICAgIFMzQzI0MTBfVElNRVJSRUcyKHRtciwgMHgwMCkKKyNkZWZpbmUgUzNDMjQxMF9UQ01QQih0bXIpICAgIFMzQzI0MTBfVElNRVJSRUcyKHRtciwgMHgwNCkKKyNkZWZpbmUgUzNDMjQxMF9UQ05UTyh0bXIpICAgIFMzQzI0MTBfVElNRVJSRUcyKHRtciwgKCgodG1yKSA9PSA0KSA/IDB4MDQgOiAweDA4KSkKKworI2RlZmluZSBTM0MyNDEwX1RDT05fVDRSRUxPQUQJICAoMTw8MjIpCisjZGVmaW5lIFMzQzI0MTBfVENPTl9UNE1BTlVBTFVQRCAgKDE8PDIxKQorI2RlZmluZSBTM0MyNDEwX1RDT05fVDRTVEFSVAkgICgxPDwyMCkKKworI2RlZmluZSBTM0MyNDEwX1RDT05fVDNSRUxPQUQJICAoMTw8MTkpCisjZGVmaW5lIFMzQzI0MTBfVENPTl9UM0lOVkVSVAkgICgxPDwxOCkKKyNkZWZpbmUgUzNDMjQxMF9UQ09OX1QzTUFOVUFMVVBEICAoMTw8MTcpCisjZGVmaW5lIFMzQzI0MTBfVENPTl9UM1NUQVJUCSAgKDE8PDE2KQorCisjZGVmaW5lIFMzQzI0MTBfVENPTl9UMlJFTE9BRAkgICgxPDwxNSkKKyNkZWZpbmUgUzNDMjQxMF9UQ09OX1QySU5WRVJUCSAgKDE8PDE0KQorI2RlZmluZSBTM0MyNDEwX1RDT05fVDJNQU5VQUxVUEQgICgxPDwxMykKKyNkZWZpbmUgUzNDMjQxMF9UQ09OX1QyU1RBUlQJICAoMTw8MTIpCisKKyNkZWZpbmUgUzNDMjQxMF9UQ09OX1QxUkVMT0FECSAgKDE8PDExKQorI2RlZmluZSBTM0MyNDEwX1RDT05fVDFJTlZFUlQJICAoMTw8MTApCisjZGVmaW5lIFMzQzI0MTBfVENPTl9UMU1BTlVBTFVQRCAgKDE8PDkpCisjZGVmaW5lIFMzQzI0MTBfVENPTl9UMVNUQVJUCSAgKDE8PDgpCisKKyNkZWZpbmUgUzNDMjQxMF9UQ09OX1QwREVBRFpPTkUJICAoMTw8NCkKKyNkZWZpbmUgUzNDMjQxMF9UQ09OX1QwUkVMT0FECSAgKDE8PDMpCisjZGVmaW5lIFMzQzI0MTBfVENPTl9UMElOVkVSVAkgICgxPDwyKQorI2RlZmluZSBTM0MyNDEwX1RDT05fVDBNQU5VQUxVUEQgICgxPDwxKQorI2RlZmluZSBTM0MyNDEwX1RDT05fVDBTVEFSVAkgICgxPDwwKQorCisjZW5kaWYgLyogIF9fQVNNX0FSQ0hfUkVHU19USU1FUl9IICovCisKKworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3MtdWRjLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3MtdWRjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmYzMTViNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy11ZGMuaApAQCAtMCwwICsxLDE2NCBAQAorLyogbGludXgvaW5jbHVkZS9hc20vYXJjaC1zM2MyNDEwL3JlZ3MtdWRjLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgSGVyYmVydCBQb2V0emwgPGhlcmJlcnRAMTN0aGZsb29yLmF0PgorICoKKyAqIFRoaXMgaW5jbHVkZSBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgQ2hhbmdlbG9nOgorICogICAgMDEtMDgtMjAwNAlJbml0aWFsIGNyZWF0aW9uCisgKiAgICAxMi0wOS0yMDA0CUNsZWFudXAgZm9yIHN1Ym1pc3Npb24KKyAqICAgIDI0LTEwLTIwMDQJRml4ZWQgUzNDMjQxMF9VRENfTUFYUF9SRUcgZGVmaW5pdGlvbgorICogICAgMTAtMDMtMjAwNQlDaGFuZ2VkIFMzQzI0MTBfVkEgdG8gUzNDMjRYWF9WQQorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9SRUdTX1VEQ19ICisjZGVmaW5lIF9fQVNNX0FSQ0hfUkVHU19VRENfSAorCisKKyNkZWZpbmUgUzNDMjQxMF9VU0JEUkVHKHgpICgoeCkgKyBTM0MyNFhYX1ZBX1VTQkRFVikKKworI2RlZmluZSBTM0MyNDEwX1VEQ19GVU5DX0FERFJfUkVHCVMzQzI0MTBfVVNCRFJFRygweDAxNDApCisjZGVmaW5lIFMzQzI0MTBfVURDX1BXUl9SRUcJCVMzQzI0MTBfVVNCRFJFRygweDAxNDQpCisjZGVmaW5lIFMzQzI0MTBfVURDX0VQX0lOVF9SRUcJCVMzQzI0MTBfVVNCRFJFRygweDAxNDgpCisKKyNkZWZpbmUgUzNDMjQxMF9VRENfVVNCX0lOVF9SRUcJCVMzQzI0MTBfVVNCRFJFRygweDAxNTgpCisjZGVmaW5lIFMzQzI0MTBfVURDX0VQX0lOVF9FTl9SRUcJUzNDMjQxMF9VU0JEUkVHKDB4MDE1YykKKworI2RlZmluZSBTM0MyNDEwX1VEQ19VU0JfSU5UX0VOX1JFRwlTM0MyNDEwX1VTQkRSRUcoMHgwMTZjKQorCisjZGVmaW5lIFMzQzI0MTBfVURDX0ZSQU1FX05VTTFfUkVHCVMzQzI0MTBfVVNCRFJFRygweDAxNzApCisjZGVmaW5lIFMzQzI0MTBfVURDX0ZSQU1FX05VTTJfUkVHCVMzQzI0MTBfVVNCRFJFRygweDAxNzQpCisKKyNkZWZpbmUgUzNDMjQxMF9VRENfRVAwX0ZJRk9fUkVHCVMzQzI0MTBfVVNCRFJFRygweDAxYzApCisjZGVmaW5lIFMzQzI0MTBfVURDX0VQMV9GSUZPX1JFRwlTM0MyNDEwX1VTQkRSRUcoMHgwMWM0KQorI2RlZmluZSBTM0MyNDEwX1VEQ19FUDJfRklGT19SRUcJUzNDMjQxMF9VU0JEUkVHKDB4MDFjOCkKKyNkZWZpbmUgUzNDMjQxMF9VRENfRVAzX0ZJRk9fUkVHCVMzQzI0MTBfVVNCRFJFRygweDAxY2MpCisjZGVmaW5lIFMzQzI0MTBfVURDX0VQNF9GSUZPX1JFRwlTM0MyNDEwX1VTQkRSRUcoMHgwMWQwKQorCisjZGVmaW5lIFMzQzI0MTBfVURDX0VQMV9ETUFfQ09OCQlTM0MyNDEwX1VTQkRSRUcoMHgwMjAwKQorI2RlZmluZSBTM0MyNDEwX1VEQ19FUDFfRE1BX1VOSVQJUzNDMjQxMF9VU0JEUkVHKDB4MDIwNCkKKyNkZWZpbmUgUzNDMjQxMF9VRENfRVAxX0RNQV9GSUZPCVMzQzI0MTBfVVNCRFJFRygweDAyMDgpCisjZGVmaW5lIFMzQzI0MTBfVURDX0VQMV9ETUFfVFRDX0wJUzNDMjQxMF9VU0JEUkVHKDB4MDIwYykKKyNkZWZpbmUgUzNDMjQxMF9VRENfRVAxX0RNQV9UVENfTQlTM0MyNDEwX1VTQkRSRUcoMHgwMjEwKQorI2RlZmluZSBTM0MyNDEwX1VEQ19FUDFfRE1BX1RUQ19ICVMzQzI0MTBfVVNCRFJFRygweDAyMTQpCisKKyNkZWZpbmUgUzNDMjQxMF9VRENfRVAyX0RNQV9DT04JCVMzQzI0MTBfVVNCRFJFRygweDAyMTgpCisjZGVmaW5lIFMzQzI0MTBfVURDX0VQMl9ETUFfVU5JVAlTM0MyNDEwX1VTQkRSRUcoMHgwMjFjKQorI2RlZmluZSBTM0MyNDEwX1VEQ19FUDJfRE1BX0ZJRk8JUzNDMjQxMF9VU0JEUkVHKDB4MDIyMCkKKyNkZWZpbmUgUzNDMjQxMF9VRENfRVAyX0RNQV9UVENfTAlTM0MyNDEwX1VTQkRSRUcoMHgwMjI0KQorI2RlZmluZSBTM0MyNDEwX1VEQ19FUDJfRE1BX1RUQ19NCVMzQzI0MTBfVVNCRFJFRygweDAyMjgpCisjZGVmaW5lIFMzQzI0MTBfVURDX0VQMl9ETUFfVFRDX0gJUzNDMjQxMF9VU0JEUkVHKDB4MDIyYykKKworI2RlZmluZSBTM0MyNDEwX1VEQ19FUDNfRE1BX0NPTgkJUzNDMjQxMF9VU0JEUkVHKDB4MDI0MCkKKyNkZWZpbmUgUzNDMjQxMF9VRENfRVAzX0RNQV9VTklUCVMzQzI0MTBfVVNCRFJFRygweDAyNDQpCisjZGVmaW5lIFMzQzI0MTBfVURDX0VQM19ETUFfRklGTwlTM0MyNDEwX1VTQkRSRUcoMHgwMjQ4KQorI2RlZmluZSBTM0MyNDEwX1VEQ19FUDNfRE1BX1RUQ19MCVMzQzI0MTBfVVNCRFJFRygweDAyNGMpCisjZGVmaW5lIFMzQzI0MTBfVURDX0VQM19ETUFfVFRDX00JUzNDMjQxMF9VU0JEUkVHKDB4MDI1MCkKKyNkZWZpbmUgUzNDMjQxMF9VRENfRVAzX0RNQV9UVENfSAlTM0MyNDEwX1VTQkRSRUcoMHgwMjU0KQorCisjZGVmaW5lIFMzQzI0MTBfVURDX0VQNF9ETUFfQ09OCQlTM0MyNDEwX1VTQkRSRUcoMHgwMjU4KQorI2RlZmluZSBTM0MyNDEwX1VEQ19FUDRfRE1BX1VOSVQJUzNDMjQxMF9VU0JEUkVHKDB4MDI1YykKKyNkZWZpbmUgUzNDMjQxMF9VRENfRVA0X0RNQV9GSUZPCVMzQzI0MTBfVVNCRFJFRygweDAyNjApCisjZGVmaW5lIFMzQzI0MTBfVURDX0VQNF9ETUFfVFRDX0wJUzNDMjQxMF9VU0JEUkVHKDB4MDI2NCkKKyNkZWZpbmUgUzNDMjQxMF9VRENfRVA0X0RNQV9UVENfTQlTM0MyNDEwX1VTQkRSRUcoMHgwMjY4KQorI2RlZmluZSBTM0MyNDEwX1VEQ19FUDRfRE1BX1RUQ19ICVMzQzI0MTBfVVNCRFJFRygweDAyNmMpCisKKyNkZWZpbmUgUzNDMjQxMF9VRENfSU5ERVhfUkVHCQlTM0MyNDEwX1VTQkRSRUcoMHgwMTc4KQorCisvKiBpbmRleGVkIHJlZ2lzdGVycyAqLworCisjZGVmaW5lIFMzQzI0MTBfVURDX01BWFBfUkVHCQlTM0MyNDEwX1VTQkRSRUcoMHgwMTgwKQorCisjZGVmaW5lIFMzQzI0MTBfVURDX0VQMF9DU1JfUkVHCQlTM0MyNDEwX1VTQkRSRUcoMHgwMTg0KQorCisjZGVmaW5lIFMzQzI0MTBfVURDX0lOX0NTUjFfUkVHCQlTM0MyNDEwX1VTQkRSRUcoMHgwMTg0KQorI2RlZmluZSBTM0MyNDEwX1VEQ19JTl9DU1IyX1JFRwkJUzNDMjQxMF9VU0JEUkVHKDB4MDE4OCkKKworI2RlZmluZSBTM0MyNDEwX1VEQ19PVVRfQ1NSMV9SRUcJUzNDMjQxMF9VU0JEUkVHKDB4MDE5MCkKKyNkZWZpbmUgUzNDMjQxMF9VRENfT1VUX0NTUjJfUkVHCVMzQzI0MTBfVVNCRFJFRygweDAxOTQpCisjZGVmaW5lIFMzQzI0MTBfVURDX09VVF9GSUZPX0NOVDFfUkVHCVMzQzI0MTBfVVNCRFJFRygweDAxOTgpCisjZGVmaW5lIFMzQzI0MTBfVURDX09VVF9GSUZPX0NOVDJfUkVHCVMzQzI0MTBfVVNCRFJFRygweDAxOWMpCisKKworCisjZGVmaW5lIFMzQzI0MTBfVURDX1BXUl9JU09VUAkJKDE8PDcpIC8vIFIvVworI2RlZmluZSBTM0MyNDEwX1VEQ19QV1JfUkVTRVQJCSgxPDwzKSAvLyBSCisjZGVmaW5lIFMzQzI0MTBfVURDX1BXUl9SRVNVTUUJCSgxPDwyKSAvLyBSL1cKKyNkZWZpbmUgUzNDMjQxMF9VRENfUFdSX1NVU1BFTkQJCSgxPDwxKSAvLyBSCisjZGVmaW5lIFMzQzI0MTBfVURDX1BXUl9FTlNVU1BFTkQJKDE8PDApIC8vIFIvVworCisjZGVmaW5lIFMzQzI0MTBfVURDX1BXUl9ERUZBVUxUCQkweDAwCisKKyNkZWZpbmUgUzNDMjQxMF9VRENfSU5UX0VQNAkJKDE8PDQpIC8vIFIvVyAoY2xlYXIgb25seSkKKyNkZWZpbmUgUzNDMjQxMF9VRENfSU5UX0VQMwkJKDE8PDMpIC8vIFIvVyAoY2xlYXIgb25seSkKKyNkZWZpbmUgUzNDMjQxMF9VRENfSU5UX0VQMgkJKDE8PDIpIC8vIFIvVyAoY2xlYXIgb25seSkKKyNkZWZpbmUgUzNDMjQxMF9VRENfSU5UX0VQMQkJKDE8PDEpIC8vIFIvVyAoY2xlYXIgb25seSkKKyNkZWZpbmUgUzNDMjQxMF9VRENfSU5UX0VQMAkJKDE8PDApIC8vIFIvVyAoY2xlYXIgb25seSkKKworI2RlZmluZSBTM0MyNDEwX1VEQ19VU0JJTlRfUkVTRVQJKDE8PDIpIC8vIFIvVyAoY2xlYXIgb25seSkKKyNkZWZpbmUgUzNDMjQxMF9VRENfVVNCSU5UX1JFU1VNRQkoMTw8MSkgLy8gUi9XIChjbGVhciBvbmx5KQorI2RlZmluZSBTM0MyNDEwX1VEQ19VU0JJTlRfU1VTUEVORAkoMTw8MCkgLy8gUi9XIChjbGVhciBvbmx5KQorCisjZGVmaW5lIFMzQzI0MTBfVURDX0lOVEVfRVA0CQkoMTw8NCkgLy8gUi9XCisjZGVmaW5lIFMzQzI0MTBfVURDX0lOVEVfRVAzCQkoMTw8MykgLy8gUi9XCisjZGVmaW5lIFMzQzI0MTBfVURDX0lOVEVfRVAyCQkoMTw8MikgLy8gUi9XCisjZGVmaW5lIFMzQzI0MTBfVURDX0lOVEVfRVAxCQkoMTw8MSkgLy8gUi9XCisjZGVmaW5lIFMzQzI0MTBfVURDX0lOVEVfRVAwCQkoMTw8MCkgLy8gUi9XCisKKyNkZWZpbmUgUzNDMjQxMF9VRENfVVNCSU5URV9SRVNFVAkoMTw8MikgLy8gUi9XCisjZGVmaW5lIFMzQzI0MTBfVURDX1VTQklOVEVfU1VTUEVORAkoMTw8MCkgLy8gUi9XCisKKworI2RlZmluZSBTM0MyNDEwX1VEQ19JTkRFWF9FUDAJCSgweDAwKQorI2RlZmluZSBTM0MyNDEwX1VEQ19JTkRFWF9FUDEJCSgweDAxKSAvLyA/PworI2RlZmluZSBTM0MyNDEwX1VEQ19JTkRFWF9FUDIJCSgweDAyKSAvLyA/PworI2RlZmluZSBTM0MyNDEwX1VEQ19JTkRFWF9FUDMJCSgweDAzKSAvLyA/PworI2RlZmluZSBTM0MyNDEwX1VEQ19JTkRFWF9FUDQJCSgweDA0KSAvLyA/PworCisjZGVmaW5lIFMzQzI0MTBfVURDX0lDU1IxX0NMUkRUCQkoMTw8NikgLy8gUi9XCisjZGVmaW5lIFMzQzI0MTBfVURDX0lDU1IxX1NFTlRTVEwJKDE8PDUpIC8vIFIvVyAoY2xlYXIgb25seSkKKyNkZWZpbmUgUzNDMjQxMF9VRENfSUNTUjFfU0VORFNUTAkoMTw8NCkgLy8gUi9XCisjZGVmaW5lIFMzQzI0MTBfVURDX0lDU1IxX0ZGTFVTSAkoMTw8MykgLy8gVyAgIChzZXQgb25seSkKKyNkZWZpbmUgUzNDMjQxMF9VRENfSUNTUjFfVU5EUlVOCSgxPDwyKSAvLyBSL1cgKGNsZWFyIG9ubHkpCisjZGVmaW5lIFMzQzI0MTBfVURDX0lDU1IxX1BLVFJEWQkoMTw8MCkgLy8gUi9XIChzZXQgb25seSkKKworI2RlZmluZSBTM0MyNDEwX1VEQ19JQ1NSMl9BVVRPU0VUCSgxPDw3KSAvLyBSL1cKKyNkZWZpbmUgUzNDMjQxMF9VRENfSUNTUjJfSVNPCQkoMTw8NikgLy8gUi9XCisjZGVmaW5lIFMzQzI0MTBfVURDX0lDU1IyX01PREVJTgkoMTw8NSkgLy8gUi9XCisjZGVmaW5lIFMzQzI0MTBfVURDX0lDU1IyX0RNQUlFTgkoMTw8NCkgLy8gUi9XCisKKyNkZWZpbmUgUzNDMjQxMF9VRENfT0NTUjFfQ0xSRFQJCSgxPDw3KSAvLyBSL1cKKyNkZWZpbmUgUzNDMjQxMF9VRENfT0NTUjFfU0VOVFNUTAkoMTw8NikgLy8gUi9XIChjbGVhciBvbmx5KQorI2RlZmluZSBTM0MyNDEwX1VEQ19PQ1NSMV9TRU5EU1RMCSgxPDw1KSAvLyBSL1cKKyNkZWZpbmUgUzNDMjQxMF9VRENfT0NTUjFfRkZMVVNICSgxPDw0KSAvLyBSL1cKKyNkZWZpbmUgUzNDMjQxMF9VRENfT0NTUjFfREVSUk9SCSgxPDwzKSAvLyBSCisjZGVmaW5lIFMzQzI0MTBfVURDX09DU1IxX09WUlJVTgkoMTw8MikgLy8gUi9XIChjbGVhciBvbmx5KQorI2RlZmluZSBTM0MyNDEwX1VEQ19PQ1NSMV9QS1RSRFkJKDE8PDApIC8vIFIvVyAoY2xlYXIgb25seSkKKworI2RlZmluZSBTM0MyNDEwX1VEQ19PQ1NSMl9BVVRPQ0xSCSgxPDw3KSAvLyBSL1cKKyNkZWZpbmUgUzNDMjQxMF9VRENfT0NTUjJfSVNPCQkoMTw8NikgLy8gUi9XCisjZGVmaW5lIFMzQzI0MTBfVURDX09DU1IyX0RNQUlFTgkoMTw8NSkgLy8gUi9XCisKKyNkZWZpbmUgUzNDMjQxMF9VRENfU0VUSVgoeCkJICAgIFwKKwlfX3Jhd193cml0ZWwoUzNDMjQxMF9VRENfSU5ERVhfICMjIHgsIFMzQzI0MTBfVURDX0lOREVYX1JFRyk7CisKKworI2RlZmluZSBTM0MyNDEwX1VEQ19FUDBfQ1NSX09QS1JEWQkoMTw8MCkKKyNkZWZpbmUgUzNDMjQxMF9VRENfRVAwX0NTUl9JUEtSRFkJKDE8PDEpCisjZGVmaW5lIFMzQzI0MTBfVURDX0VQMF9DU1JfU0VOVFNUTAkoMTw8MikKKyNkZWZpbmUgUzNDMjQxMF9VRENfRVAwX0NTUl9ERQkJKDE8PDMpCisjZGVmaW5lIFMzQzI0MTBfVURDX0VQMF9DU1JfU0UJCSgxPDw0KQorI2RlZmluZSBTM0MyNDEwX1VEQ19FUDBfQ1NSX1NFTkRTVEwJKDE8PDUpCisjZGVmaW5lIFMzQzI0MTBfVURDX0VQMF9DU1JfU09QS1RSRFkJKDE8PDYpCisjZGVmaW5lIFMzQzI0MTBfVURDX0VQMF9DU1JfU1NFCSgxPDw3KQorCisjZGVmaW5lIFMzQzI0MTBfVURDX01BWFBfOAkJKDE8PDApCisjZGVmaW5lIFMzQzI0MTBfVURDX01BWFBfMTYJCSgxPDwxKQorI2RlZmluZSBTM0MyNDEwX1VEQ19NQVhQXzMyCQkoMTw8MikKKyNkZWZpbmUgUzNDMjQxMF9VRENfTUFYUF82NAkJKDE8PDMpCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3Mtd2F0Y2hkb2cuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy13YXRjaGRvZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxOTljYTYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3Mtd2F0Y2hkb2cuaApAQCAtMCwwICsxLDQ2IEBACisvKiBsaW51eC9pbmNsdWRlL2FzbS9hcmNoLXMzYzI0MTAvcmVnczB3YXRjaGRvZy5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAzIFNpbXRlYyBFbGVjdHJvbmljcyA8bGludXhAc2ltdGVjLmNvLnVrPgorICoJCSAgICAgIGh0dHA6Ly93d3cuc2ltdGVjLmNvLnVrL3Byb2R1Y3RzL1NXTElOVVgvCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBTM0MyNDEwIFdhdGNoZG9nIHRpbWVyIGNvbnRyb2wKKyAqCisgKiAgQ2hhbmdlbG9nOgorICogICAgMjEtMDYtMjAwMyAgICAgQkpEICAgICBDcmVhdGVkIGZpbGUKKyAqICAgIDEyLTAzLTIwMDQgICAgIEJKRCAgICAgVXBkYXRlZCBpbmNsdWRlIHByb3RlY3Rpb24KKyAqICAgIDEwLTAzLTIwMDUgICAgIExDVlIgICAgQ2hhbmdlZCBTM0MyNDEwX1ZBIHRvIFMzQzI0WFhfVkEKKyovCisKKworI2lmbmRlZiBfX0FTTV9BUkNIX1JFR1NfV0FUQ0hET0dfSAorI2RlZmluZSBfX0FTTV9BUkNIX1JFR1NfV0FUQ0hET0dfSCAiJElkOiB3YXRjaGRvZy5oLHYgMS4yIDIwMDMvMDQvMjkgMTM6MzE6MDkgYmVuIEV4cCAkIgorCisjZGVmaW5lIFMzQzI0MTBfV0RPR1JFRyh4KSAoKHgpICsgUzNDMjRYWF9WQV9XQVRDSERPRykKKworI2RlZmluZSBTM0MyNDEwX1dUQ09OCSAgIFMzQzI0MTBfV0RPR1JFRygweDAwKQorI2RlZmluZSBTM0MyNDEwX1dUREFUCSAgIFMzQzI0MTBfV0RPR1JFRygweDA0KQorI2RlZmluZSBTM0MyNDEwX1dUQ05UCSAgIFMzQzI0MTBfV0RPR1JFRygweDA4KQorCisvKiB0aGUgd2F0Y2hkb2cgY2FuIGVpdGhlciBnZW5lcmF0ZSBhIHJlc2V0IHB1bHNlLCBvciBhbgorICogaW50ZXJydXB0LgorICovCisKKyNkZWZpbmUgUzNDMjQxMF9XVENPTl9SU1RFTiAgICgweDAxKQorI2RlZmluZSBTM0MyNDEwX1dUQ09OX0lOVEVOICAgKDE8PDIpCisjZGVmaW5lIFMzQzI0MTBfV1RDT05fRU5BQkxFICAoMTw8NSkKKworI2RlZmluZSBTM0MyNDEwX1dUQ09OX0RJVjE2ICAgKDA8PDMpCisjZGVmaW5lIFMzQzI0MTBfV1RDT05fRElWMzIgICAoMTw8MykKKyNkZWZpbmUgUzNDMjQxMF9XVENPTl9ESVY2NCAgICgyPDwzKQorI2RlZmluZSBTM0MyNDEwX1dUQ09OX0RJVjEyOCAgKDM8PDMpCisKKyNkZWZpbmUgUzNDMjQxMF9XVENPTl9QUkVTQ0FMRSh4KSAoKHgpIDw8IDgpCisjZGVmaW5lIFMzQzI0MTBfV1RDT05fUFJFU0NBTEVfTUFTSyAoMHhmZjAwKQorCisjZW5kaWYgLyogX19BU01fQVJDSF9SRUdTX1dBVENIRE9HX0ggKi8KKworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9zeXN0ZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjBkODUwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9zeXN0ZW0uaApAQCAtMCwwICsxLDkwIEBACisvKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3N5c3RlbS5oCisgKgorICogKGMpIDIwMDMgU2ltdGVjIEVsZWN0cm9uaWNzCisgKiAgQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIFMzQzI0MTAgLSBTeXN0ZW0gZnVuY3Rpb24gZGVmaW5lcyBhbmQgaW5jbHVkZXMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIENoYW5nZWxvZzoKKyAqICAxMi1NYXktMjAwMyBCSkQgIENyZWF0ZWQgZmlsZQorICogIDE0LU1heS0yMDAzIEJKRCAgUmVtb3ZlZCBpZGxlIHRvIGFpZCBkZWJ1Z2dpbmcKKyAqICAxMi1KdW4tMjAwMyBCSkQgIEFkZGVkIHJlc2V0IHZpYSB3YXRjaGRvZworICogIDA0LVNlcC0yMDAzIEJKRCAgTW92ZWQgdG8gdjIuNgorICogIDI4LU9jdC0yMDA0IEJKRCAgQWRkZWQgb3Zlci1yaWRlIGZvciBpZGxlLCBhbmQgZml4ZWQgcmVzZXQgcGFuaWMoKQorICovCisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2lkbGUuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3Mtd2F0Y2hkb2cuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWNsb2NrLmg+CisKK3ZvaWQgKCpzM2MyNHh4X2lkbGUpKHZvaWQpOworCit2b2lkIHMzYzI0eHhfZGVmYXVsdF9pZGxlKHZvaWQpCit7CisJdm9pZCBfX2lvbWVtICpyZWcgPSBTM0MyNDEwX0NMS0NPTjsKKwl1bnNpZ25lZCBsb25nIHRtcDsKKwlpbnQgaTsKKworCS8qIGlkbGUgdGhlIHN5c3RlbSBieSB1c2luZyB0aGUgaWRsZSBtb2RlIHdoaWNoIHdpbGwgd2FpdCBmb3IgYW4KKwkgKiBpbnRlcnJ1cHQgdG8gaGFwcGVuIGJlZm9yZSByZXN0YXJ0aW5nIHRoZSBzeXN0ZW0uCisJICovCisKKwkvKiBXYXJuaW5nOiBnb2luZyBpbnRvIGlkbGUgc3RhdGUgdXBzZXRzIGp0YWcgc2Nhbm5pbmcgKi8KKworCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChyZWcpIHwgKDE8PDIpLCByZWcpOworCisJLyogdGhlIHNhbXN1bmcgcG9ydCBzZWVtcyB0byBkbyBhIGxvb3AgYW5kIHRoZW4gdW5zZXQgaWRsZS4uICovCisJZm9yIChpID0gMDsgaSA8IDUwOyBpKyspIHsKKwkJdG1wICs9IF9fcmF3X3JlYWRsKHJlZyk7IC8qIGVuc3VyZSBsb29wIG5vdCBvcHRpbWlzZWQgb3V0ICovCisJfQorCisJLyogdGhpcyBiaXQgaXMgbm90IGNsZWFyZWQgb24gcmUtc3RhcnQuLi4gKi8KKworCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChyZWcpICYgfigxPDwyKSwgcmVnKTsKK30KKworc3RhdGljIHZvaWQgYXJjaF9pZGxlKHZvaWQpCit7CisJaWYgKHMzYzI0eHhfaWRsZSAhPSBOVUxMKQorCQkoczNjMjR4eF9pZGxlKSgpOworCWVsc2UKKwkJczNjMjR4eF9kZWZhdWx0X2lkbGUoKTsKK30KKworCitzdGF0aWMgdm9pZAorYXJjaF9yZXNldChjaGFyIG1vZGUpCit7CisJaWYgKG1vZGUgPT0gJ3MnKSB7CisJCWNwdV9yZXNldCgwKTsKKwl9CisKKwlwcmludGsoImFyY2hfcmVzZXQ6IGF0dGVtcHRpbmcgd2F0Y2hkb2cgcmVzZXRcbiIpOworCisJX19yYXdfd3JpdGVsKDAsIFMzQzI0MTBfV1RDT04pOwkgIC8qIGRpc2FibGUgd2F0Y2hkb2csIHRvIGJlIHNhZmUgICovCisKKwkvKiBwdXQgaW5pdGlhbCB2YWx1ZXMgaW50byBjb3VudCBhbmQgZGF0YSAqLworCV9fcmF3X3dyaXRlbCgweDEwMCwgUzNDMjQxMF9XVENOVCk7CisJX19yYXdfd3JpdGVsKDB4MTAwLCBTM0MyNDEwX1dUREFUKTsKKworCS8qIHNldCB0aGUgd2F0Y2hkb2cgdG8gZ28gYW5kIHJlc2V0Li4uICovCisJX19yYXdfd3JpdGVsKFMzQzI0MTBfV1RDT05fRU5BQkxFfFMzQzI0MTBfV1RDT05fRElWMTZ8UzNDMjQxMF9XVENPTl9SU1RFTiB8CisJCSAgICAgUzNDMjQxMF9XVENPTl9QUkVTQ0FMRSgweDgwKSwgUzNDMjQxMF9XVENPTik7CisKKwkvKiB3YWl0IGZvciByZXNldCB0byBhc3NlcnQuLi4gKi8KKwltZGVsYXkoNTAwMCk7CisKKwlwcmludGsoS0VSTl9FUlIgIldhdGNoZG9nIHJlc2V0IGZhaWxlZCB0byBhc3NlcnQgcmVzZXRcbiIpOworCisJLyogd2UnbGwgdGFrZSBhIGp1bXAgdGhyb3VnaCB6ZXJvIGFzIGEgcG9vciBzZWNvbmQgKi8KKwljcHVfcmVzZXQoMCk7Cit9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3RpbWV4LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3RpbWV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU1OGEzYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvdGltZXguaApAQCAtMCwwICsxLDMyIEBACisvKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3RpbWV4LmgKKyAqCisgKiAoYykgMjAwMy0yMDA1IFNpbXRlYyBFbGVjdHJvbmljcworICogIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBTM0MyNDEwIC0gdGltZSBwYXJhbWV0ZXJzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBDaGFuZ2Vsb2c6CisgKiAgMDItU2VwLTIwMDMgQkpEICBDcmVhdGVkIGZpbGUKKyAqICAwNS1KYW4tMjAwNCBCSkQgIFVwZGF0ZWQgZm9yIExpbnV4IDIuNi4wCisgKiAgMjItTm92LTIwMDQgQkpEICBGaXhlZCBDTE9DS19USUNLX1JBVEUKKyAqICAxMC1KYW4tMjAwNCBCSkQgIFJlbW92ZWQgczNjMjQxMF9jbG9ja190aWNrX3JhdGUKKyovCisKKyNpZm5kZWYgX19BU01fQVJDSF9USU1FWF9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfVElNRVhfSAorCisvKiBDTE9DS19USUNLX1JBVEUgbmVlZHMgdG8gYmUgZXZhbHVhdGFibGUgYnkgdGhlIGNwcCwgc28gbWFraW5nIGl0CisgKiBhIHZhcmlhYmxlIGlzIHVzZWxlc3MuIEl0IHNlZW1zIGFzIGxvbmcgYXMgd2UgbWFrZSBvdXIgdGltZXJzIGFuCisgKiBleGFjdCBtdWx0aXBsZSBvZiBIWiwgYW55IHZhbHVlIHRoYXQgbWFrZXMgYSAxLT4xIGNvcnJlc3BvbmRlbmNlCisgKiBmb3IgdGhlIHRpbWUgY29udmVyc2lvbiBmdW5jdGlvbnMgdG8vZnJvbSBqaWZmaWVzIGlzIGFjY2VwdGFibGUuCisqLworCisKKyNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFIDEyMDAwMDAwCisKKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfVElNRVhfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC91bmNvbXByZXNzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3VuY29tcHJlc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDQyNTJlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC91bmNvbXByZXNzLmgKQEAgLTAsMCArMSwxNTggQEAKKy8qIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvdW5jb21wcmVzcy5oCisgKgorICogKGMpIDIwMDMgU2ltdGVjIEVsZWN0cm9uaWNzCisgKiAgICBCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogUzNDMjQxMCAtIHVuY29tcHJlc3MgY29kZQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogQ2hhbmdlbG9nOgorICogIDIyLU1heS0yMDAzIEJKRCAgQ3JlYXRlZAorICogIDA4LVNlcC0yMDAzIEJKRCAgTW92ZWQgdG8gbGludXggdjIuNgorICogIDEyLU1hci0yMDA0IEJKRCAgVXBkYXRlZCBoZWFkZXIgcHJvdGVjdGlvbgorICogIDEyLU9jdC0yMDA0IEJKRCAgVGFrZSBhY2NvdW50IG9mIGRlYnVnIHVhcnQgY29uZmlndXJhdGlvbgorICogIDE1LU5vdi0yMDA0IEJKRCAgRml4ZWQgdWFydCBjb25maWd1cmF0aW9uCisgKiAgMjItRmViLTIwMDUgQkpEICBBZGRlZCB3YXRjaGRvZyB0byB1bmNvbXByZXNzCisqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfVU5DT01QUkVTU19ICisjZGVmaW5lIF9fQVNNX0FSQ0hfVU5DT01QUkVTU19ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworLyogZGVmaW5lcyBmb3IgVUFSVCByZWdpc3RlcnMgKi8KKyNpbmNsdWRlICJhc20vYXJjaC9yZWdzLXNlcmlhbC5oIgorI2luY2x1ZGUgImFzbS9hcmNoL3JlZ3MtZ3Bpby5oIgorI2luY2x1ZGUgImFzbS9hcmNoL3JlZ3Mtd2F0Y2hkb2cuaCIKKworI2luY2x1ZGUgPGFzbS9hcmNoL21hcC5oPgorCisvKiB3b3JraW5nIGluIHBoeXNpY2FsIHNwYWNlLi4uICovCisjdW5kZWYgUzNDMjQxMF9HUElPUkVHCisjdW5kZWYgUzNDMjQxMF9XRE9HUkVHCisKKyNkZWZpbmUgUzNDMjQxMF9HUElPUkVHKHgpICgoUzNDMjQxMF9QQV9HUElPICsgKHgpKSkKKyNkZWZpbmUgUzNDMjQxMF9XRE9HUkVHKHgpICgoUzNDMjQxMF9QQV9XQVRDSERPRyArICh4KSkpCisKKy8qIGhvdyBtYW55IGJ5dGVzIHdlIGFsbG93IGludG8gdGhlIEZJRk8gYXQgYSB0aW1lIGluIEZJRk8gbW9kZSAqLworI2RlZmluZSBGSUZPX01BWAkgKDE0KQorCisjZGVmaW5lIHVhcnRfYmFzZSBTM0MyNDEwX1BBX1VBUlQgKyAoMHg0MDAwKkNPTkZJR19TM0MyNDEwX0xPV0xFVkVMX1VBUlRfUE9SVCkKKworc3RhdGljIF9faW5saW5lX18gdm9pZAordWFydF93cih1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQgdmFsKQoreworCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqcHRyOworCisJcHRyID0gKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKShyZWcgKyB1YXJ0X2Jhc2UpOworCSpwdHIgPSB2YWw7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludAordWFydF9yZCh1bnNpZ25lZCBpbnQgcmVnKQoreworCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqcHRyOworCisJcHRyID0gKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKShyZWcgKyB1YXJ0X2Jhc2UpOworCXJldHVybiAqcHRyOworfQorCisKKy8qIHdlIGNhbiBkZWFsIHdpdGggdGhlIGNhc2UgdGhlIFVBUlRzIGFyZSBiZWluZyBydW4KKyAqIGluIEZJRk8gbW9kZSwgc28gdGhhdCB3ZSBkb24ndCBob2xkIHVwIG91ciBleGVjdXRpb24KKyAqIHdhaXRpbmcgZm9yIHR4IHRvIGhhcHBlbi4uLgorKi8KKworc3RhdGljIHZvaWQKK3B1dGMoY2hhciBjaCkKK3sKKwlpbnQgY3B1aWQgPSAqKCh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKilTM0MyNDEwX0dTVEFUVVMxKTsKKworCWNwdWlkICY9IFMzQzI0MTBfR1NUQVRVUzFfSURNQVNLOworCisJaWYgKGNoID09ICdcbicpCisJCXB1dGMoJ1xyJyk7ICAgIC8qIGV4cGFuZCBuZXdsaW5lIHRvIFxyXG4gKi8KKworCWlmICh1YXJ0X3JkKFMzQzI0MTBfVUZDT04pICYgUzNDMjQxMF9VRkNPTl9GSUZPTU9ERSkgeworCQlpbnQgbGV2ZWw7CisKKwkJd2hpbGUgKDEpIHsKKwkJCWxldmVsID0gdWFydF9yZChTM0MyNDEwX1VGU1RBVCk7CisKKwkJCWlmIChjcHVpZCA9PSBTM0MyNDEwX0dTVEFUVVMxXzI0NDApIHsKKwkJCQlsZXZlbCAmPSBTM0MyNDQwX1VGU1RBVF9UWE1BU0s7CisJCQkJbGV2ZWwgPj49IFMzQzI0NDBfVUZTVEFUX1RYU0hJRlQ7CisJCQl9IGVsc2UgeworCQkJCWxldmVsICY9IFMzQzI0MTBfVUZTVEFUX1RYTUFTSzsKKwkJCQlsZXZlbCA+Pj0gUzNDMjQxMF9VRlNUQVRfVFhTSElGVDsKKwkJCX0KKworCQkJaWYgKGxldmVsIDwgRklGT19NQVgpCisJCQkJYnJlYWs7CisJCX0KKworCX0gZWxzZSB7CisJCS8qIG5vdCB1c2luZyBmaWZvcyAqLworCisJCXdoaWxlICgodWFydF9yZChTM0MyNDEwX1VUUlNUQVQpICYgUzNDMjQxMF9VVFJTVEFUX1RYRSkgIT0gUzNDMjQxMF9VVFJTVEFUX1RYRSk7CisJfQorCisJLyogd3JpdGUgYnl0ZSB0byB0cmFuc21pc3Npb24gcmVnaXN0ZXIgKi8KKwl1YXJ0X3dyKFMzQzI0MTBfVVRYSCwgY2gpOworfQorCitzdGF0aWMgdm9pZAorcHV0c3RyKGNvbnN0IGNoYXIgKnB0cikKK3sKKwlmb3IgKDsgKnB0ciAhPSAnXDAnOyBwdHIrKykgeworCQlwdXRjKCpwdHIpOworCX0KK30KKworLyogQ09ORklHX1MzQzI0MTBfQk9PVF9XQVRDSERPRworICoKKyAqIFNpbXBsZSBib290LXRpbWUgd2F0Y2hkb2cgc2V0dXAsIHRvIHJlYm9vdCB0aGUgc3lzdGVtIGlmIHRoZXJlIGlzCisgKiBhbnkgcHJvYmxlbSB3aXRoIHRoZSBib290IHByb2Nlc3MKKyovCisKKyNpZmRlZiBDT05GSUdfUzNDMjQxMF9CT09UX1dBVENIRE9HCisKKyNkZWZpbmUgV0RPR19DT1VOVCAoMHhmZjAwKQorCisjZGVmaW5lIF9fcmF3X3dyaXRlbChkLGFkKSBkbyB7ICooKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKShhZCkpID0gKGQpOyB9IHdoaWxlKDApCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2RlY29tcF93ZG9nKHZvaWQpCit7CisJX19yYXdfd3JpdGVsKFdET0dfQ09VTlQsIFMzQzI0MTBfV1RDTlQpOworfQorCitzdGF0aWMgdm9pZCBhcmNoX2RlY29tcF93ZG9nX3N0YXJ0KHZvaWQpCit7CisJX19yYXdfd3JpdGVsKFdET0dfQ09VTlQsIFMzQzI0MTBfV1REQVQpOworCV9fcmF3X3dyaXRlbChXRE9HX0NPVU5ULCBTM0MyNDEwX1dUQ05UKTsKKwlfX3Jhd193cml0ZWwoUzNDMjQxMF9XVENPTl9FTkFCTEUgfCBTM0MyNDEwX1dUQ09OX0RJVjEyOCB8IFMzQzI0MTBfV1RDT05fUlNURU4gfCBTM0MyNDEwX1dUQ09OX1BSRVNDQUxFKDB4NDApLCBTM0MyNDEwX1dUQ09OKTsKK30KKworI2Vsc2UKKyNkZWZpbmUgYXJjaF9kZWNvbXBfd2RvZ19zdGFydCgpCisjZGVmaW5lIGFyY2hfZGVjb21wX3dkb2coKQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIGVycm9yKGNoYXIgKmVycik7CisKK3N0YXRpYyB2b2lkCithcmNoX2RlY29tcF9zZXR1cCh2b2lkKQoreworCS8qIHdlIG1heSBuZWVkIHRvIHNldHVwIHRoZSB1YXJ0KHMpIGhlcmUgaWYgd2UgYXJlIG5vdCBydW5uaW5nCisJICogb24gYW4gQkFTVC4uLiB0aGUgQkFTVCB3aWxsIGhhdmUgbGVmdCB0aGUgdWFydHMgY29uZmlndXJlZAorCSAqIGFmdGVyIGNhbGxpbmcgbGludXguCisJICovCisKKwlhcmNoX2RlY29tcF93ZG9nX3N0YXJ0KCk7Cit9CisKKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfVU5DT01QUkVTU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3VzYi1jb250cm9sLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3VzYi1jb250cm9sLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNjODVhMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvdXNiLWNvbnRyb2wuaApAQCAtMCwwICsxLDQ1IEBACisvKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3VzYi1jb250cm9sLmgKKyAqCisgKiAoYykgMjAwNCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqICBCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogUzNDMjQxMCAtIHVzYiBwb3J0IGluZm9ybWF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBDaGFuZ2Vsb2c6CisgKiAgMTEtU2VwLTIwMDQgQkpEICBDcmVhdGVkIGZpbGUKKyAqICAyMS1TZXAtMjAwNCBCSkQgIFVwZGF0ZWQgcG9ydCBpbmZvCisqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfVVNCQ09OVFJPTF9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfVVNCQ09OVFJPTF9IICJpbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3VzYi1jb250cm9sLmgiCisKKyNkZWZpbmUgUzNDX0hDREZMR19VU0VECSgxKQorCitzdHJ1Y3QgczNjMjQxMF9oY2RfcG9ydCB7CisJdW5zaWduZWQgY2hhcglmbGFnczsKKwl1bnNpZ25lZCBjaGFyCXBvd2VyOworCXVuc2lnbmVkIGNoYXIJb2Nfc3RhdHVzOworCXVuc2lnbmVkIGNoYXIJb2NfY2hhbmdlZDsKK307CisKK3N0cnVjdCBzM2MyNDEwX2hjZF9pbmZvIHsKKwlzdHJ1Y3QgdXNiX2hjZAkJKmhjZDsKKwlzdHJ1Y3QgczNjMjQxMF9oY2RfcG9ydAlwb3J0WzJdOworCisJdm9pZAkJKCpwb3dlcl9jb250cm9sKShpbnQgcG9ydCwgaW50IHRvKTsKKwl2b2lkCQkoKmVuYWJsZV9vYykoc3RydWN0IHMzYzI0MTBfaGNkX2luZm8gKiwgaW50IG9uKTsKKwl2b2lkCQkoKnJlcG9ydF9vYykoc3RydWN0IHMzYzI0MTBfaGNkX2luZm8gKiwgaW50IHBvcnRzKTsKK307CisKK3N0YXRpYyB2b2lkIGlubGluZSBzM2MyNDEwX3JlcG9ydF9vYyhzdHJ1Y3QgczNjMjQxMF9oY2RfaW5mbyAqaW5mbywgaW50IHBvcnRzKQoreworCWlmIChpbmZvLT5yZXBvcnRfb2MgIT0gTlVMTCkgeworCQkoaW5mby0+cmVwb3J0X29jKShpbmZvLCBwb3J0cyk7CisJfQorfQorCisjZW5kaWYgLypfX0FTTV9BUkNIX1VTQkNPTlRST0xfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC92bWFsbG9jLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3ZtYWxsb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmU3MmFkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC92bWFsbG9jLmgKQEAgLTAsMCArMSwzNiBAQAorLyogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC92bWFsbG9jLmgKKyAqCisgKiBmcm9tIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC92bWFsbG9jLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMgU2ltdGVjIEVsZWN0cm9uaWNzIDxsaW51eEBzaW10ZWMuY28udWs+CisgKgkJICAgICAgaHR0cDovL3d3dy5zaW10ZWMuY28udWsvcHJvZHVjdHMvU1dMSU5VWC8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFMzQzI0MTAgdm1hbGxvYyBkZWZpbml0aW9uCisgKgorICogIENoYW5nZWxvZzoKKyAqICAgIDEyLU1hci0yMDA0IEJKRAlGaXhlZCBoZWFkZXIsIGFkZGVkIGluY2x1ZGUgcHJvdGVjdGlvbgorICogICAgMTI9TWFyLTIwMDQgQkpECUZpeGVkIFZNQUxMT0NfRU5EIGRlZmluaXRpb25zCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX1ZNQUxMT0NfSAorI2RlZmluZSBfX0FTTV9BUkNIX1ZNQUxMT0NfSAorCisvKgorICogSnVzdCBhbnkgYXJiaXRyYXJ5IG9mZnNldCB0byB0aGUgc3RhcnQgb2YgdGhlIHZtYWxsb2MgVk0gYXJlYTogdGhlCisgKiBjdXJyZW50IDhNQiB2YWx1ZSBqdXN0IG1lYW5zIHRoYXQgdGhlcmUgd2lsbCBiZSBhIDhNQiAiaG9sZSIgYWZ0ZXIgdGhlCisgKiBwaHlzaWNhbCBtZW1vcnkgdW50aWwgdGhlIGtlcm5lbCB2aXJ0dWFsIG1lbW9yeSBzdGFydHMuICBUaGF0IG1lYW5zIHRoYXQKKyAqIGFueSBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyB3aWxsIGhvcGVmdWxseSBiZSBjYXVnaHQuCisgKiBUaGUgdm1hbGxvYygpIHJvdXRpbmVzIGxlYXZlcyBhIGhvbGUgb2YgNGtCIGJldHdlZW4gZWFjaCB2bWFsbG9jZWQKKyAqIGFyZWEgZm9yIHRoZSBzYW1lIHJlYXNvbi4gOykKKyAqLworCisjZGVmaW5lIFZNQUxMT0NfT0ZGU0VUCSAgKDgqMTAyNCoxMDI0KQorI2RlZmluZSBWTUFMTE9DX1NUQVJUCSAgKCgodW5zaWduZWQgbG9uZyloaWdoX21lbW9yeSArIFZNQUxMT0NfT0ZGU0VUKSAmIH4oVk1BTExPQ19PRkZTRVQtMSkpCisjZGVmaW5lIFZNQUxMT0NfVk1BRERSKHgpICgodW5zaWduZWQgbG9uZykoeCkpCisjZGVmaW5lIFZNQUxMT0NfRU5ECSAgKDB4RTAwMDAwMDApCisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX1ZNQUxMT0NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC92cjEwMDAtY3BsZC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC92cjEwMDAtY3BsZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlZTM3M2EKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3ZyMTAwMC1jcGxkLmgKQEAgLTAsMCArMSwyMiBAQAorLyogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC92cjEwMDAtY3BsZC5oCisgKgorICogKGMpIDIwMDMgU2ltdGVjIEVsZWN0cm9uaWNzCisgKiAgQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIFZSMTAwMCAtIENQTEQgY29udHJvbCBjb25zdGFudHMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIENoYW5nZWxvZzoKKyAqICAyNS1NYXktMjAwMyBCSkQgIENyZWF0ZWQgZmlsZSwgYWRkZWQgQ1RSTDEgcmVnaXN0ZXJzCisgKiAgMTktTWFyLTIwMDQgQkpEICBBZGRlZCBWUjEwMDAgQ1BMRCBkZWZpbml0aW9ucworKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX1ZSMTAwMENQTERfSAorI2RlZmluZSBfX0FTTV9BUkNIX1ZSMTAwMENQTERfSAorCisjZGVmaW5lIFZSMTAwMF9DUExEX0NUUkwyX1JBTVdFTiAgICAgKDB4MDQpICAgLyogU1JBTSBXcml0ZSBFbmFibGUgKi8KKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfVlIxMDAwQ1BMRF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3ZyMTAwMC1pcnEuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvdnIxMDAwLWlycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5NGY3NzEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3ZyMTAwMC1pcnEuaApAQCAtMCwwICsxLDMwIEBACisvKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3ZyMTAwMC1pcnEuaAorICoKKyAqIChjKSAyMDAzLDIwMDQgU2ltdGVjIEVsZWN0cm9uaWNzCisgKiAgQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIE1hY2hpbmUgVlIxMDAwIC0gSVJRIE51bWJlciBkZWZpbml0aW9ucworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogQ2hhbmdlbG9nOgorICogIDA2LUphbi0yMDAzIEJKRCAgTGludXggMi42LjAgdmVyc2lvbgorICogIDE5LU1hci0yMDA0IEJKRCAgVXBkYXRlcyBmb3IgVlIxMDAwCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX1ZSMTAwMElSUV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfVlIxMDAwSVJRX0gKKworLyogaXJxIG51bWJlcnMgdG8gb25ib2FyZCBwZXJpcGhlcmFscyAqLworCisjZGVmaW5lIElSUV9VU0JPQwkgICAgIElSUV9FSU5UMTkKKyNkZWZpbmUgSVJRX0lERTAJICAgICBJUlFfRUlOVDE2CisjZGVmaW5lIElSUV9JREUxCSAgICAgSVJRX0VJTlQxNworI2RlZmluZSBJUlFfVlIxMDAwX1NFUklBTCAgICBJUlFfRUlOVDEyCisjZGVmaW5lIElSUV9WUjEwMDBfRE05MDAwQSAgIElSUV9FSU5UMTAKKyNkZWZpbmUgSVJRX1ZSMTAwMF9ETTkwMDBOICAgSVJRX0VJTlQ5CisjZGVmaW5lIElSUV9TTUFMRVJUCSAgICAgSVJRX0VJTlQ4CisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX1ZSMTAwMElSUV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3ZyMTAwMC1tYXAuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvdnIxMDAwLW1hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2N2M5MzUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3ZyMTAwMC1tYXAuaApAQCAtMCwwICsxLDExNiBAQAorLyogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC92cjEwMDAtbWFwLmgKKyAqCisgKiAoYykgMjAwMy0yMDA1IFNpbXRlYyBFbGVjdHJvbmljcworICogIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBNYWNoaW5lIFZSMTAwMCAtIE1lbW9yeSBtYXAgZGVmaW5pdGlvbnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIENoYW5nZWxvZzoKKyAqICAwNi1KYW4tMjAwMyBCSkQgIExpbnV4IDIuNi4wIHZlcnNpb24sIHNwbGl0IHNwZWNpZmljcyBmcm9tIGFyY2gvbWFwLmgKKyAqICAxMi1NYXItMjAwNCBCSkQgIEZpeGVkIGhlYWRlciBpbmNsdWRlIHByb3RlY3Rpb24KKyAqICAxOS1NYXItMjAwNCBCSkQgIENvcGllZCB0byBWUjEwMDAgbWFjaGluZSBoZWFkZXJzLgorICogIDE5LUphbi0yMDA1IEJKRCAgVXBkYXRlZCBtYXAgZGVmaW5pdGlvbnMKKyovCisKKy8qIG5lZWRzIGFyY2gvbWFwLmggaW5jbHVkaW5nIHdpdGggdGhpcyAqLworCisvKiBvaywgd2UndmUgdXNlZCB1cCB0byAweDEzMDAwMDAwLCBub3cgd2UgbmVlZCB0byBmaW5kIHNwYWNlIGZvciB0aGUKKyAqIHBlcmlwaGVyYWxzIHRoYXQgbGl2ZSBpbiB0aGUgbkdDU1t4XSBhcmVhcywgd2hpY2ggYXJlIHF1aXRlIG51bWVyb3VzCisgKiBpbiB0aGVpciBzcGFjZS4gV2UgYWxzbyBoYXZlIHRoZSBib2FyZCdzIENQTEQgdG8gZmluZCByZWdpc3RlciBzcGFjZQorICogZm9yLgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9WUjEwMDBNQVBfSAorI2RlZmluZSBfX0FTTV9BUkNIX1ZSMTAwME1BUF9ICisKKyNpbmNsdWRlIDxhc20vYXJjaC9iYXN0LW1hcC5oPgorCisjZGVmaW5lIFZSMTAwMF9JT0FERFIoeCkgQkFTVF9JT0FERFIoeCkKKworLyogd2UgcHV0IHRoZSBDUExEIHJlZ2lzdGVycyBuZXh0LCB0byBnZXQgdGhlbSBvdXQgb2YgdGhlIHdheSAqLworCisjZGVmaW5lIFZSMTAwMF9WQV9DVFJMMQkgICAgVlIxMDAwX0lPQUREUigweDAwMDAwMDAwKQkgLyogMHgwMTMwMDAwMCAqLworI2RlZmluZSBWUjEwMDBfUEFfQ1RSTDEJICAgIChTM0MyNDEwX0NTNSB8IDB4NzgwMDAwMCkKKworI2RlZmluZSBWUjEwMDBfVkFfQ1RSTDIJICAgIFZSMTAwMF9JT0FERFIoMHgwMDEwMDAwMCkJIC8qIDB4MDE0MDAwMDAgKi8KKyNkZWZpbmUgVlIxMDAwX1BBX0NUUkwyCSAgICAoUzNDMjQxMF9DUzEgfCAweDYwMDAwMDApCisKKyNkZWZpbmUgVlIxMDAwX1ZBX0NUUkwzCSAgICBWUjEwMDBfSU9BRERSKDB4MDAyMDAwMDApCSAvKiAweDAxNTAwMDAwICovCisjZGVmaW5lIFZSMTAwMF9QQV9DVFJMMwkgICAgKFMzQzI0MTBfQ1MxIHwgMHg2ODAwMDAwKQorCisjZGVmaW5lIFZSMTAwMF9WQV9DVFJMNAkgICAgVlIxMDAwX0lPQUREUigweDAwMzAwMDAwKQkgLyogMHgwMTYwMDAwMCAqLworI2RlZmluZSBWUjEwMDBfUEFfQ1RSTDQJICAgIChTM0MyNDEwX0NTMSB8IDB4NzAwMDAwMCkKKworLyogbmV4dCwgd2UgaGF2ZSB0aGUgUEMxMDQgSVNBIGludGVycnVwdCByZWdpc3RlcnMgKi8KKworI2RlZmluZSBWUjEwMDBfUEFfUEMxMDRfSVJRUkVRICAoUzNDMjQxMF9DUzUgfCAweDYwMDAwMDApIC8qIDB4MDE3MDAwMDAgKi8KKyNkZWZpbmUgVlIxMDAwX1ZBX1BDMTA0X0lSUVJFUSAgVlIxMDAwX0lPQUREUigweDAwNDAwMDAwKQorCisjZGVmaW5lIFZSMTAwMF9QQV9QQzEwNF9JUlFSQVcgIChTM0MyNDEwX0NTNSB8IDB4NjgwMDAwMCkgLyogMHgwMTgwMDAwMCAqLworI2RlZmluZSBWUjEwMDBfVkFfUEMxMDRfSVJRUkFXICBWUjEwMDBfSU9BRERSKDB4MDA1MDAwMDApCisKKyNkZWZpbmUgVlIxMDAwX1BBX1BDMTA0X0lSUU1BU0sgKFMzQzI0MTBfQ1M1IHwgMHg3MDAwMDAwKSAvKiAweDAxOTAwMDAwICovCisjZGVmaW5lIFZSMTAwMF9WQV9QQzEwNF9JUlFNQVNLIFZSMTAwMF9JT0FERFIoMHgwMDYwMDAwMCkKKworLyogMHhFMDAwMDAwMCBjb250YWlucyB0aGUgSU8gc3BhY2UgdGhhdCBpcyBzcGxpdCBieSBzcGVlZCBhbmQKKyAqIHdldGhlciB0aGUgYWNjZXNzIGlzIGZvciA4IG9yIDE2Yml0IElPLi4uIHRoaXMgZW5zdXJlcyB0aGF0CisgKiB0aGUgY29ycmVjdCBhY2Nlc3MgaXMgbWFkZQorICoKKyAqIDB4MTAwMDAwMDAgb2Ygc3BhY2UsIHBhcnRpdGlvbmVkIGFzIHNvOgorICoKKyAqIDB4MDAwMDAwMDAgdG8gMHgwNDAwMDAwMCAgOGJpdCwgIHNsb3cKKyAqIDB4MDQwMDAwMDAgdG8gMHgwODAwMDAwMCAgMTZiaXQsIHNsb3cKKyAqIDB4MDgwMDAwMDAgdG8gMHgwQzAwMDAwMCAgMTZiaXQsIG5ldAorICogMHgwQzAwMDAwMCB0byAweDEwMDAwMDAwICAxNmJpdCwgZmFzdAorICoKKyAqIGVhY2ggb2YgdGhlc2Ugc3BhY2VzIGhhcyB0aGUgZm9sbG93aW5nIGluOgorICoKKyAqIDB4MDIwMDAwMDAgdG8gMHgwMjEwMDAwMCAxTUIgIElERSBwcmltYXJ5IGNoYW5uZWwKKyAqIDB4MDIxMDAwMDAgdG8gMHgwMjIwMDAwMCAxTUIgIElERSBwcmltYXJ5IGNoYW5uZWwgYXV4CisgKiAweDAyMjAwMDAwIHRvIDB4MDI0MDAwMDAgMU1CICBJREUgc2Vjb25kYXJ5IGNoYW5uZWwKKyAqIDB4MDIzMDAwMDAgdG8gMHgwMjQwMDAwMCAxTUIgIElERSBzZWNvbmRhcnkgY2hhbm5lbCBhdXgKKyAqIDB4MDI1MDAwMDAgdG8gMHgwMjYwMDAwMCAxTUIgIERhdmljb20gRE05MDAwIGV0aGVybmV0IGNvbnRyb2xsZXJzCisgKiAweDAyNjAwMDAwIHRvIDB4MDI3MDAwMDAgMU1CCisgKgorICogdGhlIHBoeWlzY2FsIGxheW91dCBvZiB0aGUgem9uZXMgYXJlOgorICogIG5HQ1MyIC0gOGJpdCwgc2xvdworICogIG5HQ1MzIC0gMTZiaXQsIHNsb3cKKyAqICBuR0NTNCAtIDE2Yml0LCBuZXQKKyAqICBuR0NTNSAtIDE2Yml0LCBmYXN0CisgKi8KKworI2RlZmluZSBWUjEwMDBfVkFfTVVMVElTUEFDRSAoMHhFMDAwMDAwMCkKKworI2RlZmluZSBWUjEwMDBfVkFfSVNBSU8JCSAgIChWUjEwMDBfVkFfTVVMVElTUEFDRSArIDB4MDAwMDAwMDApCisjZGVmaW5lIFZSMTAwMF9WQV9JU0FNRU0JICAgKFZSMTAwMF9WQV9NVUxUSVNQQUNFICsgMHgwMTAwMDAwMCkKKyNkZWZpbmUgVlIxMDAwX1ZBX0lERVBSSQkgICAoVlIxMDAwX1ZBX01VTFRJU1BBQ0UgKyAweDAyMDAwMDAwKQorI2RlZmluZSBWUjEwMDBfVkFfSURFUFJJQVVYCSAgIChWUjEwMDBfVkFfTVVMVElTUEFDRSArIDB4MDIxMDAwMDApCisjZGVmaW5lIFZSMTAwMF9WQV9JREVTRUMJICAgKFZSMTAwMF9WQV9NVUxUSVNQQUNFICsgMHgwMjIwMDAwMCkKKyNkZWZpbmUgVlIxMDAwX1ZBX0lERVNFQ0FVWAkgICAoVlIxMDAwX1ZBX01VTFRJU1BBQ0UgKyAweDAyMzAwMDAwKQorI2RlZmluZSBWUjEwMDBfVkFfQVNJWE5FVAkgICAoVlIxMDAwX1ZBX01VTFRJU1BBQ0UgKyAweDAyNDAwMDAwKQorI2RlZmluZSBWUjEwMDBfVkFfRE05MDAwCSAgIChWUjEwMDBfVkFfTVVMVElTUEFDRSArIDB4MDI1MDAwMDApCisjZGVmaW5lIFZSMTAwMF9WQV9TVVBFUklPCSAgIChWUjEwMDBfVkFfTVVMVElTUEFDRSArIDB4MDI2MDAwMDApCisKKy8qIHBoeXNpY2FsIG9mZnNldCBhZGRyZXNzZXMgZm9yIHRoZSBwZXJpcGhlcmFscyAqLworCisjZGVmaW5lIFZSMTAwMF9QQV9JREVQUkkJICAgKDB4MDIwMDAwMDApCisjZGVmaW5lIFZSMTAwMF9QQV9JREVQUklBVVgJICAgKDB4MDI4MDAwMDApCisjZGVmaW5lIFZSMTAwMF9QQV9JREVTRUMJICAgKDB4MDMwMDAwMDApCisjZGVmaW5lIFZSMTAwMF9QQV9JREVTRUNBVVgJICAgKDB4MDM4MDAwMDApCisjZGVmaW5lIFZSMTAwMF9QQV9ETTkwMDAJICAgKDB4MDUwMDAwMDApCisKKyNkZWZpbmUgVlIxMDAwX1BBX1NFUklBTAkgICAoMHgxMTgwMDAwMCkKKyNkZWZpbmUgVlIxMDAwX1ZBX1NFUklBTAkgICAoVlIxMDAwX0lPQUREUigweDAwNzAwMDAwKSkKKworLyogVlIxMDAwIHJhbSBpcyBpbiBDUzEsIHdpdGggQTI2Li5BMjQgPSAyXzEwMSAqLworI2RlZmluZSBWUjEwMDBfUEFfU1JBTQkJICAgKFMzQzI0MTBfQ1MxIHwgMHgwNTAwMDAwMCkKKworLyogc29tZSBjb25maWd1cmF0aW9ucyBmb3IgdGhlIHBlcmlwaGVyYWxzICovCisKKyNkZWZpbmUgVlIxMDAwX0RNOTAwMF9DUwkgVlIxMDAwX1ZBTV9DUzQKKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfVlIxMDAwTUFQX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9TQS0xMTAwLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvU0EtMTEwMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyYWFmMDQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvU0EtMTEwMC5oCkBAIC0wLDAgKzEsMjA3MiBAQAorLyoKKyAqCUZJTEUgICAgCVNBLTExMDAuaAorICoKKyAqCVZlcnNpb24gCTEuMgorICoJQXV0aG9yICAJQ29weXJpZ2h0IChjKSBNYXJjIEEuIFZpcmVkYXosIDE5OTgKKyAqCSAgICAgICAgCURFQyBXZXN0ZXJuIFJlc2VhcmNoIExhYm9yYXRvcnksIFBhbG8gQWx0bywgQ0EKKyAqCURhdGUgICAgCUphbnVhcnkgMTk5OCAoQXByaWwgMTk5NykKKyAqCVN5c3RlbSAgCVN0cm9uZ0FSTSBTQS0xMTAwCisgKglMYW5ndWFnZQlDIG9yIEFSTSBBc3NlbWJseQorICoJUHVycG9zZSAJRGVmaW5pdGlvbiBvZiBjb25zdGFudHMgcmVsYXRlZCB0byB0aGUgU3Ryb25nQVJNCisgKgkgICAgICAgIAlTQS0xMTAwIG1pY3JvcHJvY2Vzc29yIChBZHZhbmNlZCBSSVNDIE1hY2hpbmUgKEFSTSkKKyAqCSAgICAgICAgCWFyY2hpdGVjdHVyZSB2ZXJzaW9uIDQpLiBUaGlzIGZpbGUgaXMgYmFzZWQgb24gdGhlCisgKgkgICAgICAgIAlTdHJvbmdBUk0gU0EtMTEwMCBkYXRhIHNoZWV0IHZlcnNpb24gMi4yLgorICoKKyAqLworCisKKy8qIEJlIHN1cmUgdGhhdCB2aXJ0dWFsIG1hcHBpbmcgaXMgZGVmaW5lZCByaWdodCAqLworI2lmbmRlZiBfX0FTTV9BUkNIX0hBUkRXQVJFX0gKKyNlcnJvciBZb3UgbXVzdCBpbmNsdWRlIGhhcmR3YXJlLmggbm90IFNBLTExMDAuaAorI2VuZGlmCisKKyNpbmNsdWRlICJiaXRmaWVsZC5oIgorCisvKgorICogU0ExMTAwIENTIGxpbmUgdG8gcGh5c2ljYWwgYWRkcmVzcworICovCisKKyNkZWZpbmUgU0ExMTAwX0NTMF9QSFlTCTB4MDAwMDAwMDAKKyNkZWZpbmUgU0ExMTAwX0NTMV9QSFlTCTB4MDgwMDAwMDAKKyNkZWZpbmUgU0ExMTAwX0NTMl9QSFlTCTB4MTAwMDAwMDAKKyNkZWZpbmUgU0ExMTAwX0NTM19QSFlTCTB4MTgwMDAwMDAKKyNkZWZpbmUgU0ExMTAwX0NTNF9QSFlTCTB4NDAwMDAwMDAKKyNkZWZpbmUgU0ExMTAwX0NTNV9QSFlTCTB4NDgwMDAwMDAKKworLyoKKyAqIFBlcnNvbmFsIENvbXB1dGVyIE1lbW9yeSBDYXJkIEludGVybmF0aW9uYWwgQXNzb2NpYXRpb24gKFBDTUNJQSkgc29ja2V0cworICovCisKKyNkZWZpbmUgUENNQ0lBUHJ0U3AJMHgwNDAwMDAwMAkvKiBQQ01DSUEgUGFydGl0aW9uIFNwYWNlIFtieXRlXSAgICovCisjZGVmaW5lIFBDTUNJQVNwCSg0KlBDTUNJQVBydFNwKQkvKiBQQ01DSUEgU3BhY2UgW2J5dGVdICAgICAgICAgICAgICovCisjZGVmaW5lIFBDTUNJQUlPU3AJUENNQ0lBUHJ0U3AJLyogUENNQ0lBIEkvTyBTcGFjZSBbYnl0ZV0gICAgICAgICAqLworI2RlZmluZSBQQ01DSUFBdHRyU3AJUENNQ0lBUHJ0U3AJLyogUENNQ0lBIEF0dHJpYnV0ZSBTcGFjZSBbYnl0ZV0gICAqLworI2RlZmluZSBQQ01DSUFNZW1TcAlQQ01DSUFQcnRTcAkvKiBQQ01DSUEgTWVtb3J5IFNwYWNlIFtieXRlXSAgICAgICovCisKKyNkZWZpbmUgUENNQ0lBMFNwCVBDTUNJQVNwCS8qIFBDTUNJQSAwIFNwYWNlIFtieXRlXSAgICAgICAgICAgKi8KKyNkZWZpbmUgUENNQ0lBMElPU3AJUENNQ0lBSU9TcAkvKiBQQ01DSUEgMCBJL08gU3BhY2UgW2J5dGVdICAgICAgICovCisjZGVmaW5lIFBDTUNJQTBBdHRyU3AJUENNQ0lBQXR0clNwCS8qIFBDTUNJQSAwIEF0dHJpYnV0ZSBTcGFjZSBbYnl0ZV0gKi8KKyNkZWZpbmUgUENNQ0lBME1lbVNwCVBDTUNJQU1lbVNwCS8qIFBDTUNJQSAwIE1lbW9yeSBTcGFjZSBbYnl0ZV0gICAgKi8KKworI2RlZmluZSBQQ01DSUExU3AJUENNQ0lBU3AJLyogUENNQ0lBIDEgU3BhY2UgW2J5dGVdICAgICAgICAgICAqLworI2RlZmluZSBQQ01DSUExSU9TcAlQQ01DSUFJT1NwCS8qIFBDTUNJQSAxIEkvTyBTcGFjZSBbYnl0ZV0gICAgICAgKi8KKyNkZWZpbmUgUENNQ0lBMUF0dHJTcAlQQ01DSUFBdHRyU3AJLyogUENNQ0lBIDEgQXR0cmlidXRlIFNwYWNlIFtieXRlXSAqLworI2RlZmluZSBQQ01DSUExTWVtU3AJUENNQ0lBTWVtU3AJLyogUENNQ0lBIDEgTWVtb3J5IFNwYWNlIFtieXRlXSAgICAqLworCisjZGVmaW5lIF9QQ01DSUEoTmIpCSAgICAgICAgCS8qIFBDTUNJQSBbMC4uMV0gICAgICAgICAgICAgICAgICAgKi8gXAorICAgICAgICAgICAgICAgIAkoMHgyMDAwMDAwMCArIChOYikqUENNQ0lBU3ApCisjZGVmaW5lIF9QQ01DSUFJTyhOYikJX1BDTUNJQSAoTmIpCS8qIFBDTUNJQSBJL08gWzAuLjFdICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX1BDTUNJQUF0dHIoTmIpCSAgICAgICAgCS8qIFBDTUNJQSBBdHRyaWJ1dGUgWzAuLjFdICAgICAgICAgKi8gXAorICAgICAgICAgICAgICAgIAkoX1BDTUNJQSAoTmIpICsgMipQQ01DSUFQcnRTcCkKKyNkZWZpbmUgX1BDTUNJQU1lbShOYikJICAgICAgICAJLyogUENNQ0lBIE1lbW9yeSBbMC4uMV0gICAgICAgICAgICAqLyBcCisgICAgICAgICAgICAgICAgCShfUENNQ0lBIChOYikgKyAzKlBDTUNJQVBydFNwKQorCisjZGVmaW5lIF9QQ01DSUEwCV9QQ01DSUEgKDApCS8qIFBDTUNJQSAwICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX1BDTUNJQTBJTwlfUENNQ0lBSU8gKDApCS8qIFBDTUNJQSAwIEkvTyAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX1BDTUNJQTBBdHRyCV9QQ01DSUFBdHRyICgwKQkvKiBQQ01DSUEgMCBBdHRyaWJ1dGUgICAgICAgICAgICAgICovCisjZGVmaW5lIF9QQ01DSUEwTWVtCV9QQ01DSUFNZW0gKDApCS8qIFBDTUNJQSAwIE1lbW9yeSAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBfUENNQ0lBMQlfUENNQ0lBICgxKQkvKiBQQ01DSUEgMSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9QQ01DSUExSU8JX1BDTUNJQUlPICgxKQkvKiBQQ01DSUEgMSBJL08gICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9QQ01DSUExQXR0cglfUENNQ0lBQXR0ciAoMSkJLyogUENNQ0lBIDEgQXR0cmlidXRlICAgICAgICAgICAgICAqLworI2RlZmluZSBfUENNQ0lBMU1lbQlfUENNQ0lBTWVtICgxKQkvKiBQQ01DSUEgMSBNZW1vcnkgICAgICAgICAgICAgICAgICovCisKKworLyoKKyAqIFVuaXZlcnNhbCBTZXJpYWwgQnVzIChVU0IpIERldmljZSBDb250cm9sbGVyIChVREMpIGNvbnRyb2wgcmVnaXN0ZXJzCisgKgorICogUmVnaXN0ZXJzCisgKiAgICBTZXIwVURDQ1IgCVNlcmlhbCBwb3J0IDAgVW5pdmVyc2FsIFNlcmlhbCBCdXMgKFVTQikgRGV2aWNlCisgKiAgICAgICAgICAgICAgCUNvbnRyb2xsZXIgKFVEQykgQ29udHJvbCBSZWdpc3RlciAocmVhZC93cml0ZSkuCisgKiAgICBTZXIwVURDQVIgCVNlcmlhbCBwb3J0IDAgVW5pdmVyc2FsIFNlcmlhbCBCdXMgKFVTQikgRGV2aWNlCisgKiAgICAgICAgICAgICAgCUNvbnRyb2xsZXIgKFVEQykgQWRkcmVzcyBSZWdpc3RlciAocmVhZC93cml0ZSkuCisgKiAgICBTZXIwVURDT01QCVNlcmlhbCBwb3J0IDAgVW5pdmVyc2FsIFNlcmlhbCBCdXMgKFVTQikgRGV2aWNlCisgKiAgICAgICAgICAgICAgCUNvbnRyb2xsZXIgKFVEQykgT3V0cHV0IE1heGltdW0gUGFja2V0IHNpemUgcmVnaXN0ZXIKKyAqICAgICAgICAgICAgICAJKHJlYWQvd3JpdGUpLgorICogICAgU2VyMFVEQ0lNUAlTZXJpYWwgcG9ydCAwIFVuaXZlcnNhbCBTZXJpYWwgQnVzIChVU0IpIERldmljZQorICogICAgICAgICAgICAgIAlDb250cm9sbGVyIChVREMpIElucHV0IE1heGltdW0gUGFja2V0IHNpemUgcmVnaXN0ZXIKKyAqICAgICAgICAgICAgICAJKHJlYWQvd3JpdGUpLgorICogICAgU2VyMFVEQ0NTMAlTZXJpYWwgcG9ydCAwIFVuaXZlcnNhbCBTZXJpYWwgQnVzIChVU0IpIERldmljZQorICogICAgICAgICAgICAgIAlDb250cm9sbGVyIChVREMpIENvbnRyb2wvU3RhdHVzIHJlZ2lzdGVyIGVuZC1wb2ludCAwCisgKiAgICAgICAgICAgICAgCShyZWFkL3dyaXRlKS4KKyAqICAgIFNlcjBVRENDUzEJU2VyaWFsIHBvcnQgMCBVbml2ZXJzYWwgU2VyaWFsIEJ1cyAoVVNCKSBEZXZpY2UKKyAqICAgICAgICAgICAgICAJQ29udHJvbGxlciAoVURDKSBDb250cm9sL1N0YXR1cyByZWdpc3RlciBlbmQtcG9pbnQgMQorICogICAgICAgICAgICAgIAkob3V0cHV0LCByZWFkL3dyaXRlKS4KKyAqICAgIFNlcjBVRENDUzIJU2VyaWFsIHBvcnQgMCBVbml2ZXJzYWwgU2VyaWFsIEJ1cyAoVVNCKSBEZXZpY2UKKyAqICAgICAgICAgICAgICAJQ29udHJvbGxlciAoVURDKSBDb250cm9sL1N0YXR1cyByZWdpc3RlciBlbmQtcG9pbnQgMgorICogICAgICAgICAgICAgIAkoaW5wdXQsIHJlYWQvd3JpdGUpLgorICogICAgU2VyMFVEQ0QwIAlTZXJpYWwgcG9ydCAwIFVuaXZlcnNhbCBTZXJpYWwgQnVzIChVU0IpIERldmljZQorICogICAgICAgICAgICAgIAlDb250cm9sbGVyIChVREMpIERhdGEgcmVnaXN0ZXIgZW5kLXBvaW50IDAKKyAqICAgICAgICAgICAgICAJKHJlYWQvd3JpdGUpLgorICogICAgU2VyMFVEQ1dDIAlTZXJpYWwgcG9ydCAwIFVuaXZlcnNhbCBTZXJpYWwgQnVzIChVU0IpIERldmljZQorICogICAgICAgICAgICAgIAlDb250cm9sbGVyIChVREMpIFdyaXRlIENvdW50IHJlZ2lzdGVyIGVuZC1wb2ludCAwCisgKiAgICAgICAgICAgICAgCShyZWFkKS4KKyAqICAgIFNlcjBVRENEUiAJU2VyaWFsIHBvcnQgMCBVbml2ZXJzYWwgU2VyaWFsIEJ1cyAoVVNCKSBEZXZpY2UKKyAqICAgICAgICAgICAgICAJQ29udHJvbGxlciAoVURDKSBEYXRhIFJlZ2lzdGVyIChyZWFkL3dyaXRlKS4KKyAqICAgIFNlcjBVRENTUiAJU2VyaWFsIHBvcnQgMCBVbml2ZXJzYWwgU2VyaWFsIEJ1cyAoVVNCKSBEZXZpY2UKKyAqICAgICAgICAgICAgICAJQ29udHJvbGxlciAoVURDKSBTdGF0dXMgUmVnaXN0ZXIgKHJlYWQvd3JpdGUpLgorICovCisKKyNkZWZpbmUgU2VyMFVEQ0NSCV9fUkVHKDB4ODAwMDAwMDApICAvKiBTZXIuIHBvcnQgMCBVREMgQ29udHJvbCBSZWcuICovCisjZGVmaW5lIFNlcjBVRENBUglfX1JFRygweDgwMDAwMDA0KSAgLyogU2VyLiBwb3J0IDAgVURDIEFkZHJlc3MgUmVnLiAqLworI2RlZmluZSBTZXIwVURDT01QCV9fUkVHKDB4ODAwMDAwMDgpICAvKiBTZXIuIHBvcnQgMCBVREMgT3V0cHV0IE1heGltdW0gUGFja2V0IHNpemUgcmVnLiAqLworI2RlZmluZSBTZXIwVURDSU1QCV9fUkVHKDB4ODAwMDAwMEMpICAvKiBTZXIuIHBvcnQgMCBVREMgSW5wdXQgTWF4aW11bSBQYWNrZXQgc2l6ZSByZWcuICovCisjZGVmaW5lIFNlcjBVRENDUzAJX19SRUcoMHg4MDAwMDAxMCkgIC8qIFNlci4gcG9ydCAwIFVEQyBDb250cm9sL1N0YXR1cyByZWcuIGVuZC1wb2ludCAwICovCisjZGVmaW5lIFNlcjBVRENDUzEJX19SRUcoMHg4MDAwMDAxNCkgIC8qIFNlci4gcG9ydCAwIFVEQyBDb250cm9sL1N0YXR1cyByZWcuIGVuZC1wb2ludCAxIChvdXRwdXQpICovCisjZGVmaW5lIFNlcjBVRENDUzIJX19SRUcoMHg4MDAwMDAxOCkgIC8qIFNlci4gcG9ydCAwIFVEQyBDb250cm9sL1N0YXR1cyByZWcuIGVuZC1wb2ludCAyIChpbnB1dCkgKi8KKyNkZWZpbmUgU2VyMFVEQ0QwCV9fUkVHKDB4ODAwMDAwMUMpICAvKiBTZXIuIHBvcnQgMCBVREMgRGF0YSByZWcuIGVuZC1wb2ludCAwICovCisjZGVmaW5lIFNlcjBVRENXQwlfX1JFRygweDgwMDAwMDIwKSAgLyogU2VyLiBwb3J0IDAgVURDIFdyaXRlIENvdW50IHJlZy4gZW5kLXBvaW50IDAgKi8KKyNkZWZpbmUgU2VyMFVEQ0RSCV9fUkVHKDB4ODAwMDAwMjgpICAvKiBTZXIuIHBvcnQgMCBVREMgRGF0YSBSZWcuICovCisjZGVmaW5lIFNlcjBVRENTUglfX1JFRygweDgwMDAwMDMwKSAgLyogU2VyLiBwb3J0IDAgVURDIFN0YXR1cyBSZWcuICovCisKKyNkZWZpbmUgVURDQ1JfVURECTB4MDAwMDAwMDEJLyogVURDIERpc2FibGUgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVRENDUl9VREEJMHgwMDAwMDAwMgkvKiBVREMgQWN0aXZlIChyZWFkKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVEQ0NSX1JFU0lNCTB4MDAwMDAwMDQJLyogUmVzdW1lIEludGVycnVwdCBNYXNrLCBwZXIgZXJyYXRhICovCisjZGVmaW5lIFVEQ0NSX0VJTQkweDAwMDAwMDA4CS8qIEVuZC1wb2ludCAwIEludGVycnVwdCBNYXNrICAgICAgKi8KKyAgICAgICAgICAgICAgICAJICAgICAgICAJLyogKGRpc2FibGUpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVRENDUl9SSU0JMHgwMDAwMDAxMAkvKiBSZWNlaXZlIEludGVycnVwdCBNYXNrICAgICAgICAgICovCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIChkaXNhYmxlKSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVURDQ1JfVElNCTB4MDAwMDAwMjAJLyogVHJhbnNtaXQgSW50ZXJydXB0IE1hc2sgICAgICAgICAqLworICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAoZGlzYWJsZSkgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVEQ0NSX1NSTQkweDAwMDAwMDQwCS8qIFN1c3BlbmQvUmVzdW1lIGludGVycnVwdCBNYXNrICAgKi8KKyAgICAgICAgICAgICAgICAJICAgICAgICAJLyogKGRpc2FibGUpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVRENDUl9TVVNJTQlVRENDUl9TUk0JLyogUGVyIGVycmF0YSwgU1JNIGp1c3QgbWFza3Mgc3VzcGVuZCAqLworI2RlZmluZSBVRENDUl9SRU0JMHgwMDAwMDA4MAkvKiBSRXNldCBpbnRlcnJ1cHQgTWFzayAoZGlzYWJsZSkgICovCisKKyNkZWZpbmUgVURDQVJfQURECUZsZCAoNywgMCkJLyogZnVuY3Rpb24gQUREcmVzcyAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVEQ09NUF9PVVRNQVhQCUZsZCAoOCwgMCkJLyogT1VUcHV0IE1BWGltdW0gUGFja2V0IHNpemUgLSAxICAqLworICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBbYnl0ZV0gICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVEQ09NUF9PdXRNYXhQa3QoU2l6ZSkgIAkvKiBPdXRwdXQgTWF4aW11bSBQYWNrZXQgc2l6ZSAgICAgICovIFwKKyAgICAgICAgICAgICAgICAJICAgICAgICAJLyogWzEuLjI1NiBieXRlXSAgICAgICAgICAgICAgICAgICAqLyBcCisgICAgICAgICAgICAgICAgCSgoKFNpemUpIC0gMSkgPDwgRlNoZnQgKFVEQ09NUF9PVVRNQVhQKSkKKworI2RlZmluZSBVRENJTVBfSU5NQVhQCUZsZCAoOCwgMCkJLyogSU5wdXQgTUFYaW11bSBQYWNrZXQgc2l6ZSAtIDEgICAqLworICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBbYnl0ZV0gICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVEQ0lNUF9Jbk1heFBrdChTaXplKSAgIAkvKiBJbnB1dCBNYXhpbXVtIFBhY2tldCBzaXplICAgICAgICovIFwKKyAgICAgICAgICAgICAgICAJICAgICAgICAJLyogWzEuLjI1NiBieXRlXSAgICAgICAgICAgICAgICAgICAqLyBcCisgICAgICAgICAgICAgICAgCSgoKFNpemUpIC0gMSkgPDwgRlNoZnQgKFVEQ0lNUF9JTk1BWFApKQorCisjZGVmaW5lIFVEQ0NTMF9PUFIJMHgwMDAwMDAwMQkvKiBPdXRwdXQgUGFja2V0IFJlYWR5IChyZWFkKSAgICAgICovCisjZGVmaW5lIFVEQ0NTMF9JUFIJMHgwMDAwMDAwMgkvKiBJbnB1dCBQYWNrZXQgUmVhZHkgICAgICAgICAgICAgICovCisjZGVmaW5lIFVEQ0NTMF9TU1QJMHgwMDAwMDAwNAkvKiBTZW50IFNUYWxsICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVEQ0NTMF9GU1QJMHgwMDAwMDAwOAkvKiBGb3JjZSBTVGFsbCAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVEQ0NTMF9ERQkweDAwMDAwMDEwCS8qIERhdGEgRW5kICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVURDQ1MwX1NFCTB4MDAwMDAwMjAJLyogU2V0dXAgRW5kIChyZWFkKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVRENDUzBfU08JMHgwMDAwMDA0MAkvKiBTZXJ2aWNlZCBPdXRwdXQgcGFja2V0IHJlYWR5ICAgICovCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qICh3cml0ZSkgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVURDQ1MwX1NTRQkweDAwMDAwMDgwCS8qIFNlcnZpY2VkIFNldHVwIEVuZCAod3JpdGUpICAgICAgKi8KKworI2RlZmluZSBVRENDUzFfUkZTCTB4MDAwMDAwMDEJLyogUmVjZWl2ZSBGSUZPIDEyLWJ5dGVzIG9yIG1vcmUgICAqLworICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBTZXJ2aWNlIHJlcXVlc3QgKHJlYWQpICAgICAgICAgICovCisjZGVmaW5lIFVEQ0NTMV9SUEMJMHgwMDAwMDAwMgkvKiBSZWNlaXZlIFBhY2tldCBDb21wbGV0ZSAgICAgICAgICovCisjZGVmaW5lIFVEQ0NTMV9SUEUJMHgwMDAwMDAwNAkvKiBSZWNlaXZlIFBhY2tldCBFcnJvciAocmVhZCkgICAgICovCisjZGVmaW5lIFVEQ0NTMV9TU1QJMHgwMDAwMDAwOAkvKiBTZW50IFNUYWxsICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVEQ0NTMV9GU1QJMHgwMDAwMDAxMAkvKiBGb3JjZSBTVGFsbCAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVEQ0NTMV9STkUJMHgwMDAwMDAyMAkvKiBSZWNlaXZlIEZJRk8gTm90IEVtcHR5IChyZWFkKSAgICovCisKKyNkZWZpbmUgVURDQ1MyX1RGUwkweDAwMDAwMDAxCS8qIFRyYW5zbWl0IEZJRk8gOC1ieXRlcyBvciBsZXNzICAgKi8KKyAgICAgICAgICAgICAgICAJICAgICAgICAJLyogU2VydmljZSByZXF1ZXN0IChyZWFkKSAgICAgICAgICAqLworI2RlZmluZSBVRENDUzJfVFBDCTB4MDAwMDAwMDIJLyogVHJhbnNtaXQgUGFja2V0IENvbXBsZXRlICAgICAgICAqLworI2RlZmluZSBVRENDUzJfVFBFCTB4MDAwMDAwMDQJLyogVHJhbnNtaXQgUGFja2V0IEVycm9yIChyZWFkKSAgICAqLworI2RlZmluZSBVRENDUzJfVFVSCTB4MDAwMDAwMDgJLyogVHJhbnNtaXQgRklGTyBVbmRlci1SdW4gICAgICAgICAqLworI2RlZmluZSBVRENDUzJfU1NUCTB4MDAwMDAwMTAJLyogU2VudCBTVGFsbCAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVRENDUzJfRlNUCTB4MDAwMDAwMjAJLyogRm9yY2UgU1RhbGwgICAgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVEQ0QwX0RBVEEJRmxkICg4LCAwKQkvKiByZWNlaXZlL3RyYW5zbWl0IERBVEEgRklGT3MgICAgICovCisKKyNkZWZpbmUgVURDV0NfV0MJRmxkICg0LCAwKQkvKiBXcml0ZSBDb3VudCAgICAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVURDRFJfREFUQQlGbGQgKDgsIDApCS8qIHJlY2VpdmUvdHJhbnNtaXQgREFUQSBGSUZPcyAgICAgKi8KKworI2RlZmluZSBVRENTUl9FSVIJMHgwMDAwMDAwMQkvKiBFbmQtcG9pbnQgMCBJbnRlcnJ1cHQgUmVxdWVzdCAgICovCisjZGVmaW5lIFVEQ1NSX1JJUgkweDAwMDAwMDAyCS8qIFJlY2VpdmUgSW50ZXJydXB0IFJlcXVlc3QgICAgICAgKi8KKyNkZWZpbmUgVURDU1JfVElSCTB4MDAwMDAwMDQJLyogVHJhbnNtaXQgSW50ZXJydXB0IFJlcXVlc3QgICAgICAqLworI2RlZmluZSBVRENTUl9TVVNJUgkweDAwMDAwMDA4CS8qIFNVU3BlbmQgSW50ZXJydXB0IFJlcXVlc3QgICAgICAgKi8KKyNkZWZpbmUgVURDU1JfUkVTSVIJMHgwMDAwMDAxMAkvKiBSRVN1bWUgSW50ZXJydXB0IFJlcXVlc3QgICAgICAgICovCisjZGVmaW5lIFVEQ1NSX1JTVElSCTB4MDAwMDAwMjAJLyogUmVTZVQgSW50ZXJydXB0IFJlcXVlc3QgICAgICAgICAqLworCisKKy8qCisgKiBVbml2ZXJzYWwgQXN5bmNocm9ub3VzIFJlY2VpdmVyL1RyYW5zbWl0dGVyIChVQVJUKSBjb250cm9sIHJlZ2lzdGVycworICoKKyAqIFJlZ2lzdGVycworICogICAgU2VyMVVUQ1IwIAlTZXJpYWwgcG9ydCAxIFVuaXZlcnNhbCBBc3luY2hyb25vdXMKKyAqICAgICAgICAgICAgICAJUmVjZWl2ZXIvVHJhbnNtaXR0ZXIgKFVBUlQpIENvbnRyb2wgUmVnaXN0ZXIgMAorICogICAgICAgICAgICAgIAkocmVhZC93cml0ZSkuCisgKiAgICBTZXIxVVRDUjEgCVNlcmlhbCBwb3J0IDEgVW5pdmVyc2FsIEFzeW5jaHJvbm91cworICogICAgICAgICAgICAgIAlSZWNlaXZlci9UcmFuc21pdHRlciAoVUFSVCkgQ29udHJvbCBSZWdpc3RlciAxCisgKiAgICAgICAgICAgICAgCShyZWFkL3dyaXRlKS4KKyAqICAgIFNlcjFVVENSMiAJU2VyaWFsIHBvcnQgMSBVbml2ZXJzYWwgQXN5bmNocm9ub3VzCisgKiAgICAgICAgICAgICAgCVJlY2VpdmVyL1RyYW5zbWl0dGVyIChVQVJUKSBDb250cm9sIFJlZ2lzdGVyIDIKKyAqICAgICAgICAgICAgICAJKHJlYWQvd3JpdGUpLgorICogICAgU2VyMVVUQ1IzIAlTZXJpYWwgcG9ydCAxIFVuaXZlcnNhbCBBc3luY2hyb25vdXMKKyAqICAgICAgICAgICAgICAJUmVjZWl2ZXIvVHJhbnNtaXR0ZXIgKFVBUlQpIENvbnRyb2wgUmVnaXN0ZXIgMworICogICAgICAgICAgICAgIAkocmVhZC93cml0ZSkuCisgKiAgICBTZXIxVVREUiAgCVNlcmlhbCBwb3J0IDEgVW5pdmVyc2FsIEFzeW5jaHJvbm91cworICogICAgICAgICAgICAgIAlSZWNlaXZlci9UcmFuc21pdHRlciAoVUFSVCkgRGF0YSBSZWdpc3RlcgorICogICAgICAgICAgICAgIAkocmVhZC93cml0ZSkuCisgKiAgICBTZXIxVVRTUjAgCVNlcmlhbCBwb3J0IDEgVW5pdmVyc2FsIEFzeW5jaHJvbm91cworICogICAgICAgICAgICAgIAlSZWNlaXZlci9UcmFuc21pdHRlciAoVUFSVCkgU3RhdHVzIFJlZ2lzdGVyIDAKKyAqICAgICAgICAgICAgICAJKHJlYWQvd3JpdGUpLgorICogICAgU2VyMVVUU1IxIAlTZXJpYWwgcG9ydCAxIFVuaXZlcnNhbCBBc3luY2hyb25vdXMKKyAqICAgICAgICAgICAgICAJUmVjZWl2ZXIvVHJhbnNtaXR0ZXIgKFVBUlQpIFN0YXR1cyBSZWdpc3RlciAxIChyZWFkKS4KKyAqCisgKiAgICBTZXIyVVRDUjAgCVNlcmlhbCBwb3J0IDIgVW5pdmVyc2FsIEFzeW5jaHJvbm91cworICogICAgICAgICAgICAgIAlSZWNlaXZlci9UcmFuc21pdHRlciAoVUFSVCkgQ29udHJvbCBSZWdpc3RlciAwCisgKiAgICAgICAgICAgICAgCShyZWFkL3dyaXRlKS4KKyAqICAgIFNlcjJVVENSMSAJU2VyaWFsIHBvcnQgMiBVbml2ZXJzYWwgQXN5bmNocm9ub3VzCisgKiAgICAgICAgICAgICAgCVJlY2VpdmVyL1RyYW5zbWl0dGVyIChVQVJUKSBDb250cm9sIFJlZ2lzdGVyIDEKKyAqICAgICAgICAgICAgICAJKHJlYWQvd3JpdGUpLgorICogICAgU2VyMlVUQ1IyIAlTZXJpYWwgcG9ydCAyIFVuaXZlcnNhbCBBc3luY2hyb25vdXMKKyAqICAgICAgICAgICAgICAJUmVjZWl2ZXIvVHJhbnNtaXR0ZXIgKFVBUlQpIENvbnRyb2wgUmVnaXN0ZXIgMgorICogICAgICAgICAgICAgIAkocmVhZC93cml0ZSkuCisgKiAgICBTZXIyVVRDUjMgCVNlcmlhbCBwb3J0IDIgVW5pdmVyc2FsIEFzeW5jaHJvbm91cworICogICAgICAgICAgICAgIAlSZWNlaXZlci9UcmFuc21pdHRlciAoVUFSVCkgQ29udHJvbCBSZWdpc3RlciAzCisgKiAgICAgICAgICAgICAgCShyZWFkL3dyaXRlKS4KKyAqICAgIFNlcjJVVENSNCAJU2VyaWFsIHBvcnQgMiBVbml2ZXJzYWwgQXN5bmNocm9ub3VzCisgKiAgICAgICAgICAgICAgCVJlY2VpdmVyL1RyYW5zbWl0dGVyIChVQVJUKSBDb250cm9sIFJlZ2lzdGVyIDQKKyAqICAgICAgICAgICAgICAJKHJlYWQvd3JpdGUpLgorICogICAgU2VyMlVURFIgIAlTZXJpYWwgcG9ydCAyIFVuaXZlcnNhbCBBc3luY2hyb25vdXMKKyAqICAgICAgICAgICAgICAJUmVjZWl2ZXIvVHJhbnNtaXR0ZXIgKFVBUlQpIERhdGEgUmVnaXN0ZXIKKyAqICAgICAgICAgICAgICAJKHJlYWQvd3JpdGUpLgorICogICAgU2VyMlVUU1IwIAlTZXJpYWwgcG9ydCAyIFVuaXZlcnNhbCBBc3luY2hyb25vdXMKKyAqICAgICAgICAgICAgICAJUmVjZWl2ZXIvVHJhbnNtaXR0ZXIgKFVBUlQpIFN0YXR1cyBSZWdpc3RlciAwCisgKiAgICAgICAgICAgICAgCShyZWFkL3dyaXRlKS4KKyAqICAgIFNlcjJVVFNSMSAJU2VyaWFsIHBvcnQgMiBVbml2ZXJzYWwgQXN5bmNocm9ub3VzCisgKiAgICAgICAgICAgICAgCVJlY2VpdmVyL1RyYW5zbWl0dGVyIChVQVJUKSBTdGF0dXMgUmVnaXN0ZXIgMSAocmVhZCkuCisgKgorICogICAgU2VyM1VUQ1IwIAlTZXJpYWwgcG9ydCAzIFVuaXZlcnNhbCBBc3luY2hyb25vdXMKKyAqICAgICAgICAgICAgICAJUmVjZWl2ZXIvVHJhbnNtaXR0ZXIgKFVBUlQpIENvbnRyb2wgUmVnaXN0ZXIgMAorICogICAgICAgICAgICAgIAkocmVhZC93cml0ZSkuCisgKiAgICBTZXIzVVRDUjEgCVNlcmlhbCBwb3J0IDMgVW5pdmVyc2FsIEFzeW5jaHJvbm91cworICogICAgICAgICAgICAgIAlSZWNlaXZlci9UcmFuc21pdHRlciAoVUFSVCkgQ29udHJvbCBSZWdpc3RlciAxCisgKiAgICAgICAgICAgICAgCShyZWFkL3dyaXRlKS4KKyAqICAgIFNlcjNVVENSMiAJU2VyaWFsIHBvcnQgMyBVbml2ZXJzYWwgQXN5bmNocm9ub3VzCisgKiAgICAgICAgICAgICAgCVJlY2VpdmVyL1RyYW5zbWl0dGVyIChVQVJUKSBDb250cm9sIFJlZ2lzdGVyIDIKKyAqICAgICAgICAgICAgICAJKHJlYWQvd3JpdGUpLgorICogICAgU2VyM1VUQ1IzIAlTZXJpYWwgcG9ydCAzIFVuaXZlcnNhbCBBc3luY2hyb25vdXMKKyAqICAgICAgICAgICAgICAJUmVjZWl2ZXIvVHJhbnNtaXR0ZXIgKFVBUlQpIENvbnRyb2wgUmVnaXN0ZXIgMworICogICAgICAgICAgICAgIAkocmVhZC93cml0ZSkuCisgKiAgICBTZXIzVVREUiAgCVNlcmlhbCBwb3J0IDMgVW5pdmVyc2FsIEFzeW5jaHJvbm91cworICogICAgICAgICAgICAgIAlSZWNlaXZlci9UcmFuc21pdHRlciAoVUFSVCkgRGF0YSBSZWdpc3RlcgorICogICAgICAgICAgICAgIAkocmVhZC93cml0ZSkuCisgKiAgICBTZXIzVVRTUjAgCVNlcmlhbCBwb3J0IDMgVW5pdmVyc2FsIEFzeW5jaHJvbm91cworICogICAgICAgICAgICAgIAlSZWNlaXZlci9UcmFuc21pdHRlciAoVUFSVCkgU3RhdHVzIFJlZ2lzdGVyIDAKKyAqICAgICAgICAgICAgICAJKHJlYWQvd3JpdGUpLgorICogICAgU2VyM1VUU1IxIAlTZXJpYWwgcG9ydCAzIFVuaXZlcnNhbCBBc3luY2hyb25vdXMKKyAqICAgICAgICAgICAgICAJUmVjZWl2ZXIvVHJhbnNtaXR0ZXIgKFVBUlQpIFN0YXR1cyBSZWdpc3RlciAxIChyZWFkKS4KKyAqCisgKiBDbG9ja3MKKyAqICAgIGZ4dGwsIFR4dGwJRnJlcXVlbmN5LCBwZXJpb2Qgb2YgdGhlIHN5c3RlbSBjcnlzdGFsICgzLjY4NjQgTUh6CisgKiAgICAgICAgICAgICAgCW9yIDMuNTc5NSBNSHopLgorICogICAgZnVhLCBUdWEgIAlGcmVxdWVuY3ksIHBlcmlvZCBvZiB0aGUgVUFSVCBjb21tdW5pY2F0aW9uLgorICovCisKKyNkZWZpbmUgX1VUQ1IwKE5iKQlfX1JFRygweDgwMDEwMDAwICsgKChOYikgLSAxKSoweDAwMDIwMDAwKSAgLyogVUFSVCBDb250cm9sIFJlZy4gMCBbMS4uM10gKi8KKyNkZWZpbmUgX1VUQ1IxKE5iKQlfX1JFRygweDgwMDEwMDA0ICsgKChOYikgLSAxKSoweDAwMDIwMDAwKSAgLyogVUFSVCBDb250cm9sIFJlZy4gMSBbMS4uM10gKi8KKyNkZWZpbmUgX1VUQ1IyKE5iKQlfX1JFRygweDgwMDEwMDA4ICsgKChOYikgLSAxKSoweDAwMDIwMDAwKSAgLyogVUFSVCBDb250cm9sIFJlZy4gMiBbMS4uM10gKi8KKyNkZWZpbmUgX1VUQ1IzKE5iKQlfX1JFRygweDgwMDEwMDBDICsgKChOYikgLSAxKSoweDAwMDIwMDAwKSAgLyogVUFSVCBDb250cm9sIFJlZy4gMyBbMS4uM10gKi8KKyNkZWZpbmUgX1VUQ1I0KE5iKQlfX1JFRygweDgwMDEwMDEwICsgKChOYikgLSAxKSoweDAwMDIwMDAwKSAgLyogVUFSVCBDb250cm9sIFJlZy4gNCBbMl0gKi8KKyNkZWZpbmUgX1VURFIoTmIpCV9fUkVHKDB4ODAwMTAwMTQgKyAoKE5iKSAtIDEpKjB4MDAwMjAwMDApICAvKiBVQVJUIERhdGEgUmVnLiBbMS4uM10gKi8KKyNkZWZpbmUgX1VUU1IwKE5iKQlfX1JFRygweDgwMDEwMDFDICsgKChOYikgLSAxKSoweDAwMDIwMDAwKSAgLyogVUFSVCBTdGF0dXMgUmVnLiAwIFsxLi4zXSAqLworI2RlZmluZSBfVVRTUjEoTmIpCV9fUkVHKDB4ODAwMTAwMjAgKyAoKE5iKSAtIDEpKjB4MDAwMjAwMDApICAvKiBVQVJUIFN0YXR1cyBSZWcuIDEgWzEuLjNdICovCisKKyNkZWZpbmUgU2VyMVVUQ1IwCV9VVENSMCAoMSkJLyogU2VyLiBwb3J0IDEgVUFSVCBDb250cm9sIFJlZy4gMCAqLworI2RlZmluZSBTZXIxVVRDUjEJX1VUQ1IxICgxKQkvKiBTZXIuIHBvcnQgMSBVQVJUIENvbnRyb2wgUmVnLiAxICovCisjZGVmaW5lIFNlcjFVVENSMglfVVRDUjIgKDEpCS8qIFNlci4gcG9ydCAxIFVBUlQgQ29udHJvbCBSZWcuIDIgKi8KKyNkZWZpbmUgU2VyMVVUQ1IzCV9VVENSMyAoMSkJLyogU2VyLiBwb3J0IDEgVUFSVCBDb250cm9sIFJlZy4gMyAqLworI2RlZmluZSBTZXIxVVREUglfVVREUiAoMSkJLyogU2VyLiBwb3J0IDEgVUFSVCBEYXRhIFJlZy4gICAgICAqLworI2RlZmluZSBTZXIxVVRTUjAJX1VUU1IwICgxKQkvKiBTZXIuIHBvcnQgMSBVQVJUIFN0YXR1cyBSZWcuIDAgICovCisjZGVmaW5lIFNlcjFVVFNSMQlfVVRTUjEgKDEpCS8qIFNlci4gcG9ydCAxIFVBUlQgU3RhdHVzIFJlZy4gMSAgKi8KKworI2RlZmluZSBTZXIyVVRDUjAJX1VUQ1IwICgyKQkvKiBTZXIuIHBvcnQgMiBVQVJUIENvbnRyb2wgUmVnLiAwICovCisjZGVmaW5lIFNlcjJVVENSMQlfVVRDUjEgKDIpCS8qIFNlci4gcG9ydCAyIFVBUlQgQ29udHJvbCBSZWcuIDEgKi8KKyNkZWZpbmUgU2VyMlVUQ1IyCV9VVENSMiAoMikJLyogU2VyLiBwb3J0IDIgVUFSVCBDb250cm9sIFJlZy4gMiAqLworI2RlZmluZSBTZXIyVVRDUjMJX1VUQ1IzICgyKQkvKiBTZXIuIHBvcnQgMiBVQVJUIENvbnRyb2wgUmVnLiAzICovCisjZGVmaW5lIFNlcjJVVENSNAlfVVRDUjQgKDIpCS8qIFNlci4gcG9ydCAyIFVBUlQgQ29udHJvbCBSZWcuIDQgKi8KKyNkZWZpbmUgU2VyMlVURFIJX1VURFIgKDIpCS8qIFNlci4gcG9ydCAyIFVBUlQgRGF0YSBSZWcuICAgICAgKi8KKyNkZWZpbmUgU2VyMlVUU1IwCV9VVFNSMCAoMikJLyogU2VyLiBwb3J0IDIgVUFSVCBTdGF0dXMgUmVnLiAwICAqLworI2RlZmluZSBTZXIyVVRTUjEJX1VUU1IxICgyKQkvKiBTZXIuIHBvcnQgMiBVQVJUIFN0YXR1cyBSZWcuIDEgICovCisKKyNkZWZpbmUgU2VyM1VUQ1IwCV9VVENSMCAoMykJLyogU2VyLiBwb3J0IDMgVUFSVCBDb250cm9sIFJlZy4gMCAqLworI2RlZmluZSBTZXIzVVRDUjEJX1VUQ1IxICgzKQkvKiBTZXIuIHBvcnQgMyBVQVJUIENvbnRyb2wgUmVnLiAxICovCisjZGVmaW5lIFNlcjNVVENSMglfVVRDUjIgKDMpCS8qIFNlci4gcG9ydCAzIFVBUlQgQ29udHJvbCBSZWcuIDIgKi8KKyNkZWZpbmUgU2VyM1VUQ1IzCV9VVENSMyAoMykJLyogU2VyLiBwb3J0IDMgVUFSVCBDb250cm9sIFJlZy4gMyAqLworI2RlZmluZSBTZXIzVVREUglfVVREUiAoMykJLyogU2VyLiBwb3J0IDMgVUFSVCBEYXRhIFJlZy4gICAgICAqLworI2RlZmluZSBTZXIzVVRTUjAJX1VUU1IwICgzKQkvKiBTZXIuIHBvcnQgMyBVQVJUIFN0YXR1cyBSZWcuIDAgICovCisjZGVmaW5lIFNlcjNVVFNSMQlfVVRTUjEgKDMpCS8qIFNlci4gcG9ydCAzIFVBUlQgU3RhdHVzIFJlZy4gMSAgKi8KKworLyogVGhvc2UgYXJlIHN0aWxsIHVzZWQgaW4gc29tZSBwbGFjZXMgKi8KKyNkZWZpbmUgX1NlcjFVVENSMAlfX1BSRUcoU2VyMVVUQ1IwKQorI2RlZmluZSBfU2VyMlVUQ1IwCV9fUFJFRyhTZXIyVVRDUjApCisjZGVmaW5lIF9TZXIzVVRDUjAJX19QUkVHKFNlcjNVVENSMCkKKworLyogUmVnaXN0ZXIgb2Zmc2V0cyAqLworI2RlZmluZSBVVENSMAkJMHgwMAorI2RlZmluZSBVVENSMQkJMHgwNAorI2RlZmluZSBVVENSMgkJMHgwOAorI2RlZmluZSBVVENSMwkJMHgwYworI2RlZmluZSBVVERSCQkweDE0CisjZGVmaW5lIFVUU1IwCQkweDFjCisjZGVmaW5lIFVUU1IxCQkweDIwCisKKyNkZWZpbmUgVVRDUjBfUEUJMHgwMDAwMDAwMQkvKiBQYXJpdHkgRW5hYmxlICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVUQ1IwX09FUwkweDAwMDAwMDAyCS8qIE9kZC9FdmVuIHBhcml0eSBTZWxlY3QgICAgICAgICAgKi8KKyNkZWZpbmUgVVRDUjBfT2RkUGFyCShVVENSMF9PRVMqMCkJLyogIE9kZCBQYXJpdHkgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVVENSMF9FdmVuUGFyCShVVENSMF9PRVMqMSkJLyogIEV2ZW4gUGFyaXR5ICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVVENSMF9TQlMJMHgwMDAwMDAwNAkvKiBTdG9wIEJpdCBTZWxlY3QgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVUQ1IwXzFTdHBCaXQJKFVUQ1IwX1NCUyowKQkvKiAgMSBTdG9wIEJpdCBwZXIgZnJhbWUgICAgICAgICAgICovCisjZGVmaW5lIFVUQ1IwXzJTdHBCaXQJKFVUQ1IwX1NCUyoxKQkvKiAgMiBTdG9wIEJpdHMgcGVyIGZyYW1lICAgICAgICAgICovCisjZGVmaW5lIFVUQ1IwX0RTUwkweDAwMDAwMDA4CS8qIERhdGEgU2l6ZSBTZWxlY3QgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVRDUjBfN0JpdERhdGEJKFVUQ1IwX0RTUyowKQkvKiAgNy1CaXQgRGF0YSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVUQ1IwXzhCaXREYXRhCShVVENSMF9EU1MqMSkJLyogIDgtQml0IERhdGEgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVVENSMF9TQ0UJMHgwMDAwMDAxMAkvKiBTYW1wbGUgQ2xvY2sgRW5hYmxlICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIChzZXIuIHBvcnQgMTogR1BJTyBbMThdLCAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAJICAgICAgICAJLyogc2VyLiBwb3J0IDM6IEdQSU8gWzIwXSkgICAgICAgICAqLworI2RlZmluZSBVVENSMF9SQ0UJMHgwMDAwMDAyMAkvKiBSZWNlaXZlIENsb2NrIEVkZ2Ugc2VsZWN0ICAgICAgICovCisjZGVmaW5lIFVUQ1IwX1JjUnNFZGcJKFVUQ1IwX1JDRSowKQkvKiAgUmVjZWl2ZSBjbG9jayBSaXNpbmctRWRnZSAgICAgICovCisjZGVmaW5lIFVUQ1IwX1JjRmxFZGcJKFVUQ1IwX1JDRSoxKQkvKiAgUmVjZWl2ZSBjbG9jayBGYWxsaW5nLUVkZ2UgICAgICovCisjZGVmaW5lIFVUQ1IwX1RDRQkweDAwMDAwMDQwCS8qIFRyYW5zbWl0IENsb2NrIEVkZ2Ugc2VsZWN0ICAgICAgKi8KKyNkZWZpbmUgVVRDUjBfVHJSc0VkZwkoVVRDUjBfVENFKjApCS8qICBUcmFuc21pdCBjbG9jayBSaXNpbmctRWRnZSAgICAgKi8KKyNkZWZpbmUgVVRDUjBfVHJGbEVkZwkoVVRDUjBfVENFKjEpCS8qICBUcmFuc21pdCBjbG9jayBGYWxsaW5nLUVkZ2UgICAgKi8KKyNkZWZpbmUgVVRDUjBfU2VyMklyREEJICAgICAgICAJLyogU2VyLiBwb3J0IDIgSXJEQSBzZXR0aW5ncyAgICAgICAqLyBcCisgICAgICAgICAgICAgICAgCShVVENSMF8xU3RwQml0ICsgVVRDUjBfOEJpdERhdGEpCisKKyNkZWZpbmUgVVRDUjFfQlJECUZsZCAoNCwgMCkJLyogQmF1ZCBSYXRlIERpdmlzb3IvMTYgLSAxIFsxMTo4XSAqLworI2RlZmluZSBVVENSMl9CUkQJRmxkICg4LCAwKQkvKiBCYXVkIFJhdGUgRGl2aXNvci8xNiAtIDEgIFs3OjBdICovCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIGZ1YSA9IGZ4dGwvKDE2KihCUkRbMTE6MF0gKyAxKSkgKi8KKyAgICAgICAgICAgICAgICAJICAgICAgICAJLyogVHVhID0gMTYqKEJSRCBbMTE6MF0gKyAxKSpUeHRsICAqLworI2RlZmluZSBVVENSMV9CZFJ0RGl2KERpdikgICAgICAJLyogIEJhdWQgUmF0ZSBEaXZpc29yIFsxNi4uNjU1MzZdICAqLyBcCisgICAgICAgICAgICAgICAgCSgoKERpdikgLSAxNikvMTYgPj4gRlNpemUgKFVUQ1IyX0JSRCkgPDwgXAorICAgICAgICAgICAgICAgIAkgRlNoZnQgKFVUQ1IxX0JSRCkpCisjZGVmaW5lIFVUQ1IyX0JkUnREaXYoRGl2KSAgICAgIAkvKiAgQmF1ZCBSYXRlIERpdmlzb3IgWzE2Li42NTUzNl0gICovIFwKKyAgICAgICAgICAgICAgICAJKCgoRGl2KSAtIDE2KS8xNiAmIEZBbG5Nc2sgKFVUQ1IyX0JSRCkgPDwgXAorICAgICAgICAgICAgICAgIAkgRlNoZnQgKFVUQ1IyX0JSRCkpCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qICBmdWEgPSBmeHRsLygxNipGbG9vciAoRGl2LzE2KSkgKi8KKyAgICAgICAgICAgICAgICAJICAgICAgICAJLyogIFR1YSA9IDE2KkZsb29yIChEaXYvMTYpKlR4dGwgICAqLworI2RlZmluZSBVVENSMV9DZWlsQmRSdERpdihEaXYpICAJLyogIENlaWwuIG9mIEJkUnREaXYgWzE2Li42NTUzNl0gICAqLyBcCisgICAgICAgICAgICAgICAgCSgoKERpdikgLSAxKS8xNiA+PiBGU2l6ZSAoVVRDUjJfQlJEKSA8PCBcCisgICAgICAgICAgICAgICAgCSBGU2hmdCAoVVRDUjFfQlJEKSkKKyNkZWZpbmUgVVRDUjJfQ2VpbEJkUnREaXYoRGl2KSAgCS8qICBDZWlsLiBvZiBCZFJ0RGl2IFsxNi4uNjU1MzZdICAgKi8gXAorICAgICAgICAgICAgICAgIAkoKChEaXYpIC0gMSkvMTYgJiBGQWxuTXNrIChVVENSMl9CUkQpIDw8IFwKKyAgICAgICAgICAgICAgICAJIEZTaGZ0IChVVENSMl9CUkQpKQorICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAgZnVhID0gZnh0bC8oMTYqQ2VpbCAoRGl2LzE2KSkgICovCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qICBUdWEgPSAxNipDZWlsIChEaXYvMTYpKlR4dGwgICAgKi8KKworI2RlZmluZSBVVENSM19SWEUJMHgwMDAwMDAwMQkvKiBSZWNlaXZlIEVuYWJsZSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVUQ1IzX1RYRQkweDAwMDAwMDAyCS8qIFRyYW5zbWl0IEVuYWJsZSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVRDUjNfQlJLCTB4MDAwMDAwMDQJLyogQlJlYUsgbW9kZSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVVENSM19SSUUJMHgwMDAwMDAwOAkvKiBSZWNlaXZlIEZJRk8gMS8zLXRvLTIvMy1mdWxsIG9yICovCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIG1vcmUgSW50ZXJydXB0IEVuYWJsZSAgICAgICAgICAgKi8KKyNkZWZpbmUgVVRDUjNfVElFCTB4MDAwMDAwMTAJLyogVHJhbnNtaXQgRklGTyAxLzItZnVsbCBvciBsZXNzICAqLworICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBJbnRlcnJ1cHQgRW5hYmxlICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVUQ1IzX0xCTQkweDAwMDAwMDIwCS8qIExvb2stQmFjayBNb2RlICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVRDUjNfU2VyMklyREEJICAgICAgICAJLyogU2VyLiBwb3J0IDIgSXJEQSBzZXR0aW5ncyAoUklFLCAqLyBcCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIFRJRSwgTEJNIGNhbiBiZSBzZXQgb3IgY2xlYXJlZCkgKi8gXAorICAgICAgICAgICAgICAgIAkoVVRDUjNfUlhFICsgVVRDUjNfVFhFKQorCisjZGVmaW5lIFVUQ1I0X0hTRQkweDAwMDAwMDAxCS8qIEhld2xldHQtUGFja2FyZCBTZXJpYWwgSW5mcmFSZWQgKi8KKyAgICAgICAgICAgICAgICAJICAgICAgICAJLyogKEhQLVNJUikgbW9kdWxhdGlvbiBFbmFibGUgICAgICAqLworI2RlZmluZSBVVENSNF9OUloJKFVUQ1I0X0hTRSowKQkvKiAgTm9uLVJldHVybiB0byBaZXJvIG1vZHVsYXRpb24gICovCisjZGVmaW5lIFVUQ1I0X0hQU0lSCShVVENSNF9IU0UqMSkJLyogIEhQLVNJUiBtb2R1bGF0aW9uICAgICAgICAgICAgICAqLworI2RlZmluZSBVVENSNF9MUE0JMHgwMDAwMDAwMgkvKiBMb3ctUG93ZXIgTW9kZSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVUQ1I0X1ozXzE2Qml0CShVVENSNF9MUE0qMCkJLyogIFplcm8gcHVsc2UgPSAzLzE2IEJpdCB0aW1lICAgICAqLworI2RlZmluZSBVVENSNF9aMV82dXMJKFVUQ1I0X0xQTSoxKQkvKiAgWmVybyBwdWxzZSA9IDEuNiB1cyAgICAgICAgICAgICovCisKKyNkZWZpbmUgVVREUl9EQVRBCUZsZCAoOCwgMCkJLyogcmVjZWl2ZS90cmFuc21pdCBEQVRBIEZJRk9zICAgICAqLworI2lmIDAgICAgICAgICAgIAkgICAgICAgIAkvKiBIaWRkZW4gcmVjZWl2ZSBGSUZPIGJpdHMgICAgICAgICovCisjZGVmaW5lIFVURFJfUFJFCTB4MDAwMDAxMDAJLyogIHJlY2VpdmUgUGFSaXR5IEVycm9yIChyZWFkKSAgICAqLworI2RlZmluZSBVVERSX0ZSRQkweDAwMDAwMjAwCS8qICByZWNlaXZlIEZSYW1pbmcgRXJyb3IgKHJlYWQpICAgKi8KKyNkZWZpbmUgVVREUl9ST1IJMHgwMDAwMDQwMAkvKiAgUmVjZWl2ZSBGSUZPIE92ZXItUnVuIChyZWFkKSAgICovCisjZW5kaWYgLyogMCAqLworCisjZGVmaW5lIFVUU1IwX1RGUwkweDAwMDAwMDAxCS8qIFRyYW5zbWl0IEZJRk8gMS8yLWZ1bGwgb3IgbGVzcyAgKi8KKyAgICAgICAgICAgICAgICAJICAgICAgICAJLyogU2VydmljZSByZXF1ZXN0IChyZWFkKSAgICAgICAgICAqLworI2RlZmluZSBVVFNSMF9SRlMJMHgwMDAwMDAwMgkvKiBSZWNlaXZlIEZJRk8gMS8zLXRvLTIvMy1mdWxsIG9yICovCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIG1vcmUgU2VydmljZSByZXF1ZXN0IChyZWFkKSAgICAgKi8KKyNkZWZpbmUgVVRTUjBfUklECTB4MDAwMDAwMDQJLyogUmVjZWl2ZXIgSURsZSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVVFNSMF9SQkIJMHgwMDAwMDAwOAkvKiBSZWNlaXZlIEJlZ2lubmluZyBvZiBCcmVhayAgICAgICovCisjZGVmaW5lIFVUU1IwX1JFQgkweDAwMDAwMDEwCS8qIFJlY2VpdmUgRW5kIG9mIEJyZWFrICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVRTUjBfRUlGCTB4MDAwMDAwMjAJLyogRXJyb3IgSW4gRklGTyAocmVhZCkgICAgICAgICAgICAqLworCisjZGVmaW5lIFVUU1IxX1RCWQkweDAwMDAwMDAxCS8qIFRyYW5zbWl0dGVyIEJ1c1kgKHJlYWQpICAgICAgICAgKi8KKyNkZWZpbmUgVVRTUjFfUk5FCTB4MDAwMDAwMDIJLyogUmVjZWl2ZSBGSUZPIE5vdCBFbXB0eSAocmVhZCkgICAqLworI2RlZmluZSBVVFNSMV9UTkYJMHgwMDAwMDAwNAkvKiBUcmFuc21pdCBGSUZPIE5vdCBGdWxsIChyZWFkKSAgICovCisjZGVmaW5lIFVUU1IxX1BSRQkweDAwMDAwMDA4CS8qIHJlY2VpdmUgUGFSaXR5IEVycm9yIChyZWFkKSAgICAgKi8KKyNkZWZpbmUgVVRTUjFfRlJFCTB4MDAwMDAwMTAJLyogcmVjZWl2ZSBGUmFtaW5nIEVycm9yIChyZWFkKSAgICAqLworI2RlZmluZSBVVFNSMV9ST1IJMHgwMDAwMDAyMAkvKiBSZWNlaXZlIEZJRk8gT3Zlci1SdW4gKHJlYWQpICAgICovCisKKworLyoKKyAqIFN5bmNocm9ub3VzIERhdGEgTGluayBDb250cm9sbGVyIChTRExDKSBjb250cm9sIHJlZ2lzdGVycworICoKKyAqIFJlZ2lzdGVycworICogICAgU2VyMVNEQ1IwIAlTZXJpYWwgcG9ydCAxIFN5bmNocm9ub3VzIERhdGEgTGluayBDb250cm9sbGVyIChTRExDKQorICogICAgICAgICAgICAgIAlDb250cm9sIFJlZ2lzdGVyIDAgKHJlYWQvd3JpdGUpLgorICogICAgU2VyMVNEQ1IxIAlTZXJpYWwgcG9ydCAxIFN5bmNocm9ub3VzIERhdGEgTGluayBDb250cm9sbGVyIChTRExDKQorICogICAgICAgICAgICAgIAlDb250cm9sIFJlZ2lzdGVyIDEgKHJlYWQvd3JpdGUpLgorICogICAgU2VyMVNEQ1IyIAlTZXJpYWwgcG9ydCAxIFN5bmNocm9ub3VzIERhdGEgTGluayBDb250cm9sbGVyIChTRExDKQorICogICAgICAgICAgICAgIAlDb250cm9sIFJlZ2lzdGVyIDIgKHJlYWQvd3JpdGUpLgorICogICAgU2VyMVNEQ1IzIAlTZXJpYWwgcG9ydCAxIFN5bmNocm9ub3VzIERhdGEgTGluayBDb250cm9sbGVyIChTRExDKQorICogICAgICAgICAgICAgIAlDb250cm9sIFJlZ2lzdGVyIDMgKHJlYWQvd3JpdGUpLgorICogICAgU2VyMVNEQ1I0IAlTZXJpYWwgcG9ydCAxIFN5bmNocm9ub3VzIERhdGEgTGluayBDb250cm9sbGVyIChTRExDKQorICogICAgICAgICAgICAgIAlDb250cm9sIFJlZ2lzdGVyIDQgKHJlYWQvd3JpdGUpLgorICogICAgU2VyMVNERFIgIAlTZXJpYWwgcG9ydCAxIFN5bmNocm9ub3VzIERhdGEgTGluayBDb250cm9sbGVyIChTRExDKQorICogICAgICAgICAgICAgIAlEYXRhIFJlZ2lzdGVyIChyZWFkL3dyaXRlKS4KKyAqICAgIFNlcjFTRFNSMCAJU2VyaWFsIHBvcnQgMSBTeW5jaHJvbm91cyBEYXRhIExpbmsgQ29udHJvbGxlciAoU0RMQykKKyAqICAgICAgICAgICAgICAJU3RhdHVzIFJlZ2lzdGVyIDAgKHJlYWQvd3JpdGUpLgorICogICAgU2VyMVNEU1IxIAlTZXJpYWwgcG9ydCAxIFN5bmNocm9ub3VzIERhdGEgTGluayBDb250cm9sbGVyIChTRExDKQorICogICAgICAgICAgICAgIAlTdGF0dXMgUmVnaXN0ZXIgMSAocmVhZC93cml0ZSkuCisgKgorICogQ2xvY2tzCisgKiAgICBmeHRsLCBUeHRsCUZyZXF1ZW5jeSwgcGVyaW9kIG9mIHRoZSBzeXN0ZW0gY3J5c3RhbCAoMy42ODY0IE1IegorICogICAgICAgICAgICAgIAlvciAzLjU3OTUgTUh6KS4KKyAqICAgIGZzZCwgVHNkICAJRnJlcXVlbmN5LCBwZXJpb2Qgb2YgdGhlIFNETEMgY29tbXVuaWNhdGlvbi4KKyAqLworCisjZGVmaW5lIFNlcjFTRENSMAlfX1JFRygweDgwMDIwMDYwKSAgLyogU2VyLiBwb3J0IDEgU0RMQyBDb250cm9sIFJlZy4gMCAqLworI2RlZmluZSBTZXIxU0RDUjEJX19SRUcoMHg4MDAyMDA2NCkgIC8qIFNlci4gcG9ydCAxIFNETEMgQ29udHJvbCBSZWcuIDEgKi8KKyNkZWZpbmUgU2VyMVNEQ1IyCV9fUkVHKDB4ODAwMjAwNjgpICAvKiBTZXIuIHBvcnQgMSBTRExDIENvbnRyb2wgUmVnLiAyICovCisjZGVmaW5lIFNlcjFTRENSMwlfX1JFRygweDgwMDIwMDZDKSAgLyogU2VyLiBwb3J0IDEgU0RMQyBDb250cm9sIFJlZy4gMyAqLworI2RlZmluZSBTZXIxU0RDUjQJX19SRUcoMHg4MDAyMDA3MCkgIC8qIFNlci4gcG9ydCAxIFNETEMgQ29udHJvbCBSZWcuIDQgKi8KKyNkZWZpbmUgU2VyMVNERFIJX19SRUcoMHg4MDAyMDA3OCkgIC8qIFNlci4gcG9ydCAxIFNETEMgRGF0YSBSZWcuICAgICAgKi8KKyNkZWZpbmUgU2VyMVNEU1IwCV9fUkVHKDB4ODAwMjAwODApICAvKiBTZXIuIHBvcnQgMSBTRExDIFN0YXR1cyBSZWcuIDAgICovCisjZGVmaW5lIFNlcjFTRFNSMQlfX1JFRygweDgwMDIwMDg0KSAgLyogU2VyLiBwb3J0IDEgU0RMQyBTdGF0dXMgUmVnLiAxICAqLworCisjZGVmaW5lIFNEQ1IwX1NVUwkweDAwMDAwMDAxCS8qIFNETEMvVUFSVCBTZWxlY3QgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0RDUjBfU0RMQwkoU0RDUjBfU1VTKjApCS8qICBTRExDIG1vZGUgKFRYRDEgJiBSWEQxKSAgICAgICAgKi8KKyNkZWZpbmUgU0RDUjBfVUFSVAkoU0RDUjBfU1VTKjEpCS8qICBVQVJUIG1vZGUgKFRYRDEgJiBSWEQxKSAgICAgICAgKi8KKyNkZWZpbmUgU0RDUjBfU0RGCTB4MDAwMDAwMDIJLyogU2luZ2xlL0RvdWJsZSBzdGFydCBGbGFnIHNlbGVjdCAqLworI2RlZmluZSBTRENSMF9TZ2xGbGcJKFNEQ1IwX1NERiowKQkvKiAgU2luZ2xlIHN0YXJ0IEZsYWcgICAgICAgICAgICAgICovCisjZGVmaW5lIFNEQ1IwX0RibEZsZwkoU0RDUjBfU0RGKjEpCS8qICBEb3VibGUgc3RhcnQgRmxhZyAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0RDUjBfTEJNCTB4MDAwMDAwMDQJLyogTG9vay1CYWNrIE1vZGUgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTRENSMF9CTVMJMHgwMDAwMDAwOAkvKiBCaXQgTW9kdWxhdGlvbiBTZWxlY3QgICAgICAgICAgICovCisjZGVmaW5lIFNEQ1IwX0ZNMAkoU0RDUjBfQk1TKjApCS8qICBGcmVxLiBNb2R1bGF0aW9uIHplcm8gKDApICAgICAgKi8KKyNkZWZpbmUgU0RDUjBfTlJaCShTRENSMF9CTVMqMSkJLyogIE5vbi1SZXR1cm4gdG8gWmVybyBtb2R1bGF0aW9uICAqLworI2RlZmluZSBTRENSMF9TQ0UJMHgwMDAwMDAxMAkvKiBTYW1wbGUgQ2xvY2sgRW5hYmxlIChHUElPIFsxNl0pICovCisjZGVmaW5lIFNEQ1IwX1NDRAkweDAwMDAwMDIwCS8qIFNhbXBsZSBDbG9jayBEaXJlY3Rpb24gc2VsZWN0ICAgKi8KKyAgICAgICAgICAgICAgICAJICAgICAgICAJLyogKEdQSU8gWzE2XSkgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTRENSMF9TQ2xrSW4JKFNEQ1IwX1NDRCowKQkvKiAgU2FtcGxlIENsb2NrIElucHV0ICAgICAgICAgICAgICovCisjZGVmaW5lIFNEQ1IwX1NDbGtPdXQJKFNEQ1IwX1NDRCoxKQkvKiAgU2FtcGxlIENsb2NrIE91dHB1dCAgICAgICAgICAgICovCisjZGVmaW5lIFNEQ1IwX1JDRQkweDAwMDAwMDQwCS8qIFJlY2VpdmUgQ2xvY2sgRWRnZSBzZWxlY3QgICAgICAgKi8KKyNkZWZpbmUgU0RDUjBfUmNSc0VkZwkoU0RDUjBfUkNFKjApCS8qICBSZWNlaXZlIGNsb2NrIFJpc2luZy1FZGdlICAgICAgKi8KKyNkZWZpbmUgU0RDUjBfUmNGbEVkZwkoU0RDUjBfUkNFKjEpCS8qICBSZWNlaXZlIGNsb2NrIEZhbGxpbmctRWRnZSAgICAgKi8KKyNkZWZpbmUgU0RDUjBfVENFCTB4MDAwMDAwODAJLyogVHJhbnNtaXQgQ2xvY2sgRWRnZSBzZWxlY3QgICAgICAqLworI2RlZmluZSBTRENSMF9UclJzRWRnCShTRENSMF9UQ0UqMCkJLyogIFRyYW5zbWl0IGNsb2NrIFJpc2luZy1FZGdlICAgICAqLworI2RlZmluZSBTRENSMF9UckZsRWRnCShTRENSMF9UQ0UqMSkJLyogIFRyYW5zbWl0IGNsb2NrIEZhbGxpbmctRWRnZSAgICAqLworCisjZGVmaW5lIFNEQ1IxX0FBRgkweDAwMDAwMDAxCS8qIEFib3J0IEFmdGVyIEZyYW1lIGVuYWJsZSAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAJICAgICAgICAJLyogKEdQSU8gWzE3XSkgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTRENSMV9UWEUJMHgwMDAwMDAwMgkvKiBUcmFuc21pdCBFbmFibGUgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNEQ1IxX1JYRQkweDAwMDAwMDA0CS8qIFJlY2VpdmUgRW5hYmxlICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0RDUjFfUklFCTB4MDAwMDAwMDgJLyogUmVjZWl2ZSBGSUZPIDEvMy10by0yLzMtZnVsbCBvciAqLworICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBtb3JlIEludGVycnVwdCBFbmFibGUgICAgICAgICAgICovCisjZGVmaW5lIFNEQ1IxX1RJRQkweDAwMDAwMDEwCS8qIFRyYW5zbWl0IEZJRk8gMS8yLWZ1bGwgb3IgbGVzcyAgKi8KKyAgICAgICAgICAgICAgICAJICAgICAgICAJLyogSW50ZXJydXB0IEVuYWJsZSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTRENSMV9BTUUJMHgwMDAwMDAyMAkvKiBBZGRyZXNzIE1hdGNoIEVuYWJsZSAgICAgICAgICAgICovCisjZGVmaW5lIFNEQ1IxX1RVUwkweDAwMDAwMDQwCS8qIFRyYW5zbWl0IEZJRk8gVW5kZXItcnVuIFNlbGVjdCAgKi8KKyNkZWZpbmUgU0RDUjFfRUZybVVSbgkoU0RDUjFfVFVTKjApCS8qICBFbmQgRnJhbWUgb24gVW5kZXItUnVuICAgICAgICAgKi8KKyNkZWZpbmUgU0RDUjFfQWJvcnRVUm4JKFNEQ1IxX1RVUyoxKQkvKiAgQWJvcnQgb24gVW5kZXItUnVuICAgICAgICAgICAgICovCisjZGVmaW5lIFNEQ1IxX1JBRQkweDAwMDAwMDgwCS8qIFJlY2VpdmUgQWJvcnQgaW50ZXJydXB0IEVuYWJsZSAgKi8KKworI2RlZmluZSBTRENSMl9BTVYJRmxkICg4LCAwKQkvKiBBZGRyZXNzIE1hdGNoIFZhbHVlICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0RDUjNfQlJECUZsZCAoNCwgMCkJLyogQmF1ZCBSYXRlIERpdmlzb3IvMTYgLSAxIFsxMTo4XSAqLworI2RlZmluZSBTRENSNF9CUkQJRmxkICg4LCAwKQkvKiBCYXVkIFJhdGUgRGl2aXNvci8xNiAtIDEgIFs3OjBdICovCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIGZzZCA9IGZ4dGwvKDE2KihCUkRbMTE6MF0gKyAxKSkgKi8KKyAgICAgICAgICAgICAgICAJICAgICAgICAJLyogVHNkID0gMTYqKEJSRFsxMTowXSArIDEpKlR4dGwgICAqLworI2RlZmluZSBTRENSM19CZFJ0RGl2KERpdikgICAgICAJLyogIEJhdWQgUmF0ZSBEaXZpc29yIFsxNi4uNjU1MzZdICAqLyBcCisgICAgICAgICAgICAgICAgCSgoKERpdikgLSAxNikvMTYgPj4gRlNpemUgKFNEQ1I0X0JSRCkgPDwgXAorICAgICAgICAgICAgICAgIAkgRlNoZnQgKFNEQ1IzX0JSRCkpCisjZGVmaW5lIFNEQ1I0X0JkUnREaXYoRGl2KSAgICAgIAkvKiAgQmF1ZCBSYXRlIERpdmlzb3IgWzE2Li42NTUzNl0gICovIFwKKyAgICAgICAgICAgICAgICAJKCgoRGl2KSAtIDE2KS8xNiAmIEZBbG5Nc2sgKFNEQ1I0X0JSRCkgPDwgXAorICAgICAgICAgICAgICAgIAkgRlNoZnQgKFNEQ1I0X0JSRCkpCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qICBmc2QgPSBmeHRsLygxNipGbG9vciAoRGl2LzE2KSkgKi8KKyAgICAgICAgICAgICAgICAJICAgICAgICAJLyogIFRzZCA9IDE2KkZsb29yIChEaXYvMTYpKlR4dGwgICAqLworI2RlZmluZSBTRENSM19DZWlsQmRSdERpdihEaXYpICAJLyogIENlaWwuIG9mIEJkUnREaXYgWzE2Li42NTUzNl0gICAqLyBcCisgICAgICAgICAgICAgICAgCSgoKERpdikgLSAxKS8xNiA+PiBGU2l6ZSAoU0RDUjRfQlJEKSA8PCBcCisgICAgICAgICAgICAgICAgCSBGU2hmdCAoU0RDUjNfQlJEKSkKKyNkZWZpbmUgU0RDUjRfQ2VpbEJkUnREaXYoRGl2KSAgCS8qICBDZWlsLiBvZiBCZFJ0RGl2IFsxNi4uNjU1MzZdICAgKi8gXAorICAgICAgICAgICAgICAgIAkoKChEaXYpIC0gMSkvMTYgJiBGQWxuTXNrIChTRENSNF9CUkQpIDw8IFwKKyAgICAgICAgICAgICAgICAJIEZTaGZ0IChTRENSNF9CUkQpKQorICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAgZnNkID0gZnh0bC8oMTYqQ2VpbCAoRGl2LzE2KSkgICovCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qICBUc2QgPSAxNipDZWlsIChEaXYvMTYpKlR4dGwgICAgKi8KKworI2RlZmluZSBTRERSX0RBVEEJRmxkICg4LCAwKQkvKiByZWNlaXZlL3RyYW5zbWl0IERBVEEgRklGT3MgICAgICovCisjaWYgMCAgICAgICAgICAgCSAgICAgICAgCS8qIEhpZGRlbiByZWNlaXZlIEZJRk8gYml0cyAgICAgICAgKi8KKyNkZWZpbmUgU0REUl9FT0YJMHgwMDAwMDEwMAkvKiAgcmVjZWl2ZSBFbmQtT2YtRnJhbWUgKHJlYWQpICAgICovCisjZGVmaW5lIFNERFJfQ1JFCTB4MDAwMDAyMDAJLyogIHJlY2VpdmUgQ1JDIEVycm9yIChyZWFkKSAgICAgICAqLworI2RlZmluZSBTRERSX1JPUgkweDAwMDAwNDAwCS8qICBSZWNlaXZlIEZJRk8gT3Zlci1SdW4gKHJlYWQpICAgKi8KKyNlbmRpZiAvKiAwICovCisKKyNkZWZpbmUgU0RTUjBfRUlGCTB4MDAwMDAwMDEJLyogRXJyb3IgSW4gRklGTyAocmVhZCkgICAgICAgICAgICAqLworI2RlZmluZSBTRFNSMF9UVVIJMHgwMDAwMDAwMgkvKiBUcmFuc21pdCBGSUZPIFVuZGVyLVJ1biAgICAgICAgICovCisjZGVmaW5lIFNEU1IwX1JBQgkweDAwMDAwMDA0CS8qIFJlY2VpdmUgQUJvcnQgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0RTUjBfVEZTCTB4MDAwMDAwMDgJLyogVHJhbnNtaXQgRklGTyAxLzItZnVsbCBvciBsZXNzICAqLworICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBTZXJ2aWNlIHJlcXVlc3QgKHJlYWQpICAgICAgICAgICovCisjZGVmaW5lIFNEU1IwX1JGUwkweDAwMDAwMDEwCS8qIFJlY2VpdmUgRklGTyAxLzMtdG8tMi8zLWZ1bGwgb3IgKi8KKyAgICAgICAgICAgICAgICAJICAgICAgICAJLyogbW9yZSBTZXJ2aWNlIHJlcXVlc3QgKHJlYWQpICAgICAqLworCisjZGVmaW5lIFNEU1IxX1JTWQkweDAwMDAwMDAxCS8qIFJlY2VpdmVyIFNZbmNocm9uaXplZCAocmVhZCkgICAgKi8KKyNkZWZpbmUgU0RTUjFfVEJZCTB4MDAwMDAwMDIJLyogVHJhbnNtaXR0ZXIgQnVzWSAocmVhZCkgICAgICAgICAqLworI2RlZmluZSBTRFNSMV9STkUJMHgwMDAwMDAwNAkvKiBSZWNlaXZlIEZJRk8gTm90IEVtcHR5IChyZWFkKSAgICovCisjZGVmaW5lIFNEU1IxX1RORgkweDAwMDAwMDA4CS8qIFRyYW5zbWl0IEZJRk8gTm90IEZ1bGwgKHJlYWQpICAgKi8KKyNkZWZpbmUgU0RTUjFfUlRECTB4MDAwMDAwMTAJLyogUmVjZWl2ZSBUcmFuc2l0aW9uIERldGVjdGVkICAgICAqLworI2RlZmluZSBTRFNSMV9FT0YJMHgwMDAwMDAyMAkvKiByZWNlaXZlIEVuZC1PZi1GcmFtZSAocmVhZCkgICAgICovCisjZGVmaW5lIFNEU1IxX0NSRQkweDAwMDAwMDQwCS8qIHJlY2VpdmUgQ1JDIEVycm9yIChyZWFkKSAgICAgICAgKi8KKyNkZWZpbmUgU0RTUjFfUk9SCTB4MDAwMDAwODAJLyogUmVjZWl2ZSBGSUZPIE92ZXItUnVuIChyZWFkKSAgICAqLworCisKKy8qCisgKiBIaWdoLVNwZWVkIFNlcmlhbCB0byBQYXJhbGxlbCBjb250cm9sbGVyIChIU1NQKSBjb250cm9sIHJlZ2lzdGVycworICoKKyAqIFJlZ2lzdGVycworICogICAgU2VyMkhTQ1IwIAlTZXJpYWwgcG9ydCAyIEhpZ2gtU3BlZWQgU2VyaWFsIHRvIFBhcmFsbGVsCisgKiAgICAgICAgICAgICAgCWNvbnRyb2xsZXIgKEhTU1ApIENvbnRyb2wgUmVnaXN0ZXIgMCAocmVhZC93cml0ZSkuCisgKiAgICBTZXIySFNDUjEgCVNlcmlhbCBwb3J0IDIgSGlnaC1TcGVlZCBTZXJpYWwgdG8gUGFyYWxsZWwKKyAqICAgICAgICAgICAgICAJY29udHJvbGxlciAoSFNTUCkgQ29udHJvbCBSZWdpc3RlciAxIChyZWFkL3dyaXRlKS4KKyAqICAgIFNlcjJIU0RSICAJU2VyaWFsIHBvcnQgMiBIaWdoLVNwZWVkIFNlcmlhbCB0byBQYXJhbGxlbAorICogICAgICAgICAgICAgIAljb250cm9sbGVyIChIU1NQKSBEYXRhIFJlZ2lzdGVyIChyZWFkL3dyaXRlKS4KKyAqICAgIFNlcjJIU1NSMCAJU2VyaWFsIHBvcnQgMiBIaWdoLVNwZWVkIFNlcmlhbCB0byBQYXJhbGxlbAorICogICAgICAgICAgICAgIAljb250cm9sbGVyIChIU1NQKSBTdGF0dXMgUmVnaXN0ZXIgMCAocmVhZC93cml0ZSkuCisgKiAgICBTZXIySFNTUjEgCVNlcmlhbCBwb3J0IDIgSGlnaC1TcGVlZCBTZXJpYWwgdG8gUGFyYWxsZWwKKyAqICAgICAgICAgICAgICAJY29udHJvbGxlciAoSFNTUCkgU3RhdHVzIFJlZ2lzdGVyIDEgKHJlYWQpLgorICogICAgU2VyMkhTQ1IyIAlTZXJpYWwgcG9ydCAyIEhpZ2gtU3BlZWQgU2VyaWFsIHRvIFBhcmFsbGVsCisgKiAgICAgICAgICAgICAgCWNvbnRyb2xsZXIgKEhTU1ApIENvbnRyb2wgUmVnaXN0ZXIgMiAocmVhZC93cml0ZSkuCisgKiAgICAgICAgICAgICAgCVtUaGUgSFNDUjIgcmVnaXN0ZXIgaXMgb25seSBpbXBsZW1lbnRlZCBpbgorICogICAgICAgICAgICAgIAl2ZXJzaW9ucyAyLjAgKHJldi4gPSA4KSBhbmQgaGlnaGVyIG9mIHRoZSBTdHJvbmdBUk0KKyAqICAgICAgICAgICAgICAJU0EtMTEwMC5dCisgKi8KKworI2RlZmluZSBTZXIySFNDUjAJX19SRUcoMHg4MDA0MDA2MCkgIC8qIFNlci4gcG9ydCAyIEhTU1AgQ29udHJvbCBSZWcuIDAgKi8KKyNkZWZpbmUgU2VyMkhTQ1IxCV9fUkVHKDB4ODAwNDAwNjQpICAvKiBTZXIuIHBvcnQgMiBIU1NQIENvbnRyb2wgUmVnLiAxICovCisjZGVmaW5lIFNlcjJIU0RSCV9fUkVHKDB4ODAwNDAwNkMpICAvKiBTZXIuIHBvcnQgMiBIU1NQIERhdGEgUmVnLiAgICAgICovCisjZGVmaW5lIFNlcjJIU1NSMAlfX1JFRygweDgwMDQwMDc0KSAgLyogU2VyLiBwb3J0IDIgSFNTUCBTdGF0dXMgUmVnLiAwICAqLworI2RlZmluZSBTZXIySFNTUjEJX19SRUcoMHg4MDA0MDA3OCkgIC8qIFNlci4gcG9ydCAyIEhTU1AgU3RhdHVzIFJlZy4gMSAgKi8KKyNkZWZpbmUgU2VyMkhTQ1IyCV9fUkVHKDB4OTAwNjAwMjgpICAvKiBTZXIuIHBvcnQgMiBIU1NQIENvbnRyb2wgUmVnLiAyICovCisKKyNkZWZpbmUgSFNDUjBfSVRSCTB4MDAwMDAwMDEJLyogSXJEQSBUcmFuc21pc3Npb24gUmF0ZSAgICAgICAgICAqLworI2RlZmluZSBIU0NSMF9VQVJUCShIU0NSMF9JVFIqMCkJLyogIFVBUlQgbW9kZSAoMTE1LjIga2IvcyBpZiBJckRBKSAqLworI2RlZmluZSBIU0NSMF9IU1NQCShIU0NSMF9JVFIqMSkJLyogIEhTU1AgbW9kZSAoNCBNYi9zKSAgICAgICAgICAgICAqLworI2RlZmluZSBIU0NSMF9MQk0JMHgwMDAwMDAwMgkvKiBMb29rLUJhY2sgTW9kZSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEhTQ1IwX1RVUwkweDAwMDAwMDA0CS8qIFRyYW5zbWl0IEZJRk8gVW5kZXItcnVuIFNlbGVjdCAgKi8KKyNkZWZpbmUgSFNDUjBfRUZybVVSbgkoSFNDUjBfVFVTKjApCS8qICBFbmQgRnJhbWUgb24gVW5kZXItUnVuICAgICAgICAgKi8KKyNkZWZpbmUgSFNDUjBfQWJvcnRVUm4JKEhTQ1IwX1RVUyoxKQkvKiAgQWJvcnQgb24gVW5kZXItUnVuICAgICAgICAgICAgICovCisjZGVmaW5lIEhTQ1IwX1RYRQkweDAwMDAwMDA4CS8qIFRyYW5zbWl0IEVuYWJsZSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSFNDUjBfUlhFCTB4MDAwMDAwMTAJLyogUmVjZWl2ZSBFbmFibGUgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBIU0NSMF9SSUUJMHgwMDAwMDAyMAkvKiBSZWNlaXZlIEZJRk8gMi81LXRvLTMvNS1mdWxsIG9yICovCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIG1vcmUgSW50ZXJydXB0IEVuYWJsZSAgICAgICAgICAgKi8KKyNkZWZpbmUgSFNDUjBfVElFCTB4MDAwMDAwNDAJLyogVHJhbnNtaXQgRklGTyAxLzItZnVsbCBvciBsZXNzICAqLworICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBJbnRlcnJ1cHQgRW5hYmxlICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEhTQ1IwX0FNRQkweDAwMDAwMDgwCS8qIEFkZHJlc3MgTWF0Y2ggRW5hYmxlICAgICAgICAgICAgKi8KKworI2RlZmluZSBIU0NSMV9BTVYJRmxkICg4LCAwKQkvKiBBZGRyZXNzIE1hdGNoIFZhbHVlICAgICAgICAgICAgICovCisKKyNkZWZpbmUgSFNEUl9EQVRBCUZsZCAoOCwgMCkJLyogcmVjZWl2ZS90cmFuc21pdCBEQVRBIEZJRk9zICAgICAqLworI2lmIDAgICAgICAgICAgIAkgICAgICAgIAkvKiBIaWRkZW4gcmVjZWl2ZSBGSUZPIGJpdHMgICAgICAgICovCisjZGVmaW5lIEhTRFJfRU9GCTB4MDAwMDAxMDAJLyogIHJlY2VpdmUgRW5kLU9mLUZyYW1lIChyZWFkKSAgICAqLworI2RlZmluZSBIU0RSX0NSRQkweDAwMDAwMjAwCS8qICByZWNlaXZlIENSQyBFcnJvciAocmVhZCkgICAgICAgKi8KKyNkZWZpbmUgSFNEUl9ST1IJMHgwMDAwMDQwMAkvKiAgUmVjZWl2ZSBGSUZPIE92ZXItUnVuIChyZWFkKSAgICovCisjZW5kaWYgLyogMCAqLworCisjZGVmaW5lIEhTU1IwX0VJRgkweDAwMDAwMDAxCS8qIEVycm9yIEluIEZJRk8gKHJlYWQpICAgICAgICAgICAgKi8KKyNkZWZpbmUgSFNTUjBfVFVSCTB4MDAwMDAwMDIJLyogVHJhbnNtaXQgRklGTyBVbmRlci1SdW4gICAgICAgICAqLworI2RlZmluZSBIU1NSMF9SQUIJMHgwMDAwMDAwNAkvKiBSZWNlaXZlIEFCb3J0ICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEhTU1IwX1RGUwkweDAwMDAwMDA4CS8qIFRyYW5zbWl0IEZJRk8gMS8yLWZ1bGwgb3IgbGVzcyAgKi8KKyAgICAgICAgICAgICAgICAJICAgICAgICAJLyogU2VydmljZSByZXF1ZXN0IChyZWFkKSAgICAgICAgICAqLworI2RlZmluZSBIU1NSMF9SRlMJMHgwMDAwMDAxMAkvKiBSZWNlaXZlIEZJRk8gMi81LXRvLTMvNS1mdWxsIG9yICovCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIG1vcmUgU2VydmljZSByZXF1ZXN0IChyZWFkKSAgICAgKi8KKyNkZWZpbmUgSFNTUjBfRlJFCTB4MDAwMDAwMjAJLyogcmVjZWl2ZSBGUmFtaW5nIEVycm9yICAgICAgICAgICAqLworCisjZGVmaW5lIEhTU1IxX1JTWQkweDAwMDAwMDAxCS8qIFJlY2VpdmVyIFNZbmNocm9uaXplZCAocmVhZCkgICAgKi8KKyNkZWZpbmUgSFNTUjFfVEJZCTB4MDAwMDAwMDIJLyogVHJhbnNtaXR0ZXIgQnVzWSAocmVhZCkgICAgICAgICAqLworI2RlZmluZSBIU1NSMV9STkUJMHgwMDAwMDAwNAkvKiBSZWNlaXZlIEZJRk8gTm90IEVtcHR5IChyZWFkKSAgICovCisjZGVmaW5lIEhTU1IxX1RORgkweDAwMDAwMDA4CS8qIFRyYW5zbWl0IEZJRk8gTm90IEZ1bGwgKHJlYWQpICAgKi8KKyNkZWZpbmUgSFNTUjFfRU9GCTB4MDAwMDAwMTAJLyogcmVjZWl2ZSBFbmQtT2YtRnJhbWUgKHJlYWQpICAgICAqLworI2RlZmluZSBIU1NSMV9DUkUJMHgwMDAwMDAyMAkvKiByZWNlaXZlIENSQyBFcnJvciAocmVhZCkgICAgICAgICovCisjZGVmaW5lIEhTU1IxX1JPUgkweDAwMDAwMDQwCS8qIFJlY2VpdmUgRklGTyBPdmVyLVJ1biAocmVhZCkgICAgKi8KKworI2RlZmluZSBIU0NSMl9UWFAJMHgwMDA0MDAwMAkvKiBUcmFuc21pdCBkYXRhIFBvbGFyaXR5IChUWERfMikgICovCisjZGVmaW5lIEhTQ1IyX1RyRGF0YUwJKEhTQ1IyX1RYUCowKQkvKiAgVHJhbnNtaXQgRGF0YSBhY3RpdmUgTG93ICAgICAgICovCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qICAoaW52ZXJ0ZWQpICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSFNDUjJfVHJEYXRhSAkoSFNDUjJfVFhQKjEpCS8qICBUcmFuc21pdCBEYXRhIGFjdGl2ZSBIaWdoICAgICAgKi8KKyAgICAgICAgICAgICAgICAJICAgICAgICAJLyogIChub24taW52ZXJ0ZWQpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBIU0NSMl9SWFAJMHgwMDA4MDAwMAkvKiBSZWNlaXZlIGRhdGEgUG9sYXJpdHkgKFJYRF8yKSAgICovCisjZGVmaW5lIEhTQ1IyX1JjRGF0YUwJKEhTQ1IyX1JYUCowKQkvKiAgUmVjZWl2ZSBEYXRhIGFjdGl2ZSBMb3cgICAgICAgICovCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qICAoaW52ZXJ0ZWQpICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSFNDUjJfUmNEYXRhSAkoSFNDUjJfUlhQKjEpCS8qICBSZWNlaXZlIERhdGEgYWN0aXZlIEhpZ2ggICAgICAgKi8KKyAgICAgICAgICAgICAgICAJICAgICAgICAJLyogIChub24taW52ZXJ0ZWQpICAgICAgICAgICAgICAgICAqLworCisKKy8qCisgKiBNdWx0aS1tZWRpYSBDb21tdW5pY2F0aW9ucyBQb3J0IChNQ1ApIGNvbnRyb2wgcmVnaXN0ZXJzCisgKgorICogUmVnaXN0ZXJzCisgKiAgICBTZXI0TUNDUjAgCVNlcmlhbCBwb3J0IDQgTXVsdGktbWVkaWEgQ29tbXVuaWNhdGlvbnMgUG9ydCAoTUNQKQorICogICAgICAgICAgICAgIAlDb250cm9sIFJlZ2lzdGVyIDAgKHJlYWQvd3JpdGUpLgorICogICAgU2VyNE1DRFIwIAlTZXJpYWwgcG9ydCA0IE11bHRpLW1lZGlhIENvbW11bmljYXRpb25zIFBvcnQgKE1DUCkKKyAqICAgICAgICAgICAgICAJRGF0YSBSZWdpc3RlciAwIChhdWRpbywgcmVhZC93cml0ZSkuCisgKiAgICBTZXI0TUNEUjEgCVNlcmlhbCBwb3J0IDQgTXVsdGktbWVkaWEgQ29tbXVuaWNhdGlvbnMgUG9ydCAoTUNQKQorICogICAgICAgICAgICAgIAlEYXRhIFJlZ2lzdGVyIDEgKHRlbGVjb20sIHJlYWQvd3JpdGUpLgorICogICAgU2VyNE1DRFIyIAlTZXJpYWwgcG9ydCA0IE11bHRpLW1lZGlhIENvbW11bmljYXRpb25zIFBvcnQgKE1DUCkKKyAqICAgICAgICAgICAgICAJRGF0YSBSZWdpc3RlciAyIChDT0RFQyByZWdpc3RlcnMsIHJlYWQvd3JpdGUpLgorICogICAgU2VyNE1DU1IgIAlTZXJpYWwgcG9ydCA0IE11bHRpLW1lZGlhIENvbW11bmljYXRpb25zIFBvcnQgKE1DUCkKKyAqICAgICAgICAgICAgICAJU3RhdHVzIFJlZ2lzdGVyIChyZWFkL3dyaXRlKS4KKyAqICAgIFNlcjRNQ0NSMSAJU2VyaWFsIHBvcnQgNCBNdWx0aS1tZWRpYSBDb21tdW5pY2F0aW9ucyBQb3J0IChNQ1ApCisgKiAgICAgICAgICAgICAgCUNvbnRyb2wgUmVnaXN0ZXIgMSAocmVhZC93cml0ZSkuCisgKiAgICAgICAgICAgICAgCVtUaGUgTUNDUjEgcmVnaXN0ZXIgaXMgb25seSBpbXBsZW1lbnRlZCBpbgorICogICAgICAgICAgICAgIAl2ZXJzaW9ucyAyLjAgKHJldi4gPSA4KSBhbmQgaGlnaGVyIG9mIHRoZSBTdHJvbmdBUk0KKyAqICAgICAgICAgICAgICAJU0EtMTEwMC5dCisgKgorICogQ2xvY2tzCisgKiAgICBmbWMsIFRtYyAgCUZyZXF1ZW5jeSwgcGVyaW9kIG9mIHRoZSBNQ1AgY29tbXVuaWNhdGlvbiAoMTAgTUh6LAorICogICAgICAgICAgICAgIAkxMiBNSHosIG9yIEdQSU8gWzIxXSkuCisgKiAgICBmYXVkLCBUYXVkCUZyZXF1ZW5jeSwgcGVyaW9kIG9mIHRoZSBhdWRpbyBzYW1wbGluZy4KKyAqICAgIGZ0Y20sIFR0Y20JRnJlcXVlbmN5LCBwZXJpb2Qgb2YgdGhlIHRlbGVjb20gc2FtcGxpbmcuCisgKi8KKworI2RlZmluZSBTZXI0TUNDUjAJX19SRUcoMHg4MDA2MDAwMCkgIC8qIFNlci4gcG9ydCA0IE1DUCBDb250cm9sIFJlZy4gMCAqLworI2RlZmluZSBTZXI0TUNEUjAJX19SRUcoMHg4MDA2MDAwOCkgIC8qIFNlci4gcG9ydCA0IE1DUCBEYXRhIFJlZy4gMCAoYXVkaW8pICovCisjZGVmaW5lIFNlcjRNQ0RSMQlfX1JFRygweDgwMDYwMDBDKSAgLyogU2VyLiBwb3J0IDQgTUNQIERhdGEgUmVnLiAxICh0ZWxlY29tKSAqLworI2RlZmluZSBTZXI0TUNEUjIJX19SRUcoMHg4MDA2MDAxMCkgIC8qIFNlci4gcG9ydCA0IE1DUCBEYXRhIFJlZy4gMiAoQ09ERUMgcmVnLikgKi8KKyNkZWZpbmUgU2VyNE1DU1IJX19SRUcoMHg4MDA2MDAxOCkgIC8qIFNlci4gcG9ydCA0IE1DUCBTdGF0dXMgUmVnLiAqLworI2RlZmluZSBTZXI0TUNDUjEJX19SRUcoMHg5MDA2MDAzMCkgIC8qIFNlci4gcG9ydCA0IE1DUCBDb250cm9sIFJlZy4gMSAqLworCisjZGVmaW5lIE1DQ1IwX0FTRAlGbGQgKDcsIDApCS8qIEF1ZGlvIFNhbXBsaW5nIHJhdGUgRGl2aXNvci8zMiAgKi8KKyAgICAgICAgICAgICAgICAJICAgICAgICAJLyogWzYuLjEyN10gICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBmYXVkID0gZm1jLygzMipBU0QpICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIFRhdWQgPSAzMipBU0QqVG1jICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTUNDUjBfQXVkU21wRGl2KERpdikgICAgCS8qICBBdWRpbyBTYW1wbGluZyByYXRlIERpdmlzb3IgICAgKi8gXAorICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAgWzE5Mi4uNDA2NF0gICAgICAgICAgICAgICAgICAgICovIFwKKyAgICAgICAgICAgICAgICAJKChEaXYpLzMyIDw8IEZTaGZ0IChNQ0NSMF9BU0QpKQorICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAgZmF1ZCA9IGZtYy8oMzIqRmxvb3IgKERpdi8zMikpICovCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qICBUYXVkID0gMzIqRmxvb3IgKERpdi8zMikqVG1jICAgKi8KKyNkZWZpbmUgTUNDUjBfQ2VpbEF1ZFNtcERpdihEaXYpCS8qICBDZWlsLiBvZiBBdWRTbXBEaXYgWzE5Mi4uNDA2NF0gKi8gXAorICAgICAgICAgICAgICAgIAkoKChEaXYpICsgMzEpLzMyIDw8IEZTaGZ0IChNQ0NSMF9BU0QpKQorICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAgZmF1ZCA9IGZtYy8oMzIqQ2VpbCAoRGl2LzMyKSkgICovCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qICBUYXVkID0gMzIqQ2VpbCAoRGl2LzMyKSpUbWMgICAgKi8KKyNkZWZpbmUgTUNDUjBfVFNECUZsZCAoNywgOCkJLyogVGVsZWNvbSBTYW1wbGluZyByYXRlICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBEaXZpc29yLzMyIFsxNi4uMTI3XSAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIGZ0Y20gPSBmbWMvKDMyKlRTRCkgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAJICAgICAgICAJLyogVHRjbSA9IDMyKlRTRCpUbWMgICAgICAgICAgICAgICAqLworI2RlZmluZSBNQ0NSMF9UY21TbXBEaXYoRGl2KSAgICAJLyogIFRlbGVjb20gU2FtcGxpbmcgcmF0ZSBEaXZpc29yICAqLyBcCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qICBbNTEyLi40MDY0XSAgICAgICAgICAgICAgICAgICAgKi8gXAorICAgICAgICAgICAgICAgIAkoKERpdikvMzIgPDwgRlNoZnQgKE1DQ1IwX1RTRCkpCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qICBmdGNtID0gZm1jLygzMipGbG9vciAoRGl2LzMyKSkgKi8KKyAgICAgICAgICAgICAgICAJICAgICAgICAJLyogIFR0Y20gPSAzMipGbG9vciAoRGl2LzMyKSpUbWMgICAqLworI2RlZmluZSBNQ0NSMF9DZWlsVGNtU21wRGl2KERpdikJLyogIENlaWwuIG9mIFRjbVNtcERpdiBbNTEyLi40MDY0XSAqLyBcCisgICAgICAgICAgICAgICAgCSgoKERpdikgKyAzMSkvMzIgPDwgRlNoZnQgKE1DQ1IwX1RTRCkpCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qICBmdGNtID0gZm1jLygzMipDZWlsIChEaXYvMzIpKSAgKi8KKyAgICAgICAgICAgICAgICAJICAgICAgICAJLyogIFR0Y20gPSAzMipDZWlsIChEaXYvMzIpKlRtYyAgICAqLworI2RlZmluZSBNQ0NSMF9NQ0UJMHgwMDAxMDAwMAkvKiBNQ1AgRW5hYmxlICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIE1DQ1IwX0VDUwkweDAwMDIwMDAwCS8qIEV4dGVybmFsIENsb2NrIFNlbGVjdCAgICAgICAgICAgKi8KKyNkZWZpbmUgTUNDUjBfSW50Q2xrCShNQ0NSMF9FQ1MqMCkJLyogIEludGVybmFsIENsb2NrICgxMCBvciAxMiBNSHopICAqLworI2RlZmluZSBNQ0NSMF9FeHRDbGsJKE1DQ1IwX0VDUyoxKQkvKiAgRXh0ZXJuYWwgQ2xvY2sgKEdQSU8gWzIxXSkgICAgICovCisjZGVmaW5lIE1DQ1IwX0FETQkweDAwMDQwMDAwCS8qIEEvRCAoYXVkaW8vdGVsZWNvbSkgZGF0YSAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAJICAgICAgICAJLyogc2FtcGxpbmcvc3RvcmluZyBNb2RlICAgICAgICAgICAqLworI2RlZmluZSBNQ0NSMF9WbGRCaXQJKE1DQ1IwX0FETSowKQkvKiAgVmFsaWQgQml0IHN0b3JpbmcgbW9kZSAgICAgICAgICovCisjZGVmaW5lIE1DQ1IwX1NtcENudAkoTUNDUjBfQURNKjEpCS8qICBTYW1wbGluZyBDb3VudGVyIHN0b3JpbmcgbW9kZSAgKi8KKyNkZWZpbmUgTUNDUjBfVFRFCTB4MDAwODAwMDAJLyogVGVsZWNvbSBUcmFuc21pdCBGSUZPIDEvMi1mdWxsICAqLworICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBvciBsZXNzIGludGVycnVwdCBFbmFibGUgICAgICAgICovCisjZGVmaW5lIE1DQ1IwX1RSRQkweDAwMTAwMDAwCS8qIFRlbGVjb20gUmVjZWl2ZSBGSUZPIDEvMi1mdWxsICAgKi8KKyAgICAgICAgICAgICAgICAJICAgICAgICAJLyogb3IgbW9yZSBpbnRlcnJ1cHQgRW5hYmxlICAgICAgICAqLworI2RlZmluZSBNQ0NSMF9BVEUJMHgwMDIwMDAwMAkvKiBBdWRpbyBUcmFuc21pdCBGSUZPIDEvMi1mdWxsICAgICovCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIG9yIGxlc3MgaW50ZXJydXB0IEVuYWJsZSAgICAgICAgKi8KKyNkZWZpbmUgTUNDUjBfQVJFCTB4MDA0MDAwMDAJLyogQXVkaW8gUmVjZWl2ZSBGSUZPIDEvMi1mdWxsIG9yICAqLworICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBtb3JlIGludGVycnVwdCBFbmFibGUgICAgICAgICAgICovCisjZGVmaW5lIE1DQ1IwX0xCTQkweDAwODAwMDAwCS8qIExvb2stQmFjayBNb2RlICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTUNDUjBfRUNQCUZsZCAoMiwgMjQpCS8qIEV4dGVybmFsIENsb2NrIFByZXNjYWxlciAtIDEgICAgKi8KKyNkZWZpbmUgTUNDUjBfRXh0Q2xrRGl2KERpdikgICAgCS8qICBFeHRlcm5hbCBDbG9jayBEaXZpc29yIFsxLi40XSAgKi8gXAorICAgICAgICAgICAgICAgIAkoKChEaXYpIC0gMSkgPDwgRlNoZnQgKE1DQ1IwX0VDUCkpCisKKyNkZWZpbmUgTUNEUjBfREFUQQlGbGQgKDEyLCA0KQkvKiByZWNlaXZlL3RyYW5zbWl0IGF1ZGlvIERBVEEgICAgICovCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIEZJRk9zICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBNQ0RSMV9EQVRBCUZsZCAoMTQsIDIpCS8qIHJlY2VpdmUvdHJhbnNtaXQgdGVsZWNvbSBEQVRBICAgKi8KKyAgICAgICAgICAgICAgICAJICAgICAgICAJLyogRklGT3MgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIHJlY2VpdmUvdHJhbnNtaXQgQ09ERUMgcmVnLiAgICAgKi8KKyAgICAgICAgICAgICAgICAJICAgICAgICAJLyogRklGT3M6ICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBNQ0RSMl9EQVRBCUZsZCAoMTYsIDApCS8qICByZWcuIERBVEEgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTUNEUjJfUlcJMHgwMDAxMDAwMAkvKiAgcmVnLiBSZWFkL1dyaXRlICh0cmFuc21pdCkgICAgICovCisjZGVmaW5lIE1DRFIyX1JkCShNQ0RSMl9SVyowKQkvKiAgIHJlZy4gUmVhZCAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIE1DRFIyX1dyCShNQ0RSMl9SVyoxKQkvKiAgIHJlZy4gV3JpdGUgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIE1DRFIyX0FERAlGbGQgKDQsIDE3KQkvKiAgcmVnLiBBRERyZXNzICAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgTUNTUl9BVFMJMHgwMDAwMDAwMQkvKiBBdWRpbyBUcmFuc21pdCBGSUZPIDEvMi1mdWxsICAgICovCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIG9yIGxlc3MgU2VydmljZSByZXF1ZXN0IChyZWFkKSAgKi8KKyNkZWZpbmUgTUNTUl9BUlMJMHgwMDAwMDAwMgkvKiBBdWRpbyBSZWNlaXZlIEZJRk8gMS8yLWZ1bGwgb3IgICovCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIG1vcmUgU2VydmljZSByZXF1ZXN0IChyZWFkKSAgICAgKi8KKyNkZWZpbmUgTUNTUl9UVFMJMHgwMDAwMDAwNAkvKiBUZWxlY29tIFRyYW5zbWl0IEZJRk8gMS8yLWZ1bGwgICovCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIG9yIGxlc3MgU2VydmljZSByZXF1ZXN0IChyZWFkKSAgKi8KKyNkZWZpbmUgTUNTUl9UUlMJMHgwMDAwMDAwOAkvKiBUZWxlY29tIFJlY2VpdmUgRklGTyAxLzItZnVsbCAgICovCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIG9yIG1vcmUgU2VydmljZSByZXF1ZXN0IChyZWFkKSAgKi8KKyNkZWZpbmUgTUNTUl9BVFUJMHgwMDAwMDAxMAkvKiBBdWRpbyBUcmFuc21pdCBGSUZPIFVuZGVyLXJ1biAgICovCisjZGVmaW5lIE1DU1JfQVJPCTB4MDAwMDAwMjAJLyogQXVkaW8gUmVjZWl2ZSBGSUZPIE92ZXItcnVuICAgICAqLworI2RlZmluZSBNQ1NSX1RUVQkweDAwMDAwMDQwCS8qIFRlbGVjb20gVHJhbnNtaXQgRklGTyBVbmRlci1ydW4gKi8KKyNkZWZpbmUgTUNTUl9UUk8JMHgwMDAwMDA4MAkvKiBUZWxlY29tIFJlY2VpdmUgRklGTyBPdmVyLXJ1biAgICovCisjZGVmaW5lIE1DU1JfQU5GCTB4MDAwMDAxMDAJLyogQXVkaW8gdHJhbnNtaXQgRklGTyBOb3QgRnVsbCAgICAqLworICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAocmVhZCkgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIE1DU1JfQU5FCTB4MDAwMDAyMDAJLyogQXVkaW8gcmVjZWl2ZSBGSUZPIE5vdCBFbXB0eSAgICAqLworICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAocmVhZCkgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIE1DU1JfVE5GCTB4MDAwMDA0MDAJLyogVGVsZWNvbSB0cmFuc21pdCBGSUZPIE5vdCBGdWxsICAqLworICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAocmVhZCkgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIE1DU1JfVE5FCTB4MDAwMDA4MDAJLyogVGVsZWNvbSByZWNlaXZlIEZJRk8gTm90IEVtcHR5ICAqLworICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAocmVhZCkgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIE1DU1JfQ1dDCTB4MDAwMDEwMDAJLyogQ09ERUMgcmVnaXN0ZXIgV3JpdGUgQ29tcGxldGVkICAqLworICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAocmVhZCkgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIE1DU1JfQ1JDCTB4MDAwMDIwMDAJLyogQ09ERUMgcmVnaXN0ZXIgUmVhZCBDb21wbGV0ZWQgICAqLworICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAocmVhZCkgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIE1DU1JfQUNFCTB4MDAwMDQwMDAJLyogQXVkaW8gQ09ERUMgRW5hYmxlZCAocmVhZCkgICAgICAqLworI2RlZmluZSBNQ1NSX1RDRQkweDAwMDA4MDAwCS8qIFRlbGVjb20gQ09ERUMgRW5hYmxlZCAocmVhZCkgICAgKi8KKworI2RlZmluZSBNQ0NSMV9DRlMJMHgwMDEwMDAwMAkvKiBDbG9jayBGcmVxLiBTZWxlY3QgICAgICAgICAgICAgICovCisjZGVmaW5lIE1DQ1IxX0YxMk1IegkoTUNDUjFfQ0ZTKjApCS8qICBGcmVxLiAoZm1jKSA9IH4gMTIgTUh6ICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAJICAgICAgICAJLyogICgxMS45ODEgTUh6KSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBNQ0NSMV9GMTBNSHoJKE1DQ1IxX0NGUyoxKQkvKiAgRnJlcS4gKGZtYykgPSB+IDEwIE1IeiAgICAgICAgICovCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qICAoOS41ODUgTUh6KSAgICAgICAgICAgICAgICAgICAgKi8KKworCisvKgorICogU3luY2hyb25vdXMgU2VyaWFsIFBvcnQgKFNTUCkgY29udHJvbCByZWdpc3RlcnMKKyAqCisgKiBSZWdpc3RlcnMKKyAqICAgIFNlcjRTU0NSMCAJU2VyaWFsIHBvcnQgNCBTeW5jaHJvbm91cyBTZXJpYWwgUG9ydCAoU1NQKSBDb250cm9sCisgKiAgICAgICAgICAgICAgCVJlZ2lzdGVyIDAgKHJlYWQvd3JpdGUpLgorICogICAgU2VyNFNTQ1IxIAlTZXJpYWwgcG9ydCA0IFN5bmNocm9ub3VzIFNlcmlhbCBQb3J0IChTU1ApIENvbnRyb2wKKyAqICAgICAgICAgICAgICAJUmVnaXN0ZXIgMSAocmVhZC93cml0ZSkuCisgKiAgICAgICAgICAgICAgCVtCaXRzIFNQTyBhbmQgU1AgYXJlIG9ubHkgaW1wbGVtZW50ZWQgaW4gdmVyc2lvbnMgMi4wCisgKiAgICAgICAgICAgICAgCShyZXYuID0gOCkgYW5kIGhpZ2hlciBvZiB0aGUgU3Ryb25nQVJNIFNBLTExMDAuXQorICogICAgU2VyNFNTRFIgIAlTZXJpYWwgcG9ydCA0IFN5bmNocm9ub3VzIFNlcmlhbCBQb3J0IChTU1ApIERhdGEKKyAqICAgICAgICAgICAgICAJUmVnaXN0ZXIgKHJlYWQvd3JpdGUpLgorICogICAgU2VyNFNTU1IgIAlTZXJpYWwgcG9ydCA0IFN5bmNocm9ub3VzIFNlcmlhbCBQb3J0IChTU1ApIFN0YXR1cworICogICAgICAgICAgICAgIAlSZWdpc3RlciAocmVhZC93cml0ZSkuCisgKgorICogQ2xvY2tzCisgKiAgICBmeHRsLCBUeHRsCUZyZXF1ZW5jeSwgcGVyaW9kIG9mIHRoZSBzeXN0ZW0gY3J5c3RhbCAoMy42ODY0IE1IegorICogICAgICAgICAgICAgIAlvciAzLjU3OTUgTUh6KS4KKyAqICAgIGZzcywgVHNzICAJRnJlcXVlbmN5LCBwZXJpb2Qgb2YgdGhlIFNTUCBjb21tdW5pY2F0aW9uLgorICovCisKKyNkZWZpbmUgU2VyNFNTQ1IwCV9fUkVHKDB4ODAwNzAwNjApICAvKiBTZXIuIHBvcnQgNCBTU1AgQ29udHJvbCBSZWcuIDAgKi8KKyNkZWZpbmUgU2VyNFNTQ1IxCV9fUkVHKDB4ODAwNzAwNjQpICAvKiBTZXIuIHBvcnQgNCBTU1AgQ29udHJvbCBSZWcuIDEgKi8KKyNkZWZpbmUgU2VyNFNTRFIJX19SRUcoMHg4MDA3MDA2QykgIC8qIFNlci4gcG9ydCA0IFNTUCBEYXRhIFJlZy4gKi8KKyNkZWZpbmUgU2VyNFNTU1IJX19SRUcoMHg4MDA3MDA3NCkgIC8qIFNlci4gcG9ydCA0IFNTUCBTdGF0dXMgUmVnLiAqLworCisjZGVmaW5lIFNTQ1IwX0RTUwlGbGQgKDQsIDApCS8qIERhdGEgU2l6ZSAtIDEgU2VsZWN0IFszLi4xNV0gICAgKi8KKyNkZWZpbmUgU1NDUjBfRGF0YVNpemUoU2l6ZSkgICAgCS8qICBEYXRhIFNpemUgU2VsZWN0IFs0Li4xNl0gICAgICAgKi8gXAorICAgICAgICAgICAgICAgIAkoKChTaXplKSAtIDEpIDw8IEZTaGZ0IChTU0NSMF9EU1MpKQorI2RlZmluZSBTU0NSMF9GUkYJRmxkICgyLCA0KQkvKiBGUmFtZSBGb3JtYXQgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNTQ1IwX01vdG9yb2xhCSAgICAgICAgCS8qICBNb3Rvcm9sYSBTZXJpYWwgUGVyaXBoZXJhbCAgICAgKi8gXAorICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAgSW50ZXJmYWNlIChTUEkpIGZvcm1hdCAgICAgICAgICovIFwKKyAgICAgICAgICAgICAgICAJKDAgPDwgRlNoZnQgKFNTQ1IwX0ZSRikpCisjZGVmaW5lIFNTQ1IwX1RJCSAgICAgICAgCS8qICBUZXhhcyBJbnN0cnVtZW50cyBTeW5jaHJvbm91cyAgKi8gXAorICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAgU2VyaWFsIGZvcm1hdCAgICAgICAgICAgICAgICAgICovIFwKKyAgICAgICAgICAgICAgICAJKDEgPDwgRlNoZnQgKFNTQ1IwX0ZSRikpCisjZGVmaW5lIFNTQ1IwX05hdGlvbmFsCSAgICAgICAgCS8qICBOYXRpb25hbCBNaWNyb3dpcmUgZm9ybWF0ICAgICAgKi8gXAorICAgICAgICAgICAgICAgIAkoMiA8PCBGU2hmdCAoU1NDUjBfRlJGKSkKKyNkZWZpbmUgU1NDUjBfU1NFCTB4MDAwMDAwODAJLyogU1NQIEVuYWJsZSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTU0NSMF9TQ1IJRmxkICg4LCA4KQkvKiBTZXJpYWwgQ2xvY2sgUmF0ZSBkaXZpc29yLzIgLSAxICovCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIGZzcyA9IGZ4dGwvKDIqKFNDUiArIDEpKSAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAJICAgICAgICAJLyogVHNzID0gMiooU0NSICsgMSkqVHh0bCAgICAgICAgICAqLworI2RlZmluZSBTU0NSMF9TZXJDbGtEaXYoRGl2KSAgICAJLyogIFNlcmlhbCBDbG9jayBEaXZpc29yIFsyLi41MTJdICAqLyBcCisgICAgICAgICAgICAgICAgCSgoKERpdikgLSAyKS8yIDw8IEZTaGZ0IChTU0NSMF9TQ1IpKQorICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAgZnNzID0gZnh0bC8oMipGbG9vciAoRGl2LzIpKSAgICovCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qICBUc3MgPSAyKkZsb29yIChEaXYvMikqVHh0bCAgICAgKi8KKyNkZWZpbmUgU1NDUjBfQ2VpbFNlckNsa0RpdihEaXYpCS8qICBDZWlsLiBvZiBTZXJDbGtEaXYgWzIuLjUxMl0gICAgKi8gXAorICAgICAgICAgICAgICAgIAkoKChEaXYpIC0gMSkvMiA8PCBGU2hmdCAoU1NDUjBfU0NSKSkKKyAgICAgICAgICAgICAgICAJICAgICAgICAJLyogIGZzcyA9IGZ4dGwvKDIqQ2VpbCAoRGl2LzIpKSAgICAqLworICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAgVHNzID0gMipDZWlsIChEaXYvMikqVHh0bCAgICAgICovCisKKyNkZWZpbmUgU1NDUjFfUklFCTB4MDAwMDAwMDEJLyogUmVjZWl2ZSBGSUZPIDEvMi1mdWxsIG9yIG1vcmUgICAqLworICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBJbnRlcnJ1cHQgRW5hYmxlICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNTQ1IxX1RJRQkweDAwMDAwMDAyCS8qIFRyYW5zbWl0IEZJRk8gMS8yLWZ1bGwgb3IgbGVzcyAgKi8KKyAgICAgICAgICAgICAgICAJICAgICAgICAJLyogSW50ZXJydXB0IEVuYWJsZSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTU0NSMV9MQk0JMHgwMDAwMDAwNAkvKiBMb29rLUJhY2sgTW9kZSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNTQ1IxX1NQTwkweDAwMDAwMDA4CS8qIFNhbXBsZSBjbG9jayAoU0NMSykgUE9sYXJpdHkgICAgKi8KKyNkZWZpbmUgU1NDUjFfU0Nsa0lhY3RMCShTU0NSMV9TUE8qMCkJLyogIFNhbXBsZSBDbG9jayBJbmFjdGl2ZSBMb3cgICAgICAqLworI2RlZmluZSBTU0NSMV9TQ2xrSWFjdEgJKFNTQ1IxX1NQTyoxKQkvKiAgU2FtcGxlIENsb2NrIEluYWN0aXZlIEhpZ2ggICAgICovCisjZGVmaW5lIFNTQ1IxX1NQCTB4MDAwMDAwMTAJLyogU2FtcGxlIGNsb2NrIChTQ0xLKSBQaGFzZSAgICAgICAqLworI2RlZmluZSBTU0NSMV9TQ2xrMVAJKFNTQ1IxX1NQKjApCS8qICBTYW1wbGUgQ2xvY2sgYWN0aXZlIDEgUGVyaW9kICAgKi8KKyAgICAgICAgICAgICAgICAJICAgICAgICAJLyogIGFmdGVyIGZyYW1lIChTRlJNLCAxc3QgZWRnZSkgICAqLworI2RlZmluZSBTU0NSMV9TQ2xrMV8yUAkoU1NDUjFfU1AqMSkJLyogIFNhbXBsZSBDbG9jayBhY3RpdmUgMS8yIFBlcmlvZCAqLworICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAgYWZ0ZXIgZnJhbWUgKFNGUk0sIDFzdCBlZGdlKSAgICovCisjZGVmaW5lIFNTQ1IxX0VDUwkweDAwMDAwMDIwCS8qIEV4dGVybmFsIENsb2NrIFNlbGVjdCAgICAgICAgICAgKi8KKyNkZWZpbmUgU1NDUjFfSW50Q2xrCShTU0NSMV9FQ1MqMCkJLyogIEludGVybmFsIENsb2NrICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTU0NSMV9FeHRDbGsJKFNTQ1IxX0VDUyoxKQkvKiAgRXh0ZXJuYWwgQ2xvY2sgKEdQSU8gWzE5XSkgICAgICovCisKKyNkZWZpbmUgU1NEUl9EQVRBCUZsZCAoMTYsIDApCS8qIHJlY2VpdmUvdHJhbnNtaXQgREFUQSBGSUZPcyAgICAgKi8KKworI2RlZmluZSBTU1NSX1RORgkweDAwMDAwMDAyCS8qIFRyYW5zbWl0IEZJRk8gTm90IEZ1bGwgKHJlYWQpICAgKi8KKyNkZWZpbmUgU1NTUl9STkUJMHgwMDAwMDAwNAkvKiBSZWNlaXZlIEZJRk8gTm90IEVtcHR5IChyZWFkKSAgICovCisjZGVmaW5lIFNTU1JfQlNZCTB4MDAwMDAwMDgJLyogU1NQIEJ1U1kgKHJlYWQpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTU1NSX1RGUwkweDAwMDAwMDEwCS8qIFRyYW5zbWl0IEZJRk8gMS8yLWZ1bGwgb3IgbGVzcyAgKi8KKyAgICAgICAgICAgICAgICAJICAgICAgICAJLyogU2VydmljZSByZXF1ZXN0IChyZWFkKSAgICAgICAgICAqLworI2RlZmluZSBTU1NSX1JGUwkweDAwMDAwMDIwCS8qIFJlY2VpdmUgRklGTyAxLzItZnVsbCBvciBtb3JlICAgKi8KKyAgICAgICAgICAgICAgICAJICAgICAgICAJLyogU2VydmljZSByZXF1ZXN0IChyZWFkKSAgICAgICAgICAqLworI2RlZmluZSBTU1NSX1JPUgkweDAwMDAwMDQwCS8qIFJlY2VpdmUgRklGTyBPdmVyLVJ1biAgICAgICAgICAgKi8KKworCisvKgorICogT3BlcmF0aW5nIFN5c3RlbSAoT1MpIHRpbWVyIGNvbnRyb2wgcmVnaXN0ZXJzCisgKgorICogUmVnaXN0ZXJzCisgKiAgICBPU01SMCAgICAgCU9wZXJhdGluZyBTeXN0ZW0gKE9TKSB0aW1lciBNYXRjaCBSZWdpc3RlciAwCisgKiAgICAgICAgICAgICAgCShyZWFkL3dyaXRlKS4KKyAqICAgIE9TTVIxICAgICAJT3BlcmF0aW5nIFN5c3RlbSAoT1MpIHRpbWVyIE1hdGNoIFJlZ2lzdGVyIDEKKyAqICAgICAgICAgICAgICAJKHJlYWQvd3JpdGUpLgorICogICAgT1NNUjIgICAgIAlPcGVyYXRpbmcgU3lzdGVtIChPUykgdGltZXIgTWF0Y2ggUmVnaXN0ZXIgMgorICogICAgICAgICAgICAgIAkocmVhZC93cml0ZSkuCisgKiAgICBPU01SMyAgICAgCU9wZXJhdGluZyBTeXN0ZW0gKE9TKSB0aW1lciBNYXRjaCBSZWdpc3RlciAzCisgKiAgICAgICAgICAgICAgCShyZWFkL3dyaXRlKS4KKyAqICAgIE9TQ1IgICAgICAJT3BlcmF0aW5nIFN5c3RlbSAoT1MpIHRpbWVyIENvdW50ZXIgUmVnaXN0ZXIKKyAqICAgICAgICAgICAgICAJKHJlYWQvd3JpdGUpLgorICogICAgT1NTUiAgICAgIAlPcGVyYXRpbmcgU3lzdGVtIChPUykgdGltZXIgU3RhdHVzIFJlZ2lzdGVyCisgKiAgICAgICAgICAgICAgCShyZWFkL3dyaXRlKS4KKyAqICAgIE9XRVIgICAgICAJT3BlcmF0aW5nIFN5c3RlbSAoT1MpIHRpbWVyIFdhdGNoLWRvZyBFbmFibGUgUmVnaXN0ZXIKKyAqICAgICAgICAgICAgICAJKHJlYWQvd3JpdGUpLgorICogICAgT0lFUiAgICAgIAlPcGVyYXRpbmcgU3lzdGVtIChPUykgdGltZXIgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlcgorICogICAgICAgICAgICAgIAkocmVhZC93cml0ZSkuCisgKi8KKworI2RlZmluZSBPU01SMCAgCQlfX1JFRygweDkwMDAwMDAwKSAgLyogT1MgdGltZXIgTWF0Y2ggUmVnLiAwICovCisjZGVmaW5lIE9TTVIxICAJCV9fUkVHKDB4OTAwMDAwMDQpICAvKiBPUyB0aW1lciBNYXRjaCBSZWcuIDEgKi8KKyNkZWZpbmUgT1NNUjIgIAkJX19SRUcoMHg5MDAwMDAwOCkgIC8qIE9TIHRpbWVyIE1hdGNoIFJlZy4gMiAqLworI2RlZmluZSBPU01SMyAgCQlfX1JFRygweDkwMDAwMDBjKSAgLyogT1MgdGltZXIgTWF0Y2ggUmVnLiAzICovCisjZGVmaW5lIE9TQ1IgICAJX19SRUcoMHg5MDAwMDAxMCkgIC8qIE9TIHRpbWVyIENvdW50ZXIgUmVnLiAqLworI2RlZmluZSBPU1NSICAgCV9fUkVHKDB4OTAwMDAwMTQJKSAgLyogT1MgdGltZXIgU3RhdHVzIFJlZy4gKi8KKyNkZWZpbmUgT1dFUiAgIAlfX1JFRygweDkwMDAwMDE4CSkgIC8qIE9TIHRpbWVyIFdhdGNoLWRvZyBFbmFibGUgUmVnLiAqLworI2RlZmluZSBPSUVSICAgCV9fUkVHKDB4OTAwMDAwMUMJKSAgLyogT1MgdGltZXIgSW50ZXJydXB0IEVuYWJsZSBSZWcuICovCisKKyNkZWZpbmUgT1NTUl9NKE5iKQkgICAgICAgIAkvKiBNYXRjaCBkZXRlY3RlZCBbMC4uM10gICAgICAgICAgICovIFwKKyAgICAgICAgICAgICAgICAJKDB4MDAwMDAwMDEgPDwgKE5iKSkKKyNkZWZpbmUgT1NTUl9NMCAJT1NTUl9NICgwKQkvKiBNYXRjaCBkZXRlY3RlZCAwICAgICAgICAgICAgICAgICovCisjZGVmaW5lIE9TU1JfTTEgCU9TU1JfTSAoMSkJLyogTWF0Y2ggZGV0ZWN0ZWQgMSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBPU1NSX00yIAlPU1NSX00gKDIpCS8qIE1hdGNoIGRldGVjdGVkIDIgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgT1NTUl9NMyAJT1NTUl9NICgzKQkvKiBNYXRjaCBkZXRlY3RlZCAzICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgT1dFUl9XTUUJMHgwMDAwMDAwMQkvKiBXYXRjaC1kb2cgTWF0Y2ggRW5hYmxlICAgICAgICAgICovCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIChzZXQgb25seSkgICAgICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBPSUVSX0UoTmIpCSAgICAgICAgCS8qIG1hdGNoIGludGVycnVwdCBFbmFibGUgWzAuLjNdICAgKi8gXAorICAgICAgICAgICAgICAgIAkoMHgwMDAwMDAwMSA8PCAoTmIpKQorI2RlZmluZSBPSUVSX0UwIAlPSUVSX0UgKDApCS8qIG1hdGNoIGludGVycnVwdCBFbmFibGUgMCAgICAgICAgKi8KKyNkZWZpbmUgT0lFUl9FMSAJT0lFUl9FICgxKQkvKiBtYXRjaCBpbnRlcnJ1cHQgRW5hYmxlIDEgICAgICAgICovCisjZGVmaW5lIE9JRVJfRTIgCU9JRVJfRSAoMikJLyogbWF0Y2ggaW50ZXJydXB0IEVuYWJsZSAyICAgICAgICAqLworI2RlZmluZSBPSUVSX0UzIAlPSUVSX0UgKDMpCS8qIG1hdGNoIGludGVycnVwdCBFbmFibGUgMyAgICAgICAgKi8KKworCisvKgorICogUmVhbC1UaW1lIENsb2NrIChSVEMpIGNvbnRyb2wgcmVnaXN0ZXJzCisgKgorICogUmVnaXN0ZXJzCisgKiAgICBSVEFSICAgICAgCVJlYWwtVGltZSBDbG9jayAoUlRDKSBBbGFybSBSZWdpc3RlciAocmVhZC93cml0ZSkuCisgKiAgICBSQ05SICAgICAgCVJlYWwtVGltZSBDbG9jayAoUlRDKSBDb3VOdCBSZWdpc3RlciAocmVhZC93cml0ZSkuCisgKiAgICBSVFRSICAgICAgCVJlYWwtVGltZSBDbG9jayAoUlRDKSBUcmltIFJlZ2lzdGVyIChyZWFkL3dyaXRlKS4KKyAqICAgIFJUU1IgICAgICAJUmVhbC1UaW1lIENsb2NrIChSVEMpIFN0YXR1cyBSZWdpc3RlciAocmVhZC93cml0ZSkuCisgKgorICogQ2xvY2tzCisgKiAgICBmcnR4LCBUcnR4CUZyZXF1ZW5jeSwgcGVyaW9kIG9mIHRoZSByZWFsLXRpbWUgY2xvY2sgY3J5c3RhbAorICogICAgICAgICAgICAgIAkoMzIuNzY4IGtIeiBub21pbmFsKS4KKyAqICAgIGZydGMsIFRydGMJRnJlcXVlbmN5LCBwZXJpb2Qgb2YgdGhlIHJlYWwtdGltZSBjbG9jayBjb3VudGVyCisgKiAgICAgICAgICAgICAgCSgxIEh6IG5vbWluYWwpLgorICovCisKKyNkZWZpbmUgUlRBUgkJX19SRUcoMHg5MDAxMDAwMCkgIC8qIFJUQyBBbGFybSBSZWcuICovCisjZGVmaW5lIFJDTlIJCV9fUkVHKDB4OTAwMTAwMDQpICAvKiBSVEMgQ291TnQgUmVnLiAqLworI2RlZmluZSBSVFRSCQlfX1JFRygweDkwMDEwMDA4KSAgLyogUlRDIFRyaW0gUmVnLiAqLworI2RlZmluZSBSVFNSCQlfX1JFRygweDkwMDEwMDEwKSAgLyogUlRDIFN0YXR1cyBSZWcuICovCisKKyNkZWZpbmUgUlRUUl9DICAJRmxkICgxNiwgMCkJLyogY2xvY2sgZGl2aWRlciBDb3VudCAtIDEgICAgICAgICAqLworI2RlZmluZSBSVFRSX0QgIAlGbGQgKDEwLCAxNikJLyogdHJpbSBEZWxldGUgY291bnQgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBmcnRjID0gKDEwMjMqKEMgKyAxKSAtIEQpKmZydHgvICovCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qICAgICAgICAoMTAyMyooQyArIDEpXjIpICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAJICAgICAgICAJLyogVHJ0YyA9ICgxMDIzKihDICsgMSleMikqVHJ0eC8gICAqLworICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAgICAgICAgKDEwMjMqKEMgKyAxKSAtIEQpICAgICAgICovCisKKyNkZWZpbmUgUlRTUl9BTCAJMHgwMDAwMDAwMQkvKiBBTGFybSBkZXRlY3RlZCAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJUU1JfSFogCTB4MDAwMDAwMDIJLyogMSBIeiBjbG9jayBkZXRlY3RlZCAgICAgICAgICAgICAqLworI2RlZmluZSBSVFNSX0FMRQkweDAwMDAwMDA0CS8qIEFMYXJtIGludGVycnVwdCBFbmFibGUgICAgICAgICAgKi8KKyNkZWZpbmUgUlRTUl9IWkUJMHgwMDAwMDAwOAkvKiAxIEh6IGNsb2NrIGludGVycnVwdCBFbmFibGUgICAgICovCisKKworLyoKKyAqIFBvd2VyIE1hbmFnZXIgKFBNKSBjb250cm9sIHJlZ2lzdGVycworICoKKyAqIFJlZ2lzdGVycworICogICAgUE1DUiAgICAgIAlQb3dlciBNYW5hZ2VyIChQTSkgQ29udHJvbCBSZWdpc3RlciAocmVhZC93cml0ZSkuCisgKiAgICBQU1NSICAgICAgCVBvd2VyIE1hbmFnZXIgKFBNKSBTbGVlcCBTdGF0dXMgUmVnaXN0ZXIgKHJlYWQvd3JpdGUpLgorICogICAgUFNQUiAgICAgIAlQb3dlciBNYW5hZ2VyIChQTSkgU2NyYXRjaC1QYWQgUmVnaXN0ZXIgKHJlYWQvd3JpdGUpLgorICogICAgUFdFUiAgICAgIAlQb3dlciBNYW5hZ2VyIChQTSkgV2FrZS11cCBFbmFibGUgUmVnaXN0ZXIKKyAqICAgICAgICAgICAgICAJKHJlYWQvd3JpdGUpLgorICogICAgUENGUiAgICAgIAlQb3dlciBNYW5hZ2VyIChQTSkgZ2VuZXJhbCBDb25GaWd1cmF0aW9uIFJlZ2lzdGVyCisgKiAgICAgICAgICAgICAgCShyZWFkL3dyaXRlKS4KKyAqICAgIFBQQ1IgICAgICAJUG93ZXIgTWFuYWdlciAoUE0pIFBoYXNlLUxvY2tlZCBMb29wIChQTEwpCisgKiAgICAgICAgICAgICAgCUNvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKHJlYWQvd3JpdGUpLgorICogICAgUEdTUiAgICAgIAlQb3dlciBNYW5hZ2VyIChQTSkgR2VuZXJhbC1QdXJwb3NlIElucHV0L091dHB1dCAoR1BJTykKKyAqICAgICAgICAgICAgICAJU2xlZXAgc3RhdGUgUmVnaXN0ZXIgKHJlYWQvd3JpdGUsIHNlZSBHUElPIHBpbnMpLgorICogICAgUE9TUiAgICAgIAlQb3dlciBNYW5hZ2VyIChQTSkgT3NjaWxsYXRvciBTdGF0dXMgUmVnaXN0ZXIgKHJlYWQpLgorICoKKyAqIENsb2NrcworICogICAgZnh0bCwgVHh0bAlGcmVxdWVuY3ksIHBlcmlvZCBvZiB0aGUgc3lzdGVtIGNyeXN0YWwgKDMuNjg2NCBNSHoKKyAqICAgICAgICAgICAgICAJb3IgMy41Nzk1IE1IeikuCisgKiAgICBmY3B1LCBUY3B1CUZyZXF1ZW5jeSwgcGVyaW9kIG9mIHRoZSBDUFUgY29yZSBjbG9jayAoQ0NMSykuCisgKi8KKworI2RlZmluZSBQTUNSCQlfX1JFRygweDkwMDIwMDAwKSAgLyogUE0gQ29udHJvbCBSZWcuICovCisjZGVmaW5lIFBTU1IJCV9fUkVHKDB4OTAwMjAwMDQpICAvKiBQTSBTbGVlcCBTdGF0dXMgUmVnLiAqLworI2RlZmluZSBQU1BSCQlfX1JFRygweDkwMDIwMDA4KSAgLyogUE0gU2NyYXRjaC1QYWQgUmVnLiAqLworI2RlZmluZSBQV0VSCQlfX1JFRygweDkwMDIwMDBDKSAgLyogUE0gV2FrZS11cCBFbmFibGUgUmVnLiAqLworI2RlZmluZSBQQ0ZSCQlfX1JFRygweDkwMDIwMDEwKSAgLyogUE0gZ2VuZXJhbCBDb25GaWd1cmF0aW9uIFJlZy4gKi8KKyNkZWZpbmUgUFBDUgkJX19SRUcoMHg5MDAyMDAxNCkgIC8qIFBNIFBMTCBDb25maWd1cmF0aW9uIFJlZy4gKi8KKyNkZWZpbmUgUEdTUgkJX19SRUcoMHg5MDAyMDAxOCkgIC8qIFBNIEdQSU8gU2xlZXAgc3RhdGUgUmVnLiAqLworI2RlZmluZSBQT1NSCQlfX1JFRygweDkwMDIwMDFDKSAgLyogUE0gT3NjaWxsYXRvciBTdGF0dXMgUmVnLiAqLworCisjZGVmaW5lIFBNQ1JfU0YgCTB4MDAwMDAwMDEJLyogU2xlZXAgRm9yY2UgKHNldCBvbmx5KSAgICAgICAgICAqLworCisjZGVmaW5lIFBTU1JfU1MgCTB4MDAwMDAwMDEJLyogU29mdHdhcmUgU2xlZXAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQU1NSX0JGUwkweDAwMDAwMDAyCS8qIEJhdHRlcnkgRmF1bHQgU3RhdHVzICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAJICAgICAgICAJLyogKEJBVFRfRkFVTFQpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQU1NSX1ZGUwkweDAwMDAwMDA0CS8qIFZkZCBGYXVsdCBTdGF0dXMgKFZERF9GQVVMVCkgICAgKi8KKyNkZWZpbmUgUFNTUl9ESCAJMHgwMDAwMDAwOAkvKiBEUkFNIGNvbnRyb2wgSG9sZCAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBTU1JfUEggCTB4MDAwMDAwMTAJLyogUGVyaXBoZXJhbCBjb250cm9sIEhvbGQgICAgICAgICAqLworCisjZGVmaW5lIFBXRVJfR1BJTyhOYikJR1BJT19HUElPIChOYikJLyogR1BJTyBbMC4uMjddIHdha2UtdXAgZW5hYmxlICAgICAqLworI2RlZmluZSBQV0VSX0dQSU8wCVBXRVJfR1BJTyAoMCkJLyogR1BJTyAgWzBdIHdha2UtdXAgZW5hYmxlICAgICAgICAqLworI2RlZmluZSBQV0VSX0dQSU8xCVBXRVJfR1BJTyAoMSkJLyogR1BJTyAgWzFdIHdha2UtdXAgZW5hYmxlICAgICAgICAqLworI2RlZmluZSBQV0VSX0dQSU8yCVBXRVJfR1BJTyAoMikJLyogR1BJTyAgWzJdIHdha2UtdXAgZW5hYmxlICAgICAgICAqLworI2RlZmluZSBQV0VSX0dQSU8zCVBXRVJfR1BJTyAoMykJLyogR1BJTyAgWzNdIHdha2UtdXAgZW5hYmxlICAgICAgICAqLworI2RlZmluZSBQV0VSX0dQSU80CVBXRVJfR1BJTyAoNCkJLyogR1BJTyAgWzRdIHdha2UtdXAgZW5hYmxlICAgICAgICAqLworI2RlZmluZSBQV0VSX0dQSU81CVBXRVJfR1BJTyAoNSkJLyogR1BJTyAgWzVdIHdha2UtdXAgZW5hYmxlICAgICAgICAqLworI2RlZmluZSBQV0VSX0dQSU82CVBXRVJfR1BJTyAoNikJLyogR1BJTyAgWzZdIHdha2UtdXAgZW5hYmxlICAgICAgICAqLworI2RlZmluZSBQV0VSX0dQSU83CVBXRVJfR1BJTyAoNykJLyogR1BJTyAgWzddIHdha2UtdXAgZW5hYmxlICAgICAgICAqLworI2RlZmluZSBQV0VSX0dQSU84CVBXRVJfR1BJTyAoOCkJLyogR1BJTyAgWzhdIHdha2UtdXAgZW5hYmxlICAgICAgICAqLworI2RlZmluZSBQV0VSX0dQSU85CVBXRVJfR1BJTyAoOSkJLyogR1BJTyAgWzldIHdha2UtdXAgZW5hYmxlICAgICAgICAqLworI2RlZmluZSBQV0VSX0dQSU8xMAlQV0VSX0dQSU8gKDEwKQkvKiBHUElPIFsxMF0gd2FrZS11cCBlbmFibGUgICAgICAgICovCisjZGVmaW5lIFBXRVJfR1BJTzExCVBXRVJfR1BJTyAoMTEpCS8qIEdQSU8gWzExXSB3YWtlLXVwIGVuYWJsZSAgICAgICAgKi8KKyNkZWZpbmUgUFdFUl9HUElPMTIJUFdFUl9HUElPICgxMikJLyogR1BJTyBbMTJdIHdha2UtdXAgZW5hYmxlICAgICAgICAqLworI2RlZmluZSBQV0VSX0dQSU8xMwlQV0VSX0dQSU8gKDEzKQkvKiBHUElPIFsxM10gd2FrZS11cCBlbmFibGUgICAgICAgICovCisjZGVmaW5lIFBXRVJfR1BJTzE0CVBXRVJfR1BJTyAoMTQpCS8qIEdQSU8gWzE0XSB3YWtlLXVwIGVuYWJsZSAgICAgICAgKi8KKyNkZWZpbmUgUFdFUl9HUElPMTUJUFdFUl9HUElPICgxNSkJLyogR1BJTyBbMTVdIHdha2UtdXAgZW5hYmxlICAgICAgICAqLworI2RlZmluZSBQV0VSX0dQSU8xNglQV0VSX0dQSU8gKDE2KQkvKiBHUElPIFsxNl0gd2FrZS11cCBlbmFibGUgICAgICAgICovCisjZGVmaW5lIFBXRVJfR1BJTzE3CVBXRVJfR1BJTyAoMTcpCS8qIEdQSU8gWzE3XSB3YWtlLXVwIGVuYWJsZSAgICAgICAgKi8KKyNkZWZpbmUgUFdFUl9HUElPMTgJUFdFUl9HUElPICgxOCkJLyogR1BJTyBbMThdIHdha2UtdXAgZW5hYmxlICAgICAgICAqLworI2RlZmluZSBQV0VSX0dQSU8xOQlQV0VSX0dQSU8gKDE5KQkvKiBHUElPIFsxOV0gd2FrZS11cCBlbmFibGUgICAgICAgICovCisjZGVmaW5lIFBXRVJfR1BJTzIwCVBXRVJfR1BJTyAoMjApCS8qIEdQSU8gWzIwXSB3YWtlLXVwIGVuYWJsZSAgICAgICAgKi8KKyNkZWZpbmUgUFdFUl9HUElPMjEJUFdFUl9HUElPICgyMSkJLyogR1BJTyBbMjFdIHdha2UtdXAgZW5hYmxlICAgICAgICAqLworI2RlZmluZSBQV0VSX0dQSU8yMglQV0VSX0dQSU8gKDIyKQkvKiBHUElPIFsyMl0gd2FrZS11cCBlbmFibGUgICAgICAgICovCisjZGVmaW5lIFBXRVJfR1BJTzIzCVBXRVJfR1BJTyAoMjMpCS8qIEdQSU8gWzIzXSB3YWtlLXVwIGVuYWJsZSAgICAgICAgKi8KKyNkZWZpbmUgUFdFUl9HUElPMjQJUFdFUl9HUElPICgyNCkJLyogR1BJTyBbMjRdIHdha2UtdXAgZW5hYmxlICAgICAgICAqLworI2RlZmluZSBQV0VSX0dQSU8yNQlQV0VSX0dQSU8gKDI1KQkvKiBHUElPIFsyNV0gd2FrZS11cCBlbmFibGUgICAgICAgICovCisjZGVmaW5lIFBXRVJfR1BJTzI2CVBXRVJfR1BJTyAoMjYpCS8qIEdQSU8gWzI2XSB3YWtlLXVwIGVuYWJsZSAgICAgICAgKi8KKyNkZWZpbmUgUFdFUl9HUElPMjcJUFdFUl9HUElPICgyNykJLyogR1BJTyBbMjddIHdha2UtdXAgZW5hYmxlICAgICAgICAqLworI2RlZmluZSBQV0VSX1JUQwkweDgwMDAwMDAwCS8qIFJUQyBhbGFybSB3YWtlLXVwIGVuYWJsZSAgICAgICAgKi8KKworI2RlZmluZSBQQ0ZSX09QREUJMHgwMDAwMDAwMQkvKiBPc2NpbGxhdG9yIFBvd2VyLURvd24gRW5hYmxlICAgICovCisjZGVmaW5lIFBDRlJfQ2xrUnVuCShQQ0ZSX09QREUqMCkJLyogIENsb2NrIFJ1bm5pbmcgaW4gc2xlZXAgbW9kZSAgICAqLworI2RlZmluZSBQQ0ZSX0Nsa1N0cAkoUENGUl9PUERFKjEpCS8qICBDbG9jayBTdG9wcGVkIGluIHNsZWVwIG1vZGUgICAgKi8KKyNkZWZpbmUgUENGUl9GUCAJMHgwMDAwMDAwMgkvKiBGbG9hdCBQQ01DSUEgcGlucyAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBDRlJfUENNQ0lBTmVnCShQQ0ZSX0ZQKjApCS8qICBQQ01DSUEgcGlucyBOZWdhdGVkICgxKSAgICAgICAgKi8KKyNkZWZpbmUgUENGUl9QQ01DSUFGbHQJKFBDRlJfRlAqMSkJLyogIFBDTUNJQSBwaW5zIEZsb2F0aW5nICAgICAgICAgICAqLworI2RlZmluZSBQQ0ZSX0ZTIAkweDAwMDAwMDA0CS8qIEZsb2F0IFN0YXRpYyBtZW1vcnkgcGlucyAgICAgICAgKi8KKyNkZWZpbmUgUENGUl9TdE1lbU5lZwkoUENGUl9GUyowKQkvKiAgU3RhdGljIE1lbW9yeSBwaW5zIE5lZ2F0ZWQgKDEpICovCisjZGVmaW5lIFBDRlJfU3RNZW1GbHQJKFBDRlJfRlMqMSkJLyogIFN0YXRpYyBNZW1vcnkgcGlucyBGbG9hdGluZyAgICAqLworI2RlZmluZSBQQ0ZSX0ZPIAkweDAwMDAwMDA4CS8qIEZvcmNlIFJUQyBvc2NpbGxhdG9yICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAJICAgICAgICAJLyogKDMyLjc2OCBrSHopIGVuYWJsZSBPbiAgICAgICAgICAqLworCisjZGVmaW5lIFBQQ1JfQ0NGCUZsZCAoNSwgMCkJLyogQ1BVIGNvcmUgQ2xvY2sgKENDTEspIEZyZXEuICAgICAqLworI2RlZmluZSBQUENSX0Z4MTYJICAgICAgICAJLyogIEZyZXEuIHggMTYgKGZjcHUgPSAxNipmeHRsKSAgICAqLyBcCisgICAgICAgICAgICAgICAgCSgweDAwIDw8IEZTaGZ0IChQUENSX0NDRikpCisjZGVmaW5lIFBQQ1JfRngyMAkgICAgICAgIAkvKiAgRnJlcS4geCAyMCAoZmNwdSA9IDIwKmZ4dGwpICAgICovIFwKKyAgICAgICAgICAgICAgICAJKDB4MDEgPDwgRlNoZnQgKFBQQ1JfQ0NGKSkKKyNkZWZpbmUgUFBDUl9GeDI0CSAgICAgICAgCS8qICBGcmVxLiB4IDI0IChmY3B1ID0gMjQqZnh0bCkgICAgKi8gXAorICAgICAgICAgICAgICAgIAkoMHgwMiA8PCBGU2hmdCAoUFBDUl9DQ0YpKQorI2RlZmluZSBQUENSX0Z4MjgJICAgICAgICAJLyogIEZyZXEuIHggMjggKGZjcHUgPSAyOCpmeHRsKSAgICAqLyBcCisgICAgICAgICAgICAgICAgCSgweDAzIDw8IEZTaGZ0IChQUENSX0NDRikpCisjZGVmaW5lIFBQQ1JfRngzMgkgICAgICAgIAkvKiAgRnJlcS4geCAzMiAoZmNwdSA9IDMyKmZ4dGwpICAgICovIFwKKyAgICAgICAgICAgICAgICAJKDB4MDQgPDwgRlNoZnQgKFBQQ1JfQ0NGKSkKKyNkZWZpbmUgUFBDUl9GeDM2CSAgICAgICAgCS8qICBGcmVxLiB4IDM2IChmY3B1ID0gMzYqZnh0bCkgICAgKi8gXAorICAgICAgICAgICAgICAgIAkoMHgwNSA8PCBGU2hmdCAoUFBDUl9DQ0YpKQorI2RlZmluZSBQUENSX0Z4NDAJICAgICAgICAJLyogIEZyZXEuIHggNDAgKGZjcHUgPSA0MCpmeHRsKSAgICAqLyBcCisgICAgICAgICAgICAgICAgCSgweDA2IDw8IEZTaGZ0IChQUENSX0NDRikpCisjZGVmaW5lIFBQQ1JfRng0NAkgICAgICAgIAkvKiAgRnJlcS4geCA0NCAoZmNwdSA9IDQ0KmZ4dGwpICAgICovIFwKKyAgICAgICAgICAgICAgICAJKDB4MDcgPDwgRlNoZnQgKFBQQ1JfQ0NGKSkKKyNkZWZpbmUgUFBDUl9GeDQ4CSAgICAgICAgCS8qICBGcmVxLiB4IDQ4IChmY3B1ID0gNDgqZnh0bCkgICAgKi8gXAorICAgICAgICAgICAgICAgIAkoMHgwOCA8PCBGU2hmdCAoUFBDUl9DQ0YpKQorI2RlZmluZSBQUENSX0Z4NTIJICAgICAgICAJLyogIEZyZXEuIHggNTIgKGZjcHUgPSA1MipmeHRsKSAgICAqLyBcCisgICAgICAgICAgICAgICAgCSgweDA5IDw8IEZTaGZ0IChQUENSX0NDRikpCisjZGVmaW5lIFBQQ1JfRng1NgkgICAgICAgIAkvKiAgRnJlcS4geCA1NiAoZmNwdSA9IDU2KmZ4dGwpICAgICovIFwKKyAgICAgICAgICAgICAgICAJKDB4MEEgPDwgRlNoZnQgKFBQQ1JfQ0NGKSkKKyNkZWZpbmUgUFBDUl9GeDYwCSAgICAgICAgCS8qICBGcmVxLiB4IDYwIChmY3B1ID0gNjAqZnh0bCkgICAgKi8gXAorICAgICAgICAgICAgICAgIAkoMHgwQiA8PCBGU2hmdCAoUFBDUl9DQ0YpKQorI2RlZmluZSBQUENSX0Z4NjQJICAgICAgICAJLyogIEZyZXEuIHggNjQgKGZjcHUgPSA2NCpmeHRsKSAgICAqLyBcCisgICAgICAgICAgICAgICAgCSgweDBDIDw8IEZTaGZ0IChQUENSX0NDRikpCisjZGVmaW5lIFBQQ1JfRng2OAkgICAgICAgIAkvKiAgRnJlcS4geCA2OCAoZmNwdSA9IDY4KmZ4dGwpICAgICovIFwKKyAgICAgICAgICAgICAgICAJKDB4MEQgPDwgRlNoZnQgKFBQQ1JfQ0NGKSkKKyNkZWZpbmUgUFBDUl9GeDcyCSAgICAgICAgCS8qICBGcmVxLiB4IDcyIChmY3B1ID0gNzIqZnh0bCkgICAgKi8gXAorICAgICAgICAgICAgICAgIAkoMHgwRSA8PCBGU2hmdCAoUFBDUl9DQ0YpKQorI2RlZmluZSBQUENSX0Z4NzYJICAgICAgICAJLyogIEZyZXEuIHggNzYgKGZjcHUgPSA3NipmeHRsKSAgICAqLyBcCisgICAgICAgICAgICAgICAgCSgweDBGIDw8IEZTaGZ0IChQUENSX0NDRikpCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qICAzLjY4NjQgTUh6IGNyeXN0YWwgKGZ4dGwpOiAgICAgKi8KKyNkZWZpbmUgUFBDUl9GNTlfME1IeglQUENSX0Z4MTYJLyogICBGcmVxLiAoZmNwdSkgPSAgNTkuMCBNSHogICAgICAqLworI2RlZmluZSBQUENSX0Y3M183TUh6CVBQQ1JfRngyMAkvKiAgIEZyZXEuIChmY3B1KSA9ICA3My43IE1IeiAgICAgICovCisjZGVmaW5lIFBQQ1JfRjg4XzVNSHoJUFBDUl9GeDI0CS8qICAgRnJlcS4gKGZjcHUpID0gIDg4LjUgTUh6ICAgICAgKi8KKyNkZWZpbmUgUFBDUl9GMTAzXzJNSHoJUFBDUl9GeDI4CS8qICAgRnJlcS4gKGZjcHUpID0gMTAzLjIgTUh6ICAgICAgKi8KKyNkZWZpbmUgUFBDUl9GMTE4XzBNSHoJUFBDUl9GeDMyCS8qICAgRnJlcS4gKGZjcHUpID0gMTE4LjAgTUh6ICAgICAgKi8KKyNkZWZpbmUgUFBDUl9GMTMyXzdNSHoJUFBDUl9GeDM2CS8qICAgRnJlcS4gKGZjcHUpID0gMTMyLjcgTUh6ICAgICAgKi8KKyNkZWZpbmUgUFBDUl9GMTQ3XzVNSHoJUFBDUl9GeDQwCS8qICAgRnJlcS4gKGZjcHUpID0gMTQ3LjUgTUh6ICAgICAgKi8KKyNkZWZpbmUgUFBDUl9GMTYyXzJNSHoJUFBDUl9GeDQ0CS8qICAgRnJlcS4gKGZjcHUpID0gMTYyLjIgTUh6ICAgICAgKi8KKyNkZWZpbmUgUFBDUl9GMTc2XzlNSHoJUFBDUl9GeDQ4CS8qICAgRnJlcS4gKGZjcHUpID0gMTc2LjkgTUh6ICAgICAgKi8KKyNkZWZpbmUgUFBDUl9GMTkxXzdNSHoJUFBDUl9GeDUyCS8qICAgRnJlcS4gKGZjcHUpID0gMTkxLjcgTUh6ICAgICAgKi8KKyNkZWZpbmUgUFBDUl9GMjA2XzRNSHoJUFBDUl9GeDU2CS8qICAgRnJlcS4gKGZjcHUpID0gMjA2LjQgTUh6ICAgICAgKi8KKyNkZWZpbmUgUFBDUl9GMjIxXzJNSHoJUFBDUl9GeDYwCS8qICAgRnJlcS4gKGZjcHUpID0gMjIxLjIgTUh6ICAgICAgKi8KKyNkZWZpbmUgUFBDUl9GMjM5XzZNSHoJUFBDUl9GeDY0CS8qICAgRnJlcS4gKGZjcHUpID0gMjM5LjYgTUh6ICAgICAgKi8KKyNkZWZpbmUgUFBDUl9GMjUwXzdNSHoJUFBDUl9GeDY4CS8qICAgRnJlcS4gKGZjcHUpID0gMjUwLjcgTUh6ICAgICAgKi8KKyNkZWZpbmUgUFBDUl9GMjY1XzRNSHoJUFBDUl9GeDcyCS8qICAgRnJlcS4gKGZjcHUpID0gMjY1LjQgTUh6ICAgICAgKi8KKyNkZWZpbmUgUFBDUl9GMjgwXzJNSHoJUFBDUl9GeDc2CS8qICAgRnJlcS4gKGZjcHUpID0gMjgwLjIgTUh6ICAgICAgKi8KKyAgICAgICAgICAgICAgICAJICAgICAgICAJLyogIDMuNTc5NSBNSHogY3J5c3RhbCAoZnh0bCk6ICAgICAqLworI2RlZmluZSBQUENSX0Y1N18zTUh6CVBQQ1JfRngxNgkvKiAgIEZyZXEuIChmY3B1KSA9ICA1Ny4zIE1IeiAgICAgICovCisjZGVmaW5lIFBQQ1JfRjcxXzZNSHoJUFBDUl9GeDIwCS8qICAgRnJlcS4gKGZjcHUpID0gIDcxLjYgTUh6ICAgICAgKi8KKyNkZWZpbmUgUFBDUl9GODVfOU1IeglQUENSX0Z4MjQJLyogICBGcmVxLiAoZmNwdSkgPSAgODUuOSBNSHogICAgICAqLworI2RlZmluZSBQUENSX0YxMDBfMk1IeglQUENSX0Z4MjgJLyogICBGcmVxLiAoZmNwdSkgPSAxMDAuMiBNSHogICAgICAqLworI2RlZmluZSBQUENSX0YxMTRfNU1IeglQUENSX0Z4MzIJLyogICBGcmVxLiAoZmNwdSkgPSAxMTQuNSBNSHogICAgICAqLworI2RlZmluZSBQUENSX0YxMjhfOU1IeglQUENSX0Z4MzYJLyogICBGcmVxLiAoZmNwdSkgPSAxMjguOSBNSHogICAgICAqLworI2RlZmluZSBQUENSX0YxNDNfMk1IeglQUENSX0Z4NDAJLyogICBGcmVxLiAoZmNwdSkgPSAxNDMuMiBNSHogICAgICAqLworI2RlZmluZSBQUENSX0YxNTdfNU1IeglQUENSX0Z4NDQJLyogICBGcmVxLiAoZmNwdSkgPSAxNTcuNSBNSHogICAgICAqLworI2RlZmluZSBQUENSX0YxNzFfOE1IeglQUENSX0Z4NDgJLyogICBGcmVxLiAoZmNwdSkgPSAxNzEuOCBNSHogICAgICAqLworI2RlZmluZSBQUENSX0YxODZfMU1IeglQUENSX0Z4NTIJLyogICBGcmVxLiAoZmNwdSkgPSAxODYuMSBNSHogICAgICAqLworI2RlZmluZSBQUENSX0YyMDBfNU1IeglQUENSX0Z4NTYJLyogICBGcmVxLiAoZmNwdSkgPSAyMDAuNSBNSHogICAgICAqLworI2RlZmluZSBQUENSX0YyMTRfOE1IeglQUENSX0Z4NjAJLyogICBGcmVxLiAoZmNwdSkgPSAyMTQuOCBNSHogICAgICAqLworI2RlZmluZSBQUENSX0YyMjlfMU1IeglQUENSX0Z4NjQJLyogICBGcmVxLiAoZmNwdSkgPSAyMjkuMSBNSHogICAgICAqLworI2RlZmluZSBQUENSX0YyNDNfNE1IeglQUENSX0Z4NjgJLyogICBGcmVxLiAoZmNwdSkgPSAyNDMuNCBNSHogICAgICAqLworI2RlZmluZSBQUENSX0YyNTdfN01IeglQUENSX0Z4NzIJLyogICBGcmVxLiAoZmNwdSkgPSAyNTcuNyBNSHogICAgICAqLworI2RlZmluZSBQUENSX0YyNzJfME1IeglQUENSX0Z4NzYJLyogICBGcmVxLiAoZmNwdSkgPSAyNzIuMCBNSHogICAgICAqLworCisjZGVmaW5lIFBPU1JfT09LCTB4MDAwMDAwMDEJLyogUlRDIE9zY2lsbGF0b3IgKDMyLjc2OCBrSHopIE9LICAqLworCisKKy8qCisgKiBSZXNldCBDb250cm9sbGVyIChSQykgY29udHJvbCByZWdpc3RlcnMKKyAqCisgKiBSZWdpc3RlcnMKKyAqICAgIFJTUlIgICAgICAJUmVzZXQgQ29udHJvbGxlciAoUkMpIFNvZnR3YXJlIFJlc2V0IFJlZ2lzdGVyCisgKiAgICAgICAgICAgICAgCShyZWFkL3dyaXRlKS4KKyAqICAgIFJDU1IgICAgICAJUmVzZXQgQ29udHJvbGxlciAoUkMpIFN0YXR1cyBSZWdpc3RlciAocmVhZC93cml0ZSkuCisgKi8KKworI2RlZmluZSBSU1JSCQlfX1JFRygweDkwMDMwMDAwKSAgLyogUkMgU29mdHdhcmUgUmVzZXQgUmVnLiAqLworI2RlZmluZSBSQ1NSCQlfX1JFRygweDkwMDMwMDA0KSAgLyogUkMgU3RhdHVzIFJlZy4gKi8KKworI2RlZmluZSBSU1JSX1NXUgkweDAwMDAwMDAxCS8qIFNvZnRXYXJlIFJlc2V0IChzZXQgb25seSkgICAgICAgKi8KKworI2RlZmluZSBSQ1NSX0hXUgkweDAwMDAwMDAxCS8qIEhhcmRXYXJlIFJlc2V0ICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkNTUl9TV1IJMHgwMDAwMDAwMgkvKiBTb2Z0V2FyZSBSZXNldCAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJDU1JfV0RSCTB4MDAwMDAwMDQJLyogV2F0Y2gtRG9nIFJlc2V0ICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBSQ1NSX1NNUgkweDAwMDAwMDA4CS8qIFNsZWVwLU1vZGUgUmVzZXQgICAgICAgICAgICAgICAgKi8KKworCisvKgorICogVGVzdCB1bml0IGNvbnRyb2wgcmVnaXN0ZXJzCisgKgorICogUmVnaXN0ZXJzCisgKiAgICBUVUNSICAgICAgCVRlc3QgVW5pdCBDb250cm9sIFJlZ2lzdGVyIChyZWFkL3dyaXRlKS4KKyAqLworCisjZGVmaW5lIFRVQ1IJCV9fUkVHKDB4OTAwMzAwMDgpICAvKiBUZXN0IFVuaXQgQ29udHJvbCBSZWcuICovCisKKyNkZWZpbmUgVFVDUl9USUMJMHgwMDAwMDA0MAkvKiBUSUMgbW9kZSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFRVQ1JfVFRTVAkweDAwMDAwMDgwCS8qIFRyaW0gVGVTVCBtb2RlICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVFVDUl9SQ1JDCTB4MDAwMDAxMDAJLyogUmljaGFyZCdzIEN5Y2xpYyBSZWR1bmRhbmN5ICAgICAqLworICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBDaGVjayAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFRVQ1JfUE1ECTB4MDAwMDAyMDAJLyogUG93ZXIgTWFuYWdlbWVudCBEaXNhYmxlICAgICAgICAqLworI2RlZmluZSBUVUNSX01SIAkweDAwMDAwNDAwCS8qIE1lbW9yeSBSZXF1ZXN0IG1vZGUgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVFVDUl9Ob01CCShUVUNSX01SKjApCS8qICBObyBNZW1vcnkgQnVzIHJlcXVlc3QgJiBncmFudCAgKi8KKyNkZWZpbmUgVFVDUl9NQkdQSU8JKFRVQ1JfTVIqMSkJLyogIE1lbW9yeSBCdXMgcmVxdWVzdCAoTUJSRVEpICYgICAqLworICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAgZ3JhbnQgKE1CR05UKSBvbiBHUElPIFsyMjoyMV0gICovCisjZGVmaW5lIFRVQ1JfQ1RCCUZsZCAoMywgMjApCS8qIENsb2NrIFRlc3QgQml0cyAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVFVDUl9GREMJMHgwMDgwMDAwMAkvKiBSVEMgRm9yY2UgRGVsZXRlIENvdW50ICAgICAgICAgICovCisjZGVmaW5lIFRVQ1JfRk1DCTB4MDEwMDAwMDAJLyogRm9yY2UgTWljaGVsbGUncyBDb250cm9sIG1vZGUgICAqLworI2RlZmluZSBUVUNSX1RNQwkweDAyMDAwMDAwCS8qIFJUQyBUcmltbWVyIE11bHRpcGxleGVyIENvbnRyb2wgKi8KKyNkZWZpbmUgVFVDUl9EUFMJMHgwNDAwMDAwMAkvKiBEaXNhbGxvdyBQYWQgU2xlZXAgICAgICAgICAgICAgICovCisjZGVmaW5lIFRVQ1JfVFNFTAlGbGQgKDMsIDI5KQkvKiBjbG9jayBUZXN0IFNFTGVjdCBvbiBHUElPIFsyN10gICovCisjZGVmaW5lIFRVQ1JfMzJfNzY4a0h6CSAgICAgICAgCS8qICAzMi43Njgga0h6IG9zYy4gb24gR1BJTyBbMjddICAgKi8gXAorICAgICAgICAgICAgICAgIAkoMCA8PCBGU2hmdCAoVFVDUl9UU0VMKSkKKyNkZWZpbmUgVFVDUl8zXzY4NjRNSHoJICAgICAgICAJLyogIDMuNjg2NCBNSHogb3NjLiBvbiBHUElPIFsyN10gICAqLyBcCisgICAgICAgICAgICAgICAgCSgxIDw8IEZTaGZ0IChUVUNSX1RTRUwpKQorI2RlZmluZSBUVUNSX1ZERAkgICAgICAgIAkvKiAgVkREIHJpbmcgb3NjLi8xNiBvbiBHUElPIFsyN10gICovIFwKKyAgICAgICAgICAgICAgICAJKDIgPDwgRlNoZnQgKFRVQ1JfVFNFTCkpCisjZGVmaW5lIFRVQ1JfOTZNSHpQTEwJICAgICAgICAJLyogIDk2IE1IeiBQTEwvNCBvbiBHUElPIFsyN10gICAgICAqLyBcCisgICAgICAgICAgICAgICAgCSgzIDw8IEZTaGZ0IChUVUNSX1RTRUwpKQorI2RlZmluZSBUVUNSX0Nsb2NrCSAgICAgICAgCS8qICBpbnRlcm5hbCAoZmNwdS8yKSAmIDMyLjc2OCBrSHogKi8gXAorICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAgQ2xvY2tzIG9uIEdQSU8gWzI2OjI3XSAgICAgICAgICovIFwKKyAgICAgICAgICAgICAgICAJKDQgPDwgRlNoZnQgKFRVQ1JfVFNFTCkpCisjZGVmaW5lIFRVQ1JfM182ODY0TUh6QQkgICAgICAgIAkvKiAgMy42ODY0IE1IeiBvc2MuIG9uIEdQSU8gWzI3XSAgICovIFwKKyAgICAgICAgICAgICAgICAJICAgICAgICAJLyogIChBbHRlcm5hdGl2ZSkgICAgICAgICAgICAgICAgICAqLyBcCisgICAgICAgICAgICAgICAgCSg1IDw8IEZTaGZ0IChUVUNSX1RTRUwpKQorI2RlZmluZSBUVUNSX01haW5QTEwJICAgICAgICAJLyogIE1haW4gUExMLzE2IG9uIEdQSU8gWzI3XSAgICAgICAqLyBcCisgICAgICAgICAgICAgICAgCSg2IDw8IEZTaGZ0IChUVUNSX1RTRUwpKQorI2RlZmluZSBUVUNSX1ZEREwJICAgICAgICAJLyogIFZEREwgcmluZyBvc2MuLzQgb24gR1BJTyBbMjddICAqLyBcCisgICAgICAgICAgICAgICAgCSg3IDw8IEZTaGZ0IChUVUNSX1RTRUwpKQorCisKKy8qCisgKiBHZW5lcmFsLVB1cnBvc2UgSW5wdXQvT3V0cHV0IChHUElPKSBjb250cm9sIHJlZ2lzdGVycworICoKKyAqIFJlZ2lzdGVycworICogICAgR1BMUiAgICAgIAlHZW5lcmFsLVB1cnBvc2UgSW5wdXQvT3V0cHV0IChHUElPKSBQaW4gTGV2ZWwKKyAqICAgICAgICAgICAgICAJUmVnaXN0ZXIgKHJlYWQpLgorICogICAgR1BEUiAgICAgIAlHZW5lcmFsLVB1cnBvc2UgSW5wdXQvT3V0cHV0IChHUElPKSBQaW4gRGlyZWN0aW9uCisgKiAgICAgICAgICAgICAgCVJlZ2lzdGVyIChyZWFkL3dyaXRlKS4KKyAqICAgIEdQU1IgICAgICAJR2VuZXJhbC1QdXJwb3NlIElucHV0L091dHB1dCAoR1BJTykgUGluIG91dHB1dCBTZXQKKyAqICAgICAgICAgICAgICAJUmVnaXN0ZXIgKHdyaXRlKS4KKyAqICAgIEdQQ1IgICAgICAJR2VuZXJhbC1QdXJwb3NlIElucHV0L091dHB1dCAoR1BJTykgUGluIG91dHB1dCBDbGVhcgorICogICAgICAgICAgICAgIAlSZWdpc3RlciAod3JpdGUpLgorICogICAgR1JFUiAgICAgIAlHZW5lcmFsLVB1cnBvc2UgSW5wdXQvT3V0cHV0IChHUElPKSBSaXNpbmctRWRnZQorICogICAgICAgICAgICAgIAlkZXRlY3QgUmVnaXN0ZXIgKHJlYWQvd3JpdGUpLgorICogICAgR0ZFUiAgICAgIAlHZW5lcmFsLVB1cnBvc2UgSW5wdXQvT3V0cHV0IChHUElPKSBGYWxsaW5nLUVkZ2UKKyAqICAgICAgICAgICAgICAJZGV0ZWN0IFJlZ2lzdGVyIChyZWFkL3dyaXRlKS4KKyAqICAgIEdFRFIgICAgICAJR2VuZXJhbC1QdXJwb3NlIElucHV0L091dHB1dCAoR1BJTykgRWRnZSBEZXRlY3QKKyAqICAgICAgICAgICAgICAJc3RhdHVzIFJlZ2lzdGVyIChyZWFkL3dyaXRlKS4KKyAqICAgIEdBRlIgICAgICAJR2VuZXJhbC1QdXJwb3NlIElucHV0L091dHB1dCAoR1BJTykgQWx0ZXJuYXRlCisgKiAgICAgICAgICAgICAgCUZ1bmN0aW9uIFJlZ2lzdGVyIChyZWFkL3dyaXRlKS4KKyAqCisgKiBDbG9jaworICogICAgZmNwdSwgVGNwdQlGcmVxdWVuY3ksIHBlcmlvZCBvZiB0aGUgQ1BVIGNvcmUgY2xvY2sgKENDTEspLgorICovCisKKyNkZWZpbmUgR1BMUgkJX19SRUcoMHg5MDA0MDAwMCkgIC8qIEdQSU8gUGluIExldmVsIFJlZy4gICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BEUgkJX19SRUcoMHg5MDA0MDAwNCkgIC8qIEdQSU8gUGluIERpcmVjdGlvbiBSZWcuICAgICAgICAgKi8KKyNkZWZpbmUgR1BTUgkJX19SRUcoMHg5MDA0MDAwOCkgIC8qIEdQSU8gUGluIG91dHB1dCBTZXQgUmVnLiAgICAgICAgKi8KKyNkZWZpbmUgR1BDUgkJX19SRUcoMHg5MDA0MDAwQykgIC8qIEdQSU8gUGluIG91dHB1dCBDbGVhciBSZWcuICAgICAgKi8KKyNkZWZpbmUgR1JFUgkJX19SRUcoMHg5MDA0MDAxMCkgIC8qIEdQSU8gUmlzaW5nLUVkZ2UgZGV0ZWN0IFJlZy4gICAgKi8KKyNkZWZpbmUgR0ZFUgkJX19SRUcoMHg5MDA0MDAxNCkgIC8qIEdQSU8gRmFsbGluZy1FZGdlIGRldGVjdCBSZWcuICAgKi8KKyNkZWZpbmUgR0VEUgkJX19SRUcoMHg5MDA0MDAxOCkgIC8qIEdQSU8gRWRnZSBEZXRlY3Qgc3RhdHVzIFJlZy4gICAgKi8KKyNkZWZpbmUgR0FGUgkJX19SRUcoMHg5MDA0MDAxQykgIC8qIEdQSU8gQWx0ZXJuYXRlIEZ1bmN0aW9uIFJlZy4gICAgKi8KKworI2RlZmluZSBHUElPX01JTgkoMCkKKyNkZWZpbmUgR1BJT19NQVgJKDI3KQorCisjZGVmaW5lIEdQSU9fR1BJTyhOYikJICAgICAgICAJLyogR1BJTyBbMC4uMjddICAgICAgICAgICAgICAgICAgICAqLyBcCisgICAgICAgICAgICAgICAgCSgweDAwMDAwMDAxIDw8IChOYikpCisjZGVmaW5lIEdQSU9fR1BJTzAJR1BJT19HUElPICgwKQkvKiBHUElPICBbMF0gICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fR1BJTzEJR1BJT19HUElPICgxKQkvKiBHUElPICBbMV0gICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fR1BJTzIJR1BJT19HUElPICgyKQkvKiBHUElPICBbMl0gICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fR1BJTzMJR1BJT19HUElPICgzKQkvKiBHUElPICBbM10gICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fR1BJTzQJR1BJT19HUElPICg0KQkvKiBHUElPICBbNF0gICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fR1BJTzUJR1BJT19HUElPICg1KQkvKiBHUElPICBbNV0gICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fR1BJTzYJR1BJT19HUElPICg2KQkvKiBHUElPICBbNl0gICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fR1BJTzcJR1BJT19HUElPICg3KQkvKiBHUElPICBbN10gICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fR1BJTzgJR1BJT19HUElPICg4KQkvKiBHUElPICBbOF0gICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fR1BJTzkJR1BJT19HUElPICg5KQkvKiBHUElPICBbOV0gICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fR1BJTzEwCUdQSU9fR1BJTyAoMTApCS8qIEdQSU8gWzEwXSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19HUElPMTEJR1BJT19HUElPICgxMSkJLyogR1BJTyBbMTFdICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX0dQSU8xMglHUElPX0dQSU8gKDEyKQkvKiBHUElPIFsxMl0gICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fR1BJTzEzCUdQSU9fR1BJTyAoMTMpCS8qIEdQSU8gWzEzXSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19HUElPMTQJR1BJT19HUElPICgxNCkJLyogR1BJTyBbMTRdICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX0dQSU8xNQlHUElPX0dQSU8gKDE1KQkvKiBHUElPIFsxNV0gICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fR1BJTzE2CUdQSU9fR1BJTyAoMTYpCS8qIEdQSU8gWzE2XSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19HUElPMTcJR1BJT19HUElPICgxNykJLyogR1BJTyBbMTddICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX0dQSU8xOAlHUElPX0dQSU8gKDE4KQkvKiBHUElPIFsxOF0gICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fR1BJTzE5CUdQSU9fR1BJTyAoMTkpCS8qIEdQSU8gWzE5XSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19HUElPMjAJR1BJT19HUElPICgyMCkJLyogR1BJTyBbMjBdICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX0dQSU8yMQlHUElPX0dQSU8gKDIxKQkvKiBHUElPIFsyMV0gICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fR1BJTzIyCUdQSU9fR1BJTyAoMjIpCS8qIEdQSU8gWzIyXSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19HUElPMjMJR1BJT19HUElPICgyMykJLyogR1BJTyBbMjNdICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX0dQSU8yNAlHUElPX0dQSU8gKDI0KQkvKiBHUElPIFsyNF0gICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fR1BJTzI1CUdQSU9fR1BJTyAoMjUpCS8qIEdQSU8gWzI1XSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19HUElPMjYJR1BJT19HUElPICgyNikJLyogR1BJTyBbMjZdICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX0dQSU8yNwlHUElPX0dQSU8gKDI3KQkvKiBHUElPIFsyN10gICAgICAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19MREQoTmIpCSAgICAgICAgCS8qIExDRCBEYXRhIFs4Li4xNV0gKE8pICAgICAgICAgICAgKi8gXAorICAgICAgICAgICAgICAgIAlHUElPX0dQSU8gKChOYikgLSA2KQorI2RlZmluZSBHUElPX0xERDgJR1BJT19MREQgKDgpCS8qIExDRCBEYXRhICBbOF0gKE8pICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19MREQ5CUdQSU9fTEREICg5KQkvKiBMQ0QgRGF0YSAgWzldIChPKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fTEREMTAJR1BJT19MREQgKDEwKQkvKiBMQ0QgRGF0YSBbMTBdIChPKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fTEREMTEJR1BJT19MREQgKDExKQkvKiBMQ0QgRGF0YSBbMTFdIChPKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fTEREMTIJR1BJT19MREQgKDEyKQkvKiBMQ0QgRGF0YSBbMTJdIChPKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fTEREMTMJR1BJT19MREQgKDEzKQkvKiBMQ0QgRGF0YSBbMTNdIChPKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fTEREMTQJR1BJT19MREQgKDE0KQkvKiBMQ0QgRGF0YSBbMTRdIChPKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fTEREMTUJR1BJT19MREQgKDE1KQkvKiBMQ0QgRGF0YSBbMTVdIChPKSAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIHNlci4gcG9ydCA0OiAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19TU1BfVFhECUdQSU9fR1BJTyAoMTApCS8qICBTU1AgVHJhbnNtaXQgRGF0YSAoTykgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19TU1BfUlhECUdQSU9fR1BJTyAoMTEpCS8qICBTU1AgUmVjZWl2ZSBEYXRhIChJKSAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19TU1BfU0NMSwlHUElPX0dQSU8gKDEyKQkvKiAgU1NQIFNhbXBsZSBDTG9jSyAoTykgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fU1NQX1NGUk0JR1BJT19HUElPICgxMykJLyogIFNTUCBTYW1wbGUgRlJhTWUgKE8pICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBzZXIuIHBvcnQgMTogICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fVUFSVF9UWEQJR1BJT19HUElPICgxNCkJLyogIFVBUlQgVHJhbnNtaXQgRGF0YSAoTykgICAgICAgICAqLworI2RlZmluZSBHUElPX1VBUlRfUlhECUdQSU9fR1BJTyAoMTUpCS8qICBVQVJUIFJlY2VpdmUgRGF0YSAoSSkgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19TRExDX1NDTEsJR1BJT19HUElPICgxNikJLyogIFNETEMgU2FtcGxlIENMb2NLIChJL08pICAgICAgICAqLworI2RlZmluZSBHUElPX1NETENfQUFGCUdQSU9fR1BJTyAoMTcpCS8qICBTRExDIEFib3J0IEFmdGVyIEZyYW1lIChPKSAgICAgKi8KKyNkZWZpbmUgR1BJT19VQVJUX1NDTEsxCUdQSU9fR1BJTyAoMTgpCS8qICBVQVJUIFNhbXBsZSBDTG9jSyAxIChJKSAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAJICAgICAgICAJLyogc2VyLiBwb3J0IDQ6ICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1NTUF9DTEsJR1BJT19HUElPICgxOSkJLyogIFNTUCBleHRlcm5hbCBDTG9jSyAoSSkgICAgICAgICAqLworICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBzZXIuIHBvcnQgMzogICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fVUFSVF9TQ0xLMwlHUElPX0dQSU8gKDIwKQkvKiAgVUFSVCBTYW1wbGUgQ0xvY0sgMyAoSSkgICAgICAgICovCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIHNlci4gcG9ydCA0OiAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19NQ1BfQ0xLCUdQSU9fR1BJTyAoMjEpCS8qICBNQ1AgQ0xvY0sgKEkpICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAJICAgICAgICAJLyogdGVzdCBjb250cm9sbGVyOiAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1RJQ19BQ0sJR1BJT19HUElPICgyMSkJLyogIFRJQyBBQ0tub3dsZWRnZSAoTykgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX01CR05UCUdQSU9fR1BJTyAoMjEpCS8qICBNZW1vcnkgQnVzIEdyYU5UIChPKSAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19UUkVRQQlHUElPX0dQSU8gKDIyKQkvKiAgVElDIFJFUXVlc3QgQSAoSSkgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fTUJSRVEJR1BJT19HUElPICgyMikJLyogIE1lbW9yeSBCdXMgUkVRdWVzdCAoSSkgICAgICAgICAqLworI2RlZmluZSBHUElPX1RSRVFCCUdQSU9fR1BJTyAoMjMpCS8qICBUSUMgUkVRdWVzdCBCIChJKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT18xSHoJR1BJT19HUElPICgyNSkJLyogMSBIeiBjbG9jayAoTykgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1JDTEsJR1BJT19HUElPICgyNikJLyogaW50ZXJuYWwgKFIpIENMb2NLIChPLCBmY3B1LzIpICAqLworI2RlZmluZSBHUElPXzMyXzc2OGtIeglHUElPX0dQSU8gKDI3KQkvKiAzMi43Njgga0h6IGNsb2NrIChPLCBSVEMpICAgICAgICovCisKKyNkZWZpbmUgR1BEUl9JbiAJMCAgICAgICAJLyogSW5wdXQgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUERSX091dAkxICAgICAgIAkvKiBPdXRwdXQgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKworLyoKKyAqIEludGVycnVwdCBDb250cm9sbGVyIChJQykgY29udHJvbCByZWdpc3RlcnMKKyAqCisgKiBSZWdpc3RlcnMKKyAqICAgIElDSVAgICAgICAJSW50ZXJydXB0IENvbnRyb2xsZXIgKElDKSBJbnRlcnJ1cHQgUmVRdWVzdCAoSVJRKQorICogICAgICAgICAgICAgIAlQZW5kaW5nIHJlZ2lzdGVyIChyZWFkKS4KKyAqICAgIElDTVIgICAgICAJSW50ZXJydXB0IENvbnRyb2xsZXIgKElDKSBNYXNrIFJlZ2lzdGVyIChyZWFkL3dyaXRlKS4KKyAqICAgIElDTFIgICAgICAJSW50ZXJydXB0IENvbnRyb2xsZXIgKElDKSBMZXZlbCBSZWdpc3RlciAocmVhZC93cml0ZSkuCisgKiAgICBJQ0NSICAgICAgCUludGVycnVwdCBDb250cm9sbGVyIChJQykgQ29udHJvbCBSZWdpc3RlcgorICogICAgICAgICAgICAgIAkocmVhZC93cml0ZSkuCisgKiAgICAgICAgICAgICAgCVtUaGUgSUNDUiByZWdpc3RlciBpcyBvbmx5IGltcGxlbWVudGVkIGluIHZlcnNpb25zIDIuMAorICogICAgICAgICAgICAgIAkocmV2LiA9IDgpIGFuZCBoaWdoZXIgb2YgdGhlIFN0cm9uZ0FSTSBTQS0xMTAwLl0KKyAqICAgIElDRlAgICAgICAJSW50ZXJydXB0IENvbnRyb2xsZXIgKElDKSBGYXN0IEludGVycnVwdCByZVF1ZXN0CisgKiAgICAgICAgICAgICAgCShGSVEpIFBlbmRpbmcgcmVnaXN0ZXIgKHJlYWQpLgorICogICAgSUNQUiAgICAgIAlJbnRlcnJ1cHQgQ29udHJvbGxlciAoSUMpIFBlbmRpbmcgUmVnaXN0ZXIgKHJlYWQpLgorICogICAgICAgICAgICAgIAlbVGhlIElDUFIgcmVnaXN0ZXIgaXMgYWN0aXZlIGxvdyAoaW52ZXJ0ZWQpIGluCisgKiAgICAgICAgICAgICAgCXZlcnNpb25zIDEuMCAocmV2LiA9IDEpIGFuZCAxLjEgKHJldi4gPSAyKSBvZiB0aGUKKyAqICAgICAgICAgICAgICAJU3Ryb25nQVJNIFNBLTExMDAsIGl0IGlzIGFjdGl2ZSBoaWdoIChub24taW52ZXJ0ZWQpIGluCisgKiAgICAgICAgICAgICAgCXZlcnNpb25zIDIuMCAocmV2LiA9IDgpIGFuZCBoaWdoZXIuXQorICovCisKKyNkZWZpbmUgSUNJUAkJX19SRUcoMHg5MDA1MDAwMCkgIC8qIElDIElSUSBQZW5kaW5nIHJlZy4gICAgICAgICAgICAgKi8KKyNkZWZpbmUgSUNNUgkJX19SRUcoMHg5MDA1MDAwNCkgIC8qIElDIE1hc2sgUmVnLiAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSUNMUgkJX19SRUcoMHg5MDA1MDAwOCkgIC8qIElDIExldmVsIFJlZy4gICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSUNDUgkJX19SRUcoMHg5MDA1MDAwQykgIC8qIElDIENvbnRyb2wgUmVnLiAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSUNGUAkJX19SRUcoMHg5MDA1MDAxMCkgIC8qIElDIEZJUSBQZW5kaW5nIHJlZy4gICAgICAgICAgICAgKi8KKyNkZWZpbmUgSUNQUgkJX19SRUcoMHg5MDA1MDAyMCkgIC8qIElDIFBlbmRpbmcgUmVnLiAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBJQ19HUElPKE5iKQkgICAgICAgIAkvKiBHUElPIFswLi4xMF0gICAgICAgICAgICAgICAgICAgICovIFwKKyAgICAgICAgICAgICAgICAJKDB4MDAwMDAwMDEgPDwgKE5iKSkKKyNkZWZpbmUgSUNfR1BJTzAJSUNfR1BJTyAoMCkJLyogR1BJTyAgWzBdICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJQ19HUElPMQlJQ19HUElPICgxKQkvKiBHUElPICBbMV0gICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIElDX0dQSU8yCUlDX0dQSU8gKDIpCS8qIEdQSU8gIFsyXSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSUNfR1BJTzMJSUNfR1BJTyAoMykJLyogR1BJTyAgWzNdICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJQ19HUElPNAlJQ19HUElPICg0KQkvKiBHUElPICBbNF0gICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIElDX0dQSU81CUlDX0dQSU8gKDUpCS8qIEdQSU8gIFs1XSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSUNfR1BJTzYJSUNfR1BJTyAoNikJLyogR1BJTyAgWzZdICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJQ19HUElPNwlJQ19HUElPICg3KQkvKiBHUElPICBbN10gICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIElDX0dQSU84CUlDX0dQSU8gKDgpCS8qIEdQSU8gIFs4XSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSUNfR1BJTzkJSUNfR1BJTyAoOSkJLyogR1BJTyAgWzldICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJQ19HUElPMTAJSUNfR1BJTyAoMTApCS8qIEdQSU8gWzEwXSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSUNfR1BJTzExXzI3CTB4MDAwMDA4MDAJLyogR1BJTyBbMTE6MjddIChPUmVkKSAgICAgICAgICAgICAqLworI2RlZmluZSBJQ19MQ0QgIAkweDAwMDAxMDAwCS8qIExDRCBjb250cm9sbGVyICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSUNfU2VyMFVEQwkweDAwMDAyMDAwCS8qIFNlci4gcG9ydCAwIFVEQyAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSUNfU2VyMVNETEMJMHgwMDAwNDAwMAkvKiBTZXIuIHBvcnQgMSBTRExDICAgICAgICAgICAgICAgICovCisjZGVmaW5lIElDX1NlcjFVQVJUCTB4MDAwMDgwMDAJLyogU2VyLiBwb3J0IDEgVUFSVCAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJQ19TZXIySUNQCTB4MDAwMTAwMDAJLyogU2VyLiBwb3J0IDIgSUNQICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJQ19TZXIzVUFSVAkweDAwMDIwMDAwCS8qIFNlci4gcG9ydCAzIFVBUlQgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSUNfU2VyNE1DUAkweDAwMDQwMDAwCS8qIFNlci4gcG9ydCA0IE1DUCAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSUNfU2VyNFNTUAkweDAwMDgwMDAwCS8qIFNlci4gcG9ydCA0IFNTUCAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSUNfRE1BKE5iKQkgICAgICAgIAkvKiBETUEgY29udHJvbGxlciBjaGFubmVsIFswLi41XSAgICovIFwKKyAgICAgICAgICAgICAgICAJKDB4MDAxMDAwMDAgPDwgKE5iKSkKKyNkZWZpbmUgSUNfRE1BMCAJSUNfRE1BICgwKQkvKiBETUEgY29udHJvbGxlciBjaGFubmVsIDAgICAgICAgICovCisjZGVmaW5lIElDX0RNQTEgCUlDX0RNQSAoMSkJLyogRE1BIGNvbnRyb2xsZXIgY2hhbm5lbCAxICAgICAgICAqLworI2RlZmluZSBJQ19ETUEyIAlJQ19ETUEgKDIpCS8qIERNQSBjb250cm9sbGVyIGNoYW5uZWwgMiAgICAgICAgKi8KKyNkZWZpbmUgSUNfRE1BMyAJSUNfRE1BICgzKQkvKiBETUEgY29udHJvbGxlciBjaGFubmVsIDMgICAgICAgICovCisjZGVmaW5lIElDX0RNQTQgCUlDX0RNQSAoNCkJLyogRE1BIGNvbnRyb2xsZXIgY2hhbm5lbCA0ICAgICAgICAqLworI2RlZmluZSBJQ19ETUE1IAlJQ19ETUEgKDUpCS8qIERNQSBjb250cm9sbGVyIGNoYW5uZWwgNSAgICAgICAgKi8KKyNkZWZpbmUgSUNfT1NUKE5iKQkgICAgICAgIAkvKiBPUyBUaW1lciBtYXRjaCBbMC4uM10gICAgICAgICAgICovIFwKKyAgICAgICAgICAgICAgICAJKDB4MDQwMDAwMDAgPDwgKE5iKSkKKyNkZWZpbmUgSUNfT1NUMCAJSUNfT1NUICgwKQkvKiBPUyBUaW1lciBtYXRjaCAwICAgICAgICAgICAgICAgICovCisjZGVmaW5lIElDX09TVDEgCUlDX09TVCAoMSkJLyogT1MgVGltZXIgbWF0Y2ggMSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJQ19PU1QyIAlJQ19PU1QgKDIpCS8qIE9TIFRpbWVyIG1hdGNoIDIgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSUNfT1NUMyAJSUNfT1NUICgzKQkvKiBPUyBUaW1lciBtYXRjaCAzICAgICAgICAgICAgICAgICovCisjZGVmaW5lIElDX1JUQzFIegkweDQwMDAwMDAwCS8qIFJUQyAxIEh6IGNsb2NrICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSUNfUlRDQWxybQkweDgwMDAwMDAwCS8qIFJUQyBBbGFybSAgICAgICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBJQ0xSX0lSUQkwICAgICAgIAkvKiBJbnRlcnJ1cHQgUmVRdWVzdCAgICAgICAgICAgICAgICovCisjZGVmaW5lIElDTFJfRklRCTEgICAgICAgCS8qIEZhc3QgSW50ZXJydXB0IHJlUXVlc3QgICAgICAgICAgKi8KKworI2RlZmluZSBJQ0NSX0RJTQkweDAwMDAwMDAxCS8qIERpc2FibGUgSWRsZS1tb2RlIGludGVycnVwdCAgICAgKi8KKyAgICAgICAgICAgICAgICAJICAgICAgICAJLyogTWFzayAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJQ0NSX0lkbGVBbGxJbnQJKElDQ1JfRElNKjApCS8qICBJZGxlLW1vZGUgQWxsIEludGVycnVwdCBlbmFibGUgKi8KKyAgICAgICAgICAgICAgICAJICAgICAgICAJLyogIChJQ01SIGlnbm9yZWQpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJQ0NSX0lkbGVNc2tJbnQJKElDQ1JfRElNKjEpCS8qICBJZGxlLW1vZGUgbm9uLU1hc2tlZCBJbnRlcnJ1cHQgKi8KKyAgICAgICAgICAgICAgICAJICAgICAgICAJLyogIGVuYWJsZSAoSUNNUiB1c2VkKSAgICAgICAgICAgICAqLworCisKKy8qCisgKiBQZXJpcGhlcmFsIFBpbiBDb250cm9sbGVyIChQUEMpIGNvbnRyb2wgcmVnaXN0ZXJzCisgKgorICogUmVnaXN0ZXJzCisgKiAgICBQUERSICAgICAgCVBlcmlwaGVyYWwgUGluIENvbnRyb2xsZXIgKFBQQykgUGluIERpcmVjdGlvbgorICogICAgICAgICAgICAgIAlSZWdpc3RlciAocmVhZC93cml0ZSkuCisgKiAgICBQUFNSICAgICAgCVBlcmlwaGVyYWwgUGluIENvbnRyb2xsZXIgKFBQQykgUGluIFN0YXRlIFJlZ2lzdGVyCisgKiAgICAgICAgICAgICAgCShyZWFkL3dyaXRlKS4KKyAqICAgIFBQQVIgICAgICAJUGVyaXBoZXJhbCBQaW4gQ29udHJvbGxlciAoUFBDKSBQaW4gQXNzaWdubWVudAorICogICAgICAgICAgICAgIAlSZWdpc3RlciAocmVhZC93cml0ZSkuCisgKiAgICBQU0RSICAgICAgCVBlcmlwaGVyYWwgUGluIENvbnRyb2xsZXIgKFBQQykgU2xlZXAtbW9kZSBwaW4KKyAqICAgICAgICAgICAgICAJRGlyZWN0aW9uIFJlZ2lzdGVyIChyZWFkL3dyaXRlKS4KKyAqICAgIFBQRlIgICAgICAJUGVyaXBoZXJhbCBQaW4gQ29udHJvbGxlciAoUFBDKSBQaW4gRmxhZyBSZWdpc3RlcgorICogICAgICAgICAgICAgIAkocmVhZCkuCisgKi8KKworI2RlZmluZSBQUERSCQlfX1JFRygweDkwMDYwMDAwKSAgLyogUFBDIFBpbiBEaXJlY3Rpb24gUmVnLiAgICAgICAgICAqLworI2RlZmluZSBQUFNSCQlfX1JFRygweDkwMDYwMDA0KSAgLyogUFBDIFBpbiBTdGF0ZSBSZWcuICAgICAgICAgICAgICAqLworI2RlZmluZSBQUEFSCQlfX1JFRygweDkwMDYwMDA4KSAgLyogUFBDIFBpbiBBc3NpZ25tZW50IFJlZy4gICAgICAgICAqLworI2RlZmluZSBQU0RSCQlfX1JFRygweDkwMDYwMDBDKSAgLyogUFBDIFNsZWVwLW1vZGUgcGluIERpcmVjdGlvbiBSZWcuICovCisjZGVmaW5lIFBQRlIJCV9fUkVHKDB4OTAwNjAwMTApICAvKiBQUEMgUGluIEZsYWcgUmVnLiAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUFBDX0xERChOYikJICAgICAgICAJLyogTENEIERhdGEgWzAuLjddICAgICAgICAgICAgICAgICAqLyBcCisgICAgICAgICAgICAgICAgCSgweDAwMDAwMDAxIDw8IChOYikpCisjZGVmaW5lIFBQQ19MREQwCVBQQ19MREQgKDApCS8qIExDRCBEYXRhIFswXSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUFBDX0xERDEJUFBDX0xERCAoMSkJLyogTENEIERhdGEgWzFdICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQUENfTEREMglQUENfTEREICgyKQkvKiBMQ0QgRGF0YSBbMl0gICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBQQ19MREQzCVBQQ19MREQgKDMpCS8qIExDRCBEYXRhIFszXSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUFBDX0xERDQJUFBDX0xERCAoNCkJLyogTENEIERhdGEgWzRdICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQUENfTERENQlQUENfTEREICg1KQkvKiBMQ0QgRGF0YSBbNV0gICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBQQ19MREQ2CVBQQ19MREQgKDYpCS8qIExDRCBEYXRhIFs2XSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUFBDX0xERDcJUFBDX0xERCAoNykJLyogTENEIERhdGEgWzddICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQUENfTF9QQ0xLCTB4MDAwMDAxMDAJLyogTENEIFBpeGVsIENMb2NLICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQUENfTF9MQ0xLCTB4MDAwMDAyMDAJLyogTENEIExpbmUgQ0xvY0sgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQUENfTF9GQ0xLCTB4MDAwMDA0MDAJLyogTENEIEZyYW1lIENMb2NLICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQUENfTF9CSUFTCTB4MDAwMDA4MDAJLyogTENEIEFDIEJJQVMgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBzZXIuIHBvcnQgMTogICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBQQ19UWEQxCTB4MDAwMDEwMDAJLyogIFNETEMvVUFSVCBUcmFuc21pdCBEYXRhIDEgICAgICAqLworI2RlZmluZSBQUENfUlhEMQkweDAwMDAyMDAwCS8qICBTRExDL1VBUlQgUmVjZWl2ZSBEYXRhIDEgICAgICAgKi8KKyAgICAgICAgICAgICAgICAJICAgICAgICAJLyogc2VyLiBwb3J0IDI6ICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQUENfVFhEMgkweDAwMDA0MDAwCS8qICBJUEMgVHJhbnNtaXQgRGF0YSAyICAgICAgICAgICAgKi8KKyNkZWZpbmUgUFBDX1JYRDIJMHgwMDAwODAwMAkvKiAgSVBDIFJlY2VpdmUgRGF0YSAyICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIHNlci4gcG9ydCAzOiAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUFBDX1RYRDMJMHgwMDAxMDAwMAkvKiAgVUFSVCBUcmFuc21pdCBEYXRhIDMgICAgICAgICAgICovCisjZGVmaW5lIFBQQ19SWEQzCTB4MDAwMjAwMDAJLyogIFVBUlQgUmVjZWl2ZSBEYXRhIDMgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBzZXIuIHBvcnQgNDogICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBQQ19UWEQ0CTB4MDAwNDAwMDAJLyogIE1DUC9TU1AgVHJhbnNtaXQgRGF0YSA0ICAgICAgICAqLworI2RlZmluZSBQUENfUlhENAkweDAwMDgwMDAwCS8qICBNQ1AvU1NQIFJlY2VpdmUgRGF0YSA0ICAgICAgICAgKi8KKyNkZWZpbmUgUFBDX1NDTEsJMHgwMDEwMDAwMAkvKiAgTUNQL1NTUCBTYW1wbGUgQ0xvY0sgICAgICAgICAgICovCisjZGVmaW5lIFBQQ19TRlJNCTB4MDAyMDAwMDAJLyogIE1DUC9TU1AgU2FtcGxlIEZSYU1lICAgICAgICAgICAqLworCisjZGVmaW5lIFBQRFJfSW4gCTAgICAgICAgCS8qIElucHV0ICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUFBEUl9PdXQJMSAgICAgICAJLyogT3V0cHV0ICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIHNlci4gcG9ydCAxOiAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUFBBUl9VUFIJMHgwMDAwMTAwMAkvKiAgVUFSVCBQaW4gUmVhc3NpZ25tZW50ICAgICAgICAgICovCisjZGVmaW5lIFBQQVJfVUFSVFRSCShQUEFSX1VQUiowKQkvKiAgIFVBUlQgb24gVFhEXzEgJiBSWERfMSAgICAgICAgICovCisjZGVmaW5lIFBQQVJfVUFSVEdQSU8JKFBQQVJfVVBSKjEpCS8qICAgVUFSVCBvbiBHUElPIFsxNDoxNV0gICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAJICAgICAgICAJLyogc2VyLiBwb3J0IDQ6ICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQUEFSX1NQUgkweDAwMDQwMDAwCS8qICBTU1AgUGluIFJlYXNzaWdubWVudCAgICAgICAgICAgKi8KKyNkZWZpbmUgUFBBUl9TU1BUUlNTCShQUEFSX1NQUiowKQkvKiAgIFNTUCBvbiBUWERfQywgUlhEX0MsIFNDTEtfQywgICovCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qICAgJiBTRlJNX0MgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUFBBUl9TU1BHUElPCShQUEFSX1NQUioxKQkvKiAgIFNTUCBvbiBHUElPIFsxMDoxM10gICAgICAgICAgICovCisKKyNkZWZpbmUgUFNEUl9PdXRMCTAgICAgICAgCS8qIE91dHB1dCBMb3cgaW4gc2xlZXAgbW9kZSAgICAgICAgKi8KKyNkZWZpbmUgUFNEUl9GbHQJMSAgICAgICAJLyogRmxvYXRpbmcgKGlucHV0KSBpbiBzbGVlcCBtb2RlICAqLworCisjZGVmaW5lIFBQRlJfTENECTB4MDAwMDAwMDEJLyogTENEIGNvbnRyb2xsZXIgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQUEZSX1NQMVRYCTB4MDAwMDEwMDAJLyogU2VyLiBQb3J0IDEgU0RMQy9VQVJUIFRyYW5zbWl0ICAqLworI2RlZmluZSBQUEZSX1NQMVJYCTB4MDAwMDIwMDAJLyogU2VyLiBQb3J0IDEgU0RMQy9VQVJUIFJlY2VpdmUgICAqLworI2RlZmluZSBQUEZSX1NQMlRYCTB4MDAwMDQwMDAJLyogU2VyLiBQb3J0IDIgSUNQIFRyYW5zbWl0ICAgICAgICAqLworI2RlZmluZSBQUEZSX1NQMlJYCTB4MDAwMDgwMDAJLyogU2VyLiBQb3J0IDIgSUNQIFJlY2VpdmUgICAgICAgICAqLworI2RlZmluZSBQUEZSX1NQM1RYCTB4MDAwMTAwMDAJLyogU2VyLiBQb3J0IDMgVUFSVCBUcmFuc21pdCAgICAgICAqLworI2RlZmluZSBQUEZSX1NQM1JYCTB4MDAwMjAwMDAJLyogU2VyLiBQb3J0IDMgVUFSVCBSZWNlaXZlICAgICAgICAqLworI2RlZmluZSBQUEZSX1NQNAkweDAwMDQwMDAwCS8qIFNlci4gUG9ydCA0IE1DUC9TU1AgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUFBGUl9QZXJFbgkwICAgICAgIAkvKiBQZXJpcGhlcmFsIEVuYWJsZWQgICAgICAgICAgICAgICovCisjZGVmaW5lIFBQRlJfUFBDRW4JMSAgICAgICAJLyogUFBDIEVuYWJsZWQgICAgICAgICAgICAgICAgICAgICAqLworCisKKy8qCisgKiBEeW5hbWljIFJhbmRvbS1BY2Nlc3MgTWVtb3J5IChEUkFNKSBjb250cm9sIHJlZ2lzdGVycworICoKKyAqIFJlZ2lzdGVycworICogICAgTURDTkZHICAgIAlNZW1vcnkgc3lzdGVtOiBEeW5hbWljIFJhbmRvbS1BY2Nlc3MgTWVtb3J5IChEUkFNKQorICogICAgICAgICAgICAgIAlDb05GaUd1cmF0aW9uIHJlZ2lzdGVyIChyZWFkL3dyaXRlKS4KKyAqICAgIE1EQ0FTMCAgICAJTWVtb3J5IHN5c3RlbTogRHluYW1pYyBSYW5kb20tQWNjZXNzIE1lbW9yeSAoRFJBTSkKKyAqICAgICAgICAgICAgICAJQ29sdW1uIEFkZHJlc3MgU3Ryb2JlIChDQVMpIHNoaWZ0IHJlZ2lzdGVyIDAKKyAqICAgICAgICAgICAgICAJKHJlYWQvd3JpdGUpLgorICogICAgTURDQVMxICAgIAlNZW1vcnkgc3lzdGVtOiBEeW5hbWljIFJhbmRvbS1BY2Nlc3MgTWVtb3J5IChEUkFNKQorICogICAgICAgICAgICAgIAlDb2x1bW4gQWRkcmVzcyBTdHJvYmUgKENBUykgc2hpZnQgcmVnaXN0ZXIgMQorICogICAgICAgICAgICAgIAkocmVhZC93cml0ZSkuCisgKiAgICBNRENBUzIgICAgCU1lbW9yeSBzeXN0ZW06IER5bmFtaWMgUmFuZG9tLUFjY2VzcyBNZW1vcnkgKERSQU0pCisgKiAgICAgICAgICAgICAgCUNvbHVtbiBBZGRyZXNzIFN0cm9iZSAoQ0FTKSBzaGlmdCByZWdpc3RlciAyCisgKiAgICAgICAgICAgICAgCShyZWFkL3dyaXRlKS4KKyAqCisgKiBDbG9ja3MKKyAqICAgIGZjcHUsIFRjcHUJRnJlcXVlbmN5LCBwZXJpb2Qgb2YgdGhlIENQVSBjb3JlIGNsb2NrIChDQ0xLKS4KKyAqICAgIGZtZW0sIFRtZW0JRnJlcXVlbmN5LCBwZXJpb2Qgb2YgdGhlIG1lbW9yeSBjbG9jayAoZm1lbSA9IGZjcHUvMikuCisgKiAgICBmY2FzLCBUY2FzCUZyZXF1ZW5jeSwgcGVyaW9kIG9mIHRoZSBEUkFNIENBUyBzaGlmdCByZWdpc3RlcnMuCisgKi8KKworI2RlZmluZSBNRENORkcJCV9fUkVHKDB4QTAwMDAwMDApICAvKiAgRFJBTSBDb05GaUd1cmF0aW9uIHJlZy4gKi8KKyNkZWZpbmUgTURDQVMwCQlfX1JFRygweEEwMDAwMDA0KSAgLyogRFJBTSBDQVMgc2hpZnQgcmVnLiAwICovCisjZGVmaW5lIE1EQ0FTMQkJX19SRUcoMHhBMDAwMDAwOCkgIC8qIERSQU0gQ0FTIHNoaWZ0IHJlZy4gMSAqLworI2RlZmluZSBNRENBUzIJCV9fUkVHKDB4QTAwMDAwMGMpICAvKiBEUkFNIENBUyBzaGlmdCByZWcuIDIgKi8KKworLyogU0ExMTAwIE1EQ05GRyB2YWx1ZXMgKi8KKyNkZWZpbmUgTURDTkZHX0RFKE5iKQkgICAgICAgIAkvKiBEUkFNIEVuYWJsZSBiYW5rIFswLi4zXSAgICAgICAgICovIFwKKyAgICAgICAgICAgICAgICAJKDB4MDAwMDAwMDEgPDwgKE5iKSkKKyNkZWZpbmUgTURDTkZHX0RFMAlNRENORkdfREUgKDApCS8qIERSQU0gRW5hYmxlIGJhbmsgMCAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTURDTkZHX0RFMQlNRENORkdfREUgKDEpCS8qIERSQU0gRW5hYmxlIGJhbmsgMSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTURDTkZHX0RFMglNRENORkdfREUgKDIpCS8qIERSQU0gRW5hYmxlIGJhbmsgMiAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTURDTkZHX0RFMwlNRENORkdfREUgKDMpCS8qIERSQU0gRW5hYmxlIGJhbmsgMyAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTURDTkZHX0RSQUMJRmxkICgyLCA0KQkvKiBEUkFNIFJvdyBBZGRyZXNzIENvdW50IC0gOSAgICAgICovCisjZGVmaW5lIE1EQ05GR19Sb3dBZGQoQWRkKSAgICAgIAkvKiAgUm93IEFkZHJlc3MgY291bnQgWzkuLjEyXSAgICAgICovIFwKKyAgICAgICAgICAgICAgICAJKCgoQWRkKSAtIDkpIDw8IEZTaGZ0IChNRENORkdfRFJBQykpCisjZGVmaW5lIE1EQ05GR19DREIyCTB4MDAwMDAwNDAJLyogc2hpZnQgcmVnLiBDbG9jayBEaXZpZGUgQnkgMiAgICAqLworICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAoZmNhcyA9IGZjcHUvMikgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIE1EQ05GR19UUlAJRmxkICg0LCA3KQkvKiBUaW1lIFJBUyBQcmUtY2hhcmdlIC0gMSBbVG1lbV0gICovCisjZGVmaW5lIE1EQ05GR19QckNocmcoVGNwdSkgICAgIAkvKiAgUHJlLUNoYXJnZSB0aW1lIFsyLi4zMiBUY3B1XSAgICovIFwKKyAgICAgICAgICAgICAgICAJKCgoVGNwdSkgLSAyKS8yIDw8IEZTaGZ0IChNRENORkdfVFJQKSkKKyNkZWZpbmUgTURDTkZHX0NlaWxQckNocmcoVGNwdSkgCS8qICBDZWlsLiBvZiBQckNocmcgWzIuLjMyIFRjcHVdICAgKi8gXAorICAgICAgICAgICAgICAgIAkoKChUY3B1KSAtIDEpLzIgPDwgRlNoZnQgKE1EQ05GR19UUlApKQorI2RlZmluZSBNRENORkdfVFJBU1IJRmxkICg0LCAxMSkJLyogVGltZSBSQVMgUmVmcmVzaCAtIDEgW1RtZW1dICAgICAqLworI2RlZmluZSBNRENORkdfUmVmKFRjcHUpICAgICAgICAJLyogIFJlZnJlc2ggdGltZSBbMi4uMzIgVGNwdV0gICAgICAqLyBcCisgICAgICAgICAgICAgICAgCSgoKFRjcHUpIC0gMikvMiA8PCBGU2hmdCAoTURDTkZHX1RSQVNSKSkKKyNkZWZpbmUgTURDTkZHX0NlaWxSZWYoVGNwdSkgICAgCS8qICBDZWlsLiBvZiBSZWYgWzIuLjMyIFRjcHVdICAgICAgKi8gXAorICAgICAgICAgICAgICAgIAkoKChUY3B1KSAtIDEpLzIgPDwgRlNoZnQgKE1EQ05GR19UUkFTUikpCisjZGVmaW5lIE1EQ05GR19UREwJRmxkICgyLCAxNSkJLyogVGltZSBEYXRhIExhdGNoIFtUY3B1XSAgICAgICAgICAqLworI2RlZmluZSBNRENORkdfRGF0YUx0Y2goVGNwdSkgICAJLyogIERhdGEgTGF0Y2ggZGVsYXkgWzAuLjMgVGNwdV0gICAqLyBcCisgICAgICAgICAgICAgICAgCSgoVGNwdSkgPDwgRlNoZnQgKE1EQ05GR19UREwpKQorI2RlZmluZSBNRENORkdfRFJJCUZsZCAoMTUsIDE3KQkvKiBtaW4uIERSQU0gUmVmcmVzaCBJbnRlcnZhbC80ICAgICovCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIFtUbWVtXSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTURDTkZHX1JlZkludChUY3B1KSAgICAgCS8qICBtaW4uIFJlZnJlc2ggSW50ZXJ2YWwgICAgICAgICAgKi8gXAorICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAgWzAuLjI2MjEzNiBUY3B1XSAgICAgICAgICAgICAgICovIFwKKyAgICAgICAgICAgICAgICAJKChUY3B1KS84IDw8IEZTaGZ0IChNRENORkdfRFJJKSkKKworLyogU0ExMTEwIE1EQ05GRyB2YWx1ZXMgKi8KKyNkZWZpbmUgTURDTkZHX1NBMTExMF9ERTAJMHgwMDAwMDAwMQkvKiBEUkFNIEVuYWJsZSBiYW5rIDAgICAgICAgICovCisjZGVmaW5lIE1EQ05GR19TQTExMTBfREUxCTB4MDAwMDAwMDIgCS8qIERSQU0gRW5hYmxlIGJhbmsgMSAgICAgICAgKi8KKyNkZWZpbmUgTURDTkZHX1NBMTExMF9EVElNMAkweDAwMDAwMDA0CS8qIERSQU0gdGltaW5nIHR5cGUgMC8xICAgICAgKi8KKyNkZWZpbmUgTURDTkZHX1NBMTExMF9EV0lEMAkweDAwMDAwMDA4CS8qIERSQU0gYnVzIHdpZHRoIDAvMSAgICAgICAgKi8KKyNkZWZpbmUgTURDTkZHX1NBMTExMF9EUkFDMAlGbGQoMywgNCkJLyogRFJBTSByb3cgYWRkciBiaXQgY291bnQgICAqLworICAgICAgICAgICAgICAgIAkgICAgICAgIAkJLyogYmFuayAwLzEgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBNRENORkdfU0ExMTEwX0NEQjIwCTB4MDAwMDAwODAJLyogTWVtIENsb2NrIGRpdmlkZSBieSAyIDAvMSAqLworI2RlZmluZSBNRENORkdfU0ExMTEwX1RSUDAJRmxkKDMsIDgpCS8qIFJBUyBwcmVjaGFyZ2UgMC8xICAgICAgICAgKi8KKyNkZWZpbmUgTURDTkZHX1NBMTExMF9UREwwCUZsZCgyLCAxMikJLyogRGF0YSBpbnB1dCBsYXRjaCBhZnRlciBDQVMqLworICAgICAgICAgICAgICAgIAkgICAgICAgIAkJLyogZGVhc3NlcnRpb24gMC8xICAgICAgICAgICAqLworI2RlZmluZSBNRENORkdfU0ExMTEwX1RXUjAJRmxkKDIsIDE0KQkvKiBTRFJBTSB3cml0ZSByZWNvdmVyeSAwLzEgICovCisjZGVmaW5lIE1EQ05GR19TQTExMTBfREUyCTB4MDAwMTAwMDAJLyogRFJBTSBFbmFibGUgYmFuayAwICAgICAgICAqLworI2RlZmluZSBNRENORkdfU0ExMTEwX0RFMwkweDAwMDIwMDAwIAkvKiBEUkFNIEVuYWJsZSBiYW5rIDEgICAgICAgICovCisjZGVmaW5lIE1EQ05GR19TQTExMTBfRFRJTTIJMHgwMDA0MDAwMAkvKiBEUkFNIHRpbWluZyB0eXBlIDAvMSAgICAgICovCisjZGVmaW5lIE1EQ05GR19TQTExMTBfRFdJRDIJMHgwMDA4MDAwMAkvKiBEUkFNIGJ1cyB3aWR0aCAwLzEgICAgICAgICovCisjZGVmaW5lIE1EQ05GR19TQTExMTBfRFJBQzIJRmxkKDMsIDIwKQkvKiBEUkFNIHJvdyBhZGRyIGJpdCBjb3VudCAgICovCisgICAgICAgICAgICAgICAgCSAgICAgICAgCQkvKiBiYW5rIDAvMSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIE1EQ05GR19TQTExMTBfQ0RCMjIJMHgwMDgwMDAwMAkvKiBNZW0gQ2xvY2sgZGl2aWRlIGJ5IDIgMC8xICovCisjZGVmaW5lIE1EQ05GR19TQTExMTBfVFJQMglGbGQoMywgMjQpCS8qIFJBUyBwcmVjaGFyZ2UgMC8xICAgICAgICAgKi8KKyNkZWZpbmUgTURDTkZHX1NBMTExMF9UREwyCUZsZCgyLCAyOCkJLyogRGF0YSBpbnB1dCBsYXRjaCBhZnRlciBDQVMqLworICAgICAgICAgICAgICAgIAkgICAgICAgIAkJLyogZGVhc3NlcnRpb24gMC8xICAgICAgICAgICAqLworI2RlZmluZSBNRENORkdfU0ExMTEwX1RXUjIJRmxkKDIsIDMwKQkvKiBTRFJBTSB3cml0ZSByZWNvdmVyeSAwLzEgICovCisKKworLyoKKyAqIFN0YXRpYyBtZW1vcnkgY29udHJvbCByZWdpc3RlcnMKKyAqCisgKiBSZWdpc3RlcnMKKyAqICAgIE1TQzAgICAgICAJTWVtb3J5IHN5c3RlbTogU3RhdGljIG1lbW9yeSBDb250cm9sIHJlZ2lzdGVyIDAKKyAqICAgICAgICAgICAgICAJKHJlYWQvd3JpdGUpLgorICogICAgTVNDMSAgICAgIAlNZW1vcnkgc3lzdGVtOiBTdGF0aWMgbWVtb3J5IENvbnRyb2wgcmVnaXN0ZXIgMQorICogICAgICAgICAgICAgIAkocmVhZC93cml0ZSkuCisgKgorICogQ2xvY2tzCisgKiAgICBmY3B1LCBUY3B1CUZyZXF1ZW5jeSwgcGVyaW9kIG9mIHRoZSBDUFUgY29yZSBjbG9jayAoQ0NMSykuCisgKiAgICBmbWVtLCBUbWVtCUZyZXF1ZW5jeSwgcGVyaW9kIG9mIHRoZSBtZW1vcnkgY2xvY2sgKGZtZW0gPSBmY3B1LzIpLgorICovCisKKyNkZWZpbmUgTVNDMAkJX19SRUcoMHhhMDAwMDAxMCkgIC8qIFN0YXRpYyBtZW1vcnkgQ29udHJvbCByZWcuIDAgKi8KKyNkZWZpbmUgTVNDMQkJX19SRUcoMHhhMDAwMDAxNCkgIC8qIFN0YXRpYyBtZW1vcnkgQ29udHJvbCByZWcuIDEgKi8KKyNkZWZpbmUgTVNDMgkJX19SRUcoMHhhMDAwMDAyYykgIC8qIFN0YXRpYyBtZW1vcnkgQ29udHJvbCByZWcuIDIsIG5vdCBjb250aWd1b3VzICAgKi8KKworI2RlZmluZSBNU0NfQm5rKE5iKQkgICAgICAgIAkvKiBzdGF0aWMgbWVtb3J5IEJhbmsgWzAuLjNdICAgICAgICovIFwKKyAgICAgICAgICAgICAgICAJRmxkICgxNiwgKChOYikgTW9kdWxvIDIpKjE2KQorI2RlZmluZSBNU0MwX0JuazAJTVNDX0JuayAoMCkJLyogc3RhdGljIG1lbW9yeSBCYW5rIDAgICAgICAgICAgICAqLworI2RlZmluZSBNU0MwX0JuazEJTVNDX0JuayAoMSkJLyogc3RhdGljIG1lbW9yeSBCYW5rIDEgICAgICAgICAgICAqLworI2RlZmluZSBNU0MxX0JuazIJTVNDX0JuayAoMikJLyogc3RhdGljIG1lbW9yeSBCYW5rIDIgICAgICAgICAgICAqLworI2RlZmluZSBNU0MxX0JuazMJTVNDX0JuayAoMykJLyogc3RhdGljIG1lbW9yeSBCYW5rIDMgICAgICAgICAgICAqLworCisjZGVmaW5lIE1TQ19SVCAgCUZsZCAoMiwgMCkJLyogUk9NL3N0YXRpYyBtZW1vcnkgVHlwZSAgICAgICAgICAqLworI2RlZmluZSBNU0NfTm9uQnJzdAkgICAgICAgIAkvKiAgTm9uLUJ1cnN0IHN0YXRpYyBtZW1vcnkgICAgICAgICovIFwKKyAgICAgICAgICAgICAgICAJKDAgPDwgRlNoZnQgKE1TQ19SVCkpCisjZGVmaW5lIE1TQ19TUkFNCSAgICAgICAgCS8qICAzMi1iaXQgYnl0ZS13cml0YWJsZSBTUkFNICAgICAgKi8gXAorICAgICAgICAgICAgICAgIAkoMSA8PCBGU2hmdCAoTVNDX1JUKSkKKyNkZWZpbmUgTVNDX0Jyc3Q0CSAgICAgICAgCS8qICBCdXJzdC1vZi00IHN0YXRpYyBtZW1vcnkgICAgICAgKi8gXAorICAgICAgICAgICAgICAgIAkoMiA8PCBGU2hmdCAoTVNDX1JUKSkKKyNkZWZpbmUgTVNDX0Jyc3Q4CSAgICAgICAgCS8qICBCdXJzdC1vZi04IHN0YXRpYyBtZW1vcnkgICAgICAgKi8gXAorICAgICAgICAgICAgICAgIAkoMyA8PCBGU2hmdCAoTVNDX1JUKSkKKyNkZWZpbmUgTVNDX1JCVyAJMHgwMDA0ICAJLyogUk9NL3N0YXRpYyBtZW1vcnkgQnVzIFdpZHRoICAgICAqLworI2RlZmluZSBNU0NfMzJCaXRTdE1lbQkoTVNDX1JCVyowKQkvKiAgMzItQml0IFN0YXRpYyBNZW1vcnkgICAgICAgICAgICovCisjZGVmaW5lIE1TQ18xNkJpdFN0TWVtCShNU0NfUkJXKjEpCS8qICAxNi1CaXQgU3RhdGljIE1lbW9yeSAgICAgICAgICAgKi8KKyNkZWZpbmUgTVNDX1JERiAJRmxkICg1LCAzKQkvKiBST00vc3RhdGljIG1lbW9yeSByZWFkIERlbGF5ICAgICovCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIEZpcnN0IGFjY2VzcyAtIDEoLjUpIFtUbWVtXSAgICAgKi8KKyNkZWZpbmUgTVNDXzFzdFJkQWNjKFRjcHUpICAgICAgCS8qICAxc3QgUmVhZCBBY2Nlc3MgdGltZSAoYnVyc3QgICAgKi8gXAorICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAgc3RhdGljIG1lbW9yeSkgWzMuLjY1IFRjcHVdICAgICovIFwKKyAgICAgICAgICAgICAgICAJKCgoKFRjcHUpIC0gMykvMikgPDwgRlNoZnQgKE1TQ19SREYpKQorI2RlZmluZSBNU0NfQ2VpbDFzdFJkQWNjKFRjcHUpICAJLyogIENlaWwuIG9mIDFzdFJkQWNjIFszLi42NSBUY3B1XSAqLyBcCisgICAgICAgICAgICAgICAgCSgoKChUY3B1KSAtIDIpLzIpIDw8IEZTaGZ0IChNU0NfUkRGKSkKKyNkZWZpbmUgTVNDX1JkQWNjKFRjcHUpCSAgICAgICAgCS8qICBSZWFkIEFjY2VzcyB0aW1lIChub24tYnVyc3QgICAgKi8gXAorICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAgc3RhdGljIG1lbW9yeSkgWzIuLjY0IFRjcHVdICAgICovIFwKKyAgICAgICAgICAgICAgICAJKCgoKFRjcHUpIC0gMikvMikgPDwgRlNoZnQgKE1TQ19SREYpKQorI2RlZmluZSBNU0NfQ2VpbFJkQWNjKFRjcHUpICAgICAJLyogIENlaWwuIG9mIFJkQWNjIFsyLi42NCBUY3B1XSAgICAqLyBcCisgICAgICAgICAgICAgICAgCSgoKChUY3B1KSAtIDEpLzIpIDw8IEZTaGZ0IChNU0NfUkRGKSkKKyNkZWZpbmUgTVNDX1JETiAJRmxkICg1LCA4KQkvKiBST00vc3RhdGljIG1lbW9yeSByZWFkIERlbGF5ICAgICovCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIE5leHQgYWNjZXNzIC0gMSBbVG1lbV0gICAgICAgICAgKi8KKyNkZWZpbmUgTVNDX054dFJkQWNjKFRjcHUpICAgICAgCS8qICBOZXh0IFJlYWQgQWNjZXNzIHRpbWUgKGJ1cnN0ICAgKi8gXAorICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAgc3RhdGljIG1lbW9yeSkgWzIuLjY0IFRjcHVdICAgICovIFwKKyAgICAgICAgICAgICAgICAJKCgoKFRjcHUpIC0gMikvMikgPDwgRlNoZnQgKE1TQ19SRE4pKQorI2RlZmluZSBNU0NfQ2VpbE54dFJkQWNjKFRjcHUpICAJLyogIENlaWwuIG9mIE54dFJkQWNjIFsyLi42NCBUY3B1XSAqLyBcCisgICAgICAgICAgICAgICAgCSgoKChUY3B1KSAtIDEpLzIpIDw8IEZTaGZ0IChNU0NfUkROKSkKKyNkZWZpbmUgTVNDX1dyQWNjKFRjcHUpCSAgICAgICAgCS8qICBXcml0ZSBBY2Nlc3MgdGltZSAobm9uLWJ1cnN0ICAgKi8gXAorICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAgc3RhdGljIG1lbW9yeSkgWzIuLjY0IFRjcHVdICAgICovIFwKKyAgICAgICAgICAgICAgICAJKCgoKFRjcHUpIC0gMikvMikgPDwgRlNoZnQgKE1TQ19SRE4pKQorI2RlZmluZSBNU0NfQ2VpbFdyQWNjKFRjcHUpICAgICAJLyogIENlaWwuIG9mIFdyQWNjIFsyLi42NCBUY3B1XSAgICAqLyBcCisgICAgICAgICAgICAgICAgCSgoKChUY3B1KSAtIDEpLzIpIDw8IEZTaGZ0IChNU0NfUkROKSkKKyNkZWZpbmUgTVNDX1JSUiAJRmxkICgzLCAxMykJLyogUk9NL3N0YXRpYyBtZW1vcnkgUmVjb3ZlUnkgICAgICAqLworICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiB0aW1lLzIgW1RtZW1dICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIE1TQ19SZWMoVGNwdSkJICAgICAgICAJLyogIFJlY292ZXJ5IHRpbWUgWzAuLjI4IFRjcHVdICAgICAqLyBcCisgICAgICAgICAgICAgICAgCSgoKFRjcHUpLzQpIDw8IEZTaGZ0IChNU0NfUlJSKSkKKyNkZWZpbmUgTVNDX0NlaWxSZWMoVGNwdSkgICAgICAgCS8qICBDZWlsLiBvZiBSZWMgWzAuLjI4IFRjcHVdICAgICAgKi8gXAorICAgICAgICAgICAgICAgIAkoKCgoVGNwdSkgKyAzKS80KSA8PCBGU2hmdCAoTVNDX1JSUikpCisKKworLyoKKyAqIFBlcnNvbmFsIENvbXB1dGVyIE1lbW9yeSBDYXJkIEludGVybmF0aW9uYWwgQXNzb2NpYXRpb24gKFBDTUNJQSkgY29udHJvbAorICogcmVnaXN0ZXIKKyAqCisgKiBSZWdpc3RlcgorICogICAgTUVDUiAgICAgIAlNZW1vcnkgc3lzdGVtOiBFeHBhbnNpb24gbWVtb3J5IGJ1cyAoUENNQ0lBKQorICogICAgICAgICAgICAgIAlDb25maWd1cmF0aW9uIFJlZ2lzdGVyIChyZWFkL3dyaXRlKS4KKyAqCisgKiBDbG9ja3MKKyAqICAgIGZjcHUsIFRjcHUJRnJlcXVlbmN5LCBwZXJpb2Qgb2YgdGhlIENQVSBjb3JlIGNsb2NrIChDQ0xLKS4KKyAqICAgIGZtZW0sIFRtZW0JRnJlcXVlbmN5LCBwZXJpb2Qgb2YgdGhlIG1lbW9yeSBjbG9jayAoZm1lbSA9IGZjcHUvMikuCisgKiAgICBmYmNsaywgVGJjbGsJRnJlcXVlbmN5LCBwZXJpb2Qgb2YgdGhlIFBDTUNJQSBjbG9jayAoQkNMSykuCisgKi8KKworICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBNZW1vcnkgc3lzdGVtOiAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIE1FQ1IJCV9fUkVHKDB4QTAwMDAwMTgpICAvKiAgRXhwYW5zaW9uIG1lbW9yeSBidXMgKFBDTUNJQSkgQ29uZmlndXJhdGlvbiBSZWcuICAgICAgICAgICAgICovCisKKyNkZWZpbmUgTUVDUl9QQ01DSUEoTmIpCSAgICAgICAgCS8qIFBDTUNJQSBbMC4uMV0gICAgICAgICAgICAgICAgICAgKi8gXAorICAgICAgICAgICAgICAgIAlGbGQgKDE1LCAoTmIpKjE2KQorI2RlZmluZSBNRUNSX1BDTUNJQTAJTUVDUl9QQ01DSUEgKDApCS8qIFBDTUNJQSAwICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTUVDUl9QQ01DSUExCU1FQ1JfUENNQ0lBICgxKQkvKiBQQ01DSUEgMSAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgTUVDUl9CU0lPCUZsZCAoNSwgMCkJLyogQkNMSyBTZWxlY3QgSS9PIC0gMSBbVG1lbV0gICAgICAqLworI2RlZmluZSBNRUNSX0lPQ2xrKFRjcHUpICAgICAgICAJLyogIEkvTyBDbG9jayBbMi4uNjQgVGNwdV0gICAgICAgICAqLyBcCisgICAgICAgICAgICAgICAgCSgoKChUY3B1KSAtIDIpLzIpIDw8IEZTaGZ0IChNRUNSX0JTSU8pKQorI2RlZmluZSBNRUNSX0NlaWxJT0NsayhUY3B1KSAgICAJLyogIENlaWwuIG9mIElPQ2xrIFsyLi42NCBUY3B1XSAgICAqLyBcCisgICAgICAgICAgICAgICAgCSgoKChUY3B1KSAtIDEpLzIpIDw8IEZTaGZ0IChNRUNSX0JTSU8pKQorI2RlZmluZSBNRUNSX0JTQQlGbGQgKDUsIDUpCS8qIEJDTEsgU2VsZWN0IEF0dHJpYnV0ZSAtIDEgICAgICAgKi8KKyAgICAgICAgICAgICAgICAJICAgICAgICAJLyogW1RtZW1dICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBNRUNSX0F0dHJDbGsoVGNwdSkgICAgICAJLyogIEF0dHJpYnV0ZSBDbG9jayBbMi4uNjQgVGNwdV0gICAqLyBcCisgICAgICAgICAgICAgICAgCSgoKChUY3B1KSAtIDIpLzIpIDw8IEZTaGZ0IChNRUNSX0JTQSkpCisjZGVmaW5lIE1FQ1JfQ2VpbEF0dHJDbGsoVGNwdSkgIAkvKiAgQ2VpbC4gb2YgQXR0ckNsayBbMi4uNjQgVGNwdV0gICovIFwKKyAgICAgICAgICAgICAgICAJKCgoKFRjcHUpIC0gMSkvMikgPDwgRlNoZnQgKE1FQ1JfQlNBKSkKKyNkZWZpbmUgTUVDUl9CU00JRmxkICg1LCAxMCkJLyogQkNMSyBTZWxlY3QgTWVtb3J5IC0gMSBbVG1lbV0gICAqLworI2RlZmluZSBNRUNSX01lbUNsayhUY3B1KSAgICAgICAJLyogIE1lbW9yeSBDbG9jayBbMi4uNjQgVGNwdV0gICAgICAqLyBcCisgICAgICAgICAgICAgICAgCSgoKChUY3B1KSAtIDIpLzIpIDw8IEZTaGZ0IChNRUNSX0JTTSkpCisjZGVmaW5lIE1FQ1JfQ2VpbE1lbUNsayhUY3B1KSAgIAkvKiAgQ2VpbC4gb2YgTWVtQ2xrIFsyLi42NCBUY3B1XSAgICovIFwKKyAgICAgICAgICAgICAgICAJKCgoKFRjcHUpIC0gMSkvMikgPDwgRlNoZnQgKE1FQ1JfQlNNKSkKKworLyoKKyAqIE9uIFNBMTExMCBvbmx5CisgKi8KKworI2RlZmluZSBNRFJFRlIJCV9fUkVHKDB4QTAwMDAwMUMpCisKKyNkZWZpbmUgTURSRUZSX1RSQVNSCQlGbGQgKDQsIDApCisjZGVmaW5lIE1EUkVGUl9EUkkJCUZsZCAoMTIsIDQpCisjZGVmaW5lIE1EUkVGUl9FMFBJTgkJKDEgPDwgMTYpCisjZGVmaW5lIE1EUkVGUl9LMFJVTgkJKDEgPDwgMTcpCisjZGVmaW5lIE1EUkVGUl9LMERCMgkJKDEgPDwgMTgpCisjZGVmaW5lIE1EUkVGUl9FMVBJTgkJKDEgPDwgMjApCisjZGVmaW5lIE1EUkVGUl9LMVJVTgkJKDEgPDwgMjEpCisjZGVmaW5lIE1EUkVGUl9LMURCMgkJKDEgPDwgMjIpCisjZGVmaW5lIE1EUkVGUl9LMlJVTgkJKDEgPDwgMjUpCisjZGVmaW5lIE1EUkVGUl9LMkRCMgkJKDEgPDwgMjYpCisjZGVmaW5lIE1EUkVGUl9FQVBECQkoMSA8PCAyOCkKKyNkZWZpbmUgTURSRUZSX0tBUEQJCSgxIDw8IDI5KQorI2RlZmluZSBNRFJFRlJfU0xGUlNICQkoMSA8PCAzMSkKKworCisvKgorICogRGlyZWN0IE1lbW9yeSBBY2Nlc3MgKERNQSkgY29udHJvbCByZWdpc3RlcnMKKyAqCisgKiBSZWdpc3RlcnMKKyAqICAgIEREQVIwICAgICAJRGlyZWN0IE1lbW9yeSBBY2Nlc3MgKERNQSkgRGV2aWNlIEFkZHJlc3MgUmVnaXN0ZXIKKyAqICAgICAgICAgICAgICAJY2hhbm5lbCAwIChyZWFkL3dyaXRlKS4KKyAqICAgIERDU1IwICAgICAJRGlyZWN0IE1lbW9yeSBBY2Nlc3MgKERNQSkgQ29udHJvbCBhbmQgU3RhdHVzCisgKiAgICAgICAgICAgICAgCVJlZ2lzdGVyIGNoYW5uZWwgMCAocmVhZC93cml0ZSkuCisgKiAgICBEQlNBMCAgICAgCURpcmVjdCBNZW1vcnkgQWNjZXNzIChETUEpIEJ1ZmZlciBTdGFydCBhZGRyZXNzCisgKiAgICAgICAgICAgICAgCXJlZ2lzdGVyIEEgY2hhbm5lbCAwIChyZWFkL3dyaXRlKS4KKyAqICAgIERCVEEwICAgICAJRGlyZWN0IE1lbW9yeSBBY2Nlc3MgKERNQSkgQnVmZmVyIFRyYW5zZmVyIGNvdW50CisgKiAgICAgICAgICAgICAgCXJlZ2lzdGVyIEEgY2hhbm5lbCAwIChyZWFkL3dyaXRlKS4KKyAqICAgIERCU0IwICAgICAJRGlyZWN0IE1lbW9yeSBBY2Nlc3MgKERNQSkgQnVmZmVyIFN0YXJ0IGFkZHJlc3MKKyAqICAgICAgICAgICAgICAJcmVnaXN0ZXIgQiBjaGFubmVsIDAgKHJlYWQvd3JpdGUpLgorICogICAgREJUQjAgICAgIAlEaXJlY3QgTWVtb3J5IEFjY2VzcyAoRE1BKSBCdWZmZXIgVHJhbnNmZXIgY291bnQKKyAqICAgICAgICAgICAgICAJcmVnaXN0ZXIgQiBjaGFubmVsIDAgKHJlYWQvd3JpdGUpLgorICoKKyAqICAgIEREQVIxICAgICAJRGlyZWN0IE1lbW9yeSBBY2Nlc3MgKERNQSkgRGV2aWNlIEFkZHJlc3MgUmVnaXN0ZXIKKyAqICAgICAgICAgICAgICAJY2hhbm5lbCAxIChyZWFkL3dyaXRlKS4KKyAqICAgIERDU1IxICAgICAJRGlyZWN0IE1lbW9yeSBBY2Nlc3MgKERNQSkgQ29udHJvbCBhbmQgU3RhdHVzCisgKiAgICAgICAgICAgICAgCVJlZ2lzdGVyIGNoYW5uZWwgMSAocmVhZC93cml0ZSkuCisgKiAgICBEQlNBMSAgICAgCURpcmVjdCBNZW1vcnkgQWNjZXNzIChETUEpIEJ1ZmZlciBTdGFydCBhZGRyZXNzCisgKiAgICAgICAgICAgICAgCXJlZ2lzdGVyIEEgY2hhbm5lbCAxIChyZWFkL3dyaXRlKS4KKyAqICAgIERCVEExICAgICAJRGlyZWN0IE1lbW9yeSBBY2Nlc3MgKERNQSkgQnVmZmVyIFRyYW5zZmVyIGNvdW50CisgKiAgICAgICAgICAgICAgCXJlZ2lzdGVyIEEgY2hhbm5lbCAxIChyZWFkL3dyaXRlKS4KKyAqICAgIERCU0IxICAgICAJRGlyZWN0IE1lbW9yeSBBY2Nlc3MgKERNQSkgQnVmZmVyIFN0YXJ0IGFkZHJlc3MKKyAqICAgICAgICAgICAgICAJcmVnaXN0ZXIgQiBjaGFubmVsIDEgKHJlYWQvd3JpdGUpLgorICogICAgREJUQjEgICAgIAlEaXJlY3QgTWVtb3J5IEFjY2VzcyAoRE1BKSBCdWZmZXIgVHJhbnNmZXIgY291bnQKKyAqICAgICAgICAgICAgICAJcmVnaXN0ZXIgQiBjaGFubmVsIDEgKHJlYWQvd3JpdGUpLgorICoKKyAqICAgIEREQVIyICAgICAJRGlyZWN0IE1lbW9yeSBBY2Nlc3MgKERNQSkgRGV2aWNlIEFkZHJlc3MgUmVnaXN0ZXIKKyAqICAgICAgICAgICAgICAJY2hhbm5lbCAyIChyZWFkL3dyaXRlKS4KKyAqICAgIERDU1IyICAgICAJRGlyZWN0IE1lbW9yeSBBY2Nlc3MgKERNQSkgQ29udHJvbCBhbmQgU3RhdHVzCisgKiAgICAgICAgICAgICAgCVJlZ2lzdGVyIGNoYW5uZWwgMiAocmVhZC93cml0ZSkuCisgKiAgICBEQlNBMiAgICAgCURpcmVjdCBNZW1vcnkgQWNjZXNzIChETUEpIEJ1ZmZlciBTdGFydCBhZGRyZXNzCisgKiAgICAgICAgICAgICAgCXJlZ2lzdGVyIEEgY2hhbm5lbCAyIChyZWFkL3dyaXRlKS4KKyAqICAgIERCVEEyICAgICAJRGlyZWN0IE1lbW9yeSBBY2Nlc3MgKERNQSkgQnVmZmVyIFRyYW5zZmVyIGNvdW50CisgKiAgICAgICAgICAgICAgCXJlZ2lzdGVyIEEgY2hhbm5lbCAyIChyZWFkL3dyaXRlKS4KKyAqICAgIERCU0IyICAgICAJRGlyZWN0IE1lbW9yeSBBY2Nlc3MgKERNQSkgQnVmZmVyIFN0YXJ0IGFkZHJlc3MKKyAqICAgICAgICAgICAgICAJcmVnaXN0ZXIgQiBjaGFubmVsIDIgKHJlYWQvd3JpdGUpLgorICogICAgREJUQjIgICAgIAlEaXJlY3QgTWVtb3J5IEFjY2VzcyAoRE1BKSBCdWZmZXIgVHJhbnNmZXIgY291bnQKKyAqICAgICAgICAgICAgICAJcmVnaXN0ZXIgQiBjaGFubmVsIDIgKHJlYWQvd3JpdGUpLgorICoKKyAqICAgIEREQVIzICAgICAJRGlyZWN0IE1lbW9yeSBBY2Nlc3MgKERNQSkgRGV2aWNlIEFkZHJlc3MgUmVnaXN0ZXIKKyAqICAgICAgICAgICAgICAJY2hhbm5lbCAzIChyZWFkL3dyaXRlKS4KKyAqICAgIERDU1IzICAgICAJRGlyZWN0IE1lbW9yeSBBY2Nlc3MgKERNQSkgQ29udHJvbCBhbmQgU3RhdHVzCisgKiAgICAgICAgICAgICAgCVJlZ2lzdGVyIGNoYW5uZWwgMyAocmVhZC93cml0ZSkuCisgKiAgICBEQlNBMyAgICAgCURpcmVjdCBNZW1vcnkgQWNjZXNzIChETUEpIEJ1ZmZlciBTdGFydCBhZGRyZXNzCisgKiAgICAgICAgICAgICAgCXJlZ2lzdGVyIEEgY2hhbm5lbCAzIChyZWFkL3dyaXRlKS4KKyAqICAgIERCVEEzICAgICAJRGlyZWN0IE1lbW9yeSBBY2Nlc3MgKERNQSkgQnVmZmVyIFRyYW5zZmVyIGNvdW50CisgKiAgICAgICAgICAgICAgCXJlZ2lzdGVyIEEgY2hhbm5lbCAzIChyZWFkL3dyaXRlKS4KKyAqICAgIERCU0IzICAgICAJRGlyZWN0IE1lbW9yeSBBY2Nlc3MgKERNQSkgQnVmZmVyIFN0YXJ0IGFkZHJlc3MKKyAqICAgICAgICAgICAgICAJcmVnaXN0ZXIgQiBjaGFubmVsIDMgKHJlYWQvd3JpdGUpLgorICogICAgREJUQjMgICAgIAlEaXJlY3QgTWVtb3J5IEFjY2VzcyAoRE1BKSBCdWZmZXIgVHJhbnNmZXIgY291bnQKKyAqICAgICAgICAgICAgICAJcmVnaXN0ZXIgQiBjaGFubmVsIDMgKHJlYWQvd3JpdGUpLgorICoKKyAqICAgIEREQVI0ICAgICAJRGlyZWN0IE1lbW9yeSBBY2Nlc3MgKERNQSkgRGV2aWNlIEFkZHJlc3MgUmVnaXN0ZXIKKyAqICAgICAgICAgICAgICAJY2hhbm5lbCA0IChyZWFkL3dyaXRlKS4KKyAqICAgIERDU1I0ICAgICAJRGlyZWN0IE1lbW9yeSBBY2Nlc3MgKERNQSkgQ29udHJvbCBhbmQgU3RhdHVzCisgKiAgICAgICAgICAgICAgCVJlZ2lzdGVyIGNoYW5uZWwgNCAocmVhZC93cml0ZSkuCisgKiAgICBEQlNBNCAgICAgCURpcmVjdCBNZW1vcnkgQWNjZXNzIChETUEpIEJ1ZmZlciBTdGFydCBhZGRyZXNzCisgKiAgICAgICAgICAgICAgCXJlZ2lzdGVyIEEgY2hhbm5lbCA0IChyZWFkL3dyaXRlKS4KKyAqICAgIERCVEE0ICAgICAJRGlyZWN0IE1lbW9yeSBBY2Nlc3MgKERNQSkgQnVmZmVyIFRyYW5zZmVyIGNvdW50CisgKiAgICAgICAgICAgICAgCXJlZ2lzdGVyIEEgY2hhbm5lbCA0IChyZWFkL3dyaXRlKS4KKyAqICAgIERCU0I0ICAgICAJRGlyZWN0IE1lbW9yeSBBY2Nlc3MgKERNQSkgQnVmZmVyIFN0YXJ0IGFkZHJlc3MKKyAqICAgICAgICAgICAgICAJcmVnaXN0ZXIgQiBjaGFubmVsIDQgKHJlYWQvd3JpdGUpLgorICogICAgREJUQjQgICAgIAlEaXJlY3QgTWVtb3J5IEFjY2VzcyAoRE1BKSBCdWZmZXIgVHJhbnNmZXIgY291bnQKKyAqICAgICAgICAgICAgICAJcmVnaXN0ZXIgQiBjaGFubmVsIDQgKHJlYWQvd3JpdGUpLgorICoKKyAqICAgIEREQVI1ICAgICAJRGlyZWN0IE1lbW9yeSBBY2Nlc3MgKERNQSkgRGV2aWNlIEFkZHJlc3MgUmVnaXN0ZXIKKyAqICAgICAgICAgICAgICAJY2hhbm5lbCA1IChyZWFkL3dyaXRlKS4KKyAqICAgIERDU1I1ICAgICAJRGlyZWN0IE1lbW9yeSBBY2Nlc3MgKERNQSkgQ29udHJvbCBhbmQgU3RhdHVzCisgKiAgICAgICAgICAgICAgCVJlZ2lzdGVyIGNoYW5uZWwgNSAocmVhZC93cml0ZSkuCisgKiAgICBEQlNBNSAgICAgCURpcmVjdCBNZW1vcnkgQWNjZXNzIChETUEpIEJ1ZmZlciBTdGFydCBhZGRyZXNzCisgKiAgICAgICAgICAgICAgCXJlZ2lzdGVyIEEgY2hhbm5lbCA1IChyZWFkL3dyaXRlKS4KKyAqICAgIERCVEE1ICAgICAJRGlyZWN0IE1lbW9yeSBBY2Nlc3MgKERNQSkgQnVmZmVyIFRyYW5zZmVyIGNvdW50CisgKiAgICAgICAgICAgICAgCXJlZ2lzdGVyIEEgY2hhbm5lbCA1IChyZWFkL3dyaXRlKS4KKyAqICAgIERCU0I1ICAgICAJRGlyZWN0IE1lbW9yeSBBY2Nlc3MgKERNQSkgQnVmZmVyIFN0YXJ0IGFkZHJlc3MKKyAqICAgICAgICAgICAgICAJcmVnaXN0ZXIgQiBjaGFubmVsIDUgKHJlYWQvd3JpdGUpLgorICogICAgREJUQjUgICAgIAlEaXJlY3QgTWVtb3J5IEFjY2VzcyAoRE1BKSBCdWZmZXIgVHJhbnNmZXIgY291bnQKKyAqICAgICAgICAgICAgICAJcmVnaXN0ZXIgQiBjaGFubmVsIDUgKHJlYWQvd3JpdGUpLgorICovCisKKyNkZWZpbmUgRE1BU3AgICAJMHgwMDAwMDAyMAkvKiBETUEgY29udHJvbCByZWcuIFNwYWNlIFtieXRlXSAgICovCisKKyNkZWZpbmUgRERBUihOYikJX19SRUcoMHhCMDAwMDAwMCArIChOYikqRE1BU3ApICAvKiBETUEgRGV2aWNlIEFkZHJlc3MgUmVnLiBjaGFubmVsIFswLi41XSAqLworI2RlZmluZSBTZXREQ1NSKE5iKQlfX1JFRygweEIwMDAwMDA0ICsgKE5iKSpETUFTcCkgIC8qIFNldCBETUEgQ29udHJvbCAmIFN0YXR1cyBSZWcuIGNoYW5uZWwgWzAuLjVdICh3cml0ZSkgKi8KKyNkZWZpbmUgQ2xyRENTUihOYikJX19SRUcoMHhCMDAwMDAwOCArIChOYikqRE1BU3ApICAvKiBDbGVhciBETUEgQ29udHJvbCAmIFN0YXR1cyBSZWcuIGNoYW5uZWwgWzAuLjVdICh3cml0ZSkgKi8KKyNkZWZpbmUgUmREQ1NSKE5iKQlfX1JFRygweEIwMDAwMDBDICsgKE5iKSpETUFTcCkgIC8qIFJlYWQgRE1BIENvbnRyb2wgJiBTdGF0dXMgUmVnLiBjaGFubmVsIFswLi41XSAocmVhZCkgKi8KKyNkZWZpbmUgREJTQShOYikJX19SRUcoMHhCMDAwMDAxMCArIChOYikqRE1BU3ApICAvKiBETUEgQnVmZmVyIFN0YXJ0IGFkZHJlc3MgcmVnLiBBIGNoYW5uZWwgWzAuLjVdICovCisjZGVmaW5lIERCVEEoTmIpCV9fUkVHKDB4QjAwMDAwMTQgKyAoTmIpKkRNQVNwKSAgLyogRE1BIEJ1ZmZlciBUcmFuc2ZlciBjb3VudCByZWcuIEEgY2hhbm5lbCBbMC4uNV0gKi8KKyNkZWZpbmUgREJTQihOYikJX19SRUcoMHhCMDAwMDAxOCArIChOYikqRE1BU3ApICAvKiBETUEgQnVmZmVyIFN0YXJ0IGFkZHJlc3MgcmVnLiBCIGNoYW5uZWwgWzAuLjVdICovCisjZGVmaW5lIERCVEIoTmIpCV9fUkVHKDB4QjAwMDAwMUMgKyAoTmIpKkRNQVNwKSAgLyogRE1BIEJ1ZmZlciBUcmFuc2ZlciBjb3VudCByZWcuIEIgY2hhbm5lbCBbMC4uNV0gKi8KKworI2RlZmluZSBEREFSX1JXIAkweDAwMDAwMDAxCS8qIGRldmljZSBkYXRhIFJlYWQvV3JpdGUgICAgICAgICAgKi8KKyNkZWZpbmUgRERBUl9EZXZXcgkoRERBUl9SVyowKQkvKiAgRGV2aWNlIGRhdGEgV3JpdGUgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qICAobWVtb3J5IC0+IGRldmljZSkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRERBUl9EZXZSZAkoRERBUl9SVyoxKQkvKiAgRGV2aWNlIGRhdGEgUmVhZCAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qICAoZGV2aWNlIC0+IG1lbW9yeSkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRERBUl9FICAJMHgwMDAwMDAwMgkvKiBiaWcvbGl0dGxlIEVuZGlhbiBkZXZpY2UgICAgICAgICovCisjZGVmaW5lIEREQVJfTHRsRW5kCShEREFSX0UqMCkJLyogIExpdHRsZSBFbmRpYW4gZGV2aWNlICAgICAgICAgICAqLworI2RlZmluZSBEREFSX0JpZ0VuZAkoRERBUl9FKjEpCS8qICBCaWcgRW5kaWFuIGRldmljZSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRERBUl9CUyAJMHgwMDAwMDAwNAkvKiBkZXZpY2UgQnVyc3QgU2l6ZSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEREQVJfQnJzdDQJKEREQVJfQlMqMCkJLyogIEJ1cnN0LW9mLTQgZGV2aWNlICAgICAgICAgICAgICAqLworI2RlZmluZSBEREFSX0Jyc3Q4CShEREFSX0JTKjEpCS8qICBCdXJzdC1vZi04IGRldmljZSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRERBUl9EVyAJMHgwMDAwMDAwOAkvKiBkZXZpY2UgRGF0YSBXaWR0aCAgICAgICAgICAgICAgICovCisjZGVmaW5lIEREQVJfOEJpdERldgkoRERBUl9EVyowKQkvKiAgOC1CaXQgRGV2aWNlICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEREQVJfMTZCaXREZXYJKEREQVJfRFcqMSkJLyogIDE2LUJpdCBEZXZpY2UgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBEREFSX0RTIAlGbGQgKDQsIDQpCS8qIERldmljZSBTZWxlY3QgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRERBUl9TZXIwVURDVHIJICAgICAgICAJLyogIFNlci4gcG9ydCAwIFVEQyBUcmFuc21pdCAgICAgICAqLyBcCisgICAgICAgICAgICAgICAgCSgweDAgPDwgRlNoZnQgKEREQVJfRFMpKQorI2RlZmluZSBEREFSX1NlcjBVRENSYwkgICAgICAgIAkvKiAgU2VyLiBwb3J0IDAgVURDIFJlY2VpdmUgICAgICAgICovIFwKKyAgICAgICAgICAgICAgICAJKDB4MSA8PCBGU2hmdCAoRERBUl9EUykpCisjZGVmaW5lIEREQVJfU2VyMVNETENUcgkgICAgICAgIAkvKiAgU2VyLiBwb3J0IDEgU0RMQyBUcmFuc21pdCAgICAgICovIFwKKyAgICAgICAgICAgICAgICAJKDB4MiA8PCBGU2hmdCAoRERBUl9EUykpCisjZGVmaW5lIEREQVJfU2VyMVNETENSYwkgICAgICAgIAkvKiAgU2VyLiBwb3J0IDEgU0RMQyBSZWNlaXZlICAgICAgICovIFwKKyAgICAgICAgICAgICAgICAJKDB4MyA8PCBGU2hmdCAoRERBUl9EUykpCisjZGVmaW5lIEREQVJfU2VyMVVBUlRUcgkgICAgICAgIAkvKiAgU2VyLiBwb3J0IDEgVUFSVCBUcmFuc21pdCAgICAgICovIFwKKyAgICAgICAgICAgICAgICAJKDB4NCA8PCBGU2hmdCAoRERBUl9EUykpCisjZGVmaW5lIEREQVJfU2VyMVVBUlRSYwkgICAgICAgIAkvKiAgU2VyLiBwb3J0IDEgVUFSVCBSZWNlaXZlICAgICAgICovIFwKKyAgICAgICAgICAgICAgICAJKDB4NSA8PCBGU2hmdCAoRERBUl9EUykpCisjZGVmaW5lIEREQVJfU2VyMklDUFRyCSAgICAgICAgCS8qICBTZXIuIHBvcnQgMiBJQ1AgVHJhbnNtaXQgICAgICAgKi8gXAorICAgICAgICAgICAgICAgIAkoMHg2IDw8IEZTaGZ0IChEREFSX0RTKSkKKyNkZWZpbmUgRERBUl9TZXIySUNQUmMJICAgICAgICAJLyogIFNlci4gcG9ydCAyIElDUCBSZWNlaXZlICAgICAgICAqLyBcCisgICAgICAgICAgICAgICAgCSgweDcgPDwgRlNoZnQgKEREQVJfRFMpKQorI2RlZmluZSBEREFSX1NlcjNVQVJUVHIJICAgICAgICAJLyogIFNlci4gcG9ydCAzIFVBUlQgVHJhbnNtaXQgICAgICAqLyBcCisgICAgICAgICAgICAgICAgCSgweDggPDwgRlNoZnQgKEREQVJfRFMpKQorI2RlZmluZSBEREFSX1NlcjNVQVJUUmMJICAgICAgICAJLyogIFNlci4gcG9ydCAzIFVBUlQgUmVjZWl2ZSAgICAgICAqLyBcCisgICAgICAgICAgICAgICAgCSgweDkgPDwgRlNoZnQgKEREQVJfRFMpKQorI2RlZmluZSBEREFSX1NlcjRNQ1AwVHIJICAgICAgICAJLyogIFNlci4gcG9ydCA0IE1DUCAwIFRyYW5zbWl0ICAgICAqLyBcCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qICAoYXVkaW8pICAgICAgICAgICAgICAgICAgICAgICAgKi8gXAorICAgICAgICAgICAgICAgIAkoMHhBIDw8IEZTaGZ0IChEREFSX0RTKSkKKyNkZWZpbmUgRERBUl9TZXI0TUNQMFJjCSAgICAgICAgCS8qICBTZXIuIHBvcnQgNCBNQ1AgMCBSZWNlaXZlICAgICAgKi8gXAorICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAgKGF1ZGlvKSAgICAgICAgICAgICAgICAgICAgICAgICovIFwKKyAgICAgICAgICAgICAgICAJKDB4QiA8PCBGU2hmdCAoRERBUl9EUykpCisjZGVmaW5lIEREQVJfU2VyNE1DUDFUcgkgICAgICAgIAkvKiAgU2VyLiBwb3J0IDQgTUNQIDEgVHJhbnNtaXQgICAgICovIFwKKyAgICAgICAgICAgICAgICAJICAgICAgICAJLyogICh0ZWxlY29tKSAgICAgICAgICAgICAgICAgICAgICAqLyBcCisgICAgICAgICAgICAgICAgCSgweEMgPDwgRlNoZnQgKEREQVJfRFMpKQorI2RlZmluZSBEREFSX1NlcjRNQ1AxUmMJICAgICAgICAJLyogIFNlci4gcG9ydCA0IE1DUCAxIFJlY2VpdmUgICAgICAqLyBcCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qICAodGVsZWNvbSkgICAgICAgICAgICAgICAgICAgICAgKi8gXAorICAgICAgICAgICAgICAgIAkoMHhEIDw8IEZTaGZ0IChEREFSX0RTKSkKKyNkZWZpbmUgRERBUl9TZXI0U1NQVHIJICAgICAgICAJLyogIFNlci4gcG9ydCA0IFNTUCBUcmFuc21pdCAgICAgICAqLyBcCisgICAgICAgICAgICAgICAgCSgweEUgPDwgRlNoZnQgKEREQVJfRFMpKQorI2RlZmluZSBEREFSX1NlcjRTU1BSYwkgICAgICAgIAkvKiAgU2VyLiBwb3J0IDQgU1NQIFJlY2VpdmUgICAgICAgICovIFwKKyAgICAgICAgICAgICAgICAJKDB4RiA8PCBGU2hmdCAoRERBUl9EUykpCisjZGVmaW5lIEREQVJfREEgCUZsZCAoMjQsIDgpCS8qIERldmljZSBBZGRyZXNzICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRERBUl9EZXZBZGQoQWRkKSAgICAgICAgCS8qICBEZXZpY2UgQWRkcmVzcyAgICAgICAgICAgICAgICAgKi8gXAorICAgICAgICAgICAgICAgIAkoKChBZGQpICYgMHhGMDAwMDAwMCkgfCBcCisgICAgICAgICAgICAgICAgCSAoKChBZGQpICYgMFgwMDNGRkZGQykgPDwgKEZTaGZ0IChEREFSX0RBKSAtIDIpKSkKKyNkZWZpbmUgRERBUl9TZXIwVURDV3IJICAgICAgICAJLyogU2VyLiBwb3J0IDAgVURDIFdyaXRlICAgICAgICAgICAqLyBcCisgICAgICAgICAgICAgICAgCShEREFSX0RldldyICsgRERBUl9CcnN0OCArIEREQVJfOEJpdERldiArIFwKKyAgICAgICAgICAgICAgICAJIEREQVJfU2VyMFVEQ1RyICsgRERBUl9EZXZBZGQgKF9fUFJFRyhTZXIwVURDRFIpKSkKKyNkZWZpbmUgRERBUl9TZXIwVURDUmQJICAgICAgICAJLyogU2VyLiBwb3J0IDAgVURDIFJlYWQgICAgICAgICAgICAqLyBcCisgICAgICAgICAgICAgICAgCShEREFSX0RldlJkICsgRERBUl9CcnN0OCArIEREQVJfOEJpdERldiArIFwKKyAgICAgICAgICAgICAgICAJIEREQVJfU2VyMFVEQ1JjICsgRERBUl9EZXZBZGQgKF9fUFJFRyhTZXIwVURDRFIpKSkKKyNkZWZpbmUgRERBUl9TZXIxVUFSVFdyCSAgICAgICAgCS8qIFNlci4gcG9ydCAxIFVBUlQgV3JpdGUgICAgICAgICAgKi8gXAorICAgICAgICAgICAgICAgIAkoRERBUl9EZXZXciArIEREQVJfQnJzdDQgKyBEREFSXzhCaXREZXYgKyBcCisgICAgICAgICAgICAgICAgCSBEREFSX1NlcjFVQVJUVHIgKyBEREFSX0RldkFkZCAoX19QUkVHKFNlcjFVVERSKSkpCisjZGVmaW5lIEREQVJfU2VyMVVBUlRSZAkgICAgICAgIAkvKiBTZXIuIHBvcnQgMSBVQVJUIFJlYWQgICAgICAgICAgICovIFwKKyAgICAgICAgICAgICAgICAJKEREQVJfRGV2UmQgKyBEREFSX0Jyc3Q0ICsgRERBUl84Qml0RGV2ICsgXAorICAgICAgICAgICAgICAgIAkgRERBUl9TZXIxVUFSVFJjICsgRERBUl9EZXZBZGQgKF9fUFJFRyhTZXIxVVREUikpKQorI2RlZmluZSBEREFSX1NlcjFTRExDV3IJICAgICAgICAJLyogU2VyLiBwb3J0IDEgU0RMQyBXcml0ZSAgICAgICAgICAqLyBcCisgICAgICAgICAgICAgICAgCShEREFSX0RldldyICsgRERBUl9CcnN0NCArIEREQVJfOEJpdERldiArIFwKKyAgICAgICAgICAgICAgICAJIEREQVJfU2VyMVNETENUciArIEREQVJfRGV2QWRkIChfX1BSRUcoU2VyMVNERFIpKSkKKyNkZWZpbmUgRERBUl9TZXIxU0RMQ1JkCSAgICAgICAgCS8qIFNlci4gcG9ydCAxIFNETEMgUmVhZCAgICAgICAgICAgKi8gXAorICAgICAgICAgICAgICAgIAkoRERBUl9EZXZSZCArIEREQVJfQnJzdDQgKyBEREFSXzhCaXREZXYgKyBcCisgICAgICAgICAgICAgICAgCSBEREFSX1NlcjFTRExDUmMgKyBEREFSX0RldkFkZCAoX19QUkVHKFNlcjFTRERSKSkpCisjZGVmaW5lIEREQVJfU2VyMlVBUlRXcgkgICAgICAgIAkvKiBTZXIuIHBvcnQgMiBVQVJUIFdyaXRlICAgICAgICAgICovIFwKKyAgICAgICAgICAgICAgICAJKEREQVJfRGV2V3IgKyBEREFSX0Jyc3Q0ICsgRERBUl84Qml0RGV2ICsgXAorICAgICAgICAgICAgICAgIAkgRERBUl9TZXIySUNQVHIgKyBEREFSX0RldkFkZCAoX19QUkVHKFNlcjJVVERSKSkpCisjZGVmaW5lIEREQVJfU2VyMlVBUlRSZAkgICAgICAgIAkvKiBTZXIuIHBvcnQgMiBVQVJUIFJlYWQgICAgICAgICAgICovIFwKKyAgICAgICAgICAgICAgICAJKEREQVJfRGV2UmQgKyBEREFSX0Jyc3Q0ICsgRERBUl84Qml0RGV2ICsgXAorICAgICAgICAgICAgICAgIAkgRERBUl9TZXIySUNQUmMgKyBEREFSX0RldkFkZCAoX19QUkVHKFNlcjJVVERSKSkpCisjZGVmaW5lIEREQVJfU2VyMkhTU1BXcgkgICAgICAgIAkvKiBTZXIuIHBvcnQgMiBIU1NQIFdyaXRlICAgICAgICAgICovIFwKKyAgICAgICAgICAgICAgICAJKEREQVJfRGV2V3IgKyBEREFSX0Jyc3Q4ICsgRERBUl84Qml0RGV2ICsgXAorICAgICAgICAgICAgICAgIAkgRERBUl9TZXIySUNQVHIgKyBEREFSX0RldkFkZCAoX19QUkVHKFNlcjJIU0RSKSkpCisjZGVmaW5lIEREQVJfU2VyMkhTU1BSZAkgICAgICAgIAkvKiBTZXIuIHBvcnQgMiBIU1NQIFJlYWQgICAgICAgICAgICovIFwKKyAgICAgICAgICAgICAgICAJKEREQVJfRGV2UmQgKyBEREFSX0Jyc3Q4ICsgRERBUl84Qml0RGV2ICsgXAorICAgICAgICAgICAgICAgIAkgRERBUl9TZXIySUNQUmMgKyBEREFSX0RldkFkZCAoX19QUkVHKFNlcjJIU0RSKSkpCisjZGVmaW5lIEREQVJfU2VyM1VBUlRXcgkgICAgICAgIAkvKiBTZXIuIHBvcnQgMyBVQVJUIFdyaXRlICAgICAgICAgICovIFwKKyAgICAgICAgICAgICAgICAJKEREQVJfRGV2V3IgKyBEREFSX0Jyc3Q0ICsgRERBUl84Qml0RGV2ICsgXAorICAgICAgICAgICAgICAgIAkgRERBUl9TZXIzVUFSVFRyICsgRERBUl9EZXZBZGQgKF9fUFJFRyhTZXIzVVREUikpKQorI2RlZmluZSBEREFSX1NlcjNVQVJUUmQJICAgICAgICAJLyogU2VyLiBwb3J0IDMgVUFSVCBSZWFkICAgICAgICAgICAqLyBcCisgICAgICAgICAgICAgICAgCShEREFSX0RldlJkICsgRERBUl9CcnN0NCArIEREQVJfOEJpdERldiArIFwKKyAgICAgICAgICAgICAgICAJIEREQVJfU2VyM1VBUlRSYyArIEREQVJfRGV2QWRkIChfX1BSRUcoU2VyM1VURFIpKSkKKyNkZWZpbmUgRERBUl9TZXI0TUNQMFdyCSAgICAgICAgCS8qIFNlci4gcG9ydCA0IE1DUCAwIFdyaXRlIChhdWRpbykgKi8gXAorICAgICAgICAgICAgICAgIAkoRERBUl9EZXZXciArIEREQVJfQnJzdDQgKyBEREFSXzE2Qml0RGV2ICsgXAorICAgICAgICAgICAgICAgIAkgRERBUl9TZXI0TUNQMFRyICsgRERBUl9EZXZBZGQgKF9fUFJFRyhTZXI0TUNEUjApKSkKKyNkZWZpbmUgRERBUl9TZXI0TUNQMFJkCSAgICAgICAgCS8qIFNlci4gcG9ydCA0IE1DUCAwIFJlYWQgKGF1ZGlvKSAgKi8gXAorICAgICAgICAgICAgICAgIAkoRERBUl9EZXZSZCArIEREQVJfQnJzdDQgKyBEREFSXzE2Qml0RGV2ICsgXAorICAgICAgICAgICAgICAgIAkgRERBUl9TZXI0TUNQMFJjICsgRERBUl9EZXZBZGQgKF9fUFJFRyhTZXI0TUNEUjApKSkKKyNkZWZpbmUgRERBUl9TZXI0TUNQMVdyCSAgICAgICAgCS8qIFNlci4gcG9ydCA0IE1DUCAxIFdyaXRlICAgICAgICAgKi8gXAorICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAodGVsZWNvbSkgICAgICAgICAgICAgICAgICAgICAgICovIFwKKyAgICAgICAgICAgICAgICAJKEREQVJfRGV2V3IgKyBEREFSX0Jyc3Q0ICsgRERBUl8xNkJpdERldiArIFwKKyAgICAgICAgICAgICAgICAJIEREQVJfU2VyNE1DUDFUciArIEREQVJfRGV2QWRkIChfX1BSRUcoU2VyNE1DRFIxKSkpCisjZGVmaW5lIEREQVJfU2VyNE1DUDFSZAkgICAgICAgIAkvKiBTZXIuIHBvcnQgNCBNQ1AgMSBSZWFkICAgICAgICAgICovIFwKKyAgICAgICAgICAgICAgICAJICAgICAgICAJLyogKHRlbGVjb20pICAgICAgICAgICAgICAgICAgICAgICAqLyBcCisgICAgICAgICAgICAgICAgCShEREFSX0RldlJkICsgRERBUl9CcnN0NCArIEREQVJfMTZCaXREZXYgKyBcCisgICAgICAgICAgICAgICAgCSBEREFSX1NlcjRNQ1AxUmMgKyBEREFSX0RldkFkZCAoX19QUkVHKFNlcjRNQ0RSMSkpKQorI2RlZmluZSBEREFSX1NlcjRTU1BXcgkgICAgICAgIAkvKiBTZXIuIHBvcnQgNCBTU1AgV3JpdGUgKDE2IGJpdHMpICovIFwKKyAgICAgICAgICAgICAgICAJKEREQVJfRGV2V3IgKyBEREFSX0Jyc3Q0ICsgRERBUl8xNkJpdERldiArIFwKKyAgICAgICAgICAgICAgICAJIEREQVJfU2VyNFNTUFRyICsgRERBUl9EZXZBZGQgKF9fUFJFRyhTZXI0U1NEUikpKQorI2RlZmluZSBEREFSX1NlcjRTU1BSZAkgICAgICAgIAkvKiBTZXIuIHBvcnQgNCBTU1AgUmVhZCAoMTYgYml0cykgICovIFwKKyAgICAgICAgICAgICAgICAJKEREQVJfRGV2UmQgKyBEREFSX0Jyc3Q0ICsgRERBUl8xNkJpdERldiArIFwKKyAgICAgICAgICAgICAgICAJIEREQVJfU2VyNFNTUFJjICsgRERBUl9EZXZBZGQgKF9fUFJFRyhTZXI0U1NEUikpKQorCisjZGVmaW5lIERDU1JfUlVOCTB4MDAwMDAwMDEJLyogRE1BIFJVTmluZyAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBEQ1NSX0lFIAkweDAwMDAwMDAyCS8qIERNQSBJbnRlcnJ1cHQgRW5hYmxlICAgICAgICAgICAgKi8KKyNkZWZpbmUgRENTUl9FUlJPUgkweDAwMDAwMDA0CS8qIERNQSBFUlJPUiAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRENTUl9ET05FQQkweDAwMDAwMDA4CS8qIERPTkUgRE1BIHRyYW5zZmVyIGJ1ZmZlciBBICAgICAgKi8KKyNkZWZpbmUgRENTUl9TVFJUQQkweDAwMDAwMDEwCS8qIFNUYVJUZWQgRE1BIHRyYW5zZmVyIGJ1ZmZlciBBICAgKi8KKyNkZWZpbmUgRENTUl9ET05FQgkweDAwMDAwMDIwCS8qIERPTkUgRE1BIHRyYW5zZmVyIGJ1ZmZlciBCICAgICAgKi8KKyNkZWZpbmUgRENTUl9TVFJUQgkweDAwMDAwMDQwCS8qIFNUYVJUZWQgRE1BIHRyYW5zZmVyIGJ1ZmZlciBCICAgKi8KKyNkZWZpbmUgRENTUl9CSVUJMHgwMDAwMDA4MAkvKiBETUEgQnVmZmVyIEluIFVzZSAgICAgICAgICAgICAgICovCisjZGVmaW5lIERDU1JfQnVmQQkoRENTUl9CSVUqMCkJLyogIERNQSBCdWZmZXIgQSBpbiB1c2UgICAgICAgICAgICAqLworI2RlZmluZSBEQ1NSX0J1ZkIJKERDU1JfQklVKjEpCS8qICBETUEgQnVmZmVyIEIgaW4gdXNlICAgICAgICAgICAgKi8KKworI2RlZmluZSBEQlRfVEMgIAlGbGQgKDEzLCAwKQkvKiBUcmFuc2ZlciBDb3VudCAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERCVEFfVENBCURCVF9UQyAgCS8qIFRyYW5zZmVyIENvdW50IGJ1ZmZlciBBICAgICAgICAgKi8KKyNkZWZpbmUgREJUQl9UQ0IJREJUX1RDICAJLyogVHJhbnNmZXIgQ291bnQgYnVmZmVyIEIgICAgICAgICAqLworCisKKy8qCisgKiBMaXF1aWQgQ3J5c3RhbCBEaXNwbGF5IChMQ0QpIGNvbnRyb2wgcmVnaXN0ZXJzCisgKgorICogUmVnaXN0ZXJzCisgKiAgICBMQ0NSMCAgICAgCUxpcXVpZCBDcnlzdGFsIERpc3BsYXkgKExDRCkgQ29udHJvbCBSZWdpc3RlciAwCisgKiAgICAgICAgICAgICAgCShyZWFkL3dyaXRlKS4KKyAqICAgICAgICAgICAgICAJW0JpdHMgTERNLCBCQU0sIGFuZCBFUk0gYXJlIG9ubHkgaW1wbGVtZW50ZWQgaW4KKyAqICAgICAgICAgICAgICAJdmVyc2lvbnMgMi4wIChyZXYuID0gOCkgYW5kIGhpZ2hlciBvZiB0aGUgU3Ryb25nQVJNCisgKiAgICAgICAgICAgICAgCVNBLTExMDAuXQorICogICAgTENTUiAgICAgIAlMaXF1aWQgQ3J5c3RhbCBEaXNwbGF5IChMQ0QpIFN0YXR1cyBSZWdpc3RlcgorICogICAgICAgICAgICAgIAkocmVhZC93cml0ZSkuCisgKiAgICAgICAgICAgICAgCVtCaXQgTEREIGNhbiBiZSBvbmx5IHJlYWQgaW4gdmVyc2lvbnMgMS4wIChyZXYuID0gMSkKKyAqICAgICAgICAgICAgICAJYW5kIDEuMSAocmV2LiA9IDIpIG9mIHRoZSBTdHJvbmdBUk0gU0EtMTEwMCwgaXQgY2FuIGJlCisgKiAgICAgICAgICAgICAgCXJlYWQgYW5kIHdyaXR0ZW4gKGNsZWFyZWQpIGluIHZlcnNpb25zIDIuMCAocmV2LiA9IDgpCisgKiAgICAgICAgICAgICAgCWFuZCBoaWdoZXIuXQorICogICAgREJBUjEgICAgIAlMaXF1aWQgQ3J5c3RhbCBEaXNwbGF5IChMQ0QpIERpcmVjdCBNZW1vcnkgQWNjZXNzCisgKiAgICAgICAgICAgICAgCShETUEpIEJhc2UgQWRkcmVzcyBSZWdpc3RlciBjaGFubmVsIDEgKHJlYWQvd3JpdGUpLgorICogICAgRENBUjEgICAgIAlMaXF1aWQgQ3J5c3RhbCBEaXNwbGF5IChMQ0QpIERpcmVjdCBNZW1vcnkgQWNjZXNzCisgKiAgICAgICAgICAgICAgCShETUEpIEN1cnJlbnQgQWRkcmVzcyBSZWdpc3RlciBjaGFubmVsIDEgKHJlYWQpLgorICogICAgREJBUjIgICAgIAlMaXF1aWQgQ3J5c3RhbCBEaXNwbGF5IChMQ0QpIERpcmVjdCBNZW1vcnkgQWNjZXNzCisgKiAgICAgICAgICAgICAgCShETUEpIEJhc2UgQWRkcmVzcyBSZWdpc3RlciBjaGFubmVsIDIgKHJlYWQvd3JpdGUpLgorICogICAgRENBUjIgICAgIAlMaXF1aWQgQ3J5c3RhbCBEaXNwbGF5IChMQ0QpIERpcmVjdCBNZW1vcnkgQWNjZXNzCisgKiAgICAgICAgICAgICAgCShETUEpIEN1cnJlbnQgQWRkcmVzcyBSZWdpc3RlciBjaGFubmVsIDIgKHJlYWQpLgorICogICAgTENDUjEgICAgIAlMaXF1aWQgQ3J5c3RhbCBEaXNwbGF5IChMQ0QpIENvbnRyb2wgUmVnaXN0ZXIgMQorICogICAgICAgICAgICAgIAkocmVhZC93cml0ZSkuCisgKiAgICAgICAgICAgICAgCVtUaGUgTENDUjEgcmVnaXN0ZXIgY2FuIGJlIG9ubHkgd3JpdHRlbiBpbgorICogICAgICAgICAgICAgIAl2ZXJzaW9ucyAxLjAgKHJldi4gPSAxKSBhbmQgMS4xIChyZXYuID0gMikgb2YgdGhlCisgKiAgICAgICAgICAgICAgCVN0cm9uZ0FSTSBTQS0xMTAwLCBpdCBjYW4gYmUgd3JpdHRlbiBhbmQgcmVhZCBpbgorICogICAgICAgICAgICAgIAl2ZXJzaW9ucyAyLjAgKHJldi4gPSA4KSBhbmQgaGlnaGVyLl0KKyAqICAgIExDQ1IyICAgICAJTGlxdWlkIENyeXN0YWwgRGlzcGxheSAoTENEKSBDb250cm9sIFJlZ2lzdGVyIDIKKyAqICAgICAgICAgICAgICAJKHJlYWQvd3JpdGUpLgorICogICAgICAgICAgICAgIAlbVGhlIExDQ1IxIHJlZ2lzdGVyIGNhbiBiZSBvbmx5IHdyaXR0ZW4gaW4KKyAqICAgICAgICAgICAgICAJdmVyc2lvbnMgMS4wIChyZXYuID0gMSkgYW5kIDEuMSAocmV2LiA9IDIpIG9mIHRoZQorICogICAgICAgICAgICAgIAlTdHJvbmdBUk0gU0EtMTEwMCwgaXQgY2FuIGJlIHdyaXR0ZW4gYW5kIHJlYWQgaW4KKyAqICAgICAgICAgICAgICAJdmVyc2lvbnMgMi4wIChyZXYuID0gOCkgYW5kIGhpZ2hlci5dCisgKiAgICBMQ0NSMyAgICAgCUxpcXVpZCBDcnlzdGFsIERpc3BsYXkgKExDRCkgQ29udHJvbCBSZWdpc3RlciAzCisgKiAgICAgICAgICAgICAgCShyZWFkL3dyaXRlKS4KKyAqICAgICAgICAgICAgICAJW1RoZSBMQ0NSMSByZWdpc3RlciBjYW4gYmUgb25seSB3cml0dGVuIGluCisgKiAgICAgICAgICAgICAgCXZlcnNpb25zIDEuMCAocmV2LiA9IDEpIGFuZCAxLjEgKHJldi4gPSAyKSBvZiB0aGUKKyAqICAgICAgICAgICAgICAJU3Ryb25nQVJNIFNBLTExMDAsIGl0IGNhbiBiZSB3cml0dGVuIGFuZCByZWFkIGluCisgKiAgICAgICAgICAgICAgCXZlcnNpb25zIDIuMCAocmV2LiA9IDgpIGFuZCBoaWdoZXIuIEJpdCBQQ1AgaXMgb25seQorICogICAgICAgICAgICAgIAlpbXBsZW1lbnRlZCBpbiB2ZXJzaW9ucyAyLjAgKHJldi4gPSA4KSBhbmQgaGlnaGVyIG9mCisgKiAgICAgICAgICAgICAgCXRoZSBTdHJvbmdBUk0gU0EtMTEwMC5dCisgKgorICogQ2xvY2tzCisgKiAgICBmY3B1LCBUY3B1CUZyZXF1ZW5jeSwgcGVyaW9kIG9mIHRoZSBDUFUgY29yZSBjbG9jayAoQ0NMSykuCisgKiAgICBmbWVtLCBUbWVtCUZyZXF1ZW5jeSwgcGVyaW9kIG9mIHRoZSBtZW1vcnkgY2xvY2sgKGZtZW0gPSBmY3B1LzIpLgorICogICAgZnBpeCwgVHBpeAlGcmVxdWVuY3ksIHBlcmlvZCBvZiB0aGUgcGl4ZWwgY2xvY2suCisgKiAgICBmbG4sIFRsbiAgCUZyZXF1ZW5jeSwgcGVyaW9kIG9mIHRoZSBsaW5lIGNsb2NrLgorICogICAgZmFjLCBUYWMgIAlGcmVxdWVuY3ksIHBlcmlvZCBvZiB0aGUgQUMgYmlhcyBjbG9jay4KKyAqLworCisjZGVmaW5lIExDRF9QRW50cnlTcAkyICAgICAgIAkvKiBMQ0QgUGFsZXR0ZSBFbnRyeSBTcGFjZSBbYnl0ZV0gICovCisjZGVmaW5lIExDRF80Qml0UFNwCSAgICAgICAgCS8qIExDRCA0LUJpdCBwaXhlbCBQYWxldHRlIFNwYWNlICAgKi8gXAorICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBbYnl0ZV0gICAgICAgICAgICAgICAgICAgICAgICAgICovIFwKKyAgICAgICAgICAgICAgICAJKDE2KkxDRF9QRW50cnlTcCkKKyNkZWZpbmUgTENEXzhCaXRQU3AJICAgICAgICAJLyogTENEIDgtQml0IHBpeGVsIFBhbGV0dGUgU3BhY2UgICAqLyBcCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIFtieXRlXSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gXAorICAgICAgICAgICAgICAgIAkoMjU2KkxDRF9QRW50cnlTcCkKKyNkZWZpbmUgTENEXzEyXzE2Qml0UFNwCSAgICAgICAgCS8qIExDRCAxMi8xNi1CaXQgcGl4ZWwgICAgICAgICAgICAgKi8gXAorICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBkdW1teS1QYWxldHRlIFNwYWNlIFtieXRlXSAgICAgICovIFwKKyAgICAgICAgICAgICAgICAJKDE2KkxDRF9QRW50cnlTcCkKKworI2RlZmluZSBMQ0RfUEdyZXkJRmxkICg0LCAwKQkvKiBMQ0QgUGFsZXR0ZSBlbnRyeSBHcmV5IHZhbHVlICAgICovCisjZGVmaW5lIExDRF9QQmx1ZQlGbGQgKDQsIDApCS8qIExDRCBQYWxldHRlIGVudHJ5IEJsdWUgdmFsdWUgICAgKi8KKyNkZWZpbmUgTENEX1BHcmVlbglGbGQgKDQsIDQpCS8qIExDRCBQYWxldHRlIGVudHJ5IEdyZWVuIHZhbHVlICAgKi8KKyNkZWZpbmUgTENEX1BSZWQJRmxkICg0LCA4KQkvKiBMQ0QgUGFsZXR0ZSBlbnRyeSBSZWQgdmFsdWUgICAgICovCisjZGVmaW5lIExDRF9QQlMgCUZsZCAoMiwgMTIpCS8qIExDRCBQaXhlbCBCaXQgU2l6ZSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTENEXzRCaXQJICAgICAgICAJLyogIExDRCA0LUJpdCBwaXhlbCBtb2RlICAgICAgICAgICAqLyBcCisgICAgICAgICAgICAgICAgCSgwIDw8IEZTaGZ0IChMQ0RfUEJTKSkKKyNkZWZpbmUgTENEXzhCaXQJICAgICAgICAJLyogIExDRCA4LUJpdCBwaXhlbCBtb2RlICAgICAgICAgICAqLyBcCisgICAgICAgICAgICAgICAgCSgxIDw8IEZTaGZ0IChMQ0RfUEJTKSkKKyNkZWZpbmUgTENEXzEyXzE2Qml0CSAgICAgICAgCS8qICBMQ0QgMTIvMTYtQml0IHBpeGVsIG1vZGUgICAgICAgKi8gXAorICAgICAgICAgICAgICAgIAkoMiA8PCBGU2hmdCAoTENEX1BCUykpCisKKyNkZWZpbmUgTENEX0ludDBfMAkweDAgICAgIAkvKiBMQ0QgSW50ZW5zaXR5ID0gICAwLjAlID0gIDAgICAgICovCisjZGVmaW5lIExDRF9JbnQxMV8xCTB4MSAgICAgCS8qIExDRCBJbnRlbnNpdHkgPSAgMTEuMSUgPSAgMS85ICAgKi8KKyNkZWZpbmUgTENEX0ludDIwXzAJMHgyICAgICAJLyogTENEIEludGVuc2l0eSA9ICAyMC4wJSA9ICAxLzUgICAqLworI2RlZmluZSBMQ0RfSW50MjZfNwkweDMgICAgIAkvKiBMQ0QgSW50ZW5zaXR5ID0gIDI2LjclID0gIDQvMTUgICovCisjZGVmaW5lIExDRF9JbnQzM18zCTB4NCAgICAgCS8qIExDRCBJbnRlbnNpdHkgPSAgMzMuMyUgPSAgMy85ICAgKi8KKyNkZWZpbmUgTENEX0ludDQwXzAJMHg1ICAgICAJLyogTENEIEludGVuc2l0eSA9ICA0MC4wJSA9ICAyLzUgICAqLworI2RlZmluZSBMQ0RfSW50NDRfNAkweDYgICAgIAkvKiBMQ0QgSW50ZW5zaXR5ID0gIDQ0LjQlID0gIDQvOSAgICovCisjZGVmaW5lIExDRF9JbnQ1MF8wCTB4NyAgICAgCS8qIExDRCBJbnRlbnNpdHkgPSAgNTAuMCUgPSAgMS8yICAgKi8KKyNkZWZpbmUgTENEX0ludDU1XzYJMHg4ICAgICAJLyogTENEIEludGVuc2l0eSA9ICA1NS42JSA9ICA1LzkgICAqLworI2RlZmluZSBMQ0RfSW50NjBfMAkweDkgICAgIAkvKiBMQ0QgSW50ZW5zaXR5ID0gIDYwLjAlID0gIDMvNSAgICovCisjZGVmaW5lIExDRF9JbnQ2Nl83CTB4QSAgICAgCS8qIExDRCBJbnRlbnNpdHkgPSAgNjYuNyUgPSAgNi85ICAgKi8KKyNkZWZpbmUgTENEX0ludDczXzMJMHhCICAgICAJLyogTENEIEludGVuc2l0eSA9ICA3My4zJSA9IDExLzE1ICAqLworI2RlZmluZSBMQ0RfSW50ODBfMAkweEMgICAgIAkvKiBMQ0QgSW50ZW5zaXR5ID0gIDgwLjAlID0gIDQvNSAgICovCisjZGVmaW5lIExDRF9JbnQ4OF85CTB4RCAgICAgCS8qIExDRCBJbnRlbnNpdHkgPSAgODguOSUgPSAgOC85ICAgKi8KKyNkZWZpbmUgTENEX0ludDEwMF8wCTB4RSAgICAgCS8qIExDRCBJbnRlbnNpdHkgPSAxMDAuMCUgPSAgMSAgICAgKi8KKyNkZWZpbmUgTENEX0ludDEwMF8wQQkweEYgICAgIAkvKiBMQ0QgSW50ZW5zaXR5ID0gMTAwLjAlID0gIDEgICAgICovCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIChBbHRlcm5hdGl2ZSkgICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBMQ0NSMAkJX19SRUcoMHhCMDEwMDAwMCkgIC8qIExDRCBDb250cm9sIFJlZy4gMCAqLworI2RlZmluZSBMQ1NSCQlfX1JFRygweEIwMTAwMDA0KSAgLyogTENEIFN0YXR1cyBSZWcuICovCisjZGVmaW5lIERCQVIxCQlfX1JFRygweEIwMTAwMDEwKSAgLyogTENEIERNQSBCYXNlIEFkZHJlc3MgUmVnLiBjaGFubmVsIDEgKi8KKyNkZWZpbmUgRENBUjEJCV9fUkVHKDB4QjAxMDAwMTQpICAvKiBMQ0QgRE1BIEN1cnJlbnQgQWRkcmVzcyBSZWcuIGNoYW5uZWwgMSAqLworI2RlZmluZSBEQkFSMgkJX19SRUcoMHhCMDEwMDAxOCkgIC8qIExDRCBETUEgQmFzZSBBZGRyZXNzIFJlZy4gIGNoYW5uZWwgMiAqLworI2RlZmluZSBEQ0FSMgkJX19SRUcoMHhCMDEwMDAxQykgIC8qIExDRCBETUEgQ3VycmVudCBBZGRyZXNzIFJlZy4gY2hhbm5lbCAyICovCisjZGVmaW5lIExDQ1IxCQlfX1JFRygweEIwMTAwMDIwKSAgLyogTENEIENvbnRyb2wgUmVnLiAxICovCisjZGVmaW5lIExDQ1IyCQlfX1JFRygweEIwMTAwMDI0KSAgLyogTENEIENvbnRyb2wgUmVnLiAyICovCisjZGVmaW5lIExDQ1IzCQlfX1JFRygweEIwMTAwMDI4KSAgLyogTENEIENvbnRyb2wgUmVnLiAzICovCisKKyNkZWZpbmUgTENDUjBfTEVOCTB4MDAwMDAwMDEJLyogTENEIEVOYWJsZSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBMQ0NSMF9DTVMJMHgwMDAwMDAwMgkvKiBDb2xvci9Nb25vY2hyb21lIGRpc3BsYXkgU2VsZWN0ICovCisjZGVmaW5lIExDQ1IwX0NvbG9yCShMQ0NSMF9DTVMqMCkJLyogIENvbG9yIGRpc3BsYXkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBMQ0NSMF9Nb25vCShMQ0NSMF9DTVMqMSkJLyogIE1vbm9jaHJvbWUgZGlzcGxheSAgICAgICAgICAgICAqLworI2RlZmluZSBMQ0NSMF9TRFMJMHgwMDAwMDAwNAkvKiBTaW5nbGUvRHVhbCBwYW5lbCBkaXNwbGF5ICAgICAgICovCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIFNlbGVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTENDUjBfU25nbAkoTENDUjBfU0RTKjApCS8qICBTaW5nbGUgcGFuZWwgZGlzcGxheSAgICAgICAgICAgKi8KKyNkZWZpbmUgTENDUjBfRHVhbAkoTENDUjBfU0RTKjEpCS8qICBEdWFsIHBhbmVsIGRpc3BsYXkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTENDUjBfTERNCTB4MDAwMDAwMDgJLyogTENEIERpc2FibGUgZG9uZSAoTEREKSAgICAgICAgICAqLworICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBpbnRlcnJ1cHQgTWFzayAoZGlzYWJsZSkgICAgICAgICovCisjZGVmaW5lIExDQ1IwX0JBTQkweDAwMDAwMDEwCS8qIEJhc2UgQWRkcmVzcyB1cGRhdGUgKEJBVSkgICAgICAgKi8KKyAgICAgICAgICAgICAgICAJICAgICAgICAJLyogaW50ZXJydXB0IE1hc2sgKGRpc2FibGUpICAgICAgICAqLworI2RlZmluZSBMQ0NSMF9FUk0JMHgwMDAwMDAyMAkvKiBMQ0QgRVJyb3IgKEJFUiwgSU9MLCBJVUwsIElPVSwgICovCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIElVVSwgT09MLCBPVUwsIE9PVSwgYW5kIE9VVSkgICAgKi8KKyAgICAgICAgICAgICAgICAJICAgICAgICAJLyogaW50ZXJydXB0IE1hc2sgKGRpc2FibGUpICAgICAgICAqLworI2RlZmluZSBMQ0NSMF9QQVMJMHgwMDAwMDA4MAkvKiBQYXNzaXZlL0FjdGl2ZSBkaXNwbGF5IFNlbGVjdCAgICovCisjZGVmaW5lIExDQ1IwX1BhcwkoTENDUjBfUEFTKjApCS8qICBQYXNzaXZlIGRpc3BsYXkgKFNUTikgICAgICAgICAgKi8KKyNkZWZpbmUgTENDUjBfQWN0CShMQ0NSMF9QQVMqMSkJLyogIEFjdGl2ZSBkaXNwbGF5IChURlQpICAgICAgICAgICAqLworI2RlZmluZSBMQ0NSMF9CTEUJMHgwMDAwMDEwMAkvKiBCaWcvTGl0dGxlIEVuZGlhbiBzZWxlY3QgICAgICAgICovCisjZGVmaW5lIExDQ1IwX0x0bEVuZAkoTENDUjBfQkxFKjApCS8qICBMaXR0bGUgRW5kaWFuIGZyYW1lIGJ1ZmZlciAgICAgKi8KKyNkZWZpbmUgTENDUjBfQmlnRW5kCShMQ0NSMF9CTEUqMSkJLyogIEJpZyBFbmRpYW4gZnJhbWUgYnVmZmVyICAgICAgICAqLworI2RlZmluZSBMQ0NSMF9EUEQJMHgwMDAwMDIwMAkvKiBEb3VibGUgUGl4ZWwgRGF0YSAobW9ub2Nocm9tZSAgICovCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIGRpc3BsYXkgbW9kZSkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTENDUjBfNFBpeE1vbm8JKExDQ1IwX0RQRCowKQkvKiAgNC1QaXhlbC9jbG9jayBNb25vY2hyb21lICAgICAgICovCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qICBkaXNwbGF5ICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTENDUjBfOFBpeE1vbm8JKExDQ1IwX0RQRCoxKQkvKiAgOC1QaXhlbC9jbG9jayBNb25vY2hyb21lICAgICAgICovCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qICBkaXNwbGF5ICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTENDUjBfUERECUZsZCAoOCwgMTIpCS8qIFBhbGV0dGUgRE1BIHJlcXVlc3QgRGVsYXkgICAgICAgKi8KKyAgICAgICAgICAgICAgICAJICAgICAgICAJLyogW1RtZW1dICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBMQ0NSMF9ETUFEZWwoVGNwdSkgICAgICAJLyogIHBhbGV0dGUgRE1BIHJlcXVlc3QgRGVsYXkgICAgICAqLyBcCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qICBbMC4uNTEwIFRjcHVdICAgICAgICAgICAgICAgICAgKi8gXAorICAgICAgICAgICAgICAgIAkoKFRjcHUpLzIgPDwgRlNoZnQgKExDQ1IwX1BERCkpCisKKyNkZWZpbmUgTENTUl9MREQJMHgwMDAwMDAwMQkvKiBMQ0QgRGlzYWJsZSBEb25lICAgICAgICAgICAgICAgICovCisjZGVmaW5lIExDU1JfQkFVCTB4MDAwMDAwMDIJLyogQmFzZSBBZGRyZXNzIFVwZGF0ZSAocmVhZCkgICAgICAqLworI2RlZmluZSBMQ1NSX0JFUgkweDAwMDAwMDA0CS8qIEJ1cyBFUnJvciAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTENTUl9BQkMJMHgwMDAwMDAwOAkvKiBBQyBCaWFzIGNsb2NrIENvdW50ICAgICAgICAgICAgICovCisjZGVmaW5lIExDU1JfSU9MCTB4MDAwMDAwMTAJLyogSW5wdXQgRklGTyBPdmVyLXJ1biBMb3dlciAgICAgICAqLworICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBwYW5lbCAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIExDU1JfSVVMCTB4MDAwMDAwMjAJLyogSW5wdXQgRklGTyBVbmRlci1ydW4gTG93ZXIgICAgICAqLworICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBwYW5lbCAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIExDU1JfSU9VCTB4MDAwMDAwNDAJLyogSW5wdXQgRklGTyBPdmVyLXJ1biBVcHBlciAgICAgICAqLworICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBwYW5lbCAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIExDU1JfSVVVCTB4MDAwMDAwODAJLyogSW5wdXQgRklGTyBVbmRlci1ydW4gVXBwZXIgICAgICAqLworICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBwYW5lbCAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIExDU1JfT09MCTB4MDAwMDAxMDAJLyogT3V0cHV0IEZJRk8gT3Zlci1ydW4gTG93ZXIgICAgICAqLworICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBwYW5lbCAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIExDU1JfT1VMCTB4MDAwMDAyMDAJLyogT3V0cHV0IEZJRk8gVW5kZXItcnVuIExvd2VyICAgICAqLworICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBwYW5lbCAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIExDU1JfT09VCTB4MDAwMDA0MDAJLyogT3V0cHV0IEZJRk8gT3Zlci1ydW4gVXBwZXIgICAgICAqLworICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBwYW5lbCAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIExDU1JfT1VVCTB4MDAwMDA4MDAJLyogT3V0cHV0IEZJRk8gVW5kZXItcnVuIFVwcGVyICAgICAqLworICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBwYW5lbCAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgTENDUjFfUFBMCUZsZCAoNiwgNCkJLyogUGl4ZWxzIFBlciBMaW5lLzE2IC0gMSAgICAgICAgICAqLworI2RlZmluZSBMQ0NSMV9EaXNXZHRoKFBpeGVsKSAgICAJLyogIERpc3BsYXkgV2lkdGggWzE2Li4xMDI0IHBpeC5dICAqLyBcCisgICAgICAgICAgICAgICAgCSgoKFBpeGVsKSAtIDE2KS8xNiA8PCBGU2hmdCAoTENDUjFfUFBMKSkKKyNkZWZpbmUgTENDUjFfSFNXCUZsZCAoNiwgMTApCS8qIEhvcml6b250YWwgU3luY2hyb25pemF0aW9uICAgICAgKi8KKyAgICAgICAgICAgICAgICAJICAgICAgICAJLyogcHVsc2UgV2lkdGggLSAxIFtUcGl4XSAoTF9MQ0xLKSAqLworI2RlZmluZSBMQ0NSMV9Ib3JTbmNoV2R0aChUcGl4KSAJLyogIEhvcml6b250YWwgU3luY2hyb25pemF0aW9uICAgICAqLyBcCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qICBwdWxzZSBXaWR0aCBbMS4uNjQgVHBpeF0gICAgICAgKi8gXAorICAgICAgICAgICAgICAgIAkoKChUcGl4KSAtIDEpIDw8IEZTaGZ0IChMQ0NSMV9IU1cpKQorI2RlZmluZSBMQ0NSMV9FTFcJRmxkICg4LCAxNikJLyogRW5kLW9mLUxpbmUgcGl4ZWwgY2xvY2sgV2FpdCAgICAqLworICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBjb3VudCAtIDEgW1RwaXhdICAgICAgICAgICAgICAgICovCisjZGVmaW5lIExDQ1IxX0VuZExuRGVsKFRwaXgpICAgIAkvKiAgRW5kLW9mLUxpbmUgRGVsYXkgICAgICAgICAgICAgICovIFwKKyAgICAgICAgICAgICAgICAJICAgICAgICAJLyogIFsxLi4yNTYgVHBpeF0gICAgICAgICAgICAgICAgICAqLyBcCisgICAgICAgICAgICAgICAgCSgoKFRwaXgpIC0gMSkgPDwgRlNoZnQgKExDQ1IxX0VMVykpCisjZGVmaW5lIExDQ1IxX0JMVwlGbGQgKDgsIDI0KQkvKiBCZWdpbm5pbmctb2YtTGluZSBwaXhlbCBjbG9jayAgICovCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIFdhaXQgY291bnQgLSAxIFtUcGl4XSAgICAgICAgICAgKi8KKyNkZWZpbmUgTENDUjFfQmVnTG5EZWwoVHBpeCkgICAgCS8qICBCZWdpbm5pbmctb2YtTGluZSBEZWxheSAgICAgICAgKi8gXAorICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAgWzEuLjI1NiBUcGl4XSAgICAgICAgICAgICAgICAgICovIFwKKyAgICAgICAgICAgICAgICAJKCgoVHBpeCkgLSAxKSA8PCBGU2hmdCAoTENDUjFfQkxXKSkKKworI2RlZmluZSBMQ0NSMl9MUFAJRmxkICgxMCwgMCkJLyogTGluZSBQZXIgUGFuZWwgLSAxICAgICAgICAgICAgICAqLworI2RlZmluZSBMQ0NSMl9EaXNIZ2h0KExpbmUpICAgICAJLyogIERpc3BsYXkgSGVpZ2h0IFsxLi4xMDI0IGxpbmVzXSAqLyBcCisgICAgICAgICAgICAgICAgCSgoKExpbmUpIC0gMSkgPDwgRlNoZnQgKExDQ1IyX0xQUCkpCisjZGVmaW5lIExDQ1IyX1ZTVwlGbGQgKDYsIDEwKQkvKiBWZXJ0aWNhbCBTeW5jaHJvbml6YXRpb24gcHVsc2UgICovCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIFdpZHRoIC0gMSBbVGxuXSAoTF9GQ0xLKSAgICAgICAgKi8KKyNkZWZpbmUgTENDUjJfVnJ0U25jaFdkdGgoVGxuKSAgCS8qICBWZXJ0aWNhbCBTeW5jaHJvbml6YXRpb24gcHVsc2UgKi8gXAorICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAgV2lkdGggWzEuLjY0IFRsbl0gICAgICAgICAgICAgICovIFwKKyAgICAgICAgICAgICAgICAJKCgoVGxuKSAtIDEpIDw8IEZTaGZ0IChMQ0NSMl9WU1cpKQorI2RlZmluZSBMQ0NSMl9FRlcJRmxkICg4LCAxNikJLyogRW5kLW9mLUZyYW1lIGxpbmUgY2xvY2sgV2FpdCAgICAqLworICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBjb3VudCBbVGxuXSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIExDQ1IyX0VuZEZybURlbChUbG4pICAgIAkvKiAgRW5kLW9mLUZyYW1lIERlbGF5ICAgICAgICAgICAgICovIFwKKyAgICAgICAgICAgICAgICAJICAgICAgICAJLyogIFswLi4yNTUgVGxuXSAgICAgICAgICAgICAgICAgICAqLyBcCisgICAgICAgICAgICAgICAgCSgoVGxuKSA8PCBGU2hmdCAoTENDUjJfRUZXKSkKKyNkZWZpbmUgTENDUjJfQkZXCUZsZCAoOCwgMjQpCS8qIEJlZ2lubmluZy1vZi1GcmFtZSBsaW5lIGNsb2NrICAgKi8KKyAgICAgICAgICAgICAgICAJICAgICAgICAJLyogV2FpdCBjb3VudCBbVGxuXSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBMQ0NSMl9CZWdGcm1EZWwoVGxuKSAgICAJLyogIEJlZ2lubmluZy1vZi1GcmFtZSBEZWxheSAgICAgICAqLyBcCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qICBbMC4uMjU1IFRsbl0gICAgICAgICAgICAgICAgICAgKi8gXAorICAgICAgICAgICAgICAgIAkoKFRsbikgPDwgRlNoZnQgKExDQ1IyX0JGVykpCisKKyNkZWZpbmUgTENDUjNfUENECUZsZCAoOCwgMCkJLyogUGl4ZWwgQ2xvY2sgRGl2aXNvci8yIC0gMiAgICAgICAqLworICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBbMS4uMjU1XSAoTF9QQ0xLKSAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIGZwaXggPSBmY3B1LygyKihQQ0QgKyAyKSkgICAgICAgKi8KKyAgICAgICAgICAgICAgICAJICAgICAgICAJLyogVHBpeCA9IDIqKFBDRCArIDIpKlRjcHUgICAgICAgICAqLworI2RlZmluZSBMQ0NSM19QaXhDbGtEaXYoRGl2KSAgICAJLyogIFBpeGVsIENsb2NrIERpdmlzb3IgWzYuLjUxNF0gICAqLyBcCisgICAgICAgICAgICAgICAgCSgoKERpdikgLSA0KS8yIDw8IEZTaGZ0IChMQ0NSM19QQ0QpKQorICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAgZnBpeCA9IGZjcHUvKDIqRmxvb3IgKERpdi8yKSkgICovCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qICBUcGl4ID0gMipGbG9vciAoRGl2LzIpKlRjcHUgICAgKi8KKyNkZWZpbmUgTENDUjNfQ2VpbFBpeENsa0RpdihEaXYpCS8qICBDZWlsLiBvZiBQaXhDbGtEaXYgWzYuLjUxNF0gICAgKi8gXAorICAgICAgICAgICAgICAgIAkoKChEaXYpIC0gMykvMiA8PCBGU2hmdCAoTENDUjNfUENEKSkKKyAgICAgICAgICAgICAgICAJICAgICAgICAJLyogIGZwaXggPSBmY3B1LygyKkNlaWwgKERpdi8yKSkgICAqLworICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAgVHBpeCA9IDIqQ2VpbCAoRGl2LzIpKlRjcHUgICAgICovCisjZGVmaW5lIExDQ1IzX0FDQglGbGQgKDgsIDgpCS8qIEFDIEJpYXMgY2xvY2sgaGFsZiBwZXJpb2QgLSAxICAgKi8KKyAgICAgICAgICAgICAgICAJICAgICAgICAJLyogW1Rsbl0gKExfQklBUykgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBMQ0NSM19BQ0JzRGl2KERpdikgICAgICAJLyogIEFDIEJpYXMgY2xvY2sgRGl2aXNvciBbMi4uNTEyXSAqLyBcCisgICAgICAgICAgICAgICAgCSgoKERpdikgLSAyKS8yIDw8IEZTaGZ0IChMQ0NSM19BQ0IpKQorICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAgZmFjID0gZmxuLygyKkZsb29yIChEaXYvMikpICAgICovCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qICBUYWMgPSAyKkZsb29yIChEaXYvMikqVGxuICAgICAgKi8KKyNkZWZpbmUgTENDUjNfQ2VpbEFDQnNEaXYoRGl2KSAgCS8qICBDZWlsLiBvZiBBQ0JzRGl2IFsyLi41MTJdICAgICAgKi8gXAorICAgICAgICAgICAgICAgIAkoKChEaXYpIC0gMSkvMiA8PCBGU2hmdCAoTENDUjNfQUNCKSkKKyAgICAgICAgICAgICAgICAJICAgICAgICAJLyogIGZhYyA9IGZsbi8oMipDZWlsIChEaXYvMikpICAgICAqLworICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAgVGFjID0gMipDZWlsIChEaXYvMikqVGxuICAgICAgICovCisjZGVmaW5lIExDQ1IzX0FQSQlGbGQgKDQsIDE2KQkvKiBBQyBiaWFzIFBpbiB0cmFuc2l0aW9ucyBwZXIgICAgICovCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTENDUjNfQUNCc0NudE9mZiAgICAgICAgCS8qICBBQyBCaWFzIGNsb2NrIHRyYW5zaXRpb24gQ291bnQgKi8gXAorICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAgT2ZmICAgICAgICAgICAgICAgICAgICAgICAgICAgICovIFwKKyAgICAgICAgICAgICAgICAJKDAgPDwgRlNoZnQgKExDQ1IzX0FQSSkpCisjZGVmaW5lIExDQ1IzX0FDQnNDbnQoVHJhbnMpICAgIAkvKiAgQUMgQmlhcyBjbG9jayB0cmFuc2l0aW9uIENvdW50ICovIFwKKyAgICAgICAgICAgICAgICAJICAgICAgICAJLyogIFsxLi4xNV0gICAgICAgICAgICAgICAgICAgICAgICAqLyBcCisgICAgICAgICAgICAgICAgCSgoVHJhbnMpIDw8IEZTaGZ0IChMQ0NSM19BUEkpKQorI2RlZmluZSBMQ0NSM19WU1AJMHgwMDEwMDAwMAkvKiBWZXJ0aWNhbCBTeW5jaHJvbml6YXRpb24gcHVsc2UgICovCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIFBvbGFyaXR5IChMX0ZDTEspICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTENDUjNfVnJ0U25jaEgJKExDQ1IzX1ZTUCowKQkvKiAgVmVydGljYWwgU3luY2hyb25pemF0aW9uIHB1bHNlICovCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qICBhY3RpdmUgSGlnaCAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTENDUjNfVnJ0U25jaEwJKExDQ1IzX1ZTUCoxKQkvKiAgVmVydGljYWwgU3luY2hyb25pemF0aW9uIHB1bHNlICovCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qICBhY3RpdmUgTG93ICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTENDUjNfSFNQCTB4MDAyMDAwMDAJLyogSG9yaXpvbnRhbCBTeW5jaHJvbml6YXRpb24gICAgICAqLworICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBwdWxzZSBQb2xhcml0eSAoTF9MQ0xLKSAgICAgICAgICovCisjZGVmaW5lIExDQ1IzX0hvclNuY2hICShMQ0NSM19IU1AqMCkJLyogIEhvcml6b250YWwgU3luY2hyb25pemF0aW9uICAgICAqLworICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAgcHVsc2UgYWN0aXZlIEhpZ2ggICAgICAgICAgICAgICovCisjZGVmaW5lIExDQ1IzX0hvclNuY2hMCShMQ0NSM19IU1AqMSkJLyogIEhvcml6b250YWwgU3luY2hyb25pemF0aW9uICAgICAqLworICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAgcHVsc2UgYWN0aXZlIExvdyAgICAgICAgICAgICAgICovCisjZGVmaW5lIExDQ1IzX1BDUAkweDAwNDAwMDAwCS8qIFBpeGVsIENsb2NrIFBvbGFyaXR5IChMX1BDTEspICAgKi8KKyNkZWZpbmUgTENDUjNfUGl4UnNFZGcJKExDQ1IzX1BDUCowKQkvKiAgUGl4ZWwgY2xvY2sgUmlzaW5nLUVkZ2UgICAgICAgICovCisjZGVmaW5lIExDQ1IzX1BpeEZsRWRnCShMQ0NSM19QQ1AqMSkJLyogIFBpeGVsIGNsb2NrIEZhbGxpbmctRWRnZSAgICAgICAqLworI2RlZmluZSBMQ0NSM19PRVAJMHgwMDgwMDAwMAkvKiBPdXRwdXQgRW5hYmxlIFBvbGFyaXR5IChMX0JJQVMsICovCisgICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIGFjdGl2ZSBkaXNwbGF5IG1vZGUpICAgICAgICAgICAgKi8KKyNkZWZpbmUgTENDUjNfT3V0RW5ICShMQ0NSM19PRVAqMCkJLyogIE91dHB1dCBFbmFibGUgYWN0aXZlIEhpZ2ggICAgICAqLworI2RlZmluZSBMQ0NSM19PdXRFbkwJKExDQ1IzX09FUCoxKQkvKiAgT3V0cHV0IEVuYWJsZSBhY3RpdmUgTG93ICAgICAgICovCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitleHRlcm4gdW5zaWduZWQgaW50IHByb2Nlc3Nvcl9pZDsKKyNlbmRpZgorCisjZGVmaW5lIENQVV9SRVZJU0lPTgkocHJvY2Vzc29yX2lkICYgMTUpCisjZGVmaW5lIENQVV9TQTExMTBfQTAJKDApCisjZGVmaW5lIENQVV9TQTExMTBfQjAJKDQpCisjZGVmaW5lIENQVV9TQTExMTBfQjEJKDUpCisjZGVmaW5lIENQVV9TQTExMTBfQjIJKDYpCisjZGVmaW5lIENQVV9TQTExMTBfQjQJKDgpCisKKyNkZWZpbmUgQ1BVX1NBMTEwMF9JRAkoMHg0NDAxYTExMCkKKyNkZWZpbmUgQ1BVX1NBMTEwMF9NQVNLCSgweGZmZmZmZmYwKQorI2RlZmluZSBDUFVfU0ExMTEwX0lECSgweDY5MDFiMTEwKQorI2RlZmluZSBDUFVfU0ExMTEwX01BU0sJKDB4ZmZmZmZmZjApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvU0EtMTEwMS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL1NBLTExMDEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjdkODg3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL1NBLTExMDEuaApAQCAtMCwwICsxLDkyNSBAQAorLyoKKyAqIFNBLTExMDEuaAorICoKKyAqIENvcHlyaWdodCAoYykgUGV0ZXIgRGFuaWVsc3NvbiAxOTk5CisgKgorICogRGVmaW5pdGlvbiBvZiBjb25zdGFudHMgcmVsYXRlZCB0byB0aGUgc2ExMTAxCisgKiBzdXBwb3J0IGNoaXAgZm9yIHRoZSBzYTExMDAKKyAqCisgKi8KKworCisvKiBCZSBzdXJlIHRoYXQgdmlydHVhbCBtYXBwaW5nIGlzIGRlZmluZWQgcmlnaHQgKi8KKyNpZm5kZWYgX19BU01fQVJDSF9IQVJEV0FSRV9ICisjZXJyb3IgWW91IG11c3QgaW5jbHVkZSBoYXJkd2FyZS5oIG5vdCBTQS0xMTAxLmgKKyNlbmRpZgorCisjaWZuZGVmIFNBMTEwMV9CQVNFCisjZXJyb3IgWW91IG11c3QgZGVmaW5lIFNBLTExMDEgcGh5c2ljYWwgYmFzZSBhZGRyZXNzCisjZW5kaWYKKworI2lmbmRlZiBMQU5HVUFHRQorIyBpZmRlZiBfX0FTU0VNQkxZX18KKyMgIGRlZmluZSBMQU5HVUFHRSBBc3NlbWJseQorIyBlbHNlCisjICBkZWZpbmUgTEFOR1VBR0UgQworIyBlbmRpZgorI2VuZGlmCisKKy8qCisgKiBXZSBoYXZlIG1hcHBlZCB0aGUgc2ExMTAxIGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgU0ExMTAxX0JBU0UuCisgKiBJdCB0aGVuIGFwcGVhcnMgZnJvbSAweGY0MDAwMDAwLgorICovCisKKyNkZWZpbmUgU0ExMTAxX3AydiggeCApICAgICAgICAgKCh4KSAtIFNBMTEwMV9CQVNFICsgMHhmNDAwMDAwMCkKKyNkZWZpbmUgU0ExMTAxX3YycCggeCApICAgICAgICAgKCh4KSAtIDB4ZjQwMDAwMDAgICsgU0ExMTAxX0JBU0UpCisKKyNpZm5kZWYgU0ExMTAxX3AydgorI2RlZmluZSBTQTExMDFfcDJ2KFBoQWRkKSAgKFBoQWRkKQorI2VuZGlmCisKKyNpbmNsdWRlIDxhc20vYXJjaC9iaXRmaWVsZC5oPgorCisjZGVmaW5lIEMgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFzc2VtYmx5ICAgICAgICAxCisKKworLyoKKyAqIE1lbW9yeSBtYXAKKyAqLworCisjZGVmaW5lIF9fU0hNRU1fQ09OVFJPTDAJMHgwMDAwMDAwMAorI2RlZmluZSBfX1NZU1RFTV9DT05UUk9MMQkweDAwMDAwNDAwCisjZGVmaW5lIF9fQVJCSVRFUgkJMHgwMDAyMDAwMAorI2RlZmluZSBfX1NZU1RFTV9DT05UUk9MMgkweDAwMDQwMDAwCisjZGVmaW5lIF9fU1lTVEVNX0NPTlRST0wzCTB4MDAwNjAwMDAKKyNkZWZpbmUgX19QQVJBTExFTF9QT1JUCQkweDAwMDgwMDAwCisjZGVmaW5lIF9fVklETUVNX0NPTlRST0wJMHgwMDEwMDAwMAorI2RlZmluZSBfX1VQREFURV9GSUZPCQkweDAwMTIwMDAwCisjZGVmaW5lIF9fU0hNRU1fQ09OVFJPTDEJMHgwMDE0MDAwMAorI2RlZmluZSBfX0lOVEVSUlVQVF9DT05UUk9MCTB4MDAxNjAwMDAKKyNkZWZpbmUgX19VU0JfQ09OVFJPTAkJMHgwMDE4MDAwMAorI2RlZmluZSBfX1RSQUNLX0lOVEVSRkFDRQkweDAwMWEwMDAwCisjZGVmaW5lIF9fTU9VU0VfSU5URVJGQUNFCTB4MDAxYjAwMDAKKyNkZWZpbmUgX19LRVlQQURfSU5URVJGQUNFCTB4MDAxYzAwMDAKKyNkZWZpbmUgX19QQ01DSUFfSU5URVJGQUNFCTB4MDAxZTAwMDAKKyNkZWZpbmUJX19WR0FfQ09OVFJPTAkJMHgwMDIwMDAwMAorI2RlZmluZSBfX0dQSU9fSU5URVJGQUNFCTB4MDAzMDAwMDAKKworLyoKKyAqIE1hY3JvIHRoYXQgY2FsY3VsYXRlcyByZWFsIGFkZHJlc3MgZm9yIHJlZ2lzdGVycyBpbiB0aGUgU0EtMTEwMQorICovCisKKyNkZWZpbmUgX1NBMTEwMSggeCApICAgICgoeCkgKyBTQTExMDFfQkFTRSkKKworLyoKKyAqIEludGVyZmFjZSBhbmQgc2hhcmVkIG1lbW9yeSBjb250cm9sbGVyIHJlZ2lzdGVycworICoKKyAqIFJlZ2lzdGVycworICoJU0tDUgkJU0EtMTEwMSBjb250cm9sIHJlZ2lzdGVyIChyZWFkL3dyaXRlKQorICoJU01DUgkJU2hhcmVkIE1lbW9yeSBDb250cm9sbGVyIFJlZ2lzdGVyCisgKglTTlBSCQlTbm9vcCBSZWdpc3RlcgorICovCisKKyNkZWZpbmUgX1NLQ1IJCV9TQTExMDEoIDB4MDAwMDAwMDAgKSAvKiBTQS0xMTAxIENvbnRyb2wgUmVnLiAqLworI2RlZmluZSBfU01DUgkJX1NBMTEwMSggMHgwMDE0MDAwMCApIC8qIFNoYXJlZCBNZW0uIENvbnRyb2wgUmVnLiAqLworI2RlZmluZSBfU05QUgkJX1NBMTEwMSggMHgwMDE0MDQwMCApIC8qIFNub29wIFJlZy4gKi8KKworI2lmIExBTkdVQUdFID09IEMKKyNkZWZpbmUgU0tDUgkJKCooKHZvbGF0aWxlIFdvcmQgKikgU0ExMTAxX3AydiAoX1NLQ1IpKSkKKyNkZWZpbmUgU01DUgkJKCooKHZvbGF0aWxlIFdvcmQgKikgU0ExMTAxX3AydiAoX1NNQ1IpKSkKKyNkZWZpbmUgU05QUgkJKCooKHZvbGF0aWxlIFdvcmQgKikgU0ExMTAxX3AydiAoX1NOUFIpKSkKKworI2RlZmluZSBTS0NSX1BMTEVuCSAgMHgwMDAxCSAgLyogRW5hYmxlIE9uLUNoaXAgUExMICovCisjZGVmaW5lIFNLQ1JfQkNMS0VuCSAgMHgwMDAyCSAgLyogRW5hYmxlcyBCQ0xLICovCisjZGVmaW5lIFNLQ1JfU2xlZXAJICAweDAwMDQJICAvKiBTbGVlcCBNb2RlICovCisjZGVmaW5lIFNLQ1JfSVJlZkVuCSAgMHgwMDA4CSAgLyogREFDIElyZWYgaW5wdXQgZW5hYmxlICovCisjZGVmaW5lIFNLQ1JfVkNPT04JICAweDAwMTAJICAvKiBWQ08gYmlhcyAqLworI2RlZmluZSBTS0NSX1NjYW5UZXN0RW4JICAweDAwMjAJICAvKiBFbmFibGVzIHNjYW4gdGVzdCAqLworI2RlZmluZSBTS0NSX0Nsb2NrVGVzdEVuICAweDAwNDAJICAvKiBFbmFibGVzIGNsb2NrIHRlc3QgKi8KKworI2RlZmluZSBTTUNSX0RDQUMJICBGbGQoMiwwKQkgIC8qIE51bWJlciBvZiBjb2x1bW4gYWRkcmVzcyBiaXRzICovCisjZGVmaW5lIFNNQ1JfRFJBQwkgIEZsZCgyLDIpCSAgLyogTnVtYmVyIG9mIHJvdyBhZGRyZXNzIGJpdHMgKi8KKyNkZWZpbmUgU01DUl9BcmJpdGVyQmlhcyAgMHgwMDA4CSAgLyogZmF2b3IgdmlkZW8gb3IgVVNCICovCisjZGVmaW5lIFNNQ1JfVG9wVmlkTWVtCSAgRmxkKDQsNSkJICAvKiBUb3AgNCBiaXRzIG9mIHZpZG1lbSBhZGRyLiAqLworCisjZGVmaW5lIFNNQ1JfQ29sQWRyQml0cyggeCApCQkgIC8qIGNvbC4gYWRkciBiaXRzIDguLjExICovIFwKKwkoKCAoeCkgLSA4ICkgPDwgRlNoZnQgKFNNQ1JfRENBQykpCisjZGVmaW5lIFNNQ1JfUm93QWRyQml0cyggeCApCQkgIC8qIHJvdyBhZGRyIGJpdHMgOS4uMTIgKi9cCisJKCggKHgpIC0gOSApIDw8IEZTaGZ0IChTTUNSX0RSQUMpCisKKyNkZWZpbmUgU05QUl9WRkJzdGFydAkgIEZsZCgxMiwwKQkvKiBWaWRlbyBmcmFtZSBidWZmZXIgYWRkciAqLworI2RlZmluZSBTTlBSX1ZGQnNpemUJICBGbGQoMTEsMTIpCS8qIFZpZGVvIGZyYW1lIGJ1ZmZlciBzaXplICovCisjZGVmaW5lIFNOUFJfV2hvbGVCYW5rCSAgKDEgPDwgMjMpCS8qIFdob2xlIGJhbmsgYml0ICovCisjZGVmaW5lIFNOUFJfQmFua1NlbGVjdAkgIEZsZCgyLDI3KQkvKiBCYW5rIHNlbGVjdCAqLworI2RlZmluZSBTTlBSX1Nub29wRW4JICAoMSA8PCAzMSkJLyogRW5hYmxlIHNub29wIG9wZXJhdGlvbiAqLworCisjZGVmaW5lIFNOUFJfU2V0X1ZGQnNpemUoIHggKSAgIC8qIHNldCBmcmFtZSBidWZmZXIgc2l6ZSAoaW4ga2IpICovIFwKKwkoICh4KSA8PCBGU2hmdCAoU05QUl9WRkJzaXplKSkKKyNkZWZpbmUgU05QUl9TZWxlY3RfQmFuayh4KSAgICAgLyogc2VsZWN0IGJhbmsgMCBvciAxICovICBcCisJKCggKHgpICsgMSApIDw8IEZTaGZ0IChTTlBSX0JhbmtTZWxlY3QgKSkKKworI2VuZGlmIC8qIExBTkdVQUdFID09IEMgKi8KKworLyoKKyAqIFZpZGVvIE1lbW9yeSBDb250cm9sbGVyCisgKgorICogUmVnaXN0ZXJzCisgKiAgICBWTUNDUglDb25maWd1cmF0aW9uIHJlZ2lzdGVyCisgKiAgICBWTUNBUglWTUMgYWRkcmVzcyByZWdpc3RlcgorICogICAgVk1DRFIJVk1DIGRhdGEgcmVnaXN0ZXIKKyAqCisgKi8KKworI2RlZmluZSBfVk1DQ1IJCV9TQTExMDEoIDB4MDAxMDAwMDAgKQkvKiBDb25maWd1cmF0aW9uIHJlZ2lzdGVyICovCisjZGVmaW5lIF9WTUNBUgkJX1NBMTEwMSggMHgwMDEwMTAwMCApCS8qIFZNQyBhZGRyZXNzIHJlZ2lzdGVyICovCisjZGVmaW5lIF9WTUNEUgkJX1NBMTEwMSggMHgwMDEwMTQwMCApCS8qIFZNQyBkYXRhIHJlZ2lzdGVyICovCisKKyNpZiBMQU5HVUFHRSA9PSBDCisjZGVmaW5lIFZNQ0NSCQkoKigodm9sYXRpbGUgV29yZCAqKSBTQTExMDFfcDJ2IChfVk1DQ1IpKSkKKyNkZWZpbmUgVk1DQVIJCSgqKCh2b2xhdGlsZSBXb3JkICopIFNBMTEwMV9wMnYgKF9WTUNBUikpKQorI2RlZmluZSBWTUNEUgkJKCooKHZvbGF0aWxlIFdvcmQgKikgU0ExMTAxX3AydiAoX1ZNQ0RSKSkpCisKKyNkZWZpbmUgVk1DQ1JfUmVmcmVzaEVuCSAgICAweDAwMDAJICAvKiBFbmFibGUgbWVtb3J5IHJlZnJlc2ggKi8KKyNkZWZpbmUgVk1DQ1JfQ29uZmlnCSAgICAweDAwMDEJICAvKiBEUkFNIHNpemUgKi8KKyNkZWZpbmUgVk1DQ1JfUmVmUGVyaW9kCSAgICBGbGQoMiwzKQkgIC8qIFJlZnJlc2ggcGVyaW9kICovCisjZGVmaW5lIFZNQ0NSX1N0YWxlRGF0YVdhaXQgRmxkKDQsNSkJICAvKiBTdGFsZSBGSUZPIGRhdGEgdGltZW91dCBjb3VudGVyICovCisjZGVmaW5lIFZNQ0NSX1NsZWVwU3RhdGUgICAgKDE8PDkpCSAgLyogU3RhdGUgb2YgaW50ZXJmYWNlIHBpbnMgaW4gc2xlZXAqLworI2RlZmluZSBWTUNDUl9SZWZUZXN0CSAgICAoMTw8MTApCSAgLyogcmVmcmVzaCB0ZXN0ICovCisjZGVmaW5lIFZNQ0NSX1JlZkxvdwkgICAgRmxkKDYsMTEpCSAgLyogcmVmcmVzaCBsb3cgY291bnRlciAqLworI2RlZmluZSBWTUNDUl9SZWZIaWdoCSAgICBGbGQoNywxNykJICAvKiByZWZyZXNoIGhpZ2ggY291bnRlciAqLworI2RlZmluZSBWTUNDUl9TRFRDVGVzdAkgICAgRmxkKDcsMjQpCSAgLyogc3RhbGUgZGF0YSB0aW1lb3V0IGNvdW50ZXIgKi8KKyNkZWZpbmUgVk1DQ1JfRm9yY2VTZWxmUmVmICAoMTw8MzEpCSAgLyogRm9yY2Ugc2VsZiByZWZyZXNoICovCisKKyNlbmRpZiBMQU5HVUFHRSA9PSBDCisKKworLyogVXBkYXRlIEZJRk8KKyAqCisgKiBSZWdpc3RlcnMKKyAqICAgIFVGQ1IJVXBkYXRlIEZJRk8gQ29udHJvbCBSZWdpc3RlcgorICogICAgVUZTUglVcGRhdGUgRklGTyBTdGF0dXMgUmVnaXN0ZXIKKyAqICAgIFVGTFZMUgl1cGRhdGUgRklGTyBsZXZlbCByZWdpc3RlcgorICogICAgVUZEUgl1cGRhdGUgRklGTyBkYXRhIHJlZ2lzdGVyCisgKi8KKworI2RlZmluZSBfVUZDUglfU0ExMTAxKDB4MDAxMjAwMDApICAgLyogVXBkYXRlIEZJRk8gQ29udHJvbCBSZWcuICovCisjZGVmaW5lIF9VRlNSCV9TQTExMDEoMHgwMDEyMDQwMCkgICAvKiBVcGRhdGUgRklGTyBTdGF0dXMgUmVnLiAqLwkKKyNkZWZpbmUgX1VGTFZMUglfU0ExMTAxKDB4MDAxMjA4MDApICAgLyogVXBkYXRlIEZJRk8gbGV2ZWwgcmVnLiAqLworI2RlZmluZSBfVUZEUglfU0ExMTAxKDB4MDAxMjBjMDApICAgLyogVXBkYXRlIEZJRk8gZGF0YSByZWcuICovCisKKyNpZiBMQU5HVUFHRSA9PSBDCisKKyNkZWZpbmUgVUZDUiAJKCooKHZvbGF0aWxlIFdvcmQgKikgU0ExMTAxX3AydiAoX1VGQ1IpKSkKKyNkZWZpbmUgVUZTUgkoKigodm9sYXRpbGUgV29yZCAqKSBTQTExMDFfcDJ2IChfVUZTUikpKQorI2RlZmluZSBVRkxWTFIJKCooKHZvbGF0aWxlIFdvcmQgKikgU0ExMTAxX3AydiAoX1VGTFZMUikpKSAKKyNkZWZpbmUgVUZEUgkoKigodm9sYXRpbGUgV29yZCAqKSBTQTExMDFfcDJ2IChfVUZEUikpKQorCisKKyNkZWZpbmUgVUZDUl9GaWZvVGhyZXNoaG9sZAlGbGQoNywwKQkvKiBMZXZlbCBmb3IgRmlmb0dUbiBmbGFnICovCisKKyNkZWZpbmUgVUZTUl9GaWZvR1RuRmxhZwkweDAxCQkvKiBGaWZvR1RuIGZsYWcgKi8jZGVmaW5lIFVGU1JfRmlmb0VtcHR5CQkweDgwCQkvKiBGSUZPIGlzIGVtcHR5ICovCisKKyNlbmRpZiAvKiBMQU5HVUFHRSA9PSBDICovCisKKy8qIFN5c3RlbSBDb250cm9sbGVyCisgKgorICogUmVnaXN0ZXJzCisgKiAgICBTS1BDUglQb3dlciBDb250cm9sIFJlZ2lzdGVyCisgKiAgICBTS0NEUglDbG9jayBEaXZpZGVyIFJlZ2lzdGVyCisgKiAgICBEQUNEUjEJREFDMSBEYXRhIHJlZ2lzdGVyCisgKiAgICBEQUNEUjIJREFDMiBEYXRhIHJlZ2lzdGVyCisgKi8KKworI2RlZmluZSBfU0tQQ1IJCV9TQTExMDEoMHgwMDAwMDQwMCkKKyNkZWZpbmUgX1NLQ0RSCQlfU0ExMTAxKDB4MDAwNDAwMDApCisjZGVmaW5lIF9EQUNEUjEJCV9TQTExMDEoMHgwMDA2MDAwMCkKKyNkZWZpbmUgX0RBQ0RSMgkJX1NBMTEwMSgweDAwMDYwNDAwKQorCisjaWYgTEFOR1VBR0UgPT0gQworI2RlZmluZSBTS1BDUiAJKCooKHZvbGF0aWxlIFdvcmQgKikgU0ExMTAxX3AydiAoX1NLUENSKSkpCisjZGVmaW5lIFNLQ0RSCSgqKCh2b2xhdGlsZSBXb3JkICopIFNBMTEwMV9wMnYgKF9TS0NEUikpKQorI2RlZmluZSBEQUNEUjEJKCooKHZvbGF0aWxlIFdvcmQgKikgU0ExMTAxX3AydiAoX0RBQ0RSMSkpKQorI2RlZmluZSBEQUNEUjIJKCooKHZvbGF0aWxlIFdvcmQgKikgU0ExMTAxX3AydiAoX0RBQ0RSMikpKQorCisjZGVmaW5lIFNLUENSX1VDTEtFbgkgICAgIDB4MDEgICAgLyogVVNCIEVuYWJsZSAqLworI2RlZmluZSBTS1BDUl9QQ0xLRW4JICAgICAweDAyICAgIC8qIFBTLzIgRW5hYmxlICovCisjZGVmaW5lIFNLUENSX0lDTEtFbgkgICAgIDB4MDQgICAgLyogSW50ZXJydXB0IENvbnRyb2xsZXIgRW5hYmxlICovCisjZGVmaW5lIFNLUENSX1ZDTEtFbgkgICAgIDB4MDggICAgLyogVmlkZW8gQ29udHJvbGxlciBFbmFibGUgKi8KKyNkZWZpbmUgU0tQQ1JfUElDTEtFbgkgICAgIDB4MTAgICAgLyogcGFyYWxsZWwgcG9ydCBFbmFibGUgKi8KKyNkZWZpbmUgU0tQQ1JfRENMS0VuCSAgICAgMHgyMCAgICAvKiBEQUNzIEVuYWJsZSAqLworI2RlZmluZSBTS1BDUl9uS1BBREVuCSAgICAgMHg0MCAgICAvKiBNdWx0aXBsZXhlciAqLworCisjZGVmaW5lIFNLQ0RSX1BMTE11bAkgICAgIEZsZCg3LDApCS8qIFBMTCBNdWx0aXBsaWVyICovCisjZGVmaW5lIFNLQ0RSX1ZDTEtFbgkgICAgIEZsZCgyLDcpCS8qIFZpZGVvIGNvbnRyb2xsZXIgY2xvY2sgZGl2aWRlciAqLworI2RlZmluZSBTS0RDUl9CQ0xLRW4JICAgICAoMTw8OSkJLyogQkNMSyBEaXZpZGVyICovCisjZGVmaW5lIFNLRENSX1VURVNUQ0xLRW4gICAgICgxPDwxMCkJLyogUm91dGUgVVNCIGNsb2NrIGR1cmluZyB0ZXN0IG1vZGUgKi8KKyNkZWZpbmUgU0tEQ1JfRGl2UlZhbHVlCSAgICAgRmxkKDYsMTEpCS8qIElucHV0IGNsb2NrIGRpdmlkZXIgZm9yIFBMTCAqLworI2RlZmluZSBTS0RDUl9EaXZOVmFsdWUJICAgICBGbGQoNSwxNykJLyogT3V0cHV0IGNsb2NrIGRpdmlkZXIgZm9yIFBMTCAqLworI2RlZmluZSBTS0RDUl9QTExSU0gJICAgICBGbGQoMywyMikJLyogUExMIGJhbmR3aWR0aCBjb250cm9sICovCisjZGVmaW5lIFNLRENSX0NoYXJnZVB1bXAgICAgICgxPDwyNSkJLyogQ2hhcmdlIHB1bXAgY29udHJvbCAqLworI2RlZmluZSBTS0RDUl9DbGtUZXN0TW9kZSAgICAoMTw8MjYpCS8qIENsb2NrIG91dHB1dCB0ZXN0IG1vZGUgKi8KKyNkZWZpbmUgU0tEQ1JfQ2xrVGVzdEVuCSAgICAgKDE8PDI3KQkvKiBUZXN0IGNsb2NrIGdlbmVyYXRvciAqLworI2RlZmluZSBTS0RDUl9DbGtKaXR0ZXJDbnRsICBGbGQoMywyOCkJLyogdmlkZW8gY2xvY2sgaml0dGVyIGNvbXBlbnNhdGlvbiAqLworCisjZGVmaW5lIERBQ0RSX0RBQ0NvdW50CSAgICAgRmxkKDgsMCkJLyogQ291bnQgdmFsdWUgKi8KKyNkZWZpbmUgREFDRFIxX0RBQ0NvdW50CSAgICAgREFDRFJfREFDQ291bnQKKyNkZWZpbmUgREFDRFIyX0RBQ0NvdW50CSAgICAgREFDRFJfREFDQ291bnQKKworI2VuZGlmIC8qIExBTkdVQUdFID09IEMgKi8KKworLyoKKyAqIFBhcmFsbGVsIFBvcnQgSW50ZXJmYWNlCisgKgorICogUmVnaXN0ZXJzCisgKiAgICBJRUVFX0NvbmZpZwlJRUVFIG1vZGUgc2VsZWN0aW9uIGFuZCBwcm9ncmFtbWFibGUgYXR0cmlidXRlcworICogICAgSUVFRV9Db250cm9sCUNvbnRyb2xzIHRoZSBzdGF0ZXMgb2YgSUVFRSBwb3J0IGNvbnRyb2wgb3V0cHV0cworICogICAgSUVFRV9EYXRhCQlGb3J3YXJkIHRyYW5zZmVyIGRhdGEgcmVnaXN0ZXIKKyAqICAgIElFRUVfQWRkcgkJRm9yd2FyZCB0cmFuc2ZlciBhZGRyZXNzIHJlZ2lzdGVyCisgKiAgICBJRUVFX1N0YXR1cwlQb3J0IElPIHNpZ25hbCBzdGF0dXMgcmVnaXN0ZXIKKyAqICAgIElFRUVfSW50U3RhdHVzCVBvcnQgaW50ZXJydXB0cyBzdGF0dXMgcmVnaXN0ZXIKKyAqICAgIElFRUVfRmlmb0xldmVscyAgIFJ4IGFuZCBUeCBGSUZPIGludGVycnVwdCBnZW5lcmF0aW9uIGxldmVscworICogICAgSUVFRV9Jbml0VGltZQlGb3J3YXJkIHRpbWVvdXQgY291bnRlciBpbml0aWFsIHZhbHVlCisgKiAgICBJRUVFX1RpbWVyU3RhdHVzCUZvcndhcmQgdGltZW91dCBjb3VudGVyIGN1cnJlbnQgdmFsdWUKKyAqICAgIElFRUVfRmlmb1Jlc2V0CVJlc2V0IGZvcndhcmQgdHJhbnNmZXIgRklGTworICogICAgSUVFRV9SZWxvYWRWYWx1ZQlDb3VudGVyIHJlbG9hZCB2YWx1ZQorICogICAgSUVFRV9UZXN0Q29udHJvbAlDb250cm9sIHRlc3Rtb2RlCisgKiAgICBJRUVFX1Rlc3REYXRhSW4JVGVzdCBkYXRhIHJlZ2lzdGVyCisgKiAgICBJRUVFX1Rlc3REYXRhSW5FbglFbmFibGUgdGVzdCBkYXRhCisgKiAgICBJRUVFX1Rlc3RDdHJsSW4JVGVzdCBjb250cm9sIHNpZ25hbHMKKyAqICAgIElFRUVfVGVzdEN0cmxJbkVuCUVuYWJsZSB0ZXN0IGNvbnRyb2wgc2lnbmFscworICogICAgSUVFRV9UZXN0RGF0YVN0YXQJQ3VycmVudCBkYXRhIGJ1cyB2YWx1ZQorICoKKyAqLworCisvKgorICogVGhlIGNvbnRyb2wgcmVnaXN0ZXJzIGFyZSBkZWZpbmVkIGFzIG9mZnNldHMgZnJvbSBhIGJhc2UgYWRkcmVzcyAKKyAqLworIAorI2RlZmluZSBfSUVFRSggeCApIF9TQTExMDEoICh4KSArIF9fUEFSQUxMRUxfUE9SVCApCisKKyNkZWZpbmUgX0lFRUVfQ29uZmlnCSAgICBfSUVFRSggMHgwMDAwICkKKyNkZWZpbmUgX0lFRUVfQ29udHJvbAkgICAgX0lFRUUoIDB4MDQwMCApCisjZGVmaW5lIF9JRUVFX0RhdGEJICAgIF9JRUVFKCAweDQwMDAgKQorI2RlZmluZSBfSUVFRV9BZGRyCSAgICBfSUVFRSggMHgwODAwICkKKyNkZWZpbmUgX0lFRUVfU3RhdHVzCSAgICBfSUVFRSggMHgwYzAwICkKKyNkZWZpbmUgX0lFRUVfSW50U3RhdHVzCSAgICBfSUVFRSggMHgxMDAwICkKKyNkZWZpbmUgX0lFRUVfRmlmb0xldmVscyAgICBfSUVFRSggMHgxNDAwICkKKyNkZWZpbmUgX0lFRUVfSW5pdFRpbWUJICAgIF9JRUVFKCAweDE4MDAgKQorI2RlZmluZSBfSUVFRV9UaW1lclN0YXR1cyAgIF9JRUVFKCAweDFjMDAgKQorI2RlZmluZSBfSUVFRV9GaWZvUmVzZXQJICAgIF9JRUVFKCAweDIwMDAgKQorI2RlZmluZSBfSUVFRV9SZWxvYWRWYWx1ZSAgIF9JRUVFKCAweDNjMDAgKQorI2RlZmluZSBfSUVFRV9UZXN0Q29udHJvbCAgIF9JRUVFKCAweDI0MDAgKQorI2RlZmluZSBfSUVFRV9UZXN0RGF0YUluICAgIF9JRUVFKCAweDI4MDAgKQorI2RlZmluZSBfSUVFRV9UZXN0RGF0YUluRW4gIF9JRUVFKCAweDJjMDAgKQorI2RlZmluZSBfSUVFRV9UZXN0Q3RybEluICAgIF9JRUVFKCAweDMwMDAgKQorI2RlZmluZSBfSUVFRV9UZXN0Q3RybEluRW4gIF9JRUVFKCAweDM0MDAgKQorI2RlZmluZSBfSUVFRV9UZXN0RGF0YVN0YXQgIF9JRUVFKCAweDM4MDAgKQorIAorCisjaWYgTEFOR1VBR0UgPT0gQworI2RlZmluZSBJRUVFX0NvbmZpZwkgICAgKCooKHZvbGF0aWxlIFdvcmQgKikgU0ExMTAxX3AydiAoX0lFRUVfQ29uZmlnKSkpCisjZGVmaW5lIElFRUVfQ29udHJvbAkgICAgKCooKHZvbGF0aWxlIFdvcmQgKikgU0ExMTAxX3AydiAoX0lFRUVfQ29udHJvbCkpKQorI2RlZmluZSBJRUVFX0RhdGEJICAgICgqKCh2b2xhdGlsZSBXb3JkICopIFNBMTEwMV9wMnYgKF9JRUVFX0RhdGEpKSkKKyNkZWZpbmUgSUVFRV9BZGRyCSAgICAoKigodm9sYXRpbGUgV29yZCAqKSBTQTExMDFfcDJ2IChfSUVFRV9BZGRyKSkpCisjZGVmaW5lIElFRUVfU3RhdHVzCSAgICAoKigodm9sYXRpbGUgV29yZCAqKSBTQTExMDFfcDJ2IChfSUVFRV9TdGF0dXMpKSkKKyNkZWZpbmUgSUVFRV9JbnRTdGF0dXMJICAgICgqKCh2b2xhdGlsZSBXb3JkICopIFNBMTEwMV9wMnYgKF9JRUVFX0ludFN0YXR1cykpKQorI2RlZmluZSBJRUVFX0ZpZm9MZXZlbHMJICAgICgqKCh2b2xhdGlsZSBXb3JkICopIFNBMTEwMV9wMnYgKF9JRUVFX0ZpZm9MZXZlbHMpKSkKKyNkZWZpbmUgSUVFRV9Jbml0VGltZQkgICAgKCooKHZvbGF0aWxlIFdvcmQgKikgU0ExMTAxX3AydiAoX0lFRUVfSW5pdFRpbWUpKSkKKyNkZWZpbmUgSUVFRV9UaW1lclN0YXR1cyAgICAoKigodm9sYXRpbGUgV29yZCAqKSBTQTExMDFfcDJ2IChfSUVFRV9UaW1lclN0YXR1cykpKQorI2RlZmluZSBJRUVFX0ZpZm9SZXNldAkgICAgKCooKHZvbGF0aWxlIFdvcmQgKikgU0ExMTAxX3AydiAoX0lFRUVfRmlmb1Jlc2V0KSkpCisjZGVmaW5lIElFRUVfUmVsb2FkVmFsdWUgICAgKCooKHZvbGF0aWxlIFdvcmQgKikgU0ExMTAxX3AydiAoX0lFRUVfUmVsb2FkVmFsdWUpKSkKKyNkZWZpbmUgSUVFRV9UZXN0Q29udHJvbCAgICAoKigodm9sYXRpbGUgV29yZCAqKSBTQTExMDFfcDJ2IChfSUVFRV9UZXN0Q29udHJvbCkpKQorI2RlZmluZSBJRUVFX1Rlc3REYXRhSW4gICAgICgqKCh2b2xhdGlsZSBXb3JkICopIFNBMTEwMV9wMnYgKF9JRUVFX1Rlc3REYXRhSW4pKSkKKyNkZWZpbmUgSUVFRV9UZXN0RGF0YUluRW4gICAoKigodm9sYXRpbGUgV29yZCAqKSBTQTExMDFfcDJ2IChfSUVFRV9UZXN0RGF0YUluRW4pKSkKKyNkZWZpbmUgSUVFRV9UZXN0Q3RybEluICAgICAoKigodm9sYXRpbGUgV29yZCAqKSBTQTExMDFfcDJ2IChfSUVFRV9UZXN0Q3RybEluKSkpCisjZGVmaW5lIElFRUVfVGVzdEN0cmxJbkVuICAgKCooKHZvbGF0aWxlIFdvcmQgKikgU0ExMTAxX3AydiAoX0lFRUVfVGVzdEN0cmxJbkVuKSkpCisjZGVmaW5lIElFRUVfVGVzdERhdGFTdGF0ICAgKCooKHZvbGF0aWxlIFdvcmQgKikgU0ExMTAxX3AydiAoX0lFRUVfVGVzdERhdGFTdGF0KSkpCisKKworI2RlZmluZSBJRUVFX0NvbmZpZ19NCSAgICBGbGQoMywwKQkgLyogTW9kZSBzZWxlY3QgKi8KKyNkZWZpbmUgSUVFRV9Db25maWdfRAkgICAgMHgwNAkgLyogRklGTyBhY2Nlc3MgZW5hYmxlICovCisjZGVmaW5lIElFRUVfQ29uZmlnX0IJICAgIDB4MDgJIC8qIDktYml0IHdvcmQgZW5hYmxlICovCisjZGVmaW5lIElFRUVfQ29uZmlnX1QJICAgIDB4MTAJIC8qIERhdGEgdHJhbnNmZXIgZW5hYmxlICovCisjZGVmaW5lIElFRUVfQ29uZmlnX0EJICAgIDB4MjAJIC8qIERhdGEgdHJhbnNmZXIgZGlyZWN0aW9uICovCisjZGVmaW5lIElFRUVfQ29uZmlnX0UJICAgIDB4NDAJIC8qIFRpbWVyIGVuYWJsZSAqLworI2RlZmluZSBJRUVFX0NvbnRyb2xfQQkgICAgMHgwOAkgLyogQXV0b0ZkIG91dHB1dCAqLworI2RlZmluZSBJRUVFX0NvbnRyb2xfRQkgICAgMHgwNAkgLyogU2VsZWN0aW4gb3V0cHV0ICovCisjZGVmaW5lIElFRUVfQ29udHJvbF9UCSAgICAweDAyCSAvKiBTdHJvYmUgb3V0cHV0ICovCisjZGVmaW5lIElFRUVfQ29udHJvbF9JCSAgICAweDAxCSAvKiBQb3J0IGluaXQgb3V0cHV0ICovCisjZGVmaW5lIElFRUVfRGF0YV9DCSAgICAoMTw8MzEpCSAvKiBCeXRlIGNvdW50ICovCisjZGVmaW5lIElFRUVfRGF0YV9EYgkgICAgRmxkKDksMTYpCSAvKiBEYXRhIGJ5dGUgMiAqLworI2RlZmluZSBJRUVFX0RhdGFfRGEJICAgIEZsZCg5LDApCSAvKiBEYXRhIGJ5dGUgMSAqLworI2RlZmluZSBJRUVFX0FkZHJfQQkgICAgRmxkKDgsMCkJIC8qIGZvcndhcmQgYWRkcmVzcyB0cmFuc2ZlciBieXRlICovCisjZGVmaW5lIElFRUVfU3RhdHVzX0EJICAgIDB4MDEwMAkgLyogbkF1dG9GZCBwb3J0IG91dHB1dCBzdGF0dXMgKi8KKyNkZWZpbmUgSUVFRV9TdGF0dXNfRQkgICAgMHgwMDgwCSAvKiBuU2VsZWN0SW4gcG9ydCBvdXRwdXQgc3RhdHVzICovCisjZGVmaW5lIElFRUVfU3RhdHVzX1QJICAgIDB4MDA0MAkgLyogblN0cm9iZSBwb3J0IG91dHB1dCBzdGF0dXMgKi8KKyNkZWZpbmUgSUVFRV9TdGF0dXNfSQkgICAgMHgwMDIwCSAvKiBuSW5pdCBwb3J0IG91dHB1dCBzdGF0dXMgKi8KKyNkZWZpbmUgSUVFRV9TdGF0dXNfQgkgICAgMHgwMDEwCSAvKiBCdXN5IHBvcnQgaW5vdXQgc3RhdHVzICovCisjZGVmaW5lIElFRUVfU3RhdHVzX1MJICAgIDB4MDAwOAkgLyogU2VsZWN0IHBvcnQgaW5wdXQgc3RhdHVzICovCisjZGVmaW5lIElFRUVfU3RhdHVzX0sJICAgIDB4MDAwNAkgLyogbkFjayBwb3J0IGlucHV0IHN0YXR1cyAqLworI2RlZmluZSBJRUVFX1N0YXR1c19GCSAgICAweDAwMDIJIC8qIG5GYXVsdCBwb3J0IGlucHV0IHN0YXR1cyAqLworI2RlZmluZSBJRUVFX1N0YXR1c19SCSAgICAweDAwMDEJIC8qIHBFcnJvciBwb3J0IGlucHV0IHN0YXR1cyAqLworCisjZGVmaW5lIElFRUVfSW50U3RhdHVzX0ludFJlcURhdAkgMHgwMTAwCisjZGVmaW5lIElFRUVfSW50U3RhdHVzX0ludFJlcUVtcAkgMHgwMDgwCisjZGVmaW5lIElFRUVfSW50U3RhdHVzX0ludFJlcUludAkgMHgwMDQwCisjZGVmaW5lIElFRUVfSW50U3RhdHVzX0ludFJlcVJhdgkgMHgwMDIwCisjZGVmaW5lIElFRUVfSW50U3RhdHVzX0ludFJlcVRpbQkgMHgwMDEwCisjZGVmaW5lIElFRUVfSW50U3RhdHVzX1JldkFkZHJDb21wCSAweDAwMDgKKyNkZWZpbmUgSUVFRV9JbnRTdGF0dXNfUmV2RGF0YUNvbXAJIDB4MDAwNAorI2RlZmluZSBJRUVFX0ludFN0YXR1c19Gd2RBZGRyQ29tcAkgMHgwMDAyCisjZGVmaW5lIElFRUVfSW50U3RhdHVzX0Z3ZERhdGFDb21wCSAweDAwMDEKKyNkZWZpbmUgSUVFRV9GaWZvTGV2ZWxzX1JldkZpZm9MZXZlbAkgMgorI2RlZmluZSBJRUVFX0ZpZm9MZXZlbHNfRndkRmlmb0xldmVsCSAxCisjZGVmaW5lIElFRUVfSW5pdFRpbWVfVGltVmFsSW5pdAkgRmxkKDIyLDApCisjZGVmaW5lIElFRUVfVGltZXJTdGF0dXNfVGltVmFsU3RhdAkgRmxkKDIyLDApCisjZGVmaW5lIElFRUVfUmVsb2FkVmFsdWVfUmVsb2FkCQkgRmxkKDQsMCkKKworI2RlZmluZSBJRUVFX1Rlc3RDb250cm9sX1JlZ0NsawkJIDB4MDQKKyNkZWZpbmUgSUVFRV9UZXN0Q29udHJvbF9DbG9ja1NlbGVjdAkgRmxkKDIsMSkKKyNkZWZpbmUgSUVFRV9UZXN0Q29udHJvbF9UaW1lclRlc3RNb2RlRW4gMHgwMQorI2RlZmluZSBJRUVFX1Rlc3RDdHJsSW5fUEVycm9yCQkgMHgxMAorI2RlZmluZSBJRUVFX1Rlc3RDdHJsSW5fbkZhdWx0CQkgMHgwOAorI2RlZmluZSBJRUVFX1Rlc3RDdHJsSW5fbkFjawkJIDB4MDQKKyNkZWZpbmUgSUVFRV9UZXN0Q3RybEluX1BTZWwJCSAweDAyCisjZGVmaW5lIElFRUVfVGVzdEN0cmxJbl9CdXN5CQkgMHgwMQorCisjZW5kaWYgLyogTEFOR1VBR0UgPT0gQyAqLworCisvKgorICogVkdBIENvbnRyb2xsZXIKKyAqCisgKiBSZWdpc3RlcnMKKyAqICAgIFZpZGVvQ29udHJvbAlWaWRlbyBDb250cm9sIFJlZ2lzdGVyCisgKiAgICBWZ2FUaW1pbmcwCVZHQSBUaW1pbmcgUmVnaXN0ZXIgMAorICogICAgVmdhVGltaW5nMQlWR0EgVGltaW5nIFJlZ2lzdGVyIDEKKyAqICAgIFZnYVRpbWluZzIJVkdBIFRpbWluZyBSZWdpc3RlciAyCisgKiAgICBWZ2FUaW1pbmczCVZHQSBUaW1pbmcgUmVnaXN0ZXIgMworICogICAgVmdhQm9yZGVyCQlWR0EgQm9yZGVyIENvbG9yIFJlZ2lzdGVyCisgKiAgICBWZ2FEQkFSCQlWR0FETUEgQmFzZSBBZGRyZXNzIFJlZ2lzdGVyCisgKiAgICBWZ2FEQ0FSCQlWR0FETUEgQ2hhbm5lbCBDdXJyZW50IEFkZHJlc3MgUmVnaXN0ZXIKKyAqICAgIFZnYVN0YXR1cwkJVkdBIFN0YXR1cyBSZWdpc3RlcgorICogICAgVmdhSW50ZXJydXB0TWFzawlWR0EgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIKKyAqICAgIFZnYVBhbGV0dGUJVkdBIFBhbGV0dGUgUmVnaXN0ZXJzCisgKiAgICBEYWNDb250cm9sCURBQyBDb250cm9sIFJlZ2lzdGVyCisgKiAgICBWZ2FUZXN0CQlWR0EgQ29udHJvbGxlciBUZXN0IFJlZ2lzdGVyCisgKi8KKworI2RlZmluZSBfVkdBKCB4ICkJX1NBMTEwMSggKCB4ICkgKyBfX1ZHQV9DT05UUk9MICkKKworI2RlZmluZSBfVmlkZW9Db250cm9sCSAgICBfVkdBKCAweDAwMDAgKQorI2RlZmluZSBfVmdhVGltaW5nMAkgICAgX1ZHQSggMHgwNDAwICkKKyNkZWZpbmUgX1ZnYVRpbWluZzEJICAgIF9WR0EoIDB4MDgwMCApCisjZGVmaW5lIF9WZ2FUaW1pbmcyCSAgICBfVkdBKCAweDBjMDAgKQorI2RlZmluZSBfVmdhVGltaW5nMwkgICAgX1ZHQSggMHgxMDAwICkKKyNkZWZpbmUgX1ZnYUJvcmRlcgkgICAgX1ZHQSggMHgxNDAwICkKKyNkZWZpbmUgX1ZnYURCQVIJICAgIF9WR0EoIDB4MTgwMCApCisjZGVmaW5lIF9WZ2FEQ0FSCSAgICBfVkdBKCAweDFjMDAgKQorI2RlZmluZSBfVmdhU3RhdHVzCSAgICBfVkdBKCAweDIwMDAgKQorI2RlZmluZSBfVmdhSW50ZXJydXB0TWFzayAgIF9WR0EoIDB4MjQwMCApCisjZGVmaW5lIF9WZ2FQYWxldHRlCSAgICBfVkdBKCAweDQwMDAwICkKKyNkZWZpbmUgX0RhY0NvbnRyb2wJICAgIF9WR0EoIDB4MzAwMCApCisjZGVmaW5lIF9WZ2FUZXN0CSAgICBfVkdBKCAweDJjMDAgKQorCisjaWYgKExBTkdVQUdFID09IEMpCisjZGVmaW5lIFZpZGVvQ29udHJvbCAgICgqKCh2b2xhdGlsZSBXb3JkICopIFNBMTEwMV9wMnYgKF9WaWRlb0NvbnRyb2wpKSkKKyNkZWZpbmUgVmdhVGltaW5nMCAgICAgKCooKHZvbGF0aWxlIFdvcmQgKikgU0ExMTAxX3AydiAoX1ZnYVRpbWluZzApKSkKKyNkZWZpbmUgVmdhVGltaW5nMSAgICAgKCooKHZvbGF0aWxlIFdvcmQgKikgU0ExMTAxX3AydiAoX1ZnYVRpbWluZzEpKSkKKyNkZWZpbmUgVmdhVGltaW5nMiAgICAgKCooKHZvbGF0aWxlIFdvcmQgKikgU0ExMTAxX3AydiAoX1ZnYVRpbWluZzIpKSkKKyNkZWZpbmUgVmdhVGltaW5nMyAgICAgKCooKHZvbGF0aWxlIFdvcmQgKikgU0ExMTAxX3AydiAoX1ZnYVRpbWluZzMpKSkKKyNkZWZpbmUgVmdhQm9yZGVyICAgICAgKCooKHZvbGF0aWxlIFdvcmQgKikgU0ExMTAxX3AydiAoX1ZnYUJvcmRlcikpKQorI2RlZmluZSBWZ2FEQkFSCSAgICAgICAoKigodm9sYXRpbGUgV29yZCAqKSBTQTExMDFfcDJ2IChfVmdhREJBUikpKQorI2RlZmluZSBWZ2FEQ0FSCSAgICAgICAoKigodm9sYXRpbGUgV29yZCAqKSBTQTExMDFfcDJ2IChfVmdhRENBUikpKQorI2RlZmluZSBWZ2FTdGF0dXMgICAgICAoKigodm9sYXRpbGUgV29yZCAqKSBTQTExMDFfcDJ2IChfVmdhU3RhdHVzKSkpCisjZGVmaW5lIFZnYUludGVycnVwdE1hc2sgKCooKHZvbGF0aWxlIFdvcmQgKikgU0ExMTAxX3AydiAoX1ZnYUludGVycnVwdE1hc2spKSkKKyNkZWZpbmUgVmdhUGFsZXR0ZSAgICAgKCooKHZvbGF0aWxlIFdvcmQgKikgU0ExMTAxX3AydiAoX1ZnYVBhbGV0dGUpKSkKKyNkZWZpbmUgRGFjQ29udHJvbCAgICAgKCooKHZvbGF0aWxlIFdvcmQgKikgU0ExMTAxX3AydiAoX0RhY0NvbnRyb2wpKQorI2RlZmluZSBWZ2FUZXN0ICAgICAgICAoKigodm9sYXRpbGUgV29yZCAqKSBTQTExMDFfcDJ2IChfVmdhVGVzdCkpKQorCisjZGVmaW5lIFZpZGVvQ29udHJvbF9WZ2FFbiAgICAweDAwMDAwMDAwCisjZGVmaW5lIFZpZGVvQ29udHJvbF9CR1IgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFZpZGVvQ29udHJvbF9WQ29tcFZhbCBGbGQoMiwyKQorI2RlZmluZSBWaWRlb0NvbnRyb2xfVmdhUmVxICAgRmxkKDQsNCkKKyNkZWZpbmUgVmlkZW9Db250cm9sX1ZCdXJzdEwgIEZsZCg0LDgpCisjZGVmaW5lIFZpZGVvQ29udHJvbF9WTW9kZSAgICAoMTw8MTIpCisjZGVmaW5lIFZpZGVvQ29udHJvbF9QYWxSZWFkICAoMTw8MTMpCisKKyNkZWZpbmUgVmdhVGltaW5nMF9QUEwJICAgICAgRmxkKDYsMikKKyNkZWZpbmUgVmdhVGltaW5nMF9IU1cJICAgICAgRmxkKDgsOCkKKyNkZWZpbmUgVmdhVGltaW5nMF9IRlAJICAgICAgRmxkKDgsMTYpCisjZGVmaW5lIFZnYVRpbWluZzBfSEJQCSAgICAgIEZsZCg4LDI0KQorCisjZGVmaW5lIFZnYVRpbWluZzFfTFBTCSAgICAgIEZsZCgxMCwwKQorI2RlZmluZSBWZ2FUaW1pbmcxX1ZTVwkgICAgICBGbGQoNiwxMCkKKyNkZWZpbmUgVmdhVGltaW5nMV9WRlAJICAgICAgRmxkKDgsMTYpCisjZGVmaW5lIFZnYVRpbWluZzFfVkJQCSAgICAgIEZsZCg4LDI0KQorCisjZGVmaW5lIFZnYVRpbWluZzJfSVZTCSAgICAgIDB4MDEKKyNkZWZpbmUgVmdhVGltaW5nMl9JSFMJICAgICAgMHgwMgorI2RlZmluZSBWZ2FUaW1pbmcyX0NWUwkgICAgICAweDA0CisjZGVmaW5lIFZnYVRpbWluZzJfQ0hTCSAgICAgIDB4MDgKKworI2RlZmluZSBWZ2FUaW1pbmczX0hCUwkgICAgICBGbGQoOCwwKQorI2RlZmluZSBWZ2FUaW1pbmczX0hCRQkgICAgICBGbGQoOCw4KQorI2RlZmluZSBWZ2FUaW1pbmczX1ZCUwkgICAgICBGbGQoOCwxNikKKyNkZWZpbmUgVmdhVGltaW5nM19WQkUJICAgICAgRmxkKDgsMjQpCisKKyNkZWZpbmUgVmdhQm9yZGVyX0JDT0wJICAgICAgRmxkKDI0LDApCisKKyNkZWZpbmUgVmdhU3RhdHVzX1ZGVUYJICAgICAgMHgwMQorI2RlZmluZSBWZ2FTdGF0dXNfVk5leHQJICAgICAgMHgwMgorI2RlZmluZSBWZ2FTdGF0dXNfVkNvbXAJICAgICAgMHgwNAorCisjZGVmaW5lIFZnYUludGVycnVwdE1hc2tfVkZVRk1hc2sgICAweDAwCisjZGVmaW5lIFZnYUludGVycnVwdE1hc2tfVk5leHRNYXNrICAweDAxCisjZGVmaW5lIFZnYUludGVycnVwdE1hc2tfVkNvbXBNYXNrICAweDAyCisKKyNkZWZpbmUgVmdhUGFsZXR0ZV9SCSAgICAgIEZsZCg4LDApCisjZGVmaW5lIFZnYVBhbGV0dGVfRwkgICAgICBGbGQoOCw4KQorI2RlZmluZSBWZ2FQYWxldHRlX0IJICAgICAgRmxkKDgsMTYpCisKKyNkZWZpbmUgRGFjQ29udHJvbF9EQUNPTiAgICAgIDB4MDAwMQorI2RlZmluZSBEYWNDb250cm9sX0NPTVBPTiAgICAgMHgwMDAyCisjZGVmaW5lIERhY0NvbnRyb2xfUEVET04gICAgICAweDAwMDQKKyNkZWZpbmUgRGFjQ29udHJvbF9SVHJpbSAgICAgIEZsZCg1LDQpCisjZGVmaW5lIERhY0NvbnRyb2xfR1RyaW0gICAgICBGbGQoNSw5KQorI2RlZmluZSBEYWNDb250cm9sX0JUcmltICAgICAgRmxkKDUsMTQpCisKKyNkZWZpbmUgVmdhVGVzdF9UREFDCSAgICAgIDB4MDAKKyNkZWZpbmUgVmdhVGVzdF9EYXRhdGVzdCAgICAgIEZsZCg0LDEpCisjZGVmaW5lIFZnYVRlc3RfREFDVEVTVERBQyAgICAweDEwCisjZGVmaW5lIFZnYVRlc3RfREFDVEVTVE9VVCAgICBGbGQoMyw1KQorCisjZW5kaWYgLyogTEFOR1VBR0UgPT0gQyAqLworCisvKgorICogVVNCIEhvc3QgSW50ZXJmYWNlIENvbnRyb2xsZXIKKyAqCisgKiBSZWdpc3RlcnMKKyAqICAgIFJldmlzaW9uCisgKiAgICBDb250cm9sCisgKiAgICBDb21tYW5kU3RhdHVzCisgKiAgICBJbnRlcnJ1cHRTdGF0dXMKKyAqICAgIEludGVycnVwdEVuYWJsZQorICogICAgSENDQQorICogICAgUGVyaW9kQ3VycmVudEVECisgKiAgICBDb250cm9sSGVhZEVECisgKiAgICBCdWxrSGVhZEVECisgKiAgICBCdWxrQ3VycmVudEVECisgKiAgICBEb25lSGVhZAorICogICAgRm1JbnRlcnZhbAorICogICAgRm1SZW1haW5pbmcKKyAqICAgIEZtTnVtYmVyCisgKiAgICBQZXJpb2RpY1N0YXJ0CisgKiAgICBMU1RocmVzaG9sZAorICogICAgUmhEZXNjcmlwdG9yQQorICogICAgUmhEZXNjcmlwdG9yQgorICogICAgUmhTdGF0dXMKKyAqICAgIFJoUG9ydFN0YXR1cworICogICAgVVNCU3RhdHVzCisgKiAgICBVU0JSZXNldAorICogICAgVVNUQVIKKyAqICAgIFVTV0VSCisgKiAgICBVU1JGUgorICogICAgVVNORlIKKyAqICAgIFVTVENTUgorICogICAgVVNTUgorICogICAgCisgKi8KKworI2RlZmluZSBfVVNCKCB4ICkJX1NBMTEwMSggKCB4ICkgKyBfX1VTQl9DT05UUk9MICkKKworCisjZGVmaW5lIF9SZXZpc2lvbgkgIF9VU0IoIDB4MDAwMCApCisjZGVmaW5lIF9Db250cm9sCSAgX1VTQiggMHgwODg4ICkKKyNkZWZpbmUgX0NvbW1hbmRTdGF0dXMJICBfVVNCKCAweDBjMDAgKQorI2RlZmluZSBfSW50ZXJydXB0U3RhdHVzICBfVVNCKCAweDEwMDAgKQorI2RlZmluZSBfSW50ZXJydXB0RW5hYmxlICBfVVNCKCAweDE0MDAgKQorI2RlZmluZSBfSENDQQkJICBfVVNCKCAweDE4MDAgKQorI2RlZmluZSBfUGVyaW9kQ3VycmVudEVEICBfVVNCKCAweDFjMDAgKQorI2RlZmluZSBfQ29udHJvbEhlYWRFRAkgIF9VU0IoIDB4MjAwMCApCisjZGVmaW5lIF9CdWxrSGVhZEVECSAgX1VTQiggMHgyODAwICkKKyNkZWZpbmUgX0J1bGtDdXJyZW50RUQJICBfVVNCKCAweDJjMDAgKQorI2RlZmluZSBfRG9uZUhlYWQJICBfVVNCKCAweDMwMDAgKQorI2RlZmluZSBfRm1JbnRlcnZhbAkgIF9VU0IoIDB4MzQwMCApCisjZGVmaW5lIF9GbVJlbWFpbmluZwkgIF9VU0IoIDB4MzgwMCApCisjZGVmaW5lIF9GbU51bWJlcgkgIF9VU0IoIDB4M2MwMCApCisjZGVmaW5lIF9QZXJpb2RpY1N0YXJ0CSAgX1VTQiggMHg0MDAwICkKKyNkZWZpbmUgX0xTVGhyZXNob2xkCSAgX1VTQiggMHg0NDAwICkKKyNkZWZpbmUgX1JoRGVzY3JpcHRvckEJICBfVVNCKCAweDQ4MDAgKQorI2RlZmluZSBfUmhEZXNjcmlwdG9yQgkgIF9VU0IoIDB4NGMwMCApCisjZGVmaW5lIF9SaFN0YXR1cwkgIF9VU0IoIDB4NTAwMCApCisjZGVmaW5lIF9SaFBvcnRTdGF0dXMJICBfVVNCKCAweDU0MDAgKQorI2RlZmluZSBfVVNCU3RhdHVzCSAgX1VTQiggMHgxMTgwMCApCisjZGVmaW5lIF9VU0JSZXNldAkgIF9VU0IoIDB4MTFjMDAgKQorCisjZGVmaW5lIF9VU1RBUgkJICBfVVNCKCAweDEwNDAwICkKKyNkZWZpbmUgX1VTV0VSCQkgIF9VU0IoIDB4MTA4MDAgKQorI2RlZmluZSBfVVNSRlIJCSAgX1VTQiggMHgxMGMwMCApCisjZGVmaW5lIF9VU05GUgkJICBfVVNCKCAweDExMDAwICkKKyNkZWZpbmUgX1VTVENTUgkJICBfVVNCKCAweDExNDAwICkKKyNkZWZpbmUgX1VTU1IJCSAgX1VTQiggMHgxMTgwMCApCisKKworI2lmIChMQU5HVUFHRSA9PSBDKQorCisjZGVmaW5lIFJldmlzaW9uCSgqKCh2b2xhdGlsZSBXb3JkICopIFNBMTEwMV9wMnYgKF9SZXZpc2lvbikpKQorI2RlZmluZSBDb250cm9sCQkoKigodm9sYXRpbGUgV29yZCAqKSBTQTExMDFfcDJ2IChfQ29udHJvbCkpKQorI2RlZmluZSBDb21tYW5kU3RhdHVzCSgqKCh2b2xhdGlsZSBXb3JkICopIFNBMTEwMV9wMnYgKF9Db21tYW5kU3RhdHVzKSkpCisjZGVmaW5lIEludGVycnVwdFN0YXR1cwkoKigodm9sYXRpbGUgV29yZCAqKSBTQTExMDFfcDJ2IChfSW50ZXJydXB0U3RhdHVzKSkpCisjZGVmaW5lIEludGVycnVwdEVuYWJsZQkoKigodm9sYXRpbGUgV29yZCAqKSBTQTExMDFfcDJ2IChfSW50ZXJydXB0RW5hYmxlKSkpCisjZGVmaW5lIEhDQ0EJCSgqKCh2b2xhdGlsZSBXb3JkICopIFNBMTEwMV9wMnYgKF9IQ0NBKSkpCisjZGVmaW5lIFBlcmlvZEN1cnJlbnRFRAkoKigodm9sYXRpbGUgV29yZCAqKSBTQTExMDFfcDJ2IChfUGVyaW9kQ3VycmVudEVEKSkpCisjZGVmaW5lIENvbnRyb2xIZWFkRUQJKCooKHZvbGF0aWxlIFdvcmQgKikgU0ExMTAxX3AydiAoX0NvbnRyb2xIZWFkRUQpKSkKKyNkZWZpbmUgQnVsa0hlYWRFRAkoKigodm9sYXRpbGUgV29yZCAqKSBTQTExMDFfcDJ2IChfQnVsa0hlYWRFRCkpKQorI2RlZmluZSBCdWxrQ3VycmVudEVECSgqKCh2b2xhdGlsZSBXb3JkICopIFNBMTEwMV9wMnYgKF9CdWxrQ3VycmVudEVEKSkpCisjZGVmaW5lIERvbmVIZWFkCSgqKCh2b2xhdGlsZSBXb3JkICopIFNBMTEwMV9wMnYgKF9Eb25lSGVhZCkpKQorI2RlZmluZSBGbUludGVydmFsCSgqKCh2b2xhdGlsZSBXb3JkICopIFNBMTEwMV9wMnYgKF9GbUludGVydmFsKSkpCisjZGVmaW5lIEZtUmVtYWluaW5nCSgqKCh2b2xhdGlsZSBXb3JkICopIFNBMTEwMV9wMnYgKF9GbVJlbWFpbmluZykpKQorI2RlZmluZSBGbU51bWJlcgkoKigodm9sYXRpbGUgV29yZCAqKSBTQTExMDFfcDJ2IChfRm1OdW1iZXIpKSkKKyNkZWZpbmUgUGVyaW9kaWNTdGFydAkoKigodm9sYXRpbGUgV29yZCAqKSBTQTExMDFfcDJ2IChfUGVyaW9kaWNTdGFydCkpKQorI2RlZmluZSBMU1RocmVzaG9sZAkoKigodm9sYXRpbGUgV29yZCAqKSBTQTExMDFfcDJ2IChfTFNUaHJlc2hvbGQpKSkKKyNkZWZpbmUgUmhEZXNjcmlwdG9yQQkoKigodm9sYXRpbGUgV29yZCAqKSBTQTExMDFfcDJ2IChfUmhEZXNjcmlwdG9yQSkpKQorI2RlZmluZSBSaERlc2NyaXB0b3JCCSgqKCh2b2xhdGlsZSBXb3JkICopIFNBMTEwMV9wMnYgKF9SaERlc2NyaXB0b3JCKSkpCisjZGVmaW5lIFJoU3RhdHVzCSgqKCh2b2xhdGlsZSBXb3JkICopIFNBMTEwMV9wMnYgKF9SaFN0YXR1cykpKQorI2RlZmluZSBSaFBvcnRTdGF0dXMJKCooKHZvbGF0aWxlIFdvcmQgKikgU0ExMTAxX3AydiAoX1JoUG9ydFN0YXR1cykpKQorI2RlZmluZSBVU0JTdGF0dXMJKCooKHZvbGF0aWxlIFdvcmQgKikgU0ExMTAxX3AydiAoX1VTQlN0YXR1cykpKQorI2RlZmluZSBVU0JSZXNldAkoKigodm9sYXRpbGUgV29yZCAqKSBTQTExMDFfcDJ2IChfVVNCUmVzZXQpKSkKKyNkZWZpbmUgVVNUQVIJCSgqKCh2b2xhdGlsZSBXb3JkICopIFNBMTEwMV9wMnYgKF9VU1RBUikpKQorI2RlZmluZSBVU1dFUgkJKCooKHZvbGF0aWxlIFdvcmQgKikgU0ExMTAxX3AydiAoX1VTV0VSKSkpCisjZGVmaW5lIFVTUkZSCQkoKigodm9sYXRpbGUgV29yZCAqKSBTQTExMDFfcDJ2IChfVVNSRlIpKSkKKyNkZWZpbmUgVVNORlIJCSgqKCh2b2xhdGlsZSBXb3JkICopIFNBMTEwMV9wMnYgKF9VU05GUikpKQorI2RlZmluZSBVU1RDU1IJCSgqKCh2b2xhdGlsZSBXb3JkICopIFNBMTEwMV9wMnYgKF9VU1RDU1IpKSkKKyNkZWZpbmUgVVNTUgkJKCooKHZvbGF0aWxlIFdvcmQgKikgU0ExMTAxX3AydiAoX1VTU1IpKSkKKworCisjZGVmaW5lIFVTQlN0YXR1c19JcnFIY2lSbXRXa3AJICAgICAoMTw8NykKKyNkZWZpbmUgVVNCU3RhdHVzX0lycUhjaUJ1ZmZBY2MJICAgICAoMTw8OCkKKyNkZWZpbmUgVVNCU3RhdHVzX25JcnFIY2lNCSAgICAgKDE8PDkpCisjZGVmaW5lIFVTQlN0YXR1c19uSGNpTUZDbHIJICAgICAoMTw8MTApCisKKyNkZWZpbmUgVVNCUmVzZXRfRm9yY2VJZlJlc2V0CSAgICAgMHgwMQorI2RlZmluZSBVU0JSZXNldF9Gb3JjZUhjUmVzZXQJICAgICAweDAyCisjZGVmaW5lIFVTQlJlc2V0X0Nsa0dlblJlc2V0CSAgICAgMHgwNAorCisjZGVmaW5lIFVTVENSX1JkQnN0Q250cmwJICAgICBGbGQoMywwKQorI2RlZmluZSBVU1RDUl9CeXRlRW5hYmxlCSAgICAgRmxkKDQsMykKKyNkZWZpbmUgVVNUQ1JfV3JpdGVFbgkJICAgICAoMTw8NykKKyNkZWZpbmUgVVNUQ1JfRmlmb0NpcgkJICAgICAoMTw8OCkKKyNkZWZpbmUgVVNUQ1JfVGVzdFhmZXJTZWwJICAgICAoMTw8OSkKKyNkZWZpbmUgVVNUQ1JfRmlmb0NpckF0RW5kCSAgICAgKDE8PDEwKQorI2RlZmluZSBVU1RDUl9uU2ltU2NhbGVEb3duQ2xrCSAgICAgKDE8PDExKQorCisjZGVmaW5lIFVTU1JfbkFwcE1ERW1wdHkJICAgICAweDAxCisjZGVmaW5lIFVTU1JfbkFwcE1ERmlyc3QJICAgICAweDAyCisjZGVmaW5lIFVTU1JfbkFwcE1ETGFzdAkJICAgICAweDA0CisjZGVmaW5lIFVTU1JfbkFwcE1ERnVsbAkJICAgICAweDA4CisjZGVmaW5lIFVTU1JfbkFwcE1BRnVsbAkJICAgICAweDEwCisjZGVmaW5lIFVTU1JfWGZlclJlcQkJICAgICAweDIwCisjZGVmaW5lIFVTU1JfWGZlckVuZAkJICAgICAweDQwCisKKyNlbmRpZiAvKiBMQU5HVUFHRSA9PSBDICovCisKKworLyoKKyAqIEludGVycnVwdCBDb250cm9sbGVyCisgKgorICogUmVnaXN0ZXJzCisgKiAgICBJTlRURVNUMAkJVGVzdCByZWdpc3RlciAwCisgKiAgICBJTlRURVNUMQkJVGVzdCByZWdpc3RlciAxCisgKiAgICBJTlRFTkFCTEUwCUludGVycnVwdCBFbmFibGUgcmVnaXN0ZXIgMAorICogICAgSU5URU5BQkxFMQlJbnRlcnJ1cHQgRW5hYmxlIHJlZ2lzdGVyIDEKKyAqICAgIElOVFBPTDAJCUludGVycnVwdCBQb2xhcml0eSBzZWxlY3Rpb24gMAorICogICAgSU5UUE9MMQkJSW50ZXJydXB0IFBvbGFyaXR5IHNlbGVjdGlvbiAxCisgKiAgICBJTlRUU1RTRUwJCUludGVycnVwdCBzb3VyY2Ugc2VsZWN0aW9uCisgKiAgICBJTlRTVEFUQ0xSMAlJbnRlcnJ1cHQgU3RhdHVzIDAKKyAqICAgIElOVFNUQVRDTFIxCUludGVycnVwdCBTdGF0dXMgMQorICogICAgSU5UU0VUMAkJSW50ZXJydXB0IFNldCAwCisgKiAgICBJTlRTRVQxCQlJbnRlcnJ1cHQgU2V0IDEKKyAqLworCisjZGVmaW5lIF9JTlQoIHggKQlfU0ExMTAxKCAoIHggKSArIF9fSU5URVJSVVBUX0NPTlRST0wpCisKKyNkZWZpbmUgX0lOVFRFU1QwCV9JTlQoIDB4MTAwMCApCisjZGVmaW5lIF9JTlRURVNUMQlfSU5UKCAweDE0MDAgKQorI2RlZmluZSBfSU5URU5BQkxFMAlfSU5UKCAweDIwMDAgKQorI2RlZmluZSBfSU5URU5BQkxFMQlfSU5UKCAweDI0MDAgKQorI2RlZmluZSBfSU5UUE9MMAlfSU5UKCAweDMwMDAgKQorI2RlZmluZSBfSU5UUE9MMQlfSU5UKCAweDM0MDAgKQorI2RlZmluZSBfSU5UVFNUU0VMICAgICAJX0lOVCggMHg1MDAwICkKKyNkZWZpbmUgX0lOVFNUQVRDTFIwCV9JTlQoIDB4NjAwMCApCisjZGVmaW5lIF9JTlRTVEFUQ0xSMQlfSU5UKCAweDY0MDAgKQorI2RlZmluZSBfSU5UU0VUMAlfSU5UKCAweDcwMDAgKQorI2RlZmluZSBfSU5UU0VUMQlfSU5UKCAweDc0MDAgKQorCisjaWYgKCBMQU5HVUFHRSA9PSBDICkKKyNkZWZpbmUgSU5UVEVTVDAJKCooKHZvbGF0aWxlIFdvcmQgKikgU0ExMTAxX3AydiAoX0lOVFRFU1QwKSkpCisjZGVmaW5lIElOVFRFU1QxCSgqKCh2b2xhdGlsZSBXb3JkICopIFNBMTEwMV9wMnYgKF9JTlRURVNUMSkpKQorI2RlZmluZSBJTlRFTkFCTEUwCSgqKCh2b2xhdGlsZSBXb3JkICopIFNBMTEwMV9wMnYgKF9JTlRFTkFCTEUwKSkpCisjZGVmaW5lIElOVEVOQUJMRTEJKCooKHZvbGF0aWxlIFdvcmQgKikgU0ExMTAxX3AydiAoX0lOVEVOQUJMRTEpKSkKKyNkZWZpbmUgSU5UUE9MMAkJKCooKHZvbGF0aWxlIFdvcmQgKikgU0ExMTAxX3AydiAoX0lOVFBPTDApKSkKKyNkZWZpbmUgSU5UUE9MMQkJKCooKHZvbGF0aWxlIFdvcmQgKikgU0ExMTAxX3AydiAoX0lOVFBPTDEpKSkKKyNkZWZpbmUgSU5UVFNUU0VMCSgqKCh2b2xhdGlsZSBXb3JkICopIFNBMTEwMV9wMnYgKF9JTlRUU1RTRUwpKSkKKyNkZWZpbmUgSU5UU1RBVENMUjAJKCooKHZvbGF0aWxlIFdvcmQgKikgU0ExMTAxX3AydiAoX0lOVFNUQVRDTFIwKSkpCisjZGVmaW5lIElOVFNUQVRDTFIxCSgqKCh2b2xhdGlsZSBXb3JkICopIFNBMTEwMV9wMnYgKF9JTlRTVEFUQ0xSMSkpKQorI2RlZmluZSBJTlRTRVQwCQkoKigodm9sYXRpbGUgV29yZCAqKSBTQTExMDFfcDJ2IChfSU5UU0VUMCkpKQorI2RlZmluZSBJTlRTRVQxCQkoKigodm9sYXRpbGUgV29yZCAqKSBTQTExMDFfcDJ2IChfSU5UU0VUMSkpKQorCisjZW5kaWYgLyogTEFOR1VBR0UgPT0gQyAqLworCisvKgorICogUFMvMiBUcmFja3BhZCBhbmQgTW91c2UgSW50ZXJmYWNlcworICoKKyAqIFJlZ2lzdGVycyAgIChwcmVmaXgga2JkIGFwcGxpZXMgdG8gdHJhY2twYWQgaW50ZXJmYWNlLCBtc2UgdG8gbW91c2UpCisgKiAgICBLQkRDUgkJQ29udHJvbCBSZWdpc3RlcgorICogICAgS0JEU1RBVAkJU3RhdHVzIFJlZ2lzdGVyCisgKiAgICBLQkREQVRBCQlUcmFuc21pdC9SZWNlaXZlIERhdGEgcmVnaXN0ZXIKKyAqICAgIEtCRENMS0RJVgkJQ2xvY2sgRGl2aXNpb24gUmVnaXN0ZXIKKyAqICAgIEtCRFBSRUNOVAkJQ2xvY2sgUHJlY291bnQgUmVnaXN0ZXIKKyAqICAgIEtCRFRFU1QxCQlUZXN0IHJlZ2lzdGVyIDEKKyAqICAgIEtCRFRFU1QyCQlUZXN0IHJlZ2lzdGVyIDIKKyAqICAgIEtCRFRFU1QzCQlUZXN0IHJlZ2lzdGVyIDMKKyAqICAgIEtCRFRFU1Q0CQlUZXN0IHJlZ2lzdGVyIDQKKyAqICAgIE1TRUNSCQorICogICAgTVNFU1RBVAorICogICAgTVNFREFUQQorICogICAgTVNFQ0xLRElWCisgKiAgICBNU0VQUkVDTlQKKyAqICAgIE1TRVRFU1QxCisgKiAgICBNU0VURVNUMgorICogICAgTVNFVEVTVDMKKyAqICAgIE1TRVRFU1Q0CisgKiAgICAgCisgKi8KKworI2RlZmluZSBfS0JEKCB4ICkJX1NBMTEwMSggKCB4ICkgKyBfX1RSQUNLX0lOVEVSRkFDRSApCisjZGVmaW5lIF9NU0UoIHggKQlfU0ExMTAxKCAoIHggKSArIF9fTU9VU0VfSU5URVJGQUNFICkKKworI2RlZmluZSBfS0JEQ1IJCV9LQkQoIDB4MDAwMCApCisjZGVmaW5lIF9LQkRTVEFUCV9LQkQoIDB4MDQwMCApCisjZGVmaW5lIF9LQkREQVRBCV9LQkQoIDB4MDgwMCApCisjZGVmaW5lIF9LQkRDTEtESVYJX0tCRCggMHgwYzAwICkKKyNkZWZpbmUgX0tCRFBSRUNOVAlfS0JEKCAweDEwMDAgKQorI2RlZmluZQlfS0JEVEVTVDEJX0tCRCggMHgyMDAwICkKKyNkZWZpbmUgX0tCRFRFU1QyCV9LQkQoIDB4MjQwMCApCisjZGVmaW5lIF9LQkRURVNUMwlfS0JEKCAweDI4MDAgKQorI2RlZmluZSBfS0JEVEVTVDQJX0tCRCggMHgyYzAwICkKKyNkZWZpbmUgX01TRUNSCQlfTVNFKCAweDAwMDAgKQorI2RlZmluZSBfTVNFU1RBVAlfTVNFKCAweDA0MDAgKQorI2RlZmluZSBfTVNFREFUQQlfTVNFKCAweDA4MDAgKQorI2RlZmluZSBfTVNFQ0xLRElWCV9NU0UoIDB4MGMwMCApCisjZGVmaW5lIF9NU0VQUkVDTlQJX01TRSggMHgxMDAwICkKKyNkZWZpbmUJX01TRVRFU1QxCV9NU0UoIDB4MjAwMCApCisjZGVmaW5lIF9NU0VURVNUMglfTVNFKCAweDI0MDAgKQorI2RlZmluZSBfTVNFVEVTVDMJX01TRSggMHgyODAwICkKKyNkZWZpbmUgX01TRVRFU1Q0CV9NU0UoIDB4MmMwMCApCisKKyNpZiAoIExBTkdVQUdFID09IEMgKQorCisjZGVmaW5lIEtCRENSCSAgICAoKigodm9sYXRpbGUgV29yZCAqKSBTQTExMDFfcDJ2IChfS0JEQ1IpKSkKKyNkZWZpbmUgS0JEU1RBVAkgICAgKCooKHZvbGF0aWxlIFdvcmQgKikgU0ExMTAxX3AydiAoX0tCRFNUQVQpKSkKKyNkZWZpbmUgS0JEREFUQQkgICAgKCooKHZvbGF0aWxlIFdvcmQgKikgU0ExMTAxX3AydiAoX0tCRERBVEEpKSkKKyNkZWZpbmUgS0JEQ0xLRElWICAgKCooKHZvbGF0aWxlIFdvcmQgKikgU0ExMTAxX3AydiAoX0tCRENMS0RJVikpKQorI2RlZmluZSBLQkRQUkVDTlQgICAoKigodm9sYXRpbGUgV29yZCAqKSBTQTExMDFfcDJ2IChfS0JEUFJFQ05UKSkpCisjZGVmaW5lIEtCRFRFU1QxICAgICgqKCh2b2xhdGlsZSBXb3JkICopIFNBMTEwMV9wMnYgKF9LQkRURVNUMSkpKQorI2RlZmluZSBLQkRURVNUMiAgICAoKigodm9sYXRpbGUgV29yZCAqKSBTQTExMDFfcDJ2IChfS0JEVEVTVDIpKSkKKyNkZWZpbmUgS0JEVEVTVDMgICAgKCooKHZvbGF0aWxlIFdvcmQgKikgU0ExMTAxX3AydiAoX0tCRFRFU1QzKSkpCisjZGVmaW5lIEtCRFRFU1Q0ICAgICgqKCh2b2xhdGlsZSBXb3JkICopIFNBMTEwMV9wMnYgKF9LQkRURVNUNCkpKQorI2RlZmluZSBNU0VDUgkgICAgKCooKHZvbGF0aWxlIFdvcmQgKikgU0ExMTAxX3AydiAoX01TRUNSKSkpCisjZGVmaW5lIE1TRVNUQVQJICAgICgqKCh2b2xhdGlsZSBXb3JkICopIFNBMTEwMV9wMnYgKF9NU0VTVEFUKSkpCisjZGVmaW5lIE1TRURBVEEJICAgICgqKCh2b2xhdGlsZSBXb3JkICopIFNBMTEwMV9wMnYgKF9NU0VEQVRBKSkpCisjZGVmaW5lIE1TRUNMS0RJViAgICgqKCh2b2xhdGlsZSBXb3JkICopIFNBMTEwMV9wMnYgKF9NU0VDTEtESVYpKSkKKyNkZWZpbmUgTVNFUFJFQ05UICAgKCooKHZvbGF0aWxlIFdvcmQgKikgU0ExMTAxX3AydiAoX01TRVBSRUNOVCkpKQorI2RlZmluZSBNU0VURVNUMSAgICAoKigodm9sYXRpbGUgV29yZCAqKSBTQTExMDFfcDJ2IChfTVNFVEVTVDEpKSkKKyNkZWZpbmUgTVNFVEVTVDIgICAgKCooKHZvbGF0aWxlIFdvcmQgKikgU0ExMTAxX3AydiAoX01TRVRFU1QyKSkpCisjZGVmaW5lIE1TRVRFU1QzICAgICgqKCh2b2xhdGlsZSBXb3JkICopIFNBMTEwMV9wMnYgKF9NU0VURVNUMykpKQorI2RlZmluZSBNU0VURVNUNCAgICAoKigodm9sYXRpbGUgV29yZCAqKSBTQTExMDFfcDJ2IChfTVNFVEVTVDQpKSkKKworCisjZGVmaW5lIEtCRENSX0VOQQkJIDB4MDgKKyNkZWZpbmUgS0JEQ1JfRktECQkgMHgwMgorI2RlZmluZSBLQkRDUl9GS0MJCSAweDAxCisKKyNkZWZpbmUgS0JEU1RBVF9UWEUJCSAweDgwCisjZGVmaW5lIEtCRFNUQVRfVFhCCQkgMHg0MAorI2RlZmluZSBLQkRTVEFUX1JYRgkJIDB4MjAKKyNkZWZpbmUgS0JEU1RBVF9SWEIJCSAweDEwCisjZGVmaW5lIEtCRFNUQVRfRU5BCQkgMHgwOAorI2RlZmluZSBLQkRTVEFUX1JYUAkJIDB4MDQKKyNkZWZpbmUgS0JEU1RBVF9LQkQJCSAweDAyCisjZGVmaW5lIEtCRFNUQVRfS0JDCQkgMHgwMQorCisjZGVmaW5lIEtCRENMS0RJVl9EaXZWYWwJIEZsZCg0LDApCisKKyNkZWZpbmUgTVNFQ1JfRU5BCQkgMHgwOAorI2RlZmluZSBNU0VDUl9GS0QJCSAweDAyCisjZGVmaW5lIE1TRUNSX0ZLQwkJIDB4MDEKKworI2RlZmluZSBNU0VTVEFUX1RYRQkJIDB4ODAKKyNkZWZpbmUgTVNFU1RBVF9UWEIJCSAweDQwCisjZGVmaW5lIE1TRVNUQVRfUlhGCQkgMHgyMAorI2RlZmluZSBNU0VTVEFUX1JYQgkJIDB4MTAKKyNkZWZpbmUgTVNFU1RBVF9FTkEJCSAweDA4CisjZGVmaW5lIE1TRVNUQVRfUlhQCQkgMHgwNAkKKyNkZWZpbmUgTVNFU1RBVF9NU0QJCSAweDAyCisjZGVmaW5lIE1TRVNUQVRfTVNDCQkgMHgwMQorCisjZGVmaW5lIE1TRUNMS0RJVl9EaXZWYWwJIEZsZCg0LDApCisKKyNkZWZpbmUgS0JEVEVTVDFfQ0QJCSAweDgwCisjZGVmaW5lIEtCRFRFU1QxX1JDMQkJIDB4NDAKKyNkZWZpbmUgS0JEVEVTVDFfTUMJCSAweDIwCisjZGVmaW5lIEtCRFRFU1QxX0MJCSBGbGQoMiwzKQorI2RlZmluZSBLQkRURVNUMV9UMgkJIDB4NDAKKyNkZWZpbmUgS0JEVEVTVDFfVDEJCSAweDIwCisjZGVmaW5lIEtCRFRFU1QxX1QwCQkgMHgxMAorI2RlZmluZSBLQkRURVNUMl9USUNCblJFUwkgMHgwOAorI2RlZmluZSBLQkRURVNUMl9SS0MJCSAweDA0CisjZGVmaW5lIEtCRFRFU1QyX1JLRAkJIDB4MDIKKyNkZWZpbmUgS0JEVEVTVDJfU0VMCQkgMHgwMQorI2RlZmluZSBLQkRURVNUM19tc18xNgkJIDB4ODAKKyNkZWZpbmUgS0JEVEVTVDNfdXNfNjQJCSAweDQwCisjZGVmaW5lIEtCRFRFU1QzX3VzXzE2CQkgMHgyMAorI2RlZmluZSBLQkRURVNUM19ESVY4CQkgMHgxMAorI2RlZmluZSBLQkRURVNUM19ESW4JCSAweDA4CisjZGVmaW5lIEtCRFRFU1QzX0NJbgkJIDB4MDQKKyNkZWZpbmUgS0JEVEVTVDNfS0QJCSAweDAyCisjZGVmaW5lIEtCRFRFU1QzX0tDCQkgMHgwMQorI2RlZmluZSBLQkRURVNUNF9CQzEyCQkgMHg4MAorI2RlZmluZSBLQkRURVNUNF9CQzExCQkgMHg0MAorI2RlZmluZSBLQkRURVNUNF9UUkVTCQkgMHgyMAorI2RlZmluZSBLQkRURVNUNF9DTEtPRQkJIDB4MTAKKyNkZWZpbmUgS0JEVEVTVDRfQ1JFUwkJIDB4MDgKKyNkZWZpbmUgS0JEVEVTVDRfUlhCCQkgMHgwNAorI2RlZmluZSBLQkRURVNUNF9UWEIJCSAweDAyCisjZGVmaW5lIEtCRFRFU1Q0X1NSWAkJIDB4MDEKKworI2RlZmluZSBNU0VURVNUMV9DRAkJIDB4ODAKKyNkZWZpbmUgTVNFVEVTVDFfUkMxCQkgMHg0MAorI2RlZmluZSBNU0VURVNUMV9NQwkJIDB4MjAKKyNkZWZpbmUgTVNFVEVTVDFfQwkJIEZsZCgyLDMpCisjZGVmaW5lIE1TRVRFU1QxX1QyCQkgMHg0MAorI2RlZmluZSBNU0VURVNUMV9UMQkJIDB4MjAKKyNkZWZpbmUgTVNFVEVTVDFfVDAJCSAweDEwCisjZGVmaW5lIE1TRVRFU1QyX1RJQ0JuUkVTCSAweDA4CisjZGVmaW5lIE1TRVRFU1QyX1JLQwkJIDB4MDQKKyNkZWZpbmUgTVNFVEVTVDJfUktECQkgMHgwMgorI2RlZmluZSBNU0VURVNUMl9TRUwJCSAweDAxCisjZGVmaW5lIE1TRVRFU1QzX21zXzE2CQkgMHg4MAorI2RlZmluZSBNU0VURVNUM191c182NAkJIDB4NDAKKyNkZWZpbmUgTVNFVEVTVDNfdXNfMTYJCSAweDIwCisjZGVmaW5lIE1TRVRFU1QzX0RJVjgJCSAweDEwCisjZGVmaW5lIE1TRVRFU1QzX0RJbgkJIDB4MDgKKyNkZWZpbmUgTVNFVEVTVDNfQ0luCQkgMHgwNAorI2RlZmluZSBNU0VURVNUM19LRAkJIDB4MDIKKyNkZWZpbmUgTVNFVEVTVDNfS0MJCSAweDAxCisjZGVmaW5lIE1TRVRFU1Q0X0JDMTIJCSAweDgwCisjZGVmaW5lIE1TRVRFU1Q0X0JDMTEJCSAweDQwCisjZGVmaW5lIE1TRVRFU1Q0X1RSRVMJCSAweDIwCisjZGVmaW5lIE1TRVRFU1Q0X0NMS09FCQkgMHgxMAorI2RlZmluZSBNU0VURVNUNF9DUkVTCQkgMHgwOAorI2RlZmluZSBNU0VURVNUNF9SWEIJCSAweDA0CisjZGVmaW5lIE1TRVRFU1Q0X1RYQgkJIDB4MDIKKyNkZWZpbmUgTVNFVEVTVDRfU1JYCQkgMHgwMQorCisjZW5kaWYgIC8qIExBTkdVQUdFID09IEMgKi8KKworCisvKgorICogR2VuZXJhbC1QdXJwb3NlIEkvTyBJbnRlcmZhY2UKKyAqCisgKiBSZWdpc3RlcnMKKyAqICAgIFBBRFdSCVBvcnQgQSBEYXRhIFdyaXRlIFJlZ2lzdGVyCisgKiAgICBQQkRXUglQb3J0IEIgRGF0YSBXcml0ZSBSZWdpc3RlcgorICogICAgUEFEUlIJUG9ydCBBIERhdGEgUmVhZCBSZWdpc3RlcgorICogICAgUEJEUlIJUG9ydCBCIERhdGEgUmVhZCBSZWdpc3RlcgorICogICAgUEFERFIJUG9ydCBBIERhdGEgRGlyZWN0aW9uIFJlZ2lzdGVyCisgKiAgICBQQkREUglQb3J0IEIgRGF0YSBEaXJlY3Rpb24gUmVnaXN0ZXIKKyAqICAgIFBBU1NSCVBvcnQgQSBTbGVlcCBTdGF0ZSBSZWdpc3RlcgorICogICAgUEJTU1IJUG9ydCBCIFNsZWVwIFN0YXRlIFJlZ2lzdGVyCisgKgorICovCisKKyNkZWZpbmUgX1BJTyggeCApICAgICAgX1NBMTEwMSggKCB4ICkgKyBfX0dQSU9fSU5URVJGQUNFICkKKworI2RlZmluZSBfUEFEV1IJICAgICAgIF9QSU8oIDB4MDAwMCApCisjZGVmaW5lIF9QQkRXUgkgICAgICAgX1BJTyggMHgwNDAwICkKKyNkZWZpbmUgX1BBRFJSCSAgICAgICBfUElPKCAweDAwMDAgKQorI2RlZmluZSBfUEJEUlIJICAgICAgIF9QSU8oIDB4MDQwMCApCisjZGVmaW5lIF9QQUREUgkgICAgICAgX1BJTyggMHgwODAwICkKKyNkZWZpbmUgX1BCRERSCSAgICAgICBfUElPKCAweDBjMDAgKQorI2RlZmluZSBfUEFTU1IJICAgICAgIF9QSU8oIDB4MTAwMCApCisjZGVmaW5lIF9QQlNTUgkgICAgICAgX1BJTyggMHgxNDAwICkKKworCisjaWYgKCBMQU5HVUFHRSA9PSBDICkKKworCisjZGVmaW5lIFBBRFdSCSAgICAoKigodm9sYXRpbGUgV29yZCAqKSBTQTExMDFfcDJ2IChfUEFEV1IpKSkKKyNkZWZpbmUgUEJEV1IJICAgICgqKCh2b2xhdGlsZSBXb3JkICopIFNBMTEwMV9wMnYgKF9QQkRXUikpKQorI2RlZmluZSBQQURSUgkgICAgKCooKHZvbGF0aWxlIFdvcmQgKikgU0ExMTAxX3AydiAoX1BBRFJSKSkpCisjZGVmaW5lIFBCRFJSCSAgICAoKigodm9sYXRpbGUgV29yZCAqKSBTQTExMDFfcDJ2IChfUEJEUlIpKSkKKyNkZWZpbmUgUEFERFIJICAgICgqKCh2b2xhdGlsZSBXb3JkICopIFNBMTEwMV9wMnYgKF9QQUREUikpKQorI2RlZmluZSBQQkREUgkgICAgKCooKHZvbGF0aWxlIFdvcmQgKikgU0ExMTAxX3AydiAoX1BCRERSKSkpCisjZGVmaW5lIFBBU1NSCSAgICAoKigodm9sYXRpbGUgV29yZCAqKSBTQTExMDFfcDJ2IChfUEFTU1IpKSkKKyNkZWZpbmUgUEJTU1IJICAgICgqKCh2b2xhdGlsZSBXb3JkICopIFNBMTEwMV9wMnYgKF9QQlNTUikpKQorCisjZW5kaWYKKworCisKKy8qCisgKiBLZXlwYWQgSW50ZXJmYWNlCisgKgorICogUmVnaXN0ZXJzCisgKiAgICBQWERXUgorICogICAgUFhEUlIKKyAqICAgIFBZRFdSCisgKiAgICBQWURSUgorICoKKyAqLworCisjZGVmaW5lIF9LRVlQQUQoIHggKQlfU0ExMTAxKCAoIHggKSArIF9fS0VZUEFEX0lOVEVSRkFDRSApIAorCisjZGVmaW5lIF9QWERXUgkgICBfS0VZUEFEKCAweDAwMDAgKQorI2RlZmluZSBfUFhEUlIJICAgX0tFWVBBRCggMHgwMDAwICkKKyNkZWZpbmUgX1BZRFdSCSAgIF9LRVlQQUQoIDB4MDQwMCApCisjZGVmaW5lIF9QWURSUgkgICBfS0VZUEFEKCAweDA0MDAgKQorCisjaWYgKCBMQU5HVUFHRSA9PSBDICkKKworCisjZGVmaW5lIFBYRFdSCSAgICAoKigodm9sYXRpbGUgV29yZCAqKSBTQTExMDFfcDJ2IChfUFhEV1IpKSkKKyNkZWZpbmUgUFhEUlIJICAgICgqKCh2b2xhdGlsZSBXb3JkICopIFNBMTEwMV9wMnYgKF9QWERSUikpKQorI2RlZmluZSBQWURXUgkgICAgKCooKHZvbGF0aWxlIFdvcmQgKikgU0ExMTAxX3AydiAoX1BZRFdSKSkpCisjZGVmaW5lIFBZRFJSCSAgICAoKigodm9sYXRpbGUgV29yZCAqKSBTQTExMDFfcDJ2IChfUFlEUlIpKSkKKworI2VuZGlmCisKKworCisvKgorICogUENNQ0lBIEludGVyZmFjZQorICoKKyAqIFJlZ2lzdGVycworICogICAgUENTUglTdGF0dXMgUmVnaXN0ZXIKKyAqICAgIFBDQ1IJQ29udHJvbCBSZWdpc3RlcgorICogICAgUENTU1IJU2xlZXAgU3RhdGUgUmVnaXN0ZXIKKyAqCisgKi8KKworI2RlZmluZSBfQ0FSRCggeCApCV9TQTExMDEoICggeCApICsgX19QQ01DSUFfSU5URVJGQUNFICkKKworI2RlZmluZSBfUENTUgkgICBfQ0FSRCggMHgwMDAwICkKKyNkZWZpbmUgX1BDQ1IJICAgX0NBUkQoIDB4MDQwMCApCisjZGVmaW5lIF9QQ1NTUgkgICBfQ0FSRCggMHgwODAwICkKKworI2lmICggTEFOR1VBR0UgPT0gQyApCisjZGVmaW5lIFBDU1IgICAgKCooKHZvbGF0aWxlIFdvcmQgKikgU0ExMTAxX3AydiAoX1BDU1IpKSkKKyNkZWZpbmUgUENDUgkoKigodm9sYXRpbGUgV29yZCAqKSBTQTExMDFfcDJ2IChfUENDUikpKQorI2RlZmluZSBQQ1NTUgkoKigodm9sYXRpbGUgV29yZCAqKSBTQTExMDFfcDJ2IChfUENTU1IpKSkKKworI2RlZmluZSBQQ1NSX1MwX3JlYWR5CQkweDAwMDEKKyNkZWZpbmUgUENTUl9TMV9yZWFkeQkJMHgwMDAyCisjZGVmaW5lIFBDU1JfUzBfZGV0ZWN0ZWQJMHgwMDA0CisjZGVmaW5lIFBDU1JfUzFfZGV0ZWN0ZWQJMHgwMDA4CisjZGVmaW5lIFBDU1JfUzBfVlMxCQkweDAwMTAKKyNkZWZpbmUgUENTUl9TMF9WUzIJCTB4MDAyMAorI2RlZmluZSBQQ1NSX1MxX1ZTMQkJMHgwMDQwCisjZGVmaW5lIFBDU1JfUzFfVlMyCQkweDAwODAKKyNkZWZpbmUgUENTUl9TMF9XUAkJMHgwMTAwCisjZGVmaW5lIFBDU1JfUzFfV1AJCTB4MDIwMAorI2RlZmluZSBQQ1NSX1MwX0JWRDFfblNUU0NIRwkweDA0MDAKKyNkZWZpbmUgUENTUl9TMF9CVkQyX25TUEtSCTB4MDgwMAorI2RlZmluZSBQQ1NSX1MxX0JWRDFfblNUU0NIRwkweDEwMDAKKyNkZWZpbmUgUENTUl9TMV9CVkQyX25TUEtSCTB4MjAwMAorCisjZGVmaW5lIFBDQ1JfUzBfVlBQMAkJMHgwMDAxCisjZGVmaW5lIFBDQ1JfUzBfVlBQMQkJMHgwMDAyCisjZGVmaW5lIFBDQ1JfUzBfVkNDMAkJMHgwMDA0CisjZGVmaW5lIFBDQ1JfUzBfVkNDMQkJMHgwMDA4CisjZGVmaW5lIFBDQ1JfUzFfVlBQMAkJMHgwMDEwCisjZGVmaW5lIFBDQ1JfUzFfVlBQMQkJMHgwMDIwCisjZGVmaW5lIFBDQ1JfUzFfVkNDMAkJMHgwMDQwCisjZGVmaW5lIFBDQ1JfUzFfVkNDMQkJMHgwMDgwCisjZGVmaW5lIFBDQ1JfUzBfcmVzZXQJCTB4MDEwMAorI2RlZmluZSBQQ0NSX1MxX3Jlc2V0CQkweDAyMDAKKyNkZWZpbmUgUENDUl9TMF9mbG9hdAkJMHgwNDAwCisjZGVmaW5lIFBDQ1JfUzFfZmxvYXQJCTB4MDgwMAorCisjZGVmaW5lIFBDU1NSX1MwX1ZDQzAJCTB4MDAwMQorI2RlZmluZSBQQ1NTUl9TMF9WQ0MxCQkweDAwMDIKKyNkZWZpbmUgUENTU1JfUzBfVlBQMAkJMHgwMDA0CisjZGVmaW5lIFBDU1NSX1MwX1ZQUDEJCTB4MDAwOAorI2RlZmluZSBQQ1NTUl9TMF9jb250cm9sCTB4MDAxMAorI2RlZmluZSBQQ1NTUl9TMV9WQ0MwCQkweDAwMjAKKyNkZWZpbmUgUENTU1JfUzFfVkNDMQkJMHgwMDQwCisjZGVmaW5lIFBDU1NSX1MxX1ZQUDAJCTB4MDA4MAorI2RlZmluZSBQQ1NTUl9TMV9WUFAxCQkweDAxMDAKKyNkZWZpbmUgUENTU1JfUzFfY29udHJvbAkweDAyMDAKKworI2VuZGlmCisKKyN1bmRlZiBDCisjdW5kZWYgQXNzZW1ibHkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9TQS0xMTExLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvU0EtMTExMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzOGY2MDkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvU0EtMTExMS5oCkBAIC0wLDAgKzEsNSBAQAorLyoKKyAqIE1vdmVkIHRvIG5ldyBsb2NhdGlvbgorICovCisjd2FybmluZyB1c2luZyBvbGQgU0EtMTExMS5oIC0gdXBkYXRlIHRvIDxhc20vaGFyZHdhcmUvc2ExMTExLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL3NhMTExMS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL2Fzc2FiZXQuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9hc3NhYmV0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY1OWIzNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9hc3NhYmV0LmgKQEAgLTAsMCArMSwxMDYgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvYXNzYWJldC5oCisgKgorICogQ3JlYXRlZCAyMDAwLzA2LzA1IGJ5IE5pY29sYXMgUGl0cmUgPG5pY29AY2FtLm9yZz4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGhhcmR3YXJlIHNwZWNpZmljIGRlZmluaXRpb25zIGZvciBBc3NhYmV0CisgKiBPbmx5IGluY2x1ZGUgdGhpcyBmaWxlIGZyb20gU0ExMTAwLXNwZWNpZmljIGZpbGVzLgorICoKKyAqIDIwMDAvMDUvMjMgSm9obiBEb3JzZXkgPGpvaG4rQGNzLmNtdS5lZHU+CisgKiAgICAgIERlZmluaXRpb25zIGZvciBOZXBvbnNldCBhZGRlZC4KKyAqLworI2lmbmRlZiBfX0FTTV9BUkNIX0FTU0FCRVRfSAorI2RlZmluZSBfX0FTTV9BUkNIX0FTU0FCRVRfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKy8qIFN5c3RlbSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIGZsYWdzICovCisKKyNkZWZpbmUgQVNTQUJFVF9TQ1JfU0RSQU1fTE9XCSgxPDwyKQkvKiBTRFJBTSBzaXplIChsb3cgYml0KSAqLworI2RlZmluZSBBU1NBQkVUX1NDUl9TRFJBTV9ISUdICSgxPDwzKQkvKiBTRFJBTSBzaXplIChoaWdoIGJpdCkgKi8KKyNkZWZpbmUgQVNTQUJFVF9TQ1JfRkxBU0hfTE9XCSgxPDw0KQkvKiBGbGFzaCBzaXplIChsb3cgYml0KSAqLworI2RlZmluZSBBU1NBQkVUX1NDUl9GTEFTSF9ISUdICSgxPDw1KQkvKiBGbGFzaCBzaXplIChoaWdoIGJpdCkgKi8KKyNkZWZpbmUgQVNTQUJFVF9TQ1JfR0ZYCQkoMTw8OCkJLyogR3JhcGhpY3MgQWNjZWxlcmF0b3IgKDAgPSBwcmVzZW50KSAqLworI2RlZmluZSBBU1NBQkVUX1NDUl9TQTExMTEJKDE8PDkpCS8qIE5lcG9uc2V0ICgwID0gcHJlc2VudCkgKi8KKworI2RlZmluZSBBU1NBQkVUX1NDUl9JTklUCS0xCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIFNDUl92YWx1ZTsKKworI2lmZGVmIENPTkZJR19BU1NBQkVUX05FUE9OU0VUCisjZGVmaW5lIG1hY2hpbmVfaGFzX25lcG9uc2V0KCkgICgoU0NSX3ZhbHVlICYgQVNTQUJFVF9TQ1JfU0ExMTExKSA9PSAwKQorI2Vsc2UKKyNkZWZpbmUgbWFjaGluZV9oYXNfbmVwb25zZXQoKQkoMCkKKyNlbmRpZgorCisvKiBCb2FyZCBDb250cm9sIFJlZ2lzdGVyICovCisKKyNkZWZpbmUgQVNTQUJFVF9CQ1JfQkFTRSAgMHhmMTAwMDAwMAorI2RlZmluZSBBU1NBQkVUX0JDUiAoKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikoQVNTQUJFVF9CQ1JfQkFTRSkpCisKKyNkZWZpbmUgQVNTQUJFVF9CQ1JfQ0ZfUFdSCSgxPDwwKQkvKiBDb21wYWN0IEZsYXNoIFBvd2VyICgxID0gMy4zdiwgMCA9IG9mZikgKi8KKyNkZWZpbmUgQVNTQUJFVF9CQ1JfQ0ZfUlNUCSgxPDwxKQkvKiBDb21wYWN0IEZsYXNoIFJlc2V0ICgxID0gcG93ZXIgdXAgcmVzZXQpICovCisjZGVmaW5lIEFTU0FCRVRfQkNSX0dGWF9SU1QJKDE8PDEpCS8qIEdyYXBoaWNzIEFjY2VsZXJhdG9yIFJlc2V0ICgwID0gaG9sZCByZXNldCkgKi8KKyNkZWZpbmUgQVNTQUJFVF9CQ1JfQ09ERUNfUlNUCSgxPDwyKQkvKiAwID0gSG9sZHMgVUNCMTMwMCwgQURJNzE3MSwgYW5kIFVEQTEzNDEgaW4gcmVzZXQgKi8KKyNkZWZpbmUgQVNTQUJFVF9CQ1JfSVJEQV9GU0VMCSgxPDwzKQkvKiBJUkRBIEZyZXF1ZW5jeSBzZWxlY3QgKDAgPSBTSVIsIDEgPSBNSVIvIEZJUikgKi8KKyNkZWZpbmUgQVNTQUJFVF9CQ1JfSVJEQV9NRDAJKDE8PDQpCS8qIFJhbmdlL1Bvd2VyIHNlbGVjdCAqLworI2RlZmluZSBBU1NBQkVUX0JDUl9JUkRBX01EMQkoMTw8NSkJLyogUmFuZ2UvUG93ZXIgc2VsZWN0ICovCisjZGVmaW5lIEFTU0FCRVRfQkNSX1NURVJFT19MQgkoMTw8NikJLyogU3RlcmVvIExvb3BiYWNrICovCisjZGVmaW5lIEFTU0FCRVRfQkNSX0NGX0JVU19PRkYJKDE8PDcpCS8qIENvbXBhY3QgRmxhc2ggYnVzICgwID0gb24sIDEgPSBvZmYgKGZsb2F0KSkgKi8KKyNkZWZpbmUgQVNTQUJFVF9CQ1JfQVVESU9fT04JKDE8PDgpCS8qIEF1ZGlvIHBvd2VyIG9uICovCisjZGVmaW5lIEFTU0FCRVRfQkNSX0xJR0hUX09OCSgxPDw5KQkvKiBCYWNrbGlnaHQgKi8KKyNkZWZpbmUgQVNTQUJFVF9CQ1JfTENEXzEyUkdCCSgxPDwxMCkJLyogMCA9IDE2UkdCLCAxID0gMTJSR0IgKi8KKyNkZWZpbmUgQVNTQUJFVF9CQ1JfTENEX09OCSgxPDwxMSkJLyogTENEIHBvd2VyIG9uICovCisjZGVmaW5lIEFTU0FCRVRfQkNSX1JTMjMyRU4JKDE8PDEyKQkvKiBSUzIzMiB0cmFuc2NlaXZlciBlbmFibGUgKi8KKyNkZWZpbmUgQVNTQUJFVF9CQ1JfTEVEX1JFRAkoMTw8MTMpCS8qIEQ5ICgwID0gb24sIDEgPSBvZmYpICovCisjZGVmaW5lIEFTU0FCRVRfQkNSX0xFRF9HUkVFTgkoMTw8MTQpCS8qIEQ4ICgwID0gb24sIDEgPSBvZmYpICovCisjZGVmaW5lIEFTU0FCRVRfQkNSX1ZJQl9PTgkoMTw8MTUpCS8qIFZpYnJhdGlvbiBtb3RvciAocXVpZXQgYWxlcnQpICovCisjZGVmaW5lIEFTU0FCRVRfQkNSX0NPTV9EVFIJKDE8PDE2KQkvKiBDT01wb3J0IERhdGEgVGVybWluYWwgUmVhZHkgKi8KKyNkZWZpbmUgQVNTQUJFVF9CQ1JfQ09NX1JUUwkoMTw8MTcpCS8qIENPTXBvcnQgUmVxdWVzdCBUbyBTZW5kICovCisjZGVmaW5lIEFTU0FCRVRfQkNSX1JBRF9XVQkoMTw8MTgpCS8qIFJhZGlvIHdha2UgdXAgaW50ZXJydXB0ICovCisjZGVmaW5lIEFTU0FCRVRfQkNSX1NNQl9FTgkoMTw8MTkpCS8qIFN5c3RlbSBtYW5hZ2VtZW50IGJ1cyBlbmFibGUgKi8KKyNkZWZpbmUgQVNTQUJFVF9CQ1JfVFZfSVJfREVDCSgxPDwyMCkJLyogVFYgSVIgRGVjb2RlIEVuYWJsZSAobm90IGltcGxlbWVudGVkKSAqLworI2RlZmluZSBBU1NBQkVUX0JDUl9RTVVURQkoMTw8MjEpCS8qIFF1aWNrIE11dGUgKi8KKyNkZWZpbmUgQVNTQUJFVF9CQ1JfUkFEX09OCSgxPDwyMikJLyogUmFkaW8gUG93ZXIgT24gKi8KKyNkZWZpbmUgQVNTQUJFVF9CQ1JfU1BLX09GRgkoMTw8MjMpCS8qIDEgPSBTcGVha2VyIGFtcGxpZmllciBwb3dlciBvZmYgKi8KKworI2lmZGVmIENPTkZJR19TQTExMDBfQVNTQUJFVAorZXh0ZXJuIHZvaWQgQVNTQUJFVF9CQ1JfZnJvYih1bnNpZ25lZCBpbnQgbWFzaywgdW5zaWduZWQgaW50IHNldCk7CisjZWxzZQorI2RlZmluZSBBU1NBQkVUX0JDUl9mcm9iKHgseSkJZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKKyNkZWZpbmUgQVNTQUJFVF9CQ1Jfc2V0KHgpCUFTU0FCRVRfQkNSX2Zyb2IoKHgpLCAoeCkpCisjZGVmaW5lIEFTU0FCRVRfQkNSX2NsZWFyKHgpCUFTU0FCRVRfQkNSX2Zyb2IoKHgpLCAwKQorCisjZGVmaW5lIEFTU0FCRVRfQlNSX0JBU0UJMHhmMTAwMDAwMAorI2RlZmluZSBBU1NBQkVUX0JTUiAoKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQqKShBU1NBQkVUX0JTUl9CQVNFKSkKKworI2RlZmluZSBBU1NBQkVUX0JTUl9SUzIzMl9WQUxJRAkoMSA8PCAyNCkKKyNkZWZpbmUgQVNTQUJFVF9CU1JfQ09NX0RDRAkoMSA8PCAyNSkKKyNkZWZpbmUgQVNTQUJFVF9CU1JfQ09NX0NUUwkoMSA8PCAyNikKKyNkZWZpbmUgQVNTQUJFVF9CU1JfQ09NX0RTUgkoMSA8PCAyNykKKyNkZWZpbmUgQVNTQUJFVF9CU1JfUkFEX0NUUwkoMSA8PCAyOCkKKyNkZWZpbmUgQVNTQUJFVF9CU1JfUkFEX0RTUgkoMSA8PCAyOSkKKyNkZWZpbmUgQVNTQUJFVF9CU1JfUkFEX0RDRAkoMSA8PCAzMCkKKyNkZWZpbmUgQVNTQUJFVF9CU1JfUkFEX1JJCSgxIDw8IDMxKQorCisKKy8qIEdQSU9zIGZvciB3aGljaCB0aGUgZ2VuZXJpYyBkZWZpbml0aW9uIGRvZXNuJ3Qgc2F5IG11Y2ggKi8KKyNkZWZpbmUgQVNTQUJFVF9HUElPX1JBRElPX0lSUQkJR1BJT19HUElPICgxNCkJLyogUmFkaW8gaW50ZXJydXB0IHJlcXVlc3QgICovCisjZGVmaW5lIEFTU0FCRVRfR1BJT19QU19NT0RFX1NZTkMJR1BJT19HUElPICgxNikJLyogUG93ZXIgc3VwcGx5IG1vZGUvc3luYyAgICovCisjZGVmaW5lIEFTU0FCRVRfR1BJT19TVEVSRU9fNjRGU19DTEsJR1BJT19HUElPICgxOSkJLyogU1NQIFVEQTEzNDEgY2xvY2sgaW5wdXQgICovCisjZGVmaW5lIEFTU0FCRVRfR1BJT19DRl9JUlEJCUdQSU9fR1BJTyAoMjEpCS8qIENGIElSUSAgICovCisjZGVmaW5lIEFTU0FCRVRfR1BJT19DRl9DRAkJR1BJT19HUElPICgyMikJLyogQ0YgQ0QgKi8KKyNkZWZpbmUgQVNTQUJFVF9HUElPX0NGX0JWRDIJCUdQSU9fR1BJTyAoMjQpCS8qIENGIEJWRCAqLworI2RlZmluZSBBU1NBQkVUX0dQSU9fR0ZYX0lSUQkJR1BJT19HUElPICgyNCkJLyogR3JhcGhpY3MgSVJRICovCisjZGVmaW5lIEFTU0FCRVRfR1BJT19DRl9CVkQxCQlHUElPX0dQSU8gKDI1KQkvKiBDRiBCVkQgKi8KKyNkZWZpbmUgQVNTQUJFVF9HUElPX0JBVFRfTE9XCQlHUElPX0dQSU8gKDI2KQkvKiBMb3cgYmF0dGVyeSAqLworI2RlZmluZSBBU1NBQkVUX0dQSU9fUkNMSwkJR1BJT19HUElPICgyNikJLyogQ0NMSy8yICAqLworCisjZGVmaW5lIEFTU0FCRVRfSVJRX0dQSU9fQ0ZfSVJRCQlJUlFfR1BJTzIxCisjZGVmaW5lIEFTU0FCRVRfSVJRX0dQSU9fQ0ZfQ0QJCUlSUV9HUElPMjIKKyNkZWZpbmUgQVNTQUJFVF9JUlFfR1BJT19DRl9CVkQyCUlSUV9HUElPMjQKKyNkZWZpbmUgQVNTQUJFVF9JUlFfR1BJT19DRl9CVkQxCUlSUV9HUElPMjUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvYmFkZ2U0LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvYmFkZ2U0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ3YTY3MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9iYWRnZTQuaApAQCAtMCwwICsxLDc1IEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL2JhZGdlNC5oCisgKgorICogICBUaW0gQ29ubm9ycyA8Y29ubm9yc0BocGwuaHAuY29tPgorICogICBDaHJpc3RvcGhlciBIb292ZXIgPGNoQGhwbC5ocC5jb20+CisgKgorICogQ29weXJpZ2h0IChDKSAyMDAyIEhld2xldHQtUGFja2FyZCBDb21wYW55CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX0hBUkRXQVJFX0gKKyNlcnJvciAiaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+IGluc3RlYWQiCisjZW5kaWYKKworI2RlZmluZSBCQURHRTRfU0ExMTExX0JBU0UJCSgweDQ4MDAwMDAwKQorCisvKiBHUElPcyBvbiB0aGUgQmFkZ2VQQUQgNCAqLworI2RlZmluZSBCQURHRTRfR1BJT19JTlRfMTExMQkJR1BJT19HUElPMCAgIC8qIFNBLTExMTEgSVJRICovCisKKyNkZWZpbmUgQkFER0U0X0dQSU9fSU5UX1ZJRAkJR1BJT19HUElPMSAgIC8qIFZpZGVvIGV4cGFuc2lvbiAqLworI2RlZmluZSBCQURHRTRfR1BJT19MR1AyCQlHUElPX0dQSU8yICAgLyogR1BJT19MREQ4ICovCisjZGVmaW5lIEJBREdFNF9HUElPX0xHUDMJCUdQSU9fR1BJTzMgICAvKiBHUElPX0xERDkgKi8KKyNkZWZpbmUgQkFER0U0X0dQSU9fTEdQNAkJR1BJT19HUElPNCAgIC8qIEdQSU9fTEREMTAgKi8KKyNkZWZpbmUgQkFER0U0X0dQSU9fTEdQNQkJR1BJT19HUElPNSAgIC8qIEdQSU9fTEREMTEgKi8KKyNkZWZpbmUgQkFER0U0X0dQSU9fTEdQNgkJR1BJT19HUElPNiAgIC8qIEdQSU9fTEREMTIgKi8KKyNkZWZpbmUgQkFER0U0X0dQSU9fTEdQNwkJR1BJT19HUElPNyAgIC8qIEdQSU9fTEREMTMgKi8KKyNkZWZpbmUgQkFER0U0X0dQSU9fTEdQOAkJR1BJT19HUElPOCAgIC8qIEdQSU9fTEREMTQgKi8KKyNkZWZpbmUgQkFER0U0X0dQSU9fTEdQOQkJR1BJT19HUElPOSAgIC8qIEdQSU9fTEREMTUgKi8KKyNkZWZpbmUgQkFER0U0X0dQSU9fR1BBX1ZJRAkJR1BJT19HUElPMTAgIC8qIFZpZGVvIGV4cGFuc2lvbiAqLworI2RlZmluZSBCQURHRTRfR1BJT19HUEJfVklECQlHUElPX0dQSU8xMSAgLyogVmlkZW8gZXhwYW5zaW9uICovCisjZGVmaW5lIEJBREdFNF9HUElPX0dQQ19WSUQJCUdQSU9fR1BJTzEyICAvKiBWaWRlbyBleHBhbnNpb24gKi8KKworI2RlZmluZSBCQURHRTRfR1BJT19VQVJUX0hTMQkJR1BJT19HUElPMTMKKyNkZWZpbmUgQkFER0U0X0dQSU9fVUFSVF9IUzIJCUdQSU9fR1BJTzE0CisKKyNkZWZpbmUgQkFER0U0X0dQSU9fTVVYU0VMMAkJR1BJT19HUElPMTUKKyNkZWZpbmUgQkFER0U0X0dQSU9fVEVTVFBUX0o3CQlHUElPX0dQSU8xNgorCisjZGVmaW5lIEJBREdFNF9HUElPX1NEU0RBCQlHUElPX0dQSU8xNyAgLyogU0RSQU0gU1BEIERhdGEgKi8KKyNkZWZpbmUgQkFER0U0X0dQSU9fU0RTQ0wJCUdQSU9fR1BJTzE4ICAvKiBTRFJBTSBTUEQgQ2xvY2sgKi8KKyNkZWZpbmUgQkFER0U0X0dQSU9fU0RUWVAwCQlHUElPX0dQSU8xOSAgLyogU0RSQU0gVHlwZSBDb250cm9sICovCisjZGVmaW5lIEJBREdFNF9HUElPX1NEVFlQMQkJR1BJT19HUElPMjAgIC8qIFNEUkFNIFR5cGUgQ29udHJvbCAqLworCisjZGVmaW5lIEJBREdFNF9HUElPX0JHTlRfMTExMQkJR1BJT19HUElPMjEgIC8qIEdQSU9fTUJHTlQgKi8KKyNkZWZpbmUgQkFER0U0X0dQSU9fQlJFUV8xMTExCQlHUElPX0dQSU8yMiAgLyogR1BJT19UUkVRQSAqLworCisjZGVmaW5lIEJBREdFNF9HUElPX1RFU1RQVF9KNgkJR1BJT19HUElPMjMKKworI2RlZmluZSBCQURHRTRfR1BJT19QQ01FTjVWCQlHUElPX0dQSU8yNCAgLyogNVYgcG93ZXIgKi8KKworI2RlZmluZSBCQURHRTRfR1BJT19TQTExMTFfTlJTVAkJR1BJT19HUElPMjUgIC8qIFNBLTExMTEgblJFU0VUICovCisKKyNkZWZpbmUgQkFER0U0X0dQSU9fVEVTVFBUX0o1CQlHUElPX0dQSU8yNgorCisjZGVmaW5lIEJBREdFNF9HUElPX0NMS18xMTExCQlHUElPX0dQSU8yNyAgLyogR1BJT18zMl83NjhrSHogKi8KKworLyogSW50ZXJydXB0cyBvbiB0aGUgQmFkZ2VQQUQgNCAqLworI2RlZmluZSBCQURHRTRfSVJRX0dQSU9fU0ExMTExCQlJUlFfR1BJTzAgICAgLyogU0EtMTExMSBpbnRlcnJ1cHQgKi8KKworCisvKiBQQ001RU5WIFVzYWdlIHRyYWNraW5nICovCisKKyNkZWZpbmUgQkFER0U0XzVWX1BDTUNJQV9TT0NLMAkJKDE8PDApCisjZGVmaW5lIEJBREdFNF81Vl9QQ01DSUFfU09DSzEJCSgxPDwxKQorI2RlZmluZSBCQURHRTRfNVZfUENNQ0lBX1NPQ0sobikJKDE8PChuKSkKKyNkZWZpbmUgQkFER0U0XzVWX1VTQgkJCSgxPDwyKQorI2RlZmluZSBCQURHRTRfNVZfSU5JVElBTExZCQkoMTw8MykKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK2V4dGVybiB2b2lkIGJhZGdlNF9zZXRfNVYodW5zaWduZWQgc3Vic3lzdGVtLCBpbnQgb24pOworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvYml0ZmllbGQuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9iaXRmaWVsZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxZjBlMzMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvYml0ZmllbGQuaApAQCAtMCwwICsxLDExMyBAQAorLyoKKyAqCUZJTEUgICAgCWJpdGZpZWxkLmgKKyAqCisgKglWZXJzaW9uIAkxLjEKKyAqCUF1dGhvciAgCUNvcHlyaWdodCAoYykgTWFyYyBBLiBWaXJlZGF6LCAxOTk4CisgKgkgICAgICAgIAlERUMgV2VzdGVybiBSZXNlYXJjaCBMYWJvcmF0b3J5LCBQYWxvIEFsdG8sIENBCisgKglEYXRlICAgIAlBcHJpbCAxOTk4IChBcHJpbCAxOTk3KQorICoJU3lzdGVtICAJQWR2YW5jZWQgUklTQyBNYWNoaW5lIChBUk0pCisgKglMYW5ndWFnZQlDIG9yIEFSTSBBc3NlbWJseQorICoJUHVycG9zZSAJRGVmaW5pdGlvbiBvZiBtYWNyb3MgdG8gb3BlcmF0ZSBvbiBiaXQgZmllbGRzLgorICovCisKKworCisjaWZuZGVmIF9fQklURklFTERfSAorI2RlZmluZSBfX0JJVEZJRUxEX0gKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNkZWZpbmUgVURhdGEoRGF0YSkJKCh1bnNpZ25lZCBsb25nKSAoRGF0YSkpCisjZWxzZQorI2RlZmluZSBVRGF0YShEYXRhKQkoRGF0YSkKKyNlbmRpZgorCisKKy8qCisgKiBNQUNSTzogRmxkCisgKgorICogUHVycG9zZQorICogICAgVGhlIG1hY3JvICJGbGQiIGVuY29kZXMgYSBiaXQgZmllbGQsIGdpdmVuIGl0cyBzaXplIGFuZCBpdHMgc2hpZnQgdmFsdWUKKyAqICAgIHdpdGggcmVzcGVjdCB0byBiaXQgMC4KKyAqCisgKiBOb3RlCisgKiAgICBBIG1vcmUgaW50dWl0aXZlIHdheSB0byBlbmNvZGUgYml0IGZpZWxkcyB3b3VsZCBoYXZlIGJlZW4gdG8gdXNlIHRoZWlyCisgKiAgICBtYXNrLiBIb3dldmVyLCBleHRyYWN0aW5nIHNpemUgYW5kIHNoaWZ0IHZhbHVlIGluZm9ybWF0aW9uIGZyb20gYSBiaXQKKyAqICAgIGZpZWxkJ3MgbWFzayBpcyBjdW1iZXJzb21lIGFuZCBtaWdodCBicmVhayB0aGUgYXNzZW1ibGVyICgyNTUtY2hhcmFjdGVyCisgKiAgICBsaW5lLXNpemUgbGltaXQpLgorICoKKyAqIElucHV0CisgKiAgICBTaXplICAgICAgCVNpemUgb2YgdGhlIGJpdCBmaWVsZCwgaW4gbnVtYmVyIG9mIGJpdHMuCisgKiAgICBTaGZ0ICAgICAgCVNoaWZ0IHZhbHVlIG9mIHRoZSBiaXQgZmllbGQgd2l0aCByZXNwZWN0IHRvIGJpdCAwLgorICoKKyAqIE91dHB1dAorICogICAgRmxkICAgICAgIAlFbmNvZGVkIGJpdCBmaWVsZC4KKyAqLworCisjZGVmaW5lIEZsZChTaXplLCBTaGZ0KQkoKChTaXplKSA8PCAxNikgKyAoU2hmdCkpCisKKworLyoKKyAqIE1BQ1JPUzogRlNpemUsIEZTaGZ0LCBGTXNrLCBGQWxuTXNrLCBGMXN0Qml0CisgKgorICogUHVycG9zZQorICogICAgVGhlIG1hY3JvcyAiRlNpemUiLCAiRlNoZnQiLCAiRk1zayIsICJGQWxuTXNrIiwgYW5kICJGMXN0Qml0IiByZXR1cm4KKyAqICAgIHRoZSBzaXplLCBzaGlmdCB2YWx1ZSwgbWFzaywgYWxpZ25lZCBtYXNrLCBhbmQgZmlyc3QgYml0IG9mIGEKKyAqICAgIGJpdCBmaWVsZC4KKyAqCisgKiBJbnB1dAorICogICAgRmllbGQgICAgIAlFbmNvZGVkIGJpdCBmaWVsZCAodXNpbmcgdGhlIG1hY3JvICJGbGQiKS4KKyAqCisgKiBPdXRwdXQKKyAqICAgIEZTaXplICAgICAJU2l6ZSBvZiB0aGUgYml0IGZpZWxkLCBpbiBudW1iZXIgb2YgYml0cy4KKyAqICAgIEZTaGZ0ICAgICAJU2hpZnQgdmFsdWUgb2YgdGhlIGJpdCBmaWVsZCB3aXRoIHJlc3BlY3QgdG8gYml0IDAuCisgKiAgICBGTXNrICAgICAgCU1hc2sgZm9yIHRoZSBiaXQgZmllbGQuCisgKiAgICBGQWxuTXNrICAgCU1hc2sgZm9yIHRoZSBiaXQgZmllbGQsIGFsaWduZWQgb24gYml0IDAuCisgKiAgICBGMXN0Qml0ICAgCUZpcnN0IGJpdCBvZiB0aGUgYml0IGZpZWxkLgorICovCisKKyNkZWZpbmUgRlNpemUoRmllbGQpCSgoRmllbGQpID4+IDE2KQorI2RlZmluZSBGU2hmdChGaWVsZCkJKChGaWVsZCkgJiAweDAwMDBGRkZGKQorI2RlZmluZSBGTXNrKEZpZWxkKQkoKChVRGF0YSAoMSkgPDwgRlNpemUgKEZpZWxkKSkgLSAxKSA8PCBGU2hmdCAoRmllbGQpKQorI2RlZmluZSBGQWxuTXNrKEZpZWxkKQkoKFVEYXRhICgxKSA8PCBGU2l6ZSAoRmllbGQpKSAtIDEpCisjZGVmaW5lIEYxc3RCaXQoRmllbGQpCShVRGF0YSAoMSkgPDwgRlNoZnQgKEZpZWxkKSkKKworCisvKgorICogTUFDUk86IEZJbnNydAorICoKKyAqIFB1cnBvc2UKKyAqICAgIFRoZSBtYWNybyAiRkluc3J0IiBpbnNlcnRzIGEgdmFsdWUgaW50byBhIGJpdCBmaWVsZCBieSBzaGlmdGluZyB0aGUKKyAqICAgIGZvcm1lciBhcHByb3ByaWF0ZWx5LgorICoKKyAqIElucHV0CisgKiAgICBWYWx1ZSAgICAgCUJpdC1maWVsZCB2YWx1ZS4KKyAqICAgIEZpZWxkICAgICAJRW5jb2RlZCBiaXQgZmllbGQgKHVzaW5nIHRoZSBtYWNybyAiRmxkIikuCisgKgorICogT3V0cHV0CisgKiAgICBGSW5zcnQgICAgCUJpdC1maWVsZCB2YWx1ZSBwb3NpdGlvbmVkIGFwcHJvcHJpYXRlbHkuCisgKi8KKworI2RlZmluZSBGSW5zcnQoVmFsdWUsIEZpZWxkKSBcCisgICAgICAgICAgICAgICAgCShVRGF0YSAoVmFsdWUpIDw8IEZTaGZ0IChGaWVsZCkpCisKKworLyoKKyAqIE1BQ1JPOiBGRXh0cgorICoKKyAqIFB1cnBvc2UKKyAqICAgIFRoZSBtYWNybyAiRkV4dHIiIGV4dHJhY3RzIHRoZSB2YWx1ZSBvZiBhIGJpdCBmaWVsZCBieSBtYXNraW5nIGFuZAorICogICAgc2hpZnRpbmcgaXQgYXBwcm9wcmlhdGVseS4KKyAqCisgKiBJbnB1dAorICogICAgRGF0YSAgICAgIAlEYXRhIGNvbnRhaW5pbmcgdGhlIGJpdC1maWVsZCB0byBiZSBleHRyYWN0ZWQuCisgKiAgICBGaWVsZCAgICAgCUVuY29kZWQgYml0IGZpZWxkICh1c2luZyB0aGUgbWFjcm8gIkZsZCIpLgorICoKKyAqIE91dHB1dAorICogICAgRkV4dHIgICAgIAlCaXQtZmllbGQgdmFsdWUuCisgKi8KKworI2RlZmluZSBGRXh0cihEYXRhLCBGaWVsZCkgXAorICAgICAgICAgICAgICAgIAkoKFVEYXRhIChEYXRhKSA+PiBGU2hmdCAoRmllbGQpKSAmIEZBbG5Nc2sgKEZpZWxkKSkKKworCisjZW5kaWYgLyogX19CSVRGSUVMRF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvY2VyZi5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL2NlcmYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTZkNWJhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL2NlcmYuaApAQCAtMCwwICsxLDI5IEBACisvKgorICogaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL2NlcmYuaAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogQXByLTIwMDMgOiBSZW1vdmVkIHNvbWUgb2xkIFBEQSBjcnVkIFtGQl0KKyAqLworI2lmbmRlZiBfSU5DTFVERV9DRVJGX0hfCisjZGVmaW5lIF9JTkNMVURFX0NFUkZfSF8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjZGVmaW5lIENFUkZfRVRIX0lPCQkJMHhmMDAwMDAwMAorI2RlZmluZSBDRVJGX0VUSF9JUlEgSVJRX0dQSU8yNgorCisjZGVmaW5lIENFUkZfR1BJT19DRl9CVkQyCQlHUElPX0dQSU8gKDE5KQorI2RlZmluZSBDRVJGX0dQSU9fQ0ZfQlZEMQkJR1BJT19HUElPICgyMCkKKyNkZWZpbmUgQ0VSRl9HUElPX0NGX1JFU0VUCQlHUElPX0dQSU8gKDIxKQorI2RlZmluZSBDRVJGX0dQSU9fQ0ZfSVJRCQlHUElPX0dQSU8gKDIyKQorI2RlZmluZSBDRVJGX0dQSU9fQ0ZfQ0QJCQlHUElPX0dQSU8gKDIzKQorCisjZGVmaW5lIENFUkZfSVJRX0dQSU9fQ0ZfQlZEMgkJSVJRX0dQSU8xOQorI2RlZmluZSBDRVJGX0lSUV9HUElPX0NGX0JWRDEJCUlSUV9HUElPMjAKKyNkZWZpbmUgQ0VSRl9JUlFfR1BJT19DRl9JUlEJCUlSUV9HUElPMjIKKyNkZWZpbmUgQ0VSRl9JUlFfR1BJT19DRl9DRAkJSVJRX0dQSU8yMworCisjZW5kaWYgLy8gX0lOQ0xVREVfQ0VSRl9IXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL2NvbGxpZS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL2NvbGxpZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0OWU1ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvY29sbGllLmgKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9jb2xsaWUuaAorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgaGFyZHdhcmUgc3BlY2lmaWMgZGVmaW5pdGlvbnMgZm9yIEFzc2FiZXQKKyAqIE9ubHkgaW5jbHVkZSB0aGlzIGZpbGUgZnJvbSBTQTExMDAtc3BlY2lmaWMgZmlsZXMuCisgKgorICogQ2hhbmdlTG9nOgorICogICAwNC0wNi0yMDAxIExpbmVvIEphcGFuLCBJbmMuCisgKiAgIDA0LTE2LTIwMDEgU0hBUlAgQ29ycG9yYXRpb24KKyAqICAgMDctMDctMjAwMiBDaHJpcyBMYXJzb24gPGNsYXJzb25AZGlnaS5jb20+CisgKgorICovCisjaWZuZGVmIF9fQVNNX0FSQ0hfQ09MTElFX0gKKyNkZWZpbmUgX19BU01fQVJDSF9DT0xMSUVfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNkZWZpbmUgQ09MTElFX1NDUF9DSEFSR0VfT04JU0NPT1BfR1BDUl9QQTExCisjZGVmaW5lIENPTExJRV9TQ1BfRElBR19CT09UMQlTQ09PUF9HUENSX1BBMTIKKyNkZWZpbmUgQ09MTElFX1NDUF9ESUFHX0JPT1QyCVNDT09QX0dQQ1JfUEExMworI2RlZmluZSBDT0xMSUVfU0NQX01VVEVfTAlTQ09PUF9HUENSX1BBMTQKKyNkZWZpbmUgQ09MTElFX1NDUF9NVVRFX1IJU0NPT1BfR1BDUl9QQTE1CisjZGVmaW5lIENPTExJRV9TQ1BfNVZPTgkJU0NPT1BfR1BDUl9QQTE2CisjZGVmaW5lIENPTExJRV9TQ1BfQU1QX09OCVNDT09QX0dQQ1JfUEExNworI2RlZmluZSBDT0xMSUVfU0NQX1ZQRU4JCVNDT09QX0dQQ1JfUEExOAorI2RlZmluZSBDT0xMSUVfU0NQX0xCX1ZPTF9DSEcJU0NPT1BfR1BDUl9QQTE5CisKKyNkZWZpbmUgQ09MTElFX1NDT09QX0lPX0RJUgkoIENPTExJRV9TQ1BfQ0hBUkdFX09OIHwgQ09MTElFX1NDUF9NVVRFX0wgfCBDT0xMSUVfU0NQX01VVEVfUiB8IFwKKwkJCQlDT0xMSUVfU0NQXzVWT04gfCBDT0xMSUVfU0NQX0FNUF9PTiB8IENPTExJRV9TQ1BfVlBFTiB8IFwKKwkJCQlDT0xMSUVfU0NQX0xCX1ZPTF9DSEcgKQorI2RlZmluZSBDT0xMSUVfU0NPT1BfSU9fT1VUCSggQ09MTElFX1NDUF9NVVRFX0wgfCBDT0xMSUVfU0NQX01VVEVfUiB8IENPTExJRV9TQ1BfVlBFTiB8IFwKKwkJCQlDT0xMSUVfU0NQX0NIQVJHRV9PTiApCisKKy8qIEdQSU9zIGZvciB3aGljaCB0aGUgZ2VuZXJpYyBkZWZpbml0aW9uIGRvZXNuJ3Qgc2F5IG11Y2ggKi8KKworI2RlZmluZSBDT0xMSUVfR1BJT19PTl9LRVkJCUdQSU9fR1BJTyAoMCkKKyNkZWZpbmUgQ09MTElFX0dQSU9fQUNfSU4JCUdQSU9fR1BJTyAoMSkKKyNkZWZpbmUgQ09MTElFX0dQSU9fQ0ZfSVJRCQlHUElPX0dQSU8gKDE0KQorI2RlZmluZSBDT0xMSUVfR1BJT19uUkVNT0NPTl9JTlQJR1BJT19HUElPICgxNSkKKyNkZWZpbmUgQ09MTElFX0dQSU9fVUNCMXgwMF9SRVNFVAlHUElPX0dQSU8gKDE2KQorI2RlZmluZSBDT0xMSUVfR1BJT19DTwkJCUdQSU9fR1BJTyAoMjApCisjZGVmaW5lIENPTExJRV9HUElPX01DUF9DTEsJCUdQSU9fR1BJTyAoMjEpCisjZGVmaW5lIENPTExJRV9HUElPX0NGX0NECQlHUElPX0dQSU8gKDIyKQorI2RlZmluZSBDT0xMSUVfR1BJT19VQ0IxeDAwX0lSUQkJR1BJT19HUElPICgyMykKKyNkZWZpbmUgQ09MTElFX0dQSU9fV0FLRVVQCQlHUElPX0dQSU8gKDI0KQorI2RlZmluZSBDT0xMSUVfR1BJT19HQV9JTlQJCUdQSU9fR1BJTyAoMjUpCisjZGVmaW5lIENPTExJRV9HUElPX01BSU5fQkFUX0xPVwlHUElPX0dQSU8gKDI2KQorCisvKiBJbnRlcnJ1cHRzICovCisKKyNkZWZpbmUgQ09MTElFX0lSUV9HUElPX09OX0tFWQkJSVJRX0dQSU8wCisjZGVmaW5lIENPTExJRV9JUlFfR1BJT19BQ19JTgkJSVJRX0dQSU8xCisjZGVmaW5lIENPTExJRV9JUlFfR1BJT19DRl9JUlEJCUlSUV9HUElPMTQKKyNkZWZpbmUgQ09MTElFX0lSUV9HUElPX25SRU1PQ09OX0lOVAlJUlFfR1BJTzE1CisjZGVmaW5lIENPTExJRV9JUlFfR1BJT19DTwkJSVJRX0dQSU8yMAorI2RlZmluZSBDT0xMSUVfSVJRX0dQSU9fQ0ZfQ0QJCUlSUV9HUElPMjIKKyNkZWZpbmUgQ09MTElFX0lSUV9HUElPX1VDQjF4MDBfSVJRCUlSUV9HUElPMjMKKyNkZWZpbmUgQ09MTElFX0lSUV9HUElPX1dBS0VVUAkJSVJRX0dQSU8yNAorI2RlZmluZSBDT0xMSUVfSVJRX0dQSU9fR0FfSU5UCQlJUlFfR1BJTzI1CisjZGVmaW5lIENPTExJRV9JUlFfR1BJT19NQUlOX0JBVF9MT1cJSVJRX0dQSU8yNgorCisjZGVmaW5lIENPTExJRV9MQ01fSVJRX0dQSU9fUlRTCQlJUlFfTE9DT01PX0dQSU8wCisjZGVmaW5lIENPTExJRV9MQ01fSVJRX0dQSU9fQ1RTCQlJUlFfTE9DT01PX0dQSU8xCisjZGVmaW5lIENPTExJRV9MQ01fSVJRX0dQSU9fRFNSCQlJUlFfTE9DT01PX0dQSU8yCisjZGVmaW5lIENPTExJRV9MQ01fSVJRX0dQSU9fRFRSCQlJUlFfTE9DT01PX0dQSU8zCisjZGVmaW5lIENPTExJRV9MQ01fSVJRX0dQSU9fblNEX0RFVEVDVAlJUlFfTE9DT01PX0dQSU8xMworI2RlZmluZSBDT0xMSUVfTENNX0lSUV9HUElPX25TRF9XUAlJUlFfTE9DT01PX0dQSU8xNAorCisvKiBHUElPJ3Mgb24gdGhlIFRDMzUxNDNBRiAoVG9zaGliYSBBbmFsb2cgRnJvbnRlbmQpICovCisjZGVmaW5lIENPTExJRV9UQzM1MTQzX0dQSU9fVkVSU0lPTjAgICAgVUNCX0lPXzAJLyogR1BJTzA9VmVyc2lvbiAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09MTElFX1RDMzUxNDNfR1BJT19UQkxfQ0hLICAgICBVQ0JfSU9fMQkvKiBHUElPMT1UQkxfQ0hLICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDT0xMSUVfVEMzNTE0M19HUElPX1ZQRU5fT04gICAgIFVDQl9JT18yCS8qIEdQSU8yPVZQTkVfT04gICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPTExJRV9UQzM1MTQzX0dQSU9fSVJfT04gICAgICAgVUNCX0lPXzMJLyogR1BJTzM9SVJfT04gICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09MTElFX1RDMzUxNDNfR1BJT19BTVBfT04gICAgICBVQ0JfSU9fNAkvKiBHUElPND1BTVBfT04gICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDT0xMSUVfVEMzNTE0M19HUElPX1ZFUlNJT04xICAgIFVDQl9JT181CS8qIEdQSU81PVZlcnNpb24gICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPTExJRV9UQzM1MTQzX0dQSU9fRlM4S0xQRiAgICAgVUNCX0lPXzUJLyogR1BJTzU9ZnMgOGsgTFBGICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09MTElFX1RDMzUxNDNfR1BJT19CVVpaRVJfQklBUyBVQ0JfSU9fNgkvKiBHUElPNj1CVVpaRVIgQklBUyAgICAgICAgICAgICAqLworI2RlZmluZSBDT0xMSUVfVEMzNTE0M19HUElPX01CQVRfT04gICAgIFVDQl9JT183CS8qIEdQSU83PU1CQVRfT04gICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPTExJRV9UQzM1MTQzX0dQSU9fQkJBVF9PTiAgICAgVUNCX0lPXzgJLyogR1BJTzg9QkJBVF9PTiAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09MTElFX1RDMzUxNDNfR1BJT19UTVBfT04gICAgICBVQ0JfSU9fOQkvKiBHUElPOT1UTVBfT04gICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDT0xMSUVfVEMzNTE0M19HUElPX0lOCQkoIFVDQl9JT18wIHwgVUNCX0lPXzIgfCBVQ0JfSU9fNSApCisjZGVmaW5lIENPTExJRV9UQzM1MTQzX0dQSU9fT1VUCQkoIFVDQl9JT18xIHwgVUNCX0lPXzMgfCBVQ0JfSU9fNCB8IFVDQl9JT182IHwgXAorCQkJCQlVQ0JfSU9fNyB8IFVDQl9JT184IHwgVUNCX0lPXzkgKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9kZWJ1Zy1tYWNyby5TIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL2RlYnVnLW1hY3JvLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU1ZmEzNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9kZWJ1Zy1tYWNyby5TCkBAIC0wLDAgKzEsNTcgQEAKKy8qIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9kZWJ1Zy1tYWNyby5TCisgKgorICogRGVidWdnaW5nIG1hY3JvIGluY2x1ZGUgaGVhZGVyCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NC0xOTk5IFJ1c3NlbGwgS2luZworICogIE1vdmVkIGZyb20gbGludXgvYXJjaC9hcm0va2VybmVsL2RlYnVnLlMgYnkgQmVuIERvb2tzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisqLworCisJCS5tYWNybwlhZGRydWFydCxyeAorCQltcmMJcDE1LCAwLCBccngsIGMxLCBjMAorCQl0c3QJXHJ4LCAjMQkJCUAgTU1VIGVuYWJsZWQ/CisJCW1vdmVxCVxyeCwgIzB4ODAwMDAwMDAJQCBwaHlzaWNhbCBiYXNlIGFkZHJlc3MKKwkJbW92bmUJXHJ4LCAjMHhmODAwMDAwMAlAIHZpcnR1YWwgYWRkcmVzcworCisJCUAgV2UgcHJvYmUgZm9yIHRoZSBhY3RpdmUgc2VyaWFsIHBvcnQgaGVyZSwgY29oZXJlbnRseSB3aXRoCisJCUAgdGhlIGNvbW1lbnQgaW4gaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL3VuY29tcHJlc3MuaC4KKwkJQCBXZSBhc3N1bWUgcjEgY2FuIGJlIGNsb2JiZXJlZC4KKworCQlAIHNlZSBpZiBTZXIzIGlzIGFjdGl2ZQorCQlhZGQJXHJ4LCBccngsICMweDAwMDUwMDAwCisJCWxkcglyMSwgW1xyeCwgI1VUQ1IzXQorCQl0c3QJcjEsICNVVENSM19UWEUKKworCQlAIGlmIFNlcjMgaXMgaW5hY3RpdmUsIHRoZW4gdHJ5IFNlcjEKKwkJYWRkZXEJXHJ4LCBccngsICMoMHgwMDAxMDAwMCAtIDB4MDAwNTAwMDApCisJCWxkcmVxCXIxLCBbXHJ4LCAjVVRDUjNdCisJCXRzdGVxCXIxLCAjVVRDUjNfVFhFCisKKwkJQCBpZiBTZXIxIGlzIGluYWN0aXZlLCB0aGVuIHRyeSBTZXIyCisJCWFkZGVxCVxyeCwgXHJ4LCAjKDB4MDAwMzAwMDAgLSAweDAwMDEwMDAwKQorCQlsZHJlcQlyMSwgW1xyeCwgI1VUQ1IzXQorCQl0c3RlcQlyMSwgI1VUQ1IzX1RYRQorCisJCUAgaWYgYWxsIHBvcnRzIGFyZSBpbmFjdGl2ZSwgdGhlbiB0aGVyZSBpcyBub3RoaW5nIHdlIGNhbiBkbworCQltb3ZlcQlwYywgbHIKKwkJLmVuZG0KKworCQkubWFjcm8Jc2VuZHVhcnQscmQscngKKwkJc3RyCVxyZCwgW1xyeCwgI1VURFJdCisJCS5lbmRtCisKKwkJLm1hY3JvCXdhaXR1YXJ0LHJkLHJ4CisxMDAxOgkJbGRyCVxyZCwgW1xyeCwgI1VUU1IxXQorCQl0c3QJXHJkLCAjVVRTUjFfVE5GCisJCWJlcQkxMDAxYgorCQkuZW5kbQorCisJCS5tYWNybwlidXN5dWFydCxyZCxyeAorMTAwMToJCWxkcglccmQsIFtccngsICNVVFNSMV0KKwkJdHN0CVxyZCwgI1VUU1IxX1RCWQorCQlibmUJMTAwMWIKKwkJLmVuZG0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9kbWEuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9kbWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDYwZWQ5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL2RtYS5oCkBAIC0wLDAgKzEsMTMyIEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL2RtYS5oCisgKgorICogR2VuZXJpYyBTQTExMDAgRE1BIHN1cHBvcnQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgTmljb2xhcyBQaXRyZQorICoKKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfRE1BX0gKKyNkZWZpbmUgX19BU01fQVJDSF9ETUFfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSAiaGFyZHdhcmUuaCIKKworCisvKgorICogVGhpcyBpcyB0aGUgbWF4aW11bSBETUEgYWRkcmVzcyB0aGF0IGNhbiBiZSBETUFkIHRvLgorICovCisjZGVmaW5lIE1BWF9ETUFfQUREUkVTUwkJMHhmZmZmZmZmZgorCisKKy8qCisgKiBUaGUgcmVndWxhciBnZW5lcmljIERNQSBpbnRlcmZhY2UgaXMgaW5hcHByb3ByaWF0ZSBmb3IgdGhlCisgKiBTQTExMDAgRE1BIG1vZGVsLiAgTm9uZSBvZiB0aGUgU0ExMTAwIHNwZWNpZmljIGRyaXZlcnMgdXNpbmcKKyAqIERNQSBhcmUgcG9ydGFibGUgYW55d2F5IHNvIGl0J3MgcG9pbnRsZXNzIHRvIHRyeSB0byB0d2lzdCB0aGUKKyAqIHJlZ3VsYXIgRE1BIEFQSSB0byBhY2NvbW1vZGF0ZSB0aGVtLgorICovCisjZGVmaW5lIE1BWF9ETUFfQ0hBTk5FTFMJMAorCisvKgorICogVGhlIFNBMTEwMCBoYXMgc2l4IGludGVybmFsIERNQSBjaGFubmVscy4KKyAqLworI2RlZmluZSBTQTExMDBfRE1BX0NIQU5ORUxTCTYKKworLyoKKyAqIE1heGltdW0gcGh5c2ljYWwgRE1BIGJ1ZmZlciBzaXplCisgKi8KKyNkZWZpbmUgTUFYX0RNQV9TSVpFCQkweDFmZmYKKyNkZWZpbmUgQ1VUX0RNQV9TSVpFCQkweDEwMDAKKworLyoKKyAqIEFsbCBwb3NzaWJsZSBTQTExMDAgZGV2aWNlcyBhIERNQSBjaGFubmVsIGNhbiBiZSBhdHRhY2hlZCB0by4KKyAqLwordHlwZWRlZiBlbnVtIHsKKwlETUFfU2VyMFVEQ1dyICA9IEREQVJfU2VyMFVEQ1dyLCAgIC8qIFNlci4gcG9ydCAwIFVEQyBXcml0ZSAqLworCURNQV9TZXIwVURDUmQgID0gRERBUl9TZXIwVURDUmQsICAgLyogU2VyLiBwb3J0IDAgVURDIFJlYWQgKi8KKwlETUFfU2VyMVVBUlRXciA9IEREQVJfU2VyMVVBUlRXciwgIC8qIFNlci4gcG9ydCAxIFVBUlQgV3JpdGUgKi8KKwlETUFfU2VyMVVBUlRSZCA9IEREQVJfU2VyMVVBUlRSZCwgIC8qIFNlci4gcG9ydCAxIFVBUlQgUmVhZCAqLworCURNQV9TZXIxU0RMQ1dyID0gRERBUl9TZXIxU0RMQ1dyLCAgLyogU2VyLiBwb3J0IDEgU0RMQyBXcml0ZSAqLworCURNQV9TZXIxU0RMQ1JkID0gRERBUl9TZXIxU0RMQ1JkLCAgLyogU2VyLiBwb3J0IDEgU0RMQyBSZWFkICovCisJRE1BX1NlcjJVQVJUV3IgPSBEREFSX1NlcjJVQVJUV3IsICAvKiBTZXIuIHBvcnQgMiBVQVJUIFdyaXRlICovCisJRE1BX1NlcjJVQVJUUmQgPSBEREFSX1NlcjJVQVJUUmQsICAvKiBTZXIuIHBvcnQgMiBVQVJUIFJlYWQgKi8KKwlETUFfU2VyMkhTU1BXciA9IEREQVJfU2VyMkhTU1BXciwgIC8qIFNlci4gcG9ydCAyIEhTU1AgV3JpdGUgKi8KKwlETUFfU2VyMkhTU1BSZCA9IEREQVJfU2VyMkhTU1BSZCwgIC8qIFNlci4gcG9ydCAyIEhTU1AgUmVhZCAqLworCURNQV9TZXIzVUFSVFdyID0gRERBUl9TZXIzVUFSVFdyLCAgLyogU2VyLiBwb3J0IDMgVUFSVCBXcml0ZSAqLworCURNQV9TZXIzVUFSVFJkID0gRERBUl9TZXIzVUFSVFJkLCAgLyogU2VyLiBwb3J0IDMgVUFSVCBSZWFkICovCisJRE1BX1NlcjRNQ1AwV3IgPSBEREFSX1NlcjRNQ1AwV3IsICAvKiBTZXIuIHBvcnQgNCBNQ1AgMCBXcml0ZSAoYXVkaW8pICovCisJRE1BX1NlcjRNQ1AwUmQgPSBEREFSX1NlcjRNQ1AwUmQsICAvKiBTZXIuIHBvcnQgNCBNQ1AgMCBSZWFkIChhdWRpbykgKi8KKwlETUFfU2VyNE1DUDFXciA9IEREQVJfU2VyNE1DUDFXciwgIC8qIFNlci4gcG9ydCA0IE1DUCAxIFdyaXRlICovCisJRE1BX1NlcjRNQ1AxUmQgPSBEREFSX1NlcjRNQ1AxUmQsICAvKiBTZXIuIHBvcnQgNCBNQ1AgMSBSZWFkICovCisJRE1BX1NlcjRTU1BXciAgPSBEREFSX1NlcjRTU1BXciwgICAvKiBTZXIuIHBvcnQgNCBTU1AgV3JpdGUgKDE2IGJpdHMpICovCisJRE1BX1NlcjRTU1BSZCAgPSBEREFSX1NlcjRTU1BSZCAgICAvKiBTZXIuIHBvcnQgNCBTU1AgUmVhZCAoMTYgYml0cykgKi8KK30gZG1hX2RldmljZV90OworCit0eXBlZGVmIHN0cnVjdCB7CisJdm9sYXRpbGUgdV9sb25nIEREQVI7CisJdm9sYXRpbGUgdV9sb25nIFNldERDU1I7CisJdm9sYXRpbGUgdV9sb25nIENsckRDU1I7CisJdm9sYXRpbGUgdV9sb25nIFJkRENTUjsKKwl2b2xhdGlsZSBkbWFfYWRkcl90IERCU0E7CisJdm9sYXRpbGUgdV9sb25nIERCVEE7CisJdm9sYXRpbGUgZG1hX2FkZHJfdCBEQlNCOworCXZvbGF0aWxlIHVfbG9uZyBEQlRCOworfSBkbWFfcmVnc190OworCit0eXBlZGVmIHZvaWQgKCpkbWFfY2FsbGJhY2tfdCkodm9pZCAqZGF0YSk7CisKKy8qCisgKiBETUEgZnVuY3Rpb24gcHJvdG90eXBlcworICovCisKK2V4dGVybiBpbnQgc2ExMTAwX3JlcXVlc3RfZG1hKCBkbWFfZGV2aWNlX3QgZGV2aWNlLCBjb25zdCBjaGFyICpkZXZpY2VfaWQsCisJCQkgICAgICAgZG1hX2NhbGxiYWNrX3QgY2FsbGJhY2ssIHZvaWQgKmRhdGEsCisJCQkgICAgICAgZG1hX3JlZ3NfdCAqKnJlZ3MgKTsKK2V4dGVybiB2b2lkIHNhMTEwMF9mcmVlX2RtYSggZG1hX3JlZ3NfdCAqcmVncyApOworZXh0ZXJuIGludCBzYTExMDBfc3RhcnRfZG1hKCBkbWFfcmVnc190ICpyZWdzLCBkbWFfYWRkcl90IGRtYV9wdHIsIHVfaW50IHNpemUgKTsKK2V4dGVybiBkbWFfYWRkcl90IHNhMTEwMF9nZXRfZG1hX3BvcyhkbWFfcmVnc190ICpyZWdzKTsKK2V4dGVybiB2b2lkIHNhMTEwMF9yZXNldF9kbWEoZG1hX3JlZ3NfdCAqcmVncyk7CisKKy8qKgorICogCXNhMTEwMF9zdG9wX2RtYSAtIHN0b3AgRE1BIGluIHByb2dyZXNzCisgKiAJQHJlZ3M6IGlkZW50aWZpZXIgZm9yIHRoZSBjaGFubmVsIHRvIHVzZQorICoKKyAqIAlUaGlzIHN0b3BzIERNQSB3aXRob3V0IGNsZWFyaW5nIGJ1ZmZlciBwb2ludGVycy4gVW5saWtlCisgKiAJc2ExMTAwX2NsZWFyX2RtYSgpIHRoaXMgYWxsb3dzIHN1YnNlcXVlbnQgdXNlIG9mIHNhMTEwMF9yZXN1bWVfZG1hKCkKKyAqIAlvciBzYTExMDBfZ2V0X2RtYV9wb3MoKS4KKyAqCisgKiAJVGhlIEByZWdzIGlkZW50aWZpZXIgaXMgcHJvdmlkZWQgYnkgYSBzdWNjZXNzZnVsIGNhbGwgdG8KKyAqIAlzYTExMDBfcmVxdWVzdF9kbWEoKS4KKyAqKi8KKworI2RlZmluZSBzYTExMDBfc3RvcF9kbWEocmVncykJKChyZWdzKS0+Q2xyRENTUiA9IERDU1JfSUV8RENTUl9SVU4pCisKKy8qKgorICogCXNhMTEwMF9yZXN1bWVfZG1hIC0gcmVzdW1lIERNQSBvbiBhIHN0b3BwZWQgY2hhbm5lbAorICogCUByZWdzOiBpZGVudGlmaWVyIGZvciB0aGUgY2hhbm5lbCB0byB1c2UKKyAqCisgKiAJVGhpcyByZXN1bWVzIERNQSBvbiBhIGNoYW5uZWwgcHJldmlvdXNseSBzdG9wcGVkIHdpdGgKKyAqIAlzYTExMDBfc3RvcF9kbWEoKS4KKyAqCisgKiAJVGhlIEByZWdzIGlkZW50aWZpZXIgaXMgcHJvdmlkZWQgYnkgYSBzdWNjZXNzZnVsIGNhbGwgdG8KKyAqIAlzYTExMDBfcmVxdWVzdF9kbWEoKS4KKyAqKi8KKworI2RlZmluZSBzYTExMDBfcmVzdW1lX2RtYShyZWdzKQkoKHJlZ3MpLT5TZXREQ1NSID0gRENTUl9JRXxEQ1NSX1JVTikKKworLyoqCisgKiAJc2ExMTAwX2NsZWFyX2RtYSAtIGNsZWFyIERNQSBwb2ludGVycworICogCUByZWdzOiBpZGVudGlmaWVyIGZvciB0aGUgY2hhbm5lbCB0byB1c2UKKyAqCisgKiAJVGhpcyBjbGVhciBhbnkgRE1BIHN0YXRlIHNvIHRoZSBETUEgZW5naW5lIGlzIHJlYWR5IHRvIHJlc3RhcnQKKyAqIAl3aXRoIG5ldyBidWZmZXJzIHRocm91Z2ggc2ExMTAwX3N0YXJ0X2RtYSgpLiBBbnkgYnVmZmVycyBpbiBmbGlnaHQKKyAqIAlhcmUgZGlzY2FyZGVkLgorICoKKyAqIAlUaGUgQHJlZ3MgaWRlbnRpZmllciBpcyBwcm92aWRlZCBieSBhIHN1Y2Nlc3NmdWwgY2FsbCB0bworICogCXNhMTEwMF9yZXF1ZXN0X2RtYSgpLgorICoqLworCisjZGVmaW5lIHNhMTEwMF9jbGVhcl9kbWEocmVncykJKChyZWdzKS0+Q2xyRENTUiA9IERDU1JfSUV8RENTUl9SVU58RENTUl9TVFJUQXxEQ1NSX1NUUlRCKQorCisjZW5kaWYgLyogX0FTTV9BUkNIX0RNQV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvZW50cnktbWFjcm8uUyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9lbnRyeS1tYWNyby5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxZmI1MGMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvZW50cnktbWFjcm8uUwpAQCAtMCwwICsxLDQxIEBACisvKgorICogaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL2VudHJ5LW1hY3JvLlMKKyAqCisgKiBMb3ctbGV2ZWwgSVJRIGhlbHBlciBtYWNyb3MgZm9yIFNBMTEwMC1iYXNlZCBwbGF0Zm9ybXMKKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisgCQkubWFjcm8JZGlzYWJsZV9maXEKKwkJLmVuZG0KKworCQkubWFjcm8JZ2V0X2lycW5yX2FuZF9iYXNlLCBpcnFuciwgaXJxc3RhdCwgYmFzZSwgdG1wCisJCW1vdglyNCwgIzB4ZmEwMDAwMDAJCQlAIElDSVAgPSAweGZhMDUwMDAwCisJCWFkZAlyNCwgcjQsICMweDAwMDUwMDAwCisJCWxkcglcaXJxc3RhdCwgW3I0XQkJCUAgZ2V0IGlycXMKKwkJbGRyCVxpcnFuciwgW3I0LCAjNF0JCUAgSUNNUiA9IDB4ZmEwNTAwMDQKKwkJYW5kcwlcaXJxc3RhdCwgXGlycXN0YXQsIFxpcnFucgorCQltb3YJXGlycW5yLCAjMAorCQliZXEJMTAwMWYKKwkJdHN0CVxpcnFzdGF0LCAjMHhmZgorCQltb3ZlcQlcaXJxc3RhdCwgXGlycXN0YXQsIGxzciAjOAorCQlhZGRlcQlcaXJxbnIsIFxpcnFuciwgIzgKKwkJdHN0ZXEJXGlycXN0YXQsICMweGZmCisJCW1vdmVxCVxpcnFzdGF0LCBcaXJxc3RhdCwgbHNyICM4CisJCWFkZGVxCVxpcnFuciwgXGlycW5yLCAjOAorCQl0c3RlcQlcaXJxc3RhdCwgIzB4ZmYKKwkJbW92ZXEJXGlycXN0YXQsIFxpcnFzdGF0LCBsc3IgIzgKKwkJYWRkZXEJXGlycW5yLCBcaXJxbnIsICM4CisJCXRzdAlcaXJxc3RhdCwgIzB4MGYKKwkJbW92ZXEJXGlycXN0YXQsIFxpcnFzdGF0LCBsc3IgIzQKKwkJYWRkZXEJXGlycW5yLCBcaXJxbnIsICM0CisJCXRzdAlcaXJxc3RhdCwgIzB4MDMKKwkJbW92ZXEJXGlycXN0YXQsIFxpcnFzdGF0LCBsc3IgIzIKKwkJYWRkZXEJXGlycW5yLCBcaXJxbnIsICMyCisJCXRzdAlcaXJxc3RhdCwgIzB4MDEKKwkJYWRkZXFzCVxpcnFuciwgXGlycW5yLCAjMQorMTAwMToKKwkJLmVuZG0KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL2gzNjAwLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvaDM2MDAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjYzNTU5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL2gzNjAwLmgKQEAgLTAsMCArMSwxNjQgQEAKKy8qCisgKgorICogRGVmaW5pdGlvbnMgZm9yIEgzNjAwIEhhbmRoZWxkIENvbXB1dGVyCisgKgorICogQ29weXJpZ2h0IDIwMDAgQ29tcGFxIENvbXB1dGVyIENvcnBvcmF0aW9uLgorICoKKyAqIFVzZSBjb25zaXN0ZW50IHdpdGggdGhlIEdOVSBHUEwgaXMgcGVybWl0dGVkLAorICogcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBub3RpY2UgaXMKKyAqIHByZXNlcnZlZCBpbiBpdHMgZW50aXJldHkgaW4gYWxsIGNvcGllcyBhbmQgZGVyaXZlZCB3b3Jrcy4KKyAqCisgKiBDT01QQVEgQ09NUFVURVIgQ09SUE9SQVRJT04gTUFLRVMgTk8gV0FSUkFOVElFUywgRVhQUkVTU0VEIE9SIElNUExJRUQsCisgKiBBUyBUTyBUSEUgVVNFRlVMTkVTUyBPUiBDT1JSRUNUTkVTUyBPRiBUSElTIENPREUgT1IgSVRTCisgKiBGSVRORVNTIEZPUiBBTlkgUEFSVElDVUxBUiBQVVJQT1NFLgorICoKKyAqIEF1dGhvcjogSmFtZXkgSGlja3MuCisgKgorICogSGlzdG9yeToKKyAqCisgKiAyMDAxLTEwLT8/CUFuZHJldyBDaHJpc3RpYW4gICBBZGRlZCBzdXBwb3J0IGZvciBpUEFRIEgzODAwCisgKgorICovCisKKyNpZm5kZWYgX0lOQ0xVREVfSDM2MDBfSF8KKyNkZWZpbmUgX0lOQ0xVREVfSDM2MDBfSF8KKworLyogZ2VuZXJhbGl6ZWQgc3VwcG9ydCBmb3IgSDN4eHggc2VyaWVzIENvbXBhcSBQb2NrZXQgUEMncyAqLworI2RlZmluZSBtYWNoaW5lX2lzX2gzeHh4KCkgKG1hY2hpbmVfaXNfaDMxMDAoKSB8fCBtYWNoaW5lX2lzX2gzNjAwKCkgfHwgbWFjaGluZV9pc19oMzgwMCgpKQorCisvKiBQaHlzaWNhbCBtZW1vcnkgcmVnaW9ucyBjb3JyZXNwb25kaW5nIHRvIGNoaXAgc2VsZWN0cyAqLworI2RlZmluZSBIMzYwMF9FR1BJT19QSFlTICAgICAoU0ExMTAwX0NTNV9QSFlTICsgMHgwMTAwMDAwMCkKKyNkZWZpbmUgSDM2MDBfQkFOS18yX1BIWVMgICAgU0ExMTAwX0NTMl9QSFlTCisjZGVmaW5lIEgzNjAwX0JBTktfNF9QSFlTICAgIFNBMTEwMF9DUzRfUEhZUworCisvKiBWaXJ0dWFsIG1lbW9yeSByZWdpb25zIGNvcnJlc3BvbmRpbmcgdG8gY2hpcCBzZWxlY3RzIDIgJiA0ICh1c2VkIG9uIHNsZWV2ZXMpICovCisjZGVmaW5lIEgzNjAwX0VHUElPX1ZJUlQgICAgIDB4ZjAwMDAwMDAKKyNkZWZpbmUgSDM2MDBfQkFOS18yX1ZJUlQgICAgMHhmMTAwMDAwMAorI2RlZmluZSBIMzYwMF9CQU5LXzRfVklSVCAgICAweGYzODAwMDAwCisKKy8qCisgICBNYWNoaW5lLWluZGVwZW5kZW50IEdQSU8gZGVmaW5pdGlvbnMKKyAgIC0tLSB0aGVzZSBhcmUgY29tbW9uIGFjcm9zcyBhbGwgY3VycmVudCBpUEFRIHBsYXRmb3JtcworKi8KKworI2RlZmluZSBHUElPX0gzNjAwX05QT1dFUl9CVVRUT04JR1BJT19HUElPICgwKQkvKiBBbHNvIGtub3duIGFzIHRoZSAib2ZmIGJ1dHRvbiIgICovCisKKyNkZWZpbmUgR1BJT19IMzYwMF9QQ01DSUFfQ0QxCQlHUElPX0dQSU8gKDEwKQorI2RlZmluZSBHUElPX0gzNjAwX1BDTUNJQV9JUlExCQlHUElPX0dQSU8gKDExKQorCisvKiBVREExMzQxIEwzIEludGVyZmFjZSAqLworI2RlZmluZSBHUElPX0gzNjAwX0wzX0RBVEEJCUdQSU9fR1BJTyAoMTQpCisjZGVmaW5lIEdQSU9fSDM2MDBfTDNfTU9ERQkJR1BJT19HUElPICgxNSkKKyNkZWZpbmUgR1BJT19IMzYwMF9MM19DTE9DSwkJR1BJT19HUElPICgxNikKKworI2RlZmluZSBHUElPX0gzNjAwX1BDTUNJQV9DRDAJCUdQSU9fR1BJTyAoMTcpCisjZGVmaW5lIEdQSU9fSDM2MDBfU1lTX0NMSwkJR1BJT19HUElPICgxOSkKKyNkZWZpbmUgR1BJT19IMzYwMF9QQ01DSUFfSVJRMAkJR1BJT19HUElPICgyMSkKKworI2RlZmluZSBHUElPX0gzNjAwX0NPTV9EQ0QJCUdQSU9fR1BJTyAoMjMpCisjZGVmaW5lIEdQSU9fSDM2MDBfT1BUX0lSUQkJR1BJT19HUElPICgyNCkKKyNkZWZpbmUgR1BJT19IMzYwMF9DT01fQ1RTCQlHUElPX0dQSU8gKDI1KQorI2RlZmluZSBHUElPX0gzNjAwX0NPTV9SVFMJCUdQSU9fR1BJTyAoMjYpCisKKyNkZWZpbmUgSVJRX0dQSU9fSDM2MDBfTlBPV0VSX0JVVFRPTglJUlFfR1BJTzAKKyNkZWZpbmUgSVJRX0dQSU9fSDM2MDBfUENNQ0lBX0NEMQlJUlFfR1BJTzEwCisjZGVmaW5lIElSUV9HUElPX0gzNjAwX1BDTUNJQV9JUlExCUlSUV9HUElPMTEKKyNkZWZpbmUgSVJRX0dQSU9fSDM2MDBfUENNQ0lBX0NEMAlJUlFfR1BJTzE3CisjZGVmaW5lIElSUV9HUElPX0gzNjAwX1BDTUNJQV9JUlEwCUlSUV9HUElPMjEKKyNkZWZpbmUgSVJRX0dQSU9fSDM2MDBfQ09NX0RDRAkJSVJRX0dQSU8yMworI2RlZmluZSBJUlFfR1BJT19IMzYwMF9PUFRfSVJRCQlJUlFfR1BJTzI0CisjZGVmaW5lIElSUV9HUElPX0gzNjAwX0NPTV9DVFMJCUlSUV9HUElPMjUKKworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCitlbnVtIGlwYXFfZWdwaW9fdHlwZSB7CisJSVBBUV9FR1BJT19MQ0RfUE9XRVIsCSAgLyogUG93ZXIgdG8gdGhlIExDRCBwYW5lbCAqLworCUlQQVFfRUdQSU9fQ09ERUNfTlJFU0VULCAgLyogQ2xlYXIgdG8gcmVzZXQgdGhlIGF1ZGlvIGNvZGVjIChyZW1lbWJlciB0byByZXR1cm4gaGlnaCkgKi8KKwlJUEFRX0VHUElPX0FVRElPX09OLAkgIC8qIEF1ZGlvIHBvd2VyICovCisJSVBBUV9FR1BJT19RTVVURSwJICAvKiBBdWRpbyBtdXRpbmcgKi8KKwlJUEFRX0VHUElPX09QVF9OVlJBTV9PTiwgIC8qIE5vbi12b2xhdGlsZSBSQU0gb24gZXh0ZW5zaW9uIHNsZWV2ZXMgKFNQSSBpbnRlcmZhY2UpICovCisJSVBBUV9FR1BJT19PUFRfT04sCSAgLyogUG93ZXIgdG8gZXh0ZW5zaW9uIHNsZWV2ZXMgKi8KKwlJUEFRX0VHUElPX0NBUkRfUkVTRVQsCSAgLyogUmVzZXQgUENNQ0lBIGNhcmRzIG9uIGV4dGVuc2lvbiBzbGVldmUgKD8/PykgKi8KKwlJUEFRX0VHUElPX09QVF9SRVNFVCwJICAvKiBSZXNldCBvcHRpb24gcGFjayAoPz8/KSAqLworCUlQQVFfRUdQSU9fSVJfT04sCSAgLyogSVIgc2Vuc29yL2VtaXR0ZXIgcG93ZXIgKi8KKwlJUEFRX0VHUElPX0lSX0ZTRUwsCSAgLyogSVIgc3BlZWQgc2VsZWN0aW9uIDEtPmZhc3QsIDAtPnNsb3cgKi8KKwlJUEFRX0VHUElPX1JTMjMyX09OLAkgIC8qIE1heGltIFJTMjMyIGNoaXAgcG93ZXIgKi8KKwlJUEFRX0VHUElPX1ZQUF9PTiwJICAvKiBUdXJuIG9uIHBvd2VyIHRvIGZsYXNoIHByb2dyYW1taW5nICovCisJSVBBUV9FR1BJT19MQ0RfRU5BQkxFLAkgIC8qIEVuYWJsZS9kaXNhYmxlIExDRCBjb250cm9sbGVyICovCit9OworCitzdHJ1Y3QgaXBhcV9tb2RlbF9vcHMgeworCWNvbnN0IGNoYXIgICAgICpnZW5lcmljX25hbWU7CisJdm9pZAkgICAgICAoKmNvbnRyb2wpKGVudW0gaXBhcV9lZ3Bpb190eXBlLCBpbnQpOworCXVuc2lnbmVkIGxvbmcgKCpyZWFkKSh2b2lkKTsKKwl2b2lkCSAgICAgICgqYmxhbmtfY2FsbGJhY2spKGludCBibGFuayk7CisJaW50CSAgICAgICgqcG1fY2FsbGJhY2spKGludCByZXEpOwkgICAgLyogUHJpbWFyeSBtb2RlbCBjYWxsYmFjayAqLworCWludAkgICAgICAoKnBtX2NhbGxiYWNrX2F1eCkoaW50IHJlcSk7ICAvKiBTZWNvbmRhcnkgY2FsbGJhY2sgKHVzZWQgYnkgSEFMIG1vZHVsZXMpICovCit9OworCitleHRlcm4gc3RydWN0IGlwYXFfbW9kZWxfb3BzIGlwYXFfbW9kZWxfb3BzOworCitzdGF0aWMgX19pbmxpbmVfXyBjb25zdCBjaGFyICogaDM2MDBfZ2VuZXJpY19uYW1lKHZvaWQpCit7CisJcmV0dXJuIGlwYXFfbW9kZWxfb3BzLmdlbmVyaWNfbmFtZTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBhc3NpZ25faDM2MDBfZWdwaW8oZW51bSBpcGFxX2VncGlvX3R5cGUgeCwgaW50IGxldmVsKQoreworCWlmIChpcGFxX21vZGVsX29wcy5jb250cm9sKQorCQlpcGFxX21vZGVsX29wcy5jb250cm9sKHgsbGV2ZWwpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGNscl9oMzYwMF9lZ3BpbyhlbnVtIGlwYXFfZWdwaW9fdHlwZSB4KQoreworCWlmIChpcGFxX21vZGVsX29wcy5jb250cm9sKQorCQlpcGFxX21vZGVsX29wcy5jb250cm9sKHgsMCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgc2V0X2gzNjAwX2VncGlvKGVudW0gaXBhcV9lZ3Bpb190eXBlIHgpCit7CisJaWYgKGlwYXFfbW9kZWxfb3BzLmNvbnRyb2wpCisJCWlwYXFfbW9kZWxfb3BzLmNvbnRyb2woeCwxKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyByZWFkX2gzNjAwX2VncGlvKHZvaWQpCit7CisJaWYgKGlwYXFfbW9kZWxfb3BzLnJlYWQpCisJCXJldHVybiBpcGFxX21vZGVsX29wcy5yZWFkKCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCAgaDM2MDBfcmVnaXN0ZXJfYmxhbmtfY2FsbGJhY2sodm9pZCAoKmYpKGludCkpCit7CisJaXBhcV9tb2RlbF9vcHMuYmxhbmtfY2FsbGJhY2sgPSBmOworCXJldHVybiAwOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGgzNjAwX3VucmVnaXN0ZXJfYmxhbmtfY2FsbGJhY2sodm9pZCAoKmYpKGludCkpCit7CisJaXBhcV9tb2RlbF9vcHMuYmxhbmtfY2FsbGJhY2sgPSBOVUxMOworfQorCisKK3N0YXRpYyBfX2lubGluZV9fIGludCAgaDM2MDBfcmVnaXN0ZXJfcG1fY2FsbGJhY2soaW50ICgqZikoaW50KSkKK3sKKwlpcGFxX21vZGVsX29wcy5wbV9jYWxsYmFja19hdXggPSBmOworCXJldHVybiAwOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGgzNjAwX3VucmVnaXN0ZXJfcG1fY2FsbGJhY2soaW50ICgqZikoaW50KSkKK3sKKwlpcGFxX21vZGVsX29wcy5wbV9jYWxsYmFja19hdXggPSBOVUxMOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgaDM2MDBfcG93ZXJfbWFuYWdlbWVudChpbnQgcmVxKQoreworCWlmIChpcGFxX21vZGVsX29wcy5wbV9jYWxsYmFjaykKKwkJcmV0dXJuIGlwYXFfbW9kZWxfb3BzLnBtX2NhbGxiYWNrKHJlcSk7CisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvKiBBU1NFTUJMWSAqLworCisjZW5kaWYgLyogX0lOQ0xVREVfSDM2MDBfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9oMzYwMF9ncGlvLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvaDM2MDBfZ3Bpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyYjBiNzgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvaDM2MDBfZ3Bpby5oCkBAIC0wLDAgKzEsNTQwIEBACisvKgorICoKKyAqIERlZmluaXRpb25zIGZvciBIMzYwMCBIYW5kaGVsZCBDb21wdXRlcgorICoKKyAqIENvcHlyaWdodCAyMDAwIENvbXBhcSBDb21wdXRlciBDb3Jwb3JhdGlvbi4KKyAqCisgKiBVc2UgY29uc2lzdGVudCB3aXRoIHRoZSBHTlUgR1BMIGlzIHBlcm1pdHRlZCwKKyAqIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgbm90aWNlIGlzCisgKiBwcmVzZXJ2ZWQgaW4gaXRzIGVudGlyZXR5IGluIGFsbCBjb3BpZXMgYW5kIGRlcml2ZWQgd29ya3MuCisgKgorICogQ09NUEFRIENPTVBVVEVSIENPUlBPUkFUSU9OIE1BS0VTIE5PIFdBUlJBTlRJRVMsIEVYUFJFU1NFRCBPUiBJTVBMSUVELAorICogQVMgVE8gVEhFIFVTRUZVTE5FU1MgT1IgQ09SUkVDVE5FU1MgT0YgVEhJUyBDT0RFIE9SIElUUworICogRklUTkVTUyBGT1IgQU5ZIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqCisgKiBBdXRob3I6IEphbWV5IEhpY2tzLgorICoKKyAqIEhpc3Rvcnk6CisgKgorICogMjAwMS0xMC0/PyAgIEFuZHJldyBDaHJpc3RpYW4gICBBZGRlZCBzdXBwb3J0IGZvciBpUEFRIEgzODAwCisgKgorICovCisKKyNpZm5kZWYgX0lOQ0xVREVfSDM2MDBfR1BJT19IXworI2RlZmluZSBfSU5DTFVERV9IMzYwMF9HUElPX0hfCisKKy8qCisgKiBHUElPIGxpbmVzIHRoYXQgYXJlIGNvbW1vbiBhY3Jvc3MgQUxMIGlQQVEgbW9kZWxzIGFyZSBpbiAiaDM2MDAuaCIKKyAqIFRoaXMgZmlsZSBjb250YWlucyBtYWNoaW5lLXNwZWNpZmljIGRlZmluaXRpb25zCisgKi8KKworI2RlZmluZSBHUElPX0gzNjAwX1NVU1BFTkQgICAgICAgICAgICAgIEdQSU9fR1BJTyAoMCkKKy8qIEdQSU9bMjo5XSB1c2VkIGJ5IExDRCBvbiBIMzYwMC8zODAwLCB1c2VkIGFzIEdQSU8gb24gSDMxMDAgKi8KKyNkZWZpbmUgR1BJT19IMzEwMF9CVF9PTgkJR1BJT19HUElPICgyKQorI2RlZmluZSBHUElPX0gzMTAwX0dQSU8zCQlHUElPX0dQSU8gKDMpCisjZGVmaW5lIEdQSU9fSDMxMDBfUU1VVEUJCUdQSU9fR1BJTyAoNCkKKyNkZWZpbmUgR1BJT19IMzEwMF9MQ0RfM1ZfT04JCUdQSU9fR1BJTyAoNSkKKyNkZWZpbmUgR1BJT19IMzEwMF9BVURfT04JCUdQSU9fR1BJTyAoNikKKyNkZWZpbmUgR1BJT19IMzEwMF9BVURfUFdSX09OCQlHUElPX0dQSU8gKDcpCisjZGVmaW5lIEdQSU9fSDMxMDBfSVJfT04JCUdQSU9fR1BJTyAoOCkKKyNkZWZpbmUgR1BJT19IMzEwMF9JUl9GU0VMCQlHUElPX0dQSU8gKDkpCisKKy8qIGZvciBIMzYwMCwgYXVkaW8gc2FtcGxlIHJhdGUgY2xvY2sgZ2VuZXJhdG9yICovCisjZGVmaW5lIEdQSU9fSDM2MDBfQ0xLX1NFVDAJCUdQSU9fR1BJTyAoMTIpCisjZGVmaW5lIEdQSU9fSDM2MDBfQ0xLX1NFVDEJCUdQSU9fR1BJTyAoMTMpCisKKyNkZWZpbmUgR1BJT19IMzYwMF9BQ1RJT05fQlVUVE9OCUdQSU9fR1BJTyAoMTgpCisjZGVmaW5lIEdQSU9fSDM2MDBfU09GVF9SRVNFVCAgICAgICAgICAgR1BJT19HUElPICgyMCkgICAvKiBBbHNvIGtub3duIGFzIEJBVFRfRkFVTFQgKi8KKyNkZWZpbmUgR1BJT19IMzYwMF9PUFRfTE9DSwkJR1BJT19HUElPICgyMikKKyNkZWZpbmUgR1BJT19IMzYwMF9PUFRfREVUCQlHUElPX0dQSU8gKDI3KQorCisvKiBIMzgwMCBzcGVjaWZpYyBwaW5zICovCisjZGVmaW5lIEdQSU9fSDM4MDBfQUNfSU4gICAgICAgICAgICAgICAgR1BJT19HUElPICgxMikKKyNkZWZpbmUgR1BJT19IMzgwMF9DT01fRFNSICAgICAgICAgICAgICBHUElPX0dQSU8gKDEzKQorI2RlZmluZSBHUElPX0gzODAwX01NQ19JTlQgICAgICAgICAgICAgIEdQSU9fR1BJTyAoMTgpCisjZGVmaW5lIEdQSU9fSDM4MDBfTk9QVF9JTkQgICAgICAgICAgICAgR1BJT19HUElPICgyMCkgICAvKiBBbG1vc3QgZXhhY3RseSB0aGUgc2FtZSBhcyBHUElPX0gzNjAwX09QVF9ERVQgKi8KKyNkZWZpbmUgR1BJT19IMzgwMF9PUFRfQkFUX0ZBVUxUICAgICAgICBHUElPX0dQSU8gKDIyKQorI2RlZmluZSBHUElPX0gzODAwX0NMS19PVVQgICAgICAgICAgICAgIEdQSU9fR1BJTyAoMjcpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIElSUV9HUElPX0gzNjAwX0FDVElPTl9CVVRUT04gICAgSVJRX0dQSU8xOAorI2RlZmluZSBJUlFfR1BJT19IMzYwMF9PUFRfREVUCQlJUlFfR1BJTzI3CisKKyNkZWZpbmUgSVJRX0dQSU9fSDM4MDBfTU1DX0lOVCAgICAgICAgICBJUlFfR1BJTzE4CisjZGVmaW5lIElSUV9HUElPX0gzODAwX05PUFRfSU5EICAgICAgICAgSVJRX0dQSU8yMCAvKiBhbG1vc3Qgc2FtZSBhcyBPUFRfREVUICovCisKKy8qIEgzMTAwIC8gMzYwMCBFR1BJTyBwaW5zICovCisjZGVmaW5lIEVHUElPX0gzNjAwX1ZQUF9PTgkJKDEgPDwgMCkKKyNkZWZpbmUgRUdQSU9fSDM2MDBfQ0FSRF9SRVNFVAkJKDEgPDwgMSkgICAvKiByZXNldCB0aGUgYXR0YWNoZWQgcGNtY2lhL2NvbXBhY3RmbGFzaCBjYXJkLiAgYWN0aXZlIGhpZ2guICovCisjZGVmaW5lIEVHUElPX0gzNjAwX09QVF9SRVNFVAkJKDEgPDwgMikgICAvKiByZXNldCB0aGUgYXR0YWNoZWQgb3B0aW9uIHBhY2suICBhY3RpdmUgaGlnaC4gKi8KKyNkZWZpbmUgRUdQSU9fSDM2MDBfQ09ERUNfTlJFU0VUCSgxIDw8IDMpICAgLyogcmVzZXQgdGhlIG9uYm9hcmQgVURBMTM0MS4gIGFjdGl2ZSBsb3cuICovCisjZGVmaW5lIEVHUElPX0gzNjAwX09QVF9OVlJBTV9PTgkoMSA8PCA0KSAgIC8qIGFwcGx5IHBvd2VyIHRvIG9wdGlvbnBhY2sgbnZyYW0sIGFjdGl2ZSBoaWdoLiAqLworI2RlZmluZSBFR1BJT19IMzYwMF9PUFRfT04JCSgxIDw8IDUpICAgLyogZnVsbCBwb3dlciB0byBvcHRpb24gcGFjay4gIGFjdGl2ZSBoaWdoLiAqLworI2RlZmluZSBFR1BJT19IMzYwMF9MQ0RfT04JCSgxIDw8IDYpICAgLyogZW5hYmxlIDMuM1YgdG8gTENELiAgYWN0aXZlIGhpZ2guICovCisjZGVmaW5lIEVHUElPX0gzNjAwX1JTMjMyX09OCQkoMSA8PCA3KSAgIC8qIFVBUlQzIHRyYW5zY2VpdmVyIGZvcmNlIG9uLiAgQWN0aXZlIGhpZ2guICovCisKKy8qIEgzNjAwIG9ubHkgRUdQSU8gcGlucyAqLworI2RlZmluZSBFR1BJT19IMzYwMF9MQ0RfUENJCQkoMSA8PCA4KSAgIC8qIExDRCBjb250cm9sIElDIGVuYWJsZS4gIGFjdGl2ZSBoaWdoLiAqLworI2RlZmluZSBFR1BJT19IMzYwMF9JUl9PTgkJKDEgPDwgOSkgICAvKiBhcHBseSBwb3dlciB0byBJUiBtb2R1bGUuICBhY3RpdmUgaGlnaC4gKi8KKyNkZWZpbmUgRUdQSU9fSDM2MDBfQVVEX0FNUF9PTgkJKDEgPDwgMTApICAvKiBhcHBseSBwb3dlciB0byBhdWRpbyBwb3dlciBhbXAuICBhY3RpdmUgaGlnaC4gKi8KKyNkZWZpbmUgRUdQSU9fSDM2MDBfQVVEX1BXUl9PTgkJKDEgPDwgMTEpICAvKiBhcHBseSBwb3dlciB0byByZXNldCBvZiBhdWRpbyBjaXJjdWl0LiAgYWN0aXZlIGhpZ2guICovCisjZGVmaW5lIEVHUElPX0gzNjAwX1FNVVRFCQkoMSA8PCAxMikgIC8qIG11dGUgY29udHJvbCBmb3Igb25ib2FyZCBVREExMzQxLiAgYWN0aXZlIGhpZ2guICovCisjZGVmaW5lIEVHUElPX0gzNjAwX0lSX0ZTRUwJCSgxIDw8IDEzKSAgLyogSVIgc3BlZWQgc2VsZWN0OiAxLT5mYXN0LCAwLT5zbG93ICovCisjZGVmaW5lIEVHUElPX0gzNjAwX0xDRF81Vl9PTgkJKDEgPDwgMTQpICAvKiBlbmFibGUgNVYgdG8gTENELiBhY3RpdmUgaGlnaC4gKi8KKyNkZWZpbmUgRUdQSU9fSDM2MDBfTFZERF9PTgkJKDEgPDwgMTUpICAvKiBlbmFibGUgOVYgYW5kIC02LjVWIHRvIExDRC4gKi8KKworLyoqKioqKioqKioqKioqKioqKioqKiBIMzgwMCwgQVNJQyAjMiAqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBfSDM4MDBfQVNJQzJfQmFzZSAgICAgICAgICAgIChIMzYwMF9FR1BJT19WSVJUKQorI2RlZmluZSBIMzgwMF9BU0lDMl9PRkZTRVQocyx4LHkpICAgIFwKKyAgICAoKigodm9sYXRpbGUgcyAqKSAoX0gzODAwX0FTSUMyX0Jhc2UgKyBfSDM4MDBfQVNJQzJfICMjIHggIyMgX0Jhc2UgKyBfSDM4MDBfQVNJQzJfICMjIHggIyMgXyAjIyB5KSkpCisjZGVmaW5lIEgzODAwX0FTSUMyX05PRkZTRVQocyx4LG4seSkgXAorICAgICgqKCh2b2xhdGlsZSBzICopIChfSDM4MDBfQVNJQzJfQmFzZSArIF9IMzgwMF9BU0lDMl8gIyMgeCAjIyBfICMjIG4gIyMgX0Jhc2UgKyBfSDM4MDBfQVNJQzJfICMjIHggIyMgXyAjIyB5KSkpCisKKyNkZWZpbmUgX0gzODAwX0FTSUMyX0dQSU9fQmFzZSAgICAgICAgICAgICAgICAgMHgwMDAwCisjZGVmaW5lIF9IMzgwMF9BU0lDMl9HUElPX0RpcmVjdGlvbiAgICAgICAgICAgIDB4MDAwMCAgICAvKiBSL1csIDE2IGJpdHMgMTppbnB1dCwgMDpvdXRwdXQgKi8KKyNkZWZpbmUgX0gzODAwX0FTSUMyX0dQSU9fSW50ZXJydXB0VHlwZSAgICAgICAgMHgwMDA0ICAgIC8qIFIvVywgMTIgYml0cyAxOmVkZ2UsIDA6bGV2ZWwgICAgICAgICAgKi8KKyNkZWZpbmUgX0gzODAwX0FTSUMyX0dQSU9fSW50ZXJydXB0RWRnZVR5cGUgICAgMHgwMDA4ICAgIC8qIFIvVywgMTIgYml0cyAxOnJpc2luZywgMDpmYWxsaW5nICovCisjZGVmaW5lIF9IMzgwMF9BU0lDMl9HUElPX0ludGVycnVwdExldmVsVHlwZSAgIDB4MDAwQyAgICAvKiBSL1csIDEyIGJpdHMgMTpoaWdoLCAwOmxvdyAgKi8KKyNkZWZpbmUgX0gzODAwX0FTSUMyX0dQSU9fSW50ZXJydXB0Q2xlYXIgICAgICAgMHgwMDEwICAgIC8qIFcsICAgMTIgYml0cyAqLworI2RlZmluZSBfSDM4MDBfQVNJQzJfR1BJT19JbnRlcnJ1cHRGbGFnICAgICAgICAweDAwMTAgICAgLyogUiwgICAxMiBiaXRzIC0gcmVhZHMgaW50IHN0YXR1cyAqLworI2RlZmluZSBfSDM4MDBfQVNJQzJfR1BJT19EYXRhICAgICAgICAgICAgICAgICAweDAwMTQgICAgLyogUi9XLCAxNiBiaXRzICovCisjZGVmaW5lIF9IMzgwMF9BU0lDMl9HUElPX0JhdHRGYXVsdE91dCAgICAgICAgIDB4MDAxOCAgICAvKiBSL1csIDE2IGJpdCAtIHNldHMgbGV2ZWwgb24gYmF0dCBmYXVsdCAqLworI2RlZmluZSBfSDM4MDBfQVNJQzJfR1BJT19JbnRlcnJ1cHRFbmFibGUgICAgICAweDAwMWMgICAgLyogUi9XLCAxMiBiaXRzIDE6ZW5hYmxlIGludGVycnVwdCAqLworI2RlZmluZSBfSDM4MDBfQVNJQzJfR1BJT19BbHRlcm5hdGUgICAgICAgICAgICAweDAwM2MgICAgLyogUi9XLCAxMisxIGJpdHMgLSBzZXQgYWx0ZXJuYXRlIGZ1bmN0aW9ucyAqLworCisjZGVmaW5lIEgzODAwX0FTSUMyX0dQSU9fRGlyZWN0aW9uICAgICAgICAgIEgzODAwX0FTSUMyX09GRlNFVCggdTE2LCBHUElPLCBEaXJlY3Rpb24gKQorI2RlZmluZSBIMzgwMF9BU0lDMl9HUElPX0ludGVycnVwdFR5cGUgICAgICBIMzgwMF9BU0lDMl9PRkZTRVQoIHUxNiwgR1BJTywgSW50ZXJydXB0VHlwZSApCisjZGVmaW5lIEgzODAwX0FTSUMyX0dQSU9fSW50ZXJydXB0RWRnZVR5cGUgIEgzODAwX0FTSUMyX09GRlNFVCggdTE2LCBHUElPLCBJbnRlcnJ1cHRFZGdlVHlwZSApCisjZGVmaW5lIEgzODAwX0FTSUMyX0dQSU9fSW50ZXJydXB0TGV2ZWxUeXBlIEgzODAwX0FTSUMyX09GRlNFVCggdTE2LCBHUElPLCBJbnRlcnJ1cHRMZXZlbFR5cGUgKQorI2RlZmluZSBIMzgwMF9BU0lDMl9HUElPX0ludGVycnVwdENsZWFyICAgICBIMzgwMF9BU0lDMl9PRkZTRVQoIHUxNiwgR1BJTywgSW50ZXJydXB0Q2xlYXIgKQorI2RlZmluZSBIMzgwMF9BU0lDMl9HUElPX0ludGVycnVwdEZsYWcgICAgICBIMzgwMF9BU0lDMl9PRkZTRVQoIHUxNiwgR1BJTywgSW50ZXJydXB0RmxhZyApCisjZGVmaW5lIEgzODAwX0FTSUMyX0dQSU9fRGF0YSAgICAgICAgICAgICAgIEgzODAwX0FTSUMyX09GRlNFVCggdTE2LCBHUElPLCBEYXRhICkKKyNkZWZpbmUgSDM4MDBfQVNJQzJfR1BJT19CYXR0RmF1bHRPdXQgICAgICAgSDM4MDBfQVNJQzJfT0ZGU0VUKCB1MTYsIEdQSU8sIEJhdHRGYXVsdE91dCApCisjZGVmaW5lIEgzODAwX0FTSUMyX0dQSU9fSW50ZXJydXB0RW5hYmxlICAgIEgzODAwX0FTSUMyX09GRlNFVCggdTE2LCBHUElPLCBJbnRlcnJ1cHRFbmFibGUgKQorI2RlZmluZSBIMzgwMF9BU0lDMl9HUElPX0FsdGVybmF0ZSAgICAgICAgICBIMzgwMF9BU0lDMl9PRkZTRVQoIHUxNiwgR1BJTywgQWx0ZXJuYXRlICkKKworI2RlZmluZSBHUElPX0gzODAwX0FTSUMyX0lOX1kxX04gICAgICAgICAgKDEgPDwgMCkgICAvKiBPdXRwdXQ6IFRvdWNoc2NyZWVuIFkxICovCisjZGVmaW5lIEdQSU9fSDM4MDBfQVNJQzJfSU5fWDAgICAgICAgICAgICAoMSA8PCAxKSAgIC8qIE91dHB1dDogVG91Y2hzY3JlZW4gWDAgKi8KKyNkZWZpbmUgR1BJT19IMzgwMF9BU0lDMl9JTl9ZMCAgICAgICAgICAgICgxIDw8IDIpICAgLyogT3V0cHV0OiBUb3VjaHNjcmVlbiBZMCAqLworI2RlZmluZSBHUElPX0gzODAwX0FTSUMyX0lOX1gxX04gICAgICAgICAgKDEgPDwgMykgICAvKiBPdXRwdXQ6IFRvdWNoc2NyZWVuIFgxICovCisjZGVmaW5lIEdQSU9fSDM4MDBfQVNJQzJfQlRfUlNUICAgICAgICAgICAoMSA8PCA0KSAgIC8qIE91dHB1dDogQmx1ZXRvb3RoIHJlc2V0ICovCisjZGVmaW5lIEdQSU9fSDM4MDBfQVNJQzJfUEVOX0lSUSAgICAgICAgICAoMSA8PCA1KSAgIC8qIElucHV0IDogUGVuIGRvd24gICAgICAgICovCisjZGVmaW5lIEdQSU9fSDM4MDBfQVNJQzJfU0RfREVURUNUICAgICAgICAoMSA8PCA2KSAgIC8qIElucHV0IDogU0QgZGV0ZWN0ICovCisjZGVmaW5lIEdQSU9fSDM4MDBfQVNJQzJfRUFSX0lOX04gICAgICAgICAoMSA8PCA3KSAgIC8qIElucHV0IDogQXVkaW8gamFjayBwbHVnIGluc2VydGVkICovCisjZGVmaW5lIEdQSU9fSDM4MDBfQVNJQzJfT1BUX1BDTV9SRVNFVCAgICAoMSA8PCA4KSAgIC8qIE91dHB1dDogKi8KKyNkZWZpbmUgR1BJT19IMzgwMF9BU0lDMl9PUFRfUkVTRVQgICAgICAgICgxIDw8IDkpICAgLyogT3V0cHV0OiAqLworI2RlZmluZSBHUElPX0gzODAwX0FTSUMyX1VTQl9ERVRFQ1RfTiAgICAgKDEgPDwgMTApICAvKiBJbnB1dCA6ICovCisjZGVmaW5lIEdQSU9fSDM4MDBfQVNJQzJfU0RfQ09OX1NMVCAgICAgICAoMSA8PCAxMSkgIC8qIElucHV0IDogKi8KKworI2RlZmluZSBfSDM4MDBfQVNJQzJfS1BJT19CYXNlICAgICAgICAgICAgICAgICAweDAyMDAKKyNkZWZpbmUgX0gzODAwX0FTSUMyX0tQSU9fRGlyZWN0aW9uICAgICAgICAgICAgMHgwMDAwICAgIC8qIFIvVywgMTIgYml0cyAxOmlucHV0LCAwOm91dHB1dCAqLworI2RlZmluZSBfSDM4MDBfQVNJQzJfS1BJT19JbnRlcnJ1cHRUeXBlICAgICAgICAweDAwMDQgICAgLyogUi9XLCAxMiBiaXRzIDE6ZWRnZSwgMDpsZXZlbCAgICAgICAgICAqLworI2RlZmluZSBfSDM4MDBfQVNJQzJfS1BJT19JbnRlcnJ1cHRFZGdlVHlwZSAgICAweDAwMDggICAgLyogUi9XLCAxMiBiaXRzIDE6cmlzaW5nLCAwOmZhbGxpbmcgKi8KKyNkZWZpbmUgX0gzODAwX0FTSUMyX0tQSU9fSW50ZXJydXB0TGV2ZWxUeXBlICAgMHgwMDBDICAgIC8qIFIvVywgMTIgYml0cyAxOmhpZ2gsIDA6bG93ICAqLworI2RlZmluZSBfSDM4MDBfQVNJQzJfS1BJT19JbnRlcnJ1cHRDbGVhciAgICAgICAweDAwMTAgICAgLyogVywgICAyMCBiaXRzIC0gOCBzcGVjaWFsICovCisjZGVmaW5lIF9IMzgwMF9BU0lDMl9LUElPX0ludGVycnVwdEZsYWcgICAgICAgIDB4MDAxMCAgICAvKiBSLCAgIDIwIGJpdHMgLSA4IHNwZWNpYWwgLSByZWFkcyBpbnQgc3RhdHVzICovCisjZGVmaW5lIF9IMzgwMF9BU0lDMl9LUElPX0RhdGEgICAgICAgICAgICAgICAgIDB4MDAxNCAgICAvKiBSL1csIDE2IGJpdHMgKi8KKyNkZWZpbmUgX0gzODAwX0FTSUMyX0tQSU9fQmF0dEZhdWx0T3V0ICAgICAgICAgMHgwMDE4ICAgIC8qIFIvVywgMTYgYml0IC0gc2V0cyBsZXZlbCBvbiBiYXR0IGZhdWx0ICovCisjZGVmaW5lIF9IMzgwMF9BU0lDMl9LUElPX0ludGVycnVwdEVuYWJsZSAgICAgIDB4MDAxYyAgICAvKiBSL1csIDIwIGJpdHMgLSA4IHNwZWNpYWwgKi8KKyNkZWZpbmUgX0gzODAwX0FTSUMyX0tQSU9fQWx0ZXJuYXRlICAgICAgICAgICAgMHgwMDNjICAgIC8qIFIvVywgNiBiaXRzICovCisKKyNkZWZpbmUgSDM4MDBfQVNJQzJfS1BJT19EaXJlY3Rpb24gICAgICAgICAgSDM4MDBfQVNJQzJfT0ZGU0VUKCB1MTYsIEtQSU8sIERpcmVjdGlvbiApCisjZGVmaW5lIEgzODAwX0FTSUMyX0tQSU9fSW50ZXJydXB0VHlwZSAgICAgIEgzODAwX0FTSUMyX09GRlNFVCggdTE2LCBLUElPLCBJbnRlcnJ1cHRUeXBlICkKKyNkZWZpbmUgSDM4MDBfQVNJQzJfS1BJT19JbnRlcnJ1cHRFZGdlVHlwZSAgSDM4MDBfQVNJQzJfT0ZGU0VUKCB1MTYsIEtQSU8sIEludGVycnVwdEVkZ2VUeXBlICkKKyNkZWZpbmUgSDM4MDBfQVNJQzJfS1BJT19JbnRlcnJ1cHRMZXZlbFR5cGUgSDM4MDBfQVNJQzJfT0ZGU0VUKCB1MTYsIEtQSU8sIEludGVycnVwdExldmVsVHlwZSApCisjZGVmaW5lIEgzODAwX0FTSUMyX0tQSU9fSW50ZXJydXB0Q2xlYXIgICAgIEgzODAwX0FTSUMyX09GRlNFVCggdTMyLCBLUElPLCBJbnRlcnJ1cHRDbGVhciApCisjZGVmaW5lIEgzODAwX0FTSUMyX0tQSU9fSW50ZXJydXB0RmxhZyAgICAgIEgzODAwX0FTSUMyX09GRlNFVCggdTMyLCBLUElPLCBJbnRlcnJ1cHRGbGFnICkKKyNkZWZpbmUgSDM4MDBfQVNJQzJfS1BJT19EYXRhICAgICAgICAgICAgICAgSDM4MDBfQVNJQzJfT0ZGU0VUKCB1MTYsIEtQSU8sIERhdGEgKQorI2RlZmluZSBIMzgwMF9BU0lDMl9LUElPX0JhdHRGYXVsdE91dCAgICAgICBIMzgwMF9BU0lDMl9PRkZTRVQoIHUxNiwgS1BJTywgQmF0dEZhdWx0T3V0ICkKKyNkZWZpbmUgSDM4MDBfQVNJQzJfS1BJT19JbnRlcnJ1cHRFbmFibGUgICAgSDM4MDBfQVNJQzJfT0ZGU0VUKCB1MzIsIEtQSU8sIEludGVycnVwdEVuYWJsZSApCisjZGVmaW5lIEgzODAwX0FTSUMyX0tQSU9fQWx0ZXJuYXRlICAgICAgICAgIEgzODAwX0FTSUMyX09GRlNFVCggdTE2LCBLUElPLCBBbHRlcm5hdGUgKQorCisjZGVmaW5lIEgzODAwX0FTSUMyX0tQSU9fU1BJX0lOVCAgICAgICAgKCAxIDw8IDE2ICkKKyNkZWZpbmUgSDM4MDBfQVNJQzJfS1BJT19PV01fSU5UICAgICAgICAoIDEgPDwgMTcgKQorI2RlZmluZSBIMzgwMF9BU0lDMl9LUElPX0FEQ19JTlQgICAgICAgICggMSA8PCAxOCApCisjZGVmaW5lIEgzODAwX0FTSUMyX0tQSU9fVUFSVF8wX0lOVCAgICAgKCAxIDw8IDE5ICkKKyNkZWZpbmUgSDM4MDBfQVNJQzJfS1BJT19VQVJUXzFfSU5UICAgICAoIDEgPDwgMjAgKQorI2RlZmluZSBIMzgwMF9BU0lDMl9LUElPX1RJTUVSXzBfSU5UICAgICggMSA8PCAyMSApCisjZGVmaW5lIEgzODAwX0FTSUMyX0tQSU9fVElNRVJfMV9JTlQgICAgKCAxIDw8IDIyICkKKyNkZWZpbmUgSDM4MDBfQVNJQzJfS1BJT19USU1FUl8yX0lOVCAgICAoIDEgPDwgMjMgKQorCisjZGVmaW5lIEtQSU9fSDM4MDBfQVNJQzJfUkVDT1JEX0JUTl9OICAgICAoMSA8PCAwKSAgIC8qIFJlY29yZCBidXR0b24gKi8KKyNkZWZpbmUgS1BJT19IMzgwMF9BU0lDMl9LRVlfNVcxX04gICAgICAgICgxIDw8IDEpICAgLyogS2V5cGFkICovCisjZGVmaW5lIEtQSU9fSDM4MDBfQVNJQzJfS0VZXzVXMl9OICAgICAgICAoMSA8PCAyKSAgIC8qICovCisjZGVmaW5lIEtQSU9fSDM4MDBfQVNJQzJfS0VZXzVXM19OICAgICAgICAoMSA8PCAzKSAgIC8qICovCisjZGVmaW5lIEtQSU9fSDM4MDBfQVNJQzJfS0VZXzVXNF9OICAgICAgICAoMSA8PCA0KSAgIC8qICovCisjZGVmaW5lIEtQSU9fSDM4MDBfQVNJQzJfS0VZXzVXNV9OICAgICAgICAoMSA8PCA1KSAgIC8qICovCisjZGVmaW5lIEtQSU9fSDM4MDBfQVNJQzJfS0VZX0xFRlRfTiAgICAgICAoMSA8PCA2KSAgIC8qICovCisjZGVmaW5lIEtQSU9fSDM4MDBfQVNJQzJfS0VZX1JJR0hUX04gICAgICAoMSA8PCA3KSAgIC8qICovCisjZGVmaW5lIEtQSU9fSDM4MDBfQVNJQzJfS0VZX0FQMV9OICAgICAgICAoMSA8PCA4KSAgIC8qIE9sZCAiQ2FsZW5kYXIiICovCisjZGVmaW5lIEtQSU9fSDM4MDBfQVNJQzJfS0VZX0FQMl9OICAgICAgICAoMSA8PCA5KSAgIC8qIE9sZCAiU2NoZWR1bGUiICovCisjZGVmaW5lIEtQSU9fSDM4MDBfQVNJQzJfS0VZX0FQM19OICAgICAgICAoMSA8PCAxMCkgIC8qIE9sZCAiUSIgICAgICAgICovCisjZGVmaW5lIEtQSU9fSDM4MDBfQVNJQzJfS0VZX0FQNF9OICAgICAgICAoMSA8PCAxMSkgIC8qIE9sZCAiVW5kbyIgICAgICovCisKKy8qIEFsdGVybmF0ZSBLUElPIGZ1bmN0aW9ucyAoc2V0IGJ5IGRlZmF1bHQpICovCisjZGVmaW5lIEtQSU9fQUxUX0gzODAwX0FTSUMyX0tFWV81VzFfTiAgICAgICAgKDEgPDwgMSkgICAvKiBBY3Rpb24ga2V5ICovCisjZGVmaW5lIEtQSU9fQUxUX0gzODAwX0FTSUMyX0tFWV81VzJfTiAgICAgICAgKDEgPDwgMikgICAvKiBKMSBvZiBrZXlwYWQgaW5wdXQgKi8KKyNkZWZpbmUgS1BJT19BTFRfSDM4MDBfQVNJQzJfS0VZXzVXM19OICAgICAgICAoMSA8PCAzKSAgIC8qIEoyIG9mIGtleXBhZCBpbnB1dCAqLworI2RlZmluZSBLUElPX0FMVF9IMzgwMF9BU0lDMl9LRVlfNVc0X04gICAgICAgICgxIDw8IDQpICAgLyogSjMgb2Yga2V5cGFkIGlucHV0ICovCisjZGVmaW5lIEtQSU9fQUxUX0gzODAwX0FTSUMyX0tFWV81VzVfTiAgICAgICAgKDEgPDwgNSkgICAvKiBKNCBvZiBrZXlwYWQgaW5wdXQgKi8KKworI2RlZmluZSBfSDM4MDBfQVNJQzJfU1BJX0Jhc2UgICAgICAgICAgICAgICAgICAweDA0MDAKKyNkZWZpbmUgX0gzODAwX0FTSUMyX1NQSV9Db250cm9sICAgICAgICAgICAgICAgMHgwMDAwICAgIC8qIFIvVyA4IGJpdHMgKi8KKyNkZWZpbmUgX0gzODAwX0FTSUMyX1NQSV9EYXRhICAgICAgICAgICAgICAgICAgMHgwMDA0ICAgIC8qIFIvVyA4IGJpdHMgKi8KKyNkZWZpbmUgX0gzODAwX0FTSUMyX1NQSV9DaGlwU2VsZWN0RGlzYWJsZWQgICAgMHgwMDA4ICAgIC8qIFcgICA4IGJpdHMgKi8KKworI2RlZmluZSBIMzgwMF9BU0lDMl9TUElfQ29udHJvbCAgICAgICAgICAgICBIMzgwMF9BU0lDMl9PRkZTRVQoIHU4LCBTUEksIENvbnRyb2wgKQorI2RlZmluZSBIMzgwMF9BU0lDMl9TUElfRGF0YSAgICAgICAgICAgICAgICBIMzgwMF9BU0lDMl9PRkZTRVQoIHU4LCBTUEksIERhdGEgKQorI2RlZmluZSBIMzgwMF9BU0lDMl9TUElfQ2hpcFNlbGVjdERpc2FibGVkICBIMzgwMF9BU0lDMl9PRkZTRVQoIHU4LCBTUEksIENoaXBTZWxlY3REaXNhYmxlZCApCisKKyNkZWZpbmUgX0gzODAwX0FTSUMyX1BXTV8wX0Jhc2UgICAgICAgICAgICAgICAgMHgwNjAwCisjZGVmaW5lIF9IMzgwMF9BU0lDMl9QV01fMV9CYXNlICAgICAgICAgICAgICAgIDB4MDcwMAorI2RlZmluZSBfSDM4MDBfQVNJQzJfUFdNX1RpbWVCYXNlICAgICAgICAgICAgICAweDAwMDAgICAgLyogUi9XIDYgYml0cyAqLworI2RlZmluZSBfSDM4MDBfQVNJQzJfUFdNX1BlcmlvZFRpbWUgICAgICAgICAgICAweDAwMDQgICAgLyogUi9XIDEyIGJpdHMgKi8KKyNkZWZpbmUgX0gzODAwX0FTSUMyX1BXTV9EdXR5VGltZSAgICAgICAgICAgICAgMHgwMDA4ICAgIC8qIFIvVyAxMiBiaXRzICovCisKKyNkZWZpbmUgSDM4MDBfQVNJQzJfUFdNXzBfVGltZUJhc2UgICAgICAgICAgSDM4MDBfQVNJQzJfTk9GRlNFVCggIHU4LCBQV00sIDAsIFRpbWVCYXNlICkKKyNkZWZpbmUgSDM4MDBfQVNJQzJfUFdNXzBfUGVyaW9kVGltZSAgICAgICAgSDM4MDBfQVNJQzJfTk9GRlNFVCggdTE2LCBQV00sIDAsIFBlcmlvZFRpbWUgKQorI2RlZmluZSBIMzgwMF9BU0lDMl9QV01fMF9EdXR5VGltZSAgICAgICAgICBIMzgwMF9BU0lDMl9OT0ZGU0VUKCB1MTYsIFBXTSwgMCwgRHV0eVRpbWUgKQorCisjZGVmaW5lIEgzODAwX0FTSUMyX1BXTV8xX1RpbWVCYXNlICAgICAgICAgIEgzODAwX0FTSUMyX05PRkZTRVQoICB1OCwgUFdNLCAxLCBUaW1lQmFzZSApCisjZGVmaW5lIEgzODAwX0FTSUMyX1BXTV8xX1BlcmlvZFRpbWUgICAgICAgIEgzODAwX0FTSUMyX05PRkZTRVQoIHUxNiwgUFdNLCAxLCBQZXJpb2RUaW1lICkKKyNkZWZpbmUgSDM4MDBfQVNJQzJfUFdNXzFfRHV0eVRpbWUgICAgICAgICAgSDM4MDBfQVNJQzJfTk9GRlNFVCggdTE2LCBQV00sIDEsIER1dHlUaW1lICkKKworI2RlZmluZSBIMzgwMF9BU0lDMl9QV01fVElNRUJBU0VfTUFTSyAgICAgICAgICAgICAweGYgICAgLyogTG93IDQgYml0cyBzZXRzIHRpbWUgYmFzZSwgbWF4ID0gOCAqLworI2RlZmluZSBIMzgwMF9BU0lDMl9QV01fVElNRUJBU0VfRU5BQkxFICAgICggMSA8PCA0ICkgICAgLyogRW5hYmxlIGNsb2NrICovCisjZGVmaW5lIEgzODAwX0FTSUMyX1BXTV9USU1FQkFTRV9DTEVBUiAgICAgKCAxIDw8IDUgKSAgICAvKiBDbGVhciB0aGUgUFdNICovCisKKyNkZWZpbmUgX0gzODAwX0FTSUMyX0xFRF8wX0Jhc2UgICAgICAgICAgICAgICAgMHgwODAwCisjZGVmaW5lIF9IMzgwMF9BU0lDMl9MRURfMV9CYXNlICAgICAgICAgICAgICAgIDB4MDg4MAorI2RlZmluZSBfSDM4MDBfQVNJQzJfTEVEXzJfQmFzZSAgICAgICAgICAgICAgICAweDA5MDAKKyNkZWZpbmUgX0gzODAwX0FTSUMyX0xFRF9UaW1lQmFzZSAgICAgICAgICAgICAgMHgwMDAwICAgIC8qIFIvVyAgNyBiaXRzICovCisjZGVmaW5lIF9IMzgwMF9BU0lDMl9MRURfUGVyaW9kVGltZSAgICAgICAgICAgIDB4MDAwNCAgICAvKiBSL1cgMTIgYml0cyAqLworI2RlZmluZSBfSDM4MDBfQVNJQzJfTEVEX0R1dHlUaW1lICAgICAgICAgICAgICAweDAwMDggICAgLyogUi9XIDEyIGJpdHMgKi8KKyNkZWZpbmUgX0gzODAwX0FTSUMyX0xFRF9BdXRvU3RvcENvdW50ICAgICAgICAgMHgwMDBjICAgIC8qIFIvVyAxNiBiaXRzICovCisKKyNkZWZpbmUgSDM4MDBfQVNJQzJfTEVEXzBfVGltZUJhc2UgICAgICAgICAgSDM4MDBfQVNJQzJfTk9GRlNFVCggIHU4LCBMRUQsIDAsIFRpbWVCYXNlICkKKyNkZWZpbmUgSDM4MDBfQVNJQzJfTEVEXzBfUGVyaW9kVGltZSAgICAgICAgSDM4MDBfQVNJQzJfTk9GRlNFVCggdTE2LCBMRUQsIDAsIFBlcmlvZFRpbWUgKQorI2RlZmluZSBIMzgwMF9BU0lDMl9MRURfMF9EdXR5VGltZSAgICAgICAgICBIMzgwMF9BU0lDMl9OT0ZGU0VUKCB1MTYsIExFRCwgMCwgRHV0eVRpbWUgKQorI2RlZmluZSBIMzgwMF9BU0lDMl9MRURfMF9BdXRvU3RvcENsb2NrICAgICBIMzgwMF9BU0lDMl9OT0ZGU0VUKCB1MTYsIExFRCwgMCwgQXV0b1N0b3BDbG9jayApCisKKyNkZWZpbmUgSDM4MDBfQVNJQzJfTEVEXzFfVGltZUJhc2UgICAgICAgICAgSDM4MDBfQVNJQzJfTk9GRlNFVCggIHU4LCBMRUQsIDEsIFRpbWVCYXNlICkKKyNkZWZpbmUgSDM4MDBfQVNJQzJfTEVEXzFfUGVyaW9kVGltZSAgICAgICAgSDM4MDBfQVNJQzJfTk9GRlNFVCggdTE2LCBMRUQsIDEsIFBlcmlvZFRpbWUgKQorI2RlZmluZSBIMzgwMF9BU0lDMl9MRURfMV9EdXR5VGltZSAgICAgICAgICBIMzgwMF9BU0lDMl9OT0ZGU0VUKCB1MTYsIExFRCwgMSwgRHV0eVRpbWUgKQorI2RlZmluZSBIMzgwMF9BU0lDMl9MRURfMV9BdXRvU3RvcENsb2NrICAgICBIMzgwMF9BU0lDMl9OT0ZGU0VUKCB1MTYsIExFRCwgMSwgQXV0b1N0b3BDbG9jayApCisKKyNkZWZpbmUgSDM4MDBfQVNJQzJfTEVEXzJfVGltZUJhc2UgICAgICAgICAgSDM4MDBfQVNJQzJfTk9GRlNFVCggIHU4LCBMRUQsIDIsIFRpbWVCYXNlICkKKyNkZWZpbmUgSDM4MDBfQVNJQzJfTEVEXzJfUGVyaW9kVGltZSAgICAgICAgSDM4MDBfQVNJQzJfTk9GRlNFVCggdTE2LCBMRUQsIDIsIFBlcmlvZFRpbWUgKQorI2RlZmluZSBIMzgwMF9BU0lDMl9MRURfMl9EdXR5VGltZSAgICAgICAgICBIMzgwMF9BU0lDMl9OT0ZGU0VUKCB1MTYsIExFRCwgMiwgRHV0eVRpbWUgKQorI2RlZmluZSBIMzgwMF9BU0lDMl9MRURfMl9BdXRvU3RvcENsb2NrICAgICBIMzgwMF9BU0lDMl9OT0ZGU0VUKCB1MTYsIExFRCwgMiwgQXV0b1N0b3BDbG9jayApCisKKyNkZWZpbmUgSDM4MDBfQVNJQzJfTEVEX1RJTUVCQVNFX01BU0sgICAgICAgICAgICAweDBmICAgIC8qIExvdyA0IGJpdHMgc2V0cyB0aW1lIGJhc2UsIG1heCA9IDEzICovCisjZGVmaW5lIEgzODAwX0FTSUMyX0xFRF9USU1FQkFTRV9CTElOSyAgICAgKCAxIDw8IDQgKSAgICAvKiBFbmFibGUgYmxpbmtpbmcgKi8KKyNkZWZpbmUgSDM4MDBfQVNJQzJfTEVEX1RJTUVCQVNFX0FVVE9TVE9QICAoIDEgPDwgNSApCisjZGVmaW5lIEgzODAwX0FTSUMyX0xFRF9USU1FQkFTRV9BTFdBWVMgICAgKCAxIDw8IDYgKSAgICAvKiBFbmFibGUgYmxpbmsgYWx3YXlzICovCisKKyNkZWZpbmUgX0gzODAwX0FTSUMyX1VBUlRfMF9CYXNlICAgICAgICAgICAgICAgMHgwQTAwCisjZGVmaW5lIF9IMzgwMF9BU0lDMl9VQVJUXzFfQmFzZSAgICAgICAgICAgICAgIDB4MEMwMAorI2RlZmluZSBfSDM4MDBfQVNJQzJfVUFSVF9SZWNlaXZlICAgICAgICAgICAgICAweDAwMDAgICAgLyogUiAgICA4IGJpdHMgKi8KKyNkZWZpbmUgX0gzODAwX0FTSUMyX1VBUlRfVHJhbnNtaXQgICAgICAgICAgICAgMHgwMDAwICAgIC8qICAgVyAgOCBiaXRzICovCisjZGVmaW5lIF9IMzgwMF9BU0lDMl9VQVJUX0ludEVuYWJsZSAgICAgICAgICAgIDB4MDAwNCAgICAvKiBSL1cgIDggYml0cyAqLworI2RlZmluZSBfSDM4MDBfQVNJQzJfVUFSVF9JbnRWZXJpZnkgICAgICAgICAgICAweDAwMDggICAgLyogUi9XICA4IGJpdHMgKi8KKyNkZWZpbmUgX0gzODAwX0FTSUMyX1VBUlRfRklGT0NvbnRyb2wgICAgICAgICAgMHgwMDBjICAgIC8qIFIvVyAgOCBiaXRzICovCisjZGVmaW5lIF9IMzgwMF9BU0lDMl9VQVJUX0xpbmVDb250cm9sICAgICAgICAgIDB4MDAxMCAgICAvKiBSL1cgIDggYml0cyAqLworI2RlZmluZSBfSDM4MDBfQVNJQzJfVUFSVF9Nb2RlbVN0YXR1cyAgICAgICAgICAweDAwMTQgICAgLyogUi9XICA4IGJpdHMgKi8KKyNkZWZpbmUgX0gzODAwX0FTSUMyX1VBUlRfTGluZVN0YXR1cyAgICAgICAgICAgMHgwMDE4ICAgIC8qIFIvVyAgOCBiaXRzICovCisjZGVmaW5lIF9IMzgwMF9BU0lDMl9VQVJUX1NjcmF0Y2hQYWQgICAgICAgICAgIDB4MDAxYyAgICAvKiBSL1cgIDggYml0cyAqLworI2RlZmluZSBfSDM4MDBfQVNJQzJfVUFSVF9EaXZpc29yTGF0Y2hMICAgICAgICAweDAwMjAgICAgLyogUi9XICA4IGJpdHMgKi8KKyNkZWZpbmUgX0gzODAwX0FTSUMyX1VBUlRfRGl2aXNvckxhdGNoSCAgICAgICAgMHgwMDI0ICAgIC8qIFIvVyAgOCBiaXRzICovCisKKyNkZWZpbmUgSDM4MDBfQVNJQzJfVUFSVF8wX1JlY2VpdmUgICAgICAgICAgSDM4MDBfQVNJQzJfTk9GRlNFVCggIHU4LCBVQVJULCAwLCBSZWNlaXZlICkKKyNkZWZpbmUgSDM4MDBfQVNJQzJfVUFSVF8wX1RyYW5zbWl0ICAgICAgICAgSDM4MDBfQVNJQzJfTk9GRlNFVCggIHU4LCBVQVJULCAwLCBUcmFuc21pdCApCisjZGVmaW5lIEgzODAwX0FTSUMyX1VBUlRfMF9JbnRFbmFibGUgICAgICAgIEgzODAwX0FTSUMyX05PRkZTRVQoICB1OCwgVUFSVCwgMCwgSW50RW5hYmxlICkKKyNkZWZpbmUgSDM4MDBfQVNJQzJfVUFSVF8wX0ludFZlcmlmeSAgICAgICAgSDM4MDBfQVNJQzJfTk9GRlNFVCggIHU4LCBVQVJULCAwLCBJbnRWZXJpZnkgKQorI2RlZmluZSBIMzgwMF9BU0lDMl9VQVJUXzBfRklGT0NvbnRyb2wgICAgICBIMzgwMF9BU0lDMl9OT0ZGU0VUKCAgdTgsIFVBUlQsIDAsIEZJRk9Db250cm9sICkKKyNkZWZpbmUgSDM4MDBfQVNJQzJfVUFSVF8wX0xpbmVDb250cm9sICAgICAgSDM4MDBfQVNJQzJfTk9GRlNFVCggIHU4LCBVQVJULCAwLCBMaW5lQ29udHJvbCApCisjZGVmaW5lIEgzODAwX0FTSUMyX1VBUlRfMF9Nb2RlbVN0YXR1cyAgICAgIEgzODAwX0FTSUMyX05PRkZTRVQoICB1OCwgVUFSVCwgMCwgTW9kZW1TdGF0dXMgKQorI2RlZmluZSBIMzgwMF9BU0lDMl9VQVJUXzBfTGluZVN0YXR1cyAgICAgICBIMzgwMF9BU0lDMl9OT0ZGU0VUKCAgdTgsIFVBUlQsIDAsIExpbmVTdGF0dXMgKQorI2RlZmluZSBIMzgwMF9BU0lDMl9VQVJUXzBfU2NyYXRjaFBhZCAgICAgICBIMzgwMF9BU0lDMl9OT0ZGU0VUKCAgdTgsIFVBUlQsIDAsIFNjcmF0Y2hQYWQgKQorI2RlZmluZSBIMzgwMF9BU0lDMl9VQVJUXzBfRGl2aXNvckxhdGNoTCAgICBIMzgwMF9BU0lDMl9OT0ZGU0VUKCAgdTgsIFVBUlQsIDAsIERpdmlzb3JMYXRjaEwgKQorI2RlZmluZSBIMzgwMF9BU0lDMl9VQVJUXzBfRGl2aXNvckxhdGNoSCAgICBIMzgwMF9BU0lDMl9OT0ZGU0VUKCAgdTgsIFVBUlQsIDAsIERpdmlzb3JMYXRjaEggKQorCisjZGVmaW5lIEgzODAwX0FTSUMyX1VBUlRfMV9SZWNlaXZlICAgICAgICAgIEgzODAwX0FTSUMyX05PRkZTRVQoICB1OCwgVUFSVCwgMSwgUmVjZWl2ZSApCisjZGVmaW5lIEgzODAwX0FTSUMyX1VBUlRfMV9UcmFuc21pdCAgICAgICAgIEgzODAwX0FTSUMyX05PRkZTRVQoICB1OCwgVUFSVCwgMSwgVHJhbnNtaXQgKQorI2RlZmluZSBIMzgwMF9BU0lDMl9VQVJUXzFfSW50RW5hYmxlICAgICAgICBIMzgwMF9BU0lDMl9OT0ZGU0VUKCAgdTgsIFVBUlQsIDEsIEludEVuYWJsZSApCisjZGVmaW5lIEgzODAwX0FTSUMyX1VBUlRfMV9JbnRWZXJpZnkgICAgICAgIEgzODAwX0FTSUMyX05PRkZTRVQoICB1OCwgVUFSVCwgMSwgSW50VmVyaWZ5ICkKKyNkZWZpbmUgSDM4MDBfQVNJQzJfVUFSVF8xX0ZJRk9Db250cm9sICAgICAgSDM4MDBfQVNJQzJfTk9GRlNFVCggIHU4LCBVQVJULCAxLCBGSUZPQ29udHJvbCApCisjZGVmaW5lIEgzODAwX0FTSUMyX1VBUlRfMV9MaW5lQ29udHJvbCAgICAgIEgzODAwX0FTSUMyX05PRkZTRVQoICB1OCwgVUFSVCwgMSwgTGluZUNvbnRyb2wgKQorI2RlZmluZSBIMzgwMF9BU0lDMl9VQVJUXzFfTW9kZW1TdGF0dXMgICAgICBIMzgwMF9BU0lDMl9OT0ZGU0VUKCAgdTgsIFVBUlQsIDEsIE1vZGVtU3RhdHVzICkKKyNkZWZpbmUgSDM4MDBfQVNJQzJfVUFSVF8xX0xpbmVTdGF0dXMgICAgICAgSDM4MDBfQVNJQzJfTk9GRlNFVCggIHU4LCBVQVJULCAxLCBMaW5lU3RhdHVzICkKKyNkZWZpbmUgSDM4MDBfQVNJQzJfVUFSVF8xX1NjcmF0Y2hQYWQgICAgICAgSDM4MDBfQVNJQzJfTk9GRlNFVCggIHU4LCBVQVJULCAxLCBTY3JhdGNoUGFkICkKKyNkZWZpbmUgSDM4MDBfQVNJQzJfVUFSVF8xX0Rpdmlzb3JMYXRjaEwgICAgSDM4MDBfQVNJQzJfTk9GRlNFVCggIHU4LCBVQVJULCAxLCBEaXZpc29yTGF0Y2hMICkKKyNkZWZpbmUgSDM4MDBfQVNJQzJfVUFSVF8xX0Rpdmlzb3JMYXRjaEggICAgSDM4MDBfQVNJQzJfTk9GRlNFVCggIHU4LCBVQVJULCAxLCBEaXZpc29yTGF0Y2hIICkKKworI2RlZmluZSBfSDM4MDBfQVNJQzJfVElNRVJfQmFzZSAgICAgICAgICAgICAgICAweDBFMDAKKyNkZWZpbmUgX0gzODAwX0FTSUMyX1RJTUVSX0NvbW1hbmQgICAgICAgICAgICAgMHgwMDAwICAgIC8qIFIvVyAgOCBiaXRzICovCisKKyNkZWZpbmUgSDM4MDBfQVNJQzJfVElNRVJfQ29tbWFuZCAgICAgICAgICAgSDM4MDBfQVNJQzJfT0ZGU0VUKCB1OCwgVGltZXIsIENvbW1hbmQgKQorCisjZGVmaW5lIEgzODAwX0FTSUMyX1RJTUVSX0dBVF8wICAgICAgICAgICAgKCAxIDw8IDAgKSAgICAvKiBHYXRlIGVuYWJsZSwgY291bnRlciAwICovCisjZGVmaW5lIEgzODAwX0FTSUMyX1RJTUVSX0dBVF8xICAgICAgICAgICAgKCAxIDw8IDEgKSAgICAvKiBHYXRlIGVuYWJsZSwgY291bnRlciAxICovCisjZGVmaW5lIEgzODAwX0FTSUMyX1RJTUVSX0dBVF8yICAgICAgICAgICAgKCAxIDw8IDIgKSAgICAvKiBHYXRlIGVuYWJsZSwgY291bnRlciAyICovCisjZGVmaW5lIEgzODAwX0FTSUMyX1RJTUVSX0NMS18wICAgICAgICAgICAgKCAxIDw8IDMgKSAgICAvKiBDbG9jayBlbmFibGUsIGNvdW50ZXIgMCAqLworI2RlZmluZSBIMzgwMF9BU0lDMl9USU1FUl9DTEtfMSAgICAgICAgICAgICggMSA8PCA0ICkgICAgLyogQ2xvY2sgZW5hYmxlLCBjb3VudGVyIDEgKi8KKyNkZWZpbmUgSDM4MDBfQVNJQzJfVElNRVJfQ0xLXzIgICAgICAgICAgICAoIDEgPDwgNSApICAgIC8qIENsb2NrIGVuYWJsZSwgY291bnRlciAyICovCisjZGVmaW5lIEgzODAwX0FTSUMyX1RJTUVSX01PREVfMCAgICAgICAgICAgKCAxIDw8IDYgKSAgICAvKiBNb2RlIDAgZW5hYmxlLCBjb3VudGVyIDAgKi8KKyNkZWZpbmUgSDM4MDBfQVNJQzJfVElNRVJfTU9ERV8xICAgICAgICAgICAoIDEgPDwgNyApICAgIC8qIE1vZGUgMCBlbmFibGUsIGNvdW50ZXIgMSAqLworCisjZGVmaW5lIF9IMzgwMF9BU0lDMl9DTE9DS19CYXNlICAgICAgICAgICAgICAgIDB4MTAwMAorI2RlZmluZSBfSDM4MDBfQVNJQzJfQ0xPQ0tfRW5hYmxlICAgICAgICAgICAgICAweDAwMDAgICAgLyogUi9XICAxOCBiaXRzICovCisKKyNkZWZpbmUgSDM4MDBfQVNJQzJfQ0xPQ0tfRW5hYmxlICAgICAgICAgICAgSDM4MDBfQVNJQzJfT0ZGU0VUKCB1MzIsIENMT0NLLCBFbmFibGUgKQorCisjZGVmaW5lIEgzODAwX0FTSUMyX0NMT0NLX0FVRElPXzEgICAgICAgICAgICAgIDB4MDAwMSAgICAvKiBFbmFibGUgNC4xIE1IeiBjbG9jayBmb3IgOEtoeiBhbmQgNGtoeiBzYW1wbGUgcmF0ZSAqLworI2RlZmluZSBIMzgwMF9BU0lDMl9DTE9DS19BVURJT18yICAgICAgICAgICAgICAweDAwMDIgICAgLyogRW5hYmxlIDEyLjMgTUh6IGNsb2NrIGZvciA0OEtoeiBhbmQgMzJraHogc2FtcGxlIHJhdGUgKi8KKyNkZWZpbmUgSDM4MDBfQVNJQzJfQ0xPQ0tfQVVESU9fMyAgICAgICAgICAgICAgMHgwMDA0ICAgIC8qIEVuYWJsZSA1LjYgTUh6IGNsb2NrIGZvciAxMSBrSFogc2FtcGxlIHJhdGUgKi8KKyNkZWZpbmUgSDM4MDBfQVNJQzJfQ0xPQ0tfQVVESU9fNCAgICAgICAgICAgICAgMHgwMDA4ICAgIC8qIEVuYWJsZSAxMS4yODkgTUh6IGNsb2NrIGZvciA0NCBhbmQgMjIga0h6IHNhbXBsZSByYXRlICovCisjZGVmaW5lIEgzODAwX0FTSUMyX0NMT0NLX0FEQyAgICAgICAgICAgICAgKCAxIDw8IDQgKSAgICAvKiAxLjAyNCBNSHogY2xvY2sgdG8gQURDICovCisjZGVmaW5lIEgzODAwX0FTSUMyX0NMT0NLX1NQSSAgICAgICAgICAgICAgKCAxIDw8IDUgKSAgICAvKiA0LjA5NiBNSHogY2xvY2sgdG8gU1BJICovCisjZGVmaW5lIEgzODAwX0FTSUMyX0NMT0NLX09XTSAgICAgICAgICAgICAgKCAxIDw8IDYgKSAgICAvKiA0LjA5NiBNSHogY2xvY2sgdG8gT1dNICovCisjZGVmaW5lIEgzODAwX0FTSUMyX0NMT0NLX1BXTSAgICAgICAgICAgICAgKCAxIDw8IDcgKSAgICAvKiAyLjA0OCBNSHogY2xvY2sgdG8gUFdNICovCisjZGVmaW5lIEgzODAwX0FTSUMyX0NMT0NLX1VBUlRfMSAgICAgICAgICAgKCAxIDw8IDggKSAgICAvKiAyNC41NzYgTUh6IGNsb2NrIHRvIFVBUlQxICh0dXJuIG9mZiBiaXQgMTYpICovCisjZGVmaW5lIEgzODAwX0FTSUMyX0NMT0NLX1VBUlRfMCAgICAgICAgICAgKCAxIDw8IDkgKSAgICAvKiAyNC41NzYgTUh6IGNsb2NrIHRvIFVBUlQwICh0dXJuIG9mZiBiaXQgMTcpICovCisjZGVmaW5lIEgzODAwX0FTSUMyX0NMT0NLX1NEXzEgICAgICAgICAgICAgKCAxIDw8IDEwICkgICAvKiAxNi45MzQgTUh6IHRvIFNEICovCisjZGVmaW5lIEgzODAwX0FTSUMyX0NMT0NLX1NEXzIgICAgICAgICAgICAgKCAyIDw8IDEwICkgICAvKiAyNC41NzYgTUh6IHRvIFNEICovCisjZGVmaW5lIEgzODAwX0FTSUMyX0NMT0NLX1NEXzMgICAgICAgICAgICAgKCAzIDw8IDEwICkgICAvKiAzMy44NjkgTUh6IHRvIFNEICovCisjZGVmaW5lIEgzODAwX0FTSUMyX0NMT0NLX1NEXzQgICAgICAgICAgICAgKCA0IDw8IDEwICkgICAvKiA0OS4xNTIgTUh6IHRvIFNEICovCisjZGVmaW5lIEgzODAwX0FTSUMyX0NMT0NLX0VYMCAgICAgICAgICAgICAgKCAxIDw8IDEzICkgICAvKiBFbmFibGUgMzIuNzY4IGtIeiBjcnlzdGFsICovCisjZGVmaW5lIEgzODAwX0FTSUMyX0NMT0NLX0VYMSAgICAgICAgICAgICAgKCAxIDw8IDE0ICkgICAvKiBFbmFibGUgMjQuNTc2IE1IeiBjcnlzdGFsICovCisjZGVmaW5lIEgzODAwX0FTSUMyX0NMT0NLX0VYMiAgICAgICAgICAgICAgKCAxIDw8IDE1ICkgICAvKiBFbmFibGUgMzMuODY5IE1IeiBjcnlzdGFsICovCisjZGVmaW5lIEgzODAwX0FTSUMyX0NMT0NLX1NMT1dfVUFSVF8xICAgICAgKCAxIDw8IDE2ICkgICAvKiBFbmFibGUgMy42ODYgTUh6IHRvIFVBUlQxICh0dXJuIG9mZiBiaXQgOCkgKi8KKyNkZWZpbmUgSDM4MDBfQVNJQzJfQ0xPQ0tfU0xPV19VQVJUXzAgICAgICAoIDEgPDwgMTcgKSAgIC8qIEVuYWJsZSAzLjY4NiBNSHogdG8gVUFSVDAgKHR1cm4gb2ZmIGJpdCA5KSAqLworCisjZGVmaW5lIF9IMzgwMF9BU0lDMl9BRENfQmFzZSAgICAgICAgICAgICAgICAgIDB4MTIwMAorI2RlZmluZSBfSDM4MDBfQVNJQzJfQURDX011bHRpcGxleGVyICAgICAgICAgICAweDAwMDAgICAgLyogUi9XIDQgYml0cyAtIGxvdyAzIGJpdHMgc2V0IGNoYW5uZWwgKi8KKyNkZWZpbmUgX0gzODAwX0FTSUMyX0FEQ19Db250cm9sU3RhdHVzICAgICAgICAgMHgwMDA0ICAgIC8qIFIvVyA4IGJpdHMgKi8KKyNkZWZpbmUgX0gzODAwX0FTSUMyX0FEQ19EYXRhICAgICAgICAgICAgICAgICAgMHgwMDA4ICAgIC8qIFIgICAxMCBiaXRzICovCisKKyNkZWZpbmUgSDM4MDBfQVNJQzJfQURDX011bHRpcGxleGVyICAgICAgIEgzODAwX0FTSUMyX09GRlNFVCggIHU4LCBBREMsIE11bHRpcGxleGVyICkKKyNkZWZpbmUgSDM4MDBfQVNJQzJfQURDX0NvbnRyb2xTdGF0dXMgICAgIEgzODAwX0FTSUMyX09GRlNFVCggIHU4LCBBREMsIENvbnRyb2xTdGF0dXMgKQorI2RlZmluZSBIMzgwMF9BU0lDMl9BRENfRGF0YSAgICAgICAgICAgICAgSDM4MDBfQVNJQzJfT0ZGU0VUKCB1MTYsIEFEQywgRGF0YSApCisKKyNkZWZpbmUgSDM2MDBfQVNJQzJfQURDX01VWF9DSEFOTkVMX01BU0sgICAgICAgICAweDA3ICAgIC8qIExvdyAzIGJpdHMgc2V0cyBjaGFubmVsLiAgbWF4ID0gNCAqLworI2RlZmluZSBIMzYwMF9BU0lDMl9BRENfTVVYX0NMS0VOICAgICAgICAgICggMSA8PCAzICkgICAgLyogRW5hYmxlIGNsb2NrICovCisKKyNkZWZpbmUgSDM2MDBfQVNJQzJfQURDX0NTUl9BRFBTX01BU0sgICAgICAgICAgICAweDBmICAgIC8qIExvdyA0IGJpdHMgc2V0cyBwcmVzY2FsZSwgbWF4ID0gOCAqLworI2RlZmluZSBIMzYwMF9BU0lDMl9BRENfQ1NSX0ZSRUVfUlVOICAgICAgICggMSA8PCA0ICkKKyNkZWZpbmUgSDM2MDBfQVNJQzJfQURDX0NTUl9JTlRfRU5BQkxFICAgICAoIDEgPDwgNSApCisjZGVmaW5lIEgzNjAwX0FTSUMyX0FEQ19DU1JfU1RBUlQgICAgICAgICAgKCAxIDw8IDYgKSAgICAvKiBTZXQgdG8gc3RhcnQgY29udmVyc2lvbi4gIEdvZXMgdG8gMCB3aGVuIGRvbmUgKi8KKyNkZWZpbmUgSDM2MDBfQVNJQzJfQURDX0NTUl9FTkFCTEUgICAgICAgICAoIDEgPDwgNyApICAgIC8qIDE6cG93ZXIgdXAgQURDLCAwOnBvd2VyIGRvd24gKi8KKworCisjZGVmaW5lIF9IMzgwMF9BU0lDMl9JTlRSX0Jhc2UgICAgICAgICAgICAgICAgIDB4MTYwMAorI2RlZmluZSBfSDM4MDBfQVNJQzJfSU5UUl9NYXNrQW5kRmxhZyAgICAgICAgICAweDAwMDAgICAgLyogUi8oVykgOGJpdHMgKi8KKyNkZWZpbmUgX0gzODAwX0FTSUMyX0lOVFJfQ2xvY2tQcmVzY2FsZSAgICAgICAgMHgwMDA0ICAgIC8qIFIvKFcpIDViaXRzICovCisjZGVmaW5lIF9IMzgwMF9BU0lDMl9JTlRSX1RpbWVyU2V0ICAgICAgICAgICAgIDB4MDAwOCAgICAvKiBSLyhXKSA4Yml0cyAqLworCisjZGVmaW5lIEgzODAwX0FTSUMyX0lOVFJfTWFza0FuZEZsYWcgICAgICBIMzgwMF9BU0lDMl9PRkZTRVQoIHU4LCBJTlRSLCBNYXNrQW5kRmxhZyApCisjZGVmaW5lIEgzODAwX0FTSUMyX0lOVFJfQ2xvY2tQcmVzY2FsZSAgICBIMzgwMF9BU0lDMl9PRkZTRVQoIHU4LCBJTlRSLCBDbG9ja1ByZXNjYWxlICkKKyNkZWZpbmUgSDM4MDBfQVNJQzJfSU5UUl9UaW1lclNldCAgICAgICAgIEgzODAwX0FTSUMyX09GRlNFVCggdTgsIElOVFIsIFRpbWVyU2V0ICkKKworI2RlZmluZSBIMzgwMF9BU0lDMl9JTlRSX0dMT0JBTF9NQVNLICAgICAgICggMSA8PCAwICkgICAgLyogR2xvYmFsIGludGVycnVwdCBtYXNrICovCisjZGVmaW5lIEgzODAwX0FTSUMyX0lOVFJfUE9XRVJfT05fUkVTRVQgICAgKCAxIDw8IDEgKSAgICAvKiAwMTogUG93ZXIgb24gcmVzZXQgKGJpdHMgMSAmIDIgKSAqLworI2RlZmluZSBIMzgwMF9BU0lDMl9JTlRSX0VYVEVSTkFMX1JFU0VUICAgICggMiA8PCAxICkgICAgLyogMTA6IEV4dGVybmFsIHJlc2V0IChiaXRzIDEgJiAyICkgKi8KKyNkZWZpbmUgSDM4MDBfQVNJQzJfSU5UUl9NQVNLX1VBUlRfMCAgICAgICAoIDEgPDwgNCApCisjZGVmaW5lIEgzODAwX0FTSUMyX0lOVFJfTUFTS19VQVJUXzEgICAgICAgKCAxIDw8IDUgKQorI2RlZmluZSBIMzgwMF9BU0lDMl9JTlRSX01BU0tfVElNRVIgICAgICAgICggMSA8PCA2ICkKKyNkZWZpbmUgSDM4MDBfQVNJQzJfSU5UUl9NQVNLX09XTSAgICAgICAgICAoIDEgPDwgNyApCisKKyNkZWZpbmUgSDM4MDBfQVNJQzJfSU5UUl9DTE9DS19QUkVTQ0FMRSAgICAgICAgICAweDBmICAgIC8qIDQgYml0cywgbWF4IDE0ICovCisjZGVmaW5lIEgzODAwX0FTSUMyX0lOVFJfU0VUICAgICAgICAgICAgICAgKCAxIDw8IDQgKSAgICAvKiBUaW1lIGJhc2UgZW5hYmxlICovCisKKworI2RlZmluZSBfSDM4MDBfQVNJQzJfT1dNX0Jhc2UgICAgICAgICAgICAgICAgICAweDE4MDAKKyNkZWZpbmUgX0gzODAwX0FTSUMyX09XTV9Db21tYW5kICAgICAgICAgICAgICAgMHgwMDAwICAgIC8qIFIvVyA0IGJpdHMgY29tbWFuZCByZWdpc3RlciAqLworI2RlZmluZSBfSDM4MDBfQVNJQzJfT1dNX0RhdGEgICAgICAgICAgICAgICAgICAweDAwMDQgICAgLyogUi9XIDggYml0cywgdHJhbnNtaXQgLyByZWNlaXZlIGJ1ZmZlciAqLworI2RlZmluZSBfSDM4MDBfQVNJQzJfT1dNX0ludGVycnVwdCAgICAgICAgICAgICAweDAwMDggICAgLyogUi9XIENvbW1hbmQgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgX0gzODAwX0FTSUMyX09XTV9JbnRlcnJ1cHRFbmFibGUgICAgICAgMHgwMDBjICAgIC8qIFIvVyBDb21tYW5kIHJlZ2lzdGVyICovCisjZGVmaW5lIF9IMzgwMF9BU0lDMl9PV01fQ2xvY2tEaXZpc29yICAgICAgICAgIDB4MDAxMCAgICAvKiBSL1cgNSBiaXRzIG9mIGRpdmlzb3IgYW5kIHByZS1zY2FsZSAqLworCisjZGVmaW5lIEgzODAwX0FTSUMyX09XTV9Db21tYW5kICAgICAgICAgICAgSDM4MDBfQVNJQzJfT0ZGU0VUKCB1OCwgT1dNLCBDb21tYW5kICkKKyNkZWZpbmUgSDM4MDBfQVNJQzJfT1dNX0RhdGEgICAgICAgICAgICAgICBIMzgwMF9BU0lDMl9PRkZTRVQoIHU4LCBPV00sIERhdGEgKQorI2RlZmluZSBIMzgwMF9BU0lDMl9PV01fSW50ZXJydXB0ICAgICAgICAgIEgzODAwX0FTSUMyX09GRlNFVCggdTgsIE9XTSwgSW50ZXJydXB0ICkKKyNkZWZpbmUgSDM4MDBfQVNJQzJfT1dNX0ludGVycnVwdEVuYWJsZSAgICBIMzgwMF9BU0lDMl9PRkZTRVQoIHU4LCBPV00sIEludGVycnVwdEVuYWJsZSApCisjZGVmaW5lIEgzODAwX0FTSUMyX09XTV9DbG9ja0Rpdmlzb3IgICAgICAgSDM4MDBfQVNJQzJfT0ZGU0VUKCB1OCwgT1dNLCBDbG9ja0Rpdmlzb3IgKQorCisjZGVmaW5lIEgzODAwX0FTSUMyX09XTV9DTURfT05FX1dJUkVfUkVTRVQgKCAxIDw8IDAgKSAgICAvKiBTZXQgdG8gZm9yY2UgcmVzZXQgb24gMS13aXJlIGJ1cyAqLworI2RlZmluZSBIMzgwMF9BU0lDMl9PV01fQ01EX1NSQSAgICAgICAgICAgICggMSA8PCAxICkgICAgLyogU2V0IHRvIHN3aXRjaCB0byBTZWFyY2ggUk9NIGFjY2VsZXJhdG9yIG1vZGUgKi8KKyNkZWZpbmUgSDM4MDBfQVNJQzJfT1dNX0NNRF9EUV9PVVRQVVQgICAgICAoIDEgPDwgMiApICAgIC8qIFdyaXRlIG9ubHkgLSBmb3JjZXMgYnVzIGxvdyAqLworI2RlZmluZSBIMzgwMF9BU0lDMl9PV01fQ01EX0RRX0lOUFVUICAgICAgICggMSA8PCAzICkgICAgLyogUmVhZCBvbmx5IC0gcmVmbGVjdHMgc3RhdGUgb2YgYnVzICovCisKKyNkZWZpbmUgSDM4MDBfQVNJQzJfT1dNX0lOVF9QRCAgICAgICAgICAgICAoIDEgPDwgMCApICAgIC8qIFByZXNlbmNlIGRldGVjdCAqLworI2RlZmluZSBIMzgwMF9BU0lDMl9PV01fSU5UX1BEUiAgICAgICAgICAgICggMSA8PCAxICkgICAgLyogUHJlc2VuY2UgZGV0ZWN0IHJlc3VsdCAqLworI2RlZmluZSBIMzgwMF9BU0lDMl9PV01fSU5UX1RCRSAgICAgICAgICAgICggMSA8PCAyICkgICAgLyogVHJhbnNtaXQgYnVmZmVyIGVtcHR5ICovCisjZGVmaW5lIEgzODAwX0FTSUMyX09XTV9JTlRfVEVNVCAgICAgICAgICAgKCAxIDw8IDMgKSAgICAvKiBUcmFuc21pdCBzaGlmdCByZWdpc3RlciBlbXB0eSAqLworI2RlZmluZSBIMzgwMF9BU0lDMl9PV01fSU5UX1JCRiAgICAgICAgICAgICggMSA8PCA0ICkgICAgLyogUmVjZWl2ZSBidWZmZXIgZnVsbCAqLworCisjZGVmaW5lIEgzODAwX0FTSUMyX09XTV9JTlRFTl9FUEQgICAgICAgICAgKCAxIDw8IDAgKSAgICAvKiBFbmFibGUgcmVjZWl2ZSBidWZmZXIgZnVsbCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSDM4MDBfQVNJQzJfT1dNX0lOVEVOX0lBUyAgICAgICAgICAoIDEgPDwgMSApICAgIC8qIEVuYWJsZSB0cmFuc21pdCBzaGlmdCByZWdpc3RlciBlbXB0eSBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSDM4MDBfQVNJQzJfT1dNX0lOVEVOX0VUQkUgICAgICAgICAoIDEgPDwgMiApICAgIC8qIEVuYWJsZSB0cmFuc21pdCBidWZmZXIgZW1wdHkgaW50ZXJydXB0ICovCisjZGVmaW5lIEgzODAwX0FTSUMyX09XTV9JTlRFTl9FVE1UICAgICAgICAgKCAxIDw8IDMgKSAgICAvKiBJTlRSIGFjdGl2ZSBzdGF0ZSAqLworI2RlZmluZSBIMzgwMF9BU0lDMl9PV01fSU5URU5fRVJCRiAgICAgICAgICggMSA8PCA0ICkgICAgLyogRW5hYmxlIHByZXNlbmNlIGRldGVjdCBpbnRlcnJ1cHQgKi8KKworI2RlZmluZSBfSDM4MDBfQVNJQzJfRmxhc2hDdGxfQmFzZSAgICAgICAgICAgICAweDFBMDAKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBIMzgwMCwgQVNJQyAjMQorICogVGhpcyBBU0lDIGlzIGFjY2VzZWQgdGhyb3VnaCBBU0lDICMyLCBhbmQKKyAqIG1hcHBlZCBpbnRvIHRoZSAxYzAwIC0gMWYwMCByZWdpb24KKyAqLworCisjZGVmaW5lIEgzODAwX0FTSUMxX09GRlNFVChzLHgseSkgICBcCisgICAgICgqKCh2b2xhdGlsZSBzICopIChfSDM4MDBfQVNJQzJfQmFzZSArIF9IMzgwMF9BU0lDMV8gIyMgeCAjIyBfQmFzZSArIChfSDM4MDBfQVNJQzFfICMjIHggIyMgXyAjIyB5IDw8IDEpKSkpCisKKyNkZWZpbmUgX0gzODAwX0FTSUMxX01NQ19CYXNlICAgICAgICAgICAgIDB4MWMwMAorCisjZGVmaW5lIF9IMzgwMF9BU0lDMV9NTUNfU3RhcnRTdG9wQ2xvY2sgICAgIDB4MDAgICAgLyogUi9XIDhiaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX0gzODAwX0FTSUMxX01NQ19TdGF0dXMgICAgICAgICAgICAgMHgwMiAgICAvKiBSICAgU2VlIGJlbG93LCBkZWZhdWx0IDB4MDA0MCAgICAgICAgICAgICAqLworI2RlZmluZSBfSDM4MDBfQVNJQzFfTU1DX0Nsb2NrUmF0ZSAgICAgICAgICAweDA0ICAgIC8qIFIvVyA4Yml0LCBsb3cgMyBiaXRzIGFyZSBjbG9jayBkaXZpc29yICAgICovCisjZGVmaW5lIF9IMzgwMF9BU0lDMV9NTUNfU1BJUmVnaXN0ZXIgICAgICAgIDB4MDggICAgLyogUi9XIDhiaXQsIHNlZSBiZWxvdyAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX0gzODAwX0FTSUMxX01NQ19DbWREYXRhQ29udCAgICAgICAgMHgwYSAgICAvKiBSL1cgOGJpdCwgd3JpdGUgdG8gc3RhcnQgTU1DIGFkYXB0ZXIgICAgICAqLworI2RlZmluZSBfSDM4MDBfQVNJQzFfTU1DX1Jlc3BvbnNlVGltZW91dCAgICAweDBjICAgIC8qIFIvVyA4Yml0LCBjbG9ja3MgYmVmb3JlIHJlc3BvbnNlIHRpbWVvdXQgICovCisjZGVmaW5lIF9IMzgwMF9BU0lDMV9NTUNfUmVhZFRpbWVvdXQgICAgICAgIDB4MGUgICAgLyogUi9XIDE2Yml0LCBjbG9ja3MgYmVmb3JlIHJlY2VpdmVkIGRhdGEgdGltZW91dCAqLworI2RlZmluZSBfSDM4MDBfQVNJQzFfTU1DX0Jsb2NrTGVuZ3RoICAgICAgICAweDEwICAgIC8qIFIvVyAxMGJpdCAqLworI2RlZmluZSBfSDM4MDBfQVNJQzFfTU1DX051bU9mQmxvY2tzICAgICAgICAweDEyICAgIC8qIFIvVyAxNmJpdCwgaW4gYmxvY2sgbW9kZSwgbnVtYmVyIG9mIGJsb2NrcyAgKi8KKyNkZWZpbmUgX0gzODAwX0FTSUMxX01NQ19JbnRlcnJ1cHRNYXNrICAgICAgMHgxYSAgICAvKiBSL1cgOGJpdCAqLworI2RlZmluZSBfSDM4MDBfQVNJQzFfTU1DX0NvbW1hbmROdW1iZXIgICAgICAweDFjICAgIC8qIFIvVyA2IGJpdHMgKi8KKyNkZWZpbmUgX0gzODAwX0FTSUMxX01NQ19Bcmd1bWVudEggICAgICAgICAgMHgxZSAgICAvKiBSL1cgMTYgYml0cyAgKi8KKyNkZWZpbmUgX0gzODAwX0FTSUMxX01NQ19Bcmd1bWVudEwgICAgICAgICAgMHgyMCAgICAvKiBSL1cgMTYgYml0cyAqLworI2RlZmluZSBfSDM4MDBfQVNJQzFfTU1DX1Jlc0ZpZm8gICAgICAgICAgICAweDIyICAgIC8qIFIgICA4IHggMTYgYml0cyAtIGNvbnRhaW5zIHJlc3BvbnNlIEZJRk8gKi8KKyNkZWZpbmUgX0gzODAwX0FTSUMxX01NQ19CdWZmZXJQYXJ0RnVsbCAgICAgMHgyOCAgICAvKiBSL1cgOCBiaXRzICovCisKKyNkZWZpbmUgSDM4MDBfQVNJQzFfTU1DX1N0YXJ0U3RvcENsb2NrICAgIEgzODAwX0FTSUMxX09GRlNFVCggIHU4LCBNTUMsIFN0YXJ0U3RvcENsb2NrICkKKyNkZWZpbmUgSDM4MDBfQVNJQzFfTU1DX1N0YXR1cyAgICAgICAgICAgIEgzODAwX0FTSUMxX09GRlNFVCggdTE2LCBNTUMsIFN0YXR1cyApCisjZGVmaW5lIEgzODAwX0FTSUMxX01NQ19DbG9ja1JhdGUgICAgICAgICBIMzgwMF9BU0lDMV9PRkZTRVQoICB1OCwgTU1DLCBDbG9ja1JhdGUgKQorI2RlZmluZSBIMzgwMF9BU0lDMV9NTUNfU1BJUmVnaXN0ZXIgICAgICAgSDM4MDBfQVNJQzFfT0ZGU0VUKCAgdTgsIE1NQywgU1BJUmVnaXN0ZXIgKQorI2RlZmluZSBIMzgwMF9BU0lDMV9NTUNfQ21kRGF0YUNvbnQgICAgICAgSDM4MDBfQVNJQzFfT0ZGU0VUKCAgdTgsIE1NQywgQ21kRGF0YUNvbnQgKQorI2RlZmluZSBIMzgwMF9BU0lDMV9NTUNfUmVzcG9uc2VUaW1lb3V0ICAgSDM4MDBfQVNJQzFfT0ZGU0VUKCAgdTgsIE1NQywgUmVzcG9uc2VUaW1lb3V0ICkKKyNkZWZpbmUgSDM4MDBfQVNJQzFfTU1DX1JlYWRUaW1lb3V0ICAgICAgIEgzODAwX0FTSUMxX09GRlNFVCggdTE2LCBNTUMsIFJlYWRUaW1lb3V0ICkKKyNkZWZpbmUgSDM4MDBfQVNJQzFfTU1DX0Jsb2NrTGVuZ3RoICAgICAgIEgzODAwX0FTSUMxX09GRlNFVCggdTE2LCBNTUMsIEJsb2NrTGVuZ3RoICkKKyNkZWZpbmUgSDM4MDBfQVNJQzFfTU1DX051bU9mQmxvY2tzICAgICAgIEgzODAwX0FTSUMxX09GRlNFVCggdTE2LCBNTUMsIE51bU9mQmxvY2tzICkKKyNkZWZpbmUgSDM4MDBfQVNJQzFfTU1DX0ludGVycnVwdE1hc2sgICAgIEgzODAwX0FTSUMxX09GRlNFVCggIHU4LCBNTUMsIEludGVycnVwdE1hc2sgKQorI2RlZmluZSBIMzgwMF9BU0lDMV9NTUNfQ29tbWFuZE51bWJlciAgICAgSDM4MDBfQVNJQzFfT0ZGU0VUKCAgdTgsIE1NQywgQ29tbWFuZE51bWJlciApCisjZGVmaW5lIEgzODAwX0FTSUMxX01NQ19Bcmd1bWVudEggICAgICAgICBIMzgwMF9BU0lDMV9PRkZTRVQoIHUxNiwgTU1DLCBBcmd1bWVudEggKQorI2RlZmluZSBIMzgwMF9BU0lDMV9NTUNfQXJndW1lbnRMICAgICAgICAgSDM4MDBfQVNJQzFfT0ZGU0VUKCB1MTYsIE1NQywgQXJndW1lbnRMICkKKyNkZWZpbmUgSDM4MDBfQVNJQzFfTU1DX1Jlc0ZpZm8gICAgICAgICAgIEgzODAwX0FTSUMxX09GRlNFVCggdTE2LCBNTUMsIFJlc0ZpZm8gKQorI2RlZmluZSBIMzgwMF9BU0lDMV9NTUNfQnVmZmVyUGFydEZ1bGwgICAgSDM4MDBfQVNJQzFfT0ZGU0VUKCAgdTgsIE1NQywgQnVmZmVyUGFydEZ1bGwgKQorCisjZGVmaW5lIEgzODAwX0FTSUMxX01NQ19TVE9QX0NMT0NLICAgICAgICAgICAgICAgICAgICgxIDw8IDApICAgLyogV3JpdGUgdG8gIlN0YXJ0U3RvcENsb2NrIiByZWdpc3RlciAqLworI2RlZmluZSBIMzgwMF9BU0lDMV9NTUNfU1RBUlRfQ0xPQ0sgICAgICAgICAgICAgICAgICAoMSA8PCAxKQorCisjZGVmaW5lIEgzODAwX0FTSUMxX01NQ19TVEFUVVNfUkVBRF9USU1FT1VUICAgICAgICAgICgxIDw8IDApCisjZGVmaW5lIEgzODAwX0FTSUMxX01NQ19TVEFUVVNfUkVTUE9OU0VfVElNRU9VVCAgICAgICgxIDw8IDEpCisjZGVmaW5lIEgzODAwX0FTSUMxX01NQ19TVEFUVVNfQ1JDX1dSSVRFX0VSUk9SICAgICAgICgxIDw8IDIpCisjZGVmaW5lIEgzODAwX0FTSUMxX01NQ19TVEFUVVNfQ1JDX1JFQURfRVJST1IgICAgICAgICgxIDw8IDMpCisjZGVmaW5lIEgzODAwX0FTSUMxX01NQ19TVEFUVVNfU1BJX1JFQURfRVJST1IgICAgICAgICgxIDw8IDQpICAvKiBTUEkgZGF0YSB0b2tlbiBlcnJvciByZWNlaXZlZCAqLworI2RlZmluZSBIMzgwMF9BU0lDMV9NTUNfU1RBVFVTX0NSQ19SRVNQT05TRV9FUlJPUiAgICAoMSA8PCA1KQorI2RlZmluZSBIMzgwMF9BU0lDMV9NTUNfU1RBVFVTX0ZJRk9fRU1QVFkgICAgICAgICAgICAoMSA8PCA2KQorI2RlZmluZSBIMzgwMF9BU0lDMV9NTUNfU1RBVFVTX0ZJRk9fRlVMTCAgICAgICAgICAgICAoMSA8PCA3KQorI2RlZmluZSBIMzgwMF9BU0lDMV9NTUNfU1RBVFVTX0NMT0NLX0VOQUJMRSAgICAgICAgICAoMSA8PCA4KSAgLyogTXVsdGlNZWRpYUNhcmQgY2xvY2sgc3RvcHBlZCAqLworI2RlZmluZSBIMzgwMF9BU0lDMV9NTUNfU1RBVFVTX0RBVEFfVFJBTlNGRVJfRE9ORSAgICAoMSA8PCAxMSkgLyogV3JpdGUgb3BlcmF0aW9uLCBpbmRpY2F0ZXMgdHJhbnNmZXIgZmluaXNoZWQgKi8KKyNkZWZpbmUgSDM4MDBfQVNJQzFfTU1DX1NUQVRVU19FTkRfUFJPR1JBTSAgICAgICAgICAgKDEgPDwgMTIpIC8qIEVuZCB3cml0ZSBhbmQgcmVhZCBvcGVyYXRpb25zICovCisjZGVmaW5lIEgzODAwX0FTSUMxX01NQ19TVEFUVVNfRU5EX0NPTU1BTkRfUkVTUE9OU0UgICgxIDw8IDEzKSAvKiBFbmQgY29tbWFuZCByZXNwb25zZSAqLworCisjZGVmaW5lIEgzODAwX0FTSUMxX01NQ19TUElfUkVHX1NQSV9FTkFCTEUgICAgICAgICAgICgxIDw8IDApICAvKiBFbmFibGVzIFNQSSBtb2RlICovCisjZGVmaW5lIEgzODAwX0FTSUMxX01NQ19TUElfUkVHX0NSQ19PTiAgICAgICAgICAgICAgICgxIDw8IDEpICAvKiAxOnR1cm4gb24gQ1JDICAgICovCisjZGVmaW5lIEgzODAwX0FTSUMxX01NQ19TUElfUkVHX1NQSV9DU19FTkFCTEUgICAgICAgICgxIDw8IDIpICAvKiAxOnR1cm4gb24gU1BJIENTICovCisjZGVmaW5lIEgzODAwX0FTSUMxX01NQ19TUElfUkVHX0NTX0FERFJFU1NfTUFTSyAgICAgIDB4MzggICAgICAvKiBCaXRzIDMsNCw1IGFyZSB0aGUgU1BJIENTIHJlbGF0aXZlIGFkZHJlc3MgKi8KKworI2RlZmluZSBIMzgwMF9BU0lDMV9NTUNfQ01EX0RBVEFfQ09OVF9GT1JNQVRfTk9fUkVTUE9OU0UgIDB4MDAKKyNkZWZpbmUgSDM4MDBfQVNJQzFfTU1DX0NNRF9EQVRBX0NPTlRfRk9STUFUX1IxICAgICAgICAgICAweDAxCisjZGVmaW5lIEgzODAwX0FTSUMxX01NQ19DTURfREFUQV9DT05UX0ZPUk1BVF9SMiAgICAgICAgICAgMHgwMgorI2RlZmluZSBIMzgwMF9BU0lDMV9NTUNfQ01EX0RBVEFfQ09OVF9GT1JNQVRfUjMgICAgICAgICAgIDB4MDMKKyNkZWZpbmUgSDM4MDBfQVNJQzFfTU1DX0NNRF9EQVRBX0NPTlRfREFUQV9FTkFCTEUgICAgICAgICAoMSA8PCAyKSAgLyogVGhpcyBjb21tYW5kIGNvbnRhaW5zIGEgZGF0YSB0cmFuc2ZlciAqLworI2RlZmluZSBIMzgwMF9BU0lDMV9NTUNfQ01EX0RBVEFfQ09OVF9XUklURSAgICAgICAgICAgICAgICgxIDw8IDMpICAvKiBUaGlzIGRhdGEgdHJhbnNmZXIgaXMgYSB3cml0ZSAqLworI2RlZmluZSBIMzgwMF9BU0lDMV9NTUNfQ01EX0RBVEFfQ09OVF9TVFJFQU1fTU9ERSAgICAgICAgICgxIDw8IDQpICAvKiBUaGlzIGRhdGEgdHJhbnNmZXIgaXMgaW4gc3RyZWFtIG1vZGUgKi8KKyNkZWZpbmUgSDM4MDBfQVNJQzFfTU1DX0NNRF9EQVRBX0NPTlRfQlVTWV9CSVQgICAgICAgICAgICAoMSA8PCA1KSAgLyogQnVzeSBzaWduYWwgZXhwZWN0ZWQgYWZ0ZXIgY3VycmVudCBjbWQgKi8KKyNkZWZpbmUgSDM4MDBfQVNJQzFfTU1DX0NNRF9EQVRBX0NPTlRfSU5JVElBTElaRSAgICAgICAgICAoMSA8PCA2KSAgLyogRW5hYmxlcyB0aGUgODAgYml0cyBmb3IgaW5pdGlhbGl6aW5nIGNhcmQgKi8KKworI2RlZmluZSBIMzgwMF9BU0lDMV9NTUNfSU5UX01BU0tfREFUQV9UUkFOU0ZFUl9ET05FICAgICAgICgxIDw8IDApCisjZGVmaW5lIEgzODAwX0FTSUMxX01NQ19JTlRfTUFTS19QUk9HUkFNX0RPTkUgICAgICAgICAgICAgKDEgPDwgMSkKKyNkZWZpbmUgSDM4MDBfQVNJQzFfTU1DX0lOVF9NQVNLX0VORF9DT01NQU5EX1JFU1BPTlNFICAgICAoMSA8PCAyKQorI2RlZmluZSBIMzgwMF9BU0lDMV9NTUNfSU5UX01BU0tfQlVGRkVSX1JFQURZICAgICAgICAgICAgICgxIDw8IDMpCisKKyNkZWZpbmUgSDM4MDBfQVNJQzFfTU1DX0JVRkZFUl9QQVJUX0ZVTEwgICAgICAgICAgICAgICAgICAoMSA8PCAwKQorCisvKioqKioqKioqIEdQSU8gKioqKioqKioqKi8KKworI2RlZmluZSBfSDM4MDBfQVNJQzFfR1BJT19CYXNlICAgICAgICAweDFlMDAKKworI2RlZmluZSBfSDM4MDBfQVNJQzFfR1BJT19NYXNrICAgICAgICAgIDB4MzAgICAgLyogUi9XIDA6ZG9uJ3QgbWFzaywgMTptYXNrIGludGVycnVwdCAqLworI2RlZmluZSBfSDM4MDBfQVNJQzFfR1BJT19EaXJlY3Rpb24gICAgIDB4MzIgICAgLyogUi9XIDA6aW5wdXQsIDE6b3V0cHV0ICAgICAgICAgICAgICAqLworI2RlZmluZSBfSDM4MDBfQVNJQzFfR1BJT19PdXQgICAgICAgICAgIDB4MzQgICAgLyogUi9XIDA6b3V0cHV0IGxvdywgMTpvdXRwdXQgaGlnaCAgICAqLworI2RlZmluZSBfSDM4MDBfQVNJQzFfR1BJT19UcmlnZ2VyVHlwZSAgIDB4MzYgICAgLyogUi9XIDA6bGV2ZWwsIDE6ZWRnZSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfSDM4MDBfQVNJQzFfR1BJT19FZGdlVHJpZ2dlciAgIDB4MzggICAgLyogUi9XIDA6ZmFsbGluZywgMTpyaXNpbmcgICAgICAgICAgICAqLworI2RlZmluZSBfSDM4MDBfQVNJQzFfR1BJT19MZXZlbFRyaWdnZXIgIDB4M0EgICAgLyogUi9XIDA6bG93LCAxOmhpZ2ggbGV2ZWwgZGV0ZWN0ICAgICAqLworI2RlZmluZSBfSDM4MDBfQVNJQzFfR1BJT19MZXZlbFN0YXR1cyAgIDB4M0MgICAgLyogUi9XIDA6bm9uZSwgMTpkZXRlY3QgICAgICAgICAgICAgICAqLworI2RlZmluZSBfSDM4MDBfQVNJQzFfR1BJT19FZGdlU3RhdHVzICAgIDB4M0UgICAgLyogUi9XIDA6bm9uZSwgMTpkZXRlY3QgICAgICAgICAgICAgICAqLworI2RlZmluZSBfSDM4MDBfQVNJQzFfR1BJT19TdGF0ZSAgICAgICAgIDB4NDAgICAgLyogUiAgIFNlZSBtYXNrcyBiZWxvdyAgKGRlZmF1bHQgMCkgICAgICAgICAqLworI2RlZmluZSBfSDM4MDBfQVNJQzFfR1BJT19SZXNldCAgICAgICAgIDB4NDIgICAgLyogUi9XIFNlZSBtYXNrcyBiZWxvdyAgKGRlZmF1bHQgMHgwNCkgICAgICAqLworI2RlZmluZSBfSDM4MDBfQVNJQzFfR1BJT19TbGVlcE1hc2sgICAgIDB4NDQgICAgLyogUi9XIDA6ZG9uJ3QgbWFzaywgMTptYXNrIHRyaWdnZXIgaW4gc2xlZXAgbW9kZSAgKi8KKyNkZWZpbmUgX0gzODAwX0FTSUMxX0dQSU9fU2xlZXBEaXIgICAgICAweDQ2ICAgIC8qIFIvVyBkaXJlY3Rpb24gMDppbnB1dCwgMTpvdXRwdXQgaW4gc2xlZXAgbW9kZSAgICAqLworI2RlZmluZSBfSDM4MDBfQVNJQzFfR1BJT19TbGVlcE91dCAgICAgIDB4NDggICAgLyogUi9XIGxldmVsIDA6bG93LCAxOmhpZ2ggaW4gc2xlZXAgbW9kZSAgICAgICAgICAgKi8KKyNkZWZpbmUgX0gzODAwX0FTSUMxX0dQSU9fU3RhdHVzICAgICAgICAweDRBICAgIC8qIFIgICBQaW4gc3RhdHVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9IMzgwMF9BU0lDMV9HUElPX0JhdHRGYXVsdERpciAgMHg0QyAgICAvKiBSL1cgZGlyZWN0aW9uIDA6aW5wdXQsIDE6b3V0cHV0IGluIGJhdHRfZmF1bHQgICAqLworI2RlZmluZSBfSDM4MDBfQVNJQzFfR1BJT19CYXR0RmF1bHRPdXQgIDB4NEUgICAgLyogUi9XIGxldmVsIDA6bG93LCAxOmhpZ2ggaW4gYmF0dF9mYXVsdCAgICAgICAgICAgKi8KKworI2RlZmluZSBIMzgwMF9BU0lDMV9HUElPX01hc2sgICAgICAgICBIMzgwMF9BU0lDMV9PRkZTRVQoIHUxNiwgR1BJTywgTWFzayApCisjZGVmaW5lIEgzODAwX0FTSUMxX0dQSU9fRGlyZWN0aW9uICAgIEgzODAwX0FTSUMxX09GRlNFVCggdTE2LCBHUElPLCBEaXJlY3Rpb24gKQorI2RlZmluZSBIMzgwMF9BU0lDMV9HUElPX091dCAgICAgICAgICBIMzgwMF9BU0lDMV9PRkZTRVQoIHUxNiwgR1BJTywgT3V0ICkKKyNkZWZpbmUgSDM4MDBfQVNJQzFfR1BJT19UcmlnZ2VyVHlwZSAgSDM4MDBfQVNJQzFfT0ZGU0VUKCB1MTYsIEdQSU8sIFRyaWdnZXJUeXBlICkKKyNkZWZpbmUgSDM4MDBfQVNJQzFfR1BJT19FZGdlVHJpZ2dlciAgSDM4MDBfQVNJQzFfT0ZGU0VUKCB1MTYsIEdQSU8sIEVkZ2VUcmlnZ2VyICkKKyNkZWZpbmUgSDM4MDBfQVNJQzFfR1BJT19MZXZlbFRyaWdnZXIgSDM4MDBfQVNJQzFfT0ZGU0VUKCB1MTYsIEdQSU8sIExldmVsVHJpZ2dlciApCisjZGVmaW5lIEgzODAwX0FTSUMxX0dQSU9fTGV2ZWxTdGF0dXMgIEgzODAwX0FTSUMxX09GRlNFVCggdTE2LCBHUElPLCBMZXZlbFN0YXR1cyApCisjZGVmaW5lIEgzODAwX0FTSUMxX0dQSU9fRWRnZVN0YXR1cyAgIEgzODAwX0FTSUMxX09GRlNFVCggdTE2LCBHUElPLCBFZGdlU3RhdHVzICkKKyNkZWZpbmUgSDM4MDBfQVNJQzFfR1BJT19TdGF0ZSAgICAgICAgSDM4MDBfQVNJQzFfT0ZGU0VUKCAgdTgsIEdQSU8sIFN0YXRlICkKKyNkZWZpbmUgSDM4MDBfQVNJQzFfR1BJT19SZXNldCAgICAgICAgSDM4MDBfQVNJQzFfT0ZGU0VUKCAgdTgsIEdQSU8sIFJlc2V0ICkKKyNkZWZpbmUgSDM4MDBfQVNJQzFfR1BJT19TbGVlcE1hc2sgICAgSDM4MDBfQVNJQzFfT0ZGU0VUKCB1MTYsIEdQSU8sIFNsZWVwTWFzayApCisjZGVmaW5lIEgzODAwX0FTSUMxX0dQSU9fU2xlZXBEaXIgICAgIEgzODAwX0FTSUMxX09GRlNFVCggdTE2LCBHUElPLCBTbGVlcERpciApCisjZGVmaW5lIEgzODAwX0FTSUMxX0dQSU9fU2xlZXBPdXQgICAgIEgzODAwX0FTSUMxX09GRlNFVCggdTE2LCBHUElPLCBTbGVlcE91dCApCisjZGVmaW5lIEgzODAwX0FTSUMxX0dQSU9fU3RhdHVzICAgICAgIEgzODAwX0FTSUMxX09GRlNFVCggdTE2LCBHUElPLCBTdGF0dXMgKQorI2RlZmluZSBIMzgwMF9BU0lDMV9HUElPX0JhdHRGYXVsdERpciBIMzgwMF9BU0lDMV9PRkZTRVQoIHUxNiwgR1BJTywgQmF0dEZhdWx0RGlyICkKKyNkZWZpbmUgSDM4MDBfQVNJQzFfR1BJT19CYXR0RmF1bHRPdXQgSDM4MDBfQVNJQzFfT0ZGU0VUKCB1MTYsIEdQSU8sIEJhdHRGYXVsdE91dCApCisKKyNkZWZpbmUgSDM4MDBfQVNJQzFfR1BJT19TVEFURV9NQVNLICAgICAgICAgICAgKDEgPDwgMCkKKyNkZWZpbmUgSDM4MDBfQVNJQzFfR1BJT19TVEFURV9ESVJFQ1RJT04gICAgICAgKDEgPDwgMSkKKyNkZWZpbmUgSDM4MDBfQVNJQzFfR1BJT19TVEFURV9PVVQgICAgICAgICAgICAgKDEgPDwgMikKKyNkZWZpbmUgSDM4MDBfQVNJQzFfR1BJT19TVEFURV9UUklHR0VSX1RZUEUgICAgKDEgPDwgMykKKyNkZWZpbmUgSDM4MDBfQVNJQzFfR1BJT19TVEFURV9FREdFX1RSSUdHRVIgICAgKDEgPDwgNCkKKyNkZWZpbmUgSDM4MDBfQVNJQzFfR1BJT19TVEFURV9MRVZFTF9UUklHR0VSICAgKDEgPDwgNSkKKworI2RlZmluZSBIMzgwMF9BU0lDMV9HUElPX1JFU0VUX1NPRlRXQVJFICAgICAgICAoMSA8PCAwKQorI2RlZmluZSBIMzgwMF9BU0lDMV9HUElPX1JFU0VUX0FVVE9fU0xFRVAgICAgICAoMSA8PCAxKQorI2RlZmluZSBIMzgwMF9BU0lDMV9HUElPX1JFU0VUX0ZJUlNUX1BXUl9PTiAgICAoMSA8PCAyKQorCisvKiBUaGVzZSBhcmUgYWxsIG91dHB1dHMgKi8KKyNkZWZpbmUgR1BJT19IMzgwMF9BU0lDMV9JUl9PTl9OICAgICAgICAgICgxIDw8IDApICAgLyogQXBwbHkgcG93ZXIgdG8gdGhlIElSIE1vZHVsZSAqLworI2RlZmluZSBHUElPX0gzODAwX0FTSUMxX1NEX1BXUl9PTiAgICAgICAgKDEgPDwgMSkgICAvKiBTZWN1cmUgRGlnaXRhbCBwb3dlciBvbiAqLworI2RlZmluZSBHUElPX0gzODAwX0FTSUMxX1JTMjMyX09OICAgICAgICAgKDEgPDwgMikgICAvKiBUdXJuIG9uIHBvd2VyIHRvIHRoZSBSUzIzMiBjaGlwID8gKi8KKyNkZWZpbmUgR1BJT19IMzgwMF9BU0lDMV9QVUxTRV9HRU4gICAgICAgICgxIDw8IDMpICAgLyogR29lcyB0byBzcGVha2VyIC8gZWFycGhvbmUgKi8KKyNkZWZpbmUgR1BJT19IMzgwMF9BU0lDMV9DSF9USU1FUiAgICAgICAgICgxIDw8IDQpICAgLyogKi8KKyNkZWZpbmUgR1BJT19IMzgwMF9BU0lDMV9MQ0RfNVZfT04gICAgICAgICgxIDw8IDUpICAgLyogRW5hYmxlcyBMQ0RfNVYgKi8KKyNkZWZpbmUgR1BJT19IMzgwMF9BU0lDMV9MQ0RfT04gICAgICAgICAgICgxIDw8IDYpICAgLyogRW5hYmxlcyBMQ0RfM1YgKi8KKyNkZWZpbmUgR1BJT19IMzgwMF9BU0lDMV9MQ0RfUENJICAgICAgICAgICgxIDw8IDcpICAgLyogQ29ubmVjdHMgdG8gUERXTiBvbiBMQ0QgY29udHJvbGxlciAqLworI2RlZmluZSBHUElPX0gzODAwX0FTSUMxX1ZHSF9PTiAgICAgICAgICAgKDEgPDwgOCkgICAvKiBEcml2ZXMgVkdIIG9uIHRoZSBMQ0QgKCs5Pz8pICovCisjZGVmaW5lIEdQSU9fSDM4MDBfQVNJQzFfVkdMX09OICAgICAgICAgICAoMSA8PCA5KSAgIC8qIERyaXZlcnMgVkdMIG9uIHRoZSBMQ0QgKC02Pz8pICovCisjZGVmaW5lIEdQSU9fSDM4MDBfQVNJQzFfRkxfUFdSX09OICAgICAgICAoMSA8PCAxMCkgIC8qIEZyb250bGlnaHQgcG93ZXIgb24gKi8KKyNkZWZpbmUgR1BJT19IMzgwMF9BU0lDMV9CVF9QV1JfT04gICAgICAgICgxIDw8IDExKSAgLyogQmx1ZXRvb3RoIHBvd2VyIG9uICovCisjZGVmaW5lIEdQSU9fSDM4MDBfQVNJQzFfU1BLX09OICAgICAgICAgICAoMSA8PCAxMikgIC8qICovCisjZGVmaW5lIEdQSU9fSDM4MDBfQVNJQzFfRUFSX09OX04gICAgICAgICAoMSA8PCAxMykgIC8qICovCisjZGVmaW5lIEdQSU9fSDM4MDBfQVNJQzFfQVVEX1BXUl9PTiAgICAgICAoMSA8PCAxNCkgIC8qICovCisKKy8qIFdyaXRlIGVuYWJsZSBmb3IgdGhlIGZsYXNoICovCisKKyNkZWZpbmUgX0gzODAwX0FTSUMxX0ZsYXNoV1BfQmFzZSAgICAgICAgIDB4MUYwMAorI2RlZmluZSBfSDM4MDBfQVNJQzFfRmxhc2hXUF9WUFBfT04gICAgICAgICAweDAwICAgIC8qIFIgICAxOiB3cml0ZSwgMDogcHJvdGVjdCAqLworI2RlZmluZSBIMzgwMF9BU0lDMV9GbGFzaFdQX1ZQUF9PTiAgICAgICBIMzgwMF9BU0lDMV9PRkZTRVQoIHU4LCBGbGFzaFdQLCBWUFBfT04gKQorCisjZW5kaWYgLyogX0lOQ0xVREVfSDM2MDBfR1BJT19IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL2hhcmR3YXJlLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvaGFyZHdhcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGM2MmRiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL2hhcmR3YXJlLmgKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9oYXJkd2FyZS5oCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IE5pY29sYXMgUGl0cmUgPG5pY29AY2FtLm9yZz4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGhhcmR3YXJlIGRlZmluaXRpb25zIGZvciBTQTExMDAgYXJjaGl0ZWN0dXJlCisgKgorICogMjAwMC8wNS8yMyBKb2huIERvcnNleSA8am9obitAY3MuY211LmVkdT4KKyAqICAgICAgRGVmaW5pdGlvbnMgZm9yIFNBMTExMSBhZGRlZC4KKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfSEFSRFdBUkVfSAorI2RlZmluZSBfX0FTTV9BUkNIX0hBUkRXQVJFX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisvKiBGbHVzaGluZyBhcmVhcyAqLworI2RlZmluZSBGTFVTSF9CQVNFX1BIWVMJCTB4ZTAwMDAwMDAJLyogU0ExMTAwIHplcm8gYmFuayAqLworI2RlZmluZSBGTFVTSF9CQVNFCQkweGY1MDAwMDAwCisjZGVmaW5lIEZMVVNIX0JBU0VfTUlOSUNBQ0hFCTB4ZjU4MDAwMDAKKyNkZWZpbmUgVU5DQUNIRUFCTEVfQUREUgkweGZhMDUwMDAwCisKKworLyoKKyAqIFdlIHJlcXVpcmVzIGFic29sdXRlIGFkZHJlc3NlcyBpLmUuIChQQ01DSUFfSU9fMF9CQVNFICsgMHgzZjgpIGZvciAKKyAqIGluKigpL291dCooKSBtYWNyb3MgdG8gYmUgdXNhYmxlIGZvciBhbGwgY2FzZXMuCisgKi8KKyNkZWZpbmUgUENJT19CQVNFCQkwCisKKworLyoKKyAqIFNBMTEwMCBpbnRlcm5hbCBJL08gbWFwcGluZ3MKKyAqCisgKiBXZSBoYXZlIHRoZSBmb2xsb3dpbmcgbWFwcGluZzoKKyAqICAgICAgcGh5cyAgICAgICAgICAgIHZpcnQKKyAqICAgICAgODAwMDAwMDAgICAgICAgIGY4MDAwMDAwCisgKiAgICAgIDkwMDAwMDAwICAgICAgICBmYTAwMDAwMAorICogICAgICBhMDAwMDAwMCAgICAgICAgZmMwMDAwMDAKKyAqICAgICAgYjAwMDAwMDAgICAgICAgIGZlMDAwMDAwCisgKi8KKworI2RlZmluZSBWSU9fQkFTRSAgICAgICAgMHhmODAwMDAwMAkvKiB2aXJ0dWFsIHN0YXJ0IG9mIElPIHNwYWNlICovCisjZGVmaW5lIFZJT19TSElGVCAgICAgICAzCQkvKiB4ID0gSU8gc3BhY2Ugc2hyaW5rIHBvd2VyICovCisjZGVmaW5lIFBJT19TVEFSVCAgICAgICAweDgwMDAwMDAwCS8qIHBoeXNpY2FsIHN0YXJ0IG9mIElPIHNwYWNlICovCisKKyNkZWZpbmUgaW9fcDJ2KCB4ICkgICAgICAgICAgICAgXAorICAgKCAoKCh4KSYweDAwZmZmZmZmKSB8ICgoKHgpJjB4MzAwMDAwMDApPj5WSU9fU0hJRlQpKSArIFZJT19CQVNFICkKKyNkZWZpbmUgaW9fdjJwKCB4ICkgICAgICAgICAgICAgXAorICAgKCAoKCh4KSYweDAwZmZmZmZmKSB8ICgoKHgpJigweDMwMDAwMDAwPj5WSU9fU0hJRlQpKTw8VklPX1NISUZUKSkgKyBQSU9fU1RBUlQgKQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCisjaWYgMAorIyBkZWZpbmUgX19SRUcoeCkJKCooKHZvbGF0aWxlIHUzMiAqKWlvX3Aydih4KSkpCisjZWxzZQorLyoKKyAqIFRoaXMgX19SRUcoKSB2ZXJzaW9uIGdpdmVzIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIG9uZSBhYm92ZSwgIGV4Y2VwdAorICogdGhhdCB3ZSBhcmUgZm9vbGluZyBnY2Mgc29tZWhvdyBzbyBpdCBnZW5lcmF0ZXMgZmFyIGJldHRlciBhbmQgc21hbGxlcgorICogYXNzZW1ibHkgY29kZSBmb3IgYWNjZXNzIHRvIGNvbnRpZ291cyByZWdpc3RlcnMuICBJdCdzIGEgc2hhbWUgdGhhdCBnY2MKKyAqIGRvZXNuJ3QgZ3Vlc3MgdGhpcyBieSBpdHNlbGYuCisgKi8KK3R5cGVkZWYgc3RydWN0IHsgdm9sYXRpbGUgdTMyIG9mZnNldFs0MDk2XTsgfSBfX3JlZ2Jhc2U7CisjIGRlZmluZSBfX1JFR1AoeCkJKChfX3JlZ2Jhc2UgKikoKHgpJn40MDk1KSktPm9mZnNldFsoKHgpJjQwOTUpPj4yXQorIyBkZWZpbmUgX19SRUcoeCkJX19SRUdQKGlvX3Aydih4KSkKKyNlbmRpZgorCisjIGRlZmluZSBfX1BSRUcoeCkJKGlvX3YycCgodTMyKSYoeCkpKQorCisjZWxzZQorCisjIGRlZmluZSBfX1JFRyh4KQlpb19wMnYoeCkKKyMgZGVmaW5lIF9fUFJFRyh4KQlpb192MnAoeCkKKworI2VuZGlmCisKKyNpbmNsdWRlICJTQS0xMTAwLmgiCisKKyNpZmRlZiBDT05GSUdfU0ExMTAxCisjaW5jbHVkZSAiU0EtMTEwMS5oIgorI2VuZGlmCisKKyNlbmRpZiAgLyogX0FTTV9BUkNIX0hBUkRXQVJFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9pZGUuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9pZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTUzNTM4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL2lkZS5oCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvaWRlLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTggSHVnbyBGaWVubmVzICYgTmljb2xhcyBQaXRyZQorICoKKyAqIDE4LWF1Zy0yMDAwOiBDbGVhbnVwIGJ5IEVyaWsgTW91dyAoSi5BLksuTW91d0BpdHMudHVkZWxmdC5ubCkKKyAqICAgICAgICAgICAgICBHZXQgcmlkIG9mIHRoZSBzcGVjaWFsIGlkZV9pbml0X2h3aWZfcG9ydHMoKSBmdW5jdGlvbnMKKyAqICAgICAgICAgICAgICBhbmQgbWFrZSBhIGdlbmVyYWxpc2VkIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWQgYnkgYWxsCisgKiAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlcy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKKyNlcnJvciAiVGhpcyBjb2RlIGlzIGJyb2tlbiBhbmQgbmVlZHMgdXBkYXRlIHRvIG1hdGNoIHdpdGggY3VycmVudCBpZGUgc3VwcG9ydCIKKworCisvKgorICogU2V0IHVwIGEgaHcgc3RydWN0dXJlIGZvciBhIHNwZWNpZmllZCBkYXRhIHBvcnQsIGNvbnRyb2wgcG9ydCBhbmQgSVJRLgorICogVGhpcyBzaG91bGQgZm9sbG93IHdoYXRldmVyIHRoZSBkZWZhdWx0IGludGVyZmFjZSB1c2VzLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaWRlX2luaXRfaHdpZl9wb3J0cyhod19yZWdzX3QgKmh3LCB1bnNpZ25lZCBsb25nIGRhdGFfcG9ydCwKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBjdHJsX3BvcnQsIGludCAqaXJxKQoreworCXVuc2lnbmVkIGxvbmcgcmVnID0gZGF0YV9wb3J0OworCWludCBpOworCWludCByZWdpbmNyID0gMTsKKworCS8qIFRoZSBFbXBlZyBib2FyZCBoYXMgdGhlIGZpcnN0IHR3byBhZGRyZXNzIGxpbmVzIHVudXNlZCAqLworCWlmIChtYWNoaW5lX2lzX2VtcGVnKCkpCisJCXJlZ2luY3IgPSAxIDw8IDI7CisKKwkvKiBUaGUgTEFSVCBkb2Vzbid0IHVzZSBBMCBmb3IgSURFICovCisJaWYgKG1hY2hpbmVfaXNfbGFydCgpKQorCQlyZWdpbmNyID0gMSA8PCAxOworCisJbWVtc2V0KGh3LCAwLCBzaXplb2YoKmh3KSk7CisKKwlmb3IgKGkgPSBJREVfREFUQV9PRkZTRVQ7IGkgPD0gSURFX1NUQVRVU19PRkZTRVQ7IGkrKykgeworCQlody0+aW9fcG9ydHNbaV0gPSByZWc7CisJCXJlZyArPSByZWdpbmNyOworCX0KKworCWh3LT5pb19wb3J0c1tJREVfQ09OVFJPTF9PRkZTRVRdID0gY3RybF9wb3J0OworCisJaWYgKGlycSkKKwkJKmlycSA9IDA7Cit9CisKKy8qCisgKiBUaGlzIHJlZ2lzdGVycyB0aGUgc3RhbmRhcmQgcG9ydHMgZm9yIHRoaXMgYXJjaGl0ZWN0dXJlIHdpdGggdGhlIElERQorICogZHJpdmVyLgorICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkCitpZGVfaW5pdF9kZWZhdWx0X2h3aWZzKHZvaWQpCit7CisgICAgaWYgKG1hY2hpbmVfaXNfbGFydCgpKSB7CisjaWZkZWYgQ09ORklHX1NBMTEwMF9MQVJUCisgICAgICAgIGh3X3JlZ3NfdCBodzsKKworICAgICAgICAvKiBFbmFibGUgR1BJTyBhcyBpbnRlcnJ1cHQgbGluZSAqLworICAgICAgICBHUERSICY9IH5MQVJUX0dQSU9fSURFOworCXNldF9pcnFfdHlwZShMQVJUX0lSUV9JREUsIElSUVRfUklTSU5HKTsKKworICAgICAgICAvKiBzZXQgUENNQ0lBIGludGVyZmFjZSB0aW1pbmcgKi8KKyAgICAgICAgTUVDUiA9IDB4MDAwNjAwMDY7CisKKyAgICAgICAgLyogaW5pdCB0aGUgaW50ZXJmYWNlICovCisJaWRlX2luaXRfaHdpZl9wb3J0cygmaHcsIFBDTUNJQV9JT18wX0JBU0UgKyAweDAwMDAsIFBDTUNJQV9JT18wX0JBU0UgKyAweDEwMDAsIE5VTEwpOworICAgICAgICBody5pcnEgPSBMQVJUX0lSUV9JREU7CisgICAgICAgIGlkZV9yZWdpc3Rlcl9odygmaHcpOworI2VuZGlmCisgICAgfQorfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL2lvLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDk2OWZmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL2lvLmgKQEAgLTAsMCArMSwyMyBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9pby5oCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk3LTE5OTkgUnVzc2VsbCBLaW5nCisgKgorICogTW9kaWZpY2F0aW9uczoKKyAqICAwNi0xMi0xOTk3CVJNSwlDcmVhdGVkLgorICogIDA3LTA0LTE5OTkJUk1LCU1ham9yIGNsZWFudXAKKyAqLworI2lmbmRlZiBfX0FTTV9BUk1fQVJDSF9JT19ICisjZGVmaW5lIF9fQVNNX0FSTV9BUkNIX0lPX0gKKworI2RlZmluZSBJT19TUEFDRV9MSU1JVCAweGZmZmZmZmZmCisKKy8qCisgKiBXZSBkb24ndCBhY3R1YWxseSBoYXZlIHJlYWwgSVNBIG5vciBQQ0kgYnVzZXMsIGJ1dCB0aGVyZSBpcyBzbyBtYW55IAorICogZHJpdmVycyBvdXQgdGhlcmUgdGhhdCBtaWdodCBqdXN0IHdvcmsgaWYgd2UgZmFrZSB0aGVtLi4uCisgKi8KKyNkZWZpbmUgX19pbyhhKQkJCSgodm9pZCBfX2lvbWVtICopKFBDSU9fQkFTRSArIChhKSkpCisjZGVmaW5lIF9fbWVtX3BjaShhKQkJKGEpCisjZGVmaW5lIF9fbWVtX2lzYShhKQkJKGEpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL2lycXMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9pcnFzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFiZDNiZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9pcnFzLmgKQEAgLTAsMCArMSwxOTggQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvaXJxcy5oCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk2IFJ1c3NlbGwgS2luZworICogQ29weXJpZ2h0IChDKSAxOTk4IERlYm9yYWggV2FsbGFjaCAodXBkYXRlcyBmb3IgU0ExMTAwL0JydXR1cykuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTmljb2xhcyBQaXRyZSAoZnVsbCBHUElPIGlycSBpc29sYXRpb24pCisgKgorICogMjAwMS8xMS8xNAlSTUsJQ2xlYW5lZCB1cCBhbmQgc3RhbmRhcmRpc2VkIGEgbG90IG9mIHRoZSBJUlFzLgorICovCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNkZWZpbmUJSVJRX0dQSU8wCQkwCisjZGVmaW5lCUlSUV9HUElPMQkJMQorI2RlZmluZQlJUlFfR1BJTzIJCTIKKyNkZWZpbmUJSVJRX0dQSU8zCQkzCisjZGVmaW5lCUlSUV9HUElPNAkJNAorI2RlZmluZQlJUlFfR1BJTzUJCTUKKyNkZWZpbmUJSVJRX0dQSU82CQk2CisjZGVmaW5lCUlSUV9HUElPNwkJNworI2RlZmluZQlJUlFfR1BJTzgJCTgKKyNkZWZpbmUJSVJRX0dQSU85CQk5CisjZGVmaW5lCUlSUV9HUElPMTAJCTEwCisjZGVmaW5lCUlSUV9HUElPMTFfMjcJCTExCisjZGVmaW5lCUlSUV9MQ0QgIAkJMTIJLyogTENEIGNvbnRyb2xsZXIgICAgICAgICAgICovCisjZGVmaW5lCUlSUV9TZXIwVURDCQkxMwkvKiBTZXIuIHBvcnQgMCBVREMgICAgICAgICAgKi8KKyNkZWZpbmUJSVJRX1NlcjFTRExDCQkxNAkvKiBTZXIuIHBvcnQgMSBTRExDICAgICAgICAgKi8KKyNkZWZpbmUJSVJRX1NlcjFVQVJUCQkxNQkvKiBTZXIuIHBvcnQgMSBVQVJUICAgICAgICAgKi8KKyNkZWZpbmUJSVJRX1NlcjJJQ1AJCTE2CS8qIFNlci4gcG9ydCAyIElDUCAgICAgICAgICAqLworI2RlZmluZQlJUlFfU2VyM1VBUlQJCTE3CS8qIFNlci4gcG9ydCAzIFVBUlQgICAgICAgICAqLworI2RlZmluZQlJUlFfU2VyNE1DUAkJMTgJLyogU2VyLiBwb3J0IDQgTUNQICAgICAgICAgICovCisjZGVmaW5lCUlSUV9TZXI0U1NQCQkxOQkvKiBTZXIuIHBvcnQgNCBTU1AgICAgICAgICAgKi8KKyNkZWZpbmUJSVJRX0RNQTAgCQkyMAkvKiBETUEgY29udHJvbGxlciBjaGFubmVsIDAgKi8KKyNkZWZpbmUJSVJRX0RNQTEgCQkyMQkvKiBETUEgY29udHJvbGxlciBjaGFubmVsIDEgKi8KKyNkZWZpbmUJSVJRX0RNQTIgCQkyMgkvKiBETUEgY29udHJvbGxlciBjaGFubmVsIDIgKi8KKyNkZWZpbmUJSVJRX0RNQTMgCQkyMwkvKiBETUEgY29udHJvbGxlciBjaGFubmVsIDMgKi8KKyNkZWZpbmUJSVJRX0RNQTQgCQkyNAkvKiBETUEgY29udHJvbGxlciBjaGFubmVsIDQgKi8KKyNkZWZpbmUJSVJRX0RNQTUgCQkyNQkvKiBETUEgY29udHJvbGxlciBjaGFubmVsIDUgKi8KKyNkZWZpbmUJSVJRX09TVDAgCQkyNgkvKiBPUyBUaW1lciBtYXRjaCAwICAgICAgICAgKi8KKyNkZWZpbmUJSVJRX09TVDEgCQkyNwkvKiBPUyBUaW1lciBtYXRjaCAxICAgICAgICAgKi8KKyNkZWZpbmUJSVJRX09TVDIgCQkyOAkvKiBPUyBUaW1lciBtYXRjaCAyICAgICAgICAgKi8KKyNkZWZpbmUJSVJRX09TVDMgCQkyOQkvKiBPUyBUaW1lciBtYXRjaCAzICAgICAgICAgKi8KKyNkZWZpbmUJSVJRX1JUQzFIegkJMzAJLyogUlRDIDEgSHogY2xvY2sgICAgICAgICAgICovCisjZGVmaW5lCUlSUV9SVENBbHJtCQkzMQkvKiBSVEMgQWxhcm0gICAgICAgICAgICAgICAgKi8KKworI2RlZmluZQlJUlFfR1BJTzExCQkzMgorI2RlZmluZQlJUlFfR1BJTzEyCQkzMworI2RlZmluZQlJUlFfR1BJTzEzCQkzNAorI2RlZmluZQlJUlFfR1BJTzE0CQkzNQorI2RlZmluZQlJUlFfR1BJTzE1CQkzNgorI2RlZmluZQlJUlFfR1BJTzE2CQkzNworI2RlZmluZQlJUlFfR1BJTzE3CQkzOAorI2RlZmluZQlJUlFfR1BJTzE4CQkzOQorI2RlZmluZQlJUlFfR1BJTzE5CQk0MAorI2RlZmluZQlJUlFfR1BJTzIwCQk0MQorI2RlZmluZQlJUlFfR1BJTzIxCQk0MgorI2RlZmluZQlJUlFfR1BJTzIyCQk0MworI2RlZmluZQlJUlFfR1BJTzIzCQk0NAorI2RlZmluZQlJUlFfR1BJTzI0CQk0NQorI2RlZmluZQlJUlFfR1BJTzI1CQk0NgorI2RlZmluZQlJUlFfR1BJTzI2CQk0NworI2RlZmluZQlJUlFfR1BJTzI3CQk0OAorCisvKgorICogVGhlIG5leHQgMTYgaW50ZXJydXB0cyBhcmUgZm9yIGJvYXJkIHNwZWNpZmljIHB1cnBvc2VzLiAgU2luY2UKKyAqIHRoZSBrZXJuZWwgY2FuIG9ubHkgcnVuIG9uIG9uZSBtYWNoaW5lIGF0IGEgdGltZSwgd2UgY2FuIHJlLXVzZQorICogdGhlc2UuICBJZiB5b3UgbmVlZCBtb3JlLCBpbmNyZWFzZSBJUlFfQk9BUkRfRU5ELCBidXQga2VlcCBpdAorICogd2l0aGluIHNlbnNpYmxlIGxpbWl0cy4gIElSUXMgNDkgdG8gNjQgYXJlIGF2YWlsYWJsZS4KKyAqLworI2RlZmluZSBJUlFfQk9BUkRfU1RBUlQJCTQ5CisjZGVmaW5lIElSUV9CT0FSRF9FTkQJCTY1CisKKyNkZWZpbmUgSVJRX1NBMTExMV9TVEFSVAkoSVJRX0JPQVJEX0VORCkKKyNkZWZpbmUgSVJRX0dQQUlOMAkJKElSUV9CT0FSRF9FTkQgKyAwKQorI2RlZmluZSBJUlFfR1BBSU4xCQkoSVJRX0JPQVJEX0VORCArIDEpCisjZGVmaW5lIElSUV9HUEFJTjIJCShJUlFfQk9BUkRfRU5EICsgMikKKyNkZWZpbmUgSVJRX0dQQUlOMwkJKElSUV9CT0FSRF9FTkQgKyAzKQorI2RlZmluZSBJUlFfR1BCSU4wCQkoSVJRX0JPQVJEX0VORCArIDQpCisjZGVmaW5lIElSUV9HUEJJTjEJCShJUlFfQk9BUkRfRU5EICsgNSkKKyNkZWZpbmUgSVJRX0dQQklOMgkJKElSUV9CT0FSRF9FTkQgKyA2KQorI2RlZmluZSBJUlFfR1BCSU4zCQkoSVJRX0JPQVJEX0VORCArIDcpCisjZGVmaW5lIElSUV9HUEJJTjQJCShJUlFfQk9BUkRfRU5EICsgOCkKKyNkZWZpbmUgSVJRX0dQQklONQkJKElSUV9CT0FSRF9FTkQgKyA5KQorI2RlZmluZSBJUlFfR1BDSU4wCQkoSVJRX0JPQVJEX0VORCArIDEwKQorI2RlZmluZSBJUlFfR1BDSU4xCQkoSVJRX0JPQVJEX0VORCArIDExKQorI2RlZmluZSBJUlFfR1BDSU4yCQkoSVJRX0JPQVJEX0VORCArIDEyKQorI2RlZmluZSBJUlFfR1BDSU4zCQkoSVJRX0JPQVJEX0VORCArIDEzKQorI2RlZmluZSBJUlFfR1BDSU40CQkoSVJRX0JPQVJEX0VORCArIDE0KQorI2RlZmluZSBJUlFfR1BDSU41CQkoSVJRX0JPQVJEX0VORCArIDE1KQorI2RlZmluZSBJUlFfR1BDSU42CQkoSVJRX0JPQVJEX0VORCArIDE2KQorI2RlZmluZSBJUlFfR1BDSU43CQkoSVJRX0JPQVJEX0VORCArIDE3KQorI2RlZmluZSBJUlFfTVNUWElOVAkJKElSUV9CT0FSRF9FTkQgKyAxOCkKKyNkZWZpbmUgSVJRX01TUlhJTlQJCShJUlFfQk9BUkRfRU5EICsgMTkpCisjZGVmaW5lIElSUV9NU1NUT1BFUlJJTlQJKElSUV9CT0FSRF9FTkQgKyAyMCkKKyNkZWZpbmUgSVJRX1RQVFhJTlQJCShJUlFfQk9BUkRfRU5EICsgMjEpCisjZGVmaW5lIElSUV9UUFJYSU5UCQkoSVJRX0JPQVJEX0VORCArIDIyKQorI2RlZmluZSBJUlFfVFBTVE9QRVJSSU5UCShJUlFfQk9BUkRfRU5EICsgMjMpCisjZGVmaW5lIFNTUFhNVElOVAkJKElSUV9CT0FSRF9FTkQgKyAyNCkKKyNkZWZpbmUgU1NQUkNWSU5UCQkoSVJRX0JPQVJEX0VORCArIDI1KQorI2RlZmluZSBTU1BST1IJCQkoSVJRX0JPQVJEX0VORCArIDI2KQorI2RlZmluZSBBVURYTVRETUFET05FQQkJKElSUV9CT0FSRF9FTkQgKyAzMikKKyNkZWZpbmUgQVVEUkNWRE1BRE9ORUEJCShJUlFfQk9BUkRfRU5EICsgMzMpCisjZGVmaW5lIEFVRFhNVERNQURPTkVCCQkoSVJRX0JPQVJEX0VORCArIDM0KQorI2RlZmluZSBBVURSQ1ZETUFET05FQgkJKElSUV9CT0FSRF9FTkQgKyAzNSkKKyNkZWZpbmUgQVVEVEZTUgkJCShJUlFfQk9BUkRfRU5EICsgMzYpCisjZGVmaW5lIEFVRFJGU1IJCQkoSVJRX0JPQVJEX0VORCArIDM3KQorI2RlZmluZSBBVURUVVIJCQkoSVJRX0JPQVJEX0VORCArIDM4KQorI2RlZmluZSBBVURST1IJCQkoSVJRX0JPQVJEX0VORCArIDM5KQorI2RlZmluZSBBVUREVFMJCQkoSVJRX0JPQVJEX0VORCArIDQwKQorI2RlZmluZSBBVURSREQJCQkoSVJRX0JPQVJEX0VORCArIDQxKQorI2RlZmluZSBBVURTVE8JCQkoSVJRX0JPQVJEX0VORCArIDQyKQorI2RlZmluZSBJUlFfVVNCUFdSCQkoSVJRX0JPQVJEX0VORCArIDQzKQorI2RlZmluZSBJUlFfSENJTQkJKElSUV9CT0FSRF9FTkQgKyA0NCkKKyNkZWZpbmUgSVJRX0hDSUJVRkZBQ0MJCShJUlFfQk9BUkRfRU5EICsgNDUpCisjZGVmaW5lIElSUV9IQ0lSTVRXS1AJCShJUlFfQk9BUkRfRU5EICsgNDYpCisjZGVmaW5lIElSUV9OSENJTUZDSVIJCShJUlFfQk9BUkRfRU5EICsgNDcpCisjZGVmaW5lIElSUV9VU0JfUE9SVF9SRVNVTUUJKElSUV9CT0FSRF9FTkQgKyA0OCkKKyNkZWZpbmUgSVJRX1MwX1JFQURZX05JTlQJKElSUV9CT0FSRF9FTkQgKyA0OSkKKyNkZWZpbmUgSVJRX1MxX1JFQURZX05JTlQJKElSUV9CT0FSRF9FTkQgKyA1MCkKKyNkZWZpbmUgSVJRX1MwX0NEX1ZBTElECQkoSVJRX0JPQVJEX0VORCArIDUxKQorI2RlZmluZSBJUlFfUzFfQ0RfVkFMSUQJCShJUlFfQk9BUkRfRU5EICsgNTIpCisjZGVmaW5lIElSUV9TMF9CVkQxX1NUU0NIRwkoSVJRX0JPQVJEX0VORCArIDUzKQorI2RlZmluZSBJUlFfUzFfQlZEMV9TVFNDSEcJKElSUV9CT0FSRF9FTkQgKyA1NCkKKworI2RlZmluZSBJUlFfTE9DT01PX1NUQVJUCShJUlFfQk9BUkRfRU5EKQorI2RlZmluZSBJUlFfTE9DT01PX0tFWQkJKElSUV9CT0FSRF9FTkQgKyAwKQorI2RlZmluZSBJUlFfTE9DT01PX0dQSU8wCShJUlFfQk9BUkRfRU5EICsgMSkKKyNkZWZpbmUgSVJRX0xPQ09NT19HUElPMQkoSVJRX0JPQVJEX0VORCArIDIpCisjZGVmaW5lIElSUV9MT0NPTU9fR1BJTzIJKElSUV9CT0FSRF9FTkQgKyAzKQorI2RlZmluZSBJUlFfTE9DT01PX0dQSU8zCShJUlFfQk9BUkRfRU5EICsgNCkKKyNkZWZpbmUgSVJRX0xPQ09NT19HUElPNAkoSVJRX0JPQVJEX0VORCArIDUpCisjZGVmaW5lIElSUV9MT0NPTU9fR1BJTzUJKElSUV9CT0FSRF9FTkQgKyA2KQorI2RlZmluZSBJUlFfTE9DT01PX0dQSU82CShJUlFfQk9BUkRfRU5EICsgNykKKyNkZWZpbmUgSVJRX0xPQ09NT19HUElPNwkoSVJRX0JPQVJEX0VORCArIDgpCisjZGVmaW5lIElSUV9MT0NPTU9fR1BJTzgJKElSUV9CT0FSRF9FTkQgKyA5KQorI2RlZmluZSBJUlFfTE9DT01PX0dQSU85CShJUlFfQk9BUkRfRU5EICsgMTApCisjZGVmaW5lIElSUV9MT0NPTU9fR1BJTzEwCShJUlFfQk9BUkRfRU5EICsgMTEpCisjZGVmaW5lIElSUV9MT0NPTU9fR1BJTzExCShJUlFfQk9BUkRfRU5EICsgMTIpCisjZGVmaW5lIElSUV9MT0NPTU9fR1BJTzEyCShJUlFfQk9BUkRfRU5EICsgMTMpCisjZGVmaW5lIElSUV9MT0NPTU9fR1BJTzEzCShJUlFfQk9BUkRfRU5EICsgMTQpCisjZGVmaW5lIElSUV9MT0NPTU9fR1BJTzE0CShJUlFfQk9BUkRfRU5EICsgMTUpCisjZGVmaW5lIElSUV9MT0NPTU9fR1BJTzE1CShJUlFfQk9BUkRfRU5EICsgMTYpCisjZGVmaW5lIElSUV9MT0NPTU9fTFQJCShJUlFfQk9BUkRfRU5EICsgMTcpCisjZGVmaW5lIElSUV9MT0NPTU9fU1BJX1JGUgkoSVJRX0JPQVJEX0VORCArIDE4KQorI2RlZmluZSBJUlFfTE9DT01PX1NQSV9SRlcJKElSUV9CT0FSRF9FTkQgKyAxOSkKKyNkZWZpbmUgSVJRX0xPQ09NT19TUElfT1ZSTgkoSVJRX0JPQVJEX0VORCArIDIwKQorI2RlZmluZSBJUlFfTE9DT01PX1NQSV9URU5ECShJUlFfQk9BUkRfRU5EICsgMjEpCisKKy8qCisgKiBGaWd1cmUgb3V0IHRoZSBNQVggSVJRIG51bWJlci4KKyAqCisgKiBJZiB3ZSBoYXZlIGFuIFNBMTExMSwgdGhlIG1heCBJUlEgaXMgUzFfQlZEMV9TVFNDSEcrMS4KKyAqIElmIHdlIGhhdmUgYW4gTG9Db01vLCB0aGUgbWF4IElSUSBpcyBJUlFfTE9DT01PX1NQSV9URU5EKzEKKyAqIE90aGVyd2lzZSwgd2UgaGF2ZSB0aGUgc3RhbmRhcmQgSVJRcyBvbmx5LgorICovCisjaWZkZWYgQ09ORklHX1NBMTExMQorI2RlZmluZSBOUl9JUlFTCQkJKElSUV9TMV9CVkQxX1NUU0NIRyArIDEpCisjZWxpZiBkZWZpbmVkKENPTkZJR19TQTExMDBfSDM4MDApCisjZGVmaW5lIE5SX0lSUVMJCQkoSVJRX0JPQVJEX0VORCkKKyNlbGlmIGRlZmluZWQoQ09ORklHX1NIQVJQX0xPQ09NTykKKyNkZWZpbmUgTlJfSVJRUwkJCShJUlFfTE9DT01PX1NQSV9URU5EICsgMSkKKyNlbHNlCisjZGVmaW5lIE5SX0lSUVMJCQkoSVJRX0JPQVJEX1NUQVJUKQorI2VuZGlmCisKKy8qCisgKiBCb2FyZCBzcGVjaWZpYyBJUlFzLiAgRGVmaW5lIHRoZW0gaGVyZS4KKyAqIERvIG5vdCBzdXJyb3VuZCB0aGVtIHdpdGggaWZkZWZzLgorICovCisjZGVmaW5lIElSUV9ORVBPTlNFVF9TTUM5MTk2CShJUlFfQk9BUkRfU1RBUlQgKyAwKQorI2RlZmluZSBJUlFfTkVQT05TRVRfVVNBUgkoSVJRX0JPQVJEX1NUQVJUICsgMSkKKyNkZWZpbmUgSVJRX05FUE9OU0VUX1NBMTExMQkoSVJRX0JPQVJEX1NUQVJUICsgMikKKworLyogTG9Db01vIEludGVycnVwdHMgKENPTkZJR19TSEFSUF9MT0NPTU8pICovCisjZGVmaW5lIElSUV9MT0NPTU9fS0VZX0JBU0UJKElSUV9CT0FSRF9TVEFSVCArIDApCisjZGVmaW5lIElSUV9MT0NPTU9fR1BJT19CQVNFCShJUlFfQk9BUkRfU1RBUlQgKyAxKQorI2RlZmluZSBJUlFfTE9DT01PX0xUX0JBU0UJKElSUV9CT0FSRF9TVEFSVCArIDIpCisjZGVmaW5lIElSUV9MT0NPTU9fU1BJX0JBU0UJKElSUV9CT0FSRF9TVEFSVCArIDMpCisKKy8qIEgzODAwLXNwZWNpZmljIElSUXMgKENPTkZJR19TQTExMDBfSDM4MDApICovCisjZGVmaW5lIEgzODAwX0tQSU9fSVJRX1NUQVJUICAgIChJUlFfQk9BUkRfU1RBUlQpCisjZGVmaW5lIElSUV9IMzgwMF9LRVkgICAgICAgICAgIChJUlFfQk9BUkRfU1RBUlQgKyAwKQorI2RlZmluZSBJUlFfSDM4MDBfU1BJICAgICAgICAgICAoSVJRX0JPQVJEX1NUQVJUICsgMSkKKyNkZWZpbmUgSVJRX0gzODAwX09XTSAgICAgICAgICAgKElSUV9CT0FSRF9TVEFSVCArIDIpCisjZGVmaW5lIElSUV9IMzgwMF9BREMgICAgICAgICAgIChJUlFfQk9BUkRfU1RBUlQgKyAzKQorI2RlZmluZSBJUlFfSDM4MDBfVUFSVF8wICAgICAgICAoSVJRX0JPQVJEX1NUQVJUICsgNCkKKyNkZWZpbmUgSVJRX0gzODAwX1VBUlRfMSAgICAgICAgKElSUV9CT0FSRF9TVEFSVCArIDUpCisjZGVmaW5lIElSUV9IMzgwMF9USU1FUl8wICAgICAgIChJUlFfQk9BUkRfU1RBUlQgKyA2KQorI2RlZmluZSBJUlFfSDM4MDBfVElNRVJfMSAgICAgICAoSVJRX0JPQVJEX1NUQVJUICsgNykKKyNkZWZpbmUgSVJRX0gzODAwX1RJTUVSXzIgICAgICAgKElSUV9CT0FSRF9TVEFSVCArIDgpCisjZGVmaW5lIEgzODAwX0tQSU9fSVJRX0NPVU5UICAgIDkKKworI2RlZmluZSBIMzgwMF9HUElPX0lSUV9TVEFSVCAgICAoSVJRX0JPQVJEX1NUQVJUICsgOSkKKyNkZWZpbmUgSVJRX0gzODAwX1BFTiAgICAgICAgICAgKElSUV9CT0FSRF9TVEFSVCArIDkpCisjZGVmaW5lIElSUV9IMzgwMF9TRF9ERVRFQ1QgICAgIChJUlFfQk9BUkRfU1RBUlQgKyAxMCkKKyNkZWZpbmUgSVJRX0gzODAwX0VBUl9JTiAgICAgICAgKElSUV9CT0FSRF9TVEFSVCArIDExKQorI2RlZmluZSBJUlFfSDM4MDBfVVNCX0RFVEVDVCAgICAoSVJRX0JPQVJEX1NUQVJUICsgMTIpCisjZGVmaW5lIElSUV9IMzgwMF9TRF9DT05fU0xUICAgIChJUlFfQk9BUkRfU1RBUlQgKyAxMykKKyNkZWZpbmUgSDM4MDBfR1BJT19JUlFfQ09VTlQgICAgNQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL2pvcm5hZGE3MjAuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9qb3JuYWRhNzIwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI4ZThhMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9qb3JuYWRhNzIwLmgKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9qb3JuYWRhNzIwLmgKKyAqCisgKiBDcmVhdGVkIDIwMDAvMTEvMjkgYnkgSm9obiBBbmtjb3JuIDxqY2FAbGNzLm1pdC5lZHU+CisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBoYXJkd2FyZSBzcGVjaWZpYyBkZWZpbml0aW9ucyBmb3IgSFAgSm9ybmFkYSA3MjAKKyAqCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX0hBUkRXQVJFX0gKKyNlcnJvciAiaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+IGluc3RlYWQiCisjZW5kaWYKKworI2RlZmluZSBTQTExMTFfQkFTRSAgICAgICAgICAgICAoMHg0MDAwMDAwMCkKKworI2RlZmluZSBHUElPX0pPUk5BREE3MjBfS0VZQk9BUkQJR1BJT19HUElPKDApCisjZGVmaW5lIEdQSU9fSk9STkFEQTcyMF9NT1VTRQkJR1BJT19HUElPKDkpCisKKyNkZWZpbmUgR1BJT19KT1JOQURBNzIwX0tFWUJPQVJEX0lSUQlJUlFfR1BJTzAKKyNkZWZpbmUgR1BJT19KT1JOQURBNzIwX01PVVNFX0lSUQkJSVJRX0dQSU85CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK3ZvaWQgam9ybmFkYTcyMF9tY3VfaW5pdCh2b2lkKTsKK3ZvaWQgam9ybmFkYV9jb250cmFzdChpbnQgYXJnX2NvbnRyYXN0KTsKK3ZvaWQgam9ybmFkYTcyMF9iYXR0ZXJ5KHZvaWQpOworaW50IGpvcm5hZGE3MjBfZ2V0a2V5KHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBzaXplKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL2xhcnQuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9sYXJ0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE1NDgyZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9sYXJ0LmgKQEAgLTAsMCArMSwxMyBAQAorI2lmbmRlZiBfSU5DTFVERV9MQVJUX0gKKyNkZWZpbmUgX0lOQ0xVREVfTEFSVF9ICisKKyNkZWZpbmUgTEFSVF9HUElPX0VUSDAJCQlHUElPX0dQSU8wCisjZGVmaW5lIExBUlRfSVJRX0VUSDAJCQlJUlFfR1BJTzAKKworI2RlZmluZSBMQVJUX0dQSU9fSURFCQkJR1BJT19HUElPMQorI2RlZmluZSBMQVJUX0lSUV9JREUJCQlJUlFfR1BJTzEKKworI2RlZmluZSBMQVJUX0dQSU9fVUNCMTIwMAkJR1BJT19HUElPMTgKKyNkZWZpbmUgTEFSVF9JUlFfVUNCMTIwMAkJSVJRX0dQSU8xOAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9tZW1vcnkuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9tZW1vcnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmQzZDViCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL21lbW9yeS5oCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL21lbW9yeS5oCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgTmljb2xhcyBQaXRyZSA8bmljb0BjYW0ub3JnPgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9NRU1PUllfSAorI2RlZmluZSBfX0FTTV9BUkNIX01FTU9SWV9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KKworLyoKKyAqIFBoeXNpY2FsIERSQU0gb2Zmc2V0IGlzIDB4YzAwMDAwMDAgb24gdGhlIFNBMTEwMAorICovCisjZGVmaW5lIFBIWVNfT0ZGU0VUCSgweGMwMDAwMDAwVUwpCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNpZmRlZiBDT05GSUdfU0ExMTExCitzdGF0aWMgaW5saW5lIHZvaWQKK19fYXJjaF9hZGp1c3Rfem9uZXMoaW50IG5vZGUsIHVuc2lnbmVkIGxvbmcgKnNpemUsIHVuc2lnbmVkIGxvbmcgKmhvbGVzKQoreworCXVuc2lnbmVkIGludCBzeiA9IFNaXzFNID4+IFBBR0VfU0hJRlQ7CisKKwlpZiAobm9kZSAhPSAwKQorCQlzeiA9IDA7CisKKwlzaXplWzFdID0gc2l6ZVswXSAtIHN6OworCXNpemVbMF0gPSBzejsKK30KKworI2RlZmluZSBhcmNoX2FkanVzdF96b25lcyhub2RlLCBzaXplLCBob2xlcykgXAorCV9fYXJjaF9hZGp1c3Rfem9uZXMobm9kZSwgc2l6ZSwgaG9sZXMpCisKKyNkZWZpbmUgSVNBX0RNQV9USFJFU0hPTEQJKFBIWVNfT0ZGU0VUICsgU1pfMU0gLSAxKQorCisjZW5kaWYKKyNlbmRpZgorCisvKgorICogVmlydHVhbCB2aWV3IDwtPiBETUEgdmlldyBtZW1vcnkgYWRkcmVzcyB0cmFuc2xhdGlvbnMKKyAqIHZpcnRfdG9fYnVzOiBVc2VkIHRvIHRyYW5zbGF0ZSB0aGUgdmlydHVhbCBhZGRyZXNzIHRvIGFuCisgKgkJYWRkcmVzcyBzdWl0YWJsZSB0byBiZSBwYXNzZWQgdG8gc2V0X2RtYV9hZGRyCisgKiBidXNfdG9fdmlydDogVXNlZCB0byBjb252ZXJ0IGFuIGFkZHJlc3MgZm9yIERNQSBvcGVyYXRpb25zCisgKgkJdG8gYW4gYWRkcmVzcyB0aGF0IHRoZSBrZXJuZWwgY2FuIHVzZS4KKyAqCisgKiBPbiB0aGUgU0ExMTAwLCBidXMgYWRkcmVzc2VzIGFyZSBlcXVpdmFsZW50IHRvIHBoeXNpY2FsIGFkZHJlc3Nlcy4KKyAqLworI2RlZmluZSBfX3ZpcnRfdG9fYnVzKHgpCSBfX3ZpcnRfdG9fcGh5cyh4KQorI2RlZmluZSBfX2J1c190b192aXJ0KHgpCSBfX3BoeXNfdG9fdmlydCh4KQorCisjaWZkZWYgQ09ORklHX0RJU0NPTlRJR01FTQorLyoKKyAqIEJlY2F1c2Ugb2YgdGhlIHdpZGUgbWVtb3J5IGFkZHJlc3Mgc3BhY2UgYmV0d2VlbiBwaHlzaWNhbCBSQU0gYmFua3Mgb24gdGhlIAorICogU0ExMTAwLCBpdCdzIG11Y2ggY29udmVuaWVudCB0byB1c2UgTGludXgncyBOVU1BIHN1cHBvcnQgdG8gaW1wbGVtZW50IG91ciAKKyAqIG1lbW9yeSBtYXAgcmVwcmVzZW50YXRpb24uICBBc3N1bWluZyBhbGwgbWVtb3J5IG5vZGVzIGhhdmUgZXF1YWwgYWNjZXNzIAorICogY2hhcmFjdGVyaXN0aWNzLCB3ZSB0aGVuIGhhdmUgZ2VuZXJpYyBkaXNjb250aWd1b3VzIG1lbW9yeSBzdXBwb3J0LgorICoKKyAqIE9mIGNvdXJzZSwgYWxsIHRoaXMgaXNuJ3QgbWFuZGF0b3J5IGZvciBTQTExMDAgaW1wbGVtZW50YXRpb25zIHdpdGggb25seQorICogb25lIHVzZWQgbWVtb3J5IGJhbmsuICBGb3IgdGhvc2UsIHNpbXBseSB1bmRlZmluZSBDT05GSUdfRElTQ09OVElHTUVNLgorICoKKyAqIFRoZSBub2RlcyBhcmUgbWF0Y2hlZCB3aXRoIHRoZSBwaHlzaWNhbCBtZW1vcnkgYmFuayBhZGRyZXNzZXMgd2hpY2ggYXJlIAorICogaW5jaWRlbnRhbGx5IHRoZSBzYW1lIGFzIHZpcnR1YWwgYWRkcmVzc2VzLgorICogCisgKiAJbm9kZSAwOiAgMHhjMDAwMDAwMCAtIDB4YzdmZmZmZmYKKyAqIAlub2RlIDE6ICAweGM4MDAwMDAwIC0gMHhjZmZmZmZmZgorICogCW5vZGUgMjogIDB4ZDAwMDAwMDAgLSAweGQ3ZmZmZmZmCisgKiAJbm9kZSAzOiAgMHhkODAwMDAwMCAtIDB4ZGZmZmZmZmYKKyAqLworCisvKgorICogR2l2ZW4gYSBrZXJuZWwgYWRkcmVzcywgZmluZCB0aGUgaG9tZSBub2RlIG9mIHRoZSB1bmRlcmx5aW5nIG1lbW9yeS4KKyAqLworI2RlZmluZSBLVkFERFJfVE9fTklEKGFkZHIpICgoKHVuc2lnbmVkIGxvbmcpKGFkZHIpIC0gUEFHRV9PRkZTRVQpID4+IDI3KQorCisvKgorICogR2l2ZW4gYSBwYWdlIGZyYW1lIG51bWJlciwgY29udmVydCBpdCB0byBhIG5vZGUgaWQuCisgKi8KKyNkZWZpbmUgUEZOX1RPX05JRChwZm4pCQkoKChwZm4pIC0gUEhZU19QRk5fT0ZGU0VUKSA+PiAoMjcgLSBQQUdFX1NISUZUKSkKKworLyoKKyAqIEdpdmVuIGEga2FkZHIsIEFERFJfVE9fTUFQQkFTRSBmaW5kcyB0aGUgb3duaW5nIG5vZGUgb2YgdGhlIG1lbW9yeQorICogYW5kIHJldHVybiB0aGUgbWVtX21hcCBvZiB0aGF0IG5vZGUuCisgKi8KKyNkZWZpbmUgQUREUl9UT19NQVBCQVNFKGthZGRyKQlOT0RFX01FTV9NQVAoS1ZBRERSX1RPX05JRChrYWRkcikpCisKKy8qCisgKiBHaXZlbiBhIHBhZ2UgZnJhbWUgbnVtYmVyLCBmaW5kIHRoZSBvd25pbmcgbm9kZSBvZiB0aGUgbWVtb3J5CisgKiBhbmQgcmV0dXJuIHRoZSBtZW1fbWFwIG9mIHRoYXQgbm9kZS4KKyAqLworI2RlZmluZSBQRk5fVE9fTUFQQkFTRShwZm4pCU5PREVfTUVNX01BUChQRk5fVE9fTklEKHBmbikpCisKKy8qCisgKiBHaXZlbiBhIGthZGRyLCBMT0NBTF9NRU1fTUFQIGZpbmRzIHRoZSBvd25pbmcgbm9kZSBvZiB0aGUgbWVtb3J5CisgKiBhbmQgcmV0dXJucyB0aGUgaW5kZXggY29ycmVzcG9uZGluZyB0byB0aGUgYXBwcm9wcmlhdGUgcGFnZSBpbiB0aGUKKyAqIG5vZGUncyBtZW1fbWFwLgorICovCisjZGVmaW5lIExPQ0FMX01BUF9OUihhZGRyKSBcCisJKCgodW5zaWduZWQgbG9uZykoYWRkcikgJiAweDA3ZmZmZmZmKSA+PiBQQUdFX1NISUZUKQorCisjZWxzZQorCisjZGVmaW5lIFBGTl9UT19OSUQoYWRkcikJKDApCisKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9uZXBvbnNldC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL25lcG9uc2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA1MWZkNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9uZXBvbnNldC5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvYXNzYWJldC5oCisgKgorICogQ3JlYXRlZCAyMDAwLzA2LzA1IGJ5IE5pY29sYXMgUGl0cmUgPG5pY29AY2FtLm9yZz4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGhhcmR3YXJlIHNwZWNpZmljIGRlZmluaXRpb25zIGZvciBBc3NhYmV0CisgKiBPbmx5IGluY2x1ZGUgdGhpcyBmaWxlIGZyb20gU0ExMTAwLXNwZWNpZmljIGZpbGVzLgorICoKKyAqIDIwMDAvMDUvMjMgSm9obiBEb3JzZXkgPGpvaG4rQGNzLmNtdS5lZHU+CisgKiAgICAgIERlZmluaXRpb25zIGZvciBOZXBvbnNldCBhZGRlZC4KKyAqLworI2lmbmRlZiBfX0FTTV9BUkNIX05FUE9OU0VUX0gKKyNkZWZpbmUgX19BU01fQVJDSF9ORVBPTlNFVF9ICisKKy8qCisgKiBOZXBvbnNldCBkZWZpbml0aW9uczogCisgKi8KKworI2RlZmluZSBORVBPTlNFVF9DUExEX0JBU0UgICAgICAoMHgxMDAwMDAwMCkKKyNkZWZpbmUgTmVwX3AydiggeCApICAgICAgICAgICAgKCh4KSAtIE5FUE9OU0VUX0NQTERfQkFTRSArIDB4ZjMwMDAwMDApCisjZGVmaW5lIE5lcF92MnAoIHggKSAgICAgICAgICAgICgoeCkgLSAweGYzMDAwMDAwICsgTkVQT05TRVRfQ1BMRF9CQVNFKQorCisjZGVmaW5lIF9JUlIgICAgICAgICAgICAgICAgICAgIDB4MTAwMDAwMjQgICAgICAvKiBJbnRlcnJ1cHQgUmVhc29uIFJlZ2lzdGVyICovCisjZGVmaW5lIF9BVURfQ1RMICAgICAgICAgICAgICAgIDB4MTAwMDAwYzAgICAgICAvKiBBdWRpbyBjb250cm9scyAoUlcpICAgICAgICovCisjZGVmaW5lIF9NRE1fQ1RMXzAgICAgICAgICAgICAgIDB4MTAwMDAwYjAgICAgICAvKiBNb2RlbSBjb250cm9sIDAgKFJXKSAgICAgICovCisjZGVmaW5lIF9NRE1fQ1RMXzEgICAgICAgICAgICAgIDB4MTAwMDAwYjQgICAgICAvKiBNb2RlbSBjb250cm9sIDEgKFJXKSAgICAgICovCisjZGVmaW5lIF9OQ1JfMAkgICAgICAgICAgICAgICAgMHgxMDAwMDBhMCAgICAgIC8qIENvbnRyb2wgUmVnaXN0ZXIgKFJXKSAgICAgKi8KKyNkZWZpbmUgX0tQX1hfT1VUICAgICAgICAgICAgICAgMHgxMDAwMDA5MCAgICAgIC8qIEtleXBhZCByb3cgd3JpdGUgKFJXKSAgICAgKi8KKyNkZWZpbmUgX0tQX1lfSU4gICAgICAgICAgICAgICAgMHgxMDAwMDA4MCAgICAgIC8qIEtleXBhZCBjb2x1bW4gcmVhZCAoUk8pICAgKi8KKyNkZWZpbmUgX1NXUEsgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAyMCAgICAgIC8qIFN3aXRjaCBwYWNrIChSTykgICAgICAgICAgKi8KKyNkZWZpbmUgX1dIT0FNSSAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMCAgICAgIC8qIFN5c3RlbSBJRCBSZWdpc3RlciAoUk8pICAgKi8KKworI2RlZmluZSBfTEVEUyAgICAgICAgICAgICAgICAgICAweDEwMDAwMDEwICAgICAgLyogTEVEcyBbMzE6MF0gKFdPKSAgICAgICAgICAqLworCisjZGVmaW5lIElSUiAgICAgICAgICAgICAgICAgICAgICgqKCh2b2xhdGlsZSB1X2NoYXIgKikgTmVwX3AydihfSVJSKSkpCisjZGVmaW5lIEFVRF9DVEwgICAgICAgICAgICAgICAgICgqKCh2b2xhdGlsZSB1X2NoYXIgKikgTmVwX3AydihfQVVEX0NUTCkpKQorI2RlZmluZSBNRE1fQ1RMXzAgICAgICAgICAgICAgICAoKigodm9sYXRpbGUgdV9jaGFyICopIE5lcF9wMnYoX01ETV9DVExfMCkpKQorI2RlZmluZSBNRE1fQ1RMXzEgICAgICAgICAgICAgICAoKigodm9sYXRpbGUgdV9jaGFyICopIE5lcF9wMnYoX01ETV9DVExfMSkpKQorI2RlZmluZSBOQ1JfMAkJCSgqKCh2b2xhdGlsZSB1X2NoYXIgKikgTmVwX3AydihfTkNSXzApKSkKKyNkZWZpbmUgS1BfWF9PVVQgICAgICAgICAgICAgICAgKCooKHZvbGF0aWxlIHVfY2hhciAqKSBOZXBfcDJ2KF9LUF9YX09VVCkpKQorI2RlZmluZSBLUF9ZX0lOICAgICAgICAgICAgICAgICAoKigodm9sYXRpbGUgdV9jaGFyICopIE5lcF9wMnYoX0tQX1lfSU4pKSkKKyNkZWZpbmUgU1dQSyAgICAgICAgICAgICAgICAgICAgKCooKHZvbGF0aWxlIHVfY2hhciAqKSBOZXBfcDJ2KF9TV1BLKSkpCisjZGVmaW5lIFdIT0FNSSAgICAgICAgICAgICAgICAgICgqKCh2b2xhdGlsZSB1X2NoYXIgKikgTmVwX3AydihfV0hPQU1JKSkpCisKKyNkZWZpbmUgTEVEUyAgICAgICAgICAgICAgICAgICAgKCooKHZvbGF0aWxlIFdvcmQgICAqKSBOZXBfcDJ2KF9MRURTKSkpCisKKyNkZWZpbmUgSVJSX0VUSEVSTkVUCQkoMTw8MCkKKyNkZWZpbmUgSVJSX1VTQVIJCSgxPDwxKQorI2RlZmluZSBJUlJfU0ExMTExCQkoMTw8MikKKworI2RlZmluZSBBVURfU0VMXzEzNDEgICAgICAgICAgICAoMTw8MCkKKyNkZWZpbmUgQVVEX01VVEVfMTM0MSAgICAgICAgICAgKDE8PDEpCisKKyNkZWZpbmUgTURNX0NUTDBfUlRTMQkJKDEgPDwgMCkKKyNkZWZpbmUgTURNX0NUTDBfRFRSMQkJKDEgPDwgMSkKKyNkZWZpbmUgTURNX0NUTDBfUlRTMgkJKDEgPDwgMikKKyNkZWZpbmUgTURNX0NUTDBfRFRSMgkJKDEgPDwgMykKKworI2RlZmluZSBNRE1fQ1RMMV9DVFMxCQkoMSA8PCAwKQorI2RlZmluZSBNRE1fQ1RMMV9EU1IxCQkoMSA8PCAxKQorI2RlZmluZSBNRE1fQ1RMMV9EQ0QxCQkoMSA8PCAyKQorI2RlZmluZSBNRE1fQ1RMMV9DVFMyCQkoMSA8PCAzKQorI2RlZmluZSBNRE1fQ1RMMV9EU1IyCQkoMSA8PCA0KQorI2RlZmluZSBNRE1fQ1RMMV9EQ0QyCQkoMSA8PCA1KQorCisjZGVmaW5lIE5DUl9HUDAxX09GRgkJKDE8PDApCisjZGVmaW5lIE5DUl9UUF9QV1JfRU4JCSgxPDwxKQorI2RlZmluZSBOQ1JfTVNfUFdSX0VOCQkoMTw8MikKKyNkZWZpbmUgTkNSX0VORVRfT1NDX0VOCQkoMTw8MykKKyNkZWZpbmUgTkNSX1NQSV9LQl9XS19VUAkoMTw8NCkKKyNkZWZpbmUgTkNSX0EwVlBQCQkoMTw8NSkKKyNkZWZpbmUgTkNSX0ExVlBQCQkoMTw8NikKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvcGFyYW0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2NzQ4ODkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvcGFyYW0uaApAQCAtMCwwICsxLDMgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL3BhcmFtLmgKKyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL3NoYW5ub24uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9zaGFubm9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWMyN2Q2ZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9zaGFubm9uLmgKQEAgLTAsMCArMSw0MyBAQAorI2lmbmRlZiBfSU5DTFVERV9TSEFOTk9OX0gKKyNkZWZpbmUgX0lOQ0xVREVfU0hBTk5PTl9ICisKKy8qIHRha2VuIGZyb20gY29tcC5vcy5pbmZlcm5vIFR1ZSwgMTIgU2VwIDIwMDAgMDk6MjE6NTAgR01ULAorICogd3JpdHRlbiBieSA8Zm9yc3l0aEB2aXRhbnVvdmEuY29tPiAqLworCisjZGVmaW5lIFNIQU5OT05fR1BJT19TUElfRkxBU0gJCUdQSU9fR1BJTyAoMCkJLyogT3V0cHV0IC0gRHJpdmVuIGxvdywgZW5hYmxlcyBTUEkgdG8gZmxhc2ggKi8KKyNkZWZpbmUgU0hBTk5PTl9HUElPX1NQSV9EU1AJCUdQSU9fR1BJTyAoMSkJLyogT3V0cHV0IC0gRHJpdmVuIGxvdywgZW5hYmxlcyBTUEkgdG8gRFNQICovCisvKiBsY2QgbG93ZXIgPSBHUElPIDItOSAqLworI2RlZmluZSBTSEFOTk9OX0dQSU9fU1BJX09VVFBVVAkJR1BJT19HUElPICgxMCkJLyogT3V0cHV0IC0gU1BJIG91dHB1dCB0byBEU1AgKi8KKyNkZWZpbmUgU0hBTk5PTl9HUElPX1NQSV9JTlBVVAkJR1BJT19HUElPICgxMSkJLyogSW5wdXQgIC0gU1BJIGlucHV0IGZyb20gRFNQICovCisjZGVmaW5lIFNIQU5OT05fR1BJT19TUElfQ0xPQ0sJCUdQSU9fR1BJTyAoMTIpCS8qIE91dHB1dCAtIENsb2NrIGZvciBTUEkgKi8KKyNkZWZpbmUgU0hBTk5PTl9HUElPX1NQSV9GUkFNRQkJR1BJT19HUElPICgxMykJLyogT3V0cHV0IC0gRnJhbWUgbWFya2VyIC0gbm90IHVzZWQgKi8KKyNkZWZpbmUgU0hBTk5PTl9HUElPX1NQSV9SVFMJCUdQSU9fR1BJTyAoMTQpCS8qIElucHV0ICAtIFNQSSBSZWFkeSB0byBTZW5kICovCisjZGVmaW5lIFNIQU5OT05fSVJRX0dQSU9fU1BJX1JUUwlJUlFfR1BJTzE0CisjZGVmaW5lIFNIQU5OT05fR1BJT19TUElfQ1RTCQlHUElPX0dQSU8gKDE1KQkvKiBPdXRwdXQgLSBTUEkgQ2xlYXIgdG8gU2VuZCAqLworI2RlZmluZSBTSEFOTk9OX0dQSU9fSVJRX0NPREVDCQlHUElPX0dQSU8gKDE2KQkvKiBpbiwgaXJxIGZyb20gdWNiMTIwMCAqLworI2RlZmluZSBTSEFOTk9OX0lSUV9HUElPX0lSUV9DT0RFQwlJUlFfR1BJTzE2CisjZGVmaW5lIFNIQU5OT05fR1BJT19EU1BfUkVTRVQJCUdQSU9fR1BJTyAoMTcpCS8qIE91dHB1dCAtIERyaXZlIGxvdyB0byByZXNldCB0aGUgRFNQICovCisjZGVmaW5lIFNIQU5OT05fR1BJT19DT0RFQ19SRVNFVAlHUElPX0dQSU8gKDE4KQkvKiBPdXRwdXQgLSBEcml2ZSBsb3cgdG8gcmVzZXQgdGhlIFVDQjF4MDAgKi8KKyNkZWZpbmUgU0hBTk5PTl9HUElPX1UzX1JUUwkJR1BJT19HUElPICgxOSkJLyogPz8gKi8KKyNkZWZpbmUgU0hBTk5PTl9HUElPX1UzX0NUUwkJR1BJT19HUElPICgyMCkJLyogPz8gKi8KKyNkZWZpbmUgU0hBTk5PTl9HUElPX1NFTlNFXzEyVgkJR1BJT19HUElPICgyMSkJLyogSW5wdXQsIDEydiBmbGFzaCB1bnByb3RlY3QgZGV0ZWN0ZWQgKi8KKyNkZWZpbmUgU0hBTk5PTl9HUElPX0RJU1BfRU4JCUdQSU9fR1BJTyAoMjIpCS8qIG91dCAqLworLyogWFhYIEdQSU8gMjMgdW5hY2NvdW50ZWQgZm9yICovCisjZGVmaW5lIFNIQU5OT05fR1BJT19FSkVDVF8wCQlHUElPX0dQSU8gKDI0KQkvKiBpbiAqLworI2RlZmluZSBTSEFOTk9OX0lSUV9HUElPX0VKRUNUXzAJSVJRX0dQSU8yNAorI2RlZmluZSBTSEFOTk9OX0dQSU9fRUpFQ1RfMQkJR1BJT19HUElPICgyNSkJLyogaW4gKi8KKyNkZWZpbmUgU0hBTk5PTl9JUlFfR1BJT19FSkVDVF8xCUlSUV9HUElPMjUKKyNkZWZpbmUgU0hBTk5PTl9HUElPX1JEWV8wCQlHUElPX0dQSU8gKDI2KQkvKiBpbiAqLworI2RlZmluZSBTSEFOTk9OX0lSUV9HUElPX1JEWV8wCQlJUlFfR1BJTzI2CisjZGVmaW5lIFNIQU5OT05fR1BJT19SRFlfMQkJR1BJT19HUElPICgyNykJLyogaW4gKi8KKyNkZWZpbmUgU0hBTk5PTl9JUlFfR1BJT19SRFlfMQkJSVJRX0dQSU8yNworCisvKiBNQ1AgVUNCIGNvZGVjIEdQSU8gcGlucy4uLiAqLworCisjZGVmaW5lIFNIQU5OT05fVUNCX0dQSU9fQkFDS0xJR0hUCTkKKyNkZWZpbmUgU0hBTk5PTl9VQ0JfR1BJT19CUklHSFRfTUFTSyAgCTcKKyNkZWZpbmUgU0hBTk5PTl9VQ0JfR1BJT19CUklHSFQJCTYKKyNkZWZpbmUgU0hBTk5PTl9VQ0JfR1BJT19DT05UUkFTVF9NQVNLCTB4M2YKKyNkZWZpbmUgU0hBTk5PTl9VQ0JfR1BJT19DT05UUkFTVAkwCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL3NpbXBhZC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL3NpbXBhZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzNDMwMWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvc2ltcGFkLmgKQEAgLTAsMCArMSwxMTIgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvc2ltcGFkLmgKKyAqCisgKiBiYXNlZCBvZiBhc3NhYmV0Lmggc2FtZSBhcyBIVVdfV2VicGFuZWwKKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGhhcmR3YXJlIHNwZWNpZmljIGRlZmluaXRpb25zIGZvciBTSU1wYWQKKyAqCisgKiAyMDAxLzA1LzE0IEp1ZXJnZW4gTWVzc2VyZXIgPGp1ZXJnZW4ubWVzc2VyZXJAZnJlZXN1cmYuY2g+CisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX1NJTVBBRF9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfU0lNUEFEX0gKKworCisjZGVmaW5lIEdQSU9fVUFSVDFfUlRTCUdQSU9fR1BJTzE0CisjZGVmaW5lIEdQSU9fVUFSVDFfRFRSCUdQSU9fR1BJTzcKKyNkZWZpbmUgR1BJT19VQVJUMV9DVFMJR1BJT19HUElPOAorI2RlZmluZSBHUElPX1VBUlQxX0RDRAlHUElPX0dQSU8yMworI2RlZmluZSBHUElPX1VBUlQxX0RTUglHUElPX0dQSU82CisKKyNkZWZpbmUgR1BJT19VQVJUM19SVFMJR1BJT19HUElPMTIKKyNkZWZpbmUgR1BJT19VQVJUM19EVFIJR1BJT19HUElPMTYKKyNkZWZpbmUgR1BJT19VQVJUM19DVFMJR1BJT19HUElPMTMKKyNkZWZpbmUgR1BJT19VQVJUM19EQ0QJR1BJT19HUElPMTgKKyNkZWZpbmUgR1BJT19VQVJUM19EU1IJR1BJT19HUElPMTcKKworI2RlZmluZSBHUElPX1BPV0VSX0JVVFRPTglHUElPX0dQSU8wCisjZGVmaW5lIEdQSU9fVUNCMTMwMF9JUlEJR1BJT19HUElPMjIJLyogVUNCIEdQSU8gYW5kIHRvdWNoc2NyZWVuICovCisKKyNkZWZpbmUgSVJRX1VBUlQxX0NUUwlJUlFfR1BJTzE1CisjZGVmaW5lIElSUV9VQVJUMV9EQ0QJR1BJT19HUElPMjMKKyNkZWZpbmUgSVJRX1VBUlQxX0RTUglHUElPX0dQSU82CisjZGVmaW5lIElSUV9VQVJUM19DVFMJR1BJT19HUElPMTMKKyNkZWZpbmUgSVJRX1VBUlQzX0RDRAlHUElPX0dQSU8xOAorI2RlZmluZSBJUlFfVUFSVDNfRFNSCUdQSU9fR1BJTzE3CisKKyNkZWZpbmUgSVJRX0dQSU9fVUNCMTMwMF9JUlEgSVJRX0dQSU8yMgorI2RlZmluZSBJUlFfR1BJT19QT1dFUl9CVVRUT04gSVJRX0dQSU8wCisKKworLyotLS0gIFBDTUNJQSAgLS0tKi8KKyNkZWZpbmUgR1BJT19DRl9DRCAgICAgICAgICAgICAgR1BJT19HUElPMjQKKyNkZWZpbmUgR1BJT19DRl9JUlEgICAgICAgICAgICAgR1BJT19HUElPMQorI2RlZmluZSBJUlFfR1BJT19DRl9JUlEgICAgICAgICBJUlFfR1BJTzEKKyNkZWZpbmUgSVJRX0dQSU9fQ0ZfQ0QgICAgICAgICAgSVJRX0dQSU8yNAorCisvKi0tLSBTbWFydENhcmQgLS0tKi8KKyNkZWZpbmUgR1BJT19TTUFSVF9DQVJECQlHUElPX0dQSU8xMAorI2RlZmluZSBJUlFfR1BJT19TTUFSRF9DQVJECUlSUV9HUElPMTAKKworLy8gQ1MzIExhdGNoIGlzIHdyaXRlIG9ubHksIGEgc2hhZG93IGlzIG5lY2Vzc2FyeQorCisjZGVmaW5lIENTM0JVU1RZUEUgdW5zaWduZWQgdm9sYXRpbGUgbG9uZworI2RlZmluZSBDUzNfQkFTRSAgICAgICAgMHhmMTAwMDAwMAorCisjZGVmaW5lIFZDQ181Vl9FTiAgICAgICAweDAwMDEgLy8gRm9yIDVWIFBDTUNJQQorI2RlZmluZSBWQ0NfM1ZfRU4gICAgICAgMHgwMDAyIC8vIEZPUiAzLjNWIFBDTUNJQQorI2RlZmluZSBFTjEgICAgICAgICAgICAgMHgwMDA0IC8vIFRoaXMgaXMgb25seSBmb3IgRVBST00ncworI2RlZmluZSBFTjAgICAgICAgICAgICAgMHgwMDA4IC8vIEJvdGggc2hvdWxkIGJlIGVuYWJsZSBmb3IgMy4zViBvciA1VgorI2RlZmluZSBESVNQTEFZX09OICAgICAgMHgwMDEwCisjZGVmaW5lIFBDTUNJQV9CVUZGX0RJUyAweDAwMjAKKyNkZWZpbmUgTVFfUkVTRVQgICAgICAgIDB4MDA0MAorI2RlZmluZSBQQ01DSUFfUkVTRVQgICAgMHgwMDgwCisjZGVmaW5lIERFQ1RfUE9XRVJfT04gICAweDAxMDAKKyNkZWZpbmUgSVJEQV9TRCAgICAgICAgIDB4MDIwMCAvLyBTaHV0ZG93biBmb3IgcG93ZXJzYXZlCisjZGVmaW5lIFJTMjMyX09OICAgICAgICAweDA0MDAKKyNkZWZpbmUgU0RfTUVESUFRICAgICAgIDB4MDgwMCAvLyBTaHV0ZG93biBmb3IgcG93ZXJzYXZlCisjZGVmaW5lIExFRDJfT04gICAgICAgICAweDEwMDAKKyNkZWZpbmUgSVJEQV9NT0RFICAgICAgIDB4MjAwMCAvLyBGYXN0L1Nsb3cgSXJEQSBtb2RlCisjZGVmaW5lIEVOQUJMRV81ViAgICAgICAweDQwMDAgLy8gRW5hYmxlIDVWIGNpcmN1aXQKKyNkZWZpbmUgUkVTRVRfU0lNQ0FSRCAgIDB4ODAwMAorCisjZGVmaW5lIFJTMjMyX0VOQUJMRSAgICAweDA0NDAKKyNkZWZpbmUgUENNQ0lBTUFTSyAgICAgIDB4NDAyZgorCisKK3N0cnVjdCBzaW1wYWRfYmF0dGVyeSB7CisJdW5zaWduZWQgY2hhciBhY19zdGF0dXM7CS8qIGxpbmUgY29ubmVjdGVkIHllcy9ubyAqLworCXVuc2lnbmVkIGNoYXIgc3RhdHVzOwkJLyogYmF0dGVyeSBsb2FkaW5nIHllcy9ubyAqLworCXVuc2lnbmVkIGNoYXIgcGVyY2VudGFnZTsJLyogcGVyY2VudGFnZSBsb2FkZWQgKi8KKwl1bnNpZ25lZCBzaG9ydCBsaWZlOwkJLyogbGlmZSB0aWxsIGVtcHR5ICovCit9OworCisvKiBUaGVzZSBzaG91bGQgbWF0Y2ggdGhlIGFwbV9iaW9zLmggZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0lNUEFEX0FDX1NUQVRVU19BQ19PRkZMSU5FICAgICAgMHgwMAorI2RlZmluZSBTSU1QQURfQUNfU1RBVFVTX0FDX09OTElORSAgICAgICAweDAxCisjZGVmaW5lIFNJTVBBRF9BQ19TVEFUVVNfQUNfQkFDS1VQICAgICAgIDB4MDIgICAvKiBXaGF0IGRvZXMgdGhpcyBtZWFuPyAqLworI2RlZmluZSBTSU1QQURfQUNfU1RBVFVTX0FDX1VOS05PV04gICAgICAweGZmCisKKy8qIFRoZXNlIGJpdGZpZWxkcyBhcmUgcmFyZWx5ICJvcidkIiB0b2dldGhlciAqLworI2RlZmluZSBTSU1QQURfQkFUVF9TVEFUVVNfSElHSCAgICAgICAgICAweDAxCisjZGVmaW5lIFNJTVBBRF9CQVRUX1NUQVRVU19MT1cgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgU0lNUEFEX0JBVFRfU1RBVFVTX0NSSVRJQ0FMICAgICAgMHgwNAorI2RlZmluZSBTSU1QQURfQkFUVF9TVEFUVVNfQ0hBUkdJTkcgICAgICAweDA4CisjZGVmaW5lIFNJTVBBRF9CQVRUX1NUQVRVU19DSEFSR0VfTUFJTiAgIDB4MTAKKyNkZWZpbmUgU0lNUEFEX0JBVFRfU1RBVFVTX0RFQUQgICAgICAgICAgMHgyMCAgIC8qIEJhdHRlcnkgd2lsbCBub3QgY2hhcmdlICovCisjZGVmaW5lIFNJTVBBRF9CQVRUX05PVF9JTlNUQUxMRUQgICAgICAgIDB4MjAgICAvKiBGb3IgZXhwYW5zaW9uIHBhY2sgYmF0dGVyaWVzICovCisjZGVmaW5lIFNJTVBBRF9CQVRUX1NUQVRVU19GVUxMICAgICAgICAgIDB4NDAgICAvKiBCYXR0ZXJ5IGZ1bGx5IGNoYXJnZWQgKGFuZCBjb25uZWN0ZWQgdG8gQUMpICovCisjZGVmaW5lIFNJTVBBRF9CQVRUX1NUQVRVU19OT0JBVFQgICAgICAgIDB4ODAKKyNkZWZpbmUgU0lNUEFEX0JBVFRfU1RBVFVTX1VOS05PV04gICAgICAgMHhmZgorCitleHRlcm4gaW50IHNpbXBhZF9nZXRfYmF0dGVyeShzdHJ1Y3Qgc2ltcGFkX2JhdHRlcnkqICk7CisKKyNlbmRpZiAvLyBfX0FTTV9BUkNIX1NJTVBBRF9ICisKKworCisKKworCisKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL3N5c3RlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmNTIxMTgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvc3lzdGVtLmgKQEAgLTAsMCArMSwyMiBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9zeXN0ZW0uaAorICoKKyAqIENvcHlyaWdodCAoYykgMTk5OSBOaWNvbGFzIFBpdHJlIDxuaWNvQGNhbS5vcmc+CisgKi8KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworc3RhdGljIGlubGluZSB2b2lkIGFyY2hfaWRsZSh2b2lkKQoreworCWNwdV9kb19pZGxlKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSkKK3sKKwlpZiAobW9kZSA9PSAncycpIHsKKwkJLyogSnVtcCBpbnRvIFJPTSBhdCBhZGRyZXNzIDAgKi8KKwkJY3B1X3Jlc2V0KDApOworCX0gZWxzZSB7CisJCS8qIFVzZSBvbi1jaGlwIHJlc2V0IGNhcGFiaWxpdHkgKi8KKwkJUlNSUiA9IFJTUlJfU1dSOworCX0KK30KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC90aW1leC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL3RpbWV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM3YmU5YgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC90aW1leC5oCkBAIC0wLDAgKzEsMTIgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvdGltZXguaAorICoKKyAqIFNBMTEwMCBhcmNoaXRlY3R1cmUgdGltZXggc3BlY2lmaWNhdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggCisgKi8KKworLyoKKyAqIFNBMTEwMCB0aW1lcgorICovCisjZGVmaW5lIENMT0NLX1RJQ0tfUkFURQkJMzY4NjQwMApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL3VuY29tcHJlc3MuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC91bmNvbXByZXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM0NTM1MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC91bmNvbXByZXNzLmgKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWJydXR1cy91bmNvbXByZXNzLmgKKyAqCisgKiAoQykgMTk5OSBOaWNvbGFzIFBpdHJlIDxuaWNvQGNhbS5vcmc+CisgKgorICogUmVvcmdhbmlzZWQgdG8gYmUgbWFjaGluZSBpbmRlcGVuZGVudC4KKyAqLworCisjaW5jbHVkZSAiaGFyZHdhcmUuaCIKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgY29kZSBhc3N1bWVzIHRoZSBzZXJpYWwgcG9ydCBoYXMgYWxyZWFkeSBiZWVuCisgKiBpbml0aWFsaXplZCBieSB0aGUgYm9vdGxvYWRlci4gIFdlIHNlYXJjaCBmb3IgdGhlIGZpcnN0IGVuYWJsZWQKKyAqIHBvcnQgaW4gdGhlIG1vc3QgcHJvYmFibGUgb3JkZXIuICBJZiB5b3UgZGlkbid0IHNldHVwIGEgcG9ydCBpbgorICogeW91ciBib290bG9hZGVyIHRoZW4gbm90aGluZyB3aWxsIGFwcGVhciAod2hpY2ggbWlnaHQgYmUgZGVzaXJlZCkuCisgKi8KKworI2RlZmluZSBVQVJUKHgpCQkoKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKHNlcmlhbF9wb3J0ICsgKHgpKSkKKworc3RhdGljIHZvaWQgcHV0c3RyKCBjb25zdCBjaGFyICpzICkKK3sKKwl1bnNpZ25lZCBsb25nIHNlcmlhbF9wb3J0OworCisJZG8geworCQlzZXJpYWxfcG9ydCA9IF9TZXIzVVRDUjA7CisJCWlmIChVQVJUKFVUQ1IzKSAmIFVUQ1IzX1RYRSkgYnJlYWs7CisJCXNlcmlhbF9wb3J0ID0gX1NlcjFVVENSMDsKKwkJaWYgKFVBUlQoVVRDUjMpICYgVVRDUjNfVFhFKSBicmVhazsKKwkJc2VyaWFsX3BvcnQgPSBfU2VyMlVUQ1IwOworCQlpZiAoVUFSVChVVENSMykgJiBVVENSM19UWEUpIGJyZWFrOworCQlyZXR1cm47CisJfSB3aGlsZSAoMCk7CisKKwlmb3IgKDsgKnM7IHMrKykgeworCQkvKiB3YWl0IGZvciBzcGFjZSBpbiB0aGUgVUFSVCdzIHRyYW5zbWl0dGVyICovCisJCXdoaWxlICghKFVBUlQoVVRTUjEpICYgVVRTUjFfVE5GKSk7CisKKwkJLyogc2VuZCB0aGUgY2hhcmFjdGVyIG91dC4gKi8KKwkJVUFSVChVVERSKSA9ICpzOworCisJCS8qIGlmIGEgTEYsIGFsc28gZG8gQ1IuLi4gKi8KKwkJaWYgKCpzID09IDEwKSB7CisJCQl3aGlsZSAoIShVQVJUKFVUU1IxKSAmIFVUU1IxX1RORikpOworCQkJVUFSVChVVERSKSA9IDEzOworCQl9CisJfQorfQorCisvKgorICogTm90aGluZyB0byBkbyBmb3IgdGhlc2UKKyAqLworI2RlZmluZSBhcmNoX2RlY29tcF9zZXR1cCgpCisjZGVmaW5lIGFyY2hfZGVjb21wX3dkb2coKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL3ZtYWxsb2MuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC92bWFsbG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM1YmM5NAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC92bWFsbG9jLmgKQEAgLTAsMCArMSwxNSBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC92bWFsbG9jLmgKKyAqLworCisvKgorICogSnVzdCBhbnkgYXJiaXRyYXJ5IG9mZnNldCB0byB0aGUgc3RhcnQgb2YgdGhlIHZtYWxsb2MgVk0gYXJlYTogdGhlCisgKiBjdXJyZW50IDhNQiB2YWx1ZSBqdXN0IG1lYW5zIHRoYXQgdGhlcmUgd2lsbCBiZSBhIDhNQiAiaG9sZSIgYWZ0ZXIgdGhlCisgKiBwaHlzaWNhbCBtZW1vcnkgdW50aWwgdGhlIGtlcm5lbCB2aXJ0dWFsIG1lbW9yeSBzdGFydHMuICBUaGF0IG1lYW5zIHRoYXQKKyAqIGFueSBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyB3aWxsIGhvcGVmdWxseSBiZSBjYXVnaHQuCisgKiBUaGUgdm1hbGxvYygpIHJvdXRpbmVzIGxlYXZlcyBhIGhvbGUgb2YgNGtCIGJldHdlZW4gZWFjaCB2bWFsbG9jZWQKKyAqIGFyZWEgZm9yIHRoZSBzYW1lIHJlYXNvbi4gOykKKyAqLworI2RlZmluZSBWTUFMTE9DX09GRlNFVAkgICg4KjEwMjQqMTAyNCkKKyNkZWZpbmUgVk1BTExPQ19TVEFSVAkgICgoKHVuc2lnbmVkIGxvbmcpaGlnaF9tZW1vcnkgKyBWTUFMTE9DX09GRlNFVCkgJiB+KFZNQUxMT0NfT0ZGU0VULTEpKQorI2RlZmluZSBWTUFMTE9DX0VORCAgICAgICAoMHhlODAwMDAwMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNoYXJrL2RlYnVnLW1hY3JvLlMgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zaGFyay9kZWJ1Zy1tYWNyby5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjYjM3ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zaGFyay9kZWJ1Zy1tYWNyby5TCkBAIC0wLDAgKzEsMzEgQEAKKy8qIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLXNoYXJrL2RlYnVnLW1hY3JvLlMKKyAqCisgKiBEZWJ1Z2dpbmcgbWFjcm8gaW5jbHVkZSBoZWFkZXIKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk0LTE5OTkgUnVzc2VsbCBLaW5nCisgKiAgTW92ZWQgZnJvbSBsaW51eC9hcmNoL2FybS9rZXJuZWwvZGVidWcuUyBieSBCZW4gRG9va3MKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyovCisKKwkJLm1hY3JvCWFkZHJ1YXJ0LHJ4CisJCW1vdglccngsICMweGUwMDAwMDAwCisJCW9ycglccngsIFxyeCwgIzB4MDAwMDAzZjgKKwkJLmVuZG0KKworCQkubWFjcm8Jc2VuZHVhcnQscmQscngKKwkJc3RyYglccmQsIFtccnhdCisJCS5lbmRtCisKKwkJLm1hY3JvCWJ1c3l1YXJ0LHJkLHJ4CisJCW1vdglccmQsICMwCisxMDAxOgkJYWRkCVxyZCwgXHJkLCAjMQorCQl0ZXEJXHJkLCAjMHgxMDAwMAorCQlibmUJMTAwMWIKKwkJLmVuZG0KKworCQkubWFjcm8Jd2FpdHVhcnQscmQscngKKwkJLmVuZG0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNoYXJrL2RtYS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2hhcmsvZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM5ODVkNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNoYXJrL2RtYS5oCkBAIC0wLDAgKzEsMTggQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zaGFyay9kbWEuaAorICoKKyAqIGJ5IEFsZXhhbmRlciBTY2h1bHoKKyAqLworI2lmbmRlZiBfX0FTTV9BUkNIX0RNQV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfRE1BX0gKKworLyogVXNlIG9ubHkgdGhlIGxvd2VzdCA0TUIsIG5vdGhpbmcgZWxzZSB3b3Jrcy4KKyAqIFRoZSByZXN0IGlzIG5vdCBETUFhYmxlLiBTZWUgZGV2IC8gIC5wcm9wZXJ0aWVzCisgKiBpbiBPcGVuRmlybXdhcmUuCisgKi8KKyNkZWZpbmUgTUFYX0RNQV9BRERSRVNTCQkweEMwNDAwMDAwCisjZGVmaW5lIE1BWF9ETUFfQ0hBTk5FTFMJOAorI2RlZmluZSBETUFfSVNBX0NBU0NBREUgICAgICAgICA0CisKKyNlbmRpZiAvKiBfQVNNX0FSQ0hfRE1BX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2hhcmsvZW50cnktbWFjcm8uUyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNoYXJrL2VudHJ5LW1hY3JvLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTkyNGYyNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNoYXJrL2VudHJ5LW1hY3JvLlMKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLXNoYXJrL2VudHJ5LW1hY3JvLlMKKyAqCisgKiBMb3ctbGV2ZWwgSVJRIGhlbHBlciBtYWNyb3MgZm9yIFNoYXJrIHBsYXRmb3JtCisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKwkJLm1hY3JvCWRpc2FibGVfZmlxCisJCS5lbmRtCisKKwkJLm1hY3JvCWdldF9pcnFucl9hbmRfYmFzZSwgaXJxbnIsIGlycXN0YXQsIGJhc2UsIHRtcAorCQltb3YJcjQsICMweGUwMDAwMDAwCisKKwkJbW92CVxpcnFzdGF0LCAjMHgwQworCQlzdHJiCVxpcnFzdGF0LCBbcjQsICMweDIwXQkJQG91dGIoMHgwQywgMHgyMCkgLyogUG9sbCBjb21tYW5kICovCisJCWxkcmIJXGlycW5yLCBbcjQsICMweDIwXQkJQGlycSA9IGluYigweDIwKSAmIDcKKwkJYW5kCVxpcnFzdGF0LCBcaXJxbnIsICMweDgwCisJCXRlcQlcaXJxc3RhdCwgIzAKKwkJYmVxCTQzZgorCQlhbmQJXGlycW5yLCBcaXJxbnIsICM3CisJCXRlcQlcaXJxbnIsICMyCisJCWJuZQk0NGYKKzQzOgkJbW92CVxpcnFzdGF0LCAjMHgwQworCQlzdHJiCVxpcnFzdGF0LCBbcjQsICMweGEwXQkJQG91dGIoMHgwQywgMHhBMCkgLyogUG9sbCBjb21tYW5kICovCisJCWxkcmIJXGlycW5yLCBbcjQsICMweGEwXQkJQGlycSA9IChpbmIoMHhBMCkgJiA3KSArIDgKKwkJYW5kCVxpcnFzdGF0LCBcaXJxbnIsICMweDgwCisJCXRlcQlcaXJxc3RhdCwgIzAKKwkJYmVxCTQ0ZgorCQlhbmQJXGlycW5yLCBcaXJxbnIsICM3CisJCWFkZAlcaXJxbnIsIFxpcnFuciwgIzgKKzQ0OgkJdGVxCVxpcnFzdGF0LCAjMAorCQkuZW5kbQorCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zaGFyay9oYXJkd2FyZS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2hhcmsvaGFyZHdhcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDM1ZjhjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2hhcmsvaGFyZHdhcmUuaApAQCAtMCwwICsxLDU3IEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2hhcmsvaGFyZHdhcmUuaAorICoKKyAqIGJ5IEFsZXhhbmRlciBTY2h1bHoKKyAqCisgKiBkZXJpdmVkIGZyb206CisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMTEwL2hhcmR3YXJlLmgKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0xOTk5IFJ1c3NlbGwgS2luZy4KKyAqLworI2lmbmRlZiBfX0FTTV9BUkNIX0hBUkRXQVJFX0gKKyNkZWZpbmUgX19BU01fQVJDSF9IQVJEV0FSRV9ICisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKy8qCisgKiBNYXBwaW5nIGFyZWFzCisgKi8KKyNkZWZpbmUgSU9fQkFTRQkJCTB4ZTAwMDAwMDAKKworLyoKKyAqIFJBTSBkZWZpbml0aW9ucworICovCisjZGVmaW5lIEZMVVNIX0JBU0VfUEhZUwkJMHg4MDAwMDAwMAorCisjZWxzZQorCisjZGVmaW5lIElPX0JBU0UJCQkwCisKKyNlbmRpZgorCisjZGVmaW5lIElPX1NJWkUJCQkweDA4MDAwMDAwCisjZGVmaW5lIElPX1NUQVJUCQkweDQwMDAwMDAwCisjZGVmaW5lIFJPTUNBUkRfU0laRQkJMHgwODAwMDAwMAorI2RlZmluZSBST01DQVJEX1NUQVJUCQkweDEwMDAwMDAwCisKKyNkZWZpbmUgRkxVU0hfQkFTRQkJMHhkZjAwMDAwMAorI2RlZmluZSBQQ0lPX0JBU0UJCTB4ZTAwMDAwMDAKKworCisvKiBkZWZpbmVzIGZvciB0aGUgRnJhbWVidWZmZXIgKi8KKyNkZWZpbmUgRkJfU1RBUlQJCTB4MDYwMDAwMDAKKyNkZWZpbmUgRkJfU0laRQkJCTB4MDEwMDAwMDAKKworI2RlZmluZSBVTkNBQ0hFQUJMRV9BRERSICAgICAgICAweGRmMDEwMDAwCisKKyNkZWZpbmUgU0VRVU9JQV9MRURfR1JFRU4gICAgICAgKDE8PDYpCisjZGVmaW5lIFNFUVVPSUFfTEVEX0FNQkVSICAgICAgICgxPDw1KQorI2RlZmluZSBTRVFVT0lBX0xFRF9CQUNLICAgICAgICAoMTw8NykKKworI2RlZmluZSBwY2liaW9zX2Fzc2lnbl9hbGxfYnVzc2VzKCkgICAgIDEKKworI2RlZmluZSBQQ0lCSU9TX01JTl9JTyAgICAgICAgICAweDYwMDAKKyNkZWZpbmUgUENJQklPU19NSU5fTUVNICAgICAgICAgMHg1MDAwMDAwMAorI2RlZmluZSBQQ0lNRU1fQkFTRQkJMHhlODAwMDAwMAorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2hhcmsvaW8uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNoYXJrL2lvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU3ZjI2YgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNoYXJrL2lvLmgKQEAgLTAsMCArMSwxOTkgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zaGFyay9pby5oCisgKgorICogYnkgQWxleGFuZGVyIFNjaHVsegorICoKKyAqIGRlcml2ZWQgZnJvbToKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2ExMTAvaW8uaAorICogQ29weXJpZ2h0IChDKSAxOTk3LDE5OTggUnVzc2VsbCBLaW5nCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUk1fQVJDSF9JT19ICisjZGVmaW5lIF9fQVNNX0FSTV9BUkNIX0lPX0gKKworI2RlZmluZSBJT19TUEFDRV9MSU1JVCAweGZmZmZmZmZmCisKKy8qCisgKiBXZSB1c2UgdHdvIGRpZmZlcmVudCB0eXBlcyBvZiBhZGRyZXNzaW5nIC0gUEMgc3R5bGUgYWRkcmVzc2VzLCBhbmQgQVJNCisgKiBhZGRyZXNzZXMuICBQQyBzdHlsZSBhY2Nlc3NlcyB0aGUgUEMgaGFyZHdhcmUgd2l0aCB0aGUgbm9ybWFsIFBDIElPCisgKiBhZGRyZXNzZXMsIGVnIDB4M2Y4IGZvciBzZXJpYWwjMS4gIEFSTSBhZGRyZXNzZXMgYXJlIDB4ODAwMDAwMDArCisgKiBhbmQgYXJlIHRyYW5zbGF0ZWQgdG8gdGhlIHN0YXJ0IG9mIElPLgorICovCisjZGVmaW5lIF9fUE9SVF9QQ0lPKHgpCSghKCh4KSAmIDB4ODAwMDAwMDApKQorCisvKgorICogRHluYW1pYyBJTyBmdW5jdGlvbnMgLSBsZXQgdGhlIGNvbXBpbGVyCisgKiBvcHRpbWl6ZSB0aGUgZXhwcmVzc2lvbnMKKyAqLworI2RlZmluZSBERUNMQVJFX0RZTl9PVVQoZm5zdWZmaXgsaW5zdHIpCQkJCQkJXAorc3RhdGljIGlubGluZSB2b2lkIF9fb3V0IyNmbnN1ZmZpeCAodW5zaWduZWQgaW50IHZhbHVlLCB1bnNpZ25lZCBpbnQgcG9ydCkJXAorewkJCQkJCQkJCQlcCisJdW5zaWduZWQgbG9uZyB0ZW1wOwkJCQkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJCVwKKwkidHN0CSUyLCAjMHg4MDAwMDAwMFxuXHQiCQkJCQkJXAorCSJtb3YJJTAsICU0XG5cdCIJCQkJCQkJXAorCSJhZGRlcQklMCwgJTAsICUzXG5cdCIJCQkJCQkJXAorCSJzdHIiIGluc3RyICIJJTEsIFslMCwgJTJdCUAgb3V0IiAjZm5zdWZmaXgJCQlcCisJOiAiPSZyIiAodGVtcCkJCQkJCQkJCVwKKwk6ICJyIiAodmFsdWUpLCAiciIgKHBvcnQpLCAiSXIiIChQQ0lPX0JBU0UgLSBJT19CQVNFKSwgIklyIiAoSU9fQkFTRSkJXAorCTogImNjIik7CQkJCQkJCQlcCit9CisKKyNkZWZpbmUgREVDTEFSRV9EWU5fSU4oc3osZm5zdWZmaXgsaW5zdHIpCQkJCQlcCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHN6IF9faW4jI2Zuc3VmZml4ICh1bnNpZ25lZCBpbnQgcG9ydCkJCVwKK3sJCQkJCQkJCQkJXAorCXVuc2lnbmVkIGxvbmcgdGVtcCwgdmFsdWU7CQkJCQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCQlcCisJInRzdAklMiwgIzB4ODAwMDAwMDBcblx0IgkJCQkJCVwKKwkibW92CSUwLCAlNFxuXHQiCQkJCQkJCVwKKwkiYWRkZXEJJTAsICUwLCAlM1xuXHQiCQkJCQkJCVwKKwkibGRyIiBpbnN0ciAiCSUxLCBbJTAsICUyXQlAIGluIiAjZm5zdWZmaXgJCQkJXAorCTogIj0mciIgKHRlbXApLCAiPXIiICh2YWx1ZSkJCQkJCQlcCisJOiAiciIgKHBvcnQpLCAiSXIiIChQQ0lPX0JBU0UgLSBJT19CQVNFKSwgIklyIiAoSU9fQkFTRSkJCVwKKwk6ICJjYyIpOwkJCQkJCQkJXAorCXJldHVybiAodW5zaWduZWQgc3opdmFsdWU7CQkJCQkJXAorfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBfX2lvYWRkciAodW5zaWduZWQgaW50IHBvcnQpCQkJXAorewkJCQkJCQkJCQlcCisJaWYgKF9fUE9SVF9QQ0lPKHBvcnQpKQkJCQkJCQlcCisJCXJldHVybiAodW5zaWduZWQgaW50KShQQ0lPX0JBU0UgKyAocG9ydCkpOwkJCVwKKwllbHNlCQkJCQkJCQkJXAorCQlyZXR1cm4gKHVuc2lnbmVkIGludCkoSU9fQkFTRSArIChwb3J0KSk7CQkJXAorfQorCisjZGVmaW5lIERFQ0xBUkVfSU8oc3osZm5zdWZmaXgsaW5zdHIpCVwKKwlERUNMQVJFX0RZTl9PVVQoZm5zdWZmaXgsaW5zdHIpCVwKKwlERUNMQVJFX0RZTl9JTihzeixmbnN1ZmZpeCxpbnN0cikKKworREVDTEFSRV9JTyhjaGFyLGIsImIiKQorREVDTEFSRV9JTyhzaG9ydCx3LCJoIikKK0RFQ0xBUkVfSU8obG9uZyxsLCIiKQorCisjdW5kZWYgREVDTEFSRV9JTworI3VuZGVmIERFQ0xBUkVfRFlOX09VVAorI3VuZGVmIERFQ0xBUkVfRFlOX0lOCisKKy8qCisgKiBDb25zdGFudCBhZGRyZXNzIElPIGZ1bmN0aW9ucworICoKKyAqIFRoZXNlIGhhdmUgdG8gYmUgbWFjcm9zIGZvciB0aGUgJ0onIGNvbnN0cmFpbnQgdG8gd29yayAtCisgKiArLy00MDk2IGltbWVkaWF0ZSBvcGVyYW5kLgorICovCisjZGVmaW5lIF9fb3V0YmModmFsdWUscG9ydCkJCQkJCQkJXAorKHsJCQkJCQkJCQkJXAorCWlmIChfX1BPUlRfUENJTygocG9ydCkpKQkJCQkJCVwKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAorCQkic3RyYgklMCwgWyUxLCAlMl0JCUAgb3V0YmMiCQkJXAorCQk6IDogInIiICh2YWx1ZSksICJyIiAoUENJT19CQVNFKSwgIkpyIiAocG9ydCkpOwkJXAorCWVsc2UJCQkJCQkJCQlcCisJCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCVwKKwkJInN0cmIJJTAsIFslMSwgJTJdCQlAIG91dGJjIgkJCVwKKwkJOiA6ICJyIiAodmFsdWUpLCAiciIgKElPX0JBU0UpLCAiciIgKHBvcnQpKTsJCVwKK30pCisKKyNkZWZpbmUgX19pbmJjKHBvcnQpCQkJCQkJCQlcCisoewkJCQkJCQkJCQlcCisJdW5zaWduZWQgY2hhciByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWlmIChfX1BPUlRfUENJTygocG9ydCkpKQkJCQkJCVwKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAorCQkibGRyYgklMCwgWyUxLCAlMl0JCUAgaW5iYyIJCQkJXAorCQk6ICI9ciIgKHJlc3VsdCkgOiAiciIgKFBDSU9fQkFTRSksICJKciIgKHBvcnQpKTsJCVwKKwllbHNlCQkJCQkJCQkJXAorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQlcCisJCSJsZHJiCSUwLCBbJTEsICUyXQkJQCBpbmJjIgkJCQlcCisJCTogIj1yIiAocmVzdWx0KSA6ICJyIiAoSU9fQkFTRSksICJyIiAocG9ydCkpOwkJXAorCXJlc3VsdDsJCQkJCQkJCQlcCit9KQorCisjZGVmaW5lIF9fb3V0d2ModmFsdWUscG9ydCkJCQkJCQkJXAorKHsJCQkJCQkJCQkJXAorCXVuc2lnbmVkIGxvbmcgdiA9IHZhbHVlOwkJCQkJCVwKKwlpZiAoX19QT1JUX1BDSU8oKHBvcnQpKSkJCQkJCQlcCisJCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCVwKKwkJInN0cmgJJTAsIFslMSwgJTJdCQlAIG91dHdjIgkJCVwKKwkJOiA6ICJyIiAodnx2PDwxNiksICJyIiAoUENJT19CQVNFKSwgIkpyIiAocG9ydCkpOwlcCisJZWxzZQkJCQkJCQkJCVwKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAorCQkic3RyaAklMCwgWyUxLCAlMl0JCUAgb3V0d2MiCQkJXAorCQk6IDogInIiICh2fHY8PDE2KSwgInIiIChJT19CQVNFKSwgInIiIChwb3J0KSk7CQlcCit9KQorCisjZGVmaW5lIF9faW53Yyhwb3J0KQkJCQkJCQkJXAorKHsJCQkJCQkJCQkJXAorCXVuc2lnbmVkIHNob3J0IHJlc3VsdDsJCQkJCQkJXAorCWlmIChfX1BPUlRfUENJTygocG9ydCkpKQkJCQkJCVwKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAorCQkibGRyaAklMCwgWyUxLCAlMl0JCUAgaW53YyIJCQkJXAorCQk6ICI9ciIgKHJlc3VsdCkgOiAiciIgKFBDSU9fQkFTRSksICJKciIgKHBvcnQpKTsJCVwKKwllbHNlCQkJCQkJCQkJXAorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQlcCisJCSJsZHJoCSUwLCBbJTEsICUyXQkJQCBpbndjIgkJCQlcCisJCTogIj1yIiAocmVzdWx0KSA6ICJyIiAoSU9fQkFTRSksICJyIiAocG9ydCkpOwkJXAorCXJlc3VsdCAmIDB4ZmZmZjsJCQkJCQkJXAorfSkKKworI2RlZmluZSBfX291dGxjKHZhbHVlLHBvcnQpCQkJCQkJCQlcCisoewkJCQkJCQkJCQlcCisJdW5zaWduZWQgbG9uZyB2ID0gdmFsdWU7CQkJCQkJXAorCWlmIChfX1BPUlRfUENJTygocG9ydCkpKQkJCQkJCVwKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAorCQkic3RyCSUwLCBbJTEsICUyXQkJQCBvdXRsYyIJCQlcCisJCTogOiAiciIgKHYpLCAiciIgKFBDSU9fQkFTRSksICJKciIgKHBvcnQpKTsJCVwKKwllbHNlCQkJCQkJCQkJXAorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQlcCisJCSJzdHIJJTAsIFslMSwgJTJdCQlAIG91dGxjIgkJCVwKKwkJOiA6ICJyIiAodiksICJyIiAoSU9fQkFTRSksICJyIiAocG9ydCkpOwkJCVwKK30pCisKKyNkZWZpbmUgX19pbmxjKHBvcnQpCQkJCQkJCQlcCisoewkJCQkJCQkJCQlcCisJdW5zaWduZWQgbG9uZyByZXN1bHQ7CQkJCQkJCVwKKwlpZiAoX19QT1JUX1BDSU8oKHBvcnQpKSkJCQkJCQlcCisJCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCVwKKwkJImxkcgklMCwgWyUxLCAlMl0JCUAgaW5sYyIJCQkJXAorCQk6ICI9ciIgKHJlc3VsdCkgOiAiciIgKFBDSU9fQkFTRSksICJKciIgKHBvcnQpKTsJCVwKKwllbHNlCQkJCQkJCQkJXAorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQlcCisJCSJsZHIJJTAsIFslMSwgJTJdCQlAIGlubGMiCQkJCVwKKwkJOiAiPXIiIChyZXN1bHQpIDogInIiIChJT19CQVNFKSwgInIiIChwb3J0KSk7CQlcCisJcmVzdWx0OwkJCQkJCQkJCVwKK30pCisKKyNkZWZpbmUgX19pb2FkZHJjKHBvcnQpCQkJCQkJCQlcCisoewkJCQkJCQkJCQlcCisJdW5zaWduZWQgbG9uZyBhZGRyOwkJCQkJCQlcCisJaWYgKF9fUE9SVF9QQ0lPKChwb3J0KSkpCQkJCQkJXAorCQlhZGRyID0gUENJT19CQVNFICsgKHBvcnQpOwkJCQlcCisJZWxzZQkJCQkJCQkJCVwKKwkJYWRkciA9IElPX0JBU0UgKyAocG9ydCk7CQkJCQlcCisJYWRkcjsJCQkJCQkJCQlcCit9KQorCisjZGVmaW5lIF9fbWVtX3BjaShhZGRyKSAoYWRkcikKKworI2RlZmluZSBpbmIocCkJIAkoX19idWlsdGluX2NvbnN0YW50X3AoKHApKSA/IF9faW5iYyhwKSAgICA6IF9faW5iKHApKQorI2RlZmluZSBpbncocCkJIAkoX19idWlsdGluX2NvbnN0YW50X3AoKHApKSA/IF9faW53YyhwKSAgICA6IF9faW53KHApKQorI2RlZmluZSBpbmwocCkJIAkoX19idWlsdGluX2NvbnN0YW50X3AoKHApKSA/IF9faW5sYyhwKSAgICA6IF9faW5sKHApKQorI2RlZmluZSBvdXRiKHYscCkJKF9fYnVpbHRpbl9jb25zdGFudF9wKChwKSkgPyBfX291dGJjKHYscCkgOiBfX291dGIodixwKSkKKyNkZWZpbmUgb3V0dyh2LHApCShfX2J1aWx0aW5fY29uc3RhbnRfcCgocCkpID8gX19vdXR3Yyh2LHApIDogX19vdXR3KHYscCkpCisjZGVmaW5lIG91dGwodixwKQkoX19idWlsdGluX2NvbnN0YW50X3AoKHApKSA/IF9fb3V0bGModixwKSA6IF9fb3V0bCh2LHApKQorCisvKgorICogVHJhbnNsYXRlZCBhZGRyZXNzIElPIGZ1bmN0aW9ucworICoKKyAqIElPIGFkZHJlc3MgaGFzIGFscmVhZHkgYmVlbiB0cmFuc2xhdGVkIHRvIGEgdmlydHVhbCBhZGRyZXNzCisgKi8KKyNkZWZpbmUgb3V0Yl90KHYscCkJCQkJCQkJCVwKKwkoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKHApID0gKHYpKQorCisjZGVmaW5lIGluYl90KHApCQkJCQkJCQlcCisJKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKShwKSkKKworI2RlZmluZSBvdXRsX3QodixwKQkJCQkJCQkJXAorCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikocCkgPSAodikpCisKKyNkZWZpbmUgaW5sX3QocCkJCQkJCQkJCVwKKwkoKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKHApKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNoYXJrL2lycXMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNoYXJrL2lycXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzZjYzk3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2hhcmsvaXJxcy5oCkBAIC0wLDAgKzEsMTMgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zaGFyay9pcnFzLmgKKyAqCisgKiBieSBBbGV4YW5kZXIgU2NodWx6CisgKi8KKworI2RlZmluZSBOUl9JUlFTCQkJMTYKKworI2RlZmluZSBJUlFfSVNBX0tFWUJPQVJECSAxCisjZGVmaW5lIFJUQ19JUlEJCQkgOAorI2RlZmluZSBJODA0Ml9LQkRfSVJRCQkgMQorI2RlZmluZSBJODA0Ml9BVVhfSVJRCQkxMgorI2RlZmluZSBJUlFfSEFSRERJU0sgICAgICAgICAgICAxNApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2hhcmsvbWVtb3J5LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zaGFyay9tZW1vcnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmY5NTZkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2hhcmsvbWVtb3J5LmgKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLXNoYXJrL21lbW9yeS5oCisgKgorICogYnkgQWxleGFuZGVyIFNjaHVsegorICoKKyAqIGRlcml2ZWQgZnJvbToKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2ExMTAvbWVtb3J5LmgKKyAqIENvcHlyaWdodCAoYykgMTk5Ni0xOTk5IFJ1c3NlbGwgS2luZy4KKyAqLworI2lmbmRlZiBfX0FTTV9BUkNIX01FTU9SWV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfTUVNT1JZX0gKKworI2luY2x1ZGUgPGFzbS9zaXplcy5oPgorCisvKgorICogUGh5c2ljYWwgRFJBTSBvZmZzZXQuCisgKi8KKyNkZWZpbmUgUEhZU19PRkZTRVQgICAgICgweDA4MDAwMDAwVUwpCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2FyY2hfYWRqdXN0X3pvbmVzKGludCBub2RlLCB1bnNpZ25lZCBsb25nICp6b25lX3NpemUsIHVuc2lnbmVkIGxvbmcgKnpob2xlX3NpemUpIAoreworICBpZiAobm9kZSAhPSAwKSByZXR1cm47CisgIC8qIE9ubHkgdGhlIGZpcnN0IDQgTUIgKD0xMDI0IFBhZ2VzKSBhcmUgdXNhYmxlIGZvciBETUEgKi8KKyAgem9uZV9zaXplWzFdID0gem9uZV9zaXplWzBdIC0gMTAyNDsKKyAgem9uZV9zaXplWzBdID0gMTAyNDsKKyAgemhvbGVfc2l6ZVsxXSA9IHpob2xlX3NpemVbMF07CisgIHpob2xlX3NpemVbMF0gPSAwOworfQorCisjZGVmaW5lIGFyY2hfYWRqdXN0X3pvbmVzKG5vZGUsIHNpemUsIGhvbGVzKSBcCisJX19hcmNoX2FkanVzdF96b25lcyhub2RlLCBzaXplLCBob2xlcykKKworI2RlZmluZSBJU0FfRE1BX1RIUkVTSE9MRAkoUEhZU19PRkZTRVQgKyBTWl80TSAtIDEpCisKKyNlbmRpZgorCisjZGVmaW5lIF9fdmlydF90b19idXMoeCkJX192aXJ0X3RvX3BoeXMoeCkKKyNkZWZpbmUgX19idXNfdG9fdmlydCh4KQlfX3BoeXNfdG9fdmlydCh4KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNoYXJrL3BhcmFtLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zaGFyay9wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5N2VlYjcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zaGFyay9wYXJhbS5oCkBAIC0wLDAgKzEsNSBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zaGFyay9wYXJhbS5oCisgKgorICogYnkgQWxleGFuZGVyIFNjaHVsegorICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zaGFyay9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNoYXJrL3N5c3RlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxMmQ3NzEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zaGFyay9zeXN0ZW0uaApAQCAtMCwwICsxLDI4IEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2hhcmsvc3lzdGVtLmgKKyAqCisgKiBieSBBbGV4YW5kZXIgU2NodWx6CisgKi8KKyNpZm5kZWYgX19BU01fQVJDSF9TWVNURU1fSAorI2RlZmluZSBfX0FTTV9BUkNIX1NZU1RFTV9ICisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKworc3RhdGljIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUpCit7CisJc2hvcnQgdGVtcDsKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCS8qIFJlc2V0IHRoZSBNYWNoaW5lIHZpYSBwY1szXSBvZiB0aGUgc2VxdW9pYSBjaGlwc2V0ICovCisJb3V0dygweDA5LDB4MjQpOworCXRlbXA9aW53KDB4MjYpOworCXRlbXAgPSB0ZW1wIHwgKDE8PDMpIHwgKDE8PDEwKTsKKwlvdXR3KDB4MDksMHgyNCk7CisJb3V0dyh0ZW1wLDB4MjYpOworCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2lkbGUodm9pZCkKK3sKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zaGFyay90aW1leC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2hhcmsvdGltZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDAyZDI1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2hhcmsvdGltZXguaApAQCAtMCwwICsxLDcgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zaGFyay90aW1leC5oCisgKgorICogYnkgQWxleGFuZGVyIFNjaHVsegorICovCisKKyNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFIDExOTMxODAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNoYXJrL3VuY29tcHJlc3MuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNoYXJrL3VuY29tcHJlc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTBhOGUwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2hhcmsvdW5jb21wcmVzcy5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zaGFyay91bmNvbXByZXNzLmgKKyAqIGJ5IEFsZXhhbmRlciBTY2h1bHoKKyAqCisgKiBkZXJpdmVkIGZyb206CisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMjg1L3VuY29tcHJlc3MuaAorICogQ29weXJpZ2h0IChDKSAxOTk2LDE5OTcsMTk5OCBSdXNzZWxsIEtpbmcKKyAqLworCisjZGVmaW5lIFNFUklBTF9CQVNFICgodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKTB4NDAwMDAzZjgpCisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgcHV0YyhjaGFyIGMpCit7CisJaW50IHQ7CisKKwlTRVJJQUxfQkFTRVswXSA9IGM7CisJdD0weDEwMDAwOworCXdoaWxlICh0LS0pOworfQorCisvKgorICogVGhpcyBkb2VzIG5vdCBhcHBlbmQgYSBuZXdsaW5lCisgKi8KK3N0YXRpYyB2b2lkIHB1dHN0cihjb25zdCBjaGFyICpzKQoreworCXdoaWxlICgqcykgeworCQlwdXRjKCpzKTsKKwkJaWYgKCpzID09ICdcbicpCisJCQlwdXRjKCdccicpOworCQlzKys7CisJfQorfQorCisjaWZkZWYgREVCVUcKK3N0YXRpYyB2b2lkIHB1dG4odW5zaWduZWQgbG9uZyB6KQoreworCWludCBpOworCWNoYXIgeDsKKworCXB1dGMoJzAnKTsKKwlwdXRjKCd4Jyk7CisJZm9yIChpPTA7aTw4O2krKykgeworCQl4PScwJysoKHo+PigoNy1pKSo0KSkmMHhmKTsKKwkJaWYgKHg+JzknKSB4PXgtJzAnKydBJy0xMDsKKwkJcHV0Yyh4KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHB1dHIoKQoreworCXB1dGMoJ1xuJyk7CisJcHV0YygnXHInKTsKK30KKyNlbmRpZgorCisvKgorICogbm90aGluZyB0byBkbworICovCisjZGVmaW5lIGFyY2hfZGVjb21wX3NldHVwKCkKKyNkZWZpbmUgYXJjaF9kZWNvbXBfd2RvZygpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zaGFyay92bWFsbG9jLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zaGFyay92bWFsbG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNjMjAwOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNoYXJrL3ZtYWxsb2MuaApAQCAtMCwwICsxLDE1IEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtcnBjL3ZtYWxsb2MuaAorICovCisKKy8qCisgKiBKdXN0IGFueSBhcmJpdHJhcnkgb2Zmc2V0IHRvIHRoZSBzdGFydCBvZiB0aGUgdm1hbGxvYyBWTSBhcmVhOiB0aGUKKyAqIGN1cnJlbnQgOE1CIHZhbHVlIGp1c3QgbWVhbnMgdGhhdCB0aGVyZSB3aWxsIGJlIGEgOE1CICJob2xlIiBhZnRlciB0aGUKKyAqIHBoeXNpY2FsIG1lbW9yeSB1bnRpbCB0aGUga2VybmVsIHZpcnR1YWwgbWVtb3J5IHN0YXJ0cy4gIFRoYXQgbWVhbnMgdGhhdAorICogYW55IG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIHdpbGwgaG9wZWZ1bGx5IGJlIGNhdWdodC4KKyAqIFRoZSB2bWFsbG9jKCkgcm91dGluZXMgbGVhdmVzIGEgaG9sZSBvZiA0a0IgYmV0d2VlbiBlYWNoIHZtYWxsb2NlZAorICogYXJlYSBmb3IgdGhlIHNhbWUgcmVhc29uLiA7KQorICovCisjZGVmaW5lIFZNQUxMT0NfT0ZGU0VUCSAgKDgqMTAyNCoxMDI0KQorI2RlZmluZSBWTUFMTE9DX1NUQVJUCSAgKCgodW5zaWduZWQgbG9uZyloaWdoX21lbW9yeSArIFZNQUxMT0NfT0ZGU0VUKSAmIH4oVk1BTExPQ19PRkZTRVQtMSkpCisjZGVmaW5lIFZNQUxMT0NfRU5EICAgICAgIChQQUdFX09GRlNFVCArIDB4MTAwMDAwMDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC12ZXJzYXRpbGUvZGVidWctbWFjcm8uUyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXZlcnNhdGlsZS9kZWJ1Zy1tYWNyby5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5ZTM4YWMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC12ZXJzYXRpbGUvZGVidWctbWFjcm8uUwpAQCAtMCwwICsxLDM5IEBACisvKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC12ZXJzYXRpbGUvZGVidWctbWFjcm8uUworICoKKyAqIERlYnVnZ2luZyBtYWNybyBpbmNsdWRlIGhlYWRlcgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTQtMTk5OSBSdXNzZWxsIEtpbmcKKyAqICBNb3ZlZCBmcm9tIGxpbnV4L2FyY2gvYXJtL2tlcm5lbC9kZWJ1Zy5TIGJ5IEJlbiBEb29rcworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorKi8KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9hbWJhX3NlcmlhbC5oPgorCisJCS5tYWNybwlhZGRydWFydCxyeAorCQltcmMJcDE1LCAwLCBccngsIGMxLCBjMAorCQl0c3QJXHJ4LCAjMQkJCUAgTU1VIGVuYWJsZWQ/CisJCW1vdmVxCVxyeCwgICAgICAjMHgxMDAwMDAwMAorCQltb3ZuZQlccngsICAgICAgIzB4ZjEwMDAwMDAJQCB2aXJ0dWFsIGJhc2UKKwkJb3JyCVxyeCwgXHJ4LCAjMHgwMDFGMDAwMAorCQlvcnIJXHJ4LCBccngsICMweDAwMDAxMDAwCisJCS5lbmRtCisKKwkJLm1hY3JvCXNlbmR1YXJ0LHJkLHJ4CisJCXN0cmIJXHJkLCBbXHJ4LCAjVUFSVDAxeF9EUl0KKwkJLmVuZG0KKworCQkubWFjcm8Jd2FpdHVhcnQscmQscngKKzEwMDE6CQlsZHIJXHJkLCBbXHJ4LCAjMHgxOF0JQCBVQVJURkxHCisJCXRzdAlccmQsICMxIDw8IDUJCUAgVUFSVEZMR1VUWEZGIC0gMSB3aGVuIGZ1bGwKKwkJYm5lCTEwMDFiCisJCS5lbmRtCisKKwkJLm1hY3JvCWJ1c3l1YXJ0LHJkLHJ4CisxMDAxOgkJbGRyCVxyZCwgW1xyeCwgIzB4MThdCUAgVUFSVEZMRworCQl0c3QJXHJkLCAjMSA8PCAzCQlAIFVBUlRGTEdVQlVTWSAtIDEgd2hlbiBidXN5CisJCWJuZQkxMDAxYgorCQkuZW5kbQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtdmVyc2F0aWxlL2RtYS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtdmVyc2F0aWxlL2RtYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjYzhhYzIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC12ZXJzYXRpbGUvZG1hLmgKQEAgLTAsMCArMSwyNyBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC12ZXJzYXRpbGUvZG1hLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzIEFSTSBMaW1pdGVkLgorICogIENvcHlyaWdodCAoQykgMTk5NywxOTk4IFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworI2lmbmRlZiBfX0FTTV9BUkNIX0RNQV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfRE1BX0gKKworI2RlZmluZSBNQVhfRE1BX0FERFJFU1MJCTB4ZmZmZmZmZmYKKyNkZWZpbmUgTUFYX0RNQV9DSEFOTkVMUwkwCisKKyNlbmRpZiAvKiBfQVNNX0FSQ0hfRE1BX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXZlcnNhdGlsZS9lbnRyeS1tYWNyby5TIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtdmVyc2F0aWxlL2VudHJ5LW1hY3JvLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTBlNGU5NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXZlcnNhdGlsZS9lbnRyeS1tYWNyby5TCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC12ZXJzYXRpbGUvZW50cnktbWFjcm8uUworICoKKyAqIExvdy1sZXZlbCBJUlEgaGVscGVyIG1hY3JvcyBmb3IgVmVyc2F0aWxlIHBsYXRmb3JtcworICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisJCQkubWFjcm8JZGlzYWJsZV9maXEKKwkJLmVuZG0KKworCQkubWFjcm8JZ2V0X2lycW5yX2FuZF9iYXNlLCBpcnFuciwgaXJxc3RhdCwgYmFzZSwgdG1wCisJCWxkcglcYmFzZSwgPUlPX0FERFJFU1MoVkVSU0FUSUxFX1ZJQ19CQVNFKQorCQlsZHIJXGlycXN0YXQsIFtcYmFzZSwgI1ZJQ19JUlFfU1RBVFVTXQlAIGdldCBtYXNrZWQgc3RhdHVzCisJCW1vdglcaXJxbnIsICMwCisJCXRlcQlcaXJxc3RhdCwgIzAKKwkJYmVxCTEwMDNmCisKKzEwMDE6CQl0c3QJXGlycXN0YXQsICMxNQorCQlibmUJMTAwMmYKKwkJYWRkCVxpcnFuciwgXGlycW5yLCAjNAorCQltb3ZzCVxpcnFzdGF0LCBcaXJxc3RhdCwgbHNyICM0CisJCWJuZQkxMDAxYgorMTAwMjoJCXRzdAlcaXJxc3RhdCwgIzEKKwkJYm5lCTEwMDNmCisJCWFkZAlcaXJxbnIsIFxpcnFuciwgIzEKKwkJbW92cwlcaXJxc3RhdCwgXGlycXN0YXQsIGxzciAjMQorCQlibmUJMTAwMmIKKzEwMDM6CQkvKiBFUSB3aWxsIGJlIHNldCBpZiBubyBpcnFzIHBlbmRpbmcgKi8KKworQAkJY2x6CVxpcnFuciwgXGlycXN0YXQKK0AxMDAzOgkJLyogRVEgd2lsbCBiZSBzZXQgaWYgd2UgcmVhY2ggTUFYSVJRTlVNICovCisJCS5lbmRtCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXZlcnNhdGlsZS9oYXJkd2FyZS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtdmVyc2F0aWxlL2hhcmR3YXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVmYjRhMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXZlcnNhdGlsZS9oYXJkd2FyZS5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtdmVyc2F0aWxlL2hhcmR3YXJlLmgKKyAqCisgKiAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBoYXJkd2FyZSBkZWZpbml0aW9ucyBvZiB0aGUgVmVyc2F0aWxlIGJvYXJkcy4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzIEFSTSBMaW1pdGVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworI2lmbmRlZiBfX0FTTV9BUkNIX0hBUkRXQVJFX0gKKyNkZWZpbmUgX19BU01fQVJDSF9IQVJEV0FSRV9ICisKKyNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9wbGF0Zm9ybS5oPgorCisvLyBGSVhNRSA9IFBDSSBzZXR0aW5ncyBuZWVkIHRvIGJlIGZpeGVkISEhISEKKworLyoKKyAqIFNpbWlsYXIgdG8gYWJvdmUsIGJ1dCBmb3IgUENJIGFkZHJlc3NlcyAobWVtb3J5LCBJTywgQ29uZmlnIGFuZCB0aGUKKyAqIFYzIGNoaXAgaXRzZWxmKS4gIFdBUk5JTkc6IHRoaXMgaGFzIHRvIG1pcnJvciBkZWZpbml0aW9ucyBpbiBwbGF0Zm9ybS5oCisgKi8KKyNkZWZpbmUgUENJX01FTU9SWV9WQUREUiAgICAgICAweGU4MDAwMDAwCisjZGVmaW5lIFBDSV9DT05GSUdfVkFERFIgICAgICAgMHhlYzAwMDAwMAorI2RlZmluZSBQQ0lfVjNfVkFERFIgICAgICAgICAgIDB4ZWQwMDAwMDAKKyNkZWZpbmUgUENJX0lPX1ZBRERSICAgICAgICAgICAweGVlMDAwMDAwCisKKyNkZWZpbmUgUENJT19CQVNFCQlQQ0lfSU9fVkFERFIKKyNkZWZpbmUgUENJTUVNX0JBU0UJCVBDSV9NRU1PUllfVkFERFIKKworLyogbWFjcm8gdG8gZ2V0IGF0IElPIHNwYWNlIHdoZW4gcnVubmluZyB2aXJ0dWFsbHkgKi8KKyNkZWZpbmUgSU9fQUREUkVTUyh4KQkJKCgoeCkgJiAweDBmZmZmZmZmKSArICgoKHgpID4+IDQpICYgMHgwZjAwMDAwMCkgKyAweGYwMDAwMDAwKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXZlcnNhdGlsZS9pby5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtdmVyc2F0aWxlL2lvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJiNzE1OAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXZlcnNhdGlsZS9pby5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtdmVyc2F0aWxlL2lvLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzIEFSTSBMaW1pdGVkCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisjaWZuZGVmIF9fQVNNX0FSTV9BUkNIX0lPX0gKKyNkZWZpbmUgX19BU01fQVJNX0FSQ0hfSU9fSAorCisjZGVmaW5lIElPX1NQQUNFX0xJTUlUIDB4ZmZmZgorCisjZGVmaW5lIF9faW8oYSkJCQkoKHZvaWQgX19pb21lbSAqKShhKSkKKyNkZWZpbmUgX19tZW1fcGNpKGEpCQkoYSkKKyNkZWZpbmUgX19tZW1faXNhKGEpCQkoYSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC12ZXJzYXRpbGUvaXJxcy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtdmVyc2F0aWxlL2lycXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDVhYTg0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtdmVyc2F0aWxlL2lycXMuaApAQCAtMCwwICsxLDIxMSBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC12ZXJzYXRpbGUvaXJxcy5oCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMyBBUk0gTGltaXRlZAorICogIENvcHlyaWdodCAoQykgMjAwMCBEZWVwIEJsdWUgU29sdXRpb25zIEx0ZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGFzbS9hcmNoL3BsYXRmb3JtLmg+CisKKy8qIAorICogIElSUSBpbnRlcnJ1cHRzIGRlZmluaXRpb25zIGFyZSB0aGUgc2FtZSB0aGUgSU5UIGRlZmluaXRpb25zCisgKiAgaGVsZCB3aXRoaW4gcGxhdGZvcm0uaAorICovCisjZGVmaW5lIElSUV9WSUNfU1RBUlQJCTAKKyNkZWZpbmUgSVJRX1dET0dJTlQJCShJUlFfVklDX1NUQVJUICsgSU5UX1dET0dJTlQpCisjZGVmaW5lIElSUV9TT0ZUSU5UCQkoSVJRX1ZJQ19TVEFSVCArIElOVF9TT0ZUSU5UKQorI2RlZmluZSBJUlFfQ09NTVJ4CQkoSVJRX1ZJQ19TVEFSVCArIElOVF9DT01NUngpCisjZGVmaW5lIElSUV9DT01NVHgJCShJUlFfVklDX1NUQVJUICsgSU5UX0NPTU1UeCkKKyNkZWZpbmUgSVJRX1RJTUVSSU5UMF8xCQkoSVJRX1ZJQ19TVEFSVCArIElOVF9USU1FUklOVDBfMSkKKyNkZWZpbmUgSVJRX1RJTUVSSU5UMl8zCQkoSVJRX1ZJQ19TVEFSVCArIElOVF9USU1FUklOVDJfMykKKyNkZWZpbmUgSVJRX0dQSU9JTlQwCQkoSVJRX1ZJQ19TVEFSVCArIElOVF9HUElPSU5UMCkKKyNkZWZpbmUgSVJRX0dQSU9JTlQxCQkoSVJRX1ZJQ19TVEFSVCArIElOVF9HUElPSU5UMSkKKyNkZWZpbmUgSVJRX0dQSU9JTlQyCQkoSVJRX1ZJQ19TVEFSVCArIElOVF9HUElPSU5UMikKKyNkZWZpbmUgSVJRX0dQSU9JTlQzCQkoSVJRX1ZJQ19TVEFSVCArIElOVF9HUElPSU5UMykKKyNkZWZpbmUgSVJRX1JUQ0lOVAkJKElSUV9WSUNfU1RBUlQgKyBJTlRfUlRDSU5UKQorI2RlZmluZSBJUlFfU1NQSU5UCQkoSVJRX1ZJQ19TVEFSVCArIElOVF9TU1BJTlQpCisjZGVmaW5lIElSUV9VQVJUSU5UMAkJKElSUV9WSUNfU1RBUlQgKyBJTlRfVUFSVElOVDApCisjZGVmaW5lIElSUV9VQVJUSU5UMQkJKElSUV9WSUNfU1RBUlQgKyBJTlRfVUFSVElOVDEpCisjZGVmaW5lIElSUV9VQVJUSU5UMgkJKElSUV9WSUNfU1RBUlQgKyBJTlRfVUFSVElOVDIpCisjZGVmaW5lIElSUV9TQ0lJTlQJCShJUlFfVklDX1NUQVJUICsgSU5UX1NDSUlOVCkKKyNkZWZpbmUgSVJRX0NMQ0RJTlQJCShJUlFfVklDX1NUQVJUICsgSU5UX0NMQ0RJTlQpCisjZGVmaW5lIElSUV9ETUFJTlQJCShJUlFfVklDX1NUQVJUICsgSU5UX0RNQUlOVCkKKyNkZWZpbmUgSVJRX1BXUkZBSUxJTlQgCQkoSVJRX1ZJQ19TVEFSVCArIElOVF9QV1JGQUlMSU5UKQorI2RlZmluZSBJUlFfTUJYSU5UCQkoSVJRX1ZJQ19TVEFSVCArIElOVF9NQlhJTlQpCisjZGVmaW5lIElSUV9HTkRJTlQJCShJUlFfVklDX1NUQVJUICsgSU5UX0dORElOVCkKKyNkZWZpbmUgSVJRX1ZJQ1NPVVJDRTIxCQkoSVJRX1ZJQ19TVEFSVCArIElOVF9WSUNTT1VSQ0UyMSkKKyNkZWZpbmUgSVJRX1ZJQ1NPVVJDRTIyCQkoSVJRX1ZJQ19TVEFSVCArIElOVF9WSUNTT1VSQ0UyMikKKyNkZWZpbmUgSVJRX1ZJQ1NPVVJDRTIzCQkoSVJRX1ZJQ19TVEFSVCArIElOVF9WSUNTT1VSQ0UyMykKKyNkZWZpbmUgSVJRX1ZJQ1NPVVJDRTI0CQkoSVJRX1ZJQ19TVEFSVCArIElOVF9WSUNTT1VSQ0UyNCkKKyNkZWZpbmUgSVJRX1ZJQ1NPVVJDRTI1CQkoSVJRX1ZJQ19TVEFSVCArIElOVF9WSUNTT1VSQ0UyNSkKKyNkZWZpbmUgSVJRX1ZJQ1NPVVJDRTI2CQkoSVJRX1ZJQ19TVEFSVCArIElOVF9WSUNTT1VSQ0UyNikKKyNkZWZpbmUgSVJRX1ZJQ1NPVVJDRTI3CQkoSVJRX1ZJQ19TVEFSVCArIElOVF9WSUNTT1VSQ0UyNykKKyNkZWZpbmUgSVJRX1ZJQ1NPVVJDRTI4CQkoSVJRX1ZJQ19TVEFSVCArIElOVF9WSUNTT1VSQ0UyOCkKKyNkZWZpbmUgSVJRX1ZJQ1NPVVJDRTI5CQkoSVJRX1ZJQ19TVEFSVCArIElOVF9WSUNTT1VSQ0UyOSkKKyNkZWZpbmUgSVJRX1ZJQ1NPVVJDRTMwCQkoSVJRX1ZJQ19TVEFSVCArIElOVF9WSUNTT1VSQ0UzMCkKKyNkZWZpbmUgSVJRX1ZJQ1NPVVJDRTMxCQkoSVJRX1ZJQ19TVEFSVCArIElOVF9WSUNTT1VSQ0UzMSkKKyNkZWZpbmUgSVJRX1ZJQ19FTkQJCShJUlFfVklDX1NUQVJUICsgMzEpCisKKyNkZWZpbmUgSVJRTUFTS19XRE9HSU5UCQlJTlRNQVNLX1dET0dJTlQKKyNkZWZpbmUgSVJRTUFTS19TT0ZUSU5UCQlJTlRNQVNLX1NPRlRJTlQKKyNkZWZpbmUgSVJRTUFTS19DT01NUnggCQlJTlRNQVNLX0NPTU1SeAorI2RlZmluZSBJUlFNQVNLX0NPTU1UeCAJCUlOVE1BU0tfQ09NTVR4CisjZGVmaW5lIElSUU1BU0tfVElNRVJJTlQwXzEJSU5UTUFTS19USU1FUklOVDBfMQorI2RlZmluZSBJUlFNQVNLX1RJTUVSSU5UMl8zCUlOVE1BU0tfVElNRVJJTlQyXzMKKyNkZWZpbmUgSVJRTUFTS19HUElPSU5UMAlJTlRNQVNLX0dQSU9JTlQwCisjZGVmaW5lIElSUU1BU0tfR1BJT0lOVDEJSU5UTUFTS19HUElPSU5UMQorI2RlZmluZSBJUlFNQVNLX0dQSU9JTlQyCUlOVE1BU0tfR1BJT0lOVDIKKyNkZWZpbmUgSVJRTUFTS19HUElPSU5UMwlJTlRNQVNLX0dQSU9JTlQzCisjZGVmaW5lIElSUU1BU0tfUlRDSU5UIAkJSU5UTUFTS19SVENJTlQKKyNkZWZpbmUgSVJRTUFTS19TU1BJTlQgCQlJTlRNQVNLX1NTUElOVAorI2RlZmluZSBJUlFNQVNLX1VBUlRJTlQwCUlOVE1BU0tfVUFSVElOVDAKKyNkZWZpbmUgSVJRTUFTS19VQVJUSU5UMQlJTlRNQVNLX1VBUlRJTlQxCisjZGVmaW5lIElSUU1BU0tfVUFSVElOVDIJSU5UTUFTS19VQVJUSU5UMgorI2RlZmluZSBJUlFNQVNLX1NDSUlOVCAJCUlOVE1BU0tfU0NJSU5UCisjZGVmaW5lIElSUU1BU0tfQ0xDRElOVAkJSU5UTUFTS19DTENESU5UCisjZGVmaW5lIElSUU1BU0tfRE1BSU5UIAkJSU5UTUFTS19ETUFJTlQKKyNkZWZpbmUgSVJRTUFTS19QV1JGQUlMSU5UCUlOVE1BU0tfUFdSRkFJTElOVAorI2RlZmluZSBJUlFNQVNLX01CWElOVCAJCUlOVE1BU0tfTUJYSU5UCisjZGVmaW5lIElSUU1BU0tfR05ESU5UIAkJSU5UTUFTS19HTkRJTlQKKyNkZWZpbmUgSVJRTUFTS19WSUNTT1VSQ0UyMQlJTlRNQVNLX1ZJQ1NPVVJDRTIxCisjZGVmaW5lIElSUU1BU0tfVklDU09VUkNFMjIJSU5UTUFTS19WSUNTT1VSQ0UyMgorI2RlZmluZSBJUlFNQVNLX1ZJQ1NPVVJDRTIzCUlOVE1BU0tfVklDU09VUkNFMjMKKyNkZWZpbmUgSVJRTUFTS19WSUNTT1VSQ0UyNAlJTlRNQVNLX1ZJQ1NPVVJDRTI0CisjZGVmaW5lIElSUU1BU0tfVklDU09VUkNFMjUJSU5UTUFTS19WSUNTT1VSQ0UyNQorI2RlZmluZSBJUlFNQVNLX1ZJQ1NPVVJDRTI2CUlOVE1BU0tfVklDU09VUkNFMjYKKyNkZWZpbmUgSVJRTUFTS19WSUNTT1VSQ0UyNwlJTlRNQVNLX1ZJQ1NPVVJDRTI3CisjZGVmaW5lIElSUU1BU0tfVklDU09VUkNFMjgJSU5UTUFTS19WSUNTT1VSQ0UyOAorI2RlZmluZSBJUlFNQVNLX1ZJQ1NPVVJDRTI5CUlOVE1BU0tfVklDU09VUkNFMjkKKyNkZWZpbmUgSVJRTUFTS19WSUNTT1VSQ0UzMAlJTlRNQVNLX1ZJQ1NPVVJDRTMwCisjZGVmaW5lIElSUU1BU0tfVklDU09VUkNFMzEJSU5UTUFTS19WSUNTT1VSQ0UzMQorCisvKiAKKyAqICBGSVEgaW50ZXJydXB0cyBkZWZpbml0aW9ucyBhcmUgdGhlIHNhbWUgdGhlIElOVCBkZWZpbml0aW9ucy4KKyAqLworI2RlZmluZSBGSVFfV0RPR0lOVAkJSU5UX1dET0dJTlQKKyNkZWZpbmUgRklRX1NPRlRJTlQJCUlOVF9TT0ZUSU5UCisjZGVmaW5lIEZJUV9DT01NUngJCUlOVF9DT01NUngKKyNkZWZpbmUgRklRX0NPTU1UeAkJSU5UX0NPTU1UeAorI2RlZmluZSBGSVFfVElNRVJJTlQwXzEJCUlOVF9USU1FUklOVDBfMQorI2RlZmluZSBGSVFfVElNRVJJTlQyXzMJCUlOVF9USU1FUklOVDJfMworI2RlZmluZSBGSVFfR1BJT0lOVDAJCUlOVF9HUElPSU5UMAorI2RlZmluZSBGSVFfR1BJT0lOVDEJCUlOVF9HUElPSU5UMQorI2RlZmluZSBGSVFfR1BJT0lOVDIJCUlOVF9HUElPSU5UMgorI2RlZmluZSBGSVFfR1BJT0lOVDMJCUlOVF9HUElPSU5UMworI2RlZmluZSBGSVFfUlRDSU5UCQlJTlRfUlRDSU5UCisjZGVmaW5lIEZJUV9TU1BJTlQJCUlOVF9TU1BJTlQKKyNkZWZpbmUgRklRX1VBUlRJTlQwCQlJTlRfVUFSVElOVDAKKyNkZWZpbmUgRklRX1VBUlRJTlQxCQlJTlRfVUFSVElOVDEKKyNkZWZpbmUgRklRX1VBUlRJTlQyCQlJTlRfVUFSVElOVDIKKyNkZWZpbmUgRklRX1NDSUlOVAkJSU5UX1NDSUlOVAorI2RlZmluZSBGSVFfQ0xDRElOVAkJSU5UX0NMQ0RJTlQKKyNkZWZpbmUgRklRX0RNQUlOVAkJSU5UX0RNQUlOVAorI2RlZmluZSBGSVFfUFdSRkFJTElOVCAJCUlOVF9QV1JGQUlMSU5UCisjZGVmaW5lIEZJUV9NQlhJTlQJCUlOVF9NQlhJTlQKKyNkZWZpbmUgRklRX0dORElOVAkJSU5UX0dORElOVAorI2RlZmluZSBGSVFfVklDU09VUkNFMjEJCUlOVF9WSUNTT1VSQ0UyMQorI2RlZmluZSBGSVFfVklDU09VUkNFMjIJCUlOVF9WSUNTT1VSQ0UyMgorI2RlZmluZSBGSVFfVklDU09VUkNFMjMJCUlOVF9WSUNTT1VSQ0UyMworI2RlZmluZSBGSVFfVklDU09VUkNFMjQJCUlOVF9WSUNTT1VSQ0UyNAorI2RlZmluZSBGSVFfVklDU09VUkNFMjUJCUlOVF9WSUNTT1VSQ0UyNQorI2RlZmluZSBGSVFfVklDU09VUkNFMjYJCUlOVF9WSUNTT1VSQ0UyNgorI2RlZmluZSBGSVFfVklDU09VUkNFMjcJCUlOVF9WSUNTT1VSQ0UyNworI2RlZmluZSBGSVFfVklDU09VUkNFMjgJCUlOVF9WSUNTT1VSQ0UyOAorI2RlZmluZSBGSVFfVklDU09VUkNFMjkJCUlOVF9WSUNTT1VSQ0UyOQorI2RlZmluZSBGSVFfVklDU09VUkNFMzAJCUlOVF9WSUNTT1VSQ0UzMAorI2RlZmluZSBGSVFfVklDU09VUkNFMzEJCUlOVF9WSUNTT1VSQ0UzMQorCisKKyNkZWZpbmUgRklRTUFTS19XRE9HSU5UCQlJTlRNQVNLX1dET0dJTlQKKyNkZWZpbmUgRklRTUFTS19TT0ZUSU5UCQlJTlRNQVNLX1NPRlRJTlQKKyNkZWZpbmUgRklRTUFTS19DT01NUnggCQlJTlRNQVNLX0NPTU1SeAorI2RlZmluZSBGSVFNQVNLX0NPTU1UeCAJCUlOVE1BU0tfQ09NTVR4CisjZGVmaW5lIEZJUU1BU0tfVElNRVJJTlQwXzEJSU5UTUFTS19USU1FUklOVDBfMQorI2RlZmluZSBGSVFNQVNLX1RJTUVSSU5UMl8zCUlOVE1BU0tfVElNRVJJTlQyXzMKKyNkZWZpbmUgRklRTUFTS19HUElPSU5UMAlJTlRNQVNLX0dQSU9JTlQwCisjZGVmaW5lIEZJUU1BU0tfR1BJT0lOVDEJSU5UTUFTS19HUElPSU5UMQorI2RlZmluZSBGSVFNQVNLX0dQSU9JTlQyCUlOVE1BU0tfR1BJT0lOVDIKKyNkZWZpbmUgRklRTUFTS19HUElPSU5UMwlJTlRNQVNLX0dQSU9JTlQzCisjZGVmaW5lIEZJUU1BU0tfUlRDSU5UIAkJSU5UTUFTS19SVENJTlQKKyNkZWZpbmUgRklRTUFTS19TU1BJTlQgCQlJTlRNQVNLX1NTUElOVAorI2RlZmluZSBGSVFNQVNLX1VBUlRJTlQwCUlOVE1BU0tfVUFSVElOVDAKKyNkZWZpbmUgRklRTUFTS19VQVJUSU5UMQlJTlRNQVNLX1VBUlRJTlQxCisjZGVmaW5lIEZJUU1BU0tfVUFSVElOVDIJSU5UTUFTS19VQVJUSU5UMgorI2RlZmluZSBGSVFNQVNLX1NDSUlOVCAJCUlOVE1BU0tfU0NJSU5UCisjZGVmaW5lIEZJUU1BU0tfQ0xDRElOVAkJSU5UTUFTS19DTENESU5UCisjZGVmaW5lIEZJUU1BU0tfRE1BSU5UIAkJSU5UTUFTS19ETUFJTlQKKyNkZWZpbmUgRklRTUFTS19QV1JGQUlMSU5UCUlOVE1BU0tfUFdSRkFJTElOVAorI2RlZmluZSBGSVFNQVNLX01CWElOVCAJCUlOVE1BU0tfTUJYSU5UCisjZGVmaW5lIEZJUU1BU0tfR05ESU5UIAkJSU5UTUFTS19HTkRJTlQKKyNkZWZpbmUgRklRTUFTS19WSUNTT1VSQ0UyMQlJTlRNQVNLX1ZJQ1NPVVJDRTIxCisjZGVmaW5lIEZJUU1BU0tfVklDU09VUkNFMjIJSU5UTUFTS19WSUNTT1VSQ0UyMgorI2RlZmluZSBGSVFNQVNLX1ZJQ1NPVVJDRTIzCUlOVE1BU0tfVklDU09VUkNFMjMKKyNkZWZpbmUgRklRTUFTS19WSUNTT1VSQ0UyNAlJTlRNQVNLX1ZJQ1NPVVJDRTI0CisjZGVmaW5lIEZJUU1BU0tfVklDU09VUkNFMjUJSU5UTUFTS19WSUNTT1VSQ0UyNQorI2RlZmluZSBGSVFNQVNLX1ZJQ1NPVVJDRTI2CUlOVE1BU0tfVklDU09VUkNFMjYKKyNkZWZpbmUgRklRTUFTS19WSUNTT1VSQ0UyNwlJTlRNQVNLX1ZJQ1NPVVJDRTI3CisjZGVmaW5lIEZJUU1BU0tfVklDU09VUkNFMjgJSU5UTUFTS19WSUNTT1VSQ0UyOAorI2RlZmluZSBGSVFNQVNLX1ZJQ1NPVVJDRTI5CUlOVE1BU0tfVklDU09VUkNFMjkKKyNkZWZpbmUgRklRTUFTS19WSUNTT1VSQ0UzMAlJTlRNQVNLX1ZJQ1NPVVJDRTMwCisjZGVmaW5lIEZJUU1BU0tfVklDU09VUkNFMzEJSU5UTUFTS19WSUNTT1VSQ0UzMQorCisvKgorICogU2Vjb25kYXJ5IGludGVycnVwdCBjb250cm9sbGVyCisgKi8KKyNkZWZpbmUgSVJRX1NJQ19TVEFSVAkJMzIKKyNkZWZpbmUgSVJRX1NJQ19NTUNJMEIgCQkoSVJRX1NJQ19TVEFSVCArIFNJQ19JTlRfTU1DSTBCKQorI2RlZmluZSBJUlFfU0lDX01NQ0kxQiAJCShJUlFfU0lDX1NUQVJUICsgU0lDX0lOVF9NTUNJMUIpCisjZGVmaW5lIElSUV9TSUNfS01JMAkJKElSUV9TSUNfU1RBUlQgKyBTSUNfSU5UX0tNSTApCisjZGVmaW5lIElSUV9TSUNfS01JMQkJKElSUV9TSUNfU1RBUlQgKyBTSUNfSU5UX0tNSTEpCisjZGVmaW5lIElSUV9TSUNfU0NJMwkJKElSUV9TSUNfU1RBUlQgKyBTSUNfSU5UX1NDSTMpCisjZGVmaW5lIElSUV9TSUNfVUFSVDMJCShJUlFfU0lDX1NUQVJUICsgU0lDX0lOVF9VQVJUMykKKyNkZWZpbmUgSVJRX1NJQ19DTENECQkoSVJRX1NJQ19TVEFSVCArIFNJQ19JTlRfQ0xDRCkKKyNkZWZpbmUgSVJRX1NJQ19UT1VDSAkJKElSUV9TSUNfU1RBUlQgKyBTSUNfSU5UX1RPVUNIKQorI2RlZmluZSBJUlFfU0lDX0tFWVBBRCAJCShJUlFfU0lDX1NUQVJUICsgU0lDX0lOVF9LRVlQQUQpCisjZGVmaW5lIElSUV9TSUNfRG9DCQkoSVJRX1NJQ19TVEFSVCArIFNJQ19JTlRfRG9DKQorI2RlZmluZSBJUlFfU0lDX01NQ0kwQSAJCShJUlFfU0lDX1NUQVJUICsgU0lDX0lOVF9NTUNJMEEpCisjZGVmaW5lIElSUV9TSUNfTU1DSTFBIAkJKElSUV9TSUNfU1RBUlQgKyBTSUNfSU5UX01NQ0kxQSkKKyNkZWZpbmUgSVJRX1NJQ19BQUNJCQkoSVJRX1NJQ19TVEFSVCArIFNJQ19JTlRfQUFDSSkKKyNkZWZpbmUgSVJRX1NJQ19FVEgJCShJUlFfU0lDX1NUQVJUICsgU0lDX0lOVF9FVEgpCisjZGVmaW5lIElSUV9TSUNfVVNCCQkoSVJRX1NJQ19TVEFSVCArIFNJQ19JTlRfVVNCKQorI2RlZmluZSBJUlFfU0lDX1BDSTAJCShJUlFfU0lDX1NUQVJUICsgU0lDX0lOVF9QQ0kwKQorI2RlZmluZSBJUlFfU0lDX1BDSTEJCShJUlFfU0lDX1NUQVJUICsgU0lDX0lOVF9QQ0kxKQorI2RlZmluZSBJUlFfU0lDX1BDSTIJCShJUlFfU0lDX1NUQVJUICsgU0lDX0lOVF9QQ0kyKQorI2RlZmluZSBJUlFfU0lDX1BDSTMJCShJUlFfU0lDX1NUQVJUICsgU0lDX0lOVF9QQ0kzKQorI2RlZmluZSBJUlFfU0lDX0VORAkJNjMKKworI2RlZmluZSBTSUNfSVJRTUFTS19NTUNJMEIJU0lDX0lOVE1BU0tfTU1DSTBCCisjZGVmaW5lIFNJQ19JUlFNQVNLX01NQ0kxQglTSUNfSU5UTUFTS19NTUNJMUIKKyNkZWZpbmUgU0lDX0lSUU1BU0tfS01JMAlTSUNfSU5UTUFTS19LTUkwCisjZGVmaW5lIFNJQ19JUlFNQVNLX0tNSTEJU0lDX0lOVE1BU0tfS01JMQorI2RlZmluZSBTSUNfSVJRTUFTS19TQ0kzCVNJQ19JTlRNQVNLX1NDSTMKKyNkZWZpbmUgU0lDX0lSUU1BU0tfVUFSVDMJU0lDX0lOVE1BU0tfVUFSVDMKKyNkZWZpbmUgU0lDX0lSUU1BU0tfQ0xDRAlTSUNfSU5UTUFTS19DTENECisjZGVmaW5lIFNJQ19JUlFNQVNLX1RPVUNICVNJQ19JTlRNQVNLX1RPVUNICisjZGVmaW5lIFNJQ19JUlFNQVNLX0tFWVBBRAlTSUNfSU5UTUFTS19LRVlQQUQKKyNkZWZpbmUgU0lDX0lSUU1BU0tfRG9DCQlTSUNfSU5UTUFTS19Eb0MKKyNkZWZpbmUgU0lDX0lSUU1BU0tfTU1DSTBBCVNJQ19JTlRNQVNLX01NQ0kwQQorI2RlZmluZSBTSUNfSVJRTUFTS19NTUNJMUEJU0lDX0lOVE1BU0tfTU1DSTFBCisjZGVmaW5lIFNJQ19JUlFNQVNLX0FBQ0kJU0lDX0lOVE1BU0tfQUFDSQorI2RlZmluZSBTSUNfSVJRTUFTS19FVEgJCVNJQ19JTlRNQVNLX0VUSAorI2RlZmluZSBTSUNfSVJRTUFTS19VU0IJCVNJQ19JTlRNQVNLX1VTQgorI2RlZmluZSBTSUNfSVJRTUFTS19QQ0kwCVNJQ19JTlRNQVNLX1BDSTAKKyNkZWZpbmUgU0lDX0lSUU1BU0tfUENJMQlTSUNfSU5UTUFTS19QQ0kxCisjZGVmaW5lIFNJQ19JUlFNQVNLX1BDSTIJU0lDX0lOVE1BU0tfUENJMgorI2RlZmluZSBTSUNfSVJRTUFTS19QQ0kzCVNJQ19JTlRNQVNLX1BDSTMKKworI2RlZmluZSBOUl9JUlFTCQkJNjQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXZlcnNhdGlsZS9tZW1vcnkuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXZlcnNhdGlsZS9tZW1vcnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjhiN2NjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtdmVyc2F0aWxlL21lbW9yeS5oCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtdmVyc2F0aWxlL21lbW9yeS5oCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMyBBUk0gTGltaXRlZAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworI2lmbmRlZiBfX0FTTV9BUkNIX01FTU9SWV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfTUVNT1JZX0gKKworLyoKKyAqIFBoeXNpY2FsIERSQU0gb2Zmc2V0LgorICovCisjZGVmaW5lIFBIWVNfT0ZGU0VUCSgweDAwMDAwMDAwVUwpCisKKy8qCisgKiBWaXJ0dWFsIHZpZXcgPC0+IERNQSB2aWV3IG1lbW9yeSBhZGRyZXNzIHRyYW5zbGF0aW9ucworICogdmlydF90b19idXM6IFVzZWQgdG8gdHJhbnNsYXRlIHRoZSB2aXJ0dWFsIGFkZHJlc3MgdG8gYW4KKyAqICAgICAgICAgICAgICBhZGRyZXNzIHN1aXRhYmxlIHRvIGJlIHBhc3NlZCB0byBzZXRfZG1hX2FkZHIKKyAqIGJ1c190b192aXJ0OiBVc2VkIHRvIGNvbnZlcnQgYW4gYWRkcmVzcyBmb3IgRE1BIG9wZXJhdGlvbnMKKyAqICAgICAgICAgICAgICB0byBhbiBhZGRyZXNzIHRoYXQgdGhlIGtlcm5lbCBjYW4gdXNlLgorICovCisjZGVmaW5lIF9fdmlydF90b19idXMoeCkJKCh4KSAtIFBBR0VfT0ZGU0VUKQorI2RlZmluZSBfX2J1c190b192aXJ0KHgpCSgoeCkgKyBQQUdFX09GRlNFVCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC12ZXJzYXRpbGUvcGFyYW0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXZlcnNhdGlsZS9wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0Yjg5NzMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC12ZXJzYXRpbGUvcGFyYW0uaApAQCAtMCwwICsxLDE5IEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLXZlcnNhdGlsZS9wYXJhbS5oCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMiBBUk0gTGltaXRlZAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtdmVyc2F0aWxlL3BsYXRmb3JtLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC12ZXJzYXRpbGUvcGxhdGZvcm0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTk4ZDFmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtdmVyc2F0aWxlL3BsYXRmb3JtLmgKQEAgLTAsMCArMSw1MTAgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC12ZXJzYXRpbGUvcGxhdGZvcm0uaAorICoKKyAqIENvcHlyaWdodCAoYykgQVJNIExpbWl0ZWQgMjAwMy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpZm5kZWYgX19hZGRyZXNzX2gKKyNkZWZpbmUgX19hZGRyZXNzX2ggICAgICAgICAgICAgICAgICAgICAxCisKKy8qCisgKiBNZW1vcnkgZGVmaW5pdGlvbnMKKyAqLworI2RlZmluZSBWRVJTQVRJTEVfQk9PVF9ST01fTE8gICAgICAgICAgMHgzMDAwMDAwMAkJLyogRG9DIEJhc2UgKDY0TWIpLi4uKi8KKyNkZWZpbmUgVkVSU0FUSUxFX0JPT1RfUk9NX0hJICAgICAgICAgIDB4MzAwMDAwMDAKKyNkZWZpbmUgVkVSU0FUSUxFX0JPT1RfUk9NX0JBU0UgICAgICAgIFZFUlNBVElMRV9CT09UX1JPTV9ISQkgLyogIE5vcm1hbCBwb3NpdGlvbiAqLworI2RlZmluZSBWRVJTQVRJTEVfQk9PVF9ST01fU0laRSAgICAgICAgU1pfNjRNCisKKyNkZWZpbmUgVkVSU0FUSUxFX1NTUkFNX0JBU0UgICAgICAgICAgIC8qIFZFUlNBVElMRV9TU01DX0JBU0UgPyAqLworI2RlZmluZSBWRVJTQVRJTEVfU1NSQU1fU0laRSAgICAgICAgICAgU1pfMk0KKworI2RlZmluZSBWRVJTQVRJTEVfRkxBU0hfQkFTRSAgICAgICAgICAgMHgzNDAwMDAwMAorI2RlZmluZSBWRVJTQVRJTEVfRkxBU0hfU0laRSAgICAgICAgICAgU1pfNjRNCisKKy8qIAorICogIFNEUkFNCisgKi8KKyNkZWZpbmUgVkVSU0FUSUxFX1NEUkFNX0JBU0UgICAgICAgICAgIDB4MDAwMDAwMDAKKworLyogCisgKiAgTG9naWMgZXhwYW5zaW9uIG1vZHVsZXMKKyAqIAorICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgVmVyc2F0aWxlIFJlZ2lzdGVycworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAKKyAqLworI2RlZmluZSBWRVJTQVRJTEVfU1lTX0lEX09GRlNFVCAgICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgVkVSU0FUSUxFX1NZU19TV19PRkZTRVQgICAgICAgICAgICAgICAweDA0CisjZGVmaW5lIFZFUlNBVElMRV9TWVNfTEVEX09GRlNFVCAgICAgICAgICAgICAgMHgwOAorI2RlZmluZSBWRVJTQVRJTEVfU1lTX09TQzBfT0ZGU0VUICAgICAgICAgICAgIDB4MEMKKworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfVkVSU0FUSUxFX1BCKQorI2RlZmluZSBWRVJTQVRJTEVfU1lTX09TQzFfT0ZGU0VUICAgICAgICAgICAgIDB4MTAKKyNkZWZpbmUgVkVSU0FUSUxFX1NZU19PU0MyX09GRlNFVCAgICAgICAgICAgICAweDE0CisjZGVmaW5lIFZFUlNBVElMRV9TWVNfT1NDM19PRkZTRVQgICAgICAgICAgICAgMHgxOAorI2RlZmluZSBWRVJTQVRJTEVfU1lTX09TQzRfT0ZGU0VUICAgICAgICAgICAgIDB4MUMKKyNlbGlmIGRlZmluZWQoQ09ORklHX01BQ0hfVkVSU0FUSUxFX0FCKQorI2RlZmluZSBWRVJTQVRJTEVfU1lTX09TQzFfT0ZGU0VUICAgICAgICAgICAgIDB4MUMKKyNlbmRpZgorCisjZGVmaW5lIFZFUlNBVElMRV9TWVNfTE9DS19PRkZTRVQgICAgICAgICAgICAgMHgyMAorI2RlZmluZSBWRVJTQVRJTEVfU1lTXzEwMEhaX09GRlNFVCAgICAgICAgICAgIDB4MjQKKyNkZWZpbmUgVkVSU0FUSUxFX1NZU19DRkdEQVRBMV9PRkZTRVQgICAgICAgICAweDI4CisjZGVmaW5lIFZFUlNBVElMRV9TWVNfQ0ZHREFUQTJfT0ZGU0VUICAgICAgICAgMHgyQworI2RlZmluZSBWRVJTQVRJTEVfU1lTX0ZMQUdTX09GRlNFVCAgICAgICAgICAgIDB4MzAKKyNkZWZpbmUgVkVSU0FUSUxFX1NZU19GTEFHU1NFVF9PRkZTRVQgICAgICAgICAweDMwCisjZGVmaW5lIFZFUlNBVElMRV9TWVNfRkxBR1NDTFJfT0ZGU0VUICAgICAgICAgMHgzNAorI2RlZmluZSBWRVJTQVRJTEVfU1lTX05WRkxBR1NfT0ZGU0VUICAgICAgICAgIDB4MzgKKyNkZWZpbmUgVkVSU0FUSUxFX1NZU19OVkZMQUdTU0VUX09GRlNFVCAgICAgICAweDM4CisjZGVmaW5lIFZFUlNBVElMRV9TWVNfTlZGTEFHU0NMUl9PRkZTRVQgICAgICAgMHgzQworI2RlZmluZSBWRVJTQVRJTEVfU1lTX1JFU0VUQ1RMX09GRlNFVCAgICAgICAgIDB4NDAKKyNkZWZpbmUgVkVSU0FUSUxFX1NZU19QSUNDVExfT0ZGU0VUICAgICAgICAgICAweDQ0CisjZGVmaW5lIFZFUlNBVElMRV9TWVNfTUNJX09GRlNFVCAgICAgICAgICAgICAgMHg0OAorI2RlZmluZSBWRVJTQVRJTEVfU1lTX0ZMQVNIX09GRlNFVCAgICAgICAgICAgIDB4NEMKKyNkZWZpbmUgVkVSU0FUSUxFX1NZU19DTENEX09GRlNFVCAgICAgICAgICAgICAweDUwCisjZGVmaW5lIFZFUlNBVElMRV9TWVNfQ0xDRFNFUl9PRkZTRVQgICAgICAgICAgMHg1NAorI2RlZmluZSBWRVJTQVRJTEVfU1lTX0JPT1RDU19PRkZTRVQgICAgICAgICAgIDB4NTgKKyNkZWZpbmUgVkVSU0FUSUxFX1NZU18yNE1Iel9PRkZTRVQgICAgICAgICAgICAweDVDCisjZGVmaW5lIFZFUlNBVElMRV9TWVNfTUlTQ19PRkZTRVQgICAgICAgICAgICAgMHg2MAorI2RlZmluZSBWRVJTQVRJTEVfU1lTX1RFU1RfT1NDMF9PRkZTRVQgICAgICAgIDB4ODAKKyNkZWZpbmUgVkVSU0FUSUxFX1NZU19URVNUX09TQzFfT0ZGU0VUICAgICAgICAweDg0CisjZGVmaW5lIFZFUlNBVElMRV9TWVNfVEVTVF9PU0MyX09GRlNFVCAgICAgICAgMHg4OAorI2RlZmluZSBWRVJTQVRJTEVfU1lTX1RFU1RfT1NDM19PRkZTRVQgICAgICAgIDB4OEMKKyNkZWZpbmUgVkVSU0FUSUxFX1NZU19URVNUX09TQzRfT0ZGU0VUICAgICAgICAweDkwCisKKyNkZWZpbmUgVkVSU0FUSUxFX1NZU19CQVNFICAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIFZFUlNBVElMRV9TWVNfSUQgICAgICAgICAgICAgICAgICAgICAgKFZFUlNBVElMRV9TWVNfQkFTRSArIFZFUlNBVElMRV9TWVNfSURfT0ZGU0VUKQorI2RlZmluZSBWRVJTQVRJTEVfU1lTX1NXICAgICAgICAgICAgICAgICAgICAgIChWRVJTQVRJTEVfU1lTX0JBU0UgKyBWRVJTQVRJTEVfU1lTX1NXX09GRlNFVCkKKyNkZWZpbmUgVkVSU0FUSUxFX1NZU19MRUQgICAgICAgICAgICAgICAgICAgICAoVkVSU0FUSUxFX1NZU19CQVNFICsgVkVSU0FUSUxFX1NZU19MRURfT0ZGU0VUKQorI2RlZmluZSBWRVJTQVRJTEVfU1lTX09TQzAgICAgICAgICAgICAgICAgICAgIChWRVJTQVRJTEVfU1lTX0JBU0UgKyBWRVJTQVRJTEVfU1lTX09TQzBfT0ZGU0VUKQorI2RlZmluZSBWRVJTQVRJTEVfU1lTX09TQzEgICAgICAgICAgICAgICAgICAgIChWRVJTQVRJTEVfU1lTX0JBU0UgKyBWRVJTQVRJTEVfU1lTX09TQzFfT0ZGU0VUKQorCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9WRVJTQVRJTEVfUEIpCisjZGVmaW5lIFZFUlNBVElMRV9TWVNfT1NDMiAgICAgICAgICAgICAgICAgICAgKFZFUlNBVElMRV9TWVNfQkFTRSArIFZFUlNBVElMRV9TWVNfT1NDMl9PRkZTRVQpCisjZGVmaW5lIFZFUlNBVElMRV9TWVNfT1NDMyAgICAgICAgICAgICAgICAgICAgKFZFUlNBVElMRV9TWVNfQkFTRSArIFZFUlNBVElMRV9TWVNfT1NDM19PRkZTRVQpCisjZGVmaW5lIFZFUlNBVElMRV9TWVNfT1NDNCAgICAgICAgICAgICAgICAgICAgKFZFUlNBVElMRV9TWVNfQkFTRSArIFZFUlNBVElMRV9TWVNfT1NDNF9PRkZTRVQpCisjZW5kaWYKKworI2RlZmluZSBWRVJTQVRJTEVfU1lTX0xPQ0sgICAgICAgICAgICAgICAgICAgIChWRVJTQVRJTEVfU1lTX0JBU0UgKyBWRVJTQVRJTEVfU1lTX0xPQ0tfT0ZGU0VUKQorI2RlZmluZSBWRVJTQVRJTEVfU1lTXzEwMEhaICAgICAgICAgICAgICAgICAgIChWRVJTQVRJTEVfU1lTX0JBU0UgKyBWRVJTQVRJTEVfU1lTXzEwMEhaX09GRlNFVCkKKyNkZWZpbmUgVkVSU0FUSUxFX1NZU19DRkdEQVRBMSAgICAgICAgICAgICAgICAoVkVSU0FUSUxFX1NZU19CQVNFICsgVkVSU0FUSUxFX1NZU19DRkdEQVRBMV9PRkZTRVQpCisjZGVmaW5lIFZFUlNBVElMRV9TWVNfQ0ZHREFUQTIgICAgICAgICAgICAgICAgKFZFUlNBVElMRV9TWVNfQkFTRSArIFZFUlNBVElMRV9TWVNfQ0ZHREFUQTJfT0ZGU0VUKQorI2RlZmluZSBWRVJTQVRJTEVfU1lTX0ZMQUdTICAgICAgICAgICAgICAgICAgIChWRVJTQVRJTEVfU1lTX0JBU0UgKyBWRVJTQVRJTEVfU1lTX0ZMQUdTX09GRlNFVCkKKyNkZWZpbmUgVkVSU0FUSUxFX1NZU19GTEFHU1NFVCAgICAgICAgICAgICAgICAoVkVSU0FUSUxFX1NZU19CQVNFICsgVkVSU0FUSUxFX1NZU19GTEFHU1NFVF9PRkZTRVQpCisjZGVmaW5lIFZFUlNBVElMRV9TWVNfRkxBR1NDTFIgICAgICAgICAgICAgICAgKFZFUlNBVElMRV9TWVNfQkFTRSArIFZFUlNBVElMRV9TWVNfRkxBR1NDTFJfT0ZGU0VUKQorI2RlZmluZSBWRVJTQVRJTEVfU1lTX05WRkxBR1MgICAgICAgICAgICAgICAgIChWRVJTQVRJTEVfU1lTX0JBU0UgKyBWRVJTQVRJTEVfU1lTX05WRkxBR1NfT0ZGU0VUKQorI2RlZmluZSBWRVJTQVRJTEVfU1lTX05WRkxBR1NTRVQgICAgICAgICAgICAgIChWRVJTQVRJTEVfU1lTX0JBU0UgKyBWRVJTQVRJTEVfU1lTX05WRkxBR1NTRVRfT0ZGU0VUKQorI2RlZmluZSBWRVJTQVRJTEVfU1lTX05WRkxBR1NDTFIgICAgICAgICAgICAgIChWRVJTQVRJTEVfU1lTX0JBU0UgKyBWRVJTQVRJTEVfU1lTX05WRkxBR1NDTFJfT0ZGU0VUKQorI2RlZmluZSBWRVJTQVRJTEVfU1lTX1JFU0VUQ1RMICAgICAgICAgICAgICAgIChWRVJTQVRJTEVfU1lTX0JBU0UgKyBWRVJTQVRJTEVfU1lTX1JFU0VUQ1RMX09GRlNFVCkKKyNkZWZpbmUgVkVSU0FUSUxFX1NZU19QSUNDVEwgICAgICAgICAgICAgICAgICAoVkVSU0FUSUxFX1NZU19CQVNFICsgVkVSU0FUSUxFX1NZU19QSUNDVExfT0ZGU0VUKQorI2RlZmluZSBWRVJTQVRJTEVfU1lTX01DSSAgICAgICAgICAgICAgICAgICAgIChWRVJTQVRJTEVfU1lTX0JBU0UgKyBWRVJTQVRJTEVfU1lTX01DSV9PRkZTRVQpCisjZGVmaW5lIFZFUlNBVElMRV9TWVNfRkxBU0ggICAgICAgICAgICAgICAgICAgKFZFUlNBVElMRV9TWVNfQkFTRSArIFZFUlNBVElMRV9TWVNfRkxBU0hfT0ZGU0VUKQorI2RlZmluZSBWRVJTQVRJTEVfU1lTX0NMQ0QgICAgICAgICAgICAgICAgICAgIChWRVJTQVRJTEVfU1lTX0JBU0UgKyBWRVJTQVRJTEVfU1lTX0NMQ0RfT0ZGU0VUKQorI2RlZmluZSBWRVJTQVRJTEVfU1lTX0NMQ0RTRVIgICAgICAgICAgICAgICAgIChWRVJTQVRJTEVfU1lTX0JBU0UgKyBWRVJTQVRJTEVfU1lTX0NMQ0RTRVJfT0ZGU0VUKQorI2RlZmluZSBWRVJTQVRJTEVfU1lTX0JPT1RDUyAgICAgICAgICAgICAgICAgIChWRVJTQVRJTEVfU1lTX0JBU0UgKyBWRVJTQVRJTEVfU1lTX0JPT1RDU19PRkZTRVQpCisjZGVmaW5lIFZFUlNBVElMRV9TWVNfMjRNSHogICAgICAgICAgICAgICAgICAgKFZFUlNBVElMRV9TWVNfQkFTRSArIFZFUlNBVElMRV9TWVNfMjRNSHpfT0ZGU0VUKQorI2RlZmluZSBWRVJTQVRJTEVfU1lTX01JU0MgICAgICAgICAgICAgICAgICAgIChWRVJTQVRJTEVfU1lTX0JBU0UgKyBWRVJTQVRJTEVfU1lTX01JU0NfT0ZGU0VUKQorI2RlZmluZSBWRVJTQVRJTEVfU1lTX1RFU1RfT1NDMCAgICAgICAgICAgICAgIChWRVJTQVRJTEVfU1lTX0JBU0UgKyBWRVJTQVRJTEVfU1lTX1RFU1RfT1NDMF9PRkZTRVQpCisjZGVmaW5lIFZFUlNBVElMRV9TWVNfVEVTVF9PU0MxICAgICAgICAgICAgICAgKFZFUlNBVElMRV9TWVNfQkFTRSArIFZFUlNBVElMRV9TWVNfVEVTVF9PU0MxX09GRlNFVCkKKyNkZWZpbmUgVkVSU0FUSUxFX1NZU19URVNUX09TQzIgICAgICAgICAgICAgICAoVkVSU0FUSUxFX1NZU19CQVNFICsgVkVSU0FUSUxFX1NZU19URVNUX09TQzJfT0ZGU0VUKQorI2RlZmluZSBWRVJTQVRJTEVfU1lTX1RFU1RfT1NDMyAgICAgICAgICAgICAgIChWRVJTQVRJTEVfU1lTX0JBU0UgKyBWRVJTQVRJTEVfU1lTX1RFU1RfT1NDM19PRkZTRVQpCisjZGVmaW5lIFZFUlNBVElMRV9TWVNfVEVTVF9PU0M0ICAgICAgICAgICAgICAgKFZFUlNBVElMRV9TWVNfQkFTRSArIFZFUlNBVElMRV9TWVNfVEVTVF9PU0M0X09GRlNFVCkKKworLyogCisgKiBWYWx1ZXMgZm9yIFZFUlNBVElMRV9TWVNfUkVTRVRfQ1RSTAorICovCisjZGVmaW5lIFZFUlNBVElMRV9TWVNfQ1RSTF9SRVNFVF9DT05GSUdDTFIgICAgMHgwMQorI2RlZmluZSBWRVJTQVRJTEVfU1lTX0NUUkxfUkVTRVRfQ09ORklHSU5JVCAgIDB4MDIKKyNkZWZpbmUgVkVSU0FUSUxFX1NZU19DVFJMX1JFU0VUX0RMTFJFU0VUICAgICAweDAzCisjZGVmaW5lIFZFUlNBVElMRV9TWVNfQ1RSTF9SRVNFVF9QTExSRVNFVCAgICAgMHgwNAorI2RlZmluZSBWRVJTQVRJTEVfU1lTX0NUUkxfUkVTRVRfUE9SICAgICAgICAgIDB4MDUKKyNkZWZpbmUgVkVSU0FUSUxFX1NZU19DVFJMX1JFU0VUX0RvQyAgICAgICAgICAweDA2CisKKyNkZWZpbmUgVkVSU0FUSUxFX1NZU19DVFJMX0xFRCAgICAgICAgICgxIDw8IDApCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgVmVyc2F0aWxlIGNvbnRyb2wgcmVnaXN0ZXJzCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisvKiAKKyAqIFZFUlNBVElMRV9JREZJRUxECisgKgorICogMzE6MjQgPSBtYW51ZmFjdHVyZXIgKDB4NDEgPSBBUk0pCisgKiAyMzoxNiA9IGFyY2hpdGVjdHVyZSAoMHgwOCA9IEFIQiBzeXN0ZW0gYnVzLCBBU0IgcHJvY2Vzc29yIGJ1cykKKyAqIDE1OjEyID0gRlBHQSAoMHgzID0gWFZDNjAwIG9yIFhWQzYwMEUpCisgKiAxMTo0ICA9IGJ1aWxkIHZhbHVlCisgKiAzOjAgICA9IHJldmlzaW9uIG51bWJlciAoMHgxID0gcmV2IEIgKEFIQikpCisgKi8KKworLyoKKyAqIFZFUlNBVElMRV9TWVNfTE9DSworICogICAgIGNvbnRyb2wgYWNjZXNzIHRvIFNZU19PU0N4LCBTWVNfQ0ZHREFUQXgsIFNZU19SRVNFVENUTCwgCisgKiAgICAgU1lTX0NMRCwgU1lTX0JPT1RDUworICovCisjZGVmaW5lIFZFUlNBVElMRV9TWVNfTE9DS19MT0NLRUQgICAgKDEgPDwgMTYpCisjZGVmaW5lIFZFUlNBVElMRV9TWVNfTE9DS1ZBTF9NQVNLCTB4RkZGRgkJLyogd3JpdGUgMHhBMDVGIHRvIGVuYWJsZSB3cml0ZSBhY2Nlc3MgKi8KKworLyoKKyAqIFZFUlNBVElMRV9TWVNfRkxBU0gKKyAqLworI2RlZmluZSBWRVJTQVRJTEVfRkxBU0hQUk9HX0ZMVlBQRU4JKDEgPDwgMCkJLyogRW5hYmxlIHdyaXRpbmcgdG8gZmxhc2ggKi8KKworLyoKKyAqIFZFUlNBVElMRV9JTlRSRUcKKyAqICAgICAtIHVzZWQgdG8gYWNrbm93bGVkZ2UgYW5kIGNvbnRyb2wgTU1DSSBhbmQgVUFSVCBpbnRlcnJ1cHRzIAorICovCisjZGVmaW5lIFZFUlNBVElMRV9JTlRSRUdfV1BST1QgICAgICAgIDB4MDAgICAgLyogTU1DIHByb3RlY3Rpb24gc3RhdHVzIChubyBpbnRlcnJ1cHQgZ2VuZXJhdGVkKSAqLworI2RlZmluZSBWRVJTQVRJTEVfSU5UUkVHX1JJMCAgICAgICAgICAweDAxICAgIC8qIFJpbmcgaW5kaWNhdG9yIFVBUlQwIGlzIGFzc2VydGVkLCAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVkVSU0FUSUxFX0lOVFJFR19DQVJESU4gICAgICAgMHgwOCAgICAvKiBNTUNJIGNhcmQgaW4gZGV0ZWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB3cml0ZSAxIHRvIGFja25vd2xlZGdlIGFuZCBjbGVhciAgICAgICAgICAgICAgICovCisjZGVmaW5lIFZFUlNBVElMRV9JTlRSRUdfUkkxICAgICAgICAgIDB4MDIgICAgLyogUmluZyBpbmRpY2F0b3IgVUFSVDEgaXMgYXNzZXJ0ZWQsICAgICAgICAgICAgICAqLworI2RlZmluZSBWRVJTQVRJTEVfSU5UUkVHX0NBUkRJTlNFUlQgICAweDAzICAgIC8qIFNpZ25hbCBpbnNlcnRpb24gb2YgTU1DIGNhcmQgICAgICAgICAgICAgICAgICAgKi8KKworLyoKKyAqIFZFUlNBVElMRSBwZXJpcGhlcmFsIGFkZHJlc3NlcworICovCisjZGVmaW5lIFZFUlNBVElMRV9QQ0lfQ09SRV9CQVNFICAgICAgICAweDEwMDAxMDAwCS8qIFBDSSBjb3JlIGNvbnRyb2wgKi8KKyNkZWZpbmUgVkVSU0FUSUxFX0kyQ19CQVNFICAgICAgICAgICAgIDB4MTAwMDIwMDAJLyogSTJDIGNvbnRyb2wgKi8KKyNkZWZpbmUgVkVSU0FUSUxFX1NJQ19CQVNFICAgICAgICAgICAgIDB4MTAwMDMwMDAJLyogU2Vjb25kYXJ5IGludGVycnVwdCBjb250cm9sbGVyICovCisjZGVmaW5lIFZFUlNBVElMRV9BQUNJX0JBU0UgICAgICAgICAgICAweDEwMDA0MDAwCS8qIEF1ZGlvICovCisjZGVmaW5lIFZFUlNBVElMRV9NTUNJMF9CQVNFICAgICAgICAgICAweDEwMDA1MDAwCS8qIE1NQyBpbnRlcmZhY2UgKi8KKyNkZWZpbmUgVkVSU0FUSUxFX0tNSTBfQkFTRSAgICAgICAgICAgIDB4MTAwMDYwMDAJLyogS01JIGludGVyZmFjZSAqLworI2RlZmluZSBWRVJTQVRJTEVfS01JMV9CQVNFICAgICAgICAgICAgMHgxMDAwNzAwMAkvKiBLTUkgMm5kIGludGVyZmFjZSAqLworI2RlZmluZSBWRVJTQVRJTEVfQ0hBUl9MQ0RfQkFTRSAgICAgICAgMHgxMDAwODAwMAkvKiBDaGFyYWN0ZXIgTENEICovCisjZGVmaW5lIFZFUlNBVElMRV9VQVJUM19CQVNFICAgICAgICAgICAweDEwMDA5MDAwCS8qIFVBUlQgMyAqLworI2RlZmluZSBWRVJTQVRJTEVfU0NJMV9CQVNFICAgICAgICAgICAgMHgxMDAwQTAwMAorI2RlZmluZSBWRVJTQVRJTEVfTU1DSTFfQkFTRSAgICAgICAgICAgMHgxMDAwQjAwMCAgICAvKiBNTUMgSW50ZXJmYWNlICovCisJLyogMHgxMDAwQzAwMCAtIDB4MTAwMENGRkYgPSByZXNlcnZlZCAqLworI2RlZmluZSBWRVJTQVRJTEVfRVRIX0JBU0UgICAgICAgICAgICAgMHgxMDAxMDAwMAkvKiBFdGhlcm5ldCAqLworI2RlZmluZSBWRVJTQVRJTEVfVVNCX0JBU0UgICAgICAgICAgICAgMHgxMDAyMDAwMAkvKiBVU0IgKi8KKwkvKiAweDEwMDMwMDAwIC0gMHgxMDBGRkZGRiA9IHJlc2VydmVkICovCisjZGVmaW5lIFZFUlNBVElMRV9TTUNfQkFTRSAgICAgICAgICAgICAweDEwMTAwMDAwCS8qIFNNQyAqLworI2RlZmluZSBWRVJTQVRJTEVfTVBNQ19CQVNFICAgICAgICAgICAgMHgxMDExMDAwMAkvKiBNUE1DICovCisjZGVmaW5lIFZFUlNBVElMRV9DTENEX0JBU0UgICAgICAgICAgICAweDEwMTIwMDAwCS8qIENMQ0QgKi8KKyNkZWZpbmUgVkVSU0FUSUxFX0RNQUNfQkFTRSAgICAgICAgICAgIDB4MTAxMzAwMDAJLyogRE1BIGNvbnRyb2xsZXIgKi8KKyNkZWZpbmUgVkVSU0FUSUxFX1ZJQ19CQVNFICAgICAgICAgICAgIDB4MTAxNDAwMDAJLyogVmVjdG9yZWQgaW50ZXJydXB0IGNvbnRyb2xsZXIgKi8KKyNkZWZpbmUgVkVSU0FUSUxFX1BFUklQSF9CQVNFICAgICAgICAgIDB4MTAxNTAwMDAgICAgLyogb2ZmLWNoaXAgcGVyaXBoZXJhbHMgYWxpYXMgZnJvbSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgxMDAwMDAwMCAtIDB4MTAwRkZGRkYgKi8KKyNkZWZpbmUgVkVSU0FUSUxFX0FIQk1fQkFTRSAgICAgICAgICAgIDB4MTAxRDAwMDAJLyogQUhCIG1vbml0b3IgKi8KKyNkZWZpbmUgVkVSU0FUSUxFX1NDVExfQkFTRSAgICAgICAgICAgIDB4MTAxRTAwMDAJLyogU3lzdGVtIGNvbnRyb2xsZXIgKi8KKyNkZWZpbmUgVkVSU0FUSUxFX1dBVENIRE9HX0JBU0UgICAgICAgIDB4MTAxRTEwMDAJLyogV2F0Y2hkb2cgKi8KKyNkZWZpbmUgVkVSU0FUSUxFX1RJTUVSMF8xX0JBU0UgICAgICAgIDB4MTAxRTIwMDAJLyogVGltZXIgMCBhbmQgMSAqLworI2RlZmluZSBWRVJTQVRJTEVfVElNRVIyXzNfQkFTRSAgICAgICAgMHgxMDFFMzAwMAkvKiBUaW1lciAyIGFuZCAzICovCisjZGVmaW5lIFZFUlNBVElMRV9HUElPMF9CQVNFICAgICAgICAgICAweDEwMUU0MDAwCS8qIEdQSU8gcG9ydCAwICovCisjZGVmaW5lIFZFUlNBVElMRV9HUElPMV9CQVNFICAgICAgICAgICAweDEwMUU1MDAwICAgIC8qIEdQSU8gcG9ydCAxICovCisjZGVmaW5lIFZFUlNBVElMRV9HUElPMl9CQVNFICAgICAgICAgICAweDEwMUU2MDAwCS8qIEdQSU8gcG9ydCAyICovCisjZGVmaW5lIFZFUlNBVElMRV9HUElPM19CQVNFICAgICAgICAgICAweDEwMUU3MDAwCS8qIEdQSU8gcG9ydCAzICovCisjZGVmaW5lIFZFUlNBVElMRV9SVENfQkFTRSAgICAgICAgICAgICAweDEwMUU4MDAwCS8qIFJlYWwgVGltZSBDbG9jayAqLworCS8qIDB4MTAxRTkwMDAgLSByZXNlcnZlZCAqLworI2RlZmluZSBWRVJTQVRJTEVfU0NJX0JBU0UgICAgICAgICAgICAgMHgxMDFGMDAwMAkvKiBTbWFydCBjYXJkIGNvbnRyb2xsZXIgKi8KKyNkZWZpbmUgVkVSU0FUSUxFX1VBUlQwX0JBU0UgICAgICAgICAgIDB4MTAxRjEwMDAJLyogVWFydCAwICovCisjZGVmaW5lIFZFUlNBVElMRV9VQVJUMV9CQVNFICAgICAgICAgICAweDEwMUYyMDAwCS8qIFVhcnQgMSAqLworI2RlZmluZSBWRVJTQVRJTEVfVUFSVDJfQkFTRSAgICAgICAgICAgMHgxMDFGMzAwMAkvKiBVYXJ0IDIgKi8KKyNkZWZpbmUgVkVSU0FUSUxFX1NTUF9CQVNFICAgICAgICAgICAgIDB4MTAxRjQwMDAJLyogU3luY2hyb25vdXMgU2VyaWFsIFBvcnQgKi8KKworI2RlZmluZSBWRVJTQVRJTEVfU1NNQ19CQVNFICAgICAgICAgICAgMHgyMDAwMDAwMAkvKiBTU01DICovCisjZGVmaW5lIFZFUlNBVElMRV9JQjJfQkFTRSAgICAgICAgICAgICAweDI0MDAwMDAwCS8qIElCMiBtb2R1bGUgKi8KKyNkZWZpbmUgVkVSU0FUSUxFX01CWF9CQVNFICAgICAgICAgICAgIDB4NDAwMDAwMDAJLyogTUJYICovCisjZGVmaW5lIFZFUlNBVElMRV9QQ0lfQkFTRSAgICAgICAgICAgICAweDQxMDAwMDAwCS8qIFBDSSBJbnRlcmZhY2UgKi8KKyNkZWZpbmUgVkVSU0FUSUxFX1NEUkFNNjdfQkFTRSAgICAgICAgIDB4NzAwMDAwMDAJLyogU0RSQU0gYmFua3MgNiBhbmQgNyAqLworI2RlZmluZSBWRVJTQVRJTEVfTFRfQkFTRSAgICAgICAgICAgICAgMHg4MDAwMDAwMAkvKiBMb2dpYyBUaWxlIGV4cGFuc2lvbiAqLworCisvKgorICogRGlzayBvbiBDaGlwCisgKi8KKyNkZWZpbmUgVkVSU0FUSUxFX0RPQ19CQVNFICAgICAgICAgICAgIDB4MkMwMDAwMDAKKyNkZWZpbmUgVkVSU0FUSUxFX0RPQ19TSVpFICAgICAgICAgICAgICgxNiA8PCAyMCkKKyNkZWZpbmUgVkVSU0FUSUxFX0RPQ19QQUdFX1NJWkUgICAgICAgIDUxMgorI2RlZmluZSBWRVJTQVRJTEVfRE9DX1RPVEFMX1BBR0VTICAgICAoRE9DX1NJWkUgLyBQQUdFX1NJWkUpCisKKyNkZWZpbmUgRVJBU0VfVU5JVF9QQUdFUyAgICAzMgorI2RlZmluZSBTVEFSVF9QQUdFICAgICAgICAgIDB4ODAKKworLyogCisgKiAgTEVEIHNldHRpbmdzLCBiaXRzIFs3OjBdCisgKi8KKyNkZWZpbmUgVkVSU0FUSUxFX1NZU19MRUQwICAgICAgICAgICAgICgxIDw8IDApCisjZGVmaW5lIFZFUlNBVElMRV9TWVNfTEVEMSAgICAgICAgICAgICAoMSA8PCAxKQorI2RlZmluZSBWRVJTQVRJTEVfU1lTX0xFRDIgICAgICAgICAgICAgKDEgPDwgMikKKyNkZWZpbmUgVkVSU0FUSUxFX1NZU19MRUQzICAgICAgICAgICAgICgxIDw8IDMpCisjZGVmaW5lIFZFUlNBVElMRV9TWVNfTEVENCAgICAgICAgICAgICAoMSA8PCA0KQorI2RlZmluZSBWRVJTQVRJTEVfU1lTX0xFRDUgICAgICAgICAgICAgKDEgPDwgNSkKKyNkZWZpbmUgVkVSU0FUSUxFX1NZU19MRUQ2ICAgICAgICAgICAgICgxIDw8IDYpCisjZGVmaW5lIFZFUlNBVElMRV9TWVNfTEVENyAgICAgICAgICAgICAoMSA8PCA3KQorCisjZGVmaW5lIEFMTF9MRURTICAgICAgICAgICAgICAgICAgMHhGRgorCisjZGVmaW5lIExFRF9CQU5LICAgICAgICAgICAgICAgICAgVkVSU0FUSUxFX1NZU19MRUQKKworLyogCisgKiBDb250cm9sIHJlZ2lzdGVycworICovCisjZGVmaW5lIFZFUlNBVElMRV9JREZJRUxEX09GRlNFVAkweDAJLyogVmVyc2F0aWxlIGJ1aWxkIGluZm9ybWF0aW9uICovCisjZGVmaW5lIFZFUlNBVElMRV9GTEFTSFBST0dfT0ZGU0VUCTB4NAkvKiBGbGFzaCBkZXZpY2VzICovCisjZGVmaW5lIFZFUlNBVElMRV9JTlRSRUdfT0ZGU0VUCQkweDgJLyogSW50ZXJydXB0IGNvbnRyb2wgKi8KKyNkZWZpbmUgVkVSU0FUSUxFX0RFQ09ERV9PRkZTRVQJCTB4QwkvKiBGaXR0ZWQgbG9naWMgbW9kdWxlcyAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIFZlcnNhdGlsZSBJbnRlcnJ1cHQgQ29udHJvbGxlciAtIGNvbnRyb2wgcmVnaXN0ZXJzCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIAorICogIE9mZnNldHMgZnJvbSBpbnRlcnJ1cHQgY29udHJvbGxlciBiYXNlIAorICogCisgKiAgU3lzdGVtIENvbnRyb2xsZXIgaW50ZXJydXB0IGNvbnRyb2xsZXIgYmFzZSBpcworICogCisgKiAJVkVSU0FUSUxFX0lDX0JBU0UKKyAqIAorICogIENvcmUgTW9kdWxlIGludGVycnVwdCBjb250cm9sbGVyIGJhc2UgaXMKKyAqIAorICogCVZFUlNBVElMRV9TWVNfSUMgCisgKiAKKyAqLworI2RlZmluZSBWSUNfSVJRX1NUQVRVUyAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgVklDX0ZJUV9TVEFUVVMgICAgICAgICAgICAgICAgICAweDA0CisjZGVmaW5lIFZJQ19JUlFfUkFXX1NUQVRVUyAgICAgICAgICAgICAgMHgwOAorI2RlZmluZSBWSUNfSU5UX1NFTEVDVCAgICAgICAgICAgICAgICAgIDB4MEMJLyogMSA9IEZJUSwgMCA9IElSUSAqLworI2RlZmluZSBWSUNfSVJRX0VOQUJMRSAgICAgICAgICAgICAgICAgIDB4MTAJLyogMSA9IGVuYWJsZSwgMCA9IGRpc2FibGUgKi8KKyNkZWZpbmUgVklDX0lSUV9FTkFCTEVfQ0xFQVIgICAgICAgICAgICAweDE0CisjZGVmaW5lIFZJQ19JUlFfU09GVCAgICAgICAgICAgICAgICAgICAgMHgxOAorI2RlZmluZSBWSUNfSVJRX1NPRlRfQ0xFQVIgICAgICAgICAgICAgIDB4MUMKKyNkZWZpbmUgVklDX1BST1RFQ1QgICAgICAgICAgICAgICAgICAgICAweDIwCisjZGVmaW5lIFZJQ19WRUNUX0FERFIgICAgICAgICAgICAgICAgICAgMHgzMAorI2RlZmluZSBWSUNfREVGX1ZFQ1RfQUREUiAgICAgICAgICAgICAgIDB4MzQKKyNkZWZpbmUgVklDX1ZFQ1RfQUREUjAgICAgICAgICAgICAgICAgICAweDEwMAkvKiAwIHRvIDE1ICovCisjZGVmaW5lIFZJQ19WRUNUX0NOVEwwICAgICAgICAgICAgICAgICAgMHgyMDAJLyogMCB0byAxNSAqLworI2RlZmluZSBWSUNfSVRDUiAgICAgICAgICAgICAgICAgICAgICAgIDB4MzAwICAgLyogVklDIHRlc3QgY29udHJvbCByZWdpc3RlciAqLworCisjZGVmaW5lIFZJQ19GSVFfUkFXX1NUQVRVUyAgICAgICAgICAgICAgMHgwOAorI2RlZmluZSBWSUNfRklRX0VOQUJMRSAgICAgICAgICAgICAgICAgIDB4MTAJLyogMSA9IGVuYWJsZSwgMCA9IGRpc2FibGUgKi8KKyNkZWZpbmUgVklDX0ZJUV9FTkFCTEVfQ0xFQVIgICAgICAgICAgICAweDE0CisjZGVmaW5lIFZJQ19GSVFfU09GVCAgICAgICAgICAgICAgICAgICAgMHgxOAorI2RlZmluZSBWSUNfRklRX1NPRlRfQ0xFQVIgICAgICAgICAgICAgIDB4MUMKKworI2RlZmluZSBTSUNfSVJRX1NUQVRVUyAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU0lDX0lSUV9SQVdfU1RBVFVTICAgICAgICAgICAgICAweDA0CisjZGVmaW5lIFNJQ19JUlFfRU5BQkxFICAgICAgICAgICAgICAgICAgMHgwOAorI2RlZmluZSBTSUNfSVJRX0VOQUJMRV9TRVQgICAgICAgICAgICAgIDB4MDgKKyNkZWZpbmUgU0lDX0lSUV9FTkFCTEVfQ0xFQVIgICAgICAgICAgICAweDBDCisjZGVmaW5lIFNJQ19JTlRfU09GVF9TRVQgICAgICAgICAgICAgICAgMHgxMAorI2RlZmluZSBTSUNfSU5UX1NPRlRfQ0xFQVIgICAgICAgICAgICAgIDB4MTQKKyNkZWZpbmUgU0lDX0lOVF9QSUNfRU5BQkxFICAgICAgICAgICAgICAweDIwCS8qIHJlYWQgc3RhdHVzIG9mIHBhc3MgdGhyb3VnaCBtYXNrICovCisjZGVmaW5lIFNJQ19JTlRfUElDX0VOQUJMRVMgICAgICAgICAgICAgMHgyMAkvKiBzZXQgaW50ZXJydXB0IHBhc3MgdGhyb3VnaCBiaXRzICovCisjZGVmaW5lIFNJQ19JTlRfUElDX0VOQUJMRUMgICAgICAgICAgICAgMHgyNAkvKiBDbGVhciBpbnRlcnJ1cHQgcGFzcyB0aHJvdWdoIGJpdHMgKi8KKworI2RlZmluZSBWSUNWZWN0Q250bF9FbmFibGUJCSgxIDw8IDUpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIEludGVycnVwdHMgLSBiaXQgYXNzaWdubWVudCAocHJpbWFyeSkKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNkZWZpbmUgSU5UX1dET0dJTlQgICAgICAgICAgICAgICAgICAgICAwCS8qIFdhdGNoZG9nIHRpbWVyICovCisjZGVmaW5lIElOVF9TT0ZUSU5UICAgICAgICAgICAgICAgICAgICAgMQkvKiBTb2Z0d2FyZSBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU5UX0NPTU1SeCAgICAgICAgICAgICAgICAgICAgICAyCS8qIERlYnVnIENvbW0gUnggaW50ZXJydXB0ICovCisjZGVmaW5lIElOVF9DT01NVHggICAgICAgICAgICAgICAgICAgICAgMwkvKiBEZWJ1ZyBDb21tIFR4IGludGVycnVwdCAqLworI2RlZmluZSBJTlRfVElNRVJJTlQwXzEgICAgICAgICAgICAgICAgIDQJLyogVGltZXIgMCBhbmQgMSAqLworI2RlZmluZSBJTlRfVElNRVJJTlQyXzMgICAgICAgICAgICAgICAgIDUJLyogVGltZXIgMiBhbmQgMyAqLworI2RlZmluZSBJTlRfR1BJT0lOVDAgICAgICAgICAgICAgICAgICAgIDYJLyogR1BJTyAwICovCisjZGVmaW5lIElOVF9HUElPSU5UMSAgICAgICAgICAgICAgICAgICAgNwkvKiBHUElPIDEgKi8KKyNkZWZpbmUgSU5UX0dQSU9JTlQyICAgICAgICAgICAgICAgICAgICA4CS8qIEdQSU8gMiAqLworI2RlZmluZSBJTlRfR1BJT0lOVDMgICAgICAgICAgICAgICAgICAgIDkJLyogR1BJTyAzICovCisjZGVmaW5lIElOVF9SVENJTlQgICAgICAgICAgICAgICAgICAgICAgMTAJLyogUmVhbCBUaW1lIENsb2NrICovCisjZGVmaW5lIElOVF9TU1BJTlQgICAgICAgICAgICAgICAgICAgICAgMTEJLyogU3luY2hyb25vdXMgU2VyaWFsIFBvcnQgKi8KKyNkZWZpbmUgSU5UX1VBUlRJTlQwICAgICAgICAgICAgICAgICAgICAxMgkvKiBVQVJUIDAgb24gZGV2ZWxvcG1lbnQgY2hpcCAqLworI2RlZmluZSBJTlRfVUFSVElOVDEgICAgICAgICAgICAgICAgICAgIDEzCS8qIFVBUlQgMSBvbiBkZXZlbG9wbWVudCBjaGlwICovCisjZGVmaW5lIElOVF9VQVJUSU5UMiAgICAgICAgICAgICAgICAgICAgMTQJLyogVUFSVCAyIG9uIGRldmVsb3BtZW50IGNoaXAgKi8KKyNkZWZpbmUgSU5UX1NDSUlOVCAgICAgICAgICAgICAgICAgICAgICAxNQkvKiBTbWFydCBDYXJkIEludGVyZmFjZSAqLworI2RlZmluZSBJTlRfQ0xDRElOVCAgICAgICAgICAgICAgICAgICAgIDE2CS8qIENMQ0QgY29udHJvbGxlciAqLworI2RlZmluZSBJTlRfRE1BSU5UICAgICAgICAgICAgICAgICAgICAgIDE3CS8qIERNQSBjb250cm9sbGVyICovCisjZGVmaW5lIElOVF9QV1JGQUlMSU5UICAgICAgICAgICAgICAgICAgMTgJLyogUG93ZXIgZmFpbHVyZSAqLworI2RlZmluZSBJTlRfTUJYSU5UICAgICAgICAgICAgICAgICAgICAgIDE5CS8qIEdyYXBoaWNzIHByb2Nlc3NvciAqLworI2RlZmluZSBJTlRfR05ESU5UICAgICAgICAgICAgICAgICAgICAgIDIwCS8qIFJlc2VydmVkICovCisJLyogRXh0ZXJuYWwgaW50ZXJydXB0IHNpZ25hbHMgZnJvbSBsb2dpYyB0aWxlcyBvciBzZWNvbmRhcnkgY29udHJvbGxlciAqLworI2RlZmluZSBJTlRfVklDU09VUkNFMjEgICAgICAgICAgICAgICAgIDIxCS8qIERpc2sgb24gQ2hpcCAqLworI2RlZmluZSBJTlRfVklDU09VUkNFMjIgICAgICAgICAgICAgICAgIDIyCS8qIE1DSTBBICovCisjZGVmaW5lIElOVF9WSUNTT1VSQ0UyMyAgICAgICAgICAgICAgICAgMjMJLyogTUNJMUEgKi8KKyNkZWZpbmUgSU5UX1ZJQ1NPVVJDRTI0ICAgICAgICAgICAgICAgICAyNAkvKiBBQUNJICovCisjZGVmaW5lIElOVF9WSUNTT1VSQ0UyNSAgICAgICAgICAgICAgICAgMjUJLyogRXRoZXJuZXQgKi8KKyNkZWZpbmUgSU5UX1ZJQ1NPVVJDRTI2ICAgICAgICAgICAgICAgICAyNgkvKiBVU0IgKi8KKyNkZWZpbmUgSU5UX1ZJQ1NPVVJDRTI3ICAgICAgICAgICAgICAgICAyNwkvKiBQQ0kgMCAqLworI2RlZmluZSBJTlRfVklDU09VUkNFMjggICAgICAgICAgICAgICAgIDI4CS8qIFBDSSAxICovCisjZGVmaW5lIElOVF9WSUNTT1VSQ0UyOSAgICAgICAgICAgICAgICAgMjkJLyogUENJIDIgKi8KKyNkZWZpbmUgSU5UX1ZJQ1NPVVJDRTMwICAgICAgICAgICAgICAgICAzMAkvKiBQQ0kgMyAqLworI2RlZmluZSBJTlRfVklDU09VUkNFMzEgICAgICAgICAgICAgICAgIDMxCS8qIFNJQyBzb3VyY2UgKi8KKworLyogCisgKiAgSW50ZXJydXB0IGJpdCBwb3NpdGlvbnMKKyAqIAorICovCisjZGVmaW5lIElOVE1BU0tfV0RPR0lOVCAgICAgICAgICAgICAgICAgKDEgPDwgSU5UX1dET0dJTlQpCisjZGVmaW5lIElOVE1BU0tfU09GVElOVCAgICAgICAgICAgICAgICAgKDEgPDwgSU5UX1NPRlRJTlQpCisjZGVmaW5lIElOVE1BU0tfQ09NTVJ4ICAgICAgICAgICAgICAgICAgKDEgPDwgSU5UX0NPTU1SeCkKKyNkZWZpbmUgSU5UTUFTS19DT01NVHggICAgICAgICAgICAgICAgICAoMSA8PCBJTlRfQ09NTVR4KQorI2RlZmluZSBJTlRNQVNLX1RJTUVSSU5UMF8xICAgICAgICAgICAgICgxIDw8IElOVF9USU1FUklOVDBfMSkKKyNkZWZpbmUgSU5UTUFTS19USU1FUklOVDJfMyAgICAgICAgICAgICAoMSA8PCBJTlRfVElNRVJJTlQyXzMpCisjZGVmaW5lIElOVE1BU0tfR1BJT0lOVDAgICAgICAgICAgICAgICAgKDEgPDwgSU5UX0dQSU9JTlQwKQorI2RlZmluZSBJTlRNQVNLX0dQSU9JTlQxICAgICAgICAgICAgICAgICgxIDw8IElOVF9HUElPSU5UMSkKKyNkZWZpbmUgSU5UTUFTS19HUElPSU5UMiAgICAgICAgICAgICAgICAoMSA8PCBJTlRfR1BJT0lOVDIpCisjZGVmaW5lIElOVE1BU0tfR1BJT0lOVDMgICAgICAgICAgICAgICAgKDEgPDwgSU5UX0dQSU9JTlQzKQorI2RlZmluZSBJTlRNQVNLX1JUQ0lOVCAgICAgICAgICAgICAgICAgICgxIDw8IElOVF9SVENJTlQpCisjZGVmaW5lIElOVE1BU0tfU1NQSU5UICAgICAgICAgICAgICAgICAgKDEgPDwgSU5UX1NTUElOVCkKKyNkZWZpbmUgSU5UTUFTS19VQVJUSU5UMCAgICAgICAgICAgICAgICAoMSA8PCBJTlRfVUFSVElOVDApCisjZGVmaW5lIElOVE1BU0tfVUFSVElOVDEgICAgICAgICAgICAgICAgKDEgPDwgSU5UX1VBUlRJTlQxKQorI2RlZmluZSBJTlRNQVNLX1VBUlRJTlQyICAgICAgICAgICAgICAgICgxIDw8IElOVF9VQVJUSU5UMikKKyNkZWZpbmUgSU5UTUFTS19TQ0lJTlQgICAgICAgICAgICAgICAgICAoMSA8PCBJTlRfU0NJSU5UKQorI2RlZmluZSBJTlRNQVNLX0NMQ0RJTlQgICAgICAgICAgICAgICAgICgxIDw8IElOVF9DTENESU5UKQorI2RlZmluZSBJTlRNQVNLX0RNQUlOVCAgICAgICAgICAgICAgICAgICgxIDw8IElOVF9ETUFJTlQpCisjZGVmaW5lIElOVE1BU0tfUFdSRkFJTElOVCAgICAgICAgICAgICAgKDEgPDwgSU5UX1BXUkZBSUxJTlQpCisjZGVmaW5lIElOVE1BU0tfTUJYSU5UICAgICAgICAgICAgICAgICAgKDEgPDwgSU5UX01CWElOVCkKKyNkZWZpbmUgSU5UTUFTS19HTkRJTlQgICAgICAgICAgICAgICAgICAoMSA8PCBJTlRfR05ESU5UKQorI2RlZmluZSBJTlRNQVNLX1ZJQ1NPVVJDRTIxICAgICAgICAgICAgICgxIDw8IElOVF9WSUNTT1VSQ0UyMSkKKyNkZWZpbmUgSU5UTUFTS19WSUNTT1VSQ0UyMiAgICAgICAgICAgICAoMSA8PCBJTlRfVklDU09VUkNFMjIpCisjZGVmaW5lIElOVE1BU0tfVklDU09VUkNFMjMgICAgICAgICAgICAgKDEgPDwgSU5UX1ZJQ1NPVVJDRTIzKQorI2RlZmluZSBJTlRNQVNLX1ZJQ1NPVVJDRTI0ICAgICAgICAgICAgICgxIDw8IElOVF9WSUNTT1VSQ0UyNCkKKyNkZWZpbmUgSU5UTUFTS19WSUNTT1VSQ0UyNSAgICAgICAgICAgICAoMSA8PCBJTlRfVklDU09VUkNFMjUpCisjZGVmaW5lIElOVE1BU0tfVklDU09VUkNFMjYgICAgICAgICAgICAgKDEgPDwgSU5UX1ZJQ1NPVVJDRTI2KQorI2RlZmluZSBJTlRNQVNLX1ZJQ1NPVVJDRTI3ICAgICAgICAgICAgICgxIDw8IElOVF9WSUNTT1VSQ0UyNykKKyNkZWZpbmUgSU5UTUFTS19WSUNTT1VSQ0UyOCAgICAgICAgICAgICAoMSA8PCBJTlRfVklDU09VUkNFMjgpCisjZGVmaW5lIElOVE1BU0tfVklDU09VUkNFMjkgICAgICAgICAgICAgKDEgPDwgSU5UX1ZJQ1NPVVJDRTI5KQorI2RlZmluZSBJTlRNQVNLX1ZJQ1NPVVJDRTMwICAgICAgICAgICAgICgxIDw8IElOVF9WSUNTT1VSQ0UzMCkKKyNkZWZpbmUgSU5UTUFTS19WSUNTT1VSQ0UzMSAgICAgICAgICAgICAoMSA8PCBJTlRfVklDU09VUkNFMzEpCisKKworI2RlZmluZSBWRVJTQVRJTEVfU0NfVkFMSURfSU5UICAgICAgICAgICAgICAgMHgwMDNGRkZGRgorCisjZGVmaW5lIE1BWElSUU5VTSAgICAgICAgICAgICAgICAgICAgICAgMzEKKyNkZWZpbmUgTUFYRklRTlVNICAgICAgICAgICAgICAgICAgICAgICAzMQorI2RlZmluZSBNQVhTV0lOVU0gICAgICAgICAgICAgICAgICAgICAgIDMxCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIEludGVycnVwdHMgLSBiaXQgYXNzaWdubWVudCAoc2Vjb25kYXJ5KQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNkZWZpbmUgU0lDX0lOVF9NTUNJMEIgICAgICAgICAgICAgICAgICAxCS8qIE11bHRpbWVkaWEgQ2FyZCAwQiAqLworI2RlZmluZSBTSUNfSU5UX01NQ0kxQiAgICAgICAgICAgICAgICAgIDIJLyogTXVsdGltZWRpYSBDYXJkIDFCICovCisjZGVmaW5lIFNJQ19JTlRfS01JMCAgICAgICAgICAgICAgICAgICAgMwkvKiBLZXlib2FyZC9Nb3VzZSBwb3J0IDAgKi8KKyNkZWZpbmUgU0lDX0lOVF9LTUkxICAgICAgICAgICAgICAgICAgICA0CS8qIEtleWJvYXJkL01vdXNlIHBvcnQgMSAqLworI2RlZmluZSBTSUNfSU5UX1NDSTMgICAgICAgICAgICAgICAgICAgIDUJLyogU21hcnQgQ2FyZCBpbnRlcmZhY2UgKi8KKyNkZWZpbmUgU0lDX0lOVF9VQVJUMyAgICAgICAgICAgICAgICAgICA2CS8qIFVBUlQgMyBlbXB0eSBvciBkYXRhIGF2YWlsYWJsZSAqLworI2RlZmluZSBTSUNfSU5UX0NMQ0QgICAgICAgICAgICAgICAgICAgIDcJLyogQ2hhcmFjdGVyIExDRCAqLworI2RlZmluZSBTSUNfSU5UX1RPVUNIICAgICAgICAgICAgICAgICAgIDgJLyogVG91Y2hzY3JlZW4gKi8KKyNkZWZpbmUgU0lDX0lOVF9LRVlQQUQgICAgICAgICAgICAgICAgICA5CS8qIEtleSBwcmVzc2VkIG9uIGRpc3BsYXkga2V5cGFkICovCisJLyogMTA6MjAgLSByZXNlcnZlZCAqLworI2RlZmluZSBTSUNfSU5UX0RvQyAgICAgICAgICAgICAgICAgICAgIDIxCS8qIERpc2sgb24gQ2hpcCBtZW1vcnkgY29udHJvbGxlciAqLworI2RlZmluZSBTSUNfSU5UX01NQ0kwQSAgICAgICAgICAgICAgICAgIDIyCS8qIE1NQyAwQSAqLworI2RlZmluZSBTSUNfSU5UX01NQ0kxQSAgICAgICAgICAgICAgICAgIDIzCS8qIE1NQyAxQSAqLworI2RlZmluZSBTSUNfSU5UX0FBQ0kgICAgICAgICAgICAgICAgICAgIDI0CS8qIEF1ZGlvIENvZGVjICovCisjZGVmaW5lIFNJQ19JTlRfRVRIICAgICAgICAgICAgICAgICAgICAgMjUJLyogRXRoZXJuZXQgY29udHJvbGxlciAqLworI2RlZmluZSBTSUNfSU5UX1VTQiAgICAgICAgICAgICAgICAgICAgIDI2CS8qIFVTQiBjb250cm9sbGVyICovCisjZGVmaW5lIFNJQ19JTlRfUENJMCAgICAgICAgICAgICAgICAgICAgMjcKKyNkZWZpbmUgU0lDX0lOVF9QQ0kxICAgICAgICAgICAgICAgICAgICAyOAorI2RlZmluZSBTSUNfSU5UX1BDSTIgICAgICAgICAgICAgICAgICAgIDI5CisjZGVmaW5lIFNJQ19JTlRfUENJMyAgICAgICAgICAgICAgICAgICAgMzAKKworCisjZGVmaW5lIFNJQ19JTlRNQVNLX01NQ0kwQiAgICAgICAgICAgICAgKDEgPDwgU0lDX0lOVF9NTUNJMEIpCisjZGVmaW5lIFNJQ19JTlRNQVNLX01NQ0kxQiAgICAgICAgICAgICAgKDEgPDwgU0lDX0lOVF9NTUNJMUIpCisjZGVmaW5lIFNJQ19JTlRNQVNLX0tNSTAgICAgICAgICAgICAgICAgKDEgPDwgU0lDX0lOVF9LTUkwKQorI2RlZmluZSBTSUNfSU5UTUFTS19LTUkxICAgICAgICAgICAgICAgICgxIDw8IFNJQ19JTlRfS01JMSkKKyNkZWZpbmUgU0lDX0lOVE1BU0tfU0NJMyAgICAgICAgICAgICAgICAoMSA8PCBTSUNfSU5UX1NDSTMpCisjZGVmaW5lIFNJQ19JTlRNQVNLX1VBUlQzICAgICAgICAgICAgICAgKDEgPDwgU0lDX0lOVF9VQVJUMykKKyNkZWZpbmUgU0lDX0lOVE1BU0tfQ0xDRCAgICAgICAgICAgICAgICAoMSA8PCBTSUNfSU5UX0NMQ0QpCisjZGVmaW5lIFNJQ19JTlRNQVNLX1RPVUNIICAgICAgICAgICAgICAgKDEgPDwgU0lDX0lOVF9UT1VDSCkKKyNkZWZpbmUgU0lDX0lOVE1BU0tfS0VZUEFEICAgICAgICAgICAgICAoMSA8PCBTSUNfSU5UX0tFWVBBRCkKKyNkZWZpbmUgU0lDX0lOVE1BU0tfRG9DICAgICAgICAgICAgICAgICAoMSA8PCBTSUNfSU5UX0RvQykKKyNkZWZpbmUgU0lDX0lOVE1BU0tfTU1DSTBBICAgICAgICAgICAgICAoMSA8PCBTSUNfSU5UX01NQ0kwQSkKKyNkZWZpbmUgU0lDX0lOVE1BU0tfTU1DSTFBICAgICAgICAgICAgICAoMSA8PCBTSUNfSU5UX01NQ0kxQSkKKyNkZWZpbmUgU0lDX0lOVE1BU0tfQUFDSSAgICAgICAgICAgICAgICAoMSA8PCBTSUNfSU5UX0FBQ0kpCisjZGVmaW5lIFNJQ19JTlRNQVNLX0VUSCAgICAgICAgICAgICAgICAgKDEgPDwgU0lDX0lOVF9FVEgpCisjZGVmaW5lIFNJQ19JTlRNQVNLX1VTQiAgICAgICAgICAgICAgICAgKDEgPDwgU0lDX0lOVF9VU0IpCisjZGVmaW5lIFNJQ19JTlRNQVNLX1BDSTAgICAgICAgICAgICAgICAgKDEgPDwgU0lDX0lOVF9QQ0kwKQorI2RlZmluZSBTSUNfSU5UTUFTS19QQ0kxICAgICAgICAgICAgICAgICgxIDw8IFNJQ19JTlRfUENJMSkKKyNkZWZpbmUgU0lDX0lOVE1BU0tfUENJMiAgICAgICAgICAgICAgICAoMSA8PCBTSUNfSU5UX1BDSTIpCisjZGVmaW5lIFNJQ19JTlRNQVNLX1BDSTMgICAgICAgICAgICAgICAgKDEgPDwgU0lDX0lOVF9QQ0kzKQorLyogCisgKiAgQXBwbGljYXRpb24gRmxhc2gKKyAqIAorICovCisjZGVmaW5lIEZMQVNIX0JBU0UgICAgICAgICAgICAgICAgICAgICAgVkVSU0FUSUxFX0ZMQVNIX0JBU0UKKyNkZWZpbmUgRkxBU0hfU0laRSAgICAgICAgICAgICAgICAgICAgICBWRVJTQVRJTEVfRkxBU0hfU0laRQorI2RlZmluZSBGTEFTSF9FTkQgICAgICAgICAgICAgICAgICAgICAgIChGTEFTSF9CQVNFICsgRkxBU0hfU0laRSAtIDEpCisjZGVmaW5lIEZMQVNIX0JMT0NLX1NJWkUgICAgICAgICAgICAgICAgU1pfMTI4SworCisvKiAKKyAqICBCb290IEZsYXNoCisgKiAKKyAqLworI2RlZmluZSBFUFJPTV9CQVNFICAgICAgICAgICAgICAgICAgICAgIFZFUlNBVElMRV9CT09UX1JPTV9ISQorI2RlZmluZSBFUFJPTV9TSVpFICAgICAgICAgICAgICAgICAgICAgIFZFUlNBVElMRV9CT09UX1JPTV9TSVpFCisjZGVmaW5lIEVQUk9NX0VORCAgICAgICAgICAgICAgICAgICAgICAgKEVQUk9NX0JBU0UgKyBFUFJPTV9TSVpFIC0gMSkKKworLyogCisgKiAgQ2xlYW4gYmFzZSAtIGR1bW15CisgKiAKKyAqLworI2RlZmluZSBDTEVBTl9CQVNFICAgICAgICAgICAgICAgICAgICAgIEVQUk9NX0JBU0UKKworLyoKKyAqIFN5c3RlbSBjb250cm9sbGVyIGJpdCBhc3NpZ25tZW50CisgKi8KKyNkZWZpbmUgVkVSU0FUSUxFX1JFRkNMSwkwCisjZGVmaW5lIFZFUlNBVElMRV9USU1DTEsJMQorCisjZGVmaW5lIFZFUlNBVElMRV9USU1FUjFfRW5TZWwJMTUKKyNkZWZpbmUgVkVSU0FUSUxFX1RJTUVSMl9FblNlbAkxNworI2RlZmluZSBWRVJTQVRJTEVfVElNRVIzX0VuU2VsCTE5CisjZGVmaW5lIFZFUlNBVElMRV9USU1FUjRfRW5TZWwJMjEKKworCisjZGVmaW5lIE1BWF9USU1FUiAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBNQVhfUEVSSU9EICAgICAgICAgICAgICAgICAgICAgIDY5OTA1MAorI2RlZmluZSBUSUNLU19QRVJfdVNFQyAgICAgICAgICAgICAgICAgIDEKKworLyogCisgKiAgVGhlc2UgYXJlIHVzZWNvbmRzIE5PVCB0aWNrcy4gIAorICogCisgKi8KKyNkZWZpbmUgbVNFQ18xICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAwCisjZGVmaW5lIG1TRUNfNSAgICAgICAgICAgICAgICAgICAgICAgICAgKG1TRUNfMSAqIDUpCisjZGVmaW5lIG1TRUNfMTAgICAgICAgICAgICAgICAgICAgICAgICAgKG1TRUNfMSAqIDEwKQorI2RlZmluZSBtU0VDXzI1ICAgICAgICAgICAgICAgICAgICAgICAgIChtU0VDXzEgKiAyNSkKKyNkZWZpbmUgU0VDXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAobVNFQ18xICogMTAwMCkKKworI2RlZmluZSBWRVJTQVRJTEVfQ1NSX0JBU0UgICAgICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBWRVJTQVRJTEVfQ1NSX1NJWkUgICAgICAgICAgICAgMHgxMDAwMDAwMAorCisjaWZkZWYgQ09ORklHX01BQ0hfVkVSU0FUSUxFX0FCCisvKgorICogSUIyIFZlcnNhdGlsZS9BQiBleHBhbnNpb24gYm9hcmQgZGVmaW5pdGlvbnMKKyAqLworI2RlZmluZSBWRVJTQVRJTEVfSUIyX0NBTUVSQV9CQU5LCTB4MjQwMDAwMDAKKyNkZWZpbmUgVkVSU0FUSUxFX0lCMl9LQkRfREFUQVJFRwkweDI1MDAwMDAwCisjZGVmaW5lIFZFUlNBVElMRV9JQjJfSUVSCQkweDI2MDAwMDAwCS8qIGZvciBWSUNJTlRTT1VSQ0UyNyAqLworI2RlZmluZSBWRVJTQVRJTEVfSUIyX0NUUkwJCTB4MjcwMDAwMDAKKyNkZWZpbmUgVkVSU0FUSUxFX0lCMl9TVEFUCQkweDI3MDAwMDA0CisjZW5kaWYKKworI2VuZGlmCisKKy8qIAlFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXZlcnNhdGlsZS9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXZlcnNhdGlsZS9zeXN0ZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODg5YTE4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtdmVyc2F0aWxlL3N5c3RlbS5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtdmVyc2F0aWxlL3N5c3RlbS5oCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMyBBUk0gTGltaXRlZAorICogIENvcHlyaWdodCAoQykgMjAwMCBEZWVwIEJsdWUgU29sdXRpb25zIEx0ZAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworI2lmbmRlZiBfX0FTTV9BUkNIX1NZU1RFTV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfU1lTVEVNX0gKKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3BsYXRmb3JtLmg+CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2lkbGUodm9pZCkKK3sKKwkvKgorCSAqIFRoaXMgc2hvdWxkIGRvIGFsbCB0aGUgY2xvY2sgc3dpdGNoaW5nCisJICogYW5kIHdhaXQgZm9yIGludGVycnVwdCB0cmlja3MKKwkgKi8KKwljcHVfZG9faWRsZSgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUpCit7CisJdW5zaWduZWQgaW50IGhkcl9jdHJsID0JKElPX0FERFJFU1MoVkVSU0FUSUxFX1NZU19CQVNFKSArIFZFUlNBVElMRV9TWVNfUkVTRVRDVExfT0ZGU0VUKTsKKwl1bnNpZ25lZCBpbnQgdmFsOworCisJLyoKKwkgKiBUbyByZXNldCwgd2UgaGl0IHRoZSBvbi1ib2FyZCByZXNldCByZWdpc3RlcgorCSAqIGluIHRoZSBzeXN0ZW0gRlBHQQorCSAqLworCXZhbCA9IF9fcmF3X3JlYWRsKGhkcl9jdHJsKTsKKwl2YWwgfD0gVkVSU0FUSUxFX1NZU19DVFJMX1JFU0VUX0NPTkZJR0NMUjsKKwlfX3Jhd193cml0ZWwodmFsLCBoZHJfY3RybCk7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtdmVyc2F0aWxlL3RpbWV4LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC12ZXJzYXRpbGUvdGltZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGZkMDRmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtdmVyc2F0aWxlL3RpbWV4LmgKQEAgLTAsMCArMSwyMyBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC12ZXJzYXRpbGUvdGltZXguaAorICoKKyAqICBWZXJzYXRpbGUgYXJjaGl0ZWN0dXJlIHRpbWV4IHNwZWNpZmljYXRpb25zCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMyBBUk0gTGltaXRlZAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjZGVmaW5lIENMT0NLX1RJQ0tfUkFURQkJKDUwMDAwMDAwIC8gMTYpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC12ZXJzYXRpbGUvdW5jb21wcmVzcy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtdmVyc2F0aWxlL3VuY29tcHJlc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjU3NDk5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtdmVyc2F0aWxlL3VuY29tcHJlc3MuaApAQCAtMCwwICsxLDUyIEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLXZlcnNhdGlsZS91bmNvbXByZXNzLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzIEFSTSBMaW1pdGVkCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisjZGVmaW5lIEFNQkFfVUFSVF9EUgkoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopMHgxMDFGMTAwMCkKKyNkZWZpbmUgQU1CQV9VQVJUX0xDUkgJKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKTB4MTAxRjEwMkMpCisjZGVmaW5lIEFNQkFfVUFSVF9DUgkoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopMHgxMDFGMTAzMCkKKyNkZWZpbmUgQU1CQV9VQVJUX0ZSCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikweDEwMUYxMDE4KQorCisvKgorICogVGhpcyBkb2VzIG5vdCBhcHBlbmQgYSBuZXdsaW5lCisgKi8KK3N0YXRpYyB2b2lkIHB1dHN0cihjb25zdCBjaGFyICpzKQoreworCXdoaWxlICgqcykgeworCQl3aGlsZSAoQU1CQV9VQVJUX0ZSICYgKDEgPDwgNSkpCisJCQliYXJyaWVyKCk7CisKKwkJQU1CQV9VQVJUX0RSID0gKnM7CisKKwkJaWYgKCpzID09ICdcbicpIHsKKwkJCXdoaWxlIChBTUJBX1VBUlRfRlIgJiAoMSA8PCA1KSkKKwkJCQliYXJyaWVyKCk7CisKKwkJCUFNQkFfVUFSVF9EUiA9ICdccic7CisJCX0KKwkJcysrOworCX0KKwl3aGlsZSAoQU1CQV9VQVJUX0ZSICYgKDEgPDwgMykpCisJCWJhcnJpZXIoKTsKK30KKworLyoKKyAqIG5vdGhpbmcgdG8gZG8KKyAqLworI2RlZmluZSBhcmNoX2RlY29tcF9zZXR1cCgpCisjZGVmaW5lIGFyY2hfZGVjb21wX3dkb2coKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtdmVyc2F0aWxlL3ZtYWxsb2MuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXZlcnNhdGlsZS92bWFsbG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRmYjM0ODIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC12ZXJzYXRpbGUvdm1hbGxvYy5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtdmVyc2F0aWxlL3ZtYWxsb2MuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMgQVJNIExpbWl0ZWQKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDAgUnVzc2VsbCBLaW5nLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisvKgorICogSnVzdCBhbnkgYXJiaXRyYXJ5IG9mZnNldCB0byB0aGUgc3RhcnQgb2YgdGhlIHZtYWxsb2MgVk0gYXJlYTogdGhlCisgKiBjdXJyZW50IDhNQiB2YWx1ZSBqdXN0IG1lYW5zIHRoYXQgdGhlcmUgd2lsbCBiZSBhIDhNQiAiaG9sZSIgYWZ0ZXIgdGhlCisgKiBwaHlzaWNhbCBtZW1vcnkgdW50aWwgdGhlIGtlcm5lbCB2aXJ0dWFsIG1lbW9yeSBzdGFydHMuICBUaGF0IG1lYW5zIHRoYXQKKyAqIGFueSBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyB3aWxsIGhvcGVmdWxseSBiZSBjYXVnaHQuCisgKiBUaGUgdm1hbGxvYygpIHJvdXRpbmVzIGxlYXZlcyBhIGhvbGUgb2YgNGtCIGJldHdlZW4gZWFjaCB2bWFsbG9jZWQKKyAqIGFyZWEgZm9yIHRoZSBzYW1lIHJlYXNvbi4gOykKKyAqLworI2RlZmluZSBWTUFMTE9DX09GRlNFVAkJKDgqMTAyNCoxMDI0KQorI2RlZmluZSBWTUFMTE9DX1NUQVJUCQkoKCh1bnNpZ25lZCBsb25nKWhpZ2hfbWVtb3J5ICsgVk1BTExPQ19PRkZTRVQpICYgfihWTUFMTE9DX09GRlNFVC0xKSkKKyNkZWZpbmUgVk1BTExPQ19WTUFERFIoeCkJKCh1bnNpZ25lZCBsb25nKSh4KSkKKyNkZWZpbmUgVk1BTExPQ19FTkQJCShQQUdFX09GRlNFVCArIDB4MTgwMDAwMDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXNzZW1ibGVyLmggYi9pbmNsdWRlL2FzbS1hcm0vYXNzZW1ibGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjlhMjhmOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hc3NlbWJsZXIuaApAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXNzZW1ibGVyLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAgUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgVGhpcyBmaWxlIGNvbnRhaW5zIGFybSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgZGVmaW5lcworICogIGZvciB0aGUgZGlmZmVyZW50IHByb2Nlc3NvcnMuCisgKgorICogIERvIG5vdCBpbmNsdWRlIGFueSBDIGRlY2xhcmF0aW9ucyBpbiB0aGlzIGZpbGUgLSBpdCBpcyBpbmNsdWRlZCBieQorICogIGFzc2VtYmxlciBzb3VyY2UuCisgKi8KKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjZXJyb3IgIk9ubHkgaW5jbHVkZSB0aGlzIGZyb20gYXNzZW1ibHkgY29kZSIKKyNlbmRpZgorCisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorCisvKgorICogRW5kaWFuIGluZGVwZW5kZW50IG1hY3JvcyBmb3Igc2hpZnRpbmcgYnl0ZXMgd2l0aGluIHJlZ2lzdGVycy4KKyAqLworI2lmbmRlZiBfX0FSTUVCX18KKyNkZWZpbmUgcHVsbCAgICAgICAgICAgIGxzcgorI2RlZmluZSBwdXNoICAgICAgICAgICAgbHNsCisjZGVmaW5lIGdldF9ieXRlXzAgICAgICBsc2wgIzAKKyNkZWZpbmUgZ2V0X2J5dGVfMQlsc3IgIzgKKyNkZWZpbmUgZ2V0X2J5dGVfMglsc3IgIzE2CisjZGVmaW5lIGdldF9ieXRlXzMJbHNyICMyNAorI2RlZmluZSBwdXRfYnl0ZV8wICAgICAgbHNsICMwCisjZGVmaW5lIHB1dF9ieXRlXzEJbHNsICM4CisjZGVmaW5lIHB1dF9ieXRlXzIJbHNsICMxNgorI2RlZmluZSBwdXRfYnl0ZV8zCWxzbCAjMjQKKyNlbHNlCisjZGVmaW5lIHB1bGwgICAgICAgICAgICBsc2wKKyNkZWZpbmUgcHVzaCAgICAgICAgICAgIGxzcgorI2RlZmluZSBnZXRfYnl0ZV8wCWxzciAjMjQKKyNkZWZpbmUgZ2V0X2J5dGVfMQlsc3IgIzE2CisjZGVmaW5lIGdldF9ieXRlXzIJbHNyICM4CisjZGVmaW5lIGdldF9ieXRlXzMgICAgICBsc2wgIzAKKyNkZWZpbmUgcHV0X2J5dGVfMAlsc2wgIzI0CisjZGVmaW5lIHB1dF9ieXRlXzEJbHNsICMxNgorI2RlZmluZSBwdXRfYnl0ZV8yCWxzbCAjOAorI2RlZmluZSBwdXRfYnl0ZV8zICAgICAgbHNsICMwCisjZW5kaWYKKworLyoKKyAqIERhdGEgcHJlbG9hZCBmb3IgYXJjaGl0ZWN0dXJlcyB0aGF0IHN1cHBvcnQgaXQKKyAqLworI2lmIF9fTElOVVhfQVJNX0FSQ0hfXyA+PSA1CisjZGVmaW5lIFBMRChjb2RlLi4uKQljb2RlCisjZWxzZQorI2RlZmluZSBQTEQoY29kZS4uLikKKyNlbmRpZgorCisjZGVmaW5lIE1PREVfVVNSCVVTUl9NT0RFCisjZGVmaW5lIE1PREVfRklRCUZJUV9NT0RFCisjZGVmaW5lIE1PREVfSVJRCUlSUV9NT0RFCisjZGVmaW5lIE1PREVfU1ZDCVNWQ19NT0RFCisKKyNkZWZpbmUgREVGQVVMVF9GSVEJTU9ERV9GSVEKKworLyoKKyAqIExPQURSRUdTIC0gbGRtIHdpdGggUEMgaW4gcmVnaXN0ZXIgbGlzdCAoZWcsIGxkbWZkIHNwISwge3BjfSkKKyAqLworI2lmZGVmIF9fU1REQ19fCisjZGVmaW5lIExPQURSRUdTKGNvbmQsIGJhc2UsIHJlZ2xpc3QuLi4pXAorCWxkbSMjY29uZAliYXNlLHJlZ2xpc3QKKyNlbHNlCisjZGVmaW5lIExPQURSRUdTKGNvbmQsIGJhc2UsIHJlZ2xpc3QuLi4pXAorCWxkbS8qKi9jb25kCWJhc2UscmVnbGlzdAorI2VuZGlmCisKKy8qCisgKiBCdWlsZCBhIHJldHVybiBpbnN0cnVjdGlvbiBmb3IgdGhpcyBwcm9jZXNzb3IgdHlwZS4KKyAqLworI2RlZmluZSBSRVRJTlNUUihpbnN0ciwgcmVncy4uLilcCisJaW5zdHIJcmVncworCisvKgorICogU2F2ZSB0aGUgY3VycmVudCBJUlEgc3RhdGUgYW5kIGRpc2FibGUgSVJRcy4gIE5vdGUgdGhhdCB0aGlzIG1hY3JvCisgKiBhc3N1bWVzIEZJUXMgYXJlIGVuYWJsZWQsIGFuZCB0aGF0IHRoZSBwcm9jZXNzb3IgaXMgaW4gU1ZDIG1vZGUuCisgKi8KKwkubWFjcm8Jc2F2ZV9hbmRfZGlzYWJsZV9pcnFzLCBvbGRjcHNyLCB0ZW1wCisJbXJzCVxvbGRjcHNyLCBjcHNyCisJbW92CVx0ZW1wLCAjUFNSX0lfQklUIHwgTU9ERV9TVkMKKwltc3IJY3Bzcl9jLCBcdGVtcAorCS5lbmRtCisKKy8qCisgKiBSZXN0b3JlIGludGVycnVwdCBzdGF0ZSBwcmV2aW91c2x5IHN0b3JlZCBpbiBhIHJlZ2lzdGVyLiAgV2UgZG9uJ3QKKyAqIGd1YXJhbnRlZSB0aGF0IHRoaXMgd2lsbCBwcmVzZXJ2ZSB0aGUgZmxhZ3MuCisgKi8KKwkubWFjcm8JcmVzdG9yZV9pcnFzLCBvbGRjcHNyCisJbXNyCWNwc3JfYywgXG9sZGNwc3IKKwkuZW5kbQorCisvKgorICogVGhlc2UgdHdvIGFyZSB1c2VkIHRvIHNhdmUgTFIvcmVzdG9yZSBQQyBvdmVyIGEgdXNlci1iYXNlZCBhY2Nlc3MuCisgKiBUaGUgb2xkIDI2LWJpdCBhcmNoaXRlY3R1cmUgcmVxdWlyZXMgdGhhdCB3ZSBkby4gIE9uIDMyLWJpdAorICogYXJjaGl0ZWN0dXJlLCB3ZSBjYW4gc2FmZWx5IGlnbm9yZSB0aGlzIHJlcXVpcmVtZW50LgorICovCisJLm1hY3JvCXNhdmVfbHIKKwkuZW5kbQorCisJLm1hY3JvCXJlc3RvcmVfcGMKKwltb3YJcGMsIGxyCisJLmVuZG0KKworI2RlZmluZSBVU0VSKHguLi4pCQkJCVwKKzk5OTk6CXg7CQkJCQlcCisJLnNlY3Rpb24gX19leF90YWJsZSwiYSI7CQlcCisJLmFsaWduCTM7CQkJCVwKKwkubG9uZwk5OTk5Yiw5MDAxZjsJCQlcCisJLnByZXZpb3VzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXRvbWljLmggYi9pbmNsdWRlL2FzbS1hcm0vYXRvbWljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg4NTk3MgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hdG9taWMuaApAQCAtMCwwICsxLDE2NSBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXRvbWljLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk2IFJ1c3NlbGwgS2luZy4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDIgRGVlcCBCbHVlIFNvbHV0aW9ucyBMdGQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2lmbmRlZiBfX0FTTV9BUk1fQVRPTUlDX0gKKyNkZWZpbmUgX19BU01fQVJNX0FUT01JQ19ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKwordHlwZWRlZiBzdHJ1Y3QgeyB2b2xhdGlsZSBpbnQgY291bnRlcjsgfSBhdG9taWNfdDsKKworI2RlZmluZSBBVE9NSUNfSU5JVChpKQl7IChpKSB9CisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNkZWZpbmUgYXRvbWljX3JlYWQodikJKCh2KS0+Y291bnRlcikKKworI2lmIF9fTElOVVhfQVJNX0FSQ0hfXyA+PSA2CisKKy8qCisgKiBBUk12NiBVUCBhbmQgU01QIHNhZmUgYXRvbWljIG9wcy4gIFdlIHVzZSBsb2FkIGV4Y2x1c2l2ZSBhbmQKKyAqIHN0b3JlIGV4Y2x1c2l2ZSB0byBlbnN1cmUgdGhhdCB0aGVzZSBhcmUgYXRvbWljLiAgV2UgbWF5IGxvb3AKKyAqIHRvIGVuc3VyZSB0aGF0IHRoZSB1cGRhdGUgaGFwcGVucy4gIFdyaXRpbmcgdG8gJ3YtPmNvdW50ZXInCisgKiB3aXRob3V0IHVzaW5nIHRoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucyBXSUxMIGJyZWFrIHRoZSBhdG9taWMKKyAqIG5hdHVyZSBvZiB0aGVzZSBvcHMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfc2V0KGF0b21pY190ICp2LCBpbnQgaSkKK3sKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKCJAIGF0b21pY19zZXRcbiIKKyIxOglsZHJleAklMCwgWyUxXVxuIgorIglzdHJleAklMCwgJTIsIFslMV1cbiIKKyIJdGVxCSUwLCAjMFxuIgorIglibmUJMWIiCisJOiAiPSZyIiAodG1wKQorCTogInIiICgmdi0+Y291bnRlciksICJyIiAoaSkKKwk6ICJjYyIpOworfQorCitzdGF0aWMgaW5saW5lIGludCBhdG9taWNfYWRkX3JldHVybihpbnQgaSwgYXRvbWljX3QgKnYpCit7CisJdW5zaWduZWQgbG9uZyB0bXA7CisJaW50IHJlc3VsdDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKCJAIGF0b21pY19hZGRfcmV0dXJuXG4iCisiMToJbGRyZXgJJTAsIFslMl1cbiIKKyIJYWRkCSUwLCAlMCwgJTNcbiIKKyIJc3RyZXgJJTEsICUwLCBbJTJdXG4iCisiCXRlcQklMSwgIzBcbiIKKyIJYm5lCTFiIgorCTogIj0mciIgKHJlc3VsdCksICI9JnIiICh0bXApCisJOiAiciIgKCZ2LT5jb3VudGVyKSwgIklyIiAoaSkKKwk6ICJjYyIpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGlubGluZSBpbnQgYXRvbWljX3N1Yl9yZXR1cm4oaW50IGksIGF0b21pY190ICp2KQoreworCXVuc2lnbmVkIGxvbmcgdG1wOworCWludCByZXN1bHQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygiQCBhdG9taWNfc3ViX3JldHVyblxuIgorIjE6CWxkcmV4CSUwLCBbJTJdXG4iCisiCXN1YgklMCwgJTAsICUzXG4iCisiCXN0cmV4CSUxLCAlMCwgWyUyXVxuIgorIgl0ZXEJJTEsICMwXG4iCisiCWJuZQkxYiIKKwk6ICI9JnIiIChyZXN1bHQpLCAiPSZyIiAodG1wKQorCTogInIiICgmdi0+Y291bnRlciksICJJciIgKGkpCisJOiAiY2MiKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfY2xlYXJfbWFzayh1bnNpZ25lZCBsb25nIG1hc2ssIHVuc2lnbmVkIGxvbmcgKmFkZHIpCit7CisJdW5zaWduZWQgbG9uZyB0bXAsIHRtcDI7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygiQCBhdG9taWNfY2xlYXJfbWFza1xuIgorIjE6CWxkcmV4CSUwLCAlMlxuIgorIgliaWMJJTAsICUwLCAlM1xuIgorIglzdHJleAklMSwgJTAsICUyXG4iCisiCXRlcQklMSwgIzBcbiIKKyIJYm5lCTFiIgorCTogIj0mciIgKHRtcCksICI9JnIiICh0bXAyKQorCTogInIiIChhZGRyKSwgIklyIiAobWFzaykKKwk6ICJjYyIpOworfQorCisjZWxzZSAvKiBBUk1fQVJDSF82ICovCisKKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisKKyNpZmRlZiBDT05GSUdfU01QCisjZXJyb3IgU01QIG5vdCBzdXBwb3J0ZWQgb24gcHJlLUFSTXY2IENQVXMKKyNlbmRpZgorCisjZGVmaW5lIGF0b21pY19zZXQodixpKQkoKCh2KS0+Y291bnRlcikgPSAoaSkpCisKK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pY19hZGRfcmV0dXJuKGludCBpLCBhdG9taWNfdCAqdikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCB2YWw7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJdmFsID0gdi0+Y291bnRlcjsKKwl2LT5jb3VudGVyID0gdmFsICs9IGk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIGlubGluZSBpbnQgYXRvbWljX3N1Yl9yZXR1cm4oaW50IGksIGF0b21pY190ICp2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHZhbDsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwl2YWwgPSB2LT5jb3VudGVyOworCXYtPmNvdW50ZXIgPSB2YWwgLT0gaTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlyZXR1cm4gdmFsOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX2NsZWFyX21hc2sodW5zaWduZWQgbG9uZyBtYXNrLCB1bnNpZ25lZCBsb25nICphZGRyKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJKmFkZHIgJj0gfm1hc2s7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCisjZW5kaWYgLyogX19MSU5VWF9BUk1fQVJDSF9fICovCisKKyNkZWZpbmUgYXRvbWljX2FkZChpLCB2KQkodm9pZCkgYXRvbWljX2FkZF9yZXR1cm4oaSwgdikKKyNkZWZpbmUgYXRvbWljX2luYyh2KQkJKHZvaWQpIGF0b21pY19hZGRfcmV0dXJuKDEsIHYpCisjZGVmaW5lIGF0b21pY19zdWIoaSwgdikJKHZvaWQpIGF0b21pY19zdWJfcmV0dXJuKGksIHYpCisjZGVmaW5lIGF0b21pY19kZWModikJCSh2b2lkKSBhdG9taWNfc3ViX3JldHVybigxLCB2KQorCisjZGVmaW5lIGF0b21pY19pbmNfYW5kX3Rlc3QodikJKGF0b21pY19hZGRfcmV0dXJuKDEsIHYpID09IDApCisjZGVmaW5lIGF0b21pY19kZWNfYW5kX3Rlc3QodikJKGF0b21pY19zdWJfcmV0dXJuKDEsIHYpID09IDApCisjZGVmaW5lIGF0b21pY19pbmNfcmV0dXJuKHYpICAgIChhdG9taWNfYWRkX3JldHVybigxLCB2KSkKKyNkZWZpbmUgYXRvbWljX2RlY19yZXR1cm4odikgICAgKGF0b21pY19zdWJfcmV0dXJuKDEsIHYpKQorI2RlZmluZSBhdG9taWNfc3ViX2FuZF90ZXN0KGksIHYpIChhdG9taWNfc3ViX3JldHVybihpLCB2KSA9PSAwKQorCisjZGVmaW5lIGF0b21pY19hZGRfbmVnYXRpdmUoaSx2KSAoYXRvbWljX2FkZF9yZXR1cm4oaSwgdikgPCAwKQorCisvKiBBdG9taWMgb3BlcmF0aW9ucyBhcmUgYWxyZWFkeSBzZXJpYWxpemluZyBvbiBBUk0gKi8KKyNkZWZpbmUgc21wX21iX19iZWZvcmVfYXRvbWljX2RlYygpCWJhcnJpZXIoKQorI2RlZmluZSBzbXBfbWJfX2FmdGVyX2F0b21pY19kZWMoKQliYXJyaWVyKCkKKyNkZWZpbmUgc21wX21iX19iZWZvcmVfYXRvbWljX2luYygpCWJhcnJpZXIoKQorI2RlZmluZSBzbXBfbWJfX2FmdGVyX2F0b21pY19pbmMoKQliYXJyaWVyKCkKKworI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9iaXRvcHMuaCBiL2luY2x1ZGUvYXNtLWFybS9iaXRvcHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWRkNGRjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2JpdG9wcy5oCkBAIC0wLDAgKzEsNDE2IEBACisvKgorICogQ29weXJpZ2h0IDE5OTUsIFJ1c3NlbGwgS2luZy4KKyAqIFZhcmlvdXMgYml0cyBhbmQgcGllY2VzIGNvcHlyaWdodHMgaW5jbHVkZToKKyAqICBMaW51cyBUb3J2YWxkcyAodGVzdF9iaXQpLgorICogQmlnIGVuZGlhbiBzdXBwb3J0OiBDb3B5cmlnaHQgMjAwMSwgTmljb2xhcyBQaXRyZQorICogIHJld29ya2VkIGJ5IHJtay4KKyAqCisgKiBiaXQgMCBpcyB0aGUgTFNCIG9mIGFuICJ1bnNpZ25lZCBsb25nIiBxdWFudGl0eS4KKyAqCisgKiBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBjb2RlIGluIHRoaXMgZmlsZSBzaG91bGQgbmV2ZXIgYmUgaW5jbHVkZWQKKyAqIGZyb20gdXNlciBzcGFjZS4gIE1hbnkgb2YgdGhlc2UgYXJlIG5vdCBpbXBsZW1lbnRlZCBpbiBhc3NlbWJsZXIKKyAqIHNpbmNlIHRoZXkgd291bGQgYmUgdG9vIGNvc3RseS4gIEFsc28sIHRoZXkgcmVxdWlyZSBwcml2aWxlZ2VkCisgKiBpbnN0cnVjdGlvbnMgKHdoaWNoIGFyZSBub3QgYXZhaWxhYmxlIGZyb20gdXNlciBtb2RlKSB0byBlbnN1cmUKKyAqIHRoYXQgdGhleSBhcmUgYXRvbWljLgorICovCisKKyNpZm5kZWYgX19BU01fQVJNX0JJVE9QU19ICisjZGVmaW5lIF9fQVNNX0FSTV9CSVRPUFNfSAorCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorCisjZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKQlkbyB7IH0gd2hpbGUgKDApCisKKy8qCisgKiBUaGVzZSBmdW5jdGlvbnMgYXJlIHRoZSBiYXNpcyBvZiBvdXIgYml0IG9wcy4KKyAqCisgKiBGaXJzdCwgdGhlIGF0b21pYyBiaXRvcHMuIFRoZXNlIHVzZSBuYXRpdmUgZW5kaWFuLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19fX2F0b21pY19zZXRfYml0KHVuc2lnbmVkIGludCBiaXQsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKnApCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIG1hc2sgPSAxVUwgPDwgKGJpdCAmIDMxKTsKKworCXAgKz0gYml0ID4+IDU7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJKnAgfD0gbWFzazsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX19fYXRvbWljX2NsZWFyX2JpdCh1bnNpZ25lZCBpbnQgYml0LCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICpwKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBtYXNrID0gMVVMIDw8IChiaXQgJiAzMSk7CisKKwlwICs9IGJpdCA+PiA1OworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCSpwICY9IH5tYXNrOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fX19hdG9taWNfY2hhbmdlX2JpdCh1bnNpZ25lZCBpbnQgYml0LCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICpwKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBtYXNrID0gMVVMIDw8IChiaXQgJiAzMSk7CisKKwlwICs9IGJpdCA+PiA1OworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCSpwIF49IG1hc2s7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIGludAorX19fX2F0b21pY190ZXN0X2FuZF9zZXRfYml0KHVuc2lnbmVkIGludCBiaXQsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKnApCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgcmVzOworCXVuc2lnbmVkIGxvbmcgbWFzayA9IDFVTCA8PCAoYml0ICYgMzEpOworCisJcCArPSBiaXQgPj4gNTsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlyZXMgPSAqcDsKKwkqcCA9IHJlcyB8IG1hc2s7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJcmV0dXJuIHJlcyAmIG1hc2s7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitfX19fYXRvbWljX3Rlc3RfYW5kX2NsZWFyX2JpdCh1bnNpZ25lZCBpbnQgYml0LCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICpwKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IHJlczsKKwl1bnNpZ25lZCBsb25nIG1hc2sgPSAxVUwgPDwgKGJpdCAmIDMxKTsKKworCXAgKz0gYml0ID4+IDU7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJcmVzID0gKnA7CisJKnAgPSByZXMgJiB+bWFzazsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlyZXR1cm4gcmVzICYgbWFzazsKK30KKworc3RhdGljIGlubGluZSBpbnQKK19fX19hdG9taWNfdGVzdF9hbmRfY2hhbmdlX2JpdCh1bnNpZ25lZCBpbnQgYml0LCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICpwKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IHJlczsKKwl1bnNpZ25lZCBsb25nIG1hc2sgPSAxVUwgPDwgKGJpdCAmIDMxKTsKKworCXAgKz0gYml0ID4+IDU7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJcmVzID0gKnA7CisJKnAgPSByZXMgXiBtYXNrOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCXJldHVybiByZXMgJiBtYXNrOworfQorCisvKgorICogTm93IHRoZSBub24tYXRvbWljIHZhcmlhbnRzLiAgV2UgbGV0IHRoZSBjb21waWxlciBoYW5kbGUgYWxsCisgKiBvcHRpbWlzYXRpb25zIGZvciB0aGVzZS4gIFRoZXNlIGFyZSBhbGwgX25hdGl2ZV8gZW5kaWFuLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19zZXRfYml0KGludCBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqcCkKK3sKKwlwW25yID4+IDVdIHw9ICgxVUwgPDwgKG5yICYgMzEpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fY2xlYXJfYml0KGludCBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqcCkKK3sKKwlwW25yID4+IDVdICY9IH4oMVVMIDw8IChuciAmIDMxKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2NoYW5nZV9iaXQoaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICpwKQoreworCXBbbnIgPj4gNV0gXj0gKDFVTCA8PCAobnIgJiAzMSkpOworfQorCitzdGF0aWMgaW5saW5lIGludCBfX3Rlc3RfYW5kX3NldF9iaXQoaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICpwKQoreworCXVuc2lnbmVkIGxvbmcgb2xkdmFsLCBtYXNrID0gMVVMIDw8IChuciAmIDMxKTsKKworCXAgKz0gbnIgPj4gNTsKKworCW9sZHZhbCA9ICpwOworCSpwID0gb2xkdmFsIHwgbWFzazsKKwlyZXR1cm4gb2xkdmFsICYgbWFzazsKK30KKworc3RhdGljIGlubGluZSBpbnQgX190ZXN0X2FuZF9jbGVhcl9iaXQoaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICpwKQoreworCXVuc2lnbmVkIGxvbmcgb2xkdmFsLCBtYXNrID0gMVVMIDw8IChuciAmIDMxKTsKKworCXAgKz0gbnIgPj4gNTsKKworCW9sZHZhbCA9ICpwOworCSpwID0gb2xkdmFsICYgfm1hc2s7CisJcmV0dXJuIG9sZHZhbCAmIG1hc2s7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fdGVzdF9hbmRfY2hhbmdlX2JpdChpbnQgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKnApCit7CisJdW5zaWduZWQgbG9uZyBvbGR2YWwsIG1hc2sgPSAxVUwgPDwgKG5yICYgMzEpOworCisJcCArPSBuciA+PiA1OworCisJb2xkdmFsID0gKnA7CisJKnAgPSBvbGR2YWwgXiBtYXNrOworCXJldHVybiBvbGR2YWwgJiBtYXNrOworfQorCisvKgorICogVGhpcyByb3V0aW5lIGRvZXNuJ3QgbmVlZCB0byBiZSBhdG9taWMuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IF9fdGVzdF9iaXQoaW50IG5yLCBjb25zdCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICogcCkKK3sKKwlyZXR1cm4gKHBbbnIgPj4gNV0gPj4gKG5yICYgMzEpKSAmIDFVTDsKK30KKworLyoKKyAqICBBIG5vdGUgYWJvdXQgRW5kaWFuLW5lc3MuCisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFdoZW4gdGhlIEFSTSBpcyBwdXQgaW50byBiaWcgZW5kaWFuIG1vZGUgdmlhIENSMTUsIHRoZSBwcm9jZXNzb3IKKyAqIG1lcmVseSBzd2FwcyB0aGUgb3JkZXIgb2YgYnl0ZXMgd2l0aGluIHdvcmRzLCB0aHVzOgorICoKKyAqICAgICAgICAgIC0tLS0tLS0tLS0tLSBwaHlzaWNhbCBkYXRhIGJ1cyBiaXRzIC0tLS0tLS0tLS0tCisgKiAgICAgICAgICBEMzEgLi4uIEQyNCAgRDIzIC4uLiBEMTYgIEQxNSAuLi4gRDggIEQ3IC4uLiBEMAorICogbGl0dGxlICAgICBieXRlIDMgICAgICAgYnl0ZSAyICAgICAgIGJ5dGUgMSAgICAgIGJ5dGUgMAorICogYmlnICAgICAgICBieXRlIDAgICAgICAgYnl0ZSAxICAgICAgIGJ5dGUgMiAgICAgIGJ5dGUgMworICoKKyAqIFRoaXMgbWVhbnMgdGhhdCByZWFkaW5nIGEgMzItYml0IHdvcmQgYXQgYWRkcmVzcyAwIHJldHVybnMgdGhlIHNhbWUKKyAqIHZhbHVlIGlycmVzcGVjdGl2ZSBvZiB0aGUgZW5kaWFuIG1vZGUgYml0LgorICoKKyAqIFBlcmlwaGVyYWwgZGV2aWNlcyBzaG91bGQgYmUgY29ubmVjdGVkIHdpdGggdGhlIGRhdGEgYnVzIHJldmVyc2VkIGluCisgKiAiQmlnIEVuZGlhbiIgbW9kZS4gIEFSTSBBcHBsaWNhdGlvbiBOb3RlIDYxIGlzIGFwcGxpY2FibGUsIGFuZCBpcworICogYXZhaWxhYmxlIGZyb20gaHR0cDovL3d3dy5hcm0uY29tLy4KKyAqCisgKiBUaGUgZm9sbG93aW5nIGFzc3VtZXMgdGhhdCB0aGUgZGF0YSBidXMgY29ubmVjdGl2aXR5IGZvciBiaWcgZW5kaWFuCisgKiBtb2RlIGhhcyBiZWVuIGZvbGxvd2VkLgorICoKKyAqIE5vdGUgdGhhdCBiaXQgMCBpcyBkZWZpbmVkIHRvIGJlIDMyLWJpdCB3b3JkIGJpdCAwLCBub3QgYnl0ZSAwIGJpdCAwLgorICovCisKKy8qCisgKiBMaXR0bGUgZW5kaWFuIGFzc2VtYmx5IGJpdG9wcy4gIG5yID0gMCAtPiBieXRlIDAgYml0IDAuCisgKi8KK2V4dGVybiB2b2lkIF9zZXRfYml0X2xlKGludCBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqIHApOworZXh0ZXJuIHZvaWQgX2NsZWFyX2JpdF9sZShpbnQgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKiBwKTsKK2V4dGVybiB2b2lkIF9jaGFuZ2VfYml0X2xlKGludCBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqIHApOworZXh0ZXJuIGludCBfdGVzdF9hbmRfc2V0X2JpdF9sZShpbnQgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKiBwKTsKK2V4dGVybiBpbnQgX3Rlc3RfYW5kX2NsZWFyX2JpdF9sZShpbnQgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKiBwKTsKK2V4dGVybiBpbnQgX3Rlc3RfYW5kX2NoYW5nZV9iaXRfbGUoaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICogcCk7CitleHRlcm4gaW50IF9maW5kX2ZpcnN0X3plcm9fYml0X2xlKGNvbnN0IHZvaWQgKiBwLCB1bnNpZ25lZCBzaXplKTsKK2V4dGVybiBpbnQgX2ZpbmRfbmV4dF96ZXJvX2JpdF9sZShjb25zdCB2b2lkICogcCwgaW50IHNpemUsIGludCBvZmZzZXQpOworZXh0ZXJuIGludCBfZmluZF9maXJzdF9iaXRfbGUoY29uc3QgdW5zaWduZWQgbG9uZyAqcCwgdW5zaWduZWQgc2l6ZSk7CitleHRlcm4gaW50IF9maW5kX25leHRfYml0X2xlKGNvbnN0IHVuc2lnbmVkIGxvbmcgKnAsIGludCBzaXplLCBpbnQgb2Zmc2V0KTsKKworLyoKKyAqIEJpZyBlbmRpYW4gYXNzZW1ibHkgYml0b3BzLiAgbnIgPSAwIC0+IGJ5dGUgMyBiaXQgMC4KKyAqLworZXh0ZXJuIHZvaWQgX3NldF9iaXRfYmUoaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICogcCk7CitleHRlcm4gdm9pZCBfY2xlYXJfYml0X2JlKGludCBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqIHApOworZXh0ZXJuIHZvaWQgX2NoYW5nZV9iaXRfYmUoaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICogcCk7CitleHRlcm4gaW50IF90ZXN0X2FuZF9zZXRfYml0X2JlKGludCBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqIHApOworZXh0ZXJuIGludCBfdGVzdF9hbmRfY2xlYXJfYml0X2JlKGludCBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqIHApOworZXh0ZXJuIGludCBfdGVzdF9hbmRfY2hhbmdlX2JpdF9iZShpbnQgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKiBwKTsKK2V4dGVybiBpbnQgX2ZpbmRfZmlyc3RfemVyb19iaXRfYmUoY29uc3Qgdm9pZCAqIHAsIHVuc2lnbmVkIHNpemUpOworZXh0ZXJuIGludCBfZmluZF9uZXh0X3plcm9fYml0X2JlKGNvbnN0IHZvaWQgKiBwLCBpbnQgc2l6ZSwgaW50IG9mZnNldCk7CitleHRlcm4gaW50IF9maW5kX2ZpcnN0X2JpdF9iZShjb25zdCB1bnNpZ25lZCBsb25nICpwLCB1bnNpZ25lZCBzaXplKTsKK2V4dGVybiBpbnQgX2ZpbmRfbmV4dF9iaXRfYmUoY29uc3QgdW5zaWduZWQgbG9uZyAqcCwgaW50IHNpemUsIGludCBvZmZzZXQpOworCisvKgorICogVGhlIF9fKiBmb3JtIG9mIGJpdG9wcyBhcmUgbm9uLWF0b21pYyBhbmQgbWF5IGJlIHJlb3JkZXJlZC4KKyAqLworI2RlZmluZQlBVE9NSUNfQklUT1BfTEUobmFtZSxucixwKQkJXAorCShfX2J1aWx0aW5fY29uc3RhbnRfcChucikgPwkJXAorCSBfX19fYXRvbWljXyMjbmFtZShuciwgcCkgOgkJXAorCSBfIyNuYW1lIyNfbGUobnIscCkpCisKKyNkZWZpbmUJQVRPTUlDX0JJVE9QX0JFKG5hbWUsbnIscCkJCVwKKwkoX19idWlsdGluX2NvbnN0YW50X3AobnIpID8JCVwKKwkgX19fX2F0b21pY18jI25hbWUobnIsIHApIDoJCVwKKwkgXyMjbmFtZSMjX2JlKG5yLHApKQorCisjZGVmaW5lIE5PTkFUT01JQ19CSVRPUChuYW1lLG5yLHApCQlcCisJKF9fX19ub25hdG9taWNfIyNuYW1lKG5yLCBwKSkKKworI2lmbmRlZiBfX0FSTUVCX18KKy8qCisgKiBUaGVzZSBhcmUgdGhlIGxpdHRsZSBlbmRpYW4sIGF0b21pYyBkZWZpbml0aW9ucy4KKyAqLworI2RlZmluZSBzZXRfYml0KG5yLHApCQkJQVRPTUlDX0JJVE9QX0xFKHNldF9iaXQsbnIscCkKKyNkZWZpbmUgY2xlYXJfYml0KG5yLHApCQkJQVRPTUlDX0JJVE9QX0xFKGNsZWFyX2JpdCxucixwKQorI2RlZmluZSBjaGFuZ2VfYml0KG5yLHApCQlBVE9NSUNfQklUT1BfTEUoY2hhbmdlX2JpdCxucixwKQorI2RlZmluZSB0ZXN0X2FuZF9zZXRfYml0KG5yLHApCQlBVE9NSUNfQklUT1BfTEUodGVzdF9hbmRfc2V0X2JpdCxucixwKQorI2RlZmluZSB0ZXN0X2FuZF9jbGVhcl9iaXQobnIscCkJQVRPTUlDX0JJVE9QX0xFKHRlc3RfYW5kX2NsZWFyX2JpdCxucixwKQorI2RlZmluZSB0ZXN0X2FuZF9jaGFuZ2VfYml0KG5yLHApCUFUT01JQ19CSVRPUF9MRSh0ZXN0X2FuZF9jaGFuZ2VfYml0LG5yLHApCisjZGVmaW5lIHRlc3RfYml0KG5yLHApCQkJX190ZXN0X2JpdChucixwKQorI2RlZmluZSBmaW5kX2ZpcnN0X3plcm9fYml0KHAsc3opCV9maW5kX2ZpcnN0X3plcm9fYml0X2xlKHAsc3opCisjZGVmaW5lIGZpbmRfbmV4dF96ZXJvX2JpdChwLHN6LG9mZikJX2ZpbmRfbmV4dF96ZXJvX2JpdF9sZShwLHN6LG9mZikKKyNkZWZpbmUgZmluZF9maXJzdF9iaXQocCxzeikJCV9maW5kX2ZpcnN0X2JpdF9sZShwLHN6KQorI2RlZmluZSBmaW5kX25leHRfYml0KHAsc3osb2ZmKQkJX2ZpbmRfbmV4dF9iaXRfbGUocCxzeixvZmYpCisKKyNkZWZpbmUgV09SRF9CSVRPRkZfVE9fTEUoeCkJCSgoeCkpCisKKyNlbHNlCisKKy8qCisgKiBUaGVzZSBhcmUgdGhlIGJpZyBlbmRpYW4sIGF0b21pYyBkZWZpbml0aW9ucy4KKyAqLworI2RlZmluZSBzZXRfYml0KG5yLHApCQkJQVRPTUlDX0JJVE9QX0JFKHNldF9iaXQsbnIscCkKKyNkZWZpbmUgY2xlYXJfYml0KG5yLHApCQkJQVRPTUlDX0JJVE9QX0JFKGNsZWFyX2JpdCxucixwKQorI2RlZmluZSBjaGFuZ2VfYml0KG5yLHApCQlBVE9NSUNfQklUT1BfQkUoY2hhbmdlX2JpdCxucixwKQorI2RlZmluZSB0ZXN0X2FuZF9zZXRfYml0KG5yLHApCQlBVE9NSUNfQklUT1BfQkUodGVzdF9hbmRfc2V0X2JpdCxucixwKQorI2RlZmluZSB0ZXN0X2FuZF9jbGVhcl9iaXQobnIscCkJQVRPTUlDX0JJVE9QX0JFKHRlc3RfYW5kX2NsZWFyX2JpdCxucixwKQorI2RlZmluZSB0ZXN0X2FuZF9jaGFuZ2VfYml0KG5yLHApCUFUT01JQ19CSVRPUF9CRSh0ZXN0X2FuZF9jaGFuZ2VfYml0LG5yLHApCisjZGVmaW5lIHRlc3RfYml0KG5yLHApCQkJX190ZXN0X2JpdChucixwKQorI2RlZmluZSBmaW5kX2ZpcnN0X3plcm9fYml0KHAsc3opCV9maW5kX2ZpcnN0X3plcm9fYml0X2JlKHAsc3opCisjZGVmaW5lIGZpbmRfbmV4dF96ZXJvX2JpdChwLHN6LG9mZikJX2ZpbmRfbmV4dF96ZXJvX2JpdF9iZShwLHN6LG9mZikKKyNkZWZpbmUgZmluZF9maXJzdF9iaXQocCxzeikJCV9maW5kX2ZpcnN0X2JpdF9iZShwLHN6KQorI2RlZmluZSBmaW5kX25leHRfYml0KHAsc3osb2ZmKQkJX2ZpbmRfbmV4dF9iaXRfYmUocCxzeixvZmYpCisKKyNkZWZpbmUgV09SRF9CSVRPRkZfVE9fTEUoeCkJCSgoeCkgXiAweDE4KQorCisjZW5kaWYKKworI2lmIF9fTElOVVhfQVJNX0FSQ0hfXyA8IDUKKworLyoKKyAqIGZmeiA9IEZpbmQgRmlyc3QgWmVybyBpbiB3b3JkLiBVbmRlZmluZWQgaWYgbm8gemVybyBleGlzdHMsCisgKiBzbyBjb2RlIHNob3VsZCBjaGVjayBhZ2FpbnN0IH4wVUwgZmlyc3QuLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZmZ6KHVuc2lnbmVkIGxvbmcgd29yZCkKK3sKKwlpbnQgazsKKworCXdvcmQgPSB+d29yZDsKKwlrID0gMzE7CisJaWYgKHdvcmQgJiAweDAwMDBmZmZmKSB7IGsgLT0gMTY7IHdvcmQgPDw9IDE2OyB9CisJaWYgKHdvcmQgJiAweDAwZmYwMDAwKSB7IGsgLT0gODsgIHdvcmQgPDw9IDg7ICB9CisJaWYgKHdvcmQgJiAweDBmMDAwMDAwKSB7IGsgLT0gNDsgIHdvcmQgPDw9IDQ7ICB9CisJaWYgKHdvcmQgJiAweDMwMDAwMDAwKSB7IGsgLT0gMjsgIHdvcmQgPDw9IDI7ICB9CisJaWYgKHdvcmQgJiAweDQwMDAwMDAwKSB7IGsgLT0gMTsgfQorICAgICAgICByZXR1cm4gazsKK30KKworLyoKKyAqIGZmeiA9IEZpbmQgRmlyc3QgWmVybyBpbiB3b3JkLiBVbmRlZmluZWQgaWYgbm8gemVybyBleGlzdHMsCisgKiBzbyBjb2RlIHNob3VsZCBjaGVjayBhZ2FpbnN0IH4wVUwgZmlyc3QuLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19mZnModW5zaWduZWQgbG9uZyB3b3JkKQoreworCWludCBrOworCisJayA9IDMxOworCWlmICh3b3JkICYgMHgwMDAwZmZmZikgeyBrIC09IDE2OyB3b3JkIDw8PSAxNjsgfQorCWlmICh3b3JkICYgMHgwMGZmMDAwMCkgeyBrIC09IDg7ICB3b3JkIDw8PSA4OyAgfQorCWlmICh3b3JkICYgMHgwZjAwMDAwMCkgeyBrIC09IDQ7ICB3b3JkIDw8PSA0OyAgfQorCWlmICh3b3JkICYgMHgzMDAwMDAwMCkgeyBrIC09IDI7ICB3b3JkIDw8PSAyOyAgfQorCWlmICh3b3JkICYgMHg0MDAwMDAwMCkgeyBrIC09IDE7IH0KKyAgICAgICAgcmV0dXJuIGs7Cit9CisKKy8qCisgKiBmbHM6IGZpbmQgbGFzdCBiaXQgc2V0LgorICovCisKKyNkZWZpbmUgZmxzKHgpIGdlbmVyaWNfZmxzKHgpCisKKy8qCisgKiBmZnM6IGZpbmQgZmlyc3QgYml0IHNldC4gVGhpcyBpcyBkZWZpbmVkIHRoZSBzYW1lIHdheSBhcworICogdGhlIGxpYmMgYW5kIGNvbXBpbGVyIGJ1aWx0aW4gZmZzIHJvdXRpbmVzLCB0aGVyZWZvcmUKKyAqIGRpZmZlcnMgaW4gc3Bpcml0IGZyb20gdGhlIGFib3ZlIGZmeiAobWFuIGZmcykuCisgKi8KKworI2RlZmluZSBmZnMoeCkgZ2VuZXJpY19mZnMoeCkKKworI2Vsc2UKKworLyoKKyAqIE9uIEFSTXY1IGFuZCBhYm92ZSB0aG9zZSBmdW5jdGlvbnMgY2FuIGJlIGltcGxlbWVudGVkIGFyb3VuZAorICogdGhlIGNseiBpbnN0cnVjdGlvbiBmb3IgbXVjaCBiZXR0ZXIgY29kZSBlZmZpY2llbmN5LgorICovCisKK3N0YXRpYyBfX2lubGluZV9fIGludCBnZW5lcmljX2ZscyhpbnQgeCk7CisjZGVmaW5lIGZscyh4KSBcCisJKCBfX2J1aWx0aW5fY29uc3RhbnRfcCh4KSA/IGdlbmVyaWNfZmxzKHgpIDogXAorCSAgKHsgaW50IF9fcjsgYXNtKCJjbHpcdCUwLCAlMSIgOiAiPXIiKF9fcikgOiAiciIoeCkgOiAiY2MiKTsgMzItX19yOyB9KSApCisjZGVmaW5lIGZmcyh4KSAoeyB1bnNpZ25lZCBsb25nIF9fdCA9ICh4KTsgZmxzKF9fdCAmIC1fX3QpOyB9KQorI2RlZmluZSBfX2Zmcyh4KSAoZmZzKHgpIC0gMSkKKyNkZWZpbmUgZmZ6KHgpIF9fZmZzKCB+KHgpICkKKworI2VuZGlmCisKKy8qCisgKiBGaW5kIGZpcnN0IGJpdCBzZXQgaW4gYSAxNjgtYml0IGJpdG1hcCwgd2hlcmUgdGhlIGZpcnN0CisgKiAxMjggYml0cyBhcmUgdW5saWtlbHkgdG8gYmUgc2V0LgorICovCitzdGF0aWMgaW5saW5lIGludCBzY2hlZF9maW5kX2ZpcnN0X2JpdChjb25zdCB1bnNpZ25lZCBsb25nICpiKQoreworCXVuc2lnbmVkIGxvbmcgdjsKKwl1bnNpZ25lZCBpbnQgb2ZmOworCisJZm9yIChvZmYgPSAwOyB2ID0gYltvZmZdLCBvZmYgPCA0OyBvZmYrKykgeworCQlpZiAodW5saWtlbHkodikpCisJCQlicmVhazsKKwl9CisJcmV0dXJuIF9fZmZzKHYpICsgb2ZmICogMzI7Cit9CisKKy8qCisgKiBod2VpZ2h0TjogcmV0dXJucyB0aGUgaGFtbWluZyB3ZWlnaHQgKGkuZS4gdGhlIG51bWJlcgorICogb2YgYml0cyBzZXQpIG9mIGEgTi1iaXQgd29yZAorICovCisKKyNkZWZpbmUgaHdlaWdodDMyKHgpIGdlbmVyaWNfaHdlaWdodDMyKHgpCisjZGVmaW5lIGh3ZWlnaHQxNih4KSBnZW5lcmljX2h3ZWlnaHQxNih4KQorI2RlZmluZSBod2VpZ2h0OCh4KSBnZW5lcmljX2h3ZWlnaHQ4KHgpCisKKy8qCisgKiBFeHQyIGlzIGRlZmluZWQgdG8gdXNlIGxpdHRsZS1lbmRpYW4gYnl0ZSBvcmRlcmluZy4KKyAqIFRoZXNlIGRvIG5vdCBuZWVkIHRvIGJlIGF0b21pYy4KKyAqLworI2RlZmluZSBleHQyX3NldF9iaXQobnIscCkJCQlcCisJCV9fdGVzdF9hbmRfc2V0X2JpdChXT1JEX0JJVE9GRl9UT19MRShuciksICh1bnNpZ25lZCBsb25nICopKHApKQorI2RlZmluZSBleHQyX3NldF9iaXRfYXRvbWljKGxvY2ssbnIscCkgICAgICAgICAgXAorICAgICAgICAgICAgICAgIHRlc3RfYW5kX3NldF9iaXQoV09SRF9CSVRPRkZfVE9fTEUobnIpLCAodW5zaWduZWQgbG9uZyAqKShwKSkKKyNkZWZpbmUgZXh0Ml9jbGVhcl9iaXQobnIscCkJCQlcCisJCV9fdGVzdF9hbmRfY2xlYXJfYml0KFdPUkRfQklUT0ZGX1RPX0xFKG5yKSwgKHVuc2lnbmVkIGxvbmcgKikocCkpCisjZGVmaW5lIGV4dDJfY2xlYXJfYml0X2F0b21pYyhsb2NrLG5yLHApICAgICAgICBcCisgICAgICAgICAgICAgICAgdGVzdF9hbmRfY2xlYXJfYml0KFdPUkRfQklUT0ZGX1RPX0xFKG5yKSwgKHVuc2lnbmVkIGxvbmcgKikocCkpCisjZGVmaW5lIGV4dDJfdGVzdF9iaXQobnIscCkJCQlcCisJCV9fdGVzdF9iaXQoV09SRF9CSVRPRkZfVE9fTEUobnIpLCAodW5zaWduZWQgbG9uZyAqKShwKSkKKyNkZWZpbmUgZXh0Ml9maW5kX2ZpcnN0X3plcm9fYml0KHAsc3opCQlcCisJCV9maW5kX2ZpcnN0X3plcm9fYml0X2xlKHAsc3opCisjZGVmaW5lIGV4dDJfZmluZF9uZXh0X3plcm9fYml0KHAsc3osb2ZmKQlcCisJCV9maW5kX25leHRfemVyb19iaXRfbGUocCxzeixvZmYpCisKKy8qCisgKiBNaW5peCBpcyBkZWZpbmVkIHRvIHVzZSBsaXR0bGUtZW5kaWFuIGJ5dGUgb3JkZXJpbmcuCisgKiBUaGVzZSBkbyBub3QgbmVlZCB0byBiZSBhdG9taWMuCisgKi8KKyNkZWZpbmUgbWluaXhfc2V0X2JpdChucixwKQkJCVwKKwkJX19zZXRfYml0KFdPUkRfQklUT0ZGX1RPX0xFKG5yKSwgKHVuc2lnbmVkIGxvbmcgKikocCkpCisjZGVmaW5lIG1pbml4X3Rlc3RfYml0KG5yLHApCQkJXAorCQlfX3Rlc3RfYml0KFdPUkRfQklUT0ZGX1RPX0xFKG5yKSwgKHVuc2lnbmVkIGxvbmcgKikocCkpCisjZGVmaW5lIG1pbml4X3Rlc3RfYW5kX3NldF9iaXQobnIscCkJCVwKKwkJX190ZXN0X2FuZF9zZXRfYml0KFdPUkRfQklUT0ZGX1RPX0xFKG5yKSwgKHVuc2lnbmVkIGxvbmcgKikocCkpCisjZGVmaW5lIG1pbml4X3Rlc3RfYW5kX2NsZWFyX2JpdChucixwKQkJXAorCQlfX3Rlc3RfYW5kX2NsZWFyX2JpdChXT1JEX0JJVE9GRl9UT19MRShuciksICh1bnNpZ25lZCBsb25nICopKHApKQorI2RlZmluZSBtaW5peF9maW5kX2ZpcnN0X3plcm9fYml0KHAsc3opCQlcCisJCV9maW5kX2ZpcnN0X3plcm9fYml0X2xlKHAsc3opCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfQVJNX0JJVE9QU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYnVnLmggYi9pbmNsdWRlL2FzbS1hcm0vYnVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU5MWI5MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9idWcuaApAQCAtMCwwICsxLDIyIEBACisjaWZuZGVmIF9BU01BUk1fQlVHX0gKKyNkZWZpbmUgX0FTTUFSTV9CVUdfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpZmRlZiBDT05GSUdfREVCVUdfQlVHVkVSQk9TRQorZXh0ZXJuIHZvbGF0aWxlIHZvaWQgX19idWcoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIHZvaWQgKmRhdGEpOworCisvKiBnaXZlIGZpbGUvbGluZSBpbmZvcm1hdGlvbiAqLworI2RlZmluZSBCVUcoKQkJX19idWcoX19GSUxFX18sIF9fTElORV9fLCBOVUxMKQorCisjZWxzZQorCisvKiB0aGlzIGp1c3QgY2F1c2VzIGFuIG9vcHMgKi8KKyNkZWZpbmUgQlVHKCkJCSgqKGludCAqKTAgPSAwKQorCisjZW5kaWYKKworI2RlZmluZSBIQVZFX0FSQ0hfQlVHCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYnVnLmg+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2J1Z3MuaCBiL2luY2x1ZGUvYXNtLWFybS9idWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM4MGVjNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9idWdzLmgKQEAgLTAsMCArMSwxNyBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYnVncy5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NS0yMDAzIFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpZm5kZWYgX19BU01fQlVHU19ICisjZGVmaW5lIF9fQVNNX0JVR1NfSAorCitleHRlcm4gdm9pZCBjaGVja193cml0ZWJ1ZmZlcl9idWdzKHZvaWQpOworCisjZGVmaW5lIGNoZWNrX2J1Z3MoKSBjaGVja193cml0ZWJ1ZmZlcl9idWdzKCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYnl0ZW9yZGVyLmggYi9pbmNsdWRlL2FzbS1hcm0vYnl0ZW9yZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY0OGExOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9ieXRlb3JkZXIuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9ieXRlb3JkZXIuaAorICoKKyAqIEFSTSBFbmRpYW4tbmVzcy4gIEluIGxpdHRsZSBlbmRpYW4gbW9kZSwgdGhlIGRhdGEgYnVzIGlzIGNvbm5lY3RlZCBzdWNoCisgKiB0aGF0IGJ5dGUgYWNjZXNzZXMgYXBwZWFyIGFzOgorICogIDAgPSBkMC4uLmQ3LCAxID0gZDguLi5kMTUsIDIgPSBkMTYuLi5kMjMsIDMgPSBkMjQuLi5kMzEKKyAqIGFuZCB3b3JkIGFjY2Vzc2VzIChkYXRhIG9yIGluc3RydWN0aW9uKSBhcHBlYXIgYXM6CisgKiAgZDAuLi5kMzEKKyAqCisgKiBXaGVuIGluIGJpZyBlbmRpYW4gbW9kZSwgYnl0ZSBhY2Nlc3NlcyBhcHBlYXIgYXM6CisgKiAgMCA9IGQyNC4uLmQzMSwgMSA9IGQxNi4uLmQyMywgMiA9IGQ4Li4uZDE1LCAzID0gZDAuLi5kNworICogYW5kIHdvcmQgYWNjZXNzZXMgKGRhdGEgb3IgaW5zdHJ1Y3Rpb24pIGFwcGVhciBhczoKKyAqICBkMC4uLmQzMQorICovCisjaWZuZGVmIF9fQVNNX0FSTV9CWVRFT1JERVJfSAorI2RlZmluZSBfX0FTTV9BUk1fQllURU9SREVSX0gKKworCisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisKKyNpZiAhZGVmaW5lZChfX1NUUklDVF9BTlNJX18pIHx8IGRlZmluZWQoX19LRVJORUxfXykKKyMgIGRlZmluZSBfX0JZVEVPUkRFUl9IQVNfVTY0X18KKyMgIGRlZmluZSBfX1NXQUJfNjRfVEhSVV8zMl9fCisjZW5kaWYKKworI2lmZGVmIF9fQVJNRUJfXworI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9iaWdfZW5kaWFuLmg+CisjZWxzZQorI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9saXR0bGVfZW5kaWFuLmg+CisjZW5kaWYKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9jYWNoZS5oIGIvaW5jbHVkZS9hc20tYXJtL2NhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQxNjFmNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9jYWNoZS5oCkBAIC0wLDAgKzEsMTUgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2NhY2hlLmgKKyAqLworI2lmbmRlZiBfX0FTTUFSTV9DQUNIRV9ICisjZGVmaW5lIF9fQVNNQVJNX0NBQ0hFX0gKKworI2RlZmluZSBMMV9DQUNIRV9TSElGVAkJNQorI2RlZmluZSBMMV9DQUNIRV9CWVRFUwkJKDEgPDwgTDFfQ0FDSEVfU0hJRlQpCisKKy8qCisgKiBsYXJnZXN0IEwxIHdoaWNoIHRoaXMgYXJjaCBzdXBwb3J0cworICovCisjZGVmaW5lIEwxX0NBQ0hFX1NISUZUX01BWAk1CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2NhY2hlZmx1c2guaCBiL2luY2x1ZGUvYXNtLWFybS9jYWNoZWZsdXNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDlmZmVlZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9jYWNoZWZsdXNoLmgKQEAgLTAsMCArMSwzODcgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2NhY2hlZmx1c2guaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMiBSdXNzZWxsIEtpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaWZuZGVmIF9BU01BUk1fQ0FDSEVGTFVTSF9ICisjZGVmaW5lIF9BU01BUk1fQ0FDSEVGTFVTSF9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisKKyNpbmNsdWRlIDxhc20vbW1hbi5oPgorI2luY2x1ZGUgPGFzbS9nbHVlLmg+CisKKy8qCisgKglDYWNoZSBNb2RlbAorICoJPT09PT09PT09PT0KKyAqLworI3VuZGVmIF9DQUNIRQorI3VuZGVmIE1VTFRJX0NBQ0hFCisKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfQVJNNjEwKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfQVJNNzEwKQorIyBpZmRlZiBfQ0FDSEUKKyMgIGRlZmluZSBNVUxUSV9DQUNIRSAxCisjIGVsc2UKKyMgIGRlZmluZSBfQ0FDSEUgdjMKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX0FSTTcyMFQpCisjIGlmZGVmIF9DQUNIRQorIyAgZGVmaW5lIE1VTFRJX0NBQ0hFIDEKKyMgZWxzZQorIyAgZGVmaW5lIF9DQUNIRSB2NAorIyBlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfQVJNOTIwVCkgfHwgZGVmaW5lZChDT05GSUdfQ1BVX0FSTTkyMlQpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19DUFVfQVJNOTI1VCkgfHwgZGVmaW5lZChDT05GSUdfQ1BVX0FSTTEwMjApCisjIGRlZmluZSBNVUxUSV9DQUNIRSAxCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9BUk05MjZUKQorIyBpZmRlZiBfQ0FDSEUKKyMgIGRlZmluZSBNVUxUSV9DQUNIRSAxCisjIGVsc2UKKyMgIGRlZmluZSBfQ0FDSEUgYXJtOTI2CisjIGVuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TQTExMCkgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NBMTEwMCkKKyMgaWZkZWYgX0NBQ0hFCisjICBkZWZpbmUgTVVMVElfQ0FDSEUgMQorIyBlbHNlCisjICBkZWZpbmUgX0NBQ0hFIHY0d2IKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1hTQ0FMRSkKKyMgaWZkZWYgX0NBQ0hFCisjICBkZWZpbmUgTVVMVElfQ0FDSEUgMQorIyBlbHNlCisjICBkZWZpbmUgX0NBQ0hFIHhzY2FsZQorIyBlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfVjYpCisvLyMgaWZkZWYgX0NBQ0hFCisjICBkZWZpbmUgTVVMVElfQ0FDSEUgMQorLy8jIGVsc2UKKy8vIyAgZGVmaW5lIF9DQUNIRSB2NgorLy8jIGVuZGlmCisjZW5kaWYKKworI2lmICFkZWZpbmVkKF9DQUNIRSkgJiYgIWRlZmluZWQoTVVMVElfQ0FDSEUpCisjZXJyb3IgVW5rbm93biBjYWNoZSBtYWludGFpbmVuY2UgbW9kZWwKKyNlbmRpZgorCisvKgorICogVGhpcyBmbGFnIGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgcGFnZSBwb2ludGVkIHRvIGJ5IGEgcHRlCisgKiBpcyBkaXJ0eSBhbmQgcmVxdWlyZXMgY2xlYW5pbmcgYmVmb3JlIHJldHVybmluZyBpdCB0byB0aGUgdXNlci4KKyAqLworI2RlZmluZSBQR19kY2FjaGVfZGlydHkgUEdfYXJjaF8xCisKKy8qCisgKglNTSBDYWNoZSBNYW5hZ2VtZW50CisgKgk9PT09PT09PT09PT09PT09PT09CisgKgorICoJVGhlIGFyY2gvYXJtL21tL2NhY2hlLSouUyBhbmQgYXJjaC9hcm0vbW0vcHJvYy0qLlMgZmlsZXMKKyAqCWltcGxlbWVudCB0aGVzZSBtZXRob2RzLgorICoKKyAqCVN0YXJ0IGFkZHJlc3NlcyBhcmUgaW5jbHVzaXZlIGFuZCBlbmQgYWRkcmVzc2VzIGFyZSBleGNsdXNpdmU7CisgKglzdGFydCBhZGRyZXNzZXMgc2hvdWxkIGJlIHJvdW5kZWQgZG93biwgZW5kIGFkZHJlc3NlcyB1cC4KKyAqCisgKglTZWUgRG9jdW1lbnRhdGlvbi9jYWNoZXRsYi50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgKglQbGVhc2Ugbm90ZSB0aGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGVzZSwgYW5kIHRoZSByZXF1aXJlZAorICoJZWZmZWN0cyBhcmUgY2FjaGUtdHlwZSAoVklWVC9WSVBUL1BJUFQpIHNwZWNpZmljLgorICoKKyAqCWZsdXNoX2NhY2hlX2tlcm5fYWxsKCkKKyAqCisgKgkJVW5jb25kaXRpb25hbGx5IGNsZWFuIGFuZCBpbnZhbGlkYXRlIHRoZSBlbnRpcmUgY2FjaGUuCisgKgorICoJZmx1c2hfY2FjaGVfdXNlcl9tbShtbSkKKyAqCisgKgkJQ2xlYW4gYW5kIGludmFsaWRhdGUgYWxsIHVzZXIgc3BhY2UgY2FjaGUgZW50cmllcworICoJCWJlZm9yZSBhIGNoYW5nZSBvZiBwYWdlIHRhYmxlcy4KKyAqCisgKglmbHVzaF9jYWNoZV91c2VyX3JhbmdlKHN0YXJ0LCBlbmQsIGZsYWdzKQorICoKKyAqCQlDbGVhbiBhbmQgaW52YWxpZGF0ZSBhIHJhbmdlIG9mIGNhY2hlIGVudHJpZXMgaW4gdGhlCisgKgkJc3BlY2lmaWVkIGFkZHJlc3Mgc3BhY2UgYmVmb3JlIGEgY2hhbmdlIG9mIHBhZ2UgdGFibGVzLgorICoJCS0gc3RhcnQgLSB1c2VyIHN0YXJ0IGFkZHJlc3MgKGluY2x1c2l2ZSwgcGFnZSBhbGlnbmVkKQorICoJCS0gZW5kICAgLSB1c2VyIGVuZCBhZGRyZXNzICAgKGV4Y2x1c2l2ZSwgcGFnZSBhbGlnbmVkKQorICoJCS0gZmxhZ3MgLSB2bWEtPnZtX2ZsYWdzIGZpZWxkCisgKgorICoJY29oZXJlbnRfa2Vybl9yYW5nZShzdGFydCwgZW5kKQorICoKKyAqCQlFbnN1cmUgY29oZXJlbmN5IGJldHdlZW4gdGhlIEljYWNoZSBhbmQgdGhlIERjYWNoZSBpbiB0aGUKKyAqCQlyZWdpb24gZGVzY3JpYmVkIGJ5IHN0YXJ0LCBlbmQuICBJZiB5b3UgaGF2ZSBub24tc25vb3BpbmcKKyAqCQlIYXJ2YXJkIGNhY2hlcywgeW91IG5lZWQgdG8gaW1wbGVtZW50IHRoaXMgZnVuY3Rpb24uCisgKgkJLSBzdGFydCAgLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCQktIGVuZCAgICAtIHZpcnR1YWwgZW5kIGFkZHJlc3MKKyAqCisgKglETUEgQ2FjaGUgQ29oZXJlbmN5CisgKgk9PT09PT09PT09PT09PT09PT09CisgKgorICoJZG1hX2ludl9yYW5nZShzdGFydCwgZW5kKQorICoKKyAqCQlJbnZhbGlkYXRlIChkaXNjYXJkKSB0aGUgc3BlY2lmaWVkIHZpcnR1YWwgYWRkcmVzcyByYW5nZS4KKyAqCQlNYXkgbm90IHdyaXRlIGJhY2sgYW55IGVudHJpZXMuICBJZiAnc3RhcnQnIG9yICdlbmQnCisgKgkJYXJlIG5vdCBjYWNoZSBsaW5lIGFsaWduZWQsIHRob3NlIGxpbmVzIG11c3QgYmUgd3JpdHRlbgorICoJCWJhY2suCisgKgkJLSBzdGFydCAgLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCQktIGVuZCAgICAtIHZpcnR1YWwgZW5kIGFkZHJlc3MKKyAqCisgKglkbWFfY2xlYW5fcmFuZ2Uoc3RhcnQsIGVuZCkKKyAqCisgKgkJQ2xlYW4gKHdyaXRlIGJhY2spIHRoZSBzcGVjaWZpZWQgdmlydHVhbCBhZGRyZXNzIHJhbmdlLgorICoJCS0gc3RhcnQgIC0gdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgkJLSBlbmQgICAgLSB2aXJ0dWFsIGVuZCBhZGRyZXNzCisgKgorICoJZG1hX2ZsdXNoX3JhbmdlKHN0YXJ0LCBlbmQpCisgKgorICoJCUNsZWFuIGFuZCBpbnZhbGlkYXRlIHRoZSBzcGVjaWZpZWQgdmlydHVhbCBhZGRyZXNzIHJhbmdlLgorICoJCS0gc3RhcnQgIC0gdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgkJLSBlbmQgICAgLSB2aXJ0dWFsIGVuZCBhZGRyZXNzCisgKi8KKworc3RydWN0IGNwdV9jYWNoZV9mbnMgeworCXZvaWQgKCpmbHVzaF9rZXJuX2FsbCkodm9pZCk7CisJdm9pZCAoKmZsdXNoX3VzZXJfYWxsKSh2b2lkKTsKKwl2b2lkICgqZmx1c2hfdXNlcl9yYW5nZSkodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgaW50KTsKKworCXZvaWQgKCpjb2hlcmVudF9rZXJuX3JhbmdlKSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKKwl2b2lkICgqY29oZXJlbnRfdXNlcl9yYW5nZSkodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CisJdm9pZCAoKmZsdXNoX2tlcm5fZGNhY2hlX3BhZ2UpKHZvaWQgKik7CisKKwl2b2lkICgqZG1hX2ludl9yYW5nZSkodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CisJdm9pZCAoKmRtYV9jbGVhbl9yYW5nZSkodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CisJdm9pZCAoKmRtYV9mbHVzaF9yYW5nZSkodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7Cit9OworCisvKgorICogU2VsZWN0IHRoZSBjYWxsaW5nIG1ldGhvZAorICovCisjaWZkZWYgTVVMVElfQ0FDSEUKKworZXh0ZXJuIHN0cnVjdCBjcHVfY2FjaGVfZm5zIGNwdV9jYWNoZTsKKworI2RlZmluZSBfX2NwdWNfZmx1c2hfa2Vybl9hbGwJCWNwdV9jYWNoZS5mbHVzaF9rZXJuX2FsbAorI2RlZmluZSBfX2NwdWNfZmx1c2hfdXNlcl9hbGwJCWNwdV9jYWNoZS5mbHVzaF91c2VyX2FsbAorI2RlZmluZSBfX2NwdWNfZmx1c2hfdXNlcl9yYW5nZQkJY3B1X2NhY2hlLmZsdXNoX3VzZXJfcmFuZ2UKKyNkZWZpbmUgX19jcHVjX2NvaGVyZW50X2tlcm5fcmFuZ2UJY3B1X2NhY2hlLmNvaGVyZW50X2tlcm5fcmFuZ2UKKyNkZWZpbmUgX19jcHVjX2NvaGVyZW50X3VzZXJfcmFuZ2UJY3B1X2NhY2hlLmNvaGVyZW50X3VzZXJfcmFuZ2UKKyNkZWZpbmUgX19jcHVjX2ZsdXNoX2RjYWNoZV9wYWdlCWNwdV9jYWNoZS5mbHVzaF9rZXJuX2RjYWNoZV9wYWdlCisKKy8qCisgKiBUaGVzZSBhcmUgcHJpdmF0ZSB0byB0aGUgZG1hLW1hcHBpbmcgQVBJLiAgRG8gbm90IHVzZSBkaXJlY3RseS4KKyAqIFRoZWlyIHNvbGUgcHVycG9zZSBpcyB0byBlbnN1cmUgdGhhdCBkYXRhIGhlbGQgaW4gdGhlIGNhY2hlCisgKiBpcyB2aXNpYmxlIHRvIERNQSwgb3IgZGF0YSB3cml0dGVuIGJ5IERNQSB0byBzeXN0ZW0gbWVtb3J5IGlzCisgKiB2aXNpYmxlIHRvIHRoZSBDUFUuCisgKi8KKyNkZWZpbmUgZG1hY19pbnZfcmFuZ2UJCQljcHVfY2FjaGUuZG1hX2ludl9yYW5nZQorI2RlZmluZSBkbWFjX2NsZWFuX3JhbmdlCQljcHVfY2FjaGUuZG1hX2NsZWFuX3JhbmdlCisjZGVmaW5lIGRtYWNfZmx1c2hfcmFuZ2UJCWNwdV9jYWNoZS5kbWFfZmx1c2hfcmFuZ2UKKworI2Vsc2UKKworI2RlZmluZSBfX2NwdWNfZmx1c2hfa2Vybl9hbGwJCV9fZ2x1ZShfQ0FDSEUsX2ZsdXNoX2tlcm5fY2FjaGVfYWxsKQorI2RlZmluZSBfX2NwdWNfZmx1c2hfdXNlcl9hbGwJCV9fZ2x1ZShfQ0FDSEUsX2ZsdXNoX3VzZXJfY2FjaGVfYWxsKQorI2RlZmluZSBfX2NwdWNfZmx1c2hfdXNlcl9yYW5nZQkJX19nbHVlKF9DQUNIRSxfZmx1c2hfdXNlcl9jYWNoZV9yYW5nZSkKKyNkZWZpbmUgX19jcHVjX2NvaGVyZW50X2tlcm5fcmFuZ2UJX19nbHVlKF9DQUNIRSxfY29oZXJlbnRfa2Vybl9yYW5nZSkKKyNkZWZpbmUgX19jcHVjX2NvaGVyZW50X3VzZXJfcmFuZ2UJX19nbHVlKF9DQUNIRSxfY29oZXJlbnRfdXNlcl9yYW5nZSkKKyNkZWZpbmUgX19jcHVjX2ZsdXNoX2RjYWNoZV9wYWdlCV9fZ2x1ZShfQ0FDSEUsX2ZsdXNoX2tlcm5fZGNhY2hlX3BhZ2UpCisKK2V4dGVybiB2b2lkIF9fY3B1Y19mbHVzaF9rZXJuX2FsbCh2b2lkKTsKK2V4dGVybiB2b2lkIF9fY3B1Y19mbHVzaF91c2VyX2FsbCh2b2lkKTsKK2V4dGVybiB2b2lkIF9fY3B1Y19mbHVzaF91c2VyX3JhbmdlKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGludCk7CitleHRlcm4gdm9pZCBfX2NwdWNfY29oZXJlbnRfa2Vybl9yYW5nZSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKK2V4dGVybiB2b2lkIF9fY3B1Y19jb2hlcmVudF91c2VyX3JhbmdlKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuIHZvaWQgX19jcHVjX2ZsdXNoX2RjYWNoZV9wYWdlKHZvaWQgKik7CisKKy8qCisgKiBUaGVzZSBhcmUgcHJpdmF0ZSB0byB0aGUgZG1hLW1hcHBpbmcgQVBJLiAgRG8gbm90IHVzZSBkaXJlY3RseS4KKyAqIFRoZWlyIHNvbGUgcHVycG9zZSBpcyB0byBlbnN1cmUgdGhhdCBkYXRhIGhlbGQgaW4gdGhlIGNhY2hlCisgKiBpcyB2aXNpYmxlIHRvIERNQSwgb3IgZGF0YSB3cml0dGVuIGJ5IERNQSB0byBzeXN0ZW0gbWVtb3J5IGlzCisgKiB2aXNpYmxlIHRvIHRoZSBDUFUuCisgKi8KKyNkZWZpbmUgZG1hY19pbnZfcmFuZ2UJCQlfX2dsdWUoX0NBQ0hFLF9kbWFfaW52X3JhbmdlKQorI2RlZmluZSBkbWFjX2NsZWFuX3JhbmdlCQlfX2dsdWUoX0NBQ0hFLF9kbWFfY2xlYW5fcmFuZ2UpCisjZGVmaW5lIGRtYWNfZmx1c2hfcmFuZ2UJCV9fZ2x1ZShfQ0FDSEUsX2RtYV9mbHVzaF9yYW5nZSkKKworZXh0ZXJuIHZvaWQgZG1hY19pbnZfcmFuZ2UodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CitleHRlcm4gdm9pZCBkbWFjX2NsZWFuX3JhbmdlKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuIHZvaWQgZG1hY19mbHVzaF9yYW5nZSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKKworI2VuZGlmCisKKy8qCisgKiBmbHVzaF9jYWNoZV92bWFwKCkgaXMgdXNlZCB3aGVuIGNyZWF0aW5nIG1hcHBpbmdzIChlZywgdmlhIHZtYXAsCisgKiB2bWFsbG9jLCBpb3JlbWFwIGV0YykgaW4ga2VybmVsIHNwYWNlIGZvciBwYWdlcy4gIFNpbmNlIHRoZQorICogZGlyZWN0LW1hcHBpbmdzIG9mIHRoZXNlIHBhZ2VzIG1heSBjb250YWluIGNhY2hlZCBkYXRhLCB3ZSBuZWVkCisgKiB0byBkbyBhIGZ1bGwgY2FjaGUgZmx1c2ggdG8gZW5zdXJlIHRoYXQgd3JpdGViYWNrcyBkb24ndCBjb3JydXB0CisgKiBkYXRhIHBsYWNlZCBpbnRvIHRoZXNlIHBhZ2VzIHZpYSB0aGUgbmV3IG1hcHBpbmdzLgorICovCisjZGVmaW5lIGZsdXNoX2NhY2hlX3ZtYXAoc3RhcnQsIGVuZCkJCWZsdXNoX2NhY2hlX2FsbCgpCisjZGVmaW5lIGZsdXNoX2NhY2hlX3Z1bm1hcChzdGFydCwgZW5kKQkJZmx1c2hfY2FjaGVfYWxsKCkKKworLyoKKyAqIENvcHkgdXNlciBkYXRhIGZyb20vdG8gYSBwYWdlIHdoaWNoIGlzIG1hcHBlZCBpbnRvIGEgZGlmZmVyZW50CisgKiBwcm9jZXNzZXMgYWRkcmVzcyBzcGFjZS4gIFJlYWxseSwgd2Ugd2FudCB0byBhbGxvdyBvdXIgInVzZXIKKyAqIHNwYWNlIiBtb2RlbCB0byBoYW5kbGUgdGhpcy4KKyAqLworI2RlZmluZSBjb3B5X3RvX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIHZhZGRyLCBkc3QsIHNyYywgbGVuKSBcCisJZG8gewkJCQkJCQlcCisJCWZsdXNoX2NhY2hlX3BhZ2Uodm1hLCB2YWRkciwgcGFnZV90b19wZm4ocGFnZSkpO1wKKwkJbWVtY3B5KGRzdCwgc3JjLCBsZW4pOwkJCQlcCisJCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOwkJCVwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIGNvcHlfZnJvbV91c2VyX3BhZ2Uodm1hLCBwYWdlLCB2YWRkciwgZHN0LCBzcmMsIGxlbikgXAorCWRvIHsJCQkJCQkJXAorCQlmbHVzaF9jYWNoZV9wYWdlKHZtYSwgdmFkZHIsIHBhZ2VfdG9fcGZuKHBhZ2UpKTtcCisJCW1lbWNweShkc3QsIHNyYywgbGVuKTsJCQkJXAorCX0gd2hpbGUgKDApCisKKy8qCisgKiBDb252ZXJ0IGNhbGxzIHRvIG91ciBjYWxsaW5nIGNvbnZlbnRpb24uCisgKi8KKyNkZWZpbmUgZmx1c2hfY2FjaGVfYWxsKCkJCV9fY3B1Y19mbHVzaF9rZXJuX2FsbCgpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9jYWNoZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlpZiAoY3B1X2lzc2V0KHNtcF9wcm9jZXNzb3JfaWQoKSwgbW0tPmNwdV92bV9tYXNrKSkKKwkJX19jcHVjX2ZsdXNoX3VzZXJfYWxsKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZmx1c2hfY2FjaGVfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCWlmIChjcHVfaXNzZXQoc21wX3Byb2Nlc3Nvcl9pZCgpLCB2bWEtPnZtX21tLT5jcHVfdm1fbWFzaykpCisJCV9fY3B1Y19mbHVzaF91c2VyX3JhbmdlKHN0YXJ0ICYgUEFHRV9NQVNLLCBQQUdFX0FMSUdOKGVuZCksCisJCQkJCXZtYS0+dm1fZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2ZsdXNoX2NhY2hlX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgdXNlcl9hZGRyLCB1bnNpZ25lZCBsb25nIHBmbikKK3sKKwlpZiAoY3B1X2lzc2V0KHNtcF9wcm9jZXNzb3JfaWQoKSwgdm1hLT52bV9tbS0+Y3B1X3ZtX21hc2spKSB7CisJCXVuc2lnbmVkIGxvbmcgYWRkciA9IHVzZXJfYWRkciAmIFBBR0VfTUFTSzsKKwkJX19jcHVjX2ZsdXNoX3VzZXJfcmFuZ2UoYWRkciwgYWRkciArIFBBR0VfU0laRSwgdm1hLT52bV9mbGFncyk7CisJfQorfQorCisvKgorICogZmx1c2hfY2FjaGVfdXNlcl9yYW5nZSBpcyB1c2VkIHdoZW4gd2Ugd2FudCB0byBlbnN1cmUgdGhhdCB0aGUKKyAqIEhhcnZhcmQgY2FjaGVzIGFyZSBzeW5jaHJvbmlzZWQgZm9yIHRoZSB1c2VyIHNwYWNlIGFkZHJlc3MgcmFuZ2UuCisgKiBUaGlzIGlzIHVzZWQgZm9yIHRoZSBBUk0gcHJpdmF0ZSBzeXNfY2FjaGVmbHVzaCBzeXN0ZW0gY2FsbC4KKyAqLworI2RlZmluZSBmbHVzaF9jYWNoZV91c2VyX3JhbmdlKHZtYSxzdGFydCxlbmQpIFwKKwlfX2NwdWNfY29oZXJlbnRfdXNlcl9yYW5nZSgoc3RhcnQpICYgUEFHRV9NQVNLLCBQQUdFX0FMSUdOKGVuZCkpCisKKy8qCisgKiBQZXJmb3JtIG5lY2Vzc2FyeSBjYWNoZSBvcGVyYXRpb25zIHRvIGVuc3VyZSB0aGF0IGRhdGEgcHJldmlvdXNseQorICogc3RvcmVkIHdpdGhpbiB0aGlzIHJhbmdlIG9mIGFkZHJlc3NlcyBjYW4gYmUgZXhlY3V0ZWQgYnkgdGhlIENQVS4KKyAqLworI2RlZmluZSBmbHVzaF9pY2FjaGVfcmFuZ2UocyxlKQkJX19jcHVjX2NvaGVyZW50X2tlcm5fcmFuZ2UocyxlKQorCisvKgorICogUGVyZm9ybSBuZWNlc3NhcnkgY2FjaGUgb3BlcmF0aW9ucyB0byBlbnN1cmUgdGhhdCB0aGUgVExCIHdpbGwKKyAqIHNlZSBkYXRhIHdyaXR0ZW4gaW4gdGhlIHNwZWNpZmllZCBhcmVhLgorICovCisjZGVmaW5lIGNsZWFuX2RjYWNoZV9hcmVhKHN0YXJ0LHNpemUpCWNwdV9kY2FjaGVfY2xlYW5fYXJlYShzdGFydCwgc2l6ZSkKKworLyoKKyAqIGZsdXNoX2RjYWNoZV9wYWdlIGlzIHVzZWQgd2hlbiB0aGUga2VybmVsIGhhcyB3cml0dGVuIHRvIHRoZSBwYWdlCisgKiBjYWNoZSBwYWdlIGF0IHZpcnR1YWwgYWRkcmVzcyBwYWdlLT52aXJ0dWFsLgorICoKKyAqIElmIHRoaXMgcGFnZSBpc24ndCBtYXBwZWQgKGllLCBwYWdlX21hcHBpbmcgPT0gTlVMTCksIG9yIGl0IG1pZ2h0CisgKiBoYXZlIHVzZXJzcGFjZSBtYXBwaW5ncywgdGhlbiB3ZSBfbXVzdF8gYWx3YXlzIGNsZWFuICsgaW52YWxpZGF0ZQorICogdGhlIGRjYWNoZSBlbnRyaWVzIGFzc29jaWF0ZWQgd2l0aCB0aGUga2VybmVsIG1hcHBpbmcuCisgKgorICogT3RoZXJ3aXNlIHdlIGNhbiBkZWZlciB0aGUgb3BlcmF0aW9uLCBhbmQgY2xlYW4gdGhlIGNhY2hlIHdoZW4gd2UgYXJlCisgKiBhYm91dCB0byBjaGFuZ2UgdG8gdXNlciBzcGFjZS4gIFRoaXMgaXMgdGhlIHNhbWUgbWV0aG9kIGFzIHVzZWQgb24gU1BBUkM2NC4KKyAqIFNlZSB1cGRhdGVfbW11X2NhY2hlIGZvciB0aGUgdXNlciBzcGFjZSBwYXJ0LgorICovCitleHRlcm4gdm9pZCBmbHVzaF9kY2FjaGVfcGFnZShzdHJ1Y3QgcGFnZSAqKTsKKworI2RlZmluZSBmbHVzaF9kY2FjaGVfbW1hcF9sb2NrKG1hcHBpbmcpIFwKKwl3cml0ZV9sb2NrX2lycSgmKG1hcHBpbmcpLT50cmVlX2xvY2spCisjZGVmaW5lIGZsdXNoX2RjYWNoZV9tbWFwX3VubG9jayhtYXBwaW5nKSBcCisJd3JpdGVfdW5sb2NrX2lycSgmKG1hcHBpbmcpLT50cmVlX2xvY2spCisKKyNkZWZpbmUgZmx1c2hfaWNhY2hlX3VzZXJfcmFuZ2Uodm1hLHBhZ2UsYWRkcixsZW4pIFwKKwlmbHVzaF9kY2FjaGVfcGFnZShwYWdlKQorCisvKgorICogV2UgZG9uJ3QgYXBwZWFyIHRvIG5lZWQgdG8gZG8gYW55dGhpbmcgaGVyZS4gIEluIGZhY3QsIGlmIHdlIGRpZCwgd2UnZAorICogZHVwbGljYXRlIGNhY2hlIGZsdXNoaW5nIGVsc2V3aGVyZSBwZXJmb3JtZWQgYnkgZmx1c2hfZGNhY2hlX3BhZ2UoKS4KKyAqLworI2RlZmluZSBmbHVzaF9pY2FjaGVfcGFnZSh2bWEscGFnZSkJZG8geyB9IHdoaWxlICgwKQorCisjZGVmaW5lIF9fY2FjaGVpZF9wcmVzZW50KHZhbCkJCSh2YWwgIT0gcmVhZF9jcHVpZChDUFVJRF9JRCkpCisjZGVmaW5lIF9fY2FjaGVpZF92aXZ0KHZhbCkJCSgodmFsICYgKDE1IDw8IDI1KSkgIT0gKDE0IDw8IDI1KSkKKyNkZWZpbmUgX19jYWNoZWlkX3ZpcHQodmFsKQkJKCh2YWwgJiAoMTUgPDwgMjUpKSA9PSAoMTQgPDwgMjUpKQorI2RlZmluZSBfX2NhY2hlaWRfdmlwdF9ub25hbGlhc2luZyh2YWwpCSgodmFsICYgKDE1IDw8IDI1IHwgMSA8PCAyMykpID09ICgxNCA8PCAyNSkpCisjZGVmaW5lIF9fY2FjaGVpZF92aXB0X2FsaWFzaW5nKHZhbCkJKCh2YWwgJiAoMTUgPDwgMjUgfCAxIDw8IDIzKSkgPT0gKDE0IDw8IDI1IHwgMSA8PCAyMykpCisKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfQ0FDSEVfVklWVCkgJiYgIWRlZmluZWQoQ09ORklHX0NQVV9DQUNIRV9WSVBUKQorCisjZGVmaW5lIGNhY2hlX2lzX3ZpdnQoKQkJCTEKKyNkZWZpbmUgY2FjaGVfaXNfdmlwdCgpCQkJMAorI2RlZmluZSBjYWNoZV9pc192aXB0X25vbmFsaWFzaW5nKCkJMAorI2RlZmluZSBjYWNoZV9pc192aXB0X2FsaWFzaW5nKCkJMAorCisjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfQ0FDSEVfVklQVCkKKworI2RlZmluZSBjYWNoZV9pc192aXZ0KCkJCQkwCisjZGVmaW5lIGNhY2hlX2lzX3ZpcHQoKQkJCTEKKyNkZWZpbmUgY2FjaGVfaXNfdmlwdF9ub25hbGlhc2luZygpCQkJCQlcCisJKHsJCQkJCQkJCVwKKwkJdW5zaWduZWQgaW50IF9fdmFsID0gcmVhZF9jcHVpZChDUFVJRF9DQUNIRVRZUEUpOwlcCisJCV9fY2FjaGVpZF92aXB0X25vbmFsaWFzaW5nKF9fdmFsKTsJCQlcCisJfSkKKworI2RlZmluZSBjYWNoZV9pc192aXB0X2FsaWFzaW5nKCkJCQkJCVwKKwkoewkJCQkJCQkJXAorCQl1bnNpZ25lZCBpbnQgX192YWwgPSByZWFkX2NwdWlkKENQVUlEX0NBQ0hFVFlQRSk7CVwKKwkJX19jYWNoZWlkX3ZpcHRfYWxpYXNpbmcoX192YWwpOwkJCQlcCisJfSkKKworI2Vsc2UKKworI2RlZmluZSBjYWNoZV9pc192aXZ0KCkJCQkJCQkJXAorCSh7CQkJCQkJCQlcCisJCXVuc2lnbmVkIGludCBfX3ZhbCA9IHJlYWRfY3B1aWQoQ1BVSURfQ0FDSEVUWVBFKTsJXAorCQkoIV9fY2FjaGVpZF9wcmVzZW50KF9fdmFsKSkgfHwgX19jYWNoZWlkX3ZpdnQoX192YWwpOwlcCisJfSkKKwkJCisjZGVmaW5lIGNhY2hlX2lzX3ZpcHQoKQkJCQkJCQlcCisJKHsJCQkJCQkJCVwKKwkJdW5zaWduZWQgaW50IF9fdmFsID0gcmVhZF9jcHVpZChDUFVJRF9DQUNIRVRZUEUpOwlcCisJCV9fY2FjaGVpZF9wcmVzZW50KF9fdmFsKSAmJiBfX2NhY2hlaWRfdmlwdChfX3ZhbCk7CVwKKwl9KQorCisjZGVmaW5lIGNhY2hlX2lzX3ZpcHRfbm9uYWxpYXNpbmcoKQkJCQkJXAorCSh7CQkJCQkJCQlcCisJCXVuc2lnbmVkIGludCBfX3ZhbCA9IHJlYWRfY3B1aWQoQ1BVSURfQ0FDSEVUWVBFKTsJXAorCQlfX2NhY2hlaWRfcHJlc2VudChfX3ZhbCkgJiYJCQkJXAorCQkgX19jYWNoZWlkX3ZpcHRfbm9uYWxpYXNpbmcoX192YWwpOwkJCVwKKwl9KQorCisjZGVmaW5lIGNhY2hlX2lzX3ZpcHRfYWxpYXNpbmcoKQkJCQkJXAorCSh7CQkJCQkJCQlcCisJCXVuc2lnbmVkIGludCBfX3ZhbCA9IHJlYWRfY3B1aWQoQ1BVSURfQ0FDSEVUWVBFKTsJXAorCQlfX2NhY2hlaWRfcHJlc2VudChfX3ZhbCkgJiYJCQkJXAorCQkgX19jYWNoZWlkX3ZpcHRfYWxpYXNpbmcoX192YWwpOwkJCVwKKwl9KQorCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vY2hlY2tzdW0uaCBiL2luY2x1ZGUvYXNtLWFybS9jaGVja3N1bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0MjU2ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vY2hlY2tzdW0uaApAQCAtMCwwICsxLDE2MCBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vY2hlY2tzdW0uaAorICoKKyAqIElQIGNoZWNrc3VtIHJvdXRpbmVzCisgKgorICogQ29weXJpZ2h0IChDKSBPcmlnaW5hbCBhdXRob3JzIG9mIC4uL2FzbS1pMzg2L2NoZWNrc3VtLmgKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0xOTk5IFJ1c3NlbGwgS2luZworICovCisjaWZuZGVmIF9fQVNNX0FSTV9DSEVDS1NVTV9ICisjZGVmaW5lIF9fQVNNX0FSTV9DSEVDS1NVTV9ICisKKyNpbmNsdWRlIDxsaW51eC9pbjYuaD4KKworLyoKKyAqIGNvbXB1dGVzIHRoZSBjaGVja3N1bSBvZiBhIG1lbW9yeSBibG9jayBhdCBidWZmLCBsZW5ndGggbGVuLAorICogYW5kIGFkZHMgaW4gInN1bSIgKDMyLWJpdCkKKyAqCisgKiByZXR1cm5zIGEgMzItYml0IG51bWJlciBzdWl0YWJsZSBmb3IgZmVlZGluZyBpbnRvIGl0c2VsZgorICogb3IgY3N1bV90Y3B1ZHBfbWFnaWMKKyAqCisgKiB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGggZXZlbiBsZW5ndGhzLCBleGNlcHQKKyAqIGZvciB0aGUgbGFzdCBmcmFnbWVudCwgd2hpY2ggbWF5IGJlIG9kZAorICoKKyAqIGl0J3MgYmVzdCB0byBoYXZlIGJ1ZmYgYWxpZ25lZCBvbiBhIDMyLWJpdCBib3VuZGFyeQorICovCit1bnNpZ25lZCBpbnQgY3N1bV9wYXJ0aWFsKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiBidWZmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgc3VtKTsKKworLyoKKyAqIHRoZSBzYW1lIGFzIGNzdW1fcGFydGlhbCwgYnV0IGNvcGllcyBmcm9tIHNyYyB3aGlsZSBpdAorICogY2hlY2tzdW1zLCBhbmQgaGFuZGxlcyB1c2VyLXNwYWNlIHBvaW50ZXIgZXhjZXB0aW9ucyBjb3JyZWN0bHksIHdoZW4gbmVlZGVkLgorICoKKyAqIGhlcmUgZXZlbiBtb3JlIGltcG9ydGFudCB0byBhbGlnbiBzcmMgYW5kIGRzdCBvbiBhIDMyLWJpdCAob3IgZXZlbgorICogYmV0dGVyIDY0LWJpdCkgYm91bmRhcnkKKyAqLworCit1bnNpZ25lZCBpbnQKK2NzdW1fcGFydGlhbF9jb3B5X25vY2hlY2soY29uc3QgY2hhciAqc3JjLCBjaGFyICpkc3QsIGludCBsZW4sIGludCBzdW0pOworCit1bnNpZ25lZCBpbnQKK2NzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlcihjb25zdCBjaGFyIF9fdXNlciAqc3JjLCBjaGFyICpkc3QsIGludCBsZW4sIGludCBzdW0sIGludCAqZXJyX3B0cik7CisKKy8qCisgKiBUaGlzIGlzIHRoZSBvbGQgKGFuZCB1bnNhZmUpIHdheSBvZiBkb2luZyBjaGVja3N1bXMsIGEgd2FybmluZyBtZXNzYWdlIHdpbGwKKyAqIGJlIHByaW50ZWQgaWYgaXQgaXMgdXNlZCBhbmQgYW4gZXhjZXB0aW9uIG9jY3Vycy4KKyAqCisgKiB0aGlzIGZ1bmN0aW9ucyBzaG91bGQgZ28gYXdheSBhZnRlciBzb21lIHRpbWUuCisgKi8KKyNkZWZpbmUgY3N1bV9wYXJ0aWFsX2NvcHkoc3JjLGRzdCxsZW4sc3VtKQljc3VtX3BhcnRpYWxfY29weV9ub2NoZWNrKHNyYyxkc3QsbGVuLHN1bSkKKworLyoKKyAqCVRoaXMgaXMgYSB2ZXJzaW9uIG9mIGlwX2NvbXB1dGVfY3N1bSgpIG9wdGltaXplZCBmb3IgSVAgaGVhZGVycywKKyAqCXdoaWNoIGFsd2F5cyBjaGVja3N1bSBvbiA0IG9jdGV0IGJvdW5kYXJpZXMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQKK2lwX2Zhc3RfY3N1bSh1bnNpZ25lZCBjaGFyICogaXBoLCB1bnNpZ25lZCBpbnQgaWhsKQoreworCXVuc2lnbmVkIGludCBzdW0sIHRtcDE7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkibGRyCSUwLCBbJTFdLCAjNAkJQCBpcF9mYXN0X2NzdW0JCVxuXAorCWxkcgklMywgWyUxXSwgIzQJCQkJCVxuXAorCXN1YgklMiwgJTIsICM1CQkJCQlcblwKKwlhZGRzCSUwLCAlMCwgJTMJCQkJCVxuXAorCWxkcgklMywgWyUxXSwgIzQJCQkJCVxuXAorCWFkY3MJJTAsICUwLCAlMwkJCQkJXG5cCisJbGRyCSUzLCBbJTFdLCAjNAkJCQkJXG5cCisxOglhZGNzCSUwLCAlMCwgJTMJCQkJCVxuXAorCWxkcgklMywgWyUxXSwgIzQJCQkJCVxuXAorCXRzdAklMiwgIzE1CQkJQCBkbyB0aGlzIGNhcmVmdWxseQlcblwKKwlzdWJuZQklMiwgJTIsICMxCQlAIHdpdGhvdXQgZGVzdHJveWluZwlcblwKKwlibmUJMWIJCQlAIHRoZSBjYXJyeSBmbGFnCVxuXAorCWFkY3MJJTAsICUwLCAlMwkJCQkJXG5cCisJYWRjCSUwLCAlMCwgIzAJCQkJCVxuXAorCWFkZHMJJTAsICUwLCAlMCwgbHNsICMxNgkJCQlcblwKKwlhZGRjcwklMCwgJTAsICMweDEwMDAwCQkJCVxuXAorCW12bgklMCwgJTAJCQkJCQlcblwKKwltb3YJJTAsICUwLCBsc3IgIzE2IgorCTogIj1yIiAoc3VtKSwgIj1yIiAoaXBoKSwgIj1yIiAoaWhsKSwgIj1yIiAodG1wMSkKKwk6ICIxIiAoaXBoKSwgIjIiIChpaGwpCisJOiAiY2MiKTsKKwlyZXR1cm4gc3VtOworfQorCisvKgorICogCUZvbGQgYSBwYXJ0aWFsIGNoZWNrc3VtIHdpdGhvdXQgYWRkaW5nIHBzZXVkbyBoZWFkZXJzCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50Citjc3VtX2ZvbGQodW5zaWduZWQgaW50IHN1bSkKK3sKKwlfX2FzbV9fKAorCSJhZGRzCSUwLCAlMSwgJTEsIGxzbCAjMTYJQCBjc3VtX2ZvbGQJCVxuXAorCWFkZGNzCSUwLCAlMCwgIzB4MTAwMDAiCisJOiAiPXIiIChzdW0pCisJOiAiciIgKHN1bSkKKwk6ICJjYyIpOworCXJldHVybiAofnN1bSkgPj4gMTY7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50Citjc3VtX3RjcHVkcF9ub2ZvbGQodW5zaWduZWQgbG9uZyBzYWRkciwgdW5zaWduZWQgbG9uZyBkYWRkciwgdW5zaWduZWQgc2hvcnQgbGVuLAorCQkgICB1bnNpZ25lZCBpbnQgcHJvdG8sIHVuc2lnbmVkIGludCBzdW0pCit7CisJX19hc21fXygKKwkiYWRkcwklMCwgJTEsICUyCQlAIGNzdW1fdGNwdWRwX25vZm9sZAlcblwKKwlhZGNzCSUwLCAlMCwgJTMJCQkJCVxuXAorCWFkY3MJJTAsICUwLCAlNAkJCQkJXG5cCisJYWRjcwklMCwgJTAsICU1CQkJCQlcblwKKwlhZGMJJTAsICUwLCAjMCIKKwk6ICI9JnIiKHN1bSkKKwk6ICJyIiAoc3VtKSwgInIiIChkYWRkciksICJyIiAoc2FkZHIpLCAiciIgKG50b2hzKGxlbikpLCAiSXIiIChudG9ocyhwcm90bykpCisJOiAiY2MiKTsKKwlyZXR1cm4gc3VtOworfQkKKy8qCisgKiBjb21wdXRlcyB0aGUgY2hlY2tzdW0gb2YgdGhlIFRDUC9VRFAgcHNldWRvLWhlYWRlcgorICogcmV0dXJucyBhIDE2LWJpdCBjaGVja3N1bSwgYWxyZWFkeSBjb21wbGVtZW50ZWQKKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBpbnQKK2NzdW1fdGNwdWRwX21hZ2ljKHVuc2lnbmVkIGxvbmcgc2FkZHIsIHVuc2lnbmVkIGxvbmcgZGFkZHIsIHVuc2lnbmVkIHNob3J0IGxlbiwKKwkJICB1bnNpZ25lZCBpbnQgcHJvdG8sIHVuc2lnbmVkIGludCBzdW0pCit7CisJX19hc21fXygKKwkiYWRkcwklMCwgJTEsICUyCQlAIGNzdW1fdGNwdWRwX21hZ2ljCVxuXAorCWFkY3MJJTAsICUwLCAlMwkJCQkJXG5cCisJYWRjcwklMCwgJTAsICU0CQkJCQlcblwKKwlhZGNzCSUwLCAlMCwgJTUJCQkJCVxuXAorCWFkYwklMCwgJTAsICMwCQkJCQlcblwKKwlhZGRzCSUwLCAlMCwgJTAsIGxzbCAjMTYJCQkJXG5cCisJYWRkY3MJJTAsICUwLCAjMHgxMDAwMAkJCQlcblwKKwltdm4JJTAsICUwIgorCTogIj0mciIoc3VtKQorCTogInIiIChzdW0pLCAiciIgKGRhZGRyKSwgInIiIChzYWRkciksICJyIiAobnRvaHMobGVuKSksICJJciIgKG50b2hzKHByb3RvKSkKKwk6ICJjYyIpOworCXJldHVybiBzdW0gPj4gMTY7Cit9CisKKworLyoKKyAqIHRoaXMgcm91dGluZSBpcyB1c2VkIGZvciBtaXNjZWxsYW5lb3VzIElQLWxpa2UgY2hlY2tzdW1zLCBtYWlubHkKKyAqIGluIGljbXAuYworICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0CitpcF9jb21wdXRlX2NzdW0odW5zaWduZWQgY2hhciAqIGJ1ZmYsIGludCBsZW4pCit7CisJcmV0dXJuIGNzdW1fZm9sZChjc3VtX3BhcnRpYWwoYnVmZiwgbGVuLCAwKSk7Cit9CisKKyNkZWZpbmUgX0hBVkVfQVJDSF9JUFY2X0NTVU0KK2V4dGVybiB1bnNpZ25lZCBsb25nCitfX2NzdW1faXB2Nl9tYWdpYyhzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLCBfX3UzMiBsZW4sCisJCV9fdTMyIHByb3RvLCB1bnNpZ25lZCBpbnQgc3VtKTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBpbnQKK2NzdW1faXB2Nl9tYWdpYyhzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLCBfX3UzMiBsZW4sCisJCXVuc2lnbmVkIHNob3J0IHByb3RvLCB1bnNpZ25lZCBpbnQgc3VtKQoreworCXJldHVybiBjc3VtX2ZvbGQoX19jc3VtX2lwdjZfbWFnaWMoc2FkZHIsIGRhZGRyLCBodG9ubChsZW4pLAorCQkJCQkgICBodG9ubChwcm90byksIHN1bSkpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vY3B1LW11bHRpMzIuaCBiL2luY2x1ZGUvYXNtLWFybS9jcHUtbXVsdGkzMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmNDgwMjIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vY3B1LW11bHRpMzIuaApAQCAtMCwwICsxLDY0IEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9jcHUtbXVsdGkzMi5oCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMCBSdXNzZWxsIEtpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKworc3RydWN0IG1tX3N0cnVjdDsKKworLyoKKyAqIERvbid0IGNoYW5nZSB0aGlzIHN0cnVjdHVyZSAtIEFTTSBjb2RlCisgKiByZWxpZXMgb24gaXQuCisgKi8KK2V4dGVybiBzdHJ1Y3QgcHJvY2Vzc29yIHsKKwkvKiBNSVNDCisJICogZ2V0IGRhdGEgYWJvcnQgYWRkcmVzcy9mbGFncworCSAqLworCXZvaWQgKCpfZGF0YV9hYm9ydCkodW5zaWduZWQgbG9uZyBwYyk7CisJLyoKKwkgKiBTZXQgdXAgYW55IHByb2Nlc3NvciBzcGVjaWZpY3MKKwkgKi8KKwl2b2lkICgqX3Byb2NfaW5pdCkodm9pZCk7CisJLyoKKwkgKiBEaXNhYmxlIGFueSBwcm9jZXNzb3Igc3BlY2lmaWNzCisJICovCisJdm9pZCAoKl9wcm9jX2Zpbikodm9pZCk7CisJLyoKKwkgKiBTcGVjaWFsIHN0dWZmIGZvciBhIHJlc2V0CisJICovCisJdm9sYXRpbGUgdm9pZCAoKnJlc2V0KSh1bnNpZ25lZCBsb25nIGFkZHIpOworCS8qCisJICogSWRsZSB0aGUgcHJvY2Vzc29yCisJICovCisJaW50ICgqX2RvX2lkbGUpKHZvaWQpOworCS8qCisJICogUHJvY2Vzc29yIGFyY2hpdGVjdHVyZSBzcGVjaWZpYworCSAqLworCS8qCisJICogY2xlYW4gYSB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2UgZnJvbSB0aGUKKwkgKiBELWNhY2hlIHdpdGhvdXQgZmx1c2hpbmcgdGhlIGNhY2hlLgorCSAqLworCXZvaWQgKCpkY2FjaGVfY2xlYW5fYXJlYSkodm9pZCAqYWRkciwgaW50IHNpemUpOworCisJLyoKKwkgKiBTZXQgdGhlIHBhZ2UgdGFibGUKKwkgKi8KKwl2b2lkICgqc3dpdGNoX21tKSh1bnNpZ25lZCBsb25nIHBnZF9waHlzLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CisJLyoKKwkgKiBTZXQgYSBQVEUKKwkgKi8KKwl2b2lkICgqc2V0X3B0ZSkocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSk7Cit9IHByb2Nlc3NvcjsKKworI2RlZmluZSBjcHVfcHJvY19pbml0KCkJCQlwcm9jZXNzb3IuX3Byb2NfaW5pdCgpCisjZGVmaW5lIGNwdV9wcm9jX2ZpbigpCQkJcHJvY2Vzc29yLl9wcm9jX2ZpbigpCisjZGVmaW5lIGNwdV9yZXNldChhZGRyKQkJCXByb2Nlc3Nvci5yZXNldChhZGRyKQorI2RlZmluZSBjcHVfZG9faWRsZSgpCQkJcHJvY2Vzc29yLl9kb19pZGxlKCkKKyNkZWZpbmUgY3B1X2RjYWNoZV9jbGVhbl9hcmVhKGFkZHIsc3opCXByb2Nlc3Nvci5kY2FjaGVfY2xlYW5fYXJlYShhZGRyLHN6KQorI2RlZmluZSBjcHVfc2V0X3B0ZShwdGVwLCBwdGUpCQlwcm9jZXNzb3Iuc2V0X3B0ZShwdGVwLCBwdGUpCisjZGVmaW5lIGNwdV9kb19zd2l0Y2hfbW0ocGdkLG1tKQlwcm9jZXNzb3Iuc3dpdGNoX21tKHBnZCxtbSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9jcHUtc2luZ2xlLmggYi9pbmNsdWRlL2FzbS1hcm0vY3B1LXNpbmdsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ZWM1ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vY3B1LXNpbmdsZS5oCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2NwdS1zaW5nbGUuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDAgUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworLyoKKyAqIFNpbmdsZSBDUFUKKyAqLworI2lmZGVmIF9fU1REQ19fCisjZGVmaW5lIF9fY2F0aWZ5X2ZuKG5hbWUseCkJbmFtZSMjeAorI2Vsc2UKKyNkZWZpbmUgX19jYXRpZnlfZm4obmFtZSx4KQluYW1lLyoqL3gKKyNlbmRpZgorI2RlZmluZSBfX2NwdV9mbihuYW1lLHgpCV9fY2F0aWZ5X2ZuKG5hbWUseCkKKworLyoKKyAqIElmIHdlIGFyZSBzdXBwb3J0aW5nIG11bHRpcGxlIENQVXMsIHRoZW4gd2UgbXVzdCB1c2UgYSB0YWJsZSBvZgorICogZnVuY3Rpb24gcG9pbnRlcnMgZm9yIHRoaXMgbG90LiAgT3RoZXJ3aXNlLCB3ZSBjYW4gb3B0aW1pc2UgdGhlCisgKiB0YWJsZSBhd2F5LgorICovCisjZGVmaW5lIGNwdV9wcm9jX2luaXQJCQlfX2NwdV9mbihDUFVfTkFNRSxfcHJvY19pbml0KQorI2RlZmluZSBjcHVfcHJvY19maW4JCQlfX2NwdV9mbihDUFVfTkFNRSxfcHJvY19maW4pCisjZGVmaW5lIGNwdV9yZXNldAkJCV9fY3B1X2ZuKENQVV9OQU1FLF9yZXNldCkKKyNkZWZpbmUgY3B1X2RvX2lkbGUJCQlfX2NwdV9mbihDUFVfTkFNRSxfZG9faWRsZSkKKyNkZWZpbmUgY3B1X2RjYWNoZV9jbGVhbl9hcmVhCQlfX2NwdV9mbihDUFVfTkFNRSxfZGNhY2hlX2NsZWFuX2FyZWEpCisjZGVmaW5lIGNwdV9kb19zd2l0Y2hfbW0JCV9fY3B1X2ZuKENQVV9OQU1FLF9zd2l0Y2hfbW0pCisjZGVmaW5lIGNwdV9zZXRfcHRlCQkJX19jcHVfZm4oQ1BVX05BTUUsX3NldF9wdGUpCisKKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorCitzdHJ1Y3QgbW1fc3RydWN0OworCisvKiBkZWNsYXJlIGFsbCB0aGUgZnVuY3Rpb25zIGFzIGV4dGVybiAqLworZXh0ZXJuIHZvaWQgY3B1X3Byb2NfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIGNwdV9wcm9jX2Zpbih2b2lkKTsKK2V4dGVybiBpbnQgY3B1X2RvX2lkbGUodm9pZCk7CitleHRlcm4gdm9pZCBjcHVfZGNhY2hlX2NsZWFuX2FyZWEodm9pZCAqLCBpbnQpOworZXh0ZXJuIHZvaWQgY3B1X2RvX3N3aXRjaF9tbSh1bnNpZ25lZCBsb25nIHBnZF9waHlzLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CitleHRlcm4gdm9pZCBjcHVfc2V0X3B0ZShwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKTsKK2V4dGVybiB2b2xhdGlsZSB2b2lkIGNwdV9yZXNldCh1bnNpZ25lZCBsb25nIGFkZHIpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2NwdS5oIGIvaW5jbHVkZS9hc20tYXJtL2NwdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjYmRkNDAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vY3B1LmgKQEAgLTAsMCArMSwyNSBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vY3B1LmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUgQVJNIEx0ZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaWZuZGVmIF9fQVNNX0FSTV9DUFVfSAorI2RlZmluZSBfX0FTTV9BUk1fQ1BVX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorCitzdHJ1Y3QgY3B1aW5mb19hcm0geworCXN0cnVjdCBjcHUJY3B1OworI2lmZGVmIENPTkZJR19TTVAKKwl1bnNpZ25lZCBpbnQJbG9vcHNfcGVyX2ppZmZ5OworI2VuZGlmCit9OworCitERUNMQVJFX1BFUl9DUFUoc3RydWN0IGNwdWluZm9fYXJtLCBjcHVfZGF0YSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2NwdXRpbWUuaCBiL2luY2x1ZGUvYXNtLWFybS9jcHV0aW1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2E4MDAyYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9jcHV0aW1lLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fQVJNX0NQVVRJTUVfSAorI2RlZmluZSBfX0FSTV9DUFVUSU1FX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2NwdXRpbWUuaD4KKworI2VuZGlmIC8qIF9fQVJNX0NQVVRJTUVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2N1cnJlbnQuaCBiL2luY2x1ZGUvYXNtLWFybS9jdXJyZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVkMjFlMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9jdXJyZW50LmgKQEAgLTAsMCArMSwxNSBAQAorI2lmbmRlZiBfQVNNQVJNX0NVUlJFTlRfSAorI2RlZmluZSBfQVNNQVJNX0NVUlJFTlRfSAorCisjaW5jbHVkZSA8bGludXgvdGhyZWFkX2luZm8uaD4KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmdldF9jdXJyZW50KHZvaWQpIF9fYXR0cmlidXRlX2NvbnN0X187CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRhc2tfc3RydWN0ICpnZXRfY3VycmVudCh2b2lkKQoreworCXJldHVybiBjdXJyZW50X3RocmVhZF9pbmZvKCktPnRhc2s7Cit9CisKKyNkZWZpbmUgY3VycmVudCAoZ2V0X2N1cnJlbnQoKSkKKworI2VuZGlmIC8qIF9BU01BUk1fQ1VSUkVOVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vZGVsYXkuaCBiL2luY2x1ZGUvYXNtLWFybS9kZWxheS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MDQzNjAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vZGVsYXkuaApAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDQgUnVzc2VsbCBLaW5nCisgKgorICogRGVsYXkgcm91dGluZXMsIHVzaW5nIGEgcHJlLWNvbXB1dGVkICJsb29wc19wZXJfc2Vjb25kIiB2YWx1ZS4KKyAqLworI2lmbmRlZiBfX0FTTV9BUk1fREVMQVlfSAorI2RlZmluZSBfX0FTTV9BUk1fREVMQVlfSAorCitleHRlcm4gdm9pZCBfX2RlbGF5KGludCBsb29wcyk7CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGludGVudGlvbmFsbHkgZG9lcyBub3QgZXhpc3Q7IGlmIHlvdSBzZWUgcmVmZXJlbmNlcyB0bworICogaXQsIGl0IG1lYW5zIHRoYXQgeW91J3JlIGNhbGxpbmcgdWRlbGF5KCkgd2l0aCBhbiBvdXQgb2YgcmFuZ2UgdmFsdWUuCisgKgorICogV2l0aCBjdXJyZW50bHkgaW1wb3NlZCBsaW1pdHMsIHRoaXMgbWVhbnMgdGhhdCB3ZSBzdXBwb3J0IGEgbWF4IGRlbGF5CisgKiBvZiAyMDAwdXMgYW5kIDY3MSBib2dvbWlwcworICovCitleHRlcm4gdm9pZCBfX2JhZF91ZGVsYXkodm9pZCk7CisKKy8qCisgKiBkaXZpc2lvbiBieSBtdWx0aXBsaWNhdGlvbjogeW91IGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQKKyAqIGxvc3Mgb2YgcHJlY2lzaW9uLgorICoKKyAqIFVzZSBvbmx5IGZvciB2ZXJ5IHNtYWxsIGRlbGF5cyAoIDwgMSBtc2VjKS4gIFNob3VsZCBwcm9iYWJseSB1c2UgYQorICogbG9va3VwIHRhYmxlLCByZWFsbHksIGFzIHRoZSBtdWx0aXBsaWNhdGlvbnMgdGFrZSBtdWNoIHRvbyBsb25nIHdpdGgKKyAqIHNob3J0IGRlbGF5cy4gIFRoaXMgaXMgYSAicmVhc29uYWJsZSIgaW1wbGVtZW50YXRpb24sIHRob3VnaCAoYW5kIHRoZQorICogZmlyc3QgY29uc3RhbnQgbXVsdGlwbGljYXRpb25zIGdldHMgb3B0aW1pemVkIGF3YXkgaWYgdGhlIGRlbGF5IGlzCisgKiBhIGNvbnN0YW50KQorICovCitleHRlcm4gdm9pZCBfX3VkZWxheSh1bnNpZ25lZCBsb25nIHVzZWNzKTsKK2V4dGVybiB2b2lkIF9fY29uc3RfdWRlbGF5KHVuc2lnbmVkIGxvbmcpOworCisjZGVmaW5lIE1BWF9VREVMQVlfTVMgMgorCisjZGVmaW5lIHVkZWxheShuKQkJCQkJCVwKKwkoX19idWlsdGluX2NvbnN0YW50X3AobikgPwkJCQlcCisJICAoKG4pID4gKE1BWF9VREVMQVlfTVMgKiAxMDAwKSA/IF9fYmFkX3VkZWxheSgpIDoJXAorCQkJX19jb25zdF91ZGVsYXkoKG4pICogMHg2OGRidWwpKSA6CVwKKwkgIF9fdWRlbGF5KG4pKQorCisjZW5kaWYgLyogZGVmaW5lZChfQVJNX0RFTEFZX0gpICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9kaXY2NC5oIGIvaW5jbHVkZS9hc20tYXJtL2RpdjY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY4MjYxNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9kaXY2NC5oCkBAIC0wLDAgKzEsNDggQEAKKyNpZm5kZWYgX19BU01fQVJNX0RJVjY0CisjZGVmaW5lIF9fQVNNX0FSTV9ESVY2NAorCisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorCisvKgorICogVGhlIHNlbWFudGljcyBvZiBkb19kaXYoKSBhcmU6CisgKgorICogdWludDMyX3QgZG9fZGl2KHVpbnQ2NF90ICpuLCB1aW50MzJfdCBiYXNlKQorICogeworICogCXVpbnQzMl90IHJlbWFpbmRlciA9ICpuICUgYmFzZTsKKyAqIAkqbiA9ICpuIC8gYmFzZTsKKyAqIAlyZXR1cm4gcmVtYWluZGVyOworICogfQorICoKKyAqIEluIG90aGVyIHdvcmRzLCBhIDY0LWJpdCBkaXZpZGVuZCB3aXRoIGEgMzItYml0IGRpdmlzb3IgcHJvZHVjaW5nCisgKiBhIDY0LWJpdCByZXN1bHQgYW5kIGEgMzItYml0IHJlbWFpbmRlci4gIFRvIGFjY29tcGxpc2ggdGhpcyBvcHRpbWFsbHkKKyAqIHdlIGNhbGwgYSBzcGVjaWFsIF9fZG9fZGl2NjQgaGVscGVyIHdpdGggY29tcGxldGVseSBub24gc3RhbmRhcmQKKyAqIGNhbGxpbmcgY29udmVudGlvbiBmb3IgYXJndW1lbnRzIGFuZCByZXN1bHRzIChiZXdhcmUpLgorICovCisKKyNpZmRlZiBfX0FSTUVCX18KKyNkZWZpbmUgX194aCAicjAiCisjZGVmaW5lIF9feGwgInIxIgorI2Vsc2UKKyNkZWZpbmUgX194bCAicjAiCisjZGVmaW5lIF9feGggInIxIgorI2VuZGlmCisKKyNkZWZpbmUgZG9fZGl2KG4sYmFzZSkJCQkJCQlcCisoewkJCQkJCQkJXAorCXJlZ2lzdGVyIHVuc2lnbmVkIGludCBfX2Jhc2UgICAgICBhc20oInI0IikgPSBiYXNlOwlcCisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBsb25nIF9fbiAgIGFzbSgicjAiKSA9IG47CVwKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIGxvbmcgX19yZXMgYXNtKCJyMiIpOwkJXAorCXJlZ2lzdGVyIHVuc2lnbmVkIGludCBfX3JlbSAgICAgICBhc20oX194aCk7CQlcCisJYXNtKAlfX2FzbWVxKCIlMCIsIF9feGgpCQkJCVwKKwkJX19hc21lcSgiJTEiLCAicjIiKQkJCQlcCisJCV9fYXNtZXEoIiUyIiwgInIwIikJCQkJXAorCQlfX2FzbWVxKCIlMyIsICJyNCIpCQkJCVwKKwkJImJsCV9fZG9fZGl2NjQiCQkJCVwKKwkJOiAiPXIiIChfX3JlbSksICI9ciIgKF9fcmVzKQkJCVwKKwkJOiAiciIgKF9fbiksICJyIiAoX19iYXNlKQkJCVwKKwkJOiAiaXAiLCAibHIiLCAiY2MiKTsJCQkJXAorCW4gPSBfX3JlczsJCQkJCQlcCisJX19yZW07CQkJCQkJCVwKK30pCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2RtYS1tYXBwaW5nLmggYi9pbmNsdWRlL2FzbS1hcm0vZG1hLW1hcHBpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjVkMDE2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2RtYS1tYXBwaW5nLmgKQEAgLTAsMCArMSw0MjYgQEAKKyNpZm5kZWYgQVNNQVJNX0RNQV9NQVBQSU5HX0gKKyNkZWZpbmUgQVNNQVJNX0RNQV9NQVBQSU5HX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+IC8qIG5lZWQgc3RydWN0IHBhZ2UgKi8KKworI2luY2x1ZGUgPGFzbS9zY2F0dGVybGlzdC5oPgorCisvKgorICogRE1BLWNvbnNpc3RlbnQgbWFwcGluZyBmdW5jdGlvbnMuICBUaGVzZSBhbGxvY2F0ZS9mcmVlIGEgcmVnaW9uIG9mCisgKiB1bmNhY2hlZCwgdW53cml0ZS1idWZmZXJlZCBtYXBwZWQgbWVtb3J5IHNwYWNlIGZvciB1c2Ugd2l0aCBETUEKKyAqIGRldmljZXMuICBUaGlzIGlzIHRoZSAiZ2VuZXJpYyIgdmVyc2lvbi4gIFRoZSBQQ0kgc3BlY2lmaWMgdmVyc2lvbgorICogaXMgaW4gcGNpLmgKKyAqLworZXh0ZXJuIHZvaWQgY29uc2lzdGVudF9zeW5jKHZvaWQgKmthZGRyLCBzaXplX3Qgc2l6ZSwgaW50IHJ3KTsKKworLyoKKyAqIFJldHVybiB3aGV0aGVyIHRoZSBnaXZlbiBkZXZpY2UgRE1BIGFkZHJlc3MgbWFzayBjYW4gYmUgc3VwcG9ydGVkCisgKiBwcm9wZXJseS4gIEZvciBleGFtcGxlLCBpZiB5b3VyIGRldmljZSBjYW4gb25seSBkcml2ZSB0aGUgbG93IDI0LWJpdHMKKyAqIGR1cmluZyBidXMgbWFzdGVyaW5nLCB0aGVuIHlvdSB3b3VsZCBwYXNzIDB4MDBmZmZmZmYgYXMgdGhlIG1hc2sKKyAqIHRvIHRoaXMgZnVuY3Rpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGRtYV9zdXBwb3J0ZWQoc3RydWN0IGRldmljZSAqZGV2LCB1NjQgbWFzaykKK3sKKwlyZXR1cm4gZGV2LT5kbWFfbWFzayAmJiAqZGV2LT5kbWFfbWFzayAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBkbWFfc2V0X21hc2soc3RydWN0IGRldmljZSAqZGV2LCB1NjQgZG1hX21hc2spCit7CisJaWYgKCFkZXYtPmRtYV9tYXNrIHx8ICFkbWFfc3VwcG9ydGVkKGRldiwgZG1hX21hc2spKQorCQlyZXR1cm4gLUVJTzsKKworCSpkZXYtPmRtYV9tYXNrID0gZG1hX21hc2s7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgZG1hX2dldF9jYWNoZV9hbGlnbm1lbnQodm9pZCkKK3sKKwlyZXR1cm4gMzI7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGRtYV9pc19jb25zaXN0ZW50KGRtYV9hZGRyX3QgaGFuZGxlKQoreworCXJldHVybiAwOworfQorCisvKgorICogRE1BIGVycm9ycyBhcmUgZGVmaW5lZCBieSBhbGwtYml0cy1zZXQgaW4gdGhlIERNQSBhZGRyZXNzLgorICovCitzdGF0aWMgaW5saW5lIGludCBkbWFfbWFwcGluZ19lcnJvcihkbWFfYWRkcl90IGRtYV9hZGRyKQoreworCXJldHVybiBkbWFfYWRkciA9PSB+MDsKK30KKworLyoqCisgKiBkbWFfYWxsb2NfY29oZXJlbnQgLSBhbGxvY2F0ZSBjb25zaXN0ZW50IG1lbW9yeSBmb3IgRE1BCisgKiBAZGV2OiB2YWxpZCBzdHJ1Y3QgZGV2aWNlIHBvaW50ZXIsIG9yIE5VTEwgZm9yIElTQSBhbmQgRUlTQS1saWtlIGRldmljZXMKKyAqIEBzaXplOiByZXF1aXJlZCBtZW1vcnkgc2l6ZQorICogQGhhbmRsZTogYnVzLXNwZWNpZmljIERNQSBhZGRyZXNzCisgKgorICogQWxsb2NhdGUgc29tZSB1bmNhY2hlZCwgdW5idWZmZXJlZCBtZW1vcnkgZm9yIGEgZGV2aWNlIGZvcgorICogcGVyZm9ybWluZyBETUEuICBUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyBwYWdlcywgYW5kIHdpbGwKKyAqIHJldHVybiB0aGUgQ1BVLXZpZXdlZCBhZGRyZXNzLCBhbmQgc2V0cyBAaGFuZGxlIHRvIGJlIHRoZQorICogZGV2aWNlLXZpZXdlZCBhZGRyZXNzLgorICovCitleHRlcm4gdm9pZCAqCitkbWFfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCAqaGFuZGxlLCBpbnQgZ2ZwKTsKKworLyoqCisgKiBkbWFfZnJlZV9jb2hlcmVudCAtIGZyZWUgbWVtb3J5IGFsbG9jYXRlZCBieSBkbWFfYWxsb2NfY29oZXJlbnQKKyAqIEBkZXY6IHZhbGlkIHN0cnVjdCBkZXZpY2UgcG9pbnRlciwgb3IgTlVMTCBmb3IgSVNBIGFuZCBFSVNBLWxpa2UgZGV2aWNlcworICogQHNpemU6IHNpemUgb2YgbWVtb3J5IG9yaWdpbmFsbHkgcmVxdWVzdGVkIGluIGRtYV9hbGxvY19jb2hlcmVudAorICogQGNwdV9hZGRyOiBDUFUtdmlldyBhZGRyZXNzIHJldHVybmVkIGZyb20gZG1hX2FsbG9jX2NvaGVyZW50CisgKiBAaGFuZGxlOiBkZXZpY2UtdmlldyBhZGRyZXNzIHJldHVybmVkIGZyb20gZG1hX2FsbG9jX2NvaGVyZW50CisgKgorICogRnJlZSAoYW5kIHVubWFwKSBhIERNQSBidWZmZXIgcHJldmlvdXNseSBhbGxvY2F0ZWQgYnkKKyAqIGRtYV9hbGxvY19jb2hlcmVudCgpLgorICoKKyAqIFJlZmVyZW5jZXMgdG8gbWVtb3J5IGFuZCBtYXBwaW5ncyBhc3NvY2lhdGVkIHdpdGggY3B1X2FkZHIvaGFuZGxlCisgKiBkdXJpbmcgYW5kIGFmdGVyIHRoaXMgY2FsbCBleGVjdXRpbmcgYXJlIGlsbGVnYWwuCisgKi8KK2V4dGVybiB2b2lkCitkbWFfZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCB2b2lkICpjcHVfYWRkciwKKwkJICBkbWFfYWRkcl90IGhhbmRsZSk7CisKKy8qKgorICogZG1hX21tYXBfY29oZXJlbnQgLSBtYXAgYSBjb2hlcmVudCBETUEgYWxsb2NhdGlvbiBpbnRvIHVzZXIgc3BhY2UKKyAqIEBkZXY6IHZhbGlkIHN0cnVjdCBkZXZpY2UgcG9pbnRlciwgb3IgTlVMTCBmb3IgSVNBIGFuZCBFSVNBLWxpa2UgZGV2aWNlcworICogQHZtYTogdm1fYXJlYV9zdHJ1Y3QgZGVzY3JpYmluZyByZXF1ZXN0ZWQgdXNlciBtYXBwaW5nCisgKiBAY3B1X2FkZHI6IGtlcm5lbCBDUFUtdmlldyBhZGRyZXNzIHJldHVybmVkIGZyb20gZG1hX2FsbG9jX2NvaGVyZW50CisgKiBAaGFuZGxlOiBkZXZpY2UtdmlldyBhZGRyZXNzIHJldHVybmVkIGZyb20gZG1hX2FsbG9jX2NvaGVyZW50CisgKiBAc2l6ZTogc2l6ZSBvZiBtZW1vcnkgb3JpZ2luYWxseSByZXF1ZXN0ZWQgaW4gZG1hX2FsbG9jX2NvaGVyZW50CisgKgorICogTWFwIGEgY29oZXJlbnQgRE1BIGJ1ZmZlciBwcmV2aW91c2x5IGFsbG9jYXRlZCBieSBkbWFfYWxsb2NfY29oZXJlbnQKKyAqIGludG8gdXNlciBzcGFjZS4gIFRoZSBjb2hlcmVudCBETUEgYnVmZmVyIG11c3Qgbm90IGJlIGZyZWVkIGJ5IHRoZQorICogZHJpdmVyIHVudGlsIHRoZSB1c2VyIHNwYWNlIG1hcHBpbmcgaGFzIGJlZW4gcmVsZWFzZWQuCisgKi8KK2ludCBkbWFfbW1hcF9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkgICAgICB2b2lkICpjcHVfYWRkciwgZG1hX2FkZHJfdCBoYW5kbGUsIHNpemVfdCBzaXplKTsKKworCisvKioKKyAqIGRtYV9hbGxvY193cml0ZWNvbWJpbmUgLSBhbGxvY2F0ZSB3cml0ZWNvbWJpbmluZyBtZW1vcnkgZm9yIERNQQorICogQGRldjogdmFsaWQgc3RydWN0IGRldmljZSBwb2ludGVyLCBvciBOVUxMIGZvciBJU0EgYW5kIEVJU0EtbGlrZSBkZXZpY2VzCisgKiBAc2l6ZTogcmVxdWlyZWQgbWVtb3J5IHNpemUKKyAqIEBoYW5kbGU6IGJ1cy1zcGVjaWZpYyBETUEgYWRkcmVzcworICoKKyAqIEFsbG9jYXRlIHNvbWUgdW5jYWNoZWQsIGJ1ZmZlcmVkIG1lbW9yeSBmb3IgYSBkZXZpY2UgZm9yCisgKiBwZXJmb3JtaW5nIERNQS4gIFRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIHBhZ2VzLCBhbmQgd2lsbAorICogcmV0dXJuIHRoZSBDUFUtdmlld2VkIGFkZHJlc3MsIGFuZCBzZXRzIEBoYW5kbGUgdG8gYmUgdGhlCisgKiBkZXZpY2Utdmlld2VkIGFkZHJlc3MuCisgKi8KK2V4dGVybiB2b2lkICoKK2RtYV9hbGxvY193cml0ZWNvbWJpbmUoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCAqaGFuZGxlLCBpbnQgZ2ZwKTsKKworI2RlZmluZSBkbWFfZnJlZV93cml0ZWNvbWJpbmUoZGV2LHNpemUsY3B1X2FkZHIsaGFuZGxlKSBcCisJZG1hX2ZyZWVfY29oZXJlbnQoZGV2LHNpemUsY3B1X2FkZHIsaGFuZGxlKQorCitpbnQgZG1hX21tYXBfd3JpdGVjb21iaW5lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQkgIHZvaWQgKmNwdV9hZGRyLCBkbWFfYWRkcl90IGhhbmRsZSwgc2l6ZV90IHNpemUpOworCisKKy8qKgorICogZG1hX21hcF9zaW5nbGUgLSBtYXAgYSBzaW5nbGUgYnVmZmVyIGZvciBzdHJlYW1pbmcgRE1BCisgKiBAZGV2OiB2YWxpZCBzdHJ1Y3QgZGV2aWNlIHBvaW50ZXIsIG9yIE5VTEwgZm9yIElTQSBhbmQgRUlTQS1saWtlIGRldmljZXMKKyAqIEBjcHVfYWRkcjogQ1BVIGRpcmVjdCBtYXBwZWQgYWRkcmVzcyBvZiBidWZmZXIKKyAqIEBzaXplOiBzaXplIG9mIGJ1ZmZlciB0byBtYXAKKyAqIEBkaXI6IERNQSB0cmFuc2ZlciBkaXJlY3Rpb24KKyAqCisgKiBFbnN1cmUgdGhhdCBhbnkgZGF0YSBoZWxkIGluIHRoZSBjYWNoZSBpcyBhcHByb3ByaWF0ZWx5IGRpc2NhcmRlZAorICogb3Igd3JpdHRlbiBiYWNrLgorICoKKyAqIFRoZSBkZXZpY2Ugb3ducyB0aGlzIG1lbW9yeSBvbmNlIHRoaXMgY2FsbCBoYXMgY29tcGxldGVkLiAgVGhlIENQVQorICogY2FuIHJlZ2FpbiBvd25lcnNoaXAgYnkgY2FsbGluZyBkbWFfdW5tYXBfc2luZ2xlKCkgb3IKKyAqIGRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KCkuCisgKi8KKyNpZm5kZWYgQ09ORklHX0RNQUJPVU5DRQorc3RhdGljIGlubGluZSBkbWFfYWRkcl90CitkbWFfbWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLCBzaXplX3Qgc2l6ZSwKKwkgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQoreworCWNvbnNpc3RlbnRfc3luYyhjcHVfYWRkciwgc2l6ZSwgZGlyKTsKKwlyZXR1cm4gdmlydF90b19kbWEoZGV2LCAodW5zaWduZWQgbG9uZyljcHVfYWRkcik7Cit9CisjZWxzZQorZXh0ZXJuIGRtYV9hZGRyX3QgZG1hX21hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqLHZvaWQgKiwgc2l6ZV90LCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbik7CisjZW5kaWYKKworLyoqCisgKiBkbWFfbWFwX3BhZ2UgLSBtYXAgYSBwb3J0aW9uIG9mIGEgcGFnZSBmb3Igc3RyZWFtaW5nIERNQQorICogQGRldjogdmFsaWQgc3RydWN0IGRldmljZSBwb2ludGVyLCBvciBOVUxMIGZvciBJU0EgYW5kIEVJU0EtbGlrZSBkZXZpY2VzCisgKiBAcGFnZTogcGFnZSB0aGF0IGJ1ZmZlciByZXNpZGVzIGluCisgKiBAb2Zmc2V0OiBvZmZzZXQgaW50byBwYWdlIGZvciBzdGFydCBvZiBidWZmZXIKKyAqIEBzaXplOiBzaXplIG9mIGJ1ZmZlciB0byBtYXAKKyAqIEBkaXI6IERNQSB0cmFuc2ZlciBkaXJlY3Rpb24KKyAqCisgKiBFbnN1cmUgdGhhdCBhbnkgZGF0YSBoZWxkIGluIHRoZSBjYWNoZSBpcyBhcHByb3ByaWF0ZWx5IGRpc2NhcmRlZAorICogb3Igd3JpdHRlbiBiYWNrLgorICoKKyAqIFRoZSBkZXZpY2Ugb3ducyB0aGlzIG1lbW9yeSBvbmNlIHRoaXMgY2FsbCBoYXMgY29tcGxldGVkLiAgVGhlIENQVQorICogY2FuIHJlZ2FpbiBvd25lcnNoaXAgYnkgY2FsbGluZyBkbWFfdW5tYXBfcGFnZSgpIG9yCisgKiBkbWFfc3luY19zaW5nbGVfZm9yX2NwdSgpLgorICovCitzdGF0aWMgaW5saW5lIGRtYV9hZGRyX3QKK2RtYV9tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwYWdlICpwYWdlLAorCSAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLAorCSAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQoreworCXJldHVybiBkbWFfbWFwX3NpbmdsZShkZXYsIHBhZ2VfYWRkcmVzcyhwYWdlKSArIG9mZnNldCwgc2l6ZSwgKGludClkaXIpOworfQorCisvKioKKyAqIGRtYV91bm1hcF9zaW5nbGUgLSB1bm1hcCBhIHNpbmdsZSBidWZmZXIgcHJldmlvdXNseSBtYXBwZWQKKyAqIEBkZXY6IHZhbGlkIHN0cnVjdCBkZXZpY2UgcG9pbnRlciwgb3IgTlVMTCBmb3IgSVNBIGFuZCBFSVNBLWxpa2UgZGV2aWNlcworICogQGhhbmRsZTogRE1BIGFkZHJlc3Mgb2YgYnVmZmVyCisgKiBAc2l6ZTogc2l6ZSBvZiBidWZmZXIgdG8gbWFwCisgKiBAZGlyOiBETUEgdHJhbnNmZXIgZGlyZWN0aW9uCisgKgorICogVW5tYXAgYSBzaW5nbGUgc3RyZWFtaW5nIG1vZGUgRE1BIHRyYW5zbGF0aW9uLiAgVGhlIGhhbmRsZSBhbmQgc2l6ZQorICogbXVzdCBtYXRjaCB3aGF0IHdhcyBwcm92aWRlZCBpbiB0aGUgcHJldmlvdXMgZG1hX21hcF9zaW5nbGUoKSBjYWxsLgorICogQWxsIG90aGVyIHVzYWdlcyBhcmUgdW5kZWZpbmVkLgorICoKKyAqIEFmdGVyIHRoaXMgY2FsbCwgcmVhZHMgYnkgdGhlIENQVSB0byB0aGUgYnVmZmVyIGFyZSBndWFyYW50ZWVkIHRvIHNlZQorICogd2hhdGV2ZXIgdGhlIGRldmljZSB3cm90ZSB0aGVyZS4KKyAqLworI2lmbmRlZiBDT05GSUdfRE1BQk9VTkNFCitzdGF0aWMgaW5saW5lIHZvaWQKK2RtYV91bm1hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGhhbmRsZSwgc2l6ZV90IHNpemUsCisJCSBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCit7CisJLyogbm90aGluZyB0byBkbyAqLworfQorI2Vsc2UKK2V4dGVybiB2b2lkIGRtYV91bm1hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqLCBkbWFfYWRkcl90LCBzaXplX3QsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uKTsKKyNlbmRpZgorCisvKioKKyAqIGRtYV91bm1hcF9wYWdlIC0gdW5tYXAgYSBidWZmZXIgcHJldmlvdXNseSBtYXBwZWQgdGhyb3VnaCBkbWFfbWFwX3BhZ2UoKQorICogQGRldjogdmFsaWQgc3RydWN0IGRldmljZSBwb2ludGVyLCBvciBOVUxMIGZvciBJU0EgYW5kIEVJU0EtbGlrZSBkZXZpY2VzCisgKiBAaGFuZGxlOiBETUEgYWRkcmVzcyBvZiBidWZmZXIKKyAqIEBzaXplOiBzaXplIG9mIGJ1ZmZlciB0byBtYXAKKyAqIEBkaXI6IERNQSB0cmFuc2ZlciBkaXJlY3Rpb24KKyAqCisgKiBVbm1hcCBhIHNpbmdsZSBzdHJlYW1pbmcgbW9kZSBETUEgdHJhbnNsYXRpb24uICBUaGUgaGFuZGxlIGFuZCBzaXplCisgKiBtdXN0IG1hdGNoIHdoYXQgd2FzIHByb3ZpZGVkIGluIHRoZSBwcmV2aW91cyBkbWFfbWFwX3NpbmdsZSgpIGNhbGwuCisgKiBBbGwgb3RoZXIgdXNhZ2VzIGFyZSB1bmRlZmluZWQuCisgKgorICogQWZ0ZXIgdGhpcyBjYWxsLCByZWFkcyBieSB0aGUgQ1BVIHRvIHRoZSBidWZmZXIgYXJlIGd1YXJhbnRlZWQgdG8gc2VlCisgKiB3aGF0ZXZlciB0aGUgZGV2aWNlIHdyb3RlIHRoZXJlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2RtYV91bm1hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBoYW5kbGUsIHNpemVfdCBzaXplLAorCSAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCit7CisJZG1hX3VubWFwX3NpbmdsZShkZXYsIGhhbmRsZSwgc2l6ZSwgKGludClkaXIpOworfQorCisvKioKKyAqIGRtYV9tYXBfc2cgLSBtYXAgYSBzZXQgb2YgU0cgYnVmZmVycyBmb3Igc3RyZWFtaW5nIG1vZGUgRE1BCisgKiBAZGV2OiB2YWxpZCBzdHJ1Y3QgZGV2aWNlIHBvaW50ZXIsIG9yIE5VTEwgZm9yIElTQSBhbmQgRUlTQS1saWtlIGRldmljZXMKKyAqIEBzZzogbGlzdCBvZiBidWZmZXJzCisgKiBAbmVudHM6IG51bWJlciBvZiBidWZmZXJzIHRvIG1hcAorICogQGRpcjogRE1BIHRyYW5zZmVyIGRpcmVjdGlvbgorICoKKyAqIE1hcCBhIHNldCBvZiBidWZmZXJzIGRlc2NyaWJlZCBieSBzY2F0dGVybGlzdCBpbiBzdHJlYW1pbmcKKyAqIG1vZGUgZm9yIERNQS4gIFRoaXMgaXMgdGhlIHNjYXR0ZXItZ2F0aGVyIHZlcnNpb24gb2YgdGhlCisgKiBhYm92ZSBkbWFfbWFwX3NpbmdsZSBpbnRlcmZhY2UuICBIZXJlIHRoZSBzY2F0dGVyIGdhdGhlciBsaXN0CisgKiBlbGVtZW50cyBhcmUgZWFjaCB0YWdnZWQgd2l0aCB0aGUgYXBwcm9wcmlhdGUgZG1hIGFkZHJlc3MKKyAqIGFuZCBsZW5ndGguICBUaGV5IGFyZSBvYnRhaW5lZCB2aWEgc2dfZG1hX3thZGRyZXNzLGxlbmd0aH0oU0cpLgorICoKKyAqIE5PVEU6IEFuIGltcGxlbWVudGF0aW9uIG1heSBiZSBhYmxlIHRvIHVzZSBhIHNtYWxsZXIgbnVtYmVyIG9mCisgKiAgICAgICBETUEgYWRkcmVzcy9sZW5ndGggcGFpcnMgdGhhbiB0aGVyZSBhcmUgU0cgdGFibGUgZWxlbWVudHMuCisgKiAgICAgICAoZm9yIGV4YW1wbGUgdmlhIHZpcnR1YWwgbWFwcGluZyBjYXBhYmlsaXRpZXMpCisgKiAgICAgICBUaGUgcm91dGluZSByZXR1cm5zIHRoZSBudW1iZXIgb2YgYWRkci9sZW5ndGggcGFpcnMgYWN0dWFsbHkKKyAqICAgICAgIHVzZWQsIGF0IG1vc3QgbmVudHMuCisgKgorICogRGV2aWNlIG93bmVyc2hpcCBpc3N1ZXMgYXMgbWVudGlvbmVkIGFib3ZlIGZvciBkbWFfbWFwX3NpbmdsZSBhcmUKKyAqIHRoZSBzYW1lIGhlcmUuCisgKi8KKyNpZm5kZWYgQ09ORklHX0RNQUJPVU5DRQorc3RhdGljIGlubGluZSBpbnQKK2RtYV9tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVudHMsCisJICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG5lbnRzOyBpKyssIHNnKyspIHsKKwkJY2hhciAqdmlydDsKKworCQlzZy0+ZG1hX2FkZHJlc3MgPSBwYWdlX3RvX2RtYShkZXYsIHNnLT5wYWdlKSArIHNnLT5vZmZzZXQ7CisJCXZpcnQgPSBwYWdlX2FkZHJlc3Moc2ctPnBhZ2UpICsgc2ctPm9mZnNldDsKKwkJY29uc2lzdGVudF9zeW5jKHZpcnQsIHNnLT5sZW5ndGgsIGRpcik7CisJfQorCisJcmV0dXJuIG5lbnRzOworfQorI2Vsc2UKK2V4dGVybiBpbnQgZG1hX21hcF9zZyhzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCBzY2F0dGVybGlzdCAqLCBpbnQsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uKTsKKyNlbmRpZgorCisvKioKKyAqIGRtYV91bm1hcF9zZyAtIHVubWFwIGEgc2V0IG9mIFNHIGJ1ZmZlcnMgbWFwcGVkIGJ5IGRtYV9tYXBfc2cKKyAqIEBkZXY6IHZhbGlkIHN0cnVjdCBkZXZpY2UgcG9pbnRlciwgb3IgTlVMTCBmb3IgSVNBIGFuZCBFSVNBLWxpa2UgZGV2aWNlcworICogQHNnOiBsaXN0IG9mIGJ1ZmZlcnMKKyAqIEBuZW50czogbnVtYmVyIG9mIGJ1ZmZlcnMgdG8gbWFwCisgKiBAZGlyOiBETUEgdHJhbnNmZXIgZGlyZWN0aW9uCisgKgorICogVW5tYXAgYSBzZXQgb2Ygc3RyZWFtaW5nIG1vZGUgRE1BIHRyYW5zbGF0aW9ucy4KKyAqIEFnYWluLCBDUFUgcmVhZCBydWxlcyBjb25jZXJuaW5nIGNhbGxzIGhlcmUgYXJlIHRoZSBzYW1lIGFzIGZvcgorICogZG1hX3VubWFwX3NpbmdsZSgpIGFib3ZlLgorICovCisjaWZuZGVmIENPTkZJR19ETUFCT1VOQ0UKK3N0YXRpYyBpbmxpbmUgdm9pZAorZG1hX3VubWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbnRzLAorCSAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQoreworCisJLyogbm90aGluZyB0byBkbyAqLworfQorI2Vsc2UKK2V4dGVybiB2b2lkIGRtYV91bm1hcF9zZyhzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCBzY2F0dGVybGlzdCAqLCBpbnQsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uKTsKKyNlbmRpZgorCisKKy8qKgorICogZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUKKyAqIEBkZXY6IHZhbGlkIHN0cnVjdCBkZXZpY2UgcG9pbnRlciwgb3IgTlVMTCBmb3IgSVNBIGFuZCBFSVNBLWxpa2UgZGV2aWNlcworICogQGhhbmRsZTogRE1BIGFkZHJlc3Mgb2YgYnVmZmVyCisgKiBAc2l6ZTogc2l6ZSBvZiBidWZmZXIgdG8gbWFwCisgKiBAZGlyOiBETUEgdHJhbnNmZXIgZGlyZWN0aW9uCisgKgorICogTWFrZSBwaHlzaWNhbCBtZW1vcnkgY29uc2lzdGVudCBmb3IgYSBzaW5nbGUgc3RyZWFtaW5nIG1vZGUgRE1BCisgKiB0cmFuc2xhdGlvbiBhZnRlciBhIHRyYW5zZmVyLgorICoKKyAqIElmIHlvdSBwZXJmb3JtIGEgZG1hX21hcF9zaW5nbGUoKSBidXQgd2lzaCB0byBpbnRlcnJvZ2F0ZSB0aGUKKyAqIGJ1ZmZlciB1c2luZyB0aGUgY3B1LCB5ZXQgZG8gbm90IHdpc2ggdG8gdGVhcmRvd24gdGhlIFBDSSBkbWEKKyAqIG1hcHBpbmcsIHlvdSBtdXN0IGNhbGwgdGhpcyBmdW5jdGlvbiBiZWZvcmUgZG9pbmcgc28uICBBdCB0aGUKKyAqIG5leHQgcG9pbnQgeW91IGdpdmUgdGhlIFBDSSBkbWEgYWRkcmVzcyBiYWNrIHRvIHRoZSBjYXJkLCB5b3UKKyAqIG11c3QgZmlyc3QgdGhlIHBlcmZvcm0gYSBkbWFfc3luY19mb3JfZGV2aWNlLCBhbmQgdGhlbiB0aGUKKyAqIGRldmljZSBhZ2FpbiBvd25zIHRoZSBidWZmZXIuCisgKi8KKyNpZm5kZWYgQ09ORklHX0RNQUJPVU5DRQorc3RhdGljIGlubGluZSB2b2lkCitkbWFfc3luY19zaW5nbGVfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgaGFuZGxlLCBzaXplX3Qgc2l6ZSwKKwkJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3sKKwljb25zaXN0ZW50X3N5bmMoKHZvaWQgKilkbWFfdG9fdmlydChkZXYsIGhhbmRsZSksIHNpemUsIGRpcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGhhbmRsZSwgc2l6ZV90IHNpemUsCisJCQkgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCit7CisJY29uc2lzdGVudF9zeW5jKCh2b2lkICopZG1hX3RvX3ZpcnQoZGV2LCBoYW5kbGUpLCBzaXplLCBkaXIpOworfQorI2Vsc2UKK2V4dGVybiB2b2lkIGRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UqLCBkbWFfYWRkcl90LCBzaXplX3QsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uKTsKK2V4dGVybiB2b2lkIGRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UqLCBkbWFfYWRkcl90LCBzaXplX3QsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uKTsKKyNlbmRpZgorCisKKy8qKgorICogZG1hX3N5bmNfc2dfZm9yX2NwdQorICogQGRldjogdmFsaWQgc3RydWN0IGRldmljZSBwb2ludGVyLCBvciBOVUxMIGZvciBJU0EgYW5kIEVJU0EtbGlrZSBkZXZpY2VzCisgKiBAc2c6IGxpc3Qgb2YgYnVmZmVycworICogQG5lbnRzOiBudW1iZXIgb2YgYnVmZmVycyB0byBtYXAKKyAqIEBkaXI6IERNQSB0cmFuc2ZlciBkaXJlY3Rpb24KKyAqCisgKiBNYWtlIHBoeXNpY2FsIG1lbW9yeSBjb25zaXN0ZW50IGZvciBhIHNldCBvZiBzdHJlYW1pbmcKKyAqIG1vZGUgRE1BIHRyYW5zbGF0aW9ucyBhZnRlciBhIHRyYW5zZmVyLgorICoKKyAqIFRoZSBzYW1lIGFzIGRtYV9zeW5jX3NpbmdsZV9mb3JfKiBidXQgZm9yIGEgc2NhdHRlci1nYXRoZXIgbGlzdCwKKyAqIHNhbWUgcnVsZXMgYW5kIHVzYWdlLgorICovCisjaWZuZGVmIENPTkZJR19ETUFCT1VOQ0UKK3N0YXRpYyBpbmxpbmUgdm9pZAorZG1hX3N5bmNfc2dfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZW50cywKKwkJICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBuZW50czsgaSsrLCBzZysrKSB7CisJCWNoYXIgKnZpcnQgPSBwYWdlX2FkZHJlc3Moc2ctPnBhZ2UpICsgc2ctPm9mZnNldDsKKwkJY29uc2lzdGVudF9zeW5jKHZpcnQsIHNnLT5sZW5ndGgsIGRpcik7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2RtYV9zeW5jX3NnX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVudHMsCisJCSAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbmVudHM7IGkrKywgc2crKykgeworCQljaGFyICp2aXJ0ID0gcGFnZV9hZGRyZXNzKHNnLT5wYWdlKSArIHNnLT5vZmZzZXQ7CisJCWNvbnNpc3RlbnRfc3luYyh2aXJ0LCBzZy0+bGVuZ3RoLCBkaXIpOworCX0KK30KKyNlbHNlCitleHRlcm4gdm9pZCBkbWFfc3luY19zZ19mb3JfY3B1KHN0cnVjdCBkZXZpY2UqLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QqLCBpbnQsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uKTsKK2V4dGVybiB2b2lkIGRtYV9zeW5jX3NnX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSosIHN0cnVjdCBzY2F0dGVybGlzdCosIGludCwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24pOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfRE1BQk9VTkNFCisvKgorICogRm9yIFNBLTExMTEsIElYUDQyNSwgYW5kIEFESSBzeXN0ZW1zICB0aGUgZG1hLW1hcHBpbmcgZnVuY3Rpb25zIGFyZSAibWFnaWMiCisgKiBhbmQgdXRpbGl6ZSBib3VuY2UgYnVmZmVycyBhcyBuZWVkZWQgdG8gd29yayBhcm91bmQgbGltaXRlZCBETUEgd2luZG93cy4KKyAqCisgKiBPbiB0aGUgU0EtMTExMSwgYSBidWcgbGltaXRzIERNQSB0byBvbmx5IGNlcnRhaW4gcmVnaW9ucyBvZiBSQU0uCisgKiBPbiB0aGUgSVhQNDI1LCB0aGUgUENJIGluYm91bmQgd2luZG93IGlzIDY0TUIgKDI1Nk1CIHRvdGFsIFJBTSkKKyAqIE9uIHNvbWUgQURJIGVuZ2luZWVyaW5nIHN5dGVtcywgUENJIGluYm91bmQgd2luZG93IGlzIDMyTUIgKDEyTUIgdG90YWwgUkFNKQorICoKKyAqIFRoZSBmb2xsb3dpbmcgYXJlIGhlbHBlciBmdW5jdGlvbnMgdXNlZCBieSB0aGUgZG1hYm91bmNlIHN1YnlzdGVtCisgKgorICovCisKKy8qKgorICogZG1hYm91bmNlX3JlZ2lzdGVyX2RldgorICoKKyAqIEBkZXY6IHZhbGlkIHN0cnVjdCBkZXZpY2UgcG9pbnRlcgorICogQHNtYWxsX2J1Zl9zaXplOiBzaXplIG9mIGJ1ZmZlcnMgdG8gdXNlIHdpdGggc21hbGwgYnVmZmVyIHBvb2wKKyAqIEBsYXJnZV9idWZfc2l6ZTogc2l6ZSBvZiBidWZmZXJzIHRvIHVzZSB3aXRoIGxhcmdlIGJ1ZmZlciBwb29sIChjYW4gYmUgMCkKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgYnkgbG93LWxldmVsIHBsYXRmb3JtIGNvZGUgdG8gcmVnaXN0ZXIKKyAqIGEgZGV2aWNlIGFzIHJlcXVpcmVpbmcgRE1BIGJ1ZmZlciBib3VuY2luZy4gVGhlIGZ1bmN0aW9uIHdpbGwgYWxsb2NhdGUKKyAqIGFwcHJvcHJpYXRlIERNQSBwb29scyBmb3IgdGhlIGRldmljZS4KKyAqCisgKi8KK2V4dGVybiBpbnQgZG1hYm91bmNlX3JlZ2lzdGVyX2RldihzdHJ1Y3QgZGV2aWNlICosIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOworCisvKioKKyAqIGRtYWJvdW5jZV91bnJlZ2lzdGVyX2RldgorICoKKyAqIEBkZXY6IHZhbGlkIHN0cnVjdCBkZXZpY2UgcG9pbnRlcgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBieSBsb3ctbGV2ZWwgcGxhdGZvcm0gY29kZSB3aGVuIGRldmljZQorICogdGhhdCB3YXMgcHJldmlvdXNseSByZWdpc3RlcmVkIHdpdGggZG1hYm91bmNlX3JlZ2lzdGVyX2RldiBpcyByZW1vdmVkCisgKiBmcm9tIHRoZSBzeXN0ZW0uCisgKgorICovCitleHRlcm4gdm9pZCBkbWFib3VuY2VfdW5yZWdpc3Rlcl9kZXYoc3RydWN0IGRldmljZSAqKTsKKworLyoqCisgKiBkbWFfbmVlZHNfYm91bmNlCisgKgorICogQGRldjogdmFsaWQgc3RydWN0IGRldmljZSBwb2ludGVyCisgKiBAZG1hX2hhbmRsZTogZG1hX2hhbmRsZSBvZiB1bmJvdW5jZWQgYnVmZmVyCisgKiBAc2l6ZTogc2l6ZSBvZiByZWdpb24gYmVpbmcgbWFwcGVkCisgKgorICogUGxhdGZvcm1zIHRoYXQgdXRpbGl6ZSB0aGUgZG1hYm91bmNlIG1lY2hhbmlzbSBtdXN0IGltcGxlbWVudAorICogdGhpcyBmdW5jdGlvbi4KKyAqCisgKiBUaGUgZG1hYm91bmNlIHJvdXRpbmVzIGNhbGwgdGhpcyBmdW5jdGlvbiB3aGVuZXZlciBhIGRtYS1tYXBwaW5nCisgKiBpcyByZXF1ZXN0ZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBnaXZlbiBidWZmZXIgbmVlZHMgdG8gYmUgYm91bmNlZAorICogb3Igbm90LiBUaGUgZnVuY3Rpb24gbXVzdCByZXR1cm4gMCBpZiB0aGUgdGhlIGJ1ZmZlciBpcyBPSyBmb3IKKyAqIERNQSBhY2Nlc3MgYW5kIDEgaWYgdGhlIGJ1ZmZlciBuZWVkcyB0byBiZSBib3VuY2VkLgorICoKKyAqLworZXh0ZXJuIGludCBkbWFfbmVlZHNfYm91bmNlKHN0cnVjdCBkZXZpY2UqLCBkbWFfYWRkcl90LCBzaXplX3QpOworI2VuZGlmIC8qIENPTkZJR19ETUFCT1VOQ0UgKi8KKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2RtYS5oIGIvaW5jbHVkZS9hc20tYXJtL2RtYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmNDFkZjQzYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9kbWEuaApAQCAtMCwwICsxLDEzNSBAQAorI2lmbmRlZiBfX0FTTV9BUk1fRE1BX0gKKyNkZWZpbmUgX19BU01fQVJNX0RNQV9ICisKK3R5cGVkZWYgdW5zaWduZWQgaW50IGRtYWNoX3Q7CisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9kbWEuaD4KKworLyoKKyAqIERNQSBtb2RlcworICovCit0eXBlZGVmIHVuc2lnbmVkIGludCBkbWFtb2RlX3Q7CisKKyNkZWZpbmUgRE1BX01PREVfTUFTSwkzCisKKyNkZWZpbmUgRE1BX01PREVfUkVBRAkgMAorI2RlZmluZSBETUFfTU9ERV9XUklURQkgMQorI2RlZmluZSBETUFfTU9ERV9DQVNDQURFIDIKKyNkZWZpbmUgRE1BX0FVVE9JTklUCSA0CisKK2V4dGVybiBzcGlubG9ja190ICBkbWFfc3Bpbl9sb2NrOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY2xhaW1fZG1hX2xvY2sodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXNwaW5fbG9ja19pcnFzYXZlKCZkbWFfc3Bpbl9sb2NrLCBmbGFncyk7CisJcmV0dXJuIGZsYWdzOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmVsZWFzZV9kbWFfbG9jayh1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRtYV9zcGluX2xvY2ssIGZsYWdzKTsKK30KKworLyogQ2xlYXIgdGhlICdETUEgUG9pbnRlciBGbGlwIEZsb3AnLgorICogV3JpdGUgMCBmb3IgTFNCL01TQiwgMSBmb3IgTVNCL0xTQiBhY2Nlc3MuCisgKi8KKyNkZWZpbmUgY2xlYXJfZG1hX2ZmKGNoYW5uZWwpCisKKy8qIFNldCBvbmx5IHRoZSBwYWdlIHJlZ2lzdGVyIGJpdHMgb2YgdGhlIHRyYW5zZmVyIGFkZHJlc3MuCisgKgorICogTk9URTogVGhpcyBpcyBhbiBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgZnVuY3Rpb24sIGFuZCBzaG91bGQKKyAqICAgICAgIGJlIGhpZGRlbiBmcm9tIHRoZSBkcml2ZXJzCisgKi8KK2V4dGVybiB2b2lkIHNldF9kbWFfcGFnZShkbWFjaF90IGNoYW5uZWwsIGNoYXIgcGFnZW5yKTsKKworLyogUmVxdWVzdCBhIERNQSBjaGFubmVsCisgKgorICogU29tZSBhcmNoaXRlY3R1cmVzIG1heSBuZWVkIHRvIGRvIGFsbG9jYXRlIGFuIGludGVycnVwdAorICovCitleHRlcm4gaW50ICByZXF1ZXN0X2RtYShkbWFjaF90IGNoYW5uZWwsIGNvbnN0IGNoYXIgKiBkZXZpY2VfaWQpOworCisvKiBGcmVlIGEgRE1BIGNoYW5uZWwKKyAqCisgKiBTb21lIGFyY2hpdGVjdHVyZXMgbWF5IG5lZWQgdG8gZG8gZnJlZSBhbiBpbnRlcnJ1cHQKKyAqLworZXh0ZXJuIHZvaWQgZnJlZV9kbWEoZG1hY2hfdCBjaGFubmVsKTsKKworLyogRW5hYmxlIERNQSBmb3IgdGhpcyBjaGFubmVsCisgKgorICogT24gc29tZSBhcmNoaXRlY3R1cmVzLCB0aGlzIG1heSBoYXZlIG90aGVyIHNpZGUgZWZmZWN0cyBsaWtlCisgKiBlbmFibGluZyBhbiBpbnRlcnJ1cHQgYW5kIHNldHRpbmcgdGhlIERNQSByZWdpc3RlcnMuCisgKi8KK2V4dGVybiB2b2lkIGVuYWJsZV9kbWEoZG1hY2hfdCBjaGFubmVsKTsKKworLyogRGlzYWJsZSBETUEgZm9yIHRoaXMgY2hhbm5lbAorICoKKyAqIE9uIHNvbWUgYXJjaGl0ZWN0dXJlcywgdGhpcyBtYXkgaGF2ZSBvdGhlciBzaWRlIGVmZmVjdHMgbGlrZQorICogZGlzYWJsaW5nIGFuIGludGVycnVwdCBvciB3aGF0ZXZlci4KKyAqLworZXh0ZXJuIHZvaWQgZGlzYWJsZV9kbWEoZG1hY2hfdCBjaGFubmVsKTsKKworLyogVGVzdCB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgY2hhbm5lbCBoYXMgYW4gYWN0aXZlIERNQSB0cmFuc2ZlcgorICovCitleHRlcm4gaW50IGRtYV9jaGFubmVsX2FjdGl2ZShkbWFjaF90IGNoYW5uZWwpOworCisvKiBTZXQgdGhlIERNQSBzY2F0dGVyIGdhdGhlciBsaXN0IGZvciB0aGlzIGNoYW5uZWwKKyAqCisgKiBUaGlzIHNob3VsZCBub3QgYmUgY2FsbGVkIGlmIGEgRE1BIGNoYW5uZWwgaXMgZW5hYmxlZCwKKyAqIGVzcGVjaWFsbHkgc2luY2Ugc29tZSBETUEgYXJjaGl0ZWN0dXJlcyBkb24ndCB1cGRhdGUgdGhlCisgKiBETUEgYWRkcmVzcyBpbW1lZGlhdGVseSwgYnV0IGRlZmVyIGl0IHRvIHRoZSBlbmFibGVfZG1hKCkuCisgKi8KK2V4dGVybiB2b2lkIHNldF9kbWFfc2coZG1hY2hfdCBjaGFubmVsLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbnJfc2cpOworCisvKiBTZXQgdGhlIERNQSBhZGRyZXNzIGZvciB0aGlzIGNoYW5uZWwKKyAqCisgKiBUaGlzIHNob3VsZCBub3QgYmUgY2FsbGVkIGlmIGEgRE1BIGNoYW5uZWwgaXMgZW5hYmxlZCwKKyAqIGVzcGVjaWFsbHkgc2luY2Ugc29tZSBETUEgYXJjaGl0ZWN0dXJlcyBkb24ndCB1cGRhdGUgdGhlCisgKiBETUEgYWRkcmVzcyBpbW1lZGlhdGVseSwgYnV0IGRlZmVyIGl0IHRvIHRoZSBlbmFibGVfZG1hKCkuCisgKi8KK2V4dGVybiB2b2lkIHNldF9kbWFfYWRkcihkbWFjaF90IGNoYW5uZWwsIHVuc2lnbmVkIGxvbmcgcGh5c2FkZHIpOworCisvKiBTZXQgdGhlIERNQSBieXRlIGNvdW50IGZvciB0aGlzIGNoYW5uZWwKKyAqCisgKiBUaGlzIHNob3VsZCBub3QgYmUgY2FsbGVkIGlmIGEgRE1BIGNoYW5uZWwgaXMgZW5hYmxlZCwKKyAqIGVzcGVjaWFsbHkgc2luY2Ugc29tZSBETUEgYXJjaGl0ZWN0dXJlcyBkb24ndCB1cGRhdGUgdGhlCisgKiBETUEgY291bnQgaW1tZWRpYXRlbHksIGJ1dCBkZWZlciBpdCB0byB0aGUgZW5hYmxlX2RtYSgpLgorICovCitleHRlcm4gdm9pZCBzZXRfZG1hX2NvdW50KGRtYWNoX3QgY2hhbm5lbCwgdW5zaWduZWQgbG9uZyBjb3VudCk7CisKKy8qIFNldCB0aGUgdHJhbnNmZXIgZGlyZWN0aW9uIGZvciB0aGlzIGNoYW5uZWwKKyAqCisgKiBUaGlzIHNob3VsZCBub3QgYmUgY2FsbGVkIGlmIGEgRE1BIGNoYW5uZWwgaXMgZW5hYmxlZCwKKyAqIGVzcGVjaWFsbHkgc2luY2Ugc29tZSBETUEgYXJjaGl0ZWN0dXJlcyBkb24ndCB1cGRhdGUgdGhlCisgKiBETUEgdHJhbnNmZXIgZGlyZWN0aW9uIGltbWVkaWF0ZWx5LCBidXQgZGVmZXIgaXQgdG8gdGhlCisgKiBlbmFibGVfZG1hKCkuCisgKi8KK2V4dGVybiB2b2lkIHNldF9kbWFfbW9kZShkbWFjaF90IGNoYW5uZWwsIGRtYW1vZGVfdCBtb2RlKTsKKworLyogU2V0IHRoZSB0cmFuc2ZlciBzcGVlZCBmb3IgdGhpcyBjaGFubmVsCisgKi8KK2V4dGVybiB2b2lkIHNldF9kbWFfc3BlZWQoZG1hY2hfdCBjaGFubmVsLCBpbnQgY3ljbGVfbnMpOworCisvKiBHZXQgRE1BIHJlc2lkdWUgY291bnQuIEFmdGVyIGEgRE1BIHRyYW5zZmVyLCB0aGlzCisgKiBzaG91bGQgcmV0dXJuIHplcm8uIFJlYWRpbmcgdGhpcyB3aGlsZSBhIERNQSB0cmFuc2ZlciBpcworICogc3RpbGwgaW4gcHJvZ3Jlc3Mgd2lsbCByZXR1cm4gdW5wcmVkaWN0YWJsZSByZXN1bHRzLgorICogSWYgY2FsbGVkIGJlZm9yZSB0aGUgY2hhbm5lbCBoYXMgYmVlbiB1c2VkLCBpdCBtYXkgcmV0dXJuIDEuCisgKiBPdGhlcndpc2UsIGl0IHJldHVybnMgdGhlIG51bWJlciBvZiBfYnl0ZXNfIGxlZnQgdG8gdHJhbnNmZXIuCisgKi8KK2V4dGVybiBpbnQgIGdldF9kbWFfcmVzaWR1ZShkbWFjaF90IGNoYW5uZWwpOworCisjaWZuZGVmIE5PX0RNQQorI2RlZmluZSBOT19ETUEJMjU1CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19QQ0kKK2V4dGVybiBpbnQgaXNhX2RtYV9icmlkZ2VfYnVnZ3k7CisjZWxzZQorI2RlZmluZSBpc2FfZG1hX2JyaWRnZV9idWdneSAgICAoMCkKKyNlbmRpZgorCisjZW5kaWYgLyogX0FSTV9ETUFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2RvbWFpbi5oIGIvaW5jbHVkZS9hc20tYXJtL2RvbWFpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhMWQ5NjAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vZG9tYWluLmgKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vZG9tYWluLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5IFJ1c3NlbGwgS2luZy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaWZuZGVmIF9fQVNNX1BST0NfRE9NQUlOX0gKKyNkZWZpbmUgX19BU01fUFJPQ19ET01BSU5fSAorCisvKgorICogRG9tYWluIG51bWJlcnMKKyAqCisgKiAgRE9NQUlOX0lPICAgICAtIGRvbWFpbiAyIGluY2x1ZGVzIGFsbCBJTyBvbmx5CisgKiAgRE9NQUlOX1VTRVIgICAtIGRvbWFpbiAxIGluY2x1ZGVzIGFsbCB1c2VyIG1lbW9yeSBvbmx5CisgKiAgRE9NQUlOX0tFUk5FTCAtIGRvbWFpbiAwIGluY2x1ZGVzIGFsbCBrZXJuZWwgbWVtb3J5IG9ubHkKKyAqLworI2RlZmluZSBET01BSU5fS0VSTkVMCTAKKyNkZWZpbmUgRE9NQUlOX1RBQkxFCTAKKyNkZWZpbmUgRE9NQUlOX1VTRVIJMQorI2RlZmluZSBET01BSU5fSU8JMgorCisvKgorICogRG9tYWluIHR5cGVzCisgKi8KKyNkZWZpbmUgRE9NQUlOX05PQUNDRVNTCTAKKyNkZWZpbmUgRE9NQUlOX0NMSUVOVAkxCisjZGVmaW5lIERPTUFJTl9NQU5BR0VSCTMKKworI2RlZmluZSBkb21haW5fdmFsKGRvbSx0eXBlKQkoKHR5cGUpIDw8ICgyKihkb20pKSkKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNkZWZpbmUgc2V0X2RvbWFpbih4KQkJCQkJXAorCWRvIHsJCQkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCVwKKwkibWNyCXAxNSwgMCwgJTAsIGMzLCBjMAlAIHNldCBkb21haW4iCVwKKwkgIDogOiAiciIgKHgpKTsJCQkJCVwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIG1vZGlmeV9kb21haW4oZG9tLHR5cGUpCQkJCQlcCisJZG8gewkJCQkJCQlcCisJc3RydWN0IHRocmVhZF9pbmZvICp0aHJlYWQgPSBjdXJyZW50X3RocmVhZF9pbmZvKCk7CVwKKwl1bnNpZ25lZCBpbnQgZG9tYWluID0gdGhyZWFkLT5jcHVfZG9tYWluOwkJXAorCWRvbWFpbiAmPSB+ZG9tYWluX3ZhbChkb20sIERPTUFJTl9NQU5BR0VSKTsJCVwKKwl0aHJlYWQtPmNwdV9kb21haW4gPSBkb21haW4gfCBkb21haW5fdmFsKGRvbSwgdHlwZSk7CVwKKwlzZXRfZG9tYWluKHRocmVhZC0+Y3B1X2RvbWFpbik7CQkJCVwKKwl9IHdoaWxlICgwKQorCisjZW5kaWYKKyNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vZWNhcmQuaCBiL2luY2x1ZGUvYXNtLWFybS9lY2FyZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwYWUyYjkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vZWNhcmQuaApAQCAtMCwwICsxLDI5OCBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9lY2FyZC5oCisgKgorICogZGVmaW5pdGlvbnMgZm9yIGV4cGFuc2lvbiBjYXJkcworICoKKyAqIFRoaXMgaXMgYSBuZXcgc3lzdGVtIGFzIGZyb20gTGludXggMS4yLjMKKyAqCisgKiBDaGFuZ2Vsb2c6CisgKiAgMTEtMTItMTk5NglSTUsJRnVydGhlciBtaW5vciBpbXByb3ZlbWVudHMKKyAqICAxMi0wOS0xOTk3CVJNSwlBZGRlZCBpbnRlcnJ1cHQgZW5hYmxlL2Rpc2FibGUgZm9yIGNhcmQgbGV2ZWwKKyAqCisgKiBSZWZlcmVuY2U6IEFjb3JucyBSaXNjIE9TIDMgUHJvZ3JhbW1lcnMgUmVmZXJlbmNlIE1hbnVhbHMuCisgKi8KKworI2lmbmRlZiBfX0FTTV9FQ0FSRF9ICisjZGVmaW5lIF9fQVNNX0VDQVJEX0gKKworLyoKKyAqIEN1cnJlbnRseSB1bmRlcnN0b29kIGNhcmRzIChidXQgbm90IG5lY2Vzc2FyaWx5CisgKiBzdXBwb3J0ZWQpOgorICogICAgICAgICAgICAgICAgICAgICAgICBNYW51ZmFjdHVyZXIgIFByb2R1Y3QgSUQKKyAqLworI2RlZmluZSBNQU5VX0FDT1JOCQkweDAwMDAKKyNkZWZpbmUgUFJPRF9BQ09STl9TQ1NJCQkJMHgwMDAyCisjZGVmaW5lIFBST0RfQUNPUk5fRVRIRVIxCQkweDAwMDMKKyNkZWZpbmUgUFJPRF9BQ09STl9NRk0JCQkweDAwMGIKKworI2RlZmluZSBNQU5VX0FOVDIJCTB4MDAxMQorI2RlZmluZSBQUk9EX0FOVF9FVEhFUjMJCQkweDAwYTQKKworI2RlZmluZSBNQU5VX0FUT01XSURFCQkweDAwMTcKKyNkZWZpbmUgUFJPRF9BVE9NV0lERV8zUFNFUklBTAkJMHgwMDkwCisKKyNkZWZpbmUgTUFOVV9JUkxBTV9JTlNUUlVNRU5UUwkweDAwMWYKKyNkZWZpbmUgTUFOVV9JUkxBTV9JTlNUUlVNRU5UU19FVEhFUk4JMHg1Njc4CisKKyNkZWZpbmUgTUFOVV9PQUsJCTB4MDAyMQorI2RlZmluZSBQUk9EX09BS19TQ1NJCQkJMHgwMDU4CisKKyNkZWZpbmUgTUFOVV9NT1JMRVkJCTB4MDAyYgorI2RlZmluZSBQUk9EX01PUkxFWV9TQ1NJX1VOQ0FDSEVECTB4MDA2NworCisjZGVmaW5lIE1BTlVfQ1VNQU5BCQkweDAwM2EKKyNkZWZpbmUgUFJPRF9DVU1BTkFfU0NTSV8yCQkweDAwM2EKKyNkZWZpbmUgUFJPRF9DVU1BTkFfU0NTSV8xCQkweDAwYTAKKworI2RlZmluZSBNQU5VX0lDUwkJMHgwMDNjCisjZGVmaW5lIFBST0RfSUNTX0lERQkJCTB4MDBhZQorCisjZGVmaW5lIE1BTlVfSUNTMgkJMHgwMDNkCisjZGVmaW5lIFBST0RfSUNTMl9JREUJCQkweDAwYWUKKworI2RlZmluZSBNQU5VX1NFUlBPUlQJCTB4MDAzZgorI2RlZmluZSBQUk9EX1NFUlBPUlRfRFNQT1JUCQkweDAwYjkKKworI2RlZmluZSBNQU5VX0FSWEUJCTB4MDA0MQorI2RlZmluZSBQUk9EX0FSWEVfU0NTSQkJCTB4MDBiZQorCisjZGVmaW5lIE1BTlVfSTMJCQkweDAwNDYKKyNkZWZpbmUgUFJPRF9JM19FVEhFUkxBTjUwMAkJMHgwMGQ0CisjZGVmaW5lIFBST0RfSTNfRVRIRVJMQU42MDAJCTB4MDBlYworI2RlZmluZSBQUk9EX0kzX0VUSEVSTEFONjAwQQkJMHgwMTFlCisKKyNkZWZpbmUgTUFOVV9BTlQJCTB4MDA1MworI2RlZmluZSBQUk9EX0FOVF9FVEhFUk0JCQkweDAwZDgKKyNkZWZpbmUgUFJPRF9BTlRfRVRIRVJCCQkJMHgwMGU0CisKKyNkZWZpbmUgTUFOVV9BTFNZU1RFTVMJCTB4MDA1YgorI2RlZmluZSBQUk9EX0FMU1lTX1NDU0lBVEFQSQkJMHgwMTA3CisKKyNkZWZpbmUgTUFOVV9NQ1MJCTB4MDA2MworI2RlZmluZSBQUk9EX01DU19DT05ORUNUMzIJCTB4MDEyNQorCisjZGVmaW5lIE1BTlVfRUVTT1gJCTB4MDA2NAorI2RlZmluZSBQUk9EX0VFU09YX1NDU0kyCQkweDAwOGMKKworI2RlZmluZSBNQU5VX1lFTExPV1NUT05FCTB4MDA5NgorI2RlZmluZSBQUk9EX1lFTExPV1NUT05FX1JBUElERTMyCTB4MDEyMAorCisjaWZkZWYgRUNBUkRfQworI2RlZmluZSBDT05TVAorI2Vsc2UKKyNkZWZpbmUgQ09OU1QgY29uc3QKKyNlbmRpZgorCisjZGVmaW5lIE1BWF9FQ0FSRFMJOQorCit0eXBlZGVmIGVudW0gewkJCQkvKiBDYXJkcyBhZGRyZXNzIHNwYWNlCQkqLworCUVDQVJEX0lPQywKKwlFQ0FSRF9NRU1DLAorCUVDQVJEX0VBU0kKK30gY2FyZF90eXBlX3Q7CisKK3R5cGVkZWYgZW51bSB7CQkJCS8qIFNwZWVkIGZvciBFQ0FSRF9JT0Mgc3BhY2UJKi8KKwlFQ0FSRF9TTE9XCSA9IDAsCisJRUNBUkRfTUVESVVNCSA9IDEsCisJRUNBUkRfRkFTVAkgPSAyLAorCUVDQVJEX1NZTkMJID0gMworfSBjYXJkX3NwZWVkX3Q7CisKK3N0cnVjdCBlY2FyZF9pZCB7CQkJLyogQ2FyZCBJRCBzdHJ1Y3R1cmUJCSovCisJdW5zaWduZWQgc2hvcnQJbWFudWZhY3R1cmVyOworCXVuc2lnbmVkIHNob3J0CXByb2R1Y3Q7CisJdm9pZAkJKmRhdGE7Cit9OworCitzdHJ1Y3QgaW5fZWNpZCB7CQkJLyogUGFja2VkIGNhcmQgSUQgaW5mb3JtYXRpb24JKi8KKwl1bnNpZ25lZCBzaG9ydAlwcm9kdWN0OwkvKiBQcm9kdWN0IGNvZGUJCQkqLworCXVuc2lnbmVkIHNob3J0CW1hbnVmYWN0dXJlcjsJLyogTWFudWZhY3R1cmVyIGNvZGUJCSovCisJdW5zaWduZWQgY2hhcglpZDo0OwkJLyogU2ltcGxlIElECQkJKi8KKwl1bnNpZ25lZCBjaGFyCWNkOjE7CQkvKiBDaHVuayBkaXIgcHJlc2VudAkJKi8KKwl1bnNpZ25lZCBjaGFyCWlzOjE7CQkvKiBJbnRlcnJ1cHQgc3RhdHVzIHBvaW50ZXJzCSovCisJdW5zaWduZWQgY2hhcgl3OjI7CQkvKiBXaWR0aAkJCSovCisJdW5zaWduZWQgY2hhcgljb3VudHJ5OwkvKiBDb3VudHJ5CQkJKi8KKwl1bnNpZ25lZCBjaGFyCWlycW1hc2s7CS8qIElSUSBtYXNrCQkJKi8KKwl1bnNpZ25lZCBjaGFyCWZpcW1hc2s7CS8qIEZJUSBtYXNrCQkJKi8KKwl1bnNpZ25lZCBsb25nCWlycW9mZjsJCS8qIElSUSBvZmZzZXQJCQkqLworCXVuc2lnbmVkIGxvbmcJZmlxb2ZmOwkJLyogRklRIG9mZnNldAkJCSovCit9OworCit0eXBlZGVmIHN0cnVjdCBleHBhbnNpb25fY2FyZCBlY2FyZF90OwordHlwZWRlZiB1bnNpZ25lZCBsb25nICpsb2FkZXJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgewkJCS8qIENhcmQgaGFuZGxlciByb3V0aW5lcwkqLworCXZvaWQgKCppcnFlbmFibGUpKGVjYXJkX3QgKmVjLCBpbnQgaXJxbnIpOworCXZvaWQgKCppcnFkaXNhYmxlKShlY2FyZF90ICplYywgaW50IGlycW5yKTsKKwlpbnQgICgqaXJxcGVuZGluZykoZWNhcmRfdCAqZWMpOworCXZvaWQgKCpmaXFlbmFibGUpKGVjYXJkX3QgKmVjLCBpbnQgZmlxbnIpOworCXZvaWQgKCpmaXFkaXNhYmxlKShlY2FyZF90ICplYywgaW50IGZpcW5yKTsKKwlpbnQgICgqZmlxcGVuZGluZykoZWNhcmRfdCAqZWMpOworfSBleHBhbnNpb25jYXJkX29wc190OworCisjZGVmaW5lIEVDQVJEX05VTV9SRVNPVVJDRVMJKDYpCisKKyNkZWZpbmUgRUNBUkRfUkVTX0lPQ1NMT1cJKDApCisjZGVmaW5lIEVDQVJEX1JFU19JT0NNRURJVU0JKDEpCisjZGVmaW5lIEVDQVJEX1JFU19JT0NGQVNUCSgyKQorI2RlZmluZSBFQ0FSRF9SRVNfSU9DU1lOQwkoMykKKyNkZWZpbmUgRUNBUkRfUkVTX01FTUMJCSg0KQorI2RlZmluZSBFQ0FSRF9SRVNfRUFTSQkJKDUpCisKKyNkZWZpbmUgZWNhcmRfcmVzb3VyY2Vfc3RhcnQoZWMsbnIpCSgoZWMpLT5yZXNvdXJjZVtucl0uc3RhcnQpCisjZGVmaW5lIGVjYXJkX3Jlc291cmNlX2VuZChlYyxucikJKChlYyktPnJlc291cmNlW25yXS5lbmQpCisjZGVmaW5lIGVjYXJkX3Jlc291cmNlX2xlbihlYyxucikJKChlYyktPnJlc291cmNlW25yXS5lbmQgLSBcCisJCQkJCSAoZWMpLT5yZXNvdXJjZVtucl0uc3RhcnQgKyAxKQorI2RlZmluZSBlY2FyZF9yZXNvdXJjZV9mbGFncyhlYyxucikJKChlYyktPnJlc291cmNlW25yXS5mbGFncykKKworLyoKKyAqIFRoaXMgY29udGFpbnMgYWxsIHRoZSBpbmZvIG5lZWRlZCBvbiBhbiBleHBhbnNpb24gY2FyZAorICovCitzdHJ1Y3QgZXhwYW5zaW9uX2NhcmQgeworCXN0cnVjdCBleHBhbnNpb25fY2FyZCAgKm5leHQ7CisKKwlzdHJ1Y3QgZGV2aWNlCQlkZXY7CisJc3RydWN0IHJlc291cmNlCQlyZXNvdXJjZVtFQ0FSRF9OVU1fUkVTT1VSQ0VTXTsKKworCS8qIFB1YmxpYyBkYXRhICovCisJdm9pZCBfX2lvbWVtCQkqaXJxYWRkcjsJLyogYWRkcmVzcyBvZiBJUlEgcmVnaXN0ZXIJKi8KKwl2b2lkIF9faW9tZW0JCSpmaXFhZGRyOwkvKiBhZGRyZXNzIG9mIEZJUSByZWdpc3RlcgkqLworCXVuc2lnbmVkIGNoYXIJCWlycW1hc2s7CS8qIElSUSBtYXNrCQkJKi8KKwl1bnNpZ25lZCBjaGFyCQlmaXFtYXNrOwkvKiBGSVEgbWFzawkJCSovCisJdW5zaWduZWQgY2hhciAgCQljbGFpbWVkOwkvKiBDYXJkIGNsYWltZWQ/CQkqLworCisJdm9pZAkJCSppcnFfZGF0YTsJLyogRGF0YSBmb3IgdXNlIGZvciBJUlEgYnkgY2FyZAkqLworCXZvaWQJCQkqZmlxX2RhdGE7CS8qIERhdGEgZm9yIHVzZSBmb3IgRklRIGJ5IGNhcmQJKi8KKwljb25zdCBleHBhbnNpb25jYXJkX29wc190ICpvcHM7CQkvKiBFbmFibGUvRGlzYWJsZSBPcHMgZm9yIGNhcmQJKi8KKworCUNPTlNUIHVuc2lnbmVkIGludAlzbG90X25vOwkvKiBTbG90IG51bWJlcgkJCSovCisJQ09OU1QgdW5zaWduZWQgaW50CWRtYTsJCS8qIERNQSBudW1iZXIgKGZvciByZXF1ZXN0X2RtYSkJKi8KKwlDT05TVCB1bnNpZ25lZCBpbnQJaXJxOwkJLyogSVJRIG51bWJlciAoZm9yIHJlcXVlc3RfaXJxKQkqLworCUNPTlNUIHVuc2lnbmVkIGludAlmaXE7CQkvKiBGSVEgbnVtYmVyIChmb3IgcmVxdWVzdF9pcnEpCSovCisJQ09OU1QgY2FyZF90eXBlX3QJdHlwZTsJCS8qIFR5cGUgb2YgY2FyZAkJCSovCisJQ09OU1Qgc3RydWN0IGluX2VjaWQJY2lkOwkJLyogQ2FyZCBJZGVudGlmaWNhdGlvbgkJKi8KKworCS8qIFByaXZhdGUgaW50ZXJuYWwgZGF0YSAqLworCWNvbnN0IGNoYXIJCSpjYXJkX2Rlc2M7CS8qIENhcmQgZGVzY3JpcHRpb24JCSovCisJQ09OU1QgdW5zaWduZWQgaW50CXBvZGFkZHI7CS8qIEJhc2UgTGludXggYWRkcmVzcyBmb3IgY2FyZAkqLworCUNPTlNUIGxvYWRlcl90CQlsb2FkZXI7CQkvKiBsb2FkZXIgcHJvZ3JhbSAqLworCXU2NAkJCWRtYV9tYXNrOworfTsKKworc3RydWN0IGluX2NodW5rX2RpciB7CisJdW5zaWduZWQgaW50IHN0YXJ0X29mZnNldDsKKwl1bmlvbiB7CisJCXVuc2lnbmVkIGNoYXIgc3RyaW5nWzI1Nl07CisJCXVuc2lnbmVkIGNoYXIgZGF0YVsxXTsKKwl9IGQ7Cit9OworCisvKgorICogZWNhcmRfY2xhaW06IGNsYWltIGFuIGV4cGFuc2lvbiBjYXJkIGVudHJ5CisgKi8KKyNkZWZpbmUgZWNhcmRfY2xhaW0oZWMpICgoZWMpLT5jbGFpbWVkID0gMSkKKworLyoKKyAqIGVjYXJkX3JlbGVhc2U6IHJlbGVhc2UgYW4gZXhwYW5zaW9uIGNhcmQgZW50cnkKKyAqLworI2RlZmluZSBlY2FyZF9yZWxlYXNlKGVjKSAoKGVjKS0+Y2xhaW1lZCA9IDApCisKKy8qCisgKiBSZWFkIGEgY2h1bmsgZnJvbSBhbiBleHBhbnNpb24gY2FyZAorICogY2QgOiB3aGVyZSB0byBwdXQgcmVhZCBkYXRhCisgKiBlYyA6IGV4cGFuc2lvbiBjYXJkIGluZm8gc3RydWN0CisgKiBpZCA6IGlkIG51bWJlciB0byBmaW5kCisgKiBudW06IChuKzEpJ3RoIGlkIHRvIGZpbmQuCisgKi8KK2V4dGVybiBpbnQgZWNhcmRfcmVhZGNodW5rIChzdHJ1Y3QgaW5fY2h1bmtfZGlyICpjZCwgc3RydWN0IGV4cGFuc2lvbl9jYXJkICplYywgaW50IGlkLCBpbnQgbnVtKTsKKworLyoKKyAqIE9idGFpbiB0aGUgYWRkcmVzcyBvZiBhIGNhcmQuICBUaGlzIHJldHVybnMgdGhlICJvbGQgc3R5bGUiIGFkZHJlc3MKKyAqIGFuZCBzaG91bGQgbm8gbG9uZ2VyIGJlIHVzZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IF9fZGVwcmVjYXRlZAorZWNhcmRfYWRkcmVzcyhzdHJ1Y3QgZXhwYW5zaW9uX2NhcmQgKmVjLCBjYXJkX3R5cGVfdCB0eXBlLCBjYXJkX3NwZWVkX3Qgc3BlZWQpCit7CisJZXh0ZXJuIHVuc2lnbmVkIGludCBfX2VjYXJkX2FkZHJlc3Moc3RydWN0IGV4cGFuc2lvbl9jYXJkICosCisJCQkJCSAgICBjYXJkX3R5cGVfdCwgY2FyZF9zcGVlZF90KTsKKwlyZXR1cm4gX19lY2FyZF9hZGRyZXNzKGVjLCB0eXBlLCBzcGVlZCk7Cit9CisKKy8qCisgKiBSZXF1ZXN0IGFuZCByZWxlYXNlIGVjYXJkIHJlc291cmNlcworICovCitleHRlcm4gaW50IGVjYXJkX3JlcXVlc3RfcmVzb3VyY2VzKHN0cnVjdCBleHBhbnNpb25fY2FyZCAqZWMpOworZXh0ZXJuIHZvaWQgZWNhcmRfcmVsZWFzZV9yZXNvdXJjZXMoc3RydWN0IGV4cGFuc2lvbl9jYXJkICplYyk7CisKKyNpZmRlZiBFQ0FSRF9DCisvKiBEZWZpbml0aW9ucyBpbnRlcm5hbCB0byBlY2FyZC5jIC0gZm9yIGl0J3MgdXNlIG9ubHkhIQorICoKKyAqIEV4dGVybmFsIGV4cGFuc2lvbiBjYXJkIGhlYWRlciBhcyByZWFkIGZyb20gdGhlIGNhcmQKKyAqLworc3RydWN0IGV4X2VjaWQgeworCXVuc2lnbmVkIGNoYXIJcl9pcnE6MTsKKwl1bnNpZ25lZCBjaGFyCXJfemVybzoxOworCXVuc2lnbmVkIGNoYXIJcl9maXE6MTsKKwl1bnNpZ25lZCBjaGFyCXJfaWQ6NDsKKwl1bnNpZ25lZCBjaGFyCXJfYToxOworCisJdW5zaWduZWQgY2hhcglyX2NkOjE7CisJdW5zaWduZWQgY2hhcglyX2lzOjE7CisJdW5zaWduZWQgY2hhcglyX3c6MjsKKwl1bnNpZ25lZCBjaGFyCXJfcjE6NDsKKworCXVuc2lnbmVkIGNoYXIJcl9yMjo4OworCisJdW5zaWduZWQgY2hhcglyX3Byb2RbMl07CisKKwl1bnNpZ25lZCBjaGFyCXJfbWFudVsyXTsKKworCXVuc2lnbmVkIGNoYXIJcl9jb3VudHJ5OworCisJdW5zaWduZWQgY2hhcglyX2ZpcW1hc2s7CisJdW5zaWduZWQgY2hhcglyX2ZpcW9mZlszXTsKKworCXVuc2lnbmVkIGNoYXIJcl9pcnFtYXNrOworCXVuc2lnbmVkIGNoYXIJcl9pcnFvZmZbM107Cit9OworCisvKgorICogQ2h1bmsgZGlyZWN0b3J5IGVudHJ5IGFzIHJlYWQgZnJvbSB0aGUgY2FyZAorICovCitzdHJ1Y3QgZXhfY2h1bmtfZGlyIHsKKwl1bnNpZ25lZCBjaGFyIHJfaWQ7CisJdW5zaWduZWQgY2hhciByX2xlblszXTsKKwl1bnNpZ25lZCBsb25nIHJfc3RhcnQ7CisJdW5pb24geworCQljaGFyIHN0cmluZ1syNTZdOworCQljaGFyIGRhdGFbMV07CisJfSBkOworI2RlZmluZSBjX2lkKHgpCQkoKHgpLT5yX2lkKQorI2RlZmluZSBjX2xlbih4KQkoKHgpLT5yX2xlblswXXwoKHgpLT5yX2xlblsxXTw8OCl8KCh4KS0+cl9sZW5bMl08PDE2KSkKKyNkZWZpbmUgY19zdGFydCh4KQkoKHgpLT5yX3N0YXJ0KQorfTsKKworI2VuZGlmCisKK2V4dGVybiBzdHJ1Y3QgYnVzX3R5cGUgZWNhcmRfYnVzX3R5cGU7CisKKyNkZWZpbmUgRUNBUkRfREVWKF9kKQljb250YWluZXJfb2YoKF9kKSwgc3RydWN0IGV4cGFuc2lvbl9jYXJkLCBkZXYpCisKK3N0cnVjdCBlY2FyZF9kcml2ZXIgeworCWludAkJCSgqcHJvYmUpKHN0cnVjdCBleHBhbnNpb25fY2FyZCAqLCBjb25zdCBzdHJ1Y3QgZWNhcmRfaWQgKmlkKTsKKwl2b2lkCQkJKCpyZW1vdmUpKHN0cnVjdCBleHBhbnNpb25fY2FyZCAqKTsKKwl2b2lkCQkJKCpzaHV0ZG93bikoc3RydWN0IGV4cGFuc2lvbl9jYXJkICopOworCWNvbnN0IHN0cnVjdCBlY2FyZF9pZAkqaWRfdGFibGU7CisJdW5zaWduZWQgaW50CQlpZDsKKwlzdHJ1Y3QgZGV2aWNlX2RyaXZlcglkcnY7Cit9OworCisjZGVmaW5lIEVDQVJEX0RSVihfZCkJY29udGFpbmVyX29mKChfZCksIHN0cnVjdCBlY2FyZF9kcml2ZXIsIGRydikKKworI2RlZmluZSBlY2FyZF9zZXRfZHJ2ZGF0YShlYyxkYXRhKQlkZXZfc2V0X2RydmRhdGEoJihlYyktPmRldiwgKGRhdGEpKQorI2RlZmluZSBlY2FyZF9nZXRfZHJ2ZGF0YShlYykJCWRldl9nZXRfZHJ2ZGF0YSgmKGVjKS0+ZGV2KQorCitpbnQgZWNhcmRfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBlY2FyZF9kcml2ZXIgKik7Cit2b2lkIGVjYXJkX3JlbW92ZV9kcml2ZXIoc3RydWN0IGVjYXJkX2RyaXZlciAqKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vZWxmLmggYi9pbmNsdWRlL2FzbS1hcm0vZWxmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JjZWFjYmUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vZWxmLmgKQEAgLTAsMCArMSwxMzMgQEAKKyNpZm5kZWYgX19BU01BUk1fRUxGX0gKKyNkZWZpbmUgX19BU01BUk1fRUxGX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisvKgorICogRUxGIHJlZ2lzdGVyIGRlZmluaXRpb25zLi4KKyAqLworCisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS91c2VyLmg+CisjaW5jbHVkZSA8YXNtL3Byb2NpbmZvLmg+CisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBlbGZfZ3JlZ190OwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGVsZl9mcmVnX3RbM107CisKKyNkZWZpbmUgRU1fQVJNCTQwCisjZGVmaW5lIEVGX0FSTV9BUENTMjYgMHgwOAorI2RlZmluZSBFRl9BUk1fU09GVF9GTE9BVCAweDIwMAorI2RlZmluZSBFRl9BUk1fRUFCSV9NQVNLIDB4RkYwMDAwMDAKKworI2RlZmluZSBSX0FSTV9OT05FCTAKKyNkZWZpbmUgUl9BUk1fUEMyNAkxCisjZGVmaW5lIFJfQVJNX0FCUzMyCTIKKworI2RlZmluZSBFTEZfTkdSRUcgKHNpemVvZiAoc3RydWN0IHB0X3JlZ3MpIC8gc2l6ZW9mKGVsZl9ncmVnX3QpKQordHlwZWRlZiBlbGZfZ3JlZ190IGVsZl9ncmVnc2V0X3RbRUxGX05HUkVHXTsKKwordHlwZWRlZiBzdHJ1Y3QgdXNlcl9mcCBlbGZfZnByZWdzZXRfdDsKKworLyoKKyAqIFRoaXMgaXMgdXNlZCB0byBlbnN1cmUgd2UgZG9uJ3QgbG9hZCBzb21ldGhpbmcgZm9yIHRoZSB3cm9uZyBhcmNoaXRlY3R1cmUuCisgKi8KKyNkZWZpbmUgZWxmX2NoZWNrX2FyY2goeCkgKCAoKHgpLT5lX21hY2hpbmUgPT0gRU1fQVJNKSAmJiAoRUxGX1BST0NfT0soKHgpKSkgKQorCisvKgorICogVGhlc2UgYXJlIHVzZWQgdG8gc2V0IHBhcmFtZXRlcnMgaW4gdGhlIGNvcmUgZHVtcHMuCisgKi8KKyNkZWZpbmUgRUxGX0NMQVNTCUVMRkNMQVNTMzIKKyNpZmRlZiBfX0FSTUVCX18KKyNkZWZpbmUgRUxGX0RBVEEJRUxGREFUQTJNU0I7CisjZWxzZQorI2RlZmluZSBFTEZfREFUQQlFTEZEQVRBMkxTQjsKKyNlbmRpZgorI2RlZmluZSBFTEZfQVJDSAlFTV9BUk0KKworI2RlZmluZSBVU0VfRUxGX0NPUkVfRFVNUAorI2RlZmluZSBFTEZfRVhFQ19QQUdFU0laRQk0MDk2CisKKy8qIFRoaXMgaXMgdGhlIGxvY2F0aW9uIHRoYXQgYW4gRVRfRFlOIHByb2dyYW0gaXMgbG9hZGVkIGlmIGV4ZWMnZWQuICBUeXBpY2FsCisgICB1c2Ugb2YgdGhpcyBpcyB0byBpbnZva2UgIi4vbGQuc28gc29tZXByb2ciIHRvIHRlc3Qgb3V0IGEgbmV3IHZlcnNpb24gb2YKKyAgIHRoZSBsb2FkZXIuICBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGl0IGlzIG91dCBvZiB0aGUgd2F5IG9mIHRoZSBwcm9ncmFtCisgICB0aGF0IGl0IHdpbGwgImV4ZWMiLCBhbmQgdGhhdCB0aGVyZSBpcyBzdWZmaWNpZW50IHJvb20gZm9yIHRoZSBicmsuICAqLworCisjZGVmaW5lIEVMRl9FVF9EWU5fQkFTRQkoMiAqIFRBU0tfU0laRSAvIDMpCisKKy8qIFdoZW4gdGhlIHByb2dyYW0gc3RhcnRzLCBhMSBjb250YWlucyBhIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiB0byBiZSAKKyAgIHJlZ2lzdGVyZWQgd2l0aCBhdGV4aXQsIGFzIHBlciB0aGUgU1ZSNCBBQkkuICBBIHZhbHVlIG9mIDAgbWVhbnMgd2UgCisgICBoYXZlIG5vIHN1Y2ggaGFuZGxlci4gICovCisjZGVmaW5lIEVMRl9QTEFUX0lOSVQoX3IsIGxvYWRfYWRkcikJKF9yKS0+QVJNX3IwID0gMAorCisvKiBUaGlzIHlpZWxkcyBhIG1hc2sgdGhhdCB1c2VyIHByb2dyYW1zIGNhbiB1c2UgdG8gZmlndXJlIG91dCB3aGF0CisgICBpbnN0cnVjdGlvbiBzZXQgdGhpcyBjcHUgc3VwcG9ydHMuICovCisKKyNkZWZpbmUgRUxGX0hXQ0FQCShlbGZfaHdjYXApCisKKy8qIFRoaXMgeWllbGRzIGEgc3RyaW5nIHRoYXQgbGQuc28gd2lsbCB1c2UgdG8gbG9hZCBpbXBsZW1lbnRhdGlvbgorICAgc3BlY2lmaWMgbGlicmFyaWVzIGZvciBvcHRpbWl6YXRpb24uICBUaGlzIGlzIG1vcmUgc3BlY2lmaWMgaW4KKyAgIGludGVudCB0aGFuIHBva2luZyBhdCB1bmFtZSBvciAvcHJvYy9jcHVpbmZvLiAqLworCisvKiBGb3Igbm93IHdlIGp1c3QgcHJvdmlkZSBhIGZhaXJseSBnZW5lcmFsIHN0cmluZyB0aGF0IGRlc2NyaWJlcyB0aGUKKyAgIHByb2Nlc3NvciBmYW1pbHkuICBUaGlzIGNvdWxkIGJlIG1hZGUgbW9yZSBzcGVjaWZpYyBsYXRlciBpZiBzb21lb25lCisgICBpbXBsZW1lbnRlZCBvcHRpbWlzYXRpb25zIHRoYXQgcmVxdWlyZSBpdC4gIDI2LWJpdCBDUFVzIGdpdmUgeW91CisgICAidjFsIiBmb3IgQVJNMiAobm8gU1dQKSBhbmQgInYybCIgZm9yIGFueXRoaW5nIGVsc2UgKEFSTTEgaXNuJ3QKKyAgIHN1cHBvcnRlZCkuICAzMi1iaXQgQ1BVcyBnaXZlIHlvdSAidjNbbGJdIiBmb3IgYW55dGhpbmcgYmFzZWQgb24gYW4KKyAgIEFSTTYgb3IgQVJNNyBjb3JlIGFuZCAiYXJtdjRbbGJdIiBmb3IgYW55dGhpbmcgYmFzZWQgb24gYSBTdHJvbmdBUk0tMQorICAgY29yZS4gICovCisKKyNkZWZpbmUgRUxGX1BMQVRGT1JNX1NJWkUgOAorZXh0ZXJuIGNoYXIgZWxmX3BsYXRmb3JtW107CisjZGVmaW5lIEVMRl9QTEFURk9STQkoZWxmX3BsYXRmb3JtKQorCisjaWZkZWYgX19LRVJORUxfXworCisvKgorICogMzItYml0IGNvZGUgaXMgYWx3YXlzIE9LLiAgU29tZSBjcHVzIGNhbiBkbyAyNi1iaXQsIHNvbWUgY2FuJ3QuCisgKi8KKyNkZWZpbmUgRUxGX1BST0NfT0soeCkJKEVMRl9USFVNQl9PSyh4KSAmJiBFTEZfMjZCSVRfT0soeCkpCisKKyNkZWZpbmUgRUxGX1RIVU1CX09LKHgpIFwKKwkoKCAoZWxmX2h3Y2FwICYgSFdDQVBfVEhVTUIpICYmICgoeCktPmVfZW50cnkgJiAxKSA9PSAxKSB8fCBcCisJICgoeCktPmVfZW50cnkgJiAzKSA9PSAwKQorCisjZGVmaW5lIEVMRl8yNkJJVF9PSyh4KSBcCisJKCggKGVsZl9od2NhcCAmIEhXQ0FQXzI2QklUKSAmJiAoeCktPmVfZmxhZ3MgJiBFRl9BUk1fQVBDUzI2KSB8fCBcCisJICAoKHgpLT5lX2ZsYWdzICYgRUZfQVJNX0FQQ1MyNikgPT0gMCkKKworI2lmbmRlZiBDT05GSUdfSVdNTVhUCisKKy8qIE9sZCBOZXRXaW5kZXIgYmluYXJpZXMgd2VyZSBjb21waWxlZCBpbiBzdWNoIGEgd2F5IHRoYXQgdGhlIGlCQ1MKKyAgIGhldXJpc3RpYyBhbHdheXMgdHJpcHMgb24gdGhlbS4gIFVudGlsIHRoZXNlIGJpbmFyaWVzIGJlY29tZSB1bmNvbW1vbgorICAgZW5vdWdoIG5vdCB0byBjYXJlLCBkb24ndCB0cnVzdCB0aGUgYGliY3MnIGZsYWcgaGVyZS4gIEluIGFueSBjYXNlCisgICB0aGVyZSBpcyBubyBvdGhlciBFTEYgc3lzdGVtIGN1cnJlbnRseSBzdXBwb3J0ZWQgYnkgaUJDUy4KKyAgIEBAIENvdWxkIHByaW50IGEgd2FybmluZyBtZXNzYWdlIHRvIGVuY291cmFnZSB1c2VycyB0byB1cGdyYWRlLiAgKi8KKyNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4LGliY3MyKSBcCisJc2V0X3BlcnNvbmFsaXR5KCgoZXgpLmVfZmxhZ3MmRUZfQVJNX0FQQ1MyNiA/UEVSX0xJTlVYIDpQRVJfTElOVVhfMzJCSVQpKQorCisjZWxzZQorCisvKgorICogQWxsIGlXTU1YdCBjYXBhYmxlIENQVXMgZG9uJ3Qgc3VwcG9ydCAyNi1iaXQgbW9kZS4gIFlldCB0aGV5IGNhbiBydW4KKyAqIGxlZ2FjeSBiaW5hcmllcyB3aGljaCB1c2VkIHRvIGNvbnRhaW4gRlBBMTEgZmxvYXRpbmcgcG9pbnQgaW5zdHJ1Y3Rpb25zCisgKiB0aGF0IGhhdmUgYWx3YXlzIGJlZW4gZW11bGF0ZWQgYnkgdGhlIGtlcm5lbC4gIFBGQTExIGFuZCBpV01NWHQgb3ZlcmxhcAorICogb24gY29wcm9jZXNzb3IgMSBzcGFjZSB0aG91Z2guICBXZSB0aGVyZWZvcmUgbXVzdCBkZWNpZGUgaWYgZ2l2ZW4gdGFzaworICogaXMgYWxsb3dlZCB0byB1c2UgQ1AgMCBhbmQgMSBmb3IgaVdNTVh0LCBvciBpZiB0aGV5IHNob3VsZCBiZSBibG9ja2VkCisgKiBhdCBhbGwgdGltZXMgZm9yIHRoZSBwcmVmZXRjaCBleGNlcHRpb24gaGFuZGxlciB0byBjYXRjaCBGUEExMSBvcGNvZGVzCisgKiBhbmQgZW11bGF0ZSB0aGVtLiAgVGhlIGJlc3QgaW5kaWNhdGlvbiB0byBkaXNjcmltaW5hdGUgdGhvc2UgdHdvIGNhc2VzCisgKiBpcyB0aGUgU09GVF9GTE9BVCBmbGFnIGluIHRoZSBFTEYgaGVhZGVyLgorICovCisKKyNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4LGliY3MyKSBcCitkbyB7IFwKKwlzZXRfcGVyc29uYWxpdHkoUEVSX0xJTlVYXzMyQklUKTsgXAorCWlmICgoKGV4KS5lX2ZsYWdzICYgRUZfQVJNX0VBQklfTUFTSykgfHwgXAorCSAgICAoKGV4KS5lX2ZsYWdzICYgRUZfQVJNX1NPRlRfRkxPQVQpKSBcCisJCXNldF90aHJlYWRfZmxhZyhUSUZfVVNJTkdfSVdNTVhUKTsgXAorfSB3aGlsZSAoMCkKKworI2VuZGlmCisKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9lcnJuby5oIGIvaW5jbHVkZS9hc20tYXJtL2Vycm5vLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU2MGYwNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9lcnJuby5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfQVJNX0VSUk5PX0gKKyNkZWZpbmUgX0FSTV9FUlJOT19ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9lcnJuby5oPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9mY250bC5oIGIvaW5jbHVkZS9hc20tYXJtL2ZjbnRsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg1YjZiZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9mY250bC5oCkBAIC0wLDAgKzEsODcgQEAKKyNpZm5kZWYgX0FSTV9GQ05UTF9ICisjZGVmaW5lIF9BUk1fRkNOVExfSAorCisvKiBvcGVuL2ZjbnRsIC0gT19TWU5DIGlzIG9ubHkgaW1wbGVtZW50ZWQgb24gYmxvY2tzIGRldmljZXMgYW5kIG9uIGZpbGVzCisgICBsb2NhdGVkIG9uIGFuIGV4dDIgZmlsZSBzeXN0ZW0gKi8KKyNkZWZpbmUgT19BQ0NNT0RFCSAgIDAwMDMKKyNkZWZpbmUgT19SRE9OTFkJICAgICAwMAorI2RlZmluZSBPX1dST05MWQkgICAgIDAxCisjZGVmaW5lIE9fUkRXUgkJICAgICAwMgorI2RlZmluZSBPX0NSRUFUCQkgICAwMTAwCS8qIG5vdCBmY250bCAqLworI2RlZmluZSBPX0VYQ0wJCSAgIDAyMDAJLyogbm90IGZjbnRsICovCisjZGVmaW5lIE9fTk9DVFRZCSAgIDA0MDAJLyogbm90IGZjbnRsICovCisjZGVmaW5lIE9fVFJVTkMJCSAgMDEwMDAJLyogbm90IGZjbnRsICovCisjZGVmaW5lIE9fQVBQRU5ECSAgMDIwMDAKKyNkZWZpbmUgT19OT05CTE9DSwkgIDA0MDAwCisjZGVmaW5lIE9fTkRFTEFZCU9fTk9OQkxPQ0sKKyNkZWZpbmUgT19TWU5DCQkgMDEwMDAwCisjZGVmaW5lIEZBU1lOQwkJIDAyMDAwMAkvKiBmY250bCwgZm9yIEJTRCBjb21wYXRpYmlsaXR5ICovCisjZGVmaW5lIE9fRElSRUNUT1JZCSAwNDAwMDAJLyogbXVzdCBiZSBhIGRpcmVjdG9yeSAqLworI2RlZmluZSBPX05PRk9MTE9XCTAxMDAwMDAJLyogZG9uJ3QgZm9sbG93IGxpbmtzICovCisjZGVmaW5lIE9fRElSRUNUCTAyMDAwMDAJLyogZGlyZWN0IGRpc2sgYWNjZXNzIGhpbnQgLSBjdXJyZW50bHkgaWdub3JlZCAqLworI2RlZmluZSBPX0xBUkdFRklMRQkwNDAwMDAwCisjZGVmaW5lIE9fTk9BVElNRQkwMTAwMDAwMAorCisjZGVmaW5lIEZfRFVQRkQJCTAJLyogZHVwICovCisjZGVmaW5lIEZfR0VURkQJCTEJLyogZ2V0IGNsb3NlX29uX2V4ZWMgKi8KKyNkZWZpbmUgRl9TRVRGRAkJMgkvKiBzZXQvY2xlYXIgY2xvc2Vfb25fZXhlYyAqLworI2RlZmluZSBGX0dFVEZMCQkzCS8qIGdldCBmaWxlLT5mX2ZsYWdzICovCisjZGVmaW5lIEZfU0VURkwJCTQJLyogc2V0IGZpbGUtPmZfZmxhZ3MgKi8KKyNkZWZpbmUgRl9HRVRMSwkJNQorI2RlZmluZSBGX1NFVExLCQk2CisjZGVmaW5lIEZfU0VUTEtXCTcKKworI2RlZmluZSBGX1NFVE9XTgk4CS8qICBmb3Igc29ja2V0cy4gKi8KKyNkZWZpbmUgRl9HRVRPV04JOQkvKiAgZm9yIHNvY2tldHMuICovCisjZGVmaW5lIEZfU0VUU0lHCTEwCS8qICBmb3Igc29ja2V0cy4gKi8KKyNkZWZpbmUgRl9HRVRTSUcJMTEJLyogIGZvciBzb2NrZXRzLiAqLworCisjZGVmaW5lIEZfR0VUTEs2NAkxMgkvKiAgdXNpbmcgJ3N0cnVjdCBmbG9jazY0JyAqLworI2RlZmluZSBGX1NFVExLNjQJMTMKKyNkZWZpbmUgRl9TRVRMS1c2NAkxNAorCisvKiBmb3IgRl9bR0VUfFNFVF1GTCAqLworI2RlZmluZSBGRF9DTE9FWEVDCTEJLyogYWN0dWFsbHkgYW55dGhpbmcgd2l0aCBsb3cgYml0IHNldCBnb2VzICovCisKKy8qIGZvciBwb3NpeCBmY250bCgpIGFuZCBsb2NrZigpICovCisjZGVmaW5lIEZfUkRMQ0sJCTAKKyNkZWZpbmUgRl9XUkxDSwkJMQorI2RlZmluZSBGX1VOTENLCQkyCisKKy8qIGZvciBvbGQgaW1wbGVtZW50YXRpb24gb2YgYnNkIGZsb2NrICgpICovCisjZGVmaW5lIEZfRVhMQ0sJCTQJLyogb3IgMyAqLworI2RlZmluZSBGX1NITENLCQk4CS8qIG9yIDQgKi8KKworLyogZm9yIGxlYXNlcyAqLworI2RlZmluZSBGX0lOUFJPR1JFU1MJMTYKKworLyogb3BlcmF0aW9ucyBmb3IgYnNkIGZsb2NrKCksIGFsc28gdXNlZCBieSB0aGUga2VybmVsIGltcGxlbWVudGF0aW9uICovCisjZGVmaW5lIExPQ0tfU0gJCTEJLyogc2hhcmVkIGxvY2sgKi8KKyNkZWZpbmUgTE9DS19FWAkJMgkvKiBleGNsdXNpdmUgbG9jayAqLworI2RlZmluZSBMT0NLX05CCQk0CS8qIG9yJ2Qgd2l0aCBvbmUgb2YgdGhlIGFib3ZlIHRvIHByZXZlbnQKKwkJCQkgICBibG9ja2luZyAqLworI2RlZmluZSBMT0NLX1VOCQk4CS8qIHJlbW92ZSBsb2NrICovCisKKyNkZWZpbmUgTE9DS19NQU5ECTMyCS8qIFRoaXMgaXMgYSBtYW5kYXRvcnkgZmxvY2sgKi8KKyNkZWZpbmUgTE9DS19SRUFECTY0CS8qIC4uLiBXaGljaCBhbGxvd3MgY29uY3VycmVudCByZWFkIG9wZXJhdGlvbnMgKi8KKyNkZWZpbmUgTE9DS19XUklURQkxMjgJLyogLi4uIFdoaWNoIGFsbG93cyBjb25jdXJyZW50IHdyaXRlIG9wZXJhdGlvbnMgKi8KKyNkZWZpbmUgTE9DS19SVwkJMTkyCS8qIC4uLiBXaGljaCBhbGxvd3MgY29uY3VycmVudCByZWFkICYgd3JpdGUgb3BzICovCisKK3N0cnVjdCBmbG9jayB7CisJc2hvcnQgbF90eXBlOworCXNob3J0IGxfd2hlbmNlOworCW9mZl90IGxfc3RhcnQ7CisJb2ZmX3QgbF9sZW47CisJcGlkX3QgbF9waWQ7Cit9OworCitzdHJ1Y3QgZmxvY2s2NCB7CisJc2hvcnQgIGxfdHlwZTsKKwlzaG9ydCAgbF93aGVuY2U7CisJbG9mZl90IGxfc3RhcnQ7CisJbG9mZl90IGxfbGVuOworCXBpZF90ICBsX3BpZDsKK307CisKKyNkZWZpbmUgRl9MSU5VWF9TUEVDSUZJQ19CQVNFCTEwMjQKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2ZpcS5oIGIvaW5jbHVkZS9hc20tYXJtL2ZpcS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzYmFkMDkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vZmlxLmgKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vZmlxLmgKKyAqCisgKiBTdXBwb3J0IGZvciBGSVEgb24gQVJNIGFyY2hpdGVjdHVyZXMuCisgKiBXcml0dGVuIGJ5IFBoaWxpcCBCbHVuZGVsbCA8cGhpbGJAZ251Lm9yZz4sIDE5OTgKKyAqIFJlLXdyaXR0ZW4gYnkgUnVzc2VsbCBLaW5nCisgKi8KKworI2lmbmRlZiBfX0FTTV9GSVFfSAorI2RlZmluZSBfX0FTTV9GSVFfSAorCisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorCitzdHJ1Y3QgZmlxX2hhbmRsZXIgeworCXN0cnVjdCBmaXFfaGFuZGxlciAqbmV4dDsKKwkvKiBOYW1lCisJICovCisJY29uc3QgY2hhciAqbmFtZTsKKwkvKiBDYWxsZWQgdG8gYXNrIGRyaXZlciB0byByZWxpbnF1aXNoLworCSAqIHJlYWNxdWlyZSBGSVEKKwkgKiByZXR1cm4gemVybyB0byBhY2NlcHQsIG9yIC08ZXJybm8+CisJICovCisJaW50ICgqZmlxX29wKSh2b2lkICosIGludCByZWxpbnF1aXNoKTsKKwkvKiBkYXRhIGZvciB0aGUgcmVsaW5xdWlzaC9yZWFjcXVpcmUgZnVuY3Rpb25zCisJICovCisJdm9pZCAqZGV2X2lkOworfTsKKworZXh0ZXJuIGludCBjbGFpbV9maXEoc3RydWN0IGZpcV9oYW5kbGVyICpmKTsKK2V4dGVybiB2b2lkIHJlbGVhc2VfZmlxKHN0cnVjdCBmaXFfaGFuZGxlciAqZik7CitleHRlcm4gdm9pZCBzZXRfZmlxX2hhbmRsZXIodm9pZCAqc3RhcnQsIHVuc2lnbmVkIGludCBsZW5ndGgpOworZXh0ZXJuIHZvaWQgc2V0X2ZpcV9yZWdzKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2V4dGVybiB2b2lkIGdldF9maXFfcmVncyhzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitleHRlcm4gdm9pZCBlbmFibGVfZmlxKGludCBmaXEpOworZXh0ZXJuIHZvaWQgZGlzYWJsZV9maXEoaW50IGZpcSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2Zsb3BweS5oIGIvaW5jbHVkZS9hc20tYXJtL2Zsb3BweS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlYTY1N2MKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vZmxvcHB5LmgKQEAgLTAsMCArMSwxNDQgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2Zsb3BweS5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwIFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIE5vdGUgdGhhdCB3ZSBkb24ndCB0b3VjaCBGTE9QUFlfRE1BIG5vciBGTE9QUFlfSVJRIGhlcmUKKyAqLworI2lmbmRlZiBfX0FTTV9BUk1fRkxPUFBZX0gKKyNkZWZpbmUgX19BU01fQVJNX0ZMT1BQWV9ICisjaWYgMAorI2luY2x1ZGUgPGFzbS9hcmNoL2Zsb3BweS5oPgorI2VuZGlmCisKKyNkZWZpbmUgZmRfb3V0Yih2YWwscG9ydCkJCQlcCisJZG8gewkJCQkJXAorCQlpZiAoKHBvcnQpID09IEZEX0RPUikJCVwKKwkJCWZkX3NldGRvcigodmFsKSk7CVwKKwkJZWxzZQkJCQlcCisJCQlvdXRiKCh2YWwpLChwb3J0KSk7CVwKKwl9IHdoaWxlKDApCisKKyNkZWZpbmUgZmRfaW5iKHBvcnQpCQlpbmIoKHBvcnQpKQorI2RlZmluZSBmZF9yZXF1ZXN0X2lycSgpCXJlcXVlc3RfaXJxKElSUV9GTE9QUFlESVNLLGZsb3BweV9pbnRlcnJ1cHQsXAorCQkJCQlTQV9JTlRFUlJVUFR8U0FfU0FNUExFX1JBTkRPTSwiZmxvcHB5IixOVUxMKQorI2RlZmluZSBmZF9mcmVlX2lycSgpCQlmcmVlX2lycShJUlFfRkxPUFBZRElTSyxOVUxMKQorI2RlZmluZSBmZF9kaXNhYmxlX2lycSgpCWRpc2FibGVfaXJxKElSUV9GTE9QUFlESVNLKQorI2RlZmluZSBmZF9lbmFibGVfaXJxKCkJCWVuYWJsZV9pcnEoSVJRX0ZMT1BQWURJU0spCisKKyNkZWZpbmUgZmRfcmVxdWVzdF9kbWEoKQlyZXF1ZXN0X2RtYShETUFfRkxPUFBZLCJmbG9wcHkiKQorI2RlZmluZSBmZF9mcmVlX2RtYSgpCQlmcmVlX2RtYShETUFfRkxPUFBZKQorI2RlZmluZSBmZF9kaXNhYmxlX2RtYSgpCWRpc2FibGVfZG1hKERNQV9GTE9QUFkpCisjZGVmaW5lIGZkX2VuYWJsZV9kbWEoKQkJZW5hYmxlX2RtYShETUFfRkxPUFBZKQorI2RlZmluZSBmZF9jbGVhcl9kbWFfZmYoKQljbGVhcl9kbWFfZmYoRE1BX0ZMT1BQWSkKKyNkZWZpbmUgZmRfc2V0X2RtYV9tb2RlKG1vZGUpCXNldF9kbWFfbW9kZShETUFfRkxPUFBZLCAobW9kZSkpCisjZGVmaW5lIGZkX3NldF9kbWFfYWRkcihhZGRyKQlzZXRfZG1hX2FkZHIoRE1BX0ZMT1BQWSwgdmlydF90b19idXMoKGFkZHIpKSkKKyNkZWZpbmUgZmRfc2V0X2RtYV9jb3VudChsZW4pCXNldF9kbWFfY291bnQoRE1BX0ZMT1BQWSwgKGxlbikpCisjZGVmaW5lIGZkX2NhY2hlZmx1c2goYWRkcixzeikKKworLyogbmVlZCB0byBjbGVhbiB1cCBkbWEuaCAqLworI2RlZmluZSBETUFfRkxPUFBZRElTSwkJRE1BX0ZMT1BQWQorCisvKiBGbG9wcHlfc2VsZWN0cyBpcyB0aGUgbGlzdCBvZiBET1IncyB0byBzZWxlY3QgZHJpdmUgZmQKKyAqCisgKiBPbiBpbml0aWFsaXNhdGlvbiwgdGhlIGZsb3BweSBsaXN0IGlzIHNjYW5uZWQsIGFuZCB0aGUgZHJpdmVzIGFsbG9jYXRlZAorICogaW4gdGhlIG9yZGVyIHRoYXQgdGhleSBhcmUgZm91bmQuICBUaGlzIGlzIGRvbmUgYnkgc2Vla2luZyB0aGUgZHJpdmUKKyAqIHRvIGEgbm9uLXplcm8gdHJhY2ssIGFuZCB0aGVuIHJlc3RvcmluZyBpdCB0byB0cmFjayAwLiAgSWYgYW4gZXJyb3Igb2NjdXJzLAorICogdGhlbiB0aGVyZSBpcyBubyBmbG9wcHkgZHJpdmUgcHJlc2VudC4gICAgICAgW3RvIGJlIHB1dCBiYWNrIGluIGFnYWluXQorICovCitzdGF0aWMgdW5zaWduZWQgY2hhciBmbG9wcHlfc2VsZWN0c1syXVs0XSA9Cit7CisJeyAweDEwLCAweDIxLCAweDIzLCAweDMzIH0sCisJeyAweDEwLCAweDIxLCAweDIzLCAweDMzIH0KK307CisKKyNkZWZpbmUgZmRfc2V0ZG9yKGRvcikJCQkJCQkJCVwKK2RvIHsJCQkJCQkJCQkJXAorCWludCBuZXdfZG9yID0gKGRvcik7CQkJCQkJCVwKKwlpZiAobmV3X2RvciAmIDB4ZjApCQkJCQkJCVwKKwkJbmV3X2RvciA9IChuZXdfZG9yICYgMHgwYykgfCBmbG9wcHlfc2VsZWN0c1tmZGNdW25ld19kb3IgJiAzXTsJXAorCWVsc2UJCQkJCQkJCQlcCisJCW5ld19kb3IgJj0gMHgwYzsJCQkJCQlcCisJb3V0YihuZXdfZG9yLCBGRF9ET1IpOwkJCQkJCQlcCit9IHdoaWxlICgwKQorCisvKgorICogU29tZWRheSwgd2UnbGwgYXV0b21hdGljYWxseSBkZXRlY3Qgd2hpY2ggZHJpdmVzIGFyZSBwcmVzZW50Li4uCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBmZF9zY2FuZHJpdmVzICh2b2lkKQoreworI2lmIDAKKwlpbnQgZmxvcHB5LCBkcml2ZV9jb3VudDsKKworCWZkX2Rpc2FibGVfaXJxKCk7CisJcmF3X2NtZCA9ICZkZWZhdWx0X3Jhd19jbWQ7CisJcmF3X2NtZC0+ZmxhZ3MgPSBGRF9SQVdfU1BJTiB8IEZEX1JBV19ORUVEX1NFRUs7CisJcmF3X2NtZC0+dHJhY2sgPSAwOworCXJhd19jbWQtPnJhdGUgPSA/OworCWRyaXZlX2NvdW50ID0gMDsKKwlmb3IgKGZsb3BweSA9IDA7IGZsb3BweSA8IDQ7IGZsb3BweSArKykgeworCQljdXJyZW50X2RyaXZlID0gZHJpdmVfY291bnQ7CisJCS8qCisJCSAqIFR1cm4gb24gZmxvcHB5IG1vdG9yCisJCSAqLworCQlpZiAoc3RhcnRfbW90b3IocmVkb19mZF9yZXF1ZXN0KSkKKwkJCWNvbnRpbnVlOworCQkvKgorCQkgKiBTZXQgdXAgRkRDCisJCSAqLworCQlmZGNfc3BlY2lmeSgpOworCQkvKgorCQkgKiBUZWxsIEZEQyB0byByZWNhbGlicmF0ZQorCQkgKi8KKwkJb3V0cHV0X2J5dGUoRkRfUkVDQUxJQlJBVEUpOworCQlMQVNUX09VVChVTklUKGZsb3BweSkpOworCQkvKiB3YWl0IGZvciBjb21tYW5kIHRvIGNvbXBsZXRlICovCisJCWlmICghc3VjY2Vzc2Z1bCkgeworCQkJaW50IGk7CisJCQlmb3IgKGkgPSBkcml2ZV9jb3VudDsgaSA8IDM7IGktLSkKKwkJCQlmbG9wcHlfc2VsZWN0c1tmZGNdW2ldID0gZmxvcHB5X3NlbGVjdHNbZmRjXVtpICsgMV07CisJCQlmbG9wcHlfc2VsZWN0c1tmZGNdWzNdID0gMDsKKwkJCWZsb3BweSAtPSAxOworCQl9IGVsc2UKKwkJCWRyaXZlX2NvdW50Kys7CisJfQorI2Vsc2UKKwlmbG9wcHlfc2VsZWN0c1swXVswXSA9IDB4MTA7CisJZmxvcHB5X3NlbGVjdHNbMF1bMV0gPSAweDIxOworCWZsb3BweV9zZWxlY3RzWzBdWzJdID0gMHgyMzsKKwlmbG9wcHlfc2VsZWN0c1swXVszXSA9IDB4MzM7CisjZW5kaWYKK30KKworI2RlZmluZSBGREMxICgweDNmMCkKKworI2RlZmluZSBGTE9QUFkwX1RZUEUgNAorI2RlZmluZSBGTE9QUFkxX1RZUEUgNAorCisjZGVmaW5lIE5fRkRDIDEKKyNkZWZpbmUgTl9EUklWRSA0CisKKyNkZWZpbmUgRkxPUFBZX01PVE9SX01BU0sgMHhmMAorCisjZGVmaW5lIENST1NTXzY0S0IoYSxzKSAoMCkKKworLyoKKyAqIFRoaXMgYWxsb3dzIHBlb3BsZSB0byByZXZlcnNlIHRoZSBvcmRlciBvZgorICogZmQwIGFuZCBmZDEsIGluIGNhc2UgdGhlaXIgaGFyZHdhcmUgaXMKKyAqIHN0cmFuZ2VseSBjb25uZWN0ZWQgKGFzIHNvbWUgUmlzY1BDcworICogYW5kIEE1MDAwcyBzZWVtIHRvIGJlKS4KKyAqLworc3RhdGljIHZvaWQgZHJpdmVzd2FwKGludCAqaW50cywgaW50IGR1bW15LCBpbnQgZHVtbXkyKQoreworCWZsb3BweV9zZWxlY3RzWzBdWzBdIF49IGZsb3BweV9zZWxlY3RzWzBdWzFdOworCWZsb3BweV9zZWxlY3RzWzBdWzFdIF49IGZsb3BweV9zZWxlY3RzWzBdWzBdOworCWZsb3BweV9zZWxlY3RzWzBdWzBdIF49IGZsb3BweV9zZWxlY3RzWzBdWzFdOworfQorCisjZGVmaW5lIEVYVFJBX0ZMT1BQWV9QQVJBTVMgLHsgImRyaXZlc3dhcCIsICZkcml2ZXN3YXAsIE5VTEwsIDAsIDAgfQorCQorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vZnBzdGF0ZS5oIGIvaW5jbHVkZS9hc20tYXJtL2Zwc3RhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzQzMGUzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2Zwc3RhdGUuaApAQCAtMCwwICsxLDc0IEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9mcHN0YXRlLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk1IFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUk1fRlBTVEFURV9ICisjZGVmaW5lIF9fQVNNX0FSTV9GUFNUQVRFX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisvKgorICogVkZQIHN0b3JhZ2UgYXJlYSBoYXM6CisgKiAgLSBGUEVYQywgRlBTQ1IsIEZQSU5TVCBhbmQgRlBJTlNUMi4KKyAqICAtIDE2IGRvdWJsZSBwcmVjaXNpb24gZGF0YSByZWdpc3RlcnMKKyAqICAtIGFuIGltcGxlbWVudGF0aW9uLWRlcGVuZGFudCB3b3JkIG9mIHN0YXRlIGZvciBGTERNWC9GU1RNWAorICogCisgKiAgRlBFWEMgd2lsbCBhbHdheXMgYmUgbm9uLXplcm8gb25jZSB0aGUgVkZQIGhhcyBiZWVuIHVzZWQgaW4gdGhpcyBwcm9jZXNzLgorICovCisKK3N0cnVjdCB2ZnBfaGFyZF9zdHJ1Y3QgeworCV9fdTY0IGZwcmVnc1sxNl07CisJX191MzIgZnBteF9zdGF0ZTsKKwlfX3UzMiBmcGV4YzsKKwlfX3UzMiBmcHNjcjsKKwkvKgorCSAqIFZGUCBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyBzdGF0ZQorCSAqLworCV9fdTMyIGZwaW5zdDsKKwlfX3UzMiBmcGluc3QyOworfTsKKwordW5pb24gdmZwX3N0YXRlIHsKKwlzdHJ1Y3QgdmZwX2hhcmRfc3RydWN0CWhhcmQ7Cit9OworCitleHRlcm4gdm9pZCB2ZnBfZmx1c2hfdGhyZWFkKHVuaW9uIHZmcF9zdGF0ZSAqKTsKK2V4dGVybiB2b2lkIHZmcF9yZWxlYXNlX3RocmVhZCh1bmlvbiB2ZnBfc3RhdGUgKik7CisKKyNkZWZpbmUgRlBfSEFSRF9TSVpFIDM1CisKK3N0cnVjdCBmcF9oYXJkX3N0cnVjdCB7CisJdW5zaWduZWQgaW50IHNhdmVbRlBfSEFSRF9TSVpFXTsJCS8qIGFzIHlldCB1bmRlZmluZWQgKi8KK307CisKKyNkZWZpbmUgRlBfU09GVF9TSVpFIDM1CisKK3N0cnVjdCBmcF9zb2Z0X3N0cnVjdCB7CisJdW5zaWduZWQgaW50IHNhdmVbRlBfU09GVF9TSVpFXTsJCS8qIHVuZGVmaW5lZCBpbmZvcm1hdGlvbiAqLworfTsKKworc3RydWN0IGl3bW14dF9zdHJ1Y3QgeworCXVuc2lnbmVkIGludCBzYXZlWzB4OTgvc2l6ZW9mKGludCkgKyAxXTsKK307CisKK3VuaW9uIGZwX3N0YXRlIHsKKwlzdHJ1Y3QgZnBfaGFyZF9zdHJ1Y3QJaGFyZDsKKwlzdHJ1Y3QgZnBfc29mdF9zdHJ1Y3QJc29mdDsKKyNpZmRlZiBDT05GSUdfSVdNTVhUCisJc3RydWN0IGl3bW14dF9zdHJ1Y3QJaXdtbXh0OworI2VuZGlmCit9OworCisjZGVmaW5lIEZQX1NJWkUgKHNpemVvZih1bmlvbiBmcF9zdGF0ZSkgLyBzaXplb2YoaW50KSkKKworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2dsdWUuaCBiL2luY2x1ZGUvYXNtLWFybS9nbHVlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjIzZTBkNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9nbHVlLmgKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2dsdWUuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTctMTk5OSBSdXNzZWxsIEtpbmcKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMiBEZWVwIEJsdWUgU29sdXRpb25zIEx0ZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBUaGlzIGZpbGUgcHJvdmlkZXMgdGhlIGdsdWUgdG8gc3RpY2sgdGhlIHByb2Nlc3Nvci1zcGVjaWZpYyBiaXRzCisgKiAgaW50byB0aGUga2VybmVsIGluIGFuIGVmZmljaWVudCBtYW5uZXIuICBUaGUgaWRlYSBpcyB0byB1c2UgYnJhbmNoZXMKKyAqICB3aGVuIHdlJ3JlIG9ubHkgdGFyZ2V0dGluZyBvbmUgY2xhc3Mgb2YgVExCLCBvciBpbmRpcmVjdCBjYWxscworICogIHdoZW4gd2UncmUgdGFyZ2V0dGluZyBtdWx0aXBsZSBjbGFzc2VzIG9mIFRMQnMuCisgKi8KKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2lmZGVmIF9fU1REQ19fCisjZGVmaW5lIF9fX19nbHVlKG5hbWUsZm4pCW5hbWUjI2ZuCisjZWxzZQorI2RlZmluZSBfX19fZ2x1ZShuYW1lLGZuKQluYW1lLyoqL2ZuCisjZW5kaWYKKyNkZWZpbmUgX19nbHVlKG5hbWUsZm4pCQlfX19fZ2x1ZShuYW1lLGZuKQorCisKKworLyoKKyAqCURhdGEgQWJvcnQgTW9kZWwKKyAqCT09PT09PT09PT09PT09PT0KKyAqCisgKglXZSBoYXZlIHRoZSBmb2xsb3dpbmcgdG8gY2hvb3NlIGZyb206CisgKgkgIGFybTYgICAgICAgICAgLSBBUk02IHN0eWxlCisgKgkgIGFybTcJCS0gQVJNNyBzdHlsZQorICoJICB2NF9lYXJseQktIEFSTXY0IHdpdGhvdXQgVGh1bWIgZWFybHkgYWJvcnQgaGFuZGxlcgorICoJICB2NHRfbGF0ZQktIEFSTXY0IHdpdGggVGh1bWIgbGF0ZSBhYm9ydCBoYW5kbGVyCisgKgkgIHY0dF9lYXJseQktIEFSTXY0IHdpdGggVGh1bWIgZWFybHkgYWJvcnQgaGFuZGxlcgorICoJICB2NXRlal9lYXJseQktIEFSTXY1IHdpdGggVGh1bWIgYW5kIEphdmEgZWFybHkgYWJvcnQgaGFuZGxlcgorICoJICB4c2NhbGUJLSBBUk12NSB3aXRoIFRodW1iIHdpdGggWHNjYWxlIGV4dGVuc2lvbnMKKyAqCSAgdjZfZWFybHkJLSBBUk12NiBnZW5lcmljIGVhcmx5IGFib3J0IGhhbmRsZXIKKyAqLworI3VuZGVmIENQVV9BQk9SVF9IQU5ETEVSCisjdW5kZWYgTVVMVElfQUJPUlQKKworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9BUk02MTApCisjIGlmZGVmIENQVV9BQk9SVF9IQU5ETEVSCisjICBkZWZpbmUgTVVMVElfQUJPUlQgMQorIyBlbHNlCisjICBkZWZpbmUgQ1BVX0FCT1JUX0hBTkRMRVIgY3B1X2FybTZfZGF0YV9hYm9ydAorIyBlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfQVJNNzEwKQorIyBpZmRlZiBDUFVfQUJPUlRfSEFORExFUgorIyAgZGVmaW5lIE1VTFRJX0FCT1JUIDEKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9BQk9SVF9IQU5ETEVSIGNwdV9hcm03X2RhdGFfYWJvcnQKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9BQlJUX0xWNFQKKyMgaWZkZWYgQ1BVX0FCT1JUX0hBTkRMRVIKKyMgIGRlZmluZSBNVUxUSV9BQk9SVCAxCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfQUJPUlRfSEFORExFUiB2NHRfbGF0ZV9hYm9ydAorIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX0FCUlRfRVY0CisjIGlmZGVmIENQVV9BQk9SVF9IQU5ETEVSCisjICBkZWZpbmUgTVVMVElfQUJPUlQgMQorIyBlbHNlCisjICBkZWZpbmUgQ1BVX0FCT1JUX0hBTkRMRVIgdjRfZWFybHlfYWJvcnQKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9BQlJUX0VWNFQKKyMgaWZkZWYgQ1BVX0FCT1JUX0hBTkRMRVIKKyMgIGRlZmluZSBNVUxUSV9BQk9SVCAxCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfQUJPUlRfSEFORExFUiB2NHRfZWFybHlfYWJvcnQKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9BQlJUX0VWNVRKCisjIGlmZGVmIENQVV9BQk9SVF9IQU5ETEVSCisjICBkZWZpbmUgTVVMVElfQUJPUlQgMQorIyBlbHNlCisjICBkZWZpbmUgQ1BVX0FCT1JUX0hBTkRMRVIgdjV0al9lYXJseV9hYm9ydAorIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX0FCUlRfRVY1VAorIyBpZmRlZiBDUFVfQUJPUlRfSEFORExFUgorIyAgZGVmaW5lIE1VTFRJX0FCT1JUIDEKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9BQk9SVF9IQU5ETEVSIHY1dF9lYXJseV9hYm9ydAorIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX0FCUlRfRVY2CisjIGlmZGVmIENQVV9BQk9SVF9IQU5ETEVSCisjICBkZWZpbmUgTVVMVElfQUJPUlQgMQorIyBlbHNlCisjICBkZWZpbmUgQ1BVX0FCT1JUX0hBTkRMRVIgdjZfZWFybHlfYWJvcnQKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIENQVV9BQk9SVF9IQU5ETEVSCisjZXJyb3IgVW5rbm93biBkYXRhIGFib3J0IGhhbmRsZXIgdHlwZQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2hhcmRpcnEuaCBiL2luY2x1ZGUvYXNtLWFybS9oYXJkaXJxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTVjY2I2YgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9oYXJkaXJxLmgKQEAgLTAsMCArMSwzMiBAQAorI2lmbmRlZiBfX0FTTV9IQVJESVJRX0gKKyNkZWZpbmUgX19BU01fSEFSRElSUV9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgorI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQgX19zb2Z0aXJxX3BlbmRpbmc7Cit9IF9fX19jYWNoZWxpbmVfYWxpZ25lZCBpcnFfY3B1c3RhdF90OworCisjaW5jbHVkZSA8bGludXgvaXJxX2NwdXN0YXQuaD4JLyogU3RhbmRhcmQgbWFwcGluZ3MgZm9yIGlycV9jcHVzdGF0X3QgYWJvdmUgKi8KKworI2lmIE5SX0lSUVMgPiAyNTYKKyNkZWZpbmUgSEFSRElSUV9CSVRTCTkKKyNlbHNlCisjZGVmaW5lIEhBUkRJUlFfQklUUwk4CisjZW5kaWYKKworLyoKKyAqIFRoZSBoYXJkaXJxIG1hc2sgaGFzIHRvIGJlIGxhcmdlIGVub3VnaCB0byBoYXZlIHNwYWNlCisgKiBmb3IgcG90ZW50aWFsbHkgYWxsIElSUSBzb3VyY2VzIGluIHRoZSBzeXN0ZW0gbmVzdGluZworICogb24gYSBzaW5nbGUgQ1BVOgorICovCisjaWYgKDEgPDwgSEFSRElSUV9CSVRTKSA8IE5SX0lSUVMKKyMgZXJyb3IgSEFSRElSUV9CSVRTIGlzIHRvbyBsb3chCisjZW5kaWYKKworI2RlZmluZSBfX0FSQ0hfSVJRX0VYSVRfSVJRU19ESVNBQkxFRAkxCisKKyNlbmRpZiAvKiBfX0FTTV9IQVJESVJRX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS5oIGIvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZkMWE1YgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS5oCkBAIC0wLDAgKzEsMTggQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk2IFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIENvbW1vbiBoYXJkd2FyZSBkZWZpbml0aW9ucworICovCisKKyNpZm5kZWYgX19BU01fSEFSRFdBUkVfSAorI2RlZmluZSBfX0FTTV9IQVJEV0FSRV9ICisKKyNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9hbWJhLmggYi9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvYW1iYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxZTZlNTQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvYW1iYS5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL2FtYmEuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMgRGVlcCBCbHVlIFNvbHV0aW9ucyBMdGQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2lmbmRlZiBBU01BUk1fQU1CQV9ICisjZGVmaW5lIEFTTUFSTV9BTUJBX0gKKworI2RlZmluZSBBTUJBX05SX0lSUVMJMgorCitzdHJ1Y3QgYW1iYV9kZXZpY2UgeworCXN0cnVjdCBkZXZpY2UJCWRldjsKKwlzdHJ1Y3QgcmVzb3VyY2UJCXJlczsKKwl1NjQJCQlkbWFfbWFzazsKKwl1bnNpZ25lZCBpbnQJCXBlcmlwaGlkOworCXVuc2lnbmVkIGludAkJaXJxW0FNQkFfTlJfSVJRU107Cit9OworCitzdHJ1Y3QgYW1iYV9pZCB7CisJdW5zaWduZWQgaW50CQlpZDsKKwl1bnNpZ25lZCBpbnQJCW1hc2s7CisJdm9pZAkJCSpkYXRhOworfTsKKworc3RydWN0IGFtYmFfZHJpdmVyIHsKKwlzdHJ1Y3QgZGV2aWNlX2RyaXZlcglkcnY7CisJaW50CQkJKCpwcm9iZSkoc3RydWN0IGFtYmFfZGV2aWNlICosIHZvaWQgKik7CisJaW50CQkJKCpyZW1vdmUpKHN0cnVjdCBhbWJhX2RldmljZSAqKTsKKwl2b2lkCQkJKCpzaHV0ZG93bikoc3RydWN0IGFtYmFfZGV2aWNlICopOworCWludAkJCSgqc3VzcGVuZCkoc3RydWN0IGFtYmFfZGV2aWNlICosIHBtX21lc3NhZ2VfdCk7CisJaW50CQkJKCpyZXN1bWUpKHN0cnVjdCBhbWJhX2RldmljZSAqKTsKKwlzdHJ1Y3QgYW1iYV9pZAkJKmlkX3RhYmxlOworfTsKKworI2RlZmluZSBhbWJhX2dldF9kcnZkYXRhKGQpCWRldl9nZXRfZHJ2ZGF0YSgmZC0+ZGV2KQorI2RlZmluZSBhbWJhX3NldF9kcnZkYXRhKGQscCkJZGV2X3NldF9kcnZkYXRhKCZkLT5kZXYsIHApCisKK2ludCBhbWJhX2RyaXZlcl9yZWdpc3RlcihzdHJ1Y3QgYW1iYV9kcml2ZXIgKik7Cit2b2lkIGFtYmFfZHJpdmVyX3VucmVnaXN0ZXIoc3RydWN0IGFtYmFfZHJpdmVyICopOworaW50IGFtYmFfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBhbWJhX2RldmljZSAqLCBzdHJ1Y3QgcmVzb3VyY2UgKik7Cit2b2lkIGFtYmFfZGV2aWNlX3VucmVnaXN0ZXIoc3RydWN0IGFtYmFfZGV2aWNlICopOworc3RydWN0IGFtYmFfZGV2aWNlICphbWJhX2ZpbmRfZGV2aWNlKGNvbnN0IGNoYXIgKiwgc3RydWN0IGRldmljZSAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7CitpbnQgYW1iYV9yZXF1ZXN0X3JlZ2lvbnMoc3RydWN0IGFtYmFfZGV2aWNlICosIGNvbnN0IGNoYXIgKik7Cit2b2lkIGFtYmFfcmVsZWFzZV9yZWdpb25zKHN0cnVjdCBhbWJhX2RldmljZSAqKTsKKworI2RlZmluZSBhbWJhX2NvbmZpZyhkKQkoKChkKS0+cGVyaXBoaWQgPj4gMjQpICYgMHhmZikKKyNkZWZpbmUgYW1iYV9yZXYoZCkJKCgoZCktPnBlcmlwaGlkID4+IDIwKSAmIDB4MGYpCisjZGVmaW5lIGFtYmFfbWFuZihkKQkoKChkKS0+cGVyaXBoaWQgPj4gMTIpICYgMHhmZikKKyNkZWZpbmUgYW1iYV9wYXJ0KGQpCSgoZCktPnBlcmlwaGlkICYgMHhmZmYpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL2FtYmFfY2xjZC5oIGIvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL2FtYmFfY2xjZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxNDliZTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvYW1iYV9jbGNkLmgKQEAgLTAsMCArMSwyNjQgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvYW1iYV9jbGNkLmggLS0gSW50ZWdyYXRvciBMQ0QgcGFuZWwuCisgKgorICogRGF2aWQgQSBSdXNsaW5nCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAxIEFSTSBMaW1pdGVkCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvZmIuaD4KKworLyoKKyAqIENMQ0QgQ29udHJvbGxlciBJbnRlcm5hbCBSZWdpc3RlciBhZGRyZXNzZXMKKyAqLworI2RlZmluZSBDTENEX1RJTTAJCTB4MDAwMDAwMDAKKyNkZWZpbmUgQ0xDRF9USU0xIAkJMHgwMDAwMDAwNAorI2RlZmluZSBDTENEX1RJTTIgCQkweDAwMDAwMDA4CisjZGVmaW5lIENMQ0RfVElNMyAJCTB4MDAwMDAwMGMKKyNkZWZpbmUgQ0xDRF9VQkFTIAkJMHgwMDAwMDAxMAorI2RlZmluZSBDTENEX0xCQVMgCQkweDAwMDAwMDE0CisKKyNpZm5kZWYgQ09ORklHX0FSQ0hfVkVSU0FUSUxFCisjZGVmaW5lIENMQ0RfSUVOQiAJCTB4MDAwMDAwMTgKKyNkZWZpbmUgQ0xDRF9DTlRMIAkJMHgwMDAwMDAxYworI2Vsc2UKKy8qCisgKiBTb21lb25lIHJlYXJyYW5nZWQgdGhlc2UgdHdvIHJlZ2lzdGVycyBvbiB0aGUgVmVyc2F0aWxlCisgKiBwbGF0Zm9ybS4uLgorICovCisjZGVmaW5lIENMQ0RfSUVOQiAJCTB4MDAwMDAwMWMKKyNkZWZpbmUgQ0xDRF9DTlRMIAkJMHgwMDAwMDAxOAorI2VuZGlmCisKKyNkZWZpbmUgQ0xDRF9TVEFUIAkJMHgwMDAwMDAyMAorI2RlZmluZSBDTENEX0lOVFIgCQkweDAwMDAwMDI0CisjZGVmaW5lIENMQ0RfVUNVUiAJCTB4MDAwMDAwMjgKKyNkZWZpbmUgQ0xDRF9MQ1VSIAkJMHgwMDAwMDAyQworI2RlZmluZSBDTENEX1BBTEwgCQkweDAwMDAwMjAwCisjZGVmaW5lIENMQ0RfUEFMRVRURQkJMHgwMDAwMDIwMAorCisjZGVmaW5lIFRJTTJfQ0xLU0VMCQkoMSA8PCA1KQorI2RlZmluZSBUSU0yX0lWUwkJKDEgPDwgMTEpCisjZGVmaW5lIFRJTTJfSUhTCQkoMSA8PCAxMikKKyNkZWZpbmUgVElNMl9JUEMJCSgxIDw8IDEzKQorI2RlZmluZSBUSU0yX0lPRQkJKDEgPDwgMTQpCisjZGVmaW5lIFRJTTJfQkNECQkoMSA8PCAyNikKKworI2RlZmluZSBDTlRMX0xDREVOCQkoMSA8PCAwKQorI2RlZmluZSBDTlRMX0xDREJQUDEJCSgwIDw8IDEpCisjZGVmaW5lIENOVExfTENEQlBQMgkJKDEgPDwgMSkKKyNkZWZpbmUgQ05UTF9MQ0RCUFA0CQkoMiA8PCAxKQorI2RlZmluZSBDTlRMX0xDREJQUDgJCSgzIDw8IDEpCisjZGVmaW5lIENOVExfTENEQlBQMTYJCSg0IDw8IDEpCisjZGVmaW5lIENOVExfTENEQlBQMjQJCSg1IDw8IDEpCisjZGVmaW5lIENOVExfTENEQlcJCSgxIDw8IDQpCisjZGVmaW5lIENOVExfTENEVEZUCQkoMSA8PCA1KQorI2RlZmluZSBDTlRMX0xDRE1PTk84CQkoMSA8PCA2KQorI2RlZmluZSBDTlRMX0xDRERVQUwJCSgxIDw8IDcpCisjZGVmaW5lIENOVExfQkdSCQkoMSA8PCA4KQorI2RlZmluZSBDTlRMX0JFQk8JCSgxIDw8IDkpCisjZGVmaW5lIENOVExfQkVQTwkJKDEgPDwgMTApCisjZGVmaW5lIENOVExfTENEUFdSCQkoMSA8PCAxMSkKKyNkZWZpbmUgQ05UTF9MQ0RWQ09NUCh4KQkoKHgpIDw8IDEyKQorI2RlZmluZSBDTlRMX0xETUFGSUZPVElNRQkoMSA8PCAxNSkKKyNkZWZpbmUgQ05UTF9XQVRFUk1BUksJCSgxIDw8IDE2KQorCitzdHJ1Y3QgY2xjZF9wYW5lbCB7CisJc3RydWN0IGZiX3ZpZGVvbW9kZQltb2RlOworCXNpZ25lZCBzaG9ydAkJd2lkdGg7CS8qIHdpZHRoIGluIG1tICovCisJc2lnbmVkIHNob3J0CQloZWlnaHQ7CS8qIGhlaWdodCBpbiBtbSAqLworCXUzMgkJCXRpbTI7CisJdTMyCQkJdGltMzsKKwl1MzIJCQljbnRsOworCXVuc2lnbmVkIGludAkJYnBwOjgsCisJCQkJZml4ZWR0aW1pbmdzOjEsCisJCQkJZ3JheXNjYWxlOjE7CisJdW5zaWduZWQgaW50CQljb25uZWN0b3I7Cit9OworCitzdHJ1Y3QgY2xjZF9yZWdzIHsKKwl1MzIJCQl0aW0wOworCXUzMgkJCXRpbTE7CisJdTMyCQkJdGltMjsKKwl1MzIJCQl0aW0zOworCXUzMgkJCWNudGw7CisJdW5zaWduZWQgbG9uZwkJcGl4Y2xvY2s7Cit9OworCitzdHJ1Y3QgY2xjZF9mYjsKKworLyoKKyAqIHRoZSBib2FyZC10eXBlIHNwZWNpZmljIHJvdXRpbmVzCisgKi8KK3N0cnVjdCBjbGNkX2JvYXJkIHsKKwljb25zdCBjaGFyICpuYW1lOworCisJLyoKKwkgKiBPcHRpb25hbC4gIENoZWNrIHdoZXRoZXIgdGhlIHZhciBzdHJ1Y3R1cmUgaXMgYWNjZXB0YWJsZQorCSAqIGZvciB0aGlzIGRpc3BsYXkuCisJICovCisJaW50CSgqY2hlY2spKHN0cnVjdCBjbGNkX2ZiICpmYiwgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIpOworCisJLyoKKwkgKiBDb21wdWxzYXJ5LiAgRGVjb2RlIGZiLT5mYi52YXIgaW50byByZWdzLT4qLiAgSW4gdGhlIGNhc2Ugb2YKKwkgKiBmaXhlZCB0aW1pbmcsIHNldCByZWdzLT4qIHRvIHRoZSByZWdpc3RlciB2YWx1ZXMgcmVxdWlyZWQuCisJICovCisJdm9pZAkoKmRlY29kZSkoc3RydWN0IGNsY2RfZmIgKmZiLCBzdHJ1Y3QgY2xjZF9yZWdzICpyZWdzKTsKKworCS8qCisJICogT3B0aW9uYWwuICBEaXNhYmxlIGFueSBleHRyYSBkaXNwbGF5IGhhcmR3YXJlLgorCSAqLworCXZvaWQJKCpkaXNhYmxlKShzdHJ1Y3QgY2xjZF9mYiAqKTsKKworCS8qCisJICogT3B0aW9uYWwuICBFbmFibGUgYW55IGV4dHJhIGRpc3BsYXkgaGFyZHdhcmUuCisJICovCisJdm9pZAkoKmVuYWJsZSkoc3RydWN0IGNsY2RfZmIgKik7CisKKwkvKgorCSAqIFNldHVwIHBsYXRmb3JtIHNwZWNpZmljIHBhcnRzIG9mIENMQ0QgZHJpdmVyCisJICovCisJaW50CSgqc2V0dXApKHN0cnVjdCBjbGNkX2ZiICopOworCisJLyoKKwkgKiBtbWFwIHRoZSBmcmFtZWJ1ZmZlciBtZW1vcnkKKwkgKi8KKwlpbnQJKCptbWFwKShzdHJ1Y3QgY2xjZF9mYiAqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7CisKKwkvKgorCSAqIFJlbW92ZSBwbGF0Zm9ybSBzcGVjaWZpYyBwYXJ0cyBvZiBDTENEIGRyaXZlcgorCSAqLworCXZvaWQJKCpyZW1vdmUpKHN0cnVjdCBjbGNkX2ZiICopOworfTsKKworc3RydWN0IGFtYmFfZGV2aWNlOworc3RydWN0IGNsazsKKworLyogdGhpcyBkYXRhIHN0cnVjdHVyZSBkZXNjcmliZXMgZWFjaCBmcmFtZSBidWZmZXIgZGV2aWNlIHdlIGZpbmQgKi8KK3N0cnVjdCBjbGNkX2ZiIHsKKwlzdHJ1Y3QgZmJfaW5mbwkJZmI7CisJc3RydWN0IGFtYmFfZGV2aWNlCSpkZXY7CisJc3RydWN0IGNsawkJKmNsazsKKwlzdHJ1Y3QgY2xjZF9wYW5lbAkqcGFuZWw7CisJc3RydWN0IGNsY2RfYm9hcmQJKmJvYXJkOworCXZvaWQJCQkqYm9hcmRfZGF0YTsKKwl2b2lkIF9faW9tZW0JCSpyZWdzOworCXUzMgkJCWNsY2RfY250bDsKKwl1MzIJCQljbWFwWzE2XTsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGNkZmJfZGVjb2RlKHN0cnVjdCBjbGNkX2ZiICpmYiwgc3RydWN0IGNsY2RfcmVncyAqcmVncykKK3sKKwl1MzIgdmFsOworCisJLyoKKwkgKiBQcm9ncmFtIHRoZSBDTENEIGNvbnRyb2xsZXIgcmVnaXN0ZXJzIGFuZCBzdGFydCB0aGUgQ0xDRAorCSAqLworCXZhbCA9ICgoZmItPmZiLnZhci54cmVzIC8gMTYpIC0gMSkgPDwgMjsKKwl2YWwgfD0gKGZiLT5mYi52YXIuaHN5bmNfbGVuIC0gMSkgPDwgODsKKwl2YWwgfD0gKGZiLT5mYi52YXIucmlnaHRfbWFyZ2luIC0gMSkgPDwgMTY7CisJdmFsIHw9IChmYi0+ZmIudmFyLmxlZnRfbWFyZ2luIC0gMSkgPDwgMjQ7CisJcmVncy0+dGltMCA9IHZhbDsKKworCXZhbCA9IGZiLT5mYi52YXIueXJlcyAtIDE7CisJdmFsIHw9IChmYi0+ZmIudmFyLnZzeW5jX2xlbiAtIDEpIDw8IDEwOworCXZhbCB8PSBmYi0+ZmIudmFyLmxvd2VyX21hcmdpbiA8PCAxNjsKKwl2YWwgfD0gZmItPmZiLnZhci51cHBlcl9tYXJnaW4gPDwgMjQ7CisJcmVncy0+dGltMSA9IHZhbDsKKworCXZhbCA9IGZiLT5wYW5lbC0+dGltMjsKKwl2YWwgfD0gZmItPmZiLnZhci5zeW5jICYgRkJfU1lOQ19IT1JfSElHSF9BQ1QgID8gMCA6IFRJTTJfSUhTOworCXZhbCB8PSBmYi0+ZmIudmFyLnN5bmMgJiBGQl9TWU5DX1ZFUlRfSElHSF9BQ1QgPyAwIDogVElNMl9JVlM7CisKKwlpZiAoZmItPnBhbmVsLT5jbnRsICYgQ05UTF9MQ0RURlQpCisJCXZhbCB8PSAoZmItPmZiLnZhci54cmVzX3ZpcnR1YWwgLSAxKSA8PCAxNjsKKwllbHNlIGlmIChmYi0+cGFuZWwtPmNudGwgJiBDTlRMX0xDREJXKQorCQlwcmludGsoIndoYXQgdmFsdWUgZm9yIENQTCBmb3Igc3RubW9ubyBwYW5lbHM/Iik7CisJZWxzZQorCQl2YWwgfD0gKChmYi0+ZmIudmFyLnhyZXNfdmlydHVhbCAqIDggLyAzKSAtIDEpIDw8IDE2OworCXJlZ3MtPnRpbTIgPSB2YWw7CisKKwlyZWdzLT50aW0zID0gZmItPnBhbmVsLT50aW0zOworCisJdmFsID0gZmItPnBhbmVsLT5jbnRsOworCWlmIChmYi0+ZmIudmFyLmdyYXlzY2FsZSkKKwkJdmFsIHw9IENOVExfTENEQlc7CisKKwlzd2l0Y2ggKGZiLT5mYi52YXIuYml0c19wZXJfcGl4ZWwpIHsKKwljYXNlIDE6CisJCXZhbCB8PSBDTlRMX0xDREJQUDE7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJdmFsIHw9IENOVExfTENEQlBQMjsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQl2YWwgfD0gQ05UTF9MQ0RCUFA0OworCQlicmVhazsKKwljYXNlIDg6CisJCXZhbCB8PSBDTlRMX0xDREJQUDg7CisJCWJyZWFrOworCWNhc2UgMTY6CisJCXZhbCB8PSBDTlRMX0xDREJQUDE2OworCQlicmVhazsKKwljYXNlIDI0OgorCQl2YWwgfD0gQ05UTF9MQ0RCUFAyNDsKKwkJYnJlYWs7CisJfQorCisJcmVncy0+Y250bCA9IHZhbDsKKwlyZWdzLT5waXhjbG9jayA9IGZiLT5mYi52YXIucGl4Y2xvY2s7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNsY2RmYl9jaGVjayhzdHJ1Y3QgY2xjZF9mYiAqZmIsIHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyKQoreworCXZhci0+eHJlc192aXJ0dWFsID0gdmFyLT54cmVzID0gKHZhci0+eHJlcyArIDcpICYgfjc7CisJdmFyLT55cmVzX3ZpcnR1YWwgPSB2YXItPnlyZXM7CisKKyNkZWZpbmUgQ0hFQ0soZSxsLGgpICh2YXItPmUgPCBsIHx8IHZhci0+ZSA+IGgpCisJaWYgKENIRUNLKHJpZ2h0X21hcmdpbiwgKDUrMSksIDI1NikgfHwJLyogYmFjayBwb3JjaCAqLworCSAgICBDSEVDSyhsZWZ0X21hcmdpbiwgKDUrMSksIDI1NikgfHwJLyogZnJvbnQgcG9yY2ggKi8KKwkgICAgQ0hFQ0soaHN5bmNfbGVuLCAoNSsxKSwgMjU2KSB8fAorCSAgICB2YXItPnhyZXMgPiA0MDk2IHx8CisJICAgIHZhci0+bG93ZXJfbWFyZ2luID4gMjU1IHx8CQkvKiBiYWNrIHBvcmNoICovCisJICAgIHZhci0+dXBwZXJfbWFyZ2luID4gMjU1IHx8CQkvKiBmcm9udCBwb3JjaCAqLworCSAgICB2YXItPnZzeW5jX2xlbiA+IDMyIHx8CisJICAgIHZhci0+eXJlcyA+IDEwMjQpCisJCXJldHVybiAtRUlOVkFMOworI3VuZGVmIENIRUNLCisKKwkvKiBzaW5nbGUgcGFuZWwgbW9kZTogUENEID0gbWF4KFBDRCwgMSkgKi8KKwkvKiBkdWFsIHBhbmVsIG1vZGU6IFBDRCA9IG1heChQQ0QsIDUpICovCisKKwkvKgorCSAqIFlvdSBjYW4ndCBjaGFuZ2UgdGhlIGdyYXlzY2FsZSBzZXR0aW5nLCBhbmQKKwkgKiB3ZSBjYW4gb25seSBkbyBub24taW50ZXJsYWNlZCB2aWRlby4KKwkgKi8KKwlpZiAodmFyLT5ncmF5c2NhbGUgIT0gZmItPmZiLnZhci5ncmF5c2NhbGUgfHwKKwkgICAgKHZhci0+dm1vZGUgJiBGQl9WTU9ERV9NQVNLKSAhPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VEKQorCQlyZXR1cm4gLUVJTlZBTDsKKworI2RlZmluZSBDSEVDSyhlKSAodmFyLT5lICE9IGZiLT5mYi52YXIuZSkKKwlpZiAoZmItPnBhbmVsLT5maXhlZHRpbWluZ3MgJiYKKwkgICAgKENIRUNLKHhyZXMpCQl8fAorCSAgICAgQ0hFQ0soeXJlcykJCXx8CisJICAgICBDSEVDSyhiaXRzX3Blcl9waXhlbCkJfHwKKwkgICAgIENIRUNLKHBpeGNsb2NrKQkJfHwKKwkgICAgIENIRUNLKGxlZnRfbWFyZ2luKQkJfHwKKwkgICAgIENIRUNLKHJpZ2h0X21hcmdpbikJfHwKKwkgICAgIENIRUNLKHVwcGVyX21hcmdpbikJfHwKKwkgICAgIENIRUNLKGxvd2VyX21hcmdpbikJfHwKKwkgICAgIENIRUNLKGhzeW5jX2xlbikJCXx8CisJICAgICBDSEVDSyh2c3luY19sZW4pCQl8fAorCSAgICAgQ0hFQ0soc3luYykpKQorCQlyZXR1cm4gLUVJTlZBTDsKKyN1bmRlZiBDSEVDSworCisJdmFyLT5ub25zdGQgPSAwOworCXZhci0+YWNjZWxfZmxhZ3MgPSAwOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvYW1iYV9rbWkuaCBiL2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9hbWJhX2ttaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzOWU1YmUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvYW1iYV9rbWkuaApAQCAtMCwwICsxLDkyIEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9hbWJhX2ttaS5oCisgKgorICogIEludGVybmFsIGhlYWRlciBmaWxlIGZvciBBTUJBIEtNSSBwb3J0cworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDAgRGVlcCBCbHVlIFNvbHV0aW9ucyBMdGQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBGcm9tIEFSTSBQcmltZUNlbGwodG0pIFBTMiBLZXlib2FyZC9Nb3VzZSBJbnRlcmZhY2UgKFBMMDUwKSBUZWNobmljYWwKKyAqICBSZWZlcmVuY2UgTWFudWFsIC0gQVJNIERESSAwMTQzQiAtIHNlZSBodHRwOi8vd3d3LmFybS5jb20vCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBBU01fQVJNX0hBUkRXQVJFX0FNQkFfS01JX0gKKyNkZWZpbmUgQVNNX0FSTV9IQVJEV0FSRV9BTUJBX0tNSV9ICisKKy8qCisgKiBLTUkgY29udHJvbCByZWdpc3RlcjoKKyAqICBLTUlDUl9UWVBFICAgICAgIDAgPSBQUzIvQVQgbW9kZSwgMSA9IE5vIGxpbmUgY29udHJvbCBiaXQgbW9kZQorICogIEtNSUNSX1JYSU5UUkVOICAgMSA9IGVuYWJsZSBSWCBpbnRlcnJ1cHRzCisgKiAgS01JQ1JfVFhJTlRSRU4gICAxID0gZW5hYmxlIFRYIGludGVycnVwdHMKKyAqICBLTUlDUl9FTiAgICAgICAgIDEgPSBlbmFibGUgS01JCisgKiAgS01JQ1JfRkQgICAgICAgICAxID0gZm9yY2UgS01JIGRhdGEgbG93CisgKiAgS01JQ1JfRkMgICAgICAgICAxID0gZm9yY2UgS01JIGNsb2NrIGxvdworICovCisjZGVmaW5lIEtNSUNSCQkoS01JX0JBU0UgKyAweDAwKQorI2RlZmluZSBLTUlDUl9UWVBFCQkoMSA8PCA1KQorI2RlZmluZSBLTUlDUl9SWElOVFJFTgkJKDEgPDwgNCkKKyNkZWZpbmUgS01JQ1JfVFhJTlRSRU4JCSgxIDw8IDMpCisjZGVmaW5lIEtNSUNSX0VOCQkoMSA8PCAyKQorI2RlZmluZSBLTUlDUl9GRAkJKDEgPDwgMSkKKyNkZWZpbmUgS01JQ1JfRkMJCSgxIDw8IDApCisKKy8qCisgKiBLTUkgc3RhdHVzIHJlZ2lzdGVyOgorICogIEtNSVNUQVRfVFhFTVBUWSAgMSA9IHRyYW5zbWl0dGVyIHJlZ2lzdGVyIGVtcHR5CisgKiAgS01JU1RBVF9UWEJVU1kgICAxID0gY3VycmVudGx5IHNlbmRpbmcgZGF0YQorICogIEtNSVNUQVRfUlhGVUxMICAgMSA9IHJlY2VpdmVyIHJlZ2lzdGVyIHJlYWR5IHRvIGJlIHJlYWQKKyAqICBLTUlTVEFUX1JYQlVTWSAgIDEgPSBjdXJyZW50bHkgcmVjZWl2aW5nIGRhdGEKKyAqICBLTUlTVEFUX1JYUEFSSVRZIHBhcml0eSBvZiBsYXN0IGRhdGFieXRlIHJlY2VpdmVkCisgKiAgS01JU1RBVF9JQyAgICAgICBjdXJyZW50IGxldmVsIG9mIEtNSSBjbG9jayBpbnB1dAorICogIEtNSVNUQVRfSUQgICAgICAgY3VycmVudCBsZXZlbCBvZiBLTUkgZGF0YSBpbnB1dAorICovCisjZGVmaW5lIEtNSVNUQVQJCShLTUlfQkFTRSArIDB4MDQpCisjZGVmaW5lIEtNSVNUQVRfVFhFTVBUWQkJKDEgPDwgNikKKyNkZWZpbmUgS01JU1RBVF9UWEJVU1kJCSgxIDw8IDUpCisjZGVmaW5lIEtNSVNUQVRfUlhGVUxMCQkoMSA8PCA0KQorI2RlZmluZSBLTUlTVEFUX1JYQlVTWQkJKDEgPDwgMykKKyNkZWZpbmUgS01JU1RBVF9SWFBBUklUWQkoMSA8PCAyKQorI2RlZmluZSBLTUlTVEFUX0lDCQkoMSA8PCAxKQorI2RlZmluZSBLTUlTVEFUX0lECQkoMSA8PCAwKQorCisvKgorICogS01JIGRhdGEgcmVnaXN0ZXIKKyAqLworI2RlZmluZSBLTUlEQVRBCQkoS01JX0JBU0UgKyAweDA4KQorCisvKgorICogS01JIGNsb2NrIGRpdmlzb3I6IHRvIGdlbmVyYXRlIDhNSHogaW50ZXJuYWwgY2xvY2sKKyAqICBkaXYgPSAocmVmIC8gOE1IeikgLSAxOyAwIDw9IGRpdiA8PSAxNQorICovCisjZGVmaW5lIEtNSUNMS0RJVgkoS01JX0JBU0UgKyAweDBjKQorCisvKgorICogS01JIGludGVycnVwdCByZWdpc3RlcjoKKyAqICBLTUlJUl9UWElOVFIgICAgIDEgPSB0cmFuc21pdCBpbnRlcnJ1cHQgYXNzZXJ0ZWQKKyAqICBLTUlJUl9SWElOVFIgICAgIDEgPSByZWNlaXZlIGludGVycnVwdCBhc3NlcnRlZAorICovCisjZGVmaW5lIEtNSUlSCQkoS01JX0JBU0UgKyAweDEwKQorI2RlZmluZSBLTUlJUl9UWElOVFIJCSgxIDw8IDEpCisjZGVmaW5lIEtNSUlSX1JYSU5UUgkJKDEgPDwgMCkKKworLyoKKyAqIFRoZSBzaXplIG9mIHRoZSBLTUkgcHJpbWVjZWxsCisgKi8KKyNkZWZpbmUgS01JX1NJWkUJKDB4MTAwKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9hbWJhX3NlcmlhbC5oIGIvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL2FtYmFfc2VyaWFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE3NzBhYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9hbWJhX3NlcmlhbC5oCkBAIC0wLDAgKzEsMTU2IEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9zZXJpYWxfYW1iYS5oCisgKgorICogIEludGVybmFsIGhlYWRlciBmaWxlIGZvciBBTUJBIHNlcmlhbCBwb3J0cworICoKKyAqICBDb3B5cmlnaHQgKEMpIEFSTSBMaW1pdGVkCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwIERlZXAgQmx1ZSBTb2x1dGlvbnMgTHRkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworI2lmbmRlZiBBU01fQVJNX0hBUkRXQVJFX1NFUklBTF9BTUJBX0gKKyNkZWZpbmUgQVNNX0FSTV9IQVJEV0FSRV9TRVJJQUxfQU1CQV9ICisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBGcm9tIEFNQkEgVUFSVCAoUEwwMTApIEJsb2NrIFNwZWNpZmljYXRpb24KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBVQVJUIFJlZ2lzdGVyIE9mZnNldHMuCisgKi8KKyNkZWZpbmUgVUFSVDAxeF9EUgkJMHgwMAkvKiBEYXRhIHJlYWQgb3Igd3JpdHRlbiBmcm9tIHRoZSBpbnRlcmZhY2UuICovCisjZGVmaW5lIFVBUlQwMXhfUlNSCQkweDA0CS8qIFJlY2VpdmUgc3RhdHVzIHJlZ2lzdGVyIChSZWFkKS4gKi8KKyNkZWZpbmUgVUFSVDAxeF9FQ1IJCTB4MDQJLyogRXJyb3IgY2xlYXIgcmVnaXN0ZXIgKFdyaXRlKS4gKi8KKyNkZWZpbmUgVUFSVDAxMF9MQ1JICQkweDA4CS8qIExpbmUgY29udHJvbCByZWdpc3RlciwgaGlnaCBieXRlLiAqLworI2RlZmluZSBVQVJUMDEwX0xDUk0JCTB4MEMJLyogTGluZSBjb250cm9sIHJlZ2lzdGVyLCBtaWRkbGUgYnl0ZS4gKi8KKyNkZWZpbmUgVUFSVDAxMF9MQ1JMCQkweDEwCS8qIExpbmUgY29udHJvbCByZWdpc3RlciwgbG93IGJ5dGUuICovCisjZGVmaW5lIFVBUlQwMTBfQ1IJCTB4MTQJLyogQ29udHJvbCByZWdpc3Rlci4gKi8KKyNkZWZpbmUgVUFSVDAxeF9GUgkJMHgxOAkvKiBGbGFnIHJlZ2lzdGVyIChSZWFkIG9ubHkpLiAqLworI2RlZmluZSBVQVJUMDEwX0lJUgkJMHgxQwkvKiBJbnRlcnJ1cHQgaW5kZW50aWZpY2F0aW9uIHJlZ2lzdGVyIChSZWFkKS4gKi8KKyNkZWZpbmUgVUFSVDAxMF9JQ1IJCTB4MUMJLyogSW50ZXJydXB0IGNsZWFyIHJlZ2lzdGVyIChXcml0ZSkuICovCisjZGVmaW5lIFVBUlQwMXhfSUxQUgkJMHgyMAkvKiBJckRBIGxvdyBwb3dlciBjb3VudGVyIHJlZ2lzdGVyLiAqLworI2RlZmluZSBVQVJUMDExX0lCUkQJCTB4MjQJLyogSW50ZWdlciBiYXVkIHJhdGUgZGl2aXNvciByZWdpc3Rlci4gKi8KKyNkZWZpbmUgVUFSVDAxMV9GQlJECQkweDI4CS8qIEZyYWN0aW9uYWwgYmF1ZCByYXRlIGRpdmlzb3IgcmVnaXN0ZXIuICovCisjZGVmaW5lIFVBUlQwMTFfTENSSAkJMHgyYwkvKiBMaW5lIGNvbnRyb2wgcmVnaXN0ZXIuICovCisjZGVmaW5lIFVBUlQwMTFfQ1IJCTB4MzAJLyogQ29udHJvbCByZWdpc3Rlci4gKi8KKyNkZWZpbmUgVUFSVDAxMV9JRkxTCQkweDM0CS8qIEludGVycnVwdCBmaWZvIGxldmVsIHNlbGVjdC4gKi8KKyNkZWZpbmUgVUFSVDAxMV9JTVNDCQkweDM4CS8qIEludGVycnVwdCBtYXNrLiAqLworI2RlZmluZSBVQVJUMDExX1JJUwkJMHgzYwkvKiBSYXcgaW50ZXJydXB0IHN0YXR1cy4gKi8KKyNkZWZpbmUgVUFSVDAxMV9NSVMJCTB4NDAJLyogTWFza2VkIGludGVycnVwdCBzdGF0dXMuICovCisjZGVmaW5lIFVBUlQwMTFfSUNSCQkweDQ0CS8qIEludGVycnVwdCBjbGVhciByZWdpc3Rlci4gKi8KKyNkZWZpbmUgVUFSVDAxMV9ETUFDUgkJMHg0OAkvKiBETUEgY29udHJvbCByZWdpc3Rlci4gKi8KKworI2RlZmluZSBVQVJUMDF4X1JTUl9PRSAJCTB4MDgKKyNkZWZpbmUgVUFSVDAxeF9SU1JfQkUgCQkweDA0CisjZGVmaW5lIFVBUlQwMXhfUlNSX1BFIAkJMHgwMgorI2RlZmluZSBVQVJUMDF4X1JTUl9GRSAJCTB4MDEKKworI2RlZmluZSBVQVJUMDExX0ZSX1JJCQkweDEwMAorI2RlZmluZSBVQVJUMDExX0ZSX1RYRkUJCTB4MDgwCisjZGVmaW5lIFVBUlQwMTFfRlJfUlhGRgkJMHgwNDAKKyNkZWZpbmUgVUFSVDAxeF9GUl9UWEZGCQkweDAyMAorI2RlZmluZSBVQVJUMDF4X0ZSX1JYRkUJCTB4MDEwCisjZGVmaW5lIFVBUlQwMXhfRlJfQlVTWQkJMHgwMDgKKyNkZWZpbmUgVUFSVDAxeF9GUl9EQ0QgCQkweDAwNAorI2RlZmluZSBVQVJUMDF4X0ZSX0RTUiAJCTB4MDAyCisjZGVmaW5lIFVBUlQwMXhfRlJfQ1RTIAkJMHgwMDEKKyNkZWZpbmUgVUFSVDAxeF9GUl9UTVNLCQkoVUFSVDAxeF9GUl9UWEZGICsgVUFSVDAxeF9GUl9CVVNZKQorCisjZGVmaW5lIFVBUlQwMTFfQ1JfQ1RTRU4JMHg4MDAwCS8qIENUUyBoYXJkd2FyZSBmbG93IGNvbnRyb2wgKi8KKyNkZWZpbmUgVUFSVDAxMV9DUl9SVFNFTgkweDQwMDAJLyogUlRTIGhhcmR3YXJlIGZsb3cgY29udHJvbCAqLworI2RlZmluZSBVQVJUMDExX0NSX09VVDIJCTB4MjAwMAkvKiBPVVQyICovCisjZGVmaW5lIFVBUlQwMTFfQ1JfT1VUMQkJMHgxMDAwCS8qIE9VVDEgKi8KKyNkZWZpbmUgVUFSVDAxMV9DUl9SVFMJCTB4MDgwMAkvKiBSVFMgKi8KKyNkZWZpbmUgVUFSVDAxMV9DUl9EVFIJCTB4MDQwMAkvKiBEVFIgKi8KKyNkZWZpbmUgVUFSVDAxMV9DUl9SWEUJCTB4MDIwMAkvKiByZWNlaXZlIGVuYWJsZSAqLworI2RlZmluZSBVQVJUMDExX0NSX1RYRQkJMHgwMTAwCS8qIHRyYW5zbWl0IGVuYWJsZSAqLworI2RlZmluZSBVQVJUMDExX0NSX0xCRQkJMHgwMDgwCS8qIGxvb3BiYWNrIGVuYWJsZSAqLworI2RlZmluZSBVQVJUMDEwX0NSX1JUSUUJCTB4MDA0MAorI2RlZmluZSBVQVJUMDEwX0NSX1RJRSAJCTB4MDAyMAorI2RlZmluZSBVQVJUMDEwX0NSX1JJRSAJCTB4MDAxMAorI2RlZmluZSBVQVJUMDEwX0NSX01TSUUJCTB4MDAwOAorI2RlZmluZSBVQVJUMDF4X0NSX0lJUkxQCTB4MDAwNAkvKiBTSVIgbG93IHBvd2VyIG1vZGUgKi8KKyNkZWZpbmUgVUFSVDAxeF9DUl9TSVJFTgkweDAwMDIJLyogU0lSIGVuYWJsZSAqLworI2RlZmluZSBVQVJUMDF4X0NSX1VBUlRFTgkweDAwMDEJLyogVUFSVCBlbmFibGUgKi8KKyAKKyNkZWZpbmUgVUFSVDAxMV9MQ1JIX1NQUwkweDgwCisjZGVmaW5lIFVBUlQwMXhfTENSSF9XTEVOXzgJMHg2MAorI2RlZmluZSBVQVJUMDF4X0xDUkhfV0xFTl83CTB4NDAKKyNkZWZpbmUgVUFSVDAxeF9MQ1JIX1dMRU5fNgkweDIwCisjZGVmaW5lIFVBUlQwMXhfTENSSF9XTEVOXzUJMHgwMAorI2RlZmluZSBVQVJUMDF4X0xDUkhfRkVOCTB4MTAKKyNkZWZpbmUgVUFSVDAxeF9MQ1JIX1NUUDIJMHgwOAorI2RlZmluZSBVQVJUMDF4X0xDUkhfRVBTCTB4MDQKKyNkZWZpbmUgVUFSVDAxeF9MQ1JIX1BFTgkweDAyCisjZGVmaW5lIFVBUlQwMXhfTENSSF9CUksJMHgwMQorCisjZGVmaW5lIFVBUlQwMTBfSUlSX1JUSVMJMHgwOAorI2RlZmluZSBVQVJUMDEwX0lJUl9USVMJCTB4MDQKKyNkZWZpbmUgVUFSVDAxMF9JSVJfUklTCQkweDAyCisjZGVmaW5lIFVBUlQwMTBfSUlSX01JUwkJMHgwMQorCisjZGVmaW5lIFVBUlQwMTFfSUZMU19SWDFfOAkoMCA8PCAzKQorI2RlZmluZSBVQVJUMDExX0lGTFNfUlgyXzgJKDEgPDwgMykKKyNkZWZpbmUgVUFSVDAxMV9JRkxTX1JYNF84CSgyIDw8IDMpCisjZGVmaW5lIFVBUlQwMTFfSUZMU19SWDZfOAkoMyA8PCAzKQorI2RlZmluZSBVQVJUMDExX0lGTFNfUlg3XzgJKDQgPDwgMykKKyNkZWZpbmUgVUFSVDAxMV9JRkxTX1RYMV84CSgwIDw8IDApCisjZGVmaW5lIFVBUlQwMTFfSUZMU19UWDJfOAkoMSA8PCAwKQorI2RlZmluZSBVQVJUMDExX0lGTFNfVFg0XzgJKDIgPDwgMCkKKyNkZWZpbmUgVUFSVDAxMV9JRkxTX1RYNl84CSgzIDw8IDApCisjZGVmaW5lIFVBUlQwMTFfSUZMU19UWDdfOAkoNCA8PCAwKQorCisjZGVmaW5lIFVBUlQwMTFfT0VJTQkJKDEgPDwgMTApCS8qIG92ZXJydW4gZXJyb3IgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgVUFSVDAxMV9CRUlNCQkoMSA8PCA5KQkvKiBicmVhayBlcnJvciBpbnRlcnJ1cHQgbWFzayAqLworI2RlZmluZSBVQVJUMDExX1BFSU0JCSgxIDw8IDgpCS8qIHBhcml0eSBlcnJvciBpbnRlcnJ1cHQgbWFzayAqLworI2RlZmluZSBVQVJUMDExX0ZFSU0JCSgxIDw8IDcpCS8qIGZyYW1pbmcgZXJyb3IgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgVUFSVDAxMV9SVElNCQkoMSA8PCA2KQkvKiByZWNlaXZlIHRpbWVvdXQgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgVUFSVDAxMV9UWElNCQkoMSA8PCA1KQkvKiB0cmFuc21pdCBpbnRlcnJ1cHQgbWFzayAqLworI2RlZmluZSBVQVJUMDExX1JYSU0JCSgxIDw8IDQpCS8qIHJlY2VpdmUgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgVUFSVDAxMV9EU1JNSU0JCSgxIDw8IDMpCS8qIERTUiBpbnRlcnJ1cHQgbWFzayAqLworI2RlZmluZSBVQVJUMDExX0RDRE1JTQkJKDEgPDwgMikJLyogRENEIGludGVycnVwdCBtYXNrICovCisjZGVmaW5lIFVBUlQwMTFfQ1RTTUlNCQkoMSA8PCAxKQkvKiBDVFMgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgVUFSVDAxMV9SSU1JTQkJKDEgPDwgMCkJLyogUkkgaW50ZXJydXB0IG1hc2sgKi8KKworI2RlZmluZSBVQVJUMDExX09FSVMJCSgxIDw8IDEwKQkvKiBvdmVycnVuIGVycm9yIGludGVycnVwdCBzdGF0dXMgKi8KKyNkZWZpbmUgVUFSVDAxMV9CRUlTCQkoMSA8PCA5KQkvKiBicmVhayBlcnJvciBpbnRlcnJ1cHQgc3RhdHVzICovCisjZGVmaW5lIFVBUlQwMTFfUEVJUwkJKDEgPDwgOCkJLyogcGFyaXR5IGVycm9yIGludGVycnVwdCBzdGF0dXMgKi8KKyNkZWZpbmUgVUFSVDAxMV9GRUlTCQkoMSA8PCA3KQkvKiBmcmFtaW5nIGVycm9yIGludGVycnVwdCBzdGF0dXMgKi8KKyNkZWZpbmUgVUFSVDAxMV9SVElTCQkoMSA8PCA2KQkvKiByZWNlaXZlIHRpbWVvdXQgaW50ZXJydXB0IHN0YXR1cyAqLworI2RlZmluZSBVQVJUMDExX1RYSVMJCSgxIDw8IDUpCS8qIHRyYW5zbWl0IGludGVycnVwdCBzdGF0dXMgKi8KKyNkZWZpbmUgVUFSVDAxMV9SWElTCQkoMSA8PCA0KQkvKiByZWNlaXZlIGludGVycnVwdCBzdGF0dXMgKi8KKyNkZWZpbmUgVUFSVDAxMV9EU1JNSVMJCSgxIDw8IDMpCS8qIERTUiBpbnRlcnJ1cHQgc3RhdHVzICovCisjZGVmaW5lIFVBUlQwMTFfRENETUlTCQkoMSA8PCAyKQkvKiBEQ0QgaW50ZXJydXB0IHN0YXR1cyAqLworI2RlZmluZSBVQVJUMDExX0NUU01JUwkJKDEgPDwgMSkJLyogQ1RTIGludGVycnVwdCBzdGF0dXMgKi8KKyNkZWZpbmUgVUFSVDAxMV9SSU1JUwkJKDEgPDwgMCkJLyogUkkgaW50ZXJydXB0IHN0YXR1cyAqLworCisjZGVmaW5lIFVBUlQwMTFfT0VJQwkJKDEgPDwgMTApCS8qIG92ZXJydW4gZXJyb3IgaW50ZXJydXB0IGNsZWFyICovCisjZGVmaW5lIFVBUlQwMTFfQkVJQwkJKDEgPDwgOSkJLyogYnJlYWsgZXJyb3IgaW50ZXJydXB0IGNsZWFyICovCisjZGVmaW5lIFVBUlQwMTFfUEVJQwkJKDEgPDwgOCkJLyogcGFyaXR5IGVycm9yIGludGVycnVwdCBjbGVhciAqLworI2RlZmluZSBVQVJUMDExX0ZFSUMJCSgxIDw8IDcpCS8qIGZyYW1pbmcgZXJyb3IgaW50ZXJydXB0IGNsZWFyICovCisjZGVmaW5lIFVBUlQwMTFfUlRJQwkJKDEgPDwgNikJLyogcmVjZWl2ZSB0aW1lb3V0IGludGVycnVwdCBjbGVhciAqLworI2RlZmluZSBVQVJUMDExX1RYSUMJCSgxIDw8IDUpCS8qIHRyYW5zbWl0IGludGVycnVwdCBjbGVhciAqLworI2RlZmluZSBVQVJUMDExX1JYSUMJCSgxIDw8IDQpCS8qIHJlY2VpdmUgaW50ZXJydXB0IGNsZWFyICovCisjZGVmaW5lIFVBUlQwMTFfRFNSTUlDCQkoMSA8PCAzKQkvKiBEU1IgaW50ZXJydXB0IGNsZWFyICovCisjZGVmaW5lIFVBUlQwMTFfRENETUlDCQkoMSA8PCAyKQkvKiBEQ0QgaW50ZXJydXB0IGNsZWFyICovCisjZGVmaW5lIFVBUlQwMTFfQ1RTTUlDCQkoMSA8PCAxKQkvKiBDVFMgaW50ZXJydXB0IGNsZWFyICovCisjZGVmaW5lIFVBUlQwMTFfUklNSUMJCSgxIDw8IDApCS8qIFJJIGludGVycnVwdCBjbGVhciAqLworCisjZGVmaW5lIFVBUlQwMTFfRE1BT05FUlIJKDEgPDwgMikJLyogZGlzYWJsZSBkbWEgb24gZXJyb3IgKi8KKyNkZWZpbmUgVUFSVDAxMV9UWERNQUUJCSgxIDw8IDEpCS8qIGVuYWJsZSB0cmFuc21pdCBkbWEgKi8KKyNkZWZpbmUgVUFSVDAxMV9SWERNQUUJCSgxIDw8IDApCS8qIGVuYWJsZSByZWNlaXZlIGRtYSAqLworCisjZGVmaW5lIFVBUlQwMXhfUlNSX0FOWQkJKFVBUlQwMXhfUlNSX09FfFVBUlQwMXhfUlNSX0JFfFVBUlQwMXhfUlNSX1BFfFVBUlQwMXhfUlNSX0ZFKQorI2RlZmluZSBVQVJUMDF4X0ZSX01PREVNX0FOWQkoVUFSVDAxeF9GUl9EQ0R8VUFSVDAxeF9GUl9EU1J8VUFSVDAxeF9GUl9DVFMpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL2Nsb2NrLmggYi9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvY2xvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTgzNDQ5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL2Nsb2NrLmgKQEAgLTAsMCArMSwxMjEgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL2Nsb2NrLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0IEFSTSBMaW1pdGVkLgorICogIFdyaXR0ZW4gYnkgRGVlcCBCbHVlIFNvbHV0aW9ucyBMaW1pdGVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpZm5kZWYgQVNNQVJNX0NMT0NLX0gKKyNkZWZpbmUgQVNNQVJNX0NMT0NLX0gKKworc3RydWN0IGRldmljZTsKKworLyoKKyAqIFRoZSBiYXNlIEFQSS4KKyAqLworCisKKy8qCisgKiBzdHJ1Y3QgY2xrIC0gYW4gbWFjaGluZSBjbGFzcyBkZWZpbmVkIG9iamVjdCAvIGNvb2tpZS4KKyAqLworc3RydWN0IGNsazsKKworLyoqCisgKiBjbGtfZ2V0IC0gbG9va3VwIGFuZCBvYnRhaW4gYSByZWZlcmVuY2UgdG8gYSBjbG9jayBwcm9kdWNlci4KKyAqIEBkZXY6IGRldmljZSBmb3IgY2xvY2sgImNvbnN1bWVyIgorICogQGlkOiBkZXZpY2UgSUQKKyAqCisgKiBSZXR1cm5zIGEgc3RydWN0IGNsayBjb3JyZXNwb25kaW5nIHRvIHRoZSBjbG9jayBwcm9kdWNlciwgb3IKKyAqIHZhbGlkIElTX0VSUigpIGNvbmRpdGlvbiBjb250YWluaW5nIGVycm5vLgorICovCitzdHJ1Y3QgY2xrICpjbGtfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqaWQpOworCisvKioKKyAqIGNsa19lbmFibGUgLSBpbmZvcm0gdGhlIHN5c3RlbSB3aGVuIHRoZSBjbG9jayBzb3VyY2Ugc2hvdWxkIGJlIHJ1bm5pbmcuCisgKiBAY2xrOiBjbG9jayBzb3VyY2UKKyAqCisgKiBJZiB0aGUgY2xvY2sgY2FuIG5vdCBiZSBlbmFibGVkL2Rpc2FibGVkLCB0aGlzIHNob3VsZCByZXR1cm4gc3VjY2Vzcy4KKyAqCisgKiBSZXR1cm5zIHN1Y2Nlc3MgKDApIG9yIG5lZ2F0aXZlIGVycm5vLgorICovCitpbnQgY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspOworCisvKioKKyAqIGNsa19kaXNhYmxlIC0gaW5mb3JtIHRoZSBzeXN0ZW0gd2hlbiB0aGUgY2xvY2sgc291cmNlIGlzIG5vIGxvbmdlciByZXF1aXJlZC4KKyAqIEBjbGs6IGNsb2NrIHNvdXJjZQorICovCit2b2lkIGNsa19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsayk7CisKKy8qKgorICogY2xrX3VzZSAtIGluY3JlbWVudCB0aGUgdXNlIGNvdW50CisgKiBAY2xrOiBjbG9jayBzb3VyY2UKKyAqCisgKiBSZXR1cm5zIHN1Y2Nlc3MgKDApIG9yIG5lZ2F0aXZlIGVycm5vLgorICovCitpbnQgY2xrX3VzZShzdHJ1Y3QgY2xrICpjbGspOworCisvKioKKyAqIGNsa191bnVzZSAtIGRlY3JlbWVudCB0aGUgdXNlIGNvdW50CisgKiBAY2xrOiBjbG9jayBzb3VyY2UKKyAqLwordm9pZCBjbGtfdW51c2Uoc3RydWN0IGNsayAqY2xrKTsKKworLyoqCisgKiBjbGtfZ2V0X3JhdGUgLSBvYnRhaW4gdGhlIGN1cnJlbnQgY2xvY2sgcmF0ZSAoaW4gSHopIGZvciBhIGNsb2NrIHNvdXJjZS4KKyAqCQkgIFRoaXMgaXMgb25seSB2YWxpZCBvbmNlIHRoZSBjbG9jayBzb3VyY2UgaGFzIGJlZW4gZW5hYmxlZC4KKyAqIEBjbGs6IGNsb2NrIHNvdXJjZQorICovCit1bnNpZ25lZCBsb25nIGNsa19nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspOworCisvKioKKyAqIGNsa19wdXQJLSAiZnJlZSIgdGhlIGNsb2NrIHNvdXJjZQorICogQGNsazogY2xvY2sgc291cmNlCisgKi8KK3ZvaWQgY2xrX3B1dChzdHJ1Y3QgY2xrICpjbGspOworCisKKy8qCisgKiBUaGUgcmVtYWluaW5nIEFQSXMgYXJlIG9wdGlvbmFsIGZvciBtYWNoaW5lIGNsYXNzIHN1cHBvcnQuCisgKi8KKworCisvKioKKyAqIGNsa19yb3VuZF9yYXRlIC0gYWRqdXN0IGEgcmF0ZSB0byB0aGUgZXhhY3QgcmF0ZSBhIGNsb2NrIGNhbiBwcm92aWRlCisgKiBAY2xrOiBjbG9jayBzb3VyY2UKKyAqIEByYXRlOiBkZXNpcmVkIGNsb2NrIHJhdGUgaW4gSHoKKyAqCisgKiBSZXR1cm5zIHJvdW5kZWQgY2xvY2sgcmF0ZSBpbiBIeiwgb3IgbmVnYXRpdmUgZXJybm8uCisgKi8KK2xvbmcgY2xrX3JvdW5kX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpOworIAorLyoqCisgKiBjbGtfc2V0X3JhdGUgLSBzZXQgdGhlIGNsb2NrIHJhdGUgZm9yIGEgY2xvY2sgc291cmNlCisgKiBAY2xrOiBjbG9jayBzb3VyY2UKKyAqIEByYXRlOiBkZXNpcmVkIGNsb2NrIHJhdGUgaW4gSHoKKyAqCisgKiBSZXR1cm5zIHN1Y2Nlc3MgKDApIG9yIG5lZ2F0aXZlIGVycm5vLgorICovCitpbnQgY2xrX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKKyAKKy8qKgorICogY2xrX3NldF9wYXJlbnQgLSBzZXQgdGhlIHBhcmVudCBjbG9jayBzb3VyY2UgZm9yIHRoaXMgY2xvY2sKKyAqIEBjbGs6IGNsb2NrIHNvdXJjZQorICogQHBhcmVudDogcGFyZW50IGNsb2NrIHNvdXJjZQorICoKKyAqIFJldHVybnMgc3VjY2VzcyAoMCkgb3IgbmVnYXRpdmUgZXJybm8uCisgKi8KK2ludCBjbGtfc2V0X3BhcmVudChzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKnBhcmVudCk7CisKKy8qKgorICogY2xrX2dldF9wYXJlbnQgLSBnZXQgdGhlIHBhcmVudCBjbG9jayBzb3VyY2UgZm9yIHRoaXMgY2xvY2sKKyAqIEBjbGs6IGNsb2NrIHNvdXJjZQorICoKKyAqIFJldHVybnMgc3RydWN0IGNsayBjb3JyZXNwb25kaW5nIHRvIHBhcmVudCBjbG9jayBzb3VyY2UsIG9yCisgKiB2YWxpZCBJU19FUlIoKSBjb25kaXRpb24gY29udGFpbmluZyBlcnJuby4KKyAqLworc3RydWN0IGNsayAqY2xrX2dldF9wYXJlbnQoc3RydWN0IGNsayAqY2xrKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvY2xwczcxMTEuaCBiL2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9jbHBzNzExMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkMzIyOGQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvY2xwczcxMTEuaApAQCAtMCwwICsxLDE4NCBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvY2xwczcxMTEuaAorICoKKyAqICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGhhcmR3YXJlIGRlZmluaXRpb25zIG9mIHRoZSBDTFBTNzExMSBpbnRlcm5hbAorICogIHJlZ2lzdGVycy4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwIERlZXAgQmx1ZSBTb2x1dGlvbnMgTHRkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworI2lmbmRlZiBfX0FTTV9IQVJEV0FSRV9DTFBTNzExMV9ICisjZGVmaW5lIF9fQVNNX0hBUkRXQVJFX0NMUFM3MTExX0gKKworI2RlZmluZSBDTFBTNzExMV9QSFlTX0JBU0UJKDB4ODAwMDAwMDApCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjZGVmaW5lIGNscHNfcmVhZGIob2ZmKQkJX19yYXdfcmVhZGIoQ0xQUzcxMTFfQkFTRSArIChvZmYpKQorI2RlZmluZSBjbHBzX3JlYWR3KG9mZikJCV9fcmF3X3JlYWR3KENMUFM3MTExX0JBU0UgKyAob2ZmKSkKKyNkZWZpbmUgY2xwc19yZWFkbChvZmYpCQlfX3Jhd19yZWFkbChDTFBTNzExMV9CQVNFICsgKG9mZikpCisjZGVmaW5lIGNscHNfd3JpdGViKHZhbCxvZmYpCV9fcmF3X3dyaXRlYih2YWwsIENMUFM3MTExX0JBU0UgKyAob2ZmKSkKKyNkZWZpbmUgY2xwc193cml0ZXcodmFsLG9mZikJX19yYXdfd3JpdGV3KHZhbCwgQ0xQUzcxMTFfQkFTRSArIChvZmYpKQorI2RlZmluZSBjbHBzX3dyaXRlbCh2YWwsb2ZmKQlfX3Jhd193cml0ZWwodmFsLCBDTFBTNzExMV9CQVNFICsgKG9mZikpCisjZW5kaWYKKworI2RlZmluZSBQQURSCQkoMHgwMDAwKQorI2RlZmluZSBQQkRSCQkoMHgwMDAxKQorI2RlZmluZSBQRERSCQkoMHgwMDAzKQorI2RlZmluZSBQQUREUgkJKDB4MDA0MCkKKyNkZWZpbmUgUEJERFIJCSgweDAwNDEpCisjZGVmaW5lIFBERERSCQkoMHgwMDQzKQorI2RlZmluZSBQRURSCQkoMHgwMDgwKQorI2RlZmluZSBQRUREUgkJKDB4MDBjMCkKKyNkZWZpbmUgU1lTQ09OMQkJKDB4MDEwMCkKKyNkZWZpbmUgU1lTRkxHMQkJKDB4MDE0MCkKKyNkZWZpbmUgTUVNQ0ZHMQkJKDB4MDE4MCkKKyNkZWZpbmUgTUVNQ0ZHMgkJKDB4MDFjMCkKKyNkZWZpbmUgRFJGUFIJCSgweDAyMDApCisjZGVmaW5lIElOVFNSMQkJKDB4MDI0MCkKKyNkZWZpbmUgSU5UTVIxCQkoMHgwMjgwKQorI2RlZmluZSBMQ0RDT04JCSgweDAyYzApCisjZGVmaW5lIFRDMUQgICAgICAgICAgICAoMHgwMzAwKQorI2RlZmluZSBUQzJECQkoMHgwMzQwKQorI2RlZmluZSBSVENEUgkJKDB4MDM4MCkKKyNkZWZpbmUgUlRDTVIJCSgweDAzYzApCisjZGVmaW5lIFBNUENPTgkJKDB4MDQwMCkKKyNkZWZpbmUgQ09EUgkJKDB4MDQ0MCkKKyNkZWZpbmUgVUFSVERSMQkJKDB4MDQ4MCkKKyNkZWZpbmUgVUJSTENSMQkJKDB4MDRjMCkKKyNkZWZpbmUgU1lOQ0lPCQkoMHgwNTAwKQorI2RlZmluZSBQQUxMU1cJCSgweDA1NDApCisjZGVmaW5lIFBBTE1TVwkJKDB4MDU4MCkKKyNkZWZpbmUgU1RGQ0xSCQkoMHgwNWMwKQorI2RlZmluZSBCTEVPSQkJKDB4MDYwMCkKKyNkZWZpbmUgTUNFT0kJCSgweDA2NDApCisjZGVmaW5lIFRFT0kJCSgweDA2ODApCisjZGVmaW5lIFRDMUVPSQkJKDB4MDZjMCkKKyNkZWZpbmUgVEMyRU9JCQkoMHgwNzAwKQorI2RlZmluZSBSVENFT0kJCSgweDA3NDApCisjZGVmaW5lIFVNU0VPSQkJKDB4MDc4MCkKKyNkZWZpbmUgQ09FT0kJCSgweDA3YzApCisjZGVmaW5lIEhBTFQJCSgweDA4MDApCisjZGVmaW5lIFNUREJZCQkoMHgwODQwKQorCisjZGVmaW5lIEZCQUREUgkJKDB4MTAwMCkKKyNkZWZpbmUgU1lTQ09OMgkJKDB4MTEwMCkKKyNkZWZpbmUgU1lTRkxHMgkJKDB4MTE0MCkKKyNkZWZpbmUgSU5UU1IyCQkoMHgxMjQwKQorI2RlZmluZSBJTlRNUjIJCSgweDEyODApCisjZGVmaW5lIFVBUlREUjIJCSgweDE0ODApCisjZGVmaW5lIFVCUkxDUjIJCSgweDE0YzApCisjZGVmaW5lIFNTMkRSCQkoMHgxNTAwKQorI2RlZmluZSBTUlhFT0YJCSgweDE2MDApCisjZGVmaW5lIFNTMlBPUAkJKDB4MTZjMCkKKyNkZWZpbmUgS0JERU9JCQkoMHgxNzAwKQorCisvKiBjb21tb24gYml0czogU1lTQ09OMSAvIFNZU0NPTjIgKi8KKyNkZWZpbmUgU1lTQ09OX1VBUlRFTgkJKDEgPDwgOCkKKworI2RlZmluZSBTWVNDT04xX0tCRFNDQU4oeCkJKCh4KSAmIDE1KQorI2RlZmluZSBTWVNDT04xX0tCRFNDQU5NQVNLCSgxNSkKKyNkZWZpbmUgU1lTQ09OMV9UQzFNCQkoMSA8PCA0KQorI2RlZmluZSBTWVNDT04xX1RDMVMJCSgxIDw8IDUpCisjZGVmaW5lIFNZU0NPTjFfVEMyTQkJKDEgPDwgNikKKyNkZWZpbmUgU1lTQ09OMV9UQzJTCQkoMSA8PCA3KQorI2RlZmluZSBTWVNDT04xX1VBUlQxRU4JCVNZU0NPTl9VQVJURU4KKyNkZWZpbmUgU1lTQ09OMV9CWlRPRwkJKDEgPDwgOSkKKyNkZWZpbmUgU1lTQ09OMV9CWk1PRAkJKDEgPDwgMTApCisjZGVmaW5lIFNZU0NPTjFfREJHRU4JCSgxIDw8IDExKQorI2RlZmluZSBTWVNDT04xX0xDREVOCQkoMSA8PCAxMikKKyNkZWZpbmUgU1lTQ09OMV9DREVOVFgJCSgxIDw8IDEzKQorI2RlZmluZSBTWVNDT04xX0NERU5SWAkJKDEgPDwgMTQpCisjZGVmaW5lIFNZU0NPTjFfU0lSRU4JCSgxIDw8IDE1KQorI2RlZmluZSBTWVNDT04xX0FEQ0tTRUwoeCkJKCgoeCkgJiAzKSA8PCAxNikKKyNkZWZpbmUgU1lTQ09OMV9BRENLU0VMX01BU0sJKDMgPDwgMTYpCisjZGVmaW5lIFNZU0NPTjFfRVhDS0VOCQkoMSA8PCAxOCkKKyNkZWZpbmUgU1lTQ09OMV9XQUtFRElTCQkoMSA8PCAxOSkKKyNkZWZpbmUgU1lTQ09OMV9JUlRYTQkJKDEgPDwgMjApCisKKy8qIGNvbW1vbiBiaXRzOiBTWVNGTEcxIC8gU1lTRkxHMiAqLworI2RlZmluZSBTWVNGTEdfVUJVU1kJCSgxIDw8IDExKQorI2RlZmluZSBTWVNGTEdfVVJYRkUJCSgxIDw8IDIyKQorI2RlZmluZSBTWVNGTEdfVVRYRkYJCSgxIDw8IDIzKQorCisjZGVmaW5lIFNZU0ZMRzFfTUNEUgkJKDEgPDwgMCkKKyNkZWZpbmUgU1lTRkxHMV9EQ0RFVAkJKDEgPDwgMSkKKyNkZWZpbmUgU1lTRkxHMV9XVURSCQkoMSA8PCAyKQorI2RlZmluZSBTWVNGTEcxX1dVT04JCSgxIDw8IDMpCisjZGVmaW5lIFNZU0ZMRzFfQ1RTCQkoMSA8PCA4KQorI2RlZmluZSBTWVNGTEcxX0RTUgkJKDEgPDwgOSkKKyNkZWZpbmUgU1lTRkxHMV9EQ0QJCSgxIDw8IDEwKQorI2RlZmluZSBTWVNGTEcxX1VCVVNZCQlTWVNGTEdfVUJVU1kKKyNkZWZpbmUgU1lTRkxHMV9OQkZMRwkJKDEgPDwgMTIpCisjZGVmaW5lIFNZU0ZMRzFfUlNURkxHCQkoMSA8PCAxMykKKyNkZWZpbmUgU1lTRkxHMV9QRkZMRwkJKDEgPDwgMTQpCisjZGVmaW5lIFNZU0ZMRzFfQ0xERkxHCQkoMSA8PCAxNSkKKyNkZWZpbmUgU1lTRkxHMV9VUlhGRQkJU1lTRkxHX1VSWEZFCisjZGVmaW5lIFNZU0ZMRzFfVVRYRkYJCVNZU0ZMR19VVFhGRgorI2RlZmluZSBTWVNGTEcxX0NSWEZFCQkoMSA8PCAyNCkKKyNkZWZpbmUgU1lTRkxHMV9DVFhGRgkJKDEgPDwgMjUpCisjZGVmaW5lIFNZU0ZMRzFfU1NJQlVTWQkJKDEgPDwgMjYpCisjZGVmaW5lIFNZU0ZMRzFfSUQJCSgxIDw8IDI5KQorCisjZGVmaW5lIFNZU0ZMRzJfU1NSWE9GCQkoMSA8PCAwKQorI2RlZmluZSBTWVNGTEcyX1JFU1ZBTAkJKDEgPDwgMSkKKyNkZWZpbmUgU1lTRkxHMl9SRVNGUk0JCSgxIDw8IDIpCisjZGVmaW5lIFNZU0ZMRzJfU1MyUlhGRQkJKDEgPDwgMykKKyNkZWZpbmUgU1lTRkxHMl9TUzJUWEZGCQkoMSA8PCA0KQorI2RlZmluZSBTWVNGTEcyX1NTMlRYVUYJCSgxIDw8IDUpCisjZGVmaW5lIFNZU0ZMRzJfQ0tNT0RFCQkoMSA8PCA2KQorI2RlZmluZSBTWVNGTEcyX1VCVVNZCQlTWVNGTEdfVUJVU1kKKyNkZWZpbmUgU1lTRkxHMl9VUlhGRQkJU1lTRkxHX1VSWEZFCisjZGVmaW5lIFNZU0ZMRzJfVVRYRkYJCVNZU0ZMR19VVFhGRgorCisjZGVmaW5lIExDRENPTl9HU0VOCQkoMSA8PCAzMCkKKyNkZWZpbmUgTENEQ09OX0dTTUQJCSgxIDw8IDMxKQorCisjZGVmaW5lIFNZU0NPTjJfU0VSU0VMCQkoMSA8PCAwKQorI2RlZmluZSBTWVNDT04yX0tCRDYJCSgxIDw8IDEpCisjZGVmaW5lIFNZU0NPTjJfRFJBTVoJCSgxIDw8IDIpCisjZGVmaW5lIFNZU0NPTjJfS0JXRU4JCSgxIDw8IDMpCisjZGVmaW5lIFNZU0NPTjJfU1MyVFhFTgkJKDEgPDwgNCkKKyNkZWZpbmUgU1lTQ09OMl9QQ0NBUkQxCQkoMSA8PCA1KQorI2RlZmluZSBTWVNDT04yX1BDQ0FSRDIJCSgxIDw8IDYpCisjZGVmaW5lIFNZU0NPTjJfU1MyUlhFTgkJKDEgPDwgNykKKyNkZWZpbmUgU1lTQ09OMl9VQVJUMkVOCQlTWVNDT05fVUFSVEVOCisjZGVmaW5lIFNZU0NPTjJfU1MyTUFFTgkJKDEgPDwgOSkKKyNkZWZpbmUgU1lTQ09OMl9PU1RCCQkoMSA8PCAxMikKKyNkZWZpbmUgU1lTQ09OMl9DTEtFTlNMCQkoMSA8PCAxMykKKyNkZWZpbmUgU1lTQ09OMl9CVVpGUkVRCQkoMSA8PCAxNCkKKworLyogY29tbW9uIGJpdHM6IFVBUlREUjEgLyBVQVJURFIyICovCisjZGVmaW5lIFVBUlREUl9GUk1FUlIJCSgxIDw8IDgpCisjZGVmaW5lIFVBUlREUl9QQVJFUlIJCSgxIDw8IDkpCisjZGVmaW5lIFVBUlREUl9PVkVSUgkJKDEgPDwgMTApCisKKy8qIGNvbW1vbiBiaXRzOiBVQlJMQ1IxIC8gVUJSTENSMiAqLworI2RlZmluZSBVQlJMQ1JfQkFVRF9NQVNLCSgoMSA8PCAxMikgLSAxKQorI2RlZmluZSBVQlJMQ1JfQlJFQUsJCSgxIDw8IDEyKQorI2RlZmluZSBVQlJMQ1JfUFJURU4JCSgxIDw8IDEzKQorI2RlZmluZSBVQlJMQ1JfRVZFTlBSVAkJKDEgPDwgMTQpCisjZGVmaW5lIFVCUkxDUl9YU1RPUAkJKDEgPDwgMTUpCisjZGVmaW5lIFVCUkxDUl9GSUZPRU4JCSgxIDw8IDE2KQorI2RlZmluZSBVQlJMQ1JfV1JETEVONQkJKDAgPDwgMTcpCisjZGVmaW5lIFVCUkxDUl9XUkRMRU42CQkoMSA8PCAxNykKKyNkZWZpbmUgVUJSTENSX1dSRExFTjcJCSgyIDw8IDE3KQorI2RlZmluZSBVQlJMQ1JfV1JETEVOOAkJKDMgPDwgMTcpCisjZGVmaW5lIFVCUkxDUl9XUkRMRU5fTUFTSwkoMyA8PCAxNykKKworI2RlZmluZSBTWU5DSU9fU01DS0VOCQkoMSA8PCAxMykKKyNkZWZpbmUgU1lOQ0lPX1RYRlJNRU4JCSgxIDw8IDE0KQorCisjZW5kaWYgLyogX19BU01fSEFSRFdBUkVfQ0xQUzcxMTFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL2NzODk3MTIuaCBiL2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9jczg5NzEyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ5OWEzZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9jczg5NzEyLmgKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvY3M4OTcxMi5oCisgKgorICogIFRoaXMgZmlsZSBjb250YWlucyB0aGUgaGFyZHdhcmUgZGVmaW5pdGlvbnMgb2YgdGhlIENTODk3MTIKKyAqICBhZGRpdGlvbmFsIGludGVybmFsIHJlZ2lzdGVycy4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFRob21hcyBHbGVpeG5lciBhdXRyb25peCBhdXRvbWF0aW9uIDxnbGVpeG5lckBhdXRyb25peC5kZT4KKyAqCQkJCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisjaWZuZGVmIF9fQVNNX0hBUkRXQVJFX0NTODk3MTJfSAorI2RlZmluZSBfX0FTTV9IQVJEV0FSRV9DUzg5NzEyX0gKKworLyoKKyoJQ1M4OTcxMiBhZGRpdGlvbmFsIHJlZ2lzdGVycworKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyNkZWZpbmUgUENEUgkJCTB4MDAwMgkvKiBQb3J0IEMgRGF0YSByZWdpc3RlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBDRERSCQkJMHgwMDQyCS8qIFBvcnQgQyBEYXRhIERpcmVjdGlvbiByZWdpc3RlciAtLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgU0RDT05GCQkJMHgyMzAwICAvKiBTRFJBTSBDb25maWd1cmF0aW9uIHJlZ2lzdGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFNEUkZQUgkJCTB4MjM0MCAgLyogU0RSQU0gUmVmcmVzaCBwZXJpb2QgcmVnaXN0ZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZGVmaW5lIFNEQ09ORl9BQ1RJVkUJCSgxIDw8IDEwKQorI2RlZmluZSBTRENPTkZfQ0xLQ1RMCQkoMSA8PCA5KQorI2RlZmluZSBTRENPTkZfV0lEVEhfNAkJKDAgPDwgNykKKyNkZWZpbmUgU0RDT05GX1dJRFRIXzgJCSgxIDw8IDcpCisjZGVmaW5lIFNEQ09ORl9XSURUSF8xNgkJKDIgPDwgNykKKyNkZWZpbmUgU0RDT05GX1dJRFRIXzMyCQkoMyA8PCA3KQorI2RlZmluZSBTRENPTkZfU0laRV8xNgkJKDAgPDwgNSkKKyNkZWZpbmUgU0RDT05GX1NJWkVfNjQJCSgxIDw8IDUpCisjZGVmaW5lIFNEQ09ORl9TSVpFXzEyOAkJKDIgPDwgNSkKKyNkZWZpbmUgU0RDT05GX1NJWkVfMjU2CQkoMyA8PCA1KQorI2RlZmluZSBTRENPTkZfQ0FTTEFUXzIJCSgyKQorI2RlZmluZSBTRENPTkZfQ0FTTEFUXzMJCSgzKQorCisjZW5kaWYgLyogX19BU01fSEFSRFdBUkVfQ1M4OTcxMl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvZGVjMjEyODUuaCBiL2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9kZWMyMTI4NS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwNDlmMGQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvZGVjMjEyODUuaApAQCAtMCwwICsxLDE0OCBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvZGVjMjEyODUuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTggUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgREMyMTI4NSByZWdpc3RlcnMKKyAqLworI2RlZmluZSBEQzIxMjg1X1BDSV9JQUNLCQkweDc5MDAwMDAwCisjZGVmaW5lIERDMjEyODVfQVJNQ1NSX0JBU0UJCTB4NDIwMDAwMDAKKyNkZWZpbmUgREMyMTI4NV9QQ0lfVFlQRV8wX0NPTkZJRwkweDdiMDAwMDAwCisjZGVmaW5lIERDMjEyODVfUENJX1RZUEVfMV9DT05GSUcJMHg3YTAwMDAwMAorI2RlZmluZSBEQzIxMjg1X09VVEJPVU5EX1dSSVRFX0ZMVVNICTB4NzgwMDAwMDAKKyNkZWZpbmUgREMyMTI4NV9GTEFTSAkJCTB4NDEwMDAwMDAKKyNkZWZpbmUgREMyMTI4NV9QQ0lfSU8JCQkweDdjMDAwMDAwCisjZGVmaW5lIERDMjEyODVfUENJX01FTQkJCTB4ODAwMDAwMDAKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgorI2RlZmluZSBEQzIxMjg1X0lPKHgpCQkoKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoQVJNQ1NSX0JBU0UrKHgpKSkKKyNlbHNlCisjZGVmaW5lIERDMjEyODVfSU8oeCkJCSh4KQorI2VuZGlmCisKKyNkZWZpbmUgQ1NSX1BDSUNNRAkJREMyMTI4NV9JTygweDAwMDQpCisjZGVmaW5lIENTUl9DTEFTU1JFVgkJREMyMTI4NV9JTygweDAwMDgpCisjZGVmaW5lIENTUl9QQ0lDQUNIRUxJTkVTSVpFCURDMjEyODVfSU8oMHgwMDBjKQorI2RlZmluZSBDU1JfUENJQ1NSQkFTRQkJREMyMTI4NV9JTygweDAwMTApCisjZGVmaW5lIENTUl9QQ0lDU1JJT0JBU0UJREMyMTI4NV9JTygweDAwMTQpCisjZGVmaW5lIENTUl9QQ0lTRFJBTUJBU0UJREMyMTI4NV9JTygweDAwMTgpCisjZGVmaW5lIENTUl9QQ0lST01CQVNFCQlEQzIxMjg1X0lPKDB4MDAzMCkKKyNkZWZpbmUgQ1NSX01CT1gwCQlEQzIxMjg1X0lPKDB4MDA1MCkKKyNkZWZpbmUgQ1NSX01CT1gxCQlEQzIxMjg1X0lPKDB4MDA1NCkKKyNkZWZpbmUgQ1NSX01CT1gyCQlEQzIxMjg1X0lPKDB4MDA1OCkKKyNkZWZpbmUgQ1NSX01CT1gzCQlEQzIxMjg1X0lPKDB4MDA1YykKKyNkZWZpbmUgQ1NSX0RPT1JCRUxMCQlEQzIxMjg1X0lPKDB4MDA2MCkKKyNkZWZpbmUgQ1NSX0RPT1JCRUxMX1NFVFVQCURDMjEyODVfSU8oMHgwMDY0KQorI2RlZmluZSBDU1JfUk9NV1JJVEVSRUcJCURDMjEyODVfSU8oMHgwMDY4KQorI2RlZmluZSBDU1JfQ1NSQkFTRU1BU0sJCURDMjEyODVfSU8oMHgwMGY4KQorI2RlZmluZSBDU1JfQ1NSQkFTRU9GRlNFVAlEQzIxMjg1X0lPKDB4MDBmYykKKyNkZWZpbmUgQ1NSX1NEUkFNQkFTRU1BU0sJREMyMTI4NV9JTygweDAxMDApCisjZGVmaW5lIENTUl9TRFJBTUJBU0VPRkZTRVQJREMyMTI4NV9JTygweDAxMDQpCisjZGVmaW5lIENTUl9ST01CQVNFTUFTSwkJREMyMTI4NV9JTygweDAxMDgpCisjZGVmaW5lIENTUl9TRFJBTVRJTUlORwkJREMyMTI4NV9JTygweDAxMGMpCisjZGVmaW5lIENTUl9TRFJBTUFERFJTSVpFMAlEQzIxMjg1X0lPKDB4MDExMCkKKyNkZWZpbmUgQ1NSX1NEUkFNQUREUlNJWkUxCURDMjEyODVfSU8oMHgwMTE0KQorI2RlZmluZSBDU1JfU0RSQU1BRERSU0laRTIJREMyMTI4NV9JTygweDAxMTgpCisjZGVmaW5lIENTUl9TRFJBTUFERFJTSVpFMwlEQzIxMjg1X0lPKDB4MDExYykKKyNkZWZpbmUgQ1NSX0kyT19JTkZSRUVIRUFECURDMjEyODVfSU8oMHgwMTIwKQorI2RlZmluZSBDU1JfSTJPX0lOUE9TVFRBSUwJREMyMTI4NV9JTygweDAxMjQpCisjZGVmaW5lIENTUl9JMk9fT1VUUE9TVEhFQUQJREMyMTI4NV9JTygweDAxMjgpCisjZGVmaW5lIENTUl9JMk9fT1VURlJFRVRBSUwJREMyMTI4NV9JTygweDAxMmMpCisjZGVmaW5lIENTUl9JMk9fSU5GUkVFQ09VTlQJREMyMTI4NV9JTygweDAxMzApCisjZGVmaW5lIENTUl9JMk9fT1VUUE9TVENPVU5UCURDMjEyODVfSU8oMHgwMTM0KQorI2RlZmluZSBDU1JfSTJPX0lOUE9TVENPVU5UCURDMjEyODVfSU8oMHgwMTM4KQorI2RlZmluZSBDU1JfU0ExMTBfQ05UTAkJREMyMTI4NV9JTygweDAxM2MpCisjZGVmaW5lIFNBMTEwX0NOVExfSU5JVENNUExFVEUJCSgxIDw8IDApCisjZGVmaW5lIFNBMTEwX0NOVExfQVNTRVJUU0VSUgkJKDEgPDwgMSkKKyNkZWZpbmUgU0ExMTBfQ05UTF9SWFNFUlIJCSgxIDw8IDMpCisjZGVmaW5lIFNBMTEwX0NOVExfU0ExMTBEUkFNUEFSSVRZCSgxIDw8IDQpCisjZGVmaW5lIFNBMTEwX0NOVExfUENJU0RSQU1QQVJJVFkJKDEgPDwgNSkKKyNkZWZpbmUgU0ExMTBfQ05UTF9ETUFTRFJBTVBBUklUWQkoMSA8PCA2KQorI2RlZmluZSBTQTExMF9DTlRMX0RJU0NBUkRUSU1FUgkJKDEgPDwgOCkKKyNkZWZpbmUgU0ExMTBfQ05UTF9QQ0lOUkVTRVQJCSgxIDw8IDkpCisjZGVmaW5lIFNBMTEwX0NOVExfSTJPXzI1NgkJKDAgPDwgMTApCisjZGVmaW5lIFNBMTEwX0NOVExfSTIwXzUxMgkJKDEgPDwgMTApCisjZGVmaW5lIFNBMTEwX0NOVExfSTJPXzEwMjQJCSgyIDw8IDEwKQorI2RlZmluZSBTQTExMF9DTlRMX0kyT18yMDQ4CQkoMyA8PCAxMCkKKyNkZWZpbmUgU0ExMTBfQ05UTF9JMk9fNDA5NgkJKDQgPDwgMTApCisjZGVmaW5lIFNBMTEwX0NOVExfSTJPXzgxOTIJCSg1IDw8IDEwKQorI2RlZmluZSBTQTExMF9DTlRMX0kyT18xNjM4NAkJKDYgPDwgMTApCisjZGVmaW5lIFNBMTEwX0NOVExfSTJPXzMyNzY4CQkoNyA8PCAxMCkKKyNkZWZpbmUgU0ExMTBfQ05UTF9XQVRDSERPRwkJKDEgPDwgMTMpCisjZGVmaW5lIFNBMTEwX0NOVExfUk9NV0lEVEhfVU5ERUYJKDAgPDwgMTQpCisjZGVmaW5lIFNBMTEwX0NOVExfUk9NV0lEVEhfMTYJCSgxIDw8IDE0KQorI2RlZmluZSBTQTExMF9DTlRMX1JPTVdJRFRIXzMyCQkoMiA8PCAxNCkKKyNkZWZpbmUgU0ExMTBfQ05UTF9ST01XSURUSF84CQkoMyA8PCAxNCkKKyNkZWZpbmUgU0ExMTBfQ05UTF9ST01BQ0NFU1NUSU1FKHgpCSgoeCk8PDE2KQorI2RlZmluZSBTQTExMF9DTlRMX1JPTUJVUlNUVElNRSh4KQkoKHgpPDwyMCkKKyNkZWZpbmUgU0ExMTBfQ05UTF9ST01UUklTVEFURVRJTUUoeCkJKCh4KTw8MjQpCisjZGVmaW5lIFNBMTEwX0NOVExfWENTRElSKHgpCQkoKHgpPDwyOCkKKyNkZWZpbmUgU0ExMTBfQ05UTF9QQ0lDRk4JCSgxIDw8IDMxKQorCisvKgorICogZm9vdGJyaWRnZV9jZm5fbW9kZSgpIGlzIHVzZWQgd2hlbiB3ZSB3YW50CisgKiB0byBjaGVjayB3aGV0aGVyIHdlIGFyZSB0aGUgY2VudHJhbCBmdW5jdGlvbgorICovCisjZGVmaW5lIF9fZm9vdGJyaWRnZV9jZm5fbW9kZSgpICgqQ1NSX1NBMTEwX0NOVEwgJiBTQTExMF9DTlRMX1BDSUNGTikKKyNpZiBkZWZpbmVkKENPTkZJR19GT09UQlJJREdFX0hPU1QpICYmIGRlZmluZWQoQ09ORklHX0ZPT1RCUklER0VfQURESU4pCisjZGVmaW5lIGZvb3RicmlkZ2VfY2ZuX21vZGUoKSBfX2Zvb3RicmlkZ2VfY2ZuX21vZGUoKQorI2VsaWYgZGVmaW5lZChDT05GSUdfRk9PVEJSSURHRV9IT1NUKQorI2RlZmluZSBmb290YnJpZGdlX2Nmbl9tb2RlKCkgKDEpCisjZWxzZQorI2RlZmluZSBmb290YnJpZGdlX2Nmbl9tb2RlKCkgKDApCisjZW5kaWYKKworI2RlZmluZSBDU1JfUENJQUREUl9FWFROCURDMjEyODVfSU8oMHgwMTQwKQorI2RlZmluZSBDU1JfUFJFRkVUQ0hNRU1SQU5HRQlEQzIxMjg1X0lPKDB4MDE0NCkKKyNkZWZpbmUgQ1NSX1hCVVNfQ1lDTEUJCURDMjEyODVfSU8oMHgwMTQ4KQorI2RlZmluZSBDU1JfWEJVU19JT1NUUk9CRQlEQzIxMjg1X0lPKDB4MDE0YykKKyNkZWZpbmUgQ1NSX0RPT1JCRUxMX1BDSQlEQzIxMjg1X0lPKDB4MDE1MCkKKyNkZWZpbmUgQ1NSX0RPT1JCRUxMX1NBMTEwCURDMjEyODVfSU8oMHgwMTU0KQorI2RlZmluZSBDU1JfVUFSVERSCQlEQzIxMjg1X0lPKDB4MDE2MCkKKyNkZWZpbmUgQ1NSX1JYU1RBVAkJREMyMTI4NV9JTygweDAxNjQpCisjZGVmaW5lIENTUl9IX1VCUkxDUgkJREMyMTI4NV9JTygweDAxNjgpCisjZGVmaW5lIENTUl9NX1VCUkxDUgkJREMyMTI4NV9JTygweDAxNmMpCisjZGVmaW5lIENTUl9MX1VCUkxDUgkJREMyMTI4NV9JTygweDAxNzApCisjZGVmaW5lIENTUl9VQVJUQ09OCQlEQzIxMjg1X0lPKDB4MDE3NCkKKyNkZWZpbmUgQ1NSX1VBUlRGTEcJCURDMjEyODVfSU8oMHgwMTc4KQorI2RlZmluZSBDU1JfSVJRX1NUQVRVUwkJREMyMTI4NV9JTygweDAxODApCisjZGVmaW5lIENTUl9JUlFfUkFXU1RBVFVTCURDMjEyODVfSU8oMHgwMTg0KQorI2RlZmluZSBDU1JfSVJRX0VOQUJMRQkJREMyMTI4NV9JTygweDAxODgpCisjZGVmaW5lIENTUl9JUlFfRElTQUJMRQkJREMyMTI4NV9JTygweDAxOGMpCisjZGVmaW5lIENTUl9JUlFfU09GVAkJREMyMTI4NV9JTygweDAxOTApCisjZGVmaW5lIENTUl9GSVFfU1RBVFVTCQlEQzIxMjg1X0lPKDB4MDI4MCkKKyNkZWZpbmUgQ1NSX0ZJUV9SQVdTVEFUVVMJREMyMTI4NV9JTygweDAyODQpCisjZGVmaW5lIENTUl9GSVFfRU5BQkxFCQlEQzIxMjg1X0lPKDB4MDI4OCkKKyNkZWZpbmUgQ1NSX0ZJUV9ESVNBQkxFCQlEQzIxMjg1X0lPKDB4MDI4YykKKyNkZWZpbmUgQ1NSX0ZJUV9TT0ZUCQlEQzIxMjg1X0lPKDB4MDI5MCkKKyNkZWZpbmUgQ1NSX1RJTUVSMV9MT0FECQlEQzIxMjg1X0lPKDB4MDMwMCkKKyNkZWZpbmUgQ1NSX1RJTUVSMV9WQUxVRQlEQzIxMjg1X0lPKDB4MDMwNCkKKyNkZWZpbmUgQ1NSX1RJTUVSMV9DTlRMCQlEQzIxMjg1X0lPKDB4MDMwOCkKKyNkZWZpbmUgQ1NSX1RJTUVSMV9DTFIJCURDMjEyODVfSU8oMHgwMzBjKQorI2RlZmluZSBDU1JfVElNRVIyX0xPQUQJCURDMjEyODVfSU8oMHgwMzIwKQorI2RlZmluZSBDU1JfVElNRVIyX1ZBTFVFCURDMjEyODVfSU8oMHgwMzI0KQorI2RlZmluZSBDU1JfVElNRVIyX0NOVEwJCURDMjEyODVfSU8oMHgwMzI4KQorI2RlZmluZSBDU1JfVElNRVIyX0NMUgkJREMyMTI4NV9JTygweDAzMmMpCisjZGVmaW5lIENTUl9USU1FUjNfTE9BRAkJREMyMTI4NV9JTygweDAzNDApCisjZGVmaW5lIENTUl9USU1FUjNfVkFMVUUJREMyMTI4NV9JTygweDAzNDQpCisjZGVmaW5lIENTUl9USU1FUjNfQ05UTAkJREMyMTI4NV9JTygweDAzNDgpCisjZGVmaW5lIENTUl9USU1FUjNfQ0xSCQlEQzIxMjg1X0lPKDB4MDM0YykKKyNkZWZpbmUgQ1NSX1RJTUVSNF9MT0FECQlEQzIxMjg1X0lPKDB4MDM2MCkKKyNkZWZpbmUgQ1NSX1RJTUVSNF9WQUxVRQlEQzIxMjg1X0lPKDB4MDM2NCkKKyNkZWZpbmUgQ1NSX1RJTUVSNF9DTlRMCQlEQzIxMjg1X0lPKDB4MDM2OCkKKyNkZWZpbmUgQ1NSX1RJTUVSNF9DTFIJCURDMjEyODVfSU8oMHgwMzZjKQorCisjZGVmaW5lIFRJTUVSX0NOVExfRU5BQkxFCSgxIDw8IDcpCisjZGVmaW5lIFRJTUVSX0NOVExfQVVUT1JFTE9BRAkoMSA8PCA2KQorI2RlZmluZSBUSU1FUl9DTlRMX0RJVjEJCSgwKQorI2RlZmluZSBUSU1FUl9DTlRMX0RJVjE2CSgxIDw8IDIpCisjZGVmaW5lIFRJTUVSX0NOVExfRElWMjU2CSgyIDw8IDIpCisjZGVmaW5lIFRJTUVSX0NOVExfQ05URVhUCSgzIDw8IDIpCisKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL2VudHJ5LW1hY3JvLWlvbWQuUyBiL2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9lbnRyeS1tYWNyby1pb21kLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBjN2I5MgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9lbnRyeS1tYWNyby1pb21kLlMKQEAgLTAsMCArMSwxNDUgQEAKKy8qCisgKiBhcmNoL2FybS9jb21tb25kL2VudHJ5LW1hY3JvLWlvbWQuUworICoKKyAqIExvdy1sZXZlbCBJUlEgaGVscGVyIG1hY3JvcyBmb3IgSU9DL0lPTUQgYmFzZWQgcGxhdGZvcm1zCisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworLyogSU9DIC8gSU9NRCBiYXNlZCBoYXJkd2FyZSAqLworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9pb21kLmg+CisKKwkJLmVxdQlpb2NfYmFzZV9oaWdoLCBJT0NfQkFTRSAmIDB4ZmYwMDAwMDAKKwkJLmVxdQlpb2NfYmFzZV9sb3csIElPQ19CQVNFICYgMHgwMGZmMDAwMAorCQkubWFjcm8JZGlzYWJsZV9maXEKKwkJbW92CXIxMiwgI2lvY19iYXNlX2hpZ2gKKwkJLmlmCWlvY19iYXNlX2xvdworCQlvcnIJcjEyLCByMTIsICNpb2NfYmFzZV9sb3cKKwkJLmVuZGlmCisJCXN0cmIJcjEyLCBbcjEyLCAjMHgzOF0JQCBEaXNhYmxlIEZJUSByZWdpc3RlcgorCQkuZW5kbQorCisJCS5tYWNybwlnZXRfaXJxbnJfYW5kX2Jhc2UsIGlycW5yLCBpcnFzdGF0LCBiYXNlLCB0bXAKKwkJbW92CXI0LCAjaW9jX2Jhc2VfaGlnaAkJQCBwb2ludCBhdCBJT0MKKwkJLmlmCWlvY19iYXNlX2xvdworCQlvcnIJcjQsIHI0LCAjaW9jX2Jhc2VfbG93CisJCS5lbmRpZgorCQlsZHJiCVxpcnFzdGF0LCBbcjQsICNJT01EX0lSUVJFUUJdCUAgZ2V0IGhpZ2ggcHJpb3JpdHkgZmlyc3QKKwkJbGRyCVxiYXNlLCA9aXJxX3ByaW9faAorCQl0ZXEJXGlycXN0YXQsICMwCisjaWZkZWYgSU9NRF9CQVNFCisJCWxkcmVxYglcaXJxc3RhdCwgW3I0LCAjSU9NRF9ETUFSRVFdCUAgZ2V0IGRtYQorCQlhZGRlcQlcYmFzZSwgXGJhc2UsICMyNTYJCUAgaXJxX3ByaW9faCB0YWJsZSBzaXplCisJCXRlcWVxCVxpcnFzdGF0LCAjMAorCQlibmUJMjQwNmYKKyNlbmRpZgorCQlsZHJlcWIJXGlycXN0YXQsIFtyNCwgI0lPTURfSVJRUkVRQV0JQCBnZXQgbG93IHByaW9yaXR5CisJCWFkZGVxCVxiYXNlLCBcYmFzZSwgIzI1NgkJQCBpcnFfcHJpb19kIHRhYmxlIHNpemUKKwkJdGVxZXEJXGlycXN0YXQsICMwCisjaWZkZWYgSU9NRF9JUlFSRVFDCisJCWxkcmVxYglcaXJxc3RhdCwgW3I0LCAjSU9NRF9JUlFSRVFDXQorCQlhZGRlcQlcYmFzZSwgXGJhc2UsICMyNTYJCUAgaXJxX3ByaW9fbCB0YWJsZSBzaXplCisJCXRlcWVxCVxpcnFzdGF0LCAjMAorI2VuZGlmCisjaWZkZWYgSU9NRF9JUlFSRVFECisJCWxkcmVxYglcaXJxc3RhdCwgW3I0LCAjSU9NRF9JUlFSRVFEXQorCQlhZGRlcQlcYmFzZSwgXGJhc2UsICMyNTYJCUAgaXJxX3ByaW9fbGMgdGFibGUgc2l6ZQorCQl0ZXFlcQlcaXJxc3RhdCwgIzAKKyNlbmRpZgorMjQwNjoJCWxkcm5lYglcaXJxbnIsIFtcYmFzZSwgXGlycXN0YXRdCUAgZ2V0IElSUSBudW1iZXIKKwkJLmVuZG0KKworLyoKKyAqIEludGVycnVwdCB0YWJsZSAoaW5jb3Jwb3JhdGVzIHByaW9yaXR5KS4gIFBsZWFzZSBub3RlIHRoYXQgd2UKKyAqIHJlbHkgb24gdGhlIG9yZGVyIG9mIHRoZXNlIHRhYmxlcyAoc2VlIGFib3ZlIGNvZGUpLgorICovCisJCS5hbGlnbgk1CitpcnFfcHJpb19oOgkuYnl0ZQkgMCwgOCwgOSwgOCwxMCwxMCwxMCwxMCwxMSwxMSwxMSwxMSwxMCwxMCwxMCwxMAorCQkuYnl0ZQkxMiwgOCwgOSwgOCwxMCwxMCwxMCwxMCwxMSwxMSwxMSwxMSwxMCwxMCwxMCwxMAorCQkuYnl0ZQkxMywxMywxMywxMywxMCwxMCwxMCwxMCwxMSwxMSwxMSwxMSwxMCwxMCwxMCwxMAorCQkuYnl0ZQkxMywxMywxMywxMywxMCwxMCwxMCwxMCwxMSwxMSwxMSwxMSwxMCwxMCwxMCwxMAorCQkuYnl0ZQkxNCwxNCwxNCwxNCwxMCwxMCwxMCwxMCwxMSwxMSwxMSwxMSwxMCwxMCwxMCwxMAorCQkuYnl0ZQkxNCwxNCwxNCwxNCwxMCwxMCwxMCwxMCwxMSwxMSwxMSwxMSwxMCwxMCwxMCwxMAorCQkuYnl0ZQkxMywxMywxMywxMywxMCwxMCwxMCwxMCwxMSwxMSwxMSwxMSwxMCwxMCwxMCwxMAorCQkuYnl0ZQkxMywxMywxMywxMywxMCwxMCwxMCwxMCwxMSwxMSwxMSwxMSwxMCwxMCwxMCwxMAorCQkuYnl0ZQkxNSwxNSwxNSwxNSwxMCwxMCwxMCwxMCwxMSwxMSwxMSwxMSwxMCwxMCwxMCwxMAorCQkuYnl0ZQkxNSwxNSwxNSwxNSwxMCwxMCwxMCwxMCwxMSwxMSwxMSwxMSwxMCwxMCwxMCwxMAorCQkuYnl0ZQkxMywxMywxMywxMywxMCwxMCwxMCwxMCwxMSwxMSwxMSwxMSwxMCwxMCwxMCwxMAorCQkuYnl0ZQkxMywxMywxMywxMywxMCwxMCwxMCwxMCwxMSwxMSwxMSwxMSwxMCwxMCwxMCwxMAorCQkuYnl0ZQkxNSwxNSwxNSwxNSwxMCwxMCwxMCwxMCwxMSwxMSwxMSwxMSwxMCwxMCwxMCwxMAorCQkuYnl0ZQkxNSwxNSwxNSwxNSwxMCwxMCwxMCwxMCwxMSwxMSwxMSwxMSwxMCwxMCwxMCwxMAorCQkuYnl0ZQkxMywxMywxMywxMywxMCwxMCwxMCwxMCwxMSwxMSwxMSwxMSwxMCwxMCwxMCwxMAorCQkuYnl0ZQkxMywxMywxMywxMywxMCwxMCwxMCwxMCwxMSwxMSwxMSwxMSwxMCwxMCwxMCwxMAorI2lmZGVmIElPTURfQkFTRQoraXJxX3ByaW9fZDoJLmJ5dGUJIDAsMTYsMTcsMTYsMTgsMTYsMTcsMTYsMTksMTYsMTcsMTYsMTgsMTYsMTcsMTYKKwkJLmJ5dGUJMjAsMTYsMTcsMTYsMTgsMTYsMTcsMTYsMTksMTYsMTcsMTYsMTgsMTYsMTcsMTYKKwkJLmJ5dGUJMjEsMTYsMTcsMTYsMTgsMTYsMTcsMTYsMTksMTYsMTcsMTYsMTgsMTYsMTcsMTYKKwkJLmJ5dGUJMjEsMTYsMTcsMTYsMTgsMTYsMTcsMTYsMTksMTYsMTcsMTYsMTgsMTYsMTcsMTYKKwkJLmJ5dGUJMjIsMTYsMTcsMTYsMTgsMTYsMTcsMTYsMTksMTYsMTcsMTYsMTgsMTYsMTcsMTYKKwkJLmJ5dGUJMjIsMTYsMTcsMTYsMTgsMTYsMTcsMTYsMTksMTYsMTcsMTYsMTgsMTYsMTcsMTYKKwkJLmJ5dGUJMjEsMTYsMTcsMTYsMTgsMTYsMTcsMTYsMTksMTYsMTcsMTYsMTgsMTYsMTcsMTYKKwkJLmJ5dGUJMjEsMTYsMTcsMTYsMTgsMTYsMTcsMTYsMTksMTYsMTcsMTYsMTgsMTYsMTcsMTYKKwkJLmJ5dGUJMjMsMTYsMTcsMTYsMTgsMTYsMTcsMTYsMTksMTYsMTcsMTYsMTgsMTYsMTcsMTYKKwkJLmJ5dGUJMjMsMTYsMTcsMTYsMTgsMTYsMTcsMTYsMTksMTYsMTcsMTYsMTgsMTYsMTcsMTYKKwkJLmJ5dGUJMjEsMTYsMTcsMTYsMTgsMTYsMTcsMTYsMTksMTYsMTcsMTYsMTgsMTYsMTcsMTYKKwkJLmJ5dGUJMjEsMTYsMTcsMTYsMTgsMTYsMTcsMTYsMTksMTYsMTcsMTYsMTgsMTYsMTcsMTYKKwkJLmJ5dGUJMjIsMTYsMTcsMTYsMTgsMTYsMTcsMTYsMTksMTYsMTcsMTYsMTgsMTYsMTcsMTYKKwkJLmJ5dGUJMjIsMTYsMTcsMTYsMTgsMTYsMTcsMTYsMTksMTYsMTcsMTYsMTgsMTYsMTcsMTYKKwkJLmJ5dGUJMjEsMTYsMTcsMTYsMTgsMTYsMTcsMTYsMTksMTYsMTcsMTYsMTgsMTYsMTcsMTYKKwkJLmJ5dGUJMjEsMTYsMTcsMTYsMTgsMTYsMTcsMTYsMTksMTYsMTcsMTYsMTgsMTYsMTcsMTYKKyNlbmRpZgoraXJxX3ByaW9fbDoJLmJ5dGUJIDAsIDAsIDEsIDAsIDIsIDIsIDIsIDIsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMKKwkJLmJ5dGUJIDQsIDAsIDEsIDAsIDIsIDIsIDIsIDIsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMKKwkJLmJ5dGUJIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUKKwkJLmJ5dGUJIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUKKwkJLmJ5dGUJIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMKKwkJLmJ5dGUJIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMKKwkJLmJ5dGUJIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUKKwkJLmJ5dGUJIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUKKwkJLmJ5dGUJIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcKKwkJLmJ5dGUJIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcKKwkJLmJ5dGUJIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcKKwkJLmJ5dGUJIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcKKwkJLmJ5dGUJIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcKKwkJLmJ5dGUJIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcKKwkJLmJ5dGUJIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcKKwkJLmJ5dGUJIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcKKyNpZmRlZiBJT01EX0lSUVJFUUMKK2lycV9wcmlvX2xjOgkuYnl0ZQkyNCwyNCwyNSwyNCwyNiwyNiwyNiwyNiwyNywyNywyNywyNywyNywyNywyNywyNworCQkuYnl0ZQkyOCwyNCwyNSwyNCwyNiwyNiwyNiwyNiwyNywyNywyNywyNywyNywyNywyNywyNworCQkuYnl0ZQkyOSwyOSwyOSwyOSwyOSwyOSwyOSwyOSwyOSwyOSwyOSwyOSwyOSwyOSwyOSwyOQorCQkuYnl0ZQkyOSwyOSwyOSwyOSwyOSwyOSwyOSwyOSwyOSwyOSwyOSwyOSwyOSwyOSwyOSwyOQorCQkuYnl0ZQkzMCwzMCwzMCwzMCwzMCwzMCwzMCwzMCwyNywyNywyNywyNywyNywyNywyNywyNworCQkuYnl0ZQkzMCwzMCwzMCwzMCwzMCwzMCwzMCwzMCwyNywyNywyNywyNywyNywyNywyNywyNworCQkuYnl0ZQkyOSwyOSwyOSwyOSwyOSwyOSwyOSwyOSwyOSwyOSwyOSwyOSwyOSwyOSwyOSwyOQorCQkuYnl0ZQkyOSwyOSwyOSwyOSwyOSwyOSwyOSwyOSwyOSwyOSwyOSwyOSwyOSwyOSwyOSwyOQorCQkuYnl0ZQkzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMQorCQkuYnl0ZQkzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMQorCQkuYnl0ZQkzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMQorCQkuYnl0ZQkzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMQorCQkuYnl0ZQkzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMQorCQkuYnl0ZQkzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMQorCQkuYnl0ZQkzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMQorCQkuYnl0ZQkzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMQorI2VuZGlmCisjaWZkZWYgSU9NRF9JUlFSRVFECitpcnFfcHJpb19sZDoJLmJ5dGUJNDAsNDAsNDEsNDAsNDIsNDIsNDIsNDIsNDMsNDMsNDMsNDMsNDMsNDMsNDMsNDMKKwkJLmJ5dGUJNDQsNDAsNDEsNDAsNDIsNDIsNDIsNDIsNDMsNDMsNDMsNDMsNDMsNDMsNDMsNDMKKwkJLmJ5dGUJNDUsNDUsNDUsNDUsNDUsNDUsNDUsNDUsNDUsNDUsNDUsNDUsNDUsNDUsNDUsNDUKKwkJLmJ5dGUJNDUsNDUsNDUsNDUsNDUsNDUsNDUsNDUsNDUsNDUsNDUsNDUsNDUsNDUsNDUsNDUKKwkJLmJ5dGUJNDYsNDYsNDYsNDYsNDYsNDYsNDYsNDYsNDMsNDMsNDMsNDMsNDMsNDMsNDMsNDMKKwkJLmJ5dGUJNDYsNDYsNDYsNDYsNDYsNDYsNDYsNDYsNDMsNDMsNDMsNDMsNDMsNDMsNDMsNDMKKwkJLmJ5dGUJNDUsNDUsNDUsNDUsNDUsNDUsNDUsNDUsNDUsNDUsNDUsNDUsNDUsNDUsNDUsNDUKKwkJLmJ5dGUJNDUsNDUsNDUsNDUsNDUsNDUsNDUsNDUsNDUsNDUsNDUsNDUsNDUsNDUsNDUsNDUKKwkJLmJ5dGUJNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcKKwkJLmJ5dGUJNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcKKwkJLmJ5dGUJNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcKKwkJLmJ5dGUJNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcKKwkJLmJ5dGUJNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcKKwkJLmJ5dGUJNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcKKwkJLmJ5dGUJNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcKKwkJLmJ5dGUJNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcsNDcKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvZXA3MjExLmggYi9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvZXA3MjExLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE3YWE2OAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9lcDcyMTEuaApAQCAtMCwwICsxLDQwIEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9lcDcyMTEuaAorICoKKyAqICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGhhcmR3YXJlIGRlZmluaXRpb25zIG9mIHRoZSBFUDcyMTEgaW50ZXJuYWwKKyAqICByZWdpc3RlcnMuCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMSBCbHVlIE11ZywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKyNpZm5kZWYgX19BU01fSEFSRFdBUkVfRVA3MjExX0gKKyNkZWZpbmUgX19BU01fSEFSRFdBUkVfRVA3MjExX0gKKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9jbHBzNzExMS5oPgorCisvKgorICogZGVmaW5lIEVQNzIxMV9CQVNFIHRvIGJlIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIHJlZ2lvbgorICogeW91IHdhbnQgdG8gYWNjZXNzLgorICovCisKKyNkZWZpbmUgRVA3MjExX1BIWVNfQkFTRQkoMHg4MDAwMDAwMCkKKworLyoKKyAqIFhYWCBtaWtldEBibHVlbXVnLmNvbTogbmVlZCB0byBpbnRyb2R1Y2UgRVA3MjExIHJlZ2lzdGVycyAodGhvc2Ugbm90CisgKiBwcmVzZW50IGluIDcyMTIpIGhlcmUuCisgKi8KKworI2VuZGlmIC8qIF9fQVNNX0hBUkRXQVJFX0VQNzIxMV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvZXA3MjEyLmggYi9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvZXA3MjEyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU5NTJlNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9lcDcyMTIuaApAQCAtMCwwICsxLDgzIEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9lcDcyMTIuaAorICoKKyAqICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGhhcmR3YXJlIGRlZmluaXRpb25zIG9mIHRoZSBFUDcyMTIgaW50ZXJuYWwKKyAqICByZWdpc3RlcnMuCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMCBEZWVwIEJsdWUgU29sdXRpb25zIEx0ZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKyNpZm5kZWYgX19BU01fSEFSRFdBUkVfRVA3MjEyX0gKKyNkZWZpbmUgX19BU01fSEFSRFdBUkVfRVA3MjEyX0gKKworLyoKKyAqIGRlZmluZSBFUDcyMTJfQkFTRSB0byBiZSB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSByZWdpb24KKyAqIHlvdSB3YW50IHRvIGFjY2Vzcy4KKyAqLworCisjZGVmaW5lIEVQNzIxMl9QSFlTX0JBU0UJKDB4ODAwMDAwMDApCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjZGVmaW5lIGVwX3JlYWRsKG9mZikJCV9fcmF3X3JlYWRsKEVQNzIxMl9CQVNFICsgKG9mZikpCisjZGVmaW5lIGVwX3dyaXRlbCh2YWwsb2ZmKQlfX3Jhd193cml0ZWwodmFsLCBFUDcyMTJfQkFTRSArIChvZmYpKQorI2VuZGlmCisKKy8qCisgKiBUaGVzZSByZWdpc3RlcnMgYXJlIHNwZWNpZmljIHRvIHRoZSBFUDcyMTIgb25seQorICovCisjZGVmaW5lIERBSVIJCQkweDIwMDAKKyNkZWZpbmUgREFJUjAJCQkweDIwNDAKKyNkZWZpbmUgREFJRFIxCQkJMHgyMDgwCisjZGVmaW5lIERBSURSMgkJCTB4MjBjMAorI2RlZmluZSBEQUlTUgkJCTB4MjEwMAorI2RlZmluZSBTWVNDT04zCQkJMHgyMjAwCisjZGVmaW5lIElOVFNSMwkJCTB4MjI0MAorI2RlZmluZSBJTlRNUjMJCQkweDIyODAKKyNkZWZpbmUgTEVERkxTSAkJCTB4MjJjMAorCisjZGVmaW5lIERBSVJfREFJRU4JCSgxIDw8IDE2KQorI2RlZmluZSBEQUlSX0VDUwkJKDEgPDwgMTcpCisjZGVmaW5lIERBSVJfTENUTQkJKDEgPDwgMTkpCisjZGVmaW5lIERBSVJfTENSTQkJKDEgPDwgMjApCisjZGVmaW5lIERBSVJfUkNUTQkJKDEgPDwgMjEpCisjZGVmaW5lIERBSVJfUkNSTQkJKDEgPDwgMjIpCisjZGVmaW5lIERBSVJfTEJNCQkoMSA8PCAyMykKKworI2RlZmluZSBEQUlEUjJfRklGT0VOCQkoMSA8PCAxNSkKKyNkZWZpbmUgREFJRFIyX0ZJRk9MRUZUCQkoMHgwZCA8PCAxNikKKyNkZWZpbmUgREFJRFIyX0ZJRk9SSUdIVAkoMHgxMSA8PCAxNikKKworI2RlZmluZSBEQUlTUl9SQ1RTCQkoMSA8PCAwKQorI2RlZmluZSBEQUlTUl9SQ1JTCQkoMSA8PCAxKQorI2RlZmluZSBEQUlTUl9MQ1RTCQkoMSA8PCAyKQorI2RlZmluZSBEQUlTUl9MQ1JTCQkoMSA8PCAzKQorI2RlZmluZSBEQUlTUl9SQ1RVCQkoMSA8PCA0KQorI2RlZmluZSBEQUlTUl9SQ1JPCQkoMSA8PCA1KQorI2RlZmluZSBEQUlTUl9MQ1RVCQkoMSA8PCA2KQorI2RlZmluZSBEQUlTUl9MQ1JPCQkoMSA8PCA3KQorI2RlZmluZSBEQUlTUl9SQ05GCQkoMSA8PCA4KQorI2RlZmluZSBEQUlTUl9SQ05FCQkoMSA8PCA5KQorI2RlZmluZSBEQUlTUl9MQ05GCQkoMSA8PCAxMCkKKyNkZWZpbmUgREFJU1JfTENORQkJKDEgPDwgMTEpCisjZGVmaW5lIERBSVNSX0ZJRk8JCSgxIDw8IDEyKQorCisjZGVmaW5lIFNZU0NPTjNfQURDQ09OCQkoMSA8PCAwKQorI2RlZmluZSBTWVNDT04zX0RBSVNFTAkJKDEgPDwgMykKKyNkZWZpbmUgU1lTQ09OM19BRENDS05TRU4JKDEgPDwgNCkKKyNkZWZpbmUgU1lTQ09OM19GQVNUV0FLRQkoMSA8PCA4KQorI2RlZmluZSBTWVNDT04zX0RBSUVOCQkoMSA8PCA5KQorCisjZW5kaWYgLyogX19BU01fSEFSRFdBUkVfRVA3MjEyX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9pY3N0MzA3LmggYi9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvaWNzdDMwNy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmODYxOGEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvaWNzdDMwNy5oCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL2ljc3QzMDcuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMgRGVlcCBCbHVlIFNvbHV0aW9ucywgTHRkLCBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIFN1cHBvcnQgZnVuY3Rpb25zIGZvciBjYWxjdWxhdGluZyBjbG9ja3MvZGl2aXNvcnMgZm9yIHRoZSBJQ1MzMDcKKyAqICBjbG9jayBnZW5lcmF0b3JzLiAgU2VlIGh0dHA6Ly93d3cuaWNzdC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uCisgKiAgb24gdGhlc2UgZGV2aWNlcy4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHNpbWlsYXIgdG8gdGhlIGljc3Q1MjUuaCBmaWxlCisgKi8KKyNpZm5kZWYgQVNNQVJNX0hBUkRXQVJFX0lDU1QzMDdfSAorI2RlZmluZSBBU01BUk1fSEFSRFdBUkVfSUNTVDMwN19ICisKK3N0cnVjdCBpY3N0MzA3X3BhcmFtcyB7CisJdW5zaWduZWQgbG9uZwlyZWY7CisJdW5zaWduZWQgbG9uZwl2Y29fbWF4OwkvKiBpbmNsdXNpdmUgKi8KKwl1bnNpZ25lZCBzaG9ydAl2ZF9taW47CQkvKiBpbmNsdXNpdmUgKi8KKwl1bnNpZ25lZCBzaG9ydAl2ZF9tYXg7CQkvKiBpbmNsdXNpdmUgKi8KKwl1bnNpZ25lZCBjaGFyCXJkX21pbjsJCS8qIGluY2x1c2l2ZSAqLworCXVuc2lnbmVkIGNoYXIJcmRfbWF4OwkJLyogaW5jbHVzaXZlICovCit9OworCitzdHJ1Y3QgaWNzdDMwN192Y28geworCXVuc2lnbmVkIHNob3J0CXY7CisJdW5zaWduZWQgY2hhcglyOworCXVuc2lnbmVkIGNoYXIJczsKK307CisKK3Vuc2lnbmVkIGxvbmcgaWNzdDMwN19raHooY29uc3Qgc3RydWN0IGljc3QzMDdfcGFyYW1zICpwLCBzdHJ1Y3QgaWNzdDMwN192Y28gdmNvKTsKK3N0cnVjdCBpY3N0MzA3X3ZjbyBpY3N0MzA3X2toel90b192Y28oY29uc3Qgc3RydWN0IGljc3QzMDdfcGFyYW1zICpwLCB1bnNpZ25lZCBsb25nIGZyZXEpOworc3RydWN0IGljc3QzMDdfdmNvIGljc3QzMDdfcHNfdG9fdmNvKGNvbnN0IHN0cnVjdCBpY3N0MzA3X3BhcmFtcyAqcCwgdW5zaWduZWQgbG9uZyBwZXJpb2QpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9pY3N0NTI1LmggYi9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvaWNzdDUyNS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkZDVhNTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvaWNzdDUyNS5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL2ljc3Q1MjUuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMgRGVlcCBCbHVlIFNvbHV0aW9ucywgTHRkLCBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIFN1cHBvcnQgZnVuY3Rpb25zIGZvciBjYWxjdWxhdGluZyBjbG9ja3MvZGl2aXNvcnMgZm9yIHRoZSBJQ1NUNTI1CisgKiAgY2xvY2sgZ2VuZXJhdG9ycy4gIFNlZSBodHRwOi8vd3d3Lmljc3QuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbgorICogIG9uIHRoZXNlIGRldmljZXMuCisgKi8KKyNpZm5kZWYgQVNNQVJNX0hBUkRXQVJFX0lDU1Q1MjVfSAorI2RlZmluZSBBU01BUk1fSEFSRFdBUkVfSUNTVDUyNV9ICisKK3N0cnVjdCBpY3N0NTI1X3BhcmFtcyB7CisJdW5zaWduZWQgbG9uZwlyZWY7CisJdW5zaWduZWQgbG9uZwl2Y29fbWF4OwkvKiBpbmNsdXNpdmUgKi8KKwl1bnNpZ25lZCBzaG9ydAl2ZF9taW47CQkvKiBpbmNsdXNpdmUgKi8KKwl1bnNpZ25lZCBzaG9ydAl2ZF9tYXg7CQkvKiBpbmNsdXNpdmUgKi8KKwl1bnNpZ25lZCBjaGFyCXJkX21pbjsJCS8qIGluY2x1c2l2ZSAqLworCXVuc2lnbmVkIGNoYXIJcmRfbWF4OwkJLyogaW5jbHVzaXZlICovCit9OworCitzdHJ1Y3QgaWNzdDUyNV92Y28geworCXVuc2lnbmVkIHNob3J0CXY7CisJdW5zaWduZWQgY2hhcglyOworCXVuc2lnbmVkIGNoYXIJczsKK307CisKK3Vuc2lnbmVkIGxvbmcgaWNzdDUyNV9raHooY29uc3Qgc3RydWN0IGljc3Q1MjVfcGFyYW1zICpwLCBzdHJ1Y3QgaWNzdDUyNV92Y28gdmNvKTsKK3N0cnVjdCBpY3N0NTI1X3ZjbyBpY3N0NTI1X2toel90b192Y28oY29uc3Qgc3RydWN0IGljc3Q1MjVfcGFyYW1zICpwLCB1bnNpZ25lZCBsb25nIGZyZXEpOworc3RydWN0IGljc3Q1MjVfdmNvIGljc3Q1MjVfcHNfdG9fdmNvKGNvbnN0IHN0cnVjdCBpY3N0NTI1X3BhcmFtcyAqcCwgdW5zaWduZWQgbG9uZyBwZXJpb2QpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9pb2MuaCBiL2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9pb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2I0NmVmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL2lvYy5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL2lvYy5oCisgKgorICogIENvcHlyaWdodCAoQykgUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgVXNlIHRoZXNlIG1hY3JvcyB0byByZWFkL3dyaXRlIHRoZSBJT0MuICBBbGwgaXQgZG9lcyBpcyBwZXJmb3JtIHRoZSBhY3R1YWwKKyAqICByZWFkL3dyaXRlLgorICovCisjaWZuZGVmIF9fQVNNQVJNX0hBUkRXQVJFX0lPQ19ICisjZGVmaW5lIF9fQVNNQVJNX0hBUkRXQVJFX0lPQ19ICisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKy8qCisgKiBXZSB1c2UgX19yYXdfYmFzZSB2YXJpYW50cyBoZXJlIHNvIHRoYXQgd2UgZ2l2ZSB0aGUgY29tcGlsZXIgdGhlCisgKiBjaGFuY2UgdG8ga2VlcCBJT0NfQkFTRSBpbiBhIHJlZ2lzdGVyLgorICovCisjZGVmaW5lIGlvY19yZWFkYihvZmYpCQlfX3Jhd19yZWFkYihJT0NfQkFTRSArIChvZmYpKQorI2RlZmluZSBpb2Nfd3JpdGViKHZhbCxvZmYpCV9fcmF3X3dyaXRlYih2YWwsIElPQ19CQVNFICsgKG9mZikpCisKKyNlbmRpZgorCisjZGVmaW5lIElPQ19DT05UUk9MCSgweDAwKQorI2RlZmluZSBJT0NfS0FSVFRYCSgweDA0KQorI2RlZmluZSBJT0NfS0FSVFJYCSgweDA0KQorCisjZGVmaW5lIElPQ19JUlFTVEFUQQkoMHgxMCkKKyNkZWZpbmUgSU9DX0lSUVJFUUEJKDB4MTQpCisjZGVmaW5lIElPQ19JUlFDTFJBCSgweDE0KQorI2RlZmluZSBJT0NfSVJRTUFTS0EJKDB4MTgpCisKKyNkZWZpbmUgSU9DX0lSUVNUQVRCCSgweDIwKQorI2RlZmluZSBJT0NfSVJRUkVRQgkoMHgyNCkKKyNkZWZpbmUgSU9DX0lSUU1BU0tCCSgweDI4KQorCisjZGVmaW5lIElPQ19GSVFTVEFUCSgweDMwKQorI2RlZmluZSBJT0NfRklRUkVRCSgweDM0KQorI2RlZmluZSBJT0NfRklRTUFTSwkoMHgzOCkKKworI2RlZmluZSBJT0NfVDBDTlRMCSgweDQwKQorI2RlZmluZSBJT0NfVDBMVENITAkoMHg0MCkKKyNkZWZpbmUgSU9DX1QwQ05USAkoMHg0NCkKKyNkZWZpbmUgSU9DX1QwTFRDSEgJKDB4NDQpCisjZGVmaW5lIElPQ19UMEdPCSgweDQ4KQorI2RlZmluZSBJT0NfVDBMQVRDSAkoMHg0YykKKworI2RlZmluZSBJT0NfVDFDTlRMCSgweDUwKQorI2RlZmluZSBJT0NfVDFMVENITAkoMHg1MCkKKyNkZWZpbmUgSU9DX1QxQ05USAkoMHg1NCkKKyNkZWZpbmUgSU9DX1QxTFRDSEgJKDB4NTQpCisjZGVmaW5lIElPQ19UMUdPCSgweDU4KQorI2RlZmluZSBJT0NfVDFMQVRDSAkoMHg1YykKKworI2RlZmluZSBJT0NfVDJDTlRMCSgweDYwKQorI2RlZmluZSBJT0NfVDJMVENITAkoMHg2MCkKKyNkZWZpbmUgSU9DX1QyQ05USAkoMHg2NCkKKyNkZWZpbmUgSU9DX1QyTFRDSEgJKDB4NjQpCisjZGVmaW5lIElPQ19UMkdPCSgweDY4KQorI2RlZmluZSBJT0NfVDJMQVRDSAkoMHg2YykKKworI2RlZmluZSBJT0NfVDNDTlRMCSgweDcwKQorI2RlZmluZSBJT0NfVDNMVENITAkoMHg3MCkKKyNkZWZpbmUgSU9DX1QzQ05USAkoMHg3NCkKKyNkZWZpbmUgSU9DX1QzTFRDSEgJKDB4NzQpCisjZGVmaW5lIElPQ19UM0dPCSgweDc4KQorI2RlZmluZSBJT0NfVDNMQVRDSAkoMHg3YykKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvaW9tZC5oIGIvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL2lvbWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmZhMmMyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL2lvbWQuaApAQCAtMCwwICsxLDIyNyBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvaW9tZC5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5OSBSdXNzZWxsIEtpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBUaGlzIGZpbGUgY29udGFpbnMgaW5mb3JtYXRpb24gb3V0IHRoZSBJT01EIEFTSUMgdXNlZCBpbiB0aGUKKyAqICBBY29ybiBSaXNjUEMgYW5kIHN1YnNlcXVlbnRseSBpbnRlZ3JhdGVkIGludG8gdGhlIENMUFM3NTAwIGNoaXBzLgorICovCisjaWZuZGVmIF9fQVNNQVJNX0hBUkRXQVJFX0lPTURfSAorI2RlZmluZSBfX0FTTUFSTV9IQVJEV0FSRV9JT01EX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisvKgorICogV2UgdXNlIF9fcmF3X2Jhc2UgdmFyaWFudHMgaGVyZSBzbyB0aGF0IHdlIGdpdmUgdGhlIGNvbXBpbGVyIHRoZQorICogY2hhbmNlIHRvIGtlZXAgSU9DX0JBU0UgaW4gYSByZWdpc3Rlci4KKyAqLworI2RlZmluZSBpb21kX3JlYWRiKG9mZikJCV9fcmF3X3JlYWRiKElPTURfQkFTRSArIChvZmYpKQorI2RlZmluZSBpb21kX3JlYWRsKG9mZikJCV9fcmF3X3JlYWRsKElPTURfQkFTRSArIChvZmYpKQorI2RlZmluZSBpb21kX3dyaXRlYih2YWwsb2ZmKQlfX3Jhd193cml0ZWIodmFsLCBJT01EX0JBU0UgKyAob2ZmKSkKKyNkZWZpbmUgaW9tZF93cml0ZWwodmFsLG9mZikJX19yYXdfd3JpdGVsKHZhbCwgSU9NRF9CQVNFICsgKG9mZikpCisKKyNlbmRpZgorCisjZGVmaW5lIElPTURfQ09OVFJPTAkoMHgwMDApCisjZGVmaW5lIElPTURfS0FSVFRYCSgweDAwNCkKKyNkZWZpbmUgSU9NRF9LQVJUUlgJKDB4MDA0KQorI2RlZmluZSBJT01EX0tDVFJMCSgweDAwOCkKKworI2lmZGVmIENPTkZJR19BUkNIX0NMUFM3NTAwCisjZGVmaW5lIElPTURfSU9MSU5FUwkoMHgwMEMpCisjZW5kaWYKKworI2RlZmluZSBJT01EX0lSUVNUQVRBCSgweDAxMCkKKyNkZWZpbmUgSU9NRF9JUlFSRVFBCSgweDAxNCkKKyNkZWZpbmUgSU9NRF9JUlFDTFJBCSgweDAxNCkKKyNkZWZpbmUgSU9NRF9JUlFNQVNLQQkoMHgwMTgpCisKKyNpZmRlZiBDT05GSUdfQVJDSF9DTFBTNzUwMAorI2RlZmluZSBJT01EX1NVU01PREUJKDB4MDFDKQorI2VuZGlmCisKKyNkZWZpbmUgSU9NRF9JUlFTVEFUQgkoMHgwMjApCisjZGVmaW5lIElPTURfSVJRUkVRQgkoMHgwMjQpCisjZGVmaW5lIElPTURfSVJRTUFTS0IJKDB4MDI4KQorCisjZGVmaW5lIElPTURfRklRU1RBVAkoMHgwMzApCisjZGVmaW5lIElPTURfRklRUkVRCSgweDAzNCkKKyNkZWZpbmUgSU9NRF9GSVFNQVNLCSgweDAzOCkKKworI2lmZGVmIENPTkZJR19BUkNIX0NMUFM3NTAwCisjZGVmaW5lIElPTURfQ0xLQ1RMCSgweDAzQykKKyNlbmRpZgorCisjZGVmaW5lIElPTURfVDBDTlRMCSgweDA0MCkKKyNkZWZpbmUgSU9NRF9UMExUQ0hMCSgweDA0MCkKKyNkZWZpbmUgSU9NRF9UMENOVEgJKDB4MDQ0KQorI2RlZmluZSBJT01EX1QwTFRDSEgJKDB4MDQ0KQorI2RlZmluZSBJT01EX1QwR08JKDB4MDQ4KQorI2RlZmluZSBJT01EX1QwTEFUQ0gJKDB4MDRjKQorCisjZGVmaW5lIElPTURfVDFDTlRMCSgweDA1MCkKKyNkZWZpbmUgSU9NRF9UMUxUQ0hMCSgweDA1MCkKKyNkZWZpbmUgSU9NRF9UMUNOVEgJKDB4MDU0KQorI2RlZmluZSBJT01EX1QxTFRDSEgJKDB4MDU0KQorI2RlZmluZSBJT01EX1QxR08JKDB4MDU4KQorI2RlZmluZSBJT01EX1QxTEFUQ0gJKDB4MDVjKQorCisjaWZkZWYgQ09ORklHX0FSQ0hfQ0xQUzc1MDAKKyNkZWZpbmUgSU9NRF9JUlFTVEFUQwkoMHgwNjApCisjZGVmaW5lIElPTURfSVJRUkVRQwkoMHgwNjQpCisjZGVmaW5lIElPTURfSVJRTUFTS0MJKDB4MDY4KQorCisjZGVmaW5lIElPTURfVklETVVYCSgweDA2YykKKworI2RlZmluZSBJT01EX0lSUVNUQVRECSgweDA3MCkKKyNkZWZpbmUgSU9NRF9JUlFSRVFECSgweDA3NCkKKyNkZWZpbmUgSU9NRF9JUlFNQVNLRAkoMHgwNzgpCisjZW5kaWYKKworI2RlZmluZSBJT01EX1JPTUNSMAkoMHgwODApCisjZGVmaW5lIElPTURfUk9NQ1IxCSgweDA4NCkKKyNpZmRlZiBDT05GSUdfQVJDSF9SUEMKKyNkZWZpbmUgSU9NRF9EUkFNQ1IJKDB4MDg4KQorI2VuZGlmCisjZGVmaW5lIElPTURfUkVGQ1IJKDB4MDhDKQorCisjZGVmaW5lIElPTURfRlNJWkUJKDB4MDkwKQorI2RlZmluZSBJT01EX0lEMAkoMHgwOTQpCisjZGVmaW5lIElPTURfSUQxCSgweDA5OCkKKyNkZWZpbmUgSU9NRF9WRVJTSU9OCSgweDA5QykKKworI2lmZGVmIENPTkZJR19BUkNIX1JQQworI2RlZmluZSBJT01EX01PVVNFWAkoMHgwQTApCisjZGVmaW5lIElPTURfTU9VU0VZCSgweDBBNCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0FSQ0hfQ0xQUzc1MDAKKyNkZWZpbmUgSU9NRF9NU0VEQVQJKDB4MEE4KQorI2RlZmluZSBJT01EX01TRUNUTAkoMHgwQWMpCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19BUkNIX1JQQworI2RlZmluZSBJT01EX0RNQVRDUgkoMHgwQzApCisjZW5kaWYKKyNkZWZpbmUgSU9NRF9JT1RDUgkoMHgwQzQpCisjZGVmaW5lIElPTURfRUNUQ1IJKDB4MEM4KQorI2lmZGVmIENPTkZJR19BUkNIX1JQQworI2RlZmluZSBJT01EX0RNQUVYVAkoMHgwQ0MpCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVJDSF9DTFBTNzUwMAorI2RlZmluZSBJT01EX0FTVENSCSgweDBDQykKKyNkZWZpbmUgSU9NRF9EUkFNQ1IJKDB4MEQwKQorI2RlZmluZSBJT01EX1NFTEZSRUYJKDB4MEQ0KQorI2RlZmluZSBJT01EX0FUT0RJQ1IJKDB4MEUwKQorI2RlZmluZSBJT01EX0FUT0RTUgkoMHgwRTQpCisjZGVmaW5lIElPTURfQVRPRENDCSgweDBFOCkKKyNkZWZpbmUgSU9NRF9BVE9EQ05UMQkoMHgwRUMpCisjZGVmaW5lIElPTURfQVRPRENOVDIJKDB4MEYwKQorI2RlZmluZSBJT01EX0FUT0RDTlQzCSgweDBGNCkKKyNkZWZpbmUgSU9NRF9BVE9EQ05UNAkoMHgwRjgpCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19BUkNIX1JQQworI2RlZmluZSBETUFfRVhUX0lPMAkxCisjZGVmaW5lIERNQV9FWFRfSU8xCTIKKyNkZWZpbmUgRE1BX0VYVF9JTzIJNAorI2RlZmluZSBETUFfRVhUX0lPMwk4CisKKyNkZWZpbmUgSU9NRF9JTzBDVVJBCSgweDEwMCkKKyNkZWZpbmUgSU9NRF9JTzBFTkRBCSgweDEwNCkKKyNkZWZpbmUgSU9NRF9JTzBDVVJCCSgweDEwOCkKKyNkZWZpbmUgSU9NRF9JTzBFTkRCCSgweDEwQykKKyNkZWZpbmUgSU9NRF9JTzBDUgkoMHgxMTApCisjZGVmaW5lIElPTURfSU8wU1QJKDB4MTE0KQorCisjZGVmaW5lIElPTURfSU8xQ1VSQQkoMHgxMjApCisjZGVmaW5lIElPTURfSU8xRU5EQQkoMHgxMjQpCisjZGVmaW5lIElPTURfSU8xQ1VSQgkoMHgxMjgpCisjZGVmaW5lIElPTURfSU8xRU5EQgkoMHgxMkMpCisjZGVmaW5lIElPTURfSU8xQ1IJKDB4MTMwKQorI2RlZmluZSBJT01EX0lPMVNUCSgweDEzNCkKKworI2RlZmluZSBJT01EX0lPMkNVUkEJKDB4MTQwKQorI2RlZmluZSBJT01EX0lPMkVOREEJKDB4MTQ0KQorI2RlZmluZSBJT01EX0lPMkNVUkIJKDB4MTQ4KQorI2RlZmluZSBJT01EX0lPMkVOREIJKDB4MTRDKQorI2RlZmluZSBJT01EX0lPMkNSCSgweDE1MCkKKyNkZWZpbmUgSU9NRF9JTzJTVAkoMHgxNTQpCisKKyNkZWZpbmUgSU9NRF9JTzNDVVJBCSgweDE2MCkKKyNkZWZpbmUgSU9NRF9JTzNFTkRBCSgweDE2NCkKKyNkZWZpbmUgSU9NRF9JTzNDVVJCCSgweDE2OCkKKyNkZWZpbmUgSU9NRF9JTzNFTkRCCSgweDE2QykKKyNkZWZpbmUgSU9NRF9JTzNDUgkoMHgxNzApCisjZGVmaW5lIElPTURfSU8zU1QJKDB4MTc0KQorI2VuZGlmCisKKyNkZWZpbmUgSU9NRF9TRDBDVVJBCSgweDE4MCkKKyNkZWZpbmUgSU9NRF9TRDBFTkRBCSgweDE4NCkKKyNkZWZpbmUgSU9NRF9TRDBDVVJCCSgweDE4OCkKKyNkZWZpbmUgSU9NRF9TRDBFTkRCCSgweDE4QykKKyNkZWZpbmUgSU9NRF9TRDBDUgkoMHgxOTApCisjZGVmaW5lIElPTURfU0QwU1QJKDB4MTk0KQorCisjaWZkZWYgQ09ORklHX0FSQ0hfUlBDCisjZGVmaW5lIElPTURfU0QxQ1VSQQkoMHgxQTApCisjZGVmaW5lIElPTURfU0QxRU5EQQkoMHgxQTQpCisjZGVmaW5lIElPTURfU0QxQ1VSQgkoMHgxQTgpCisjZGVmaW5lIElPTURfU0QxRU5EQgkoMHgxQUMpCisjZGVmaW5lIElPTURfU0QxQ1IJKDB4MUIwKQorI2RlZmluZSBJT01EX1NEMVNUCSgweDFCNCkKKyNlbmRpZgorCisjZGVmaW5lIElPTURfQ1VSU0NVUgkoMHgxQzApCisjZGVmaW5lIElPTURfQ1VSU0lOSVQJKDB4MUM0KQorCisjZGVmaW5lIElPTURfVklEQ1VSCSgweDFEMCkKKyNkZWZpbmUgSU9NRF9WSURFTkQJKDB4MUQ0KQorI2RlZmluZSBJT01EX1ZJRFNUQVJUCSgweDFEOCkKKyNkZWZpbmUgSU9NRF9WSURJTklUCSgweDFEQykKKyNkZWZpbmUgSU9NRF9WSURDUgkoMHgxRTApCisKKyNkZWZpbmUgSU9NRF9ETUFTVEFUCSgweDFGMCkKKyNkZWZpbmUgSU9NRF9ETUFSRVEJKDB4MUY0KQorI2RlZmluZSBJT01EX0RNQU1BU0sJKDB4MUY4KQorCisjZGVmaW5lIERNQV9FTkRfUwkoMSA8PCAzMSkKKyNkZWZpbmUgRE1BX0VORF9MCSgxIDw8IDMwKQorCisjZGVmaW5lIERNQV9DUl9DCTB4ODAKKyNkZWZpbmUgRE1BX0NSX0QJMHg0MAorI2RlZmluZSBETUFfQ1JfRQkweDIwCisKKyNkZWZpbmUgRE1BX1NUX09GTAk0CisjZGVmaW5lIERNQV9TVF9JTlQJMgorI2RlZmluZSBETUFfU1RfQUIJMQorCisvKgorICogRE1BIChNRU1DKSBjb21wYXRpYmlsaXR5CisgKi8KKyNkZWZpbmUgSEFMRl9TQU0JdnJhbV9oYWxmX3NhbQorI2RlZmluZSBWRE1BX0FMSUdOTUVOVAkoSEFMRl9TQU0gKiAyKQorI2RlZmluZSBWRE1BX1hGRVJTSVpFCShIQUxGX1NBTSkKKyNkZWZpbmUgVkRNQV9JTklUCUlPTURfVklESU5JVAorI2RlZmluZSBWRE1BX1NUQVJUCUlPTURfVklEU1RBUlQKKyNkZWZpbmUgVkRNQV9FTkQJSU9NRF9WSURFTkQKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK2V4dGVybiB1bnNpZ25lZCBpbnQgdnJhbV9oYWxmX3NhbTsKKyNkZWZpbmUgdmlkZW9fc2V0X2RtYShzdGFydCxlbmQsb2Zmc2V0KQkJCQlcCitkbyB7CQkJCQkJCQlcCisJb3V0bCAoU0NSRUVOX1NUQVJUICsgc3RhcnQsIFZETUFfU1RBUlQpOwkJXAorCW91dGwgKFNDUkVFTl9TVEFSVCArIGVuZCAtIFZETUFfWEZFUlNJWkUsIFZETUFfRU5EKTsJXAorCWlmIChvZmZzZXQgPj0gZW5kIC0gVkRNQV9YRkVSU0laRSkJCQlcCisJCW9mZnNldCB8PSAweDQwMDAwMDAwOwkJCQlcCisJb3V0bCAoU0NSRUVOX1NUQVJUICsgb2Zmc2V0LCBWRE1BX0lOSVQpOwkJXAorfSB3aGlsZSAoMCkKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9saW5rdXAtbDExMTAuaCBiL2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9saW5rdXAtbDExMTAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWM5MTE2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL2xpbmt1cC1sMTExMC5oCkBAIC0wLDAgKzEsNDggQEAKKy8qCisqCisqIERlZmluaXRpb25zIGZvciBIMzYwMCBIYW5kaGVsZCBDb21wdXRlcgorKgorKiBDb3B5cmlnaHQgMjAwMSBDb21wYXEgQ29tcHV0ZXIgQ29ycG9yYXRpb24uCisqCisqIFVzZSBjb25zaXN0ZW50IHdpdGggdGhlIEdOVSBHUEwgaXMgcGVybWl0dGVkLAorKiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IG5vdGljZSBpcworKiBwcmVzZXJ2ZWQgaW4gaXRzIGVudGlyZXR5IGluIGFsbCBjb3BpZXMgYW5kIGRlcml2ZWQgd29ya3MuCisqCisqIENPTVBBUSBDT01QVVRFUiBDT1JQT1JBVElPTiBNQUtFUyBOTyBXQVJSQU5USUVTLCBFWFBSRVNTRUQgT1IgSU1QTElFRCwKKyogQVMgVE8gVEhFIFVTRUZVTE5FU1MgT1IgQ09SUkVDVE5FU1MgT0YgVEhJUyBDT0RFIE9SIElUUworKiBGSVRORVNTIEZPUiBBTlkgUEFSVElDVUxBUiBQVVJQT1NFLgorKgorKiBBdXRob3I6IEphbWV5IEhpY2tzLgorKgorKi8KKworLyogTGlua1VwIFN5c3RlbXMgUENDYXJkL0NvbXBhY3RGbGFzaCBJbnRlcmZhY2UgZm9yIFNBLTExMDAgKi8KKworLyogUEMgQ2FyZCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTElOS1VQX1BSU19TMQkoMSA8PCAwKSAvKiB2b2x0YWdlIGNvbnRyb2wgYml0cyBTMS1TNCAqLworI2RlZmluZSBMSU5LVVBfUFJTX1MyCSgxIDw8IDEpCisjZGVmaW5lIExJTktVUF9QUlNfUzMJKDEgPDwgMikKKyNkZWZpbmUgTElOS1VQX1BSU19TNAkoMSA8PCAzKQorI2RlZmluZSBMSU5LVVBfUFJTX0JWRDEJKDEgPDwgNCkKKyNkZWZpbmUgTElOS1VQX1BSU19CVkQyCSgxIDw8IDUpCisjZGVmaW5lIExJTktVUF9QUlNfVlMxCSgxIDw8IDYpCisjZGVmaW5lIExJTktVUF9QUlNfVlMyCSgxIDw8IDcpCisjZGVmaW5lIExJTktVUF9QUlNfUkRZCSgxIDw8IDgpCisjZGVmaW5lIExJTktVUF9QUlNfQ0QxCSgxIDw8IDkpCisjZGVmaW5lIExJTktVUF9QUlNfQ0QyCSgxIDw8IDEwKQorCisvKiBQQyBDYXJkIENvbW1hbmQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTElOS1VQX1BSQ19TMQkoMSA8PCAwKQorI2RlZmluZSBMSU5LVVBfUFJDX1MyCSgxIDw8IDEpCisjZGVmaW5lIExJTktVUF9QUkNfUzMJKDEgPDwgMikKKyNkZWZpbmUgTElOS1VQX1BSQ19TNAkoMSA8PCAzKQorI2RlZmluZSBMSU5LVVBfUFJDX1JFU0VUICgxIDw8IDQpCisjZGVmaW5lIExJTktVUF9QUkNfQVBPRQkoMSA8PCA1KSAvKiBBdXRvIFBvd2VyIE9mZiBFbmFibGU6IGNsZWFycyBTMS1TNCB3aGVuIGVpdGhlciBuQ0QgZ29lcyBoaWdoICovCisjZGVmaW5lIExJTktVUF9QUkNfQ0ZFCSgxIDw8IDYpIC8qIENvbXBhY3RGbGFzaCBtb2RlIEVuYWJsZTogYWRkcmVzc2VzIEFbMTA6MF0gb25seSwgQVsyNToxMV0gaGlnaCAqLworI2RlZmluZSBMSU5LVVBfUFJDX1NPRQkoMSA8PCA3KSAvKiBzaWduYWwgb3V0cHV0IGRyaXZlciBlbmFibGUgKi8KKyNkZWZpbmUgTElOS1VQX1BSQ19TU1AJKDEgPDwgOCkgLyogc29jayBzZWxlY3QgcG9sYXJpdHk6IDAgZm9yIHNvY2tldCAwLCAxIGZvciBzb2NrZXQgMSAqLworI2RlZmluZSBMSU5LVVBfUFJDX01CWgkoMSA8PCAxNSkgLyogbXVzdCBiZSB6ZXJvICovCisKK3N0cnVjdCBsaW5rdXBfbDExMTAgeworCXZvbGF0aWxlIHNob3J0IHByYzsKK307CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvbG9jb21vLmggYi9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvbG9jb21vLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWYxMDA0OAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9sb2NvbW8uaApAQCAtMCwwICsxLDIwNiBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9sb2NvbW8uaAorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBMb0NvTW8gRy9BIENoaXAKKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDQgSm9obiBMZW56CisgKgorICogTWF5IGJlIGNvcGllZCBvciBtb2RpZmllZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSBsaW51eC9DT1BZSU5HIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICoKKyAqIEJhc2VkIG9uIHNhMTExMS5oCisgKi8KKyNpZm5kZWYgX0FTTV9BUkNIX0xPQ09NTworI2RlZmluZSBfQVNNX0FSQ0hfTE9DT01PCisKKyNkZWZpbmUgbG9jb21vX3dyaXRlbCh2YWwsYWRkcikJKHsgKih2b2xhdGlsZSB1MTYgKikoYWRkcikgPSAodmFsKTsgfSkKKyNkZWZpbmUgbG9jb21vX3JlYWRsKGFkZHIpCSgqKHZvbGF0aWxlIHUxNiAqKShhZGRyKSkKKworLyogTE9DT01PIHZlcnNpb24gKi8KKyNkZWZpbmUgTE9DT01PX1ZFUgkweDAwCisKKy8qIFBpbiBzdGF0dXMgKi8KKyNkZWZpbmUgTE9DT01PX1NUCTB4MDQKKworLyogUGluIHN0YXR1cyAqLworI2RlZmluZSBMT0NPTU9fQzMySwkweDA4CisKKy8qIEludGVycnVwdCBjb250cm9sbGVyICovCisjZGVmaW5lIExPQ09NT19JQ1IJMHgwQworCisvKiBNQ1MgZGVjb2RlciBmb3IgYm9vdCBzZWxlY3RpbmcgKi8KKyNkZWZpbmUgTE9DT01PX01DU1gwCTB4MTAKKyNkZWZpbmUgTE9DT01PX01DU1gxCTB4MTQKKyNkZWZpbmUgTE9DT01PX01DU1gyCTB4MTgKKyNkZWZpbmUgTE9DT01PX01DU1gzCTB4MWMKKworLyogVG91Y2ggcGFuZWwgY29udHJvbGxlciAqLworI2RlZmluZSBMT0NPTU9fQVNECTB4MjAJCS8qIEFEIHN0YXJ0IGRlbGF5ICovCisjZGVmaW5lIExPQ09NT19IU0QJMHgyOAkJLyogSFNZUyBkZWxheSAqLworI2RlZmluZSBMT0NPTU9fSFNDCTB4MmMJCS8qIEhTWVMgcGVyaW9kICovCisjZGVmaW5lIExPQ09NT19UQURDCTB4MzAJCS8qIHRhYmxldCBBREMgY2xvY2sgKi8KKworCisvKiBMb25nIHRpbWUgdGltZXIgKi8KKyNkZWZpbmUgTE9DT01PX0xUQwkweGQ4CQkvKiBMVEMgaW50ZXJydXB0IHNldHRpbmcgKi8KKyNkZWZpbmUgTE9DT01PX0xUSU5UCTB4ZGMJCS8qIExUQyBpbnRlcnJ1cHQgKi8KKworLyogREFDIGNvbnRyb2wgc2lnbmFsIGZvciBMQ0QgKENPTUFESiApICovCisjZGVmaW5lIExPQ09NT19EQUMJCTB4ZTAKKy8qIERBQyBjb250cm9sICovCisjZGVmaW5lCUxPQ09NT19EQUNfU0NMT0VCCTB4MDgJLyogU0NMIHBpbiBvdXRwdXQgZGF0YSAgICAgICAqLworI2RlZmluZQlMT0NPTU9fREFDX1RFU1QJCTB4MDQJLyogVGVzdCBiaXQgICAgICAgICAgICAgICAgICAqLworI2RlZmluZQlMT0NPTU9fREFDX1NEQQkJMHgwMgkvKiBTREEgcGluIGxldmVsIChyZWFkLW9ubHkpICovCisjZGVmaW5lCUxPQ09NT19EQUNfU0RBT0VCCTB4MDEJLyogU0RBIHBpbiBvdXRwdXQgZGF0YSAgICAgICAqLworCisvKiBTUEkgaW50ZXJmYWNlICovCisjZGVmaW5lIExPQ09NT19TUElNRAkweDYwCQkvKiBTUEkgbW9kZSBzZXR0aW5nICovCisjZGVmaW5lIExPQ09NT19TUElDVAkweDY0CQkvKiBTUEkgbW9kZSBjb250cm9sICovCisjZGVmaW5lIExPQ09NT19TUElTVAkweDY4CQkvKiBTUEkgc3RhdHVzICovCisjZGVmaW5lIExPQ09NT19TUElJUwkweDcwCQkvKiBTUEkgaW50ZXJydXB0IHN0YXR1cyAqLworI2RlZmluZSBMT0NPTU9fU1BJV0UJMHg3NAkJLyogU1BJIGludGVycnVwdCBzdGF0dXMgd3JpdGUgZW5hYmxlICovCisjZGVmaW5lIExPQ09NT19TUElJRQkweDc4CQkvKiBTUEkgaW50ZXJydXB0IGVuYWJsZSAqLworI2RlZmluZSBMT0NPTU9fU1BJSVIJMHg3YwkJLyogU1BJIGludGVycnVwdCByZXF1ZXN0ICovCisjZGVmaW5lIExPQ09NT19TUElURAkweDgwCQkvKiBTUEkgdHJhbnNmZXIgZGF0YSB3cml0ZSAqLworI2RlZmluZSBMT0NPTU9fU1BJUkQJMHg4NAkJLyogU1BJIHJlY2VpdmUgZGF0YSByZWFkICovCisjZGVmaW5lIExPQ09NT19TUElUUwkweDg4CQkvKiBTUEkgdHJhbnNmZXIgZGF0YSBzaGlmdCAqLworI2RlZmluZSBMT0NPTU9fU1BJUlMJMHg4QwkJLyogU1BJIHJlY2VpdmUgZGF0YSBzaGlmdCAqLworI2RlZmluZQlMT0NPTU9fU1BJX1RFTkQJKDEgPDwgMykJLyogVHJhbnNmZXIgZW5kIGJpdCAqLworI2RlZmluZQlMT0NPTU9fU1BJX09WUk4JKDEgPDwgMikJLyogT3ZlciBSdW4gYml0ICovCisjZGVmaW5lCUxPQ09NT19TUElfUkZXCSgxIDw8IDEpCS8qIHdyaXRlIGJ1ZmZlciBiaXQgKi8KKyNkZWZpbmUJTE9DT01PX1NQSV9SRlIJKDEpCQkvKiByZWFkIGJ1ZmZlciBiaXQgKi8KKworLyogR1BJTyAqLworI2RlZmluZSBMT0NPTU9fR1BECQkweDkwCS8qIEdQSU8gZGlyZWN0aW9uICovCisjZGVmaW5lIExPQ09NT19HUEUJCTB4OTQJLyogR1BJTyBpbnB1dCBlbmFibGUgKi8KKyNkZWZpbmUgTE9DT01PX0dQTAkJMHg5OAkvKiBHUElPIGxldmVsICovCisjZGVmaW5lIExPQ09NT19HUE8JCTB4OWMJLyogR1BJTyBvdXQgZGF0YSBzZXR0ZWluZyAqLworI2RlZmluZSBMT0NPTU9fR1JJRQkJMHhhMAkvKiBHUElPIHJpc2UgZGV0ZWN0aW9uICovCisjZGVmaW5lIExPQ09NT19HRklFCQkweGE0CS8qIEdQSU8gZmFsbCBkZXRlY3Rpb24gKi8KKyNkZWZpbmUgTE9DT01PX0dJUwkJMHhhOAkvKiBHUElPIGVkZ2UgZGV0ZWN0aW9uIHN0YXR1cyAqLworI2RlZmluZSBMT0NPTU9fR1dFCQkweGFjCS8qIEdQSU8gc3RhdHVzIHdyaXRlIGVuYWJsZSAqLworI2RlZmluZSBMT0NPTU9fR0lFCQkweGIwCS8qIEdQSU8gaW50ZXJydXB0IGVuYWJsZSAqLworI2RlZmluZSBMT0NPTU9fR0lSCQkweGI0CS8qIEdQSU8gaW50ZXJydXB0IHJlcXVlc3QgKi8KKyNkZWZpbmUJTE9DT01PX0dQSU8oTmIpCQkoMHgwMSA8PCAoTmIpKQorI2RlZmluZSBMT0NPTU9fR1BJT19SVFMJCUxPQ09NT19HUElPKDApCisjZGVmaW5lIExPQ09NT19HUElPX0NUUwkJTE9DT01PX0dQSU8oMSkKKyNkZWZpbmUgTE9DT01PX0dQSU9fRFNSCQlMT0NPTU9fR1BJTygyKQorI2RlZmluZSBMT0NPTU9fR1BJT19EVFIJCUxPQ09NT19HUElPKDMpCisjZGVmaW5lIExPQ09NT19HUElPX0xDRF9WU0hBX09OCUxPQ09NT19HUElPKDQpCisjZGVmaW5lIExPQ09NT19HUElPX0xDRF9WU0hEX09OCUxPQ09NT19HUElPKDUpCisjZGVmaW5lIExPQ09NT19HUElPX0xDRF9WRUVfT04JTE9DT01PX0dQSU8oNikKKyNkZWZpbmUgTE9DT01PX0dQSU9fTENEX01PRAlMT0NPTU9fR1BJTyg3KQorI2RlZmluZSBMT0NPTU9fR1BJT19EQUNfT04JTE9DT01PX0dQSU8oOCkKKyNkZWZpbmUgTE9DT01PX0dQSU9fRkxfVlIJTE9DT01PX0dQSU8oOSkKKyNkZWZpbmUgTE9DT01PX0dQSU9fREFDX1NEQVRBCUxPQ09NT19HUElPKDEwKQorI2RlZmluZSBMT0NPTU9fR1BJT19EQUNfU0NLCUxPQ09NT19HUElPKDExKQorI2RlZmluZSBMT0NPTU9fR1BJT19EQUNfU0xPQUQJTE9DT01PX0dQSU8oMTIpCisKKy8qIFN0YXJ0IHRoZSBkZWZpbml0aW9ucyBvZiB0aGUgZGV2aWNlcy4gIEVhY2ggZGV2aWNlIGhhcyBhbiBpbml0aWFsCisgKiBiYXNlIGFkZHJlc3MgYW5kIGEgc2VyaWVzIG9mIG9mZnNldHMgZnJvbSB0aGF0IGJhc2UgYWRkcmVzcy4gKi8KKworLyogS2V5Ym9hcmQgY29udHJvbGxlciAqLworI2RlZmluZSBMT0NPTU9fS0VZQk9BUkQJCTB4NDAKKyNkZWZpbmUgTE9DT01PX0tJQgkJMHgwMAkvKiBLSUIgbGV2ZWwgKi8KKyNkZWZpbmUgTE9DT01PX0tTQwkJMHgwNAkvKiBLU1RSQiBjb250cm9sICovCisjZGVmaW5lIExPQ09NT19LQ01ECQkweDA4CS8qIEtTVFJCIGNvbW1hbmQgKi8KKyNkZWZpbmUgTE9DT01PX0tJQwkJMHgwYwkvKiBLZXkgaW50ZXJydXB0ICovCisKKy8qIEZyb250IGxpZ2h0IGFkanVzdG1lbnQgY29udHJvbGxlciAqLworI2RlZmluZSBMT0NPTU9fRlJPTlRMSUdIVAkweGM4CisjZGVmaW5lIExPQ09NT19BTFMJCTB4MDAJLyogQWRqdXN0IGxpZ2h0IGN5Y2xlICovCisjZGVmaW5lIExPQ09NT19BTEQJCTB4MDQJLyogQWRqdXN0IGxpZ2h0IGR1dHkgKi8KKworLyogQmFja2xpZ2h0IGNvbnRyb2xsZXI6IFRGVCBzaWduYWwgKi8KKyNkZWZpbmUgTE9DT01PX0JBQ0tMSUdIVAkweDM4CisjZGVmaW5lIExPQ09NT19UQwkJMHgwMAkJLyogVEZUIGNvbnRyb2wgc2lnbmFsICovCisjZGVmaW5lIExPQ09NT19DUFNECQkweDA0CQkvKiBDUFMgZGVsYXkgKi8KKworLyogQXVkaW8gY29udHJvbGxlciAqLworI2RlZmluZSBMT0NPTU9fQVVESU8JCTB4NTQKKyNkZWZpbmUgTE9DT01PX0FDQwkJMHgwMAkvKiBBdWRpbyBjbG9jayAqLworI2RlZmluZSBMT0NPTU9fUEFJRgkJMHg3QwkvKiBQQ00gYXVkaW8gaW50ZXJmYWNlICovCisvKiBBdWRpbyBjbG9jayAqLworI2RlZmluZQlMT0NPTU9fQUNDX1hPTgkJMHg4MAorI2RlZmluZQlMT0NPTU9fQUNDX1hFTgkJMHg0MAorI2RlZmluZQlMT0NPTU9fQUNDX1hTRUwwCTB4MDAKKyNkZWZpbmUJTE9DT01PX0FDQ19YU0VMMQkweDIwCisjZGVmaW5lCUxPQ09NT19BQ0NfTUNMS0VOCTB4MTAKKyNkZWZpbmUJTE9DT01PX0FDQ182NEZTRU4JMHgwOAorI2RlZmluZQlMT0NPTU9fQUNDX0NMS1NFTDAwMAkweDAwCS8qIG1jbGsgIDIgKi8KKyNkZWZpbmUJTE9DT01PX0FDQ19DTEtTRUwwMDEJMHgwMQkvKiBtY2xrICAzICovCisjZGVmaW5lCUxPQ09NT19BQ0NfQ0xLU0VMMDEwCTB4MDIJLyogbWNsayAgNCAqLworI2RlZmluZQlMT0NPTU9fQUNDX0NMS1NFTDAxMQkweDAzCS8qIG1jbGsgIDYgKi8KKyNkZWZpbmUJTE9DT01PX0FDQ19DTEtTRUwxMDAJMHgwNAkvKiBtY2xrICA4ICovCisjZGVmaW5lCUxPQ09NT19BQ0NfQ0xLU0VMMTAxCTB4MDUJLyogbWNsayAxMiAqLworLyogUENNIGF1ZGlvIGludGVyZmFjZSAqLworI2RlZmluZQlMT0NPTU9fUEFJRl9TQ0lOVgkweDIwCisjZGVmaW5lCUxPQ09NT19QQUlGX1NDRU4JMHgxMAorI2RlZmluZQlMT0NPTU9fUEFJRl9MUkNSU1QJMHgwOAorI2RlZmluZQlMT0NPTU9fUEFJRl9MUkNFVkUJMHgwNAorI2RlZmluZQlMT0NPTU9fUEFJRl9MUkNJTlYJMHgwMgorI2RlZmluZQlMT0NPTU9fUEFJRl9MUkNFTgkweDAxCisKKy8qIExFRCBjb250cm9sbGVyICovCisjZGVmaW5lIExPQ09NT19MRUQJCTB4ZTgKKyNkZWZpbmUgTE9DT01PX0xQVDAJCTB4MDAKKyNkZWZpbmUgTE9DT01PX0xQVDEJCTB4MDQKKy8qIExFRCBjb250cm9sICovCisjZGVmaW5lIExPQ09NT19MUFRfVE9GSAkJMHg4MAorI2RlZmluZSBMT0NPTU9fTFBUX1RPRkwJCTB4MDgKKyNkZWZpbmUgTE9DT01PX0xQVF9UT0goVE9IKQkoKFRPSCAmIDB4NykgPDwgNCkKKyNkZWZpbmUgTE9DT01PX0xQVF9UT0woVE9MKQkoKFRPTCAmIDB4NykpCisKK2V4dGVybiBzdHJ1Y3QgYnVzX3R5cGUgbG9jb21vX2J1c190eXBlOworCisjZGVmaW5lIExPQ09NT19ERVZJRF9LRVlCT0FSRAkwCisjZGVmaW5lIExPQ09NT19ERVZJRF9GUk9OVExJR0hUCTEKKyNkZWZpbmUgTE9DT01PX0RFVklEX0JBQ0tMSUdIVAkyCisjZGVmaW5lIExPQ09NT19ERVZJRF9BVURJTwkzCisjZGVmaW5lIExPQ09NT19ERVZJRF9MRUQJNAorI2RlZmluZSBMT0NPTU9fREVWSURfVUFSVAk1CisKK3N0cnVjdCBsb2NvbW9fZGV2IHsKKwlzdHJ1Y3QgZGV2aWNlCWRldjsKKwl1bnNpZ25lZCBpbnQJZGV2aWQ7CisJdW5zaWduZWQgaW50CWlycVsxXTsKKworCXZvaWQJCSptYXBiYXNlOworCXVuc2lnbmVkIGxvbmcJbGVuZ3RoOworCisJdTY0CQlkbWFfbWFzazsKK307CisKKyNkZWZpbmUgTE9DT01PX0RFVihfZCkJY29udGFpbmVyX29mKChfZCksIHN0cnVjdCBsb2NvbW9fZGV2LCBkZXYpCisKKyNkZWZpbmUgbG9jb21vX2dldF9kcnZkYXRhKGQpCWRldl9nZXRfZHJ2ZGF0YSgmKGQpLT5kZXYpCisjZGVmaW5lIGxvY29tb19zZXRfZHJ2ZGF0YShkLHApCWRldl9zZXRfZHJ2ZGF0YSgmKGQpLT5kZXYsIHApCisKK3N0cnVjdCBsb2NvbW9fZHJpdmVyIHsKKwlzdHJ1Y3QgZGV2aWNlX2RyaXZlcglkcnY7CisJdW5zaWduZWQgaW50CQlkZXZpZDsKKwlpbnQgKCpwcm9iZSkoc3RydWN0IGxvY29tb19kZXYgKik7CisJaW50ICgqcmVtb3ZlKShzdHJ1Y3QgbG9jb21vX2RldiAqKTsKKwlpbnQgKCpzdXNwZW5kKShzdHJ1Y3QgbG9jb21vX2RldiAqLCBwbV9tZXNzYWdlX3QpOworCWludCAoKnJlc3VtZSkoc3RydWN0IGxvY29tb19kZXYgKik7Cit9OworCisjZGVmaW5lIExPQ09NT19EUlYoX2QpCWNvbnRhaW5lcl9vZigoX2QpLCBzdHJ1Y3QgbG9jb21vX2RyaXZlciwgZHJ2KQorCisjZGVmaW5lIExPQ09NT19EUklWRVJfTkFNRShfbGRldikgKChfbGRldiktPmRldi5kcml2ZXItPm5hbWUpCisKK3ZvaWQgbG9jb21vX2xjZF9wb3dlcihzdHJ1Y3QgbG9jb21vX2RldiAqLCBpbnQsIHVuc2lnbmVkIGludCk7CisKK2ludCBsb2NvbW9fZHJpdmVyX3JlZ2lzdGVyKHN0cnVjdCBsb2NvbW9fZHJpdmVyICopOwordm9pZCBsb2NvbW9fZHJpdmVyX3VucmVnaXN0ZXIoc3RydWN0IGxvY29tb19kcml2ZXIgKik7CisKKy8qIEdQSU8gY29udHJvbCBmdW5jdGlvbnMgKi8KK3ZvaWQgbG9jb21vX2dwaW9fc2V0X2RpcihzdHJ1Y3QgbG9jb21vX2RldiAqbGRldiwgdW5zaWduZWQgaW50IGJpdHMsIHVuc2lnbmVkIGludCBkaXIpOwordW5zaWduZWQgaW50IGxvY29tb19ncGlvX3JlYWRfbGV2ZWwoc3RydWN0IGxvY29tb19kZXYgKmxkZXYsIHVuc2lnbmVkIGludCBiaXRzKTsKK3Vuc2lnbmVkIGludCBsb2NvbW9fZ3Bpb19yZWFkX291dHB1dChzdHJ1Y3QgbG9jb21vX2RldiAqbGRldiwgdW5zaWduZWQgaW50IGJpdHMpOwordm9pZCBsb2NvbW9fZ3Bpb193cml0ZShzdHJ1Y3QgbG9jb21vX2RldiAqbGRldiwgdW5zaWduZWQgaW50IGJpdHMsIHVuc2lnbmVkIGludCBzZXQpOworCisvKiBNNjIzMzIgY29udHJvbCBmdW5jdGlvbiAqLwordm9pZCBsb2NvbW9fbTYyMzMyX3NlbmRkYXRhKHN0cnVjdCBsb2NvbW9fZGV2ICpsZGV2LCB1bnNpZ25lZCBpbnQgZGFjX2RhdGEsIGludCBjaGFubmVsKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvbWVtYy5oIGIvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL21lbWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWVmNWFhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL21lbWMuaApAQCAtMCwwICsxLDI2IEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9tZW1jLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSBSdXNzZWxsIEtpbmcuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2RlZmluZSBWRE1BX0FMSUdOTUVOVAlQQUdFX1NJWkUKKyNkZWZpbmUgVkRNQV9YRkVSU0laRQkxNgorI2RlZmluZSBWRE1BX0lOSVQJMAorI2RlZmluZSBWRE1BX1NUQVJUCTEKKyNkZWZpbmUgVkRNQV9FTkQJMgorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworZXh0ZXJuIHZvaWQgbWVtY193cml0ZSh1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBsb25nIHZhbCk7CisKKyNkZWZpbmUgdmlkZW9fc2V0X2RtYShzdGFydCxlbmQsb2Zmc2V0KQkJCQlcCitkbyB7CQkJCQkJCQlcCisJbWVtY193cml0ZSAoVkRNQV9TVEFSVCwgKHN0YXJ0ID4+IDIpKTsJCQlcCisJbWVtY193cml0ZSAoVkRNQV9FTkQsIChlbmQgLSBWRE1BX1hGRVJTSVpFKSA+PiAyKTsJXAorCW1lbWNfd3JpdGUgKFZETUFfSU5JVCwgKG9mZnNldCA+PiAyKSk7CQkJXAorfSB3aGlsZSAoMCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvcGNpX3YzLmggYi9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvcGNpX3YzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ0OTdiZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9wY2lfdjMuaApAQCAtMCwwICsxLDE4NiBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvcGNpX3YzLmgKKyAqCisgKiAgSW50ZXJuYWwgaGVhZGVyIGZpbGUgUENJIFYzIGNoaXAKKyAqCisgKiAgQ29weXJpZ2h0IChDKSBBUk0gTGltaXRlZAorICogIENvcHlyaWdodCAoQykgMjAwMC0yMDAxIERlZXAgQmx1ZSBTb2x1dGlvbnMgTHRkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworI2lmbmRlZiBBU01fQVJNX0hBUkRXQVJFX1BDSV9WM19ICisjZGVmaW5lIEFTTV9BUk1fSEFSRFdBUkVfUENJX1YzX0gKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIFYzIExvY2FsIEJ1cyB0byBQQ0kgQnJpZGdlIGRlZmluaXRpb25zCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgUmVnaXN0ZXJzICh0aGVzZSBhcmUgdGFrZW4gZnJvbSBwYWdlIDEyOSBvZiB0aGUgRVBDIFVzZXIncyBNYW51YWwgUmV2IDEuMDQKKyAqICBBbGwgVjMgcmVnaXN0ZXIgbmFtZXMgYXJlIHByZWZhY2VkIGJ5IFYzXyB0byBhdm9pZCBjbGFzaGluZyB3aXRoIGFueSBvdGhlcgorICogIFBDSSBkZWZpbml0aW9ucy4gIFRoZWlyIG5hbWVzIG1hdGNoIHRoZSB1c2VyJ3MgbWFudWFsLgorICogCisgKiAgSSdtIGFzc3VtaW5nIHRoYXQgSTIwIGlzIGRpc2FibGVkLgorICogCisgKi8KKyNkZWZpbmUgVjNfUENJX1ZFTkRPUiAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIFYzX1BDSV9ERVZJQ0UgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBWM19QQ0lfQ01EICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgVjNfUENJX1NUQVQgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA2CisjZGVmaW5lIFYzX1BDSV9DQ19SRVYgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBWM19QQ0lfSERSX0NGRyAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEMKKyNkZWZpbmUgVjNfUENJX0lPX0JBU0UgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIFYzX1BDSV9CQVNFMCAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNAorI2RlZmluZSBWM19QQ0lfQkFTRTEgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKKyNkZWZpbmUgVjNfUENJX1NVQl9WRU5ET1IgICAgICAgICAgICAgICAweDAwMDAwMDJDCisjZGVmaW5lIFYzX1BDSV9TVUJfSUQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyRQorI2RlZmluZSBWM19QQ0lfUk9NICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzAKKyNkZWZpbmUgVjNfUENJX0JQQVJBTSAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNDCisjZGVmaW5lIFYzX1BDSV9NQVAwICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBWM19QQ0lfTUFQMSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDQKKyNkZWZpbmUgVjNfUENJX0lOVF9TVEFUICAgICAgICAgICAgICAgICAweDAwMDAwMDQ4CisjZGVmaW5lIFYzX1BDSV9JTlRfQ0ZHICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0QyAKKyNkZWZpbmUgVjNfTEJfQkFTRTAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDU0CisjZGVmaW5lIFYzX0xCX0JBU0UxICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1OAorI2RlZmluZSBWM19MQl9NQVAwICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNUUKKyNkZWZpbmUgVjNfTEJfTUFQMSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDYyCisjZGVmaW5lIFYzX0xCX0JBU0UyICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2NAorI2RlZmluZSBWM19MQl9NQVAyICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjYKKyNkZWZpbmUgVjNfTEJfU0laRSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDY4CisjZGVmaW5lIFYzX0xCX0lPX0JBU0UgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2RQorI2RlZmluZSBWM19GSUZPX0NGRyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzAKKyNkZWZpbmUgVjNfRklGT19QUklPUklUWSAgICAgICAgICAgICAgICAweDAwMDAwMDcyCisjZGVmaW5lIFYzX0ZJRk9fU1RBVCAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3NAorI2RlZmluZSBWM19MQl9JU1RBVCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzYKKyNkZWZpbmUgVjNfTEJfSU1BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDc3CisjZGVmaW5lIFYzX1NZU1RFTSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3OAorI2RlZmluZSBWM19MQl9DRkcgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0EKKyNkZWZpbmUgVjNfUENJX0NGRyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdDCisjZGVmaW5lIFYzX0RNQV9QQ0lfQURSMCAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBWM19ETUFfUENJX0FEUjEgICAgICAgICAgICAgICAgIDB4MDAwMDAwOTAKKyNkZWZpbmUgVjNfRE1BX0xPQ0FMX0FEUjAgICAgICAgICAgICAgICAweDAwMDAwMDg0CisjZGVmaW5lIFYzX0RNQV9MT0NBTF9BRFIxICAgICAgICAgICAgICAgMHgwMDAwMDA5NAorI2RlZmluZSBWM19ETUFfTEVOR1RIMCAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODgKKyNkZWZpbmUgVjNfRE1BX0xFTkdUSDEgICAgICAgICAgICAgICAgICAweDAwMDAwMDk4CisjZGVmaW5lIFYzX0RNQV9DU1IwICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4QgorI2RlZmluZSBWM19ETUFfQ1NSMSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwOUIKKyNkZWZpbmUgVjNfRE1BX0NUTEJfQURSMCAgICAgICAgICAgICAgICAweDAwMDAwMDhDCisjZGVmaW5lIFYzX0RNQV9DVExCX0FEUjEgICAgICAgICAgICAgICAgMHgwMDAwMDA5QworI2RlZmluZSBWM19ETUFfREVMQVkgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRTAKKyNkZWZpbmUgVjNfTUFJTF9EQVRBICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEMwCisjZGVmaW5lIFYzX1BDSV9NQUlMX0lFV1IgICAgICAgICAgICAgICAgMHgwMDAwMDBEMAorI2RlZmluZSBWM19QQ0lfTUFJTF9JRVJEICAgICAgICAgICAgICAgIDB4MDAwMDAwRDIKKyNkZWZpbmUgVjNfTEJfTUFJTF9JRVdSICAgICAgICAgICAgICAgICAweDAwMDAwMEQ0CisjZGVmaW5lIFYzX0xCX01BSUxfSUVSRCAgICAgICAgICAgICAgICAgMHgwMDAwMDBENgorI2RlZmluZSBWM19NQUlMX1dSX1NUQVQgICAgICAgICAgICAgICAgIDB4MDAwMDAwRDgKKyNkZWZpbmUgVjNfTUFJTF9SRF9TVEFUICAgICAgICAgICAgICAgICAweDAwMDAwMERBCisjZGVmaW5lIFYzX1FCQV9NQVAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBEQworCisvKiAgUENJIENPTU1BTkQgUkVHSVNURVIgYml0cworICovCisjZGVmaW5lIFYzX0NPTU1BTkRfTV9GQkJfRU4gICAgICAgICAgICAgKDEgPDwgOSkKKyNkZWZpbmUgVjNfQ09NTUFORF9NX1NFUlJfRU4gICAgICAgICAgICAoMSA8PCA4KQorI2RlZmluZSBWM19DT01NQU5EX01fUEFSX0VOICAgICAgICAgICAgICgxIDw8IDYpCisjZGVmaW5lIFYzX0NPTU1BTkRfTV9NQVNURVJfRU4gICAgICAgICAgKDEgPDwgMikKKyNkZWZpbmUgVjNfQ09NTUFORF9NX01FTV9FTiAgICAgICAgICAgICAoMSA8PCAxKQorI2RlZmluZSBWM19DT01NQU5EX01fSU9fRU4gICAgICAgICAgICAgICgxIDw8IDApCisKKy8qICBTWVNURU0gUkVHSVNURVIgYml0cworICovCisjZGVmaW5lIFYzX1NZU1RFTV9NX1JTVF9PVVQgICAgICAgICAgICAgKDEgPDwgMTUpCisjZGVmaW5lIFYzX1NZU1RFTV9NX0xPQ0sgICAgICAgICAgICAgICAgKDEgPDwgMTQpCisKKy8qICBQQ0lfQ0ZHIGJpdHMKKyAqLworI2RlZmluZSBWM19QQ0lfQ0ZHX01fSTJPX0VOCQkoMSA8PCAxNSkKKyNkZWZpbmUgVjNfUENJX0NGR19NX0lPX1JFR19ESVMJCSgxIDw8IDE0KQorI2RlZmluZSBWM19QQ0lfQ0ZHX01fSU9fRElTCQkoMSA8PCAxMykKKyNkZWZpbmUgVjNfUENJX0NGR19NX0VOM1YJCSgxIDw8IDEyKQorI2RlZmluZSBWM19QQ0lfQ0ZHX01fUkVUUllfRU4gICAgICAgICAgICgxIDw8IDEwKQorI2RlZmluZSBWM19QQ0lfQ0ZHX01fQURfTE9XMSAgICAgICAgICAgICgxIDw8IDkpCisjZGVmaW5lIFYzX1BDSV9DRkdfTV9BRF9MT1cwICAgICAgICAgICAgKDEgPDwgOCkKKworLyogIFBDSV9CQVNFIHJlZ2lzdGVyIGJpdHMgKFBDSSAtPiBMb2NhbCBCdXMpCisgKi8KKyNkZWZpbmUgVjNfUENJX0JBU0VfTV9BRFJfQkFTRSAgICAgICAgICAweEZGRjAwMDAwCisjZGVmaW5lIFYzX1BDSV9CQVNFX01fQURSX0JBU0VMICAgICAgICAgMHgwMDBGRkYwMAorI2RlZmluZSBWM19QQ0lfQkFTRV9NX1BSRUZFVENIICAgICAgICAgICgxIDw8IDMpCisjZGVmaW5lIFYzX1BDSV9CQVNFX01fVFlQRSAgICAgICAgICAgICAgKDMgPDwgMSkKKyNkZWZpbmUgVjNfUENJX0JBU0VfTV9JTyAgICAgICAgICAgICAgICAoMSA8PCAwKQorCisvKiAgUENJIE1BUCByZWdpc3RlciBiaXRzIChQQ0kgLT4gTG9jYWwgYnVzKQorICovCisjZGVmaW5lIFYzX1BDSV9NQVBfTV9NQVBfQURSICAgICAgICAgICAgMHhGRkYwMDAwMAorI2RlZmluZSBWM19QQ0lfTUFQX01fUkRfUE9TVF9JTkggICAgICAgICgxIDw8IDE1KQorI2RlZmluZSBWM19QQ0lfTUFQX01fUk9NX1NJWkUgICAgICAgICAgICgzIDw8IDEwKQorI2RlZmluZSBWM19QQ0lfTUFQX01fU1dBUCAgICAgICAgICAgICAgICgzIDw8IDgpCisjZGVmaW5lIFYzX1BDSV9NQVBfTV9BRFJfU0laRSAgICAgICAgICAgMHgwMDAwMDBGMAorI2RlZmluZSBWM19QQ0lfTUFQX01fUkVHX0VOICAgICAgICAgICAgICgxIDw8IDEpCisjZGVmaW5lIFYzX1BDSV9NQVBfTV9FTkFCTEUgICAgICAgICAgICAgKDEgPDwgMCkKKworLyoKKyAqICBMQl9CQVNFMCwxIHJlZ2lzdGVyIGJpdHMgKExvY2FsIGJ1cyAtPiBQQ0kpCisgKi8KKyNkZWZpbmUgVjNfTEJfQkFTRV9BRFJfQkFTRQkJMHhmZmYwMDAwMAorI2RlZmluZSBWM19MQl9CQVNFX1NXQVAJCQkoMyA8PCA4KQorI2RlZmluZSBWM19MQl9CQVNFX0FEUl9TSVpFCQkoMTUgPDwgNCkKKyNkZWZpbmUgVjNfTEJfQkFTRV9QUkVGRVRDSAkJKDEgPDwgMykKKyNkZWZpbmUgVjNfTEJfQkFTRV9FTkFCTEUJCSgxIDw8IDApCisKKyNkZWZpbmUgVjNfTEJfQkFTRV9BRFJfU0laRV8xTUIJCSgwIDw8IDQpCisjZGVmaW5lIFYzX0xCX0JBU0VfQURSX1NJWkVfMk1CCQkoMSA8PCA0KQorI2RlZmluZSBWM19MQl9CQVNFX0FEUl9TSVpFXzRNQgkJKDIgPDwgNCkKKyNkZWZpbmUgVjNfTEJfQkFTRV9BRFJfU0laRV84TUIJCSgzIDw8IDQpCisjZGVmaW5lIFYzX0xCX0JBU0VfQURSX1NJWkVfMTZNQgkoNCA8PCA0KQorI2RlZmluZSBWM19MQl9CQVNFX0FEUl9TSVpFXzMyTUIJKDUgPDwgNCkKKyNkZWZpbmUgVjNfTEJfQkFTRV9BRFJfU0laRV82NE1CCSg2IDw8IDQpCisjZGVmaW5lIFYzX0xCX0JBU0VfQURSX1NJWkVfMTI4TUIJKDcgPDwgNCkKKyNkZWZpbmUgVjNfTEJfQkFTRV9BRFJfU0laRV8yNTZNQgkoOCA8PCA0KQorI2RlZmluZSBWM19MQl9CQVNFX0FEUl9TSVpFXzUxMk1CCSg5IDw8IDQpCisjZGVmaW5lIFYzX0xCX0JBU0VfQURSX1NJWkVfMUdCCQkoMTAgPDwgNCkKKyNkZWZpbmUgVjNfTEJfQkFTRV9BRFJfU0laRV8yR0IJCSgxMSA8PCA0KQorCisjZGVmaW5lIHYzX2FkZHJfdG9fbGJfYmFzZShhKQkoKGEpICYgVjNfTEJfQkFTRV9BRFJfQkFTRSkKKworLyoKKyAqICBMQl9NQVAwLDEgcmVnaXN0ZXIgYml0cyAoTG9jYWwgYnVzIC0+IFBDSSkKKyAqLworI2RlZmluZSBWM19MQl9NQVBfTUFQX0FEUgkJMHhmZmYwCisjZGVmaW5lIFYzX0xCX01BUF9UWVBFCQkJKDcgPDwgMSkKKyNkZWZpbmUgVjNfTEJfTUFQX0FEX0xPV19FTgkJKDEgPDwgMCkKKworI2RlZmluZSBWM19MQl9NQVBfVFlQRV9JQUNLCQkoMCA8PCAxKQorI2RlZmluZSBWM19MQl9NQVBfVFlQRV9JTwkJKDEgPDwgMSkKKyNkZWZpbmUgVjNfTEJfTUFQX1RZUEVfTUVNCQkoMyA8PCAxKQorI2RlZmluZSBWM19MQl9NQVBfVFlQRV9DT05GSUcJCSg1IDw8IDEpCisjZGVmaW5lIFYzX0xCX01BUF9UWVBFX01FTV9NVUxUSVBMRQkoNiA8PCAxKQorCisjZGVmaW5lIHYzX2FkZHJfdG9fbGJfbWFwKGEpCSgoKGEpID4+IDE2KSAmIFYzX0xCX01BUF9NQVBfQURSKQorCisvKgorICogIExCX0JBU0UyIHJlZ2lzdGVyIGJpdHMgKExvY2FsIGJ1cyAtPiBQQ0kgSU8pCisgKi8KKyNkZWZpbmUgVjNfTEJfQkFTRTJfQURSX0JBU0UJCTB4ZmYwMAorI2RlZmluZSBWM19MQl9CQVNFMl9TV0FQCQkoMyA8PCA2KQorI2RlZmluZSBWM19MQl9CQVNFMl9FTkFCTEUJCSgxIDw8IDApCisKKyNkZWZpbmUgdjNfYWRkcl90b19sYl9iYXNlMihhKQkoKChhKSA+PiAxNikgJiBWM19MQl9CQVNFMl9BRFJfQkFTRSkKKworLyoKKyAqICBMQl9NQVAyIHJlZ2lzdGVyIGJpdHMgKExvY2FsIGJ1cyAtPiBQQ0kgSU8pCisgKi8KKyNkZWZpbmUgVjNfTEJfTUFQMl9NQVBfQURSCQkweGZmMDAKKworI2RlZmluZSB2M19hZGRyX3RvX2xiX21hcDIoYSkJKCgoYSkgPj4gMTYpICYgVjNfTEJfTUFQMl9NQVBfQURSKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9zYTExMTEuaCBiL2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9zYTExMTEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTlhZWEwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL3NhMTExMS5oCkBAIC0wLDAgKzEsNjAyIEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL1NBLTExMTEuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBKb2huIEcgRG9yc2V5IDxqb2huK0Bjcy5jbXUuZWR1PgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBkZWZpbml0aW9ucyBmb3IgdGhlIFNBLTExMTEgQ29tcGFuaW9uIENoaXAuCisgKiAoU3RydWN0dXJlIGFuZCBuYW1pbmcgYm9ycm93ZWQgZnJvbSBTQS0xMTAxLmgsIGJ5IFBldGVyIERhbmllbHNzb24uKQorICoKKyAqIE1hY3JvIHRoYXQgY2FsY3VsYXRlcyByZWFsIGFkZHJlc3MgZm9yIHJlZ2lzdGVycyBpbiB0aGUgU0EtMTExMQorICovCisKKyNpZm5kZWYgX0FTTV9BUkNIX1NBMTExMQorI2RlZmluZSBfQVNNX0FSQ0hfU0ExMTExCisKKyNpbmNsdWRlIDxhc20vYXJjaC9iaXRmaWVsZC5oPgorCisvKgorICogVGhlIFNBMTExMSBpcyBhbHdheXMgbG9jYXRlZCBhdCB2aXJ0dWFsIDB4ZjQwMDAwMDAsIGFuZCBpcyBhbHdheXMKKyAqICJuYXRpdmUiIGVuZGlhbi4KKyAqLworCisjZGVmaW5lIFNBMTExMV9WQkFTRQkJMHhmNDAwMDAwMAorCisvKiBEb24ndCB1c2UgdGhlc2UhICovCisjZGVmaW5lIFNBMTExMV9wMnYoIHggKSAgICAgICAgICgoeCkgLSBTQTExMTFfQkFTRSArIFNBMTExMV9WQkFTRSkKKyNkZWZpbmUgU0ExMTExX3YycCggeCApICAgICAgICAgKCh4KSAtIFNBMTExMV9WQkFTRSArIFNBMTExMV9CQVNFKQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2RlZmluZSBfU0ExMTExKHgpCSgoeCkgKyBzYTExMTEtPnJlc291cmNlLnN0YXJ0KQorI2VuZGlmCisKKy8qCisgKiAyNiBiaXRzIG9mIHRoZSBTQS0xMTEwIGFkZHJlc3MgYnVzIGFyZSBhdmFpbGFibGUgdG8gdGhlIFNBLTExMTEuCisgKiBVc2UgdGhlc2Ugd2hlbiBmZWVkaW5nIHRhcmdldCBhZGRyZXNzZXMgdG8gdGhlIERNQSBlbmdpbmVzLgorICovCisKKyNkZWZpbmUgU0ExMTExX0FERFJfV0lEVEgJKDI2KQorI2RlZmluZSBTQTExMTFfQUREUl9NQVNLCSgoMTw8U0ExMTExX0FERFJfV0lEVEgpLTEpCisjZGVmaW5lIFNBMTExMV9ETUFfQUREUih4KQkoKHgpJlNBMTExMV9BRERSX01BU0spCisKKy8qCisgKiBEb24ndCBhc2sgdGhlIChTQUMpIERNQSBlbmdpbmVzIHRvIG1vdmUgbGVzcyB0aGFuIHRoaXMgYW1vdW50LgorICovCisKKyNkZWZpbmUgU0ExMTExX1NBQ19ETUFfTUlOX1hGRVIJKDB4ODAwKQorCisvKgorICogU0ExMTExIHJlZ2lzdGVyIGRlZmluaXRpb25zLgorICovCisjZGVmaW5lIF9fQ0NSRUcoeCkJX19SRUdQKFNBMTExMV9WQkFTRSArICh4KSkKKworI2RlZmluZSBzYTExMTFfd3JpdGVsKHZhbCxhZGRyKQlfX3Jhd193cml0ZWwodmFsLCBhZGRyKQorI2RlZmluZSBzYTExMTFfcmVhZGwoYWRkcikJX19yYXdfcmVhZGwoYWRkcikKKworLyoKKyAqIFN5c3RlbSBCdXMgSW50ZXJmYWNlIChTQkkpCisgKgorICogUmVnaXN0ZXJzCisgKiAgICBTS0NSCUNvbnRyb2wgUmVnaXN0ZXIKKyAqICAgIFNNQ1IJU2hhcmVkIE1lbW9yeSBDb250cm9sbGVyIFJlZ2lzdGVyCisgKiAgICBTS0lECUlEIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgU0ExMTExX1NLQ1IJMHgwMDAwCisjZGVmaW5lIFNBMTExMV9TTUNSCTB4MDAwNAorI2RlZmluZSBTQTExMTFfU0tJRAkweDAwMDgKKworI2RlZmluZSBTS0NSX1BMTF9CWVBBU1MJKDE8PDApCisjZGVmaW5lIFNLQ1JfUkNMS0VOCSgxPDwxKQorI2RlZmluZSBTS0NSX1NMRUVQCSgxPDwyKQorI2RlZmluZSBTS0NSX0RPWkUJKDE8PDMpCisjZGVmaW5lIFNLQ1JfVkNPX09GRgkoMTw8NCkKKyNkZWZpbmUgU0tDUl9TQ0FOVFNURU4JKDE8PDUpCisjZGVmaW5lIFNLQ1JfQ0xLVFNURU4JKDE8PDYpCisjZGVmaW5lIFNLQ1JfUkRZRU4JKDE8PDcpCisjZGVmaW5lIFNLQ1JfU0VMQUMJKDE8PDgpCisjZGVmaW5lIFNLQ1JfT1BQQwkoMTw8OSkKKyNkZWZpbmUgU0tDUl9QTExUU1RFTgkoMTw8MTApCisjZGVmaW5lIFNLQ1JfVVNCSU9UU1RFTgkoMTw8MTEpCisvKgorICogRG9uJ3QgYmVsaWV2ZSB0aGUgc3BlY3MhICBUYWtlIHRoZW0sIHRocm93IHRoZW0gb3V0c2lkZS4gIExlYXZlIHRoZW0KKyAqIHRoZXJlIGZvciBhIHdlZWsuICBTcGl0IG9uIHRoZW0uICBXYWxrIG9uIHRoZW0uICBTdGFtcCBvbiB0aGVtLgorICogUG91ciBnYXNvbGluZSBvdmVyIHRoZW0gYW5kIGZpbmFsbHkgYnVybiB0aGVtLiAgTm93IHRoaW5rIGFib3V0IGNvZGluZy4KKyAqICAtIFRoZSBPY3RvYmVyIDE5OTkgZXJyYXRhICgyNzgyNjAtMDA3KSBzYXlzIGl0cyBiaXQgMTMsIDEgdG8gZW5hYmxlLgorICogIC0gVGhlIEZlYiAyMDAxIGVycmF0YSAoMjc4MjYwLTAxMCkgc2F5cyB0aGF0IHRoZSBwcmV2aW91cyBlcnJhdGEKKyAqICAgICgyNzgyNjAtMDA5KSBpcyB3cm9uZywgYW5kIGl0cyBiaXQgYWN0dWFsbHkgMTIsIGZpeGVkIGluIHNwZWMKKyAqICAgIDI3ODI0Mi0wMDMuCisgKiAgLSBUaGUgU0ExMTExIG1hbnVhbCAoMjc4MjQyKSBzYXlzIGJpdCAxMiwgYnV0IDAgdG8gZW5hYmxlLgorICogIC0gUmVhbGl0eSBpcyBiaXQgMTMsIDEgdG8gZW5hYmxlLgorICogICAgICAtLSBybWsKKyAqLworI2RlZmluZSBTS0NSX09FX0VOCSgxPDwxMykKKworI2RlZmluZSBTTUNSX0RUSU0JKDE8PDApCisjZGVmaW5lIFNNQ1JfTUJHRQkoMTw8MSkKKyNkZWZpbmUgU01DUl9EUkFDXzAJKDE8PDIpCisjZGVmaW5lIFNNQ1JfRFJBQ18xCSgxPDwzKQorI2RlZmluZSBTTUNSX0RSQUNfMgkoMTw8NCkKKyNkZWZpbmUgU01DUl9EUkFDCUZsZCgzLCAyKQorI2RlZmluZSBTTUNSX0NMQVQJKDE8PDUpCisKKyNkZWZpbmUgU0tJRF9TSVJFVl9NQVNLCSgweDAwMDAwMGYwKQorI2RlZmluZSBTS0lEX01UUkVWX01BU0sgKDB4MDAwMDAwMGYpCisjZGVmaW5lIFNLSURfSURfTUFTSwkoMHhmZmZmZmYwMCkKKyNkZWZpbmUgU0tJRF9TQTExMTFfSUQJKDB4NjkwY2MyMDApCisKKy8qCisgKiBTeXN0ZW0gQ29udHJvbGxlcgorICoKKyAqIFJlZ2lzdGVycworICogICAgU0tQQ1IJUG93ZXIgQ29udHJvbCBSZWdpc3RlcgorICogICAgU0tDRFIJQ2xvY2sgRGl2aWRlciBSZWdpc3RlcgorICogICAgU0tBVUQJQXVkaW8gQ2xvY2sgRGl2aWRlciBSZWdpc3RlcgorICogICAgU0tQTUMJUFMvMiBNb3VzZSBDbG9jayBEaXZpZGVyIFJlZ2lzdGVyCisgKiAgICBTS1BUQwlQUy8yIFRyYWNrIFBhZCBDbG9jayBEaXZpZGVyIFJlZ2lzdGVyCisgKiAgICBTS1BFTjAJUFdNMCBFbmFibGUgUmVnaXN0ZXIKKyAqICAgIFNLUFdNMAlQV00wIENsb2NrIFJlZ2lzdGVyCisgKiAgICBTS1BFTjEJUFdNMSBFbmFibGUgUmVnaXN0ZXIKKyAqICAgIFNLUFdNMQlQV00xIENsb2NrIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgU0ExMTExX1NLUENSCTB4MDIwMAorI2RlZmluZSBTQTExMTFfU0tDRFIJMHgwMjA0CisjZGVmaW5lIFNBMTExMV9TS0FVRAkweDAyMDgKKyNkZWZpbmUgU0ExMTExX1NLUE1DCTB4MDIwYworI2RlZmluZSBTQTExMTFfU0tQVEMJMHgwMjEwCisjZGVmaW5lIFNBMTExMV9TS1BFTjAJMHgwMjE0CisjZGVmaW5lIFNBMTExMV9TS1BXTTAJMHgwMjE4CisjZGVmaW5lIFNBMTExMV9TS1BFTjEJMHgwMjFjCisjZGVmaW5lIFNBMTExMV9TS1BXTTEJMHgwMjIwCisKKyNkZWZpbmUgU0tQQ1JfVUNMS0VOCSgxPDwwKQorI2RlZmluZSBTS1BDUl9BQ0NMS0VOCSgxPDwxKQorI2RlZmluZSBTS1BDUl9JMlNDTEtFTgkoMTw8MikKKyNkZWZpbmUgU0tQQ1JfTDNDTEtFTgkoMTw8MykKKyNkZWZpbmUgU0tQQ1JfU0NMS0VOCSgxPDw0KQorI2RlZmluZSBTS1BDUl9QTUNMS0VOCSgxPDw1KQorI2RlZmluZSBTS1BDUl9QVENMS0VOCSgxPDw2KQorI2RlZmluZSBTS1BDUl9EQ0xLRU4JKDE8PDcpCisjZGVmaW5lIFNLUENSX1BXTUNMS0VOCSgxPDw4KQorCisvKgorICogVVNCIEhvc3QgY29udHJvbGxlcgorICovCisjZGVmaW5lIFNBMTExMV9VU0IJCTB4MDQwMAorCisvKgorICogT2Zmc2V0cyBmcm9tIFNBMTExMV9VU0JfQkFTRQorICovCisjZGVmaW5lIFNBMTExMV9VU0JfU1RBVFVTCTB4MDExOAorI2RlZmluZSBTQTExMTFfVVNCX1JFU0VUCTB4MDExYworI2RlZmluZSBTQTExMTFfVVNCX0lSUVRFU1QJMHgwMTIwCisKKyNkZWZpbmUgVVNCX1JFU0VUX0ZPUkNFSUZSRVNFVAkoMSA8PCAwKQorI2RlZmluZSBVU0JfUkVTRVRfRk9SQ0VIQ1JFU0VUCSgxIDw8IDEpCisjZGVmaW5lIFVTQl9SRVNFVF9DTEtHRU5SRVNFVAkoMSA8PCAyKQorI2RlZmluZSBVU0JfUkVTRVRfU0lNU0NBTEVET1dOCSgxIDw8IDMpCisjZGVmaW5lIFVTQl9SRVNFVF9VU0JJTlRURVNUCSgxIDw8IDQpCisjZGVmaW5lIFVTQl9SRVNFVF9TTEVFUFNUQllFTgkoMSA8PCA1KQorI2RlZmluZSBVU0JfUkVTRVRfUFdSU0VOU0VMT1cJKDEgPDwgNikKKyNkZWZpbmUgVVNCX1JFU0VUX1BXUkNUUkxMT1cJKDEgPDwgNykKKworI2RlZmluZSBVU0JfU1RBVFVTX0lSUUhDSVJNVFdLVVAgICgxIDw8ICA3KQorI2RlZmluZSBVU0JfU1RBVFVTX0lSUUhDSUJVRkZBQ0MgICgxIDw8ICA4KQorI2RlZmluZSBVU0JfU1RBVFVTX05JUlFIQ0lNICAgICAgICgxIDw8ICA5KQorI2RlZmluZSBVU0JfU1RBVFVTX05IQ0lNRkNMUiAgICAgICgxIDw8IDEwKQorI2RlZmluZSBVU0JfU1RBVFVTX1VTQlBXUlNFTlNFICAgICgxIDw8IDExKQorCisvKgorICogU2VyaWFsIEF1ZGlvIENvbnRyb2xsZXIKKyAqCisgKiBSZWdpc3RlcnMKKyAqICAgIFNBQ1IwICAgICAgICAgICAgIFNlcmlhbCBBdWRpbyBDb21tb24gQ29udHJvbCBSZWdpc3RlcgorICogICAgU0FDUjEgICAgICAgICAgICAgU2VyaWFsIEF1ZGlvIEFsdGVybmF0ZSBNb2RlIChJMkMvTVNCKSBDb250cm9sIFJlZ2lzdGVyCisgKiAgICBTQUNSMiAgICAgICAgICAgICBTZXJpYWwgQXVkaW8gQUMtbGluayBDb250cm9sIFJlZ2lzdGVyCisgKiAgICBTQVNSMCAgICAgICAgICAgICBTZXJpYWwgQXVkaW8gSTJTL01TQiBJbnRlcmZhY2UgJiBGSUZPIFN0YXR1cyBSZWdpc3RlcgorICogICAgU0FTUjEgICAgICAgICAgICAgU2VyaWFsIEF1ZGlvIEFDLWxpbmsgSW50ZXJmYWNlICYgRklGTyBTdGF0dXMgUmVnaXN0ZXIKKyAqICAgIFNBU0NSICAgICAgICAgICAgIFNlcmlhbCBBdWRpbyBTdGF0dXMgQ2xlYXIgUmVnaXN0ZXIKKyAqICAgIEwzX0NBUiAgICAgICAgICAgIEwzIENvbnRyb2wgQnVzIEFkZHJlc3MgUmVnaXN0ZXIKKyAqICAgIEwzX0NEUiAgICAgICAgICAgIEwzIENvbnRyb2wgQnVzIERhdGEgUmVnaXN0ZXIKKyAqICAgIEFDQ0FSICAgICAgICAgICAgIEFDLWxpbmsgQ29tbWFuZCBBZGRyZXNzIFJlZ2lzdGVyCisgKiAgICBBQ0NEUiAgICAgICAgICAgICBBQy1saW5rIENvbW1hbmQgRGF0YSBSZWdpc3RlcgorICogICAgQUNTQVIgICAgICAgICAgICAgQUMtbGluayBTdGF0dXMgQWRkcmVzcyBSZWdpc3RlcgorICogICAgQUNTRFIgICAgICAgICAgICAgQUMtbGluayBTdGF0dXMgRGF0YSBSZWdpc3RlcgorICogICAgU0FEVENTICAgICAgICAgICAgU2VyaWFsIEF1ZGlvIERNQSBUcmFuc21pdCBDb250cm9sL1N0YXR1cyBSZWdpc3RlcgorICogICAgU0FEVFNBICAgICAgICAgICAgU2VyaWFsIEF1ZGlvIERNQSBUcmFuc21pdCBCdWZmZXIgU3RhcnQgQWRkcmVzcyBBCisgKiAgICBTQURUQ0EgICAgICAgICAgICBTZXJpYWwgQXVkaW8gRE1BIFRyYW5zbWl0IEJ1ZmZlciBDb3VudCBSZWdpc3RlciBBCisgKiAgICBTQURUU0IgICAgICAgICAgICBTZXJpYWwgQXVkaW8gRE1BIFRyYW5zbWl0IEJ1ZmZlciBTdGFydCBBZGRyZXNzIEIKKyAqICAgIFNBRFRDQiAgICAgICAgICAgIFNlcmlhbCBBdWRpbyBETUEgVHJhbnNtaXQgQnVmZmVyIENvdW50IFJlZ2lzdGVyIEIKKyAqICAgIFNBRFJDUyAgICAgICAgICAgIFNlcmlhbCBBdWRpbyBETUEgUmVjZWl2ZSBDb250cm9sL1N0YXR1cyBSZWdpc3RlcgorICogICAgU0FEUlNBICAgICAgICAgICAgU2VyaWFsIEF1ZGlvIERNQSBSZWNlaXZlIEJ1ZmZlciBTdGFydCBBZGRyZXNzIEEKKyAqICAgIFNBRFJDQSAgICAgICAgICAgIFNlcmlhbCBBdWRpbyBETUEgUmVjZWl2ZSBCdWZmZXIgQ291bnQgUmVnaXN0ZXIgQQorICogICAgU0FEUlNCICAgICAgICAgICAgU2VyaWFsIEF1ZGlvIERNQSBSZWNlaXZlIEJ1ZmZlciBTdGFydCBBZGRyZXNzIEIKKyAqICAgIFNBRFJDQiAgICAgICAgICAgIFNlcmlhbCBBdWRpbyBETUEgUmVjZWl2ZSBCdWZmZXIgQ291bnQgUmVnaXN0ZXIgQgorICogICAgU0FJVFIgICAgICAgICAgICAgU2VyaWFsIEF1ZGlvIEludGVycnVwdCBUZXN0IFJlZ2lzdGVyCisgKiAgICBTQURSICAgICAgICAgICAgICBTZXJpYWwgQXVkaW8gRGF0YSBSZWdpc3RlciAoMTYgeCAzMi1iaXQpCisgKi8KKworI2RlZmluZSBfU0FDUjAgICAgICAgICAgX1NBMTExMSggMHgwNjAwICkKKyNkZWZpbmUgX1NBQ1IxICAgICAgICAgIF9TQTExMTEoIDB4MDYwNCApCisjZGVmaW5lIF9TQUNSMiAgICAgICAgICBfU0ExMTExKCAweDA2MDggKQorI2RlZmluZSBfU0FTUjAgICAgICAgICAgX1NBMTExMSggMHgwNjBjICkKKyNkZWZpbmUgX1NBU1IxICAgICAgICAgIF9TQTExMTEoIDB4MDYxMCApCisjZGVmaW5lIF9TQVNDUiAgICAgICAgICBfU0ExMTExKCAweDA2MTggKQorI2RlZmluZSBfTDNfQ0FSICAgICAgICAgX1NBMTExMSggMHgwNjFjICkKKyNkZWZpbmUgX0wzX0NEUiAgICAgICAgIF9TQTExMTEoIDB4MDYyMCApCisjZGVmaW5lIF9BQ0NBUiAgICAgICAgICBfU0ExMTExKCAweDA2MjQgKQorI2RlZmluZSBfQUNDRFIgICAgICAgICAgX1NBMTExMSggMHgwNjI4ICkKKyNkZWZpbmUgX0FDU0FSICAgICAgICAgIF9TQTExMTEoIDB4MDYyYyApCisjZGVmaW5lIF9BQ1NEUiAgICAgICAgICBfU0ExMTExKCAweDA2MzAgKQorI2RlZmluZSBfU0FEVENTICAgICAgICAgX1NBMTExMSggMHgwNjM0ICkKKyNkZWZpbmUgX1NBRFRTQSAgICAgICAgIF9TQTExMTEoIDB4MDYzOCApCisjZGVmaW5lIF9TQURUQ0EgICAgICAgICBfU0ExMTExKCAweDA2M2MgKQorI2RlZmluZSBfU0FEVFNCICAgICAgICAgX1NBMTExMSggMHgwNjQwICkKKyNkZWZpbmUgX1NBRFRDQiAgICAgICAgIF9TQTExMTEoIDB4MDY0NCApCisjZGVmaW5lIF9TQURSQ1MgICAgICAgICBfU0ExMTExKCAweDA2NDggKQorI2RlZmluZSBfU0FEUlNBICAgICAgICAgX1NBMTExMSggMHgwNjRjICkKKyNkZWZpbmUgX1NBRFJDQSAgICAgICAgIF9TQTExMTEoIDB4MDY1MCApCisjZGVmaW5lIF9TQURSU0IgICAgICAgICBfU0ExMTExKCAweDA2NTQgKQorI2RlZmluZSBfU0FEUkNCICAgICAgICAgX1NBMTExMSggMHgwNjU4ICkKKyNkZWZpbmUgX1NBSVRSICAgICAgICAgIF9TQTExMTEoIDB4MDY1YyApCisjZGVmaW5lIF9TQURSICAgICAgICAgICBfU0ExMTExKCAweDA2ODAgKQorCisjZGVmaW5lIFNBQ1IwCQlfX0NDUkVHKDB4MDYwMCkKKyNkZWZpbmUgU0FDUjEJCV9fQ0NSRUcoMHgwNjA0KQorI2RlZmluZSBTQUNSMgkJX19DQ1JFRygweDA2MDgpCisjZGVmaW5lIFNBU1IwCQlfX0NDUkVHKDB4MDYwYykKKyNkZWZpbmUgU0FTUjEJCV9fQ0NSRUcoMHgwNjEwKQorI2RlZmluZSBTQVNDUgkJX19DQ1JFRygweDA2MTgpCisjZGVmaW5lIEwzX0NBUgkJX19DQ1JFRygweDA2MWMpCisjZGVmaW5lIEwzX0NEUgkJX19DQ1JFRygweDA2MjApCisjZGVmaW5lIEFDQ0FSCQlfX0NDUkVHKDB4MDYyNCkKKyNkZWZpbmUgQUNDRFIJCV9fQ0NSRUcoMHgwNjI4KQorI2RlZmluZSBBQ1NBUgkJX19DQ1JFRygweDA2MmMpCisjZGVmaW5lIEFDU0RSCQlfX0NDUkVHKDB4MDYzMCkKKyNkZWZpbmUgU0FEVENTCQlfX0NDUkVHKDB4MDYzNCkKKyNkZWZpbmUgU0FEVFNBCQlfX0NDUkVHKDB4MDYzOCkKKyNkZWZpbmUgU0FEVENBCQlfX0NDUkVHKDB4MDYzYykKKyNkZWZpbmUgU0FEVFNCCQlfX0NDUkVHKDB4MDY0MCkKKyNkZWZpbmUgU0FEVENCCQlfX0NDUkVHKDB4MDY0NCkKKyNkZWZpbmUgU0FEUkNTCQlfX0NDUkVHKDB4MDY0OCkKKyNkZWZpbmUgU0FEUlNBCQlfX0NDUkVHKDB4MDY0YykKKyNkZWZpbmUgU0FEUkNBCQlfX0NDUkVHKDB4MDY1MCkKKyNkZWZpbmUgU0FEUlNCCQlfX0NDUkVHKDB4MDY1NCkKKyNkZWZpbmUgU0FEUkNCCQlfX0NDUkVHKDB4MDY1OCkKKyNkZWZpbmUgU0FJVFIJCV9fQ0NSRUcoMHgwNjVjKQorI2RlZmluZSBTQURSCQlfX0NDUkVHKDB4MDY4MCkKKworI2RlZmluZSBTQUNSMF9FTkIJKDE8PDApCisjZGVmaW5lIFNBQ1IwX0JDS0QJKDE8PDIpCisjZGVmaW5lIFNBQ1IwX1JTVAkoMTw8MykKKworI2RlZmluZSBTQUNSMV9BTVNMCSgxPDwwKQorI2RlZmluZSBTQUNSMV9MM0VOCSgxPDwxKQorI2RlZmluZSBTQUNSMV9MM01CCSgxPDwyKQorI2RlZmluZSBTQUNSMV9EUkVDCSgxPDwzKQorI2RlZmluZSBTQUNSMV9EUlBMCSgxPDw0KQorI2RlZmluZSBTQUNSMV9FTkxCRgkoMTw8NSkKKworI2RlZmluZSBTQUNSMl9UUzNWCSgxPDwwKQorI2RlZmluZSBTQUNSMl9UUzRWCSgxPDwxKQorI2RlZmluZSBTQUNSMl9XS1VQCSgxPDwyKQorI2RlZmluZSBTQUNSMl9EUkVDCSgxPDwzKQorI2RlZmluZSBTQUNSMl9EUlBMCSgxPDw0KQorI2RlZmluZSBTQUNSMl9FTkxCRgkoMTw8NSkKKyNkZWZpbmUgU0FDUjJfUkVTRVQJKDE8PDYpCisKKyNkZWZpbmUgU0FTUjBfVE5GCSgxPDwwKQorI2RlZmluZSBTQVNSMF9STkUJKDE8PDEpCisjZGVmaW5lIFNBU1IwX0JTWQkoMTw8MikKKyNkZWZpbmUgU0FTUjBfVEZTCSgxPDwzKQorI2RlZmluZSBTQVNSMF9SRlMJKDE8PDQpCisjZGVmaW5lIFNBU1IwX1RVUgkoMTw8NSkKKyNkZWZpbmUgU0FTUjBfUk9SCSgxPDw2KQorI2RlZmluZSBTQVNSMF9MM1dECSgxPDwxNikKKyNkZWZpbmUgU0FTUjBfTDNSRAkoMTw8MTcpCisKKyNkZWZpbmUgU0FTUjFfVE5GCSgxPDwwKQorI2RlZmluZSBTQVNSMV9STkUJKDE8PDEpCisjZGVmaW5lIFNBU1IxX0JTWQkoMTw8MikKKyNkZWZpbmUgU0FTUjFfVEZTCSgxPDwzKQorI2RlZmluZSBTQVNSMV9SRlMJKDE8PDQpCisjZGVmaW5lIFNBU1IxX1RVUgkoMTw8NSkKKyNkZWZpbmUgU0FTUjFfUk9SCSgxPDw2KQorI2RlZmluZSBTQVNSMV9DQURUCSgxPDwxNikKKyNkZWZpbmUgU0FTUjFfU0FEUgkoMTw8MTcpCisjZGVmaW5lIFNBU1IxX1JTVE8JKDE8PDE4KQorI2RlZmluZSBTQVNSMV9DTFBNCSgxPDwxOSkKKyNkZWZpbmUgU0FTUjFfQ1JEWQkoMTw8MjApCisjZGVmaW5lIFNBU1IxX1JTM1YJKDE8PDIxKQorI2RlZmluZSBTQVNSMV9SUzRWCSgxPDwyMikKKworI2RlZmluZSBTQVNDUl9UVVIJKDE8PDUpCisjZGVmaW5lIFNBU0NSX1JPUgkoMTw8NikKKyNkZWZpbmUgU0FTQ1JfRFRTCSgxPDwxNikKKyNkZWZpbmUgU0FTQ1JfUkRECSgxPDwxNykKKyNkZWZpbmUgU0FTQ1JfU1RPCSgxPDwxOCkKKworI2RlZmluZSBTQURUQ1NfVERFTgkoMTw8MCkKKyNkZWZpbmUgU0FEVENTX1RESUUJKDE8PDEpCisjZGVmaW5lIFNBRFRDU19UREJEQQkoMTw8MykKKyNkZWZpbmUgU0FEVENTX1REU1RBCSgxPDw0KQorI2RlZmluZSBTQURUQ1NfVERCREIJKDE8PDUpCisjZGVmaW5lIFNBRFRDU19URFNUQgkoMTw8NikKKyNkZWZpbmUgU0FEVENTX1RCSVUJKDE8PDcpCisKKyNkZWZpbmUgU0FEUkNTX1JERU4JKDE8PDApCisjZGVmaW5lIFNBRFJDU19SRElFCSgxPDwxKQorI2RlZmluZSBTQURSQ1NfUkRCREEJKDE8PDMpCisjZGVmaW5lIFNBRFJDU19SRFNUQQkoMTw8NCkKKyNkZWZpbmUgU0FEUkNTX1JEQkRCCSgxPDw1KQorI2RlZmluZSBTQURSQ1NfUkRTVEIJKDE8PDYpCisjZGVmaW5lIFNBRFJDU19SQklVCSgxPDw3KQorCisjZGVmaW5lIFNBRF9DU19ERU4JKDE8PDApCisjZGVmaW5lIFNBRF9DU19ESUUJKDE8PDEpCS8qIE5vdCBmdW5jdGlvbmFsIG9uIG1ldGFsIDEgKi8KKyNkZWZpbmUgU0FEX0NTX0RCREEJKDE8PDMpCS8qIE5vdCBmdW5jdGlvbmFsIG9uIG1ldGFsIDEgKi8KKyNkZWZpbmUgU0FEX0NTX0RTVEEJKDE8PDQpCisjZGVmaW5lIFNBRF9DU19EQkRCCSgxPDw1KQkvKiBOb3QgZnVuY3Rpb25hbCBvbiBtZXRhbCAxICovCisjZGVmaW5lIFNBRF9DU19EU1RCCSgxPDw2KQorI2RlZmluZSBTQURfQ1NfQklVCSgxPDw3KQkvKiBOb3QgZnVuY3Rpb25hbCBvbiBtZXRhbCAxICovCisKKyNkZWZpbmUgU0FJVFJfVEZTCSgxPDwwKQorI2RlZmluZSBTQUlUUl9SRlMJKDE8PDEpCisjZGVmaW5lIFNBSVRSX1RVUgkoMTw8MikKKyNkZWZpbmUgU0FJVFJfUk9SCSgxPDwzKQorI2RlZmluZSBTQUlUUl9DQURUCSgxPDw0KQorI2RlZmluZSBTQUlUUl9TQURSCSgxPDw1KQorI2RlZmluZSBTQUlUUl9SU1RPCSgxPDw2KQorI2RlZmluZSBTQUlUUl9UREJEQQkoMTw8OCkKKyNkZWZpbmUgU0FJVFJfVERCREIJKDE8PDkpCisjZGVmaW5lIFNBSVRSX1JEQkRBCSgxPDwxMCkKKyNkZWZpbmUgU0FJVFJfUkRCREIJKDE8PDExKQorCisvKgorICogR2VuZXJhbC1QdXJwb3NlIEkvTyBJbnRlcmZhY2UKKyAqCisgKiBSZWdpc3RlcnMKKyAqICAgIFBBX0REUgkJR1BJTyBCbG9jayBBIERhdGEgRGlyZWN0aW9uCisgKiAgICBQQV9EUlIvUEFfRFdSCUdQSU8gQmxvY2sgQSBEYXRhIFZhbHVlIFJlZ2lzdGVyIChyZWFkL3dyaXRlKQorICogICAgUEFfU0RSCQlHUElPIEJsb2NrIEEgU2xlZXAgRGlyZWN0aW9uCisgKiAgICBQQV9TU1IJCUdQSU8gQmxvY2sgQSBTbGVlcCBTdGF0ZQorICogICAgUEJfRERSCQlHUElPIEJsb2NrIEIgRGF0YSBEaXJlY3Rpb24KKyAqICAgIFBCX0RSUi9QQl9EV1IJR1BJTyBCbG9jayBCIERhdGEgVmFsdWUgUmVnaXN0ZXIgKHJlYWQvd3JpdGUpCisgKiAgICBQQl9TRFIJCUdQSU8gQmxvY2sgQiBTbGVlcCBEaXJlY3Rpb24KKyAqICAgIFBCX1NTUgkJR1BJTyBCbG9jayBCIFNsZWVwIFN0YXRlCisgKiAgICBQQ19ERFIJCUdQSU8gQmxvY2sgQyBEYXRhIERpcmVjdGlvbgorICogICAgUENfRFJSL1BDX0RXUglHUElPIEJsb2NrIEMgRGF0YSBWYWx1ZSBSZWdpc3RlciAocmVhZC93cml0ZSkKKyAqICAgIFBDX1NEUgkJR1BJTyBCbG9jayBDIFNsZWVwIERpcmVjdGlvbgorICogICAgUENfU1NSCQlHUElPIEJsb2NrIEMgU2xlZXAgU3RhdGUKKyAqLworCisjZGVmaW5lIF9QQV9ERFIJCV9TQTExMTEoIDB4MTAwMCApCisjZGVmaW5lIF9QQV9EUlIJCV9TQTExMTEoIDB4MTAwNCApCisjZGVmaW5lIF9QQV9EV1IJCV9TQTExMTEoIDB4MTAwNCApCisjZGVmaW5lIF9QQV9TRFIJCV9TQTExMTEoIDB4MTAwOCApCisjZGVmaW5lIF9QQV9TU1IJCV9TQTExMTEoIDB4MTAwYyApCisjZGVmaW5lIF9QQl9ERFIJCV9TQTExMTEoIDB4MTAxMCApCisjZGVmaW5lIF9QQl9EUlIJCV9TQTExMTEoIDB4MTAxNCApCisjZGVmaW5lIF9QQl9EV1IJCV9TQTExMTEoIDB4MTAxNCApCisjZGVmaW5lIF9QQl9TRFIJCV9TQTExMTEoIDB4MTAxOCApCisjZGVmaW5lIF9QQl9TU1IJCV9TQTExMTEoIDB4MTAxYyApCisjZGVmaW5lIF9QQ19ERFIJCV9TQTExMTEoIDB4MTAyMCApCisjZGVmaW5lIF9QQ19EUlIJCV9TQTExMTEoIDB4MTAyNCApCisjZGVmaW5lIF9QQ19EV1IJCV9TQTExMTEoIDB4MTAyNCApCisjZGVmaW5lIF9QQ19TRFIJCV9TQTExMTEoIDB4MTAyOCApCisjZGVmaW5lIF9QQ19TU1IJCV9TQTExMTEoIDB4MTAyYyApCisKKyNkZWZpbmUgU0ExMTExX0dQSU8JMHgxMDAwCisKKyNkZWZpbmUgU0ExMTExX0dQSU9fUEFERFIJKDB4MDAwKQorI2RlZmluZSBTQTExMTFfR1BJT19QQURSUgkoMHgwMDQpCisjZGVmaW5lIFNBMTExMV9HUElPX1BBRFdSCSgweDAwNCkKKyNkZWZpbmUgU0ExMTExX0dQSU9fUEFTRFIJKDB4MDA4KQorI2RlZmluZSBTQTExMTFfR1BJT19QQVNTUgkoMHgwMGMpCisjZGVmaW5lIFNBMTExMV9HUElPX1BCRERSCSgweDAxMCkKKyNkZWZpbmUgU0ExMTExX0dQSU9fUEJEUlIJKDB4MDE0KQorI2RlZmluZSBTQTExMTFfR1BJT19QQkRXUgkoMHgwMTQpCisjZGVmaW5lIFNBMTExMV9HUElPX1BCU0RSCSgweDAxOCkKKyNkZWZpbmUgU0ExMTExX0dQSU9fUEJTU1IJKDB4MDFjKQorI2RlZmluZSBTQTExMTFfR1BJT19QQ0REUgkoMHgwMjApCisjZGVmaW5lIFNBMTExMV9HUElPX1BDRFJSCSgweDAyNCkKKyNkZWZpbmUgU0ExMTExX0dQSU9fUENEV1IJKDB4MDI0KQorI2RlZmluZSBTQTExMTFfR1BJT19QQ1NEUgkoMHgwMjgpCisjZGVmaW5lIFNBMTExMV9HUElPX1BDU1NSCSgweDAyYykKKworI2RlZmluZSBHUElPX0EwCQkoMSA8PCAwKQorI2RlZmluZSBHUElPX0ExCQkoMSA8PCAxKQorI2RlZmluZSBHUElPX0EyCQkoMSA8PCAyKQorI2RlZmluZSBHUElPX0EzCQkoMSA8PCAzKQorCisjZGVmaW5lIEdQSU9fQjAJCSgxIDw8IDgpCisjZGVmaW5lIEdQSU9fQjEJCSgxIDw8IDkpCisjZGVmaW5lIEdQSU9fQjIJCSgxIDw8IDEwKQorI2RlZmluZSBHUElPX0IzCQkoMSA8PCAxMSkKKyNkZWZpbmUgR1BJT19CNAkJKDEgPDwgMTIpCisjZGVmaW5lIEdQSU9fQjUJCSgxIDw8IDEzKQorI2RlZmluZSBHUElPX0I2CQkoMSA8PCAxNCkKKyNkZWZpbmUgR1BJT19CNwkJKDEgPDwgMTUpCisKKyNkZWZpbmUgR1BJT19DMAkJKDEgPDwgMTYpCisjZGVmaW5lIEdQSU9fQzEJCSgxIDw8IDE3KQorI2RlZmluZSBHUElPX0MyCQkoMSA8PCAxOCkKKyNkZWZpbmUgR1BJT19DMwkJKDEgPDwgMTkpCisjZGVmaW5lIEdQSU9fQzQJCSgxIDw8IDIwKQorI2RlZmluZSBHUElPX0M1CQkoMSA8PCAyMSkKKyNkZWZpbmUgR1BJT19DNgkJKDEgPDwgMjIpCisjZGVmaW5lIEdQSU9fQzcJCSgxIDw8IDIzKQorCisvKgorICogSW50ZXJydXB0IENvbnRyb2xsZXIKKyAqCisgKiBSZWdpc3RlcnMKKyAqICAgIElOVFRFU1QwCQlUZXN0IHJlZ2lzdGVyIDAKKyAqICAgIElOVFRFU1QxCQlUZXN0IHJlZ2lzdGVyIDEKKyAqICAgIElOVEVOMAkJSW50ZXJydXB0IEVuYWJsZSByZWdpc3RlciAwCisgKiAgICBJTlRFTjEJCUludGVycnVwdCBFbmFibGUgcmVnaXN0ZXIgMQorICogICAgSU5UUE9MMAkJSW50ZXJydXB0IFBvbGFyaXR5IHNlbGVjdGlvbiAwCisgKiAgICBJTlRQT0wxCQlJbnRlcnJ1cHQgUG9sYXJpdHkgc2VsZWN0aW9uIDEKKyAqICAgIElOVFRTVFNFTAkJSW50ZXJydXB0IHNvdXJjZSBzZWxlY3Rpb24KKyAqICAgIElOVFNUQVRDTFIwCUludGVycnVwdCBTdGF0dXMvQ2xlYXIgMAorICogICAgSU5UU1RBVENMUjEJSW50ZXJydXB0IFN0YXR1cy9DbGVhciAxCisgKiAgICBJTlRTRVQwCQlJbnRlcnJ1cHQgc291cmNlIHNldCAwCisgKiAgICBJTlRTRVQxCQlJbnRlcnJ1cHQgc291cmNlIHNldCAxCisgKiAgICBXQUtFX0VOMAkJV2FrZS11cCBzb3VyY2UgZW5hYmxlIDAKKyAqICAgIFdBS0VfRU4xCQlXYWtlLXVwIHNvdXJjZSBlbmFibGUgMQorICogICAgV0FLRV9QT0wwCQlXYWtlLXVwIHBvbGFyaXR5IHNlbGVjdGlvbiAwCisgKiAgICBXQUtFX1BPTDEJCVdha2UtdXAgcG9sYXJpdHkgc2VsZWN0aW9uIDEKKyAqLworI2RlZmluZSBTQTExMTFfSU5UQwkJMHgxNjAwCisKKy8qCisgKiBUaGVzZSBhcmUgb2Zmc2V0cyBmcm9tIHRoZSBhYm92ZSBiYXNlLgorICovCisjZGVmaW5lIFNBMTExMV9JTlRURVNUMAkJMHgwMDAwCisjZGVmaW5lIFNBMTExMV9JTlRURVNUMQkJMHgwMDA0CisjZGVmaW5lIFNBMTExMV9JTlRFTjAJCTB4MDAwOAorI2RlZmluZSBTQTExMTFfSU5URU4xCQkweDAwMGMKKyNkZWZpbmUgU0ExMTExX0lOVFBPTDAJCTB4MDAxMAorI2RlZmluZSBTQTExMTFfSU5UUE9MMQkJMHgwMDE0CisjZGVmaW5lIFNBMTExMV9JTlRUU1RTRUwJMHgwMDE4CisjZGVmaW5lIFNBMTExMV9JTlRTVEFUQ0xSMAkweDAwMWMKKyNkZWZpbmUgU0ExMTExX0lOVFNUQVRDTFIxCTB4MDAyMAorI2RlZmluZSBTQTExMTFfSU5UU0VUMAkJMHgwMDI0CisjZGVmaW5lIFNBMTExMV9JTlRTRVQxCQkweDAwMjgKKyNkZWZpbmUgU0ExMTExX1dBS0VFTjAJCTB4MDAyYworI2RlZmluZSBTQTExMTFfV0FLRUVOMQkJMHgwMDMwCisjZGVmaW5lIFNBMTExMV9XQUtFUE9MMAkJMHgwMDM0CisjZGVmaW5lIFNBMTExMV9XQUtFUE9MMQkJMHgwMDM4CisKKy8qCisgKiBQUy8yIFRyYWNrcGFkIGFuZCBNb3VzZSBJbnRlcmZhY2VzCisgKgorICogUmVnaXN0ZXJzCisgKiAgICBQUzJDUgkJQ29udHJvbCBSZWdpc3RlcgorICogICAgUFMyU1RBVAkJU3RhdHVzIFJlZ2lzdGVyCisgKiAgICBQUzJEQVRBCQlUcmFuc21pdC9SZWNlaXZlIERhdGEgcmVnaXN0ZXIKKyAqICAgIFBTMkNMS0RJVgkJQ2xvY2sgRGl2aXNpb24gUmVnaXN0ZXIKKyAqICAgIFBTMlBSRUNOVAkJQ2xvY2sgUHJlY291bnQgUmVnaXN0ZXIKKyAqICAgIFBTMlRFU1QxCQlUZXN0IHJlZ2lzdGVyIDEKKyAqICAgIFBTMlRFU1QyCQlUZXN0IHJlZ2lzdGVyIDIKKyAqICAgIFBTMlRFU1QzCQlUZXN0IHJlZ2lzdGVyIDMKKyAqICAgIFBTMlRFU1Q0CQlUZXN0IHJlZ2lzdGVyIDQKKyAqLworCisjZGVmaW5lIFNBMTExMV9LQkQJCTB4MGEwMAorI2RlZmluZSBTQTExMTFfTVNFCQkweDBjMDAKKworLyoKKyAqIFRoZXNlIGFyZSBvZmZzZXRzIGZyb20gdGhlIGFib3ZlIGJhc2VzLgorICovCisjZGVmaW5lIFNBMTExMV9QUzJDUgkJMHgwMDAwCisjZGVmaW5lIFNBMTExMV9QUzJTVEFUCQkweDAwMDQKKyNkZWZpbmUgU0ExMTExX1BTMkRBVEEJCTB4MDAwOAorI2RlZmluZSBTQTExMTFfUFMyQ0xLRElWCTB4MDAwYworI2RlZmluZSBTQTExMTFfUFMyUFJFQ05UCTB4MDAxMAorCisjZGVmaW5lIFBTMkNSX0VOQQkJMHgwOAorI2RlZmluZSBQUzJDUl9GS0QJCTB4MDIKKyNkZWZpbmUgUFMyQ1JfRktDCQkweDAxCisKKyNkZWZpbmUgUFMyU1RBVF9TVFAJCTB4MDEwMAorI2RlZmluZSBQUzJTVEFUX1RYRQkJMHgwMDgwCisjZGVmaW5lIFBTMlNUQVRfVFhCCQkweDAwNDAKKyNkZWZpbmUgUFMyU1RBVF9SWEYJCTB4MDAyMAorI2RlZmluZSBQUzJTVEFUX1JYQgkJMHgwMDEwCisjZGVmaW5lIFBTMlNUQVRfRU5BCQkweDAwMDgKKyNkZWZpbmUgUFMyU1RBVF9SWFAJCTB4MDAwNAorI2RlZmluZSBQUzJTVEFUX0tCRAkJMHgwMDAyCisjZGVmaW5lIFBTMlNUQVRfS0JDCQkweDAwMDEKKworLyoKKyAqIFBDTUNJQSBJbnRlcmZhY2UKKyAqCisgKiBSZWdpc3RlcnMKKyAqICAgIFBDU1IJU3RhdHVzIFJlZ2lzdGVyCisgKiAgICBQQ0NSCUNvbnRyb2wgUmVnaXN0ZXIKKyAqICAgIFBDU1NSCVNsZWVwIFN0YXRlIFJlZ2lzdGVyCisgKi8KKworI2RlZmluZSBTQTExMTFfUENNQ0lBCTB4MTYwMAorCisvKgorICogVGhlc2UgYXJlIG9mZnNldHMgZnJvbSB0aGUgYWJvdmUgYmFzZS4KKyAqLworI2RlZmluZSBTQTExMTFfUENDUgkweDAwMDAKKyNkZWZpbmUgU0ExMTExX1BDU1NSCTB4MDAwNAorI2RlZmluZSBTQTExMTFfUENTUgkweDAwMDgKKworI2RlZmluZSBQQ1NSX1MwX1JFQURZCSgxPDwwKQorI2RlZmluZSBQQ1NSX1MxX1JFQURZCSgxPDwxKQorI2RlZmluZSBQQ1NSX1MwX0RFVEVDVAkoMTw8MikKKyNkZWZpbmUgUENTUl9TMV9ERVRFQ1QJKDE8PDMpCisjZGVmaW5lIFBDU1JfUzBfVlMxCSgxPDw0KQorI2RlZmluZSBQQ1NSX1MwX1ZTMgkoMTw8NSkKKyNkZWZpbmUgUENTUl9TMV9WUzEJKDE8PDYpCisjZGVmaW5lIFBDU1JfUzFfVlMyCSgxPDw3KQorI2RlZmluZSBQQ1NSX1MwX1dQCSgxPDw4KQorI2RlZmluZSBQQ1NSX1MxX1dQCSgxPDw5KQorI2RlZmluZSBQQ1NSX1MwX0JWRDEJKDE8PDEwKQorI2RlZmluZSBQQ1NSX1MwX0JWRDIJKDE8PDExKQorI2RlZmluZSBQQ1NSX1MxX0JWRDEJKDE8PDEyKQorI2RlZmluZSBQQ1NSX1MxX0JWRDIJKDE8PDEzKQorCisjZGVmaW5lIFBDQ1JfUzBfUlNUCSgxPDwwKQorI2RlZmluZSBQQ0NSX1MxX1JTVAkoMTw8MSkKKyNkZWZpbmUgUENDUl9TMF9GTFQJKDE8PDIpCisjZGVmaW5lIFBDQ1JfUzFfRkxUCSgxPDwzKQorI2RlZmluZSBQQ0NSX1MwX1BXQUlURU4JKDE8PDQpCisjZGVmaW5lIFBDQ1JfUzFfUFdBSVRFTgkoMTw8NSkKKyNkZWZpbmUgUENDUl9TMF9QU0UJKDE8PDYpCisjZGVmaW5lIFBDQ1JfUzFfUFNFCSgxPDw3KQorCisjZGVmaW5lIFBDU1NSX1MwX1NMRUVQCSgxPDwwKQorI2RlZmluZSBQQ1NTUl9TMV9TTEVFUAkoMTw8MSkKKworCisKKworZXh0ZXJuIHN0cnVjdCBidXNfdHlwZSBzYTExMTFfYnVzX3R5cGU7CisKKyNkZWZpbmUgU0ExMTExX0RFVklEX1NCSQkwCisjZGVmaW5lIFNBMTExMV9ERVZJRF9TSwkJMQorI2RlZmluZSBTQTExMTFfREVWSURfVVNCCTIKKyNkZWZpbmUgU0ExMTExX0RFVklEX1NBQwkzCisjZGVmaW5lIFNBMTExMV9ERVZJRF9TU1AJNAorI2RlZmluZSBTQTExMTFfREVWSURfUFMyCTUKKyNkZWZpbmUgU0ExMTExX0RFVklEX0dQSU8JNgorI2RlZmluZSBTQTExMTFfREVWSURfSU5UCTcKKyNkZWZpbmUgU0ExMTExX0RFVklEX1BDTUNJQQk4CisKK3N0cnVjdCBzYTExMTFfZGV2IHsKKwlzdHJ1Y3QgZGV2aWNlCWRldjsKKwl1bnNpZ25lZCBpbnQJZGV2aWQ7CisJc3RydWN0IHJlc291cmNlCXJlczsKKwl2b2lkIF9faW9tZW0JKm1hcGJhc2U7CisJdW5zaWduZWQgaW50CXNrcGNyX21hc2s7CisJdW5zaWduZWQgaW50CWlycVs2XTsKKwl1NjQJCWRtYV9tYXNrOworfTsKKworI2RlZmluZSBTQTExMTFfREVWKF9kKQljb250YWluZXJfb2YoKF9kKSwgc3RydWN0IHNhMTExMV9kZXYsIGRldikKKworI2RlZmluZSBzYTExMTFfZ2V0X2RydmRhdGEoZCkJZGV2X2dldF9kcnZkYXRhKCYoZCktPmRldikKKyNkZWZpbmUgc2ExMTExX3NldF9kcnZkYXRhKGQscCkJZGV2X3NldF9kcnZkYXRhKCYoZCktPmRldiwgcCkKKworc3RydWN0IHNhMTExMV9kcml2ZXIgeworCXN0cnVjdCBkZXZpY2VfZHJpdmVyCWRydjsKKwl1bnNpZ25lZCBpbnQJCWRldmlkOworCWludCAoKnByb2JlKShzdHJ1Y3Qgc2ExMTExX2RldiAqKTsKKwlpbnQgKCpyZW1vdmUpKHN0cnVjdCBzYTExMTFfZGV2ICopOworCWludCAoKnN1c3BlbmQpKHN0cnVjdCBzYTExMTFfZGV2ICosIHBtX21lc3NhZ2VfdCk7CisJaW50ICgqcmVzdW1lKShzdHJ1Y3Qgc2ExMTExX2RldiAqKTsKK307CisKKyNkZWZpbmUgU0ExMTExX0RSVihfZCkJY29udGFpbmVyX29mKChfZCksIHN0cnVjdCBzYTExMTFfZHJpdmVyLCBkcnYpCisKKyNkZWZpbmUgU0ExMTExX0RSSVZFUl9OQU1FKF9zYWRldikgKChfc2FkZXYpLT5kZXYuZHJpdmVyLT5uYW1lKQorCisvKgorICogVGhlc2UgZnJvYiB0aGUgU0tQQ1IgcmVnaXN0ZXIuCisgKi8KK3ZvaWQgc2ExMTExX2VuYWJsZV9kZXZpY2Uoc3RydWN0IHNhMTExMV9kZXYgKik7Cit2b2lkIHNhMTExMV9kaXNhYmxlX2RldmljZShzdHJ1Y3Qgc2ExMTExX2RldiAqKTsKKwordW5zaWduZWQgaW50IHNhMTExMV9wbGxfY2xvY2soc3RydWN0IHNhMTExMV9kZXYgKik7CisKKyNkZWZpbmUgU0ExMTExX0FVRElPX0FDTElOSwkwCisjZGVmaW5lIFNBMTExMV9BVURJT19JMlMJMQorCit2b2lkIHNhMTExMV9zZWxlY3RfYXVkaW9fbW9kZShzdHJ1Y3Qgc2ExMTExX2RldiAqc2FkZXYsIGludCBtb2RlKTsKK2ludCBzYTExMTFfc2V0X2F1ZGlvX3JhdGUoc3RydWN0IHNhMTExMV9kZXYgKnNhZGV2LCBpbnQgcmF0ZSk7CitpbnQgc2ExMTExX2dldF9hdWRpb19yYXRlKHN0cnVjdCBzYTExMTFfZGV2ICpzYWRldik7CisKK2ludCBzYTExMTFfY2hlY2tfZG1hX2J1ZyhkbWFfYWRkcl90IGFkZHIpOworCitpbnQgc2ExMTExX2RyaXZlcl9yZWdpc3RlcihzdHJ1Y3Qgc2ExMTExX2RyaXZlciAqKTsKK3ZvaWQgc2ExMTExX2RyaXZlcl91bnJlZ2lzdGVyKHN0cnVjdCBzYTExMTFfZHJpdmVyICopOworCit2b2lkIHNhMTExMV9zZXRfaW9fZGlyKHN0cnVjdCBzYTExMTFfZGV2ICpzYWRldiwgdW5zaWduZWQgaW50IGJpdHMsIHVuc2lnbmVkIGludCBkaXIsIHVuc2lnbmVkIGludCBzbGVlcF9kaXIpOwordm9pZCBzYTExMTFfc2V0X2lvKHN0cnVjdCBzYTExMTFfZGV2ICpzYWRldiwgdW5zaWduZWQgaW50IGJpdHMsIHVuc2lnbmVkIGludCB2KTsKK3ZvaWQgc2ExMTExX3NldF9zbGVlcF9pbyhzdHJ1Y3Qgc2ExMTExX2RldiAqc2FkZXYsIHVuc2lnbmVkIGludCBiaXRzLCB1bnNpZ25lZCBpbnQgdik7CisKKyNlbmRpZiAgLyogX0FTTV9BUkNIX1NBMTExMSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL3Njb29wLmggYi9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvc2Nvb3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWE3NzFmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL3Njb29wLmgKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqICBEZWZpbml0aW9ucyBmb3IgdGhlIFNDT09QIGludGVyZmFjZSBmb3VuZCBvbiB2YXJpb3VzIFNoYXJwIFBEQXMKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDA0IFJpY2hhcmQgUHVyZGllCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2RlZmluZSBTQ09PUF9NQ1IgIDB4MDAKKyNkZWZpbmUgU0NPT1BfQ0RSICAweDA0CisjZGVmaW5lIFNDT09QX0NTUiAgMHgwOAorI2RlZmluZSBTQ09PUF9DUFIgIDB4MEMKKyNkZWZpbmUgU0NPT1BfQ0NSICAweDEwCisjZGVmaW5lIFNDT09QX0lSUiAgMHgxNAorI2RlZmluZSBTQ09PUF9JUk0gIDB4MTQKKyNkZWZpbmUgU0NPT1BfSU1SICAweDE4CisjZGVmaW5lIFNDT09QX0lTUiAgMHgxQworI2RlZmluZSBTQ09PUF9HUENSIDB4MjAKKyNkZWZpbmUgU0NPT1BfR1BXUiAweDI0CisjZGVmaW5lIFNDT09QX0dQUlIgMHgyOAorCisjZGVmaW5lIFNDT09QX0dQQ1JfUEEyMgkoIDEgPDwgMTIgKQorI2RlZmluZSBTQ09PUF9HUENSX1BBMjEJKCAxIDw8IDExICkKKyNkZWZpbmUgU0NPT1BfR1BDUl9QQTIwCSggMSA8PCAxMCApCisjZGVmaW5lIFNDT09QX0dQQ1JfUEExOQkoIDEgPDwgOSApCisjZGVmaW5lIFNDT09QX0dQQ1JfUEExOAkoIDEgPDwgOCApCisjZGVmaW5lIFNDT09QX0dQQ1JfUEExNwkoIDEgPDwgNyApCisjZGVmaW5lIFNDT09QX0dQQ1JfUEExNgkoIDEgPDwgNiApCisjZGVmaW5lIFNDT09QX0dQQ1JfUEExNQkoIDEgPDwgNSApCisjZGVmaW5lIFNDT09QX0dQQ1JfUEExNAkoIDEgPDwgNCApCisjZGVmaW5lIFNDT09QX0dQQ1JfUEExMwkoIDEgPDwgMyApCisjZGVmaW5lIFNDT09QX0dQQ1JfUEExMgkoIDEgPDwgMiApCisjZGVmaW5lIFNDT09QX0dQQ1JfUEExMQkoIDEgPDwgMSApCisKK3N0cnVjdCBzY29vcF9jb25maWcgeworCXVuc2lnbmVkIHNob3J0IGlvX291dDsKKwl1bnNpZ25lZCBzaG9ydCBpb19kaXI7Cit9OworCit2b2lkIHJlc2V0X3Njb29wKHN0cnVjdCBkZXZpY2UgKmRldik7Cit1bnNpZ25lZCBzaG9ydCBzZXRfc2Nvb3BfZ3BpbyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIHNob3J0IGJpdCk7Cit1bnNpZ25lZCBzaG9ydCByZXNldF9zY29vcF9ncGlvKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgc2hvcnQgYml0KTsKK3Vuc2lnbmVkIHNob3J0IHJlYWRfc2Nvb3BfcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgc2hvcnQgcmVnKTsKK3ZvaWQgd3JpdGVfc2Nvb3BfcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgc2hvcnQgcmVnLCB1bnNpZ25lZCBzaG9ydCBkYXRhKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9zc3AuaCBiL2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9zc3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGFhMTFiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL3NzcC5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiAgc3NwLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzIFJ1c3NlbGwgS2luZywgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaWZuZGVmIFNTUF9ICisjZGVmaW5lIFNTUF9ICisKK3N0cnVjdCBzc3Bfc3RhdGUgeworCXVuc2lnbmVkIGludAljcjA7CisJdW5zaWduZWQgaW50CWNyMTsKK307CisKK2ludCBzc3Bfd3JpdGVfd29yZCh1MTYgZGF0YSk7CitpbnQgc3NwX3JlYWRfd29yZCh2b2lkKTsKK3ZvaWQgc3NwX2ZsdXNoKHZvaWQpOwordm9pZCBzc3BfZW5hYmxlKHZvaWQpOwordm9pZCBzc3BfZGlzYWJsZSh2b2lkKTsKK3ZvaWQgc3NwX3NhdmVfc3RhdGUoc3RydWN0IHNzcF9zdGF0ZSAqc3NwKTsKK3ZvaWQgc3NwX3Jlc3RvcmVfc3RhdGUoc3RydWN0IHNzcF9zdGF0ZSAqc3NwKTsKK2ludCBzc3BfaW5pdCh2b2lkKTsKK3ZvaWQgc3NwX2V4aXQodm9pZCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2hkcmVnLmggYi9pbmNsdWRlL2FzbS1hcm0vaGRyZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjdmZDFhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2hkcmVnLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2hkcmVnLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vaWRlLmggYi9pbmNsdWRlL2FzbS1hcm0vaWRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjExNGFjYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9pZGUuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9pZGUuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTQtMTk5NiAgTGludXMgVG9ydmFsZHMgJiBhdXRob3JzCisgKi8KKworLyoKKyAqICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGkzODYgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIElERSBjb2RlLgorICovCisKKyNpZm5kZWYgX19BU01BUk1fSURFX0gKKyNkZWZpbmUgX19BU01BUk1fSURFX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2lmbmRlZiBNQVhfSFdJRlMKKyNkZWZpbmUgTUFYX0hXSUZTCTQKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoQ09ORklHX0FSQ0hfTDcyMDApCisjIGRlZmluZSBJREVfQVJDSF9PQlNPTEVURV9JTklUCisjIGlmZGVmIENPTkZJR19BUkNIX0NMUFM3NTAwCisjICBkZWZpbmUgaWRlX2RlZmF1bHRfaW9fY3RsKGJhc2UpCSgoYmFzZSkgKyAweDIwNikgLyogb2Jzb2xldGUgKi8KKyMgZWxzZQorIyAgZGVmaW5lIGlkZV9kZWZhdWx0X2lvX2N0bChiYXNlKQkoMCkKKyMgZW5kaWYKKyNlbmRpZiAvKiAhQVJDSF9MNzIwMCAqLworCisjZGVmaW5lIF9faWRlX21tX2luc3cocG9ydCxhZGRyLGxlbikJcmVhZHN3KHBvcnQsYWRkcixsZW4pCisjZGVmaW5lIF9faWRlX21tX2luc2wocG9ydCxhZGRyLGxlbikJcmVhZHNsKHBvcnQsYWRkcixsZW4pCisjZGVmaW5lIF9faWRlX21tX291dHN3KHBvcnQsYWRkcixsZW4pCXdyaXRlc3cocG9ydCxhZGRyLGxlbikKKyNkZWZpbmUgX19pZGVfbW1fb3V0c2wocG9ydCxhZGRyLGxlbikJd3JpdGVzbChwb3J0LGFkZHIsbGVuKQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX19BU01BUk1fSURFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9pby5oIGIvaW5jbHVkZS9hc20tYXJtL2lvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjliYzdhMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9pby5oCkBAIC0wLDAgKzEsMjg2IEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9pby5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwIFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogTW9kaWZpY2F0aW9uczoKKyAqICAxNi1TZXAtMTk5NglSTUsJSW5saW5lZCB0aGUgaW54L291dHggZnVuY3Rpb25zICYgb3B0aW1pc2VkIGZvciBib3RoCisgKgkJCWNvbnN0YW50IGFkZHJlc3NlcyBhbmQgdmFyaWFibGUgYWRkcmVzc2VzLgorICogIDA0LURlYy0xOTk3CVJNSwlNb3ZlZCBhIGxvdCBvZiB0aGlzIHN0dWZmIHRvIHRoZSBuZXcgYXJjaGl0ZWN0dXJlCisgKgkJCXNwZWNpZmljIElPIGhlYWRlciBmaWxlcy4KKyAqICAyNy1NYXItMTk5OQlQSkIJU2Vjb25kIHBhcmFtZXRlciBvZiBtZW1jcHlfdG9pbyBpcyBjb25zdC4uCisgKiAgMDQtQXByLTE5OTkJUEpCCUFkZGVkIGNoZWNrX3NpZ25hdHVyZS4KKyAqICAxMi1EZWMtMTk5OQlSTUsJTW9yZSBjbGVhbnVwcworICogIDE4LUp1bi0yMDAwIFJNSwlSZW1vdmVkIHZpcnRfdG9fKiBhbmQgZnJpZW5kcyBkZWZpbml0aW9ucworICogIDA1LU9jdC0yMDA0IEJKRCAgICAgTW92ZWQgbWVtb3J5IHN0cmluZyBmdW5jdGlvbnMgdG8gdXNlIHZvaWQgX19pb21lbQorICovCisjaWZuZGVmIF9fQVNNX0FSTV9JT19ICisjZGVmaW5lIF9fQVNNX0FSTV9JT19ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKyNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KKworLyoKKyAqIElTQSBJL08gYnVzIG1lbW9yeSBhZGRyZXNzZXMgYXJlIDE6MSB3aXRoIHRoZSBwaHlzaWNhbCBhZGRyZXNzLgorICovCisjZGVmaW5lIGlzYV92aXJ0X3RvX2J1cyB2aXJ0X3RvX3BoeXMKKyNkZWZpbmUgaXNhX3BhZ2VfdG9fYnVzIHBhZ2VfdG9fcGh5cworI2RlZmluZSBpc2FfYnVzX3RvX3ZpcnQgcGh5c190b192aXJ0CisKKy8qCisgKiBHZW5lcmljIElPIHJlYWQvd3JpdGUuICBUaGVzZSBwZXJmb3JtIG5hdGl2ZS1lbmRpYW4gYWNjZXNzZXMuICBOb3RlCisgKiB0aGF0IHNvbWUgYXJjaGl0ZWN0dXJlcyB3aWxsIHdhbnQgdG8gcmUtZGVmaW5lIF9fcmF3X3tyZWFkLHdyaXRlfXcuCisgKi8KK2V4dGVybiB2b2lkIF9fcmF3X3dyaXRlc2Iodm9pZCBfX2lvbWVtICphZGRyLCBjb25zdCB2b2lkICpkYXRhLCBpbnQgYnl0ZWxlbik7CitleHRlcm4gdm9pZCBfX3Jhd193cml0ZXN3KHZvaWQgX19pb21lbSAqYWRkciwgY29uc3Qgdm9pZCAqZGF0YSwgaW50IHdvcmRsZW4pOworZXh0ZXJuIHZvaWQgX19yYXdfd3JpdGVzbCh2b2lkIF9faW9tZW0gKmFkZHIsIGNvbnN0IHZvaWQgKmRhdGEsIGludCBsb25nbGVuKTsKKworZXh0ZXJuIHZvaWQgX19yYXdfcmVhZHNiKHZvaWQgX19pb21lbSAqYWRkciwgdm9pZCAqZGF0YSwgaW50IGJ5dGVsZW4pOworZXh0ZXJuIHZvaWQgX19yYXdfcmVhZHN3KHZvaWQgX19pb21lbSAqYWRkciwgdm9pZCAqZGF0YSwgaW50IHdvcmRsZW4pOworZXh0ZXJuIHZvaWQgX19yYXdfcmVhZHNsKHZvaWQgX19pb21lbSAqYWRkciwgdm9pZCAqZGF0YSwgaW50IGxvbmdsZW4pOworCisjZGVmaW5lIF9fcmF3X3dyaXRlYih2LGEpCShfX2Noa19pb19wdHIoYSksICoodm9sYXRpbGUgdW5zaWduZWQgY2hhciBfX2ZvcmNlICAqKShhKSA9ICh2KSkKKyNkZWZpbmUgX19yYXdfd3JpdGV3KHYsYSkJKF9fY2hrX2lvX3B0cihhKSwgKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBfX2ZvcmNlICopKGEpID0gKHYpKQorI2RlZmluZSBfX3Jhd193cml0ZWwodixhKQkoX19jaGtfaW9fcHRyKGEpLCAqKHZvbGF0aWxlIHVuc2lnbmVkIGludCBfX2ZvcmNlICAgKikoYSkgPSAodikpCisKKyNkZWZpbmUgX19yYXdfcmVhZGIoYSkJCShfX2Noa19pb19wdHIoYSksICoodm9sYXRpbGUgdW5zaWduZWQgY2hhciBfX2ZvcmNlICAqKShhKSkKKyNkZWZpbmUgX19yYXdfcmVhZHcoYSkJCShfX2Noa19pb19wdHIoYSksICoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgX19mb3JjZSAqKShhKSkKKyNkZWZpbmUgX19yYXdfcmVhZGwoYSkJCShfX2Noa19pb19wdHIoYSksICoodm9sYXRpbGUgdW5zaWduZWQgaW50IF9fZm9yY2UgICAqKShhKSkKKworLyoKKyAqIEJhZCByZWFkL3dyaXRlIGFjY2Vzc2VzLi4uCisgKi8KK2V4dGVybiB2b2lkIF9fcmVhZHdyaXRlX2J1Zyhjb25zdCBjaGFyICpmbik7CisKKy8qCisgKiBOb3csIHBpY2sgdXAgdGhlIG1hY2hpbmUtZGVmaW5lZCBJTyBkZWZpbml0aW9ucworICovCisjaW5jbHVkZSA8YXNtL2FyY2gvaW8uaD4KKworI2lmZGVmIF9faW9fcGNpCisjd2FybmluZyBtYWNoaW5lIGNsYXNzIHVzZXMgYnVnZ3kgX19pb19wY2kKKyNlbmRpZgorI2lmIGRlZmluZWQoX19hcmNoX3B1dGIpIHx8IGRlZmluZWQoX19hcmNoX3B1dHcpIHx8IGRlZmluZWQoX19hcmNoX3B1dGwpIHx8IFwKKyAgICBkZWZpbmVkKF9fYXJjaF9nZXRiKSB8fCBkZWZpbmVkKF9fYXJjaF9nZXR3KSB8fCBkZWZpbmVkKF9fYXJjaF9nZXRsKQorI3dhcm5pbmcgbWFjaGluZSBjbGFzcyB1c2VzIG9sZCBfX2FyY2hfcHV0dyBvciBfX2FyY2hfZ2V0dworI2VuZGlmCisKKy8qCisgKiAgSU8gcG9ydCBhY2Nlc3MgcHJpbWl0aXZlcworICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBUaGUgQVJNIGRvZXNuJ3QgaGF2ZSBzcGVjaWFsIElPIGFjY2VzcyBpbnN0cnVjdGlvbnM7IGFsbCBJTyBpcyBtZW1vcnkKKyAqIG1hcHBlZC4gIE5vdGUgdGhhdCB0aGVzZSBhcmUgZGVmaW5lZCB0byBwZXJmb3JtIGxpdHRsZSBlbmRpYW4gYWNjZXNzZXMKKyAqIG9ubHkuICBUaGVpciBwcmltYXJ5IHB1cnBvc2UgaXMgdG8gYWNjZXNzIFBDSSBhbmQgSVNBIHBlcmlwaGVyYWxzLgorICoKKyAqIE5vdGUgdGhhdCBmb3IgYSBiaWcgZW5kaWFuIG1hY2hpbmUsIHRoaXMgaW1wbGllcyB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqIGJpZyBlbmRpYW4gbW9kZSBjb25uZWN0aXZpdHkgaXMgaW4gcGxhY2UsIGFzIGRlc2NyaWJlZCBieSBudW1lcmlvdXMKKyAqIEFSTSBkb2N1bWVudHM6CisgKgorICogICAgUENJOiAgRDAtRDcgICBEOC1EMTUgRDE2LUQyMyBEMjQtRDMxCisgKiAgICBBUk06IEQyNC1EMzEgRDE2LUQyMyAgRDgtRDE1ICBEMC1ENworICoKKyAqIFRoZSBtYWNoaW5lIHNwZWNpZmljIGlvLmggaW5jbHVkZSBkZWZpbmVzIF9faW8gdG8gdHJhbnNsYXRlIGFuICJJTyIKKyAqIGFkZHJlc3MgdG8gYSBtZW1vcnkgYWRkcmVzcy4KKyAqCisgKiBOb3RlIHRoYXQgd2UgcHJldmVudCBHQ0MgcmUtb3JkZXJpbmcgb3IgY2FjaGluZyB2YWx1ZXMgaW4gZXhwcmVzc2lvbnMKKyAqIGJ5IGludHJvZHVjaW5nIHNlcXVlbmNlIHBvaW50cyBpbnRvIHRoZSBpbiooKSBkZWZpbml0aW9ucy4gIE5vdGUgdGhhdAorICogX19yYXdfKiBkbyBub3QgZ3VhcmFudGVlIHRoaXMgYmVoYXZpb3VyLgorICoKKyAqIFRoZSB7aW4sb3V0fVtid2xdIG1hY3JvcyBhcmUgZm9yIGVtdWxhdGluZyB4ODYtc3R5bGUgUENJL0lTQSBJTyBzcGFjZS4KKyAqLworI2lmZGVmIF9faW8KKyNkZWZpbmUgb3V0Yih2LHApCQlfX3Jhd193cml0ZWIodixfX2lvKHApKQorI2RlZmluZSBvdXR3KHYscCkJCV9fcmF3X3dyaXRldyhjcHVfdG9fbGUxNih2KSxfX2lvKHApKQorI2RlZmluZSBvdXRsKHYscCkJCV9fcmF3X3dyaXRlbChjcHVfdG9fbGUzMih2KSxfX2lvKHApKQorCisjZGVmaW5lIGluYihwKQkoeyB1bnNpZ25lZCBpbnQgX192ID0gX19yYXdfcmVhZGIoX19pbyhwKSk7IF9fdjsgfSkKKyNkZWZpbmUgaW53KHApCSh7IHVuc2lnbmVkIGludCBfX3YgPSBsZTE2X3RvX2NwdShfX3Jhd19yZWFkdyhfX2lvKHApKSk7IF9fdjsgfSkKKyNkZWZpbmUgaW5sKHApCSh7IHVuc2lnbmVkIGludCBfX3YgPSBsZTMyX3RvX2NwdShfX3Jhd19yZWFkbChfX2lvKHApKSk7IF9fdjsgfSkKKworI2RlZmluZSBvdXRzYihwLGQsbCkJCV9fcmF3X3dyaXRlc2IoX19pbyhwKSxkLGwpCisjZGVmaW5lIG91dHN3KHAsZCxsKQkJX19yYXdfd3JpdGVzdyhfX2lvKHApLGQsbCkKKyNkZWZpbmUgb3V0c2wocCxkLGwpCQlfX3Jhd193cml0ZXNsKF9faW8ocCksZCxsKQorCisjZGVmaW5lIGluc2IocCxkLGwpCQlfX3Jhd19yZWFkc2IoX19pbyhwKSxkLGwpCisjZGVmaW5lIGluc3cocCxkLGwpCQlfX3Jhd19yZWFkc3coX19pbyhwKSxkLGwpCisjZGVmaW5lIGluc2wocCxkLGwpCQlfX3Jhd19yZWFkc2woX19pbyhwKSxkLGwpCisjZW5kaWYKKworI2RlZmluZSBvdXRiX3AodmFsLHBvcnQpCW91dGIoKHZhbCksKHBvcnQpKQorI2RlZmluZSBvdXR3X3AodmFsLHBvcnQpCW91dHcoKHZhbCksKHBvcnQpKQorI2RlZmluZSBvdXRsX3AodmFsLHBvcnQpCW91dGwoKHZhbCksKHBvcnQpKQorI2RlZmluZSBpbmJfcChwb3J0KQkJaW5iKChwb3J0KSkKKyNkZWZpbmUgaW53X3AocG9ydCkJCWludygocG9ydCkpCisjZGVmaW5lIGlubF9wKHBvcnQpCQlpbmwoKHBvcnQpKQorCisjZGVmaW5lIG91dHNiX3AocG9ydCxmcm9tLGxlbikJb3V0c2IocG9ydCxmcm9tLGxlbikKKyNkZWZpbmUgb3V0c3dfcChwb3J0LGZyb20sbGVuKQlvdXRzdyhwb3J0LGZyb20sbGVuKQorI2RlZmluZSBvdXRzbF9wKHBvcnQsZnJvbSxsZW4pCW91dHNsKHBvcnQsZnJvbSxsZW4pCisjZGVmaW5lIGluc2JfcChwb3J0LHRvLGxlbikJaW5zYihwb3J0LHRvLGxlbikKKyNkZWZpbmUgaW5zd19wKHBvcnQsdG8sbGVuKQlpbnN3KHBvcnQsdG8sbGVuKQorI2RlZmluZSBpbnNsX3AocG9ydCx0byxsZW4pCWluc2wocG9ydCx0byxsZW4pCisKKy8qCisgKiBTdHJpbmcgdmVyc2lvbiBvZiBJTyBtZW1vcnkgYWNjZXNzIG9wczoKKyAqLworZXh0ZXJuIHZvaWQgX21lbWNweV9mcm9taW8odm9pZCAqLCB2b2lkIF9faW9tZW0gKiwgc2l6ZV90KTsKK2V4dGVybiB2b2lkIF9tZW1jcHlfdG9pbyh2b2lkIF9faW9tZW0gKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOworZXh0ZXJuIHZvaWQgX21lbXNldF9pbyh2b2lkIF9faW9tZW0gKiwgaW50LCBzaXplX3QpOworCisjZGVmaW5lIG1taW93YigpCisKKy8qCisgKiAgTWVtb3J5IGFjY2VzcyBwcmltaXRpdmVzCisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogVGhlc2UgcGVyZm9ybSBQQ0kgbWVtb3J5IGFjY2Vzc2VzIHZpYSBhbiBpb3JlbWFwIHJlZ2lvbi4gIFRoZXkgZG9uJ3QKKyAqIHRha2UgYW4gYWRkcmVzcyBhcyBzdWNoLCBidXQgYSBjb29raWUuCisgKgorICogQWdhaW4sIHRoaXMgYXJlIGRlZmluZWQgdG8gcGVyZm9ybSBsaXR0bGUgZW5kaWFuIGFjY2Vzc2VzLiAgU2VlIHRoZQorICogSU8gcG9ydCBwcmltaXRpdmVzIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICovCisjaWZkZWYgX19tZW1fcGNpCisjZGVmaW5lIHJlYWRiKGMpICh7IHVuc2lnbmVkIGludCBfX3YgPSBfX3Jhd19yZWFkYihfX21lbV9wY2koYykpOyBfX3Y7IH0pCisjZGVmaW5lIHJlYWR3KGMpICh7IHVuc2lnbmVkIGludCBfX3YgPSBsZTE2X3RvX2NwdShfX3Jhd19yZWFkdyhfX21lbV9wY2koYykpKTsgX192OyB9KQorI2RlZmluZSByZWFkbChjKSAoeyB1bnNpZ25lZCBpbnQgX192ID0gbGUzMl90b19jcHUoX19yYXdfcmVhZGwoX19tZW1fcGNpKGMpKSk7IF9fdjsgfSkKKyNkZWZpbmUgcmVhZGJfcmVsYXhlZChhZGRyKSByZWFkYihhZGRyKQorI2RlZmluZSByZWFkd19yZWxheGVkKGFkZHIpIHJlYWR3KGFkZHIpCisjZGVmaW5lIHJlYWRsX3JlbGF4ZWQoYWRkcikgcmVhZGwoYWRkcikKKworI2RlZmluZSByZWFkc2IocCxkLGwpCQlfX3Jhd19yZWFkc2IoX19tZW1fcGNpKHApLGQsbCkKKyNkZWZpbmUgcmVhZHN3KHAsZCxsKQkJX19yYXdfcmVhZHN3KF9fbWVtX3BjaShwKSxkLGwpCisjZGVmaW5lIHJlYWRzbChwLGQsbCkJCV9fcmF3X3JlYWRzbChfX21lbV9wY2kocCksZCxsKQorCisjZGVmaW5lIHdyaXRlYih2LGMpCQlfX3Jhd193cml0ZWIodixfX21lbV9wY2koYykpCisjZGVmaW5lIHdyaXRldyh2LGMpCQlfX3Jhd193cml0ZXcoY3B1X3RvX2xlMTYodiksX19tZW1fcGNpKGMpKQorI2RlZmluZSB3cml0ZWwodixjKQkJX19yYXdfd3JpdGVsKGNwdV90b19sZTMyKHYpLF9fbWVtX3BjaShjKSkKKworI2RlZmluZSB3cml0ZXNiKHAsZCxsKQkJX19yYXdfd3JpdGVzYihfX21lbV9wY2kocCksZCxsKQorI2RlZmluZSB3cml0ZXN3KHAsZCxsKQkJX19yYXdfd3JpdGVzdyhfX21lbV9wY2kocCksZCxsKQorI2RlZmluZSB3cml0ZXNsKHAsZCxsKQkJX19yYXdfd3JpdGVzbChfX21lbV9wY2kocCksZCxsKQorCisjZGVmaW5lIG1lbXNldF9pbyhjLHYsbCkJX21lbXNldF9pbyhfX21lbV9wY2koYyksKHYpLChsKSkKKyNkZWZpbmUgbWVtY3B5X2Zyb21pbyhhLGMsbCkJX21lbWNweV9mcm9taW8oKGEpLF9fbWVtX3BjaShjKSwobCkpCisjZGVmaW5lIG1lbWNweV90b2lvKGMsYSxsKQlfbWVtY3B5X3RvaW8oX19tZW1fcGNpKGMpLChhKSwobCkpCisKKyNkZWZpbmUgZXRoX2lvX2NvcHlfYW5kX3N1bShzLGMsbCxiKSBcCisJCQkJZXRoX2NvcHlfYW5kX3N1bSgocyksX19tZW1fcGNpKGMpLChsKSwoYikpCisKK3N0YXRpYyBpbmxpbmUgaW50CitjaGVja19zaWduYXR1cmUodm9pZCBfX2lvbWVtICppb19hZGRyLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaWduYXR1cmUsCisJCWludCBsZW5ndGgpCit7CisJaW50IHJldHZhbCA9IDA7CisJZG8geworCQlpZiAocmVhZGIoaW9fYWRkcikgIT0gKnNpZ25hdHVyZSkKKwkJCWdvdG8gb3V0OworCQlpb19hZGRyKys7CisJCXNpZ25hdHVyZSsrOworCQlsZW5ndGgtLTsKKwl9IHdoaWxlIChsZW5ndGgpOworCXJldHZhbCA9IDE7CitvdXQ6CisJcmV0dXJuIHJldHZhbDsKK30KKworI2VsaWYgIWRlZmluZWQocmVhZGIpCisKKyNkZWZpbmUgcmVhZGIoYykJCQkoX19yZWFkd3JpdGVfYnVnKCJyZWFkYiIpLDApCisjZGVmaW5lIHJlYWR3KGMpCQkJKF9fcmVhZHdyaXRlX2J1ZygicmVhZHciKSwwKQorI2RlZmluZSByZWFkbChjKQkJCShfX3JlYWR3cml0ZV9idWcoInJlYWRsIiksMCkKKyNkZWZpbmUgd3JpdGViKHYsYykJCQlfX3JlYWR3cml0ZV9idWcoIndyaXRlYiIpCisjZGVmaW5lIHdyaXRldyh2LGMpCQkJX19yZWFkd3JpdGVfYnVnKCJ3cml0ZXciKQorI2RlZmluZSB3cml0ZWwodixjKQkJCV9fcmVhZHdyaXRlX2J1Zygid3JpdGVsIikKKworI2RlZmluZSBldGhfaW9fY29weV9hbmRfc3VtKHMsYyxsLGIpCV9fcmVhZHdyaXRlX2J1ZygiZXRoX2lvX2NvcHlfYW5kX3N1bSIpCisKKyNkZWZpbmUgY2hlY2tfc2lnbmF0dXJlKGlvLHNpZyxsZW4pCSgwKQorCisjZW5kaWYJLyogX19tZW1fcGNpICovCisKKy8qCisgKiBJZiB0aGlzIGFyY2hpdGVjdHVyZSBoYXMgSVNBIElPLCB0aGVuIGRlZmluZSB0aGUgaXNhX3JlYWQvaXNhX3dyaXRlCisgKiBtYWNyb3MuCisgKi8KKyNpZmRlZiBfX21lbV9pc2EKKworI2RlZmluZSBpc2FfcmVhZGIoYWRkcikJCQlfX3Jhd19yZWFkYihfX21lbV9pc2EoYWRkcikpCisjZGVmaW5lIGlzYV9yZWFkdyhhZGRyKQkJCV9fcmF3X3JlYWR3KF9fbWVtX2lzYShhZGRyKSkKKyNkZWZpbmUgaXNhX3JlYWRsKGFkZHIpCQkJX19yYXdfcmVhZGwoX19tZW1faXNhKGFkZHIpKQorI2RlZmluZSBpc2Ffd3JpdGViKHZhbCxhZGRyKQkJX19yYXdfd3JpdGViKHZhbCxfX21lbV9pc2EoYWRkcikpCisjZGVmaW5lIGlzYV93cml0ZXcodmFsLGFkZHIpCQlfX3Jhd193cml0ZXcodmFsLF9fbWVtX2lzYShhZGRyKSkKKyNkZWZpbmUgaXNhX3dyaXRlbCh2YWwsYWRkcikJCV9fcmF3X3dyaXRlbCh2YWwsX19tZW1faXNhKGFkZHIpKQorI2RlZmluZSBpc2FfbWVtc2V0X2lvKGEsYixjKQkJX21lbXNldF9pbyhfX21lbV9pc2EoYSksKGIpLChjKSkKKyNkZWZpbmUgaXNhX21lbWNweV9mcm9taW8oYSxiLGMpCV9tZW1jcHlfZnJvbWlvKChhKSxfX21lbV9pc2EoYiksKGMpKQorI2RlZmluZSBpc2FfbWVtY3B5X3RvaW8oYSxiLGMpCQlfbWVtY3B5X3RvaW8oX19tZW1faXNhKChhKSksKGIpLChjKSkKKworI2RlZmluZSBpc2FfZXRoX2lvX2NvcHlfYW5kX3N1bShhLGIsYyxkKSBcCisJCQkJZXRoX2NvcHlfYW5kX3N1bSgoYSksX19tZW1faXNhKGIpLChjKSwoZCkpCisKKyNlbHNlCS8qIF9fbWVtX2lzYSAqLworCisjZGVmaW5lIGlzYV9yZWFkYihhZGRyKQkJCShfX3JlYWR3cml0ZV9idWcoImlzYV9yZWFkYiIpLDApCisjZGVmaW5lIGlzYV9yZWFkdyhhZGRyKQkJCShfX3JlYWR3cml0ZV9idWcoImlzYV9yZWFkdyIpLDApCisjZGVmaW5lIGlzYV9yZWFkbChhZGRyKQkJCShfX3JlYWR3cml0ZV9idWcoImlzYV9yZWFkbCIpLDApCisjZGVmaW5lIGlzYV93cml0ZWIodmFsLGFkZHIpCQlfX3JlYWR3cml0ZV9idWcoImlzYV93cml0ZWIiKQorI2RlZmluZSBpc2Ffd3JpdGV3KHZhbCxhZGRyKQkJX19yZWFkd3JpdGVfYnVnKCJpc2Ffd3JpdGV3IikKKyNkZWZpbmUgaXNhX3dyaXRlbCh2YWwsYWRkcikJCV9fcmVhZHdyaXRlX2J1ZygiaXNhX3dyaXRlbCIpCisjZGVmaW5lIGlzYV9tZW1zZXRfaW8oYSxiLGMpCQlfX3JlYWR3cml0ZV9idWcoImlzYV9tZW1zZXRfaW8iKQorI2RlZmluZSBpc2FfbWVtY3B5X2Zyb21pbyhhLGIsYykJX19yZWFkd3JpdGVfYnVnKCJpc2FfbWVtY3B5X2Zyb21pbyIpCisjZGVmaW5lIGlzYV9tZW1jcHlfdG9pbyhhLGIsYykJCV9fcmVhZHdyaXRlX2J1ZygiaXNhX21lbWNweV90b2lvIikKKworI2RlZmluZSBpc2FfZXRoX2lvX2NvcHlfYW5kX3N1bShhLGIsYyxkKSBcCisJCQkJX19yZWFkd3JpdGVfYnVnKCJpc2FfZXRoX2lvX2NvcHlfYW5kX3N1bSIpCisKKyNlbmRpZgkvKiBfX21lbV9pc2EgKi8KKworLyoKKyAqIGlvcmVtYXAgYW5kIGZyaWVuZHMuCisgKgorICogaW9yZW1hcCB0YWtlcyBhIFBDSSBtZW1vcnkgYWRkcmVzcywgYXMgc3BlY2lmaWVkIGluCisgKiBEb2N1bWVudGF0aW9uL0lPLW1hcHBpbmcudHh0LgorICovCitleHRlcm4gdm9pZCBfX2lvbWVtICogX19pb3JlbWFwKHVuc2lnbmVkIGxvbmcsIHNpemVfdCwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CitleHRlcm4gdm9pZCBfX2lvdW5tYXAodm9pZCBfX2lvbWVtICphZGRyKTsKKworI2lmbmRlZiBfX2FyY2hfaW9yZW1hcAorI2RlZmluZSBpb3JlbWFwKGNvb2tpZSxzaXplKQkJX19pb3JlbWFwKGNvb2tpZSxzaXplLDAsMSkKKyNkZWZpbmUgaW9yZW1hcF9ub2NhY2hlKGNvb2tpZSxzaXplKQlfX2lvcmVtYXAoY29va2llLHNpemUsMCwxKQorI2RlZmluZSBpb3JlbWFwX2NhY2hlZChjb29raWUsc2l6ZSkJX19pb3JlbWFwKGNvb2tpZSxzaXplLExfUFRFX0NBQ0hFQUJMRSwxKQorI2RlZmluZSBpb3VubWFwKGNvb2tpZSkJCQlfX2lvdW5tYXAoY29va2llKQorI2Vsc2UKKyNkZWZpbmUgaW9yZW1hcChjb29raWUsc2l6ZSkJCV9fYXJjaF9pb3JlbWFwKChjb29raWUpLChzaXplKSwwLDEpCisjZGVmaW5lIGlvcmVtYXBfbm9jYWNoZShjb29raWUsc2l6ZSkJX19hcmNoX2lvcmVtYXAoKGNvb2tpZSksKHNpemUpLDAsMSkKKyNkZWZpbmUgaW9yZW1hcF9jYWNoZWQoY29va2llLHNpemUpCV9fYXJjaF9pb3JlbWFwKChjb29raWUpLChzaXplKSxMX1BURV9DQUNIRUFCTEUsMSkKKyNkZWZpbmUgaW91bm1hcChjb29raWUpCQkJX19hcmNoX2lvdW5tYXAoY29va2llKQorI2VuZGlmCisKKy8qCisgKiBjYW4gdGhlIGhhcmR3YXJlIG1hcCB0aGlzIGludG8gb25lIHNlZ21lbnQgb3Igbm90LCBnaXZlbiBubyBvdGhlcgorICogY29uc3RyYWludHMuCisgKi8KKyNkZWZpbmUgQklPVkVDX01FUkdFQUJMRSh2ZWMxLCB2ZWMyKQlcCisJKChidmVjX3RvX3BoeXMoKHZlYzEpKSArICh2ZWMxKS0+YnZfbGVuKSA9PSBidmVjX3RvX3BoeXMoKHZlYzIpKSkKKworLyoKKyAqIENvbnZlcnQgYSBwaHlzaWNhbCBwb2ludGVyIHRvIGEgdmlydHVhbCBrZXJuZWwgcG9pbnRlciBmb3IgL2Rldi9tZW0KKyAqIGFjY2VzcworICovCisjZGVmaW5lIHhsYXRlX2Rldl9tZW1fcHRyKHApCV9fdmEocCkKKworLyoKKyAqIENvbnZlcnQgYSB2aXJ0dWFsIGNhY2hlZCBwb2ludGVyIHRvIGFuIHVuY2FjaGVkIHBvaW50ZXIKKyAqLworI2RlZmluZSB4bGF0ZV9kZXZfa21lbV9wdHIocCkJcAorCisjZW5kaWYJLyogX19LRVJORUxfXyAqLworI2VuZGlmCS8qIF9fQVNNX0FSTV9JT19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vaW9jdGwuaCBiL2luY2x1ZGUvYXNtLWFybS9pb2N0bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjYmI3ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vaW9jdGwuaApAQCAtMCwwICsxLDc0IEBACisvKgorICogbGludXgvaW9jdGwuaCBmb3IgTGludXggYnkgSC5ILiBCZXJnbWFuLgorICovCisKKyNpZm5kZWYgX0FTTUFSTV9JT0NUTF9ICisjZGVmaW5lIF9BU01BUk1fSU9DVExfSAorCisvKiBpb2N0bCBjb21tYW5kIGVuY29kaW5nOiAzMiBiaXRzIHRvdGFsLCBjb21tYW5kIGluIGxvd2VyIDE2IGJpdHMsCisgKiBzaXplIG9mIHRoZSBwYXJhbWV0ZXIgc3RydWN0dXJlIGluIHRoZSBsb3dlciAxNCBiaXRzIG9mIHRoZQorICogdXBwZXIgMTYgYml0cy4KKyAqIEVuY29kaW5nIHRoZSBzaXplIG9mIHRoZSBwYXJhbWV0ZXIgc3RydWN0dXJlIGluIHRoZSBpb2N0bCByZXF1ZXN0CisgKiBpcyB1c2VmdWwgZm9yIGNhdGNoaW5nIHByb2dyYW1zIGNvbXBpbGVkIHdpdGggb2xkIHZlcnNpb25zCisgKiBhbmQgdG8gYXZvaWQgb3ZlcndyaXRpbmcgdXNlciBzcGFjZSBvdXRzaWRlIHRoZSB1c2VyIGJ1ZmZlciBhcmVhLgorICogVGhlIGhpZ2hlc3QgMiBiaXRzIGFyZSByZXNlcnZlZCBmb3IgaW5kaWNhdGluZyB0aGUgYGBhY2Nlc3MgbW9kZScnLgorICogTk9URTogVGhpcyBsaW1pdHMgdGhlIG1heCBwYXJhbWV0ZXIgc2l6ZSB0byAxNmtCIC0xICEKKyAqLworCisvKgorICogVGhlIGZvbGxvd2luZyBpcyBmb3IgY29tcGF0aWJpbGl0eSBhY3Jvc3MgdGhlIHZhcmlvdXMgTGludXgKKyAqIHBsYXRmb3Jtcy4gIFRoZSBpMzg2IGlvY3RsIG51bWJlcmluZyBzY2hlbWUgZG9lc24ndCByZWFsbHkgZW5mb3JjZQorICogYSB0eXBlIGZpZWxkLiAgRGUgZmFjdG8sIGhvd2V2ZXIsIHRoZSB0b3AgOCBiaXRzIG9mIHRoZSBsb3dlciAxNgorICogYml0cyBhcmUgaW5kZWVkIHVzZWQgYXMgYSB0eXBlIGZpZWxkLCBzbyB3ZSBtaWdodCBqdXN0IGFzIHdlbGwgbWFrZQorICogdGhpcyBleHBsaWNpdCBoZXJlLiAgUGxlYXNlIGJlIHN1cmUgdG8gdXNlIHRoZSBkZWNvZGluZyBtYWNyb3MKKyAqIGJlbG93IGZyb20gbm93IG9uLgorICovCisjZGVmaW5lIF9JT0NfTlJCSVRTCTgKKyNkZWZpbmUgX0lPQ19UWVBFQklUUwk4CisjZGVmaW5lIF9JT0NfU0laRUJJVFMJMTQKKyNkZWZpbmUgX0lPQ19ESVJCSVRTCTIKKworI2RlZmluZSBfSU9DX05STUFTSwkoKDEgPDwgX0lPQ19OUkJJVFMpLTEpCisjZGVmaW5lIF9JT0NfVFlQRU1BU0sJKCgxIDw8IF9JT0NfVFlQRUJJVFMpLTEpCisjZGVmaW5lIF9JT0NfU0laRU1BU0sJKCgxIDw8IF9JT0NfU0laRUJJVFMpLTEpCisjZGVmaW5lIF9JT0NfRElSTUFTSwkoKDEgPDwgX0lPQ19ESVJCSVRTKS0xKQorCisjZGVmaW5lIF9JT0NfTlJTSElGVAkwCisjZGVmaW5lIF9JT0NfVFlQRVNISUZUCShfSU9DX05SU0hJRlQrX0lPQ19OUkJJVFMpCisjZGVmaW5lIF9JT0NfU0laRVNISUZUCShfSU9DX1RZUEVTSElGVCtfSU9DX1RZUEVCSVRTKQorI2RlZmluZSBfSU9DX0RJUlNISUZUCShfSU9DX1NJWkVTSElGVCtfSU9DX1NJWkVCSVRTKQorCisvKgorICogRGlyZWN0aW9uIGJpdHMuCisgKi8KKyNkZWZpbmUgX0lPQ19OT05FCTBVCisjZGVmaW5lIF9JT0NfV1JJVEUJMVUKKyNkZWZpbmUgX0lPQ19SRUFECTJVCisKKyNkZWZpbmUgX0lPQyhkaXIsdHlwZSxucixzaXplKSBcCisJKCgoZGlyKSAgPDwgX0lPQ19ESVJTSElGVCkgfCBcCisJICgodHlwZSkgPDwgX0lPQ19UWVBFU0hJRlQpIHwgXAorCSAoKG5yKSAgIDw8IF9JT0NfTlJTSElGVCkgfCBcCisJICgoc2l6ZSkgPDwgX0lPQ19TSVpFU0hJRlQpKQorCisvKiB1c2VkIHRvIGNyZWF0ZSBudW1iZXJzICovCisjZGVmaW5lIF9JTyh0eXBlLG5yKQkJX0lPQyhfSU9DX05PTkUsKHR5cGUpLChuciksMCkKKyNkZWZpbmUgX0lPUih0eXBlLG5yLHNpemUpCV9JT0MoX0lPQ19SRUFELCh0eXBlKSwobnIpLHNpemVvZihzaXplKSkKKyNkZWZpbmUgX0lPVyh0eXBlLG5yLHNpemUpCV9JT0MoX0lPQ19XUklURSwodHlwZSksKG5yKSxzaXplb2Yoc2l6ZSkpCisjZGVmaW5lIF9JT1dSKHR5cGUsbnIsc2l6ZSkJX0lPQyhfSU9DX1JFQUR8X0lPQ19XUklURSwodHlwZSksKG5yKSxzaXplb2Yoc2l6ZSkpCisKKy8qIHVzZWQgdG8gZGVjb2RlIGlvY3RsIG51bWJlcnMuLiAqLworI2RlZmluZSBfSU9DX0RJUihucikJCSgoKG5yKSA+PiBfSU9DX0RJUlNISUZUKSAmIF9JT0NfRElSTUFTSykKKyNkZWZpbmUgX0lPQ19UWVBFKG5yKQkJKCgobnIpID4+IF9JT0NfVFlQRVNISUZUKSAmIF9JT0NfVFlQRU1BU0spCisjZGVmaW5lIF9JT0NfTlIobnIpCQkoKChucikgPj4gX0lPQ19OUlNISUZUKSAmIF9JT0NfTlJNQVNLKQorI2RlZmluZSBfSU9DX1NJWkUobnIpCQkoKChucikgPj4gX0lPQ19TSVpFU0hJRlQpICYgX0lPQ19TSVpFTUFTSykKKworLyogLi4uYW5kIGZvciB0aGUgZHJpdmVycy9zb3VuZCBmaWxlcy4uLiAqLworCisjZGVmaW5lIElPQ19JTgkJKF9JT0NfV1JJVEUgPDwgX0lPQ19ESVJTSElGVCkKKyNkZWZpbmUgSU9DX09VVAkJKF9JT0NfUkVBRCA8PCBfSU9DX0RJUlNISUZUKQorI2RlZmluZSBJT0NfSU5PVVQJKChfSU9DX1dSSVRFfF9JT0NfUkVBRCkgPDwgX0lPQ19ESVJTSElGVCkKKyNkZWZpbmUgSU9DU0laRV9NQVNLCShfSU9DX1NJWkVNQVNLIDw8IF9JT0NfU0laRVNISUZUKQorI2RlZmluZSBJT0NTSVpFX1NISUZUCShfSU9DX1NJWkVTSElGVCkKKworI2VuZGlmIC8qIF9BU01BUk1fSU9DVExfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2lvY3Rscy5oIGIvaW5jbHVkZS9hc20tYXJtL2lvY3Rscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiOWE3YWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vaW9jdGxzLmgKQEAgLTAsMCArMSw4MCBAQAorI2lmbmRlZiBfX0FTTV9BUk1fSU9DVExTX0gKKyNkZWZpbmUgX19BU01fQVJNX0lPQ1RMU19ICisKKyNpbmNsdWRlIDxhc20vaW9jdGwuaD4KKworLyogMHg1NCBpcyBqdXN0IGEgbWFnaWMgbnVtYmVyIHRvIG1ha2UgdGhlc2UgcmVsYXRpdmVseSB1bmlxdWUgKCdUJykgKi8KKworI2RlZmluZSBUQ0dFVFMJCTB4NTQwMQorI2RlZmluZSBUQ1NFVFMJCTB4NTQwMgorI2RlZmluZSBUQ1NFVFNXCQkweDU0MDMKKyNkZWZpbmUgVENTRVRTRgkJMHg1NDA0CisjZGVmaW5lIFRDR0VUQQkJMHg1NDA1CisjZGVmaW5lIFRDU0VUQQkJMHg1NDA2CisjZGVmaW5lIFRDU0VUQVcJCTB4NTQwNworI2RlZmluZSBUQ1NFVEFGCQkweDU0MDgKKyNkZWZpbmUgVENTQlJLCQkweDU0MDkKKyNkZWZpbmUgVENYT05DCQkweDU0MEEKKyNkZWZpbmUgVENGTFNICQkweDU0MEIKKyNkZWZpbmUgVElPQ0VYQ0wJMHg1NDBDCisjZGVmaW5lIFRJT0NOWENMCTB4NTQwRAorI2RlZmluZSBUSU9DU0NUVFkJMHg1NDBFCisjZGVmaW5lIFRJT0NHUEdSUAkweDU0MEYKKyNkZWZpbmUgVElPQ1NQR1JQCTB4NTQxMAorI2RlZmluZSBUSU9DT1VUUQkweDU0MTEKKyNkZWZpbmUgVElPQ1NUSQkJMHg1NDEyCisjZGVmaW5lIFRJT0NHV0lOU1oJMHg1NDEzCisjZGVmaW5lIFRJT0NTV0lOU1oJMHg1NDE0CisjZGVmaW5lIFRJT0NNR0VUCTB4NTQxNQorI2RlZmluZSBUSU9DTUJJUwkweDU0MTYKKyNkZWZpbmUgVElPQ01CSUMJMHg1NDE3CisjZGVmaW5lIFRJT0NNU0VUCTB4NTQxOAorI2RlZmluZSBUSU9DR1NPRlRDQVIJMHg1NDE5CisjZGVmaW5lIFRJT0NTU09GVENBUgkweDU0MUEKKyNkZWZpbmUgRklPTlJFQUQJMHg1NDFCCisjZGVmaW5lIFRJT0NJTlEJCUZJT05SRUFECisjZGVmaW5lIFRJT0NMSU5VWAkweDU0MUMKKyNkZWZpbmUgVElPQ0NPTlMJMHg1NDFECisjZGVmaW5lIFRJT0NHU0VSSUFMCTB4NTQxRQorI2RlZmluZSBUSU9DU1NFUklBTAkweDU0MUYKKyNkZWZpbmUgVElPQ1BLVAkJMHg1NDIwCisjZGVmaW5lIEZJT05CSU8JCTB4NTQyMQorI2RlZmluZSBUSU9DTk9UVFkJMHg1NDIyCisjZGVmaW5lIFRJT0NTRVRECTB4NTQyMworI2RlZmluZSBUSU9DR0VURAkweDU0MjQKKyNkZWZpbmUgVENTQlJLUAkJMHg1NDI1CS8qIE5lZWRlZCBmb3IgUE9TSVggdGNzZW5kYnJlYWsoKSAqLworI2RlZmluZSBUSU9DU0JSSwkweDU0MjcgIC8qIEJTRCBjb21wYXRpYmlsaXR5ICovCisjZGVmaW5lIFRJT0NDQlJLCTB4NTQyOCAgLyogQlNEIGNvbXBhdGliaWxpdHkgKi8KKyNkZWZpbmUgVElPQ0dTSUQJMHg1NDI5ICAvKiBSZXR1cm4gdGhlIHNlc3Npb24gSUQgb2YgRkQgKi8KKyNkZWZpbmUgVElPQ0dQVE4JX0lPUignVCcsMHgzMCwgdW5zaWduZWQgaW50KSAvKiBHZXQgUHR5IE51bWJlciAob2YgcHR5LW11eCBkZXZpY2UpICovCisjZGVmaW5lIFRJT0NTUFRMQ0sJX0lPVygnVCcsMHgzMSwgaW50KSAgLyogTG9jay91bmxvY2sgUHR5ICovCisKKyNkZWZpbmUgRklPTkNMRVgJMHg1NDUwICAvKiB0aGVzZSBudW1iZXJzIG5lZWQgdG8gYmUgYWRqdXN0ZWQuICovCisjZGVmaW5lIEZJT0NMRVgJCTB4NTQ1MQorI2RlZmluZSBGSU9BU1lOQwkweDU0NTIKKyNkZWZpbmUgVElPQ1NFUkNPTkZJRwkweDU0NTMKKyNkZWZpbmUgVElPQ1NFUkdXSUxECTB4NTQ1NAorI2RlZmluZSBUSU9DU0VSU1dJTEQJMHg1NDU1CisjZGVmaW5lIFRJT0NHTENLVFJNSU9TCTB4NTQ1NgorI2RlZmluZSBUSU9DU0xDS1RSTUlPUwkweDU0NTcKKyNkZWZpbmUgVElPQ1NFUkdTVFJVQ1QJMHg1NDU4IC8qIEZvciBkZWJ1Z2dpbmcgb25seSAqLworI2RlZmluZSBUSU9DU0VSR0VUTFNSICAgMHg1NDU5IC8qIEdldCBsaW5lIHN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBUSU9DU0VSR0VUTVVMVEkgMHg1NDVBIC8qIEdldCBtdWx0aXBvcnQgY29uZmlnICAqLworI2RlZmluZSBUSU9DU0VSU0VUTVVMVEkgMHg1NDVCIC8qIFNldCBtdWx0aXBvcnQgY29uZmlnICovCisKKyNkZWZpbmUgVElPQ01JV0FJVAkweDU0NUMJLyogd2FpdCBmb3IgYSBjaGFuZ2Ugb24gc2VyaWFsIGlucHV0IGxpbmUocykgKi8KKyNkZWZpbmUgVElPQ0dJQ09VTlQJMHg1NDVECS8qIHJlYWQgc2VyaWFsIHBvcnQgaW5saW5lIGludGVycnVwdCBjb3VudHMgKi8KKyNkZWZpbmUgRklPUVNJWkUJMHg1NDVFCisKKy8qIFVzZWQgZm9yIHBhY2tldCBtb2RlICovCisjZGVmaW5lIFRJT0NQS1RfREFUQQkJIDAKKyNkZWZpbmUgVElPQ1BLVF9GTFVTSFJFQUQJIDEKKyNkZWZpbmUgVElPQ1BLVF9GTFVTSFdSSVRFCSAyCisjZGVmaW5lIFRJT0NQS1RfU1RPUAkJIDQKKyNkZWZpbmUgVElPQ1BLVF9TVEFSVAkJIDgKKyNkZWZpbmUgVElPQ1BLVF9OT1NUT1AJCTE2CisjZGVmaW5lIFRJT0NQS1RfRE9TVE9QCQkzMgorCisjZGVmaW5lIFRJT0NTRVJfVEVNVAkweDAxCS8qIFRyYW5zbWl0dGVyIHBoeXNpY2FsbHkgZW1wdHkgKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vaXBjLmggYi9pbmNsdWRlL2FzbS1hcm0vaXBjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ2ZTNkOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9pcGMuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvaXBjLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vaXBjYnVmLmggYi9pbmNsdWRlL2FzbS1hcm0vaXBjYnVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc2ODM5NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9pcGNidWYuaApAQCAtMCwwICsxLDI5IEBACisjaWZuZGVmIF9fQVNNQVJNX0lQQ0JVRl9ICisjZGVmaW5lIF9fQVNNQVJNX0lQQ0JVRl9ICisKKy8qCisgKiBUaGUgaXBjNjRfcGVybSBzdHJ1Y3R1cmUgZm9yIGFybSBhcmNoaXRlY3R1cmUuCisgKiBOb3RlIGV4dHJhIHBhZGRpbmcgYmVjYXVzZSB0aGlzIHN0cnVjdHVyZSBpcyBwYXNzZWQgYmFjayBhbmQgZm9ydGgKKyAqIGJldHdlZW4ga2VybmVsIGFuZCB1c2VyIHNwYWNlLgorICoKKyAqIFBhZCBzcGFjZSBpcyBsZWZ0IGZvcjoKKyAqIC0gMzItYml0IG1vZGVfdCBhbmQgc2VxCisgKiAtIDIgbWlzY2VsbGFuZW91cyAzMi1iaXQgdmFsdWVzCisgKi8KKworc3RydWN0IGlwYzY0X3Blcm0KK3sKKwlfX2tlcm5lbF9rZXlfdAkJa2V5OworCV9fa2VybmVsX3VpZDMyX3QJdWlkOworCV9fa2VybmVsX2dpZDMyX3QJZ2lkOworCV9fa2VybmVsX3VpZDMyX3QJY3VpZDsKKwlfX2tlcm5lbF9naWQzMl90CWNnaWQ7CisJX19rZXJuZWxfbW9kZV90CQltb2RlOworCXVuc2lnbmVkIHNob3J0CQlfX3BhZDE7CisJdW5zaWduZWQgc2hvcnQJCXNlcTsKKwl1bnNpZ25lZCBzaG9ydAkJX19wYWQyOworCXVuc2lnbmVkIGxvbmcJCV9fdW51c2VkMTsKKwl1bnNpZ25lZCBsb25nCQlfX3VudXNlZDI7Cit9OworCisjZW5kaWYgLyogX19BU01BUk1fSVBDQlVGX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9pcnEuaCBiL2luY2x1ZGUvYXNtLWFybS9pcnEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTc5MTJmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2lycS5oCkBAIC0wLDAgKzEsNTEgQEAKKyNpZm5kZWYgX19BU01fQVJNX0lSUV9ICisjZGVmaW5lIF9fQVNNX0FSTV9JUlFfSAorCisjaW5jbHVkZSA8YXNtL2FyY2gvaXJxcy5oPgorCisjaWZuZGVmIGlycV9jYW5vbmljYWxpemUKKyNkZWZpbmUgaXJxX2Nhbm9uaWNhbGl6ZShpKQkoaSkKKyNlbmRpZgorCisjaWZuZGVmIE5SX0lSUVMKKyNkZWZpbmUgTlJfSVJRUwkxMjgKKyNlbmRpZgorCisvKgorICogVXNlIHRoaXMgdmFsdWUgdG8gaW5kaWNhdGUgbGFjayBvZiBpbnRlcnJ1cHQKKyAqIGNhcGFiaWxpdHkKKyAqLworI2lmbmRlZiBOT19JUlEKKyNkZWZpbmUgTk9fSVJRCSgodW5zaWduZWQgaW50KSgtMSkpCisjZW5kaWYKKworc3RydWN0IGlycWFjdGlvbjsKKworZXh0ZXJuIHZvaWQgZGlzYWJsZV9pcnFfbm9zeW5jKHVuc2lnbmVkIGludCk7CitleHRlcm4gdm9pZCBkaXNhYmxlX2lycSh1bnNpZ25lZCBpbnQpOworZXh0ZXJuIHZvaWQgZW5hYmxlX2lycSh1bnNpZ25lZCBpbnQpOworCisjZGVmaW5lIF9fSVJRVF9GQUxFREdFCSgxIDw8IDApCisjZGVmaW5lIF9fSVJRVF9SSVNFREdFCSgxIDw8IDEpCisjZGVmaW5lIF9fSVJRVF9MT1dMVkwJKDEgPDwgMikKKyNkZWZpbmUgX19JUlFUX0hJR0hMVkwJKDEgPDwgMykKKworI2RlZmluZSBJUlFUX05PRURHRQkoMCkKKyNkZWZpbmUgSVJRVF9SSVNJTkcJKF9fSVJRVF9SSVNFREdFKQorI2RlZmluZSBJUlFUX0ZBTExJTkcJKF9fSVJRVF9GQUxFREdFKQorI2RlZmluZSBJUlFUX0JPVEhFREdFCShfX0lSUVRfUklTRURHRXxfX0lSUVRfRkFMRURHRSkKKyNkZWZpbmUgSVJRVF9MT1cJKF9fSVJRVF9MT1dMVkwpCisjZGVmaW5lIElSUVRfSElHSAkoX19JUlFUX0hJR0hMVkwpCisjZGVmaW5lIElSUVRfUFJPQkUJKDEgPDwgNCkKKworaW50IHNldF9pcnFfdHlwZSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgdHlwZSk7Cit2b2lkIGRpc2FibGVfaXJxX3dha2UodW5zaWduZWQgaW50IGlycSk7Cit2b2lkIGVuYWJsZV9pcnFfd2FrZSh1bnNpZ25lZCBpbnQgaXJxKTsKK2ludCBzZXR1cF9pcnEodW5zaWduZWQgaW50LCBzdHJ1Y3QgaXJxYWN0aW9uICopOworCitzdHJ1Y3QgaXJxYWN0aW9uOworc3RydWN0IHB0X3JlZ3M7CitpbnQgaGFuZGxlX0lSUV9ldmVudCh1bnNpZ25lZCBpbnQsIHN0cnVjdCBwdF9yZWdzICosIHN0cnVjdCBpcnFhY3Rpb24gKik7CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0va21hcF90eXBlcy5oIGIvaW5jbHVkZS9hc20tYXJtL2ttYXBfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWRlZjEzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2ttYXBfdHlwZXMuaApAQCAtMCwwICsxLDI0IEBACisjaWZuZGVmIF9fQVJNX0tNQVBfVFlQRVNfSAorI2RlZmluZSBfX0FSTV9LTUFQX1RZUEVTX0gKKworLyoKKyAqIFRoaXMgaXMgdGhlICJiYXJlIG1pbmltdW0iLiAgQUlPIHNlZW1zIHRvIHJlcXVpcmUgdGhpcy4KKyAqLworZW51bSBrbV90eXBlIHsKKwlLTV9CT1VOQ0VfUkVBRCwKKwlLTV9TS0JfU1VOUlBDX0RBVEEsCisJS01fU0tCX0RBVEFfU09GVElSUSwKKwlLTV9VU0VSMCwKKwlLTV9VU0VSMSwKKwlLTV9CSU9fU1JDX0lSUSwKKwlLTV9CSU9fRFNUX0lSUSwKKwlLTV9QVEUwLAorCUtNX1BURTEsCisJS01fSVJRMCwKKwlLTV9JUlExLAorCUtNX1NPRlRJUlEwLAorCUtNX1NPRlRJUlExLAorCUtNX1RZUEVfTlIKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2xlZHMuaCBiL2luY2x1ZGUvYXNtLWFybS9sZWRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhjZTQxMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9sZWRzLmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vbGVkcy5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5OCBSdXNzZWxsIEtpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBFdmVudC1kcml2ZW4gaW50ZXJmYWNlIGZvciBMRURzIG9uIG1hY2hpbmVzCisgKiAgQWRkZWQgbGVkX3N0YXJ0IGFuZCBsZWRfc3RvcC0gQWxleCBIb2xkZW4sIDI4dGggRGVjIDE5OTguCisgKi8KKyNpZm5kZWYgQVNNX0FSTV9MRURTX0gKKyNkZWZpbmUgQVNNX0FSTV9MRURTX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCit0eXBlZGVmIGVudW0geworCWxlZF9pZGxlX3N0YXJ0LAorCWxlZF9pZGxlX2VuZCwKKwlsZWRfdGltZXIsCisJbGVkX3N0YXJ0LAorCWxlZF9zdG9wLAorCWxlZF9jbGFpbSwJCS8qIG92ZXJyaWRlIGlkbGUgJiB0aW1lciBsZWRzICovCisJbGVkX3JlbGVhc2UsCQkvKiByZXN0b3JlIGlkbGUgJiB0aW1lciBsZWRzICovCisJbGVkX3N0YXJ0X3RpbWVyX21vZGUsCisJbGVkX3N0b3BfdGltZXJfbW9kZSwKKwlsZWRfZ3JlZW5fb24sCisJbGVkX2dyZWVuX29mZiwKKwlsZWRfYW1iZXJfb24sCisJbGVkX2FtYmVyX29mZiwKKwlsZWRfcmVkX29uLAorCWxlZF9yZWRfb2ZmLAorCWxlZF9ibHVlX29uLAorCWxlZF9ibHVlX29mZiwKKwkvKgorCSAqIEkgd2FudCB0aGlzIGJldHdlZW4gbGVkX3RpbWVyIGFuZCBsZWRfc3RhcnQsIGJ1dAorCSAqIHNvbWVvbmUgaGFzIGRlY2lkZWQgdG8gZXhwb3J0IHRoaXMgdG8gdXNlciBzcGFjZQorCSAqLworCWxlZF9oYWx0ZWQKK30gbGVkX2V2ZW50X3Q7CisKKy8qIFVzZSB0aGlzIHJvdXRpbmUgdG8gaGFuZGxlIExFRHMgKi8KKworI2lmZGVmIENPTkZJR19MRURTCitleHRlcm4gdm9pZCAoKmxlZHNfZXZlbnQpKGxlZF9ldmVudF90KTsKKyNlbHNlCisjZGVmaW5lIGxlZHNfZXZlbnQoZSkKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9saW1pdHMuaCBiL2luY2x1ZGUvYXNtLWFybS9saW1pdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGQ4YzY2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2xpbWl0cy5oCkBAIC0wLDAgKzEsMTEgQEAKKyNpZm5kZWYgX19BU01fUElQRV9ICisjZGVmaW5lIF9fQVNNX1BJUEVfSAorCisjaWZuZGVmIFBBR0VfU0laRQorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjZW5kaWYKKworI2RlZmluZSBQSVBFX0JVRglQQUdFX1NJWkUKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9saW5rYWdlLmggYi9pbmNsdWRlL2FzbS1hcm0vbGlua2FnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiZTRiNGUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vbGlua2FnZS5oCkBAIC0wLDAgKzEsNyBAQAorI2lmbmRlZiBfX0FTTV9MSU5LQUdFX0gKKyNkZWZpbmUgX19BU01fTElOS0FHRV9ICisKKyNkZWZpbmUgX19BTElHTiAuYWxpZ24gMAorI2RlZmluZSBfX0FMSUdOX1NUUiAiLmFsaWduIDAiCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2xvY2FsLmggYi9pbmNsdWRlL2FzbS1hcm0vbG9jYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTFjNTMwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2xvY2FsLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2xvY2FsLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vbG9ja3MuaCBiL2luY2x1ZGUvYXNtLWFybS9sb2Nrcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyNjI5OGYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vbG9ja3MuaApAQCAtMCwwICsxLDI2MiBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vbG9ja3MuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDAgUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgSW50ZXJydXB0IHNhZmUgbG9ja2luZyBhc3NlbWJsZXIuIAorICovCisjaWZuZGVmIF9fQVNNX1BST0NfTE9DS1NfSAorI2RlZmluZSBfX0FTTV9QUk9DX0xPQ0tTX0gKKworI2lmIF9fTElOVVhfQVJNX0FSQ0hfXyA+PSA2CisKKyNkZWZpbmUgX19kb3duX29wKHB0cixmYWlsKQkJCVwKKwkoewkJCQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCVwKKwkiQCBkb3duX29wXG4iCQkJCVwKKyIxOglsZHJleAlsciwgWyUwXVxuIgkJCVwKKyIJc3ViCWxyLCBsciwgJTFcbiIJCQlcCisiCXN0cmV4CWlwLCBsciwgWyUwXVxuIgkJCVwKKyIJdGVxCWlwLCAjMFxuIgkJCVwKKyIJYm5lCTFiXG4iCQkJCVwKKyIJdGVxCWxyLCAjMFxuIgkJCVwKKyIJbW92bWkJaXAsICUwXG4iCQkJXAorIglibG1pCSIgI2ZhaWwJCQkJXAorCToJCQkJCVwKKwk6ICJyIiAocHRyKSwgIkkiICgxKQkJCVwKKwk6ICJpcCIsICJsciIsICJjYyIsICJtZW1vcnkiKTsJCVwKKwl9KQorCisjZGVmaW5lIF9fZG93bl9vcF9yZXQocHRyLGZhaWwpCQkJXAorCSh7CQkJCQlcCisJCXVuc2lnbmVkIGludCByZXQ7CQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJXAorCSJAIGRvd25fb3BfcmV0XG4iCQkJXAorIjE6CWxkcmV4CWxyLCBbJTFdXG4iCQkJXAorIglzdWIJbHIsIGxyLCAlMlxuIgkJCVwKKyIJc3RyZXgJaXAsIGxyLCBbJTFdXG4iCQkJXAorIgl0ZXEJaXAsICMwXG4iCQkJXAorIglibmUJMWJcbiIJCQkJXAorIgl0ZXEJbHIsICMwXG4iCQkJXAorIgltb3ZtaQlpcCwgJTFcbiIJCQlcCisiCW1vdnBsCWlwLCAjMFxuIgkJCVwKKyIJYmxtaQkiICNmYWlsICJcbiIJCQlcCisiCW1vdgklMCwgaXAiCQkJCVwKKwk6ICI9JnIiIChyZXQpCQkJCVwKKwk6ICJyIiAocHRyKSwgIkkiICgxKQkJCVwKKwk6ICJpcCIsICJsciIsICJjYyIsICJtZW1vcnkiKTsJCVwKKwlyZXQ7CQkJCQlcCisJfSkKKworI2RlZmluZSBfX3VwX29wKHB0cix3YWtlKQkJCVwKKwkoewkJCQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCVwKKwkiQCB1cF9vcFxuIgkJCQlcCisiMToJbGRyZXgJbHIsIFslMF1cbiIJCQlcCisiCWFkZAlsciwgbHIsICUxXG4iCQkJXAorIglzdHJleAlpcCwgbHIsIFslMF1cbiIJCQlcCisiCXRlcQlpcCwgIzBcbiIJCQlcCisiCWJuZQkxYlxuIgkJCQlcCisiCXRlcQlsciwgIzBcbiIJCQlcCisiCW1vdmxlCWlwLCAlMFxuIgkJCVwKKyIJYmxsZQkiICN3YWtlCQkJCVwKKwk6CQkJCQlcCisJOiAiciIgKHB0ciksICJJIiAoMSkJCQlcCisJOiAiaXAiLCAibHIiLCAiY2MiLCAibWVtb3J5Iik7CQlcCisJfSkKKworLyoKKyAqIFRoZSB2YWx1ZSAweDAxMDAwMDAwIHN1cHBvcnRzIHVwIHRvIDEyOCBwcm9jZXNzb3JzIGFuZAorICogbG90cyBvZiBwcm9jZXNzZXMuICBCSUFTIG11c3QgYmUgY2hvc2VuIHN1Y2ggdGhhdCBzdWInaW5nCisgKiBCSUFTIG9uY2UgcGVyIENQVSB3aWxsIHJlc3VsdCBpbiB0aGUgbG9uZyByZW1haW5pbmcKKyAqIG5lZ2F0aXZlLgorICovCisjZGVmaW5lIFJXX0xPQ0tfQklBUyAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgUldfTE9DS19CSUFTX1NUUiAiMHgwMTAwMDAwMCIKKworI2RlZmluZSBfX2Rvd25fb3Bfd3JpdGUocHRyLGZhaWwpCQlcCisJKHsJCQkJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQlcCisJIkAgZG93bl9vcF93cml0ZVxuIgkJCVwKKyIxOglsZHJleAlsciwgWyUwXVxuIgkJCVwKKyIJc3ViCWxyLCBsciwgJTFcbiIJCQlcCisiCXN0cmV4CWlwLCBsciwgWyUwXVxuIgkJCVwKKyIJdGVxCWlwLCAjMFxuIgkJCVwKKyIJYm5lCTFiXG4iCQkJCVwKKyIJdGVxCWxyLCAjMFxuIgkJCVwKKyIJbW92bmUJaXAsICUwXG4iCQkJXAorIglibG5lCSIgI2ZhaWwJCQkJXAorCToJCQkJCVwKKwk6ICJyIiAocHRyKSwgIkkiIChSV19MT0NLX0JJQVMpCQlcCisJOiAiaXAiLCAibHIiLCAiY2MiLCAibWVtb3J5Iik7CQlcCisJfSkKKworI2RlZmluZSBfX3VwX29wX3dyaXRlKHB0cix3YWtlKQkJCVwKKwkoewkJCQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCVwKKwkiQCB1cF9vcF9yZWFkXG4iCQkJXAorIjE6CWxkcmV4CWxyLCBbJTBdXG4iCQkJXAorIglhZGQJbHIsIGxyLCAlMVxuIgkJCVwKKyIJc3RyZXgJaXAsIGxyLCBbJTBdXG4iCQkJXAorIgl0ZXEJaXAsICMwXG4iCQkJXAorIglibmUJMWJcbiIJCQkJXAorIgltb3ZjcwlpcCwgJTBcbiIJCQlcCisiCWJsY3MJIiAjd2FrZQkJCQlcCisJOgkJCQkJXAorCTogInIiIChwdHIpLCAiSSIgKFJXX0xPQ0tfQklBUykJCVwKKwk6ICJpcCIsICJsciIsICJjYyIsICJtZW1vcnkiKTsJCVwKKwl9KQorCisjZGVmaW5lIF9fZG93bl9vcF9yZWFkKHB0cixmYWlsKQkJXAorCV9fZG93bl9vcChwdHIsIGZhaWwpCisKKyNkZWZpbmUgX191cF9vcF9yZWFkKHB0cix3YWtlKQkJCVwKKwkoewkJCQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCVwKKwkiQCB1cF9vcF9yZWFkXG4iCQkJXAorIjE6CWxkcmV4CWxyLCBbJTBdXG4iCQkJXAorIglhZGQJbHIsIGxyLCAlMVxuIgkJCVwKKyIJc3RyZXgJaXAsIGxyLCBbJTBdXG4iCQkJXAorIgl0ZXEJaXAsICMwXG4iCQkJXAorIglibmUJMWJcbiIJCQkJXAorIgl0ZXEJbHIsICMwXG4iCQkJXAorIgltb3ZlcQlpcCwgJTBcbiIJCQlcCisiCWJsZXEJIiAjd2FrZQkJCQlcCisJOgkJCQkJXAorCTogInIiIChwdHIpLCAiSSIgKDEpCQkJXAorCTogImlwIiwgImxyIiwgImNjIiwgIm1lbW9yeSIpOwkJXAorCX0pCisKKyNlbHNlCisKKyNkZWZpbmUgX19kb3duX29wKHB0cixmYWlsKQkJCVwKKwkoewkJCQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCVwKKwkiQCBkb3duX29wXG4iCQkJCVwKKyIJbXJzCWlwLCBjcHNyXG4iCQkJXAorIglvcnIJbHIsIGlwLCAjMTI4XG4iCQkJXAorIgltc3IJY3Bzcl9jLCBsclxuIgkJCVwKKyIJbGRyCWxyLCBbJTBdXG4iCQkJXAorIglzdWJzCWxyLCBsciwgJTFcbiIJCQlcCisiCXN0cglsciwgWyUwXVxuIgkJCVwKKyIJbXNyCWNwc3JfYywgaXBcbiIJCQlcCisiCW1vdm1pCWlwLCAlMFxuIgkJCVwKKyIJYmxtaQkiICNmYWlsCQkJCVwKKwk6CQkJCQlcCisJOiAiciIgKHB0ciksICJJIiAoMSkJCQlcCisJOiAiaXAiLCAibHIiLCAiY2MiLCAibWVtb3J5Iik7CQlcCisJfSkKKworI2RlZmluZSBfX2Rvd25fb3BfcmV0KHB0cixmYWlsKQkJCVwKKwkoewkJCQkJXAorCQl1bnNpZ25lZCBpbnQgcmV0OwkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCVwKKwkiQCBkb3duX29wX3JldFxuIgkJCVwKKyIJbXJzCWlwLCBjcHNyXG4iCQkJXAorIglvcnIJbHIsIGlwLCAjMTI4XG4iCQkJXAorIgltc3IJY3Bzcl9jLCBsclxuIgkJCVwKKyIJbGRyCWxyLCBbJTFdXG4iCQkJXAorIglzdWJzCWxyLCBsciwgJTJcbiIJCQlcCisiCXN0cglsciwgWyUxXVxuIgkJCVwKKyIJbXNyCWNwc3JfYywgaXBcbiIJCQlcCisiCW1vdm1pCWlwLCAlMVxuIgkJCVwKKyIJbW92cGwJaXAsICMwXG4iCQkJXAorIglibG1pCSIgI2ZhaWwgIlxuIgkJCVwKKyIJbW92CSUwLCBpcCIJCQkJXAorCTogIj0mciIgKHJldCkJCQkJXAorCTogInIiIChwdHIpLCAiSSIgKDEpCQkJXAorCTogImlwIiwgImxyIiwgImNjIiwgIm1lbW9yeSIpOwkJXAorCXJldDsJCQkJCVwKKwl9KQorCisjZGVmaW5lIF9fdXBfb3AocHRyLHdha2UpCQkJXAorCSh7CQkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJXAorCSJAIHVwX29wXG4iCQkJCVwKKyIJbXJzCWlwLCBjcHNyXG4iCQkJXAorIglvcnIJbHIsIGlwLCAjMTI4XG4iCQkJXAorIgltc3IJY3Bzcl9jLCBsclxuIgkJCVwKKyIJbGRyCWxyLCBbJTBdXG4iCQkJXAorIglhZGRzCWxyLCBsciwgJTFcbiIJCQlcCisiCXN0cglsciwgWyUwXVxuIgkJCVwKKyIJbXNyCWNwc3JfYywgaXBcbiIJCQlcCisiCW1vdmxlCWlwLCAlMFxuIgkJCVwKKyIJYmxsZQkiICN3YWtlCQkJCVwKKwk6CQkJCQlcCisJOiAiciIgKHB0ciksICJJIiAoMSkJCQlcCisJOiAiaXAiLCAibHIiLCAiY2MiLCAibWVtb3J5Iik7CQlcCisJfSkKKworLyoKKyAqIFRoZSB2YWx1ZSAweDAxMDAwMDAwIHN1cHBvcnRzIHVwIHRvIDEyOCBwcm9jZXNzb3JzIGFuZAorICogbG90cyBvZiBwcm9jZXNzZXMuICBCSUFTIG11c3QgYmUgY2hvc2VuIHN1Y2ggdGhhdCBzdWInaW5nCisgKiBCSUFTIG9uY2UgcGVyIENQVSB3aWxsIHJlc3VsdCBpbiB0aGUgbG9uZyByZW1haW5pbmcKKyAqIG5lZ2F0aXZlLgorICovCisjZGVmaW5lIFJXX0xPQ0tfQklBUyAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgUldfTE9DS19CSUFTX1NUUiAiMHgwMTAwMDAwMCIKKworI2RlZmluZSBfX2Rvd25fb3Bfd3JpdGUocHRyLGZhaWwpCQlcCisJKHsJCQkJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQlcCisJIkAgZG93bl9vcF93cml0ZVxuIgkJCVwKKyIJbXJzCWlwLCBjcHNyXG4iCQkJXAorIglvcnIJbHIsIGlwLCAjMTI4XG4iCQkJXAorIgltc3IJY3Bzcl9jLCBsclxuIgkJCVwKKyIJbGRyCWxyLCBbJTBdXG4iCQkJXAorIglzdWJzCWxyLCBsciwgJTFcbiIJCQlcCisiCXN0cglsciwgWyUwXVxuIgkJCVwKKyIJbXNyCWNwc3JfYywgaXBcbiIJCQlcCisiCW1vdm5lCWlwLCAlMFxuIgkJCVwKKyIJYmxuZQkiICNmYWlsCQkJCVwKKwk6CQkJCQlcCisJOiAiciIgKHB0ciksICJJIiAoUldfTE9DS19CSUFTKQkJXAorCTogImlwIiwgImxyIiwgImNjIiwgIm1lbW9yeSIpOwkJXAorCX0pCisKKyNkZWZpbmUgX191cF9vcF93cml0ZShwdHIsd2FrZSkJCQlcCisJKHsJCQkJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQlcCisJIkAgdXBfb3BfcmVhZFxuIgkJCVwKKyIJbXJzCWlwLCBjcHNyXG4iCQkJXAorIglvcnIJbHIsIGlwLCAjMTI4XG4iCQkJXAorIgltc3IJY3Bzcl9jLCBsclxuIgkJCVwKKyIJbGRyCWxyLCBbJTBdXG4iCQkJXAorIglhZGRzCWxyLCBsciwgJTFcbiIJCQlcCisiCXN0cglsciwgWyUwXVxuIgkJCVwKKyIJbXNyCWNwc3JfYywgaXBcbiIJCQlcCisiCW1vdmNzCWlwLCAlMFxuIgkJCVwKKyIJYmxjcwkiICN3YWtlCQkJCVwKKwk6CQkJCQlcCisJOiAiciIgKHB0ciksICJJIiAoUldfTE9DS19CSUFTKQkJXAorCTogImlwIiwgImxyIiwgImNjIiwgIm1lbW9yeSIpOwkJXAorCX0pCisKKyNkZWZpbmUgX19kb3duX29wX3JlYWQocHRyLGZhaWwpCQlcCisJX19kb3duX29wKHB0ciwgZmFpbCkKKworI2RlZmluZSBfX3VwX29wX3JlYWQocHRyLHdha2UpCQkJXAorCSh7CQkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJXAorCSJAIHVwX29wX3JlYWRcbiIJCQlcCisiCW1ycwlpcCwgY3BzclxuIgkJCVwKKyIJb3JyCWxyLCBpcCwgIzEyOFxuIgkJCVwKKyIJbXNyCWNwc3JfYywgbHJcbiIJCQlcCisiCWxkcglsciwgWyUwXVxuIgkJCVwKKyIJYWRkcwlsciwgbHIsICUxXG4iCQkJXAorIglzdHIJbHIsIFslMF1cbiIJCQlcCisiCW1zcgljcHNyX2MsIGlwXG4iCQkJXAorIgltb3ZlcQlpcCwgJTBcbiIJCQlcCisiCWJsZXEJIiAjd2FrZQkJCQlcCisJOgkJCQkJXAorCTogInIiIChwdHIpLCAiSSIgKDEpCQkJXAorCTogImlwIiwgImxyIiwgImNjIiwgIm1lbW9yeSIpOwkJXAorCX0pCisKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9tYWNoL2FyY2guaCBiL2luY2x1ZGUvYXNtLWFybS9tYWNoL2FyY2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTMyZTkyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL21hY2gvYXJjaC5oCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL21hY2gvYXJjaC5oCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMCBSdXNzZWxsIEtpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK3N0cnVjdCB0YWc7CitzdHJ1Y3QgbWVtaW5mbzsKK3N0cnVjdCBzeXNfdGltZXI7CisKK3N0cnVjdCBtYWNoaW5lX2Rlc2MgeworCS8qCisJICogTm90ZSEgVGhlIGZpcnN0IGZpdmUgZWxlbWVudHMgYXJlIHVzZWQKKwkgKiBieSBhc3NlbWJsZXIgY29kZSBpbiBoZWFkLWFybXYuUworCSAqLworCXVuc2lnbmVkIGludAkJbnI7CQkvKiBhcmNoaXRlY3R1cmUgbnVtYmVyCSovCisJdW5zaWduZWQgaW50CQlwaHlzX3JhbTsJLyogc3RhcnQgb2YgcGh5c2ljYWwgcmFtICovCisJdW5zaWduZWQgaW50CQlwaHlzX2lvOwkvKiBzdGFydCBvZiBwaHlzaWNhbCBpbwkqLworCXVuc2lnbmVkIGludAkJaW9fcGdfb2Zmc3Q7CS8qIGJ5dGUgb2Zmc2V0IGZvciBpbyAKKwkJCQkJCSAqIHBhZ2UgdGFiZSBlbnRyeQkqLworCisJY29uc3QgY2hhcgkJKm5hbWU7CQkvKiBhcmNoaXRlY3R1cmUgbmFtZQkqLworCXVuc2lnbmVkIGludAkJcGFyYW1fb2Zmc2V0OwkvKiBwYXJhbWV0ZXIgcGFnZQkqLworCisJdW5zaWduZWQgaW50CQl2aWRlb19zdGFydDsJLyogc3RhcnQgb2YgdmlkZW8gUkFNCSovCisJdW5zaWduZWQgaW50CQl2aWRlb19lbmQ7CS8qIGVuZCBvZiB2aWRlbyBSQU0JKi8KKworCXVuc2lnbmVkIGludAkJcmVzZXJ2ZV9scDAgOjE7CS8qIG5ldmVyIGhhcyBscDAJKi8KKwl1bnNpZ25lZCBpbnQJCXJlc2VydmVfbHAxIDoxOwkvKiBuZXZlciBoYXMgbHAxCSovCisJdW5zaWduZWQgaW50CQlyZXNlcnZlX2xwMiA6MTsJLyogbmV2ZXIgaGFzIGxwMgkqLworCXVuc2lnbmVkIGludAkJc29mdF9yZWJvb3QgOjE7CS8qIHNvZnQgcmVib290CQkqLworCXZvaWQJCQkoKmZpeHVwKShzdHJ1Y3QgbWFjaGluZV9kZXNjICosCisJCQkJCSBzdHJ1Y3QgdGFnICosIGNoYXIgKiosCisJCQkJCSBzdHJ1Y3QgbWVtaW5mbyAqKTsKKwl2b2lkCQkJKCptYXBfaW8pKHZvaWQpOy8qIElPIG1hcHBpbmcgZnVuY3Rpb24JKi8KKwl2b2lkCQkJKCppbml0X2lycSkodm9pZCk7CisJc3RydWN0IHN5c190aW1lcgkqdGltZXI7CQkvKiBzeXN0ZW0gdGljayB0aW1lcgkqLworCXZvaWQJCQkoKmluaXRfbWFjaGluZSkodm9pZCk7Cit9OworCisvKgorICogU2V0IG9mIG1hY3JvcyB0byBkZWZpbmUgYXJjaGl0ZWN0dXJlIGZlYXR1cmVzLiAgVGhpcyBpcyBidWlsdCBpbnRvCisgKiBhIHRhYmxlIGJ5IHRoZSBsaW5rZXIuCisgKi8KKyNkZWZpbmUgTUFDSElORV9TVEFSVChfdHlwZSxfbmFtZSkJCVwKK2NvbnN0IHN0cnVjdCBtYWNoaW5lX2Rlc2MgX19tYWNoX2Rlc2NfIyNfdHlwZQlcCisgX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIi5hcmNoLmluZm8iKSkpID0gewlcCisJLm5yCQk9IE1BQ0hfVFlQRV8jI190eXBlLAlcCisJLm5hbWUJCT0gX25hbWUsCisKKyNkZWZpbmUgTUFJTlRBSU5FUihuKQorCisjZGVmaW5lIEJPT1RfTUVNKF9wcmFtLF9waW8sX3ZpbykJCVwKKwkucGh5c19yYW0JPSBfcHJhbSwJCVwKKwkucGh5c19pbwk9IF9waW8sCQkJXAorCS5pb19wZ19vZmZzdAk9ICgoX3Zpbyk+PjE4KSYweGZmZmMsCisKKyNkZWZpbmUgQk9PVF9QQVJBTVMoX3BhcmFtcykJCQlcCisJLnBhcmFtX29mZnNldAk9IF9wYXJhbXMsCisKKyNkZWZpbmUgVklERU8oX3N0YXJ0LF9lbmQpCQkJXAorCS52aWRlb19zdGFydAk9IF9zdGFydCwJCVwKKwkudmlkZW9fZW5kCT0gX2VuZCwKKworI2RlZmluZSBESVNBQkxFX1BBUlBPUlQoX24pCQkJXAorCS5yZXNlcnZlX2xwIyNfbgk9IDEsCisKKyNkZWZpbmUgU09GVF9SRUJPT1QJCQkJXAorCS5zb2Z0X3JlYm9vdAk9IDEsCisKKyNkZWZpbmUgRklYVVAoX2Z1bmMpCQkJCVwKKwkuZml4dXAJCT0gX2Z1bmMsCisKKyNkZWZpbmUgTUFQSU8oX2Z1bmMpCQkJCVwKKwkubWFwX2lvCQk9IF9mdW5jLAorCisjZGVmaW5lIElOSVRJUlEoX2Z1bmMpCQkJCVwKKwkuaW5pdF9pcnEJPSBfZnVuYywKKworI2RlZmluZSBJTklUX01BQ0hJTkUoX2Z1bmMpCQkJXAorCS5pbml0X21hY2hpbmUJPSBfZnVuYywKKworI2RlZmluZSBNQUNISU5FX0VORAkJCQlcCit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9tYWNoL2RtYS5oIGIvaW5jbHVkZS9hc20tYXJtL21hY2gvZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFiZjcxNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9tYWNoL2RtYS5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL21hY2gvZG1hLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk4LTIwMDAgUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgVGhpcyBoZWFkZXIgZmlsZSBkZXNjcmliZXMgdGhlIGludGVyZmFjZSBiZXR3ZWVuIHRoZSBnZW5lcmljIERNQSBoYW5kbGVyCisgKiAgKGRtYS5jKSBhbmQgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBETUEgYmFja2VuZHMgKGRtYS0qLmMpCisgKi8KKworc3RydWN0IGRtYV9zdHJ1Y3Q7Cit0eXBlZGVmIHN0cnVjdCBkbWFfc3RydWN0IGRtYV90OworCitzdHJ1Y3QgZG1hX29wcyB7CisJaW50CSgqcmVxdWVzdCkoZG1hY2hfdCwgZG1hX3QgKik7CQkvKiBvcHRpb25hbCAqLworCXZvaWQJKCpmcmVlKShkbWFjaF90LCBkbWFfdCAqKTsJCS8qIG9wdGlvbmFsICovCisJdm9pZAkoKmVuYWJsZSkoZG1hY2hfdCwgZG1hX3QgKik7CQkvKiBtYW5kYXRvcnkgKi8KKwl2b2lkIAkoKmRpc2FibGUpKGRtYWNoX3QsIGRtYV90ICopOwkJLyogbWFuZGF0b3J5ICovCisJaW50CSgqcmVzaWR1ZSkoZG1hY2hfdCwgZG1hX3QgKik7CQkvKiBvcHRpb25hbCAqLworCWludAkoKnNldHNwZWVkKShkbWFjaF90LCBkbWFfdCAqLCBpbnQpOwkvKiBvcHRpb25hbCAqLworCWNoYXIJKnR5cGU7Cit9OworCitzdHJ1Y3QgZG1hX3N0cnVjdCB7CisJc3RydWN0IHNjYXR0ZXJsaXN0IGJ1ZjsJCS8qIHNpbmdsZSBETUEJCQkqLworCWludAkJc2djb3VudDsJLyogbnVtYmVyIG9mIERNQSBTRwkJKi8KKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwkJLyogRE1BIFNjYXR0ZXItR2F0aGVyIExpc3QJKi8KKworCXVuc2lnbmVkIGludAlhY3RpdmU6MTsJLyogVHJhbnNmZXIgYWN0aXZlCQkqLworCXVuc2lnbmVkIGludAlpbnZhbGlkOjE7CS8qIEFkZHJlc3MvQ291bnQgY2hhbmdlZAkqLworCXVuc2lnbmVkIGludAl1c2luZ19zZzoxOwkvKiB1c2luZyBzY2F0dGVyIGxpc3Q/CQkqLworCWRtYW1vZGVfdAlkbWFfbW9kZTsJLyogRE1BIG1vZGUJCQkqLworCWludAkJc3BlZWQ7CQkvKiBETUEgc3BlZWQJCQkqLworCisJdW5zaWduZWQgaW50CWxvY2s7CQkvKiBEZXZpY2UgaXMgYWxsb2NhdGVkCQkqLworCWNvbnN0IGNoYXIJKmRldmljZV9pZDsJLyogRGV2aWNlIG5hbWUJCQkqLworCisJdW5zaWduZWQgaW50CWRtYV9iYXNlOwkvKiBDb250cm9sbGVyIGJhc2UgYWRkcmVzcwkqLworCWludAkJZG1hX2lycTsJLyogQ29udHJvbGxlciBJUlEJCSovCisJc3RydWN0IHNjYXR0ZXJsaXN0IGN1cl9zZzsJLyogQ3VycmVudCBjb250cm9sbGVyIGJ1ZmZlcgkqLworCXVuc2lnbmVkIGludAlzdGF0ZTsKKworCXN0cnVjdCBkbWFfb3BzCSpkX29wczsKK307CisKKy8qIFByb3RvdHlwZTogdm9pZCBhcmNoX2RtYV9pbml0KGRtYSkKKyAqIFB1cnBvc2UgIDogSW5pdGlhbGlzZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgRE1BCisgKiBQYXJhbXMgICA6IGRtYSAtIHBvaW50ZXIgdG8gYXJyYXkgb2YgRE1BIHN0cnVjdHVyZXMKKyAqLworZXh0ZXJuIHZvaWQgYXJjaF9kbWFfaW5pdChkbWFfdCAqZG1hKTsKKworZXh0ZXJuIHZvaWQgaXNhX2luaXRfZG1hKGRtYV90ICpkbWEpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL21hY2gvZmxhc2guaCBiL2luY2x1ZGUvYXNtLWFybS9tYWNoL2ZsYXNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTkyODg3ZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9tYWNoL2ZsYXNoLmgKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vbWFjaC9mbGFzaC5oCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMyBSdXNzZWxsIEtpbmcsIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2lmbmRlZiBBU01BUk1fTUFDSF9GTEFTSF9ICisjZGVmaW5lIEFTTUFSTV9NQUNIX0ZMQVNIX0gKKworc3RydWN0IG10ZF9wYXJ0aXRpb247CisKKy8qCisgKiBtYXBfbmFtZToJdGhlIG1hcCBwcm9iZSBmdW5jdGlvbiBuYW1lCisgKiB3aWR0aDoJd2lkdGggb2YgbWFwcGVkIGRldmljZQorICogaW5pdDoJbWV0aG9kIGNhbGxlZCBhdCBkcml2ZXIvZGV2aWNlIGluaXRpYWxpc2F0aW9uCisgKiBleGl0OgltZXRob2QgY2FsbGVkIGF0IGRyaXZlci9kZXZpY2UgcmVtb3ZhbAorICogc2V0X3ZwcDoJbWV0aG9kIGNhbGxlZCB0byBlbmFibGUgb3IgZGlzYWJsZSBWUFAKKyAqIHBhcnRzOglvcHRpb25hbCBhcnJheSBvZiBtdGRfcGFydGl0aW9ucyBmb3Igc3RhdGljIHBhcnRpdGlvbmluZworICogbnJfcGFydHM6CW51bWJlciBvZiBtdGRfcGFydGl0aW9ucyBmb3Igc3RhdGljIHBhcnRpdG9uaW5nCisgKi8KK3N0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhIHsKKwljb25zdCBjaGFyCSptYXBfbmFtZTsKKwl1bnNpZ25lZCBpbnQJd2lkdGg7CisJaW50CQkoKmluaXQpKHZvaWQpOworCXZvaWQJCSgqZXhpdCkodm9pZCk7CisJdm9pZAkJKCpzZXRfdnBwKShpbnQgb24pOworCXN0cnVjdCBtdGRfcGFydGl0aW9uICpwYXJ0czsKKwl1bnNpZ25lZCBpbnQJbnJfcGFydHM7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9tYWNoL2lyZGEuaCBiL2luY2x1ZGUvYXNtLWFybS9tYWNoL2lyZGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODk4NGQ5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL21hY2gvaXJkYS5oCkBAIC0wLDAgKzEsMjAgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL21hY2gvaXJkYS5oCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNCBSdXNzZWxsIEtpbmcuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2lmbmRlZiBfX0FTTV9BUk1fTUFDSF9JUkRBX0gKKyNkZWZpbmUgX19BU01fQVJNX01BQ0hfSVJEQV9ICisKK3N0cnVjdCBpcmRhX3BsYXRmb3JtX2RhdGEgeworCWludCAoKnN0YXJ0dXApKHN0cnVjdCBkZXZpY2UgKik7CisJdm9pZCAoKnNodXRkb3duKShzdHJ1Y3QgZGV2aWNlICopOworCWludCAoKnNldF9wb3dlcikoc3RydWN0IGRldmljZSAqLCB1bnNpZ25lZCBpbnQgc3RhdGUpOworCXZvaWQgKCpzZXRfc3BlZWQpKHN0cnVjdCBkZXZpY2UgKiwgdW5zaWduZWQgaW50IHNwZWVkKTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL21hY2gvaXJxLmggYi9pbmNsdWRlL2FzbS1hcm0vbWFjaC9pcnEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDNhMzUzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL21hY2gvaXJxLmgKQEAgLTAsMCArMSwxMjcgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL21hY2gvaXJxLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDAgUnVzc2VsbCBLaW5nLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpZm5kZWYgX19BU01fQVJNX01BQ0hfSVJRX0gKKyNkZWZpbmUgX19BU01fQVJNX01BQ0hfSVJRX0gKKworc3RydWN0IGlycWRlc2M7CitzdHJ1Y3QgcHRfcmVnczsKK3N0cnVjdCBzZXFfZmlsZTsKKwordHlwZWRlZiB2b2lkICgqaXJxX2hhbmRsZXJfdCkodW5zaWduZWQgaW50LCBzdHJ1Y3QgaXJxZGVzYyAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKK3R5cGVkZWYgdm9pZCAoKmlycV9jb250cm9sX3QpKHVuc2lnbmVkIGludCk7CisKK3N0cnVjdCBpcnFjaGlwIHsKKwkvKgorCSAqIEFja25vd2xlZGdlIHRoZSBJUlEuCisJICogSWYgdGhpcyBpcyBhIGxldmVsLWJhc2VkIElSUSwgdGhlbiBpdCBpcyBleHBlY3RlZCB0byBtYXNrIHRoZSBJUlEKKwkgKiBhcyB3ZWxsLgorCSAqLworCXZvaWQgKCphY2spKHVuc2lnbmVkIGludCk7CisJLyoKKwkgKiBNYXNrIHRoZSBJUlEgaW4gaGFyZHdhcmUuCisJICovCisJdm9pZCAoKm1hc2spKHVuc2lnbmVkIGludCk7CisJLyoKKwkgKiBVbm1hc2sgdGhlIElSUSBpbiBoYXJkd2FyZS4KKwkgKi8KKwl2b2lkICgqdW5tYXNrKSh1bnNpZ25lZCBpbnQpOworCS8qCisJICogQXNrIHRoZSBoYXJkd2FyZSB0byByZS10cmlnZ2VyIHRoZSBJUlEuCisJICogTm90ZTogVGhpcyBtZXRob2QgX211c3RfIF9ub3RfIGNhbGwgdGhlIGludGVycnVwdCBoYW5kbGVyLgorCSAqIElmIHlvdSBhcmUgdW5hYmxlIHRvIHJldHJpZ2dlciB0aGUgaW50ZXJydXB0LCBkbyBub3QKKwkgKiBwcm92aWRlIGEgZnVuY3Rpb24sIG9yIGlmIHlvdSBkbywgcmV0dXJuIG5vbi16ZXJvLgorCSAqLworCWludCAoKnJldHJpZ2dlcikodW5zaWduZWQgaW50KTsKKwkvKgorCSAqIFNldCB0aGUgdHlwZSBvZiB0aGUgSVJRLgorCSAqLworCWludCAoKnR5cGUpKHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKKwkvKgorCSAqIFNldCB3YWtldXAtZW5hYmxlIG9uIHRoZSBzZWxlY3RlZCBJUlEKKwkgKi8KKwlpbnQgKCp3YWtlKSh1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7CisKKyNpZmRlZiBDT05GSUdfU01QCisJLyoKKwkgKiBSb3V0ZSBhbiBpbnRlcnJ1cHQgdG8gYSBDUFUKKwkgKi8KKwl2b2lkICgqc2V0X2NwdSkoc3RydWN0IGlycWRlc2MgKmRlc2MsIHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCBjcHUpOworI2VuZGlmCit9OworCitzdHJ1Y3QgaXJxZGVzYyB7CisJaXJxX2hhbmRsZXJfdAloYW5kbGU7CisJc3RydWN0IGlycWNoaXAJKmNoaXA7CisJc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uOworCXN0cnVjdCBsaXN0X2hlYWQgcGVuZDsKKwl2b2lkCQkqY2hpcGRhdGE7CisJdm9pZAkJKmRhdGE7CisJdW5zaWduZWQgaW50CWRpc2FibGVfZGVwdGg7CisKKwl1bnNpZ25lZCBpbnQJdHJpZ2dlcmVkOiAxOwkJLyogSVJRIGhhcyBvY2N1cnJlZAkgICAgICAqLworCXVuc2lnbmVkIGludAlydW5uaW5nICA6IDE7CQkvKiBJUlEgaXMgcnVubmluZyAgICAgICAgICAgICAqLworCXVuc2lnbmVkIGludAlwZW5kaW5nICA6IDE7CQkvKiBJUlEgaXMgcGVuZGluZwkgICAgICAqLworCXVuc2lnbmVkIGludAlwcm9iaW5nICA6IDE7CQkvKiBJUlEgaW4gdXNlIGZvciBhIHByb2JlICAgICAqLworCXVuc2lnbmVkIGludAlwcm9iZV9vayA6IDE7CQkvKiBJUlEgY2FuIGJlIHVzZWQgZm9yIHByb2JlICAqLworCXVuc2lnbmVkIGludAl2YWxpZCAgICA6IDE7CQkvKiBJUlEgY2xhaW1hYmxlCSAgICAgICovCisJdW5zaWduZWQgaW50CW5vYXV0b2VuYWJsZSA6IDE7CS8qIGRvbid0IGF1dG9tYXRpY2FsbHkgZW5hYmxlIElSUSAqLworCXVuc2lnbmVkIGludAl1bnVzZWQgICA6MjU7CisKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NkaXI7CisKKyNpZmRlZiBDT05GSUdfU01QCisJY3B1bWFza190CWFmZmluaXR5OworCXVuc2lnbmVkIGludAljcHU7CisjZW5kaWYKKworCS8qCisJICogSVJRIGxvY2sgZGV0ZWN0aW9uCisJICovCisJdW5zaWduZWQgaW50CWxja19jbnQ7CisJdW5zaWduZWQgaW50CWxja19wYzsKKwl1bnNpZ25lZCBpbnQJbGNrX2ppZjsKK307CisKK2V4dGVybiBzdHJ1Y3QgaXJxZGVzYyBpcnFfZGVzY1tdOworCisvKgorICogVGhpcyBpcyBpbnRlcm5hbC4gIERvIG5vdCB1c2UgaXQuCisgKi8KK2V4dGVybiB2b2lkICgqaW5pdF9hcmNoX2lycSkodm9pZCk7CitleHRlcm4gdm9pZCBpbml0X0ZJUSh2b2lkKTsKK2V4dGVybiBpbnQgc2hvd19maXFfbGlzdChzdHJ1Y3Qgc2VxX2ZpbGUgKiwgdm9pZCAqKTsKK3ZvaWQgX19zZXRfaXJxX2hhbmRsZXIodW5zaWduZWQgaW50IGlycSwgaXJxX2hhbmRsZXJfdCwgaW50KTsKKworLyoKKyAqIEV4dGVybmFsIHN0dWZmLgorICovCisjZGVmaW5lIHNldF9pcnFfaGFuZGxlcihpcnEsaGFuZGxlcikJCV9fc2V0X2lycV9oYW5kbGVyKGlycSxoYW5kbGVyLDApCisjZGVmaW5lIHNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKGlycSxoYW5kbGVyKQlfX3NldF9pcnFfaGFuZGxlcihpcnEsaGFuZGxlciwxKQorI2RlZmluZSBzZXRfaXJxX2RhdGEoaXJxLGQpCQkJZG8geyBpcnFfZGVzY1tpcnFdLmRhdGEgPSBkOyB9IHdoaWxlICgwKQorI2RlZmluZSBzZXRfaXJxX2NoaXBkYXRhKGlycSxkKQkJCWRvIHsgaXJxX2Rlc2NbaXJxXS5jaGlwZGF0YSA9IGQ7IH0gd2hpbGUgKDApCisjZGVmaW5lIGdldF9pcnFfY2hpcGRhdGEoaXJxKQkJCShpcnFfZGVzY1tpcnFdLmNoaXBkYXRhKQorCit2b2lkIHNldF9pcnFfY2hpcCh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxY2hpcCAqKTsKK3ZvaWQgc2V0X2lycV9mbGFncyh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOworCisjZGVmaW5lIElSUUZfVkFMSUQJKDEgPDwgMCkKKyNkZWZpbmUgSVJRRl9QUk9CRQkoMSA8PCAxKQorI2RlZmluZSBJUlFGX05PQVVUT0VOCSgxIDw8IDIpCisKKy8qCisgKiBCdWlsdC1pbiBJUlEgaGFuZGxlcnMuCisgKi8KK3ZvaWQgZG9fbGV2ZWxfSVJRKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFkZXNjICpkZXNjLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Cit2b2lkIGRvX2VkZ2VfSVJRKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFkZXNjICpkZXNjLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Cit2b2lkIGRvX3NpbXBsZV9JUlEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycWRlc2MgKmRlc2MsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK3ZvaWQgZG9fYmFkX0lSUSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxZGVzYyAqZGVzYywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwordm9pZCBkdW1teV9tYXNrX3VubWFza19pcnEodW5zaWduZWQgaW50IGlycSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL21hY2gvbWFwLmggYi9pbmNsdWRlL2FzbS1hcm0vbWFjaC9tYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWM0N2NmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL21hY2gvbWFwLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vbWFwLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgUGFnZSB0YWJsZSBtYXBwaW5nIGNvbnN0cnVjdHMgYW5kIGZ1bmN0aW9uIHByb3RvdHlwZXMKKyAqLworc3RydWN0IG1hcF9kZXNjIHsKKwl1bnNpZ25lZCBsb25nIHZpcnR1YWw7CisJdW5zaWduZWQgbG9uZyBwaHlzaWNhbDsKKwl1bnNpZ25lZCBsb25nIGxlbmd0aDsKKwl1bnNpZ25lZCBpbnQgdHlwZTsKK307CisKK3N0cnVjdCBtZW1pbmZvOworCisjZGVmaW5lIE1UX0RFVklDRQkJMAorI2RlZmluZSBNVF9DQUNIRUNMRUFOCQkxCisjZGVmaW5lIE1UX01JTklDTEVBTgkJMgorI2RlZmluZSBNVF9MT1dfVkVDVE9SUwkJMworI2RlZmluZSBNVF9ISUdIX1ZFQ1RPUlMJCTQKKyNkZWZpbmUgTVRfTUVNT1JZCQk1CisjZGVmaW5lIE1UX1JPTQkJCTYKKyNkZWZpbmUgTVRfSVhQMjAwMF9ERVZJQ0UJNworCitleHRlcm4gdm9pZCBjcmVhdGVfbWVtbWFwX2hvbGVzKHN0cnVjdCBtZW1pbmZvICopOworZXh0ZXJuIHZvaWQgbWVtdGFibGVfaW5pdChzdHJ1Y3QgbWVtaW5mbyAqKTsKK2V4dGVybiB2b2lkIGlvdGFibGVfaW5pdChzdHJ1Y3QgbWFwX2Rlc2MgKiwgaW50KTsKK2V4dGVybiB2b2lkIHNldHVwX2lvX2Rlc2Modm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vbWFjaC9tbWMuaCBiL2luY2x1ZGUvYXNtLWFybS9tYWNoL21tYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMzU1NWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vbWFjaC9tbWMuaApAQCAtMCwwICsxLDE1IEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9tYWNoL21tYy5oCisgKi8KKyNpZm5kZWYgQVNNQVJNX01BQ0hfTU1DX0gKKyNkZWZpbmUgQVNNQVJNX01BQ0hfTU1DX0gKKworI2luY2x1ZGUgPGxpbnV4L21tYy9wcm90b2NvbC5oPgorCitzdHJ1Y3QgbW1jX3BsYXRmb3JtX2RhdGEgeworCXVuc2lnbmVkIGludCBvY3JfbWFzazsJCQkvKiBhdmFpbGFibGUgdm9sdGFnZXMgKi8KKwl1MzIgKCp0cmFuc2xhdGVfdmRkKShzdHJ1Y3QgZGV2aWNlICosIHVuc2lnbmVkIGludCk7CisJdW5zaWduZWQgaW50ICgqc3RhdHVzKShzdHJ1Y3QgZGV2aWNlICopOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vbWFjaC9wY2kuaCBiL2luY2x1ZGUvYXNtLWFybS9tYWNoL3BjaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1ZDU0MGUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vbWFjaC9wY2kuaApAQCAtMCwwICsxLDc1IEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9tYWNoL3BjaS5oCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMCBSdXNzZWxsIEtpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKK3N0cnVjdCBwY2lfc3lzX2RhdGE7CitzdHJ1Y3QgcGNpX2J1czsKKworc3RydWN0IGh3X3BjaSB7CisJc3RydWN0IGxpc3RfaGVhZCBidXNlczsKKwlpbnQJCW5yX2NvbnRyb2xsZXJzOworCWludAkJKCpzZXR1cCkoaW50IG5yLCBzdHJ1Y3QgcGNpX3N5c19kYXRhICopOworCXN0cnVjdCBwY2lfYnVzICooKnNjYW4pKGludCBuciwgc3RydWN0IHBjaV9zeXNfZGF0YSAqKTsKKwl2b2lkCQkoKnByZWluaXQpKHZvaWQpOworCXZvaWQJCSgqcG9zdGluaXQpKHZvaWQpOworCXU4CQkoKnN3aXp6bGUpKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4ICpwaW4pOworCWludAkJKCptYXBfaXJxKShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pOworfTsKKworLyoKKyAqIFBlci1jb250cm9sbGVyIHN0cnVjdHVyZQorICovCitzdHJ1Y3QgcGNpX3N5c19kYXRhIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CisJaW50CQlidXNucjsJCS8qIHByaW1hcnkgYnVzIG51bWJlcgkJCSovCisJdW5zaWduZWQgbG9uZwltZW1fb2Zmc2V0OwkvKiBidXMtPmNwdSBtZW1vcnkgbWFwcGluZyBvZmZzZXQJKi8KKwl1bnNpZ25lZCBsb25nCWlvX29mZnNldDsJLyogYnVzLT5jcHUgSU8gbWFwcGluZyBvZmZzZXQJCSovCisJc3RydWN0IHBjaV9idXMJKmJ1czsJCS8qIFBDSSBidXMJCQkJKi8KKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlc291cmNlWzNdOwkvKiBQcmltYXJ5IFBDSSBidXMgcmVzb3VyY2VzCQkqLworCQkJCQkvKiBCcmlkZ2Ugc3dpenpsaW5nCQkJKi8KKwl1OAkJKCpzd2l6emxlKShzdHJ1Y3QgcGNpX2RldiAqLCB1OCAqKTsKKwkJCQkJLyogSVJRIG1hcHBpbmcJCQkJKi8KKwlpbnQJCSgqbWFwX2lycSkoc3RydWN0IHBjaV9kZXYgKiwgdTgsIHU4KTsKKwlzdHJ1Y3QgaHdfcGNpCSpodzsKK307CisKKy8qCisgKiBUaGlzIGlzIHRoZSBzdGFuZGFyZCBQQ0ktUENJIGJyaWRnZSBzd2l6emxpbmcgYWxnb3JpdGhtLgorICovCit1OCBwY2lfc3RkX3N3aXp6bGUoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggKnBpbnApOworCisvKgorICogQ2FsbCB0aGlzIHdpdGggeW91ciBod19wY2kgc3RydWN0IHRvIGluaXRpYWxpc2UgdGhlIFBDSSBzeXN0ZW0uCisgKi8KK3ZvaWQgcGNpX2NvbW1vbl9pbml0KHN0cnVjdCBod19wY2kgKik7CisKKy8qCisgKiBQQ0kgY29udHJvbGxlcnMKKyAqLworZXh0ZXJuIGludCBpb3AzMjFfc2V0dXAoaW50IG5yLCBzdHJ1Y3QgcGNpX3N5c19kYXRhICopOworZXh0ZXJuIHN0cnVjdCBwY2lfYnVzICppb3AzMjFfc2Nhbl9idXMoaW50IG5yLCBzdHJ1Y3QgcGNpX3N5c19kYXRhICopOworZXh0ZXJuIHZvaWQgaW9wMzIxX2luaXQodm9pZCk7CisKK2V4dGVybiBpbnQgaW9wMzMxX3NldHVwKGludCBuciwgc3RydWN0IHBjaV9zeXNfZGF0YSAqKTsKK2V4dGVybiBzdHJ1Y3QgcGNpX2J1cyAqaW9wMzMxX3NjYW5fYnVzKGludCBuciwgc3RydWN0IHBjaV9zeXNfZGF0YSAqKTsKK2V4dGVybiB2b2lkIGlvcDMzMV9pbml0KHZvaWQpOworCitleHRlcm4gaW50IGRjMjEyODVfc2V0dXAoaW50IG5yLCBzdHJ1Y3QgcGNpX3N5c19kYXRhICopOworZXh0ZXJuIHN0cnVjdCBwY2lfYnVzICpkYzIxMjg1X3NjYW5fYnVzKGludCBuciwgc3RydWN0IHBjaV9zeXNfZGF0YSAqKTsKK2V4dGVybiB2b2lkIGRjMjEyODVfcHJlaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIGRjMjEyODVfcG9zdGluaXQodm9pZCk7CisKK2V4dGVybiBpbnQgdmlhODJjNTA1X3NldHVwKGludCBuciwgc3RydWN0IHBjaV9zeXNfZGF0YSAqKTsKK2V4dGVybiBzdHJ1Y3QgcGNpX2J1cyAqdmlhODJjNTA1X3NjYW5fYnVzKGludCBuciwgc3RydWN0IHBjaV9zeXNfZGF0YSAqKTsKK2V4dGVybiB2b2lkIHZpYTgyYzUwNV9pbml0KHZvaWQgKnN5c2RhdGEpOworCitleHRlcm4gaW50IHBjaV92M19zZXR1cChpbnQgbnIsIHN0cnVjdCBwY2lfc3lzX2RhdGEgKik7CitleHRlcm4gc3RydWN0IHBjaV9idXMgKnBjaV92M19zY2FuX2J1cyhpbnQgbnIsIHN0cnVjdCBwY2lfc3lzX2RhdGEgKik7CitleHRlcm4gdm9pZCBwY2lfdjNfcHJlaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIHBjaV92M19wb3N0aW5pdCh2b2lkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9tYWNoL3NlcmlhbF9zYTExMDAuaCBiL2luY2x1ZGUvYXNtLWFybS9tYWNoL3NlcmlhbF9zYTExMDAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTYyMDE4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL21hY2gvc2VyaWFsX3NhMTEwMC5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL21hY2gvc2VyaWFsX3NhMTEwMC5oCisgKgorICogIEF1dGhvcjogTmljb2xhcyBQaXRyZQorICoKKyAqIE1vdmVkIHRvIGluY2x1ZGUvYXNtLWFybS9tYWNoIGFuZCBjaGFuZ2VkIGxvdHMsIFJ1c3NlbGwgS2luZworICoKKyAqIExvdyBsZXZlbCBtYWNoaW5lIGRlcGVuZGVudCBVQVJUIGZ1bmN0aW9ucy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCitzdHJ1Y3QgdWFydF9wb3J0Oworc3RydWN0IHVhcnRfaW5mbzsKKworLyoKKyAqIFRoaXMgaXMgYSB0ZW1wb3Jhcnkgc3RydWN0dXJlIGZvciByZWdpc3RlcmluZyB0aGVzZQorICogZnVuY3Rpb25zOyBpdCBpcyBpbnRlbmRlZCB0byBiZSBkaXNjYXJkZWQgYWZ0ZXIgYm9vdC4KKyAqLworc3RydWN0IHNhMTEwMF9wb3J0X2ZucyB7CisJdm9pZAkoKnNldF9tY3RybCkoc3RydWN0IHVhcnRfcG9ydCAqLCB1X2ludCk7CisJdV9pbnQJKCpnZXRfbWN0cmwpKHN0cnVjdCB1YXJ0X3BvcnQgKik7CisJdm9pZAkoKnBtKShzdHJ1Y3QgdWFydF9wb3J0ICosIHVfaW50LCB1X2ludCk7CisJaW50CSgqc2V0X3dha2UpKHN0cnVjdCB1YXJ0X3BvcnQgKiwgdV9pbnQpOworfTsKKworI2lmZGVmIENPTkZJR19TRVJJQUxfU0ExMTAwCit2b2lkIHNhMTEwMF9yZWdpc3Rlcl91YXJ0X2ZucyhzdHJ1Y3Qgc2ExMTAwX3BvcnRfZm5zICpmbnMpOwordm9pZCBzYTExMDBfcmVnaXN0ZXJfdWFydChpbnQgaWR4LCBpbnQgcG9ydCk7CisjZWxzZQorI2RlZmluZSBzYTExMDBfcmVnaXN0ZXJfdWFydF9mbnMoZm5zKSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHNhMTEwMF9yZWdpc3Rlcl91YXJ0KGlkeCxwb3J0KSBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9tYWNoL3NoYXJwc2xfcGFyYW0uaCBiL2luY2x1ZGUvYXNtLWFybS9tYWNoL3NoYXJwc2xfcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTI0ZWNmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL21hY2gvc2hhcnBzbF9wYXJhbS5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBIYXJkd2FyZSBwYXJhbWV0ZXIgYXJlYSBzcGVjaWZpYyB0byBTaGFycCBTTCBzZXJpZXMgZGV2aWNlcworICoKKyAqIENvcHlyaWdodCAoYykgMjAwNSBSaWNoYXJkIFB1cmRpZQorICoKKyAqIEJhc2VkIG9uIFNoYXJwJ3MgMi40IGtlcm5lbCBwYXRjaGVzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworc3RydWN0IHNoYXJwc2xfcGFyYW1faW5mbyB7CisgIHVuc2lnbmVkIGludCBjb21hZGpfa2V5d29yZDsKKyAgdW5zaWduZWQgaW50IGNvbWFkajsKKworICB1bnNpZ25lZCBpbnQgdXVpZF9rZXl3b3JkOworICB1bnNpZ25lZCBjaGFyIHV1aWRbMTZdOworCisgIHVuc2lnbmVkIGludCB0b3VjaF9rZXl3b3JkOworICB1bnNpZ25lZCBpbnQgdG91Y2hfeHA7CisgIHVuc2lnbmVkIGludCB0b3VjaF95cDsKKyAgdW5zaWduZWQgaW50IHRvdWNoX3hkOworICB1bnNpZ25lZCBpbnQgdG91Y2hfeWQ7CisKKyAgdW5zaWduZWQgaW50IGFkYWRqX2tleXdvcmQ7CisgIHVuc2lnbmVkIGludCBhZGFkajsKKworICB1bnNpZ25lZCBpbnQgcGhhZF9rZXl3b3JkOworICB1bnNpZ25lZCBpbnQgcGhhZGFkajsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKworZXh0ZXJuIHN0cnVjdCBzaGFycHNsX3BhcmFtX2luZm8gc2hhcnBzbF9wYXJhbTsKK2V4dGVybiB2b2lkIHNoYXJwc2xfc2F2ZV9wYXJhbSh2b2lkKTsKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL21hY2gvdGltZS5oIGIvaW5jbHVkZS9hc20tYXJtL21hY2gvdGltZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjZjRmZDYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vbWFjaC90aW1lLmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9tYWNoL3RpbWUuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2lmbmRlZiBfX0FTTV9BUk1fTUFDSF9USU1FX0gKKyNkZWZpbmUgX19BU01fQVJNX01BQ0hfVElNRV9ICisKKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKworLyoKKyAqIFRoaXMgaXMgb3VyIGtlcm5lbCB0aW1lciBzdHJ1Y3R1cmUuCisgKgorICogLSBpbml0CisgKiAgIEluaXRpYWxpc2UgdGhlIGtlcm5lbHMgamlmZnkgdGltZXIgc291cmNlLCBjbGFpbSBpbnRlcnJ1cHQKKyAqICAgdXNpbmcgc2V0dXBfaXJxLiAgVGhpcyBpcyBjYWxsZWQgZWFybHkgb24gZHVyaW5nIGluaXRpYWxpc2F0aW9uCisgKiAgIHdoaWxlIGludGVycnVwdHMgYXJlIHN0aWxsIGRpc2FibGVkIG9uIHRoZSBsb2NhbCBDUFUuCisgKiAtIHN1c3BlbmQKKyAqICAgU3VzcGVuZCB0aGUga2VybmVsIGppZmZ5IHRpbWVyIHNvdXJjZSwgaWYgbmVjZXNzYXJ5LiAgVGhpcworICogICBpcyBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLCBhZnRlciBhbGwgbm9ybWFsIGRldmljZXMKKyAqICAgaGF2ZSBiZWVuIHN1c3BlbmRlZC4gIElmIG5vIGFjdGlvbiBpcyByZXF1aXJlZCwgc2V0IHRoaXMgdG8KKyAqICAgTlVMTC4KKyAqIC0gcmVzdW1lCisgKiAgIFJlc3VtZSB0aGUga2VybmVsIGppZmZ5IHRpbWVyIHNvdXJjZSwgaWYgbmVjZXNzYXJ5LiAgVGhpcworICogICBpcyBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkIGJlZm9yZSBhbnkgbm9ybWFsIGRldmljZXMKKyAqICAgYXJlIHJlc3VtZWQuICBJZiBubyBhY3Rpb24gaXMgcmVxdWlyZWQsIHNldCB0aGlzIHRvIE5VTEwuCisgKiAtIG9mZnNldAorICogICBSZXR1cm4gdGhlIHRpbWVyIG9mZnNldCBpbiBtaWNyb3NlY29uZHMgc2luY2UgdGhlIGxhc3QgdGltZXIKKyAqICAgaW50ZXJydXB0LiAgTm90ZTogdGhpcyBtdXN0IHRha2UgYWNjb3VudCBvZiBhbnkgdW5wcm9jZXNzZWQKKyAqICAgdGltZXIgaW50ZXJydXB0IHdoaWNoIG1heSBiZSBwZW5kaW5nLgorICovCitzdHJ1Y3Qgc3lzX3RpbWVyIHsKKwlzdHJ1Y3Qgc3lzX2RldmljZQlkZXY7CisJdm9pZAkJCSgqaW5pdCkodm9pZCk7CisJdm9pZAkJCSgqc3VzcGVuZCkodm9pZCk7CisJdm9pZAkJCSgqcmVzdW1lKSh2b2lkKTsKKwl1bnNpZ25lZCBsb25nCQkoKm9mZnNldCkodm9pZCk7Cit9OworCitleHRlcm4gc3RydWN0IHN5c190aW1lciAqc3lzdGVtX3RpbWVyOworZXh0ZXJuIHZvaWQgdGltZXJfdGljayhzdHJ1Y3QgcHRfcmVncyAqKTsKKworLyoKKyAqIEtlcm5lbCB0aW1lIGtlZXBpbmcgc3VwcG9ydC4KKyAqLworZXh0ZXJuIGludCAoKnNldF9ydGMpKHZvaWQpOworZXh0ZXJuIHZvaWQgc2F2ZV90aW1lX2RlbHRhKHN0cnVjdCB0aW1lc3BlYyAqZGVsdGEsIHN0cnVjdCB0aW1lc3BlYyAqcnRjKTsKK2V4dGVybiB2b2lkIHJlc3RvcmVfdGltZV9kZWx0YShzdHJ1Y3QgdGltZXNwZWMgKmRlbHRhLCBzdHJ1Y3QgdGltZXNwZWMgKnJ0Yyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL21jMTQ2ODE4cnRjLmggYi9pbmNsdWRlL2FzbS1hcm0vbWMxNDY4MThydGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjgxZTBjNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9tYzE0NjgxOHJ0Yy5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBNYWNoaW5lIGRlcGVuZGVudCBhY2Nlc3MgZnVuY3Rpb25zIGZvciBSVEMgcmVnaXN0ZXJzLgorICovCisjaWZuZGVmIF9BU01fTUMxNDY4MThSVENfSAorI2RlZmluZSBfQVNNX01DMTQ2ODE4UlRDX0gKKworI2luY2x1ZGUgPGFzbS9hcmNoL2lycXMuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2lmbmRlZiBSVENfUE9SVAorI2RlZmluZSBSVENfUE9SVCh4KQkoMHg3MCArICh4KSkKKyNkZWZpbmUgUlRDX0FMV0FZU19CQ0QJMQkvKiBSVEMgb3BlcmF0ZXMgaW4gYmluYXJ5IG1vZGUgKi8KKyNlbmRpZgorCisvKgorICogVGhlIHlldCBzdXBwb3J0ZWQgbWFjaGluZXMgYWxsIGFjY2VzcyB0aGUgUlRDIGluZGV4IHJlZ2lzdGVyIHZpYQorICogYW4gSVNBIHBvcnQgYWNjZXNzIGJ1dCB0aGUgd2F5IHRvIGFjY2VzcyB0aGUgZGF0ZSByZWdpc3RlciBkaWZmZXJzIC4uLgorICovCisjZGVmaW5lIENNT1NfUkVBRChhZGRyKSAoeyBcCitvdXRiX3AoKGFkZHIpLFJUQ19QT1JUKDApKTsgXAoraW5iX3AoUlRDX1BPUlQoMSkpOyBcCit9KQorI2RlZmluZSBDTU9TX1dSSVRFKHZhbCwgYWRkcikgKHsgXAorb3V0Yl9wKChhZGRyKSxSVENfUE9SVCgwKSk7IFwKK291dGJfcCgodmFsKSxSVENfUE9SVCgxKSk7IFwKK30pCisKKyNlbmRpZiAvKiBfQVNNX01DMTQ2ODE4UlRDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9tZW1vcnkuaCBiL2luY2x1ZGUvYXNtLWFybS9tZW1vcnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDdiZWE3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL21lbW9yeS5oCkBAIC0wLDAgKzEsMjAwIEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9tZW1vcnkuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMiBSdXNzZWxsIEtpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBOb3RlOiB0aGlzIGZpbGUgc2hvdWxkIG5vdCBiZSBpbmNsdWRlZCBieSBub24tYXNtLy5oIGZpbGVzCisgKi8KKyNpZm5kZWYgX19BU01fQVJNX01FTU9SWV9ICisjZGVmaW5lIF9fQVNNX0FSTV9NRU1PUllfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9tZW1vcnkuaD4KKworI2lmbmRlZiBUQVNLX1NJWkUKKy8qCisgKiBUQVNLX1NJWkUgLSB0aGUgbWF4aW11bSBzaXplIG9mIGEgdXNlciBzcGFjZSB0YXNrLgorICogVEFTS19VTk1BUFBFRF9CQVNFIC0gdGhlIGxvd2VyIGJvdW5kYXJ5IG9mIHRoZSBtbWFwIFZNIGFyZWEKKyAqLworI2RlZmluZSBUQVNLX1NJWkUJCSgweGJmMDAwMDAwVUwpCisjZGVmaW5lIFRBU0tfVU5NQVBQRURfQkFTRQkoMHg0MDAwMDAwMFVMKQorI2VuZGlmCisKKy8qCisgKiBUaGUgbWF4aW11bSBzaXplIG9mIGEgMjYtYml0IHVzZXIgc3BhY2UgdGFzay4KKyAqLworI2RlZmluZSBUQVNLX1NJWkVfMjYJCSgweDA0MDAwMDAwVUwpCisKKy8qCisgKiBQYWdlIG9mZnNldDogM0dCCisgKi8KKyNpZm5kZWYgUEFHRV9PRkZTRVQKKyNkZWZpbmUgUEFHRV9PRkZTRVQJCSgweGMwMDAwMDAwVUwpCisjZW5kaWYKKworLyoKKyAqIFBoeXNpY2FsIHZzIHZpcnR1YWwgUkFNIGFkZHJlc3Mgc3BhY2UgY29udmVyc2lvbi4gIFRoZXNlIGFyZQorICogcHJpdmF0ZSBkZWZpbml0aW9ucyB3aGljaCBzaG91bGQgTk9UIGJlIHVzZWQgb3V0c2lkZSBtZW1vcnkuaAorICogZmlsZXMuICBVc2UgdmlydF90b19waHlzL3BoeXNfdG9fdmlydC9fX3BhL19fdmEgaW5zdGVhZC4KKyAqLworI2lmbmRlZiBfX3ZpcnRfdG9fcGh5cworI2RlZmluZSBfX3ZpcnRfdG9fcGh5cyh4KQkoKHgpIC0gUEFHRV9PRkZTRVQgKyBQSFlTX09GRlNFVCkKKyNkZWZpbmUgX19waHlzX3RvX3ZpcnQoeCkJKCh4KSAtIFBIWVNfT0ZGU0VUICsgUEFHRV9PRkZTRVQpCisjZW5kaWYKKworLyoKKyAqIFRoZSBtb2R1bGUgc3BhY2UgbGl2ZXMgYmV0d2VlbiB0aGUgYWRkcmVzc2VzIGdpdmVuIGJ5IFRBU0tfU0laRQorICogYW5kIFBBR0VfT0ZGU0VUIC0gaXQgbXVzdCBiZSB3aXRoaW4gMzJNQiBvZiB0aGUga2VybmVsIHRleHQuCisgKi8KKyNkZWZpbmUgTU9EVUxFX0VORAkoUEFHRV9PRkZTRVQpCisjZGVmaW5lIE1PRFVMRV9TVEFSVAkoTU9EVUxFX0VORCAtIDE2KjEwNDg1NzYpCisKKyNpZiBUQVNLX1NJWkUgPiBNT0RVTEVfU1RBUlQKKyNlcnJvciBUb3Agb2YgdXNlciBzcGFjZSBjbGFzaGVzIHdpdGggc3RhcnQgb2YgbW9kdWxlIHNwYWNlCisjZW5kaWYKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworLyoKKyAqIFRoZSBETUEgbWFzayBjb3JyZXNwb25kaW5nIHRvIHRoZSBtYXhpbXVtIGJ1cyBhZGRyZXNzIGFsbG9jYXRhYmxlCisgKiB1c2luZyBHRlBfRE1BLiAgVGhlIGRlZmF1bHQgaGVyZSBwbGFjZXMgbm8gcmVzdHJpY3Rpb24gb24gRE1BCisgKiBhbGxvY2F0aW9ucy4gIFRoaXMgbXVzdCBiZSB0aGUgc21hbGxlc3QgRE1BIG1hc2sgaW4gdGhlIHN5c3RlbSwKKyAqIHNvIGEgc3VjY2Vzc2Z1bCBHRlBfRE1BIGFsbG9jYXRpb24gd2lsbCBhbHdheXMgc2F0aXNmeSB0aGlzLgorICovCisjaWZuZGVmIElTQV9ETUFfVEhSRVNIT0xECisjZGVmaW5lIElTQV9ETUFfVEhSRVNIT0xECSgweGZmZmZmZmZmVUxMKQorI2VuZGlmCisKKyNpZm5kZWYgYXJjaF9hZGp1c3Rfem9uZXMKKyNkZWZpbmUgYXJjaF9hZGp1c3Rfem9uZXMobm9kZSxzaXplLGhvbGVzKSBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKworLyoKKyAqIFBGTnMgYXJlIHVzZWQgdG8gZGVzY3JpYmUgYW55IHBoeXNpY2FsIHBhZ2U7IHRoaXMgbWVhbnMKKyAqIFBGTiAwID09IHBoeXNpY2FsIGFkZHJlc3MgMC4KKyAqCisgKiBUaGlzIGlzIHRoZSBQRk4gb2YgdGhlIGZpcnN0IFJBTSBwYWdlIGluIHRoZSBrZXJuZWwKKyAqIGRpcmVjdC1tYXBwZWQgdmlldy4gIFdlIGFzc3VtZSB0aGlzIGlzIHRoZSBmaXJzdCBwYWdlCisgKiBvZiBSQU0gaW4gdGhlIG1lbV9tYXAgYXMgd2VsbC4KKyAqLworI2RlZmluZSBQSFlTX1BGTl9PRkZTRVQJKFBIWVNfT0ZGU0VUID4+IFBBR0VfU0hJRlQpCisKKy8qCisgKiBUaGVzZSBhcmUgKm9ubHkqIHZhbGlkIG9uIHRoZSBrZXJuZWwgZGlyZWN0IG1hcHBlZCBSQU0gbWVtb3J5LgorICogTm90ZTogRHJpdmVycyBzaG91bGQgTk9UIHVzZSB0aGVzZS4gIFRoZXkgYXJlIHRoZSB3cm9uZworICogdHJhbnNsYXRpb24gZm9yIHRyYW5zbGF0aW5nIERNQSBhZGRyZXNzZXMuICBVc2UgdGhlIGRyaXZlcgorICogRE1BIHN1cHBvcnQgLSBzZWUgZG1hLW1hcHBpbmcuaC4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHZpcnRfdG9fcGh5cyh2b2lkICp4KQoreworCXJldHVybiBfX3ZpcnRfdG9fcGh5cygodW5zaWduZWQgbG9uZykoeCkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKnBoeXNfdG9fdmlydCh1bnNpZ25lZCBsb25nIHgpCit7CisJcmV0dXJuICh2b2lkICopKF9fcGh5c190b192aXJ0KCh1bnNpZ25lZCBsb25nKSh4KSkpOworfQorCisvKgorICogRHJpdmVycyBzaG91bGQgTk9UIHVzZSB0aGVzZSBlaXRoZXIuCisgKi8KKyNkZWZpbmUgX19wYSh4KQkJCV9fdmlydF90b19waHlzKCh1bnNpZ25lZCBsb25nKSh4KSkKKyNkZWZpbmUgX192YSh4KQkJCSgodm9pZCAqKV9fcGh5c190b192aXJ0KCh1bnNpZ25lZCBsb25nKSh4KSkpCisKKy8qCisgKiBWaXJ0dWFsIDwtPiBETUEgdmlldyBtZW1vcnkgYWRkcmVzcyB0cmFuc2xhdGlvbnMKKyAqIEFnYWluLCB0aGVzZSBhcmUgKm9ubHkqIHZhbGlkIG9uIHRoZSBrZXJuZWwgZGlyZWN0IG1hcHBlZCBSQU0KKyAqIG1lbW9yeS4gIFVzZSBvZiB0aGVzZSBpcyAqZGVwcmVjYXRlZCogKGFuZCB0aGF0IGRvZXNuJ3QgbWVhbgorICogdXNlIHRoZSBfXyBwcmVmaXhlZCBmb3JtcyBpbnN0ZWFkLikgIFNlZSBkbWEtbWFwcGluZy5oLgorICovCitzdGF0aWMgaW5saW5lIF9fZGVwcmVjYXRlZCB1bnNpZ25lZCBsb25nIHZpcnRfdG9fYnVzKHZvaWQgKngpCit7CisJcmV0dXJuIF9fdmlydF90b19idXMoKHVuc2lnbmVkIGxvbmcpeCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19kZXByZWNhdGVkIHZvaWQgKmJ1c190b192aXJ0KHVuc2lnbmVkIGxvbmcgeCkKK3sKKwlyZXR1cm4gKHZvaWQgKilfX2J1c190b192aXJ0KHgpOworfQorCisvKgorICogQ29udmVyc2lvbiBiZXR3ZWVuIGEgc3RydWN0IHBhZ2UgYW5kIGEgcGh5c2ljYWwgYWRkcmVzcy4KKyAqCisgKiBOb3RlOiB3aGVuIGNvbnZlcnRpbmcgYW4gdW5rbm93biBwaHlzaWNhbCBhZGRyZXNzIHRvIGEKKyAqIHN0cnVjdCBwYWdlLCB0aGUgcmVzdWx0aW5nIHBvaW50ZXIgbXVzdCBiZSB2YWxpZGF0ZWQKKyAqIHVzaW5nIFZBTElEX1BBR0UoKS4gIEl0IG11c3QgcmV0dXJuIGFuIGludmFsaWQgc3RydWN0IHBhZ2UKKyAqIGZvciBhbnkgcGh5c2ljYWwgYWRkcmVzcyBub3QgY29ycmVzcG9uZGluZyB0byBhIHN5c3RlbQorICogUkFNIGFkZHJlc3MuCisgKgorICogIHBhZ2VfdG9fcGZuKHBhZ2UpCWNvbnZlcnQgYSBzdHJ1Y3QgcGFnZSAqIHRvIGEgUEZOIG51bWJlcgorICogIHBmbl90b19wYWdlKHBmbikJY29udmVydCBhIF92YWxpZF8gUEZOIG51bWJlciB0byBzdHJ1Y3QgcGFnZSAqCisgKiAgcGZuX3ZhbGlkKHBmbikJaW5kaWNhdGVzIHdoZXRoZXIgYSBQRk4gbnVtYmVyIGlzIHZhbGlkCisgKgorICogIHZpcnRfdG9fcGFnZShrKQljb252ZXJ0IGEgX3ZhbGlkXyB2aXJ0dWFsIGFkZHJlc3MgdG8gc3RydWN0IHBhZ2UgKgorICogIHZpcnRfYWRkcl92YWxpZChrKQlpbmRpY2F0ZXMgd2hldGhlciBhIHZpcnR1YWwgYWRkcmVzcyBpcyB2YWxpZAorICovCisjaWZuZGVmIENPTkZJR19ESVNDT05USUdNRU0KKworI2RlZmluZSBwYWdlX3RvX3BmbihwYWdlKQkoKChwYWdlKSAtIG1lbV9tYXApICsgUEhZU19QRk5fT0ZGU0VUKQorI2RlZmluZSBwZm5fdG9fcGFnZShwZm4pCSgobWVtX21hcCArIChwZm4pKSAtIFBIWVNfUEZOX09GRlNFVCkKKyNkZWZpbmUgcGZuX3ZhbGlkKHBmbikJCSgocGZuKSA+PSBQSFlTX1BGTl9PRkZTRVQgJiYgKHBmbikgPCAoUEhZU19QRk5fT0ZGU0VUICsgbWF4X21hcG5yKSkKKworI2RlZmluZSB2aXJ0X3RvX3BhZ2Uoa2FkZHIpCShwZm5fdG9fcGFnZShfX3BhKGthZGRyKSA+PiBQQUdFX1NISUZUKSkKKyNkZWZpbmUgdmlydF9hZGRyX3ZhbGlkKGthZGRyKQkoKHVuc2lnbmVkIGxvbmcpKGthZGRyKSA+PSBQQUdFX09GRlNFVCAmJiAodW5zaWduZWQgbG9uZykoa2FkZHIpIDwgKHVuc2lnbmVkIGxvbmcpaGlnaF9tZW1vcnkpCisKKyNkZWZpbmUgUEhZU19UT19OSUQoYWRkcikJKDApCisKKyNlbHNlIC8qIENPTkZJR19ESVNDT05USUdNRU0gKi8KKworLyoKKyAqIFRoaXMgaXMgbW9yZSBjb21wbGV4LiAgV2UgaGF2ZSBhIHNldCBvZiBtZW1fbWFwIGFycmF5cyBzcHJlYWQKKyAqIGFyb3VuZCBpbiBtZW1vcnkuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9udW1hLmg+CisKKyNkZWZpbmUgcGFnZV90b19wZm4ocGFnZSkJCQkJCVwKKwkoKCAocGFnZSkgLSBwYWdlX3pvbmUocGFnZSktPnpvbmVfbWVtX21hcCkJCVwKKwkgICsgcGFnZV96b25lKHBhZ2UpLT56b25lX3N0YXJ0X3BmbikKKyNkZWZpbmUgcGZuX3RvX3BhZ2UocGZuKQkJCQkJXAorCShQRk5fVE9fTUFQQkFTRShwZm4pICsgTE9DQUxfTUFQX05SKChwZm4pIDw8IFBBR0VfU0hJRlQpKQorI2RlZmluZSBwZm5fdmFsaWQocGZuKQkJKFBGTl9UT19OSUQocGZuKSA8IE1BWF9OVU1OT0RFUykKKworI2RlZmluZSB2aXJ0X3RvX3BhZ2Uoa2FkZHIpCQkJCQlcCisJKEFERFJfVE9fTUFQQkFTRShrYWRkcikgKyBMT0NBTF9NQVBfTlIoa2FkZHIpKQorI2RlZmluZSB2aXJ0X2FkZHJfdmFsaWQoa2FkZHIpCShLVkFERFJfVE9fTklEKGthZGRyKSA8IE1BWF9OVU1OT0RFUykKKworLyoKKyAqIENvbW1vbiBkaXNjb250aWdtZW0gc3R1ZmYuCisgKiAgUEhZU19UT19OSUQgaXMgdXNlZCBieSB0aGUgQVJNIGtlcm5lbC9zZXR1cC5jCisgKi8KKyNkZWZpbmUgUEhZU19UT19OSUQoYWRkcikJUEZOX1RPX05JRCgoYWRkcikgPj4gUEFHRV9TSElGVCkKKworI2VuZGlmIC8qICFDT05GSUdfRElTQ09OVElHTUVNICovCisKKy8qCisgKiBGb3IgQklPLiAgIndpbGwgZGllIi4gIEtpbGwgbWUgd2hlbiBiaW9fdG9fcGh5cygpIGFuZCBidmVjX3RvX3BoeXMoKSBkaWUuCisgKi8KKyNkZWZpbmUgcGFnZV90b19waHlzKHBhZ2UpCShwYWdlX3RvX3BmbihwYWdlKSA8PCBQQUdFX1NISUZUKQorCisvKgorICogT3B0aW9uYWwgZGV2aWNlIERNQSBhZGRyZXNzIHJlbWFwcGluZy4gRG8gX25vdF8gdXNlIGRpcmVjdGx5IQorICogV2Ugc2hvdWxkIHJlYWxseSBlbGltaW5hdGUgdmlydF90b19idXMoKSBoZXJlIC0gaXQncyBkZXByZWNhdGVkLgorICovCisjaWZuZGVmIF9fYXJjaF9wYWdlX3RvX2RtYQorI2RlZmluZSBwYWdlX3RvX2RtYShkZXYsIHBhZ2UpCQkoKGRtYV9hZGRyX3QpX192aXJ0X3RvX2J1cygodW5zaWduZWQgbG9uZylwYWdlX2FkZHJlc3MocGFnZSkpKQorI2RlZmluZSBkbWFfdG9fdmlydChkZXYsIGFkZHIpCQkoKHZvaWQgKilfX2J1c190b192aXJ0KGFkZHIpKQorI2RlZmluZSB2aXJ0X3RvX2RtYShkZXYsIGFkZHIpCQkoKGRtYV9hZGRyX3QpX192aXJ0X3RvX2J1cygodW5zaWduZWQgbG9uZykoYWRkcikpKQorI2Vsc2UKKyNkZWZpbmUgcGFnZV90b19kbWEoZGV2LCBwYWdlKQkJKF9fYXJjaF9wYWdlX3RvX2RtYShkZXYsIHBhZ2UpKQorI2RlZmluZSBkbWFfdG9fdmlydChkZXYsIGFkZHIpCQkoX19hcmNoX2RtYV90b192aXJ0KGRldiwgYWRkcikpCisjZGVmaW5lIHZpcnRfdG9fZG1hKGRldiwgYWRkcikJCShfX2FyY2hfdmlydF90b19kbWEoZGV2LCBhZGRyKSkKKyNlbmRpZgorCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vbW1hbi5oIGIvaW5jbHVkZS9hc20tYXJtL21tYW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTRmNjljCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL21tYW4uaApAQCAtMCwwICsxLDQzIEBACisjaWZuZGVmIF9fQVJNX01NQU5fSF9fCisjZGVmaW5lIF9fQVJNX01NQU5fSF9fCisKKyNkZWZpbmUgUFJPVF9SRUFECTB4MQkJLyogcGFnZSBjYW4gYmUgcmVhZCAqLworI2RlZmluZSBQUk9UX1dSSVRFCTB4MgkJLyogcGFnZSBjYW4gYmUgd3JpdHRlbiAqLworI2RlZmluZSBQUk9UX0VYRUMJMHg0CQkvKiBwYWdlIGNhbiBiZSBleGVjdXRlZCAqLworI2RlZmluZSBQUk9UX1NFTQkweDgJCS8qIHBhZ2UgbWF5IGJlIHVzZWQgZm9yIGF0b21pYyBvcHMgKi8KKyNkZWZpbmUgUFJPVF9OT05FCTB4MAkJLyogcGFnZSBjYW4gbm90IGJlIGFjY2Vzc2VkICovCisjZGVmaW5lIFBST1RfR1JPV1NET1dOCTB4MDEwMDAwMDAJLyogbXByb3RlY3QgZmxhZzogZXh0ZW5kIGNoYW5nZSB0byBzdGFydCBvZiBncm93c2Rvd24gdm1hICovCisjZGVmaW5lIFBST1RfR1JPV1NVUAkweDAyMDAwMDAwCS8qIG1wcm90ZWN0IGZsYWc6IGV4dGVuZCBjaGFuZ2UgdG8gZW5kIG9mIGdyb3dzdXAgdm1hICovCisKKyNkZWZpbmUgTUFQX1NIQVJFRAkweDAxCQkvKiBTaGFyZSBjaGFuZ2VzICovCisjZGVmaW5lIE1BUF9QUklWQVRFCTB4MDIJCS8qIENoYW5nZXMgYXJlIHByaXZhdGUgKi8KKyNkZWZpbmUgTUFQX1RZUEUJMHgwZgkJLyogTWFzayBmb3IgdHlwZSBvZiBtYXBwaW5nICovCisjZGVmaW5lIE1BUF9GSVhFRAkweDEwCQkvKiBJbnRlcnByZXQgYWRkciBleGFjdGx5ICovCisjZGVmaW5lIE1BUF9BTk9OWU1PVVMJMHgyMAkJLyogZG9uJ3QgdXNlIGEgZmlsZSAqLworCisjZGVmaW5lIE1BUF9HUk9XU0RPV04JMHgwMTAwCQkvKiBzdGFjay1saWtlIHNlZ21lbnQgKi8KKyNkZWZpbmUgTUFQX0RFTllXUklURQkweDA4MDAJCS8qIEVUWFRCU1kgKi8KKyNkZWZpbmUgTUFQX0VYRUNVVEFCTEUJMHgxMDAwCQkvKiBtYXJrIGl0IGFzIGFuIGV4ZWN1dGFibGUgKi8KKyNkZWZpbmUgTUFQX0xPQ0tFRAkweDIwMDAJCS8qIHBhZ2VzIGFyZSBsb2NrZWQgKi8KKyNkZWZpbmUgTUFQX05PUkVTRVJWRQkweDQwMDAJCS8qIGRvbid0IGNoZWNrIGZvciByZXNlcnZhdGlvbnMgKi8KKyNkZWZpbmUgTUFQX1BPUFVMQVRFCTB4ODAwMAkJLyogcG9wdWxhdGUgKHByZWZhdWx0KSBwYWdlIHRhYmxlcyAqLworI2RlZmluZSBNQVBfTk9OQkxPQ0sJMHgxMDAwMAkJLyogZG8gbm90IGJsb2NrIG9uIElPICovCisKKyNkZWZpbmUgTVNfQVNZTkMJMQkJLyogc3luYyBtZW1vcnkgYXN5bmNocm9ub3VzbHkgKi8KKyNkZWZpbmUgTVNfSU5WQUxJREFURQkyCQkvKiBpbnZhbGlkYXRlIHRoZSBjYWNoZXMgKi8KKyNkZWZpbmUgTVNfU1lOQwkJNAkJLyogc3luY2hyb25vdXMgbWVtb3J5IHN5bmMgKi8KKworI2RlZmluZSBNQ0xfQ1VSUkVOVAkxCQkvKiBsb2NrIGFsbCBjdXJyZW50IG1hcHBpbmdzICovCisjZGVmaW5lIE1DTF9GVVRVUkUJMgkJLyogbG9jayBhbGwgZnV0dXJlIG1hcHBpbmdzICovCisKKyNkZWZpbmUgTUFEVl9OT1JNQUwJMHgwCQkvKiBkZWZhdWx0IHBhZ2UtaW4gYmVoYXZpb3IgKi8KKyNkZWZpbmUgTUFEVl9SQU5ET00JMHgxCQkvKiBwYWdlLWluIG1pbmltdW0gcmVxdWlyZWQgKi8KKyNkZWZpbmUgTUFEVl9TRVFVRU5USUFMCTB4MgkJLyogcmVhZC1haGVhZCBhZ2dyZXNzaXZlbHkgKi8KKyNkZWZpbmUgTUFEVl9XSUxMTkVFRAkweDMJCS8qIHByZS1mYXVsdCBwYWdlcyAqLworI2RlZmluZSBNQURWX0RPTlRORUVECTB4NAkJLyogZGlzY2FyZCB0aGVzZSBwYWdlcyAqLworCisvKiBjb21wYXRpYmlsaXR5IGZsYWdzICovCisjZGVmaW5lIE1BUF9BTk9OCU1BUF9BTk9OWU1PVVMKKyNkZWZpbmUgTUFQX0ZJTEUJMAorCisjZW5kaWYgLyogX19BUk1fTU1BTl9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9tbXUuaCBiL2luY2x1ZGUvYXNtLWFybS9tbXUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDU3Y2I3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL21tdS5oCkBAIC0wLDAgKzEsMTYgQEAKKyNpZm5kZWYgX19BUk1fTU1VX0gKKyNkZWZpbmUgX19BUk1fTU1VX0gKKwordHlwZWRlZiBzdHJ1Y3QgeworI2lmIF9fTElOVVhfQVJNX0FSQ0hfXyA+PSA2CisJdW5zaWduZWQgaW50IGlkOworI2VuZGlmCit9IG1tX2NvbnRleHRfdDsKKworI2lmIF9fTElOVVhfQVJNX0FSQ0hfXyA+PSA2CisjZGVmaW5lIEFTSUQobW0pCSgobW0pLT5jb250ZXh0LmlkICYgMjU1KQorI2Vsc2UKKyNkZWZpbmUgQVNJRChtbSkJKDApCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vbW11X2NvbnRleHQuaCBiL2luY2x1ZGUvYXNtLWFybS9tbXVfY29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhZjljNDEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vbW11X2NvbnRleHQuaApAQCAtMCwwICsxLDk2IEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9tbXVfY29udGV4dC5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NiBSdXNzZWxsIEtpbmcuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgQ2hhbmdlbG9nOgorICogICAyNy0wNi0xOTk2CVJNSwlDcmVhdGVkCisgKi8KKyNpZm5kZWYgX19BU01fQVJNX01NVV9DT05URVhUX0gKKyNkZWZpbmUgX19BU01fQVJNX01NVV9DT05URVhUX0gKKworI2luY2x1ZGUgPGFzbS9wcm9jLWZucy5oPgorCisjaWYgX19MSU5VWF9BUk1fQVJDSF9fID49IDYKKworLyoKKyAqIE9uIEFSTXY2LCB3ZSBoYXZlIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIGluIHRoZSBDb250ZXh0IElEOgorICoKKyAqIDMxICAgICAgICAgICAgICAgICAgICAgICAgIDcgICAgICAgICAgMAorICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rCisgKiB8ICAgICAgcHJvY2VzcyBJRCAgICAgICAgIHwgICBBU0lEICAgIHwKKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKworICogfCAgICAgICAgICAgICAgY29udGV4dCBJRCAgICAgICAgICAgICB8CisgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqCisgKiBUaGUgQVNJRCBpcyB1c2VkIHRvIHRhZyBlbnRyaWVzIGluIHRoZSBDUFUgY2FjaGVzIGFuZCBUTEJzLgorICogVGhlIGNvbnRleHQgSUQgaXMgdXNlZCBieSBkZWJ1Z2dlcnMgYW5kIHRyYWNlIGxvZ2ljLCBhbmQKKyAqIHNob3VsZCBiZSB1bmlxdWUgd2l0aGluIGFsbCBydW5uaW5nIHByb2Nlc3Nlcy4KKyAqLworI2RlZmluZSBBU0lEX0JJVFMJOAorI2RlZmluZSBBU0lEX01BU0sJKCh+MCkgPDwgQVNJRF9CSVRTKQorCitleHRlcm4gdW5zaWduZWQgaW50IGNwdV9sYXN0X2FzaWQ7CisKK3ZvaWQgX19pbml0X25ld19jb250ZXh0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSk7Cit2b2lkIF9fbmV3X2NvbnRleHQoc3RydWN0IG1tX3N0cnVjdCAqbW0pOworCitzdGF0aWMgaW5saW5lIHZvaWQgY2hlY2tfY29udGV4dChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlpZiAodW5saWtlbHkoKG1tLT5jb250ZXh0LmlkIF4gY3B1X2xhc3RfYXNpZCkgPj4gQVNJRF9CSVRTKSkKKwkJX19uZXdfY29udGV4dChtbSk7Cit9CisKKyNkZWZpbmUgaW5pdF9uZXdfY29udGV4dCh0c2ssbW0pCShfX2luaXRfbmV3X2NvbnRleHQodHNrLG1tKSwwKQorCisjZWxzZQorCisjZGVmaW5lIGNoZWNrX2NvbnRleHQobW0pCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGluaXRfbmV3X2NvbnRleHQodHNrLG1tKQkwCisKKyNlbmRpZgorCisjZGVmaW5lIGRlc3Ryb3lfY29udGV4dChtbSkJCWRvIHsgfSB3aGlsZSgwKQorCisvKgorICogVGhpcyBpcyBjYWxsZWQgd2hlbiAidHNrIiBpcyBhYm91dCB0byBlbnRlciBsYXp5IFRMQiBtb2RlLgorICoKKyAqIG1tOiAgZGVzY3JpYmVzIHRoZSBjdXJyZW50bHkgYWN0aXZlIG1tIGNvbnRleHQKKyAqIHRzazogdGFzayB3aGljaCBpcyBlbnRlcmluZyBsYXp5IHRsYgorICogY3B1OiBjcHUgbnVtYmVyIHdoaWNoIGlzIGVudGVyaW5nIGxhenkgdGxiCisgKgorICogdHNrLT5tbSB3aWxsIGJlIE5VTEwKKyAqLworc3RhdGljIGlubGluZSB2b2lkCitlbnRlcl9sYXp5X3RsYihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7Cit9CisKKy8qCisgKiBUaGlzIGlzIHRoZSBhY3R1YWwgbW0gc3dpdGNoIGFzIGZhciBhcyB0aGUgc2NoZWR1bGVyCisgKiBpcyBjb25jZXJuZWQuICBObyByZWdpc3RlcnMgYXJlIHRvdWNoZWQuICBXZSBhdm9pZAorICogY2FsbGluZyB0aGUgQ1BVIHNwZWNpZmljIGZ1bmN0aW9uIHdoZW4gdGhlIG1tIGhhc24ndAorICogYWN0dWFsbHkgY2hhbmdlZC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCitzd2l0Y2hfbW0oc3RydWN0IG1tX3N0cnVjdCAqcHJldiwgc3RydWN0IG1tX3N0cnVjdCAqbmV4dCwKKwkgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCXVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisKKwlpZiAocHJldiAhPSBuZXh0KSB7CisJCWNwdV9zZXQoY3B1LCBuZXh0LT5jcHVfdm1fbWFzayk7CisJCWNoZWNrX2NvbnRleHQobmV4dCk7CisJCWNwdV9zd2l0Y2hfbW0obmV4dC0+cGdkLCBuZXh0KTsKKwkJY3B1X2NsZWFyKGNwdSwgcHJldi0+Y3B1X3ZtX21hc2spOworCX0KK30KKworI2RlZmluZSBkZWFjdGl2YXRlX21tKHRzayxtbSkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBhY3RpdmF0ZV9tbShwcmV2LG5leHQpCXN3aXRjaF9tbShwcmV2LCBuZXh0LCBOVUxMKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9tbXpvbmUuaCBiL2luY2x1ZGUvYXNtLWFybS9tbXpvbmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODdkZTE1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL21tem9uZS5oCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL21tem9uZS5oCisgKgorICogIDE5OTktMTItMjkJTmljb2xhcyBQaXRyZQkJQ3JlYXRlZAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpZm5kZWYgX19BU01fTU1aT05FX0gKKyNkZWZpbmUgX19BU01fTU1aT05FX0gKKworLyoKKyAqIEN1cnJlbnRseSBkZWZpbmVkIGluIGFyY2gvYXJtL21tL2Rpc2NvbnRpZy5jCisgKi8KK2V4dGVybiBwZ19kYXRhX3QgZGlzY29udGlnX25vZGVfZGF0YVtdOworCisvKgorICogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgbm9kZSBkYXRhIGZvciBub2RlIG4uCisgKi8KKyNkZWZpbmUgTk9ERV9EQVRBKG5pZCkJCSgmZGlzY29udGlnX25vZGVfZGF0YVtuaWRdKQorCisvKgorICogTk9ERV9NRU1fTUFQIGdpdmVzIHRoZSBrYWRkciBmb3IgdGhlIG1lbV9tYXAgb2YgdGhlIG5vZGUuCisgKi8KKyNkZWZpbmUgTk9ERV9NRU1fTUFQKG5pZCkJKE5PREVfREFUQShuaWQpLT5ub2RlX21lbV9tYXApCisKKyNpbmNsdWRlIDxhc20vYXJjaC9tZW1vcnkuaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vbW9kdWxlLmggYi9pbmNsdWRlL2FzbS1hcm0vbW9kdWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRiMTY4ZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9tb2R1bGUuaApAQCAtMCwwICsxLDE4IEBACisjaWZuZGVmIF9BU01fQVJNX01PRFVMRV9ICisjZGVmaW5lIF9BU01fQVJNX01PRFVMRV9ICisKK3N0cnVjdCBtb2RfYXJjaF9zcGVjaWZpYworeworCWludCBmb287Cit9OworCisjZGVmaW5lIEVsZl9TaGRyCUVsZjMyX1NoZHIKKyNkZWZpbmUgRWxmX1N5bQkJRWxmMzJfU3ltCisjZGVmaW5lIEVsZl9FaGRyCUVsZjMyX0VoZHIKKworLyoKKyAqIEluY2x1ZGUgdGhlIEFSTSBhcmNoaXRlY3R1cmUgdmVyc2lvbi4KKyAqLworI2RlZmluZSBNT0RVTEVfQVJDSF9WRVJNQUdJQwkiQVJNdiIgX19zdHJpbmdpZnkoX19MSU5VWF9BUk1fQVJDSF9fKSAiICIKKworI2VuZGlmIC8qIF9BU01fQVJNX01PRFVMRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vbXNnYnVmLmggYi9pbmNsdWRlL2FzbS1hcm0vbXNnYnVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNiMzViOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9tc2didWYuaApAQCAtMCwwICsxLDMxIEBACisjaWZuZGVmIF9BU01BUk1fTVNHQlVGX0gKKyNkZWZpbmUgX0FTTUFSTV9NU0dCVUZfSAorCisvKiAKKyAqIFRoZSBtc3FpZDY0X2RzIHN0cnVjdHVyZSBmb3IgYXJtIGFyY2hpdGVjdHVyZS4KKyAqIE5vdGUgZXh0cmEgcGFkZGluZyBiZWNhdXNlIHRoaXMgc3RydWN0dXJlIGlzIHBhc3NlZCBiYWNrIGFuZCBmb3J0aAorICogYmV0d2VlbiBrZXJuZWwgYW5kIHVzZXIgc3BhY2UuCisgKgorICogUGFkIHNwYWNlIGlzIGxlZnQgZm9yOgorICogLSA2NC1iaXQgdGltZV90IHRvIHNvbHZlIHkyMDM4IHByb2JsZW0KKyAqIC0gMiBtaXNjZWxsYW5lb3VzIDMyLWJpdCB2YWx1ZXMKKyAqLworCitzdHJ1Y3QgbXNxaWQ2NF9kcyB7CisJc3RydWN0IGlwYzY0X3Blcm0gbXNnX3Blcm07CisJX19rZXJuZWxfdGltZV90IG1zZ19zdGltZTsJLyogbGFzdCBtc2dzbmQgdGltZSAqLworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQxOworCV9fa2VybmVsX3RpbWVfdCBtc2dfcnRpbWU7CS8qIGxhc3QgbXNncmN2IHRpbWUgKi8KKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkMjsKKwlfX2tlcm5lbF90aW1lX3QgbXNnX2N0aW1lOwkvKiBsYXN0IGNoYW5nZSB0aW1lICovCisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDM7CisJdW5zaWduZWQgbG9uZyAgbXNnX2NieXRlczsJLyogY3VycmVudCBudW1iZXIgb2YgYnl0ZXMgb24gcXVldWUgKi8KKwl1bnNpZ25lZCBsb25nICBtc2dfcW51bTsJLyogbnVtYmVyIG9mIG1lc3NhZ2VzIGluIHF1ZXVlICovCisJdW5zaWduZWQgbG9uZyAgbXNnX3FieXRlczsJLyogbWF4IG51bWJlciBvZiBieXRlcyBvbiBxdWV1ZSAqLworCV9fa2VybmVsX3BpZF90IG1zZ19sc3BpZDsJLyogcGlkIG9mIGxhc3QgbXNnc25kICovCisJX19rZXJuZWxfcGlkX3QgbXNnX2xycGlkOwkvKiBsYXN0IHJlY2VpdmUgcGlkICovCisJdW5zaWduZWQgbG9uZyAgX191bnVzZWQ0OworCXVuc2lnbmVkIGxvbmcgIF9fdW51c2VkNTsKK307CisKKyNlbmRpZiAvKiBfQVNNQVJNX01TR0JVRl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vbmFtZWkuaCBiL2luY2x1ZGUvYXNtLWFybS9uYW1laS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0MDJkM2IKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vbmFtZWkuaApAQCAtMCwwICsxLDI1IEBACisvKiAKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9uYW1laS5oCisgKgorICogUm91dGluZXMgdG8gaGFuZGxlIGZhbW91cyAvdXNyL2duZW11bAorICogRGVyaXZlZCBmcm9tIHRoZSBTcGFyYyB2ZXJzaW9uIG9mIHRoaXMgZmlsZQorICoKKyAqIEluY2x1ZGVkIGZyb20gbGludXgvZnMvbmFtZWkuYworICovCisKKyNpZm5kZWYgX19BU01BUk1fTkFNRUlfSAorI2RlZmluZSBfX0FTTUFSTV9OQU1FSV9ICisKKyNkZWZpbmUgQVJNX0JTRF9FTVVMICJ1c3IvZ25lbXVsL2JzZC8iCisKK3N0YXRpYyBpbmxpbmUgY2hhciAqX19lbXVsX3ByZWZpeCh2b2lkKQoreworCXN3aXRjaCAoY3VycmVudC0+cGVyc29uYWxpdHkpIHsKKwljYXNlIFBFUl9CU0Q6CisJCXJldHVybiBBUk1fQlNEX0VNVUw7CisJZGVmYXVsdDoKKwkJcmV0dXJuIE5VTEw7CisJfQorfQorCisjZW5kaWYgLyogX19BU01BUk1fTkFNRUlfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL251bW5vZGVzLmggYi9pbmNsdWRlL2FzbS1hcm0vbnVtbm9kZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDJhMTAzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL251bW5vZGVzLmgKQEAgLTAsMCArMSwyNCBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vbnVtbm9kZXMuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDIgUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisvKiBUaGlzIGRlY2xhcmF0aW9uIGZvciB0aGUgc2l6ZSBvZiB0aGUgTlVNQSAoQ09ORklHX0RJU0NPTlRJR01FTSkKKyAqIG1lbW9yeSBub2RlIHRhYmxlIGlzIHRoZSBkZWZhdWx0LgorICoKKyAqIEEgZ29vZCBwbGFjZSB0byBvdmVycmlkZSB0aGlzIHZhbHVlIGlzIGluY2x1ZGUvYXNtL2FyY2gvbWVtb3J5LmguCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUk1fTlVNTk9ERVNfSAorI2RlZmluZSBfX0FTTV9BUk1fTlVNTk9ERVNfSAorCisjaWZuZGVmIE5PREVTX1NISUZUCisjIGRlZmluZSBOT0RFU19TSElGVAkyCS8qIE5vcm1hbGx5LCBNYXggNCBOb2RlcyAqLworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL253Zmxhc2guaCBiL2luY2x1ZGUvYXNtLWFybS9ud2ZsYXNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRlNWE1NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9ud2ZsYXNoLmgKQEAgLTAsMCArMSw5IEBACisjaWZuZGVmIF9GTEFTSF9ICisjZGVmaW5lIF9GTEFTSF9ICisKKyNkZWZpbmUgRkxBU0hfTUlOT1IJCSAxNjAJLyogTUFKT1IgaXMgMTAgLSBtaXNjZGV2aWNlICovCisjZGVmaW5lIENNRF9XUklURV9ESVNBQkxFCSAwCisjZGVmaW5lIENNRF9XUklURV9FTkFCTEUJIDB4MjgKKyNkZWZpbmUgQ01EX1dSSVRFX0JBU0U2NEtfRU5BQkxFIDB4NDcKKworI2VuZGlmIC8qIF9GTEFTSF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vcGFnZS5oIGIvaW5jbHVkZS9hc20tYXJtL3BhZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2EzYThlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL3BhZ2UuaApAQCAtMCwwICsxLDE5NyBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vcGFnZS5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NS0yMDAzIFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpZm5kZWYgX0FTTUFSTV9QQUdFX0gKKyNkZWZpbmUgX0FTTUFSTV9QQUdFX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisvKiBQQUdFX1NISUZUIGRldGVybWluZXMgdGhlIHBhZ2Ugc2l6ZSAqLworI2RlZmluZSBQQUdFX1NISUZUCQkxMgorI2RlZmluZSBQQUdFX1NJWkUJCSgxVUwgPDwgUEFHRV9TSElGVCkKKyNkZWZpbmUgUEFHRV9NQVNLCQkofihQQUdFX1NJWkUtMSkpCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKy8qIHRvIGFsaWduIHRoZSBwb2ludGVyIHRvIHRoZSAobmV4dCkgcGFnZSBib3VuZGFyeSAqLworI2RlZmluZSBQQUdFX0FMSUdOKGFkZHIpCSgoKGFkZHIpK1BBR0VfU0laRS0xKSZQQUdFX01BU0spCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNpbmNsdWRlIDxhc20vZ2x1ZS5oPgorCisvKgorICoJVXNlciBTcGFjZSBNb2RlbAorICoJPT09PT09PT09PT09PT09PQorICoKKyAqCVRoaXMgc2VjdGlvbiBzZWxlY3RzIHRoZSBjb3JyZWN0IHNldCBvZiBmdW5jdGlvbnMgZm9yIGRlYWxpbmcgd2l0aAorICoJcGFnZS1iYXNlZCBjb3B5aW5nIGFuZCBjbGVhcmluZyBmb3IgdXNlciBzcGFjZSBmb3IgdGhlIHBhcnRpY3VsYXIKKyAqCXByb2Nlc3NvcihzKSB3ZSdyZSBidWlsZGluZyBmb3IuCisgKgorICoJV2UgaGF2ZSB0aGUgZm9sbG93aW5nIHRvIGNob29zZSBmcm9tOgorICoJICB2MwkJLSBBUk12MworICoJICB2NHd0CQktIEFSTXY0IHdpdGggd3JpdGV0aHJvdWdoIGNhY2hlLCB3aXRob3V0IG1pbmljYWNoZQorICoJICB2NHdiCQktIEFSTXY0IHdpdGggd3JpdGViYWNrIGNhY2hlLCB3aXRob3V0IG1pbmljYWNoZQorICoJICB2NF9tYwkJLSBBUk12NCB3aXRoIG1pbmljYWNoZQorICoJICB4c2NhbGUJLSBYc2NhbGUKKyAqLworI3VuZGVmIF9VU0VSCisjdW5kZWYgTVVMVElfVVNFUgorCisjaWZkZWYgQ09ORklHX0NQVV9DT1BZX1YzCisjIGlmZGVmIF9VU0VSCisjICBkZWZpbmUgTVVMVElfVVNFUiAxCisjIGVsc2UKKyMgIGRlZmluZSBfVVNFUiB2MworIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX0NPUFlfVjRXVAorIyBpZmRlZiBfVVNFUgorIyAgZGVmaW5lIE1VTFRJX1VTRVIgMQorIyBlbHNlCisjICBkZWZpbmUgX1VTRVIgdjR3dAorIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX0NPUFlfVjRXQgorIyBpZmRlZiBfVVNFUgorIyAgZGVmaW5lIE1VTFRJX1VTRVIgMQorIyBlbHNlCisjICBkZWZpbmUgX1VTRVIgdjR3YgorIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX1NBMTEwMAorIyBpZmRlZiBfVVNFUgorIyAgZGVmaW5lIE1VTFRJX1VTRVIgMQorIyBlbHNlCisjICBkZWZpbmUgX1VTRVIgdjRfbWMKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9YU0NBTEUKKyMgaWZkZWYgX1VTRVIKKyMgIGRlZmluZSBNVUxUSV9VU0VSIDEKKyMgZWxzZQorIyAgZGVmaW5lIF9VU0VSIHhzY2FsZV9tYworIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX0NPUFlfVjYKKyMgZGVmaW5lIE1VTFRJX1VTRVIgMQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfVVNFUikgJiYgIWRlZmluZWQoTVVMVElfVVNFUikKKyNlcnJvciBVbmtub3duIHVzZXIgb3BlcmF0aW9ucyBtb2RlbAorI2VuZGlmCisKK3N0cnVjdCBjcHVfdXNlcl9mbnMgeworCXZvaWQgKCpjcHVfY2xlYXJfdXNlcl9wYWdlKSh2b2lkICpwLCB1bnNpZ25lZCBsb25nIHVzZXIpOworCXZvaWQgKCpjcHVfY29weV91c2VyX3BhZ2UpKHZvaWQgKnRvLCBjb25zdCB2b2lkICpmcm9tLAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgdXNlcik7Cit9OworCisjaWZkZWYgTVVMVElfVVNFUgorZXh0ZXJuIHN0cnVjdCBjcHVfdXNlcl9mbnMgY3B1X3VzZXI7CisKKyNkZWZpbmUgX19jcHVfY2xlYXJfdXNlcl9wYWdlCWNwdV91c2VyLmNwdV9jbGVhcl91c2VyX3BhZ2UKKyNkZWZpbmUgX19jcHVfY29weV91c2VyX3BhZ2UJY3B1X3VzZXIuY3B1X2NvcHlfdXNlcl9wYWdlCisKKyNlbHNlCisKKyNkZWZpbmUgX19jcHVfY2xlYXJfdXNlcl9wYWdlCV9fZ2x1ZShfVVNFUixfY2xlYXJfdXNlcl9wYWdlKQorI2RlZmluZSBfX2NwdV9jb3B5X3VzZXJfcGFnZQlfX2dsdWUoX1VTRVIsX2NvcHlfdXNlcl9wYWdlKQorCitleHRlcm4gdm9pZCBfX2NwdV9jbGVhcl91c2VyX3BhZ2Uodm9pZCAqcCwgdW5zaWduZWQgbG9uZyB1c2VyKTsKK2V4dGVybiB2b2lkIF9fY3B1X2NvcHlfdXNlcl9wYWdlKHZvaWQgKnRvLCBjb25zdCB2b2lkICpmcm9tLAorCQkJCSB1bnNpZ25lZCBsb25nIHVzZXIpOworI2VuZGlmCisKKyNkZWZpbmUgY2xlYXJfdXNlcl9wYWdlKGFkZHIsdmFkZHIscGcpCQkJXAorCWRvIHsJCQkJCQlcCisJCXByZWVtcHRfZGlzYWJsZSgpOwkJCVwKKwkJX19jcHVfY2xlYXJfdXNlcl9wYWdlKGFkZHIsIHZhZGRyKTsJXAorCQlwcmVlbXB0X2VuYWJsZSgpOwkJCVwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIGNvcHlfdXNlcl9wYWdlKHRvLGZyb20sdmFkZHIscGcpCQlcCisJZG8gewkJCQkJCVwKKwkJcHJlZW1wdF9kaXNhYmxlKCk7CQkJXAorCQlfX2NwdV9jb3B5X3VzZXJfcGFnZSh0bywgZnJvbSwgdmFkZHIpOwlcCisJCXByZWVtcHRfZW5hYmxlKCk7CQkJXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgY2xlYXJfcGFnZShwYWdlKQltZW16ZXJvKCh2b2lkICopKHBhZ2UpLCBQQUdFX1NJWkUpCitleHRlcm4gdm9pZCBjb3B5X3BhZ2Uodm9pZCAqdG8sIGNvbnN0IHZvaWQgKmZyb20pOworCisjdW5kZWYgU1RSSUNUX01NX1RZUEVDSEVDS1MKKworI2lmZGVmIFNUUklDVF9NTV9UWVBFQ0hFQ0tTCisvKgorICogVGhlc2UgYXJlIHVzZWQgdG8gbWFrZSB1c2Ugb2YgQyB0eXBlLWNoZWNraW5nLi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHB0ZTsgfSBwdGVfdDsKK3R5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBwbWQ7IH0gcG1kX3Q7Cit0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgcGdkWzJdOyB9IHBnZF90OwordHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHBncHJvdDsgfSBwZ3Byb3RfdDsKKworI2RlZmluZSBwdGVfdmFsKHgpICAgICAgKCh4KS5wdGUpCisjZGVmaW5lIHBtZF92YWwoeCkgICAgICAoKHgpLnBtZCkKKyNkZWZpbmUgcGdkX3ZhbCh4KQkoKHgpLnBnZFswXSkKKyNkZWZpbmUgcGdwcm90X3ZhbCh4KSAgICgoeCkucGdwcm90KQorCisjZGVmaW5lIF9fcHRlKHgpICAgICAgICAoKHB0ZV90KSB7ICh4KSB9ICkKKyNkZWZpbmUgX19wbWQoeCkgICAgICAgICgocG1kX3QpIHsgKHgpIH0gKQorI2RlZmluZSBfX3BncHJvdCh4KSAgICAgKChwZ3Byb3RfdCkgeyAoeCkgfSApCisKKyNlbHNlCisvKgorICogLi4gd2hpbGUgdGhlc2UgbWFrZSBpdCBlYXNpZXIgb24gdGhlIGNvbXBpbGVyCisgKi8KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBwdGVfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBwbWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBwZ2RfdFsyXTsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBwZ3Byb3RfdDsKKworI2RlZmluZSBwdGVfdmFsKHgpICAgICAgKHgpCisjZGVmaW5lIHBtZF92YWwoeCkgICAgICAoeCkKKyNkZWZpbmUgcGdkX3ZhbCh4KQkoKHgpWzBdKQorI2RlZmluZSBwZ3Byb3RfdmFsKHgpICAgKHgpCisKKyNkZWZpbmUgX19wdGUoeCkgICAgICAgICh4KQorI2RlZmluZSBfX3BtZCh4KSAgICAgICAgKHgpCisjZGVmaW5lIF9fcGdwcm90KHgpICAgICAoeCkKKworI2VuZGlmIC8qIFNUUklDVF9NTV9UWVBFQ0hFQ0tTICovCisKKy8qIFB1cmUgMl5uIHZlcnNpb24gb2YgZ2V0X29yZGVyICovCitzdGF0aWMgaW5saW5lIGludCBnZXRfb3JkZXIodW5zaWduZWQgbG9uZyBzaXplKQoreworCWludCBvcmRlcjsKKworCXNpemUgPSAoc2l6ZS0xKSA+PiAoUEFHRV9TSElGVC0xKTsKKwlvcmRlciA9IC0xOworCWRvIHsKKwkJc2l6ZSA+Pj0gMTsKKwkJb3JkZXIrKzsKKwl9IHdoaWxlIChzaXplKTsKKwlyZXR1cm4gb3JkZXI7Cit9CisKKyNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+CisKKyNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCisKKyNkZWZpbmUgVk1fREFUQV9ERUZBVUxUX0ZMQUdTCShWTV9SRUFEIHwgVk1fV1JJVEUgfCBWTV9FWEVDIHwgXAorCQkJCSBWTV9NQVlSRUFEIHwgVk1fTUFZV1JJVEUgfCBWTV9NQVlFWEVDKQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9wYXJhbS5oIGIvaW5jbHVkZS9hc20tYXJtL3BhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQyMjNkNGQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vcGFyYW0uaApAQCAtMCwwICsxLDM2IEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9wYXJhbS5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NS0xOTk5IFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpZm5kZWYgX19BU01fUEFSQU1fSAorI2RlZmluZSBfX0FTTV9QQVJBTV9ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisjIGluY2x1ZGUgPGFzbS9hcmNoL3BhcmFtLmg+CQkvKiBmb3Iga2VybmVsIHZlcnNpb24gb2YgSFogKi8KKworIyBpZm5kZWYgSFoKKyMgIGRlZmluZSBIWgkJMTAwCQkvKiBJbnRlcm5hbCBrZXJuZWwgdGltZXIgZnJlcXVlbmN5ICovCisjIGVuZGlmCisKKyMgZGVmaW5lIFVTRVJfSFoJMTAwCQkvKiBVc2VyIGludGVyZmFjZXMgYXJlIGluICJ0aWNrcyIgKi8KKyMgZGVmaW5lIENMT0NLU19QRVJfU0VDCShVU0VSX0haKQkvKiBsaWtlIHRpbWVzKCkgKi8KKyNlbHNlCisjIGRlZmluZSBIWgkJMTAwCisjZW5kaWYKKworI2RlZmluZSBFWEVDX1BBR0VTSVpFCTQwOTYKKworI2lmbmRlZiBOT0dST1VQCisjZGVmaW5lIE5PR1JPVVAgICAgICAgICAoLTEpCisjZW5kaWYKKworLyogbWF4IGxlbmd0aCBvZiBob3N0bmFtZSAqLworI2RlZmluZSBNQVhIT1NUTkFNRUxFTiAgNjQKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9wYXJwb3J0LmggYi9pbmNsdWRlL2FzbS1hcm0vcGFycG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyZjkwYzcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vcGFycG9ydC5oCkBAIC0wLDAgKzEsMTggQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL3BhcnBvcnQuaDogQVJNLXNwZWNpZmljIHBhcnBvcnQgaW5pdGlhbGlzYXRpb24KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwICBUaW0gV2F1Z2ggPHRpbUBjeWJlcmVsay5kZW1vbi5jby51az4KKyAqCisgKiBUaGlzIGZpbGUgc2hvdWxkIG9ubHkgYmUgaW5jbHVkZWQgYnkgZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfcGMuYy4KKyAqLworCisjaWZuZGVmIF9fQVNNQVJNX1BBUlBPUlRfSAorI2RlZmluZSBfX0FTTUFSTV9QQVJQT1JUX0gKKworc3RhdGljIGludCBfX2RldmluaXQgcGFycG9ydF9wY19maW5kX2lzYV9wb3J0cyAoaW50IGF1dG9pcnEsIGludCBhdXRvZG1hKTsKK3N0YXRpYyBpbnQgX19kZXZpbml0IHBhcnBvcnRfcGNfZmluZF9ub25wY2lfcG9ydHMgKGludCBhdXRvaXJxLCBpbnQgYXV0b2RtYSkKK3sKKwlyZXR1cm4gcGFycG9ydF9wY19maW5kX2lzYV9wb3J0cyAoYXV0b2lycSwgYXV0b2RtYSk7Cit9CisKKyNlbmRpZiAvKiAhKF9BU01BUk1fUEFSUE9SVF9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3BjaS5oIGIvaW5jbHVkZS9hc20tYXJtL3BjaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwZmZhZWYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vcGNpLmgKQEAgLTAsMCArMSw1OSBAQAorI2lmbmRlZiBBU01BUk1fUENJX0gKKyNkZWZpbmUgQVNNQVJNX1BDSV9ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGNpLWRtYS1jb21wYXQuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPiAvKiBmb3IgUENJQklPU19NSU5fKiAqLworCisjZGVmaW5lIHBjaWJpb3Nfc2Nhbl9hbGxfZm5zKGEsIGIpCTAKKworc3RhdGljIGlubGluZSB2b2lkIHBjaWJpb3Nfc2V0X21hc3RlcihzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCS8qIE5vIHNwZWNpYWwgYnVzIG1hc3RlcmluZyBzZXR1cCBoYW5kbGluZyAqLworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGNpYmlvc19wZW5hbGl6ZV9pc2FfaXJxKGludCBpcnEpCit7CisJLyogV2UgZG9uJ3QgZG8gZHluYW1pYyBQQ0kgSVJRIGFsbG9jYXRpb24gKi8KK30KKworLyoKKyAqIFRoZSBQQ0kgYWRkcmVzcyBzcGFjZSBkb2VzIGVxdWFsIHRoZSBwaHlzaWNhbCBtZW1vcnkgYWRkcmVzcyBzcGFjZS4KKyAqIFRoZSBuZXR3b3JraW5nIGFuZCBibG9jayBkZXZpY2UgbGF5ZXJzIHVzZSB0aGlzIGJvb2xlYW4gZm9yIGJvdW5jZQorICogYnVmZmVyIGRlY2lzaW9ucy4KKyAqLworI2RlZmluZSBQQ0lfRE1BX0JVU19JU19QSFlTICAgICAoMCkKKworLyoKKyAqIFdlIGRvbid0IHN1cHBvcnQgREFDIERNQSBjeWNsZXMuCisgKi8KKyNkZWZpbmUgcGNpX2RhY19kbWFfc3VwcG9ydGVkKHBjaV9kZXYsIG1hc2spCSgwKQorCisvKgorICogV2hldGhlciBwY2lfdW5tYXBfe3NpbmdsZSxwYWdlfSBpcyBhIG5vcCBkZXBlbmRzIHVwb24gdGhlCisgKiBjb25maWd1cmF0aW9uLgorICovCisjZGVmaW5lIERFQ0xBUkVfUENJX1VOTUFQX0FERFIoQUREUl9OQU1FKQlkbWFfYWRkcl90IEFERFJfTkFNRTsKKyNkZWZpbmUgREVDTEFSRV9QQ0lfVU5NQVBfTEVOKExFTl9OQU1FKQkJX191MzIgTEVOX05BTUU7CisjZGVmaW5lIHBjaV91bm1hcF9hZGRyKFBUUiwgQUREUl9OQU1FKQkJKChQVFIpLT5BRERSX05BTUUpCisjZGVmaW5lIHBjaV91bm1hcF9hZGRyX3NldChQVFIsIEFERFJfTkFNRSwgVkFMKQkoKChQVFIpLT5BRERSX05BTUUpID0gKFZBTCkpCisjZGVmaW5lIHBjaV91bm1hcF9sZW4oUFRSLCBMRU5fTkFNRSkJCSgoUFRSKS0+TEVOX05BTUUpCisjZGVmaW5lIHBjaV91bm1hcF9sZW5fc2V0KFBUUiwgTEVOX05BTUUsIFZBTCkJKCgoUFRSKS0+TEVOX05BTUUpID0gKFZBTCkpCisKKyNkZWZpbmUgSEFWRV9QQ0lfTU1BUAorZXh0ZXJuIGludCBwY2lfbW1hcF9wYWdlX3JhbmdlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gcGNpX21tYXBfc3RhdGUgbW1hcF9zdGF0ZSwgaW50IHdyaXRlX2NvbWJpbmUpOworCitleHRlcm4gdm9pZAorcGNpYmlvc19yZXNvdXJjZV90b19idXMoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IHBjaV9idXNfcmVnaW9uICpyZWdpb24sCisJCQkgc3RydWN0IHJlc291cmNlICpyZXMpOworCitzdGF0aWMgaW5saW5lIHZvaWQgcGNpYmlvc19hZGRfcGxhdGZvcm1fZW50cmllcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworfQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworIAorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vcGVyY3B1LmggYi9pbmNsdWRlL2FzbS1hcm0vcGVyY3B1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRlMzJkOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9wZXJjcHUuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19BUk1fUEVSQ1BVCisjZGVmaW5lIF9fQVJNX1BFUkNQVQorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGVyY3B1Lmg+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3BnYWxsb2MuaCBiL2luY2x1ZGUvYXNtLWFybS9wZ2FsbG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgxNGY4MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9wZ2FsbG9jLmgKQEAgLTAsMCArMSwxMzAgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL3BnYWxsb2MuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMSBSdXNzZWxsIEtpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaWZuZGVmIF9BU01BUk1fUEdBTExPQ19ICisjZGVmaW5lIF9BU01BUk1fUEdBTExPQ19ICisKKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KKworLyoKKyAqIFNpbmNlIHdlIGhhdmUgb25seSB0d28tbGV2ZWwgcGFnZSB0YWJsZXMsIHRoZXNlIGFyZSB0cml2aWFsCisgKi8KKyNkZWZpbmUgcG1kX2FsbG9jX29uZShtbSxhZGRyKQkJKHsgQlVHKCk7ICgocG1kX3QgKikyKTsgfSkKKyNkZWZpbmUgcG1kX2ZyZWUocG1kKQkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgcGdkX3BvcHVsYXRlKG1tLHBtZCxwdGUpCUJVRygpCisKK2V4dGVybiBwZ2RfdCAqZ2V0X3BnZF9zbG93KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKK2V4dGVybiB2b2lkIGZyZWVfcGdkX3Nsb3cocGdkX3QgKnBnZCk7CisKKyNkZWZpbmUgcGdkX2FsbG9jKG1tKQkJCWdldF9wZ2Rfc2xvdyhtbSkKKyNkZWZpbmUgcGdkX2ZyZWUocGdkKQkJCWZyZWVfcGdkX3Nsb3cocGdkKQorCisjZGVmaW5lIGNoZWNrX3BndF9jYWNoZSgpCQlkbyB7IH0gd2hpbGUgKDApCisKKy8qCisgKiBBbGxvY2F0ZSBvbmUgUFRFIHRhYmxlLgorICoKKyAqIFRoaXMgYWN0dWFsbHkgYWxsb2NhdGVzIHR3byBoYXJkd2FyZSBQVEUgdGFibGVzLCBidXQgd2Ugd3JhcCB0aGlzIHVwCisgKiBpbnRvIG9uZSB0YWJsZSB0aHVzOgorICoKKyAqICArLS0tLS0tLS0tLS0tKworICogIHwgIGgvdyBwdCAwICB8CisgKiAgKy0tLS0tLS0tLS0tLSsKKyAqICB8ICBoL3cgcHQgMSAgfAorICogICstLS0tLS0tLS0tLS0rCisgKiAgfCBMaW51eCBwdCAwIHwKKyAqICArLS0tLS0tLS0tLS0tKworICogIHwgTGludXggcHQgMSB8CisgKiAgKy0tLS0tLS0tLS0tLSsKKyAqLworc3RhdGljIGlubGluZSBwdGVfdCAqCitwdGVfYWxsb2Nfb25lX2tlcm5lbChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCXB0ZV90ICpwdGU7CisKKwlwdGUgPSAocHRlX3QgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTHxfX0dGUF9SRVBFQVR8X19HRlBfWkVSTyk7CisJaWYgKHB0ZSkgeworCQljbGVhbl9kY2FjaGVfYXJlYShwdGUsIHNpemVvZihwdGVfdCkgKiBQVFJTX1BFUl9QVEUpOworCQlwdGUgKz0gUFRSU19QRVJfUFRFOworCX0KKworCXJldHVybiBwdGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKgorcHRlX2FsbG9jX29uZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCXN0cnVjdCBwYWdlICpwdGU7CisKKwlwdGUgPSBhbGxvY19wYWdlcyhHRlBfS0VSTkVMfF9fR0ZQX1JFUEVBVHxfX0dGUF9aRVJPLCAwKTsKKwlpZiAocHRlKSB7CisJCXZvaWQgKnBhZ2UgPSBwYWdlX2FkZHJlc3MocHRlKTsKKwkJY2xlYW5fZGNhY2hlX2FyZWEocGFnZSwgc2l6ZW9mKHB0ZV90KSAqIFBUUlNfUEVSX1BURSk7CisJfQorCisJcmV0dXJuIHB0ZTsKK30KKworLyoKKyAqIEZyZWUgb25lIFBURSB0YWJsZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHB0ZV9mcmVlX2tlcm5lbChwdGVfdCAqcHRlKQoreworCWlmIChwdGUpIHsKKwkJcHRlIC09IFBUUlNfUEVSX1BURTsKKwkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXB0ZSk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcHRlX2ZyZWUoc3RydWN0IHBhZ2UgKnB0ZSkKK3sKKwlfX2ZyZWVfcGFnZShwdGUpOworfQorCisvKgorICogUG9wdWxhdGUgdGhlIHBtZHAgZW50cnkgd2l0aCBhIHBvaW50ZXIgdG8gdGhlIHB0ZS4gIFRoaXMgcG1kIGlzIHBhcnQKKyAqIG9mIHRoZSBtbSBhZGRyZXNzIHNwYWNlLgorICoKKyAqIEVuc3VyZSB0aGF0IHdlIGFsd2F5cyBzZXQgYm90aCBQTUQgZW50cmllcy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCitwbWRfcG9wdWxhdGVfa2VybmVsKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kcCwgcHRlX3QgKnB0ZXApCit7CisJdW5zaWduZWQgbG9uZyBwdGVfcHRyID0gKHVuc2lnbmVkIGxvbmcpcHRlcDsKKwl1bnNpZ25lZCBsb25nIHBtZHZhbDsKKworCUJVR19PTihtbSAhPSAmaW5pdF9tbSk7CisKKwkvKgorCSAqIFRoZSBwbWQgbXVzdCBiZSBsb2FkZWQgd2l0aCB0aGUgcGh5c2ljYWwKKwkgKiBhZGRyZXNzIG9mIHRoZSBQVEUgdGFibGUKKwkgKi8KKwlwdGVfcHRyIC09IFBUUlNfUEVSX1BURSAqIHNpemVvZih2b2lkICopOworCXBtZHZhbCA9IF9fcGEocHRlX3B0cikgfCBfUEFHRV9LRVJORUxfVEFCTEU7CisJcG1kcFswXSA9IF9fcG1kKHBtZHZhbCk7CisJcG1kcFsxXSA9IF9fcG1kKHBtZHZhbCArIDI1NiAqIHNpemVvZihwdGVfdCkpOworCWZsdXNoX3BtZF9lbnRyeShwbWRwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitwbWRfcG9wdWxhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWRwLCBzdHJ1Y3QgcGFnZSAqcHRlcCkKK3sKKwl1bnNpZ25lZCBsb25nIHBtZHZhbDsKKworCUJVR19PTihtbSA9PSAmaW5pdF9tbSk7CisKKwlwbWR2YWwgPSBwYWdlX3RvX3BmbihwdGVwKSA8PCBQQUdFX1NISUZUIHwgX1BBR0VfVVNFUl9UQUJMRTsKKwlwbWRwWzBdID0gX19wbWQocG1kdmFsKTsKKwlwbWRwWzFdID0gX19wbWQocG1kdmFsICsgMjU2ICogc2l6ZW9mKHB0ZV90KSk7CisJZmx1c2hfcG1kX2VudHJ5KHBtZHApOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1hcm0vcGd0YWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxZmZiMWYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vcGd0YWJsZS5oCkBAIC0wLDAgKzEsNDMzIEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9wZ3RhYmxlLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDIgUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2lmbmRlZiBfQVNNQVJNX1BHVEFCTEVfSAorI2RlZmluZSBfQVNNQVJNX1BHVEFCTEVfSAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvNGxldmVsLWZpeHVwLmg+CisKKyNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+CisjaW5jbHVkZSA8YXNtL3Byb2MtZm5zLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvdm1hbGxvYy5oPgorCisvKgorICogSGFyZHdhcmUtd2lzZSwgd2UgaGF2ZSBhIHR3byBsZXZlbCBwYWdlIHRhYmxlIHN0cnVjdHVyZSwgd2hlcmUgdGhlIGZpcnN0CisgKiBsZXZlbCBoYXMgNDA5NiBlbnRyaWVzLCBhbmQgdGhlIHNlY29uZCBsZXZlbCBoYXMgMjU2IGVudHJpZXMuICBFYWNoIGVudHJ5CisgKiBpcyBvbmUgMzItYml0IHdvcmQuICBNb3N0IG9mIHRoZSBiaXRzIGluIHRoZSBzZWNvbmQgbGV2ZWwgZW50cnkgYXJlIHVzZWQKKyAqIGJ5IGhhcmR3YXJlLCBhbmQgdGhlcmUgYXJlbid0IGFueSAiYWNjZXNzZWQiIGFuZCAiZGlydHkiIGJpdHMuCisgKgorICogTGludXggb24gdGhlIG90aGVyIGhhbmQgaGFzIGEgdGhyZWUgbGV2ZWwgcGFnZSB0YWJsZSBzdHJ1Y3R1cmUsIHdoaWNoIGNhbgorICogYmUgd3JhcHBlZCB0byBmaXQgYSB0d28gbGV2ZWwgcGFnZSB0YWJsZSBzdHJ1Y3R1cmUgZWFzaWx5IC0gdXNpbmcgdGhlIFBHRAorICogYW5kIFBURSBvbmx5LiAgSG93ZXZlciwgTGludXggYWxzbyBleHBlY3RzIG9uZSAiUFRFIiB0YWJsZSBwZXIgcGFnZSwgYW5kCisgKiBhdCBsZWFzdCBhICJkaXJ0eSIgYml0LgorICoKKyAqIFRoZXJlZm9yZSwgd2UgdHdlYWsgdGhlIGltcGxlbWVudGF0aW9uIHNsaWdodGx5IC0gd2UgdGVsbCBMaW51eCB0aGF0IHdlCisgKiBoYXZlIDIwNDggZW50cmllcyBpbiB0aGUgZmlyc3QgbGV2ZWwsIGVhY2ggb2Ygd2hpY2ggaXMgOCBieXRlcyAoaW93LCB0d28KKyAqIGhhcmR3YXJlIHBvaW50ZXJzIHRvIHRoZSBzZWNvbmQgbGV2ZWwuKSAgVGhlIHNlY29uZCBsZXZlbCBjb250YWlucyB0d28KKyAqIGhhcmR3YXJlIFBURSB0YWJsZXMgYXJyYW5nZWQgY29udGlndW91c2x5LCBmb2xsb3dlZCBieSBMaW51eCB2ZXJzaW9ucworICogd2hpY2ggY29udGFpbiB0aGUgc3RhdGUgaW5mb3JtYXRpb24gTGludXggbmVlZHMuICBXZSwgdGhlcmVmb3JlLCBlbmQgdXAKKyAqIHdpdGggNTEyIGVudHJpZXMgaW4gdGhlICJQVEUiIGxldmVsLgorICoKKyAqIFRoaXMgbGVhZHMgdG8gdGhlIHBhZ2UgdGFibGVzIGhhdmluZyB0aGUgZm9sbG93aW5nIGxheW91dDoKKyAqCisgKiAgICBwZ2QgICAgICAgICAgICAgcHRlCisgKiB8ICAgICAgICB8CisgKiArLS0tLS0tLS0rICswCisgKiB8ICAgICAgICB8LS0tLS0+ICstLS0tLS0tLS0tLS0rICswCisgKiArLSAtIC0gLSArICs0ICAgIHwgIGgvdyBwdCAwICB8CisgKiB8ICAgICAgICB8LS0tLS0+ICstLS0tLS0tLS0tLS0rICsxMDI0CisgKiArLS0tLS0tLS0rICs4ICAgIHwgIGgvdyBwdCAxICB8CisgKiB8ICAgICAgICB8ICAgICAgICstLS0tLS0tLS0tLS0rICsyMDQ4CisgKiArLSAtIC0gLSArICAgICAgIHwgTGludXggcHQgMCB8CisgKiB8ICAgICAgICB8ICAgICAgICstLS0tLS0tLS0tLS0rICszMDcyCisgKiArLS0tLS0tLS0rICAgICAgIHwgTGludXggcHQgMSB8CisgKiB8ICAgICAgICB8ICAgICAgICstLS0tLS0tLS0tLS0rICs0MDk2CisgKgorICogU2VlIExfUFRFX3h4eCBiZWxvdyBmb3IgZGVmaW5pdGlvbnMgb2YgYml0cyBpbiB0aGUgIkxpbnV4IHB0IiwgYW5kCisgKiBQVEVfeHh4IGZvciBkZWZpbml0aW9ucyBvZiBiaXRzIGFwcGVhcmluZyBpbiB0aGUgImgvdyBwdCIuCisgKgorICogUE1EX3h4eCBkZWZpbml0aW9ucyByZWZlciB0byBiaXRzIGluIHRoZSBmaXJzdCBsZXZlbCBwYWdlIHRhYmxlLgorICoKKyAqIFRoZSAiZGlydHkiIGJpdCBpcyBlbXVsYXRlZCBieSBvbmx5IGdyYW50aW5nIGhhcmR3YXJlIHdyaXRlIHBlcm1pc3Npb24KKyAqIGlmZiB0aGUgcGFnZSBpcyBtYXJrZWQgIndyaXRhYmxlIiBhbmQgImRpcnR5IiBpbiB0aGUgTGludXggUFRFLiAgVGhpcworICogbWVhbnMgdGhhdCBhIHdyaXRlIHRvIGEgY2xlYW4gcGFnZSB3aWxsIGNhdXNlIGEgcGVybWlzc2lvbiBmYXVsdCwgYW5kCisgKiB0aGUgTGludXggTU0gbGF5ZXIgd2lsbCBtYXJrIHRoZSBwYWdlIGRpcnR5IHZpYSBoYW5kbGVfcHRlX2ZhdWx0KCkuCisgKiBGb3IgdGhlIGhhcmR3YXJlIHRvIG5vdGljZSB0aGUgcGVybWlzc2lvbiBjaGFuZ2UsIHRoZSBUTEIgZW50cnkgbXVzdAorICogYmUgZmx1c2hlZCwgYW5kIHB0ZXBfZXN0YWJsaXNoKCkgZG9lcyB0aGF0IGZvciB1cy4KKyAqCisgKiBUaGUgImFjY2Vzc2VkIiBvciAieW91bmciIGJpdCBpcyBlbXVsYXRlZCBieSBhIHNpbWlsYXIgbWV0aG9kOyB3ZSBvbmx5CisgKiBhbGxvdyBhY2Nlc3NlcyB0byB0aGUgcGFnZSBpZiB0aGUgInlvdW5nIiBiaXQgaXMgc2V0LiAgQWNjZXNzZXMgdG8gdGhlCisgKiBwYWdlIHdpbGwgY2F1c2UgYSBmYXVsdCwgYW5kIGhhbmRsZV9wdGVfZmF1bHQoKSB3aWxsIHNldCB0aGUgeW91bmcgYml0CisgKiBmb3IgdXMgYXMgbG9uZyBhcyB0aGUgcGFnZSBpcyBtYXJrZWQgcHJlc2VudCBpbiB0aGUgY29ycmVzcG9uZGluZyBMaW51eAorICogUFRFIGVudHJ5LiAgQWdhaW4sIHB0ZXBfZXN0YWJsaXNoKCkgd2lsbCBlbnN1cmUgdGhhdCB0aGUgVExCIGlzIHVwIHRvCisgKiBkYXRlLgorICoKKyAqIEhvd2V2ZXIsIHdoZW4gdGhlICJ5b3VuZyIgYml0IGlzIGNsZWFyZWQsIHdlIGRlbnkgYWNjZXNzIHRvIHRoZSBwYWdlCisgKiBieSBjbGVhcmluZyB0aGUgaGFyZHdhcmUgUFRFLiAgQ3VycmVudGx5IExpbnV4IGRvZXMgbm90IGZsdXNoIHRoZSBUTEIKKyAqIGZvciB1cyBpbiB0aGlzIGNhc2UsIHdoaWNoIG1lYW5zIHRoZSBUTEIgd2lsbCByZXRhaW4gdGhlIHRyYW5zYXRpb24KKyAqIHVudGlsIGVpdGhlciB0aGUgVExCIGVudHJ5IGlzIGV2aWN0ZWQgdW5kZXIgcHJlc3N1cmUsIG9yIGEgY29udGV4dAorICogc3dpdGNoIHdoaWNoIGNoYW5nZXMgdGhlIHVzZXIgc3BhY2UgbWFwcGluZyBvY2N1cnMuCisgKi8KKyNkZWZpbmUgUFRSU19QRVJfUFRFCQk1MTIKKyNkZWZpbmUgUFRSU19QRVJfUE1ECQkxCisjZGVmaW5lIFBUUlNfUEVSX1BHRAkJMjA0OAorCisvKgorICogUE1EX1NISUZUIGRldGVybWluZXMgdGhlIHNpemUgb2YgdGhlIGFyZWEgYSBzZWNvbmQtbGV2ZWwgcGFnZSB0YWJsZSBjYW4gbWFwCisgKiBQR0RJUl9TSElGVCBkZXRlcm1pbmVzIHdoYXQgYSB0aGlyZC1sZXZlbCBwYWdlIHRhYmxlIGVudHJ5IGNhbiBtYXAKKyAqLworI2RlZmluZSBQTURfU0hJRlQJCTIxCisjZGVmaW5lIFBHRElSX1NISUZUCQkyMQorCisjZGVmaW5lIExJQlJBUllfVEVYVF9TVEFSVAkweDBjMDAwMDAwCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitleHRlcm4gdm9pZCBfX3B0ZV9lcnJvcihjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgdW5zaWduZWQgbG9uZyB2YWwpOworZXh0ZXJuIHZvaWQgX19wbWRfZXJyb3IoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIHVuc2lnbmVkIGxvbmcgdmFsKTsKK2V4dGVybiB2b2lkIF9fcGdkX2Vycm9yKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCB1bnNpZ25lZCBsb25nIHZhbCk7CisKKyNkZWZpbmUgcHRlX0VSUk9SKHB0ZSkJCV9fcHRlX2Vycm9yKF9fRklMRV9fLCBfX0xJTkVfXywgcHRlX3ZhbChwdGUpKQorI2RlZmluZSBwbWRfRVJST1IocG1kKQkJX19wbWRfZXJyb3IoX19GSUxFX18sIF9fTElORV9fLCBwbWRfdmFsKHBtZCkpCisjZGVmaW5lIHBnZF9FUlJPUihwZ2QpCQlfX3BnZF9lcnJvcihfX0ZJTEVfXywgX19MSU5FX18sIHBnZF92YWwocGdkKSkKKyNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCisKKyNkZWZpbmUgUE1EX1NJWkUJCSgxVUwgPDwgUE1EX1NISUZUKQorI2RlZmluZSBQTURfTUFTSwkJKH4oUE1EX1NJWkUtMSkpCisjZGVmaW5lIFBHRElSX1NJWkUJCSgxVUwgPDwgUEdESVJfU0hJRlQpCisjZGVmaW5lIFBHRElSX01BU0sJCSh+KFBHRElSX1NJWkUtMSkpCisKKyNkZWZpbmUgRklSU1RfVVNFUl9QR0RfTlIJMQorI2RlZmluZSBVU0VSX1BUUlNfUEVSX1BHRAkoKFRBU0tfU0laRS9QR0RJUl9TSVpFKSAtIEZJUlNUX1VTRVJfUEdEX05SKQorCisvKgorICogQVJNdjYgc3VwZXJzZWN0aW9uIGFkZHJlc3MgbWFzayBhbmQgc2l6ZSBkZWZpbml0aW9ucy4KKyAqLworI2RlZmluZSBTVVBFUlNFQ1RJT05fU0hJRlQJMjQKKyNkZWZpbmUgU1VQRVJTRUNUSU9OX1NJWkUJKDFVTCA8PCBTVVBFUlNFQ1RJT05fU0hJRlQpCisjZGVmaW5lIFNVUEVSU0VDVElPTl9NQVNLCSh+KFNVUEVSU0VDVElPTl9TSVpFLTEpKQorCisvKgorICogSGFyZHdhcmUgcGFnZSB0YWJsZSBkZWZpbml0aW9ucy4KKyAqCisgKiArIExldmVsIDEgZGVzY3JpcHRvciAoUE1EKQorICogICAtIGNvbW1vbgorICovCisjZGVmaW5lIFBNRF9UWVBFX01BU0sJCSgzIDw8IDApCisjZGVmaW5lIFBNRF9UWVBFX0ZBVUxUCQkoMCA8PCAwKQorI2RlZmluZSBQTURfVFlQRV9UQUJMRQkJKDEgPDwgMCkKKyNkZWZpbmUgUE1EX1RZUEVfU0VDVAkJKDIgPDwgMCkKKyNkZWZpbmUgUE1EX0JJVDQJCSgxIDw8IDQpCisjZGVmaW5lIFBNRF9ET01BSU4oeCkJCSgoeCkgPDwgNSkKKyNkZWZpbmUgUE1EX1BST1RFQ1RJT04JCSgxIDw8IDkpCS8qIHY1ICovCisvKgorICogICAtIHNlY3Rpb24KKyAqLworI2RlZmluZSBQTURfU0VDVF9CVUZGRVJBQkxFCSgxIDw8IDIpCisjZGVmaW5lIFBNRF9TRUNUX0NBQ0hFQUJMRQkoMSA8PCAzKQorI2RlZmluZSBQTURfU0VDVF9BUF9XUklURQkoMSA8PCAxMCkKKyNkZWZpbmUgUE1EX1NFQ1RfQVBfUkVBRAkoMSA8PCAxMSkKKyNkZWZpbmUgUE1EX1NFQ1RfVEVYKHgpCQkoKHgpIDw8IDEyKQkvKiB2NSAqLworI2RlZmluZSBQTURfU0VDVF9BUFgJCSgxIDw8IDE1KQkvKiB2NiAqLworI2RlZmluZSBQTURfU0VDVF9TCQkoMSA8PCAxNikJLyogdjYgKi8KKyNkZWZpbmUgUE1EX1NFQ1RfbkcJCSgxIDw8IDE3KQkvKiB2NiAqLworI2RlZmluZSBQTURfU0VDVF9TVVBFUgkJKDEgPDwgMTgpCS8qIHY2ICovCisKKyNkZWZpbmUgUE1EX1NFQ1RfVU5DQUNIRUQJKDApCisjZGVmaW5lIFBNRF9TRUNUX0JVRkZFUkVECShQTURfU0VDVF9CVUZGRVJBQkxFKQorI2RlZmluZSBQTURfU0VDVF9XVAkJKFBNRF9TRUNUX0NBQ0hFQUJMRSkKKyNkZWZpbmUgUE1EX1NFQ1RfV0IJCShQTURfU0VDVF9DQUNIRUFCTEUgfCBQTURfU0VDVF9CVUZGRVJBQkxFKQorI2RlZmluZSBQTURfU0VDVF9NSU5JQ0FDSEUJKFBNRF9TRUNUX1RFWCgxKSB8IFBNRF9TRUNUX0NBQ0hFQUJMRSkKKyNkZWZpbmUgUE1EX1NFQ1RfV0JXQQkJKFBNRF9TRUNUX1RFWCgxKSB8IFBNRF9TRUNUX0NBQ0hFQUJMRSB8IFBNRF9TRUNUX0JVRkZFUkFCTEUpCisKKy8qCisgKiAgIC0gY29hcnNlIHRhYmxlIChub3QgdXNlZCkKKyAqLworCisvKgorICogKyBMZXZlbCAyIGRlc2NyaXB0b3IgKFBURSkKKyAqICAgLSBjb21tb24KKyAqLworI2RlZmluZSBQVEVfVFlQRV9NQVNLCQkoMyA8PCAwKQorI2RlZmluZSBQVEVfVFlQRV9GQVVMVAkJKDAgPDwgMCkKKyNkZWZpbmUgUFRFX1RZUEVfTEFSR0UJCSgxIDw8IDApCisjZGVmaW5lIFBURV9UWVBFX1NNQUxMCQkoMiA8PCAwKQorI2RlZmluZSBQVEVfVFlQRV9FWFQJCSgzIDw8IDApCS8qIHY1ICovCisjZGVmaW5lIFBURV9CVUZGRVJBQkxFCQkoMSA8PCAyKQorI2RlZmluZSBQVEVfQ0FDSEVBQkxFCQkoMSA8PCAzKQorCisvKgorICogICAtIGV4dGVuZGVkIHNtYWxsIHBhZ2UvdGlueSBwYWdlCisgKi8KKyNkZWZpbmUgUFRFX0VYVF9BUF9NQVNLCQkoMyA8PCA0KQorI2RlZmluZSBQVEVfRVhUX0FQX1VOT19TUk8JKDAgPDwgNCkKKyNkZWZpbmUgUFRFX0VYVF9BUF9VTk9fU1JXCSgxIDw8IDQpCisjZGVmaW5lIFBURV9FWFRfQVBfVVJPX1NSVwkoMiA8PCA0KQorI2RlZmluZSBQVEVfRVhUX0FQX1VSV19TUlcJKDMgPDwgNCkKKyNkZWZpbmUgUFRFX0VYVF9URVgoeCkJCSgoeCkgPDwgNikJLyogdjUgKi8KKworLyoKKyAqICAgLSBzbWFsbCBwYWdlCisgKi8KKyNkZWZpbmUgUFRFX1NNQUxMX0FQX01BU0sJKDB4ZmYgPDwgNCkKKyNkZWZpbmUgUFRFX1NNQUxMX0FQX1VOT19TUk8JKDB4MDAgPDwgNCkKKyNkZWZpbmUgUFRFX1NNQUxMX0FQX1VOT19TUlcJKDB4NTUgPDwgNCkKKyNkZWZpbmUgUFRFX1NNQUxMX0FQX1VST19TUlcJKDB4YWEgPDwgNCkKKyNkZWZpbmUgUFRFX1NNQUxMX0FQX1VSV19TUlcJKDB4ZmYgPDwgNCkKKworLyoKKyAqICJMaW51eCIgUFRFIGRlZmluaXRpb25zLgorICoKKyAqIFdlIGtlZXAgdHdvIHNldHMgb2YgUFRFcyAtIHRoZSBoYXJkd2FyZSBhbmQgdGhlIGxpbnV4IHZlcnNpb24uCisgKiBUaGlzIGFsbG93cyBncmVhdGVyIGZsZXhpYmlsaXR5IGluIHRoZSB3YXkgd2UgbWFwIHRoZSBMaW51eCBiaXRzCisgKiBvbnRvIHRoZSBoYXJkd2FyZSB0YWJsZXMsIGFuZCBhbGxvd3MgdXMgdG8gaGF2ZSBZT1VORyBhbmQgRElSVFkKKyAqIGJpdHMuCisgKgorICogVGhlIFBURSB0YWJsZSBwb2ludGVyIHJlZmVycyB0byB0aGUgaGFyZHdhcmUgZW50cmllczsgdGhlICJMaW51eCIKKyAqIGVudHJpZXMgYXJlIHN0b3JlZCAxMDI0IGJ5dGVzIGJlbG93LgorICovCisjZGVmaW5lIExfUFRFX1BSRVNFTlQJCSgxIDw8IDApCisjZGVmaW5lIExfUFRFX0ZJTEUJCSgxIDw8IDEpCS8qIG9ubHkgd2hlbiAhUFJFU0VOVCAqLworI2RlZmluZSBMX1BURV9ZT1VORwkJKDEgPDwgMSkKKyNkZWZpbmUgTF9QVEVfQlVGRkVSQUJMRQkoMSA8PCAyKQkvKiBtYXRjaGVzIFBURSAqLworI2RlZmluZSBMX1BURV9DQUNIRUFCTEUJCSgxIDw8IDMpCS8qIG1hdGNoZXMgUFRFICovCisjZGVmaW5lIExfUFRFX1VTRVIJCSgxIDw8IDQpCisjZGVmaW5lIExfUFRFX1dSSVRFCQkoMSA8PCA1KQorI2RlZmluZSBMX1BURV9FWEVDCQkoMSA8PCA2KQorI2RlZmluZSBMX1BURV9ESVJUWQkJKDEgPDwgNykKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworI2luY2x1ZGUgPGFzbS9kb21haW4uaD4KKworI2RlZmluZSBfUEFHRV9VU0VSX1RBQkxFCShQTURfVFlQRV9UQUJMRSB8IFBNRF9CSVQ0IHwgUE1EX0RPTUFJTihET01BSU5fVVNFUikpCisjZGVmaW5lIF9QQUdFX0tFUk5FTF9UQUJMRQkoUE1EX1RZUEVfVEFCTEUgfCBQTURfQklUNCB8IFBNRF9ET01BSU4oRE9NQUlOX0tFUk5FTCkpCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIG1hY3JvcyBoYW5kbGUgdGhlIGNhY2hlIGFuZCBidWZmZXJhYmxlIGJpdHMuLi4KKyAqLworI2RlZmluZSBfTF9QVEVfREVGQVVMVAlMX1BURV9QUkVTRU5UIHwgTF9QVEVfWU9VTkcgfCBMX1BURV9DQUNIRUFCTEUgfCBMX1BURV9CVUZGRVJBQkxFCisjZGVmaW5lIF9MX1BURV9SRUFECUxfUFRFX1VTRVIgfCBMX1BURV9FWEVDCisKK2V4dGVybiBwZ3Byb3RfdAkJcGdwcm90X2tlcm5lbDsKKworI2RlZmluZSBQQUdFX05PTkUgICAgICAgX19wZ3Byb3QoX0xfUFRFX0RFRkFVTFQpCisjZGVmaW5lIFBBR0VfQ09QWSAgICAgICBfX3BncHJvdChfTF9QVEVfREVGQVVMVCB8IF9MX1BURV9SRUFEKQorI2RlZmluZSBQQUdFX1NIQVJFRCAgICAgX19wZ3Byb3QoX0xfUFRFX0RFRkFVTFQgfCBfTF9QVEVfUkVBRCB8IExfUFRFX1dSSVRFKQorI2RlZmluZSBQQUdFX1JFQURPTkxZICAgX19wZ3Byb3QoX0xfUFRFX0RFRkFVTFQgfCBfTF9QVEVfUkVBRCkKKyNkZWZpbmUgUEFHRV9LRVJORUwJcGdwcm90X2tlcm5lbAorCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKy8qCisgKiBUaGUgdGFibGUgYmVsb3cgZGVmaW5lcyB0aGUgcGFnZSBwcm90ZWN0aW9uIGxldmVscyB0aGF0IHdlIGluc2VydCBpbnRvIG91cgorICogTGludXggcGFnZSB0YWJsZSB2ZXJzaW9uLiAgVGhlc2UgZ2V0IHRyYW5zbGF0ZWQgaW50byB0aGUgYmVzdCB0aGF0IHRoZQorICogYXJjaGl0ZWN0dXJlIGNhbiBwZXJmb3JtLiAgTm90ZSB0aGF0IG9uIG1vc3QgQVJNIGhhcmR3YXJlOgorICogIDEpIFdlIGNhbm5vdCBkbyBleGVjdXRlIHByb3RlY3Rpb24KKyAqICAyKSBJZiB3ZSBjb3VsZCBkbyBleGVjdXRlIHByb3RlY3Rpb24sIHRoZW4gcmVhZCBpcyBpbXBsaWVkCisgKiAgMykgd3JpdGUgaW1wbGllcyByZWFkIHBlcm1pc3Npb25zCisgKi8KKyNkZWZpbmUgX19QMDAwICBQQUdFX05PTkUKKyNkZWZpbmUgX19QMDAxICBQQUdFX1JFQURPTkxZCisjZGVmaW5lIF9fUDAxMCAgUEFHRV9DT1BZCisjZGVmaW5lIF9fUDAxMSAgUEFHRV9DT1BZCisjZGVmaW5lIF9fUDEwMCAgUEFHRV9SRUFET05MWQorI2RlZmluZSBfX1AxMDEgIFBBR0VfUkVBRE9OTFkKKyNkZWZpbmUgX19QMTEwICBQQUdFX0NPUFkKKyNkZWZpbmUgX19QMTExICBQQUdFX0NPUFkKKworI2RlZmluZSBfX1MwMDAgIFBBR0VfTk9ORQorI2RlZmluZSBfX1MwMDEgIFBBR0VfUkVBRE9OTFkKKyNkZWZpbmUgX19TMDEwICBQQUdFX1NIQVJFRAorI2RlZmluZSBfX1MwMTEgIFBBR0VfU0hBUkVECisjZGVmaW5lIF9fUzEwMCAgUEFHRV9SRUFET05MWQorI2RlZmluZSBfX1MxMDEgIFBBR0VfUkVBRE9OTFkKKyNkZWZpbmUgX19TMTEwICBQQUdFX1NIQVJFRAorI2RlZmluZSBfX1MxMTEgIFBBR0VfU0hBUkVECisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisvKgorICogWkVST19QQUdFIGlzIGEgZ2xvYmFsIHNoYXJlZCBwYWdlIHRoYXQgaXMgYWx3YXlzIHplcm86IHVzZWQKKyAqIGZvciB6ZXJvLW1hcHBlZCBtZW1vcnkgYXJlYXMgZXRjLi4KKyAqLworZXh0ZXJuIHN0cnVjdCBwYWdlICplbXB0eV96ZXJvX3BhZ2U7CisjZGVmaW5lIFpFUk9fUEFHRSh2YWRkcikJKGVtcHR5X3plcm9fcGFnZSkKKworI2RlZmluZSBwdGVfcGZuKHB0ZSkJCShwdGVfdmFsKHB0ZSkgPj4gUEFHRV9TSElGVCkKKyNkZWZpbmUgcGZuX3B0ZShwZm4scHJvdCkJKF9fcHRlKCgocGZuKSA8PCBQQUdFX1NISUZUKSB8IHBncHJvdF92YWwocHJvdCkpKQorCisjZGVmaW5lIHB0ZV9ub25lKHB0ZSkJCSghcHRlX3ZhbChwdGUpKQorI2RlZmluZSBwdGVfY2xlYXIobW0sYWRkcixwdGVwKQlzZXRfcHRlX2F0KChtbSksKGFkZHIpLChwdGVwKSwgX19wdGUoMCkpCisjZGVmaW5lIHB0ZV9wYWdlKHB0ZSkJCShwZm5fdG9fcGFnZShwdGVfcGZuKHB0ZSkpKQorI2RlZmluZSBwdGVfb2Zmc2V0X2tlcm5lbChkaXIsYWRkcikJKHBtZF9wYWdlX2tlcm5lbCgqKGRpcikpICsgX19wdGVfaW5kZXgoYWRkcikpCisjZGVmaW5lIHB0ZV9vZmZzZXRfbWFwKGRpcixhZGRyKQkocG1kX3BhZ2Vfa2VybmVsKCooZGlyKSkgKyBfX3B0ZV9pbmRleChhZGRyKSkKKyNkZWZpbmUgcHRlX29mZnNldF9tYXBfbmVzdGVkKGRpcixhZGRyKQkocG1kX3BhZ2Vfa2VybmVsKCooZGlyKSkgKyBfX3B0ZV9pbmRleChhZGRyKSkKKyNkZWZpbmUgcHRlX3VubWFwKHB0ZSkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgcHRlX3VubWFwX25lc3RlZChwdGUpCWRvIHsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBzZXRfcHRlKHB0ZXAsIHB0ZSkJY3B1X3NldF9wdGUocHRlcCxwdGUpCisjZGVmaW5lIHNldF9wdGVfYXQobW0sYWRkcixwdGVwLHB0ZXZhbCkgc2V0X3B0ZShwdGVwLHB0ZXZhbCkKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgb25seSB3b3JrIGlmIHB0ZV9wcmVzZW50KCkgaXMgdHJ1ZS4KKyAqIFVuZGVmaW5lZCBiZWhhdmlvdXIgaWYgbm90Li4KKyAqLworI2RlZmluZSBwdGVfcHJlc2VudChwdGUpCShwdGVfdmFsKHB0ZSkgJiBMX1BURV9QUkVTRU5UKQorI2RlZmluZSBwdGVfcmVhZChwdGUpCQkocHRlX3ZhbChwdGUpICYgTF9QVEVfVVNFUikKKyNkZWZpbmUgcHRlX3dyaXRlKHB0ZSkJCShwdGVfdmFsKHB0ZSkgJiBMX1BURV9XUklURSkKKyNkZWZpbmUgcHRlX2V4ZWMocHRlKQkJKHB0ZV92YWwocHRlKSAmIExfUFRFX0VYRUMpCisjZGVmaW5lIHB0ZV9kaXJ0eShwdGUpCQkocHRlX3ZhbChwdGUpICYgTF9QVEVfRElSVFkpCisjZGVmaW5lIHB0ZV95b3VuZyhwdGUpCQkocHRlX3ZhbChwdGUpICYgTF9QVEVfWU9VTkcpCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIG9ubHkgd29ya3MgaWYgcHRlX3ByZXNlbnQoKSBpcyBub3QgdHJ1ZS4KKyAqLworI2RlZmluZSBwdGVfZmlsZShwdGUpCQkocHRlX3ZhbChwdGUpICYgTF9QVEVfRklMRSkKKyNkZWZpbmUgcHRlX3RvX3Bnb2ZmKHgpCQkocHRlX3ZhbCh4KSA+PiAyKQorI2RlZmluZSBwZ29mZl90b19wdGUoeCkJCV9fcHRlKCgoeCkgPDwgMikgfCBMX1BURV9GSUxFKQorCisjZGVmaW5lIFBURV9GSUxFX01BWF9CSVRTCTMwCisKKyNkZWZpbmUgUFRFX0JJVF9GVU5DKGZuLG9wKSBcCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV8jI2ZuKHB0ZV90IHB0ZSkgeyBwdGVfdmFsKHB0ZSkgb3A7IHJldHVybiBwdGU7IH0KKworLypQVEVfQklUX0ZVTkMocmRwcm90ZWN0LCAmPSB+TF9QVEVfVVNFUik7Ki8KKy8qUFRFX0JJVF9GVU5DKG1rcmVhZCwgICAgfD0gTF9QVEVfVVNFUik7Ki8KK1BURV9CSVRfRlVOQyh3cnByb3RlY3QsICY9IH5MX1BURV9XUklURSk7CitQVEVfQklUX0ZVTkMobWt3cml0ZSwgICB8PSBMX1BURV9XUklURSk7CitQVEVfQklUX0ZVTkMoZXhwcm90ZWN0LCAmPSB+TF9QVEVfRVhFQyk7CitQVEVfQklUX0ZVTkMobWtleGVjLCAgICB8PSBMX1BURV9FWEVDKTsKK1BURV9CSVRfRlVOQyhta2NsZWFuLCAgICY9IH5MX1BURV9ESVJUWSk7CitQVEVfQklUX0ZVTkMobWtkaXJ0eSwgICB8PSBMX1BURV9ESVJUWSk7CitQVEVfQklUX0ZVTkMobWtvbGQsICAgICAmPSB+TF9QVEVfWU9VTkcpOworUFRFX0JJVF9GVU5DKG1reW91bmcsICAgfD0gTF9QVEVfWU9VTkcpOworCisvKgorICogTWFyayB0aGUgcHJvdCB2YWx1ZSBhcyB1bmNhY2hlYWJsZSBhbmQgdW5idWZmZXJhYmxlLgorICovCisjZGVmaW5lIHBncHJvdF9ub25jYWNoZWQocHJvdCkJX19wZ3Byb3QocGdwcm90X3ZhbChwcm90KSAmIH4oTF9QVEVfQ0FDSEVBQkxFIHwgTF9QVEVfQlVGRkVSQUJMRSkpCisjZGVmaW5lIHBncHJvdF93cml0ZWNvbWJpbmUocHJvdCkgX19wZ3Byb3QocGdwcm90X3ZhbChwcm90KSAmIH5MX1BURV9DQUNIRUFCTEUpCisKKyNkZWZpbmUgcG1kX25vbmUocG1kKQkJKCFwbWRfdmFsKHBtZCkpCisjZGVmaW5lIHBtZF9wcmVzZW50KHBtZCkJKHBtZF92YWwocG1kKSkKKyNkZWZpbmUgcG1kX2JhZChwbWQpCQkocG1kX3ZhbChwbWQpICYgMikKKworI2RlZmluZSBjb3B5X3BtZChwbWRwZCxwbWRwcykJCVwKKwlkbyB7CQkJCVwKKwkJcG1kcGRbMF0gPSBwbWRwc1swXTsJXAorCQlwbWRwZFsxXSA9IHBtZHBzWzFdOwlcCisJCWZsdXNoX3BtZF9lbnRyeShwbWRwZCk7CVwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIHBtZF9jbGVhcihwbWRwKQkJCVwKKwlkbyB7CQkJCVwKKwkJcG1kcFswXSA9IF9fcG1kKDApOwlcCisJCXBtZHBbMV0gPSBfX3BtZCgwKTsJXAorCQljbGVhbl9wbWRfZW50cnkocG1kcCk7CVwKKwl9IHdoaWxlICgwKQorCitzdGF0aWMgaW5saW5lIHB0ZV90ICpwbWRfcGFnZV9rZXJuZWwocG1kX3QgcG1kKQoreworCXVuc2lnbmVkIGxvbmcgcHRyOworCisJcHRyID0gcG1kX3ZhbChwbWQpICYgfihQVFJTX1BFUl9QVEUgKiBzaXplb2Yodm9pZCAqKSAtIDEpOworCXB0ciArPSBQVFJTX1BFUl9QVEUgKiBzaXplb2Yodm9pZCAqKTsKKworCXJldHVybiBfX3ZhKHB0cik7Cit9CisKKyNkZWZpbmUgcG1kX3BhZ2UocG1kKSB2aXJ0X3RvX3BhZ2UoX192YShwbWRfdmFsKHBtZCkpKQorCisvKgorICogUGVybWFuZW50IGFkZHJlc3Mgb2YgYSBwYWdlLiBXZSBuZXZlciBoYXZlIGhpZ2htZW0sIHNvIHRoaXMgaXMgdHJpdmlhbC4KKyAqLworI2RlZmluZSBwYWdlc190b19tYih4KQkJKCh4KSA+PiAoMjAgLSBQQUdFX1NISUZUKSkKKworLyoKKyAqIENvbnZlcnNpb24gZnVuY3Rpb25zOiBjb252ZXJ0IGEgcGFnZSBhbmQgcHJvdGVjdGlvbiB0byBhIHBhZ2UgZW50cnksCisgKiBhbmQgYSBwYWdlIGVudHJ5IGFuZCBwYWdlIGRpcmVjdG9yeSB0byB0aGUgcGFnZSB0aGV5IHJlZmVyIHRvLgorICovCisjZGVmaW5lIG1rX3B0ZShwYWdlLHByb3QpCXBmbl9wdGUocGFnZV90b19wZm4ocGFnZSkscHJvdCkKKworLyoKKyAqIFRoZSAicGdkX3h4eCgpIiBmdW5jdGlvbnMgaGVyZSBhcmUgdHJpdmlhbCBmb3IgYSBmb2xkZWQgdHdvLWxldmVsCisgKiBzZXR1cDogdGhlIHBnZCBpcyBuZXZlciBiYWQsIGFuZCBhIHBtZCBhbHdheXMgZXhpc3RzIChhcyBpdCdzIGZvbGRlZAorICogaW50byB0aGUgcGdkIGVudHJ5KQorICovCisjZGVmaW5lIHBnZF9ub25lKHBnZCkJCSgwKQorI2RlZmluZSBwZ2RfYmFkKHBnZCkJCSgwKQorI2RlZmluZSBwZ2RfcHJlc2VudChwZ2QpCSgxKQorI2RlZmluZSBwZ2RfY2xlYXIocGdkcCkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgc2V0X3BnZChwZ2QscGdkcCkJZG8geyB9IHdoaWxlICgwKQorCisjZGVmaW5lIHBhZ2VfcHRlX3Byb3QocGFnZSxwcm90KQlta19wdGUocGFnZSwgcHJvdCkKKyNkZWZpbmUgcGFnZV9wdGUocGFnZSkJCW1rX3B0ZShwYWdlLCBfX3BncHJvdCgwKSkKKworLyogdG8gZmluZCBhbiBlbnRyeSBpbiBhIHBhZ2UtdGFibGUtZGlyZWN0b3J5ICovCisjZGVmaW5lIHBnZF9pbmRleChhZGRyKQkJKChhZGRyKSA+PiBQR0RJUl9TSElGVCkKKworI2RlZmluZSBwZ2Rfb2Zmc2V0KG1tLCBhZGRyKQkoKG1tKS0+cGdkK3BnZF9pbmRleChhZGRyKSkKKworLyogdG8gZmluZCBhbiBlbnRyeSBpbiBhIGtlcm5lbCBwYWdlLXRhYmxlLWRpcmVjdG9yeSAqLworI2RlZmluZSBwZ2Rfb2Zmc2V0X2soYWRkcikJcGdkX29mZnNldCgmaW5pdF9tbSwgYWRkcikKKworLyogRmluZCBhbiBlbnRyeSBpbiB0aGUgc2Vjb25kLWxldmVsIHBhZ2UgdGFibGUuLiAqLworI2RlZmluZSBwbWRfb2Zmc2V0KGRpciwgYWRkcikJKChwbWRfdCAqKShkaXIpKQorCisvKiBGaW5kIGFuIGVudHJ5IGluIHRoZSB0aGlyZC1sZXZlbCBwYWdlIHRhYmxlLi4gKi8KKyNkZWZpbmUgX19wdGVfaW5kZXgoYWRkcikJKCgoYWRkcikgPj4gUEFHRV9TSElGVCkgJiAoUFRSU19QRVJfUFRFIC0gMSkpCisKK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21vZGlmeShwdGVfdCBwdGUsIHBncHJvdF90IG5ld3Byb3QpCit7CisJY29uc3QgdW5zaWduZWQgbG9uZyBtYXNrID0gTF9QVEVfRVhFQyB8IExfUFRFX1dSSVRFIHwgTF9QVEVfVVNFUjsKKwlwdGVfdmFsKHB0ZSkgPSAocHRlX3ZhbChwdGUpICYgfm1hc2spIHwgKHBncHJvdF92YWwobmV3cHJvdCkgJiBtYXNrKTsKKwlyZXR1cm4gcHRlOworfQorCitleHRlcm4gcGdkX3Qgc3dhcHBlcl9wZ19kaXJbUFRSU19QRVJfUEdEXTsKKworLyogRW5jb2RlIGFuZCBkZWNvZGUgYSBzd2FwIGVudHJ5LgorICoKKyAqIFdlIHN1cHBvcnQgdXAgdG8gMzJHQiBvZiBzd2FwIG9uIDRrIG1hY2hpbmVzCisgKi8KKyNkZWZpbmUgX19zd3BfdHlwZSh4KQkJKCgoeCkudmFsID4+IDIpICYgMHg3ZikKKyNkZWZpbmUgX19zd3Bfb2Zmc2V0KHgpCQkoKHgpLnZhbCA+PiA5KQorI2RlZmluZSBfX3N3cF9lbnRyeSh0eXBlLG9mZnNldCkgKChzd3BfZW50cnlfdCkgeyAoKHR5cGUpIDw8IDIpIHwgKChvZmZzZXQpIDw8IDkpIH0pCisjZGVmaW5lIF9fcHRlX3RvX3N3cF9lbnRyeShwdGUpCSgoc3dwX2VudHJ5X3QpIHsgcHRlX3ZhbChwdGUpIH0pCisjZGVmaW5lIF9fc3dwX2VudHJ5X3RvX3B0ZShzd3ApCSgocHRlX3QpIHsgKHN3cCkudmFsIH0pCisKKy8qIE5lZWRzIHRvIGJlIGRlZmluZWQgaGVyZSBhbmQgbm90IGluIGxpbnV4L21tLmgsIGFzIGl0IGlzIGFyY2ggZGVwZW5kZW50ICovCisvKiBGSVhNRTogdGhpcyBpcyBub3QgY29ycmVjdCAqLworI2RlZmluZSBrZXJuX2FkZHJfdmFsaWQoYWRkcikJKDEpCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wZ3RhYmxlLmg+CisKKy8qCisgKiBXZSBwcm92aWRlIG91ciBvd24gYXJjaF9nZXRfdW5tYXBwZWRfYXJlYSB0byBjb3BlIHdpdGggVklQVCBjYWNoZXMuCisgKi8KKyNkZWZpbmUgSEFWRV9BUkNIX1VOTUFQUEVEX0FSRUEKKworLyoKKyAqIHJlbWFwIGEgcGh5c2ljYWwgYWRkcmVzcyBgcGh5cycgb2Ygc2l6ZSBgc2l6ZScgd2l0aCBwYWdlIHByb3RlY3Rpb24gYHByb3QnCisgKiBpbnRvIHZpcnR1YWwgYWRkcmVzcyBgZnJvbScKKyAqLworI2RlZmluZSBpb19yZW1hcF9wYWdlX3JhbmdlKHZtYSxmcm9tLHBoeXMsc2l6ZSxwcm90KSBcCisJCXJlbWFwX3Bmbl9yYW5nZSh2bWEsIGZyb20sIChwaHlzKSA+PiBQQUdFX1NISUZULCBzaXplLCBwcm90KQorCisjZGVmaW5lIGlvX3JlbWFwX3Bmbl9yYW5nZSh2bWEsZnJvbSxwZm4sc2l6ZSxwcm90KSBcCisJCXJlbWFwX3Bmbl9yYW5nZSh2bWEsIGZyb20sIHBmbiwgc2l6ZSwgcHJvdCkKKworI2RlZmluZSBNS19JT1NQQUNFX1BGTihzcGFjZSwgcGZuKQkocGZuKQorI2RlZmluZSBHRVRfSU9TUEFDRShwZm4pCQkwCisjZGVmaW5lIEdFVF9QRk4ocGZuKQkJCShwZm4pCisKKyNkZWZpbmUgcGd0YWJsZV9jYWNoZV9pbml0KCkgZG8geyB9IHdoaWxlICgwKQorCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYgLyogX0FTTUFSTV9QR1RBQkxFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9wb2xsLmggYi9pbmNsdWRlL2FzbS1hcm0vcG9sbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3NDRjYTgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vcG9sbC5oCkBAIC0wLDAgKzEsMjYgQEAKKyNpZm5kZWYgX19BU01BUk1fUE9MTF9ICisjZGVmaW5lIF9fQVNNQVJNX1BPTExfSAorCisvKiBUaGVzZSBhcmUgc3BlY2lmaWVkIGJ5IGlCQ1MyICovCisjZGVmaW5lIFBPTExJTgkJMHgwMDAxCisjZGVmaW5lIFBPTExQUkkJCTB4MDAwMgorI2RlZmluZSBQT0xMT1VUCQkweDAwMDQKKyNkZWZpbmUgUE9MTEVSUgkJMHgwMDA4CisjZGVmaW5lIFBPTExIVVAJCTB4MDAxMAorI2RlZmluZSBQT0xMTlZBTAkweDAwMjAKKworLyogVGhlIHJlc3Qgc2VlbSB0byBiZSBtb3JlLW9yLWxlc3Mgbm9uc3RhbmRhcmQuIENoZWNrIHRoZW0hICovCisjZGVmaW5lIFBPTExSRE5PUk0JMHgwMDQwCisjZGVmaW5lIFBPTExSREJBTkQJMHgwMDgwCisjZGVmaW5lIFBPTExXUk5PUk0JMHgwMTAwCisjZGVmaW5lIFBPTExXUkJBTkQJMHgwMjAwCisjZGVmaW5lIFBPTExNU0cJCTB4MDQwMAorI2RlZmluZSBQT0xMUkVNT1ZFCTB4MTAwMAorCitzdHJ1Y3QgcG9sbGZkIHsKKwlpbnQgZmQ7CisJc2hvcnQgZXZlbnRzOworCXNob3J0IHJldmVudHM7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9wb3NpeF90eXBlcy5oIGIvaW5jbHVkZS9hc20tYXJtL3Bvc2l4X3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE0MmEyYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9wb3NpeF90eXBlcy5oCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL3Bvc2l4X3R5cGVzLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk2LTE5OTggUnVzc2VsbCBLaW5nLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIENoYW5nZWxvZzoKKyAqICAgMjctMDYtMTk5NglSTUsJQ3JlYXRlZAorICovCisjaWZuZGVmIF9fQVJDSF9BUk1fUE9TSVhfVFlQRVNfSAorI2RlZmluZSBfX0FSQ0hfQVJNX1BPU0lYX1RZUEVTX0gKKworLyoKKyAqIFRoaXMgZmlsZSBpcyBnZW5lcmFsbHkgdXNlZCBieSB1c2VyLWxldmVsIHNvZnR3YXJlLCBzbyB5b3UgbmVlZCB0bworICogYmUgYSBsaXR0bGUgY2FyZWZ1bCBhYm91dCBuYW1lc3BhY2UgcG9sbHV0aW9uIGV0Yy4gIEFsc28sIHdlIGNhbm5vdAorICogYXNzdW1lIEdDQyBpcyBiZWluZyB1c2VkLgorICovCisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZwkJX19rZXJuZWxfaW5vX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CQlfX2tlcm5lbF9tb2RlX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CQlfX2tlcm5lbF9ubGlua190OwordHlwZWRlZiBsb25nCQkJX19rZXJuZWxfb2ZmX3Q7Cit0eXBlZGVmIGludAkJCV9fa2VybmVsX3BpZF90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAkJX19rZXJuZWxfaXBjX3BpZF90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAkJX19rZXJuZWxfdWlkX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CQlfX2tlcm5lbF9naWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50CQlfX2tlcm5lbF9zaXplX3Q7Cit0eXBlZGVmIGludAkJCV9fa2VybmVsX3NzaXplX3Q7Cit0eXBlZGVmIGludAkJCV9fa2VybmVsX3B0cmRpZmZfdDsKK3R5cGVkZWYgbG9uZwkJCV9fa2VybmVsX3RpbWVfdDsKK3R5cGVkZWYgbG9uZwkJCV9fa2VybmVsX3N1c2Vjb25kc190OwordHlwZWRlZiBsb25nCQkJX19rZXJuZWxfY2xvY2tfdDsKK3R5cGVkZWYgaW50CQkJX19rZXJuZWxfdGltZXJfdDsKK3R5cGVkZWYgaW50CQkJX19rZXJuZWxfY2xvY2tpZF90OwordHlwZWRlZiBpbnQJCQlfX2tlcm5lbF9kYWRkcl90OwordHlwZWRlZiBjaGFyICoJCQlfX2tlcm5lbF9jYWRkcl90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAkJX19rZXJuZWxfdWlkMTZfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJCV9fa2VybmVsX2dpZDE2X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludAkJX19rZXJuZWxfdWlkMzJfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50CQlfX2tlcm5lbF9naWQzMl90OworCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CQlfX2tlcm5lbF9vbGRfdWlkX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CQlfX2tlcm5lbF9vbGRfZ2lkX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CQlfX2tlcm5lbF9vbGRfZGV2X3Q7CisKKyNpZmRlZiBfX0dOVUNfXwordHlwZWRlZiBsb25nIGxvbmcJCV9fa2VybmVsX2xvZmZfdDsKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCB7CisjaWYgZGVmaW5lZChfX0tFUk5FTF9fKSB8fCBkZWZpbmVkKF9fVVNFX0FMTCkKKwlpbnQJdmFsWzJdOworI2Vsc2UgLyogIWRlZmluZWQoX19LRVJORUxfXykgJiYgIWRlZmluZWQoX19VU0VfQUxMKSAqLworCWludAlfX3ZhbFsyXTsKKyNlbmRpZiAvKiAhZGVmaW5lZChfX0tFUk5FTF9fKSAmJiAhZGVmaW5lZChfX1VTRV9BTEwpICovCit9IF9fa2VybmVsX2ZzaWRfdDsKKworI2lmIGRlZmluZWQoX19LRVJORUxfXykgfHwgIWRlZmluZWQoX19HTElCQ19fKSB8fCAoX19HTElCQ19fIDwgMikKKworI3VuZGVmCV9fRkRfU0VUCisjZGVmaW5lIF9fRkRfU0VUKGZkLCBmZHNldHApIFwKKwkJKCgoZmRfc2V0ICopKGZkc2V0cCkpLT5mZHNfYml0c1soZmQpID4+IDVdIHw9ICgxPDwoKGZkKSAmIDMxKSkpCisKKyN1bmRlZglfX0ZEX0NMUgorI2RlZmluZSBfX0ZEX0NMUihmZCwgZmRzZXRwKSBcCisJCSgoKGZkX3NldCAqKShmZHNldHApKS0+ZmRzX2JpdHNbKGZkKSA+PiA1XSAmPSB+KDE8PCgoZmQpICYgMzEpKSkKKworI3VuZGVmCV9fRkRfSVNTRVQKKyNkZWZpbmUgX19GRF9JU1NFVChmZCwgZmRzZXRwKSBcCisJCSgoKChmZF9zZXQgKikoZmRzZXRwKSktPmZkc19iaXRzWyhmZCkgPj4gNV0gJiAoMTw8KChmZCkgJiAzMSkpKSAhPSAwKQorCisjdW5kZWYJX19GRF9aRVJPCisjZGVmaW5lIF9fRkRfWkVSTyhmZHNldHApIFwKKwkJKG1lbXNldCAoZmRzZXRwLCAwLCBzaXplb2YgKCooZmRfc2V0ICopKGZkc2V0cCkpKSkKKworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3Byb2MtZm5zLmggYi9pbmNsdWRlL2FzbS1hcm0vcHJvYy1mbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmVmMmJmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL3Byb2MtZm5zLmgKQEAgLTAsMCArMSwxNzQgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL3Byb2MtZm5zLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk3LTE5OTkgUnVzc2VsbCBLaW5nCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwIERlZXAgQmx1ZSBTb2x1dGlvbnMgTHRkCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2lmbmRlZiBfX0FTTV9QUk9DRk5TX0gKKyNkZWZpbmUgX19BU01fUFJPQ0ZOU19ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworLyoKKyAqIFdvcmsgb3V0IGlmIHdlIG5lZWQgbXVsdGlwbGUgQ1BVIHN1cHBvcnQKKyAqLworI3VuZGVmIE1VTFRJX0NQVQorI3VuZGVmIENQVV9OQU1FCisKKy8qCisgKiBDUFVfTkFNRSAtIHRoZSBwcmVmaXggZm9yIENQVSByZWxhdGVkIGZ1bmN0aW9ucworICovCisKKyNpZmRlZiBDT05GSUdfQ1BVXzMyCisjIGlmZGVmIENPTkZJR19DUFVfQVJNNjEwCisjICBpZmRlZiBDUFVfTkFNRQorIyAgIHVuZGVmICBNVUxUSV9DUFUKKyMgICBkZWZpbmUgTVVMVElfQ1BVCisjICBlbHNlCisjICAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm02CisjICBlbmRpZgorIyBlbmRpZgorIyBpZmRlZiBDT05GSUdfQ1BVX0FSTTcxMAorIyAgaWZkZWYgQ1BVX05BTUUKKyMgICB1bmRlZiAgTVVMVElfQ1BVCisjICAgZGVmaW5lIE1VTFRJX0NQVQorIyAgZWxzZQorIyAgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtNworIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWZkZWYgQ09ORklHX0NQVV9BUk03MjBUCisjICBpZmRlZiBDUFVfTkFNRQorIyAgIHVuZGVmICBNVUxUSV9DUFUKKyMgICBkZWZpbmUgTVVMVElfQ1BVCisjICBlbHNlCisjICAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm03MjAKKyMgIGVuZGlmCisjIGVuZGlmCisjIGlmZGVmIENPTkZJR19DUFVfQVJNOTIwVAorIyAgaWZkZWYgQ1BVX05BTUUKKyMgICB1bmRlZiAgTVVMVElfQ1BVCisjICAgZGVmaW5lIE1VTFRJX0NQVQorIyAgZWxzZQorIyAgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtOTIwCisjICBlbmRpZgorIyBlbmRpZgorIyBpZmRlZiBDT05GSUdfQ1BVX0FSTTkyMlQKKyMgIGlmZGVmIENQVV9OQU1FCisjICAgdW5kZWYgIE1VTFRJX0NQVQorIyAgIGRlZmluZSBNVUxUSV9DUFUKKyMgIGVsc2UKKyMgICBkZWZpbmUgQ1BVX05BTUUgY3B1X2FybTkyMgorIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWZkZWYgQ09ORklHX0NQVV9BUk05MjVUCisjICBpZmRlZiBDUFVfTkFNRQorIyAgIHVuZGVmICBNVUxUSV9DUFUKKyMgICBkZWZpbmUgTVVMVElfQ1BVCisjICBlbHNlCisjICAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm05MjUKKyMgIGVuZGlmCisjIGVuZGlmCisjIGlmZGVmIENPTkZJR19DUFVfQVJNOTI2VAorIyAgaWZkZWYgQ1BVX05BTUUKKyMgICB1bmRlZiAgTVVMVElfQ1BVCisjICAgZGVmaW5lIE1VTFRJX0NQVQorIyAgZWxzZQorIyAgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtOTI2CisjICBlbmRpZgorIyBlbmRpZgorIyBpZmRlZiBDT05GSUdfQ1BVX1NBMTEwCisjICBpZmRlZiBDUFVfTkFNRQorIyAgIHVuZGVmICBNVUxUSV9DUFUKKyMgICBkZWZpbmUgTVVMVElfQ1BVCisjICBlbHNlCisjICAgZGVmaW5lIENQVV9OQU1FIGNwdV9zYTExMAorIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWZkZWYgQ09ORklHX0NQVV9TQTExMDAKKyMgIGlmZGVmIENQVV9OQU1FCisjICAgdW5kZWYgIE1VTFRJX0NQVQorIyAgIGRlZmluZSBNVUxUSV9DUFUKKyMgIGVsc2UKKyMgICBkZWZpbmUgQ1BVX05BTUUgY3B1X3NhMTEwMAorIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWZkZWYgQ09ORklHX0NQVV9BUk0xMDIwCisjICBpZmRlZiBDUFVfTkFNRQorIyAgIHVuZGVmICBNVUxUSV9DUFUKKyMgICBkZWZpbmUgTVVMVElfQ1BVCisjICBlbHNlCisjICAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm0xMDIwCisjICBlbmRpZgorIyBlbmRpZgorIyBpZmRlZiBDT05GSUdfQ1BVX0FSTTEwMjBFCisjICBpZmRlZiBDUFVfTkFNRQorIyAgIHVuZGVmICBNVUxUSV9DUFUKKyMgICBkZWZpbmUgTVVMVElfQ1BVCisjICBlbHNlCisjICAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm0xMDIwZQorIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWZkZWYgQ09ORklHX0NQVV9BUk0xMDIyCisjICBpZmRlZiBDUFVfTkFNRQorIyAgIHVuZGVmICBNVUxUSV9DUFUKKyMgICBkZWZpbmUgTVVMVElfQ1BVCisjICBlbHNlCisjICAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm0xMDIyCisjICBlbmRpZgorIyBlbmRpZgorIyBpZmRlZiBDT05GSUdfQ1BVX0FSTTEwMjYKKyMgIGlmZGVmIENQVV9OQU1FCisjICAgdW5kZWYgIE1VTFRJX0NQVQorIyAgIGRlZmluZSBNVUxUSV9DUFUKKyMgIGVsc2UKKyMgICBkZWZpbmUgQ1BVX05BTUUgY3B1X2FybTEwMjYKKyMgIGVuZGlmCisjIGVuZGlmCisjIGlmZGVmIENPTkZJR19DUFVfWFNDQUxFCisjICBpZmRlZiBDUFVfTkFNRQorIyAgIHVuZGVmICBNVUxUSV9DUFUKKyMgICBkZWZpbmUgTVVMVElfQ1BVCisjICBlbHNlCisjICAgZGVmaW5lIENQVV9OQU1FIGNwdV94c2NhbGUKKyMgIGVuZGlmCisjIGVuZGlmCisjIGlmZGVmIENPTkZJR19DUFVfVjYKKyMgIGlmZGVmIENQVV9OQU1FCisjICAgdW5kZWYgIE1VTFRJX0NQVQorIyAgIGRlZmluZSBNVUxUSV9DUFUKKyMgIGVsc2UKKyMgICBkZWZpbmUgQ1BVX05BTUUgY3B1X3Y2CisjICBlbmRpZgorIyBlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNpZm5kZWYgTVVMVElfQ1BVCisjaW5jbHVkZSAiYXNtL2NwdS1zaW5nbGUuaCIKKyNlbHNlCisjaW5jbHVkZSAiYXNtL2NwdS1tdWx0aTMyLmgiCisjZW5kaWYKKworI2luY2x1ZGUgPGFzbS9tZW1vcnkuaD4KKworI2RlZmluZSBjcHVfc3dpdGNoX21tKHBnZCxtbSkgY3B1X2RvX3N3aXRjaF9tbSh2aXJ0X3RvX3BoeXMocGdkKSxtbSkKKworI2RlZmluZSBjcHVfZ2V0X3BnZCgpCVwKKwkoewkJCQkJCVwKKwkJdW5zaWduZWQgbG9uZyBwZzsJCQlcCisJCV9fYXNtX18oIm1yYwlwMTUsIDAsICUwLCBjMiwgYzAsIDAiCVwKKwkJCSA6ICI9ciIgKHBnKSA6IDogImNjIik7CQlcCisJCXBnICY9IH4weDNmZmY7CQkJCVwKKwkJKHBnZF90ICopcGh5c190b192aXJ0KHBnKTsJCVwKKwl9KQorCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9fQVNNX1BST0NGTlNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3Byb2Nlc3Nvci5oIGIvaW5jbHVkZS9hc20tYXJtL3Byb2Nlc3Nvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhOTg0NTkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vcHJvY2Vzc29yLmgKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL3Byb2Nlc3Nvci5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NS0xOTk5IFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUk1fUFJPQ0VTU09SX0gKKyNkZWZpbmUgX19BU01fQVJNX1BST0NFU1NPUl9ICisKKy8qCisgKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIG1hY3JvIHRoYXQgcmV0dXJucyBjdXJyZW50CisgKiBpbnN0cnVjdGlvbiBwb2ludGVyICgicHJvZ3JhbSBjb3VudGVyIikuCisgKi8KKyNkZWZpbmUgY3VycmVudF90ZXh0X2FkZHIoKSAoeyBfX2xhYmVsX18gX2w7IF9sOiAmJl9sO30pCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisjaW5jbHVkZSA8YXNtL3Byb2NpbmZvLmg+CisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisKKyNkZWZpbmUgS0VSTkVMX1NUQUNLX1NJWkUJUEFHRV9TSVpFCisKK3VuaW9uIGRlYnVnX2luc24geworCXUzMglhcm07CisJdTE2CXRodW1iOworfTsKKworc3RydWN0IGRlYnVnX2VudHJ5IHsKKwl1MzIJCQlhZGRyZXNzOworCXVuaW9uIGRlYnVnX2luc24JaW5zbjsKK307CisKK3N0cnVjdCBkZWJ1Z19pbmZvIHsKKwlpbnQJCQluc2F2ZWQ7CisJc3RydWN0IGRlYnVnX2VudHJ5CWJwWzJdOworfTsKKworc3RydWN0IHRocmVhZF9zdHJ1Y3QgeworCQkJCQkJCS8qIGZhdWx0IGluZm8JICAqLworCXVuc2lnbmVkIGxvbmcJCWFkZHJlc3M7CisJdW5zaWduZWQgbG9uZwkJdHJhcF9ubzsKKwl1bnNpZ25lZCBsb25nCQllcnJvcl9jb2RlOworCQkJCQkJCS8qIGRlYnVnZ2luZwkgICovCisJc3RydWN0IGRlYnVnX2luZm8JZGVidWc7Cit9OworCisjZGVmaW5lIElOSVRfVEhSRUFEICB7CX0KKworI2RlZmluZSBzdGFydF90aHJlYWQocmVncyxwYyxzcCkJCQkJCVwKKyh7CQkJCQkJCQkJXAorCXVuc2lnbmVkIGxvbmcgKnN0YWNrID0gKHVuc2lnbmVkIGxvbmcgKilzcDsJCQlcCisJc2V0X2ZzKFVTRVJfRFMpOwkJCQkJCVwKKwltZW16ZXJvKHJlZ3MtPnVyZWdzLCBzaXplb2YocmVncy0+dXJlZ3MpKTsJCQlcCisJaWYgKGN1cnJlbnQtPnBlcnNvbmFsaXR5ICYgQUREUl9MSU1JVF8zMkJJVCkJCQlcCisJCXJlZ3MtPkFSTV9jcHNyID0gVVNSX01PREU7CQkJCVwKKwllbHNlCQkJCQkJCQlcCisJCXJlZ3MtPkFSTV9jcHNyID0gVVNSMjZfTU9ERTsJCQkJXAorCWlmIChlbGZfaHdjYXAgJiBIV0NBUF9USFVNQiAmJiBwYyAmIDEpCQkJCVwKKwkJcmVncy0+QVJNX2Nwc3IgfD0gUFNSX1RfQklUOwkJCQlcCisJcmVncy0+QVJNX3BjID0gcGMgJiB+MTsJCS8qIHBjICovCQkJXAorCXJlZ3MtPkFSTV9zcCA9IHNwOwkJLyogc3AgKi8JCQlcCisJcmVncy0+QVJNX3IyID0gc3RhY2tbMl07CS8qIHIyIChlbnZwKSAqLwkJCVwKKwlyZWdzLT5BUk1fcjEgPSBzdGFja1sxXTsJLyogcjEgKGFyZ3YpICovCQkJXAorCXJlZ3MtPkFSTV9yMCA9IHN0YWNrWzBdOwkvKiByMCAoYXJnYykgKi8JCQlcCit9KQorCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9uLCBhIHN0cmFuZ2UgQyB0aGluZyAqLworc3RydWN0IHRhc2tfc3RydWN0OworCisvKiBGcmVlIGFsbCByZXNvdXJjZXMgaGVsZCBieSBhIHRocmVhZC4gKi8KK2V4dGVybiB2b2lkIHJlbGVhc2VfdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKKworLyogUHJlcGFyZSB0byBjb3B5IHRocmVhZCBzdGF0ZSAtIHVubGF6eSBhbGwgbGF6eSBzdGF0dXMgKi8KKyNkZWZpbmUgcHJlcGFyZV90b19jb3B5KHRzaykJZG8geyB9IHdoaWxlICgwKQorCit1bnNpZ25lZCBsb25nIGdldF93Y2hhbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApOworCisjZGVmaW5lIGNwdV9yZWxheCgpCQkJYmFycmllcigpCisKKy8qCisgKiBDcmVhdGUgYSBuZXcga2VybmVsIHRocmVhZAorICovCitleHRlcm4gaW50IGtlcm5lbF90aHJlYWQoaW50ICgqZm4pKHZvaWQgKiksIHZvaWQgKmFyZywgdW5zaWduZWQgbG9uZyBmbGFncyk7CisKKyNkZWZpbmUgS1NUS19FSVAodHNrKQkoKCh1bnNpZ25lZCBsb25nICopKDQwOTYrKHVuc2lnbmVkIGxvbmcpKHRzayktPnRocmVhZF9pbmZvKSlbMTAxOV0pCisjZGVmaW5lIEtTVEtfRVNQKHRzaykJKCgodW5zaWduZWQgbG9uZyAqKSg0MDk2Kyh1bnNpZ25lZCBsb25nKSh0c2spLT50aHJlYWRfaW5mbykpWzEwMTddKQorCisvKgorICogUHJlZmV0Y2hpbmcgc3VwcG9ydCAtIG9ubHkgQVJNdjUuCisgKi8KKyNpZiBfX0xJTlVYX0FSTV9BUkNIX18gPj0gNQorCisjZGVmaW5lIEFSQ0hfSEFTX1BSRUZFVENICisjZGVmaW5lIHByZWZldGNoKHB0cikJCQkJXAorCSh7CQkJCQlcCisJCV9fYXNtX18gX192b2xhdGlsZV9fKAkJXAorCQkicGxkXHQlMCIJCQlcCisJCToJCQkJXAorCQk6ICJvIiAoKihjaGFyICopKHB0cikpCQlcCisJCTogImNjIik7CQkJXAorCX0pCisKKyNkZWZpbmUgQVJDSF9IQVNfUFJFRkVUQ0hXCisjZGVmaW5lIHByZWZldGNodyhwdHIpCXByZWZldGNoKHB0cikKKworI2RlZmluZSBBUkNIX0hBU19TUElOTE9DS19QUkVGRVRDSAorI2RlZmluZSBzcGluX2xvY2tfcHJlZmV0Y2goeCkgZG8geyB9IHdoaWxlICgwKQorCisjZW5kaWYKKworI2VuZGlmCisKKyNlbmRpZiAvKiBfX0FTTV9BUk1fUFJPQ0VTU09SX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9wcm9jaW5mby5oIGIvaW5jbHVkZS9hc20tYXJtL3Byb2NpbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTljNzViMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9wcm9jaW5mby5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL3Byb2NpbmZvLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk2LTE5OTkgUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2lmbmRlZiBfX0FTTV9QUk9DSU5GT19ICisjZGVmaW5lIF9fQVNNX1BST0NJTkZPX0gKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworc3RydWN0IGNwdV90bGJfZm5zOworc3RydWN0IGNwdV91c2VyX2ZuczsKK3N0cnVjdCBjcHVfY2FjaGVfZm5zOworc3RydWN0IHByb2Nlc3NvcjsKKworLyoKKyAqIE5vdGUhICBzdHJ1Y3QgcHJvY2Vzc29yIGlzIGFsd2F5cyBkZWZpbmVkIGlmIHdlJ3JlCisgKiB1c2luZyBNVUxUSV9DUFUsIG90aGVyd2lzZSB0aGlzIGVudHJ5IGlzIHVudXNlZCwKKyAqIGJ1dCBzdGlsbCBleGlzdHMuCisgKgorICogTk9URSEgVGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgaXMgZGVmaW5lZCBieSBhc3NlbWJseQorICogbGFuZ3VhZ2UsIE5PVCBDIGNvZGUuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgY2hlY2s6CisgKiAgYXJjaC9hcm0vbW0vcHJvYy0qLlMgYW5kIGFyY2gvYXJtL2tlcm5lbC9oZWFkLlMKKyAqLworc3RydWN0IHByb2NfaW5mb19saXN0IHsKKwl1bnNpZ25lZCBpbnQJCWNwdV92YWw7CisJdW5zaWduZWQgaW50CQljcHVfbWFzazsKKwl1bnNpZ25lZCBsb25nCQlfX2NwdV9tbXVfZmxhZ3M7CS8qIHVzZWQgYnkgaGVhZC5TICovCisJdW5zaWduZWQgbG9uZwkJX19jcHVfZmx1c2g7CQkvKiB1c2VkIGJ5IGhlYWQuUyAqLworCWNvbnN0IGNoYXIJCSphcmNoX25hbWU7CisJY29uc3QgY2hhcgkJKmVsZl9uYW1lOworCXVuc2lnbmVkIGludAkJZWxmX2h3Y2FwOworCWNvbnN0IGNoYXIJCSpjcHVfbmFtZTsKKwlzdHJ1Y3QgcHJvY2Vzc29yCSpwcm9jOworCXN0cnVjdCBjcHVfdGxiX2ZucwkqdGxiOworCXN0cnVjdCBjcHVfdXNlcl9mbnMJKnVzZXI7CisJc3RydWN0IGNwdV9jYWNoZV9mbnMJKmNhY2hlOworfTsKKworZXh0ZXJuIHVuc2lnbmVkIGludCBlbGZfaHdjYXA7CisKKyNlbmRpZgkvKiBfX0FTU0VNQkxZX18gKi8KKworI2RlZmluZSBQUk9DX0lORk9fU1oJNDgKKworI2RlZmluZSBIV0NBUF9TV1AJMQorI2RlZmluZSBIV0NBUF9IQUxGCTIKKyNkZWZpbmUgSFdDQVBfVEhVTUIJNAorI2RlZmluZSBIV0NBUF8yNkJJVAk4CS8qIFBsYXkgaXQgc2FmZSAqLworI2RlZmluZSBIV0NBUF9GQVNUX01VTFQJMTYKKyNkZWZpbmUgSFdDQVBfRlBBCTMyCisjZGVmaW5lIEhXQ0FQX1ZGUAk2NAorI2RlZmluZSBIV0NBUF9FRFNQCTEyOAorI2RlZmluZSBIV0NBUF9KQVZBCTI1NgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9wdHJhY2UuaCBiL2luY2x1ZGUvYXNtLWFybS9wdHJhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDRlM2ExCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL3B0cmFjZS5oCkBAIC0wLDAgKzEsMTU1IEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9wdHJhY2UuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMyBSdXNzZWxsIEtpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaWZuZGVmIF9fQVNNX0FSTV9QVFJBQ0VfSAorI2RlZmluZSBfX0FTTV9BUk1fUFRSQUNFX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjZGVmaW5lIFBUUkFDRV9HRVRSRUdTCQkxMgorI2RlZmluZSBQVFJBQ0VfU0VUUkVHUwkJMTMKKyNkZWZpbmUgUFRSQUNFX0dFVEZQUkVHUwkxNAorI2RlZmluZSBQVFJBQ0VfU0VURlBSRUdTCTE1CisKKyNkZWZpbmUgUFRSQUNFX0dFVFdNTVhSRUdTCTE4CisjZGVmaW5lIFBUUkFDRV9TRVRXTU1YUkVHUwkxOQorCisjZGVmaW5lIFBUUkFDRV9PTERTRVRPUFRJT05TCTIxCisKKyNkZWZpbmUgUFRSQUNFX0dFVF9USFJFQURfQVJFQQkyMgorLyoKKyAqIFBTUiBiaXRzCisgKi8KKyNkZWZpbmUgVVNSMjZfTU9ERQkweDAwMDAwMDAwCisjZGVmaW5lIEZJUTI2X01PREUJMHgwMDAwMDAwMQorI2RlZmluZSBJUlEyNl9NT0RFCTB4MDAwMDAwMDIKKyNkZWZpbmUgU1ZDMjZfTU9ERQkweDAwMDAwMDAzCisjZGVmaW5lIFVTUl9NT0RFCTB4MDAwMDAwMTAKKyNkZWZpbmUgRklRX01PREUJMHgwMDAwMDAxMQorI2RlZmluZSBJUlFfTU9ERQkweDAwMDAwMDEyCisjZGVmaW5lIFNWQ19NT0RFCTB4MDAwMDAwMTMKKyNkZWZpbmUgQUJUX01PREUJMHgwMDAwMDAxNworI2RlZmluZSBVTkRfTU9ERQkweDAwMDAwMDFiCisjZGVmaW5lIFNZU1RFTV9NT0RFCTB4MDAwMDAwMWYKKyNkZWZpbmUgTU9ERTMyX0JJVAkweDAwMDAwMDEwCisjZGVmaW5lIE1PREVfTUFTSwkweDAwMDAwMDFmCisjZGVmaW5lIFBTUl9UX0JJVAkweDAwMDAwMDIwCisjZGVmaW5lIFBTUl9GX0JJVAkweDAwMDAwMDQwCisjZGVmaW5lIFBTUl9JX0JJVAkweDAwMDAwMDgwCisjZGVmaW5lIFBTUl9KX0JJVAkweDAxMDAwMDAwCisjZGVmaW5lIFBTUl9RX0JJVAkweDA4MDAwMDAwCisjZGVmaW5lIFBTUl9WX0JJVAkweDEwMDAwMDAwCisjZGVmaW5lIFBTUl9DX0JJVAkweDIwMDAwMDAwCisjZGVmaW5lIFBTUl9aX0JJVAkweDQwMDAwMDAwCisjZGVmaW5lIFBTUl9OX0JJVAkweDgwMDAwMDAwCisjZGVmaW5lIFBDTUFTSwkJMAorCisvKgorICogR3JvdXBzIG9mIFBTUiBiaXRzCisgKi8KKyNkZWZpbmUgUFNSX2YJCTB4ZmYwMDAwMDAJLyogRmxhZ3MJCSovCisjZGVmaW5lIFBTUl9zCQkweDAwZmYwMDAwCS8qIFN0YXR1cwkJKi8KKyNkZWZpbmUgUFNSX3gJCTB4MDAwMGZmMDAJLyogRXh0ZW5zaW9uCQkqLworI2RlZmluZSBQU1JfYwkJMHgwMDAwMDBmZgkvKiBDb250cm9sCQkqLworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisvKiB0aGlzIHN0cnVjdCBkZWZpbmVzIHRoZSB3YXkgdGhlIHJlZ2lzdGVycyBhcmUgc3RvcmVkIG9uIHRoZQorICAgc3RhY2sgZHVyaW5nIGEgc3lzdGVtIGNhbGwuICovCisKK3N0cnVjdCBwdF9yZWdzIHsKKwlsb25nIHVyZWdzWzE4XTsKK307CisKKyNkZWZpbmUgQVJNX2Nwc3IJdXJlZ3NbMTZdCisjZGVmaW5lIEFSTV9wYwkJdXJlZ3NbMTVdCisjZGVmaW5lIEFSTV9scgkJdXJlZ3NbMTRdCisjZGVmaW5lIEFSTV9zcAkJdXJlZ3NbMTNdCisjZGVmaW5lIEFSTV9pcAkJdXJlZ3NbMTJdCisjZGVmaW5lIEFSTV9mcAkJdXJlZ3NbMTFdCisjZGVmaW5lIEFSTV9yMTAJCXVyZWdzWzEwXQorI2RlZmluZSBBUk1fcjkJCXVyZWdzWzldCisjZGVmaW5lIEFSTV9yOAkJdXJlZ3NbOF0KKyNkZWZpbmUgQVJNX3I3CQl1cmVnc1s3XQorI2RlZmluZSBBUk1fcjYJCXVyZWdzWzZdCisjZGVmaW5lIEFSTV9yNQkJdXJlZ3NbNV0KKyNkZWZpbmUgQVJNX3I0CQl1cmVnc1s0XQorI2RlZmluZSBBUk1fcjMJCXVyZWdzWzNdCisjZGVmaW5lIEFSTV9yMgkJdXJlZ3NbMl0KKyNkZWZpbmUgQVJNX3IxCQl1cmVnc1sxXQorI2RlZmluZSBBUk1fcjAJCXVyZWdzWzBdCisjZGVmaW5lIEFSTV9PUklHX3IwCXVyZWdzWzE3XQorCisjaWZkZWYgX19LRVJORUxfXworCisjZGVmaW5lIHVzZXJfbW9kZShyZWdzKQlcCisJKCgocmVncyktPkFSTV9jcHNyICYgMHhmKSA9PSAwKQorCisjaWZkZWYgQ09ORklHX0FSTV9USFVNQgorI2RlZmluZSB0aHVtYl9tb2RlKHJlZ3MpIFwKKwkoKChyZWdzKS0+QVJNX2Nwc3IgJiBQU1JfVF9CSVQpKQorI2Vsc2UKKyNkZWZpbmUgdGh1bWJfbW9kZShyZWdzKSAoMCkKKyNlbmRpZgorCisjZGVmaW5lIHByb2Nlc3Nvcl9tb2RlKHJlZ3MpIFwKKwkoKHJlZ3MpLT5BUk1fY3BzciAmIE1PREVfTUFTSykKKworI2RlZmluZSBpbnRlcnJ1cHRzX2VuYWJsZWQocmVncykgXAorCSghKChyZWdzKS0+QVJNX2Nwc3IgJiBQU1JfSV9CSVQpKQorCisjZGVmaW5lIGZhc3RfaW50ZXJydXB0c19lbmFibGVkKHJlZ3MpIFwKKwkoISgocmVncyktPkFSTV9jcHNyICYgUFNSX0ZfQklUKSkKKworI2RlZmluZSBjb25kaXRpb25fY29kZXMocmVncykgXAorCSgocmVncyktPkFSTV9jcHNyICYgKFBTUl9WX0JJVHxQU1JfQ19CSVR8UFNSX1pfQklUfFBTUl9OX0JJVCkpCisJCisvKiBBcmUgdGhlIGN1cnJlbnQgcmVnaXN0ZXJzIHN1aXRhYmxlIGZvciB1c2VyIG1vZGU/CisgKiAodXNlZCB0byBtYWludGFpbiBzZWN1cml0eSBpbiBzaWduYWwgaGFuZGxlcnMpCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHZhbGlkX3VzZXJfcmVncyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpZiAodXNlcl9tb2RlKHJlZ3MpICYmCisJICAgIChyZWdzLT5BUk1fY3BzciAmIChQU1JfRl9CSVR8UFNSX0lfQklUKSkgPT0gMCkKKwkJcmV0dXJuIDE7CisKKwkvKgorCSAqIEZvcmNlIENQU1IgdG8gc29tZXRoaW5nIGxvZ2ljYWwuLi4KKwkgKi8KKwlyZWdzLT5BUk1fY3BzciAmPSBQU1JfZiB8IFBTUl9zIHwgUFNSX3ggfCBQU1JfVF9CSVQgfCBNT0RFMzJfQklUOworCisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZgkvKiBfX0tFUk5FTF9fICovCisKKyNkZWZpbmUgcGNfcG9pbnRlcih2KSBcCisJKCh2KSAmIH5QQ01BU0spCisKKyNkZWZpbmUgaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKSBcCisJKHBjX3BvaW50ZXIoKHJlZ3MpLT5BUk1fcGMpKQorCisjaWZkZWYgQ09ORklHX1NNUAorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcHJvZmlsZV9wYyhzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisjZWxzZQorI2RlZmluZSBwcm9maWxlX3BjKHJlZ3MpIGluc3RydWN0aW9uX3BvaW50ZXIocmVncykKKyNlbmRpZgorCisjaWZkZWYgX19LRVJORUxfXworZXh0ZXJuIHZvaWQgc2hvd19yZWdzKHN0cnVjdCBwdF9yZWdzICopOworCisjZGVmaW5lIHByZWRpY2F0ZSh4KQkoeCAmIDB4ZjAwMDAwMDApCisjZGVmaW5lIFBSRURJQ0FURV9BTFdBWVMJMHhlMDAwMDAwMAorCisjZW5kaWYKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3Jlc291cmNlLmggYi9pbmNsdWRlL2FzbS1hcm0vcmVzb3VyY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzRiNTgxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL3Jlc291cmNlLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9BUk1fUkVTT1VSQ0VfSAorI2RlZmluZSBfQVJNX1JFU09VUkNFX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3Jlc291cmNlLmg+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3J0Yy5oIGIvaW5jbHVkZS9hc20tYXJtL3J0Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhN2UxNmIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vcnRjLmgKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vcnRjLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzIERlZXAgQmx1ZSBTb2x1dGlvbnMgTHRkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpZm5kZWYgQVNNQVJNX1JUQ19ICisjZGVmaW5lIEFTTUFSTV9SVENfSAorCitzdHJ1Y3QgbW9kdWxlOworCitzdHJ1Y3QgcnRjX29wcyB7CisJc3RydWN0IG1vZHVsZQkqb3duZXI7CisJaW50CQkoKm9wZW4pKHZvaWQpOworCXZvaWQJCSgqcmVsZWFzZSkodm9pZCk7CisJaW50CQkoKmlvY3RsKSh1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpOworCisJdm9pZAkJKCpyZWFkX3RpbWUpKHN0cnVjdCBydGNfdGltZSAqKTsKKwlpbnQJCSgqc2V0X3RpbWUpKHN0cnVjdCBydGNfdGltZSAqKTsKKwl2b2lkCQkoKnJlYWRfYWxhcm0pKHN0cnVjdCBydGNfd2thbHJtICopOworCWludAkJKCpzZXRfYWxhcm0pKHN0cnVjdCBydGNfd2thbHJtICopOworCWludAkJKCpwcm9jKShjaGFyICpidWYpOworfTsKKwordm9pZCBydGNfdGltZV90b190bSh1bnNpZ25lZCBsb25nLCBzdHJ1Y3QgcnRjX3RpbWUgKik7CitpbnQgcnRjX3RtX3RvX3RpbWUoc3RydWN0IHJ0Y190aW1lICosIHVuc2lnbmVkIGxvbmcgKik7CitpbnQgcnRjX3ZhbGlkX3RtKHN0cnVjdCBydGNfdGltZSAqKTsKK3ZvaWQgcnRjX25leHRfYWxhcm1fdGltZShzdHJ1Y3QgcnRjX3RpbWUgKiwgc3RydWN0IHJ0Y190aW1lICosIHN0cnVjdCBydGNfdGltZSAqKTsKK3ZvaWQgcnRjX3VwZGF0ZSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKK2ludCByZWdpc3Rlcl9ydGMoc3RydWN0IHJ0Y19vcHMgKik7Cit2b2lkIHVucmVnaXN0ZXJfcnRjKHN0cnVjdCBydGNfb3BzICopOworCitzdGF0aWMgaW5saW5lIGludCBydGNfcGVyaW9kaWNfYWxhcm0oc3RydWN0IHJ0Y190aW1lICp0bSkKK3sKKwlyZXR1cm4gICh0bS0+dG1feWVhciA9PSAtMSkgfHwKKwkJKCh1bnNpZ25lZCl0bS0+dG1fbW9uID49IDEyKSB8fAorCQkoKHVuc2lnbmVkKSh0bS0+dG1fbWRheSAtIDEpID49IDMxKSB8fAorCQkoKHVuc2lnbmVkKXRtLT50bV9ob3VyID4gMjMpIHx8CisJCSgodW5zaWduZWQpdG0tPnRtX21pbiA+IDU5KSB8fAorCQkoKHVuc2lnbmVkKXRtLT50bV9zZWMgPiA1OSk7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3NjYXR0ZXJsaXN0LmggYi9pbmNsdWRlL2FzbS1hcm0vc2NhdHRlcmxpc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2I4NzZmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL3NjYXR0ZXJsaXN0LmgKQEAgLTAsMCArMSwyNSBAQAorI2lmbmRlZiBfQVNNQVJNX1NDQVRURVJMSVNUX0gKKyNkZWZpbmUgX0FTTUFSTV9TQ0FUVEVSTElTVF9ICisKKyNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+CisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisKK3N0cnVjdCBzY2F0dGVybGlzdCB7CisJc3RydWN0IHBhZ2UJKnBhZ2U7CQkvKiBidWZmZXIgcGFnZQkJCSAqLworCXVuc2lnbmVkIGludAlvZmZzZXQ7CQkvKiBidWZmZXIgb2Zmc2V0CQkgKi8KKwlkbWFfYWRkcl90CWRtYV9hZGRyZXNzOwkvKiBkbWEgYWRkcmVzcwkJCSAqLworCXVuc2lnbmVkIGludAlsZW5ndGg7CQkvKiBsZW5ndGgJCQkgKi8KKwljaGFyCQkqX19hZGRyZXNzOwkvKiBmb3Igc2V0X2RtYV9hZGRyCQkgKi8KK307CisKKy8qCisgKiBUaGVzZSBtYWNyb3Mgc2hvdWxkIGJlIHVzZWQgYWZ0ZXIgYSBwY2lfbWFwX3NnIGNhbGwgaGFzIGJlZW4gZG9uZQorICogdG8gZ2V0IGJ1cyBhZGRyZXNzZXMgb2YgZWFjaCBvZiB0aGUgU0cgZW50cmllcyBhbmQgdGhlaXIgbGVuZ3Rocy4KKyAqIFlvdSBzaG91bGQgb25seSB3b3JrIHdpdGggdGhlIG51bWJlciBvZiBzZyBlbnRyaWVzIHBjaV9tYXBfc2cKKyAqIHJldHVybnMsIG9yIGFsdGVybmF0aXZlbHkgc3RvcCBvbiB0aGUgZmlyc3Qgc2dfZG1hX2xlbihzZykgd2hpY2gKKyAqIGlzIDAuCisgKi8KKyNkZWZpbmUgc2dfZG1hX2FkZHJlc3Moc2cpICAgICAgKChzZyktPmRtYV9hZGRyZXNzKQorI2RlZmluZSBzZ19kbWFfbGVuKHNnKSAgICAgICAgICAoKHNnKS0+bGVuZ3RoKQorCisjZW5kaWYgLyogX0FTTUFSTV9TQ0FUVEVSTElTVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vc2VjdGlvbnMuaCBiL2luY2x1ZGUvYXNtLWFybS9zZWN0aW9ucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiOGM1MTYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vc2VjdGlvbnMuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2VjdGlvbnMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9zZWdtZW50LmggYi9pbmNsdWRlL2FzbS1hcm0vc2VnbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllMjRjMjEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vc2VnbWVudC5oCkBAIC0wLDAgKzEsMTEgQEAKKyNpZm5kZWYgX19BU01fQVJNX1NFR01FTlRfSAorI2RlZmluZSBfX0FTTV9BUk1fU0VHTUVOVF9ICisKKyNkZWZpbmUgX19LRVJORUxfQ1MgICAweDAKKyNkZWZpbmUgX19LRVJORUxfRFMgICAweDAKKworI2RlZmluZSBfX1VTRVJfQ1MgICAgIDB4MQorI2RlZmluZSBfX1VTRVJfRFMgICAgIDB4MQorCisjZW5kaWYgLyogX19BU01fQVJNX1NFR01FTlRfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vc2VtYXBob3JlLWhlbHBlci5oIGIvaW5jbHVkZS9hc20tYXJtL3NlbWFwaG9yZS1oZWxwZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDdmMTk4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL3NlbWFwaG9yZS1oZWxwZXIuaApAQCAtMCwwICsxLDg0IEBACisjaWZuZGVmIEFTTUFSTV9TRU1BUEhPUkVfSEVMUEVSX0gKKyNkZWZpbmUgQVNNQVJNX1NFTUFQSE9SRV9IRUxQRVJfSAorCisvKgorICogVGhlc2UgdHdvIF9tdXN0XyBleGVjdXRlIGF0b21pY2FsbHkgd3J0IGVhY2ggb3RoZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB3YWtlX29uZV9tb3JlKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzZW1hcGhvcmVfd2FrZV9sb2NrLCBmbGFncyk7CisJaWYgKGF0b21pY19yZWFkKCZzZW0tPmNvdW50KSA8PSAwKQorCQlzZW0tPndha2luZysrOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlbWFwaG9yZV93YWtlX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgd2FraW5nX25vbl96ZXJvKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNlbWFwaG9yZV93YWtlX2xvY2ssIGZsYWdzKTsKKwlpZiAoc2VtLT53YWtpbmcgPiAwKSB7CisJCXNlbS0+d2FraW5nLS07CisJCXJldCA9IDE7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlbWFwaG9yZV93YWtlX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogd2FraW5nIG5vbiB6ZXJvIGludGVycnVwdGlibGUKKyAqCTEJZ290IHRoZSBsb2NrCisgKgkwCWdvIHRvIHNsZWVwCisgKgktRUlOVFIJaW50ZXJydXB0ZWQKKyAqCisgKiBXZSBtdXN0IHVuZG8gdGhlIHNlbS0+Y291bnQgZG93bl9pbnRlcnJ1cHRpYmxlKCkgaW5jcmVtZW50IHdoaWxlIHdlIGFyZQorICogcHJvdGVjdGVkIGJ5IHRoZSBzcGlubG9jayBpbiBvcmRlciB0byBtYWtlIHRoaXMgYXRvbWljX2luYygpIHdpdGggdGhlCisgKiBhdG9taWNfcmVhZCgpIGluIHdha2Vfb25lX21vcmUoKSwgb3RoZXJ3aXNlIHdlIGNhbiByYWNlLiAtYXJjYQorICovCitzdGF0aWMgaW5saW5lIGludCB3YWtpbmdfbm9uX3plcm9faW50ZXJydXB0aWJsZShzdHJ1Y3Qgc2VtYXBob3JlICpzZW0sCisJCQkJCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNlbWFwaG9yZV93YWtlX2xvY2ssIGZsYWdzKTsKKwlpZiAoc2VtLT53YWtpbmcgPiAwKSB7CisJCXNlbS0+d2FraW5nLS07CisJCXJldCA9IDE7CisJfSBlbHNlIGlmIChzaWduYWxfcGVuZGluZyh0c2spKSB7CisJCWF0b21pY19pbmMoJnNlbS0+Y291bnQpOworCQlyZXQgPSAtRUlOVFI7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlbWFwaG9yZV93YWtlX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmV0OwkKK30KKworLyoKKyAqIHdha2luZ19ub25femVyb190cnlfbG9jazoKKyAqCTEJZmFpbGVkIHRvIGxvY2sKKyAqCTAJZ290IHRoZSBsb2NrCisgKgorICogV2UgbXVzdCB1bmRvIHRoZSBzZW0tPmNvdW50IGRvd25faW50ZXJydXB0aWJsZSgpIGluY3JlbWVudCB3aGlsZSB3ZSBhcmUKKyAqIHByb3RlY3RlZCBieSB0aGUgc3BpbmxvY2sgaW4gb3JkZXIgdG8gbWFrZSB0aGlzIGF0b21pY19pbmMoKSB3aXRoIHRoZQorICogYXRvbWljX3JlYWQoKSBpbiB3YWtlX29uZV9tb3JlKCksIG90aGVyd2lzZSB3ZSBjYW4gcmFjZS4gLWFyY2EKKyAqLworc3RhdGljIGlubGluZSBpbnQgd2FraW5nX25vbl96ZXJvX3RyeWxvY2soc3RydWN0IHNlbWFwaG9yZSAqc2VtKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldCA9IDE7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2VtYXBob3JlX3dha2VfbG9jaywgZmxhZ3MpOworCWlmIChzZW0tPndha2luZyA8PSAwKQorCQlhdG9taWNfaW5jKCZzZW0tPmNvdW50KTsKKwllbHNlIHsKKwkJc2VtLT53YWtpbmctLTsKKwkJcmV0ID0gMDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VtYXBob3JlX3dha2VfbG9jaywgZmxhZ3MpOworCXJldHVybiByZXQ7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3NlbWFwaG9yZS5oIGIvaW5jbHVkZS9hc20tYXJtL3NlbWFwaG9yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwZjMzZTYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vc2VtYXBob3JlLmgKQEAgLTAsMCArMSwxMDYgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vc2VtYXBob3JlLmgKKyAqLworI2lmbmRlZiBfX0FTTV9BUk1fU0VNQVBIT1JFX0gKKyNkZWZpbmUgX19BU01fQVJNX1NFTUFQSE9SRV9ICisKKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KKworI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlIDxhc20vbG9ja3MuaD4KKworc3RydWN0IHNlbWFwaG9yZSB7CisJYXRvbWljX3QgY291bnQ7CisJaW50IHNsZWVwZXJzOworCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7Cit9OworCisjZGVmaW5lIF9fU0VNQVBIT1JFX0lOSVQobmFtZSwgY250KQkJCQlcCit7CQkJCQkJCQlcCisJLmNvdW50CT0gQVRPTUlDX0lOSVQoY250KSwJCQkJXAorCS53YWl0CT0gX19XQUlUX1FVRVVFX0hFQURfSU5JVElBTElaRVIoKG5hbWUpLndhaXQpLAlcCit9CisKKyNkZWZpbmUgX19NVVRFWF9JTklUSUFMSVpFUihuYW1lKSBfX1NFTUFQSE9SRV9JTklUKG5hbWUsMSkKKworI2RlZmluZSBfX0RFQ0xBUkVfU0VNQVBIT1JFX0dFTkVSSUMobmFtZSxjb3VudCkJXAorCXN0cnVjdCBzZW1hcGhvcmUgbmFtZSA9IF9fU0VNQVBIT1JFX0lOSVQobmFtZSxjb3VudCkKKworI2RlZmluZSBERUNMQVJFX01VVEVYKG5hbWUpCQlfX0RFQ0xBUkVfU0VNQVBIT1JFX0dFTkVSSUMobmFtZSwxKQorI2RlZmluZSBERUNMQVJFX01VVEVYX0xPQ0tFRChuYW1lKQlfX0RFQ0xBUkVfU0VNQVBIT1JFX0dFTkVSSUMobmFtZSwwKQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2VtYV9pbml0KHN0cnVjdCBzZW1hcGhvcmUgKnNlbSwgaW50IHZhbCkKK3sKKwlhdG9taWNfc2V0KCZzZW0tPmNvdW50LCB2YWwpOworCXNlbS0+c2xlZXBlcnMgPSAwOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnNlbS0+d2FpdCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbml0X01VVEVYKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKK3sKKwlzZW1hX2luaXQoc2VtLCAxKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGluaXRfTVVURVhfTE9DS0VEKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKK3sKKwlzZW1hX2luaXQoc2VtLCAwKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VtYV9jb3VudChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCit7CisJcmV0dXJuIGF0b21pY19yZWFkKCZzZW0tPmNvdW50KTsKK30KKworLyoKKyAqIHNwZWNpYWwgcmVnaXN0ZXIgY2FsbGluZyBjb252ZW50aW9uCisgKi8KK2FzbWxpbmthZ2Ugdm9pZCBfX2Rvd25fZmFpbGVkKHZvaWQpOworYXNtbGlua2FnZSBpbnQgIF9fZG93bl9pbnRlcnJ1cHRpYmxlX2ZhaWxlZCh2b2lkKTsKK2FzbWxpbmthZ2UgaW50ICBfX2Rvd25fdHJ5bG9ja19mYWlsZWQodm9pZCk7Cithc21saW5rYWdlIHZvaWQgX191cF93YWtldXAodm9pZCk7CisKK2V4dGVybiB2b2lkIF9fZG93bihzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKTsKK2V4dGVybiBpbnQgIF9fZG93bl9pbnRlcnJ1cHRpYmxlKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pOworZXh0ZXJuIGludCAgX19kb3duX3RyeWxvY2soc3RydWN0IHNlbWFwaG9yZSAqIHNlbSk7CitleHRlcm4gdm9pZCBfX3VwKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pOworCisvKgorICogVGhpcyBpcyB1Z2x5LCBidXQgd2Ugd2FudCB0aGUgZGVmYXVsdCBjYXNlIHRvIGZhbGwgdGhyb3VnaC4KKyAqICJfX2Rvd24iIGlzIHRoZSBhY3R1YWwgcm91dGluZSB0aGF0IHdhaXRzLi4uCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBkb3duKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCit7CisJbWlnaHRfc2xlZXAoKTsKKwlfX2Rvd25fb3Aoc2VtLCBfX2Rvd25fZmFpbGVkKTsKK30KKworLyoKKyAqIFRoaXMgaXMgdWdseSwgYnV0IHdlIHdhbnQgdGhlIGRlZmF1bHQgY2FzZSB0byBmYWxsIHRocm91Z2guCisgKiAiX19kb3duX2ludGVycnVwdGlibGUiIGlzIHRoZSBhY3R1YWwgcm91dGluZSB0aGF0IHdhaXRzLi4uCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGRvd25faW50ZXJydXB0aWJsZSAoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKK3sKKwltaWdodF9zbGVlcCgpOworCXJldHVybiBfX2Rvd25fb3BfcmV0KHNlbSwgX19kb3duX2ludGVycnVwdGlibGVfZmFpbGVkKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZG93bl90cnlsb2NrKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKK3sKKwlyZXR1cm4gX19kb3duX29wX3JldChzZW0sIF9fZG93bl90cnlsb2NrX2ZhaWxlZCk7Cit9CisKKy8qCisgKiBOb3RlISBUaGlzIGlzIHN1YnRsZS4gV2UganVtcCB0byB3YWtlIHBlb3BsZSB1cCBvbmx5IGlmCisgKiB0aGUgc2VtYXBob3JlIHdhcyBuZWdhdGl2ZSAoPT0gc29tZWJvZHkgd2FzIHdhaXRpbmcgb24gaXQpLgorICogVGhlIGRlZmF1bHQgY2FzZSAobm8gY29udGVudGlvbikgd2lsbCByZXN1bHQgaW4gTk8KKyAqIGp1bXBzIGZvciBib3RoIGRvd24oKSBhbmQgdXAoKS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHVwKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCit7CisJX191cF9vcChzZW0sIF9fdXBfd2FrZXVwKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vc2VtYnVmLmggYi9pbmNsdWRlL2FzbS1hcm0vc2VtYnVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMwMjgzOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9zZW1idWYuaApAQCAtMCwwICsxLDI1IEBACisjaWZuZGVmIF9BU01BUk1fU0VNQlVGX0gKKyNkZWZpbmUgX0FTTUFSTV9TRU1CVUZfSAorCisvKiAKKyAqIFRoZSBzZW1pZDY0X2RzIHN0cnVjdHVyZSBmb3IgYXJtIGFyY2hpdGVjdHVyZS4KKyAqIE5vdGUgZXh0cmEgcGFkZGluZyBiZWNhdXNlIHRoaXMgc3RydWN0dXJlIGlzIHBhc3NlZCBiYWNrIGFuZCBmb3J0aAorICogYmV0d2VlbiBrZXJuZWwgYW5kIHVzZXIgc3BhY2UuCisgKgorICogUGFkIHNwYWNlIGlzIGxlZnQgZm9yOgorICogLSA2NC1iaXQgdGltZV90IHRvIHNvbHZlIHkyMDM4IHByb2JsZW0KKyAqIC0gMiBtaXNjZWxsYW5lb3VzIDMyLWJpdCB2YWx1ZXMKKyAqLworCitzdHJ1Y3Qgc2VtaWQ2NF9kcyB7CisJc3RydWN0IGlwYzY0X3Blcm0gc2VtX3Blcm07CQkvKiBwZXJtaXNzaW9ucyAuLiBzZWUgaXBjLmggKi8KKwlfX2tlcm5lbF90aW1lX3QJc2VtX290aW1lOwkJLyogbGFzdCBzZW1vcCB0aW1lICovCisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDE7CisJX19rZXJuZWxfdGltZV90CXNlbV9jdGltZTsJCS8qIGxhc3QgY2hhbmdlIHRpbWUgKi8KKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkMjsKKwl1bnNpZ25lZCBsb25nCXNlbV9uc2VtczsJCS8qIG5vLiBvZiBzZW1hcGhvcmVzIGluIGFycmF5ICovCisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDM7CisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDQ7Cit9OworCisjZW5kaWYgLyogX0FTTUFSTV9TRU1CVUZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3NlcmlhbC5oIGIvaW5jbHVkZS9hc20tYXJtL3NlcmlhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxNWIyNjIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vc2VyaWFsLmgKQEAgLTAsMCArMSwxOSBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vc2VyaWFsLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk2IFJ1c3NlbGwgS2luZy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBDaGFuZ2Vsb2c6CisgKiAgIDE1LTEwLTE5OTYJUk1LCUNyZWF0ZWQKKyAqLworCisjaWZuZGVmIF9fQVNNX1NFUklBTF9ICisjZGVmaW5lIF9fQVNNX1NFUklBTF9ICisKKyNkZWZpbmUgQkFTRV9CQVVECSgxODQzMjAwIC8gMTYpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3NldHVwLmggYi9pbmNsdWRlL2FzbS1hcm0vc2V0dXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGNiZDc5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL3NldHVwLmgKQEAgLTAsMCArMSwyMTggQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20vc2V0dXAuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTctMTk5OSBSdXNzZWxsIEtpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBTdHJ1Y3R1cmUgcGFzc2VkIHRvIGtlcm5lbCB0byB0ZWxsIGl0IGFib3V0IHRoZQorICogIGhhcmR3YXJlIGl0J3MgcnVubmluZyBvbi4gIFNlZSBEb2N1bWVudGF0aW9uL2FybS9TZXR1cAorICogIGZvciBtb3JlIGluZm8uCisgKi8KKyNpZm5kZWYgX19BU01BUk1fU0VUVVBfSAorI2RlZmluZSBfX0FTTUFSTV9TRVRVUF9ICisKKyNkZWZpbmUgQ09NTUFORF9MSU5FX1NJWkUgMTAyNAorCisvKiBUaGUgbGlzdCBlbmRzIHdpdGggYW4gQVRBR19OT05FIG5vZGUuICovCisjZGVmaW5lIEFUQUdfTk9ORQkweDAwMDAwMDAwCisKK3N0cnVjdCB0YWdfaGVhZGVyIHsKKwl1MzIgc2l6ZTsKKwl1MzIgdGFnOworfTsKKworLyogVGhlIGxpc3QgbXVzdCBzdGFydCB3aXRoIGFuIEFUQUdfQ09SRSBub2RlICovCisjZGVmaW5lIEFUQUdfQ09SRQkweDU0NDEwMDAxCisKK3N0cnVjdCB0YWdfY29yZSB7CisJdTMyIGZsYWdzOwkJLyogYml0IDAgPSByZWFkLW9ubHkgKi8KKwl1MzIgcGFnZXNpemU7CisJdTMyIHJvb3RkZXY7Cit9OworCisvKiBpdCBpcyBhbGxvd2VkIHRvIGhhdmUgbXVsdGlwbGUgQVRBR19NRU0gbm9kZXMgKi8KKyNkZWZpbmUgQVRBR19NRU0JMHg1NDQxMDAwMgorCitzdHJ1Y3QgdGFnX21lbTMyIHsKKwl1MzIJc2l6ZTsKKwl1MzIJc3RhcnQ7CS8qIHBoeXNpY2FsIHN0YXJ0IGFkZHJlc3MgKi8KK307CisKKy8qIFZHQSB0ZXh0IHR5cGUgZGlzcGxheXMgKi8KKyNkZWZpbmUgQVRBR19WSURFT1RFWFQJMHg1NDQxMDAwMworCitzdHJ1Y3QgdGFnX3ZpZGVvdGV4dCB7CisJdTgJCXg7CisJdTgJCXk7CisJdTE2CQl2aWRlb19wYWdlOworCXU4CQl2aWRlb19tb2RlOworCXU4CQl2aWRlb19jb2xzOworCXUxNgkJdmlkZW9fZWdhX2J4OworCXU4CQl2aWRlb19saW5lczsKKwl1OAkJdmlkZW9faXN2Z2E7CisJdTE2CQl2aWRlb19wb2ludHM7Cit9OworCisvKiBkZXNjcmliZXMgaG93IHRoZSByYW1kaXNrIHdpbGwgYmUgdXNlZCBpbiBrZXJuZWwgKi8KKyNkZWZpbmUgQVRBR19SQU1ESVNLCTB4NTQ0MTAwMDQKKworc3RydWN0IHRhZ19yYW1kaXNrIHsKKwl1MzIgZmxhZ3M7CS8qIGJpdCAwID0gbG9hZCwgYml0IDEgPSBwcm9tcHQgKi8KKwl1MzIgc2l6ZTsJLyogZGVjb21wcmVzc2VkIHJhbWRpc2sgc2l6ZSBpbiBfa2lsb18gYnl0ZXMgKi8KKwl1MzIgc3RhcnQ7CS8qIHN0YXJ0aW5nIGJsb2NrIG9mIGZsb3BweS1iYXNlZCBSQU0gZGlzayBpbWFnZSAqLworfTsKKworLyogZGVzY3JpYmVzIHdoZXJlIHRoZSBjb21wcmVzc2VkIHJhbWRpc2sgaW1hZ2UgbGl2ZXMgKHZpcnR1YWwgYWRkcmVzcykgKi8KKy8qCisgKiB0aGlzIG9uZSBhY2NpZGVudGFsbHkgdXNlZCB2aXJ0dWFsIGFkZHJlc3NlcyAtIGFzIHN1Y2gsCisgKiBpdCdzIGRlcHJlY2F0ZWQuCisgKi8KKyNkZWZpbmUgQVRBR19JTklUUkQJMHg1NDQxMDAwNQorCisvKiBkZXNjcmliZXMgd2hlcmUgdGhlIGNvbXByZXNzZWQgcmFtZGlzayBpbWFnZSBsaXZlcyAocGh5c2ljYWwgYWRkcmVzcykgKi8KKyNkZWZpbmUgQVRBR19JTklUUkQyCTB4NTQ0MjAwMDUKKworc3RydWN0IHRhZ19pbml0cmQgeworCXUzMiBzdGFydDsJLyogcGh5c2ljYWwgc3RhcnQgYWRkcmVzcyAqLworCXUzMiBzaXplOwkvKiBzaXplIG9mIGNvbXByZXNzZWQgcmFtZGlzayBpbWFnZSBpbiBieXRlcyAqLworfTsKKworLyogYm9hcmQgc2VyaWFsIG51bWJlci4gIjY0IGJpdHMgc2hvdWxkIGJlIGVub3VnaCBmb3IgZXZlcnlib2R5IiAqLworI2RlZmluZSBBVEFHX1NFUklBTAkweDU0NDEwMDA2CisKK3N0cnVjdCB0YWdfc2VyaWFsbnIgeworCXUzMiBsb3c7CisJdTMyIGhpZ2g7Cit9OworCisvKiBib2FyZCByZXZpc2lvbiAqLworI2RlZmluZSBBVEFHX1JFVklTSU9OCTB4NTQ0MTAwMDcKKworc3RydWN0IHRhZ19yZXZpc2lvbiB7CisJdTMyIHJldjsKK307CisKKy8qIGluaXRpYWwgdmFsdWVzIGZvciB2ZXNhZmItdHlwZSBmcmFtZWJ1ZmZlcnMuIHNlZSBzdHJ1Y3Qgc2NyZWVuX2luZm8KKyAqIGluIGluY2x1ZGUvbGludXgvdHR5LmgKKyAqLworI2RlZmluZSBBVEFHX1ZJREVPTEZCCTB4NTQ0MTAwMDgKKworc3RydWN0IHRhZ192aWRlb2xmYiB7CisJdTE2CQlsZmJfd2lkdGg7CisJdTE2CQlsZmJfaGVpZ2h0OworCXUxNgkJbGZiX2RlcHRoOworCXUxNgkJbGZiX2xpbmVsZW5ndGg7CisJdTMyCQlsZmJfYmFzZTsKKwl1MzIJCWxmYl9zaXplOworCXU4CQlyZWRfc2l6ZTsKKwl1OAkJcmVkX3BvczsKKwl1OAkJZ3JlZW5fc2l6ZTsKKwl1OAkJZ3JlZW5fcG9zOworCXU4CQlibHVlX3NpemU7CisJdTgJCWJsdWVfcG9zOworCXU4CQlyc3ZkX3NpemU7CisJdTgJCXJzdmRfcG9zOworfTsKKworLyogY29tbWFuZCBsaW5lOiBcMCB0ZXJtaW5hdGVkIHN0cmluZyAqLworI2RlZmluZSBBVEFHX0NNRExJTkUJMHg1NDQxMDAwOQorCitzdHJ1Y3QgdGFnX2NtZGxpbmUgeworCWNoYXIJY21kbGluZVsxXTsJLyogdGhpcyBpcyB0aGUgbWluaW11bSBzaXplICovCit9OworCisvKiBhY29ybiBSaXNjUEMgc3BlY2lmaWMgaW5mb3JtYXRpb24gKi8KKyNkZWZpbmUgQVRBR19BQ09STgkweDQxMDAwMTAxCisKK3N0cnVjdCB0YWdfYWNvcm4geworCXUzMiBtZW1jX2NvbnRyb2xfcmVnOworCXUzMiB2cmFtX3BhZ2VzOworCXU4IHNvdW5kZGVmYXVsdDsKKwl1OCBhZGZzZHJpdmVzOworfTsKKworLyogZm9vdGJyaWRnZSBtZW1vcnkgY2xvY2ssIHNlZSBhcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvYXJjaC5jICovCisjZGVmaW5lIEFUQUdfTUVNQ0xLCTB4NDEwMDA0MDIKKworc3RydWN0IHRhZ19tZW1jbGsgeworCXUzMiBmbWVtY2xrOworfTsKKworc3RydWN0IHRhZyB7CisJc3RydWN0IHRhZ19oZWFkZXIgaGRyOworCXVuaW9uIHsKKwkJc3RydWN0IHRhZ19jb3JlCQljb3JlOworCQlzdHJ1Y3QgdGFnX21lbTMyCW1lbTsKKwkJc3RydWN0IHRhZ192aWRlb3RleHQJdmlkZW90ZXh0OworCQlzdHJ1Y3QgdGFnX3JhbWRpc2sJcmFtZGlzazsKKwkJc3RydWN0IHRhZ19pbml0cmQJaW5pdHJkOworCQlzdHJ1Y3QgdGFnX3NlcmlhbG5yCXNlcmlhbG5yOworCQlzdHJ1Y3QgdGFnX3JldmlzaW9uCXJldmlzaW9uOworCQlzdHJ1Y3QgdGFnX3ZpZGVvbGZiCXZpZGVvbGZiOworCQlzdHJ1Y3QgdGFnX2NtZGxpbmUJY21kbGluZTsKKworCQkvKgorCQkgKiBBY29ybiBzcGVjaWZpYworCQkgKi8KKwkJc3RydWN0IHRhZ19hY29ybglhY29ybjsKKworCQkvKgorCQkgKiBEQzIxMjg1IHNwZWNpZmljCisJCSAqLworCQlzdHJ1Y3QgdGFnX21lbWNsawltZW1jbGs7CisJfSB1OworfTsKKworc3RydWN0IHRhZ3RhYmxlIHsKKwl1MzIgdGFnOworCWludCAoKnBhcnNlKShjb25zdCBzdHJ1Y3QgdGFnICopOworfTsKKworI2RlZmluZSBfX3RhZyBfX2F0dHJpYnV0ZV91c2VkX18gX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIi50YWdsaXN0IikpKQorI2RlZmluZSBfX3RhZ3RhYmxlKHRhZywgZm4pIFwKK3N0YXRpYyBzdHJ1Y3QgdGFndGFibGUgX190YWd0YWJsZV8jI2ZuIF9fdGFnID0geyB0YWcsIGZuIH0KKworI2RlZmluZSB0YWdfbWVtYmVyX3ByZXNlbnQodGFnLG1lbWJlcikJCQkJXAorCSgodW5zaWduZWQgbG9uZykoJigoc3RydWN0IHRhZyAqKTBMKS0+bWVtYmVyICsgMSkJXAorCQk8PSAodGFnKS0+aGRyLnNpemUgKiA0KQorCisjZGVmaW5lIHRhZ19uZXh0KHQpCSgoc3RydWN0IHRhZyAqKSgodTMyICopKHQpICsgKHQpLT5oZHIuc2l6ZSkpCisjZGVmaW5lIHRhZ19zaXplKHR5cGUpCSgoc2l6ZW9mKHN0cnVjdCB0YWdfaGVhZGVyKSArIHNpemVvZihzdHJ1Y3QgdHlwZSkpID4+IDIpCisKKyNkZWZpbmUgZm9yX2VhY2hfdGFnKHQsYmFzZSkJCVwKKwlmb3IgKHQgPSBiYXNlOyB0LT5oZHIuc2l6ZTsgdCA9IHRhZ19uZXh0KHQpKQorCisvKgorICogTWVtb3J5IG1hcCBkZXNjcmlwdGlvbgorICovCisjaWZkZWYgQ09ORklHX0FSQ0hfTEg3QTQwWAorIyBkZWZpbmUgTlJfQkFOS1MgMTYKKyNlbHNlCisjIGRlZmluZSBOUl9CQU5LUyA4CisjZW5kaWYKKworc3RydWN0IG1lbWluZm8geworCWludCBucl9iYW5rczsKKwlzdHJ1Y3QgeworCQl1bnNpZ25lZCBsb25nIHN0YXJ0OworCQl1bnNpZ25lZCBsb25nIHNpemU7CisJCWludCAgICAgICAgICAgbm9kZTsKKwl9IGJhbmtbTlJfQkFOS1NdOworfTsKKworLyoKKyAqIEVhcmx5IGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzLgorICovCitzdHJ1Y3QgZWFybHlfcGFyYW1zIHsKKwljb25zdCBjaGFyICphcmc7CisJdm9pZCAoKmZuKShjaGFyICoqcCk7Cit9OworCisjZGVmaW5lIF9fZWFybHlfcGFyYW0obmFtZSxmbikJCQkJCVwKK3N0YXRpYyBzdHJ1Y3QgZWFybHlfcGFyYW1zIF9fZWFybHlfIyNmbiBfX2F0dHJpYnV0ZV91c2VkX18JXAorX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIl9fZWFybHlfcGFyYW0iKSkpID0geyBuYW1lLCBmbiB9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3NobWJ1Zi5oIGIvaW5jbHVkZS9hc20tYXJtL3NobWJ1Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlNWM2N2IKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vc2htYnVmLmgKQEAgLTAsMCArMSw0MiBAQAorI2lmbmRlZiBfQVNNQVJNX1NITUJVRl9ICisjZGVmaW5lIF9BU01BUk1fU0hNQlVGX0gKKworLyogCisgKiBUaGUgc2htaWQ2NF9kcyBzdHJ1Y3R1cmUgZm9yIGFybSBhcmNoaXRlY3R1cmUuCisgKiBOb3RlIGV4dHJhIHBhZGRpbmcgYmVjYXVzZSB0aGlzIHN0cnVjdHVyZSBpcyBwYXNzZWQgYmFjayBhbmQgZm9ydGgKKyAqIGJldHdlZW4ga2VybmVsIGFuZCB1c2VyIHNwYWNlLgorICoKKyAqIFBhZCBzcGFjZSBpcyBsZWZ0IGZvcjoKKyAqIC0gNjQtYml0IHRpbWVfdCB0byBzb2x2ZSB5MjAzOCBwcm9ibGVtCisgKiAtIDIgbWlzY2VsbGFuZW91cyAzMi1iaXQgdmFsdWVzCisgKi8KKworc3RydWN0IHNobWlkNjRfZHMgeworCXN0cnVjdCBpcGM2NF9wZXJtCXNobV9wZXJtOwkvKiBvcGVyYXRpb24gcGVybXMgKi8KKwlzaXplX3QJCQlzaG1fc2Vnc3o7CS8qIHNpemUgb2Ygc2VnbWVudCAoYnl0ZXMpICovCisJX19rZXJuZWxfdGltZV90CQlzaG1fYXRpbWU7CS8qIGxhc3QgYXR0YWNoIHRpbWUgKi8KKwl1bnNpZ25lZCBsb25nCQlfX3VudXNlZDE7CisJX19rZXJuZWxfdGltZV90CQlzaG1fZHRpbWU7CS8qIGxhc3QgZGV0YWNoIHRpbWUgKi8KKwl1bnNpZ25lZCBsb25nCQlfX3VudXNlZDI7CisJX19rZXJuZWxfdGltZV90CQlzaG1fY3RpbWU7CS8qIGxhc3QgY2hhbmdlIHRpbWUgKi8KKwl1bnNpZ25lZCBsb25nCQlfX3VudXNlZDM7CisJX19rZXJuZWxfcGlkX3QJCXNobV9jcGlkOwkvKiBwaWQgb2YgY3JlYXRvciAqLworCV9fa2VybmVsX3BpZF90CQlzaG1fbHBpZDsJLyogcGlkIG9mIGxhc3Qgb3BlcmF0b3IgKi8KKwl1bnNpZ25lZCBsb25nCQlzaG1fbmF0dGNoOwkvKiBuby4gb2YgY3VycmVudCBhdHRhY2hlcyAqLworCXVuc2lnbmVkIGxvbmcJCV9fdW51c2VkNDsKKwl1bnNpZ25lZCBsb25nCQlfX3VudXNlZDU7Cit9OworCitzdHJ1Y3Qgc2htaW5mbzY0IHsKKwl1bnNpZ25lZCBsb25nCXNobW1heDsKKwl1bnNpZ25lZCBsb25nCXNobW1pbjsKKwl1bnNpZ25lZCBsb25nCXNobW1uaTsKKwl1bnNpZ25lZCBsb25nCXNobXNlZzsKKwl1bnNpZ25lZCBsb25nCXNobWFsbDsKKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkMTsKKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkMjsKKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkMzsKKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkNDsKK307CisKKyNlbmRpZiAvKiBfQVNNQVJNX1NITUJVRl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vc2htcGFyYW0uaCBiL2luY2x1ZGUvYXNtLWFybS9zaG1wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1MjIzYjMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vc2htcGFyYW0uaApAQCAtMCwwICsxLDE2IEBACisjaWZuZGVmIF9BU01BUk1fU0hNUEFSQU1fSAorI2RlZmluZSBfQVNNQVJNX1NITVBBUkFNX0gKKworLyoKKyAqIFRoaXMgc2hvdWxkIGJlIHRoZSBzaXplIG9mIHRoZSB2aXJ0dWFsbHkgaW5kZXhlZCBjYWNoZS93YXlzLAorICogb3IgcGFnZSBzaXplLCB3aGljaGV2ZXIgaXMgZ3JlYXRlciBzaW5jZSB0aGUgY2FjaGUgYWxpYXNlcworICogZXZlcnkgc2l6ZS93YXlzIGJ5dGVzLgorICovCisjZGVmaW5lCVNITUxCQQkoNCAqIFBBR0VfU0laRSkJCSAvKiBhdHRhY2ggYWRkciBhIG11bHRpcGxlIG9mIHRoaXMgKi8KKworLyoKKyAqIEVuZm9yY2UgU0hNTEJBIGluIHNobWF0CisgKi8KKyNkZWZpbmUgX19BUkNIX0ZPUkNFX1NITUxCQQorCisjZW5kaWYgLyogX0FTTUFSTV9TSE1QQVJBTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vc2lnY29udGV4dC5oIGIvaW5jbHVkZS9hc20tYXJtL3NpZ2NvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzBiODBiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL3NpZ2NvbnRleHQuaApAQCAtMCwwICsxLDM0IEBACisjaWZuZGVmIF9BU01BUk1fU0lHQ09OVEVYVF9ICisjZGVmaW5lIF9BU01BUk1fU0lHQ09OVEVYVF9ICisKKy8qCisgKiBTaWduYWwgY29udGV4dCBzdHJ1Y3R1cmUgLSBjb250YWlucyBhbGwgaW5mbyB0byBkbyB3aXRoIHRoZSBzdGF0ZQorICogYmVmb3JlIHRoZSBzaWduYWwgaGFuZGxlciB3YXMgaW52b2tlZC4gIE5vdGU6IG9ubHkgYWRkIG5ldyBlbnRyaWVzCisgKiB0byB0aGUgZW5kIG9mIHRoZSBzdHJ1Y3R1cmUuCisgKi8KK3N0cnVjdCBzaWdjb250ZXh0IHsKKwl1bnNpZ25lZCBsb25nIHRyYXBfbm87CisJdW5zaWduZWQgbG9uZyBlcnJvcl9jb2RlOworCXVuc2lnbmVkIGxvbmcgb2xkbWFzazsKKwl1bnNpZ25lZCBsb25nIGFybV9yMDsKKwl1bnNpZ25lZCBsb25nIGFybV9yMTsKKwl1bnNpZ25lZCBsb25nIGFybV9yMjsKKwl1bnNpZ25lZCBsb25nIGFybV9yMzsKKwl1bnNpZ25lZCBsb25nIGFybV9yNDsKKwl1bnNpZ25lZCBsb25nIGFybV9yNTsKKwl1bnNpZ25lZCBsb25nIGFybV9yNjsKKwl1bnNpZ25lZCBsb25nIGFybV9yNzsKKwl1bnNpZ25lZCBsb25nIGFybV9yODsKKwl1bnNpZ25lZCBsb25nIGFybV9yOTsKKwl1bnNpZ25lZCBsb25nIGFybV9yMTA7CisJdW5zaWduZWQgbG9uZyBhcm1fZnA7CisJdW5zaWduZWQgbG9uZyBhcm1faXA7CisJdW5zaWduZWQgbG9uZyBhcm1fc3A7CisJdW5zaWduZWQgbG9uZyBhcm1fbHI7CisJdW5zaWduZWQgbG9uZyBhcm1fcGM7CisJdW5zaWduZWQgbG9uZyBhcm1fY3BzcjsKKwl1bnNpZ25lZCBsb25nIGZhdWx0X2FkZHJlc3M7Cit9OworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3NpZ2luZm8uaCBiL2luY2x1ZGUvYXNtLWFybS9zaWdpbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWUyMTg1MgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9zaWdpbmZvLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9BU01BUk1fU0lHSU5GT19ICisjZGVmaW5lIF9BU01BUk1fU0lHSU5GT19ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zaWdpbmZvLmg+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3NpZ25hbC5oIGIvaW5jbHVkZS9hc20tYXJtL3NpZ25hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwMzNlNWYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vc2lnbmFsLmgKQEAgLTAsMCArMSwxOTQgQEAKKyNpZm5kZWYgX0FTTUFSTV9TSUdOQUxfSAorI2RlZmluZSBfQVNNQVJNX1NJR05BTF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKiBBdm9pZCB0b28gbWFueSBoZWFkZXIgb3JkZXJpbmcgcHJvYmxlbXMuICAqLworc3RydWN0IHNpZ2luZm87CisKKyNpZmRlZiBfX0tFUk5FTF9fCisvKiBNb3N0IHRoaW5ncyBzaG91bGQgYmUgY2xlYW4gZW5vdWdoIHRvIHJlZGVmaW5lIHRoaXMgYXQgd2lsbCwgaWYgY2FyZQorICAgaXMgdGFrZW4gdG8gbWFrZSBsaWJjIG1hdGNoLiAgKi8KKworI2RlZmluZSBfTlNJRwkJNjQKKyNkZWZpbmUgX05TSUdfQlBXCTMyCisjZGVmaW5lIF9OU0lHX1dPUkRTCShfTlNJRyAvIF9OU0lHX0JQVykKKwordHlwZWRlZiB1bnNpZ25lZCBsb25nIG9sZF9zaWdzZXRfdDsJCS8qIGF0IGxlYXN0IDMyIGJpdHMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcgc2lnW19OU0lHX1dPUkRTXTsKK30gc2lnc2V0X3Q7CisKKyNlbHNlCisvKiBIZXJlIHdlIG11c3QgY2F0ZXIgdG8gbGliY3MgdGhhdCBwb2tlIGFib3V0IGluIGtlcm5lbCBoZWFkZXJzLiAgKi8KKworI2RlZmluZSBOU0lHCQkzMgordHlwZWRlZiB1bnNpZ25lZCBsb25nIHNpZ3NldF90OworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZGVmaW5lIFNJR0hVUAkJIDEKKyNkZWZpbmUgU0lHSU5UCQkgMgorI2RlZmluZSBTSUdRVUlUCQkgMworI2RlZmluZSBTSUdJTEwJCSA0CisjZGVmaW5lIFNJR1RSQVAJCSA1CisjZGVmaW5lIFNJR0FCUlQJCSA2CisjZGVmaW5lIFNJR0lPVAkJIDYKKyNkZWZpbmUgU0lHQlVTCQkgNworI2RlZmluZSBTSUdGUEUJCSA4CisjZGVmaW5lIFNJR0tJTEwJCSA5CisjZGVmaW5lIFNJR1VTUjEJCTEwCisjZGVmaW5lIFNJR1NFR1YJCTExCisjZGVmaW5lIFNJR1VTUjIJCTEyCisjZGVmaW5lIFNJR1BJUEUJCTEzCisjZGVmaW5lIFNJR0FMUk0JCTE0CisjZGVmaW5lIFNJR1RFUk0JCTE1CisjZGVmaW5lIFNJR1NUS0ZMVAkxNgorI2RlZmluZSBTSUdDSExECQkxNworI2RlZmluZSBTSUdDT05UCQkxOAorI2RlZmluZSBTSUdTVE9QCQkxOQorI2RlZmluZSBTSUdUU1RQCQkyMAorI2RlZmluZSBTSUdUVElOCQkyMQorI2RlZmluZSBTSUdUVE9VCQkyMgorI2RlZmluZSBTSUdVUkcJCTIzCisjZGVmaW5lIFNJR1hDUFUJCTI0CisjZGVmaW5lIFNJR1hGU1oJCTI1CisjZGVmaW5lIFNJR1ZUQUxSTQkyNgorI2RlZmluZSBTSUdQUk9GCQkyNworI2RlZmluZSBTSUdXSU5DSAkyOAorI2RlZmluZSBTSUdJTwkJMjkKKyNkZWZpbmUgU0lHUE9MTAkJU0lHSU8KKy8qCisjZGVmaW5lIFNJR0xPU1QJCTI5CisqLworI2RlZmluZSBTSUdQV1IJCTMwCisjZGVmaW5lIFNJR1NZUwkJMzEKKyNkZWZpbmUJU0lHVU5VU0VECTMxCisKKy8qIFRoZXNlIHNob3VsZCBub3QgYmUgY29uc2lkZXJlZCBjb25zdGFudHMgZnJvbSB1c2VybGFuZC4gICovCisjZGVmaW5lIFNJR1JUTUlOCTMyCisjZGVmaW5lIFNJR1JUTUFYCV9OU0lHCisKKyNkZWZpbmUgU0lHU1dJCQkzMgorCisvKgorICogU0FfRkxBR1MgdmFsdWVzOgorICoKKyAqIFNBX05PQ0xEU1RPUAkJZmxhZyB0byB0dXJuIG9mZiBTSUdDSExEIHdoZW4gY2hpbGRyZW4gc3RvcC4KKyAqIFNBX05PQ0xEV0FJVAkJZmxhZyBvbiBTSUdDSExEIHRvIGluaGliaXQgem9tYmllcy4KKyAqIFNBX1NJR0lORk8JCWRlbGl2ZXIgdGhlIHNpZ25hbCB3aXRoIFNJR0lORk8gc3RydWN0cworICogU0FfVEhJUlRZVFdPCQlkZWxpdmVycyB0aGUgc2lnbmFsIGluIDMyLWJpdCBtb2RlLCBldmVuIGlmIHRoZSB0YXNrIAorICoJCQlpcyBydW5uaW5nIGluIDI2LWJpdC4KKyAqIFNBX09OU1RBQ0sJCWFsbG93cyBhbHRlcm5hdGUgc2lnbmFsIHN0YWNrcyAoc2VlIHNpZ2FsdHN0YWNrKDIpKS4KKyAqIFNBX1JFU1RBUlQJCWZsYWcgdG8gZ2V0IHJlc3RhcnRpbmcgc2lnbmFscyAod2hpY2ggd2VyZSB0aGUgZGVmYXVsdCBsb25nIGFnbykKKyAqIFNBX0lOVEVSUlVQVAkJaXMgYSBuby1vcCwgYnV0IGxlZnQgZHVlIHRvIGhpc3RvcmljYWwgcmVhc29ucy4gVXNlIHRoZQorICogU0FfTk9ERUZFUgkJcHJldmVudHMgdGhlIGN1cnJlbnQgc2lnbmFsIGZyb20gYmVpbmcgbWFza2VkIGluIHRoZSBoYW5kbGVyLgorICogU0FfUkVTRVRIQU5ECQljbGVhcnMgdGhlIGhhbmRsZXIgd2hlbiB0aGUgc2lnbmFsIGlzIGRlbGl2ZXJlZC4KKyAqCisgKiBTQV9PTkVTSE9UIGFuZCBTQV9OT01BU0sgYXJlIHRoZSBoaXN0b3JpY2FsIExpbnV4IG5hbWVzIGZvciB0aGUgU2luZ2xlCisgKiBVbml4IG5hbWVzIFJFU0VUSEFORCBhbmQgTk9ERUZFUiByZXNwZWN0aXZlbHkuCisgKi8KKyNkZWZpbmUgU0FfTk9DTERTVE9QCTB4MDAwMDAwMDEKKyNkZWZpbmUgU0FfTk9DTERXQUlUCTB4MDAwMDAwMDIKKyNkZWZpbmUgU0FfU0lHSU5GTwkweDAwMDAwMDA0CisjZGVmaW5lIFNBX1RISVJUWVRXTwkweDAyMDAwMDAwCisjZGVmaW5lIFNBX1JFU1RPUkVSCTB4MDQwMDAwMDAKKyNkZWZpbmUgU0FfT05TVEFDSwkweDA4MDAwMDAwCisjZGVmaW5lIFNBX1JFU1RBUlQJMHgxMDAwMDAwMAorI2RlZmluZSBTQV9OT0RFRkVSCTB4NDAwMDAwMDAKKyNkZWZpbmUgU0FfUkVTRVRIQU5ECTB4ODAwMDAwMDAKKworI2RlZmluZSBTQV9OT01BU0sJU0FfTk9ERUZFUgorI2RlZmluZSBTQV9PTkVTSE9UCVNBX1JFU0VUSEFORAorI2RlZmluZSBTQV9JTlRFUlJVUFQJMHgyMDAwMDAwMCAvKiBkdW1teSAtLSBpZ25vcmVkICovCisKKworLyogCisgKiBzaWdhbHRzdGFjayBjb250cm9scworICovCisjZGVmaW5lIFNTX09OU1RBQ0sJMQorI2RlZmluZSBTU19ESVNBQkxFCTIKKworI2RlZmluZSBNSU5TSUdTVEtTWgkyMDQ4CisjZGVmaW5lIFNJR1NUS1NaCTgxOTIKKworI2lmZGVmIF9fS0VSTkVMX18KKworLyoKKyAqIFRoZXNlIHZhbHVlcyBvZiBzYV9mbGFncyBhcmUgdXNlZCBvbmx5IGJ5IHRoZSBrZXJuZWwgYXMgcGFydCBvZiB0aGUKKyAqIGlycSBoYW5kbGluZyByb3V0aW5lcy4KKyAqCisgKiBTQV9JTlRFUlJVUFQgaXMgYWxzbyB1c2VkIGJ5IHRoZSBpcnEgaGFuZGxpbmcgcm91dGluZXMuCisgKiBTQV9TSElSUSBpcyBmb3Igc2hhcmVkIGludGVycnVwdCBzdXBwb3J0IG9uIFBDSSBhbmQgRUlTQS4KKyAqLworI2RlZmluZSBTQV9QUk9CRQkJMHg4MDAwMDAwMAorI2RlZmluZSBTQV9TQU1QTEVfUkFORE9NCTB4MTAwMDAwMDAKKyNkZWZpbmUgU0FfSVJRTk9NQVNLCQkweDA4MDAwMDAwCisjZGVmaW5lIFNBX1NISVJRCQkweDA0MDAwMDAwCisjZW5kaWYKKworI2RlZmluZSBTSUdfQkxPQ0sgICAgICAgICAgMAkvKiBmb3IgYmxvY2tpbmcgc2lnbmFscyAqLworI2RlZmluZSBTSUdfVU5CTE9DSyAgICAgICAgMQkvKiBmb3IgdW5ibG9ja2luZyBzaWduYWxzICovCisjZGVmaW5lIFNJR19TRVRNQVNLICAgICAgICAyCS8qIGZvciBzZXR0aW5nIHRoZSBzaWduYWwgbWFzayAqLworCisvKiBUeXBlIG9mIGEgc2lnbmFsIGhhbmRsZXIuICAqLwordHlwZWRlZiB2b2lkIF9fc2lnbmFsZm5fdChpbnQpOwordHlwZWRlZiBfX3NpZ25hbGZuX3QgX191c2VyICpfX3NpZ2hhbmRsZXJfdDsKKwordHlwZWRlZiB2b2lkIF9fcmVzdG9yZWZuX3Qodm9pZCk7Cit0eXBlZGVmIF9fcmVzdG9yZWZuX3QgX191c2VyICpfX3NpZ3Jlc3RvcmVfdDsKKworI2RlZmluZSBTSUdfREZMCSgoX19zaWdoYW5kbGVyX3QpMCkJLyogZGVmYXVsdCBzaWduYWwgaGFuZGxpbmcgKi8KKyNkZWZpbmUgU0lHX0lHTgkoKF9fc2lnaGFuZGxlcl90KTEpCS8qIGlnbm9yZSBzaWduYWwgKi8KKyNkZWZpbmUgU0lHX0VSUgkoKF9fc2lnaGFuZGxlcl90KS0xKQkvKiBlcnJvciByZXR1cm4gZnJvbSBzaWduYWwgKi8KKworI2lmZGVmIF9fS0VSTkVMX18KK3N0cnVjdCBvbGRfc2lnYWN0aW9uIHsKKwlfX3NpZ2hhbmRsZXJfdCBzYV9oYW5kbGVyOworCW9sZF9zaWdzZXRfdCBzYV9tYXNrOworCXVuc2lnbmVkIGxvbmcgc2FfZmxhZ3M7CisJX19zaWdyZXN0b3JlX3Qgc2FfcmVzdG9yZXI7Cit9OworCitzdHJ1Y3Qgc2lnYWN0aW9uIHsKKwlfX3NpZ2hhbmRsZXJfdCBzYV9oYW5kbGVyOworCXVuc2lnbmVkIGxvbmcgc2FfZmxhZ3M7CisJX19zaWdyZXN0b3JlX3Qgc2FfcmVzdG9yZXI7CisJc2lnc2V0X3Qgc2FfbWFzazsJCS8qIG1hc2sgbGFzdCBmb3IgZXh0ZW5zaWJpbGl0eSAqLworfTsKKworc3RydWN0IGtfc2lnYWN0aW9uIHsKKwlzdHJ1Y3Qgc2lnYWN0aW9uIHNhOworfTsKKworI2Vsc2UKKy8qIEhlcmUgd2UgbXVzdCBjYXRlciB0byBsaWJjcyB0aGF0IHBva2UgYWJvdXQgaW4ga2VybmVsIGhlYWRlcnMuICAqLworCitzdHJ1Y3Qgc2lnYWN0aW9uIHsKKwl1bmlvbiB7CisJICBfX3NpZ2hhbmRsZXJfdCBfc2FfaGFuZGxlcjsKKwkgIHZvaWQgKCpfc2Ffc2lnYWN0aW9uKShpbnQsIHN0cnVjdCBzaWdpbmZvICosIHZvaWQgKik7CisJfSBfdTsKKwlzaWdzZXRfdCBzYV9tYXNrOworCXVuc2lnbmVkIGxvbmcgc2FfZmxhZ3M7CisJdm9pZCAoKnNhX3Jlc3RvcmVyKSh2b2lkKTsKK307CisKKyNkZWZpbmUgc2FfaGFuZGxlcglfdS5fc2FfaGFuZGxlcgorI2RlZmluZSBzYV9zaWdhY3Rpb24JX3UuX3NhX3NpZ2FjdGlvbgorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCit0eXBlZGVmIHN0cnVjdCBzaWdhbHRzdGFjayB7CisJdm9pZCBfX3VzZXIgKnNzX3NwOworCWludCBzc19mbGFnczsKKwlzaXplX3Qgc3Nfc2l6ZTsKK30gc3RhY2tfdDsKKworI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxhc20vc2lnY29udGV4dC5oPgorI2RlZmluZSBwdHJhY2Vfc2lnbmFsX2RlbGl2ZXIocmVncywgY29va2llKSBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vc2l6ZXMuaCBiL2luY2x1ZGUvYXNtLWFybS9zaXplcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmNTBhZTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vc2l6ZXMuaApAQCAtMCwwICsxLDUyIEBACisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisvKiBETyBOT1QgRURJVCEhIC0gdGhpcyBmaWxlIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkCisgKiAgICAgICAgICAgICAgICAgZnJvbSAucyBmaWxlIGJ5IGF3ayAtZiBzMmguYXdrCisgKi8KKy8qICBTaXplIGRlZmluaXRpb25zCisgKiAgQ29weXJpZ2h0IChDKSBBUk0gTGltaXRlZCAxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICovCisKKyNpZm5kZWYgX19zaXplc19oCisjZGVmaW5lIF9fc2l6ZXNfaCAgICAgICAgICAgICAgICAgICAgICAgMQorCisvKiBoYW5keSBzaXplcyAqLworI2RlZmluZSBTWl8xSyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgU1pfNEsgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIFNaXzhLICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBTWl8xNksgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgU1pfNjRLICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIFNaXzEyOEsgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBTWl8yNTZLICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgU1pfNTEySyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwCisKKyNkZWZpbmUgU1pfMU0gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIFNaXzJNICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMAorI2RlZmluZSBTWl80TSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgU1pfOE0gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIFNaXzE2TSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBTWl8zMk0gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgU1pfNjRNICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwCisjZGVmaW5lIFNaXzEyOE0gICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwMDAwMAorI2RlZmluZSBTWl8yNTZNICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgU1pfNTEyTSAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisKKyNkZWZpbmUgU1pfMUcgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIFNaXzJHICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorCisjZW5kaWYKKworLyogICAgICAgICBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9zbXAuaCBiL2luY2x1ZGUvYXNtLWFybS9zbXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjFmZDhmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL3NtcC5oCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL3NtcC5oCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNC0yMDA1IEFSTSBMdGQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2lmbmRlZiBfX0FTTV9BUk1fU01QX0gKKyNkZWZpbmUgX19BU01fQVJNX1NNUF9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgorI2luY2x1ZGUgPGxpbnV4L3RocmVhZF9pbmZvLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9zbXAuaD4KKworI2lmbmRlZiBDT05GSUdfU01QCisjIGVycm9yICI8YXNtLWFybS9zbXAuaD4gaW5jbHVkZWQgaW4gbm9uLVNNUCBidWlsZCIKKyNlbmRpZgorCisjZGVmaW5lIHNtcF9wcm9jZXNzb3JfaWQoKQkoY3VycmVudF90aHJlYWRfaW5mbygpLT5jcHUpCisKK2V4dGVybiBjcHVtYXNrX3QgY3B1X3ByZXNlbnRfbWFzazsKKyNkZWZpbmUgY3B1X3Bvc3NpYmxlX21hcCBjcHVfcHJlc2VudF9tYXNrCisKKy8qCisgKiBhdCB0aGUgbW9tZW50LCB0aGVyZSdzIG5vdCBhIGJpZyBwZW5hbHR5IGZvciBjaGFuZ2luZyBDUFVzCisgKiAodGhlID5iaWc8IHBlbmFsdHkgaXMgcnVubmluZyBTTVAgaW4gdGhlIGZpcnN0IHBsYWNlKQorICovCisjZGVmaW5lIFBST0NfQ0hBTkdFX1BFTkFMVFkJCTE1CisKK3N0cnVjdCBzZXFfZmlsZTsKKworLyoKKyAqIGdlbmVyYXRlIElQSSBsaXN0IHRleHQKKyAqLworZXh0ZXJuIHZvaWQgc2hvd19pcGlfbGlzdChzdHJ1Y3Qgc2VxX2ZpbGUgKnApOworCisvKgorICogTW92ZSBnbG9iYWwgZGF0YSBpbnRvIHBlci1wcm9jZXNzb3Igc3RvcmFnZS4KKyAqLworZXh0ZXJuIHZvaWQgc21wX3N0b3JlX2NwdV9pbmZvKHVuc2lnbmVkIGludCBjcHVpZCk7CisKKy8qCisgKiBSYWlzZSBhbiBJUEkgY3Jvc3MgY2FsbCBvbiBDUFVzIGluIGNhbGxtYXAuCisgKi8KK2V4dGVybiB2b2lkIHNtcF9jcm9zc19jYWxsKGNwdW1hc2tfdCBjYWxsbWFwKTsKKworLyoKKyAqIEJvb3QgYSBzZWNvbmRhcnkgQ1BVLCBhbmQgYXNzaWduIGl0IHRoZSBzcGVjaWZpZWQgaWRsZSB0YXNrLgorICogVGhpcyBhbHNvIGdpdmVzIHVzIHRoZSBpbml0aWFsIHN0YWNrIHRvIHVzZSBmb3IgdGhpcyBDUFUuCisgKi8KK2V4dGVybiBpbnQgYm9vdF9zZWNvbmRhcnkodW5zaWduZWQgaW50IGNwdSwgc3RydWN0IHRhc2tfc3RydWN0ICopOworCisjZW5kaWYgLyogaWZuZGVmIF9fQVNNX0FSTV9TTVBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3NvY2tldC5oIGIvaW5jbHVkZS9hc20tYXJtL3NvY2tldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2ZDIwNTgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vc29ja2V0LmgKQEAgLTAsMCArMSw1MCBAQAorI2lmbmRlZiBfQVNNQVJNX1NPQ0tFVF9ICisjZGVmaW5lIF9BU01BUk1fU09DS0VUX0gKKworI2luY2x1ZGUgPGFzbS9zb2NraW9zLmg+CisKKy8qIEZvciBzZXRzb2Nrb3B0KDIpICovCisjZGVmaW5lIFNPTF9TT0NLRVQJMQorCisjZGVmaW5lIFNPX0RFQlVHCTEKKyNkZWZpbmUgU09fUkVVU0VBRERSCTIKKyNkZWZpbmUgU09fVFlQRQkJMworI2RlZmluZSBTT19FUlJPUgk0CisjZGVmaW5lIFNPX0RPTlRST1VURQk1CisjZGVmaW5lIFNPX0JST0FEQ0FTVAk2CisjZGVmaW5lIFNPX1NOREJVRgk3CisjZGVmaW5lIFNPX1JDVkJVRgk4CisjZGVmaW5lIFNPX0tFRVBBTElWRQk5CisjZGVmaW5lIFNPX09PQklOTElORQkxMAorI2RlZmluZSBTT19OT19DSEVDSwkxMQorI2RlZmluZSBTT19QUklPUklUWQkxMgorI2RlZmluZSBTT19MSU5HRVIJMTMKKyNkZWZpbmUgU09fQlNEQ09NUEFUCTE0CisvKiBUbyBhZGQgOiNkZWZpbmUgU09fUkVVU0VQT1JUIDE1ICovCisjZGVmaW5lIFNPX1BBU1NDUkVECTE2CisjZGVmaW5lIFNPX1BFRVJDUkVECTE3CisjZGVmaW5lIFNPX1JDVkxPV0FUCTE4CisjZGVmaW5lIFNPX1NORExPV0FUCTE5CisjZGVmaW5lIFNPX1JDVlRJTUVPCTIwCisjZGVmaW5lIFNPX1NORFRJTUVPCTIxCisKKy8qIFNlY3VyaXR5IGxldmVscyAtIGFzIHBlciBOUkwgSVB2NiAtIGRvbid0IGFjdHVhbGx5IGRvIGFueXRoaW5nICovCisjZGVmaW5lIFNPX1NFQ1VSSVRZX0FVVEhFTlRJQ0FUSU9OCQkyMgorI2RlZmluZSBTT19TRUNVUklUWV9FTkNSWVBUSU9OX1RSQU5TUE9SVAkyMworI2RlZmluZSBTT19TRUNVUklUWV9FTkNSWVBUSU9OX05FVFdPUksJCTI0CisKKyNkZWZpbmUgU09fQklORFRPREVWSUNFIDI1CisKKy8qIFNvY2tldCBmaWx0ZXJpbmcgKi8KKyNkZWZpbmUgU09fQVRUQUNIX0ZJTFRFUiAgICAgICAgMjYKKyNkZWZpbmUgU09fREVUQUNIX0ZJTFRFUiAgICAgICAgMjcKKworI2RlZmluZSBTT19QRUVSTkFNRSAgICAgICAgICAgICAyOAorI2RlZmluZSBTT19USU1FU1RBTVAJCTI5CisjZGVmaW5lIFNDTV9USU1FU1RBTVAJCVNPX1RJTUVTVEFNUAorCisjZGVmaW5lIFNPX0FDQ0VQVENPTk4JCTMwCisKKyNkZWZpbmUgU09fUEVFUlNFQwkJMzEKKworI2VuZGlmIC8qIF9BU01fU09DS0VUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9zb2NraW9zLmggYi9pbmNsdWRlL2FzbS1hcm0vc29ja2lvcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3YzM0MDgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vc29ja2lvcy5oCkBAIC0wLDAgKzEsMTIgQEAKKyNpZm5kZWYgX19BUkNIX0FSTV9TT0NLSU9TX0gKKyNkZWZpbmUgX19BUkNIX0FSTV9TT0NLSU9TX0gKKworLyogU29ja2V0LWxldmVsIEkvTyBjb250cm9sIGNhbGxzLiAqLworI2RlZmluZSBGSU9TRVRPV04gCTB4ODkwMQorI2RlZmluZSBTSU9DU1BHUlAJMHg4OTAyCisjZGVmaW5lIEZJT0dFVE9XTgkweDg5MDMKKyNkZWZpbmUgU0lPQ0dQR1JQCTB4ODkwNAorI2RlZmluZSBTSU9DQVRNQVJLCTB4ODkwNQorI2RlZmluZSBTSU9DR1NUQU1QCTB4ODkwNgkJLyogR2V0IHN0YW1wICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3NwaW5sb2NrLmggYi9pbmNsdWRlL2FzbS1hcm0vc3BpbmxvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODIzMjM2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL3NwaW5sb2NrLmgKQEAgLTAsMCArMSwxNjkgQEAKKyNpZm5kZWYgX19BU01fU1BJTkxPQ0tfSAorI2RlZmluZSBfX0FTTV9TUElOTE9DS19ICisKKyNpZiBfX0xJTlVYX0FSTV9BUkNIX18gPCA2CisjZXJyb3IgU01QIG5vdCBzdXBwb3J0ZWQgb24gcHJlLUFSTXY2IENQVXMKKyNlbmRpZgorCisvKgorICogQVJNdjYgU3Bpbi1sb2NraW5nLgorICoKKyAqIFdlIChleGNsdXNpdmVseSkgcmVhZCB0aGUgb2xkIHZhbHVlLCBhbmQgZGVjcmVtZW50IGl0LiAgSWYgaXQKKyAqIGhpdHMgemVybywgd2UgbWF5IGhhdmUgd29uIHRoZSBsb2NrLCBzbyB3ZSB0cnkgKGV4Y2x1c2l2ZWx5KQorICogc3RvcmluZyBpdC4KKyAqCisgKiBVbmxvY2tlZCB2YWx1ZTogMAorICogTG9ja2VkIHZhbHVlOiAxCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbG9jazsKKyNpZmRlZiBDT05GSUdfUFJFRU1QVAorCXVuc2lnbmVkIGludCBicmVha19sb2NrOworI2VuZGlmCit9IHNwaW5sb2NrX3Q7CisKKyNkZWZpbmUgU1BJTl9MT0NLX1VOTE9DS0VECShzcGlubG9ja190KSB7IDAgfQorCisjZGVmaW5lIHNwaW5fbG9ja19pbml0KHgpCWRvIHsgKih4KSA9IFNQSU5fTE9DS19VTkxPQ0tFRDsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgc3Bpbl9pc19sb2NrZWQoeCkJKCh4KS0+bG9jayAhPSAwKQorI2RlZmluZSBzcGluX3VubG9ja193YWl0KHgpCWRvIHsgYmFycmllcigpOyB9IHdoaWxlIChzcGluX2lzX2xvY2tlZCh4KSkKKyNkZWZpbmUgX3Jhd19zcGluX2xvY2tfZmxhZ3MobG9jaywgZmxhZ3MpIF9yYXdfc3Bpbl9sb2NrKGxvY2spCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfcmF3X3NwaW5fbG9jayhzcGlubG9ja190ICpsb2NrKQoreworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisiMToJbGRyZXgJJTAsIFslMV1cbiIKKyIJdGVxCSUwLCAjMFxuIgorIglzdHJleGVxCSUwLCAlMiwgWyUxXVxuIgorIgl0ZXFlcQklMCwgIzBcbiIKKyIJYm5lCTFiIgorCTogIj0mciIgKHRtcCkKKwk6ICJyIiAoJmxvY2stPmxvY2spLCAiciIgKDEpCisJOiAiY2MiLCAibWVtb3J5Iik7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9yYXdfc3Bpbl90cnlsb2NrKHNwaW5sb2NrX3QgKmxvY2spCit7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKyIJbGRyZXgJJTAsIFslMV1cbiIKKyIJdGVxCSUwLCAjMFxuIgorIglzdHJleGVxCSUwLCAlMiwgWyUxXSIKKwk6ICI9JnIiICh0bXApCisJOiAiciIgKCZsb2NrLT5sb2NrKSwgInIiICgxKQorCTogImNjIiwgIm1lbW9yeSIpOworCisJcmV0dXJuIHRtcCA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX3Jhd19zcGluX3VubG9jayhzcGlubG9ja190ICpsb2NrKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKAorIglzdHIJJTEsIFslMF0iCisJOgorCTogInIiICgmbG9jay0+bG9jayksICJyIiAoMCkKKwk6ICJjYyIsICJtZW1vcnkiKTsKK30KKworLyoKKyAqIFJXTE9DS1MKKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCXZvbGF0aWxlIHVuc2lnbmVkIGludCBsb2NrOworI2lmZGVmIENPTkZJR19QUkVFTVBUCisJdW5zaWduZWQgaW50IGJyZWFrX2xvY2s7CisjZW5kaWYKK30gcndsb2NrX3Q7CisKKyNkZWZpbmUgUldfTE9DS19VTkxPQ0tFRAkocndsb2NrX3QpIHsgMCB9CisjZGVmaW5lIHJ3bG9ja19pbml0KHgpCQlkbyB7ICooeCkgKyBSV19MT0NLX1VOTE9DS0VEOyB9IHdoaWxlICgwKQorCisvKgorICogV3JpdGUgbG9ja3MgYXJlIGVhc3kgLSB3ZSBqdXN0IHNldCBiaXQgMzEuICBXaGVuIHVubG9ja2luZywgd2UgY2FuCisgKiBqdXN0IHdyaXRlIHplcm8gc2luY2UgdGhlIGxvY2sgaXMgZXhjbHVzaXZlbHkgaGVsZC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIF9yYXdfd3JpdGVfbG9jayhyd2xvY2tfdCAqcncpCit7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKyIxOglsZHJleAklMCwgWyUxXVxuIgorIgl0ZXEJJTAsICMwXG4iCisiCXN0cmV4ZXEJJTAsICUyLCBbJTFdXG4iCisiCXRlcQklMCwgIzBcbiIKKyIJYm5lCTFiIgorCTogIj0mciIgKHRtcCkKKwk6ICJyIiAoJnJ3LT5sb2NrKSwgInIiICgweDgwMDAwMDAwKQorCTogImNjIiwgIm1lbW9yeSIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX3Jhd193cml0ZV91bmxvY2socndsb2NrX3QgKnJ3KQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCSJzdHIJJTEsIFslMF0iCisJOgorCTogInIiICgmcnctPmxvY2spLCAiciIgKDApCisJOiAiY2MiLCAibWVtb3J5Iik7Cit9CisKKy8qCisgKiBSZWFkIGxvY2tzIGFyZSBhIGJpdCBtb3JlIGhhaXJ5OgorICogIC0gRXhjbHVzaXZlbHkgbG9hZCB0aGUgbG9jayB2YWx1ZS4KKyAqICAtIEluY3JlbWVudCBpdC4KKyAqICAtIFN0b3JlIG5ldyBsb2NrIHZhbHVlIGlmIHBvc2l0aXZlLCBhbmQgd2Ugc3RpbGwgb3duIHRoaXMgbG9jYXRpb24uCisgKiAgICBJZiB0aGUgdmFsdWUgaXMgbmVnYXRpdmUsIHdlJ3ZlIGFscmVhZHkgZmFpbGVkLgorICogIC0gSWYgd2UgZmFpbGVkIHRvIHN0b3JlIHRoZSB2YWx1ZSwgd2Ugd2FudCBhIG5lZ2F0aXZlIHJlc3VsdC4KKyAqICAtIElmIHdlIGZhaWxlZCwgdHJ5IGFnYWluLgorICogVW5sb2NraW5nIGlzIHNpbWlsYXJseSBoYWlyeS4gIFdlIG1heSBoYXZlIG11bHRpcGxlIHJlYWQgbG9ja3MKKyAqIGN1cnJlbnRseSBhY3RpdmUuICBIb3dldmVyLCB3ZSBrbm93IHdlIHdvbid0IGhhdmUgYW55IHdyaXRlCisgKiBsb2Nrcy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIF9yYXdfcmVhZF9sb2NrKHJ3bG9ja190ICpydykKK3sKKwl1bnNpZ25lZCBsb25nIHRtcCwgdG1wMjsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorIjE6CWxkcmV4CSUwLCBbJTJdXG4iCisiCWFkZHMJJTAsICUwLCAjMVxuIgorIglzdHJleHBsCSUxLCAlMCwgWyUyXVxuIgorIglyc2JwbHMJJTAsICUxLCAjMFxuIgorIglibWkJMWIiCisJOiAiPSZyIiAodG1wKSwgIj0mciIgKHRtcDIpCisJOiAiciIgKCZydy0+bG9jaykKKwk6ICJjYyIsICJtZW1vcnkiKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9yYXdfcmVhZF91bmxvY2socndsb2NrX3QgKnJ3KQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKAorIjE6CWxkcmV4CSUwLCBbJTJdXG4iCisiCXN1YgklMCwgJTAsICMxXG4iCisiCXN0cmV4CSUxLCAlMCwgWyUyXVxuIgorIgl0ZXEJJTEsICMwXG4iCisiCWJuZQkxYiIKKwk6ICI9JnIiICh0bXApLCAiPSZyIiAodG1wMikKKwk6ICJyIiAoJnJ3LT5sb2NrKQorCTogImNjIiwgIm1lbW9yeSIpOworfQorCisjZGVmaW5lIF9yYXdfcmVhZF90cnlsb2NrKGxvY2spIGdlbmVyaWNfcmF3X3JlYWRfdHJ5bG9jayhsb2NrKQorCitzdGF0aWMgaW5saW5lIGludCBfcmF3X3dyaXRlX3RyeWxvY2socndsb2NrX3QgKnJ3KQoreworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisiMToJbGRyZXgJJTAsIFslMV1cbiIKKyIJdGVxCSUwLCAjMFxuIgorIglzdHJleGVxCSUwLCAlMiwgWyUxXSIKKwk6ICI9JnIiICh0bXApCisJOiAiciIgKCZydy0+bG9jayksICJyIiAoMHg4MDAwMDAwMCkKKwk6ICJjYyIsICJtZW1vcnkiKTsKKworCXJldHVybiB0bXAgPT0gMDsKK30KKworI2VuZGlmIC8qIF9fQVNNX1NQSU5MT0NLX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9zdGF0LmggYi9pbmNsdWRlL2FzbS1hcm0vc3RhdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhOGU3YTgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vc3RhdC5oCkBAIC0wLDAgKzEsOTQgQEAKKyNpZm5kZWYgX0FTTUFSTV9TVEFUX0gKKyNkZWZpbmUgX0FTTUFSTV9TVEFUX0gKKworc3RydWN0IF9fb2xkX2tlcm5lbF9zdGF0IHsKKwl1bnNpZ25lZCBzaG9ydCBzdF9kZXY7CisJdW5zaWduZWQgc2hvcnQgc3RfaW5vOworCXVuc2lnbmVkIHNob3J0IHN0X21vZGU7CisJdW5zaWduZWQgc2hvcnQgc3Rfbmxpbms7CisJdW5zaWduZWQgc2hvcnQgc3RfdWlkOworCXVuc2lnbmVkIHNob3J0IHN0X2dpZDsKKwl1bnNpZ25lZCBzaG9ydCBzdF9yZGV2OworCXVuc2lnbmVkIGxvbmcgIHN0X3NpemU7CisJdW5zaWduZWQgbG9uZyAgc3RfYXRpbWU7CisJdW5zaWduZWQgbG9uZyAgc3RfbXRpbWU7CisJdW5zaWduZWQgbG9uZyAgc3RfY3RpbWU7Cit9OworCisjZGVmaW5lIFNUQVRfSEFWRV9OU0VDIAorCitzdHJ1Y3Qgc3RhdCB7CisjaWYgZGVmaW5lZChfX0FSTUVCX18pCisJdW5zaWduZWQgc2hvcnQgc3RfZGV2OworCXVuc2lnbmVkIHNob3J0IF9fcGFkMTsKKyNlbHNlCisJdW5zaWduZWQgbG9uZyAgc3RfZGV2OworI2VuZGlmCisJdW5zaWduZWQgbG9uZyAgc3RfaW5vOworCXVuc2lnbmVkIHNob3J0IHN0X21vZGU7CisJdW5zaWduZWQgc2hvcnQgc3Rfbmxpbms7CisJdW5zaWduZWQgc2hvcnQgc3RfdWlkOworCXVuc2lnbmVkIHNob3J0IHN0X2dpZDsKKyNpZiBkZWZpbmVkKF9fQVJNRUJfXykKKwl1bnNpZ25lZCBzaG9ydCBzdF9yZGV2OworCXVuc2lnbmVkIHNob3J0IF9fcGFkMjsKKyNlbHNlCisJdW5zaWduZWQgbG9uZyAgc3RfcmRldjsKKyNlbmRpZgorCXVuc2lnbmVkIGxvbmcgIHN0X3NpemU7CisJdW5zaWduZWQgbG9uZyAgc3RfYmxrc2l6ZTsKKwl1bnNpZ25lZCBsb25nICBzdF9ibG9ja3M7CisJdW5zaWduZWQgbG9uZyAgc3RfYXRpbWU7CisJdW5zaWduZWQgbG9uZyAgc3RfYXRpbWVfbnNlYzsKKwl1bnNpZ25lZCBsb25nICBzdF9tdGltZTsKKwl1bnNpZ25lZCBsb25nICBzdF9tdGltZV9uc2VjOworCXVuc2lnbmVkIGxvbmcgIHN0X2N0aW1lOworCXVuc2lnbmVkIGxvbmcgIHN0X2N0aW1lX25zZWM7CisJdW5zaWduZWQgbG9uZyAgX191bnVzZWQ0OworCXVuc2lnbmVkIGxvbmcgIF9fdW51c2VkNTsKK307CisKKy8qIFRoaXMgbWF0Y2hlcyBzdHJ1Y3Qgc3RhdDY0IGluIGdsaWJjMi4xLCBoZW5jZSB0aGUgYWJzb2x1dGVseQorICogaW5zYW5lIGFtb3VudHMgb2YgcGFkZGluZyBhcm91bmQgZGV2X3Qncy4KKyAqIE5vdGU6IFRoZSBrZXJuZWwgemVybydzIHRoZSBwYWRkZWQgcmVnaW9uIGJlY2F1c2UgZ2xpYmMgbWlnaHQgcmVhZCB0aGVtCisgKiBpbiB0aGUgaG9wZSB0aGF0IHRoZSBrZXJuZWwgaGFzIHN0cmV0Y2hlZCB0byB1c2luZyBsYXJnZXIgc2l6ZXMuCisgKi8KK3N0cnVjdCBzdGF0NjQgeworCXVuc2lnbmVkIGxvbmcgbG9uZwlzdF9kZXY7CisJdW5zaWduZWQgY2hhciAgIF9fcGFkMFs0XTsKKworI2RlZmluZSBTVEFUNjRfSEFTX0JST0tFTl9TVF9JTk8JMQorCXVuc2lnbmVkIGxvbmcJX19zdF9pbm87CisJdW5zaWduZWQgaW50CXN0X21vZGU7CisJdW5zaWduZWQgaW50CXN0X25saW5rOworCisJdW5zaWduZWQgbG9uZwlzdF91aWQ7CisJdW5zaWduZWQgbG9uZwlzdF9naWQ7CisKKwl1bnNpZ25lZCBsb25nIGxvbmcJc3RfcmRldjsKKwl1bnNpZ25lZCBjaGFyICAgX19wYWQzWzRdOworCisJbG9uZyBsb25nCXN0X3NpemU7CisJdW5zaWduZWQgbG9uZwlzdF9ibGtzaXplOworCisjaWYgZGVmaW5lZChfX0FSTUVCX18pCisJdW5zaWduZWQgbG9uZyAgIF9fcGFkNDsJCS8qIEZ1dHVyZSBwb3NzaWJsZSBzdF9ibG9ja3MgaGkgYml0cyAqLworCXVuc2lnbmVkIGxvbmcgICBzdF9ibG9ja3M7CS8qIE51bWJlciA1MTItYnl0ZSBibG9ja3MgYWxsb2NhdGVkLiAqLworI2Vsc2UgLyogTXVzdCBiZSBsaXR0bGUgKi8KKwl1bnNpZ25lZCBsb25nICAgc3RfYmxvY2tzOwkvKiBOdW1iZXIgNTEyLWJ5dGUgYmxvY2tzIGFsbG9jYXRlZC4gKi8KKwl1bnNpZ25lZCBsb25nICAgX19wYWQ0OwkJLyogRnV0dXJlIHBvc3NpYmxlIHN0X2Jsb2NrcyBoaSBiaXRzICovCisjZW5kaWYKKworCXVuc2lnbmVkIGxvbmcJc3RfYXRpbWU7CisJdW5zaWduZWQgbG9uZwlzdF9hdGltZV9uc2VjOworCisJdW5zaWduZWQgbG9uZwlzdF9tdGltZTsKKwl1bnNpZ25lZCBsb25nCXN0X210aW1lX25zZWM7CisKKwl1bnNpZ25lZCBsb25nCXN0X2N0aW1lOworCXVuc2lnbmVkIGxvbmcJc3RfY3RpbWVfbnNlYzsKKworCXVuc2lnbmVkIGxvbmcgbG9uZwlzdF9pbm87Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9zdGF0ZnMuaCBiL2luY2x1ZGUvYXNtLWFybS9zdGF0ZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODFmODI3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL3N0YXRmcy5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfQVNNQVJNX1NUQVRGU19ICisjZGVmaW5lIF9BU01BUk1fU1RBVEZTX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3N0YXRmcy5oPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9zdHJpbmcuaCBiL2luY2x1ZGUvYXNtLWFybS9zdHJpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYThhYjE2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL3N0cmluZy5oCkBAIC0wLDAgKzEsNDMgQEAKKyNpZm5kZWYgX19BU01fQVJNX1NUUklOR19ICisjZGVmaW5lIF9fQVNNX0FSTV9TVFJJTkdfSAorCisvKgorICogV2UgZG9uJ3QgZG8gaW5saW5lIHN0cmluZyBmdW5jdGlvbnMsIHNpbmNlIHRoZQorICogb3B0aW1pc2VkIGlubGluZSBhc20gdmVyc2lvbnMgYXJlIG5vdCBzbWFsbC4KKyAqLworCisjZGVmaW5lIF9fSEFWRV9BUkNIX1NUUlJDSFIKK2V4dGVybiBjaGFyICogc3RycmNocihjb25zdCBjaGFyICogcywgaW50IGMpOworCisjZGVmaW5lIF9fSEFWRV9BUkNIX1NUUkNIUgorZXh0ZXJuIGNoYXIgKiBzdHJjaHIoY29uc3QgY2hhciAqIHMsIGludCBjKTsKKworI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1DUFkKK2V4dGVybiB2b2lkICogbWVtY3B5KHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBfX2tlcm5lbF9zaXplX3QpOworCisjZGVmaW5lIF9fSEFWRV9BUkNIX01FTU1PVkUKK2V4dGVybiB2b2lkICogbWVtbW92ZSh2b2lkICosIGNvbnN0IHZvaWQgKiwgX19rZXJuZWxfc2l6ZV90KTsKKworI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1DSFIKK2V4dGVybiB2b2lkICogbWVtY2hyKGNvbnN0IHZvaWQgKiwgaW50LCBfX2tlcm5lbF9zaXplX3QpOworCisjZGVmaW5lIF9fSEFWRV9BUkNIX01FTVpFUk8KKyNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNU0VUCitleHRlcm4gdm9pZCAqIG1lbXNldCh2b2lkICosIGludCwgX19rZXJuZWxfc2l6ZV90KTsKKworZXh0ZXJuIHZvaWQgX19tZW16ZXJvKHZvaWQgKnB0ciwgX19rZXJuZWxfc2l6ZV90IG4pOworCisjZGVmaW5lIG1lbXNldChwLHYsbikJCQkJCQkJXAorCSh7CQkJCQkJCQlcCisJCWlmICgobikgIT0gMCkgewkJCQkJCVwKKwkJCWlmIChfX2J1aWx0aW5fY29uc3RhbnRfcCgodikpICYmICh2KSA9PSAwKQlcCisJCQkJX19tZW16ZXJvKChwKSwobikpOwkJCVwKKwkJCWVsc2UJCQkJCQlcCisJCQkJbWVtc2V0KChwKSwodiksKG4pKTsJCQlcCisJCX0JCQkJCQkJXAorCQkocCk7CQkJCQkJCVwKKwl9KQorCisjZGVmaW5lIG1lbXplcm8ocCxuKSAoeyBpZiAoKG4pICE9IDApIF9fbWVtemVybygocCksKG4pKTsgKHApOyB9KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9zdXNwZW5kLmggYi9pbmNsdWRlL2FzbS1hcm0vc3VzcGVuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmMGQwYmQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vc3VzcGVuZC5oCkBAIC0wLDAgKzEsNCBAQAorI2lmbmRlZiBfQVNNQVJNX1NVU1BFTkRfSAorI2RlZmluZSBfQVNNQVJNX1NVU1BFTkRfSAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLWFybS9zeXN0ZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTczMTI5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL3N5c3RlbS5oCkBAIC0wLDAgKzEsMzkwIEBACisjaWZuZGVmIF9fQVNNX0FSTV9TWVNURU1fSAorI2RlZmluZSBfX0FTTV9BUk1fU1lTVEVNX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjZGVmaW5lIENQVV9BUkNIX1VOS05PV04JMAorI2RlZmluZSBDUFVfQVJDSF9BUk12MwkJMQorI2RlZmluZSBDUFVfQVJDSF9BUk12NAkJMgorI2RlZmluZSBDUFVfQVJDSF9BUk12NFQJCTMKKyNkZWZpbmUgQ1BVX0FSQ0hfQVJNdjUJCTQKKyNkZWZpbmUgQ1BVX0FSQ0hfQVJNdjVUCQk1CisjZGVmaW5lIENQVV9BUkNIX0FSTXY1VEUJNgorI2RlZmluZSBDUFVfQVJDSF9BUk12NVRFSgk3CisjZGVmaW5lIENQVV9BUkNIX0FSTXY2CQk4CisKKy8qCisgKiBDUjEgYml0cyAoQ1AjMTUgQ1IxKQorICovCisjZGVmaW5lIENSX00JKDEgPDwgMCkJLyogTU1VIGVuYWJsZQkJCQkqLworI2RlZmluZSBDUl9BCSgxIDw8IDEpCS8qIEFsaWdubWVudCBhYm9ydCBlbmFibGUJCSovCisjZGVmaW5lIENSX0MJKDEgPDwgMikJLyogRGNhY2hlIGVuYWJsZQkJCSovCisjZGVmaW5lIENSX1cJKDEgPDwgMykJLyogV3JpdGUgYnVmZmVyIGVuYWJsZQkJCSovCisjZGVmaW5lIENSX1AJKDEgPDwgNCkJLyogMzItYml0IGV4Y2VwdGlvbiBoYW5kbGVyCQkqLworI2RlZmluZSBDUl9ECSgxIDw8IDUpCS8qIDMyLWJpdCBkYXRhIGFkZHJlc3MgcmFuZ2UJCSovCisjZGVmaW5lIENSX0wJKDEgPDwgNikJLyogSW1wbGVtZW50YXRpb24gZGVmaW5lZAkJKi8KKyNkZWZpbmUgQ1JfQgkoMSA8PCA3KQkvKiBCaWcgZW5kaWFuCQkJCSovCisjZGVmaW5lIENSX1MJKDEgPDwgOCkJLyogU3lzdGVtIE1NVSBwcm90ZWN0aW9uCQkqLworI2RlZmluZSBDUl9SCSgxIDw8IDkpCS8qIFJPTSBNTVUgcHJvdGVjdGlvbgkJCSovCisjZGVmaW5lIENSX0YJKDEgPDwgMTApCS8qIEltcGxlbWVudGF0aW9uIGRlZmluZWQJCSovCisjZGVmaW5lIENSX1oJKDEgPDwgMTEpCS8qIEltcGxlbWVudGF0aW9uIGRlZmluZWQJCSovCisjZGVmaW5lIENSX0kJKDEgPDwgMTIpCS8qIEljYWNoZSBlbmFibGUJCQkqLworI2RlZmluZSBDUl9WCSgxIDw8IDEzKQkvKiBWZWN0b3JzIHJlbG9jYXRlZCB0byAweGZmZmYwMDAwCSovCisjZGVmaW5lIENSX1JSCSgxIDw8IDE0KQkvKiBSb3VuZCBSb2JpbiBjYWNoZSByZXBsYWNlbWVudAkqLworI2RlZmluZSBDUl9MNAkoMSA8PCAxNSkJLyogTERSIHBjIGNhbiBzZXQgVCBiaXQJCQkqLworI2RlZmluZSBDUl9EVAkoMSA8PCAxNikKKyNkZWZpbmUgQ1JfSVQJKDEgPDwgMTgpCisjZGVmaW5lIENSX1NUCSgxIDw8IDE5KQorI2RlZmluZSBDUl9GSQkoMSA8PCAyMSkJLyogRmFzdCBpbnRlcnJ1cHQgKGxvd2VyIGxhdGVuY3kgbW9kZSkJKi8KKyNkZWZpbmUgQ1JfVQkoMSA8PCAyMikJLyogVW5hbGlnbmVkIGFjY2VzcyBvcGVyYXRpb24JCSovCisjZGVmaW5lIENSX1hQCSgxIDw8IDIzKQkvKiBFeHRlbmRlZCBwYWdlIHRhYmxlcwkJCSovCisjZGVmaW5lIENSX1ZFCSgxIDw8IDI0KQkvKiBWZWN0b3JlZCBpbnRlcnJ1cHRzCQkJKi8KKworI2RlZmluZSBDUFVJRF9JRAkwCisjZGVmaW5lIENQVUlEX0NBQ0hFVFlQRQkxCisjZGVmaW5lIENQVUlEX1RDTQkyCisjZGVmaW5lIENQVUlEX1RMQlRZUEUJMworCisjZGVmaW5lIHJlYWRfY3B1aWQocmVnKQkJCQkJCQlcCisJKHsJCQkJCQkJCVwKKwkJdW5zaWduZWQgaW50IF9fdmFsOwkJCQkJXAorCQlhc20oIm1yYwlwMTUsIDAsICUwLCBjMCwgYzAsICIgX19zdHJpbmdpZnkocmVnKQlcCisJCSAgICA6ICI9ciIgKF9fdmFsKQkJCQkJXAorCQkgICAgOgkJCQkJCQlcCisJCSAgICA6ICJjYyIpOwkJCQkJCVwKKwkJX192YWw7CQkJCQkJCVwKKwl9KQorCisvKgorICogVGhpcyBpcyB1c2VkIHRvIGVuc3VyZSB0aGUgY29tcGlsZXIgZGlkIGFjdHVhbGx5IGFsbG9jYXRlIHRoZSByZWdpc3RlciB3ZQorICogYXNrZWQgaXQgZm9yIHNvbWUgaW5saW5lIGFzc2VtYmx5IHNlcXVlbmNlcy4gIEFwcGFyZW50bHkgd2UgY2FuJ3QgdHJ1c3QKKyAqIHRoZSBjb21waWxlciBmcm9tIG9uZSB2ZXJzaW9uIHRvIGFub3RoZXIgc28gYSBiaXQgb2YgcGFyYW5vaWEgd29uJ3QgaHVydC4KKyAqIFRoaXMgc3RyaW5nIGlzIG1lYW50IHRvIGJlIGNvbmNhdGVuYXRlZCB3aXRoIHRoZSBpbmxpbmUgYXNtIHN0cmluZyBhbmQKKyAqIHdpbGwgY2F1c2UgY29tcGlsYXRpb24gdG8gc3RvcCBvbiBtaXNtYXRjaC4KKyAqIChmb3IgZGV0YWlscywgc2VlIGdjYyBQUiAxNTA4OSkKKyAqLworI2RlZmluZSBfX2FzbWVxKHgsIHkpICAiLmlmbmMgIiB4ICIsIiB5ICIgOyAuZXJyIDsgLmVuZGlmXG5cdCIKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKworc3RydWN0IHRocmVhZF9pbmZvOworc3RydWN0IHRhc2tfc3RydWN0OworCisvKiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3lzdGVtIHdlJ3JlIHJ1bm5pbmcgb24gKi8KK2V4dGVybiB1bnNpZ25lZCBpbnQgc3lzdGVtX3JldjsKK2V4dGVybiB1bnNpZ25lZCBpbnQgc3lzdGVtX3NlcmlhbF9sb3c7CitleHRlcm4gdW5zaWduZWQgaW50IHN5c3RlbV9zZXJpYWxfaGlnaDsKK2V4dGVybiB1bnNpZ25lZCBpbnQgbWVtX2ZjbGtfMjEyODU7CisKK3N0cnVjdCBwdF9yZWdzOworCit2b2lkIGRpZShjb25zdCBjaGFyICptc2csIHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgZXJyKQorCQlfX2F0dHJpYnV0ZV9fKChub3JldHVybikpOworCit2b2lkIGRpZV9pZl9rZXJuZWwoY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGVycik7CisKK3ZvaWQgaG9va19mYXVsdF9jb2RlKGludCBuciwgaW50ICgqZm4pKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGludCwKKwkJCQkgICAgICAgc3RydWN0IHB0X3JlZ3MgKiksCisJCSAgICAgaW50IHNpZywgY29uc3QgY2hhciAqbmFtZSk7CisKKyNpbmNsdWRlIDxhc20vcHJvYy1mbnMuaD4KKworI2RlZmluZSB4Y2hnKHB0cix4KSBcCisJKChfX3R5cGVvZl9fKCoocHRyKSkpX194Y2hnKCh1bnNpZ25lZCBsb25nKSh4KSwocHRyKSxzaXplb2YoKihwdHIpKSkpCisKKyNkZWZpbmUgdGFzKHB0cikgKHhjaGcoKHB0ciksMSkpCisKK2V4dGVybiBhc21saW5rYWdlIHZvaWQgX19iYWNrdHJhY2Uodm9pZCk7CisKK2V4dGVybiBpbnQgY3B1X2FyY2hpdGVjdHVyZSh2b2lkKTsKKworI2RlZmluZSBzZXRfY3IoeCkJCQkJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJXAorCSJtY3IJcDE1LCAwLCAlMCwgYzEsIGMwLCAwCUAgc2V0IENSIglcCisJOiA6ICJyIiAoeCkgOiAiY2MiKQorCisjZGVmaW5lIGdldF9jcigpCQkJCQlcCisJKHsJCQkJCQlcCisJdW5zaWduZWQgaW50IF9fdmFsOwkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCVwKKwkibXJjCXAxNSwgMCwgJTAsIGMxLCBjMCwgMAlAIGdldCBDUiIJXAorCTogIj1yIiAoX192YWwpIDogOiAiY2MiKTsJCQlcCisJX192YWw7CQkJCQkJXAorCX0pCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIGNyX25vX2FsaWdubWVudDsJLyogZGVmaW5lZCBpbiBlbnRyeS1hcm12LlMgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIGNyX2FsaWdubWVudDsJLyogZGVmaW5lZCBpbiBlbnRyeS1hcm12LlMgKi8KKworI2RlZmluZSBVREJHX1VOREVGSU5FRAkoMSA8PCAwKQorI2RlZmluZSBVREJHX1NZU0NBTEwJKDEgPDwgMSkKKyNkZWZpbmUgVURCR19CQURBQk9SVAkoMSA8PCAyKQorI2RlZmluZSBVREJHX1NFR1YJKDEgPDwgMykKKyNkZWZpbmUgVURCR19CVVMJKDEgPDwgNCkKKworZXh0ZXJuIHVuc2lnbmVkIGludCB1c2VyX2RlYnVnOworCisjaWYgX19MSU5VWF9BUk1fQVJDSF9fID49IDQKKyNkZWZpbmUgdmVjdG9yc19oaWdoKCkJKGNyX2FsaWdubWVudCAmIENSX1YpCisjZWxzZQorI2RlZmluZSB2ZWN0b3JzX2hpZ2goKQkoMCkKKyNlbmRpZgorCisjZGVmaW5lIG1iKCkgX19hc21fXyBfX3ZvbGF0aWxlX18gKCIiIDogOiA6ICJtZW1vcnkiKQorI2RlZmluZSBybWIoKSBtYigpCisjZGVmaW5lIHdtYigpIG1iKCkKKyNkZWZpbmUgcmVhZF9iYXJyaWVyX2RlcGVuZHMoKSBkbyB7IH0gd2hpbGUoMCkKKyNkZWZpbmUgc2V0X21iKHZhciwgdmFsdWUpICBkbyB7IHZhciA9IHZhbHVlOyBtYigpOyB9IHdoaWxlICgwKQorI2RlZmluZSBzZXRfd21iKHZhciwgdmFsdWUpIGRvIHsgdmFyID0gdmFsdWU7IHdtYigpOyB9IHdoaWxlICgwKQorI2RlZmluZSBub3AoKSBfX2FzbV9fIF9fdm9sYXRpbGVfXygibW92XHRyMCxyMFx0QCBub3Bcblx0Iik7CisKKyNpZmRlZiBDT05GSUdfU01QCisvKgorICogRGVmaW5lIG91ciBvd24gY29udGV4dCBzd2l0Y2ggbG9ja2luZy4gIFRoaXMgYWxsb3dzIHVzIHRvIGVuYWJsZQorICogaW50ZXJydXB0cyBvdmVyIHRoZSBjb250ZXh0IHN3aXRjaCwgb3RoZXJ3aXNlIHdlIGVuZCB1cCB3aXRoIGhpZ2gKKyAqIGludGVycnVwdCBsYXRlbmN5LiAgVGhlIHJlYWwgcHJvYmxlbSBhcmVhIGlzIHN3aXRjaF9tbSgpIHdoaWNoIG1heQorICogZG8gYSBmdWxsIGNhY2hlIGZsdXNoLgorICovCisjZGVmaW5lIHByZXBhcmVfYXJjaF9zd2l0Y2gocnEsbmV4dCkJCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJc3Bpbl9sb2NrKCYobmV4dCktPnN3aXRjaF9sb2NrKTsJCQkJXAorCXNwaW5fdW5sb2NrX2lycSgmKHJxKS0+bG9jayk7CQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIGZpbmlzaF9hcmNoX3N3aXRjaChycSxwcmV2KQkJCQkJXAorCXNwaW5fdW5sb2NrKCYocHJldiktPnN3aXRjaF9sb2NrKQorCisjZGVmaW5lIHRhc2tfcnVubmluZyhycSxwKQkJCQkJCVwKKwkoKHJxKS0+Y3VyciA9PSAocCkgfHwgc3Bpbl9pc19sb2NrZWQoJihwKS0+c3dpdGNoX2xvY2spKQorI2Vsc2UKKy8qCisgKiBPdXIgVVAtY2FzZSBpcyBtb3JlIHNpbXBsZSwgYnV0IHdlIGFzc3VtZSBrbm93bGVkZ2Ugb2YgaG93CisgKiBzcGluX3VubG9ja19pcnEoKSBhbmQgZnJpZW5kcyBhcmUgaW1wbGVtZW50ZWQuICBUaGlzIGF2b2lkcworICogdXMgbmVlZGxlc3NseSBkZWNyZW1lbnRpbmcgYW5kIGluY3JlbWVudGluZyB0aGUgcHJlZW1wdCBjb3VudC4KKyAqLworI2RlZmluZSBwcmVwYXJlX2FyY2hfc3dpdGNoKHJxLG5leHQpCWxvY2FsX2lycV9lbmFibGUoKQorI2RlZmluZSBmaW5pc2hfYXJjaF9zd2l0Y2gocnEscHJldikJc3Bpbl91bmxvY2soJihycSktPmxvY2spCisjZGVmaW5lIHRhc2tfcnVubmluZyhycSxwKQkJKChycSktPmN1cnIgPT0gKHApKQorI2VuZGlmCisKKy8qCisgKiBzd2l0Y2hfdG8ocHJldiwgbmV4dCkgc2hvdWxkIHN3aXRjaCBmcm9tIHRhc2sgYHByZXYnIHRvIGBuZXh0JworICogYHByZXYnIHdpbGwgbmV2ZXIgYmUgdGhlIHNhbWUgYXMgYG5leHQnLiAgc2NoZWR1bGUoKSBpdHNlbGYKKyAqIGNvbnRhaW5zIHRoZSBtZW1vcnkgYmFycmllciB0byB0ZWxsIEdDQyBub3QgdG8gY2FjaGUgYGN1cnJlbnQnLgorICovCitleHRlcm4gc3RydWN0IHRhc2tfc3RydWN0ICpfX3N3aXRjaF90byhzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgc3RydWN0IHRocmVhZF9pbmZvICosIHN0cnVjdCB0aHJlYWRfaW5mbyAqKTsKKworI2RlZmluZSBzd2l0Y2hfdG8ocHJldixuZXh0LGxhc3QpCQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCWxhc3QgPSBfX3N3aXRjaF90byhwcmV2LHByZXYtPnRocmVhZF9pbmZvLG5leHQtPnRocmVhZF9pbmZvKTsJXAorfSB3aGlsZSAoMCkKKworLyoKKyAqIENQVSBpbnRlcnJ1cHQgbWFzayBoYW5kbGluZy4KKyAqLworI2lmIF9fTElOVVhfQVJNX0FSQ0hfXyA+PSA2CisKKyNkZWZpbmUgbG9jYWxfaXJxX3NhdmUoeCkJCQkJCVwKKwkoewkJCQkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQlcCisJIm1ycwklMCwgY3BzcgkJQCBsb2NhbF9pcnFfc2F2ZVxuIglcCisJImNwc2lkCWkiCQkJCQkJXAorCTogIj1yIiAoeCkgOiA6ICJtZW1vcnkiLCAiY2MiKTsJCQkJXAorCX0pCisKKyNkZWZpbmUgbG9jYWxfaXJxX2VuYWJsZSgpICBfX2FzbV9fKCJjcHNpZSBpCUAgX19zdGkiIDogOiA6ICJtZW1vcnkiLCAiY2MiKQorI2RlZmluZSBsb2NhbF9pcnFfZGlzYWJsZSgpIF9fYXNtX18oImNwc2lkIGkJQCBfX2NsaSIgOiA6IDogIm1lbW9yeSIsICJjYyIpCisjZGVmaW5lIGxvY2FsX2ZpcV9lbmFibGUoKSAgX19hc21fXygiY3BzaWUgZglAIF9fc3RmIiA6IDogOiAibWVtb3J5IiwgImNjIikKKyNkZWZpbmUgbG9jYWxfZmlxX2Rpc2FibGUoKSBfX2FzbV9fKCJjcHNpZCBmCUAgX19jbGYiIDogOiA6ICJtZW1vcnkiLCAiY2MiKQorCisjZWxzZQorCisvKgorICogU2F2ZSB0aGUgY3VycmVudCBpbnRlcnJ1cHQgZW5hYmxlIHN0YXRlICYgZGlzYWJsZSBJUlFzCisgKi8KKyNkZWZpbmUgbG9jYWxfaXJxX3NhdmUoeCkJCQkJCVwKKwkoewkJCQkJCQlcCisJCXVuc2lnbmVkIGxvbmcgdGVtcDsJCQkJXAorCQkodm9pZCkgKCZ0ZW1wID09ICZ4KTsJCQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJXAorCSJtcnMJJTAsIGNwc3IJCUAgbG9jYWxfaXJxX3NhdmVcbiIJXAorIglvcnIJJTEsICUwLCAjMTI4XG4iCQkJCQlcCisiCW1zcgljcHNyX2MsICUxIgkJCQkJXAorCTogIj1yIiAoeCksICI9ciIgKHRlbXApCQkJCQlcCisJOgkJCQkJCQlcCisJOiAibWVtb3J5IiwgImNjIik7CQkJCQlcCisJfSkKKwkKKy8qCisgKiBFbmFibGUgSVJRcworICovCisjZGVmaW5lIGxvY2FsX2lycV9lbmFibGUoKQkJCQkJXAorCSh7CQkJCQkJCVwKKwkJdW5zaWduZWQgbG9uZyB0ZW1wOwkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQlcCisJIm1ycwklMCwgY3BzcgkJQCBsb2NhbF9pcnFfZW5hYmxlXG4iCVwKKyIJYmljCSUwLCAlMCwgIzEyOFxuIgkJCQkJXAorIgltc3IJY3Bzcl9jLCAlMCIJCQkJCVwKKwk6ICI9ciIgKHRlbXApCQkJCQkJXAorCToJCQkJCQkJXAorCTogIm1lbW9yeSIsICJjYyIpOwkJCQkJXAorCX0pCisKKy8qCisgKiBEaXNhYmxlIElSUXMKKyAqLworI2RlZmluZSBsb2NhbF9pcnFfZGlzYWJsZSgpCQkJCQlcCisJKHsJCQkJCQkJXAorCQl1bnNpZ25lZCBsb25nIHRlbXA7CQkJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCVwKKwkibXJzCSUwLCBjcHNyCQlAIGxvY2FsX2lycV9kaXNhYmxlXG4iCVwKKyIJb3JyCSUwLCAlMCwgIzEyOFxuIgkJCQkJXAorIgltc3IJY3Bzcl9jLCAlMCIJCQkJCVwKKwk6ICI9ciIgKHRlbXApCQkJCQkJXAorCToJCQkJCQkJXAorCTogIm1lbW9yeSIsICJjYyIpOwkJCQkJXAorCX0pCisKKy8qCisgKiBFbmFibGUgRklRcworICovCisjZGVmaW5lIGxvY2FsX2ZpcV9lbmFibGUoKQkJCQkJXAorCSh7CQkJCQkJCVwKKwkJdW5zaWduZWQgbG9uZyB0ZW1wOwkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQlcCisJIm1ycwklMCwgY3BzcgkJQCBzdGZcbiIJCVwKKyIJYmljCSUwLCAlMCwgIzY0XG4iCQkJCQlcCisiCW1zcgljcHNyX2MsICUwIgkJCQkJXAorCTogIj1yIiAodGVtcCkJCQkJCQlcCisJOgkJCQkJCQlcCisJOiAibWVtb3J5IiwgImNjIik7CQkJCQlcCisJfSkKKworLyoKKyAqIERpc2FibGUgRklRcworICovCisjZGVmaW5lIGxvY2FsX2ZpcV9kaXNhYmxlKCkJCQkJCVwKKwkoewkJCQkJCQlcCisJCXVuc2lnbmVkIGxvbmcgdGVtcDsJCQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJXAorCSJtcnMJJTAsIGNwc3IJCUAgY2xmXG4iCQlcCisiCW9ycgklMCwgJTAsICM2NFxuIgkJCQkJXAorIgltc3IJY3Bzcl9jLCAlMCIJCQkJCVwKKwk6ICI9ciIgKHRlbXApCQkJCQkJXAorCToJCQkJCQkJXAorCTogIm1lbW9yeSIsICJjYyIpOwkJCQkJXAorCX0pCisKKyNlbmRpZgorCisvKgorICogU2F2ZSB0aGUgY3VycmVudCBpbnRlcnJ1cHQgZW5hYmxlIHN0YXRlLgorICovCisjZGVmaW5lIGxvY2FsX3NhdmVfZmxhZ3MoeCkJCQkJCVwKKwkoewkJCQkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQlcCisJIm1ycwklMCwgY3BzcgkJQCBsb2NhbF9zYXZlX2ZsYWdzIglcCisJOiAiPXIiICh4KSA6IDogIm1lbW9yeSIsICJjYyIpOwkJCQlcCisJfSkKKworLyoKKyAqIHJlc3RvcmUgc2F2ZWQgSVJRICYgRklRIHN0YXRlCisgKi8KKyNkZWZpbmUgbG9jYWxfaXJxX3Jlc3RvcmUoeCkJCQkJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCVwKKwkibXNyCWNwc3JfYywgJTAJCUAgbG9jYWxfaXJxX3Jlc3RvcmVcbiIJXAorCToJCQkJCQkJXAorCTogInIiICh4KQkJCQkJCVwKKwk6ICJtZW1vcnkiLCAiY2MiKQorCisjZGVmaW5lIGlycXNfZGlzYWJsZWQoKQkJCVwKKyh7CQkJCQlcCisJdW5zaWduZWQgbG9uZyBmbGFnczsJCVwKKwlsb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKTsJXAorCWZsYWdzICYgUFNSX0lfQklUOwkJXAorfSkKKworI2lmZGVmIENPTkZJR19TTVAKKyNlcnJvciBTTVAgbm90IHN1cHBvcnRlZAorCisjZGVmaW5lIHNtcF9tYigpCQltYigpCisjZGVmaW5lIHNtcF9ybWIoKQkJcm1iKCkKKyNkZWZpbmUgc21wX3dtYigpCQl3bWIoKQorI2RlZmluZSBzbXBfcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQkJcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQorCisjZWxzZQorCisjZGVmaW5lIHNtcF9tYigpCQliYXJyaWVyKCkKKyNkZWZpbmUgc21wX3JtYigpCQliYXJyaWVyKCkKKyNkZWZpbmUgc21wX3dtYigpCQliYXJyaWVyKCkKKyNkZWZpbmUgc21wX3JlYWRfYmFycmllcl9kZXBlbmRzKCkJCWRvIHsgfSB3aGlsZSgwKQorCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NBMTEwMCkgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NBMTEwKQorLyoKKyAqIE9uIHRoZSBTdHJvbmdBUk0sICJzd3AiIGlzIHRlcm1pbmFsbHkgYnJva2VuIHNpbmNlIGl0IGJ5cGFzc2VzIHRoZQorICogY2FjaGUgdG90YWxseS4gIFRoaXMgbWVhbnMgdGhhdCB0aGUgY2FjaGUgYmVjb21lcyBpbmNvbnNpc3RlbnQsIGFuZCwKKyAqIHNpbmNlIHdlIHVzZSBub3JtYWwgbG9hZHMvc3RvcmVzIGFzIHdlbGwsIHRoaXMgaXMgcmVhbGx5IGJhZC4KKyAqIFR5cGljYWxseSwgdGhpcyBjYXVzZXMgb29wc2VuIGluIGZpbHBfY2xvc2UsIGJ1dCBjb3VsZCBoYXZlIG90aGVyLAorICogbW9yZSBkaXNhc3Rlcm91cyBlZmZlY3RzLiAgVGhlcmUgYXJlIHR3byB3b3JrLWFyb3VuZHM6CisgKiAgMS4gRGlzYWJsZSBpbnRlcnJ1cHRzIGFuZCBlbXVsYXRlIHRoZSBhdG9taWMgc3dhcAorICogIDIuIENsZWFuIHRoZSBjYWNoZSwgcGVyZm9ybSBhdG9taWMgc3dhcCwgZmx1c2ggdGhlIGNhY2hlCisgKgorICogV2UgY2hvb3NlICgxKSBzaW5jZSBpdHMgdGhlICJlYXNpZXN0IiB0byBhY2hpZXZlIGhlcmUgYW5kIGlzIG5vdAorICogZGVwZW5kZW50IG9uIHRoZSBwcm9jZXNzb3IgdHlwZS4KKyAqLworI2RlZmluZSBzd3BfaXNfYnVnZ3kKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX194Y2hnKHVuc2lnbmVkIGxvbmcgeCwgdm9sYXRpbGUgdm9pZCAqcHRyLCBpbnQgc2l6ZSkKK3sKKwlleHRlcm4gdm9pZCBfX2JhZF94Y2hnKHZvbGF0aWxlIHZvaWQgKiwgaW50KTsKKwl1bnNpZ25lZCBsb25nIHJldDsKKyNpZmRlZiBzd3BfaXNfYnVnZ3kKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworI2VuZGlmCisKKwlzd2l0Y2ggKHNpemUpIHsKKyNpZmRlZiBzd3BfaXNfYnVnZ3kKKwkJY2FzZSAxOgorCQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCQkJcmV0ID0gKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopcHRyOworCQkJKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopcHRyID0geDsKKwkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwkJCWJyZWFrOworCisJCWNhc2UgNDoKKwkJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJCXJldCA9ICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKXB0cjsKKwkJCSoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKXB0ciA9IHg7CisJCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJCQlicmVhazsKKyNlbHNlCisJCWNhc2UgMToJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzd3BiICUwLCAlMSwgWyUyXSIKKwkJCQkJOiAiPSZyIiAocmV0KQorCQkJCQk6ICJyIiAoeCksICJyIiAocHRyKQorCQkJCQk6ICJtZW1vcnkiLCAiY2MiKTsKKwkJCWJyZWFrOworCQljYXNlIDQ6CV9fYXNtX18gX192b2xhdGlsZV9fICgic3dwICUwLCAlMSwgWyUyXSIKKwkJCQkJOiAiPSZyIiAocmV0KQorCQkJCQk6ICJyIiAoeCksICJyIiAocHRyKQorCQkJCQk6ICJtZW1vcnkiLCAiY2MiKTsKKwkJCWJyZWFrOworI2VuZGlmCisJCWRlZmF1bHQ6IF9fYmFkX3hjaGcocHRyLCBzaXplKSwgcmV0ID0gMDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisjZW5kaWYgLyogQ09ORklHX1NNUCAqLworCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKyNkZWZpbmUgYXJjaF9hbGlnbl9zdGFjayh4KSAoeCkKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vdGVybWJpdHMuaCBiL2luY2x1ZGUvYXNtLWFybS90ZXJtYml0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiYzZlMWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vdGVybWJpdHMuaApAQCAtMCwwICsxLDE3MSBAQAorI2lmbmRlZiBfX0FTTV9BUk1fVEVSTUJJVFNfSAorI2RlZmluZSBfX0FTTV9BUk1fVEVSTUJJVFNfSAorCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIJY2NfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50CXNwZWVkX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludAl0Y2ZsYWdfdDsKKworI2RlZmluZSBOQ0NTIDE5CitzdHJ1Y3QgdGVybWlvcyB7CisJdGNmbGFnX3QgY19pZmxhZzsJCS8qIGlucHV0IG1vZGUgZmxhZ3MgKi8KKwl0Y2ZsYWdfdCBjX29mbGFnOwkJLyogb3V0cHV0IG1vZGUgZmxhZ3MgKi8KKwl0Y2ZsYWdfdCBjX2NmbGFnOwkJLyogY29udHJvbCBtb2RlIGZsYWdzICovCisJdGNmbGFnX3QgY19sZmxhZzsJCS8qIGxvY2FsIG1vZGUgZmxhZ3MgKi8KKwljY190IGNfbGluZTsJCQkvKiBsaW5lIGRpc2NpcGxpbmUgKi8KKwljY190IGNfY2NbTkNDU107CQkvKiBjb250cm9sIGNoYXJhY3RlcnMgKi8KK307CisKKy8qIGNfY2MgY2hhcmFjdGVycyAqLworI2RlZmluZSBWSU5UUiAwCisjZGVmaW5lIFZRVUlUIDEKKyNkZWZpbmUgVkVSQVNFIDIKKyNkZWZpbmUgVktJTEwgMworI2RlZmluZSBWRU9GIDQKKyNkZWZpbmUgVlRJTUUgNQorI2RlZmluZSBWTUlOIDYKKyNkZWZpbmUgVlNXVEMgNworI2RlZmluZSBWU1RBUlQgOAorI2RlZmluZSBWU1RPUCA5CisjZGVmaW5lIFZTVVNQIDEwCisjZGVmaW5lIFZFT0wgMTEKKyNkZWZpbmUgVlJFUFJJTlQgMTIKKyNkZWZpbmUgVkRJU0NBUkQgMTMKKyNkZWZpbmUgVldFUkFTRSAxNAorI2RlZmluZSBWTE5FWFQgMTUKKyNkZWZpbmUgVkVPTDIgMTYKKworLyogY19pZmxhZyBiaXRzICovCisjZGVmaW5lIElHTkJSSwkwMDAwMDAxCisjZGVmaW5lIEJSS0lOVAkwMDAwMDAyCisjZGVmaW5lIElHTlBBUgkwMDAwMDA0CisjZGVmaW5lIFBBUk1SSwkwMDAwMDEwCisjZGVmaW5lIElOUENLCTAwMDAwMjAKKyNkZWZpbmUgSVNUUklQCTAwMDAwNDAKKyNkZWZpbmUgSU5MQ1IJMDAwMDEwMAorI2RlZmluZSBJR05DUgkwMDAwMjAwCisjZGVmaW5lIElDUk5MCTAwMDA0MDAKKyNkZWZpbmUgSVVDTEMJMDAwMTAwMAorI2RlZmluZSBJWE9OCTAwMDIwMDAKKyNkZWZpbmUgSVhBTlkJMDAwNDAwMAorI2RlZmluZSBJWE9GRgkwMDEwMDAwCisjZGVmaW5lIElNQVhCRUwJMDAyMDAwMAorI2RlZmluZSBJVVRGOAkwMDQwMDAwCisKKy8qIGNfb2ZsYWcgYml0cyAqLworI2RlZmluZSBPUE9TVAkwMDAwMDAxCisjZGVmaW5lIE9MQ1VDCTAwMDAwMDIKKyNkZWZpbmUgT05MQ1IJMDAwMDAwNAorI2RlZmluZSBPQ1JOTAkwMDAwMDEwCisjZGVmaW5lIE9OT0NSCTAwMDAwMjAKKyNkZWZpbmUgT05MUkVUCTAwMDAwNDAKKyNkZWZpbmUgT0ZJTEwJMDAwMDEwMAorI2RlZmluZSBPRkRFTAkwMDAwMjAwCisjZGVmaW5lIE5MRExZCTAwMDA0MDAKKyNkZWZpbmUgICBOTDAJMDAwMDAwMAorI2RlZmluZSAgIE5MMQkwMDAwNDAwCisjZGVmaW5lIENSRExZCTAwMDMwMDAKKyNkZWZpbmUgICBDUjAJMDAwMDAwMAorI2RlZmluZSAgIENSMQkwMDAxMDAwCisjZGVmaW5lICAgQ1IyCTAwMDIwMDAKKyNkZWZpbmUgICBDUjMJMDAwMzAwMAorI2RlZmluZSBUQUJETFkJMDAxNDAwMAorI2RlZmluZSAgIFRBQjAJMDAwMDAwMAorI2RlZmluZSAgIFRBQjEJMDAwNDAwMAorI2RlZmluZSAgIFRBQjIJMDAxMDAwMAorI2RlZmluZSAgIFRBQjMJMDAxNDAwMAorI2RlZmluZSAgIFhUQUJTCTAwMTQwMDAKKyNkZWZpbmUgQlNETFkJMDAyMDAwMAorI2RlZmluZSAgIEJTMAkwMDAwMDAwCisjZGVmaW5lICAgQlMxCTAwMjAwMDAKKyNkZWZpbmUgVlRETFkJMDA0MDAwMAorI2RlZmluZSAgIFZUMAkwMDAwMDAwCisjZGVmaW5lICAgVlQxCTAwNDAwMDAKKyNkZWZpbmUgRkZETFkJMDEwMDAwMAorI2RlZmluZSAgIEZGMAkwMDAwMDAwCisjZGVmaW5lICAgRkYxCTAxMDAwMDAKKworLyogY19jZmxhZyBiaXQgbWVhbmluZyAqLworI2RlZmluZSBDQkFVRAkwMDEwMDE3CisjZGVmaW5lICBCMAkwMDAwMDAwCQkvKiBoYW5nIHVwICovCisjZGVmaW5lICBCNTAJMDAwMDAwMQorI2RlZmluZSAgQjc1CTAwMDAwMDIKKyNkZWZpbmUgIEIxMTAJMDAwMDAwMworI2RlZmluZSAgQjEzNAkwMDAwMDA0CisjZGVmaW5lICBCMTUwCTAwMDAwMDUKKyNkZWZpbmUgIEIyMDAJMDAwMDAwNgorI2RlZmluZSAgQjMwMAkwMDAwMDA3CisjZGVmaW5lICBCNjAwCTAwMDAwMTAKKyNkZWZpbmUgIEIxMjAwCTAwMDAwMTEKKyNkZWZpbmUgIEIxODAwCTAwMDAwMTIKKyNkZWZpbmUgIEIyNDAwCTAwMDAwMTMKKyNkZWZpbmUgIEI0ODAwCTAwMDAwMTQKKyNkZWZpbmUgIEI5NjAwCTAwMDAwMTUKKyNkZWZpbmUgIEIxOTIwMAkwMDAwMDE2CisjZGVmaW5lICBCMzg0MDAJMDAwMDAxNworI2RlZmluZSBFWFRBIEIxOTIwMAorI2RlZmluZSBFWFRCIEIzODQwMAorI2RlZmluZSBDU0laRQkwMDAwMDYwCisjZGVmaW5lICAgQ1M1CTAwMDAwMDAKKyNkZWZpbmUgICBDUzYJMDAwMDAyMAorI2RlZmluZSAgIENTNwkwMDAwMDQwCisjZGVmaW5lICAgQ1M4CTAwMDAwNjAKKyNkZWZpbmUgQ1NUT1BCCTAwMDAxMDAKKyNkZWZpbmUgQ1JFQUQJMDAwMDIwMAorI2RlZmluZSBQQVJFTkIJMDAwMDQwMAorI2RlZmluZSBQQVJPREQJMDAwMTAwMAorI2RlZmluZSBIVVBDTAkwMDAyMDAwCisjZGVmaW5lIENMT0NBTAkwMDA0MDAwCisjZGVmaW5lIENCQVVERVggMDAxMDAwMAorI2RlZmluZSAgICBCNTc2MDAgMDAxMDAwMQorI2RlZmluZSAgIEIxMTUyMDAgMDAxMDAwMgorI2RlZmluZSAgIEIyMzA0MDAgMDAxMDAwMworI2RlZmluZSAgIEI0NjA4MDAgMDAxMDAwNAorI2RlZmluZSAgIEI1MDAwMDAgMDAxMDAwNQorI2RlZmluZSAgIEI1NzYwMDAgMDAxMDAwNgorI2RlZmluZSAgIEI5MjE2MDAgMDAxMDAwNworI2RlZmluZSAgQjEwMDAwMDAgMDAxMDAxMAorI2RlZmluZSAgQjExNTIwMDAgMDAxMDAxMQorI2RlZmluZSAgQjE1MDAwMDAgMDAxMDAxMgorI2RlZmluZSAgQjIwMDAwMDAgMDAxMDAxMworI2RlZmluZSAgQjI1MDAwMDAgMDAxMDAxNAorI2RlZmluZSAgQjMwMDAwMDAgMDAxMDAxNQorI2RlZmluZSAgQjM1MDAwMDAgMDAxMDAxNgorI2RlZmluZSAgQjQwMDAwMDAgMDAxMDAxNworI2RlZmluZSBDSUJBVUQJICAwMDIwMDM2MDAwMDAJLyogaW5wdXQgYmF1ZCByYXRlIChub3QgdXNlZCkgKi8KKyNkZWZpbmUgQ01TUEFSICAgIDAxMDAwMDAwMDAwMAkJLyogbWFyayBvciBzcGFjZSAoc3RpY2spIHBhcml0eSAqLworI2RlZmluZSBDUlRTQ1RTCSAgMDIwMDAwMDAwMDAwCQkvKiBmbG93IGNvbnRyb2wgKi8KKworLyogY19sZmxhZyBiaXRzICovCisjZGVmaW5lIElTSUcJMDAwMDAwMQorI2RlZmluZSBJQ0FOT04JMDAwMDAwMgorI2RlZmluZSBYQ0FTRQkwMDAwMDA0CisjZGVmaW5lIEVDSE8JMDAwMDAxMAorI2RlZmluZSBFQ0hPRQkwMDAwMDIwCisjZGVmaW5lIEVDSE9LCTAwMDAwNDAKKyNkZWZpbmUgRUNIT05MCTAwMDAxMDAKKyNkZWZpbmUgTk9GTFNICTAwMDAyMDAKKyNkZWZpbmUgVE9TVE9QCTAwMDA0MDAKKyNkZWZpbmUgRUNIT0NUTAkwMDAxMDAwCisjZGVmaW5lIEVDSE9QUlQJMDAwMjAwMAorI2RlZmluZSBFQ0hPS0UJMDAwNDAwMAorI2RlZmluZSBGTFVTSE8JMDAxMDAwMAorI2RlZmluZSBQRU5ESU4JMDA0MDAwMAorI2RlZmluZSBJRVhURU4JMDEwMDAwMAorCisvKiB0Y2Zsb3coKSBhbmQgVENYT05DIHVzZSB0aGVzZSAqLworI2RlZmluZQlUQ09PRkYJCTAKKyNkZWZpbmUJVENPT04JCTEKKyNkZWZpbmUJVENJT0ZGCQkyCisjZGVmaW5lCVRDSU9OCQkzCisKKy8qIHRjZmx1c2goKSBhbmQgVENGTFNIIHVzZSB0aGVzZSAqLworI2RlZmluZQlUQ0lGTFVTSAkwCisjZGVmaW5lCVRDT0ZMVVNICTEKKyNkZWZpbmUJVENJT0ZMVVNICTIKKworLyogdGNzZXRhdHRyIHVzZXMgdGhlc2UgKi8KKyNkZWZpbmUJVENTQU5PVwkJMAorI2RlZmluZQlUQ1NBRFJBSU4JMQorI2RlZmluZQlUQ1NBRkxVU0gJMgorCisjZW5kaWYJLyogX19BU01fQVJNX1RFUk1CSVRTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS90ZXJtaW9zLmggYi9pbmNsdWRlL2FzbS1hcm0vdGVybWlvcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiOGY1ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vdGVybWlvcy5oCkBAIC0wLDAgKzEsMTA4IEBACisjaWZuZGVmIF9fQVNNX0FSTV9URVJNSU9TX0gKKyNkZWZpbmUgX19BU01fQVJNX1RFUk1JT1NfSAorCisjaW5jbHVkZSA8YXNtL3Rlcm1iaXRzLmg+CisjaW5jbHVkZSA8YXNtL2lvY3Rscy5oPgorCitzdHJ1Y3Qgd2luc2l6ZSB7CisJdW5zaWduZWQgc2hvcnQgd3Nfcm93OworCXVuc2lnbmVkIHNob3J0IHdzX2NvbDsKKwl1bnNpZ25lZCBzaG9ydCB3c194cGl4ZWw7CisJdW5zaWduZWQgc2hvcnQgd3NfeXBpeGVsOworfTsKKworI2RlZmluZSBOQ0MgOAorc3RydWN0IHRlcm1pbyB7CisJdW5zaWduZWQgc2hvcnQgY19pZmxhZzsJCS8qIGlucHV0IG1vZGUgZmxhZ3MgKi8KKwl1bnNpZ25lZCBzaG9ydCBjX29mbGFnOwkJLyogb3V0cHV0IG1vZGUgZmxhZ3MgKi8KKwl1bnNpZ25lZCBzaG9ydCBjX2NmbGFnOwkJLyogY29udHJvbCBtb2RlIGZsYWdzICovCisJdW5zaWduZWQgc2hvcnQgY19sZmxhZzsJCS8qIGxvY2FsIG1vZGUgZmxhZ3MgKi8KKwl1bnNpZ25lZCBjaGFyIGNfbGluZTsJCS8qIGxpbmUgZGlzY2lwbGluZSAqLworCXVuc2lnbmVkIGNoYXIgY19jY1tOQ0NdOwkvKiBjb250cm9sIGNoYXJhY3RlcnMgKi8KK307CisKKyNpZmRlZiBfX0tFUk5FTF9fCisvKglpbnRyPV5DCQlxdWl0PV58CQllcmFzZT1kZWwJa2lsbD1eVQorCWVvZj1eRAkJdnRpbWU9XDAJdm1pbj1cMQkJc3h0Yz1cMAorCXN0YXJ0PV5RCXN0b3A9XlMJCXN1c3A9XloJCWVvbD1cMAorCXJlcHJpbnQ9XlIJZGlzY2FyZD1eVQl3ZXJhc2U9XlcJbG5leHQ9XlYKKwllb2wyPVwwCisqLworI2RlZmluZSBJTklUX0NfQ0MgIlwwMDNcMDM0XDE3N1wwMjVcMDA0XDBcMVwwXDAyMVwwMjNcMDMyXDBcMDIyXDAxN1wwMjdcMDI2XDAiCisjZW5kaWYKKworLyogbW9kZW0gbGluZXMgKi8KKyNkZWZpbmUgVElPQ01fTEUJMHgwMDEKKyNkZWZpbmUgVElPQ01fRFRSCTB4MDAyCisjZGVmaW5lIFRJT0NNX1JUUwkweDAwNAorI2RlZmluZSBUSU9DTV9TVAkweDAwOAorI2RlZmluZSBUSU9DTV9TUgkweDAxMAorI2RlZmluZSBUSU9DTV9DVFMJMHgwMjAKKyNkZWZpbmUgVElPQ01fQ0FSCTB4MDQwCisjZGVmaW5lIFRJT0NNX1JORwkweDA4MAorI2RlZmluZSBUSU9DTV9EU1IJMHgxMDAKKyNkZWZpbmUgVElPQ01fQ0QJVElPQ01fQ0FSCisjZGVmaW5lIFRJT0NNX1JJCVRJT0NNX1JORworI2RlZmluZSBUSU9DTV9PVVQxCTB4MjAwMAorI2RlZmluZSBUSU9DTV9PVVQyCTB4NDAwMAorI2RlZmluZSBUSU9DTV9MT09QCTB4ODAwMAorCisvKiBpb2N0bCAoZmQsIFRJT0NTRVJHRVRMU1IsICZyZXN1bHQpIHdoZXJlIHJlc3VsdCBtYXkgYmUgYXMgYmVsb3cgKi8KKworLyogbGluZSBkaXNjaXBsaW5lcyAqLworI2RlZmluZSBOX1RUWQkJMAorI2RlZmluZSBOX1NMSVAJCTEKKyNkZWZpbmUgTl9NT1VTRQkJMgorI2RlZmluZSBOX1BQUAkJMworI2RlZmluZSBOX1NUUklQCQk0CisjZGVmaW5lIE5fQVgyNQkJNQorI2RlZmluZSBOX1gyNQkJNgkvKiBYLjI1IGFzeW5jICovCisjZGVmaW5lIE5fNlBBQ0sJCTcKKyNkZWZpbmUgTl9NQVNDCQk4CS8qIFJlc2VydmVkIGZvciBNb2JpdGV4IG1vZHVsZSA8a2F6QGNhZmUubmV0PiAqLworI2RlZmluZSBOX1IzOTY0CQk5CS8qIFJlc2VydmVkIGZvciBTaW1hdGljIFIzOTY0IG1vZHVsZSAqLworI2RlZmluZSBOX1BST0ZJQlVTX0ZETAkxMAkvKiBSZXNlcnZlZCBmb3IgUHJvZmlidXMgPERhdmVAbXZoaS5jb20+ICovCisjZGVmaW5lIE5fSVJEQQkJMTEJLyogTGludXggSXJEYSAtIGh0dHA6Ly9pcmRhLnNvdXJjZWZvcmdlLm5ldC8gKi8KKyNkZWZpbmUgTl9TTVNCTE9DSwkxMgkvKiBTTVMgYmxvY2sgbW9kZSAtIGZvciB0YWxraW5nIHRvIEdTTSBkYXRhIGNhcmRzIGFib3V0IFNNUyBtZXNzYWdlcyAqLworI2RlZmluZSBOX0hETEMJCTEzCS8qIHN5bmNocm9ub3VzIEhETEMgKi8KKyNkZWZpbmUgTl9TWU5DX1BQUAkxNAorI2RlZmluZSBOX0hDSQkJMTUgIC8qIEJsdWV0b290aCBIQ0kgVUFSVCAqLworCisjaWZkZWYgX19LRVJORUxfXworCisvKgorICogVHJhbnNsYXRlIGEgInRlcm1pbyIgc3RydWN0dXJlIGludG8gYSAidGVybWlvcyIuIFVnaC4KKyAqLworI2RlZmluZSBTRVRfTE9XX1RFUk1JT1NfQklUUyh0ZXJtaW9zLCB0ZXJtaW8sIHgpIHsJCVwKKwl1bnNpZ25lZCBzaG9ydCBfX3RtcDsJCQkJCVwKKwlnZXRfdXNlcihfX3RtcCwmKHRlcm1pbyktPngpOwkJCQlcCisJKih1bnNpZ25lZCBzaG9ydCAqKSAmKHRlcm1pb3MpLT54ID0gX190bXA7CQlcCit9CisKKyNkZWZpbmUgdXNlcl90ZXJtaW9fdG9fa2VybmVsX3Rlcm1pb3ModGVybWlvcywgdGVybWlvKSBcCisoeyBcCisJU0VUX0xPV19URVJNSU9TX0JJVFModGVybWlvcywgdGVybWlvLCBjX2lmbGFnKTsgXAorCVNFVF9MT1dfVEVSTUlPU19CSVRTKHRlcm1pb3MsIHRlcm1pbywgY19vZmxhZyk7IFwKKwlTRVRfTE9XX1RFUk1JT1NfQklUUyh0ZXJtaW9zLCB0ZXJtaW8sIGNfY2ZsYWcpOyBcCisJU0VUX0xPV19URVJNSU9TX0JJVFModGVybWlvcywgdGVybWlvLCBjX2xmbGFnKTsgXAorCWNvcHlfZnJvbV91c2VyKCh0ZXJtaW9zKS0+Y19jYywgKHRlcm1pbyktPmNfY2MsIE5DQyk7IFwKK30pCisKKy8qCisgKiBUcmFuc2xhdGUgYSAidGVybWlvcyIgc3RydWN0dXJlIGludG8gYSAidGVybWlvIi4gVWdoLgorICovCisjZGVmaW5lIGtlcm5lbF90ZXJtaW9zX3RvX3VzZXJfdGVybWlvKHRlcm1pbywgdGVybWlvcykgXAorKHsgXAorCXB1dF91c2VyKCh0ZXJtaW9zKS0+Y19pZmxhZywgJih0ZXJtaW8pLT5jX2lmbGFnKTsgXAorCXB1dF91c2VyKCh0ZXJtaW9zKS0+Y19vZmxhZywgJih0ZXJtaW8pLT5jX29mbGFnKTsgXAorCXB1dF91c2VyKCh0ZXJtaW9zKS0+Y19jZmxhZywgJih0ZXJtaW8pLT5jX2NmbGFnKTsgXAorCXB1dF91c2VyKCh0ZXJtaW9zKS0+Y19sZmxhZywgJih0ZXJtaW8pLT5jX2xmbGFnKTsgXAorCXB1dF91c2VyKCh0ZXJtaW9zKS0+Y19saW5lLCAgJih0ZXJtaW8pLT5jX2xpbmUpOyBcCisJY29weV90b191c2VyKCh0ZXJtaW8pLT5jX2NjLCAodGVybWlvcyktPmNfY2MsIE5DQyk7IFwKK30pCisKKyNkZWZpbmUgdXNlcl90ZXJtaW9zX3RvX2tlcm5lbF90ZXJtaW9zKGssIHUpIGNvcHlfZnJvbV91c2VyKGssIHUsIHNpemVvZihzdHJ1Y3QgdGVybWlvcykpCisjZGVmaW5lIGtlcm5lbF90ZXJtaW9zX3RvX3VzZXJfdGVybWlvcyh1LCBrKSBjb3B5X3RvX3VzZXIodSwgaywgc2l6ZW9mKHN0cnVjdCB0ZXJtaW9zKSkKKworI2VuZGlmCS8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmCS8qIF9fQVNNX0FSTV9URVJNSU9TX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS90aGVybS5oIGIvaW5jbHVkZS9hc20tYXJtL3RoZXJtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUxYzkyMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS90aGVybS5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vdGhlcm0uaDogRGVmaW5pdGlvbnMgZm9yIERhbGxhcyBTZW1pY29uZHVjdG9yCisgKiAgRFMxNjIwIHRoZXJtb21ldGVyIGRyaXZlciAoYXMgdXNlZCBpbiB0aGUgUmViZWwuY29tIE5ldFdpbmRlcikKKyAqLworI2lmbmRlZiBfX0FTTV9USEVSTV9ICisjZGVmaW5lIF9fQVNNX1RIRVJNX0gKKworLyogaW9jdGwgbnVtYmVycyBmb3IgL2Rldi90aGVybSAqLworI2RlZmluZSBDTURfU0VUX1RIRVJNT1NUQVRFCTB4NTMKKyNkZWZpbmUgQ01EX0dFVF9USEVSTU9TVEFURQkweDU0CisjZGVmaW5lIENNRF9HRVRfU1RBVFVTCQkweDU2CisjZGVmaW5lIENNRF9HRVRfVEVNUEVSQVRVUkUJMHg1NworI2RlZmluZSBDTURfU0VUX1RIRVJNT1NUQVRFMgkweDU4CisjZGVmaW5lIENNRF9HRVRfVEhFUk1PU1RBVEUyCTB4NTkKKyNkZWZpbmUgQ01EX0dFVF9URU1QRVJBVFVSRTIJMHg1YQorI2RlZmluZSBDTURfR0VUX0ZBTgkJMHg1YgorI2RlZmluZSBDTURfU0VUX0ZBTgkJMHg1YworCisjZGVmaW5lIEZBTl9PRkYJCQkwCisjZGVmaW5lIEZBTl9PTgkJCTEKKyNkZWZpbmUgRkFOX0FMV0FZU19PTgkJMgorCitzdHJ1Y3QgdGhlcm0geworCWludCBoaTsKKwlpbnQgbG87Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS90aHJlYWRfaW5mby5oIGIvaW5jbHVkZS9hc20tYXJtL3RocmVhZF9pbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTYxNjE4ZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS90aHJlYWRfaW5mby5oCkBAIC0wLDAgKzEsMTQ3IEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS90aHJlYWRfaW5mby5oCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMiBSdXNzZWxsIEtpbmcuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2lmbmRlZiBfX0FTTV9BUk1fVEhSRUFEX0lORk9fSAorI2RlZmluZSBfX0FTTV9BUk1fVEhSRUFEX0lORk9fSAorCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8YXNtL2Zwc3RhdGUuaD4KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworc3RydWN0IHRhc2tfc3RydWN0Oworc3RydWN0IGV4ZWNfZG9tYWluOworCisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9kb21haW4uaD4KKwordHlwZWRlZiB1bnNpZ25lZCBsb25nIG1tX3NlZ21lbnRfdDsKKworc3RydWN0IGNwdV9jb250ZXh0X3NhdmUgeworCV9fdTMyCXI0OworCV9fdTMyCXI1OworCV9fdTMyCXI2OworCV9fdTMyCXI3OworCV9fdTMyCXI4OworCV9fdTMyCXI5OworCV9fdTMyCXNsOworCV9fdTMyCWZwOworCV9fdTMyCXNwOworCV9fdTMyCXBjOworCV9fdTMyCWV4dHJhWzJdOwkJLyogWHNjYWxlICdhY2MnIHJlZ2lzdGVyLCBldGMgKi8KK307CisKKy8qCisgKiBsb3cgbGV2ZWwgdGFzayBkYXRhIHRoYXQgZW50cnkuUyBuZWVkcyBpbW1lZGlhdGUgYWNjZXNzIHRvLgorICogX19zd2l0Y2hfdG8oKSBhc3N1bWVzIGNwdV9jb250ZXh0IGZvbGxvd3MgaW1tZWRpYXRlbHkgYWZ0ZXIgY3B1X2RvbWFpbi4KKyAqLworc3RydWN0IHRocmVhZF9pbmZvIHsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsJCS8qIGxvdyBsZXZlbCBmbGFncyAqLworCV9fczMyCQkJcHJlZW1wdF9jb3VudDsJLyogMCA9PiBwcmVlbXB0YWJsZSwgPDAgPT4gYnVnICovCisJbW1fc2VnbWVudF90CQlhZGRyX2xpbWl0OwkvKiBhZGRyZXNzIGxpbWl0ICovCisJc3RydWN0IHRhc2tfc3RydWN0CSp0YXNrOwkJLyogbWFpbiB0YXNrIHN0cnVjdHVyZSAqLworCXN0cnVjdCBleGVjX2RvbWFpbgkqZXhlY19kb21haW47CS8qIGV4ZWN1dGlvbiBkb21haW4gKi8KKwlfX3UzMgkJCWNwdTsJCS8qIGNwdSAqLworCV9fdTMyCQkJY3B1X2RvbWFpbjsJLyogY3B1IGRvbWFpbiAqLworCXN0cnVjdCBjcHVfY29udGV4dF9zYXZlCWNwdV9jb250ZXh0OwkvKiBjcHUgY29udGV4dCAqLworCV9fdTgJCQl1c2VkX2NwWzE2XTsJLyogdGhyZWFkIHVzZWQgY29wcm8gKi8KKwl1bnNpZ25lZCBsb25nCQl0cF92YWx1ZTsKKwl1bmlvbiBmcF9zdGF0ZQkJZnBzdGF0ZTsKKwl1bmlvbiB2ZnBfc3RhdGUJCXZmcHN0YXRlOworCXN0cnVjdCByZXN0YXJ0X2Jsb2NrCXJlc3RhcnRfYmxvY2s7Cit9OworCisjZGVmaW5lIElOSVRfVEhSRUFEX0lORk8odHNrKQkJCQkJCVwKK3sJCQkJCQkJCQlcCisJLnRhc2sJCT0gJnRzaywJCQkJCQlcCisJLmV4ZWNfZG9tYWluCT0gJmRlZmF1bHRfZXhlY19kb21haW4sCQkJCVwKKwkuZmxhZ3MJCT0gMCwJCQkJCQlcCisJLnByZWVtcHRfY291bnQJPSAxLAkJCQkJCVwKKwkuYWRkcl9saW1pdAk9IEtFUk5FTF9EUywJCQkJCVwKKwkuY3B1X2RvbWFpbgk9IGRvbWFpbl92YWwoRE9NQUlOX1VTRVIsIERPTUFJTl9NQU5BR0VSKSB8CVwKKwkJCSAgZG9tYWluX3ZhbChET01BSU5fS0VSTkVMLCBET01BSU5fTUFOQUdFUikgfAlcCisJCQkgIGRvbWFpbl92YWwoRE9NQUlOX0lPLCBET01BSU5fQ0xJRU5UKSwJCVwKKwkucmVzdGFydF9ibG9jawk9IHsJCQkJCQlcCisJCS5mbgk9IGRvX25vX3Jlc3RhcnRfc3lzY2FsbCwJCQlcCisJfSwJCQkJCQkJCVwKK30KKworI2RlZmluZSBpbml0X3RocmVhZF9pbmZvCShpbml0X3RocmVhZF91bmlvbi50aHJlYWRfaW5mbykKKyNkZWZpbmUgaW5pdF9zdGFjawkJKGluaXRfdGhyZWFkX3VuaW9uLnN0YWNrKQorCisjZGVmaW5lIFRIUkVBRF9TSVpFCQk4MTkyCisKKy8qCisgKiBob3cgdG8gZ2V0IHRoZSB0aHJlYWQgaW5mb3JtYXRpb24gc3RydWN0IGZyb20gQworICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCB0aHJlYWRfaW5mbyAqY3VycmVudF90aHJlYWRfaW5mbyh2b2lkKSBfX2F0dHJpYnV0ZV9jb25zdF9fOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCB0aHJlYWRfaW5mbyAqY3VycmVudF90aHJlYWRfaW5mbyh2b2lkKQoreworCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgc3AgYXNtICgic3AiKTsKKwlyZXR1cm4gKHN0cnVjdCB0aHJlYWRfaW5mbyAqKShzcCAmIH4oVEhSRUFEX1NJWkUgLSAxKSk7Cit9CisKK2V4dGVybiBzdHJ1Y3QgdGhyZWFkX2luZm8gKmFsbG9jX3RocmVhZF9pbmZvKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7CitleHRlcm4gdm9pZCBmcmVlX3RocmVhZF9pbmZvKHN0cnVjdCB0aHJlYWRfaW5mbyAqKTsKKworI2RlZmluZSBnZXRfdGhyZWFkX2luZm8odGkpCWdldF90YXNrX3N0cnVjdCgodGkpLT50YXNrKQorI2RlZmluZSBwdXRfdGhyZWFkX2luZm8odGkpCXB1dF90YXNrX3N0cnVjdCgodGkpLT50YXNrKQorCisjZGVmaW5lIHRocmVhZF9zYXZlZF9wYyh0c2spCVwKKwkoKHVuc2lnbmVkIGxvbmcpKHBjX3BvaW50ZXIoKHRzayktPnRocmVhZF9pbmZvLT5jcHVfY29udGV4dC5wYykpKQorI2RlZmluZSB0aHJlYWRfc2F2ZWRfZnAodHNrKQlcCisJKCh1bnNpZ25lZCBsb25nKSgodHNrKS0+dGhyZWFkX2luZm8tPmNwdV9jb250ZXh0LmZwKSkKKworZXh0ZXJuIHZvaWQgaXdtbXh0X3Rhc2tfZGlzYWJsZShzdHJ1Y3QgdGhyZWFkX2luZm8gKik7CitleHRlcm4gdm9pZCBpd21teHRfdGFza19jb3B5KHN0cnVjdCB0aHJlYWRfaW5mbyAqLCB2b2lkICopOworZXh0ZXJuIHZvaWQgaXdtbXh0X3Rhc2tfcmVzdG9yZShzdHJ1Y3QgdGhyZWFkX2luZm8gKiwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGl3bW14dF90YXNrX3JlbGVhc2Uoc3RydWN0IHRocmVhZF9pbmZvICopOworCisjZW5kaWYKKworLyoKKyAqIFdlIHVzZSBiaXQgMzAgb2YgdGhlIHByZWVtcHRfY291bnQgdG8gaW5kaWNhdGUgdGhhdCBrZXJuZWwKKyAqIHByZWVtcHRpb24gaXMgb2NjdXJpbmcuICBTZWUgaW5jbHVkZS9hc20tYXJtL2hhcmRpcnEuaC4KKyAqLworI2RlZmluZSBQUkVFTVBUX0FDVElWRQkweDQwMDAwMDAwCisKKy8qCisgKiB0aHJlYWQgaW5mb3JtYXRpb24gZmxhZ3M6CisgKiAgVElGX1NZU0NBTExfVFJBQ0UJLSBzeXNjYWxsIHRyYWNlIGFjdGl2ZQorICogIFRJRl9OT1RJRllfUkVTVU1FCS0gcmVzdW1wdGlvbiBub3RpZmljYXRpb24gcmVxdWVzdGVkCisgKiAgVElGX1NJR1BFTkRJTkcJLSBzaWduYWwgcGVuZGluZworICogIFRJRl9ORUVEX1JFU0NIRUQJLSByZXNjaGVkdWxpbmcgbmVjZXNzYXJ5CisgKiAgVElGX1VTRURGUFUJCS0gRlBVIHdhcyB1c2VkIGJ5IHRoaXMgdGFzayB0aGlzIHF1YW50dW0gKFNNUCkKKyAqICBUSUZfUE9MTElOR19OUkZMQUcJLSB0cnVlIGlmIHBvbGxfaWRsZSgpIGlzIHBvbGxpbmcgVElGX05FRURfUkVTQ0hFRAorICovCisjZGVmaW5lIFRJRl9OT1RJRllfUkVTVU1FCTAKKyNkZWZpbmUgVElGX1NJR1BFTkRJTkcJCTEKKyNkZWZpbmUgVElGX05FRURfUkVTQ0hFRAkyCisjZGVmaW5lIFRJRl9TWVNDQUxMX1RSQUNFCTgKKyNkZWZpbmUgVElGX1BPTExJTkdfTlJGTEFHCTE2CisjZGVmaW5lIFRJRl9VU0lOR19JV01NWFQJMTcKKyNkZWZpbmUgVElGX01FTURJRQkJMTgKKworI2RlZmluZSBfVElGX05PVElGWV9SRVNVTUUJKDEgPDwgVElGX05PVElGWV9SRVNVTUUpCisjZGVmaW5lIF9USUZfU0lHUEVORElORwkJKDEgPDwgVElGX1NJR1BFTkRJTkcpCisjZGVmaW5lIF9USUZfTkVFRF9SRVNDSEVECSgxIDw8IFRJRl9ORUVEX1JFU0NIRUQpCisjZGVmaW5lIF9USUZfU1lTQ0FMTF9UUkFDRQkoMSA8PCBUSUZfU1lTQ0FMTF9UUkFDRSkKKyNkZWZpbmUgX1RJRl9QT0xMSU5HX05SRkxBRwkoMSA8PCBUSUZfUE9MTElOR19OUkZMQUcpCisjZGVmaW5lIF9USUZfVVNJTkdfSVdNTVhUCSgxIDw8IFRJRl9VU0lOR19JV01NWFQpCisKKy8qCisgKiBDaGFuZ2UgdGhlc2UgYW5kIHlvdSBicmVhayBBU00gY29kZSBpbiBlbnRyeS1jb21tb24uUworICovCisjZGVmaW5lIF9USUZfV09SS19NQVNLCQkweDAwMDAwMGZmCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYgLyogX19BU01fQVJNX1RIUkVBRF9JTkZPX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS90aW1leC5oIGIvaW5jbHVkZS9hc20tYXJtL3RpbWV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I4ZDRjYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS90aW1leC5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL3RpbWV4LmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk3LDE5OTggUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgQXJjaGl0ZWN0dXJlIFNwZWNpZmljIFRJTUUgc3BlY2lmaWNhdGlvbnMKKyAqLworI2lmbmRlZiBfQVNNQVJNX1RJTUVYX0gKKyNkZWZpbmUgX0FTTUFSTV9USU1FWF9ICisKKyNpbmNsdWRlIDxhc20vYXJjaC90aW1leC5oPgorCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgY3ljbGVzX3Q7CisKK3N0YXRpYyBpbmxpbmUgY3ljbGVzX3QgZ2V0X2N5Y2xlcyAodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vdGxiLmggYi9pbmNsdWRlL2FzbS1hcm0vdGxiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJiMzI1YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS90bGIuaApAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vdGxiLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAyIFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIEV4cGVyaW1lbnRhdGlvbiBzaG93cyB0aGF0IG9uIGEgU3Ryb25nQVJNLCBpdCBhcHBlYXJzIHRvIGJlIGZhc3RlcgorICogIHRvIHVzZSB0aGUgImludmFsaWRhdGUgd2hvbGUgdGxiIiByYXRoZXIgdGhhbiAiaW52YWxpZGF0ZSBzaW5nbGUKKyAqICB0bGIiIGZvciB0aGlzLgorICoKKyAqICBUaGlzIGFwcGVhcnMgdHJ1ZSBmb3IgYm90aCB0aGUgcHJvY2VzcyBmb3JrK2V4aXQgY2FzZSwgYXMgd2VsbCBhcworICogIHRoZSBtdW5tYXAtbGFyZ2UtYXJlYSBjYXNlLgorICovCisjaWZuZGVmIF9fQVNNQVJNX1RMQl9ICisjZGVmaW5lIF9fQVNNQVJNX1RMQl9ICisKKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CisKKy8qCisgKiBUTEIgaGFuZGxpbmcuICBUaGlzIGFsbG93cyB1cyB0byByZW1vdmUgcGFnZXMgZnJvbSB0aGUgcGFnZQorICogdGFibGVzLCBhbmQgZWZmaWNpZW50bHkgaGFuZGxlIHRoZSBUTEIgaXNzdWVzLgorICovCitzdHJ1Y3QgbW11X2dhdGhlciB7CisJc3RydWN0IG1tX3N0cnVjdAkqbW07CisJdW5zaWduZWQgaW50CQlmcmVlZDsKKwl1bnNpZ25lZCBpbnQJCWZ1bGxtbTsKKworCXVuc2lnbmVkIGludAkJZmx1c2hlczsKKwl1bnNpZ25lZCBpbnQJCWF2b2lkZWRfZmx1c2hlczsKK307CisKK0RFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgbW11X2dhdGhlciwgbW11X2dhdGhlcnMpOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtbXVfZ2F0aGVyICoKK3RsYl9nYXRoZXJfbW11KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBpbnQgZnVsbF9tbV9mbHVzaCkKK3sKKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCXN0cnVjdCBtbXVfZ2F0aGVyICp0bGIgPSAmcGVyX2NwdShtbXVfZ2F0aGVycywgY3B1KTsKKworCXRsYi0+bW0gPSBtbTsKKwl0bGItPmZyZWVkID0gMDsKKwl0bGItPmZ1bGxtbSA9IGZ1bGxfbW1fZmx1c2g7CisKKwlyZXR1cm4gdGxiOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3RsYl9maW5pc2hfbW11KHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdGxiLT5tbTsKKwl1bnNpZ25lZCBsb25nIGZyZWVkID0gdGxiLT5mcmVlZDsKKwlpbnQgcnNzID0gZ2V0X21tX2NvdW50ZXIobW0sIHJzcyk7CisKKwlpZiAocnNzIDwgZnJlZWQpCisJCWZyZWVkID0gcnNzOworCWFkZF9tbV9jb3VudGVyKG1tLCByc3MsIC1mcmVlZCk7CisKKwlpZiAodGxiLT5mdWxsbW0pCisJCWZsdXNoX3RsYl9tbShtbSk7CisKKwkvKiBrZWVwIHRoZSBwYWdlIHRhYmxlIGNhY2hlIHdpdGhpbiBib3VuZHMgKi8KKwljaGVja19wZ3RfY2FjaGUoKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgdGxiX2lzX2Z1bGxfbW0oc3RydWN0IG1tdV9nYXRoZXIgKnRsYikKK3sKKwlyZXR1cm4gdGxiLT5mdWxsbW07Cit9CisKKyNkZWZpbmUgdGxiX3JlbW92ZV90bGJfZW50cnkodGxiLHB0ZXAsYWRkcmVzcykJZG8geyB9IHdoaWxlICgwKQorCisvKgorICogSW4gdGhlIGNhc2Ugb2YgdGxiIHZtYSBoYW5kbGluZywgd2UgY2FuIG9wdGltaXNlIHRoZXNlIGF3YXkgaW4gdGhlCisgKiBjYXNlIHdoZXJlIHdlJ3JlIGRvaW5nIGEgZnVsbCBNTSBmbHVzaC4gIFdoZW4gd2UncmUgZG9pbmcgYSBtdW5tYXAsCisgKiB0aGUgdm1hcyBhcmUgYWRqdXN0ZWQgdG8gb25seSBjb3ZlciB0aGUgcmVnaW9uIHRvIGJlIHRvcm4gZG93bi4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCit0bGJfc3RhcnRfdm1hKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCWlmICghdGxiLT5mdWxsbW0pCisJCWZsdXNoX2NhY2hlX3JhbmdlKHZtYSwgdm1hLT52bV9zdGFydCwgdm1hLT52bV9lbmQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3RsYl9lbmRfdm1hKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCWlmICghdGxiLT5mdWxsbW0pCisJCWZsdXNoX3RsYl9yYW5nZSh2bWEsIHZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fZW5kKTsKK30KKworI2RlZmluZSB0bGJfcmVtb3ZlX3BhZ2UodGxiLHBhZ2UpCWZyZWVfcGFnZV9hbmRfc3dhcF9jYWNoZShwYWdlKQorI2RlZmluZSBwdGVfZnJlZV90bGIodGxiLHB0ZXApCQlwdGVfZnJlZShwdGVwKQorI2RlZmluZSBwbWRfZnJlZV90bGIodGxiLHBtZHApCQlwbWRfZnJlZShwbWRwKQorCisjZGVmaW5lIHRsYl9taWdyYXRlX2ZpbmlzaChtbSkJCWRvIHsgfSB3aGlsZSAoMCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vdGxiZmx1c2guaCBiL2luY2x1ZGUvYXNtLWFybS90bGJmbHVzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhODY0YjEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vdGxiZmx1c2guaApAQCAtMCwwICsxLDQwNCBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vdGxiZmx1c2guaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMyBSdXNzZWxsIEtpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaWZuZGVmIF9BU01BUk1fVExCRkxVU0hfSAorI2RlZmluZSBfQVNNQVJNX1RMQkZMVVNIX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS9nbHVlLmg+CisKKyNkZWZpbmUgVExCX1YzX1BBR0UJKDEgPDwgMCkKKyNkZWZpbmUgVExCX1Y0X1VfUEFHRQkoMSA8PCAxKQorI2RlZmluZSBUTEJfVjRfRF9QQUdFCSgxIDw8IDIpCisjZGVmaW5lIFRMQl9WNF9JX1BBR0UJKDEgPDwgMykKKyNkZWZpbmUgVExCX1Y2X1VfUEFHRQkoMSA8PCA0KQorI2RlZmluZSBUTEJfVjZfRF9QQUdFCSgxIDw8IDUpCisjZGVmaW5lIFRMQl9WNl9JX1BBR0UJKDEgPDwgNikKKworI2RlZmluZSBUTEJfVjNfRlVMTAkoMSA8PCA4KQorI2RlZmluZSBUTEJfVjRfVV9GVUxMCSgxIDw8IDkpCisjZGVmaW5lIFRMQl9WNF9EX0ZVTEwJKDEgPDwgMTApCisjZGVmaW5lIFRMQl9WNF9JX0ZVTEwJKDEgPDwgMTEpCisjZGVmaW5lIFRMQl9WNl9VX0ZVTEwJKDEgPDwgMTIpCisjZGVmaW5lIFRMQl9WNl9EX0ZVTEwJKDEgPDwgMTMpCisjZGVmaW5lIFRMQl9WNl9JX0ZVTEwJKDEgPDwgMTQpCisKKyNkZWZpbmUgVExCX1Y2X1VfQVNJRAkoMSA8PCAxNikKKyNkZWZpbmUgVExCX1Y2X0RfQVNJRAkoMSA8PCAxNykKKyNkZWZpbmUgVExCX1Y2X0lfQVNJRAkoMSA8PCAxOCkKKworI2RlZmluZSBUTEJfRENMRUFOCSgxIDw8IDMwKQorI2RlZmluZSBUTEJfV0IJCSgxIDw8IDMxKQorCisvKgorICoJTU1VIFRMQiBNb2RlbAorICoJPT09PT09PT09PT09PQorICoKKyAqCVdlIGhhdmUgdGhlIGZvbGxvd2luZyB0byBjaG9vc2UgZnJvbToKKyAqCSAgdjMgICAgLSBBUk12MworICoJICB2NCAgICAtIEFSTXY0IHdpdGhvdXQgd3JpdGUgYnVmZmVyCisgKgkgIHY0d2IgIC0gQVJNdjQgd2l0aCB3cml0ZSBidWZmZXIgd2l0aG91dCBJIFRMQiBmbHVzaCBlbnRyeSBpbnN0cnVjdGlvbgorICoJICB2NHdiaSAtIEFSTXY0IHdpdGggd3JpdGUgYnVmZmVyIHdpdGggSSBUTEIgZmx1c2ggZW50cnkgaW5zdHJ1Y3Rpb24KKyAqCSAgdjZ3YmkgLSBBUk12NiB3aXRoIHdyaXRlIGJ1ZmZlciB3aXRoIEkgVExCIGZsdXNoIGVudHJ5IGluc3RydWN0aW9uCisgKi8KKyN1bmRlZiBfVExCCisjdW5kZWYgTVVMVElfVExCCisKKyNkZWZpbmUgdjNfdGxiX2ZsYWdzCShUTEJfVjNfRlVMTCB8IFRMQl9WM19QQUdFKQorCisjaWZkZWYgQ09ORklHX0NQVV9UTEJfVjMKKyMgZGVmaW5lIHYzX3Bvc3NpYmxlX2ZsYWdzCXYzX3RsYl9mbGFncworIyBkZWZpbmUgdjNfYWx3YXlzX2ZsYWdzCXYzX3RsYl9mbGFncworIyBpZmRlZiBfVExCCisjICBkZWZpbmUgTVVMVElfVExCIDEKKyMgZWxzZQorIyAgZGVmaW5lIF9UTEIgdjMKKyMgZW5kaWYKKyNlbHNlCisjIGRlZmluZSB2M19wb3NzaWJsZV9mbGFncwkwCisjIGRlZmluZSB2M19hbHdheXNfZmxhZ3MJKC0xVUwpCisjZW5kaWYKKworI2RlZmluZSB2NF90bGJfZmxhZ3MJKFRMQl9WNF9VX0ZVTEwgfCBUTEJfVjRfVV9QQUdFKQorCisjaWZkZWYgQ09ORklHX0NQVV9UTEJfVjRXVAorIyBkZWZpbmUgdjRfcG9zc2libGVfZmxhZ3MJdjRfdGxiX2ZsYWdzCisjIGRlZmluZSB2NF9hbHdheXNfZmxhZ3MJdjRfdGxiX2ZsYWdzCisjIGlmZGVmIF9UTEIKKyMgIGRlZmluZSBNVUxUSV9UTEIgMQorIyBlbHNlCisjICBkZWZpbmUgX1RMQiB2NAorIyBlbmRpZgorI2Vsc2UKKyMgZGVmaW5lIHY0X3Bvc3NpYmxlX2ZsYWdzCTAKKyMgZGVmaW5lIHY0X2Fsd2F5c19mbGFncwkoLTFVTCkKKyNlbmRpZgorCisjZGVmaW5lIHY0d2JpX3RsYl9mbGFncwkoVExCX1dCIHwgVExCX0RDTEVBTiB8IFwKKwkJCSBUTEJfVjRfSV9GVUxMIHwgVExCX1Y0X0RfRlVMTCB8IFwKKwkJCSBUTEJfVjRfSV9QQUdFIHwgVExCX1Y0X0RfUEFHRSkKKworI2lmZGVmIENPTkZJR19DUFVfVExCX1Y0V0JJCisjIGRlZmluZSB2NHdiaV9wb3NzaWJsZV9mbGFncwl2NHdiaV90bGJfZmxhZ3MKKyMgZGVmaW5lIHY0d2JpX2Fsd2F5c19mbGFncwl2NHdiaV90bGJfZmxhZ3MKKyMgaWZkZWYgX1RMQgorIyAgZGVmaW5lIE1VTFRJX1RMQiAxCisjIGVsc2UKKyMgIGRlZmluZSBfVExCIHY0d2JpCisjIGVuZGlmCisjZWxzZQorIyBkZWZpbmUgdjR3YmlfcG9zc2libGVfZmxhZ3MJMAorIyBkZWZpbmUgdjR3YmlfYWx3YXlzX2ZsYWdzCSgtMVVMKQorI2VuZGlmCisKKyNkZWZpbmUgdjR3Yl90bGJfZmxhZ3MJKFRMQl9XQiB8IFRMQl9EQ0xFQU4gfCBcCisJCQkgVExCX1Y0X0lfRlVMTCB8IFRMQl9WNF9EX0ZVTEwgfCBcCisJCQkgVExCX1Y0X0RfUEFHRSkKKworI2lmZGVmIENPTkZJR19DUFVfVExCX1Y0V0IKKyMgZGVmaW5lIHY0d2JfcG9zc2libGVfZmxhZ3MJdjR3Yl90bGJfZmxhZ3MKKyMgZGVmaW5lIHY0d2JfYWx3YXlzX2ZsYWdzCXY0d2JfdGxiX2ZsYWdzCisjIGlmZGVmIF9UTEIKKyMgIGRlZmluZSBNVUxUSV9UTEIgMQorIyBlbHNlCisjICBkZWZpbmUgX1RMQiB2NHdiCisjIGVuZGlmCisjZWxzZQorIyBkZWZpbmUgdjR3Yl9wb3NzaWJsZV9mbGFncwkwCisjIGRlZmluZSB2NHdiX2Fsd2F5c19mbGFncwkoLTFVTCkKKyNlbmRpZgorCisjZGVmaW5lIHY2d2JpX3RsYl9mbGFncyAoVExCX1dCIHwgVExCX0RDTEVBTiB8IFwKKwkJCSBUTEJfVjZfSV9GVUxMIHwgVExCX1Y2X0RfRlVMTCB8IFwKKwkJCSBUTEJfVjZfSV9QQUdFIHwgVExCX1Y2X0RfUEFHRSB8IFwKKwkJCSBUTEJfVjZfSV9BU0lEIHwgVExCX1Y2X0RfQVNJRCkKKworI2lmZGVmIENPTkZJR19DUFVfVExCX1Y2CisjIGRlZmluZSB2NndiaV9wb3NzaWJsZV9mbGFncwl2NndiaV90bGJfZmxhZ3MKKyMgZGVmaW5lIHY2d2JpX2Fsd2F5c19mbGFncwl2NndiaV90bGJfZmxhZ3MKKyMgaWZkZWYgX1RMQgorIyAgZGVmaW5lIE1VTFRJX1RMQiAxCisjIGVsc2UKKyMgIGRlZmluZSBfVExCIHY2d2JpCisjIGVuZGlmCisjZWxzZQorIyBkZWZpbmUgdjZ3YmlfcG9zc2libGVfZmxhZ3MJMAorIyBkZWZpbmUgdjZ3YmlfYWx3YXlzX2ZsYWdzCSgtMVVMKQorI2VuZGlmCisKKyNpZm5kZWYgX1RMQgorI2Vycm9yIFVua25vd24gVExCIG1vZGVsCisjZW5kaWYKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworc3RydWN0IGNwdV90bGJfZm5zIHsKKwl2b2lkICgqZmx1c2hfdXNlcl9yYW5nZSkodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICopOworCXZvaWQgKCpmbHVzaF9rZXJuX3JhbmdlKSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKKwl1bnNpZ25lZCBsb25nIHRsYl9mbGFnczsKK307CisKKy8qCisgKiBTZWxlY3QgdGhlIGNhbGxpbmcgbWV0aG9kCisgKi8KKyNpZmRlZiBNVUxUSV9UTEIKKworI2RlZmluZSBfX2NwdV9mbHVzaF91c2VyX3RsYl9yYW5nZQljcHVfdGxiLmZsdXNoX3VzZXJfcmFuZ2UKKyNkZWZpbmUgX19jcHVfZmx1c2hfa2Vybl90bGJfcmFuZ2UJY3B1X3RsYi5mbHVzaF9rZXJuX3JhbmdlCisKKyNlbHNlCisKKyNkZWZpbmUgX19jcHVfZmx1c2hfdXNlcl90bGJfcmFuZ2UJX19nbHVlKF9UTEIsX2ZsdXNoX3VzZXJfdGxiX3JhbmdlKQorI2RlZmluZSBfX2NwdV9mbHVzaF9rZXJuX3RsYl9yYW5nZQlfX2dsdWUoX1RMQixfZmx1c2hfa2Vybl90bGJfcmFuZ2UpCisKK2V4dGVybiB2b2lkIF9fY3B1X2ZsdXNoX3VzZXJfdGxiX3JhbmdlKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKTsKK2V4dGVybiB2b2lkIF9fY3B1X2ZsdXNoX2tlcm5fdGxiX3JhbmdlKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOworCisjZW5kaWYKKworZXh0ZXJuIHN0cnVjdCBjcHVfdGxiX2ZucyBjcHVfdGxiOworCisjZGVmaW5lIF9fY3B1X3RsYl9mbGFncwkJCWNwdV90bGIudGxiX2ZsYWdzCisKKy8qCisgKglUTEIgTWFuYWdlbWVudAorICoJPT09PT09PT09PT09PT0KKyAqCisgKglUaGUgYXJjaC9hcm0vbW0vdGxiLSouUyBmaWxlcyBpbXBsZW1lbnQgdGhlc2UgbWV0aG9kcy4KKyAqCisgKglUaGUgVExCIHNwZWNpZmljIGNvZGUgaXMgZXhwZWN0ZWQgdG8gcGVyZm9ybSB3aGF0ZXZlciB0ZXN0cyBpdAorICoJbmVlZHMgdG8gZGV0ZXJtaW5lIGlmIGl0IHNob3VsZCBpbnZhbGlkYXRlIHRoZSBUTEIgZm9yIGVhY2gKKyAqCWNhbGwuICBTdGFydCBhZGRyZXNzZXMgYXJlIGluY2x1c2l2ZSBhbmQgZW5kIGFkZHJlc3NlcyBhcmUKKyAqCWV4Y2x1c2l2ZTsgaXQgaXMgc2FmZSB0byByb3VuZCB0aGVzZSBhZGRyZXNzZXMgZG93bi4KKyAqCisgKglmbHVzaF90bGJfYWxsKCkKKyAqCisgKgkJSW52YWxpZGF0ZSB0aGUgZW50aXJlIFRMQi4KKyAqCisgKglmbHVzaF90bGJfbW0obW0pCisgKgorICoJCUludmFsaWRhdGUgYWxsIFRMQiBlbnRyaWVzIGluIGEgcGFydGljdWxhciBhZGRyZXNzCisgKgkJc3BhY2UuCisgKgkJLSBtbQktIG1tX3N0cnVjdCBkZXNjcmliaW5nIGFkZHJlc3Mgc3BhY2UKKyAqCisgKglmbHVzaF90bGJfcmFuZ2UobW0sc3RhcnQsZW5kKQorICoKKyAqCQlJbnZhbGlkYXRlIGEgcmFuZ2Ugb2YgVExCIGVudHJpZXMgaW4gdGhlIHNwZWNpZmllZAorICoJCWFkZHJlc3Mgc3BhY2UuCisgKgkJLSBtbQktIG1tX3N0cnVjdCBkZXNjcmliaW5nIGFkZHJlc3Mgc3BhY2UKKyAqCQktIHN0YXJ0IC0gc3RhcnQgYWRkcmVzcyAobWF5IG5vdCBiZSBhbGlnbmVkKQorICoJCS0gZW5kCS0gZW5kIGFkZHJlc3MgKGV4Y2x1c2l2ZSwgbWF5IG5vdCBiZSBhbGlnbmVkKQorICoKKyAqCWZsdXNoX3RsYl9wYWdlKHZhZGRyLHZtYSkKKyAqCisgKgkJSW52YWxpZGF0ZSB0aGUgc3BlY2lmaWVkIHBhZ2UgaW4gdGhlIHNwZWNpZmllZCBhZGRyZXNzIHJhbmdlLgorICoJCS0gdmFkZHIgLSB2aXJ0dWFsIGFkZHJlc3MgKG1heSBub3QgYmUgYWxpZ25lZCkKKyAqCQktIHZtYQktIHZtYV9zdHJ1Y3QgZGVzY3JpYmluZyBhZGRyZXNzIHJhbmdlCisgKgorICoJZmx1c2hfa2Vybl90bGJfcGFnZShrYWRkcikKKyAqCisgKgkJSW52YWxpZGF0ZSB0aGUgVExCIGVudHJ5IGZvciB0aGUgc3BlY2lmaWVkIHBhZ2UuICBUaGUgYWRkcmVzcworICoJCXdpbGwgYmUgaW4gdGhlIGtlcm5lbHMgdmlydHVhbCBtZW1vcnkgc3BhY2UuICBDdXJyZW50IHVzZXMKKyAqCQlvbmx5IHJlcXVpcmUgdGhlIEQtVExCIHRvIGJlIGludmFsaWRhdGVkLgorICoJCS0ga2FkZHIgLSBLZXJuZWwgdmlydHVhbCBtZW1vcnkgYWRkcmVzcworICovCisKKy8qCisgKiBXZSBvcHRpbWlzZSB0aGUgY29kZSBiZWxvdyBieToKKyAqICAtIGJ1aWxkaW5nIGEgc2V0IG9mIFRMQiBmbGFncyB0aGF0IG1pZ2h0IGJlIHNldCBpbiBfX2NwdV90bGJfZmxhZ3MKKyAqICAtIGJ1aWxkaW5nIGEgc2V0IG9mIFRMQiBmbGFncyB0aGF0IHdpbGwgYWx3YXlzIGJlIHNldCBpbiBfX2NwdV90bGJfZmxhZ3MKKyAqICAtIGlmIHdlJ3JlIGdvaW5nIHRvIG5lZWQgX19jcHVfdGxiX2ZsYWdzLCBhY2Nlc3MgaXQgb25jZSBhbmQgb25seSBvbmNlCisgKgorICogVGhpcyBhbGxvd3MgdXMgdG8gYnVpbGQgb3B0aW1hbCBhc3NlbWJseSBmb3IgdGhlIHNpbmdsZS1DUFUgdHlwZSBjYXNlLAorICogYW5kIGFzIGNsb3NlIHRvIG9wdGltYWwgZ2l2ZW4gdGhlIGNvbXBpbGVyIGNvbnN0cmFudHMgZm9yIG11bHRpLUNQVQorICogY2FzZS4gIFdlIGNvdWxkIGRvIGJldHRlciBmb3IgdGhlIG11bHRpLUNQVSBjYXNlIGlmIHRoZSBjb21waWxlcgorICogaW1wbGVtZW50ZWQgdGhlICIlPyIgbWV0aG9kLCBidXQgdGhpcyBoYXMgYmVlbiBkaXNjb250aW51ZWQgZHVlIHRvIHRvbworICogbWFueSBwZW9wbGUgZ2V0dGluZyBpdCB3cm9uZy4KKyAqLworI2RlZmluZSBwb3NzaWJsZV90bGJfZmxhZ3MJKHYzX3Bvc3NpYmxlX2ZsYWdzIHwgXAorCQkJCSB2NF9wb3NzaWJsZV9mbGFncyB8IFwKKwkJCQkgdjR3YmlfcG9zc2libGVfZmxhZ3MgfCBcCisJCQkJIHY0d2JfcG9zc2libGVfZmxhZ3MgfCBcCisJCQkJIHY2d2JpX3Bvc3NpYmxlX2ZsYWdzKQorCisjZGVmaW5lIGFsd2F5c190bGJfZmxhZ3MJKHYzX2Fsd2F5c19mbGFncyAmIFwKKwkJCQkgdjRfYWx3YXlzX2ZsYWdzICYgXAorCQkJCSB2NHdiaV9hbHdheXNfZmxhZ3MgJiBcCisJCQkJIHY0d2JfYWx3YXlzX2ZsYWdzICYgXAorCQkJCSB2NndiaV9hbHdheXNfZmxhZ3MpCisKKyNkZWZpbmUgdGxiX2ZsYWcoZikJKChhbHdheXNfdGxiX2ZsYWdzICYgKGYpKSB8fCAoX190bGJfZmxhZyAmIHBvc3NpYmxlX3RsYl9mbGFncyAmIChmKSkpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfYWxsKHZvaWQpCit7CisJY29uc3QgaW50IHplcm8gPSAwOworCWNvbnN0IHVuc2lnbmVkIGludCBfX3RsYl9mbGFnID0gX19jcHVfdGxiX2ZsYWdzOworCisJaWYgKHRsYl9mbGFnKFRMQl9XQikpCisJCWFzbSgibWNyJT8gcDE1LCAwLCAlMCwgYzcsIGMxMCwgNCIgOiA6ICJyIiAoemVybykpOworCisJaWYgKHRsYl9mbGFnKFRMQl9WM19GVUxMKSkKKwkJYXNtKCJtY3IlPyBwMTUsIDAsICUwLCBjNiwgYzAsIDAiIDogOiAiciIgKHplcm8pKTsKKwlpZiAodGxiX2ZsYWcoVExCX1Y0X1VfRlVMTCB8IFRMQl9WNl9VX0ZVTEwpKQorCQlhc20oIm1jciU/IHAxNSwgMCwgJTAsIGM4LCBjNywgMCIgOiA6ICJyIiAoemVybykpOworCWlmICh0bGJfZmxhZyhUTEJfVjRfRF9GVUxMIHwgVExCX1Y2X0RfRlVMTCkpCisJCWFzbSgibWNyJT8gcDE1LCAwLCAlMCwgYzgsIGM2LCAwIiA6IDogInIiICh6ZXJvKSk7CisJaWYgKHRsYl9mbGFnKFRMQl9WNF9JX0ZVTEwgfCBUTEJfVjZfSV9GVUxMKSkKKwkJYXNtKCJtY3IlPyBwMTUsIDAsICUwLCBjOCwgYzUsIDAiIDogOiAiciIgKHplcm8pKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwljb25zdCBpbnQgemVybyA9IDA7CisJY29uc3QgaW50IGFzaWQgPSBBU0lEKG1tKTsKKwljb25zdCB1bnNpZ25lZCBpbnQgX190bGJfZmxhZyA9IF9fY3B1X3RsYl9mbGFnczsKKworCWlmICh0bGJfZmxhZyhUTEJfV0IpKQorCQlhc20oIm1jciU/IHAxNSwgMCwgJTAsIGM3LCBjMTAsIDQiIDogOiAiciIgKHplcm8pKTsKKworCWlmIChjcHVfaXNzZXQoc21wX3Byb2Nlc3Nvcl9pZCgpLCBtbS0+Y3B1X3ZtX21hc2spKSB7CisJCWlmICh0bGJfZmxhZyhUTEJfVjNfRlVMTCkpCisJCQlhc20oIm1jciU/IHAxNSwgMCwgJTAsIGM2LCBjMCwgMCIgOiA6ICJyIiAoemVybykpOworCQlpZiAodGxiX2ZsYWcoVExCX1Y0X1VfRlVMTCkpCisJCQlhc20oIm1jciU/IHAxNSwgMCwgJTAsIGM4LCBjNywgMCIgOiA6ICJyIiAoemVybykpOworCQlpZiAodGxiX2ZsYWcoVExCX1Y0X0RfRlVMTCkpCisJCQlhc20oIm1jciU/IHAxNSwgMCwgJTAsIGM4LCBjNiwgMCIgOiA6ICJyIiAoemVybykpOworCQlpZiAodGxiX2ZsYWcoVExCX1Y0X0lfRlVMTCkpCisJCQlhc20oIm1jciU/IHAxNSwgMCwgJTAsIGM4LCBjNSwgMCIgOiA6ICJyIiAoemVybykpOworCX0KKworCWlmICh0bGJfZmxhZyhUTEJfVjZfVV9BU0lEKSkKKwkJYXNtKCJtY3IlPyBwMTUsIDAsICUwLCBjOCwgYzcsIDIiIDogOiAiciIgKGFzaWQpKTsKKwlpZiAodGxiX2ZsYWcoVExCX1Y2X0RfQVNJRCkpCisJCWFzbSgibWNyJT8gcDE1LCAwLCAlMCwgYzgsIGM2LCAyIiA6IDogInIiIChhc2lkKSk7CisJaWYgKHRsYl9mbGFnKFRMQl9WNl9JX0FTSUQpKQorCQlhc20oIm1jciU/IHAxNSwgMCwgJTAsIGM4LCBjNSwgMiIgOiA6ICJyIiAoYXNpZCkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2ZsdXNoX3RsYl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHVhZGRyKQoreworCWNvbnN0IGludCB6ZXJvID0gMDsKKwljb25zdCB1bnNpZ25lZCBpbnQgX190bGJfZmxhZyA9IF9fY3B1X3RsYl9mbGFnczsKKworCXVhZGRyID0gKHVhZGRyICYgUEFHRV9NQVNLKSB8IEFTSUQodm1hLT52bV9tbSk7CisKKwlpZiAodGxiX2ZsYWcoVExCX1dCKSkKKwkJYXNtKCJtY3IlPyBwMTUsIDAsICUwLCBjNywgYzEwLCA0IiA6IDogInIiICh6ZXJvKSk7CisKKwlpZiAoY3B1X2lzc2V0KHNtcF9wcm9jZXNzb3JfaWQoKSwgdm1hLT52bV9tbS0+Y3B1X3ZtX21hc2spKSB7CisJCWlmICh0bGJfZmxhZyhUTEJfVjNfUEFHRSkpCisJCQlhc20oIm1jciU/IHAxNSwgMCwgJTAsIGM2LCBjMCwgMCIgOiA6ICJyIiAodWFkZHIpKTsKKwkJaWYgKHRsYl9mbGFnKFRMQl9WNF9VX1BBR0UpKQorCQkJYXNtKCJtY3IlPyBwMTUsIDAsICUwLCBjOCwgYzcsIDEiIDogOiAiciIgKHVhZGRyKSk7CisJCWlmICh0bGJfZmxhZyhUTEJfVjRfRF9QQUdFKSkKKwkJCWFzbSgibWNyJT8gcDE1LCAwLCAlMCwgYzgsIGM2LCAxIiA6IDogInIiICh1YWRkcikpOworCQlpZiAodGxiX2ZsYWcoVExCX1Y0X0lfUEFHRSkpCisJCQlhc20oIm1jciU/IHAxNSwgMCwgJTAsIGM4LCBjNSwgMSIgOiA6ICJyIiAodWFkZHIpKTsKKwkJaWYgKCF0bGJfZmxhZyhUTEJfVjRfSV9QQUdFKSAmJiB0bGJfZmxhZyhUTEJfVjRfSV9GVUxMKSkKKwkJCWFzbSgibWNyJT8gcDE1LCAwLCAlMCwgYzgsIGM1LCAwIiA6IDogInIiICh6ZXJvKSk7CisJfQorCisJaWYgKHRsYl9mbGFnKFRMQl9WNl9VX1BBR0UpKQorCQlhc20oIm1jciU/IHAxNSwgMCwgJTAsIGM4LCBjNywgMSIgOiA6ICJyIiAodWFkZHIpKTsKKwlpZiAodGxiX2ZsYWcoVExCX1Y2X0RfUEFHRSkpCisJCWFzbSgibWNyJT8gcDE1LCAwLCAlMCwgYzgsIGM2LCAxIiA6IDogInIiICh1YWRkcikpOworCWlmICh0bGJfZmxhZyhUTEJfVjZfSV9QQUdFKSkKKwkJYXNtKCJtY3IlPyBwMTUsIDAsICUwLCBjOCwgYzUsIDEiIDogOiAiciIgKHVhZGRyKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfa2VybmVsX3BhZ2UodW5zaWduZWQgbG9uZyBrYWRkcikKK3sKKwljb25zdCBpbnQgemVybyA9IDA7CisJY29uc3QgdW5zaWduZWQgaW50IF9fdGxiX2ZsYWcgPSBfX2NwdV90bGJfZmxhZ3M7CisKKwlrYWRkciAmPSBQQUdFX01BU0s7CisKKwlpZiAodGxiX2ZsYWcoVExCX1dCKSkKKwkJYXNtKCJtY3IlPyBwMTUsIDAsICUwLCBjNywgYzEwLCA0IiA6IDogInIiICh6ZXJvKSk7CisKKwlpZiAodGxiX2ZsYWcoVExCX1YzX1BBR0UpKQorCQlhc20oIm1jciU/IHAxNSwgMCwgJTAsIGM2LCBjMCwgMCIgOiA6ICJyIiAoa2FkZHIpKTsKKwlpZiAodGxiX2ZsYWcoVExCX1Y0X1VfUEFHRSkpCisJCWFzbSgibWNyJT8gcDE1LCAwLCAlMCwgYzgsIGM3LCAxIiA6IDogInIiIChrYWRkcikpOworCWlmICh0bGJfZmxhZyhUTEJfVjRfRF9QQUdFKSkKKwkJYXNtKCJtY3IlPyBwMTUsIDAsICUwLCBjOCwgYzYsIDEiIDogOiAiciIgKGthZGRyKSk7CisJaWYgKHRsYl9mbGFnKFRMQl9WNF9JX1BBR0UpKQorCQlhc20oIm1jciU/IHAxNSwgMCwgJTAsIGM4LCBjNSwgMSIgOiA6ICJyIiAoa2FkZHIpKTsKKwlpZiAoIXRsYl9mbGFnKFRMQl9WNF9JX1BBR0UpICYmIHRsYl9mbGFnKFRMQl9WNF9JX0ZVTEwpKQorCQlhc20oIm1jciU/IHAxNSwgMCwgJTAsIGM4LCBjNSwgMCIgOiA6ICJyIiAoemVybykpOworCisJaWYgKHRsYl9mbGFnKFRMQl9WNl9VX1BBR0UpKQorCQlhc20oIm1jciU/IHAxNSwgMCwgJTAsIGM4LCBjNywgMSIgOiA6ICJyIiAoa2FkZHIpKTsKKwlpZiAodGxiX2ZsYWcoVExCX1Y2X0RfUEFHRSkpCisJCWFzbSgibWNyJT8gcDE1LCAwLCAlMCwgYzgsIGM2LCAxIiA6IDogInIiIChrYWRkcikpOworCWlmICh0bGJfZmxhZyhUTEJfVjZfSV9QQUdFKSkKKwkJYXNtKCJtY3IlPyBwMTUsIDAsICUwLCBjOCwgYzUsIDEiIDogOiAiciIgKGthZGRyKSk7Cit9CisKKy8qCisgKglmbHVzaF9wbWRfZW50cnkKKyAqCisgKglGbHVzaCBhIFBNRCBlbnRyeSAod29yZCBhbGlnbmVkLCBvciBkb3VibGUtd29yZCBhbGlnbmVkKSB0bworICoJUkFNIGlmIHRoZSBUTEIgZm9yIHRoZSBDUFUgd2UgYXJlIHJ1bm5pbmcgb24gcmVxdWlyZXMgdGhpcy4KKyAqCVRoaXMgaXMgdHlwaWNhbGx5IHVzZWQgd2hlbiB3ZSBhcmUgY3JlYXRpbmcgUE1EIGVudHJpZXMuCisgKgorICoJY2xlYW5fcG1kX2VudHJ5CisgKgorICoJQ2xlYW4gKGJ1dCBkb24ndCBkcmFpbiB0aGUgd3JpdGUgYnVmZmVyKSBpZiB0aGUgQ1BVIHJlcXVpcmVzCisgKgl0aGVzZSBvcGVyYXRpb25zLiAgVGhpcyBpcyB0eXBpY2FsbHkgdXNlZCB3aGVuIHdlIGFyZSByZW1vdmluZworICoJUE1EIGVudHJpZXMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9wbWRfZW50cnkocG1kX3QgKnBtZCkKK3sKKwljb25zdCB1bnNpZ25lZCBpbnQgemVybyA9IDA7CisJY29uc3QgdW5zaWduZWQgaW50IF9fdGxiX2ZsYWcgPSBfX2NwdV90bGJfZmxhZ3M7CisKKwlpZiAodGxiX2ZsYWcoVExCX0RDTEVBTikpCisJCWFzbSgibWNyJT8JcDE1LCAwLCAlMCwgYzcsIGMxMCwgMQlAIGZsdXNoX3BtZCIKKwkJCTogOiAiciIgKHBtZCkpOworCWlmICh0bGJfZmxhZyhUTEJfV0IpKQorCQlhc20oIm1jciU/CXAxNSwgMCwgJTAsIGM3LCBjMTAsIDQJQCBmbHVzaF9wbWQiCisJCQk6IDogInIiICh6ZXJvKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhbl9wbWRfZW50cnkocG1kX3QgKnBtZCkKK3sKKwljb25zdCB1bnNpZ25lZCBpbnQgX190bGJfZmxhZyA9IF9fY3B1X3RsYl9mbGFnczsKKworCWlmICh0bGJfZmxhZyhUTEJfRENMRUFOKSkKKwkJYXNtKCJtY3IlPwlwMTUsIDAsICUwLCBjNywgYzEwLCAxCUAgZmx1c2hfcG1kIgorCQkJOiA6ICJyIiAocG1kKSk7Cit9CisKKyN1bmRlZiB0bGJfZmxhZworI3VuZGVmIGFsd2F5c190bGJfZmxhZ3MKKyN1bmRlZiBwb3NzaWJsZV90bGJfZmxhZ3MKKworLyoKKyAqIENvbnZlcnQgY2FsbHMgdG8gb3VyIGNhbGxpbmcgY29udmVudGlvbi4KKyAqLworI2RlZmluZSBmbHVzaF90bGJfcmFuZ2Uodm1hLHN0YXJ0LGVuZCkJX19jcHVfZmx1c2hfdXNlcl90bGJfcmFuZ2Uoc3RhcnQsZW5kLHZtYSkKKyNkZWZpbmUgZmx1c2hfdGxiX2tlcm5lbF9yYW5nZShzLGUpCV9fY3B1X2ZsdXNoX2tlcm5fdGxiX3JhbmdlKHMsZSkKKworLyoKKyAqIGlmIFBHX2RjYWNoZV9kaXJ0eSBpcyBzZXQgZm9yIHRoZSBwYWdlLCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IGFueQorICogY2FjaGUgZW50cmllcyBmb3IgdGhlIGtlcm5lbHMgdmlydHVhbCBtZW1vcnkgcmFuZ2UgYXJlIHdyaXR0ZW4KKyAqIGJhY2sgdG8gdGhlIHBhZ2UuCisgKi8KK2V4dGVybiB2b2lkIHVwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgcHRlKTsKKworLyoKKyAqIEFSTSBwcm9jZXNzb3JzIGRvIG5vdCBjYWNoZSBUTEIgdGFibGVzIGluIFJBTS4KKyAqLworI2RlZmluZSBmbHVzaF90bGJfcGd0YWJsZXMobW0sc3RhcnQsZW5kKQlkbyB7IH0gd2hpbGUgKDApCisKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS90b3BvbG9neS5oIGIvaW5jbHVkZS9hc20tYXJtL3RvcG9sb2d5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNjYmQ3YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS90b3BvbG9neS5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfQVNNX0FSTV9UT1BPTE9HWV9ICisjZGVmaW5lIF9BU01fQVJNX1RPUE9MT0dZX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3RvcG9sb2d5Lmg+CisKKyNlbmRpZiAvKiBfQVNNX0FSTV9UT1BPTE9HWV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vdHJhcHMuaCBiL2luY2x1ZGUvYXNtLWFybS90cmFwcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0ZjM0ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vdHJhcHMuaApAQCAtMCwwICsxLDE4IEBACisjaWZuZGVmIF9BU01BUk1fVFJBUF9ICisjZGVmaW5lIF9BU01BUk1fVFJBUF9ICisKKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisKK3N0cnVjdCB1bmRlZl9ob29rIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CisJdTMyIGluc3RyX21hc2s7CisJdTMyIGluc3RyX3ZhbDsKKwl1MzIgY3Bzcl9tYXNrOworCXUzMiBjcHNyX3ZhbDsKKwlpbnQgKCpmbikoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGludCBpbnN0cik7Cit9OworCit2b2lkIHJlZ2lzdGVyX3VuZGVmX2hvb2soc3RydWN0IHVuZGVmX2hvb2sgKmhvb2spOwordm9pZCB1bnJlZ2lzdGVyX3VuZGVmX2hvb2soc3RydWN0IHVuZGVmX2hvb2sgKmhvb2spOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS90eXBlcy5oIGIvaW5jbHVkZS9hc20tYXJtL3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRjOTJlNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS90eXBlcy5oCkBAIC0wLDAgKzEsNjIgQEAKKyNpZm5kZWYgX19BU01fQVJNX1RZUEVTX0gKKyNkZWZpbmUgX19BU01fQVJNX1RZUEVTX0gKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1bW9kZV90OworCisvKgorICogX194eCBpcyBvazogaXQgZG9lc24ndCBwb2xsdXRlIHRoZSBQT1NJWCBuYW1lc3BhY2UuIFVzZSB0aGVzZSBpbiB0aGUKKyAqIGhlYWRlciBmaWxlcyBleHBvcnRlZCB0byB1c2VyIHNwYWNlCisgKi8KKwordHlwZWRlZiBfX3NpZ25lZF9fIGNoYXIgX19zODsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBfX3U4OworCit0eXBlZGVmIF9fc2lnbmVkX18gc2hvcnQgX19zMTY7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fdTE2OworCit0eXBlZGVmIF9fc2lnbmVkX18gaW50IF9fczMyOwordHlwZWRlZiB1bnNpZ25lZCBpbnQgX191MzI7CisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAhZGVmaW5lZChfX1NUUklDVF9BTlNJX18pCit0eXBlZGVmIF9fc2lnbmVkX18gbG9uZyBsb25nIF9fczY0OwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgX191NjQ7CisjZW5kaWYKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisvKgorICogVGhlc2UgYXJlbid0IGV4cG9ydGVkIG91dHNpZGUgdGhlIGtlcm5lbCB0byBhdm9pZCBuYW1lIHNwYWNlIGNsYXNoZXMKKyAqLworI2lmZGVmIF9fS0VSTkVMX18KKworI2RlZmluZSBCSVRTX1BFUl9MT05HIDMyCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK3R5cGVkZWYgc2lnbmVkIGNoYXIgczg7Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdTg7CisKK3R5cGVkZWYgc2lnbmVkIHNob3J0IHMxNjsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgdTE2OworCit0eXBlZGVmIHNpZ25lZCBpbnQgczMyOwordHlwZWRlZiB1bnNpZ25lZCBpbnQgdTMyOworCit0eXBlZGVmIHNpZ25lZCBsb25nIGxvbmcgczY0OwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdTY0OworCisvKiBEbWEgYWRkcmVzc2VzIGFyZSAzMi1iaXRzIHdpZGUuICAqLworCit0eXBlZGVmIHUzMiBkbWFfYWRkcl90OwordHlwZWRlZiB1MzIgZG1hNjRfYWRkcl90OworCit0eXBlZGVmIHVuc2lnbmVkIGludCBrbWVtX2J1ZmN0bF90OworCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vdWFjY2Vzcy5oIGIvaW5jbHVkZS9hc20tYXJtL3VhY2Nlc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2MwMThiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL3VhY2Nlc3MuaApAQCAtMCwwICsxLDQzOCBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vdWFjY2Vzcy5oCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2lmbmRlZiBfQVNNQVJNX1VBQ0NFU1NfSAorI2RlZmluZSBfQVNNQVJNX1VBQ0NFU1NfSAorCisvKgorICogVXNlciBzcGFjZSBtZW1vcnkgYWNjZXNzIGZ1bmN0aW9ucworICovCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxhc20vZXJybm8uaD4KKyNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+CisjaW5jbHVkZSA8YXNtL2RvbWFpbi5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKworI2RlZmluZSBWRVJJRllfUkVBRCAwCisjZGVmaW5lIFZFUklGWV9XUklURSAxCisKKy8qCisgKiBUaGUgZXhjZXB0aW9uIHRhYmxlIGNvbnNpc3RzIG9mIHBhaXJzIG9mIGFkZHJlc3NlczogdGhlIGZpcnN0IGlzIHRoZQorICogYWRkcmVzcyBvZiBhbiBpbnN0cnVjdGlvbiB0aGF0IGlzIGFsbG93ZWQgdG8gZmF1bHQsIGFuZCB0aGUgc2Vjb25kIGlzCisgKiB0aGUgYWRkcmVzcyBhdCB3aGljaCB0aGUgcHJvZ3JhbSBzaG91bGQgY29udGludWUuICBObyByZWdpc3RlcnMgYXJlCisgKiBtb2RpZmllZCwgc28gaXQgaXMgZW50aXJlbHkgdXAgdG8gdGhlIGNvbnRpbnVhdGlvbiBjb2RlIHRvIGZpZ3VyZSBvdXQKKyAqIHdoYXQgdG8gZG8uCisgKgorICogQWxsIHRoZSByb3V0aW5lcyBiZWxvdyB1c2UgYml0cyBvZiBmaXh1cCBjb2RlIHRoYXQgYXJlIG91dCBvZiBsaW5lCisgKiB3aXRoIHRoZSBtYWluIGluc3RydWN0aW9uIHBhdGguICBUaGlzIG1lYW5zIHdoZW4gZXZlcnl0aGluZyBpcyB3ZWxsLAorICogd2UgZG9uJ3QgZXZlbiBoYXZlIHRvIGp1bXAgb3ZlciB0aGVtLiAgRnVydGhlciwgdGhleSBkbyBub3QgaW50cnVkZQorICogb24gb3VyIGNhY2hlIG9yIHRsYiBlbnRyaWVzLgorICovCisKK3N0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkKK3sKKwl1bnNpZ25lZCBsb25nIGluc24sIGZpeHVwOworfTsKKworZXh0ZXJuIGludCBmaXh1cF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCisvKgorICogTm90ZSB0aGF0IHRoaXMgaXMgYWN0dWFsbHkgMHgxLDAwMDAsMDAwMAorICovCisjZGVmaW5lIEtFUk5FTF9EUwkweDAwMDAwMDAwCisjZGVmaW5lIFVTRVJfRFMJCVRBU0tfU0laRQorCisjZGVmaW5lIGdldF9kcygpCShLRVJORUxfRFMpCisjZGVmaW5lIGdldF9mcygpCShjdXJyZW50X3RocmVhZF9pbmZvKCktPmFkZHJfbGltaXQpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfZnMgKG1tX3NlZ21lbnRfdCBmcykKK3sKKwljdXJyZW50X3RocmVhZF9pbmZvKCktPmFkZHJfbGltaXQgPSBmczsKKwltb2RpZnlfZG9tYWluKERPTUFJTl9LRVJORUwsIGZzID8gRE9NQUlOX0NMSUVOVCA6IERPTUFJTl9NQU5BR0VSKTsKK30KKworI2RlZmluZSBzZWdtZW50X2VxKGEsYikJKChhKSA9PSAoYikpCisKKyNkZWZpbmUgX19hZGRyX29rKGFkZHIpICh7IFwKKwl1bnNpZ25lZCBsb25nIGZsYWc7IFwKKwlfX2FzbV9fKCJjbXAgJTIsICUwOyBtb3ZsbyAlMCwgIzAiIFwKKwkJOiAiPSZyIiAoZmxhZykgXAorCQk6ICIwIiAoY3VycmVudF90aHJlYWRfaW5mbygpLT5hZGRyX2xpbWl0KSwgInIiIChhZGRyKSBcCisJCTogImNjIik7IFwKKwkoZmxhZyA9PSAwKTsgfSkKKworLyogV2UgdXNlIDMzLWJpdCBhcml0aG1ldGljIGhlcmUuLi4gKi8KKyNkZWZpbmUgX19yYW5nZV9vayhhZGRyLHNpemUpICh7IFwKKwl1bnNpZ25lZCBsb25nIGZsYWcsIHN1bTsgXAorCV9fY2hrX3VzZXJfcHRyKGFkZHIpOwlcCisJX19hc21fXygiYWRkcyAlMSwgJTIsICUzOyBzYmNjY3MgJTEsICUxLCAlMDsgbW92Y2MgJTAsICMwIiBcCisJCTogIj0mciIgKGZsYWcpLCAiPSZyIiAoc3VtKSBcCisJCTogInIiIChhZGRyKSwgIklyIiAoc2l6ZSksICIwIiAoY3VycmVudF90aHJlYWRfaW5mbygpLT5hZGRyX2xpbWl0KSBcCisJCTogImNjIik7IFwKKwlmbGFnOyB9KQorCisjZGVmaW5lIGFjY2Vzc19vayh0eXBlLGFkZHIsc2l6ZSkJKF9fcmFuZ2Vfb2soYWRkcixzaXplKSA9PSAwKQorCisvKiB0aGlzIGZ1bmN0aW9uIHdpbGwgZ28gYXdheSBzb29uIC0gdXNlIGFjY2Vzc19vaygpIGluc3RlYWQgKi8KK3N0YXRpYyBpbmxpbmUgaW50IF9fZGVwcmVjYXRlZCB2ZXJpZnlfYXJlYShpbnQgdHlwZSwgY29uc3Qgdm9pZCBfX3VzZXIgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlyZXR1cm4gYWNjZXNzX29rKHR5cGUsIGFkZHIsIHNpemUpID8gMCA6IC1FRkFVTFQ7Cit9CisKKy8qCisgKiBTaW5nbGUtdmFsdWUgdHJhbnNmZXIgcm91dGluZXMuICBUaGV5IGF1dG9tYXRpY2FsbHkgdXNlIHRoZSByaWdodAorICogc2l6ZSBpZiB3ZSBqdXN0IGhhdmUgdGhlIHJpZ2h0IHBvaW50ZXIgdHlwZS4gIE5vdGUgdGhhdCB0aGUgZnVuY3Rpb25zCisgKiB3aGljaCByZWFkIGZyb20gdXNlciBzcGFjZSAoKmdldF8qKSBuZWVkIHRvIHRha2UgY2FyZSBub3QgdG8gbGVhaworICoga2VybmVsIGRhdGEgZXZlbiBpZiB0aGUgY2FsbGluZyBjb2RlIGlzIGJ1Z2d5IGFuZCBmYWlscyB0byBjaGVjaworICogdGhlIHJldHVybiB2YWx1ZS4gIFRoaXMgbWVhbnMgemVyb2luZyBvdXQgdGhlIGRlc3RpbmF0aW9uIHZhcmlhYmxlCisgKiBvciBidWZmZXIgb24gZXJyb3IuICBOb3JtYWxseSB0aGlzIGlzIGRvbmUgb3V0IG9mIGxpbmUgYnkgdGhlCisgKiBmaXh1cCBjb2RlLCBidXQgdGhlcmUgYXJlIGEgZmV3IHBsYWNlcyB3aGVyZSBpdCBpbnRydWRlcyBvbiB0aGUKKyAqIG1haW4gY29kZSBwYXRoLiAgV2hlbiB3ZSBvbmx5IHdyaXRlIHRvIHVzZXIgc3BhY2UsIHRoZXJlIGlzIG5vCisgKiBwcm9ibGVtLgorICoKKyAqIFRoZSAiX194eHgiIHZlcnNpb25zIG9mIHRoZSB1c2VyIGFjY2VzcyBmdW5jdGlvbnMgZG8gbm90IHZlcmlmeSB0aGUKKyAqIGFkZHJlc3Mgc3BhY2UgLSBpdCBtdXN0IGhhdmUgYmVlbiBkb25lIHByZXZpb3VzbHkgd2l0aCBhIHNlcGFyYXRlCisgKiAiYWNjZXNzX29rKCkiIGNhbGwuCisgKgorICogVGhlICJ4eHhfZXJyb3IiIHZlcnNpb25zIHNldCB0aGUgdGhpcmQgYXJndW1lbnQgdG8gRUZBVUxUIGlmIGFuCisgKiBlcnJvciBvY2N1cnMsIGFuZCBsZWF2ZSBpdCB1bmNoYW5nZWQgb24gc3VjY2Vzcy4gIE5vdGUgdGhhdCB0aGVzZQorICogdmVyc2lvbnMgYXJlIHZvaWQgKGllLCBkb24ndCByZXR1cm4gYSB2YWx1ZSBhcyBzdWNoKS4KKyAqLworCitleHRlcm4gaW50IF9fZ2V0X3VzZXJfMSh2b2lkICopOworZXh0ZXJuIGludCBfX2dldF91c2VyXzIodm9pZCAqKTsKK2V4dGVybiBpbnQgX19nZXRfdXNlcl80KHZvaWQgKik7CitleHRlcm4gaW50IF9fZ2V0X3VzZXJfOCh2b2lkICopOworZXh0ZXJuIGludCBfX2dldF91c2VyX2JhZCh2b2lkKTsKKworI2RlZmluZSBfX2dldF91c2VyX3goX19yMixfX3AsX19lLF9fcyxfX2kuLi4pCQkJCVwKKwkgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCQlcCisJCV9fYXNtZXEoIiUwIiwgInIwIikgX19hc21lcSgiJTEiLCAicjIiKQkJCVwKKwkJImJsCV9fZ2V0X3VzZXJfIiAjX19zCQkJCVwKKwkJOiAiPSZyIiAoX19lKSwgIj1yIiAoX19yMikJCQkJXAorCQk6ICIwIiAoX19wKQkJCQkJCVwKKwkJOiBfX2ksICJjYyIpCisKKyNkZWZpbmUgZ2V0X3VzZXIoeCxwKQkJCQkJCQlcCisJKHsJCQkJCQkJCVwKKwkJY29uc3QgcmVnaXN0ZXIgdHlwZW9mKCoocCkpIF9fdXNlciAqX19wIGFzbSgicjAiKSA9IChwKTtcCisJCXJlZ2lzdGVyIHR5cGVvZigqKHApKSBfX3IyIGFzbSgicjIiKTsJCQlcCisJCXJlZ2lzdGVyIGludCBfX2UgYXNtKCJyMCIpOwkJCQlcCisJCXN3aXRjaCAoc2l6ZW9mKCooX19wKSkpIHsJCQkJXAorCQljYXNlIDE6CQkJCQkJCVwKKwkJCV9fZ2V0X3VzZXJfeChfX3IyLCBfX3AsIF9fZSwgMSwgImxyIik7CQlcCisJICAgICAgIAkJYnJlYWs7CQkJCQkJXAorCQljYXNlIDI6CQkJCQkJCVwKKwkJCV9fZ2V0X3VzZXJfeChfX3IyLCBfX3AsIF9fZSwgMiwgInIzIiwgImxyIik7CVwKKwkJCWJyZWFrOwkJCQkJCVwKKwkJY2FzZSA0OgkJCQkJCQlcCisJICAgICAgIAkJX19nZXRfdXNlcl94KF9fcjIsIF9fcCwgX19lLCA0LCAibHIiKTsJCVwKKwkJCWJyZWFrOwkJCQkJCVwKKwkJY2FzZSA4OgkJCQkJCQlcCisJCQlfX2dldF91c2VyX3goX19yMiwgX19wLCBfX2UsIDgsICJsciIpOwkJXAorCSAgICAgICAJCWJyZWFrOwkJCQkJCVwKKwkJZGVmYXVsdDogX19lID0gX19nZXRfdXNlcl9iYWQoKTsgYnJlYWs7CQkJXAorCQl9CQkJCQkJCVwKKwkJeCA9IF9fcjI7CQkJCQkJXAorCQlfX2U7CQkJCQkJCVwKKwl9KQorCisjZGVmaW5lIF9fZ2V0X3VzZXIoeCxwdHIpCQkJCQkJXAorKHsJCQkJCQkJCQlcCisJbG9uZyBfX2d1X2VyciA9IDA7CQkJCQkJXAorCV9fZ2V0X3VzZXJfZXJyKCh4KSwocHRyKSxfX2d1X2Vycik7CQkJCVwKKwlfX2d1X2VycjsJCQkJCQkJXAorfSkKKworI2RlZmluZSBfX2dldF91c2VyX2Vycm9yKHgscHRyLGVycikJCQkJCVwKKyh7CQkJCQkJCQkJXAorCV9fZ2V0X3VzZXJfZXJyKCh4KSwocHRyKSxlcnIpOwkJCQkJXAorCSh2b2lkKSAwOwkJCQkJCQlcCit9KQorCisjZGVmaW5lIF9fZ2V0X3VzZXJfZXJyKHgscHRyLGVycikJCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJdW5zaWduZWQgbG9uZyBfX2d1X2FkZHIgPSAodW5zaWduZWQgbG9uZykocHRyKTsJCQlcCisJdW5zaWduZWQgbG9uZyBfX2d1X3ZhbDsJCQkJCQlcCisJX19jaGtfdXNlcl9wdHIocHRyKTsJCQkJCQlcCisJc3dpdGNoIChzaXplb2YoKihwdHIpKSkgewkJCQkJXAorCWNhc2UgMToJX19nZXRfdXNlcl9hc21fYnl0ZShfX2d1X3ZhbCxfX2d1X2FkZHIsZXJyKTsJYnJlYWs7CVwKKwljYXNlIDI6CV9fZ2V0X3VzZXJfYXNtX2hhbGYoX19ndV92YWwsX19ndV9hZGRyLGVycik7CWJyZWFrOwlcCisJY2FzZSA0OglfX2dldF91c2VyX2FzbV93b3JkKF9fZ3VfdmFsLF9fZ3VfYWRkcixlcnIpOwlicmVhazsJXAorCWRlZmF1bHQ6IChfX2d1X3ZhbCkgPSBfX2dldF91c2VyX2JhZCgpOwkJCQlcCisJfQkJCQkJCQkJXAorCSh4KSA9IChfX3R5cGVvZl9fKCoocHRyKSkpX19ndV92YWw7CQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgX19nZXRfdXNlcl9hc21fYnl0ZSh4LGFkZHIsZXJyKQkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQlcCisJIjE6CWxkcmJ0CSUxLFslMl0sIzBcbiIJCQkJXAorCSIyOlxuIgkJCQkJCQlcCisJIgkuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iCQkJXAorCSIJLmFsaWduCTJcbiIJCQkJCVwKKwkiMzoJbW92CSUwLCAlM1xuIgkJCQlcCisJIgltb3YJJTEsICMwXG4iCQkJCVwKKwkiCWIJMmJcbiIJCQkJCVwKKwkiCS5wcmV2aW91c1xuIgkJCQkJXAorCSIJLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgkJCVwKKwkiCS5hbGlnbgkzXG4iCQkJCQlcCisJIgkubG9uZwkxYiwgM2JcbiIJCQkJXAorCSIJLnByZXZpb3VzIgkJCQkJXAorCTogIityIiAoZXJyKSwgIj0mciIgKHgpCQkJCQlcCisJOiAiciIgKGFkZHIpLCAiaSIgKC1FRkFVTFQpCQkJCVwKKwk6ICJjYyIpCisKKyNpZm5kZWYgX19BUk1FQl9fCisjZGVmaW5lIF9fZ2V0X3VzZXJfYXNtX2hhbGYoeCxfX2d1X2FkZHIsZXJyKQkJCVwKKyh7CQkJCQkJCQlcCisJdW5zaWduZWQgbG9uZyBfX2IxLCBfX2IyOwkJCQlcCisJX19nZXRfdXNlcl9hc21fYnl0ZShfX2IxLCBfX2d1X2FkZHIsIGVycik7CQlcCisJX19nZXRfdXNlcl9hc21fYnl0ZShfX2IyLCBfX2d1X2FkZHIgKyAxLCBlcnIpOwkJXAorCSh4KSA9IF9fYjEgfCAoX19iMiA8PCA4KTsJCQkJXAorfSkKKyNlbHNlCisjZGVmaW5lIF9fZ2V0X3VzZXJfYXNtX2hhbGYoeCxfX2d1X2FkZHIsZXJyKQkJCVwKKyh7CQkJCQkJCQlcCisJdW5zaWduZWQgbG9uZyBfX2IxLCBfX2IyOwkJCQlcCisJX19nZXRfdXNlcl9hc21fYnl0ZShfX2IxLCBfX2d1X2FkZHIsIGVycik7CQlcCisJX19nZXRfdXNlcl9hc21fYnl0ZShfX2IyLCBfX2d1X2FkZHIgKyAxLCBlcnIpOwkJXAorCSh4KSA9IChfX2IxIDw8IDgpIHwgX19iMjsJCQkJXAorfSkKKyNlbmRpZgorCisjZGVmaW5lIF9fZ2V0X3VzZXJfYXNtX3dvcmQoeCxhZGRyLGVycikJCQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJXAorCSIxOglsZHJ0CSUxLFslMl0sIzBcbiIJCQkJXAorCSIyOlxuIgkJCQkJCQlcCisJIgkuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iCQkJXAorCSIJLmFsaWduCTJcbiIJCQkJCVwKKwkiMzoJbW92CSUwLCAlM1xuIgkJCQlcCisJIgltb3YJJTEsICMwXG4iCQkJCVwKKwkiCWIJMmJcbiIJCQkJCVwKKwkiCS5wcmV2aW91c1xuIgkJCQkJXAorCSIJLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgkJCVwKKwkiCS5hbGlnbgkzXG4iCQkJCQlcCisJIgkubG9uZwkxYiwgM2JcbiIJCQkJXAorCSIJLnByZXZpb3VzIgkJCQkJXAorCTogIityIiAoZXJyKSwgIj0mciIgKHgpCQkJCQlcCisJOiAiciIgKGFkZHIpLCAiaSIgKC1FRkFVTFQpCQkJCVwKKwk6ICJjYyIpCisKK2V4dGVybiBpbnQgX19wdXRfdXNlcl8xKHZvaWQgKiwgdW5zaWduZWQgaW50KTsKK2V4dGVybiBpbnQgX19wdXRfdXNlcl8yKHZvaWQgKiwgdW5zaWduZWQgaW50KTsKK2V4dGVybiBpbnQgX19wdXRfdXNlcl80KHZvaWQgKiwgdW5zaWduZWQgaW50KTsKK2V4dGVybiBpbnQgX19wdXRfdXNlcl84KHZvaWQgKiwgdW5zaWduZWQgbG9uZyBsb25nKTsKK2V4dGVybiBpbnQgX19wdXRfdXNlcl9iYWQodm9pZCk7CisKKyNkZWZpbmUgX19wdXRfdXNlcl94KF9fcjIsX19wLF9fZSxfX3MpCQkJCQlcCisJICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJCQkJXAorCQlfX2FzbWVxKCIlMCIsICJyMCIpIF9fYXNtZXEoIiUyIiwgInIyIikJCQlcCisJCSJibAlfX3B1dF91c2VyXyIgI19fcwkJCQlcCisJCTogIj0mciIgKF9fZSkJCQkJCQlcCisJCTogIjAiIChfX3ApLCAiciIgKF9fcjIpCQkJCQlcCisJCTogImlwIiwgImxyIiwgImNjIikKKworI2RlZmluZSBwdXRfdXNlcih4LHApCQkJCQkJCVwKKwkoewkJCQkJCQkJXAorCQljb25zdCByZWdpc3RlciB0eXBlb2YoKihwKSkgX19yMiBhc20oInIyIikgPSAoeCk7CVwKKwkJY29uc3QgcmVnaXN0ZXIgdHlwZW9mKCoocCkpIF9fdXNlciAqX19wIGFzbSgicjAiKSA9IChwKTtcCisJCXJlZ2lzdGVyIGludCBfX2UgYXNtKCJyMCIpOwkJCQlcCisJCXN3aXRjaCAoc2l6ZW9mKCooX19wKSkpIHsJCQkJXAorCQljYXNlIDE6CQkJCQkJCVwKKwkJCV9fcHV0X3VzZXJfeChfX3IyLCBfX3AsIF9fZSwgMSk7CQlcCisJCQlicmVhazsJCQkJCQlcCisJCWNhc2UgMjoJCQkJCQkJXAorCQkJX19wdXRfdXNlcl94KF9fcjIsIF9fcCwgX19lLCAyKTsJCVwKKwkJCWJyZWFrOwkJCQkJCVwKKwkJY2FzZSA0OgkJCQkJCQlcCisJCQlfX3B1dF91c2VyX3goX19yMiwgX19wLCBfX2UsIDQpOwkJXAorCQkJYnJlYWs7CQkJCQkJXAorCQljYXNlIDg6CQkJCQkJCVwKKwkJCV9fcHV0X3VzZXJfeChfX3IyLCBfX3AsIF9fZSwgOCk7CQlcCisJCQlicmVhazsJCQkJCQlcCisJCWRlZmF1bHQ6IF9fZSA9IF9fcHV0X3VzZXJfYmFkKCk7IGJyZWFrOwkJCVwKKwkJfQkJCQkJCQlcCisJCV9fZTsJCQkJCQkJXAorCX0pCisKKyNkZWZpbmUgX19wdXRfdXNlcih4LHB0cikJCQkJCQlcCisoewkJCQkJCQkJCVwKKwlsb25nIF9fcHVfZXJyID0gMDsJCQkJCQlcCisJX19wdXRfdXNlcl9lcnIoKHgpLChwdHIpLF9fcHVfZXJyKTsJCQkJXAorCV9fcHVfZXJyOwkJCQkJCQlcCit9KQorCisjZGVmaW5lIF9fcHV0X3VzZXJfZXJyb3IoeCxwdHIsZXJyKQkJCQkJXAorKHsJCQkJCQkJCQlcCisJX19wdXRfdXNlcl9lcnIoKHgpLChwdHIpLGVycik7CQkJCQlcCisJKHZvaWQpIDA7CQkJCQkJCVwKK30pCisKKyNkZWZpbmUgX19wdXRfdXNlcl9lcnIoeCxwdHIsZXJyKQkJCQkJXAorZG8gewkJCQkJCQkJCVwKKwl1bnNpZ25lZCBsb25nIF9fcHVfYWRkciA9ICh1bnNpZ25lZCBsb25nKShwdHIpOwkJCVwKKwlfX3R5cGVvZl9fKCoocHRyKSkgX19wdV92YWwgPSAoeCk7CQkJCVwKKwlfX2Noa191c2VyX3B0cihwdHIpOwkJCQkJCVwKKwlzd2l0Y2ggKHNpemVvZigqKHB0cikpKSB7CQkJCQlcCisJY2FzZSAxOiBfX3B1dF91c2VyX2FzbV9ieXRlKF9fcHVfdmFsLF9fcHVfYWRkcixlcnIpOwlicmVhazsJXAorCWNhc2UgMjogX19wdXRfdXNlcl9hc21faGFsZihfX3B1X3ZhbCxfX3B1X2FkZHIsZXJyKTsJYnJlYWs7CVwKKwljYXNlIDQ6IF9fcHV0X3VzZXJfYXNtX3dvcmQoX19wdV92YWwsX19wdV9hZGRyLGVycik7CWJyZWFrOwlcCisJY2FzZSA4OglfX3B1dF91c2VyX2FzbV9kd29yZChfX3B1X3ZhbCxfX3B1X2FkZHIsZXJyKTsJYnJlYWs7CVwKKwlkZWZhdWx0OiBfX3B1dF91c2VyX2JhZCgpOwkJCQkJXAorCX0JCQkJCQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgX19wdXRfdXNlcl9hc21fYnl0ZSh4LF9fcHVfYWRkcixlcnIpCQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJXAorCSIxOglzdHJidAklMSxbJTJdLCMwXG4iCQkJCVwKKwkiMjpcbiIJCQkJCQkJXAorCSIJLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIgkJCVwKKwkiCS5hbGlnbgkyXG4iCQkJCQlcCisJIjM6CW1vdgklMCwgJTNcbiIJCQkJXAorCSIJYgkyYlxuIgkJCQkJXAorCSIJLnByZXZpb3VzXG4iCQkJCQlcCisJIgkuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCQkJXAorCSIJLmFsaWduCTNcbiIJCQkJCVwKKwkiCS5sb25nCTFiLCAzYlxuIgkJCQlcCisJIgkucHJldmlvdXMiCQkJCQlcCisJOiAiK3IiIChlcnIpCQkJCQkJXAorCTogInIiICh4KSwgInIiIChfX3B1X2FkZHIpLCAiaSIgKC1FRkFVTFQpCQlcCisJOiAiY2MiKQorCisjaWZuZGVmIF9fQVJNRUJfXworI2RlZmluZSBfX3B1dF91c2VyX2FzbV9oYWxmKHgsX19wdV9hZGRyLGVycikJCQlcCisoewkJCQkJCQkJXAorCXVuc2lnbmVkIGxvbmcgX190ZW1wID0gKHVuc2lnbmVkIGxvbmcpKHgpOwkJXAorCV9fcHV0X3VzZXJfYXNtX2J5dGUoX190ZW1wLCBfX3B1X2FkZHIsIGVycik7CQlcCisJX19wdXRfdXNlcl9hc21fYnl0ZShfX3RlbXAgPj4gOCwgX19wdV9hZGRyICsgMSwgZXJyKTsJXAorfSkKKyNlbHNlCisjZGVmaW5lIF9fcHV0X3VzZXJfYXNtX2hhbGYoeCxfX3B1X2FkZHIsZXJyKQkJCVwKKyh7CQkJCQkJCQlcCisJdW5zaWduZWQgbG9uZyBfX3RlbXAgPSAodW5zaWduZWQgbG9uZykoeCk7CQlcCisJX19wdXRfdXNlcl9hc21fYnl0ZShfX3RlbXAgPj4gOCwgX19wdV9hZGRyLCBlcnIpOwlcCisJX19wdXRfdXNlcl9hc21fYnl0ZShfX3RlbXAsIF9fcHVfYWRkciArIDEsIGVycik7CVwKK30pCisjZW5kaWYKKworI2RlZmluZSBfX3B1dF91c2VyX2FzbV93b3JkKHgsX19wdV9hZGRyLGVycikJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQlcCisJIjE6CXN0cnQJJTEsWyUyXSwjMFxuIgkJCQlcCisJIjI6XG4iCQkJCQkJCVwKKwkiCS5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIJCQlcCisJIgkuYWxpZ24JMlxuIgkJCQkJXAorCSIzOgltb3YJJTAsICUzXG4iCQkJCVwKKwkiCWIJMmJcbiIJCQkJCVwKKwkiCS5wcmV2aW91c1xuIgkJCQkJXAorCSIJLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgkJCVwKKwkiCS5hbGlnbgkzXG4iCQkJCQlcCisJIgkubG9uZwkxYiwgM2JcbiIJCQkJXAorCSIJLnByZXZpb3VzIgkJCQkJXAorCTogIityIiAoZXJyKQkJCQkJCVwKKwk6ICJyIiAoeCksICJyIiAoX19wdV9hZGRyKSwgImkiICgtRUZBVUxUKQkJXAorCTogImNjIikKKworI2lmbmRlZiBfX0FSTUVCX18KKyNkZWZpbmUJX19yZWdfb3BlcjAJIiVSMiIKKyNkZWZpbmUJX19yZWdfb3BlcjEJIiVRMiIKKyNlbHNlCisjZGVmaW5lCV9fcmVnX29wZXIwCSIlUTIiCisjZGVmaW5lCV9fcmVnX29wZXIxCSIlUjIiCisjZW5kaWYKKworI2RlZmluZSBfX3B1dF91c2VyX2FzbV9kd29yZCh4LF9fcHVfYWRkcixlcnIpCQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJXAorCSIxOglzdHJ0CSIgX19yZWdfb3BlcjEgIiwgWyUxXSwgIzRcbiIJCVwKKwkiMjoJc3RydAkiIF9fcmVnX29wZXIwICIsIFslMV0sICMwXG4iCQlcCisJIjM6XG4iCQkJCQkJCVwKKwkiCS5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIJCQlcCisJIgkuYWxpZ24JMlxuIgkJCQkJXAorCSI0Ogltb3YJJTAsICUzXG4iCQkJCVwKKwkiCWIJM2JcbiIJCQkJCVwKKwkiCS5wcmV2aW91c1xuIgkJCQkJXAorCSIJLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgkJCVwKKwkiCS5hbGlnbgkzXG4iCQkJCQlcCisJIgkubG9uZwkxYiwgNGJcbiIJCQkJXAorCSIJLmxvbmcJMmIsIDRiXG4iCQkJCVwKKwkiCS5wcmV2aW91cyIJCQkJCVwKKwk6ICIrciIgKGVyciksICIrciIgKF9fcHVfYWRkcikJCQkJXAorCTogInIiICh4KSwgImkiICgtRUZBVUxUKQkJCQlcCisJOiAiY2MiKQorCitleHRlcm4gdW5zaWduZWQgbG9uZyBfX2FyY2hfY29weV9mcm9tX3VzZXIodm9pZCAqdG8sIGNvbnN0IHZvaWQgX191c2VyICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19hcmNoX2NvcHlfdG9fdXNlcih2b2lkIF9fdXNlciAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxvbmcgbik7CitleHRlcm4gdW5zaWduZWQgbG9uZyBfX2FyY2hfY2xlYXJfdXNlcih2b2lkIF9fdXNlciAqYWRkciwgdW5zaWduZWQgbG9uZyBuKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fYXJjaF9zdHJuY3B5X2Zyb21fdXNlcihjaGFyICp0bywgY29uc3QgY2hhciBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGxvbmcgY291bnQpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19hcmNoX3N0cm5sZW5fdXNlcihjb25zdCBjaGFyIF9fdXNlciAqcywgbG9uZyBuKTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGNvcHlfZnJvbV91c2VyKHZvaWQgKnRvLCBjb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKQoreworCWlmIChhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGZyb20sIG4pKQorCQluID0gX19hcmNoX2NvcHlfZnJvbV91c2VyKHRvLCBmcm9tLCBuKTsKKwllbHNlIC8qIHNlY3VyaXR5IGhvbGUgLSBwbHVnIGl0ICovCisJCW1lbXplcm8odG8sIG4pOworCXJldHVybiBuOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19jb3B5X2Zyb21fdXNlcih2b2lkICp0bywgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGxvbmcgbikKK3sKKwlyZXR1cm4gX19hcmNoX2NvcHlfZnJvbV91c2VyKHRvLCBmcm9tLCBuKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGNvcHlfdG9fdXNlcih2b2lkIF9fdXNlciAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxvbmcgbikKK3sKKwlpZiAoYWNjZXNzX29rKFZFUklGWV9XUklURSwgdG8sIG4pKQorCQluID0gX19hcmNoX2NvcHlfdG9fdXNlcih0bywgZnJvbSwgbik7CisJcmV0dXJuIG47Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX2NvcHlfdG9fdXNlcih2b2lkIF9fdXNlciAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxvbmcgbikKK3sKKwlyZXR1cm4gX19hcmNoX2NvcHlfdG9fdXNlcih0bywgZnJvbSwgbik7Cit9CisKKyNkZWZpbmUgX19jb3B5X3RvX3VzZXJfaW5hdG9taWMgX19jb3B5X3RvX3VzZXIKKyNkZWZpbmUgX19jb3B5X2Zyb21fdXNlcl9pbmF0b21pYyBfX2NvcHlfZnJvbV91c2VyCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjbGVhcl91c2VyICh2b2lkIF9fdXNlciAqdG8sIHVuc2lnbmVkIGxvbmcgbikKK3sKKwlpZiAoYWNjZXNzX29rKFZFUklGWV9XUklURSwgdG8sIG4pKQorCQluID0gX19hcmNoX2NsZWFyX3VzZXIodG8sIG4pOworCXJldHVybiBuOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19jbGVhcl91c2VyICh2b2lkIF9fdXNlciAqdG8sIHVuc2lnbmVkIGxvbmcgbikKK3sKKwlyZXR1cm4gX19hcmNoX2NsZWFyX3VzZXIodG8sIG4pOworfQorCitzdGF0aWMgaW5saW5lIGxvbmcgc3RybmNweV9mcm9tX3VzZXIgKGNoYXIgKmRzdCwgY29uc3QgY2hhciBfX3VzZXIgKnNyYywgbG9uZyBjb3VudCkKK3sKKwlsb25nIHJlcyA9IC1FRkFVTFQ7CisJaWYgKGFjY2Vzc19vayhWRVJJRllfUkVBRCwgc3JjLCAxKSkKKwkJcmVzID0gX19hcmNoX3N0cm5jcHlfZnJvbV91c2VyKGRzdCwgc3JjLCBjb3VudCk7CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGlubGluZSBsb25nIF9fc3RybmNweV9mcm9tX3VzZXIgKGNoYXIgKmRzdCwgY29uc3QgY2hhciBfX3VzZXIgKnNyYywgbG9uZyBjb3VudCkKK3sKKwlyZXR1cm4gX19hcmNoX3N0cm5jcHlfZnJvbV91c2VyKGRzdCwgc3JjLCBjb3VudCk7Cit9CisKKyNkZWZpbmUgc3RybGVuX3VzZXIocykJc3Rybmxlbl91c2VyKHMsIH4wVUwgPj4gMSkKKworc3RhdGljIGlubGluZSBsb25nIHN0cm5sZW5fdXNlcihjb25zdCBjaGFyIF9fdXNlciAqcywgbG9uZyBuKQoreworCXVuc2lnbmVkIGxvbmcgcmVzID0gMDsKKworCWlmIChfX2FkZHJfb2socykpCisJCXJlcyA9IF9fYXJjaF9zdHJubGVuX3VzZXIocywgbik7CisKKwlyZXR1cm4gcmVzOworfQorCisjZW5kaWYgLyogX0FTTUFSTV9VQUNDRVNTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS91Y29udGV4dC5oIGIvaW5jbHVkZS9hc20tYXJtL3Vjb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg1MzEzMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS91Y29udGV4dC5oCkBAIC0wLDAgKzEsMTIgQEAKKyNpZm5kZWYgX0FTTUFSTV9VQ09OVEVYVF9ICisjZGVmaW5lIF9BU01BUk1fVUNPTlRFWFRfSAorCitzdHJ1Y3QgdWNvbnRleHQgeworCXVuc2lnbmVkIGxvbmcJICB1Y19mbGFnczsKKwlzdHJ1Y3QgdWNvbnRleHQgICp1Y19saW5rOworCXN0YWNrX3QJCSAgdWNfc3RhY2s7CisJc3RydWN0IHNpZ2NvbnRleHQgdWNfbWNvbnRleHQ7CisJc2lnc2V0X3QJICB1Y19zaWdtYXNrOwkvKiBtYXNrIGxhc3QgZm9yIGV4dGVuc2liaWxpdHkgKi8KK307CisKKyNlbmRpZiAvKiAhX0FTTUFSTV9VQ09OVEVYVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vdW5hbGlnbmVkLmggYi9pbmNsdWRlL2FzbS1hcm0vdW5hbGlnbmVkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIzOWMyZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS91bmFsaWduZWQuaApAQCAtMCwwICsxLDE5MSBAQAorI2lmbmRlZiBfX0FTTV9BUk1fVU5BTElHTkVEX0gKKyNkZWZpbmUgX19BU01fQVJNX1VOQUxJR05FRF9ICisKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKworZXh0ZXJuIGludCBfX2J1Z191bmFsaWduZWRfeCh2b2lkICpwdHIpOworCisvKgorICogV2hhdCBpcyB0aGUgbW9zdCBlZmZpY2llbnQgd2F5IG9mIGxvYWRpbmcvc3RvcmluZyBhbiB1bmFsaWduZWQgdmFsdWU/CisgKgorICogVGhhdCBpcyB0aGUgc3ViamVjdCBvZiB0aGlzIGZpbGUuICBFZmZpY2llbmN5IGhlcmUgaXMgZGVmaW5lZCBhcworICogbWluaW11bSBjb2RlIHNpemUgd2l0aCBtaW5pbXVtIHJlZ2lzdGVyIHVzYWdlIGZvciB0aGUgY29tbW9uIGNhc2VzLgorICogSXQgaXMgY3VycmVudGx5IG5vdCBiZWxpZXZlZCB0aGF0IGxvbmcgbG9uZ3MgYXJlIGNvbW1vbiwgc28gd2UKKyAqIHRyYWRlIGVmZmljaWVuY3kgZm9yIHRoZSBjaGFycywgc2hvcnRzIGFuZCBsb25ncyBhZ2FpbnN0IHRoZSBsb25nCisgKiBsb25ncy4KKyAqCisgKiBDdXJyZW50IHN0YXRzIHdpdGggZ2NjIDIuNy4yLjIgZm9yIHRoZXNlIGZ1bmN0aW9uczoKKyAqCisgKglwdHJzaXplCWdldDoJY29kZQlyZWdzCXB1dDoJY29kZQlyZWdzCisgKgkxCQkxCTEJCTEJMgorICoJMgkJMwkyCQkzCTIKKyAqCTQJCTcJMwkJNwkzCisgKgk4CQkyMAk2CQkxNgk2CisgKgorICogZ2NjIDIuOTUuMSBzZWVtcyB0byBjb2RlIGRpZmZlcmVudGx5OgorICoKKyAqCXB0cnNpemUJZ2V0Ogljb2RlCXJlZ3MJcHV0Ogljb2RlCXJlZ3MKKyAqCTEJCTEJMQkJMQkyCisgKgkyCQkzCTIJCTMJMgorICoJNAkJNwk0CQk3CTQKKyAqCTgJCTE5CTgJCTE1CTYKKyAqCisgKiB3aGljaCBtYXkgb3IgbWF5IG5vdCBiZSBtb3JlIGVmZmljaWVudCAoZGVwZW5kaW5nIHVwb24gd2hldGhlcgorICogeW91IGNhbiBhZmZvcmQgdGhlIGV4dHJhIHJlZ2lzdGVycykuICBIb3BlZnVsbHkgdGhlIGdjYyAyLjk1CisgKiBpcyBpbnRlbGlnZW50IGVub3VnaCB0byBkZWNpZGUgaWYgaXQgaXMgYmV0dGVyIHRvIHVzZSB0aGUKKyAqIGV4dHJhIHJlZ2lzdGVyLCBidXQgZXZpZGVuY2Ugc28gZmFyIHNlZW1zIHRvIHN1Z2dlc3Qgb3RoZXJ3aXNlLgorICoKKyAqIFVuZm9ydHVuYXRlbHksIGdjYyBpcyBub3QgYWJsZSB0byBvcHRpbWlzZSB0aGUgaGlnaCB3b3JkCisgKiBvdXQgb2YgbG9uZyBsb25nID4+IDMyLCBvciB0aGUgbG93IHdvcmQgZnJvbSBsb25nIGxvbmcgPDwgMzIKKyAqLworCisjZGVmaW5lIF9fZ2V0X3VuYWxpZ25lZF8yX2xlKF9fcCkJCQkJCVwKKwkoX19wWzBdIHwgX19wWzFdIDw8IDgpCisKKyNkZWZpbmUgX19nZXRfdW5hbGlnbmVkXzJfYmUoX19wKQkJCQkJXAorCShfX3BbMF0gPDwgOCB8IF9fcFsxXSkKKworI2RlZmluZSBfX2dldF91bmFsaWduZWRfNF9sZShfX3ApCQkJCQlcCisJKF9fcFswXSB8IF9fcFsxXSA8PCA4IHwgX19wWzJdIDw8IDE2IHwgX19wWzNdIDw8IDI0KQorCisjZGVmaW5lIF9fZ2V0X3VuYWxpZ25lZF80X2JlKF9fcCkJCQkJCVwKKwkoX19wWzBdIDw8IDI0IHwgX19wWzFdIDw8IDE2IHwgX19wWzJdIDw8IDggfCBfX3BbM10pCisKKyNkZWZpbmUgX19nZXRfdW5hbGlnbmVkX2xlKHB0cikJCQkJCVwKKwkoewkJCQkJCQlcCisJCV9fdHlwZW9mX18oKihwdHIpKSBfX3Y7CQkJCVwKKwkJX191OCAqX19wID0gKF9fdTggKikocHRyKTsJCQlcCisJCXN3aXRjaCAoc2l6ZW9mKCoocHRyKSkpIHsJCQlcCisJCWNhc2UgMToJX192ID0gKihwdHIpOwkJCWJyZWFrOwlcCisJCWNhc2UgMjogX192ID0gX19nZXRfdW5hbGlnbmVkXzJfbGUoX19wKTsJYnJlYWs7CVwKKwkJY2FzZSA0OiBfX3YgPSBfX2dldF91bmFsaWduZWRfNF9sZShfX3ApOwlicmVhazsJXAorCQljYXNlIDg6IHsJCQkJCVwKKwkJCQl1bnNpZ25lZCBpbnQgX192MSwgX192MjsJXAorCQkJCV9fdjIgPSBfX2dldF91bmFsaWduZWRfNF9sZSgoX19wKzQpKTsgXAorCQkJCV9fdjEgPSBfX2dldF91bmFsaWduZWRfNF9sZShfX3ApOwlcCisJCQkJX192ID0gKCh1bnNpZ25lZCBsb25nIGxvbmcpX192MiA8PCAzMiB8IF9fdjEpOwlcCisJCQl9CQkJCQlcCisJCQlicmVhazsJCQkJCVwKKwkJZGVmYXVsdDogX192ID0gX19idWdfdW5hbGlnbmVkX3goX19wKTsJYnJlYWs7CVwKKwkJfQkJCQkJCVwKKwkJX192OwkJCQkJCVwKKwl9KQorCisjZGVmaW5lIF9fZ2V0X3VuYWxpZ25lZF9iZShwdHIpCQkJCQlcCisJKHsJCQkJCQkJXAorCQlfX3R5cGVvZl9fKCoocHRyKSkgX192OwkJCQlcCisJCV9fdTggKl9fcCA9IChfX3U4ICopKHB0cik7CQkJXAorCQlzd2l0Y2ggKHNpemVvZigqKHB0cikpKSB7CQkJXAorCQljYXNlIDE6CV9fdiA9ICoocHRyKTsJCQlicmVhazsJXAorCQljYXNlIDI6IF9fdiA9IF9fZ2V0X3VuYWxpZ25lZF8yX2JlKF9fcCk7CWJyZWFrOwlcCisJCWNhc2UgNDogX192ID0gX19nZXRfdW5hbGlnbmVkXzRfYmUoX19wKTsJYnJlYWs7CVwKKwkJY2FzZSA4OiB7CQkJCQlcCisJCQkJdW5zaWduZWQgaW50IF9fdjEsIF9fdjI7CVwKKwkJCQlfX3YyID0gX19nZXRfdW5hbGlnbmVkXzRfYmUoX19wKTsgXAorCQkJCV9fdjEgPSBfX2dldF91bmFsaWduZWRfNF9iZSgoX19wKzQpKTsJXAorCQkJCV9fdiA9ICgodW5zaWduZWQgbG9uZyBsb25nKV9fdjIgPDwgMzIgfCBfX3YxKTsJXAorCQkJfQkJCQkJXAorCQkJYnJlYWs7CQkJCQlcCisJCWRlZmF1bHQ6IF9fdiA9IF9fYnVnX3VuYWxpZ25lZF94KF9fcCk7CWJyZWFrOwlcCisJCX0JCQkJCQlcCisJCV9fdjsJCQkJCQlcCisJfSkKKworCitzdGF0aWMgaW5saW5lIHZvaWQgX19wdXRfdW5hbGlnbmVkXzJfbGUoX191MzIgX192LCByZWdpc3RlciBfX3U4ICpfX3ApCit7CisJKl9fcCsrID0gX192OworCSpfX3ArKyA9IF9fdiA+PiA4OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19wdXRfdW5hbGlnbmVkXzJfYmUoX191MzIgX192LCByZWdpc3RlciBfX3U4ICpfX3ApCit7CisJKl9fcCsrID0gX192ID4+IDg7CisJKl9fcCsrID0gX192OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19wdXRfdW5hbGlnbmVkXzRfbGUoX191MzIgX192LCByZWdpc3RlciBfX3U4ICpfX3ApCit7CisJX19wdXRfdW5hbGlnbmVkXzJfbGUoX192ID4+IDE2LCBfX3AgKyAyKTsKKwlfX3B1dF91bmFsaWduZWRfMl9sZShfX3YsIF9fcCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3B1dF91bmFsaWduZWRfNF9iZShfX3UzMiBfX3YsIHJlZ2lzdGVyIF9fdTggKl9fcCkKK3sKKwlfX3B1dF91bmFsaWduZWRfMl9iZShfX3YgPj4gMTYsIF9fcCk7CisJX19wdXRfdW5hbGlnbmVkXzJfYmUoX192LCBfX3AgKyAyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fcHV0X3VuYWxpZ25lZF84X2xlKGNvbnN0IHVuc2lnbmVkIGxvbmcgbG9uZyBfX3YsIHJlZ2lzdGVyIF9fdTggKl9fcCkKK3sKKwkvKgorCSAqIHRyYWRlb2ZmOiA4IGJ5dGVzIG9mIHN0YWNrIGZvciBhbGwgdW5hbGlnbmVkIHB1dHMgKDIKKwkgKiBpbnN0cnVjdGlvbnMpLCBvciBhbiBleHRyYSByZWdpc3RlciBpbiB0aGUgbG9uZyBsb25nCisJICogY2FzZSAtIGdvIGZvciB0aGUgZXh0cmEgcmVnaXN0ZXIuCisJICovCisJX19wdXRfdW5hbGlnbmVkXzRfbGUoX192ID4+IDMyLCBfX3ArNCk7CisJX19wdXRfdW5hbGlnbmVkXzRfbGUoX192LCBfX3ApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19wdXRfdW5hbGlnbmVkXzhfYmUoY29uc3QgdW5zaWduZWQgbG9uZyBsb25nIF9fdiwgcmVnaXN0ZXIgX191OCAqX19wKQoreworCS8qCisJICogdHJhZGVvZmY6IDggYnl0ZXMgb2Ygc3RhY2sgZm9yIGFsbCB1bmFsaWduZWQgcHV0cyAoMgorCSAqIGluc3RydWN0aW9ucyksIG9yIGFuIGV4dHJhIHJlZ2lzdGVyIGluIHRoZSBsb25nIGxvbmcKKwkgKiBjYXNlIC0gZ28gZm9yIHRoZSBleHRyYSByZWdpc3Rlci4KKwkgKi8KKwlfX3B1dF91bmFsaWduZWRfNF9iZShfX3YgPj4gMzIsIF9fcCk7CisJX19wdXRfdW5hbGlnbmVkXzRfYmUoX192LCBfX3ArNCk7Cit9CisKKy8qCisgKiBUcnkgdG8gc3RvcmUgYW4gdW5hbGlnbmVkIHZhbHVlIGFzIGVmZmljaWVudGx5IGFzIHBvc3NpYmxlLgorICovCisjZGVmaW5lIF9fcHV0X3VuYWxpZ25lZF9sZSh2YWwscHRyKQkJCQkJXAorCSh7CQkJCQkJCVwKKwkJc3dpdGNoIChzaXplb2YoKihwdHIpKSkgewkJCVwKKwkJY2FzZSAxOgkJCQkJCVwKKwkJCSoocHRyKSA9ICh2YWwpOwkJCQlcCisJCQlicmVhazsJCQkJCVwKKwkJY2FzZSAyOiBfX3B1dF91bmFsaWduZWRfMl9sZSgodmFsKSwoX191OCAqKShwdHIpKTsJXAorCQkJYnJlYWs7CQkJCQlcCisJCWNhc2UgNDoJX19wdXRfdW5hbGlnbmVkXzRfbGUoKHZhbCksKF9fdTggKikocHRyKSk7CVwKKwkJCWJyZWFrOwkJCQkJXAorCQljYXNlIDg6CV9fcHV0X3VuYWxpZ25lZF84X2xlKCh2YWwpLChfX3U4ICopKHB0cikpOyBcCisJCQlicmVhazsJCQkJCVwKKwkJZGVmYXVsdDogX19idWdfdW5hbGlnbmVkX3gocHRyKTsJCVwKKwkJCWJyZWFrOwkJCQkJXAorCQl9CQkJCQkJXAorCQkodm9pZCkgMDsJCQkJCVwKKwl9KQorCisjZGVmaW5lIF9fcHV0X3VuYWxpZ25lZF9iZSh2YWwscHRyKQkJCQkJXAorCSh7CQkJCQkJCVwKKwkJc3dpdGNoIChzaXplb2YoKihwdHIpKSkgewkJCVwKKwkJY2FzZSAxOgkJCQkJCVwKKwkJCSoocHRyKSA9ICh2YWwpOwkJCQlcCisJCQlicmVhazsJCQkJCVwKKwkJY2FzZSAyOiBfX3B1dF91bmFsaWduZWRfMl9iZSgodmFsKSwoX191OCAqKShwdHIpKTsJXAorCQkJYnJlYWs7CQkJCQlcCisJCWNhc2UgNDoJX19wdXRfdW5hbGlnbmVkXzRfYmUoKHZhbCksKF9fdTggKikocHRyKSk7CVwKKwkJCWJyZWFrOwkJCQkJXAorCQljYXNlIDg6CV9fcHV0X3VuYWxpZ25lZF84X2JlKCh2YWwpLChfX3U4ICopKHB0cikpOyBcCisJCQlicmVhazsJCQkJCVwKKwkJZGVmYXVsdDogX19idWdfdW5hbGlnbmVkX3gocHRyKTsJCVwKKwkJCWJyZWFrOwkJCQkJXAorCQl9CQkJCQkJXAorCQkodm9pZCkgMDsJCQkJCVwKKwl9KQorCisvKgorICogU2VsZWN0IGVuZGlhbm5lc3MKKyAqLworI2lmbmRlZiBfX0FSTUVCX18KKyNkZWZpbmUgZ2V0X3VuYWxpZ25lZAlfX2dldF91bmFsaWduZWRfbGUKKyNkZWZpbmUgcHV0X3VuYWxpZ25lZAlfX3B1dF91bmFsaWduZWRfbGUKKyNlbHNlCisjZGVmaW5lIGdldF91bmFsaWduZWQJX19nZXRfdW5hbGlnbmVkX2JlCisjZGVmaW5lIHB1dF91bmFsaWduZWQJX19wdXRfdW5hbGlnbmVkX2JlCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1hcm0vdW5pc3RkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE5ZWMwOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS91bmlzdGQuaApAQCAtMCwwICsxLDU1OCBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vdW5pc3RkLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDUgUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBQbGVhc2UgZm9yd2FyZCBfYWxsXyBjaGFuZ2VzIHRvIHRoaXMgZmlsZSB0byBybWtAYXJtLmxpbnV4Lm9yZy51aywKKyAqIG5vIG1hdHRlciB3aGF0IHRoZSBjaGFuZ2UgaXMuICBUaGFua3MhCisgKi8KKyNpZm5kZWYgX19BU01fQVJNX1VOSVNURF9ICisjZGVmaW5lIF9fQVNNX0FSTV9VTklTVERfSAorCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorCisjaWYgZGVmaW5lZChfX3RodW1iX18pCisjZGVmaW5lIF9fTlJfU1lTQ0FMTF9CQVNFCTAKKyNlbHNlCisjZGVmaW5lIF9fTlJfU1lTQ0FMTF9CQVNFCTB4OTAwMDAwCisjZW5kaWYKKworLyoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgc3lzdGVtIGNhbGwgbnVtYmVycy4KKyAqLworCisjZGVmaW5lIF9fTlJfcmVzdGFydF9zeXNjYWxsCQkoX19OUl9TWVNDQUxMX0JBU0UrICAwKQorI2RlZmluZSBfX05SX2V4aXQJCQkoX19OUl9TWVNDQUxMX0JBU0UrICAxKQorI2RlZmluZSBfX05SX2ZvcmsJCQkoX19OUl9TWVNDQUxMX0JBU0UrICAyKQorI2RlZmluZSBfX05SX3JlYWQJCQkoX19OUl9TWVNDQUxMX0JBU0UrICAzKQorI2RlZmluZSBfX05SX3dyaXRlCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyAgNCkKKyNkZWZpbmUgX19OUl9vcGVuCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyAgNSkKKyNkZWZpbmUgX19OUl9jbG9zZQkJCShfX05SX1NZU0NBTExfQkFTRSsgIDYpCisJCQkJCS8qIDcgd2FzIHN5c193YWl0cGlkICovCisjZGVmaW5lIF9fTlJfY3JlYXQJCQkoX19OUl9TWVNDQUxMX0JBU0UrICA4KQorI2RlZmluZSBfX05SX2xpbmsJCQkoX19OUl9TWVNDQUxMX0JBU0UrICA5KQorI2RlZmluZSBfX05SX3VubGluawkJCShfX05SX1NZU0NBTExfQkFTRSsgMTApCisjZGVmaW5lIF9fTlJfZXhlY3ZlCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyAxMSkKKyNkZWZpbmUgX19OUl9jaGRpcgkJCShfX05SX1NZU0NBTExfQkFTRSsgMTIpCisjZGVmaW5lIF9fTlJfdGltZQkJCShfX05SX1NZU0NBTExfQkFTRSsgMTMpCisjZGVmaW5lIF9fTlJfbWtub2QJCQkoX19OUl9TWVNDQUxMX0JBU0UrIDE0KQorI2RlZmluZSBfX05SX2NobW9kCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyAxNSkKKyNkZWZpbmUgX19OUl9sY2hvd24JCQkoX19OUl9TWVNDQUxMX0JBU0UrIDE2KQorCQkJCQkvKiAxNyB3YXMgc3lzX2JyZWFrICovCisJCQkJCS8qIDE4IHdhcyBzeXNfc3RhdCAqLworI2RlZmluZSBfX05SX2xzZWVrCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyAxOSkKKyNkZWZpbmUgX19OUl9nZXRwaWQJCQkoX19OUl9TWVNDQUxMX0JBU0UrIDIwKQorI2RlZmluZSBfX05SX21vdW50CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyAyMSkKKyNkZWZpbmUgX19OUl91bW91bnQJCQkoX19OUl9TWVNDQUxMX0JBU0UrIDIyKQorI2RlZmluZSBfX05SX3NldHVpZAkJCShfX05SX1NZU0NBTExfQkFTRSsgMjMpCisjZGVmaW5lIF9fTlJfZ2V0dWlkCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyAyNCkKKyNkZWZpbmUgX19OUl9zdGltZQkJCShfX05SX1NZU0NBTExfQkFTRSsgMjUpCisjZGVmaW5lIF9fTlJfcHRyYWNlCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyAyNikKKyNkZWZpbmUgX19OUl9hbGFybQkJCShfX05SX1NZU0NBTExfQkFTRSsgMjcpCisJCQkJCS8qIDI4IHdhcyBzeXNfZnN0YXQgKi8KKyNkZWZpbmUgX19OUl9wYXVzZQkJCShfX05SX1NZU0NBTExfQkFTRSsgMjkpCisjZGVmaW5lIF9fTlJfdXRpbWUJCQkoX19OUl9TWVNDQUxMX0JBU0UrIDMwKQorCQkJCQkvKiAzMSB3YXMgc3lzX3N0dHkgKi8KKwkJCQkJLyogMzIgd2FzIHN5c19ndHR5ICovCisjZGVmaW5lIF9fTlJfYWNjZXNzCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyAzMykKKyNkZWZpbmUgX19OUl9uaWNlCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyAzNCkKKwkJCQkJLyogMzUgd2FzIHN5c19mdGltZSAqLworI2RlZmluZSBfX05SX3N5bmMJCQkoX19OUl9TWVNDQUxMX0JBU0UrIDM2KQorI2RlZmluZSBfX05SX2tpbGwJCQkoX19OUl9TWVNDQUxMX0JBU0UrIDM3KQorI2RlZmluZSBfX05SX3JlbmFtZQkJCShfX05SX1NZU0NBTExfQkFTRSsgMzgpCisjZGVmaW5lIF9fTlJfbWtkaXIJCQkoX19OUl9TWVNDQUxMX0JBU0UrIDM5KQorI2RlZmluZSBfX05SX3JtZGlyCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyA0MCkKKyNkZWZpbmUgX19OUl9kdXAJCQkoX19OUl9TWVNDQUxMX0JBU0UrIDQxKQorI2RlZmluZSBfX05SX3BpcGUJCQkoX19OUl9TWVNDQUxMX0JBU0UrIDQyKQorI2RlZmluZSBfX05SX3RpbWVzCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyA0MykKKwkJCQkJLyogNDQgd2FzIHN5c19wcm9mICovCisjZGVmaW5lIF9fTlJfYnJrCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyA0NSkKKyNkZWZpbmUgX19OUl9zZXRnaWQJCQkoX19OUl9TWVNDQUxMX0JBU0UrIDQ2KQorI2RlZmluZSBfX05SX2dldGdpZAkJCShfX05SX1NZU0NBTExfQkFTRSsgNDcpCisJCQkJCS8qIDQ4IHdhcyBzeXNfc2lnbmFsICovCisjZGVmaW5lIF9fTlJfZ2V0ZXVpZAkJCShfX05SX1NZU0NBTExfQkFTRSsgNDkpCisjZGVmaW5lIF9fTlJfZ2V0ZWdpZAkJCShfX05SX1NZU0NBTExfQkFTRSsgNTApCisjZGVmaW5lIF9fTlJfYWNjdAkJCShfX05SX1NZU0NBTExfQkFTRSsgNTEpCisjZGVmaW5lIF9fTlJfdW1vdW50MgkJCShfX05SX1NZU0NBTExfQkFTRSsgNTIpCisJCQkJCS8qIDUzIHdhcyBzeXNfbG9jayAqLworI2RlZmluZSBfX05SX2lvY3RsCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyA1NCkKKyNkZWZpbmUgX19OUl9mY250bAkJCShfX05SX1NZU0NBTExfQkFTRSsgNTUpCisJCQkJCS8qIDU2IHdhcyBzeXNfbXB4ICovCisjZGVmaW5lIF9fTlJfc2V0cGdpZAkJCShfX05SX1NZU0NBTExfQkFTRSsgNTcpCisJCQkJCS8qIDU4IHdhcyBzeXNfdWxpbWl0ICovCisJCQkJCS8qIDU5IHdhcyBzeXNfb2xkdW5hbWUgKi8KKyNkZWZpbmUgX19OUl91bWFzawkJCShfX05SX1NZU0NBTExfQkFTRSsgNjApCisjZGVmaW5lIF9fTlJfY2hyb290CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyA2MSkKKyNkZWZpbmUgX19OUl91c3RhdAkJCShfX05SX1NZU0NBTExfQkFTRSsgNjIpCisjZGVmaW5lIF9fTlJfZHVwMgkJCShfX05SX1NZU0NBTExfQkFTRSsgNjMpCisjZGVmaW5lIF9fTlJfZ2V0cHBpZAkJCShfX05SX1NZU0NBTExfQkFTRSsgNjQpCisjZGVmaW5lIF9fTlJfZ2V0cGdycAkJCShfX05SX1NZU0NBTExfQkFTRSsgNjUpCisjZGVmaW5lIF9fTlJfc2V0c2lkCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyA2NikKKyNkZWZpbmUgX19OUl9zaWdhY3Rpb24JCQkoX19OUl9TWVNDQUxMX0JBU0UrIDY3KQorCQkJCQkvKiA2OCB3YXMgc3lzX3NnZXRtYXNrICovCisJCQkJCS8qIDY5IHdhcyBzeXNfc3NldG1hc2sgKi8KKyNkZWZpbmUgX19OUl9zZXRyZXVpZAkJCShfX05SX1NZU0NBTExfQkFTRSsgNzApCisjZGVmaW5lIF9fTlJfc2V0cmVnaWQJCQkoX19OUl9TWVNDQUxMX0JBU0UrIDcxKQorI2RlZmluZSBfX05SX3NpZ3N1c3BlbmQJCQkoX19OUl9TWVNDQUxMX0JBU0UrIDcyKQorI2RlZmluZSBfX05SX3NpZ3BlbmRpbmcJCQkoX19OUl9TWVNDQUxMX0JBU0UrIDczKQorI2RlZmluZSBfX05SX3NldGhvc3RuYW1lCQkoX19OUl9TWVNDQUxMX0JBU0UrIDc0KQorI2RlZmluZSBfX05SX3NldHJsaW1pdAkJCShfX05SX1NZU0NBTExfQkFTRSsgNzUpCisjZGVmaW5lIF9fTlJfZ2V0cmxpbWl0CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyA3NikJLyogQmFjayBjb21wYXQgMkdCIGxpbWl0ZWQgcmxpbWl0ICovCisjZGVmaW5lIF9fTlJfZ2V0cnVzYWdlCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyA3NykKKyNkZWZpbmUgX19OUl9nZXR0aW1lb2ZkYXkJCShfX05SX1NZU0NBTExfQkFTRSsgNzgpCisjZGVmaW5lIF9fTlJfc2V0dGltZW9mZGF5CQkoX19OUl9TWVNDQUxMX0JBU0UrIDc5KQorI2RlZmluZSBfX05SX2dldGdyb3VwcwkJCShfX05SX1NZU0NBTExfQkFTRSsgODApCisjZGVmaW5lIF9fTlJfc2V0Z3JvdXBzCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyA4MSkKKyNkZWZpbmUgX19OUl9zZWxlY3QJCQkoX19OUl9TWVNDQUxMX0JBU0UrIDgyKQorI2RlZmluZSBfX05SX3N5bWxpbmsJCQkoX19OUl9TWVNDQUxMX0JBU0UrIDgzKQorCQkJCQkvKiA4NCB3YXMgc3lzX2xzdGF0ICovCisjZGVmaW5lIF9fTlJfcmVhZGxpbmsJCQkoX19OUl9TWVNDQUxMX0JBU0UrIDg1KQorI2RlZmluZSBfX05SX3VzZWxpYgkJCShfX05SX1NZU0NBTExfQkFTRSsgODYpCisjZGVmaW5lIF9fTlJfc3dhcG9uCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyA4NykKKyNkZWZpbmUgX19OUl9yZWJvb3QJCQkoX19OUl9TWVNDQUxMX0JBU0UrIDg4KQorI2RlZmluZSBfX05SX3JlYWRkaXIJCQkoX19OUl9TWVNDQUxMX0JBU0UrIDg5KQorI2RlZmluZSBfX05SX21tYXAJCQkoX19OUl9TWVNDQUxMX0JBU0UrIDkwKQorI2RlZmluZSBfX05SX211bm1hcAkJCShfX05SX1NZU0NBTExfQkFTRSsgOTEpCisjZGVmaW5lIF9fTlJfdHJ1bmNhdGUJCQkoX19OUl9TWVNDQUxMX0JBU0UrIDkyKQorI2RlZmluZSBfX05SX2Z0cnVuY2F0ZQkJCShfX05SX1NZU0NBTExfQkFTRSsgOTMpCisjZGVmaW5lIF9fTlJfZmNobW9kCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyA5NCkKKyNkZWZpbmUgX19OUl9mY2hvd24JCQkoX19OUl9TWVNDQUxMX0JBU0UrIDk1KQorI2RlZmluZSBfX05SX2dldHByaW9yaXR5CQkoX19OUl9TWVNDQUxMX0JBU0UrIDk2KQorI2RlZmluZSBfX05SX3NldHByaW9yaXR5CQkoX19OUl9TWVNDQUxMX0JBU0UrIDk3KQorCQkJCQkvKiA5OCB3YXMgc3lzX3Byb2ZpbCAqLworI2RlZmluZSBfX05SX3N0YXRmcwkJCShfX05SX1NZU0NBTExfQkFTRSsgOTkpCisjZGVmaW5lIF9fTlJfZnN0YXRmcwkJCShfX05SX1NZU0NBTExfQkFTRSsxMDApCisJCQkJCS8qIDEwMSB3YXMgc3lzX2lvcGVybSAqLworI2RlZmluZSBfX05SX3NvY2tldGNhbGwJCQkoX19OUl9TWVNDQUxMX0JBU0UrMTAyKQorI2RlZmluZSBfX05SX3N5c2xvZwkJCShfX05SX1NZU0NBTExfQkFTRSsxMDMpCisjZGVmaW5lIF9fTlJfc2V0aXRpbWVyCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzEwNCkKKyNkZWZpbmUgX19OUl9nZXRpdGltZXIJCQkoX19OUl9TWVNDQUxMX0JBU0UrMTA1KQorI2RlZmluZSBfX05SX3N0YXQJCQkoX19OUl9TWVNDQUxMX0JBU0UrMTA2KQorI2RlZmluZSBfX05SX2xzdGF0CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzEwNykKKyNkZWZpbmUgX19OUl9mc3RhdAkJCShfX05SX1NZU0NBTExfQkFTRSsxMDgpCisJCQkJCS8qIDEwOSB3YXMgc3lzX3VuYW1lICovCisJCQkJCS8qIDExMCB3YXMgc3lzX2lvcGwgKi8KKyNkZWZpbmUgX19OUl92aGFuZ3VwCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzExMSkKKwkJCQkJLyogMTEyIHdhcyBzeXNfaWRsZSAqLworI2RlZmluZSBfX05SX3N5c2NhbGwJCQkoX19OUl9TWVNDQUxMX0JBU0UrMTEzKSAvKiBzeXNjYWxsIHRvIGNhbGwgYSBzeXNjYWxsISAqLworI2RlZmluZSBfX05SX3dhaXQ0CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzExNCkKKyNkZWZpbmUgX19OUl9zd2Fwb2ZmCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzExNSkKKyNkZWZpbmUgX19OUl9zeXNpbmZvCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzExNikKKyNkZWZpbmUgX19OUl9pcGMJCQkoX19OUl9TWVNDQUxMX0JBU0UrMTE3KQorI2RlZmluZSBfX05SX2ZzeW5jCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzExOCkKKyNkZWZpbmUgX19OUl9zaWdyZXR1cm4JCQkoX19OUl9TWVNDQUxMX0JBU0UrMTE5KQorI2RlZmluZSBfX05SX2Nsb25lCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzEyMCkKKyNkZWZpbmUgX19OUl9zZXRkb21haW5uYW1lCQkoX19OUl9TWVNDQUxMX0JBU0UrMTIxKQorI2RlZmluZSBfX05SX3VuYW1lCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzEyMikKKwkJCQkJLyogMTIzIHdhcyBzeXNfbW9kaWZ5X2xkdCAqLworI2RlZmluZSBfX05SX2FkanRpbWV4CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzEyNCkKKyNkZWZpbmUgX19OUl9tcHJvdGVjdAkJCShfX05SX1NZU0NBTExfQkFTRSsxMjUpCisjZGVmaW5lIF9fTlJfc2lncHJvY21hc2sJCShfX05SX1NZU0NBTExfQkFTRSsxMjYpCisJCQkJCS8qIDEyNyB3YXMgc3lzX2NyZWF0ZV9tb2R1bGUgKi8KKyNkZWZpbmUgX19OUl9pbml0X21vZHVsZQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzEyOCkKKyNkZWZpbmUgX19OUl9kZWxldGVfbW9kdWxlCQkoX19OUl9TWVNDQUxMX0JBU0UrMTI5KQorCQkJCQkvKiAxMzAgd2FzIHN5c19nZXRfa2VybmVsX3N5bXMgKi8KKyNkZWZpbmUgX19OUl9xdW90YWN0bAkJCShfX05SX1NZU0NBTExfQkFTRSsxMzEpCisjZGVmaW5lIF9fTlJfZ2V0cGdpZAkJCShfX05SX1NZU0NBTExfQkFTRSsxMzIpCisjZGVmaW5lIF9fTlJfZmNoZGlyCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzEzMykKKyNkZWZpbmUgX19OUl9iZGZsdXNoCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzEzNCkKKyNkZWZpbmUgX19OUl9zeXNmcwkJCShfX05SX1NZU0NBTExfQkFTRSsxMzUpCisjZGVmaW5lIF9fTlJfcGVyc29uYWxpdHkJCShfX05SX1NZU0NBTExfQkFTRSsxMzYpCisJCQkJCS8qIDEzNyB3YXMgc3lzX2Fmc19zeXNjYWxsICovCisjZGVmaW5lIF9fTlJfc2V0ZnN1aWQJCQkoX19OUl9TWVNDQUxMX0JBU0UrMTM4KQorI2RlZmluZSBfX05SX3NldGZzZ2lkCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzEzOSkKKyNkZWZpbmUgX19OUl9fbGxzZWVrCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzE0MCkKKyNkZWZpbmUgX19OUl9nZXRkZW50cwkJCShfX05SX1NZU0NBTExfQkFTRSsxNDEpCisjZGVmaW5lIF9fTlJfX25ld3NlbGVjdAkJCShfX05SX1NZU0NBTExfQkFTRSsxNDIpCisjZGVmaW5lIF9fTlJfZmxvY2sJCQkoX19OUl9TWVNDQUxMX0JBU0UrMTQzKQorI2RlZmluZSBfX05SX21zeW5jCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzE0NCkKKyNkZWZpbmUgX19OUl9yZWFkdgkJCShfX05SX1NZU0NBTExfQkFTRSsxNDUpCisjZGVmaW5lIF9fTlJfd3JpdGV2CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzE0NikKKyNkZWZpbmUgX19OUl9nZXRzaWQJCQkoX19OUl9TWVNDQUxMX0JBU0UrMTQ3KQorI2RlZmluZSBfX05SX2ZkYXRhc3luYwkJCShfX05SX1NZU0NBTExfQkFTRSsxNDgpCisjZGVmaW5lIF9fTlJfX3N5c2N0bAkJCShfX05SX1NZU0NBTExfQkFTRSsxNDkpCisjZGVmaW5lIF9fTlJfbWxvY2sJCQkoX19OUl9TWVNDQUxMX0JBU0UrMTUwKQorI2RlZmluZSBfX05SX211bmxvY2sJCQkoX19OUl9TWVNDQUxMX0JBU0UrMTUxKQorI2RlZmluZSBfX05SX21sb2NrYWxsCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzE1MikKKyNkZWZpbmUgX19OUl9tdW5sb2NrYWxsCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzE1MykKKyNkZWZpbmUgX19OUl9zY2hlZF9zZXRwYXJhbQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzE1NCkKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRwYXJhbQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzE1NSkKKyNkZWZpbmUgX19OUl9zY2hlZF9zZXRzY2hlZHVsZXIJCShfX05SX1NZU0NBTExfQkFTRSsxNTYpCisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0c2NoZWR1bGVyCQkoX19OUl9TWVNDQUxMX0JBU0UrMTU3KQorI2RlZmluZSBfX05SX3NjaGVkX3lpZWxkCQkoX19OUl9TWVNDQUxMX0JBU0UrMTU4KQorI2RlZmluZSBfX05SX3NjaGVkX2dldF9wcmlvcml0eV9tYXgJKF9fTlJfU1lTQ0FMTF9CQVNFKzE1OSkKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWluCShfX05SX1NZU0NBTExfQkFTRSsxNjApCisjZGVmaW5lIF9fTlJfc2NoZWRfcnJfZ2V0X2ludGVydmFsCShfX05SX1NZU0NBTExfQkFTRSsxNjEpCisjZGVmaW5lIF9fTlJfbmFub3NsZWVwCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzE2MikKKyNkZWZpbmUgX19OUl9tcmVtYXAJCQkoX19OUl9TWVNDQUxMX0JBU0UrMTYzKQorI2RlZmluZSBfX05SX3NldHJlc3VpZAkJCShfX05SX1NZU0NBTExfQkFTRSsxNjQpCisjZGVmaW5lIF9fTlJfZ2V0cmVzdWlkCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzE2NSkKKwkJCQkJLyogMTY2IHdhcyBzeXNfdm04NiAqLworCQkJCQkvKiAxNjcgd2FzIHN5c19xdWVyeV9tb2R1bGUgKi8KKyNkZWZpbmUgX19OUl9wb2xsCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzE2OCkKKyNkZWZpbmUgX19OUl9uZnNzZXJ2Y3RsCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzE2OSkKKyNkZWZpbmUgX19OUl9zZXRyZXNnaWQJCQkoX19OUl9TWVNDQUxMX0JBU0UrMTcwKQorI2RlZmluZSBfX05SX2dldHJlc2dpZAkJCShfX05SX1NZU0NBTExfQkFTRSsxNzEpCisjZGVmaW5lIF9fTlJfcHJjdGwJCQkoX19OUl9TWVNDQUxMX0JBU0UrMTcyKQorI2RlZmluZSBfX05SX3J0X3NpZ3JldHVybgkJKF9fTlJfU1lTQ0FMTF9CQVNFKzE3MykKKyNkZWZpbmUgX19OUl9ydF9zaWdhY3Rpb24JCShfX05SX1NZU0NBTExfQkFTRSsxNzQpCisjZGVmaW5lIF9fTlJfcnRfc2lncHJvY21hc2sJCShfX05SX1NZU0NBTExfQkFTRSsxNzUpCisjZGVmaW5lIF9fTlJfcnRfc2lncGVuZGluZwkJKF9fTlJfU1lTQ0FMTF9CQVNFKzE3NikKKyNkZWZpbmUgX19OUl9ydF9zaWd0aW1lZHdhaXQJCShfX05SX1NZU0NBTExfQkFTRSsxNzcpCisjZGVmaW5lIF9fTlJfcnRfc2lncXVldWVpbmZvCQkoX19OUl9TWVNDQUxMX0JBU0UrMTc4KQorI2RlZmluZSBfX05SX3J0X3NpZ3N1c3BlbmQJCShfX05SX1NZU0NBTExfQkFTRSsxNzkpCisjZGVmaW5lIF9fTlJfcHJlYWQ2NAkJCShfX05SX1NZU0NBTExfQkFTRSsxODApCisjZGVmaW5lIF9fTlJfcHdyaXRlNjQJCQkoX19OUl9TWVNDQUxMX0JBU0UrMTgxKQorI2RlZmluZSBfX05SX2Nob3duCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzE4MikKKyNkZWZpbmUgX19OUl9nZXRjd2QJCQkoX19OUl9TWVNDQUxMX0JBU0UrMTgzKQorI2RlZmluZSBfX05SX2NhcGdldAkJCShfX05SX1NZU0NBTExfQkFTRSsxODQpCisjZGVmaW5lIF9fTlJfY2Fwc2V0CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzE4NSkKKyNkZWZpbmUgX19OUl9zaWdhbHRzdGFjawkJKF9fTlJfU1lTQ0FMTF9CQVNFKzE4NikKKyNkZWZpbmUgX19OUl9zZW5kZmlsZQkJCShfX05SX1NZU0NBTExfQkFTRSsxODcpCisJCQkJCS8qIDE4OCByZXNlcnZlZCAqLworCQkJCQkvKiAxODkgcmVzZXJ2ZWQgKi8KKyNkZWZpbmUgX19OUl92Zm9yawkJCShfX05SX1NZU0NBTExfQkFTRSsxOTApCisjZGVmaW5lIF9fTlJfdWdldHJsaW1pdAkJCShfX05SX1NZU0NBTExfQkFTRSsxOTEpCS8qIFN1UyBjb21wbGlhbnQgZ2V0cmxpbWl0ICovCisjZGVmaW5lIF9fTlJfbW1hcDIJCQkoX19OUl9TWVNDQUxMX0JBU0UrMTkyKQorI2RlZmluZSBfX05SX3RydW5jYXRlNjQJCQkoX19OUl9TWVNDQUxMX0JBU0UrMTkzKQorI2RlZmluZSBfX05SX2Z0cnVuY2F0ZTY0CQkoX19OUl9TWVNDQUxMX0JBU0UrMTk0KQorI2RlZmluZSBfX05SX3N0YXQ2NAkJCShfX05SX1NZU0NBTExfQkFTRSsxOTUpCisjZGVmaW5lIF9fTlJfbHN0YXQ2NAkJCShfX05SX1NZU0NBTExfQkFTRSsxOTYpCisjZGVmaW5lIF9fTlJfZnN0YXQ2NAkJCShfX05SX1NZU0NBTExfQkFTRSsxOTcpCisjZGVmaW5lIF9fTlJfbGNob3duMzIJCQkoX19OUl9TWVNDQUxMX0JBU0UrMTk4KQorI2RlZmluZSBfX05SX2dldHVpZDMyCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzE5OSkKKyNkZWZpbmUgX19OUl9nZXRnaWQzMgkJCShfX05SX1NZU0NBTExfQkFTRSsyMDApCisjZGVmaW5lIF9fTlJfZ2V0ZXVpZDMyCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzIwMSkKKyNkZWZpbmUgX19OUl9nZXRlZ2lkMzIJCQkoX19OUl9TWVNDQUxMX0JBU0UrMjAyKQorI2RlZmluZSBfX05SX3NldHJldWlkMzIJCQkoX19OUl9TWVNDQUxMX0JBU0UrMjAzKQorI2RlZmluZSBfX05SX3NldHJlZ2lkMzIJCQkoX19OUl9TWVNDQUxMX0JBU0UrMjA0KQorI2RlZmluZSBfX05SX2dldGdyb3VwczMyCQkoX19OUl9TWVNDQUxMX0JBU0UrMjA1KQorI2RlZmluZSBfX05SX3NldGdyb3VwczMyCQkoX19OUl9TWVNDQUxMX0JBU0UrMjA2KQorI2RlZmluZSBfX05SX2ZjaG93bjMyCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzIwNykKKyNkZWZpbmUgX19OUl9zZXRyZXN1aWQzMgkJKF9fTlJfU1lTQ0FMTF9CQVNFKzIwOCkKKyNkZWZpbmUgX19OUl9nZXRyZXN1aWQzMgkJKF9fTlJfU1lTQ0FMTF9CQVNFKzIwOSkKKyNkZWZpbmUgX19OUl9zZXRyZXNnaWQzMgkJKF9fTlJfU1lTQ0FMTF9CQVNFKzIxMCkKKyNkZWZpbmUgX19OUl9nZXRyZXNnaWQzMgkJKF9fTlJfU1lTQ0FMTF9CQVNFKzIxMSkKKyNkZWZpbmUgX19OUl9jaG93bjMyCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzIxMikKKyNkZWZpbmUgX19OUl9zZXR1aWQzMgkJCShfX05SX1NZU0NBTExfQkFTRSsyMTMpCisjZGVmaW5lIF9fTlJfc2V0Z2lkMzIJCQkoX19OUl9TWVNDQUxMX0JBU0UrMjE0KQorI2RlZmluZSBfX05SX3NldGZzdWlkMzIJCQkoX19OUl9TWVNDQUxMX0JBU0UrMjE1KQorI2RlZmluZSBfX05SX3NldGZzZ2lkMzIJCQkoX19OUl9TWVNDQUxMX0JBU0UrMjE2KQorI2RlZmluZSBfX05SX2dldGRlbnRzNjQJCQkoX19OUl9TWVNDQUxMX0JBU0UrMjE3KQorI2RlZmluZSBfX05SX3Bpdm90X3Jvb3QJCQkoX19OUl9TWVNDQUxMX0JBU0UrMjE4KQorI2RlZmluZSBfX05SX21pbmNvcmUJCQkoX19OUl9TWVNDQUxMX0JBU0UrMjE5KQorI2RlZmluZSBfX05SX21hZHZpc2UJCQkoX19OUl9TWVNDQUxMX0JBU0UrMjIwKQorI2RlZmluZSBfX05SX2ZjbnRsNjQJCQkoX19OUl9TWVNDQUxMX0JBU0UrMjIxKQorCQkJCQkvKiAyMjIgZm9yIHR1eCAqLworCQkJCQkvKiAyMjMgaXMgdW51c2VkICovCisjZGVmaW5lIF9fTlJfZ2V0dGlkCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzIyNCkKKyNkZWZpbmUgX19OUl9yZWFkYWhlYWQJCQkoX19OUl9TWVNDQUxMX0JBU0UrMjI1KQorI2RlZmluZSBfX05SX3NldHhhdHRyCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzIyNikKKyNkZWZpbmUgX19OUl9sc2V0eGF0dHIJCQkoX19OUl9TWVNDQUxMX0JBU0UrMjI3KQorI2RlZmluZSBfX05SX2ZzZXR4YXR0cgkJCShfX05SX1NZU0NBTExfQkFTRSsyMjgpCisjZGVmaW5lIF9fTlJfZ2V0eGF0dHIJCQkoX19OUl9TWVNDQUxMX0JBU0UrMjI5KQorI2RlZmluZSBfX05SX2xnZXR4YXR0cgkJCShfX05SX1NZU0NBTExfQkFTRSsyMzApCisjZGVmaW5lIF9fTlJfZmdldHhhdHRyCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzIzMSkKKyNkZWZpbmUgX19OUl9saXN0eGF0dHIJCQkoX19OUl9TWVNDQUxMX0JBU0UrMjMyKQorI2RlZmluZSBfX05SX2xsaXN0eGF0dHIJCQkoX19OUl9TWVNDQUxMX0JBU0UrMjMzKQorI2RlZmluZSBfX05SX2ZsaXN0eGF0dHIJCQkoX19OUl9TWVNDQUxMX0JBU0UrMjM0KQorI2RlZmluZSBfX05SX3JlbW92ZXhhdHRyCQkoX19OUl9TWVNDQUxMX0JBU0UrMjM1KQorI2RlZmluZSBfX05SX2xyZW1vdmV4YXR0cgkJKF9fTlJfU1lTQ0FMTF9CQVNFKzIzNikKKyNkZWZpbmUgX19OUl9mcmVtb3ZleGF0dHIJCShfX05SX1NZU0NBTExfQkFTRSsyMzcpCisjZGVmaW5lIF9fTlJfdGtpbGwJCQkoX19OUl9TWVNDQUxMX0JBU0UrMjM4KQorI2RlZmluZSBfX05SX3NlbmRmaWxlNjQJCQkoX19OUl9TWVNDQUxMX0JBU0UrMjM5KQorI2RlZmluZSBfX05SX2Z1dGV4CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI0MCkKKyNkZWZpbmUgX19OUl9zY2hlZF9zZXRhZmZpbml0eQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI0MSkKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRhZmZpbml0eQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI0MikKKyNkZWZpbmUgX19OUl9pb19zZXR1cAkJCShfX05SX1NZU0NBTExfQkFTRSsyNDMpCisjZGVmaW5lIF9fTlJfaW9fZGVzdHJveQkJCShfX05SX1NZU0NBTExfQkFTRSsyNDQpCisjZGVmaW5lIF9fTlJfaW9fZ2V0ZXZlbnRzCQkoX19OUl9TWVNDQUxMX0JBU0UrMjQ1KQorI2RlZmluZSBfX05SX2lvX3N1Ym1pdAkJCShfX05SX1NZU0NBTExfQkFTRSsyNDYpCisjZGVmaW5lIF9fTlJfaW9fY2FuY2VsCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI0NykKKyNkZWZpbmUgX19OUl9leGl0X2dyb3VwCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI0OCkKKyNkZWZpbmUgX19OUl9sb29rdXBfZGNvb2tpZQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI0OSkKKyNkZWZpbmUgX19OUl9lcG9sbF9jcmVhdGUJCShfX05SX1NZU0NBTExfQkFTRSsyNTApCisjZGVmaW5lIF9fTlJfZXBvbGxfY3RsCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI1MSkKKyNkZWZpbmUgX19OUl9lcG9sbF93YWl0CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI1MikKKyNkZWZpbmUgX19OUl9yZW1hcF9maWxlX3BhZ2VzCQkoX19OUl9TWVNDQUxMX0JBU0UrMjUzKQorCQkJCQkvKiAyNTQgZm9yIHNldF90aHJlYWRfYXJlYSAqLworCQkJCQkvKiAyNTUgZm9yIGdldF90aHJlYWRfYXJlYSAqLworI2RlZmluZSBfX05SX3NldF90aWRfYWRkcmVzcwkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI1NikKKyNkZWZpbmUgX19OUl90aW1lcl9jcmVhdGUJCShfX05SX1NZU0NBTExfQkFTRSsyNTcpCisjZGVmaW5lIF9fTlJfdGltZXJfc2V0dGltZQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI1OCkKKyNkZWZpbmUgX19OUl90aW1lcl9nZXR0aW1lCQkoX19OUl9TWVNDQUxMX0JBU0UrMjU5KQorI2RlZmluZSBfX05SX3RpbWVyX2dldG92ZXJydW4JCShfX05SX1NZU0NBTExfQkFTRSsyNjApCisjZGVmaW5lIF9fTlJfdGltZXJfZGVsZXRlCQkoX19OUl9TWVNDQUxMX0JBU0UrMjYxKQorI2RlZmluZSBfX05SX2Nsb2NrX3NldHRpbWUJCShfX05SX1NZU0NBTExfQkFTRSsyNjIpCisjZGVmaW5lIF9fTlJfY2xvY2tfZ2V0dGltZQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI2MykKKyNkZWZpbmUgX19OUl9jbG9ja19nZXRyZXMJCShfX05SX1NZU0NBTExfQkFTRSsyNjQpCisjZGVmaW5lIF9fTlJfY2xvY2tfbmFub3NsZWVwCQkoX19OUl9TWVNDQUxMX0JBU0UrMjY1KQorI2RlZmluZSBfX05SX3N0YXRmczY0CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI2NikKKyNkZWZpbmUgX19OUl9mc3RhdGZzNjQJCQkoX19OUl9TWVNDQUxMX0JBU0UrMjY3KQorI2RlZmluZSBfX05SX3Rna2lsbAkJCShfX05SX1NZU0NBTExfQkFTRSsyNjgpCisjZGVmaW5lIF9fTlJfdXRpbWVzCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI2OSkKKyNkZWZpbmUgX19OUl9mYWR2aXNlNjRfNjQJCShfX05SX1NZU0NBTExfQkFTRSsyNzApCisjZGVmaW5lIF9fTlJfcGNpY29uZmlnX2lvYmFzZQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI3MSkKKyNkZWZpbmUgX19OUl9wY2ljb25maWdfcmVhZAkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI3MikKKyNkZWZpbmUgX19OUl9wY2ljb25maWdfd3JpdGUJCShfX05SX1NZU0NBTExfQkFTRSsyNzMpCisjZGVmaW5lIF9fTlJfbXFfb3BlbgkJCShfX05SX1NZU0NBTExfQkFTRSsyNzQpCisjZGVmaW5lIF9fTlJfbXFfdW5saW5rCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI3NSkKKyNkZWZpbmUgX19OUl9tcV90aW1lZHNlbmQJCShfX05SX1NZU0NBTExfQkFTRSsyNzYpCisjZGVmaW5lIF9fTlJfbXFfdGltZWRyZWNlaXZlCQkoX19OUl9TWVNDQUxMX0JBU0UrMjc3KQorI2RlZmluZSBfX05SX21xX25vdGlmeQkJCShfX05SX1NZU0NBTExfQkFTRSsyNzgpCisjZGVmaW5lIF9fTlJfbXFfZ2V0c2V0YXR0cgkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI3OSkKKyNkZWZpbmUgX19OUl93YWl0aWQJCQkoX19OUl9TWVNDQUxMX0JBU0UrMjgwKQorCisjaWYgMCAvKiByZXNlcnZlIHRoZXNlIGZvciB1bi1tdXhpbmcgc29ja2V0Y2FsbCAqLworI2RlZmluZSBfX05SX3NvY2tldAkJCShfX05SX1NZU0NBTExfQkFTRSsyODEpCisjZGVmaW5lIF9fTlJfYmluZAkJCShfX05SX1NZU0NBTExfQkFTRSsyODIpCisjZGVmaW5lIF9fTlJfY29ubmVjdAkJCShfX05SX1NZU0NBTExfQkFTRSsyODMpCisjZGVmaW5lIF9fTlJfbGlzdGVuCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI4NCkKKyNkZWZpbmUgX19OUl9hY2NlcHQJCQkoX19OUl9TWVNDQUxMX0JBU0UrMjg1KQorI2RlZmluZSBfX05SX2dldHNvY2tuYW1lCQkoX19OUl9TWVNDQUxMX0JBU0UrMjg2KQorI2RlZmluZSBfX05SX2dldHBlZXJuYW1lCQkoX19OUl9TWVNDQUxMX0JBU0UrMjg3KQorI2RlZmluZSBfX05SX3NvY2tldHBhaXIJCQkoX19OUl9TWVNDQUxMX0JBU0UrMjg4KQorI2RlZmluZSBfX05SX3NlbmQJCQkoX19OUl9TWVNDQUxMX0JBU0UrMjg5KQorI2RlZmluZSBfX05SX3NlbmR0bwkJCShfX05SX1NZU0NBTExfQkFTRSsyOTApCisjZGVmaW5lIF9fTlJfcmVjdgkJCShfX05SX1NZU0NBTExfQkFTRSsyOTEpCisjZGVmaW5lIF9fTlJfcmVjdmZyb20JCQkoX19OUl9TWVNDQUxMX0JBU0UrMjkyKQorI2RlZmluZSBfX05SX3NodXRkb3duCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI5MykKKyNkZWZpbmUgX19OUl9zZXRzb2Nrb3B0CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI5NCkKKyNkZWZpbmUgX19OUl9nZXRzb2Nrb3B0CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI5NSkKKyNkZWZpbmUgX19OUl9zZW5kbXNnCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI5NikKKyNkZWZpbmUgX19OUl9yZWN2bXNnCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI5NykKKyNlbmRpZgorCisjaWYgMCAvKiByZXNlcnZlIHRoZXNlIGZvciB1bi1tdXhpbmcgaXBjICovCisjZGVmaW5lIF9fTlJfc2Vtb3AJCQkoX19OUl9TWVNDQUxMX0JBU0UrMjk4KQorI2RlZmluZSBfX05SX3NlbWdldAkJCShfX05SX1NZU0NBTExfQkFTRSsyOTkpCisjZGVmaW5lIF9fTlJfc2VtY3RsCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzMwMCkKKyNkZWZpbmUgX19OUl9tc2dzbmQJCQkoX19OUl9TWVNDQUxMX0JBU0UrMzAxKQorI2RlZmluZSBfX05SX21zZ3JjdgkJCShfX05SX1NZU0NBTExfQkFTRSszMDIpCisjZGVmaW5lIF9fTlJfbXNnZ2V0CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzMwMykKKyNkZWZpbmUgX19OUl9tc2djdGwJCQkoX19OUl9TWVNDQUxMX0JBU0UrMzA0KQorI2RlZmluZSBfX05SX3NobWF0CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzMwNSkKKyNkZWZpbmUgX19OUl9zaG1kdAkJCShfX05SX1NZU0NBTExfQkFTRSszMDYpCisjZGVmaW5lIF9fTlJfc2htZ2V0CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzMwNykKKyNkZWZpbmUgX19OUl9zaG1jdGwJCQkoX19OUl9TWVNDQUxMX0JBU0UrMzA4KQorI2VuZGlmCisKKyNkZWZpbmUgX19OUl9hZGRfa2V5CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzMwOSkKKyNkZWZpbmUgX19OUl9yZXF1ZXN0X2tleQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzMxMCkKKyNkZWZpbmUgX19OUl9rZXljdGwJCQkoX19OUl9TWVNDQUxMX0JBU0UrMzExKQorCisjaWYgMCAvKiByZXNlcnZlZCBmb3IgdW4tbXV4aW5nIGlwYyAqLworI2RlZmluZSBfX05SX3NlbXRpbWVkb3AJCQkoX19OUl9TWVNDQUxMX0JBU0UrMzEyKQorI2VuZGlmCisKKyNkZWZpbmUgX19OUl92c2VydmVyCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzMxMykKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgU1dJcyBhcmUgQVJNIHByaXZhdGUuCisgKi8KKyNkZWZpbmUgX19BUk1fTlJfQkFTRQkJCShfX05SX1NZU0NBTExfQkFTRSsweDBmMDAwMCkKKyNkZWZpbmUgX19BUk1fTlJfYnJlYWtwb2ludAkJKF9fQVJNX05SX0JBU0UrMSkKKyNkZWZpbmUgX19BUk1fTlJfY2FjaGVmbHVzaAkJKF9fQVJNX05SX0JBU0UrMikKKyNkZWZpbmUgX19BUk1fTlJfdXNyMjYJCQkoX19BUk1fTlJfQkFTRSszKQorI2RlZmluZSBfX0FSTV9OUl91c3IzMgkJCShfX0FSTV9OUl9CQVNFKzQpCisKKyNkZWZpbmUgX19BUk1fTlJfc2V0X3RscwkJKF9fQVJNX05SX0JBU0UrMHg4MDApCisKKyNkZWZpbmUgX19zeXMyKHgpICN4CisjZGVmaW5lIF9fc3lzMSh4KSBfX3N5czIoeCkKKworI2lmbmRlZiBfX3N5c2NhbGwKKyNpZiBkZWZpbmVkKF9fdGh1bWJfXykKKyNkZWZpbmUgX19zeXNjYWxsKG5hbWUpCQkJCQlcCisJInB1c2gJe3I3fVxuXHQiCQkJCVwKKwkibW92CXI3LCAjIiBfX3N5czEoX19OUl8jI25hbWUpICJcblx0IglcCisJInN3aQkwXG5cdCIJCQkJCVwKKwkicG9wCXtyN30iCisjZWxzZQorI2RlZmluZSBfX3N5c2NhbGwobmFtZSkgInN3aVx0IiBfX3N5czEoX19OUl8jI25hbWUpICIiCisjZW5kaWYKKyNlbmRpZgorCisjZGVmaW5lIF9fc3lzY2FsbF9yZXR1cm4odHlwZSwgcmVzKQkJCQkJXAorZG8gewkJCQkJCQkJCVwKKwlpZiAoKHVuc2lnbmVkIGxvbmcpKHJlcykgPj0gKHVuc2lnbmVkIGxvbmcpKC0xMjkpKSB7CQlcCisJCWVycm5vID0gLShyZXMpOwkJCQkJCVwKKwkJcmVzID0gLTE7CQkJCQkJXAorCX0JCQkJCQkJCVwKKwlyZXR1cm4gKHR5cGUpIChyZXMpOwkJCQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgX3N5c2NhbGwwKHR5cGUsbmFtZSkJCQkJCQlcCit0eXBlIG5hbWUodm9pZCkgewkJCQkJCQlcCisgIHJlZ2lzdGVyIGxvbmcgX19yZXNfcjAgX19hc21fXygicjAiKTsJCQkJCVwKKyAgbG9uZyBfX3JlczsJCQkJCQkJCVwKKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJCQkJCVwKKyAgX19zeXNjYWxsKG5hbWUpCQkJCQkJCVwKKwk6ICI9ciIgKF9fcmVzX3IwKQkJCQkJCVwKKwk6CQkJCQkJCQlcCisJOiAibHIiKTsJCQkJCQkJXAorICBfX3JlcyA9IF9fcmVzX3IwOwkJCQkJCQlcCisgIF9fc3lzY2FsbF9yZXR1cm4odHlwZSxfX3Jlcyk7CQkJCQkJXAorfQorCisjZGVmaW5lIF9zeXNjYWxsMSh0eXBlLG5hbWUsdHlwZTEsYXJnMSkgCQkJCVwKK3R5cGUgbmFtZSh0eXBlMSBhcmcxKSB7IAkJCQkJCVwKKyAgcmVnaXN0ZXIgbG9uZyBfX3IwIF9fYXNtX18oInIwIikgPSAobG9uZylhcmcxOwkJCVwKKyAgcmVnaXN0ZXIgbG9uZyBfX3Jlc19yMCBfX2FzbV9fKCJyMCIpOwkJCQkJXAorICBsb25nIF9fcmVzOwkJCQkJCQkJXAorICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCQkJXAorICBfX3N5c2NhbGwobmFtZSkJCQkJCQkJXAorCTogIj1yIiAoX19yZXNfcjApCQkJCQkJXAorCTogInIiIChfX3IwKQkJCQkJCQlcCisJOiAibHIiKTsJCQkJCQkJXAorICBfX3JlcyA9IF9fcmVzX3IwOwkJCQkJCQlcCisgIF9fc3lzY2FsbF9yZXR1cm4odHlwZSxfX3Jlcyk7CQkJCQkJXAorfQorCisjZGVmaW5lIF9zeXNjYWxsMih0eXBlLG5hbWUsdHlwZTEsYXJnMSx0eXBlMixhcmcyKQkJCVwKK3R5cGUgbmFtZSh0eXBlMSBhcmcxLHR5cGUyIGFyZzIpIHsJCQkJCVwKKyAgcmVnaXN0ZXIgbG9uZyBfX3IwIF9fYXNtX18oInIwIikgPSAobG9uZylhcmcxOwkJCVwKKyAgcmVnaXN0ZXIgbG9uZyBfX3IxIF9fYXNtX18oInIxIikgPSAobG9uZylhcmcyOwkJCVwKKyAgcmVnaXN0ZXIgbG9uZyBfX3Jlc19yMCBfX2FzbV9fKCJyMCIpOwkJCQkJXAorICBsb25nIF9fcmVzOwkJCQkJCQkJXAorICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCQkJXAorICBfX3N5c2NhbGwobmFtZSkJCQkJCQkJXAorCTogIj1yIiAoX19yZXNfcjApCQkJCQkJXAorCTogInIiIChfX3IwKSwiciIgKF9fcjEpIAkJCQkJXAorCTogImxyIik7CQkJCQkJCVwKKyAgX19yZXMgPSBfX3Jlc19yMDsJCQkJCQkJXAorICBfX3N5c2NhbGxfcmV0dXJuKHR5cGUsX19yZXMpOwkJCQkJCVwKK30KKworCisjZGVmaW5lIF9zeXNjYWxsMyh0eXBlLG5hbWUsdHlwZTEsYXJnMSx0eXBlMixhcmcyLHR5cGUzLGFyZzMpCQlcCit0eXBlIG5hbWUodHlwZTEgYXJnMSx0eXBlMiBhcmcyLHR5cGUzIGFyZzMpIHsJCQkJXAorICByZWdpc3RlciBsb25nIF9fcjAgX19hc21fXygicjAiKSA9IChsb25nKWFyZzE7CQkJXAorICByZWdpc3RlciBsb25nIF9fcjEgX19hc21fXygicjEiKSA9IChsb25nKWFyZzI7CQkJXAorICByZWdpc3RlciBsb25nIF9fcjIgX19hc21fXygicjIiKSA9IChsb25nKWFyZzM7CQkJXAorICByZWdpc3RlciBsb25nIF9fcmVzX3IwIF9fYXNtX18oInIwIik7CQkJCQlcCisgIGxvbmcgX19yZXM7CQkJCQkJCQlcCisgIF9fYXNtX18gX192b2xhdGlsZV9fICgJCQkJCQlcCisgIF9fc3lzY2FsbChuYW1lKQkJCQkJCQlcCisJOiAiPXIiIChfX3Jlc19yMCkJCQkJCQlcCisJOiAiciIgKF9fcjApLCJyIiAoX19yMSksInIiIChfX3IyKQkJCQlcCisJOiAibHIiKTsJCQkJCQkJXAorICBfX3JlcyA9IF9fcmVzX3IwOwkJCQkJCQlcCisgIF9fc3lzY2FsbF9yZXR1cm4odHlwZSxfX3Jlcyk7CQkJCQkJXAorfQorCisKKyNkZWZpbmUgX3N5c2NhbGw0KHR5cGUsbmFtZSx0eXBlMSxhcmcxLHR5cGUyLGFyZzIsdHlwZTMsYXJnMyx0eXBlNCxhcmc0KVwKK3R5cGUgbmFtZSh0eXBlMSBhcmcxLCB0eXBlMiBhcmcyLCB0eXBlMyBhcmczLCB0eXBlNCBhcmc0KSB7CQlcCisgIHJlZ2lzdGVyIGxvbmcgX19yMCBfX2FzbV9fKCJyMCIpID0gKGxvbmcpYXJnMTsJCQlcCisgIHJlZ2lzdGVyIGxvbmcgX19yMSBfX2FzbV9fKCJyMSIpID0gKGxvbmcpYXJnMjsJCQlcCisgIHJlZ2lzdGVyIGxvbmcgX19yMiBfX2FzbV9fKCJyMiIpID0gKGxvbmcpYXJnMzsJCQlcCisgIHJlZ2lzdGVyIGxvbmcgX19yMyBfX2FzbV9fKCJyMyIpID0gKGxvbmcpYXJnNDsJCQlcCisgIHJlZ2lzdGVyIGxvbmcgX19yZXNfcjAgX19hc21fXygicjAiKTsJCQkJCVwKKyAgbG9uZyBfX3JlczsJCQkJCQkJCVwKKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJCQkJCVwKKyAgX19zeXNjYWxsKG5hbWUpCQkJCQkJCVwKKwk6ICI9ciIgKF9fcmVzX3IwKQkJCQkJCVwKKwk6ICJyIiAoX19yMCksInIiIChfX3IxKSwiciIgKF9fcjIpLCJyIiAoX19yMykJCQlcCisJOiAibHIiKTsJCQkJCQkJXAorICBfX3JlcyA9IF9fcmVzX3IwOwkJCQkJCQlcCisgIF9fc3lzY2FsbF9yZXR1cm4odHlwZSxfX3Jlcyk7CQkJCQkJXAorfQorICAKKworI2RlZmluZSBfc3lzY2FsbDUodHlwZSxuYW1lLHR5cGUxLGFyZzEsdHlwZTIsYXJnMix0eXBlMyxhcmczLHR5cGU0LGFyZzQsdHlwZTUsYXJnNSkJXAordHlwZSBuYW1lKHR5cGUxIGFyZzEsIHR5cGUyIGFyZzIsIHR5cGUzIGFyZzMsIHR5cGU0IGFyZzQsIHR5cGU1IGFyZzUpIHsJXAorICByZWdpc3RlciBsb25nIF9fcjAgX19hc21fXygicjAiKSA9IChsb25nKWFyZzE7CQkJXAorICByZWdpc3RlciBsb25nIF9fcjEgX19hc21fXygicjEiKSA9IChsb25nKWFyZzI7CQkJXAorICByZWdpc3RlciBsb25nIF9fcjIgX19hc21fXygicjIiKSA9IChsb25nKWFyZzM7CQkJXAorICByZWdpc3RlciBsb25nIF9fcjMgX19hc21fXygicjMiKSA9IChsb25nKWFyZzQ7CQkJXAorICByZWdpc3RlciBsb25nIF9fcjQgX19hc21fXygicjQiKSA9IChsb25nKWFyZzU7CQkJXAorICByZWdpc3RlciBsb25nIF9fcmVzX3IwIF9fYXNtX18oInIwIik7CQkJCQlcCisgIGxvbmcgX19yZXM7CQkJCQkJCQlcCisgIF9fYXNtX18gX192b2xhdGlsZV9fICgJCQkJCQlcCisgIF9fc3lzY2FsbChuYW1lKQkJCQkJCQlcCisJOiAiPXIiIChfX3Jlc19yMCkJCQkJCQlcCisJOiAiciIgKF9fcjApLCJyIiAoX19yMSksInIiIChfX3IyKSwiciIgKF9fcjMpLCJyIiAoX19yNCkJXAorCTogImxyIik7CQkJCQkJCVwKKyAgX19yZXMgPSBfX3Jlc19yMDsJCQkJCQkJXAorICBfX3N5c2NhbGxfcmV0dXJuKHR5cGUsX19yZXMpOwkJCQkJCVwKK30KKworI2RlZmluZSBfc3lzY2FsbDYodHlwZSxuYW1lLHR5cGUxLGFyZzEsdHlwZTIsYXJnMix0eXBlMyxhcmczLHR5cGU0LGFyZzQsdHlwZTUsYXJnNSx0eXBlNixhcmc2KQlcCit0eXBlIG5hbWUodHlwZTEgYXJnMSwgdHlwZTIgYXJnMiwgdHlwZTMgYXJnMywgdHlwZTQgYXJnNCwgdHlwZTUgYXJnNSwgdHlwZTYgYXJnNikgewlcCisgIHJlZ2lzdGVyIGxvbmcgX19yMCBfX2FzbV9fKCJyMCIpID0gKGxvbmcpYXJnMTsJCQlcCisgIHJlZ2lzdGVyIGxvbmcgX19yMSBfX2FzbV9fKCJyMSIpID0gKGxvbmcpYXJnMjsJCQlcCisgIHJlZ2lzdGVyIGxvbmcgX19yMiBfX2FzbV9fKCJyMiIpID0gKGxvbmcpYXJnMzsJCQlcCisgIHJlZ2lzdGVyIGxvbmcgX19yMyBfX2FzbV9fKCJyMyIpID0gKGxvbmcpYXJnNDsJCQlcCisgIHJlZ2lzdGVyIGxvbmcgX19yNCBfX2FzbV9fKCJyNCIpID0gKGxvbmcpYXJnNTsJCQlcCisgIHJlZ2lzdGVyIGxvbmcgX19yNSBfX2FzbV9fKCJyNSIpID0gKGxvbmcpYXJnNjsJCQlcCisgIHJlZ2lzdGVyIGxvbmcgX19yZXNfcjAgX19hc21fXygicjAiKTsJCQkJCVwKKyAgbG9uZyBfX3JlczsJCQkJCQkJCVwKKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJCQkJCVwKKyAgX19zeXNjYWxsKG5hbWUpCQkJCQkJCVwKKwk6ICI9ciIgKF9fcmVzX3IwKQkJCQkJCVwKKwk6ICJyIiAoX19yMCksInIiIChfX3IxKSwiciIgKF9fcjIpLCJyIiAoX19yMyksICJyIiAoX19yNCksInIiIChfX3I1KQkJXAorCTogImxyIik7CQkJCQkJCVwKKyAgX19yZXMgPSBfX3Jlc19yMDsJCQkJCQkJXAorICBfX3N5c2NhbGxfcmV0dXJuKHR5cGUsX19yZXMpOwkJCQkJCVwKK30KKworI2lmZGVmIF9fS0VSTkVMX18KKyNkZWZpbmUgX19BUkNIX1dBTlRfSVBDX1BBUlNFX1ZFUlNJT04KKyNkZWZpbmUgX19BUkNIX1dBTlRfT0xEX1JFQURESVIKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1RBVDY0CisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19BTEFSTQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfR0VUSE9TVE5BTUUKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1BBVVNFCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19USU1FCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19VVElNRQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU09DS0VUQ0FMTAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfRkFEVklTRTY0CisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19HRVRQR1JQCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19MTFNFRUsKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX05JQ0UKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX09MRF9HRVRSTElNSVQKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX09MRFVNT1VOVAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUEVORElORworI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUFJPQ01BU0sKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1JUX1NJR0FDVElPTgorI2VuZGlmCisKKyNpZmRlZiBfX0tFUk5FTF9TWVNDQUxMU19fCisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KKworZXh0ZXJuIGxvbmcgZXhlY3ZlKGNvbnN0IGNoYXIgKmZpbGUsIGNoYXIgKiphcmd2LCBjaGFyICoqZW52cCk7CisKK3N0cnVjdCBwdF9yZWdzOworYXNtbGlua2FnZSBpbnQgc3lzX2V4ZWN2ZShjaGFyICpmaWxlbmFtZWksIGNoYXIgKiphcmd2LCBjaGFyICoqZW52cCwKKwkJCXN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2FzbWxpbmthZ2UgaW50IHN5c19jbG9uZSh1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzLCB1bnNpZ25lZCBsb25nIG5ld3NwLAorCQkJc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworYXNtbGlua2FnZSBpbnQgc3lzX2Zvcmsoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworYXNtbGlua2FnZSBpbnQgc3lzX3Zmb3JrKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2FzbWxpbmthZ2UgaW50IHN5c19waXBlKHVuc2lnbmVkIGxvbmcgKmZpbGRlcyk7Cithc21saW5rYWdlIGludCBzeXNfcHRyYWNlKGxvbmcgcmVxdWVzdCwgbG9uZyBwaWQsIGxvbmcgYWRkciwgbG9uZyBkYXRhKTsKK3N0cnVjdCBzaWdhY3Rpb247Cithc21saW5rYWdlIGxvbmcgc3lzX3J0X3NpZ2FjdGlvbihpbnQgc2lnLAorCQkJCWNvbnN0IHN0cnVjdCBzaWdhY3Rpb24gX191c2VyICphY3QsCisJCQkJc3RydWN0IHNpZ2FjdGlvbiBfX3VzZXIgKm9hY3QsCisJCQkJc2l6ZV90IHNpZ3NldHNpemUpOworCisjZW5kaWYKKworLyoKKyAqICJDb25kaXRpb25hbCIgc3lzY2FsbHMKKyAqCisgKiBXaGF0IHdlIHdhbnQgaXMgX19hdHRyaWJ1dGVfXygod2VhayxhbGlhcygic3lzX25pX3N5c2NhbGwiKSkpLAorICogYnV0IGl0IGRvZXNuJ3Qgd29yayBvbiBhbGwgdG9vbGNoYWlucywgc28gd2UganVzdCBkbyBpdCBieSBoYW5kCisgKi8KKyNkZWZpbmUgY29uZF9zeXNjYWxsKHgpIGFzbSgiLndlYWtcdCIgI3ggIlxuXHQuc2V0XHQiICN4ICIsc3lzX25pX3N5c2NhbGwiKQorCisjZW5kaWYgLyogX19BU01fQVJNX1VOSVNURF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vdXNlci5oIGIvaW5jbHVkZS9hc20tYXJtL3VzZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZThiMGY4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL3VzZXIuaApAQCAtMCwwICsxLDg0IEBACisjaWZuZGVmIF9BUk1fVVNFUl9ICisjZGVmaW5lIF9BUk1fVVNFUl9ICisKKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKy8qIENvcmUgZmlsZSBmb3JtYXQ6IFRoZSBjb3JlIGZpbGUgaXMgd3JpdHRlbiBpbiBzdWNoIGEgd2F5IHRoYXQgZ2RiCisgICBjYW4gdW5kZXJzdGFuZCBpdCBhbmQgcHJvdmlkZSB1c2VmdWwgaW5mb3JtYXRpb24gdG8gdGhlIHVzZXIgKHVuZGVyCisgICBsaW51eCB3ZSB1c2UgdGhlICd0cmFkLWNvcmUnIGJmZCkuICBUaGVyZSBhcmUgcXVpdGUgYSBudW1iZXIgb2YKKyAgIG9ic3RhY2xlcyB0byBiZWluZyBhYmxlIHRvIHZpZXcgdGhlIGNvbnRlbnRzIG9mIHRoZSBmbG9hdGluZyBwb2ludAorICAgcmVnaXN0ZXJzLCBhbmQgdW50aWwgdGhlc2UgYXJlIHNvbHZlZCB5b3Ugd2lsbCBub3QgYmUgYWJsZSB0byB2aWV3IHRoZQorICAgY29udGVudHMgb2YgdGhlbS4gIEFjdHVhbGx5LCB5b3UgY2FuIHJlYWQgaW4gdGhlIGNvcmUgZmlsZSBhbmQgbG9vayBhdAorICAgdGhlIGNvbnRlbnRzIG9mIHRoZSB1c2VyIHN0cnVjdCB0byBmaW5kIG91dCB3aGF0IHRoZSBmbG9hdGluZyBwb2ludAorICAgcmVnaXN0ZXJzIGNvbnRhaW4uCisgICBUaGUgYWN0dWFsIGZpbGUgY29udGVudHMgYXJlIGFzIGZvbGxvd3M6CisgICBVUEFHRTogMSBwYWdlIGNvbnNpc3Rpbmcgb2YgYSB1c2VyIHN0cnVjdCB0aGF0IHRlbGxzIGdkYiB3aGF0IGlzIHByZXNlbnQKKyAgIGluIHRoZSBmaWxlLiAgRGlyZWN0bHkgYWZ0ZXIgdGhpcyBpcyBhIGNvcHkgb2YgdGhlIHRhc2tfc3RydWN0LCB3aGljaAorICAgaXMgY3VycmVudGx5IG5vdCB1c2VkIGJ5IGdkYiwgYnV0IGl0IG1heSBjb21lIGluIHVzZWZ1bCBhdCBzb21lIHBvaW50LgorICAgQWxsIG9mIHRoZSByZWdpc3RlcnMgYXJlIHN0b3JlZCBhcyBwYXJ0IG9mIHRoZSB1cGFnZS4gIFRoZSB1cGFnZSBzaG91bGQKKyAgIGFsd2F5cyBiZSBvbmx5IG9uZSBwYWdlLgorICAgREFUQTogVGhlIGRhdGEgYXJlYSBpcyBzdG9yZWQuICBXZSB1c2UgY3VycmVudC0+ZW5kX3RleHQgdG8KKyAgIGN1cnJlbnQtPmJyayB0byBwaWNrIHVwIGFsbCBvZiB0aGUgdXNlciB2YXJpYWJsZXMsIHBsdXMgYW55IG1lbW9yeQorICAgdGhhdCBtYXkgaGF2ZSBiZWVuIG1hbGxvY2VkLiAgTm8gYXR0ZW1wdCBpcyBtYWRlIHRvIGRldGVybWluZSBpZiBhIHBhZ2UKKyAgIGlzIGRlbWFuZC16ZXJvIG9yIGlmIGEgcGFnZSBpcyB0b3RhbGx5IHVudXNlZCwgd2UganVzdCBjb3ZlciB0aGUgZW50aXJlCisgICByYW5nZS4gIEFsbCBvZiB0aGUgYWRkcmVzc2VzIGFyZSByb3VuZGVkIGluIHN1Y2ggYSB3YXkgdGhhdCBhbiBpbnRlZ3JhbAorICAgbnVtYmVyIG9mIHBhZ2VzIGlzIHdyaXR0ZW4uCisgICBTVEFDSzogV2UgbmVlZCB0aGUgc3RhY2sgaW5mb3JtYXRpb24gaW4gb3JkZXIgdG8gZ2V0IGEgbWVhbmluZ2Z1bAorICAgYmFja3RyYWNlLiAgV2UgbmVlZCB0byB3cml0ZSB0aGUgZGF0YSBmcm9tIChlc3ApIHRvCisgICBjdXJyZW50LT5zdGFydF9zdGFjaywgc28gd2Ugcm91bmQgZWFjaCBvZiB0aGVzZSBvZmYgaW4gb3JkZXIgdG8gYmUgYWJsZQorICAgdG8gd3JpdGUgYW4gaW50ZWdlciBudW1iZXIgb2YgcGFnZXMuCisgICBUaGUgbWluaW11bSBjb3JlIGZpbGUgc2l6ZSBpcyAzIHBhZ2VzLCBvciAxMjI4OCBieXRlcy4KKyovCisKK3N0cnVjdCB1c2VyX2ZwIHsKKwlzdHJ1Y3QgZnBfcmVnIHsKKwkJdW5zaWduZWQgaW50IHNpZ24xOjE7CisJCXVuc2lnbmVkIGludCB1bnVzZWQ6MTU7CisJCXVuc2lnbmVkIGludCBzaWduMjoxOworCQl1bnNpZ25lZCBpbnQgZXhwb25lbnQ6MTQ7CisJCXVuc2lnbmVkIGludCBqOjE7CisJCXVuc2lnbmVkIGludCBtYW50aXNzYTE6MzE7CisJCXVuc2lnbmVkIGludCBtYW50aXNzYTA6MzI7CisJfSBmcHJlZ3NbOF07CisJdW5zaWduZWQgaW50IGZwc3I6MzI7CisJdW5zaWduZWQgaW50IGZwY3I6MzI7CisJdW5zaWduZWQgY2hhciBmdHlwZVs4XTsKKwl1bnNpZ25lZCBpbnQgaW5pdF9mbGFnOworfTsKKworLyogV2hlbiB0aGUga2VybmVsIGR1bXBzIGNvcmUsIGl0IHN0YXJ0cyBieSBkdW1waW5nIHRoZSB1c2VyIHN0cnVjdCAtCisgICB0aGlzIHdpbGwgYmUgdXNlZCBieSBnZGIgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgZGF0YSBhbmQgc3RhY2sgc2VnbWVudHMKKyAgIGFyZSB3aXRoaW4gdGhlIGZpbGUsIGFuZCB3aGF0IHZpcnR1YWwgYWRkcmVzc2VzIHRvIHVzZS4gKi8KK3N0cnVjdCB1c2VyeworLyogV2Ugc3RhcnQgd2l0aCB0aGUgcmVnaXN0ZXJzLCB0byBtaW1pYyB0aGUgd2F5IHRoYXQgIm1lbW9yeSIgaXMgcmV0dXJuZWQKKyAgIGZyb20gdGhlIHB0cmFjZSgzLC4uLikgZnVuY3Rpb24uICAqLworICBzdHJ1Y3QgcHRfcmVncyByZWdzOwkJLyogV2hlcmUgdGhlIHJlZ2lzdGVycyBhcmUgYWN0dWFsbHkgc3RvcmVkICovCisvKiBwdHJhY2UgZG9lcyBub3QgeWV0IHN1cHBseSB0aGVzZS4gIFNvbWVkYXkuLi4uICovCisgIGludCB1X2ZwdmFsaWQ7CQkvKiBUcnVlIGlmIG1hdGggY28tcHJvY2Vzc29yIGJlaW5nIHVzZWQuICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZvciB0aGlzIG1lc3MuIE5vdCB5ZXQgdXNlZC4gKi8KKy8qIFRoZSByZXN0IG9mIHRoaXMganVuayBpcyB0byBoZWxwIGdkYiBmaWd1cmUgb3V0IHdoYXQgZ29lcyB3aGVyZSAqLworICB1bnNpZ25lZCBsb25nIGludCB1X3RzaXplOwkvKiBUZXh0IHNlZ21lbnQgc2l6ZSAocGFnZXMpLiAqLworICB1bnNpZ25lZCBsb25nIGludCB1X2RzaXplOwkvKiBEYXRhIHNlZ21lbnQgc2l6ZSAocGFnZXMpLiAqLworICB1bnNpZ25lZCBsb25nIGludCB1X3NzaXplOwkvKiBTdGFjayBzZWdtZW50IHNpemUgKHBhZ2VzKS4gKi8KKyAgdW5zaWduZWQgbG9uZyBzdGFydF9jb2RlOyAgICAgLyogU3RhcnRpbmcgdmlydHVhbCBhZGRyZXNzIG9mIHRleHQuICovCisgIHVuc2lnbmVkIGxvbmcgc3RhcnRfc3RhY2s7CS8qIFN0YXJ0aW5nIHZpcnR1YWwgYWRkcmVzcyBvZiBzdGFjayBhcmVhLgorCQkJCSAgIFRoaXMgaXMgYWN0dWFsbHkgdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2ssCisJCQkJICAgdGhlIHRvcCBvZiB0aGUgc3RhY2sgaXMgYWx3YXlzIGZvdW5kIGluIHRoZQorCQkJCSAgIGVzcCByZWdpc3Rlci4gICovCisgIGxvbmcgaW50IHNpZ25hbDsgICAgIAkJLyogU2lnbmFsIHRoYXQgY2F1c2VkIHRoZSBjb3JlIGR1bXAuICovCisgIGludCByZXNlcnZlZDsJCQkvKiBObyBsb25nZXIgdXNlZCAqLworICBzdHJ1Y3QgcHRfcmVncyAqIHVfYXIwOwkvKiBVc2VkIGJ5IGdkYiB0byBoZWxwIGZpbmQgdGhlIHZhbHVlcyBmb3IgKi8KKwkJCQkvKiB0aGUgcmVnaXN0ZXJzLiAqLworICB1bnNpZ25lZCBsb25nIG1hZ2ljOwkJLyogVG8gdW5pcXVlbHkgaWRlbnRpZnkgYSBjb3JlIGZpbGUgKi8KKyAgY2hhciB1X2NvbW1bMzJdOwkJLyogVXNlciBjb21tYW5kIHRoYXQgd2FzIHJlc3BvbnNpYmxlICovCisgIGludCB1X2RlYnVncmVnWzhdOworICBzdHJ1Y3QgdXNlcl9mcCB1X2ZwOwkJLyogRlAgc3RhdGUgKi8KKyAgc3RydWN0IHVzZXJfZnBfc3RydWN0ICogdV9mcDA7LyogVXNlZCBieSBnZGIgdG8gaGVscCBmaW5kIHRoZSB2YWx1ZXMgZm9yICovCisgIAkJCQkvKiB0aGUgRlAgcmVnaXN0ZXJzLiAqLworfTsKKyNkZWZpbmUgTkJQRyBQQUdFX1NJWkUKKyNkZWZpbmUgVVBBR0VTIDEKKyNkZWZpbmUgSE9TVF9URVhUX1NUQVJUX0FERFIgKHUuc3RhcnRfY29kZSkKKyNkZWZpbmUgSE9TVF9TVEFDS19FTkRfQUREUiAodS5zdGFydF9zdGFjayArIHUudV9zc2l6ZSAqIE5CUEcpCisKKyNlbmRpZiAvKiBfQVJNX1VTRVJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3ZmcC5oIGIvaW5jbHVkZS9hc20tYXJtL3ZmcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0YzVlMDkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vdmZwLmgKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS92ZnAuaAorICoKKyAqIFZGUCByZWdpc3RlciBkZWZpbml0aW9ucy4KKyAqIEZpcnN0LCB0aGUgc3RhbmRhcmQgVkZQIHNldC4KKyAqLworCisjZGVmaW5lIEZQU0lECQkJY3IwCisjZGVmaW5lIEZQU0NSCQkJY3IxCisjZGVmaW5lIEZQRVhDCQkJY3I4CisKKy8qIEZQU0lEIGJpdHMgKi8KKyNkZWZpbmUgRlBTSURfSU1QTEVNRU5URVJfQklUCSgyNCkKKyNkZWZpbmUgRlBTSURfSU1QTEVNRU5URVJfTUFTSwkoMHhmZiA8PCBGUFNJRF9JTVBMRU1FTlRFUl9CSVQpCisjZGVmaW5lIEZQU0lEX1NPRlRXQVJFCQkoMTw8MjMpCisjZGVmaW5lIEZQU0lEX0ZPUk1BVF9CSVQJKDIxKQorI2RlZmluZSBGUFNJRF9GT1JNQVRfTUFTSwkoMHgzICA8PCBGUFNJRF9GT1JNQVRfQklUKQorI2RlZmluZSBGUFNJRF9OT0RPVUJMRQkJKDE8PDIwKQorI2RlZmluZSBGUFNJRF9BUkNIX0JJVAkJKDE2KQorI2RlZmluZSBGUFNJRF9BUkNIX01BU0sJCSgweEYgIDw8IEZQU0lEX0FSQ0hfQklUKQorI2RlZmluZSBGUFNJRF9QQVJUX0JJVAkJKDgpCisjZGVmaW5lIEZQU0lEX1BBUlRfTUFTSwkJKDB4RkYgPDwgRlBTSURfUEFSVF9CSVQpCisjZGVmaW5lIEZQU0lEX1ZBUklBTlRfQklUCSg0KQorI2RlZmluZSBGUFNJRF9WQVJJQU5UX01BU0sJKDB4RiAgPDwgRlBTSURfVkFSSUFOVF9CSVQpCisjZGVmaW5lIEZQU0lEX1JFVl9CSVQJCSgwKQorI2RlZmluZSBGUFNJRF9SRVZfTUFTSwkJKDB4RiAgPDwgRlBTSURfUkVWX0JJVCkKKworLyogRlBFWEMgYml0cyAqLworI2RlZmluZSBGUEVYQ19FWENFUFRJT04JCSgxPDwzMSkKKyNkZWZpbmUgRlBFWENfRU5BQkxFCQkoMTw8MzApCisKKy8qIEZQU0NSIGJpdHMgKi8KKyNkZWZpbmUgRlBTQ1JfREVGQVVMVF9OQU4JKDE8PDI1KQorI2RlZmluZSBGUFNDUl9GTFVTSFRPWkVSTwkoMTw8MjQpCisjZGVmaW5lIEZQU0NSX1JPVU5EX05FQVJFU1QJKDA8PDIyKQorI2RlZmluZSBGUFNDUl9ST1VORF9QTFVTSU5GCSgxPDwyMikKKyNkZWZpbmUgRlBTQ1JfUk9VTkRfTUlOVVNJTkYJKDI8PDIyKQorI2RlZmluZSBGUFNDUl9ST1VORF9UT1pFUk8JKDM8PDIyKQorI2RlZmluZSBGUFNDUl9STU9ERV9CSVQJCSgyMikKKyNkZWZpbmUgRlBTQ1JfUk1PREVfTUFTSwkoMyA8PCBGUFNDUl9STU9ERV9CSVQpCisjZGVmaW5lIEZQU0NSX1NUUklERV9CSVQJKDIwKQorI2RlZmluZSBGUFNDUl9TVFJJREVfTUFTSwkoMyA8PCBGUFNDUl9TVFJJREVfQklUKQorI2RlZmluZSBGUFNDUl9MRU5HVEhfQklUCSgxNikKKyNkZWZpbmUgRlBTQ1JfTEVOR1RIX01BU0sJKDcgPDwgRlBTQ1JfTEVOR1RIX0JJVCkKKyNkZWZpbmUgRlBTQ1JfSU9FCQkoMTw8OCkKKyNkZWZpbmUgRlBTQ1JfRFpFCQkoMTw8OSkKKyNkZWZpbmUgRlBTQ1JfT0ZFCQkoMTw8MTApCisjZGVmaW5lIEZQU0NSX1VGRQkJKDE8PDExKQorI2RlZmluZSBGUFNDUl9JWEUJCSgxPDwxMikKKyNkZWZpbmUgRlBTQ1JfSURFCQkoMTw8MTUpCisjZGVmaW5lIEZQU0NSX0lPQwkJKDE8PDApCisjZGVmaW5lIEZQU0NSX0RaQwkJKDE8PDEpCisjZGVmaW5lIEZQU0NSX09GQwkJKDE8PDIpCisjZGVmaW5lIEZQU0NSX1VGQwkJKDE8PDMpCisjZGVmaW5lIEZQU0NSX0lYQwkJKDE8PDQpCisjZGVmaW5lIEZQU0NSX0lEQwkJKDE8PDcpCisKKy8qCisgKiBWRlA5LVMgc3BlY2lmaWMuCisgKi8KKyNkZWZpbmUgRlBJTlNUCQkJY3I5CisjZGVmaW5lIEZQSU5TVDIJCQljcjEwCisKKy8qIEZQRVhDIGJpdHMgKi8KKyNkZWZpbmUgRlBFWENfRlBWMgkJKDE8PDI4KQorI2RlZmluZSBGUEVYQ19MRU5HVEhfQklUCSg4KQorI2RlZmluZSBGUEVYQ19MRU5HVEhfTUFTSwkoNyA8PCBGUEVYQ19MRU5HVEhfQklUKQorI2RlZmluZSBGUEVYQ19JTlYJCSgxIDw8IDcpCisjZGVmaW5lIEZQRVhDX1VGQwkJKDEgPDwgMykKKyNkZWZpbmUgRlBFWENfT0ZDCQkoMSA8PCAyKQorI2RlZmluZSBGUEVYQ19JT0MJCSgxIDw8IDApCisKKy8qIEJpdCBwYXR0ZXJucyBmb3IgZGVjb2RpbmcgdGhlIHBhY2thZ2VkIG9wZXJhdGlvbiBkZXNjcmlwdG9ycyAqLworI2RlZmluZSBWRlBPUERFU0NfTEVOR1RIX0JJVAkoOSkKKyNkZWZpbmUgVkZQT1BERVNDX0xFTkdUSF9NQVNLCSgweDA3IDw8IFZGUE9QREVTQ19MRU5HVEhfQklUKQorI2RlZmluZSBWRlBPUERFU0NfVU5VU0VEX0JJVAkoMjQpCisjZGVmaW5lIFZGUE9QREVTQ19VTlVTRURfTUFTSwkoMHhGRiA8PCBWRlBPUERFU0NfVU5VU0VEX0JJVCkKKyNkZWZpbmUgVkZQT1BERVNDX09QREVTQ19NQVNLCSh+KFZGUE9QREVTQ19MRU5HVEhfTUFTSyB8IFZGUE9QREVTQ19VTlVTRURfTUFTSykpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vdmZwbWFjcm9zLmggYi9pbmNsdWRlL2FzbS1hcm0vdmZwbWFjcm9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTViZDZlNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS92ZnBtYWNyb3MuaApAQCAtMCwwICsxLDI1IEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tYXJtL3ZmcG1hY3Jvcy5oCisgKgorICogQXNzZW1ibGVyLW9ubHkgZmlsZSBjb250YWluaW5nIFZGUCBtYWNyb3MgYW5kIHJlZ2lzdGVyIGRlZmluaXRpb25zLgorICovCisjaW5jbHVkZSAidmZwLmgiCisKK0AgTWFjcm9zIHRvIGFsbG93IGJ1aWxkaW5nIHdpdGggb2xkIHRvb2xraXRzICh3aXRoIG5vIFZGUCBzdXBwb3J0KQorCS5tYWNybwlWRlBGTVJYLCByZCwgc3lzcmVnLCBjb25kCisJTVJDXGNvbmQJcDEwLCA3LCBccmQsIFxzeXNyZWcsIGNyMCwgMAlAIEZNUlgJXHJkLCBcc3lzcmVnCisJLmVuZG0KKworCS5tYWNybwlWRlBGTVhSLCBzeXNyZWcsIHJkLCBjb25kCisJTUNSXGNvbmQJcDEwLCA3LCBccmQsIFxzeXNyZWcsIGNyMCwgMAlAIEZNWFIJXHN5c3JlZywgXHJkCisJLmVuZG0KKworCUAgcmVhZCBhbGwgdGhlIHdvcmtpbmcgcmVnaXN0ZXJzIGJhY2sgaW50byB0aGUgVkZQCisJLm1hY3JvCVZGUEZMRE1JQSwgYmFzZQorCUxEQwlwMTEsIGNyMCwgW1xiYXNlXSwjMzMqNAkJICAgIEAgRkxETUlBWCBcYmFzZSEsIHtkMC1kMTV9CisJLmVuZG0KKworCUAgd3JpdGUgYWxsIHRoZSB3b3JraW5nIHJlZ2lzdGVycyBvdXQgb2YgdGhlIFZGUAorCS5tYWNybwlWRlBGU1RNSUEsIGJhc2UKKwlTVEMJcDExLCBjcjAsIFtcYmFzZV0sIzMzKjQJCSAgICBAIEZTVE1JQVggXGJhc2UhLCB7ZDAtZDE1fQorCS5lbmRtCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vdmdhLmggYi9pbmNsdWRlL2FzbS1hcm0vdmdhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI2ZTVlZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS92Z2EuaApAQCAtMCwwICsxLDEyIEBACisjaWZuZGVmIEFTTUFSTV9WR0FfSAorI2RlZmluZSBBU01BUk1fVkdBX0gKKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCisjZGVmaW5lIFZHQV9NQVBfTUVNKHgpCShQQ0lNRU1fQkFTRSArICh4KSkKKworI2RlZmluZSB2Z2FfcmVhZGIoeCkJKCooKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKil4KSkKKyNkZWZpbmUgdmdhX3dyaXRlYih4LHkpCSgqKCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopeSkgPSAoeCkpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3hvci5oIGIvaW5jbHVkZS9hc20tYXJtL3hvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3YzRjZjUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0veG9yLmgKQEAgLTAsMCArMSwxNDEgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL3hvci5oCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMSBSdXNzZWxsIEtpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMveG9yLmg+CisKKyNkZWZpbmUgX19YT1IoYTEsIGEyKSBhMSBePSBhMgorCisjZGVmaW5lIEdFVF9CTE9DS18yKGRzdCkgXAorCV9fYXNtX18oImxkbWlhCSUwLCB7JTEsICUyfSIgXAorCQk6ICI9ciIgKGRzdCksICI9ciIgKGExKSwgIj1yIiAoYTIpIFwKKwkJOiAiMCIgKGRzdCkpCisKKyNkZWZpbmUgR0VUX0JMT0NLXzQoZHN0KSBcCisJX19hc21fXygibGRtaWEJJTAsIHslMSwgJTIsICUzLCAlNH0iIFwKKwkJOiAiPXIiIChkc3QpLCAiPXIiIChhMSksICI9ciIgKGEyKSwgIj1yIiAoYTMpLCAiPXIiIChhNCkgXAorCQk6ICIwIiAoZHN0KSkKKworI2RlZmluZSBYT1JfQkxPQ0tfMihzcmMpIFwKKwlfX2FzbV9fKCJsZG1pYQklMCEsIHslMSwgJTJ9IiBcCisJCTogIj1yIiAoc3JjKSwgIj1yIiAoYjEpLCAiPXIiIChiMikgXAorCQk6ICIwIiAoc3JjKSk7IFwKKwlfX1hPUihhMSwgYjEpOyBfX1hPUihhMiwgYjIpOworCisjZGVmaW5lIFhPUl9CTE9DS180KHNyYykgXAorCV9fYXNtX18oImxkbWlhCSUwISwgeyUxLCAlMiwgJTMsICU0fSIgXAorCQk6ICI9ciIgKHNyYyksICI9ciIgKGIxKSwgIj1yIiAoYjIpLCAiPXIiIChiMyksICI9ciIgKGI0KSBcCisJCTogIjAiIChzcmMpKTsgXAorCV9fWE9SKGExLCBiMSk7IF9fWE9SKGEyLCBiMik7IF9fWE9SKGEzLCBiMyk7IF9fWE9SKGE0LCBiNCkKKworI2RlZmluZSBQVVRfQkxPQ0tfMihkc3QpIFwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RtaWEJJTAhLCB7JTIsICUzfSIgXAorCQk6ICI9ciIgKGRzdCkgXAorCQk6ICIwIiAoZHN0KSwgInIiIChhMSksICJyIiAoYTIpKQorCisjZGVmaW5lIFBVVF9CTE9DS180KGRzdCkgXAorCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdG1pYQklMCEsIHslMiwgJTMsICU0LCAlNX0iIFwKKwkJOiAiPXIiIChkc3QpIFwKKwkJOiAiMCIgKGRzdCksICJyIiAoYTEpLCAiciIgKGEyKSwgInIiIChhMyksICJyIiAoYTQpKQorCitzdGF0aWMgdm9pZAoreG9yX2FybTRyZWdzXzIodW5zaWduZWQgbG9uZyBieXRlcywgdW5zaWduZWQgbG9uZyAqcDEsIHVuc2lnbmVkIGxvbmcgKnAyKQoreworCXVuc2lnbmVkIGludCBsaW5lcyA9IGJ5dGVzIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpIC8gNDsKKwlyZWdpc3RlciB1bnNpZ25lZCBpbnQgYTEgX19hc21fXygicjQiKTsKKwlyZWdpc3RlciB1bnNpZ25lZCBpbnQgYTIgX19hc21fXygicjUiKTsKKwlyZWdpc3RlciB1bnNpZ25lZCBpbnQgYTMgX19hc21fXygicjYiKTsKKwlyZWdpc3RlciB1bnNpZ25lZCBpbnQgYTQgX19hc21fXygicjciKTsKKwlyZWdpc3RlciB1bnNpZ25lZCBpbnQgYjEgX19hc21fXygicjgiKTsKKwlyZWdpc3RlciB1bnNpZ25lZCBpbnQgYjIgX19hc21fXygicjkiKTsKKwlyZWdpc3RlciB1bnNpZ25lZCBpbnQgYjMgX19hc21fXygiaXAiKTsKKwlyZWdpc3RlciB1bnNpZ25lZCBpbnQgYjQgX19hc21fXygibHIiKTsKKworCWRvIHsKKwkJR0VUX0JMT0NLXzQocDEpOworCQlYT1JfQkxPQ0tfNChwMik7CisJCVBVVF9CTE9DS180KHAxKTsKKwl9IHdoaWxlICgtLWxpbmVzKTsKK30KKworc3RhdGljIHZvaWQKK3hvcl9hcm00cmVnc18zKHVuc2lnbmVkIGxvbmcgYnl0ZXMsIHVuc2lnbmVkIGxvbmcgKnAxLCB1bnNpZ25lZCBsb25nICpwMiwKKwkJdW5zaWduZWQgbG9uZyAqcDMpCit7CisJdW5zaWduZWQgaW50IGxpbmVzID0gYnl0ZXMgLyBzaXplb2YodW5zaWduZWQgbG9uZykgLyA0OworCXJlZ2lzdGVyIHVuc2lnbmVkIGludCBhMSBfX2FzbV9fKCJyNCIpOworCXJlZ2lzdGVyIHVuc2lnbmVkIGludCBhMiBfX2FzbV9fKCJyNSIpOworCXJlZ2lzdGVyIHVuc2lnbmVkIGludCBhMyBfX2FzbV9fKCJyNiIpOworCXJlZ2lzdGVyIHVuc2lnbmVkIGludCBhNCBfX2FzbV9fKCJyNyIpOworCXJlZ2lzdGVyIHVuc2lnbmVkIGludCBiMSBfX2FzbV9fKCJyOCIpOworCXJlZ2lzdGVyIHVuc2lnbmVkIGludCBiMiBfX2FzbV9fKCJyOSIpOworCXJlZ2lzdGVyIHVuc2lnbmVkIGludCBiMyBfX2FzbV9fKCJpcCIpOworCXJlZ2lzdGVyIHVuc2lnbmVkIGludCBiNCBfX2FzbV9fKCJsciIpOworCisJZG8geworCQlHRVRfQkxPQ0tfNChwMSk7CisJCVhPUl9CTE9DS180KHAyKTsKKwkJWE9SX0JMT0NLXzQocDMpOworCQlQVVRfQkxPQ0tfNChwMSk7CisJfSB3aGlsZSAoLS1saW5lcyk7Cit9CisKK3N0YXRpYyB2b2lkCit4b3JfYXJtNHJlZ3NfNCh1bnNpZ25lZCBsb25nIGJ5dGVzLCB1bnNpZ25lZCBsb25nICpwMSwgdW5zaWduZWQgbG9uZyAqcDIsCisJCXVuc2lnbmVkIGxvbmcgKnAzLCB1bnNpZ25lZCBsb25nICpwNCkKK3sKKwl1bnNpZ25lZCBpbnQgbGluZXMgPSBieXRlcyAvIHNpemVvZih1bnNpZ25lZCBsb25nKSAvIDI7CisJcmVnaXN0ZXIgdW5zaWduZWQgaW50IGExIF9fYXNtX18oInI4Iik7CisJcmVnaXN0ZXIgdW5zaWduZWQgaW50IGEyIF9fYXNtX18oInI5Iik7CisJcmVnaXN0ZXIgdW5zaWduZWQgaW50IGIxIF9fYXNtX18oImlwIik7CisJcmVnaXN0ZXIgdW5zaWduZWQgaW50IGIyIF9fYXNtX18oImxyIik7CisKKwlkbyB7CisJCUdFVF9CTE9DS18yKHAxKTsKKwkJWE9SX0JMT0NLXzIocDIpOworCQlYT1JfQkxPQ0tfMihwMyk7CisJCVhPUl9CTE9DS18yKHA0KTsKKwkJUFVUX0JMT0NLXzIocDEpOworCX0gd2hpbGUgKC0tbGluZXMpOworfQorCitzdGF0aWMgdm9pZAoreG9yX2FybTRyZWdzXzUodW5zaWduZWQgbG9uZyBieXRlcywgdW5zaWduZWQgbG9uZyAqcDEsIHVuc2lnbmVkIGxvbmcgKnAyLAorCQl1bnNpZ25lZCBsb25nICpwMywgdW5zaWduZWQgbG9uZyAqcDQsIHVuc2lnbmVkIGxvbmcgKnA1KQoreworCXVuc2lnbmVkIGludCBsaW5lcyA9IGJ5dGVzIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpIC8gMjsKKwlyZWdpc3RlciB1bnNpZ25lZCBpbnQgYTEgX19hc21fXygicjgiKTsKKwlyZWdpc3RlciB1bnNpZ25lZCBpbnQgYTIgX19hc21fXygicjkiKTsKKwlyZWdpc3RlciB1bnNpZ25lZCBpbnQgYjEgX19hc21fXygiaXAiKTsKKwlyZWdpc3RlciB1bnNpZ25lZCBpbnQgYjIgX19hc21fXygibHIiKTsKKworCWRvIHsKKwkJR0VUX0JMT0NLXzIocDEpOworCQlYT1JfQkxPQ0tfMihwMik7CisJCVhPUl9CTE9DS18yKHAzKTsKKwkJWE9SX0JMT0NLXzIocDQpOworCQlYT1JfQkxPQ0tfMihwNSk7CisJCVBVVF9CTE9DS18yKHAxKTsKKwl9IHdoaWxlICgtLWxpbmVzKTsKK30KKworc3RhdGljIHN0cnVjdCB4b3JfYmxvY2tfdGVtcGxhdGUgeG9yX2Jsb2NrX2FybTRyZWdzID0geworCS5uYW1lCT0gImFybTRyZWdzIiwKKwkuZG9fMgk9IHhvcl9hcm00cmVnc18yLAorCS5kb18zCT0geG9yX2FybTRyZWdzXzMsCisJLmRvXzQJPSB4b3JfYXJtNHJlZ3NfNCwKKwkuZG9fNQk9IHhvcl9hcm00cmVnc181LAorfTsKKworI3VuZGVmIFhPUl9UUllfVEVNUExBVEVTCisjZGVmaW5lIFhPUl9UUllfVEVNUExBVEVTCQkJXAorCWRvIHsJCQkJCVwKKwkJeG9yX3NwZWVkKCZ4b3JfYmxvY2tfYXJtNHJlZ3MpOwlcCisJCXhvcl9zcGVlZCgmeG9yX2Jsb2NrXzhyZWdzKTsJXAorCQl4b3Jfc3BlZWQoJnhvcl9ibG9ja18zMnJlZ3MpOwlcCisJfSB3aGlsZSAoMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybTI2L2Eub3V0LmggYi9pbmNsdWRlL2FzbS1hcm0yNi9hLm91dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliMjcwMmMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0yNi9hLm91dC5oCkBAIC0wLDAgKzEsMzggQEAKKyNpZm5kZWYgX19BUk1fQV9PVVRfSF9fCisjZGVmaW5lIF9fQVJNX0FfT1VUX0hfXworCisjaW5jbHVkZSA8bGludXgvcGVyc29uYWxpdHkuaD4KKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKworc3RydWN0IGV4ZWMKK3sKKyAgX191MzIgYV9pbmZvOwkJLyogVXNlIG1hY3JvcyBOX01BR0lDLCBldGMgZm9yIGFjY2VzcyAqLworICBfX3UzMiBhX3RleHQ7CQkvKiBsZW5ndGggb2YgdGV4dCwgaW4gYnl0ZXMgKi8KKyAgX191MzIgYV9kYXRhOwkJLyogbGVuZ3RoIG9mIGRhdGEsIGluIGJ5dGVzICovCisgIF9fdTMyIGFfYnNzOwkJLyogbGVuZ3RoIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSBhcmVhIGZvciBmaWxlLCBpbiBieXRlcyAqLworICBfX3UzMiBhX3N5bXM7CQkvKiBsZW5ndGggb2Ygc3ltYm9sIHRhYmxlIGRhdGEgaW4gZmlsZSwgaW4gYnl0ZXMgKi8KKyAgX191MzIgYV9lbnRyeTsJLyogc3RhcnQgYWRkcmVzcyAqLworICBfX3UzMiBhX3Ryc2l6ZTsJLyogbGVuZ3RoIG9mIHJlbG9jYXRpb24gaW5mbyBmb3IgdGV4dCwgaW4gYnl0ZXMgKi8KKyAgX191MzIgYV9kcnNpemU7CS8qIGxlbmd0aCBvZiByZWxvY2F0aW9uIGluZm8gZm9yIGRhdGEsIGluIGJ5dGVzICovCit9OworCisvKgorICogVGhpcyBpcyBhbHdheXMgdGhlIHNhbWUKKyAqLworI2RlZmluZSBOX1RYVEFERFIoYSkJKDB4MDAwMDgwMDApCisKKyNkZWZpbmUgTl9UUlNJWkUoYSkJKChhKS5hX3Ryc2l6ZSkKKyNkZWZpbmUgTl9EUlNJWkUoYSkJKChhKS5hX2Ryc2l6ZSkKKyNkZWZpbmUgTl9TWU1TSVpFKGEpCSgoYSkuYV9zeW1zKQorCisjZGVmaW5lIE1fQVJNIDEwMworCisjaWZkZWYgX19LRVJORUxfXworI2RlZmluZSBTVEFDS19UT1AJVEFTS19TSVpFCisjZW5kaWYKKworI2lmbmRlZiBMSUJSQVJZX1NUQVJUX1RFWFQKKyNkZWZpbmUgTElCUkFSWV9TVEFSVF9URVhUCSgweDAwYzAwMDAwKQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0FfT1VUX0dOVV9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybTI2L2Fzc2VtYmxlci5oIGIvaW5jbHVkZS9hc20tYXJtMjYvYXNzZW1ibGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNmOWFlYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybTI2L2Fzc2VtYmxlci5oCkBAIC0wLDAgKzEsMTA2IEBACisvKgorICogbGludXgvYXNtL2Fzc2VtYmxlci5oCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIGFybSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgZGVmaW5lcworICogZm9yIHRoZSBkaWZmZXJlbnQgcHJvY2Vzc29ycy4KKyAqCisgKiBEbyBub3QgaW5jbHVkZSBhbnkgQyBkZWNsYXJhdGlvbnMgaW4gdGhpcyBmaWxlIC0gaXQgaXMgaW5jbHVkZWQgYnkKKyAqIGFzc2VtYmxlciBzb3VyY2UuCisgKi8KKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjZXJyb3IgIk9ubHkgaW5jbHVkZSB0aGlzIGZyb20gYXNzZW1ibHkgY29kZSIKKyNlbmRpZgorCisvKgorICogRW5kaWFuIGluZGVwZW5kZW50IG1hY3JvcyBmb3Igc2hpZnRpbmcgYnl0ZXMgd2l0aGluIHJlZ2lzdGVycy4KKyAqLworI2RlZmluZSBwdWxsICAgICAgICAgICAgbHNyCisjZGVmaW5lIHB1c2ggICAgICAgICAgICBsc2wKKyNkZWZpbmUgYnl0ZSh4KSAgICAgICAgICh4KjgpCisKKyNpZmRlZiBfX1NURENfXworI2RlZmluZSBMT0FEUkVHUyhjb25kLCBiYXNlLCByZWdsaXN0Li4uKVwKKwlsZG0jI2NvbmQJYmFzZSxyZWdsaXN0XgorCisjZGVmaW5lIFJFVElOU1RSKGluc3RyLCByZWdzLi4uKVwKKwlpbnN0ciMjcwlyZWdzCisjZWxzZQorI2RlZmluZSBMT0FEUkVHUyhjb25kLCBiYXNlLCByZWdsaXN0Li4uKVwKKwlsZG0vKiovY29uZAliYXNlLHJlZ2xpc3ReCisKKyNkZWZpbmUgUkVUSU5TVFIoaW5zdHIsIHJlZ3MuLi4pXAorCWluc3RyLyoqL3MJcmVncworI2VuZGlmCisKKyNkZWZpbmUgTU9ERU5PUFwKKwltb3YJcjAsIHIwCisKKyNkZWZpbmUgTU9ERShzYXZlcmVnLHRtcHJlZyxtb2RlKSBcCisJbW92CXNhdmVyZWcsIHBjOyBcCisJYmljCXRtcHJlZywgc2F2ZXJlZywgJDB4MGMwMDAwMDM7IFwKKwlvcnIJdG1wcmVnLCB0bXByZWcsICRtb2RlOyBcCisJdGVxcAl0bXByZWcsICQwCisKKyNkZWZpbmUgUkVTVE9SRU1PREUoc2F2ZXJlZykgXAorCXRlcXAJc2F2ZXJlZywgJDAKKworI2RlZmluZSBTQVZFSVJRUyh0bXByZWcpCisKKyNkZWZpbmUgUkVTVE9SRUlSUVModG1wcmVnKQorCisjZGVmaW5lIERJU0FCTEVJUlFTKHRtcHJlZylcCisJdGVxcAlwYywgJDB4MDgwMDAwMDMKKworI2RlZmluZSBFTkFCTEVJUlFTKHRtcHJlZylcCisJdGVxcAlwYywgJDB4MDAwMDAwMDMKKworI2RlZmluZSBVU0VSTU9ERSh0bXByZWcpXAorCXRlcXAJcGMsICQweDAwMDAwMDAwO1wKKwltb3YJcjAsIHIwCisKKyNkZWZpbmUgU1ZDTU9ERSh0bXByZWcpXAorCXRlcXAJcGMsICQweDAwMDAwMDAzO1wKKwltb3YJcjAsIHIwCisKKworLyoKKyAqIFNhdmUgdGhlIGN1cnJlbnQgSVJRIHN0YXRlIGFuZCBkaXNhYmxlIElSUXMKKyAqIE5vdGUgdGhhdCB0aGlzIG1hY3JvIGFzc3VtZXMgRklRcyBhcmUgZW5hYmxlZCwgYW5kCisgKiB0aGF0IHRoZSBwcm9jZXNzb3IgaXMgaW4gU1ZDIG1vZGUuCisgKi8KKwkubWFjcm8Jc2F2ZV9hbmRfZGlzYWJsZV9pcnFzLCBvbGRjcHNyLCB0ZW1wCisgIG1vdiBcb2xkY3BzciwgcGMKKyAgb3JyIFx0ZW1wLCBcb2xkY3BzciwgIzB4MDgwMDAwMDAKKyAgdGVxcCBcdGVtcCwgIzAKKyAgLmVuZG0KKworLyoKKyAqIFJlc3RvcmUgaW50ZXJydXB0IHN0YXRlIHByZXZpb3VzbHkgc3RvcmVkIGluCisgKiBhIHJlZ2lzdGVyCisgKiAqKiBBY3R1YWxseSBkbyBub3RoaW5nIG9uIEFyYyAtIGhvcGUgdGhhdCB0aGUgY2FsbGVyIHVzZXMgYSBNT1ZTIFBDIHNvb24KKyAqIGFmdGVyIQorICovCisJLm1hY3JvCXJlc3RvcmVfaXJxcywgb2xkY3BzcgorICBAIFRoaXMgYmUgcmVzdG9yZV9pcnFzCisgIC5lbmRtCisKKy8qCisgKiBUaGVzZSB0d28gYXJlIHVzZWQgdG8gc2F2ZSBMUi9yZXN0b3JlIFBDIG92ZXIgYSB1c2VyLWJhc2VkIGFjY2Vzcy4KKyAqIFRoZSBvbGQgMjYtYml0IGFyY2hpdGVjdHVyZSByZXF1aXJlcyB0aGF0IHdlIHNhdmUgbHIgKFIxNCkKKyAqLworCS5tYWNybwlzYXZlX2xyCisJc3RyCWxyLCBbc3AsICMtNF0hCisJLmVuZG0KKworCS5tYWNybwlyZXN0b3JlX3BjCisJbGRtZmQJc3AhLCB7cGN9XgorCS5lbmRtCisKKyNkZWZpbmUgVVNFUih4Li4uKQkJCQlcCis5OTk5Ogl4OwkJCQkJXAorCS5zZWN0aW9uIF9fZXhfdGFibGUsImEiOwkJXAorCS5hbGlnbgkzOwkJCQlcCisJLmxvbmcJOTk5OWIsOTAwMWY7CQkJXAorCS5wcmV2aW91cworCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybTI2L2F0b21pYy5oIGIvaW5jbHVkZS9hc20tYXJtMjYvYXRvbWljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE4ODIzNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybTI2L2F0b21pYy5oCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtMjYvYXRvbWljLmgKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAxOTk2IFJ1c3NlbGwgS2luZy4KKyAqICBNb2RpZmllZCBmb3IgYXJtMjYgYnkgSWFuIE1vbHRvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIENoYW5nZWxvZzoKKyAqICAgMjUtMTEtMjAwNCBJTQlVcGRhdGVkIGZvciAyLjYuOQorICogICAyNy0wNi0xOTk2CVJNSwlDcmVhdGVkCisgKiAgIDEzLTA0LTE5OTcJUk1LCU1hZGUgZnVuY3Rpb25zIGF0b21pYyEKKyAqICAgMDctMTItMTk5NwlSTUsJVXBncmFkZWQgZm9yIHYyLjEuCisgKiAgIDI2LTA4LTE5OTgJUEpCCUFkZGVkICNpZmRlZiBfX0tFUk5FTF9fCisgKgorICogIEZJWE1FIC0gaXRzIHByb2JhYmx5IHdvcnRoIHNlZWluZyB3aGF0IHRoZXNlIGNvbXBpbGUgaW50by4uLgorICovCisjaWZuZGVmIF9fQVNNX0FSTV9BVE9NSUNfSAorI2RlZmluZSBfX0FTTV9BUk1fQVRPTUlDX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjaWZkZWYgQ09ORklHX1NNUAorI2Vycm9yIFNNUCBpcyBOT1Qgc3VwcG9ydGVkCisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgeyB2b2xhdGlsZSBpbnQgY291bnRlcjsgfSBhdG9taWNfdDsKKworI2RlZmluZSBBVE9NSUNfSU5JVChpKQl7IChpKSB9CisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorCisjZGVmaW5lIGF0b21pY19yZWFkKHYpICgodiktPmNvdW50ZXIpCisjZGVmaW5lIGF0b21pY19zZXQodixpKQkoKCh2KS0+Y291bnRlcikgPSAoaSkpCisKK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pY19hZGRfcmV0dXJuKGludCBpLCBhdG9taWNfdCAqdikKK3sKKyAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKKyAgICAgICAgaW50IHZhbDsKKworICAgICAgICBsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisgICAgICAgIHZhbCA9IHYtPmNvdW50ZXI7CisgICAgICAgIHYtPmNvdW50ZXIgPSB2YWwgKz0gaTsKKyAgICAgICAgbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisgICAgICAgIHJldHVybiB2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pY19zdWJfcmV0dXJuKGludCBpLCBhdG9taWNfdCAqdikKK3sKKyAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKKyAgICAgICAgaW50IHZhbDsKKworICAgICAgICBsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisgICAgICAgIHZhbCA9IHYtPmNvdW50ZXI7CisgICAgICAgIHYtPmNvdW50ZXIgPSB2YWwgLT0gaTsKKyAgICAgICAgbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisgICAgICAgIHJldHVybiB2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfY2xlYXJfbWFzayh1bnNpZ25lZCBsb25nIG1hc2ssIHVuc2lnbmVkIGxvbmcgKmFkZHIpCit7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKyAgICAgICAgbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworICAgICAgICAqYWRkciAmPSB+bWFzazsKKyAgICAgICAgbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCisjZGVmaW5lIGF0b21pY19hZGQoaSwgdikgICAgICAgICh2b2lkKSBhdG9taWNfYWRkX3JldHVybihpLCB2KQorI2RlZmluZSBhdG9taWNfaW5jKHYpICAgICAgICAgICAodm9pZCkgYXRvbWljX2FkZF9yZXR1cm4oMSwgdikKKyNkZWZpbmUgYXRvbWljX3N1YihpLCB2KSAgICAgICAgKHZvaWQpIGF0b21pY19zdWJfcmV0dXJuKGksIHYpCisjZGVmaW5lIGF0b21pY19kZWModikgICAgICAgICAgICh2b2lkKSBhdG9taWNfc3ViX3JldHVybigxLCB2KQorCisjZGVmaW5lIGF0b21pY19pbmNfYW5kX3Rlc3QodikgIChhdG9taWNfYWRkX3JldHVybigxLCB2KSA9PSAwKQorI2RlZmluZSBhdG9taWNfZGVjX2FuZF90ZXN0KHYpICAoYXRvbWljX3N1Yl9yZXR1cm4oMSwgdikgPT0gMCkKKyNkZWZpbmUgYXRvbWljX2luY19yZXR1cm4odikgICAgKGF0b21pY19hZGRfcmV0dXJuKDEsIHYpKQorI2RlZmluZSBhdG9taWNfZGVjX3JldHVybih2KSAgICAoYXRvbWljX3N1Yl9yZXR1cm4oMSwgdikpCisKKyNkZWZpbmUgYXRvbWljX2FkZF9uZWdhdGl2ZShpLHYpIChhdG9taWNfYWRkX3JldHVybihpLCB2KSA8IDApCisKKy8qIEF0b21pYyBvcGVyYXRpb25zIGFyZSBhbHJlYWR5IHNlcmlhbGl6aW5nIG9uIEFSTTI2ICovCisjZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19kZWMoKQliYXJyaWVyKCkKKyNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWNfZGVjKCkJYmFycmllcigpCisjZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19pbmMoKQliYXJyaWVyKCkKKyNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWNfaW5jKCkJYmFycmllcigpCisKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi9iaXRvcHMuaCBiL2luY2x1ZGUvYXNtLWFybTI2L2JpdG9wcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkMDYyZmIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0yNi9iaXRvcHMuaApAQCAtMCwwICsxLDMzMiBAQAorLyoKKyAqIENvcHlyaWdodCAxOTk1LCBSdXNzZWxsIEtpbmcuCisgKgorICogQmFzZWQgb24gdGhlIGFybTMyIHZlcnNpb24gYnkgUk1LIChhbmQgb3RoZXJzKS4gVGhlaXIgY29weXJpZ2h0cyBhcHBseSB0bworICogVGhvc2UgcGFydHMuCisgKiBNb2RpZmllZCBmb3IgYXJtMjYgYnkgSWFuIE1vbHRvbiBvbiAyNS8xMS8wNAorICoKKyAqIGJpdCAwIGlzIHRoZSBMU0Igb2YgYW4gInVuc2lnbmVkIGxvbmciIHF1YW50aXR5LgorICoKKyAqIFBsZWFzZSBub3RlIHRoYXQgdGhlIGNvZGUgaW4gdGhpcyBmaWxlIHNob3VsZCBuZXZlciBiZSBpbmNsdWRlZAorICogZnJvbSB1c2VyIHNwYWNlLiAgTWFueSBvZiB0aGVzZSBhcmUgbm90IGltcGxlbWVudGVkIGluIGFzc2VtYmxlcgorICogc2luY2UgdGhleSB3b3VsZCBiZSB0b28gY29zdGx5LiAgQWxzbywgdGhleSByZXF1aXJlIHByaXZpbGVnZWQKKyAqIGluc3RydWN0aW9ucyAod2hpY2ggYXJlIG5vdCBhdmFpbGFibGUgZnJvbSB1c2VyIG1vZGUpIHRvIGVuc3VyZQorICogdGhhdCB0aGV5IGFyZSBhdG9taWMuCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUk1fQklUT1BTX0gKKyNkZWZpbmUgX19BU01fQVJNX0JJVE9QU19ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKworI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCkJZG8geyB9IHdoaWxlICgwKQorCisvKgorICogVGhlc2UgZnVuY3Rpb25zIGFyZSB0aGUgYmFzaXMgb2Ygb3VyIGJpdCBvcHMuCisgKgorICogRmlyc3QsIHRoZSBhdG9taWMgYml0b3BzLiBUaGVzZSB1c2UgbmF0aXZlIGVuZGlhbi4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIF9fX19hdG9taWNfc2V0X2JpdCh1bnNpZ25lZCBpbnQgYml0LCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICpwKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBtYXNrID0gMVVMIDw8IChiaXQgJiAzMSk7CisKKwlwICs9IGJpdCA+PiA1OworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCSpwIHw9IG1hc2s7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19fX2F0b21pY19jbGVhcl9iaXQodW5zaWduZWQgaW50IGJpdCwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqcCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgbWFzayA9IDFVTCA8PCAoYml0ICYgMzEpOworCisJcCArPSBiaXQgPj4gNTsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkqcCAmPSB+bWFzazsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX19fYXRvbWljX2NoYW5nZV9iaXQodW5zaWduZWQgaW50IGJpdCwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqcCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgbWFzayA9IDFVTCA8PCAoYml0ICYgMzEpOworCisJcCArPSBiaXQgPj4gNTsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkqcCBePSBtYXNrOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK19fX19hdG9taWNfdGVzdF9hbmRfc2V0X2JpdCh1bnNpZ25lZCBpbnQgYml0LCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICpwKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IHJlczsKKwl1bnNpZ25lZCBsb25nIG1hc2sgPSAxVUwgPDwgKGJpdCAmIDMxKTsKKworCXAgKz0gYml0ID4+IDU7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJcmVzID0gKnA7CisJKnAgPSByZXMgfCBtYXNrOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCXJldHVybiByZXMgJiBtYXNrOworfQorCitzdGF0aWMgaW5saW5lIGludAorX19fX2F0b21pY190ZXN0X2FuZF9jbGVhcl9iaXQodW5zaWduZWQgaW50IGJpdCwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqcCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCByZXM7CisJdW5zaWduZWQgbG9uZyBtYXNrID0gMVVMIDw8IChiaXQgJiAzMSk7CisKKwlwICs9IGJpdCA+PiA1OworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXJlcyA9ICpwOworCSpwID0gcmVzICYgfm1hc2s7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJcmV0dXJuIHJlcyAmIG1hc2s7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitfX19fYXRvbWljX3Rlc3RfYW5kX2NoYW5nZV9iaXQodW5zaWduZWQgaW50IGJpdCwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqcCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCByZXM7CisJdW5zaWduZWQgbG9uZyBtYXNrID0gMVVMIDw8IChiaXQgJiAzMSk7CisKKwlwICs9IGJpdCA+PiA1OworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXJlcyA9ICpwOworCSpwID0gcmVzIF4gbWFzazsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlyZXR1cm4gcmVzICYgbWFzazsKK30KKworLyoKKyAqIE5vdyB0aGUgbm9uLWF0b21pYyB2YXJpYW50cy4gIFdlIGxldCB0aGUgY29tcGlsZXIgaGFuZGxlIGFsbAorICogb3B0aW1pc2F0aW9ucyBmb3IgdGhlc2UuICBUaGVzZSBhcmUgYWxsIF9uYXRpdmVfIGVuZGlhbi4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIF9fc2V0X2JpdChpbnQgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKnApCit7CisJcFtuciA+PiA1XSB8PSAoMVVMIDw8IChuciAmIDMxKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2NsZWFyX2JpdChpbnQgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKnApCit7CisJcFtuciA+PiA1XSAmPSB+KDFVTCA8PCAobnIgJiAzMSkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19jaGFuZ2VfYml0KGludCBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqcCkKK3sKKwlwW25yID4+IDVdIF49ICgxVUwgPDwgKG5yICYgMzEpKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgX190ZXN0X2FuZF9zZXRfYml0KGludCBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqcCkKK3sKKwl1bnNpZ25lZCBsb25nIG9sZHZhbCwgbWFzayA9IDFVTCA8PCAobnIgJiAzMSk7CisKKwlwICs9IG5yID4+IDU7CisKKwlvbGR2YWwgPSAqcDsKKwkqcCA9IG9sZHZhbCB8IG1hc2s7CisJcmV0dXJuIG9sZHZhbCAmIG1hc2s7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fdGVzdF9hbmRfY2xlYXJfYml0KGludCBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqcCkKK3sKKwl1bnNpZ25lZCBsb25nIG9sZHZhbCwgbWFzayA9IDFVTCA8PCAobnIgJiAzMSk7CisKKwlwICs9IG5yID4+IDU7CisKKwlvbGR2YWwgPSAqcDsKKwkqcCA9IG9sZHZhbCAmIH5tYXNrOworCXJldHVybiBvbGR2YWwgJiBtYXNrOworfQorCitzdGF0aWMgaW5saW5lIGludCBfX3Rlc3RfYW5kX2NoYW5nZV9iaXQoaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICpwKQoreworCXVuc2lnbmVkIGxvbmcgb2xkdmFsLCBtYXNrID0gMVVMIDw8IChuciAmIDMxKTsKKworCXAgKz0gbnIgPj4gNTsKKworCW9sZHZhbCA9ICpwOworCSpwID0gb2xkdmFsIF4gbWFzazsKKwlyZXR1cm4gb2xkdmFsICYgbWFzazsKK30KKworLyoKKyAqIFRoaXMgcm91dGluZSBkb2Vzbid0IG5lZWQgdG8gYmUgYXRvbWljLgorICovCitzdGF0aWMgaW5saW5lIGludCBfX3Rlc3RfYml0KGludCBuciwgY29uc3Qgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqIHApCit7CisJcmV0dXJuIChwW25yID4+IDVdID4+IChuciAmIDMxKSkgJiAxVUw7Cit9CisKKy8qCisgKiBMaXR0bGUgZW5kaWFuIGFzc2VtYmx5IGJpdG9wcy4gIG5yID0gMCAtPiBieXRlIDAgYml0IDAuCisgKi8KK2V4dGVybiB2b2lkIF9zZXRfYml0X2xlKGludCBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqIHApOworZXh0ZXJuIHZvaWQgX2NsZWFyX2JpdF9sZShpbnQgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKiBwKTsKK2V4dGVybiB2b2lkIF9jaGFuZ2VfYml0X2xlKGludCBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqIHApOworZXh0ZXJuIGludCBfdGVzdF9hbmRfc2V0X2JpdF9sZShpbnQgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKiBwKTsKK2V4dGVybiBpbnQgX3Rlc3RfYW5kX2NsZWFyX2JpdF9sZShpbnQgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKiBwKTsKK2V4dGVybiBpbnQgX3Rlc3RfYW5kX2NoYW5nZV9iaXRfbGUoaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICogcCk7CitleHRlcm4gaW50IF9maW5kX2ZpcnN0X3plcm9fYml0X2xlKHZvaWQgKiBwLCB1bnNpZ25lZCBzaXplKTsKK2V4dGVybiBpbnQgX2ZpbmRfbmV4dF96ZXJvX2JpdF9sZSh2b2lkICogcCwgaW50IHNpemUsIGludCBvZmZzZXQpOworZXh0ZXJuIGludCBfZmluZF9maXJzdF9iaXRfbGUoY29uc3QgdW5zaWduZWQgbG9uZyAqcCwgdW5zaWduZWQgc2l6ZSk7CitleHRlcm4gaW50IF9maW5kX25leHRfYml0X2xlKGNvbnN0IHVuc2lnbmVkIGxvbmcgKnAsIGludCBzaXplLCBpbnQgb2Zmc2V0KTsKKworLyoKKyAqIFRoZSBfXyogZm9ybSBvZiBiaXRvcHMgYXJlIG5vbi1hdG9taWMgYW5kIG1heSBiZSByZW9yZGVyZWQuCisgKi8KKyNkZWZpbmUJQVRPTUlDX0JJVE9QX0xFKG5hbWUsbnIscCkJCVwKKwkoX19idWlsdGluX2NvbnN0YW50X3AobnIpID8JCVwKKwkgX19fX2F0b21pY18jI25hbWUobnIsIHApIDoJCVwKKwkgXyMjbmFtZSMjX2xlKG5yLHApKQorCisjZGVmaW5lIE5PTkFUT01JQ19CSVRPUChuYW1lLG5yLHApCQlcCisJKF9fX19ub25hdG9taWNfIyNuYW1lKG5yLCBwKSkKKworLyoKKyAqIFRoZXNlIGFyZSB0aGUgbGl0dGxlIGVuZGlhbiwgYXRvbWljIGRlZmluaXRpb25zLgorICovCisjZGVmaW5lIHNldF9iaXQobnIscCkJCQlBVE9NSUNfQklUT1BfTEUoc2V0X2JpdCxucixwKQorI2RlZmluZSBjbGVhcl9iaXQobnIscCkJCQlBVE9NSUNfQklUT1BfTEUoY2xlYXJfYml0LG5yLHApCisjZGVmaW5lIGNoYW5nZV9iaXQobnIscCkJCUFUT01JQ19CSVRPUF9MRShjaGFuZ2VfYml0LG5yLHApCisjZGVmaW5lIHRlc3RfYW5kX3NldF9iaXQobnIscCkJCUFUT01JQ19CSVRPUF9MRSh0ZXN0X2FuZF9zZXRfYml0LG5yLHApCisjZGVmaW5lIHRlc3RfYW5kX2NsZWFyX2JpdChucixwKQlBVE9NSUNfQklUT1BfTEUodGVzdF9hbmRfY2xlYXJfYml0LG5yLHApCisjZGVmaW5lIHRlc3RfYW5kX2NoYW5nZV9iaXQobnIscCkJQVRPTUlDX0JJVE9QX0xFKHRlc3RfYW5kX2NoYW5nZV9iaXQsbnIscCkKKyNkZWZpbmUgdGVzdF9iaXQobnIscCkJCQlfX3Rlc3RfYml0KG5yLHApCisjZGVmaW5lIGZpbmRfZmlyc3RfemVyb19iaXQocCxzeikJX2ZpbmRfZmlyc3RfemVyb19iaXRfbGUocCxzeikKKyNkZWZpbmUgZmluZF9uZXh0X3plcm9fYml0KHAsc3osb2ZmKQlfZmluZF9uZXh0X3plcm9fYml0X2xlKHAsc3osb2ZmKQorI2RlZmluZSBmaW5kX2ZpcnN0X2JpdChwLHN6KQkJX2ZpbmRfZmlyc3RfYml0X2xlKHAsc3opCisjZGVmaW5lIGZpbmRfbmV4dF9iaXQocCxzeixvZmYpCQlfZmluZF9uZXh0X2JpdF9sZShwLHN6LG9mZikKKworI2RlZmluZSBXT1JEX0JJVE9GRl9UT19MRSh4KQkJKCh4KSkKKworLyoKKyAqIGZmeiA9IEZpbmQgRmlyc3QgWmVybyBpbiB3b3JkLiBVbmRlZmluZWQgaWYgbm8gemVybyBleGlzdHMsCisgKiBzbyBjb2RlIHNob3VsZCBjaGVjayBhZ2FpbnN0IH4wVUwgZmlyc3QuLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZmZ6KHVuc2lnbmVkIGxvbmcgd29yZCkKK3sKKwlpbnQgazsKKworCXdvcmQgPSB+d29yZDsKKwlrID0gMzE7CisJaWYgKHdvcmQgJiAweDAwMDBmZmZmKSB7IGsgLT0gMTY7IHdvcmQgPDw9IDE2OyB9CisJaWYgKHdvcmQgJiAweDAwZmYwMDAwKSB7IGsgLT0gODsgIHdvcmQgPDw9IDg7ICB9CisJaWYgKHdvcmQgJiAweDBmMDAwMDAwKSB7IGsgLT0gNDsgIHdvcmQgPDw9IDQ7ICB9CisJaWYgKHdvcmQgJiAweDMwMDAwMDAwKSB7IGsgLT0gMjsgIHdvcmQgPDw9IDI7ICB9CisJaWYgKHdvcmQgJiAweDQwMDAwMDAwKSB7IGsgLT0gMTsgfQorICAgICAgICByZXR1cm4gazsKK30KKworLyoKKyAqIGZmeiA9IEZpbmQgRmlyc3QgWmVybyBpbiB3b3JkLiBVbmRlZmluZWQgaWYgbm8gemVybyBleGlzdHMsCisgKiBzbyBjb2RlIHNob3VsZCBjaGVjayBhZ2FpbnN0IH4wVUwgZmlyc3QuLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19mZnModW5zaWduZWQgbG9uZyB3b3JkKQoreworCWludCBrOworCisJayA9IDMxOworCWlmICh3b3JkICYgMHgwMDAwZmZmZikgeyBrIC09IDE2OyB3b3JkIDw8PSAxNjsgfQorCWlmICh3b3JkICYgMHgwMGZmMDAwMCkgeyBrIC09IDg7ICB3b3JkIDw8PSA4OyAgfQorCWlmICh3b3JkICYgMHgwZjAwMDAwMCkgeyBrIC09IDQ7ICB3b3JkIDw8PSA0OyAgfQorCWlmICh3b3JkICYgMHgzMDAwMDAwMCkgeyBrIC09IDI7ICB3b3JkIDw8PSAyOyAgfQorCWlmICh3b3JkICYgMHg0MDAwMDAwMCkgeyBrIC09IDE7IH0KKyAgICAgICAgcmV0dXJuIGs7Cit9CisKKy8qCisgKiBmbHM6IGZpbmQgbGFzdCBiaXQgc2V0LgorICovCisKKyNkZWZpbmUgZmxzKHgpIGdlbmVyaWNfZmxzKHgpCisKKy8qCisgKiBmZnM6IGZpbmQgZmlyc3QgYml0IHNldC4gVGhpcyBpcyBkZWZpbmVkIHRoZSBzYW1lIHdheSBhcworICogdGhlIGxpYmMgYW5kIGNvbXBpbGVyIGJ1aWx0aW4gZmZzIHJvdXRpbmVzLCB0aGVyZWZvcmUKKyAqIGRpZmZlcnMgaW4gc3Bpcml0IGZyb20gdGhlIGFib3ZlIGZmeiAobWFuIGZmcykuCisgKi8KKworI2RlZmluZSBmZnMoeCkgZ2VuZXJpY19mZnMoeCkKKworLyoKKyAqIEZpbmQgZmlyc3QgYml0IHNldCBpbiBhIDE2OC1iaXQgYml0bWFwLCB3aGVyZSB0aGUgZmlyc3QKKyAqIDEyOCBiaXRzIGFyZSB1bmxpa2VseSB0byBiZSBzZXQuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHNjaGVkX2ZpbmRfZmlyc3RfYml0KHVuc2lnbmVkIGxvbmcgKmIpCit7CisJdW5zaWduZWQgbG9uZyB2OworCXVuc2lnbmVkIGludCBvZmY7CisKKwlmb3IgKG9mZiA9IDA7IHYgPSBiW29mZl0sIG9mZiA8IDQ7IG9mZisrKSB7CisJCWlmICh1bmxpa2VseSh2KSkKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gX19mZnModikgKyBvZmYgKiAzMjsKK30KKworLyoKKyAqIGh3ZWlnaHROOiByZXR1cm5zIHRoZSBoYW1taW5nIHdlaWdodCAoaS5lLiB0aGUgbnVtYmVyCisgKiBvZiBiaXRzIHNldCkgb2YgYSBOLWJpdCB3b3JkCisgKi8KKworI2RlZmluZSBod2VpZ2h0MzIoeCkgZ2VuZXJpY19od2VpZ2h0MzIoeCkKKyNkZWZpbmUgaHdlaWdodDE2KHgpIGdlbmVyaWNfaHdlaWdodDE2KHgpCisjZGVmaW5lIGh3ZWlnaHQ4KHgpIGdlbmVyaWNfaHdlaWdodDgoeCkKKworLyoKKyAqIEV4dDIgaXMgZGVmaW5lZCB0byB1c2UgbGl0dGxlLWVuZGlhbiBieXRlIG9yZGVyaW5nLgorICogVGhlc2UgZG8gbm90IG5lZWQgdG8gYmUgYXRvbWljLgorICovCisjZGVmaW5lIGV4dDJfc2V0X2JpdChucixwKQkJCVwKKwkJX190ZXN0X2FuZF9zZXRfYml0KFdPUkRfQklUT0ZGX1RPX0xFKG5yKSwgKHVuc2lnbmVkIGxvbmcgKikocCkpCisjZGVmaW5lIGV4dDJfc2V0X2JpdF9hdG9taWMobG9jayxucixwKSAgICAgICAgICBcCisgICAgICAgICAgICAgICAgdGVzdF9hbmRfc2V0X2JpdChXT1JEX0JJVE9GRl9UT19MRShuciksICh1bnNpZ25lZCBsb25nICopKHApKQorI2RlZmluZSBleHQyX2NsZWFyX2JpdChucixwKQkJCVwKKwkJX190ZXN0X2FuZF9jbGVhcl9iaXQoV09SRF9CSVRPRkZfVE9fTEUobnIpLCAodW5zaWduZWQgbG9uZyAqKShwKSkKKyNkZWZpbmUgZXh0Ml9jbGVhcl9iaXRfYXRvbWljKGxvY2ssbnIscCkgICAgICAgIFwKKyAgICAgICAgICAgICAgICB0ZXN0X2FuZF9jbGVhcl9iaXQoV09SRF9CSVRPRkZfVE9fTEUobnIpLCAodW5zaWduZWQgbG9uZyAqKShwKSkKKyNkZWZpbmUgZXh0Ml90ZXN0X2JpdChucixwKQkJCVwKKwkJX190ZXN0X2JpdChXT1JEX0JJVE9GRl9UT19MRShuciksICh1bnNpZ25lZCBsb25nICopKHApKQorI2RlZmluZSBleHQyX2ZpbmRfZmlyc3RfemVyb19iaXQocCxzeikJCVwKKwkJX2ZpbmRfZmlyc3RfemVyb19iaXRfbGUocCxzeikKKyNkZWZpbmUgZXh0Ml9maW5kX25leHRfemVyb19iaXQocCxzeixvZmYpCVwKKwkJX2ZpbmRfbmV4dF96ZXJvX2JpdF9sZShwLHN6LG9mZikKKworLyoKKyAqIE1pbml4IGlzIGRlZmluZWQgdG8gdXNlIGxpdHRsZS1lbmRpYW4gYnl0ZSBvcmRlcmluZy4KKyAqIFRoZXNlIGRvIG5vdCBuZWVkIHRvIGJlIGF0b21pYy4KKyAqLworI2RlZmluZSBtaW5peF9zZXRfYml0KG5yLHApCQkJXAorCQlfX3NldF9iaXQoV09SRF9CSVRPRkZfVE9fTEUobnIpLCAodW5zaWduZWQgbG9uZyAqKShwKSkKKyNkZWZpbmUgbWluaXhfdGVzdF9iaXQobnIscCkJCQlcCisJCV9fdGVzdF9iaXQoV09SRF9CSVRPRkZfVE9fTEUobnIpLCAodW5zaWduZWQgbG9uZyAqKShwKSkKKyNkZWZpbmUgbWluaXhfdGVzdF9hbmRfc2V0X2JpdChucixwKQkJXAorCQlfX3Rlc3RfYW5kX3NldF9iaXQoV09SRF9CSVRPRkZfVE9fTEUobnIpLCAodW5zaWduZWQgbG9uZyAqKShwKSkKKyNkZWZpbmUgbWluaXhfdGVzdF9hbmRfY2xlYXJfYml0KG5yLHApCQlcCisJCV9fdGVzdF9hbmRfY2xlYXJfYml0KFdPUkRfQklUT0ZGX1RPX0xFKG5yKSwgKHVuc2lnbmVkIGxvbmcgKikocCkpCisjZGVmaW5lIG1pbml4X2ZpbmRfZmlyc3RfemVyb19iaXQocCxzeikJCVwKKwkJX2ZpbmRfZmlyc3RfemVyb19iaXRfbGUocCxzeikKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9BUk1fQklUT1BTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybTI2L2J1Zy5oIGIvaW5jbHVkZS9hc20tYXJtMjYvYnVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTIwYjcwNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybTI2L2J1Zy5oCkBAIC0wLDAgKzEsMTcgQEAKKyNpZm5kZWYgX0FTTUFSTV9CVUdfSAorI2RlZmluZSBfQVNNQVJNX0JVR19ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2lmZGVmIENPTkZJR19ERUJVR19CVUdWRVJCT1NFCitleHRlcm4gdm9sYXRpbGUgdm9pZCBfX2J1Zyhjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgdm9pZCAqZGF0YSk7CisvKiBnaXZlIGZpbGUvbGluZSBpbmZvcm1hdGlvbiAqLworI2RlZmluZSBCVUcoKQkJX19idWcoX19GSUxFX18sIF9fTElORV9fLCBOVUxMKQorI2Vsc2UKKyNkZWZpbmUgQlVHKCkJCSgqKGludCAqKTAgPSAwKQorI2VuZGlmCisKKyNkZWZpbmUgSEFWRV9BUkNIX0JVRworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2J1Zy5oPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybTI2L2J1Z3MuaCBiL2luY2x1ZGUvYXNtLWFybTI2L2J1Z3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTlhYzJlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtMjYvYnVncy5oCkBAIC0wLDAgKzEsMTUgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtMjYvYnVncy5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NSAgUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2lmbmRlZiBfX0FTTV9CVUdTX0gKKyNkZWZpbmUgX19BU01fQlVHU19ICisKKyNkZWZpbmUgY2hlY2tfYnVncygpIGNwdV9jaGVja19idWdzKCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi9ieXRlb3JkZXIuaCBiL2luY2x1ZGUvYXNtLWFybTI2L2J5dGVvcmRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiNGFmOWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0yNi9ieXRlb3JkZXIuaApAQCAtMCwwICsxLDI0IEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9ieXRlb3JkZXIuaAorICoKKyAqIEFSTSBFbmRpYW4tbmVzcy4gIEluIGxpdHRsZSBlbmRpYW4gbW9kZSwgdGhlIGRhdGEgYnVzIGlzIGNvbm5lY3RlZCBzdWNoCisgKiB0aGF0IGJ5dGUgYWNjZXNzZXMgYXBwZWFyIGFzOgorICogIDAgPSBkMC4uLmQ3LCAxID0gZDguLi5kMTUsIDIgPSBkMTYuLi5kMjMsIDMgPSBkMjQuLi5kMzEKKyAqIGFuZCB3b3JkIGFjY2Vzc2VzIChkYXRhIG9yIGluc3RydWN0aW9uKSBhcHBlYXIgYXM6CisgKiAgZDAuLi5kMzEKKyAqCisgKi8KKyNpZm5kZWYgX19BU01fQVJNX0JZVEVPUkRFUl9ICisjZGVmaW5lIF9fQVNNX0FSTV9CWVRFT1JERVJfSAorCisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisKKyNpZiAhZGVmaW5lZChfX1NUUklDVF9BTlNJX18pIHx8IGRlZmluZWQoX19LRVJORUxfXykKKyMgIGRlZmluZSBfX0JZVEVPUkRFUl9IQVNfVTY0X18KKyMgIGRlZmluZSBfX1NXQUJfNjRfVEhSVV8zMl9fCisjZW5kaWYKKworI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9saXR0bGVfZW5kaWFuLmg+CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi9jYWNoZS5oIGIvaW5jbHVkZS9hc20tYXJtMjYvY2FjaGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTJjYTFiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtMjYvY2FjaGUuaApAQCAtMCwwICsxLDExIEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybTI2L2NhY2hlLmgKKyAqLworI2lmbmRlZiBfX0FTTUFSTV9DQUNIRV9ICisjZGVmaW5lIF9fQVNNQVJNX0NBQ0hFX0gKKworI2RlZmluZSAgICAgICAgTDFfQ0FDSEVfQllURVMgIDMyCisjZGVmaW5lICAgICAgICBMMV9DQUNIRV9BTElHTih4KSAgICAgICAoKCh4KSsoTDFfQ0FDSEVfQllURVMtMSkpJn4oTDFfQ0FDSEVfQllURVMtMSkpCisjZGVmaW5lICAgICAgICBTTVBfQ0FDSEVfQllURVMgTDFfQ0FDSEVfQllURVMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi9jYWNoZWZsdXNoLmggYi9pbmNsdWRlL2FzbS1hcm0yNi9jYWNoZWZsdXNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWMxYjljNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybTI2L2NhY2hlZmx1c2guaApAQCAtMCwwICsxLDUyIEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9jYWNoZWZsdXNoLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDIgUnVzc2VsbCBLaW5nCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzIElhbiBNb2x0b24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIEFSTTI2IGNhY2hlICdmdW5jdGlvbnMnCisgKgorICovCisKKyNpZm5kZWYgX0FTTUFSTV9DQUNIRUZMVVNIX0gKKyNkZWZpbmUgX0FTTUFSTV9DQUNIRUZMVVNIX0gKKworI2lmIDEgICAgIC8vRklYTUUgLSBCQUQgSU5DTFVERVMhISEKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjZW5kaWYKKworI2RlZmluZSBmbHVzaF9jYWNoZV9hbGwoKSAgICAgICAgICAgICAgICAgICAgICAgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9jYWNoZV9tbShtbSkgICAgICAgICAgICAgICAgICAgICAgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9jYWNoZV9yYW5nZSh2bWEsc3RhcnQsZW5kKSAgICAgICAgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9jYWNoZV9wYWdlKHZtYSx2bWFkZHIscGZuKSAgICAgICAgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9jYWNoZV92bWFwKHN0YXJ0LCBlbmQpCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2NhY2hlX3Z1bm1hcChzdGFydCwgZW5kKQkJZG8geyB9IHdoaWxlICgwKQorCisjZGVmaW5lIGludmFsaWRhdGVfZGNhY2hlX3JhbmdlKHN0YXJ0LGVuZCkgICAgICBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGNsZWFuX2RjYWNoZV9yYW5nZShzdGFydCxlbmQpICAgICAgICAgICBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2RjYWNoZV9yYW5nZShzdGFydCxlbmQpICAgICAgICAgICBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpICAgICAgICAgICAgICAgICBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2RjYWNoZV9tbWFwX2xvY2sobWFwcGluZykJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfZGNhY2hlX21tYXBfdW5sb2NrKG1hcHBpbmcpCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgY2xlYW5fZGNhY2hlX2VudHJ5KF9zKSAgICAgICAgICAgICAgICAgIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgY2xlYW5fY2FjaGVfZW50cnkoX3N0YXJ0KSAgICAgICAgICAgICAgIGRvIHsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBmbHVzaF9pY2FjaGVfdXNlcl9yYW5nZShzdGFydCxlbmQsIGJvYiwgZnJlZCkgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9pY2FjaGVfcmFuZ2Uoc3RhcnQsZW5kKSAgICAgICAgICAgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9pY2FjaGVfcGFnZSh2bWEscGFnZSkgICAgICAgICAgICAgZG8geyB9IHdoaWxlICgwKQorCisjZGVmaW5lIGNvcHlfdG9fdXNlcl9wYWdlKHZtYSwgcGFnZSwgdmFkZHIsIGRzdCwgc3JjLCBsZW4pIFwKKwltZW1jcHkoZHN0LCBzcmMsIGxlbikKKyNkZWZpbmUgY29weV9mcm9tX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIHZhZGRyLCBkc3QsIHNyYywgbGVuKSBcCisJbWVtY3B5KGRzdCwgc3JjLCBsZW4pCisKKy8qIERBRzogQVJNMyB3aWxsIGZsdXNoIGNhY2hlIG9uIE1FTUMgdXBkYXRlcyBhbnl3YXk/IHNvIGRvbid0IGJvdGhlciAqLworLyogSU0gOiBZZXMsIGl0IHdpbGwsIGJ1dCBvbmx5IGlmIHNldHVwIHRvIGRvIHNvICh3ZSBkbyB0aGlzKS4gKi8KKyNkZWZpbmUgY2xlYW5fY2FjaGVfYXJlYShfc3RhcnQsX3NpemUpICAgICAgICAgIGRvIHsgfSB3aGlsZSAoMCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi9jaGVja3N1bS5oIGIvaW5jbHVkZS9hc20tYXJtMjYvY2hlY2tzdW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDI1NmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtMjYvY2hlY2tzdW0uaApAQCAtMCwwICsxLDE2MCBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vY2hlY2tzdW0uaAorICoKKyAqIElQIGNoZWNrc3VtIHJvdXRpbmVzCisgKgorICogQ29weXJpZ2h0IChDKSBPcmlnaW5hbCBhdXRob3JzIG9mIC4uL2FzbS1pMzg2L2NoZWNrc3VtLmgKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0xOTk5IFJ1c3NlbGwgS2luZworICovCisjaWZuZGVmIF9fQVNNX0FSTV9DSEVDS1NVTV9ICisjZGVmaW5lIF9fQVNNX0FSTV9DSEVDS1NVTV9ICisKKyNpbmNsdWRlIDxsaW51eC9pbjYuaD4KKworLyoKKyAqIGNvbXB1dGVzIHRoZSBjaGVja3N1bSBvZiBhIG1lbW9yeSBibG9jayBhdCBidWZmLCBsZW5ndGggbGVuLAorICogYW5kIGFkZHMgaW4gInN1bSIgKDMyLWJpdCkKKyAqCisgKiByZXR1cm5zIGEgMzItYml0IG51bWJlciBzdWl0YWJsZSBmb3IgZmVlZGluZyBpbnRvIGl0c2VsZgorICogb3IgY3N1bV90Y3B1ZHBfbWFnaWMKKyAqCisgKiB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGggZXZlbiBsZW5ndGhzLCBleGNlcHQKKyAqIGZvciB0aGUgbGFzdCBmcmFnbWVudCwgd2hpY2ggbWF5IGJlIG9kZAorICoKKyAqIGl0J3MgYmVzdCB0byBoYXZlIGJ1ZmYgYWxpZ25lZCBvbiBhIDMyLWJpdCBib3VuZGFyeQorICovCit1bnNpZ25lZCBpbnQgY3N1bV9wYXJ0aWFsKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiBidWZmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgc3VtKTsKKworLyoKKyAqIHRoZSBzYW1lIGFzIGNzdW1fcGFydGlhbCwgYnV0IGNvcGllcyBmcm9tIHNyYyB3aGlsZSBpdAorICogY2hlY2tzdW1zLCBhbmQgaGFuZGxlcyB1c2VyLXNwYWNlIHBvaW50ZXIgZXhjZXB0aW9ucyBjb3JyZWN0bHksIHdoZW4gbmVlZGVkLgorICoKKyAqIGhlcmUgZXZlbiBtb3JlIGltcG9ydGFudCB0byBhbGlnbiBzcmMgYW5kIGRzdCBvbiBhIDMyLWJpdCAob3IgZXZlbgorICogYmV0dGVyIDY0LWJpdCkgYm91bmRhcnkKKyAqLworCit1bnNpZ25lZCBpbnQKK2NzdW1fcGFydGlhbF9jb3B5X25vY2hlY2soY29uc3QgY2hhciAqc3JjLCBjaGFyICpkc3QsIGludCBsZW4sIGludCBzdW0pOworCit1bnNpZ25lZCBpbnQKK2NzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlcihjb25zdCBjaGFyIF9fdXNlciAqc3JjLCBjaGFyICpkc3QsIGludCBsZW4sIGludCBzdW0sIGludCAqZXJyX3B0cik7CisKKy8qCisgKiBUaGlzIGlzIHRoZSBvbGQgKGFuZCB1bnNhZmUpIHdheSBvZiBkb2luZyBjaGVja3N1bXMsIGEgd2FybmluZyBtZXNzYWdlIHdpbGwKKyAqIGJlIHByaW50ZWQgaWYgaXQgaXMgdXNlZCBhbmQgYW4gZXhjZXB0aW9uIG9jY3Vycy4KKyAqCisgKiB0aGlzIGZ1bmN0aW9ucyBzaG91bGQgZ28gYXdheSBhZnRlciBzb21lIHRpbWUuCisgKi8KKyNkZWZpbmUgY3N1bV9wYXJ0aWFsX2NvcHkoc3JjLGRzdCxsZW4sc3VtKQljc3VtX3BhcnRpYWxfY29weV9ub2NoZWNrKHNyYyxkc3QsbGVuLHN1bSkKKworLyoKKyAqCVRoaXMgaXMgYSB2ZXJzaW9uIG9mIGlwX2NvbXB1dGVfY3N1bSgpIG9wdGltaXplZCBmb3IgSVAgaGVhZGVycywKKyAqCXdoaWNoIGFsd2F5cyBjaGVja3N1bSBvbiA0IG9jdGV0IGJvdW5kYXJpZXMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQKK2lwX2Zhc3RfY3N1bSh1bnNpZ25lZCBjaGFyICogaXBoLCB1bnNpZ25lZCBpbnQgaWhsKQoreworCXVuc2lnbmVkIGludCBzdW0sIHRtcDE7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkibGRyCSUwLCBbJTFdLCAjNAkJQCBpcF9mYXN0X2NzdW0JCVxuXAorCWxkcgklMywgWyUxXSwgIzQJCQkJCVxuXAorCXN1YgklMiwgJTIsICM1CQkJCQlcblwKKwlhZGRzCSUwLCAlMCwgJTMJCQkJCVxuXAorCWxkcgklMywgWyUxXSwgIzQJCQkJCVxuXAorCWFkY3MJJTAsICUwLCAlMwkJCQkJXG5cCisJbGRyCSUzLCBbJTFdLCAjNAkJCQkJXG5cCisxOglhZGNzCSUwLCAlMCwgJTMJCQkJCVxuXAorCWxkcgklMywgWyUxXSwgIzQJCQkJCVxuXAorCXRzdAklMiwgIzE1CQkJQCBkbyB0aGlzIGNhcmVmdWxseQlcblwKKwlzdWJuZQklMiwgJTIsICMxCQlAIHdpdGhvdXQgZGVzdHJveWluZwlcblwKKwlibmUJMWIJCQlAIHRoZSBjYXJyeSBmbGFnCVxuXAorCWFkY3MJJTAsICUwLCAlMwkJCQkJXG5cCisJYWRjCSUwLCAlMCwgIzAJCQkJCVxuXAorCWFkZHMJJTAsICUwLCAlMCwgbHNsICMxNgkJCQlcblwKKwlhZGRjcwklMCwgJTAsICMweDEwMDAwCQkJCVxuXAorCW12bgklMCwgJTAJCQkJCQlcblwKKwltb3YJJTAsICUwLCBsc3IgIzE2IgorCTogIj1yIiAoc3VtKSwgIj1yIiAoaXBoKSwgIj1yIiAoaWhsKSwgIj1yIiAodG1wMSkKKwk6ICIxIiAoaXBoKSwgIjIiIChpaGwpCisJOiAiY2MiKTsKKwlyZXR1cm4gc3VtOworfQorCisvKgorICogCUZvbGQgYSBwYXJ0aWFsIGNoZWNrc3VtIHdpdGhvdXQgYWRkaW5nIHBzZXVkbyBoZWFkZXJzCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50Citjc3VtX2ZvbGQodW5zaWduZWQgaW50IHN1bSkKK3sKKwlfX2FzbV9fKAorCSJhZGRzCSUwLCAlMSwgJTEsIGxzbCAjMTYJQCBjc3VtX2ZvbGQJCVxuXAorCWFkZGNzCSUwLCAlMCwgIzB4MTAwMDAiCisJOiAiPXIiIChzdW0pCisJOiAiciIgKHN1bSkKKwk6ICJjYyIpOworCXJldHVybiAofnN1bSkgPj4gMTY7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50Citjc3VtX3RjcHVkcF9ub2ZvbGQodW5zaWduZWQgbG9uZyBzYWRkciwgdW5zaWduZWQgbG9uZyBkYWRkciwgdW5zaWduZWQgc2hvcnQgbGVuLAorCQkgICB1bnNpZ25lZCBpbnQgcHJvdG8sIHVuc2lnbmVkIGludCBzdW0pCit7CisJX19hc21fXygKKwkiYWRkcwklMCwgJTEsICUyCQlAIGNzdW1fdGNwdWRwX25vZm9sZAlcblwKKwlhZGNzCSUwLCAlMCwgJTMJCQkJCVxuXAorCWFkY3MJJTAsICUwLCAlNAkJCQkJXG5cCisJYWRjcwklMCwgJTAsICU1CQkJCQlcblwKKwlhZGMJJTAsICUwLCAjMCIKKwk6ICI9JnIiKHN1bSkKKwk6ICJyIiAoc3VtKSwgInIiIChkYWRkciksICJyIiAoc2FkZHIpLCAiciIgKG50b2hzKGxlbikpLCAiSXIiIChudG9ocyhwcm90bykpCisJOiAiY2MiKTsKKwlyZXR1cm4gc3VtOworfQkKKy8qCisgKiBjb21wdXRlcyB0aGUgY2hlY2tzdW0gb2YgdGhlIFRDUC9VRFAgcHNldWRvLWhlYWRlcgorICogcmV0dXJucyBhIDE2LWJpdCBjaGVja3N1bSwgYWxyZWFkeSBjb21wbGVtZW50ZWQKKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBpbnQKK2NzdW1fdGNwdWRwX21hZ2ljKHVuc2lnbmVkIGxvbmcgc2FkZHIsIHVuc2lnbmVkIGxvbmcgZGFkZHIsIHVuc2lnbmVkIHNob3J0IGxlbiwKKwkJICB1bnNpZ25lZCBpbnQgcHJvdG8sIHVuc2lnbmVkIGludCBzdW0pCit7CisJX19hc21fXygKKwkiYWRkcwklMCwgJTEsICUyCQlAIGNzdW1fdGNwdWRwX21hZ2ljCVxuXAorCWFkY3MJJTAsICUwLCAlMwkJCQkJXG5cCisJYWRjcwklMCwgJTAsICU0CQkJCQlcblwKKwlhZGNzCSUwLCAlMCwgJTUJCQkJCVxuXAorCWFkYwklMCwgJTAsICMwCQkJCQlcblwKKwlhZGRzCSUwLCAlMCwgJTAsIGxzbCAjMTYJCQkJXG5cCisJYWRkY3MJJTAsICUwLCAjMHgxMDAwMAkJCQlcblwKKwltdm4JJTAsICUwIgorCTogIj0mciIoc3VtKQorCTogInIiIChzdW0pLCAiciIgKGRhZGRyKSwgInIiIChzYWRkciksICJyIiAobnRvaHMobGVuKSksICJJciIgKG50b2hzKHByb3RvKSkKKwk6ICJjYyIpOworCXJldHVybiBzdW0gPj4gMTY7Cit9CisKKworLyoKKyAqIHRoaXMgcm91dGluZSBpcyB1c2VkIGZvciBtaXNjZWxsYW5lb3VzIElQLWxpa2UgY2hlY2tzdW1zLCBtYWlubHkKKyAqIGluIGljbXAuYworICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0CitpcF9jb21wdXRlX2NzdW0odW5zaWduZWQgY2hhciAqIGJ1ZmYsIGludCBsZW4pCit7CisJcmV0dXJuIGNzdW1fZm9sZChjc3VtX3BhcnRpYWwoYnVmZiwgbGVuLCAwKSk7Cit9CisKKyNkZWZpbmUgX0hBVkVfQVJDSF9JUFY2X0NTVU0KK2V4dGVybiB1bnNpZ25lZCBsb25nCitfX2NzdW1faXB2Nl9tYWdpYyhzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLCBfX3UzMiBsZW4sCisJCV9fdTMyIHByb3RvLCB1bnNpZ25lZCBpbnQgc3VtKTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBpbnQKK2NzdW1faXB2Nl9tYWdpYyhzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLCBfX3UzMiBsZW4sCisJCXVuc2lnbmVkIHNob3J0IHByb3RvLCB1bnNpZ25lZCBpbnQgc3VtKQoreworCXJldHVybiBjc3VtX2ZvbGQoX19jc3VtX2lwdjZfbWFnaWMoc2FkZHIsIGRhZGRyLCBodG9ubChsZW4pLAorCQkJCQkgICBodG9ubChwcm90byksIHN1bSkpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi9jb25zdGFudHMuaCBiL2luY2x1ZGUvYXNtLWFybTI2L2NvbnN0YW50cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMGIxNDQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0yNi9jb25zdGFudHMuaApAQCAtMCwwICsxLDI4IEBACisjaWZuZGVmIF9fQVNNX09GRlNFVFNfSF9fCisjZGVmaW5lIF9fQVNNX09GRlNFVFNfSF9fCisvKgorICogRE8gTk9UIE1PRElGWS4KKyAqCisgKiBUaGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBieSBhcmNoL2FybTI2L01ha2VmaWxlCisgKgorICovCisKKyNkZWZpbmUgVFNLX0FDVElWRV9NTSA5NiAvKiBvZmZzZXRvZihzdHJ1Y3QgdGFza19zdHJ1Y3QsIGFjdGl2ZV9tbSkgKi8KKworI2RlZmluZSBWTUFfVk1fTU0gMCAvKiBvZmZzZXRvZihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QsIHZtX21tKSAqLworI2RlZmluZSBWTUFfVk1fRkxBR1MgMjAgLyogb2Zmc2V0b2Yoc3RydWN0IHZtX2FyZWFfc3RydWN0LCB2bV9mbGFncykgKi8KKworI2RlZmluZSBWTV9FWEVDIDQgLyogVk1fRVhFQyAqLworCisKKyNkZWZpbmUgUEFHRV9QUkVTRU5UIDEgLyogTF9QVEVfUFJFU0VOVCAqLworI2RlZmluZSBQQUdFX1JFQURPTkxZIDk1IC8qIFBBR0VfUkVBRE9OTFkgKi8KKyNkZWZpbmUgUEFHRV9OT1RfVVNFUiAzIC8qIFBBR0VfTk9ORSAqLworI2RlZmluZSBQQUdFX09MRCAzIC8qIFBBR0VfTk9ORSAqLworI2RlZmluZSBQQUdFX0NMRUFOIDEyOCAvKiBMX1BURV9ESVJUWSAqLworCisjZGVmaW5lIFBBR0VfU1ogMzI3NjggLyogUEFHRV9TSVpFICovCisKKyNkZWZpbmUgU1lTX0VSUk9SMCAxMDQyMDIyNCAvKiAweDlmMDAwMCAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybTI2L2NwdXRpbWUuaCBiL2luY2x1ZGUvYXNtLWFybTI2L2NwdXRpbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjc4M2E5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtMjYvY3B1dGltZS5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfX0FSTTI2X0NQVVRJTUVfSAorI2RlZmluZSBfX0FSTTI2X0NQVVRJTUVfSAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvY3B1dGltZS5oPgorCisjZW5kaWYgLyogX19BUk0yNl9DUFVUSU1FX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybTI2L2N1cnJlbnQuaCBiL2luY2x1ZGUvYXNtLWFybTI2L2N1cnJlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWQyMWUyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtMjYvY3VycmVudC5oCkBAIC0wLDAgKzEsMTUgQEAKKyNpZm5kZWYgX0FTTUFSTV9DVVJSRU5UX0gKKyNkZWZpbmUgX0FTTUFSTV9DVVJSRU5UX0gKKworI2luY2x1ZGUgPGxpbnV4L3RocmVhZF9pbmZvLmg+CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRhc2tfc3RydWN0ICpnZXRfY3VycmVudCh2b2lkKSBfX2F0dHJpYnV0ZV9jb25zdF9fOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqZ2V0X2N1cnJlbnQodm9pZCkKK3sKKwlyZXR1cm4gY3VycmVudF90aHJlYWRfaW5mbygpLT50YXNrOworfQorCisjZGVmaW5lIGN1cnJlbnQgKGdldF9jdXJyZW50KCkpCisKKyNlbmRpZiAvKiBfQVNNQVJNX0NVUlJFTlRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtMjYvZGVsYXkuaCBiL2luY2x1ZGUvYXNtLWFybTI2L2RlbGF5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBmYmY3YgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybTI2L2RlbGF5LmgKQEAgLTAsMCArMSwzNCBAQAorI2lmbmRlZiBfX0FTTV9BUk1fREVMQVlfSAorI2RlZmluZSBfX0FTTV9BUk1fREVMQVlfSAorCisvKgorICogQ29weXJpZ2h0IChDKSAxOTk1IFJ1c3NlbGwgS2luZworICoKKyAqIERlbGF5IHJvdXRpbmVzLCB1c2luZyBhIHByZS1jb21wdXRlZCAibG9vcHNfcGVyX3NlY29uZCIgdmFsdWUuCisgKi8KKworZXh0ZXJuIHZvaWQgX19kZWxheShpbnQgbG9vcHMpOworCisvKgorICogZGl2aXNpb24gYnkgbXVsdGlwbGljYXRpb246IHlvdSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0CisgKiBsb3NzIG9mIHByZWNpc2lvbi4KKyAqCisgKiBVc2Ugb25seSBmb3IgdmVyeSBzbWFsbCBkZWxheXMgKCA8IDEgbXNlYykuICBTaG91bGQgcHJvYmFibHkgdXNlIGEKKyAqIGxvb2t1cCB0YWJsZSwgcmVhbGx5LCBhcyB0aGUgbXVsdGlwbGljYXRpb25zIHRha2UgbXVjaCB0b28gbG9uZyB3aXRoCisgKiBzaG9ydCBkZWxheXMuICBUaGlzIGlzIGEgInJlYXNvbmFibGUiIGltcGxlbWVudGF0aW9uLCB0aG91Z2ggKGFuZCB0aGUKKyAqIGZpcnN0IGNvbnN0YW50IG11bHRpcGxpY2F0aW9ucyBnZXRzIG9wdGltaXplZCBhd2F5IGlmIHRoZSBkZWxheSBpcworICogYSBjb25zdGFudCkKKyAqCisgKiBGSVhNRSAtIGxldHMgaW1wcm92ZSBpdCB0aGVuLi4uCisgKi8KK2V4dGVybiB2b2lkIHVkZWxheSh1bnNpZ25lZCBsb25nIHVzZWNzKTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG11bGRpdih1bnNpZ25lZCBsb25nIGEsIHVuc2lnbmVkIGxvbmcgYiwgdW5zaWduZWQgbG9uZyBjKQoreworCXJldHVybiBhICogYiAvIGM7Cit9CisKKwkKKworI2VuZGlmIC8qIGRlZmluZWQoX0FSTV9ERUxBWV9IKSAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi9kaXY2NC5oIGIvaW5jbHVkZS9hc20tYXJtMjYvZGl2NjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2Q5NzhjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtMjYvZGl2NjQuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZGl2NjQuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybTI2L2RtYS1tYXBwaW5nLmggYi9pbmNsdWRlL2FzbS1hcm0yNi9kbWEtbWFwcGluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5NWVhZTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0yNi9kbWEtbWFwcGluZy5oCkBAIC0wLDAgKzEsMiBAQAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2RtYS1tYXBwaW5nLWJyb2tlbi5oPgorCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi9kbWEuaCBiL2luY2x1ZGUvYXNtLWFybTI2L2RtYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5NWUyMjMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0yNi9kbWEuaApAQCAtMCwwICsxLDE4NCBAQAorI2lmbmRlZiBfX0FTTV9BUk1fRE1BX0gKKyNkZWZpbmUgX19BU01fQVJNX0RNQV9ICisKK3R5cGVkZWYgdW5zaWduZWQgaW50IGRtYWNoX3Q7CisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+CisjaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+CisKKy8vIEZJWE1FIC0gZG8gd2UgcmVhbGx5IG5lZWQgdGhpcz8gYXJtMjYgY2FudCBkbyAncHJvcGVyJyBETUEKKwordHlwZWRlZiBzdHJ1Y3QgZG1hX3N0cnVjdCBkbWFfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50IGRtYW1vZGVfdDsKKworc3RydWN0IGRtYV9vcHMgeworICAgICAgICBpbnQgICAgICgqcmVxdWVzdCkoZG1hY2hfdCwgZG1hX3QgKik7ICAgICAgICAgICAvKiBvcHRpb25hbCAqLworICAgICAgICB2b2lkICAgICgqZnJlZSkoZG1hY2hfdCwgZG1hX3QgKik7ICAgICAgICAgICAgICAvKiBvcHRpb25hbCAqLworICAgICAgICB2b2lkICAgICgqZW5hYmxlKShkbWFjaF90LCBkbWFfdCAqKTsgICAgICAgICAgICAvKiBtYW5kYXRvcnkgKi8KKyAgICAgICAgdm9pZCAgICAoKmRpc2FibGUpKGRtYWNoX3QsIGRtYV90ICopOyAgICAgICAgICAgLyogbWFuZGF0b3J5ICovCisgICAgICAgIGludCAgICAgKCpyZXNpZHVlKShkbWFjaF90LCBkbWFfdCAqKTsgICAgICAgICAgIC8qIG9wdGlvbmFsICovCisgICAgICAgIGludCAgICAgKCpzZXRzcGVlZCkoZG1hY2hfdCwgZG1hX3QgKiwgaW50KTsgICAgIC8qIG9wdGlvbmFsICovCisgICAgICAgIGNoYXIgICAgKnR5cGU7Cit9OworCitzdHJ1Y3QgZG1hX3N0cnVjdCB7CisgICAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCBidWY7ICAgICAgICAgLyogc2luZ2xlIERNQSAgICAgICAgICAgICAgICAgICAqLworICAgICAgICBpbnQgICAgICAgICAgICAgc2djb3VudDsgICAgICAgIC8qIG51bWJlciBvZiBETUEgU0cgICAgICAgICAgICAgKi8KKyAgICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsgICAgICAgICAvKiBETUEgU2NhdHRlci1HYXRoZXIgTGlzdCAgICAgICovCisKKyAgICAgICAgdW5zaWduZWQgaW50ICAgIGFjdGl2ZToxOyAgICAgICAvKiBUcmFuc2ZlciBhY3RpdmUgICAgICAgICAgICAgICovCisgICAgICAgIHVuc2lnbmVkIGludCAgICBpbnZhbGlkOjE7ICAgICAgLyogQWRkcmVzcy9Db3VudCBjaGFuZ2VkICAgICAgICAqLworICAgICAgICB1bnNpZ25lZCBpbnQgICAgdXNpbmdfc2c6MTsgICAgIC8qIHVzaW5nIHNjYXR0ZXIgbGlzdD8gICAgICAgICAgKi8KKyAgICAgICAgZG1hbW9kZV90ICAgICAgIGRtYV9tb2RlOyAgICAgICAvKiBETUEgbW9kZSAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIGludCAgICAgICAgICAgICBzcGVlZDsgICAgICAgICAgLyogRE1BIHNwZWVkICAgICAgICAgICAgICAgICAgICAqLworCisgICAgICAgIHVuc2lnbmVkIGludCAgICBsb2NrOyAgICAgICAgICAgLyogRGV2aWNlIGlzIGFsbG9jYXRlZCAgICAgICAgICAqLworICAgICAgICBjb25zdCBjaGFyICAgICAgKmRldmljZV9pZDsgICAgIC8qIERldmljZSBuYW1lICAgICAgICAgICAgICAgICAgKi8KKworICAgICAgICB1bnNpZ25lZCBpbnQgICAgZG1hX2Jhc2U7ICAgICAgIC8qIENvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICAgICAgKi8KKyAgICAgICAgaW50ICAgICAgICAgICAgIGRtYV9pcnE7ICAgICAgICAvKiBDb250cm9sbGVyIElSUSAgICAgICAgICAgICAgICovCisgICAgICAgIGludCAgICAgICAgICAgICBzdGF0ZTsgICAgICAgICAgLyogQ29udHJvbGxlciBzdGF0ZSAgICAgICAgICAgICAqLworICAgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgY3VyX3NnOyAgICAgIC8qIEN1cnJlbnQgY29udHJvbGxlciBidWZmZXIgICAgKi8KKworICAgICAgICBzdHJ1Y3QgZG1hX29wcyAgKmRfb3BzOworfTsKKworLyogUHJvdG90eXBlOiB2b2lkIGFyY2hfZG1hX2luaXQoZG1hKQorICogUHVycG9zZSAgOiBJbml0aWFsaXNlIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBETUEKKyAqIFBhcmFtcyAgIDogZG1hIC0gcG9pbnRlciB0byBhcnJheSBvZiBETUEgc3RydWN0dXJlcworICovCitleHRlcm4gdm9pZCBhcmNoX2RtYV9pbml0KGRtYV90ICpkbWEpOworCitleHRlcm4gdm9pZCBpc2FfaW5pdF9kbWEoZG1hX3QgKmRtYSk7CisKKworI2RlZmluZSBNQVhfRE1BX0FERFJFU1MgICAgICAgICAweDAzMDAwMDAwCisjZGVmaW5lIE1BWF9ETUFfQ0hBTk5FTFMgICAgICAgIDMKKworLyogQVJDICovCisjZGVmaW5lIERNQV9WSVJUVUFMX0ZMT1BQWTAgICAgIDAKKyNkZWZpbmUgRE1BX1ZJUlRVQUxfRkxPUFBZMSAgICAgMQorI2RlZmluZSBETUFfVklSVFVBTF9TT1VORCAgICAgICAyCisKKy8qIEE1SyAqLworI2RlZmluZSBETUFfRkxPUFBZICAgICAgICAgICAgICAwCisKKy8qCisgKiBETUEgbW9kZXMKKyAqLworI2RlZmluZSBETUFfTU9ERV9NQVNLCTMKKworI2RlZmluZSBETUFfTU9ERV9SRUFECSAwCisjZGVmaW5lIERNQV9NT0RFX1dSSVRFCSAxCisjZGVmaW5lIERNQV9NT0RFX0NBU0NBREUgMgorI2RlZmluZSBETUFfQVVUT0lOSVQJIDQKKworZXh0ZXJuIHNwaW5sb2NrX3QgIGRtYV9zcGluX2xvY2s7CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjbGFpbV9kbWFfbG9jayh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmRtYV9zcGluX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gZmxhZ3M7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByZWxlYXNlX2RtYV9sb2NrKHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZG1hX3NwaW5fbG9jaywgZmxhZ3MpOworfQorCisvKiBDbGVhciB0aGUgJ0RNQSBQb2ludGVyIEZsaXAgRmxvcCcuCisgKiBXcml0ZSAwIGZvciBMU0IvTVNCLCAxIGZvciBNU0IvTFNCIGFjY2Vzcy4KKyAqLworI2RlZmluZSBjbGVhcl9kbWFfZmYoY2hhbm5lbCkKKworLyogU2V0IG9ubHkgdGhlIHBhZ2UgcmVnaXN0ZXIgYml0cyBvZiB0aGUgdHJhbnNmZXIgYWRkcmVzcy4KKyAqCisgKiBOT1RFOiBUaGlzIGlzIGFuIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBmdW5jdGlvbiwgYW5kIHNob3VsZAorICogICAgICAgYmUgaGlkZGVuIGZyb20gdGhlIGRyaXZlcnMKKyAqLworZXh0ZXJuIHZvaWQgc2V0X2RtYV9wYWdlKGRtYWNoX3QgY2hhbm5lbCwgY2hhciBwYWdlbnIpOworCisvKiBSZXF1ZXN0IGEgRE1BIGNoYW5uZWwKKyAqCisgKiBTb21lIGFyY2hpdGVjdHVyZXMgbWF5IG5lZWQgdG8gZG8gYWxsb2NhdGUgYW4gaW50ZXJydXB0CisgKi8KK2V4dGVybiBpbnQgIHJlcXVlc3RfZG1hKGRtYWNoX3QgY2hhbm5lbCwgY29uc3QgY2hhciAqIGRldmljZV9pZCk7CisKKy8qIEZyZWUgYSBETUEgY2hhbm5lbAorICoKKyAqIFNvbWUgYXJjaGl0ZWN0dXJlcyBtYXkgbmVlZCB0byBkbyBmcmVlIGFuIGludGVycnVwdAorICovCitleHRlcm4gdm9pZCBmcmVlX2RtYShkbWFjaF90IGNoYW5uZWwpOworCisvKiBFbmFibGUgRE1BIGZvciB0aGlzIGNoYW5uZWwKKyAqCisgKiBPbiBzb21lIGFyY2hpdGVjdHVyZXMsIHRoaXMgbWF5IGhhdmUgb3RoZXIgc2lkZSBlZmZlY3RzIGxpa2UKKyAqIGVuYWJsaW5nIGFuIGludGVycnVwdCBhbmQgc2V0dGluZyB0aGUgRE1BIHJlZ2lzdGVycy4KKyAqLworZXh0ZXJuIHZvaWQgZW5hYmxlX2RtYShkbWFjaF90IGNoYW5uZWwpOworCisvKiBEaXNhYmxlIERNQSBmb3IgdGhpcyBjaGFubmVsCisgKgorICogT24gc29tZSBhcmNoaXRlY3R1cmVzLCB0aGlzIG1heSBoYXZlIG90aGVyIHNpZGUgZWZmZWN0cyBsaWtlCisgKiBkaXNhYmxpbmcgYW4gaW50ZXJydXB0IG9yIHdoYXRldmVyLgorICovCitleHRlcm4gdm9pZCBkaXNhYmxlX2RtYShkbWFjaF90IGNoYW5uZWwpOworCisvKiBUZXN0IHdoZXRoZXIgdGhlIHNwZWNpZmllZCBjaGFubmVsIGhhcyBhbiBhY3RpdmUgRE1BIHRyYW5zZmVyCisgKi8KK2V4dGVybiBpbnQgZG1hX2NoYW5uZWxfYWN0aXZlKGRtYWNoX3QgY2hhbm5lbCk7CisKKy8qIFNldCB0aGUgRE1BIHNjYXR0ZXIgZ2F0aGVyIGxpc3QgZm9yIHRoaXMgY2hhbm5lbAorICoKKyAqIFRoaXMgc2hvdWxkIG5vdCBiZSBjYWxsZWQgaWYgYSBETUEgY2hhbm5lbCBpcyBlbmFibGVkLAorICogZXNwZWNpYWxseSBzaW5jZSBzb21lIERNQSBhcmNoaXRlY3R1cmVzIGRvbid0IHVwZGF0ZSB0aGUKKyAqIERNQSBhZGRyZXNzIGltbWVkaWF0ZWx5LCBidXQgZGVmZXIgaXQgdG8gdGhlIGVuYWJsZV9kbWEoKS4KKyAqLworZXh0ZXJuIHZvaWQgc2V0X2RtYV9zZyhkbWFjaF90IGNoYW5uZWwsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBucl9zZyk7CisKKy8qIFNldCB0aGUgRE1BIGFkZHJlc3MgZm9yIHRoaXMgY2hhbm5lbAorICoKKyAqIFRoaXMgc2hvdWxkIG5vdCBiZSBjYWxsZWQgaWYgYSBETUEgY2hhbm5lbCBpcyBlbmFibGVkLAorICogZXNwZWNpYWxseSBzaW5jZSBzb21lIERNQSBhcmNoaXRlY3R1cmVzIGRvbid0IHVwZGF0ZSB0aGUKKyAqIERNQSBhZGRyZXNzIGltbWVkaWF0ZWx5LCBidXQgZGVmZXIgaXQgdG8gdGhlIGVuYWJsZV9kbWEoKS4KKyAqLworZXh0ZXJuIHZvaWQgc2V0X2RtYV9hZGRyKGRtYWNoX3QgY2hhbm5lbCwgdW5zaWduZWQgbG9uZyBwaHlzYWRkcik7CisKKy8qIFNldCB0aGUgRE1BIGJ5dGUgY291bnQgZm9yIHRoaXMgY2hhbm5lbAorICoKKyAqIFRoaXMgc2hvdWxkIG5vdCBiZSBjYWxsZWQgaWYgYSBETUEgY2hhbm5lbCBpcyBlbmFibGVkLAorICogZXNwZWNpYWxseSBzaW5jZSBzb21lIERNQSBhcmNoaXRlY3R1cmVzIGRvbid0IHVwZGF0ZSB0aGUKKyAqIERNQSBjb3VudCBpbW1lZGlhdGVseSwgYnV0IGRlZmVyIGl0IHRvIHRoZSBlbmFibGVfZG1hKCkuCisgKi8KK2V4dGVybiB2b2lkIHNldF9kbWFfY291bnQoZG1hY2hfdCBjaGFubmVsLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKKworLyogU2V0IHRoZSB0cmFuc2ZlciBkaXJlY3Rpb24gZm9yIHRoaXMgY2hhbm5lbAorICoKKyAqIFRoaXMgc2hvdWxkIG5vdCBiZSBjYWxsZWQgaWYgYSBETUEgY2hhbm5lbCBpcyBlbmFibGVkLAorICogZXNwZWNpYWxseSBzaW5jZSBzb21lIERNQSBhcmNoaXRlY3R1cmVzIGRvbid0IHVwZGF0ZSB0aGUKKyAqIERNQSB0cmFuc2ZlciBkaXJlY3Rpb24gaW1tZWRpYXRlbHksIGJ1dCBkZWZlciBpdCB0byB0aGUKKyAqIGVuYWJsZV9kbWEoKS4KKyAqLworZXh0ZXJuIHZvaWQgc2V0X2RtYV9tb2RlKGRtYWNoX3QgY2hhbm5lbCwgZG1hbW9kZV90IG1vZGUpOworCisvKiBTZXQgdGhlIHRyYW5zZmVyIHNwZWVkIGZvciB0aGlzIGNoYW5uZWwKKyAqLworZXh0ZXJuIHZvaWQgc2V0X2RtYV9zcGVlZChkbWFjaF90IGNoYW5uZWwsIGludCBjeWNsZV9ucyk7CisKKy8qIEdldCBETUEgcmVzaWR1ZSBjb3VudC4gQWZ0ZXIgYSBETUEgdHJhbnNmZXIsIHRoaXMKKyAqIHNob3VsZCByZXR1cm4gemVyby4gUmVhZGluZyB0aGlzIHdoaWxlIGEgRE1BIHRyYW5zZmVyIGlzCisgKiBzdGlsbCBpbiBwcm9ncmVzcyB3aWxsIHJldHVybiB1bnByZWRpY3RhYmxlIHJlc3VsdHMuCisgKiBJZiBjYWxsZWQgYmVmb3JlIHRoZSBjaGFubmVsIGhhcyBiZWVuIHVzZWQsIGl0IG1heSByZXR1cm4gMS4KKyAqIE90aGVyd2lzZSwgaXQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIF9ieXRlc18gbGVmdCB0byB0cmFuc2Zlci4KKyAqLworZXh0ZXJuIGludCAgZ2V0X2RtYV9yZXNpZHVlKGRtYWNoX3QgY2hhbm5lbCk7CisKKyNpZm5kZWYgTk9fRE1BCisjZGVmaW5lIE5PX0RNQQkyNTUKKyNlbmRpZgorCisjZW5kaWYgLyogX0FSTV9ETUFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtMjYvZWNhcmQuaCBiL2luY2x1ZGUvYXNtLWFybTI2L2VjYXJkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY2OTE5MwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybTI2L2VjYXJkLmgKQEAgLTAsMCArMSwyOTQgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0yNi9lY2FyZC5oCisgKgorICogZGVmaW5pdGlvbnMgZm9yIGV4cGFuc2lvbiBjYXJkcworICoKKyAqIFRoaXMgaXMgYSBuZXcgc3lzdGVtIGFzIGZyb20gTGludXggMS4yLjMKKyAqCisgKiBDaGFuZ2Vsb2c6CisgKiAgMTEtMTItMTk5NglSTUsJRnVydGhlciBtaW5vciBpbXByb3ZlbWVudHMKKyAqICAxMi0wOS0xOTk3CVJNSwlBZGRlZCBpbnRlcnJ1cHQgZW5hYmxlL2Rpc2FibGUgZm9yIGNhcmQgbGV2ZWwKKyAqICAxOC0wNS0yMDAzICBJTSAgICAgIEFkanVzdGVkIGZvciBBUk0yNgorICoKKyAqIFJlZmVyZW5jZTogQWNvcm5zIFJpc2MgT1MgMyBQcm9ncmFtbWVycyBSZWZlcmVuY2UgTWFudWFscy4KKyAqLworCisjaWZuZGVmIF9fQVNNX0VDQVJEX0gKKyNkZWZpbmUgX19BU01fRUNBUkRfSAorCisvKgorICogQ3VycmVudGx5IHVuZGVyc3Rvb2QgY2FyZHMgKGJ1dCBub3QgbmVjZXNzYXJpbHkKKyAqIHN1cHBvcnRlZCk6CisgKiAgICAgICAgICAgICAgICAgICAgICAgIE1hbnVmYWN0dXJlciAgUHJvZHVjdCBJRAorICovCisjZGVmaW5lIE1BTlVfQUNPUk4JCTB4MDAwMAorI2RlZmluZSBQUk9EX0FDT1JOX1NDU0kJCQkweDAwMDIKKyNkZWZpbmUgUFJPRF9BQ09STl9FVEhFUjEJCTB4MDAwMworI2RlZmluZSBQUk9EX0FDT1JOX01GTQkJCTB4MDAwYgorCisjZGVmaW5lIE1BTlVfQ0NPTkNFUFRTCQkweDAwMDkKKyNkZWZpbmUgUFJPRF9DQ09OQ0VQVFNfQ09MT1VSQ0FSRAkweDAwNTAKKworI2RlZmluZSBNQU5VX0FOVDIJCTB4MDAxMQorI2RlZmluZSBQUk9EX0FOVF9FVEhFUjMJCQkweDAwYTQKKworI2RlZmluZSBNQU5VX0FUT01XSURFCQkweDAwMTcKKyNkZWZpbmUgUFJPRF9BVE9NV0lERV8zUFNFUklBTAkJMHgwMDkwCisKKyNkZWZpbmUgTUFOVV9JUkxBTV9JTlNUUlVNRU5UUwkweDAwMWYKKyNkZWZpbmUgTUFOVV9JUkxBTV9JTlNUUlVNRU5UU19FVEhFUk4JMHg1Njc4CisKKyNkZWZpbmUgTUFOVV9PQUsJCTB4MDAyMQorI2RlZmluZSBQUk9EX09BS19TQ1NJCQkJMHgwMDU4CisKKyNkZWZpbmUgTUFOVV9NT1JMRVkJCTB4MDAyYgorI2RlZmluZSBQUk9EX01PUkxFWV9TQ1NJX1VOQ0FDSEVECTB4MDA2NworCisjZGVmaW5lIE1BTlVfQ1VNQU5BCQkweDAwM2EKKyNkZWZpbmUgUFJPRF9DVU1BTkFfU0NTSV8yCQkweDAwM2EKKyNkZWZpbmUgUFJPRF9DVU1BTkFfU0NTSV8xCQkweDAwYTAKKworI2RlZmluZSBNQU5VX0lDUwkJMHgwMDNjCisjZGVmaW5lIFBST0RfSUNTX0lERQkJCTB4MDBhZQorCisjZGVmaW5lIE1BTlVfSUNTMgkJMHgwMDNkCisjZGVmaW5lIFBST0RfSUNTMl9JREUJCQkweDAwYWUKKworI2RlZmluZSBNQU5VX1NFUlBPUlQJCTB4MDAzZgorI2RlZmluZSBQUk9EX1NFUlBPUlRfRFNQT1JUCQkweDAwYjkKKworI2RlZmluZSBNQU5VX0FSWEUJCTB4MDA0MQorI2RlZmluZSBQUk9EX0FSWEVfU0NTSQkJCTB4MDBiZQorCisjZGVmaW5lIE1BTlVfSTMJCQkweDAwNDYKKyNkZWZpbmUgUFJPRF9JM19FVEhFUkxBTjUwMAkJMHgwMGQ0CisjZGVmaW5lIFBST0RfSTNfRVRIRVJMQU42MDAJCTB4MDBlYworI2RlZmluZSBQUk9EX0kzX0VUSEVSTEFONjAwQQkJMHgwMTFlCisKKyNkZWZpbmUgTUFOVV9BTlQJCTB4MDA1MworI2RlZmluZSBQUk9EX0FOVF9FVEhFUk0JCQkweDAwZDgKKyNkZWZpbmUgUFJPRF9BTlRfRVRIRVJCCQkJMHgwMGU0CisKKyNkZWZpbmUgTUFOVV9BTFNZU1RFTVMJCTB4MDA1YgorI2RlZmluZSBQUk9EX0FMU1lTX1NDU0lBVEFQSQkJMHgwMTA3CisKKyNkZWZpbmUgTUFOVV9NQ1MJCTB4MDA2MworI2RlZmluZSBQUk9EX01DU19DT05ORUNUMzIJCTB4MDEyNQorCisjZGVmaW5lIE1BTlVfRUVTT1gJCTB4MDA2NAorI2RlZmluZSBQUk9EX0VFU09YX1NDU0kyCQkweDAwOGMKKworI2RlZmluZSBNQU5VX1lFTExPV1NUT05FCTB4MDA5NgorI2RlZmluZSBQUk9EX1lFTExPV1NUT05FX1JBUElERTMyCTB4MDEyMAorCisjZGVmaW5lIE1BTlVfU0lNVEVDICAgICAgICAgICAgIDB4MDA1ZgorI2RlZmluZSBQUk9EX1NJTVRFQ19JREU4ICAgICAgICAgICAgICAgIDB4MDEzMAorI2RlZmluZSBQUk9EX1NJTVRFQ19JREUxNiAgICAgICAgICAgICAgIDB4MDEzMQorCisKKyNpZmRlZiBFQ0FSRF9DCisjZGVmaW5lIENPTlNUCisjZWxzZQorI2RlZmluZSBDT05TVCBjb25zdAorI2VuZGlmCisKKyNkZWZpbmUgTUFYX0VDQVJEUwk0CisKK3R5cGVkZWYgZW51bSB7CQkJCS8qIENhcmRzIGFkZHJlc3Mgc3BhY2UJCSovCisJRUNBUkRfSU9DLAorCUVDQVJEX01FTUMsCisJRUNBUkRfRUFTSQorfSBjYXJkX3R5cGVfdDsKKwordHlwZWRlZiBlbnVtIHsJCQkJLyogU3BlZWQgZm9yIEVDQVJEX0lPQyBzcGFjZQkqLworCUVDQVJEX1NMT1cJID0gMCwKKwlFQ0FSRF9NRURJVU0JID0gMSwKKwlFQ0FSRF9GQVNUCSA9IDIsCisJRUNBUkRfU1lOQwkgPSAzCit9IGNhcmRfc3BlZWRfdDsKKworc3RydWN0IGVjYXJkX2lkIHsJCQkvKiBDYXJkIElEIHN0cnVjdHVyZQkJKi8KKwl1bnNpZ25lZCBzaG9ydAltYW51ZmFjdHVyZXI7CisJdW5zaWduZWQgc2hvcnQJcHJvZHVjdDsKKwl2b2lkCQkqZGF0YTsKK307CisKK3N0cnVjdCBpbl9lY2lkIHsJCQkvKiBQYWNrZWQgY2FyZCBJRCBpbmZvcm1hdGlvbgkqLworCXVuc2lnbmVkIHNob3J0CXByb2R1Y3Q7CS8qIFByb2R1Y3QgY29kZQkJCSovCisJdW5zaWduZWQgc2hvcnQJbWFudWZhY3R1cmVyOwkvKiBNYW51ZmFjdHVyZXIgY29kZQkJKi8KKwl1bnNpZ25lZCBjaGFyCWlkOjQ7CQkvKiBTaW1wbGUgSUQJCQkqLworCXVuc2lnbmVkIGNoYXIJY2Q6MTsJCS8qIENodW5rIGRpciBwcmVzZW50CQkqLworCXVuc2lnbmVkIGNoYXIJaXM6MTsJCS8qIEludGVycnVwdCBzdGF0dXMgcG9pbnRlcnMJKi8KKwl1bnNpZ25lZCBjaGFyCXc6MjsJCS8qIFdpZHRoCQkJKi8KKwl1bnNpZ25lZCBjaGFyCWNvdW50cnk7CS8qIENvdW50cnkJCQkqLworCXVuc2lnbmVkIGNoYXIJaXJxbWFzazsJLyogSVJRIG1hc2sJCQkqLworCXVuc2lnbmVkIGNoYXIJZmlxbWFzazsJLyogRklRIG1hc2sJCQkqLworCXVuc2lnbmVkIGxvbmcJaXJxb2ZmOwkJLyogSVJRIG9mZnNldAkJCSovCisJdW5zaWduZWQgbG9uZwlmaXFvZmY7CQkvKiBGSVEgb2Zmc2V0CQkJKi8KK307CisKK3R5cGVkZWYgc3RydWN0IGV4cGFuc2lvbl9jYXJkIGVjYXJkX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgKmxvYWRlcl90OworCit0eXBlZGVmIHN0cnVjdCB7CQkJLyogQ2FyZCBoYW5kbGVyIHJvdXRpbmVzCSovCisJdm9pZCAoKmlycWVuYWJsZSkoZWNhcmRfdCAqZWMsIGludCBpcnFucik7CisJdm9pZCAoKmlycWRpc2FibGUpKGVjYXJkX3QgKmVjLCBpbnQgaXJxbnIpOworCWludCAgKCppcnFwZW5kaW5nKShlY2FyZF90ICplYyk7CisJdm9pZCAoKmZpcWVuYWJsZSkoZWNhcmRfdCAqZWMsIGludCBmaXFucik7CisJdm9pZCAoKmZpcWRpc2FibGUpKGVjYXJkX3QgKmVjLCBpbnQgZmlxbnIpOworCWludCAgKCpmaXFwZW5kaW5nKShlY2FyZF90ICplYyk7Cit9IGV4cGFuc2lvbmNhcmRfb3BzX3Q7CisKKyNkZWZpbmUgRUNBUkRfTlVNX1JFU09VUkNFUwkoNikKKworI2RlZmluZSBFQ0FSRF9SRVNfSU9DU0xPVwkoMCkKKyNkZWZpbmUgRUNBUkRfUkVTX0lPQ01FRElVTQkoMSkKKyNkZWZpbmUgRUNBUkRfUkVTX0lPQ0ZBU1QJKDIpCisjZGVmaW5lIEVDQVJEX1JFU19JT0NTWU5DCSgzKQorI2RlZmluZSBFQ0FSRF9SRVNfTUVNQwkJKDQpCisjZGVmaW5lIEVDQVJEX1JFU19FQVNJCQkoNSkKKworI2RlZmluZSBlY2FyZF9yZXNvdXJjZV9zdGFydChlYyxucikJKChlYyktPnJlc291cmNlW25yXS5zdGFydCkKKyNkZWZpbmUgZWNhcmRfcmVzb3VyY2VfZW5kKGVjLG5yKQkoKGVjKS0+cmVzb3VyY2VbbnJdLmVuZCkKKyNkZWZpbmUgZWNhcmRfcmVzb3VyY2VfbGVuKGVjLG5yKQkoKGVjKS0+cmVzb3VyY2VbbnJdLmVuZCAtIFwKKwkJCQkJIChlYyktPnJlc291cmNlW25yXS5zdGFydCArIDEpCisKKy8qCisgKiBUaGlzIGNvbnRhaW5zIGFsbCB0aGUgaW5mbyBuZWVkZWQgb24gYW4gZXhwYW5zaW9uIGNhcmQKKyAqLworc3RydWN0IGV4cGFuc2lvbl9jYXJkIHsKKwlzdHJ1Y3QgZXhwYW5zaW9uX2NhcmQgICpuZXh0OworCisJc3RydWN0IGRldmljZQkJZGV2OworCXN0cnVjdCByZXNvdXJjZQkJcmVzb3VyY2VbRUNBUkRfTlVNX1JFU09VUkNFU107CisKKwkvKiBQdWJsaWMgZGF0YSAqLworCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKmlycWFkZHI7ICAgICAvKiBhZGRyZXNzIG9mIElSUSByZWdpc3RlciAqLworCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKmZpcWFkZHI7ICAgICAvKiBhZGRyZXNzIG9mIEZJUSByZWdpc3RlciAqLworCXVuc2lnbmVkIGNoYXIJCWlycW1hc2s7ICAgICAvKiBJUlEgbWFzayAqLworCXVuc2lnbmVkIGNoYXIJCWZpcW1hc2s7ICAgICAvKiBGSVEgbWFzayAqLworCXVuc2lnbmVkIGNoYXIgIAkJY2xhaW1lZDsgICAgIC8qIENhcmQgY2xhaW1lZD8gKi8KKworCXZvaWQJCQkqaXJxX2RhdGE7ICAgLyogRGF0YSBmb3IgdXNlIGZvciBJUlEgYnkgY2FyZCAqLworCXZvaWQJCQkqZmlxX2RhdGE7ICAgLyogRGF0YSBmb3IgdXNlIGZvciBGSVEgYnkgY2FyZCAqLworCWNvbnN0IGV4cGFuc2lvbmNhcmRfb3BzX3QgKm9wczsJICAgICAvKiBFbmFibGUvRGlzYWJsZSBPcHMgZm9yIGNhcmQgKi8KKworCUNPTlNUIHVuc2lnbmVkIGludAlzbG90X25vOyAgICAgLyogU2xvdCBudW1iZXIgKi8KKwlDT05TVCB1bnNpZ25lZCBpbnQJZG1hOyAgICAgICAgIC8qIERNQSBudW1iZXIgKGZvciByZXF1ZXN0X2RtYSkgKi8KKwlDT05TVCB1bnNpZ25lZCBpbnQJaXJxOyAgICAgICAgIC8qIElSUSBudW1iZXIgKGZvciByZXF1ZXN0X2lycSkgKi8KKwlDT05TVCB1bnNpZ25lZCBpbnQJZmlxOyAgICAgICAgIC8qIEZJUSBudW1iZXIgKGZvciByZXF1ZXN0X2lycSkgKi8KKwlDT05TVCBjYXJkX3R5cGVfdAl0eXBlOyAgICAgICAgLyogVHlwZSBvZiBjYXJkICovCisJQ09OU1Qgc3RydWN0IGluX2VjaWQJY2lkOyAgICAgICAgIC8qIENhcmQgSWRlbnRpZmljYXRpb24gKi8KKworCS8qIFByaXZhdGUgaW50ZXJuYWwgZGF0YSAqLworCWNvbnN0IGNoYXIJCSpjYXJkX2Rlc2M7ICAvKiBDYXJkIGRlc2NyaXB0aW9uICovCisJQ09OU1QgdW5zaWduZWQgaW50CXBvZGFkZHI7ICAgICAvKiBCYXNlIExpbnV4IGFkZHJlc3MgZm9yIGNhcmQgKi8KKwlDT05TVCBsb2FkZXJfdAkJbG9hZGVyOyAgICAgIC8qIGxvYWRlciBwcm9ncmFtICovCisJdTY0CQkJZG1hX21hc2s7Cit9OworCitzdHJ1Y3QgaW5fY2h1bmtfZGlyIHsKKwl1bnNpZ25lZCBpbnQgc3RhcnRfb2Zmc2V0OworCXVuaW9uIHsKKwkJdW5zaWduZWQgY2hhciBzdHJpbmdbMjU2XTsKKwkJdW5zaWduZWQgY2hhciBkYXRhWzFdOworCX0gZDsKK307CisKKy8qCisgKiBlY2FyZF9jbGFpbTogY2xhaW0gYW4gZXhwYW5zaW9uIGNhcmQgZW50cnkKKyAqIEZJWE1FIC0gYXJlIHRoZXNlIGF0b21pYyAvIGNhbGxlZCB3aXRoIGludGVycnVwdHMgb2ZmID8KKyAqLworI2RlZmluZSBlY2FyZF9jbGFpbShlYykgKChlYyktPmNsYWltZWQgPSAxKQorCisvKgorICogZWNhcmRfcmVsZWFzZTogcmVsZWFzZSBhbiBleHBhbnNpb24gY2FyZCBlbnRyeQorICovCisjZGVmaW5lIGVjYXJkX3JlbGVhc2UoZWMpICgoZWMpLT5jbGFpbWVkID0gMCkKKworLyoKKyAqIFJlYWQgYSBjaHVuayBmcm9tIGFuIGV4cGFuc2lvbiBjYXJkCisgKiBjZCA6IHdoZXJlIHRvIHB1dCByZWFkIGRhdGEKKyAqIGVjIDogZXhwYW5zaW9uIGNhcmQgaW5mbyBzdHJ1Y3QKKyAqIGlkIDogaWQgbnVtYmVyIHRvIGZpbmQKKyAqIG51bTogKG4rMSkndGggaWQgdG8gZmluZC4KKyAqLworZXh0ZXJuIGludCBlY2FyZF9yZWFkY2h1bmsgKHN0cnVjdCBpbl9jaHVua19kaXIgKmNkLCBzdHJ1Y3QgZXhwYW5zaW9uX2NhcmQgKmVjLCBpbnQgaWQsIGludCBudW0pOworCisvKgorICogT2J0YWluIHRoZSBhZGRyZXNzIG9mIGEgY2FyZAorICovCitleHRlcm4gdW5zaWduZWQgaW50IGVjYXJkX2FkZHJlc3MgKHN0cnVjdCBleHBhbnNpb25fY2FyZCAqZWMsIGNhcmRfdHlwZV90IGNhcmRfdHlwZSwgY2FyZF9zcGVlZF90IHNwZWVkKTsKKworI2lmZGVmIEVDQVJEX0MKKy8qIERlZmluaXRpb25zIGludGVybmFsIHRvIGVjYXJkLmMgLSBmb3IgaXQncyB1c2Ugb25seSEhCisgKgorICogRXh0ZXJuYWwgZXhwYW5zaW9uIGNhcmQgaGVhZGVyIGFzIHJlYWQgZnJvbSB0aGUgY2FyZAorICovCitzdHJ1Y3QgZXhfZWNpZCB7CisJdW5zaWduZWQgY2hhcglyX2lycToxOworCXVuc2lnbmVkIGNoYXIJcl96ZXJvOjE7CisJdW5zaWduZWQgY2hhcglyX2ZpcToxOworCXVuc2lnbmVkIGNoYXIJcl9pZDo0OworCXVuc2lnbmVkIGNoYXIJcl9hOjE7CisKKwl1bnNpZ25lZCBjaGFyCXJfY2Q6MTsKKwl1bnNpZ25lZCBjaGFyCXJfaXM6MTsKKwl1bnNpZ25lZCBjaGFyCXJfdzoyOworCXVuc2lnbmVkIGNoYXIJcl9yMTo0OworCisJdW5zaWduZWQgY2hhcglyX3IyOjg7CisKKwl1bnNpZ25lZCBjaGFyCXJfcHJvZFsyXTsKKworCXVuc2lnbmVkIGNoYXIJcl9tYW51WzJdOworCisJdW5zaWduZWQgY2hhcglyX2NvdW50cnk7CisKKwl1bnNpZ25lZCBjaGFyCXJfaXJxbWFzazsKKwl1bnNpZ25lZCBjaGFyCXJfaXJxb2ZmWzNdOworCisJdW5zaWduZWQgY2hhcglyX2ZpcW1hc2s7CisJdW5zaWduZWQgY2hhcglyX2ZpcW9mZlszXTsKK307CisKKy8qCisgKiBDaHVuayBkaXJlY3RvcnkgZW50cnkgYXMgcmVhZCBmcm9tIHRoZSBjYXJkCisgKi8KK3N0cnVjdCBleF9jaHVua19kaXIgeworCXVuc2lnbmVkIGNoYXIgcl9pZDsKKwl1bnNpZ25lZCBjaGFyIHJfbGVuWzNdOworCXVuc2lnbmVkIGxvbmcgcl9zdGFydDsKKwl1bmlvbiB7CisJCWNoYXIgc3RyaW5nWzI1Nl07CisJCWNoYXIgZGF0YVsxXTsKKwl9IGQ7CisjZGVmaW5lIGNfaWQoeCkJCSgoeCktPnJfaWQpCisjZGVmaW5lIGNfbGVuKHgpCSgoeCktPnJfbGVuWzBdfCgoeCktPnJfbGVuWzFdPDw4KXwoKHgpLT5yX2xlblsyXTw8MTYpKQorI2RlZmluZSBjX3N0YXJ0KHgpCSgoeCktPnJfc3RhcnQpCit9OworCisjZW5kaWYKKworZXh0ZXJuIHN0cnVjdCBidXNfdHlwZSBlY2FyZF9idXNfdHlwZTsKKworI2RlZmluZSBFQ0FSRF9ERVYoX2QpCWNvbnRhaW5lcl9vZigoX2QpLCBzdHJ1Y3QgZXhwYW5zaW9uX2NhcmQsIGRldikKKworc3RydWN0IGVjYXJkX2RyaXZlciB7CisJaW50CQkJKCpwcm9iZSkoc3RydWN0IGV4cGFuc2lvbl9jYXJkICosIGNvbnN0IHN0cnVjdCBlY2FyZF9pZCAqaWQpOworCXZvaWQJCQkoKnJlbW92ZSkoc3RydWN0IGV4cGFuc2lvbl9jYXJkICopOworCXZvaWQJCQkoKnNodXRkb3duKShzdHJ1Y3QgZXhwYW5zaW9uX2NhcmQgKik7CisJY29uc3Qgc3RydWN0IGVjYXJkX2lkCSppZF90YWJsZTsKKwl1bnNpZ25lZCBpbnQJCWlkOworCXN0cnVjdCBkZXZpY2VfZHJpdmVyCWRydjsKK307CisKKyNkZWZpbmUgRUNBUkRfRFJWKF9kKQljb250YWluZXJfb2YoKF9kKSwgc3RydWN0IGVjYXJkX2RyaXZlciwgZHJ2KQorCisjZGVmaW5lIGVjYXJkX3NldF9kcnZkYXRhKGVjLGRhdGEpCWRldl9zZXRfZHJ2ZGF0YSgmKGVjKS0+ZGV2LCAoZGF0YSkpCisjZGVmaW5lIGVjYXJkX2dldF9kcnZkYXRhKGVjKQkJZGV2X2dldF9kcnZkYXRhKCYoZWMpLT5kZXYpCisKK2ludCBlY2FyZF9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IGVjYXJkX2RyaXZlciAqKTsKK3ZvaWQgZWNhcmRfcmVtb3ZlX2RyaXZlcihzdHJ1Y3QgZWNhcmRfZHJpdmVyICopOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybTI2L2VsZi5oIGIvaW5jbHVkZS9hc20tYXJtMjYvZWxmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIxNDk0NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybTI2L2VsZi5oCkBAIC0wLDAgKzEsNzcgQEAKKyNpZm5kZWYgX19BU01BUk1fRUxGX0gKKyNkZWZpbmUgX19BU01BUk1fRUxGX0gKKworLyoKKyAqIEVMRiByZWdpc3RlciBkZWZpbml0aW9ucy4uCisgKi8KKworI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2luZm8uaD4KKworLy9GSVhNRSAtIGlzIGl0IGFsd2F5cyAzMksgPworCisjZGVmaW5lIEVMRl9FWEVDX1BBR0VTSVpFICAgICAgIDMyNzY4CisjZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCxpYmNzMikgc2V0X3BlcnNvbmFsaXR5KFBFUl9MSU5VWCkKKwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGVsZl9ncmVnX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgZWxmX2ZyZWdfdFszXTsKKworI2RlZmluZSBFTEZfTkdSRUcgKHNpemVvZiAoc3RydWN0IHB0X3JlZ3MpIC8gc2l6ZW9mKGVsZl9ncmVnX3QpKQordHlwZWRlZiBlbGZfZ3JlZ190IGVsZl9ncmVnc2V0X3RbRUxGX05HUkVHXTsKKwordHlwZWRlZiBzdHJ1Y3QgeyB2b2lkICpudWxsOyB9IGVsZl9mcHJlZ3NldF90OworCisvKgorICogVGhpcyBpcyB1c2VkIHRvIGVuc3VyZSB3ZSBkb24ndCBsb2FkIHNvbWV0aGluZyBmb3IgdGhlIHdyb25nIGFyY2hpdGVjdHVyZS4KKyAqIFdlIGNhbiBvbmx5IGV4ZWN1dGUgMjYtYml0IGNvZGUuCisgKi8KKworI2RlZmluZSBFTV9BUk0JNDAKKyNkZWZpbmUgRUZfQVJNX0FQQ1MyNiAweDA4CisKKy8vI2RlZmluZSBlbGZfY2hlY2tfYXJjaCh4KSAoICgoeCktPmVfbWFjaGluZSA9PSBFTV9BUk0pICYmICgoeCktPmVfZmxhZ3MgJiBFRl9BUk1fQVBDUzI2KSApICAgICAgRklYTUUhISEhISAtIHRoaXMgbG9va3MgT0ssIGJ1dCB0aGUgZmxhZ3Mgc2VlbSB0byBiZSB3cm9uZy4KKyNkZWZpbmUgZWxmX2NoZWNrX2FyY2goeCkgKDEpCisKKy8qCisgKiBUaGVzZSBhcmUgdXNlZCB0byBzZXQgcGFyYW1ldGVycyBpbiB0aGUgY29yZSBkdW1wcy4KKyAqLworI2RlZmluZSBFTEZfQ0xBU1MJRUxGQ0xBU1MzMgorI2RlZmluZSBFTEZfREFUQQlFTEZEQVRBMkxTQjsKKyNkZWZpbmUgRUxGX0FSQ0gJRU1fQVJNCisKKyNkZWZpbmUgVVNFX0VMRl9DT1JFX0RVTVAKKworLyogVGhpcyBpcyB0aGUgbG9jYXRpb24gdGhhdCBhbiBFVF9EWU4gcHJvZ3JhbSBpcyBsb2FkZWQgaWYgZXhlYydlZC4gIFR5cGljYWwKKyAgIHVzZSBvZiB0aGlzIGlzIHRvIGludm9rZSAiLi9sZC5zbyBzb21lcHJvZyIgdG8gdGVzdCBvdXQgYSBuZXcgdmVyc2lvbiBvZgorICAgdGhlIGxvYWRlci4gIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgaXQgaXMgb3V0IG9mIHRoZSB3YXkgb2YgdGhlIHByb2dyYW0KKyAgIHRoYXQgaXQgd2lsbCAiZXhlYyIsIGFuZCB0aGF0IHRoZXJlIGlzIHN1ZmZpY2llbnQgcm9vbSBmb3IgdGhlIGJyay4gICovCisKKyNkZWZpbmUgRUxGX0VUX0RZTl9CQVNFCSgyICogVEFTS19TSVpFIC8gMykKKworLyogV2hlbiB0aGUgcHJvZ3JhbSBzdGFydHMsIGExIGNvbnRhaW5zIGEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIHRvIGJlIAorICAgcmVnaXN0ZXJlZCB3aXRoIGF0ZXhpdCwgYXMgcGVyIHRoZSBTVlI0IEFCSS4gIEEgdmFsdWUgb2YgMCBtZWFucyB3ZSAKKyAgIGhhdmUgbm8gc3VjaCBoYW5kbGVyLiAgKi8KKyNkZWZpbmUgRUxGX1BMQVRfSU5JVChfciwgbG9hZF9hZGRyKQkoX3IpLT5BUk1fcjAgPSAwCisKKy8qIFRoaXMgeWllbGRzIGEgbWFzayB0aGF0IHVzZXIgcHJvZ3JhbXMgY2FuIHVzZSB0byBmaWd1cmUgb3V0IHdoYXQKKyAgIGluc3RydWN0aW9uIHNldCB0aGlzIGNwdSBzdXBwb3J0cy4gKi8KKworZXh0ZXJuIHVuc2lnbmVkIGludCBlbGZfaHdjYXA7CisjZGVmaW5lIEVMRl9IV0NBUAkoZWxmX2h3Y2FwKQorCisvKiBUaGlzIHlpZWxkcyBhIHN0cmluZyB0aGF0IGxkLnNvIHdpbGwgdXNlIHRvIGxvYWQgaW1wbGVtZW50YXRpb24KKyAgIHNwZWNpZmljIGxpYnJhcmllcyBmb3Igb3B0aW1pemF0aW9uLiAgVGhpcyBpcyBtb3JlIHNwZWNpZmljIGluCisgICBpbnRlbnQgdGhhbiBwb2tpbmcgYXQgdW5hbWUgb3IgL3Byb2MvY3B1aW5mby4gKi8KKworLyogRm9yIG5vdyB3ZSBqdXN0IHByb3ZpZGUgYSBmYWlybHkgZ2VuZXJhbCBzdHJpbmcgdGhhdCBkZXNjcmliZXMgdGhlCisgICBwcm9jZXNzb3IgZmFtaWx5LiAgVGhpcyBjb3VsZCBiZSBtYWRlIG1vcmUgc3BlY2lmaWMgbGF0ZXIgaWYgc29tZW9uZQorICAgaW1wbGVtZW50ZWQgb3B0aW1pc2F0aW9ucyB0aGF0IHJlcXVpcmUgaXQuICAyNi1iaXQgQ1BVcyBnaXZlIHlvdQorICAgInYxbCIgZm9yIEFSTTIgKG5vIFNXUCkgYW5kICJ2MmwiIGZvciBhbnl0aGluZyBlbHNlIChBUk0xIGlzbid0CisgICBzdXBwb3J0ZWQpLgorICovCisKKyNkZWZpbmUgRUxGX1BMQVRGT1JNX1NJWkUgOAorZXh0ZXJuIGNoYXIgZWxmX3BsYXRmb3JtW107CisjZGVmaW5lIEVMRl9QTEFURk9STQkoZWxmX3BsYXRmb3JtKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybTI2L2Vycm5vLmggYi9pbmNsdWRlL2FzbS1hcm0yNi9lcnJuby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlNjBmMDYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0yNi9lcnJuby5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfQVJNX0VSUk5PX0gKKyNkZWZpbmUgX0FSTV9FUlJOT19ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9lcnJuby5oPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybTI2L2ZjbnRsLmggYi9pbmNsdWRlL2FzbS1hcm0yNi9mY250bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4NWI2YmQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0yNi9mY250bC5oCkBAIC0wLDAgKzEsODcgQEAKKyNpZm5kZWYgX0FSTV9GQ05UTF9ICisjZGVmaW5lIF9BUk1fRkNOVExfSAorCisvKiBvcGVuL2ZjbnRsIC0gT19TWU5DIGlzIG9ubHkgaW1wbGVtZW50ZWQgb24gYmxvY2tzIGRldmljZXMgYW5kIG9uIGZpbGVzCisgICBsb2NhdGVkIG9uIGFuIGV4dDIgZmlsZSBzeXN0ZW0gKi8KKyNkZWZpbmUgT19BQ0NNT0RFCSAgIDAwMDMKKyNkZWZpbmUgT19SRE9OTFkJICAgICAwMAorI2RlZmluZSBPX1dST05MWQkgICAgIDAxCisjZGVmaW5lIE9fUkRXUgkJICAgICAwMgorI2RlZmluZSBPX0NSRUFUCQkgICAwMTAwCS8qIG5vdCBmY250bCAqLworI2RlZmluZSBPX0VYQ0wJCSAgIDAyMDAJLyogbm90IGZjbnRsICovCisjZGVmaW5lIE9fTk9DVFRZCSAgIDA0MDAJLyogbm90IGZjbnRsICovCisjZGVmaW5lIE9fVFJVTkMJCSAgMDEwMDAJLyogbm90IGZjbnRsICovCisjZGVmaW5lIE9fQVBQRU5ECSAgMDIwMDAKKyNkZWZpbmUgT19OT05CTE9DSwkgIDA0MDAwCisjZGVmaW5lIE9fTkRFTEFZCU9fTk9OQkxPQ0sKKyNkZWZpbmUgT19TWU5DCQkgMDEwMDAwCisjZGVmaW5lIEZBU1lOQwkJIDAyMDAwMAkvKiBmY250bCwgZm9yIEJTRCBjb21wYXRpYmlsaXR5ICovCisjZGVmaW5lIE9fRElSRUNUT1JZCSAwNDAwMDAJLyogbXVzdCBiZSBhIGRpcmVjdG9yeSAqLworI2RlZmluZSBPX05PRk9MTE9XCTAxMDAwMDAJLyogZG9uJ3QgZm9sbG93IGxpbmtzICovCisjZGVmaW5lIE9fRElSRUNUCTAyMDAwMDAJLyogZGlyZWN0IGRpc2sgYWNjZXNzIGhpbnQgLSBjdXJyZW50bHkgaWdub3JlZCAqLworI2RlZmluZSBPX0xBUkdFRklMRQkwNDAwMDAwCisjZGVmaW5lIE9fTk9BVElNRQkwMTAwMDAwMAorCisjZGVmaW5lIEZfRFVQRkQJCTAJLyogZHVwICovCisjZGVmaW5lIEZfR0VURkQJCTEJLyogZ2V0IGNsb3NlX29uX2V4ZWMgKi8KKyNkZWZpbmUgRl9TRVRGRAkJMgkvKiBzZXQvY2xlYXIgY2xvc2Vfb25fZXhlYyAqLworI2RlZmluZSBGX0dFVEZMCQkzCS8qIGdldCBmaWxlLT5mX2ZsYWdzICovCisjZGVmaW5lIEZfU0VURkwJCTQJLyogc2V0IGZpbGUtPmZfZmxhZ3MgKi8KKyNkZWZpbmUgRl9HRVRMSwkJNQorI2RlZmluZSBGX1NFVExLCQk2CisjZGVmaW5lIEZfU0VUTEtXCTcKKworI2RlZmluZSBGX1NFVE9XTgk4CS8qICBmb3Igc29ja2V0cy4gKi8KKyNkZWZpbmUgRl9HRVRPV04JOQkvKiAgZm9yIHNvY2tldHMuICovCisjZGVmaW5lIEZfU0VUU0lHCTEwCS8qICBmb3Igc29ja2V0cy4gKi8KKyNkZWZpbmUgRl9HRVRTSUcJMTEJLyogIGZvciBzb2NrZXRzLiAqLworCisjZGVmaW5lIEZfR0VUTEs2NAkxMgkvKiAgdXNpbmcgJ3N0cnVjdCBmbG9jazY0JyAqLworI2RlZmluZSBGX1NFVExLNjQJMTMKKyNkZWZpbmUgRl9TRVRMS1c2NAkxNAorCisvKiBmb3IgRl9bR0VUfFNFVF1GTCAqLworI2RlZmluZSBGRF9DTE9FWEVDCTEJLyogYWN0dWFsbHkgYW55dGhpbmcgd2l0aCBsb3cgYml0IHNldCBnb2VzICovCisKKy8qIGZvciBwb3NpeCBmY250bCgpIGFuZCBsb2NrZigpICovCisjZGVmaW5lIEZfUkRMQ0sJCTAKKyNkZWZpbmUgRl9XUkxDSwkJMQorI2RlZmluZSBGX1VOTENLCQkyCisKKy8qIGZvciBvbGQgaW1wbGVtZW50YXRpb24gb2YgYnNkIGZsb2NrICgpICovCisjZGVmaW5lIEZfRVhMQ0sJCTQJLyogb3IgMyAqLworI2RlZmluZSBGX1NITENLCQk4CS8qIG9yIDQgKi8KKworLyogZm9yIGxlYXNlcyAqLworI2RlZmluZSBGX0lOUFJPR1JFU1MJMTYKKworLyogb3BlcmF0aW9ucyBmb3IgYnNkIGZsb2NrKCksIGFsc28gdXNlZCBieSB0aGUga2VybmVsIGltcGxlbWVudGF0aW9uICovCisjZGVmaW5lIExPQ0tfU0gJCTEJLyogc2hhcmVkIGxvY2sgKi8KKyNkZWZpbmUgTE9DS19FWAkJMgkvKiBleGNsdXNpdmUgbG9jayAqLworI2RlZmluZSBMT0NLX05CCQk0CS8qIG9yJ2Qgd2l0aCBvbmUgb2YgdGhlIGFib3ZlIHRvIHByZXZlbnQKKwkJCQkgICBibG9ja2luZyAqLworI2RlZmluZSBMT0NLX1VOCQk4CS8qIHJlbW92ZSBsb2NrICovCisKKyNkZWZpbmUgTE9DS19NQU5ECTMyCS8qIFRoaXMgaXMgYSBtYW5kYXRvcnkgZmxvY2sgKi8KKyNkZWZpbmUgTE9DS19SRUFECTY0CS8qIC4uLiBXaGljaCBhbGxvd3MgY29uY3VycmVudCByZWFkIG9wZXJhdGlvbnMgKi8KKyNkZWZpbmUgTE9DS19XUklURQkxMjgJLyogLi4uIFdoaWNoIGFsbG93cyBjb25jdXJyZW50IHdyaXRlIG9wZXJhdGlvbnMgKi8KKyNkZWZpbmUgTE9DS19SVwkJMTkyCS8qIC4uLiBXaGljaCBhbGxvd3MgY29uY3VycmVudCByZWFkICYgd3JpdGUgb3BzICovCisKK3N0cnVjdCBmbG9jayB7CisJc2hvcnQgbF90eXBlOworCXNob3J0IGxfd2hlbmNlOworCW9mZl90IGxfc3RhcnQ7CisJb2ZmX3QgbF9sZW47CisJcGlkX3QgbF9waWQ7Cit9OworCitzdHJ1Y3QgZmxvY2s2NCB7CisJc2hvcnQgIGxfdHlwZTsKKwlzaG9ydCAgbF93aGVuY2U7CisJbG9mZl90IGxfc3RhcnQ7CisJbG9mZl90IGxfbGVuOworCXBpZF90ICBsX3BpZDsKK307CisKKyNkZWZpbmUgRl9MSU5VWF9TUEVDSUZJQ19CQVNFCTEwMjQKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtMjYvZmlxLmggYi9pbmNsdWRlL2FzbS1hcm0yNi9maXEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2JhZDA5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtMjYvZmlxLmgKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vZmlxLmgKKyAqCisgKiBTdXBwb3J0IGZvciBGSVEgb24gQVJNIGFyY2hpdGVjdHVyZXMuCisgKiBXcml0dGVuIGJ5IFBoaWxpcCBCbHVuZGVsbCA8cGhpbGJAZ251Lm9yZz4sIDE5OTgKKyAqIFJlLXdyaXR0ZW4gYnkgUnVzc2VsbCBLaW5nCisgKi8KKworI2lmbmRlZiBfX0FTTV9GSVFfSAorI2RlZmluZSBfX0FTTV9GSVFfSAorCisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorCitzdHJ1Y3QgZmlxX2hhbmRsZXIgeworCXN0cnVjdCBmaXFfaGFuZGxlciAqbmV4dDsKKwkvKiBOYW1lCisJICovCisJY29uc3QgY2hhciAqbmFtZTsKKwkvKiBDYWxsZWQgdG8gYXNrIGRyaXZlciB0byByZWxpbnF1aXNoLworCSAqIHJlYWNxdWlyZSBGSVEKKwkgKiByZXR1cm4gemVybyB0byBhY2NlcHQsIG9yIC08ZXJybm8+CisJICovCisJaW50ICgqZmlxX29wKSh2b2lkICosIGludCByZWxpbnF1aXNoKTsKKwkvKiBkYXRhIGZvciB0aGUgcmVsaW5xdWlzaC9yZWFjcXVpcmUgZnVuY3Rpb25zCisJICovCisJdm9pZCAqZGV2X2lkOworfTsKKworZXh0ZXJuIGludCBjbGFpbV9maXEoc3RydWN0IGZpcV9oYW5kbGVyICpmKTsKK2V4dGVybiB2b2lkIHJlbGVhc2VfZmlxKHN0cnVjdCBmaXFfaGFuZGxlciAqZik7CitleHRlcm4gdm9pZCBzZXRfZmlxX2hhbmRsZXIodm9pZCAqc3RhcnQsIHVuc2lnbmVkIGludCBsZW5ndGgpOworZXh0ZXJuIHZvaWQgc2V0X2ZpcV9yZWdzKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2V4dGVybiB2b2lkIGdldF9maXFfcmVncyhzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitleHRlcm4gdm9pZCBlbmFibGVfZmlxKGludCBmaXEpOworZXh0ZXJuIHZvaWQgZGlzYWJsZV9maXEoaW50IGZpcSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtMjYvZmxvcHB5LmggYi9pbmNsdWRlL2FzbS1hcm0yNi9mbG9wcHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTA5MGFkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtMjYvZmxvcHB5LmgKQEAgLTAsMCArMSwxNDEgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2Zsb3BweS5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwIFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIE5vdGUgdGhhdCB3ZSBkb24ndCB0b3VjaCBGTE9QUFlfRE1BIG5vciBGTE9QUFlfSVJRIGhlcmUKKyAqLworI2lmbmRlZiBfX0FTTV9BUk1fRkxPUFBZX0gKKyNkZWZpbmUgX19BU01fQVJNX0ZMT1BQWV9ICisKKyNkZWZpbmUgZmRfb3V0Yih2YWwscG9ydCkJCQlcCisJZG8gewkJCQkJXAorCQlpZiAoKHBvcnQpID09IEZEX0RPUikJCVwKKwkJCWZkX3NldGRvcigodmFsKSk7CVwKKwkJZWxzZQkJCQlcCisJCQlvdXRiKCh2YWwpLChwb3J0KSk7CVwKKwl9IHdoaWxlKDApCisKKyNkZWZpbmUgZmRfaW5iKHBvcnQpCQlpbmIoKHBvcnQpKQorI2RlZmluZSBmZF9yZXF1ZXN0X2lycSgpCXJlcXVlc3RfaXJxKElSUV9GTE9QUFlESVNLLGZsb3BweV9pbnRlcnJ1cHQsXAorCQkJCQlTQV9JTlRFUlJVUFR8U0FfU0FNUExFX1JBTkRPTSwiZmxvcHB5IixOVUxMKQorI2RlZmluZSBmZF9mcmVlX2lycSgpCQlmcmVlX2lycShJUlFfRkxPUFBZRElTSyxOVUxMKQorI2RlZmluZSBmZF9kaXNhYmxlX2lycSgpCWRpc2FibGVfaXJxKElSUV9GTE9QUFlESVNLKQorI2RlZmluZSBmZF9lbmFibGVfaXJxKCkJCWVuYWJsZV9pcnEoSVJRX0ZMT1BQWURJU0spCisKKyNkZWZpbmUgZmRfcmVxdWVzdF9kbWEoKQlyZXF1ZXN0X2RtYShETUFfRkxPUFBZLCJmbG9wcHkiKQorI2RlZmluZSBmZF9mcmVlX2RtYSgpCQlmcmVlX2RtYShETUFfRkxPUFBZKQorI2RlZmluZSBmZF9kaXNhYmxlX2RtYSgpCWRpc2FibGVfZG1hKERNQV9GTE9QUFkpCisjZGVmaW5lIGZkX2VuYWJsZV9kbWEoKQkJZW5hYmxlX2RtYShETUFfRkxPUFBZKQorI2RlZmluZSBmZF9jbGVhcl9kbWFfZmYoKQljbGVhcl9kbWFfZmYoRE1BX0ZMT1BQWSkKKyNkZWZpbmUgZmRfc2V0X2RtYV9tb2RlKG1vZGUpCXNldF9kbWFfbW9kZShETUFfRkxPUFBZLCAobW9kZSkpCisjZGVmaW5lIGZkX3NldF9kbWFfYWRkcihhZGRyKQlzZXRfZG1hX2FkZHIoRE1BX0ZMT1BQWSwgdmlydF90b19idXMoKGFkZHIpKSkKKyNkZWZpbmUgZmRfc2V0X2RtYV9jb3VudChsZW4pCXNldF9kbWFfY291bnQoRE1BX0ZMT1BQWSwgKGxlbikpCisjZGVmaW5lIGZkX2NhY2hlZmx1c2goYWRkcixzeikKKworLyogbmVlZCB0byBjbGVhbiB1cCBkbWEuaCAqLworI2RlZmluZSBETUFfRkxPUFBZRElTSwkJRE1BX0ZMT1BQWQorCisvKiBGbG9wcHlfc2VsZWN0cyBpcyB0aGUgbGlzdCBvZiBET1IncyB0byBzZWxlY3QgZHJpdmUgZmQKKyAqCisgKiBPbiBpbml0aWFsaXNhdGlvbiwgdGhlIGZsb3BweSBsaXN0IGlzIHNjYW5uZWQsIGFuZCB0aGUgZHJpdmVzIGFsbG9jYXRlZAorICogaW4gdGhlIG9yZGVyIHRoYXQgdGhleSBhcmUgZm91bmQuICBUaGlzIGlzIGRvbmUgYnkgc2Vla2luZyB0aGUgZHJpdmUKKyAqIHRvIGEgbm9uLXplcm8gdHJhY2ssIGFuZCB0aGVuIHJlc3RvcmluZyBpdCB0byB0cmFjayAwLiAgSWYgYW4gZXJyb3Igb2NjdXJzLAorICogdGhlbiB0aGVyZSBpcyBubyBmbG9wcHkgZHJpdmUgcHJlc2VudC4gICAgICAgW3RvIGJlIHB1dCBiYWNrIGluIGFnYWluXQorICovCitzdGF0aWMgdW5zaWduZWQgY2hhciBmbG9wcHlfc2VsZWN0c1syXVs0XSA9Cit7CisJeyAweDEwLCAweDIxLCAweDIzLCAweDMzIH0sCisJeyAweDEwLCAweDIxLCAweDIzLCAweDMzIH0KK307CisKKyNkZWZpbmUgZmRfc2V0ZG9yKGRvcikJCQkJCQkJCVwKK2RvIHsJCQkJCQkJCQkJXAorCWludCBuZXdfZG9yID0gKGRvcik7CQkJCQkJCVwKKwlpZiAobmV3X2RvciAmIDB4ZjApCQkJCQkJCVwKKwkJbmV3X2RvciA9IChuZXdfZG9yICYgMHgwYykgfCBmbG9wcHlfc2VsZWN0c1tmZGNdW25ld19kb3IgJiAzXTsJXAorCWVsc2UJCQkJCQkJCQlcCisJCW5ld19kb3IgJj0gMHgwYzsJCQkJCQlcCisJb3V0YihuZXdfZG9yLCBGRF9ET1IpOwkJCQkJCQlcCit9IHdoaWxlICgwKQorCisvKgorICogU29tZWRheSwgd2UnbGwgYXV0b21hdGljYWxseSBkZXRlY3Qgd2hpY2ggZHJpdmVzIGFyZSBwcmVzZW50Li4uCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBmZF9zY2FuZHJpdmVzICh2b2lkKQoreworI2lmIDAKKwlpbnQgZmxvcHB5LCBkcml2ZV9jb3VudDsKKworCWZkX2Rpc2FibGVfaXJxKCk7CisJcmF3X2NtZCA9ICZkZWZhdWx0X3Jhd19jbWQ7CisJcmF3X2NtZC0+ZmxhZ3MgPSBGRF9SQVdfU1BJTiB8IEZEX1JBV19ORUVEX1NFRUs7CisJcmF3X2NtZC0+dHJhY2sgPSAwOworCXJhd19jbWQtPnJhdGUgPSA/OworCWRyaXZlX2NvdW50ID0gMDsKKwlmb3IgKGZsb3BweSA9IDA7IGZsb3BweSA8IDQ7IGZsb3BweSArKykgeworCQljdXJyZW50X2RyaXZlID0gZHJpdmVfY291bnQ7CisJCS8qCisJCSAqIFR1cm4gb24gZmxvcHB5IG1vdG9yCisJCSAqLworCQlpZiAoc3RhcnRfbW90b3IocmVkb19mZF9yZXF1ZXN0KSkKKwkJCWNvbnRpbnVlOworCQkvKgorCQkgKiBTZXQgdXAgRkRDCisJCSAqLworCQlmZGNfc3BlY2lmeSgpOworCQkvKgorCQkgKiBUZWxsIEZEQyB0byByZWNhbGlicmF0ZQorCQkgKi8KKwkJb3V0cHV0X2J5dGUoRkRfUkVDQUxJQlJBVEUpOworCQlMQVNUX09VVChVTklUKGZsb3BweSkpOworCQkvKiB3YWl0IGZvciBjb21tYW5kIHRvIGNvbXBsZXRlICovCisJCWlmICghc3VjY2Vzc2Z1bCkgeworCQkJaW50IGk7CisJCQlmb3IgKGkgPSBkcml2ZV9jb3VudDsgaSA8IDM7IGktLSkKKwkJCQlmbG9wcHlfc2VsZWN0c1tmZGNdW2ldID0gZmxvcHB5X3NlbGVjdHNbZmRjXVtpICsgMV07CisJCQlmbG9wcHlfc2VsZWN0c1tmZGNdWzNdID0gMDsKKwkJCWZsb3BweSAtPSAxOworCQl9IGVsc2UKKwkJCWRyaXZlX2NvdW50Kys7CisJfQorI2Vsc2UKKwlmbG9wcHlfc2VsZWN0c1swXVswXSA9IDB4MTA7CisJZmxvcHB5X3NlbGVjdHNbMF1bMV0gPSAweDIxOworCWZsb3BweV9zZWxlY3RzWzBdWzJdID0gMHgyMzsKKwlmbG9wcHlfc2VsZWN0c1swXVszXSA9IDB4MzM7CisjZW5kaWYKK30KKworI2RlZmluZSBGREMxICgweDNmMCkKKworI2RlZmluZSBGTE9QUFkwX1RZUEUgNAorI2RlZmluZSBGTE9QUFkxX1RZUEUgNAorCisjZGVmaW5lIE5fRkRDIDEKKyNkZWZpbmUgTl9EUklWRSA0CisKKyNkZWZpbmUgRkxPUFBZX01PVE9SX01BU0sgMHhmMAorCisjZGVmaW5lIENST1NTXzY0S0IoYSxzKSAoMCkKKworLyoKKyAqIFRoaXMgYWxsb3dzIHBlb3BsZSB0byByZXZlcnNlIHRoZSBvcmRlciBvZgorICogZmQwIGFuZCBmZDEsIGluIGNhc2UgdGhlaXIgaGFyZHdhcmUgaXMKKyAqIHN0cmFuZ2VseSBjb25uZWN0ZWQgKGFzIHNvbWUgUmlzY1BDcworICogYW5kIEE1MDAwcyBzZWVtIHRvIGJlKS4KKyAqLworc3RhdGljIHZvaWQgZHJpdmVzd2FwKGludCAqaW50cywgaW50IGR1bW15LCBpbnQgZHVtbXkyKQoreworCWZsb3BweV9zZWxlY3RzWzBdWzBdIF49IGZsb3BweV9zZWxlY3RzWzBdWzFdOworCWZsb3BweV9zZWxlY3RzWzBdWzFdIF49IGZsb3BweV9zZWxlY3RzWzBdWzBdOworCWZsb3BweV9zZWxlY3RzWzBdWzBdIF49IGZsb3BweV9zZWxlY3RzWzBdWzFdOworfQorCisjZGVmaW5lIEVYVFJBX0ZMT1BQWV9QQVJBTVMgLHsgImRyaXZlc3dhcCIsICZkcml2ZXN3YXAsIE5VTEwsIDAsIDAgfQorCQorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi9mcHN0YXRlLmggYi9pbmNsdWRlL2FzbS1hcm0yNi9mcHN0YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg1NzQ5YgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybTI2L2Zwc3RhdGUuaApAQCAtMCwwICsxLDI5IEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9mcHN0YXRlLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk1IFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUk1fRlBTVEFURV9ICisjZGVmaW5lIF9fQVNNX0FSTV9GUFNUQVRFX0gKKworI2RlZmluZSBGUF9TSVpFIDM1CisKK3N0cnVjdCBmcF9oYXJkX3N0cnVjdCB7CisJdW5zaWduZWQgaW50IHNhdmVbRlBfU0laRV07CQkvKiBhcyB5ZXQgdW5kZWZpbmVkICovCit9OworCitzdHJ1Y3QgZnBfc29mdF9zdHJ1Y3QgeworCXVuc2lnbmVkIGludCBzYXZlW0ZQX1NJWkVdOwkJLyogdW5kZWZpbmVkIGluZm9ybWF0aW9uICovCit9OworCit1bmlvbiBmcF9zdGF0ZSB7CisJc3RydWN0IGZwX2hhcmRfc3RydWN0CWhhcmQ7CisJc3RydWN0IGZwX3NvZnRfc3RydWN0CXNvZnQ7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybTI2L2hhcmRpcnEuaCBiL2luY2x1ZGUvYXNtLWFybTI2L2hhcmRpcnEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTFlZTFkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtMjYvaGFyZGlycS5oCkBAIC0wLDAgKzEsNDEgQEAKKyNpZm5kZWYgX19BU01fSEFSRElSUV9ICisjZGVmaW5lIF9fQVNNX0hBUkRJUlFfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQgX19zb2Z0aXJxX3BlbmRpbmc7Cit9IF9fX19jYWNoZWxpbmVfYWxpZ25lZCBpcnFfY3B1c3RhdF90OworCisjaW5jbHVkZSA8bGludXgvaXJxX2NwdXN0YXQuaD4JLyogU3RhbmRhcmQgbWFwcGluZ3MgZm9yIGlycV9jcHVzdGF0X3QgYWJvdmUgKi8KKworI2RlZmluZSBIQVJESVJRX0JJVFMJOAorCisvKgorICogVGhlIGhhcmRpcnEgbWFzayBoYXMgdG8gYmUgbGFyZ2UgZW5vdWdoIHRvIGhhdmUgc3BhY2UKKyAqIGZvciBwb3RlbnRpYWxseSBhbGwgSVJRIHNvdXJjZXMgaW4gdGhlIHN5c3RlbSBuZXN0aW5nCisgKiBvbiBhIHNpbmdsZSBDUFU6CisgKi8KKyNpZiAoMSA8PCBIQVJESVJRX0JJVFMpIDwgTlJfSVJRUworIyBlcnJvciBIQVJESVJRX0JJVFMgaXMgdG9vIGxvdyEKKyNlbmRpZgorCisjZGVmaW5lIGlycV9lbnRlcigpCQkocHJlZW1wdF9jb3VudCgpICs9IEhBUkRJUlFfT0ZGU0VUKQorCisjaWZuZGVmIENPTkZJR19TTVAKKworZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBfX2RvX3NvZnRpcnEodm9pZCk7CisKKyNkZWZpbmUgaXJxX2V4aXQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBwcmVlbXB0X2NvdW50KCkgLT0gSVJRX0VYSVRfT0ZGU0VUOyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBpZiAoIWluX2ludGVycnVwdCgpICYmIGxvY2FsX3NvZnRpcnFfcGVuZGluZygpKSAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIF9fZG9fc29mdGlycSgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisKKyNlbmRpZiAvKiBfX0FTTV9IQVJESVJRX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybTI2L2hhcmR3YXJlLmggYi9pbmNsdWRlL2FzbS1hcm0yNi9oYXJkd2FyZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyZmM1NWUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0yNi9oYXJkd2FyZS5oCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWFyYy9oYXJkd2FyZS5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5Ni0xOTk5IFJ1c3NlbGwgS2luZy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGhhcmR3YXJlIGRlZmluaXRpb25zIG9mIHRoZQorICogIEFjb3JuIEFyY2hpbWVkZXMvQTUwMDAgbWFjaGluZXMuCisgKgorICogIE1vZGlmaWNhdGlvbnM6CisgKiAgIDA0LTA0LTE5OTgJUEpCL1JNSwlNZXJnZWQgYXJjIGFuZCBhNWsgdmVyc2lvbnMKKyAqLworI2lmbmRlZiBfX0FTTV9IQVJEV0FSRV9ICisjZGVmaW5lIF9fQVNNX0hBUkRXQVJFX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisKKy8qCisgKiBXaGF0IGhhcmR3YXJlIG11c3QgYmUgcHJlc2VudCAtIHRoZXNlIGNhbiBiZSB0ZXN0ZWQgYnkgdGhlIGtlcm5lbAorICogc291cmNlLgorICovCisjZGVmaW5lIEhBU19JT0MKKyNkZWZpbmUgSEFTX01FTUMKKyNkZWZpbmUgSEFTX1ZJREMKKworI2RlZmluZSBWRE1BX0FMSUdOTUVOVCAgUEFHRV9TSVpFCisjZGVmaW5lIFZETUFfWEZFUlNJWkUgICAxNgorI2RlZmluZSBWRE1BX0lOSVQgICAgICAgMAorI2RlZmluZSBWRE1BX1NUQVJUICAgICAgMQorI2RlZmluZSBWRE1BX0VORCAgICAgICAgMgorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworZXh0ZXJuIHZvaWQgbWVtY193cml0ZSh1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBsb25nIHZhbCk7CisKKyNkZWZpbmUgdmlkZW9fc2V0X2RtYShzdGFydCxlbmQsb2Zmc2V0KSAgICAgICAgICAgICAgICAgICAgICAgICBcCitkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBtZW1jX3dyaXRlIChWRE1BX1NUQVJULCAoc3RhcnQgPj4gMikpOyAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbWVtY193cml0ZSAoVkRNQV9FTkQsIChlbmQgLSBWRE1BX1hGRVJTSVpFKSA+PiAyKTsgICAgICBcCisgICAgICAgIG1lbWNfd3JpdGUgKFZETUFfSU5JVCwgKG9mZnNldCA+PiAyKSk7ICAgICAgICAgICAgICAgICAgXAorfSB3aGlsZSAoMCkKKyNlbmRpZgorCisKKy8qIEhhcmR3YXJlIGFkZHJlc3NlcyBvZiBtYWpvciBhcmVhcy4KKyAqICAqX1NUQVJUIGlzIHRoZSBwaHlzaWNhbCBhZGRyZXNzCisgKiAgKl9TSVpFICBpcyB0aGUgc2l6ZSBvZiB0aGUgcmVnaW9uCisgKiAgKl9CQVNFICBpcyB0aGUgdmlydHVhbCBhZGRyZXNzCisgKi8KKyNkZWZpbmUgSU9fU1RBUlQJCTB4MDMwMDAwMDAKKyNkZWZpbmUgSU9fU0laRQkJCTB4MDEwMDAwMDAKKyNkZWZpbmUgSU9fQkFTRQkJCTB4MDMwMDAwMDAKKworLyoKKyAqIFNjcmVlbiBtYXBwaW5nIGluZm9ybWF0aW9uCisgKi8KKyNkZWZpbmUgU0NSRUVOX1NUQVJUCQkweDAyMDAwMDAwCisjZGVmaW5lIFNDUkVFTl9FTkQJCTB4MDIwNzgwMDAKKyNkZWZpbmUgU0NSRUVOX1NJWkUJCTB4MDAwNzgwMDAKKyNkZWZpbmUgU0NSRUVOX0JBU0UJCTB4MDIwMDAwMDAKKworCisjZGVmaW5lIEVYUE1BU0tfQkFTRQkJMHgwMzM2MDAwMAorI2RlZmluZSBJT0VCX0JBU0UJCTB4MDMzNTAwMDAKKyNkZWZpbmUgVklEQ19CQVNFCQkweDAzNDAwMDAwCisjZGVmaW5lIExBVENIQV9CQVNFCQkweDAzMjUwMDQwCisjZGVmaW5lIExBVENIQl9CQVNFCQkweDAzMjUwMDE4CisjZGVmaW5lIElPQ19CQVNFCQkweDAzMjAwMDAwCisjZGVmaW5lIEZMT1BQWURNQV9CQVNFCQkweDAzMDJhMDAwCisjZGVmaW5lIFBDSU9fQkFTRQkJMHgwMzAxMDAwMAorCisvLyBGSVhNRSAtIGFyZSB0aGUgYmVsb3cgY29ycmVjdD8KKyNkZWZpbmUgUE9EU0xPVF9JT0MwX0JBU0UgICAgICAgMHgwMzI0MDAwMAorI2RlZmluZSBQT0RTTE9UX0lPQ19TSVpFICAgICAgICAoMSA8PCAxNCkKKyNkZWZpbmUgUE9EU0xPVF9NRU1DX0JBU0UgICAgICAgMHgwMzAwMDAwMAorI2RlZmluZSBQT0RTTE9UX01FTUNfU0laRSAgICAgICAoMSA8PCAxNCkKKworI2RlZmluZSB2aWRjX3dyaXRlbCh2YWwpCV9fcmF3X3dyaXRlbCh2YWwsIFZJRENfQkFTRSkKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworLyoKKyAqIGZvciB1c2Ugd2l0aCBpbmIvb3V0YgorICovCisjZGVmaW5lIElPRUJfVklEX0NUTAkJKElPRUJfQkFTRSArIDB4NDgpCisjZGVmaW5lIElPRUJfUFJFU0VOVAkJKElPRUJfQkFTRSArIDB4NTApCisjZGVmaW5lIElPRUJfUFNDTFIJCShJT0VCX0JBU0UgKyAweDU4KQorI2RlZmluZSBJT0VCX01PTlRZUEUJCShJT0VCX0JBU0UgKyAweDcwKQorCisvL0ZJWE1FIC0gVGhlc2UgYWRyZXNzZXMgYXJlIHdlaXJkIC0gSVNUUiBzb21lIHdlaXJkbyBhZGRyZXNzIHNoaWZ0aW5nIHN0dWZmIHdhcyBnb2luZyBvbiBoZXJlLi4uCisjZGVmaW5lIElPX0VDX0lPQ19CQVNFCQkweDgwMDkwMDAwCisjZGVmaW5lIElPX0VDX01FTUNfQkFTRQkJMHg4MDAwMDAwMAorCisjaWZkZWYgQ09ORklHX0FSQ0hfQVJDCisvKiBBNjgwIGhhcmR3YXJlICovCisjZGVmaW5lIFdEMTk3M19CQVNFCQkweDAzMjkwMDAwCisjZGVmaW5lIFdEMTk3M19MQVRDSAkJMHgwMzM1MDAwMAorI2RlZmluZSBaODUzMF9CQVNFCQkweDAzMmIwMDA4CisjZGVmaW5lIFNDU0lfQkFTRQkJMHgwMzEwMDAwMAorI2VuZGlmCisKKyNlbmRpZgorCisjZGVmaW5lCUVYUE1BU0tfU1RBVFVTCQkoRVhQTUFTS19CQVNFICsgMHgwMCkKKyNkZWZpbmUgRVhQTUFTS19FTkFCTEUJCShFWFBNQVNLX0JBU0UgKyAweDA0KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybTI2L2hkcmVnLmggYi9pbmNsdWRlL2FzbS1hcm0yNi9oZHJlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmN2ZkMWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0yNi9oZHJlZy5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9oZHJlZy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtMjYvaWRlLmggYi9pbmNsdWRlL2FzbS1hcm0yNi9pZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjgwNGQ3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtMjYvaWRlLmgKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vaWRlLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk0LTE5OTYgIExpbnVzIFRvcnZhbGRzICYgYXV0aG9ycworICovCisKKy8qCisgKiAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBpMzg2IGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBJREUgY29kZS4KKyAqLworCisjaWZuZGVmIF9fQVNNQVJNX0lERV9ICisjZGVmaW5lIF9fQVNNQVJNX0lERV9ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpZm5kZWYgTUFYX0hXSUZTCisjZGVmaW5lIE1BWF9IV0lGUwk0CisjZW5kaWYKKworI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCisvKiBKTUEgMTguMDUuMDMgdGhlc2Ugd2lsbCBuZXZlciBiZSBuZWVkZWQsIGJ1dCB0aGUga2VybmVsIG5lZWRzIHRoZW0gdG8gY29tcGlsZSAqLworI2RlZmluZSBfX2lkZV9tbV9pbnN3KHBvcnQsYWRkcixsZW4pICAgIHJlYWRzdyhwb3J0LGFkZHIsbGVuKQorI2RlZmluZSBfX2lkZV9tbV9pbnNsKHBvcnQsYWRkcixsZW4pICAgIHJlYWRzbChwb3J0LGFkZHIsbGVuKQorI2RlZmluZSBfX2lkZV9tbV9vdXRzdyhwb3J0LGFkZHIsbGVuKSAgIHdyaXRlc3cocG9ydCxhZGRyLGxlbikKKyNkZWZpbmUgX19pZGVfbW1fb3V0c2wocG9ydCxhZGRyLGxlbikgICB3cml0ZXNsKHBvcnQsYWRkcixsZW4pCisKKyNkZWZpbmUgSURFX0FSQ0hfT0JTT0xFVEVfSU5JVAorI2RlZmluZSBpZGVfZGVmYXVsdF9pb19jdGwoYmFzZSkJKDApCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfX0FTTUFSTV9JREVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtMjYvaW8uaCBiL2luY2x1ZGUvYXNtLWFybTI2L2lvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJmOTRkOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybTI2L2lvLmgKQEAgLTAsMCArMSw0MzUgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2lvLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAgUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBNb2RpZmljYXRpb25zOgorICogIDE2LVNlcC0xOTk2CVJNSwlJbmxpbmVkIHRoZSBpbngvb3V0eCBmdW5jdGlvbnMgJiBvcHRpbWlzZWQgZm9yIGJvdGgKKyAqCQkJY29uc3RhbnQgYWRkcmVzc2VzIGFuZCB2YXJpYWJsZSBhZGRyZXNzZXMuCisgKiAgMDQtRGVjLTE5OTcJUk1LCU1vdmVkIGEgbG90IG9mIHRoaXMgc3R1ZmYgdG8gdGhlIG5ldyBhcmNoaXRlY3R1cmUKKyAqCQkJc3BlY2lmaWMgSU8gaGVhZGVyIGZpbGVzLgorICogIDI3LU1hci0xOTk5CVBKQglTZWNvbmQgcGFyYW1ldGVyIG9mIG1lbWNweV90b2lvIGlzIGNvbnN0Li4KKyAqICAwNC1BcHItMTk5OQlQSkIJQWRkZWQgY2hlY2tfc2lnbmF0dXJlLgorICogIDEyLURlYy0xOTk5CVJNSwlNb3JlIGNsZWFudXBzCisgKiAgMTgtSnVuLTIwMDAgUk1LCVJlbW92ZWQgdmlydF90b18qIGFuZCBmcmllbmRzIGRlZmluaXRpb25zCisgKi8KKyNpZm5kZWYgX19BU01fQVJNX0lPX0gKKyNkZWZpbmUgX19BU01fQVJNX0lPX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgPGFzbS9tZW1vcnkuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKworLyoKKyAqIEdlbmVyaWMgSU8gcmVhZC93cml0ZS4gIFRoZXNlIHBlcmZvcm0gbmF0aXZlLWVuZGlhbiBhY2Nlc3Nlcy4gIE5vdGUKKyAqIHRoYXQgc29tZSBhcmNoaXRlY3R1cmVzIHdpbGwgd2FudCB0byByZS1kZWZpbmUgX19yYXdfe3JlYWQsd3JpdGV9dy4KKyAqLworZXh0ZXJuIHZvaWQgX19yYXdfd3JpdGVzYih1bnNpZ25lZCBpbnQgYWRkciwgY29uc3Qgdm9pZCAqZGF0YSwgaW50IGJ5dGVsZW4pOworZXh0ZXJuIHZvaWQgX19yYXdfd3JpdGVzdyh1bnNpZ25lZCBpbnQgYWRkciwgY29uc3Qgdm9pZCAqZGF0YSwgaW50IHdvcmRsZW4pOworZXh0ZXJuIHZvaWQgX19yYXdfd3JpdGVzbCh1bnNpZ25lZCBpbnQgYWRkciwgY29uc3Qgdm9pZCAqZGF0YSwgaW50IGxvbmdsZW4pOworCitleHRlcm4gdm9pZCBfX3Jhd19yZWFkc2IodW5zaWduZWQgaW50IGFkZHIsIHZvaWQgKmRhdGEsIGludCBieXRlbGVuKTsKK2V4dGVybiB2b2lkIF9fcmF3X3JlYWRzdyh1bnNpZ25lZCBpbnQgYWRkciwgdm9pZCAqZGF0YSwgaW50IHdvcmRsZW4pOworZXh0ZXJuIHZvaWQgX19yYXdfcmVhZHNsKHVuc2lnbmVkIGludCBhZGRyLCB2b2lkICpkYXRhLCBpbnQgbG9uZ2xlbik7CisKKyNkZWZpbmUgX19yYXdfd3JpdGViKHYsYSkgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAgKikoYSkgPSAodikpCisjZGVmaW5lIF9fcmF3X3dyaXRldyh2LGEpICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKGEpID0gKHYpKQorI2RlZmluZSBfX3Jhd193cml0ZWwodixhKSAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgICAqKShhKSA9ICh2KSkKKworI2RlZmluZSBfX3Jhd19yZWFkYihhKSAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICAqKShhKSkKKyNkZWZpbmUgX19yYXdfcmVhZHcoYSkgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoYSkpCisjZGVmaW5lIF9fcmF3X3JlYWRsKGEpICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAgICopKGEpKQorCisKKy8qCisgKiBCYWQgcmVhZC93cml0ZSBhY2Nlc3Nlcy4uLgorICovCitleHRlcm4gdm9pZCBfX3JlYWR3cml0ZV9idWcoY29uc3QgY2hhciAqZm4pOworCisvKgorICogTm93LCBwaWNrIHVwIHRoZSBtYWNoaW5lLWRlZmluZWQgSU8gZGVmaW5pdGlvbnMKKyAqLworCisjZGVmaW5lIElPX1NQQUNFX0xJTUlUIDB4ZmZmZmZmZmYKKworLyoKKyAqIEdDQyBpcyB0b3RhbGx5IGNyYXAgYXQgbG9hZGluZy9zdG9yaW5nIGRhdGEuICBXZSB0cnkgdG8gcGVyc3VhZGUgaXQKKyAqIHRvIGRvIHRoZSByaWdodCB0aGluZyBieSB1c2luZyB0aGVzZSB3aGVyZWV2ZXIgcG9zc2libGUgaW5zdGVhZCBvZgorICogdGhlIGFib3ZlLgorICovCisjZGVmaW5lIF9fYXJjaF9iYXNlX2dldGIoYixvKSAgICAgICAgICAgICAgICAgICBcCisgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHVuc2lnbmVkIGludCB2LCByID0gKGIpOyAgICAgICAgICAgICAgICBcCisgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgImxkcmIgICAlMCwgWyUxLCAlMl0iICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXIiICh2KSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiciIgKHIpLCAiSXIiIChvKSk7ICAgICAgICAgICBcCisgICAgICAgIHY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgfSkKKworI2RlZmluZSBfX2FyY2hfYmFzZV9nZXRsKGIsbykgICAgICAgICAgICAgICAgICAgXAorICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB1bnNpZ25lZCBpbnQgdiwgciA9IChiKTsgICAgICAgICAgICAgICAgXAorICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyggICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICJsZHIgICAgJTAsIFslMSwgJTJdIiAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj1yIiAodikgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInIiIChyKSwgIklyIiAobykpOyAgICAgICAgICAgXAorICAgICAgICB2OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorIH0pCisKKyNkZWZpbmUgX19hcmNoX2Jhc2VfcHV0Yih2LGIsbykgICAgICAgICAgICAgICAgIFwKKyAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgdW5zaWduZWQgaW50IHIgPSAoYik7ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAic3RyYiAgICUwLCBbJTEsICUyXSIgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJyIiAodiksICJyIiAociksICJJciIgKG8pKTsgIFwKKyB9KQorCisjZGVmaW5lIF9fYXJjaF9iYXNlX3B1dGwodixiLG8pICAgICAgICAgICAgICAgICBcCisgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHVuc2lnbmVkIGludCByID0gKGIpOyAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgInN0ciAgICAlMCwgWyUxLCAlMl0iICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiciIgKHYpLCAiciIgKHIpLCAiSXIiIChvKSk7ICBcCisgfSkKKworLyoKKyAqIFdlIHVzZSB0d28gZGlmZmVyZW50IHR5cGVzIG9mIGFkZHJlc3NpbmcgLSBQQyBzdHlsZSBhZGRyZXNzZXMsIGFuZCBBUk0KKyAqIGFkZHJlc3Nlcy4gIFBDIHN0eWxlIGFjY2Vzc2VzIHRoZSBQQyBoYXJkd2FyZSB3aXRoIHRoZSBub3JtYWwgUEMgSU8KKyAqIGFkZHJlc3NlcywgZWcgMHgzZjggZm9yIHNlcmlhbCMxLiAgQVJNIGFkZHJlc3NlcyBhcmUgMHg4MDAwMDAwMCsKKyAqIGFuZCBhcmUgdHJhbnNsYXRlZCB0byB0aGUgc3RhcnQgb2YgSU8uICBOb3RlIHRoYXQgYWxsIGFkZHJlc3NlcyBhcmUKKyAqIHNoaWZ0ZWQgbGVmdCEKKyAqLworI2RlZmluZSBfX1BPUlRfUENJTyh4KSAgKCEoKHgpICYgMHg4MDAwMDAwMCkpCisKKy8qCisgKiBEeW5hbWljIElPIGZ1bmN0aW9ucyAtIGxldCB0aGUgY29tcGlsZXIKKyAqIG9wdGltaXplIHRoZSBleHByZXNzaW9ucworICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19vdXRiICh1bnNpZ25lZCBpbnQgdmFsdWUsIHVuc2lnbmVkIGludCBwb3J0KQoreworICAgICAgICB1bnNpZ25lZCBsb25nIHRlbXA7CisgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKAorICAgICAgICAidHN0ICAgICUyLCAjMHg4MDAwMDAwMFxuXHQiCisgICAgICAgICJtb3YgICAgJTAsICU0XG5cdCIKKyAgICAgICAgImFkZGVxICAlMCwgJTAsICUzXG5cdCIKKyAgICAgICAgInN0cmIgICAlMSwgWyUwLCAlMiwgbHNsICMyXSAgICBAIG91dGIiCisgICAgICAgIDogIj0mciIgKHRlbXApCisgICAgICAgIDogInIiICh2YWx1ZSksICJyIiAocG9ydCksICJJciIgKFBDSU9fQkFTRSAtIElPX0JBU0UpLCAiSXIiIChJT19CQVNFKQorICAgICAgICA6ICJjYyIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19vdXR3ICh1bnNpZ25lZCBpbnQgdmFsdWUsIHVuc2lnbmVkIGludCBwb3J0KQoreworICAgICAgICB1bnNpZ25lZCBsb25nIHRlbXA7CisgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKAorICAgICAgICAidHN0ICAgICUyLCAjMHg4MDAwMDAwMFxuXHQiCisgICAgICAgICJtb3YgICAgJTAsICU0XG5cdCIKKyAgICAgICAgImFkZGVxICAlMCwgJTAsICUzXG5cdCIKKyAgICAgICAgInN0ciAgICAlMSwgWyUwLCAlMiwgbHNsICMyXSAgICBAIG91dHciCisgICAgICAgIDogIj0mciIgKHRlbXApCisgICAgICAgIDogInIiICh2YWx1ZXx2YWx1ZTw8MTYpLCAiciIgKHBvcnQpLCAiSXIiIChQQ0lPX0JBU0UgLSBJT19CQVNFKSwgIklyIiAoSU9fQkFTRSkKKyAgICAgICAgOiAiY2MiKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fb3V0bCAodW5zaWduZWQgaW50IHZhbHVlLCB1bnNpZ25lZCBpbnQgcG9ydCkKK3sKKyAgICAgICAgdW5zaWduZWQgbG9uZyB0ZW1wOworICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygKKyAgICAgICAgInRzdCAgICAlMiwgIzB4ODAwMDAwMDBcblx0IgorICAgICAgICAibW92ICAgICUwLCAlNFxuXHQiCisgICAgICAgICJhZGRlcSAgJTAsICUwLCAlM1xuXHQiCisgICAgICAgICJzdHIgICAgJTEsIFslMCwgJTIsIGxzbCAjMl0gICAgQCBvdXRsIgorICAgICAgICA6ICI9JnIiICh0ZW1wKQorICAgICAgICA6ICJyIiAodmFsdWUpLCAiciIgKHBvcnQpLCAiSXIiIChQQ0lPX0JBU0UgLSBJT19CQVNFKSwgIklyIiAoSU9fQkFTRSkKKyAgICAgICAgOiAiY2MiKTsKK30KKworI2RlZmluZSBERUNMQVJFX0RZTl9JTihzeixmbnN1ZmZpeCxpbnN0cikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHN6IF9faW4jI2Zuc3VmZml4ICh1bnNpZ25lZCBpbnQgcG9ydCkgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgdW5zaWduZWQgbG9uZyB0ZW1wLCB2YWx1ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICJ0c3QgICAgJTIsICMweDgwMDAwMDAwXG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgIm1vdiAgICAlMCwgJTRcblx0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAiYWRkZXEgICUwLCAlMCwgJTNcblx0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICJsZHIiIGluc3RyICIgICAlMSwgWyUwLCAlMiwgbHNsICMyXSAgICBAIGluIiAjZm5zdWZmaXggICAgICAgICAgICAgICAgIFwKKyAgICAgICAgOiAiPSZyIiAodGVtcCksICI9ciIgKHZhbHVlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICA6ICJyIiAocG9ydCksICJJciIgKFBDSU9fQkFTRSAtIElPX0JBU0UpLCAiSXIiIChJT19CQVNFKSAgICAgICAgICAgICAgICBcCisgICAgICAgIDogImNjIik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmV0dXJuICh1bnNpZ25lZCBzeil2YWx1ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBfX2lvYWRkciAodW5zaWduZWQgaW50IHBvcnQpICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKF9fUE9SVF9QQ0lPKHBvcnQpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIHJldHVybiAodW5zaWduZWQgaW50KShQQ0lPX0JBU0UgKyAocG9ydCA8PCAyKSk7ICAgICAgICAgICAgICAgICBcCisgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICByZXR1cm4gKHVuc2lnbmVkIGludCkoSU9fQkFTRSArIChwb3J0IDw8IDIpKTsgICAgICAgICAgICAgICAgICAgXAorfQorCisjZGVmaW5lIERFQ0xBUkVfSU8oc3osZm5zdWZmaXgsaW5zdHIpICAgXAorICAgICAgICBERUNMQVJFX0RZTl9JTihzeixmbnN1ZmZpeCxpbnN0cikKKworREVDTEFSRV9JTyhjaGFyLGIsImIiKQorREVDTEFSRV9JTyhzaG9ydCx3LCIiKQorREVDTEFSRV9JTyhpbnQsbCwiIikKKworI3VuZGVmIERFQ0xBUkVfSU8KKyN1bmRlZiBERUNMQVJFX0RZTl9JTgorCisvKgorICogQ29uc3RhbnQgYWRkcmVzcyBJTyBmdW5jdGlvbnMKKyAqCisgKiBUaGVzZSBoYXZlIHRvIGJlIG1hY3JvcyBmb3IgdGhlICdKJyBjb25zdHJhaW50IHRvIHdvcmsgLQorICogKy8tNDA5NiBpbW1lZGlhdGUgb3BlcmFuZC4KKyAqLworI2RlZmluZSBfX291dGJjKHZhbHVlLHBvcnQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKF9fUE9SVF9QQ0lPKChwb3J0KSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgInN0cmIgICAlMCwgWyUxLCAlMl0gICAgQCBvdXRiYyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IDogInIiICh2YWx1ZSksICJyIiAoUENJT19CQVNFKSwgIkpyIiAoKHBvcnQpIDw8IDIpKTsgICAgICAgICAgXAorICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAic3RyYiAgICUwLCBbJTEsICUyXSAgICBAIG91dGJjIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogOiAiciIgKHZhbHVlKSwgInIiIChJT19CQVNFKSwgInIiICgocG9ydCkgPDwgMikpOyAgICAgICAgICAgICBcCit9KQorCisjZGVmaW5lIF9faW5iYyhwb3J0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB1bnNpZ25lZCBjaGFyIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChfX1BPUlRfUENJTygocG9ydCkpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICJsZHJiICAgJTAsIFslMSwgJTJdICAgIEAgaW5iYyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXIiIChyZXN1bHQpIDogInIiIChQQ0lPX0JBU0UpLCAiSnIiICgocG9ydCkgPDwgMikpOyAgICAgICAgIFwKKyAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgImxkcmIgICAlMCwgWyUxLCAlMl0gICAgQCBpbmJjIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKElPX0JBU0UpLCAiciIgKChwb3J0KSA8PCAyKSk7ICAgICAgICAgICAgXAorICAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9KQorCisjZGVmaW5lIF9fb3V0d2ModmFsdWUscG9ydCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB1bnNpZ25lZCBsb25nIHYgPSB2YWx1ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChfX1BPUlRfUENJTygocG9ydCkpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICJzdHIgICAgJTAsIFslMSwgJTJdICAgIEAgb3V0d2MiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiA6ICJyIiAodnx2PDwxNiksICJyIiAoUENJT19CQVNFKSwgIkpyIiAoKHBvcnQpIDw8IDIpKTsgICAgICAgIFwKKyAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgInN0ciAgICAlMCwgWyUxLCAlMl0gICAgQCBvdXR3YyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IDogInIiICh2fHY8PDE2KSwgInIiIChJT19CQVNFKSwgInIiICgocG9ydCkgPDwgMikpOyAgICAgICAgICAgXAorfSkKKworI2RlZmluZSBfX2lud2MocG9ydCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgdW5zaWduZWQgc2hvcnQgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoX19QT1JUX1BDSU8oKHBvcnQpKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAibGRyICAgICUwLCBbJTEsICUyXSAgICBAIGlud2MiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj1yIiAocmVzdWx0KSA6ICJyIiAoUENJT19CQVNFKSwgIkpyIiAoKHBvcnQpIDw8IDIpKTsgICAgICAgICBcCisgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICJsZHIgICAgJTAsIFslMSwgJTJdICAgIEAgaW53YyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXIiIChyZXN1bHQpIDogInIiIChJT19CQVNFKSwgInIiICgocG9ydCkgPDwgMikpOyAgICAgICAgICAgIFwKKyAgICAgICAgcmVzdWx0ICYgMHhmZmZmOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSkKKworI2RlZmluZSBfX291dGxjKHZhbHVlLHBvcnQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgdW5zaWduZWQgbG9uZyB2ID0gdmFsdWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoX19QT1JUX1BDSU8oKHBvcnQpKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAic3RyICAgICUwLCBbJTEsICUyXSAgICBAIG91dGxjIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogOiAiciIgKHYpLCAiciIgKFBDSU9fQkFTRSksICJKciIgKChwb3J0KSA8PCAyKSk7ICAgICAgICAgICAgICBcCisgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICJzdHIgICAgJTAsIFslMSwgJTJdICAgIEAgb3V0bGMiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiA6ICJyIiAodiksICJyIiAoSU9fQkFTRSksICJyIiAoKHBvcnQpIDw8IDIpKTsgICAgICAgICAgICAgICAgIFwKK30pCisKKyNkZWZpbmUgX19pbmxjKHBvcnQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHVuc2lnbmVkIGxvbmcgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKF9fUE9SVF9QQ0lPKChwb3J0KSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgImxkciAgICAlMCwgWyUxLCAlMl0gICAgQCBpbmxjIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKFBDSU9fQkFTRSksICJKciIgKChwb3J0KSA8PCAyKSk7ICAgICAgICAgXAorICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAibGRyICAgICUwLCBbJTEsICUyXSAgICBAIGlubGMiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj1yIiAocmVzdWx0KSA6ICJyIiAoSU9fQkFTRSksICJyIiAoKHBvcnQpIDw8IDIpKTsgICAgICAgICAgICBcCisgICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30pCisKKyNkZWZpbmUgX19pb2FkZHJjKHBvcnQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKF9fUE9SVF9QQ0lPKChwb3J0KSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGFkZHIgPSBQQ0lPX0JBU0UgKyAoKHBvcnQpIDw8IDIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBhZGRyID0gSU9fQkFTRSArICgocG9ydCkgPDwgMik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBhZGRyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9KQorCisjZGVmaW5lIGluYihwKSAgICAgICAgICAoX19idWlsdGluX2NvbnN0YW50X3AoKHApKSA/IF9faW5iYyhwKSAgICA6IF9faW5iKHApKQorI2RlZmluZSBpbncocCkgICAgICAgICAgKF9fYnVpbHRpbl9jb25zdGFudF9wKChwKSkgPyBfX2lud2MocCkgICAgOiBfX2ludyhwKSkKKyNkZWZpbmUgaW5sKHApICAgICAgICAgIChfX2J1aWx0aW5fY29uc3RhbnRfcCgocCkpID8gX19pbmxjKHApICAgIDogX19pbmwocCkpCisjZGVmaW5lIG91dGIodixwKSAgICAgICAoX19idWlsdGluX2NvbnN0YW50X3AoKHApKSA/IF9fb3V0YmModixwKSA6IF9fb3V0Yih2LHApKQorI2RlZmluZSBvdXR3KHYscCkgICAgICAgKF9fYnVpbHRpbl9jb25zdGFudF9wKChwKSkgPyBfX291dHdjKHYscCkgOiBfX291dHcodixwKSkKKyNkZWZpbmUgb3V0bCh2LHApICAgICAgIChfX2J1aWx0aW5fY29uc3RhbnRfcCgocCkpID8gX19vdXRsYyh2LHApIDogX19vdXRsKHYscCkpCisjZGVmaW5lIF9faW9hZGRyKHApICAgICAoX19idWlsdGluX2NvbnN0YW50X3AoKHApKSA/IF9faW9hZGRyKHApICA6IF9faW9hZGRyYyhwKSkKKworLyogSk1BIDE4LjAyLjAzIGFkZGVkIHNiLHNsIGZyb20gYXJtL2lvLmgsIGNoYW5naW5nIGlvIHRvIGlvYWRkciAqLworCisjZGVmaW5lIG91dHNiKHAsZCxsKSAgICAgICAgICAgIF9fcmF3X3dyaXRlc2IoX19pb2FkZHIocCksZCxsKQorI2RlZmluZSBvdXRzdyhwLGQsbCkgICAgICAgICAgICBfX3Jhd193cml0ZXN3KF9faW9hZGRyKHApLGQsbCkKKyNkZWZpbmUgb3V0c2wocCxkLGwpICAgICAgICAgICAgX19yYXdfd3JpdGVzbChfX2lvYWRkcihwKSxkLGwpCisKKyNkZWZpbmUgaW5zYihwLGQsbCkgICAgICAgICAgICAgX19yYXdfcmVhZHNiKF9faW9hZGRyKHApLGQsbCkKKyNkZWZpbmUgaW5zdyhwLGQsbCkgICAgICAgICAgICAgX19yYXdfcmVhZHN3KF9faW9hZGRyKHApLGQsbCkKKyNkZWZpbmUgaW5zbChwLGQsbCkgICAgICAgICAgICAgX19yYXdfcmVhZHNsKF9faW9hZGRyKHApLGQsbCkKKworI2RlZmluZSBpbnN3KHAsZCxsKSAgICAgX19yYXdfcmVhZHN3KF9faW9hZGRyKHApLGQsbCkKKyNkZWZpbmUgb3V0c3cocCxkLGwpICAgIF9fcmF3X3dyaXRlc3coX19pb2FkZHIocCksZCxsKQorCisjZGVmaW5lIHJlYWRiKGMpICAgICAgICAgICAgICAgICAgICAgICAgKF9fcmVhZHdyaXRlX2J1ZygicmVhZGIiKSwwKQorI2RlZmluZSByZWFkdyhjKSAgICAgICAgICAgICAgICAgICAgICAgIChfX3JlYWR3cml0ZV9idWcoInJlYWR3IiksMCkKKyNkZWZpbmUgcmVhZGwoYykgICAgICAgICAgICAgICAgICAgICAgICAoX19yZWFkd3JpdGVfYnVnKCJyZWFkbCIpLDApCisjZGVmaW5lIHJlYWRiX3JlbGF4ZWQoYWRkcikJCXJlYWRiKGFkZHIpCisjZGVmaW5lIHJlYWR3X3JlbGF4ZWQoYWRkcikJCXJlYWR3KGFkZHIpCisjZGVmaW5lIHJlYWRsX3JlbGF4ZWQoYWRkcikJCXJlYWRsKGFkZHIpCisjZGVmaW5lIHdyaXRlYih2LGMpICAgICAgICAgICAgICAgICAgICAgX19yZWFkd3JpdGVfYnVnKCJ3cml0ZWIiKQorI2RlZmluZSB3cml0ZXcodixjKSAgICAgICAgICAgICAgICAgICAgIF9fcmVhZHdyaXRlX2J1Zygid3JpdGV3IikKKyNkZWZpbmUgd3JpdGVsKHYsYykgICAgICAgICAgICAgICAgICAgICBfX3JlYWR3cml0ZV9idWcoIndyaXRlbCIpCisKKyNkZWZpbmUgcmVhZHN3KHAsZCxsKSAgICAgICAgICAgICAgICAgKF9fcmVhZHdyaXRlX2J1ZygicmVhZHN3IiksMCkKKyNkZWZpbmUgcmVhZHNsKHAsZCxsKSAgICAgICAgICAgICAgICAgKF9fcmVhZHdyaXRlX2J1ZygicmVhZHNsIiksMCkKKyNkZWZpbmUgd3JpdGVzdyhwLGQsbCkgICAgICAgICAgICAgICAgICAgICAgICBfX3JlYWR3cml0ZV9idWcoIndyaXRlc3ciKQorI2RlZmluZSB3cml0ZXNsKHAsZCxsKSAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVhZHdyaXRlX2J1Zygid3JpdGVzbCIpCisKKyNkZWZpbmUgbW1pb3diKCkKKworLyogdGhlIGZvbGxvd2luZyBtYWNybyBpcyBkZXByZWNpYXRlZCAqLworI2RlZmluZSBpb2FkZHIocG9ydCkgICAgICAgICAgICAgICAgICAgIF9faW9hZGRyKChwb3J0KSkKKworLyoKKyAqIE5vIGlvcmVtYXAgc3VwcG9ydCBoZXJlLgorICovCisjZGVmaW5lIF9fYXJjaF9pb3JlbWFwKGMscyxmLGEpICAgKCh2b2lkICopKGMpKQorI2RlZmluZSBfX2FyY2hfaW91bm1hcChjKSAgICAgICBkbyB7IH0gIHdoaWxlICgwKQorCisKKyNpZiBkZWZpbmVkKF9fYXJjaF9wdXRiKSB8fCBkZWZpbmVkKF9fYXJjaF9wdXR3KSB8fCBkZWZpbmVkKF9fYXJjaF9wdXRsKSB8fCBcCisgICAgZGVmaW5lZChfX2FyY2hfZ2V0YikgfHwgZGVmaW5lZChfX2FyY2hfZ2V0dykgfHwgZGVmaW5lZChfX2FyY2hfZ2V0bCkKKyN3YXJuaW5nIG1hY2hpbmUgY2xhc3MgdXNlcyBvbGQgX19hcmNoX3B1dHcgb3IgX19hcmNoX2dldHcKKyNlbmRpZgorCisvKgorICogIElPIHBvcnQgYWNjZXNzIHByaW1pdGl2ZXMKKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogVGhlIEFSTSBkb2Vzbid0IGhhdmUgc3BlY2lhbCBJTyBhY2Nlc3MgaW5zdHJ1Y3Rpb25zOyBhbGwgSU8gaXMgbWVtb3J5CisgKiBtYXBwZWQuICBOb3RlIHRoYXQgdGhlc2UgYXJlIGRlZmluZWQgdG8gcGVyZm9ybSBsaXR0bGUgZW5kaWFuIGFjY2Vzc2VzCisgKiBvbmx5LiAgVGhlaXIgcHJpbWFyeSBwdXJwb3NlIGlzIHRvIGFjY2VzcyBQQ0kgYW5kIElTQSBwZXJpcGhlcmFscy4KKyAqCisgKiBOb3RlIHRoYXQgZm9yIGEgYmlnIGVuZGlhbiBtYWNoaW5lLCB0aGlzIGltcGxpZXMgdGhhdCB0aGUgZm9sbG93aW5nCisgKiBiaWcgZW5kaWFuIG1vZGUgY29ubmVjdGl2aXR5IGlzIGluIHBsYWNlLCBhcyBkZXNjcmliZWQgYnkgbnVtZXJpb3VzCisgKiBBUk0gZG9jdW1lbnRzOgorICoKKyAqICAgIFBDSTogIEQwLUQ3ICAgRDgtRDE1IEQxNi1EMjMgRDI0LUQzMQorICogICAgQVJNOiBEMjQtRDMxIEQxNi1EMjMgIEQ4LUQxNSAgRDAtRDcKKyAqCisgKiBUaGUgbWFjaGluZSBzcGVjaWZpYyBpby5oIGluY2x1ZGUgZGVmaW5lcyBfX2lvIHRvIHRyYW5zbGF0ZSBhbiAiSU8iCisgKiBhZGRyZXNzIHRvIGEgbWVtb3J5IGFkZHJlc3MuCisgKgorICogTm90ZSB0aGF0IHdlIHByZXZlbnQgR0NDIHJlLW9yZGVyaW5nIG9yIGNhY2hpbmcgdmFsdWVzIGluIGV4cHJlc3Npb25zCisgKiBieSBpbnRyb2R1Y2luZyBzZXF1ZW5jZSBwb2ludHMgaW50byB0aGUgaW4qKCkgZGVmaW5pdGlvbnMuICBOb3RlIHRoYXQKKyAqIF9fcmF3XyogZG8gbm90IGd1YXJhbnRlZSB0aGlzIGJlaGF2aW91ci4KKyAqLworLyoKKyNkZWZpbmUgb3V0c2IocCxkLGwpCQlfX3Jhd193cml0ZXNiKF9faW8ocCksZCxsKQorI2RlZmluZSBvdXRzdyhwLGQsbCkJCV9fcmF3X3dyaXRlc3coX19pbyhwKSxkLGwpCisKKyNkZWZpbmUgaW5zYihwLGQsbCkJCV9fcmF3X3JlYWRzYihfX2lvKHApLGQsbCkKKyNkZWZpbmUgaW5zdyhwLGQsbCkJCV9fcmF3X3JlYWRzdyhfX2lvKHApLGQsbCkKKyovCisjZGVmaW5lIG91dGJfcCh2YWwscG9ydCkJb3V0YigodmFsKSwocG9ydCkpCisjZGVmaW5lIG91dHdfcCh2YWwscG9ydCkJb3V0dygodmFsKSwocG9ydCkpCisjZGVmaW5lIGluYl9wKHBvcnQpCQlpbmIoKHBvcnQpKQorI2RlZmluZSBpbndfcChwb3J0KQkJaW53KChwb3J0KSkKKyNkZWZpbmUgaW5sX3AocG9ydCkJCWlubCgocG9ydCkpCisKKyNkZWZpbmUgb3V0c2JfcChwb3J0LGZyb20sbGVuKQlvdXRzYihwb3J0LGZyb20sbGVuKQorI2RlZmluZSBvdXRzd19wKHBvcnQsZnJvbSxsZW4pCW91dHN3KHBvcnQsZnJvbSxsZW4pCisjZGVmaW5lIGluc2JfcChwb3J0LHRvLGxlbikJaW5zYihwb3J0LHRvLGxlbikKKyNkZWZpbmUgaW5zd19wKHBvcnQsdG8sbGVuKQlpbnN3KHBvcnQsdG8sbGVuKQorCisvKgorICogU3RyaW5nIHZlcnNpb24gb2YgSU8gbWVtb3J5IGFjY2VzcyBvcHM6CisgKi8KK2V4dGVybiB2b2lkIF9tZW1jcHlfZnJvbWlvKHZvaWQgKiwgdW5zaWduZWQgbG9uZywgc2l6ZV90KTsKK2V4dGVybiB2b2lkIF9tZW1jcHlfdG9pbyh1bnNpZ25lZCBsb25nLCBjb25zdCB2b2lkICosIHNpemVfdCk7CitleHRlcm4gdm9pZCBfbWVtc2V0X2lvKHVuc2lnbmVkIGxvbmcsIGludCwgc2l6ZV90KTsKKworLyoKKyAqIGlvcmVtYXAgYW5kIGZyaWVuZHMuCisgKgorICogaW9yZW1hcCB0YWtlcyBhIFBDSSBtZW1vcnkgYWRkcmVzcywgYXMgc3BlY2lmaWVkIGluCisgKiBEb2N1bWVudGF0aW9uL0lPLW1hcHBpbmcudHh0LgorICovCitleHRlcm4gdm9pZCAqIF9faW9yZW1hcCh1bnNpZ25lZCBsb25nLCBzaXplX3QsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuIHZvaWQgX19pb3VubWFwKHZvaWQgKmFkZHIpOworCisjaWZuZGVmIF9fYXJjaF9pb3JlbWFwCisjZGVmaW5lIGlvcmVtYXAoY29va2llLHNpemUpCQlfX2lvcmVtYXAoY29va2llLHNpemUsMCwxKQorI2RlZmluZSBpb3JlbWFwX25vY2FjaGUoY29va2llLHNpemUpCV9faW9yZW1hcChjb29raWUsc2l6ZSwwLDEpCisjZGVmaW5lIGlvdW5tYXAoY29va2llKQkJCV9faW91bm1hcChjb29raWUpCisjZWxzZQorI2RlZmluZSBpb3JlbWFwKGNvb2tpZSxzaXplKQkJX19hcmNoX2lvcmVtYXAoKGNvb2tpZSksKHNpemUpLDAsMSkKKyNkZWZpbmUgaW9yZW1hcF9ub2NhY2hlKGNvb2tpZSxzaXplKQlfX2FyY2hfaW9yZW1hcCgoY29va2llKSwoc2l6ZSksMCwxKQorI2RlZmluZSBpb3VubWFwKGNvb2tpZSkJCQlfX2FyY2hfaW91bm1hcChjb29raWUpCisjZW5kaWYKKworLyoKKyAqIERNQS1jb25zaXN0ZW50IG1hcHBpbmcgZnVuY3Rpb25zLiAgVGhlc2UgYWxsb2NhdGUvZnJlZSBhIHJlZ2lvbiBvZgorICogdW5jYWNoZWQsIHVud3JpdGUtYnVmZmVyZWQgbWFwcGVkIG1lbW9yeSBzcGFjZSBmb3IgdXNlIHdpdGggRE1BCisgKiBkZXZpY2VzLiAgVGhpcyBpcyB0aGUgImdlbmVyaWMiIHZlcnNpb24uICBUaGUgUENJIHNwZWNpZmljIHZlcnNpb24KKyAqIGlzIGluIHBjaS5oCisgKi8KK2V4dGVybiB2b2lkICpjb25zaXN0ZW50X2FsbG9jKGludCBnZnAsIHNpemVfdCBzaXplLCBkbWFfYWRkcl90ICpoYW5kbGUpOworZXh0ZXJuIHZvaWQgY29uc2lzdGVudF9mcmVlKHZvaWQgKnZhZGRyLCBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCBoYW5kbGUpOworZXh0ZXJuIHZvaWQgY29uc2lzdGVudF9zeW5jKHZvaWQgKnZhZGRyLCBzaXplX3Qgc2l6ZSwgaW50IHJ3KTsKKworLyoKKyAqIGNhbiB0aGUgaGFyZHdhcmUgbWFwIHRoaXMgaW50byBvbmUgc2VnbWVudCBvciBub3QsIGdpdmVuIG5vIG90aGVyCisgKiBjb25zdHJhaW50cy4KKyAqLworI2RlZmluZSBCSU9WRUNfTUVSR0VBQkxFKHZlYzEsIHZlYzIpCVwKKwkoKGJ2ZWNfdG9fcGh5cygodmVjMSkpICsgKHZlYzEpLT5idl9sZW4pID09IGJ2ZWNfdG9fcGh5cygodmVjMikpKQorCisvKgorICogQ29udmVydCBhIHBoeXNpY2FsIHBvaW50ZXIgdG8gYSB2aXJ0dWFsIGtlcm5lbCBwb2ludGVyIGZvciAvZGV2L21lbQorICogYWNjZXNzCisgKi8KKyNkZWZpbmUgeGxhdGVfZGV2X21lbV9wdHIocCkJX192YShwKQorCisvKgorICogQ29udmVydCBhIHZpcnR1YWwgY2FjaGVkIHBvaW50ZXIgdG8gYW4gdW5jYWNoZWQgcG9pbnRlcgorICovCisjZGVmaW5lIHhsYXRlX2Rldl9rbWVtX3B0cihwKQlwCisKKyNlbmRpZgkvKiBfX0tFUk5FTF9fICovCisjZW5kaWYJLyogX19BU01fQVJNX0lPX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybTI2L2lvYy5oIGIvaW5jbHVkZS9hc20tYXJtMjYvaW9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNiNDZlZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybTI2L2lvYy5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL2lvYy5oCisgKgorICogIENvcHlyaWdodCAoQykgUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgVXNlIHRoZXNlIG1hY3JvcyB0byByZWFkL3dyaXRlIHRoZSBJT0MuICBBbGwgaXQgZG9lcyBpcyBwZXJmb3JtIHRoZSBhY3R1YWwKKyAqICByZWFkL3dyaXRlLgorICovCisjaWZuZGVmIF9fQVNNQVJNX0hBUkRXQVJFX0lPQ19ICisjZGVmaW5lIF9fQVNNQVJNX0hBUkRXQVJFX0lPQ19ICisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKy8qCisgKiBXZSB1c2UgX19yYXdfYmFzZSB2YXJpYW50cyBoZXJlIHNvIHRoYXQgd2UgZ2l2ZSB0aGUgY29tcGlsZXIgdGhlCisgKiBjaGFuY2UgdG8ga2VlcCBJT0NfQkFTRSBpbiBhIHJlZ2lzdGVyLgorICovCisjZGVmaW5lIGlvY19yZWFkYihvZmYpCQlfX3Jhd19yZWFkYihJT0NfQkFTRSArIChvZmYpKQorI2RlZmluZSBpb2Nfd3JpdGViKHZhbCxvZmYpCV9fcmF3X3dyaXRlYih2YWwsIElPQ19CQVNFICsgKG9mZikpCisKKyNlbmRpZgorCisjZGVmaW5lIElPQ19DT05UUk9MCSgweDAwKQorI2RlZmluZSBJT0NfS0FSVFRYCSgweDA0KQorI2RlZmluZSBJT0NfS0FSVFJYCSgweDA0KQorCisjZGVmaW5lIElPQ19JUlFTVEFUQQkoMHgxMCkKKyNkZWZpbmUgSU9DX0lSUVJFUUEJKDB4MTQpCisjZGVmaW5lIElPQ19JUlFDTFJBCSgweDE0KQorI2RlZmluZSBJT0NfSVJRTUFTS0EJKDB4MTgpCisKKyNkZWZpbmUgSU9DX0lSUVNUQVRCCSgweDIwKQorI2RlZmluZSBJT0NfSVJRUkVRQgkoMHgyNCkKKyNkZWZpbmUgSU9DX0lSUU1BU0tCCSgweDI4KQorCisjZGVmaW5lIElPQ19GSVFTVEFUCSgweDMwKQorI2RlZmluZSBJT0NfRklRUkVRCSgweDM0KQorI2RlZmluZSBJT0NfRklRTUFTSwkoMHgzOCkKKworI2RlZmluZSBJT0NfVDBDTlRMCSgweDQwKQorI2RlZmluZSBJT0NfVDBMVENITAkoMHg0MCkKKyNkZWZpbmUgSU9DX1QwQ05USAkoMHg0NCkKKyNkZWZpbmUgSU9DX1QwTFRDSEgJKDB4NDQpCisjZGVmaW5lIElPQ19UMEdPCSgweDQ4KQorI2RlZmluZSBJT0NfVDBMQVRDSAkoMHg0YykKKworI2RlZmluZSBJT0NfVDFDTlRMCSgweDUwKQorI2RlZmluZSBJT0NfVDFMVENITAkoMHg1MCkKKyNkZWZpbmUgSU9DX1QxQ05USAkoMHg1NCkKKyNkZWZpbmUgSU9DX1QxTFRDSEgJKDB4NTQpCisjZGVmaW5lIElPQ19UMUdPCSgweDU4KQorI2RlZmluZSBJT0NfVDFMQVRDSAkoMHg1YykKKworI2RlZmluZSBJT0NfVDJDTlRMCSgweDYwKQorI2RlZmluZSBJT0NfVDJMVENITAkoMHg2MCkKKyNkZWZpbmUgSU9DX1QyQ05USAkoMHg2NCkKKyNkZWZpbmUgSU9DX1QyTFRDSEgJKDB4NjQpCisjZGVmaW5lIElPQ19UMkdPCSgweDY4KQorI2RlZmluZSBJT0NfVDJMQVRDSAkoMHg2YykKKworI2RlZmluZSBJT0NfVDNDTlRMCSgweDcwKQorI2RlZmluZSBJT0NfVDNMVENITAkoMHg3MCkKKyNkZWZpbmUgSU9DX1QzQ05USAkoMHg3NCkKKyNkZWZpbmUgSU9DX1QzTFRDSEgJKDB4NzQpCisjZGVmaW5lIElPQ19UM0dPCSgweDc4KQorI2RlZmluZSBJT0NfVDNMQVRDSAkoMHg3YykKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi9pb2N0bC5oIGIvaW5jbHVkZS9hc20tYXJtMjYvaW9jdGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2JiN2QwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtMjYvaW9jdGwuaApAQCAtMCwwICsxLDc0IEBACisvKgorICogbGludXgvaW9jdGwuaCBmb3IgTGludXggYnkgSC5ILiBCZXJnbWFuLgorICovCisKKyNpZm5kZWYgX0FTTUFSTV9JT0NUTF9ICisjZGVmaW5lIF9BU01BUk1fSU9DVExfSAorCisvKiBpb2N0bCBjb21tYW5kIGVuY29kaW5nOiAzMiBiaXRzIHRvdGFsLCBjb21tYW5kIGluIGxvd2VyIDE2IGJpdHMsCisgKiBzaXplIG9mIHRoZSBwYXJhbWV0ZXIgc3RydWN0dXJlIGluIHRoZSBsb3dlciAxNCBiaXRzIG9mIHRoZQorICogdXBwZXIgMTYgYml0cy4KKyAqIEVuY29kaW5nIHRoZSBzaXplIG9mIHRoZSBwYXJhbWV0ZXIgc3RydWN0dXJlIGluIHRoZSBpb2N0bCByZXF1ZXN0CisgKiBpcyB1c2VmdWwgZm9yIGNhdGNoaW5nIHByb2dyYW1zIGNvbXBpbGVkIHdpdGggb2xkIHZlcnNpb25zCisgKiBhbmQgdG8gYXZvaWQgb3ZlcndyaXRpbmcgdXNlciBzcGFjZSBvdXRzaWRlIHRoZSB1c2VyIGJ1ZmZlciBhcmVhLgorICogVGhlIGhpZ2hlc3QgMiBiaXRzIGFyZSByZXNlcnZlZCBmb3IgaW5kaWNhdGluZyB0aGUgYGBhY2Nlc3MgbW9kZScnLgorICogTk9URTogVGhpcyBsaW1pdHMgdGhlIG1heCBwYXJhbWV0ZXIgc2l6ZSB0byAxNmtCIC0xICEKKyAqLworCisvKgorICogVGhlIGZvbGxvd2luZyBpcyBmb3IgY29tcGF0aWJpbGl0eSBhY3Jvc3MgdGhlIHZhcmlvdXMgTGludXgKKyAqIHBsYXRmb3Jtcy4gIFRoZSBpMzg2IGlvY3RsIG51bWJlcmluZyBzY2hlbWUgZG9lc24ndCByZWFsbHkgZW5mb3JjZQorICogYSB0eXBlIGZpZWxkLiAgRGUgZmFjdG8sIGhvd2V2ZXIsIHRoZSB0b3AgOCBiaXRzIG9mIHRoZSBsb3dlciAxNgorICogYml0cyBhcmUgaW5kZWVkIHVzZWQgYXMgYSB0eXBlIGZpZWxkLCBzbyB3ZSBtaWdodCBqdXN0IGFzIHdlbGwgbWFrZQorICogdGhpcyBleHBsaWNpdCBoZXJlLiAgUGxlYXNlIGJlIHN1cmUgdG8gdXNlIHRoZSBkZWNvZGluZyBtYWNyb3MKKyAqIGJlbG93IGZyb20gbm93IG9uLgorICovCisjZGVmaW5lIF9JT0NfTlJCSVRTCTgKKyNkZWZpbmUgX0lPQ19UWVBFQklUUwk4CisjZGVmaW5lIF9JT0NfU0laRUJJVFMJMTQKKyNkZWZpbmUgX0lPQ19ESVJCSVRTCTIKKworI2RlZmluZSBfSU9DX05STUFTSwkoKDEgPDwgX0lPQ19OUkJJVFMpLTEpCisjZGVmaW5lIF9JT0NfVFlQRU1BU0sJKCgxIDw8IF9JT0NfVFlQRUJJVFMpLTEpCisjZGVmaW5lIF9JT0NfU0laRU1BU0sJKCgxIDw8IF9JT0NfU0laRUJJVFMpLTEpCisjZGVmaW5lIF9JT0NfRElSTUFTSwkoKDEgPDwgX0lPQ19ESVJCSVRTKS0xKQorCisjZGVmaW5lIF9JT0NfTlJTSElGVAkwCisjZGVmaW5lIF9JT0NfVFlQRVNISUZUCShfSU9DX05SU0hJRlQrX0lPQ19OUkJJVFMpCisjZGVmaW5lIF9JT0NfU0laRVNISUZUCShfSU9DX1RZUEVTSElGVCtfSU9DX1RZUEVCSVRTKQorI2RlZmluZSBfSU9DX0RJUlNISUZUCShfSU9DX1NJWkVTSElGVCtfSU9DX1NJWkVCSVRTKQorCisvKgorICogRGlyZWN0aW9uIGJpdHMuCisgKi8KKyNkZWZpbmUgX0lPQ19OT05FCTBVCisjZGVmaW5lIF9JT0NfV1JJVEUJMVUKKyNkZWZpbmUgX0lPQ19SRUFECTJVCisKKyNkZWZpbmUgX0lPQyhkaXIsdHlwZSxucixzaXplKSBcCisJKCgoZGlyKSAgPDwgX0lPQ19ESVJTSElGVCkgfCBcCisJICgodHlwZSkgPDwgX0lPQ19UWVBFU0hJRlQpIHwgXAorCSAoKG5yKSAgIDw8IF9JT0NfTlJTSElGVCkgfCBcCisJICgoc2l6ZSkgPDwgX0lPQ19TSVpFU0hJRlQpKQorCisvKiB1c2VkIHRvIGNyZWF0ZSBudW1iZXJzICovCisjZGVmaW5lIF9JTyh0eXBlLG5yKQkJX0lPQyhfSU9DX05PTkUsKHR5cGUpLChuciksMCkKKyNkZWZpbmUgX0lPUih0eXBlLG5yLHNpemUpCV9JT0MoX0lPQ19SRUFELCh0eXBlKSwobnIpLHNpemVvZihzaXplKSkKKyNkZWZpbmUgX0lPVyh0eXBlLG5yLHNpemUpCV9JT0MoX0lPQ19XUklURSwodHlwZSksKG5yKSxzaXplb2Yoc2l6ZSkpCisjZGVmaW5lIF9JT1dSKHR5cGUsbnIsc2l6ZSkJX0lPQyhfSU9DX1JFQUR8X0lPQ19XUklURSwodHlwZSksKG5yKSxzaXplb2Yoc2l6ZSkpCisKKy8qIHVzZWQgdG8gZGVjb2RlIGlvY3RsIG51bWJlcnMuLiAqLworI2RlZmluZSBfSU9DX0RJUihucikJCSgoKG5yKSA+PiBfSU9DX0RJUlNISUZUKSAmIF9JT0NfRElSTUFTSykKKyNkZWZpbmUgX0lPQ19UWVBFKG5yKQkJKCgobnIpID4+IF9JT0NfVFlQRVNISUZUKSAmIF9JT0NfVFlQRU1BU0spCisjZGVmaW5lIF9JT0NfTlIobnIpCQkoKChucikgPj4gX0lPQ19OUlNISUZUKSAmIF9JT0NfTlJNQVNLKQorI2RlZmluZSBfSU9DX1NJWkUobnIpCQkoKChucikgPj4gX0lPQ19TSVpFU0hJRlQpICYgX0lPQ19TSVpFTUFTSykKKworLyogLi4uYW5kIGZvciB0aGUgZHJpdmVycy9zb3VuZCBmaWxlcy4uLiAqLworCisjZGVmaW5lIElPQ19JTgkJKF9JT0NfV1JJVEUgPDwgX0lPQ19ESVJTSElGVCkKKyNkZWZpbmUgSU9DX09VVAkJKF9JT0NfUkVBRCA8PCBfSU9DX0RJUlNISUZUKQorI2RlZmluZSBJT0NfSU5PVVQJKChfSU9DX1dSSVRFfF9JT0NfUkVBRCkgPDwgX0lPQ19ESVJTSElGVCkKKyNkZWZpbmUgSU9DU0laRV9NQVNLCShfSU9DX1NJWkVNQVNLIDw8IF9JT0NfU0laRVNISUZUKQorI2RlZmluZSBJT0NTSVpFX1NISUZUCShfSU9DX1NJWkVTSElGVCkKKworI2VuZGlmIC8qIF9BU01BUk1fSU9DVExfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtMjYvaW9jdGxzLmggYi9pbmNsdWRlL2FzbS1hcm0yNi9pb2N0bHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTljN2Q4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtMjYvaW9jdGxzLmgKQEAgLTAsMCArMSw4MSBAQAorI2lmbmRlZiBfX0FTTV9BUk1fSU9DVExTX0gKKyNkZWZpbmUgX19BU01fQVJNX0lPQ1RMU19ICisKKyNpbmNsdWRlIDxhc20vaW9jdGwuaD4KKworLyogMHg1NCBpcyBqdXN0IGEgbWFnaWMgbnVtYmVyIHRvIG1ha2UgdGhlc2UgcmVsYXRpdmVseSB1bmlxdWUgKCdUJykgKi8KKworI2RlZmluZSBUQ0dFVFMJCTB4NTQwMQorI2RlZmluZSBUQ1NFVFMJCTB4NTQwMgorI2RlZmluZSBUQ1NFVFNXCQkweDU0MDMKKyNkZWZpbmUgVENTRVRTRgkJMHg1NDA0CisjZGVmaW5lIFRDR0VUQQkJMHg1NDA1CisjZGVmaW5lIFRDU0VUQQkJMHg1NDA2CisjZGVmaW5lIFRDU0VUQVcJCTB4NTQwNworI2RlZmluZSBUQ1NFVEFGCQkweDU0MDgKKyNkZWZpbmUgVENTQlJLCQkweDU0MDkKKyNkZWZpbmUgVENYT05DCQkweDU0MEEKKyNkZWZpbmUgVENGTFNICQkweDU0MEIKKyNkZWZpbmUgVElPQ0VYQ0wJMHg1NDBDCisjZGVmaW5lIFRJT0NOWENMCTB4NTQwRAorI2RlZmluZSBUSU9DU0NUVFkJMHg1NDBFCisjZGVmaW5lIFRJT0NHUEdSUAkweDU0MEYKKyNkZWZpbmUgVElPQ1NQR1JQCTB4NTQxMAorI2RlZmluZSBUSU9DT1VUUQkweDU0MTEKKyNkZWZpbmUgVElPQ1NUSQkJMHg1NDEyCisjZGVmaW5lIFRJT0NHV0lOU1oJMHg1NDEzCisjZGVmaW5lIFRJT0NTV0lOU1oJMHg1NDE0CisjZGVmaW5lIFRJT0NNR0VUCTB4NTQxNQorI2RlZmluZSBUSU9DTUJJUwkweDU0MTYKKyNkZWZpbmUgVElPQ01CSUMJMHg1NDE3CisjZGVmaW5lIFRJT0NNU0VUCTB4NTQxOAorI2RlZmluZSBUSU9DR1NPRlRDQVIJMHg1NDE5CisjZGVmaW5lIFRJT0NTU09GVENBUgkweDU0MUEKKyNkZWZpbmUgRklPTlJFQUQJMHg1NDFCCisjZGVmaW5lIFRJT0NJTlEJCUZJT05SRUFECisjZGVmaW5lIFRJT0NMSU5VWAkweDU0MUMKKyNkZWZpbmUgVElPQ0NPTlMJMHg1NDFECisjZGVmaW5lIFRJT0NHU0VSSUFMCTB4NTQxRQorI2RlZmluZSBUSU9DU1NFUklBTAkweDU0MUYKKyNkZWZpbmUgVElPQ1BLVAkJMHg1NDIwCisjZGVmaW5lIEZJT05CSU8JCTB4NTQyMQorI2RlZmluZSBUSU9DTk9UVFkJMHg1NDIyCisjZGVmaW5lIFRJT0NTRVRECTB4NTQyMworI2RlZmluZSBUSU9DR0VURAkweDU0MjQKKyNkZWZpbmUgVENTQlJLUAkJMHg1NDI1CS8qIE5lZWRlZCBmb3IgUE9TSVggdGNzZW5kYnJlYWsoKSAqLworI2RlZmluZSBUSU9DVFRZR1NUUlVDVAkweDU0MjYgIC8qIEZvciBkZWJ1Z2dpbmcgb25seSAqLworI2RlZmluZSBUSU9DU0JSSwkweDU0MjcgIC8qIEJTRCBjb21wYXRpYmlsaXR5ICovCisjZGVmaW5lIFRJT0NDQlJLCTB4NTQyOCAgLyogQlNEIGNvbXBhdGliaWxpdHkgKi8KKyNkZWZpbmUgVElPQ0dTSUQJMHg1NDI5ICAvKiBSZXR1cm4gdGhlIHNlc3Npb24gSUQgb2YgRkQgKi8KKyNkZWZpbmUgVElPQ0dQVE4JX0lPUignVCcsMHgzMCwgdW5zaWduZWQgaW50KSAvKiBHZXQgUHR5IE51bWJlciAob2YgcHR5LW11eCBkZXZpY2UpICovCisjZGVmaW5lIFRJT0NTUFRMQ0sJX0lPVygnVCcsMHgzMSwgaW50KSAgLyogTG9jay91bmxvY2sgUHR5ICovCisKKyNkZWZpbmUgRklPTkNMRVgJMHg1NDUwICAvKiB0aGVzZSBudW1iZXJzIG5lZWQgdG8gYmUgYWRqdXN0ZWQuICovCisjZGVmaW5lIEZJT0NMRVgJCTB4NTQ1MQorI2RlZmluZSBGSU9BU1lOQwkweDU0NTIKKyNkZWZpbmUgVElPQ1NFUkNPTkZJRwkweDU0NTMKKyNkZWZpbmUgVElPQ1NFUkdXSUxECTB4NTQ1NAorI2RlZmluZSBUSU9DU0VSU1dJTEQJMHg1NDU1CisjZGVmaW5lIFRJT0NHTENLVFJNSU9TCTB4NTQ1NgorI2RlZmluZSBUSU9DU0xDS1RSTUlPUwkweDU0NTcKKyNkZWZpbmUgVElPQ1NFUkdTVFJVQ1QJMHg1NDU4IC8qIEZvciBkZWJ1Z2dpbmcgb25seSAqLworI2RlZmluZSBUSU9DU0VSR0VUTFNSICAgMHg1NDU5IC8qIEdldCBsaW5lIHN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBUSU9DU0VSR0VUTVVMVEkgMHg1NDVBIC8qIEdldCBtdWx0aXBvcnQgY29uZmlnICAqLworI2RlZmluZSBUSU9DU0VSU0VUTVVMVEkgMHg1NDVCIC8qIFNldCBtdWx0aXBvcnQgY29uZmlnICovCisKKyNkZWZpbmUgVElPQ01JV0FJVAkweDU0NUMJLyogd2FpdCBmb3IgYSBjaGFuZ2Ugb24gc2VyaWFsIGlucHV0IGxpbmUocykgKi8KKyNkZWZpbmUgVElPQ0dJQ09VTlQJMHg1NDVECS8qIHJlYWQgc2VyaWFsIHBvcnQgaW5saW5lIGludGVycnVwdCBjb3VudHMgKi8KKyNkZWZpbmUgRklPUVNJWkUJMHg1NDVFCisKKy8qIFVzZWQgZm9yIHBhY2tldCBtb2RlICovCisjZGVmaW5lIFRJT0NQS1RfREFUQQkJIDAKKyNkZWZpbmUgVElPQ1BLVF9GTFVTSFJFQUQJIDEKKyNkZWZpbmUgVElPQ1BLVF9GTFVTSFdSSVRFCSAyCisjZGVmaW5lIFRJT0NQS1RfU1RPUAkJIDQKKyNkZWZpbmUgVElPQ1BLVF9TVEFSVAkJIDgKKyNkZWZpbmUgVElPQ1BLVF9OT1NUT1AJCTE2CisjZGVmaW5lIFRJT0NQS1RfRE9TVE9QCQkzMgorCisjZGVmaW5lIFRJT0NTRVJfVEVNVAkweDAxCS8qIFRyYW5zbWl0dGVyIHBoeXNpY2FsbHkgZW1wdHkgKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi9pcGMuaCBiL2luY2x1ZGUvYXNtLWFybTI2L2lwYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0NmUzZDkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0yNi9pcGMuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvaXBjLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi9pcGNidWYuaCBiL2luY2x1ZGUvYXNtLWFybTI2L2lwY2J1Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3NjgzOTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0yNi9pcGNidWYuaApAQCAtMCwwICsxLDI5IEBACisjaWZuZGVmIF9fQVNNQVJNX0lQQ0JVRl9ICisjZGVmaW5lIF9fQVNNQVJNX0lQQ0JVRl9ICisKKy8qCisgKiBUaGUgaXBjNjRfcGVybSBzdHJ1Y3R1cmUgZm9yIGFybSBhcmNoaXRlY3R1cmUuCisgKiBOb3RlIGV4dHJhIHBhZGRpbmcgYmVjYXVzZSB0aGlzIHN0cnVjdHVyZSBpcyBwYXNzZWQgYmFjayBhbmQgZm9ydGgKKyAqIGJldHdlZW4ga2VybmVsIGFuZCB1c2VyIHNwYWNlLgorICoKKyAqIFBhZCBzcGFjZSBpcyBsZWZ0IGZvcjoKKyAqIC0gMzItYml0IG1vZGVfdCBhbmQgc2VxCisgKiAtIDIgbWlzY2VsbGFuZW91cyAzMi1iaXQgdmFsdWVzCisgKi8KKworc3RydWN0IGlwYzY0X3Blcm0KK3sKKwlfX2tlcm5lbF9rZXlfdAkJa2V5OworCV9fa2VybmVsX3VpZDMyX3QJdWlkOworCV9fa2VybmVsX2dpZDMyX3QJZ2lkOworCV9fa2VybmVsX3VpZDMyX3QJY3VpZDsKKwlfX2tlcm5lbF9naWQzMl90CWNnaWQ7CisJX19rZXJuZWxfbW9kZV90CQltb2RlOworCXVuc2lnbmVkIHNob3J0CQlfX3BhZDE7CisJdW5zaWduZWQgc2hvcnQJCXNlcTsKKwl1bnNpZ25lZCBzaG9ydAkJX19wYWQyOworCXVuc2lnbmVkIGxvbmcJCV9fdW51c2VkMTsKKwl1bnNpZ25lZCBsb25nCQlfX3VudXNlZDI7Cit9OworCisjZW5kaWYgLyogX19BU01BUk1fSVBDQlVGX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybTI2L2lycS5oIGIvaW5jbHVkZS9hc20tYXJtMjYvaXJxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZiZDVhNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybTI2L2lycS5oCkBAIC0wLDAgKzEsNTIgQEAKKyNpZm5kZWYgX19BU01fQVJNX0lSUV9ICisjZGVmaW5lIF9fQVNNX0FSTV9JUlFfSAorCisjaW5jbHVkZSA8YXNtL3N5c2lycS5oPgorCisjaWZuZGVmIE5SX0lSUVMKKyNkZWZpbmUgTlJfSVJRUwkxMjgKKyNlbmRpZgorCisKKy8qIEpNQSAxOC4wNS4wMiBDb3BpZWQgb2ZmIGFyY2gvYXJtL2lycS5oICovCisjaWZuZGVmIGlycV9jYW5vbmljYWxpemUKKyNkZWZpbmUgaXJxX2Nhbm9uaWNhbGl6ZShpKSAgICAgKGkpCisjZW5kaWYKKworCisvKgorICogVXNlIHRoaXMgdmFsdWUgdG8gaW5kaWNhdGUgbGFjayBvZiBpbnRlcnJ1cHQKKyAqIGNhcGFiaWxpdHkKKyAqLworI2lmbmRlZiBOT19JUlEKKyNkZWZpbmUgTk9fSVJRCSgodW5zaWduZWQgaW50KSgtMSkpCisjZW5kaWYKKworc3RydWN0IGlycWFjdGlvbjsKKworI2RlZmluZSBkaXNhYmxlX2lycV9ub3N5bmMoaSkgZGlzYWJsZV9pcnEoaSkKKworZXh0ZXJuIHZvaWQgZGlzYWJsZV9pcnEodW5zaWduZWQgaW50KTsKK2V4dGVybiB2b2lkIGVuYWJsZV9pcnEodW5zaWduZWQgaW50KTsKKworI2RlZmluZSBfX0lSUVRfRkFMRURHRQkoMSA8PCAwKQorI2RlZmluZSBfX0lSUVRfUklTRURHRQkoMSA8PCAxKQorI2RlZmluZSBfX0lSUVRfTE9XTFZMCSgxIDw8IDIpCisjZGVmaW5lIF9fSVJRVF9ISUdITFZMCSgxIDw8IDMpCisKKyNkZWZpbmUgSVJRVF9OT0VER0UJKDApCisjZGVmaW5lIElSUVRfUklTSU5HCShfX0lSUVRfUklTRURHRSkKKyNkZWZpbmUgSVJRVF9GQUxMSU5HCShfX0lSUVRfRkFMRURHRSkKKyNkZWZpbmUgSVJRVF9CT1RIRURHRQkoX19JUlFUX1JJU0VER0V8X19JUlFUX0ZBTEVER0UpCisjZGVmaW5lIElSUVRfTE9XCShfX0lSUVRfTE9XTFZMKQorI2RlZmluZSBJUlFUX0hJR0gJKF9fSVJRVF9ISUdITFZMKQorI2RlZmluZSBJUlFUX1BST0JFCSgxIDw8IDQpCisKK2ludCBzZXRfaXJxX3R5cGUodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IHR5cGUpOworCitpbnQgc2V0dXBfaXJxKHVuc2lnbmVkIGludCwgc3RydWN0IGlycWFjdGlvbiAqKTsKK3N0cnVjdCBwdF9yZWdzOworaW50IGhhbmRsZV9JUlFfZXZlbnQodW5zaWduZWQgaW50LCBzdHJ1Y3QgcHRfcmVncyAqLCBzdHJ1Y3QgaXJxYWN0aW9uICopOworCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtMjYvaXJxY2hpcC5oIGIvaW5jbHVkZS9hc20tYXJtMjYvaXJxY2hpcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhMDA3YTkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0yNi9pcnFjaGlwLmgKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL21hY2gvaXJxLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDAgUnVzc2VsbCBLaW5nLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpZm5kZWYgX19BU01fQVJNX01BQ0hfSVJRX0gKKyNkZWZpbmUgX19BU01fQVJNX01BQ0hfSVJRX0gKKworc3RydWN0IGlycWRlc2M7CitzdHJ1Y3QgcHRfcmVnczsKK3N0cnVjdCBzZXFfZmlsZTsKKwordHlwZWRlZiB2b2lkICgqaXJxX2hhbmRsZXJfdCkodW5zaWduZWQgaW50LCBzdHJ1Y3QgaXJxZGVzYyAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKK3R5cGVkZWYgdm9pZCAoKmlycV9jb250cm9sX3QpKHVuc2lnbmVkIGludCk7CisKK3N0cnVjdCBpcnFjaGlwIHsKKwkvKgorCSAqIEFja25vd2xlZGdlIHRoZSBJUlEuCisJICogSWYgdGhpcyBpcyBhIGxldmVsLWJhc2VkIElSUSwgdGhlbiBpdCBpcyBleHBlY3RlZCB0byBtYXNrIHRoZSBJUlEKKwkgKiBhcyB3ZWxsLgorCSAqLworCXZvaWQgKCphY2spKHVuc2lnbmVkIGludCk7CisJLyoKKwkgKiBNYXNrIHRoZSBJUlEgaW4gaGFyZHdhcmUuCisJICovCisJdm9pZCAoKm1hc2spKHVuc2lnbmVkIGludCk7CisJLyoKKwkgKiBVbm1hc2sgdGhlIElSUSBpbiBoYXJkd2FyZS4KKwkgKi8KKwl2b2lkICgqdW5tYXNrKSh1bnNpZ25lZCBpbnQpOworCS8qCisJICogUmUtcnVuIHRoZSBJUlEKKwkgKi8KKwl2b2lkICgqcmVydW4pKHVuc2lnbmVkIGludCk7CisJLyoKKwkgKiBTZXQgdGhlIHR5cGUgb2YgdGhlIElSUS4KKwkgKi8KKwlpbnQgKCp0eXBlKSh1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7Cit9OworCitzdHJ1Y3QgaXJxZGVzYyB7CisJaXJxX2hhbmRsZXJfdAloYW5kbGU7CisJc3RydWN0IGlycWNoaXAJKmNoaXA7CisJc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uOworCisJdW5zaWduZWQgaW50CWVuYWJsZWQgIDogMTsJCS8qIElSUSBpcyBjdXJyZW50bHkgZW5hYmxlZCAgICovCisJdW5zaWduZWQgaW50CXRyaWdnZXJlZDogMTsJCS8qIElSUSBoYXMgb2NjdXJyZWQJICAgICAgKi8KKwl1bnNpZ25lZCBpbnQJcnVubmluZyAgOiAxOwkJLyogSVJRIGlzIHJ1bm5pbmcgICAgICAgICAgICAgKi8KKwl1bnNpZ25lZCBpbnQJcGVuZGluZyAgOiAxOwkJLyogSVJRIGlzIHBlbmRpbmcJICAgICAgKi8KKwl1bnNpZ25lZCBpbnQJcHJvYmluZyAgOiAxOwkJLyogSVJRIGluIHVzZSBmb3IgYSBwcm9iZSAgICAgKi8KKwl1bnNpZ25lZCBpbnQJcHJvYmVfb2sgOiAxOwkJLyogSVJRIGNhbiBiZSB1c2VkIGZvciBwcm9iZSAgKi8KKwl1bnNpZ25lZCBpbnQJdmFsaWQgICAgOiAxOwkJLyogSVJRIGNsYWltYWJsZQkgICAgICAqLworCXVuc2lnbmVkIGludAlub2F1dG9lbmFibGUgOiAxOwkvKiBkb24ndCBhdXRvbWF0aWNhbGx5IGVuYWJsZSBJUlEgKi8KKwl1bnNpZ25lZCBpbnQJdW51c2VkICAgOjIzOworCXVuc2lnbmVkIGludAlkZXB0aDsJCQkvKiBkaXNhYmxlIGRlcHRoCSAgICAgICovCisKKwkvKgorCSAqIElSUSBsb2NrIGRldGVjdGlvbgorCSAqLworCXVuc2lnbmVkIGludAlsY2tfY250OworCXVuc2lnbmVkIGludAlsY2tfcGM7CisJdW5zaWduZWQgaW50CWxja19qaWY7Cit9OworCitleHRlcm4gc3RydWN0IGlycWRlc2MgaXJxX2Rlc2NbXTsKKworLyoKKyAqIFRoaXMgaXMgaW50ZXJuYWwuICBEbyBub3QgdXNlIGl0LgorICovCitleHRlcm4gdm9pZCAoKmluaXRfYXJjaF9pcnEpKHZvaWQpOworZXh0ZXJuIHZvaWQgaW5pdF9GSVEodm9pZCk7CitleHRlcm4gaW50IHNob3dfZmlxX2xpc3Qoc3RydWN0IHNlcV9maWxlICosIHZvaWQgKik7Cit2b2lkIF9fc2V0X2lycV9oYW5kbGVyKHVuc2lnbmVkIGludCBpcnEsIGlycV9oYW5kbGVyX3QsIGludCk7CisKKy8qCisgKiBFeHRlcm5hbCBzdHVmZi4KKyAqLworI2RlZmluZSBzZXRfaXJxX2hhbmRsZXIoaXJxLGhhbmRsZXIpCQlfX3NldF9pcnFfaGFuZGxlcihpcnEsaGFuZGxlciwwKQorI2RlZmluZSBzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihpcnEsaGFuZGxlcikJX19zZXRfaXJxX2hhbmRsZXIoaXJxLGhhbmRsZXIsMSkKKwordm9pZCBzZXRfaXJxX2NoaXAodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycWNoaXAgKik7Cit2b2lkIHNldF9pcnFfZmxhZ3ModW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IGZsYWdzKTsKKworI2RlZmluZSBJUlFGX1ZBTElECSgxIDw8IDApCisjZGVmaW5lIElSUUZfUFJPQkUJKDEgPDwgMSkKKyNkZWZpbmUgSVJRRl9OT0FVVE9FTgkoMSA8PCAyKQorCisvKgorICogQnVpbHQtaW4gSVJRIGhhbmRsZXJzLgorICovCit2b2lkIGRvX2xldmVsX0lSUSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxZGVzYyAqZGVzYywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwordm9pZCBkb19lZGdlX0lSUSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxZGVzYyAqZGVzYywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwordm9pZCBkb19zaW1wbGVfSVJRKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFkZXNjICpkZXNjLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Cit2b2lkIGRvX2JhZF9JUlEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycWRlc2MgKmRlc2MsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK3ZvaWQgZHVtbXlfbWFza191bm1hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybTI2L2ttYXBfdHlwZXMuaCBiL2luY2x1ZGUvYXNtLWFybTI2L2ttYXBfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWRhNzEyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtMjYva21hcF90eXBlcy5oCkBAIC0wLDAgKzEsMTIgQEAKKyNpZm5kZWYgX19BUk1fS01BUF9UWVBFU19ICisjZGVmaW5lIF9fQVJNX0tNQVBfVFlQRVNfSAorCisvKgorICogVGhpcyBpcyB0aGUgImJhcmUgbWluaW11bSIuICBBSU8gc2VlbXMgdG8gcmVxdWlyZSB0aGlzLgorICovCitlbnVtIGttX3R5cGUgeworICAgICAgICBLTV9JUlEwLAorICAgICAgICBLTV9VU0VSMQorfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi9sZWRzLmggYi9pbmNsdWRlL2FzbS1hcm0yNi9sZWRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhjZTQxMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybTI2L2xlZHMuaApAQCAtMCwwICsxLDUxIEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9sZWRzLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk4IFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIEV2ZW50LWRyaXZlbiBpbnRlcmZhY2UgZm9yIExFRHMgb24gbWFjaGluZXMKKyAqICBBZGRlZCBsZWRfc3RhcnQgYW5kIGxlZF9zdG9wLSBBbGV4IEhvbGRlbiwgMjh0aCBEZWMgMTk5OC4KKyAqLworI2lmbmRlZiBBU01fQVJNX0xFRFNfSAorI2RlZmluZSBBU01fQVJNX0xFRFNfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKK3R5cGVkZWYgZW51bSB7CisJbGVkX2lkbGVfc3RhcnQsCisJbGVkX2lkbGVfZW5kLAorCWxlZF90aW1lciwKKwlsZWRfc3RhcnQsCisJbGVkX3N0b3AsCisJbGVkX2NsYWltLAkJLyogb3ZlcnJpZGUgaWRsZSAmIHRpbWVyIGxlZHMgKi8KKwlsZWRfcmVsZWFzZSwJCS8qIHJlc3RvcmUgaWRsZSAmIHRpbWVyIGxlZHMgKi8KKwlsZWRfc3RhcnRfdGltZXJfbW9kZSwKKwlsZWRfc3RvcF90aW1lcl9tb2RlLAorCWxlZF9ncmVlbl9vbiwKKwlsZWRfZ3JlZW5fb2ZmLAorCWxlZF9hbWJlcl9vbiwKKwlsZWRfYW1iZXJfb2ZmLAorCWxlZF9yZWRfb24sCisJbGVkX3JlZF9vZmYsCisJbGVkX2JsdWVfb24sCisJbGVkX2JsdWVfb2ZmLAorCS8qCisJICogSSB3YW50IHRoaXMgYmV0d2VlbiBsZWRfdGltZXIgYW5kIGxlZF9zdGFydCwgYnV0CisJICogc29tZW9uZSBoYXMgZGVjaWRlZCB0byBleHBvcnQgdGhpcyB0byB1c2VyIHNwYWNlCisJICovCisJbGVkX2hhbHRlZAorfSBsZWRfZXZlbnRfdDsKKworLyogVXNlIHRoaXMgcm91dGluZSB0byBoYW5kbGUgTEVEcyAqLworCisjaWZkZWYgQ09ORklHX0xFRFMKK2V4dGVybiB2b2lkICgqbGVkc19ldmVudCkobGVkX2V2ZW50X3QpOworI2Vsc2UKKyNkZWZpbmUgbGVkc19ldmVudChlKQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtMjYvbGltaXRzLmggYi9pbmNsdWRlL2FzbS1hcm0yNi9saW1pdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGQ4YzY2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtMjYvbGltaXRzLmgKQEAgLTAsMCArMSwxMSBAQAorI2lmbmRlZiBfX0FTTV9QSVBFX0gKKyNkZWZpbmUgX19BU01fUElQRV9ICisKKyNpZm5kZWYgUEFHRV9TSVpFCisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNlbmRpZgorCisjZGVmaW5lIFBJUEVfQlVGCVBBR0VfU0laRQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtMjYvbGlua2FnZS5oIGIvaW5jbHVkZS9hc20tYXJtMjYvbGlua2FnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiZTRiNGUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0yNi9saW5rYWdlLmgKQEAgLTAsMCArMSw3IEBACisjaWZuZGVmIF9fQVNNX0xJTktBR0VfSAorI2RlZmluZSBfX0FTTV9MSU5LQUdFX0gKKworI2RlZmluZSBfX0FMSUdOIC5hbGlnbiAwCisjZGVmaW5lIF9fQUxJR05fU1RSICIuYWxpZ24gMCIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi9sb2NhbC5oIGIvaW5jbHVkZS9hc20tYXJtMjYvbG9jYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzU5ZTkxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtMjYvbG9jYWwuaApAQCAtMCwwICsxLDIgQEAKKy8vRklYTUUgLSBuaWNrZWQgZnJvbSBhcm0zMiAtIGNoZWNrIGl0IGlzIGNvcnJlY3QuLi4KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9sb2NhbC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtMjYvbG9ja3MuaCBiL2luY2x1ZGUvYXNtLWFybTI2L2xvY2tzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFiM2JkYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybTI2L2xvY2tzLmgKQEAgLTAsMCArMSwxNjEgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL3Byb2MtYXJtby9sb2Nrcy5oCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMCBSdXNzZWxsIEtpbmcKKyAqICBGaXhlcyBmb3IgMjYgYml0IG1hY2hpbmVzLCAoQykgMjAwMCBEYXZlIEdpbGJlcnQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBJbnRlcnJ1cHQgc2FmZSBsb2NraW5nIGFzc2VtYmxlci4gCisgKi8KKyNpZm5kZWYgX19BU01fUFJPQ19MT0NLU19ICisjZGVmaW5lIF9fQVNNX1BST0NfTE9DS1NfSAorCisvKiBEZWNyZW1lbnRzIGJ5IDEsIGZhaWxzIGlmIHZhbHVlIDwgMCAqLworI2RlZmluZSBfX2Rvd25fb3AocHRyLGZhaWwpCQkJXAorCSh7CQkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJCVwKKwkiQCBhdG9taWMgZG93biBvcGVyYXRpb25cbiIJCVwKKyIJbW92CWlwLCBwY1xuIgkJCVwKKyIJb3JyCWxyLCBpcCwgIzB4MDgwMDAwMDBcbiIJCVwKKyIJdGVxcAlsciwgIzBcbiIJCQlcCisiCWxkcglsciwgWyUwXVxuIgkJCVwKKyIJYW5kCWlwLCBpcCwgIzB4MGMwMDAwMDNcbiIJCVwKKyIJc3VicwlsciwgbHIsICMxXG4iCQkJXAorIglzdHIJbHIsIFslMF1cbiIJCQlcCisiCW9ycm1pCWlwLCBpcCwgIzB4ODAwMDAwMDAJQCBzZXQgTlxuIiBcCisiCXRlcXAJaXAsICMwXG4iCQkJXAorIgltb3ZtaQlpcCwgJTBcbiIJCQlcCisiCWJsbWkJIiAjZmFpbAkJCQlcCisJOgkJCQkJXAorCTogInIiIChwdHIpCQkJCVwKKwk6ICJpcCIsICJsciIsICJjYyIpOwkJCVwKKwl9KQorCisjZGVmaW5lIF9fZG93bl9vcF9yZXQocHRyLGZhaWwpCQkJXAorCSh7CQkJCQlcCisJCXVuc2lnbmVkIGludCByZXN1bHQ7CQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJCVwKKyIJQCBkb3duX29wX3JldFxuIgkJCVwKKyIJbW92CWlwLCBwY1xuIgkJCVwKKyIJb3JyCWxyLCBpcCwgIzB4MDgwMDAwMDBcbiIJCVwKKyIJdGVxcAlsciwgIzBcbiIJCQlcCisiCWxkcglsciwgWyUxXVxuIgkJCVwKKyIJYW5kCWlwLCBpcCwgIzB4MGMwMDAwMDNcbiIJCVwKKyIJc3VicwlsciwgbHIsICMxXG4iCQkJXAorIglzdHIJbHIsIFslMV1cbiIJCQlcCisiCW9ycm1pCWlwLCBpcCwgIzB4ODAwMDAwMDAJQCBzZXQgTlxuIiBcCisiCXRlcXAJaXAsICMwXG4iCQkJXAorIgltb3ZtaQlpcCwgJTFcbiIJCQlcCisiCW1vdnBsCWlwLCAjMFxuIgkJCVwKKyIJYmxtaQkiICNmYWlsICJcbiIJCQlcCisiCW1vdgklMCwgaXAiCQkJCVwKKwk6ICI9JnIiIChyZXN1bHQpCQkJXAorCTogInIiIChwdHIpCQkJCVwKKwk6ICJpcCIsICJsciIsICJjYyIpOwkJCVwKKwlyZXN1bHQ7CQkJCQlcCisJfSkKKworI2RlZmluZSBfX3VwX29wKHB0cix3YWtlKQkJCVwKKwkoewkJCQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fICgJCQlcCisJIkAgdXBfb3BcbiIJCQkJXAorIgltb3YJaXAsIHBjXG4iCQkJXAorIglvcnIJbHIsIGlwLCAjMHgwODAwMDAwMFxuIgkJXAorIgl0ZXFwCWxyLCAjMFxuIgkJCVwKKyIJbGRyCWxyLCBbJTBdXG4iCQkJXAorIglhbmQJaXAsIGlwLCAjMHgwYzAwMDAwM1xuIgkJXAorIglhZGRzCWxyLCBsciwgIzFcbiIJCQlcCisiCXN0cglsciwgWyUwXVxuIgkJCVwKKyIJb3JybGUJaXAsIGlwLCAjMHg4MDAwMDAwMAlAIHNldCBOIC0gc2hvdWxkIHRoaXMgYmUgbWkgPz8/IERBRyAhIFxuIiBcCisiCXRlcXAJaXAsICMwXG4iCQkJXAorIgltb3ZtaQlpcCwgJTBcbiIJCQlcCisiCWJsbWkJIiAjd2FrZQkJCQlcCisJOgkJCQkJXAorCTogInIiIChwdHIpCQkJCVwKKwk6ICJpcCIsICJsciIsICJjYyIpOwkJCVwKKwl9KQorCisvKgorICogVGhlIHZhbHVlIDB4MDEwMDAwMDAgc3VwcG9ydHMgdXAgdG8gMTI4IHByb2Nlc3NvcnMgYW5kCisgKiBsb3RzIG9mIHByb2Nlc3Nlcy4gIEJJQVMgbXVzdCBiZSBjaG9zZW4gc3VjaCB0aGF0IHN1YidpbmcKKyAqIEJJQVMgb25jZSBwZXIgQ1BVIHdpbGwgcmVzdWx0IGluIHRoZSBsb25nIHJlbWFpbmluZworICogbmVnYXRpdmUuCisgKi8KKyNkZWZpbmUgUldfTE9DS19CSUFTICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBSV19MT0NLX0JJQVNfU1RSICIweDAxMDAwMDAwIgorCisvKiBEZWNyZW1lbnRzIGJ5IFJXX0xPQ0tfQklBUyByYXRoZXIgdGhhbiAxLCBmYWlscyBpZiB2YWx1ZSAhPSAwICovCisjZGVmaW5lIF9fZG93bl9vcF93cml0ZShwdHIsZmFpbCkJCVwKKwkoewkJCQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCVwKKwkiQCBkb3duX29wX3dyaXRlXG4iCQkJXAorIgltb3YJaXAsIHBjXG4iCQkJXAorIglvcnIJbHIsIGlwLCAjMHgwODAwMDAwMFxuIgkJXAorIgl0ZXFwCWxyLCAjMFxuIgkJCVwKKyIJYW5kCWlwLCBpcCwgIzB4MGMwMDAwMDNcbiIJCVwKK1wKKyIJbGRyCWxyLCBbJTBdXG4iCQkJXAorIglzdWJzCWxyLCBsciwgJTFcbiIJCQlcCisiCXN0cglsciwgWyUwXVxuIgkJCVwKK1wKKyIgb3JyZXEgaXAsIGlwLCAjMHg0MDAwMDAwMCBAIHNldCBaIFxuIlwKKyIJdGVxcAlpcCwgIzBcbiIJCQlcCisiCW1vdm5lCWlwLCAlMFxuIgkJCVwKKyIJYmxuZQkiICNmYWlsCQkJCVwKKwk6CQkJCQlcCisJOiAiciIgKHB0ciksICJJIiAoUldfTE9DS19CSUFTKQkJXAorCTogImlwIiwgImxyIiwgImNjIik7CQkJXAorCX0pCisKKy8qIEluY3JlbWVudHMgYnkgUldfTE9DS19CSUFTLCB3YWtlcyBpZiB2YWx1ZSA+PSAwICovCisjZGVmaW5lIF9fdXBfb3Bfd3JpdGUocHRyLHdha2UpCQkJXAorCSh7CQkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJXAorCSJAIHVwX29wX3JlYWRcbiIJCQlcCisiCW1vdglpcCwgcGNcbiIJCQlcCisiCW9ycglsciwgaXAsICMweDA4MDAwMDAwXG4iCQlcCisiCXRlcXAJbHIsICMwXG4iCQkJXAorXAorIglsZHIJbHIsIFslMF1cbiIJCQlcCisiCWFuZAlpcCwgaXAsICMweDBjMDAwMDAzXG4iCQlcCisiCWFkZHMJbHIsIGxyLCAlMVxuIgkJCVwKKyIJc3RyCWxyLCBbJTBdXG4iCQkJXAorXAorIiBvcnJjcyBpcCwgaXAsICMweDIwMDAwMDAwIEAgc2V0IENcbiIgXAorIgl0ZXFwCWlwLCAjMFxuIgkJCVwKKyIJbW92Y3MJaXAsICUwXG4iCQkJXAorIglibGNzCSIgI3dha2UJCQkJXAorCToJCQkJCVwKKwk6ICJyIiAocHRyKSwgIkkiIChSV19MT0NLX0JJQVMpCQlcCisJOiAiaXAiLCAibHIiLCAiY2MiKTsJCQlcCisJfSkKKworI2RlZmluZSBfX2Rvd25fb3BfcmVhZChwdHIsZmFpbCkJCVwKKwlfX2Rvd25fb3AocHRyLCBmYWlsKQorCisjZGVmaW5lIF9fdXBfb3BfcmVhZChwdHIsd2FrZSkJCQlcCisJKHsJCQkJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQlcCisJIkAgdXBfb3BfcmVhZFxuIgkJCVwKKyIJbW92CWlwLCBwY1xuIgkJCVwKKyIJb3JyCWxyLCBpcCwgIzB4MDgwMDAwMDBcbiIJCVwKKyIJdGVxcAlsciwgIzBcbiIJCQlcCitcCisiCWxkcglsciwgWyUwXVxuIgkJCVwKKyIJYW5kCWlwLCBpcCwgIzB4MGMwMDAwMDNcbiIJCVwKKyIJYWRkcwlsciwgbHIsICUxXG4iCQkJXAorIglzdHIJbHIsIFslMF1cbiIJCQlcCitcCisiIG9ycmVxIGlwLCBpcCwgIzB4NDAwMDAwMDAgQCBTZXQgWiBcbiIgXAorIgl0ZXFwCWlwLCAjMFxuIgkJCVwKKyIJbW92ZXEJaXAsICUwXG4iCQkJXAorIglibGVxCSIgI3dha2UJCQkJXAorCToJCQkJCVwKKwk6ICJyIiAocHRyKSwgIkkiICgxKQkJCVwKKwk6ICJpcCIsICJsciIsICJjYyIpOwkJCVwKKwl9KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybTI2L21hY2gtdHlwZXMuaCBiL2luY2x1ZGUvYXNtLWFybTI2L21hY2gtdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzQwNDViCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtMjYvbWFjaC10eXBlcy5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBVbmxpa2UgQVJNMzIgdGhpcyBpcyBOT1QgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQuIERPTlQgZGVsZXRlIGl0CisgKiBJbnN0ZWFkLCBjb25zaWRlciBGSVhNRS1pbmcgaXQgc28gaXRzIGF1dG8tZGV0ZWN0ZWQuCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUk1fTUFDSF9UWVBFX0gKKyNkZWZpbmUgX19BU01fQVJNX01BQ0hfVFlQRV9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK2V4dGVybiB1bnNpZ25lZCBpbnQgX19tYWNoaW5lX2FyY2hfdHlwZTsKKyNlbmRpZgorCisjZGVmaW5lIE1BQ0hfVFlQRV9BUkNISU1FREVTICAgICAgICAgICAxMAorI2RlZmluZSBNQUNIX1RZUEVfQTVLICAgICAgICAgICAgICAgICAgMTEKKworI2lmZGVmIENPTkZJR19BUkNIX0FSQworIyBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJCU1BQ0hfVFlQRV9BUkNISU1FREVTCisjIGRlZmluZSBtYWNoaW5lX2lzX2FyY2hpbWVkZXMoKQkobWFjaGluZV9hcmNoX3R5cGUgPT0gTUFDSF9UWVBFX0FSQ0hJTUVERVMpCisjZWxzZQorIyBkZWZpbmUgbWFjaGluZV9pc19hcmNoaW1lZGVzKCkJKDApCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19BUkNIX0E1SworIyBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJCU1BQ0hfVFlQRV9BNUsKKyMgZGVmaW5lIG1hY2hpbmVfaXNfYTVrKCkJCShtYWNoaW5lX2FyY2hfdHlwZSA9PSBNQUNIX1RZUEVfQTVLKQorI2Vsc2UKKyMgZGVmaW5lIG1hY2hpbmVfaXNfYTVrKCkJKDApCisjZW5kaWYKKworI2lmbmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorI2Vycm9yIFVua25vd24gbWFjaGluZSB0eXBlCisjZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlICAgICAgIF9fbWFjaGluZV9hcmNoX3R5cGUKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybTI2L21hcC5oIGIvaW5jbHVkZS9hc20tYXJtMjYvbWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmUxMmE3ZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybTI2L21hcC5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL21hcC5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIFBhZ2UgdGFibGUgbWFwcGluZyBjb25zdHJ1Y3RzIGFuZCBmdW5jdGlvbiBwcm90b3R5cGVzCisgKi8KK3N0cnVjdCBtYXBfZGVzYyB7CisJdW5zaWduZWQgbG9uZyB2aXJ0dWFsOworCXVuc2lnbmVkIGxvbmcgcGh5c2ljYWw7CisJdW5zaWduZWQgbG9uZyBsZW5ndGg7CisJdW5zaWduZWQgaW50IHR5cGU7Cit9OworCitzdHJ1Y3QgbWVtaW5mbzsKKworZXh0ZXJuIHZvaWQgY3JlYXRlX21lbW1hcF9ob2xlcyhzdHJ1Y3QgbWVtaW5mbyAqKTsKK2V4dGVybiB2b2lkIG1lbXRhYmxlX2luaXQoc3RydWN0IG1lbWluZm8gKik7CitleHRlcm4gdm9pZCBpb3RhYmxlX2luaXQoc3RydWN0IG1hcF9kZXNjICopOworZXh0ZXJuIHZvaWQgc2V0dXBfaW9fZGVzYyh2b2lkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybTI2L21jMTQ2ODE4cnRjLmggYi9pbmNsdWRlL2FzbS1hcm0yNi9tYzE0NjgxOHJ0Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyMzQxMzAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0yNi9tYzE0NjgxOHJ0Yy5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBNYWNoaW5lIGRlcGVuZGVudCBhY2Nlc3MgZnVuY3Rpb25zIGZvciBSVEMgcmVnaXN0ZXJzLgorICovCisjaWZuZGVmIF9BU01fTUMxNDY4MThSVENfSAorI2RlZmluZSBfQVNNX01DMTQ2ODE4UlRDX0gKKworI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2lmbmRlZiBSVENfUE9SVAorI2RlZmluZSBSVENfUE9SVCh4KQkoMHg3MCArICh4KSkKKyNkZWZpbmUgUlRDX0FMV0FZU19CQ0QJMQkvKiBSVEMgb3BlcmF0ZXMgaW4gYmluYXJ5IG1vZGUgKi8KKyNlbmRpZgorCisvKgorICogVGhlIHlldCBzdXBwb3J0ZWQgbWFjaGluZXMgYWxsIGFjY2VzcyB0aGUgUlRDIGluZGV4IHJlZ2lzdGVyIHZpYQorICogYW4gSVNBIHBvcnQgYWNjZXNzIGJ1dCB0aGUgd2F5IHRvIGFjY2VzcyB0aGUgZGF0ZSByZWdpc3RlciBkaWZmZXJzIC4uLgorICovCisjZGVmaW5lIENNT1NfUkVBRChhZGRyKSAoeyBcCitvdXRiX3AoKGFkZHIpLFJUQ19QT1JUKDApKTsgXAoraW5iX3AoUlRDX1BPUlQoMSkpOyBcCit9KQorI2RlZmluZSBDTU9TX1dSSVRFKHZhbCwgYWRkcikgKHsgXAorb3V0Yl9wKChhZGRyKSxSVENfUE9SVCgwKSk7IFwKK291dGJfcCgodmFsKSxSVENfUE9SVCgxKSk7IFwKK30pCisKKyNlbmRpZiAvKiBfQVNNX01DMTQ2ODE4UlRDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybTI2L21lbW9yeS5oIGIvaW5jbHVkZS9hc20tYXJtMjYvbWVtb3J5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBkNzg2MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybTI2L21lbW9yeS5oCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybTI2L21lbW9yeS5oCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMC0yMDAyIFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIE5vdGU6IHRoaXMgZmlsZSBzaG91bGQgbm90IGJlIGluY2x1ZGVkIGJ5IG5vbi1hc20vLmggZmlsZXMKKyAqLworI2lmbmRlZiBfX0FTTV9BUk1fTUVNT1JZX0gKKyNkZWZpbmUgX19BU01fQVJNX01FTU9SWV9ICisKKy8qCisgKiBVc2VyIHNwYWNlOiAyNk1CCisgKi8KKyNkZWZpbmUgVEFTS19TSVpFICAgICAgICgweDAxYTAwMDAwVUwpCisKKy8qCisgKiBUaGlzIGRlY2lkZXMgd2hlcmUgdGhlIGtlcm5lbCB3aWxsIHNlYXJjaCBmb3IgYSBmcmVlIGNodW5rIG9mIHZtCisgKiBzcGFjZSBkdXJpbmcgbW1hcCdzLgorICovCisjZGVmaW5lIFRBU0tfVU5NQVBQRURfQkFTRSAoVEFTS19TSVpFIC8gMykKKworLyoKKyAqIFBhZ2Ugb2Zmc2V0OiAzMk1CCisgKi8KKyNkZWZpbmUgUEFHRV9PRkZTRVQgICAgICgweDAyMDAwMDAwVUwpCisjZGVmaW5lIFBIWVNfT0ZGU0VUICAgICAoMHgwMjAwMDAwMFVMKQorCisjZGVmaW5lIFBIWVNfVE9fTklEKGFkZHIpICAgICAgICgwKQorCisvKgorICogUEZOcyBhcmUgdXNlZCB0byBkZXNjcmliZSBhbnkgcGh5c2ljYWwgcGFnZTsgdGhpcyBtZWFucworICogUEZOIDAgPT0gcGh5c2ljYWwgYWRkcmVzcyAwLgorICoKKyAqIFRoaXMgaXMgdGhlIFBGTiBvZiB0aGUgZmlyc3QgUkFNIHBhZ2UgaW4gdGhlIGtlcm5lbAorICogZGlyZWN0LW1hcHBlZCB2aWV3LiAgV2UgYXNzdW1lIHRoaXMgaXMgdGhlIGZpcnN0IHBhZ2UKKyAqIG9mIFJBTSBpbiB0aGUgbWVtX21hcCBhcyB3ZWxsLgorICovCisjZGVmaW5lIFBIWVNfUEZOX09GRlNFVAkoUEhZU19PRkZTRVQgPj4gUEFHRV9TSElGVCkKKworLyoKKyAqIFRoZXNlIGFyZSAqb25seSogdmFsaWQgb24gdGhlIGtlcm5lbCBkaXJlY3QgbWFwcGVkIFJBTSBtZW1vcnkuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB2aXJ0X3RvX3BoeXModm9pZCAqeCkKK3sKKwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpeDsKK30KKworc3RhdGljIGlubGluZSB2b2lkICpwaHlzX3RvX3ZpcnQodW5zaWduZWQgbG9uZyB4KQoreworCXJldHVybiAodm9pZCAqKSgodW5zaWduZWQgbG9uZyl4KTsKK30KKworI2RlZmluZSBfX3BhKHgpCQkJKHVuc2lnbmVkIGxvbmcpKHgpCisjZGVmaW5lIF9fdmEoeCkJCQkoKHZvaWQgKikodW5zaWduZWQgbG9uZykoeCkpCisKKy8qCisgKiBWaXJ0dWFsIDwtPiBETUEgdmlldyBtZW1vcnkgYWRkcmVzcyB0cmFuc2xhdGlvbnMKKyAqIEFnYWluLCB0aGVzZSBhcmUgKm9ubHkqIHZhbGlkIG9uIHRoZSBrZXJuZWwgZGlyZWN0IG1hcHBlZCBSQU0KKyAqIG1lbW9yeS4gIFVzZSBvZiB0aGVzZSBpcyAqZGVwcmVjaWF0ZWQqLgorICovCisjZGVmaW5lIHZpcnRfdG9fYnVzKHgpCQkoKHVuc2lnbmVkIGxvbmcpKHgpKQorI2RlZmluZSBidXNfdG9fdmlydCh4KQkJKCh2b2lkICopKCh1bnNpZ25lZCBsb25nKSh4KSkpCisKKy8qCisgKiBDb252ZXJzaW9uIGJldHdlZW4gYSBzdHJ1Y3QgcGFnZSBhbmQgYSBwaHlzaWNhbCBhZGRyZXNzLgorICoKKyAqIE5vdGU6IHdoZW4gY29udmVydGluZyBhbiB1bmtub3duIHBoeXNpY2FsIGFkZHJlc3MgdG8gYQorICogc3RydWN0IHBhZ2UsIHRoZSByZXN1bHRpbmcgcG9pbnRlciBtdXN0IGJlIHZhbGlkYXRlZAorICogdXNpbmcgVkFMSURfUEFHRSgpLiAgSXQgbXVzdCByZXR1cm4gYW4gaW52YWxpZCBzdHJ1Y3QgcGFnZQorICogZm9yIGFueSBwaHlzaWNhbCBhZGRyZXNzIG5vdCBjb3JyZXNwb25kaW5nIHRvIGEgc3lzdGVtCisgKiBSQU0gYWRkcmVzcy4KKyAqCisgKiAgcGFnZV90b19wZm4ocGFnZSkJY29udmVydCBhIHN0cnVjdCBwYWdlICogdG8gYSBQRk4gbnVtYmVyCisgKiAgcGZuX3RvX3BhZ2UocGZuKQljb252ZXJ0IGEgX3ZhbGlkXyBQRk4gbnVtYmVyIHRvIHN0cnVjdCBwYWdlICoKKyAqICBwZm5fdmFsaWQocGZuKQlpbmRpY2F0ZXMgd2hldGhlciBhIFBGTiBudW1iZXIgaXMgdmFsaWQKKyAqCisgKiAgdmlydF90b19wYWdlKGspCWNvbnZlcnQgYSBfdmFsaWRfIHZpcnR1YWwgYWRkcmVzcyB0byBzdHJ1Y3QgcGFnZSAqCisgKiAgdmlydF9hZGRyX3ZhbGlkKGspCWluZGljYXRlcyB3aGV0aGVyIGEgdmlydHVhbCBhZGRyZXNzIGlzIHZhbGlkCisgKi8KKyNkZWZpbmUgcGFnZV90b19wZm4ocGFnZSkJKCgocGFnZSkgLSBtZW1fbWFwKSArIFBIWVNfUEZOX09GRlNFVCkKKyNkZWZpbmUgcGZuX3RvX3BhZ2UocGZuKQkoKG1lbV9tYXAgKyAocGZuKSkgLSBQSFlTX1BGTl9PRkZTRVQpCisjZGVmaW5lIHBmbl92YWxpZChwZm4pCQkoKHBmbikgPj0gUEhZU19QRk5fT0ZGU0VUICYmIChwZm4pIDwgKFBIWVNfUEZOX09GRlNFVCArIG1heF9tYXBucikpCisKKyNkZWZpbmUgdmlydF90b19wYWdlKGthZGRyKQkocGZuX3RvX3BhZ2UoX19wYShrYWRkcikgPj4gUEFHRV9TSElGVCkpCisjZGVmaW5lIHZpcnRfYWRkcl92YWxpZChrYWRkcikJKChpbnQpKGthZGRyKSA+PSBQQUdFX09GRlNFVCAmJiAoaW50KShrYWRkcikgPCAodW5zaWduZWQgbG9uZyloaWdoX21lbW9yeSkKKworLyoKKyAqIEZvciBCSU8uICAid2lsbCBkaWUiLiAgS2lsbCBtZSB3aGVuIGJpb190b19waHlzKCkgYW5kIGJ2ZWNfdG9fcGh5cygpIGRpZS4KKyAqLworI2RlZmluZSBwYWdlX3RvX3BoeXMocGFnZSkJKHBhZ2VfdG9fcGZuKHBhZ2UpIDw8IFBBR0VfU0hJRlQpCisKKy8qCisgKiBXZSBzaG91bGQgcmVhbGx5IGVsaW1pbmF0ZSB2aXJ0X3RvX2J1cygpIGhlcmUgLSBpdCdzIGRlcHJlY2lhdGVkLgorICovCisjZGVmaW5lIHBhZ2VfdG9fYnVzKHBhZ2UpCShwYWdlX2FkZHJlc3MocGFnZSkpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtMjYvbW1hbi5oIGIvaW5jbHVkZS9hc20tYXJtMjYvbW1hbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjMjdiODIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0yNi9tbWFuLmgKQEAgLTAsMCArMSw0MyBAQAorI2lmbmRlZiBfX0FSTV9NTUFOX0hfXworI2RlZmluZSBfX0FSTV9NTUFOX0hfXworCisjZGVmaW5lIFBST1RfUkVBRAkweDEJCS8qIHBhZ2UgY2FuIGJlIHJlYWQgKi8KKyNkZWZpbmUgUFJPVF9XUklURQkweDIJCS8qIHBhZ2UgY2FuIGJlIHdyaXR0ZW4gKi8KKyNkZWZpbmUgUFJPVF9FWEVDCTB4NAkJLyogcGFnZSBjYW4gYmUgZXhlY3V0ZWQgKi8KKyNkZWZpbmUgUFJPVF9TRU0JMHg4CQkvKiBwYWdlIG1heSBiZSB1c2VkIGZvciBhdG9taWMgb3BzICovCisjZGVmaW5lIFBST1RfTk9ORQkweDAJCS8qIHBhZ2UgY2FuIG5vdCBiZSBhY2Nlc3NlZCAqLworI2RlZmluZSBQUk9UX0dST1dTRE9XTgkweDAxMDAwMDAwCS8qIG1wcm90ZWN0IGZsYWc6IGV4dGVuZCBjaGFuZ2UgdG8gc3RhcnQgb2YgZ3Jvd3Nkb3duIHZtYSAqLworI2RlZmluZSBQUk9UX0dST1dTVVAJMHgwMjAwMDAwMAkvKiBtcHJvdGVjdCBmbGFnOiBleHRlbmQgY2hhbmdlIHRvIGVuZCBvZiBncm93c3VwIHZtYSAqLworCisjZGVmaW5lIE1BUF9TSEFSRUQJMHgwMQkJLyogU2hhcmUgY2hhbmdlcyAqLworI2RlZmluZSBNQVBfUFJJVkFURQkweDAyCQkvKiBDaGFuZ2VzIGFyZSBwcml2YXRlICovCisjZGVmaW5lIE1BUF9UWVBFCTB4MGYJCS8qIE1hc2sgZm9yIHR5cGUgb2YgbWFwcGluZyAqLworI2RlZmluZSBNQVBfRklYRUQJMHgxMAkJLyogSW50ZXJwcmV0IGFkZHIgZXhhY3RseSAqLworI2RlZmluZSBNQVBfQU5PTllNT1VTCTB4MjAJCS8qIGRvbid0IHVzZSBhIGZpbGUgKi8KKworI2RlZmluZSBNQVBfR1JPV1NET1dOCTB4MDEwMAkJLyogc3RhY2stbGlrZSBzZWdtZW50ICovCisjZGVmaW5lIE1BUF9ERU5ZV1JJVEUJMHgwODAwCQkvKiBFVFhUQlNZICovCisjZGVmaW5lIE1BUF9FWEVDVVRBQkxFCTB4MTAwMAkJLyogbWFyayBpdCBhcyBhbiBleGVjdXRhYmxlICovCisjZGVmaW5lIE1BUF9MT0NLRUQJMHgyMDAwCQkvKiBwYWdlcyBhcmUgbG9ja2VkICovCisjZGVmaW5lIE1BUF9OT1JFU0VSVkUJMHg0MDAwCQkvKiBkb24ndCBjaGVjayBmb3IgcmVzZXJ2YXRpb25zICovCisjZGVmaW5lIE1BUF9QT1BVTEFURSAgICAweDgwMDAgICAgICAgICAgLyogcG9wdWxhdGUgKHByZWZhdWx0KSBwYWdlIHRhYmxlcyAqLworI2RlZmluZSBNQVBfTk9OQkxPQ0sgICAgMHgxMDAwMCAgICAgICAgIC8qIGRvIG5vdCBibG9jayBvbiBJTyAqLworCisjZGVmaW5lIE1TX0FTWU5DCTEJCS8qIHN5bmMgbWVtb3J5IGFzeW5jaHJvbm91c2x5ICovCisjZGVmaW5lIE1TX0lOVkFMSURBVEUJMgkJLyogaW52YWxpZGF0ZSB0aGUgY2FjaGVzICovCisjZGVmaW5lIE1TX1NZTkMJCTQJCS8qIHN5bmNocm9ub3VzIG1lbW9yeSBzeW5jICovCisKKyNkZWZpbmUgTUNMX0NVUlJFTlQJMQkJLyogbG9jayBhbGwgY3VycmVudCBtYXBwaW5ncyAqLworI2RlZmluZSBNQ0xfRlVUVVJFCTIJCS8qIGxvY2sgYWxsIGZ1dHVyZSBtYXBwaW5ncyAqLworCisjZGVmaW5lIE1BRFZfTk9STUFMCTB4MAkJLyogZGVmYXVsdCBwYWdlLWluIGJlaGF2aW9yICovCisjZGVmaW5lIE1BRFZfUkFORE9NCTB4MQkJLyogcGFnZS1pbiBtaW5pbXVtIHJlcXVpcmVkICovCisjZGVmaW5lIE1BRFZfU0VRVUVOVElBTAkweDIJCS8qIHJlYWQtYWhlYWQgYWdncmVzc2l2ZWx5ICovCisjZGVmaW5lIE1BRFZfV0lMTE5FRUQJMHgzCQkvKiBwcmUtZmF1bHQgcGFnZXMgKi8KKyNkZWZpbmUgTUFEVl9ET05UTkVFRAkweDQJCS8qIGRpc2NhcmQgdGhlc2UgcGFnZXMgKi8KKworLyogY29tcGF0aWJpbGl0eSBmbGFncyAqLworI2RlZmluZSBNQVBfQU5PTglNQVBfQU5PTllNT1VTCisjZGVmaW5lIE1BUF9GSUxFCTAKKworI2VuZGlmIC8qIF9fQVJNX01NQU5fSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi9tbXUuaCBiL2luY2x1ZGUvYXNtLWFybTI2L21tdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliOGQzZDcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0yNi9tbXUuaApAQCAtMCwwICsxLDkgQEAKKyNpZm5kZWYgX19BUk1fTU1VX0gKKyNkZWZpbmUgX19BUk1fTU1VX0gKKworLyoKKyAqIFRoZSBBUk0gZG9lc24ndCBoYXZlIGEgbW11IGNvbnRleHQKKyAqLwordHlwZWRlZiBzdHJ1Y3QgeyB9IG1tX2NvbnRleHRfdDsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi9tbXVfY29udGV4dC5oIGIvaW5jbHVkZS9hc20tYXJtMjYvbW11X2NvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTkyOWJmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtMjYvbW11X2NvbnRleHQuaApAQCAtMCwwICsxLDUxIEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9tbXVfY29udGV4dC5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NiBSdXNzZWxsIEtpbmcuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgQ2hhbmdlbG9nOgorICogICAyNy0wNi0xOTk2CVJNSwlDcmVhdGVkCisgKi8KKyNpZm5kZWYgX19BU01fQVJNX01NVV9DT05URVhUX0gKKyNkZWZpbmUgX19BU01fQVJNX01NVV9DT05URVhUX0gKKworI2RlZmluZSBpbml0X25ld19jb250ZXh0KHRzayxtbSkJMAorI2RlZmluZSBkZXN0cm95X2NvbnRleHQobW0pCQlkbyB7IH0gd2hpbGUoMCkKKworLyoKKyAqIFRoaXMgaXMgY2FsbGVkIHdoZW4gInRzayIgaXMgYWJvdXQgdG8gZW50ZXIgbGF6eSBUTEIgbW9kZS4KKyAqCisgKiBtbTogIGRlc2NyaWJlcyB0aGUgY3VycmVudGx5IGFjdGl2ZSBtbSBjb250ZXh0CisgKiB0c2s6IHRhc2sgd2hpY2ggaXMgZW50ZXJpbmcgbGF6eSB0bGIKKyAqIGNwdTogY3B1IG51bWJlciB3aGljaCBpcyBlbnRlcmluZyBsYXp5IHRsYgorICoKKyAqIHRzay0+bW0gd2lsbCBiZSBOVUxMCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorZW50ZXJfbGF6eV90bGIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworfQorCisvKgorICogVGhpcyBpcyB0aGUgYWN0dWFsIG1tIHN3aXRjaCBhcyBmYXIgYXMgdGhlIHNjaGVkdWxlcgorICogaXMgY29uY2VybmVkLiAgTm8gcmVnaXN0ZXJzIGFyZSB0b3VjaGVkLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK3N3aXRjaF9tbShzdHJ1Y3QgbW1fc3RydWN0ICpwcmV2LCBzdHJ1Y3QgbW1fc3RydWN0ICpuZXh0LAorCSAgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJY3B1X3N3aXRjaF9tbShuZXh0LT5wZ2QsIG5leHQpOworfQorCisjZGVmaW5lIGRlYWN0aXZhdGVfbW0odHNrLG1tKSAgIGRvIHsgfSB3aGlsZSAoMCkKKworc3RhdGljIGlubGluZSB2b2lkIGFjdGl2YXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKnByZXYsIHN0cnVjdCBtbV9zdHJ1Y3QgKm5leHQpCit7CisJY3B1X3N3aXRjaF9tbShuZXh0LT5wZ2QsIG5leHQpOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybTI2L21vZHVsZS5oIGIvaW5jbHVkZS9hc20tYXJtMjYvbW9kdWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE1N2YxNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybTI2L21vZHVsZS5oCkBAIC0wLDAgKzEsNyBAQAorI2lmbmRlZiBfQVNNX0FSTV9NT0RVTEVfSAorI2RlZmluZSBfQVNNX0FSTV9NT0RVTEVfSAorLyoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgYXJtIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBtb2R1bGUgY29kZS4KKyAqLworCisjZW5kaWYgLyogX0FTTV9BUk1fTU9EVUxFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybTI2L21zZ2J1Zi5oIGIvaW5jbHVkZS9hc20tYXJtMjYvbXNnYnVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNiMzViOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybTI2L21zZ2J1Zi5oCkBAIC0wLDAgKzEsMzEgQEAKKyNpZm5kZWYgX0FTTUFSTV9NU0dCVUZfSAorI2RlZmluZSBfQVNNQVJNX01TR0JVRl9ICisKKy8qIAorICogVGhlIG1zcWlkNjRfZHMgc3RydWN0dXJlIGZvciBhcm0gYXJjaGl0ZWN0dXJlLgorICogTm90ZSBleHRyYSBwYWRkaW5nIGJlY2F1c2UgdGhpcyBzdHJ1Y3R1cmUgaXMgcGFzc2VkIGJhY2sgYW5kIGZvcnRoCisgKiBiZXR3ZWVuIGtlcm5lbCBhbmQgdXNlciBzcGFjZS4KKyAqCisgKiBQYWQgc3BhY2UgaXMgbGVmdCBmb3I6CisgKiAtIDY0LWJpdCB0aW1lX3QgdG8gc29sdmUgeTIwMzggcHJvYmxlbQorICogLSAyIG1pc2NlbGxhbmVvdXMgMzItYml0IHZhbHVlcworICovCisKK3N0cnVjdCBtc3FpZDY0X2RzIHsKKwlzdHJ1Y3QgaXBjNjRfcGVybSBtc2dfcGVybTsKKwlfX2tlcm5lbF90aW1lX3QgbXNnX3N0aW1lOwkvKiBsYXN0IG1zZ3NuZCB0aW1lICovCisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDE7CisJX19rZXJuZWxfdGltZV90IG1zZ19ydGltZTsJLyogbGFzdCBtc2dyY3YgdGltZSAqLworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQyOworCV9fa2VybmVsX3RpbWVfdCBtc2dfY3RpbWU7CS8qIGxhc3QgY2hhbmdlIHRpbWUgKi8KKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkMzsKKwl1bnNpZ25lZCBsb25nICBtc2dfY2J5dGVzOwkvKiBjdXJyZW50IG51bWJlciBvZiBieXRlcyBvbiBxdWV1ZSAqLworCXVuc2lnbmVkIGxvbmcgIG1zZ19xbnVtOwkvKiBudW1iZXIgb2YgbWVzc2FnZXMgaW4gcXVldWUgKi8KKwl1bnNpZ25lZCBsb25nICBtc2dfcWJ5dGVzOwkvKiBtYXggbnVtYmVyIG9mIGJ5dGVzIG9uIHF1ZXVlICovCisJX19rZXJuZWxfcGlkX3QgbXNnX2xzcGlkOwkvKiBwaWQgb2YgbGFzdCBtc2dzbmQgKi8KKwlfX2tlcm5lbF9waWRfdCBtc2dfbHJwaWQ7CS8qIGxhc3QgcmVjZWl2ZSBwaWQgKi8KKwl1bnNpZ25lZCBsb25nICBfX3VudXNlZDQ7CisJdW5zaWduZWQgbG9uZyAgX191bnVzZWQ1OworfTsKKworI2VuZGlmIC8qIF9BU01BUk1fTVNHQlVGX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybTI2L25hbWVpLmggYi9pbmNsdWRlL2FzbS1hcm0yNi9uYW1laS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0MDJkM2IKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0yNi9uYW1laS5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qIAorICogbGludXgvaW5jbHVkZS9hc20tYXJtL25hbWVpLmgKKyAqCisgKiBSb3V0aW5lcyB0byBoYW5kbGUgZmFtb3VzIC91c3IvZ25lbXVsCisgKiBEZXJpdmVkIGZyb20gdGhlIFNwYXJjIHZlcnNpb24gb2YgdGhpcyBmaWxlCisgKgorICogSW5jbHVkZWQgZnJvbSBsaW51eC9mcy9uYW1laS5jCisgKi8KKworI2lmbmRlZiBfX0FTTUFSTV9OQU1FSV9ICisjZGVmaW5lIF9fQVNNQVJNX05BTUVJX0gKKworI2RlZmluZSBBUk1fQlNEX0VNVUwgInVzci9nbmVtdWwvYnNkLyIKKworc3RhdGljIGlubGluZSBjaGFyICpfX2VtdWxfcHJlZml4KHZvaWQpCit7CisJc3dpdGNoIChjdXJyZW50LT5wZXJzb25hbGl0eSkgeworCWNhc2UgUEVSX0JTRDoKKwkJcmV0dXJuIEFSTV9CU0RfRU1VTDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gTlVMTDsKKwl9Cit9CisKKyNlbmRpZiAvKiBfX0FTTUFSTV9OQU1FSV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi9vbGRsYXRjaGVzLmggYi9pbmNsdWRlL2FzbS1hcm0yNi9vbGRsYXRjaGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM4NzA4OQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybTI2L29sZGxhdGNoZXMuaApAQCAtMCwwICsxLDM3IEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWFyYy9vbGRsYXRjaGVzLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk2IFJ1c3NlbGwgS2luZywgRGF2ZSBHaWxiZXJ0CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgTW9kaWZpY2F0aW9uczoKKyAqICAgMDQtMDQtMTk5OAlQSkIvUk1LCU1lcmdlZCBhcmMgYW5kIGE1ayB2ZXJzaW9ucworICovCisjaWZuZGVmIF9BU01fQVJDSF9PTERMQVRDSF9ICisjZGVmaW5lIF9BU01fQVJDSF9PTERMQVRDSF9ICisKKyNkZWZpbmUgTEFUQ0hBX0ZEU0VMMCAgICAoMTw8MCkKKyNkZWZpbmUgTEFUQ0hBX0ZEU0VMMSAgICAoMTw8MSkKKyNkZWZpbmUgTEFUQ0hBX0ZEU0VMMiAgICAoMTw8MikKKyNkZWZpbmUgTEFUQ0hBX0ZEU0VMMyAgICAoMTw8MykKKyNkZWZpbmUgTEFUQ0hBX0ZEU0VMQUxMICAoMHhmKQorI2RlZmluZSBMQVRDSEFfU0lERVNFTCAgICgxPDw0KQorI2RlZmluZSBMQVRDSEFfTU9UT1IgICAgICgxPDw1KQorI2RlZmluZSBMQVRDSEFfSU5VU0UgICAgICgxPDw2KQorI2RlZmluZSBMQVRDSEFfQ0hBTkdFUlNUICgxPDw3KQorCisjZGVmaW5lIExBVENIQl9GRENERU5TSVRZICAoMTw8MSkKKyNkZWZpbmUgTEFUQ0hCX0ZEQ1JFU0VUICAgICgxPDwzKQorI2RlZmluZSBMQVRDSEJfUFJJTlRTVFJPQkUgKDE8PDQpCisKKy8qIG5ld3ZhbD0ob2xkdmFsICYgbWFzayl8bmV3ZGF0YSAqLwordm9pZCBvbGRsYXRjaF9idXBkYXRlKHVuc2lnbmVkIGNoYXIgbWFzayx1bnNpZ25lZCBjaGFyIG5ld2RhdGEpOworCisvKiBuZXd2YWw9KG9sZHZhbCAmIG1hc2spfG5ld2RhdGEgKi8KK3ZvaWQgb2xkbGF0Y2hfYXVwZGF0ZSh1bnNpZ25lZCBjaGFyIG1hc2ssdW5zaWduZWQgY2hhciBuZXdkYXRhKTsKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybTI2L3BhZ2UuaCBiL2luY2x1ZGUvYXNtLWFybTI2L3BhZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzM0MDc5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtMjYvcGFnZS5oCkBAIC0wLDAgKzEsMTE1IEBACisjaWZuZGVmIF9BU01BUk1fUEFHRV9ICisjZGVmaW5lIF9BU01BUk1fUEFHRV9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2lmZGVmIF9fS0VSTkVMX18KKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK2V4dGVybiB2b2lkIF9fY2xlYXJfdXNlcl9wYWdlKHZvaWQgKnAsIHVuc2lnbmVkIGxvbmcgdXNlcik7CitleHRlcm4gdm9pZCBfX2NvcHlfdXNlcl9wYWdlKHZvaWQgKnRvLCBjb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBsb25nIHVzZXIpOworZXh0ZXJuIHZvaWQgY29weV9wYWdlKHZvaWQgKnRvLCBjb25zdCB2b2lkICpmcm9tKTsKKworLy9GSVhNRSB0aGVzZSBtYXkgYmUgd3Jvbmcgb24gQVJNMjYKKyNkZWZpbmUgY2xlYXJfdXNlcl9wYWdlKGFkZHIsdmFkZHIscGcpCQkJXAorCWRvIHsJCQkJCQlcCisJCXByZWVtcHRfZGlzYWJsZSgpOwkJCVwKKwkJX19jbGVhcl91c2VyX3BhZ2UoYWRkciwgdmFkZHIpOwlcCisJCXByZWVtcHRfZW5hYmxlKCk7CQkJXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgY29weV91c2VyX3BhZ2UodG8sZnJvbSx2YWRkcixwZykJCVwKKwlkbyB7CQkJCQkJXAorCQlwcmVlbXB0X2Rpc2FibGUoKTsJCQlcCisJCV9fY29weV91c2VyX3BhZ2UodG8sIGZyb20sIHZhZGRyKTsJXAorCQlwcmVlbXB0X2VuYWJsZSgpOwkJCVwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIGNsZWFyX3BhZ2UocGFnZSkJbWVtemVybygodm9pZCAqKShwYWdlKSwgUEFHRV9TSVpFKQorI2RlZmluZSBjb3B5X3BhZ2UodG8sIGZyb20pICBfX2NvcHlfdXNlcl9wYWdlKHRvLCBmcm9tLCAwKTsKKworI3VuZGVmIFNUUklDVF9NTV9UWVBFQ0hFQ0tTCisKKyNpZmRlZiBTVFJJQ1RfTU1fVFlQRUNIRUNLUworLyoKKyAqIFRoZXNlIGFyZSB1c2VkIHRvIG1ha2UgdXNlIG9mIEMgdHlwZS1jaGVja2luZy4uCisgKi8KK3R5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBwZ2Q7IH0gcGdkX3Q7Cit0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgcHRlOyB9IHB0ZV90OwordHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHBtZDsgfSBwbWRfdDsKK3R5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBwZ3Byb3Q7IH0gcGdwcm90X3Q7CisKKyNkZWZpbmUgcGdkX3ZhbCh4KSAgICAgICgoeCkucGdkKQorI2RlZmluZSBwdGVfdmFsKHgpICAgICAgKCh4KS5wdGUpCisjZGVmaW5lIHBtZF92YWwoeCkgICAgICAoKHgpLnBtZCkKKyNkZWZpbmUgcGdwcm90X3ZhbCh4KSAgICgoeCkucGdwcm90KQorCisjZGVmaW5lIF9fcHRlKHgpICAgICAgICAoKHB0ZV90KSB7ICh4KSB9ICkKKyNkZWZpbmUgX19wbWQoeCkgICAgICAgICgocG1kX3QpIHsgKHgpIH0gKQorI2RlZmluZSBfX3BncHJvdCh4KSAgICAgKChwZ3Byb3RfdCkgeyAoeCkgfSApCisKKyNlbHNlCisvKgorICogLi4gd2hpbGUgdGhlc2UgbWFrZSBpdCBlYXNpZXIgb24gdGhlIGNvbXBpbGVyCisgKi8KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBwZ2RfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBwdGVfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBwbWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBwZ3Byb3RfdDsKKworLy9GSVhNRSAtIHNob3VsZCB0aGVzZSBjYXN0IHRvIHVuc2lnbmVkIGxvbmc/CisjZGVmaW5lIHBnZF92YWwoeCkgICAgICAoeCkKKyNkZWZpbmUgcHRlX3ZhbCh4KSAgICAgICh4KQorI2RlZmluZSBwbWRfdmFsKHgpICAgICAgKHgpCisjZGVmaW5lIHBncHJvdF92YWwoeCkgICAoeCkKKworI2RlZmluZSBfX3B0ZSh4KSAgICAgICAgKHgpCisjZGVmaW5lIF9fcG1kKHgpICAgICAgICAoeCkKKyNkZWZpbmUgX19wZ3Byb3QoeCkgICAgICh4KQorCisjZW5kaWYgLyogU1RSSUNUX01NX1RZUEVDSEVDS1MgKi8KKyNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisvKiBQQUdFX1NISUZUIGRldGVybWluZXMgdGhlIHBhZ2Ugc2l6ZS4gIFRoaXMgaXMgY29uZmlndXJhYmxlLiAqLworI2lmIGRlZmluZWQoQ09ORklHX1BBR0VTSVpFXzE2KQorI2RlZmluZSBQQUdFX1NISUZUICAgICAgMTQgICAgICAgICAgICAgIC8qIDE2SyAqLworI2Vsc2UgICAgICAgICAgIC8qIGRlZmF1bHQgKi8KKyNkZWZpbmUgUEFHRV9TSElGVCAgICAgIDE1ICAgICAgICAgICAgICAvKiAzMksgKi8KKyNlbmRpZgorCisjZGVmaW5lIEVYRUNfUEFHRVNJWkUgICAzMjc2OAorCisjZGVmaW5lIFBBR0VfU0laRQkJKDFVTCA8PCBQQUdFX1NISUZUKQorI2RlZmluZSBQQUdFX01BU0sJCSh+KFBBR0VfU0laRS0xKSkKKworLyogdG8gYWxpZ24gdGhlIHBvaW50ZXIgdG8gdGhlIChuZXh0KSBwYWdlIGJvdW5kYXJ5ICovCisjZGVmaW5lIFBBR0VfQUxJR04oYWRkcikJKCgoYWRkcikrUEFHRV9TSVpFLTEpJlBBR0VfTUFTSykKKworI2lmZGVmIF9fS0VSTkVMX18KKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKy8qIFB1cmUgMl5uIHZlcnNpb24gb2YgZ2V0X29yZGVyICovCitzdGF0aWMgaW5saW5lIGludCBnZXRfb3JkZXIodW5zaWduZWQgbG9uZyBzaXplKQoreworCWludCBvcmRlcjsKKworCXNpemUgPSAoc2l6ZS0xKSA+PiAoUEFHRV9TSElGVC0xKTsKKwlvcmRlciA9IC0xOworCWRvIHsKKwkJc2l6ZSA+Pj0gMTsKKwkJb3JkZXIrKzsKKwl9IHdoaWxlIChzaXplKTsKKwlyZXR1cm4gb3JkZXI7Cit9CisKKyNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+CisKKyNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCisKKyNkZWZpbmUgVk1fREFUQV9ERUZBVUxUX0ZMQUdTCShWTV9SRUFEIHwgVk1fV1JJVEUgfCBWTV9FWEVDIHwgXAorCQkJCSBWTV9NQVlSRUFEIHwgVk1fTUFZV1JJVEUgfCBWTV9NQVlFWEVDKQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybTI2L3BhcmFtLmggYi9pbmNsdWRlL2FzbS1hcm0yNi9wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiMWU1MmQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0yNi9wYXJhbS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL3BhcmFtLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTkgUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2lmbmRlZiBfX0FTTV9QQVJBTV9ICisjZGVmaW5lIF9fQVNNX1BBUkFNX0gKKworI2lmbmRlZiBfX0tFUk5FTF9IWgorI2RlZmluZSBfX0tFUk5FTF9IWgkxMDAKKyNlbmRpZgorCisjaWZkZWYgX19LRVJORUxfXworIyBkZWZpbmUgSFoJCV9fS0VSTkVMX0haCS8qIEludGVybmFsIGtlcm5lbCB0aW1lciBmcmVxdWVuY3kgKi8KKyMgZGVmaW5lIFVTRVJfSFoJMTAwCQkvKiBVc2VyIGludGVyZmFjZXMgYXJlIGluICJ0aWNrcyIgKi8KKyMgZGVmaW5lIENMT0NLU19QRVJfU0VDCShVU0VSX0haKQkvKiBsaWtlIHRpbWVzKCkgKi8KKyNlbHNlCisjIGRlZmluZSBIWgkJMTAwCisjZW5kaWYKKworI2lmbmRlZiBOT0dST1VQCisjZGVmaW5lIE5PR1JPVVAgICAgICAgICAoLTEpCisjZW5kaWYKKworLyogbWF4IGxlbmd0aCBvZiBob3N0bmFtZSAqLworI2RlZmluZSBNQVhIT1NUTkFNRUxFTiAgNjQKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybTI2L3BhcnBvcnQuaCBiL2luY2x1ZGUvYXNtLWFybTI2L3BhcnBvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmY5MGM3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtMjYvcGFycG9ydC5oCkBAIC0wLDAgKzEsMTggQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL3BhcnBvcnQuaDogQVJNLXNwZWNpZmljIHBhcnBvcnQgaW5pdGlhbGlzYXRpb24KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwICBUaW0gV2F1Z2ggPHRpbUBjeWJlcmVsay5kZW1vbi5jby51az4KKyAqCisgKiBUaGlzIGZpbGUgc2hvdWxkIG9ubHkgYmUgaW5jbHVkZWQgYnkgZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfcGMuYy4KKyAqLworCisjaWZuZGVmIF9fQVNNQVJNX1BBUlBPUlRfSAorI2RlZmluZSBfX0FTTUFSTV9QQVJQT1JUX0gKKworc3RhdGljIGludCBfX2RldmluaXQgcGFycG9ydF9wY19maW5kX2lzYV9wb3J0cyAoaW50IGF1dG9pcnEsIGludCBhdXRvZG1hKTsKK3N0YXRpYyBpbnQgX19kZXZpbml0IHBhcnBvcnRfcGNfZmluZF9ub25wY2lfcG9ydHMgKGludCBhdXRvaXJxLCBpbnQgYXV0b2RtYSkKK3sKKwlyZXR1cm4gcGFycG9ydF9wY19maW5kX2lzYV9wb3J0cyAoYXV0b2lycSwgYXV0b2RtYSk7Cit9CisKKyNlbmRpZiAvKiAhKF9BU01BUk1fUEFSUE9SVF9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtMjYvcGNpLmggYi9pbmNsdWRlL2FzbS1hcm0yNi9wY2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWM2N2VkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtMjYvcGNpLmgKQEAgLTAsMCArMSw2IEBACisvKiBTaG91bGQgbm90IGJlIG5lZWRlZC4gSURFIHN0dXBpZGl0eSAqLworLyogSk1BIDE4LjA1LjAzIC0gaXMga2luZGEgbmVlZGVkLCBpZiBvbmx5IHRvIHRlbGwgaXQgd2UgZG9uJ3QgaGF2ZSBhIFBDSSBidXMgKi8KKworI2RlZmluZSBQQ0lfRE1BX0JVU19JU19QSFlTICAJCTAKKyNkZWZpbmUgcGNpYmlvc19zY2FuX2FsbF9mbnMoYSwgYikJMAorCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi9wZXJjcHUuaCBiL2luY2x1ZGUvYXNtLWFybTI2L3BlcmNwdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0ZTMyZDgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0yNi9wZXJjcHUuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19BUk1fUEVSQ1BVCisjZGVmaW5lIF9fQVJNX1BFUkNQVQorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGVyY3B1Lmg+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtMjYvcGdhbGxvYy5oIGIvaW5jbHVkZS9hc20tYXJtMjYvcGdhbGxvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0MzcxNjcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0yNi9wZ2FsbG9jLmgKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vcGdhbGxvYy5oCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMC0yMDAxIFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpZm5kZWYgX0FTTUFSTV9QR0FMTE9DX0gKKyNkZWZpbmUgX0FTTUFSTV9QR0FMTE9DX0gKKworI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworZXh0ZXJuIGttZW1fY2FjaGVfdCAqcHRlX2NhY2hlOworCitzdGF0aWMgaW5saW5lIHB0ZV90ICpwdGVfYWxsb2Nfb25lX2tlcm5lbChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKXsKKwlyZXR1cm4ga21lbV9jYWNoZV9hbGxvYyhwdGVfY2FjaGUsIEdGUF9LRVJORUwpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcHRlX2ZyZWVfa2VybmVsKHB0ZV90ICpwdGUpeworICAgICAgICBpZiAocHRlKQorICAgICAgICAgICAgICAgIGttZW1fY2FjaGVfZnJlZShwdGVfY2FjaGUsIHB0ZSk7Cit9CisKKy8qCisgKiBQb3B1bGF0ZSB0aGUgcG1kcCBlbnRyeSB3aXRoIGEgcG9pbnRlciB0byB0aGUgcHRlLiAgVGhpcyBwbWQgaXMgcGFydAorICogb2YgdGhlIG1tIGFkZHJlc3Mgc3BhY2UuCisgKgorICogSWYgJ21tJyBpcyB0aGUgaW5pdCB0YXNrcyBtbSwgdGhlbiB3ZSBhcmUgZG9pbmcgYSB2bWFsbG9jLCBhbmQgd2UKKyAqIG5lZWQgdG8gc2V0IHN0dWZmIHVwIGNvcnJlY3RseSBmb3IgaXQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorcG1kX3BvcHVsYXRlX2tlcm5lbChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZHAsIHB0ZV90ICpwdGVwKQoreworLy9GSVhNRSAtIGlzIHRoaXMgZG9pbmcgdGhlIHJpZ2h0IHRoaW5nPworICAgICAgICBzZXRfcG1kKHBtZHAsICh1bnNpZ25lZCBsb25nKXB0ZXAgfCAxLypGSVhNRSBfUE1EX1BSRVNFTlQqLyk7Cit9CisKKy8qCisgKiBGSVhNRSAtIFdlIHVzZSB0aGUgb2xkIDIuNS41LXJtazEgaGFjayBmb3IgdGhpcy4KKyAqIFRoaXMgaXMgbm90IHRydWx5IGNvcnJlY3QsIGJ1dCBzaG91bGQgYmUgZnVuY3Rpb25hbC4KKyAqLworI2RlZmluZSBwdGVfYWxsb2Nfb25lKG1tLGFkZHIpICAoKHN0cnVjdCBwYWdlICopcHRlX2FsbG9jX29uZV9rZXJuZWwobW0sYWRkcikpCisjZGVmaW5lIHB0ZV9mcmVlKHB0ZSkgICAgICAgICAgIHB0ZV9mcmVlX2tlcm5lbCgocHRlX3QgKilwdGUpCisjZGVmaW5lIHBtZF9wb3B1bGF0ZShtbSxwbWRwLHB0ZXApIHBtZF9wb3B1bGF0ZV9rZXJuZWwobW0scG1kcCwocHRlX3QgKilwdGVwKQorCisvKgorICogU2luY2Ugd2UgaGF2ZSBvbmx5IHR3by1sZXZlbCBwYWdlIHRhYmxlcywgdGhlc2UgYXJlIHRyaXZpYWwKKyAqIAorICogdHJpY2sgX19wbWRfYWxsb2MgaW50byBvcHRpbWlzaW5nIGF3YXkuIFRoZSBhY3R1YWwgdmFsdWUgaXMgaXJyZWxldmFudCB0aG91Z2ggYXMgaXQKKyAqIGlzIHRocm93biBhd2F5LiBJdCBqdXN0IGNhbnQgYmUgemVyby4gLUlNCisgKi8KKworI2RlZmluZSBwbWRfYWxsb2Nfb25lKG1tLGFkZHIpCQkoeyBCVUcoKTsgKChwbWRfdCAqKTIpOyB9KQorI2RlZmluZSBwbWRfZnJlZShwbWQpCQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBwZ2RfcG9wdWxhdGUobW0scG1kLHB0ZSkJQlVHKCkKKworZXh0ZXJuIHBnZF90ICpnZXRfcGdkX3Nsb3coc3RydWN0IG1tX3N0cnVjdCAqbW0pOworZXh0ZXJuIHZvaWQgZnJlZV9wZ2Rfc2xvdyhwZ2RfdCAqcGdkKTsKKworI2RlZmluZSBwZ2RfYWxsb2MobW0pCQkJZ2V0X3BnZF9zbG93KG1tKQorI2RlZmluZSBwZ2RfZnJlZShwZ2QpCQkJZnJlZV9wZ2Rfc2xvdyhwZ2QpCisKKyNkZWZpbmUgY2hlY2tfcGd0X2NhY2hlKCkJCWRvIHsgfSB3aGlsZSAoMCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1hcm0yNi9wZ3RhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYwYjg5MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybTI2L3BndGFibGUuaApAQCAtMCwwICsxLDMwNSBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0yNi9wZ3RhYmxlLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDIgUnVzc2VsbCBLaW5nCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzIElhbiBNb2x0b24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaWZuZGVmIF9BU01BUk1fUEdUQUJMRV9ICisjZGVmaW5lIF9BU01BUk1fUEdUQUJMRV9ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy80bGV2ZWwtZml4dXAuaD4KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS9tZW1vcnkuaD4KKworLyoKKyAqIFRoZSB0YWJsZSBiZWxvdyBkZWZpbmVzIHRoZSBwYWdlIHByb3RlY3Rpb24gbGV2ZWxzIHRoYXQgd2UgaW5zZXJ0IGludG8gb3VyCisgKiBMaW51eCBwYWdlIHRhYmxlIHZlcnNpb24uICBUaGVzZSBnZXQgdHJhbnNsYXRlZCBpbnRvIHRoZSBiZXN0IHRoYXQgdGhlCisgKiBhcmNoaXRlY3R1cmUgY2FuIHBlcmZvcm0uICBOb3RlIHRoYXQgb24gbW9zdCBBUk0gaGFyZHdhcmU6CisgKiAgMSkgV2UgY2Fubm90IGRvIGV4ZWN1dGUgcHJvdGVjdGlvbgorICogIDIpIElmIHdlIGNvdWxkIGRvIGV4ZWN1dGUgcHJvdGVjdGlvbiwgdGhlbiByZWFkIGlzIGltcGxpZWQKKyAqICAzKSB3cml0ZSBpbXBsaWVzIHJlYWQgcGVybWlzc2lvbnMKKyAqLworI2RlZmluZSBfX1AwMDAgIFBBR0VfTk9ORQorI2RlZmluZSBfX1AwMDEgIFBBR0VfUkVBRE9OTFkKKyNkZWZpbmUgX19QMDEwICBQQUdFX0NPUFkKKyNkZWZpbmUgX19QMDExICBQQUdFX0NPUFkKKyNkZWZpbmUgX19QMTAwICBQQUdFX1JFQURPTkxZCisjZGVmaW5lIF9fUDEwMSAgUEFHRV9SRUFET05MWQorI2RlZmluZSBfX1AxMTAgIFBBR0VfQ09QWQorI2RlZmluZSBfX1AxMTEgIFBBR0VfQ09QWQorCisjZGVmaW5lIF9fUzAwMCAgUEFHRV9OT05FCisjZGVmaW5lIF9fUzAwMSAgUEFHRV9SRUFET05MWQorI2RlZmluZSBfX1MwMTAgIFBBR0VfU0hBUkVECisjZGVmaW5lIF9fUzAxMSAgUEFHRV9TSEFSRUQKKyNkZWZpbmUgX19TMTAwICBQQUdFX1JFQURPTkxZCisjZGVmaW5lIF9fUzEwMSAgUEFHRV9SRUFET05MWQorI2RlZmluZSBfX1MxMTAgIFBBR0VfU0hBUkVECisjZGVmaW5lIF9fUzExMSAgUEFHRV9TSEFSRUQKKworLyoKKyAqIFBNRF9TSElGVCBkZXRlcm1pbmVzIHRoZSBzaXplIG9mIHRoZSBhcmVhIGEgc2Vjb25kLWxldmVsIHBhZ2UgdGFibGUgY2FuIG1hcAorICogUEdESVJfU0hJRlQgZGV0ZXJtaW5lcyB3aGF0IGEgdGhpcmQtbGV2ZWwgcGFnZSB0YWJsZSBlbnRyeSBjYW4gbWFwCisgKi8KKyNkZWZpbmUgUEdEX1NISUZUCQkyNQorI2RlZmluZSBQTURfU0hJRlQJCTIwCisKKyNkZWZpbmUgUEdEX1NJWkUgICAgICAgICAgICAgICAgKDFVTCA8PCBQR0RfU0hJRlQpCisjZGVmaW5lIFBHRF9NQVNLICAgICAgICAgICAgICAgICh+KFBHRF9TSVpFLTEpKQorI2RlZmluZSBQTURfU0laRSAgICAgICAgICAgICAgICAoMVVMIDw8IFBNRF9TSElGVCkKKyNkZWZpbmUgUE1EX01BU0sgICAgICAgICAgICAgICAgKH4oUE1EX1NJWkUtMSkpCisKKy8qIFRoZSBrZXJuZWwgbGlrZXMgdG8gdXNlIHRoZXNlIG5hbWVzIGZvciB0aGUgYWJvdmUgKGljaykgKi8KKyNkZWZpbmUgUEdESVJfU0laRSBQR0RfU0laRQorI2RlZmluZSBQR0RJUl9NQVNLIFBHRF9NQVNLCisKKyNkZWZpbmUgUFRSU19QRVJfUEdEICAgICAgICAgICAgMzIKKyNkZWZpbmUgUFRSU19QRVJfUE1EICAgICAgICAgICAgMQorI2RlZmluZSBQVFJTX1BFUl9QVEUgICAgICAgICAgICAzMgorCisjZGVmaW5lIEZJUlNUX1VTRVJfUEdEX05SICAgICAgIDEKKyNkZWZpbmUgVVNFUl9QVFJTX1BFUl9QR0QgICAgICAgKChUQVNLX1NJWkUvUEdEX1NJWkUpIC0gRklSU1RfVVNFUl9QR0RfTlIpCisKKy8vIEZJWE1FIC0gV1RGPworI2RlZmluZSBMSUJSQVJZX1RFWFRfU1RBUlQJMHgwYzAwMDAwMAorCisKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK2V4dGVybiB2b2lkIF9fcHRlX2Vycm9yKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCB1bnNpZ25lZCBsb25nIHZhbCk7CitleHRlcm4gdm9pZCBfX3BtZF9lcnJvcihjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgdW5zaWduZWQgbG9uZyB2YWwpOworZXh0ZXJuIHZvaWQgX19wZ2RfZXJyb3IoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIHVuc2lnbmVkIGxvbmcgdmFsKTsKKworI2RlZmluZSBwdGVfRVJST1IocHRlKQkJX19wdGVfZXJyb3IoX19GSUxFX18sIF9fTElORV9fLCBwdGVfdmFsKHB0ZSkpCisjZGVmaW5lIHBtZF9FUlJPUihwbWQpCQlfX3BtZF9lcnJvcihfX0ZJTEVfXywgX19MSU5FX18sIHBtZF92YWwocG1kKSkKKyNkZWZpbmUgcGdkX0VSUk9SKHBnZCkJCV9fcGdkX2Vycm9yKF9fRklMRV9fLCBfX0xJTkVfXywgcGdkX3ZhbChwZ2QpKQorCisvKgorICogWkVST19QQUdFIGlzIGEgZ2xvYmFsIHNoYXJlZCBwYWdlIHRoYXQgaXMgYWx3YXlzIHplcm86IHVzZWQKKyAqIGZvciB6ZXJvLW1hcHBlZCBtZW1vcnkgYXJlYXMgZXRjLi4KKyAqLworZXh0ZXJuIHN0cnVjdCBwYWdlICplbXB0eV96ZXJvX3BhZ2U7CisjZGVmaW5lIFpFUk9fUEFHRSh2YWRkcikJKGVtcHR5X3plcm9fcGFnZSkKKworI2RlZmluZSBwdGVfcGZuKHB0ZSkJCShwdGVfdmFsKHB0ZSkgPj4gUEFHRV9TSElGVCkKKyNkZWZpbmUgcHRlX3BhZ2UocHRlKSAgICAgICAgICAgKHBmbl90b19wYWdlKHB0ZV9wZm4ocHRlKSkpCisjZGVmaW5lIHBmbl9wdGUocGZuLHByb3QpCShfX3B0ZSgoKHBmbikgPDwgUEFHRV9TSElGVCkgfCBwZ3Byb3RfdmFsKHByb3QpKSkKKyNkZWZpbmUgcGFnZXNfdG9fbWIoeCkJCSgoeCkgPj4gKDIwIC0gUEFHRV9TSElGVCkpCisjZGVmaW5lIG1rX3B0ZShwYWdlLHByb3QpCXBmbl9wdGUocGFnZV90b19wZm4ocGFnZSkscHJvdCkKKyNkZWZpbmUgcGFnZV9wdGVfcHJvdChwYWdlLHByb3QpCW1rX3B0ZShwYWdlLCBwcm90KQorI2RlZmluZSBwYWdlX3B0ZShwYWdlKQkJbWtfcHRlKHBhZ2UsIF9fcGdwcm90KDApKQorCisvKgorICogVGVybWlub2xvZ3k6IFBHRCA9IFBhZ2UgRGlyZWN0b3J5LCBQTUQgPSBQYWdlIE1pZGRsZSBEaXJlY3RvcnksCisgKiAgICAgICAgICAgICAgUFRFID0gUGFnZSBUYWJsZSBFbnRyeQorICoKKyAqIG9uIGFybTI2IHdlIGhhdmUgbm8gMm5kIGxldmVsIHBhZ2UgdGFibGUuIHdlIHNpbXVsYXRlIHRoaXMgYnkgcmVtb3ZpbmcgdGhlCisgKiBQTUQuCisgKgorICogcGdkX25vbmUgaXMgMCB0byBwcmV2ZXJudCBwbWRfYWxsb2MoKSBjYWxsaW5nIF9fcG1kX2FsbG9jKCkuIFRoaXMgY2F1c2VzIGl0CisgKiB0byByZXR1cm4gcG1kX29mZnNldChwZ2QsYWRkcikgd2hpY2ggaXMgYSBwb2ludGVyIHRvIHRoZSBwZ2QgKElPVywgYSBuby1vcCkuCisgKgorICogaG93ZXZlciwgdG8gd29yayB0aGlzIHdheSwgd2hpbHN0IHdlIGFyZSBhbGxvY2F0aW5nIDMyIHBnZHMsIGNvbnRhaW5pbmcgMzIKKyAqIFBURXMsIHRoZSBhY3R1YWwgd29yayBpcyBkb25lIG9uIHRoZSBQTURzLCB0aHVzOgorICoKKyAqIGluc3RlYWQgb2YgIG1tLT5wZ2QtPnBtZC0+cHRlCisgKiB3ZSBoYXZlICAgICBtbS0+cGdkcG1kLT5wdGUKKyAqCisgKiBJT1csIHRoaW5rIG9mIFBHRCBvcGVyYXRpb25zIGFuZCBQTUQgb25lcyBhcyBiZWluZyB0aGUgc2FtZSB0aGluZywganVzdAorICogdGhhdCBQR0Qgc3R1ZmYgZGVhbHMgd2l0aCB0aGUgbW1fc3RydWN0IHNpZGUgb2YgdGhpbmdzLCB3aGVyYXMgUE1EIHN0dWZmCisgKiBkZWFscyB3aXRoIHRoZSBwdGUgc2lkZSBvZiB0aGluZ3MuCisgKgorICogYWRkaXRpb25hbGx5LCB3ZSBzdG9yZSBzb21lIGJpdHMgaW4gdGhlIFBHRCBhbmQgUFRFIHBvaW50ZXJzOiAKKyAqIFBHRHM6CisgKiAgIG8gVGhlIGxvd2VzdCAoMSkgYml0IG9mIHRoZSBQR0QgaXMgdG8gZGV0ZXJtaW5lIGlmIGl0IGlzIHByZXNlbnQgb3Igc3dhcC4KKyAqICAgbyBUaGUgMm5kIGJpdCBvZiB0aGUgUEdEIGlzIHVudXNlZCBhbmQgbXVzdCBiZSB6ZXJvLgorICogICBvIFRoZSB0b3AgNiBiaXRzIG9mIHRoZSBQR0QgbXVzdCBiZSB6ZXJvLiAKKyAqIFBURXM6CisgKiAgIG8gVGhlIGxvd2VyIDUgYml0cyBvZiBhIHB0ZSBhcmUgZmxhZ3MuIGJpdCAxIGlzIHRoZSAncHJlc2VudCcgZmxhZy4gVGhlCisgKiAgICAgb3RoZXJzIGRldGVybWluZSB0aGUgcGFnZXMgYXR0cmlidXRlcy4KKyAqCisgKiB0aGUgcGdkX3ZhbCwgcG1kX3ZhbCwgYW5kIHB0ZV92YWwgbWFjcm9zIHNlZW0gdG8gYmUgcHJpdmF0ZSB0byBvdXIgY29kZS4KKyAqIFRoZXkgZ2V0IHRoZSBSQVcgdmFsdWUgb2YgdGhlIFBHRC9QTUQvUFRFIGVudHJ5LCBpbmNsdWRpbmcgb3VyIGZsYWdzCisgKiBlbmNvZGVkIGludG8gdGhlIHBvaW50ZXJzLgorICogCisgKiBUaGUgcGdkX29mZnNldCwgcG1kX29mZnNldCwgYW5kIHB0ZV9vZmZzZXQgbWFjcm9zIGFyZSB1c2VkIGJ5IHRoZSBrZXJuZWwsCisgKiBzbyB0aGV5IHNob3VsZG50IGhhdmUgb3VyIGZsYWdzIGF0dGFjaGVkLgorICoKKyAqIElmIHlvdSB1bmRlcnN0b29kIHRoYXQsIGZlZWwgZnJlZSB0byBleHBsYWluIGl0IHRvIG1lLi4uCisgKgorICovCisKKyNkZWZpbmUgX1BNRF9QUkVTRU5UICAgICAoMHgwMSkKKworLyogVGhlc2UgZGVmaW5pdGlvbnMgYWxsb3cgdXMgdG8gb3B0aW1pc2Ugb3V0IHN0dWZmIGxpa2UgcG1kX2FsbG9jKCkgKi8KKyNkZWZpbmUgcGdkX25vbmUocGdkKQkJKDApIAorI2RlZmluZSBwZ2RfYmFkKHBnZCkJCSgwKQorI2RlZmluZSBwZ2RfcHJlc2VudChwZ2QpCSgxKQorI2RlZmluZSBwZ2RfY2xlYXIocGdkcCkJCWRvIHsgfSB3aGlsZSAoMCkKKworLyogV2hpbHN0IHRoZXNlIGhhbmRsZSBvdXIgYWN0dWFsICdwYWdlIGRpcmVjdG9yeScgKHRoZSBhZ2dsb21lcmF0aW9uIG9mIHBnZCBhbmQgcG1kKQorICovCisjZGVmaW5lIHBtZF9ub25lKHBtZCkgICAgICAgICAgICghcG1kX3ZhbChwbWQpKQorI2RlZmluZSBwbWRfYmFkKHBtZCkgICAgICAgICAgICAoKHBtZF92YWwocG1kKSAmIDB4ZmMwMDAwMDIpKQorI2RlZmluZSBwbWRfcHJlc2VudChwbWQpICAgICAgICAocG1kX3ZhbChwbWQpICYgX1BNRF9QUkVTRU5UKQorI2RlZmluZSBzZXRfcG1kKHBtZF9wdHIsIHBtZCkgICAoKCoocG1kX3B0cikpID0gKHBtZCkpCisjZGVmaW5lIHBtZF9jbGVhcihwbWRwKSAgICAgICAgIHNldF9wbWQocG1kcCwgX19wbWQoMCkpCisKKy8qIGFuZCB0aGVzZSBoYW5kbGUgb3VyIHB0ZSB0YWJsZXMgKi8KKyNkZWZpbmUgcHRlX25vbmUocHRlKSAgICAgICAgICAgKCFwdGVfdmFsKHB0ZSkpCisjZGVmaW5lIHB0ZV9wcmVzZW50KHB0ZSkgICAgICAgIChwdGVfdmFsKHB0ZSkgJiBfUEFHRV9QUkVTRU5UKQorI2RlZmluZSBzZXRfcHRlKHB0ZV9wdHIsIHB0ZSkgICAoKCoocHRlX3B0cikpID0gKHB0ZSkpCisjZGVmaW5lIHNldF9wdGVfYXQobW0sYWRkcixwdGVwLHB0ZXZhbCkgc2V0X3B0ZShwdGVwLHB0ZXZhbCkKKyNkZWZpbmUgcHRlX2NsZWFyKG1tLGFkZHIscHRlcCkJc2V0X3B0ZV9hdCgobW0pLChhZGRyKSwocHRlcCksIF9fcHRlKDApKQorCisvKiBtYWNyb3MgdG8gZWFzZSB0aGUgZ2V0dGluZyBvZiBwb2ludGVycyB0byBzdHVmZi4uLiAqLworI2RlZmluZSBwZ2Rfb2Zmc2V0KG1tLCBhZGRyKQkoKHBnZF90ICopKG1tKS0+cGdkICAgICAgICArIF9fcGdkX2luZGV4KGFkZHIpKQorI2RlZmluZSBwbWRfb2Zmc2V0KHBnZCwgYWRkcikJKChwbWRfdCAqKShwZ2QpKQorI2RlZmluZSBwdGVfb2Zmc2V0KHBtZCwgYWRkcikgICAoKHB0ZV90ICopcG1kX3BhZ2UoKihwbWQpKSArIF9fcHRlX2luZGV4KGFkZHIpKQorCisvKiB0aGVyZSBpcyBubyBfX3BtZF9pbmRleCBhcyB3ZSBkb250IHVzZSBwbWRzICovCisjZGVmaW5lIF9fcGdkX2luZGV4KGFkZHIpCSgoYWRkcikgPj4gUEdEX1NISUZUKQorI2RlZmluZSBfX3B0ZV9pbmRleChhZGRyKQkoKChhZGRyKSA+PiBQQUdFX1NISUZUKSAmIChQVFJTX1BFUl9QVEUgLSAxKSkKKworCisvKiBLZWVwIHRoZSBrZXJuZWwgaGFwcHkgKi8KKyNkZWZpbmUgcGdkX2luZGV4KGFkZHIpICAgICAgICAgX19wZ2RfaW5kZXgoYWRkcikKKyNkZWZpbmUgcGdkX29mZnNldF9rKGFkZHIpCShwZ2Rfb2Zmc2V0KCZpbml0X21tLCBhZGRyKSkKKworLyoKKyAqIFRoZSB2bWFsbG9jKCkgcm91dGluZXMgbGVhdmVzIGEgaG9sZSBvZiA0a0IgYmV0d2VlbiBlYWNoIHZtYWxsb2NlZAorICogYXJlYSBmb3IgdGhlIHNhbWUgcmVhc29uLiA7KSBGSVhNRTogc3VyZWx5IDEgcGFnZSBub3QgNGsgPworICovCisjZGVmaW5lIFZNQUxMT0NfU1RBUlQgICAgIDB4MDFhMDAwMDAKKyNkZWZpbmUgVk1BTExPQ19FTkQgICAgICAgMHgwMWMwMDAwMAorCisvKiBJcyBwbWRfcGFnZSBzdXBwb3NlZCB0byByZXR1cm4gYSBwb2ludGVyIHRvIGEgcGFnZSBpbiBzb21lIGFyY2hlcz8gb3VycyBzZWVtcyB0bworICogcmV0dXJuIGEgcG9pbnRlciB0byBtZW1vcnkgKG5vIHNwZWNpYWwgYWxpZ25tZW50KQorICovCisjZGVmaW5lIHBtZF9wYWdlKHBtZCkgICgoc3RydWN0IHBhZ2UgKikocG1kX3ZhbCgocG1kKSkgJiB+X1BNRF9QUkVTRU5UKSkKKyNkZWZpbmUgcG1kX3BhZ2Vfa2VybmVsKHBtZCkgKChwdGVfdCAqKShwbWRfdmFsKChwbWQpKSAmIH5fUE1EX1BSRVNFTlQpKQorCisjZGVmaW5lIHB0ZV9vZmZzZXRfa2VybmVsKGRpcixhZGRyKSAgICAgKHBtZF9wYWdlX2tlcm5lbCgqKGRpcikpICsgX19wdGVfaW5kZXgoYWRkcikpCisKKyNkZWZpbmUgcHRlX29mZnNldF9tYXAoZGlyLGFkZHIpICAgICAgICAocG1kX3BhZ2Vfa2VybmVsKCooZGlyKSkgKyBfX3B0ZV9pbmRleChhZGRyKSkKKyNkZWZpbmUgcHRlX29mZnNldF9tYXBfbmVzdGVkKGRpcixhZGRyKSAocG1kX3BhZ2Vfa2VybmVsKCooZGlyKSkgKyBfX3B0ZV9pbmRleChhZGRyKSkKKyNkZWZpbmUgcHRlX3VubWFwKHB0ZSkgICAgICAgICAgICAgICAgICBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHB0ZV91bm1hcF9uZXN0ZWQocHRlKSAgICAgICAgICAgZG8geyB9IHdoaWxlICgwKQorCisKKyNkZWZpbmUgX1BBR0VfUFJFU0VOVCAgIDB4MDEKKyNkZWZpbmUgX1BBR0VfUkVBRE9OTFkgIDB4MDIKKyNkZWZpbmUgX1BBR0VfTk9UX1VTRVIgIDB4MDQKKyNkZWZpbmUgX1BBR0VfT0xEICAgICAgIDB4MDgKKyNkZWZpbmUgX1BBR0VfQ0xFQU4gICAgIDB4MTAKKworLy8gYW4gb2xkIHBhZ2UgaGFzIG5ldmVyIGJlZW4gcmVhZC4KKy8vIGEgY2xlYW4gcGFnZSBoYXMgbmV2ZXIgYmVlbiB3cml0dGVuLgorCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSBwcmVzZW50IC0tICAgLS0gIWRpcnR5IC0tICAtLS0gIXdyaXRlIC0tLSAgIC0tLS0gIXVzZXIgLS0tICovCisjZGVmaW5lIFBBR0VfTk9ORSAgICAgICBfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfQ0xFQU4gfCBfUEFHRV9SRUFET05MWSB8IF9QQUdFX05PVF9VU0VSKQorI2RlZmluZSBQQUdFX1NIQVJFRCAgICAgX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX0NMRUFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyNkZWZpbmUgUEFHRV9DT1BZICAgICAgIF9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9DTEVBTiB8IF9QQUdFX1JFQURPTkxZICAgICAgICAgICAgICAgICApCisjZGVmaW5lIFBBR0VfUkVBRE9OTFkgICBfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfQ0xFQU4gfCBfUEFHRV9SRUFET05MWSAgICAgICAgICAgICAgICAgKQorI2RlZmluZSBQQUdFX0tFUk5FTCAgICAgX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBfUEFHRV9OT1RfVVNFUikKKworI2RlZmluZSBfUEFHRV9DSEdfTUFTSyAgKFBBR0VfTUFTSyB8IF9QQUdFX09MRCB8IF9QQUdFX0NMRUFOKQorCisvKgorICogVGhlIGZvbGxvd2luZyBvbmx5IHdvcmsgaWYgcHRlX3ByZXNlbnQoKSBpcyB0cnVlLgorICogVW5kZWZpbmVkIGJlaGF2aW91ciBpZiBub3QuLgorICovCisjZGVmaW5lIHB0ZV9yZWFkKHB0ZSkgICAgICAgICAgICAgICAgICAgKCEocHRlX3ZhbChwdGUpICYgX1BBR0VfTk9UX1VTRVIpKQorI2RlZmluZSBwdGVfd3JpdGUocHRlKSAgICAgICAgICAgICAgICAgICghKHB0ZV92YWwocHRlKSAmIF9QQUdFX1JFQURPTkxZKSkKKyNkZWZpbmUgcHRlX2V4ZWMocHRlKSAgICAgICAgICAgICAgICAgICAoIShwdGVfdmFsKHB0ZSkgJiBfUEFHRV9OT1RfVVNFUikpCisjZGVmaW5lIHB0ZV9kaXJ0eShwdGUpICAgICAgICAgICAgICAgICAgKCEocHRlX3ZhbChwdGUpICYgX1BBR0VfQ0xFQU4pKQorI2RlZmluZSBwdGVfeW91bmcocHRlKSAgICAgICAgICAgICAgICAgICghKHB0ZV92YWwocHRlKSAmIF9QQUdFX09MRCkpCisvL09OTFkgd2hlbiAhcHRlX3ByZXNlbnQoKSBJIHRoaW5rLiBuaWNrZWQgZnJvbSBhcm0zMiAoRklYTUUhKQorI2RlZmluZSBwdGVfZmlsZShwdGUpICAgICAgICAgICAgICAgICAgICghKHB0ZV92YWwocHRlKSAmIF9QQUdFX09MRCkpCisKKyNkZWZpbmUgUFRFX0JJVF9GVU5DKGZuLG9wKSAgICAgICAgICAgICAgICAgICAgIFwKK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlXyMjZm4ocHRlX3QgcHRlKSB7IHB0ZV92YWwocHRlKSBvcDsgcmV0dXJuIHB0ZTsgfQorCitQVEVfQklUX0ZVTkMod3Jwcm90ZWN0LCB8PSAgX1BBR0VfUkVBRE9OTFkpOworUFRFX0JJVF9GVU5DKG1rd3JpdGUsICAgJj0gfl9QQUdFX1JFQURPTkxZKTsKK1BURV9CSVRfRlVOQyhleHByb3RlY3QsIHw9ICBfUEFHRV9OT1RfVVNFUik7CitQVEVfQklUX0ZVTkMobWtleGVjLCAgICAmPSB+X1BBR0VfTk9UX1VTRVIpOworUFRFX0JJVF9GVU5DKG1rY2xlYW4sICAgfD0gIF9QQUdFX0NMRUFOKTsKK1BURV9CSVRfRlVOQyhta2RpcnR5LCAgICY9IH5fUEFHRV9DTEVBTik7CitQVEVfQklUX0ZVTkMobWtvbGQsICAgICB8PSAgX1BBR0VfT0xEKTsKK1BURV9CSVRfRlVOQyhta3lvdW5nLCAgICY9IH5fUEFHRV9PTEQpOworCisvKgorICogV2UgZG9uJ3Qgc3RvcmUgY2FjaGUgc3RhdGUgYml0cyBpbiB0aGUgcGFnZSB0YWJsZSBoZXJlLiBGSVhNRSAtIG9yIGRvIHdlPworICovCisjZGVmaW5lIHBncHJvdF9ub25jYWNoZWQocHJvdCkgIChwcm90KQorI2RlZmluZSBwZ3Byb3Rfd3JpdGVjb21iaW5lKHByb3QpIChwcm90KSAvL0ZJWE1FIC0gaXMgYSBuby1vcD8KKworZXh0ZXJuIHZvaWQgcGd0YWJsZV9jYWNoZV9pbml0KHZvaWQpOworCisvL0ZJWE1FIC0gbmlja2VkIGZyb20gYXJtMzIgYW5kIGJydXRhbGx5IGhhY2tlZC4gcHJvYmFibHkgd3JvbmcuCisjZGVmaW5lIHB0ZV90b19wZ29mZih4KSAocHRlX3ZhbCh4KSA+PiAyKQorI2RlZmluZSBwZ29mZl90b19wdGUoeCkgX19wdGUoKCh4KSA8PCAyKSAmIH5fUEFHRV9PTEQpCisKKy8vRklYTUUgLSBuZXh0IGxpbmUgYm9ycm93ZWQgZnJvbSBhcm0zMi4gaXMgaXQgcmlnaHQ/CisjZGVmaW5lIFBURV9GSUxFX01BWF9CSVRTICAgICAgIDMwCisKKworc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbW9kaWZ5KHB0ZV90IHB0ZSwgcGdwcm90X3QgbmV3cHJvdCkKK3sKKwlwdGVfdmFsKHB0ZSkgPSAocHRlX3ZhbChwdGUpICYgX1BBR0VfQ0hHX01BU0spIHwgcGdwcm90X3ZhbChuZXdwcm90KTsKKwlyZXR1cm4gcHRlOworfQorCitleHRlcm4gcGdkX3Qgc3dhcHBlcl9wZ19kaXJbUFRSU19QRVJfUEdEXTsKKworLyogRW5jb2RlIGFuZCBkZWNvZGUgYSBzd2FwIGVudHJ5LgorICoKKyAqIFdlIHN1cHBvcnQgdXAgdG8gMzJHQiBvZiBzd2FwIG9uIDRrIG1hY2hpbmVzCisgKi8KKyNkZWZpbmUgX19zd3BfdHlwZSh4KQkJKCgoeCkudmFsID4+IDIpICYgMHg3ZikKKyNkZWZpbmUgX19zd3Bfb2Zmc2V0KHgpCQkoKHgpLnZhbCA+PiA5KQorI2RlZmluZSBfX3N3cF9lbnRyeSh0eXBlLG9mZnNldCkgKChzd3BfZW50cnlfdCkgeyAoKHR5cGUpIDw8IDIpIHwgKChvZmZzZXQpIDw8IDkpIH0pCisjZGVmaW5lIF9fcHRlX3RvX3N3cF9lbnRyeShwdGUpCSgoc3dwX2VudHJ5X3QpIHsgcHRlX3ZhbChwdGUpIH0pCisjZGVmaW5lIF9fc3dwX2VudHJ5X3RvX3B0ZShzd3ApCSgocHRlX3QpIHsgKHN3cCkudmFsIH0pCisKKy8qIE5lZWRzIHRvIGJlIGRlZmluZWQgaGVyZSBhbmQgbm90IGluIGxpbnV4L21tLmgsIGFzIGl0IGlzIGFyY2ggZGVwZW5kZW50ICovCisvKiBGSVhNRTogdGhpcyBpcyBub3QgY29ycmVjdCAqLworI2RlZmluZSBrZXJuX2FkZHJfdmFsaWQoYWRkcikJKDEpCisKKy8qCisgKiBDb252ZXJzaW9uIGZ1bmN0aW9uczogY29udmVydCBhIHBhZ2UgYW5kIHByb3RlY3Rpb24gdG8gYSBwYWdlIGVudHJ5LAorICogYW5kIGEgcGFnZSBlbnRyeSBhbmQgcGFnZSBkaXJlY3RvcnkgdG8gdGhlIHBhZ2UgdGhleSByZWZlciB0by4KKyAqLworc3RhdGljIGlubGluZSBwdGVfdCBta19wdGVfcGh5cyh1bnNpZ25lZCBsb25nIHBoeXNwYWdlLCBwZ3Byb3RfdCBwZ3Byb3QpCit7CisgICAgICAgIHB0ZV90IHB0ZTsKKyAgICAgICAgcHRlX3ZhbChwdGUpID0gcGh5c3BhZ2UgfCBwZ3Byb3RfdmFsKHBncHJvdCk7CisgICAgICAgIHJldHVybiBwdGU7Cit9CisKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BndGFibGUuaD4KKworLyoKKyAqIHJlbWFwIGEgcGh5c2ljYWwgYWRkcmVzcyBgcGh5cycgb2Ygc2l6ZSBgc2l6ZScgd2l0aCBwYWdlIHByb3RlY3Rpb24gYHByb3QnCisgKiBpbnRvIHZpcnR1YWwgYWRkcmVzcyBgZnJvbScKKyAqLworI2RlZmluZSBpb19yZW1hcF9wYWdlX3JhbmdlKHZtYSxmcm9tLHBoeXMsc2l6ZSxwcm90KSBcCisJCXJlbWFwX3Bmbl9yYW5nZSh2bWEsIGZyb20sIChwaHlzKSA+PiBQQUdFX1NISUZULCBzaXplLCBwcm90KQorCisjZGVmaW5lIGlvX3JlbWFwX3Bmbl9yYW5nZSh2bWEsZnJvbSxwZm4sc2l6ZSxwcm90KSBcCisJCXJlbWFwX3Bmbl9yYW5nZSh2bWEsIGZyb20sIHBmbiwgc2l6ZSwgcHJvdCkKKworI2RlZmluZSBNS19JT1NQQUNFX1BGTihzcGFjZSwgcGZuKQkocGZuKQorI2RlZmluZSBHRVRfSU9TUEFDRShwZm4pCQkwCisjZGVmaW5lIEdFVF9QRk4ocGZuKQkJCShwZm4pCisKKyNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiBfQVNNQVJNX1BHVEFCTEVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtMjYvcG9sbC5oIGIvaW5jbHVkZS9hc20tYXJtMjYvcG9sbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkZmRhYjAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0yNi9wb2xsLmgKQEAgLTAsMCArMSwyNSBAQAorI2lmbmRlZiBfX0FTTUFSTV9QT0xMX0gKKyNkZWZpbmUgX19BU01BUk1fUE9MTF9ICisKKy8qIFRoZXNlIGFyZSBzcGVjaWZpZWQgYnkgaUJDUzIgKi8KKyNkZWZpbmUgUE9MTElOCQkweDAwMDEKKyNkZWZpbmUgUE9MTFBSSQkJMHgwMDAyCisjZGVmaW5lIFBPTExPVVQJCTB4MDAwNAorI2RlZmluZSBQT0xMRVJSCQkweDAwMDgKKyNkZWZpbmUgUE9MTEhVUAkJMHgwMDEwCisjZGVmaW5lIFBPTExOVkFMCTB4MDAyMAorCisvKiBUaGUgcmVzdCBzZWVtIHRvIGJlIG1vcmUtb3ItbGVzcyBub25zdGFuZGFyZC4gQ2hlY2sgdGhlbSEgKi8KKyNkZWZpbmUgUE9MTFJETk9STQkweDAwNDAKKyNkZWZpbmUgUE9MTFJEQkFORAkweDAwODAKKyNkZWZpbmUgUE9MTFdSTk9STQkweDAxMDAKKyNkZWZpbmUgUE9MTFdSQkFORAkweDAyMDAKKyNkZWZpbmUgUE9MTE1TRwkJMHgwNDAwCisKK3N0cnVjdCBwb2xsZmQgeworCWludCBmZDsKKwlzaG9ydCBldmVudHM7CisJc2hvcnQgcmV2ZW50czsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtMjYvcG9zaXhfdHlwZXMuaCBiL2luY2x1ZGUvYXNtLWFybTI2L3Bvc2l4X3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg4MzQ0YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybTI2L3Bvc2l4X3R5cGVzLmgKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vcG9zaXhfdHlwZXMuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTYtMTk5OCBSdXNzZWxsIEtpbmcuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgQ2hhbmdlbG9nOgorICogICAyNy0wNi0xOTk2CVJNSwlDcmVhdGVkCisgKi8KKyNpZm5kZWYgX19BUkNIX0FSTV9QT1NJWF9UWVBFU19ICisjZGVmaW5lIF9fQVJDSF9BUk1fUE9TSVhfVFlQRVNfSAorCisvKgorICogVGhpcyBmaWxlIGlzIGdlbmVyYWxseSB1c2VkIGJ5IHVzZXItbGV2ZWwgc29mdHdhcmUsIHNvIHlvdSBuZWVkIHRvCisgKiBiZSBhIGxpdHRsZSBjYXJlZnVsIGFib3V0IG5hbWVzcGFjZSBwb2xsdXRpb24gZXRjLiAgQWxzbywgd2UgY2Fubm90CisgKiBhc3N1bWUgR0NDIGlzIGJlaW5nIHVzZWQuCisgKi8KKwordHlwZWRlZiB1bnNpZ25lZCBsb25nCQlfX2tlcm5lbF9pbm9fdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJCV9fa2VybmVsX21vZGVfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJCV9fa2VybmVsX25saW5rX3Q7Cit0eXBlZGVmIGxvbmcJCQlfX2tlcm5lbF9vZmZfdDsKK3R5cGVkZWYgaW50CQkJX19rZXJuZWxfcGlkX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CQlfX2tlcm5lbF9pcGNfcGlkX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CQlfX2tlcm5lbF91aWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJCV9fa2VybmVsX2dpZF90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQJCV9fa2VybmVsX3NpemVfdDsKK3R5cGVkZWYgaW50CQkJX19rZXJuZWxfc3NpemVfdDsKK3R5cGVkZWYgaW50CQkJX19rZXJuZWxfcHRyZGlmZl90OwordHlwZWRlZiBsb25nCQkJX19rZXJuZWxfdGltZV90OwordHlwZWRlZiBsb25nCQkJX19rZXJuZWxfc3VzZWNvbmRzX3Q7Cit0eXBlZGVmIGxvbmcJCQlfX2tlcm5lbF9jbG9ja190OwordHlwZWRlZiBpbnQJCQlfX2tlcm5lbF90aW1lcl90OwordHlwZWRlZiBpbnQJCQlfX2tlcm5lbF9jbG9ja2lkX3Q7Cit0eXBlZGVmIGludAkJCV9fa2VybmVsX2RhZGRyX3Q7Cit0eXBlZGVmIGNoYXIgKgkJCV9fa2VybmVsX2NhZGRyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CQlfX2tlcm5lbF91aWQxNl90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAkJX19rZXJuZWxfZ2lkMTZfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50CQlfX2tlcm5lbF91aWQzMl90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQJCV9fa2VybmVsX2dpZDMyX3Q7CisKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJCV9fa2VybmVsX29sZF91aWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJCV9fa2VybmVsX29sZF9naWRfdDsKKworI2lmZGVmIF9fR05VQ19fCit0eXBlZGVmIGxvbmcgbG9uZwkJX19rZXJuZWxfbG9mZl90OworI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IHsKKyNpZiBkZWZpbmVkKF9fS0VSTkVMX18pIHx8IGRlZmluZWQoX19VU0VfQUxMKQorCWludAl2YWxbMl07CisjZWxzZSAvKiAhZGVmaW5lZChfX0tFUk5FTF9fKSAmJiAhZGVmaW5lZChfX1VTRV9BTEwpICovCisJaW50CV9fdmFsWzJdOworI2VuZGlmIC8qICFkZWZpbmVkKF9fS0VSTkVMX18pICYmICFkZWZpbmVkKF9fVVNFX0FMTCkgKi8KK30gX19rZXJuZWxfZnNpZF90OworCisjaWYgZGVmaW5lZChfX0tFUk5FTF9fKSB8fCAhZGVmaW5lZChfX0dMSUJDX18pIHx8IChfX0dMSUJDX18gPCAyKQorCisjdW5kZWYJX19GRF9TRVQKKyNkZWZpbmUgX19GRF9TRVQoZmQsIGZkc2V0cCkgXAorCQkoKChmZF9zZXQgKikoZmRzZXRwKSktPmZkc19iaXRzWyhmZCkgPj4gNV0gfD0gKDE8PCgoZmQpICYgMzEpKSkKKworI3VuZGVmCV9fRkRfQ0xSCisjZGVmaW5lIF9fRkRfQ0xSKGZkLCBmZHNldHApIFwKKwkJKCgoZmRfc2V0ICopKGZkc2V0cCkpLT5mZHNfYml0c1soZmQpID4+IDVdICY9IH4oMTw8KChmZCkgJiAzMSkpKQorCisjdW5kZWYJX19GRF9JU1NFVAorI2RlZmluZSBfX0ZEX0lTU0VUKGZkLCBmZHNldHApIFwKKwkJKCgoKGZkX3NldCAqKShmZHNldHApKS0+ZmRzX2JpdHNbKGZkKSA+PiA1XSAmICgxPDwoKGZkKSAmIDMxKSkpICE9IDApCisKKyN1bmRlZglfX0ZEX1pFUk8KKyNkZWZpbmUgX19GRF9aRVJPKGZkc2V0cCkgXAorCQkobWVtc2V0ICgoZmRzZXRwKSwgMCwgc2l6ZW9mICgqKGZkX3NldCAqKShmZHNldHApKSkpCisKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybTI2L3Byb2MtZm5zLmggYi9pbmNsdWRlL2FzbS1hcm0yNi9wcm9jLWZucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4MzEwMDQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0yNi9wcm9jLWZucy5oCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtMjYvcHJvYy1mbnMuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDAgUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisKKy8qCisgKiBEb24ndCBjaGFuZ2UgdGhpcyBzdHJ1Y3R1cmUgLSBBU00gY29kZQorICogcmVsaWVzIG9uIGl0LgorICovCitleHRlcm4gc3RydWN0IHByb2Nlc3NvciB7CisJLyogY2hlY2sgZm9yIGFueSBidWdzICovCisJdm9pZCAoKl9jaGVja19idWdzKSh2b2lkKTsKKwkvKiBTZXQgdXAgYW55IHByb2Nlc3NvciBzcGVjaWZpY3MgKi8KKwl2b2lkICgqX3Byb2NfaW5pdCkodm9pZCk7CisJLyogRGlzYWJsZSBhbnkgcHJvY2Vzc29yIHNwZWNpZmljcyAqLworCXZvaWQgKCpfcHJvY19maW4pKHZvaWQpOworCS8qIHNldCB0aGUgTUVNQyBoYXJkd2FyZSBtYXBwaW5ncyAqLworCXZvaWQgKCpfc2V0X3BnZCkocGdkX3QgKnBnZCk7CisJLyogWENIRyAqLworCXVuc2lnbmVkIGxvbmcgKCpfeGNoZ18xKSh1bnNpZ25lZCBsb25nIHgsIHZvbGF0aWxlIHZvaWQgKnB0cik7CisJdW5zaWduZWQgbG9uZyAoKl94Y2hnXzQpKHVuc2lnbmVkIGxvbmcgeCwgdm9sYXRpbGUgdm9pZCAqcHRyKTsKK30gcHJvY2Vzc29yOworCitleHRlcm4gY29uc3Qgc3RydWN0IHByb2Nlc3NvciBhcm0yX3Byb2Nlc3Nvcl9mdW5jdGlvbnM7CitleHRlcm4gY29uc3Qgc3RydWN0IHByb2Nlc3NvciBhcm0yNTBfcHJvY2Vzc29yX2Z1bmN0aW9uczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgcHJvY2Vzc29yIGFybTNfcHJvY2Vzc29yX2Z1bmN0aW9uczsKKworI2RlZmluZSBjcHVfY2hlY2tfYnVncygpCQkJcHJvY2Vzc29yLl9jaGVja19idWdzKCkKKyNkZWZpbmUgY3B1X3Byb2NfaW5pdCgpCQkJCXByb2Nlc3Nvci5fcHJvY19pbml0KCkKKyNkZWZpbmUgY3B1X3Byb2NfZmluKCkJCQkJcHJvY2Vzc29yLl9wcm9jX2ZpbigpCisjZGVmaW5lIGNwdV9kb19pZGxlKCkJCQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBjcHVfc3dpdGNoX21tKHBnZCxtbSkJCQlwcm9jZXNzb3IuX3NldF9wZ2QocGdkKQorI2RlZmluZSBjcHVfeGNoZ18xKHgscHRyKQkJCXByb2Nlc3Nvci5feGNoZ18xKHgscHRyKQorI2RlZmluZSBjcHVfeGNoZ180KHgscHRyKQkJCXByb2Nlc3Nvci5feGNoZ180KHgscHRyKQorCisKKy8vRklYTUUgLSB0aGVzZSBzaG91bGRudCBiZSBpbiBwcm9jLWZuLmgKK2V4dGVybiB2b2lkIGNwdV9tZW1jX3VwZGF0ZV9hbGwocGdkX3QgKnBnZCk7CitleHRlcm4gdm9pZCBjcHVfbWVtY191cGRhdGVfZW50cnkocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBwaHlzX3B0ZSwgdW5zaWduZWQgbG9uZyBsb2dfYWRkcik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtMjYvcHJvY2Vzc29yLmggYi9pbmNsdWRlL2FzbS1hcm0yNi9wcm9jZXNzb3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDJkNWY3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtMjYvcHJvY2Vzc29yLmgKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtMjYvcHJvY2Vzc29yLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk1IFJ1c3NlbGwgS2luZworICogIENvcHlyaWdodCAoQykgMjAwMyBJYW4gTW9sdG9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fQVNNX0FSTV9QUk9DRVNTT1JfSAorI2RlZmluZSBfX0FTTV9BUk1fUFJPQ0VTU09SX0gKKworLyoKKyAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgbWFjcm8gdGhhdCByZXR1cm5zIGN1cnJlbnQKKyAqIGluc3RydWN0aW9uIHBvaW50ZXIgKCJwcm9ncmFtIGNvdW50ZXIiKS4KKyAqLworI2RlZmluZSBjdXJyZW50X3RleHRfYWRkcigpICh7IF9fbGFiZWxfXyBfbDsgX2w6ICYmX2w7fSkKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisKKyNkZWZpbmUgS0VSTkVMX1NUQUNLX1NJWkUgNDA5NgorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgICAgIHZvaWQgKCpwdXRfYnl0ZSkodm9pZCk7ICAgICAgICAgICAgICAgLyogU3BlY2lhbCBjYWxsaW5nIGNvbnZlbnRpb24gKi8KKyAgICAgICAgdm9pZCAoKmdldF9ieXRlKSh2b2lkKTsgICAgICAgICAgICAgICAvKiBTcGVjaWFsIGNhbGxpbmcgY29udmVudGlvbiAqLworICAgICAgICB2b2lkICgqcHV0X2hhbGYpKHZvaWQpOyAgICAgICAgICAgICAgIC8qIFNwZWNpYWwgY2FsbGluZyBjb252ZW50aW9uICovCisgICAgICAgIHZvaWQgKCpnZXRfaGFsZikodm9pZCk7ICAgICAgICAgICAgICAgLyogU3BlY2lhbCBjYWxsaW5nIGNvbnZlbnRpb24gKi8KKyAgICAgICAgdm9pZCAoKnB1dF93b3JkKSh2b2lkKTsgICAgICAgICAgICAgICAvKiBTcGVjaWFsIGNhbGxpbmcgY29udmVudGlvbiAqLworICAgICAgICB2b2lkICgqZ2V0X3dvcmQpKHZvaWQpOyAgICAgICAgICAgICAgIC8qIFNwZWNpYWwgY2FsbGluZyBjb252ZW50aW9uICovCisgICAgICAgIHZvaWQgKCpwdXRfZHdvcmQpKHZvaWQpOyAgICAgICAgICAgICAgLyogU3BlY2lhbCBjYWxsaW5nIGNvbnZlbnRpb24gKi8KKyAgICAgICAgdW5zaWduZWQgbG9uZyAoKmNvcHlfZnJvbV91c2VyKSh2b2lkICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgbG9uZyBzeik7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgKCpjb3B5X3RvX3VzZXIpKHZvaWQgKnRvLCBjb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBsb25nIHN6KTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyAoKmNsZWFyX3VzZXIpKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc3opOworICAgICAgICB1bnNpZ25lZCBsb25nICgqc3RybmNweV9mcm9tX3VzZXIpKGNoYXIgKnRvLCBjb25zdCBjaGFyICpmcm9tLCB1bnNpZ25lZCBsb25nIHN6KTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyAoKnN0cm5sZW5fdXNlcikoY29uc3QgY2hhciAqcywgbG9uZyBuKTsKK30gdWFjY2Vzc190OworCitleHRlcm4gdWFjY2Vzc190IHVhY2Nlc3NfdXNlciwgdWFjY2Vzc19rZXJuZWw7CisKKyNkZWZpbmUgRVhUUkFfVEhSRUFEX1NUUlVDVCAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgdWFjY2Vzc190ICAgICAgICp1YWNjZXNzOyAgICAgICAgIC8qIFVzZXIgYWNjZXNzIGZ1bmN0aW9ucyovCisKKyNkZWZpbmUgRVhUUkFfVEhSRUFEX1NUUlVDVF9JTklUICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLnVhY2Nlc3MgICAgICAgID0gJnVhY2Nlc3Nfa2VybmVsLAorCisvLyBGSVhNRT8hIQorCisjZGVmaW5lIHN0YXJ0X3RocmVhZChyZWdzLHBjLHNwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHVuc2lnbmVkIGxvbmcgKnN0YWNrID0gKHVuc2lnbmVkIGxvbmcgKilzcDsgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHNldF9mcyhVU0VSX0RTKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIG1lbXplcm8ocmVncy0+dXJlZ3MsIHNpemVvZiAocmVncy0+dXJlZ3MpKTsgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHJlZ3MtPkFSTV9wYyA9IHBjIHwgfjB4ZmMwMDAwMDM7ICAgICAgICAvKiBwYyAqLyAgICAgICAgICAgICAgICBcCisgICAgICAgIHJlZ3MtPkFSTV9zcCA9IHNwOyAgICAgICAgICAgICAgLyogc3AgKi8gICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHJlZ3MtPkFSTV9yMiA9IHN0YWNrWzJdOyAgICAgICAgLyogcjIgKGVudnApICovICAgICAgICAgICAgICAgICBcCisgICAgICAgIHJlZ3MtPkFSTV9yMSA9IHN0YWNrWzFdOyAgICAgICAgLyogcjEgKGFyZ3YpICovICAgICAgICAgICAgICAgICBcCisgICAgICAgIHJlZ3MtPkFSTV9yMCA9IHN0YWNrWzBdOyAgICAgICAgLyogcjAgKGFyZ2MpICovICAgICAgICAgICAgICAgICBcCit9KQorCisjZGVmaW5lIEtTVEtfRUlQKHRzaykgICAoKCh1bnNpZ25lZCBsb25nICopKDQwOTYrKHVuc2lnbmVkIGxvbmcpKHRzaykpKVsxMDIwXSkKKyNkZWZpbmUgS1NUS19FU1AodHNrKSAgICgoKHVuc2lnbmVkIGxvbmcgKikoNDA5NisodW5zaWduZWQgbG9uZykodHNrKSkpWzEwMThdKQorCitzdHJ1Y3QgZGVidWdfZW50cnkgeworICAgICAgICB1MzIgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzOworICAgICAgICB1MzIJCSAgICAgICAgaW5zbjsKK307CisKK3N0cnVjdCBkZWJ1Z19pbmZvIHsKKyAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgbnNhdmVkOworICAgICAgICBzdHJ1Y3QgZGVidWdfZW50cnkgICAgICBicFsyXTsKK307CisKK3N0cnVjdCB0aHJlYWRfc3RydWN0IHsKKwkJCQkJCQkvKiBmYXVsdCBpbmZvCSAgKi8KKwl1bnNpZ25lZCBsb25nCQkJYWRkcmVzczsKKwl1bnNpZ25lZCBsb25nCQkJdHJhcF9ubzsKKwl1bnNpZ25lZCBsb25nCQkJZXJyb3JfY29kZTsKKwkJCQkJCQkvKiBkZWJ1Z2dpbmcJICAqLworCXN0cnVjdCBkZWJ1Z19pbmZvCQlkZWJ1ZzsKKwlFWFRSQV9USFJFQURfU1RSVUNUCit9OworCisjZGVmaW5lIElOSVRfVEhSRUFEICB7IFwKK0VYVFJBX1RIUkVBRF9TVFJVQ1RfSU5JVCBcCit9CisKKy8qIEZvcndhcmQgZGVjbGFyYXRpb24sIGEgc3RyYW5nZSBDIHRoaW5nICovCitzdHJ1Y3QgdGFza19zdHJ1Y3Q7CisKKy8qIEZyZWUgYWxsIHJlc291cmNlcyBoZWxkIGJ5IGEgdGhyZWFkLiAqLworZXh0ZXJuIHZvaWQgcmVsZWFzZV90aHJlYWQoc3RydWN0IHRhc2tfc3RydWN0ICopOworCit1bnNpZ25lZCBsb25nIGdldF93Y2hhbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApOworCisjZGVmaW5lIGNwdV9yZWxheCgpCQkJYmFycmllcigpCisKKy8qIFByZXBhcmUgdG8gY29weSB0aHJlYWQgc3RhdGUgLSB1bmxhenkgYWxsIGxhenkgc3RhdHVzICovCisjZGVmaW5lIHByZXBhcmVfdG9fY29weSh0c2spICAgIGRvIHsgfSB3aGlsZSAoMCkKKworLyoKKyAqIENyZWF0ZSBhIG5ldyBrZXJuZWwgdGhyZWFkCisgKi8KK2V4dGVybiBpbnQga2VybmVsX3RocmVhZChpbnQgKCpmbikodm9pZCAqKSwgdm9pZCAqYXJnLCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKKworI2VuZGlmCisKKyNlbmRpZiAvKiBfX0FTTV9BUk1fUFJPQ0VTU09SX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybTI2L3Byb2NpbmZvLmggYi9pbmNsdWRlL2FzbS1hcm0yNi9wcm9jaW5mby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyODYyNGQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0yNi9wcm9jaW5mby5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL3Byb2NpbmZvLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk2LTE5OTkgUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2lmbmRlZiBfX0FTTV9QUk9DSU5GT19ICisjZGVmaW5lIF9fQVNNX1BST0NJTkZPX0gKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworLy9zdHJ1Y3QgcHJvY2Vzc29yOworLy9zdHJ1Y3QgY3B1X3VzZXJfZm5zOworCitzdHJ1Y3QgcHJvY19pbmZvX2l0ZW0geworCWNvbnN0IGNoYXIJICptYW51ZmFjdHVyZXI7CisJY29uc3QgY2hhcgkgKmNwdV9uYW1lOworfTsKKworLyoKKyAqIE5vdGUhICBzdHJ1Y3QgcHJvY2Vzc29yIGlzIGFsd2F5cyBkZWZpbmVkIGlmIHdlJ3JlCisgKiB1c2luZyBNVUxUSV9DUFUsIG90aGVyd2lzZSB0aGlzIGVudHJ5IGlzIHVudXNlZCwKKyAqIGJ1dCBzdGlsbCBleGlzdHMuCisgKgorICogTk9URSEgVGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgaXMgZGVmaW5lZCBieSBhc3NlbWJseQorICogbGFuZ3VhZ2UsIE5PVCBDIGNvZGUuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgY2hlY2s6CisgKiAgYXJjaC9hcm0vbW0vcHJvYy0qLlMgYW5kIGFyY2gvYXJtL2tlcm5lbC9oZWFkLWFybXYuUworICovCitzdHJ1Y3QgcHJvY19pbmZvX2xpc3QgeworCXVuc2lnbmVkIGludAkJY3B1X3ZhbDsKKwl1bnNpZ25lZCBpbnQJCWNwdV9tYXNrOworCWNvbnN0IGNoYXIJCSphcmNoX25hbWU7CisJY29uc3QgY2hhcgkJKmVsZl9uYW1lOworCXVuc2lnbmVkIGludAkJZWxmX2h3Y2FwOworCXN0cnVjdCBwcm9jX2luZm9faXRlbQkqaW5mbzsKKwlzdHJ1Y3QgcHJvY2Vzc29yCSpwcm9jOworfTsKKworI2VuZGlmCS8qIF9fQVNTRU1CTFlfXyAqLworCisjZGVmaW5lIFBST0NfSU5GT19TWgk0OAorCisjZGVmaW5lIEhXQ0FQX1NXUAkxCisjZGVmaW5lIEhXQ0FQX0hBTEYJMgorI2RlZmluZSBIV0NBUF9USFVNQgk0CisjZGVmaW5lIEhXQ0FQXzI2QklUCTgJLyogUGxheSBpdCBzYWZlICovCisjZGVmaW5lIEhXQ0FQX0ZBU1RfTVVMVAkxNgorI2RlZmluZSBIV0NBUF9GUEEJMzIKKyNkZWZpbmUgSFdDQVBfVkZQCTY0CisjZGVmaW5lIEhXQ0FQX0VEU1AJMTI4CisjZGVmaW5lIEhXQ0FQX0pBVkEJMjU2CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtMjYvcHRyYWNlLmggYi9pbmNsdWRlL2FzbS1hcm0yNi9wdHJhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTQ2YjVhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtMjYvcHRyYWNlLmgKQEAgLTAsMCArMSwxMDQgQEAKKyNpZm5kZWYgX19BU01fQVJNX1BUUkFDRV9ICisjZGVmaW5lIF9fQVNNX0FSTV9QVFJBQ0VfSAorCisjZGVmaW5lIFBUUkFDRV9HRVRSRUdTCQkxMgorI2RlZmluZSBQVFJBQ0VfU0VUUkVHUwkJMTMKKyNkZWZpbmUgUFRSQUNFX0dFVEZQUkVHUwkxNAorI2RlZmluZSBQVFJBQ0VfU0VURlBSRUdTCTE1CisjZGVmaW5lIFBUUkFDRV9PTERTRVRPUFRJT05TICAgIDIxCisKKy8qIG9wdGlvbnMgc2V0IHVzaW5nIFBUUkFDRV9TRVRPUFRJT05TICovCisjZGVmaW5lIFBUUkFDRV9PX1RSQUNFU1lTR09PRAkweDAwMDAwMDAxCisKKyNkZWZpbmUgTU9ERV9VU1IyNiAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgTU9ERV9GSVEyNiAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgTU9ERV9JUlEyNiAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgTU9ERV9TVkMyNiAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgTU9ERV9NQVNLICAgICAgIDB4MDAwMDAwMDMKKworI2RlZmluZSBQU1JfRl9CSVQgICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBQU1JfSV9CSVQgICAgICAgMHgwODAwMDAwMAorI2RlZmluZSBQU1JfVl9CSVQgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBQU1JfQ19CSVQgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBQU1JfWl9CSVQgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBQU1JfTl9CSVQgICAgICAgMHg4MDAwMDAwMAorCisjZGVmaW5lIFBDTUFTSyAgICAgICAgICAweGZjMDAwMDAzCisKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworI2RlZmluZSBwY19wb2ludGVyKHYpICgodikgJiB+UENNQVNLKSAgIC8qIGNvbnZlcnQgdiB0byBwYyB0eXBlIGFkZHJlc3MgKi8KKyNkZWZpbmUgaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKSAocGNfcG9pbnRlcigocmVncyktPkFSTV9wYykpIC8qIGdldCBwYyAqLworI2RlZmluZSBwcm9maWxlX3BjKHJlZ3MpIGluc3RydWN0aW9uX3BvaW50ZXIocmVncykKKworLyogdGhpcyBzdHJ1Y3QgZGVmaW5lcyB0aGUgd2F5IHRoZSByZWdpc3RlcnMgYXJlIHN0b3JlZCBvbiB0aGUKKyAgIHN0YWNrIGR1cmluZyBhIHN5c3RlbSBjYWxsLiAqLworCitzdHJ1Y3QgcHRfcmVncyB7CisJbG9uZyB1cmVnc1sxN107Cit9OworCisjZGVmaW5lIEFSTV9wYwkJdXJlZ3NbMTVdCisjZGVmaW5lIEFSTV9scgkJdXJlZ3NbMTRdCisjZGVmaW5lIEFSTV9zcAkJdXJlZ3NbMTNdCisjZGVmaW5lIEFSTV9pcAkJdXJlZ3NbMTJdCisjZGVmaW5lIEFSTV9mcAkJdXJlZ3NbMTFdCisjZGVmaW5lIEFSTV9yMTAJCXVyZWdzWzEwXQorI2RlZmluZSBBUk1fcjkJCXVyZWdzWzldCisjZGVmaW5lIEFSTV9yOAkJdXJlZ3NbOF0KKyNkZWZpbmUgQVJNX3I3CQl1cmVnc1s3XQorI2RlZmluZSBBUk1fcjYJCXVyZWdzWzZdCisjZGVmaW5lIEFSTV9yNQkJdXJlZ3NbNV0KKyNkZWZpbmUgQVJNX3I0CQl1cmVnc1s0XQorI2RlZmluZSBBUk1fcjMJCXVyZWdzWzNdCisjZGVmaW5lIEFSTV9yMgkJdXJlZ3NbMl0KKyNkZWZpbmUgQVJNX3IxCQl1cmVnc1sxXQorI2RlZmluZSBBUk1fcjAJCXVyZWdzWzBdCisjZGVmaW5lIEFSTV9PUklHX3IwCXVyZWdzWzE2XQorCisjaWZkZWYgX19LRVJORUxfXworCisjZGVmaW5lIHByb2Nlc3Nvcl9tb2RlKHJlZ3MpIFwKKwkoKHJlZ3MpLT5BUk1fcGMgJiBNT0RFX01BU0spCisKKyNkZWZpbmUgdXNlcl9tb2RlKHJlZ3MpIFwKKwkocHJvY2Vzc29yX21vZGUocmVncykgPT0gTU9ERV9VU1IyNikKKworI2RlZmluZSBpbnRlcnJ1cHRzX2VuYWJsZWQocmVncykgXAorCSghKChyZWdzKS0+QVJNX3BjICYgUFNSX0lfQklUKSkKKworI2RlZmluZSBmYXN0X2ludGVycnVwdHNfZW5hYmxlZChyZWdzKSBcCisJKCEoKHJlZ3MpLT5BUk1fcGMgJiBQU1JfRl9CSVQpKQorCisjZGVmaW5lIGNvbmRpdGlvbl9jb2RlcyhyZWdzKSBcCisJKChyZWdzKS0+QVJNX3BjICYgKFBTUl9WX0JJVHxQU1JfQ19CSVR8UFNSX1pfQklUfFBTUl9OX0JJVCkpCisKKy8qIEFyZSB0aGUgY3VycmVudCByZWdpc3RlcnMgc3VpdGFibGUgZm9yIHVzZXIgbW9kZT8KKyAqICh1c2VkIHRvIG1haW50YWluIHNlY3VyaXR5IGluIHNpZ25hbCBoYW5kbGVycykKKyAqLworc3RhdGljIGlubGluZSBpbnQgdmFsaWRfdXNlcl9yZWdzKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWlmICh1c2VyX21vZGUocmVncykgJiYKKwkgICAgKHJlZ3MtPkFSTV9wYyAmIChQU1JfRl9CSVQgfCBQU1JfSV9CSVQpKSA9PSAwKQorCQlyZXR1cm4gMTsKKworCS8qCisJICogZm9yY2UgaXQgdG8gYmUgc29tZXRoaW5nIHNlbnNpYmxlCisJICovCisJcmVncy0+QVJNX3BjICY9IH4oTU9ERV9NQVNLIHwgUFNSX0ZfQklUIHwgUFNSX0lfQklUKTsKKworCXJldHVybiAwOworfQorCitleHRlcm4gdm9pZCBzaG93X3JlZ3Moc3RydWN0IHB0X3JlZ3MgKik7CisKKyNkZWZpbmUgcHJlZGljYXRlKHgpICAgICh4ICYgMHhmMDAwMDAwMCkKKyNkZWZpbmUgUFJFRElDQVRFX0FMV0FZUyAgICAgICAgMHhlMDAwMDAwMAorCisjZW5kaWYJLyogX19LRVJORUxfXyAqLworCisjZW5kaWYJLyogX19BU1NFTUJMWV9fICovCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi9yZXNvdXJjZS5oIGIvaW5jbHVkZS9hc20tYXJtMjYvcmVzb3VyY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzRiNTgxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtMjYvcmVzb3VyY2UuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX0FSTV9SRVNPVVJDRV9ICisjZGVmaW5lIF9BUk1fUkVTT1VSQ0VfSAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcmVzb3VyY2UuaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi9zY2F0dGVybGlzdC5oIGIvaW5jbHVkZS9hc20tYXJtMjYvc2NhdHRlcmxpc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWMwNTZjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtMjYvc2NhdHRlcmxpc3QuaApAQCAtMCwwICsxLDI2IEBACisjaWZuZGVmIF9BU01BUk1fU0NBVFRFUkxJU1RfSAorI2RlZmluZSBfQVNNQVJNX1NDQVRURVJMSVNUX0gKKworI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCitzdHJ1Y3Qgc2NhdHRlcmxpc3QgeworCXN0cnVjdCBwYWdlCSpwYWdlOwkJLyogYnVmZmVyIHBhZ2UJCQkgKi8KKwl1bnNpZ25lZCBpbnQJb2Zmc2V0OwkJLyogYnVmZmVyIG9mZnNldAkJICovCisJZG1hX2FkZHJfdAlkbWFfYWRkcmVzczsJLyogZG1hIGFkZHJlc3MJCQkgKi8KKwl1bnNpZ25lZCBpbnQJbGVuZ3RoOwkJLyogbGVuZ3RoCQkJICovCisJY2hhcgkJKl9fYWRkcmVzczsJLyogZm9yIHNldF9kbWFfYWRkcgkJICovCit9OworCisvKgorICogVGhlc2UgbWFjcm9zIHNob3VsZCBiZSB1c2VkIGFmdGVyIGEgcGNpX21hcF9zZyBjYWxsIGhhcyBiZWVuIGRvbmUKKyAqIHRvIGdldCBidXMgYWRkcmVzc2VzIG9mIGVhY2ggb2YgdGhlIFNHIGVudHJpZXMgYW5kIHRoZWlyIGxlbmd0aHMuCisgKiBZb3Ugc2hvdWxkIG9ubHkgd29yayB3aXRoIHRoZSBudW1iZXIgb2Ygc2cgZW50cmllcyBwY2lfbWFwX3NnCisgKiByZXR1cm5zLCBvciBhbHRlcm5hdGl2ZWx5IHN0b3Agb24gdGhlIGZpcnN0IHNnX2RtYV9sZW4oc2cpIHdoaWNoCisgKiBpcyAwLgorICovCisjZGVmaW5lIHNnX2RtYV9hZGRyZXNzKHNnKSAgICAgICgoc2cpLT5kbWFfYWRkcmVzcykKKyNkZWZpbmUgc2dfZG1hX2xlbihzZykgICAgICAgICAgKChzZyktPmxlbmd0aCkKKworI2RlZmluZSBJU0FfRE1BX1RIUkVTSE9MRCAoMHhmZmZmZmZmZikKKworI2VuZGlmIC8qIF9BU01BUk1fU0NBVFRFUkxJU1RfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtMjYvc2VjdGlvbnMuaCBiL2luY2x1ZGUvYXNtLWFybTI2L3NlY3Rpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBiNjM3MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybTI2L3NlY3Rpb25zLmgKQEAgLTAsMCArMSwyIEBACisvL0ZJWE1FIC0gbmlja2VkIGZyb20gYXJtMzIgLSBjaGVjayBpdHMgY29ycmVjdC4KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zZWN0aW9ucy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtMjYvc2VnbWVudC5oIGIvaW5jbHVkZS9hc20tYXJtMjYvc2VnbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllMjRjMjEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0yNi9zZWdtZW50LmgKQEAgLTAsMCArMSwxMSBAQAorI2lmbmRlZiBfX0FTTV9BUk1fU0VHTUVOVF9ICisjZGVmaW5lIF9fQVNNX0FSTV9TRUdNRU5UX0gKKworI2RlZmluZSBfX0tFUk5FTF9DUyAgIDB4MAorI2RlZmluZSBfX0tFUk5FTF9EUyAgIDB4MAorCisjZGVmaW5lIF9fVVNFUl9DUyAgICAgMHgxCisjZGVmaW5lIF9fVVNFUl9EUyAgICAgMHgxCisKKyNlbmRpZiAvKiBfX0FTTV9BUk1fU0VHTUVOVF9IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybTI2L3NlbWFwaG9yZS1oZWxwZXIuaCBiL2luY2x1ZGUvYXNtLWFybTI2L3NlbWFwaG9yZS1oZWxwZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDdmMTk4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtMjYvc2VtYXBob3JlLWhlbHBlci5oCkBAIC0wLDAgKzEsODQgQEAKKyNpZm5kZWYgQVNNQVJNX1NFTUFQSE9SRV9IRUxQRVJfSAorI2RlZmluZSBBU01BUk1fU0VNQVBIT1JFX0hFTFBFUl9ICisKKy8qCisgKiBUaGVzZSB0d28gX211c3RfIGV4ZWN1dGUgYXRvbWljYWxseSB3cnQgZWFjaCBvdGhlci4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHdha2Vfb25lX21vcmUoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNlbWFwaG9yZV93YWtlX2xvY2ssIGZsYWdzKTsKKwlpZiAoYXRvbWljX3JlYWQoJnNlbS0+Y291bnQpIDw9IDApCisJCXNlbS0+d2FraW5nKys7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VtYXBob3JlX3dha2VfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIGludCB3YWtpbmdfbm9uX3plcm8oc3RydWN0IHNlbWFwaG9yZSAqc2VtKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldCA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2VtYXBob3JlX3dha2VfbG9jaywgZmxhZ3MpOworCWlmIChzZW0tPndha2luZyA+IDApIHsKKwkJc2VtLT53YWtpbmctLTsKKwkJcmV0ID0gMTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VtYXBob3JlX3dha2VfbG9jaywgZmxhZ3MpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiB3YWtpbmcgbm9uIHplcm8gaW50ZXJydXB0aWJsZQorICoJMQlnb3QgdGhlIGxvY2sKKyAqCTAJZ28gdG8gc2xlZXAKKyAqCS1FSU5UUglpbnRlcnJ1cHRlZAorICoKKyAqIFdlIG11c3QgdW5kbyB0aGUgc2VtLT5jb3VudCBkb3duX2ludGVycnVwdGlibGUoKSBpbmNyZW1lbnQgd2hpbGUgd2UgYXJlCisgKiBwcm90ZWN0ZWQgYnkgdGhlIHNwaW5sb2NrIGluIG9yZGVyIHRvIG1ha2UgdGhpcyBhdG9taWNfaW5jKCkgd2l0aCB0aGUKKyAqIGF0b21pY19yZWFkKCkgaW4gd2FrZV9vbmVfbW9yZSgpLCBvdGhlcndpc2Ugd2UgY2FuIHJhY2UuIC1hcmNhCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHdha2luZ19ub25femVyb19pbnRlcnJ1cHRpYmxlKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSwKKwkJCQkJCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldCA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2VtYXBob3JlX3dha2VfbG9jaywgZmxhZ3MpOworCWlmIChzZW0tPndha2luZyA+IDApIHsKKwkJc2VtLT53YWtpbmctLTsKKwkJcmV0ID0gMTsKKwl9IGVsc2UgaWYgKHNpZ25hbF9wZW5kaW5nKHRzaykpIHsKKwkJYXRvbWljX2luYygmc2VtLT5jb3VudCk7CisJCXJldCA9IC1FSU5UUjsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VtYXBob3JlX3dha2VfbG9jaywgZmxhZ3MpOworCXJldHVybiByZXQ7CQorfQorCisvKgorICogd2FraW5nX25vbl96ZXJvX3RyeV9sb2NrOgorICoJMQlmYWlsZWQgdG8gbG9jaworICoJMAlnb3QgdGhlIGxvY2sKKyAqCisgKiBXZSBtdXN0IHVuZG8gdGhlIHNlbS0+Y291bnQgZG93bl9pbnRlcnJ1cHRpYmxlKCkgaW5jcmVtZW50IHdoaWxlIHdlIGFyZQorICogcHJvdGVjdGVkIGJ5IHRoZSBzcGlubG9jayBpbiBvcmRlciB0byBtYWtlIHRoaXMgYXRvbWljX2luYygpIHdpdGggdGhlCisgKiBhdG9taWNfcmVhZCgpIGluIHdha2Vfb25lX21vcmUoKSwgb3RoZXJ3aXNlIHdlIGNhbiByYWNlLiAtYXJjYQorICovCitzdGF0aWMgaW5saW5lIGludCB3YWtpbmdfbm9uX3plcm9fdHJ5bG9jayhzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gMTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzZW1hcGhvcmVfd2FrZV9sb2NrLCBmbGFncyk7CisJaWYgKHNlbS0+d2FraW5nIDw9IDApCisJCWF0b21pY19pbmMoJnNlbS0+Y291bnQpOworCWVsc2UgeworCQlzZW0tPndha2luZy0tOworCQlyZXQgPSAwOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZW1hcGhvcmVfd2FrZV9sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJldDsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi9zZW1hcGhvcmUuaCBiL2luY2x1ZGUvYXNtLWFybTI2L3NlbWFwaG9yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxYjZhMWUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0yNi9zZW1hcGhvcmUuaApAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9zZW1hcGhvcmUuaAorICovCisjaWZuZGVmIF9fQVNNX0FSTV9TRU1BUEhPUkVfSAorI2RlZmluZSBfX0FTTV9BUk1fU0VNQVBIT1JFX0gKKworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgorCisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgPGFzbS9sb2Nrcy5oPgorCitzdHJ1Y3Qgc2VtYXBob3JlIHsKKwlhdG9taWNfdCBjb3VudDsKKwlpbnQgc2xlZXBlcnM7CisJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKK307CisKKyNkZWZpbmUgX19TRU1BUEhPUkVfSU5JVChuYW1lLCBuKQkJCQkJXAorewkJCQkJCQkJCVwKKwkuY291bnQJCT0gQVRPTUlDX0lOSVQobiksCQkJCVwKKwkuc2xlZXBlcnMJPSAwLAkJCQkJCVwKKwkud2FpdAkJPSBfX1dBSVRfUVVFVUVfSEVBRF9JTklUSUFMSVpFUigobmFtZSkud2FpdCksCVwKK30KKworI2RlZmluZSBfX01VVEVYX0lOSVRJQUxJWkVSKG5hbWUpIFwKKwlfX1NFTUFQSE9SRV9JTklUKG5hbWUsMSkKKworI2RlZmluZSBfX0RFQ0xBUkVfU0VNQVBIT1JFX0dFTkVSSUMobmFtZSxjb3VudCkJXAorCXN0cnVjdCBzZW1hcGhvcmUgbmFtZSA9IF9fU0VNQVBIT1JFX0lOSVQobmFtZSxjb3VudCkKKworI2RlZmluZSBERUNMQVJFX01VVEVYKG5hbWUpCQlfX0RFQ0xBUkVfU0VNQVBIT1JFX0dFTkVSSUMobmFtZSwxKQorI2RlZmluZSBERUNMQVJFX01VVEVYX0xPQ0tFRChuYW1lKQlfX0RFQ0xBUkVfU0VNQVBIT1JFX0dFTkVSSUMobmFtZSwwKQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2VtYV9pbml0KHN0cnVjdCBzZW1hcGhvcmUgKnNlbSwgaW50IHZhbCkKK3sKKwlhdG9taWNfc2V0KCZzZW0tPmNvdW50LCB2YWwpOworCXNlbS0+c2xlZXBlcnMgPSAwOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnNlbS0+d2FpdCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbml0X01VVEVYKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKK3sKKwlzZW1hX2luaXQoc2VtLCAxKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGluaXRfTVVURVhfTE9DS0VEKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKK3sKKwlzZW1hX2luaXQoc2VtLCAwKTsKK30KKworLyoKKyAqIHNwZWNpYWwgcmVnaXN0ZXIgY2FsbGluZyBjb252ZW50aW9uCisgKi8KK2FzbWxpbmthZ2Ugdm9pZCBfX2Rvd25fZmFpbGVkKHZvaWQpOworYXNtbGlua2FnZSBpbnQgIF9fZG93bl9pbnRlcnJ1cHRpYmxlX2ZhaWxlZCh2b2lkKTsKK2FzbWxpbmthZ2UgaW50ICBfX2Rvd25fdHJ5bG9ja19mYWlsZWQodm9pZCk7Cithc21saW5rYWdlIHZvaWQgX191cF93YWtldXAodm9pZCk7CisKK2V4dGVybiB2b2lkIF9fZG93bihzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKTsKK2V4dGVybiBpbnQgIF9fZG93bl9pbnRlcnJ1cHRpYmxlKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pOworZXh0ZXJuIGludCAgX19kb3duX3RyeWxvY2soc3RydWN0IHNlbWFwaG9yZSAqIHNlbSk7CitleHRlcm4gdm9pZCBfX3VwKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pOworCisvKgorICogVGhpcyBpcyB1Z2x5LCBidXQgd2Ugd2FudCB0aGUgZGVmYXVsdCBjYXNlIHRvIGZhbGwgdGhyb3VnaC4KKyAqICJfX2Rvd24iIGlzIHRoZSBhY3R1YWwgcm91dGluZSB0aGF0IHdhaXRzLi4uCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBkb3duKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCit7CisJbWlnaHRfc2xlZXAoKTsKKwlfX2Rvd25fb3Aoc2VtLCBfX2Rvd25fZmFpbGVkKTsKK30KKworLyoKKyAqIFRoaXMgaXMgdWdseSwgYnV0IHdlIHdhbnQgdGhlIGRlZmF1bHQgY2FzZSB0byBmYWxsIHRocm91Z2guCisgKiAiX19kb3duX2ludGVycnVwdGlibGUiIGlzIHRoZSBhY3R1YWwgcm91dGluZSB0aGF0IHdhaXRzLi4uCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGRvd25faW50ZXJydXB0aWJsZSAoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKK3sKKwltaWdodF9zbGVlcCgpOworCXJldHVybiBfX2Rvd25fb3BfcmV0KHNlbSwgX19kb3duX2ludGVycnVwdGlibGVfZmFpbGVkKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZG93bl90cnlsb2NrKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKK3sKKwlyZXR1cm4gX19kb3duX29wX3JldChzZW0sIF9fZG93bl90cnlsb2NrX2ZhaWxlZCk7Cit9CisKKy8qCisgKiBOb3RlISBUaGlzIGlzIHN1YnRsZS4gV2UganVtcCB0byB3YWtlIHBlb3BsZSB1cCBvbmx5IGlmCisgKiB0aGUgc2VtYXBob3JlIHdhcyBuZWdhdGl2ZSAoPT0gc29tZWJvZHkgd2FzIHdhaXRpbmcgb24gaXQpLgorICogVGhlIGRlZmF1bHQgY2FzZSAobm8gY29udGVudGlvbikgd2lsbCByZXN1bHQgaW4gTk8KKyAqIGp1bXBzIGZvciBib3RoIGRvd24oKSBhbmQgdXAoKS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHVwKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCit7CisJX191cF9vcChzZW0sIF9fdXBfd2FrZXVwKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi9zZW1idWYuaCBiL2luY2x1ZGUvYXNtLWFybTI2L3NlbWJ1Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjMDI4MzkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0yNi9zZW1idWYuaApAQCAtMCwwICsxLDI1IEBACisjaWZuZGVmIF9BU01BUk1fU0VNQlVGX0gKKyNkZWZpbmUgX0FTTUFSTV9TRU1CVUZfSAorCisvKiAKKyAqIFRoZSBzZW1pZDY0X2RzIHN0cnVjdHVyZSBmb3IgYXJtIGFyY2hpdGVjdHVyZS4KKyAqIE5vdGUgZXh0cmEgcGFkZGluZyBiZWNhdXNlIHRoaXMgc3RydWN0dXJlIGlzIHBhc3NlZCBiYWNrIGFuZCBmb3J0aAorICogYmV0d2VlbiBrZXJuZWwgYW5kIHVzZXIgc3BhY2UuCisgKgorICogUGFkIHNwYWNlIGlzIGxlZnQgZm9yOgorICogLSA2NC1iaXQgdGltZV90IHRvIHNvbHZlIHkyMDM4IHByb2JsZW0KKyAqIC0gMiBtaXNjZWxsYW5lb3VzIDMyLWJpdCB2YWx1ZXMKKyAqLworCitzdHJ1Y3Qgc2VtaWQ2NF9kcyB7CisJc3RydWN0IGlwYzY0X3Blcm0gc2VtX3Blcm07CQkvKiBwZXJtaXNzaW9ucyAuLiBzZWUgaXBjLmggKi8KKwlfX2tlcm5lbF90aW1lX3QJc2VtX290aW1lOwkJLyogbGFzdCBzZW1vcCB0aW1lICovCisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDE7CisJX19rZXJuZWxfdGltZV90CXNlbV9jdGltZTsJCS8qIGxhc3QgY2hhbmdlIHRpbWUgKi8KKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkMjsKKwl1bnNpZ25lZCBsb25nCXNlbV9uc2VtczsJCS8qIG5vLiBvZiBzZW1hcGhvcmVzIGluIGFycmF5ICovCisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDM7CisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDQ7Cit9OworCisjZW5kaWYgLyogX0FTTUFSTV9TRU1CVUZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtMjYvc2VyaWFsLmggYi9pbmNsdWRlL2FzbS1hcm0yNi9zZXJpYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWUxZGYzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtMjYvc2VyaWFsLmgKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vc2VyaWFsLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk2IFJ1c3NlbGwgS2luZy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBDaGFuZ2Vsb2c6CisgKiAgIDE1LTEwLTE5OTYJUk1LCUNyZWF0ZWQKKyAqLworCisjaWZuZGVmIF9fQVNNX1NFUklBTF9ICisjZGVmaW5lIF9fQVNNX1NFUklBTF9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworLyoKKyAqIFRoaXMgYXNzdW1lcyB5b3UgaGF2ZSBhIDEuODQzMiBNSHogY2xvY2sgZm9yIHlvdXIgVUFSVC4KKyAqCisgKiBJdCdkIGJlIG5pY2UgaWYgc29tZW9uZSBidWlsdCBhIHNlcmlhbCBjYXJkIHdpdGggYSAyNC41NzYgTUh6CisgKiBjbG9jaywgc2luY2UgdGhlIDE2NTUwQSBpcyBjYXBhYmxlIG9mIGhhbmRsaW5nIGEgdG9wIHNwZWVkIG9mIDEuNQorICogbWVnYWJpdHMvc2Vjb25kOyBidXQgdGhpcyByZXF1aXJlcyB0aGUgZmFzdGVyIGNsb2NrLgorICovCisjZGVmaW5lIEJBU0VfQkFVRCAoMTg0MzIwMCAvIDE2KQorCisjZGVmaW5lIFNURF9DT01fRkxBR1MgKEFTWU5DX0JPT1RfQVVUT0NPTkYgfCBBU1lOQ19TS0lQX1RFU1QpCisKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX0E1SykKKyAgICAgLyogVUFSVCBDTEsgICAgICAgIFBPUlQgIElSUSAgICAgRkxBR1MgICAgICAgICovCisKKyNkZWZpbmUgU1REX1NFUklBTF9QT1JUX0RFRk5TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeyAwLCBCQVNFX0JBVUQsIDB4M0Y4LCAxMCwgU1REX0NPTV9GTEFHUyB9LCAgICAgLyogdHR5UzAgKi8gICAgIFwKKyAgICAgICAgeyAwLCBCQVNFX0JBVUQsIDB4MkY4LCAxMCwgU1REX0NPTV9GTEFHUyB9LCAgICAgLyogdHR5UzEgKi8KKworI2Vsc2UKKworI2RlZmluZSBTVERfU0VSSUFMX1BPUlRfREVGTlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB7IDAsIEJBU0VfQkFVRCwgMCAgICAsICAwLCBTVERfQ09NX0ZMQUdTIH0sICAgICAvKiB0dHlTMCAqLyAgICAgXAorICAgICAgICB7IDAsIEJBU0VfQkFVRCwgMCAgICAsICAwLCBTVERfQ09NX0ZMQUdTIH0sICAgICAvKiB0dHlTMSAqLworCisjZW5kaWYKKworI2RlZmluZSBFWFRSQV9TRVJJQUxfUE9SVF9ERUZOUyBcCisgICAgICAgIHsgMCwgQkFTRV9CQVVELCAwICAgICwgIDAsIFNURF9DT01fRkxBR1MgfSwgICAgIC8qIHR0eVMyICovICAgICBcCisgICAgICAgIHsgMCwgQkFTRV9CQVVELCAwICAgICwgIDAsIFNURF9DT01fRkxBR1MgfSwgICAgIC8qIHR0eVMzICovICAgICBcCisgICAgICAgIHsgMCwgQkFTRV9CQVVELCAwICAgICwgIDAsIFNURF9DT01fRkxBR1MgfSwgICAgIC8qIHR0eVM0ICovICAgICBcCisgICAgICAgIHsgMCwgQkFTRV9CQVVELCAwICAgICwgIDAsIFNURF9DT01fRkxBR1MgfSwgICAgIC8qIHR0eVM1ICovICAgICBcCisgICAgICAgIHsgMCwgQkFTRV9CQVVELCAwICAgICwgIDAsIFNURF9DT01fRkxBR1MgfSwgICAgIC8qIHR0eVM2ICovICAgICBcCisgICAgICAgIHsgMCwgQkFTRV9CQVVELCAwICAgICwgIDAsIFNURF9DT01fRkxBR1MgfSwgICAgIC8qIHR0eVM3ICovICAgICBcCisgICAgICAgIHsgMCwgQkFTRV9CQVVELCAwICAgICwgIDAsIFNURF9DT01fRkxBR1MgfSwgICAgIC8qIHR0eVM4ICovICAgICBcCisgICAgICAgIHsgMCwgQkFTRV9CQVVELCAwICAgICwgIDAsIFNURF9DT01fRkxBR1MgfSwgICAgIC8qIHR0eVM5ICovICAgICBcCisgICAgICAgIHsgMCwgQkFTRV9CQVVELCAwICAgICwgIDAsIFNURF9DT01fRkxBR1MgfSwgICAgIC8qIHR0eVMxMCAqLyAgICBcCisgICAgICAgIHsgMCwgQkFTRV9CQVVELCAwICAgICwgIDAsIFNURF9DT01fRkxBR1MgfSwgICAgIC8qIHR0eVMxMSAqLyAgICBcCisgICAgICAgIHsgMCwgQkFTRV9CQVVELCAwICAgICwgIDAsIFNURF9DT01fRkxBR1MgfSwgICAgIC8qIHR0eVMxMiAqLyAgICBcCisgICAgICAgIHsgMCwgQkFTRV9CQVVELCAwICAgICwgIDAsIFNURF9DT01fRkxBR1MgfSwgICAgIC8qIHR0eVMxMyAqLworCisjZGVmaW5lIFNFUklBTF9QT1JUX0RGTlMJCVwKKwlTVERfU0VSSUFMX1BPUlRfREVGTlMJCVwKKwlFWFRSQV9TRVJJQUxfUE9SVF9ERUZOUworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybTI2L3NldHVwLmggYi9pbmNsdWRlL2FzbS1hcm0yNi9zZXR1cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzNDg5MzEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0yNi9zZXR1cC5oCkBAIC0wLDAgKzEsMjA1IEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtL3NldHVwLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk3LTE5OTkgUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgU3RydWN0dXJlIHBhc3NlZCB0byBrZXJuZWwgdG8gdGVsbCBpdCBhYm91dCB0aGUKKyAqICBoYXJkd2FyZSBpdCdzIHJ1bm5pbmcgb24uICBTZWUgRG9jdW1lbnRhdGlvbi9hcm0vU2V0dXAKKyAqICBmb3IgbW9yZSBpbmZvLgorICovCisjaWZuZGVmIF9fQVNNQVJNX1NFVFVQX0gKKyNkZWZpbmUgX19BU01BUk1fU0VUVVBfSAorCisjZGVmaW5lIENPTU1BTkRfTElORV9TSVpFIDEwMjQKKworLyogVGhlIGxpc3QgZW5kcyB3aXRoIGFuIEFUQUdfTk9ORSBub2RlLiAqLworI2RlZmluZSBBVEFHX05PTkUJMHgwMDAwMDAwMAorCitzdHJ1Y3QgdGFnX2hlYWRlciB7CisJdTMyIHNpemU7CisJdTMyIHRhZzsKK307CisKKy8qIFRoZSBsaXN0IG11c3Qgc3RhcnQgd2l0aCBhbiBBVEFHX0NPUkUgbm9kZSAqLworI2RlZmluZSBBVEFHX0NPUkUJMHg1NDQxMDAwMQorCitzdHJ1Y3QgdGFnX2NvcmUgeworCXUzMiBmbGFnczsJCS8qIGJpdCAwID0gcmVhZC1vbmx5ICovCisJdTMyIHBhZ2VzaXplOworCXUzMiByb290ZGV2OworfTsKKworLyogaXQgaXMgYWxsb3dlZCB0byBoYXZlIG11bHRpcGxlIEFUQUdfTUVNIG5vZGVzICovCisjZGVmaW5lIEFUQUdfTUVNCTB4NTQ0MTAwMDIKKworc3RydWN0IHRhZ19tZW0zMiB7CisJdTMyCXNpemU7CisJdTMyCXN0YXJ0OwkvKiBwaHlzaWNhbCBzdGFydCBhZGRyZXNzICovCit9OworCisvKiBWR0EgdGV4dCB0eXBlIGRpc3BsYXlzICovCisjZGVmaW5lIEFUQUdfVklERU9URVhUCTB4NTQ0MTAwMDMKKworc3RydWN0IHRhZ192aWRlb3RleHQgeworCXU4CQl4OworCXU4CQl5OworCXUxNgkJdmlkZW9fcGFnZTsKKwl1OAkJdmlkZW9fbW9kZTsKKwl1OAkJdmlkZW9fY29sczsKKwl1MTYJCXZpZGVvX2VnYV9ieDsKKwl1OAkJdmlkZW9fbGluZXM7CisJdTgJCXZpZGVvX2lzdmdhOworCXUxNgkJdmlkZW9fcG9pbnRzOworfTsKKworLyogZGVzY3JpYmVzIGhvdyB0aGUgcmFtZGlzayB3aWxsIGJlIHVzZWQgaW4ga2VybmVsICovCisjZGVmaW5lIEFUQUdfUkFNRElTSwkweDU0NDEwMDA0CisKK3N0cnVjdCB0YWdfcmFtZGlzayB7CisJdTMyIGZsYWdzOwkvKiBiaXQgMCA9IGxvYWQsIGJpdCAxID0gcHJvbXB0ICovCisJdTMyIHNpemU7CS8qIGRlY29tcHJlc3NlZCByYW1kaXNrIHNpemUgaW4gX2tpbG9fIGJ5dGVzICovCisJdTMyIHN0YXJ0OwkvKiBzdGFydGluZyBibG9jayBvZiBmbG9wcHktYmFzZWQgUkFNIGRpc2sgaW1hZ2UgKi8KK307CisKKy8qIGRlc2NyaWJlcyB3aGVyZSB0aGUgY29tcHJlc3NlZCByYW1kaXNrIGltYWdlIGxpdmVzICovCisvKgorICogdGhpcyBvbmUgYWNjaWRlbnRhbGx5IHVzZWQgdmlydHVhbCBhZGRyZXNzZXMgLSBhcyBzdWNoLAorICogaXRzIGRlcHJlY2lhdGVkLgorICovCisjZGVmaW5lIEFUQUdfSU5JVFJECTB4NTQ0MTAwMDUKKworLyogZGVzY3JpYmVzIHdoZXJlIHRoZSBjb21wcmVzc2VkIHJhbWRpc2sgaW1hZ2UgbGl2ZXMgKi8KKyNkZWZpbmUgQVRBR19JTklUUkQyCTB4NTQ0MjAwMDUKKworc3RydWN0IHRhZ19pbml0cmQgeworCXUzMiBzdGFydDsJLyogcGh5c2ljYWwgc3RhcnQgYWRkcmVzcyAqLworCXUzMiBzaXplOwkvKiBzaXplIG9mIGNvbXByZXNzZWQgcmFtZGlzayBpbWFnZSBpbiBieXRlcyAqLworfTsKKworLyogYm9hcmQgc2VyaWFsIG51bWJlci4gIjY0IGJpdHMgc2hvdWxkIGJlIGVub3VnaCBmb3IgZXZlcnlib2R5IiAqLworI2RlZmluZSBBVEFHX1NFUklBTAkweDU0NDEwMDA2CisKK3N0cnVjdCB0YWdfc2VyaWFsbnIgeworCXUzMiBsb3c7CisJdTMyIGhpZ2g7Cit9OworCisvKiBib2FyZCByZXZpc2lvbiAqLworI2RlZmluZSBBVEFHX1JFVklTSU9OCTB4NTQ0MTAwMDcKKworc3RydWN0IHRhZ19yZXZpc2lvbiB7CisJdTMyIHJldjsKK307CisKKy8qIGluaXRpYWwgdmFsdWVzIGZvciB2ZXNhZmItdHlwZSBmcmFtZWJ1ZmZlcnMuIHNlZSBzdHJ1Y3Qgc2NyZWVuX2luZm8KKyAqIGluIGluY2x1ZGUvbGludXgvdHR5LmgKKyAqLworI2RlZmluZSBBVEFHX1ZJREVPTEZCCTB4NTQ0MTAwMDgKKworc3RydWN0IHRhZ192aWRlb2xmYiB7CisJdTE2CQlsZmJfd2lkdGg7CisJdTE2CQlsZmJfaGVpZ2h0OworCXUxNgkJbGZiX2RlcHRoOworCXUxNgkJbGZiX2xpbmVsZW5ndGg7CisJdTMyCQlsZmJfYmFzZTsKKwl1MzIJCWxmYl9zaXplOworCXU4CQlyZWRfc2l6ZTsKKwl1OAkJcmVkX3BvczsKKwl1OAkJZ3JlZW5fc2l6ZTsKKwl1OAkJZ3JlZW5fcG9zOworCXU4CQlibHVlX3NpemU7CisJdTgJCWJsdWVfcG9zOworCXU4CQlyc3ZkX3NpemU7CisJdTgJCXJzdmRfcG9zOworfTsKKworLyogY29tbWFuZCBsaW5lOiBcMCB0ZXJtaW5hdGVkIHN0cmluZyAqLworI2RlZmluZSBBVEFHX0NNRExJTkUJMHg1NDQxMDAwOQorCitzdHJ1Y3QgdGFnX2NtZGxpbmUgeworCWNoYXIJY21kbGluZVsxXTsJLyogdGhpcyBpcyB0aGUgbWluaW11bSBzaXplICovCit9OworCisvKiBhY29ybiBSaXNjUEMgc3BlY2lmaWMgaW5mb3JtYXRpb24gKi8KKyNkZWZpbmUgQVRBR19BQ09STgkweDQxMDAwMTAxCisKK3N0cnVjdCB0YWdfYWNvcm4geworCXUzMiBtZW1jX2NvbnRyb2xfcmVnOworCXUzMiB2cmFtX3BhZ2VzOworCXU4IHNvdW5kZGVmYXVsdDsKKwl1OCBhZGZzZHJpdmVzOworfTsKKworLyogZm9vdGJyaWRnZSBtZW1vcnkgY2xvY2ssIHNlZSBhcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvYXJjaC5jICovCisjZGVmaW5lIEFUQUdfTUVNQ0xLCTB4NDEwMDA0MDIKKworc3RydWN0IHRhZ19tZW1jbGsgeworCXUzMiBmbWVtY2xrOworfTsKKworc3RydWN0IHRhZyB7CisJc3RydWN0IHRhZ19oZWFkZXIgaGRyOworCXVuaW9uIHsKKwkJc3RydWN0IHRhZ19jb3JlCQljb3JlOworCQlzdHJ1Y3QgdGFnX21lbTMyCW1lbTsKKwkJc3RydWN0IHRhZ192aWRlb3RleHQJdmlkZW90ZXh0OworCQlzdHJ1Y3QgdGFnX3JhbWRpc2sJcmFtZGlzazsKKwkJc3RydWN0IHRhZ19pbml0cmQJaW5pdHJkOworCQlzdHJ1Y3QgdGFnX3NlcmlhbG5yCXNlcmlhbG5yOworCQlzdHJ1Y3QgdGFnX3JldmlzaW9uCXJldmlzaW9uOworCQlzdHJ1Y3QgdGFnX3ZpZGVvbGZiCXZpZGVvbGZiOworCQlzdHJ1Y3QgdGFnX2NtZGxpbmUJY21kbGluZTsKKworCQkvKgorCQkgKiBBY29ybiBzcGVjaWZpYworCQkgKi8KKwkJc3RydWN0IHRhZ19hY29ybglhY29ybjsKKworCQkvKgorCQkgKiBEQzIxMjg1IHNwZWNpZmljCisJCSAqLworCQlzdHJ1Y3QgdGFnX21lbWNsawltZW1jbGs7CisJfSB1OworfTsKKworc3RydWN0IHRhZ3RhYmxlIHsKKwl1MzIgdGFnOworCWludCAoKnBhcnNlKShjb25zdCBzdHJ1Y3QgdGFnICopOworfTsKKworI2RlZmluZSBfX3RhZyBfX2F0dHJpYnV0ZV91c2VkX18gX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIi50YWdsaXN0IikpKQorI2RlZmluZSBfX3RhZ3RhYmxlKHRhZywgZm4pIFwKK3N0YXRpYyBzdHJ1Y3QgdGFndGFibGUgX190YWd0YWJsZV8jI2ZuIF9fdGFnID0geyB0YWcsIGZuIH0KKworI2RlZmluZSB0YWdfbWVtYmVyX3ByZXNlbnQodGFnLG1lbWJlcikJCQkJXAorCSgodW5zaWduZWQgbG9uZykoJigoc3RydWN0IHRhZyAqKTBMKS0+bWVtYmVyICsgMSkJXAorCQk8PSAodGFnKS0+aGRyLnNpemUgKiA0KQorCisjZGVmaW5lIHRhZ19uZXh0KHQpCSgoc3RydWN0IHRhZyAqKSgodTMyICopKHQpICsgKHQpLT5oZHIuc2l6ZSkpCisjZGVmaW5lIHRhZ19zaXplKHR5cGUpCSgoc2l6ZW9mKHN0cnVjdCB0YWdfaGVhZGVyKSArIHNpemVvZihzdHJ1Y3QgdHlwZSkpID4+IDIpCisKKyNkZWZpbmUgZm9yX2VhY2hfdGFnKHQsYmFzZSkJCVwKKwlmb3IgKHQgPSBiYXNlOyB0LT5oZHIuc2l6ZTsgdCA9IHRhZ19uZXh0KHQpKQorCisvKgorICogTWVtb3J5IG1hcCBkZXNjcmlwdGlvbgorICovCisjZGVmaW5lIE5SX0JBTktTIDgKKworc3RydWN0IG1lbWluZm8geworCWludCBucl9iYW5rczsKKwl1bnNpZ25lZCBsb25nIGVuZDsKKwlzdHJ1Y3QgeworCQl1bnNpZ25lZCBsb25nIHN0YXJ0OworCQl1bnNpZ25lZCBsb25nIHNpemU7CisJCWludCAgICAgICAgICAgbm9kZTsKKwl9IGJhbmtbTlJfQkFOS1NdOworfTsKKworZXh0ZXJuIHN0cnVjdCBtZW1pbmZvIG1lbWluZm87CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtMjYvc2htYnVmLmggYi9pbmNsdWRlL2FzbS1hcm0yNi9zaG1idWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTVjNjdiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtMjYvc2htYnVmLmgKQEAgLTAsMCArMSw0MiBAQAorI2lmbmRlZiBfQVNNQVJNX1NITUJVRl9ICisjZGVmaW5lIF9BU01BUk1fU0hNQlVGX0gKKworLyogCisgKiBUaGUgc2htaWQ2NF9kcyBzdHJ1Y3R1cmUgZm9yIGFybSBhcmNoaXRlY3R1cmUuCisgKiBOb3RlIGV4dHJhIHBhZGRpbmcgYmVjYXVzZSB0aGlzIHN0cnVjdHVyZSBpcyBwYXNzZWQgYmFjayBhbmQgZm9ydGgKKyAqIGJldHdlZW4ga2VybmVsIGFuZCB1c2VyIHNwYWNlLgorICoKKyAqIFBhZCBzcGFjZSBpcyBsZWZ0IGZvcjoKKyAqIC0gNjQtYml0IHRpbWVfdCB0byBzb2x2ZSB5MjAzOCBwcm9ibGVtCisgKiAtIDIgbWlzY2VsbGFuZW91cyAzMi1iaXQgdmFsdWVzCisgKi8KKworc3RydWN0IHNobWlkNjRfZHMgeworCXN0cnVjdCBpcGM2NF9wZXJtCXNobV9wZXJtOwkvKiBvcGVyYXRpb24gcGVybXMgKi8KKwlzaXplX3QJCQlzaG1fc2Vnc3o7CS8qIHNpemUgb2Ygc2VnbWVudCAoYnl0ZXMpICovCisJX19rZXJuZWxfdGltZV90CQlzaG1fYXRpbWU7CS8qIGxhc3QgYXR0YWNoIHRpbWUgKi8KKwl1bnNpZ25lZCBsb25nCQlfX3VudXNlZDE7CisJX19rZXJuZWxfdGltZV90CQlzaG1fZHRpbWU7CS8qIGxhc3QgZGV0YWNoIHRpbWUgKi8KKwl1bnNpZ25lZCBsb25nCQlfX3VudXNlZDI7CisJX19rZXJuZWxfdGltZV90CQlzaG1fY3RpbWU7CS8qIGxhc3QgY2hhbmdlIHRpbWUgKi8KKwl1bnNpZ25lZCBsb25nCQlfX3VudXNlZDM7CisJX19rZXJuZWxfcGlkX3QJCXNobV9jcGlkOwkvKiBwaWQgb2YgY3JlYXRvciAqLworCV9fa2VybmVsX3BpZF90CQlzaG1fbHBpZDsJLyogcGlkIG9mIGxhc3Qgb3BlcmF0b3IgKi8KKwl1bnNpZ25lZCBsb25nCQlzaG1fbmF0dGNoOwkvKiBuby4gb2YgY3VycmVudCBhdHRhY2hlcyAqLworCXVuc2lnbmVkIGxvbmcJCV9fdW51c2VkNDsKKwl1bnNpZ25lZCBsb25nCQlfX3VudXNlZDU7Cit9OworCitzdHJ1Y3Qgc2htaW5mbzY0IHsKKwl1bnNpZ25lZCBsb25nCXNobW1heDsKKwl1bnNpZ25lZCBsb25nCXNobW1pbjsKKwl1bnNpZ25lZCBsb25nCXNobW1uaTsKKwl1bnNpZ25lZCBsb25nCXNobXNlZzsKKwl1bnNpZ25lZCBsb25nCXNobWFsbDsKKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkMTsKKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkMjsKKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkMzsKKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkNDsKK307CisKKyNlbmRpZiAvKiBfQVNNQVJNX1NITUJVRl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi9zaG1wYXJhbS5oIGIvaW5jbHVkZS9hc20tYXJtMjYvc2htcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzc0ODY4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtMjYvc2htcGFyYW0uaApAQCAtMCwwICsxLDE1IEBACisjaWZuZGVmIF9BU01BUk1fU0hNUEFSQU1fSAorI2RlZmluZSBfQVNNQVJNX1NITVBBUkFNX0gKKworI2lmbmRlZiBTSE1NQVgKKyNkZWZpbmUgU0hNTUFYICAgICAgICAgIDB4MDAzZmEwMDAKKyNlbmRpZgorCisvKgorICogVGhpcyBzaG91bGQgYmUgdGhlIHNpemUgb2YgdGhlIHZpcnR1YWxseSBpbmRleGVkIGNhY2hlL3dheXMsCisgKiBvciBwYWdlIHNpemUsIHdoaWNoZXZlciBpcyBncmVhdGVyIHNpbmNlIHRoZSBjYWNoZSBhbGlhc2VzCisgKiBldmVyeSBzaXplL3dheXMgYnl0ZXMuCisgKi8KKyNkZWZpbmUJU0hNTEJBIFBBR0VfU0laRQkJIC8qIGF0dGFjaCBhZGRyIGEgbXVsdGlwbGUgb2YgdGhpcyAqLworCisjZW5kaWYgLyogX0FTTUFSTV9TSE1QQVJBTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi9zaWdjb250ZXh0LmggYi9pbmNsdWRlL2FzbS1hcm0yNi9zaWdjb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDEzYWQyMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybTI2L3NpZ2NvbnRleHQuaApAQCAtMCwwICsxLDMzIEBACisjaWZuZGVmIF9BU01BUk1fU0lHQ09OVEVYVF9ICisjZGVmaW5lIF9BU01BUk1fU0lHQ09OVEVYVF9ICisKKy8qCisgKiBTaWduYWwgY29udGV4dCBzdHJ1Y3R1cmUgLSBjb250YWlucyBhbGwgaW5mbyB0byBkbyB3aXRoIHRoZSBzdGF0ZQorICogYmVmb3JlIHRoZSBzaWduYWwgaGFuZGxlciB3YXMgaW52b2tlZC4gIE5vdGU6IG9ubHkgYWRkIG5ldyBlbnRyaWVzCisgKiB0byB0aGUgZW5kIG9mIHRoZSBzdHJ1Y3R1cmUuCisgKi8KK3N0cnVjdCBzaWdjb250ZXh0IHsKKwl1bnNpZ25lZCBsb25nIHRyYXBfbm87CisJdW5zaWduZWQgbG9uZyBlcnJvcl9jb2RlOworCXVuc2lnbmVkIGxvbmcgb2xkbWFzazsKKwl1bnNpZ25lZCBsb25nIGFybV9yMDsKKwl1bnNpZ25lZCBsb25nIGFybV9yMTsKKwl1bnNpZ25lZCBsb25nIGFybV9yMjsKKwl1bnNpZ25lZCBsb25nIGFybV9yMzsKKwl1bnNpZ25lZCBsb25nIGFybV9yNDsKKwl1bnNpZ25lZCBsb25nIGFybV9yNTsKKwl1bnNpZ25lZCBsb25nIGFybV9yNjsKKwl1bnNpZ25lZCBsb25nIGFybV9yNzsKKwl1bnNpZ25lZCBsb25nIGFybV9yODsKKwl1bnNpZ25lZCBsb25nIGFybV9yOTsKKwl1bnNpZ25lZCBsb25nIGFybV9yMTA7CisJdW5zaWduZWQgbG9uZyBhcm1fZnA7CisJdW5zaWduZWQgbG9uZyBhcm1faXA7CisJdW5zaWduZWQgbG9uZyBhcm1fc3A7CisJdW5zaWduZWQgbG9uZyBhcm1fbHI7CisJdW5zaWduZWQgbG9uZyBhcm1fcGM7CisJdW5zaWduZWQgbG9uZyBmYXVsdF9hZGRyZXNzOworfTsKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybTI2L3NpZ2luZm8uaCBiL2luY2x1ZGUvYXNtLWFybTI2L3NpZ2luZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTIxODUyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtMjYvc2lnaW5mby5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfQVNNQVJNX1NJR0lORk9fSAorI2RlZmluZSBfQVNNQVJNX1NJR0lORk9fSAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2lnaW5mby5oPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybTI2L3NpZ25hbC5oIGIvaW5jbHVkZS9hc20tYXJtMjYvc2lnbmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY2MmU1MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybTI2L3NpZ25hbC5oCkBAIC0wLDAgKzEsMjAxIEBACisjaWZuZGVmIF9BU01BUk1fU0lHTkFMX0gKKyNkZWZpbmUgX0FTTUFSTV9TSUdOQUxfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyogQXZvaWQgdG9vIG1hbnkgaGVhZGVyIG9yZGVyaW5nIHByb2JsZW1zLiAgKi8KK3N0cnVjdCBzaWdpbmZvOworCisjaWZkZWYgX19LRVJORUxfXworLyogTW9zdCB0aGluZ3Mgc2hvdWxkIGJlIGNsZWFuIGVub3VnaCB0byByZWRlZmluZSB0aGlzIGF0IHdpbGwsIGlmIGNhcmUKKyAgIGlzIHRha2VuIHRvIG1ha2UgbGliYyBtYXRjaC4gICovCisKKyNkZWZpbmUgX05TSUcJCTY0CisjZGVmaW5lIF9OU0lHX0JQVwkzMgorI2RlZmluZSBfTlNJR19XT1JEUwkoX05TSUcgLyBfTlNJR19CUFcpCisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBvbGRfc2lnc2V0X3Q7CQkvKiBhdCBsZWFzdCAzMiBiaXRzICovCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBsb25nIHNpZ1tfTlNJR19XT1JEU107Cit9IHNpZ3NldF90OworCisjZWxzZQorLyogSGVyZSB3ZSBtdXN0IGNhdGVyIHRvIGxpYmNzIHRoYXQgcG9rZSBhYm91dCBpbiBrZXJuZWwgaGVhZGVycy4gICovCisKKyNkZWZpbmUgTlNJRwkJMzIKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBzaWdzZXRfdDsKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2RlZmluZSBTSUdIVVAJCSAxCisjZGVmaW5lIFNJR0lOVAkJIDIKKyNkZWZpbmUgU0lHUVVJVAkJIDMKKyNkZWZpbmUgU0lHSUxMCQkgNAorI2RlZmluZSBTSUdUUkFQCQkgNQorI2RlZmluZSBTSUdBQlJUCQkgNgorI2RlZmluZSBTSUdJT1QJCSA2CisjZGVmaW5lIFNJR0JVUwkJIDcKKyNkZWZpbmUgU0lHRlBFCQkgOAorI2RlZmluZSBTSUdLSUxMCQkgOQorI2RlZmluZSBTSUdVU1IxCQkxMAorI2RlZmluZSBTSUdTRUdWCQkxMQorI2RlZmluZSBTSUdVU1IyCQkxMgorI2RlZmluZSBTSUdQSVBFCQkxMworI2RlZmluZSBTSUdBTFJNCQkxNAorI2RlZmluZSBTSUdURVJNCQkxNQorI2RlZmluZSBTSUdTVEtGTFQJMTYKKyNkZWZpbmUgU0lHQ0hMRAkJMTcKKyNkZWZpbmUgU0lHQ09OVAkJMTgKKyNkZWZpbmUgU0lHU1RPUAkJMTkKKyNkZWZpbmUgU0lHVFNUUAkJMjAKKyNkZWZpbmUgU0lHVFRJTgkJMjEKKyNkZWZpbmUgU0lHVFRPVQkJMjIKKyNkZWZpbmUgU0lHVVJHCQkyMworI2RlZmluZSBTSUdYQ1BVCQkyNAorI2RlZmluZSBTSUdYRlNaCQkyNQorI2RlZmluZSBTSUdWVEFMUk0JMjYKKyNkZWZpbmUgU0lHUFJPRgkJMjcKKyNkZWZpbmUgU0lHV0lOQ0gJMjgKKyNkZWZpbmUgU0lHSU8JCTI5CisjZGVmaW5lIFNJR1BPTEwJCVNJR0lPCisvKgorI2RlZmluZSBTSUdMT1NUCQkyOQorKi8KKyNkZWZpbmUgU0lHUFdSCQkzMAorI2RlZmluZSBTSUdTWVMJCTMxCisjZGVmaW5lCVNJR1VOVVNFRAkzMQorCisvKiBUaGVzZSBzaG91bGQgbm90IGJlIGNvbnNpZGVyZWQgY29uc3RhbnRzIGZyb20gdXNlcmxhbmQuICAqLworI2RlZmluZSBTSUdSVE1JTgkzMgorI2RlZmluZSBTSUdSVE1BWAlfTlNJRworCisjZGVmaW5lIFNJR1NXSQkJMzIKKworLyoKKyAqIFNBX0ZMQUdTIHZhbHVlczoKKyAqCisgKiBTQV9OT0NMRFNUT1AJCWZsYWcgdG8gdHVybiBvZmYgU0lHQ0hMRCB3aGVuIGNoaWxkcmVuIHN0b3AuCisgKiBTQV9OT0NMRFdBSVQJCWZsYWcgb24gU0lHQ0hMRCB0byBpbmhpYml0IHpvbWJpZXMuCisgKiBTQV9TSUdJTkZPCQlkZWxpdmVyIHRoZSBzaWduYWwgd2l0aCBTSUdJTkZPIHN0cnVjdHMKKyAqIFNBX1RISVJUWVRXTwkJZGVsaXZlcnMgdGhlIHNpZ25hbCBpbiAzMi1iaXQgbW9kZSwgZXZlbiBpZiB0aGUgdGFzayAKKyAqCQkJaXMgcnVubmluZyBpbiAyNi1iaXQuCisgKiBTQV9PTlNUQUNLCQlhbGxvd3MgYWx0ZXJuYXRlIHNpZ25hbCBzdGFja3MgKHNlZSBzaWdhbHRzdGFjaygyKSkuCisgKiBTQV9SRVNUQVJUCQlmbGFnIHRvIGdldCByZXN0YXJ0aW5nIHNpZ25hbHMgKHdoaWNoIHdlcmUgdGhlIGRlZmF1bHQgbG9uZyBhZ28pCisgKiBTQV9JTlRFUlJVUFQJCWlzIGEgbm8tb3AsIGJ1dCBsZWZ0IGR1ZSB0byBoaXN0b3JpY2FsIHJlYXNvbnMuIFVzZSB0aGUKKyAqIFNBX05PREVGRVIJCXByZXZlbnRzIHRoZSBjdXJyZW50IHNpZ25hbCBmcm9tIGJlaW5nIG1hc2tlZCBpbiB0aGUgaGFuZGxlci4KKyAqIFNBX1JFU0VUSEFORAkJY2xlYXJzIHRoZSBoYW5kbGVyIHdoZW4gdGhlIHNpZ25hbCBpcyBkZWxpdmVyZWQuCisgKgorICogU0FfT05FU0hPVCBhbmQgU0FfTk9NQVNLIGFyZSB0aGUgaGlzdG9yaWNhbCBMaW51eCBuYW1lcyBmb3IgdGhlIFNpbmdsZQorICogVW5peCBuYW1lcyBSRVNFVEhBTkQgYW5kIE5PREVGRVIgcmVzcGVjdGl2ZWx5LgorICovCisjZGVmaW5lIFNBX05PQ0xEU1RPUAkweDAwMDAwMDAxCisjZGVmaW5lIFNBX05PQ0xEV0FJVAkweDAwMDAwMDAyIC8qIG5vdCBzdXBwb3J0ZWQgeWV0ICovCisjZGVmaW5lIFNBX1NJR0lORk8JMHgwMDAwMDAwNAorI2RlZmluZSBTQV9USElSVFlUV08JMHgwMjAwMDAwMAorI2RlZmluZSBTQV9SRVNUT1JFUgkweDA0MDAwMDAwCisjZGVmaW5lIFNBX09OU1RBQ0sJMHgwODAwMDAwMAorI2RlZmluZSBTQV9SRVNUQVJUCTB4MTAwMDAwMDAKKyNkZWZpbmUgU0FfTk9ERUZFUgkweDQwMDAwMDAwCisjZGVmaW5lIFNBX1JFU0VUSEFORAkweDgwMDAwMDAwCisKKyNkZWZpbmUgU0FfTk9NQVNLCVNBX05PREVGRVIKKyNkZWZpbmUgU0FfT05FU0hPVAlTQV9SRVNFVEhBTkQKKyNkZWZpbmUgU0FfSU5URVJSVVBUCTB4MjAwMDAwMDAgLyogZHVtbXkgLS0gaWdub3JlZCAqLworCisKKy8qIAorICogc2lnYWx0c3RhY2sgY29udHJvbHMKKyAqLworI2RlZmluZSBTU19PTlNUQUNLCTEKKyNkZWZpbmUgU1NfRElTQUJMRQkyCisKKyNkZWZpbmUgTUlOU0lHU1RLU1oJMjA0OAorI2RlZmluZSBTSUdTVEtTWgk4MTkyCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKy8qCisgKiBUaGVzZSB2YWx1ZXMgb2Ygc2FfZmxhZ3MgYXJlIHVzZWQgb25seSBieSB0aGUga2VybmVsIGFzIHBhcnQgb2YgdGhlCisgKiBpcnEgaGFuZGxpbmcgcm91dGluZXMuCisgKgorICogU0FfSU5URVJSVVBUIGlzIGFsc28gdXNlZCBieSB0aGUgaXJxIGhhbmRsaW5nIHJvdXRpbmVzLgorICogU0FfU0hJUlEgaXMgZm9yIHNoYXJlZCBpbnRlcnJ1cHQgc3VwcG9ydCBvbiBQQ0kgYW5kIEVJU0EuCisgKi8KKyNkZWZpbmUgU0FfUFJPQkUJCTB4ODAwMDAwMDAKKyNkZWZpbmUgU0FfU0FNUExFX1JBTkRPTQkweDEwMDAwMDAwCisjZGVmaW5lIFNBX0lSUU5PTUFTSwkJMHgwODAwMDAwMAorI2RlZmluZSBTQV9TSElSUQkJMHgwNDAwMDAwMAorI2VuZGlmCisKKyNkZWZpbmUgU0lHX0JMT0NLICAgICAgICAgIDAJLyogZm9yIGJsb2NraW5nIHNpZ25hbHMgKi8KKyNkZWZpbmUgU0lHX1VOQkxPQ0sgICAgICAgIDEJLyogZm9yIHVuYmxvY2tpbmcgc2lnbmFscyAqLworI2RlZmluZSBTSUdfU0VUTUFTSyAgICAgICAgMgkvKiBmb3Igc2V0dGluZyB0aGUgc2lnbmFsIG1hc2sgKi8KKworLyogVHlwZSBvZiBhIHNpZ25hbCBoYW5kbGVyLiAgKi8KK3R5cGVkZWYgdm9pZCAoKl9fc2lnaGFuZGxlcl90KShpbnQpOworCisjZGVmaW5lIFNJR19ERkwJKChfX3NpZ2hhbmRsZXJfdCkwKQkvKiBkZWZhdWx0IHNpZ25hbCBoYW5kbGluZyAqLworI2RlZmluZSBTSUdfSUdOCSgoX19zaWdoYW5kbGVyX3QpMSkJLyogaWdub3JlIHNpZ25hbCAqLworI2RlZmluZSBTSUdfRVJSCSgoX19zaWdoYW5kbGVyX3QpLTEpCS8qIGVycm9yIHJldHVybiBmcm9tIHNpZ25hbCAqLworCisjaWZkZWYgX19LRVJORUxfXworc3RydWN0IG9sZF9zaWdhY3Rpb24geworCV9fc2lnaGFuZGxlcl90IHNhX2hhbmRsZXI7CisJb2xkX3NpZ3NldF90IHNhX21hc2s7CisJdW5zaWduZWQgbG9uZyBzYV9mbGFnczsKKwl2b2lkICgqc2FfcmVzdG9yZXIpKHZvaWQpOworfTsKKworc3RydWN0IHNpZ2FjdGlvbiB7CisJX19zaWdoYW5kbGVyX3Qgc2FfaGFuZGxlcjsKKwl1bnNpZ25lZCBsb25nIHNhX2ZsYWdzOworCXZvaWQgKCpzYV9yZXN0b3Jlcikodm9pZCk7CisJc2lnc2V0X3Qgc2FfbWFzazsJCS8qIG1hc2sgbGFzdCBmb3IgZXh0ZW5zaWJpbGl0eSAqLworfTsKKworc3RydWN0IGtfc2lnYWN0aW9uIHsKKwlzdHJ1Y3Qgc2lnYWN0aW9uIHNhOworfTsKKworI2Vsc2UKKy8qIEhlcmUgd2UgbXVzdCBjYXRlciB0byBsaWJjcyB0aGF0IHBva2UgYWJvdXQgaW4ga2VybmVsIGhlYWRlcnMuICAqLworCitzdHJ1Y3Qgc2lnYWN0aW9uIHsKKwl1bmlvbiB7CisJICBfX3NpZ2hhbmRsZXJfdCBfc2FfaGFuZGxlcjsKKwkgIHZvaWQgKCpfc2Ffc2lnYWN0aW9uKShpbnQsIHN0cnVjdCBzaWdpbmZvICosIHZvaWQgKik7CisJfSBfdTsKKwlzaWdzZXRfdCBzYV9tYXNrOworCXVuc2lnbmVkIGxvbmcgc2FfZmxhZ3M7CisJdm9pZCAoKnNhX3Jlc3RvcmVyKSh2b2lkKTsKK307CisKKyNkZWZpbmUgc2FfaGFuZGxlcglfdS5fc2FfaGFuZGxlcgorI2RlZmluZSBzYV9zaWdhY3Rpb24JX3UuX3NhX3NpZ2FjdGlvbgorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCit0eXBlZGVmIHN0cnVjdCBzaWdhbHRzdGFjayB7CisJdm9pZCAqc3Nfc3A7CisJaW50IHNzX2ZsYWdzOworCXNpemVfdCBzc19zaXplOworfSBzdGFja190OworCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGFzbS9zaWdjb250ZXh0Lmg+CisKKyNkZWZpbmUgc2lnbWFzayhzaWcpCSgxVUwgPDwgKChzaWcpIC0gMSkpCisvL0ZJWE1FISEhCisvLyNkZWZpbmUgSEFWRV9BUkNIX0dFVF9TSUdOQUxfVE9fREVMSVZFUgorCisjZW5kaWYKKworCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGFzbS9zaWdjb250ZXh0Lmg+CisjZGVmaW5lIHB0cmFjZV9zaWduYWxfZGVsaXZlcihyZWdzLCBjb29raWUpIGRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtMjYvc2l6ZXMuaCBiL2luY2x1ZGUvYXNtLWFybTI2L3NpemVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhkOTJjYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybTI2L3NpemVzLmgKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworLyogRE8gTk9UIEVESVQhISAtIHRoaXMgZmlsZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZAorICogICAgICAgICAgICAgICAgIGZyb20gLnMgZmlsZSBieSBhd2sgLWYgczJoLmF3aworICovCisvKiAgU2l6ZSBkZWZpbnRpb25zCisgKiAgQ29weXJpZ2h0IChDKSBBUk0gTGltaXRlZCAxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICovCisKKyNpZm5kZWYgX19zaXplc19oCisjZGVmaW5lIF9fc2l6ZXNfaCAgICAgICAgICAgICAgICAgICAgICAgMQorCisvKiBoYW5keSBzaXplcyAqLworI2RlZmluZSBTWl8xSyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgU1pfNEsgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIFNaXzhLICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBTWl8xNksgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgU1pfNjRLICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIFNaXzEyOEsgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBTWl8yNTZLICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgU1pfNTEySyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwCisKKyNkZWZpbmUgU1pfMU0gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIFNaXzJNICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMAorI2RlZmluZSBTWl80TSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgU1pfOE0gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIFNaXzE2TSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBTWl8zMk0gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgU1pfNjRNICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwCisjZGVmaW5lIFNaXzEyOE0gICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwMDAwMAorI2RlZmluZSBTWl8yNTZNICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgU1pfNTEyTSAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisKKyNkZWZpbmUgU1pfMUcgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIFNaXzJHICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorCisjZW5kaWYKKworLyogICAgICAgICBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybTI2L3NtcC5oIGIvaW5jbHVkZS9hc20tYXJtMjYvc21wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNhNzcxNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybTI2L3NtcC5oCkBAIC0wLDAgKzEsMTAgQEAKKyNpZm5kZWYgX19BU01fU01QX0gKKyNkZWZpbmUgX19BU01fU01QX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjaWZkZWYgQ09ORklHX1NNUAorI2Vycm9yIFNNUCBub3Qgc3VwcG9ydGVkCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi9zb2NrZXQuaCBiL2luY2x1ZGUvYXNtLWFybTI2L3NvY2tldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2ZDIwNTgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0yNi9zb2NrZXQuaApAQCAtMCwwICsxLDUwIEBACisjaWZuZGVmIF9BU01BUk1fU09DS0VUX0gKKyNkZWZpbmUgX0FTTUFSTV9TT0NLRVRfSAorCisjaW5jbHVkZSA8YXNtL3NvY2tpb3MuaD4KKworLyogRm9yIHNldHNvY2tvcHQoMikgKi8KKyNkZWZpbmUgU09MX1NPQ0tFVAkxCisKKyNkZWZpbmUgU09fREVCVUcJMQorI2RlZmluZSBTT19SRVVTRUFERFIJMgorI2RlZmluZSBTT19UWVBFCQkzCisjZGVmaW5lIFNPX0VSUk9SCTQKKyNkZWZpbmUgU09fRE9OVFJPVVRFCTUKKyNkZWZpbmUgU09fQlJPQURDQVNUCTYKKyNkZWZpbmUgU09fU05EQlVGCTcKKyNkZWZpbmUgU09fUkNWQlVGCTgKKyNkZWZpbmUgU09fS0VFUEFMSVZFCTkKKyNkZWZpbmUgU09fT09CSU5MSU5FCTEwCisjZGVmaW5lIFNPX05PX0NIRUNLCTExCisjZGVmaW5lIFNPX1BSSU9SSVRZCTEyCisjZGVmaW5lIFNPX0xJTkdFUgkxMworI2RlZmluZSBTT19CU0RDT01QQVQJMTQKKy8qIFRvIGFkZCA6I2RlZmluZSBTT19SRVVTRVBPUlQgMTUgKi8KKyNkZWZpbmUgU09fUEFTU0NSRUQJMTYKKyNkZWZpbmUgU09fUEVFUkNSRUQJMTcKKyNkZWZpbmUgU09fUkNWTE9XQVQJMTgKKyNkZWZpbmUgU09fU05ETE9XQVQJMTkKKyNkZWZpbmUgU09fUkNWVElNRU8JMjAKKyNkZWZpbmUgU09fU05EVElNRU8JMjEKKworLyogU2VjdXJpdHkgbGV2ZWxzIC0gYXMgcGVyIE5STCBJUHY2IC0gZG9uJ3QgYWN0dWFsbHkgZG8gYW55dGhpbmcgKi8KKyNkZWZpbmUgU09fU0VDVVJJVFlfQVVUSEVOVElDQVRJT04JCTIyCisjZGVmaW5lIFNPX1NFQ1VSSVRZX0VOQ1JZUFRJT05fVFJBTlNQT1JUCTIzCisjZGVmaW5lIFNPX1NFQ1VSSVRZX0VOQ1JZUFRJT05fTkVUV09SSwkJMjQKKworI2RlZmluZSBTT19CSU5EVE9ERVZJQ0UgMjUKKworLyogU29ja2V0IGZpbHRlcmluZyAqLworI2RlZmluZSBTT19BVFRBQ0hfRklMVEVSICAgICAgICAyNgorI2RlZmluZSBTT19ERVRBQ0hfRklMVEVSICAgICAgICAyNworCisjZGVmaW5lIFNPX1BFRVJOQU1FICAgICAgICAgICAgIDI4CisjZGVmaW5lIFNPX1RJTUVTVEFNUAkJMjkKKyNkZWZpbmUgU0NNX1RJTUVTVEFNUAkJU09fVElNRVNUQU1QCisKKyNkZWZpbmUgU09fQUNDRVBUQ09OTgkJMzAKKworI2RlZmluZSBTT19QRUVSU0VDCQkzMQorCisjZW5kaWYgLyogX0FTTV9TT0NLRVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtMjYvc29ja2lvcy5oIGIvaW5jbHVkZS9hc20tYXJtMjYvc29ja2lvcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3YzM0MDgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0yNi9zb2NraW9zLmgKQEAgLTAsMCArMSwxMiBAQAorI2lmbmRlZiBfX0FSQ0hfQVJNX1NPQ0tJT1NfSAorI2RlZmluZSBfX0FSQ0hfQVJNX1NPQ0tJT1NfSAorCisvKiBTb2NrZXQtbGV2ZWwgSS9PIGNvbnRyb2wgY2FsbHMuICovCisjZGVmaW5lIEZJT1NFVE9XTiAJMHg4OTAxCisjZGVmaW5lIFNJT0NTUEdSUAkweDg5MDIKKyNkZWZpbmUgRklPR0VUT1dOCTB4ODkwMworI2RlZmluZSBTSU9DR1BHUlAJMHg4OTA0CisjZGVmaW5lIFNJT0NBVE1BUksJMHg4OTA1CisjZGVmaW5lIFNJT0NHU1RBTVAJMHg4OTA2CQkvKiBHZXQgc3RhbXAgKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi9zcGlubG9jay5oIGIvaW5jbHVkZS9hc20tYXJtMjYvc3BpbmxvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTJlODFkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtMjYvc3BpbmxvY2suaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19BU01fU1BJTkxPQ0tfSAorI2RlZmluZSBfX0FTTV9TUElOTE9DS19ICisKKyNlcnJvciBBUk0gYXJjaGl0ZWN0dXJlIGRvZXMgbm90IHN1cHBvcnQgU01QIHNwaW4gbG9ja3MKKworI2VuZGlmIC8qIF9fQVNNX1NQSU5MT0NLX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybTI2L3N0YXQuaCBiL2luY2x1ZGUvYXNtLWFybTI2L3N0YXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGFiYzRmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtMjYvc3RhdC5oCkBAIC0wLDAgKzEsNzcgQEAKKyNpZm5kZWYgX0FTTUFSTV9TVEFUX0gKKyNkZWZpbmUgX0FTTUFSTV9TVEFUX0gKKworc3RydWN0IF9fb2xkX2tlcm5lbF9zdGF0IHsKKwl1bnNpZ25lZCBzaG9ydCBzdF9kZXY7CisJdW5zaWduZWQgc2hvcnQgc3RfaW5vOworCXVuc2lnbmVkIHNob3J0IHN0X21vZGU7CisJdW5zaWduZWQgc2hvcnQgc3Rfbmxpbms7CisJdW5zaWduZWQgc2hvcnQgc3RfdWlkOworCXVuc2lnbmVkIHNob3J0IHN0X2dpZDsKKwl1bnNpZ25lZCBzaG9ydCBzdF9yZGV2OworCXVuc2lnbmVkIGxvbmcgIHN0X3NpemU7CisJdW5zaWduZWQgbG9uZyAgc3RfYXRpbWU7CisJdW5zaWduZWQgbG9uZyAgc3RfbXRpbWU7CisJdW5zaWduZWQgbG9uZyAgc3RfY3RpbWU7Cit9OworCitzdHJ1Y3Qgc3RhdCB7CisJdW5zaWduZWQgc2hvcnQgc3RfZGV2OworCXVuc2lnbmVkIHNob3J0IF9fcGFkMTsKKwl1bnNpZ25lZCBsb25nIHN0X2lubzsKKwl1bnNpZ25lZCBzaG9ydCBzdF9tb2RlOworCXVuc2lnbmVkIHNob3J0IHN0X25saW5rOworCXVuc2lnbmVkIHNob3J0IHN0X3VpZDsKKwl1bnNpZ25lZCBzaG9ydCBzdF9naWQ7CisJdW5zaWduZWQgc2hvcnQgc3RfcmRldjsKKwl1bnNpZ25lZCBzaG9ydCBfX3BhZDI7CisJdW5zaWduZWQgbG9uZyAgc3Rfc2l6ZTsKKwl1bnNpZ25lZCBsb25nICBzdF9ibGtzaXplOworCXVuc2lnbmVkIGxvbmcgIHN0X2Jsb2NrczsKKwl1bnNpZ25lZCBsb25nICBzdF9hdGltZTsKKwl1bnNpZ25lZCBsb25nICBzdF9hdGltZV9uc2VjOworCXVuc2lnbmVkIGxvbmcgIHN0X210aW1lOworCXVuc2lnbmVkIGxvbmcgIHN0X210aW1lX25zZWM7CisJdW5zaWduZWQgbG9uZyAgc3RfY3RpbWU7CisJdW5zaWduZWQgbG9uZyAgc3RfY3RpbWVfbnNlYzsKKwl1bnNpZ25lZCBsb25nICBfX3VudXNlZDQ7CisJdW5zaWduZWQgbG9uZyAgX191bnVzZWQ1OworfTsKKworLyogVGhpcyBtYXRjaGVzIHN0cnVjdCBzdGF0NjQgaW4gZ2xpYmMyLjEsIGhlbmNlIHRoZSBhYnNvbHV0ZWx5CisgKiBpbnNhbmUgYW1vdW50cyBvZiBwYWRkaW5nIGFyb3VuZCBkZXZfdCdzLgorICovCitzdHJ1Y3Qgc3RhdDY0IHsKKwl1bnNpZ25lZCBsb25nIGxvbmcgIHN0X2RldjsKKwl1bnNpZ25lZCBjaGFyICAgX19wYWQwWzRdOworCisjZGVmaW5lIFNUQVQ2NF9IQVNfQlJPS0VOX1NUX0lOTwkxCisJdW5zaWduZWQgbG9uZwlfX3N0X2lubzsKKwl1bnNpZ25lZCBpbnQJc3RfbW9kZTsKKwl1bnNpZ25lZCBpbnQJc3Rfbmxpbms7CisKKwl1bnNpZ25lZCBsb25nCXN0X3VpZDsKKwl1bnNpZ25lZCBsb25nCXN0X2dpZDsKKworCXVuc2lnbmVkIGxvbmcgbG9uZyAgc3RfcmRldjsKKwl1bnNpZ25lZCBjaGFyICAgX19wYWQzWzRdOworCisJbG9uZyBsb25nCXN0X3NpemU7CisJdW5zaWduZWQgbG9uZwlzdF9ibGtzaXplOworCisJdW5zaWduZWQgbG9uZyAgIHN0X2Jsb2NrczsJLyogTnVtYmVyIDUxMi1ieXRlIGJsb2NrcyBhbGxvY2F0ZWQuICovCisJdW5zaWduZWQgbG9uZyAgIF9fcGFkNDsJCS8qIEZ1dHVyZSBwb3NzaWJsZSBzdF9ibG9ja3MgaGkgYml0cyAqLworCisJdW5zaWduZWQgbG9uZwlzdF9hdGltZTsKKwl1bnNpZ25lZCBsb25nICAgc3RfYXRpbWVfbnNlYzsKKworCXVuc2lnbmVkIGxvbmcJc3RfbXRpbWU7CisJdW5zaWduZWQgbG9uZyAgIHN0X210aW1lX25zZWM7CisKKwl1bnNpZ25lZCBsb25nCXN0X2N0aW1lOworCXVuc2lnbmVkIGxvbmcgICBzdF9jdGltZV9uc2VjOworCisJdW5zaWduZWQgbG9uZyBsb25nCXN0X2lubzsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtMjYvc3RhdGZzLmggYi9pbmNsdWRlL2FzbS1hcm0yNi9zdGF0ZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzZkYmM4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtMjYvc3RhdGZzLmgKQEAgLTAsMCArMSw4IEBACisjaWZuZGVmIF9BU01BUk1fU1RBVEZTX0gKKyNkZWZpbmUgX0FTTUFSTV9TVEFURlNfSAorCisvL0ZJWE1FIC0gdGhpcyBtYXkgbm90IGJlIGFwcHJvcHJpYXRlIGZvciBhcm0yNi4gY2hlY2sgaXQgb3V0LgorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc3RhdGZzLmg+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtMjYvc3RyaW5nLmggYi9pbmNsdWRlL2FzbS1hcm0yNi9zdHJpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYThhYjE2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtMjYvc3RyaW5nLmgKQEAgLTAsMCArMSw0MyBAQAorI2lmbmRlZiBfX0FTTV9BUk1fU1RSSU5HX0gKKyNkZWZpbmUgX19BU01fQVJNX1NUUklOR19ICisKKy8qCisgKiBXZSBkb24ndCBkbyBpbmxpbmUgc3RyaW5nIGZ1bmN0aW9ucywgc2luY2UgdGhlCisgKiBvcHRpbWlzZWQgaW5saW5lIGFzbSB2ZXJzaW9ucyBhcmUgbm90IHNtYWxsLgorICovCisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSUkNIUgorZXh0ZXJuIGNoYXIgKiBzdHJyY2hyKGNvbnN0IGNoYXIgKiBzLCBpbnQgYyk7CisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSQ0hSCitleHRlcm4gY2hhciAqIHN0cmNocihjb25zdCBjaGFyICogcywgaW50IGMpOworCisjZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNQWQorZXh0ZXJuIHZvaWQgKiBtZW1jcHkodm9pZCAqLCBjb25zdCB2b2lkICosIF9fa2VybmVsX3NpemVfdCk7CisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNTU9WRQorZXh0ZXJuIHZvaWQgKiBtZW1tb3ZlKHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBfX2tlcm5lbF9zaXplX3QpOworCisjZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNIUgorZXh0ZXJuIHZvaWQgKiBtZW1jaHIoY29uc3Qgdm9pZCAqLCBpbnQsIF9fa2VybmVsX3NpemVfdCk7CisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNWkVSTworI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1TRVQKK2V4dGVybiB2b2lkICogbWVtc2V0KHZvaWQgKiwgaW50LCBfX2tlcm5lbF9zaXplX3QpOworCitleHRlcm4gdm9pZCBfX21lbXplcm8odm9pZCAqcHRyLCBfX2tlcm5lbF9zaXplX3Qgbik7CisKKyNkZWZpbmUgbWVtc2V0KHAsdixuKQkJCQkJCQlcCisJKHsJCQkJCQkJCVwKKwkJaWYgKChuKSAhPSAwKSB7CQkJCQkJXAorCQkJaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKCh2KSkgJiYgKHYpID09IDApCVwKKwkJCQlfX21lbXplcm8oKHApLChuKSk7CQkJXAorCQkJZWxzZQkJCQkJCVwKKwkJCQltZW1zZXQoKHApLCh2KSwobikpOwkJCVwKKwkJfQkJCQkJCQlcCisJCShwKTsJCQkJCQkJXAorCX0pCisKKyNkZWZpbmUgbWVtemVybyhwLG4pICh7IGlmICgobikgIT0gMCkgX19tZW16ZXJvKChwKSwobikpOyAocCk7IH0pCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtMjYvc3VzcGVuZC5oIGIvaW5jbHVkZS9hc20tYXJtMjYvc3VzcGVuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlNGMxY2MKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0yNi9zdXNwZW5kLmgKQEAgLTAsMCArMSw0IEBACisjaWZkZWYgX0FTTUFSTV9TVVNQRU5EX0gKKyNkZWZpbmUgX0FTTUFSTV9TVVNQRU5EX0gKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi9zeXNpcnEuaCBiL2luY2x1ZGUvYXNtLWFybTI2L3N5c2lycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhZDI1MGMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0yNi9zeXNpcnEuaApAQCAtMCwwICsxLDYxIEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWFyYy9pcnFzLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk2IFJ1c3NlbGwgS2luZywgRGF2ZSBHaWxiZXJ0CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgTW9kaWZpY2F0aW9uczoKKyAqICAgMDQtMDQtMTk5OCBQSkIgICAgIE1lcmdlZCBhcmMgYW5kIGE1ayB2ZXJzaW9ucworICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfQTVLKQorI2RlZmluZSBJUlFfUFJJTlRFUiAgICAgICAgICAgICAwCisjZGVmaW5lIElSUV9CQVRMT1cgICAgICAgICAgICAgIDEKKyNkZWZpbmUgSVJRX0ZMT1BQWUlOREVYICAgICAgICAgMgorI2RlZmluZSBJUlFfRkxPUFBZRElTSyAgICAgICAgICAxMgorI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9BUkMpCisjZGVmaW5lIElSUV9QUklOVEVSQlVTWSAgICAgICAgIDAKKyNkZWZpbmUgSVJRX1NFUklBTFJJTkcgICAgICAgICAgMQorI2RlZmluZSBJUlFfUFJJTlRFUkFDSyAgICAgICAgICAyCisjZGVmaW5lIElSUV9GTE9QUFlDSEFOR0VEICAgICAgIDEyCisjZW5kaWYKKworI2RlZmluZSBJUlFfVlNZTkNQVUxTRSAgICAgICAgICAzCisjZGVmaW5lIElSUV9QT1dFUk9OICAgICAgICAgICAgIDQKKyNkZWZpbmUgSVJRX1RJTUVSMCAgICAgICAgICAgICAgNQorI2RlZmluZSBJUlFfVElNRVIxICAgICAgICAgICAgICA2CisjZGVmaW5lIElSUV9JTU1FRElBVEUgICAgICAgICAgIDcKKyNkZWZpbmUgSVJRX0VYUENBUkRGSVEgICAgICAgICAgOAorI2RlZmluZSBJUlFfU09VTkRDSEFOR0UgICAgICAgICA5CisjZGVmaW5lIElSUV9TRVJJQUxQT1JUICAgICAgICAgIDEwCisjZGVmaW5lIElSUV9IQVJERElTSyAgICAgICAgICAgIDExCisjZGVmaW5lIElSUV9FWFBBTlNJT05DQVJEICAgICAgIDEzCisjZGVmaW5lIElSUV9LRVlCT0FSRFRYICAgICAgICAgIDE0CisjZGVmaW5lIElSUV9LRVlCT0FSRFJYICAgICAgICAgIDE1CisKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX0E1SykKKyNkZWZpbmUgRklRX1NFUklBTFBPUlQgICAgICAgICAgNAorI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9BUkMpCisjZGVmaW5lIEZJUV9GTE9QUFlJUlEgICAgICAgICAgIDEKKyNkZWZpbmUgRklRX0ZEMTc3MiAgICAgICAgICAgICAgRklRX0ZMT1BQWUlSUQorI2VuZGlmCisKKyNkZWZpbmUgRklRX0ZMT1BQWURBVEEgICAgICAgICAgMAorI2RlZmluZSBGSVFfRUNPTkVUICAgICAgICAgICAgICAyCisjZGVmaW5lIEZJUV9FWFBBTlNJT05DQVJEICAgICAgIDYKKyNkZWZpbmUgRklRX0ZPUkNFICAgICAgICAgICAgICAgNworCisjZGVmaW5lIElSUV9USU1FUiAgICAgICAgICAgICAgIElSUV9USU1FUjAKKworLyoKKyAqIFRoaXMgaXMgdGhlIG9mZnNldCBvZiB0aGUgRklRICJJUlEiIG51bWJlcnMKKyAqLworI2RlZmluZSBGSVFfU1RBUlQgICAgICAgICAgICAgICA2NAorCisjZGVmaW5lIGlycV9jYW5ub25pY2FsaXplKGkpICAgIChpKQorCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLWFybTI2L3N5c3RlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyM2ZhYzEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0yNi9zeXN0ZW0uaApAQCAtMCwwICsxLDI1MiBAQAorI2lmbmRlZiBfX0FTTV9BUk1fU1lTVEVNX0gKKyNkZWZpbmUgX19BU01fQVJNX1NZU1RFTV9ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworLyoKKyAqIFRoaXMgaXMgdXNlZCB0byBlbnN1cmUgdGhlIGNvbXBpbGVyIGRpZCBhY3R1YWxseSBhbGxvY2F0ZSB0aGUgcmVnaXN0ZXIgd2UKKyAqIGFza2VkIGl0IGZvciBzb21lIGlubGluZSBhc3NlbWJseSBzZXF1ZW5jZXMuICBBcHBhcmVudGx5IHdlIGNhbid0IHRydXN0CisgKiB0aGUgY29tcGlsZXIgZnJvbSBvbmUgdmVyc2lvbiB0byBhbm90aGVyIHNvIGEgYml0IG9mIHBhcmFub2lhIHdvbid0IGh1cnQuCisgKiBUaGlzIHN0cmluZyBpcyBtZWFudCB0byBiZSBjb25jYXRlbmF0ZWQgd2l0aCB0aGUgaW5saW5lIGFzbSBzdHJpbmcgYW5kCisgKiB3aWxsIGNhdXNlIGNvbXBpbGF0aW9uIHRvIHN0b3Agb24gbWlzbWF0Y2guIChGcm9tIEFSTTMyIC0gbWF5IGNvbWUgaW4gaGFuZHkpCisgKi8KKyNkZWZpbmUgX19hc21lcSh4LCB5KSAgIi5pZm5jICIgeCAiLCIgeSAiIDsgLmVyciA7IC5lbmRpZlxuXHQiCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisKK3N0cnVjdCB0aHJlYWRfaW5mbzsKK3N0cnVjdCB0YXNrX3N0cnVjdDsKKworI2lmIDAKKy8qIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzeXN0ZW0gd2UncmUgcnVubmluZyBvbiAqLworZXh0ZXJuIHVuc2lnbmVkIGludCBzeXN0ZW1fcmV2OworZXh0ZXJuIHVuc2lnbmVkIGludCBzeXN0ZW1fc2VyaWFsX2xvdzsKK2V4dGVybiB1bnNpZ25lZCBpbnQgc3lzdGVtX3NlcmlhbF9oaWdoOworZXh0ZXJuIHVuc2lnbmVkIGludCBtZW1fZmNsa18yMTI4NTsKKworRklYTUUgLSBzb3J0IHRoaXMKKy8qCisgKiBXZSBuZWVkIHRvIHR1cm4gdGhlIGNhY2hlcyBvZmYgYmVmb3JlIGNhbGxpbmcgdGhlIHJlc2V0IHZlY3RvciAtIFJpc2NPUworICogbWVzc2VzIHVwIGlmIHdlIGRvbid0CisgKi8KKyNkZWZpbmUgcHJvY19oYXJkX3Jlc2V0KCkgICAgICAgY3B1X3Byb2NfZmluKCkKKworI2VuZGlmCisKK3N0cnVjdCBwdF9yZWdzOworCit2b2lkIGRpZShjb25zdCBjaGFyICptc2csIHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgZXJyKQorCQlfX2F0dHJpYnV0ZV9fKChub3JldHVybikpOworCit2b2lkIGRpZV9pZl9rZXJuZWwoY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGVycik7CisKK3ZvaWQgaG9va19mYXVsdF9jb2RlKGludCBuciwgaW50ICgqZm4pKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGludCwKKwkJCQkgICAgICAgc3RydWN0IHB0X3JlZ3MgKiksCisJCSAgICAgaW50IHNpZywgY29uc3QgY2hhciAqbmFtZSk7CisKKyNpbmNsdWRlIDxhc20vcHJvYy1mbnMuaD4KKworI2RlZmluZSB4Y2hnKHB0cix4KSBcCisJKChfX3R5cGVvZl9fKCoocHRyKSkpX194Y2hnKCh1bnNpZ25lZCBsb25nKSh4KSwocHRyKSxzaXplb2YoKihwdHIpKSkpCisKKyNkZWZpbmUgdGFzKHB0cikgKHhjaGcoKHB0ciksMSkpCisKK2V4dGVybiBhc21saW5rYWdlIHZvaWQgX19iYWNrdHJhY2Uodm9pZCk7CisKKyNkZWZpbmUgc2V0X2NyKHgpCQkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCVwKKwkibWNyCXAxNSwgMCwgJTAsIGMxLCBjMCwgMAlAIHNldCBDUiIJXAorCTogOiAiciIgKHgpIDogImNjIikKKworI2RlZmluZSBnZXRfY3IoKQkJCQkJXAorCSh7CQkJCQkJXAorCXVuc2lnbmVkIGludCBfX3ZhbDsJCQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQlcCisJIm1yYwlwMTUsIDAsICUwLCBjMSwgYzAsIDAJQCBnZXQgQ1IiCVwKKwk6ICI9ciIgKF9fdmFsKSA6IDogImNjIik7CQkJXAorCV9fdmFsOwkJCQkJCVwKKwl9KQorCitleHRlcm4gdW5zaWduZWQgbG9uZyBjcl9ub19hbGlnbm1lbnQ7CS8qIGRlZmluZWQgaW4gZW50cnktYXJtdi5TICovCitleHRlcm4gdW5zaWduZWQgbG9uZyBjcl9hbGlnbm1lbnQ7CS8qIGRlZmluZWQgaW4gZW50cnktYXJtdi5TICovCisKKyNkZWZpbmUgVURCR19VTkRFRklORUQJKDEgPDwgMCkKKyNkZWZpbmUgVURCR19TWVNDQUxMCSgxIDw8IDEpCisjZGVmaW5lIFVEQkdfQkFEQUJPUlQJKDEgPDwgMikKKyNkZWZpbmUgVURCR19TRUdWCSgxIDw8IDMpCisjZGVmaW5lIFVEQkdfQlVTCSgxIDw8IDQpCisKK2V4dGVybiB1bnNpZ25lZCBpbnQgdXNlcl9kZWJ1ZzsKKworI2RlZmluZSB2ZWN0b3JzX2Jhc2UoKQkoMCkKKworI2RlZmluZSBtYigpIF9fYXNtX18gX192b2xhdGlsZV9fICgiIiA6IDogOiAibWVtb3J5IikKKyNkZWZpbmUgcm1iKCkgbWIoKQorI2RlZmluZSB3bWIoKSBtYigpCisjZGVmaW5lIG5vcCgpIF9fYXNtX18gX192b2xhdGlsZV9fKCJtb3ZcdHIwLHIwXHRAIG5vcFxuXHQiKTsKKworI2RlZmluZSByZWFkX2JhcnJpZXJfZGVwZW5kcygpIGRvIHsgfSB3aGlsZSgwKQorI2RlZmluZSBzZXRfbWIodmFyLCB2YWx1ZSkgIGRvIHsgdmFyID0gdmFsdWU7IG1iKCk7IH0gd2hpbGUgKDApCisjZGVmaW5lIHNldF93bWIodmFyLCB2YWx1ZSkgZG8geyB2YXIgPSB2YWx1ZTsgd21iKCk7IH0gd2hpbGUgKDApCisKKy8qCisgKiBXZSBhc3N1bWUga25vd2xlZGdlIG9mIGhvdworICogc3Bpbl91bmxvY2tfaXJxKCkgYW5kIGZyaWVuZHMgYXJlIGltcGxlbWVudGVkLiAgVGhpcyBhdm9pZHMKKyAqIHVzIG5lZWRsZXNzbHkgZGVjcmVtZW50aW5nIGFuZCBpbmNyZW1lbnRpbmcgdGhlIHByZWVtcHQgY291bnQuCisgKi8KKyNkZWZpbmUgcHJlcGFyZV9hcmNoX3N3aXRjaChycSxuZXh0KQlsb2NhbF9pcnFfZW5hYmxlKCkKKyNkZWZpbmUgZmluaXNoX2FyY2hfc3dpdGNoKHJxLHByZXYpCXNwaW5fdW5sb2NrKCYocnEpLT5sb2NrKQorI2RlZmluZSB0YXNrX3J1bm5pbmcocnEscCkJCSgocnEpLT5jdXJyID09IChwKSkKKworLyoKKyAqIHN3aXRjaF90byhwcmV2LCBuZXh0KSBzaG91bGQgc3dpdGNoIGZyb20gdGFzayBgcHJldicgdG8gYG5leHQnCisgKiBgcHJldicgd2lsbCBuZXZlciBiZSB0aGUgc2FtZSBhcyBgbmV4dCcuICBzY2hlZHVsZSgpIGl0c2VsZgorICogY29udGFpbnMgdGhlIG1lbW9yeSBiYXJyaWVyIHRvIHRlbGwgR0NDIG5vdCB0byBjYWNoZSBgY3VycmVudCcuCisgKi8KK2V4dGVybiBzdHJ1Y3QgdGFza19zdHJ1Y3QgKl9fc3dpdGNoX3RvKHN0cnVjdCB0YXNrX3N0cnVjdCAqLCBzdHJ1Y3QgdGhyZWFkX2luZm8gKiwgc3RydWN0IHRocmVhZF9pbmZvICopOworCisjZGVmaW5lIHN3aXRjaF90byhwcmV2LG5leHQsbGFzdCkJCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJbGFzdCA9IF9fc3dpdGNoX3RvKHByZXYscHJldi0+dGhyZWFkX2luZm8sbmV4dC0+dGhyZWFkX2luZm8pOwlcCit9IHdoaWxlICgwKQorCisvKgorICogU2F2ZSB0aGUgY3VycmVudCBpbnRlcnJ1cHQgZW5hYmxlIHN0YXRlICYgZGlzYWJsZSBJUlFzCisgKi8KKyNkZWZpbmUgbG9jYWxfaXJxX3NhdmUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgdW5zaWduZWQgbG9uZyB0ZW1wOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyggICAgICAgICAgICAgICAgICAgICAgICAgXAorIiAgICAgICBtb3YgICAgICUwLCBwYyAgICAgICAgICBAIHNhdmVfZmxhZ3NfY2xpXG4iICAgICBcCisiICAgICAgIG9yciAgICAgJTEsICUwLCAjMHgwODAwMDAwMFxuIiAgICAgICAgICAgICAgICAgIFwKKyIgICAgICAgYW5kICAgICAlMCwgJTAsICMweDBjMDAwMDAwXG4iICAgICAgICAgICAgICAgICAgXAorIiAgICAgICB0ZXFwICAgICUxLCAjMFxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgOiAiPXIiICh4KSwgIj1yIiAodGVtcCkgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIDogIm1lbW9yeSIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gd2hpbGUgKDApCisKKy8qCisgKiBFbmFibGUgSVJRcyAgKHN0aSkKKyAqLworI2RlZmluZSBsb2NhbF9pcnFfZW5hYmxlKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICB1bnNpZ25lZCBsb25nIHRlbXA7ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyggICAgICAgICAgICAgICAgIFwKKyIgICAgICAgbW92ICAgICAlMCwgcGMgICAgICAgICAgQCBzdGlcbiIgICAgICAgIFwKKyIgICAgICAgYmljICAgICAlMCwgJTAsICMweDA4MDAwMDAwXG4iICAgICAgICAgIFwKKyIgICAgICAgdGVxcCAgICAlMCwgIzBcbiIgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICA6ICI9ciIgKHRlbXApICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICA6ICJtZW1vcnkiKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSB3aGlsZSgwKQorCisvKgorICogRGlzYWJsZSBJUlFzIChjbGkpCisgKi8KKyNkZWZpbmUgbG9jYWxfaXJxX2Rpc2FibGUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgdW5zaWduZWQgbG9uZyB0ZW1wOyAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oICAgICAgICAgICAgICAgICBcCisiICAgICAgIG1vdiAgICAgJTAsIHBjICAgICAgICAgIEAgY2xpXG4iICAgICAgICBcCisiICAgICAgIG9yciAgICAgJTAsICUwLCAjMHgwODAwMDAwMFxuIiAgICAgICAgICBcCisiICAgICAgIHRlcXAgICAgJTAsICMwXG4iICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgOiAiPXIiICh0ZW1wKSAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgOiAibWVtb3J5Iik7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gd2hpbGUoMCkKKworLyogRW5hYmxlIEZJUXMgKHN0ZikgKi8KKworI2RlZmluZSBfX3N0ZigpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB1bnNpZ25lZCBsb25nIHRlbXA7ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyggICAgICAgICAgICAgICAgICAgXAorIiAgICAgICBtb3YgICAgICUwLCBwYyAgICAgICAgICBAIHN0ZlxuIiAgICAgICAgXAorIiAgICAgICBiaWMgICAgICUwLCAlMCwgIzB4MDQwMDAwMDBcbiIgICAgICAgICAgXAorIiAgICAgICB0ZXFwICAgICUwLCAjMFxuIiAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICA6ICI9ciIgKHRlbXApKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUoMCkKKworLyogRGlzYWJsZSBGSVFzICAoY2xmKSAqLworCisjZGVmaW5lIF9fY2xmKCkgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHVuc2lnbmVkIGxvbmcgdGVtcDsgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCAgICAgICAgICAgICAgICAgICBcCisiICAgICAgIG1vdiAgICAgJTAsIHBjICAgICAgICAgIEAgY2xmXG4iICAgICAgICBcCisiICAgICAgIG9yciAgICAgJTAsICUwLCAjMHgwNDAwMDAwMFxuIiAgICAgICAgICBcCisiICAgICAgIHRlcXAgICAgJTAsICMwXG4iICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIDogIj1yIiAodGVtcCkpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSgwKQorCisKKy8qCisgKiBTYXZlIHRoZSBjdXJyZW50IGludGVycnVwdCBlbmFibGUgc3RhdGUuCisgKi8KKyNkZWZpbmUgbG9jYWxfc2F2ZV9mbGFncyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCAgICAgICAgICAgICAgICAgXAorIiAgICAgICBtb3YgICAgICUwLCBwYyAgICAgICAgICBAIHNhdmVfZmxhZ3NcbiIgXAorIiAgICAgICBhbmQgICAgICUwLCAlMCwgIzB4MGMwMDAwMDBcbiIgICAgICAgICAgXAorICAgICAgICAgIDogIj1yIiAoeCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9IHdoaWxlICgwKQorCisKKy8qCisgKiByZXN0b3JlIHNhdmVkIElSUSAmIEZJUSBzdGF0ZQorICovCisjZGVmaW5lIGxvY2FsX2lycV9yZXN0b3JlKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIHVuc2lnbmVkIGxvbmcgdGVtcDsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyIgICAgICAgbW92ICAgICAlMCwgcGMgICAgICAgICAgQCByZXN0b3JlX2ZsYWdzXG4iICAgICAgXAorIiAgICAgICBiaWMgICAgICUwLCAlMCwgIzB4MGMwMDAwMDBcbiIgICAgICAgICAgICAgICAgICBcCisiICAgICAgIG9yciAgICAgJTAsICUwLCAlMVxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyIgICAgICAgdGVxcCAgICAlMCwgIzBcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIDogIj0mciIgKHRlbXApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgOiAiciIgKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICA6ICJtZW1vcnkiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9IHdoaWxlICgwKQorCisKKyNpZmRlZiBDT05GSUdfU01QCisjZXJyb3IgU01QIG5vdCBzdXBwb3J0ZWQKKyNlbmRpZgorCisjZGVmaW5lIHNtcF9tYigpCQliYXJyaWVyKCkKKyNkZWZpbmUgc21wX3JtYigpCQliYXJyaWVyKCkKKyNkZWZpbmUgc21wX3dtYigpCQliYXJyaWVyKCkKKyNkZWZpbmUgc21wX3JlYWRfYmFycmllcl9kZXBlbmRzKCkJCWRvIHsgfSB3aGlsZSgwKQorCisjZGVmaW5lIGNsZigpCQkJX19jbGYoKQorI2RlZmluZSBzdGYoKQkJCV9fc3RmKCkKKworI2RlZmluZSBpcnFzX2Rpc2FibGVkKCkJCQlcCisoewkJCQkJXAorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CQlcCisJbG9jYWxfc2F2ZV9mbGFncyhmbGFncyk7CVwKKwlmbGFncyAmIFBTUl9JX0JJVDsJCVwKK30pCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX3hjaGcodW5zaWduZWQgbG9uZyB4LCB2b2xhdGlsZSB2b2lkICpwdHIsIGludCBzaXplKQoreworICAgICAgICBleHRlcm4gdm9pZCBfX2JhZF94Y2hnKHZvbGF0aWxlIHZvaWQgKiwgaW50KTsKKworICAgICAgICBzd2l0Y2ggKHNpemUpIHsKKyAgICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBjcHVfeGNoZ18xKHgsIHB0cik7CisgICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gY3B1X3hjaGdfNCh4LCBwdHIpOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6IF9fYmFkX3hjaGcocHRyLCBzaXplKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMDsKK30KKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisjZGVmaW5lIGFyY2hfYWxpZ25fc3RhY2soeCkgKHgpCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtMjYvdGVybWJpdHMuaCBiL2luY2x1ZGUvYXNtLWFybTI2L3Rlcm1iaXRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJjNmUxZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybTI2L3Rlcm1iaXRzLmgKQEAgLTAsMCArMSwxNzEgQEAKKyNpZm5kZWYgX19BU01fQVJNX1RFUk1CSVRTX0gKKyNkZWZpbmUgX19BU01fQVJNX1RFUk1CSVRTX0gKKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyCWNjX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludAlzcGVlZF90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQJdGNmbGFnX3Q7CisKKyNkZWZpbmUgTkNDUyAxOQorc3RydWN0IHRlcm1pb3MgeworCXRjZmxhZ190IGNfaWZsYWc7CQkvKiBpbnB1dCBtb2RlIGZsYWdzICovCisJdGNmbGFnX3QgY19vZmxhZzsJCS8qIG91dHB1dCBtb2RlIGZsYWdzICovCisJdGNmbGFnX3QgY19jZmxhZzsJCS8qIGNvbnRyb2wgbW9kZSBmbGFncyAqLworCXRjZmxhZ190IGNfbGZsYWc7CQkvKiBsb2NhbCBtb2RlIGZsYWdzICovCisJY2NfdCBjX2xpbmU7CQkJLyogbGluZSBkaXNjaXBsaW5lICovCisJY2NfdCBjX2NjW05DQ1NdOwkJLyogY29udHJvbCBjaGFyYWN0ZXJzICovCit9OworCisvKiBjX2NjIGNoYXJhY3RlcnMgKi8KKyNkZWZpbmUgVklOVFIgMAorI2RlZmluZSBWUVVJVCAxCisjZGVmaW5lIFZFUkFTRSAyCisjZGVmaW5lIFZLSUxMIDMKKyNkZWZpbmUgVkVPRiA0CisjZGVmaW5lIFZUSU1FIDUKKyNkZWZpbmUgVk1JTiA2CisjZGVmaW5lIFZTV1RDIDcKKyNkZWZpbmUgVlNUQVJUIDgKKyNkZWZpbmUgVlNUT1AgOQorI2RlZmluZSBWU1VTUCAxMAorI2RlZmluZSBWRU9MIDExCisjZGVmaW5lIFZSRVBSSU5UIDEyCisjZGVmaW5lIFZESVNDQVJEIDEzCisjZGVmaW5lIFZXRVJBU0UgMTQKKyNkZWZpbmUgVkxORVhUIDE1CisjZGVmaW5lIFZFT0wyIDE2CisKKy8qIGNfaWZsYWcgYml0cyAqLworI2RlZmluZSBJR05CUksJMDAwMDAwMQorI2RlZmluZSBCUktJTlQJMDAwMDAwMgorI2RlZmluZSBJR05QQVIJMDAwMDAwNAorI2RlZmluZSBQQVJNUksJMDAwMDAxMAorI2RlZmluZSBJTlBDSwkwMDAwMDIwCisjZGVmaW5lIElTVFJJUAkwMDAwMDQwCisjZGVmaW5lIElOTENSCTAwMDAxMDAKKyNkZWZpbmUgSUdOQ1IJMDAwMDIwMAorI2RlZmluZSBJQ1JOTAkwMDAwNDAwCisjZGVmaW5lIElVQ0xDCTAwMDEwMDAKKyNkZWZpbmUgSVhPTgkwMDAyMDAwCisjZGVmaW5lIElYQU5ZCTAwMDQwMDAKKyNkZWZpbmUgSVhPRkYJMDAxMDAwMAorI2RlZmluZSBJTUFYQkVMCTAwMjAwMDAKKyNkZWZpbmUgSVVURjgJMDA0MDAwMAorCisvKiBjX29mbGFnIGJpdHMgKi8KKyNkZWZpbmUgT1BPU1QJMDAwMDAwMQorI2RlZmluZSBPTENVQwkwMDAwMDAyCisjZGVmaW5lIE9OTENSCTAwMDAwMDQKKyNkZWZpbmUgT0NSTkwJMDAwMDAxMAorI2RlZmluZSBPTk9DUgkwMDAwMDIwCisjZGVmaW5lIE9OTFJFVAkwMDAwMDQwCisjZGVmaW5lIE9GSUxMCTAwMDAxMDAKKyNkZWZpbmUgT0ZERUwJMDAwMDIwMAorI2RlZmluZSBOTERMWQkwMDAwNDAwCisjZGVmaW5lICAgTkwwCTAwMDAwMDAKKyNkZWZpbmUgICBOTDEJMDAwMDQwMAorI2RlZmluZSBDUkRMWQkwMDAzMDAwCisjZGVmaW5lICAgQ1IwCTAwMDAwMDAKKyNkZWZpbmUgICBDUjEJMDAwMTAwMAorI2RlZmluZSAgIENSMgkwMDAyMDAwCisjZGVmaW5lICAgQ1IzCTAwMDMwMDAKKyNkZWZpbmUgVEFCRExZCTAwMTQwMDAKKyNkZWZpbmUgICBUQUIwCTAwMDAwMDAKKyNkZWZpbmUgICBUQUIxCTAwMDQwMDAKKyNkZWZpbmUgICBUQUIyCTAwMTAwMDAKKyNkZWZpbmUgICBUQUIzCTAwMTQwMDAKKyNkZWZpbmUgICBYVEFCUwkwMDE0MDAwCisjZGVmaW5lIEJTRExZCTAwMjAwMDAKKyNkZWZpbmUgICBCUzAJMDAwMDAwMAorI2RlZmluZSAgIEJTMQkwMDIwMDAwCisjZGVmaW5lIFZURExZCTAwNDAwMDAKKyNkZWZpbmUgICBWVDAJMDAwMDAwMAorI2RlZmluZSAgIFZUMQkwMDQwMDAwCisjZGVmaW5lIEZGRExZCTAxMDAwMDAKKyNkZWZpbmUgICBGRjAJMDAwMDAwMAorI2RlZmluZSAgIEZGMQkwMTAwMDAwCisKKy8qIGNfY2ZsYWcgYml0IG1lYW5pbmcgKi8KKyNkZWZpbmUgQ0JBVUQJMDAxMDAxNworI2RlZmluZSAgQjAJMDAwMDAwMAkJLyogaGFuZyB1cCAqLworI2RlZmluZSAgQjUwCTAwMDAwMDEKKyNkZWZpbmUgIEI3NQkwMDAwMDAyCisjZGVmaW5lICBCMTEwCTAwMDAwMDMKKyNkZWZpbmUgIEIxMzQJMDAwMDAwNAorI2RlZmluZSAgQjE1MAkwMDAwMDA1CisjZGVmaW5lICBCMjAwCTAwMDAwMDYKKyNkZWZpbmUgIEIzMDAJMDAwMDAwNworI2RlZmluZSAgQjYwMAkwMDAwMDEwCisjZGVmaW5lICBCMTIwMAkwMDAwMDExCisjZGVmaW5lICBCMTgwMAkwMDAwMDEyCisjZGVmaW5lICBCMjQwMAkwMDAwMDEzCisjZGVmaW5lICBCNDgwMAkwMDAwMDE0CisjZGVmaW5lICBCOTYwMAkwMDAwMDE1CisjZGVmaW5lICBCMTkyMDAJMDAwMDAxNgorI2RlZmluZSAgQjM4NDAwCTAwMDAwMTcKKyNkZWZpbmUgRVhUQSBCMTkyMDAKKyNkZWZpbmUgRVhUQiBCMzg0MDAKKyNkZWZpbmUgQ1NJWkUJMDAwMDA2MAorI2RlZmluZSAgIENTNQkwMDAwMDAwCisjZGVmaW5lICAgQ1M2CTAwMDAwMjAKKyNkZWZpbmUgICBDUzcJMDAwMDA0MAorI2RlZmluZSAgIENTOAkwMDAwMDYwCisjZGVmaW5lIENTVE9QQgkwMDAwMTAwCisjZGVmaW5lIENSRUFECTAwMDAyMDAKKyNkZWZpbmUgUEFSRU5CCTAwMDA0MDAKKyNkZWZpbmUgUEFST0RECTAwMDEwMDAKKyNkZWZpbmUgSFVQQ0wJMDAwMjAwMAorI2RlZmluZSBDTE9DQUwJMDAwNDAwMAorI2RlZmluZSBDQkFVREVYIDAwMTAwMDAKKyNkZWZpbmUgICAgQjU3NjAwIDAwMTAwMDEKKyNkZWZpbmUgICBCMTE1MjAwIDAwMTAwMDIKKyNkZWZpbmUgICBCMjMwNDAwIDAwMTAwMDMKKyNkZWZpbmUgICBCNDYwODAwIDAwMTAwMDQKKyNkZWZpbmUgICBCNTAwMDAwIDAwMTAwMDUKKyNkZWZpbmUgICBCNTc2MDAwIDAwMTAwMDYKKyNkZWZpbmUgICBCOTIxNjAwIDAwMTAwMDcKKyNkZWZpbmUgIEIxMDAwMDAwIDAwMTAwMTAKKyNkZWZpbmUgIEIxMTUyMDAwIDAwMTAwMTEKKyNkZWZpbmUgIEIxNTAwMDAwIDAwMTAwMTIKKyNkZWZpbmUgIEIyMDAwMDAwIDAwMTAwMTMKKyNkZWZpbmUgIEIyNTAwMDAwIDAwMTAwMTQKKyNkZWZpbmUgIEIzMDAwMDAwIDAwMTAwMTUKKyNkZWZpbmUgIEIzNTAwMDAwIDAwMTAwMTYKKyNkZWZpbmUgIEI0MDAwMDAwIDAwMTAwMTcKKyNkZWZpbmUgQ0lCQVVECSAgMDAyMDAzNjAwMDAwCS8qIGlucHV0IGJhdWQgcmF0ZSAobm90IHVzZWQpICovCisjZGVmaW5lIENNU1BBUiAgICAwMTAwMDAwMDAwMDAJCS8qIG1hcmsgb3Igc3BhY2UgKHN0aWNrKSBwYXJpdHkgKi8KKyNkZWZpbmUgQ1JUU0NUUwkgIDAyMDAwMDAwMDAwMAkJLyogZmxvdyBjb250cm9sICovCisKKy8qIGNfbGZsYWcgYml0cyAqLworI2RlZmluZSBJU0lHCTAwMDAwMDEKKyNkZWZpbmUgSUNBTk9OCTAwMDAwMDIKKyNkZWZpbmUgWENBU0UJMDAwMDAwNAorI2RlZmluZSBFQ0hPCTAwMDAwMTAKKyNkZWZpbmUgRUNIT0UJMDAwMDAyMAorI2RlZmluZSBFQ0hPSwkwMDAwMDQwCisjZGVmaW5lIEVDSE9OTAkwMDAwMTAwCisjZGVmaW5lIE5PRkxTSAkwMDAwMjAwCisjZGVmaW5lIFRPU1RPUAkwMDAwNDAwCisjZGVmaW5lIEVDSE9DVEwJMDAwMTAwMAorI2RlZmluZSBFQ0hPUFJUCTAwMDIwMDAKKyNkZWZpbmUgRUNIT0tFCTAwMDQwMDAKKyNkZWZpbmUgRkxVU0hPCTAwMTAwMDAKKyNkZWZpbmUgUEVORElOCTAwNDAwMDAKKyNkZWZpbmUgSUVYVEVOCTAxMDAwMDAKKworLyogdGNmbG93KCkgYW5kIFRDWE9OQyB1c2UgdGhlc2UgKi8KKyNkZWZpbmUJVENPT0ZGCQkwCisjZGVmaW5lCVRDT09OCQkxCisjZGVmaW5lCVRDSU9GRgkJMgorI2RlZmluZQlUQ0lPTgkJMworCisvKiB0Y2ZsdXNoKCkgYW5kIFRDRkxTSCB1c2UgdGhlc2UgKi8KKyNkZWZpbmUJVENJRkxVU0gJMAorI2RlZmluZQlUQ09GTFVTSAkxCisjZGVmaW5lCVRDSU9GTFVTSAkyCisKKy8qIHRjc2V0YXR0ciB1c2VzIHRoZXNlICovCisjZGVmaW5lCVRDU0FOT1cJCTAKKyNkZWZpbmUJVENTQURSQUlOCTEKKyNkZWZpbmUJVENTQUZMVVNICTIKKworI2VuZGlmCS8qIF9fQVNNX0FSTV9URVJNQklUU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi90ZXJtaW9zLmggYi9pbmNsdWRlL2FzbS1hcm0yNi90ZXJtaW9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I4ZjVlOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybTI2L3Rlcm1pb3MuaApAQCAtMCwwICsxLDEwOCBAQAorI2lmbmRlZiBfX0FTTV9BUk1fVEVSTUlPU19ICisjZGVmaW5lIF9fQVNNX0FSTV9URVJNSU9TX0gKKworI2luY2x1ZGUgPGFzbS90ZXJtYml0cy5oPgorI2luY2x1ZGUgPGFzbS9pb2N0bHMuaD4KKworc3RydWN0IHdpbnNpemUgeworCXVuc2lnbmVkIHNob3J0IHdzX3JvdzsKKwl1bnNpZ25lZCBzaG9ydCB3c19jb2w7CisJdW5zaWduZWQgc2hvcnQgd3NfeHBpeGVsOworCXVuc2lnbmVkIHNob3J0IHdzX3lwaXhlbDsKK307CisKKyNkZWZpbmUgTkNDIDgKK3N0cnVjdCB0ZXJtaW8geworCXVuc2lnbmVkIHNob3J0IGNfaWZsYWc7CQkvKiBpbnB1dCBtb2RlIGZsYWdzICovCisJdW5zaWduZWQgc2hvcnQgY19vZmxhZzsJCS8qIG91dHB1dCBtb2RlIGZsYWdzICovCisJdW5zaWduZWQgc2hvcnQgY19jZmxhZzsJCS8qIGNvbnRyb2wgbW9kZSBmbGFncyAqLworCXVuc2lnbmVkIHNob3J0IGNfbGZsYWc7CQkvKiBsb2NhbCBtb2RlIGZsYWdzICovCisJdW5zaWduZWQgY2hhciBjX2xpbmU7CQkvKiBsaW5lIGRpc2NpcGxpbmUgKi8KKwl1bnNpZ25lZCBjaGFyIGNfY2NbTkNDXTsJLyogY29udHJvbCBjaGFyYWN0ZXJzICovCit9OworCisjaWZkZWYgX19LRVJORUxfXworLyoJaW50cj1eQwkJcXVpdD1efAkJZXJhc2U9ZGVsCWtpbGw9XlUKKwllb2Y9XkQJCXZ0aW1lPVwwCXZtaW49XDEJCXN4dGM9XDAKKwlzdGFydD1eUQlzdG9wPV5TCQlzdXNwPV5aCQllb2w9XDAKKwlyZXByaW50PV5SCWRpc2NhcmQ9XlUJd2VyYXNlPV5XCWxuZXh0PV5WCisJZW9sMj1cMAorKi8KKyNkZWZpbmUgSU5JVF9DX0NDICJcMDAzXDAzNFwxNzdcMDI1XDAwNFwwXDFcMFwwMjFcMDIzXDAzMlwwXDAyMlwwMTdcMDI3XDAyNlwwIgorI2VuZGlmCisKKy8qIG1vZGVtIGxpbmVzICovCisjZGVmaW5lIFRJT0NNX0xFCTB4MDAxCisjZGVmaW5lIFRJT0NNX0RUUgkweDAwMgorI2RlZmluZSBUSU9DTV9SVFMJMHgwMDQKKyNkZWZpbmUgVElPQ01fU1QJMHgwMDgKKyNkZWZpbmUgVElPQ01fU1IJMHgwMTAKKyNkZWZpbmUgVElPQ01fQ1RTCTB4MDIwCisjZGVmaW5lIFRJT0NNX0NBUgkweDA0MAorI2RlZmluZSBUSU9DTV9STkcJMHgwODAKKyNkZWZpbmUgVElPQ01fRFNSCTB4MTAwCisjZGVmaW5lIFRJT0NNX0NECVRJT0NNX0NBUgorI2RlZmluZSBUSU9DTV9SSQlUSU9DTV9STkcKKyNkZWZpbmUgVElPQ01fT1VUMQkweDIwMDAKKyNkZWZpbmUgVElPQ01fT1VUMgkweDQwMDAKKyNkZWZpbmUgVElPQ01fTE9PUAkweDgwMDAKKworLyogaW9jdGwgKGZkLCBUSU9DU0VSR0VUTFNSLCAmcmVzdWx0KSB3aGVyZSByZXN1bHQgbWF5IGJlIGFzIGJlbG93ICovCisKKy8qIGxpbmUgZGlzY2lwbGluZXMgKi8KKyNkZWZpbmUgTl9UVFkJCTAKKyNkZWZpbmUgTl9TTElQCQkxCisjZGVmaW5lIE5fTU9VU0UJCTIKKyNkZWZpbmUgTl9QUFAJCTMKKyNkZWZpbmUgTl9TVFJJUAkJNAorI2RlZmluZSBOX0FYMjUJCTUKKyNkZWZpbmUgTl9YMjUJCTYJLyogWC4yNSBhc3luYyAqLworI2RlZmluZSBOXzZQQUNLCQk3CisjZGVmaW5lIE5fTUFTQwkJOAkvKiBSZXNlcnZlZCBmb3IgTW9iaXRleCBtb2R1bGUgPGthekBjYWZlLm5ldD4gKi8KKyNkZWZpbmUgTl9SMzk2NAkJOQkvKiBSZXNlcnZlZCBmb3IgU2ltYXRpYyBSMzk2NCBtb2R1bGUgKi8KKyNkZWZpbmUgTl9QUk9GSUJVU19GREwJMTAJLyogUmVzZXJ2ZWQgZm9yIFByb2ZpYnVzIDxEYXZlQG12aGkuY29tPiAqLworI2RlZmluZSBOX0lSREEJCTExCS8qIExpbnV4IElyRGEgLSBodHRwOi8vaXJkYS5zb3VyY2Vmb3JnZS5uZXQvICovCisjZGVmaW5lIE5fU01TQkxPQ0sJMTIJLyogU01TIGJsb2NrIG1vZGUgLSBmb3IgdGFsa2luZyB0byBHU00gZGF0YSBjYXJkcyBhYm91dCBTTVMgbWVzc2FnZXMgKi8KKyNkZWZpbmUgTl9IRExDCQkxMwkvKiBzeW5jaHJvbm91cyBIRExDICovCisjZGVmaW5lIE5fU1lOQ19QUFAJMTQKKyNkZWZpbmUgTl9IQ0kJCTE1ICAvKiBCbHVldG9vdGggSENJIFVBUlQgKi8KKworI2lmZGVmIF9fS0VSTkVMX18KKworLyoKKyAqIFRyYW5zbGF0ZSBhICJ0ZXJtaW8iIHN0cnVjdHVyZSBpbnRvIGEgInRlcm1pb3MiLiBVZ2guCisgKi8KKyNkZWZpbmUgU0VUX0xPV19URVJNSU9TX0JJVFModGVybWlvcywgdGVybWlvLCB4KSB7CQlcCisJdW5zaWduZWQgc2hvcnQgX190bXA7CQkJCQlcCisJZ2V0X3VzZXIoX190bXAsJih0ZXJtaW8pLT54KTsJCQkJXAorCSoodW5zaWduZWQgc2hvcnQgKikgJih0ZXJtaW9zKS0+eCA9IF9fdG1wOwkJXAorfQorCisjZGVmaW5lIHVzZXJfdGVybWlvX3RvX2tlcm5lbF90ZXJtaW9zKHRlcm1pb3MsIHRlcm1pbykgXAorKHsgXAorCVNFVF9MT1dfVEVSTUlPU19CSVRTKHRlcm1pb3MsIHRlcm1pbywgY19pZmxhZyk7IFwKKwlTRVRfTE9XX1RFUk1JT1NfQklUUyh0ZXJtaW9zLCB0ZXJtaW8sIGNfb2ZsYWcpOyBcCisJU0VUX0xPV19URVJNSU9TX0JJVFModGVybWlvcywgdGVybWlvLCBjX2NmbGFnKTsgXAorCVNFVF9MT1dfVEVSTUlPU19CSVRTKHRlcm1pb3MsIHRlcm1pbywgY19sZmxhZyk7IFwKKwljb3B5X2Zyb21fdXNlcigodGVybWlvcyktPmNfY2MsICh0ZXJtaW8pLT5jX2NjLCBOQ0MpOyBcCit9KQorCisvKgorICogVHJhbnNsYXRlIGEgInRlcm1pb3MiIHN0cnVjdHVyZSBpbnRvIGEgInRlcm1pbyIuIFVnaC4KKyAqLworI2RlZmluZSBrZXJuZWxfdGVybWlvc190b191c2VyX3Rlcm1pbyh0ZXJtaW8sIHRlcm1pb3MpIFwKKyh7IFwKKwlwdXRfdXNlcigodGVybWlvcyktPmNfaWZsYWcsICYodGVybWlvKS0+Y19pZmxhZyk7IFwKKwlwdXRfdXNlcigodGVybWlvcyktPmNfb2ZsYWcsICYodGVybWlvKS0+Y19vZmxhZyk7IFwKKwlwdXRfdXNlcigodGVybWlvcyktPmNfY2ZsYWcsICYodGVybWlvKS0+Y19jZmxhZyk7IFwKKwlwdXRfdXNlcigodGVybWlvcyktPmNfbGZsYWcsICYodGVybWlvKS0+Y19sZmxhZyk7IFwKKwlwdXRfdXNlcigodGVybWlvcyktPmNfbGluZSwgICYodGVybWlvKS0+Y19saW5lKTsgXAorCWNvcHlfdG9fdXNlcigodGVybWlvKS0+Y19jYywgKHRlcm1pb3MpLT5jX2NjLCBOQ0MpOyBcCit9KQorCisjZGVmaW5lIHVzZXJfdGVybWlvc190b19rZXJuZWxfdGVybWlvcyhrLCB1KSBjb3B5X2Zyb21fdXNlcihrLCB1LCBzaXplb2Yoc3RydWN0IHRlcm1pb3MpKQorI2RlZmluZSBrZXJuZWxfdGVybWlvc190b191c2VyX3Rlcm1pb3ModSwgaykgY29weV90b191c2VyKHUsIGssIHNpemVvZihzdHJ1Y3QgdGVybWlvcykpCisKKyNlbmRpZgkvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZgkvKiBfX0FTTV9BUk1fVEVSTUlPU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi90aHJlYWRfaW5mby5oIGIvaW5jbHVkZS9hc20tYXJtMjYvdGhyZWFkX2luZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGY0MWI1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtMjYvdGhyZWFkX2luZm8uaApAQCAtMCwwICsxLDE0NCBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0yNi90aHJlYWRfaW5mby5oCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMiBSdXNzZWxsIEtpbmcuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzIElhbiBNb2x0b24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2lmbmRlZiBfX0FTTV9BUk1fVEhSRUFEX0lORk9fSAorI2RlZmluZSBfX0FTTV9BUk1fVEhSRUFEX0lORk9fSAorCisjaWZkZWYgX19LRVJORUxfXworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCitzdHJ1Y3QgdGFza19zdHJ1Y3Q7CitzdHJ1Y3QgZXhlY19kb21haW47CisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGFzbS9mcHN0YXRlLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbW1fc2VnbWVudF90OworCitzdHJ1Y3QgY3B1X2NvbnRleHRfc2F2ZSB7CisJX191MzIJcjQ7CisJX191MzIJcjU7CisJX191MzIJcjY7CisJX191MzIJcjc7CisJX191MzIJcjg7CisJX191MzIJcjk7CisJX191MzIJc2w7CisJX191MzIJZnA7CisJX191MzIJc3A7CisJX191MzIJcGM7Cit9OworCisvKgorICogbG93IGxldmVsIHRhc2sgZGF0YSB0aGF0IGVudHJ5LlMgbmVlZHMgaW1tZWRpYXRlIGFjY2VzcyB0by4KKyAqIFdlIGFzc3VtZSBjcHVfY29udGV4dCBmb2xsb3dzIGltbWVkYXRlbHkgYWZ0ZXIgY3B1X2RvbWFpbi4KKyAqLworc3RydWN0IHRocmVhZF9pbmZvIHsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsJCS8qIGxvdyBsZXZlbCBmbGFncyAqLworCV9fczMyCQkJcHJlZW1wdF9jb3VudDsJLyogMCA9PiBwcmVlbXB0YWJsZSwgPDAgPT4gYnVnICovCisJbW1fc2VnbWVudF90CQlhZGRyX2xpbWl0OwkvKiBhZGRyZXNzIGxpbWl0ICovCisJc3RydWN0IHRhc2tfc3RydWN0CSp0YXNrOwkJLyogbWFpbiB0YXNrIHN0cnVjdHVyZSAqLworCXN0cnVjdCBleGVjX2RvbWFpbiAgICAgICpleGVjX2RvbWFpbjsgICAvKiBleGVjdXRpb24gZG9tYWluICovCisJX191MzIJCQljcHU7CQkvKiBjcHUgKi8KKwlzdHJ1Y3QgY3B1X2NvbnRleHRfc2F2ZQljcHVfY29udGV4dDsJLyogY3B1IGNvbnRleHQgKi8KKwlzdHJ1Y3QgcmVzdGFydF9ibG9jayAgICByZXN0YXJ0X2Jsb2NrOworCXVuaW9uIGZwX3N0YXRlCQlmcHN0YXRlOworfTsKKworI2RlZmluZSBJTklUX1RIUkVBRF9JTkZPKHRzaykJCQlcCit7CQkJCQkJXAorCS50YXNrCQkmdHNrLAkJCVwKKwkuZXhlY19kb21haW4JJmRlZmF1bHRfZXhlY19kb21haW4sCVwKKwkuZmxhZ3MJCTAsCQkJXAorCS5wcmVlbXB0X2NvdW50CTAsCQkJXAorCS5hZGRyX2xpbWl0CUtFUk5FTF9EUywJCVwKKwkucmVzdGFydF9ibG9jayAgPSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCS5mbiAgICAgPSBkb19ub19yZXN0YXJ0X3N5c2NhbGwsICAgICAgICBcCisJfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisjZGVmaW5lIGluaXRfdGhyZWFkX2luZm8JKGluaXRfdGhyZWFkX3VuaW9uLnRocmVhZF9pbmZvKQorI2RlZmluZSBpbml0X3N0YWNrCQkoaW5pdF90aHJlYWRfdW5pb24uc3RhY2spCisKKy8qCisgKiBob3cgdG8gZ2V0IHRoZSB0aHJlYWQgaW5mb3JtYXRpb24gc3RydWN0IGZyb20gQworICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCB0aHJlYWRfaW5mbyAqY3VycmVudF90aHJlYWRfaW5mbyh2b2lkKSBfX2F0dHJpYnV0ZV9jb25zdF9fOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCB0aHJlYWRfaW5mbyAqY3VycmVudF90aHJlYWRfaW5mbyh2b2lkKQoreworCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgc3AgYXNtICgic3AiKTsKKwlyZXR1cm4gKHN0cnVjdCB0aHJlYWRfaW5mbyAqKShzcCAmIH4weDFmZmYpOworfQorCisvKiBGSVhNRSAtIFBBR0VfU0laRSA8IDMySyAqLworI2RlZmluZSBUSFJFQURfU0laRQkJKDgqMzI3NjgpIC8vIEZJWE1FIC0gdGhpcyBuZWVkcyBhdHRlbnRpb24gKHNlZSBrZXJuZWwvZm9yay5jIHdoaWNoIGdldHMgYSBuaWNlIGRpdiBieSB6ZXJvIGlmIHRoaXMgaXMgbG93ZXIgdGhhbiA4KjMyNzY4CisjZGVmaW5lIF9fZ2V0X3VzZXJfcmVncyh4KSAoKChzdHJ1Y3QgcHRfcmVncyAqKSgodW5zaWduZWQgbG9uZykoeCkgKyBUSFJFQURfU0laRSAtIDgpKSAtIDEpCisKK2V4dGVybiBzdHJ1Y3QgdGhyZWFkX2luZm8gKmFsbG9jX3RocmVhZF9pbmZvKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7CitleHRlcm4gdm9pZCBmcmVlX3RocmVhZF9pbmZvKHN0cnVjdCB0aHJlYWRfaW5mbyAqKTsKKworI2RlZmluZSBnZXRfdGhyZWFkX2luZm8odGkpCWdldF90YXNrX3N0cnVjdCgodGkpLT50YXNrKQorI2RlZmluZSBwdXRfdGhyZWFkX2luZm8odGkpCXB1dF90YXNrX3N0cnVjdCgodGkpLT50YXNrKQorCisjZGVmaW5lIHRocmVhZF9zYXZlZF9wYyh0c2spCVwKKwkoKHVuc2lnbmVkIGxvbmcpKHBjX3BvaW50ZXIoKHRzayktPnRocmVhZF9pbmZvLT5jcHVfY29udGV4dC5wYykpKQorI2RlZmluZSB0aHJlYWRfc2F2ZWRfZnAodHNrKQlcCisJKCh1bnNpZ25lZCBsb25nKSgodHNrKS0+dGhyZWFkX2luZm8tPmNwdV9jb250ZXh0LmZwKSkKKworI2Vsc2UgLyogIV9fQVNTRU1CTFlfXyAqLworCisjZGVmaW5lIFRJX0ZMQUdTCTAKKyNkZWZpbmUgVElfUFJFRU1QVAk0CisjZGVmaW5lIFRJX0FERFJfTElNSVQJOAorI2RlZmluZSBUSV9UQVNLCQkxMgorI2RlZmluZSBUSV9FWEVDX0RPTUFJTiAgMTYKKyNkZWZpbmUgVElfQ1BVCQkyMAorI2RlZmluZSBUSV9DUFVfU0FWRQkyNAorI2RlZmluZSBUSV9SRVNUQVJUX0JMT0NLIDI4CisjZGVmaW5lIFRJX0ZQU1RBVEUJNjgKKworI2VuZGlmCisKKyNkZWZpbmUgUFJFRU1QVF9BQ1RJVkUJMHgwNDAwMDAwMAorCisvKgorICogdGhyZWFkIGluZm9ybWF0aW9uIGZsYWdzOgorICogIFRJRl9TWVNDQUxMX1RSQUNFCS0gc3lzY2FsbCB0cmFjZSBhY3RpdmUKKyAqICBUSUZfTk9USUZZX1JFU1VNRQktIHJlc3VtcHRpb24gbm90aWZpY2F0aW9uIHJlcXVlc3RlZAorICogIFRJRl9TSUdQRU5ESU5HCS0gc2lnbmFsIHBlbmRpbmcKKyAqICBUSUZfTkVFRF9SRVNDSEVECS0gcmVzY2hlZHVsaW5nIG5lY2Vzc2FyeQorICogIFRJRl9VU0VERlBVCQktIEZQVSB3YXMgdXNlZCBieSB0aGlzIHRhc2sgdGhpcyBxdWFudHVtIChTTVApCisgKiAgVElGX1BPTExJTkdfTlJGTEFHCS0gdHJ1ZSBpZiBwb2xsX2lkbGUoKSBpcyBwb2xsaW5nIFRJRl9ORUVEX1JFU0NIRUQKKyAqLworI2RlZmluZSBUSUZfTk9USUZZX1JFU1VNRQkwCisjZGVmaW5lIFRJRl9TSUdQRU5ESU5HCQkxCisjZGVmaW5lIFRJRl9ORUVEX1JFU0NIRUQJMgorI2RlZmluZSBUSUZfU1lTQ0FMTF9UUkFDRQk4CisjZGVmaW5lIFRJRl9VU0VEX0ZQVQkJMTYKKyNkZWZpbmUgVElGX1BPTExJTkdfTlJGTEFHCTE3CisjZGVmaW5lIFRJRl9NRU1ESUUJCTE4CisKKyNkZWZpbmUgX1RJRl9OT1RJRllfUkVTVU1FCSgxIDw8IFRJRl9OT1RJRllfUkVTVU1FKQorI2RlZmluZSBfVElGX1NJR1BFTkRJTkcJCSgxIDw8IFRJRl9TSUdQRU5ESU5HKQorI2RlZmluZSBfVElGX05FRURfUkVTQ0hFRAkoMSA8PCBUSUZfTkVFRF9SRVNDSEVEKQorI2RlZmluZSBfVElGX1NZU0NBTExfVFJBQ0UJKDEgPDwgVElGX1NZU0NBTExfVFJBQ0UpCisjZGVmaW5lIF9USUZfVVNFRF9GUFUJCSgxIDw8IFRJRl9VU0VEX0ZQVSkKKyNkZWZpbmUgX1RJRl9QT0xMSU5HX05SRkxBRwkoMSA8PCBUSUZfUE9MTElOR19OUkZMQUcpCisKKy8qCisgKiBDaGFuZ2UgdGhlc2UgYW5kIHlvdSBicmVhayBBU00gY29kZSBpbiBlbnRyeS1jb21tb24uUworICovCisjZGVmaW5lIF9USUZfV09SS19NQVNLCQkweDAwMDAwMGZmCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYgLyogX19BU01fQVJNX1RIUkVBRF9JTkZPX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybTI2L3RpbWV4LmggYi9pbmNsdWRlL2FzbS1hcm0yNi90aW1leC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4MzIyZmIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0yNi90aW1leC5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL3RpbWV4LmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk3LDE5OTggUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgQXJjaGl0ZWN0dXJlIFNwZWNpZmljIFRJTUUgc3BlY2lmaWNhdGlvbnMKKyAqLworI2lmbmRlZiBfQVNNQVJNX1RJTUVYX0gKKyNkZWZpbmUgX0FTTUFSTV9USU1FWF9ICisKKy8qCisgKiBPbiB0aGUgUmlzY1BDLCB0aGUgY2xvY2sgdGlja3MgYXQgMk1Iei4KKyAqLworI2RlZmluZSBDTE9DS19USUNLX1JBVEUgICAgICAgICAyMDAwMDAwCisKKy8qIElTIFRIQVQgUklHSFQgT04gQTUwMDA/IEZJWE1FICovCisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBjeWNsZXNfdDsKKworc3RhdGljIGlubGluZSBjeWNsZXNfdCBnZXRfY3ljbGVzICh2b2lkKQoreworCXJldHVybiAwOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybTI2L3RsYi5oIGIvaW5jbHVkZS9hc20tYXJtMjYvdGxiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTMxNjM1MgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybTI2L3RsYi5oCkBAIC0wLDAgKzEsNzggQEAKKyNpZm5kZWYgX19BU01BUk1fVExCX0gKKyNkZWZpbmUgX19BU01BUk1fVExCX0gKKworI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CisjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CisKKy8qCisgKiBUTEIgaGFuZGxpbmcuICBUaGlzIGFsbG93cyB1cyB0byByZW1vdmUgcGFnZXMgZnJvbSB0aGUgcGFnZQorICogdGFibGVzLCBhbmQgZWZmaWNpZW50bHkgaGFuZGxlIHRoZSBUTEIgaXNzdWVzLgorICovCitzdHJ1Y3QgbW11X2dhdGhlciB7CisgICAgICAgIHN0cnVjdCBtbV9zdHJ1Y3QgICAgICAgICptbTsKKyAgICAgICAgdW5zaWduZWQgaW50ICAgICAgICAgICAgZnJlZWQ7CisJdW5zaWduZWQgaW50ICAgICAgICAgICAgZnVsbG1tOworCisgICAgICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgIGZsdXNoZXM7CisgICAgICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgIGF2b2lkZWRfZmx1c2hlczsKK307CisKK2V4dGVybiBzdHJ1Y3QgbW11X2dhdGhlciBtbXVfZ2F0aGVyc1tOUl9DUFVTXTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbW11X2dhdGhlciAqCit0bGJfZ2F0aGVyX21tdShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgaW50IGZ1bGxfbW1fZmx1c2gpCit7CisgICAgICAgIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisgICAgICAgIHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIgPSAmbW11X2dhdGhlcnNbY3B1XTsKKworICAgICAgICB0bGItPm1tID0gbW07CisgICAgICAgIHRsYi0+ZnJlZWQgPSAwOworCXRsYi0+ZnVsbG1tID0gZnVsbF9tbV9mbHVzaDsKKworICAgICAgICByZXR1cm4gdGxiOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3RsYl9maW5pc2hfbW11KHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworICAgICAgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHRsYi0+bW07CisgICAgICAgIHVuc2lnbmVkIGxvbmcgZnJlZWQgPSB0bGItPmZyZWVkOworICAgICAgICBpbnQgcnNzID0gZ2V0X21tX2NvdW50ZXIobW0sIHJzcyk7CisKKyAgICAgICAgaWYgKHJzcyA8IGZyZWVkKQorICAgICAgICAgICAgICAgIGZyZWVkID0gcnNzOworICAgICAgICBhZGRfbW1fY291bnRlcihtbSwgcnNzLCAtZnJlZWQpOworCisgICAgICAgIGlmIChmcmVlZCkgeworICAgICAgICAgICAgICAgIGZsdXNoX3RsYl9tbShtbSk7CisgICAgICAgICAgICAgICAgdGxiLT5mbHVzaGVzKys7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdGxiLT5hdm9pZGVkX2ZsdXNoZXMrKzsKKyAgICAgICAgfQorCisgICAgICAgIC8qIGtlZXAgdGhlIHBhZ2UgdGFibGUgY2FjaGUgd2l0aGluIGJvdW5kcyAqLworICAgICAgICBjaGVja19wZ3RfY2FjaGUoKTsKK30KKworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAordGxiX2lzX2Z1bGxfbW0oc3RydWN0IG1tdV9nYXRoZXIgKnRsYikKK3sKKyAgICAgcmV0dXJuIHRsYi0+ZnVsbG1tOworfQorCisjZGVmaW5lIHRsYl9yZW1vdmVfdGxiX2VudHJ5KHRsYixwdGVwLGFkZHJlc3MpICBkbyB7IH0gd2hpbGUgKDApCisvLyNkZWZpbmUgdGxiX3N0YXJ0X3ZtYSh0bGIsdm1hKSAgICAgICAgICAgICAgICAgIGRvIHsgfSB3aGlsZSAoMCkKKy8vRklYTUUgLSBBUk0zMiB1c2VzIHRoaXMgbm93IHRoYXQgdGhpbmdzIGNoYW5nZWQgaW4gdGhlIGtlcm5lbC4gc2VlbXMgbGlrZSBpdCBtYXkgYmUgcG9pbnRsZXNzIG9uIGFybTI2LCBob3dldmVyIHRvIGdldCB0aGluZ3MgY29tcGlsaW5nLi4uCisjZGVmaW5lIHRsYl9zdGFydF92bWEodGxiLHZtYSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgaWYgKCF0bGItPmZ1bGxtbSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICBmbHVzaF9jYWNoZV9yYW5nZSh2bWEsIHZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fZW5kKTsgXAorICAgICAgICB9IHdoaWxlICgwKQorI2RlZmluZSB0bGJfZW5kX3ZtYSh0bGIsdm1hKSAgICAgICAgICAgICAgICAgICAgZG8geyB9IHdoaWxlICgwKQorCisjZGVmaW5lIHRsYl9yZW1vdmVfcGFnZSh0bGIscGFnZSkgICAgICAgZnJlZV9wYWdlX2FuZF9zd2FwX2NhY2hlKHBhZ2UpCisjZGVmaW5lIHB0ZV9mcmVlX3RsYih0bGIscHRlcCkgICAgICAgICAgcHRlX2ZyZWUocHRlcCkKKyNkZWZpbmUgcG1kX2ZyZWVfdGxiKHRsYixwbWRwKSAgICAgICAgICBwbWRfZnJlZShwbWRwKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybTI2L3RsYmZsdXNoLmggYi9pbmNsdWRlL2FzbS1hcm0yNi90bGJmbHVzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3OWMxY2IKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0yNi90bGJmbHVzaC5oCkBAIC0wLDAgKzEsNzAgQEAKKyNpZm5kZWYgX19BU01BUk1fVExCRkxVU0hfSAorI2RlZmluZSBfX0FTTUFSTV9UTEJGTFVTSF9ICisKKy8qCisgKiBUTEIgZmx1c2hpbmc6CisgKgorICogIC0gZmx1c2hfdGxiX2FsbCgpIGZsdXNoZXMgYWxsIHByb2Nlc3NlcyBUTEJzCisgKiAgLSBmbHVzaF90bGJfbW0obW0pIGZsdXNoZXMgdGhlIHNwZWNpZmllZCBtbSBjb250ZXh0IFRMQidzCisgKiAgLSBmbHVzaF90bGJfcGFnZSh2bWEsIHZtYWRkcikgZmx1c2hlcyBvbmUgcGFnZQorICogIC0gZmx1c2hfdGxiX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCkgZmx1c2hlcyBhIHJhbmdlIG9mIHBhZ2VzCisgKi8KKworI2RlZmluZSBmbHVzaF90bGJfYWxsKCkJCQkJbWVtY191cGRhdGVfYWxsKCkKKyNkZWZpbmUgZmx1c2hfdGxiX21tKG1tKQkJCW1lbWNfdXBkYXRlX21tKG1tKQorI2RlZmluZSBmbHVzaF90bGJfcGFnZSh2bWEsIHZtYWRkcikJCWRvIHsgcHJpbnRrKCJmbHVzaF90bGJfcGFnZVxuIik7fSB3aGlsZSAoMCkgIC8vIElTIFRISVMgUklHSFQ/CisjZGVmaW5lIGZsdXNoX3RsYl9yYW5nZSh2bWEsc3RhcnQsZW5kKQkJXAorCQlkbyB7IG1lbWNfdXBkYXRlX21tKHZtYS0+dm1fbW0pOyAodm9pZCkoc3RhcnQpOyAodm9pZCkoZW5kKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfdGxiX3BndGFibGVzKG1tLHN0YXJ0LGVuZCkgICAgICAgIGRvIHsgcHJpbnRrKCJmbHVzaF90bGJfcGd0YWJsZXNcbiIpO30gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2UocyxlKSAgICAgICAgICAgICBkbyB7IHByaW50aygiZmx1c2hfdGxiX3JhbmdlXG4iKTt9IHdoaWxlICgwKQorCisvKgorICogVGhlIGZvbGxvd2luZyBoYW5kbGUgdGhlIHdlaXJkIE1FTUMgY2hpcAorICovCitzdGF0aWMgaW5saW5lIHZvaWQgbWVtY191cGRhdGVfYWxsKHZvaWQpCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICpwOworCWNwdV9tZW1jX3VwZGF0ZV9hbGwoaW5pdF9tbS5wZ2QpOworCWZvcl9lYWNoX3Byb2Nlc3MocCkgeworCQlpZiAoIXAtPm1tKQorCQkJY29udGludWU7CisJCWNwdV9tZW1jX3VwZGF0ZV9hbGwocC0+bW0tPnBnZCk7CisJfQorCXByb2Nlc3Nvci5fc2V0X3BnZChjdXJyZW50LT5hY3RpdmVfbW0tPnBnZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtZW1jX3VwZGF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwljcHVfbWVtY191cGRhdGVfYWxsKG1tLT5wZ2QpOworCisJaWYgKG1tID09IGN1cnJlbnQtPmFjdGl2ZV9tbSkKKwkJcHJvY2Vzc29yLl9zZXRfcGdkKG1tLT5wZ2QpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK21lbWNfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBwYWdlICpwYWdlKQoreworCWNwdV9tZW1jX3VwZGF0ZV9lbnRyeShtbS0+cGdkLCAodW5zaWduZWQgbG9uZykgcGFnZV9hZGRyZXNzKHBhZ2UpLCAwKTsKKworCWlmIChtbSA9PSBjdXJyZW50LT5hY3RpdmVfbW0pCisJCXByb2Nlc3Nvci5fc2V0X3BnZChtbS0+cGdkKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCittZW1jX3VwZGF0ZV9hZGRyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwdGVfdCBwdGUsIHVuc2lnbmVkIGxvbmcgdmFkZHIpCit7CisJY3B1X21lbWNfdXBkYXRlX2VudHJ5KG1tLT5wZ2QsIHB0ZV92YWwocHRlKSwgdmFkZHIpOworCisJaWYgKG1tID09IGN1cnJlbnQtPmFjdGl2ZV9tbSkKKwkJcHJvY2Vzc29yLl9zZXRfcGdkKG1tLT5wZ2QpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3VwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgcHRlKQoreworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdm1hLT52bV9tbTsKK3ByaW50aygidXBkYXRlX21tdV9jYWNoZVxuIik7CisJbWVtY191cGRhdGVfYWRkcihtbSwgcHRlLCBhZGRyKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi90b3BvbG9neS5oIGIvaW5jbHVkZS9hc20tYXJtMjYvdG9wb2xvZ3kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2NiZDdjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtMjYvdG9wb2xvZ3kuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX0FTTV9BUk1fVE9QT0xPR1lfSAorI2RlZmluZSBfQVNNX0FSTV9UT1BPTE9HWV9ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy90b3BvbG9neS5oPgorCisjZW5kaWYgLyogX0FTTV9BUk1fVE9QT0xPR1lfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtMjYvdHlwZXMuaCBiL2luY2x1ZGUvYXNtLWFybTI2L3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZjYmU1NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybTI2L3R5cGVzLmgKQEAgLTAsMCArMSw2MSBAQAorI2lmbmRlZiBfX0FTTV9BUk1fVFlQRVNfSAorI2RlZmluZSBfX0FTTV9BUk1fVFlQRVNfSAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVtb2RlX3Q7CisKKy8qCisgKiBfX3h4IGlzIG9rOiBpdCBkb2Vzbid0IHBvbGx1dGUgdGhlIFBPU0lYIG5hbWVzcGFjZS4gVXNlIHRoZXNlIGluIHRoZQorICogaGVhZGVyIGZpbGVzIGV4cG9ydGVkIHRvIHVzZXIgc3BhY2UKKyAqLworCit0eXBlZGVmIF9fc2lnbmVkX18gY2hhciBfX3M4OwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdTg7CisKK3R5cGVkZWYgX19zaWduZWRfXyBzaG9ydCBfX3MxNjsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgX191MTY7CisKK3R5cGVkZWYgX19zaWduZWRfXyBpbnQgX19zMzI7Cit0eXBlZGVmIHVuc2lnbmVkIGludCBfX3UzMjsKKworI2lmIGRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykKK3R5cGVkZWYgX19zaWduZWRfXyBsb25nIGxvbmcgX19zNjQ7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3U2NDsKKyNlbmRpZgorCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKy8qCisgKiBUaGVzZSBhcmVuJ3QgZXhwb3J0ZWQgb3V0c2lkZSB0aGUga2VybmVsIHRvIGF2b2lkIG5hbWUgc3BhY2UgY2xhc2hlcworICovCisjaWZkZWYgX19LRVJORUxfXworCisjZGVmaW5lIEJJVFNfUEVSX0xPTkcgMzIKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKwordHlwZWRlZiBzaWduZWQgY2hhciBzODsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciB1ODsKKwordHlwZWRlZiBzaWduZWQgc2hvcnQgczE2OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1MTY7CisKK3R5cGVkZWYgc2lnbmVkIGludCBzMzI7Cit0eXBlZGVmIHVuc2lnbmVkIGludCB1MzI7CisKK3R5cGVkZWYgc2lnbmVkIGxvbmcgbG9uZyBzNjQ7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1NjQ7CisKKy8qIERtYSBhZGRyZXNzZXMgYXJlIDMyLWJpdHMgd2lkZS4gICovCisKK3R5cGVkZWYgdTMyIGRtYV9hZGRyX3Q7Cit0eXBlZGVmIHUzMiBkbWE2NF9hZGRyX3Q7CisKK3R5cGVkZWYgdW5zaWduZWQgaW50IGttZW1fYnVmY3RsX3Q7CisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi91YWNjZXNzLWFzbS5oIGIvaW5jbHVkZS9hc20tYXJtMjYvdWFjY2Vzcy1hc20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWY3OThlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtMjYvdWFjY2Vzcy1hc20uaApAQCAtMCwwICsxLDE1MyBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vcHJvYy1hcm1vL3VhY2Nlc3MuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTYgUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisvKgorICogVGhlIGZzIGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQgb24gdGhlIEFSTTIgYW5kIEFSTTMgYXJjaGl0ZWN0dXJlcworICogbWFudWFsbHkuCisgKiBVc2UgKl91c2VyIGZ1bmN0aW9ucyB0byBhY2Nlc3MgdXNlciBtZW1vcnkgd2l0aCBmYXVsdGluZyBiZWhhdmluZworICogICBhcyB0aG91Z2ggdGhlIHVzZXIgaXMgYWNjZXNzaW5nIHRoZSBtZW1vcnkuCisgKiBVc2Ugc2V0X2ZzKGdldF9kcygpKSBhbmQgdGhlbiB0aGUgKl91c2VyIGZ1bmN0aW9ucyB0byBhbGxvdyB0aGVtIHRvCisgKiAgIGFjY2VzcyBrZXJuZWwgbWVtb3J5LgorICovCisKKy8qCisgKiBUaGVzZSBhcmUgdGhlIHZhbHVlcyB1c2VkIHRvIHJlcHJlc2VudCB0aGUgdXNlciBgZnMnIGFuZCB0aGUga2VybmVsIGBkcycKKyAqIEZJWE1FIC0gdGhlIEtFUk5FTF9EUyBzaG91bGQgZW5kIGF0IDB4MDMwMDAwMDAgYnV0IHdlIHdhbnQgdG8gYWNjZXNzIFJPTSBhdAorICogMHgwMzQwMDAwMC4gaWRlYWxseSB3ZSB3YW50IHRvIGZvcmJpZCBhY2Nlc3MgdG8gdGhlIElPIHNwYWNlIGluYmV0d2Vlbi4KKyAqLworI2RlZmluZSBLRVJORUxfRFMJMHgwM0ZGRkZGRgorI2RlZmluZSBVU0VSX0RTICAgCTB4MDIwMDAwMDAKKworZXh0ZXJuIHVhY2Nlc3NfdCB1YWNjZXNzX3VzZXIsIHVhY2Nlc3Nfa2VybmVsOworCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2ZzIChtbV9zZWdtZW50X3QgZnMpCit7CisJY3VycmVudF90aHJlYWRfaW5mbygpLT5hZGRyX2xpbWl0ID0gZnM7CisJY3VycmVudC0+dGhyZWFkLnVhY2Nlc3MgPSAoZnMgPT0gVVNFUl9EUyA/ICZ1YWNjZXNzX3VzZXIgOiAmdWFjY2Vzc19rZXJuZWwpOworfQorCisjZGVmaW5lIF9fcmFuZ2Vfb2soYWRkcixzaXplKSAoewkJCQkJXAorCXVuc2lnbmVkIGxvbmcgZmxhZywgc3VtOwkJCQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdWJzICUxLCAlMCwgJTM7IGNtcGNzICUxLCAlMjsgbW92Y3MgJTAsICMwIiBcCisJCTogIj0mciIgKGZsYWcpLCAiPSZyIiAoc3VtKQkJCQlcCisJCTogInIiIChhZGRyKSwgIklyIiAoc2l6ZSksICIwIiAoY3VycmVudF90aHJlYWRfaW5mbygpLT5hZGRyX2xpbWl0KQlcCisJCTogImNjIik7CQkJCQkJXAorCWZsYWc7IH0pCisKKyNkZWZpbmUgX19hZGRyX29rKGFkZHIpICh7CQkJCQkJXAorCXVuc2lnbmVkIGxvbmcgZmxhZzsJCQkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oImNtcCAlMiwgJTA7IG1vdmxvICUwLCAjMCIJCQlcCisJCTogIj0mciIgKGZsYWcpCQkJCQkJXAorCQk6ICIwIiAoY3VycmVudF90aHJlYWRfaW5mbygpLT5hZGRyX2xpbWl0KSwgInIiIChhZGRyKQlcCisJCTogImNjIik7CQkJCQkJXAorCShmbGFnID09IDApOyB9KQorCisjZGVmaW5lIF9fcHV0X3VzZXJfYXNtX2J5dGUoeCxhZGRyLGVycikJCQkJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQlcCisJIgltb3YJcjAsICUxXG4iCQkJCQlcCisJIgltb3YJcjEsICUyXG4iCQkJCQlcCisJIgltb3YJcjIsICUwXG4iCQkJCQlcCisJIgltb3YJbHIsIHBjXG4iCQkJCQlcCisJIgltb3YJcGMsICUzXG4iCQkJCQlcCisJIgltb3YJJTAsIHIyXG4iCQkJCQlcCisJOiAiPXIiIChlcnIpCQkJCQkJCVwKKwk6ICJyIiAoeCksICJyIiAoYWRkciksICJyIiAoY3VycmVudC0+dGhyZWFkLnVhY2Nlc3MtPnB1dF9ieXRlKSwJXAorCSAgIjAiIChlcnIpCQkJCQkJCVwKKwk6ICJyMCIsICJyMSIsICJyMiIsICJsciIpCisKKyNkZWZpbmUgX19wdXRfdXNlcl9hc21faGFsZih4LGFkZHIsZXJyKQkJCQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCVwKKwkiCW1vdglyMCwgJTFcbiIJCQkJCVwKKwkiCW1vdglyMSwgJTJcbiIJCQkJCVwKKwkiCW1vdglyMiwgJTBcbiIJCQkJCVwKKwkiCW1vdglsciwgcGNcbiIJCQkJCVwKKwkiCW1vdglwYywgJTNcbiIJCQkJCVwKKwkiCW1vdgklMCwgcjJcbiIJCQkJCVwKKwk6ICI9ciIgKGVycikJCQkJCQkJXAorCTogInIiICh4KSwgInIiIChhZGRyKSwgInIiIChjdXJyZW50LT50aHJlYWQudWFjY2Vzcy0+cHV0X2hhbGYpLAlcCisJICAiMCIgKGVycikJCQkJCQkJXAorCTogInIwIiwgInIxIiwgInIyIiwgImxyIikKKworI2RlZmluZSBfX3B1dF91c2VyX2FzbV93b3JkKHgsYWRkcixlcnIpCQkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAorCSIJbW92CXIwLCAlMVxuIgkJCQkJXAorCSIJbW92CXIxLCAlMlxuIgkJCQkJXAorCSIJbW92CXIyLCAlMFxuIgkJCQkJXAorCSIJbW92CWxyLCBwY1xuIgkJCQkJXAorCSIJbW92CXBjLCAlM1xuIgkJCQkJXAorCSIJbW92CSUwLCByMlxuIgkJCQkJXAorCTogIj1yIiAoZXJyKQkJCQkJCQlcCisJOiAiciIgKHgpLCAiciIgKGFkZHIpLCAiciIgKGN1cnJlbnQtPnRocmVhZC51YWNjZXNzLT5wdXRfd29yZCksCVwKKwkgICIwIiAoZXJyKQkJCQkJCQlcCisJOiAicjAiLCAicjEiLCAicjIiLCAibHIiKQorCisjZGVmaW5lIF9fcHV0X3VzZXJfYXNtX2R3b3JkKHgsYWRkcixlcnIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAiICAgICAgIG1vdiAgICAgcjAsICUxXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAiICAgICAgIG1vdiAgICAgcjEsICUyXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAiICAgICAgIG1vdiAgICAgcjIsICUwXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAiICAgICAgIG1vdiAgICAgbHIsIHBjXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAiICAgICAgIG1vdiAgICAgcGMsICUzXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAiICAgICAgIG1vdiAgICAgJTAsIHIyXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICA6ICI9ciIgKGVycikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICA6ICJyIiAoeCksICJyIiAoYWRkciksICJyIiAoY3VycmVudC0+dGhyZWFkLnVhY2Nlc3MtPnB1dF9kd29yZCksIFwKKyAgICAgICAgICAiMCIgKGVycikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgOiAicjAiLCAicjEiLCAicjIiLCAibHIiKQorCisjZGVmaW5lIF9fZ2V0X3VzZXJfYXNtX2J5dGUoeCxhZGRyLGVycikJCQkJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQlcCisJIgltb3YJcjAsICUyXG4iCQkJCQlcCisJIgltb3YJcjEsICUwXG4iCQkJCQlcCisJIgltb3YJbHIsIHBjXG4iCQkJCQlcCisJIgltb3YJcGMsICUzXG4iCQkJCQlcCisJIgltb3YJJTAsIHIxXG4iCQkJCQlcCisJIgltb3YJJTEsIHIwXG4iCQkJCQlcCisJOiAiPXIiIChlcnIpLCAiPXIiICh4KQkJCQkJCVwKKwk6ICJyIiAoYWRkciksICJyIiAoY3VycmVudC0+dGhyZWFkLnVhY2Nlc3MtPmdldF9ieXRlKSwgIjAiIChlcnIpCVwKKwk6ICJyMCIsICJyMSIsICJyMiIsICJsciIpCisKKyNkZWZpbmUgX19nZXRfdXNlcl9hc21faGFsZih4LGFkZHIsZXJyKQkJCQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCVwKKwkiCW1vdglyMCwgJTJcbiIJCQkJCVwKKwkiCW1vdglyMSwgJTBcbiIJCQkJCVwKKwkiCW1vdglsciwgcGNcbiIJCQkJCVwKKwkiCW1vdglwYywgJTNcbiIJCQkJCVwKKwkiCW1vdgklMCwgcjFcbiIJCQkJCVwKKwkiCW1vdgklMSwgcjBcbiIJCQkJCVwKKwk6ICI9ciIgKGVyciksICI9ciIgKHgpCQkJCQkJXAorCTogInIiIChhZGRyKSwgInIiIChjdXJyZW50LT50aHJlYWQudWFjY2Vzcy0+Z2V0X2hhbGYpLCAiMCIgKGVycikJXAorCTogInIwIiwgInIxIiwgInIyIiwgImxyIikKKworI2RlZmluZSBfX2dldF91c2VyX2FzbV93b3JkKHgsYWRkcixlcnIpCQkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAorCSIJbW92CXIwLCAlMlxuIgkJCQkJXAorCSIJbW92CXIxLCAlMFxuIgkJCQkJXAorCSIJbW92CWxyLCBwY1xuIgkJCQkJXAorCSIJbW92CXBjLCAlM1xuIgkJCQkJXAorCSIJbW92CSUwLCByMVxuIgkJCQkJXAorCSIJbW92CSUxLCByMFxuIgkJCQkJXAorCTogIj1yIiAoZXJyKSwgIj1yIiAoeCkJCQkJCQlcCisJOiAiciIgKGFkZHIpLCAiciIgKGN1cnJlbnQtPnRocmVhZC51YWNjZXNzLT5nZXRfd29yZCksICIwIiAoZXJyKQlcCisJOiAicjAiLCAicjEiLCAicjIiLCAibHIiKQorCisjZGVmaW5lIF9fZG9fY29weV9mcm9tX3VzZXIodG8sZnJvbSxuKQkJCQkJXAorCShuKSA9IGN1cnJlbnQtPnRocmVhZC51YWNjZXNzLT5jb3B5X2Zyb21fdXNlcigodG8pLChmcm9tKSwobikpCisKKyNkZWZpbmUgX19kb19jb3B5X3RvX3VzZXIodG8sZnJvbSxuKQkJCQkJXAorCShuKSA9IGN1cnJlbnQtPnRocmVhZC51YWNjZXNzLT5jb3B5X3RvX3VzZXIoKHRvKSwoZnJvbSksKG4pKQorCisjZGVmaW5lIF9fZG9fY2xlYXJfdXNlcihhZGRyLHN6KQkJCQkJXAorCShzeikgPSBjdXJyZW50LT50aHJlYWQudWFjY2Vzcy0+Y2xlYXJfdXNlcigoYWRkciksKHN6KSkKKworI2RlZmluZSBfX2RvX3N0cm5jcHlfZnJvbV91c2VyKGRzdCxzcmMsY291bnQscmVzKQkJCVwKKwkocmVzKSA9IGN1cnJlbnQtPnRocmVhZC51YWNjZXNzLT5zdHJuY3B5X2Zyb21fdXNlcihkc3Qsc3JjLGNvdW50KQorCisjZGVmaW5lIF9fZG9fc3Rybmxlbl91c2VyKHMsbixyZXMpCQkJCQlcCisJKHJlcykgPSBjdXJyZW50LT50aHJlYWQudWFjY2Vzcy0+c3Rybmxlbl91c2VyKHMsbikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybTI2L3VhY2Nlc3MuaCBiL2luY2x1ZGUvYXNtLWFybTI2L3VhY2Nlc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjljZTM4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtMjYvdWFjY2Vzcy5oCkBAIC0wLDAgKzEsMjk5IEBACisjaWZuZGVmIF9BU01BUk1fVUFDQ0VTU19ICisjZGVmaW5lIF9BU01BUk1fVUFDQ0VTU19ICisKKy8qCisgKiBVc2VyIHNwYWNlIG1lbW9yeSBhY2Nlc3MgZnVuY3Rpb25zCisgKi8KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGFzbS9lcnJuby5oPgorCisjZGVmaW5lIFZFUklGWV9SRUFEIDAKKyNkZWZpbmUgVkVSSUZZX1dSSVRFIDEKKworLyoKKyAqIFRoZSBleGNlcHRpb24gdGFibGUgY29uc2lzdHMgb2YgcGFpcnMgb2YgYWRkcmVzc2VzOiB0aGUgZmlyc3QgaXMgdGhlCisgKiBhZGRyZXNzIG9mIGFuIGluc3RydWN0aW9uIHRoYXQgaXMgYWxsb3dlZCB0byBmYXVsdCwgYW5kIHRoZSBzZWNvbmQgaXMKKyAqIHRoZSBhZGRyZXNzIGF0IHdoaWNoIHRoZSBwcm9ncmFtIHNob3VsZCBjb250aW51ZS4gIE5vIHJlZ2lzdGVycyBhcmUKKyAqIG1vZGlmaWVkLCBzbyBpdCBpcyBlbnRpcmVseSB1cCB0byB0aGUgY29udGludWF0aW9uIGNvZGUgdG8gZmlndXJlIG91dAorICogd2hhdCB0byBkby4KKyAqCisgKiBBbGwgdGhlIHJvdXRpbmVzIGJlbG93IHVzZSBiaXRzIG9mIGZpeHVwIGNvZGUgdGhhdCBhcmUgb3V0IG9mIGxpbmUKKyAqIHdpdGggdGhlIG1haW4gaW5zdHJ1Y3Rpb24gcGF0aC4gIFRoaXMgbWVhbnMgd2hlbiBldmVyeXRoaW5nIGlzIHdlbGwsCisgKiB3ZSBkb24ndCBldmVuIGhhdmUgdG8ganVtcCBvdmVyIHRoZW0uICBGdXJ0aGVyLCB0aGV5IGRvIG5vdCBpbnRydWRlCisgKiBvbiBvdXIgY2FjaGUgb3IgdGxiIGVudHJpZXMuCisgKi8KKworc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeQoreworCXVuc2lnbmVkIGxvbmcgaW5zbiwgZml4dXA7Cit9OworCisvKiBSZXR1cm5zIDAgaWYgZXhjZXB0aW9uIG5vdCBmb3VuZCBhbmQgZml4dXAgb3RoZXJ3aXNlLiAgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIHNlYXJjaF9leGNlcHRpb25fdGFibGUodW5zaWduZWQgbG9uZyk7CitleHRlcm4gaW50IGZpeHVwX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKKyNkZWZpbmUgZ2V0X2RzKCkJKEtFUk5FTF9EUykKKyNkZWZpbmUgZ2V0X2ZzKCkJKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+YWRkcl9saW1pdCkKKyNkZWZpbmUgc2VnbWVudF9lcShhLGIpCSgoYSkgPT0gKGIpKQorCisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MtYXNtLmg+CisKKyNkZWZpbmUgYWNjZXNzX29rKHR5cGUsYWRkcixzaXplKQkoX19yYW5nZV9vayhhZGRyLHNpemUpID09IDApCisKKy8qIHRoaXMgZnVuY3Rpb24gd2lsbCBnbyBhd2F5IHNvb24gLSB1c2UgYWNjZXNzX29rKCkgaW5zdGVhZCAqLworc3RhdGljIGlubGluZSBpbnQgX19kZXByZWNhdGVkIHZlcmlmeV9hcmVhKGludCB0eXBlLCBjb25zdCB2b2lkICogYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXJldHVybiBhY2Nlc3Nfb2sodHlwZSwgYWRkciwgc2l6ZSkgPyAwIDogLUVGQVVMVDsKK30KKworLyoKKyAqIFNpbmdsZS12YWx1ZSB0cmFuc2ZlciByb3V0aW5lcy4gIFRoZXkgYXV0b21hdGljYWxseSB1c2UgdGhlIHJpZ2h0CisgKiBzaXplIGlmIHdlIGp1c3QgaGF2ZSB0aGUgcmlnaHQgcG9pbnRlciB0eXBlLiAgTm90ZSB0aGF0IHRoZSBmdW5jdGlvbnMKKyAqIHdoaWNoIHJlYWQgZnJvbSB1c2VyIHNwYWNlICgqZ2V0XyopIG5lZWQgdG8gdGFrZSBjYXJlIG5vdCB0byBsZWFrCisgKiBrZXJuZWwgZGF0YSBldmVuIGlmIHRoZSBjYWxsaW5nIGNvZGUgaXMgYnVnZ3kgYW5kIGZhaWxzIHRvIGNoZWNrCisgKiB0aGUgcmV0dXJuIHZhbHVlLiAgVGhpcyBtZWFucyB6ZXJvaW5nIG91dCB0aGUgZGVzdGluYXRpb24gdmFyaWFibGUKKyAqIG9yIGJ1ZmZlciBvbiBlcnJvci4gIE5vcm1hbGx5IHRoaXMgaXMgZG9uZSBvdXQgb2YgbGluZSBieSB0aGUKKyAqIGZpeHVwIGNvZGUsIGJ1dCB0aGVyZSBhcmUgYSBmZXcgcGxhY2VzIHdoZXJlIGl0IGludHJ1ZGVzIG9uIHRoZQorICogbWFpbiBjb2RlIHBhdGguICBXaGVuIHdlIG9ubHkgd3JpdGUgdG8gdXNlciBzcGFjZSwgdGhlcmUgaXMgbm8KKyAqIHByb2JsZW0uCisgKgorICogVGhlICJfX3h4eCIgdmVyc2lvbnMgb2YgdGhlIHVzZXIgYWNjZXNzIGZ1bmN0aW9ucyBkbyBub3QgdmVyaWZ5IHRoZQorICogYWRkcmVzcyBzcGFjZSAtIGl0IG11c3QgaGF2ZSBiZWVuIGRvbmUgcHJldmlvdXNseSB3aXRoIGEgc2VwYXJhdGUKKyAqICJhY2Nlc3Nfb2soKSIgY2FsbC4KKyAqCisgKiBUaGUgInh4eF9lcnJvciIgdmVyc2lvbnMgc2V0IHRoZSB0aGlyZCBhcmd1bWVudCB0byBFRkFVTFQgaWYgYW4KKyAqIGVycm9yIG9jY3VycywgYW5kIGxlYXZlIGl0IHVuY2hhbmdlZCBvbiBzdWNjZXNzLiAgTm90ZSB0aGF0IHRoZXNlCisgKiB2ZXJzaW9ucyBhcmUgdm9pZCAoaWUsIGRvbid0IHJldHVybiBhIHZhbHVlIGFzIHN1Y2gpLgorICovCisKK2V4dGVybiBpbnQgX19nZXRfdXNlcl8xKHZvaWQgKik7CitleHRlcm4gaW50IF9fZ2V0X3VzZXJfMih2b2lkICopOworZXh0ZXJuIGludCBfX2dldF91c2VyXzQodm9pZCAqKTsKK2V4dGVybiBpbnQgX19nZXRfdXNlcl84KHZvaWQgKik7CitleHRlcm4gaW50IF9fZ2V0X3VzZXJfYmFkKHZvaWQpOworCisjZGVmaW5lIF9fZ2V0X3VzZXJfeChfX3IxLF9fcCxfX2UsX19zLF9faS4uLikJCQkJXAorCSAgIF9fYXNtX18gX192b2xhdGlsZV9fICgiYmwJX19nZXRfdXNlcl8iICNfX3MJCVwKKwkJOiAiPSZyIiAoX19lKSwgIj1yIiAoX19yMSkJCQkJXAorCQk6ICIwIiAoX19wKQkJCQkJCVwKKwkJOiBfX2kpCisKKyNkZWZpbmUgZ2V0X3VzZXIoeCxwKQkJCQkJCQlcCisJKHsJCQkJCQkJCVwKKwkJY29uc3QgcmVnaXN0ZXIgdHlwZW9mKCoocCkpICpfX3AgYXNtKCJyMCIpID0gKHApOwlcCisJCXJlZ2lzdGVyIHR5cGVvZigqKHApKSBfX3IxIGFzbSgicjEiKTsJCQlcCisJCXJlZ2lzdGVyIGludCBfX2UgYXNtKCJyMCIpOwkJCQlcCisJCXN3aXRjaCAoc2l6ZW9mKCoocCkpKSB7CQkJCQlcCisJCWNhc2UgMToJCQkJCQkJXAorCQkJX19nZXRfdXNlcl94KF9fcjEsIF9fcCwgX19lLCAxLCAibHIiKTsJCVwKKwkgICAgICAgCQlicmVhazsJCQkJCQlcCisJCWNhc2UgMjoJCQkJCQkJXAorCQkJX19nZXRfdXNlcl94KF9fcjEsIF9fcCwgX19lLCAyLCAicjIiLCAibHIiKTsJXAorCQkJYnJlYWs7CQkJCQkJXAorCQljYXNlIDQ6CQkJCQkJCVwKKwkgICAgICAgCQlfX2dldF91c2VyX3goX19yMSwgX19wLCBfX2UsIDQsICJsciIpOwkJXAorCQkJYnJlYWs7CQkJCQkJXAorCQljYXNlIDg6CQkJCQkJCVwKKwkJCV9fZ2V0X3VzZXJfeChfX3IxLCBfX3AsIF9fZSwgOCwgImxyIik7CQlcCisJICAgICAgIAkJYnJlYWs7CQkJCQkJXAorCQlkZWZhdWx0OiBfX2UgPSBfX2dldF91c2VyX2JhZCgpOyBicmVhazsJCQlcCisJCX0JCQkJCQkJXAorCQl4ID0gX19yMTsJCQkJCQlcCisJCV9fZTsJCQkJCQkJXAorCX0pCisKKworI2RlZmluZSBfX2dldF91c2VyKHgscHRyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBsb25nIF9fZ3VfZXJyID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBfX2dldF91c2VyX2VycigoeCksKHB0ciksX19ndV9lcnIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBfX2d1X2VycjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSkKKworI2RlZmluZSBfX2dldF91c2VyX2Vycm9yKHgscHRyLGVycikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBfX2dldF91c2VyX2VycigoeCksKHB0ciksZXJyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAodm9pZCkgMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSkKKworI2RlZmluZSBfX2dldF91c2VyX2Vycih4LHB0cixlcnIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB1bnNpZ25lZCBsb25nIF9fZ3VfYWRkciA9ICh1bnNpZ25lZCBsb25nKShwdHIpOyAgICAgICAgICAgICAgICAgXAorICAgICAgICB1bnNpZ25lZCBsb25nIF9fZ3VfdmFsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBzd2l0Y2ggKHNpemVvZigqKHB0cikpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBjYXNlIDE6IF9fZ2V0X3VzZXJfYXNtX2J5dGUoX19ndV92YWwsX19ndV9hZGRyLGVycik7ICAgIGJyZWFrOyAgXAorICAgICAgICBjYXNlIDI6IF9fZ2V0X3VzZXJfYXNtX2hhbGYoX19ndV92YWwsX19ndV9hZGRyLGVycik7ICAgIGJyZWFrOyAgXAorICAgICAgICBjYXNlIDQ6IF9fZ2V0X3VzZXJfYXNtX3dvcmQoX19ndV92YWwsX19ndV9hZGRyLGVycik7ICAgIGJyZWFrOyAgXAorICAgICAgICBkZWZhdWx0OiAoX19ndV92YWwpID0gX19nZXRfdXNlcl9iYWQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoeCkgPSAoX190eXBlb2ZfXygqKHB0cikpKV9fZ3VfdmFsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSB3aGlsZSAoMCkKKworZXh0ZXJuIGludCBfX3B1dF91c2VyXzEodm9pZCAqLCB1bnNpZ25lZCBpbnQpOworZXh0ZXJuIGludCBfX3B1dF91c2VyXzIodm9pZCAqLCB1bnNpZ25lZCBpbnQpOworZXh0ZXJuIGludCBfX3B1dF91c2VyXzQodm9pZCAqLCB1bnNpZ25lZCBpbnQpOworZXh0ZXJuIGludCBfX3B1dF91c2VyXzgodm9pZCAqLCB1bnNpZ25lZCBsb25nIGxvbmcpOworZXh0ZXJuIGludCBfX3B1dF91c2VyX2JhZCh2b2lkKTsKKworI2RlZmluZSBfX3B1dF91c2VyX3goX19yMSxfX3AsX19lLF9fcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIF9fYXNtZXEoIiUwIiwgInIwIikgX19hc21lcSgiJTIiLCAicjEiKSAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICJibCAgICAgX19wdXRfdXNlcl8iICNfX3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj0mciIgKF9fZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIjAiIChfX3ApLCAiciIgKF9fcjEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogImlwIiwgImxyIiwgImNjIikKKworI2RlZmluZSBwdXRfdXNlcih4LHApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGNvbnN0IHJlZ2lzdGVyIHR5cGVvZigqKHApKSBfX3IxIGFzbSgicjEiKSA9ICh4KTsgICAgICAgXAorICAgICAgICAgICAgICAgIGNvbnN0IHJlZ2lzdGVyIHR5cGVvZigqKHApKSAqX19wIGFzbSgicjAiKSA9IChwKTsgICAgICAgXAorICAgICAgICAgICAgICAgIHJlZ2lzdGVyIGludCBfX2UgYXNtKCJyMCIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIHN3aXRjaCAoc2l6ZW9mKCooX19wKSkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGNhc2UgMTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgX19wdXRfdXNlcl94KF9fcjEsIF9fcCwgX19lLCAxKTsgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGNhc2UgMjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgX19wdXRfdXNlcl94KF9fcjEsIF9fcCwgX19lLCAyKTsgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGNhc2UgNDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgX19wdXRfdXNlcl94KF9fcjEsIF9fcCwgX19lLCA0KTsgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGNhc2UgODogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgX19wdXRfdXNlcl94KF9fcjEsIF9fcCwgX19lLCA4KTsgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGRlZmF1bHQ6IF9fZSA9IF9fcHV0X3VzZXJfYmFkKCk7IGJyZWFrOyAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIF9fZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9KQorCisjaWYgMAorLyoqKioqKioqKioqKioqKioqKioqKiAgIE9MRCBNRVRIT0QgKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgX19wdXRfdXNlcl94KF9fcjEsX19wLF9fZSxfX3MsX19pLi4uKQkJCQlcCisJICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJibAlfX3B1dF91c2VyXyIgI19fcwkJXAorCQk6ICI9JnIiIChfX2UpCQkJCQkJXAorCQk6ICIwIiAoX19wKSwgInIiIChfX3IxKQkJCQkJXAorCQk6IF9faSkKKworI2RlZmluZSBwdXRfdXNlcih4LHApCQkJCQkJCVwKKwkoewkJCQkJCQkJXAorCQljb25zdCByZWdpc3RlciB0eXBlb2YoKihwKSkgX19yMSBhc20oInIxIikgPSAoeCk7CVwKKwkJY29uc3QgcmVnaXN0ZXIgdHlwZW9mKCoocCkpICpfX3AgYXNtKCJyMCIpID0gKHApOwlcCisJCXJlZ2lzdGVyIGludCBfX2UgYXNtKCJyMCIpOwkJCQlcCisJCXN3aXRjaCAoc2l6ZW9mKCoocCkpKSB7CQkJCQlcCisJCWNhc2UgMToJCQkJCQkJXAorCQkJX19wdXRfdXNlcl94KF9fcjEsIF9fcCwgX19lLCAxLCAicjIiLCAibHIiKTsJXAorCQkJYnJlYWs7CQkJCQkJXAorCQljYXNlIDI6CQkJCQkJCVwKKwkJCV9fcHV0X3VzZXJfeChfX3IxLCBfX3AsIF9fZSwgMiwgInIyIiwgImxyIik7CVwKKwkJCWJyZWFrOwkJCQkJCVwKKwkJY2FzZSA0OgkJCQkJCQlcCisJCQlfX3B1dF91c2VyX3goX19yMSwgX19wLCBfX2UsIDQsICJyMiIsICJsciIpOwlcCisJCQlicmVhazsJCQkJCQlcCisJCWNhc2UgODoJCQkJCQkJXAorCQkJX19wdXRfdXNlcl94KF9fcjEsIF9fcCwgX19lLCA4LCAicjIiLCAiaXAiLCAibHIiKTsJXAorCQkJYnJlYWs7CQkJCQkJXAorCQlkZWZhdWx0OiBfX2UgPSBfX3B1dF91c2VyX2JhZCgpOyBicmVhazsJCQlcCisJCX0JCQkJCQkJXAorCQlfX2U7CQkJCQkJCVwKKwl9KQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZW5kaWYKKworI2RlZmluZSBfX3B1dF91c2VyKHgscHRyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBsb25nIF9fcHVfZXJyID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBfX3B1dF91c2VyX2VycigoeCksKHB0ciksX19wdV9lcnIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBfX3B1X2VycjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSkKKworI2RlZmluZSBfX3B1dF91c2VyX2Vycm9yKHgscHRyLGVycikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBfX3B1dF91c2VyX2VycigoeCksKHB0ciksZXJyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAodm9pZCkgMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSkKKworI2RlZmluZSBfX3B1dF91c2VyX2Vycih4LHB0cixlcnIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB1bnNpZ25lZCBsb25nIF9fcHVfYWRkciA9ICh1bnNpZ25lZCBsb25nKShwdHIpOyAgICAgICAgICAgICAgICAgXAorICAgICAgICBfX3R5cGVvZl9fKCoocHRyKSkgX19wdV92YWwgPSAoeCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBzd2l0Y2ggKHNpemVvZigqKHB0cikpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBjYXNlIDE6IF9fcHV0X3VzZXJfYXNtX2J5dGUoX19wdV92YWwsX19wdV9hZGRyLGVycik7ICAgIGJyZWFrOyAgXAorICAgICAgICBjYXNlIDI6IF9fcHV0X3VzZXJfYXNtX2hhbGYoX19wdV92YWwsX19wdV9hZGRyLGVycik7ICAgIGJyZWFrOyAgXAorICAgICAgICBjYXNlIDQ6IF9fcHV0X3VzZXJfYXNtX3dvcmQoX19wdV92YWwsX19wdV9hZGRyLGVycik7ICAgIGJyZWFrOyAgXAorICAgICAgICBjYXNlIDg6IF9fcHV0X3VzZXJfYXNtX2R3b3JkKF9fcHVfdmFsLF9fcHVfYWRkcixlcnIpOyAgIGJyZWFrOyAgXAorICAgICAgICBkZWZhdWx0OiBfX3B1dF91c2VyX2JhZCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSB3aGlsZSAoMCkKKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBjb3B5X2Zyb21fdXNlcih2b2lkICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKQoreworCWlmIChhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGZyb20sIG4pKQorCQlfX2RvX2NvcHlfZnJvbV91c2VyKHRvLCBmcm9tLCBuKTsKKwllbHNlIC8qIHNlY3VyaXR5IGhvbGUgLSBwbHVnIGl0ICovCisJCW1lbXplcm8odG8sIG4pOworCXJldHVybiBuOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIF9fY29weV9mcm9tX3VzZXIodm9pZCAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxvbmcgbikKK3sKKwlfX2RvX2NvcHlfZnJvbV91c2VyKHRvLCBmcm9tLCBuKTsKKwlyZXR1cm4gbjsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBjb3B5X3RvX3VzZXIodm9pZCAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxvbmcgbikKK3sKKwlpZiAoYWNjZXNzX29rKFZFUklGWV9XUklURSwgdG8sIG4pKQorCQlfX2RvX2NvcHlfdG9fdXNlcih0bywgZnJvbSwgbik7CisJcmV0dXJuIG47Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgX19jb3B5X3RvX3VzZXIodm9pZCAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxvbmcgbikKK3sKKwlfX2RvX2NvcHlfdG9fdXNlcih0bywgZnJvbSwgbik7CisJcmV0dXJuIG47Cit9CisKKyNkZWZpbmUgX19jb3B5X3RvX3VzZXJfaW5hdG9taWMgX19jb3B5X3RvX3VzZXIKKyNkZWZpbmUgX19jb3B5X2Zyb21fdXNlcl9pbmF0b21pYyBfX2NvcHlfZnJvbV91c2VyCisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgY2xlYXJfdXNlciAodm9pZCAqdG8sIHVuc2lnbmVkIGxvbmcgbikKK3sKKwlpZiAoYWNjZXNzX29rKFZFUklGWV9XUklURSwgdG8sIG4pKQorCQlfX2RvX2NsZWFyX3VzZXIodG8sIG4pOworCXJldHVybiBuOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIF9fY2xlYXJfdXNlciAodm9pZCAqdG8sIHVuc2lnbmVkIGxvbmcgbikKK3sKKwlfX2RvX2NsZWFyX3VzZXIodG8sIG4pOworCXJldHVybiBuOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBsb25nIHN0cm5jcHlfZnJvbV91c2VyIChjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYywgbG9uZyBjb3VudCkKK3sKKwlsb25nIHJlcyA9IC1FRkFVTFQ7CisJaWYgKGFjY2Vzc19vayhWRVJJRllfUkVBRCwgc3JjLCAxKSkKKwkJX19kb19zdHJuY3B5X2Zyb21fdXNlcihkc3QsIHNyYywgY291bnQsIHJlcyk7CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIF9faW5saW5lX18gbG9uZyBfX3N0cm5jcHlfZnJvbV91c2VyIChjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYywgbG9uZyBjb3VudCkKK3sKKwlsb25nIHJlczsKKwlfX2RvX3N0cm5jcHlfZnJvbV91c2VyKGRzdCwgc3JjLCBjb3VudCwgcmVzKTsKKwlyZXR1cm4gcmVzOworfQorCisjZGVmaW5lIHN0cmxlbl91c2VyKHMpCXN0cm5sZW5fdXNlcihzLCB+MFVMID4+IDEpCisKK3N0YXRpYyBpbmxpbmUgbG9uZyBzdHJubGVuX3VzZXIoY29uc3QgY2hhciAqcywgbG9uZyBuKQoreworCXVuc2lnbmVkIGxvbmcgcmVzID0gMDsKKworCWlmIChfX2FkZHJfb2socykpCisJCV9fZG9fc3Rybmxlbl91c2VyKHMsIG4sIHJlcyk7CisKKwlyZXR1cm4gcmVzOworfQorCisjZW5kaWYgLyogX0FTTUFSTV9VQUNDRVNTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybTI2L3Vjb250ZXh0LmggYi9pbmNsdWRlL2FzbS1hcm0yNi91Y29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4NTMxMzAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0yNi91Y29udGV4dC5oCkBAIC0wLDAgKzEsMTIgQEAKKyNpZm5kZWYgX0FTTUFSTV9VQ09OVEVYVF9ICisjZGVmaW5lIF9BU01BUk1fVUNPTlRFWFRfSAorCitzdHJ1Y3QgdWNvbnRleHQgeworCXVuc2lnbmVkIGxvbmcJICB1Y19mbGFnczsKKwlzdHJ1Y3QgdWNvbnRleHQgICp1Y19saW5rOworCXN0YWNrX3QJCSAgdWNfc3RhY2s7CisJc3RydWN0IHNpZ2NvbnRleHQgdWNfbWNvbnRleHQ7CisJc2lnc2V0X3QJICB1Y19zaWdtYXNrOwkvKiBtYXNrIGxhc3QgZm9yIGV4dGVuc2liaWxpdHkgKi8KK307CisKKyNlbmRpZiAvKiAhX0FTTUFSTV9VQ09OVEVYVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi91bmFsaWduZWQuaCBiL2luY2x1ZGUvYXNtLWFybTI2L3VuYWxpZ25lZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5OTI3ODIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0yNi91bmFsaWduZWQuaApAQCAtMCwwICsxLDExOCBAQAorI2lmbmRlZiBfX0FTTV9BUk1fVU5BTElHTkVEX0gKKyNkZWZpbmUgX19BU01fQVJNX1VOQUxJR05FRF9ICisKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKworZXh0ZXJuIGludCBfX2J1Z191bmFsaWduZWRfeCh2b2lkICpwdHIpOworCisvKgorICogV2hhdCBpcyB0aGUgbW9zdCBlZmZpY2llbnQgd2F5IG9mIGxvYWRpbmcvc3RvcmluZyBhbiB1bmFsaWduZWQgdmFsdWU/CisgKgorICogVGhhdCBpcyB0aGUgc3ViamVjdCBvZiB0aGlzIGZpbGUuICBFZmZpY2llbmN5IGhlcmUgaXMgZGVmaW5lZCBhcworICogbWluaW11bSBjb2RlIHNpemUgd2l0aCBtaW5pbXVtIHJlZ2lzdGVyIHVzYWdlIGZvciB0aGUgY29tbW9uIGNhc2VzLgorICogSXQgaXMgY3VycmVudGx5IG5vdCBiZWxpZXZlZCB0aGF0IGxvbmcgbG9uZ3MgYXJlIGNvbW1vbiwgc28gd2UKKyAqIHRyYWRlIGVmZmljaWVuY3kgZm9yIHRoZSBjaGFycywgc2hvcnRzIGFuZCBsb25ncyBhZ2FpbnN0IHRoZSBsb25nCisgKiBsb25ncy4KKyAqCisgKiBDdXJyZW50IHN0YXRzIHdpdGggZ2NjIDIuNy4yLjIgZm9yIHRoZXNlIGZ1bmN0aW9uczoKKyAqCisgKglwdHJzaXplCWdldDoJY29kZQlyZWdzCXB1dDoJY29kZQlyZWdzCisgKgkxCQkxCTEJCTEJMgorICoJMgkJMwkyCQkzCTIKKyAqCTQJCTcJMwkJNwkzCisgKgk4CQkyMAk2CQkxNgk2CisgKgorICogZ2NjIDIuOTUuMSBzZWVtcyB0byBjb2RlIGRpZmZlcmVudGx5OgorICoKKyAqCXB0cnNpemUJZ2V0Ogljb2RlCXJlZ3MJcHV0Ogljb2RlCXJlZ3MKKyAqCTEJCTEJMQkJMQkyCisgKgkyCQkzCTIJCTMJMgorICoJNAkJNwk0CQk3CTQKKyAqCTgJCTE5CTgJCTE1CTYKKyAqCisgKiB3aGljaCBtYXkgb3IgbWF5IG5vdCBiZSBtb3JlIGVmZmljaWVudCAoZGVwZW5kaW5nIHVwb24gd2hldGhlcgorICogeW91IGNhbiBhZmZvcmQgdGhlIGV4dHJhIHJlZ2lzdGVycykuICBIb3BlZnVsbHkgdGhlIGdjYyAyLjk1CisgKiBpcyBpbnRlbGlnZW50IGVub3VnaCB0byBkZWNpZGUgaWYgaXQgaXMgYmV0dGVyIHRvIHVzZSB0aGUKKyAqIGV4dHJhIHJlZ2lzdGVyLCBidXQgZXZpZGVuY2Ugc28gZmFyIHNlZW1zIHRvIHN1Z2dlc3Qgb3RoZXJ3aXNlLgorICoKKyAqIFVuZm9ydHVuYXRlbHksIGdjYyBpcyBub3QgYWJsZSB0byBvcHRpbWlzZSB0aGUgaGlnaCB3b3JkCisgKiBvdXQgb2YgbG9uZyBsb25nID4+IDMyLCBvciB0aGUgbG93IHdvcmQgZnJvbSBsb25nIGxvbmcgPDwgMzIKKyAqLworCisjZGVmaW5lIF9fZ2V0X3VuYWxpZ25lZF8yX2xlKF9fcCkJCQkJCVwKKwkoX19wWzBdIHwgX19wWzFdIDw8IDgpCisKKyNkZWZpbmUgX19nZXRfdW5hbGlnbmVkXzRfbGUoX19wKQkJCQkJXAorCShfX3BbMF0gfCBfX3BbMV0gPDwgOCB8IF9fcFsyXSA8PCAxNiB8IF9fcFszXSA8PCAyNCkKKworI2RlZmluZSBfX2dldF91bmFsaWduZWRfbGUocHRyKQkJCQkJXAorCSh7CQkJCQkJCVwKKwkJX190eXBlb2ZfXygqKHB0cikpIF9fdjsJCQkJXAorCQlfX3U4ICpfX3AgPSAoX191OCAqKShwdHIpOwkJCVwKKwkJc3dpdGNoIChzaXplb2YoKihwdHIpKSkgewkJCVwKKwkJY2FzZSAxOglfX3YgPSAqKHB0cik7CQkJYnJlYWs7CVwKKwkJY2FzZSAyOiBfX3YgPSBfX2dldF91bmFsaWduZWRfMl9sZShfX3ApOwlicmVhazsJXAorCQljYXNlIDQ6IF9fdiA9IF9fZ2V0X3VuYWxpZ25lZF80X2xlKF9fcCk7CWJyZWFrOwlcCisJCWNhc2UgODogewkJCQkJXAorCQkJCXVuc2lnbmVkIGludCBfX3YxLCBfX3YyOwlcCisJCQkJX192MiA9IF9fZ2V0X3VuYWxpZ25lZF80X2xlKChfX3ArNCkpOyBcCisJCQkJX192MSA9IF9fZ2V0X3VuYWxpZ25lZF80X2xlKF9fcCk7CVwKKwkJCQlfX3YgPSAoKHVuc2lnbmVkIGxvbmcgbG9uZylfX3YyIDw8IDMyIHwgX192MSk7CVwKKwkJCX0JCQkJCVwKKwkJCWJyZWFrOwkJCQkJXAorCQlkZWZhdWx0OiBfX3YgPSBfX2J1Z191bmFsaWduZWRfeChfX3ApOwlicmVhazsJXAorCQl9CQkJCQkJXAorCQlfX3Y7CQkJCQkJXAorCX0pCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3B1dF91bmFsaWduZWRfMl9sZShfX3UzMiBfX3YsIHJlZ2lzdGVyIF9fdTggKl9fcCkKK3sKKwkqX19wKysgPSBfX3Y7CisJKl9fcCsrID0gX192ID4+IDg7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3B1dF91bmFsaWduZWRfNF9sZShfX3UzMiBfX3YsIHJlZ2lzdGVyIF9fdTggKl9fcCkKK3sKKwlfX3B1dF91bmFsaWduZWRfMl9sZShfX3YgPj4gMTYsIF9fcCArIDIpOworCV9fcHV0X3VuYWxpZ25lZF8yX2xlKF9fdiwgX19wKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fcHV0X3VuYWxpZ25lZF84X2xlKGNvbnN0IHVuc2lnbmVkIGxvbmcgbG9uZyBfX3YsIHJlZ2lzdGVyIF9fdTggKl9fcCkKK3sKKwkvKgorCSAqIHRyYWRlb2ZmOiA4IGJ5dGVzIG9mIHN0YWNrIGZvciBhbGwgdW5hbGlnbmVkIHB1dHMgKDIKKwkgKiBpbnN0cnVjdGlvbnMpLCBvciBhbiBleHRyYSByZWdpc3RlciBpbiB0aGUgbG9uZyBsb25nCisJICogY2FzZSAtIGdvIGZvciB0aGUgZXh0cmEgcmVnaXN0ZXIuCisJICovCisJX19wdXRfdW5hbGlnbmVkXzRfbGUoX192ID4+IDMyLCBfX3ArNCk7CisJX19wdXRfdW5hbGlnbmVkXzRfbGUoX192LCBfX3ApOworfQorCisvKgorICogVHJ5IHRvIHN0b3JlIGFuIHVuYWxpZ25lZCB2YWx1ZSBhcyBlZmZpY2llbnRseSBhcyBwb3NzaWJsZS4KKyAqLworI2RlZmluZSBfX3B1dF91bmFsaWduZWRfbGUodmFsLHB0cikJCQkJCVwKKwkoewkJCQkJCQlcCisJCXN3aXRjaCAoc2l6ZW9mKCoocHRyKSkpIHsJCQlcCisJCWNhc2UgMToJCQkJCQlcCisJCQkqKHB0cikgPSAodmFsKTsJCQkJXAorCQkJYnJlYWs7CQkJCQlcCisJCWNhc2UgMjogX19wdXRfdW5hbGlnbmVkXzJfbGUoKHZhbCksKF9fdTggKikocHRyKSk7CVwKKwkJCWJyZWFrOwkJCQkJXAorCQljYXNlIDQ6CV9fcHV0X3VuYWxpZ25lZF80X2xlKCh2YWwpLChfX3U4ICopKHB0cikpOwlcCisJCQlicmVhazsJCQkJCVwKKwkJY2FzZSA4OglfX3B1dF91bmFsaWduZWRfOF9sZSgodmFsKSwoX191OCAqKShwdHIpKTsgXAorCQkJYnJlYWs7CQkJCQlcCisJCWRlZmF1bHQ6IF9fYnVnX3VuYWxpZ25lZF94KHB0cik7CQlcCisJCQlicmVhazsJCQkJCVwKKwkJfQkJCQkJCVwKKwkJKHZvaWQpIDA7CQkJCQlcCisJfSkKKworLyoKKyAqIFNlbGVjdCBlbmRpYW5uZXNzCisgKi8KKyNkZWZpbmUgZ2V0X3VuYWxpZ25lZAlfX2dldF91bmFsaWduZWRfbGUKKyNkZWZpbmUgcHV0X3VuYWxpZ25lZAlfX3B1dF91bmFsaWduZWRfbGUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi91bmNvbXByZXNzLmggYi9pbmNsdWRlL2FzbS1hcm0yNi91bmNvbXByZXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGYyY2JhOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybTI2L3VuY29tcHJlc3MuaApAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hcmMvdW5jb21wcmVzcy5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NiBSdXNzZWxsIEtpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjZGVmaW5lIFZJRE1FTSAoKGNoYXIgKikweDAyMDAwMDAwKQorIAoraW50IHZpZGVvX251bV9jb2x1bW5zLCB2aWRlb19udW1fbGluZXMsIHZpZGVvX3NpemVfcm93OworaW50IHdoaXRlLCBieXRlc19wZXJfY2hhcl9oOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgY29uX2NoYXJjb252dGFibGVbMjU2XTsKKworc3RydWN0IHBhcmFtX3N0cnVjdCB7CisJdW5zaWduZWQgbG9uZyBwYWdlX3NpemU7CisJdW5zaWduZWQgbG9uZyBucl9wYWdlczsKKwl1bnNpZ25lZCBsb25nIHJhbWRpc2tfc2l6ZTsKKwl1bnNpZ25lZCBsb25nIG1vdW50cm9vdHJkb25seTsKKwl1bnNpZ25lZCBsb25nIHJvb3RkZXY7CisJdW5zaWduZWQgbG9uZyB2aWRlb19udW1fY29sczsKKwl1bnNpZ25lZCBsb25nIHZpZGVvX251bV9yb3dzOworCXVuc2lnbmVkIGxvbmcgdmlkZW9feDsKKwl1bnNpZ25lZCBsb25nIHZpZGVvX3k7CisJdW5zaWduZWQgbG9uZyBtZW1jX2NvbnRyb2xfcmVnOworCXVuc2lnbmVkIGNoYXIgc291bmRkZWZhdWx0OworCXVuc2lnbmVkIGNoYXIgYWRmc2RyaXZlczsKKwl1bnNpZ25lZCBjaGFyIGJ5dGVzX3Blcl9jaGFyX2g7CisJdW5zaWduZWQgY2hhciBieXRlc19wZXJfY2hhcl92OworCXVuc2lnbmVkIGxvbmcgdW51c2VkWzI1Ni80LTExXTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGFyYW1fc3RydWN0ICpwYXJhbXMgPSAoc3RydWN0IHBhcmFtX3N0cnVjdCAqKTB4MDIwN2MwMDA7CisgCisvKgorICogVGhpcyBkb2VzIG5vdCBhcHBlbmQgYSBuZXdsaW5lCisgKi8KK3N0YXRpYyB2b2lkIHB1dHMoY29uc3QgY2hhciAqcykKK3sKKwlleHRlcm4gdm9pZCBsbF93cml0ZV9jaGFyKGNoYXIgKiwgdW5zaWduZWQgbG9uZyk7CisJaW50IHgseTsKKwl1bnNpZ25lZCBjaGFyIGM7CisJY2hhciAqcHRyOworCisJeCA9IHBhcmFtcy0+dmlkZW9feDsKKwl5ID0gcGFyYW1zLT52aWRlb195OworCisJd2hpbGUgKCAoIGMgPSAqKHVuc2lnbmVkIGNoYXIgKilzKysgKSAhPSAnXDAnICkgeworCQlpZiAoIGMgPT0gJ1xuJyApIHsKKwkJCXggPSAwOworCQkJaWYgKCArK3kgPj0gdmlkZW9fbnVtX2xpbmVzICkgeworCQkJCXktLTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXB0ciA9IFZJRE1FTSArICgoeSp2aWRlb19udW1fY29sdW1ucypwYXJhbXMtPmJ5dGVzX3Blcl9jaGFyX3YreCkqYnl0ZXNfcGVyX2NoYXJfaCk7CisJCQlsbF93cml0ZV9jaGFyKHB0ciwgY3wod2hpdGU8PDE2KSk7CisJCQlpZiAoICsreCA+PSB2aWRlb19udW1fY29sdW1ucyApIHsKKwkJCQl4ID0gMDsKKwkJCQlpZiAoICsreSA+PSB2aWRlb19udW1fbGluZXMgKSB7CisJCQkJCXktLTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwlwYXJhbXMtPnZpZGVvX3ggPSB4OworCXBhcmFtcy0+dmlkZW9feSA9IHk7Cit9CisKK3N0YXRpYyB2b2lkIGVycm9yKGNoYXIgKngpOworCisvKgorICogU2V0dXAgZm9yIGRlY29tcHJlc3Npb24KKyAqLworc3RhdGljIHZvaWQgYXJjaF9kZWNvbXBfc2V0dXAodm9pZCkKK3sKKwlpbnQgaTsKKwkKKwl2aWRlb19udW1fbGluZXMgPSBwYXJhbXMtPnZpZGVvX251bV9yb3dzOworCXZpZGVvX251bV9jb2x1bW5zID0gcGFyYW1zLT52aWRlb19udW1fY29sczsKKwlieXRlc19wZXJfY2hhcl9oID0gcGFyYW1zLT5ieXRlc19wZXJfY2hhcl9oOworCXZpZGVvX3NpemVfcm93ID0gdmlkZW9fbnVtX2NvbHVtbnMgKiBieXRlc19wZXJfY2hhcl9oOworCWlmIChieXRlc19wZXJfY2hhcl9oID09IDQpCisJCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKKwkJCWNvbl9jaGFyY29udnRhYmxlW2ldID0KKwkJCQkoaSAmIDEyOCA/IDEgPDwgMCAgOiAwKSB8CisJCQkJKGkgJiA2NCAgPyAxIDw8IDQgIDogMCkgfAorCQkJCShpICYgMzIgID8gMSA8PCA4ICA6IDApIHwKKwkJCQkoaSAmIDE2ICA/IDEgPDwgMTIgOiAwKSB8CisJCQkJKGkgJiA4ICAgPyAxIDw8IDE2IDogMCkgfAorCQkJCShpICYgNCAgID8gMSA8PCAyMCA6IDApIHwKKwkJCQkoaSAmIDIgICA/IDEgPDwgMjQgOiAwKSB8CisJCQkJKGkgJiAxICAgPyAxIDw8IDI4IDogMCk7CisJZWxzZQorCQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKKwkJCWNvbl9jaGFyY29udnRhYmxlW2ldID0KKwkJCQkoaSAmIDggICA/IDEgPDwgMCAgOiAwKSB8CisJCQkJKGkgJiA0ICAgPyAxIDw8IDggIDogMCkgfAorCQkJCShpICYgMiAgID8gMSA8PCAxNiA6IDApIHwKKwkJCQkoaSAmIDEgICA/IDEgPDwgMjQgOiAwKTsKKworCXdoaXRlID0gYnl0ZXNfcGVyX2NoYXJfaCA9PSA4ID8gMHhmYyA6IDc7CisKKwlpZiAocGFyYW1zLT5ucl9wYWdlcyAqIHBhcmFtcy0+cGFnZV9zaXplIDwgNDA5NioxMDI0KSBlcnJvcigiPDRNIG9mIG1lbVxuIik7Cit9CisKKy8qCisgKiBub3RoaW5nIHRvIGRvCisgKi8KKyNkZWZpbmUgYXJjaF9kZWNvbXBfd2RvZygpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLWFybTI2L3VuaXN0ZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmYTBiMGMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0yNi91bmlzdGQuaApAQCAtMCwwICsxLDUwMCBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vdW5pc3RkLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDMgUnVzc2VsbCBLaW5nCisgKiAgTW9kaWZpZWQgMjUvMTEvMDQgSWFuIE1vbHRvbiBmb3IgYXJtMjYuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBQbGVhc2UgZm9yd2FyZCBfYWxsXyBjaGFuZ2VzIHRvIHRoaXMgZmlsZSB0byBzcHlyb0BmMnMuY29tCisgKiBubyBtYXR0ZXIgd2hhdCB0aGUgY2hhbmdlIGlzLiAgVGhhbmtzIQorICovCisjaWZuZGVmIF9fQVNNX0FSTV9VTklTVERfSAorI2RlZmluZSBfX0FTTV9BUk1fVU5JU1REX0gKKworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKworI2RlZmluZSBfX05SX1NZU0NBTExfQkFTRQkweDkwMDAwMAorCisvKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBzeXN0ZW0gY2FsbCBudW1iZXJzLgorICovCisKKyNkZWZpbmUgX19OUl9yZXN0YXJ0X3N5c2NhbGwJCShfX05SX1NZU0NBTExfQkFTRSsgIDApCisjZGVmaW5lIF9fTlJfZXhpdAkJCShfX05SX1NZU0NBTExfQkFTRSsgIDEpCisjZGVmaW5lIF9fTlJfZm9yawkJCShfX05SX1NZU0NBTExfQkFTRSsgIDIpCisjZGVmaW5lIF9fTlJfcmVhZAkJCShfX05SX1NZU0NBTExfQkFTRSsgIDMpCisjZGVmaW5lIF9fTlJfd3JpdGUJCQkoX19OUl9TWVNDQUxMX0JBU0UrICA0KQorI2RlZmluZSBfX05SX29wZW4JCQkoX19OUl9TWVNDQUxMX0JBU0UrICA1KQorI2RlZmluZSBfX05SX2Nsb3NlCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyAgNikKKwkJCQkJLyogNyB3YXMgc3lzX3dhaXRwaWQgKi8KKyNkZWZpbmUgX19OUl9jcmVhdAkJCShfX05SX1NZU0NBTExfQkFTRSsgIDgpCisjZGVmaW5lIF9fTlJfbGluawkJCShfX05SX1NZU0NBTExfQkFTRSsgIDkpCisjZGVmaW5lIF9fTlJfdW5saW5rCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyAxMCkKKyNkZWZpbmUgX19OUl9leGVjdmUJCQkoX19OUl9TWVNDQUxMX0JBU0UrIDExKQorI2RlZmluZSBfX05SX2NoZGlyCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyAxMikKKyNkZWZpbmUgX19OUl90aW1lCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyAxMykKKyNkZWZpbmUgX19OUl9ta25vZAkJCShfX05SX1NZU0NBTExfQkFTRSsgMTQpCisjZGVmaW5lIF9fTlJfY2htb2QJCQkoX19OUl9TWVNDQUxMX0JBU0UrIDE1KQorI2RlZmluZSBfX05SX2xjaG93bgkJCShfX05SX1NZU0NBTExfQkFTRSsgMTYpCisJCQkJCS8qIDE3IHdhcyBzeXNfYnJlYWsgKi8KKwkJCQkJLyogMTggd2FzIHN5c19zdGF0ICovCisjZGVmaW5lIF9fTlJfbHNlZWsJCQkoX19OUl9TWVNDQUxMX0JBU0UrIDE5KQorI2RlZmluZSBfX05SX2dldHBpZAkJCShfX05SX1NZU0NBTExfQkFTRSsgMjApCisjZGVmaW5lIF9fTlJfbW91bnQJCQkoX19OUl9TWVNDQUxMX0JBU0UrIDIxKQorI2RlZmluZSBfX05SX3Vtb3VudAkJCShfX05SX1NZU0NBTExfQkFTRSsgMjIpCisjZGVmaW5lIF9fTlJfc2V0dWlkCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyAyMykKKyNkZWZpbmUgX19OUl9nZXR1aWQJCQkoX19OUl9TWVNDQUxMX0JBU0UrIDI0KQorI2RlZmluZSBfX05SX3N0aW1lCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyAyNSkKKyNkZWZpbmUgX19OUl9wdHJhY2UJCQkoX19OUl9TWVNDQUxMX0JBU0UrIDI2KQorI2RlZmluZSBfX05SX2FsYXJtCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyAyNykKKwkJCQkJLyogMjggd2FzIHN5c19mc3RhdCAqLworI2RlZmluZSBfX05SX3BhdXNlCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyAyOSkKKyNkZWZpbmUgX19OUl91dGltZQkJCShfX05SX1NZU0NBTExfQkFTRSsgMzApCisJCQkJCS8qIDMxIHdhcyBzeXNfc3R0eSAqLworCQkJCQkvKiAzMiB3YXMgc3lzX2d0dHkgKi8KKyNkZWZpbmUgX19OUl9hY2Nlc3MJCQkoX19OUl9TWVNDQUxMX0JBU0UrIDMzKQorI2RlZmluZSBfX05SX25pY2UJCQkoX19OUl9TWVNDQUxMX0JBU0UrIDM0KQorCQkJCQkvKiAzNSB3YXMgc3lzX2Z0aW1lICovCisjZGVmaW5lIF9fTlJfc3luYwkJCShfX05SX1NZU0NBTExfQkFTRSsgMzYpCisjZGVmaW5lIF9fTlJfa2lsbAkJCShfX05SX1NZU0NBTExfQkFTRSsgMzcpCisjZGVmaW5lIF9fTlJfcmVuYW1lCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyAzOCkKKyNkZWZpbmUgX19OUl9ta2RpcgkJCShfX05SX1NZU0NBTExfQkFTRSsgMzkpCisjZGVmaW5lIF9fTlJfcm1kaXIJCQkoX19OUl9TWVNDQUxMX0JBU0UrIDQwKQorI2RlZmluZSBfX05SX2R1cAkJCShfX05SX1NZU0NBTExfQkFTRSsgNDEpCisjZGVmaW5lIF9fTlJfcGlwZQkJCShfX05SX1NZU0NBTExfQkFTRSsgNDIpCisjZGVmaW5lIF9fTlJfdGltZXMJCQkoX19OUl9TWVNDQUxMX0JBU0UrIDQzKQorCQkJCQkvKiA0NCB3YXMgc3lzX3Byb2YgKi8KKyNkZWZpbmUgX19OUl9icmsJCQkoX19OUl9TWVNDQUxMX0JBU0UrIDQ1KQorI2RlZmluZSBfX05SX3NldGdpZAkJCShfX05SX1NZU0NBTExfQkFTRSsgNDYpCisjZGVmaW5lIF9fTlJfZ2V0Z2lkCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyA0NykKKwkJCQkJLyogNDggd2FzIHN5c19zaWduYWwgKi8KKyNkZWZpbmUgX19OUl9nZXRldWlkCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyA0OSkKKyNkZWZpbmUgX19OUl9nZXRlZ2lkCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyA1MCkKKyNkZWZpbmUgX19OUl9hY2N0CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyA1MSkKKyNkZWZpbmUgX19OUl91bW91bnQyCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyA1MikKKwkJCQkJLyogNTMgd2FzIHN5c19sb2NrICovCisjZGVmaW5lIF9fTlJfaW9jdGwJCQkoX19OUl9TWVNDQUxMX0JBU0UrIDU0KQorI2RlZmluZSBfX05SX2ZjbnRsCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyA1NSkKKwkJCQkJLyogNTYgd2FzIHN5c19tcHggKi8KKyNkZWZpbmUgX19OUl9zZXRwZ2lkCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyA1NykKKwkJCQkJLyogNTggd2FzIHN5c191bGltaXQgKi8KKwkJCQkJLyogNTkgd2FzIHN5c19vbGR1bmFtZSAqLworI2RlZmluZSBfX05SX3VtYXNrCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyA2MCkKKyNkZWZpbmUgX19OUl9jaHJvb3QJCQkoX19OUl9TWVNDQUxMX0JBU0UrIDYxKQorI2RlZmluZSBfX05SX3VzdGF0CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyA2MikKKyNkZWZpbmUgX19OUl9kdXAyCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyA2MykKKyNkZWZpbmUgX19OUl9nZXRwcGlkCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyA2NCkKKyNkZWZpbmUgX19OUl9nZXRwZ3JwCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyA2NSkKKyNkZWZpbmUgX19OUl9zZXRzaWQJCQkoX19OUl9TWVNDQUxMX0JBU0UrIDY2KQorI2RlZmluZSBfX05SX3NpZ2FjdGlvbgkJCShfX05SX1NZU0NBTExfQkFTRSsgNjcpCisJCQkJCS8qIDY4IHdhcyBzeXNfc2dldG1hc2sgKi8KKwkJCQkJLyogNjkgd2FzIHN5c19zc2V0bWFzayAqLworI2RlZmluZSBfX05SX3NldHJldWlkCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyA3MCkKKyNkZWZpbmUgX19OUl9zZXRyZWdpZAkJCShfX05SX1NZU0NBTExfQkFTRSsgNzEpCisjZGVmaW5lIF9fTlJfc2lnc3VzcGVuZAkJCShfX05SX1NZU0NBTExfQkFTRSsgNzIpCisjZGVmaW5lIF9fTlJfc2lncGVuZGluZwkJCShfX05SX1NZU0NBTExfQkFTRSsgNzMpCisjZGVmaW5lIF9fTlJfc2V0aG9zdG5hbWUJCShfX05SX1NZU0NBTExfQkFTRSsgNzQpCisjZGVmaW5lIF9fTlJfc2V0cmxpbWl0CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyA3NSkKKyNkZWZpbmUgX19OUl9nZXRybGltaXQJCQkoX19OUl9TWVNDQUxMX0JBU0UrIDc2KQkvKiBCYWNrIGNvbXBhdCAyR0IgbGltaXRlZCBybGltaXQgKi8KKyNkZWZpbmUgX19OUl9nZXRydXNhZ2UJCQkoX19OUl9TWVNDQUxMX0JBU0UrIDc3KQorI2RlZmluZSBfX05SX2dldHRpbWVvZmRheQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyA3OCkKKyNkZWZpbmUgX19OUl9zZXR0aW1lb2ZkYXkJCShfX05SX1NZU0NBTExfQkFTRSsgNzkpCisjZGVmaW5lIF9fTlJfZ2V0Z3JvdXBzCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyA4MCkKKyNkZWZpbmUgX19OUl9zZXRncm91cHMJCQkoX19OUl9TWVNDQUxMX0JBU0UrIDgxKQorI2RlZmluZSBfX05SX3NlbGVjdAkJCShfX05SX1NZU0NBTExfQkFTRSsgODIpCisjZGVmaW5lIF9fTlJfc3ltbGluawkJCShfX05SX1NZU0NBTExfQkFTRSsgODMpCisJCQkJCS8qIDg0IHdhcyBzeXNfbHN0YXQgKi8KKyNkZWZpbmUgX19OUl9yZWFkbGluawkJCShfX05SX1NZU0NBTExfQkFTRSsgODUpCisjZGVmaW5lIF9fTlJfdXNlbGliCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyA4NikKKyNkZWZpbmUgX19OUl9zd2Fwb24JCQkoX19OUl9TWVNDQUxMX0JBU0UrIDg3KQorI2RlZmluZSBfX05SX3JlYm9vdAkJCShfX05SX1NZU0NBTExfQkFTRSsgODgpCisjZGVmaW5lIF9fTlJfcmVhZGRpcgkJCShfX05SX1NZU0NBTExfQkFTRSsgODkpCisjZGVmaW5lIF9fTlJfbW1hcAkJCShfX05SX1NZU0NBTExfQkFTRSsgOTApCisjZGVmaW5lIF9fTlJfbXVubWFwCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyA5MSkKKyNkZWZpbmUgX19OUl90cnVuY2F0ZQkJCShfX05SX1NZU0NBTExfQkFTRSsgOTIpCisjZGVmaW5lIF9fTlJfZnRydW5jYXRlCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyA5MykKKyNkZWZpbmUgX19OUl9mY2htb2QJCQkoX19OUl9TWVNDQUxMX0JBU0UrIDk0KQorI2RlZmluZSBfX05SX2ZjaG93bgkJCShfX05SX1NZU0NBTExfQkFTRSsgOTUpCisjZGVmaW5lIF9fTlJfZ2V0cHJpb3JpdHkJCShfX05SX1NZU0NBTExfQkFTRSsgOTYpCisjZGVmaW5lIF9fTlJfc2V0cHJpb3JpdHkJCShfX05SX1NZU0NBTExfQkFTRSsgOTcpCisJCQkJCS8qIDk4IHdhcyBzeXNfcHJvZmlsICovCisjZGVmaW5lIF9fTlJfc3RhdGZzCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyA5OSkKKyNkZWZpbmUgX19OUl9mc3RhdGZzCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzEwMCkKKwkJCQkJLyogMTAxIHdhcyBzeXNfaW9wZXJtICovCisjZGVmaW5lIF9fTlJfc29ja2V0Y2FsbAkJCShfX05SX1NZU0NBTExfQkFTRSsxMDIpCisjZGVmaW5lIF9fTlJfc3lzbG9nCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzEwMykKKyNkZWZpbmUgX19OUl9zZXRpdGltZXIJCQkoX19OUl9TWVNDQUxMX0JBU0UrMTA0KQorI2RlZmluZSBfX05SX2dldGl0aW1lcgkJCShfX05SX1NZU0NBTExfQkFTRSsxMDUpCisjZGVmaW5lIF9fTlJfc3RhdAkJCShfX05SX1NZU0NBTExfQkFTRSsxMDYpCisjZGVmaW5lIF9fTlJfbHN0YXQJCQkoX19OUl9TWVNDQUxMX0JBU0UrMTA3KQorI2RlZmluZSBfX05SX2ZzdGF0CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzEwOCkKKwkJCQkJLyogMTA5IHdhcyBzeXNfdW5hbWUgKi8KKwkJCQkJLyogMTEwIHdhcyBzeXNfaW9wbCAqLworI2RlZmluZSBfX05SX3ZoYW5ndXAJCQkoX19OUl9TWVNDQUxMX0JBU0UrMTExKQorCQkJCQkvKiAxMTIgd2FzIHN5c19pZGxlICovCisjZGVmaW5lIF9fTlJfc3lzY2FsbAkJCShfX05SX1NZU0NBTExfQkFTRSsxMTMpIC8qIHN5c2NhbGwgdG8gY2FsbCBhIHN5c2NhbGwhICovCisjZGVmaW5lIF9fTlJfd2FpdDQJCQkoX19OUl9TWVNDQUxMX0JBU0UrMTE0KQorI2RlZmluZSBfX05SX3N3YXBvZmYJCQkoX19OUl9TWVNDQUxMX0JBU0UrMTE1KQorI2RlZmluZSBfX05SX3N5c2luZm8JCQkoX19OUl9TWVNDQUxMX0JBU0UrMTE2KQorI2RlZmluZSBfX05SX2lwYwkJCShfX05SX1NZU0NBTExfQkFTRSsxMTcpCisjZGVmaW5lIF9fTlJfZnN5bmMJCQkoX19OUl9TWVNDQUxMX0JBU0UrMTE4KQorI2RlZmluZSBfX05SX3NpZ3JldHVybgkJCShfX05SX1NZU0NBTExfQkFTRSsxMTkpCisjZGVmaW5lIF9fTlJfY2xvbmUJCQkoX19OUl9TWVNDQUxMX0JBU0UrMTIwKQorI2RlZmluZSBfX05SX3NldGRvbWFpbm5hbWUJCShfX05SX1NZU0NBTExfQkFTRSsxMjEpCisjZGVmaW5lIF9fTlJfdW5hbWUJCQkoX19OUl9TWVNDQUxMX0JBU0UrMTIyKQorCQkJCQkvKiAxMjMgd2FzIHN5c19tb2RpZnlfbGR0ICovCisjZGVmaW5lIF9fTlJfYWRqdGltZXgJCQkoX19OUl9TWVNDQUxMX0JBU0UrMTI0KQorI2RlZmluZSBfX05SX21wcm90ZWN0CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzEyNSkKKyNkZWZpbmUgX19OUl9zaWdwcm9jbWFzawkJKF9fTlJfU1lTQ0FMTF9CQVNFKzEyNikKKwkJCQkJLyogMTI3IHdhcyBzeXNfY3JlYXRlX21vZHVsZSAqLworI2RlZmluZSBfX05SX2luaXRfbW9kdWxlCQkoX19OUl9TWVNDQUxMX0JBU0UrMTI4KQorI2RlZmluZSBfX05SX2RlbGV0ZV9tb2R1bGUJCShfX05SX1NZU0NBTExfQkFTRSsxMjkpCisJCQkJCS8qIDEzMCB3YXMgc3lzX2dldF9rZXJuZWxfc3ltcyAqLworI2RlZmluZSBfX05SX3F1b3RhY3RsCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzEzMSkKKyNkZWZpbmUgX19OUl9nZXRwZ2lkCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzEzMikKKyNkZWZpbmUgX19OUl9mY2hkaXIJCQkoX19OUl9TWVNDQUxMX0JBU0UrMTMzKQorI2RlZmluZSBfX05SX2JkZmx1c2gJCQkoX19OUl9TWVNDQUxMX0JBU0UrMTM0KQorI2RlZmluZSBfX05SX3N5c2ZzCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzEzNSkKKyNkZWZpbmUgX19OUl9wZXJzb25hbGl0eQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzEzNikKKwkJCQkJLyogMTM3IHdhcyBzeXNfYWZzX3N5c2NhbGwgKi8KKyNkZWZpbmUgX19OUl9zZXRmc3VpZAkJCShfX05SX1NZU0NBTExfQkFTRSsxMzgpCisjZGVmaW5lIF9fTlJfc2V0ZnNnaWQJCQkoX19OUl9TWVNDQUxMX0JBU0UrMTM5KQorI2RlZmluZSBfX05SX19sbHNlZWsJCQkoX19OUl9TWVNDQUxMX0JBU0UrMTQwKQorI2RlZmluZSBfX05SX2dldGRlbnRzCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzE0MSkKKyNkZWZpbmUgX19OUl9fbmV3c2VsZWN0CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzE0MikKKyNkZWZpbmUgX19OUl9mbG9jawkJCShfX05SX1NZU0NBTExfQkFTRSsxNDMpCisjZGVmaW5lIF9fTlJfbXN5bmMJCQkoX19OUl9TWVNDQUxMX0JBU0UrMTQ0KQorI2RlZmluZSBfX05SX3JlYWR2CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzE0NSkKKyNkZWZpbmUgX19OUl93cml0ZXYJCQkoX19OUl9TWVNDQUxMX0JBU0UrMTQ2KQorI2RlZmluZSBfX05SX2dldHNpZAkJCShfX05SX1NZU0NBTExfQkFTRSsxNDcpCisjZGVmaW5lIF9fTlJfZmRhdGFzeW5jCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzE0OCkKKyNkZWZpbmUgX19OUl9fc3lzY3RsCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzE0OSkKKyNkZWZpbmUgX19OUl9tbG9jawkJCShfX05SX1NZU0NBTExfQkFTRSsxNTApCisjZGVmaW5lIF9fTlJfbXVubG9jawkJCShfX05SX1NZU0NBTExfQkFTRSsxNTEpCisjZGVmaW5lIF9fTlJfbWxvY2thbGwJCQkoX19OUl9TWVNDQUxMX0JBU0UrMTUyKQorI2RlZmluZSBfX05SX211bmxvY2thbGwJCQkoX19OUl9TWVNDQUxMX0JBU0UrMTUzKQorI2RlZmluZSBfX05SX3NjaGVkX3NldHBhcmFtCQkoX19OUl9TWVNDQUxMX0JBU0UrMTU0KQorI2RlZmluZSBfX05SX3NjaGVkX2dldHBhcmFtCQkoX19OUl9TWVNDQUxMX0JBU0UrMTU1KQorI2RlZmluZSBfX05SX3NjaGVkX3NldHNjaGVkdWxlcgkJKF9fTlJfU1lTQ0FMTF9CQVNFKzE1NikKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRzY2hlZHVsZXIJCShfX05SX1NZU0NBTExfQkFTRSsxNTcpCisjZGVmaW5lIF9fTlJfc2NoZWRfeWllbGQJCShfX05SX1NZU0NBTExfQkFTRSsxNTgpCisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21heAkoX19OUl9TWVNDQUxMX0JBU0UrMTU5KQorI2RlZmluZSBfX05SX3NjaGVkX2dldF9wcmlvcml0eV9taW4JKF9fTlJfU1lTQ0FMTF9CQVNFKzE2MCkKKyNkZWZpbmUgX19OUl9zY2hlZF9ycl9nZXRfaW50ZXJ2YWwJKF9fTlJfU1lTQ0FMTF9CQVNFKzE2MSkKKyNkZWZpbmUgX19OUl9uYW5vc2xlZXAJCQkoX19OUl9TWVNDQUxMX0JBU0UrMTYyKQorI2RlZmluZSBfX05SX21yZW1hcAkJCShfX05SX1NZU0NBTExfQkFTRSsxNjMpCisjZGVmaW5lIF9fTlJfc2V0cmVzdWlkCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzE2NCkKKyNkZWZpbmUgX19OUl9nZXRyZXN1aWQJCQkoX19OUl9TWVNDQUxMX0JBU0UrMTY1KQorCQkJCQkvKiAxNjYgd2FzIHN5c192bTg2ICovCisJCQkJCS8qIDE2NyB3YXMgc3lzX3F1ZXJ5X21vZHVsZSAqLworI2RlZmluZSBfX05SX3BvbGwJCQkoX19OUl9TWVNDQUxMX0JBU0UrMTY4KQorI2RlZmluZSBfX05SX25mc3NlcnZjdGwJCQkoX19OUl9TWVNDQUxMX0JBU0UrMTY5KQorI2RlZmluZSBfX05SX3NldHJlc2dpZAkJCShfX05SX1NZU0NBTExfQkFTRSsxNzApCisjZGVmaW5lIF9fTlJfZ2V0cmVzZ2lkCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzE3MSkKKyNkZWZpbmUgX19OUl9wcmN0bAkJCShfX05SX1NZU0NBTExfQkFTRSsxNzIpCisjZGVmaW5lIF9fTlJfcnRfc2lncmV0dXJuCQkoX19OUl9TWVNDQUxMX0JBU0UrMTczKQorI2RlZmluZSBfX05SX3J0X3NpZ2FjdGlvbgkJKF9fTlJfU1lTQ0FMTF9CQVNFKzE3NCkKKyNkZWZpbmUgX19OUl9ydF9zaWdwcm9jbWFzawkJKF9fTlJfU1lTQ0FMTF9CQVNFKzE3NSkKKyNkZWZpbmUgX19OUl9ydF9zaWdwZW5kaW5nCQkoX19OUl9TWVNDQUxMX0JBU0UrMTc2KQorI2RlZmluZSBfX05SX3J0X3NpZ3RpbWVkd2FpdAkJKF9fTlJfU1lTQ0FMTF9CQVNFKzE3NykKKyNkZWZpbmUgX19OUl9ydF9zaWdxdWV1ZWluZm8JCShfX05SX1NZU0NBTExfQkFTRSsxNzgpCisjZGVmaW5lIF9fTlJfcnRfc2lnc3VzcGVuZAkJKF9fTlJfU1lTQ0FMTF9CQVNFKzE3OSkKKyNkZWZpbmUgX19OUl9wcmVhZDY0CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzE4MCkKKyNkZWZpbmUgX19OUl9wd3JpdGU2NAkJCShfX05SX1NZU0NBTExfQkFTRSsxODEpCisjZGVmaW5lIF9fTlJfY2hvd24JCQkoX19OUl9TWVNDQUxMX0JBU0UrMTgyKQorI2RlZmluZSBfX05SX2dldGN3ZAkJCShfX05SX1NZU0NBTExfQkFTRSsxODMpCisjZGVmaW5lIF9fTlJfY2FwZ2V0CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzE4NCkKKyNkZWZpbmUgX19OUl9jYXBzZXQJCQkoX19OUl9TWVNDQUxMX0JBU0UrMTg1KQorI2RlZmluZSBfX05SX3NpZ2FsdHN0YWNrCQkoX19OUl9TWVNDQUxMX0JBU0UrMTg2KQorI2RlZmluZSBfX05SX3NlbmRmaWxlCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzE4NykKKwkJCQkJLyogMTg4IHJlc2VydmVkICovCisJCQkJCS8qIDE4OSByZXNlcnZlZCAqLworI2RlZmluZSBfX05SX3Zmb3JrCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzE5MCkKKyNkZWZpbmUgX19OUl91Z2V0cmxpbWl0CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzE5MSkJLyogU3VTIGNvbXBsaWFudCBnZXRybGltaXQgKi8KKyNkZWZpbmUgX19OUl9tbWFwMgkJCShfX05SX1NZU0NBTExfQkFTRSsxOTIpCisjZGVmaW5lIF9fTlJfdHJ1bmNhdGU2NAkJCShfX05SX1NZU0NBTExfQkFTRSsxOTMpCisjZGVmaW5lIF9fTlJfZnRydW5jYXRlNjQJCShfX05SX1NZU0NBTExfQkFTRSsxOTQpCisjZGVmaW5lIF9fTlJfc3RhdDY0CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzE5NSkKKyNkZWZpbmUgX19OUl9sc3RhdDY0CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzE5NikKKyNkZWZpbmUgX19OUl9mc3RhdDY0CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzE5NykKKyNkZWZpbmUgX19OUl9sY2hvd24zMgkJCShfX05SX1NZU0NBTExfQkFTRSsxOTgpCisjZGVmaW5lIF9fTlJfZ2V0dWlkMzIJCQkoX19OUl9TWVNDQUxMX0JBU0UrMTk5KQorI2RlZmluZSBfX05SX2dldGdpZDMyCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzIwMCkKKyNkZWZpbmUgX19OUl9nZXRldWlkMzIJCQkoX19OUl9TWVNDQUxMX0JBU0UrMjAxKQorI2RlZmluZSBfX05SX2dldGVnaWQzMgkJCShfX05SX1NZU0NBTExfQkFTRSsyMDIpCisjZGVmaW5lIF9fTlJfc2V0cmV1aWQzMgkJCShfX05SX1NZU0NBTExfQkFTRSsyMDMpCisjZGVmaW5lIF9fTlJfc2V0cmVnaWQzMgkJCShfX05SX1NZU0NBTExfQkFTRSsyMDQpCisjZGVmaW5lIF9fTlJfZ2V0Z3JvdXBzMzIJCShfX05SX1NZU0NBTExfQkFTRSsyMDUpCisjZGVmaW5lIF9fTlJfc2V0Z3JvdXBzMzIJCShfX05SX1NZU0NBTExfQkFTRSsyMDYpCisjZGVmaW5lIF9fTlJfZmNob3duMzIJCQkoX19OUl9TWVNDQUxMX0JBU0UrMjA3KQorI2RlZmluZSBfX05SX3NldHJlc3VpZDMyCQkoX19OUl9TWVNDQUxMX0JBU0UrMjA4KQorI2RlZmluZSBfX05SX2dldHJlc3VpZDMyCQkoX19OUl9TWVNDQUxMX0JBU0UrMjA5KQorI2RlZmluZSBfX05SX3NldHJlc2dpZDMyCQkoX19OUl9TWVNDQUxMX0JBU0UrMjEwKQorI2RlZmluZSBfX05SX2dldHJlc2dpZDMyCQkoX19OUl9TWVNDQUxMX0JBU0UrMjExKQorI2RlZmluZSBfX05SX2Nob3duMzIJCQkoX19OUl9TWVNDQUxMX0JBU0UrMjEyKQorI2RlZmluZSBfX05SX3NldHVpZDMyCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzIxMykKKyNkZWZpbmUgX19OUl9zZXRnaWQzMgkJCShfX05SX1NZU0NBTExfQkFTRSsyMTQpCisjZGVmaW5lIF9fTlJfc2V0ZnN1aWQzMgkJCShfX05SX1NZU0NBTExfQkFTRSsyMTUpCisjZGVmaW5lIF9fTlJfc2V0ZnNnaWQzMgkJCShfX05SX1NZU0NBTExfQkFTRSsyMTYpCisjZGVmaW5lIF9fTlJfZ2V0ZGVudHM2NAkJCShfX05SX1NZU0NBTExfQkFTRSsyMTcpCisjZGVmaW5lIF9fTlJfcGl2b3Rfcm9vdAkJCShfX05SX1NZU0NBTExfQkFTRSsyMTgpCisjZGVmaW5lIF9fTlJfbWluY29yZQkJCShfX05SX1NZU0NBTExfQkFTRSsyMTkpCisjZGVmaW5lIF9fTlJfbWFkdmlzZQkJCShfX05SX1NZU0NBTExfQkFTRSsyMjApCisjZGVmaW5lIF9fTlJfZmNudGw2NAkJCShfX05SX1NZU0NBTExfQkFTRSsyMjEpCisJCQkJCS8qIDIyMiBmb3IgdHV4ICovCisJCQkJCS8qIDIyMyBpcyB1bnVzZWQgKi8KKyNkZWZpbmUgX19OUl9nZXR0aWQJCQkoX19OUl9TWVNDQUxMX0JBU0UrMjI0KQorI2RlZmluZSBfX05SX3JlYWRhaGVhZAkJCShfX05SX1NZU0NBTExfQkFTRSsyMjUpCisjZGVmaW5lIF9fTlJfc2V0eGF0dHIJCQkoX19OUl9TWVNDQUxMX0JBU0UrMjI2KQorI2RlZmluZSBfX05SX2xzZXR4YXR0cgkJCShfX05SX1NZU0NBTExfQkFTRSsyMjcpCisjZGVmaW5lIF9fTlJfZnNldHhhdHRyCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzIyOCkKKyNkZWZpbmUgX19OUl9nZXR4YXR0cgkJCShfX05SX1NZU0NBTExfQkFTRSsyMjkpCisjZGVmaW5lIF9fTlJfbGdldHhhdHRyCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzIzMCkKKyNkZWZpbmUgX19OUl9mZ2V0eGF0dHIJCQkoX19OUl9TWVNDQUxMX0JBU0UrMjMxKQorI2RlZmluZSBfX05SX2xpc3R4YXR0cgkJCShfX05SX1NZU0NBTExfQkFTRSsyMzIpCisjZGVmaW5lIF9fTlJfbGxpc3R4YXR0cgkJCShfX05SX1NZU0NBTExfQkFTRSsyMzMpCisjZGVmaW5lIF9fTlJfZmxpc3R4YXR0cgkJCShfX05SX1NZU0NBTExfQkFTRSsyMzQpCisjZGVmaW5lIF9fTlJfcmVtb3ZleGF0dHIJCShfX05SX1NZU0NBTExfQkFTRSsyMzUpCisjZGVmaW5lIF9fTlJfbHJlbW92ZXhhdHRyCQkoX19OUl9TWVNDQUxMX0JBU0UrMjM2KQorI2RlZmluZSBfX05SX2ZyZW1vdmV4YXR0cgkJKF9fTlJfU1lTQ0FMTF9CQVNFKzIzNykKKyNkZWZpbmUgX19OUl90a2lsbAkJCShfX05SX1NZU0NBTExfQkFTRSsyMzgpCisjZGVmaW5lIF9fTlJfc2VuZGZpbGU2NAkJCShfX05SX1NZU0NBTExfQkFTRSsyMzkpCisjZGVmaW5lIF9fTlJfZnV0ZXgJCQkoX19OUl9TWVNDQUxMX0JBU0UrMjQwKQorI2RlZmluZSBfX05SX3NjaGVkX3NldGFmZmluaXR5CQkoX19OUl9TWVNDQUxMX0JBU0UrMjQxKQorI2RlZmluZSBfX05SX3NjaGVkX2dldGFmZmluaXR5CQkoX19OUl9TWVNDQUxMX0JBU0UrMjQyKQorI2RlZmluZSBfX05SX2lvX3NldHVwCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI0MykKKyNkZWZpbmUgX19OUl9pb19kZXN0cm95CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI0NCkKKyNkZWZpbmUgX19OUl9pb19nZXRldmVudHMJCShfX05SX1NZU0NBTExfQkFTRSsyNDUpCisjZGVmaW5lIF9fTlJfaW9fc3VibWl0CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI0NikKKyNkZWZpbmUgX19OUl9pb19jYW5jZWwJCQkoX19OUl9TWVNDQUxMX0JBU0UrMjQ3KQorI2RlZmluZSBfX05SX2V4aXRfZ3JvdXAJCQkoX19OUl9TWVNDQUxMX0JBU0UrMjQ4KQorI2RlZmluZSBfX05SX2xvb2t1cF9kY29va2llCQkoX19OUl9TWVNDQUxMX0JBU0UrMjQ5KQorI2RlZmluZSBfX05SX2Vwb2xsX2NyZWF0ZQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI1MCkKKyNkZWZpbmUgX19OUl9lcG9sbF9jdGwJCQkoX19OUl9TWVNDQUxMX0JBU0UrMjUxKQorI2RlZmluZSBfX05SX2Vwb2xsX3dhaXQJCQkoX19OUl9TWVNDQUxMX0JBU0UrMjUyKQorI2RlZmluZSBfX05SX3JlbWFwX2ZpbGVfcGFnZXMJCShfX05SX1NZU0NBTExfQkFTRSsyNTMpCisJCQkJCS8qIDI1NCBmb3Igc2V0X3RocmVhZF9hcmVhICovCisJCQkJCS8qIDI1NSBmb3IgZ2V0X3RocmVhZF9hcmVhICovCisJCQkJCS8qIDI1NiBmb3Igc2V0X3RpZF9hZGRyZXNzICovCisjZGVmaW5lIF9fTlJfdGltZXJfY3JlYXRlCQkoX19OUl9TWVNDQUxMX0JBU0UrMjU3KQorI2RlZmluZSBfX05SX3RpbWVyX3NldHRpbWUJCShfX05SX1NZU0NBTExfQkFTRSsyNTgpCisjZGVmaW5lIF9fTlJfdGltZXJfZ2V0dGltZQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI1OSkKKyNkZWZpbmUgX19OUl90aW1lcl9nZXRvdmVycnVuCQkoX19OUl9TWVNDQUxMX0JBU0UrMjYwKQorI2RlZmluZSBfX05SX3RpbWVyX2RlbGV0ZQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI2MSkKKyNkZWZpbmUgX19OUl9jbG9ja19zZXR0aW1lCQkoX19OUl9TWVNDQUxMX0JBU0UrMjYyKQorI2RlZmluZSBfX05SX2Nsb2NrX2dldHRpbWUJCShfX05SX1NZU0NBTExfQkFTRSsyNjMpCisjZGVmaW5lIF9fTlJfY2xvY2tfZ2V0cmVzCQkoX19OUl9TWVNDQUxMX0JBU0UrMjY0KQorI2RlZmluZSBfX05SX2Nsb2NrX25hbm9zbGVlcAkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI2NSkKKyNkZWZpbmUgX19OUl9zdGF0ZnM2NAkJCShfX05SX1NZU0NBTExfQkFTRSsyNjYpCisjZGVmaW5lIF9fTlJfZnN0YXRmczY0CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI2NykKKyNkZWZpbmUgX19OUl90Z2tpbGwJCQkoX19OUl9TWVNDQUxMX0JBU0UrMjY4KQorI2RlZmluZSBfX05SX3V0aW1lcwkJCShfX05SX1NZU0NBTExfQkFTRSsyNjkpCisjZGVmaW5lIF9fTlJfZmFkdmlzZTY0XzY0CQkoX19OUl9TWVNDQUxMX0JBU0UrMjcwKQorI2RlZmluZSBfX05SX3BjaWNvbmZpZ19pb2Jhc2UJCShfX05SX1NZU0NBTExfQkFTRSsyNzEpCisjZGVmaW5lIF9fTlJfcGNpY29uZmlnX3JlYWQJCShfX05SX1NZU0NBTExfQkFTRSsyNzIpCisjZGVmaW5lIF9fTlJfcGNpY29uZmlnX3dyaXRlCQkoX19OUl9TWVNDQUxMX0JBU0UrMjczKQorI2RlZmluZSBfX05SX21xX29wZW4JCQkoX19OUl9TWVNDQUxMX0JBU0UrMjc0KQorI2RlZmluZSBfX05SX21xX3VubGluawkJCShfX05SX1NZU0NBTExfQkFTRSsyNzUpCisjZGVmaW5lIF9fTlJfbXFfdGltZWRzZW5kCQkoX19OUl9TWVNDQUxMX0JBU0UrMjc2KQorI2RlZmluZSBfX05SX21xX3RpbWVkcmVjZWl2ZQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI3NykKKyNkZWZpbmUgX19OUl9tcV9ub3RpZnkJCQkoX19OUl9TWVNDQUxMX0JBU0UrMjc4KQorI2RlZmluZSBfX05SX21xX2dldHNldGF0dHIJCShfX05SX1NZU0NBTExfQkFTRSsyNzkpCisjZGVmaW5lIF9fTlJfd2FpdGlkCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI4MCkKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgU1dJcyBhcmUgQVJNIHByaXZhdGUuIEZJWE1FIC0gbWFrZSBhcHByb3ByaWF0ZSBmb3IgYXJtMjYKKyAqLworI2RlZmluZSBfX0FSTV9OUl9CQVNFCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzB4MGYwMDAwKQorI2RlZmluZSBfX0FSTV9OUl9icmVha3BvaW50CQkoX19BUk1fTlJfQkFTRSsxKQorI2RlZmluZSBfX0FSTV9OUl9jYWNoZWZsdXNoCQkoX19BUk1fTlJfQkFTRSsyKQorI2RlZmluZSBfX0FSTV9OUl91c3IyNgkJCShfX0FSTV9OUl9CQVNFKzMpCisKKyNkZWZpbmUgX19zeXMyKHgpICN4CisjZGVmaW5lIF9fc3lzMSh4KSBfX3N5czIoeCkKKworI2lmbmRlZiBfX3N5c2NhbGwKKyNkZWZpbmUgX19zeXNjYWxsKG5hbWUpICJzd2lcdCIgX19zeXMxKF9fTlJfIyNuYW1lKSAiIgorI2VuZGlmCisKKyNkZWZpbmUgX19zeXNjYWxsX3JldHVybih0eXBlLCByZXMpCQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCWlmICgodW5zaWduZWQgbG9uZykocmVzKSA+PSAodW5zaWduZWQgbG9uZykoLTEyNSkpIHsJCVwKKwkJZXJybm8gPSAtKHJlcyk7CQkJCQkJXAorCQlyZXMgPSAtMTsJCQkJCQlcCisJfQkJCQkJCQkJXAorCXJldHVybiAodHlwZSkgKHJlcyk7CQkJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBfc3lzY2FsbDAodHlwZSxuYW1lKQkJCQkJCVwKK3R5cGUgbmFtZSh2b2lkKSB7CQkJCQkJCVwKKyAgcmVnaXN0ZXIgbG9uZyBfX3Jlc19yMCBfX2FzbV9fKCJyMCIpOwkJCQkJXAorICBsb25nIF9fcmVzOwkJCQkJCQkJXAorICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCQkJXAorICBfX3N5c2NhbGwobmFtZSkJCQkJCQkJXAorCTogIj1yIiAoX19yZXNfcjApCQkJCQkJXAorCToJCQkJCQkJCVwKKwk6ICJsciIpOwkJCQkJCQlcCisgIF9fcmVzID0gX19yZXNfcjA7CQkJCQkJCVwKKyAgX19zeXNjYWxsX3JldHVybih0eXBlLF9fcmVzKTsJCQkJCQlcCit9CisKKyNkZWZpbmUgX3N5c2NhbGwxKHR5cGUsbmFtZSx0eXBlMSxhcmcxKSAJCQkJXAordHlwZSBuYW1lKHR5cGUxIGFyZzEpIHsgCQkJCQkJXAorICByZWdpc3RlciBsb25nIF9fcjAgX19hc21fXygicjAiKSA9IChsb25nKWFyZzE7CQkJXAorICByZWdpc3RlciBsb25nIF9fcmVzX3IwIF9fYXNtX18oInIwIik7CQkJCQlcCisgIGxvbmcgX19yZXM7CQkJCQkJCQlcCisgIF9fYXNtX18gX192b2xhdGlsZV9fICgJCQkJCQlcCisgIF9fc3lzY2FsbChuYW1lKQkJCQkJCQlcCisJOiAiPXIiIChfX3Jlc19yMCkJCQkJCQlcCisJOiAiciIgKF9fcjApCQkJCQkJCVwKKwk6ICJsciIpOwkJCQkJCQlcCisgIF9fcmVzID0gX19yZXNfcjA7CQkJCQkJCVwKKyAgX19zeXNjYWxsX3JldHVybih0eXBlLF9fcmVzKTsJCQkJCQlcCit9CisKKyNkZWZpbmUgX3N5c2NhbGwyKHR5cGUsbmFtZSx0eXBlMSxhcmcxLHR5cGUyLGFyZzIpCQkJXAordHlwZSBuYW1lKHR5cGUxIGFyZzEsdHlwZTIgYXJnMikgewkJCQkJXAorICByZWdpc3RlciBsb25nIF9fcjAgX19hc21fXygicjAiKSA9IChsb25nKWFyZzE7CQkJXAorICByZWdpc3RlciBsb25nIF9fcjEgX19hc21fXygicjEiKSA9IChsb25nKWFyZzI7CQkJXAorICByZWdpc3RlciBsb25nIF9fcmVzX3IwIF9fYXNtX18oInIwIik7CQkJCQlcCisgIGxvbmcgX19yZXM7CQkJCQkJCQlcCisgIF9fYXNtX18gX192b2xhdGlsZV9fICgJCQkJCQlcCisgIF9fc3lzY2FsbChuYW1lKQkJCQkJCQlcCisJOiAiPXIiIChfX3Jlc19yMCkJCQkJCQlcCisJOiAiciIgKF9fcjApLCJyIiAoX19yMSkgCQkJCQlcCisJOiAibHIiKTsJCQkJCQkJXAorICBfX3JlcyA9IF9fcmVzX3IwOwkJCQkJCQlcCisgIF9fc3lzY2FsbF9yZXR1cm4odHlwZSxfX3Jlcyk7CQkJCQkJXAorfQorCisKKyNkZWZpbmUgX3N5c2NhbGwzKHR5cGUsbmFtZSx0eXBlMSxhcmcxLHR5cGUyLGFyZzIsdHlwZTMsYXJnMykJCVwKK3R5cGUgbmFtZSh0eXBlMSBhcmcxLHR5cGUyIGFyZzIsdHlwZTMgYXJnMykgewkJCQlcCisgIHJlZ2lzdGVyIGxvbmcgX19yMCBfX2FzbV9fKCJyMCIpID0gKGxvbmcpYXJnMTsJCQlcCisgIHJlZ2lzdGVyIGxvbmcgX19yMSBfX2FzbV9fKCJyMSIpID0gKGxvbmcpYXJnMjsJCQlcCisgIHJlZ2lzdGVyIGxvbmcgX19yMiBfX2FzbV9fKCJyMiIpID0gKGxvbmcpYXJnMzsJCQlcCisgIHJlZ2lzdGVyIGxvbmcgX19yZXNfcjAgX19hc21fXygicjAiKTsJCQkJCVwKKyAgbG9uZyBfX3JlczsJCQkJCQkJCVwKKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJCQkJCVwKKyAgX19zeXNjYWxsKG5hbWUpCQkJCQkJCVwKKwk6ICI9ciIgKF9fcmVzX3IwKQkJCQkJCVwKKwk6ICJyIiAoX19yMCksInIiIChfX3IxKSwiciIgKF9fcjIpCQkJCVwKKwk6ICJsciIpOwkJCQkJCQlcCisgIF9fcmVzID0gX19yZXNfcjA7CQkJCQkJCVwKKyAgX19zeXNjYWxsX3JldHVybih0eXBlLF9fcmVzKTsJCQkJCQlcCit9CisKKworI2RlZmluZSBfc3lzY2FsbDQodHlwZSxuYW1lLHR5cGUxLGFyZzEsdHlwZTIsYXJnMix0eXBlMyxhcmczLHR5cGU0LGFyZzQpXAordHlwZSBuYW1lKHR5cGUxIGFyZzEsIHR5cGUyIGFyZzIsIHR5cGUzIGFyZzMsIHR5cGU0IGFyZzQpIHsJCVwKKyAgcmVnaXN0ZXIgbG9uZyBfX3IwIF9fYXNtX18oInIwIikgPSAobG9uZylhcmcxOwkJCVwKKyAgcmVnaXN0ZXIgbG9uZyBfX3IxIF9fYXNtX18oInIxIikgPSAobG9uZylhcmcyOwkJCVwKKyAgcmVnaXN0ZXIgbG9uZyBfX3IyIF9fYXNtX18oInIyIikgPSAobG9uZylhcmczOwkJCVwKKyAgcmVnaXN0ZXIgbG9uZyBfX3IzIF9fYXNtX18oInIzIikgPSAobG9uZylhcmc0OwkJCVwKKyAgcmVnaXN0ZXIgbG9uZyBfX3Jlc19yMCBfX2FzbV9fKCJyMCIpOwkJCQkJXAorICBsb25nIF9fcmVzOwkJCQkJCQkJXAorICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCQkJXAorICBfX3N5c2NhbGwobmFtZSkJCQkJCQkJXAorCTogIj1yIiAoX19yZXNfcjApCQkJCQkJXAorCTogInIiIChfX3IwKSwiciIgKF9fcjEpLCJyIiAoX19yMiksInIiIChfX3IzKQkJCVwKKwk6ICJsciIpOwkJCQkJCQlcCisgIF9fcmVzID0gX19yZXNfcjA7CQkJCQkJCVwKKyAgX19zeXNjYWxsX3JldHVybih0eXBlLF9fcmVzKTsJCQkJCQlcCit9CisgIAorCisjZGVmaW5lIF9zeXNjYWxsNSh0eXBlLG5hbWUsdHlwZTEsYXJnMSx0eXBlMixhcmcyLHR5cGUzLGFyZzMsdHlwZTQsYXJnNCx0eXBlNSxhcmc1KQlcCit0eXBlIG5hbWUodHlwZTEgYXJnMSwgdHlwZTIgYXJnMiwgdHlwZTMgYXJnMywgdHlwZTQgYXJnNCwgdHlwZTUgYXJnNSkgewlcCisgIHJlZ2lzdGVyIGxvbmcgX19yMCBfX2FzbV9fKCJyMCIpID0gKGxvbmcpYXJnMTsJCQlcCisgIHJlZ2lzdGVyIGxvbmcgX19yMSBfX2FzbV9fKCJyMSIpID0gKGxvbmcpYXJnMjsJCQlcCisgIHJlZ2lzdGVyIGxvbmcgX19yMiBfX2FzbV9fKCJyMiIpID0gKGxvbmcpYXJnMzsJCQlcCisgIHJlZ2lzdGVyIGxvbmcgX19yMyBfX2FzbV9fKCJyMyIpID0gKGxvbmcpYXJnNDsJCQlcCisgIHJlZ2lzdGVyIGxvbmcgX19yNCBfX2FzbV9fKCJyNCIpID0gKGxvbmcpYXJnNTsJCQlcCisgIHJlZ2lzdGVyIGxvbmcgX19yZXNfcjAgX19hc21fXygicjAiKTsJCQkJCVwKKyAgbG9uZyBfX3JlczsJCQkJCQkJCVwKKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJCQkJCVwKKyAgX19zeXNjYWxsKG5hbWUpCQkJCQkJCVwKKwk6ICI9ciIgKF9fcmVzX3IwKQkJCQkJCVwKKwk6ICJyIiAoX19yMCksInIiIChfX3IxKSwiciIgKF9fcjIpLCJyIiAoX19yMyksInIiIChfX3I0KQlcCisJOiAibHIiKTsJCQkJCQkJXAorICBfX3JlcyA9IF9fcmVzX3IwOwkJCQkJCQlcCisgIF9fc3lzY2FsbF9yZXR1cm4odHlwZSxfX3Jlcyk7CQkJCQkJXAorfQorCisjZGVmaW5lIF9zeXNjYWxsNih0eXBlLG5hbWUsdHlwZTEsYXJnMSx0eXBlMixhcmcyLHR5cGUzLGFyZzMsdHlwZTQsYXJnNCx0eXBlNSxhcmc1LHR5cGU2LGFyZzYpCVwKK3R5cGUgbmFtZSh0eXBlMSBhcmcxLCB0eXBlMiBhcmcyLCB0eXBlMyBhcmczLCB0eXBlNCBhcmc0LCB0eXBlNSBhcmc1LCB0eXBlNiBhcmc2KSB7CVwKKyAgcmVnaXN0ZXIgbG9uZyBfX3IwIF9fYXNtX18oInIwIikgPSAobG9uZylhcmcxOwkJCVwKKyAgcmVnaXN0ZXIgbG9uZyBfX3IxIF9fYXNtX18oInIxIikgPSAobG9uZylhcmcyOwkJCVwKKyAgcmVnaXN0ZXIgbG9uZyBfX3IyIF9fYXNtX18oInIyIikgPSAobG9uZylhcmczOwkJCVwKKyAgcmVnaXN0ZXIgbG9uZyBfX3IzIF9fYXNtX18oInIzIikgPSAobG9uZylhcmc0OwkJCVwKKyAgcmVnaXN0ZXIgbG9uZyBfX3I0IF9fYXNtX18oInI0IikgPSAobG9uZylhcmc1OwkJCVwKKyAgcmVnaXN0ZXIgbG9uZyBfX3I1IF9fYXNtX18oInI1IikgPSAobG9uZylhcmc2OwkJCVwKKyAgcmVnaXN0ZXIgbG9uZyBfX3Jlc19yMCBfX2FzbV9fKCJyMCIpOwkJCQkJXAorICBsb25nIF9fcmVzOwkJCQkJCQkJXAorICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCQkJXAorICBfX3N5c2NhbGwobmFtZSkJCQkJCQkJXAorCTogIj1yIiAoX19yZXNfcjApCQkJCQkJXAorCTogInIiIChfX3IwKSwiciIgKF9fcjEpLCJyIiAoX19yMiksInIiIChfX3IzKSwgInIiIChfX3I0KSwiciIgKF9fcjUpCQlcCisJOiAibHIiKTsJCQkJCQkJXAorICBfX3JlcyA9IF9fcmVzX3IwOwkJCQkJCQlcCisgIF9fc3lzY2FsbF9yZXR1cm4odHlwZSxfX3Jlcyk7CQkJCQkJXAorfQorCisjaWZkZWYgX19LRVJORUxfXworI2RlZmluZSBfX0FSQ0hfV0FOVF9JUENfUEFSU0VfVkVSU0lPTgorI2RlZmluZSBfX0FSQ0hfV0FOVF9PTERfUkVBRERJUgorI2RlZmluZSBfX0FSQ0hfV0FOVF9TVEFUNjQKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0FMQVJNCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19HRVRIT1NUTkFNRQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfUEFVU0UKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1RJTUUKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1VUSU1FCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TT0NLRVRDQUxMCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19GQURWSVNFNjQKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0dFVFBHUlAKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0xMU0VFSworI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfTklDRQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfT0xEX0dFVFJMSU1JVAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfT0xEVU1PVU5UCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdQRU5ESU5HCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdQUk9DTUFTSworI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfUlRfU0lHQUNUSU9OCisjZW5kaWYKKworI2lmZGVmIF9fS0VSTkVMX1NZU0NBTExTX18KKworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgorCitleHRlcm4gbG9uZyBleGVjdmUoY29uc3QgY2hhciAqZmlsZSwgY2hhciAqKmFyZ3YsIGNoYXIgKiplbnZwKTsKKworc3RydWN0IHB0X3JlZ3M7Cithc21saW5rYWdlIGludCBzeXNfZXhlY3ZlKGNoYXIgKmZpbGVuYW1laSwgY2hhciAqKmFyZ3YsIGNoYXIgKiplbnZwLAorCQkJc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworYXNtbGlua2FnZSBpbnQgc3lzX2Nsb25lKHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgbmV3c3AsCisJCQlzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Cithc21saW5rYWdlIGludCBzeXNfZm9yayhzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Cithc21saW5rYWdlIGludCBzeXNfdmZvcmsoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworYXNtbGlua2FnZSBpbnQgc3lzX3BpcGUodW5zaWduZWQgbG9uZyAqZmlsZGVzKTsKK2FzbWxpbmthZ2UgaW50IHN5c19wdHJhY2UobG9uZyByZXF1ZXN0LCBsb25nIHBpZCwgbG9uZyBhZGRyLCBsb25nIGRhdGEpOworc3RydWN0IHNpZ2FjdGlvbjsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfcnRfc2lnYWN0aW9uKGludCBzaWcsCisJCQkJY29uc3Qgc3RydWN0IHNpZ2FjdGlvbiBfX3VzZXIgKmFjdCwKKwkJCQlzdHJ1Y3Qgc2lnYWN0aW9uIF9fdXNlciAqb2FjdCwKKwkJCQlzaXplX3Qgc2lnc2V0c2l6ZSk7CisKKyNlbmRpZgorCisvKgorICogIkNvbmRpdGlvbmFsIiBzeXNjYWxscworICoKKyAqIFdoYXQgd2Ugd2FudCBpcyBfX2F0dHJpYnV0ZV9fKCh3ZWFrLGFsaWFzKCJzeXNfbmlfc3lzY2FsbCIpKSksCisgKiBidXQgaXQgZG9lc24ndCB3b3JrIG9uIGFsbCB0b29sY2hhaW5zLCBzbyB3ZSBqdXN0IGRvIGl0IGJ5IGhhbmQKKyAqLworI2RlZmluZSBjb25kX3N5c2NhbGwoeCkgYXNtKCIud2Vha1x0IiAjeCAiXG5cdC5zZXRcdCIgI3ggIixzeXNfbmlfc3lzY2FsbCIpCisKKyNlbmRpZiAvKiBfX0FTTV9BUk1fVU5JU1REX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybTI2L3VzZXIuaCBiL2luY2x1ZGUvYXNtLWFybTI2L3VzZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZThiMGY4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtMjYvdXNlci5oCkBAIC0wLDAgKzEsODQgQEAKKyNpZm5kZWYgX0FSTV9VU0VSX0gKKyNkZWZpbmUgX0FSTV9VU0VSX0gKKworI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorLyogQ29yZSBmaWxlIGZvcm1hdDogVGhlIGNvcmUgZmlsZSBpcyB3cml0dGVuIGluIHN1Y2ggYSB3YXkgdGhhdCBnZGIKKyAgIGNhbiB1bmRlcnN0YW5kIGl0IGFuZCBwcm92aWRlIHVzZWZ1bCBpbmZvcm1hdGlvbiB0byB0aGUgdXNlciAodW5kZXIKKyAgIGxpbnV4IHdlIHVzZSB0aGUgJ3RyYWQtY29yZScgYmZkKS4gIFRoZXJlIGFyZSBxdWl0ZSBhIG51bWJlciBvZgorICAgb2JzdGFjbGVzIHRvIGJlaW5nIGFibGUgdG8gdmlldyB0aGUgY29udGVudHMgb2YgdGhlIGZsb2F0aW5nIHBvaW50CisgICByZWdpc3RlcnMsIGFuZCB1bnRpbCB0aGVzZSBhcmUgc29sdmVkIHlvdSB3aWxsIG5vdCBiZSBhYmxlIHRvIHZpZXcgdGhlCisgICBjb250ZW50cyBvZiB0aGVtLiAgQWN0dWFsbHksIHlvdSBjYW4gcmVhZCBpbiB0aGUgY29yZSBmaWxlIGFuZCBsb29rIGF0CisgICB0aGUgY29udGVudHMgb2YgdGhlIHVzZXIgc3RydWN0IHRvIGZpbmQgb3V0IHdoYXQgdGhlIGZsb2F0aW5nIHBvaW50CisgICByZWdpc3RlcnMgY29udGFpbi4KKyAgIFRoZSBhY3R1YWwgZmlsZSBjb250ZW50cyBhcmUgYXMgZm9sbG93czoKKyAgIFVQQUdFOiAxIHBhZ2UgY29uc2lzdGluZyBvZiBhIHVzZXIgc3RydWN0IHRoYXQgdGVsbHMgZ2RiIHdoYXQgaXMgcHJlc2VudAorICAgaW4gdGhlIGZpbGUuICBEaXJlY3RseSBhZnRlciB0aGlzIGlzIGEgY29weSBvZiB0aGUgdGFza19zdHJ1Y3QsIHdoaWNoCisgICBpcyBjdXJyZW50bHkgbm90IHVzZWQgYnkgZ2RiLCBidXQgaXQgbWF5IGNvbWUgaW4gdXNlZnVsIGF0IHNvbWUgcG9pbnQuCisgICBBbGwgb2YgdGhlIHJlZ2lzdGVycyBhcmUgc3RvcmVkIGFzIHBhcnQgb2YgdGhlIHVwYWdlLiAgVGhlIHVwYWdlIHNob3VsZAorICAgYWx3YXlzIGJlIG9ubHkgb25lIHBhZ2UuCisgICBEQVRBOiBUaGUgZGF0YSBhcmVhIGlzIHN0b3JlZC4gIFdlIHVzZSBjdXJyZW50LT5lbmRfdGV4dCB0bworICAgY3VycmVudC0+YnJrIHRvIHBpY2sgdXAgYWxsIG9mIHRoZSB1c2VyIHZhcmlhYmxlcywgcGx1cyBhbnkgbWVtb3J5CisgICB0aGF0IG1heSBoYXZlIGJlZW4gbWFsbG9jZWQuICBObyBhdHRlbXB0IGlzIG1hZGUgdG8gZGV0ZXJtaW5lIGlmIGEgcGFnZQorICAgaXMgZGVtYW5kLXplcm8gb3IgaWYgYSBwYWdlIGlzIHRvdGFsbHkgdW51c2VkLCB3ZSBqdXN0IGNvdmVyIHRoZSBlbnRpcmUKKyAgIHJhbmdlLiAgQWxsIG9mIHRoZSBhZGRyZXNzZXMgYXJlIHJvdW5kZWQgaW4gc3VjaCBhIHdheSB0aGF0IGFuIGludGVncmFsCisgICBudW1iZXIgb2YgcGFnZXMgaXMgd3JpdHRlbi4KKyAgIFNUQUNLOiBXZSBuZWVkIHRoZSBzdGFjayBpbmZvcm1hdGlvbiBpbiBvcmRlciB0byBnZXQgYSBtZWFuaW5nZnVsCisgICBiYWNrdHJhY2UuICBXZSBuZWVkIHRvIHdyaXRlIHRoZSBkYXRhIGZyb20gKGVzcCkgdG8KKyAgIGN1cnJlbnQtPnN0YXJ0X3N0YWNrLCBzbyB3ZSByb3VuZCBlYWNoIG9mIHRoZXNlIG9mZiBpbiBvcmRlciB0byBiZSBhYmxlCisgICB0byB3cml0ZSBhbiBpbnRlZ2VyIG51bWJlciBvZiBwYWdlcy4KKyAgIFRoZSBtaW5pbXVtIGNvcmUgZmlsZSBzaXplIGlzIDMgcGFnZXMsIG9yIDEyMjg4IGJ5dGVzLgorKi8KKworc3RydWN0IHVzZXJfZnAgeworCXN0cnVjdCBmcF9yZWcgeworCQl1bnNpZ25lZCBpbnQgc2lnbjE6MTsKKwkJdW5zaWduZWQgaW50IHVudXNlZDoxNTsKKwkJdW5zaWduZWQgaW50IHNpZ24yOjE7CisJCXVuc2lnbmVkIGludCBleHBvbmVudDoxNDsKKwkJdW5zaWduZWQgaW50IGo6MTsKKwkJdW5zaWduZWQgaW50IG1hbnRpc3NhMTozMTsKKwkJdW5zaWduZWQgaW50IG1hbnRpc3NhMDozMjsKKwl9IGZwcmVnc1s4XTsKKwl1bnNpZ25lZCBpbnQgZnBzcjozMjsKKwl1bnNpZ25lZCBpbnQgZnBjcjozMjsKKwl1bnNpZ25lZCBjaGFyIGZ0eXBlWzhdOworCXVuc2lnbmVkIGludCBpbml0X2ZsYWc7Cit9OworCisvKiBXaGVuIHRoZSBrZXJuZWwgZHVtcHMgY29yZSwgaXQgc3RhcnRzIGJ5IGR1bXBpbmcgdGhlIHVzZXIgc3RydWN0IC0KKyAgIHRoaXMgd2lsbCBiZSB1c2VkIGJ5IGdkYiB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBkYXRhIGFuZCBzdGFjayBzZWdtZW50cworICAgYXJlIHdpdGhpbiB0aGUgZmlsZSwgYW5kIHdoYXQgdmlydHVhbCBhZGRyZXNzZXMgdG8gdXNlLiAqLworc3RydWN0IHVzZXJ7CisvKiBXZSBzdGFydCB3aXRoIHRoZSByZWdpc3RlcnMsIHRvIG1pbWljIHRoZSB3YXkgdGhhdCAibWVtb3J5IiBpcyByZXR1cm5lZAorICAgZnJvbSB0aGUgcHRyYWNlKDMsLi4uKSBmdW5jdGlvbi4gICovCisgIHN0cnVjdCBwdF9yZWdzIHJlZ3M7CQkvKiBXaGVyZSB0aGUgcmVnaXN0ZXJzIGFyZSBhY3R1YWxseSBzdG9yZWQgKi8KKy8qIHB0cmFjZSBkb2VzIG5vdCB5ZXQgc3VwcGx5IHRoZXNlLiAgU29tZWRheS4uLi4gKi8KKyAgaW50IHVfZnB2YWxpZDsJCS8qIFRydWUgaWYgbWF0aCBjby1wcm9jZXNzb3IgYmVpbmcgdXNlZC4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZm9yIHRoaXMgbWVzcy4gTm90IHlldCB1c2VkLiAqLworLyogVGhlIHJlc3Qgb2YgdGhpcyBqdW5rIGlzIHRvIGhlbHAgZ2RiIGZpZ3VyZSBvdXQgd2hhdCBnb2VzIHdoZXJlICovCisgIHVuc2lnbmVkIGxvbmcgaW50IHVfdHNpemU7CS8qIFRleHQgc2VnbWVudCBzaXplIChwYWdlcykuICovCisgIHVuc2lnbmVkIGxvbmcgaW50IHVfZHNpemU7CS8qIERhdGEgc2VnbWVudCBzaXplIChwYWdlcykuICovCisgIHVuc2lnbmVkIGxvbmcgaW50IHVfc3NpemU7CS8qIFN0YWNrIHNlZ21lbnQgc2l6ZSAocGFnZXMpLiAqLworICB1bnNpZ25lZCBsb25nIHN0YXJ0X2NvZGU7ICAgICAvKiBTdGFydGluZyB2aXJ0dWFsIGFkZHJlc3Mgb2YgdGV4dC4gKi8KKyAgdW5zaWduZWQgbG9uZyBzdGFydF9zdGFjazsJLyogU3RhcnRpbmcgdmlydHVhbCBhZGRyZXNzIG9mIHN0YWNrIGFyZWEuCisJCQkJICAgVGhpcyBpcyBhY3R1YWxseSB0aGUgYm90dG9tIG9mIHRoZSBzdGFjaywKKwkJCQkgICB0aGUgdG9wIG9mIHRoZSBzdGFjayBpcyBhbHdheXMgZm91bmQgaW4gdGhlCisJCQkJICAgZXNwIHJlZ2lzdGVyLiAgKi8KKyAgbG9uZyBpbnQgc2lnbmFsOyAgICAgCQkvKiBTaWduYWwgdGhhdCBjYXVzZWQgdGhlIGNvcmUgZHVtcC4gKi8KKyAgaW50IHJlc2VydmVkOwkJCS8qIE5vIGxvbmdlciB1c2VkICovCisgIHN0cnVjdCBwdF9yZWdzICogdV9hcjA7CS8qIFVzZWQgYnkgZ2RiIHRvIGhlbHAgZmluZCB0aGUgdmFsdWVzIGZvciAqLworCQkJCS8qIHRoZSByZWdpc3RlcnMuICovCisgIHVuc2lnbmVkIGxvbmcgbWFnaWM7CQkvKiBUbyB1bmlxdWVseSBpZGVudGlmeSBhIGNvcmUgZmlsZSAqLworICBjaGFyIHVfY29tbVszMl07CQkvKiBVc2VyIGNvbW1hbmQgdGhhdCB3YXMgcmVzcG9uc2libGUgKi8KKyAgaW50IHVfZGVidWdyZWdbOF07CisgIHN0cnVjdCB1c2VyX2ZwIHVfZnA7CQkvKiBGUCBzdGF0ZSAqLworICBzdHJ1Y3QgdXNlcl9mcF9zdHJ1Y3QgKiB1X2ZwMDsvKiBVc2VkIGJ5IGdkYiB0byBoZWxwIGZpbmQgdGhlIHZhbHVlcyBmb3IgKi8KKyAgCQkJCS8qIHRoZSBGUCByZWdpc3RlcnMuICovCit9OworI2RlZmluZSBOQlBHIFBBR0VfU0laRQorI2RlZmluZSBVUEFHRVMgMQorI2RlZmluZSBIT1NUX1RFWFRfU1RBUlRfQUREUiAodS5zdGFydF9jb2RlKQorI2RlZmluZSBIT1NUX1NUQUNLX0VORF9BRERSICh1LnN0YXJ0X3N0YWNrICsgdS51X3NzaXplICogTkJQRykKKworI2VuZGlmIC8qIF9BUk1fVVNFUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi94b3IuaCBiL2luY2x1ZGUvYXNtLWFybTI2L3hvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3YzRjZjUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0yNi94b3IuaApAQCAtMCwwICsxLDE0MSBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0veG9yLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy94b3IuaD4KKworI2RlZmluZSBfX1hPUihhMSwgYTIpIGExIF49IGEyCisKKyNkZWZpbmUgR0VUX0JMT0NLXzIoZHN0KSBcCisJX19hc21fXygibGRtaWEJJTAsIHslMSwgJTJ9IiBcCisJCTogIj1yIiAoZHN0KSwgIj1yIiAoYTEpLCAiPXIiIChhMikgXAorCQk6ICIwIiAoZHN0KSkKKworI2RlZmluZSBHRVRfQkxPQ0tfNChkc3QpIFwKKwlfX2FzbV9fKCJsZG1pYQklMCwgeyUxLCAlMiwgJTMsICU0fSIgXAorCQk6ICI9ciIgKGRzdCksICI9ciIgKGExKSwgIj1yIiAoYTIpLCAiPXIiIChhMyksICI9ciIgKGE0KSBcCisJCTogIjAiIChkc3QpKQorCisjZGVmaW5lIFhPUl9CTE9DS18yKHNyYykgXAorCV9fYXNtX18oImxkbWlhCSUwISwgeyUxLCAlMn0iIFwKKwkJOiAiPXIiIChzcmMpLCAiPXIiIChiMSksICI9ciIgKGIyKSBcCisJCTogIjAiIChzcmMpKTsgXAorCV9fWE9SKGExLCBiMSk7IF9fWE9SKGEyLCBiMik7CisKKyNkZWZpbmUgWE9SX0JMT0NLXzQoc3JjKSBcCisJX19hc21fXygibGRtaWEJJTAhLCB7JTEsICUyLCAlMywgJTR9IiBcCisJCTogIj1yIiAoc3JjKSwgIj1yIiAoYjEpLCAiPXIiIChiMiksICI9ciIgKGIzKSwgIj1yIiAoYjQpIFwKKwkJOiAiMCIgKHNyYykpOyBcCisJX19YT1IoYTEsIGIxKTsgX19YT1IoYTIsIGIyKTsgX19YT1IoYTMsIGIzKTsgX19YT1IoYTQsIGI0KQorCisjZGVmaW5lIFBVVF9CTE9DS18yKGRzdCkgXAorCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdG1pYQklMCEsIHslMiwgJTN9IiBcCisJCTogIj1yIiAoZHN0KSBcCisJCTogIjAiIChkc3QpLCAiciIgKGExKSwgInIiIChhMikpCisKKyNkZWZpbmUgUFVUX0JMT0NLXzQoZHN0KSBcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0bWlhCSUwISwgeyUyLCAlMywgJTQsICU1fSIgXAorCQk6ICI9ciIgKGRzdCkgXAorCQk6ICIwIiAoZHN0KSwgInIiIChhMSksICJyIiAoYTIpLCAiciIgKGEzKSwgInIiIChhNCkpCisKK3N0YXRpYyB2b2lkCit4b3JfYXJtNHJlZ3NfMih1bnNpZ25lZCBsb25nIGJ5dGVzLCB1bnNpZ25lZCBsb25nICpwMSwgdW5zaWduZWQgbG9uZyAqcDIpCit7CisJdW5zaWduZWQgaW50IGxpbmVzID0gYnl0ZXMgLyBzaXplb2YodW5zaWduZWQgbG9uZykgLyA0OworCXJlZ2lzdGVyIHVuc2lnbmVkIGludCBhMSBfX2FzbV9fKCJyNCIpOworCXJlZ2lzdGVyIHVuc2lnbmVkIGludCBhMiBfX2FzbV9fKCJyNSIpOworCXJlZ2lzdGVyIHVuc2lnbmVkIGludCBhMyBfX2FzbV9fKCJyNiIpOworCXJlZ2lzdGVyIHVuc2lnbmVkIGludCBhNCBfX2FzbV9fKCJyNyIpOworCXJlZ2lzdGVyIHVuc2lnbmVkIGludCBiMSBfX2FzbV9fKCJyOCIpOworCXJlZ2lzdGVyIHVuc2lnbmVkIGludCBiMiBfX2FzbV9fKCJyOSIpOworCXJlZ2lzdGVyIHVuc2lnbmVkIGludCBiMyBfX2FzbV9fKCJpcCIpOworCXJlZ2lzdGVyIHVuc2lnbmVkIGludCBiNCBfX2FzbV9fKCJsciIpOworCisJZG8geworCQlHRVRfQkxPQ0tfNChwMSk7CisJCVhPUl9CTE9DS180KHAyKTsKKwkJUFVUX0JMT0NLXzQocDEpOworCX0gd2hpbGUgKC0tbGluZXMpOworfQorCitzdGF0aWMgdm9pZAoreG9yX2FybTRyZWdzXzModW5zaWduZWQgbG9uZyBieXRlcywgdW5zaWduZWQgbG9uZyAqcDEsIHVuc2lnbmVkIGxvbmcgKnAyLAorCQl1bnNpZ25lZCBsb25nICpwMykKK3sKKwl1bnNpZ25lZCBpbnQgbGluZXMgPSBieXRlcyAvIHNpemVvZih1bnNpZ25lZCBsb25nKSAvIDQ7CisJcmVnaXN0ZXIgdW5zaWduZWQgaW50IGExIF9fYXNtX18oInI0Iik7CisJcmVnaXN0ZXIgdW5zaWduZWQgaW50IGEyIF9fYXNtX18oInI1Iik7CisJcmVnaXN0ZXIgdW5zaWduZWQgaW50IGEzIF9fYXNtX18oInI2Iik7CisJcmVnaXN0ZXIgdW5zaWduZWQgaW50IGE0IF9fYXNtX18oInI3Iik7CisJcmVnaXN0ZXIgdW5zaWduZWQgaW50IGIxIF9fYXNtX18oInI4Iik7CisJcmVnaXN0ZXIgdW5zaWduZWQgaW50IGIyIF9fYXNtX18oInI5Iik7CisJcmVnaXN0ZXIgdW5zaWduZWQgaW50IGIzIF9fYXNtX18oImlwIik7CisJcmVnaXN0ZXIgdW5zaWduZWQgaW50IGI0IF9fYXNtX18oImxyIik7CisKKwlkbyB7CisJCUdFVF9CTE9DS180KHAxKTsKKwkJWE9SX0JMT0NLXzQocDIpOworCQlYT1JfQkxPQ0tfNChwMyk7CisJCVBVVF9CTE9DS180KHAxKTsKKwl9IHdoaWxlICgtLWxpbmVzKTsKK30KKworc3RhdGljIHZvaWQKK3hvcl9hcm00cmVnc180KHVuc2lnbmVkIGxvbmcgYnl0ZXMsIHVuc2lnbmVkIGxvbmcgKnAxLCB1bnNpZ25lZCBsb25nICpwMiwKKwkJdW5zaWduZWQgbG9uZyAqcDMsIHVuc2lnbmVkIGxvbmcgKnA0KQoreworCXVuc2lnbmVkIGludCBsaW5lcyA9IGJ5dGVzIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpIC8gMjsKKwlyZWdpc3RlciB1bnNpZ25lZCBpbnQgYTEgX19hc21fXygicjgiKTsKKwlyZWdpc3RlciB1bnNpZ25lZCBpbnQgYTIgX19hc21fXygicjkiKTsKKwlyZWdpc3RlciB1bnNpZ25lZCBpbnQgYjEgX19hc21fXygiaXAiKTsKKwlyZWdpc3RlciB1bnNpZ25lZCBpbnQgYjIgX19hc21fXygibHIiKTsKKworCWRvIHsKKwkJR0VUX0JMT0NLXzIocDEpOworCQlYT1JfQkxPQ0tfMihwMik7CisJCVhPUl9CTE9DS18yKHAzKTsKKwkJWE9SX0JMT0NLXzIocDQpOworCQlQVVRfQkxPQ0tfMihwMSk7CisJfSB3aGlsZSAoLS1saW5lcyk7Cit9CisKK3N0YXRpYyB2b2lkCit4b3JfYXJtNHJlZ3NfNSh1bnNpZ25lZCBsb25nIGJ5dGVzLCB1bnNpZ25lZCBsb25nICpwMSwgdW5zaWduZWQgbG9uZyAqcDIsCisJCXVuc2lnbmVkIGxvbmcgKnAzLCB1bnNpZ25lZCBsb25nICpwNCwgdW5zaWduZWQgbG9uZyAqcDUpCit7CisJdW5zaWduZWQgaW50IGxpbmVzID0gYnl0ZXMgLyBzaXplb2YodW5zaWduZWQgbG9uZykgLyAyOworCXJlZ2lzdGVyIHVuc2lnbmVkIGludCBhMSBfX2FzbV9fKCJyOCIpOworCXJlZ2lzdGVyIHVuc2lnbmVkIGludCBhMiBfX2FzbV9fKCJyOSIpOworCXJlZ2lzdGVyIHVuc2lnbmVkIGludCBiMSBfX2FzbV9fKCJpcCIpOworCXJlZ2lzdGVyIHVuc2lnbmVkIGludCBiMiBfX2FzbV9fKCJsciIpOworCisJZG8geworCQlHRVRfQkxPQ0tfMihwMSk7CisJCVhPUl9CTE9DS18yKHAyKTsKKwkJWE9SX0JMT0NLXzIocDMpOworCQlYT1JfQkxPQ0tfMihwNCk7CisJCVhPUl9CTE9DS18yKHA1KTsKKwkJUFVUX0JMT0NLXzIocDEpOworCX0gd2hpbGUgKC0tbGluZXMpOworfQorCitzdGF0aWMgc3RydWN0IHhvcl9ibG9ja190ZW1wbGF0ZSB4b3JfYmxvY2tfYXJtNHJlZ3MgPSB7CisJLm5hbWUJPSAiYXJtNHJlZ3MiLAorCS5kb18yCT0geG9yX2FybTRyZWdzXzIsCisJLmRvXzMJPSB4b3JfYXJtNHJlZ3NfMywKKwkuZG9fNAk9IHhvcl9hcm00cmVnc180LAorCS5kb181CT0geG9yX2FybTRyZWdzXzUsCit9OworCisjdW5kZWYgWE9SX1RSWV9URU1QTEFURVMKKyNkZWZpbmUgWE9SX1RSWV9URU1QTEFURVMJCQlcCisJZG8gewkJCQkJXAorCQl4b3Jfc3BlZWQoJnhvcl9ibG9ja19hcm00cmVncyk7CVwKKwkJeG9yX3NwZWVkKCZ4b3JfYmxvY2tfOHJlZ3MpOwlcCisJCXhvcl9zcGVlZCgmeG9yX2Jsb2NrXzMycmVncyk7CVwKKwl9IHdoaWxlICgwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy9hLm91dC5oIGIvaW5jbHVkZS9hc20tY3Jpcy9hLm91dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3MDczNGMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL2Eub3V0LmgKQEAgLTAsMCArMSwzMSBAQAorI2lmbmRlZiBfX0NSSVNfQV9PVVRfSF9fCisjZGVmaW5lIF9fQ1JJU19BX09VVF9IX18KKworLyogd2UgZG9uJ3Qgc3VwcG9ydCBhLm91dCBiaW5hcmllcyBvbiBMaW51eC9DUklTIGFueXdheSwgc28gdGhpcyBpcworICogbm90IHJlYWxseSB1c2VkIGJ1dCBzdGlsbCBuZWVkZWQgYmVjYXVzZSBiaW5mbXRfZWxmLmMgZm9yIHNvbWUgcmVhc29uCisgKiB3YW50cyB0byBrbm93IGFib3V0IGEub3V0IGV2ZW4gaWYgdGhlcmUgaXMgbm8gaW50ZXJwcmV0ZXIgYXZhaWxhYmxlLi4uCisgKi8KKworLyogZ3JhYmJlZCBmcm9tIHRoZSBpbnRlbCBzdHVmZiAgKi8gICAKKyNkZWZpbmUgU1RBQ0tfVE9QIFRBU0tfU0laRQorCisKK3N0cnVjdCBleGVjCit7CisgIHVuc2lnbmVkIGxvbmcgYV9pbmZvOwkJLyogVXNlIG1hY3JvcyBOX01BR0lDLCBldGMgZm9yIGFjY2VzcyAqLworICB1bnNpZ25lZCBhX3RleHQ7CQkvKiBsZW5ndGggb2YgdGV4dCwgaW4gYnl0ZXMgKi8KKyAgdW5zaWduZWQgYV9kYXRhOwkJLyogbGVuZ3RoIG9mIGRhdGEsIGluIGJ5dGVzICovCisgIHVuc2lnbmVkIGFfYnNzOwkJLyogbGVuZ3RoIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSBhcmVhIGZvciBmaWxlLCBpbiBieXRlcyAqLworICB1bnNpZ25lZCBhX3N5bXM7CQkvKiBsZW5ndGggb2Ygc3ltYm9sIHRhYmxlIGRhdGEgaW4gZmlsZSwgaW4gYnl0ZXMgKi8KKyAgdW5zaWduZWQgYV9lbnRyeTsJCS8qIHN0YXJ0IGFkZHJlc3MgKi8KKyAgdW5zaWduZWQgYV90cnNpemU7CQkvKiBsZW5ndGggb2YgcmVsb2NhdGlvbiBpbmZvIGZvciB0ZXh0LCBpbiBieXRlcyAqLworICB1bnNpZ25lZCBhX2Ryc2l6ZTsJCS8qIGxlbmd0aCBvZiByZWxvY2F0aW9uIGluZm8gZm9yIGRhdGEsIGluIGJ5dGVzICovCit9OworCisKKyNkZWZpbmUgTl9UUlNJWkUoYSkJKChhKS5hX3Ryc2l6ZSkKKyNkZWZpbmUgTl9EUlNJWkUoYSkJKChhKS5hX2Ryc2l6ZSkKKyNkZWZpbmUgTl9TWU1TSVpFKGEpCSgoYSkuYV9zeW1zKQorCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy9hcmNoLXYxMC9iaXRvcHMuaCBiL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MTAvYml0b3BzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFiN2FlOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MTAvYml0b3BzLmgKQEAgLTAsMCArMSw3MyBAQAorLyogYXNtL2FyY2gvYml0b3BzLmggZm9yIExpbnV4L0NSSVN2MTAgKi8KKworI2lmbmRlZiBfQ1JJU19BUkNIX0JJVE9QU19ICisjZGVmaW5lIF9DUklTX0FSQ0hfQklUT1BTX0gKKworLyoKKyAqIEhlbHBlciBmdW5jdGlvbnMgZm9yIHRoZSBjb3JlIG9mIHRoZSBmZltzel0gZnVuY3Rpb25zLCB3cmFwcGluZyB0aGUKKyAqIHN5bnRhY3RpY2FsbHkgYXdrd2FyZCBhc21zLiAgVGhlIGFzbXMgY29tcHV0ZSB0aGUgbnVtYmVyIG9mIGxlYWRpbmcKKyAqIHplcm9lcyBvZiBhIGJpdHMtaW4tYnl0ZSBhbmQgYnl0ZS1pbi13b3JkIGFuZCB3b3JkLWluLWR3b3JkLXN3YXBwZWQKKyAqIG51bWJlci4gIFRoZXkgZGlmZmVyIGluIHRoYXQgdGhlIGZpcnN0IGZ1bmN0aW9uIGFsc28gaW52ZXJ0cyBhbGwgYml0cworICogaW4gdGhlIGlucHV0LgorICovCitleHRlcm4gaW5saW5lIHVuc2lnbmVkIGxvbmcgY3Jpc19zd2Fwbndicmx6KHVuc2lnbmVkIGxvbmcgdykKK3sKKwkvKiBMZXQncyBqdXN0IHNheSB3ZSByZXR1cm4gdGhlIHJlc3VsdCBpbiB0aGUgc2FtZSByZWdpc3RlciBhcyB0aGUKKwkgICBpbnB1dC4gIFNheWluZyB3ZSBjbG9iYmVyIHRoZSBpbnB1dCBidXQgY2FuIHJldHVybiB0aGUgcmVzdWx0CisJICAgaW4gYW5vdGhlciByZWdpc3RlcjoKKwkgICAhICBfX2FzbV9fICgic3dhcG53YnIgJTJcblx0bHogJTIsJTAiCisJICAgIQkgICAgICA6ICI9cixyIiAocmVzKSwgIj1yLFgiIChkdW1teSkgOiAiMSwwIiAodykpOworCSAgIGNvbmZ1c2VzIGdjYyAoc2NoZWQuYywgZ2NjIGZyb20gY3Jpcy1kaXN0LTEuMTQpLiAgKi8KKworCXVuc2lnbmVkIGxvbmcgcmVzOworCV9fYXNtX18gKCJzd2FwbndiciAlMCBcblx0IgorCQkgImx6ICUwLCUwIgorCQkgOiAiPXIiIChyZXMpIDogIjAiICh3KSk7CisJcmV0dXJuIHJlczsKK30KKworZXh0ZXJuIGlubGluZSB1bnNpZ25lZCBsb25nIGNyaXNfc3dhcHdicmx6KHVuc2lnbmVkIGxvbmcgdykKK3sKKwl1bnNpZ25lZCByZXM7CisJX19hc21fXyAoInN3YXB3YnIgJTAgXG5cdCIKKwkJICJseiAlMCwlMCIKKwkJIDogIj1yIiAocmVzKQorCQkgOiAiMCIgKHcpKTsKKwlyZXR1cm4gcmVzOworfQorCisvKgorICogZmZ6ID0gRmluZCBGaXJzdCBaZXJvIGluIHdvcmQuIFVuZGVmaW5lZCBpZiBubyB6ZXJvIGV4aXN0cywKKyAqIHNvIGNvZGUgc2hvdWxkIGNoZWNrIGFnYWluc3QgfjBVTCBmaXJzdC4uCisgKi8KK2V4dGVybiBpbmxpbmUgdW5zaWduZWQgbG9uZyBmZnoodW5zaWduZWQgbG9uZyB3KQoreworCXJldHVybiBjcmlzX3N3YXBud2JybHoodyk7Cit9CisKKy8qKgorICogX19mZnMgLSBmaW5kIGZpcnN0IGJpdCBpbiB3b3JkLgorICogQHdvcmQ6IFRoZSB3b3JkIHRvIHNlYXJjaAorICoKKyAqIFVuZGVmaW5lZCBpZiBubyBiaXQgZXhpc3RzLCBzbyBjb2RlIHNob3VsZCBjaGVjayBhZ2FpbnN0IDAgZmlyc3QuCisgKi8KK2V4dGVybiBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgX19mZnModW5zaWduZWQgbG9uZyB3b3JkKQoreworCXJldHVybiBjcmlzX3N3YXBud2JybHoofndvcmQpOworfQorCisvKioKKyAqIGZmcyAtIGZpbmQgZmlyc3QgYml0IHNldAorICogQHg6IHRoZSB3b3JkIHRvIHNlYXJjaAorICoKKyAqIFRoaXMgaXMgZGVmaW5lZCB0aGUgc2FtZSB3YXkgYXMKKyAqIHRoZSBsaWJjIGFuZCBjb21waWxlciBidWlsdGluIGZmcyByb3V0aW5lcywgdGhlcmVmb3JlCisgKiBkaWZmZXJzIGluIHNwaXJpdCBmcm9tIHRoZSBhYm92ZSBmZnogKG1hbiBmZnMpLgorICovCisKK2V4dGVybiBpbmxpbmUgdW5zaWduZWQgbG9uZyBrZXJuZWxfZmZzKHVuc2lnbmVkIGxvbmcgdykKK3sKKwlyZXR1cm4gdyA/IGNyaXNfc3dhcHdicmx6ICh3KSArIDEgOiAwOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MTAvYnl0ZW9yZGVyLmggYi9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjEwL2J5dGVvcmRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyNDQ2NWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjEwL2J5dGVvcmRlci5oCkBAIC0wLDAgKzEsMjYgQEAKKyNpZm5kZWYgX0NSSVNfQVJDSF9CWVRFT1JERVJfSAorI2RlZmluZSBfQ1JJU19BUkNIX0JZVEVPUkRFUl9ICisKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorCisvKiB3ZSBqdXN0IGRlZmluZSB0aGVzZSB0d28gKGFzIHdlIGNhbiBkbyB0aGUgc3dhcCBpbiBhIHNpbmdsZQorICogYXNtIGluc3RydWN0aW9uIGluIENSSVMpIGFuZCB0aGUgYXJjaC1pbmRlcGVuZGVudCBmaWxlcyB3aWxsIHB1dAorICogdGhlbSB0b2dldGhlciBpbnRvIG50b2hsIGV0Yy4KKyAqLworCitleHRlcm4gX19pbmxpbmVfXyBfX2F0dHJpYnV0ZV9jb25zdF9fIF9fdTMyIF9fX2FyY2hfX3N3YWIzMihfX3UzMiB4KQoreworCV9fYXNtX18gKCJzd2Fwd2IgJTAiIDogIj1yIiAoeCkgOiAiMCIgKHgpKTsKKyAgCisJcmV0dXJuKHgpOworfQorCitleHRlcm4gX19pbmxpbmVfXyBfX2F0dHJpYnV0ZV9jb25zdF9fIF9fdTE2IF9fX2FyY2hfX3N3YWIxNihfX3UxNiB4KQoreworCV9fYXNtX18gKCJzd2FwYiAlMCIgOiAiPXIiICh4KSA6ICIwIiAoeCkpOworCQorCXJldHVybih4KTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjEwL2NhY2hlLmggYi9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjEwL2NhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQxZDFiYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MTAvY2FjaGUuaApAQCAtMCwwICsxLDkgQEAKKyNpZm5kZWYgX0FTTV9BUkNIX0NBQ0hFX0gKKyNkZWZpbmUgX0FTTV9BUkNIX0NBQ0hFX0gKKworLyogRXRyYXggMTAwTFggaGF2ZSAzMi1ieXRlIGNhY2hlLWxpbmVzLiAqLworI2RlZmluZSBMMV9DQUNIRV9CWVRFUyAzMgorI2RlZmluZSBMMV9DQUNIRV9TSElGVCA1CisjZGVmaW5lIEwxX0NBQ0hFX1NISUZUX01BWCA1CisKKyNlbmRpZiAvKiBfQVNNX0FSQ0hfQ0FDSEVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy9hcmNoLXYxMC9jaGVja3N1bS5oIGIvaW5jbHVkZS9hc20tY3Jpcy9hcmNoLXYxMC9jaGVja3N1bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkZTFkMDAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjEwL2NoZWNrc3VtLmgKQEAgLTAsMCArMSwyOSBAQAorI2lmbmRlZiBfQ1JJU19BUkNIX0NIRUNLU1VNX0gKKyNkZWZpbmUgX0NSSVNfQVJDSF9DSEVDS1NVTV9ICisKKy8qIENoZWNrc3VtIHNvbWUgdmFsdWVzIHVzZWQgaW4gVENQL1VEUCBoZWFkZXJzLgorICoKKyAqIFRoZSBnYWluIGJ5IGRvaW5nIHRoaXMgaW4gYXNtIGlzIHRoYXQgQyB3aWxsIG5vdCBnZW5lcmF0ZSBjYXJyeS1hZGRpdGlvbnMKKyAqIGZvciB0aGUgMzItYml0IGNvbXBvbmVudHMgb2YgdGhlIGNoZWNrc3VtLCBzbyBvdGhlcndpc2Ugd2Ugd291bGQgaGF2ZSBoYWQKKyAqIHRvIHNwbGl0IGFsbCBvZiB0aG9zZSBpbnRvIDE2LWJpdCBjb21wb25lbnRzLCB0aGVuIGFkZC4KKyAqLworCitleHRlcm4gaW5saW5lIHVuc2lnbmVkIGludAorY3N1bV90Y3B1ZHBfbm9mb2xkKHVuc2lnbmVkIGxvbmcgc2FkZHIsIHVuc2lnbmVkIGxvbmcgZGFkZHIsIHVuc2lnbmVkIHNob3J0IGxlbiwKKwkJICAgdW5zaWduZWQgc2hvcnQgcHJvdG8sIHVuc2lnbmVkIGludCBzdW0pCit7CisJaW50IHJlczsKKwlfX2FzbV9fICgiYWRkLmQgJTIsICUwXG5cdCIKKwkJICJheFxuXHQiCisJCSAiYWRkLmQgJTMsICUwXG5cdCIKKwkJICJheFxuXHQiCisJCSAiYWRkLmQgJTQsICUwXG5cdCIKKwkJICJheFxuXHQiCisJCSAiYWRkcSAwLCAlMFxuIgorCTogIj1yIiAocmVzKQorCTogIjAiIChzdW0pLCAiciIgKGRhZGRyKSwgInIiIChzYWRkciksICJyIiAoKG50b2hzKGxlbikgPDwgMTYpICsgKHByb3RvIDw8IDgpKSk7CisKKwlyZXR1cm4gcmVzOworfQkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjEwL2RlbGF5LmggYi9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjEwL2RlbGF5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZlZGFlMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MTAvZGVsYXkuaApAQCAtMCwwICsxLDIwIEBACisjaWZuZGVmIF9DUklTX0FSQ0hfREVMQVlfSAorI2RlZmluZSBfQ1JJU19BUkNIX0RFTEFZX0gKKworZXh0ZXJuIF9faW5saW5lX18gdm9pZCBfX2RlbGF5KGludCBsb29wcykKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCQkgICAgICAibW92ZS5kICUwLCRyOVxuXHQiCisJCQkgICAgICAiYmVxIDJmXG5cdCIKKwkJCSAgICAgICJzdWJxIDEsJHI5XG5cdCIKKwkJCSAgICAgICIxOlxuXHQiCisJCQkgICAgICAiYm5lIDFiXG5cdCIKKwkJCSAgICAgICJzdWJxIDEsJHI5XG4iCisJCQkgICAgICAiMjoiCisJCQkgICAgICA6IDogImciIChsb29wcykgOiAicjkiKTsKK30KKworI2VuZGlmIC8qIGRlZmluZWQoX0NSSVNfQVJDSF9ERUxBWV9IKSAqLworCisKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy9hcmNoLXYxMC9kbWEuaCBiL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MTAvZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWUwNzhiOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MTAvZG1hLmgKQEAgLTAsMCArMSw0NiBAQAorLyogRGVmaW5lcyBmb3IgdXNpbmcgYW5kIGFsbG9jYXRpbmcgZG1hIGNoYW5uZWxzLiAqLworCisjaWZuZGVmIF9BU01fQVJDSF9ETUFfSAorI2RlZmluZSBfQVNNX0FSQ0hfRE1BX0gKKworI2RlZmluZSBNQVhfRE1BX0NIQU5ORUxTCTEwCisKKy8qIGRtYTAgYW5kIGRtYTEgdXNlZCBmb3IgbmV0d29yayAoZXRoZXJuZXQpICovCisjZGVmaW5lIE5FVFdPUktfVFhfRE1BX05CUiAwCisjZGVmaW5lIE5FVFdPUktfUlhfRE1BX05CUiAxCisKKy8qIGRtYTIgYW5kIGRtYTMgc2hhcmVkIGJ5IHBhcjAsIHNjc2kwLCBzZXIyIGFuZCBhdGEgKi8KKyNkZWZpbmUgUEFSMF9UWF9ETUFfTkJSIDIKKyNkZWZpbmUgUEFSMF9SWF9ETUFfTkJSIDMKKyNkZWZpbmUgU0NTSTBfVFhfRE1BX05CUiAyCisjZGVmaW5lIFNDU0kwX1JYX0RNQV9OQlIgMworI2RlZmluZSBTRVIyX1RYX0RNQV9OQlIgMgorI2RlZmluZSBTRVIyX1JYX0RNQV9OQlIgMworI2RlZmluZSBBVEFfVFhfRE1BX05CUiAyCisjZGVmaW5lIEFUQV9SWF9ETUFfTkJSIDMKKworLyogZG1hNCBhbmQgZG1hNSBzaGFyZWQgYnkgcGFyMSwgc2NzaTEsIHNlcjMgYW5kIGV4dGRtYTAgKi8KKyNkZWZpbmUgUEFSMV9UWF9ETUFfTkJSIDQKKyNkZWZpbmUgUEFSMV9SWF9ETUFfTkJSIDUKKyNkZWZpbmUgU0NTSTFfVFhfRE1BX05CUiA0CisjZGVmaW5lIFNDU0kxX1JYX0RNQV9OQlIgNQorI2RlZmluZSBTRVIzX1RYX0RNQV9OQlIgNAorI2RlZmluZSBTRVIzX1JYX0RNQV9OQlIgNQorI2RlZmluZSBFWFRETUEwX1RYX0RNQV9OQlIgNAorI2RlZmluZSBFWFRETUEwX1JYX0RNQV9OQlIgNQorCisvKiBkbWE2IGFuZCBkbWE3IHNoYXJlZCBieSBzZXIwLCBleHRkbWExIGFuZCBtZW0ybWVtICovCisjZGVmaW5lIFNFUjBfVFhfRE1BX05CUiA2CisjZGVmaW5lIFNFUjBfUlhfRE1BX05CUiA3CisjZGVmaW5lIEVYVERNQTFfVFhfRE1BX05CUiA2CisjZGVmaW5lIEVYVERNQTFfUlhfRE1BX05CUiA3CisjZGVmaW5lIE1FTTJNRU1fVFhfRE1BX05CUiA2CisjZGVmaW5lIE1FTTJNRU1fUlhfRE1BX05CUiA3CisKKy8qIGRtYTggYW5kIGRtYTkgc2hhcmVkIGJ5IHNlcjEgYW5kIHVzYiAqLworI2RlZmluZSBTRVIxX1RYX0RNQV9OQlIgOAorI2RlZmluZSBTRVIxX1JYX0RNQV9OQlIgOQorI2RlZmluZSBVU0JfVFhfRE1BX05CUiA4CisjZGVmaW5lIFVTQl9SWF9ETUFfTkJSIDkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjEwL2VsZi5oIGIvaW5jbHVkZS9hc20tY3Jpcy9hcmNoLXYxMC9lbGYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTIyMDFjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9hcmNoLXYxMC9lbGYuaApAQCAtMCwwICsxLDcxIEBACisjaWZuZGVmIF9fQVNNQ1JJU19BUkNIX0VMRl9ICisjZGVmaW5lIF9fQVNNQ1JJU19BUkNIX0VMRl9ICisKKy8qCisgKiBFTEYgcmVnaXN0ZXIgZGVmaW5pdGlvbnMuLgorICovCisKKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisKKy8qIFNWUjQvaTM4NiBBQkkgKHBhZ2VzIDMtMzEsIDMtMzIpIHNheXMgdGhhdCB3aGVuIHRoZSBwcm9ncmFtCisgICBzdGFydHMgKGEgcmVnaXN0ZXI7IGFzc3VtZSBmaXJzdCBwYXJhbSByZWdpc3RlciBmb3IgQ1JJUykKKyAgIGNvbnRhaW5zIGEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIHdoaWNoIG1pZ2h0IGJlCisgICByZWdpc3RlcmVkIHVzaW5nIGBhdGV4aXQnLiAgVGhpcyBwcm92aWRlcyBhIG1lYW4gZm9yIHRoZQorICAgZHluYW1pYyBsaW5rZXIgdG8gY2FsbCBEVF9GSU5JIGZ1bmN0aW9ucyBmb3Igc2hhcmVkIGxpYnJhcmllcworICAgdGhhdCBoYXZlIGJlZW4gbG9hZGVkIGJlZm9yZSB0aGUgY29kZSBydW5zLgorCisgICBBIHZhbHVlIG9mIDAgdGVsbHMgd2UgaGF2ZSBubyBzdWNoIGhhbmRsZXIuICAqLworCisvKiBFeHBsaWNpdGx5IHNldCByZWdpc3RlcnMgdG8gMCB0byBpbmNyZWFzZSBkZXRlcm1pbmlzbS4gICovCisjZGVmaW5lIEVMRl9QTEFUX0lOSVQoX3IsIGxvYWRfYWRkcikJZG8geyBcCisJKF9yKS0+cjEzID0gMDsgKF9yKS0+cjEyID0gMDsgKF9yKS0+cjExID0gMDsgKF9yKS0+cjEwID0gMDsgXAorCShfciktPnI5ID0gMDsgIChfciktPnI4ID0gMDsgIChfciktPnI3ID0gMDsgIChfciktPnI2ID0gMDsgIFwKKwkoX3IpLT5yNSA9IDA7ICAoX3IpLT5yNCA9IDA7ICAoX3IpLT5yMyA9IDA7ICAoX3IpLT5yMiA9IDA7ICBcCisJKF9yKS0+cjEgPSAwOyAgKF9yKS0+cjAgPSAwOyAgKF9yKS0+bW9mID0gMDsgKF9yKS0+c3JwID0gMDsgXAorfSB3aGlsZSAoMCkKKworLyogVGhlIGFkZGl0aW9uYWwgbGF5ZXIgYmVsb3cgaXMgYmVjYXVzZSB0aGUgc3RhY2sgcG9pbnRlciBpcyBtaXNzaW5nIGluIAorICAgdGhlIHB0X3JlZ3Mgc3RydWN0LCBidXQgbmVlZGVkIGluIGEgY29yZSBkdW1wLiBwcl9yZWcgaXMgYSBlbGZfZ3JlZ3NldF90LAorICAgYW5kIHNob3VsZCBiZSBmaWxsZWQgaW4gYWNjb3JkaW5nIHRvIHRoZSBsYXlvdXQgb2YgdGhlIHVzZXJfcmVnc19zdHJ1Y3QKKyAgIHN0cnVjdDsgcmVncyBpcyBhIHB0X3JlZ3Mgc3RydWN0LiBXZSBkdW1wIGFsbCByZWdpc3RlcnMsIHRob3VnaCBzZXZlcmFsIGFyZQorICAgb2J2aW91c2x5IHVubmVjZXNzYXJ5LiBUaGF0IHdheSB0aGVyZSdzIGxlc3MgbmVlZCBmb3IgaW50ZWxsaWdlbmNlIGF0IAorICAgdGhlIHJlY2VpdmluZyBlbmQgKGkuZS4gZ2RiKS4gKi8KKyNkZWZpbmUgRUxGX0NPUkVfQ09QWV9SRUdTKHByX3JlZywgcmVncykgICAgICAgICAgICAgICAgICAgXAorCXByX3JlZ1swXSA9IHJlZ3MtPnIwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlwcl9yZWdbMV0gPSByZWdzLT5yMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJcHJfcmVnWzJdID0gcmVncy0+cjI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXByX3JlZ1szXSA9IHJlZ3MtPnIzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlwcl9yZWdbNF0gPSByZWdzLT5yNDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJcHJfcmVnWzVdID0gcmVncy0+cjU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXByX3JlZ1s2XSA9IHJlZ3MtPnI2OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlwcl9yZWdbN10gPSByZWdzLT5yNzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJcHJfcmVnWzhdID0gcmVncy0+cjg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXByX3JlZ1s5XSA9IHJlZ3MtPnI5OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlwcl9yZWdbMTBdID0gcmVncy0+cjEwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJcHJfcmVnWzExXSA9IHJlZ3MtPnIxMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXByX3JlZ1sxMl0gPSByZWdzLT5yMTI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlwcl9yZWdbMTNdID0gcmVncy0+cjEzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJcHJfcmVnWzE0XSA9IHJkdXNwKCk7ICAgICAgICAgICAgICAgLyogc3AgKi8gICAgICAgXAorCXByX3JlZ1sxNV0gPSByZWdzLT5pcnA7ICAgICAgICAgICAgIC8qIHBjICovICAgICAgIFwKKwlwcl9yZWdbMTZdID0gMDsgICAgICAgICAgICAgICAgICAgICAvKiBwMCAqLyAgICAgICBcCisJcHJfcmVnWzE3XSA9IHJkdnIoKTsgICAgICAgICAgICAgICAgLyogdnIgKi8gICAgICAgXAorCXByX3JlZ1sxOF0gPSAwOyAgICAgICAgICAgICAgICAgICAgIC8qIHAyICovICAgICAgIFwKKwlwcl9yZWdbMTldID0gMDsgICAgICAgICAgICAgICAgICAgICAvKiBwMyAqLyAgICAgICBcCisJcHJfcmVnWzIwXSA9IDA7ICAgICAgICAgICAgICAgICAgICAgLyogcDQgKi8gICAgICAgXAorCXByX3JlZ1syMV0gPSAocmVncy0+ZGNjciAmIDB4ZmZmZik7IC8qIGNjciAqLyAgICAgIFwKKwlwcl9yZWdbMjJdID0gMDsgICAgICAgICAgICAgICAgICAgICAvKiBwNiAqLyAgICAgICBcCisJcHJfcmVnWzIzXSA9IHJlZ3MtPm1vZjsgICAgICAgICAgICAgLyogbW9mICovICAgICAgXAorCXByX3JlZ1syNF0gPSAwOyAgICAgICAgICAgICAgICAgICAgIC8qIHA4ICovICAgICAgIFwKKwlwcl9yZWdbMjVdID0gMDsgICAgICAgICAgICAgICAgICAgICAvKiBpYnIgKi8gICAgICBcCisJcHJfcmVnWzI2XSA9IDA7ICAgICAgICAgICAgICAgICAgICAgLyogaXJwICovICAgICAgXAorCXByX3JlZ1syN10gPSByZWdzLT5zcnA7ICAgICAgICAgICAgIC8qIHNycCAqLyAgICAgIFwKKwlwcl9yZWdbMjhdID0gMDsgICAgICAgICAgICAgICAgICAgICAvKiBiYXIgKi8gICAgICBcCisJcHJfcmVnWzI5XSA9IHJlZ3MtPmRjY3I7ICAgICAgICAgICAgLyogZGNjciAqLyAgICAgXAorCXByX3JlZ1szMF0gPSAwOyAgICAgICAgICAgICAgICAgICAgIC8qIGJycCAqLyAgICAgIFwKKwlwcl9yZWdbMzFdID0gcmR1c3AoKTsgICAgICAgICAgICAgICAvKiB1c3AgKi8gICAgICBcCisJcHJfcmVnWzMyXSA9IDA7ICAgICAgICAgICAgICAgICAgICAgLyogY3NyaW5zdHIgKi8gXAorCXByX3JlZ1szM10gPSAwOyAgICAgICAgICAgICAgICAgICAgIC8qIGNzcmFkZHIgKi8gIFwKKwlwcl9yZWdbMzRdID0gMDsgICAgICAgICAgICAgICAgICAgICAvKiBjc3JkYXRhICovCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjEwL2lvLmggYi9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjEwL2lvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJjMzhhMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MTAvaW8uaApAQCAtMCwwICsxLDE5MyBAQAorI2lmbmRlZiBfQVNNX0FSQ0hfQ1JJU19JT19ICisjZGVmaW5lIF9BU01fQVJDSF9DUklTX0lPX0gKKworI2luY2x1ZGUgPGFzbS9hcmNoL3N2aW50by5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisvKiBFdHJheCBzaGFkb3cgcmVnaXN0ZXJzIC0gd2hpY2ggbGl2ZSBpbiBhcmNoL2NyaXMva2VybmVsL3NoYWRvd3MuYyAqLworCitleHRlcm4gdW5zaWduZWQgbG9uZyBwb3J0X2dfZGF0YV9zaGFkb3c7CitleHRlcm4gdW5zaWduZWQgY2hhciBwb3J0X3BhX2Rpcl9zaGFkb3c7CitleHRlcm4gdW5zaWduZWQgY2hhciBwb3J0X3BhX2RhdGFfc2hhZG93OworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgcG9ydF9wYl9pMmNfc2hhZG93OworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgcG9ydF9wYl9jb25maWdfc2hhZG93OworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgcG9ydF9wYl9kaXJfc2hhZG93OworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgcG9ydF9wYl9kYXRhX3NoYWRvdzsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHJfdGltZXJfY3RybF9zaGFkb3c7CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIHBvcnRfY3NlMV9zaGFkb3c7CitleHRlcm4gdW5zaWduZWQgbG9uZyBwb3J0X2NzcDBfc2hhZG93OworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcG9ydF9jc3A0X3NoYWRvdzsKKworZXh0ZXJuIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKnBvcnRfY3NlMV9hZGRyOworZXh0ZXJuIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKnBvcnRfY3NwMF9hZGRyOworZXh0ZXJuIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKnBvcnRfY3NwNF9hZGRyOworCisvKiBtYWNybyBmb3Igc2V0dGluZyByZWdzIHRocm91Z2ggYSBzaGFkb3cgLSAKKyAqIHIgPSByZWdpc3RlciBuYW1lIChsaWtlIFJfUE9SVF9QQV9EQVRBKQorICogcyA9IHNoYWRvdyBuYW1lIChsaWtlIHBvcnRfcGFfZGF0YV9zaGFkb3cpCisgKiBiID0gYml0IG51bWJlcgorICogdiA9IHZhbHVlICgwIG9yIDEpCisgKi8KKworI2RlZmluZSBSRUdfU0hBRE9XX1NFVChyLHMsYix2KSAqciA9IHMgPSAocyAmIH4oMSA8PCAoYikpKSB8ICgodikgPDwgKGIpKQorCisvKiBUaGUgTEVEJ3Mgb24gdmFyaW91cyBFdHJheC1iYXNlZCBwcm9kdWN0cyBhcmUgc2V0IGRpZmZlcmVudGx5LiAqLworCisjaWYgZGVmaW5lZChDT05GSUdfRVRSQVhfTk9fTEVEUykgfHwgZGVmaW5lZChDT05GSUdfU1ZJTlRPX1NJTSkKKyN1bmRlZiBDT05GSUdfRVRSQVhfUEFfTEVEUworI3VuZGVmIENPTkZJR19FVFJBWF9QQl9MRURTCisjdW5kZWYgQ09ORklHX0VUUkFYX0NTUDBfTEVEUworI2RlZmluZSBMRURfTkVUV09SS19TRVRfRyh4KQorI2RlZmluZSBMRURfTkVUV09SS19TRVRfUih4KQorI2RlZmluZSBMRURfQUNUSVZFX1NFVF9HKHgpCisjZGVmaW5lIExFRF9BQ1RJVkVfU0VUX1IoeCkKKyNkZWZpbmUgTEVEX0RJU0tfV1JJVEUoeCkKKyNkZWZpbmUgTEVEX0RJU0tfUkVBRCh4KQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChDT05GSUdfRVRSQVhfQ1NQMF9MRURTKQorI2RlZmluZSBMRURfQklUX1NFVCh4KQorI2RlZmluZSBMRURfQklUX0NMUih4KQorI2VuZGlmCisKKyNkZWZpbmUgTEVEX09GRiAgICAweDAwCisjZGVmaW5lIExFRF9HUkVFTiAgMHgwMQorI2RlZmluZSBMRURfUkVEICAgIDB4MDIKKyNkZWZpbmUgTEVEX09SQU5HRSAoTEVEX0dSRUVOIHwgTEVEX1JFRCkKKworI2lmIENPTkZJR19FVFJBWF9MRUQxRyA9PSBDT05GSUdfRVRSQVhfTEVEMVIgCisjZGVmaW5lIExFRF9ORVRXT1JLX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlMRURfTkVUV09SS19TRVRfRygoeCkgJiBMRURfR1JFRU4pOyBcCisJfSB3aGlsZSAoMCkKKyNlbHNlCisjZGVmaW5lIExFRF9ORVRXT1JLX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlMRURfTkVUV09SS19TRVRfRygoeCkgJiBMRURfR1JFRU4pOyBcCisJCUxFRF9ORVRXT1JLX1NFVF9SKCh4KSAmIExFRF9SRUQpOyAgIFwKKwl9IHdoaWxlICgwKQorI2VuZGlmCisjaWYgQ09ORklHX0VUUkFYX0xFRDJHID09IENPTkZJR19FVFJBWF9MRUQyUiAKKyNkZWZpbmUgTEVEX0FDVElWRV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCUxFRF9BQ1RJVkVfU0VUX0coKHgpICYgTEVEX0dSRUVOKTsgIFwKKwl9IHdoaWxlICgwKQorI2Vsc2UKKyNkZWZpbmUgTEVEX0FDVElWRV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCUxFRF9BQ1RJVkVfU0VUX0coKHgpICYgTEVEX0dSRUVOKTsgIFwKKwkJTEVEX0FDVElWRV9TRVRfUigoeCkgJiBMRURfUkVEKTsgICAgXAorCX0gd2hpbGUgKDApCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19FVFJBWF9QQV9MRURTCisjZGVmaW5lIExFRF9ORVRXT1JLX1NFVF9HKHgpIFwKKyAgICAgICAgIFJFR19TSEFET1dfU0VUKFJfUE9SVF9QQV9EQVRBLCBwb3J0X3BhX2RhdGFfc2hhZG93LCBDT05GSUdfRVRSQVhfTEVEMUcsICEoeCkpCisjZGVmaW5lIExFRF9ORVRXT1JLX1NFVF9SKHgpIFwKKyAgICAgICAgIFJFR19TSEFET1dfU0VUKFJfUE9SVF9QQV9EQVRBLCBwb3J0X3BhX2RhdGFfc2hhZG93LCBDT05GSUdfRVRSQVhfTEVEMVIsICEoeCkpCisjZGVmaW5lIExFRF9BQ1RJVkVfU0VUX0coeCkgXAorICAgICAgICAgUkVHX1NIQURPV19TRVQoUl9QT1JUX1BBX0RBVEEsIHBvcnRfcGFfZGF0YV9zaGFkb3csIENPTkZJR19FVFJBWF9MRUQyRywgISh4KSkKKyNkZWZpbmUgTEVEX0FDVElWRV9TRVRfUih4KSBcCisgICAgICAgICBSRUdfU0hBRE9XX1NFVChSX1BPUlRfUEFfREFUQSwgcG9ydF9wYV9kYXRhX3NoYWRvdywgQ09ORklHX0VUUkFYX0xFRDJSLCAhKHgpKQorI2RlZmluZSBMRURfRElTS19XUklURSh4KSBcCisgICAgICAgICBkb3tcCisgICAgICAgICAgICAgICAgUkVHX1NIQURPV19TRVQoUl9QT1JUX1BBX0RBVEEsIHBvcnRfcGFfZGF0YV9zaGFkb3csIENPTkZJR19FVFJBWF9MRUQzRywgISh4KSk7XAorICAgICAgICAgICAgICAgIFJFR19TSEFET1dfU0VUKFJfUE9SVF9QQV9EQVRBLCBwb3J0X3BhX2RhdGFfc2hhZG93LCBDT05GSUdfRVRSQVhfTEVEM1IsICEoeCkpO1wKKyAgICAgICAgfXdoaWxlKDApCisjZGVmaW5lIExFRF9ESVNLX1JFQUQoeCkgXAorICAgICAgICAgUkVHX1NIQURPV19TRVQoUl9QT1JUX1BBX0RBVEEsIHBvcnRfcGFfZGF0YV9zaGFkb3csIENPTkZJR19FVFJBWF9MRUQzRywgISh4KSkgCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19FVFJBWF9QQl9MRURTCisjZGVmaW5lIExFRF9ORVRXT1JLX1NFVF9HKHgpIFwKKyAgICAgICAgIFJFR19TSEFET1dfU0VUKFJfUE9SVF9QQl9EQVRBLCBwb3J0X3BiX2RhdGFfc2hhZG93LCBDT05GSUdfRVRSQVhfTEVEMUcsICEoeCkpCisjZGVmaW5lIExFRF9ORVRXT1JLX1NFVF9SKHgpIFwKKyAgICAgICAgIFJFR19TSEFET1dfU0VUKFJfUE9SVF9QQl9EQVRBLCBwb3J0X3BiX2RhdGFfc2hhZG93LCBDT05GSUdfRVRSQVhfTEVEMVIsICEoeCkpCisjZGVmaW5lIExFRF9BQ1RJVkVfU0VUX0coeCkgXAorICAgICAgICAgUkVHX1NIQURPV19TRVQoUl9QT1JUX1BCX0RBVEEsIHBvcnRfcGJfZGF0YV9zaGFkb3csIENPTkZJR19FVFJBWF9MRUQyRywgISh4KSkKKyNkZWZpbmUgTEVEX0FDVElWRV9TRVRfUih4KSBcCisgICAgICAgICBSRUdfU0hBRE9XX1NFVChSX1BPUlRfUEJfREFUQSwgcG9ydF9wYl9kYXRhX3NoYWRvdywgQ09ORklHX0VUUkFYX0xFRDJSLCAhKHgpKQorI2RlZmluZSBMRURfRElTS19XUklURSh4KSBcCisgICAgICAgIGRve1wKKyAgICAgICAgICAgICAgICBSRUdfU0hBRE9XX1NFVChSX1BPUlRfUEJfREFUQSwgcG9ydF9wYl9kYXRhX3NoYWRvdywgQ09ORklHX0VUUkFYX0xFRDNHLCAhKHgpKTtcCisgICAgICAgICAgICAgICAgUkVHX1NIQURPV19TRVQoUl9QT1JUX1BCX0RBVEEsIHBvcnRfcGJfZGF0YV9zaGFkb3csIENPTkZJR19FVFJBWF9MRUQzUiwgISh4KSk7XAorICAgICAgICB9d2hpbGUoMCkKKyNkZWZpbmUgTEVEX0RJU0tfUkVBRCh4KSBcCisgICAgICAgICBSRUdfU0hBRE9XX1NFVChSX1BPUlRfUEJfREFUQSwgcG9ydF9wYl9kYXRhX3NoYWRvdywgQ09ORklHX0VUUkFYX0xFRDNHLCAhKHgpKSAgICAgCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19FVFJBWF9DU1AwX0xFRFMKKyNkZWZpbmUgQ09ORklHVVJBQkxFX0xFRFNcCisgICAgICAgICgoMSA8PCBDT05GSUdfRVRSQVhfTEVEMUcgKSB8ICgxIDw8IENPTkZJR19FVFJBWF9MRUQxUiApIHxcCisgICAgICAgICAoMSA8PCBDT05GSUdfRVRSQVhfTEVEMkcgKSB8ICgxIDw8IENPTkZJR19FVFJBWF9MRUQyUiApIHxcCisgICAgICAgICAoMSA8PCBDT05GSUdfRVRSQVhfTEVEM0cgKSB8ICgxIDw8IENPTkZJR19FVFJBWF9MRUQzUiApIHxcCisgICAgICAgICAoMSA8PCBDT05GSUdfRVRSQVhfTEVENEcgKSB8ICgxIDw8IENPTkZJR19FVFJBWF9MRUQ0UiApIHxcCisgICAgICAgICAoMSA8PCBDT05GSUdfRVRSQVhfTEVENUcgKSB8ICgxIDw8IENPTkZJR19FVFJBWF9MRUQ1UiApIHxcCisgICAgICAgICAoMSA8PCBDT05GSUdfRVRSQVhfTEVENkcgKSB8ICgxIDw8IENPTkZJR19FVFJBWF9MRUQ2UiApIHxcCisgICAgICAgICAoMSA8PCBDT05GSUdfRVRSQVhfTEVEN0cgKSB8ICgxIDw8IENPTkZJR19FVFJBWF9MRUQ3UiApIHxcCisgICAgICAgICAoMSA8PCBDT05GSUdfRVRSQVhfTEVEOFkgKSB8ICgxIDw8IENPTkZJR19FVFJBWF9MRUQ5WSApIHxcCisgICAgICAgICAoMSA8PCBDT05GSUdfRVRSQVhfTEVEMTBZICkgfCgxIDw8IENPTkZJR19FVFJBWF9MRUQxMVkgKXxcCisgICAgICAgICAoMSA8PCBDT05GSUdfRVRSQVhfTEVEMTJSICkpCisKKyNkZWZpbmUgTEVEX05FVFdPUktfU0VUX0coeCkgXAorICAgICAgICAgUkVHX1NIQURPV19TRVQocG9ydF9jc3AwX2FkZHIsIHBvcnRfY3NwMF9zaGFkb3csIENPTkZJR19FVFJBWF9MRUQxRywgISh4KSkKKyNkZWZpbmUgTEVEX05FVFdPUktfU0VUX1IoeCkgXAorICAgICAgICAgUkVHX1NIQURPV19TRVQocG9ydF9jc3AwX2FkZHIsIHBvcnRfY3NwMF9zaGFkb3csIENPTkZJR19FVFJBWF9MRUQxUiwgISh4KSkKKyNkZWZpbmUgTEVEX0FDVElWRV9TRVRfRyh4KSBcCisgICAgICAgICBSRUdfU0hBRE9XX1NFVChwb3J0X2NzcDBfYWRkciwgcG9ydF9jc3AwX3NoYWRvdywgQ09ORklHX0VUUkFYX0xFRDJHLCAhKHgpKQorI2RlZmluZSBMRURfQUNUSVZFX1NFVF9SKHgpIFwKKyAgICAgICAgIFJFR19TSEFET1dfU0VUKHBvcnRfY3NwMF9hZGRyLCBwb3J0X2NzcDBfc2hhZG93LCBDT05GSUdfRVRSQVhfTEVEMlIsICEoeCkpCisjZGVmaW5lIExFRF9ESVNLX1dSSVRFKHgpIFwKKyAgICAgICAgZG97XAorICAgICAgICAgICAgICAgIFJFR19TSEFET1dfU0VUKHBvcnRfY3NwMF9hZGRyLCBwb3J0X2NzcDBfc2hhZG93LCBDT05GSUdfRVRSQVhfTEVEM0csICEoeCkpO1wKKyAgICAgICAgICAgICAgICBSRUdfU0hBRE9XX1NFVChwb3J0X2NzcDBfYWRkciwgcG9ydF9jc3AwX3NoYWRvdywgQ09ORklHX0VUUkFYX0xFRDNSLCAhKHgpKTtcCisgICAgICAgIH13aGlsZSgwKQorI2RlZmluZSBMRURfRElTS19SRUFEKHgpIFwKKyAgICAgICAgIFJFR19TSEFET1dfU0VUKHBvcnRfY3NwMF9hZGRyLCBwb3J0X2NzcDBfc2hhZG93LCBDT05GSUdfRVRSQVhfTEVEM0csICEoeCkpCisjZGVmaW5lIExFRF9CSVRfU0VUKHgpXAorICAgICAgICBkb3tcCisgICAgICAgICAgICAgICAgaWYoKCggMSA8PCB4KSAmIENPTkZJR1VSQUJMRV9MRURTKSAgIT0gMClcCisgICAgICAgICAgICAgICAgICAgICAgIFJFR19TSEFET1dfU0VUKHBvcnRfY3NwMF9hZGRyLCBwb3J0X2NzcDBfc2hhZG93LCB4LCAxKTtcCisgICAgICAgIH13aGlsZSgwKQorI2RlZmluZSBMRURfQklUX0NMUih4KVwKKyAgICAgICAgZG97XAorICAgICAgICAgICAgICAgIGlmKCgoIDEgPDwgeCkgJiBDT05GSUdVUkFCTEVfTEVEUykgICE9IDApXAorICAgICAgICAgICAgICAgICAgICAgICBSRUdfU0hBRE9XX1NFVChwb3J0X2NzcDBfYWRkciwgcG9ydF9jc3AwX3NoYWRvdywgeCwgMCk7XAorICAgICAgICB9d2hpbGUoMCkKKyNlbmRpZgorCisjCisjaWZkZWYgQ09ORklHX0VUUkFYX1NPRlRfU0hVVERPV04KKyNkZWZpbmUgU09GVF9TSFVURE9XTigpIFwKKyAgICAgICAgICBSRUdfU0hBRE9XX1NFVChwb3J0X2NzcDBfYWRkciwgcG9ydF9jc3AwX3NoYWRvdywgQ09ORklHX0VUUkFYX1NIVVRET1dOX0JJVCwgMSkKKyNlbHNlCisjZGVmaW5lIFNPRlRfU0hVVERPV04oKQorI2VuZGlmCisKKy8qIENvbnNvbGUgSS9PIGZvciBzaW11bGF0ZWQgZXRyYXgxMDAuICBVc2UgI2lmZGVmIHNvIGVycm9uZW91cworICAgdXNlIHdpbGwgYmUgZXZpZGVudC4gKi8KKyNpZmRlZiBDT05GSUdfU1ZJTlRPX1NJTQorICAvKiBMZXQncyB1c2UgdGhlIHVjc2ltIGludGVyZmFjZSBzaW5jZSBpdCBsZXRzIHVzIGRvIHdyaXRlKDIsIC4uLikgKi8KKyNkZWZpbmUgU0lNQ09VVChzLGxlbikJCQkJCQkJXAorICBhc20gKCJtb3ZlcSA0LCRyOQlcblx0IgkJCQkJCVwKKyAgICAgICAibW92ZXEgMiwkcjEwCVxuXHQiCQkJCQkJXAorICAgICAgICJtb3ZlLmQgJTAsJHIxMQlcblx0IgkJCQkJCVwKKyAgICAgICAibW92ZS5kICUxLCRyMTIJXG5cdCIJCQkJCQlcCisgICAgICAgInB1c2ggJGlycAlcblx0IgkJCQkJCVwKKyAgICAgICAibW92ZSAwZiwkaXJwCVxuXHQiCQkJCQkJXAorICAgICAgICJqdW1wIC02ODA5CVxuIgkJCQkJCVwKKyAgICAgICAiMDoJCVxuXHQiCQkJCQkJXAorICAgICAgICJwb3AgJGlycCIJCQkJCQkJXAorICAgICAgIDogOiAicm0iIChzKSwgInJtIiAobGVuKSA6ICJyOSIsInIxMCIsInIxMSIsInIxMiIsIm1lbW9yeSIpCisjZGVmaW5lIFRSQUNFX09OKCkgX19leHRlbnNpb25fXyBcCisgKHsgaW50IF9Gb29mb287IF9fYXNtX18gdm9sYXRpbGUgKCJibW9kIFslMF0sJTAiIDogIj1yIiAoX0Zvb2ZvbykgOiAiMCIgXAorCQkJICAgICAgICgyNTUpKTsgX0Zvb2ZvbzsgfSkKKworI2RlZmluZSBUUkFDRV9PRkYoKSBkbyB7IF9fYXNtX18gdm9sYXRpbGUgKCJibW9kIFslMF0sJTAiIDo6ICJyIiAoMjU0KSk7IH0gd2hpbGUgKDApCisjZGVmaW5lIFNJTV9FTkQoKSBkbyB7IF9fYXNtX18gdm9sYXRpbGUgKCJibW9kIFslMF0sJTAiIDo6ICJyIiAoMjgpKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgQ1JJU19DWUNMRVMoKSBfX2V4dGVuc2lvbl9fIFwKKyAoeyB1bnNpZ25lZCBsb25nIGM7IGFzbSAoImJtb2QgWyUxXSwlMCIgOiAiPXIiIChjKSA6ICJyIiAoMjcpKTsgYzt9KQorI2VuZGlmIC8qICEgZGVmaW5lZCBDT05GSUdfU1ZJTlRPX1NJTSAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MTAvaXJxLmggYi9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjEwL2lycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyYTZlMTUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjEwL2lycS5oCkBAIC0wLDAgKzEsMTgxIEBACisvKgorICogSW50ZXJydXB0IGhhbmRsaW5nIGFzc2VtYmxlciBhbmQgZGVmaW5lcyBmb3IgTGludXgvQ1JJU3YxMAorICovCisKKyNpZm5kZWYgX0FTTV9BUkNIX0lSUV9ICisjZGVmaW5lIF9BU01fQVJDSF9JUlFfSAorCisjaW5jbHVkZSA8YXNtL2FyY2gvc3ZfYWRkcl9hZy5oPgorCisjZGVmaW5lIE5SX0lSUVMgMzIKKworLyogVGhlIGZpcnN0IHZlY3RvciBudW1iZXIgdXNlZCBmb3IgSVJRcyBpbiB2MTAgaXMgcmVhbGx5IDB4MjAgKi8KKy8qIGJ1dCBhbGwgdGhlIGNvZGUgYW5kIGNvbnN0YW50cyBhcmUgb2Zmc2V0ZWQgdG8gbWFrZSAwIHRoZSBmaXJzdCAqLworI2RlZmluZSBGSVJTVF9JUlEgMAorCisjZGVmaW5lIFNPTUVfSVJRX05CUiAgICAgICAgSU9fQklUTlIoUl9WRUNUX01BU0tfUkQsIHNvbWUpICAgLyogMCA/ICovCisjZGVmaW5lIE5NSV9JUlFfTkJSICAgICAgICAgSU9fQklUTlIoUl9WRUNUX01BU0tfUkQsIG5taSkgICAgLyogMSAqLworI2RlZmluZSBUSU1FUjBfSVJRX05CUiAgICAgIElPX0JJVE5SKFJfVkVDVF9NQVNLX1JELCB0aW1lcjApIC8qIDIgKi8KKyNkZWZpbmUgVElNRVIxX0lSUV9OQlIgICAgICBJT19CSVROUihSX1ZFQ1RfTUFTS19SRCwgdGltZXIxKSAvKiAzICovCisvKiBtaW8sIGF0YSwgcGFyMCwgc2NzaTAgb24gNCAqLworLyogcGFyMSwgc2NzaTEgb24gNSAqLworI2RlZmluZSBORVRXT1JLX1NUQVRVU19JUlFfTkJSIElPX0JJVE5SKFJfVkVDVF9NQVNLX1JELCBuZXR3b3JrKSAvKiA2ICovCisKKyNkZWZpbmUgU0VSSUFMX0lSUV9OQlIgSU9fQklUTlIoUl9WRUNUX01BU0tfUkQsIHNlcmlhbCkgLyogOCAqLworI2RlZmluZSBQQV9JUlFfTkJSIElPX0JJVE5SKFJfVkVDVF9NQVNLX1JELCBwYSkgLyogMTEgKi8KKy8qIGV4dGRtYTAgYW5kIGV4dGRtYTEgaXMgYXQgaXJxIDEyIGFuZCAxMyBhbmQvb3Igc2FtZSBhcyBkbWE1IGFuZCBkbWE2ID8gKi8KKyNkZWZpbmUgRVhURE1BMF9JUlFfTkJSIElPX0JJVE5SKFJfVkVDVF9NQVNLX1JELCBleHRfZG1hMCkKKyNkZWZpbmUgRVhURE1BMV9JUlFfTkJSIElPX0JJVE5SKFJfVkVDVF9NQVNLX1JELCBleHRfZG1hMSkKKworLyogZG1hMC05IGlzIGlycSAxNi4uMjUgKi8KKy8qIDE2LDE3OiBuZXR3b3JrICovCisjZGVmaW5lIERNQTBfVFhfSVJRX05CUiBJT19CSVROUihSX1ZFQ1RfTUFTS19SRCwgZG1hMCkKKyNkZWZpbmUgRE1BMV9SWF9JUlFfTkJSIElPX0JJVE5SKFJfVkVDVF9NQVNLX1JELCBkbWExKQorI2RlZmluZSBORVRXT1JLX0RNQV9UWF9JUlFfTkJSIERNQTBfVFhfSVJRX05CUgorI2RlZmluZSBORVRXT1JLX0RNQV9SWF9JUlFfTkJSIERNQTFfUlhfSVJRX05CUgorCisvKiAxOCwxOTogZG1hMiBhbmQgZG1hMyBzaGFyZWQgYnkgcGFyMCwgc2NzaTAsIHNlcjIgYW5kIGF0YSAqLworI2RlZmluZSBETUEyX1RYX0lSUV9OQlIgSU9fQklUTlIoUl9WRUNUX01BU0tfUkQsIGRtYTIpCisjZGVmaW5lIERNQTNfUlhfSVJRX05CUiBJT19CSVROUihSX1ZFQ1RfTUFTS19SRCwgZG1hMykKKyNkZWZpbmUgU0VSMl9ETUFfVFhfSVJRX05CUiBETUEyX1RYX0lSUV9OQlIKKyNkZWZpbmUgU0VSMl9ETUFfUlhfSVJRX05CUiBETUEzX1JYX0lSUV9OQlIKKworLyogMjAsMjE6IGRtYTQgYW5kIGRtYTUgc2hhcmVkIGJ5IHBhcjEsIHNjc2kxLCBzZXIzIGFuZCBleHRkbWEwICovCisjZGVmaW5lIERNQTRfVFhfSVJRX05CUiBJT19CSVROUihSX1ZFQ1RfTUFTS19SRCwgZG1hNCkKKyNkZWZpbmUgRE1BNV9SWF9JUlFfTkJSIElPX0JJVE5SKFJfVkVDVF9NQVNLX1JELCBkbWE1KQorI2RlZmluZSBTRVIzX0RNQV9UWF9JUlFfTkJSIERNQTRfVFhfSVJRX05CUgorI2RlZmluZSBTRVIzX0RNQV9SWF9JUlFfTkJSIERNQTVfUlhfSVJRX05CUgorCisvKiAyMiwyMzogZG1hNiBhbmQgZG1hNyBzaGFyZWQgYnkgc2VyMCwgZXh0ZG1hMSBhbmQgbWVtMm1lbSAqLworI2RlZmluZSBETUE2X1RYX0lSUV9OQlIgSU9fQklUTlIoUl9WRUNUX01BU0tfUkQsIGRtYTYpCisjZGVmaW5lIERNQTdfUlhfSVJRX05CUiBJT19CSVROUihSX1ZFQ1RfTUFTS19SRCwgZG1hNykKKyNkZWZpbmUgU0VSMF9ETUFfVFhfSVJRX05CUiBETUE2X1RYX0lSUV9OQlIKKyNkZWZpbmUgU0VSMF9ETUFfUlhfSVJRX05CUiBETUE3X1JYX0lSUV9OQlIKKyNkZWZpbmUgTUVNMk1FTV9ETUFfVFhfSVJRX05CUiBETUE2X1RYX0lSUV9OQlIKKyNkZWZpbmUgTUVNMk1FTV9ETUFfUlhfSVJRX05CUiBETUE3X1JYX0lSUV9OQlIKKworLyogMjQsMjU6IGRtYTggYW5kIGRtYTkgc2hhcmVkIGJ5IHNlcjEgYW5kIHVzYiAqLworI2RlZmluZSBETUE4X1RYX0lSUV9OQlIgSU9fQklUTlIoUl9WRUNUX01BU0tfUkQsIGRtYTgpCisjZGVmaW5lIERNQTlfUlhfSVJRX05CUiBJT19CSVROUihSX1ZFQ1RfTUFTS19SRCwgZG1hOSkKKyNkZWZpbmUgU0VSMV9ETUFfVFhfSVJRX05CUiBETUE4X1RYX0lSUV9OQlIKKyNkZWZpbmUgU0VSMV9ETUFfUlhfSVJRX05CUiBETUE5X1JYX0lSUV9OQlIKKyNkZWZpbmUgVVNCX0RNQV9UWF9JUlFfTkJSIERNQThfVFhfSVJRX05CUgorI2RlZmluZSBVU0JfRE1BX1JYX0lSUV9OQlIgRE1BOV9SWF9JUlFfTkJSCisKKy8qIHVzYjogY29udHJvbGxlciBhdCBpcnEgMzEgKyB1c2VzIERNQTggYW5kIERNQTkgKi8KKyNkZWZpbmUgVVNCX0hDX0lSUV9OQlIgSU9fQklUTlIoUl9WRUNUX01BU0tfUkQsIHVzYikKKworLyogb3VyIGZpbmUsIGdsb2JhbCwgZXRyYXggaXJxIHZlY3RvciEgdGhlIHBvaW50ZXIgbGl2ZXMgaW4gdGhlIGhlYWQuUyBmaWxlLiAqLworCit0eXBlZGVmIHZvaWQgKCppcnF2ZWN0cHRyKSh2b2lkKTsKKworc3RydWN0IGV0cmF4X2ludGVycnVwdF92ZWN0b3IgeworCWlycXZlY3RwdHIgdlsyNTZdOworfTsKKworZXh0ZXJuIHN0cnVjdCBldHJheF9pbnRlcnJ1cHRfdmVjdG9yICpldHJheF9pcnY7Cit2b2lkIHNldF9pbnRfdmVjdG9yKGludCBuLCBpcnF2ZWN0cHRyIGFkZHIsIGlycXZlY3RwdHIgc2FkZHIpOwordm9pZCBzZXRfYnJlYWtfdmVjdG9yKGludCBuLCBpcnF2ZWN0cHRyIGFkZHIpOworCisjZGVmaW5lIG1hc2tfaXJxKGlycV9ucikgKCpSX1ZFQ1RfTUFTS19DTFIgPSAxIDw8IChpcnFfbnIpKTsKKyNkZWZpbmUgdW5tYXNrX2lycShpcnFfbnIpICgqUl9WRUNUX01BU0tfU0VUID0gMSA8PCAoaXJxX25yKSk7CisKKyNkZWZpbmUgX19TVFIoeCkgI3gKKyNkZWZpbmUgU1RSKHgpIF9fU1RSKHgpCisgCisvKiBTQVZFX0FMTCBzYXZlcyByZWdpc3RlcnMgc28gdGhleSBtYXRjaCBwdF9yZWdzICovCisKKyNkZWZpbmUgU0FWRV9BTEwgXAorICAibW92ZSAkaXJwLFskc3A9JHNwLTE2XVxuXHQiIC8qIHB1c2ggaW5zdHJ1Y3Rpb24gcG9pbnRlciBhbmQgZmFrZSBTQkZTIHN0cnVjdCAqLyBcCisgICJwdXNoICRzcnBcblx0IiAgICAgICAvKiBwdXNoIHN1YnJvdXRpbmUgcmV0dXJuIHBvaW50ZXIgKi8gXAorICAicHVzaCAkZGNjclxuXHQiICAgICAgLyogcHVzaCBjb25kaXRpb24gY29kZXMgKi8gXAorICAicHVzaCAkbW9mXG5cdCIgICAgICAgLyogcHVzaCBtdWx0aXBseSBvdmVyZmxvdyByZWcgKi8gXAorICAiZGlcblx0IiAgICAgICAgICAgICAvKiBuZWVkIHRvIGRpc2FibGUgaXJxJ3MgYXQgdGhpcyBwb2ludCAqL1wKKyAgInN1YnEgMTQqNCwkc3Bcblx0IiAgIC8qIG1ha2Ugcm9vbSBmb3IgcjAtcjEzICovIFwKKyAgIm1vdmVtICRyMTMsWyRzcF1cblx0IiAvKiBwdXNoIHRoZSByMC1yMTMgcmVnaXN0ZXJzICovIFwKKyAgInB1c2ggJHIxMFxuXHQiICAgICAgIC8qIHB1c2ggb3JpZ19yMTAgKi8gXAorICAiY2xlYXIuZCBbJHNwPSRzcC00XVxuXHQiICAvKiBmcmFtZXR5cGUgLSB0aGlzIGlzIGEgbm9ybWFsIHN0YWNrZnJhbWUgKi8KKworICAvKiBCTE9DS19JUlEgYW5kIFVOQkxPQ0tfSVJRIGRvIHRoZSBzYW1lIGFzIG1hc2tfaXJxIGFuZCB1bm1hc2tfaXJxICovCisKKyNkZWZpbmUgQkxPQ0tfSVJRKG1hc2ssbnIpIFwKKyAgIm1vdmUuZCAiICNtYXNrICIsJHIwXG5cdCIgXAorICAibW92ZS5kICRyMCxbMHhiMDAwMDBkOF1cblx0IiAKKyAgCisjZGVmaW5lIFVOQkxPQ0tfSVJRKG1hc2spIFwKKyAgIm1vdmUuZCAiICNtYXNrICIsJHIwXG5cdCIgXAorICAibW92ZS5kICRyMCxbMHhiMDAwMDBkY11cblx0IiAKKworI2RlZmluZSBJUlFfTkFNRTIobnIpIG5yIyNfaW50ZXJydXB0KHZvaWQpCisjZGVmaW5lIElSUV9OQU1FKG5yKSBJUlFfTkFNRTIoSVJRIyNucikKKyNkZWZpbmUgc0lSUV9OQU1FKG5yKSBJUlFfTkFNRTIoc0lSUSMjbnIpCisjZGVmaW5lIEJBRF9JUlFfTkFNRShucikgSVJRX05BTUUyKGJhZF9JUlEjI25yKQorCisgIC8qIHRoZSBhc20gSVJRIGhhbmRsZXIgbWFrZXMgc3VyZSB0aGUgY2F1c2luZyBJUlEgaXMgYmxvY2tlZCwgdGhlbiBpdCBjYWxscworICAgKiBkb19JUlEgKHdpdGggaXJxIGRpc2FibGVkIHN0aWxsKS4gYWZ0ZXIgdGhhdCBpdCB1bmJsb2NrcyBhbmQganVtcHMgdG8KKyAgICogcmV0X2Zyb21faW50ciAoZW50cnkuUykKKyAgICoKKyAgICogVGhlIHJlYXNvbiB0aGUgSVJRIGlzIGJsb2NrZWQgaXMgdG8gYWxsb3cgYW4gc3RpKCkgYmVmb3JlIHRoZSBoYW5kbGVyIHdoaWNoCisgICAqIHdpbGwgYWNrbm93bGVkZ2UgdGhlIGludGVycnVwdCBpcyBydW4uCisgICAqLworCisjZGVmaW5lIEJVSUxEX0lSUShucixtYXNrKSBcCit2b2lkIElSUV9OQU1FKG5yKTsgXAordm9pZCBzSVJRX05BTUUobnIpOyBcCit2b2lkIEJBRF9JUlFfTkFNRShucik7IFwKK19fYXNtX18gKCBcCisgICAgICAgICAgIi50ZXh0XG5cdCIgXAorICAgICAgICAgICJJUlEiICNuciAiX2ludGVycnVwdDpcblx0IiBcCisJICBTQVZFX0FMTCBcCisJICAic0lSUSIgI25yICJfaW50ZXJydXB0OlxuXHQiIC8qIHNob3J0Y3V0IGZvciB0aGUgbXVsdGlwbGUgaXJxIGhhbmRsZXIgKi8gXAorCSAgQkxPQ0tfSVJRKG1hc2ssbnIpIC8qIHRoaXMgbXVzdCBiZSBkb25lIHRvIHByZXZlbnQgaXJxIGxvb3BzIHdoZW4gd2UgZWkgbGF0ZXIgKi8gXAorCSAgIm1vdmVxICIjbnIiLCRyMTBcblx0IiBcCisJICAibW92ZS5kICRzcCwkcjExXG5cdCIgXAorCSAgImpzciBkb19JUlFcblx0IiAvKiBpcnEuYywgcjEwIGFuZCByMTEgYXJlIGFyZ3VtZW50cyAqLyBcCisJICBVTkJMT0NLX0lSUShtYXNrKSBcCisJICAibW92ZXEgMCwkcjlcblx0IiAvKiBtYWtlIHJldF9mcm9tX2ludHIgcmVhbGlzZSB3ZSBjYW1lIGZyb20gYW4gaXJxICovIFwKKwkgICJqdW1wIHJldF9mcm9tX2ludHJcblx0IiBcCisgICAgICAgICAgImJhZF9JUlEiICNuciAiX2ludGVycnVwdDpcblx0IiBcCisJICAicHVzaCAkcjBcblx0IiBcCisJICBCTE9DS19JUlEobWFzayxucikgXAorCSAgInBvcCAkcjBcblx0IiBcCisgICAgICAgICAgInJldGlcblx0IiBcCisgICAgICAgICAgIm5vcFxuIik7CisKKy8qIFRoaXMgaXMgc3VidGxlLiBUaGUgdGltZXIgaW50ZXJydXB0IGlzIGNydWNpYWwgYW5kIGl0IHNob3VsZCBub3QgYmUgZGlzYWJsZWQgZm9yIAorICogdG9vIGxvbmcuIEhvd2V2ZXIsIGlmIGl0IGhhZCBiZWVuIGEgbm9ybWFsIGludGVycnVwdCBhcyBwZXIgQlVJTERfSVJRLCBpdCB3b3VsZAorICogaGF2ZSBiZWVuIEJMT0NLJ2VkLCBhbmQgdGhlbiBzb2Z0aXJxJ3MgYXJlIHJ1biBiZWZvcmUgd2UgcmV0dXJuIGhlcmUgdG8gVU5CTE9DSy4KKyAqIElmIHRoZSBzb2Z0aXJxJ3MgdGFrZSB0b28gbXVjaCB0aW1lIHRvIHJ1biwgdGhlIHRpbWVyIGlycSB3b24ndCBydW4gYW5kIHRoZSAKKyAqIHdhdGNoZG9nIHdpbGwga2lsbCB1cy4KKyAqCisgKiBGdXJ0aGVybW9yZSwgaWYgYSBsb3Qgb2Ygb3RoZXIgaXJxJ3Mgb2NjdXIgYmVmb3JlIHdlIHJldHVybiBoZXJlLCB0aGUgbXVsdGlwbGVfaXJxCisgKiBoYW5kbGVyIGlzIHJ1biBhbmQgaXQgcHJpb3JpdGl6ZXMgdGhlIHRpbWVyIGludGVycnVwdC4gSG93ZXZlciBpZiB3ZSBoYWQgQkxPQ0snZWQKKyAqIGl0IGhlcmUsIHdlIHdvdWxkIG5vdCBnZXQgdGhlIG11bHRpcGxlX2lycSBhdCBhbGwuCisgKgorICogVGhlIG5vbi1ibG9ja2luZyBoZXJlIGlzIGJhc2VkIG9uIHRoZSBrbm93bGVkZ2UgdGhhdCB0aGUgdGltZXIgaW50ZXJydXB0IGlzIAorICogcmVnaXN0cmVkIGFzIGEgZmFzdCBpbnRlcnJ1cHQgKFNBX0lOVEVSUlVQVCkgc28gdGhhdCB3ZSBfa25vd18gdGhlcmUgd2lsbCBub3QKKyAqIGJlIGFuIHN0aSgpIGJlZm9yZSB0aGUgdGltZXIgaXJxIGhhbmRsZXIgaXMgcnVuIHRvIGFja25vd2xlZGdlIHRoZSBpbnRlcnJ1cHQuCisgKi8KKworI2RlZmluZSBCVUlMRF9USU1FUl9JUlEobnIsbWFzaykgXAordm9pZCBJUlFfTkFNRShucik7IFwKK3ZvaWQgc0lSUV9OQU1FKG5yKTsgXAordm9pZCBCQURfSVJRX05BTUUobnIpOyBcCitfX2FzbV9fICggXAorICAgICAgICAgICIudGV4dFxuXHQiIFwKKyAgICAgICAgICAiSVJRIiAjbnIgIl9pbnRlcnJ1cHQ6XG5cdCIgXAorCSAgU0FWRV9BTEwgXAorCSAgInNJUlEiICNuciAiX2ludGVycnVwdDpcblx0IiAvKiBzaG9ydGN1dCBmb3IgdGhlIG11bHRpcGxlIGlycSBoYW5kbGVyICovIFwKKwkgICJtb3ZlcSAiI25yIiwkcjEwXG5cdCIgXAorCSAgIm1vdmUuZCAkc3AsJHIxMVxuXHQiIFwKKwkgICJqc3IgZG9fSVJRXG5cdCIgLyogaXJxLmMsIHIxMCBhbmQgcjExIGFyZSBhcmd1bWVudHMgKi8gXAorCSAgIm1vdmVxIDAsJHI5XG5cdCIgLyogbWFrZSByZXRfZnJvbV9pbnRyIHJlYWxpc2Ugd2UgY2FtZSBmcm9tIGFuIGlycSAqLyBcCisJICAianVtcCByZXRfZnJvbV9pbnRyXG5cdCIgXAorICAgICAgICAgICJiYWRfSVJRIiAjbnIgIl9pbnRlcnJ1cHQ6XG5cdCIgXAorCSAgInB1c2ggJHIwXG5cdCIgXAorCSAgQkxPQ0tfSVJRKG1hc2ssbnIpIFwKKwkgICJwb3AgJHIwXG5cdCIgXAorICAgICAgICAgICJyZXRpXG5cdCIgXAorICAgICAgICAgICJub3BcbiIpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MTAvbW11LmggYi9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjEwL21tdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxOGFhMDAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjEwL21tdS5oCkBAIC0wLDAgKzEsMTA2IEBACisvKgorICogQ1JJUyBNTVUgY29uc3RhbnRzIGFuZCBQVEUgbGF5b3V0CisgKi8KKworI2lmbmRlZiBfQ1JJU19BUkNIX01NVV9ICisjZGVmaW5lIF9DUklTX0FSQ0hfTU1VX0gKKworLyogdHlwZSB1c2VkIGluIHN0cnVjdCBtbSB0byBjb3VwbGUgYW4gTU1VIGNvbnRleHQgdG8gYW4gYWN0aXZlIG1tICovCisKK3R5cGVkZWYgdW5zaWduZWQgaW50IG1tX2NvbnRleHRfdDsKKworLyoga2VybmVsIG1lbW9yeSBzZWdtZW50cyAqLworCisjZGVmaW5lIEtTRUdfRiAweGYwMDAwMDAwVUwKKyNkZWZpbmUgS1NFR19FIDB4ZTAwMDAwMDBVTAorI2RlZmluZSBLU0VHX0QgMHhkMDAwMDAwMFVMCisjZGVmaW5lIEtTRUdfQyAweGMwMDAwMDAwVUwKKyNkZWZpbmUgS1NFR19CIDB4YjAwMDAwMDBVTAorI2RlZmluZSBLU0VHX0EgMHhhMDAwMDAwMFVMCisjZGVmaW5lIEtTRUdfOSAweDkwMDAwMDAwVUwKKyNkZWZpbmUgS1NFR184IDB4ODAwMDAwMDBVTAorI2RlZmluZSBLU0VHXzcgMHg3MDAwMDAwMFVMCisjZGVmaW5lIEtTRUdfNiAweDYwMDAwMDAwVUwKKyNkZWZpbmUgS1NFR181IDB4NTAwMDAwMDBVTAorI2RlZmluZSBLU0VHXzQgMHg0MDAwMDAwMFVMCisjZGVmaW5lIEtTRUdfMyAweDMwMDAwMDAwVUwKKyNkZWZpbmUgS1NFR18yIDB4MjAwMDAwMDBVTAorI2RlZmluZSBLU0VHXzEgMHgxMDAwMDAwMFVMCisjZGVmaW5lIEtTRUdfMCAweDAwMDAwMDAwVUwKKworLyogQ1JJUyBQVEUgYml0cyAoc2VlIFJfVExCX0xPIGluIHRoZSByZWdpc3RlciBkZXNjcmlwdGlvbikKKyAqCisgKiAgIEJpdDogIDMxLTEzIDEyLS0tLS0tLTQgICAgMyAgICAgICAgMiAgICAgICAxICAgICAgIDAgIAorICogICAgICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKyAqICAgICAgICB8IHBmbiB8IHJlc2VydmVkIHwgZ2xvYmFsIHwgdmFsaWQgfCBrZXJuZWwgfCB3ZSAgfAorICogICAgICAgIHxfX19fX3xfX19fX19fX19ffF9fX19fX19ffF9fX19fX198X19fX19fX198X19fX198CisgKgorICogKHBmbiA9IHBoeXNpY2FsIGZyYW1lIG51bWJlcikKKyAqLworCisvKiBSZWFsIEhXLWJhc2VkIFBURSBiaXRzLiBXZSB1c2Ugc29tZSBzeW5vbnltIG5hbWVzIHNvIHRoYXQKKyAqIHRoaW5ncyBiZWNvbWUgbGVzcyBjb25mdXNpbmcgaW4gY29tYmluYXRpb24gd2l0aCB0aGUgU1ctYmFzZWQKKyAqIGJpdHMgZnVydGhlciBiZWxvdy4KKyAqCisgKi8KKworI2RlZmluZSBfUEFHRV9XRQkgICAoMTw8MCkgLyogcGFnZSBpcyB3cml0ZS1lbmFibGVkICovCisjZGVmaW5lIF9QQUdFX1NJTEVOVF9XUklURSAoMTw8MCkgLyogc3lub255bSAqLworI2RlZmluZSBfUEFHRV9LRVJORUwJICAgKDE8PDEpIC8qIHBhZ2UgaXMga2VybmVsIG9ubHkgKi8KKyNkZWZpbmUgX1BBR0VfVkFMSUQJICAgKDE8PDIpIC8qIHBhZ2UgaXMgdmFsaWQgKi8KKyNkZWZpbmUgX1BBR0VfU0lMRU5UX1JFQUQgICgxPDwyKSAvKiBzeW5vbnltICovCisjZGVmaW5lIF9QQUdFX0dMT0JBTCAgICAgICAoMTw8MykgLyogZ2xvYmFsIHBhZ2UgLSBjb250ZXh0IGlzIGlnbm9yZWQgKi8KKworLyogQml0cyB0aGUgSFcgZG9lc24ndCBjYXJlIGFib3V0IGJ1dCB0aGUga2VybmVsIHVzZXMgdGhlbSBpbiBTVyAqLworCisjZGVmaW5lIF9QQUdFX1BSRVNFTlQgICAoMTw8NCkgIC8qIHBhZ2UgcHJlc2VudCBpbiBtZW1vcnkgKi8KKyNkZWZpbmUgX1BBR0VfRklMRSAgICAgICgxPDw1KSAgLyogc2V0OiBwYWdlY2FjaGUsIHVuc2V0OiBzd2FwICh3aGVuICFQUkVTRU5UKSAqLworI2RlZmluZSBfUEFHRV9BQ0NFU1NFRAkoMTw8NSkgIC8qIHNpbXVsYXRlZCBpbiBzb2Z0d2FyZSB1c2luZyB2YWxpZCBiaXQgKi8KKyNkZWZpbmUgX1BBR0VfTU9ESUZJRUQJKDE8PDYpICAvKiBzaW11bGF0ZWQgaW4gc29mdHdhcmUgdXNpbmcgd2UgYml0ICovCisjZGVmaW5lIF9QQUdFX1JFQUQgICAgICAoMTw8NykgIC8qIHJlYWQtZW5hYmxlZCAqLworI2RlZmluZSBfUEFHRV9XUklURSAgICAgKDE8PDgpICAvKiB3cml0ZS1lbmFibGVkICovCisKKy8qIERlZmluZSBzb21lIGhpZ2hlciBsZXZlbCBnZW5lcmljIHBhZ2UgYXR0cmlidXRlcy4gKi8KKworI2RlZmluZSBfX1JFQURBQkxFICAgICAgKF9QQUdFX1JFQUQgfCBfUEFHRV9TSUxFTlRfUkVBRCB8IF9QQUdFX0FDQ0VTU0VEKQorI2RlZmluZSBfX1dSSVRFQUJMRSAgICAgKF9QQUdFX1dSSVRFIHwgX1BBR0VfU0lMRU5UX1dSSVRFIHwgX1BBR0VfTU9ESUZJRUQpCisKKyNkZWZpbmUgX1BBR0VfVEFCTEUgICAgIChfUEFHRV9QUkVTRU5UIHwgX19SRUFEQUJMRSB8IF9fV1JJVEVBQkxFKQorI2RlZmluZSBfUEFHRV9DSEdfTUFTSyAgKFBBR0VfTUFTSyB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfTU9ESUZJRUQpCisKKyNkZWZpbmUgUEFHRV9OT05FICAgICAgIF9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9BQ0NFU1NFRCkKKyNkZWZpbmUgUEFHRV9TSEFSRUQgICAgIF9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfX1JFQURBQkxFIHwgX1BBR0VfV1JJVEUgfCBcCisJCQkJIF9QQUdFX0FDQ0VTU0VEKQorI2RlZmluZSBQQUdFX0NPUFkgICAgICAgX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9fUkVBREFCTEUpICAvLyB8IF9QQUdFX0NPVworI2RlZmluZSBQQUdFX1JFQURPTkxZICAgX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9fUkVBREFCTEUpCisjZGVmaW5lIFBBR0VfS0VSTkVMICAgICBfX3BncHJvdChfUEFHRV9HTE9CQUwgfCBfUEFHRV9LRVJORUwgfCBcCisJCQkJIF9QQUdFX1BSRVNFTlQgfCBfX1JFQURBQkxFIHwgX19XUklURUFCTEUpCisjZGVmaW5lIF9LRVJOUEdfVEFCTEUgICAoX1BBR0VfVEFCTEUgfCBfUEFHRV9LRVJORUwpCisKKy8qCisgKiBDUklTIGNhbid0IGRvIHBhZ2UgcHJvdGVjdGlvbiBmb3IgZXhlY3V0ZSwgYW5kIGNvbnNpZGVycyByZWFkIHRoZSBzYW1lLgorICogQWxzbywgd3JpdGUgcGVybWlzc2lvbnMgaW1wbHkgcmVhZCBwZXJtaXNzaW9ucy4gVGhpcyBpcyB0aGUgY2xvc2VzdCB3ZSBjYW4KKyAqIGdldC4uCisgKi8KKworI2RlZmluZSBfX1AwMDAJUEFHRV9OT05FCisjZGVmaW5lIF9fUDAwMQlQQUdFX1JFQURPTkxZCisjZGVmaW5lIF9fUDAxMAlQQUdFX0NPUFkKKyNkZWZpbmUgX19QMDExCVBBR0VfQ09QWQorI2RlZmluZSBfX1AxMDAJUEFHRV9SRUFET05MWQorI2RlZmluZSBfX1AxMDEJUEFHRV9SRUFET05MWQorI2RlZmluZSBfX1AxMTAJUEFHRV9DT1BZCisjZGVmaW5lIF9fUDExMQlQQUdFX0NPUFkKKworI2RlZmluZSBfX1MwMDAJUEFHRV9OT05FCisjZGVmaW5lIF9fUzAwMQlQQUdFX1JFQURPTkxZCisjZGVmaW5lIF9fUzAxMAlQQUdFX1NIQVJFRAorI2RlZmluZSBfX1MwMTEJUEFHRV9TSEFSRUQKKyNkZWZpbmUgX19TMTAwCVBBR0VfUkVBRE9OTFkKKyNkZWZpbmUgX19TMTAxCVBBR0VfUkVBRE9OTFkKKyNkZWZpbmUgX19TMTEwCVBBR0VfU0hBUkVECisjZGVmaW5lIF9fUzExMQlQQUdFX1NIQVJFRAorCisjZGVmaW5lIFBURV9GSUxFX01BWF9CSVRTCTI2CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy9hcmNoLXYxMC9vZmZzZXQuaCBiL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MTAvb2Zmc2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNiZDc3ZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MTAvb2Zmc2V0LmgKQEAgLTAsMCArMSwzMyBAQAorI2lmbmRlZiBfX0FTTV9PRkZTRVRTX0hfXworI2RlZmluZSBfX0FTTV9PRkZTRVRTX0hfXworLyoKKyAqIERPIE5PVCBNT0RJRlkuCisgKgorICogVGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgYnkgYXJjaC9jcmlzL01ha2VmaWxlCisgKgorICovCisKKyNkZWZpbmUgUFRfb3JpZ19yMTAgNCAvKiBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgb3JpZ19yMTApICovCisjZGVmaW5lIFBUX3IxMyA4IC8qIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCByMTMpICovCisjZGVmaW5lIFBUX3IxMiAxMiAvKiBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgcjEyKSAqLworI2RlZmluZSBQVF9yMTEgMTYgLyogb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHIxMSkgKi8KKyNkZWZpbmUgUFRfcjEwIDIwIC8qIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCByMTApICovCisjZGVmaW5lIFBUX3I5IDI0IC8qIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCByOSkgKi8KKyNkZWZpbmUgUFRfbW9mIDY0IC8qIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBtb2YpICovCisjZGVmaW5lIFBUX2RjY3IgNjggLyogb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGRjY3IpICovCisjZGVmaW5lIFBUX3NycCA3MiAvKiBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgc3JwKSAqLworCisjZGVmaW5lIFRJX3Rhc2sgMCAvKiBvZmZzZXRvZihzdHJ1Y3QgdGhyZWFkX2luZm8sIHRhc2spICovCisjZGVmaW5lIFRJX2ZsYWdzIDggLyogb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9pbmZvLCBmbGFncykgKi8KKyNkZWZpbmUgVElfcHJlZW1wdF9jb3VudCAxNiAvKiBvZmZzZXRvZihzdHJ1Y3QgdGhyZWFkX2luZm8sIHByZWVtcHRfY291bnQpICovCisKKyNkZWZpbmUgVEhSRUFEX2tzcCAwIC8qIG9mZnNldG9mKHN0cnVjdCB0aHJlYWRfc3RydWN0LCBrc3ApICovCisjZGVmaW5lIFRIUkVBRF91c3AgNCAvKiBvZmZzZXRvZihzdHJ1Y3QgdGhyZWFkX3N0cnVjdCwgdXNwKSAqLworI2RlZmluZSBUSFJFQURfZGNjciA4IC8qIG9mZnNldG9mKHN0cnVjdCB0aHJlYWRfc3RydWN0LCBkY2NyKSAqLworCisjZGVmaW5lIFRBU0tfcGlkIDEzMyAvKiBvZmZzZXRvZihzdHJ1Y3QgdGFza19zdHJ1Y3QsIHBpZCkgKi8KKworI2RlZmluZSBMQ0xPTkVfVk0gMjU2IC8qIENMT05FX1ZNICovCisjZGVmaW5lIExDTE9ORV9VTlRSQUNFRCA4Mzg4NjA4IC8qIENMT05FX1VOVFJBQ0VEICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy9hcmNoLXYxMC9wYWdlLmggYi9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjEwL3BhZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDdlNmU2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9hcmNoLXYxMC9wYWdlLmgKQEAgLTAsMCArMSwzMSBAQAorI2lmbmRlZiBfQ1JJU19BUkNIX1BBR0VfSAorI2RlZmluZSBfQ1JJU19BUkNIX1BBR0VfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKy8qIFRoaXMgaGFuZGxlcyB0aGUgbWVtb3J5IG1hcC4uICovCisjaWZkZWYgQ09ORklHX0NSSVNfTE9XX01BUAorI2RlZmluZSBQQUdFX09GRlNFVAkJS1NFR182ICAgLyoga3NlZ182IGlzIG1hcHBlZCB0byBwaHlzaWNhbCByYW0gKi8KKyNlbHNlCisjZGVmaW5lIFBBR0VfT0ZGU0VUCQlLU0VHX0MgICAvKiBrc2VnX2MgaXMgbWFwcGVkIHRvIHBoeXNpY2FsIHJhbSAqLworI2VuZGlmCisKKy8qIG1hY3JvcyB0byBjb252ZXJ0IGJldHdlZW4gcmVhbGx5IHBoeXNpY2FsIGFuZCB2aXJ0dWFsIGFkZHJlc3NlcworICogYnkgc3RyaXBwaW5nIGEgc2VsZWN0ZWQgYml0LCB3ZSBjYW4gY29udmVydCBiZXR3ZWVuIEtTRUdfeCBhbmQgMHg0MDAwMDAwMCB3aGVyZQorICogdGhlIERSQU0gcmVhbGx5IHJlc2lkZXMKKyAqLworCisjaWZkZWYgQ09ORklHX0NSSVNfTE9XX01BUAorLyogd2UgaGF2ZSBEUkFNIHZpcnR1YWxseSBhdCAweDYgKi8KKyNkZWZpbmUgX19wYSh4KSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBsb25nKSh4KSAmIDB4ZGZmZmZmZmYpCisjZGVmaW5lIF9fdmEoeCkgICAgICAgICAgICAgICAgICgodm9pZCAqKSgodW5zaWduZWQgbG9uZykoeCkgfCAweDIwMDAwMDAwKSkKKyNlbHNlCisvKiB3ZSBoYXZlIERSQU0gdmlydHVhbGx5IGF0IDB4YyAqLworI2RlZmluZSBfX3BhKHgpICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGxvbmcpKHgpICYgMHg3ZmZmZmZmZikKKyNkZWZpbmUgX192YSh4KSAgICAgICAgICAgICAgICAgKCh2b2lkICopKCh1bnNpZ25lZCBsb25nKSh4KSB8IDB4ODAwMDAwMDApKQorI2VuZGlmCisKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjEwL3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MTAvcGd0YWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhMjU3NmQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjEwL3BndGFibGUuaApAQCAtMCwwICsxLDE3IEBACisjaWZuZGVmIF9DUklTX0FSQ0hfUEdUQUJMRV9ICisjZGVmaW5lIF9DUklTX0FSQ0hfUEdUQUJMRV9ICisKKy8qCisgKiBLZXJuZWxzIG93biB2aXJ0dWFsIG1lbW9yeSBhcmVhLiAKKyAqLworCisjaWZkZWYgQ09ORklHX0NSSVNfTE9XX01BUAorI2RlZmluZSBWTUFMTE9DX1NUQVJUICAgICBLU0VHXzcKKyNkZWZpbmUgVk1BTExPQ19FTkQgICAgICAgS1NFR184CisjZWxzZQorI2RlZmluZSBWTUFMTE9DX1NUQVJUICAgICBLU0VHX0QKKyNkZWZpbmUgVk1BTExPQ19FTkQgICAgICAgS1NFR19FCisjZW5kaWYKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MTAvcHJvY2Vzc29yLmggYi9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjEwL3Byb2Nlc3Nvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzNTVkODYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjEwL3Byb2Nlc3Nvci5oCkBAIC0wLDAgKzEsNjIgQEAKKyNpZm5kZWYgX19BU01fQ1JJU19BUkNIX1BST0NFU1NPUl9ICisjZGVmaW5lIF9fQVNNX0NSSVNfQVJDSF9QUk9DRVNTT1JfSAorCisvKgorICogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBtYWNybyB0aGF0IHJldHVybnMgY3VycmVudAorICogaW5zdHJ1Y3Rpb24gcG9pbnRlciAoInByb2dyYW0gY291bnRlciIpLgorICovCisjZGVmaW5lIGN1cnJlbnRfdGV4dF9hZGRyKCkgKHt2b2lkICpwYzsgX19hc21fXyAoIm1vdmUuZCAkcGMsJTAiIDogIj1ybSIgKHBjKSk7IHBjOyB9KQorCisvKiBDUklTIGhhcyBubyBwcm9ibGVtcyB3aXRoIHdyaXRlIHByb3RlY3Rpb24gKi8KKyNkZWZpbmUgd3Bfd29ya3Nfb2sgMQorCisvKiBDUklTIHRocmVhZF9zdHJ1Y3QuIHRoaXMgcmVhbGx5IGhhcyBub3RoaW5nIHRvIGRvIHdpdGggdGhlIHByb2Nlc3NvciBpdHNlbGYsIHNpbmNlCisgKiBDUklTIGRvZXMgbm90IGRvIGFueSBoYXJkd2FyZSB0YXNrLXN3aXRjaGluZywgYnV0IGl0J3MgaGVyZSBmb3IgbGVnYWN5IHJlYXNvbnMuCisgKiBUaGUgdGhyZWFkX3N0cnVjdCBoZXJlIGlzIHVzZWQgd2hlbiB0YXNrLXN3aXRjaGluZyB1c2luZyBfcmVzdW1lIGRlZmluZWQgaW4gZW50cnkuUy4KKyAqIFRoZSBvZmZzZXRzIGhlcmUgYXJlIGhhcmRjb2RlZCBpbnRvIF9yZXN1bWUgLSBpZiB5b3UgY2hhbmdlIHRoaXMgc3RydWN0LCB5b3UgbmVlZCB0bworICogY2hhbmdlIHRoZW0gYXMgd2VsbCEhIQorKi8KKworc3RydWN0IHRocmVhZF9zdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcga3NwOyAgICAgLyoga2VybmVsIHN0YWNrIHBvaW50ZXIgKi8KKwl1bnNpZ25lZCBsb25nIHVzcDsgICAgIC8qIHVzZXIgc3RhY2sgcG9pbnRlciAqLworCXVuc2lnbmVkIGxvbmcgZGNjcjsgICAgLyogc2F2ZWQgZmxhZyByZWdpc3RlciAqLworfTsKKworLyoKKyAqIFVzZXIgc3BhY2UgcHJvY2VzcyBzaXplLiBUaGlzIGlzIGhhcmRjb2RlZCBpbnRvIGEgZmV3IHBsYWNlcywKKyAqIHNvIGRvbid0IGNoYW5nZSBpdCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLgorICovCisKKyNpZmRlZiBDT05GSUdfQ1JJU19MT1dfTUFQCisjZGVmaW5lIFRBU0tfU0laRSAgICAgICAoMHg1MDAwMDAwMFVMKSAgIC8qIDEuMjUgR0IgKi8KKyNlbHNlCisjZGVmaW5lIFRBU0tfU0laRSAgICAgICAoMHhBMDAwMDAwMFVMKSAgIC8qIDIuNTYgR0IgKi8KKyNlbmRpZgorCisjZGVmaW5lIElOSVRfVEhSRUFEICB7IFwKKyAgIDAsIDAsIDB4MjAgfSAgLyogY2NyID0gaW50IGVuYWJsZSwgbm90aGluZyBlbHNlICovCisKKyNkZWZpbmUgS1NUS19FSVAodHNrKQlcCisoewkJCVwKKwl1bnNpZ25lZCBsb25nIGVpcCA9IDA7ICAgXAorCXVuc2lnbmVkIGxvbmcgcmVncyA9ICh1bnNpZ25lZCBsb25nKXVzZXJfcmVncyh0c2spOyBcCisJaWYgKHJlZ3MgPiBQQUdFX1NJWkUgJiYgXAorCQl2aXJ0X2FkZHJfdmFsaWQocmVncykpIFwKKwllaXAgPSAoKHN0cnVjdCBwdF9yZWdzICopcmVncyktPmlycDsgXAorCWVpcDsgXAorfSkKKworLyogZ2l2ZSB0aGUgdGhyZWFkIGEgcHJvZ3JhbSBsb2NhdGlvbgorICogc2V0IHVzZXItbW9kZSAoVGhlICdVJyBmbGFnIChVc2VyIG1vZGUgZmxhZykgaXMgQ0NSL0RDQ1IgYml0IDgpIAorICogc3dpdGNoIHVzZXItc3RhY2twb2ludGVyCisgKi8KKworI2RlZmluZSBzdGFydF90aHJlYWQocmVncywgaXAsIHVzcCkgZG8geyBcCisJc2V0X2ZzKFVTRVJfRFMpOyAgICAgIFwKKwlyZWdzLT5pcnAgPSBpcDsgICAgICAgXAorCXJlZ3MtPmRjY3IgfD0gMSA8PCBVX0RDQ1JfQklUTlI7IFwKKwl3cnVzcCh1c3ApOyAgICAgICAgICAgXAorfSB3aGlsZSgwKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MTAvcHRyYWNlLmggYi9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjEwL3B0cmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiMTRjNWUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjEwL3B0cmFjZS5oCkBAIC0wLDAgKzEsMTE1IEBACisjaWZuZGVmIF9DUklTX0FSQ0hfUFRSQUNFX0gKKyNkZWZpbmUgX0NSSVNfQVJDSF9QVFJBQ0VfSAorCisvKiBGcmFtZSB0eXBlcyAqLworCisjZGVmaW5lIENSSVNfRlJBTUVfTk9STUFMICAgMCAvKiBub3JtYWwgZnJhbWUgd2l0aG91dCBTQkZTIHN0YWNraW5nICovCisjZGVmaW5lIENSSVNfRlJBTUVfQlVTRkFVTFQgMSAvKiBmcmFtZSBzdGFja2VkIHVzaW5nIFNCRlMsIG5lZWQgUkJGIHJldHVybgorCQkJCSBwYXRoICovCisKKy8qIFJlZ2lzdGVyIG51bWJlcnMgaW4gdGhlIHB0cmFjZSBzeXN0ZW0gY2FsbCBpbnRlcmZhY2UgKi8KKworI2RlZmluZSBQVF9GUkFNRVRZUEUgMAorI2RlZmluZSBQVF9PUklHX1IxMCAgMQorI2RlZmluZSBQVF9SMTMgICAgICAgMgorI2RlZmluZSBQVF9SMTIgICAgICAgMworI2RlZmluZSBQVF9SMTEgICAgICAgNAorI2RlZmluZSBQVF9SMTAgICAgICAgNQorI2RlZmluZSBQVF9SOSAgICAgICAgNgorI2RlZmluZSBQVF9SOCAgICAgICAgNworI2RlZmluZSBQVF9SNyAgICAgICAgOAorI2RlZmluZSBQVF9SNiAgICAgICAgOQorI2RlZmluZSBQVF9SNSAgICAgICAgMTAKKyNkZWZpbmUgUFRfUjQgICAgICAgIDExCisjZGVmaW5lIFBUX1IzICAgICAgICAxMgorI2RlZmluZSBQVF9SMiAgICAgICAgMTMKKyNkZWZpbmUgUFRfUjEgICAgICAgIDE0CisjZGVmaW5lIFBUX1IwICAgICAgICAxNQorI2RlZmluZSBQVF9NT0YgICAgICAgMTYKKyNkZWZpbmUgUFRfRENDUiAgICAgIDE3CisjZGVmaW5lIFBUX1NSUCAgICAgICAxOAorI2RlZmluZSBQVF9JUlAgICAgICAgMTkgICAgLyogVGhpcyBpcyBhY3R1YWxseSB0aGUgZGVidWdnZWQgcHJvY2VzcycgUEMgKi8KKyNkZWZpbmUgUFRfQ1NSSU5TVFIgIDIwICAgIC8qIENQVSBTdGF0dXMgcmVjb3JkIHJlbW5hbnRzIC0KKwkJCSAgICAgIHZhbGlkIGlmIGZyYW1ldHlwZSA9PSBidXNmYXVsdCAqLworI2RlZmluZSBQVF9DU1JBRERSICAgMjEKKyNkZWZpbmUgUFRfQ1NSREFUQSAgIDIyCisjZGVmaW5lIFBUX1VTUCAgICAgICAyMyAgICAvKiBzcGVjaWFsIGNhc2UgLSBVU1AgaXMgbm90IGluIHRoZSBwdF9yZWdzICovCisjZGVmaW5lIFBUX01BWCAgICAgICAyMworCisvKiBDb25kaXRpb24gY29kZSBiaXQgbnVtYmVycy4gIFRoZSBzYW1lIG51bWJlcnMgYXBwbHkgdG8gQ0NSIG9mIGNvdXJzZSwKKyAgIGJ1dCB3ZSB1c2UgRENDUiBldmVyeXdoZXJlIGVsc2UsIHNvIGxldCdzIHRyeSBhbmQgYmUgY29uc2lzdGVudC4gICovCisjZGVmaW5lIENfRENDUl9CSVROUiAwCisjZGVmaW5lIFZfRENDUl9CSVROUiAxCisjZGVmaW5lIFpfRENDUl9CSVROUiAyCisjZGVmaW5lIE5fRENDUl9CSVROUiAzCisjZGVmaW5lIFhfRENDUl9CSVROUiA0CisjZGVmaW5lIElfRENDUl9CSVROUiA1CisjZGVmaW5lIEJfRENDUl9CSVROUiA2CisjZGVmaW5lIE1fRENDUl9CSVROUiA3CisjZGVmaW5lIFVfRENDUl9CSVROUiA4CisjZGVmaW5lIFBfRENDUl9CSVROUiA5CisjZGVmaW5lIEZfRENDUl9CSVROUiAxMAorCisvKiBwdF9yZWdzIG5vdCBvbmx5IHNwZWNpZmljZXMgdGhlIGZvcm1hdCBpbiB0aGUgdXNlci1zdHJ1Y3QgZHVyaW5nCisgKiBwdHJhY2UgYnV0IGlzIGFsc28gdGhlIGZyYW1lIGZvcm1hdCB1c2VkIGluIHRoZSBrZXJuZWwgcHJvbG9ndWUvZXBpbG9ndWVzIAorICogdGhlbXNlbHZlcworICovCisKK3N0cnVjdCBwdF9yZWdzIHsKKwl1bnNpZ25lZCBsb25nIGZyYW1ldHlwZTsgIC8qIHR5cGUgb2Ygc3RhY2tmcmFtZSAqLworCXVuc2lnbmVkIGxvbmcgb3JpZ19yMTA7CisJLyogcHVzaGVkIGJ5IG1vdmVtIHIxMywgW3NwXSBpbiBTQVZFX0FMTCwgbW92ZW0gcHVzaGVzIGJhY2t3YXJkcyAqLworCXVuc2lnbmVkIGxvbmcgcjEzOworCXVuc2lnbmVkIGxvbmcgcjEyOworCXVuc2lnbmVkIGxvbmcgcjExOworCXVuc2lnbmVkIGxvbmcgcjEwOworCXVuc2lnbmVkIGxvbmcgcjk7CisJdW5zaWduZWQgbG9uZyByODsKKwl1bnNpZ25lZCBsb25nIHI3OworCXVuc2lnbmVkIGxvbmcgcjY7CisJdW5zaWduZWQgbG9uZyByNTsKKwl1bnNpZ25lZCBsb25nIHI0OworCXVuc2lnbmVkIGxvbmcgcjM7CisJdW5zaWduZWQgbG9uZyByMjsKKwl1bnNpZ25lZCBsb25nIHIxOworCXVuc2lnbmVkIGxvbmcgcjA7CisJdW5zaWduZWQgbG9uZyBtb2Y7CisJdW5zaWduZWQgbG9uZyBkY2NyOworCXVuc2lnbmVkIGxvbmcgc3JwOworCXVuc2lnbmVkIGxvbmcgaXJwOyAvKiBUaGlzIGlzIGFjdHVhbGx5IHRoZSBkZWJ1Z2dlZCBwcm9jZXNzJyBQQyAqLworCXVuc2lnbmVkIGxvbmcgY3NyaW5zdHI7CisJdW5zaWduZWQgbG9uZyBjc3JhZGRyOworCXVuc2lnbmVkIGxvbmcgY3NyZGF0YTsKK307CisKKy8qIHN3aXRjaF9zdGFjayBpcyB0aGUgZXh0cmEgc3R1ZmYgcHVzaGVkIG9udG8gdGhlIHN0YWNrIGluIF9yZXN1bWUgKGVudHJ5LlMpCisgKiB3aGVuIGRvaW5nIGEgY29udGV4dC1zd2l0Y2guIGl0IGlzIHVzZWQgKGFwYXJ0IGZyb20gaW4gcmVzdW1lKSB3aGVuIGEgbmV3CisgKiB0aHJlYWQgaXMgbWFkZSBhbmQgd2UgbmVlZCB0byBtYWtlIF9yZXN1bWUgKHdoaWNoIGlzIHN0YXJ0aW5nIGl0IGZvciB0aGUKKyAqIGZpcnN0IHRpbWUpIHJlYWxpc2Ugd2hhdCBpcyBnb2luZyBvbi4KKyAqCisgKiBBY3R1YWxseSwgdGhlIHVzZSBpcyB2ZXJ5IGNsb3NlIHRvIHRoZSB0aHJlYWQgc3RydWN0IChUU1MpIGluIHRoYXQgYm90aCB0aGUKKyAqIHN3aXRjaF9zdGFjayBhbmQgdGhlIFRTUyBhcmUgdXNlZCB0byBrZWVwIHRocmVhZCBzdHVmZiB3aGVuIHN3aXRjaGluZyBpbgorICogX3Jlc3VtZS4KKyAqLworCitzdHJ1Y3Qgc3dpdGNoX3N0YWNrIHsKKwl1bnNpZ25lZCBsb25nIHI5OworCXVuc2lnbmVkIGxvbmcgcjg7CisJdW5zaWduZWQgbG9uZyByNzsKKwl1bnNpZ25lZCBsb25nIHI2OworCXVuc2lnbmVkIGxvbmcgcjU7CisJdW5zaWduZWQgbG9uZyByNDsKKwl1bnNpZ25lZCBsb25nIHIzOworCXVuc2lnbmVkIGxvbmcgcjI7CisJdW5zaWduZWQgbG9uZyByMTsKKwl1bnNpZ25lZCBsb25nIHIwOworCXVuc2lnbmVkIGxvbmcgcmV0dXJuX2lwOyAvKiBpcCB0aGF0IF9yZXN1bWUgd2lsbCByZXR1cm4gdG8gKi8KK307CisKKy8qIGJpdCA4IGlzIHVzZXItbW9kZSBmbGFnICovCisjZGVmaW5lIHVzZXJfbW9kZShyZWdzKSAoKChyZWdzKS0+ZGNjciAmIDB4MTAwKSAhPSAwKQorI2RlZmluZSBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpICgocmVncyktPmlycCkKKyNkZWZpbmUgcHJvZmlsZV9wYyhyZWdzKSBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpCitleHRlcm4gdm9pZCBzaG93X3JlZ3Moc3RydWN0IHB0X3JlZ3MgKik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy9hcmNoLXYxMC9zdl9hZGRyLmFnaCBiL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MTAvc3ZfYWRkci5hZ2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFjM2E3YgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MTAvc3ZfYWRkci5hZ2gKQEAgLTAsMCArMSw3MzA2IEBACisvKgorISogVGhpcyBmaWxlIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSAvbi9hc2ljL2Jpbi9yZWdfbWFjcm9fZ2VuCishKiBmcm9tIHRoZSBmaWxlIGAvbi9hc2ljL3Byb2plY3RzL2V0cmF4X25nL2RvYy93b3JrL2V0cmF4X25nX3JlZ3MucmQnLgorISogRWRpdGluZyB3aXRoaW4gdGhpcyBmaWxlIGlzIHRodXMgbm90IHJlY29tbWVuZGVkLAorISogbWFrZSB0aGUgY2hhbmdlcyBpbiBgL24vYXNpYy9wcm9qZWN0cy9ldHJheF9uZy9kb2Mvd29yay9ldHJheF9uZ19yZWdzLnJkJyBpbnN0ZWFkLgorISovCisKKworLyoKKyEqIEJ1cyBpbnRlcmZhY2UgY29uZmlndXJhdGlvbiByZWdpc3RlcnMKKyEqLworCisjZGVmaW5lIFJfV0FJVFNUQVRFUyAoSU9fVFlQRUNBU1RfVURXT1JEIDB4YjAwMDAwMDApCisjZGVmaW5lIFJfV0FJVFNUQVRFU19fcGNzNF83X3p3X19CSVROUiAzMAorI2RlZmluZSBSX1dBSVRTVEFURVNfX3BjczRfN196d19fV0lEVEggMgorI2RlZmluZSBSX1dBSVRTVEFURVNfX3BjczRfN19ld19fQklUTlIgMjgKKyNkZWZpbmUgUl9XQUlUU1RBVEVTX19wY3M0XzdfZXdfX1dJRFRIIDIKKyNkZWZpbmUgUl9XQUlUU1RBVEVTX19wY3M0XzdfbHdfX0JJVE5SIDI0CisjZGVmaW5lIFJfV0FJVFNUQVRFU19fcGNzNF83X2x3X19XSURUSCA0CisjZGVmaW5lIFJfV0FJVFNUQVRFU19fcGNzMF8zX3p3X19CSVROUiAyMgorI2RlZmluZSBSX1dBSVRTVEFURVNfX3BjczBfM196d19fV0lEVEggMgorI2RlZmluZSBSX1dBSVRTVEFURVNfX3BjczBfM19ld19fQklUTlIgMjAKKyNkZWZpbmUgUl9XQUlUU1RBVEVTX19wY3MwXzNfZXdfX1dJRFRIIDIKKyNkZWZpbmUgUl9XQUlUU1RBVEVTX19wY3MwXzNfbHdfX0JJVE5SIDE2CisjZGVmaW5lIFJfV0FJVFNUQVRFU19fcGNzMF8zX2x3X19XSURUSCA0CisjZGVmaW5lIFJfV0FJVFNUQVRFU19fc3JhbV96d19fQklUTlIgMTQKKyNkZWZpbmUgUl9XQUlUU1RBVEVTX19zcmFtX3p3X19XSURUSCAyCisjZGVmaW5lIFJfV0FJVFNUQVRFU19fc3JhbV9ld19fQklUTlIgMTIKKyNkZWZpbmUgUl9XQUlUU1RBVEVTX19zcmFtX2V3X19XSURUSCAyCisjZGVmaW5lIFJfV0FJVFNUQVRFU19fc3JhbV9sd19fQklUTlIgOAorI2RlZmluZSBSX1dBSVRTVEFURVNfX3NyYW1fbHdfX1dJRFRIIDQKKyNkZWZpbmUgUl9XQUlUU1RBVEVTX19mbGFzaF96d19fQklUTlIgNgorI2RlZmluZSBSX1dBSVRTVEFURVNfX2ZsYXNoX3p3X19XSURUSCAyCisjZGVmaW5lIFJfV0FJVFNUQVRFU19fZmxhc2hfZXdfX0JJVE5SIDQKKyNkZWZpbmUgUl9XQUlUU1RBVEVTX19mbGFzaF9ld19fV0lEVEggMgorI2RlZmluZSBSX1dBSVRTVEFURVNfX2ZsYXNoX2x3X19CSVROUiAwCisjZGVmaW5lIFJfV0FJVFNUQVRFU19fZmxhc2hfbHdfX1dJRFRIIDQKKworI2RlZmluZSBSX0JVU19DT05GSUcgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMDA0KQorI2RlZmluZSBSX0JVU19DT05GSUdfX3NyYW1fdHlwZV9fQklUTlIgOQorI2RlZmluZSBSX0JVU19DT05GSUdfX3NyYW1fdHlwZV9fV0lEVEggMQorI2RlZmluZSBSX0JVU19DT05GSUdfX3NyYW1fdHlwZV9fY3dlIDEKKyNkZWZpbmUgUl9CVVNfQ09ORklHX19zcmFtX3R5cGVfX2J3ZSAwCisjZGVmaW5lIFJfQlVTX0NPTkZJR19fZG1hX2J1cnN0X19CSVROUiA4CisjZGVmaW5lIFJfQlVTX0NPTkZJR19fZG1hX2J1cnN0X19XSURUSCAxCisjZGVmaW5lIFJfQlVTX0NPTkZJR19fZG1hX2J1cnN0X19idXJzdDE2IDEKKyNkZWZpbmUgUl9CVVNfQ09ORklHX19kbWFfYnVyc3RfX2J1cnN0MzIgMAorI2RlZmluZSBSX0JVU19DT05GSUdfX3BjczRfN193cl9fQklUTlIgNworI2RlZmluZSBSX0JVU19DT05GSUdfX3BjczRfN193cl9fV0lEVEggMQorI2RlZmluZSBSX0JVU19DT05GSUdfX3BjczRfN193cl9fZXh0IDEKKyNkZWZpbmUgUl9CVVNfQ09ORklHX19wY3M0Xzdfd3JfX25vcm0gMAorI2RlZmluZSBSX0JVU19DT05GSUdfX3BjczBfM193cl9fQklUTlIgNgorI2RlZmluZSBSX0JVU19DT05GSUdfX3BjczBfM193cl9fV0lEVEggMQorI2RlZmluZSBSX0JVU19DT05GSUdfX3BjczBfM193cl9fZXh0IDEKKyNkZWZpbmUgUl9CVVNfQ09ORklHX19wY3MwXzNfd3JfX25vcm0gMAorI2RlZmluZSBSX0JVU19DT05GSUdfX3NyYW1fd3JfX0JJVE5SIDUKKyNkZWZpbmUgUl9CVVNfQ09ORklHX19zcmFtX3dyX19XSURUSCAxCisjZGVmaW5lIFJfQlVTX0NPTkZJR19fc3JhbV93cl9fZXh0IDEKKyNkZWZpbmUgUl9CVVNfQ09ORklHX19zcmFtX3dyX19ub3JtIDAKKyNkZWZpbmUgUl9CVVNfQ09ORklHX19mbGFzaF93cl9fQklUTlIgNAorI2RlZmluZSBSX0JVU19DT05GSUdfX2ZsYXNoX3dyX19XSURUSCAxCisjZGVmaW5lIFJfQlVTX0NPTkZJR19fZmxhc2hfd3JfX2V4dCAxCisjZGVmaW5lIFJfQlVTX0NPTkZJR19fZmxhc2hfd3JfX25vcm0gMAorI2RlZmluZSBSX0JVU19DT05GSUdfX3BjczRfN19id19fQklUTlIgMworI2RlZmluZSBSX0JVU19DT05GSUdfX3BjczRfN19id19fV0lEVEggMQorI2RlZmluZSBSX0JVU19DT05GSUdfX3BjczRfN19id19fYnczMiAxCisjZGVmaW5lIFJfQlVTX0NPTkZJR19fcGNzNF83X2J3X19idzE2IDAKKyNkZWZpbmUgUl9CVVNfQ09ORklHX19wY3MwXzNfYndfX0JJVE5SIDIKKyNkZWZpbmUgUl9CVVNfQ09ORklHX19wY3MwXzNfYndfX1dJRFRIIDEKKyNkZWZpbmUgUl9CVVNfQ09ORklHX19wY3MwXzNfYndfX2J3MzIgMQorI2RlZmluZSBSX0JVU19DT05GSUdfX3BjczBfM19id19fYncxNiAwCisjZGVmaW5lIFJfQlVTX0NPTkZJR19fc3JhbV9id19fQklUTlIgMQorI2RlZmluZSBSX0JVU19DT05GSUdfX3NyYW1fYndfX1dJRFRIIDEKKyNkZWZpbmUgUl9CVVNfQ09ORklHX19zcmFtX2J3X19idzMyIDEKKyNkZWZpbmUgUl9CVVNfQ09ORklHX19zcmFtX2J3X19idzE2IDAKKyNkZWZpbmUgUl9CVVNfQ09ORklHX19mbGFzaF9id19fQklUTlIgMAorI2RlZmluZSBSX0JVU19DT05GSUdfX2ZsYXNoX2J3X19XSURUSCAxCisjZGVmaW5lIFJfQlVTX0NPTkZJR19fZmxhc2hfYndfX2J3MzIgMQorI2RlZmluZSBSX0JVU19DT05GSUdfX2ZsYXNoX2J3X19idzE2IDAKKworI2RlZmluZSBSX0JVU19TVEFUVVMgKElPX1RZUEVDQVNUX1JPX1VEV09SRCAweGIwMDAwMDA0KQorI2RlZmluZSBSX0JVU19TVEFUVVNfX3BsbF9sb2NrX3RtX19CSVROUiA1CisjZGVmaW5lIFJfQlVTX1NUQVRVU19fcGxsX2xvY2tfdG1fX1dJRFRIIDEKKyNkZWZpbmUgUl9CVVNfU1RBVFVTX19wbGxfbG9ja190bV9fZXhwaXJlZCAwCisjZGVmaW5lIFJfQlVTX1NUQVRVU19fcGxsX2xvY2tfdG1fX2NvdW50aW5nIDEKKyNkZWZpbmUgUl9CVVNfU1RBVFVTX19ib3RoX2ZhdWx0c19fQklUTlIgNAorI2RlZmluZSBSX0JVU19TVEFUVVNfX2JvdGhfZmF1bHRzX19XSURUSCAxCisjZGVmaW5lIFJfQlVTX1NUQVRVU19fYm90aF9mYXVsdHNfX25vIDAKKyNkZWZpbmUgUl9CVVNfU1RBVFVTX19ib3RoX2ZhdWx0c19feWVzIDEKKyNkZWZpbmUgUl9CVVNfU1RBVFVTX19ic2VuX19fQklUTlIgMworI2RlZmluZSBSX0JVU19TVEFUVVNfX2JzZW5fX19XSURUSCAxCisjZGVmaW5lIFJfQlVTX1NUQVRVU19fYnNlbl9fX2VuYWJsZSAwCisjZGVmaW5lIFJfQlVTX1NUQVRVU19fYnNlbl9fX2Rpc2FibGUgMQorI2RlZmluZSBSX0JVU19TVEFUVVNfX2Jvb3RfX0JJVE5SIDEKKyNkZWZpbmUgUl9CVVNfU1RBVFVTX19ib290X19XSURUSCAyCisjZGVmaW5lIFJfQlVTX1NUQVRVU19fYm9vdF9fdW5jYWNoZWQgMAorI2RlZmluZSBSX0JVU19TVEFUVVNfX2Jvb3RfX3NlcmlhbCAxCisjZGVmaW5lIFJfQlVTX1NUQVRVU19fYm9vdF9fbmV0d29yayAyCisjZGVmaW5lIFJfQlVTX1NUQVRVU19fYm9vdF9fcGFyYWxsZWwgMworI2RlZmluZSBSX0JVU19TVEFUVVNfX2ZsYXNod19fQklUTlIgMAorI2RlZmluZSBSX0JVU19TVEFUVVNfX2ZsYXNod19fV0lEVEggMQorI2RlZmluZSBSX0JVU19TVEFUVVNfX2ZsYXNod19fYnczMiAxCisjZGVmaW5lIFJfQlVTX1NUQVRVU19fZmxhc2h3X19idzE2IDAKKworI2RlZmluZSBSX0RSQU1fVElNSU5HIChJT19UWVBFQ0FTVF9VRFdPUkQgMHhiMDAwMDAwOCkKKyNkZWZpbmUgUl9EUkFNX1RJTUlOR19fc2RyYW1fX0JJVE5SIDMxCisjZGVmaW5lIFJfRFJBTV9USU1JTkdfX3NkcmFtX19XSURUSCAxCisjZGVmaW5lIFJfRFJBTV9USU1JTkdfX3NkcmFtX19lbmFibGUgMQorI2RlZmluZSBSX0RSQU1fVElNSU5HX19zZHJhbV9fZGlzYWJsZSAwCisjZGVmaW5lIFJfRFJBTV9USU1JTkdfX3JlZl9fQklUTlIgMTQKKyNkZWZpbmUgUl9EUkFNX1RJTUlOR19fcmVmX19XSURUSCAyCisjZGVmaW5lIFJfRFJBTV9USU1JTkdfX3JlZl9fZTUydXMgMAorI2RlZmluZSBSX0RSQU1fVElNSU5HX19yZWZfX2UxM3VzIDEKKyNkZWZpbmUgUl9EUkFNX1RJTUlOR19fcmVmX19lODcwMG5zIDIKKyNkZWZpbmUgUl9EUkFNX1RJTUlOR19fcmVmX19kaXNhYmxlIDMKKyNkZWZpbmUgUl9EUkFNX1RJTUlOR19fcnBfX0JJVE5SIDEyCisjZGVmaW5lIFJfRFJBTV9USU1JTkdfX3JwX19XSURUSCAyCisjZGVmaW5lIFJfRFJBTV9USU1JTkdfX3JzX19CSVROUiAxMAorI2RlZmluZSBSX0RSQU1fVElNSU5HX19yc19fV0lEVEggMgorI2RlZmluZSBSX0RSQU1fVElNSU5HX19yaF9fQklUTlIgOAorI2RlZmluZSBSX0RSQU1fVElNSU5HX19yaF9fV0lEVEggMgorI2RlZmluZSBSX0RSQU1fVElNSU5HX193X19CSVROUiA3CisjZGVmaW5lIFJfRFJBTV9USU1JTkdfX3dfX1dJRFRIIDEKKyNkZWZpbmUgUl9EUkFNX1RJTUlOR19fd19fbm9ybSAwCisjZGVmaW5lIFJfRFJBTV9USU1JTkdfX3dfX2V4dCAxCisjZGVmaW5lIFJfRFJBTV9USU1JTkdfX2NfX0JJVE5SIDYKKyNkZWZpbmUgUl9EUkFNX1RJTUlOR19fY19fV0lEVEggMQorI2RlZmluZSBSX0RSQU1fVElNSU5HX19jX19ub3JtIDAKKyNkZWZpbmUgUl9EUkFNX1RJTUlOR19fY19fZXh0IDEKKyNkZWZpbmUgUl9EUkFNX1RJTUlOR19fY3pfX0JJVE5SIDQKKyNkZWZpbmUgUl9EUkFNX1RJTUlOR19fY3pfX1dJRFRIIDIKKyNkZWZpbmUgUl9EUkFNX1RJTUlOR19fY3BfX0JJVE5SIDIKKyNkZWZpbmUgUl9EUkFNX1RJTUlOR19fY3BfX1dJRFRIIDIKKyNkZWZpbmUgUl9EUkFNX1RJTUlOR19fY3dfX0JJVE5SIDAKKyNkZWZpbmUgUl9EUkFNX1RJTUlOR19fY3dfX1dJRFRIIDIKKworI2RlZmluZSBSX1NEUkFNX1RJTUlORyAoSU9fVFlQRUNBU1RfVURXT1JEIDB4YjAwMDAwMDgpCisjZGVmaW5lIFJfU0RSQU1fVElNSU5HX19zZHJhbV9fQklUTlIgMzEKKyNkZWZpbmUgUl9TRFJBTV9USU1JTkdfX3NkcmFtX19XSURUSCAxCisjZGVmaW5lIFJfU0RSQU1fVElNSU5HX19zZHJhbV9fZW5hYmxlIDEKKyNkZWZpbmUgUl9TRFJBTV9USU1JTkdfX3NkcmFtX19kaXNhYmxlIDAKKyNkZWZpbmUgUl9TRFJBTV9USU1JTkdfX21yc19kYXRhX19CSVROUiAxNgorI2RlZmluZSBSX1NEUkFNX1RJTUlOR19fbXJzX2RhdGFfX1dJRFRIIDE1CisjZGVmaW5lIFJfU0RSQU1fVElNSU5HX19yZWZfX0JJVE5SIDE0CisjZGVmaW5lIFJfU0RSQU1fVElNSU5HX19yZWZfX1dJRFRIIDIKKyNkZWZpbmUgUl9TRFJBTV9USU1JTkdfX3JlZl9fZTUydXMgMAorI2RlZmluZSBSX1NEUkFNX1RJTUlOR19fcmVmX19lMTN1cyAxCisjZGVmaW5lIFJfU0RSQU1fVElNSU5HX19yZWZfX2U2NTAwbnMgMgorI2RlZmluZSBSX1NEUkFNX1RJTUlOR19fcmVmX19kaXNhYmxlIDMKKyNkZWZpbmUgUl9TRFJBTV9USU1JTkdfX2Rkcl9fQklUTlIgMTMKKyNkZWZpbmUgUl9TRFJBTV9USU1JTkdfX2Rkcl9fV0lEVEggMQorI2RlZmluZSBSX1NEUkFNX1RJTUlOR19fZGRyX19vbiAxCisjZGVmaW5lIFJfU0RSQU1fVElNSU5HX19kZHJfX29mZiAwCisjZGVmaW5lIFJfU0RSQU1fVElNSU5HX19jbGsxMDBfX0JJVE5SIDEyCisjZGVmaW5lIFJfU0RSQU1fVElNSU5HX19jbGsxMDBfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRFJBTV9USU1JTkdfX2NsazEwMF9fb24gMQorI2RlZmluZSBSX1NEUkFNX1RJTUlOR19fY2xrMTAwX19vZmYgMAorI2RlZmluZSBSX1NEUkFNX1RJTUlOR19fcHNfX0JJVE5SIDExCisjZGVmaW5lIFJfU0RSQU1fVElNSU5HX19wc19fV0lEVEggMQorI2RlZmluZSBSX1NEUkFNX1RJTUlOR19fcHNfX29uIDEKKyNkZWZpbmUgUl9TRFJBTV9USU1JTkdfX3BzX19vZmYgMAorI2RlZmluZSBSX1NEUkFNX1RJTUlOR19fY21kX19CSVROUiA5CisjZGVmaW5lIFJfU0RSQU1fVElNSU5HX19jbWRfX1dJRFRIIDIKKyNkZWZpbmUgUl9TRFJBTV9USU1JTkdfX2NtZF9fcHJlIDMKKyNkZWZpbmUgUl9TRFJBTV9USU1JTkdfX2NtZF9fcmVmIDIKKyNkZWZpbmUgUl9TRFJBTV9USU1JTkdfX2NtZF9fbXJzIDEKKyNkZWZpbmUgUl9TRFJBTV9USU1JTkdfX2NtZF9fbm9wIDAKKyNkZWZpbmUgUl9TRFJBTV9USU1JTkdfX3BkZV9fQklUTlIgOAorI2RlZmluZSBSX1NEUkFNX1RJTUlOR19fcGRlX19XSURUSCAxCisjZGVmaW5lIFJfU0RSQU1fVElNSU5HX19yY19fQklUTlIgNgorI2RlZmluZSBSX1NEUkFNX1RJTUlOR19fcmNfX1dJRFRIIDIKKyNkZWZpbmUgUl9TRFJBTV9USU1JTkdfX3JwX19CSVROUiA0CisjZGVmaW5lIFJfU0RSQU1fVElNSU5HX19ycF9fV0lEVEggMgorI2RlZmluZSBSX1NEUkFNX1RJTUlOR19fcmNkX19CSVROUiAyCisjZGVmaW5lIFJfU0RSQU1fVElNSU5HX19yY2RfX1dJRFRIIDIKKyNkZWZpbmUgUl9TRFJBTV9USU1JTkdfX2NsX19CSVROUiAwCisjZGVmaW5lIFJfU0RSQU1fVElNSU5HX19jbF9fV0lEVEggMgorCisjZGVmaW5lIFJfRFJBTV9DT05GSUcgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMDBjKQorI2RlZmluZSBSX0RSQU1fQ09ORklHX193bW0xX19CSVROUiAzMQorI2RlZmluZSBSX0RSQU1fQ09ORklHX193bW0xX19XSURUSCAxCisjZGVmaW5lIFJfRFJBTV9DT05GSUdfX3dtbTFfX3dtbSAxCisjZGVmaW5lIFJfRFJBTV9DT05GSUdfX3dtbTFfX25vcm0gMAorI2RlZmluZSBSX0RSQU1fQ09ORklHX193bW0wX19CSVROUiAzMAorI2RlZmluZSBSX0RSQU1fQ09ORklHX193bW0wX19XSURUSCAxCisjZGVmaW5lIFJfRFJBTV9DT05GSUdfX3dtbTBfX3dtbSAxCisjZGVmaW5lIFJfRFJBTV9DT05GSUdfX3dtbTBfX25vcm0gMAorI2RlZmluZSBSX0RSQU1fQ09ORklHX19zaDFfX0JJVE5SIDI3CisjZGVmaW5lIFJfRFJBTV9DT05GSUdfX3NoMV9fV0lEVEggMworI2RlZmluZSBSX0RSQU1fQ09ORklHX19zaDBfX0JJVE5SIDI0CisjZGVmaW5lIFJfRFJBTV9DT05GSUdfX3NoMF9fV0lEVEggMworI2RlZmluZSBSX0RSQU1fQ09ORklHX193X19CSVROUiAyMworI2RlZmluZSBSX0RSQU1fQ09ORklHX193X19XSURUSCAxCisjZGVmaW5lIFJfRFJBTV9DT05GSUdfX3dfX2J3MTYgMAorI2RlZmluZSBSX0RSQU1fQ09ORklHX193X19idzMyIDEKKyNkZWZpbmUgUl9EUkFNX0NPTkZJR19fY19fQklUTlIgMjIKKyNkZWZpbmUgUl9EUkFNX0NPTkZJR19fY19fV0lEVEggMQorI2RlZmluZSBSX0RSQU1fQ09ORklHX19jX19ieXRlIDAKKyNkZWZpbmUgUl9EUkFNX0NPTkZJR19fY19fYmFuayAxCisjZGVmaW5lIFJfRFJBTV9DT05GSUdfX2VfX0JJVE5SIDIxCisjZGVmaW5lIFJfRFJBTV9DT05GSUdfX2VfX1dJRFRIIDEKKyNkZWZpbmUgUl9EUkFNX0NPTkZJR19fZV9fZmFzdCAwCisjZGVmaW5lIFJfRFJBTV9DT05GSUdfX2VfX2VkbyAxCisjZGVmaW5lIFJfRFJBTV9DT05GSUdfX2dyb3VwX3NlbF9fQklUTlIgMTYKKyNkZWZpbmUgUl9EUkFNX0NPTkZJR19fZ3JvdXBfc2VsX19XSURUSCA1CisjZGVmaW5lIFJfRFJBTV9DT05GSUdfX2dyb3VwX3NlbF9fZ3JwMCAwCisjZGVmaW5lIFJfRFJBTV9DT05GSUdfX2dyb3VwX3NlbF9fZ3JwMSAxCisjZGVmaW5lIFJfRFJBTV9DT05GSUdfX2dyb3VwX3NlbF9fYml0OSA5CisjZGVmaW5lIFJfRFJBTV9DT05GSUdfX2dyb3VwX3NlbF9fYml0MTAgMTAKKyNkZWZpbmUgUl9EUkFNX0NPTkZJR19fZ3JvdXBfc2VsX19iaXQxMSAxMQorI2RlZmluZSBSX0RSQU1fQ09ORklHX19ncm91cF9zZWxfX2JpdDEyIDEyCisjZGVmaW5lIFJfRFJBTV9DT05GSUdfX2dyb3VwX3NlbF9fYml0MTMgMTMKKyNkZWZpbmUgUl9EUkFNX0NPTkZJR19fZ3JvdXBfc2VsX19iaXQxNCAxNAorI2RlZmluZSBSX0RSQU1fQ09ORklHX19ncm91cF9zZWxfX2JpdDE1IDE1CisjZGVmaW5lIFJfRFJBTV9DT05GSUdfX2dyb3VwX3NlbF9fYml0MTYgMTYKKyNkZWZpbmUgUl9EUkFNX0NPTkZJR19fZ3JvdXBfc2VsX19iaXQxNyAxNworI2RlZmluZSBSX0RSQU1fQ09ORklHX19ncm91cF9zZWxfX2JpdDE4IDE4CisjZGVmaW5lIFJfRFJBTV9DT05GSUdfX2dyb3VwX3NlbF9fYml0MTkgMTkKKyNkZWZpbmUgUl9EUkFNX0NPTkZJR19fZ3JvdXBfc2VsX19iaXQyMCAyMAorI2RlZmluZSBSX0RSQU1fQ09ORklHX19ncm91cF9zZWxfX2JpdDIxIDIxCisjZGVmaW5lIFJfRFJBTV9DT05GSUdfX2dyb3VwX3NlbF9fYml0MjIgMjIKKyNkZWZpbmUgUl9EUkFNX0NPTkZJR19fZ3JvdXBfc2VsX19iaXQyMyAyMworI2RlZmluZSBSX0RSQU1fQ09ORklHX19ncm91cF9zZWxfX2JpdDI0IDI0CisjZGVmaW5lIFJfRFJBTV9DT05GSUdfX2dyb3VwX3NlbF9fYml0MjUgMjUKKyNkZWZpbmUgUl9EUkFNX0NPTkZJR19fZ3JvdXBfc2VsX19iaXQyNiAyNgorI2RlZmluZSBSX0RSQU1fQ09ORklHX19ncm91cF9zZWxfX2JpdDI3IDI3CisjZGVmaW5lIFJfRFJBTV9DT05GSUdfX2dyb3VwX3NlbF9fYml0MjggMjgKKyNkZWZpbmUgUl9EUkFNX0NPTkZJR19fZ3JvdXBfc2VsX19iaXQyOSAyOQorI2RlZmluZSBSX0RSQU1fQ09ORklHX19jYTFfX0JJVE5SIDEzCisjZGVmaW5lIFJfRFJBTV9DT05GSUdfX2NhMV9fV0lEVEggMworI2RlZmluZSBSX0RSQU1fQ09ORklHX19iYW5rMjNzZWxfX0JJVE5SIDgKKyNkZWZpbmUgUl9EUkFNX0NPTkZJR19fYmFuazIzc2VsX19XSURUSCA1CisjZGVmaW5lIFJfRFJBTV9DT05GSUdfX2JhbmsyM3NlbF9fYmFuazAgMAorI2RlZmluZSBSX0RSQU1fQ09ORklHX19iYW5rMjNzZWxfX2JhbmsxIDEKKyNkZWZpbmUgUl9EUkFNX0NPTkZJR19fYmFuazIzc2VsX19iaXQ5IDkKKyNkZWZpbmUgUl9EUkFNX0NPTkZJR19fYmFuazIzc2VsX19iaXQxMCAxMAorI2RlZmluZSBSX0RSQU1fQ09ORklHX19iYW5rMjNzZWxfX2JpdDExIDExCisjZGVmaW5lIFJfRFJBTV9DT05GSUdfX2JhbmsyM3NlbF9fYml0MTIgMTIKKyNkZWZpbmUgUl9EUkFNX0NPTkZJR19fYmFuazIzc2VsX19iaXQxMyAxMworI2RlZmluZSBSX0RSQU1fQ09ORklHX19iYW5rMjNzZWxfX2JpdDE0IDE0CisjZGVmaW5lIFJfRFJBTV9DT05GSUdfX2JhbmsyM3NlbF9fYml0MTUgMTUKKyNkZWZpbmUgUl9EUkFNX0NPTkZJR19fYmFuazIzc2VsX19iaXQxNiAxNgorI2RlZmluZSBSX0RSQU1fQ09ORklHX19iYW5rMjNzZWxfX2JpdDE3IDE3CisjZGVmaW5lIFJfRFJBTV9DT05GSUdfX2JhbmsyM3NlbF9fYml0MTggMTgKKyNkZWZpbmUgUl9EUkFNX0NPTkZJR19fYmFuazIzc2VsX19iaXQxOSAxOQorI2RlZmluZSBSX0RSQU1fQ09ORklHX19iYW5rMjNzZWxfX2JpdDIwIDIwCisjZGVmaW5lIFJfRFJBTV9DT05GSUdfX2JhbmsyM3NlbF9fYml0MjEgMjEKKyNkZWZpbmUgUl9EUkFNX0NPTkZJR19fYmFuazIzc2VsX19iaXQyMiAyMgorI2RlZmluZSBSX0RSQU1fQ09ORklHX19iYW5rMjNzZWxfX2JpdDIzIDIzCisjZGVmaW5lIFJfRFJBTV9DT05GSUdfX2JhbmsyM3NlbF9fYml0MjQgMjQKKyNkZWZpbmUgUl9EUkFNX0NPTkZJR19fYmFuazIzc2VsX19iaXQyNSAyNQorI2RlZmluZSBSX0RSQU1fQ09ORklHX19iYW5rMjNzZWxfX2JpdDI2IDI2CisjZGVmaW5lIFJfRFJBTV9DT05GSUdfX2JhbmsyM3NlbF9fYml0MjcgMjcKKyNkZWZpbmUgUl9EUkFNX0NPTkZJR19fYmFuazIzc2VsX19iaXQyOCAyOAorI2RlZmluZSBSX0RSQU1fQ09ORklHX19iYW5rMjNzZWxfX2JpdDI5IDI5CisjZGVmaW5lIFJfRFJBTV9DT05GSUdfX2NhMF9fQklUTlIgNQorI2RlZmluZSBSX0RSQU1fQ09ORklHX19jYTBfX1dJRFRIIDMKKyNkZWZpbmUgUl9EUkFNX0NPTkZJR19fYmFuazAxc2VsX19CSVROUiAwCisjZGVmaW5lIFJfRFJBTV9DT05GSUdfX2JhbmswMXNlbF9fV0lEVEggNQorI2RlZmluZSBSX0RSQU1fQ09ORklHX19iYW5rMDFzZWxfX2JhbmswIDAKKyNkZWZpbmUgUl9EUkFNX0NPTkZJR19fYmFuazAxc2VsX19iYW5rMSAxCisjZGVmaW5lIFJfRFJBTV9DT05GSUdfX2JhbmswMXNlbF9fYml0OSA5CisjZGVmaW5lIFJfRFJBTV9DT05GSUdfX2JhbmswMXNlbF9fYml0MTAgMTAKKyNkZWZpbmUgUl9EUkFNX0NPTkZJR19fYmFuazAxc2VsX19iaXQxMSAxMQorI2RlZmluZSBSX0RSQU1fQ09ORklHX19iYW5rMDFzZWxfX2JpdDEyIDEyCisjZGVmaW5lIFJfRFJBTV9DT05GSUdfX2JhbmswMXNlbF9fYml0MTMgMTMKKyNkZWZpbmUgUl9EUkFNX0NPTkZJR19fYmFuazAxc2VsX19iaXQxNCAxNAorI2RlZmluZSBSX0RSQU1fQ09ORklHX19iYW5rMDFzZWxfX2JpdDE1IDE1CisjZGVmaW5lIFJfRFJBTV9DT05GSUdfX2JhbmswMXNlbF9fYml0MTYgMTYKKyNkZWZpbmUgUl9EUkFNX0NPTkZJR19fYmFuazAxc2VsX19iaXQxNyAxNworI2RlZmluZSBSX0RSQU1fQ09ORklHX19iYW5rMDFzZWxfX2JpdDE4IDE4CisjZGVmaW5lIFJfRFJBTV9DT05GSUdfX2JhbmswMXNlbF9fYml0MTkgMTkKKyNkZWZpbmUgUl9EUkFNX0NPTkZJR19fYmFuazAxc2VsX19iaXQyMCAyMAorI2RlZmluZSBSX0RSQU1fQ09ORklHX19iYW5rMDFzZWxfX2JpdDIxIDIxCisjZGVmaW5lIFJfRFJBTV9DT05GSUdfX2JhbmswMXNlbF9fYml0MjIgMjIKKyNkZWZpbmUgUl9EUkFNX0NPTkZJR19fYmFuazAxc2VsX19iaXQyMyAyMworI2RlZmluZSBSX0RSQU1fQ09ORklHX19iYW5rMDFzZWxfX2JpdDI0IDI0CisjZGVmaW5lIFJfRFJBTV9DT05GSUdfX2JhbmswMXNlbF9fYml0MjUgMjUKKyNkZWZpbmUgUl9EUkFNX0NPTkZJR19fYmFuazAxc2VsX19iaXQyNiAyNgorI2RlZmluZSBSX0RSQU1fQ09ORklHX19iYW5rMDFzZWxfX2JpdDI3IDI3CisjZGVmaW5lIFJfRFJBTV9DT05GSUdfX2JhbmswMXNlbF9fYml0MjggMjgKKyNkZWZpbmUgUl9EUkFNX0NPTkZJR19fYmFuazAxc2VsX19iaXQyOSAyOQorCisjZGVmaW5lIFJfU0RSQU1fQ09ORklHIChJT19UWVBFQ0FTVF9VRFdPUkQgMHhiMDAwMDAwYykKKyNkZWZpbmUgUl9TRFJBTV9DT05GSUdfX3dtbTFfX0JJVE5SIDMxCisjZGVmaW5lIFJfU0RSQU1fQ09ORklHX193bW0xX19XSURUSCAxCisjZGVmaW5lIFJfU0RSQU1fQ09ORklHX193bW0xX193bW0gMQorI2RlZmluZSBSX1NEUkFNX0NPTkZJR19fd21tMV9fbm9ybSAwCisjZGVmaW5lIFJfU0RSQU1fQ09ORklHX193bW0wX19CSVROUiAzMAorI2RlZmluZSBSX1NEUkFNX0NPTkZJR19fd21tMF9fV0lEVEggMQorI2RlZmluZSBSX1NEUkFNX0NPTkZJR19fd21tMF9fd21tIDEKKyNkZWZpbmUgUl9TRFJBTV9DT05GSUdfX3dtbTBfX25vcm0gMAorI2RlZmluZSBSX1NEUkFNX0NPTkZJR19fc2gxX19CSVROUiAyNworI2RlZmluZSBSX1NEUkFNX0NPTkZJR19fc2gxX19XSURUSCAzCisjZGVmaW5lIFJfU0RSQU1fQ09ORklHX19zaDBfX0JJVE5SIDI0CisjZGVmaW5lIFJfU0RSQU1fQ09ORklHX19zaDBfX1dJRFRIIDMKKyNkZWZpbmUgUl9TRFJBTV9DT05GSUdfX3dfX0JJVE5SIDIzCisjZGVmaW5lIFJfU0RSQU1fQ09ORklHX193X19XSURUSCAxCisjZGVmaW5lIFJfU0RSQU1fQ09ORklHX193X19idzE2IDAKKyNkZWZpbmUgUl9TRFJBTV9DT05GSUdfX3dfX2J3MzIgMQorI2RlZmluZSBSX1NEUkFNX0NPTkZJR19fdHlwZTFfX0JJVE5SIDIyCisjZGVmaW5lIFJfU0RSQU1fQ09ORklHX190eXBlMV9fV0lEVEggMQorI2RlZmluZSBSX1NEUkFNX0NPTkZJR19fdHlwZTFfX2JhbmsyIDAKKyNkZWZpbmUgUl9TRFJBTV9DT05GSUdfX3R5cGUxX19iYW5rNCAxCisjZGVmaW5lIFJfU0RSQU1fQ09ORklHX190eXBlMF9fQklUTlIgMjEKKyNkZWZpbmUgUl9TRFJBTV9DT05GSUdfX3R5cGUwX19XSURUSCAxCisjZGVmaW5lIFJfU0RSQU1fQ09ORklHX190eXBlMF9fYmFuazIgMAorI2RlZmluZSBSX1NEUkFNX0NPTkZJR19fdHlwZTBfX2Jhbms0IDEKKyNkZWZpbmUgUl9TRFJBTV9DT05GSUdfX2dyb3VwX3NlbF9fQklUTlIgMTYKKyNkZWZpbmUgUl9TRFJBTV9DT05GSUdfX2dyb3VwX3NlbF9fV0lEVEggNQorI2RlZmluZSBSX1NEUkFNX0NPTkZJR19fZ3JvdXBfc2VsX19ncnAwIDAKKyNkZWZpbmUgUl9TRFJBTV9DT05GSUdfX2dyb3VwX3NlbF9fZ3JwMSAxCisjZGVmaW5lIFJfU0RSQU1fQ09ORklHX19ncm91cF9zZWxfX2JpdDkgOQorI2RlZmluZSBSX1NEUkFNX0NPTkZJR19fZ3JvdXBfc2VsX19iaXQxMCAxMAorI2RlZmluZSBSX1NEUkFNX0NPTkZJR19fZ3JvdXBfc2VsX19iaXQxMSAxMQorI2RlZmluZSBSX1NEUkFNX0NPTkZJR19fZ3JvdXBfc2VsX19iaXQxMiAxMgorI2RlZmluZSBSX1NEUkFNX0NPTkZJR19fZ3JvdXBfc2VsX19iaXQxMyAxMworI2RlZmluZSBSX1NEUkFNX0NPTkZJR19fZ3JvdXBfc2VsX19iaXQxNCAxNAorI2RlZmluZSBSX1NEUkFNX0NPTkZJR19fZ3JvdXBfc2VsX19iaXQxNSAxNQorI2RlZmluZSBSX1NEUkFNX0NPTkZJR19fZ3JvdXBfc2VsX19iaXQxNiAxNgorI2RlZmluZSBSX1NEUkFNX0NPTkZJR19fZ3JvdXBfc2VsX19iaXQxNyAxNworI2RlZmluZSBSX1NEUkFNX0NPTkZJR19fZ3JvdXBfc2VsX19iaXQxOCAxOAorI2RlZmluZSBSX1NEUkFNX0NPTkZJR19fZ3JvdXBfc2VsX19iaXQxOSAxOQorI2RlZmluZSBSX1NEUkFNX0NPTkZJR19fZ3JvdXBfc2VsX19iaXQyMCAyMAorI2RlZmluZSBSX1NEUkFNX0NPTkZJR19fZ3JvdXBfc2VsX19iaXQyMSAyMQorI2RlZmluZSBSX1NEUkFNX0NPTkZJR19fZ3JvdXBfc2VsX19iaXQyMiAyMgorI2RlZmluZSBSX1NEUkFNX0NPTkZJR19fZ3JvdXBfc2VsX19iaXQyMyAyMworI2RlZmluZSBSX1NEUkFNX0NPTkZJR19fZ3JvdXBfc2VsX19iaXQyNCAyNAorI2RlZmluZSBSX1NEUkFNX0NPTkZJR19fZ3JvdXBfc2VsX19iaXQyNSAyNQorI2RlZmluZSBSX1NEUkFNX0NPTkZJR19fZ3JvdXBfc2VsX19iaXQyNiAyNgorI2RlZmluZSBSX1NEUkFNX0NPTkZJR19fZ3JvdXBfc2VsX19iaXQyNyAyNworI2RlZmluZSBSX1NEUkFNX0NPTkZJR19fZ3JvdXBfc2VsX19iaXQyOCAyOAorI2RlZmluZSBSX1NEUkFNX0NPTkZJR19fZ3JvdXBfc2VsX19iaXQyOSAyOQorI2RlZmluZSBSX1NEUkFNX0NPTkZJR19fY2ExX19CSVROUiAxMworI2RlZmluZSBSX1NEUkFNX0NPTkZJR19fY2ExX19XSURUSCAzCisjZGVmaW5lIFJfU0RSQU1fQ09ORklHX19iYW5rX3NlbDFfX0JJVE5SIDgKKyNkZWZpbmUgUl9TRFJBTV9DT05GSUdfX2Jhbmtfc2VsMV9fV0lEVEggNQorI2RlZmluZSBSX1NEUkFNX0NPTkZJR19fYmFua19zZWwxX19iaXQ5IDkKKyNkZWZpbmUgUl9TRFJBTV9DT05GSUdfX2Jhbmtfc2VsMV9fYml0MTAgMTAKKyNkZWZpbmUgUl9TRFJBTV9DT05GSUdfX2Jhbmtfc2VsMV9fYml0MTEgMTEKKyNkZWZpbmUgUl9TRFJBTV9DT05GSUdfX2Jhbmtfc2VsMV9fYml0MTIgMTIKKyNkZWZpbmUgUl9TRFJBTV9DT05GSUdfX2Jhbmtfc2VsMV9fYml0MTMgMTMKKyNkZWZpbmUgUl9TRFJBTV9DT05GSUdfX2Jhbmtfc2VsMV9fYml0MTQgMTQKKyNkZWZpbmUgUl9TRFJBTV9DT05GSUdfX2Jhbmtfc2VsMV9fYml0MTUgMTUKKyNkZWZpbmUgUl9TRFJBTV9DT05GSUdfX2Jhbmtfc2VsMV9fYml0MTYgMTYKKyNkZWZpbmUgUl9TRFJBTV9DT05GSUdfX2Jhbmtfc2VsMV9fYml0MTcgMTcKKyNkZWZpbmUgUl9TRFJBTV9DT05GSUdfX2Jhbmtfc2VsMV9fYml0MTggMTgKKyNkZWZpbmUgUl9TRFJBTV9DT05GSUdfX2Jhbmtfc2VsMV9fYml0MTkgMTkKKyNkZWZpbmUgUl9TRFJBTV9DT05GSUdfX2Jhbmtfc2VsMV9fYml0MjAgMjAKKyNkZWZpbmUgUl9TRFJBTV9DT05GSUdfX2Jhbmtfc2VsMV9fYml0MjEgMjEKKyNkZWZpbmUgUl9TRFJBTV9DT05GSUdfX2Jhbmtfc2VsMV9fYml0MjIgMjIKKyNkZWZpbmUgUl9TRFJBTV9DT05GSUdfX2Jhbmtfc2VsMV9fYml0MjMgMjMKKyNkZWZpbmUgUl9TRFJBTV9DT05GSUdfX2Jhbmtfc2VsMV9fYml0MjQgMjQKKyNkZWZpbmUgUl9TRFJBTV9DT05GSUdfX2Jhbmtfc2VsMV9fYml0MjUgMjUKKyNkZWZpbmUgUl9TRFJBTV9DT05GSUdfX2Jhbmtfc2VsMV9fYml0MjYgMjYKKyNkZWZpbmUgUl9TRFJBTV9DT05GSUdfX2Jhbmtfc2VsMV9fYml0MjcgMjcKKyNkZWZpbmUgUl9TRFJBTV9DT05GSUdfX2Jhbmtfc2VsMV9fYml0MjggMjgKKyNkZWZpbmUgUl9TRFJBTV9DT05GSUdfX2Jhbmtfc2VsMV9fYml0MjkgMjkKKyNkZWZpbmUgUl9TRFJBTV9DT05GSUdfX2NhMF9fQklUTlIgNQorI2RlZmluZSBSX1NEUkFNX0NPTkZJR19fY2EwX19XSURUSCAzCisjZGVmaW5lIFJfU0RSQU1fQ09ORklHX19iYW5rX3NlbDBfX0JJVE5SIDAKKyNkZWZpbmUgUl9TRFJBTV9DT05GSUdfX2Jhbmtfc2VsMF9fV0lEVEggNQorI2RlZmluZSBSX1NEUkFNX0NPTkZJR19fYmFua19zZWwwX19iaXQ5IDkKKyNkZWZpbmUgUl9TRFJBTV9DT05GSUdfX2Jhbmtfc2VsMF9fYml0MTAgMTAKKyNkZWZpbmUgUl9TRFJBTV9DT05GSUdfX2Jhbmtfc2VsMF9fYml0MTEgMTEKKyNkZWZpbmUgUl9TRFJBTV9DT05GSUdfX2Jhbmtfc2VsMF9fYml0MTIgMTIKKyNkZWZpbmUgUl9TRFJBTV9DT05GSUdfX2Jhbmtfc2VsMF9fYml0MTMgMTMKKyNkZWZpbmUgUl9TRFJBTV9DT05GSUdfX2Jhbmtfc2VsMF9fYml0MTQgMTQKKyNkZWZpbmUgUl9TRFJBTV9DT05GSUdfX2Jhbmtfc2VsMF9fYml0MTUgMTUKKyNkZWZpbmUgUl9TRFJBTV9DT05GSUdfX2Jhbmtfc2VsMF9fYml0MTYgMTYKKyNkZWZpbmUgUl9TRFJBTV9DT05GSUdfX2Jhbmtfc2VsMF9fYml0MTcgMTcKKyNkZWZpbmUgUl9TRFJBTV9DT05GSUdfX2Jhbmtfc2VsMF9fYml0MTggMTgKKyNkZWZpbmUgUl9TRFJBTV9DT05GSUdfX2Jhbmtfc2VsMF9fYml0MTkgMTkKKyNkZWZpbmUgUl9TRFJBTV9DT05GSUdfX2Jhbmtfc2VsMF9fYml0MjAgMjAKKyNkZWZpbmUgUl9TRFJBTV9DT05GSUdfX2Jhbmtfc2VsMF9fYml0MjEgMjEKKyNkZWZpbmUgUl9TRFJBTV9DT05GSUdfX2Jhbmtfc2VsMF9fYml0MjIgMjIKKyNkZWZpbmUgUl9TRFJBTV9DT05GSUdfX2Jhbmtfc2VsMF9fYml0MjMgMjMKKyNkZWZpbmUgUl9TRFJBTV9DT05GSUdfX2Jhbmtfc2VsMF9fYml0MjQgMjQKKyNkZWZpbmUgUl9TRFJBTV9DT05GSUdfX2Jhbmtfc2VsMF9fYml0MjUgMjUKKyNkZWZpbmUgUl9TRFJBTV9DT05GSUdfX2Jhbmtfc2VsMF9fYml0MjYgMjYKKyNkZWZpbmUgUl9TRFJBTV9DT05GSUdfX2Jhbmtfc2VsMF9fYml0MjcgMjcKKyNkZWZpbmUgUl9TRFJBTV9DT05GSUdfX2Jhbmtfc2VsMF9fYml0MjggMjgKKyNkZWZpbmUgUl9TRFJBTV9DT05GSUdfX2Jhbmtfc2VsMF9fYml0MjkgMjkKKworLyoKKyEqIEV4dGVybmFsIERNQSByZWdpc3RlcnMKKyEqLworCisjZGVmaW5lIFJfRVhUX0RNQV8wX0NNRCAoSU9fVFlQRUNBU1RfVURXT1JEIDB4YjAwMDAwMTApCisjZGVmaW5lIFJfRVhUX0RNQV8wX0NNRF9fY250X19CSVROUiAyMworI2RlZmluZSBSX0VYVF9ETUFfMF9DTURfX2NudF9fV0lEVEggMQorI2RlZmluZSBSX0VYVF9ETUFfMF9DTURfX2NudF9fZW5hYmxlIDEKKyNkZWZpbmUgUl9FWFRfRE1BXzBfQ01EX19jbnRfX2Rpc2FibGUgMAorI2RlZmluZSBSX0VYVF9ETUFfMF9DTURfX3JxcG9sX19CSVROUiAyMgorI2RlZmluZSBSX0VYVF9ETUFfMF9DTURfX3JxcG9sX19XSURUSCAxCisjZGVmaW5lIFJfRVhUX0RNQV8wX0NNRF9fcnFwb2xfX2FoaWdoIDAKKyNkZWZpbmUgUl9FWFRfRE1BXzBfQ01EX19ycXBvbF9fYWxvdyAxCisjZGVmaW5lIFJfRVhUX0RNQV8wX0NNRF9fYXBvbF9fQklUTlIgMjEKKyNkZWZpbmUgUl9FWFRfRE1BXzBfQ01EX19hcG9sX19XSURUSCAxCisjZGVmaW5lIFJfRVhUX0RNQV8wX0NNRF9fYXBvbF9fYWhpZ2ggMAorI2RlZmluZSBSX0VYVF9ETUFfMF9DTURfX2Fwb2xfX2Fsb3cgMQorI2RlZmluZSBSX0VYVF9ETUFfMF9DTURfX3JxX2Fja19fQklUTlIgMjAKKyNkZWZpbmUgUl9FWFRfRE1BXzBfQ01EX19ycV9hY2tfX1dJRFRIIDEKKyNkZWZpbmUgUl9FWFRfRE1BXzBfQ01EX19ycV9hY2tfX2J1cnN0IDAKKyNkZWZpbmUgUl9FWFRfRE1BXzBfQ01EX19ycV9hY2tfX2hhbmRzaCAxCisjZGVmaW5lIFJfRVhUX0RNQV8wX0NNRF9fd2lkX19CSVROUiAxOAorI2RlZmluZSBSX0VYVF9ETUFfMF9DTURfX3dpZF9fV0lEVEggMgorI2RlZmluZSBSX0VYVF9ETUFfMF9DTURfX3dpZF9fYnl0ZSAwCisjZGVmaW5lIFJfRVhUX0RNQV8wX0NNRF9fd2lkX193b3JkIDEKKyNkZWZpbmUgUl9FWFRfRE1BXzBfQ01EX193aWRfX2R3b3JkIDIKKyNkZWZpbmUgUl9FWFRfRE1BXzBfQ01EX19kaXJfX0JJVE5SIDE3CisjZGVmaW5lIFJfRVhUX0RNQV8wX0NNRF9fZGlyX19XSURUSCAxCisjZGVmaW5lIFJfRVhUX0RNQV8wX0NNRF9fZGlyX19pbnB1dCAwCisjZGVmaW5lIFJfRVhUX0RNQV8wX0NNRF9fZGlyX19vdXRwdXQgMQorI2RlZmluZSBSX0VYVF9ETUFfMF9DTURfX3J1bl9fQklUTlIgMTYKKyNkZWZpbmUgUl9FWFRfRE1BXzBfQ01EX19ydW5fX1dJRFRIIDEKKyNkZWZpbmUgUl9FWFRfRE1BXzBfQ01EX19ydW5fX3N0YXJ0IDEKKyNkZWZpbmUgUl9FWFRfRE1BXzBfQ01EX19ydW5fX3N0b3AgMAorI2RlZmluZSBSX0VYVF9ETUFfMF9DTURfX3RyZl9jb3VudF9fQklUTlIgMAorI2RlZmluZSBSX0VYVF9ETUFfMF9DTURfX3RyZl9jb3VudF9fV0lEVEggMTYKKworI2RlZmluZSBSX0VYVF9ETUFfMF9TVEFUIChJT19UWVBFQ0FTVF9ST19VRFdPUkQgMHhiMDAwMDAxMCkKKyNkZWZpbmUgUl9FWFRfRE1BXzBfU1RBVF9fcnVuX19CSVROUiAxNgorI2RlZmluZSBSX0VYVF9ETUFfMF9TVEFUX19ydW5fX1dJRFRIIDEKKyNkZWZpbmUgUl9FWFRfRE1BXzBfU1RBVF9fcnVuX19zdGFydCAxCisjZGVmaW5lIFJfRVhUX0RNQV8wX1NUQVRfX3J1bl9fc3RvcCAwCisjZGVmaW5lIFJfRVhUX0RNQV8wX1NUQVRfX3RyZl9jb3VudF9fQklUTlIgMAorI2RlZmluZSBSX0VYVF9ETUFfMF9TVEFUX190cmZfY291bnRfX1dJRFRIIDE2CisKKyNkZWZpbmUgUl9FWFRfRE1BXzBfQUREUiAoSU9fVFlQRUNBU1RfVURXT1JEIDB4YjAwMDAwMTQpCisjZGVmaW5lIFJfRVhUX0RNQV8wX0FERFJfX2V4dDBfYWRkcl9fQklUTlIgMgorI2RlZmluZSBSX0VYVF9ETUFfMF9BRERSX19leHQwX2FkZHJfX1dJRFRIIDI4CisKKyNkZWZpbmUgUl9FWFRfRE1BXzFfQ01EIChJT19UWVBFQ0FTVF9VRFdPUkQgMHhiMDAwMDAxOCkKKyNkZWZpbmUgUl9FWFRfRE1BXzFfQ01EX19jbnRfX0JJVE5SIDIzCisjZGVmaW5lIFJfRVhUX0RNQV8xX0NNRF9fY250X19XSURUSCAxCisjZGVmaW5lIFJfRVhUX0RNQV8xX0NNRF9fY250X19lbmFibGUgMQorI2RlZmluZSBSX0VYVF9ETUFfMV9DTURfX2NudF9fZGlzYWJsZSAwCisjZGVmaW5lIFJfRVhUX0RNQV8xX0NNRF9fcnFwb2xfX0JJVE5SIDIyCisjZGVmaW5lIFJfRVhUX0RNQV8xX0NNRF9fcnFwb2xfX1dJRFRIIDEKKyNkZWZpbmUgUl9FWFRfRE1BXzFfQ01EX19ycXBvbF9fYWhpZ2ggMAorI2RlZmluZSBSX0VYVF9ETUFfMV9DTURfX3JxcG9sX19hbG93IDEKKyNkZWZpbmUgUl9FWFRfRE1BXzFfQ01EX19hcG9sX19CSVROUiAyMQorI2RlZmluZSBSX0VYVF9ETUFfMV9DTURfX2Fwb2xfX1dJRFRIIDEKKyNkZWZpbmUgUl9FWFRfRE1BXzFfQ01EX19hcG9sX19haGlnaCAwCisjZGVmaW5lIFJfRVhUX0RNQV8xX0NNRF9fYXBvbF9fYWxvdyAxCisjZGVmaW5lIFJfRVhUX0RNQV8xX0NNRF9fcnFfYWNrX19CSVROUiAyMAorI2RlZmluZSBSX0VYVF9ETUFfMV9DTURfX3JxX2Fja19fV0lEVEggMQorI2RlZmluZSBSX0VYVF9ETUFfMV9DTURfX3JxX2Fja19fYnVyc3QgMAorI2RlZmluZSBSX0VYVF9ETUFfMV9DTURfX3JxX2Fja19faGFuZHNoIDEKKyNkZWZpbmUgUl9FWFRfRE1BXzFfQ01EX193aWRfX0JJVE5SIDE4CisjZGVmaW5lIFJfRVhUX0RNQV8xX0NNRF9fd2lkX19XSURUSCAyCisjZGVmaW5lIFJfRVhUX0RNQV8xX0NNRF9fd2lkX19ieXRlIDAKKyNkZWZpbmUgUl9FWFRfRE1BXzFfQ01EX193aWRfX3dvcmQgMQorI2RlZmluZSBSX0VYVF9ETUFfMV9DTURfX3dpZF9fZHdvcmQgMgorI2RlZmluZSBSX0VYVF9ETUFfMV9DTURfX2Rpcl9fQklUTlIgMTcKKyNkZWZpbmUgUl9FWFRfRE1BXzFfQ01EX19kaXJfX1dJRFRIIDEKKyNkZWZpbmUgUl9FWFRfRE1BXzFfQ01EX19kaXJfX2lucHV0IDAKKyNkZWZpbmUgUl9FWFRfRE1BXzFfQ01EX19kaXJfX291dHB1dCAxCisjZGVmaW5lIFJfRVhUX0RNQV8xX0NNRF9fcnVuX19CSVROUiAxNgorI2RlZmluZSBSX0VYVF9ETUFfMV9DTURfX3J1bl9fV0lEVEggMQorI2RlZmluZSBSX0VYVF9ETUFfMV9DTURfX3J1bl9fc3RhcnQgMQorI2RlZmluZSBSX0VYVF9ETUFfMV9DTURfX3J1bl9fc3RvcCAwCisjZGVmaW5lIFJfRVhUX0RNQV8xX0NNRF9fdHJmX2NvdW50X19CSVROUiAwCisjZGVmaW5lIFJfRVhUX0RNQV8xX0NNRF9fdHJmX2NvdW50X19XSURUSCAxNgorCisjZGVmaW5lIFJfRVhUX0RNQV8xX1NUQVQgKElPX1RZUEVDQVNUX1JPX1VEV09SRCAweGIwMDAwMDE4KQorI2RlZmluZSBSX0VYVF9ETUFfMV9TVEFUX19ydW5fX0JJVE5SIDE2CisjZGVmaW5lIFJfRVhUX0RNQV8xX1NUQVRfX3J1bl9fV0lEVEggMQorI2RlZmluZSBSX0VYVF9ETUFfMV9TVEFUX19ydW5fX3N0YXJ0IDEKKyNkZWZpbmUgUl9FWFRfRE1BXzFfU1RBVF9fcnVuX19zdG9wIDAKKyNkZWZpbmUgUl9FWFRfRE1BXzFfU1RBVF9fdHJmX2NvdW50X19CSVROUiAwCisjZGVmaW5lIFJfRVhUX0RNQV8xX1NUQVRfX3RyZl9jb3VudF9fV0lEVEggMTYKKworI2RlZmluZSBSX0VYVF9ETUFfMV9BRERSIChJT19UWVBFQ0FTVF9VRFdPUkQgMHhiMDAwMDAxYykKKyNkZWZpbmUgUl9FWFRfRE1BXzFfQUREUl9fZXh0MF9hZGRyX19CSVROUiAyCisjZGVmaW5lIFJfRVhUX0RNQV8xX0FERFJfX2V4dDBfYWRkcl9fV0lEVEggMjgKKworLyoKKyEqIFRpbWVyIHJlZ2lzdGVycworISovCisKKyNkZWZpbmUgUl9USU1FUl9DVFJMIChJT19UWVBFQ0FTVF9VRFdPUkQgMHhiMDAwMDAyMCkKKyNkZWZpbmUgUl9USU1FUl9DVFJMX190aW1lcmRpdjFfX0JJVE5SIDI0CisjZGVmaW5lIFJfVElNRVJfQ1RSTF9fdGltZXJkaXYxX19XSURUSCA4CisjZGVmaW5lIFJfVElNRVJfQ1RSTF9fdGltZXJkaXYwX19CSVROUiAxNgorI2RlZmluZSBSX1RJTUVSX0NUUkxfX3RpbWVyZGl2MF9fV0lEVEggOAorI2RlZmluZSBSX1RJTUVSX0NUUkxfX3ByZXNjX3RpbWVyMV9fQklUTlIgMTUKKyNkZWZpbmUgUl9USU1FUl9DVFJMX19wcmVzY190aW1lcjFfX1dJRFRIIDEKKyNkZWZpbmUgUl9USU1FUl9DVFJMX19wcmVzY190aW1lcjFfX25vcm1hbCAwCisjZGVmaW5lIFJfVElNRVJfQ1RSTF9fcHJlc2NfdGltZXIxX19wcmVzY2FsZSAxCisjZGVmaW5lIFJfVElNRVJfQ1RSTF9faTFfX0JJVE5SIDE0CisjZGVmaW5lIFJfVElNRVJfQ1RSTF9faTFfX1dJRFRIIDEKKyNkZWZpbmUgUl9USU1FUl9DVFJMX19pMV9fY2xyIDEKKyNkZWZpbmUgUl9USU1FUl9DVFJMX19pMV9fbm9wIDAKKyNkZWZpbmUgUl9USU1FUl9DVFJMX190bTFfX0JJVE5SIDEyCisjZGVmaW5lIFJfVElNRVJfQ1RSTF9fdG0xX19XSURUSCAyCisjZGVmaW5lIFJfVElNRVJfQ1RSTF9fdG0xX19zdG9wX2xkIDAKKyNkZWZpbmUgUl9USU1FUl9DVFJMX190bTFfX2ZyZWV6ZSAxCisjZGVmaW5lIFJfVElNRVJfQ1RSTF9fdG0xX19ydW4gMgorI2RlZmluZSBSX1RJTUVSX0NUUkxfX3RtMV9fcmVzZXJ2ZWQgMworI2RlZmluZSBSX1RJTUVSX0NUUkxfX2Nsa3NlbDFfX0JJVE5SIDgKKyNkZWZpbmUgUl9USU1FUl9DVFJMX19jbGtzZWwxX19XSURUSCA0CisjZGVmaW5lIFJfVElNRVJfQ1RSTF9fY2xrc2VsMV9fYzMwMEh6IDAKKyNkZWZpbmUgUl9USU1FUl9DVFJMX19jbGtzZWwxX19jNjAwSHogMQorI2RlZmluZSBSX1RJTUVSX0NUUkxfX2Nsa3NlbDFfX2MxMjAwSHogMgorI2RlZmluZSBSX1RJTUVSX0NUUkxfX2Nsa3NlbDFfX2MyNDAwSHogMworI2RlZmluZSBSX1RJTUVSX0NUUkxfX2Nsa3NlbDFfX2M0ODAwSHogNAorI2RlZmluZSBSX1RJTUVSX0NUUkxfX2Nsa3NlbDFfX2M5NjAwSHogNQorI2RlZmluZSBSX1RJTUVSX0NUUkxfX2Nsa3NlbDFfX2MxOWsySHogNgorI2RlZmluZSBSX1RJTUVSX0NUUkxfX2Nsa3NlbDFfX2MzOGs0SHogNworI2RlZmluZSBSX1RJTUVSX0NUUkxfX2Nsa3NlbDFfX2M1N2s2SHogOAorI2RlZmluZSBSX1RJTUVSX0NUUkxfX2Nsa3NlbDFfX2MxMTVrMkh6IDkKKyNkZWZpbmUgUl9USU1FUl9DVFJMX19jbGtzZWwxX19jMjMwazRIeiAxMAorI2RlZmluZSBSX1RJTUVSX0NUUkxfX2Nsa3NlbDFfX2M0NjBrOEh6IDExCisjZGVmaW5lIFJfVElNRVJfQ1RSTF9fY2xrc2VsMV9fYzkyMWs2SHogMTIKKyNkZWZpbmUgUl9USU1FUl9DVFJMX19jbGtzZWwxX19jMTg0M2sySHogMTMKKyNkZWZpbmUgUl9USU1FUl9DVFJMX19jbGtzZWwxX19jNjI1MGtIeiAxNAorI2RlZmluZSBSX1RJTUVSX0NUUkxfX2Nsa3NlbDFfX2Nhc2NhZGUwIDE1CisjZGVmaW5lIFJfVElNRVJfQ1RSTF9fcHJlc2NfZXh0X19CSVROUiA3CisjZGVmaW5lIFJfVElNRVJfQ1RSTF9fcHJlc2NfZXh0X19XSURUSCAxCisjZGVmaW5lIFJfVElNRVJfQ1RSTF9fcHJlc2NfZXh0X19wcmVzY2FsZSAwCisjZGVmaW5lIFJfVElNRVJfQ1RSTF9fcHJlc2NfZXh0X19leHRlcm5hbCAxCisjZGVmaW5lIFJfVElNRVJfQ1RSTF9faTBfX0JJVE5SIDYKKyNkZWZpbmUgUl9USU1FUl9DVFJMX19pMF9fV0lEVEggMQorI2RlZmluZSBSX1RJTUVSX0NUUkxfX2kwX19jbHIgMQorI2RlZmluZSBSX1RJTUVSX0NUUkxfX2kwX19ub3AgMAorI2RlZmluZSBSX1RJTUVSX0NUUkxfX3RtMF9fQklUTlIgNAorI2RlZmluZSBSX1RJTUVSX0NUUkxfX3RtMF9fV0lEVEggMgorI2RlZmluZSBSX1RJTUVSX0NUUkxfX3RtMF9fc3RvcF9sZCAwCisjZGVmaW5lIFJfVElNRVJfQ1RSTF9fdG0wX19mcmVlemUgMQorI2RlZmluZSBSX1RJTUVSX0NUUkxfX3RtMF9fcnVuIDIKKyNkZWZpbmUgUl9USU1FUl9DVFJMX190bTBfX3Jlc2VydmVkIDMKKyNkZWZpbmUgUl9USU1FUl9DVFJMX19jbGtzZWwwX19CSVROUiAwCisjZGVmaW5lIFJfVElNRVJfQ1RSTF9fY2xrc2VsMF9fV0lEVEggNAorI2RlZmluZSBSX1RJTUVSX0NUUkxfX2Nsa3NlbDBfX2MzMDBIeiAwCisjZGVmaW5lIFJfVElNRVJfQ1RSTF9fY2xrc2VsMF9fYzYwMEh6IDEKKyNkZWZpbmUgUl9USU1FUl9DVFJMX19jbGtzZWwwX19jMTIwMEh6IDIKKyNkZWZpbmUgUl9USU1FUl9DVFJMX19jbGtzZWwwX19jMjQwMEh6IDMKKyNkZWZpbmUgUl9USU1FUl9DVFJMX19jbGtzZWwwX19jNDgwMEh6IDQKKyNkZWZpbmUgUl9USU1FUl9DVFJMX19jbGtzZWwwX19jOTYwMEh6IDUKKyNkZWZpbmUgUl9USU1FUl9DVFJMX19jbGtzZWwwX19jMTlrMkh6IDYKKyNkZWZpbmUgUl9USU1FUl9DVFJMX19jbGtzZWwwX19jMzhrNEh6IDcKKyNkZWZpbmUgUl9USU1FUl9DVFJMX19jbGtzZWwwX19jNTdrNkh6IDgKKyNkZWZpbmUgUl9USU1FUl9DVFJMX19jbGtzZWwwX19jMTE1azJIeiA5CisjZGVmaW5lIFJfVElNRVJfQ1RSTF9fY2xrc2VsMF9fYzIzMGs0SHogMTAKKyNkZWZpbmUgUl9USU1FUl9DVFJMX19jbGtzZWwwX19jNDYwazhIeiAxMQorI2RlZmluZSBSX1RJTUVSX0NUUkxfX2Nsa3NlbDBfX2M5MjFrNkh6IDEyCisjZGVmaW5lIFJfVElNRVJfQ1RSTF9fY2xrc2VsMF9fYzE4NDNrMkh6IDEzCisjZGVmaW5lIFJfVElNRVJfQ1RSTF9fY2xrc2VsMF9fYzYyNTBrSHogMTQKKyNkZWZpbmUgUl9USU1FUl9DVFJMX19jbGtzZWwwX19mbGV4aWJsZSAxNQorCisjZGVmaW5lIFJfVElNRVJfREFUQSAoSU9fVFlQRUNBU1RfUk9fVURXT1JEIDB4YjAwMDAwMjApCisjZGVmaW5lIFJfVElNRVJfREFUQV9fdGltZXIxX19CSVROUiAyNAorI2RlZmluZSBSX1RJTUVSX0RBVEFfX3RpbWVyMV9fV0lEVEggOAorI2RlZmluZSBSX1RJTUVSX0RBVEFfX3RpbWVyMF9fQklUTlIgMTYKKyNkZWZpbmUgUl9USU1FUl9EQVRBX190aW1lcjBfX1dJRFRIIDgKKyNkZWZpbmUgUl9USU1FUl9EQVRBX19jbGtkaXZfaGlnaF9fQklUTlIgOAorI2RlZmluZSBSX1RJTUVSX0RBVEFfX2Nsa2Rpdl9oaWdoX19XSURUSCA4CisjZGVmaW5lIFJfVElNRVJfREFUQV9fY2xrZGl2X2xvd19fQklUTlIgMAorI2RlZmluZSBSX1RJTUVSX0RBVEFfX2Nsa2Rpdl9sb3dfX1dJRFRIIDgKKworI2RlZmluZSBSX1RJTUVSMDFfREFUQSAoSU9fVFlQRUNBU1RfUk9fVVdPUkQgMHhiMDAwMDAyMikKKyNkZWZpbmUgUl9USU1FUjAxX0RBVEFfX2NvdW50X19CSVROUiAwCisjZGVmaW5lIFJfVElNRVIwMV9EQVRBX19jb3VudF9fV0lEVEggMTYKKworI2RlZmluZSBSX1RJTUVSMF9EQVRBIChJT19UWVBFQ0FTVF9ST19CWVRFIDB4YjAwMDAwMjIpCisjZGVmaW5lIFJfVElNRVIwX0RBVEFfX2NvdW50X19CSVROUiAwCisjZGVmaW5lIFJfVElNRVIwX0RBVEFfX2NvdW50X19XSURUSCA4CisKKyNkZWZpbmUgUl9USU1FUjFfREFUQSAoSU9fVFlQRUNBU1RfUk9fQllURSAweGIwMDAwMDIzKQorI2RlZmluZSBSX1RJTUVSMV9EQVRBX19jb3VudF9fQklUTlIgMAorI2RlZmluZSBSX1RJTUVSMV9EQVRBX19jb3VudF9fV0lEVEggOAorCisjZGVmaW5lIFJfV0FUQ0hET0cgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMDI0KQorI2RlZmluZSBSX1dBVENIRE9HX19rZXlfX0JJVE5SIDEKKyNkZWZpbmUgUl9XQVRDSERPR19fa2V5X19XSURUSCAzCisjZGVmaW5lIFJfV0FUQ0hET0dfX2VuYWJsZV9fQklUTlIgMAorI2RlZmluZSBSX1dBVENIRE9HX19lbmFibGVfX1dJRFRIIDEKKyNkZWZpbmUgUl9XQVRDSERPR19fZW5hYmxlX19zdG9wIDAKKyNkZWZpbmUgUl9XQVRDSERPR19fZW5hYmxlX19zdGFydCAxCisKKyNkZWZpbmUgUl9DTE9DS19QUkVTQ0FMRSAoSU9fVFlQRUNBU1RfVURXT1JEIDB4YjAwMDAwZjApCisjZGVmaW5lIFJfQ0xPQ0tfUFJFU0NBTEVfX3Nlcl9wcmVzY19fQklUTlIgMTYKKyNkZWZpbmUgUl9DTE9DS19QUkVTQ0FMRV9fc2VyX3ByZXNjX19XSURUSCAxNgorI2RlZmluZSBSX0NMT0NLX1BSRVNDQUxFX190aW1fcHJlc2NfX0JJVE5SIDAKKyNkZWZpbmUgUl9DTE9DS19QUkVTQ0FMRV9fdGltX3ByZXNjX19XSURUSCAxNgorCisjZGVmaW5lIFJfU0VSSUFMX1BSRVNDQUxFIChJT19UWVBFQ0FTVF9VV09SRCAweGIwMDAwMGYyKQorI2RlZmluZSBSX1NFUklBTF9QUkVTQ0FMRV9fc2VyX3ByZXNjX19CSVROUiAwCisjZGVmaW5lIFJfU0VSSUFMX1BSRVNDQUxFX19zZXJfcHJlc2NfX1dJRFRIIDE2CisKKyNkZWZpbmUgUl9USU1FUl9QUkVTQ0FMRSAoSU9fVFlQRUNBU1RfVVdPUkQgMHhiMDAwMDBmMCkKKyNkZWZpbmUgUl9USU1FUl9QUkVTQ0FMRV9fdGltX3ByZXNjX19CSVROUiAwCisjZGVmaW5lIFJfVElNRVJfUFJFU0NBTEVfX3RpbV9wcmVzY19fV0lEVEggMTYKKworI2RlZmluZSBSX1BSRVNDQUxFX1NUQVRVUyAoSU9fVFlQRUNBU1RfUk9fVURXT1JEIDB4YjAwMDAwZjApCisjZGVmaW5lIFJfUFJFU0NBTEVfU1RBVFVTX19zZXJfc3RhdHVzX19CSVROUiAxNgorI2RlZmluZSBSX1BSRVNDQUxFX1NUQVRVU19fc2VyX3N0YXR1c19fV0lEVEggMTYKKyNkZWZpbmUgUl9QUkVTQ0FMRV9TVEFUVVNfX3RpbV9zdGF0dXNfX0JJVE5SIDAKKyNkZWZpbmUgUl9QUkVTQ0FMRV9TVEFUVVNfX3RpbV9zdGF0dXNfX1dJRFRIIDE2CisKKyNkZWZpbmUgUl9TRVJfUFJFU0NfU1RBVFVTIChJT19UWVBFQ0FTVF9ST19VV09SRCAweGIwMDAwMGYyKQorI2RlZmluZSBSX1NFUl9QUkVTQ19TVEFUVVNfX3Nlcl9zdGF0dXNfX0JJVE5SIDAKKyNkZWZpbmUgUl9TRVJfUFJFU0NfU1RBVFVTX19zZXJfc3RhdHVzX19XSURUSCAxNgorCisjZGVmaW5lIFJfVElNX1BSRVNDX1NUQVRVUyAoSU9fVFlQRUNBU1RfUk9fVVdPUkQgMHhiMDAwMDBmMCkKKyNkZWZpbmUgUl9USU1fUFJFU0NfU1RBVFVTX190aW1fc3RhdHVzX19CSVROUiAwCisjZGVmaW5lIFJfVElNX1BSRVNDX1NUQVRVU19fdGltX3N0YXR1c19fV0lEVEggMTYKKworI2RlZmluZSBSX1NZTkNfU0VSSUFMX1BSRVNDQUxFIChJT19UWVBFQ0FTVF9VRFdPUkQgMHhiMDAwMDBmNCkKKyNkZWZpbmUgUl9TWU5DX1NFUklBTF9QUkVTQ0FMRV9fY2xrX3NlbF91M19fQklUTlIgMjMKKyNkZWZpbmUgUl9TWU5DX1NFUklBTF9QUkVTQ0FMRV9fY2xrX3NlbF91M19fV0lEVEggMQorI2RlZmluZSBSX1NZTkNfU0VSSUFMX1BSRVNDQUxFX19jbGtfc2VsX3UzX19jb2RlYyAwCisjZGVmaW5lIFJfU1lOQ19TRVJJQUxfUFJFU0NBTEVfX2Nsa19zZWxfdTNfX2JhdWRyYXRlIDEKKyNkZWZpbmUgUl9TWU5DX1NFUklBTF9QUkVTQ0FMRV9fd29yZF9zdGJfc2VsX3UzX19CSVROUiAyMgorI2RlZmluZSBSX1NZTkNfU0VSSUFMX1BSRVNDQUxFX193b3JkX3N0Yl9zZWxfdTNfX1dJRFRIIDEKKyNkZWZpbmUgUl9TWU5DX1NFUklBTF9QUkVTQ0FMRV9fd29yZF9zdGJfc2VsX3UzX19leHRlcm5hbCAwCisjZGVmaW5lIFJfU1lOQ19TRVJJQUxfUFJFU0NBTEVfX3dvcmRfc3RiX3NlbF91M19faW50ZXJuYWwgMQorI2RlZmluZSBSX1NZTkNfU0VSSUFMX1BSRVNDQUxFX19jbGtfc2VsX3UxX19CSVROUiAyMQorI2RlZmluZSBSX1NZTkNfU0VSSUFMX1BSRVNDQUxFX19jbGtfc2VsX3UxX19XSURUSCAxCisjZGVmaW5lIFJfU1lOQ19TRVJJQUxfUFJFU0NBTEVfX2Nsa19zZWxfdTFfX2NvZGVjIDAKKyNkZWZpbmUgUl9TWU5DX1NFUklBTF9QUkVTQ0FMRV9fY2xrX3NlbF91MV9fYmF1ZHJhdGUgMQorI2RlZmluZSBSX1NZTkNfU0VSSUFMX1BSRVNDQUxFX193b3JkX3N0Yl9zZWxfdTFfX0JJVE5SIDIwCisjZGVmaW5lIFJfU1lOQ19TRVJJQUxfUFJFU0NBTEVfX3dvcmRfc3RiX3NlbF91MV9fV0lEVEggMQorI2RlZmluZSBSX1NZTkNfU0VSSUFMX1BSRVNDQUxFX193b3JkX3N0Yl9zZWxfdTFfX2V4dGVybmFsIDAKKyNkZWZpbmUgUl9TWU5DX1NFUklBTF9QUkVTQ0FMRV9fd29yZF9zdGJfc2VsX3UxX19pbnRlcm5hbCAxCisjZGVmaW5lIFJfU1lOQ19TRVJJQUxfUFJFU0NBTEVfX3ByZXNjYWxlcl9fQklUTlIgMTYKKyNkZWZpbmUgUl9TWU5DX1NFUklBTF9QUkVTQ0FMRV9fcHJlc2NhbGVyX19XSURUSCAzCisjZGVmaW5lIFJfU1lOQ19TRVJJQUxfUFJFU0NBTEVfX3ByZXNjYWxlcl9fZGl2MSAwCisjZGVmaW5lIFJfU1lOQ19TRVJJQUxfUFJFU0NBTEVfX3ByZXNjYWxlcl9fZGl2MiAxCisjZGVmaW5lIFJfU1lOQ19TRVJJQUxfUFJFU0NBTEVfX3ByZXNjYWxlcl9fZGl2NCAyCisjZGVmaW5lIFJfU1lOQ19TRVJJQUxfUFJFU0NBTEVfX3ByZXNjYWxlcl9fZGl2OCAzCisjZGVmaW5lIFJfU1lOQ19TRVJJQUxfUFJFU0NBTEVfX3ByZXNjYWxlcl9fZGl2MTYgNAorI2RlZmluZSBSX1NZTkNfU0VSSUFMX1BSRVNDQUxFX19wcmVzY2FsZXJfX2RpdjMyIDUKKyNkZWZpbmUgUl9TWU5DX1NFUklBTF9QUkVTQ0FMRV9fcHJlc2NhbGVyX19kaXY2NCA2CisjZGVmaW5lIFJfU1lOQ19TRVJJQUxfUFJFU0NBTEVfX3ByZXNjYWxlcl9fZGl2MTI4IDcKKyNkZWZpbmUgUl9TWU5DX1NFUklBTF9QUkVTQ0FMRV9fd2FycF9tb2RlX19CSVROUiAxNQorI2RlZmluZSBSX1NZTkNfU0VSSUFMX1BSRVNDQUxFX193YXJwX21vZGVfX1dJRFRIIDEKKyNkZWZpbmUgUl9TWU5DX1NFUklBTF9QUkVTQ0FMRV9fd2FycF9tb2RlX19ub3JtYWwgMAorI2RlZmluZSBSX1NZTkNfU0VSSUFMX1BSRVNDQUxFX193YXJwX21vZGVfX2VuYWJsZWQgMQorI2RlZmluZSBSX1NZTkNfU0VSSUFMX1BSRVNDQUxFX19mcmFtZV9yYXRlX19CSVROUiAxMQorI2RlZmluZSBSX1NZTkNfU0VSSUFMX1BSRVNDQUxFX19mcmFtZV9yYXRlX19XSURUSCA0CisjZGVmaW5lIFJfU1lOQ19TRVJJQUxfUFJFU0NBTEVfX3dvcmRfcmF0ZV9fQklUTlIgMAorI2RlZmluZSBSX1NZTkNfU0VSSUFMX1BSRVNDQUxFX193b3JkX3JhdGVfX1dJRFRIIDEwCisKKy8qCishKiBTaGFyZWQgUkFNIGludGVyZmFjZSByZWdpc3RlcnMKKyEqLworCisjZGVmaW5lIFJfU0hBUkVEX1JBTV9DT05GSUcgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMDQwKQorI2RlZmluZSBSX1NIQVJFRF9SQU1fQ09ORklHX193aWR0aF9fQklUTlIgMworI2RlZmluZSBSX1NIQVJFRF9SQU1fQ09ORklHX193aWR0aF9fV0lEVEggMQorI2RlZmluZSBSX1NIQVJFRF9SQU1fQ09ORklHX193aWR0aF9fYnl0ZSAwCisjZGVmaW5lIFJfU0hBUkVEX1JBTV9DT05GSUdfX3dpZHRoX193b3JkIDEKKyNkZWZpbmUgUl9TSEFSRURfUkFNX0NPTkZJR19fZW5hYmxlX19CSVROUiAyCisjZGVmaW5lIFJfU0hBUkVEX1JBTV9DT05GSUdfX2VuYWJsZV9fV0lEVEggMQorI2RlZmluZSBSX1NIQVJFRF9SQU1fQ09ORklHX19lbmFibGVfX3llcyAxCisjZGVmaW5lIFJfU0hBUkVEX1JBTV9DT05GSUdfX2VuYWJsZV9fbm8gMAorI2RlZmluZSBSX1NIQVJFRF9SQU1fQ09ORklHX19waW50X19CSVROUiAxCisjZGVmaW5lIFJfU0hBUkVEX1JBTV9DT05GSUdfX3BpbnRfX1dJRFRIIDEKKyNkZWZpbmUgUl9TSEFSRURfUkFNX0NPTkZJR19fcGludF9faW50IDEKKyNkZWZpbmUgUl9TSEFSRURfUkFNX0NPTkZJR19fcGludF9fbm9wIDAKKyNkZWZpbmUgUl9TSEFSRURfUkFNX0NPTkZJR19fY2xyaV9fQklUTlIgMAorI2RlZmluZSBSX1NIQVJFRF9SQU1fQ09ORklHX19jbHJpX19XSURUSCAxCisjZGVmaW5lIFJfU0hBUkVEX1JBTV9DT05GSUdfX2NscmlfX2NsciAxCisjZGVmaW5lIFJfU0hBUkVEX1JBTV9DT05GSUdfX2NscmlfX25vcCAwCisKKyNkZWZpbmUgUl9TSEFSRURfUkFNX0FERFIgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMDQ0KQorI2RlZmluZSBSX1NIQVJFRF9SQU1fQUREUl9fYmFzZV9hZGRyX19CSVROUiA4CisjZGVmaW5lIFJfU0hBUkVEX1JBTV9BRERSX19iYXNlX2FkZHJfX1dJRFRIIDIyCisKKy8qCishKiBHZW5lcmFsIGNvbmZpZyByZWdpc3RlcnMKKyEqLworCisjZGVmaW5lIFJfR0VOX0NPTkZJRyAoSU9fVFlQRUNBU1RfVURXT1JEIDB4YjAwMDAwMmMpCisjZGVmaW5lIFJfR0VOX0NPTkZJR19fcGFyX3dfX0JJVE5SIDMxCisjZGVmaW5lIFJfR0VOX0NPTkZJR19fcGFyX3dfX1dJRFRIIDEKKyNkZWZpbmUgUl9HRU5fQ09ORklHX19wYXJfd19fc2VsZWN0IDEKKyNkZWZpbmUgUl9HRU5fQ09ORklHX19wYXJfd19fZGlzYWJsZSAwCisjZGVmaW5lIFJfR0VOX0NPTkZJR19fdXNiMl9fQklUTlIgMzAKKyNkZWZpbmUgUl9HRU5fQ09ORklHX191c2IyX19XSURUSCAxCisjZGVmaW5lIFJfR0VOX0NPTkZJR19fdXNiMl9fc2VsZWN0IDEKKyNkZWZpbmUgUl9HRU5fQ09ORklHX191c2IyX19kaXNhYmxlIDAKKyNkZWZpbmUgUl9HRU5fQ09ORklHX191c2IxX19CSVROUiAyOQorI2RlZmluZSBSX0dFTl9DT05GSUdfX3VzYjFfX1dJRFRIIDEKKyNkZWZpbmUgUl9HRU5fQ09ORklHX191c2IxX19zZWxlY3QgMQorI2RlZmluZSBSX0dFTl9DT05GSUdfX3VzYjFfX2Rpc2FibGUgMAorI2RlZmluZSBSX0dFTl9DT05GSUdfX2cyNGRpcl9fQklUTlIgMjcKKyNkZWZpbmUgUl9HRU5fQ09ORklHX19nMjRkaXJfX1dJRFRIIDEKKyNkZWZpbmUgUl9HRU5fQ09ORklHX19nMjRkaXJfX2luIDAKKyNkZWZpbmUgUl9HRU5fQ09ORklHX19nMjRkaXJfX291dCAxCisjZGVmaW5lIFJfR0VOX0NPTkZJR19fZzE2XzIzZGlyX19CSVROUiAyNgorI2RlZmluZSBSX0dFTl9DT05GSUdfX2cxNl8yM2Rpcl9fV0lEVEggMQorI2RlZmluZSBSX0dFTl9DT05GSUdfX2cxNl8yM2Rpcl9faW4gMAorI2RlZmluZSBSX0dFTl9DT05GSUdfX2cxNl8yM2Rpcl9fb3V0IDEKKyNkZWZpbmUgUl9HRU5fQ09ORklHX19nOF8xNWRpcl9fQklUTlIgMjUKKyNkZWZpbmUgUl9HRU5fQ09ORklHX19nOF8xNWRpcl9fV0lEVEggMQorI2RlZmluZSBSX0dFTl9DT05GSUdfX2c4XzE1ZGlyX19pbiAwCisjZGVmaW5lIFJfR0VOX0NPTkZJR19fZzhfMTVkaXJfX291dCAxCisjZGVmaW5lIFJfR0VOX0NPTkZJR19fZzBkaXJfX0JJVE5SIDI0CisjZGVmaW5lIFJfR0VOX0NPTkZJR19fZzBkaXJfX1dJRFRIIDEKKyNkZWZpbmUgUl9HRU5fQ09ORklHX19nMGRpcl9faW4gMAorI2RlZmluZSBSX0dFTl9DT05GSUdfX2cwZGlyX19vdXQgMQorI2RlZmluZSBSX0dFTl9DT05GSUdfX2RtYTlfX0JJVE5SIDIzCisjZGVmaW5lIFJfR0VOX0NPTkZJR19fZG1hOV9fV0lEVEggMQorI2RlZmluZSBSX0dFTl9DT05GSUdfX2RtYTlfX3VzYiAwCisjZGVmaW5lIFJfR0VOX0NPTkZJR19fZG1hOV9fc2VyaWFsMSAxCisjZGVmaW5lIFJfR0VOX0NPTkZJR19fZG1hOF9fQklUTlIgMjIKKyNkZWZpbmUgUl9HRU5fQ09ORklHX19kbWE4X19XSURUSCAxCisjZGVmaW5lIFJfR0VOX0NPTkZJR19fZG1hOF9fdXNiIDAKKyNkZWZpbmUgUl9HRU5fQ09ORklHX19kbWE4X19zZXJpYWwxIDEKKyNkZWZpbmUgUl9HRU5fQ09ORklHX19kbWE3X19CSVROUiAyMAorI2RlZmluZSBSX0dFTl9DT05GSUdfX2RtYTdfX1dJRFRIIDIKKyNkZWZpbmUgUl9HRU5fQ09ORklHX19kbWE3X191bnVzZWQgMAorI2RlZmluZSBSX0dFTl9DT05GSUdfX2RtYTdfX3NlcmlhbDAgMQorI2RlZmluZSBSX0dFTl9DT05GSUdfX2RtYTdfX2V4dGRtYTEgMgorI2RlZmluZSBSX0dFTl9DT05GSUdfX2RtYTdfX2ludGRtYTYgMworI2RlZmluZSBSX0dFTl9DT05GSUdfX2RtYTZfX0JJVE5SIDE4CisjZGVmaW5lIFJfR0VOX0NPTkZJR19fZG1hNl9fV0lEVEggMgorI2RlZmluZSBSX0dFTl9DT05GSUdfX2RtYTZfX3VudXNlZCAwCisjZGVmaW5lIFJfR0VOX0NPTkZJR19fZG1hNl9fc2VyaWFsMCAxCisjZGVmaW5lIFJfR0VOX0NPTkZJR19fZG1hNl9fZXh0ZG1hMSAyCisjZGVmaW5lIFJfR0VOX0NPTkZJR19fZG1hNl9faW50ZG1hNyAzCisjZGVmaW5lIFJfR0VOX0NPTkZJR19fZG1hNV9fQklUTlIgMTYKKyNkZWZpbmUgUl9HRU5fQ09ORklHX19kbWE1X19XSURUSCAyCisjZGVmaW5lIFJfR0VOX0NPTkZJR19fZG1hNV9fcGFyMSAwCisjZGVmaW5lIFJfR0VOX0NPTkZJR19fZG1hNV9fc2NzaTEgMQorI2RlZmluZSBSX0dFTl9DT05GSUdfX2RtYTVfX3NlcmlhbDMgMgorI2RlZmluZSBSX0dFTl9DT05GSUdfX2RtYTVfX2V4dGRtYTAgMworI2RlZmluZSBSX0dFTl9DT05GSUdfX2RtYTRfX0JJVE5SIDE0CisjZGVmaW5lIFJfR0VOX0NPTkZJR19fZG1hNF9fV0lEVEggMgorI2RlZmluZSBSX0dFTl9DT05GSUdfX2RtYTRfX3BhcjEgMAorI2RlZmluZSBSX0dFTl9DT05GSUdfX2RtYTRfX3Njc2kxIDEKKyNkZWZpbmUgUl9HRU5fQ09ORklHX19kbWE0X19zZXJpYWwzIDIKKyNkZWZpbmUgUl9HRU5fQ09ORklHX19kbWE0X19leHRkbWEwIDMKKyNkZWZpbmUgUl9HRU5fQ09ORklHX19kbWEzX19CSVROUiAxMgorI2RlZmluZSBSX0dFTl9DT05GSUdfX2RtYTNfX1dJRFRIIDIKKyNkZWZpbmUgUl9HRU5fQ09ORklHX19kbWEzX19wYXIwIDAKKyNkZWZpbmUgUl9HRU5fQ09ORklHX19kbWEzX19zY3NpMCAxCisjZGVmaW5lIFJfR0VOX0NPTkZJR19fZG1hM19fc2VyaWFsMiAyCisjZGVmaW5lIFJfR0VOX0NPTkZJR19fZG1hM19fYXRhIDMKKyNkZWZpbmUgUl9HRU5fQ09ORklHX19kbWEyX19CSVROUiAxMAorI2RlZmluZSBSX0dFTl9DT05GSUdfX2RtYTJfX1dJRFRIIDIKKyNkZWZpbmUgUl9HRU5fQ09ORklHX19kbWEyX19wYXIwIDAKKyNkZWZpbmUgUl9HRU5fQ09ORklHX19kbWEyX19zY3NpMCAxCisjZGVmaW5lIFJfR0VOX0NPTkZJR19fZG1hMl9fc2VyaWFsMiAyCisjZGVmaW5lIFJfR0VOX0NPTkZJR19fZG1hMl9fYXRhIDMKKyNkZWZpbmUgUl9HRU5fQ09ORklHX19taW9fd19fQklUTlIgOQorI2RlZmluZSBSX0dFTl9DT05GSUdfX21pb193X19XSURUSCAxCisjZGVmaW5lIFJfR0VOX0NPTkZJR19fbWlvX3dfX3NlbGVjdCAxCisjZGVmaW5lIFJfR0VOX0NPTkZJR19fbWlvX3dfX2Rpc2FibGUgMAorI2RlZmluZSBSX0dFTl9DT05GSUdfX3NlcjNfX0JJVE5SIDgKKyNkZWZpbmUgUl9HRU5fQ09ORklHX19zZXIzX19XSURUSCAxCisjZGVmaW5lIFJfR0VOX0NPTkZJR19fc2VyM19fc2VsZWN0IDEKKyNkZWZpbmUgUl9HRU5fQ09ORklHX19zZXIzX19kaXNhYmxlIDAKKyNkZWZpbmUgUl9HRU5fQ09ORklHX19wYXIxX19CSVROUiA3CisjZGVmaW5lIFJfR0VOX0NPTkZJR19fcGFyMV9fV0lEVEggMQorI2RlZmluZSBSX0dFTl9DT05GSUdfX3BhcjFfX3NlbGVjdCAxCisjZGVmaW5lIFJfR0VOX0NPTkZJR19fcGFyMV9fZGlzYWJsZSAwCisjZGVmaW5lIFJfR0VOX0NPTkZJR19fc2NzaTB3X19CSVROUiA2CisjZGVmaW5lIFJfR0VOX0NPTkZJR19fc2NzaTB3X19XSURUSCAxCisjZGVmaW5lIFJfR0VOX0NPTkZJR19fc2NzaTB3X19zZWxlY3QgMQorI2RlZmluZSBSX0dFTl9DT05GSUdfX3Njc2kwd19fZGlzYWJsZSAwCisjZGVmaW5lIFJfR0VOX0NPTkZJR19fc2NzaTFfX0JJVE5SIDUKKyNkZWZpbmUgUl9HRU5fQ09ORklHX19zY3NpMV9fV0lEVEggMQorI2RlZmluZSBSX0dFTl9DT05GSUdfX3Njc2kxX19zZWxlY3QgMQorI2RlZmluZSBSX0dFTl9DT05GSUdfX3Njc2kxX19kaXNhYmxlIDAKKyNkZWZpbmUgUl9HRU5fQ09ORklHX19taW9fX0JJVE5SIDQKKyNkZWZpbmUgUl9HRU5fQ09ORklHX19taW9fX1dJRFRIIDEKKyNkZWZpbmUgUl9HRU5fQ09ORklHX19taW9fX3NlbGVjdCAxCisjZGVmaW5lIFJfR0VOX0NPTkZJR19fbWlvX19kaXNhYmxlIDAKKyNkZWZpbmUgUl9HRU5fQ09ORklHX19zZXIyX19CSVROUiAzCisjZGVmaW5lIFJfR0VOX0NPTkZJR19fc2VyMl9fV0lEVEggMQorI2RlZmluZSBSX0dFTl9DT05GSUdfX3NlcjJfX3NlbGVjdCAxCisjZGVmaW5lIFJfR0VOX0NPTkZJR19fc2VyMl9fZGlzYWJsZSAwCisjZGVmaW5lIFJfR0VOX0NPTkZJR19fcGFyMF9fQklUTlIgMgorI2RlZmluZSBSX0dFTl9DT05GSUdfX3BhcjBfX1dJRFRIIDEKKyNkZWZpbmUgUl9HRU5fQ09ORklHX19wYXIwX19zZWxlY3QgMQorI2RlZmluZSBSX0dFTl9DT05GSUdfX3BhcjBfX2Rpc2FibGUgMAorI2RlZmluZSBSX0dFTl9DT05GSUdfX2F0YV9fQklUTlIgMQorI2RlZmluZSBSX0dFTl9DT05GSUdfX2F0YV9fV0lEVEggMQorI2RlZmluZSBSX0dFTl9DT05GSUdfX2F0YV9fc2VsZWN0IDEKKyNkZWZpbmUgUl9HRU5fQ09ORklHX19hdGFfX2Rpc2FibGUgMAorI2RlZmluZSBSX0dFTl9DT05GSUdfX3Njc2kwX19CSVROUiAwCisjZGVmaW5lIFJfR0VOX0NPTkZJR19fc2NzaTBfX1dJRFRIIDEKKyNkZWZpbmUgUl9HRU5fQ09ORklHX19zY3NpMF9fc2VsZWN0IDEKKyNkZWZpbmUgUl9HRU5fQ09ORklHX19zY3NpMF9fZGlzYWJsZSAwCisKKyNkZWZpbmUgUl9HRU5fQ09ORklHX0lJIChJT19UWVBFQ0FTVF9VRFdPUkQgMHhiMDAwMDAzNCkKKyNkZWZpbmUgUl9HRU5fQ09ORklHX0lJX19zZXJtb2RlM19fQklUTlIgNgorI2RlZmluZSBSX0dFTl9DT05GSUdfSUlfX3Nlcm1vZGUzX19XSURUSCAxCisjZGVmaW5lIFJfR0VOX0NPTkZJR19JSV9fc2VybW9kZTNfX2FzeW5jIDAKKyNkZWZpbmUgUl9HRU5fQ09ORklHX0lJX19zZXJtb2RlM19fc3luYyAxCisjZGVmaW5lIFJfR0VOX0NPTkZJR19JSV9fc2VybW9kZTFfX0JJVE5SIDQKKyNkZWZpbmUgUl9HRU5fQ09ORklHX0lJX19zZXJtb2RlMV9fV0lEVEggMQorI2RlZmluZSBSX0dFTl9DT05GSUdfSUlfX3Nlcm1vZGUxX19hc3luYyAwCisjZGVmaW5lIFJfR0VOX0NPTkZJR19JSV9fc2VybW9kZTFfX3N5bmMgMQorI2RlZmluZSBSX0dFTl9DT05GSUdfSUlfX2V4dF9jbGtfX0JJVE5SIDIKKyNkZWZpbmUgUl9HRU5fQ09ORklHX0lJX19leHRfY2xrX19XSURUSCAxCisjZGVmaW5lIFJfR0VOX0NPTkZJR19JSV9fZXh0X2Nsa19fc2VsZWN0IDEKKyNkZWZpbmUgUl9HRU5fQ09ORklHX0lJX19leHRfY2xrX19kaXNhYmxlIDAKKyNkZWZpbmUgUl9HRU5fQ09ORklHX0lJX19zZXIyX19CSVROUiAxCisjZGVmaW5lIFJfR0VOX0NPTkZJR19JSV9fc2VyMl9fV0lEVEggMQorI2RlZmluZSBSX0dFTl9DT05GSUdfSUlfX3NlcjJfX3NlbGVjdCAxCisjZGVmaW5lIFJfR0VOX0NPTkZJR19JSV9fc2VyMl9fZGlzYWJsZSAwCisjZGVmaW5lIFJfR0VOX0NPTkZJR19JSV9fc2VyM19fQklUTlIgMAorI2RlZmluZSBSX0dFTl9DT05GSUdfSUlfX3NlcjNfX1dJRFRIIDEKKyNkZWZpbmUgUl9HRU5fQ09ORklHX0lJX19zZXIzX19zZWxlY3QgMQorI2RlZmluZSBSX0dFTl9DT05GSUdfSUlfX3NlcjNfX2Rpc2FibGUgMAorCisjZGVmaW5lIFJfUE9SVF9HX0RBVEEgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMDI4KQorI2RlZmluZSBSX1BPUlRfR19EQVRBX19kYXRhX19CSVROUiAwCisjZGVmaW5lIFJfUE9SVF9HX0RBVEFfX2RhdGFfX1dJRFRIIDMyCisKKy8qCishKiBHZW5lcmFsIHBvcnQgY29uZmlndXJhdGlvbiByZWdpc3RlcnMKKyEqLworCisjZGVmaW5lIFJfUE9SVF9QQV9TRVQgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMDMwKQorI2RlZmluZSBSX1BPUlRfUEFfU0VUX19kaXI3X19CSVROUiAxNQorI2RlZmluZSBSX1BPUlRfUEFfU0VUX19kaXI3X19XSURUSCAxCisjZGVmaW5lIFJfUE9SVF9QQV9TRVRfX2RpcjdfX2lucHV0IDAKKyNkZWZpbmUgUl9QT1JUX1BBX1NFVF9fZGlyN19fb3V0cHV0IDEKKyNkZWZpbmUgUl9QT1JUX1BBX1NFVF9fZGlyNl9fQklUTlIgMTQKKyNkZWZpbmUgUl9QT1JUX1BBX1NFVF9fZGlyNl9fV0lEVEggMQorI2RlZmluZSBSX1BPUlRfUEFfU0VUX19kaXI2X19pbnB1dCAwCisjZGVmaW5lIFJfUE9SVF9QQV9TRVRfX2RpcjZfX291dHB1dCAxCisjZGVmaW5lIFJfUE9SVF9QQV9TRVRfX2RpcjVfX0JJVE5SIDEzCisjZGVmaW5lIFJfUE9SVF9QQV9TRVRfX2RpcjVfX1dJRFRIIDEKKyNkZWZpbmUgUl9QT1JUX1BBX1NFVF9fZGlyNV9faW5wdXQgMAorI2RlZmluZSBSX1BPUlRfUEFfU0VUX19kaXI1X19vdXRwdXQgMQorI2RlZmluZSBSX1BPUlRfUEFfU0VUX19kaXI0X19CSVROUiAxMgorI2RlZmluZSBSX1BPUlRfUEFfU0VUX19kaXI0X19XSURUSCAxCisjZGVmaW5lIFJfUE9SVF9QQV9TRVRfX2RpcjRfX2lucHV0IDAKKyNkZWZpbmUgUl9QT1JUX1BBX1NFVF9fZGlyNF9fb3V0cHV0IDEKKyNkZWZpbmUgUl9QT1JUX1BBX1NFVF9fZGlyM19fQklUTlIgMTEKKyNkZWZpbmUgUl9QT1JUX1BBX1NFVF9fZGlyM19fV0lEVEggMQorI2RlZmluZSBSX1BPUlRfUEFfU0VUX19kaXIzX19pbnB1dCAwCisjZGVmaW5lIFJfUE9SVF9QQV9TRVRfX2RpcjNfX291dHB1dCAxCisjZGVmaW5lIFJfUE9SVF9QQV9TRVRfX2RpcjJfX0JJVE5SIDEwCisjZGVmaW5lIFJfUE9SVF9QQV9TRVRfX2RpcjJfX1dJRFRIIDEKKyNkZWZpbmUgUl9QT1JUX1BBX1NFVF9fZGlyMl9faW5wdXQgMAorI2RlZmluZSBSX1BPUlRfUEFfU0VUX19kaXIyX19vdXRwdXQgMQorI2RlZmluZSBSX1BPUlRfUEFfU0VUX19kaXIxX19CSVROUiA5CisjZGVmaW5lIFJfUE9SVF9QQV9TRVRfX2RpcjFfX1dJRFRIIDEKKyNkZWZpbmUgUl9QT1JUX1BBX1NFVF9fZGlyMV9faW5wdXQgMAorI2RlZmluZSBSX1BPUlRfUEFfU0VUX19kaXIxX19vdXRwdXQgMQorI2RlZmluZSBSX1BPUlRfUEFfU0VUX19kaXIwX19CSVROUiA4CisjZGVmaW5lIFJfUE9SVF9QQV9TRVRfX2RpcjBfX1dJRFRIIDEKKyNkZWZpbmUgUl9QT1JUX1BBX1NFVF9fZGlyMF9faW5wdXQgMAorI2RlZmluZSBSX1BPUlRfUEFfU0VUX19kaXIwX19vdXRwdXQgMQorI2RlZmluZSBSX1BPUlRfUEFfU0VUX19kYXRhX291dF9fQklUTlIgMAorI2RlZmluZSBSX1BPUlRfUEFfU0VUX19kYXRhX291dF9fV0lEVEggOAorCisjZGVmaW5lIFJfUE9SVF9QQV9EQVRBIChJT19UWVBFQ0FTVF9CWVRFIDB4YjAwMDAwMzApCisjZGVmaW5lIFJfUE9SVF9QQV9EQVRBX19kYXRhX291dF9fQklUTlIgMAorI2RlZmluZSBSX1BPUlRfUEFfREFUQV9fZGF0YV9vdXRfX1dJRFRIIDgKKworI2RlZmluZSBSX1BPUlRfUEFfRElSIChJT19UWVBFQ0FTVF9CWVRFIDB4YjAwMDAwMzEpCisjZGVmaW5lIFJfUE9SVF9QQV9ESVJfX2RpcjdfX0JJVE5SIDcKKyNkZWZpbmUgUl9QT1JUX1BBX0RJUl9fZGlyN19fV0lEVEggMQorI2RlZmluZSBSX1BPUlRfUEFfRElSX19kaXI3X19pbnB1dCAwCisjZGVmaW5lIFJfUE9SVF9QQV9ESVJfX2RpcjdfX291dHB1dCAxCisjZGVmaW5lIFJfUE9SVF9QQV9ESVJfX2RpcjZfX0JJVE5SIDYKKyNkZWZpbmUgUl9QT1JUX1BBX0RJUl9fZGlyNl9fV0lEVEggMQorI2RlZmluZSBSX1BPUlRfUEFfRElSX19kaXI2X19pbnB1dCAwCisjZGVmaW5lIFJfUE9SVF9QQV9ESVJfX2RpcjZfX291dHB1dCAxCisjZGVmaW5lIFJfUE9SVF9QQV9ESVJfX2RpcjVfX0JJVE5SIDUKKyNkZWZpbmUgUl9QT1JUX1BBX0RJUl9fZGlyNV9fV0lEVEggMQorI2RlZmluZSBSX1BPUlRfUEFfRElSX19kaXI1X19pbnB1dCAwCisjZGVmaW5lIFJfUE9SVF9QQV9ESVJfX2RpcjVfX291dHB1dCAxCisjZGVmaW5lIFJfUE9SVF9QQV9ESVJfX2RpcjRfX0JJVE5SIDQKKyNkZWZpbmUgUl9QT1JUX1BBX0RJUl9fZGlyNF9fV0lEVEggMQorI2RlZmluZSBSX1BPUlRfUEFfRElSX19kaXI0X19pbnB1dCAwCisjZGVmaW5lIFJfUE9SVF9QQV9ESVJfX2RpcjRfX291dHB1dCAxCisjZGVmaW5lIFJfUE9SVF9QQV9ESVJfX2RpcjNfX0JJVE5SIDMKKyNkZWZpbmUgUl9QT1JUX1BBX0RJUl9fZGlyM19fV0lEVEggMQorI2RlZmluZSBSX1BPUlRfUEFfRElSX19kaXIzX19pbnB1dCAwCisjZGVmaW5lIFJfUE9SVF9QQV9ESVJfX2RpcjNfX291dHB1dCAxCisjZGVmaW5lIFJfUE9SVF9QQV9ESVJfX2RpcjJfX0JJVE5SIDIKKyNkZWZpbmUgUl9QT1JUX1BBX0RJUl9fZGlyMl9fV0lEVEggMQorI2RlZmluZSBSX1BPUlRfUEFfRElSX19kaXIyX19pbnB1dCAwCisjZGVmaW5lIFJfUE9SVF9QQV9ESVJfX2RpcjJfX291dHB1dCAxCisjZGVmaW5lIFJfUE9SVF9QQV9ESVJfX2RpcjFfX0JJVE5SIDEKKyNkZWZpbmUgUl9QT1JUX1BBX0RJUl9fZGlyMV9fV0lEVEggMQorI2RlZmluZSBSX1BPUlRfUEFfRElSX19kaXIxX19pbnB1dCAwCisjZGVmaW5lIFJfUE9SVF9QQV9ESVJfX2RpcjFfX291dHB1dCAxCisjZGVmaW5lIFJfUE9SVF9QQV9ESVJfX2RpcjBfX0JJVE5SIDAKKyNkZWZpbmUgUl9QT1JUX1BBX0RJUl9fZGlyMF9fV0lEVEggMQorI2RlZmluZSBSX1BPUlRfUEFfRElSX19kaXIwX19pbnB1dCAwCisjZGVmaW5lIFJfUE9SVF9QQV9ESVJfX2RpcjBfX291dHB1dCAxCisKKyNkZWZpbmUgUl9QT1JUX1BBX1JFQUQgKElPX1RZUEVDQVNUX1JPX1VEV09SRCAweGIwMDAwMDMwKQorI2RlZmluZSBSX1BPUlRfUEFfUkVBRF9fZGF0YV9pbl9fQklUTlIgMAorI2RlZmluZSBSX1BPUlRfUEFfUkVBRF9fZGF0YV9pbl9fV0lEVEggOAorCisjZGVmaW5lIFJfUE9SVF9QQl9TRVQgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMDM4KQorI2RlZmluZSBSX1BPUlRfUEJfU0VUX19zeW5jc2VyM19fQklUTlIgMjkKKyNkZWZpbmUgUl9QT1JUX1BCX1NFVF9fc3luY3NlcjNfX1dJRFRIIDEKKyNkZWZpbmUgUl9QT1JUX1BCX1NFVF9fc3luY3NlcjNfX3BvcnRfY3MgMAorI2RlZmluZSBSX1BPUlRfUEJfU0VUX19zeW5jc2VyM19fc3MzZXh0cmEgMQorI2RlZmluZSBSX1BPUlRfUEJfU0VUX19zeW5jc2VyMV9fQklUTlIgMjgKKyNkZWZpbmUgUl9QT1JUX1BCX1NFVF9fc3luY3NlcjFfX1dJRFRIIDEKKyNkZWZpbmUgUl9QT1JUX1BCX1NFVF9fc3luY3NlcjFfX3BvcnRfY3MgMAorI2RlZmluZSBSX1BPUlRfUEJfU0VUX19zeW5jc2VyMV9fc3MxZXh0cmEgMQorI2RlZmluZSBSX1BPUlRfUEJfU0VUX19pMmNfZW5fX0JJVE5SIDI3CisjZGVmaW5lIFJfUE9SVF9QQl9TRVRfX2kyY19lbl9fV0lEVEggMQorI2RlZmluZSBSX1BPUlRfUEJfU0VUX19pMmNfZW5fX29mZiAwCisjZGVmaW5lIFJfUE9SVF9QQl9TRVRfX2kyY19lbl9fb24gMQorI2RlZmluZSBSX1BPUlRfUEJfU0VUX19pMmNfZF9fQklUTlIgMjYKKyNkZWZpbmUgUl9QT1JUX1BCX1NFVF9faTJjX2RfX1dJRFRIIDEKKyNkZWZpbmUgUl9QT1JUX1BCX1NFVF9faTJjX2Nsa19fQklUTlIgMjUKKyNkZWZpbmUgUl9QT1JUX1BCX1NFVF9faTJjX2Nsa19fV0lEVEggMQorI2RlZmluZSBSX1BPUlRfUEJfU0VUX19pMmNfb2VfX19CSVROUiAyNAorI2RlZmluZSBSX1BPUlRfUEJfU0VUX19pMmNfb2VfX19XSURUSCAxCisjZGVmaW5lIFJfUE9SVF9QQl9TRVRfX2kyY19vZV9fX2VuYWJsZSAwCisjZGVmaW5lIFJfUE9SVF9QQl9TRVRfX2kyY19vZV9fX2Rpc2FibGUgMQorI2RlZmluZSBSX1BPUlRfUEJfU0VUX19jczdfX0JJVE5SIDIzCisjZGVmaW5lIFJfUE9SVF9QQl9TRVRfX2NzN19fV0lEVEggMQorI2RlZmluZSBSX1BPUlRfUEJfU0VUX19jczdfX3BvcnQgMAorI2RlZmluZSBSX1BPUlRfUEJfU0VUX19jczdfX2NzIDEKKyNkZWZpbmUgUl9QT1JUX1BCX1NFVF9fY3M2X19CSVROUiAyMgorI2RlZmluZSBSX1BPUlRfUEJfU0VUX19jczZfX1dJRFRIIDEKKyNkZWZpbmUgUl9QT1JUX1BCX1NFVF9fY3M2X19wb3J0IDAKKyNkZWZpbmUgUl9QT1JUX1BCX1NFVF9fY3M2X19jcyAxCisjZGVmaW5lIFJfUE9SVF9QQl9TRVRfX2NzNV9fQklUTlIgMjEKKyNkZWZpbmUgUl9QT1JUX1BCX1NFVF9fY3M1X19XSURUSCAxCisjZGVmaW5lIFJfUE9SVF9QQl9TRVRfX2NzNV9fcG9ydCAwCisjZGVmaW5lIFJfUE9SVF9QQl9TRVRfX2NzNV9fY3MgMQorI2RlZmluZSBSX1BPUlRfUEJfU0VUX19jczRfX0JJVE5SIDIwCisjZGVmaW5lIFJfUE9SVF9QQl9TRVRfX2NzNF9fV0lEVEggMQorI2RlZmluZSBSX1BPUlRfUEJfU0VUX19jczRfX3BvcnQgMAorI2RlZmluZSBSX1BPUlRfUEJfU0VUX19jczRfX2NzIDEKKyNkZWZpbmUgUl9QT1JUX1BCX1NFVF9fY3MzX19CSVROUiAxOQorI2RlZmluZSBSX1BPUlRfUEJfU0VUX19jczNfX1dJRFRIIDEKKyNkZWZpbmUgUl9QT1JUX1BCX1NFVF9fY3MzX19wb3J0IDAKKyNkZWZpbmUgUl9QT1JUX1BCX1NFVF9fY3MzX19jcyAxCisjZGVmaW5lIFJfUE9SVF9QQl9TRVRfX2NzMl9fQklUTlIgMTgKKyNkZWZpbmUgUl9QT1JUX1BCX1NFVF9fY3MyX19XSURUSCAxCisjZGVmaW5lIFJfUE9SVF9QQl9TRVRfX2NzMl9fcG9ydCAwCisjZGVmaW5lIFJfUE9SVF9QQl9TRVRfX2NzMl9fY3MgMQorI2RlZmluZSBSX1BPUlRfUEJfU0VUX19zY3NpMV9fQklUTlIgMTcKKyNkZWZpbmUgUl9QT1JUX1BCX1NFVF9fc2NzaTFfX1dJRFRIIDEKKyNkZWZpbmUgUl9QT1JUX1BCX1NFVF9fc2NzaTFfX3BvcnRfY3MgMAorI2RlZmluZSBSX1BPUlRfUEJfU0VUX19zY3NpMV9fZW5waCAxCisjZGVmaW5lIFJfUE9SVF9QQl9TRVRfX3Njc2kwX19CSVROUiAxNgorI2RlZmluZSBSX1BPUlRfUEJfU0VUX19zY3NpMF9fV0lEVEggMQorI2RlZmluZSBSX1BPUlRfUEJfU0VUX19zY3NpMF9fcG9ydF9jcyAwCisjZGVmaW5lIFJfUE9SVF9QQl9TRVRfX3Njc2kwX19lbnBoIDEKKyNkZWZpbmUgUl9QT1JUX1BCX1NFVF9fZGlyN19fQklUTlIgMTUKKyNkZWZpbmUgUl9QT1JUX1BCX1NFVF9fZGlyN19fV0lEVEggMQorI2RlZmluZSBSX1BPUlRfUEJfU0VUX19kaXI3X19pbnB1dCAwCisjZGVmaW5lIFJfUE9SVF9QQl9TRVRfX2RpcjdfX291dHB1dCAxCisjZGVmaW5lIFJfUE9SVF9QQl9TRVRfX2RpcjZfX0JJVE5SIDE0CisjZGVmaW5lIFJfUE9SVF9QQl9TRVRfX2RpcjZfX1dJRFRIIDEKKyNkZWZpbmUgUl9QT1JUX1BCX1NFVF9fZGlyNl9faW5wdXQgMAorI2RlZmluZSBSX1BPUlRfUEJfU0VUX19kaXI2X19vdXRwdXQgMQorI2RlZmluZSBSX1BPUlRfUEJfU0VUX19kaXI1X19CSVROUiAxMworI2RlZmluZSBSX1BPUlRfUEJfU0VUX19kaXI1X19XSURUSCAxCisjZGVmaW5lIFJfUE9SVF9QQl9TRVRfX2RpcjVfX2lucHV0IDAKKyNkZWZpbmUgUl9QT1JUX1BCX1NFVF9fZGlyNV9fb3V0cHV0IDEKKyNkZWZpbmUgUl9QT1JUX1BCX1NFVF9fZGlyNF9fQklUTlIgMTIKKyNkZWZpbmUgUl9QT1JUX1BCX1NFVF9fZGlyNF9fV0lEVEggMQorI2RlZmluZSBSX1BPUlRfUEJfU0VUX19kaXI0X19pbnB1dCAwCisjZGVmaW5lIFJfUE9SVF9QQl9TRVRfX2RpcjRfX291dHB1dCAxCisjZGVmaW5lIFJfUE9SVF9QQl9TRVRfX2RpcjNfX0JJVE5SIDExCisjZGVmaW5lIFJfUE9SVF9QQl9TRVRfX2RpcjNfX1dJRFRIIDEKKyNkZWZpbmUgUl9QT1JUX1BCX1NFVF9fZGlyM19faW5wdXQgMAorI2RlZmluZSBSX1BPUlRfUEJfU0VUX19kaXIzX19vdXRwdXQgMQorI2RlZmluZSBSX1BPUlRfUEJfU0VUX19kaXIyX19CSVROUiAxMAorI2RlZmluZSBSX1BPUlRfUEJfU0VUX19kaXIyX19XSURUSCAxCisjZGVmaW5lIFJfUE9SVF9QQl9TRVRfX2RpcjJfX2lucHV0IDAKKyNkZWZpbmUgUl9QT1JUX1BCX1NFVF9fZGlyMl9fb3V0cHV0IDEKKyNkZWZpbmUgUl9QT1JUX1BCX1NFVF9fZGlyMV9fQklUTlIgOQorI2RlZmluZSBSX1BPUlRfUEJfU0VUX19kaXIxX19XSURUSCAxCisjZGVmaW5lIFJfUE9SVF9QQl9TRVRfX2RpcjFfX2lucHV0IDAKKyNkZWZpbmUgUl9QT1JUX1BCX1NFVF9fZGlyMV9fb3V0cHV0IDEKKyNkZWZpbmUgUl9QT1JUX1BCX1NFVF9fZGlyMF9fQklUTlIgOAorI2RlZmluZSBSX1BPUlRfUEJfU0VUX19kaXIwX19XSURUSCAxCisjZGVmaW5lIFJfUE9SVF9QQl9TRVRfX2RpcjBfX2lucHV0IDAKKyNkZWZpbmUgUl9QT1JUX1BCX1NFVF9fZGlyMF9fb3V0cHV0IDEKKyNkZWZpbmUgUl9QT1JUX1BCX1NFVF9fZGF0YV9vdXRfX0JJVE5SIDAKKyNkZWZpbmUgUl9QT1JUX1BCX1NFVF9fZGF0YV9vdXRfX1dJRFRIIDgKKworI2RlZmluZSBSX1BPUlRfUEJfREFUQSAoSU9fVFlQRUNBU1RfQllURSAweGIwMDAwMDM4KQorI2RlZmluZSBSX1BPUlRfUEJfREFUQV9fZGF0YV9vdXRfX0JJVE5SIDAKKyNkZWZpbmUgUl9QT1JUX1BCX0RBVEFfX2RhdGFfb3V0X19XSURUSCA4CisKKyNkZWZpbmUgUl9QT1JUX1BCX0RJUiAoSU9fVFlQRUNBU1RfQllURSAweGIwMDAwMDM5KQorI2RlZmluZSBSX1BPUlRfUEJfRElSX19kaXI3X19CSVROUiA3CisjZGVmaW5lIFJfUE9SVF9QQl9ESVJfX2RpcjdfX1dJRFRIIDEKKyNkZWZpbmUgUl9QT1JUX1BCX0RJUl9fZGlyN19faW5wdXQgMAorI2RlZmluZSBSX1BPUlRfUEJfRElSX19kaXI3X19vdXRwdXQgMQorI2RlZmluZSBSX1BPUlRfUEJfRElSX19kaXI2X19CSVROUiA2CisjZGVmaW5lIFJfUE9SVF9QQl9ESVJfX2RpcjZfX1dJRFRIIDEKKyNkZWZpbmUgUl9QT1JUX1BCX0RJUl9fZGlyNl9faW5wdXQgMAorI2RlZmluZSBSX1BPUlRfUEJfRElSX19kaXI2X19vdXRwdXQgMQorI2RlZmluZSBSX1BPUlRfUEJfRElSX19kaXI1X19CSVROUiA1CisjZGVmaW5lIFJfUE9SVF9QQl9ESVJfX2RpcjVfX1dJRFRIIDEKKyNkZWZpbmUgUl9QT1JUX1BCX0RJUl9fZGlyNV9faW5wdXQgMAorI2RlZmluZSBSX1BPUlRfUEJfRElSX19kaXI1X19vdXRwdXQgMQorI2RlZmluZSBSX1BPUlRfUEJfRElSX19kaXI0X19CSVROUiA0CisjZGVmaW5lIFJfUE9SVF9QQl9ESVJfX2RpcjRfX1dJRFRIIDEKKyNkZWZpbmUgUl9QT1JUX1BCX0RJUl9fZGlyNF9faW5wdXQgMAorI2RlZmluZSBSX1BPUlRfUEJfRElSX19kaXI0X19vdXRwdXQgMQorI2RlZmluZSBSX1BPUlRfUEJfRElSX19kaXIzX19CSVROUiAzCisjZGVmaW5lIFJfUE9SVF9QQl9ESVJfX2RpcjNfX1dJRFRIIDEKKyNkZWZpbmUgUl9QT1JUX1BCX0RJUl9fZGlyM19faW5wdXQgMAorI2RlZmluZSBSX1BPUlRfUEJfRElSX19kaXIzX19vdXRwdXQgMQorI2RlZmluZSBSX1BPUlRfUEJfRElSX19kaXIyX19CSVROUiAyCisjZGVmaW5lIFJfUE9SVF9QQl9ESVJfX2RpcjJfX1dJRFRIIDEKKyNkZWZpbmUgUl9QT1JUX1BCX0RJUl9fZGlyMl9faW5wdXQgMAorI2RlZmluZSBSX1BPUlRfUEJfRElSX19kaXIyX19vdXRwdXQgMQorI2RlZmluZSBSX1BPUlRfUEJfRElSX19kaXIxX19CSVROUiAxCisjZGVmaW5lIFJfUE9SVF9QQl9ESVJfX2RpcjFfX1dJRFRIIDEKKyNkZWZpbmUgUl9QT1JUX1BCX0RJUl9fZGlyMV9faW5wdXQgMAorI2RlZmluZSBSX1BPUlRfUEJfRElSX19kaXIxX19vdXRwdXQgMQorI2RlZmluZSBSX1BPUlRfUEJfRElSX19kaXIwX19CSVROUiAwCisjZGVmaW5lIFJfUE9SVF9QQl9ESVJfX2RpcjBfX1dJRFRIIDEKKyNkZWZpbmUgUl9QT1JUX1BCX0RJUl9fZGlyMF9faW5wdXQgMAorI2RlZmluZSBSX1BPUlRfUEJfRElSX19kaXIwX19vdXRwdXQgMQorCisjZGVmaW5lIFJfUE9SVF9QQl9DT05GSUcgKElPX1RZUEVDQVNUX0JZVEUgMHhiMDAwMDAzYSkKKyNkZWZpbmUgUl9QT1JUX1BCX0NPTkZJR19fY3M3X19CSVROUiA3CisjZGVmaW5lIFJfUE9SVF9QQl9DT05GSUdfX2NzN19fV0lEVEggMQorI2RlZmluZSBSX1BPUlRfUEJfQ09ORklHX19jczdfX3BvcnQgMAorI2RlZmluZSBSX1BPUlRfUEJfQ09ORklHX19jczdfX2NzIDEKKyNkZWZpbmUgUl9QT1JUX1BCX0NPTkZJR19fY3M2X19CSVROUiA2CisjZGVmaW5lIFJfUE9SVF9QQl9DT05GSUdfX2NzNl9fV0lEVEggMQorI2RlZmluZSBSX1BPUlRfUEJfQ09ORklHX19jczZfX3BvcnQgMAorI2RlZmluZSBSX1BPUlRfUEJfQ09ORklHX19jczZfX2NzIDEKKyNkZWZpbmUgUl9QT1JUX1BCX0NPTkZJR19fY3M1X19CSVROUiA1CisjZGVmaW5lIFJfUE9SVF9QQl9DT05GSUdfX2NzNV9fV0lEVEggMQorI2RlZmluZSBSX1BPUlRfUEJfQ09ORklHX19jczVfX3BvcnQgMAorI2RlZmluZSBSX1BPUlRfUEJfQ09ORklHX19jczVfX2NzIDEKKyNkZWZpbmUgUl9QT1JUX1BCX0NPTkZJR19fY3M0X19CSVROUiA0CisjZGVmaW5lIFJfUE9SVF9QQl9DT05GSUdfX2NzNF9fV0lEVEggMQorI2RlZmluZSBSX1BPUlRfUEJfQ09ORklHX19jczRfX3BvcnQgMAorI2RlZmluZSBSX1BPUlRfUEJfQ09ORklHX19jczRfX2NzIDEKKyNkZWZpbmUgUl9QT1JUX1BCX0NPTkZJR19fY3MzX19CSVROUiAzCisjZGVmaW5lIFJfUE9SVF9QQl9DT05GSUdfX2NzM19fV0lEVEggMQorI2RlZmluZSBSX1BPUlRfUEJfQ09ORklHX19jczNfX3BvcnQgMAorI2RlZmluZSBSX1BPUlRfUEJfQ09ORklHX19jczNfX2NzIDEKKyNkZWZpbmUgUl9QT1JUX1BCX0NPTkZJR19fY3MyX19CSVROUiAyCisjZGVmaW5lIFJfUE9SVF9QQl9DT05GSUdfX2NzMl9fV0lEVEggMQorI2RlZmluZSBSX1BPUlRfUEJfQ09ORklHX19jczJfX3BvcnQgMAorI2RlZmluZSBSX1BPUlRfUEJfQ09ORklHX19jczJfX2NzIDEKKyNkZWZpbmUgUl9QT1JUX1BCX0NPTkZJR19fc2NzaTFfX0JJVE5SIDEKKyNkZWZpbmUgUl9QT1JUX1BCX0NPTkZJR19fc2NzaTFfX1dJRFRIIDEKKyNkZWZpbmUgUl9QT1JUX1BCX0NPTkZJR19fc2NzaTFfX3BvcnRfY3MgMAorI2RlZmluZSBSX1BPUlRfUEJfQ09ORklHX19zY3NpMV9fZW5waCAxCisjZGVmaW5lIFJfUE9SVF9QQl9DT05GSUdfX3Njc2kwX19CSVROUiAwCisjZGVmaW5lIFJfUE9SVF9QQl9DT05GSUdfX3Njc2kwX19XSURUSCAxCisjZGVmaW5lIFJfUE9SVF9QQl9DT05GSUdfX3Njc2kwX19wb3J0X2NzIDAKKyNkZWZpbmUgUl9QT1JUX1BCX0NPTkZJR19fc2NzaTBfX2VucGggMQorCisjZGVmaW5lIFJfUE9SVF9QQl9JMkMgKElPX1RZUEVDQVNUX0JZVEUgMHhiMDAwMDAzYikKKyNkZWZpbmUgUl9QT1JUX1BCX0kyQ19fc3luY3NlcjNfX0JJVE5SIDUKKyNkZWZpbmUgUl9QT1JUX1BCX0kyQ19fc3luY3NlcjNfX1dJRFRIIDEKKyNkZWZpbmUgUl9QT1JUX1BCX0kyQ19fc3luY3NlcjNfX3BvcnRfY3MgMAorI2RlZmluZSBSX1BPUlRfUEJfSTJDX19zeW5jc2VyM19fc3MzZXh0cmEgMQorI2RlZmluZSBSX1BPUlRfUEJfSTJDX19zeW5jc2VyMV9fQklUTlIgNAorI2RlZmluZSBSX1BPUlRfUEJfSTJDX19zeW5jc2VyMV9fV0lEVEggMQorI2RlZmluZSBSX1BPUlRfUEJfSTJDX19zeW5jc2VyMV9fcG9ydF9jcyAwCisjZGVmaW5lIFJfUE9SVF9QQl9JMkNfX3N5bmNzZXIxX19zczFleHRyYSAxCisjZGVmaW5lIFJfUE9SVF9QQl9JMkNfX2kyY19lbl9fQklUTlIgMworI2RlZmluZSBSX1BPUlRfUEJfSTJDX19pMmNfZW5fX1dJRFRIIDEKKyNkZWZpbmUgUl9QT1JUX1BCX0kyQ19faTJjX2VuX19vZmYgMAorI2RlZmluZSBSX1BPUlRfUEJfSTJDX19pMmNfZW5fX29uIDEKKyNkZWZpbmUgUl9QT1JUX1BCX0kyQ19faTJjX2RfX0JJVE5SIDIKKyNkZWZpbmUgUl9QT1JUX1BCX0kyQ19faTJjX2RfX1dJRFRIIDEKKyNkZWZpbmUgUl9QT1JUX1BCX0kyQ19faTJjX2Nsa19fQklUTlIgMQorI2RlZmluZSBSX1BPUlRfUEJfSTJDX19pMmNfY2xrX19XSURUSCAxCisjZGVmaW5lIFJfUE9SVF9QQl9JMkNfX2kyY19vZV9fX0JJVE5SIDAKKyNkZWZpbmUgUl9QT1JUX1BCX0kyQ19faTJjX29lX19fV0lEVEggMQorI2RlZmluZSBSX1BPUlRfUEJfSTJDX19pMmNfb2VfX19lbmFibGUgMAorI2RlZmluZSBSX1BPUlRfUEJfSTJDX19pMmNfb2VfX19kaXNhYmxlIDEKKworI2RlZmluZSBSX1BPUlRfUEJfUkVBRCAoSU9fVFlQRUNBU1RfUk9fVURXT1JEIDB4YjAwMDAwMzgpCisjZGVmaW5lIFJfUE9SVF9QQl9SRUFEX19kYXRhX2luX19CSVROUiAwCisjZGVmaW5lIFJfUE9SVF9QQl9SRUFEX19kYXRhX2luX19XSURUSCA4CisKKy8qCishKiBTZXJpYWwgcG9ydCByZWdpc3RlcnMKKyEqLworCisjZGVmaW5lIFJfU0VSSUFMMF9DVFJMIChJT19UWVBFQ0FTVF9VRFdPUkQgMHhiMDAwMDA2MCkKKyNkZWZpbmUgUl9TRVJJQUwwX0NUUkxfX3RyX2JhdWRfX0JJVE5SIDI4CisjZGVmaW5lIFJfU0VSSUFMMF9DVFJMX190cl9iYXVkX19XSURUSCA0CisjZGVmaW5lIFJfU0VSSUFMMF9DVFJMX190cl9iYXVkX19jMzAwSHogMAorI2RlZmluZSBSX1NFUklBTDBfQ1RSTF9fdHJfYmF1ZF9fYzYwMEh6IDEKKyNkZWZpbmUgUl9TRVJJQUwwX0NUUkxfX3RyX2JhdWRfX2MxMjAwSHogMgorI2RlZmluZSBSX1NFUklBTDBfQ1RSTF9fdHJfYmF1ZF9fYzI0MDBIeiAzCisjZGVmaW5lIFJfU0VSSUFMMF9DVFJMX190cl9iYXVkX19jNDgwMEh6IDQKKyNkZWZpbmUgUl9TRVJJQUwwX0NUUkxfX3RyX2JhdWRfX2M5NjAwSHogNQorI2RlZmluZSBSX1NFUklBTDBfQ1RSTF9fdHJfYmF1ZF9fYzE5azJIeiA2CisjZGVmaW5lIFJfU0VSSUFMMF9DVFJMX190cl9iYXVkX19jMzhrNEh6IDcKKyNkZWZpbmUgUl9TRVJJQUwwX0NUUkxfX3RyX2JhdWRfX2M1N2s2SHogOAorI2RlZmluZSBSX1NFUklBTDBfQ1RSTF9fdHJfYmF1ZF9fYzExNWsySHogOQorI2RlZmluZSBSX1NFUklBTDBfQ1RSTF9fdHJfYmF1ZF9fYzIzMGs0SHogMTAKKyNkZWZpbmUgUl9TRVJJQUwwX0NUUkxfX3RyX2JhdWRfX2M0NjBrOEh6IDExCisjZGVmaW5lIFJfU0VSSUFMMF9DVFJMX190cl9iYXVkX19jOTIxazZIeiAxMgorI2RlZmluZSBSX1NFUklBTDBfQ1RSTF9fdHJfYmF1ZF9fYzE4NDNrMkh6IDEzCisjZGVmaW5lIFJfU0VSSUFMMF9DVFJMX190cl9iYXVkX19jNjI1MGtIeiAxNAorI2RlZmluZSBSX1NFUklBTDBfQ1RSTF9fdHJfYmF1ZF9fcmVzZXJ2ZWQgMTUKKyNkZWZpbmUgUl9TRVJJQUwwX0NUUkxfX3JlY19iYXVkX19CSVROUiAyNAorI2RlZmluZSBSX1NFUklBTDBfQ1RSTF9fcmVjX2JhdWRfX1dJRFRIIDQKKyNkZWZpbmUgUl9TRVJJQUwwX0NUUkxfX3JlY19iYXVkX19jMzAwSHogMAorI2RlZmluZSBSX1NFUklBTDBfQ1RSTF9fcmVjX2JhdWRfX2M2MDBIeiAxCisjZGVmaW5lIFJfU0VSSUFMMF9DVFJMX19yZWNfYmF1ZF9fYzEyMDBIeiAyCisjZGVmaW5lIFJfU0VSSUFMMF9DVFJMX19yZWNfYmF1ZF9fYzI0MDBIeiAzCisjZGVmaW5lIFJfU0VSSUFMMF9DVFJMX19yZWNfYmF1ZF9fYzQ4MDBIeiA0CisjZGVmaW5lIFJfU0VSSUFMMF9DVFJMX19yZWNfYmF1ZF9fYzk2MDBIeiA1CisjZGVmaW5lIFJfU0VSSUFMMF9DVFJMX19yZWNfYmF1ZF9fYzE5azJIeiA2CisjZGVmaW5lIFJfU0VSSUFMMF9DVFJMX19yZWNfYmF1ZF9fYzM4azRIeiA3CisjZGVmaW5lIFJfU0VSSUFMMF9DVFJMX19yZWNfYmF1ZF9fYzU3azZIeiA4CisjZGVmaW5lIFJfU0VSSUFMMF9DVFJMX19yZWNfYmF1ZF9fYzExNWsySHogOQorI2RlZmluZSBSX1NFUklBTDBfQ1RSTF9fcmVjX2JhdWRfX2MyMzBrNEh6IDEwCisjZGVmaW5lIFJfU0VSSUFMMF9DVFJMX19yZWNfYmF1ZF9fYzQ2MGs4SHogMTEKKyNkZWZpbmUgUl9TRVJJQUwwX0NUUkxfX3JlY19iYXVkX19jOTIxazZIeiAxMgorI2RlZmluZSBSX1NFUklBTDBfQ1RSTF9fcmVjX2JhdWRfX2MxODQzazJIeiAxMworI2RlZmluZSBSX1NFUklBTDBfQ1RSTF9fcmVjX2JhdWRfX2M2MjUwa0h6IDE0CisjZGVmaW5lIFJfU0VSSUFMMF9DVFJMX19yZWNfYmF1ZF9fcmVzZXJ2ZWQgMTUKKyNkZWZpbmUgUl9TRVJJQUwwX0NUUkxfX2RtYV9lcnJfX0JJVE5SIDIzCisjZGVmaW5lIFJfU0VSSUFMMF9DVFJMX19kbWFfZXJyX19XSURUSCAxCisjZGVmaW5lIFJfU0VSSUFMMF9DVFJMX19kbWFfZXJyX19zdG9wIDAKKyNkZWZpbmUgUl9TRVJJQUwwX0NUUkxfX2RtYV9lcnJfX2lnbm9yZSAxCisjZGVmaW5lIFJfU0VSSUFMMF9DVFJMX19yZWNfZW5hYmxlX19CSVROUiAyMgorI2RlZmluZSBSX1NFUklBTDBfQ1RSTF9fcmVjX2VuYWJsZV9fV0lEVEggMQorI2RlZmluZSBSX1NFUklBTDBfQ1RSTF9fcmVjX2VuYWJsZV9fZGlzYWJsZSAwCisjZGVmaW5lIFJfU0VSSUFMMF9DVFJMX19yZWNfZW5hYmxlX19lbmFibGUgMQorI2RlZmluZSBSX1NFUklBTDBfQ1RSTF9fcnRzX19fQklUTlIgMjEKKyNkZWZpbmUgUl9TRVJJQUwwX0NUUkxfX3J0c19fX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwwX0NUUkxfX3J0c19fX2FjdGl2ZSAwCisjZGVmaW5lIFJfU0VSSUFMMF9DVFJMX19ydHNfX19pbmFjdGl2ZSAxCisjZGVmaW5lIFJfU0VSSUFMMF9DVFJMX19zYW1wbGluZ19fQklUTlIgMjAKKyNkZWZpbmUgUl9TRVJJQUwwX0NUUkxfX3NhbXBsaW5nX19XSURUSCAxCisjZGVmaW5lIFJfU0VSSUFMMF9DVFJMX19zYW1wbGluZ19fbWlkZGxlIDAKKyNkZWZpbmUgUl9TRVJJQUwwX0NUUkxfX3NhbXBsaW5nX19tYWpvcml0eSAxCisjZGVmaW5lIFJfU0VSSUFMMF9DVFJMX19yZWNfc3RpY2tfcGFyX19CSVROUiAxOQorI2RlZmluZSBSX1NFUklBTDBfQ1RSTF9fcmVjX3N0aWNrX3Bhcl9fV0lEVEggMQorI2RlZmluZSBSX1NFUklBTDBfQ1RSTF9fcmVjX3N0aWNrX3Bhcl9fbm9ybWFsIDAKKyNkZWZpbmUgUl9TRVJJQUwwX0NUUkxfX3JlY19zdGlja19wYXJfX3N0aWNrIDEKKyNkZWZpbmUgUl9TRVJJQUwwX0NUUkxfX3JlY19wYXJfX0JJVE5SIDE4CisjZGVmaW5lIFJfU0VSSUFMMF9DVFJMX19yZWNfcGFyX19XSURUSCAxCisjZGVmaW5lIFJfU0VSSUFMMF9DVFJMX19yZWNfcGFyX19ldmVuIDAKKyNkZWZpbmUgUl9TRVJJQUwwX0NUUkxfX3JlY19wYXJfX29kZCAxCisjZGVmaW5lIFJfU0VSSUFMMF9DVFJMX19yZWNfcGFyX2VuX19CSVROUiAxNworI2RlZmluZSBSX1NFUklBTDBfQ1RSTF9fcmVjX3Bhcl9lbl9fV0lEVEggMQorI2RlZmluZSBSX1NFUklBTDBfQ1RSTF9fcmVjX3Bhcl9lbl9fZGlzYWJsZSAwCisjZGVmaW5lIFJfU0VSSUFMMF9DVFJMX19yZWNfcGFyX2VuX19lbmFibGUgMQorI2RlZmluZSBSX1NFUklBTDBfQ1RSTF9fcmVjX2JpdG5yX19CSVROUiAxNgorI2RlZmluZSBSX1NFUklBTDBfQ1RSTF9fcmVjX2JpdG5yX19XSURUSCAxCisjZGVmaW5lIFJfU0VSSUFMMF9DVFJMX19yZWNfYml0bnJfX3JlY184Yml0IDAKKyNkZWZpbmUgUl9TRVJJQUwwX0NUUkxfX3JlY19iaXRucl9fcmVjXzdiaXQgMQorI2RlZmluZSBSX1NFUklBTDBfQ1RSTF9fdHhkX19CSVROUiAxNQorI2RlZmluZSBSX1NFUklBTDBfQ1RSTF9fdHhkX19XSURUSCAxCisjZGVmaW5lIFJfU0VSSUFMMF9DVFJMX190cl9lbmFibGVfX0JJVE5SIDE0CisjZGVmaW5lIFJfU0VSSUFMMF9DVFJMX190cl9lbmFibGVfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwwX0NUUkxfX3RyX2VuYWJsZV9fZGlzYWJsZSAwCisjZGVmaW5lIFJfU0VSSUFMMF9DVFJMX190cl9lbmFibGVfX2VuYWJsZSAxCisjZGVmaW5lIFJfU0VSSUFMMF9DVFJMX19hdXRvX2N0c19fQklUTlIgMTMKKyNkZWZpbmUgUl9TRVJJQUwwX0NUUkxfX2F1dG9fY3RzX19XSURUSCAxCisjZGVmaW5lIFJfU0VSSUFMMF9DVFJMX19hdXRvX2N0c19fZGlzYWJsZWQgMAorI2RlZmluZSBSX1NFUklBTDBfQ1RSTF9fYXV0b19jdHNfX2FjdGl2ZSAxCisjZGVmaW5lIFJfU0VSSUFMMF9DVFJMX19zdG9wX2JpdHNfX0JJVE5SIDEyCisjZGVmaW5lIFJfU0VSSUFMMF9DVFJMX19zdG9wX2JpdHNfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwwX0NUUkxfX3N0b3BfYml0c19fb25lX2JpdCAwCisjZGVmaW5lIFJfU0VSSUFMMF9DVFJMX19zdG9wX2JpdHNfX3R3b19iaXRzIDEKKyNkZWZpbmUgUl9TRVJJQUwwX0NUUkxfX3RyX3N0aWNrX3Bhcl9fQklUTlIgMTEKKyNkZWZpbmUgUl9TRVJJQUwwX0NUUkxfX3RyX3N0aWNrX3Bhcl9fV0lEVEggMQorI2RlZmluZSBSX1NFUklBTDBfQ1RSTF9fdHJfc3RpY2tfcGFyX19ub3JtYWwgMAorI2RlZmluZSBSX1NFUklBTDBfQ1RSTF9fdHJfc3RpY2tfcGFyX19zdGljayAxCisjZGVmaW5lIFJfU0VSSUFMMF9DVFJMX190cl9wYXJfX0JJVE5SIDEwCisjZGVmaW5lIFJfU0VSSUFMMF9DVFJMX190cl9wYXJfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwwX0NUUkxfX3RyX3Bhcl9fZXZlbiAwCisjZGVmaW5lIFJfU0VSSUFMMF9DVFJMX190cl9wYXJfX29kZCAxCisjZGVmaW5lIFJfU0VSSUFMMF9DVFJMX190cl9wYXJfZW5fX0JJVE5SIDkKKyNkZWZpbmUgUl9TRVJJQUwwX0NUUkxfX3RyX3Bhcl9lbl9fV0lEVEggMQorI2RlZmluZSBSX1NFUklBTDBfQ1RSTF9fdHJfcGFyX2VuX19kaXNhYmxlIDAKKyNkZWZpbmUgUl9TRVJJQUwwX0NUUkxfX3RyX3Bhcl9lbl9fZW5hYmxlIDEKKyNkZWZpbmUgUl9TRVJJQUwwX0NUUkxfX3RyX2JpdG5yX19CSVROUiA4CisjZGVmaW5lIFJfU0VSSUFMMF9DVFJMX190cl9iaXRucl9fV0lEVEggMQorI2RlZmluZSBSX1NFUklBTDBfQ1RSTF9fdHJfYml0bnJfX3RyXzhiaXQgMAorI2RlZmluZSBSX1NFUklBTDBfQ1RSTF9fdHJfYml0bnJfX3RyXzdiaXQgMQorI2RlZmluZSBSX1NFUklBTDBfQ1RSTF9fZGF0YV9vdXRfX0JJVE5SIDAKKyNkZWZpbmUgUl9TRVJJQUwwX0NUUkxfX2RhdGFfb3V0X19XSURUSCA4CisKKyNkZWZpbmUgUl9TRVJJQUwwX0JBVUQgKElPX1RZUEVDQVNUX0JZVEUgMHhiMDAwMDA2MykKKyNkZWZpbmUgUl9TRVJJQUwwX0JBVURfX3RyX2JhdWRfX0JJVE5SIDQKKyNkZWZpbmUgUl9TRVJJQUwwX0JBVURfX3RyX2JhdWRfX1dJRFRIIDQKKyNkZWZpbmUgUl9TRVJJQUwwX0JBVURfX3RyX2JhdWRfX2MzMDBIeiAwCisjZGVmaW5lIFJfU0VSSUFMMF9CQVVEX190cl9iYXVkX19jNjAwSHogMQorI2RlZmluZSBSX1NFUklBTDBfQkFVRF9fdHJfYmF1ZF9fYzEyMDBIeiAyCisjZGVmaW5lIFJfU0VSSUFMMF9CQVVEX190cl9iYXVkX19jMjQwMEh6IDMKKyNkZWZpbmUgUl9TRVJJQUwwX0JBVURfX3RyX2JhdWRfX2M0ODAwSHogNAorI2RlZmluZSBSX1NFUklBTDBfQkFVRF9fdHJfYmF1ZF9fYzk2MDBIeiA1CisjZGVmaW5lIFJfU0VSSUFMMF9CQVVEX190cl9iYXVkX19jMTlrMkh6IDYKKyNkZWZpbmUgUl9TRVJJQUwwX0JBVURfX3RyX2JhdWRfX2MzOGs0SHogNworI2RlZmluZSBSX1NFUklBTDBfQkFVRF9fdHJfYmF1ZF9fYzU3azZIeiA4CisjZGVmaW5lIFJfU0VSSUFMMF9CQVVEX190cl9iYXVkX19jMTE1azJIeiA5CisjZGVmaW5lIFJfU0VSSUFMMF9CQVVEX190cl9iYXVkX19jMjMwazRIeiAxMAorI2RlZmluZSBSX1NFUklBTDBfQkFVRF9fdHJfYmF1ZF9fYzQ2MGs4SHogMTEKKyNkZWZpbmUgUl9TRVJJQUwwX0JBVURfX3RyX2JhdWRfX2M5MjFrNkh6IDEyCisjZGVmaW5lIFJfU0VSSUFMMF9CQVVEX190cl9iYXVkX19jMTg0M2sySHogMTMKKyNkZWZpbmUgUl9TRVJJQUwwX0JBVURfX3RyX2JhdWRfX2M2MjUwa0h6IDE0CisjZGVmaW5lIFJfU0VSSUFMMF9CQVVEX190cl9iYXVkX19yZXNlcnZlZCAxNQorI2RlZmluZSBSX1NFUklBTDBfQkFVRF9fcmVjX2JhdWRfX0JJVE5SIDAKKyNkZWZpbmUgUl9TRVJJQUwwX0JBVURfX3JlY19iYXVkX19XSURUSCA0CisjZGVmaW5lIFJfU0VSSUFMMF9CQVVEX19yZWNfYmF1ZF9fYzMwMEh6IDAKKyNkZWZpbmUgUl9TRVJJQUwwX0JBVURfX3JlY19iYXVkX19jNjAwSHogMQorI2RlZmluZSBSX1NFUklBTDBfQkFVRF9fcmVjX2JhdWRfX2MxMjAwSHogMgorI2RlZmluZSBSX1NFUklBTDBfQkFVRF9fcmVjX2JhdWRfX2MyNDAwSHogMworI2RlZmluZSBSX1NFUklBTDBfQkFVRF9fcmVjX2JhdWRfX2M0ODAwSHogNAorI2RlZmluZSBSX1NFUklBTDBfQkFVRF9fcmVjX2JhdWRfX2M5NjAwSHogNQorI2RlZmluZSBSX1NFUklBTDBfQkFVRF9fcmVjX2JhdWRfX2MxOWsySHogNgorI2RlZmluZSBSX1NFUklBTDBfQkFVRF9fcmVjX2JhdWRfX2MzOGs0SHogNworI2RlZmluZSBSX1NFUklBTDBfQkFVRF9fcmVjX2JhdWRfX2M1N2s2SHogOAorI2RlZmluZSBSX1NFUklBTDBfQkFVRF9fcmVjX2JhdWRfX2MxMTVrMkh6IDkKKyNkZWZpbmUgUl9TRVJJQUwwX0JBVURfX3JlY19iYXVkX19jMjMwazRIeiAxMAorI2RlZmluZSBSX1NFUklBTDBfQkFVRF9fcmVjX2JhdWRfX2M0NjBrOEh6IDExCisjZGVmaW5lIFJfU0VSSUFMMF9CQVVEX19yZWNfYmF1ZF9fYzkyMWs2SHogMTIKKyNkZWZpbmUgUl9TRVJJQUwwX0JBVURfX3JlY19iYXVkX19jMTg0M2sySHogMTMKKyNkZWZpbmUgUl9TRVJJQUwwX0JBVURfX3JlY19iYXVkX19jNjI1MGtIeiAxNAorI2RlZmluZSBSX1NFUklBTDBfQkFVRF9fcmVjX2JhdWRfX3Jlc2VydmVkIDE1CisKKyNkZWZpbmUgUl9TRVJJQUwwX1JFQ19DVFJMIChJT19UWVBFQ0FTVF9CWVRFIDB4YjAwMDAwNjIpCisjZGVmaW5lIFJfU0VSSUFMMF9SRUNfQ1RSTF9fZG1hX2Vycl9fQklUTlIgNworI2RlZmluZSBSX1NFUklBTDBfUkVDX0NUUkxfX2RtYV9lcnJfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwwX1JFQ19DVFJMX19kbWFfZXJyX19zdG9wIDAKKyNkZWZpbmUgUl9TRVJJQUwwX1JFQ19DVFJMX19kbWFfZXJyX19pZ25vcmUgMQorI2RlZmluZSBSX1NFUklBTDBfUkVDX0NUUkxfX3JlY19lbmFibGVfX0JJVE5SIDYKKyNkZWZpbmUgUl9TRVJJQUwwX1JFQ19DVFJMX19yZWNfZW5hYmxlX19XSURUSCAxCisjZGVmaW5lIFJfU0VSSUFMMF9SRUNfQ1RSTF9fcmVjX2VuYWJsZV9fZGlzYWJsZSAwCisjZGVmaW5lIFJfU0VSSUFMMF9SRUNfQ1RSTF9fcmVjX2VuYWJsZV9fZW5hYmxlIDEKKyNkZWZpbmUgUl9TRVJJQUwwX1JFQ19DVFJMX19ydHNfX19CSVROUiA1CisjZGVmaW5lIFJfU0VSSUFMMF9SRUNfQ1RSTF9fcnRzX19fV0lEVEggMQorI2RlZmluZSBSX1NFUklBTDBfUkVDX0NUUkxfX3J0c19fX2FjdGl2ZSAwCisjZGVmaW5lIFJfU0VSSUFMMF9SRUNfQ1RSTF9fcnRzX19faW5hY3RpdmUgMQorI2RlZmluZSBSX1NFUklBTDBfUkVDX0NUUkxfX3NhbXBsaW5nX19CSVROUiA0CisjZGVmaW5lIFJfU0VSSUFMMF9SRUNfQ1RSTF9fc2FtcGxpbmdfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwwX1JFQ19DVFJMX19zYW1wbGluZ19fbWlkZGxlIDAKKyNkZWZpbmUgUl9TRVJJQUwwX1JFQ19DVFJMX19zYW1wbGluZ19fbWFqb3JpdHkgMQorI2RlZmluZSBSX1NFUklBTDBfUkVDX0NUUkxfX3JlY19zdGlja19wYXJfX0JJVE5SIDMKKyNkZWZpbmUgUl9TRVJJQUwwX1JFQ19DVFJMX19yZWNfc3RpY2tfcGFyX19XSURUSCAxCisjZGVmaW5lIFJfU0VSSUFMMF9SRUNfQ1RSTF9fcmVjX3N0aWNrX3Bhcl9fbm9ybWFsIDAKKyNkZWZpbmUgUl9TRVJJQUwwX1JFQ19DVFJMX19yZWNfc3RpY2tfcGFyX19zdGljayAxCisjZGVmaW5lIFJfU0VSSUFMMF9SRUNfQ1RSTF9fcmVjX3Bhcl9fQklUTlIgMgorI2RlZmluZSBSX1NFUklBTDBfUkVDX0NUUkxfX3JlY19wYXJfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwwX1JFQ19DVFJMX19yZWNfcGFyX19ldmVuIDAKKyNkZWZpbmUgUl9TRVJJQUwwX1JFQ19DVFJMX19yZWNfcGFyX19vZGQgMQorI2RlZmluZSBSX1NFUklBTDBfUkVDX0NUUkxfX3JlY19wYXJfZW5fX0JJVE5SIDEKKyNkZWZpbmUgUl9TRVJJQUwwX1JFQ19DVFJMX19yZWNfcGFyX2VuX19XSURUSCAxCisjZGVmaW5lIFJfU0VSSUFMMF9SRUNfQ1RSTF9fcmVjX3Bhcl9lbl9fZGlzYWJsZSAwCisjZGVmaW5lIFJfU0VSSUFMMF9SRUNfQ1RSTF9fcmVjX3Bhcl9lbl9fZW5hYmxlIDEKKyNkZWZpbmUgUl9TRVJJQUwwX1JFQ19DVFJMX19yZWNfYml0bnJfX0JJVE5SIDAKKyNkZWZpbmUgUl9TRVJJQUwwX1JFQ19DVFJMX19yZWNfYml0bnJfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwwX1JFQ19DVFJMX19yZWNfYml0bnJfX3JlY184Yml0IDAKKyNkZWZpbmUgUl9TRVJJQUwwX1JFQ19DVFJMX19yZWNfYml0bnJfX3JlY183Yml0IDEKKworI2RlZmluZSBSX1NFUklBTDBfVFJfQ1RSTCAoSU9fVFlQRUNBU1RfQllURSAweGIwMDAwMDYxKQorI2RlZmluZSBSX1NFUklBTDBfVFJfQ1RSTF9fdHhkX19CSVROUiA3CisjZGVmaW5lIFJfU0VSSUFMMF9UUl9DVFJMX190eGRfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwwX1RSX0NUUkxfX3RyX2VuYWJsZV9fQklUTlIgNgorI2RlZmluZSBSX1NFUklBTDBfVFJfQ1RSTF9fdHJfZW5hYmxlX19XSURUSCAxCisjZGVmaW5lIFJfU0VSSUFMMF9UUl9DVFJMX190cl9lbmFibGVfX2Rpc2FibGUgMAorI2RlZmluZSBSX1NFUklBTDBfVFJfQ1RSTF9fdHJfZW5hYmxlX19lbmFibGUgMQorI2RlZmluZSBSX1NFUklBTDBfVFJfQ1RSTF9fYXV0b19jdHNfX0JJVE5SIDUKKyNkZWZpbmUgUl9TRVJJQUwwX1RSX0NUUkxfX2F1dG9fY3RzX19XSURUSCAxCisjZGVmaW5lIFJfU0VSSUFMMF9UUl9DVFJMX19hdXRvX2N0c19fZGlzYWJsZWQgMAorI2RlZmluZSBSX1NFUklBTDBfVFJfQ1RSTF9fYXV0b19jdHNfX2FjdGl2ZSAxCisjZGVmaW5lIFJfU0VSSUFMMF9UUl9DVFJMX19zdG9wX2JpdHNfX0JJVE5SIDQKKyNkZWZpbmUgUl9TRVJJQUwwX1RSX0NUUkxfX3N0b3BfYml0c19fV0lEVEggMQorI2RlZmluZSBSX1NFUklBTDBfVFJfQ1RSTF9fc3RvcF9iaXRzX19vbmVfYml0IDAKKyNkZWZpbmUgUl9TRVJJQUwwX1RSX0NUUkxfX3N0b3BfYml0c19fdHdvX2JpdHMgMQorI2RlZmluZSBSX1NFUklBTDBfVFJfQ1RSTF9fdHJfc3RpY2tfcGFyX19CSVROUiAzCisjZGVmaW5lIFJfU0VSSUFMMF9UUl9DVFJMX190cl9zdGlja19wYXJfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwwX1RSX0NUUkxfX3RyX3N0aWNrX3Bhcl9fbm9ybWFsIDAKKyNkZWZpbmUgUl9TRVJJQUwwX1RSX0NUUkxfX3RyX3N0aWNrX3Bhcl9fc3RpY2sgMQorI2RlZmluZSBSX1NFUklBTDBfVFJfQ1RSTF9fdHJfcGFyX19CSVROUiAyCisjZGVmaW5lIFJfU0VSSUFMMF9UUl9DVFJMX190cl9wYXJfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwwX1RSX0NUUkxfX3RyX3Bhcl9fZXZlbiAwCisjZGVmaW5lIFJfU0VSSUFMMF9UUl9DVFJMX190cl9wYXJfX29kZCAxCisjZGVmaW5lIFJfU0VSSUFMMF9UUl9DVFJMX190cl9wYXJfZW5fX0JJVE5SIDEKKyNkZWZpbmUgUl9TRVJJQUwwX1RSX0NUUkxfX3RyX3Bhcl9lbl9fV0lEVEggMQorI2RlZmluZSBSX1NFUklBTDBfVFJfQ1RSTF9fdHJfcGFyX2VuX19kaXNhYmxlIDAKKyNkZWZpbmUgUl9TRVJJQUwwX1RSX0NUUkxfX3RyX3Bhcl9lbl9fZW5hYmxlIDEKKyNkZWZpbmUgUl9TRVJJQUwwX1RSX0NUUkxfX3RyX2JpdG5yX19CSVROUiAwCisjZGVmaW5lIFJfU0VSSUFMMF9UUl9DVFJMX190cl9iaXRucl9fV0lEVEggMQorI2RlZmluZSBSX1NFUklBTDBfVFJfQ1RSTF9fdHJfYml0bnJfX3RyXzhiaXQgMAorI2RlZmluZSBSX1NFUklBTDBfVFJfQ1RSTF9fdHJfYml0bnJfX3RyXzdiaXQgMQorCisjZGVmaW5lIFJfU0VSSUFMMF9UUl9EQVRBIChJT19UWVBFQ0FTVF9CWVRFIDB4YjAwMDAwNjApCisjZGVmaW5lIFJfU0VSSUFMMF9UUl9EQVRBX19kYXRhX291dF9fQklUTlIgMAorI2RlZmluZSBSX1NFUklBTDBfVFJfREFUQV9fZGF0YV9vdXRfX1dJRFRIIDgKKworI2RlZmluZSBSX1NFUklBTDBfUkVBRCAoSU9fVFlQRUNBU1RfUk9fVURXT1JEIDB4YjAwMDAwNjApCisjZGVmaW5lIFJfU0VSSUFMMF9SRUFEX194b2ZmX2RldGVjdF9fQklUTlIgMTUKKyNkZWZpbmUgUl9TRVJJQUwwX1JFQURfX3hvZmZfZGV0ZWN0X19XSURUSCAxCisjZGVmaW5lIFJfU0VSSUFMMF9SRUFEX194b2ZmX2RldGVjdF9fbm9feG9mZiAwCisjZGVmaW5lIFJfU0VSSUFMMF9SRUFEX194b2ZmX2RldGVjdF9feG9mZiAxCisjZGVmaW5lIFJfU0VSSUFMMF9SRUFEX19jdHNfX19CSVROUiAxNAorI2RlZmluZSBSX1NFUklBTDBfUkVBRF9fY3RzX19fV0lEVEggMQorI2RlZmluZSBSX1NFUklBTDBfUkVBRF9fY3RzX19fYWN0aXZlIDAKKyNkZWZpbmUgUl9TRVJJQUwwX1JFQURfX2N0c19fX2luYWN0aXZlIDEKKyNkZWZpbmUgUl9TRVJJQUwwX1JFQURfX3RyX3JlYWR5X19CSVROUiAxMworI2RlZmluZSBSX1NFUklBTDBfUkVBRF9fdHJfcmVhZHlfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwwX1JFQURfX3RyX3JlYWR5X19mdWxsIDAKKyNkZWZpbmUgUl9TRVJJQUwwX1JFQURfX3RyX3JlYWR5X19yZWFkeSAxCisjZGVmaW5lIFJfU0VSSUFMMF9SRUFEX19yeGRfX0JJVE5SIDEyCisjZGVmaW5lIFJfU0VSSUFMMF9SRUFEX19yeGRfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwwX1JFQURfX292ZXJydW5fX0JJVE5SIDExCisjZGVmaW5lIFJfU0VSSUFMMF9SRUFEX19vdmVycnVuX19XSURUSCAxCisjZGVmaW5lIFJfU0VSSUFMMF9SRUFEX19vdmVycnVuX19ubyAwCisjZGVmaW5lIFJfU0VSSUFMMF9SRUFEX19vdmVycnVuX195ZXMgMQorI2RlZmluZSBSX1NFUklBTDBfUkVBRF9fcGFyX2Vycl9fQklUTlIgMTAKKyNkZWZpbmUgUl9TRVJJQUwwX1JFQURfX3Bhcl9lcnJfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwwX1JFQURfX3Bhcl9lcnJfX25vIDAKKyNkZWZpbmUgUl9TRVJJQUwwX1JFQURfX3Bhcl9lcnJfX3llcyAxCisjZGVmaW5lIFJfU0VSSUFMMF9SRUFEX19mcmFtaW5nX2Vycl9fQklUTlIgOQorI2RlZmluZSBSX1NFUklBTDBfUkVBRF9fZnJhbWluZ19lcnJfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwwX1JFQURfX2ZyYW1pbmdfZXJyX19ubyAwCisjZGVmaW5lIFJfU0VSSUFMMF9SRUFEX19mcmFtaW5nX2Vycl9feWVzIDEKKyNkZWZpbmUgUl9TRVJJQUwwX1JFQURfX2RhdGFfYXZhaWxfX0JJVE5SIDgKKyNkZWZpbmUgUl9TRVJJQUwwX1JFQURfX2RhdGFfYXZhaWxfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwwX1JFQURfX2RhdGFfYXZhaWxfX25vIDAKKyNkZWZpbmUgUl9TRVJJQUwwX1JFQURfX2RhdGFfYXZhaWxfX3llcyAxCisjZGVmaW5lIFJfU0VSSUFMMF9SRUFEX19kYXRhX2luX19CSVROUiAwCisjZGVmaW5lIFJfU0VSSUFMMF9SRUFEX19kYXRhX2luX19XSURUSCA4CisKKyNkZWZpbmUgUl9TRVJJQUwwX1NUQVRVUyAoSU9fVFlQRUNBU1RfUk9fQllURSAweGIwMDAwMDYxKQorI2RlZmluZSBSX1NFUklBTDBfU1RBVFVTX194b2ZmX2RldGVjdF9fQklUTlIgNworI2RlZmluZSBSX1NFUklBTDBfU1RBVFVTX194b2ZmX2RldGVjdF9fV0lEVEggMQorI2RlZmluZSBSX1NFUklBTDBfU1RBVFVTX194b2ZmX2RldGVjdF9fbm9feG9mZiAwCisjZGVmaW5lIFJfU0VSSUFMMF9TVEFUVVNfX3hvZmZfZGV0ZWN0X194b2ZmIDEKKyNkZWZpbmUgUl9TRVJJQUwwX1NUQVRVU19fY3RzX19fQklUTlIgNgorI2RlZmluZSBSX1NFUklBTDBfU1RBVFVTX19jdHNfX19XSURUSCAxCisjZGVmaW5lIFJfU0VSSUFMMF9TVEFUVVNfX2N0c19fX2FjdGl2ZSAwCisjZGVmaW5lIFJfU0VSSUFMMF9TVEFUVVNfX2N0c19fX2luYWN0aXZlIDEKKyNkZWZpbmUgUl9TRVJJQUwwX1NUQVRVU19fdHJfcmVhZHlfX0JJVE5SIDUKKyNkZWZpbmUgUl9TRVJJQUwwX1NUQVRVU19fdHJfcmVhZHlfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwwX1NUQVRVU19fdHJfcmVhZHlfX2Z1bGwgMAorI2RlZmluZSBSX1NFUklBTDBfU1RBVFVTX190cl9yZWFkeV9fcmVhZHkgMQorI2RlZmluZSBSX1NFUklBTDBfU1RBVFVTX19yeGRfX0JJVE5SIDQKKyNkZWZpbmUgUl9TRVJJQUwwX1NUQVRVU19fcnhkX19XSURUSCAxCisjZGVmaW5lIFJfU0VSSUFMMF9TVEFUVVNfX292ZXJydW5fX0JJVE5SIDMKKyNkZWZpbmUgUl9TRVJJQUwwX1NUQVRVU19fb3ZlcnJ1bl9fV0lEVEggMQorI2RlZmluZSBSX1NFUklBTDBfU1RBVFVTX19vdmVycnVuX19ubyAwCisjZGVmaW5lIFJfU0VSSUFMMF9TVEFUVVNfX292ZXJydW5fX3llcyAxCisjZGVmaW5lIFJfU0VSSUFMMF9TVEFUVVNfX3Bhcl9lcnJfX0JJVE5SIDIKKyNkZWZpbmUgUl9TRVJJQUwwX1NUQVRVU19fcGFyX2Vycl9fV0lEVEggMQorI2RlZmluZSBSX1NFUklBTDBfU1RBVFVTX19wYXJfZXJyX19ubyAwCisjZGVmaW5lIFJfU0VSSUFMMF9TVEFUVVNfX3Bhcl9lcnJfX3llcyAxCisjZGVmaW5lIFJfU0VSSUFMMF9TVEFUVVNfX2ZyYW1pbmdfZXJyX19CSVROUiAxCisjZGVmaW5lIFJfU0VSSUFMMF9TVEFUVVNfX2ZyYW1pbmdfZXJyX19XSURUSCAxCisjZGVmaW5lIFJfU0VSSUFMMF9TVEFUVVNfX2ZyYW1pbmdfZXJyX19ubyAwCisjZGVmaW5lIFJfU0VSSUFMMF9TVEFUVVNfX2ZyYW1pbmdfZXJyX195ZXMgMQorI2RlZmluZSBSX1NFUklBTDBfU1RBVFVTX19kYXRhX2F2YWlsX19CSVROUiAwCisjZGVmaW5lIFJfU0VSSUFMMF9TVEFUVVNfX2RhdGFfYXZhaWxfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwwX1NUQVRVU19fZGF0YV9hdmFpbF9fbm8gMAorI2RlZmluZSBSX1NFUklBTDBfU1RBVFVTX19kYXRhX2F2YWlsX195ZXMgMQorCisjZGVmaW5lIFJfU0VSSUFMMF9SRUNfREFUQSAoSU9fVFlQRUNBU1RfUk9fQllURSAweGIwMDAwMDYwKQorI2RlZmluZSBSX1NFUklBTDBfUkVDX0RBVEFfX2RhdGFfaW5fX0JJVE5SIDAKKyNkZWZpbmUgUl9TRVJJQUwwX1JFQ19EQVRBX19kYXRhX2luX19XSURUSCA4CisKKyNkZWZpbmUgUl9TRVJJQUwwX1hPRkYgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMDY0KQorI2RlZmluZSBSX1NFUklBTDBfWE9GRl9fdHhfc3RvcF9fQklUTlIgOQorI2RlZmluZSBSX1NFUklBTDBfWE9GRl9fdHhfc3RvcF9fV0lEVEggMQorI2RlZmluZSBSX1NFUklBTDBfWE9GRl9fdHhfc3RvcF9fZW5hYmxlIDAKKyNkZWZpbmUgUl9TRVJJQUwwX1hPRkZfX3R4X3N0b3BfX3N0b3AgMQorI2RlZmluZSBSX1NFUklBTDBfWE9GRl9fYXV0b194b2ZmX19CSVROUiA4CisjZGVmaW5lIFJfU0VSSUFMMF9YT0ZGX19hdXRvX3hvZmZfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwwX1hPRkZfX2F1dG9feG9mZl9fZGlzYWJsZSAwCisjZGVmaW5lIFJfU0VSSUFMMF9YT0ZGX19hdXRvX3hvZmZfX2VuYWJsZSAxCisjZGVmaW5lIFJfU0VSSUFMMF9YT0ZGX194b2ZmX2NoYXJfX0JJVE5SIDAKKyNkZWZpbmUgUl9TRVJJQUwwX1hPRkZfX3hvZmZfY2hhcl9fV0lEVEggOAorCisjZGVmaW5lIFJfU0VSSUFMMV9DVFJMIChJT19UWVBFQ0FTVF9VRFdPUkQgMHhiMDAwMDA2OCkKKyNkZWZpbmUgUl9TRVJJQUwxX0NUUkxfX3RyX2JhdWRfX0JJVE5SIDI4CisjZGVmaW5lIFJfU0VSSUFMMV9DVFJMX190cl9iYXVkX19XSURUSCA0CisjZGVmaW5lIFJfU0VSSUFMMV9DVFJMX190cl9iYXVkX19jMzAwSHogMAorI2RlZmluZSBSX1NFUklBTDFfQ1RSTF9fdHJfYmF1ZF9fYzYwMEh6IDEKKyNkZWZpbmUgUl9TRVJJQUwxX0NUUkxfX3RyX2JhdWRfX2MxMjAwSHogMgorI2RlZmluZSBSX1NFUklBTDFfQ1RSTF9fdHJfYmF1ZF9fYzI0MDBIeiAzCisjZGVmaW5lIFJfU0VSSUFMMV9DVFJMX190cl9iYXVkX19jNDgwMEh6IDQKKyNkZWZpbmUgUl9TRVJJQUwxX0NUUkxfX3RyX2JhdWRfX2M5NjAwSHogNQorI2RlZmluZSBSX1NFUklBTDFfQ1RSTF9fdHJfYmF1ZF9fYzE5azJIeiA2CisjZGVmaW5lIFJfU0VSSUFMMV9DVFJMX190cl9iYXVkX19jMzhrNEh6IDcKKyNkZWZpbmUgUl9TRVJJQUwxX0NUUkxfX3RyX2JhdWRfX2M1N2s2SHogOAorI2RlZmluZSBSX1NFUklBTDFfQ1RSTF9fdHJfYmF1ZF9fYzExNWsySHogOQorI2RlZmluZSBSX1NFUklBTDFfQ1RSTF9fdHJfYmF1ZF9fYzIzMGs0SHogMTAKKyNkZWZpbmUgUl9TRVJJQUwxX0NUUkxfX3RyX2JhdWRfX2M0NjBrOEh6IDExCisjZGVmaW5lIFJfU0VSSUFMMV9DVFJMX190cl9iYXVkX19jOTIxazZIeiAxMgorI2RlZmluZSBSX1NFUklBTDFfQ1RSTF9fdHJfYmF1ZF9fYzE4NDNrMkh6IDEzCisjZGVmaW5lIFJfU0VSSUFMMV9DVFJMX190cl9iYXVkX19jNjI1MGtIeiAxNAorI2RlZmluZSBSX1NFUklBTDFfQ1RSTF9fdHJfYmF1ZF9fcmVzZXJ2ZWQgMTUKKyNkZWZpbmUgUl9TRVJJQUwxX0NUUkxfX3JlY19iYXVkX19CSVROUiAyNAorI2RlZmluZSBSX1NFUklBTDFfQ1RSTF9fcmVjX2JhdWRfX1dJRFRIIDQKKyNkZWZpbmUgUl9TRVJJQUwxX0NUUkxfX3JlY19iYXVkX19jMzAwSHogMAorI2RlZmluZSBSX1NFUklBTDFfQ1RSTF9fcmVjX2JhdWRfX2M2MDBIeiAxCisjZGVmaW5lIFJfU0VSSUFMMV9DVFJMX19yZWNfYmF1ZF9fYzEyMDBIeiAyCisjZGVmaW5lIFJfU0VSSUFMMV9DVFJMX19yZWNfYmF1ZF9fYzI0MDBIeiAzCisjZGVmaW5lIFJfU0VSSUFMMV9DVFJMX19yZWNfYmF1ZF9fYzQ4MDBIeiA0CisjZGVmaW5lIFJfU0VSSUFMMV9DVFJMX19yZWNfYmF1ZF9fYzk2MDBIeiA1CisjZGVmaW5lIFJfU0VSSUFMMV9DVFJMX19yZWNfYmF1ZF9fYzE5azJIeiA2CisjZGVmaW5lIFJfU0VSSUFMMV9DVFJMX19yZWNfYmF1ZF9fYzM4azRIeiA3CisjZGVmaW5lIFJfU0VSSUFMMV9DVFJMX19yZWNfYmF1ZF9fYzU3azZIeiA4CisjZGVmaW5lIFJfU0VSSUFMMV9DVFJMX19yZWNfYmF1ZF9fYzExNWsySHogOQorI2RlZmluZSBSX1NFUklBTDFfQ1RSTF9fcmVjX2JhdWRfX2MyMzBrNEh6IDEwCisjZGVmaW5lIFJfU0VSSUFMMV9DVFJMX19yZWNfYmF1ZF9fYzQ2MGs4SHogMTEKKyNkZWZpbmUgUl9TRVJJQUwxX0NUUkxfX3JlY19iYXVkX19jOTIxazZIeiAxMgorI2RlZmluZSBSX1NFUklBTDFfQ1RSTF9fcmVjX2JhdWRfX2MxODQzazJIeiAxMworI2RlZmluZSBSX1NFUklBTDFfQ1RSTF9fcmVjX2JhdWRfX2M2MjUwa0h6IDE0CisjZGVmaW5lIFJfU0VSSUFMMV9DVFJMX19yZWNfYmF1ZF9fcmVzZXJ2ZWQgMTUKKyNkZWZpbmUgUl9TRVJJQUwxX0NUUkxfX2RtYV9lcnJfX0JJVE5SIDIzCisjZGVmaW5lIFJfU0VSSUFMMV9DVFJMX19kbWFfZXJyX19XSURUSCAxCisjZGVmaW5lIFJfU0VSSUFMMV9DVFJMX19kbWFfZXJyX19zdG9wIDAKKyNkZWZpbmUgUl9TRVJJQUwxX0NUUkxfX2RtYV9lcnJfX2lnbm9yZSAxCisjZGVmaW5lIFJfU0VSSUFMMV9DVFJMX19yZWNfZW5hYmxlX19CSVROUiAyMgorI2RlZmluZSBSX1NFUklBTDFfQ1RSTF9fcmVjX2VuYWJsZV9fV0lEVEggMQorI2RlZmluZSBSX1NFUklBTDFfQ1RSTF9fcmVjX2VuYWJsZV9fZGlzYWJsZSAwCisjZGVmaW5lIFJfU0VSSUFMMV9DVFJMX19yZWNfZW5hYmxlX19lbmFibGUgMQorI2RlZmluZSBSX1NFUklBTDFfQ1RSTF9fcnRzX19fQklUTlIgMjEKKyNkZWZpbmUgUl9TRVJJQUwxX0NUUkxfX3J0c19fX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwxX0NUUkxfX3J0c19fX2FjdGl2ZSAwCisjZGVmaW5lIFJfU0VSSUFMMV9DVFJMX19ydHNfX19pbmFjdGl2ZSAxCisjZGVmaW5lIFJfU0VSSUFMMV9DVFJMX19zYW1wbGluZ19fQklUTlIgMjAKKyNkZWZpbmUgUl9TRVJJQUwxX0NUUkxfX3NhbXBsaW5nX19XSURUSCAxCisjZGVmaW5lIFJfU0VSSUFMMV9DVFJMX19zYW1wbGluZ19fbWlkZGxlIDAKKyNkZWZpbmUgUl9TRVJJQUwxX0NUUkxfX3NhbXBsaW5nX19tYWpvcml0eSAxCisjZGVmaW5lIFJfU0VSSUFMMV9DVFJMX19yZWNfc3RpY2tfcGFyX19CSVROUiAxOQorI2RlZmluZSBSX1NFUklBTDFfQ1RSTF9fcmVjX3N0aWNrX3Bhcl9fV0lEVEggMQorI2RlZmluZSBSX1NFUklBTDFfQ1RSTF9fcmVjX3N0aWNrX3Bhcl9fbm9ybWFsIDAKKyNkZWZpbmUgUl9TRVJJQUwxX0NUUkxfX3JlY19zdGlja19wYXJfX3N0aWNrIDEKKyNkZWZpbmUgUl9TRVJJQUwxX0NUUkxfX3JlY19wYXJfX0JJVE5SIDE4CisjZGVmaW5lIFJfU0VSSUFMMV9DVFJMX19yZWNfcGFyX19XSURUSCAxCisjZGVmaW5lIFJfU0VSSUFMMV9DVFJMX19yZWNfcGFyX19ldmVuIDAKKyNkZWZpbmUgUl9TRVJJQUwxX0NUUkxfX3JlY19wYXJfX29kZCAxCisjZGVmaW5lIFJfU0VSSUFMMV9DVFJMX19yZWNfcGFyX2VuX19CSVROUiAxNworI2RlZmluZSBSX1NFUklBTDFfQ1RSTF9fcmVjX3Bhcl9lbl9fV0lEVEggMQorI2RlZmluZSBSX1NFUklBTDFfQ1RSTF9fcmVjX3Bhcl9lbl9fZGlzYWJsZSAwCisjZGVmaW5lIFJfU0VSSUFMMV9DVFJMX19yZWNfcGFyX2VuX19lbmFibGUgMQorI2RlZmluZSBSX1NFUklBTDFfQ1RSTF9fcmVjX2JpdG5yX19CSVROUiAxNgorI2RlZmluZSBSX1NFUklBTDFfQ1RSTF9fcmVjX2JpdG5yX19XSURUSCAxCisjZGVmaW5lIFJfU0VSSUFMMV9DVFJMX19yZWNfYml0bnJfX3JlY184Yml0IDAKKyNkZWZpbmUgUl9TRVJJQUwxX0NUUkxfX3JlY19iaXRucl9fcmVjXzdiaXQgMQorI2RlZmluZSBSX1NFUklBTDFfQ1RSTF9fdHhkX19CSVROUiAxNQorI2RlZmluZSBSX1NFUklBTDFfQ1RSTF9fdHhkX19XSURUSCAxCisjZGVmaW5lIFJfU0VSSUFMMV9DVFJMX190cl9lbmFibGVfX0JJVE5SIDE0CisjZGVmaW5lIFJfU0VSSUFMMV9DVFJMX190cl9lbmFibGVfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwxX0NUUkxfX3RyX2VuYWJsZV9fZGlzYWJsZSAwCisjZGVmaW5lIFJfU0VSSUFMMV9DVFJMX190cl9lbmFibGVfX2VuYWJsZSAxCisjZGVmaW5lIFJfU0VSSUFMMV9DVFJMX19hdXRvX2N0c19fQklUTlIgMTMKKyNkZWZpbmUgUl9TRVJJQUwxX0NUUkxfX2F1dG9fY3RzX19XSURUSCAxCisjZGVmaW5lIFJfU0VSSUFMMV9DVFJMX19hdXRvX2N0c19fZGlzYWJsZWQgMAorI2RlZmluZSBSX1NFUklBTDFfQ1RSTF9fYXV0b19jdHNfX2FjdGl2ZSAxCisjZGVmaW5lIFJfU0VSSUFMMV9DVFJMX19zdG9wX2JpdHNfX0JJVE5SIDEyCisjZGVmaW5lIFJfU0VSSUFMMV9DVFJMX19zdG9wX2JpdHNfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwxX0NUUkxfX3N0b3BfYml0c19fb25lX2JpdCAwCisjZGVmaW5lIFJfU0VSSUFMMV9DVFJMX19zdG9wX2JpdHNfX3R3b19iaXRzIDEKKyNkZWZpbmUgUl9TRVJJQUwxX0NUUkxfX3RyX3N0aWNrX3Bhcl9fQklUTlIgMTEKKyNkZWZpbmUgUl9TRVJJQUwxX0NUUkxfX3RyX3N0aWNrX3Bhcl9fV0lEVEggMQorI2RlZmluZSBSX1NFUklBTDFfQ1RSTF9fdHJfc3RpY2tfcGFyX19ub3JtYWwgMAorI2RlZmluZSBSX1NFUklBTDFfQ1RSTF9fdHJfc3RpY2tfcGFyX19zdGljayAxCisjZGVmaW5lIFJfU0VSSUFMMV9DVFJMX190cl9wYXJfX0JJVE5SIDEwCisjZGVmaW5lIFJfU0VSSUFMMV9DVFJMX190cl9wYXJfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwxX0NUUkxfX3RyX3Bhcl9fZXZlbiAwCisjZGVmaW5lIFJfU0VSSUFMMV9DVFJMX190cl9wYXJfX29kZCAxCisjZGVmaW5lIFJfU0VSSUFMMV9DVFJMX190cl9wYXJfZW5fX0JJVE5SIDkKKyNkZWZpbmUgUl9TRVJJQUwxX0NUUkxfX3RyX3Bhcl9lbl9fV0lEVEggMQorI2RlZmluZSBSX1NFUklBTDFfQ1RSTF9fdHJfcGFyX2VuX19kaXNhYmxlIDAKKyNkZWZpbmUgUl9TRVJJQUwxX0NUUkxfX3RyX3Bhcl9lbl9fZW5hYmxlIDEKKyNkZWZpbmUgUl9TRVJJQUwxX0NUUkxfX3RyX2JpdG5yX19CSVROUiA4CisjZGVmaW5lIFJfU0VSSUFMMV9DVFJMX190cl9iaXRucl9fV0lEVEggMQorI2RlZmluZSBSX1NFUklBTDFfQ1RSTF9fdHJfYml0bnJfX3RyXzhiaXQgMAorI2RlZmluZSBSX1NFUklBTDFfQ1RSTF9fdHJfYml0bnJfX3RyXzdiaXQgMQorI2RlZmluZSBSX1NFUklBTDFfQ1RSTF9fZGF0YV9vdXRfX0JJVE5SIDAKKyNkZWZpbmUgUl9TRVJJQUwxX0NUUkxfX2RhdGFfb3V0X19XSURUSCA4CisKKyNkZWZpbmUgUl9TRVJJQUwxX0JBVUQgKElPX1RZUEVDQVNUX0JZVEUgMHhiMDAwMDA2YikKKyNkZWZpbmUgUl9TRVJJQUwxX0JBVURfX3RyX2JhdWRfX0JJVE5SIDQKKyNkZWZpbmUgUl9TRVJJQUwxX0JBVURfX3RyX2JhdWRfX1dJRFRIIDQKKyNkZWZpbmUgUl9TRVJJQUwxX0JBVURfX3RyX2JhdWRfX2MzMDBIeiAwCisjZGVmaW5lIFJfU0VSSUFMMV9CQVVEX190cl9iYXVkX19jNjAwSHogMQorI2RlZmluZSBSX1NFUklBTDFfQkFVRF9fdHJfYmF1ZF9fYzEyMDBIeiAyCisjZGVmaW5lIFJfU0VSSUFMMV9CQVVEX190cl9iYXVkX19jMjQwMEh6IDMKKyNkZWZpbmUgUl9TRVJJQUwxX0JBVURfX3RyX2JhdWRfX2M0ODAwSHogNAorI2RlZmluZSBSX1NFUklBTDFfQkFVRF9fdHJfYmF1ZF9fYzk2MDBIeiA1CisjZGVmaW5lIFJfU0VSSUFMMV9CQVVEX190cl9iYXVkX19jMTlrMkh6IDYKKyNkZWZpbmUgUl9TRVJJQUwxX0JBVURfX3RyX2JhdWRfX2MzOGs0SHogNworI2RlZmluZSBSX1NFUklBTDFfQkFVRF9fdHJfYmF1ZF9fYzU3azZIeiA4CisjZGVmaW5lIFJfU0VSSUFMMV9CQVVEX190cl9iYXVkX19jMTE1azJIeiA5CisjZGVmaW5lIFJfU0VSSUFMMV9CQVVEX190cl9iYXVkX19jMjMwazRIeiAxMAorI2RlZmluZSBSX1NFUklBTDFfQkFVRF9fdHJfYmF1ZF9fYzQ2MGs4SHogMTEKKyNkZWZpbmUgUl9TRVJJQUwxX0JBVURfX3RyX2JhdWRfX2M5MjFrNkh6IDEyCisjZGVmaW5lIFJfU0VSSUFMMV9CQVVEX190cl9iYXVkX19jMTg0M2sySHogMTMKKyNkZWZpbmUgUl9TRVJJQUwxX0JBVURfX3RyX2JhdWRfX2M2MjUwa0h6IDE0CisjZGVmaW5lIFJfU0VSSUFMMV9CQVVEX190cl9iYXVkX19yZXNlcnZlZCAxNQorI2RlZmluZSBSX1NFUklBTDFfQkFVRF9fcmVjX2JhdWRfX0JJVE5SIDAKKyNkZWZpbmUgUl9TRVJJQUwxX0JBVURfX3JlY19iYXVkX19XSURUSCA0CisjZGVmaW5lIFJfU0VSSUFMMV9CQVVEX19yZWNfYmF1ZF9fYzMwMEh6IDAKKyNkZWZpbmUgUl9TRVJJQUwxX0JBVURfX3JlY19iYXVkX19jNjAwSHogMQorI2RlZmluZSBSX1NFUklBTDFfQkFVRF9fcmVjX2JhdWRfX2MxMjAwSHogMgorI2RlZmluZSBSX1NFUklBTDFfQkFVRF9fcmVjX2JhdWRfX2MyNDAwSHogMworI2RlZmluZSBSX1NFUklBTDFfQkFVRF9fcmVjX2JhdWRfX2M0ODAwSHogNAorI2RlZmluZSBSX1NFUklBTDFfQkFVRF9fcmVjX2JhdWRfX2M5NjAwSHogNQorI2RlZmluZSBSX1NFUklBTDFfQkFVRF9fcmVjX2JhdWRfX2MxOWsySHogNgorI2RlZmluZSBSX1NFUklBTDFfQkFVRF9fcmVjX2JhdWRfX2MzOGs0SHogNworI2RlZmluZSBSX1NFUklBTDFfQkFVRF9fcmVjX2JhdWRfX2M1N2s2SHogOAorI2RlZmluZSBSX1NFUklBTDFfQkFVRF9fcmVjX2JhdWRfX2MxMTVrMkh6IDkKKyNkZWZpbmUgUl9TRVJJQUwxX0JBVURfX3JlY19iYXVkX19jMjMwazRIeiAxMAorI2RlZmluZSBSX1NFUklBTDFfQkFVRF9fcmVjX2JhdWRfX2M0NjBrOEh6IDExCisjZGVmaW5lIFJfU0VSSUFMMV9CQVVEX19yZWNfYmF1ZF9fYzkyMWs2SHogMTIKKyNkZWZpbmUgUl9TRVJJQUwxX0JBVURfX3JlY19iYXVkX19jMTg0M2sySHogMTMKKyNkZWZpbmUgUl9TRVJJQUwxX0JBVURfX3JlY19iYXVkX19jNjI1MGtIeiAxNAorI2RlZmluZSBSX1NFUklBTDFfQkFVRF9fcmVjX2JhdWRfX3Jlc2VydmVkIDE1CisKKyNkZWZpbmUgUl9TRVJJQUwxX1JFQ19DVFJMIChJT19UWVBFQ0FTVF9CWVRFIDB4YjAwMDAwNmEpCisjZGVmaW5lIFJfU0VSSUFMMV9SRUNfQ1RSTF9fZG1hX2Vycl9fQklUTlIgNworI2RlZmluZSBSX1NFUklBTDFfUkVDX0NUUkxfX2RtYV9lcnJfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwxX1JFQ19DVFJMX19kbWFfZXJyX19zdG9wIDAKKyNkZWZpbmUgUl9TRVJJQUwxX1JFQ19DVFJMX19kbWFfZXJyX19pZ25vcmUgMQorI2RlZmluZSBSX1NFUklBTDFfUkVDX0NUUkxfX3JlY19lbmFibGVfX0JJVE5SIDYKKyNkZWZpbmUgUl9TRVJJQUwxX1JFQ19DVFJMX19yZWNfZW5hYmxlX19XSURUSCAxCisjZGVmaW5lIFJfU0VSSUFMMV9SRUNfQ1RSTF9fcmVjX2VuYWJsZV9fZGlzYWJsZSAwCisjZGVmaW5lIFJfU0VSSUFMMV9SRUNfQ1RSTF9fcmVjX2VuYWJsZV9fZW5hYmxlIDEKKyNkZWZpbmUgUl9TRVJJQUwxX1JFQ19DVFJMX19ydHNfX19CSVROUiA1CisjZGVmaW5lIFJfU0VSSUFMMV9SRUNfQ1RSTF9fcnRzX19fV0lEVEggMQorI2RlZmluZSBSX1NFUklBTDFfUkVDX0NUUkxfX3J0c19fX2FjdGl2ZSAwCisjZGVmaW5lIFJfU0VSSUFMMV9SRUNfQ1RSTF9fcnRzX19faW5hY3RpdmUgMQorI2RlZmluZSBSX1NFUklBTDFfUkVDX0NUUkxfX3NhbXBsaW5nX19CSVROUiA0CisjZGVmaW5lIFJfU0VSSUFMMV9SRUNfQ1RSTF9fc2FtcGxpbmdfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwxX1JFQ19DVFJMX19zYW1wbGluZ19fbWlkZGxlIDAKKyNkZWZpbmUgUl9TRVJJQUwxX1JFQ19DVFJMX19zYW1wbGluZ19fbWFqb3JpdHkgMQorI2RlZmluZSBSX1NFUklBTDFfUkVDX0NUUkxfX3JlY19zdGlja19wYXJfX0JJVE5SIDMKKyNkZWZpbmUgUl9TRVJJQUwxX1JFQ19DVFJMX19yZWNfc3RpY2tfcGFyX19XSURUSCAxCisjZGVmaW5lIFJfU0VSSUFMMV9SRUNfQ1RSTF9fcmVjX3N0aWNrX3Bhcl9fbm9ybWFsIDAKKyNkZWZpbmUgUl9TRVJJQUwxX1JFQ19DVFJMX19yZWNfc3RpY2tfcGFyX19zdGljayAxCisjZGVmaW5lIFJfU0VSSUFMMV9SRUNfQ1RSTF9fcmVjX3Bhcl9fQklUTlIgMgorI2RlZmluZSBSX1NFUklBTDFfUkVDX0NUUkxfX3JlY19wYXJfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwxX1JFQ19DVFJMX19yZWNfcGFyX19ldmVuIDAKKyNkZWZpbmUgUl9TRVJJQUwxX1JFQ19DVFJMX19yZWNfcGFyX19vZGQgMQorI2RlZmluZSBSX1NFUklBTDFfUkVDX0NUUkxfX3JlY19wYXJfZW5fX0JJVE5SIDEKKyNkZWZpbmUgUl9TRVJJQUwxX1JFQ19DVFJMX19yZWNfcGFyX2VuX19XSURUSCAxCisjZGVmaW5lIFJfU0VSSUFMMV9SRUNfQ1RSTF9fcmVjX3Bhcl9lbl9fZGlzYWJsZSAwCisjZGVmaW5lIFJfU0VSSUFMMV9SRUNfQ1RSTF9fcmVjX3Bhcl9lbl9fZW5hYmxlIDEKKyNkZWZpbmUgUl9TRVJJQUwxX1JFQ19DVFJMX19yZWNfYml0bnJfX0JJVE5SIDAKKyNkZWZpbmUgUl9TRVJJQUwxX1JFQ19DVFJMX19yZWNfYml0bnJfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwxX1JFQ19DVFJMX19yZWNfYml0bnJfX3JlY184Yml0IDAKKyNkZWZpbmUgUl9TRVJJQUwxX1JFQ19DVFJMX19yZWNfYml0bnJfX3JlY183Yml0IDEKKworI2RlZmluZSBSX1NFUklBTDFfVFJfQ1RSTCAoSU9fVFlQRUNBU1RfQllURSAweGIwMDAwMDY5KQorI2RlZmluZSBSX1NFUklBTDFfVFJfQ1RSTF9fdHhkX19CSVROUiA3CisjZGVmaW5lIFJfU0VSSUFMMV9UUl9DVFJMX190eGRfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwxX1RSX0NUUkxfX3RyX2VuYWJsZV9fQklUTlIgNgorI2RlZmluZSBSX1NFUklBTDFfVFJfQ1RSTF9fdHJfZW5hYmxlX19XSURUSCAxCisjZGVmaW5lIFJfU0VSSUFMMV9UUl9DVFJMX190cl9lbmFibGVfX2Rpc2FibGUgMAorI2RlZmluZSBSX1NFUklBTDFfVFJfQ1RSTF9fdHJfZW5hYmxlX19lbmFibGUgMQorI2RlZmluZSBSX1NFUklBTDFfVFJfQ1RSTF9fYXV0b19jdHNfX0JJVE5SIDUKKyNkZWZpbmUgUl9TRVJJQUwxX1RSX0NUUkxfX2F1dG9fY3RzX19XSURUSCAxCisjZGVmaW5lIFJfU0VSSUFMMV9UUl9DVFJMX19hdXRvX2N0c19fZGlzYWJsZWQgMAorI2RlZmluZSBSX1NFUklBTDFfVFJfQ1RSTF9fYXV0b19jdHNfX2FjdGl2ZSAxCisjZGVmaW5lIFJfU0VSSUFMMV9UUl9DVFJMX19zdG9wX2JpdHNfX0JJVE5SIDQKKyNkZWZpbmUgUl9TRVJJQUwxX1RSX0NUUkxfX3N0b3BfYml0c19fV0lEVEggMQorI2RlZmluZSBSX1NFUklBTDFfVFJfQ1RSTF9fc3RvcF9iaXRzX19vbmVfYml0IDAKKyNkZWZpbmUgUl9TRVJJQUwxX1RSX0NUUkxfX3N0b3BfYml0c19fdHdvX2JpdHMgMQorI2RlZmluZSBSX1NFUklBTDFfVFJfQ1RSTF9fdHJfc3RpY2tfcGFyX19CSVROUiAzCisjZGVmaW5lIFJfU0VSSUFMMV9UUl9DVFJMX190cl9zdGlja19wYXJfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwxX1RSX0NUUkxfX3RyX3N0aWNrX3Bhcl9fbm9ybWFsIDAKKyNkZWZpbmUgUl9TRVJJQUwxX1RSX0NUUkxfX3RyX3N0aWNrX3Bhcl9fc3RpY2sgMQorI2RlZmluZSBSX1NFUklBTDFfVFJfQ1RSTF9fdHJfcGFyX19CSVROUiAyCisjZGVmaW5lIFJfU0VSSUFMMV9UUl9DVFJMX190cl9wYXJfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwxX1RSX0NUUkxfX3RyX3Bhcl9fZXZlbiAwCisjZGVmaW5lIFJfU0VSSUFMMV9UUl9DVFJMX190cl9wYXJfX29kZCAxCisjZGVmaW5lIFJfU0VSSUFMMV9UUl9DVFJMX190cl9wYXJfZW5fX0JJVE5SIDEKKyNkZWZpbmUgUl9TRVJJQUwxX1RSX0NUUkxfX3RyX3Bhcl9lbl9fV0lEVEggMQorI2RlZmluZSBSX1NFUklBTDFfVFJfQ1RSTF9fdHJfcGFyX2VuX19kaXNhYmxlIDAKKyNkZWZpbmUgUl9TRVJJQUwxX1RSX0NUUkxfX3RyX3Bhcl9lbl9fZW5hYmxlIDEKKyNkZWZpbmUgUl9TRVJJQUwxX1RSX0NUUkxfX3RyX2JpdG5yX19CSVROUiAwCisjZGVmaW5lIFJfU0VSSUFMMV9UUl9DVFJMX190cl9iaXRucl9fV0lEVEggMQorI2RlZmluZSBSX1NFUklBTDFfVFJfQ1RSTF9fdHJfYml0bnJfX3RyXzhiaXQgMAorI2RlZmluZSBSX1NFUklBTDFfVFJfQ1RSTF9fdHJfYml0bnJfX3RyXzdiaXQgMQorCisjZGVmaW5lIFJfU0VSSUFMMV9UUl9EQVRBIChJT19UWVBFQ0FTVF9CWVRFIDB4YjAwMDAwNjgpCisjZGVmaW5lIFJfU0VSSUFMMV9UUl9EQVRBX19kYXRhX291dF9fQklUTlIgMAorI2RlZmluZSBSX1NFUklBTDFfVFJfREFUQV9fZGF0YV9vdXRfX1dJRFRIIDgKKworI2RlZmluZSBSX1NFUklBTDFfUkVBRCAoSU9fVFlQRUNBU1RfUk9fVURXT1JEIDB4YjAwMDAwNjgpCisjZGVmaW5lIFJfU0VSSUFMMV9SRUFEX194b2ZmX2RldGVjdF9fQklUTlIgMTUKKyNkZWZpbmUgUl9TRVJJQUwxX1JFQURfX3hvZmZfZGV0ZWN0X19XSURUSCAxCisjZGVmaW5lIFJfU0VSSUFMMV9SRUFEX194b2ZmX2RldGVjdF9fbm9feG9mZiAwCisjZGVmaW5lIFJfU0VSSUFMMV9SRUFEX194b2ZmX2RldGVjdF9feG9mZiAxCisjZGVmaW5lIFJfU0VSSUFMMV9SRUFEX19jdHNfX19CSVROUiAxNAorI2RlZmluZSBSX1NFUklBTDFfUkVBRF9fY3RzX19fV0lEVEggMQorI2RlZmluZSBSX1NFUklBTDFfUkVBRF9fY3RzX19fYWN0aXZlIDAKKyNkZWZpbmUgUl9TRVJJQUwxX1JFQURfX2N0c19fX2luYWN0aXZlIDEKKyNkZWZpbmUgUl9TRVJJQUwxX1JFQURfX3RyX3JlYWR5X19CSVROUiAxMworI2RlZmluZSBSX1NFUklBTDFfUkVBRF9fdHJfcmVhZHlfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwxX1JFQURfX3RyX3JlYWR5X19mdWxsIDAKKyNkZWZpbmUgUl9TRVJJQUwxX1JFQURfX3RyX3JlYWR5X19yZWFkeSAxCisjZGVmaW5lIFJfU0VSSUFMMV9SRUFEX19yeGRfX0JJVE5SIDEyCisjZGVmaW5lIFJfU0VSSUFMMV9SRUFEX19yeGRfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwxX1JFQURfX292ZXJydW5fX0JJVE5SIDExCisjZGVmaW5lIFJfU0VSSUFMMV9SRUFEX19vdmVycnVuX19XSURUSCAxCisjZGVmaW5lIFJfU0VSSUFMMV9SRUFEX19vdmVycnVuX19ubyAwCisjZGVmaW5lIFJfU0VSSUFMMV9SRUFEX19vdmVycnVuX195ZXMgMQorI2RlZmluZSBSX1NFUklBTDFfUkVBRF9fcGFyX2Vycl9fQklUTlIgMTAKKyNkZWZpbmUgUl9TRVJJQUwxX1JFQURfX3Bhcl9lcnJfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwxX1JFQURfX3Bhcl9lcnJfX25vIDAKKyNkZWZpbmUgUl9TRVJJQUwxX1JFQURfX3Bhcl9lcnJfX3llcyAxCisjZGVmaW5lIFJfU0VSSUFMMV9SRUFEX19mcmFtaW5nX2Vycl9fQklUTlIgOQorI2RlZmluZSBSX1NFUklBTDFfUkVBRF9fZnJhbWluZ19lcnJfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwxX1JFQURfX2ZyYW1pbmdfZXJyX19ubyAwCisjZGVmaW5lIFJfU0VSSUFMMV9SRUFEX19mcmFtaW5nX2Vycl9feWVzIDEKKyNkZWZpbmUgUl9TRVJJQUwxX1JFQURfX2RhdGFfYXZhaWxfX0JJVE5SIDgKKyNkZWZpbmUgUl9TRVJJQUwxX1JFQURfX2RhdGFfYXZhaWxfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwxX1JFQURfX2RhdGFfYXZhaWxfX25vIDAKKyNkZWZpbmUgUl9TRVJJQUwxX1JFQURfX2RhdGFfYXZhaWxfX3llcyAxCisjZGVmaW5lIFJfU0VSSUFMMV9SRUFEX19kYXRhX2luX19CSVROUiAwCisjZGVmaW5lIFJfU0VSSUFMMV9SRUFEX19kYXRhX2luX19XSURUSCA4CisKKyNkZWZpbmUgUl9TRVJJQUwxX1NUQVRVUyAoSU9fVFlQRUNBU1RfUk9fQllURSAweGIwMDAwMDY5KQorI2RlZmluZSBSX1NFUklBTDFfU1RBVFVTX194b2ZmX2RldGVjdF9fQklUTlIgNworI2RlZmluZSBSX1NFUklBTDFfU1RBVFVTX194b2ZmX2RldGVjdF9fV0lEVEggMQorI2RlZmluZSBSX1NFUklBTDFfU1RBVFVTX194b2ZmX2RldGVjdF9fbm9feG9mZiAwCisjZGVmaW5lIFJfU0VSSUFMMV9TVEFUVVNfX3hvZmZfZGV0ZWN0X194b2ZmIDEKKyNkZWZpbmUgUl9TRVJJQUwxX1NUQVRVU19fY3RzX19fQklUTlIgNgorI2RlZmluZSBSX1NFUklBTDFfU1RBVFVTX19jdHNfX19XSURUSCAxCisjZGVmaW5lIFJfU0VSSUFMMV9TVEFUVVNfX2N0c19fX2FjdGl2ZSAwCisjZGVmaW5lIFJfU0VSSUFMMV9TVEFUVVNfX2N0c19fX2luYWN0aXZlIDEKKyNkZWZpbmUgUl9TRVJJQUwxX1NUQVRVU19fdHJfcmVhZHlfX0JJVE5SIDUKKyNkZWZpbmUgUl9TRVJJQUwxX1NUQVRVU19fdHJfcmVhZHlfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwxX1NUQVRVU19fdHJfcmVhZHlfX2Z1bGwgMAorI2RlZmluZSBSX1NFUklBTDFfU1RBVFVTX190cl9yZWFkeV9fcmVhZHkgMQorI2RlZmluZSBSX1NFUklBTDFfU1RBVFVTX19yeGRfX0JJVE5SIDQKKyNkZWZpbmUgUl9TRVJJQUwxX1NUQVRVU19fcnhkX19XSURUSCAxCisjZGVmaW5lIFJfU0VSSUFMMV9TVEFUVVNfX292ZXJydW5fX0JJVE5SIDMKKyNkZWZpbmUgUl9TRVJJQUwxX1NUQVRVU19fb3ZlcnJ1bl9fV0lEVEggMQorI2RlZmluZSBSX1NFUklBTDFfU1RBVFVTX19vdmVycnVuX19ubyAwCisjZGVmaW5lIFJfU0VSSUFMMV9TVEFUVVNfX292ZXJydW5fX3llcyAxCisjZGVmaW5lIFJfU0VSSUFMMV9TVEFUVVNfX3Bhcl9lcnJfX0JJVE5SIDIKKyNkZWZpbmUgUl9TRVJJQUwxX1NUQVRVU19fcGFyX2Vycl9fV0lEVEggMQorI2RlZmluZSBSX1NFUklBTDFfU1RBVFVTX19wYXJfZXJyX19ubyAwCisjZGVmaW5lIFJfU0VSSUFMMV9TVEFUVVNfX3Bhcl9lcnJfX3llcyAxCisjZGVmaW5lIFJfU0VSSUFMMV9TVEFUVVNfX2ZyYW1pbmdfZXJyX19CSVROUiAxCisjZGVmaW5lIFJfU0VSSUFMMV9TVEFUVVNfX2ZyYW1pbmdfZXJyX19XSURUSCAxCisjZGVmaW5lIFJfU0VSSUFMMV9TVEFUVVNfX2ZyYW1pbmdfZXJyX19ubyAwCisjZGVmaW5lIFJfU0VSSUFMMV9TVEFUVVNfX2ZyYW1pbmdfZXJyX195ZXMgMQorI2RlZmluZSBSX1NFUklBTDFfU1RBVFVTX19kYXRhX2F2YWlsX19CSVROUiAwCisjZGVmaW5lIFJfU0VSSUFMMV9TVEFUVVNfX2RhdGFfYXZhaWxfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwxX1NUQVRVU19fZGF0YV9hdmFpbF9fbm8gMAorI2RlZmluZSBSX1NFUklBTDFfU1RBVFVTX19kYXRhX2F2YWlsX195ZXMgMQorCisjZGVmaW5lIFJfU0VSSUFMMV9SRUNfREFUQSAoSU9fVFlQRUNBU1RfUk9fQllURSAweGIwMDAwMDY4KQorI2RlZmluZSBSX1NFUklBTDFfUkVDX0RBVEFfX2RhdGFfaW5fX0JJVE5SIDAKKyNkZWZpbmUgUl9TRVJJQUwxX1JFQ19EQVRBX19kYXRhX2luX19XSURUSCA4CisKKyNkZWZpbmUgUl9TRVJJQUwxX1hPRkYgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMDZjKQorI2RlZmluZSBSX1NFUklBTDFfWE9GRl9fdHhfc3RvcF9fQklUTlIgOQorI2RlZmluZSBSX1NFUklBTDFfWE9GRl9fdHhfc3RvcF9fV0lEVEggMQorI2RlZmluZSBSX1NFUklBTDFfWE9GRl9fdHhfc3RvcF9fZW5hYmxlIDAKKyNkZWZpbmUgUl9TRVJJQUwxX1hPRkZfX3R4X3N0b3BfX3N0b3AgMQorI2RlZmluZSBSX1NFUklBTDFfWE9GRl9fYXV0b194b2ZmX19CSVROUiA4CisjZGVmaW5lIFJfU0VSSUFMMV9YT0ZGX19hdXRvX3hvZmZfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwxX1hPRkZfX2F1dG9feG9mZl9fZGlzYWJsZSAwCisjZGVmaW5lIFJfU0VSSUFMMV9YT0ZGX19hdXRvX3hvZmZfX2VuYWJsZSAxCisjZGVmaW5lIFJfU0VSSUFMMV9YT0ZGX194b2ZmX2NoYXJfX0JJVE5SIDAKKyNkZWZpbmUgUl9TRVJJQUwxX1hPRkZfX3hvZmZfY2hhcl9fV0lEVEggOAorCisjZGVmaW5lIFJfU0VSSUFMMl9DVFJMIChJT19UWVBFQ0FTVF9VRFdPUkQgMHhiMDAwMDA3MCkKKyNkZWZpbmUgUl9TRVJJQUwyX0NUUkxfX3RyX2JhdWRfX0JJVE5SIDI4CisjZGVmaW5lIFJfU0VSSUFMMl9DVFJMX190cl9iYXVkX19XSURUSCA0CisjZGVmaW5lIFJfU0VSSUFMMl9DVFJMX190cl9iYXVkX19jMzAwSHogMAorI2RlZmluZSBSX1NFUklBTDJfQ1RSTF9fdHJfYmF1ZF9fYzYwMEh6IDEKKyNkZWZpbmUgUl9TRVJJQUwyX0NUUkxfX3RyX2JhdWRfX2MxMjAwSHogMgorI2RlZmluZSBSX1NFUklBTDJfQ1RSTF9fdHJfYmF1ZF9fYzI0MDBIeiAzCisjZGVmaW5lIFJfU0VSSUFMMl9DVFJMX190cl9iYXVkX19jNDgwMEh6IDQKKyNkZWZpbmUgUl9TRVJJQUwyX0NUUkxfX3RyX2JhdWRfX2M5NjAwSHogNQorI2RlZmluZSBSX1NFUklBTDJfQ1RSTF9fdHJfYmF1ZF9fYzE5azJIeiA2CisjZGVmaW5lIFJfU0VSSUFMMl9DVFJMX190cl9iYXVkX19jMzhrNEh6IDcKKyNkZWZpbmUgUl9TRVJJQUwyX0NUUkxfX3RyX2JhdWRfX2M1N2s2SHogOAorI2RlZmluZSBSX1NFUklBTDJfQ1RSTF9fdHJfYmF1ZF9fYzExNWsySHogOQorI2RlZmluZSBSX1NFUklBTDJfQ1RSTF9fdHJfYmF1ZF9fYzIzMGs0SHogMTAKKyNkZWZpbmUgUl9TRVJJQUwyX0NUUkxfX3RyX2JhdWRfX2M0NjBrOEh6IDExCisjZGVmaW5lIFJfU0VSSUFMMl9DVFJMX190cl9iYXVkX19jOTIxazZIeiAxMgorI2RlZmluZSBSX1NFUklBTDJfQ1RSTF9fdHJfYmF1ZF9fYzE4NDNrMkh6IDEzCisjZGVmaW5lIFJfU0VSSUFMMl9DVFJMX190cl9iYXVkX19jNjI1MGtIeiAxNAorI2RlZmluZSBSX1NFUklBTDJfQ1RSTF9fdHJfYmF1ZF9fcmVzZXJ2ZWQgMTUKKyNkZWZpbmUgUl9TRVJJQUwyX0NUUkxfX3JlY19iYXVkX19CSVROUiAyNAorI2RlZmluZSBSX1NFUklBTDJfQ1RSTF9fcmVjX2JhdWRfX1dJRFRIIDQKKyNkZWZpbmUgUl9TRVJJQUwyX0NUUkxfX3JlY19iYXVkX19jMzAwSHogMAorI2RlZmluZSBSX1NFUklBTDJfQ1RSTF9fcmVjX2JhdWRfX2M2MDBIeiAxCisjZGVmaW5lIFJfU0VSSUFMMl9DVFJMX19yZWNfYmF1ZF9fYzEyMDBIeiAyCisjZGVmaW5lIFJfU0VSSUFMMl9DVFJMX19yZWNfYmF1ZF9fYzI0MDBIeiAzCisjZGVmaW5lIFJfU0VSSUFMMl9DVFJMX19yZWNfYmF1ZF9fYzQ4MDBIeiA0CisjZGVmaW5lIFJfU0VSSUFMMl9DVFJMX19yZWNfYmF1ZF9fYzk2MDBIeiA1CisjZGVmaW5lIFJfU0VSSUFMMl9DVFJMX19yZWNfYmF1ZF9fYzE5azJIeiA2CisjZGVmaW5lIFJfU0VSSUFMMl9DVFJMX19yZWNfYmF1ZF9fYzM4azRIeiA3CisjZGVmaW5lIFJfU0VSSUFMMl9DVFJMX19yZWNfYmF1ZF9fYzU3azZIeiA4CisjZGVmaW5lIFJfU0VSSUFMMl9DVFJMX19yZWNfYmF1ZF9fYzExNWsySHogOQorI2RlZmluZSBSX1NFUklBTDJfQ1RSTF9fcmVjX2JhdWRfX2MyMzBrNEh6IDEwCisjZGVmaW5lIFJfU0VSSUFMMl9DVFJMX19yZWNfYmF1ZF9fYzQ2MGs4SHogMTEKKyNkZWZpbmUgUl9TRVJJQUwyX0NUUkxfX3JlY19iYXVkX19jOTIxazZIeiAxMgorI2RlZmluZSBSX1NFUklBTDJfQ1RSTF9fcmVjX2JhdWRfX2MxODQzazJIeiAxMworI2RlZmluZSBSX1NFUklBTDJfQ1RSTF9fcmVjX2JhdWRfX2M2MjUwa0h6IDE0CisjZGVmaW5lIFJfU0VSSUFMMl9DVFJMX19yZWNfYmF1ZF9fcmVzZXJ2ZWQgMTUKKyNkZWZpbmUgUl9TRVJJQUwyX0NUUkxfX2RtYV9lcnJfX0JJVE5SIDIzCisjZGVmaW5lIFJfU0VSSUFMMl9DVFJMX19kbWFfZXJyX19XSURUSCAxCisjZGVmaW5lIFJfU0VSSUFMMl9DVFJMX19kbWFfZXJyX19zdG9wIDAKKyNkZWZpbmUgUl9TRVJJQUwyX0NUUkxfX2RtYV9lcnJfX2lnbm9yZSAxCisjZGVmaW5lIFJfU0VSSUFMMl9DVFJMX19yZWNfZW5hYmxlX19CSVROUiAyMgorI2RlZmluZSBSX1NFUklBTDJfQ1RSTF9fcmVjX2VuYWJsZV9fV0lEVEggMQorI2RlZmluZSBSX1NFUklBTDJfQ1RSTF9fcmVjX2VuYWJsZV9fZGlzYWJsZSAwCisjZGVmaW5lIFJfU0VSSUFMMl9DVFJMX19yZWNfZW5hYmxlX19lbmFibGUgMQorI2RlZmluZSBSX1NFUklBTDJfQ1RSTF9fcnRzX19fQklUTlIgMjEKKyNkZWZpbmUgUl9TRVJJQUwyX0NUUkxfX3J0c19fX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwyX0NUUkxfX3J0c19fX2FjdGl2ZSAwCisjZGVmaW5lIFJfU0VSSUFMMl9DVFJMX19ydHNfX19pbmFjdGl2ZSAxCisjZGVmaW5lIFJfU0VSSUFMMl9DVFJMX19zYW1wbGluZ19fQklUTlIgMjAKKyNkZWZpbmUgUl9TRVJJQUwyX0NUUkxfX3NhbXBsaW5nX19XSURUSCAxCisjZGVmaW5lIFJfU0VSSUFMMl9DVFJMX19zYW1wbGluZ19fbWlkZGxlIDAKKyNkZWZpbmUgUl9TRVJJQUwyX0NUUkxfX3NhbXBsaW5nX19tYWpvcml0eSAxCisjZGVmaW5lIFJfU0VSSUFMMl9DVFJMX19yZWNfc3RpY2tfcGFyX19CSVROUiAxOQorI2RlZmluZSBSX1NFUklBTDJfQ1RSTF9fcmVjX3N0aWNrX3Bhcl9fV0lEVEggMQorI2RlZmluZSBSX1NFUklBTDJfQ1RSTF9fcmVjX3N0aWNrX3Bhcl9fbm9ybWFsIDAKKyNkZWZpbmUgUl9TRVJJQUwyX0NUUkxfX3JlY19zdGlja19wYXJfX3N0aWNrIDEKKyNkZWZpbmUgUl9TRVJJQUwyX0NUUkxfX3JlY19wYXJfX0JJVE5SIDE4CisjZGVmaW5lIFJfU0VSSUFMMl9DVFJMX19yZWNfcGFyX19XSURUSCAxCisjZGVmaW5lIFJfU0VSSUFMMl9DVFJMX19yZWNfcGFyX19ldmVuIDAKKyNkZWZpbmUgUl9TRVJJQUwyX0NUUkxfX3JlY19wYXJfX29kZCAxCisjZGVmaW5lIFJfU0VSSUFMMl9DVFJMX19yZWNfcGFyX2VuX19CSVROUiAxNworI2RlZmluZSBSX1NFUklBTDJfQ1RSTF9fcmVjX3Bhcl9lbl9fV0lEVEggMQorI2RlZmluZSBSX1NFUklBTDJfQ1RSTF9fcmVjX3Bhcl9lbl9fZGlzYWJsZSAwCisjZGVmaW5lIFJfU0VSSUFMMl9DVFJMX19yZWNfcGFyX2VuX19lbmFibGUgMQorI2RlZmluZSBSX1NFUklBTDJfQ1RSTF9fcmVjX2JpdG5yX19CSVROUiAxNgorI2RlZmluZSBSX1NFUklBTDJfQ1RSTF9fcmVjX2JpdG5yX19XSURUSCAxCisjZGVmaW5lIFJfU0VSSUFMMl9DVFJMX19yZWNfYml0bnJfX3JlY184Yml0IDAKKyNkZWZpbmUgUl9TRVJJQUwyX0NUUkxfX3JlY19iaXRucl9fcmVjXzdiaXQgMQorI2RlZmluZSBSX1NFUklBTDJfQ1RSTF9fdHhkX19CSVROUiAxNQorI2RlZmluZSBSX1NFUklBTDJfQ1RSTF9fdHhkX19XSURUSCAxCisjZGVmaW5lIFJfU0VSSUFMMl9DVFJMX190cl9lbmFibGVfX0JJVE5SIDE0CisjZGVmaW5lIFJfU0VSSUFMMl9DVFJMX190cl9lbmFibGVfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwyX0NUUkxfX3RyX2VuYWJsZV9fZGlzYWJsZSAwCisjZGVmaW5lIFJfU0VSSUFMMl9DVFJMX190cl9lbmFibGVfX2VuYWJsZSAxCisjZGVmaW5lIFJfU0VSSUFMMl9DVFJMX19hdXRvX2N0c19fQklUTlIgMTMKKyNkZWZpbmUgUl9TRVJJQUwyX0NUUkxfX2F1dG9fY3RzX19XSURUSCAxCisjZGVmaW5lIFJfU0VSSUFMMl9DVFJMX19hdXRvX2N0c19fZGlzYWJsZWQgMAorI2RlZmluZSBSX1NFUklBTDJfQ1RSTF9fYXV0b19jdHNfX2FjdGl2ZSAxCisjZGVmaW5lIFJfU0VSSUFMMl9DVFJMX19zdG9wX2JpdHNfX0JJVE5SIDEyCisjZGVmaW5lIFJfU0VSSUFMMl9DVFJMX19zdG9wX2JpdHNfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwyX0NUUkxfX3N0b3BfYml0c19fb25lX2JpdCAwCisjZGVmaW5lIFJfU0VSSUFMMl9DVFJMX19zdG9wX2JpdHNfX3R3b19iaXRzIDEKKyNkZWZpbmUgUl9TRVJJQUwyX0NUUkxfX3RyX3N0aWNrX3Bhcl9fQklUTlIgMTEKKyNkZWZpbmUgUl9TRVJJQUwyX0NUUkxfX3RyX3N0aWNrX3Bhcl9fV0lEVEggMQorI2RlZmluZSBSX1NFUklBTDJfQ1RSTF9fdHJfc3RpY2tfcGFyX19ub3JtYWwgMAorI2RlZmluZSBSX1NFUklBTDJfQ1RSTF9fdHJfc3RpY2tfcGFyX19zdGljayAxCisjZGVmaW5lIFJfU0VSSUFMMl9DVFJMX190cl9wYXJfX0JJVE5SIDEwCisjZGVmaW5lIFJfU0VSSUFMMl9DVFJMX190cl9wYXJfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwyX0NUUkxfX3RyX3Bhcl9fZXZlbiAwCisjZGVmaW5lIFJfU0VSSUFMMl9DVFJMX190cl9wYXJfX29kZCAxCisjZGVmaW5lIFJfU0VSSUFMMl9DVFJMX190cl9wYXJfZW5fX0JJVE5SIDkKKyNkZWZpbmUgUl9TRVJJQUwyX0NUUkxfX3RyX3Bhcl9lbl9fV0lEVEggMQorI2RlZmluZSBSX1NFUklBTDJfQ1RSTF9fdHJfcGFyX2VuX19kaXNhYmxlIDAKKyNkZWZpbmUgUl9TRVJJQUwyX0NUUkxfX3RyX3Bhcl9lbl9fZW5hYmxlIDEKKyNkZWZpbmUgUl9TRVJJQUwyX0NUUkxfX3RyX2JpdG5yX19CSVROUiA4CisjZGVmaW5lIFJfU0VSSUFMMl9DVFJMX190cl9iaXRucl9fV0lEVEggMQorI2RlZmluZSBSX1NFUklBTDJfQ1RSTF9fdHJfYml0bnJfX3RyXzhiaXQgMAorI2RlZmluZSBSX1NFUklBTDJfQ1RSTF9fdHJfYml0bnJfX3RyXzdiaXQgMQorI2RlZmluZSBSX1NFUklBTDJfQ1RSTF9fZGF0YV9vdXRfX0JJVE5SIDAKKyNkZWZpbmUgUl9TRVJJQUwyX0NUUkxfX2RhdGFfb3V0X19XSURUSCA4CisKKyNkZWZpbmUgUl9TRVJJQUwyX0JBVUQgKElPX1RZUEVDQVNUX0JZVEUgMHhiMDAwMDA3MykKKyNkZWZpbmUgUl9TRVJJQUwyX0JBVURfX3RyX2JhdWRfX0JJVE5SIDQKKyNkZWZpbmUgUl9TRVJJQUwyX0JBVURfX3RyX2JhdWRfX1dJRFRIIDQKKyNkZWZpbmUgUl9TRVJJQUwyX0JBVURfX3RyX2JhdWRfX2MzMDBIeiAwCisjZGVmaW5lIFJfU0VSSUFMMl9CQVVEX190cl9iYXVkX19jNjAwSHogMQorI2RlZmluZSBSX1NFUklBTDJfQkFVRF9fdHJfYmF1ZF9fYzEyMDBIeiAyCisjZGVmaW5lIFJfU0VSSUFMMl9CQVVEX190cl9iYXVkX19jMjQwMEh6IDMKKyNkZWZpbmUgUl9TRVJJQUwyX0JBVURfX3RyX2JhdWRfX2M0ODAwSHogNAorI2RlZmluZSBSX1NFUklBTDJfQkFVRF9fdHJfYmF1ZF9fYzk2MDBIeiA1CisjZGVmaW5lIFJfU0VSSUFMMl9CQVVEX190cl9iYXVkX19jMTlrMkh6IDYKKyNkZWZpbmUgUl9TRVJJQUwyX0JBVURfX3RyX2JhdWRfX2MzOGs0SHogNworI2RlZmluZSBSX1NFUklBTDJfQkFVRF9fdHJfYmF1ZF9fYzU3azZIeiA4CisjZGVmaW5lIFJfU0VSSUFMMl9CQVVEX190cl9iYXVkX19jMTE1azJIeiA5CisjZGVmaW5lIFJfU0VSSUFMMl9CQVVEX190cl9iYXVkX19jMjMwazRIeiAxMAorI2RlZmluZSBSX1NFUklBTDJfQkFVRF9fdHJfYmF1ZF9fYzQ2MGs4SHogMTEKKyNkZWZpbmUgUl9TRVJJQUwyX0JBVURfX3RyX2JhdWRfX2M5MjFrNkh6IDEyCisjZGVmaW5lIFJfU0VSSUFMMl9CQVVEX190cl9iYXVkX19jMTg0M2sySHogMTMKKyNkZWZpbmUgUl9TRVJJQUwyX0JBVURfX3RyX2JhdWRfX2M2MjUwa0h6IDE0CisjZGVmaW5lIFJfU0VSSUFMMl9CQVVEX190cl9iYXVkX19yZXNlcnZlZCAxNQorI2RlZmluZSBSX1NFUklBTDJfQkFVRF9fcmVjX2JhdWRfX0JJVE5SIDAKKyNkZWZpbmUgUl9TRVJJQUwyX0JBVURfX3JlY19iYXVkX19XSURUSCA0CisjZGVmaW5lIFJfU0VSSUFMMl9CQVVEX19yZWNfYmF1ZF9fYzMwMEh6IDAKKyNkZWZpbmUgUl9TRVJJQUwyX0JBVURfX3JlY19iYXVkX19jNjAwSHogMQorI2RlZmluZSBSX1NFUklBTDJfQkFVRF9fcmVjX2JhdWRfX2MxMjAwSHogMgorI2RlZmluZSBSX1NFUklBTDJfQkFVRF9fcmVjX2JhdWRfX2MyNDAwSHogMworI2RlZmluZSBSX1NFUklBTDJfQkFVRF9fcmVjX2JhdWRfX2M0ODAwSHogNAorI2RlZmluZSBSX1NFUklBTDJfQkFVRF9fcmVjX2JhdWRfX2M5NjAwSHogNQorI2RlZmluZSBSX1NFUklBTDJfQkFVRF9fcmVjX2JhdWRfX2MxOWsySHogNgorI2RlZmluZSBSX1NFUklBTDJfQkFVRF9fcmVjX2JhdWRfX2MzOGs0SHogNworI2RlZmluZSBSX1NFUklBTDJfQkFVRF9fcmVjX2JhdWRfX2M1N2s2SHogOAorI2RlZmluZSBSX1NFUklBTDJfQkFVRF9fcmVjX2JhdWRfX2MxMTVrMkh6IDkKKyNkZWZpbmUgUl9TRVJJQUwyX0JBVURfX3JlY19iYXVkX19jMjMwazRIeiAxMAorI2RlZmluZSBSX1NFUklBTDJfQkFVRF9fcmVjX2JhdWRfX2M0NjBrOEh6IDExCisjZGVmaW5lIFJfU0VSSUFMMl9CQVVEX19yZWNfYmF1ZF9fYzkyMWs2SHogMTIKKyNkZWZpbmUgUl9TRVJJQUwyX0JBVURfX3JlY19iYXVkX19jMTg0M2sySHogMTMKKyNkZWZpbmUgUl9TRVJJQUwyX0JBVURfX3JlY19iYXVkX19jNjI1MGtIeiAxNAorI2RlZmluZSBSX1NFUklBTDJfQkFVRF9fcmVjX2JhdWRfX3Jlc2VydmVkIDE1CisKKyNkZWZpbmUgUl9TRVJJQUwyX1JFQ19DVFJMIChJT19UWVBFQ0FTVF9CWVRFIDB4YjAwMDAwNzIpCisjZGVmaW5lIFJfU0VSSUFMMl9SRUNfQ1RSTF9fZG1hX2Vycl9fQklUTlIgNworI2RlZmluZSBSX1NFUklBTDJfUkVDX0NUUkxfX2RtYV9lcnJfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwyX1JFQ19DVFJMX19kbWFfZXJyX19zdG9wIDAKKyNkZWZpbmUgUl9TRVJJQUwyX1JFQ19DVFJMX19kbWFfZXJyX19pZ25vcmUgMQorI2RlZmluZSBSX1NFUklBTDJfUkVDX0NUUkxfX3JlY19lbmFibGVfX0JJVE5SIDYKKyNkZWZpbmUgUl9TRVJJQUwyX1JFQ19DVFJMX19yZWNfZW5hYmxlX19XSURUSCAxCisjZGVmaW5lIFJfU0VSSUFMMl9SRUNfQ1RSTF9fcmVjX2VuYWJsZV9fZGlzYWJsZSAwCisjZGVmaW5lIFJfU0VSSUFMMl9SRUNfQ1RSTF9fcmVjX2VuYWJsZV9fZW5hYmxlIDEKKyNkZWZpbmUgUl9TRVJJQUwyX1JFQ19DVFJMX19ydHNfX19CSVROUiA1CisjZGVmaW5lIFJfU0VSSUFMMl9SRUNfQ1RSTF9fcnRzX19fV0lEVEggMQorI2RlZmluZSBSX1NFUklBTDJfUkVDX0NUUkxfX3J0c19fX2FjdGl2ZSAwCisjZGVmaW5lIFJfU0VSSUFMMl9SRUNfQ1RSTF9fcnRzX19faW5hY3RpdmUgMQorI2RlZmluZSBSX1NFUklBTDJfUkVDX0NUUkxfX3NhbXBsaW5nX19CSVROUiA0CisjZGVmaW5lIFJfU0VSSUFMMl9SRUNfQ1RSTF9fc2FtcGxpbmdfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwyX1JFQ19DVFJMX19zYW1wbGluZ19fbWlkZGxlIDAKKyNkZWZpbmUgUl9TRVJJQUwyX1JFQ19DVFJMX19zYW1wbGluZ19fbWFqb3JpdHkgMQorI2RlZmluZSBSX1NFUklBTDJfUkVDX0NUUkxfX3JlY19zdGlja19wYXJfX0JJVE5SIDMKKyNkZWZpbmUgUl9TRVJJQUwyX1JFQ19DVFJMX19yZWNfc3RpY2tfcGFyX19XSURUSCAxCisjZGVmaW5lIFJfU0VSSUFMMl9SRUNfQ1RSTF9fcmVjX3N0aWNrX3Bhcl9fbm9ybWFsIDAKKyNkZWZpbmUgUl9TRVJJQUwyX1JFQ19DVFJMX19yZWNfc3RpY2tfcGFyX19zdGljayAxCisjZGVmaW5lIFJfU0VSSUFMMl9SRUNfQ1RSTF9fcmVjX3Bhcl9fQklUTlIgMgorI2RlZmluZSBSX1NFUklBTDJfUkVDX0NUUkxfX3JlY19wYXJfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwyX1JFQ19DVFJMX19yZWNfcGFyX19ldmVuIDAKKyNkZWZpbmUgUl9TRVJJQUwyX1JFQ19DVFJMX19yZWNfcGFyX19vZGQgMQorI2RlZmluZSBSX1NFUklBTDJfUkVDX0NUUkxfX3JlY19wYXJfZW5fX0JJVE5SIDEKKyNkZWZpbmUgUl9TRVJJQUwyX1JFQ19DVFJMX19yZWNfcGFyX2VuX19XSURUSCAxCisjZGVmaW5lIFJfU0VSSUFMMl9SRUNfQ1RSTF9fcmVjX3Bhcl9lbl9fZGlzYWJsZSAwCisjZGVmaW5lIFJfU0VSSUFMMl9SRUNfQ1RSTF9fcmVjX3Bhcl9lbl9fZW5hYmxlIDEKKyNkZWZpbmUgUl9TRVJJQUwyX1JFQ19DVFJMX19yZWNfYml0bnJfX0JJVE5SIDAKKyNkZWZpbmUgUl9TRVJJQUwyX1JFQ19DVFJMX19yZWNfYml0bnJfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwyX1JFQ19DVFJMX19yZWNfYml0bnJfX3JlY184Yml0IDAKKyNkZWZpbmUgUl9TRVJJQUwyX1JFQ19DVFJMX19yZWNfYml0bnJfX3JlY183Yml0IDEKKworI2RlZmluZSBSX1NFUklBTDJfVFJfQ1RSTCAoSU9fVFlQRUNBU1RfQllURSAweGIwMDAwMDcxKQorI2RlZmluZSBSX1NFUklBTDJfVFJfQ1RSTF9fdHhkX19CSVROUiA3CisjZGVmaW5lIFJfU0VSSUFMMl9UUl9DVFJMX190eGRfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwyX1RSX0NUUkxfX3RyX2VuYWJsZV9fQklUTlIgNgorI2RlZmluZSBSX1NFUklBTDJfVFJfQ1RSTF9fdHJfZW5hYmxlX19XSURUSCAxCisjZGVmaW5lIFJfU0VSSUFMMl9UUl9DVFJMX190cl9lbmFibGVfX2Rpc2FibGUgMAorI2RlZmluZSBSX1NFUklBTDJfVFJfQ1RSTF9fdHJfZW5hYmxlX19lbmFibGUgMQorI2RlZmluZSBSX1NFUklBTDJfVFJfQ1RSTF9fYXV0b19jdHNfX0JJVE5SIDUKKyNkZWZpbmUgUl9TRVJJQUwyX1RSX0NUUkxfX2F1dG9fY3RzX19XSURUSCAxCisjZGVmaW5lIFJfU0VSSUFMMl9UUl9DVFJMX19hdXRvX2N0c19fZGlzYWJsZWQgMAorI2RlZmluZSBSX1NFUklBTDJfVFJfQ1RSTF9fYXV0b19jdHNfX2FjdGl2ZSAxCisjZGVmaW5lIFJfU0VSSUFMMl9UUl9DVFJMX19zdG9wX2JpdHNfX0JJVE5SIDQKKyNkZWZpbmUgUl9TRVJJQUwyX1RSX0NUUkxfX3N0b3BfYml0c19fV0lEVEggMQorI2RlZmluZSBSX1NFUklBTDJfVFJfQ1RSTF9fc3RvcF9iaXRzX19vbmVfYml0IDAKKyNkZWZpbmUgUl9TRVJJQUwyX1RSX0NUUkxfX3N0b3BfYml0c19fdHdvX2JpdHMgMQorI2RlZmluZSBSX1NFUklBTDJfVFJfQ1RSTF9fdHJfc3RpY2tfcGFyX19CSVROUiAzCisjZGVmaW5lIFJfU0VSSUFMMl9UUl9DVFJMX190cl9zdGlja19wYXJfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwyX1RSX0NUUkxfX3RyX3N0aWNrX3Bhcl9fbm9ybWFsIDAKKyNkZWZpbmUgUl9TRVJJQUwyX1RSX0NUUkxfX3RyX3N0aWNrX3Bhcl9fc3RpY2sgMQorI2RlZmluZSBSX1NFUklBTDJfVFJfQ1RSTF9fdHJfcGFyX19CSVROUiAyCisjZGVmaW5lIFJfU0VSSUFMMl9UUl9DVFJMX190cl9wYXJfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwyX1RSX0NUUkxfX3RyX3Bhcl9fZXZlbiAwCisjZGVmaW5lIFJfU0VSSUFMMl9UUl9DVFJMX190cl9wYXJfX29kZCAxCisjZGVmaW5lIFJfU0VSSUFMMl9UUl9DVFJMX190cl9wYXJfZW5fX0JJVE5SIDEKKyNkZWZpbmUgUl9TRVJJQUwyX1RSX0NUUkxfX3RyX3Bhcl9lbl9fV0lEVEggMQorI2RlZmluZSBSX1NFUklBTDJfVFJfQ1RSTF9fdHJfcGFyX2VuX19kaXNhYmxlIDAKKyNkZWZpbmUgUl9TRVJJQUwyX1RSX0NUUkxfX3RyX3Bhcl9lbl9fZW5hYmxlIDEKKyNkZWZpbmUgUl9TRVJJQUwyX1RSX0NUUkxfX3RyX2JpdG5yX19CSVROUiAwCisjZGVmaW5lIFJfU0VSSUFMMl9UUl9DVFJMX190cl9iaXRucl9fV0lEVEggMQorI2RlZmluZSBSX1NFUklBTDJfVFJfQ1RSTF9fdHJfYml0bnJfX3RyXzhiaXQgMAorI2RlZmluZSBSX1NFUklBTDJfVFJfQ1RSTF9fdHJfYml0bnJfX3RyXzdiaXQgMQorCisjZGVmaW5lIFJfU0VSSUFMMl9UUl9EQVRBIChJT19UWVBFQ0FTVF9CWVRFIDB4YjAwMDAwNzApCisjZGVmaW5lIFJfU0VSSUFMMl9UUl9EQVRBX19kYXRhX291dF9fQklUTlIgMAorI2RlZmluZSBSX1NFUklBTDJfVFJfREFUQV9fZGF0YV9vdXRfX1dJRFRIIDgKKworI2RlZmluZSBSX1NFUklBTDJfUkVBRCAoSU9fVFlQRUNBU1RfUk9fVURXT1JEIDB4YjAwMDAwNzApCisjZGVmaW5lIFJfU0VSSUFMMl9SRUFEX194b2ZmX2RldGVjdF9fQklUTlIgMTUKKyNkZWZpbmUgUl9TRVJJQUwyX1JFQURfX3hvZmZfZGV0ZWN0X19XSURUSCAxCisjZGVmaW5lIFJfU0VSSUFMMl9SRUFEX194b2ZmX2RldGVjdF9fbm9feG9mZiAwCisjZGVmaW5lIFJfU0VSSUFMMl9SRUFEX194b2ZmX2RldGVjdF9feG9mZiAxCisjZGVmaW5lIFJfU0VSSUFMMl9SRUFEX19jdHNfX19CSVROUiAxNAorI2RlZmluZSBSX1NFUklBTDJfUkVBRF9fY3RzX19fV0lEVEggMQorI2RlZmluZSBSX1NFUklBTDJfUkVBRF9fY3RzX19fYWN0aXZlIDAKKyNkZWZpbmUgUl9TRVJJQUwyX1JFQURfX2N0c19fX2luYWN0aXZlIDEKKyNkZWZpbmUgUl9TRVJJQUwyX1JFQURfX3RyX3JlYWR5X19CSVROUiAxMworI2RlZmluZSBSX1NFUklBTDJfUkVBRF9fdHJfcmVhZHlfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwyX1JFQURfX3RyX3JlYWR5X19mdWxsIDAKKyNkZWZpbmUgUl9TRVJJQUwyX1JFQURfX3RyX3JlYWR5X19yZWFkeSAxCisjZGVmaW5lIFJfU0VSSUFMMl9SRUFEX19yeGRfX0JJVE5SIDEyCisjZGVmaW5lIFJfU0VSSUFMMl9SRUFEX19yeGRfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwyX1JFQURfX292ZXJydW5fX0JJVE5SIDExCisjZGVmaW5lIFJfU0VSSUFMMl9SRUFEX19vdmVycnVuX19XSURUSCAxCisjZGVmaW5lIFJfU0VSSUFMMl9SRUFEX19vdmVycnVuX19ubyAwCisjZGVmaW5lIFJfU0VSSUFMMl9SRUFEX19vdmVycnVuX195ZXMgMQorI2RlZmluZSBSX1NFUklBTDJfUkVBRF9fcGFyX2Vycl9fQklUTlIgMTAKKyNkZWZpbmUgUl9TRVJJQUwyX1JFQURfX3Bhcl9lcnJfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwyX1JFQURfX3Bhcl9lcnJfX25vIDAKKyNkZWZpbmUgUl9TRVJJQUwyX1JFQURfX3Bhcl9lcnJfX3llcyAxCisjZGVmaW5lIFJfU0VSSUFMMl9SRUFEX19mcmFtaW5nX2Vycl9fQklUTlIgOQorI2RlZmluZSBSX1NFUklBTDJfUkVBRF9fZnJhbWluZ19lcnJfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwyX1JFQURfX2ZyYW1pbmdfZXJyX19ubyAwCisjZGVmaW5lIFJfU0VSSUFMMl9SRUFEX19mcmFtaW5nX2Vycl9feWVzIDEKKyNkZWZpbmUgUl9TRVJJQUwyX1JFQURfX2RhdGFfYXZhaWxfX0JJVE5SIDgKKyNkZWZpbmUgUl9TRVJJQUwyX1JFQURfX2RhdGFfYXZhaWxfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwyX1JFQURfX2RhdGFfYXZhaWxfX25vIDAKKyNkZWZpbmUgUl9TRVJJQUwyX1JFQURfX2RhdGFfYXZhaWxfX3llcyAxCisjZGVmaW5lIFJfU0VSSUFMMl9SRUFEX19kYXRhX2luX19CSVROUiAwCisjZGVmaW5lIFJfU0VSSUFMMl9SRUFEX19kYXRhX2luX19XSURUSCA4CisKKyNkZWZpbmUgUl9TRVJJQUwyX1NUQVRVUyAoSU9fVFlQRUNBU1RfUk9fQllURSAweGIwMDAwMDcxKQorI2RlZmluZSBSX1NFUklBTDJfU1RBVFVTX194b2ZmX2RldGVjdF9fQklUTlIgNworI2RlZmluZSBSX1NFUklBTDJfU1RBVFVTX194b2ZmX2RldGVjdF9fV0lEVEggMQorI2RlZmluZSBSX1NFUklBTDJfU1RBVFVTX194b2ZmX2RldGVjdF9fbm9feG9mZiAwCisjZGVmaW5lIFJfU0VSSUFMMl9TVEFUVVNfX3hvZmZfZGV0ZWN0X194b2ZmIDEKKyNkZWZpbmUgUl9TRVJJQUwyX1NUQVRVU19fY3RzX19fQklUTlIgNgorI2RlZmluZSBSX1NFUklBTDJfU1RBVFVTX19jdHNfX19XSURUSCAxCisjZGVmaW5lIFJfU0VSSUFMMl9TVEFUVVNfX2N0c19fX2FjdGl2ZSAwCisjZGVmaW5lIFJfU0VSSUFMMl9TVEFUVVNfX2N0c19fX2luYWN0aXZlIDEKKyNkZWZpbmUgUl9TRVJJQUwyX1NUQVRVU19fdHJfcmVhZHlfX0JJVE5SIDUKKyNkZWZpbmUgUl9TRVJJQUwyX1NUQVRVU19fdHJfcmVhZHlfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwyX1NUQVRVU19fdHJfcmVhZHlfX2Z1bGwgMAorI2RlZmluZSBSX1NFUklBTDJfU1RBVFVTX190cl9yZWFkeV9fcmVhZHkgMQorI2RlZmluZSBSX1NFUklBTDJfU1RBVFVTX19yeGRfX0JJVE5SIDQKKyNkZWZpbmUgUl9TRVJJQUwyX1NUQVRVU19fcnhkX19XSURUSCAxCisjZGVmaW5lIFJfU0VSSUFMMl9TVEFUVVNfX292ZXJydW5fX0JJVE5SIDMKKyNkZWZpbmUgUl9TRVJJQUwyX1NUQVRVU19fb3ZlcnJ1bl9fV0lEVEggMQorI2RlZmluZSBSX1NFUklBTDJfU1RBVFVTX19vdmVycnVuX19ubyAwCisjZGVmaW5lIFJfU0VSSUFMMl9TVEFUVVNfX292ZXJydW5fX3llcyAxCisjZGVmaW5lIFJfU0VSSUFMMl9TVEFUVVNfX3Bhcl9lcnJfX0JJVE5SIDIKKyNkZWZpbmUgUl9TRVJJQUwyX1NUQVRVU19fcGFyX2Vycl9fV0lEVEggMQorI2RlZmluZSBSX1NFUklBTDJfU1RBVFVTX19wYXJfZXJyX19ubyAwCisjZGVmaW5lIFJfU0VSSUFMMl9TVEFUVVNfX3Bhcl9lcnJfX3llcyAxCisjZGVmaW5lIFJfU0VSSUFMMl9TVEFUVVNfX2ZyYW1pbmdfZXJyX19CSVROUiAxCisjZGVmaW5lIFJfU0VSSUFMMl9TVEFUVVNfX2ZyYW1pbmdfZXJyX19XSURUSCAxCisjZGVmaW5lIFJfU0VSSUFMMl9TVEFUVVNfX2ZyYW1pbmdfZXJyX19ubyAwCisjZGVmaW5lIFJfU0VSSUFMMl9TVEFUVVNfX2ZyYW1pbmdfZXJyX195ZXMgMQorI2RlZmluZSBSX1NFUklBTDJfU1RBVFVTX19kYXRhX2F2YWlsX19CSVROUiAwCisjZGVmaW5lIFJfU0VSSUFMMl9TVEFUVVNfX2RhdGFfYXZhaWxfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwyX1NUQVRVU19fZGF0YV9hdmFpbF9fbm8gMAorI2RlZmluZSBSX1NFUklBTDJfU1RBVFVTX19kYXRhX2F2YWlsX195ZXMgMQorCisjZGVmaW5lIFJfU0VSSUFMMl9SRUNfREFUQSAoSU9fVFlQRUNBU1RfUk9fQllURSAweGIwMDAwMDcwKQorI2RlZmluZSBSX1NFUklBTDJfUkVDX0RBVEFfX2RhdGFfaW5fX0JJVE5SIDAKKyNkZWZpbmUgUl9TRVJJQUwyX1JFQ19EQVRBX19kYXRhX2luX19XSURUSCA4CisKKyNkZWZpbmUgUl9TRVJJQUwyX1hPRkYgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMDc0KQorI2RlZmluZSBSX1NFUklBTDJfWE9GRl9fdHhfc3RvcF9fQklUTlIgOQorI2RlZmluZSBSX1NFUklBTDJfWE9GRl9fdHhfc3RvcF9fV0lEVEggMQorI2RlZmluZSBSX1NFUklBTDJfWE9GRl9fdHhfc3RvcF9fZW5hYmxlIDAKKyNkZWZpbmUgUl9TRVJJQUwyX1hPRkZfX3R4X3N0b3BfX3N0b3AgMQorI2RlZmluZSBSX1NFUklBTDJfWE9GRl9fYXV0b194b2ZmX19CSVROUiA4CisjZGVmaW5lIFJfU0VSSUFMMl9YT0ZGX19hdXRvX3hvZmZfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwyX1hPRkZfX2F1dG9feG9mZl9fZGlzYWJsZSAwCisjZGVmaW5lIFJfU0VSSUFMMl9YT0ZGX19hdXRvX3hvZmZfX2VuYWJsZSAxCisjZGVmaW5lIFJfU0VSSUFMMl9YT0ZGX194b2ZmX2NoYXJfX0JJVE5SIDAKKyNkZWZpbmUgUl9TRVJJQUwyX1hPRkZfX3hvZmZfY2hhcl9fV0lEVEggOAorCisjZGVmaW5lIFJfU0VSSUFMM19DVFJMIChJT19UWVBFQ0FTVF9VRFdPUkQgMHhiMDAwMDA3OCkKKyNkZWZpbmUgUl9TRVJJQUwzX0NUUkxfX3RyX2JhdWRfX0JJVE5SIDI4CisjZGVmaW5lIFJfU0VSSUFMM19DVFJMX190cl9iYXVkX19XSURUSCA0CisjZGVmaW5lIFJfU0VSSUFMM19DVFJMX190cl9iYXVkX19jMzAwSHogMAorI2RlZmluZSBSX1NFUklBTDNfQ1RSTF9fdHJfYmF1ZF9fYzYwMEh6IDEKKyNkZWZpbmUgUl9TRVJJQUwzX0NUUkxfX3RyX2JhdWRfX2MxMjAwSHogMgorI2RlZmluZSBSX1NFUklBTDNfQ1RSTF9fdHJfYmF1ZF9fYzI0MDBIeiAzCisjZGVmaW5lIFJfU0VSSUFMM19DVFJMX190cl9iYXVkX19jNDgwMEh6IDQKKyNkZWZpbmUgUl9TRVJJQUwzX0NUUkxfX3RyX2JhdWRfX2M5NjAwSHogNQorI2RlZmluZSBSX1NFUklBTDNfQ1RSTF9fdHJfYmF1ZF9fYzE5azJIeiA2CisjZGVmaW5lIFJfU0VSSUFMM19DVFJMX190cl9iYXVkX19jMzhrNEh6IDcKKyNkZWZpbmUgUl9TRVJJQUwzX0NUUkxfX3RyX2JhdWRfX2M1N2s2SHogOAorI2RlZmluZSBSX1NFUklBTDNfQ1RSTF9fdHJfYmF1ZF9fYzExNWsySHogOQorI2RlZmluZSBSX1NFUklBTDNfQ1RSTF9fdHJfYmF1ZF9fYzIzMGs0SHogMTAKKyNkZWZpbmUgUl9TRVJJQUwzX0NUUkxfX3RyX2JhdWRfX2M0NjBrOEh6IDExCisjZGVmaW5lIFJfU0VSSUFMM19DVFJMX190cl9iYXVkX19jOTIxazZIeiAxMgorI2RlZmluZSBSX1NFUklBTDNfQ1RSTF9fdHJfYmF1ZF9fYzE4NDNrMkh6IDEzCisjZGVmaW5lIFJfU0VSSUFMM19DVFJMX190cl9iYXVkX19jNjI1MGtIeiAxNAorI2RlZmluZSBSX1NFUklBTDNfQ1RSTF9fdHJfYmF1ZF9fcmVzZXJ2ZWQgMTUKKyNkZWZpbmUgUl9TRVJJQUwzX0NUUkxfX3JlY19iYXVkX19CSVROUiAyNAorI2RlZmluZSBSX1NFUklBTDNfQ1RSTF9fcmVjX2JhdWRfX1dJRFRIIDQKKyNkZWZpbmUgUl9TRVJJQUwzX0NUUkxfX3JlY19iYXVkX19jMzAwSHogMAorI2RlZmluZSBSX1NFUklBTDNfQ1RSTF9fcmVjX2JhdWRfX2M2MDBIeiAxCisjZGVmaW5lIFJfU0VSSUFMM19DVFJMX19yZWNfYmF1ZF9fYzEyMDBIeiAyCisjZGVmaW5lIFJfU0VSSUFMM19DVFJMX19yZWNfYmF1ZF9fYzI0MDBIeiAzCisjZGVmaW5lIFJfU0VSSUFMM19DVFJMX19yZWNfYmF1ZF9fYzQ4MDBIeiA0CisjZGVmaW5lIFJfU0VSSUFMM19DVFJMX19yZWNfYmF1ZF9fYzk2MDBIeiA1CisjZGVmaW5lIFJfU0VSSUFMM19DVFJMX19yZWNfYmF1ZF9fYzE5azJIeiA2CisjZGVmaW5lIFJfU0VSSUFMM19DVFJMX19yZWNfYmF1ZF9fYzM4azRIeiA3CisjZGVmaW5lIFJfU0VSSUFMM19DVFJMX19yZWNfYmF1ZF9fYzU3azZIeiA4CisjZGVmaW5lIFJfU0VSSUFMM19DVFJMX19yZWNfYmF1ZF9fYzExNWsySHogOQorI2RlZmluZSBSX1NFUklBTDNfQ1RSTF9fcmVjX2JhdWRfX2MyMzBrNEh6IDEwCisjZGVmaW5lIFJfU0VSSUFMM19DVFJMX19yZWNfYmF1ZF9fYzQ2MGs4SHogMTEKKyNkZWZpbmUgUl9TRVJJQUwzX0NUUkxfX3JlY19iYXVkX19jOTIxazZIeiAxMgorI2RlZmluZSBSX1NFUklBTDNfQ1RSTF9fcmVjX2JhdWRfX2MxODQzazJIeiAxMworI2RlZmluZSBSX1NFUklBTDNfQ1RSTF9fcmVjX2JhdWRfX2M2MjUwa0h6IDE0CisjZGVmaW5lIFJfU0VSSUFMM19DVFJMX19yZWNfYmF1ZF9fcmVzZXJ2ZWQgMTUKKyNkZWZpbmUgUl9TRVJJQUwzX0NUUkxfX2RtYV9lcnJfX0JJVE5SIDIzCisjZGVmaW5lIFJfU0VSSUFMM19DVFJMX19kbWFfZXJyX19XSURUSCAxCisjZGVmaW5lIFJfU0VSSUFMM19DVFJMX19kbWFfZXJyX19zdG9wIDAKKyNkZWZpbmUgUl9TRVJJQUwzX0NUUkxfX2RtYV9lcnJfX2lnbm9yZSAxCisjZGVmaW5lIFJfU0VSSUFMM19DVFJMX19yZWNfZW5hYmxlX19CSVROUiAyMgorI2RlZmluZSBSX1NFUklBTDNfQ1RSTF9fcmVjX2VuYWJsZV9fV0lEVEggMQorI2RlZmluZSBSX1NFUklBTDNfQ1RSTF9fcmVjX2VuYWJsZV9fZGlzYWJsZSAwCisjZGVmaW5lIFJfU0VSSUFMM19DVFJMX19yZWNfZW5hYmxlX19lbmFibGUgMQorI2RlZmluZSBSX1NFUklBTDNfQ1RSTF9fcnRzX19fQklUTlIgMjEKKyNkZWZpbmUgUl9TRVJJQUwzX0NUUkxfX3J0c19fX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwzX0NUUkxfX3J0c19fX2FjdGl2ZSAwCisjZGVmaW5lIFJfU0VSSUFMM19DVFJMX19ydHNfX19pbmFjdGl2ZSAxCisjZGVmaW5lIFJfU0VSSUFMM19DVFJMX19zYW1wbGluZ19fQklUTlIgMjAKKyNkZWZpbmUgUl9TRVJJQUwzX0NUUkxfX3NhbXBsaW5nX19XSURUSCAxCisjZGVmaW5lIFJfU0VSSUFMM19DVFJMX19zYW1wbGluZ19fbWlkZGxlIDAKKyNkZWZpbmUgUl9TRVJJQUwzX0NUUkxfX3NhbXBsaW5nX19tYWpvcml0eSAxCisjZGVmaW5lIFJfU0VSSUFMM19DVFJMX19yZWNfc3RpY2tfcGFyX19CSVROUiAxOQorI2RlZmluZSBSX1NFUklBTDNfQ1RSTF9fcmVjX3N0aWNrX3Bhcl9fV0lEVEggMQorI2RlZmluZSBSX1NFUklBTDNfQ1RSTF9fcmVjX3N0aWNrX3Bhcl9fbm9ybWFsIDAKKyNkZWZpbmUgUl9TRVJJQUwzX0NUUkxfX3JlY19zdGlja19wYXJfX3N0aWNrIDEKKyNkZWZpbmUgUl9TRVJJQUwzX0NUUkxfX3JlY19wYXJfX0JJVE5SIDE4CisjZGVmaW5lIFJfU0VSSUFMM19DVFJMX19yZWNfcGFyX19XSURUSCAxCisjZGVmaW5lIFJfU0VSSUFMM19DVFJMX19yZWNfcGFyX19ldmVuIDAKKyNkZWZpbmUgUl9TRVJJQUwzX0NUUkxfX3JlY19wYXJfX29kZCAxCisjZGVmaW5lIFJfU0VSSUFMM19DVFJMX19yZWNfcGFyX2VuX19CSVROUiAxNworI2RlZmluZSBSX1NFUklBTDNfQ1RSTF9fcmVjX3Bhcl9lbl9fV0lEVEggMQorI2RlZmluZSBSX1NFUklBTDNfQ1RSTF9fcmVjX3Bhcl9lbl9fZGlzYWJsZSAwCisjZGVmaW5lIFJfU0VSSUFMM19DVFJMX19yZWNfcGFyX2VuX19lbmFibGUgMQorI2RlZmluZSBSX1NFUklBTDNfQ1RSTF9fcmVjX2JpdG5yX19CSVROUiAxNgorI2RlZmluZSBSX1NFUklBTDNfQ1RSTF9fcmVjX2JpdG5yX19XSURUSCAxCisjZGVmaW5lIFJfU0VSSUFMM19DVFJMX19yZWNfYml0bnJfX3JlY184Yml0IDAKKyNkZWZpbmUgUl9TRVJJQUwzX0NUUkxfX3JlY19iaXRucl9fcmVjXzdiaXQgMQorI2RlZmluZSBSX1NFUklBTDNfQ1RSTF9fdHhkX19CSVROUiAxNQorI2RlZmluZSBSX1NFUklBTDNfQ1RSTF9fdHhkX19XSURUSCAxCisjZGVmaW5lIFJfU0VSSUFMM19DVFJMX190cl9lbmFibGVfX0JJVE5SIDE0CisjZGVmaW5lIFJfU0VSSUFMM19DVFJMX190cl9lbmFibGVfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwzX0NUUkxfX3RyX2VuYWJsZV9fZGlzYWJsZSAwCisjZGVmaW5lIFJfU0VSSUFMM19DVFJMX190cl9lbmFibGVfX2VuYWJsZSAxCisjZGVmaW5lIFJfU0VSSUFMM19DVFJMX19hdXRvX2N0c19fQklUTlIgMTMKKyNkZWZpbmUgUl9TRVJJQUwzX0NUUkxfX2F1dG9fY3RzX19XSURUSCAxCisjZGVmaW5lIFJfU0VSSUFMM19DVFJMX19hdXRvX2N0c19fZGlzYWJsZWQgMAorI2RlZmluZSBSX1NFUklBTDNfQ1RSTF9fYXV0b19jdHNfX2FjdGl2ZSAxCisjZGVmaW5lIFJfU0VSSUFMM19DVFJMX19zdG9wX2JpdHNfX0JJVE5SIDEyCisjZGVmaW5lIFJfU0VSSUFMM19DVFJMX19zdG9wX2JpdHNfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwzX0NUUkxfX3N0b3BfYml0c19fb25lX2JpdCAwCisjZGVmaW5lIFJfU0VSSUFMM19DVFJMX19zdG9wX2JpdHNfX3R3b19iaXRzIDEKKyNkZWZpbmUgUl9TRVJJQUwzX0NUUkxfX3RyX3N0aWNrX3Bhcl9fQklUTlIgMTEKKyNkZWZpbmUgUl9TRVJJQUwzX0NUUkxfX3RyX3N0aWNrX3Bhcl9fV0lEVEggMQorI2RlZmluZSBSX1NFUklBTDNfQ1RSTF9fdHJfc3RpY2tfcGFyX19ub3JtYWwgMAorI2RlZmluZSBSX1NFUklBTDNfQ1RSTF9fdHJfc3RpY2tfcGFyX19zdGljayAxCisjZGVmaW5lIFJfU0VSSUFMM19DVFJMX190cl9wYXJfX0JJVE5SIDEwCisjZGVmaW5lIFJfU0VSSUFMM19DVFJMX190cl9wYXJfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwzX0NUUkxfX3RyX3Bhcl9fZXZlbiAwCisjZGVmaW5lIFJfU0VSSUFMM19DVFJMX190cl9wYXJfX29kZCAxCisjZGVmaW5lIFJfU0VSSUFMM19DVFJMX190cl9wYXJfZW5fX0JJVE5SIDkKKyNkZWZpbmUgUl9TRVJJQUwzX0NUUkxfX3RyX3Bhcl9lbl9fV0lEVEggMQorI2RlZmluZSBSX1NFUklBTDNfQ1RSTF9fdHJfcGFyX2VuX19kaXNhYmxlIDAKKyNkZWZpbmUgUl9TRVJJQUwzX0NUUkxfX3RyX3Bhcl9lbl9fZW5hYmxlIDEKKyNkZWZpbmUgUl9TRVJJQUwzX0NUUkxfX3RyX2JpdG5yX19CSVROUiA4CisjZGVmaW5lIFJfU0VSSUFMM19DVFJMX190cl9iaXRucl9fV0lEVEggMQorI2RlZmluZSBSX1NFUklBTDNfQ1RSTF9fdHJfYml0bnJfX3RyXzhiaXQgMAorI2RlZmluZSBSX1NFUklBTDNfQ1RSTF9fdHJfYml0bnJfX3RyXzdiaXQgMQorI2RlZmluZSBSX1NFUklBTDNfQ1RSTF9fZGF0YV9vdXRfX0JJVE5SIDAKKyNkZWZpbmUgUl9TRVJJQUwzX0NUUkxfX2RhdGFfb3V0X19XSURUSCA4CisKKyNkZWZpbmUgUl9TRVJJQUwzX0JBVUQgKElPX1RZUEVDQVNUX0JZVEUgMHhiMDAwMDA3YikKKyNkZWZpbmUgUl9TRVJJQUwzX0JBVURfX3RyX2JhdWRfX0JJVE5SIDQKKyNkZWZpbmUgUl9TRVJJQUwzX0JBVURfX3RyX2JhdWRfX1dJRFRIIDQKKyNkZWZpbmUgUl9TRVJJQUwzX0JBVURfX3RyX2JhdWRfX2MzMDBIeiAwCisjZGVmaW5lIFJfU0VSSUFMM19CQVVEX190cl9iYXVkX19jNjAwSHogMQorI2RlZmluZSBSX1NFUklBTDNfQkFVRF9fdHJfYmF1ZF9fYzEyMDBIeiAyCisjZGVmaW5lIFJfU0VSSUFMM19CQVVEX190cl9iYXVkX19jMjQwMEh6IDMKKyNkZWZpbmUgUl9TRVJJQUwzX0JBVURfX3RyX2JhdWRfX2M0ODAwSHogNAorI2RlZmluZSBSX1NFUklBTDNfQkFVRF9fdHJfYmF1ZF9fYzk2MDBIeiA1CisjZGVmaW5lIFJfU0VSSUFMM19CQVVEX190cl9iYXVkX19jMTlrMkh6IDYKKyNkZWZpbmUgUl9TRVJJQUwzX0JBVURfX3RyX2JhdWRfX2MzOGs0SHogNworI2RlZmluZSBSX1NFUklBTDNfQkFVRF9fdHJfYmF1ZF9fYzU3azZIeiA4CisjZGVmaW5lIFJfU0VSSUFMM19CQVVEX190cl9iYXVkX19jMTE1azJIeiA5CisjZGVmaW5lIFJfU0VSSUFMM19CQVVEX190cl9iYXVkX19jMjMwazRIeiAxMAorI2RlZmluZSBSX1NFUklBTDNfQkFVRF9fdHJfYmF1ZF9fYzQ2MGs4SHogMTEKKyNkZWZpbmUgUl9TRVJJQUwzX0JBVURfX3RyX2JhdWRfX2M5MjFrNkh6IDEyCisjZGVmaW5lIFJfU0VSSUFMM19CQVVEX190cl9iYXVkX19jMTg0M2sySHogMTMKKyNkZWZpbmUgUl9TRVJJQUwzX0JBVURfX3RyX2JhdWRfX2M2MjUwa0h6IDE0CisjZGVmaW5lIFJfU0VSSUFMM19CQVVEX190cl9iYXVkX19yZXNlcnZlZCAxNQorI2RlZmluZSBSX1NFUklBTDNfQkFVRF9fcmVjX2JhdWRfX0JJVE5SIDAKKyNkZWZpbmUgUl9TRVJJQUwzX0JBVURfX3JlY19iYXVkX19XSURUSCA0CisjZGVmaW5lIFJfU0VSSUFMM19CQVVEX19yZWNfYmF1ZF9fYzMwMEh6IDAKKyNkZWZpbmUgUl9TRVJJQUwzX0JBVURfX3JlY19iYXVkX19jNjAwSHogMQorI2RlZmluZSBSX1NFUklBTDNfQkFVRF9fcmVjX2JhdWRfX2MxMjAwSHogMgorI2RlZmluZSBSX1NFUklBTDNfQkFVRF9fcmVjX2JhdWRfX2MyNDAwSHogMworI2RlZmluZSBSX1NFUklBTDNfQkFVRF9fcmVjX2JhdWRfX2M0ODAwSHogNAorI2RlZmluZSBSX1NFUklBTDNfQkFVRF9fcmVjX2JhdWRfX2M5NjAwSHogNQorI2RlZmluZSBSX1NFUklBTDNfQkFVRF9fcmVjX2JhdWRfX2MxOWsySHogNgorI2RlZmluZSBSX1NFUklBTDNfQkFVRF9fcmVjX2JhdWRfX2MzOGs0SHogNworI2RlZmluZSBSX1NFUklBTDNfQkFVRF9fcmVjX2JhdWRfX2M1N2s2SHogOAorI2RlZmluZSBSX1NFUklBTDNfQkFVRF9fcmVjX2JhdWRfX2MxMTVrMkh6IDkKKyNkZWZpbmUgUl9TRVJJQUwzX0JBVURfX3JlY19iYXVkX19jMjMwazRIeiAxMAorI2RlZmluZSBSX1NFUklBTDNfQkFVRF9fcmVjX2JhdWRfX2M0NjBrOEh6IDExCisjZGVmaW5lIFJfU0VSSUFMM19CQVVEX19yZWNfYmF1ZF9fYzkyMWs2SHogMTIKKyNkZWZpbmUgUl9TRVJJQUwzX0JBVURfX3JlY19iYXVkX19jMTg0M2sySHogMTMKKyNkZWZpbmUgUl9TRVJJQUwzX0JBVURfX3JlY19iYXVkX19jNjI1MGtIeiAxNAorI2RlZmluZSBSX1NFUklBTDNfQkFVRF9fcmVjX2JhdWRfX3Jlc2VydmVkIDE1CisKKyNkZWZpbmUgUl9TRVJJQUwzX1JFQ19DVFJMIChJT19UWVBFQ0FTVF9CWVRFIDB4YjAwMDAwN2EpCisjZGVmaW5lIFJfU0VSSUFMM19SRUNfQ1RSTF9fZG1hX2Vycl9fQklUTlIgNworI2RlZmluZSBSX1NFUklBTDNfUkVDX0NUUkxfX2RtYV9lcnJfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwzX1JFQ19DVFJMX19kbWFfZXJyX19zdG9wIDAKKyNkZWZpbmUgUl9TRVJJQUwzX1JFQ19DVFJMX19kbWFfZXJyX19pZ25vcmUgMQorI2RlZmluZSBSX1NFUklBTDNfUkVDX0NUUkxfX3JlY19lbmFibGVfX0JJVE5SIDYKKyNkZWZpbmUgUl9TRVJJQUwzX1JFQ19DVFJMX19yZWNfZW5hYmxlX19XSURUSCAxCisjZGVmaW5lIFJfU0VSSUFMM19SRUNfQ1RSTF9fcmVjX2VuYWJsZV9fZGlzYWJsZSAwCisjZGVmaW5lIFJfU0VSSUFMM19SRUNfQ1RSTF9fcmVjX2VuYWJsZV9fZW5hYmxlIDEKKyNkZWZpbmUgUl9TRVJJQUwzX1JFQ19DVFJMX19ydHNfX19CSVROUiA1CisjZGVmaW5lIFJfU0VSSUFMM19SRUNfQ1RSTF9fcnRzX19fV0lEVEggMQorI2RlZmluZSBSX1NFUklBTDNfUkVDX0NUUkxfX3J0c19fX2FjdGl2ZSAwCisjZGVmaW5lIFJfU0VSSUFMM19SRUNfQ1RSTF9fcnRzX19faW5hY3RpdmUgMQorI2RlZmluZSBSX1NFUklBTDNfUkVDX0NUUkxfX3NhbXBsaW5nX19CSVROUiA0CisjZGVmaW5lIFJfU0VSSUFMM19SRUNfQ1RSTF9fc2FtcGxpbmdfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwzX1JFQ19DVFJMX19zYW1wbGluZ19fbWlkZGxlIDAKKyNkZWZpbmUgUl9TRVJJQUwzX1JFQ19DVFJMX19zYW1wbGluZ19fbWFqb3JpdHkgMQorI2RlZmluZSBSX1NFUklBTDNfUkVDX0NUUkxfX3JlY19zdGlja19wYXJfX0JJVE5SIDMKKyNkZWZpbmUgUl9TRVJJQUwzX1JFQ19DVFJMX19yZWNfc3RpY2tfcGFyX19XSURUSCAxCisjZGVmaW5lIFJfU0VSSUFMM19SRUNfQ1RSTF9fcmVjX3N0aWNrX3Bhcl9fbm9ybWFsIDAKKyNkZWZpbmUgUl9TRVJJQUwzX1JFQ19DVFJMX19yZWNfc3RpY2tfcGFyX19zdGljayAxCisjZGVmaW5lIFJfU0VSSUFMM19SRUNfQ1RSTF9fcmVjX3Bhcl9fQklUTlIgMgorI2RlZmluZSBSX1NFUklBTDNfUkVDX0NUUkxfX3JlY19wYXJfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwzX1JFQ19DVFJMX19yZWNfcGFyX19ldmVuIDAKKyNkZWZpbmUgUl9TRVJJQUwzX1JFQ19DVFJMX19yZWNfcGFyX19vZGQgMQorI2RlZmluZSBSX1NFUklBTDNfUkVDX0NUUkxfX3JlY19wYXJfZW5fX0JJVE5SIDEKKyNkZWZpbmUgUl9TRVJJQUwzX1JFQ19DVFJMX19yZWNfcGFyX2VuX19XSURUSCAxCisjZGVmaW5lIFJfU0VSSUFMM19SRUNfQ1RSTF9fcmVjX3Bhcl9lbl9fZGlzYWJsZSAwCisjZGVmaW5lIFJfU0VSSUFMM19SRUNfQ1RSTF9fcmVjX3Bhcl9lbl9fZW5hYmxlIDEKKyNkZWZpbmUgUl9TRVJJQUwzX1JFQ19DVFJMX19yZWNfYml0bnJfX0JJVE5SIDAKKyNkZWZpbmUgUl9TRVJJQUwzX1JFQ19DVFJMX19yZWNfYml0bnJfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwzX1JFQ19DVFJMX19yZWNfYml0bnJfX3JlY184Yml0IDAKKyNkZWZpbmUgUl9TRVJJQUwzX1JFQ19DVFJMX19yZWNfYml0bnJfX3JlY183Yml0IDEKKworI2RlZmluZSBSX1NFUklBTDNfVFJfQ1RSTCAoSU9fVFlQRUNBU1RfQllURSAweGIwMDAwMDc5KQorI2RlZmluZSBSX1NFUklBTDNfVFJfQ1RSTF9fdHhkX19CSVROUiA3CisjZGVmaW5lIFJfU0VSSUFMM19UUl9DVFJMX190eGRfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwzX1RSX0NUUkxfX3RyX2VuYWJsZV9fQklUTlIgNgorI2RlZmluZSBSX1NFUklBTDNfVFJfQ1RSTF9fdHJfZW5hYmxlX19XSURUSCAxCisjZGVmaW5lIFJfU0VSSUFMM19UUl9DVFJMX190cl9lbmFibGVfX2Rpc2FibGUgMAorI2RlZmluZSBSX1NFUklBTDNfVFJfQ1RSTF9fdHJfZW5hYmxlX19lbmFibGUgMQorI2RlZmluZSBSX1NFUklBTDNfVFJfQ1RSTF9fYXV0b19jdHNfX0JJVE5SIDUKKyNkZWZpbmUgUl9TRVJJQUwzX1RSX0NUUkxfX2F1dG9fY3RzX19XSURUSCAxCisjZGVmaW5lIFJfU0VSSUFMM19UUl9DVFJMX19hdXRvX2N0c19fZGlzYWJsZWQgMAorI2RlZmluZSBSX1NFUklBTDNfVFJfQ1RSTF9fYXV0b19jdHNfX2FjdGl2ZSAxCisjZGVmaW5lIFJfU0VSSUFMM19UUl9DVFJMX19zdG9wX2JpdHNfX0JJVE5SIDQKKyNkZWZpbmUgUl9TRVJJQUwzX1RSX0NUUkxfX3N0b3BfYml0c19fV0lEVEggMQorI2RlZmluZSBSX1NFUklBTDNfVFJfQ1RSTF9fc3RvcF9iaXRzX19vbmVfYml0IDAKKyNkZWZpbmUgUl9TRVJJQUwzX1RSX0NUUkxfX3N0b3BfYml0c19fdHdvX2JpdHMgMQorI2RlZmluZSBSX1NFUklBTDNfVFJfQ1RSTF9fdHJfc3RpY2tfcGFyX19CSVROUiAzCisjZGVmaW5lIFJfU0VSSUFMM19UUl9DVFJMX190cl9zdGlja19wYXJfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwzX1RSX0NUUkxfX3RyX3N0aWNrX3Bhcl9fbm9ybWFsIDAKKyNkZWZpbmUgUl9TRVJJQUwzX1RSX0NUUkxfX3RyX3N0aWNrX3Bhcl9fc3RpY2sgMQorI2RlZmluZSBSX1NFUklBTDNfVFJfQ1RSTF9fdHJfcGFyX19CSVROUiAyCisjZGVmaW5lIFJfU0VSSUFMM19UUl9DVFJMX190cl9wYXJfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwzX1RSX0NUUkxfX3RyX3Bhcl9fZXZlbiAwCisjZGVmaW5lIFJfU0VSSUFMM19UUl9DVFJMX190cl9wYXJfX29kZCAxCisjZGVmaW5lIFJfU0VSSUFMM19UUl9DVFJMX190cl9wYXJfZW5fX0JJVE5SIDEKKyNkZWZpbmUgUl9TRVJJQUwzX1RSX0NUUkxfX3RyX3Bhcl9lbl9fV0lEVEggMQorI2RlZmluZSBSX1NFUklBTDNfVFJfQ1RSTF9fdHJfcGFyX2VuX19kaXNhYmxlIDAKKyNkZWZpbmUgUl9TRVJJQUwzX1RSX0NUUkxfX3RyX3Bhcl9lbl9fZW5hYmxlIDEKKyNkZWZpbmUgUl9TRVJJQUwzX1RSX0NUUkxfX3RyX2JpdG5yX19CSVROUiAwCisjZGVmaW5lIFJfU0VSSUFMM19UUl9DVFJMX190cl9iaXRucl9fV0lEVEggMQorI2RlZmluZSBSX1NFUklBTDNfVFJfQ1RSTF9fdHJfYml0bnJfX3RyXzhiaXQgMAorI2RlZmluZSBSX1NFUklBTDNfVFJfQ1RSTF9fdHJfYml0bnJfX3RyXzdiaXQgMQorCisjZGVmaW5lIFJfU0VSSUFMM19UUl9EQVRBIChJT19UWVBFQ0FTVF9CWVRFIDB4YjAwMDAwNzgpCisjZGVmaW5lIFJfU0VSSUFMM19UUl9EQVRBX19kYXRhX291dF9fQklUTlIgMAorI2RlZmluZSBSX1NFUklBTDNfVFJfREFUQV9fZGF0YV9vdXRfX1dJRFRIIDgKKworI2RlZmluZSBSX1NFUklBTDNfUkVBRCAoSU9fVFlQRUNBU1RfUk9fVURXT1JEIDB4YjAwMDAwNzgpCisjZGVmaW5lIFJfU0VSSUFMM19SRUFEX194b2ZmX2RldGVjdF9fQklUTlIgMTUKKyNkZWZpbmUgUl9TRVJJQUwzX1JFQURfX3hvZmZfZGV0ZWN0X19XSURUSCAxCisjZGVmaW5lIFJfU0VSSUFMM19SRUFEX194b2ZmX2RldGVjdF9fbm9feG9mZiAwCisjZGVmaW5lIFJfU0VSSUFMM19SRUFEX194b2ZmX2RldGVjdF9feG9mZiAxCisjZGVmaW5lIFJfU0VSSUFMM19SRUFEX19jdHNfX19CSVROUiAxNAorI2RlZmluZSBSX1NFUklBTDNfUkVBRF9fY3RzX19fV0lEVEggMQorI2RlZmluZSBSX1NFUklBTDNfUkVBRF9fY3RzX19fYWN0aXZlIDAKKyNkZWZpbmUgUl9TRVJJQUwzX1JFQURfX2N0c19fX2luYWN0aXZlIDEKKyNkZWZpbmUgUl9TRVJJQUwzX1JFQURfX3RyX3JlYWR5X19CSVROUiAxMworI2RlZmluZSBSX1NFUklBTDNfUkVBRF9fdHJfcmVhZHlfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwzX1JFQURfX3RyX3JlYWR5X19mdWxsIDAKKyNkZWZpbmUgUl9TRVJJQUwzX1JFQURfX3RyX3JlYWR5X19yZWFkeSAxCisjZGVmaW5lIFJfU0VSSUFMM19SRUFEX19yeGRfX0JJVE5SIDEyCisjZGVmaW5lIFJfU0VSSUFMM19SRUFEX19yeGRfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwzX1JFQURfX292ZXJydW5fX0JJVE5SIDExCisjZGVmaW5lIFJfU0VSSUFMM19SRUFEX19vdmVycnVuX19XSURUSCAxCisjZGVmaW5lIFJfU0VSSUFMM19SRUFEX19vdmVycnVuX19ubyAwCisjZGVmaW5lIFJfU0VSSUFMM19SRUFEX19vdmVycnVuX195ZXMgMQorI2RlZmluZSBSX1NFUklBTDNfUkVBRF9fcGFyX2Vycl9fQklUTlIgMTAKKyNkZWZpbmUgUl9TRVJJQUwzX1JFQURfX3Bhcl9lcnJfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwzX1JFQURfX3Bhcl9lcnJfX25vIDAKKyNkZWZpbmUgUl9TRVJJQUwzX1JFQURfX3Bhcl9lcnJfX3llcyAxCisjZGVmaW5lIFJfU0VSSUFMM19SRUFEX19mcmFtaW5nX2Vycl9fQklUTlIgOQorI2RlZmluZSBSX1NFUklBTDNfUkVBRF9fZnJhbWluZ19lcnJfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwzX1JFQURfX2ZyYW1pbmdfZXJyX19ubyAwCisjZGVmaW5lIFJfU0VSSUFMM19SRUFEX19mcmFtaW5nX2Vycl9feWVzIDEKKyNkZWZpbmUgUl9TRVJJQUwzX1JFQURfX2RhdGFfYXZhaWxfX0JJVE5SIDgKKyNkZWZpbmUgUl9TRVJJQUwzX1JFQURfX2RhdGFfYXZhaWxfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwzX1JFQURfX2RhdGFfYXZhaWxfX25vIDAKKyNkZWZpbmUgUl9TRVJJQUwzX1JFQURfX2RhdGFfYXZhaWxfX3llcyAxCisjZGVmaW5lIFJfU0VSSUFMM19SRUFEX19kYXRhX2luX19CSVROUiAwCisjZGVmaW5lIFJfU0VSSUFMM19SRUFEX19kYXRhX2luX19XSURUSCA4CisKKyNkZWZpbmUgUl9TRVJJQUwzX1NUQVRVUyAoSU9fVFlQRUNBU1RfUk9fQllURSAweGIwMDAwMDc5KQorI2RlZmluZSBSX1NFUklBTDNfU1RBVFVTX194b2ZmX2RldGVjdF9fQklUTlIgNworI2RlZmluZSBSX1NFUklBTDNfU1RBVFVTX194b2ZmX2RldGVjdF9fV0lEVEggMQorI2RlZmluZSBSX1NFUklBTDNfU1RBVFVTX194b2ZmX2RldGVjdF9fbm9feG9mZiAwCisjZGVmaW5lIFJfU0VSSUFMM19TVEFUVVNfX3hvZmZfZGV0ZWN0X194b2ZmIDEKKyNkZWZpbmUgUl9TRVJJQUwzX1NUQVRVU19fY3RzX19fQklUTlIgNgorI2RlZmluZSBSX1NFUklBTDNfU1RBVFVTX19jdHNfX19XSURUSCAxCisjZGVmaW5lIFJfU0VSSUFMM19TVEFUVVNfX2N0c19fX2FjdGl2ZSAwCisjZGVmaW5lIFJfU0VSSUFMM19TVEFUVVNfX2N0c19fX2luYWN0aXZlIDEKKyNkZWZpbmUgUl9TRVJJQUwzX1NUQVRVU19fdHJfcmVhZHlfX0JJVE5SIDUKKyNkZWZpbmUgUl9TRVJJQUwzX1NUQVRVU19fdHJfcmVhZHlfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwzX1NUQVRVU19fdHJfcmVhZHlfX2Z1bGwgMAorI2RlZmluZSBSX1NFUklBTDNfU1RBVFVTX190cl9yZWFkeV9fcmVhZHkgMQorI2RlZmluZSBSX1NFUklBTDNfU1RBVFVTX19yeGRfX0JJVE5SIDQKKyNkZWZpbmUgUl9TRVJJQUwzX1NUQVRVU19fcnhkX19XSURUSCAxCisjZGVmaW5lIFJfU0VSSUFMM19TVEFUVVNfX292ZXJydW5fX0JJVE5SIDMKKyNkZWZpbmUgUl9TRVJJQUwzX1NUQVRVU19fb3ZlcnJ1bl9fV0lEVEggMQorI2RlZmluZSBSX1NFUklBTDNfU1RBVFVTX19vdmVycnVuX19ubyAwCisjZGVmaW5lIFJfU0VSSUFMM19TVEFUVVNfX292ZXJydW5fX3llcyAxCisjZGVmaW5lIFJfU0VSSUFMM19TVEFUVVNfX3Bhcl9lcnJfX0JJVE5SIDIKKyNkZWZpbmUgUl9TRVJJQUwzX1NUQVRVU19fcGFyX2Vycl9fV0lEVEggMQorI2RlZmluZSBSX1NFUklBTDNfU1RBVFVTX19wYXJfZXJyX19ubyAwCisjZGVmaW5lIFJfU0VSSUFMM19TVEFUVVNfX3Bhcl9lcnJfX3llcyAxCisjZGVmaW5lIFJfU0VSSUFMM19TVEFUVVNfX2ZyYW1pbmdfZXJyX19CSVROUiAxCisjZGVmaW5lIFJfU0VSSUFMM19TVEFUVVNfX2ZyYW1pbmdfZXJyX19XSURUSCAxCisjZGVmaW5lIFJfU0VSSUFMM19TVEFUVVNfX2ZyYW1pbmdfZXJyX19ubyAwCisjZGVmaW5lIFJfU0VSSUFMM19TVEFUVVNfX2ZyYW1pbmdfZXJyX195ZXMgMQorI2RlZmluZSBSX1NFUklBTDNfU1RBVFVTX19kYXRhX2F2YWlsX19CSVROUiAwCisjZGVmaW5lIFJfU0VSSUFMM19TVEFUVVNfX2RhdGFfYXZhaWxfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwzX1NUQVRVU19fZGF0YV9hdmFpbF9fbm8gMAorI2RlZmluZSBSX1NFUklBTDNfU1RBVFVTX19kYXRhX2F2YWlsX195ZXMgMQorCisjZGVmaW5lIFJfU0VSSUFMM19SRUNfREFUQSAoSU9fVFlQRUNBU1RfUk9fQllURSAweGIwMDAwMDc4KQorI2RlZmluZSBSX1NFUklBTDNfUkVDX0RBVEFfX2RhdGFfaW5fX0JJVE5SIDAKKyNkZWZpbmUgUl9TRVJJQUwzX1JFQ19EQVRBX19kYXRhX2luX19XSURUSCA4CisKKyNkZWZpbmUgUl9TRVJJQUwzX1hPRkYgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMDdjKQorI2RlZmluZSBSX1NFUklBTDNfWE9GRl9fdHhfc3RvcF9fQklUTlIgOQorI2RlZmluZSBSX1NFUklBTDNfWE9GRl9fdHhfc3RvcF9fV0lEVEggMQorI2RlZmluZSBSX1NFUklBTDNfWE9GRl9fdHhfc3RvcF9fZW5hYmxlIDAKKyNkZWZpbmUgUl9TRVJJQUwzX1hPRkZfX3R4X3N0b3BfX3N0b3AgMQorI2RlZmluZSBSX1NFUklBTDNfWE9GRl9fYXV0b194b2ZmX19CSVROUiA4CisjZGVmaW5lIFJfU0VSSUFMM19YT0ZGX19hdXRvX3hvZmZfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVJJQUwzX1hPRkZfX2F1dG9feG9mZl9fZGlzYWJsZSAwCisjZGVmaW5lIFJfU0VSSUFMM19YT0ZGX19hdXRvX3hvZmZfX2VuYWJsZSAxCisjZGVmaW5lIFJfU0VSSUFMM19YT0ZGX194b2ZmX2NoYXJfX0JJVE5SIDAKKyNkZWZpbmUgUl9TRVJJQUwzX1hPRkZfX3hvZmZfY2hhcl9fV0lEVEggOAorCisjZGVmaW5lIFJfQUxUX1NFUl9CQVVEUkFURSAoSU9fVFlQRUNBU1RfVURXT1JEIDB4YjAwMDAwNWMpCisjZGVmaW5lIFJfQUxUX1NFUl9CQVVEUkFURV9fc2VyM190cl9fQklUTlIgMjgKKyNkZWZpbmUgUl9BTFRfU0VSX0JBVURSQVRFX19zZXIzX3RyX19XSURUSCAyCisjZGVmaW5lIFJfQUxUX1NFUl9CQVVEUkFURV9fc2VyM190cl9fbm9ybWFsIDAKKyNkZWZpbmUgUl9BTFRfU0VSX0JBVURSQVRFX19zZXIzX3RyX19wcmVzY2FsZSAxCisjZGVmaW5lIFJfQUxUX1NFUl9CQVVEUkFURV9fc2VyM190cl9fZXh0ZXJuIDIKKyNkZWZpbmUgUl9BTFRfU0VSX0JBVURSQVRFX19zZXIzX3RyX190aW1lciAzCisjZGVmaW5lIFJfQUxUX1NFUl9CQVVEUkFURV9fc2VyM19yZWNfX0JJVE5SIDI0CisjZGVmaW5lIFJfQUxUX1NFUl9CQVVEUkFURV9fc2VyM19yZWNfX1dJRFRIIDIKKyNkZWZpbmUgUl9BTFRfU0VSX0JBVURSQVRFX19zZXIzX3JlY19fbm9ybWFsIDAKKyNkZWZpbmUgUl9BTFRfU0VSX0JBVURSQVRFX19zZXIzX3JlY19fcHJlc2NhbGUgMQorI2RlZmluZSBSX0FMVF9TRVJfQkFVRFJBVEVfX3NlcjNfcmVjX19leHRlcm4gMgorI2RlZmluZSBSX0FMVF9TRVJfQkFVRFJBVEVfX3NlcjNfcmVjX190aW1lciAzCisjZGVmaW5lIFJfQUxUX1NFUl9CQVVEUkFURV9fc2VyMl90cl9fQklUTlIgMjAKKyNkZWZpbmUgUl9BTFRfU0VSX0JBVURSQVRFX19zZXIyX3RyX19XSURUSCAyCisjZGVmaW5lIFJfQUxUX1NFUl9CQVVEUkFURV9fc2VyMl90cl9fbm9ybWFsIDAKKyNkZWZpbmUgUl9BTFRfU0VSX0JBVURSQVRFX19zZXIyX3RyX19wcmVzY2FsZSAxCisjZGVmaW5lIFJfQUxUX1NFUl9CQVVEUkFURV9fc2VyMl90cl9fZXh0ZXJuIDIKKyNkZWZpbmUgUl9BTFRfU0VSX0JBVURSQVRFX19zZXIyX3RyX190aW1lciAzCisjZGVmaW5lIFJfQUxUX1NFUl9CQVVEUkFURV9fc2VyMl9yZWNfX0JJVE5SIDE2CisjZGVmaW5lIFJfQUxUX1NFUl9CQVVEUkFURV9fc2VyMl9yZWNfX1dJRFRIIDIKKyNkZWZpbmUgUl9BTFRfU0VSX0JBVURSQVRFX19zZXIyX3JlY19fbm9ybWFsIDAKKyNkZWZpbmUgUl9BTFRfU0VSX0JBVURSQVRFX19zZXIyX3JlY19fcHJlc2NhbGUgMQorI2RlZmluZSBSX0FMVF9TRVJfQkFVRFJBVEVfX3NlcjJfcmVjX19leHRlcm4gMgorI2RlZmluZSBSX0FMVF9TRVJfQkFVRFJBVEVfX3NlcjJfcmVjX190aW1lciAzCisjZGVmaW5lIFJfQUxUX1NFUl9CQVVEUkFURV9fc2VyMV90cl9fQklUTlIgMTIKKyNkZWZpbmUgUl9BTFRfU0VSX0JBVURSQVRFX19zZXIxX3RyX19XSURUSCAyCisjZGVmaW5lIFJfQUxUX1NFUl9CQVVEUkFURV9fc2VyMV90cl9fbm9ybWFsIDAKKyNkZWZpbmUgUl9BTFRfU0VSX0JBVURSQVRFX19zZXIxX3RyX19wcmVzY2FsZSAxCisjZGVmaW5lIFJfQUxUX1NFUl9CQVVEUkFURV9fc2VyMV90cl9fZXh0ZXJuIDIKKyNkZWZpbmUgUl9BTFRfU0VSX0JBVURSQVRFX19zZXIxX3RyX190aW1lciAzCisjZGVmaW5lIFJfQUxUX1NFUl9CQVVEUkFURV9fc2VyMV9yZWNfX0JJVE5SIDgKKyNkZWZpbmUgUl9BTFRfU0VSX0JBVURSQVRFX19zZXIxX3JlY19fV0lEVEggMgorI2RlZmluZSBSX0FMVF9TRVJfQkFVRFJBVEVfX3NlcjFfcmVjX19ub3JtYWwgMAorI2RlZmluZSBSX0FMVF9TRVJfQkFVRFJBVEVfX3NlcjFfcmVjX19wcmVzY2FsZSAxCisjZGVmaW5lIFJfQUxUX1NFUl9CQVVEUkFURV9fc2VyMV9yZWNfX2V4dGVybiAyCisjZGVmaW5lIFJfQUxUX1NFUl9CQVVEUkFURV9fc2VyMV9yZWNfX3RpbWVyIDMKKyNkZWZpbmUgUl9BTFRfU0VSX0JBVURSQVRFX19zZXIwX3RyX19CSVROUiA0CisjZGVmaW5lIFJfQUxUX1NFUl9CQVVEUkFURV9fc2VyMF90cl9fV0lEVEggMgorI2RlZmluZSBSX0FMVF9TRVJfQkFVRFJBVEVfX3NlcjBfdHJfX25vcm1hbCAwCisjZGVmaW5lIFJfQUxUX1NFUl9CQVVEUkFURV9fc2VyMF90cl9fcHJlc2NhbGUgMQorI2RlZmluZSBSX0FMVF9TRVJfQkFVRFJBVEVfX3NlcjBfdHJfX2V4dGVybiAyCisjZGVmaW5lIFJfQUxUX1NFUl9CQVVEUkFURV9fc2VyMF90cl9fdGltZXIgMworI2RlZmluZSBSX0FMVF9TRVJfQkFVRFJBVEVfX3NlcjBfcmVjX19CSVROUiAwCisjZGVmaW5lIFJfQUxUX1NFUl9CQVVEUkFURV9fc2VyMF9yZWNfX1dJRFRIIDIKKyNkZWZpbmUgUl9BTFRfU0VSX0JBVURSQVRFX19zZXIwX3JlY19fbm9ybWFsIDAKKyNkZWZpbmUgUl9BTFRfU0VSX0JBVURSQVRFX19zZXIwX3JlY19fcHJlc2NhbGUgMQorI2RlZmluZSBSX0FMVF9TRVJfQkFVRFJBVEVfX3NlcjBfcmVjX19leHRlcm4gMgorI2RlZmluZSBSX0FMVF9TRVJfQkFVRFJBVEVfX3NlcjBfcmVjX190aW1lciAzCisKKy8qCishKiBOZXR3b3JrIGludGVyZmFjZSByZWdpc3RlcnMKKyEqLworCisjZGVmaW5lIFJfTkVUV09SS19TQV8wIChJT19UWVBFQ0FTVF9VRFdPUkQgMHhiMDAwMDA4MCkKKyNkZWZpbmUgUl9ORVRXT1JLX1NBXzBfX21hMF9sb3dfX0JJVE5SIDAKKyNkZWZpbmUgUl9ORVRXT1JLX1NBXzBfX21hMF9sb3dfX1dJRFRIIDMyCisKKyNkZWZpbmUgUl9ORVRXT1JLX1NBXzEgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMDg0KQorI2RlZmluZSBSX05FVFdPUktfU0FfMV9fbWExX2xvd19fQklUTlIgMTYKKyNkZWZpbmUgUl9ORVRXT1JLX1NBXzFfX21hMV9sb3dfX1dJRFRIIDE2CisjZGVmaW5lIFJfTkVUV09SS19TQV8xX19tYTBfaGlnaF9fQklUTlIgMAorI2RlZmluZSBSX05FVFdPUktfU0FfMV9fbWEwX2hpZ2hfX1dJRFRIIDE2CisKKyNkZWZpbmUgUl9ORVRXT1JLX1NBXzIgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMDg4KQorI2RlZmluZSBSX05FVFdPUktfU0FfMl9fbWExX2hpZ2hfX0JJVE5SIDAKKyNkZWZpbmUgUl9ORVRXT1JLX1NBXzJfX21hMV9oaWdoX19XSURUSCAzMgorCisjZGVmaW5lIFJfTkVUV09SS19HQV8wIChJT19UWVBFQ0FTVF9VRFdPUkQgMHhiMDAwMDA4YykKKyNkZWZpbmUgUl9ORVRXT1JLX0dBXzBfX2dhX2xvd19fQklUTlIgMAorI2RlZmluZSBSX05FVFdPUktfR0FfMF9fZ2FfbG93X19XSURUSCAzMgorCisjZGVmaW5lIFJfTkVUV09SS19HQV8xIChJT19UWVBFQ0FTVF9VRFdPUkQgMHhiMDAwMDA5MCkKKyNkZWZpbmUgUl9ORVRXT1JLX0dBXzFfX2dhX2hpZ2hfX0JJVE5SIDAKKyNkZWZpbmUgUl9ORVRXT1JLX0dBXzFfX2dhX2hpZ2hfX1dJRFRIIDMyCisKKyNkZWZpbmUgUl9ORVRXT1JLX1JFQ19DT05GSUcgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMDk0KQorI2RlZmluZSBSX05FVFdPUktfUkVDX0NPTkZJR19fbWF4X3NpemVfX0JJVE5SIDEwCisjZGVmaW5lIFJfTkVUV09SS19SRUNfQ09ORklHX19tYXhfc2l6ZV9fV0lEVEggMQorI2RlZmluZSBSX05FVFdPUktfUkVDX0NPTkZJR19fbWF4X3NpemVfX3NpemUxNTE4IDAKKyNkZWZpbmUgUl9ORVRXT1JLX1JFQ19DT05GSUdfX21heF9zaXplX19zaXplMTUyMiAxCisjZGVmaW5lIFJfTkVUV09SS19SRUNfQ09ORklHX19kdXBsZXhfX0JJVE5SIDkKKyNkZWZpbmUgUl9ORVRXT1JLX1JFQ19DT05GSUdfX2R1cGxleF9fV0lEVEggMQorI2RlZmluZSBSX05FVFdPUktfUkVDX0NPTkZJR19fZHVwbGV4X19mdWxsIDEKKyNkZWZpbmUgUl9ORVRXT1JLX1JFQ19DT05GSUdfX2R1cGxleF9faGFsZiAwCisjZGVmaW5lIFJfTkVUV09SS19SRUNfQ09ORklHX19iYWRfY3JjX19CSVROUiA4CisjZGVmaW5lIFJfTkVUV09SS19SRUNfQ09ORklHX19iYWRfY3JjX19XSURUSCAxCisjZGVmaW5lIFJfTkVUV09SS19SRUNfQ09ORklHX19iYWRfY3JjX19yZWNlaXZlIDEKKyNkZWZpbmUgUl9ORVRXT1JLX1JFQ19DT05GSUdfX2JhZF9jcmNfX2Rpc2NhcmQgMAorI2RlZmluZSBSX05FVFdPUktfUkVDX0NPTkZJR19fb3ZlcnNpemVfX0JJVE5SIDcKKyNkZWZpbmUgUl9ORVRXT1JLX1JFQ19DT05GSUdfX292ZXJzaXplX19XSURUSCAxCisjZGVmaW5lIFJfTkVUV09SS19SRUNfQ09ORklHX19vdmVyc2l6ZV9fcmVjZWl2ZSAxCisjZGVmaW5lIFJfTkVUV09SS19SRUNfQ09ORklHX19vdmVyc2l6ZV9fZGlzY2FyZCAwCisjZGVmaW5lIFJfTkVUV09SS19SRUNfQ09ORklHX191bmRlcnNpemVfX0JJVE5SIDYKKyNkZWZpbmUgUl9ORVRXT1JLX1JFQ19DT05GSUdfX3VuZGVyc2l6ZV9fV0lEVEggMQorI2RlZmluZSBSX05FVFdPUktfUkVDX0NPTkZJR19fdW5kZXJzaXplX19yZWNlaXZlIDEKKyNkZWZpbmUgUl9ORVRXT1JLX1JFQ19DT05GSUdfX3VuZGVyc2l6ZV9fZGlzY2FyZCAwCisjZGVmaW5lIFJfTkVUV09SS19SRUNfQ09ORklHX19hbGxfcm9vdHNfX0JJVE5SIDUKKyNkZWZpbmUgUl9ORVRXT1JLX1JFQ19DT05GSUdfX2FsbF9yb290c19fV0lEVEggMQorI2RlZmluZSBSX05FVFdPUktfUkVDX0NPTkZJR19fYWxsX3Jvb3RzX19yZWNlaXZlIDEKKyNkZWZpbmUgUl9ORVRXT1JLX1JFQ19DT05GSUdfX2FsbF9yb290c19fZGlzY2FyZCAwCisjZGVmaW5lIFJfTkVUV09SS19SRUNfQ09ORklHX190cl9icm9hZGNhc3RfX0JJVE5SIDQKKyNkZWZpbmUgUl9ORVRXT1JLX1JFQ19DT05GSUdfX3RyX2Jyb2FkY2FzdF9fV0lEVEggMQorI2RlZmluZSBSX05FVFdPUktfUkVDX0NPTkZJR19fdHJfYnJvYWRjYXN0X19yZWNlaXZlIDEKKyNkZWZpbmUgUl9ORVRXT1JLX1JFQ19DT05GSUdfX3RyX2Jyb2FkY2FzdF9fZGlzY2FyZCAwCisjZGVmaW5lIFJfTkVUV09SS19SRUNfQ09ORklHX19icm9hZGNhc3RfX0JJVE5SIDMKKyNkZWZpbmUgUl9ORVRXT1JLX1JFQ19DT05GSUdfX2Jyb2FkY2FzdF9fV0lEVEggMQorI2RlZmluZSBSX05FVFdPUktfUkVDX0NPTkZJR19fYnJvYWRjYXN0X19yZWNlaXZlIDEKKyNkZWZpbmUgUl9ORVRXT1JLX1JFQ19DT05GSUdfX2Jyb2FkY2FzdF9fZGlzY2FyZCAwCisjZGVmaW5lIFJfTkVUV09SS19SRUNfQ09ORklHX19pbmRpdmlkdWFsX19CSVROUiAyCisjZGVmaW5lIFJfTkVUV09SS19SRUNfQ09ORklHX19pbmRpdmlkdWFsX19XSURUSCAxCisjZGVmaW5lIFJfTkVUV09SS19SRUNfQ09ORklHX19pbmRpdmlkdWFsX19yZWNlaXZlIDEKKyNkZWZpbmUgUl9ORVRXT1JLX1JFQ19DT05GSUdfX2luZGl2aWR1YWxfX2Rpc2NhcmQgMAorI2RlZmluZSBSX05FVFdPUktfUkVDX0NPTkZJR19fbWExX19CSVROUiAxCisjZGVmaW5lIFJfTkVUV09SS19SRUNfQ09ORklHX19tYTFfX1dJRFRIIDEKKyNkZWZpbmUgUl9ORVRXT1JLX1JFQ19DT05GSUdfX21hMV9fZW5hYmxlIDEKKyNkZWZpbmUgUl9ORVRXT1JLX1JFQ19DT05GSUdfX21hMV9fZGlzYWJsZSAwCisjZGVmaW5lIFJfTkVUV09SS19SRUNfQ09ORklHX19tYTBfX0JJVE5SIDAKKyNkZWZpbmUgUl9ORVRXT1JLX1JFQ19DT05GSUdfX21hMF9fV0lEVEggMQorI2RlZmluZSBSX05FVFdPUktfUkVDX0NPTkZJR19fbWEwX19lbmFibGUgMQorI2RlZmluZSBSX05FVFdPUktfUkVDX0NPTkZJR19fbWEwX19kaXNhYmxlIDAKKworI2RlZmluZSBSX05FVFdPUktfR0VOX0NPTkZJRyAoSU9fVFlQRUNBU1RfVURXT1JEIDB4YjAwMDAwOTgpCisjZGVmaW5lIFJfTkVUV09SS19HRU5fQ09ORklHX19sb29wYmFja19fQklUTlIgNQorI2RlZmluZSBSX05FVFdPUktfR0VOX0NPTkZJR19fbG9vcGJhY2tfX1dJRFRIIDEKKyNkZWZpbmUgUl9ORVRXT1JLX0dFTl9DT05GSUdfX2xvb3BiYWNrX19vbiAxCisjZGVmaW5lIFJfTkVUV09SS19HRU5fQ09ORklHX19sb29wYmFja19fb2ZmIDAKKyNkZWZpbmUgUl9ORVRXT1JLX0dFTl9DT05GSUdfX2ZyYW1lX19CSVROUiA0CisjZGVmaW5lIFJfTkVUV09SS19HRU5fQ09ORklHX19mcmFtZV9fV0lEVEggMQorI2RlZmluZSBSX05FVFdPUktfR0VOX0NPTkZJR19fZnJhbWVfX3Rva2VuciAxCisjZGVmaW5lIFJfTkVUV09SS19HRU5fQ09ORklHX19mcmFtZV9fZXRoZXIgMAorI2RlZmluZSBSX05FVFdPUktfR0VOX0NPTkZJR19fdmdfX0JJVE5SIDMKKyNkZWZpbmUgUl9ORVRXT1JLX0dFTl9DT05GSUdfX3ZnX19XSURUSCAxCisjZGVmaW5lIFJfTkVUV09SS19HRU5fQ09ORklHX192Z19fb24gMQorI2RlZmluZSBSX05FVFdPUktfR0VOX0NPTkZJR19fdmdfX29mZiAwCisjZGVmaW5lIFJfTkVUV09SS19HRU5fQ09ORklHX19waHlfX0JJVE5SIDEKKyNkZWZpbmUgUl9ORVRXT1JLX0dFTl9DT05GSUdfX3BoeV9fV0lEVEggMgorI2RlZmluZSBSX05FVFdPUktfR0VOX0NPTkZJR19fcGh5X19zbmkgMAorI2RlZmluZSBSX05FVFdPUktfR0VOX0NPTkZJR19fcGh5X19taWlfY2xrIDEKKyNkZWZpbmUgUl9ORVRXT1JLX0dFTl9DT05GSUdfX3BoeV9fbWlpX2VyciAyCisjZGVmaW5lIFJfTkVUV09SS19HRU5fQ09ORklHX19waHlfX21paV9yZXEgMworI2RlZmluZSBSX05FVFdPUktfR0VOX0NPTkZJR19fZW5hYmxlX19CSVROUiAwCisjZGVmaW5lIFJfTkVUV09SS19HRU5fQ09ORklHX19lbmFibGVfX1dJRFRIIDEKKyNkZWZpbmUgUl9ORVRXT1JLX0dFTl9DT05GSUdfX2VuYWJsZV9fb24gMQorI2RlZmluZSBSX05FVFdPUktfR0VOX0NPTkZJR19fZW5hYmxlX19vZmYgMAorCisjZGVmaW5lIFJfTkVUV09SS19UUl9DVFJMIChJT19UWVBFQ0FTVF9VRFdPUkQgMHhiMDAwMDA5YykKKyNkZWZpbmUgUl9ORVRXT1JLX1RSX0NUUkxfX2Nscl9lcnJvcl9fQklUTlIgOAorI2RlZmluZSBSX05FVFdPUktfVFJfQ1RSTF9fY2xyX2Vycm9yX19XSURUSCAxCisjZGVmaW5lIFJfTkVUV09SS19UUl9DVFJMX19jbHJfZXJyb3JfX2NsciAxCisjZGVmaW5lIFJfTkVUV09SS19UUl9DVFJMX19jbHJfZXJyb3JfX25vcCAwCisjZGVmaW5lIFJfTkVUV09SS19UUl9DVFJMX19kZWxheV9fQklUTlIgNQorI2RlZmluZSBSX05FVFdPUktfVFJfQ1RSTF9fZGVsYXlfX1dJRFRIIDEKKyNkZWZpbmUgUl9ORVRXT1JLX1RSX0NUUkxfX2RlbGF5X19kMnVzIDEKKyNkZWZpbmUgUl9ORVRXT1JLX1RSX0NUUkxfX2RlbGF5X19ub25lIDAKKyNkZWZpbmUgUl9ORVRXT1JLX1RSX0NUUkxfX2NhbmNlbF9fQklUTlIgNAorI2RlZmluZSBSX05FVFdPUktfVFJfQ1RSTF9fY2FuY2VsX19XSURUSCAxCisjZGVmaW5lIFJfTkVUV09SS19UUl9DVFJMX19jYW5jZWxfX2RvIDEKKyNkZWZpbmUgUl9ORVRXT1JLX1RSX0NUUkxfX2NhbmNlbF9fZG9udCAwCisjZGVmaW5lIFJfTkVUV09SS19UUl9DVFJMX19jZF9fQklUTlIgMworI2RlZmluZSBSX05FVFdPUktfVFJfQ1RSTF9fY2RfX1dJRFRIIDEKKyNkZWZpbmUgUl9ORVRXT1JLX1RSX0NUUkxfX2NkX19lbmFibGUgMAorI2RlZmluZSBSX05FVFdPUktfVFJfQ1RSTF9fY2RfX2Rpc2FibGUgMQorI2RlZmluZSBSX05FVFdPUktfVFJfQ1RSTF9fY2RfX2Fja19jb2wgMAorI2RlZmluZSBSX05FVFdPUktfVFJfQ1RSTF9fY2RfX2Fja19jcnMgMQorI2RlZmluZSBSX05FVFdPUktfVFJfQ1RSTF9fcmV0cnlfX0JJVE5SIDIKKyNkZWZpbmUgUl9ORVRXT1JLX1RSX0NUUkxfX3JldHJ5X19XSURUSCAxCisjZGVmaW5lIFJfTkVUV09SS19UUl9DVFJMX19yZXRyeV9fZW5hYmxlIDAKKyNkZWZpbmUgUl9ORVRXT1JLX1RSX0NUUkxfX3JldHJ5X19kaXNhYmxlIDEKKyNkZWZpbmUgUl9ORVRXT1JLX1RSX0NUUkxfX3BhZF9fQklUTlIgMQorI2RlZmluZSBSX05FVFdPUktfVFJfQ1RSTF9fcGFkX19XSURUSCAxCisjZGVmaW5lIFJfTkVUV09SS19UUl9DVFJMX19wYWRfX2VuYWJsZSAxCisjZGVmaW5lIFJfTkVUV09SS19UUl9DVFJMX19wYWRfX2Rpc2FibGUgMAorI2RlZmluZSBSX05FVFdPUktfVFJfQ1RSTF9fY3JjX19CSVROUiAwCisjZGVmaW5lIFJfTkVUV09SS19UUl9DVFJMX19jcmNfX1dJRFRIIDEKKyNkZWZpbmUgUl9ORVRXT1JLX1RSX0NUUkxfX2NyY19fZW5hYmxlIDAKKyNkZWZpbmUgUl9ORVRXT1JLX1RSX0NUUkxfX2NyY19fZGlzYWJsZSAxCisKKyNkZWZpbmUgUl9ORVRXT1JLX01HTV9DVFJMIChJT19UWVBFQ0FTVF9VRFdPUkQgMHhiMDAwMDBhMCkKKyNkZWZpbmUgUl9ORVRXT1JLX01HTV9DVFJMX190eGRfcGluc19fQklUTlIgNAorI2RlZmluZSBSX05FVFdPUktfTUdNX0NUUkxfX3R4ZF9waW5zX19XSURUSCA0CisjZGVmaW5lIFJfTkVUV09SS19NR01fQ1RSTF9fdHhlcl9waW5fX0JJVE5SIDMKKyNkZWZpbmUgUl9ORVRXT1JLX01HTV9DVFJMX190eGVyX3Bpbl9fV0lEVEggMQorI2RlZmluZSBSX05FVFdPUktfTUdNX0NUUkxfX21kY2tfX0JJVE5SIDIKKyNkZWZpbmUgUl9ORVRXT1JLX01HTV9DVFJMX19tZGNrX19XSURUSCAxCisjZGVmaW5lIFJfTkVUV09SS19NR01fQ1RSTF9fbWRvZV9fQklUTlIgMQorI2RlZmluZSBSX05FVFdPUktfTUdNX0NUUkxfX21kb2VfX1dJRFRIIDEKKyNkZWZpbmUgUl9ORVRXT1JLX01HTV9DVFJMX19tZG9lX19lbmFibGUgMQorI2RlZmluZSBSX05FVFdPUktfTUdNX0NUUkxfX21kb2VfX2Rpc2FibGUgMAorI2RlZmluZSBSX05FVFdPUktfTUdNX0NUUkxfX21kaW9fX0JJVE5SIDAKKyNkZWZpbmUgUl9ORVRXT1JLX01HTV9DVFJMX19tZGlvX19XSURUSCAxCisKKyNkZWZpbmUgUl9ORVRXT1JLX1NUQVQgKElPX1RZUEVDQVNUX1JPX1VEV09SRCAweGIwMDAwMGEwKQorI2RlZmluZSBSX05FVFdPUktfU1RBVF9fcnhkX3BpbnNfX0JJVE5SIDQKKyNkZWZpbmUgUl9ORVRXT1JLX1NUQVRfX3J4ZF9waW5zX19XSURUSCA0CisjZGVmaW5lIFJfTkVUV09SS19TVEFUX19yeGVyX19CSVROUiAzCisjZGVmaW5lIFJfTkVUV09SS19TVEFUX19yeGVyX19XSURUSCAxCisjZGVmaW5lIFJfTkVUV09SS19TVEFUX191bmRlcnJ1bl9fQklUTlIgMgorI2RlZmluZSBSX05FVFdPUktfU1RBVF9fdW5kZXJydW5fX1dJRFRIIDEKKyNkZWZpbmUgUl9ORVRXT1JLX1NUQVRfX3VuZGVycnVuX195ZXMgMQorI2RlZmluZSBSX05FVFdPUktfU1RBVF9fdW5kZXJydW5fX25vIDAKKyNkZWZpbmUgUl9ORVRXT1JLX1NUQVRfX2V4Y19jb2xfX0JJVE5SIDEKKyNkZWZpbmUgUl9ORVRXT1JLX1NUQVRfX2V4Y19jb2xfX1dJRFRIIDEKKyNkZWZpbmUgUl9ORVRXT1JLX1NUQVRfX2V4Y19jb2xfX3llcyAxCisjZGVmaW5lIFJfTkVUV09SS19TVEFUX19leGNfY29sX19ubyAwCisjZGVmaW5lIFJfTkVUV09SS19TVEFUX19tZGlvX19CSVROUiAwCisjZGVmaW5lIFJfTkVUV09SS19TVEFUX19tZGlvX19XSURUSCAxCisKKyNkZWZpbmUgUl9SRUNfQ09VTlRFUlMgKElPX1RZUEVDQVNUX1JPX1VEV09SRCAweGIwMDAwMGE0KQorI2RlZmluZSBSX1JFQ19DT1VOVEVSU19fY29uZ2VzdGlvbl9fQklUTlIgMjQKKyNkZWZpbmUgUl9SRUNfQ09VTlRFUlNfX2Nvbmdlc3Rpb25fX1dJRFRIIDgKKyNkZWZpbmUgUl9SRUNfQ09VTlRFUlNfX292ZXJzaXplX19CSVROUiAxNgorI2RlZmluZSBSX1JFQ19DT1VOVEVSU19fb3ZlcnNpemVfX1dJRFRIIDgKKyNkZWZpbmUgUl9SRUNfQ09VTlRFUlNfX2FsaWdubWVudF9lcnJvcl9fQklUTlIgOAorI2RlZmluZSBSX1JFQ19DT1VOVEVSU19fYWxpZ25tZW50X2Vycm9yX19XSURUSCA4CisjZGVmaW5lIFJfUkVDX0NPVU5URVJTX19jcmNfZXJyb3JfX0JJVE5SIDAKKyNkZWZpbmUgUl9SRUNfQ09VTlRFUlNfX2NyY19lcnJvcl9fV0lEVEggOAorCisjZGVmaW5lIFJfVFJfQ09VTlRFUlMgKElPX1RZUEVDQVNUX1JPX1VEV09SRCAweGIwMDAwMGE4KQorI2RlZmluZSBSX1RSX0NPVU5URVJTX19kZWZlcnJlZF9fQklUTlIgMjQKKyNkZWZpbmUgUl9UUl9DT1VOVEVSU19fZGVmZXJyZWRfX1dJRFRIIDgKKyNkZWZpbmUgUl9UUl9DT1VOVEVSU19fbGF0ZV9jb2xfX0JJVE5SIDE2CisjZGVmaW5lIFJfVFJfQ09VTlRFUlNfX2xhdGVfY29sX19XSURUSCA4CisjZGVmaW5lIFJfVFJfQ09VTlRFUlNfX211bHRpcGxlX2NvbF9fQklUTlIgOAorI2RlZmluZSBSX1RSX0NPVU5URVJTX19tdWx0aXBsZV9jb2xfX1dJRFRIIDgKKyNkZWZpbmUgUl9UUl9DT1VOVEVSU19fc2luZ2xlX2NvbF9fQklUTlIgMAorI2RlZmluZSBSX1RSX0NPVU5URVJTX19zaW5nbGVfY29sX19XSURUSCA4CisKKyNkZWZpbmUgUl9QSFlfQ09VTlRFUlMgKElPX1RZUEVDQVNUX1JPX1VEV09SRCAweGIwMDAwMGFjKQorI2RlZmluZSBSX1BIWV9DT1VOVEVSU19fc3FlX3Rlc3RfZXJyb3JfX0JJVE5SIDgKKyNkZWZpbmUgUl9QSFlfQ09VTlRFUlNfX3NxZV90ZXN0X2Vycm9yX19XSURUSCA4CisjZGVmaW5lIFJfUEhZX0NPVU5URVJTX19jYXJyaWVyX2xvc3NfX0JJVE5SIDAKKyNkZWZpbmUgUl9QSFlfQ09VTlRFUlNfX2NhcnJpZXJfbG9zc19fV0lEVEggOAorCisvKgorISogUGFyYWxsZWwgcHJpbnRlciBwb3J0IHJlZ2lzdGVycworISovCisKKyNkZWZpbmUgUl9QQVIwX0NUUkxfREFUQSAoSU9fVFlQRUNBU1RfVURXT1JEIDB4YjAwMDAwNDApCisjZGVmaW5lIFJfUEFSMF9DVFJMX0RBVEFfX3BlcmlfaW50X19CSVROUiAyNAorI2RlZmluZSBSX1BBUjBfQ1RSTF9EQVRBX19wZXJpX2ludF9fV0lEVEggMQorI2RlZmluZSBSX1BBUjBfQ1RSTF9EQVRBX19wZXJpX2ludF9fYWNrIDEKKyNkZWZpbmUgUl9QQVIwX0NUUkxfREFUQV9fcGVyaV9pbnRfX25vcCAwCisjZGVmaW5lIFJfUEFSMF9DVFJMX0RBVEFfX29lX19CSVROUiAyMAorI2RlZmluZSBSX1BBUjBfQ1RSTF9EQVRBX19vZV9fV0lEVEggMQorI2RlZmluZSBSX1BBUjBfQ1RSTF9EQVRBX19vZV9fZW5hYmxlIDEKKyNkZWZpbmUgUl9QQVIwX0NUUkxfREFUQV9fb2VfX2Rpc2FibGUgMAorI2RlZmluZSBSX1BBUjBfQ1RSTF9EQVRBX19zZWxpX19CSVROUiAxOQorI2RlZmluZSBSX1BBUjBfQ1RSTF9EQVRBX19zZWxpX19XSURUSCAxCisjZGVmaW5lIFJfUEFSMF9DVFJMX0RBVEFfX3NlbGlfX2FjdGl2ZSAxCisjZGVmaW5lIFJfUEFSMF9DVFJMX0RBVEFfX3NlbGlfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9QQVIwX0NUUkxfREFUQV9fYXV0b2ZkX19CSVROUiAxOAorI2RlZmluZSBSX1BBUjBfQ1RSTF9EQVRBX19hdXRvZmRfX1dJRFRIIDEKKyNkZWZpbmUgUl9QQVIwX0NUUkxfREFUQV9fYXV0b2ZkX19hY3RpdmUgMQorI2RlZmluZSBSX1BBUjBfQ1RSTF9EQVRBX19hdXRvZmRfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9QQVIwX0NUUkxfREFUQV9fc3RyYl9fQklUTlIgMTcKKyNkZWZpbmUgUl9QQVIwX0NUUkxfREFUQV9fc3RyYl9fV0lEVEggMQorI2RlZmluZSBSX1BBUjBfQ1RSTF9EQVRBX19zdHJiX19hY3RpdmUgMQorI2RlZmluZSBSX1BBUjBfQ1RSTF9EQVRBX19zdHJiX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfUEFSMF9DVFJMX0RBVEFfX2luaXRfX0JJVE5SIDE2CisjZGVmaW5lIFJfUEFSMF9DVFJMX0RBVEFfX2luaXRfX1dJRFRIIDEKKyNkZWZpbmUgUl9QQVIwX0NUUkxfREFUQV9faW5pdF9fYWN0aXZlIDEKKyNkZWZpbmUgUl9QQVIwX0NUUkxfREFUQV9faW5pdF9faW5hY3RpdmUgMAorI2RlZmluZSBSX1BBUjBfQ1RSTF9EQVRBX19lY3BfY21kX19CSVROUiA4CisjZGVmaW5lIFJfUEFSMF9DVFJMX0RBVEFfX2VjcF9jbWRfX1dJRFRIIDEKKyNkZWZpbmUgUl9QQVIwX0NUUkxfREFUQV9fZWNwX2NtZF9fY29tbWFuZCAxCisjZGVmaW5lIFJfUEFSMF9DVFJMX0RBVEFfX2VjcF9jbWRfX2RhdGEgMAorI2RlZmluZSBSX1BBUjBfQ1RSTF9EQVRBX19kYXRhX19CSVROUiAwCisjZGVmaW5lIFJfUEFSMF9DVFJMX0RBVEFfX2RhdGFfX1dJRFRIIDgKKworI2RlZmluZSBSX1BBUjBfQ1RSTCAoSU9fVFlQRUNBU1RfQllURSAweGIwMDAwMDQyKQorI2RlZmluZSBSX1BBUjBfQ1RSTF9fY3RybF9fQklUTlIgMAorI2RlZmluZSBSX1BBUjBfQ1RSTF9fY3RybF9fV0lEVEggNQorCisjZGVmaW5lIFJfUEFSMF9TVEFUVVNfREFUQSAoSU9fVFlQRUNBU1RfUk9fVURXT1JEIDB4YjAwMDAwNDApCisjZGVmaW5lIFJfUEFSMF9TVEFUVVNfREFUQV9fbW9kZV9fQklUTlIgMjkKKyNkZWZpbmUgUl9QQVIwX1NUQVRVU19EQVRBX19tb2RlX19XSURUSCAzCisjZGVmaW5lIFJfUEFSMF9TVEFUVVNfREFUQV9fbW9kZV9fbWFudWFsIDAKKyNkZWZpbmUgUl9QQVIwX1NUQVRVU19EQVRBX19tb2RlX19jZW50cm9uaWNzIDEKKyNkZWZpbmUgUl9QQVIwX1NUQVRVU19EQVRBX19tb2RlX19mYXN0Ynl0ZSAyCisjZGVmaW5lIFJfUEFSMF9TVEFUVVNfREFUQV9fbW9kZV9fbmliYmxlIDMKKyNkZWZpbmUgUl9QQVIwX1NUQVRVU19EQVRBX19tb2RlX19ieXRlIDQKKyNkZWZpbmUgUl9QQVIwX1NUQVRVU19EQVRBX19tb2RlX19lY3BfZndkIDUKKyNkZWZpbmUgUl9QQVIwX1NUQVRVU19EQVRBX19tb2RlX19lY3BfcmV2IDYKKyNkZWZpbmUgUl9QQVIwX1NUQVRVU19EQVRBX19tb2RlX19vZmYgNworI2RlZmluZSBSX1BBUjBfU1RBVFVTX0RBVEFfX21vZGVfX2VwcF93cjEgNQorI2RlZmluZSBSX1BBUjBfU1RBVFVTX0RBVEFfX21vZGVfX2VwcF93cjIgNgorI2RlZmluZSBSX1BBUjBfU1RBVFVTX0RBVEFfX21vZGVfX2VwcF93cjMgNworI2RlZmluZSBSX1BBUjBfU1RBVFVTX0RBVEFfX21vZGVfX2VwcF9yZCAwCisjZGVmaW5lIFJfUEFSMF9TVEFUVVNfREFUQV9fcGVycl9fQklUTlIgMjgKKyNkZWZpbmUgUl9QQVIwX1NUQVRVU19EQVRBX19wZXJyX19XSURUSCAxCisjZGVmaW5lIFJfUEFSMF9TVEFUVVNfREFUQV9fcGVycl9fYWN0aXZlIDEKKyNkZWZpbmUgUl9QQVIwX1NUQVRVU19EQVRBX19wZXJyX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfUEFSMF9TVEFUVVNfREFUQV9fYWNrX19CSVROUiAyNworI2RlZmluZSBSX1BBUjBfU1RBVFVTX0RBVEFfX2Fja19fV0lEVEggMQorI2RlZmluZSBSX1BBUjBfU1RBVFVTX0RBVEFfX2Fja19fYWN0aXZlIDAKKyNkZWZpbmUgUl9QQVIwX1NUQVRVU19EQVRBX19hY2tfX2luYWN0aXZlIDEKKyNkZWZpbmUgUl9QQVIwX1NUQVRVU19EQVRBX19idXN5X19CSVROUiAyNgorI2RlZmluZSBSX1BBUjBfU1RBVFVTX0RBVEFfX2J1c3lfX1dJRFRIIDEKKyNkZWZpbmUgUl9QQVIwX1NUQVRVU19EQVRBX19idXN5X19hY3RpdmUgMQorI2RlZmluZSBSX1BBUjBfU1RBVFVTX0RBVEFfX2J1c3lfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9QQVIwX1NUQVRVU19EQVRBX19mYXVsdF9fQklUTlIgMjUKKyNkZWZpbmUgUl9QQVIwX1NUQVRVU19EQVRBX19mYXVsdF9fV0lEVEggMQorI2RlZmluZSBSX1BBUjBfU1RBVFVTX0RBVEFfX2ZhdWx0X19hY3RpdmUgMAorI2RlZmluZSBSX1BBUjBfU1RBVFVTX0RBVEFfX2ZhdWx0X19pbmFjdGl2ZSAxCisjZGVmaW5lIFJfUEFSMF9TVEFUVVNfREFUQV9fc2VsX19CSVROUiAyNAorI2RlZmluZSBSX1BBUjBfU1RBVFVTX0RBVEFfX3NlbF9fV0lEVEggMQorI2RlZmluZSBSX1BBUjBfU1RBVFVTX0RBVEFfX3NlbF9fYWN0aXZlIDEKKyNkZWZpbmUgUl9QQVIwX1NUQVRVU19EQVRBX19zZWxfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9QQVIwX1NUQVRVU19EQVRBX19leHRfbW9kZV9fQklUTlIgMjMKKyNkZWZpbmUgUl9QQVIwX1NUQVRVU19EQVRBX19leHRfbW9kZV9fV0lEVEggMQorI2RlZmluZSBSX1BBUjBfU1RBVFVTX0RBVEFfX2V4dF9tb2RlX19lbmFibGUgMQorI2RlZmluZSBSX1BBUjBfU1RBVFVTX0RBVEFfX2V4dF9tb2RlX19kaXNhYmxlIDAKKyNkZWZpbmUgUl9QQVIwX1NUQVRVU19EQVRBX19lY3BfMTZfX0JJVE5SIDIyCisjZGVmaW5lIFJfUEFSMF9TVEFUVVNfREFUQV9fZWNwXzE2X19XSURUSCAxCisjZGVmaW5lIFJfUEFSMF9TVEFUVVNfREFUQV9fZWNwXzE2X19hY3RpdmUgMQorI2RlZmluZSBSX1BBUjBfU1RBVFVTX0RBVEFfX2VjcF8xNl9faW5hY3RpdmUgMAorI2RlZmluZSBSX1BBUjBfU1RBVFVTX0RBVEFfX3RyX3JkeV9fQklUTlIgMTcKKyNkZWZpbmUgUl9QQVIwX1NUQVRVU19EQVRBX190cl9yZHlfX1dJRFRIIDEKKyNkZWZpbmUgUl9QQVIwX1NUQVRVU19EQVRBX190cl9yZHlfX3JlYWR5IDEKKyNkZWZpbmUgUl9QQVIwX1NUQVRVU19EQVRBX190cl9yZHlfX2J1c3kgMAorI2RlZmluZSBSX1BBUjBfU1RBVFVTX0RBVEFfX2Rhdl9fQklUTlIgMTYKKyNkZWZpbmUgUl9QQVIwX1NUQVRVU19EQVRBX19kYXZfX1dJRFRIIDEKKyNkZWZpbmUgUl9QQVIwX1NUQVRVU19EQVRBX19kYXZfX2RhdGEgMQorI2RlZmluZSBSX1BBUjBfU1RBVFVTX0RBVEFfX2Rhdl9fbm9kYXRhIDAKKyNkZWZpbmUgUl9QQVIwX1NUQVRVU19EQVRBX19lY3BfY21kX19CSVROUiA4CisjZGVmaW5lIFJfUEFSMF9TVEFUVVNfREFUQV9fZWNwX2NtZF9fV0lEVEggMQorI2RlZmluZSBSX1BBUjBfU1RBVFVTX0RBVEFfX2VjcF9jbWRfX2NvbW1hbmQgMQorI2RlZmluZSBSX1BBUjBfU1RBVFVTX0RBVEFfX2VjcF9jbWRfX2RhdGEgMAorI2RlZmluZSBSX1BBUjBfU1RBVFVTX0RBVEFfX2RhdGFfX0JJVE5SIDAKKyNkZWZpbmUgUl9QQVIwX1NUQVRVU19EQVRBX19kYXRhX19XSURUSCA4CisKKyNkZWZpbmUgUl9QQVIwX1NUQVRVUyAoSU9fVFlQRUNBU1RfUk9fVVdPUkQgMHhiMDAwMDA0MikKKyNkZWZpbmUgUl9QQVIwX1NUQVRVU19fbW9kZV9fQklUTlIgMTMKKyNkZWZpbmUgUl9QQVIwX1NUQVRVU19fbW9kZV9fV0lEVEggMworI2RlZmluZSBSX1BBUjBfU1RBVFVTX19tb2RlX19tYW51YWwgMAorI2RlZmluZSBSX1BBUjBfU1RBVFVTX19tb2RlX19jZW50cm9uaWNzIDEKKyNkZWZpbmUgUl9QQVIwX1NUQVRVU19fbW9kZV9fZmFzdGJ5dGUgMgorI2RlZmluZSBSX1BBUjBfU1RBVFVTX19tb2RlX19uaWJibGUgMworI2RlZmluZSBSX1BBUjBfU1RBVFVTX19tb2RlX19ieXRlIDQKKyNkZWZpbmUgUl9QQVIwX1NUQVRVU19fbW9kZV9fZWNwX2Z3ZCA1CisjZGVmaW5lIFJfUEFSMF9TVEFUVVNfX21vZGVfX2VjcF9yZXYgNgorI2RlZmluZSBSX1BBUjBfU1RBVFVTX19tb2RlX19vZmYgNworI2RlZmluZSBSX1BBUjBfU1RBVFVTX19tb2RlX19lcHBfd3IxIDUKKyNkZWZpbmUgUl9QQVIwX1NUQVRVU19fbW9kZV9fZXBwX3dyMiA2CisjZGVmaW5lIFJfUEFSMF9TVEFUVVNfX21vZGVfX2VwcF93cjMgNworI2RlZmluZSBSX1BBUjBfU1RBVFVTX19tb2RlX19lcHBfcmQgMAorI2RlZmluZSBSX1BBUjBfU1RBVFVTX19wZXJyX19CSVROUiAxMgorI2RlZmluZSBSX1BBUjBfU1RBVFVTX19wZXJyX19XSURUSCAxCisjZGVmaW5lIFJfUEFSMF9TVEFUVVNfX3BlcnJfX2FjdGl2ZSAxCisjZGVmaW5lIFJfUEFSMF9TVEFUVVNfX3BlcnJfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9QQVIwX1NUQVRVU19fYWNrX19CSVROUiAxMQorI2RlZmluZSBSX1BBUjBfU1RBVFVTX19hY2tfX1dJRFRIIDEKKyNkZWZpbmUgUl9QQVIwX1NUQVRVU19fYWNrX19hY3RpdmUgMAorI2RlZmluZSBSX1BBUjBfU1RBVFVTX19hY2tfX2luYWN0aXZlIDEKKyNkZWZpbmUgUl9QQVIwX1NUQVRVU19fYnVzeV9fQklUTlIgMTAKKyNkZWZpbmUgUl9QQVIwX1NUQVRVU19fYnVzeV9fV0lEVEggMQorI2RlZmluZSBSX1BBUjBfU1RBVFVTX19idXN5X19hY3RpdmUgMQorI2RlZmluZSBSX1BBUjBfU1RBVFVTX19idXN5X19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfUEFSMF9TVEFUVVNfX2ZhdWx0X19CSVROUiA5CisjZGVmaW5lIFJfUEFSMF9TVEFUVVNfX2ZhdWx0X19XSURUSCAxCisjZGVmaW5lIFJfUEFSMF9TVEFUVVNfX2ZhdWx0X19hY3RpdmUgMAorI2RlZmluZSBSX1BBUjBfU1RBVFVTX19mYXVsdF9faW5hY3RpdmUgMQorI2RlZmluZSBSX1BBUjBfU1RBVFVTX19zZWxfX0JJVE5SIDgKKyNkZWZpbmUgUl9QQVIwX1NUQVRVU19fc2VsX19XSURUSCAxCisjZGVmaW5lIFJfUEFSMF9TVEFUVVNfX3NlbF9fYWN0aXZlIDEKKyNkZWZpbmUgUl9QQVIwX1NUQVRVU19fc2VsX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfUEFSMF9TVEFUVVNfX2V4dF9tb2RlX19CSVROUiA3CisjZGVmaW5lIFJfUEFSMF9TVEFUVVNfX2V4dF9tb2RlX19XSURUSCAxCisjZGVmaW5lIFJfUEFSMF9TVEFUVVNfX2V4dF9tb2RlX19lbmFibGUgMQorI2RlZmluZSBSX1BBUjBfU1RBVFVTX19leHRfbW9kZV9fZGlzYWJsZSAwCisjZGVmaW5lIFJfUEFSMF9TVEFUVVNfX2VjcF8xNl9fQklUTlIgNgorI2RlZmluZSBSX1BBUjBfU1RBVFVTX19lY3BfMTZfX1dJRFRIIDEKKyNkZWZpbmUgUl9QQVIwX1NUQVRVU19fZWNwXzE2X19hY3RpdmUgMQorI2RlZmluZSBSX1BBUjBfU1RBVFVTX19lY3BfMTZfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9QQVIwX1NUQVRVU19fdHJfcmR5X19CSVROUiAxCisjZGVmaW5lIFJfUEFSMF9TVEFUVVNfX3RyX3JkeV9fV0lEVEggMQorI2RlZmluZSBSX1BBUjBfU1RBVFVTX190cl9yZHlfX3JlYWR5IDEKKyNkZWZpbmUgUl9QQVIwX1NUQVRVU19fdHJfcmR5X19idXN5IDAKKyNkZWZpbmUgUl9QQVIwX1NUQVRVU19fZGF2X19CSVROUiAwCisjZGVmaW5lIFJfUEFSMF9TVEFUVVNfX2Rhdl9fV0lEVEggMQorI2RlZmluZSBSX1BBUjBfU1RBVFVTX19kYXZfX2RhdGEgMQorI2RlZmluZSBSX1BBUjBfU1RBVFVTX19kYXZfX25vZGF0YSAwCisKKyNkZWZpbmUgUl9QQVJfRUNQMTZfREFUQSAoSU9fVFlQRUNBU1RfVVdPUkQgMHhiMDAwMDA0MCkKKyNkZWZpbmUgUl9QQVJfRUNQMTZfREFUQV9fZGF0YV9fQklUTlIgMAorI2RlZmluZSBSX1BBUl9FQ1AxNl9EQVRBX19kYXRhX19XSURUSCAxNgorCisjZGVmaW5lIFJfUEFSMF9DT05GSUcgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMDQ0KQorI2RlZmluZSBSX1BBUjBfQ09ORklHX19pb2VfX0JJVE5SIDI1CisjZGVmaW5lIFJfUEFSMF9DT05GSUdfX2lvZV9fV0lEVEggMQorI2RlZmluZSBSX1BBUjBfQ09ORklHX19pb2VfX2ludiAxCisjZGVmaW5lIFJfUEFSMF9DT05GSUdfX2lvZV9fbm9uaW52IDAKKyNkZWZpbmUgUl9QQVIwX0NPTkZJR19faXNlbGlfX0JJVE5SIDI0CisjZGVmaW5lIFJfUEFSMF9DT05GSUdfX2lzZWxpX19XSURUSCAxCisjZGVmaW5lIFJfUEFSMF9DT05GSUdfX2lzZWxpX19pbnYgMQorI2RlZmluZSBSX1BBUjBfQ09ORklHX19pc2VsaV9fbm9uaW52IDAKKyNkZWZpbmUgUl9QQVIwX0NPTkZJR19faWF1dG9mZF9fQklUTlIgMjMKKyNkZWZpbmUgUl9QQVIwX0NPTkZJR19faWF1dG9mZF9fV0lEVEggMQorI2RlZmluZSBSX1BBUjBfQ09ORklHX19pYXV0b2ZkX19pbnYgMQorI2RlZmluZSBSX1BBUjBfQ09ORklHX19pYXV0b2ZkX19ub25pbnYgMAorI2RlZmluZSBSX1BBUjBfQ09ORklHX19pc3RyYl9fQklUTlIgMjIKKyNkZWZpbmUgUl9QQVIwX0NPTkZJR19faXN0cmJfX1dJRFRIIDEKKyNkZWZpbmUgUl9QQVIwX0NPTkZJR19faXN0cmJfX2ludiAxCisjZGVmaW5lIFJfUEFSMF9DT05GSUdfX2lzdHJiX19ub25pbnYgMAorI2RlZmluZSBSX1BBUjBfQ09ORklHX19paW5pdF9fQklUTlIgMjEKKyNkZWZpbmUgUl9QQVIwX0NPTkZJR19faWluaXRfX1dJRFRIIDEKKyNkZWZpbmUgUl9QQVIwX0NPTkZJR19faWluaXRfX2ludiAxCisjZGVmaW5lIFJfUEFSMF9DT05GSUdfX2lpbml0X19ub25pbnYgMAorI2RlZmluZSBSX1BBUjBfQ09ORklHX19pcGVycl9fQklUTlIgMjAKKyNkZWZpbmUgUl9QQVIwX0NPTkZJR19faXBlcnJfX1dJRFRIIDEKKyNkZWZpbmUgUl9QQVIwX0NPTkZJR19faXBlcnJfX2ludiAxCisjZGVmaW5lIFJfUEFSMF9DT05GSUdfX2lwZXJyX19ub25pbnYgMAorI2RlZmluZSBSX1BBUjBfQ09ORklHX19pYWNrX19CSVROUiAxOQorI2RlZmluZSBSX1BBUjBfQ09ORklHX19pYWNrX19XSURUSCAxCisjZGVmaW5lIFJfUEFSMF9DT05GSUdfX2lhY2tfX2ludiAxCisjZGVmaW5lIFJfUEFSMF9DT05GSUdfX2lhY2tfX25vbmludiAwCisjZGVmaW5lIFJfUEFSMF9DT05GSUdfX2lidXN5X19CSVROUiAxOAorI2RlZmluZSBSX1BBUjBfQ09ORklHX19pYnVzeV9fV0lEVEggMQorI2RlZmluZSBSX1BBUjBfQ09ORklHX19pYnVzeV9faW52IDEKKyNkZWZpbmUgUl9QQVIwX0NPTkZJR19faWJ1c3lfX25vbmludiAwCisjZGVmaW5lIFJfUEFSMF9DT05GSUdfX2lmYXVsdF9fQklUTlIgMTcKKyNkZWZpbmUgUl9QQVIwX0NPTkZJR19faWZhdWx0X19XSURUSCAxCisjZGVmaW5lIFJfUEFSMF9DT05GSUdfX2lmYXVsdF9faW52IDEKKyNkZWZpbmUgUl9QQVIwX0NPTkZJR19faWZhdWx0X19ub25pbnYgMAorI2RlZmluZSBSX1BBUjBfQ09ORklHX19pc2VsX19CSVROUiAxNgorI2RlZmluZSBSX1BBUjBfQ09ORklHX19pc2VsX19XSURUSCAxCisjZGVmaW5lIFJfUEFSMF9DT05GSUdfX2lzZWxfX2ludiAxCisjZGVmaW5lIFJfUEFSMF9DT05GSUdfX2lzZWxfX25vbmludiAwCisjZGVmaW5lIFJfUEFSMF9DT05GSUdfX2V4dF9tb2RlX19CSVROUiAxMQorI2RlZmluZSBSX1BBUjBfQ09ORklHX19leHRfbW9kZV9fV0lEVEggMQorI2RlZmluZSBSX1BBUjBfQ09ORklHX19leHRfbW9kZV9fZW5hYmxlIDEKKyNkZWZpbmUgUl9QQVIwX0NPTkZJR19fZXh0X21vZGVfX2Rpc2FibGUgMAorI2RlZmluZSBSX1BBUjBfQ09ORklHX193aWRlX19CSVROUiAxMAorI2RlZmluZSBSX1BBUjBfQ09ORklHX193aWRlX19XSURUSCAxCisjZGVmaW5lIFJfUEFSMF9DT05GSUdfX3dpZGVfX2VuYWJsZSAxCisjZGVmaW5lIFJfUEFSMF9DT05GSUdfX3dpZGVfX2Rpc2FibGUgMAorI2RlZmluZSBSX1BBUjBfQ09ORklHX19kbWFfX0JJVE5SIDkKKyNkZWZpbmUgUl9QQVIwX0NPTkZJR19fZG1hX19XSURUSCAxCisjZGVmaW5lIFJfUEFSMF9DT05GSUdfX2RtYV9fZW5hYmxlIDEKKyNkZWZpbmUgUl9QQVIwX0NPTkZJR19fZG1hX19kaXNhYmxlIDAKKyNkZWZpbmUgUl9QQVIwX0NPTkZJR19fcmxlX2luX19CSVROUiA4CisjZGVmaW5lIFJfUEFSMF9DT05GSUdfX3JsZV9pbl9fV0lEVEggMQorI2RlZmluZSBSX1BBUjBfQ09ORklHX19ybGVfaW5fX2VuYWJsZSAxCisjZGVmaW5lIFJfUEFSMF9DT05GSUdfX3JsZV9pbl9fZGlzYWJsZSAwCisjZGVmaW5lIFJfUEFSMF9DT05GSUdfX3JsZV9vdXRfX0JJVE5SIDcKKyNkZWZpbmUgUl9QQVIwX0NPTkZJR19fcmxlX291dF9fV0lEVEggMQorI2RlZmluZSBSX1BBUjBfQ09ORklHX19ybGVfb3V0X19lbmFibGUgMQorI2RlZmluZSBSX1BBUjBfQ09ORklHX19ybGVfb3V0X19kaXNhYmxlIDAKKyNkZWZpbmUgUl9QQVIwX0NPTkZJR19fZW5hYmxlX19CSVROUiA2CisjZGVmaW5lIFJfUEFSMF9DT05GSUdfX2VuYWJsZV9fV0lEVEggMQorI2RlZmluZSBSX1BBUjBfQ09ORklHX19lbmFibGVfX29uIDEKKyNkZWZpbmUgUl9QQVIwX0NPTkZJR19fZW5hYmxlX19yZXNldCAwCisjZGVmaW5lIFJfUEFSMF9DT05GSUdfX2ZvcmNlX19CSVROUiA1CisjZGVmaW5lIFJfUEFSMF9DT05GSUdfX2ZvcmNlX19XSURUSCAxCisjZGVmaW5lIFJfUEFSMF9DT05GSUdfX2ZvcmNlX19vbiAxCisjZGVmaW5lIFJfUEFSMF9DT05GSUdfX2ZvcmNlX19vZmYgMAorI2RlZmluZSBSX1BBUjBfQ09ORklHX19pZ25fYWNrX19CSVROUiA0CisjZGVmaW5lIFJfUEFSMF9DT05GSUdfX2lnbl9hY2tfX1dJRFRIIDEKKyNkZWZpbmUgUl9QQVIwX0NPTkZJR19faWduX2Fja19faWdub3JlIDEKKyNkZWZpbmUgUl9QQVIwX0NPTkZJR19faWduX2Fja19fd2FpdCAwCisjZGVmaW5lIFJfUEFSMF9DT05GSUdfX29lX2Fja19fQklUTlIgMworI2RlZmluZSBSX1BBUjBfQ09ORklHX19vZV9hY2tfX1dJRFRIIDEKKyNkZWZpbmUgUl9QQVIwX0NPTkZJR19fb2VfYWNrX193YWl0X29lIDEKKyNkZWZpbmUgUl9QQVIwX0NPTkZJR19fb2VfYWNrX19kb250X3dhaXQgMAorI2RlZmluZSBSX1BBUjBfQ09ORklHX19vZV9hY2tfX2VwcF9hZGRyIDEKKyNkZWZpbmUgUl9QQVIwX0NPTkZJR19fb2VfYWNrX19lcHBfZGF0YSAwCisjZGVmaW5lIFJfUEFSMF9DT05GSUdfX2VwcF9hZGRyX2RhdGFfX0JJVE5SIDMKKyNkZWZpbmUgUl9QQVIwX0NPTkZJR19fZXBwX2FkZHJfZGF0YV9fV0lEVEggMQorI2RlZmluZSBSX1BBUjBfQ09ORklHX19lcHBfYWRkcl9kYXRhX193YWl0X29lIDEKKyNkZWZpbmUgUl9QQVIwX0NPTkZJR19fZXBwX2FkZHJfZGF0YV9fZG9udF93YWl0IDAKKyNkZWZpbmUgUl9QQVIwX0NPTkZJR19fZXBwX2FkZHJfZGF0YV9fZXBwX2FkZHIgMQorI2RlZmluZSBSX1BBUjBfQ09ORklHX19lcHBfYWRkcl9kYXRhX19lcHBfZGF0YSAwCisjZGVmaW5lIFJfUEFSMF9DT05GSUdfX21vZGVfX0JJVE5SIDAKKyNkZWZpbmUgUl9QQVIwX0NPTkZJR19fbW9kZV9fV0lEVEggMworI2RlZmluZSBSX1BBUjBfQ09ORklHX19tb2RlX19tYW51YWwgMAorI2RlZmluZSBSX1BBUjBfQ09ORklHX19tb2RlX19jZW50cm9uaWNzIDEKKyNkZWZpbmUgUl9QQVIwX0NPTkZJR19fbW9kZV9fZmFzdGJ5dGUgMgorI2RlZmluZSBSX1BBUjBfQ09ORklHX19tb2RlX19uaWJibGUgMworI2RlZmluZSBSX1BBUjBfQ09ORklHX19tb2RlX19ieXRlIDQKKyNkZWZpbmUgUl9QQVIwX0NPTkZJR19fbW9kZV9fZWNwX2Z3ZCA1CisjZGVmaW5lIFJfUEFSMF9DT05GSUdfX21vZGVfX2VjcF9yZXYgNgorI2RlZmluZSBSX1BBUjBfQ09ORklHX19tb2RlX19vZmYgNworI2RlZmluZSBSX1BBUjBfQ09ORklHX19tb2RlX19lcHBfd3IxIDUKKyNkZWZpbmUgUl9QQVIwX0NPTkZJR19fbW9kZV9fZXBwX3dyMiA2CisjZGVmaW5lIFJfUEFSMF9DT05GSUdfX21vZGVfX2VwcF93cjMgNworI2RlZmluZSBSX1BBUjBfQ09ORklHX19tb2RlX19lcHBfcmQgMAorCisjZGVmaW5lIFJfUEFSMF9ERUxBWSAoSU9fVFlQRUNBU1RfVURXT1JEIDB4YjAwMDAwNDgpCisjZGVmaW5lIFJfUEFSMF9ERUxBWV9fZmluZV9ob2xkX19CSVROUiAyMQorI2RlZmluZSBSX1BBUjBfREVMQVlfX2ZpbmVfaG9sZF9fV0lEVEggMworI2RlZmluZSBSX1BBUjBfREVMQVlfX2hvbGRfX0JJVE5SIDE2CisjZGVmaW5lIFJfUEFSMF9ERUxBWV9faG9sZF9fV0lEVEggNQorI2RlZmluZSBSX1BBUjBfREVMQVlfX2ZpbmVfc3RyYl9fQklUTlIgMTMKKyNkZWZpbmUgUl9QQVIwX0RFTEFZX19maW5lX3N0cmJfX1dJRFRIIDMKKyNkZWZpbmUgUl9QQVIwX0RFTEFZX19zdHJvYmVfX0JJVE5SIDgKKyNkZWZpbmUgUl9QQVIwX0RFTEFZX19zdHJvYmVfX1dJRFRIIDUKKyNkZWZpbmUgUl9QQVIwX0RFTEFZX19maW5lX3NldHVwX19CSVROUiA1CisjZGVmaW5lIFJfUEFSMF9ERUxBWV9fZmluZV9zZXR1cF9fV0lEVEggMworI2RlZmluZSBSX1BBUjBfREVMQVlfX3NldHVwX19CSVROUiAwCisjZGVmaW5lIFJfUEFSMF9ERUxBWV9fc2V0dXBfX1dJRFRIIDUKKworI2RlZmluZSBSX1BBUjFfQ1RSTF9EQVRBIChJT19UWVBFQ0FTVF9VRFdPUkQgMHhiMDAwMDA1MCkKKyNkZWZpbmUgUl9QQVIxX0NUUkxfREFUQV9fcGVyaV9pbnRfX0JJVE5SIDI0CisjZGVmaW5lIFJfUEFSMV9DVFJMX0RBVEFfX3BlcmlfaW50X19XSURUSCAxCisjZGVmaW5lIFJfUEFSMV9DVFJMX0RBVEFfX3BlcmlfaW50X19hY2sgMQorI2RlZmluZSBSX1BBUjFfQ1RSTF9EQVRBX19wZXJpX2ludF9fbm9wIDAKKyNkZWZpbmUgUl9QQVIxX0NUUkxfREFUQV9fb2VfX0JJVE5SIDIwCisjZGVmaW5lIFJfUEFSMV9DVFJMX0RBVEFfX29lX19XSURUSCAxCisjZGVmaW5lIFJfUEFSMV9DVFJMX0RBVEFfX29lX19lbmFibGUgMQorI2RlZmluZSBSX1BBUjFfQ1RSTF9EQVRBX19vZV9fZGlzYWJsZSAwCisjZGVmaW5lIFJfUEFSMV9DVFJMX0RBVEFfX3NlbGlfX0JJVE5SIDE5CisjZGVmaW5lIFJfUEFSMV9DVFJMX0RBVEFfX3NlbGlfX1dJRFRIIDEKKyNkZWZpbmUgUl9QQVIxX0NUUkxfREFUQV9fc2VsaV9fYWN0aXZlIDEKKyNkZWZpbmUgUl9QQVIxX0NUUkxfREFUQV9fc2VsaV9faW5hY3RpdmUgMAorI2RlZmluZSBSX1BBUjFfQ1RSTF9EQVRBX19hdXRvZmRfX0JJVE5SIDE4CisjZGVmaW5lIFJfUEFSMV9DVFJMX0RBVEFfX2F1dG9mZF9fV0lEVEggMQorI2RlZmluZSBSX1BBUjFfQ1RSTF9EQVRBX19hdXRvZmRfX2FjdGl2ZSAxCisjZGVmaW5lIFJfUEFSMV9DVFJMX0RBVEFfX2F1dG9mZF9faW5hY3RpdmUgMAorI2RlZmluZSBSX1BBUjFfQ1RSTF9EQVRBX19zdHJiX19CSVROUiAxNworI2RlZmluZSBSX1BBUjFfQ1RSTF9EQVRBX19zdHJiX19XSURUSCAxCisjZGVmaW5lIFJfUEFSMV9DVFJMX0RBVEFfX3N0cmJfX2FjdGl2ZSAxCisjZGVmaW5lIFJfUEFSMV9DVFJMX0RBVEFfX3N0cmJfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9QQVIxX0NUUkxfREFUQV9faW5pdF9fQklUTlIgMTYKKyNkZWZpbmUgUl9QQVIxX0NUUkxfREFUQV9faW5pdF9fV0lEVEggMQorI2RlZmluZSBSX1BBUjFfQ1RSTF9EQVRBX19pbml0X19hY3RpdmUgMQorI2RlZmluZSBSX1BBUjFfQ1RSTF9EQVRBX19pbml0X19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfUEFSMV9DVFJMX0RBVEFfX2VjcF9jbWRfX0JJVE5SIDgKKyNkZWZpbmUgUl9QQVIxX0NUUkxfREFUQV9fZWNwX2NtZF9fV0lEVEggMQorI2RlZmluZSBSX1BBUjFfQ1RSTF9EQVRBX19lY3BfY21kX19jb21tYW5kIDEKKyNkZWZpbmUgUl9QQVIxX0NUUkxfREFUQV9fZWNwX2NtZF9fZGF0YSAwCisjZGVmaW5lIFJfUEFSMV9DVFJMX0RBVEFfX2RhdGFfX0JJVE5SIDAKKyNkZWZpbmUgUl9QQVIxX0NUUkxfREFUQV9fZGF0YV9fV0lEVEggOAorCisjZGVmaW5lIFJfUEFSMV9DVFJMIChJT19UWVBFQ0FTVF9CWVRFIDB4YjAwMDAwNTIpCisjZGVmaW5lIFJfUEFSMV9DVFJMX19jdHJsX19CSVROUiAwCisjZGVmaW5lIFJfUEFSMV9DVFJMX19jdHJsX19XSURUSCA1CisKKyNkZWZpbmUgUl9QQVIxX1NUQVRVU19EQVRBIChJT19UWVBFQ0FTVF9ST19VRFdPUkQgMHhiMDAwMDA1MCkKKyNkZWZpbmUgUl9QQVIxX1NUQVRVU19EQVRBX19tb2RlX19CSVROUiAyOQorI2RlZmluZSBSX1BBUjFfU1RBVFVTX0RBVEFfX21vZGVfX1dJRFRIIDMKKyNkZWZpbmUgUl9QQVIxX1NUQVRVU19EQVRBX19tb2RlX19tYW51YWwgMAorI2RlZmluZSBSX1BBUjFfU1RBVFVTX0RBVEFfX21vZGVfX2NlbnRyb25pY3MgMQorI2RlZmluZSBSX1BBUjFfU1RBVFVTX0RBVEFfX21vZGVfX2Zhc3RieXRlIDIKKyNkZWZpbmUgUl9QQVIxX1NUQVRVU19EQVRBX19tb2RlX19uaWJibGUgMworI2RlZmluZSBSX1BBUjFfU1RBVFVTX0RBVEFfX21vZGVfX2J5dGUgNAorI2RlZmluZSBSX1BBUjFfU1RBVFVTX0RBVEFfX21vZGVfX2VjcF9md2QgNQorI2RlZmluZSBSX1BBUjFfU1RBVFVTX0RBVEFfX21vZGVfX2VjcF9yZXYgNgorI2RlZmluZSBSX1BBUjFfU1RBVFVTX0RBVEFfX21vZGVfX29mZiA3CisjZGVmaW5lIFJfUEFSMV9TVEFUVVNfREFUQV9fbW9kZV9fZXBwX3dyMSA1CisjZGVmaW5lIFJfUEFSMV9TVEFUVVNfREFUQV9fbW9kZV9fZXBwX3dyMiA2CisjZGVmaW5lIFJfUEFSMV9TVEFUVVNfREFUQV9fbW9kZV9fZXBwX3dyMyA3CisjZGVmaW5lIFJfUEFSMV9TVEFUVVNfREFUQV9fbW9kZV9fZXBwX3JkIDAKKyNkZWZpbmUgUl9QQVIxX1NUQVRVU19EQVRBX19wZXJyX19CSVROUiAyOAorI2RlZmluZSBSX1BBUjFfU1RBVFVTX0RBVEFfX3BlcnJfX1dJRFRIIDEKKyNkZWZpbmUgUl9QQVIxX1NUQVRVU19EQVRBX19wZXJyX19hY3RpdmUgMQorI2RlZmluZSBSX1BBUjFfU1RBVFVTX0RBVEFfX3BlcnJfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9QQVIxX1NUQVRVU19EQVRBX19hY2tfX0JJVE5SIDI3CisjZGVmaW5lIFJfUEFSMV9TVEFUVVNfREFUQV9fYWNrX19XSURUSCAxCisjZGVmaW5lIFJfUEFSMV9TVEFUVVNfREFUQV9fYWNrX19hY3RpdmUgMAorI2RlZmluZSBSX1BBUjFfU1RBVFVTX0RBVEFfX2Fja19faW5hY3RpdmUgMQorI2RlZmluZSBSX1BBUjFfU1RBVFVTX0RBVEFfX2J1c3lfX0JJVE5SIDI2CisjZGVmaW5lIFJfUEFSMV9TVEFUVVNfREFUQV9fYnVzeV9fV0lEVEggMQorI2RlZmluZSBSX1BBUjFfU1RBVFVTX0RBVEFfX2J1c3lfX2FjdGl2ZSAxCisjZGVmaW5lIFJfUEFSMV9TVEFUVVNfREFUQV9fYnVzeV9faW5hY3RpdmUgMAorI2RlZmluZSBSX1BBUjFfU1RBVFVTX0RBVEFfX2ZhdWx0X19CSVROUiAyNQorI2RlZmluZSBSX1BBUjFfU1RBVFVTX0RBVEFfX2ZhdWx0X19XSURUSCAxCisjZGVmaW5lIFJfUEFSMV9TVEFUVVNfREFUQV9fZmF1bHRfX2FjdGl2ZSAwCisjZGVmaW5lIFJfUEFSMV9TVEFUVVNfREFUQV9fZmF1bHRfX2luYWN0aXZlIDEKKyNkZWZpbmUgUl9QQVIxX1NUQVRVU19EQVRBX19zZWxfX0JJVE5SIDI0CisjZGVmaW5lIFJfUEFSMV9TVEFUVVNfREFUQV9fc2VsX19XSURUSCAxCisjZGVmaW5lIFJfUEFSMV9TVEFUVVNfREFUQV9fc2VsX19hY3RpdmUgMQorI2RlZmluZSBSX1BBUjFfU1RBVFVTX0RBVEFfX3NlbF9faW5hY3RpdmUgMAorI2RlZmluZSBSX1BBUjFfU1RBVFVTX0RBVEFfX2V4dF9tb2RlX19CSVROUiAyMworI2RlZmluZSBSX1BBUjFfU1RBVFVTX0RBVEFfX2V4dF9tb2RlX19XSURUSCAxCisjZGVmaW5lIFJfUEFSMV9TVEFUVVNfREFUQV9fZXh0X21vZGVfX2VuYWJsZSAxCisjZGVmaW5lIFJfUEFSMV9TVEFUVVNfREFUQV9fZXh0X21vZGVfX2Rpc2FibGUgMAorI2RlZmluZSBSX1BBUjFfU1RBVFVTX0RBVEFfX3RyX3JkeV9fQklUTlIgMTcKKyNkZWZpbmUgUl9QQVIxX1NUQVRVU19EQVRBX190cl9yZHlfX1dJRFRIIDEKKyNkZWZpbmUgUl9QQVIxX1NUQVRVU19EQVRBX190cl9yZHlfX3JlYWR5IDEKKyNkZWZpbmUgUl9QQVIxX1NUQVRVU19EQVRBX190cl9yZHlfX2J1c3kgMAorI2RlZmluZSBSX1BBUjFfU1RBVFVTX0RBVEFfX2Rhdl9fQklUTlIgMTYKKyNkZWZpbmUgUl9QQVIxX1NUQVRVU19EQVRBX19kYXZfX1dJRFRIIDEKKyNkZWZpbmUgUl9QQVIxX1NUQVRVU19EQVRBX19kYXZfX2RhdGEgMQorI2RlZmluZSBSX1BBUjFfU1RBVFVTX0RBVEFfX2Rhdl9fbm9kYXRhIDAKKyNkZWZpbmUgUl9QQVIxX1NUQVRVU19EQVRBX19lY3BfY21kX19CSVROUiA4CisjZGVmaW5lIFJfUEFSMV9TVEFUVVNfREFUQV9fZWNwX2NtZF9fV0lEVEggMQorI2RlZmluZSBSX1BBUjFfU1RBVFVTX0RBVEFfX2VjcF9jbWRfX2NvbW1hbmQgMQorI2RlZmluZSBSX1BBUjFfU1RBVFVTX0RBVEFfX2VjcF9jbWRfX2RhdGEgMAorI2RlZmluZSBSX1BBUjFfU1RBVFVTX0RBVEFfX2RhdGFfX0JJVE5SIDAKKyNkZWZpbmUgUl9QQVIxX1NUQVRVU19EQVRBX19kYXRhX19XSURUSCA4CisKKyNkZWZpbmUgUl9QQVIxX1NUQVRVUyAoSU9fVFlQRUNBU1RfUk9fVVdPUkQgMHhiMDAwMDA1MikKKyNkZWZpbmUgUl9QQVIxX1NUQVRVU19fbW9kZV9fQklUTlIgMTMKKyNkZWZpbmUgUl9QQVIxX1NUQVRVU19fbW9kZV9fV0lEVEggMworI2RlZmluZSBSX1BBUjFfU1RBVFVTX19tb2RlX19tYW51YWwgMAorI2RlZmluZSBSX1BBUjFfU1RBVFVTX19tb2RlX19jZW50cm9uaWNzIDEKKyNkZWZpbmUgUl9QQVIxX1NUQVRVU19fbW9kZV9fZmFzdGJ5dGUgMgorI2RlZmluZSBSX1BBUjFfU1RBVFVTX19tb2RlX19uaWJibGUgMworI2RlZmluZSBSX1BBUjFfU1RBVFVTX19tb2RlX19ieXRlIDQKKyNkZWZpbmUgUl9QQVIxX1NUQVRVU19fbW9kZV9fZWNwX2Z3ZCA1CisjZGVmaW5lIFJfUEFSMV9TVEFUVVNfX21vZGVfX2VjcF9yZXYgNgorI2RlZmluZSBSX1BBUjFfU1RBVFVTX19tb2RlX19vZmYgNworI2RlZmluZSBSX1BBUjFfU1RBVFVTX19tb2RlX19lcHBfd3IxIDUKKyNkZWZpbmUgUl9QQVIxX1NUQVRVU19fbW9kZV9fZXBwX3dyMiA2CisjZGVmaW5lIFJfUEFSMV9TVEFUVVNfX21vZGVfX2VwcF93cjMgNworI2RlZmluZSBSX1BBUjFfU1RBVFVTX19tb2RlX19lcHBfcmQgMAorI2RlZmluZSBSX1BBUjFfU1RBVFVTX19wZXJyX19CSVROUiAxMgorI2RlZmluZSBSX1BBUjFfU1RBVFVTX19wZXJyX19XSURUSCAxCisjZGVmaW5lIFJfUEFSMV9TVEFUVVNfX3BlcnJfX2FjdGl2ZSAxCisjZGVmaW5lIFJfUEFSMV9TVEFUVVNfX3BlcnJfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9QQVIxX1NUQVRVU19fYWNrX19CSVROUiAxMQorI2RlZmluZSBSX1BBUjFfU1RBVFVTX19hY2tfX1dJRFRIIDEKKyNkZWZpbmUgUl9QQVIxX1NUQVRVU19fYWNrX19hY3RpdmUgMAorI2RlZmluZSBSX1BBUjFfU1RBVFVTX19hY2tfX2luYWN0aXZlIDEKKyNkZWZpbmUgUl9QQVIxX1NUQVRVU19fYnVzeV9fQklUTlIgMTAKKyNkZWZpbmUgUl9QQVIxX1NUQVRVU19fYnVzeV9fV0lEVEggMQorI2RlZmluZSBSX1BBUjFfU1RBVFVTX19idXN5X19hY3RpdmUgMQorI2RlZmluZSBSX1BBUjFfU1RBVFVTX19idXN5X19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfUEFSMV9TVEFUVVNfX2ZhdWx0X19CSVROUiA5CisjZGVmaW5lIFJfUEFSMV9TVEFUVVNfX2ZhdWx0X19XSURUSCAxCisjZGVmaW5lIFJfUEFSMV9TVEFUVVNfX2ZhdWx0X19hY3RpdmUgMAorI2RlZmluZSBSX1BBUjFfU1RBVFVTX19mYXVsdF9faW5hY3RpdmUgMQorI2RlZmluZSBSX1BBUjFfU1RBVFVTX19zZWxfX0JJVE5SIDgKKyNkZWZpbmUgUl9QQVIxX1NUQVRVU19fc2VsX19XSURUSCAxCisjZGVmaW5lIFJfUEFSMV9TVEFUVVNfX3NlbF9fYWN0aXZlIDEKKyNkZWZpbmUgUl9QQVIxX1NUQVRVU19fc2VsX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfUEFSMV9TVEFUVVNfX2V4dF9tb2RlX19CSVROUiA3CisjZGVmaW5lIFJfUEFSMV9TVEFUVVNfX2V4dF9tb2RlX19XSURUSCAxCisjZGVmaW5lIFJfUEFSMV9TVEFUVVNfX2V4dF9tb2RlX19lbmFibGUgMQorI2RlZmluZSBSX1BBUjFfU1RBVFVTX19leHRfbW9kZV9fZGlzYWJsZSAwCisjZGVmaW5lIFJfUEFSMV9TVEFUVVNfX3RyX3JkeV9fQklUTlIgMQorI2RlZmluZSBSX1BBUjFfU1RBVFVTX190cl9yZHlfX1dJRFRIIDEKKyNkZWZpbmUgUl9QQVIxX1NUQVRVU19fdHJfcmR5X19yZWFkeSAxCisjZGVmaW5lIFJfUEFSMV9TVEFUVVNfX3RyX3JkeV9fYnVzeSAwCisjZGVmaW5lIFJfUEFSMV9TVEFUVVNfX2Rhdl9fQklUTlIgMAorI2RlZmluZSBSX1BBUjFfU1RBVFVTX19kYXZfX1dJRFRIIDEKKyNkZWZpbmUgUl9QQVIxX1NUQVRVU19fZGF2X19kYXRhIDEKKyNkZWZpbmUgUl9QQVIxX1NUQVRVU19fZGF2X19ub2RhdGEgMAorCisjZGVmaW5lIFJfUEFSMV9DT05GSUcgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMDU0KQorI2RlZmluZSBSX1BBUjFfQ09ORklHX19pb2VfX0JJVE5SIDI1CisjZGVmaW5lIFJfUEFSMV9DT05GSUdfX2lvZV9fV0lEVEggMQorI2RlZmluZSBSX1BBUjFfQ09ORklHX19pb2VfX2ludiAxCisjZGVmaW5lIFJfUEFSMV9DT05GSUdfX2lvZV9fbm9uaW52IDAKKyNkZWZpbmUgUl9QQVIxX0NPTkZJR19faXNlbGlfX0JJVE5SIDI0CisjZGVmaW5lIFJfUEFSMV9DT05GSUdfX2lzZWxpX19XSURUSCAxCisjZGVmaW5lIFJfUEFSMV9DT05GSUdfX2lzZWxpX19pbnYgMQorI2RlZmluZSBSX1BBUjFfQ09ORklHX19pc2VsaV9fbm9uaW52IDAKKyNkZWZpbmUgUl9QQVIxX0NPTkZJR19faWF1dG9mZF9fQklUTlIgMjMKKyNkZWZpbmUgUl9QQVIxX0NPTkZJR19faWF1dG9mZF9fV0lEVEggMQorI2RlZmluZSBSX1BBUjFfQ09ORklHX19pYXV0b2ZkX19pbnYgMQorI2RlZmluZSBSX1BBUjFfQ09ORklHX19pYXV0b2ZkX19ub25pbnYgMAorI2RlZmluZSBSX1BBUjFfQ09ORklHX19pc3RyYl9fQklUTlIgMjIKKyNkZWZpbmUgUl9QQVIxX0NPTkZJR19faXN0cmJfX1dJRFRIIDEKKyNkZWZpbmUgUl9QQVIxX0NPTkZJR19faXN0cmJfX2ludiAxCisjZGVmaW5lIFJfUEFSMV9DT05GSUdfX2lzdHJiX19ub25pbnYgMAorI2RlZmluZSBSX1BBUjFfQ09ORklHX19paW5pdF9fQklUTlIgMjEKKyNkZWZpbmUgUl9QQVIxX0NPTkZJR19faWluaXRfX1dJRFRIIDEKKyNkZWZpbmUgUl9QQVIxX0NPTkZJR19faWluaXRfX2ludiAxCisjZGVmaW5lIFJfUEFSMV9DT05GSUdfX2lpbml0X19ub25pbnYgMAorI2RlZmluZSBSX1BBUjFfQ09ORklHX19pcGVycl9fQklUTlIgMjAKKyNkZWZpbmUgUl9QQVIxX0NPTkZJR19faXBlcnJfX1dJRFRIIDEKKyNkZWZpbmUgUl9QQVIxX0NPTkZJR19faXBlcnJfX2ludiAxCisjZGVmaW5lIFJfUEFSMV9DT05GSUdfX2lwZXJyX19ub25pbnYgMAorI2RlZmluZSBSX1BBUjFfQ09ORklHX19pYWNrX19CSVROUiAxOQorI2RlZmluZSBSX1BBUjFfQ09ORklHX19pYWNrX19XSURUSCAxCisjZGVmaW5lIFJfUEFSMV9DT05GSUdfX2lhY2tfX2ludiAxCisjZGVmaW5lIFJfUEFSMV9DT05GSUdfX2lhY2tfX25vbmludiAwCisjZGVmaW5lIFJfUEFSMV9DT05GSUdfX2lidXN5X19CSVROUiAxOAorI2RlZmluZSBSX1BBUjFfQ09ORklHX19pYnVzeV9fV0lEVEggMQorI2RlZmluZSBSX1BBUjFfQ09ORklHX19pYnVzeV9faW52IDEKKyNkZWZpbmUgUl9QQVIxX0NPTkZJR19faWJ1c3lfX25vbmludiAwCisjZGVmaW5lIFJfUEFSMV9DT05GSUdfX2lmYXVsdF9fQklUTlIgMTcKKyNkZWZpbmUgUl9QQVIxX0NPTkZJR19faWZhdWx0X19XSURUSCAxCisjZGVmaW5lIFJfUEFSMV9DT05GSUdfX2lmYXVsdF9faW52IDEKKyNkZWZpbmUgUl9QQVIxX0NPTkZJR19faWZhdWx0X19ub25pbnYgMAorI2RlZmluZSBSX1BBUjFfQ09ORklHX19pc2VsX19CSVROUiAxNgorI2RlZmluZSBSX1BBUjFfQ09ORklHX19pc2VsX19XSURUSCAxCisjZGVmaW5lIFJfUEFSMV9DT05GSUdfX2lzZWxfX2ludiAxCisjZGVmaW5lIFJfUEFSMV9DT05GSUdfX2lzZWxfX25vbmludiAwCisjZGVmaW5lIFJfUEFSMV9DT05GSUdfX2V4dF9tb2RlX19CSVROUiAxMQorI2RlZmluZSBSX1BBUjFfQ09ORklHX19leHRfbW9kZV9fV0lEVEggMQorI2RlZmluZSBSX1BBUjFfQ09ORklHX19leHRfbW9kZV9fZW5hYmxlIDEKKyNkZWZpbmUgUl9QQVIxX0NPTkZJR19fZXh0X21vZGVfX2Rpc2FibGUgMAorI2RlZmluZSBSX1BBUjFfQ09ORklHX19kbWFfX0JJVE5SIDkKKyNkZWZpbmUgUl9QQVIxX0NPTkZJR19fZG1hX19XSURUSCAxCisjZGVmaW5lIFJfUEFSMV9DT05GSUdfX2RtYV9fZW5hYmxlIDEKKyNkZWZpbmUgUl9QQVIxX0NPTkZJR19fZG1hX19kaXNhYmxlIDAKKyNkZWZpbmUgUl9QQVIxX0NPTkZJR19fcmxlX2luX19CSVROUiA4CisjZGVmaW5lIFJfUEFSMV9DT05GSUdfX3JsZV9pbl9fV0lEVEggMQorI2RlZmluZSBSX1BBUjFfQ09ORklHX19ybGVfaW5fX2VuYWJsZSAxCisjZGVmaW5lIFJfUEFSMV9DT05GSUdfX3JsZV9pbl9fZGlzYWJsZSAwCisjZGVmaW5lIFJfUEFSMV9DT05GSUdfX3JsZV9vdXRfX0JJVE5SIDcKKyNkZWZpbmUgUl9QQVIxX0NPTkZJR19fcmxlX291dF9fV0lEVEggMQorI2RlZmluZSBSX1BBUjFfQ09ORklHX19ybGVfb3V0X19lbmFibGUgMQorI2RlZmluZSBSX1BBUjFfQ09ORklHX19ybGVfb3V0X19kaXNhYmxlIDAKKyNkZWZpbmUgUl9QQVIxX0NPTkZJR19fZW5hYmxlX19CSVROUiA2CisjZGVmaW5lIFJfUEFSMV9DT05GSUdfX2VuYWJsZV9fV0lEVEggMQorI2RlZmluZSBSX1BBUjFfQ09ORklHX19lbmFibGVfX29uIDEKKyNkZWZpbmUgUl9QQVIxX0NPTkZJR19fZW5hYmxlX19yZXNldCAwCisjZGVmaW5lIFJfUEFSMV9DT05GSUdfX2ZvcmNlX19CSVROUiA1CisjZGVmaW5lIFJfUEFSMV9DT05GSUdfX2ZvcmNlX19XSURUSCAxCisjZGVmaW5lIFJfUEFSMV9DT05GSUdfX2ZvcmNlX19vbiAxCisjZGVmaW5lIFJfUEFSMV9DT05GSUdfX2ZvcmNlX19vZmYgMAorI2RlZmluZSBSX1BBUjFfQ09ORklHX19pZ25fYWNrX19CSVROUiA0CisjZGVmaW5lIFJfUEFSMV9DT05GSUdfX2lnbl9hY2tfX1dJRFRIIDEKKyNkZWZpbmUgUl9QQVIxX0NPTkZJR19faWduX2Fja19faWdub3JlIDEKKyNkZWZpbmUgUl9QQVIxX0NPTkZJR19faWduX2Fja19fd2FpdCAwCisjZGVmaW5lIFJfUEFSMV9DT05GSUdfX29lX2Fja19fQklUTlIgMworI2RlZmluZSBSX1BBUjFfQ09ORklHX19vZV9hY2tfX1dJRFRIIDEKKyNkZWZpbmUgUl9QQVIxX0NPTkZJR19fb2VfYWNrX193YWl0X29lIDEKKyNkZWZpbmUgUl9QQVIxX0NPTkZJR19fb2VfYWNrX19kb250X3dhaXQgMAorI2RlZmluZSBSX1BBUjFfQ09ORklHX19vZV9hY2tfX2VwcF9hZGRyIDEKKyNkZWZpbmUgUl9QQVIxX0NPTkZJR19fb2VfYWNrX19lcHBfZGF0YSAwCisjZGVmaW5lIFJfUEFSMV9DT05GSUdfX2VwcF9hZGRyX2RhdGFfX0JJVE5SIDMKKyNkZWZpbmUgUl9QQVIxX0NPTkZJR19fZXBwX2FkZHJfZGF0YV9fV0lEVEggMQorI2RlZmluZSBSX1BBUjFfQ09ORklHX19lcHBfYWRkcl9kYXRhX193YWl0X29lIDEKKyNkZWZpbmUgUl9QQVIxX0NPTkZJR19fZXBwX2FkZHJfZGF0YV9fZG9udF93YWl0IDAKKyNkZWZpbmUgUl9QQVIxX0NPTkZJR19fZXBwX2FkZHJfZGF0YV9fZXBwX2FkZHIgMQorI2RlZmluZSBSX1BBUjFfQ09ORklHX19lcHBfYWRkcl9kYXRhX19lcHBfZGF0YSAwCisjZGVmaW5lIFJfUEFSMV9DT05GSUdfX21vZGVfX0JJVE5SIDAKKyNkZWZpbmUgUl9QQVIxX0NPTkZJR19fbW9kZV9fV0lEVEggMworI2RlZmluZSBSX1BBUjFfQ09ORklHX19tb2RlX19tYW51YWwgMAorI2RlZmluZSBSX1BBUjFfQ09ORklHX19tb2RlX19jZW50cm9uaWNzIDEKKyNkZWZpbmUgUl9QQVIxX0NPTkZJR19fbW9kZV9fZmFzdGJ5dGUgMgorI2RlZmluZSBSX1BBUjFfQ09ORklHX19tb2RlX19uaWJibGUgMworI2RlZmluZSBSX1BBUjFfQ09ORklHX19tb2RlX19ieXRlIDQKKyNkZWZpbmUgUl9QQVIxX0NPTkZJR19fbW9kZV9fZWNwX2Z3ZCA1CisjZGVmaW5lIFJfUEFSMV9DT05GSUdfX21vZGVfX2VjcF9yZXYgNgorI2RlZmluZSBSX1BBUjFfQ09ORklHX19tb2RlX19vZmYgNworI2RlZmluZSBSX1BBUjFfQ09ORklHX19tb2RlX19lcHBfd3IxIDUKKyNkZWZpbmUgUl9QQVIxX0NPTkZJR19fbW9kZV9fZXBwX3dyMiA2CisjZGVmaW5lIFJfUEFSMV9DT05GSUdfX21vZGVfX2VwcF93cjMgNworI2RlZmluZSBSX1BBUjFfQ09ORklHX19tb2RlX19lcHBfcmQgMAorCisjZGVmaW5lIFJfUEFSMV9ERUxBWSAoSU9fVFlQRUNBU1RfVURXT1JEIDB4YjAwMDAwNTgpCisjZGVmaW5lIFJfUEFSMV9ERUxBWV9fZmluZV9ob2xkX19CSVROUiAyMQorI2RlZmluZSBSX1BBUjFfREVMQVlfX2ZpbmVfaG9sZF9fV0lEVEggMworI2RlZmluZSBSX1BBUjFfREVMQVlfX2hvbGRfX0JJVE5SIDE2CisjZGVmaW5lIFJfUEFSMV9ERUxBWV9faG9sZF9fV0lEVEggNQorI2RlZmluZSBSX1BBUjFfREVMQVlfX2ZpbmVfc3RyYl9fQklUTlIgMTMKKyNkZWZpbmUgUl9QQVIxX0RFTEFZX19maW5lX3N0cmJfX1dJRFRIIDMKKyNkZWZpbmUgUl9QQVIxX0RFTEFZX19zdHJvYmVfX0JJVE5SIDgKKyNkZWZpbmUgUl9QQVIxX0RFTEFZX19zdHJvYmVfX1dJRFRIIDUKKyNkZWZpbmUgUl9QQVIxX0RFTEFZX19maW5lX3NldHVwX19CSVROUiA1CisjZGVmaW5lIFJfUEFSMV9ERUxBWV9fZmluZV9zZXR1cF9fV0lEVEggMworI2RlZmluZSBSX1BBUjFfREVMQVlfX3NldHVwX19CSVROUiAwCisjZGVmaW5lIFJfUEFSMV9ERUxBWV9fc2V0dXBfX1dJRFRIIDUKKworLyoKKyEqIEFUQSBpbnRlcmZhY2UgcmVnaXN0ZXJzCishKi8KKworI2RlZmluZSBSX0FUQV9DVFJMX0RBVEEgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMDQwKQorI2RlZmluZSBSX0FUQV9DVFJMX0RBVEFfX3NlbF9fQklUTlIgMzAKKyNkZWZpbmUgUl9BVEFfQ1RSTF9EQVRBX19zZWxfX1dJRFRIIDIKKyNkZWZpbmUgUl9BVEFfQ1RSTF9EQVRBX19jczFfX0JJVE5SIDI5CisjZGVmaW5lIFJfQVRBX0NUUkxfREFUQV9fY3MxX19XSURUSCAxCisjZGVmaW5lIFJfQVRBX0NUUkxfREFUQV9fY3MxX19hY3RpdmUgMQorI2RlZmluZSBSX0FUQV9DVFJMX0RBVEFfX2NzMV9faW5hY3RpdmUgMAorI2RlZmluZSBSX0FUQV9DVFJMX0RBVEFfX2NzMF9fQklUTlIgMjgKKyNkZWZpbmUgUl9BVEFfQ1RSTF9EQVRBX19jczBfX1dJRFRIIDEKKyNkZWZpbmUgUl9BVEFfQ1RSTF9EQVRBX19jczBfX2FjdGl2ZSAxCisjZGVmaW5lIFJfQVRBX0NUUkxfREFUQV9fY3MwX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfQVRBX0NUUkxfREFUQV9fYWRkcl9fQklUTlIgMjUKKyNkZWZpbmUgUl9BVEFfQ1RSTF9EQVRBX19hZGRyX19XSURUSCAzCisjZGVmaW5lIFJfQVRBX0NUUkxfREFUQV9fcndfX0JJVE5SIDI0CisjZGVmaW5lIFJfQVRBX0NUUkxfREFUQV9fcndfX1dJRFRIIDEKKyNkZWZpbmUgUl9BVEFfQ1RSTF9EQVRBX19yd19fcmVhZCAxCisjZGVmaW5lIFJfQVRBX0NUUkxfREFUQV9fcndfX3dyaXRlIDAKKyNkZWZpbmUgUl9BVEFfQ1RSTF9EQVRBX19zcmNfZHN0X19CSVROUiAyMworI2RlZmluZSBSX0FUQV9DVFJMX0RBVEFfX3NyY19kc3RfX1dJRFRIIDEKKyNkZWZpbmUgUl9BVEFfQ1RSTF9EQVRBX19zcmNfZHN0X19kbWEgMQorI2RlZmluZSBSX0FUQV9DVFJMX0RBVEFfX3NyY19kc3RfX3JlZ2lzdGVyIDAKKyNkZWZpbmUgUl9BVEFfQ1RSTF9EQVRBX19oYW5kc2hfX0JJVE5SIDIyCisjZGVmaW5lIFJfQVRBX0NUUkxfREFUQV9faGFuZHNoX19XSURUSCAxCisjZGVmaW5lIFJfQVRBX0NUUkxfREFUQV9faGFuZHNoX19kbWEgMQorI2RlZmluZSBSX0FUQV9DVFJMX0RBVEFfX2hhbmRzaF9fcGlvIDAKKyNkZWZpbmUgUl9BVEFfQ1RSTF9EQVRBX19tdWx0aV9fQklUTlIgMjEKKyNkZWZpbmUgUl9BVEFfQ1RSTF9EQVRBX19tdWx0aV9fV0lEVEggMQorI2RlZmluZSBSX0FUQV9DVFJMX0RBVEFfX211bHRpX19vbiAxCisjZGVmaW5lIFJfQVRBX0NUUkxfREFUQV9fbXVsdGlfX29mZiAwCisjZGVmaW5lIFJfQVRBX0NUUkxfREFUQV9fZG1hX3NpemVfX0JJVE5SIDIwCisjZGVmaW5lIFJfQVRBX0NUUkxfREFUQV9fZG1hX3NpemVfX1dJRFRIIDEKKyNkZWZpbmUgUl9BVEFfQ1RSTF9EQVRBX19kbWFfc2l6ZV9fYnl0ZSAxCisjZGVmaW5lIFJfQVRBX0NUUkxfREFUQV9fZG1hX3NpemVfX3dvcmQgMAorI2RlZmluZSBSX0FUQV9DVFJMX0RBVEFfX2RhdGFfX0JJVE5SIDAKKyNkZWZpbmUgUl9BVEFfQ1RSTF9EQVRBX19kYXRhX19XSURUSCAxNgorCisjZGVmaW5lIFJfQVRBX1NUQVRVU19EQVRBIChJT19UWVBFQ0FTVF9ST19VRFdPUkQgMHhiMDAwMDA0MCkKKyNkZWZpbmUgUl9BVEFfU1RBVFVTX0RBVEFfX2J1c3lfX0JJVE5SIDE4CisjZGVmaW5lIFJfQVRBX1NUQVRVU19EQVRBX19idXN5X19XSURUSCAxCisjZGVmaW5lIFJfQVRBX1NUQVRVU19EQVRBX19idXN5X195ZXMgMQorI2RlZmluZSBSX0FUQV9TVEFUVVNfREFUQV9fYnVzeV9fbm8gMAorI2RlZmluZSBSX0FUQV9TVEFUVVNfREFUQV9fdHJfcmR5X19CSVROUiAxNworI2RlZmluZSBSX0FUQV9TVEFUVVNfREFUQV9fdHJfcmR5X19XSURUSCAxCisjZGVmaW5lIFJfQVRBX1NUQVRVU19EQVRBX190cl9yZHlfX3JlYWR5IDEKKyNkZWZpbmUgUl9BVEFfU1RBVFVTX0RBVEFfX3RyX3JkeV9fYnVzeSAwCisjZGVmaW5lIFJfQVRBX1NUQVRVU19EQVRBX19kYXZfX0JJVE5SIDE2CisjZGVmaW5lIFJfQVRBX1NUQVRVU19EQVRBX19kYXZfX1dJRFRIIDEKKyNkZWZpbmUgUl9BVEFfU1RBVFVTX0RBVEFfX2Rhdl9fZGF0YSAxCisjZGVmaW5lIFJfQVRBX1NUQVRVU19EQVRBX19kYXZfX25vZGF0YSAwCisjZGVmaW5lIFJfQVRBX1NUQVRVU19EQVRBX19kYXRhX19CSVROUiAwCisjZGVmaW5lIFJfQVRBX1NUQVRVU19EQVRBX19kYXRhX19XSURUSCAxNgorCisjZGVmaW5lIFJfQVRBX0NPTkZJRyAoSU9fVFlQRUNBU1RfVURXT1JEIDB4YjAwMDAwNDQpCisjZGVmaW5lIFJfQVRBX0NPTkZJR19fZW5hYmxlX19CSVROUiAyNQorI2RlZmluZSBSX0FUQV9DT05GSUdfX2VuYWJsZV9fV0lEVEggMQorI2RlZmluZSBSX0FUQV9DT05GSUdfX2VuYWJsZV9fb24gMQorI2RlZmluZSBSX0FUQV9DT05GSUdfX2VuYWJsZV9fb2ZmIDAKKyNkZWZpbmUgUl9BVEFfQ09ORklHX19kbWFfc3Ryb2JlX19CSVROUiAyMAorI2RlZmluZSBSX0FUQV9DT05GSUdfX2RtYV9zdHJvYmVfX1dJRFRIIDUKKyNkZWZpbmUgUl9BVEFfQ09ORklHX19kbWFfaG9sZF9fQklUTlIgMTUKKyNkZWZpbmUgUl9BVEFfQ09ORklHX19kbWFfaG9sZF9fV0lEVEggNQorI2RlZmluZSBSX0FUQV9DT05GSUdfX3Bpb19zZXR1cF9fQklUTlIgMTAKKyNkZWZpbmUgUl9BVEFfQ09ORklHX19waW9fc2V0dXBfX1dJRFRIIDUKKyNkZWZpbmUgUl9BVEFfQ09ORklHX19waW9fc3Ryb2JlX19CSVROUiA1CisjZGVmaW5lIFJfQVRBX0NPTkZJR19fcGlvX3N0cm9iZV9fV0lEVEggNQorI2RlZmluZSBSX0FUQV9DT05GSUdfX3Bpb19ob2xkX19CSVROUiAwCisjZGVmaW5lIFJfQVRBX0NPTkZJR19fcGlvX2hvbGRfX1dJRFRIIDUKKworI2RlZmluZSBSX0FUQV9UUkFOU0ZFUl9DTlQgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMDQ4KQorI2RlZmluZSBSX0FUQV9UUkFOU0ZFUl9DTlRfX2NvdW50X19CSVROUiAwCisjZGVmaW5lIFJfQVRBX1RSQU5TRkVSX0NOVF9fY291bnRfX1dJRFRIIDE3CisKKy8qCishKiBTQ1NJIHJlZ2lzdGVycworISovCisKKyNkZWZpbmUgUl9TQ1NJMF9DVFJMIChJT19UWVBFQ0FTVF9VRFdPUkQgMHhiMDAwMDA0NCkKKyNkZWZpbmUgUl9TQ1NJMF9DVFJMX19pZF90eXBlX19CSVROUiAzMQorI2RlZmluZSBSX1NDU0kwX0NUUkxfX2lkX3R5cGVfX1dJRFRIIDEKKyNkZWZpbmUgUl9TQ1NJMF9DVFJMX19pZF90eXBlX19zb2Z0d2FyZSAxCisjZGVmaW5lIFJfU0NTSTBfQ1RSTF9faWRfdHlwZV9faGFyZHdhcmUgMAorI2RlZmluZSBSX1NDU0kwX0NUUkxfX3NlbF90aW1lb3V0X19CSVROUiAyNAorI2RlZmluZSBSX1NDU0kwX0NUUkxfX3NlbF90aW1lb3V0X19XSURUSCA3CisjZGVmaW5lIFJfU0NTSTBfQ1RSTF9fc3luY2hfcGVyX19CSVROUiAxNgorI2RlZmluZSBSX1NDU0kwX0NUUkxfX3N5bmNoX3Blcl9fV0lEVEggOAorI2RlZmluZSBSX1NDU0kwX0NUUkxfX3JzdF9fQklUTlIgMTUKKyNkZWZpbmUgUl9TQ1NJMF9DVFJMX19yc3RfX1dJRFRIIDEKKyNkZWZpbmUgUl9TQ1NJMF9DVFJMX19yc3RfX3llcyAxCisjZGVmaW5lIFJfU0NTSTBfQ1RSTF9fcnN0X19ubyAwCisjZGVmaW5lIFJfU0NTSTBfQ1RSTF9fYXRuX19CSVROUiAxNAorI2RlZmluZSBSX1NDU0kwX0NUUkxfX2F0bl9fV0lEVEggMQorI2RlZmluZSBSX1NDU0kwX0NUUkxfX2F0bl9feWVzIDEKKyNkZWZpbmUgUl9TQ1NJMF9DVFJMX19hdG5fX25vIDAKKyNkZWZpbmUgUl9TQ1NJMF9DVFJMX19teV9pZF9fQklUTlIgOQorI2RlZmluZSBSX1NDU0kwX0NUUkxfX215X2lkX19XSURUSCA0CisjZGVmaW5lIFJfU0NTSTBfQ1RSTF9fdGFyZ2V0X2lkX19CSVROUiA0CisjZGVmaW5lIFJfU0NTSTBfQ1RSTF9fdGFyZ2V0X2lkX19XSURUSCA0CisjZGVmaW5lIFJfU0NTSTBfQ1RSTF9fZmFzdF8yMF9fQklUTlIgMworI2RlZmluZSBSX1NDU0kwX0NUUkxfX2Zhc3RfMjBfX1dJRFRIIDEKKyNkZWZpbmUgUl9TQ1NJMF9DVFJMX19mYXN0XzIwX195ZXMgMQorI2RlZmluZSBSX1NDU0kwX0NUUkxfX2Zhc3RfMjBfX25vIDAKKyNkZWZpbmUgUl9TQ1NJMF9DVFJMX19idXNfd2lkdGhfX0JJVE5SIDIKKyNkZWZpbmUgUl9TQ1NJMF9DVFJMX19idXNfd2lkdGhfX1dJRFRIIDEKKyNkZWZpbmUgUl9TQ1NJMF9DVFJMX19idXNfd2lkdGhfX3dpZGUgMQorI2RlZmluZSBSX1NDU0kwX0NUUkxfX2J1c193aWR0aF9fbmFycm93IDAKKyNkZWZpbmUgUl9TQ1NJMF9DVFJMX19zeW5jaF9fQklUTlIgMQorI2RlZmluZSBSX1NDU0kwX0NUUkxfX3N5bmNoX19XSURUSCAxCisjZGVmaW5lIFJfU0NTSTBfQ1RSTF9fc3luY2hfX3N5bmNoIDEKKyNkZWZpbmUgUl9TQ1NJMF9DVFJMX19zeW5jaF9fYXN5bmNoIDAKKyNkZWZpbmUgUl9TQ1NJMF9DVFJMX19lbmFibGVfX0JJVE5SIDAKKyNkZWZpbmUgUl9TQ1NJMF9DVFJMX19lbmFibGVfX1dJRFRIIDEKKyNkZWZpbmUgUl9TQ1NJMF9DVFJMX19lbmFibGVfX29uIDEKKyNkZWZpbmUgUl9TQ1NJMF9DVFJMX19lbmFibGVfX29mZiAwCisKKyNkZWZpbmUgUl9TQ1NJMF9DTURfREFUQSAoSU9fVFlQRUNBU1RfVURXT1JEIDB4YjAwMDAwNDApCisjZGVmaW5lIFJfU0NTSTBfQ01EX0RBVEFfX3Bhcml0eV9pbl9fQklUTlIgMjYKKyNkZWZpbmUgUl9TQ1NJMF9DTURfREFUQV9fcGFyaXR5X2luX19XSURUSCAxCisjZGVmaW5lIFJfU0NTSTBfQ01EX0RBVEFfX3Bhcml0eV9pbl9fb24gMAorI2RlZmluZSBSX1NDU0kwX0NNRF9EQVRBX19wYXJpdHlfaW5fX29mZiAxCisjZGVmaW5lIFJfU0NTSTBfQ01EX0RBVEFfX3NraXBfX0JJVE5SIDI1CisjZGVmaW5lIFJfU0NTSTBfQ01EX0RBVEFfX3NraXBfX1dJRFRIIDEKKyNkZWZpbmUgUl9TQ1NJMF9DTURfREFUQV9fc2tpcF9fb24gMQorI2RlZmluZSBSX1NDU0kwX0NNRF9EQVRBX19za2lwX19vZmYgMAorI2RlZmluZSBSX1NDU0kwX0NNRF9EQVRBX19jbHJfc3RhdHVzX19CSVROUiAyNAorI2RlZmluZSBSX1NDU0kwX0NNRF9EQVRBX19jbHJfc3RhdHVzX19XSURUSCAxCisjZGVmaW5lIFJfU0NTSTBfQ01EX0RBVEFfX2Nscl9zdGF0dXNfX3llcyAxCisjZGVmaW5lIFJfU0NTSTBfQ01EX0RBVEFfX2Nscl9zdGF0dXNfX25vcCAwCisjZGVmaW5lIFJfU0NTSTBfQ01EX0RBVEFfX2FzeW5jaF9zZXR1cF9fQklUTlIgMjAKKyNkZWZpbmUgUl9TQ1NJMF9DTURfREFUQV9fYXN5bmNoX3NldHVwX19XSURUSCA0CisjZGVmaW5lIFJfU0NTSTBfQ01EX0RBVEFfX2NvbW1hbmRfX0JJVE5SIDE2CisjZGVmaW5lIFJfU0NTSTBfQ01EX0RBVEFfX2NvbW1hbmRfX1dJRFRIIDQKKyNkZWZpbmUgUl9TQ1NJMF9DTURfREFUQV9fY29tbWFuZF9fZnVsbF9kaW5fMSAwCisjZGVmaW5lIFJfU0NTSTBfQ01EX0RBVEFfX2NvbW1hbmRfX2Z1bGxfZG91dF8xIDEKKyNkZWZpbmUgUl9TQ1NJMF9DTURfREFUQV9fY29tbWFuZF9fZnVsbF9zdGF0XzEgMgorI2RlZmluZSBSX1NDU0kwX0NNRF9EQVRBX19jb21tYW5kX19yZXNlbF9kaW4gMworI2RlZmluZSBSX1NDU0kwX0NNRF9EQVRBX19jb21tYW5kX19yZXNlbF9kb3V0IDQKKyNkZWZpbmUgUl9TQ1NJMF9DTURfREFUQV9fY29tbWFuZF9fcmVzZWxfc3RhdCA1CisjZGVmaW5lIFJfU0NTSTBfQ01EX0RBVEFfX2NvbW1hbmRfX2FyYl9vbmx5IDYKKyNkZWZpbmUgUl9TQ1NJMF9DTURfREFUQV9fY29tbWFuZF9fZnVsbF9kaW5fMyA4CisjZGVmaW5lIFJfU0NTSTBfQ01EX0RBVEFfX2NvbW1hbmRfX2Z1bGxfZG91dF8zIDkKKyNkZWZpbmUgUl9TQ1NJMF9DTURfREFUQV9fY29tbWFuZF9fZnVsbF9zdGF0XzMgMTAKKyNkZWZpbmUgUl9TQ1NJMF9DTURfREFUQV9fY29tbWFuZF9fbWFuX2RhdGFfaW4gMTEKKyNkZWZpbmUgUl9TQ1NJMF9DTURfREFUQV9fY29tbWFuZF9fbWFuX2RhdGFfb3V0IDEyCisjZGVmaW5lIFJfU0NTSTBfQ01EX0RBVEFfX2NvbW1hbmRfX21hbl9yYXQgMTMKKyNkZWZpbmUgUl9TQ1NJMF9DTURfREFUQV9fZGF0YV9vdXRfX0JJVE5SIDAKKyNkZWZpbmUgUl9TQ1NJMF9DTURfREFUQV9fZGF0YV9vdXRfX1dJRFRIIDE2CisKKyNkZWZpbmUgUl9TQ1NJMF9EQVRBIChJT19UWVBFQ0FTVF9VV09SRCAweGIwMDAwMDQwKQorI2RlZmluZSBSX1NDU0kwX0RBVEFfX2RhdGFfb3V0X19CSVROUiAwCisjZGVmaW5lIFJfU0NTSTBfREFUQV9fZGF0YV9vdXRfX1dJRFRIIDE2CisKKyNkZWZpbmUgUl9TQ1NJMF9DTUQgKElPX1RZUEVDQVNUX0JZVEUgMHhiMDAwMDA0MikKKyNkZWZpbmUgUl9TQ1NJMF9DTURfX2FzeW5jaF9zZXR1cF9fQklUTlIgNAorI2RlZmluZSBSX1NDU0kwX0NNRF9fYXN5bmNoX3NldHVwX19XSURUSCA0CisjZGVmaW5lIFJfU0NTSTBfQ01EX19jb21tYW5kX19CSVROUiAwCisjZGVmaW5lIFJfU0NTSTBfQ01EX19jb21tYW5kX19XSURUSCA0CisjZGVmaW5lIFJfU0NTSTBfQ01EX19jb21tYW5kX19mdWxsX2Rpbl8xIDAKKyNkZWZpbmUgUl9TQ1NJMF9DTURfX2NvbW1hbmRfX2Z1bGxfZG91dF8xIDEKKyNkZWZpbmUgUl9TQ1NJMF9DTURfX2NvbW1hbmRfX2Z1bGxfc3RhdF8xIDIKKyNkZWZpbmUgUl9TQ1NJMF9DTURfX2NvbW1hbmRfX3Jlc2VsX2RpbiAzCisjZGVmaW5lIFJfU0NTSTBfQ01EX19jb21tYW5kX19yZXNlbF9kb3V0IDQKKyNkZWZpbmUgUl9TQ1NJMF9DTURfX2NvbW1hbmRfX3Jlc2VsX3N0YXQgNQorI2RlZmluZSBSX1NDU0kwX0NNRF9fY29tbWFuZF9fYXJiX29ubHkgNgorI2RlZmluZSBSX1NDU0kwX0NNRF9fY29tbWFuZF9fZnVsbF9kaW5fMyA4CisjZGVmaW5lIFJfU0NTSTBfQ01EX19jb21tYW5kX19mdWxsX2RvdXRfMyA5CisjZGVmaW5lIFJfU0NTSTBfQ01EX19jb21tYW5kX19mdWxsX3N0YXRfMyAxMAorI2RlZmluZSBSX1NDU0kwX0NNRF9fY29tbWFuZF9fbWFuX2RhdGFfaW4gMTEKKyNkZWZpbmUgUl9TQ1NJMF9DTURfX2NvbW1hbmRfX21hbl9kYXRhX291dCAxMgorI2RlZmluZSBSX1NDU0kwX0NNRF9fY29tbWFuZF9fbWFuX3JhdCAxMworCisjZGVmaW5lIFJfU0NTSTBfU1RBVFVTX0NUUkwgKElPX1RZUEVDQVNUX0JZVEUgMHhiMDAwMDA0MykKKyNkZWZpbmUgUl9TQ1NJMF9TVEFUVVNfQ1RSTF9fcGFyaXR5X2luX19CSVROUiAyCisjZGVmaW5lIFJfU0NTSTBfU1RBVFVTX0NUUkxfX3Bhcml0eV9pbl9fV0lEVEggMQorI2RlZmluZSBSX1NDU0kwX1NUQVRVU19DVFJMX19wYXJpdHlfaW5fX29uIDAKKyNkZWZpbmUgUl9TQ1NJMF9TVEFUVVNfQ1RSTF9fcGFyaXR5X2luX19vZmYgMQorI2RlZmluZSBSX1NDU0kwX1NUQVRVU19DVFJMX19za2lwX19CSVROUiAxCisjZGVmaW5lIFJfU0NTSTBfU1RBVFVTX0NUUkxfX3NraXBfX1dJRFRIIDEKKyNkZWZpbmUgUl9TQ1NJMF9TVEFUVVNfQ1RSTF9fc2tpcF9fb24gMQorI2RlZmluZSBSX1NDU0kwX1NUQVRVU19DVFJMX19za2lwX19vZmYgMAorI2RlZmluZSBSX1NDU0kwX1NUQVRVU19DVFJMX19jbHJfc3RhdHVzX19CSVROUiAwCisjZGVmaW5lIFJfU0NTSTBfU1RBVFVTX0NUUkxfX2Nscl9zdGF0dXNfX1dJRFRIIDEKKyNkZWZpbmUgUl9TQ1NJMF9TVEFUVVNfQ1RSTF9fY2xyX3N0YXR1c19feWVzIDEKKyNkZWZpbmUgUl9TQ1NJMF9TVEFUVVNfQ1RSTF9fY2xyX3N0YXR1c19fbm9wIDAKKworI2RlZmluZSBSX1NDU0kwX1NUQVRVUyAoSU9fVFlQRUNBU1RfUk9fVURXT1JEIDB4YjAwMDAwNDgpCisjZGVmaW5lIFJfU0NTSTBfU1RBVFVTX190c3RfYXJiX3dvbl9fQklUTlIgMjMKKyNkZWZpbmUgUl9TQ1NJMF9TVEFUVVNfX3RzdF9hcmJfd29uX19XSURUSCAxCisjZGVmaW5lIFJfU0NTSTBfU1RBVFVTX190c3RfcmVzZWxfX0JJVE5SIDIyCisjZGVmaW5lIFJfU0NTSTBfU1RBVFVTX190c3RfcmVzZWxfX1dJRFRIIDEKKyNkZWZpbmUgUl9TQ1NJMF9TVEFUVVNfX3Bhcml0eV9lcnJvcl9fQklUTlIgMjEKKyNkZWZpbmUgUl9TQ1NJMF9TVEFUVVNfX3Bhcml0eV9lcnJvcl9fV0lEVEggMQorI2RlZmluZSBSX1NDU0kwX1NUQVRVU19fYnVzX3Jlc2V0X19CSVROUiAyMAorI2RlZmluZSBSX1NDU0kwX1NUQVRVU19fYnVzX3Jlc2V0X19XSURUSCAxCisjZGVmaW5lIFJfU0NTSTBfU1RBVFVTX19idXNfcmVzZXRfX3llcyAxCisjZGVmaW5lIFJfU0NTSTBfU1RBVFVTX19idXNfcmVzZXRfX25vIDAKKyNkZWZpbmUgUl9TQ1NJMF9TVEFUVVNfX3Jlc2VsX3RhcmdldF9fQklUTlIgMTUKKyNkZWZpbmUgUl9TQ1NJMF9TVEFUVVNfX3Jlc2VsX3RhcmdldF9fV0lEVEggNAorI2RlZmluZSBSX1NDU0kwX1NUQVRVU19fcmVzZWxfX0JJVE5SIDE0CisjZGVmaW5lIFJfU0NTSTBfU1RBVFVTX19yZXNlbF9fV0lEVEggMQorI2RlZmluZSBSX1NDU0kwX1NUQVRVU19fcmVzZWxfX3llcyAxCisjZGVmaW5lIFJfU0NTSTBfU1RBVFVTX19yZXNlbF9fbm8gMAorI2RlZmluZSBSX1NDU0kwX1NUQVRVU19fY3Vycl9waGFzZV9fQklUTlIgMTEKKyNkZWZpbmUgUl9TQ1NJMF9TVEFUVVNfX2N1cnJfcGhhc2VfX1dJRFRIIDMKKyNkZWZpbmUgUl9TQ1NJMF9TVEFUVVNfX2N1cnJfcGhhc2VfX3BoX3VuZGVmIDAKKyNkZWZpbmUgUl9TQ1NJMF9TVEFUVVNfX2N1cnJfcGhhc2VfX3BoX21zZ19pbiA3CisjZGVmaW5lIFJfU0NTSTBfU1RBVFVTX19jdXJyX3BoYXNlX19waF9tc2dfb3V0IDYKKyNkZWZpbmUgUl9TQ1NJMF9TVEFUVVNfX2N1cnJfcGhhc2VfX3BoX3N0YXR1cyAzCisjZGVmaW5lIFJfU0NTSTBfU1RBVFVTX19jdXJyX3BoYXNlX19waF9jb21tYW5kIDIKKyNkZWZpbmUgUl9TQ1NJMF9TVEFUVVNfX2N1cnJfcGhhc2VfX3BoX2RhdGFfaW4gNQorI2RlZmluZSBSX1NDU0kwX1NUQVRVU19fY3Vycl9waGFzZV9fcGhfZGF0YV9vdXQgNAorI2RlZmluZSBSX1NDU0kwX1NUQVRVU19fY3Vycl9waGFzZV9fcGhfcmVzZWwgMQorI2RlZmluZSBSX1NDU0kwX1NUQVRVU19fbGFzdF9zZXFfc3RlcF9fQklUTlIgNgorI2RlZmluZSBSX1NDU0kwX1NUQVRVU19fbGFzdF9zZXFfc3RlcF9fV0lEVEggNQorI2RlZmluZSBSX1NDU0kwX1NUQVRVU19fbGFzdF9zZXFfc3RlcF9fc3RfYnVzX2ZyZWUgMjQKKyNkZWZpbmUgUl9TQ1NJMF9TVEFUVVNfX2xhc3Rfc2VxX3N0ZXBfX3N0X2FyYml0cmF0ZSA4CisjZGVmaW5lIFJfU0NTSTBfU1RBVFVTX19sYXN0X3NlcV9zdGVwX19zdF9yZXNlbF9yZXEgMjkKKyNkZWZpbmUgUl9TQ1NJMF9TVEFUVVNfX2xhc3Rfc2VxX3N0ZXBfX3N0X21zZ18xIDIKKyNkZWZpbmUgUl9TQ1NJMF9TVEFUVVNfX2xhc3Rfc2VxX3N0ZXBfX3N0X21hbnVhbCAyOAorI2RlZmluZSBSX1NDU0kwX1NUQVRVU19fbGFzdF9zZXFfc3RlcF9fc3RfdHJhbnNmX2NtZCAzMAorI2RlZmluZSBSX1NDU0kwX1NUQVRVU19fbGFzdF9zZXFfc3RlcF9fc3RfbXNnXzIgNgorI2RlZmluZSBSX1NDU0kwX1NUQVRVU19fbGFzdF9zZXFfc3RlcF9fc3RfbXNnXzMgMjIKKyNkZWZpbmUgUl9TQ1NJMF9TVEFUVVNfX2xhc3Rfc2VxX3N0ZXBfX3N0X2Fuc3dlciAzCisjZGVmaW5lIFJfU0NTSTBfU1RBVFVTX19sYXN0X3NlcV9zdGVwX19zdF9zeW5jaF9kaW5fcGVyciAxCisjZGVmaW5lIFJfU0NTSTBfU1RBVFVTX19sYXN0X3NlcV9zdGVwX19zdF90cmFuc2Zlcl9kb25lIDE1CisjZGVmaW5lIFJfU0NTSTBfU1RBVFVTX19sYXN0X3NlcV9zdGVwX19zdF9zeW5jaF9kb3V0IDAKKyNkZWZpbmUgUl9TQ1NJMF9TVEFUVVNfX2xhc3Rfc2VxX3N0ZXBfX3N0X2FzeW5jaF9kb3V0IDI1CisjZGVmaW5lIFJfU0NTSTBfU1RBVFVTX19sYXN0X3NlcV9zdGVwX19zdF9zeW5jaF9kaW4gMTMKKyNkZWZpbmUgUl9TQ1NJMF9TVEFUVVNfX2xhc3Rfc2VxX3N0ZXBfX3N0X2FzeW5jaF9kaW4gOQorI2RlZmluZSBSX1NDU0kwX1NUQVRVU19fbGFzdF9zZXFfc3RlcF9fc3Rfc3luY2hfZG91dF9hY2sgNAorI2RlZmluZSBSX1NDU0kwX1NUQVRVU19fbGFzdF9zZXFfc3RlcF9fc3Rfc3luY2hfZGluX2FjayAxMgorI2RlZmluZSBSX1NDU0kwX1NUQVRVU19fbGFzdF9zZXFfc3RlcF9fc3Rfc3luY2hfZGluX2Fja19wZXJyIDUKKyNkZWZpbmUgUl9TQ1NJMF9TVEFUVVNfX2xhc3Rfc2VxX3N0ZXBfX3N0X2FzeW5jaF9kb3V0X2VuZCAxMQorI2RlZmluZSBSX1NDU0kwX1NUQVRVU19fbGFzdF9zZXFfc3RlcF9fc3RfaXdyIDI3CisjZGVmaW5lIFJfU0NTSTBfU1RBVFVTX19sYXN0X3NlcV9zdGVwX19zdF93YWl0X2ZyZWVfZGlzYyAyMQorI2RlZmluZSBSX1NDU0kwX1NUQVRVU19fbGFzdF9zZXFfc3RlcF9fc3Rfc2RwX2Rpc2MgNworI2RlZmluZSBSX1NDU0kwX1NUQVRVU19fbGFzdF9zZXFfc3RlcF9fc3RfY2MgMzEKKyNkZWZpbmUgUl9TQ1NJMF9TVEFUVVNfX2xhc3Rfc2VxX3N0ZXBfX3N0X2l3cl9nb29kIDE0CisjZGVmaW5lIFJfU0NTSTBfU1RBVFVTX19sYXN0X3NlcV9zdGVwX19zdF9pd3JfY2MgMjMKKyNkZWZpbmUgUl9TQ1NJMF9TVEFUVVNfX2xhc3Rfc2VxX3N0ZXBfX3N0X3dhaXRfZnJlZV9pd3JfY2MgMTcKKyNkZWZpbmUgUl9TQ1NJMF9TVEFUVVNfX2xhc3Rfc2VxX3N0ZXBfX3N0X3dhaXRfZnJlZV9jYyAyMAorI2RlZmluZSBSX1NDU0kwX1NUQVRVU19fbGFzdF9zZXFfc3RlcF9fc3Rfd2FpdF9mcmVlX3NkcF9kaXNjIDE2CisjZGVmaW5lIFJfU0NTSTBfU1RBVFVTX19sYXN0X3NlcV9zdGVwX19zdF9tYW51YWxfcmVxIDEwCisjZGVmaW5lIFJfU0NTSTBfU1RBVFVTX19sYXN0X3NlcV9zdGVwX19zdF9tYW51YWxfZGluX3Byb3QgMTgKKyNkZWZpbmUgUl9TQ1NJMF9TVEFUVVNfX3ZhbGlkX3N0YXR1c19fQklUTlIgNQorI2RlZmluZSBSX1NDU0kwX1NUQVRVU19fdmFsaWRfc3RhdHVzX19XSURUSCAxCisjZGVmaW5lIFJfU0NTSTBfU1RBVFVTX192YWxpZF9zdGF0dXNfX3llcyAxCisjZGVmaW5lIFJfU0NTSTBfU1RBVFVTX192YWxpZF9zdGF0dXNfX25vIDAKKyNkZWZpbmUgUl9TQ1NJMF9TVEFUVVNfX3NlcV9zdGF0dXNfX0JJVE5SIDAKKyNkZWZpbmUgUl9TQ1NJMF9TVEFUVVNfX3NlcV9zdGF0dXNfX1dJRFRIIDUKKyNkZWZpbmUgUl9TQ1NJMF9TVEFUVVNfX3NlcV9zdGF0dXNfX2luZm9fc2VxX2NvbXBsZXRlIDAKKyNkZWZpbmUgUl9TQ1NJMF9TVEFUVVNfX3NlcV9zdGF0dXNfX2luZm9fcGFyaXR5X2Vycm9yIDEKKyNkZWZpbmUgUl9TQ1NJMF9TVEFUVVNfX3NlcV9zdGF0dXNfX2luZm9fdW5oYW5kbGVkX21zZ19pbiAyCisjZGVmaW5lIFJfU0NTSTBfU1RBVFVTX19zZXFfc3RhdHVzX19pbmZvX3VuZXhwX3BoX2NoYW5nZSAzCisjZGVmaW5lIFJfU0NTSTBfU1RBVFVTX19zZXFfc3RhdHVzX19pbmZvX2FyYl9sb3N0IDQKKyNkZWZpbmUgUl9TQ1NJMF9TVEFUVVNfX3NlcV9zdGF0dXNfX2luZm9fc2VsX3RpbWVvdXQgNQorI2RlZmluZSBSX1NDU0kwX1NUQVRVU19fc2VxX3N0YXR1c19faW5mb191bmV4cF9iZiA2CisjZGVmaW5lIFJfU0NTSTBfU1RBVFVTX19zZXFfc3RhdHVzX19pbmZvX2lsbGVnYWxfb3AgNworI2RlZmluZSBSX1NDU0kwX1NUQVRVU19fc2VxX3N0YXR1c19faW5mb19yZWNfcmVjdmQgOAorI2RlZmluZSBSX1NDU0kwX1NUQVRVU19fc2VxX3N0YXR1c19faW5mb19yZXNlbGVjdGVkIDkKKyNkZWZpbmUgUl9TQ1NJMF9TVEFUVVNfX3NlcV9zdGF0dXNfX2luZm9fdW5oYW5kbGVkX3N0YXR1cyAxMAorI2RlZmluZSBSX1NDU0kwX1NUQVRVU19fc2VxX3N0YXR1c19faW5mb19idXNfcmVzZXQgMTEKKyNkZWZpbmUgUl9TQ1NJMF9TVEFUVVNfX3NlcV9zdGF0dXNfX2luZm9faWxsZWdhbF9iZiAxMgorI2RlZmluZSBSX1NDU0kwX1NUQVRVU19fc2VxX3N0YXR1c19faW5mb19idXNfZnJlZSAxMworCisjZGVmaW5lIFJfU0NTSTBfREFUQV9JTiAoSU9fVFlQRUNBU1RfUk9fVVdPUkQgMHhiMDAwMDA0MCkKKyNkZWZpbmUgUl9TQ1NJMF9EQVRBX0lOX19kYXRhX2luX19CSVROUiAwCisjZGVmaW5lIFJfU0NTSTBfREFUQV9JTl9fZGF0YV9pbl9fV0lEVEggMTYKKworI2RlZmluZSBSX1NDU0kxX0NUUkwgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMDU0KQorI2RlZmluZSBSX1NDU0kxX0NUUkxfX2lkX3R5cGVfX0JJVE5SIDMxCisjZGVmaW5lIFJfU0NTSTFfQ1RSTF9faWRfdHlwZV9fV0lEVEggMQorI2RlZmluZSBSX1NDU0kxX0NUUkxfX2lkX3R5cGVfX3NvZnR3YXJlIDEKKyNkZWZpbmUgUl9TQ1NJMV9DVFJMX19pZF90eXBlX19oYXJkd2FyZSAwCisjZGVmaW5lIFJfU0NTSTFfQ1RSTF9fc2VsX3RpbWVvdXRfX0JJVE5SIDI0CisjZGVmaW5lIFJfU0NTSTFfQ1RSTF9fc2VsX3RpbWVvdXRfX1dJRFRIIDcKKyNkZWZpbmUgUl9TQ1NJMV9DVFJMX19zeW5jaF9wZXJfX0JJVE5SIDE2CisjZGVmaW5lIFJfU0NTSTFfQ1RSTF9fc3luY2hfcGVyX19XSURUSCA4CisjZGVmaW5lIFJfU0NTSTFfQ1RSTF9fcnN0X19CSVROUiAxNQorI2RlZmluZSBSX1NDU0kxX0NUUkxfX3JzdF9fV0lEVEggMQorI2RlZmluZSBSX1NDU0kxX0NUUkxfX3JzdF9feWVzIDEKKyNkZWZpbmUgUl9TQ1NJMV9DVFJMX19yc3RfX25vIDAKKyNkZWZpbmUgUl9TQ1NJMV9DVFJMX19hdG5fX0JJVE5SIDE0CisjZGVmaW5lIFJfU0NTSTFfQ1RSTF9fYXRuX19XSURUSCAxCisjZGVmaW5lIFJfU0NTSTFfQ1RSTF9fYXRuX195ZXMgMQorI2RlZmluZSBSX1NDU0kxX0NUUkxfX2F0bl9fbm8gMAorI2RlZmluZSBSX1NDU0kxX0NUUkxfX215X2lkX19CSVROUiA5CisjZGVmaW5lIFJfU0NTSTFfQ1RSTF9fbXlfaWRfX1dJRFRIIDQKKyNkZWZpbmUgUl9TQ1NJMV9DVFJMX190YXJnZXRfaWRfX0JJVE5SIDQKKyNkZWZpbmUgUl9TQ1NJMV9DVFJMX190YXJnZXRfaWRfX1dJRFRIIDQKKyNkZWZpbmUgUl9TQ1NJMV9DVFJMX19mYXN0XzIwX19CSVROUiAzCisjZGVmaW5lIFJfU0NTSTFfQ1RSTF9fZmFzdF8yMF9fV0lEVEggMQorI2RlZmluZSBSX1NDU0kxX0NUUkxfX2Zhc3RfMjBfX3llcyAxCisjZGVmaW5lIFJfU0NTSTFfQ1RSTF9fZmFzdF8yMF9fbm8gMAorI2RlZmluZSBSX1NDU0kxX0NUUkxfX2J1c193aWR0aF9fQklUTlIgMgorI2RlZmluZSBSX1NDU0kxX0NUUkxfX2J1c193aWR0aF9fV0lEVEggMQorI2RlZmluZSBSX1NDU0kxX0NUUkxfX2J1c193aWR0aF9fd2lkZSAxCisjZGVmaW5lIFJfU0NTSTFfQ1RSTF9fYnVzX3dpZHRoX19uYXJyb3cgMAorI2RlZmluZSBSX1NDU0kxX0NUUkxfX3N5bmNoX19CSVROUiAxCisjZGVmaW5lIFJfU0NTSTFfQ1RSTF9fc3luY2hfX1dJRFRIIDEKKyNkZWZpbmUgUl9TQ1NJMV9DVFJMX19zeW5jaF9fc3luY2ggMQorI2RlZmluZSBSX1NDU0kxX0NUUkxfX3N5bmNoX19hc3luY2ggMAorI2RlZmluZSBSX1NDU0kxX0NUUkxfX2VuYWJsZV9fQklUTlIgMAorI2RlZmluZSBSX1NDU0kxX0NUUkxfX2VuYWJsZV9fV0lEVEggMQorI2RlZmluZSBSX1NDU0kxX0NUUkxfX2VuYWJsZV9fb24gMQorI2RlZmluZSBSX1NDU0kxX0NUUkxfX2VuYWJsZV9fb2ZmIDAKKworI2RlZmluZSBSX1NDU0kxX0NNRF9EQVRBIChJT19UWVBFQ0FTVF9VRFdPUkQgMHhiMDAwMDA1MCkKKyNkZWZpbmUgUl9TQ1NJMV9DTURfREFUQV9fcGFyaXR5X2luX19CSVROUiAyNgorI2RlZmluZSBSX1NDU0kxX0NNRF9EQVRBX19wYXJpdHlfaW5fX1dJRFRIIDEKKyNkZWZpbmUgUl9TQ1NJMV9DTURfREFUQV9fcGFyaXR5X2luX19vbiAwCisjZGVmaW5lIFJfU0NTSTFfQ01EX0RBVEFfX3Bhcml0eV9pbl9fb2ZmIDEKKyNkZWZpbmUgUl9TQ1NJMV9DTURfREFUQV9fc2tpcF9fQklUTlIgMjUKKyNkZWZpbmUgUl9TQ1NJMV9DTURfREFUQV9fc2tpcF9fV0lEVEggMQorI2RlZmluZSBSX1NDU0kxX0NNRF9EQVRBX19za2lwX19vbiAxCisjZGVmaW5lIFJfU0NTSTFfQ01EX0RBVEFfX3NraXBfX29mZiAwCisjZGVmaW5lIFJfU0NTSTFfQ01EX0RBVEFfX2Nscl9zdGF0dXNfX0JJVE5SIDI0CisjZGVmaW5lIFJfU0NTSTFfQ01EX0RBVEFfX2Nscl9zdGF0dXNfX1dJRFRIIDEKKyNkZWZpbmUgUl9TQ1NJMV9DTURfREFUQV9fY2xyX3N0YXR1c19feWVzIDEKKyNkZWZpbmUgUl9TQ1NJMV9DTURfREFUQV9fY2xyX3N0YXR1c19fbm9wIDAKKyNkZWZpbmUgUl9TQ1NJMV9DTURfREFUQV9fYXN5bmNoX3NldHVwX19CSVROUiAyMAorI2RlZmluZSBSX1NDU0kxX0NNRF9EQVRBX19hc3luY2hfc2V0dXBfX1dJRFRIIDQKKyNkZWZpbmUgUl9TQ1NJMV9DTURfREFUQV9fY29tbWFuZF9fQklUTlIgMTYKKyNkZWZpbmUgUl9TQ1NJMV9DTURfREFUQV9fY29tbWFuZF9fV0lEVEggNAorI2RlZmluZSBSX1NDU0kxX0NNRF9EQVRBX19jb21tYW5kX19mdWxsX2Rpbl8xIDAKKyNkZWZpbmUgUl9TQ1NJMV9DTURfREFUQV9fY29tbWFuZF9fZnVsbF9kb3V0XzEgMQorI2RlZmluZSBSX1NDU0kxX0NNRF9EQVRBX19jb21tYW5kX19mdWxsX3N0YXRfMSAyCisjZGVmaW5lIFJfU0NTSTFfQ01EX0RBVEFfX2NvbW1hbmRfX3Jlc2VsX2RpbiAzCisjZGVmaW5lIFJfU0NTSTFfQ01EX0RBVEFfX2NvbW1hbmRfX3Jlc2VsX2RvdXQgNAorI2RlZmluZSBSX1NDU0kxX0NNRF9EQVRBX19jb21tYW5kX19yZXNlbF9zdGF0IDUKKyNkZWZpbmUgUl9TQ1NJMV9DTURfREFUQV9fY29tbWFuZF9fYXJiX29ubHkgNgorI2RlZmluZSBSX1NDU0kxX0NNRF9EQVRBX19jb21tYW5kX19mdWxsX2Rpbl8zIDgKKyNkZWZpbmUgUl9TQ1NJMV9DTURfREFUQV9fY29tbWFuZF9fZnVsbF9kb3V0XzMgOQorI2RlZmluZSBSX1NDU0kxX0NNRF9EQVRBX19jb21tYW5kX19mdWxsX3N0YXRfMyAxMAorI2RlZmluZSBSX1NDU0kxX0NNRF9EQVRBX19jb21tYW5kX19tYW5fZGF0YV9pbiAxMQorI2RlZmluZSBSX1NDU0kxX0NNRF9EQVRBX19jb21tYW5kX19tYW5fZGF0YV9vdXQgMTIKKyNkZWZpbmUgUl9TQ1NJMV9DTURfREFUQV9fY29tbWFuZF9fbWFuX3JhdCAxMworI2RlZmluZSBSX1NDU0kxX0NNRF9EQVRBX19kYXRhX291dF9fQklUTlIgMAorI2RlZmluZSBSX1NDU0kxX0NNRF9EQVRBX19kYXRhX291dF9fV0lEVEggMTYKKworI2RlZmluZSBSX1NDU0kxX0RBVEEgKElPX1RZUEVDQVNUX1VXT1JEIDB4YjAwMDAwNTApCisjZGVmaW5lIFJfU0NTSTFfREFUQV9fZGF0YV9vdXRfX0JJVE5SIDAKKyNkZWZpbmUgUl9TQ1NJMV9EQVRBX19kYXRhX291dF9fV0lEVEggMTYKKworI2RlZmluZSBSX1NDU0kxX0NNRCAoSU9fVFlQRUNBU1RfQllURSAweGIwMDAwMDUyKQorI2RlZmluZSBSX1NDU0kxX0NNRF9fYXN5bmNoX3NldHVwX19CSVROUiA0CisjZGVmaW5lIFJfU0NTSTFfQ01EX19hc3luY2hfc2V0dXBfX1dJRFRIIDQKKyNkZWZpbmUgUl9TQ1NJMV9DTURfX2NvbW1hbmRfX0JJVE5SIDAKKyNkZWZpbmUgUl9TQ1NJMV9DTURfX2NvbW1hbmRfX1dJRFRIIDQKKyNkZWZpbmUgUl9TQ1NJMV9DTURfX2NvbW1hbmRfX2Z1bGxfZGluXzEgMAorI2RlZmluZSBSX1NDU0kxX0NNRF9fY29tbWFuZF9fZnVsbF9kb3V0XzEgMQorI2RlZmluZSBSX1NDU0kxX0NNRF9fY29tbWFuZF9fZnVsbF9zdGF0XzEgMgorI2RlZmluZSBSX1NDU0kxX0NNRF9fY29tbWFuZF9fcmVzZWxfZGluIDMKKyNkZWZpbmUgUl9TQ1NJMV9DTURfX2NvbW1hbmRfX3Jlc2VsX2RvdXQgNAorI2RlZmluZSBSX1NDU0kxX0NNRF9fY29tbWFuZF9fcmVzZWxfc3RhdCA1CisjZGVmaW5lIFJfU0NTSTFfQ01EX19jb21tYW5kX19hcmJfb25seSA2CisjZGVmaW5lIFJfU0NTSTFfQ01EX19jb21tYW5kX19mdWxsX2Rpbl8zIDgKKyNkZWZpbmUgUl9TQ1NJMV9DTURfX2NvbW1hbmRfX2Z1bGxfZG91dF8zIDkKKyNkZWZpbmUgUl9TQ1NJMV9DTURfX2NvbW1hbmRfX2Z1bGxfc3RhdF8zIDEwCisjZGVmaW5lIFJfU0NTSTFfQ01EX19jb21tYW5kX19tYW5fZGF0YV9pbiAxMQorI2RlZmluZSBSX1NDU0kxX0NNRF9fY29tbWFuZF9fbWFuX2RhdGFfb3V0IDEyCisjZGVmaW5lIFJfU0NTSTFfQ01EX19jb21tYW5kX19tYW5fcmF0IDEzCisKKyNkZWZpbmUgUl9TQ1NJMV9TVEFUVVNfQ1RSTCAoSU9fVFlQRUNBU1RfQllURSAweGIwMDAwMDUzKQorI2RlZmluZSBSX1NDU0kxX1NUQVRVU19DVFJMX19wYXJpdHlfaW5fX0JJVE5SIDIKKyNkZWZpbmUgUl9TQ1NJMV9TVEFUVVNfQ1RSTF9fcGFyaXR5X2luX19XSURUSCAxCisjZGVmaW5lIFJfU0NTSTFfU1RBVFVTX0NUUkxfX3Bhcml0eV9pbl9fb24gMAorI2RlZmluZSBSX1NDU0kxX1NUQVRVU19DVFJMX19wYXJpdHlfaW5fX29mZiAxCisjZGVmaW5lIFJfU0NTSTFfU1RBVFVTX0NUUkxfX3NraXBfX0JJVE5SIDEKKyNkZWZpbmUgUl9TQ1NJMV9TVEFUVVNfQ1RSTF9fc2tpcF9fV0lEVEggMQorI2RlZmluZSBSX1NDU0kxX1NUQVRVU19DVFJMX19za2lwX19vbiAxCisjZGVmaW5lIFJfU0NTSTFfU1RBVFVTX0NUUkxfX3NraXBfX29mZiAwCisjZGVmaW5lIFJfU0NTSTFfU1RBVFVTX0NUUkxfX2Nscl9zdGF0dXNfX0JJVE5SIDAKKyNkZWZpbmUgUl9TQ1NJMV9TVEFUVVNfQ1RSTF9fY2xyX3N0YXR1c19fV0lEVEggMQorI2RlZmluZSBSX1NDU0kxX1NUQVRVU19DVFJMX19jbHJfc3RhdHVzX195ZXMgMQorI2RlZmluZSBSX1NDU0kxX1NUQVRVU19DVFJMX19jbHJfc3RhdHVzX19ub3AgMAorCisjZGVmaW5lIFJfU0NTSTFfU1RBVFVTIChJT19UWVBFQ0FTVF9ST19VRFdPUkQgMHhiMDAwMDA1OCkKKyNkZWZpbmUgUl9TQ1NJMV9TVEFUVVNfX3RzdF9hcmJfd29uX19CSVROUiAyMworI2RlZmluZSBSX1NDU0kxX1NUQVRVU19fdHN0X2FyYl93b25fX1dJRFRIIDEKKyNkZWZpbmUgUl9TQ1NJMV9TVEFUVVNfX3RzdF9yZXNlbF9fQklUTlIgMjIKKyNkZWZpbmUgUl9TQ1NJMV9TVEFUVVNfX3RzdF9yZXNlbF9fV0lEVEggMQorI2RlZmluZSBSX1NDU0kxX1NUQVRVU19fcGFyaXR5X2Vycm9yX19CSVROUiAyMQorI2RlZmluZSBSX1NDU0kxX1NUQVRVU19fcGFyaXR5X2Vycm9yX19XSURUSCAxCisjZGVmaW5lIFJfU0NTSTFfU1RBVFVTX19idXNfcmVzZXRfX0JJVE5SIDIwCisjZGVmaW5lIFJfU0NTSTFfU1RBVFVTX19idXNfcmVzZXRfX1dJRFRIIDEKKyNkZWZpbmUgUl9TQ1NJMV9TVEFUVVNfX2J1c19yZXNldF9feWVzIDEKKyNkZWZpbmUgUl9TQ1NJMV9TVEFUVVNfX2J1c19yZXNldF9fbm8gMAorI2RlZmluZSBSX1NDU0kxX1NUQVRVU19fcmVzZWxfdGFyZ2V0X19CSVROUiAxNQorI2RlZmluZSBSX1NDU0kxX1NUQVRVU19fcmVzZWxfdGFyZ2V0X19XSURUSCA0CisjZGVmaW5lIFJfU0NTSTFfU1RBVFVTX19yZXNlbF9fQklUTlIgMTQKKyNkZWZpbmUgUl9TQ1NJMV9TVEFUVVNfX3Jlc2VsX19XSURUSCAxCisjZGVmaW5lIFJfU0NTSTFfU1RBVFVTX19yZXNlbF9feWVzIDEKKyNkZWZpbmUgUl9TQ1NJMV9TVEFUVVNfX3Jlc2VsX19ubyAwCisjZGVmaW5lIFJfU0NTSTFfU1RBVFVTX19jdXJyX3BoYXNlX19CSVROUiAxMQorI2RlZmluZSBSX1NDU0kxX1NUQVRVU19fY3Vycl9waGFzZV9fV0lEVEggMworI2RlZmluZSBSX1NDU0kxX1NUQVRVU19fY3Vycl9waGFzZV9fcGhfdW5kZWYgMAorI2RlZmluZSBSX1NDU0kxX1NUQVRVU19fY3Vycl9waGFzZV9fcGhfbXNnX2luIDcKKyNkZWZpbmUgUl9TQ1NJMV9TVEFUVVNfX2N1cnJfcGhhc2VfX3BoX21zZ19vdXQgNgorI2RlZmluZSBSX1NDU0kxX1NUQVRVU19fY3Vycl9waGFzZV9fcGhfc3RhdHVzIDMKKyNkZWZpbmUgUl9TQ1NJMV9TVEFUVVNfX2N1cnJfcGhhc2VfX3BoX2NvbW1hbmQgMgorI2RlZmluZSBSX1NDU0kxX1NUQVRVU19fY3Vycl9waGFzZV9fcGhfZGF0YV9pbiA1CisjZGVmaW5lIFJfU0NTSTFfU1RBVFVTX19jdXJyX3BoYXNlX19waF9kYXRhX291dCA0CisjZGVmaW5lIFJfU0NTSTFfU1RBVFVTX19jdXJyX3BoYXNlX19waF9yZXNlbCAxCisjZGVmaW5lIFJfU0NTSTFfU1RBVFVTX19sYXN0X3NlcV9zdGVwX19CSVROUiA2CisjZGVmaW5lIFJfU0NTSTFfU1RBVFVTX19sYXN0X3NlcV9zdGVwX19XSURUSCA1CisjZGVmaW5lIFJfU0NTSTFfU1RBVFVTX19sYXN0X3NlcV9zdGVwX19zdF9idXNfZnJlZSAyNAorI2RlZmluZSBSX1NDU0kxX1NUQVRVU19fbGFzdF9zZXFfc3RlcF9fc3RfYXJiaXRyYXRlIDgKKyNkZWZpbmUgUl9TQ1NJMV9TVEFUVVNfX2xhc3Rfc2VxX3N0ZXBfX3N0X3Jlc2VsX3JlcSAyOQorI2RlZmluZSBSX1NDU0kxX1NUQVRVU19fbGFzdF9zZXFfc3RlcF9fc3RfbXNnXzEgMgorI2RlZmluZSBSX1NDU0kxX1NUQVRVU19fbGFzdF9zZXFfc3RlcF9fc3RfbWFudWFsIDI4CisjZGVmaW5lIFJfU0NTSTFfU1RBVFVTX19sYXN0X3NlcV9zdGVwX19zdF90cmFuc2ZfY21kIDMwCisjZGVmaW5lIFJfU0NTSTFfU1RBVFVTX19sYXN0X3NlcV9zdGVwX19zdF9tc2dfMiA2CisjZGVmaW5lIFJfU0NTSTFfU1RBVFVTX19sYXN0X3NlcV9zdGVwX19zdF9tc2dfMyAyMgorI2RlZmluZSBSX1NDU0kxX1NUQVRVU19fbGFzdF9zZXFfc3RlcF9fc3RfYW5zd2VyIDMKKyNkZWZpbmUgUl9TQ1NJMV9TVEFUVVNfX2xhc3Rfc2VxX3N0ZXBfX3N0X3N5bmNoX2Rpbl9wZXJyIDEKKyNkZWZpbmUgUl9TQ1NJMV9TVEFUVVNfX2xhc3Rfc2VxX3N0ZXBfX3N0X3RyYW5zZmVyX2RvbmUgMTUKKyNkZWZpbmUgUl9TQ1NJMV9TVEFUVVNfX2xhc3Rfc2VxX3N0ZXBfX3N0X3N5bmNoX2RvdXQgMAorI2RlZmluZSBSX1NDU0kxX1NUQVRVU19fbGFzdF9zZXFfc3RlcF9fc3RfYXN5bmNoX2RvdXQgMjUKKyNkZWZpbmUgUl9TQ1NJMV9TVEFUVVNfX2xhc3Rfc2VxX3N0ZXBfX3N0X3N5bmNoX2RpbiAxMworI2RlZmluZSBSX1NDU0kxX1NUQVRVU19fbGFzdF9zZXFfc3RlcF9fc3RfYXN5bmNoX2RpbiA5CisjZGVmaW5lIFJfU0NTSTFfU1RBVFVTX19sYXN0X3NlcV9zdGVwX19zdF9zeW5jaF9kb3V0X2FjayA0CisjZGVmaW5lIFJfU0NTSTFfU1RBVFVTX19sYXN0X3NlcV9zdGVwX19zdF9zeW5jaF9kaW5fYWNrIDEyCisjZGVmaW5lIFJfU0NTSTFfU1RBVFVTX19sYXN0X3NlcV9zdGVwX19zdF9zeW5jaF9kaW5fYWNrX3BlcnIgNQorI2RlZmluZSBSX1NDU0kxX1NUQVRVU19fbGFzdF9zZXFfc3RlcF9fc3RfYXN5bmNoX2RvdXRfZW5kIDExCisjZGVmaW5lIFJfU0NTSTFfU1RBVFVTX19sYXN0X3NlcV9zdGVwX19zdF9pd3IgMjcKKyNkZWZpbmUgUl9TQ1NJMV9TVEFUVVNfX2xhc3Rfc2VxX3N0ZXBfX3N0X3dhaXRfZnJlZV9kaXNjIDIxCisjZGVmaW5lIFJfU0NTSTFfU1RBVFVTX19sYXN0X3NlcV9zdGVwX19zdF9zZHBfZGlzYyA3CisjZGVmaW5lIFJfU0NTSTFfU1RBVFVTX19sYXN0X3NlcV9zdGVwX19zdF9jYyAzMQorI2RlZmluZSBSX1NDU0kxX1NUQVRVU19fbGFzdF9zZXFfc3RlcF9fc3RfaXdyX2dvb2QgMTQKKyNkZWZpbmUgUl9TQ1NJMV9TVEFUVVNfX2xhc3Rfc2VxX3N0ZXBfX3N0X2l3cl9jYyAyMworI2RlZmluZSBSX1NDU0kxX1NUQVRVU19fbGFzdF9zZXFfc3RlcF9fc3Rfd2FpdF9mcmVlX2l3cl9jYyAxNworI2RlZmluZSBSX1NDU0kxX1NUQVRVU19fbGFzdF9zZXFfc3RlcF9fc3Rfd2FpdF9mcmVlX2NjIDIwCisjZGVmaW5lIFJfU0NTSTFfU1RBVFVTX19sYXN0X3NlcV9zdGVwX19zdF93YWl0X2ZyZWVfc2RwX2Rpc2MgMTYKKyNkZWZpbmUgUl9TQ1NJMV9TVEFUVVNfX2xhc3Rfc2VxX3N0ZXBfX3N0X21hbnVhbF9yZXEgMTAKKyNkZWZpbmUgUl9TQ1NJMV9TVEFUVVNfX2xhc3Rfc2VxX3N0ZXBfX3N0X21hbnVhbF9kaW5fcHJvdCAxOAorI2RlZmluZSBSX1NDU0kxX1NUQVRVU19fdmFsaWRfc3RhdHVzX19CSVROUiA1CisjZGVmaW5lIFJfU0NTSTFfU1RBVFVTX192YWxpZF9zdGF0dXNfX1dJRFRIIDEKKyNkZWZpbmUgUl9TQ1NJMV9TVEFUVVNfX3ZhbGlkX3N0YXR1c19feWVzIDEKKyNkZWZpbmUgUl9TQ1NJMV9TVEFUVVNfX3ZhbGlkX3N0YXR1c19fbm8gMAorI2RlZmluZSBSX1NDU0kxX1NUQVRVU19fc2VxX3N0YXR1c19fQklUTlIgMAorI2RlZmluZSBSX1NDU0kxX1NUQVRVU19fc2VxX3N0YXR1c19fV0lEVEggNQorI2RlZmluZSBSX1NDU0kxX1NUQVRVU19fc2VxX3N0YXR1c19faW5mb19zZXFfY29tcGxldGUgMAorI2RlZmluZSBSX1NDU0kxX1NUQVRVU19fc2VxX3N0YXR1c19faW5mb19wYXJpdHlfZXJyb3IgMQorI2RlZmluZSBSX1NDU0kxX1NUQVRVU19fc2VxX3N0YXR1c19faW5mb191bmhhbmRsZWRfbXNnX2luIDIKKyNkZWZpbmUgUl9TQ1NJMV9TVEFUVVNfX3NlcV9zdGF0dXNfX2luZm9fdW5leHBfcGhfY2hhbmdlIDMKKyNkZWZpbmUgUl9TQ1NJMV9TVEFUVVNfX3NlcV9zdGF0dXNfX2luZm9fYXJiX2xvc3QgNAorI2RlZmluZSBSX1NDU0kxX1NUQVRVU19fc2VxX3N0YXR1c19faW5mb19zZWxfdGltZW91dCA1CisjZGVmaW5lIFJfU0NTSTFfU1RBVFVTX19zZXFfc3RhdHVzX19pbmZvX3VuZXhwX2JmIDYKKyNkZWZpbmUgUl9TQ1NJMV9TVEFUVVNfX3NlcV9zdGF0dXNfX2luZm9faWxsZWdhbF9vcCA3CisjZGVmaW5lIFJfU0NTSTFfU1RBVFVTX19zZXFfc3RhdHVzX19pbmZvX3JlY19yZWN2ZCA4CisjZGVmaW5lIFJfU0NTSTFfU1RBVFVTX19zZXFfc3RhdHVzX19pbmZvX3Jlc2VsZWN0ZWQgOQorI2RlZmluZSBSX1NDU0kxX1NUQVRVU19fc2VxX3N0YXR1c19faW5mb191bmhhbmRsZWRfc3RhdHVzIDEwCisjZGVmaW5lIFJfU0NTSTFfU1RBVFVTX19zZXFfc3RhdHVzX19pbmZvX2J1c19yZXNldCAxMQorI2RlZmluZSBSX1NDU0kxX1NUQVRVU19fc2VxX3N0YXR1c19faW5mb19pbGxlZ2FsX2JmIDEyCisjZGVmaW5lIFJfU0NTSTFfU1RBVFVTX19zZXFfc3RhdHVzX19pbmZvX2J1c19mcmVlIDEzCisKKyNkZWZpbmUgUl9TQ1NJMV9EQVRBX0lOIChJT19UWVBFQ0FTVF9ST19VV09SRCAweGIwMDAwMDUwKQorI2RlZmluZSBSX1NDU0kxX0RBVEFfSU5fX2RhdGFfaW5fX0JJVE5SIDAKKyNkZWZpbmUgUl9TQ1NJMV9EQVRBX0lOX19kYXRhX2luX19XSURUSCAxNgorCisvKgorISogSW50ZXJydXB0IG1hc2sgYW5kIHN0YXR1cyByZWdpc3RlcnMKKyEqLworCisjZGVmaW5lIFJfSVJRX01BU0swX1JEIChJT19UWVBFQ0FTVF9ST19VRFdPUkQgMHhiMDAwMDBjMCkKKyNkZWZpbmUgUl9JUlFfTUFTSzBfUkRfX25taV9waW5fX0JJVE5SIDMxCisjZGVmaW5lIFJfSVJRX01BU0swX1JEX19ubWlfcGluX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0swX1JEX19ubWlfcGluX19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9NQVNLMF9SRF9fbm1pX3Bpbl9faW5hY3RpdmUgMAorI2RlZmluZSBSX0lSUV9NQVNLMF9SRF9fd2F0Y2hkb2dfbm1pX19CSVROUiAzMAorI2RlZmluZSBSX0lSUV9NQVNLMF9SRF9fd2F0Y2hkb2dfbm1pX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0swX1JEX193YXRjaGRvZ19ubWlfX2FjdGl2ZSAxCisjZGVmaW5lIFJfSVJRX01BU0swX1JEX193YXRjaGRvZ19ubWlfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzBfUkRfX3NxZV90ZXN0X2Vycm9yX19CSVROUiAyOQorI2RlZmluZSBSX0lSUV9NQVNLMF9SRF9fc3FlX3Rlc3RfZXJyb3JfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfUkRfX3NxZV90ZXN0X2Vycm9yX19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9NQVNLMF9SRF9fc3FlX3Rlc3RfZXJyb3JfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzBfUkRfX2NhcnJpZXJfbG9zc19fQklUTlIgMjgKKyNkZWZpbmUgUl9JUlFfTUFTSzBfUkRfX2NhcnJpZXJfbG9zc19fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMF9SRF9fY2Fycmllcl9sb3NzX19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9NQVNLMF9SRF9fY2Fycmllcl9sb3NzX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfSVJRX01BU0swX1JEX19kZWZlcnJlZF9fQklUTlIgMjcKKyNkZWZpbmUgUl9JUlFfTUFTSzBfUkRfX2RlZmVycmVkX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0swX1JEX19kZWZlcnJlZF9fYWN0aXZlIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfUkRfX2RlZmVycmVkX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfSVJRX01BU0swX1JEX19sYXRlX2NvbF9fQklUTlIgMjYKKyNkZWZpbmUgUl9JUlFfTUFTSzBfUkRfX2xhdGVfY29sX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0swX1JEX19sYXRlX2NvbF9fYWN0aXZlIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfUkRfX2xhdGVfY29sX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfSVJRX01BU0swX1JEX19tdWx0aXBsZV9jb2xfX0JJVE5SIDI1CisjZGVmaW5lIFJfSVJRX01BU0swX1JEX19tdWx0aXBsZV9jb2xfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfUkRfX211bHRpcGxlX2NvbF9fYWN0aXZlIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfUkRfX211bHRpcGxlX2NvbF9faW5hY3RpdmUgMAorI2RlZmluZSBSX0lSUV9NQVNLMF9SRF9fc2luZ2xlX2NvbF9fQklUTlIgMjQKKyNkZWZpbmUgUl9JUlFfTUFTSzBfUkRfX3NpbmdsZV9jb2xfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfUkRfX3NpbmdsZV9jb2xfX2FjdGl2ZSAxCisjZGVmaW5lIFJfSVJRX01BU0swX1JEX19zaW5nbGVfY29sX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfSVJRX01BU0swX1JEX19jb25nZXN0aW9uX19CSVROUiAyMworI2RlZmluZSBSX0lSUV9NQVNLMF9SRF9fY29uZ2VzdGlvbl9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMF9SRF9fY29uZ2VzdGlvbl9fYWN0aXZlIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfUkRfX2Nvbmdlc3Rpb25fX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzBfUkRfX292ZXJzaXplX19CSVROUiAyMgorI2RlZmluZSBSX0lSUV9NQVNLMF9SRF9fb3ZlcnNpemVfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfUkRfX292ZXJzaXplX19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9NQVNLMF9SRF9fb3ZlcnNpemVfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzBfUkRfX2FsaWdubWVudF9lcnJvcl9fQklUTlIgMjEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfUkRfX2FsaWdubWVudF9lcnJvcl9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMF9SRF9fYWxpZ25tZW50X2Vycm9yX19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9NQVNLMF9SRF9fYWxpZ25tZW50X2Vycm9yX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfSVJRX01BU0swX1JEX19jcmNfZXJyb3JfX0JJVE5SIDIwCisjZGVmaW5lIFJfSVJRX01BU0swX1JEX19jcmNfZXJyb3JfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfUkRfX2NyY19lcnJvcl9fYWN0aXZlIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfUkRfX2NyY19lcnJvcl9faW5hY3RpdmUgMAorI2RlZmluZSBSX0lSUV9NQVNLMF9SRF9fb3ZlcnJ1bl9fQklUTlIgMTkKKyNkZWZpbmUgUl9JUlFfTUFTSzBfUkRfX292ZXJydW5fX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfUkRfX292ZXJydW5fX2FjdGl2ZSAxCisjZGVmaW5lIFJfSVJRX01BU0swX1JEX19vdmVycnVuX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfSVJRX01BU0swX1JEX191bmRlcnJ1bl9fQklUTlIgMTgKKyNkZWZpbmUgUl9JUlFfTUFTSzBfUkRfX3VuZGVycnVuX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0swX1JEX191bmRlcnJ1bl9fYWN0aXZlIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfUkRfX3VuZGVycnVuX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfSVJRX01BU0swX1JEX19leGNlc3NpdmVfY29sX19CSVROUiAxNworI2RlZmluZSBSX0lSUV9NQVNLMF9SRF9fZXhjZXNzaXZlX2NvbF9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMF9SRF9fZXhjZXNzaXZlX2NvbF9fYWN0aXZlIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfUkRfX2V4Y2Vzc2l2ZV9jb2xfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzBfUkRfX21kaW9fX0JJVE5SIDE2CisjZGVmaW5lIFJfSVJRX01BU0swX1JEX19tZGlvX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0swX1JEX19tZGlvX19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9NQVNLMF9SRF9fbWRpb19faW5hY3RpdmUgMAorI2RlZmluZSBSX0lSUV9NQVNLMF9SRF9fYXRhX2RycTNfX0JJVE5SIDE1CisjZGVmaW5lIFJfSVJRX01BU0swX1JEX19hdGFfZHJxM19fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMF9SRF9fYXRhX2RycTNfX2FjdGl2ZSAxCisjZGVmaW5lIFJfSVJRX01BU0swX1JEX19hdGFfZHJxM19faW5hY3RpdmUgMAorI2RlZmluZSBSX0lSUV9NQVNLMF9SRF9fYXRhX2RycTJfX0JJVE5SIDE0CisjZGVmaW5lIFJfSVJRX01BU0swX1JEX19hdGFfZHJxMl9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMF9SRF9fYXRhX2RycTJfX2FjdGl2ZSAxCisjZGVmaW5lIFJfSVJRX01BU0swX1JEX19hdGFfZHJxMl9faW5hY3RpdmUgMAorI2RlZmluZSBSX0lSUV9NQVNLMF9SRF9fYXRhX2RycTFfX0JJVE5SIDEzCisjZGVmaW5lIFJfSVJRX01BU0swX1JEX19hdGFfZHJxMV9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMF9SRF9fYXRhX2RycTFfX2FjdGl2ZSAxCisjZGVmaW5lIFJfSVJRX01BU0swX1JEX19hdGFfZHJxMV9faW5hY3RpdmUgMAorI2RlZmluZSBSX0lSUV9NQVNLMF9SRF9fYXRhX2RycTBfX0JJVE5SIDEyCisjZGVmaW5lIFJfSVJRX01BU0swX1JEX19hdGFfZHJxMF9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMF9SRF9fYXRhX2RycTBfX2FjdGl2ZSAxCisjZGVmaW5lIFJfSVJRX01BU0swX1JEX19hdGFfZHJxMF9faW5hY3RpdmUgMAorI2RlZmluZSBSX0lSUV9NQVNLMF9SRF9fcGFyMF9lY3BfY21kX19CSVROUiAxMQorI2RlZmluZSBSX0lSUV9NQVNLMF9SRF9fcGFyMF9lY3BfY21kX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0swX1JEX19wYXIwX2VjcF9jbWRfX2FjdGl2ZSAxCisjZGVmaW5lIFJfSVJRX01BU0swX1JEX19wYXIwX2VjcF9jbWRfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzBfUkRfX2F0YV9pcnEzX19CSVROUiAxMQorI2RlZmluZSBSX0lSUV9NQVNLMF9SRF9fYXRhX2lycTNfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfUkRfX2F0YV9pcnEzX19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9NQVNLMF9SRF9fYXRhX2lycTNfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzBfUkRfX3BhcjBfcGVyaV9fQklUTlIgMTAKKyNkZWZpbmUgUl9JUlFfTUFTSzBfUkRfX3BhcjBfcGVyaV9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMF9SRF9fcGFyMF9wZXJpX19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9NQVNLMF9SRF9fcGFyMF9wZXJpX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfSVJRX01BU0swX1JEX19hdGFfaXJxMl9fQklUTlIgMTAKKyNkZWZpbmUgUl9JUlFfTUFTSzBfUkRfX2F0YV9pcnEyX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0swX1JEX19hdGFfaXJxMl9fYWN0aXZlIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfUkRfX2F0YV9pcnEyX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfSVJRX01BU0swX1JEX19wYXIwX2RhdGFfX0JJVE5SIDkKKyNkZWZpbmUgUl9JUlFfTUFTSzBfUkRfX3BhcjBfZGF0YV9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMF9SRF9fcGFyMF9kYXRhX19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9NQVNLMF9SRF9fcGFyMF9kYXRhX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfSVJRX01BU0swX1JEX19hdGFfaXJxMV9fQklUTlIgOQorI2RlZmluZSBSX0lSUV9NQVNLMF9SRF9fYXRhX2lycTFfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfUkRfX2F0YV9pcnExX19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9NQVNLMF9SRF9fYXRhX2lycTFfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzBfUkRfX3BhcjBfcmVhZHlfX0JJVE5SIDgKKyNkZWZpbmUgUl9JUlFfTUFTSzBfUkRfX3BhcjBfcmVhZHlfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfUkRfX3BhcjBfcmVhZHlfX2FjdGl2ZSAxCisjZGVmaW5lIFJfSVJRX01BU0swX1JEX19wYXIwX3JlYWR5X19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfSVJRX01BU0swX1JEX19hdGFfaXJxMF9fQklUTlIgOAorI2RlZmluZSBSX0lSUV9NQVNLMF9SRF9fYXRhX2lycTBfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfUkRfX2F0YV9pcnEwX19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9NQVNLMF9SRF9fYXRhX2lycTBfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzBfUkRfX21pb19fQklUTlIgOAorI2RlZmluZSBSX0lSUV9NQVNLMF9SRF9fbWlvX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0swX1JEX19taW9fX2FjdGl2ZSAxCisjZGVmaW5lIFJfSVJRX01BU0swX1JEX19taW9fX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzBfUkRfX3Njc2kwX19CSVROUiA4CisjZGVmaW5lIFJfSVJRX01BU0swX1JEX19zY3NpMF9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMF9SRF9fc2NzaTBfX2FjdGl2ZSAxCisjZGVmaW5lIFJfSVJRX01BU0swX1JEX19zY3NpMF9faW5hY3RpdmUgMAorI2RlZmluZSBSX0lSUV9NQVNLMF9SRF9fYXRhX2RtYWVuZF9fQklUTlIgNworI2RlZmluZSBSX0lSUV9NQVNLMF9SRF9fYXRhX2RtYWVuZF9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMF9SRF9fYXRhX2RtYWVuZF9fYWN0aXZlIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfUkRfX2F0YV9kbWFlbmRfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzBfUkRfX2lycV9leHRfdmVjdG9yX25yX19CSVROUiA1CisjZGVmaW5lIFJfSVJRX01BU0swX1JEX19pcnFfZXh0X3ZlY3Rvcl9ucl9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMF9SRF9faXJxX2V4dF92ZWN0b3JfbnJfX2FjdGl2ZSAxCisjZGVmaW5lIFJfSVJRX01BU0swX1JEX19pcnFfZXh0X3ZlY3Rvcl9ucl9faW5hY3RpdmUgMAorI2RlZmluZSBSX0lSUV9NQVNLMF9SRF9faXJxX2ludF92ZWN0b3JfbnJfX0JJVE5SIDQKKyNkZWZpbmUgUl9JUlFfTUFTSzBfUkRfX2lycV9pbnRfdmVjdG9yX25yX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0swX1JEX19pcnFfaW50X3ZlY3Rvcl9ucl9fYWN0aXZlIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfUkRfX2lycV9pbnRfdmVjdG9yX25yX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfSVJRX01BU0swX1JEX19leHRfZG1hMV9fQklUTlIgMworI2RlZmluZSBSX0lSUV9NQVNLMF9SRF9fZXh0X2RtYTFfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfUkRfX2V4dF9kbWExX19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9NQVNLMF9SRF9fZXh0X2RtYTFfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzBfUkRfX2V4dF9kbWEwX19CSVROUiAyCisjZGVmaW5lIFJfSVJRX01BU0swX1JEX19leHRfZG1hMF9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMF9SRF9fZXh0X2RtYTBfX2FjdGl2ZSAxCisjZGVmaW5lIFJfSVJRX01BU0swX1JEX19leHRfZG1hMF9faW5hY3RpdmUgMAorI2RlZmluZSBSX0lSUV9NQVNLMF9SRF9fdGltZXIxX19CSVROUiAxCisjZGVmaW5lIFJfSVJRX01BU0swX1JEX190aW1lcjFfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfUkRfX3RpbWVyMV9fYWN0aXZlIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfUkRfX3RpbWVyMV9faW5hY3RpdmUgMAorI2RlZmluZSBSX0lSUV9NQVNLMF9SRF9fdGltZXIwX19CSVROUiAwCisjZGVmaW5lIFJfSVJRX01BU0swX1JEX190aW1lcjBfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfUkRfX3RpbWVyMF9fYWN0aXZlIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfUkRfX3RpbWVyMF9faW5hY3RpdmUgMAorCisjZGVmaW5lIFJfSVJRX01BU0swX0NMUiAoSU9fVFlQRUNBU1RfVURXT1JEIDB4YjAwMDAwYzApCisjZGVmaW5lIFJfSVJRX01BU0swX0NMUl9fbm1pX3Bpbl9fQklUTlIgMzEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfQ0xSX19ubWlfcGluX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0swX0NMUl9fbm1pX3Bpbl9fY2xyIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfQ0xSX19ubWlfcGluX19ub3AgMAorI2RlZmluZSBSX0lSUV9NQVNLMF9DTFJfX3dhdGNoZG9nX25taV9fQklUTlIgMzAKKyNkZWZpbmUgUl9JUlFfTUFTSzBfQ0xSX193YXRjaGRvZ19ubWlfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfQ0xSX193YXRjaGRvZ19ubWlfX2NsciAxCisjZGVmaW5lIFJfSVJRX01BU0swX0NMUl9fd2F0Y2hkb2dfbm1pX19ub3AgMAorI2RlZmluZSBSX0lSUV9NQVNLMF9DTFJfX3NxZV90ZXN0X2Vycm9yX19CSVROUiAyOQorI2RlZmluZSBSX0lSUV9NQVNLMF9DTFJfX3NxZV90ZXN0X2Vycm9yX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0swX0NMUl9fc3FlX3Rlc3RfZXJyb3JfX2NsciAxCisjZGVmaW5lIFJfSVJRX01BU0swX0NMUl9fc3FlX3Rlc3RfZXJyb3JfX25vcCAwCisjZGVmaW5lIFJfSVJRX01BU0swX0NMUl9fY2Fycmllcl9sb3NzX19CSVROUiAyOAorI2RlZmluZSBSX0lSUV9NQVNLMF9DTFJfX2NhcnJpZXJfbG9zc19fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMF9DTFJfX2NhcnJpZXJfbG9zc19fY2xyIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfQ0xSX19jYXJyaWVyX2xvc3NfX25vcCAwCisjZGVmaW5lIFJfSVJRX01BU0swX0NMUl9fZGVmZXJyZWRfX0JJVE5SIDI3CisjZGVmaW5lIFJfSVJRX01BU0swX0NMUl9fZGVmZXJyZWRfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfQ0xSX19kZWZlcnJlZF9fY2xyIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfQ0xSX19kZWZlcnJlZF9fbm9wIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzBfQ0xSX19sYXRlX2NvbF9fQklUTlIgMjYKKyNkZWZpbmUgUl9JUlFfTUFTSzBfQ0xSX19sYXRlX2NvbF9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMF9DTFJfX2xhdGVfY29sX19jbHIgMQorI2RlZmluZSBSX0lSUV9NQVNLMF9DTFJfX2xhdGVfY29sX19ub3AgMAorI2RlZmluZSBSX0lSUV9NQVNLMF9DTFJfX211bHRpcGxlX2NvbF9fQklUTlIgMjUKKyNkZWZpbmUgUl9JUlFfTUFTSzBfQ0xSX19tdWx0aXBsZV9jb2xfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfQ0xSX19tdWx0aXBsZV9jb2xfX2NsciAxCisjZGVmaW5lIFJfSVJRX01BU0swX0NMUl9fbXVsdGlwbGVfY29sX19ub3AgMAorI2RlZmluZSBSX0lSUV9NQVNLMF9DTFJfX3NpbmdsZV9jb2xfX0JJVE5SIDI0CisjZGVmaW5lIFJfSVJRX01BU0swX0NMUl9fc2luZ2xlX2NvbF9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMF9DTFJfX3NpbmdsZV9jb2xfX2NsciAxCisjZGVmaW5lIFJfSVJRX01BU0swX0NMUl9fc2luZ2xlX2NvbF9fbm9wIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzBfQ0xSX19jb25nZXN0aW9uX19CSVROUiAyMworI2RlZmluZSBSX0lSUV9NQVNLMF9DTFJfX2Nvbmdlc3Rpb25fX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfQ0xSX19jb25nZXN0aW9uX19jbHIgMQorI2RlZmluZSBSX0lSUV9NQVNLMF9DTFJfX2Nvbmdlc3Rpb25fX25vcCAwCisjZGVmaW5lIFJfSVJRX01BU0swX0NMUl9fb3ZlcnNpemVfX0JJVE5SIDIyCisjZGVmaW5lIFJfSVJRX01BU0swX0NMUl9fb3ZlcnNpemVfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfQ0xSX19vdmVyc2l6ZV9fY2xyIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfQ0xSX19vdmVyc2l6ZV9fbm9wIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzBfQ0xSX19hbGlnbm1lbnRfZXJyb3JfX0JJVE5SIDIxCisjZGVmaW5lIFJfSVJRX01BU0swX0NMUl9fYWxpZ25tZW50X2Vycm9yX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0swX0NMUl9fYWxpZ25tZW50X2Vycm9yX19jbHIgMQorI2RlZmluZSBSX0lSUV9NQVNLMF9DTFJfX2FsaWdubWVudF9lcnJvcl9fbm9wIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzBfQ0xSX19jcmNfZXJyb3JfX0JJVE5SIDIwCisjZGVmaW5lIFJfSVJRX01BU0swX0NMUl9fY3JjX2Vycm9yX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0swX0NMUl9fY3JjX2Vycm9yX19jbHIgMQorI2RlZmluZSBSX0lSUV9NQVNLMF9DTFJfX2NyY19lcnJvcl9fbm9wIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzBfQ0xSX19vdmVycnVuX19CSVROUiAxOQorI2RlZmluZSBSX0lSUV9NQVNLMF9DTFJfX292ZXJydW5fX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfQ0xSX19vdmVycnVuX19jbHIgMQorI2RlZmluZSBSX0lSUV9NQVNLMF9DTFJfX292ZXJydW5fX25vcCAwCisjZGVmaW5lIFJfSVJRX01BU0swX0NMUl9fdW5kZXJydW5fX0JJVE5SIDE4CisjZGVmaW5lIFJfSVJRX01BU0swX0NMUl9fdW5kZXJydW5fX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfQ0xSX191bmRlcnJ1bl9fY2xyIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfQ0xSX191bmRlcnJ1bl9fbm9wIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzBfQ0xSX19leGNlc3NpdmVfY29sX19CSVROUiAxNworI2RlZmluZSBSX0lSUV9NQVNLMF9DTFJfX2V4Y2Vzc2l2ZV9jb2xfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfQ0xSX19leGNlc3NpdmVfY29sX19jbHIgMQorI2RlZmluZSBSX0lSUV9NQVNLMF9DTFJfX2V4Y2Vzc2l2ZV9jb2xfX25vcCAwCisjZGVmaW5lIFJfSVJRX01BU0swX0NMUl9fbWRpb19fQklUTlIgMTYKKyNkZWZpbmUgUl9JUlFfTUFTSzBfQ0xSX19tZGlvX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0swX0NMUl9fbWRpb19fY2xyIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfQ0xSX19tZGlvX19ub3AgMAorI2RlZmluZSBSX0lSUV9NQVNLMF9DTFJfX2F0YV9kcnEzX19CSVROUiAxNQorI2RlZmluZSBSX0lSUV9NQVNLMF9DTFJfX2F0YV9kcnEzX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0swX0NMUl9fYXRhX2RycTNfX2NsciAxCisjZGVmaW5lIFJfSVJRX01BU0swX0NMUl9fYXRhX2RycTNfX25vcCAwCisjZGVmaW5lIFJfSVJRX01BU0swX0NMUl9fYXRhX2RycTJfX0JJVE5SIDE0CisjZGVmaW5lIFJfSVJRX01BU0swX0NMUl9fYXRhX2RycTJfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfQ0xSX19hdGFfZHJxMl9fY2xyIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfQ0xSX19hdGFfZHJxMl9fbm9wIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzBfQ0xSX19hdGFfZHJxMV9fQklUTlIgMTMKKyNkZWZpbmUgUl9JUlFfTUFTSzBfQ0xSX19hdGFfZHJxMV9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMF9DTFJfX2F0YV9kcnExX19jbHIgMQorI2RlZmluZSBSX0lSUV9NQVNLMF9DTFJfX2F0YV9kcnExX19ub3AgMAorI2RlZmluZSBSX0lSUV9NQVNLMF9DTFJfX2F0YV9kcnEwX19CSVROUiAxMgorI2RlZmluZSBSX0lSUV9NQVNLMF9DTFJfX2F0YV9kcnEwX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0swX0NMUl9fYXRhX2RycTBfX2NsciAxCisjZGVmaW5lIFJfSVJRX01BU0swX0NMUl9fYXRhX2RycTBfX25vcCAwCisjZGVmaW5lIFJfSVJRX01BU0swX0NMUl9fcGFyMF9lY3BfY21kX19CSVROUiAxMQorI2RlZmluZSBSX0lSUV9NQVNLMF9DTFJfX3BhcjBfZWNwX2NtZF9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMF9DTFJfX3BhcjBfZWNwX2NtZF9fY2xyIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfQ0xSX19wYXIwX2VjcF9jbWRfX25vcCAwCisjZGVmaW5lIFJfSVJRX01BU0swX0NMUl9fYXRhX2lycTNfX0JJVE5SIDExCisjZGVmaW5lIFJfSVJRX01BU0swX0NMUl9fYXRhX2lycTNfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfQ0xSX19hdGFfaXJxM19fY2xyIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfQ0xSX19hdGFfaXJxM19fbm9wIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzBfQ0xSX19wYXIwX3BlcmlfX0JJVE5SIDEwCisjZGVmaW5lIFJfSVJRX01BU0swX0NMUl9fcGFyMF9wZXJpX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0swX0NMUl9fcGFyMF9wZXJpX19jbHIgMQorI2RlZmluZSBSX0lSUV9NQVNLMF9DTFJfX3BhcjBfcGVyaV9fbm9wIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzBfQ0xSX19hdGFfaXJxMl9fQklUTlIgMTAKKyNkZWZpbmUgUl9JUlFfTUFTSzBfQ0xSX19hdGFfaXJxMl9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMF9DTFJfX2F0YV9pcnEyX19jbHIgMQorI2RlZmluZSBSX0lSUV9NQVNLMF9DTFJfX2F0YV9pcnEyX19ub3AgMAorI2RlZmluZSBSX0lSUV9NQVNLMF9DTFJfX3BhcjBfZGF0YV9fQklUTlIgOQorI2RlZmluZSBSX0lSUV9NQVNLMF9DTFJfX3BhcjBfZGF0YV9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMF9DTFJfX3BhcjBfZGF0YV9fY2xyIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfQ0xSX19wYXIwX2RhdGFfX25vcCAwCisjZGVmaW5lIFJfSVJRX01BU0swX0NMUl9fYXRhX2lycTFfX0JJVE5SIDkKKyNkZWZpbmUgUl9JUlFfTUFTSzBfQ0xSX19hdGFfaXJxMV9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMF9DTFJfX2F0YV9pcnExX19jbHIgMQorI2RlZmluZSBSX0lSUV9NQVNLMF9DTFJfX2F0YV9pcnExX19ub3AgMAorI2RlZmluZSBSX0lSUV9NQVNLMF9DTFJfX3BhcjBfcmVhZHlfX0JJVE5SIDgKKyNkZWZpbmUgUl9JUlFfTUFTSzBfQ0xSX19wYXIwX3JlYWR5X19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0swX0NMUl9fcGFyMF9yZWFkeV9fY2xyIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfQ0xSX19wYXIwX3JlYWR5X19ub3AgMAorI2RlZmluZSBSX0lSUV9NQVNLMF9DTFJfX2F0YV9pcnEwX19CSVROUiA4CisjZGVmaW5lIFJfSVJRX01BU0swX0NMUl9fYXRhX2lycTBfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfQ0xSX19hdGFfaXJxMF9fY2xyIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfQ0xSX19hdGFfaXJxMF9fbm9wIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzBfQ0xSX19taW9fX0JJVE5SIDgKKyNkZWZpbmUgUl9JUlFfTUFTSzBfQ0xSX19taW9fX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfQ0xSX19taW9fX2NsciAxCisjZGVmaW5lIFJfSVJRX01BU0swX0NMUl9fbWlvX19ub3AgMAorI2RlZmluZSBSX0lSUV9NQVNLMF9DTFJfX3Njc2kwX19CSVROUiA4CisjZGVmaW5lIFJfSVJRX01BU0swX0NMUl9fc2NzaTBfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfQ0xSX19zY3NpMF9fY2xyIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfQ0xSX19zY3NpMF9fbm9wIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzBfQ0xSX19hdGFfZG1hZW5kX19CSVROUiA3CisjZGVmaW5lIFJfSVJRX01BU0swX0NMUl9fYXRhX2RtYWVuZF9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMF9DTFJfX2F0YV9kbWFlbmRfX2NsciAxCisjZGVmaW5lIFJfSVJRX01BU0swX0NMUl9fYXRhX2RtYWVuZF9fbm9wIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzBfQ0xSX19pcnFfZXh0X3ZlY3Rvcl9ucl9fQklUTlIgNQorI2RlZmluZSBSX0lSUV9NQVNLMF9DTFJfX2lycV9leHRfdmVjdG9yX25yX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0swX0NMUl9faXJxX2V4dF92ZWN0b3JfbnJfX2NsciAxCisjZGVmaW5lIFJfSVJRX01BU0swX0NMUl9faXJxX2V4dF92ZWN0b3JfbnJfX25vcCAwCisjZGVmaW5lIFJfSVJRX01BU0swX0NMUl9faXJxX2ludF92ZWN0b3JfbnJfX0JJVE5SIDQKKyNkZWZpbmUgUl9JUlFfTUFTSzBfQ0xSX19pcnFfaW50X3ZlY3Rvcl9ucl9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMF9DTFJfX2lycV9pbnRfdmVjdG9yX25yX19jbHIgMQorI2RlZmluZSBSX0lSUV9NQVNLMF9DTFJfX2lycV9pbnRfdmVjdG9yX25yX19ub3AgMAorI2RlZmluZSBSX0lSUV9NQVNLMF9DTFJfX2V4dF9kbWExX19CSVROUiAzCisjZGVmaW5lIFJfSVJRX01BU0swX0NMUl9fZXh0X2RtYTFfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfQ0xSX19leHRfZG1hMV9fY2xyIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfQ0xSX19leHRfZG1hMV9fbm9wIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzBfQ0xSX19leHRfZG1hMF9fQklUTlIgMgorI2RlZmluZSBSX0lSUV9NQVNLMF9DTFJfX2V4dF9kbWEwX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0swX0NMUl9fZXh0X2RtYTBfX2NsciAxCisjZGVmaW5lIFJfSVJRX01BU0swX0NMUl9fZXh0X2RtYTBfX25vcCAwCisjZGVmaW5lIFJfSVJRX01BU0swX0NMUl9fdGltZXIxX19CSVROUiAxCisjZGVmaW5lIFJfSVJRX01BU0swX0NMUl9fdGltZXIxX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0swX0NMUl9fdGltZXIxX19jbHIgMQorI2RlZmluZSBSX0lSUV9NQVNLMF9DTFJfX3RpbWVyMV9fbm9wIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzBfQ0xSX190aW1lcjBfX0JJVE5SIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzBfQ0xSX190aW1lcjBfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfQ0xSX190aW1lcjBfX2NsciAxCisjZGVmaW5lIFJfSVJRX01BU0swX0NMUl9fdGltZXIwX19ub3AgMAorCisjZGVmaW5lIFJfSVJRX1JFQUQwIChJT19UWVBFQ0FTVF9ST19VRFdPUkQgMHhiMDAwMDBjNCkKKyNkZWZpbmUgUl9JUlFfUkVBRDBfX25taV9waW5fX0JJVE5SIDMxCisjZGVmaW5lIFJfSVJRX1JFQUQwX19ubWlfcGluX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX1JFQUQwX19ubWlfcGluX19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9SRUFEMF9fbm1pX3Bpbl9faW5hY3RpdmUgMAorI2RlZmluZSBSX0lSUV9SRUFEMF9fd2F0Y2hkb2dfbm1pX19CSVROUiAzMAorI2RlZmluZSBSX0lSUV9SRUFEMF9fd2F0Y2hkb2dfbm1pX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX1JFQUQwX193YXRjaGRvZ19ubWlfX2FjdGl2ZSAxCisjZGVmaW5lIFJfSVJRX1JFQUQwX193YXRjaGRvZ19ubWlfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9JUlFfUkVBRDBfX3NxZV90ZXN0X2Vycm9yX19CSVROUiAyOQorI2RlZmluZSBSX0lSUV9SRUFEMF9fc3FlX3Rlc3RfZXJyb3JfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfUkVBRDBfX3NxZV90ZXN0X2Vycm9yX19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9SRUFEMF9fc3FlX3Rlc3RfZXJyb3JfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9JUlFfUkVBRDBfX2NhcnJpZXJfbG9zc19fQklUTlIgMjgKKyNkZWZpbmUgUl9JUlFfUkVBRDBfX2NhcnJpZXJfbG9zc19fV0lEVEggMQorI2RlZmluZSBSX0lSUV9SRUFEMF9fY2Fycmllcl9sb3NzX19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9SRUFEMF9fY2Fycmllcl9sb3NzX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfSVJRX1JFQUQwX19kZWZlcnJlZF9fQklUTlIgMjcKKyNkZWZpbmUgUl9JUlFfUkVBRDBfX2RlZmVycmVkX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX1JFQUQwX19kZWZlcnJlZF9fYWN0aXZlIDEKKyNkZWZpbmUgUl9JUlFfUkVBRDBfX2RlZmVycmVkX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfSVJRX1JFQUQwX19sYXRlX2NvbF9fQklUTlIgMjYKKyNkZWZpbmUgUl9JUlFfUkVBRDBfX2xhdGVfY29sX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX1JFQUQwX19sYXRlX2NvbF9fYWN0aXZlIDEKKyNkZWZpbmUgUl9JUlFfUkVBRDBfX2xhdGVfY29sX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfSVJRX1JFQUQwX19tdWx0aXBsZV9jb2xfX0JJVE5SIDI1CisjZGVmaW5lIFJfSVJRX1JFQUQwX19tdWx0aXBsZV9jb2xfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfUkVBRDBfX211bHRpcGxlX2NvbF9fYWN0aXZlIDEKKyNkZWZpbmUgUl9JUlFfUkVBRDBfX211bHRpcGxlX2NvbF9faW5hY3RpdmUgMAorI2RlZmluZSBSX0lSUV9SRUFEMF9fc2luZ2xlX2NvbF9fQklUTlIgMjQKKyNkZWZpbmUgUl9JUlFfUkVBRDBfX3NpbmdsZV9jb2xfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfUkVBRDBfX3NpbmdsZV9jb2xfX2FjdGl2ZSAxCisjZGVmaW5lIFJfSVJRX1JFQUQwX19zaW5nbGVfY29sX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfSVJRX1JFQUQwX19jb25nZXN0aW9uX19CSVROUiAyMworI2RlZmluZSBSX0lSUV9SRUFEMF9fY29uZ2VzdGlvbl9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9SRUFEMF9fY29uZ2VzdGlvbl9fYWN0aXZlIDEKKyNkZWZpbmUgUl9JUlFfUkVBRDBfX2Nvbmdlc3Rpb25fX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9JUlFfUkVBRDBfX292ZXJzaXplX19CSVROUiAyMgorI2RlZmluZSBSX0lSUV9SRUFEMF9fb3ZlcnNpemVfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfUkVBRDBfX292ZXJzaXplX19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9SRUFEMF9fb3ZlcnNpemVfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9JUlFfUkVBRDBfX2FsaWdubWVudF9lcnJvcl9fQklUTlIgMjEKKyNkZWZpbmUgUl9JUlFfUkVBRDBfX2FsaWdubWVudF9lcnJvcl9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9SRUFEMF9fYWxpZ25tZW50X2Vycm9yX19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9SRUFEMF9fYWxpZ25tZW50X2Vycm9yX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfSVJRX1JFQUQwX19jcmNfZXJyb3JfX0JJVE5SIDIwCisjZGVmaW5lIFJfSVJRX1JFQUQwX19jcmNfZXJyb3JfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfUkVBRDBfX2NyY19lcnJvcl9fYWN0aXZlIDEKKyNkZWZpbmUgUl9JUlFfUkVBRDBfX2NyY19lcnJvcl9faW5hY3RpdmUgMAorI2RlZmluZSBSX0lSUV9SRUFEMF9fb3ZlcnJ1bl9fQklUTlIgMTkKKyNkZWZpbmUgUl9JUlFfUkVBRDBfX292ZXJydW5fX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfUkVBRDBfX292ZXJydW5fX2FjdGl2ZSAxCisjZGVmaW5lIFJfSVJRX1JFQUQwX19vdmVycnVuX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfSVJRX1JFQUQwX191bmRlcnJ1bl9fQklUTlIgMTgKKyNkZWZpbmUgUl9JUlFfUkVBRDBfX3VuZGVycnVuX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX1JFQUQwX191bmRlcnJ1bl9fYWN0aXZlIDEKKyNkZWZpbmUgUl9JUlFfUkVBRDBfX3VuZGVycnVuX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfSVJRX1JFQUQwX19leGNlc3NpdmVfY29sX19CSVROUiAxNworI2RlZmluZSBSX0lSUV9SRUFEMF9fZXhjZXNzaXZlX2NvbF9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9SRUFEMF9fZXhjZXNzaXZlX2NvbF9fYWN0aXZlIDEKKyNkZWZpbmUgUl9JUlFfUkVBRDBfX2V4Y2Vzc2l2ZV9jb2xfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9JUlFfUkVBRDBfX21kaW9fX0JJVE5SIDE2CisjZGVmaW5lIFJfSVJRX1JFQUQwX19tZGlvX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX1JFQUQwX19tZGlvX19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9SRUFEMF9fbWRpb19faW5hY3RpdmUgMAorI2RlZmluZSBSX0lSUV9SRUFEMF9fYXRhX2RycTNfX0JJVE5SIDE1CisjZGVmaW5lIFJfSVJRX1JFQUQwX19hdGFfZHJxM19fV0lEVEggMQorI2RlZmluZSBSX0lSUV9SRUFEMF9fYXRhX2RycTNfX2FjdGl2ZSAxCisjZGVmaW5lIFJfSVJRX1JFQUQwX19hdGFfZHJxM19faW5hY3RpdmUgMAorI2RlZmluZSBSX0lSUV9SRUFEMF9fYXRhX2RycTJfX0JJVE5SIDE0CisjZGVmaW5lIFJfSVJRX1JFQUQwX19hdGFfZHJxMl9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9SRUFEMF9fYXRhX2RycTJfX2FjdGl2ZSAxCisjZGVmaW5lIFJfSVJRX1JFQUQwX19hdGFfZHJxMl9faW5hY3RpdmUgMAorI2RlZmluZSBSX0lSUV9SRUFEMF9fYXRhX2RycTFfX0JJVE5SIDEzCisjZGVmaW5lIFJfSVJRX1JFQUQwX19hdGFfZHJxMV9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9SRUFEMF9fYXRhX2RycTFfX2FjdGl2ZSAxCisjZGVmaW5lIFJfSVJRX1JFQUQwX19hdGFfZHJxMV9faW5hY3RpdmUgMAorI2RlZmluZSBSX0lSUV9SRUFEMF9fYXRhX2RycTBfX0JJVE5SIDEyCisjZGVmaW5lIFJfSVJRX1JFQUQwX19hdGFfZHJxMF9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9SRUFEMF9fYXRhX2RycTBfX2FjdGl2ZSAxCisjZGVmaW5lIFJfSVJRX1JFQUQwX19hdGFfZHJxMF9faW5hY3RpdmUgMAorI2RlZmluZSBSX0lSUV9SRUFEMF9fcGFyMF9lY3BfY21kX19CSVROUiAxMQorI2RlZmluZSBSX0lSUV9SRUFEMF9fcGFyMF9lY3BfY21kX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX1JFQUQwX19wYXIwX2VjcF9jbWRfX2FjdGl2ZSAxCisjZGVmaW5lIFJfSVJRX1JFQUQwX19wYXIwX2VjcF9jbWRfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9JUlFfUkVBRDBfX2F0YV9pcnEzX19CSVROUiAxMQorI2RlZmluZSBSX0lSUV9SRUFEMF9fYXRhX2lycTNfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfUkVBRDBfX2F0YV9pcnEzX19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9SRUFEMF9fYXRhX2lycTNfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9JUlFfUkVBRDBfX3BhcjBfcGVyaV9fQklUTlIgMTAKKyNkZWZpbmUgUl9JUlFfUkVBRDBfX3BhcjBfcGVyaV9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9SRUFEMF9fcGFyMF9wZXJpX19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9SRUFEMF9fcGFyMF9wZXJpX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfSVJRX1JFQUQwX19hdGFfaXJxMl9fQklUTlIgMTAKKyNkZWZpbmUgUl9JUlFfUkVBRDBfX2F0YV9pcnEyX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX1JFQUQwX19hdGFfaXJxMl9fYWN0aXZlIDEKKyNkZWZpbmUgUl9JUlFfUkVBRDBfX2F0YV9pcnEyX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfSVJRX1JFQUQwX19wYXIwX2RhdGFfX0JJVE5SIDkKKyNkZWZpbmUgUl9JUlFfUkVBRDBfX3BhcjBfZGF0YV9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9SRUFEMF9fcGFyMF9kYXRhX19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9SRUFEMF9fcGFyMF9kYXRhX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfSVJRX1JFQUQwX19hdGFfaXJxMV9fQklUTlIgOQorI2RlZmluZSBSX0lSUV9SRUFEMF9fYXRhX2lycTFfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfUkVBRDBfX2F0YV9pcnExX19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9SRUFEMF9fYXRhX2lycTFfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9JUlFfUkVBRDBfX3BhcjBfcmVhZHlfX0JJVE5SIDgKKyNkZWZpbmUgUl9JUlFfUkVBRDBfX3BhcjBfcmVhZHlfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfUkVBRDBfX3BhcjBfcmVhZHlfX2FjdGl2ZSAxCisjZGVmaW5lIFJfSVJRX1JFQUQwX19wYXIwX3JlYWR5X19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfSVJRX1JFQUQwX19hdGFfaXJxMF9fQklUTlIgOAorI2RlZmluZSBSX0lSUV9SRUFEMF9fYXRhX2lycTBfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfUkVBRDBfX2F0YV9pcnEwX19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9SRUFEMF9fYXRhX2lycTBfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9JUlFfUkVBRDBfX21pb19fQklUTlIgOAorI2RlZmluZSBSX0lSUV9SRUFEMF9fbWlvX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX1JFQUQwX19taW9fX2FjdGl2ZSAxCisjZGVmaW5lIFJfSVJRX1JFQUQwX19taW9fX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9JUlFfUkVBRDBfX3Njc2kwX19CSVROUiA4CisjZGVmaW5lIFJfSVJRX1JFQUQwX19zY3NpMF9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9SRUFEMF9fc2NzaTBfX2FjdGl2ZSAxCisjZGVmaW5lIFJfSVJRX1JFQUQwX19zY3NpMF9faW5hY3RpdmUgMAorI2RlZmluZSBSX0lSUV9SRUFEMF9fYXRhX2RtYWVuZF9fQklUTlIgNworI2RlZmluZSBSX0lSUV9SRUFEMF9fYXRhX2RtYWVuZF9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9SRUFEMF9fYXRhX2RtYWVuZF9fYWN0aXZlIDEKKyNkZWZpbmUgUl9JUlFfUkVBRDBfX2F0YV9kbWFlbmRfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9JUlFfUkVBRDBfX2lycV9leHRfdmVjdG9yX25yX19CSVROUiA1CisjZGVmaW5lIFJfSVJRX1JFQUQwX19pcnFfZXh0X3ZlY3Rvcl9ucl9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9SRUFEMF9faXJxX2V4dF92ZWN0b3JfbnJfX2FjdGl2ZSAxCisjZGVmaW5lIFJfSVJRX1JFQUQwX19pcnFfZXh0X3ZlY3Rvcl9ucl9faW5hY3RpdmUgMAorI2RlZmluZSBSX0lSUV9SRUFEMF9faXJxX2ludF92ZWN0b3JfbnJfX0JJVE5SIDQKKyNkZWZpbmUgUl9JUlFfUkVBRDBfX2lycV9pbnRfdmVjdG9yX25yX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX1JFQUQwX19pcnFfaW50X3ZlY3Rvcl9ucl9fYWN0aXZlIDEKKyNkZWZpbmUgUl9JUlFfUkVBRDBfX2lycV9pbnRfdmVjdG9yX25yX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfSVJRX1JFQUQwX19leHRfZG1hMV9fQklUTlIgMworI2RlZmluZSBSX0lSUV9SRUFEMF9fZXh0X2RtYTFfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfUkVBRDBfX2V4dF9kbWExX19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9SRUFEMF9fZXh0X2RtYTFfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9JUlFfUkVBRDBfX2V4dF9kbWEwX19CSVROUiAyCisjZGVmaW5lIFJfSVJRX1JFQUQwX19leHRfZG1hMF9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9SRUFEMF9fZXh0X2RtYTBfX2FjdGl2ZSAxCisjZGVmaW5lIFJfSVJRX1JFQUQwX19leHRfZG1hMF9faW5hY3RpdmUgMAorI2RlZmluZSBSX0lSUV9SRUFEMF9fdGltZXIxX19CSVROUiAxCisjZGVmaW5lIFJfSVJRX1JFQUQwX190aW1lcjFfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfUkVBRDBfX3RpbWVyMV9fYWN0aXZlIDEKKyNkZWZpbmUgUl9JUlFfUkVBRDBfX3RpbWVyMV9faW5hY3RpdmUgMAorI2RlZmluZSBSX0lSUV9SRUFEMF9fdGltZXIwX19CSVROUiAwCisjZGVmaW5lIFJfSVJRX1JFQUQwX190aW1lcjBfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfUkVBRDBfX3RpbWVyMF9fYWN0aXZlIDEKKyNkZWZpbmUgUl9JUlFfUkVBRDBfX3RpbWVyMF9faW5hY3RpdmUgMAorCisjZGVmaW5lIFJfSVJRX01BU0swX1NFVCAoSU9fVFlQRUNBU1RfVURXT1JEIDB4YjAwMDAwYzQpCisjZGVmaW5lIFJfSVJRX01BU0swX1NFVF9fbm1pX3Bpbl9fQklUTlIgMzEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfU0VUX19ubWlfcGluX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0swX1NFVF9fbm1pX3Bpbl9fc2V0IDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfU0VUX19ubWlfcGluX19ub3AgMAorI2RlZmluZSBSX0lSUV9NQVNLMF9TRVRfX3dhdGNoZG9nX25taV9fQklUTlIgMzAKKyNkZWZpbmUgUl9JUlFfTUFTSzBfU0VUX193YXRjaGRvZ19ubWlfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfU0VUX193YXRjaGRvZ19ubWlfX3NldCAxCisjZGVmaW5lIFJfSVJRX01BU0swX1NFVF9fd2F0Y2hkb2dfbm1pX19ub3AgMAorI2RlZmluZSBSX0lSUV9NQVNLMF9TRVRfX3NxZV90ZXN0X2Vycm9yX19CSVROUiAyOQorI2RlZmluZSBSX0lSUV9NQVNLMF9TRVRfX3NxZV90ZXN0X2Vycm9yX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0swX1NFVF9fc3FlX3Rlc3RfZXJyb3JfX3NldCAxCisjZGVmaW5lIFJfSVJRX01BU0swX1NFVF9fc3FlX3Rlc3RfZXJyb3JfX25vcCAwCisjZGVmaW5lIFJfSVJRX01BU0swX1NFVF9fY2Fycmllcl9sb3NzX19CSVROUiAyOAorI2RlZmluZSBSX0lSUV9NQVNLMF9TRVRfX2NhcnJpZXJfbG9zc19fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMF9TRVRfX2NhcnJpZXJfbG9zc19fc2V0IDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfU0VUX19jYXJyaWVyX2xvc3NfX25vcCAwCisjZGVmaW5lIFJfSVJRX01BU0swX1NFVF9fZGVmZXJyZWRfX0JJVE5SIDI3CisjZGVmaW5lIFJfSVJRX01BU0swX1NFVF9fZGVmZXJyZWRfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfU0VUX19kZWZlcnJlZF9fc2V0IDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfU0VUX19kZWZlcnJlZF9fbm9wIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzBfU0VUX19sYXRlX2NvbF9fQklUTlIgMjYKKyNkZWZpbmUgUl9JUlFfTUFTSzBfU0VUX19sYXRlX2NvbF9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMF9TRVRfX2xhdGVfY29sX19zZXQgMQorI2RlZmluZSBSX0lSUV9NQVNLMF9TRVRfX2xhdGVfY29sX19ub3AgMAorI2RlZmluZSBSX0lSUV9NQVNLMF9TRVRfX211bHRpcGxlX2NvbF9fQklUTlIgMjUKKyNkZWZpbmUgUl9JUlFfTUFTSzBfU0VUX19tdWx0aXBsZV9jb2xfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfU0VUX19tdWx0aXBsZV9jb2xfX3NldCAxCisjZGVmaW5lIFJfSVJRX01BU0swX1NFVF9fbXVsdGlwbGVfY29sX19ub3AgMAorI2RlZmluZSBSX0lSUV9NQVNLMF9TRVRfX3NpbmdsZV9jb2xfX0JJVE5SIDI0CisjZGVmaW5lIFJfSVJRX01BU0swX1NFVF9fc2luZ2xlX2NvbF9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMF9TRVRfX3NpbmdsZV9jb2xfX3NldCAxCisjZGVmaW5lIFJfSVJRX01BU0swX1NFVF9fc2luZ2xlX2NvbF9fbm9wIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzBfU0VUX19jb25nZXN0aW9uX19CSVROUiAyMworI2RlZmluZSBSX0lSUV9NQVNLMF9TRVRfX2Nvbmdlc3Rpb25fX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfU0VUX19jb25nZXN0aW9uX19zZXQgMQorI2RlZmluZSBSX0lSUV9NQVNLMF9TRVRfX2Nvbmdlc3Rpb25fX25vcCAwCisjZGVmaW5lIFJfSVJRX01BU0swX1NFVF9fb3ZlcnNpemVfX0JJVE5SIDIyCisjZGVmaW5lIFJfSVJRX01BU0swX1NFVF9fb3ZlcnNpemVfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfU0VUX19vdmVyc2l6ZV9fc2V0IDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfU0VUX19vdmVyc2l6ZV9fbm9wIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzBfU0VUX19hbGlnbm1lbnRfZXJyb3JfX0JJVE5SIDIxCisjZGVmaW5lIFJfSVJRX01BU0swX1NFVF9fYWxpZ25tZW50X2Vycm9yX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0swX1NFVF9fYWxpZ25tZW50X2Vycm9yX19zZXQgMQorI2RlZmluZSBSX0lSUV9NQVNLMF9TRVRfX2FsaWdubWVudF9lcnJvcl9fbm9wIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzBfU0VUX19jcmNfZXJyb3JfX0JJVE5SIDIwCisjZGVmaW5lIFJfSVJRX01BU0swX1NFVF9fY3JjX2Vycm9yX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0swX1NFVF9fY3JjX2Vycm9yX19zZXQgMQorI2RlZmluZSBSX0lSUV9NQVNLMF9TRVRfX2NyY19lcnJvcl9fbm9wIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzBfU0VUX19vdmVycnVuX19CSVROUiAxOQorI2RlZmluZSBSX0lSUV9NQVNLMF9TRVRfX292ZXJydW5fX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfU0VUX19vdmVycnVuX19zZXQgMQorI2RlZmluZSBSX0lSUV9NQVNLMF9TRVRfX292ZXJydW5fX25vcCAwCisjZGVmaW5lIFJfSVJRX01BU0swX1NFVF9fdW5kZXJydW5fX0JJVE5SIDE4CisjZGVmaW5lIFJfSVJRX01BU0swX1NFVF9fdW5kZXJydW5fX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfU0VUX191bmRlcnJ1bl9fc2V0IDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfU0VUX191bmRlcnJ1bl9fbm9wIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzBfU0VUX19leGNlc3NpdmVfY29sX19CSVROUiAxNworI2RlZmluZSBSX0lSUV9NQVNLMF9TRVRfX2V4Y2Vzc2l2ZV9jb2xfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfU0VUX19leGNlc3NpdmVfY29sX19zZXQgMQorI2RlZmluZSBSX0lSUV9NQVNLMF9TRVRfX2V4Y2Vzc2l2ZV9jb2xfX25vcCAwCisjZGVmaW5lIFJfSVJRX01BU0swX1NFVF9fbWRpb19fQklUTlIgMTYKKyNkZWZpbmUgUl9JUlFfTUFTSzBfU0VUX19tZGlvX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0swX1NFVF9fbWRpb19fc2V0IDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfU0VUX19tZGlvX19ub3AgMAorI2RlZmluZSBSX0lSUV9NQVNLMF9TRVRfX2F0YV9kcnEzX19CSVROUiAxNQorI2RlZmluZSBSX0lSUV9NQVNLMF9TRVRfX2F0YV9kcnEzX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0swX1NFVF9fYXRhX2RycTNfX3NldCAxCisjZGVmaW5lIFJfSVJRX01BU0swX1NFVF9fYXRhX2RycTNfX25vcCAwCisjZGVmaW5lIFJfSVJRX01BU0swX1NFVF9fYXRhX2RycTJfX0JJVE5SIDE0CisjZGVmaW5lIFJfSVJRX01BU0swX1NFVF9fYXRhX2RycTJfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfU0VUX19hdGFfZHJxMl9fc2V0IDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfU0VUX19hdGFfZHJxMl9fbm9wIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzBfU0VUX19hdGFfZHJxMV9fQklUTlIgMTMKKyNkZWZpbmUgUl9JUlFfTUFTSzBfU0VUX19hdGFfZHJxMV9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMF9TRVRfX2F0YV9kcnExX19zZXQgMQorI2RlZmluZSBSX0lSUV9NQVNLMF9TRVRfX2F0YV9kcnExX19ub3AgMAorI2RlZmluZSBSX0lSUV9NQVNLMF9TRVRfX2F0YV9kcnEwX19CSVROUiAxMgorI2RlZmluZSBSX0lSUV9NQVNLMF9TRVRfX2F0YV9kcnEwX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0swX1NFVF9fYXRhX2RycTBfX3NldCAxCisjZGVmaW5lIFJfSVJRX01BU0swX1NFVF9fYXRhX2RycTBfX25vcCAwCisjZGVmaW5lIFJfSVJRX01BU0swX1NFVF9fcGFyMF9lY3BfY21kX19CSVROUiAxMQorI2RlZmluZSBSX0lSUV9NQVNLMF9TRVRfX3BhcjBfZWNwX2NtZF9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMF9TRVRfX3BhcjBfZWNwX2NtZF9fc2V0IDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfU0VUX19wYXIwX2VjcF9jbWRfX25vcCAwCisjZGVmaW5lIFJfSVJRX01BU0swX1NFVF9fYXRhX2lycTNfX0JJVE5SIDExCisjZGVmaW5lIFJfSVJRX01BU0swX1NFVF9fYXRhX2lycTNfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfU0VUX19hdGFfaXJxM19fc2V0IDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfU0VUX19hdGFfaXJxM19fbm9wIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzBfU0VUX19wYXIwX3BlcmlfX0JJVE5SIDEwCisjZGVmaW5lIFJfSVJRX01BU0swX1NFVF9fcGFyMF9wZXJpX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0swX1NFVF9fcGFyMF9wZXJpX19zZXQgMQorI2RlZmluZSBSX0lSUV9NQVNLMF9TRVRfX3BhcjBfcGVyaV9fbm9wIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzBfU0VUX19hdGFfaXJxMl9fQklUTlIgMTAKKyNkZWZpbmUgUl9JUlFfTUFTSzBfU0VUX19hdGFfaXJxMl9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMF9TRVRfX2F0YV9pcnEyX19zZXQgMQorI2RlZmluZSBSX0lSUV9NQVNLMF9TRVRfX2F0YV9pcnEyX19ub3AgMAorI2RlZmluZSBSX0lSUV9NQVNLMF9TRVRfX3BhcjBfZGF0YV9fQklUTlIgOQorI2RlZmluZSBSX0lSUV9NQVNLMF9TRVRfX3BhcjBfZGF0YV9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMF9TRVRfX3BhcjBfZGF0YV9fc2V0IDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfU0VUX19wYXIwX2RhdGFfX25vcCAwCisjZGVmaW5lIFJfSVJRX01BU0swX1NFVF9fYXRhX2lycTFfX0JJVE5SIDkKKyNkZWZpbmUgUl9JUlFfTUFTSzBfU0VUX19hdGFfaXJxMV9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMF9TRVRfX2F0YV9pcnExX19zZXQgMQorI2RlZmluZSBSX0lSUV9NQVNLMF9TRVRfX2F0YV9pcnExX19ub3AgMAorI2RlZmluZSBSX0lSUV9NQVNLMF9TRVRfX3BhcjBfcmVhZHlfX0JJVE5SIDgKKyNkZWZpbmUgUl9JUlFfTUFTSzBfU0VUX19wYXIwX3JlYWR5X19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0swX1NFVF9fcGFyMF9yZWFkeV9fc2V0IDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfU0VUX19wYXIwX3JlYWR5X19ub3AgMAorI2RlZmluZSBSX0lSUV9NQVNLMF9TRVRfX2F0YV9pcnEwX19CSVROUiA4CisjZGVmaW5lIFJfSVJRX01BU0swX1NFVF9fYXRhX2lycTBfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfU0VUX19hdGFfaXJxMF9fc2V0IDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfU0VUX19hdGFfaXJxMF9fbm9wIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzBfU0VUX19taW9fX0JJVE5SIDgKKyNkZWZpbmUgUl9JUlFfTUFTSzBfU0VUX19taW9fX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfU0VUX19taW9fX3NldCAxCisjZGVmaW5lIFJfSVJRX01BU0swX1NFVF9fbWlvX19ub3AgMAorI2RlZmluZSBSX0lSUV9NQVNLMF9TRVRfX3Njc2kwX19CSVROUiA4CisjZGVmaW5lIFJfSVJRX01BU0swX1NFVF9fc2NzaTBfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfU0VUX19zY3NpMF9fc2V0IDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfU0VUX19zY3NpMF9fbm9wIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzBfU0VUX19hdGFfZG1hZW5kX19CSVROUiA3CisjZGVmaW5lIFJfSVJRX01BU0swX1NFVF9fYXRhX2RtYWVuZF9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMF9TRVRfX2F0YV9kbWFlbmRfX3NldCAxCisjZGVmaW5lIFJfSVJRX01BU0swX1NFVF9fYXRhX2RtYWVuZF9fbm9wIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzBfU0VUX19pcnFfZXh0X3ZlY3Rvcl9ucl9fQklUTlIgNQorI2RlZmluZSBSX0lSUV9NQVNLMF9TRVRfX2lycV9leHRfdmVjdG9yX25yX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0swX1NFVF9faXJxX2V4dF92ZWN0b3JfbnJfX3NldCAxCisjZGVmaW5lIFJfSVJRX01BU0swX1NFVF9faXJxX2V4dF92ZWN0b3JfbnJfX25vcCAwCisjZGVmaW5lIFJfSVJRX01BU0swX1NFVF9faXJxX2ludF92ZWN0b3JfbnJfX0JJVE5SIDQKKyNkZWZpbmUgUl9JUlFfTUFTSzBfU0VUX19pcnFfaW50X3ZlY3Rvcl9ucl9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMF9TRVRfX2lycV9pbnRfdmVjdG9yX25yX19zZXQgMQorI2RlZmluZSBSX0lSUV9NQVNLMF9TRVRfX2lycV9pbnRfdmVjdG9yX25yX19ub3AgMAorI2RlZmluZSBSX0lSUV9NQVNLMF9TRVRfX2V4dF9kbWExX19CSVROUiAzCisjZGVmaW5lIFJfSVJRX01BU0swX1NFVF9fZXh0X2RtYTFfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfU0VUX19leHRfZG1hMV9fc2V0IDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfU0VUX19leHRfZG1hMV9fbm9wIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzBfU0VUX19leHRfZG1hMF9fQklUTlIgMgorI2RlZmluZSBSX0lSUV9NQVNLMF9TRVRfX2V4dF9kbWEwX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0swX1NFVF9fZXh0X2RtYTBfX3NldCAxCisjZGVmaW5lIFJfSVJRX01BU0swX1NFVF9fZXh0X2RtYTBfX25vcCAwCisjZGVmaW5lIFJfSVJRX01BU0swX1NFVF9fdGltZXIxX19CSVROUiAxCisjZGVmaW5lIFJfSVJRX01BU0swX1NFVF9fdGltZXIxX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0swX1NFVF9fdGltZXIxX19zZXQgMQorI2RlZmluZSBSX0lSUV9NQVNLMF9TRVRfX3RpbWVyMV9fbm9wIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzBfU0VUX190aW1lcjBfX0JJVE5SIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzBfU0VUX190aW1lcjBfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzBfU0VUX190aW1lcjBfX3NldCAxCisjZGVmaW5lIFJfSVJRX01BU0swX1NFVF9fdGltZXIwX19ub3AgMAorCisjZGVmaW5lIFJfSVJRX01BU0sxX1JEIChJT19UWVBFQ0FTVF9ST19VRFdPUkQgMHhiMDAwMDBjOCkKKyNkZWZpbmUgUl9JUlFfTUFTSzFfUkRfX3N3X2ludDdfX0JJVE5SIDMxCisjZGVmaW5lIFJfSVJRX01BU0sxX1JEX19zd19pbnQ3X19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0sxX1JEX19zd19pbnQ3X19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9NQVNLMV9SRF9fc3dfaW50N19faW5hY3RpdmUgMAorI2RlZmluZSBSX0lSUV9NQVNLMV9SRF9fc3dfaW50Nl9fQklUTlIgMzAKKyNkZWZpbmUgUl9JUlFfTUFTSzFfUkRfX3N3X2ludDZfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzFfUkRfX3N3X2ludDZfX2FjdGl2ZSAxCisjZGVmaW5lIFJfSVJRX01BU0sxX1JEX19zd19pbnQ2X19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfSVJRX01BU0sxX1JEX19zd19pbnQ1X19CSVROUiAyOQorI2RlZmluZSBSX0lSUV9NQVNLMV9SRF9fc3dfaW50NV9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMV9SRF9fc3dfaW50NV9fYWN0aXZlIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzFfUkRfX3N3X2ludDVfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzFfUkRfX3N3X2ludDRfX0JJVE5SIDI4CisjZGVmaW5lIFJfSVJRX01BU0sxX1JEX19zd19pbnQ0X19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0sxX1JEX19zd19pbnQ0X19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9NQVNLMV9SRF9fc3dfaW50NF9faW5hY3RpdmUgMAorI2RlZmluZSBSX0lSUV9NQVNLMV9SRF9fc3dfaW50M19fQklUTlIgMjcKKyNkZWZpbmUgUl9JUlFfTUFTSzFfUkRfX3N3X2ludDNfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzFfUkRfX3N3X2ludDNfX2FjdGl2ZSAxCisjZGVmaW5lIFJfSVJRX01BU0sxX1JEX19zd19pbnQzX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfSVJRX01BU0sxX1JEX19zd19pbnQyX19CSVROUiAyNgorI2RlZmluZSBSX0lSUV9NQVNLMV9SRF9fc3dfaW50Ml9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMV9SRF9fc3dfaW50Ml9fYWN0aXZlIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzFfUkRfX3N3X2ludDJfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzFfUkRfX3N3X2ludDFfX0JJVE5SIDI1CisjZGVmaW5lIFJfSVJRX01BU0sxX1JEX19zd19pbnQxX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0sxX1JEX19zd19pbnQxX19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9NQVNLMV9SRF9fc3dfaW50MV9faW5hY3RpdmUgMAorI2RlZmluZSBSX0lSUV9NQVNLMV9SRF9fc3dfaW50MF9fQklUTlIgMjQKKyNkZWZpbmUgUl9JUlFfTUFTSzFfUkRfX3N3X2ludDBfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzFfUkRfX3N3X2ludDBfX2FjdGl2ZSAxCisjZGVmaW5lIFJfSVJRX01BU0sxX1JEX19zd19pbnQwX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfSVJRX01BU0sxX1JEX19wYXIxX2VjcF9jbWRfX0JJVE5SIDE5CisjZGVmaW5lIFJfSVJRX01BU0sxX1JEX19wYXIxX2VjcF9jbWRfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzFfUkRfX3BhcjFfZWNwX2NtZF9fYWN0aXZlIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzFfUkRfX3BhcjFfZWNwX2NtZF9faW5hY3RpdmUgMAorI2RlZmluZSBSX0lSUV9NQVNLMV9SRF9fcGFyMV9wZXJpX19CSVROUiAxOAorI2RlZmluZSBSX0lSUV9NQVNLMV9SRF9fcGFyMV9wZXJpX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0sxX1JEX19wYXIxX3BlcmlfX2FjdGl2ZSAxCisjZGVmaW5lIFJfSVJRX01BU0sxX1JEX19wYXIxX3BlcmlfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzFfUkRfX3BhcjFfZGF0YV9fQklUTlIgMTcKKyNkZWZpbmUgUl9JUlFfTUFTSzFfUkRfX3BhcjFfZGF0YV9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMV9SRF9fcGFyMV9kYXRhX19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9NQVNLMV9SRF9fcGFyMV9kYXRhX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfSVJRX01BU0sxX1JEX19wYXIxX3JlYWR5X19CSVROUiAxNgorI2RlZmluZSBSX0lSUV9NQVNLMV9SRF9fcGFyMV9yZWFkeV9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMV9SRF9fcGFyMV9yZWFkeV9fYWN0aXZlIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzFfUkRfX3BhcjFfcmVhZHlfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzFfUkRfX3Njc2kxX19CSVROUiAxNgorI2RlZmluZSBSX0lSUV9NQVNLMV9SRF9fc2NzaTFfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzFfUkRfX3Njc2kxX19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9NQVNLMV9SRF9fc2NzaTFfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzFfUkRfX3NlcjNfcmVhZHlfX0JJVE5SIDE1CisjZGVmaW5lIFJfSVJRX01BU0sxX1JEX19zZXIzX3JlYWR5X19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0sxX1JEX19zZXIzX3JlYWR5X19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9NQVNLMV9SRF9fc2VyM19yZWFkeV9faW5hY3RpdmUgMAorI2RlZmluZSBSX0lSUV9NQVNLMV9SRF9fc2VyM19kYXRhX19CSVROUiAxNAorI2RlZmluZSBSX0lSUV9NQVNLMV9SRF9fc2VyM19kYXRhX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0sxX1JEX19zZXIzX2RhdGFfX2FjdGl2ZSAxCisjZGVmaW5lIFJfSVJRX01BU0sxX1JEX19zZXIzX2RhdGFfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzFfUkRfX3NlcjJfcmVhZHlfX0JJVE5SIDEzCisjZGVmaW5lIFJfSVJRX01BU0sxX1JEX19zZXIyX3JlYWR5X19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0sxX1JEX19zZXIyX3JlYWR5X19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9NQVNLMV9SRF9fc2VyMl9yZWFkeV9faW5hY3RpdmUgMAorI2RlZmluZSBSX0lSUV9NQVNLMV9SRF9fc2VyMl9kYXRhX19CSVROUiAxMgorI2RlZmluZSBSX0lSUV9NQVNLMV9SRF9fc2VyMl9kYXRhX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0sxX1JEX19zZXIyX2RhdGFfX2FjdGl2ZSAxCisjZGVmaW5lIFJfSVJRX01BU0sxX1JEX19zZXIyX2RhdGFfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzFfUkRfX3NlcjFfcmVhZHlfX0JJVE5SIDExCisjZGVmaW5lIFJfSVJRX01BU0sxX1JEX19zZXIxX3JlYWR5X19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0sxX1JEX19zZXIxX3JlYWR5X19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9NQVNLMV9SRF9fc2VyMV9yZWFkeV9faW5hY3RpdmUgMAorI2RlZmluZSBSX0lSUV9NQVNLMV9SRF9fc2VyMV9kYXRhX19CSVROUiAxMAorI2RlZmluZSBSX0lSUV9NQVNLMV9SRF9fc2VyMV9kYXRhX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0sxX1JEX19zZXIxX2RhdGFfX2FjdGl2ZSAxCisjZGVmaW5lIFJfSVJRX01BU0sxX1JEX19zZXIxX2RhdGFfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzFfUkRfX3NlcjBfcmVhZHlfX0JJVE5SIDkKKyNkZWZpbmUgUl9JUlFfTUFTSzFfUkRfX3NlcjBfcmVhZHlfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzFfUkRfX3NlcjBfcmVhZHlfX2FjdGl2ZSAxCisjZGVmaW5lIFJfSVJRX01BU0sxX1JEX19zZXIwX3JlYWR5X19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfSVJRX01BU0sxX1JEX19zZXIwX2RhdGFfX0JJVE5SIDgKKyNkZWZpbmUgUl9JUlFfTUFTSzFfUkRfX3NlcjBfZGF0YV9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMV9SRF9fc2VyMF9kYXRhX19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9NQVNLMV9SRF9fc2VyMF9kYXRhX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfSVJRX01BU0sxX1JEX19wYTdfX0JJVE5SIDcKKyNkZWZpbmUgUl9JUlFfTUFTSzFfUkRfX3BhN19fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMV9SRF9fcGE3X19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9NQVNLMV9SRF9fcGE3X19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfSVJRX01BU0sxX1JEX19wYTZfX0JJVE5SIDYKKyNkZWZpbmUgUl9JUlFfTUFTSzFfUkRfX3BhNl9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMV9SRF9fcGE2X19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9NQVNLMV9SRF9fcGE2X19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfSVJRX01BU0sxX1JEX19wYTVfX0JJVE5SIDUKKyNkZWZpbmUgUl9JUlFfTUFTSzFfUkRfX3BhNV9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMV9SRF9fcGE1X19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9NQVNLMV9SRF9fcGE1X19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfSVJRX01BU0sxX1JEX19wYTRfX0JJVE5SIDQKKyNkZWZpbmUgUl9JUlFfTUFTSzFfUkRfX3BhNF9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMV9SRF9fcGE0X19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9NQVNLMV9SRF9fcGE0X19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfSVJRX01BU0sxX1JEX19wYTNfX0JJVE5SIDMKKyNkZWZpbmUgUl9JUlFfTUFTSzFfUkRfX3BhM19fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMV9SRF9fcGEzX19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9NQVNLMV9SRF9fcGEzX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfSVJRX01BU0sxX1JEX19wYTJfX0JJVE5SIDIKKyNkZWZpbmUgUl9JUlFfTUFTSzFfUkRfX3BhMl9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMV9SRF9fcGEyX19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9NQVNLMV9SRF9fcGEyX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfSVJRX01BU0sxX1JEX19wYTFfX0JJVE5SIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzFfUkRfX3BhMV9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMV9SRF9fcGExX19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9NQVNLMV9SRF9fcGExX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfSVJRX01BU0sxX1JEX19wYTBfX0JJVE5SIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzFfUkRfX3BhMF9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMV9SRF9fcGEwX19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9NQVNLMV9SRF9fcGEwX19pbmFjdGl2ZSAwCisKKyNkZWZpbmUgUl9JUlFfTUFTSzFfQ0xSIChJT19UWVBFQ0FTVF9VRFdPUkQgMHhiMDAwMDBjOCkKKyNkZWZpbmUgUl9JUlFfTUFTSzFfQ0xSX19zd19pbnQ3X19CSVROUiAzMQorI2RlZmluZSBSX0lSUV9NQVNLMV9DTFJfX3N3X2ludDdfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzFfQ0xSX19zd19pbnQ3X19jbHIgMQorI2RlZmluZSBSX0lSUV9NQVNLMV9DTFJfX3N3X2ludDdfX25vcCAwCisjZGVmaW5lIFJfSVJRX01BU0sxX0NMUl9fc3dfaW50Nl9fQklUTlIgMzAKKyNkZWZpbmUgUl9JUlFfTUFTSzFfQ0xSX19zd19pbnQ2X19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0sxX0NMUl9fc3dfaW50Nl9fY2xyIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzFfQ0xSX19zd19pbnQ2X19ub3AgMAorI2RlZmluZSBSX0lSUV9NQVNLMV9DTFJfX3N3X2ludDVfX0JJVE5SIDI5CisjZGVmaW5lIFJfSVJRX01BU0sxX0NMUl9fc3dfaW50NV9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMV9DTFJfX3N3X2ludDVfX2NsciAxCisjZGVmaW5lIFJfSVJRX01BU0sxX0NMUl9fc3dfaW50NV9fbm9wIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzFfQ0xSX19zd19pbnQ0X19CSVROUiAyOAorI2RlZmluZSBSX0lSUV9NQVNLMV9DTFJfX3N3X2ludDRfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzFfQ0xSX19zd19pbnQ0X19jbHIgMQorI2RlZmluZSBSX0lSUV9NQVNLMV9DTFJfX3N3X2ludDRfX25vcCAwCisjZGVmaW5lIFJfSVJRX01BU0sxX0NMUl9fc3dfaW50M19fQklUTlIgMjcKKyNkZWZpbmUgUl9JUlFfTUFTSzFfQ0xSX19zd19pbnQzX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0sxX0NMUl9fc3dfaW50M19fY2xyIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzFfQ0xSX19zd19pbnQzX19ub3AgMAorI2RlZmluZSBSX0lSUV9NQVNLMV9DTFJfX3N3X2ludDJfX0JJVE5SIDI2CisjZGVmaW5lIFJfSVJRX01BU0sxX0NMUl9fc3dfaW50Ml9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMV9DTFJfX3N3X2ludDJfX2NsciAxCisjZGVmaW5lIFJfSVJRX01BU0sxX0NMUl9fc3dfaW50Ml9fbm9wIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzFfQ0xSX19zd19pbnQxX19CSVROUiAyNQorI2RlZmluZSBSX0lSUV9NQVNLMV9DTFJfX3N3X2ludDFfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzFfQ0xSX19zd19pbnQxX19jbHIgMQorI2RlZmluZSBSX0lSUV9NQVNLMV9DTFJfX3N3X2ludDFfX25vcCAwCisjZGVmaW5lIFJfSVJRX01BU0sxX0NMUl9fc3dfaW50MF9fQklUTlIgMjQKKyNkZWZpbmUgUl9JUlFfTUFTSzFfQ0xSX19zd19pbnQwX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0sxX0NMUl9fc3dfaW50MF9fY2xyIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzFfQ0xSX19zd19pbnQwX19ub3AgMAorI2RlZmluZSBSX0lSUV9NQVNLMV9DTFJfX3BhcjFfZWNwX2NtZF9fQklUTlIgMTkKKyNkZWZpbmUgUl9JUlFfTUFTSzFfQ0xSX19wYXIxX2VjcF9jbWRfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzFfQ0xSX19wYXIxX2VjcF9jbWRfX2NsciAxCisjZGVmaW5lIFJfSVJRX01BU0sxX0NMUl9fcGFyMV9lY3BfY21kX19ub3AgMAorI2RlZmluZSBSX0lSUV9NQVNLMV9DTFJfX3BhcjFfcGVyaV9fQklUTlIgMTgKKyNkZWZpbmUgUl9JUlFfTUFTSzFfQ0xSX19wYXIxX3BlcmlfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzFfQ0xSX19wYXIxX3BlcmlfX2NsciAxCisjZGVmaW5lIFJfSVJRX01BU0sxX0NMUl9fcGFyMV9wZXJpX19ub3AgMAorI2RlZmluZSBSX0lSUV9NQVNLMV9DTFJfX3BhcjFfZGF0YV9fQklUTlIgMTcKKyNkZWZpbmUgUl9JUlFfTUFTSzFfQ0xSX19wYXIxX2RhdGFfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzFfQ0xSX19wYXIxX2RhdGFfX2NsciAxCisjZGVmaW5lIFJfSVJRX01BU0sxX0NMUl9fcGFyMV9kYXRhX19ub3AgMAorI2RlZmluZSBSX0lSUV9NQVNLMV9DTFJfX3BhcjFfcmVhZHlfX0JJVE5SIDE2CisjZGVmaW5lIFJfSVJRX01BU0sxX0NMUl9fcGFyMV9yZWFkeV9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMV9DTFJfX3BhcjFfcmVhZHlfX2NsciAxCisjZGVmaW5lIFJfSVJRX01BU0sxX0NMUl9fcGFyMV9yZWFkeV9fbm9wIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzFfQ0xSX19zY3NpMV9fQklUTlIgMTYKKyNkZWZpbmUgUl9JUlFfTUFTSzFfQ0xSX19zY3NpMV9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMV9DTFJfX3Njc2kxX19jbHIgMQorI2RlZmluZSBSX0lSUV9NQVNLMV9DTFJfX3Njc2kxX19ub3AgMAorI2RlZmluZSBSX0lSUV9NQVNLMV9DTFJfX3NlcjNfcmVhZHlfX0JJVE5SIDE1CisjZGVmaW5lIFJfSVJRX01BU0sxX0NMUl9fc2VyM19yZWFkeV9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMV9DTFJfX3NlcjNfcmVhZHlfX2NsciAxCisjZGVmaW5lIFJfSVJRX01BU0sxX0NMUl9fc2VyM19yZWFkeV9fbm9wIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzFfQ0xSX19zZXIzX2RhdGFfX0JJVE5SIDE0CisjZGVmaW5lIFJfSVJRX01BU0sxX0NMUl9fc2VyM19kYXRhX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0sxX0NMUl9fc2VyM19kYXRhX19jbHIgMQorI2RlZmluZSBSX0lSUV9NQVNLMV9DTFJfX3NlcjNfZGF0YV9fbm9wIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzFfQ0xSX19zZXIyX3JlYWR5X19CSVROUiAxMworI2RlZmluZSBSX0lSUV9NQVNLMV9DTFJfX3NlcjJfcmVhZHlfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzFfQ0xSX19zZXIyX3JlYWR5X19jbHIgMQorI2RlZmluZSBSX0lSUV9NQVNLMV9DTFJfX3NlcjJfcmVhZHlfX25vcCAwCisjZGVmaW5lIFJfSVJRX01BU0sxX0NMUl9fc2VyMl9kYXRhX19CSVROUiAxMgorI2RlZmluZSBSX0lSUV9NQVNLMV9DTFJfX3NlcjJfZGF0YV9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMV9DTFJfX3NlcjJfZGF0YV9fY2xyIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzFfQ0xSX19zZXIyX2RhdGFfX25vcCAwCisjZGVmaW5lIFJfSVJRX01BU0sxX0NMUl9fc2VyMV9yZWFkeV9fQklUTlIgMTEKKyNkZWZpbmUgUl9JUlFfTUFTSzFfQ0xSX19zZXIxX3JlYWR5X19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0sxX0NMUl9fc2VyMV9yZWFkeV9fY2xyIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzFfQ0xSX19zZXIxX3JlYWR5X19ub3AgMAorI2RlZmluZSBSX0lSUV9NQVNLMV9DTFJfX3NlcjFfZGF0YV9fQklUTlIgMTAKKyNkZWZpbmUgUl9JUlFfTUFTSzFfQ0xSX19zZXIxX2RhdGFfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzFfQ0xSX19zZXIxX2RhdGFfX2NsciAxCisjZGVmaW5lIFJfSVJRX01BU0sxX0NMUl9fc2VyMV9kYXRhX19ub3AgMAorI2RlZmluZSBSX0lSUV9NQVNLMV9DTFJfX3NlcjBfcmVhZHlfX0JJVE5SIDkKKyNkZWZpbmUgUl9JUlFfTUFTSzFfQ0xSX19zZXIwX3JlYWR5X19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0sxX0NMUl9fc2VyMF9yZWFkeV9fY2xyIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzFfQ0xSX19zZXIwX3JlYWR5X19ub3AgMAorI2RlZmluZSBSX0lSUV9NQVNLMV9DTFJfX3NlcjBfZGF0YV9fQklUTlIgOAorI2RlZmluZSBSX0lSUV9NQVNLMV9DTFJfX3NlcjBfZGF0YV9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMV9DTFJfX3NlcjBfZGF0YV9fY2xyIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzFfQ0xSX19zZXIwX2RhdGFfX25vcCAwCisjZGVmaW5lIFJfSVJRX01BU0sxX0NMUl9fcGE3X19CSVROUiA3CisjZGVmaW5lIFJfSVJRX01BU0sxX0NMUl9fcGE3X19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0sxX0NMUl9fcGE3X19jbHIgMQorI2RlZmluZSBSX0lSUV9NQVNLMV9DTFJfX3BhN19fbm9wIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzFfQ0xSX19wYTZfX0JJVE5SIDYKKyNkZWZpbmUgUl9JUlFfTUFTSzFfQ0xSX19wYTZfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzFfQ0xSX19wYTZfX2NsciAxCisjZGVmaW5lIFJfSVJRX01BU0sxX0NMUl9fcGE2X19ub3AgMAorI2RlZmluZSBSX0lSUV9NQVNLMV9DTFJfX3BhNV9fQklUTlIgNQorI2RlZmluZSBSX0lSUV9NQVNLMV9DTFJfX3BhNV9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMV9DTFJfX3BhNV9fY2xyIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzFfQ0xSX19wYTVfX25vcCAwCisjZGVmaW5lIFJfSVJRX01BU0sxX0NMUl9fcGE0X19CSVROUiA0CisjZGVmaW5lIFJfSVJRX01BU0sxX0NMUl9fcGE0X19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0sxX0NMUl9fcGE0X19jbHIgMQorI2RlZmluZSBSX0lSUV9NQVNLMV9DTFJfX3BhNF9fbm9wIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzFfQ0xSX19wYTNfX0JJVE5SIDMKKyNkZWZpbmUgUl9JUlFfTUFTSzFfQ0xSX19wYTNfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzFfQ0xSX19wYTNfX2NsciAxCisjZGVmaW5lIFJfSVJRX01BU0sxX0NMUl9fcGEzX19ub3AgMAorI2RlZmluZSBSX0lSUV9NQVNLMV9DTFJfX3BhMl9fQklUTlIgMgorI2RlZmluZSBSX0lSUV9NQVNLMV9DTFJfX3BhMl9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMV9DTFJfX3BhMl9fY2xyIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzFfQ0xSX19wYTJfX25vcCAwCisjZGVmaW5lIFJfSVJRX01BU0sxX0NMUl9fcGExX19CSVROUiAxCisjZGVmaW5lIFJfSVJRX01BU0sxX0NMUl9fcGExX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0sxX0NMUl9fcGExX19jbHIgMQorI2RlZmluZSBSX0lSUV9NQVNLMV9DTFJfX3BhMV9fbm9wIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzFfQ0xSX19wYTBfX0JJVE5SIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzFfQ0xSX19wYTBfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzFfQ0xSX19wYTBfX2NsciAxCisjZGVmaW5lIFJfSVJRX01BU0sxX0NMUl9fcGEwX19ub3AgMAorCisjZGVmaW5lIFJfSVJRX1JFQUQxIChJT19UWVBFQ0FTVF9ST19VRFdPUkQgMHhiMDAwMDBjYykKKyNkZWZpbmUgUl9JUlFfUkVBRDFfX3N3X2ludDdfX0JJVE5SIDMxCisjZGVmaW5lIFJfSVJRX1JFQUQxX19zd19pbnQ3X19XSURUSCAxCisjZGVmaW5lIFJfSVJRX1JFQUQxX19zd19pbnQ3X19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9SRUFEMV9fc3dfaW50N19faW5hY3RpdmUgMAorI2RlZmluZSBSX0lSUV9SRUFEMV9fc3dfaW50Nl9fQklUTlIgMzAKKyNkZWZpbmUgUl9JUlFfUkVBRDFfX3N3X2ludDZfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfUkVBRDFfX3N3X2ludDZfX2FjdGl2ZSAxCisjZGVmaW5lIFJfSVJRX1JFQUQxX19zd19pbnQ2X19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfSVJRX1JFQUQxX19zd19pbnQ1X19CSVROUiAyOQorI2RlZmluZSBSX0lSUV9SRUFEMV9fc3dfaW50NV9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9SRUFEMV9fc3dfaW50NV9fYWN0aXZlIDEKKyNkZWZpbmUgUl9JUlFfUkVBRDFfX3N3X2ludDVfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9JUlFfUkVBRDFfX3N3X2ludDRfX0JJVE5SIDI4CisjZGVmaW5lIFJfSVJRX1JFQUQxX19zd19pbnQ0X19XSURUSCAxCisjZGVmaW5lIFJfSVJRX1JFQUQxX19zd19pbnQ0X19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9SRUFEMV9fc3dfaW50NF9faW5hY3RpdmUgMAorI2RlZmluZSBSX0lSUV9SRUFEMV9fc3dfaW50M19fQklUTlIgMjcKKyNkZWZpbmUgUl9JUlFfUkVBRDFfX3N3X2ludDNfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfUkVBRDFfX3N3X2ludDNfX2FjdGl2ZSAxCisjZGVmaW5lIFJfSVJRX1JFQUQxX19zd19pbnQzX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfSVJRX1JFQUQxX19zd19pbnQyX19CSVROUiAyNgorI2RlZmluZSBSX0lSUV9SRUFEMV9fc3dfaW50Ml9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9SRUFEMV9fc3dfaW50Ml9fYWN0aXZlIDEKKyNkZWZpbmUgUl9JUlFfUkVBRDFfX3N3X2ludDJfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9JUlFfUkVBRDFfX3N3X2ludDFfX0JJVE5SIDI1CisjZGVmaW5lIFJfSVJRX1JFQUQxX19zd19pbnQxX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX1JFQUQxX19zd19pbnQxX19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9SRUFEMV9fc3dfaW50MV9faW5hY3RpdmUgMAorI2RlZmluZSBSX0lSUV9SRUFEMV9fc3dfaW50MF9fQklUTlIgMjQKKyNkZWZpbmUgUl9JUlFfUkVBRDFfX3N3X2ludDBfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfUkVBRDFfX3N3X2ludDBfX2FjdGl2ZSAxCisjZGVmaW5lIFJfSVJRX1JFQUQxX19zd19pbnQwX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfSVJRX1JFQUQxX19wYXIxX2VjcF9jbWRfX0JJVE5SIDE5CisjZGVmaW5lIFJfSVJRX1JFQUQxX19wYXIxX2VjcF9jbWRfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfUkVBRDFfX3BhcjFfZWNwX2NtZF9fYWN0aXZlIDEKKyNkZWZpbmUgUl9JUlFfUkVBRDFfX3BhcjFfZWNwX2NtZF9faW5hY3RpdmUgMAorI2RlZmluZSBSX0lSUV9SRUFEMV9fcGFyMV9wZXJpX19CSVROUiAxOAorI2RlZmluZSBSX0lSUV9SRUFEMV9fcGFyMV9wZXJpX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX1JFQUQxX19wYXIxX3BlcmlfX2FjdGl2ZSAxCisjZGVmaW5lIFJfSVJRX1JFQUQxX19wYXIxX3BlcmlfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9JUlFfUkVBRDFfX3BhcjFfZGF0YV9fQklUTlIgMTcKKyNkZWZpbmUgUl9JUlFfUkVBRDFfX3BhcjFfZGF0YV9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9SRUFEMV9fcGFyMV9kYXRhX19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9SRUFEMV9fcGFyMV9kYXRhX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfSVJRX1JFQUQxX19wYXIxX3JlYWR5X19CSVROUiAxNgorI2RlZmluZSBSX0lSUV9SRUFEMV9fcGFyMV9yZWFkeV9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9SRUFEMV9fcGFyMV9yZWFkeV9fYWN0aXZlIDEKKyNkZWZpbmUgUl9JUlFfUkVBRDFfX3BhcjFfcmVhZHlfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9JUlFfUkVBRDFfX3Njc2kxX19CSVROUiAxNgorI2RlZmluZSBSX0lSUV9SRUFEMV9fc2NzaTFfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfUkVBRDFfX3Njc2kxX19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9SRUFEMV9fc2NzaTFfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9JUlFfUkVBRDFfX3NlcjNfcmVhZHlfX0JJVE5SIDE1CisjZGVmaW5lIFJfSVJRX1JFQUQxX19zZXIzX3JlYWR5X19XSURUSCAxCisjZGVmaW5lIFJfSVJRX1JFQUQxX19zZXIzX3JlYWR5X19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9SRUFEMV9fc2VyM19yZWFkeV9faW5hY3RpdmUgMAorI2RlZmluZSBSX0lSUV9SRUFEMV9fc2VyM19kYXRhX19CSVROUiAxNAorI2RlZmluZSBSX0lSUV9SRUFEMV9fc2VyM19kYXRhX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX1JFQUQxX19zZXIzX2RhdGFfX2FjdGl2ZSAxCisjZGVmaW5lIFJfSVJRX1JFQUQxX19zZXIzX2RhdGFfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9JUlFfUkVBRDFfX3NlcjJfcmVhZHlfX0JJVE5SIDEzCisjZGVmaW5lIFJfSVJRX1JFQUQxX19zZXIyX3JlYWR5X19XSURUSCAxCisjZGVmaW5lIFJfSVJRX1JFQUQxX19zZXIyX3JlYWR5X19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9SRUFEMV9fc2VyMl9yZWFkeV9faW5hY3RpdmUgMAorI2RlZmluZSBSX0lSUV9SRUFEMV9fc2VyMl9kYXRhX19CSVROUiAxMgorI2RlZmluZSBSX0lSUV9SRUFEMV9fc2VyMl9kYXRhX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX1JFQUQxX19zZXIyX2RhdGFfX2FjdGl2ZSAxCisjZGVmaW5lIFJfSVJRX1JFQUQxX19zZXIyX2RhdGFfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9JUlFfUkVBRDFfX3NlcjFfcmVhZHlfX0JJVE5SIDExCisjZGVmaW5lIFJfSVJRX1JFQUQxX19zZXIxX3JlYWR5X19XSURUSCAxCisjZGVmaW5lIFJfSVJRX1JFQUQxX19zZXIxX3JlYWR5X19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9SRUFEMV9fc2VyMV9yZWFkeV9faW5hY3RpdmUgMAorI2RlZmluZSBSX0lSUV9SRUFEMV9fc2VyMV9kYXRhX19CSVROUiAxMAorI2RlZmluZSBSX0lSUV9SRUFEMV9fc2VyMV9kYXRhX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX1JFQUQxX19zZXIxX2RhdGFfX2FjdGl2ZSAxCisjZGVmaW5lIFJfSVJRX1JFQUQxX19zZXIxX2RhdGFfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9JUlFfUkVBRDFfX3NlcjBfcmVhZHlfX0JJVE5SIDkKKyNkZWZpbmUgUl9JUlFfUkVBRDFfX3NlcjBfcmVhZHlfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfUkVBRDFfX3NlcjBfcmVhZHlfX2FjdGl2ZSAxCisjZGVmaW5lIFJfSVJRX1JFQUQxX19zZXIwX3JlYWR5X19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfSVJRX1JFQUQxX19zZXIwX2RhdGFfX0JJVE5SIDgKKyNkZWZpbmUgUl9JUlFfUkVBRDFfX3NlcjBfZGF0YV9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9SRUFEMV9fc2VyMF9kYXRhX19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9SRUFEMV9fc2VyMF9kYXRhX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfSVJRX1JFQUQxX19wYTdfX0JJVE5SIDcKKyNkZWZpbmUgUl9JUlFfUkVBRDFfX3BhN19fV0lEVEggMQorI2RlZmluZSBSX0lSUV9SRUFEMV9fcGE3X19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9SRUFEMV9fcGE3X19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfSVJRX1JFQUQxX19wYTZfX0JJVE5SIDYKKyNkZWZpbmUgUl9JUlFfUkVBRDFfX3BhNl9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9SRUFEMV9fcGE2X19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9SRUFEMV9fcGE2X19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfSVJRX1JFQUQxX19wYTVfX0JJVE5SIDUKKyNkZWZpbmUgUl9JUlFfUkVBRDFfX3BhNV9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9SRUFEMV9fcGE1X19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9SRUFEMV9fcGE1X19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfSVJRX1JFQUQxX19wYTRfX0JJVE5SIDQKKyNkZWZpbmUgUl9JUlFfUkVBRDFfX3BhNF9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9SRUFEMV9fcGE0X19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9SRUFEMV9fcGE0X19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfSVJRX1JFQUQxX19wYTNfX0JJVE5SIDMKKyNkZWZpbmUgUl9JUlFfUkVBRDFfX3BhM19fV0lEVEggMQorI2RlZmluZSBSX0lSUV9SRUFEMV9fcGEzX19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9SRUFEMV9fcGEzX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfSVJRX1JFQUQxX19wYTJfX0JJVE5SIDIKKyNkZWZpbmUgUl9JUlFfUkVBRDFfX3BhMl9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9SRUFEMV9fcGEyX19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9SRUFEMV9fcGEyX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfSVJRX1JFQUQxX19wYTFfX0JJVE5SIDEKKyNkZWZpbmUgUl9JUlFfUkVBRDFfX3BhMV9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9SRUFEMV9fcGExX19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9SRUFEMV9fcGExX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfSVJRX1JFQUQxX19wYTBfX0JJVE5SIDAKKyNkZWZpbmUgUl9JUlFfUkVBRDFfX3BhMF9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9SRUFEMV9fcGEwX19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9SRUFEMV9fcGEwX19pbmFjdGl2ZSAwCisKKyNkZWZpbmUgUl9JUlFfTUFTSzFfU0VUIChJT19UWVBFQ0FTVF9VRFdPUkQgMHhiMDAwMDBjYykKKyNkZWZpbmUgUl9JUlFfTUFTSzFfU0VUX19zd19pbnQ3X19CSVROUiAzMQorI2RlZmluZSBSX0lSUV9NQVNLMV9TRVRfX3N3X2ludDdfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzFfU0VUX19zd19pbnQ3X19zZXQgMQorI2RlZmluZSBSX0lSUV9NQVNLMV9TRVRfX3N3X2ludDdfX25vcCAwCisjZGVmaW5lIFJfSVJRX01BU0sxX1NFVF9fc3dfaW50Nl9fQklUTlIgMzAKKyNkZWZpbmUgUl9JUlFfTUFTSzFfU0VUX19zd19pbnQ2X19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0sxX1NFVF9fc3dfaW50Nl9fc2V0IDEKKyNkZWZpbmUgUl9JUlFfTUFTSzFfU0VUX19zd19pbnQ2X19ub3AgMAorI2RlZmluZSBSX0lSUV9NQVNLMV9TRVRfX3N3X2ludDVfX0JJVE5SIDI5CisjZGVmaW5lIFJfSVJRX01BU0sxX1NFVF9fc3dfaW50NV9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMV9TRVRfX3N3X2ludDVfX3NldCAxCisjZGVmaW5lIFJfSVJRX01BU0sxX1NFVF9fc3dfaW50NV9fbm9wIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzFfU0VUX19zd19pbnQ0X19CSVROUiAyOAorI2RlZmluZSBSX0lSUV9NQVNLMV9TRVRfX3N3X2ludDRfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzFfU0VUX19zd19pbnQ0X19zZXQgMQorI2RlZmluZSBSX0lSUV9NQVNLMV9TRVRfX3N3X2ludDRfX25vcCAwCisjZGVmaW5lIFJfSVJRX01BU0sxX1NFVF9fc3dfaW50M19fQklUTlIgMjcKKyNkZWZpbmUgUl9JUlFfTUFTSzFfU0VUX19zd19pbnQzX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0sxX1NFVF9fc3dfaW50M19fc2V0IDEKKyNkZWZpbmUgUl9JUlFfTUFTSzFfU0VUX19zd19pbnQzX19ub3AgMAorI2RlZmluZSBSX0lSUV9NQVNLMV9TRVRfX3N3X2ludDJfX0JJVE5SIDI2CisjZGVmaW5lIFJfSVJRX01BU0sxX1NFVF9fc3dfaW50Ml9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMV9TRVRfX3N3X2ludDJfX3NldCAxCisjZGVmaW5lIFJfSVJRX01BU0sxX1NFVF9fc3dfaW50Ml9fbm9wIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzFfU0VUX19zd19pbnQxX19CSVROUiAyNQorI2RlZmluZSBSX0lSUV9NQVNLMV9TRVRfX3N3X2ludDFfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzFfU0VUX19zd19pbnQxX19zZXQgMQorI2RlZmluZSBSX0lSUV9NQVNLMV9TRVRfX3N3X2ludDFfX25vcCAwCisjZGVmaW5lIFJfSVJRX01BU0sxX1NFVF9fc3dfaW50MF9fQklUTlIgMjQKKyNkZWZpbmUgUl9JUlFfTUFTSzFfU0VUX19zd19pbnQwX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0sxX1NFVF9fc3dfaW50MF9fc2V0IDEKKyNkZWZpbmUgUl9JUlFfTUFTSzFfU0VUX19zd19pbnQwX19ub3AgMAorI2RlZmluZSBSX0lSUV9NQVNLMV9TRVRfX3BhcjFfZWNwX2NtZF9fQklUTlIgMTkKKyNkZWZpbmUgUl9JUlFfTUFTSzFfU0VUX19wYXIxX2VjcF9jbWRfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzFfU0VUX19wYXIxX2VjcF9jbWRfX3NldCAxCisjZGVmaW5lIFJfSVJRX01BU0sxX1NFVF9fcGFyMV9lY3BfY21kX19ub3AgMAorI2RlZmluZSBSX0lSUV9NQVNLMV9TRVRfX3BhcjFfcGVyaV9fQklUTlIgMTgKKyNkZWZpbmUgUl9JUlFfTUFTSzFfU0VUX19wYXIxX3BlcmlfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzFfU0VUX19wYXIxX3BlcmlfX3NldCAxCisjZGVmaW5lIFJfSVJRX01BU0sxX1NFVF9fcGFyMV9wZXJpX19ub3AgMAorI2RlZmluZSBSX0lSUV9NQVNLMV9TRVRfX3BhcjFfZGF0YV9fQklUTlIgMTcKKyNkZWZpbmUgUl9JUlFfTUFTSzFfU0VUX19wYXIxX2RhdGFfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzFfU0VUX19wYXIxX2RhdGFfX3NldCAxCisjZGVmaW5lIFJfSVJRX01BU0sxX1NFVF9fcGFyMV9kYXRhX19ub3AgMAorI2RlZmluZSBSX0lSUV9NQVNLMV9TRVRfX3BhcjFfcmVhZHlfX0JJVE5SIDE2CisjZGVmaW5lIFJfSVJRX01BU0sxX1NFVF9fcGFyMV9yZWFkeV9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMV9TRVRfX3BhcjFfcmVhZHlfX3NldCAxCisjZGVmaW5lIFJfSVJRX01BU0sxX1NFVF9fcGFyMV9yZWFkeV9fbm9wIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzFfU0VUX19zY3NpMV9fQklUTlIgMTYKKyNkZWZpbmUgUl9JUlFfTUFTSzFfU0VUX19zY3NpMV9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMV9TRVRfX3Njc2kxX19zZXQgMQorI2RlZmluZSBSX0lSUV9NQVNLMV9TRVRfX3Njc2kxX19ub3AgMAorI2RlZmluZSBSX0lSUV9NQVNLMV9TRVRfX3NlcjNfcmVhZHlfX0JJVE5SIDE1CisjZGVmaW5lIFJfSVJRX01BU0sxX1NFVF9fc2VyM19yZWFkeV9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMV9TRVRfX3NlcjNfcmVhZHlfX3NldCAxCisjZGVmaW5lIFJfSVJRX01BU0sxX1NFVF9fc2VyM19yZWFkeV9fbm9wIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzFfU0VUX19zZXIzX2RhdGFfX0JJVE5SIDE0CisjZGVmaW5lIFJfSVJRX01BU0sxX1NFVF9fc2VyM19kYXRhX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0sxX1NFVF9fc2VyM19kYXRhX19zZXQgMQorI2RlZmluZSBSX0lSUV9NQVNLMV9TRVRfX3NlcjNfZGF0YV9fbm9wIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzFfU0VUX19zZXIyX3JlYWR5X19CSVROUiAxMworI2RlZmluZSBSX0lSUV9NQVNLMV9TRVRfX3NlcjJfcmVhZHlfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzFfU0VUX19zZXIyX3JlYWR5X19zZXQgMQorI2RlZmluZSBSX0lSUV9NQVNLMV9TRVRfX3NlcjJfcmVhZHlfX25vcCAwCisjZGVmaW5lIFJfSVJRX01BU0sxX1NFVF9fc2VyMl9kYXRhX19CSVROUiAxMgorI2RlZmluZSBSX0lSUV9NQVNLMV9TRVRfX3NlcjJfZGF0YV9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMV9TRVRfX3NlcjJfZGF0YV9fc2V0IDEKKyNkZWZpbmUgUl9JUlFfTUFTSzFfU0VUX19zZXIyX2RhdGFfX25vcCAwCisjZGVmaW5lIFJfSVJRX01BU0sxX1NFVF9fc2VyMV9yZWFkeV9fQklUTlIgMTEKKyNkZWZpbmUgUl9JUlFfTUFTSzFfU0VUX19zZXIxX3JlYWR5X19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0sxX1NFVF9fc2VyMV9yZWFkeV9fc2V0IDEKKyNkZWZpbmUgUl9JUlFfTUFTSzFfU0VUX19zZXIxX3JlYWR5X19ub3AgMAorI2RlZmluZSBSX0lSUV9NQVNLMV9TRVRfX3NlcjFfZGF0YV9fQklUTlIgMTAKKyNkZWZpbmUgUl9JUlFfTUFTSzFfU0VUX19zZXIxX2RhdGFfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzFfU0VUX19zZXIxX2RhdGFfX3NldCAxCisjZGVmaW5lIFJfSVJRX01BU0sxX1NFVF9fc2VyMV9kYXRhX19ub3AgMAorI2RlZmluZSBSX0lSUV9NQVNLMV9TRVRfX3NlcjBfcmVhZHlfX0JJVE5SIDkKKyNkZWZpbmUgUl9JUlFfTUFTSzFfU0VUX19zZXIwX3JlYWR5X19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0sxX1NFVF9fc2VyMF9yZWFkeV9fc2V0IDEKKyNkZWZpbmUgUl9JUlFfTUFTSzFfU0VUX19zZXIwX3JlYWR5X19ub3AgMAorI2RlZmluZSBSX0lSUV9NQVNLMV9TRVRfX3NlcjBfZGF0YV9fQklUTlIgOAorI2RlZmluZSBSX0lSUV9NQVNLMV9TRVRfX3NlcjBfZGF0YV9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMV9TRVRfX3NlcjBfZGF0YV9fc2V0IDEKKyNkZWZpbmUgUl9JUlFfTUFTSzFfU0VUX19zZXIwX2RhdGFfX25vcCAwCisjZGVmaW5lIFJfSVJRX01BU0sxX1NFVF9fcGE3X19CSVROUiA3CisjZGVmaW5lIFJfSVJRX01BU0sxX1NFVF9fcGE3X19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0sxX1NFVF9fcGE3X19zZXQgMQorI2RlZmluZSBSX0lSUV9NQVNLMV9TRVRfX3BhN19fbm9wIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzFfU0VUX19wYTZfX0JJVE5SIDYKKyNkZWZpbmUgUl9JUlFfTUFTSzFfU0VUX19wYTZfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzFfU0VUX19wYTZfX3NldCAxCisjZGVmaW5lIFJfSVJRX01BU0sxX1NFVF9fcGE2X19ub3AgMAorI2RlZmluZSBSX0lSUV9NQVNLMV9TRVRfX3BhNV9fQklUTlIgNQorI2RlZmluZSBSX0lSUV9NQVNLMV9TRVRfX3BhNV9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMV9TRVRfX3BhNV9fc2V0IDEKKyNkZWZpbmUgUl9JUlFfTUFTSzFfU0VUX19wYTVfX25vcCAwCisjZGVmaW5lIFJfSVJRX01BU0sxX1NFVF9fcGE0X19CSVROUiA0CisjZGVmaW5lIFJfSVJRX01BU0sxX1NFVF9fcGE0X19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0sxX1NFVF9fcGE0X19zZXQgMQorI2RlZmluZSBSX0lSUV9NQVNLMV9TRVRfX3BhNF9fbm9wIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzFfU0VUX19wYTNfX0JJVE5SIDMKKyNkZWZpbmUgUl9JUlFfTUFTSzFfU0VUX19wYTNfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzFfU0VUX19wYTNfX3NldCAxCisjZGVmaW5lIFJfSVJRX01BU0sxX1NFVF9fcGEzX19ub3AgMAorI2RlZmluZSBSX0lSUV9NQVNLMV9TRVRfX3BhMl9fQklUTlIgMgorI2RlZmluZSBSX0lSUV9NQVNLMV9TRVRfX3BhMl9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMV9TRVRfX3BhMl9fc2V0IDEKKyNkZWZpbmUgUl9JUlFfTUFTSzFfU0VUX19wYTJfX25vcCAwCisjZGVmaW5lIFJfSVJRX01BU0sxX1NFVF9fcGExX19CSVROUiAxCisjZGVmaW5lIFJfSVJRX01BU0sxX1NFVF9fcGExX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0sxX1NFVF9fcGExX19zZXQgMQorI2RlZmluZSBSX0lSUV9NQVNLMV9TRVRfX3BhMV9fbm9wIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzFfU0VUX19wYTBfX0JJVE5SIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzFfU0VUX19wYTBfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzFfU0VUX19wYTBfX3NldCAxCisjZGVmaW5lIFJfSVJRX01BU0sxX1NFVF9fcGEwX19ub3AgMAorCisjZGVmaW5lIFJfSVJRX01BU0syX1JEIChJT19UWVBFQ0FTVF9ST19VRFdPUkQgMHhiMDAwMDBkMCkKKyNkZWZpbmUgUl9JUlFfTUFTSzJfUkRfX2RtYThfc3ViM19kZXNjcl9fQklUTlIgMjMKKyNkZWZpbmUgUl9JUlFfTUFTSzJfUkRfX2RtYThfc3ViM19kZXNjcl9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMl9SRF9fZG1hOF9zdWIzX2Rlc2NyX19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9NQVNLMl9SRF9fZG1hOF9zdWIzX2Rlc2NyX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfSVJRX01BU0syX1JEX19kbWE4X3N1YjJfZGVzY3JfX0JJVE5SIDIyCisjZGVmaW5lIFJfSVJRX01BU0syX1JEX19kbWE4X3N1YjJfZGVzY3JfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzJfUkRfX2RtYThfc3ViMl9kZXNjcl9fYWN0aXZlIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzJfUkRfX2RtYThfc3ViMl9kZXNjcl9faW5hY3RpdmUgMAorI2RlZmluZSBSX0lSUV9NQVNLMl9SRF9fZG1hOF9zdWIxX2Rlc2NyX19CSVROUiAyMQorI2RlZmluZSBSX0lSUV9NQVNLMl9SRF9fZG1hOF9zdWIxX2Rlc2NyX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0syX1JEX19kbWE4X3N1YjFfZGVzY3JfX2FjdGl2ZSAxCisjZGVmaW5lIFJfSVJRX01BU0syX1JEX19kbWE4X3N1YjFfZGVzY3JfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzJfUkRfX2RtYThfc3ViMF9kZXNjcl9fQklUTlIgMjAKKyNkZWZpbmUgUl9JUlFfTUFTSzJfUkRfX2RtYThfc3ViMF9kZXNjcl9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMl9SRF9fZG1hOF9zdWIwX2Rlc2NyX19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9NQVNLMl9SRF9fZG1hOF9zdWIwX2Rlc2NyX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfSVJRX01BU0syX1JEX19kbWE5X2VvcF9fQklUTlIgMTkKKyNkZWZpbmUgUl9JUlFfTUFTSzJfUkRfX2RtYTlfZW9wX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0syX1JEX19kbWE5X2VvcF9fYWN0aXZlIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzJfUkRfX2RtYTlfZW9wX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfSVJRX01BU0syX1JEX19kbWE5X2Rlc2NyX19CSVROUiAxOAorI2RlZmluZSBSX0lSUV9NQVNLMl9SRF9fZG1hOV9kZXNjcl9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMl9SRF9fZG1hOV9kZXNjcl9fYWN0aXZlIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzJfUkRfX2RtYTlfZGVzY3JfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzJfUkRfX2RtYThfZW9wX19CSVROUiAxNworI2RlZmluZSBSX0lSUV9NQVNLMl9SRF9fZG1hOF9lb3BfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzJfUkRfX2RtYThfZW9wX19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9NQVNLMl9SRF9fZG1hOF9lb3BfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzJfUkRfX2RtYThfZGVzY3JfX0JJVE5SIDE2CisjZGVmaW5lIFJfSVJRX01BU0syX1JEX19kbWE4X2Rlc2NyX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0syX1JEX19kbWE4X2Rlc2NyX19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9NQVNLMl9SRF9fZG1hOF9kZXNjcl9faW5hY3RpdmUgMAorI2RlZmluZSBSX0lSUV9NQVNLMl9SRF9fZG1hN19lb3BfX0JJVE5SIDE1CisjZGVmaW5lIFJfSVJRX01BU0syX1JEX19kbWE3X2VvcF9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMl9SRF9fZG1hN19lb3BfX2FjdGl2ZSAxCisjZGVmaW5lIFJfSVJRX01BU0syX1JEX19kbWE3X2VvcF9faW5hY3RpdmUgMAorI2RlZmluZSBSX0lSUV9NQVNLMl9SRF9fZG1hN19kZXNjcl9fQklUTlIgMTQKKyNkZWZpbmUgUl9JUlFfTUFTSzJfUkRfX2RtYTdfZGVzY3JfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzJfUkRfX2RtYTdfZGVzY3JfX2FjdGl2ZSAxCisjZGVmaW5lIFJfSVJRX01BU0syX1JEX19kbWE3X2Rlc2NyX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfSVJRX01BU0syX1JEX19kbWE2X2VvcF9fQklUTlIgMTMKKyNkZWZpbmUgUl9JUlFfTUFTSzJfUkRfX2RtYTZfZW9wX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0syX1JEX19kbWE2X2VvcF9fYWN0aXZlIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzJfUkRfX2RtYTZfZW9wX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfSVJRX01BU0syX1JEX19kbWE2X2Rlc2NyX19CSVROUiAxMgorI2RlZmluZSBSX0lSUV9NQVNLMl9SRF9fZG1hNl9kZXNjcl9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMl9SRF9fZG1hNl9kZXNjcl9fYWN0aXZlIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzJfUkRfX2RtYTZfZGVzY3JfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzJfUkRfX2RtYTVfZW9wX19CSVROUiAxMQorI2RlZmluZSBSX0lSUV9NQVNLMl9SRF9fZG1hNV9lb3BfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzJfUkRfX2RtYTVfZW9wX19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9NQVNLMl9SRF9fZG1hNV9lb3BfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzJfUkRfX2RtYTVfZGVzY3JfX0JJVE5SIDEwCisjZGVmaW5lIFJfSVJRX01BU0syX1JEX19kbWE1X2Rlc2NyX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0syX1JEX19kbWE1X2Rlc2NyX19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9NQVNLMl9SRF9fZG1hNV9kZXNjcl9faW5hY3RpdmUgMAorI2RlZmluZSBSX0lSUV9NQVNLMl9SRF9fZG1hNF9lb3BfX0JJVE5SIDkKKyNkZWZpbmUgUl9JUlFfTUFTSzJfUkRfX2RtYTRfZW9wX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0syX1JEX19kbWE0X2VvcF9fYWN0aXZlIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzJfUkRfX2RtYTRfZW9wX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfSVJRX01BU0syX1JEX19kbWE0X2Rlc2NyX19CSVROUiA4CisjZGVmaW5lIFJfSVJRX01BU0syX1JEX19kbWE0X2Rlc2NyX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0syX1JEX19kbWE0X2Rlc2NyX19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9NQVNLMl9SRF9fZG1hNF9kZXNjcl9faW5hY3RpdmUgMAorI2RlZmluZSBSX0lSUV9NQVNLMl9SRF9fZG1hM19lb3BfX0JJVE5SIDcKKyNkZWZpbmUgUl9JUlFfTUFTSzJfUkRfX2RtYTNfZW9wX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0syX1JEX19kbWEzX2VvcF9fYWN0aXZlIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzJfUkRfX2RtYTNfZW9wX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfSVJRX01BU0syX1JEX19kbWEzX2Rlc2NyX19CSVROUiA2CisjZGVmaW5lIFJfSVJRX01BU0syX1JEX19kbWEzX2Rlc2NyX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0syX1JEX19kbWEzX2Rlc2NyX19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9NQVNLMl9SRF9fZG1hM19kZXNjcl9faW5hY3RpdmUgMAorI2RlZmluZSBSX0lSUV9NQVNLMl9SRF9fZG1hMl9lb3BfX0JJVE5SIDUKKyNkZWZpbmUgUl9JUlFfTUFTSzJfUkRfX2RtYTJfZW9wX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0syX1JEX19kbWEyX2VvcF9fYWN0aXZlIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzJfUkRfX2RtYTJfZW9wX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfSVJRX01BU0syX1JEX19kbWEyX2Rlc2NyX19CSVROUiA0CisjZGVmaW5lIFJfSVJRX01BU0syX1JEX19kbWEyX2Rlc2NyX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0syX1JEX19kbWEyX2Rlc2NyX19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9NQVNLMl9SRF9fZG1hMl9kZXNjcl9faW5hY3RpdmUgMAorI2RlZmluZSBSX0lSUV9NQVNLMl9SRF9fZG1hMV9lb3BfX0JJVE5SIDMKKyNkZWZpbmUgUl9JUlFfTUFTSzJfUkRfX2RtYTFfZW9wX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0syX1JEX19kbWExX2VvcF9fYWN0aXZlIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzJfUkRfX2RtYTFfZW9wX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfSVJRX01BU0syX1JEX19kbWExX2Rlc2NyX19CSVROUiAyCisjZGVmaW5lIFJfSVJRX01BU0syX1JEX19kbWExX2Rlc2NyX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0syX1JEX19kbWExX2Rlc2NyX19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9NQVNLMl9SRF9fZG1hMV9kZXNjcl9faW5hY3RpdmUgMAorI2RlZmluZSBSX0lSUV9NQVNLMl9SRF9fZG1hMF9lb3BfX0JJVE5SIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzJfUkRfX2RtYTBfZW9wX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0syX1JEX19kbWEwX2VvcF9fYWN0aXZlIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzJfUkRfX2RtYTBfZW9wX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfSVJRX01BU0syX1JEX19kbWEwX2Rlc2NyX19CSVROUiAwCisjZGVmaW5lIFJfSVJRX01BU0syX1JEX19kbWEwX2Rlc2NyX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0syX1JEX19kbWEwX2Rlc2NyX19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9NQVNLMl9SRF9fZG1hMF9kZXNjcl9faW5hY3RpdmUgMAorCisjZGVmaW5lIFJfSVJRX01BU0syX0NMUiAoSU9fVFlQRUNBU1RfVURXT1JEIDB4YjAwMDAwZDApCisjZGVmaW5lIFJfSVJRX01BU0syX0NMUl9fZG1hOF9zdWIzX2Rlc2NyX19CSVROUiAyMworI2RlZmluZSBSX0lSUV9NQVNLMl9DTFJfX2RtYThfc3ViM19kZXNjcl9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMl9DTFJfX2RtYThfc3ViM19kZXNjcl9fY2xyIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzJfQ0xSX19kbWE4X3N1YjNfZGVzY3JfX25vcCAwCisjZGVmaW5lIFJfSVJRX01BU0syX0NMUl9fZG1hOF9zdWIyX2Rlc2NyX19CSVROUiAyMgorI2RlZmluZSBSX0lSUV9NQVNLMl9DTFJfX2RtYThfc3ViMl9kZXNjcl9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMl9DTFJfX2RtYThfc3ViMl9kZXNjcl9fY2xyIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzJfQ0xSX19kbWE4X3N1YjJfZGVzY3JfX25vcCAwCisjZGVmaW5lIFJfSVJRX01BU0syX0NMUl9fZG1hOF9zdWIxX2Rlc2NyX19CSVROUiAyMQorI2RlZmluZSBSX0lSUV9NQVNLMl9DTFJfX2RtYThfc3ViMV9kZXNjcl9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMl9DTFJfX2RtYThfc3ViMV9kZXNjcl9fY2xyIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzJfQ0xSX19kbWE4X3N1YjFfZGVzY3JfX25vcCAwCisjZGVmaW5lIFJfSVJRX01BU0syX0NMUl9fZG1hOF9zdWIwX2Rlc2NyX19CSVROUiAyMAorI2RlZmluZSBSX0lSUV9NQVNLMl9DTFJfX2RtYThfc3ViMF9kZXNjcl9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMl9DTFJfX2RtYThfc3ViMF9kZXNjcl9fY2xyIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzJfQ0xSX19kbWE4X3N1YjBfZGVzY3JfX25vcCAwCisjZGVmaW5lIFJfSVJRX01BU0syX0NMUl9fZG1hOV9lb3BfX0JJVE5SIDE5CisjZGVmaW5lIFJfSVJRX01BU0syX0NMUl9fZG1hOV9lb3BfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzJfQ0xSX19kbWE5X2VvcF9fY2xyIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzJfQ0xSX19kbWE5X2VvcF9fbm9wIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzJfQ0xSX19kbWE5X2Rlc2NyX19CSVROUiAxOAorI2RlZmluZSBSX0lSUV9NQVNLMl9DTFJfX2RtYTlfZGVzY3JfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzJfQ0xSX19kbWE5X2Rlc2NyX19jbHIgMQorI2RlZmluZSBSX0lSUV9NQVNLMl9DTFJfX2RtYTlfZGVzY3JfX25vcCAwCisjZGVmaW5lIFJfSVJRX01BU0syX0NMUl9fZG1hOF9lb3BfX0JJVE5SIDE3CisjZGVmaW5lIFJfSVJRX01BU0syX0NMUl9fZG1hOF9lb3BfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzJfQ0xSX19kbWE4X2VvcF9fY2xyIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzJfQ0xSX19kbWE4X2VvcF9fbm9wIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzJfQ0xSX19kbWE4X2Rlc2NyX19CSVROUiAxNgorI2RlZmluZSBSX0lSUV9NQVNLMl9DTFJfX2RtYThfZGVzY3JfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzJfQ0xSX19kbWE4X2Rlc2NyX19jbHIgMQorI2RlZmluZSBSX0lSUV9NQVNLMl9DTFJfX2RtYThfZGVzY3JfX25vcCAwCisjZGVmaW5lIFJfSVJRX01BU0syX0NMUl9fZG1hN19lb3BfX0JJVE5SIDE1CisjZGVmaW5lIFJfSVJRX01BU0syX0NMUl9fZG1hN19lb3BfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzJfQ0xSX19kbWE3X2VvcF9fY2xyIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzJfQ0xSX19kbWE3X2VvcF9fbm9wIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzJfQ0xSX19kbWE3X2Rlc2NyX19CSVROUiAxNAorI2RlZmluZSBSX0lSUV9NQVNLMl9DTFJfX2RtYTdfZGVzY3JfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzJfQ0xSX19kbWE3X2Rlc2NyX19jbHIgMQorI2RlZmluZSBSX0lSUV9NQVNLMl9DTFJfX2RtYTdfZGVzY3JfX25vcCAwCisjZGVmaW5lIFJfSVJRX01BU0syX0NMUl9fZG1hNl9lb3BfX0JJVE5SIDEzCisjZGVmaW5lIFJfSVJRX01BU0syX0NMUl9fZG1hNl9lb3BfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzJfQ0xSX19kbWE2X2VvcF9fY2xyIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzJfQ0xSX19kbWE2X2VvcF9fbm9wIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzJfQ0xSX19kbWE2X2Rlc2NyX19CSVROUiAxMgorI2RlZmluZSBSX0lSUV9NQVNLMl9DTFJfX2RtYTZfZGVzY3JfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzJfQ0xSX19kbWE2X2Rlc2NyX19jbHIgMQorI2RlZmluZSBSX0lSUV9NQVNLMl9DTFJfX2RtYTZfZGVzY3JfX25vcCAwCisjZGVmaW5lIFJfSVJRX01BU0syX0NMUl9fZG1hNV9lb3BfX0JJVE5SIDExCisjZGVmaW5lIFJfSVJRX01BU0syX0NMUl9fZG1hNV9lb3BfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzJfQ0xSX19kbWE1X2VvcF9fY2xyIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzJfQ0xSX19kbWE1X2VvcF9fbm9wIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzJfQ0xSX19kbWE1X2Rlc2NyX19CSVROUiAxMAorI2RlZmluZSBSX0lSUV9NQVNLMl9DTFJfX2RtYTVfZGVzY3JfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzJfQ0xSX19kbWE1X2Rlc2NyX19jbHIgMQorI2RlZmluZSBSX0lSUV9NQVNLMl9DTFJfX2RtYTVfZGVzY3JfX25vcCAwCisjZGVmaW5lIFJfSVJRX01BU0syX0NMUl9fZG1hNF9lb3BfX0JJVE5SIDkKKyNkZWZpbmUgUl9JUlFfTUFTSzJfQ0xSX19kbWE0X2VvcF9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMl9DTFJfX2RtYTRfZW9wX19jbHIgMQorI2RlZmluZSBSX0lSUV9NQVNLMl9DTFJfX2RtYTRfZW9wX19ub3AgMAorI2RlZmluZSBSX0lSUV9NQVNLMl9DTFJfX2RtYTRfZGVzY3JfX0JJVE5SIDgKKyNkZWZpbmUgUl9JUlFfTUFTSzJfQ0xSX19kbWE0X2Rlc2NyX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0syX0NMUl9fZG1hNF9kZXNjcl9fY2xyIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzJfQ0xSX19kbWE0X2Rlc2NyX19ub3AgMAorI2RlZmluZSBSX0lSUV9NQVNLMl9DTFJfX2RtYTNfZW9wX19CSVROUiA3CisjZGVmaW5lIFJfSVJRX01BU0syX0NMUl9fZG1hM19lb3BfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzJfQ0xSX19kbWEzX2VvcF9fY2xyIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzJfQ0xSX19kbWEzX2VvcF9fbm9wIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzJfQ0xSX19kbWEzX2Rlc2NyX19CSVROUiA2CisjZGVmaW5lIFJfSVJRX01BU0syX0NMUl9fZG1hM19kZXNjcl9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMl9DTFJfX2RtYTNfZGVzY3JfX2NsciAxCisjZGVmaW5lIFJfSVJRX01BU0syX0NMUl9fZG1hM19kZXNjcl9fbm9wIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzJfQ0xSX19kbWEyX2VvcF9fQklUTlIgNQorI2RlZmluZSBSX0lSUV9NQVNLMl9DTFJfX2RtYTJfZW9wX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0syX0NMUl9fZG1hMl9lb3BfX2NsciAxCisjZGVmaW5lIFJfSVJRX01BU0syX0NMUl9fZG1hMl9lb3BfX25vcCAwCisjZGVmaW5lIFJfSVJRX01BU0syX0NMUl9fZG1hMl9kZXNjcl9fQklUTlIgNAorI2RlZmluZSBSX0lSUV9NQVNLMl9DTFJfX2RtYTJfZGVzY3JfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzJfQ0xSX19kbWEyX2Rlc2NyX19jbHIgMQorI2RlZmluZSBSX0lSUV9NQVNLMl9DTFJfX2RtYTJfZGVzY3JfX25vcCAwCisjZGVmaW5lIFJfSVJRX01BU0syX0NMUl9fZG1hMV9lb3BfX0JJVE5SIDMKKyNkZWZpbmUgUl9JUlFfTUFTSzJfQ0xSX19kbWExX2VvcF9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMl9DTFJfX2RtYTFfZW9wX19jbHIgMQorI2RlZmluZSBSX0lSUV9NQVNLMl9DTFJfX2RtYTFfZW9wX19ub3AgMAorI2RlZmluZSBSX0lSUV9NQVNLMl9DTFJfX2RtYTFfZGVzY3JfX0JJVE5SIDIKKyNkZWZpbmUgUl9JUlFfTUFTSzJfQ0xSX19kbWExX2Rlc2NyX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0syX0NMUl9fZG1hMV9kZXNjcl9fY2xyIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzJfQ0xSX19kbWExX2Rlc2NyX19ub3AgMAorI2RlZmluZSBSX0lSUV9NQVNLMl9DTFJfX2RtYTBfZW9wX19CSVROUiAxCisjZGVmaW5lIFJfSVJRX01BU0syX0NMUl9fZG1hMF9lb3BfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzJfQ0xSX19kbWEwX2VvcF9fY2xyIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzJfQ0xSX19kbWEwX2VvcF9fbm9wIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzJfQ0xSX19kbWEwX2Rlc2NyX19CSVROUiAwCisjZGVmaW5lIFJfSVJRX01BU0syX0NMUl9fZG1hMF9kZXNjcl9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMl9DTFJfX2RtYTBfZGVzY3JfX2NsciAxCisjZGVmaW5lIFJfSVJRX01BU0syX0NMUl9fZG1hMF9kZXNjcl9fbm9wIDAKKworI2RlZmluZSBSX0lSUV9SRUFEMiAoSU9fVFlQRUNBU1RfUk9fVURXT1JEIDB4YjAwMDAwZDQpCisjZGVmaW5lIFJfSVJRX1JFQUQyX19kbWE4X3N1YjNfZGVzY3JfX0JJVE5SIDIzCisjZGVmaW5lIFJfSVJRX1JFQUQyX19kbWE4X3N1YjNfZGVzY3JfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfUkVBRDJfX2RtYThfc3ViM19kZXNjcl9fYWN0aXZlIDEKKyNkZWZpbmUgUl9JUlFfUkVBRDJfX2RtYThfc3ViM19kZXNjcl9faW5hY3RpdmUgMAorI2RlZmluZSBSX0lSUV9SRUFEMl9fZG1hOF9zdWIyX2Rlc2NyX19CSVROUiAyMgorI2RlZmluZSBSX0lSUV9SRUFEMl9fZG1hOF9zdWIyX2Rlc2NyX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX1JFQUQyX19kbWE4X3N1YjJfZGVzY3JfX2FjdGl2ZSAxCisjZGVmaW5lIFJfSVJRX1JFQUQyX19kbWE4X3N1YjJfZGVzY3JfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9JUlFfUkVBRDJfX2RtYThfc3ViMV9kZXNjcl9fQklUTlIgMjEKKyNkZWZpbmUgUl9JUlFfUkVBRDJfX2RtYThfc3ViMV9kZXNjcl9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9SRUFEMl9fZG1hOF9zdWIxX2Rlc2NyX19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9SRUFEMl9fZG1hOF9zdWIxX2Rlc2NyX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfSVJRX1JFQUQyX19kbWE4X3N1YjBfZGVzY3JfX0JJVE5SIDIwCisjZGVmaW5lIFJfSVJRX1JFQUQyX19kbWE4X3N1YjBfZGVzY3JfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfUkVBRDJfX2RtYThfc3ViMF9kZXNjcl9fYWN0aXZlIDEKKyNkZWZpbmUgUl9JUlFfUkVBRDJfX2RtYThfc3ViMF9kZXNjcl9faW5hY3RpdmUgMAorI2RlZmluZSBSX0lSUV9SRUFEMl9fZG1hOV9lb3BfX0JJVE5SIDE5CisjZGVmaW5lIFJfSVJRX1JFQUQyX19kbWE5X2VvcF9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9SRUFEMl9fZG1hOV9lb3BfX2FjdGl2ZSAxCisjZGVmaW5lIFJfSVJRX1JFQUQyX19kbWE5X2VvcF9faW5hY3RpdmUgMAorI2RlZmluZSBSX0lSUV9SRUFEMl9fZG1hOV9kZXNjcl9fQklUTlIgMTgKKyNkZWZpbmUgUl9JUlFfUkVBRDJfX2RtYTlfZGVzY3JfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfUkVBRDJfX2RtYTlfZGVzY3JfX2FjdGl2ZSAxCisjZGVmaW5lIFJfSVJRX1JFQUQyX19kbWE5X2Rlc2NyX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfSVJRX1JFQUQyX19kbWE4X2VvcF9fQklUTlIgMTcKKyNkZWZpbmUgUl9JUlFfUkVBRDJfX2RtYThfZW9wX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX1JFQUQyX19kbWE4X2VvcF9fYWN0aXZlIDEKKyNkZWZpbmUgUl9JUlFfUkVBRDJfX2RtYThfZW9wX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfSVJRX1JFQUQyX19kbWE4X2Rlc2NyX19CSVROUiAxNgorI2RlZmluZSBSX0lSUV9SRUFEMl9fZG1hOF9kZXNjcl9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9SRUFEMl9fZG1hOF9kZXNjcl9fYWN0aXZlIDEKKyNkZWZpbmUgUl9JUlFfUkVBRDJfX2RtYThfZGVzY3JfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9JUlFfUkVBRDJfX2RtYTdfZW9wX19CSVROUiAxNQorI2RlZmluZSBSX0lSUV9SRUFEMl9fZG1hN19lb3BfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfUkVBRDJfX2RtYTdfZW9wX19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9SRUFEMl9fZG1hN19lb3BfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9JUlFfUkVBRDJfX2RtYTdfZGVzY3JfX0JJVE5SIDE0CisjZGVmaW5lIFJfSVJRX1JFQUQyX19kbWE3X2Rlc2NyX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX1JFQUQyX19kbWE3X2Rlc2NyX19hY3RpdmUgMQorI2RlZmluZSBSX0lSUV9SRUFEMl9fZG1hN19kZXNjcl9faW5hY3RpdmUgMAorI2RlZmluZSBSX0lSUV9SRUFEMl9fZG1hNl9lb3BfX0JJVE5SIDEzCisjZGVmaW5lIFJfSVJRX1JFQUQyX19kbWE2X2VvcF9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9SRUFEMl9fZG1hNl9lb3BfX2FjdGl2ZSAxCisjZGVmaW5lIFJfSVJRX1JFQUQyX19kbWE2X2VvcF9faW5hY3RpdmUgMAorI2RlZmluZSBSX0lSUV9SRUFEMl9fZG1hNl9kZXNjcl9fQklUTlIgMTIKKyNkZWZpbmUgUl9JUlFfUkVBRDJfX2RtYTZfZGVzY3JfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfUkVBRDJfX2RtYTZfZGVzY3JfX2FjdGl2ZSAxCisjZGVmaW5lIFJfSVJRX1JFQUQyX19kbWE2X2Rlc2NyX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfSVJRX1JFQUQyX19kbWE1X2VvcF9fQklUTlIgMTEKKyNkZWZpbmUgUl9JUlFfUkVBRDJfX2RtYTVfZW9wX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX1JFQUQyX19kbWE1X2VvcF9fYWN0aXZlIDEKKyNkZWZpbmUgUl9JUlFfUkVBRDJfX2RtYTVfZW9wX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfSVJRX1JFQUQyX19kbWE1X2Rlc2NyX19CSVROUiAxMAorI2RlZmluZSBSX0lSUV9SRUFEMl9fZG1hNV9kZXNjcl9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9SRUFEMl9fZG1hNV9kZXNjcl9fYWN0aXZlIDEKKyNkZWZpbmUgUl9JUlFfUkVBRDJfX2RtYTVfZGVzY3JfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9JUlFfUkVBRDJfX2RtYTRfZW9wX19CSVROUiA5CisjZGVmaW5lIFJfSVJRX1JFQUQyX19kbWE0X2VvcF9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9SRUFEMl9fZG1hNF9lb3BfX2FjdGl2ZSAxCisjZGVmaW5lIFJfSVJRX1JFQUQyX19kbWE0X2VvcF9faW5hY3RpdmUgMAorI2RlZmluZSBSX0lSUV9SRUFEMl9fZG1hNF9kZXNjcl9fQklUTlIgOAorI2RlZmluZSBSX0lSUV9SRUFEMl9fZG1hNF9kZXNjcl9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9SRUFEMl9fZG1hNF9kZXNjcl9fYWN0aXZlIDEKKyNkZWZpbmUgUl9JUlFfUkVBRDJfX2RtYTRfZGVzY3JfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9JUlFfUkVBRDJfX2RtYTNfZW9wX19CSVROUiA3CisjZGVmaW5lIFJfSVJRX1JFQUQyX19kbWEzX2VvcF9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9SRUFEMl9fZG1hM19lb3BfX2FjdGl2ZSAxCisjZGVmaW5lIFJfSVJRX1JFQUQyX19kbWEzX2VvcF9faW5hY3RpdmUgMAorI2RlZmluZSBSX0lSUV9SRUFEMl9fZG1hM19kZXNjcl9fQklUTlIgNgorI2RlZmluZSBSX0lSUV9SRUFEMl9fZG1hM19kZXNjcl9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9SRUFEMl9fZG1hM19kZXNjcl9fYWN0aXZlIDEKKyNkZWZpbmUgUl9JUlFfUkVBRDJfX2RtYTNfZGVzY3JfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9JUlFfUkVBRDJfX2RtYTJfZW9wX19CSVROUiA1CisjZGVmaW5lIFJfSVJRX1JFQUQyX19kbWEyX2VvcF9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9SRUFEMl9fZG1hMl9lb3BfX2FjdGl2ZSAxCisjZGVmaW5lIFJfSVJRX1JFQUQyX19kbWEyX2VvcF9faW5hY3RpdmUgMAorI2RlZmluZSBSX0lSUV9SRUFEMl9fZG1hMl9kZXNjcl9fQklUTlIgNAorI2RlZmluZSBSX0lSUV9SRUFEMl9fZG1hMl9kZXNjcl9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9SRUFEMl9fZG1hMl9kZXNjcl9fYWN0aXZlIDEKKyNkZWZpbmUgUl9JUlFfUkVBRDJfX2RtYTJfZGVzY3JfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9JUlFfUkVBRDJfX2RtYTFfZW9wX19CSVROUiAzCisjZGVmaW5lIFJfSVJRX1JFQUQyX19kbWExX2VvcF9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9SRUFEMl9fZG1hMV9lb3BfX2FjdGl2ZSAxCisjZGVmaW5lIFJfSVJRX1JFQUQyX19kbWExX2VvcF9faW5hY3RpdmUgMAorI2RlZmluZSBSX0lSUV9SRUFEMl9fZG1hMV9kZXNjcl9fQklUTlIgMgorI2RlZmluZSBSX0lSUV9SRUFEMl9fZG1hMV9kZXNjcl9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9SRUFEMl9fZG1hMV9kZXNjcl9fYWN0aXZlIDEKKyNkZWZpbmUgUl9JUlFfUkVBRDJfX2RtYTFfZGVzY3JfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9JUlFfUkVBRDJfX2RtYTBfZW9wX19CSVROUiAxCisjZGVmaW5lIFJfSVJRX1JFQUQyX19kbWEwX2VvcF9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9SRUFEMl9fZG1hMF9lb3BfX2FjdGl2ZSAxCisjZGVmaW5lIFJfSVJRX1JFQUQyX19kbWEwX2VvcF9faW5hY3RpdmUgMAorI2RlZmluZSBSX0lSUV9SRUFEMl9fZG1hMF9kZXNjcl9fQklUTlIgMAorI2RlZmluZSBSX0lSUV9SRUFEMl9fZG1hMF9kZXNjcl9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9SRUFEMl9fZG1hMF9kZXNjcl9fYWN0aXZlIDEKKyNkZWZpbmUgUl9JUlFfUkVBRDJfX2RtYTBfZGVzY3JfX2luYWN0aXZlIDAKKworI2RlZmluZSBSX0lSUV9NQVNLMl9TRVQgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMGQ0KQorI2RlZmluZSBSX0lSUV9NQVNLMl9TRVRfX2RtYThfc3ViM19kZXNjcl9fQklUTlIgMjMKKyNkZWZpbmUgUl9JUlFfTUFTSzJfU0VUX19kbWE4X3N1YjNfZGVzY3JfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzJfU0VUX19kbWE4X3N1YjNfZGVzY3JfX3NldCAxCisjZGVmaW5lIFJfSVJRX01BU0syX1NFVF9fZG1hOF9zdWIzX2Rlc2NyX19ub3AgMAorI2RlZmluZSBSX0lSUV9NQVNLMl9TRVRfX2RtYThfc3ViMl9kZXNjcl9fQklUTlIgMjIKKyNkZWZpbmUgUl9JUlFfTUFTSzJfU0VUX19kbWE4X3N1YjJfZGVzY3JfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzJfU0VUX19kbWE4X3N1YjJfZGVzY3JfX3NldCAxCisjZGVmaW5lIFJfSVJRX01BU0syX1NFVF9fZG1hOF9zdWIyX2Rlc2NyX19ub3AgMAorI2RlZmluZSBSX0lSUV9NQVNLMl9TRVRfX2RtYThfc3ViMV9kZXNjcl9fQklUTlIgMjEKKyNkZWZpbmUgUl9JUlFfTUFTSzJfU0VUX19kbWE4X3N1YjFfZGVzY3JfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzJfU0VUX19kbWE4X3N1YjFfZGVzY3JfX3NldCAxCisjZGVmaW5lIFJfSVJRX01BU0syX1NFVF9fZG1hOF9zdWIxX2Rlc2NyX19ub3AgMAorI2RlZmluZSBSX0lSUV9NQVNLMl9TRVRfX2RtYThfc3ViMF9kZXNjcl9fQklUTlIgMjAKKyNkZWZpbmUgUl9JUlFfTUFTSzJfU0VUX19kbWE4X3N1YjBfZGVzY3JfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzJfU0VUX19kbWE4X3N1YjBfZGVzY3JfX3NldCAxCisjZGVmaW5lIFJfSVJRX01BU0syX1NFVF9fZG1hOF9zdWIwX2Rlc2NyX19ub3AgMAorI2RlZmluZSBSX0lSUV9NQVNLMl9TRVRfX2RtYTlfZW9wX19CSVROUiAxOQorI2RlZmluZSBSX0lSUV9NQVNLMl9TRVRfX2RtYTlfZW9wX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0syX1NFVF9fZG1hOV9lb3BfX3NldCAxCisjZGVmaW5lIFJfSVJRX01BU0syX1NFVF9fZG1hOV9lb3BfX25vcCAwCisjZGVmaW5lIFJfSVJRX01BU0syX1NFVF9fZG1hOV9kZXNjcl9fQklUTlIgMTgKKyNkZWZpbmUgUl9JUlFfTUFTSzJfU0VUX19kbWE5X2Rlc2NyX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0syX1NFVF9fZG1hOV9kZXNjcl9fc2V0IDEKKyNkZWZpbmUgUl9JUlFfTUFTSzJfU0VUX19kbWE5X2Rlc2NyX19ub3AgMAorI2RlZmluZSBSX0lSUV9NQVNLMl9TRVRfX2RtYThfZW9wX19CSVROUiAxNworI2RlZmluZSBSX0lSUV9NQVNLMl9TRVRfX2RtYThfZW9wX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0syX1NFVF9fZG1hOF9lb3BfX3NldCAxCisjZGVmaW5lIFJfSVJRX01BU0syX1NFVF9fZG1hOF9lb3BfX25vcCAwCisjZGVmaW5lIFJfSVJRX01BU0syX1NFVF9fZG1hOF9kZXNjcl9fQklUTlIgMTYKKyNkZWZpbmUgUl9JUlFfTUFTSzJfU0VUX19kbWE4X2Rlc2NyX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0syX1NFVF9fZG1hOF9kZXNjcl9fc2V0IDEKKyNkZWZpbmUgUl9JUlFfTUFTSzJfU0VUX19kbWE4X2Rlc2NyX19ub3AgMAorI2RlZmluZSBSX0lSUV9NQVNLMl9TRVRfX2RtYTdfZW9wX19CSVROUiAxNQorI2RlZmluZSBSX0lSUV9NQVNLMl9TRVRfX2RtYTdfZW9wX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0syX1NFVF9fZG1hN19lb3BfX3NldCAxCisjZGVmaW5lIFJfSVJRX01BU0syX1NFVF9fZG1hN19lb3BfX25vcCAwCisjZGVmaW5lIFJfSVJRX01BU0syX1NFVF9fZG1hN19kZXNjcl9fQklUTlIgMTQKKyNkZWZpbmUgUl9JUlFfTUFTSzJfU0VUX19kbWE3X2Rlc2NyX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0syX1NFVF9fZG1hN19kZXNjcl9fc2V0IDEKKyNkZWZpbmUgUl9JUlFfTUFTSzJfU0VUX19kbWE3X2Rlc2NyX19ub3AgMAorI2RlZmluZSBSX0lSUV9NQVNLMl9TRVRfX2RtYTZfZW9wX19CSVROUiAxMworI2RlZmluZSBSX0lSUV9NQVNLMl9TRVRfX2RtYTZfZW9wX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0syX1NFVF9fZG1hNl9lb3BfX3NldCAxCisjZGVmaW5lIFJfSVJRX01BU0syX1NFVF9fZG1hNl9lb3BfX25vcCAwCisjZGVmaW5lIFJfSVJRX01BU0syX1NFVF9fZG1hNl9kZXNjcl9fQklUTlIgMTIKKyNkZWZpbmUgUl9JUlFfTUFTSzJfU0VUX19kbWE2X2Rlc2NyX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0syX1NFVF9fZG1hNl9kZXNjcl9fc2V0IDEKKyNkZWZpbmUgUl9JUlFfTUFTSzJfU0VUX19kbWE2X2Rlc2NyX19ub3AgMAorI2RlZmluZSBSX0lSUV9NQVNLMl9TRVRfX2RtYTVfZW9wX19CSVROUiAxMQorI2RlZmluZSBSX0lSUV9NQVNLMl9TRVRfX2RtYTVfZW9wX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0syX1NFVF9fZG1hNV9lb3BfX3NldCAxCisjZGVmaW5lIFJfSVJRX01BU0syX1NFVF9fZG1hNV9lb3BfX25vcCAwCisjZGVmaW5lIFJfSVJRX01BU0syX1NFVF9fZG1hNV9kZXNjcl9fQklUTlIgMTAKKyNkZWZpbmUgUl9JUlFfTUFTSzJfU0VUX19kbWE1X2Rlc2NyX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0syX1NFVF9fZG1hNV9kZXNjcl9fc2V0IDEKKyNkZWZpbmUgUl9JUlFfTUFTSzJfU0VUX19kbWE1X2Rlc2NyX19ub3AgMAorI2RlZmluZSBSX0lSUV9NQVNLMl9TRVRfX2RtYTRfZW9wX19CSVROUiA5CisjZGVmaW5lIFJfSVJRX01BU0syX1NFVF9fZG1hNF9lb3BfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzJfU0VUX19kbWE0X2VvcF9fc2V0IDEKKyNkZWZpbmUgUl9JUlFfTUFTSzJfU0VUX19kbWE0X2VvcF9fbm9wIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzJfU0VUX19kbWE0X2Rlc2NyX19CSVROUiA4CisjZGVmaW5lIFJfSVJRX01BU0syX1NFVF9fZG1hNF9kZXNjcl9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMl9TRVRfX2RtYTRfZGVzY3JfX3NldCAxCisjZGVmaW5lIFJfSVJRX01BU0syX1NFVF9fZG1hNF9kZXNjcl9fbm9wIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzJfU0VUX19kbWEzX2VvcF9fQklUTlIgNworI2RlZmluZSBSX0lSUV9NQVNLMl9TRVRfX2RtYTNfZW9wX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0syX1NFVF9fZG1hM19lb3BfX3NldCAxCisjZGVmaW5lIFJfSVJRX01BU0syX1NFVF9fZG1hM19lb3BfX25vcCAwCisjZGVmaW5lIFJfSVJRX01BU0syX1NFVF9fZG1hM19kZXNjcl9fQklUTlIgNgorI2RlZmluZSBSX0lSUV9NQVNLMl9TRVRfX2RtYTNfZGVzY3JfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzJfU0VUX19kbWEzX2Rlc2NyX19zZXQgMQorI2RlZmluZSBSX0lSUV9NQVNLMl9TRVRfX2RtYTNfZGVzY3JfX25vcCAwCisjZGVmaW5lIFJfSVJRX01BU0syX1NFVF9fZG1hMl9lb3BfX0JJVE5SIDUKKyNkZWZpbmUgUl9JUlFfTUFTSzJfU0VUX19kbWEyX2VvcF9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMl9TRVRfX2RtYTJfZW9wX19zZXQgMQorI2RlZmluZSBSX0lSUV9NQVNLMl9TRVRfX2RtYTJfZW9wX19ub3AgMAorI2RlZmluZSBSX0lSUV9NQVNLMl9TRVRfX2RtYTJfZGVzY3JfX0JJVE5SIDQKKyNkZWZpbmUgUl9JUlFfTUFTSzJfU0VUX19kbWEyX2Rlc2NyX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0syX1NFVF9fZG1hMl9kZXNjcl9fc2V0IDEKKyNkZWZpbmUgUl9JUlFfTUFTSzJfU0VUX19kbWEyX2Rlc2NyX19ub3AgMAorI2RlZmluZSBSX0lSUV9NQVNLMl9TRVRfX2RtYTFfZW9wX19CSVROUiAzCisjZGVmaW5lIFJfSVJRX01BU0syX1NFVF9fZG1hMV9lb3BfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzJfU0VUX19kbWExX2VvcF9fc2V0IDEKKyNkZWZpbmUgUl9JUlFfTUFTSzJfU0VUX19kbWExX2VvcF9fbm9wIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzJfU0VUX19kbWExX2Rlc2NyX19CSVROUiAyCisjZGVmaW5lIFJfSVJRX01BU0syX1NFVF9fZG1hMV9kZXNjcl9fV0lEVEggMQorI2RlZmluZSBSX0lSUV9NQVNLMl9TRVRfX2RtYTFfZGVzY3JfX3NldCAxCisjZGVmaW5lIFJfSVJRX01BU0syX1NFVF9fZG1hMV9kZXNjcl9fbm9wIDAKKyNkZWZpbmUgUl9JUlFfTUFTSzJfU0VUX19kbWEwX2VvcF9fQklUTlIgMQorI2RlZmluZSBSX0lSUV9NQVNLMl9TRVRfX2RtYTBfZW9wX19XSURUSCAxCisjZGVmaW5lIFJfSVJRX01BU0syX1NFVF9fZG1hMF9lb3BfX3NldCAxCisjZGVmaW5lIFJfSVJRX01BU0syX1NFVF9fZG1hMF9lb3BfX25vcCAwCisjZGVmaW5lIFJfSVJRX01BU0syX1NFVF9fZG1hMF9kZXNjcl9fQklUTlIgMAorI2RlZmluZSBSX0lSUV9NQVNLMl9TRVRfX2RtYTBfZGVzY3JfX1dJRFRIIDEKKyNkZWZpbmUgUl9JUlFfTUFTSzJfU0VUX19kbWEwX2Rlc2NyX19zZXQgMQorI2RlZmluZSBSX0lSUV9NQVNLMl9TRVRfX2RtYTBfZGVzY3JfX25vcCAwCisKKyNkZWZpbmUgUl9WRUNUX01BU0tfUkQgKElPX1RZUEVDQVNUX1JPX1VEV09SRCAweGIwMDAwMGQ4KQorI2RlZmluZSBSX1ZFQ1RfTUFTS19SRF9fdXNiX19CSVROUiAzMQorI2RlZmluZSBSX1ZFQ1RfTUFTS19SRF9fdXNiX19XSURUSCAxCisjZGVmaW5lIFJfVkVDVF9NQVNLX1JEX191c2JfX2FjdGl2ZSAxCisjZGVmaW5lIFJfVkVDVF9NQVNLX1JEX191c2JfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9WRUNUX01BU0tfUkRfX2RtYTlfX0JJVE5SIDI1CisjZGVmaW5lIFJfVkVDVF9NQVNLX1JEX19kbWE5X19XSURUSCAxCisjZGVmaW5lIFJfVkVDVF9NQVNLX1JEX19kbWE5X19hY3RpdmUgMQorI2RlZmluZSBSX1ZFQ1RfTUFTS19SRF9fZG1hOV9faW5hY3RpdmUgMAorI2RlZmluZSBSX1ZFQ1RfTUFTS19SRF9fZG1hOF9fQklUTlIgMjQKKyNkZWZpbmUgUl9WRUNUX01BU0tfUkRfX2RtYThfX1dJRFRIIDEKKyNkZWZpbmUgUl9WRUNUX01BU0tfUkRfX2RtYThfX2FjdGl2ZSAxCisjZGVmaW5lIFJfVkVDVF9NQVNLX1JEX19kbWE4X19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfVkVDVF9NQVNLX1JEX19kbWE3X19CSVROUiAyMworI2RlZmluZSBSX1ZFQ1RfTUFTS19SRF9fZG1hN19fV0lEVEggMQorI2RlZmluZSBSX1ZFQ1RfTUFTS19SRF9fZG1hN19fYWN0aXZlIDEKKyNkZWZpbmUgUl9WRUNUX01BU0tfUkRfX2RtYTdfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9WRUNUX01BU0tfUkRfX2RtYTZfX0JJVE5SIDIyCisjZGVmaW5lIFJfVkVDVF9NQVNLX1JEX19kbWE2X19XSURUSCAxCisjZGVmaW5lIFJfVkVDVF9NQVNLX1JEX19kbWE2X19hY3RpdmUgMQorI2RlZmluZSBSX1ZFQ1RfTUFTS19SRF9fZG1hNl9faW5hY3RpdmUgMAorI2RlZmluZSBSX1ZFQ1RfTUFTS19SRF9fZG1hNV9fQklUTlIgMjEKKyNkZWZpbmUgUl9WRUNUX01BU0tfUkRfX2RtYTVfX1dJRFRIIDEKKyNkZWZpbmUgUl9WRUNUX01BU0tfUkRfX2RtYTVfX2FjdGl2ZSAxCisjZGVmaW5lIFJfVkVDVF9NQVNLX1JEX19kbWE1X19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfVkVDVF9NQVNLX1JEX19kbWE0X19CSVROUiAyMAorI2RlZmluZSBSX1ZFQ1RfTUFTS19SRF9fZG1hNF9fV0lEVEggMQorI2RlZmluZSBSX1ZFQ1RfTUFTS19SRF9fZG1hNF9fYWN0aXZlIDEKKyNkZWZpbmUgUl9WRUNUX01BU0tfUkRfX2RtYTRfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9WRUNUX01BU0tfUkRfX2RtYTNfX0JJVE5SIDE5CisjZGVmaW5lIFJfVkVDVF9NQVNLX1JEX19kbWEzX19XSURUSCAxCisjZGVmaW5lIFJfVkVDVF9NQVNLX1JEX19kbWEzX19hY3RpdmUgMQorI2RlZmluZSBSX1ZFQ1RfTUFTS19SRF9fZG1hM19faW5hY3RpdmUgMAorI2RlZmluZSBSX1ZFQ1RfTUFTS19SRF9fZG1hMl9fQklUTlIgMTgKKyNkZWZpbmUgUl9WRUNUX01BU0tfUkRfX2RtYTJfX1dJRFRIIDEKKyNkZWZpbmUgUl9WRUNUX01BU0tfUkRfX2RtYTJfX2FjdGl2ZSAxCisjZGVmaW5lIFJfVkVDVF9NQVNLX1JEX19kbWEyX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfVkVDVF9NQVNLX1JEX19kbWExX19CSVROUiAxNworI2RlZmluZSBSX1ZFQ1RfTUFTS19SRF9fZG1hMV9fV0lEVEggMQorI2RlZmluZSBSX1ZFQ1RfTUFTS19SRF9fZG1hMV9fYWN0aXZlIDEKKyNkZWZpbmUgUl9WRUNUX01BU0tfUkRfX2RtYTFfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9WRUNUX01BU0tfUkRfX2RtYTBfX0JJVE5SIDE2CisjZGVmaW5lIFJfVkVDVF9NQVNLX1JEX19kbWEwX19XSURUSCAxCisjZGVmaW5lIFJfVkVDVF9NQVNLX1JEX19kbWEwX19hY3RpdmUgMQorI2RlZmluZSBSX1ZFQ1RfTUFTS19SRF9fZG1hMF9faW5hY3RpdmUgMAorI2RlZmluZSBSX1ZFQ1RfTUFTS19SRF9fZXh0X2RtYTFfX0JJVE5SIDEzCisjZGVmaW5lIFJfVkVDVF9NQVNLX1JEX19leHRfZG1hMV9fV0lEVEggMQorI2RlZmluZSBSX1ZFQ1RfTUFTS19SRF9fZXh0X2RtYTFfX2FjdGl2ZSAxCisjZGVmaW5lIFJfVkVDVF9NQVNLX1JEX19leHRfZG1hMV9faW5hY3RpdmUgMAorI2RlZmluZSBSX1ZFQ1RfTUFTS19SRF9fZXh0X2RtYTBfX0JJVE5SIDEyCisjZGVmaW5lIFJfVkVDVF9NQVNLX1JEX19leHRfZG1hMF9fV0lEVEggMQorI2RlZmluZSBSX1ZFQ1RfTUFTS19SRF9fZXh0X2RtYTBfX2FjdGl2ZSAxCisjZGVmaW5lIFJfVkVDVF9NQVNLX1JEX19leHRfZG1hMF9faW5hY3RpdmUgMAorI2RlZmluZSBSX1ZFQ1RfTUFTS19SRF9fcGFfX0JJVE5SIDExCisjZGVmaW5lIFJfVkVDVF9NQVNLX1JEX19wYV9fV0lEVEggMQorI2RlZmluZSBSX1ZFQ1RfTUFTS19SRF9fcGFfX2FjdGl2ZSAxCisjZGVmaW5lIFJfVkVDVF9NQVNLX1JEX19wYV9faW5hY3RpdmUgMAorI2RlZmluZSBSX1ZFQ1RfTUFTS19SRF9faXJxX2ludG5yX19CSVROUiAxMAorI2RlZmluZSBSX1ZFQ1RfTUFTS19SRF9faXJxX2ludG5yX19XSURUSCAxCisjZGVmaW5lIFJfVkVDVF9NQVNLX1JEX19pcnFfaW50bnJfX2FjdGl2ZSAxCisjZGVmaW5lIFJfVkVDVF9NQVNLX1JEX19pcnFfaW50bnJfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9WRUNUX01BU0tfUkRfX3N3X19CSVROUiA5CisjZGVmaW5lIFJfVkVDVF9NQVNLX1JEX19zd19fV0lEVEggMQorI2RlZmluZSBSX1ZFQ1RfTUFTS19SRF9fc3dfX2FjdGl2ZSAxCisjZGVmaW5lIFJfVkVDVF9NQVNLX1JEX19zd19faW5hY3RpdmUgMAorI2RlZmluZSBSX1ZFQ1RfTUFTS19SRF9fc2VyaWFsX19CSVROUiA4CisjZGVmaW5lIFJfVkVDVF9NQVNLX1JEX19zZXJpYWxfX1dJRFRIIDEKKyNkZWZpbmUgUl9WRUNUX01BU0tfUkRfX3NlcmlhbF9fYWN0aXZlIDEKKyNkZWZpbmUgUl9WRUNUX01BU0tfUkRfX3NlcmlhbF9faW5hY3RpdmUgMAorI2RlZmluZSBSX1ZFQ1RfTUFTS19SRF9fc25tcF9fQklUTlIgNworI2RlZmluZSBSX1ZFQ1RfTUFTS19SRF9fc25tcF9fV0lEVEggMQorI2RlZmluZSBSX1ZFQ1RfTUFTS19SRF9fc25tcF9fYWN0aXZlIDEKKyNkZWZpbmUgUl9WRUNUX01BU0tfUkRfX3NubXBfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9WRUNUX01BU0tfUkRfX25ldHdvcmtfX0JJVE5SIDYKKyNkZWZpbmUgUl9WRUNUX01BU0tfUkRfX25ldHdvcmtfX1dJRFRIIDEKKyNkZWZpbmUgUl9WRUNUX01BU0tfUkRfX25ldHdvcmtfX2FjdGl2ZSAxCisjZGVmaW5lIFJfVkVDVF9NQVNLX1JEX19uZXR3b3JrX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfVkVDVF9NQVNLX1JEX19zY3NpMV9fQklUTlIgNQorI2RlZmluZSBSX1ZFQ1RfTUFTS19SRF9fc2NzaTFfX1dJRFRIIDEKKyNkZWZpbmUgUl9WRUNUX01BU0tfUkRfX3Njc2kxX19hY3RpdmUgMQorI2RlZmluZSBSX1ZFQ1RfTUFTS19SRF9fc2NzaTFfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9WRUNUX01BU0tfUkRfX3BhcjFfX0JJVE5SIDUKKyNkZWZpbmUgUl9WRUNUX01BU0tfUkRfX3BhcjFfX1dJRFRIIDEKKyNkZWZpbmUgUl9WRUNUX01BU0tfUkRfX3BhcjFfX2FjdGl2ZSAxCisjZGVmaW5lIFJfVkVDVF9NQVNLX1JEX19wYXIxX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfVkVDVF9NQVNLX1JEX19zY3NpMF9fQklUTlIgNAorI2RlZmluZSBSX1ZFQ1RfTUFTS19SRF9fc2NzaTBfX1dJRFRIIDEKKyNkZWZpbmUgUl9WRUNUX01BU0tfUkRfX3Njc2kwX19hY3RpdmUgMQorI2RlZmluZSBSX1ZFQ1RfTUFTS19SRF9fc2NzaTBfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9WRUNUX01BU0tfUkRfX3BhcjBfX0JJVE5SIDQKKyNkZWZpbmUgUl9WRUNUX01BU0tfUkRfX3BhcjBfX1dJRFRIIDEKKyNkZWZpbmUgUl9WRUNUX01BU0tfUkRfX3BhcjBfX2FjdGl2ZSAxCisjZGVmaW5lIFJfVkVDVF9NQVNLX1JEX19wYXIwX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfVkVDVF9NQVNLX1JEX19hdGFfX0JJVE5SIDQKKyNkZWZpbmUgUl9WRUNUX01BU0tfUkRfX2F0YV9fV0lEVEggMQorI2RlZmluZSBSX1ZFQ1RfTUFTS19SRF9fYXRhX19hY3RpdmUgMQorI2RlZmluZSBSX1ZFQ1RfTUFTS19SRF9fYXRhX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfVkVDVF9NQVNLX1JEX19taW9fX0JJVE5SIDQKKyNkZWZpbmUgUl9WRUNUX01BU0tfUkRfX21pb19fV0lEVEggMQorI2RlZmluZSBSX1ZFQ1RfTUFTS19SRF9fbWlvX19hY3RpdmUgMQorI2RlZmluZSBSX1ZFQ1RfTUFTS19SRF9fbWlvX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfVkVDVF9NQVNLX1JEX190aW1lcjFfX0JJVE5SIDMKKyNkZWZpbmUgUl9WRUNUX01BU0tfUkRfX3RpbWVyMV9fV0lEVEggMQorI2RlZmluZSBSX1ZFQ1RfTUFTS19SRF9fdGltZXIxX19hY3RpdmUgMQorI2RlZmluZSBSX1ZFQ1RfTUFTS19SRF9fdGltZXIxX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfVkVDVF9NQVNLX1JEX190aW1lcjBfX0JJVE5SIDIKKyNkZWZpbmUgUl9WRUNUX01BU0tfUkRfX3RpbWVyMF9fV0lEVEggMQorI2RlZmluZSBSX1ZFQ1RfTUFTS19SRF9fdGltZXIwX19hY3RpdmUgMQorI2RlZmluZSBSX1ZFQ1RfTUFTS19SRF9fdGltZXIwX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfVkVDVF9NQVNLX1JEX19ubWlfX0JJVE5SIDEKKyNkZWZpbmUgUl9WRUNUX01BU0tfUkRfX25taV9fV0lEVEggMQorI2RlZmluZSBSX1ZFQ1RfTUFTS19SRF9fbm1pX19hY3RpdmUgMQorI2RlZmluZSBSX1ZFQ1RfTUFTS19SRF9fbm1pX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfVkVDVF9NQVNLX1JEX19zb21lX19CSVROUiAwCisjZGVmaW5lIFJfVkVDVF9NQVNLX1JEX19zb21lX19XSURUSCAxCisjZGVmaW5lIFJfVkVDVF9NQVNLX1JEX19zb21lX19hY3RpdmUgMQorI2RlZmluZSBSX1ZFQ1RfTUFTS19SRF9fc29tZV9faW5hY3RpdmUgMAorCisjZGVmaW5lIFJfVkVDVF9NQVNLX0NMUiAoSU9fVFlQRUNBU1RfVURXT1JEIDB4YjAwMDAwZDgpCisjZGVmaW5lIFJfVkVDVF9NQVNLX0NMUl9fdXNiX19CSVROUiAzMQorI2RlZmluZSBSX1ZFQ1RfTUFTS19DTFJfX3VzYl9fV0lEVEggMQorI2RlZmluZSBSX1ZFQ1RfTUFTS19DTFJfX3VzYl9fY2xyIDEKKyNkZWZpbmUgUl9WRUNUX01BU0tfQ0xSX191c2JfX25vcCAwCisjZGVmaW5lIFJfVkVDVF9NQVNLX0NMUl9fZG1hOV9fQklUTlIgMjUKKyNkZWZpbmUgUl9WRUNUX01BU0tfQ0xSX19kbWE5X19XSURUSCAxCisjZGVmaW5lIFJfVkVDVF9NQVNLX0NMUl9fZG1hOV9fY2xyIDEKKyNkZWZpbmUgUl9WRUNUX01BU0tfQ0xSX19kbWE5X19ub3AgMAorI2RlZmluZSBSX1ZFQ1RfTUFTS19DTFJfX2RtYThfX0JJVE5SIDI0CisjZGVmaW5lIFJfVkVDVF9NQVNLX0NMUl9fZG1hOF9fV0lEVEggMQorI2RlZmluZSBSX1ZFQ1RfTUFTS19DTFJfX2RtYThfX2NsciAxCisjZGVmaW5lIFJfVkVDVF9NQVNLX0NMUl9fZG1hOF9fbm9wIDAKKyNkZWZpbmUgUl9WRUNUX01BU0tfQ0xSX19kbWE3X19CSVROUiAyMworI2RlZmluZSBSX1ZFQ1RfTUFTS19DTFJfX2RtYTdfX1dJRFRIIDEKKyNkZWZpbmUgUl9WRUNUX01BU0tfQ0xSX19kbWE3X19jbHIgMQorI2RlZmluZSBSX1ZFQ1RfTUFTS19DTFJfX2RtYTdfX25vcCAwCisjZGVmaW5lIFJfVkVDVF9NQVNLX0NMUl9fZG1hNl9fQklUTlIgMjIKKyNkZWZpbmUgUl9WRUNUX01BU0tfQ0xSX19kbWE2X19XSURUSCAxCisjZGVmaW5lIFJfVkVDVF9NQVNLX0NMUl9fZG1hNl9fY2xyIDEKKyNkZWZpbmUgUl9WRUNUX01BU0tfQ0xSX19kbWE2X19ub3AgMAorI2RlZmluZSBSX1ZFQ1RfTUFTS19DTFJfX2RtYTVfX0JJVE5SIDIxCisjZGVmaW5lIFJfVkVDVF9NQVNLX0NMUl9fZG1hNV9fV0lEVEggMQorI2RlZmluZSBSX1ZFQ1RfTUFTS19DTFJfX2RtYTVfX2NsciAxCisjZGVmaW5lIFJfVkVDVF9NQVNLX0NMUl9fZG1hNV9fbm9wIDAKKyNkZWZpbmUgUl9WRUNUX01BU0tfQ0xSX19kbWE0X19CSVROUiAyMAorI2RlZmluZSBSX1ZFQ1RfTUFTS19DTFJfX2RtYTRfX1dJRFRIIDEKKyNkZWZpbmUgUl9WRUNUX01BU0tfQ0xSX19kbWE0X19jbHIgMQorI2RlZmluZSBSX1ZFQ1RfTUFTS19DTFJfX2RtYTRfX25vcCAwCisjZGVmaW5lIFJfVkVDVF9NQVNLX0NMUl9fZG1hM19fQklUTlIgMTkKKyNkZWZpbmUgUl9WRUNUX01BU0tfQ0xSX19kbWEzX19XSURUSCAxCisjZGVmaW5lIFJfVkVDVF9NQVNLX0NMUl9fZG1hM19fY2xyIDEKKyNkZWZpbmUgUl9WRUNUX01BU0tfQ0xSX19kbWEzX19ub3AgMAorI2RlZmluZSBSX1ZFQ1RfTUFTS19DTFJfX2RtYTJfX0JJVE5SIDE4CisjZGVmaW5lIFJfVkVDVF9NQVNLX0NMUl9fZG1hMl9fV0lEVEggMQorI2RlZmluZSBSX1ZFQ1RfTUFTS19DTFJfX2RtYTJfX2NsciAxCisjZGVmaW5lIFJfVkVDVF9NQVNLX0NMUl9fZG1hMl9fbm9wIDAKKyNkZWZpbmUgUl9WRUNUX01BU0tfQ0xSX19kbWExX19CSVROUiAxNworI2RlZmluZSBSX1ZFQ1RfTUFTS19DTFJfX2RtYTFfX1dJRFRIIDEKKyNkZWZpbmUgUl9WRUNUX01BU0tfQ0xSX19kbWExX19jbHIgMQorI2RlZmluZSBSX1ZFQ1RfTUFTS19DTFJfX2RtYTFfX25vcCAwCisjZGVmaW5lIFJfVkVDVF9NQVNLX0NMUl9fZG1hMF9fQklUTlIgMTYKKyNkZWZpbmUgUl9WRUNUX01BU0tfQ0xSX19kbWEwX19XSURUSCAxCisjZGVmaW5lIFJfVkVDVF9NQVNLX0NMUl9fZG1hMF9fY2xyIDEKKyNkZWZpbmUgUl9WRUNUX01BU0tfQ0xSX19kbWEwX19ub3AgMAorI2RlZmluZSBSX1ZFQ1RfTUFTS19DTFJfX2V4dF9kbWExX19CSVROUiAxMworI2RlZmluZSBSX1ZFQ1RfTUFTS19DTFJfX2V4dF9kbWExX19XSURUSCAxCisjZGVmaW5lIFJfVkVDVF9NQVNLX0NMUl9fZXh0X2RtYTFfX2NsciAxCisjZGVmaW5lIFJfVkVDVF9NQVNLX0NMUl9fZXh0X2RtYTFfX25vcCAwCisjZGVmaW5lIFJfVkVDVF9NQVNLX0NMUl9fZXh0X2RtYTBfX0JJVE5SIDEyCisjZGVmaW5lIFJfVkVDVF9NQVNLX0NMUl9fZXh0X2RtYTBfX1dJRFRIIDEKKyNkZWZpbmUgUl9WRUNUX01BU0tfQ0xSX19leHRfZG1hMF9fY2xyIDEKKyNkZWZpbmUgUl9WRUNUX01BU0tfQ0xSX19leHRfZG1hMF9fbm9wIDAKKyNkZWZpbmUgUl9WRUNUX01BU0tfQ0xSX19wYV9fQklUTlIgMTEKKyNkZWZpbmUgUl9WRUNUX01BU0tfQ0xSX19wYV9fV0lEVEggMQorI2RlZmluZSBSX1ZFQ1RfTUFTS19DTFJfX3BhX19jbHIgMQorI2RlZmluZSBSX1ZFQ1RfTUFTS19DTFJfX3BhX19ub3AgMAorI2RlZmluZSBSX1ZFQ1RfTUFTS19DTFJfX2lycV9pbnRucl9fQklUTlIgMTAKKyNkZWZpbmUgUl9WRUNUX01BU0tfQ0xSX19pcnFfaW50bnJfX1dJRFRIIDEKKyNkZWZpbmUgUl9WRUNUX01BU0tfQ0xSX19pcnFfaW50bnJfX2NsciAxCisjZGVmaW5lIFJfVkVDVF9NQVNLX0NMUl9faXJxX2ludG5yX19ub3AgMAorI2RlZmluZSBSX1ZFQ1RfTUFTS19DTFJfX3N3X19CSVROUiA5CisjZGVmaW5lIFJfVkVDVF9NQVNLX0NMUl9fc3dfX1dJRFRIIDEKKyNkZWZpbmUgUl9WRUNUX01BU0tfQ0xSX19zd19fY2xyIDEKKyNkZWZpbmUgUl9WRUNUX01BU0tfQ0xSX19zd19fbm9wIDAKKyNkZWZpbmUgUl9WRUNUX01BU0tfQ0xSX19zZXJpYWxfX0JJVE5SIDgKKyNkZWZpbmUgUl9WRUNUX01BU0tfQ0xSX19zZXJpYWxfX1dJRFRIIDEKKyNkZWZpbmUgUl9WRUNUX01BU0tfQ0xSX19zZXJpYWxfX2NsciAxCisjZGVmaW5lIFJfVkVDVF9NQVNLX0NMUl9fc2VyaWFsX19ub3AgMAorI2RlZmluZSBSX1ZFQ1RfTUFTS19DTFJfX3NubXBfX0JJVE5SIDcKKyNkZWZpbmUgUl9WRUNUX01BU0tfQ0xSX19zbm1wX19XSURUSCAxCisjZGVmaW5lIFJfVkVDVF9NQVNLX0NMUl9fc25tcF9fY2xyIDEKKyNkZWZpbmUgUl9WRUNUX01BU0tfQ0xSX19zbm1wX19ub3AgMAorI2RlZmluZSBSX1ZFQ1RfTUFTS19DTFJfX25ldHdvcmtfX0JJVE5SIDYKKyNkZWZpbmUgUl9WRUNUX01BU0tfQ0xSX19uZXR3b3JrX19XSURUSCAxCisjZGVmaW5lIFJfVkVDVF9NQVNLX0NMUl9fbmV0d29ya19fY2xyIDEKKyNkZWZpbmUgUl9WRUNUX01BU0tfQ0xSX19uZXR3b3JrX19ub3AgMAorI2RlZmluZSBSX1ZFQ1RfTUFTS19DTFJfX3Njc2kxX19CSVROUiA1CisjZGVmaW5lIFJfVkVDVF9NQVNLX0NMUl9fc2NzaTFfX1dJRFRIIDEKKyNkZWZpbmUgUl9WRUNUX01BU0tfQ0xSX19zY3NpMV9fY2xyIDEKKyNkZWZpbmUgUl9WRUNUX01BU0tfQ0xSX19zY3NpMV9fbm9wIDAKKyNkZWZpbmUgUl9WRUNUX01BU0tfQ0xSX19wYXIxX19CSVROUiA1CisjZGVmaW5lIFJfVkVDVF9NQVNLX0NMUl9fcGFyMV9fV0lEVEggMQorI2RlZmluZSBSX1ZFQ1RfTUFTS19DTFJfX3BhcjFfX2NsciAxCisjZGVmaW5lIFJfVkVDVF9NQVNLX0NMUl9fcGFyMV9fbm9wIDAKKyNkZWZpbmUgUl9WRUNUX01BU0tfQ0xSX19zY3NpMF9fQklUTlIgNAorI2RlZmluZSBSX1ZFQ1RfTUFTS19DTFJfX3Njc2kwX19XSURUSCAxCisjZGVmaW5lIFJfVkVDVF9NQVNLX0NMUl9fc2NzaTBfX2NsciAxCisjZGVmaW5lIFJfVkVDVF9NQVNLX0NMUl9fc2NzaTBfX25vcCAwCisjZGVmaW5lIFJfVkVDVF9NQVNLX0NMUl9fcGFyMF9fQklUTlIgNAorI2RlZmluZSBSX1ZFQ1RfTUFTS19DTFJfX3BhcjBfX1dJRFRIIDEKKyNkZWZpbmUgUl9WRUNUX01BU0tfQ0xSX19wYXIwX19jbHIgMQorI2RlZmluZSBSX1ZFQ1RfTUFTS19DTFJfX3BhcjBfX25vcCAwCisjZGVmaW5lIFJfVkVDVF9NQVNLX0NMUl9fYXRhX19CSVROUiA0CisjZGVmaW5lIFJfVkVDVF9NQVNLX0NMUl9fYXRhX19XSURUSCAxCisjZGVmaW5lIFJfVkVDVF9NQVNLX0NMUl9fYXRhX19jbHIgMQorI2RlZmluZSBSX1ZFQ1RfTUFTS19DTFJfX2F0YV9fbm9wIDAKKyNkZWZpbmUgUl9WRUNUX01BU0tfQ0xSX19taW9fX0JJVE5SIDQKKyNkZWZpbmUgUl9WRUNUX01BU0tfQ0xSX19taW9fX1dJRFRIIDEKKyNkZWZpbmUgUl9WRUNUX01BU0tfQ0xSX19taW9fX2NsciAxCisjZGVmaW5lIFJfVkVDVF9NQVNLX0NMUl9fbWlvX19ub3AgMAorI2RlZmluZSBSX1ZFQ1RfTUFTS19DTFJfX3RpbWVyMV9fQklUTlIgMworI2RlZmluZSBSX1ZFQ1RfTUFTS19DTFJfX3RpbWVyMV9fV0lEVEggMQorI2RlZmluZSBSX1ZFQ1RfTUFTS19DTFJfX3RpbWVyMV9fY2xyIDEKKyNkZWZpbmUgUl9WRUNUX01BU0tfQ0xSX190aW1lcjFfX25vcCAwCisjZGVmaW5lIFJfVkVDVF9NQVNLX0NMUl9fdGltZXIwX19CSVROUiAyCisjZGVmaW5lIFJfVkVDVF9NQVNLX0NMUl9fdGltZXIwX19XSURUSCAxCisjZGVmaW5lIFJfVkVDVF9NQVNLX0NMUl9fdGltZXIwX19jbHIgMQorI2RlZmluZSBSX1ZFQ1RfTUFTS19DTFJfX3RpbWVyMF9fbm9wIDAKKyNkZWZpbmUgUl9WRUNUX01BU0tfQ0xSX19ubWlfX0JJVE5SIDEKKyNkZWZpbmUgUl9WRUNUX01BU0tfQ0xSX19ubWlfX1dJRFRIIDEKKyNkZWZpbmUgUl9WRUNUX01BU0tfQ0xSX19ubWlfX2NsciAxCisjZGVmaW5lIFJfVkVDVF9NQVNLX0NMUl9fbm1pX19ub3AgMAorI2RlZmluZSBSX1ZFQ1RfTUFTS19DTFJfX3NvbWVfX0JJVE5SIDAKKyNkZWZpbmUgUl9WRUNUX01BU0tfQ0xSX19zb21lX19XSURUSCAxCisjZGVmaW5lIFJfVkVDVF9NQVNLX0NMUl9fc29tZV9fY2xyIDEKKyNkZWZpbmUgUl9WRUNUX01BU0tfQ0xSX19zb21lX19ub3AgMAorCisjZGVmaW5lIFJfVkVDVF9SRUFEIChJT19UWVBFQ0FTVF9ST19VRFdPUkQgMHhiMDAwMDBkYykKKyNkZWZpbmUgUl9WRUNUX1JFQURfX3VzYl9fQklUTlIgMzEKKyNkZWZpbmUgUl9WRUNUX1JFQURfX3VzYl9fV0lEVEggMQorI2RlZmluZSBSX1ZFQ1RfUkVBRF9fdXNiX19hY3RpdmUgMQorI2RlZmluZSBSX1ZFQ1RfUkVBRF9fdXNiX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfVkVDVF9SRUFEX19kbWE5X19CSVROUiAyNQorI2RlZmluZSBSX1ZFQ1RfUkVBRF9fZG1hOV9fV0lEVEggMQorI2RlZmluZSBSX1ZFQ1RfUkVBRF9fZG1hOV9fYWN0aXZlIDEKKyNkZWZpbmUgUl9WRUNUX1JFQURfX2RtYTlfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9WRUNUX1JFQURfX2RtYThfX0JJVE5SIDI0CisjZGVmaW5lIFJfVkVDVF9SRUFEX19kbWE4X19XSURUSCAxCisjZGVmaW5lIFJfVkVDVF9SRUFEX19kbWE4X19hY3RpdmUgMQorI2RlZmluZSBSX1ZFQ1RfUkVBRF9fZG1hOF9faW5hY3RpdmUgMAorI2RlZmluZSBSX1ZFQ1RfUkVBRF9fZG1hN19fQklUTlIgMjMKKyNkZWZpbmUgUl9WRUNUX1JFQURfX2RtYTdfX1dJRFRIIDEKKyNkZWZpbmUgUl9WRUNUX1JFQURfX2RtYTdfX2FjdGl2ZSAxCisjZGVmaW5lIFJfVkVDVF9SRUFEX19kbWE3X19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfVkVDVF9SRUFEX19kbWE2X19CSVROUiAyMgorI2RlZmluZSBSX1ZFQ1RfUkVBRF9fZG1hNl9fV0lEVEggMQorI2RlZmluZSBSX1ZFQ1RfUkVBRF9fZG1hNl9fYWN0aXZlIDEKKyNkZWZpbmUgUl9WRUNUX1JFQURfX2RtYTZfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9WRUNUX1JFQURfX2RtYTVfX0JJVE5SIDIxCisjZGVmaW5lIFJfVkVDVF9SRUFEX19kbWE1X19XSURUSCAxCisjZGVmaW5lIFJfVkVDVF9SRUFEX19kbWE1X19hY3RpdmUgMQorI2RlZmluZSBSX1ZFQ1RfUkVBRF9fZG1hNV9faW5hY3RpdmUgMAorI2RlZmluZSBSX1ZFQ1RfUkVBRF9fZG1hNF9fQklUTlIgMjAKKyNkZWZpbmUgUl9WRUNUX1JFQURfX2RtYTRfX1dJRFRIIDEKKyNkZWZpbmUgUl9WRUNUX1JFQURfX2RtYTRfX2FjdGl2ZSAxCisjZGVmaW5lIFJfVkVDVF9SRUFEX19kbWE0X19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfVkVDVF9SRUFEX19kbWEzX19CSVROUiAxOQorI2RlZmluZSBSX1ZFQ1RfUkVBRF9fZG1hM19fV0lEVEggMQorI2RlZmluZSBSX1ZFQ1RfUkVBRF9fZG1hM19fYWN0aXZlIDEKKyNkZWZpbmUgUl9WRUNUX1JFQURfX2RtYTNfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9WRUNUX1JFQURfX2RtYTJfX0JJVE5SIDE4CisjZGVmaW5lIFJfVkVDVF9SRUFEX19kbWEyX19XSURUSCAxCisjZGVmaW5lIFJfVkVDVF9SRUFEX19kbWEyX19hY3RpdmUgMQorI2RlZmluZSBSX1ZFQ1RfUkVBRF9fZG1hMl9faW5hY3RpdmUgMAorI2RlZmluZSBSX1ZFQ1RfUkVBRF9fZG1hMV9fQklUTlIgMTcKKyNkZWZpbmUgUl9WRUNUX1JFQURfX2RtYTFfX1dJRFRIIDEKKyNkZWZpbmUgUl9WRUNUX1JFQURfX2RtYTFfX2FjdGl2ZSAxCisjZGVmaW5lIFJfVkVDVF9SRUFEX19kbWExX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfVkVDVF9SRUFEX19kbWEwX19CSVROUiAxNgorI2RlZmluZSBSX1ZFQ1RfUkVBRF9fZG1hMF9fV0lEVEggMQorI2RlZmluZSBSX1ZFQ1RfUkVBRF9fZG1hMF9fYWN0aXZlIDEKKyNkZWZpbmUgUl9WRUNUX1JFQURfX2RtYTBfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9WRUNUX1JFQURfX2V4dF9kbWExX19CSVROUiAxMworI2RlZmluZSBSX1ZFQ1RfUkVBRF9fZXh0X2RtYTFfX1dJRFRIIDEKKyNkZWZpbmUgUl9WRUNUX1JFQURfX2V4dF9kbWExX19hY3RpdmUgMQorI2RlZmluZSBSX1ZFQ1RfUkVBRF9fZXh0X2RtYTFfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9WRUNUX1JFQURfX2V4dF9kbWEwX19CSVROUiAxMgorI2RlZmluZSBSX1ZFQ1RfUkVBRF9fZXh0X2RtYTBfX1dJRFRIIDEKKyNkZWZpbmUgUl9WRUNUX1JFQURfX2V4dF9kbWEwX19hY3RpdmUgMQorI2RlZmluZSBSX1ZFQ1RfUkVBRF9fZXh0X2RtYTBfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9WRUNUX1JFQURfX3BhX19CSVROUiAxMQorI2RlZmluZSBSX1ZFQ1RfUkVBRF9fcGFfX1dJRFRIIDEKKyNkZWZpbmUgUl9WRUNUX1JFQURfX3BhX19hY3RpdmUgMQorI2RlZmluZSBSX1ZFQ1RfUkVBRF9fcGFfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9WRUNUX1JFQURfX2lycV9pbnRucl9fQklUTlIgMTAKKyNkZWZpbmUgUl9WRUNUX1JFQURfX2lycV9pbnRucl9fV0lEVEggMQorI2RlZmluZSBSX1ZFQ1RfUkVBRF9faXJxX2ludG5yX19hY3RpdmUgMQorI2RlZmluZSBSX1ZFQ1RfUkVBRF9faXJxX2ludG5yX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfVkVDVF9SRUFEX19zd19fQklUTlIgOQorI2RlZmluZSBSX1ZFQ1RfUkVBRF9fc3dfX1dJRFRIIDEKKyNkZWZpbmUgUl9WRUNUX1JFQURfX3N3X19hY3RpdmUgMQorI2RlZmluZSBSX1ZFQ1RfUkVBRF9fc3dfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9WRUNUX1JFQURfX3NlcmlhbF9fQklUTlIgOAorI2RlZmluZSBSX1ZFQ1RfUkVBRF9fc2VyaWFsX19XSURUSCAxCisjZGVmaW5lIFJfVkVDVF9SRUFEX19zZXJpYWxfX2FjdGl2ZSAxCisjZGVmaW5lIFJfVkVDVF9SRUFEX19zZXJpYWxfX2luYWN0aXZlIDAKKyNkZWZpbmUgUl9WRUNUX1JFQURfX3NubXBfX0JJVE5SIDcKKyNkZWZpbmUgUl9WRUNUX1JFQURfX3NubXBfX1dJRFRIIDEKKyNkZWZpbmUgUl9WRUNUX1JFQURfX3NubXBfX2FjdGl2ZSAxCisjZGVmaW5lIFJfVkVDVF9SRUFEX19zbm1wX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfVkVDVF9SRUFEX19uZXR3b3JrX19CSVROUiA2CisjZGVmaW5lIFJfVkVDVF9SRUFEX19uZXR3b3JrX19XSURUSCAxCisjZGVmaW5lIFJfVkVDVF9SRUFEX19uZXR3b3JrX19hY3RpdmUgMQorI2RlZmluZSBSX1ZFQ1RfUkVBRF9fbmV0d29ya19faW5hY3RpdmUgMAorI2RlZmluZSBSX1ZFQ1RfUkVBRF9fc2NzaTFfX0JJVE5SIDUKKyNkZWZpbmUgUl9WRUNUX1JFQURfX3Njc2kxX19XSURUSCAxCisjZGVmaW5lIFJfVkVDVF9SRUFEX19zY3NpMV9fYWN0aXZlIDEKKyNkZWZpbmUgUl9WRUNUX1JFQURfX3Njc2kxX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfVkVDVF9SRUFEX19wYXIxX19CSVROUiA1CisjZGVmaW5lIFJfVkVDVF9SRUFEX19wYXIxX19XSURUSCAxCisjZGVmaW5lIFJfVkVDVF9SRUFEX19wYXIxX19hY3RpdmUgMQorI2RlZmluZSBSX1ZFQ1RfUkVBRF9fcGFyMV9faW5hY3RpdmUgMAorI2RlZmluZSBSX1ZFQ1RfUkVBRF9fc2NzaTBfX0JJVE5SIDQKKyNkZWZpbmUgUl9WRUNUX1JFQURfX3Njc2kwX19XSURUSCAxCisjZGVmaW5lIFJfVkVDVF9SRUFEX19zY3NpMF9fYWN0aXZlIDEKKyNkZWZpbmUgUl9WRUNUX1JFQURfX3Njc2kwX19pbmFjdGl2ZSAwCisjZGVmaW5lIFJfVkVDVF9SRUFEX19wYXIwX19CSVROUiA0CisjZGVmaW5lIFJfVkVDVF9SRUFEX19wYXIwX19XSURUSCAxCisjZGVmaW5lIFJfVkVDVF9SRUFEX19wYXIwX19hY3RpdmUgMQorI2RlZmluZSBSX1ZFQ1RfUkVBRF9fcGFyMF9faW5hY3RpdmUgMAorI2RlZmluZSBSX1ZFQ1RfUkVBRF9fYXRhX19CSVROUiA0CisjZGVmaW5lIFJfVkVDVF9SRUFEX19hdGFfX1dJRFRIIDEKKyNkZWZpbmUgUl9WRUNUX1JFQURfX2F0YV9fYWN0aXZlIDEKKyNkZWZpbmUgUl9WRUNUX1JFQURfX2F0YV9faW5hY3RpdmUgMAorI2RlZmluZSBSX1ZFQ1RfUkVBRF9fbWlvX19CSVROUiA0CisjZGVmaW5lIFJfVkVDVF9SRUFEX19taW9fX1dJRFRIIDEKKyNkZWZpbmUgUl9WRUNUX1JFQURfX21pb19fYWN0aXZlIDEKKyNkZWZpbmUgUl9WRUNUX1JFQURfX21pb19faW5hY3RpdmUgMAorI2RlZmluZSBSX1ZFQ1RfUkVBRF9fdGltZXIxX19CSVROUiAzCisjZGVmaW5lIFJfVkVDVF9SRUFEX190aW1lcjFfX1dJRFRIIDEKKyNkZWZpbmUgUl9WRUNUX1JFQURfX3RpbWVyMV9fYWN0aXZlIDEKKyNkZWZpbmUgUl9WRUNUX1JFQURfX3RpbWVyMV9faW5hY3RpdmUgMAorI2RlZmluZSBSX1ZFQ1RfUkVBRF9fdGltZXIwX19CSVROUiAyCisjZGVmaW5lIFJfVkVDVF9SRUFEX190aW1lcjBfX1dJRFRIIDEKKyNkZWZpbmUgUl9WRUNUX1JFQURfX3RpbWVyMF9fYWN0aXZlIDEKKyNkZWZpbmUgUl9WRUNUX1JFQURfX3RpbWVyMF9faW5hY3RpdmUgMAorI2RlZmluZSBSX1ZFQ1RfUkVBRF9fbm1pX19CSVROUiAxCisjZGVmaW5lIFJfVkVDVF9SRUFEX19ubWlfX1dJRFRIIDEKKyNkZWZpbmUgUl9WRUNUX1JFQURfX25taV9fYWN0aXZlIDEKKyNkZWZpbmUgUl9WRUNUX1JFQURfX25taV9faW5hY3RpdmUgMAorI2RlZmluZSBSX1ZFQ1RfUkVBRF9fc29tZV9fQklUTlIgMAorI2RlZmluZSBSX1ZFQ1RfUkVBRF9fc29tZV9fV0lEVEggMQorI2RlZmluZSBSX1ZFQ1RfUkVBRF9fc29tZV9fYWN0aXZlIDEKKyNkZWZpbmUgUl9WRUNUX1JFQURfX3NvbWVfX2luYWN0aXZlIDAKKworI2RlZmluZSBSX1ZFQ1RfTUFTS19TRVQgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMGRjKQorI2RlZmluZSBSX1ZFQ1RfTUFTS19TRVRfX3VzYl9fQklUTlIgMzEKKyNkZWZpbmUgUl9WRUNUX01BU0tfU0VUX191c2JfX1dJRFRIIDEKKyNkZWZpbmUgUl9WRUNUX01BU0tfU0VUX191c2JfX3NldCAxCisjZGVmaW5lIFJfVkVDVF9NQVNLX1NFVF9fdXNiX19ub3AgMAorI2RlZmluZSBSX1ZFQ1RfTUFTS19TRVRfX2RtYTlfX0JJVE5SIDI1CisjZGVmaW5lIFJfVkVDVF9NQVNLX1NFVF9fZG1hOV9fV0lEVEggMQorI2RlZmluZSBSX1ZFQ1RfTUFTS19TRVRfX2RtYTlfX3NldCAxCisjZGVmaW5lIFJfVkVDVF9NQVNLX1NFVF9fZG1hOV9fbm9wIDAKKyNkZWZpbmUgUl9WRUNUX01BU0tfU0VUX19kbWE4X19CSVROUiAyNAorI2RlZmluZSBSX1ZFQ1RfTUFTS19TRVRfX2RtYThfX1dJRFRIIDEKKyNkZWZpbmUgUl9WRUNUX01BU0tfU0VUX19kbWE4X19zZXQgMQorI2RlZmluZSBSX1ZFQ1RfTUFTS19TRVRfX2RtYThfX25vcCAwCisjZGVmaW5lIFJfVkVDVF9NQVNLX1NFVF9fZG1hN19fQklUTlIgMjMKKyNkZWZpbmUgUl9WRUNUX01BU0tfU0VUX19kbWE3X19XSURUSCAxCisjZGVmaW5lIFJfVkVDVF9NQVNLX1NFVF9fZG1hN19fc2V0IDEKKyNkZWZpbmUgUl9WRUNUX01BU0tfU0VUX19kbWE3X19ub3AgMAorI2RlZmluZSBSX1ZFQ1RfTUFTS19TRVRfX2RtYTZfX0JJVE5SIDIyCisjZGVmaW5lIFJfVkVDVF9NQVNLX1NFVF9fZG1hNl9fV0lEVEggMQorI2RlZmluZSBSX1ZFQ1RfTUFTS19TRVRfX2RtYTZfX3NldCAxCisjZGVmaW5lIFJfVkVDVF9NQVNLX1NFVF9fZG1hNl9fbm9wIDAKKyNkZWZpbmUgUl9WRUNUX01BU0tfU0VUX19kbWE1X19CSVROUiAyMQorI2RlZmluZSBSX1ZFQ1RfTUFTS19TRVRfX2RtYTVfX1dJRFRIIDEKKyNkZWZpbmUgUl9WRUNUX01BU0tfU0VUX19kbWE1X19zZXQgMQorI2RlZmluZSBSX1ZFQ1RfTUFTS19TRVRfX2RtYTVfX25vcCAwCisjZGVmaW5lIFJfVkVDVF9NQVNLX1NFVF9fZG1hNF9fQklUTlIgMjAKKyNkZWZpbmUgUl9WRUNUX01BU0tfU0VUX19kbWE0X19XSURUSCAxCisjZGVmaW5lIFJfVkVDVF9NQVNLX1NFVF9fZG1hNF9fc2V0IDEKKyNkZWZpbmUgUl9WRUNUX01BU0tfU0VUX19kbWE0X19ub3AgMAorI2RlZmluZSBSX1ZFQ1RfTUFTS19TRVRfX2RtYTNfX0JJVE5SIDE5CisjZGVmaW5lIFJfVkVDVF9NQVNLX1NFVF9fZG1hM19fV0lEVEggMQorI2RlZmluZSBSX1ZFQ1RfTUFTS19TRVRfX2RtYTNfX3NldCAxCisjZGVmaW5lIFJfVkVDVF9NQVNLX1NFVF9fZG1hM19fbm9wIDAKKyNkZWZpbmUgUl9WRUNUX01BU0tfU0VUX19kbWEyX19CSVROUiAxOAorI2RlZmluZSBSX1ZFQ1RfTUFTS19TRVRfX2RtYTJfX1dJRFRIIDEKKyNkZWZpbmUgUl9WRUNUX01BU0tfU0VUX19kbWEyX19zZXQgMQorI2RlZmluZSBSX1ZFQ1RfTUFTS19TRVRfX2RtYTJfX25vcCAwCisjZGVmaW5lIFJfVkVDVF9NQVNLX1NFVF9fZG1hMV9fQklUTlIgMTcKKyNkZWZpbmUgUl9WRUNUX01BU0tfU0VUX19kbWExX19XSURUSCAxCisjZGVmaW5lIFJfVkVDVF9NQVNLX1NFVF9fZG1hMV9fc2V0IDEKKyNkZWZpbmUgUl9WRUNUX01BU0tfU0VUX19kbWExX19ub3AgMAorI2RlZmluZSBSX1ZFQ1RfTUFTS19TRVRfX2RtYTBfX0JJVE5SIDE2CisjZGVmaW5lIFJfVkVDVF9NQVNLX1NFVF9fZG1hMF9fV0lEVEggMQorI2RlZmluZSBSX1ZFQ1RfTUFTS19TRVRfX2RtYTBfX3NldCAxCisjZGVmaW5lIFJfVkVDVF9NQVNLX1NFVF9fZG1hMF9fbm9wIDAKKyNkZWZpbmUgUl9WRUNUX01BU0tfU0VUX19leHRfZG1hMV9fQklUTlIgMTMKKyNkZWZpbmUgUl9WRUNUX01BU0tfU0VUX19leHRfZG1hMV9fV0lEVEggMQorI2RlZmluZSBSX1ZFQ1RfTUFTS19TRVRfX2V4dF9kbWExX19zZXQgMQorI2RlZmluZSBSX1ZFQ1RfTUFTS19TRVRfX2V4dF9kbWExX19ub3AgMAorI2RlZmluZSBSX1ZFQ1RfTUFTS19TRVRfX2V4dF9kbWEwX19CSVROUiAxMgorI2RlZmluZSBSX1ZFQ1RfTUFTS19TRVRfX2V4dF9kbWEwX19XSURUSCAxCisjZGVmaW5lIFJfVkVDVF9NQVNLX1NFVF9fZXh0X2RtYTBfX3NldCAxCisjZGVmaW5lIFJfVkVDVF9NQVNLX1NFVF9fZXh0X2RtYTBfX25vcCAwCisjZGVmaW5lIFJfVkVDVF9NQVNLX1NFVF9fcGFfX0JJVE5SIDExCisjZGVmaW5lIFJfVkVDVF9NQVNLX1NFVF9fcGFfX1dJRFRIIDEKKyNkZWZpbmUgUl9WRUNUX01BU0tfU0VUX19wYV9fc2V0IDEKKyNkZWZpbmUgUl9WRUNUX01BU0tfU0VUX19wYV9fbm9wIDAKKyNkZWZpbmUgUl9WRUNUX01BU0tfU0VUX19pcnFfaW50bnJfX0JJVE5SIDEwCisjZGVmaW5lIFJfVkVDVF9NQVNLX1NFVF9faXJxX2ludG5yX19XSURUSCAxCisjZGVmaW5lIFJfVkVDVF9NQVNLX1NFVF9faXJxX2ludG5yX19zZXQgMQorI2RlZmluZSBSX1ZFQ1RfTUFTS19TRVRfX2lycV9pbnRucl9fbm9wIDAKKyNkZWZpbmUgUl9WRUNUX01BU0tfU0VUX19zd19fQklUTlIgOQorI2RlZmluZSBSX1ZFQ1RfTUFTS19TRVRfX3N3X19XSURUSCAxCisjZGVmaW5lIFJfVkVDVF9NQVNLX1NFVF9fc3dfX3NldCAxCisjZGVmaW5lIFJfVkVDVF9NQVNLX1NFVF9fc3dfX25vcCAwCisjZGVmaW5lIFJfVkVDVF9NQVNLX1NFVF9fc2VyaWFsX19CSVROUiA4CisjZGVmaW5lIFJfVkVDVF9NQVNLX1NFVF9fc2VyaWFsX19XSURUSCAxCisjZGVmaW5lIFJfVkVDVF9NQVNLX1NFVF9fc2VyaWFsX19zZXQgMQorI2RlZmluZSBSX1ZFQ1RfTUFTS19TRVRfX3NlcmlhbF9fbm9wIDAKKyNkZWZpbmUgUl9WRUNUX01BU0tfU0VUX19zbm1wX19CSVROUiA3CisjZGVmaW5lIFJfVkVDVF9NQVNLX1NFVF9fc25tcF9fV0lEVEggMQorI2RlZmluZSBSX1ZFQ1RfTUFTS19TRVRfX3NubXBfX3NldCAxCisjZGVmaW5lIFJfVkVDVF9NQVNLX1NFVF9fc25tcF9fbm9wIDAKKyNkZWZpbmUgUl9WRUNUX01BU0tfU0VUX19uZXR3b3JrX19CSVROUiA2CisjZGVmaW5lIFJfVkVDVF9NQVNLX1NFVF9fbmV0d29ya19fV0lEVEggMQorI2RlZmluZSBSX1ZFQ1RfTUFTS19TRVRfX25ldHdvcmtfX3NldCAxCisjZGVmaW5lIFJfVkVDVF9NQVNLX1NFVF9fbmV0d29ya19fbm9wIDAKKyNkZWZpbmUgUl9WRUNUX01BU0tfU0VUX19zY3NpMV9fQklUTlIgNQorI2RlZmluZSBSX1ZFQ1RfTUFTS19TRVRfX3Njc2kxX19XSURUSCAxCisjZGVmaW5lIFJfVkVDVF9NQVNLX1NFVF9fc2NzaTFfX3NldCAxCisjZGVmaW5lIFJfVkVDVF9NQVNLX1NFVF9fc2NzaTFfX25vcCAwCisjZGVmaW5lIFJfVkVDVF9NQVNLX1NFVF9fcGFyMV9fQklUTlIgNQorI2RlZmluZSBSX1ZFQ1RfTUFTS19TRVRfX3BhcjFfX1dJRFRIIDEKKyNkZWZpbmUgUl9WRUNUX01BU0tfU0VUX19wYXIxX19zZXQgMQorI2RlZmluZSBSX1ZFQ1RfTUFTS19TRVRfX3BhcjFfX25vcCAwCisjZGVmaW5lIFJfVkVDVF9NQVNLX1NFVF9fc2NzaTBfX0JJVE5SIDQKKyNkZWZpbmUgUl9WRUNUX01BU0tfU0VUX19zY3NpMF9fV0lEVEggMQorI2RlZmluZSBSX1ZFQ1RfTUFTS19TRVRfX3Njc2kwX19zZXQgMQorI2RlZmluZSBSX1ZFQ1RfTUFTS19TRVRfX3Njc2kwX19ub3AgMAorI2RlZmluZSBSX1ZFQ1RfTUFTS19TRVRfX3BhcjBfX0JJVE5SIDQKKyNkZWZpbmUgUl9WRUNUX01BU0tfU0VUX19wYXIwX19XSURUSCAxCisjZGVmaW5lIFJfVkVDVF9NQVNLX1NFVF9fcGFyMF9fc2V0IDEKKyNkZWZpbmUgUl9WRUNUX01BU0tfU0VUX19wYXIwX19ub3AgMAorI2RlZmluZSBSX1ZFQ1RfTUFTS19TRVRfX2F0YV9fQklUTlIgNAorI2RlZmluZSBSX1ZFQ1RfTUFTS19TRVRfX2F0YV9fV0lEVEggMQorI2RlZmluZSBSX1ZFQ1RfTUFTS19TRVRfX2F0YV9fc2V0IDEKKyNkZWZpbmUgUl9WRUNUX01BU0tfU0VUX19hdGFfX25vcCAwCisjZGVmaW5lIFJfVkVDVF9NQVNLX1NFVF9fbWlvX19CSVROUiA0CisjZGVmaW5lIFJfVkVDVF9NQVNLX1NFVF9fbWlvX19XSURUSCAxCisjZGVmaW5lIFJfVkVDVF9NQVNLX1NFVF9fbWlvX19zZXQgMQorI2RlZmluZSBSX1ZFQ1RfTUFTS19TRVRfX21pb19fbm9wIDAKKyNkZWZpbmUgUl9WRUNUX01BU0tfU0VUX190aW1lcjFfX0JJVE5SIDMKKyNkZWZpbmUgUl9WRUNUX01BU0tfU0VUX190aW1lcjFfX1dJRFRIIDEKKyNkZWZpbmUgUl9WRUNUX01BU0tfU0VUX190aW1lcjFfX3NldCAxCisjZGVmaW5lIFJfVkVDVF9NQVNLX1NFVF9fdGltZXIxX19ub3AgMAorI2RlZmluZSBSX1ZFQ1RfTUFTS19TRVRfX3RpbWVyMF9fQklUTlIgMgorI2RlZmluZSBSX1ZFQ1RfTUFTS19TRVRfX3RpbWVyMF9fV0lEVEggMQorI2RlZmluZSBSX1ZFQ1RfTUFTS19TRVRfX3RpbWVyMF9fc2V0IDEKKyNkZWZpbmUgUl9WRUNUX01BU0tfU0VUX190aW1lcjBfX25vcCAwCisjZGVmaW5lIFJfVkVDVF9NQVNLX1NFVF9fbm1pX19CSVROUiAxCisjZGVmaW5lIFJfVkVDVF9NQVNLX1NFVF9fbm1pX19XSURUSCAxCisjZGVmaW5lIFJfVkVDVF9NQVNLX1NFVF9fbm1pX19zZXQgMQorI2RlZmluZSBSX1ZFQ1RfTUFTS19TRVRfX25taV9fbm9wIDAKKyNkZWZpbmUgUl9WRUNUX01BU0tfU0VUX19zb21lX19CSVROUiAwCisjZGVmaW5lIFJfVkVDVF9NQVNLX1NFVF9fc29tZV9fV0lEVEggMQorI2RlZmluZSBSX1ZFQ1RfTUFTS19TRVRfX3NvbWVfX3NldCAxCisjZGVmaW5lIFJfVkVDVF9NQVNLX1NFVF9fc29tZV9fbm9wIDAKKworLyoKKyEqIERNQSByZWdpc3RlcnMKKyEqLworCisjZGVmaW5lIFJfU0VUX0VPUCAoSU9fVFlQRUNBU1RfVURXT1JEIDB4YjAwMDAwM2MpCisjZGVmaW5lIFJfU0VUX0VPUF9fY2g5X2VvcF9fQklUTlIgMworI2RlZmluZSBSX1NFVF9FT1BfX2NoOV9lb3BfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVRfRU9QX19jaDlfZW9wX19zZXQgMQorI2RlZmluZSBSX1NFVF9FT1BfX2NoOV9lb3BfX25vcCAwCisjZGVmaW5lIFJfU0VUX0VPUF9fY2g3X2VvcF9fQklUTlIgMgorI2RlZmluZSBSX1NFVF9FT1BfX2NoN19lb3BfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVRfRU9QX19jaDdfZW9wX19zZXQgMQorI2RlZmluZSBSX1NFVF9FT1BfX2NoN19lb3BfX25vcCAwCisjZGVmaW5lIFJfU0VUX0VPUF9fY2g1X2VvcF9fQklUTlIgMQorI2RlZmluZSBSX1NFVF9FT1BfX2NoNV9lb3BfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVRfRU9QX19jaDVfZW9wX19zZXQgMQorI2RlZmluZSBSX1NFVF9FT1BfX2NoNV9lb3BfX25vcCAwCisjZGVmaW5lIFJfU0VUX0VPUF9fY2gzX2VvcF9fQklUTlIgMAorI2RlZmluZSBSX1NFVF9FT1BfX2NoM19lb3BfX1dJRFRIIDEKKyNkZWZpbmUgUl9TRVRfRU9QX19jaDNfZW9wX19zZXQgMQorI2RlZmluZSBSX1NFVF9FT1BfX2NoM19lb3BfX25vcCAwCisKKyNkZWZpbmUgUl9ETUFfQ0gwX0hXU1cgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMTAwKQorI2RlZmluZSBSX0RNQV9DSDBfSFdTV19faHdfX0JJVE5SIDE2CisjZGVmaW5lIFJfRE1BX0NIMF9IV1NXX19od19fV0lEVEggMTYKKyNkZWZpbmUgUl9ETUFfQ0gwX0hXU1dfX3N3X19CSVROUiAwCisjZGVmaW5lIFJfRE1BX0NIMF9IV1NXX19zd19fV0lEVEggMTYKKworI2RlZmluZSBSX0RNQV9DSDBfREVTQ1IgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMTBjKQorI2RlZmluZSBSX0RNQV9DSDBfREVTQ1JfX2Rlc2NyX19CSVROUiAwCisjZGVmaW5lIFJfRE1BX0NIMF9ERVNDUl9fZGVzY3JfX1dJRFRIIDMyCisKKyNkZWZpbmUgUl9ETUFfQ0gwX05FWFQgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMTA0KQorI2RlZmluZSBSX0RNQV9DSDBfTkVYVF9fbmV4dF9fQklUTlIgMAorI2RlZmluZSBSX0RNQV9DSDBfTkVYVF9fbmV4dF9fV0lEVEggMzIKKworI2RlZmluZSBSX0RNQV9DSDBfQlVGIChJT19UWVBFQ0FTVF9VRFdPUkQgMHhiMDAwMDEwOCkKKyNkZWZpbmUgUl9ETUFfQ0gwX0JVRl9fYnVmX19CSVROUiAwCisjZGVmaW5lIFJfRE1BX0NIMF9CVUZfX2J1Zl9fV0lEVEggMzIKKworI2RlZmluZSBSX0RNQV9DSDBfRklSU1QgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMWEwKQorI2RlZmluZSBSX0RNQV9DSDBfRklSU1RfX2ZpcnN0X19CSVROUiAwCisjZGVmaW5lIFJfRE1BX0NIMF9GSVJTVF9fZmlyc3RfX1dJRFRIIDMyCisKKyNkZWZpbmUgUl9ETUFfQ0gwX0NNRCAoSU9fVFlQRUNBU1RfQllURSAweGIwMDAwMWQwKQorI2RlZmluZSBSX0RNQV9DSDBfQ01EX19jbWRfX0JJVE5SIDAKKyNkZWZpbmUgUl9ETUFfQ0gwX0NNRF9fY21kX19XSURUSCAzCisjZGVmaW5lIFJfRE1BX0NIMF9DTURfX2NtZF9faG9sZCAwCisjZGVmaW5lIFJfRE1BX0NIMF9DTURfX2NtZF9fc3RhcnQgMQorI2RlZmluZSBSX0RNQV9DSDBfQ01EX19jbWRfX3Jlc3RhcnQgMworI2RlZmluZSBSX0RNQV9DSDBfQ01EX19jbWRfX2NvbnRpbnVlIDMKKyNkZWZpbmUgUl9ETUFfQ0gwX0NNRF9fY21kX19yZXNldCA0CisKKyNkZWZpbmUgUl9ETUFfQ0gwX0NMUl9JTlRSIChJT19UWVBFQ0FTVF9CWVRFIDB4YjAwMDAxZDEpCisjZGVmaW5lIFJfRE1BX0NIMF9DTFJfSU5UUl9fY2xyX2VvcF9fQklUTlIgMQorI2RlZmluZSBSX0RNQV9DSDBfQ0xSX0lOVFJfX2Nscl9lb3BfX1dJRFRIIDEKKyNkZWZpbmUgUl9ETUFfQ0gwX0NMUl9JTlRSX19jbHJfZW9wX19kbyAxCisjZGVmaW5lIFJfRE1BX0NIMF9DTFJfSU5UUl9fY2xyX2VvcF9fZG9udCAwCisjZGVmaW5lIFJfRE1BX0NIMF9DTFJfSU5UUl9fY2xyX2Rlc2NyX19CSVROUiAwCisjZGVmaW5lIFJfRE1BX0NIMF9DTFJfSU5UUl9fY2xyX2Rlc2NyX19XSURUSCAxCisjZGVmaW5lIFJfRE1BX0NIMF9DTFJfSU5UUl9fY2xyX2Rlc2NyX19kbyAxCisjZGVmaW5lIFJfRE1BX0NIMF9DTFJfSU5UUl9fY2xyX2Rlc2NyX19kb250IDAKKworI2RlZmluZSBSX0RNQV9DSDBfU1RBVFVTIChJT19UWVBFQ0FTVF9ST19CWVRFIDB4YjAwMDAxZDIpCisjZGVmaW5lIFJfRE1BX0NIMF9TVEFUVVNfX2F2YWlsX19CSVROUiAwCisjZGVmaW5lIFJfRE1BX0NIMF9TVEFUVVNfX2F2YWlsX19XSURUSCA3CisKKyNkZWZpbmUgUl9ETUFfQ0gxX0hXU1cgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMTEwKQorI2RlZmluZSBSX0RNQV9DSDFfSFdTV19faHdfX0JJVE5SIDE2CisjZGVmaW5lIFJfRE1BX0NIMV9IV1NXX19od19fV0lEVEggMTYKKyNkZWZpbmUgUl9ETUFfQ0gxX0hXU1dfX3N3X19CSVROUiAwCisjZGVmaW5lIFJfRE1BX0NIMV9IV1NXX19zd19fV0lEVEggMTYKKworI2RlZmluZSBSX0RNQV9DSDFfREVTQ1IgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMTFjKQorI2RlZmluZSBSX0RNQV9DSDFfREVTQ1JfX2Rlc2NyX19CSVROUiAwCisjZGVmaW5lIFJfRE1BX0NIMV9ERVNDUl9fZGVzY3JfX1dJRFRIIDMyCisKKyNkZWZpbmUgUl9ETUFfQ0gxX05FWFQgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMTE0KQorI2RlZmluZSBSX0RNQV9DSDFfTkVYVF9fbmV4dF9fQklUTlIgMAorI2RlZmluZSBSX0RNQV9DSDFfTkVYVF9fbmV4dF9fV0lEVEggMzIKKworI2RlZmluZSBSX0RNQV9DSDFfQlVGIChJT19UWVBFQ0FTVF9VRFdPUkQgMHhiMDAwMDExOCkKKyNkZWZpbmUgUl9ETUFfQ0gxX0JVRl9fYnVmX19CSVROUiAwCisjZGVmaW5lIFJfRE1BX0NIMV9CVUZfX2J1Zl9fV0lEVEggMzIKKworI2RlZmluZSBSX0RNQV9DSDFfRklSU1QgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMWE0KQorI2RlZmluZSBSX0RNQV9DSDFfRklSU1RfX2ZpcnN0X19CSVROUiAwCisjZGVmaW5lIFJfRE1BX0NIMV9GSVJTVF9fZmlyc3RfX1dJRFRIIDMyCisKKyNkZWZpbmUgUl9ETUFfQ0gxX0NNRCAoSU9fVFlQRUNBU1RfQllURSAweGIwMDAwMWQ0KQorI2RlZmluZSBSX0RNQV9DSDFfQ01EX19jbWRfX0JJVE5SIDAKKyNkZWZpbmUgUl9ETUFfQ0gxX0NNRF9fY21kX19XSURUSCAzCisjZGVmaW5lIFJfRE1BX0NIMV9DTURfX2NtZF9faG9sZCAwCisjZGVmaW5lIFJfRE1BX0NIMV9DTURfX2NtZF9fc3RhcnQgMQorI2RlZmluZSBSX0RNQV9DSDFfQ01EX19jbWRfX3Jlc3RhcnQgMworI2RlZmluZSBSX0RNQV9DSDFfQ01EX19jbWRfX2NvbnRpbnVlIDMKKyNkZWZpbmUgUl9ETUFfQ0gxX0NNRF9fY21kX19yZXNldCA0CisKKyNkZWZpbmUgUl9ETUFfQ0gxX0NMUl9JTlRSIChJT19UWVBFQ0FTVF9CWVRFIDB4YjAwMDAxZDUpCisjZGVmaW5lIFJfRE1BX0NIMV9DTFJfSU5UUl9fY2xyX2VvcF9fQklUTlIgMQorI2RlZmluZSBSX0RNQV9DSDFfQ0xSX0lOVFJfX2Nscl9lb3BfX1dJRFRIIDEKKyNkZWZpbmUgUl9ETUFfQ0gxX0NMUl9JTlRSX19jbHJfZW9wX19kbyAxCisjZGVmaW5lIFJfRE1BX0NIMV9DTFJfSU5UUl9fY2xyX2VvcF9fZG9udCAwCisjZGVmaW5lIFJfRE1BX0NIMV9DTFJfSU5UUl9fY2xyX2Rlc2NyX19CSVROUiAwCisjZGVmaW5lIFJfRE1BX0NIMV9DTFJfSU5UUl9fY2xyX2Rlc2NyX19XSURUSCAxCisjZGVmaW5lIFJfRE1BX0NIMV9DTFJfSU5UUl9fY2xyX2Rlc2NyX19kbyAxCisjZGVmaW5lIFJfRE1BX0NIMV9DTFJfSU5UUl9fY2xyX2Rlc2NyX19kb250IDAKKworI2RlZmluZSBSX0RNQV9DSDFfU1RBVFVTIChJT19UWVBFQ0FTVF9ST19CWVRFIDB4YjAwMDAxZDYpCisjZGVmaW5lIFJfRE1BX0NIMV9TVEFUVVNfX2F2YWlsX19CSVROUiAwCisjZGVmaW5lIFJfRE1BX0NIMV9TVEFUVVNfX2F2YWlsX19XSURUSCA3CisKKyNkZWZpbmUgUl9ETUFfQ0gyX0hXU1cgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMTIwKQorI2RlZmluZSBSX0RNQV9DSDJfSFdTV19faHdfX0JJVE5SIDE2CisjZGVmaW5lIFJfRE1BX0NIMl9IV1NXX19od19fV0lEVEggMTYKKyNkZWZpbmUgUl9ETUFfQ0gyX0hXU1dfX3N3X19CSVROUiAwCisjZGVmaW5lIFJfRE1BX0NIMl9IV1NXX19zd19fV0lEVEggMTYKKworI2RlZmluZSBSX0RNQV9DSDJfREVTQ1IgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMTJjKQorI2RlZmluZSBSX0RNQV9DSDJfREVTQ1JfX2Rlc2NyX19CSVROUiAwCisjZGVmaW5lIFJfRE1BX0NIMl9ERVNDUl9fZGVzY3JfX1dJRFRIIDMyCisKKyNkZWZpbmUgUl9ETUFfQ0gyX05FWFQgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMTI0KQorI2RlZmluZSBSX0RNQV9DSDJfTkVYVF9fbmV4dF9fQklUTlIgMAorI2RlZmluZSBSX0RNQV9DSDJfTkVYVF9fbmV4dF9fV0lEVEggMzIKKworI2RlZmluZSBSX0RNQV9DSDJfQlVGIChJT19UWVBFQ0FTVF9VRFdPUkQgMHhiMDAwMDEyOCkKKyNkZWZpbmUgUl9ETUFfQ0gyX0JVRl9fYnVmX19CSVROUiAwCisjZGVmaW5lIFJfRE1BX0NIMl9CVUZfX2J1Zl9fV0lEVEggMzIKKworI2RlZmluZSBSX0RNQV9DSDJfRklSU1QgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMWE4KQorI2RlZmluZSBSX0RNQV9DSDJfRklSU1RfX2ZpcnN0X19CSVROUiAwCisjZGVmaW5lIFJfRE1BX0NIMl9GSVJTVF9fZmlyc3RfX1dJRFRIIDMyCisKKyNkZWZpbmUgUl9ETUFfQ0gyX0NNRCAoSU9fVFlQRUNBU1RfQllURSAweGIwMDAwMWQ4KQorI2RlZmluZSBSX0RNQV9DSDJfQ01EX19jbWRfX0JJVE5SIDAKKyNkZWZpbmUgUl9ETUFfQ0gyX0NNRF9fY21kX19XSURUSCAzCisjZGVmaW5lIFJfRE1BX0NIMl9DTURfX2NtZF9faG9sZCAwCisjZGVmaW5lIFJfRE1BX0NIMl9DTURfX2NtZF9fc3RhcnQgMQorI2RlZmluZSBSX0RNQV9DSDJfQ01EX19jbWRfX3Jlc3RhcnQgMworI2RlZmluZSBSX0RNQV9DSDJfQ01EX19jbWRfX2NvbnRpbnVlIDMKKyNkZWZpbmUgUl9ETUFfQ0gyX0NNRF9fY21kX19yZXNldCA0CisKKyNkZWZpbmUgUl9ETUFfQ0gyX0NMUl9JTlRSIChJT19UWVBFQ0FTVF9CWVRFIDB4YjAwMDAxZDkpCisjZGVmaW5lIFJfRE1BX0NIMl9DTFJfSU5UUl9fY2xyX2VvcF9fQklUTlIgMQorI2RlZmluZSBSX0RNQV9DSDJfQ0xSX0lOVFJfX2Nscl9lb3BfX1dJRFRIIDEKKyNkZWZpbmUgUl9ETUFfQ0gyX0NMUl9JTlRSX19jbHJfZW9wX19kbyAxCisjZGVmaW5lIFJfRE1BX0NIMl9DTFJfSU5UUl9fY2xyX2VvcF9fZG9udCAwCisjZGVmaW5lIFJfRE1BX0NIMl9DTFJfSU5UUl9fY2xyX2Rlc2NyX19CSVROUiAwCisjZGVmaW5lIFJfRE1BX0NIMl9DTFJfSU5UUl9fY2xyX2Rlc2NyX19XSURUSCAxCisjZGVmaW5lIFJfRE1BX0NIMl9DTFJfSU5UUl9fY2xyX2Rlc2NyX19kbyAxCisjZGVmaW5lIFJfRE1BX0NIMl9DTFJfSU5UUl9fY2xyX2Rlc2NyX19kb250IDAKKworI2RlZmluZSBSX0RNQV9DSDJfU1RBVFVTIChJT19UWVBFQ0FTVF9ST19CWVRFIDB4YjAwMDAxZGEpCisjZGVmaW5lIFJfRE1BX0NIMl9TVEFUVVNfX2F2YWlsX19CSVROUiAwCisjZGVmaW5lIFJfRE1BX0NIMl9TVEFUVVNfX2F2YWlsX19XSURUSCA3CisKKyNkZWZpbmUgUl9ETUFfQ0gzX0hXU1cgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMTMwKQorI2RlZmluZSBSX0RNQV9DSDNfSFdTV19faHdfX0JJVE5SIDE2CisjZGVmaW5lIFJfRE1BX0NIM19IV1NXX19od19fV0lEVEggMTYKKyNkZWZpbmUgUl9ETUFfQ0gzX0hXU1dfX3N3X19CSVROUiAwCisjZGVmaW5lIFJfRE1BX0NIM19IV1NXX19zd19fV0lEVEggMTYKKworI2RlZmluZSBSX0RNQV9DSDNfREVTQ1IgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMTNjKQorI2RlZmluZSBSX0RNQV9DSDNfREVTQ1JfX2Rlc2NyX19CSVROUiAwCisjZGVmaW5lIFJfRE1BX0NIM19ERVNDUl9fZGVzY3JfX1dJRFRIIDMyCisKKyNkZWZpbmUgUl9ETUFfQ0gzX05FWFQgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMTM0KQorI2RlZmluZSBSX0RNQV9DSDNfTkVYVF9fbmV4dF9fQklUTlIgMAorI2RlZmluZSBSX0RNQV9DSDNfTkVYVF9fbmV4dF9fV0lEVEggMzIKKworI2RlZmluZSBSX0RNQV9DSDNfQlVGIChJT19UWVBFQ0FTVF9VRFdPUkQgMHhiMDAwMDEzOCkKKyNkZWZpbmUgUl9ETUFfQ0gzX0JVRl9fYnVmX19CSVROUiAwCisjZGVmaW5lIFJfRE1BX0NIM19CVUZfX2J1Zl9fV0lEVEggMzIKKworI2RlZmluZSBSX0RNQV9DSDNfRklSU1QgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMWFjKQorI2RlZmluZSBSX0RNQV9DSDNfRklSU1RfX2ZpcnN0X19CSVROUiAwCisjZGVmaW5lIFJfRE1BX0NIM19GSVJTVF9fZmlyc3RfX1dJRFRIIDMyCisKKyNkZWZpbmUgUl9ETUFfQ0gzX0NNRCAoSU9fVFlQRUNBU1RfQllURSAweGIwMDAwMWRjKQorI2RlZmluZSBSX0RNQV9DSDNfQ01EX19jbWRfX0JJVE5SIDAKKyNkZWZpbmUgUl9ETUFfQ0gzX0NNRF9fY21kX19XSURUSCAzCisjZGVmaW5lIFJfRE1BX0NIM19DTURfX2NtZF9faG9sZCAwCisjZGVmaW5lIFJfRE1BX0NIM19DTURfX2NtZF9fc3RhcnQgMQorI2RlZmluZSBSX0RNQV9DSDNfQ01EX19jbWRfX3Jlc3RhcnQgMworI2RlZmluZSBSX0RNQV9DSDNfQ01EX19jbWRfX2NvbnRpbnVlIDMKKyNkZWZpbmUgUl9ETUFfQ0gzX0NNRF9fY21kX19yZXNldCA0CisKKyNkZWZpbmUgUl9ETUFfQ0gzX0NMUl9JTlRSIChJT19UWVBFQ0FTVF9CWVRFIDB4YjAwMDAxZGQpCisjZGVmaW5lIFJfRE1BX0NIM19DTFJfSU5UUl9fY2xyX2VvcF9fQklUTlIgMQorI2RlZmluZSBSX0RNQV9DSDNfQ0xSX0lOVFJfX2Nscl9lb3BfX1dJRFRIIDEKKyNkZWZpbmUgUl9ETUFfQ0gzX0NMUl9JTlRSX19jbHJfZW9wX19kbyAxCisjZGVmaW5lIFJfRE1BX0NIM19DTFJfSU5UUl9fY2xyX2VvcF9fZG9udCAwCisjZGVmaW5lIFJfRE1BX0NIM19DTFJfSU5UUl9fY2xyX2Rlc2NyX19CSVROUiAwCisjZGVmaW5lIFJfRE1BX0NIM19DTFJfSU5UUl9fY2xyX2Rlc2NyX19XSURUSCAxCisjZGVmaW5lIFJfRE1BX0NIM19DTFJfSU5UUl9fY2xyX2Rlc2NyX19kbyAxCisjZGVmaW5lIFJfRE1BX0NIM19DTFJfSU5UUl9fY2xyX2Rlc2NyX19kb250IDAKKworI2RlZmluZSBSX0RNQV9DSDNfU1RBVFVTIChJT19UWVBFQ0FTVF9ST19CWVRFIDB4YjAwMDAxZGUpCisjZGVmaW5lIFJfRE1BX0NIM19TVEFUVVNfX2F2YWlsX19CSVROUiAwCisjZGVmaW5lIFJfRE1BX0NIM19TVEFUVVNfX2F2YWlsX19XSURUSCA3CisKKyNkZWZpbmUgUl9ETUFfQ0g0X0hXU1cgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMTQwKQorI2RlZmluZSBSX0RNQV9DSDRfSFdTV19faHdfX0JJVE5SIDE2CisjZGVmaW5lIFJfRE1BX0NINF9IV1NXX19od19fV0lEVEggMTYKKyNkZWZpbmUgUl9ETUFfQ0g0X0hXU1dfX3N3X19CSVROUiAwCisjZGVmaW5lIFJfRE1BX0NINF9IV1NXX19zd19fV0lEVEggMTYKKworI2RlZmluZSBSX0RNQV9DSDRfREVTQ1IgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMTRjKQorI2RlZmluZSBSX0RNQV9DSDRfREVTQ1JfX2Rlc2NyX19CSVROUiAwCisjZGVmaW5lIFJfRE1BX0NINF9ERVNDUl9fZGVzY3JfX1dJRFRIIDMyCisKKyNkZWZpbmUgUl9ETUFfQ0g0X05FWFQgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMTQ0KQorI2RlZmluZSBSX0RNQV9DSDRfTkVYVF9fbmV4dF9fQklUTlIgMAorI2RlZmluZSBSX0RNQV9DSDRfTkVYVF9fbmV4dF9fV0lEVEggMzIKKworI2RlZmluZSBSX0RNQV9DSDRfQlVGIChJT19UWVBFQ0FTVF9VRFdPUkQgMHhiMDAwMDE0OCkKKyNkZWZpbmUgUl9ETUFfQ0g0X0JVRl9fYnVmX19CSVROUiAwCisjZGVmaW5lIFJfRE1BX0NINF9CVUZfX2J1Zl9fV0lEVEggMzIKKworI2RlZmluZSBSX0RNQV9DSDRfRklSU1QgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMWIwKQorI2RlZmluZSBSX0RNQV9DSDRfRklSU1RfX2ZpcnN0X19CSVROUiAwCisjZGVmaW5lIFJfRE1BX0NINF9GSVJTVF9fZmlyc3RfX1dJRFRIIDMyCisKKyNkZWZpbmUgUl9ETUFfQ0g0X0NNRCAoSU9fVFlQRUNBU1RfQllURSAweGIwMDAwMWUwKQorI2RlZmluZSBSX0RNQV9DSDRfQ01EX19jbWRfX0JJVE5SIDAKKyNkZWZpbmUgUl9ETUFfQ0g0X0NNRF9fY21kX19XSURUSCAzCisjZGVmaW5lIFJfRE1BX0NINF9DTURfX2NtZF9faG9sZCAwCisjZGVmaW5lIFJfRE1BX0NINF9DTURfX2NtZF9fc3RhcnQgMQorI2RlZmluZSBSX0RNQV9DSDRfQ01EX19jbWRfX3Jlc3RhcnQgMworI2RlZmluZSBSX0RNQV9DSDRfQ01EX19jbWRfX2NvbnRpbnVlIDMKKyNkZWZpbmUgUl9ETUFfQ0g0X0NNRF9fY21kX19yZXNldCA0CisKKyNkZWZpbmUgUl9ETUFfQ0g0X0NMUl9JTlRSIChJT19UWVBFQ0FTVF9CWVRFIDB4YjAwMDAxZTEpCisjZGVmaW5lIFJfRE1BX0NINF9DTFJfSU5UUl9fY2xyX2VvcF9fQklUTlIgMQorI2RlZmluZSBSX0RNQV9DSDRfQ0xSX0lOVFJfX2Nscl9lb3BfX1dJRFRIIDEKKyNkZWZpbmUgUl9ETUFfQ0g0X0NMUl9JTlRSX19jbHJfZW9wX19kbyAxCisjZGVmaW5lIFJfRE1BX0NINF9DTFJfSU5UUl9fY2xyX2VvcF9fZG9udCAwCisjZGVmaW5lIFJfRE1BX0NINF9DTFJfSU5UUl9fY2xyX2Rlc2NyX19CSVROUiAwCisjZGVmaW5lIFJfRE1BX0NINF9DTFJfSU5UUl9fY2xyX2Rlc2NyX19XSURUSCAxCisjZGVmaW5lIFJfRE1BX0NINF9DTFJfSU5UUl9fY2xyX2Rlc2NyX19kbyAxCisjZGVmaW5lIFJfRE1BX0NINF9DTFJfSU5UUl9fY2xyX2Rlc2NyX19kb250IDAKKworI2RlZmluZSBSX0RNQV9DSDRfU1RBVFVTIChJT19UWVBFQ0FTVF9ST19CWVRFIDB4YjAwMDAxZTIpCisjZGVmaW5lIFJfRE1BX0NINF9TVEFUVVNfX2F2YWlsX19CSVROUiAwCisjZGVmaW5lIFJfRE1BX0NINF9TVEFUVVNfX2F2YWlsX19XSURUSCA3CisKKyNkZWZpbmUgUl9ETUFfQ0g1X0hXU1cgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMTUwKQorI2RlZmluZSBSX0RNQV9DSDVfSFdTV19faHdfX0JJVE5SIDE2CisjZGVmaW5lIFJfRE1BX0NINV9IV1NXX19od19fV0lEVEggMTYKKyNkZWZpbmUgUl9ETUFfQ0g1X0hXU1dfX3N3X19CSVROUiAwCisjZGVmaW5lIFJfRE1BX0NINV9IV1NXX19zd19fV0lEVEggMTYKKworI2RlZmluZSBSX0RNQV9DSDVfREVTQ1IgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMTVjKQorI2RlZmluZSBSX0RNQV9DSDVfREVTQ1JfX2Rlc2NyX19CSVROUiAwCisjZGVmaW5lIFJfRE1BX0NINV9ERVNDUl9fZGVzY3JfX1dJRFRIIDMyCisKKyNkZWZpbmUgUl9ETUFfQ0g1X05FWFQgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMTU0KQorI2RlZmluZSBSX0RNQV9DSDVfTkVYVF9fbmV4dF9fQklUTlIgMAorI2RlZmluZSBSX0RNQV9DSDVfTkVYVF9fbmV4dF9fV0lEVEggMzIKKworI2RlZmluZSBSX0RNQV9DSDVfQlVGIChJT19UWVBFQ0FTVF9VRFdPUkQgMHhiMDAwMDE1OCkKKyNkZWZpbmUgUl9ETUFfQ0g1X0JVRl9fYnVmX19CSVROUiAwCisjZGVmaW5lIFJfRE1BX0NINV9CVUZfX2J1Zl9fV0lEVEggMzIKKworI2RlZmluZSBSX0RNQV9DSDVfRklSU1QgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMWI0KQorI2RlZmluZSBSX0RNQV9DSDVfRklSU1RfX2ZpcnN0X19CSVROUiAwCisjZGVmaW5lIFJfRE1BX0NINV9GSVJTVF9fZmlyc3RfX1dJRFRIIDMyCisKKyNkZWZpbmUgUl9ETUFfQ0g1X0NNRCAoSU9fVFlQRUNBU1RfQllURSAweGIwMDAwMWU0KQorI2RlZmluZSBSX0RNQV9DSDVfQ01EX19jbWRfX0JJVE5SIDAKKyNkZWZpbmUgUl9ETUFfQ0g1X0NNRF9fY21kX19XSURUSCAzCisjZGVmaW5lIFJfRE1BX0NINV9DTURfX2NtZF9faG9sZCAwCisjZGVmaW5lIFJfRE1BX0NINV9DTURfX2NtZF9fc3RhcnQgMQorI2RlZmluZSBSX0RNQV9DSDVfQ01EX19jbWRfX3Jlc3RhcnQgMworI2RlZmluZSBSX0RNQV9DSDVfQ01EX19jbWRfX2NvbnRpbnVlIDMKKyNkZWZpbmUgUl9ETUFfQ0g1X0NNRF9fY21kX19yZXNldCA0CisKKyNkZWZpbmUgUl9ETUFfQ0g1X0NMUl9JTlRSIChJT19UWVBFQ0FTVF9CWVRFIDB4YjAwMDAxZTUpCisjZGVmaW5lIFJfRE1BX0NINV9DTFJfSU5UUl9fY2xyX2VvcF9fQklUTlIgMQorI2RlZmluZSBSX0RNQV9DSDVfQ0xSX0lOVFJfX2Nscl9lb3BfX1dJRFRIIDEKKyNkZWZpbmUgUl9ETUFfQ0g1X0NMUl9JTlRSX19jbHJfZW9wX19kbyAxCisjZGVmaW5lIFJfRE1BX0NINV9DTFJfSU5UUl9fY2xyX2VvcF9fZG9udCAwCisjZGVmaW5lIFJfRE1BX0NINV9DTFJfSU5UUl9fY2xyX2Rlc2NyX19CSVROUiAwCisjZGVmaW5lIFJfRE1BX0NINV9DTFJfSU5UUl9fY2xyX2Rlc2NyX19XSURUSCAxCisjZGVmaW5lIFJfRE1BX0NINV9DTFJfSU5UUl9fY2xyX2Rlc2NyX19kbyAxCisjZGVmaW5lIFJfRE1BX0NINV9DTFJfSU5UUl9fY2xyX2Rlc2NyX19kb250IDAKKworI2RlZmluZSBSX0RNQV9DSDVfU1RBVFVTIChJT19UWVBFQ0FTVF9ST19CWVRFIDB4YjAwMDAxZTYpCisjZGVmaW5lIFJfRE1BX0NINV9TVEFUVVNfX2F2YWlsX19CSVROUiAwCisjZGVmaW5lIFJfRE1BX0NINV9TVEFUVVNfX2F2YWlsX19XSURUSCA3CisKKyNkZWZpbmUgUl9ETUFfQ0g2X0hXU1cgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMTYwKQorI2RlZmluZSBSX0RNQV9DSDZfSFdTV19faHdfX0JJVE5SIDE2CisjZGVmaW5lIFJfRE1BX0NINl9IV1NXX19od19fV0lEVEggMTYKKyNkZWZpbmUgUl9ETUFfQ0g2X0hXU1dfX3N3X19CSVROUiAwCisjZGVmaW5lIFJfRE1BX0NINl9IV1NXX19zd19fV0lEVEggMTYKKworI2RlZmluZSBSX0RNQV9DSDZfREVTQ1IgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMTZjKQorI2RlZmluZSBSX0RNQV9DSDZfREVTQ1JfX2Rlc2NyX19CSVROUiAwCisjZGVmaW5lIFJfRE1BX0NINl9ERVNDUl9fZGVzY3JfX1dJRFRIIDMyCisKKyNkZWZpbmUgUl9ETUFfQ0g2X05FWFQgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMTY0KQorI2RlZmluZSBSX0RNQV9DSDZfTkVYVF9fbmV4dF9fQklUTlIgMAorI2RlZmluZSBSX0RNQV9DSDZfTkVYVF9fbmV4dF9fV0lEVEggMzIKKworI2RlZmluZSBSX0RNQV9DSDZfQlVGIChJT19UWVBFQ0FTVF9VRFdPUkQgMHhiMDAwMDE2OCkKKyNkZWZpbmUgUl9ETUFfQ0g2X0JVRl9fYnVmX19CSVROUiAwCisjZGVmaW5lIFJfRE1BX0NINl9CVUZfX2J1Zl9fV0lEVEggMzIKKworI2RlZmluZSBSX0RNQV9DSDZfRklSU1QgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMWI4KQorI2RlZmluZSBSX0RNQV9DSDZfRklSU1RfX2ZpcnN0X19CSVROUiAwCisjZGVmaW5lIFJfRE1BX0NINl9GSVJTVF9fZmlyc3RfX1dJRFRIIDMyCisKKyNkZWZpbmUgUl9ETUFfQ0g2X0NNRCAoSU9fVFlQRUNBU1RfQllURSAweGIwMDAwMWU4KQorI2RlZmluZSBSX0RNQV9DSDZfQ01EX19jbWRfX0JJVE5SIDAKKyNkZWZpbmUgUl9ETUFfQ0g2X0NNRF9fY21kX19XSURUSCAzCisjZGVmaW5lIFJfRE1BX0NINl9DTURfX2NtZF9faG9sZCAwCisjZGVmaW5lIFJfRE1BX0NINl9DTURfX2NtZF9fc3RhcnQgMQorI2RlZmluZSBSX0RNQV9DSDZfQ01EX19jbWRfX3Jlc3RhcnQgMworI2RlZmluZSBSX0RNQV9DSDZfQ01EX19jbWRfX2NvbnRpbnVlIDMKKyNkZWZpbmUgUl9ETUFfQ0g2X0NNRF9fY21kX19yZXNldCA0CisKKyNkZWZpbmUgUl9ETUFfQ0g2X0NMUl9JTlRSIChJT19UWVBFQ0FTVF9CWVRFIDB4YjAwMDAxZTkpCisjZGVmaW5lIFJfRE1BX0NINl9DTFJfSU5UUl9fY2xyX2VvcF9fQklUTlIgMQorI2RlZmluZSBSX0RNQV9DSDZfQ0xSX0lOVFJfX2Nscl9lb3BfX1dJRFRIIDEKKyNkZWZpbmUgUl9ETUFfQ0g2X0NMUl9JTlRSX19jbHJfZW9wX19kbyAxCisjZGVmaW5lIFJfRE1BX0NINl9DTFJfSU5UUl9fY2xyX2VvcF9fZG9udCAwCisjZGVmaW5lIFJfRE1BX0NINl9DTFJfSU5UUl9fY2xyX2Rlc2NyX19CSVROUiAwCisjZGVmaW5lIFJfRE1BX0NINl9DTFJfSU5UUl9fY2xyX2Rlc2NyX19XSURUSCAxCisjZGVmaW5lIFJfRE1BX0NINl9DTFJfSU5UUl9fY2xyX2Rlc2NyX19kbyAxCisjZGVmaW5lIFJfRE1BX0NINl9DTFJfSU5UUl9fY2xyX2Rlc2NyX19kb250IDAKKworI2RlZmluZSBSX0RNQV9DSDZfU1RBVFVTIChJT19UWVBFQ0FTVF9ST19CWVRFIDB4YjAwMDAxZWEpCisjZGVmaW5lIFJfRE1BX0NINl9TVEFUVVNfX2F2YWlsX19CSVROUiAwCisjZGVmaW5lIFJfRE1BX0NINl9TVEFUVVNfX2F2YWlsX19XSURUSCA3CisKKyNkZWZpbmUgUl9ETUFfQ0g3X0hXU1cgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMTcwKQorI2RlZmluZSBSX0RNQV9DSDdfSFdTV19faHdfX0JJVE5SIDE2CisjZGVmaW5lIFJfRE1BX0NIN19IV1NXX19od19fV0lEVEggMTYKKyNkZWZpbmUgUl9ETUFfQ0g3X0hXU1dfX3N3X19CSVROUiAwCisjZGVmaW5lIFJfRE1BX0NIN19IV1NXX19zd19fV0lEVEggMTYKKworI2RlZmluZSBSX0RNQV9DSDdfREVTQ1IgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMTdjKQorI2RlZmluZSBSX0RNQV9DSDdfREVTQ1JfX2Rlc2NyX19CSVROUiAwCisjZGVmaW5lIFJfRE1BX0NIN19ERVNDUl9fZGVzY3JfX1dJRFRIIDMyCisKKyNkZWZpbmUgUl9ETUFfQ0g3X05FWFQgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMTc0KQorI2RlZmluZSBSX0RNQV9DSDdfTkVYVF9fbmV4dF9fQklUTlIgMAorI2RlZmluZSBSX0RNQV9DSDdfTkVYVF9fbmV4dF9fV0lEVEggMzIKKworI2RlZmluZSBSX0RNQV9DSDdfQlVGIChJT19UWVBFQ0FTVF9VRFdPUkQgMHhiMDAwMDE3OCkKKyNkZWZpbmUgUl9ETUFfQ0g3X0JVRl9fYnVmX19CSVROUiAwCisjZGVmaW5lIFJfRE1BX0NIN19CVUZfX2J1Zl9fV0lEVEggMzIKKworI2RlZmluZSBSX0RNQV9DSDdfRklSU1QgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMWJjKQorI2RlZmluZSBSX0RNQV9DSDdfRklSU1RfX2ZpcnN0X19CSVROUiAwCisjZGVmaW5lIFJfRE1BX0NIN19GSVJTVF9fZmlyc3RfX1dJRFRIIDMyCisKKyNkZWZpbmUgUl9ETUFfQ0g3X0NNRCAoSU9fVFlQRUNBU1RfQllURSAweGIwMDAwMWVjKQorI2RlZmluZSBSX0RNQV9DSDdfQ01EX19jbWRfX0JJVE5SIDAKKyNkZWZpbmUgUl9ETUFfQ0g3X0NNRF9fY21kX19XSURUSCAzCisjZGVmaW5lIFJfRE1BX0NIN19DTURfX2NtZF9faG9sZCAwCisjZGVmaW5lIFJfRE1BX0NIN19DTURfX2NtZF9fc3RhcnQgMQorI2RlZmluZSBSX0RNQV9DSDdfQ01EX19jbWRfX3Jlc3RhcnQgMworI2RlZmluZSBSX0RNQV9DSDdfQ01EX19jbWRfX2NvbnRpbnVlIDMKKyNkZWZpbmUgUl9ETUFfQ0g3X0NNRF9fY21kX19yZXNldCA0CisKKyNkZWZpbmUgUl9ETUFfQ0g3X0NMUl9JTlRSIChJT19UWVBFQ0FTVF9CWVRFIDB4YjAwMDAxZWQpCisjZGVmaW5lIFJfRE1BX0NIN19DTFJfSU5UUl9fY2xyX2VvcF9fQklUTlIgMQorI2RlZmluZSBSX0RNQV9DSDdfQ0xSX0lOVFJfX2Nscl9lb3BfX1dJRFRIIDEKKyNkZWZpbmUgUl9ETUFfQ0g3X0NMUl9JTlRSX19jbHJfZW9wX19kbyAxCisjZGVmaW5lIFJfRE1BX0NIN19DTFJfSU5UUl9fY2xyX2VvcF9fZG9udCAwCisjZGVmaW5lIFJfRE1BX0NIN19DTFJfSU5UUl9fY2xyX2Rlc2NyX19CSVROUiAwCisjZGVmaW5lIFJfRE1BX0NIN19DTFJfSU5UUl9fY2xyX2Rlc2NyX19XSURUSCAxCisjZGVmaW5lIFJfRE1BX0NIN19DTFJfSU5UUl9fY2xyX2Rlc2NyX19kbyAxCisjZGVmaW5lIFJfRE1BX0NIN19DTFJfSU5UUl9fY2xyX2Rlc2NyX19kb250IDAKKworI2RlZmluZSBSX0RNQV9DSDdfU1RBVFVTIChJT19UWVBFQ0FTVF9ST19CWVRFIDB4YjAwMDAxZWUpCisjZGVmaW5lIFJfRE1BX0NIN19TVEFUVVNfX2F2YWlsX19CSVROUiAwCisjZGVmaW5lIFJfRE1BX0NIN19TVEFUVVNfX2F2YWlsX19XSURUSCA3CisKKyNkZWZpbmUgUl9ETUFfQ0g4X0hXU1cgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMTgwKQorI2RlZmluZSBSX0RNQV9DSDhfSFdTV19faHdfX0JJVE5SIDE2CisjZGVmaW5lIFJfRE1BX0NIOF9IV1NXX19od19fV0lEVEggMTYKKyNkZWZpbmUgUl9ETUFfQ0g4X0hXU1dfX3N3X19CSVROUiAwCisjZGVmaW5lIFJfRE1BX0NIOF9IV1NXX19zd19fV0lEVEggMTYKKworI2RlZmluZSBSX0RNQV9DSDhfREVTQ1IgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMThjKQorI2RlZmluZSBSX0RNQV9DSDhfREVTQ1JfX2Rlc2NyX19CSVROUiAwCisjZGVmaW5lIFJfRE1BX0NIOF9ERVNDUl9fZGVzY3JfX1dJRFRIIDMyCisKKyNkZWZpbmUgUl9ETUFfQ0g4X05FWFQgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMTg0KQorI2RlZmluZSBSX0RNQV9DSDhfTkVYVF9fbmV4dF9fQklUTlIgMAorI2RlZmluZSBSX0RNQV9DSDhfTkVYVF9fbmV4dF9fV0lEVEggMzIKKworI2RlZmluZSBSX0RNQV9DSDhfQlVGIChJT19UWVBFQ0FTVF9VRFdPUkQgMHhiMDAwMDE4OCkKKyNkZWZpbmUgUl9ETUFfQ0g4X0JVRl9fYnVmX19CSVROUiAwCisjZGVmaW5lIFJfRE1BX0NIOF9CVUZfX2J1Zl9fV0lEVEggMzIKKworI2RlZmluZSBSX0RNQV9DSDhfRklSU1QgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMWMwKQorI2RlZmluZSBSX0RNQV9DSDhfRklSU1RfX2ZpcnN0X19CSVROUiAwCisjZGVmaW5lIFJfRE1BX0NIOF9GSVJTVF9fZmlyc3RfX1dJRFRIIDMyCisKKyNkZWZpbmUgUl9ETUFfQ0g4X0NNRCAoSU9fVFlQRUNBU1RfQllURSAweGIwMDAwMWYwKQorI2RlZmluZSBSX0RNQV9DSDhfQ01EX19jbWRfX0JJVE5SIDAKKyNkZWZpbmUgUl9ETUFfQ0g4X0NNRF9fY21kX19XSURUSCAzCisjZGVmaW5lIFJfRE1BX0NIOF9DTURfX2NtZF9faG9sZCAwCisjZGVmaW5lIFJfRE1BX0NIOF9DTURfX2NtZF9fc3RhcnQgMQorI2RlZmluZSBSX0RNQV9DSDhfQ01EX19jbWRfX3Jlc3RhcnQgMworI2RlZmluZSBSX0RNQV9DSDhfQ01EX19jbWRfX2NvbnRpbnVlIDMKKyNkZWZpbmUgUl9ETUFfQ0g4X0NNRF9fY21kX19yZXNldCA0CisKKyNkZWZpbmUgUl9ETUFfQ0g4X0NMUl9JTlRSIChJT19UWVBFQ0FTVF9CWVRFIDB4YjAwMDAxZjEpCisjZGVmaW5lIFJfRE1BX0NIOF9DTFJfSU5UUl9fY2xyX2VvcF9fQklUTlIgMQorI2RlZmluZSBSX0RNQV9DSDhfQ0xSX0lOVFJfX2Nscl9lb3BfX1dJRFRIIDEKKyNkZWZpbmUgUl9ETUFfQ0g4X0NMUl9JTlRSX19jbHJfZW9wX19kbyAxCisjZGVmaW5lIFJfRE1BX0NIOF9DTFJfSU5UUl9fY2xyX2VvcF9fZG9udCAwCisjZGVmaW5lIFJfRE1BX0NIOF9DTFJfSU5UUl9fY2xyX2Rlc2NyX19CSVROUiAwCisjZGVmaW5lIFJfRE1BX0NIOF9DTFJfSU5UUl9fY2xyX2Rlc2NyX19XSURUSCAxCisjZGVmaW5lIFJfRE1BX0NIOF9DTFJfSU5UUl9fY2xyX2Rlc2NyX19kbyAxCisjZGVmaW5lIFJfRE1BX0NIOF9DTFJfSU5UUl9fY2xyX2Rlc2NyX19kb250IDAKKworI2RlZmluZSBSX0RNQV9DSDhfU1RBVFVTIChJT19UWVBFQ0FTVF9ST19CWVRFIDB4YjAwMDAxZjIpCisjZGVmaW5lIFJfRE1BX0NIOF9TVEFUVVNfX2F2YWlsX19CSVROUiAwCisjZGVmaW5lIFJfRE1BX0NIOF9TVEFUVVNfX2F2YWlsX19XSURUSCA3CisKKyNkZWZpbmUgUl9ETUFfQ0g4X1NVQiAoSU9fVFlQRUNBU1RfVURXT1JEIDB4YjAwMDAxOGMpCisjZGVmaW5lIFJfRE1BX0NIOF9TVUJfX3N1Yl9fQklUTlIgMAorI2RlZmluZSBSX0RNQV9DSDhfU1VCX19zdWJfX1dJRFRIIDMyCisKKyNkZWZpbmUgUl9ETUFfQ0g4X05FUCAoSU9fVFlQRUNBU1RfVURXT1JEIDB4YjAwMDAxYzApCisjZGVmaW5lIFJfRE1BX0NIOF9ORVBfX25lcF9fQklUTlIgMAorI2RlZmluZSBSX0RNQV9DSDhfTkVQX19uZXBfX1dJRFRIIDMyCisKKyNkZWZpbmUgUl9ETUFfQ0g4X1NVQjBfRVAgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMWM4KQorI2RlZmluZSBSX0RNQV9DSDhfU1VCMF9FUF9fZXBfX0JJVE5SIDAKKyNkZWZpbmUgUl9ETUFfQ0g4X1NVQjBfRVBfX2VwX19XSURUSCAzMgorCisjZGVmaW5lIFJfRE1BX0NIOF9TVUIwX0NNRCAoSU9fVFlQRUNBU1RfQllURSAweGIwMDAwMWQzKQorI2RlZmluZSBSX0RNQV9DSDhfU1VCMF9DTURfX2NtZF9fQklUTlIgMAorI2RlZmluZSBSX0RNQV9DSDhfU1VCMF9DTURfX2NtZF9fV0lEVEggMQorI2RlZmluZSBSX0RNQV9DSDhfU1VCMF9DTURfX2NtZF9fc3RvcCAwCisjZGVmaW5lIFJfRE1BX0NIOF9TVUIwX0NNRF9fY21kX19zdGFydCAxCisKKyNkZWZpbmUgUl9ETUFfQ0g4X1NVQjBfQ0xSX0lOVFIgKElPX1RZUEVDQVNUX0JZVEUgMHhiMDAwMDFlMykKKyNkZWZpbmUgUl9ETUFfQ0g4X1NVQjBfQ0xSX0lOVFJfX2Nscl9kZXNjcl9fQklUTlIgMAorI2RlZmluZSBSX0RNQV9DSDhfU1VCMF9DTFJfSU5UUl9fY2xyX2Rlc2NyX19XSURUSCAxCisjZGVmaW5lIFJfRE1BX0NIOF9TVUIwX0NMUl9JTlRSX19jbHJfZGVzY3JfX2RvbnQgMAorI2RlZmluZSBSX0RNQV9DSDhfU1VCMF9DTFJfSU5UUl9fY2xyX2Rlc2NyX19kbyAxCisKKyNkZWZpbmUgUl9ETUFfQ0g4X1NVQjFfRVAgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMWNjKQorI2RlZmluZSBSX0RNQV9DSDhfU1VCMV9FUF9fZXBfX0JJVE5SIDAKKyNkZWZpbmUgUl9ETUFfQ0g4X1NVQjFfRVBfX2VwX19XSURUSCAzMgorCisjZGVmaW5lIFJfRE1BX0NIOF9TVUIxX0NNRCAoSU9fVFlQRUNBU1RfQllURSAweGIwMDAwMWQ3KQorI2RlZmluZSBSX0RNQV9DSDhfU1VCMV9DTURfX2NtZF9fQklUTlIgMAorI2RlZmluZSBSX0RNQV9DSDhfU1VCMV9DTURfX2NtZF9fV0lEVEggMQorI2RlZmluZSBSX0RNQV9DSDhfU1VCMV9DTURfX2NtZF9fc3RvcCAwCisjZGVmaW5lIFJfRE1BX0NIOF9TVUIxX0NNRF9fY21kX19zdGFydCAxCisKKyNkZWZpbmUgUl9ETUFfQ0g4X1NVQjFfQ0xSX0lOVFIgKElPX1RZUEVDQVNUX0JZVEUgMHhiMDAwMDFlNykKKyNkZWZpbmUgUl9ETUFfQ0g4X1NVQjFfQ0xSX0lOVFJfX2Nscl9kZXNjcl9fQklUTlIgMAorI2RlZmluZSBSX0RNQV9DSDhfU1VCMV9DTFJfSU5UUl9fY2xyX2Rlc2NyX19XSURUSCAxCisjZGVmaW5lIFJfRE1BX0NIOF9TVUIxX0NMUl9JTlRSX19jbHJfZGVzY3JfX2RvbnQgMAorI2RlZmluZSBSX0RNQV9DSDhfU1VCMV9DTFJfSU5UUl9fY2xyX2Rlc2NyX19kbyAxCisKKyNkZWZpbmUgUl9ETUFfQ0g4X1NVQjJfRVAgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMWY4KQorI2RlZmluZSBSX0RNQV9DSDhfU1VCMl9FUF9fZXBfX0JJVE5SIDAKKyNkZWZpbmUgUl9ETUFfQ0g4X1NVQjJfRVBfX2VwX19XSURUSCAzMgorCisjZGVmaW5lIFJfRE1BX0NIOF9TVUIyX0NNRCAoSU9fVFlQRUNBU1RfQllURSAweGIwMDAwMWRiKQorI2RlZmluZSBSX0RNQV9DSDhfU1VCMl9DTURfX2NtZF9fQklUTlIgMAorI2RlZmluZSBSX0RNQV9DSDhfU1VCMl9DTURfX2NtZF9fV0lEVEggMQorI2RlZmluZSBSX0RNQV9DSDhfU1VCMl9DTURfX2NtZF9fc3RvcCAwCisjZGVmaW5lIFJfRE1BX0NIOF9TVUIyX0NNRF9fY21kX19zdGFydCAxCisKKyNkZWZpbmUgUl9ETUFfQ0g4X1NVQjJfQ0xSX0lOVFIgKElPX1RZUEVDQVNUX0JZVEUgMHhiMDAwMDFlYikKKyNkZWZpbmUgUl9ETUFfQ0g4X1NVQjJfQ0xSX0lOVFJfX2Nscl9kZXNjcl9fQklUTlIgMAorI2RlZmluZSBSX0RNQV9DSDhfU1VCMl9DTFJfSU5UUl9fY2xyX2Rlc2NyX19XSURUSCAxCisjZGVmaW5lIFJfRE1BX0NIOF9TVUIyX0NMUl9JTlRSX19jbHJfZGVzY3JfX2RvbnQgMAorI2RlZmluZSBSX0RNQV9DSDhfU1VCMl9DTFJfSU5UUl9fY2xyX2Rlc2NyX19kbyAxCisKKyNkZWZpbmUgUl9ETUFfQ0g4X1NVQjNfRVAgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMWZjKQorI2RlZmluZSBSX0RNQV9DSDhfU1VCM19FUF9fZXBfX0JJVE5SIDAKKyNkZWZpbmUgUl9ETUFfQ0g4X1NVQjNfRVBfX2VwX19XSURUSCAzMgorCisjZGVmaW5lIFJfRE1BX0NIOF9TVUIzX0NNRCAoSU9fVFlQRUNBU1RfQllURSAweGIwMDAwMWRmKQorI2RlZmluZSBSX0RNQV9DSDhfU1VCM19DTURfX2NtZF9fQklUTlIgMAorI2RlZmluZSBSX0RNQV9DSDhfU1VCM19DTURfX2NtZF9fV0lEVEggMQorI2RlZmluZSBSX0RNQV9DSDhfU1VCM19DTURfX2NtZF9fc3RvcCAwCisjZGVmaW5lIFJfRE1BX0NIOF9TVUIzX0NNRF9fY21kX19zdGFydCAxCisKKyNkZWZpbmUgUl9ETUFfQ0g4X1NVQjNfQ0xSX0lOVFIgKElPX1RZUEVDQVNUX0JZVEUgMHhiMDAwMDFlZikKKyNkZWZpbmUgUl9ETUFfQ0g4X1NVQjNfQ0xSX0lOVFJfX2Nscl9kZXNjcl9fQklUTlIgMAorI2RlZmluZSBSX0RNQV9DSDhfU1VCM19DTFJfSU5UUl9fY2xyX2Rlc2NyX19XSURUSCAxCisjZGVmaW5lIFJfRE1BX0NIOF9TVUIzX0NMUl9JTlRSX19jbHJfZGVzY3JfX2RvbnQgMAorI2RlZmluZSBSX0RNQV9DSDhfU1VCM19DTFJfSU5UUl9fY2xyX2Rlc2NyX19kbyAxCisKKyNkZWZpbmUgUl9ETUFfQ0g5X0hXU1cgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMTkwKQorI2RlZmluZSBSX0RNQV9DSDlfSFdTV19faHdfX0JJVE5SIDE2CisjZGVmaW5lIFJfRE1BX0NIOV9IV1NXX19od19fV0lEVEggMTYKKyNkZWZpbmUgUl9ETUFfQ0g5X0hXU1dfX3N3X19CSVROUiAwCisjZGVmaW5lIFJfRE1BX0NIOV9IV1NXX19zd19fV0lEVEggMTYKKworI2RlZmluZSBSX0RNQV9DSDlfREVTQ1IgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMTljKQorI2RlZmluZSBSX0RNQV9DSDlfREVTQ1JfX2Rlc2NyX19CSVROUiAwCisjZGVmaW5lIFJfRE1BX0NIOV9ERVNDUl9fZGVzY3JfX1dJRFRIIDMyCisKKyNkZWZpbmUgUl9ETUFfQ0g5X05FWFQgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMTk0KQorI2RlZmluZSBSX0RNQV9DSDlfTkVYVF9fbmV4dF9fQklUTlIgMAorI2RlZmluZSBSX0RNQV9DSDlfTkVYVF9fbmV4dF9fV0lEVEggMzIKKworI2RlZmluZSBSX0RNQV9DSDlfQlVGIChJT19UWVBFQ0FTVF9VRFdPUkQgMHhiMDAwMDE5OCkKKyNkZWZpbmUgUl9ETUFfQ0g5X0JVRl9fYnVmX19CSVROUiAwCisjZGVmaW5lIFJfRE1BX0NIOV9CVUZfX2J1Zl9fV0lEVEggMzIKKworI2RlZmluZSBSX0RNQV9DSDlfRklSU1QgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMWM0KQorI2RlZmluZSBSX0RNQV9DSDlfRklSU1RfX2ZpcnN0X19CSVROUiAwCisjZGVmaW5lIFJfRE1BX0NIOV9GSVJTVF9fZmlyc3RfX1dJRFRIIDMyCisKKyNkZWZpbmUgUl9ETUFfQ0g5X0NNRCAoSU9fVFlQRUNBU1RfQllURSAweGIwMDAwMWY0KQorI2RlZmluZSBSX0RNQV9DSDlfQ01EX19jbWRfX0JJVE5SIDAKKyNkZWZpbmUgUl9ETUFfQ0g5X0NNRF9fY21kX19XSURUSCAzCisjZGVmaW5lIFJfRE1BX0NIOV9DTURfX2NtZF9faG9sZCAwCisjZGVmaW5lIFJfRE1BX0NIOV9DTURfX2NtZF9fc3RhcnQgMQorI2RlZmluZSBSX0RNQV9DSDlfQ01EX19jbWRfX3Jlc3RhcnQgMworI2RlZmluZSBSX0RNQV9DSDlfQ01EX19jbWRfX2NvbnRpbnVlIDMKKyNkZWZpbmUgUl9ETUFfQ0g5X0NNRF9fY21kX19yZXNldCA0CisKKyNkZWZpbmUgUl9ETUFfQ0g5X0NMUl9JTlRSIChJT19UWVBFQ0FTVF9CWVRFIDB4YjAwMDAxZjUpCisjZGVmaW5lIFJfRE1BX0NIOV9DTFJfSU5UUl9fY2xyX2VvcF9fQklUTlIgMQorI2RlZmluZSBSX0RNQV9DSDlfQ0xSX0lOVFJfX2Nscl9lb3BfX1dJRFRIIDEKKyNkZWZpbmUgUl9ETUFfQ0g5X0NMUl9JTlRSX19jbHJfZW9wX19kbyAxCisjZGVmaW5lIFJfRE1BX0NIOV9DTFJfSU5UUl9fY2xyX2VvcF9fZG9udCAwCisjZGVmaW5lIFJfRE1BX0NIOV9DTFJfSU5UUl9fY2xyX2Rlc2NyX19CSVROUiAwCisjZGVmaW5lIFJfRE1BX0NIOV9DTFJfSU5UUl9fY2xyX2Rlc2NyX19XSURUSCAxCisjZGVmaW5lIFJfRE1BX0NIOV9DTFJfSU5UUl9fY2xyX2Rlc2NyX19kbyAxCisjZGVmaW5lIFJfRE1BX0NIOV9DTFJfSU5UUl9fY2xyX2Rlc2NyX19kb250IDAKKworI2RlZmluZSBSX0RNQV9DSDlfU1RBVFVTIChJT19UWVBFQ0FTVF9ST19CWVRFIDB4YjAwMDAxZjYpCisjZGVmaW5lIFJfRE1BX0NIOV9TVEFUVVNfX2F2YWlsX19CSVROUiAwCisjZGVmaW5lIFJfRE1BX0NIOV9TVEFUVVNfX2F2YWlsX19XSURUSCA3CisKKy8qCishKiBUZXN0IG1vZGUgcmVnaXN0ZXJzCishKi8KKworI2RlZmluZSBSX1RFU1RfTU9ERSAoSU9fVFlQRUNBU1RfVURXT1JEIDB4YjAwMDAwZmMpCisjZGVmaW5lIFJfVEVTVF9NT0RFX19zaW5nbGVfc3RlcF9fQklUTlIgMTkKKyNkZWZpbmUgUl9URVNUX01PREVfX3NpbmdsZV9zdGVwX19XSURUSCAxCisjZGVmaW5lIFJfVEVTVF9NT0RFX19zaW5nbGVfc3RlcF9fb24gMQorI2RlZmluZSBSX1RFU1RfTU9ERV9fc2luZ2xlX3N0ZXBfX29mZiAwCisjZGVmaW5lIFJfVEVTVF9NT0RFX19zdGVwX3dyX19CSVROUiAxOAorI2RlZmluZSBSX1RFU1RfTU9ERV9fc3RlcF93cl9fV0lEVEggMQorI2RlZmluZSBSX1RFU1RfTU9ERV9fc3RlcF93cl9fb24gMQorI2RlZmluZSBSX1RFU1RfTU9ERV9fc3RlcF93cl9fb2ZmIDAKKyNkZWZpbmUgUl9URVNUX01PREVfX3N0ZXBfcmRfX0JJVE5SIDE3CisjZGVmaW5lIFJfVEVTVF9NT0RFX19zdGVwX3JkX19XSURUSCAxCisjZGVmaW5lIFJfVEVTVF9NT0RFX19zdGVwX3JkX19vbiAxCisjZGVmaW5lIFJfVEVTVF9NT0RFX19zdGVwX3JkX19vZmYgMAorI2RlZmluZSBSX1RFU1RfTU9ERV9fc3RlcF9mZXRjaF9fQklUTlIgMTYKKyNkZWZpbmUgUl9URVNUX01PREVfX3N0ZXBfZmV0Y2hfX1dJRFRIIDEKKyNkZWZpbmUgUl9URVNUX01PREVfX3N0ZXBfZmV0Y2hfX29uIDEKKyNkZWZpbmUgUl9URVNUX01PREVfX3N0ZXBfZmV0Y2hfX29mZiAwCisjZGVmaW5lIFJfVEVTVF9NT0RFX19tbXVfdGVzdF9fQklUTlIgMTIKKyNkZWZpbmUgUl9URVNUX01PREVfX21tdV90ZXN0X19XSURUSCAxCisjZGVmaW5lIFJfVEVTVF9NT0RFX19tbXVfdGVzdF9fb24gMQorI2RlZmluZSBSX1RFU1RfTU9ERV9fbW11X3Rlc3RfX29mZiAwCisjZGVmaW5lIFJfVEVTVF9NT0RFX191c2JfdGVzdF9fQklUTlIgMTEKKyNkZWZpbmUgUl9URVNUX01PREVfX3VzYl90ZXN0X19XSURUSCAxCisjZGVmaW5lIFJfVEVTVF9NT0RFX191c2JfdGVzdF9fb24gMQorI2RlZmluZSBSX1RFU1RfTU9ERV9fdXNiX3Rlc3RfX29mZiAwCisjZGVmaW5lIFJfVEVTVF9NT0RFX19zY3NpX3RpbWVyX3Rlc3RfX0JJVE5SIDEwCisjZGVmaW5lIFJfVEVTVF9NT0RFX19zY3NpX3RpbWVyX3Rlc3RfX1dJRFRIIDEKKyNkZWZpbmUgUl9URVNUX01PREVfX3Njc2lfdGltZXJfdGVzdF9fb24gMQorI2RlZmluZSBSX1RFU1RfTU9ERV9fc2NzaV90aW1lcl90ZXN0X19vZmYgMAorI2RlZmluZSBSX1RFU1RfTU9ERV9fYmFja29mZl9fQklUTlIgOQorI2RlZmluZSBSX1RFU1RfTU9ERV9fYmFja29mZl9fV0lEVEggMQorI2RlZmluZSBSX1RFU1RfTU9ERV9fYmFja29mZl9fb24gMQorI2RlZmluZSBSX1RFU1RfTU9ERV9fYmFja29mZl9fb2ZmIDAKKyNkZWZpbmUgUl9URVNUX01PREVfX3NubXBfdGVzdF9fQklUTlIgOAorI2RlZmluZSBSX1RFU1RfTU9ERV9fc25tcF90ZXN0X19XSURUSCAxCisjZGVmaW5lIFJfVEVTVF9NT0RFX19zbm1wX3Rlc3RfX29uIDEKKyNkZWZpbmUgUl9URVNUX01PREVfX3NubXBfdGVzdF9fb2ZmIDAKKyNkZWZpbmUgUl9URVNUX01PREVfX3NubXBfaW5jX19CSVROUiA3CisjZGVmaW5lIFJfVEVTVF9NT0RFX19zbm1wX2luY19fV0lEVEggMQorI2RlZmluZSBSX1RFU1RfTU9ERV9fc25tcF9pbmNfX2RvIDEKKyNkZWZpbmUgUl9URVNUX01PREVfX3NubXBfaW5jX19kb250IDAKKyNkZWZpbmUgUl9URVNUX01PREVfX3Nlcl9sb29wX19CSVROUiA2CisjZGVmaW5lIFJfVEVTVF9NT0RFX19zZXJfbG9vcF9fV0lEVEggMQorI2RlZmluZSBSX1RFU1RfTU9ERV9fc2VyX2xvb3BfX29uIDEKKyNkZWZpbmUgUl9URVNUX01PREVfX3Nlcl9sb29wX19vZmYgMAorI2RlZmluZSBSX1RFU1RfTU9ERV9fYmF1ZHJhdGVfX0JJVE5SIDUKKyNkZWZpbmUgUl9URVNUX01PREVfX2JhdWRyYXRlX19XSURUSCAxCisjZGVmaW5lIFJfVEVTVF9NT0RFX19iYXVkcmF0ZV9fb24gMQorI2RlZmluZSBSX1RFU1RfTU9ERV9fYmF1ZHJhdGVfX29mZiAwCisjZGVmaW5lIFJfVEVTVF9NT0RFX190aW1lcl9fQklUTlIgMworI2RlZmluZSBSX1RFU1RfTU9ERV9fdGltZXJfX1dJRFRIIDIKKyNkZWZpbmUgUl9URVNUX01PREVfX3RpbWVyX19vZmYgMAorI2RlZmluZSBSX1RFU1RfTU9ERV9fdGltZXJfX2V2ZW4gMQorI2RlZmluZSBSX1RFU1RfTU9ERV9fdGltZXJfX29kZCAyCisjZGVmaW5lIFJfVEVTVF9NT0RFX190aW1lcl9fYWxsIDMKKyNkZWZpbmUgUl9URVNUX01PREVfX2NhY2hlX3Rlc3RfX0JJVE5SIDIKKyNkZWZpbmUgUl9URVNUX01PREVfX2NhY2hlX3Rlc3RfX1dJRFRIIDEKKyNkZWZpbmUgUl9URVNUX01PREVfX2NhY2hlX3Rlc3RfX25vcm1hbCAwCisjZGVmaW5lIFJfVEVTVF9NT0RFX19jYWNoZV90ZXN0X190ZXN0IDEKKyNkZWZpbmUgUl9URVNUX01PREVfX3RhZ190ZXN0X19CSVROUiAxCisjZGVmaW5lIFJfVEVTVF9NT0RFX190YWdfdGVzdF9fV0lEVEggMQorI2RlZmluZSBSX1RFU1RfTU9ERV9fdGFnX3Rlc3RfX25vcm1hbCAwCisjZGVmaW5lIFJfVEVTVF9NT0RFX190YWdfdGVzdF9fdGVzdCAxCisjZGVmaW5lIFJfVEVTVF9NT0RFX19jYWNoZV9lbmFibGVfX0JJVE5SIDAKKyNkZWZpbmUgUl9URVNUX01PREVfX2NhY2hlX2VuYWJsZV9fV0lEVEggMQorI2RlZmluZSBSX1RFU1RfTU9ERV9fY2FjaGVfZW5hYmxlX19lbmFibGUgMQorI2RlZmluZSBSX1RFU1RfTU9ERV9fY2FjaGVfZW5hYmxlX19kaXNhYmxlIDAKKworI2RlZmluZSBSX1NJTkdMRV9TVEVQIChJT19UWVBFQ0FTVF9CWVRFIDB4YjAwMDAwZmUpCisjZGVmaW5lIFJfU0lOR0xFX1NURVBfX3NpbmdsZV9zdGVwX19CSVROUiAzCisjZGVmaW5lIFJfU0lOR0xFX1NURVBfX3NpbmdsZV9zdGVwX19XSURUSCAxCisjZGVmaW5lIFJfU0lOR0xFX1NURVBfX3NpbmdsZV9zdGVwX19vbiAxCisjZGVmaW5lIFJfU0lOR0xFX1NURVBfX3NpbmdsZV9zdGVwX19vZmYgMAorI2RlZmluZSBSX1NJTkdMRV9TVEVQX19zdGVwX3dyX19CSVROUiAyCisjZGVmaW5lIFJfU0lOR0xFX1NURVBfX3N0ZXBfd3JfX1dJRFRIIDEKKyNkZWZpbmUgUl9TSU5HTEVfU1RFUF9fc3RlcF93cl9fb24gMQorI2RlZmluZSBSX1NJTkdMRV9TVEVQX19zdGVwX3dyX19vZmYgMAorI2RlZmluZSBSX1NJTkdMRV9TVEVQX19zdGVwX3JkX19CSVROUiAxCisjZGVmaW5lIFJfU0lOR0xFX1NURVBfX3N0ZXBfcmRfX1dJRFRIIDEKKyNkZWZpbmUgUl9TSU5HTEVfU1RFUF9fc3RlcF9yZF9fb24gMQorI2RlZmluZSBSX1NJTkdMRV9TVEVQX19zdGVwX3JkX19vZmYgMAorI2RlZmluZSBSX1NJTkdMRV9TVEVQX19zdGVwX2ZldGNoX19CSVROUiAwCisjZGVmaW5lIFJfU0lOR0xFX1NURVBfX3N0ZXBfZmV0Y2hfX1dJRFRIIDEKKyNkZWZpbmUgUl9TSU5HTEVfU1RFUF9fc3RlcF9mZXRjaF9fb24gMQorI2RlZmluZSBSX1NJTkdMRV9TVEVQX19zdGVwX2ZldGNoX19vZmYgMAorCisvKgorISogVVNCIGludGVyZmFjZSBjb250cm9sIHJlZ2lzdGVycworISovCisKKyNkZWZpbmUgUl9VU0JfUkVWSVNJT04gKElPX1RZUEVDQVNUX1JPX0JZVEUgMHhiMDAwMDIwMCkKKyNkZWZpbmUgUl9VU0JfUkVWSVNJT05fX21ham9yX19CSVROUiA0CisjZGVmaW5lIFJfVVNCX1JFVklTSU9OX19tYWpvcl9fV0lEVEggNAorI2RlZmluZSBSX1VTQl9SRVZJU0lPTl9fbWlub3JfX0JJVE5SIDAKKyNkZWZpbmUgUl9VU0JfUkVWSVNJT05fX21pbm9yX19XSURUSCA0CisKKyNkZWZpbmUgUl9VU0JfQ09NTUFORCAoSU9fVFlQRUNBU1RfQllURSAweGIwMDAwMjAxKQorI2RlZmluZSBSX1VTQl9DT01NQU5EX19wb3J0X3NlbF9fQklUTlIgNgorI2RlZmluZSBSX1VTQl9DT01NQU5EX19wb3J0X3NlbF9fV0lEVEggMgorI2RlZmluZSBSX1VTQl9DT01NQU5EX19wb3J0X3NlbF9fbm9wIDAKKyNkZWZpbmUgUl9VU0JfQ09NTUFORF9fcG9ydF9zZWxfX3BvcnQxIDEKKyNkZWZpbmUgUl9VU0JfQ09NTUFORF9fcG9ydF9zZWxfX3BvcnQyIDIKKyNkZWZpbmUgUl9VU0JfQ09NTUFORF9fcG9ydF9zZWxfX2JvdGggMworI2RlZmluZSBSX1VTQl9DT01NQU5EX19wb3J0X2NtZF9fQklUTlIgNAorI2RlZmluZSBSX1VTQl9DT01NQU5EX19wb3J0X2NtZF9fV0lEVEggMgorI2RlZmluZSBSX1VTQl9DT01NQU5EX19wb3J0X2NtZF9fcmVzZXQgMAorI2RlZmluZSBSX1VTQl9DT01NQU5EX19wb3J0X2NtZF9fZGlzYWJsZSAxCisjZGVmaW5lIFJfVVNCX0NPTU1BTkRfX3BvcnRfY21kX19zdXNwZW5kIDIKKyNkZWZpbmUgUl9VU0JfQ09NTUFORF9fcG9ydF9jbWRfX3Jlc3VtZSAzCisjZGVmaW5lIFJfVVNCX0NPTU1BTkRfX2J1c3lfX0JJVE5SIDMKKyNkZWZpbmUgUl9VU0JfQ09NTUFORF9fYnVzeV9fV0lEVEggMQorI2RlZmluZSBSX1VTQl9DT01NQU5EX19idXN5X19ubyAwCisjZGVmaW5lIFJfVVNCX0NPTU1BTkRfX2J1c3lfX3llcyAxCisjZGVmaW5lIFJfVVNCX0NPTU1BTkRfX2N0cmxfY21kX19CSVROUiAwCisjZGVmaW5lIFJfVVNCX0NPTU1BTkRfX2N0cmxfY21kX19XSURUSCAzCisjZGVmaW5lIFJfVVNCX0NPTU1BTkRfX2N0cmxfY21kX19ub3AgMAorI2RlZmluZSBSX1VTQl9DT01NQU5EX19jdHJsX2NtZF9fcmVzZXQgMQorI2RlZmluZSBSX1VTQl9DT01NQU5EX19jdHJsX2NtZF9fZGVjb25maWcgMgorI2RlZmluZSBSX1VTQl9DT01NQU5EX19jdHJsX2NtZF9faG9zdF9jb25maWcgMworI2RlZmluZSBSX1VTQl9DT01NQU5EX19jdHJsX2NtZF9fZGV2X2NvbmZpZyA0CisjZGVmaW5lIFJfVVNCX0NPTU1BTkRfX2N0cmxfY21kX19ob3N0X25vcCA1CisjZGVmaW5lIFJfVVNCX0NPTU1BTkRfX2N0cmxfY21kX19ob3N0X3J1biA2CisjZGVmaW5lIFJfVVNCX0NPTU1BTkRfX2N0cmxfY21kX19ob3N0X3N0b3AgNworCisjZGVmaW5lIFJfVVNCX0NPTU1BTkRfREVWIChJT19UWVBFQ0FTVF9CWVRFIDB4YjAwMDAyMDEpCisjZGVmaW5lIFJfVVNCX0NPTU1BTkRfREVWX19wb3J0X3NlbF9fQklUTlIgNgorI2RlZmluZSBSX1VTQl9DT01NQU5EX0RFVl9fcG9ydF9zZWxfX1dJRFRIIDIKKyNkZWZpbmUgUl9VU0JfQ09NTUFORF9ERVZfX3BvcnRfc2VsX19ub3AgMAorI2RlZmluZSBSX1VTQl9DT01NQU5EX0RFVl9fcG9ydF9zZWxfX2R1bW15MSAxCisjZGVmaW5lIFJfVVNCX0NPTU1BTkRfREVWX19wb3J0X3NlbF9fZHVtbXkyIDIKKyNkZWZpbmUgUl9VU0JfQ09NTUFORF9ERVZfX3BvcnRfc2VsX19hbnkgMworI2RlZmluZSBSX1VTQl9DT01NQU5EX0RFVl9fcG9ydF9jbWRfX0JJVE5SIDQKKyNkZWZpbmUgUl9VU0JfQ09NTUFORF9ERVZfX3BvcnRfY21kX19XSURUSCAyCisjZGVmaW5lIFJfVVNCX0NPTU1BTkRfREVWX19wb3J0X2NtZF9fYWN0aXZlIDAKKyNkZWZpbmUgUl9VU0JfQ09NTUFORF9ERVZfX3BvcnRfY21kX19wYXNzaXZlIDEKKyNkZWZpbmUgUl9VU0JfQ09NTUFORF9ERVZfX3BvcnRfY21kX19ub3AgMgorI2RlZmluZSBSX1VTQl9DT01NQU5EX0RFVl9fcG9ydF9jbWRfX3dha2V1cCAzCisjZGVmaW5lIFJfVVNCX0NPTU1BTkRfREVWX19idXN5X19CSVROUiAzCisjZGVmaW5lIFJfVVNCX0NPTU1BTkRfREVWX19idXN5X19XSURUSCAxCisjZGVmaW5lIFJfVVNCX0NPTU1BTkRfREVWX19idXN5X19ubyAwCisjZGVmaW5lIFJfVVNCX0NPTU1BTkRfREVWX19idXN5X195ZXMgMQorI2RlZmluZSBSX1VTQl9DT01NQU5EX0RFVl9fY3RybF9jbWRfX0JJVE5SIDAKKyNkZWZpbmUgUl9VU0JfQ09NTUFORF9ERVZfX2N0cmxfY21kX19XSURUSCAzCisjZGVmaW5lIFJfVVNCX0NPTU1BTkRfREVWX19jdHJsX2NtZF9fbm9wIDAKKyNkZWZpbmUgUl9VU0JfQ09NTUFORF9ERVZfX2N0cmxfY21kX19yZXNldCAxCisjZGVmaW5lIFJfVVNCX0NPTU1BTkRfREVWX19jdHJsX2NtZF9fZGVjb25maWcgMgorI2RlZmluZSBSX1VTQl9DT01NQU5EX0RFVl9fY3RybF9jbWRfX2hvc3RfY29uZmlnIDMKKyNkZWZpbmUgUl9VU0JfQ09NTUFORF9ERVZfX2N0cmxfY21kX19kZXZfY29uZmlnIDQKKyNkZWZpbmUgUl9VU0JfQ09NTUFORF9ERVZfX2N0cmxfY21kX19kZXZfYWN0aXZlIDUKKyNkZWZpbmUgUl9VU0JfQ09NTUFORF9ERVZfX2N0cmxfY21kX19kZXZfcGFzc2l2ZSA2CisjZGVmaW5lIFJfVVNCX0NPTU1BTkRfREVWX19jdHJsX2NtZF9fZGV2X25vcCA3CisKKyNkZWZpbmUgUl9VU0JfU1RBVFVTIChJT19UWVBFQ0FTVF9ST19CWVRFIDB4YjAwMDAyMDIpCisjZGVmaW5lIFJfVVNCX1NUQVRVU19fb3VydW5fX0JJVE5SIDUKKyNkZWZpbmUgUl9VU0JfU1RBVFVTX19vdXJ1bl9fV0lEVEggMQorI2RlZmluZSBSX1VTQl9TVEFUVVNfX291cnVuX19ubyAwCisjZGVmaW5lIFJfVVNCX1NUQVRVU19fb3VydW5fX3llcyAxCisjZGVmaW5lIFJfVVNCX1NUQVRVU19fcGVycm9yX19CSVROUiA0CisjZGVmaW5lIFJfVVNCX1NUQVRVU19fcGVycm9yX19XSURUSCAxCisjZGVmaW5lIFJfVVNCX1NUQVRVU19fcGVycm9yX19ubyAwCisjZGVmaW5lIFJfVVNCX1NUQVRVU19fcGVycm9yX195ZXMgMQorI2RlZmluZSBSX1VTQl9TVEFUVVNfX2RldmljZV9tb2RlX19CSVROUiAzCisjZGVmaW5lIFJfVVNCX1NUQVRVU19fZGV2aWNlX21vZGVfX1dJRFRIIDEKKyNkZWZpbmUgUl9VU0JfU1RBVFVTX19kZXZpY2VfbW9kZV9fbm8gMAorI2RlZmluZSBSX1VTQl9TVEFUVVNfX2RldmljZV9tb2RlX195ZXMgMQorI2RlZmluZSBSX1VTQl9TVEFUVVNfX2hvc3RfbW9kZV9fQklUTlIgMgorI2RlZmluZSBSX1VTQl9TVEFUVVNfX2hvc3RfbW9kZV9fV0lEVEggMQorI2RlZmluZSBSX1VTQl9TVEFUVVNfX2hvc3RfbW9kZV9fbm8gMAorI2RlZmluZSBSX1VTQl9TVEFUVVNfX2hvc3RfbW9kZV9feWVzIDEKKyNkZWZpbmUgUl9VU0JfU1RBVFVTX19zdGFydGVkX19CSVROUiAxCisjZGVmaW5lIFJfVVNCX1NUQVRVU19fc3RhcnRlZF9fV0lEVEggMQorI2RlZmluZSBSX1VTQl9TVEFUVVNfX3N0YXJ0ZWRfX25vIDAKKyNkZWZpbmUgUl9VU0JfU1RBVFVTX19zdGFydGVkX195ZXMgMQorI2RlZmluZSBSX1VTQl9TVEFUVVNfX3J1bm5pbmdfX0JJVE5SIDAKKyNkZWZpbmUgUl9VU0JfU1RBVFVTX19ydW5uaW5nX19XSURUSCAxCisjZGVmaW5lIFJfVVNCX1NUQVRVU19fcnVubmluZ19fbm8gMAorI2RlZmluZSBSX1VTQl9TVEFUVVNfX3J1bm5pbmdfX3llcyAxCisKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfU0VUIChJT19UWVBFQ0FTVF9VV09SRCAweGIwMDAwMjA0KQorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19TRVRfX2lzb19lb2ZfX0JJVE5SIDEzCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX1NFVF9faXNvX2VvZl9fV0lEVEggMQorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19TRVRfX2lzb19lb2ZfX25vcCAwCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX1NFVF9faXNvX2VvZl9fc2V0IDEKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfU0VUX19pbnRyX2VvZl9fQklUTlIgMTIKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfU0VUX19pbnRyX2VvZl9fV0lEVEggMQorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19TRVRfX2ludHJfZW9mX19ub3AgMAorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19TRVRfX2ludHJfZW9mX19zZXQgMQorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19TRVRfX2lzb19lb3RfX0JJVE5SIDExCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX1NFVF9faXNvX2VvdF9fV0lEVEggMQorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19TRVRfX2lzb19lb3RfX25vcCAwCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX1NFVF9faXNvX2VvdF9fc2V0IDEKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfU0VUX19pbnRyX2VvdF9fQklUTlIgMTAKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfU0VUX19pbnRyX2VvdF9fV0lEVEggMQorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19TRVRfX2ludHJfZW90X19ub3AgMAorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19TRVRfX2ludHJfZW90X19zZXQgMQorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19TRVRfX2N0bF9lb3RfX0JJVE5SIDkKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfU0VUX19jdGxfZW90X19XSURUSCAxCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX1NFVF9fY3RsX2VvdF9fbm9wIDAKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfU0VUX19jdGxfZW90X19zZXQgMQorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19TRVRfX2J1bGtfZW90X19CSVROUiA4CisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX1NFVF9fYnVsa19lb3RfX1dJRFRIIDEKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfU0VUX19idWxrX2VvdF9fbm9wIDAKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfU0VUX19idWxrX2VvdF9fc2V0IDEKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfU0VUX19lcGlkX2F0dG5fX0JJVE5SIDMKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfU0VUX19lcGlkX2F0dG5fX1dJRFRIIDEKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfU0VUX19lcGlkX2F0dG5fX25vcCAwCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX1NFVF9fZXBpZF9hdHRuX19zZXQgMQorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19TRVRfX3NvZl9fQklUTlIgMgorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19TRVRfX3NvZl9fV0lEVEggMQorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19TRVRfX3NvZl9fbm9wIDAKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfU0VUX19zb2ZfX3NldCAxCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX1NFVF9fcG9ydF9zdGF0dXNfX0JJVE5SIDEKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfU0VUX19wb3J0X3N0YXR1c19fV0lEVEggMQorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19TRVRfX3BvcnRfc3RhdHVzX19ub3AgMAorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19TRVRfX3BvcnRfc3RhdHVzX19zZXQgMQorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19TRVRfX2N0bF9zdGF0dXNfX0JJVE5SIDAKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfU0VUX19jdGxfc3RhdHVzX19XSURUSCAxCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX1NFVF9fY3RsX3N0YXR1c19fbm9wIDAKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfU0VUX19jdGxfc3RhdHVzX19zZXQgMQorCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX1JFQUQgKElPX1RZUEVDQVNUX1JPX1VXT1JEIDB4YjAwMDAyMDQpCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX1JFQURfX2lzb19lb2ZfX0JJVE5SIDEzCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX1JFQURfX2lzb19lb2ZfX1dJRFRIIDEKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfUkVBRF9faXNvX2VvZl9fbm9fcGVuZCAwCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX1JFQURfX2lzb19lb2ZfX3BlbmQgMQorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19SRUFEX19pbnRyX2VvZl9fQklUTlIgMTIKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfUkVBRF9faW50cl9lb2ZfX1dJRFRIIDEKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfUkVBRF9faW50cl9lb2ZfX25vX3BlbmQgMAorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19SRUFEX19pbnRyX2VvZl9fcGVuZCAxCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX1JFQURfX2lzb19lb3RfX0JJVE5SIDExCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX1JFQURfX2lzb19lb3RfX1dJRFRIIDEKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfUkVBRF9faXNvX2VvdF9fbm9fcGVuZCAwCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX1JFQURfX2lzb19lb3RfX3BlbmQgMQorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19SRUFEX19pbnRyX2VvdF9fQklUTlIgMTAKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfUkVBRF9faW50cl9lb3RfX1dJRFRIIDEKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfUkVBRF9faW50cl9lb3RfX25vX3BlbmQgMAorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19SRUFEX19pbnRyX2VvdF9fcGVuZCAxCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX1JFQURfX2N0bF9lb3RfX0JJVE5SIDkKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfUkVBRF9fY3RsX2VvdF9fV0lEVEggMQorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19SRUFEX19jdGxfZW90X19ub19wZW5kIDAKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfUkVBRF9fY3RsX2VvdF9fcGVuZCAxCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX1JFQURfX2J1bGtfZW90X19CSVROUiA4CisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX1JFQURfX2J1bGtfZW90X19XSURUSCAxCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX1JFQURfX2J1bGtfZW90X19ub19wZW5kIDAKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfUkVBRF9fYnVsa19lb3RfX3BlbmQgMQorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19SRUFEX19lcGlkX2F0dG5fX0JJVE5SIDMKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfUkVBRF9fZXBpZF9hdHRuX19XSURUSCAxCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX1JFQURfX2VwaWRfYXR0bl9fbm9fcGVuZCAwCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX1JFQURfX2VwaWRfYXR0bl9fcGVuZCAxCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX1JFQURfX3NvZl9fQklUTlIgMgorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19SRUFEX19zb2ZfX1dJRFRIIDEKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfUkVBRF9fc29mX19ub19wZW5kIDAKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfUkVBRF9fc29mX19wZW5kIDEKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfUkVBRF9fcG9ydF9zdGF0dXNfX0JJVE5SIDEKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfUkVBRF9fcG9ydF9zdGF0dXNfX1dJRFRIIDEKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfUkVBRF9fcG9ydF9zdGF0dXNfX25vX3BlbmQgMAorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19SRUFEX19wb3J0X3N0YXR1c19fcGVuZCAxCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX1JFQURfX2N0bF9zdGF0dXNfX0JJVE5SIDAKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfUkVBRF9fY3RsX3N0YXR1c19fV0lEVEggMQorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19SRUFEX19jdGxfc3RhdHVzX19ub19wZW5kIDAKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfUkVBRF9fY3RsX3N0YXR1c19fcGVuZCAxCisKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfQ0xSIChJT19UWVBFQ0FTVF9VV09SRCAweGIwMDAwMjA2KQorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19DTFJfX2lzb19lb2ZfX0JJVE5SIDEzCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX0NMUl9faXNvX2VvZl9fV0lEVEggMQorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19DTFJfX2lzb19lb2ZfX25vcCAwCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX0NMUl9faXNvX2VvZl9fY2xyIDEKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfQ0xSX19pbnRyX2VvZl9fQklUTlIgMTIKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfQ0xSX19pbnRyX2VvZl9fV0lEVEggMQorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19DTFJfX2ludHJfZW9mX19ub3AgMAorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19DTFJfX2ludHJfZW9mX19jbHIgMQorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19DTFJfX2lzb19lb3RfX0JJVE5SIDExCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX0NMUl9faXNvX2VvdF9fV0lEVEggMQorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19DTFJfX2lzb19lb3RfX25vcCAwCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX0NMUl9faXNvX2VvdF9fY2xyIDEKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfQ0xSX19pbnRyX2VvdF9fQklUTlIgMTAKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfQ0xSX19pbnRyX2VvdF9fV0lEVEggMQorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19DTFJfX2ludHJfZW90X19ub3AgMAorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19DTFJfX2ludHJfZW90X19jbHIgMQorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19DTFJfX2N0bF9lb3RfX0JJVE5SIDkKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfQ0xSX19jdGxfZW90X19XSURUSCAxCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX0NMUl9fY3RsX2VvdF9fbm9wIDAKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfQ0xSX19jdGxfZW90X19jbHIgMQorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19DTFJfX2J1bGtfZW90X19CSVROUiA4CisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX0NMUl9fYnVsa19lb3RfX1dJRFRIIDEKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfQ0xSX19idWxrX2VvdF9fbm9wIDAKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfQ0xSX19idWxrX2VvdF9fY2xyIDEKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfQ0xSX19lcGlkX2F0dG5fX0JJVE5SIDMKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfQ0xSX19lcGlkX2F0dG5fX1dJRFRIIDEKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfQ0xSX19lcGlkX2F0dG5fX25vcCAwCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX0NMUl9fZXBpZF9hdHRuX19jbHIgMQorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19DTFJfX3NvZl9fQklUTlIgMgorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19DTFJfX3NvZl9fV0lEVEggMQorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19DTFJfX3NvZl9fbm9wIDAKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfQ0xSX19zb2ZfX2NsciAxCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX0NMUl9fcG9ydF9zdGF0dXNfX0JJVE5SIDEKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfQ0xSX19wb3J0X3N0YXR1c19fV0lEVEggMQorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19DTFJfX3BvcnRfc3RhdHVzX19ub3AgMAorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19DTFJfX3BvcnRfc3RhdHVzX19jbHIgMQorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19DTFJfX2N0bF9zdGF0dXNfX0JJVE5SIDAKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfQ0xSX19jdGxfc3RhdHVzX19XSURUSCAxCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX0NMUl9fY3RsX3N0YXR1c19fbm9wIDAKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfQ0xSX19jdGxfc3RhdHVzX19jbHIgMQorCisjZGVmaW5lIFJfVVNCX0lSUV9SRUFEIChJT19UWVBFQ0FTVF9ST19VV09SRCAweGIwMDAwMjA2KQorI2RlZmluZSBSX1VTQl9JUlFfUkVBRF9faXNvX2VvZl9fQklUTlIgMTMKKyNkZWZpbmUgUl9VU0JfSVJRX1JFQURfX2lzb19lb2ZfX1dJRFRIIDEKKyNkZWZpbmUgUl9VU0JfSVJRX1JFQURfX2lzb19lb2ZfX25vX3BlbmQgMAorI2RlZmluZSBSX1VTQl9JUlFfUkVBRF9faXNvX2VvZl9fcGVuZCAxCisjZGVmaW5lIFJfVVNCX0lSUV9SRUFEX19pbnRyX2VvZl9fQklUTlIgMTIKKyNkZWZpbmUgUl9VU0JfSVJRX1JFQURfX2ludHJfZW9mX19XSURUSCAxCisjZGVmaW5lIFJfVVNCX0lSUV9SRUFEX19pbnRyX2VvZl9fbm9fcGVuZCAwCisjZGVmaW5lIFJfVVNCX0lSUV9SRUFEX19pbnRyX2VvZl9fcGVuZCAxCisjZGVmaW5lIFJfVVNCX0lSUV9SRUFEX19pc29fZW90X19CSVROUiAxMQorI2RlZmluZSBSX1VTQl9JUlFfUkVBRF9faXNvX2VvdF9fV0lEVEggMQorI2RlZmluZSBSX1VTQl9JUlFfUkVBRF9faXNvX2VvdF9fbm9fcGVuZCAwCisjZGVmaW5lIFJfVVNCX0lSUV9SRUFEX19pc29fZW90X19wZW5kIDEKKyNkZWZpbmUgUl9VU0JfSVJRX1JFQURfX2ludHJfZW90X19CSVROUiAxMAorI2RlZmluZSBSX1VTQl9JUlFfUkVBRF9faW50cl9lb3RfX1dJRFRIIDEKKyNkZWZpbmUgUl9VU0JfSVJRX1JFQURfX2ludHJfZW90X19ub19wZW5kIDAKKyNkZWZpbmUgUl9VU0JfSVJRX1JFQURfX2ludHJfZW90X19wZW5kIDEKKyNkZWZpbmUgUl9VU0JfSVJRX1JFQURfX2N0bF9lb3RfX0JJVE5SIDkKKyNkZWZpbmUgUl9VU0JfSVJRX1JFQURfX2N0bF9lb3RfX1dJRFRIIDEKKyNkZWZpbmUgUl9VU0JfSVJRX1JFQURfX2N0bF9lb3RfX25vX3BlbmQgMAorI2RlZmluZSBSX1VTQl9JUlFfUkVBRF9fY3RsX2VvdF9fcGVuZCAxCisjZGVmaW5lIFJfVVNCX0lSUV9SRUFEX19idWxrX2VvdF9fQklUTlIgOAorI2RlZmluZSBSX1VTQl9JUlFfUkVBRF9fYnVsa19lb3RfX1dJRFRIIDEKKyNkZWZpbmUgUl9VU0JfSVJRX1JFQURfX2J1bGtfZW90X19ub19wZW5kIDAKKyNkZWZpbmUgUl9VU0JfSVJRX1JFQURfX2J1bGtfZW90X19wZW5kIDEKKyNkZWZpbmUgUl9VU0JfSVJRX1JFQURfX2VwaWRfYXR0bl9fQklUTlIgMworI2RlZmluZSBSX1VTQl9JUlFfUkVBRF9fZXBpZF9hdHRuX19XSURUSCAxCisjZGVmaW5lIFJfVVNCX0lSUV9SRUFEX19lcGlkX2F0dG5fX25vX3BlbmQgMAorI2RlZmluZSBSX1VTQl9JUlFfUkVBRF9fZXBpZF9hdHRuX19wZW5kIDEKKyNkZWZpbmUgUl9VU0JfSVJRX1JFQURfX3NvZl9fQklUTlIgMgorI2RlZmluZSBSX1VTQl9JUlFfUkVBRF9fc29mX19XSURUSCAxCisjZGVmaW5lIFJfVVNCX0lSUV9SRUFEX19zb2ZfX25vX3BlbmQgMAorI2RlZmluZSBSX1VTQl9JUlFfUkVBRF9fc29mX19wZW5kIDEKKyNkZWZpbmUgUl9VU0JfSVJRX1JFQURfX3BvcnRfc3RhdHVzX19CSVROUiAxCisjZGVmaW5lIFJfVVNCX0lSUV9SRUFEX19wb3J0X3N0YXR1c19fV0lEVEggMQorI2RlZmluZSBSX1VTQl9JUlFfUkVBRF9fcG9ydF9zdGF0dXNfX25vX3BlbmQgMAorI2RlZmluZSBSX1VTQl9JUlFfUkVBRF9fcG9ydF9zdGF0dXNfX3BlbmQgMQorI2RlZmluZSBSX1VTQl9JUlFfUkVBRF9fY3RsX3N0YXR1c19fQklUTlIgMAorI2RlZmluZSBSX1VTQl9JUlFfUkVBRF9fY3RsX3N0YXR1c19fV0lEVEggMQorI2RlZmluZSBSX1VTQl9JUlFfUkVBRF9fY3RsX3N0YXR1c19fbm9fcGVuZCAwCisjZGVmaW5lIFJfVVNCX0lSUV9SRUFEX19jdGxfc3RhdHVzX19wZW5kIDEKKworI2RlZmluZSBSX1VTQl9JUlFfTUFTS19TRVRfREVWIChJT19UWVBFQ0FTVF9VV09SRCAweGIwMDAwMjA0KQorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19TRVRfREVWX19vdXRfZW90X19CSVROUiAxMgorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19TRVRfREVWX19vdXRfZW90X19XSURUSCAxCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX1NFVF9ERVZfX291dF9lb3RfX25vcCAwCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX1NFVF9ERVZfX291dF9lb3RfX3NldCAxCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX1NFVF9ERVZfX2VwM19pbl9lb3RfX0JJVE5SIDExCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX1NFVF9ERVZfX2VwM19pbl9lb3RfX1dJRFRIIDEKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfU0VUX0RFVl9fZXAzX2luX2VvdF9fbm9wIDAKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfU0VUX0RFVl9fZXAzX2luX2VvdF9fc2V0IDEKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfU0VUX0RFVl9fZXAyX2luX2VvdF9fQklUTlIgMTAKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfU0VUX0RFVl9fZXAyX2luX2VvdF9fV0lEVEggMQorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19TRVRfREVWX19lcDJfaW5fZW90X19ub3AgMAorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19TRVRfREVWX19lcDJfaW5fZW90X19zZXQgMQorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19TRVRfREVWX19lcDFfaW5fZW90X19CSVROUiA5CisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX1NFVF9ERVZfX2VwMV9pbl9lb3RfX1dJRFRIIDEKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfU0VUX0RFVl9fZXAxX2luX2VvdF9fbm9wIDAKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfU0VUX0RFVl9fZXAxX2luX2VvdF9fc2V0IDEKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfU0VUX0RFVl9fZXAwX2luX2VvdF9fQklUTlIgOAorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19TRVRfREVWX19lcDBfaW5fZW90X19XSURUSCAxCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX1NFVF9ERVZfX2VwMF9pbl9lb3RfX25vcCAwCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX1NFVF9ERVZfX2VwMF9pbl9lb3RfX3NldCAxCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX1NFVF9ERVZfX2VwaWRfYXR0bl9fQklUTlIgMworI2RlZmluZSBSX1VTQl9JUlFfTUFTS19TRVRfREVWX19lcGlkX2F0dG5fX1dJRFRIIDEKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfU0VUX0RFVl9fZXBpZF9hdHRuX19ub3AgMAorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19TRVRfREVWX19lcGlkX2F0dG5fX3NldCAxCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX1NFVF9ERVZfX3NvZl9fQklUTlIgMgorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19TRVRfREVWX19zb2ZfX1dJRFRIIDEKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfU0VUX0RFVl9fc29mX19ub3AgMAorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19TRVRfREVWX19zb2ZfX3NldCAxCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX1NFVF9ERVZfX3BvcnRfc3RhdHVzX19CSVROUiAxCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX1NFVF9ERVZfX3BvcnRfc3RhdHVzX19XSURUSCAxCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX1NFVF9ERVZfX3BvcnRfc3RhdHVzX19ub3AgMAorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19TRVRfREVWX19wb3J0X3N0YXR1c19fc2V0IDEKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfU0VUX0RFVl9fY3RsX3N0YXR1c19fQklUTlIgMAorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19TRVRfREVWX19jdGxfc3RhdHVzX19XSURUSCAxCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX1NFVF9ERVZfX2N0bF9zdGF0dXNfX25vcCAwCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX1NFVF9ERVZfX2N0bF9zdGF0dXNfX3NldCAxCisKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfUkVBRF9ERVYgKElPX1RZUEVDQVNUX1JPX1VXT1JEIDB4YjAwMDAyMDQpCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX1JFQURfREVWX19vdXRfZW90X19CSVROUiAxMgorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19SRUFEX0RFVl9fb3V0X2VvdF9fV0lEVEggMQorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19SRUFEX0RFVl9fb3V0X2VvdF9fbm9fcGVuZCAwCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX1JFQURfREVWX19vdXRfZW90X19wZW5kIDEKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfUkVBRF9ERVZfX2VwM19pbl9lb3RfX0JJVE5SIDExCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX1JFQURfREVWX19lcDNfaW5fZW90X19XSURUSCAxCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX1JFQURfREVWX19lcDNfaW5fZW90X19ub19wZW5kIDAKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfUkVBRF9ERVZfX2VwM19pbl9lb3RfX3BlbmQgMQorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19SRUFEX0RFVl9fZXAyX2luX2VvdF9fQklUTlIgMTAKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfUkVBRF9ERVZfX2VwMl9pbl9lb3RfX1dJRFRIIDEKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfUkVBRF9ERVZfX2VwMl9pbl9lb3RfX25vX3BlbmQgMAorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19SRUFEX0RFVl9fZXAyX2luX2VvdF9fcGVuZCAxCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX1JFQURfREVWX19lcDFfaW5fZW90X19CSVROUiA5CisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX1JFQURfREVWX19lcDFfaW5fZW90X19XSURUSCAxCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX1JFQURfREVWX19lcDFfaW5fZW90X19ub19wZW5kIDAKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfUkVBRF9ERVZfX2VwMV9pbl9lb3RfX3BlbmQgMQorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19SRUFEX0RFVl9fZXAwX2luX2VvdF9fQklUTlIgOAorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19SRUFEX0RFVl9fZXAwX2luX2VvdF9fV0lEVEggMQorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19SRUFEX0RFVl9fZXAwX2luX2VvdF9fbm9fcGVuZCAwCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX1JFQURfREVWX19lcDBfaW5fZW90X19wZW5kIDEKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfUkVBRF9ERVZfX2VwaWRfYXR0bl9fQklUTlIgMworI2RlZmluZSBSX1VTQl9JUlFfTUFTS19SRUFEX0RFVl9fZXBpZF9hdHRuX19XSURUSCAxCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX1JFQURfREVWX19lcGlkX2F0dG5fX25vX3BlbmQgMAorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19SRUFEX0RFVl9fZXBpZF9hdHRuX19wZW5kIDEKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfUkVBRF9ERVZfX3NvZl9fQklUTlIgMgorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19SRUFEX0RFVl9fc29mX19XSURUSCAxCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX1JFQURfREVWX19zb2ZfX25vX3BlbmQgMAorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19SRUFEX0RFVl9fc29mX19wZW5kIDEKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfUkVBRF9ERVZfX3BvcnRfc3RhdHVzX19CSVROUiAxCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX1JFQURfREVWX19wb3J0X3N0YXR1c19fV0lEVEggMQorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19SRUFEX0RFVl9fcG9ydF9zdGF0dXNfX25vX3BlbmQgMAorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19SRUFEX0RFVl9fcG9ydF9zdGF0dXNfX3BlbmQgMQorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19SRUFEX0RFVl9fY3RsX3N0YXR1c19fQklUTlIgMAorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19SRUFEX0RFVl9fY3RsX3N0YXR1c19fV0lEVEggMQorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19SRUFEX0RFVl9fY3RsX3N0YXR1c19fbm9fcGVuZCAwCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX1JFQURfREVWX19jdGxfc3RhdHVzX19wZW5kIDEKKworI2RlZmluZSBSX1VTQl9JUlFfTUFTS19DTFJfREVWIChJT19UWVBFQ0FTVF9VV09SRCAweGIwMDAwMjA2KQorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19DTFJfREVWX19vdXRfZW90X19CSVROUiAxMgorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19DTFJfREVWX19vdXRfZW90X19XSURUSCAxCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX0NMUl9ERVZfX291dF9lb3RfX25vcCAwCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX0NMUl9ERVZfX291dF9lb3RfX2NsciAxCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX0NMUl9ERVZfX2VwM19pbl9lb3RfX0JJVE5SIDExCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX0NMUl9ERVZfX2VwM19pbl9lb3RfX1dJRFRIIDEKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfQ0xSX0RFVl9fZXAzX2luX2VvdF9fbm9wIDAKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfQ0xSX0RFVl9fZXAzX2luX2VvdF9fY2xyIDEKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfQ0xSX0RFVl9fZXAyX2luX2VvdF9fQklUTlIgMTAKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfQ0xSX0RFVl9fZXAyX2luX2VvdF9fV0lEVEggMQorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19DTFJfREVWX19lcDJfaW5fZW90X19ub3AgMAorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19DTFJfREVWX19lcDJfaW5fZW90X19jbHIgMQorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19DTFJfREVWX19lcDFfaW5fZW90X19CSVROUiA5CisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX0NMUl9ERVZfX2VwMV9pbl9lb3RfX1dJRFRIIDEKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfQ0xSX0RFVl9fZXAxX2luX2VvdF9fbm9wIDAKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfQ0xSX0RFVl9fZXAxX2luX2VvdF9fY2xyIDEKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfQ0xSX0RFVl9fZXAwX2luX2VvdF9fQklUTlIgOAorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19DTFJfREVWX19lcDBfaW5fZW90X19XSURUSCAxCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX0NMUl9ERVZfX2VwMF9pbl9lb3RfX25vcCAwCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX0NMUl9ERVZfX2VwMF9pbl9lb3RfX2NsciAxCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX0NMUl9ERVZfX2VwaWRfYXR0bl9fQklUTlIgMworI2RlZmluZSBSX1VTQl9JUlFfTUFTS19DTFJfREVWX19lcGlkX2F0dG5fX1dJRFRIIDEKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfQ0xSX0RFVl9fZXBpZF9hdHRuX19ub3AgMAorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19DTFJfREVWX19lcGlkX2F0dG5fX2NsciAxCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX0NMUl9ERVZfX3NvZl9fQklUTlIgMgorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19DTFJfREVWX19zb2ZfX1dJRFRIIDEKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfQ0xSX0RFVl9fc29mX19ub3AgMAorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19DTFJfREVWX19zb2ZfX2NsciAxCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX0NMUl9ERVZfX3BvcnRfc3RhdHVzX19CSVROUiAxCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX0NMUl9ERVZfX3BvcnRfc3RhdHVzX19XSURUSCAxCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX0NMUl9ERVZfX3BvcnRfc3RhdHVzX19ub3AgMAorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19DTFJfREVWX19wb3J0X3N0YXR1c19fY2xyIDEKKyNkZWZpbmUgUl9VU0JfSVJRX01BU0tfQ0xSX0RFVl9fY3RsX3N0YXR1c19fQklUTlIgMAorI2RlZmluZSBSX1VTQl9JUlFfTUFTS19DTFJfREVWX19jdGxfc3RhdHVzX19XSURUSCAxCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX0NMUl9ERVZfX2N0bF9zdGF0dXNfX25vcCAwCisjZGVmaW5lIFJfVVNCX0lSUV9NQVNLX0NMUl9ERVZfX2N0bF9zdGF0dXNfX2NsciAxCisKKyNkZWZpbmUgUl9VU0JfSVJRX1JFQURfREVWIChJT19UWVBFQ0FTVF9ST19VV09SRCAweGIwMDAwMjA2KQorI2RlZmluZSBSX1VTQl9JUlFfUkVBRF9ERVZfX291dF9lb3RfX0JJVE5SIDEyCisjZGVmaW5lIFJfVVNCX0lSUV9SRUFEX0RFVl9fb3V0X2VvdF9fV0lEVEggMQorI2RlZmluZSBSX1VTQl9JUlFfUkVBRF9ERVZfX291dF9lb3RfX25vX3BlbmQgMAorI2RlZmluZSBSX1VTQl9JUlFfUkVBRF9ERVZfX291dF9lb3RfX3BlbmQgMQorI2RlZmluZSBSX1VTQl9JUlFfUkVBRF9ERVZfX2VwM19pbl9lb3RfX0JJVE5SIDExCisjZGVmaW5lIFJfVVNCX0lSUV9SRUFEX0RFVl9fZXAzX2luX2VvdF9fV0lEVEggMQorI2RlZmluZSBSX1VTQl9JUlFfUkVBRF9ERVZfX2VwM19pbl9lb3RfX25vX3BlbmQgMAorI2RlZmluZSBSX1VTQl9JUlFfUkVBRF9ERVZfX2VwM19pbl9lb3RfX3BlbmQgMQorI2RlZmluZSBSX1VTQl9JUlFfUkVBRF9ERVZfX2VwMl9pbl9lb3RfX0JJVE5SIDEwCisjZGVmaW5lIFJfVVNCX0lSUV9SRUFEX0RFVl9fZXAyX2luX2VvdF9fV0lEVEggMQorI2RlZmluZSBSX1VTQl9JUlFfUkVBRF9ERVZfX2VwMl9pbl9lb3RfX25vX3BlbmQgMAorI2RlZmluZSBSX1VTQl9JUlFfUkVBRF9ERVZfX2VwMl9pbl9lb3RfX3BlbmQgMQorI2RlZmluZSBSX1VTQl9JUlFfUkVBRF9ERVZfX2VwMV9pbl9lb3RfX0JJVE5SIDkKKyNkZWZpbmUgUl9VU0JfSVJRX1JFQURfREVWX19lcDFfaW5fZW90X19XSURUSCAxCisjZGVmaW5lIFJfVVNCX0lSUV9SRUFEX0RFVl9fZXAxX2luX2VvdF9fbm9fcGVuZCAwCisjZGVmaW5lIFJfVVNCX0lSUV9SRUFEX0RFVl9fZXAxX2luX2VvdF9fcGVuZCAxCisjZGVmaW5lIFJfVVNCX0lSUV9SRUFEX0RFVl9fZXAwX2luX2VvdF9fQklUTlIgOAorI2RlZmluZSBSX1VTQl9JUlFfUkVBRF9ERVZfX2VwMF9pbl9lb3RfX1dJRFRIIDEKKyNkZWZpbmUgUl9VU0JfSVJRX1JFQURfREVWX19lcDBfaW5fZW90X19ub19wZW5kIDAKKyNkZWZpbmUgUl9VU0JfSVJRX1JFQURfREVWX19lcDBfaW5fZW90X19wZW5kIDEKKyNkZWZpbmUgUl9VU0JfSVJRX1JFQURfREVWX19lcGlkX2F0dG5fX0JJVE5SIDMKKyNkZWZpbmUgUl9VU0JfSVJRX1JFQURfREVWX19lcGlkX2F0dG5fX1dJRFRIIDEKKyNkZWZpbmUgUl9VU0JfSVJRX1JFQURfREVWX19lcGlkX2F0dG5fX25vX3BlbmQgMAorI2RlZmluZSBSX1VTQl9JUlFfUkVBRF9ERVZfX2VwaWRfYXR0bl9fcGVuZCAxCisjZGVmaW5lIFJfVVNCX0lSUV9SRUFEX0RFVl9fc29mX19CSVROUiAyCisjZGVmaW5lIFJfVVNCX0lSUV9SRUFEX0RFVl9fc29mX19XSURUSCAxCisjZGVmaW5lIFJfVVNCX0lSUV9SRUFEX0RFVl9fc29mX19ub19wZW5kIDAKKyNkZWZpbmUgUl9VU0JfSVJRX1JFQURfREVWX19zb2ZfX3BlbmQgMQorI2RlZmluZSBSX1VTQl9JUlFfUkVBRF9ERVZfX3BvcnRfc3RhdHVzX19CSVROUiAxCisjZGVmaW5lIFJfVVNCX0lSUV9SRUFEX0RFVl9fcG9ydF9zdGF0dXNfX1dJRFRIIDEKKyNkZWZpbmUgUl9VU0JfSVJRX1JFQURfREVWX19wb3J0X3N0YXR1c19fbm9fcGVuZCAwCisjZGVmaW5lIFJfVVNCX0lSUV9SRUFEX0RFVl9fcG9ydF9zdGF0dXNfX3BlbmQgMQorI2RlZmluZSBSX1VTQl9JUlFfUkVBRF9ERVZfX2N0bF9zdGF0dXNfX0JJVE5SIDAKKyNkZWZpbmUgUl9VU0JfSVJRX1JFQURfREVWX19jdGxfc3RhdHVzX19XSURUSCAxCisjZGVmaW5lIFJfVVNCX0lSUV9SRUFEX0RFVl9fY3RsX3N0YXR1c19fbm9fcGVuZCAwCisjZGVmaW5lIFJfVVNCX0lSUV9SRUFEX0RFVl9fY3RsX3N0YXR1c19fcGVuZCAxCisKKyNkZWZpbmUgUl9VU0JfRk1fTlVNQkVSIChJT19UWVBFQ0FTVF9VRFdPUkQgMHhiMDAwMDIwYykKKyNkZWZpbmUgUl9VU0JfRk1fTlVNQkVSX192YWx1ZV9fQklUTlIgMAorI2RlZmluZSBSX1VTQl9GTV9OVU1CRVJfX3ZhbHVlX19XSURUSCAzMgorCisjZGVmaW5lIFJfVVNCX0ZNX0lOVEVSVkFMIChJT19UWVBFQ0FTVF9VV09SRCAweGIwMDAwMjEwKQorI2RlZmluZSBSX1VTQl9GTV9JTlRFUlZBTF9fZml4ZWRfX0JJVE5SIDYKKyNkZWZpbmUgUl9VU0JfRk1fSU5URVJWQUxfX2ZpeGVkX19XSURUSCA4CisjZGVmaW5lIFJfVVNCX0ZNX0lOVEVSVkFMX19hZGpfX0JJVE5SIDAKKyNkZWZpbmUgUl9VU0JfRk1fSU5URVJWQUxfX2Fkal9fV0lEVEggNgorCisjZGVmaW5lIFJfVVNCX0ZNX1JFTUFJTklORyAoSU9fVFlQRUNBU1RfUk9fVVdPUkQgMHhiMDAwMDIxMikKKyNkZWZpbmUgUl9VU0JfRk1fUkVNQUlOSU5HX192YWx1ZV9fQklUTlIgMAorI2RlZmluZSBSX1VTQl9GTV9SRU1BSU5JTkdfX3ZhbHVlX19XSURUSCAxNAorCisjZGVmaW5lIFJfVVNCX0ZNX1BTVEFSVCAoSU9fVFlQRUNBU1RfVVdPUkQgMHhiMDAwMDIxNCkKKyNkZWZpbmUgUl9VU0JfRk1fUFNUQVJUX192YWx1ZV9fQklUTlIgMAorI2RlZmluZSBSX1VTQl9GTV9QU1RBUlRfX3ZhbHVlX19XSURUSCAxNAorCisjZGVmaW5lIFJfVVNCX1JIX1NUQVRVUyAoSU9fVFlQRUNBU1RfUk9fQllURSAweGIwMDAwMjAzKQorI2RlZmluZSBSX1VTQl9SSF9TVEFUVVNfX2JhYmJsZTJfX0JJVE5SIDcKKyNkZWZpbmUgUl9VU0JfUkhfU1RBVFVTX19iYWJibGUyX19XSURUSCAxCisjZGVmaW5lIFJfVVNCX1JIX1NUQVRVU19fYmFiYmxlMl9fbm8gMAorI2RlZmluZSBSX1VTQl9SSF9TVEFUVVNfX2JhYmJsZTJfX3llcyAxCisjZGVmaW5lIFJfVVNCX1JIX1NUQVRVU19fYmFiYmxlMV9fQklUTlIgNgorI2RlZmluZSBSX1VTQl9SSF9TVEFUVVNfX2JhYmJsZTFfX1dJRFRIIDEKKyNkZWZpbmUgUl9VU0JfUkhfU1RBVFVTX19iYWJibGUxX19ubyAwCisjZGVmaW5lIFJfVVNCX1JIX1NUQVRVU19fYmFiYmxlMV9feWVzIDEKKyNkZWZpbmUgUl9VU0JfUkhfU1RBVFVTX19idXMxX19CSVROUiA0CisjZGVmaW5lIFJfVVNCX1JIX1NUQVRVU19fYnVzMV9fV0lEVEggMgorI2RlZmluZSBSX1VTQl9SSF9TVEFUVVNfX2J1czFfX1NFMCAwCisjZGVmaW5lIFJfVVNCX1JIX1NUQVRVU19fYnVzMV9fRGlmZjAgMQorI2RlZmluZSBSX1VTQl9SSF9TVEFUVVNfX2J1czFfX0RpZmYxIDIKKyNkZWZpbmUgUl9VU0JfUkhfU1RBVFVTX19idXMxX19TRTEgMworI2RlZmluZSBSX1VTQl9SSF9TVEFUVVNfX2J1czJfX0JJVE5SIDIKKyNkZWZpbmUgUl9VU0JfUkhfU1RBVFVTX19idXMyX19XSURUSCAyCisjZGVmaW5lIFJfVVNCX1JIX1NUQVRVU19fYnVzMl9fU0UwIDAKKyNkZWZpbmUgUl9VU0JfUkhfU1RBVFVTX19idXMyX19EaWZmMCAxCisjZGVmaW5lIFJfVVNCX1JIX1NUQVRVU19fYnVzMl9fRGlmZjEgMgorI2RlZmluZSBSX1VTQl9SSF9TVEFUVVNfX2J1czJfX1NFMSAzCisjZGVmaW5lIFJfVVNCX1JIX1NUQVRVU19fbnBvcnRzX19CSVROUiAwCisjZGVmaW5lIFJfVVNCX1JIX1NUQVRVU19fbnBvcnRzX19XSURUSCAyCisKKyNkZWZpbmUgUl9VU0JfUkhfUE9SVF9TVEFUVVNfMSAoSU9fVFlQRUNBU1RfUk9fVVdPUkQgMHhiMDAwMDIxOCkKKyNkZWZpbmUgUl9VU0JfUkhfUE9SVF9TVEFUVVNfMV9fc3BlZWRfX0JJVE5SIDkKKyNkZWZpbmUgUl9VU0JfUkhfUE9SVF9TVEFUVVNfMV9fc3BlZWRfX1dJRFRIIDEKKyNkZWZpbmUgUl9VU0JfUkhfUE9SVF9TVEFUVVNfMV9fc3BlZWRfX2Z1bGwgMAorI2RlZmluZSBSX1VTQl9SSF9QT1JUX1NUQVRVU18xX19zcGVlZF9fbG93IDEKKyNkZWZpbmUgUl9VU0JfUkhfUE9SVF9TVEFUVVNfMV9fcG93ZXJfX0JJVE5SIDgKKyNkZWZpbmUgUl9VU0JfUkhfUE9SVF9TVEFUVVNfMV9fcG93ZXJfX1dJRFRIIDEKKyNkZWZpbmUgUl9VU0JfUkhfUE9SVF9TVEFUVVNfMV9fcmVzZXRfX0JJVE5SIDQKKyNkZWZpbmUgUl9VU0JfUkhfUE9SVF9TVEFUVVNfMV9fcmVzZXRfX1dJRFRIIDEKKyNkZWZpbmUgUl9VU0JfUkhfUE9SVF9TVEFUVVNfMV9fcmVzZXRfX25vIDAKKyNkZWZpbmUgUl9VU0JfUkhfUE9SVF9TVEFUVVNfMV9fcmVzZXRfX3llcyAxCisjZGVmaW5lIFJfVVNCX1JIX1BPUlRfU1RBVFVTXzFfX292ZXJjdXJyZW50X19CSVROUiAzCisjZGVmaW5lIFJfVVNCX1JIX1BPUlRfU1RBVFVTXzFfX292ZXJjdXJyZW50X19XSURUSCAxCisjZGVmaW5lIFJfVVNCX1JIX1BPUlRfU1RBVFVTXzFfX292ZXJjdXJyZW50X19ubyAwCisjZGVmaW5lIFJfVVNCX1JIX1BPUlRfU1RBVFVTXzFfX292ZXJjdXJyZW50X195ZXMgMQorI2RlZmluZSBSX1VTQl9SSF9QT1JUX1NUQVRVU18xX19zdXNwZW5kZWRfX0JJVE5SIDIKKyNkZWZpbmUgUl9VU0JfUkhfUE9SVF9TVEFUVVNfMV9fc3VzcGVuZGVkX19XSURUSCAxCisjZGVmaW5lIFJfVVNCX1JIX1BPUlRfU1RBVFVTXzFfX3N1c3BlbmRlZF9fbm8gMAorI2RlZmluZSBSX1VTQl9SSF9QT1JUX1NUQVRVU18xX19zdXNwZW5kZWRfX3llcyAxCisjZGVmaW5lIFJfVVNCX1JIX1BPUlRfU1RBVFVTXzFfX2VuYWJsZWRfX0JJVE5SIDEKKyNkZWZpbmUgUl9VU0JfUkhfUE9SVF9TVEFUVVNfMV9fZW5hYmxlZF9fV0lEVEggMQorI2RlZmluZSBSX1VTQl9SSF9QT1JUX1NUQVRVU18xX19lbmFibGVkX19ubyAwCisjZGVmaW5lIFJfVVNCX1JIX1BPUlRfU1RBVFVTXzFfX2VuYWJsZWRfX3llcyAxCisjZGVmaW5lIFJfVVNCX1JIX1BPUlRfU1RBVFVTXzFfX2Nvbm5lY3RlZF9fQklUTlIgMAorI2RlZmluZSBSX1VTQl9SSF9QT1JUX1NUQVRVU18xX19jb25uZWN0ZWRfX1dJRFRIIDEKKyNkZWZpbmUgUl9VU0JfUkhfUE9SVF9TVEFUVVNfMV9fY29ubmVjdGVkX19ubyAwCisjZGVmaW5lIFJfVVNCX1JIX1BPUlRfU1RBVFVTXzFfX2Nvbm5lY3RlZF9feWVzIDEKKworI2RlZmluZSBSX1VTQl9SSF9QT1JUX1NUQVRVU18yIChJT19UWVBFQ0FTVF9ST19VV09SRCAweGIwMDAwMjFhKQorI2RlZmluZSBSX1VTQl9SSF9QT1JUX1NUQVRVU18yX19zcGVlZF9fQklUTlIgOQorI2RlZmluZSBSX1VTQl9SSF9QT1JUX1NUQVRVU18yX19zcGVlZF9fV0lEVEggMQorI2RlZmluZSBSX1VTQl9SSF9QT1JUX1NUQVRVU18yX19zcGVlZF9fZnVsbCAwCisjZGVmaW5lIFJfVVNCX1JIX1BPUlRfU1RBVFVTXzJfX3NwZWVkX19sb3cgMQorI2RlZmluZSBSX1VTQl9SSF9QT1JUX1NUQVRVU18yX19wb3dlcl9fQklUTlIgOAorI2RlZmluZSBSX1VTQl9SSF9QT1JUX1NUQVRVU18yX19wb3dlcl9fV0lEVEggMQorI2RlZmluZSBSX1VTQl9SSF9QT1JUX1NUQVRVU18yX19yZXNldF9fQklUTlIgNAorI2RlZmluZSBSX1VTQl9SSF9QT1JUX1NUQVRVU18yX19yZXNldF9fV0lEVEggMQorI2RlZmluZSBSX1VTQl9SSF9QT1JUX1NUQVRVU18yX19yZXNldF9fbm8gMAorI2RlZmluZSBSX1VTQl9SSF9QT1JUX1NUQVRVU18yX19yZXNldF9feWVzIDEKKyNkZWZpbmUgUl9VU0JfUkhfUE9SVF9TVEFUVVNfMl9fb3ZlcmN1cnJlbnRfX0JJVE5SIDMKKyNkZWZpbmUgUl9VU0JfUkhfUE9SVF9TVEFUVVNfMl9fb3ZlcmN1cnJlbnRfX1dJRFRIIDEKKyNkZWZpbmUgUl9VU0JfUkhfUE9SVF9TVEFUVVNfMl9fb3ZlcmN1cnJlbnRfX25vIDAKKyNkZWZpbmUgUl9VU0JfUkhfUE9SVF9TVEFUVVNfMl9fb3ZlcmN1cnJlbnRfX3llcyAxCisjZGVmaW5lIFJfVVNCX1JIX1BPUlRfU1RBVFVTXzJfX3N1c3BlbmRlZF9fQklUTlIgMgorI2RlZmluZSBSX1VTQl9SSF9QT1JUX1NUQVRVU18yX19zdXNwZW5kZWRfX1dJRFRIIDEKKyNkZWZpbmUgUl9VU0JfUkhfUE9SVF9TVEFUVVNfMl9fc3VzcGVuZGVkX19ubyAwCisjZGVmaW5lIFJfVVNCX1JIX1BPUlRfU1RBVFVTXzJfX3N1c3BlbmRlZF9feWVzIDEKKyNkZWZpbmUgUl9VU0JfUkhfUE9SVF9TVEFUVVNfMl9fZW5hYmxlZF9fQklUTlIgMQorI2RlZmluZSBSX1VTQl9SSF9QT1JUX1NUQVRVU18yX19lbmFibGVkX19XSURUSCAxCisjZGVmaW5lIFJfVVNCX1JIX1BPUlRfU1RBVFVTXzJfX2VuYWJsZWRfX25vIDAKKyNkZWZpbmUgUl9VU0JfUkhfUE9SVF9TVEFUVVNfMl9fZW5hYmxlZF9feWVzIDEKKyNkZWZpbmUgUl9VU0JfUkhfUE9SVF9TVEFUVVNfMl9fY29ubmVjdGVkX19CSVROUiAwCisjZGVmaW5lIFJfVVNCX1JIX1BPUlRfU1RBVFVTXzJfX2Nvbm5lY3RlZF9fV0lEVEggMQorI2RlZmluZSBSX1VTQl9SSF9QT1JUX1NUQVRVU18yX19jb25uZWN0ZWRfX25vIDAKKyNkZWZpbmUgUl9VU0JfUkhfUE9SVF9TVEFUVVNfMl9fY29ubmVjdGVkX195ZXMgMQorCisjZGVmaW5lIFJfVVNCX0VQVF9JTkRFWCAoSU9fVFlQRUNBU1RfQllURSAweGIwMDAwMjA4KQorI2RlZmluZSBSX1VTQl9FUFRfSU5ERVhfX3ZhbHVlX19CSVROUiAwCisjZGVmaW5lIFJfVVNCX0VQVF9JTkRFWF9fdmFsdWVfX1dJRFRIIDUKKworI2RlZmluZSBSX1VTQl9FUFRfREFUQSAoSU9fVFlQRUNBU1RfVURXT1JEIDB4YjAwMDAyMWMpCisjZGVmaW5lIFJfVVNCX0VQVF9EQVRBX192YWxpZF9fQklUTlIgMzEKKyNkZWZpbmUgUl9VU0JfRVBUX0RBVEFfX3ZhbGlkX19XSURUSCAxCisjZGVmaW5lIFJfVVNCX0VQVF9EQVRBX192YWxpZF9fbm8gMAorI2RlZmluZSBSX1VTQl9FUFRfREFUQV9fdmFsaWRfX3llcyAxCisjZGVmaW5lIFJfVVNCX0VQVF9EQVRBX19ob2xkX19CSVROUiAzMAorI2RlZmluZSBSX1VTQl9FUFRfREFUQV9faG9sZF9fV0lEVEggMQorI2RlZmluZSBSX1VTQl9FUFRfREFUQV9faG9sZF9fbm8gMAorI2RlZmluZSBSX1VTQl9FUFRfREFUQV9faG9sZF9feWVzIDEKKyNkZWZpbmUgUl9VU0JfRVBUX0RBVEFfX2Vycm9yX2NvdW50X2luX19CSVROUiAyOAorI2RlZmluZSBSX1VTQl9FUFRfREFUQV9fZXJyb3JfY291bnRfaW5fX1dJRFRIIDIKKyNkZWZpbmUgUl9VU0JfRVBUX0RBVEFfX3RfaW5fX0JJVE5SIDI3CisjZGVmaW5lIFJfVVNCX0VQVF9EQVRBX190X2luX19XSURUSCAxCisjZGVmaW5lIFJfVVNCX0VQVF9EQVRBX19sb3dfc3BlZWRfX0JJVE5SIDI2CisjZGVmaW5lIFJfVVNCX0VQVF9EQVRBX19sb3dfc3BlZWRfX1dJRFRIIDEKKyNkZWZpbmUgUl9VU0JfRVBUX0RBVEFfX2xvd19zcGVlZF9fbm8gMAorI2RlZmluZSBSX1VTQl9FUFRfREFUQV9fbG93X3NwZWVkX195ZXMgMQorI2RlZmluZSBSX1VTQl9FUFRfREFUQV9fcG9ydF9fQklUTlIgMjQKKyNkZWZpbmUgUl9VU0JfRVBUX0RBVEFfX3BvcnRfX1dJRFRIIDIKKyNkZWZpbmUgUl9VU0JfRVBUX0RBVEFfX3BvcnRfX2FueSAwCisjZGVmaW5lIFJfVVNCX0VQVF9EQVRBX19wb3J0X19wMSAxCisjZGVmaW5lIFJfVVNCX0VQVF9EQVRBX19wb3J0X19wMiAyCisjZGVmaW5lIFJfVVNCX0VQVF9EQVRBX19wb3J0X191bmRlZiAzCisjZGVmaW5lIFJfVVNCX0VQVF9EQVRBX19lcnJvcl9jb2RlX19CSVROUiAyMgorI2RlZmluZSBSX1VTQl9FUFRfREFUQV9fZXJyb3JfY29kZV9fV0lEVEggMgorI2RlZmluZSBSX1VTQl9FUFRfREFUQV9fZXJyb3JfY29kZV9fbm9fZXJyb3IgMAorI2RlZmluZSBSX1VTQl9FUFRfREFUQV9fZXJyb3JfY29kZV9fc3RhbGwgMQorI2RlZmluZSBSX1VTQl9FUFRfREFUQV9fZXJyb3JfY29kZV9fYnVzX2Vycm9yIDIKKyNkZWZpbmUgUl9VU0JfRVBUX0RBVEFfX2Vycm9yX2NvZGVfX2J1ZmZlcl9lcnJvciAzCisjZGVmaW5lIFJfVVNCX0VQVF9EQVRBX190X291dF9fQklUTlIgMjEKKyNkZWZpbmUgUl9VU0JfRVBUX0RBVEFfX3Rfb3V0X19XSURUSCAxCisjZGVmaW5lIFJfVVNCX0VQVF9EQVRBX19lcnJvcl9jb3VudF9vdXRfX0JJVE5SIDE5CisjZGVmaW5lIFJfVVNCX0VQVF9EQVRBX19lcnJvcl9jb3VudF9vdXRfX1dJRFRIIDIKKyNkZWZpbmUgUl9VU0JfRVBUX0RBVEFfX21heF9sZW5fX0JJVE5SIDExCisjZGVmaW5lIFJfVVNCX0VQVF9EQVRBX19tYXhfbGVuX19XSURUSCA3CisjZGVmaW5lIFJfVVNCX0VQVF9EQVRBX19lcF9fQklUTlIgNworI2RlZmluZSBSX1VTQl9FUFRfREFUQV9fZXBfX1dJRFRIIDQKKyNkZWZpbmUgUl9VU0JfRVBUX0RBVEFfX2Rldl9fQklUTlIgMAorI2RlZmluZSBSX1VTQl9FUFRfREFUQV9fZGV2X19XSURUSCA3CisKKyNkZWZpbmUgUl9VU0JfRVBUX0RBVEFfSVNPIChJT19UWVBFQ0FTVF9VRFdPUkQgMHhiMDAwMDIxYykKKyNkZWZpbmUgUl9VU0JfRVBUX0RBVEFfSVNPX192YWxpZF9fQklUTlIgMzEKKyNkZWZpbmUgUl9VU0JfRVBUX0RBVEFfSVNPX192YWxpZF9fV0lEVEggMQorI2RlZmluZSBSX1VTQl9FUFRfREFUQV9JU09fX3ZhbGlkX19ubyAwCisjZGVmaW5lIFJfVVNCX0VQVF9EQVRBX0lTT19fdmFsaWRfX3llcyAxCisjZGVmaW5lIFJfVVNCX0VQVF9EQVRBX0lTT19fcG9ydF9fQklUTlIgMjQKKyNkZWZpbmUgUl9VU0JfRVBUX0RBVEFfSVNPX19wb3J0X19XSURUSCAyCisjZGVmaW5lIFJfVVNCX0VQVF9EQVRBX0lTT19fcG9ydF9fYW55IDAKKyNkZWZpbmUgUl9VU0JfRVBUX0RBVEFfSVNPX19wb3J0X19wMSAxCisjZGVmaW5lIFJfVVNCX0VQVF9EQVRBX0lTT19fcG9ydF9fcDIgMgorI2RlZmluZSBSX1VTQl9FUFRfREFUQV9JU09fX3BvcnRfX3VuZGVmIDMKKyNkZWZpbmUgUl9VU0JfRVBUX0RBVEFfSVNPX19lcnJvcl9jb2RlX19CSVROUiAyMgorI2RlZmluZSBSX1VTQl9FUFRfREFUQV9JU09fX2Vycm9yX2NvZGVfX1dJRFRIIDIKKyNkZWZpbmUgUl9VU0JfRVBUX0RBVEFfSVNPX19lcnJvcl9jb2RlX19ub19lcnJvciAwCisjZGVmaW5lIFJfVVNCX0VQVF9EQVRBX0lTT19fZXJyb3JfY29kZV9fc3RhbGwgMQorI2RlZmluZSBSX1VTQl9FUFRfREFUQV9JU09fX2Vycm9yX2NvZGVfX2J1c19lcnJvciAyCisjZGVmaW5lIFJfVVNCX0VQVF9EQVRBX0lTT19fZXJyb3JfY29kZV9fVEJEMyAzCisjZGVmaW5lIFJfVVNCX0VQVF9EQVRBX0lTT19fbWF4X2xlbl9fQklUTlIgMTEKKyNkZWZpbmUgUl9VU0JfRVBUX0RBVEFfSVNPX19tYXhfbGVuX19XSURUSCAxMAorI2RlZmluZSBSX1VTQl9FUFRfREFUQV9JU09fX2VwX19CSVROUiA3CisjZGVmaW5lIFJfVVNCX0VQVF9EQVRBX0lTT19fZXBfX1dJRFRIIDQKKyNkZWZpbmUgUl9VU0JfRVBUX0RBVEFfSVNPX19kZXZfX0JJVE5SIDAKKyNkZWZpbmUgUl9VU0JfRVBUX0RBVEFfSVNPX19kZXZfX1dJRFRIIDcKKworI2RlZmluZSBSX1VTQl9FUFRfREFUQV9ERVYgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMjFjKQorI2RlZmluZSBSX1VTQl9FUFRfREFUQV9ERVZfX3ZhbGlkX19CSVROUiAzMQorI2RlZmluZSBSX1VTQl9FUFRfREFUQV9ERVZfX3ZhbGlkX19XSURUSCAxCisjZGVmaW5lIFJfVVNCX0VQVF9EQVRBX0RFVl9fdmFsaWRfX25vIDAKKyNkZWZpbmUgUl9VU0JfRVBUX0RBVEFfREVWX192YWxpZF9feWVzIDEKKyNkZWZpbmUgUl9VU0JfRVBUX0RBVEFfREVWX19ob2xkX19CSVROUiAzMAorI2RlZmluZSBSX1VTQl9FUFRfREFUQV9ERVZfX2hvbGRfX1dJRFRIIDEKKyNkZWZpbmUgUl9VU0JfRVBUX0RBVEFfREVWX19ob2xkX19ubyAwCisjZGVmaW5lIFJfVVNCX0VQVF9EQVRBX0RFVl9faG9sZF9feWVzIDEKKyNkZWZpbmUgUl9VU0JfRVBUX0RBVEFfREVWX19zdGFsbF9fQklUTlIgMjkKKyNkZWZpbmUgUl9VU0JfRVBUX0RBVEFfREVWX19zdGFsbF9fV0lEVEggMQorI2RlZmluZSBSX1VTQl9FUFRfREFUQV9ERVZfX3N0YWxsX19ubyAwCisjZGVmaW5lIFJfVVNCX0VQVF9EQVRBX0RFVl9fc3RhbGxfX3llcyAxCisjZGVmaW5lIFJfVVNCX0VQVF9EQVRBX0RFVl9faXNvX3Jlc3BfX0JJVE5SIDI4CisjZGVmaW5lIFJfVVNCX0VQVF9EQVRBX0RFVl9faXNvX3Jlc3BfX1dJRFRIIDEKKyNkZWZpbmUgUl9VU0JfRVBUX0RBVEFfREVWX19pc29fcmVzcF9fcXVpZXQgMAorI2RlZmluZSBSX1VTQl9FUFRfREFUQV9ERVZfX2lzb19yZXNwX195ZXMgMQorI2RlZmluZSBSX1VTQl9FUFRfREFUQV9ERVZfX2N0cmxfX0JJVE5SIDI3CisjZGVmaW5lIFJfVVNCX0VQVF9EQVRBX0RFVl9fY3RybF9fV0lEVEggMQorI2RlZmluZSBSX1VTQl9FUFRfREFUQV9ERVZfX2N0cmxfX25vIDAKKyNkZWZpbmUgUl9VU0JfRVBUX0RBVEFfREVWX19jdHJsX195ZXMgMQorI2RlZmluZSBSX1VTQl9FUFRfREFUQV9ERVZfX2lzb19fQklUTlIgMjYKKyNkZWZpbmUgUl9VU0JfRVBUX0RBVEFfREVWX19pc29fX1dJRFRIIDEKKyNkZWZpbmUgUl9VU0JfRVBUX0RBVEFfREVWX19pc29fX25vIDAKKyNkZWZpbmUgUl9VU0JfRVBUX0RBVEFfREVWX19pc29fX3llcyAxCisjZGVmaW5lIFJfVVNCX0VQVF9EQVRBX0RFVl9fcG9ydF9fQklUTlIgMjQKKyNkZWZpbmUgUl9VU0JfRVBUX0RBVEFfREVWX19wb3J0X19XSURUSCAyCisjZGVmaW5lIFJfVVNCX0VQVF9EQVRBX0RFVl9fY29udHJvbF9waGFzZV9fQklUTlIgMjIKKyNkZWZpbmUgUl9VU0JfRVBUX0RBVEFfREVWX19jb250cm9sX3BoYXNlX19XSURUSCAxCisjZGVmaW5lIFJfVVNCX0VQVF9EQVRBX0RFVl9fdF9fQklUTlIgMjEKKyNkZWZpbmUgUl9VU0JfRVBUX0RBVEFfREVWX190X19XSURUSCAxCisjZGVmaW5lIFJfVVNCX0VQVF9EQVRBX0RFVl9fbWF4X2xlbl9fQklUTlIgMTEKKyNkZWZpbmUgUl9VU0JfRVBUX0RBVEFfREVWX19tYXhfbGVuX19XSURUSCAxMAorI2RlZmluZSBSX1VTQl9FUFRfREFUQV9ERVZfX2VwX19CSVROUiA3CisjZGVmaW5lIFJfVVNCX0VQVF9EQVRBX0RFVl9fZXBfX1dJRFRIIDQKKyNkZWZpbmUgUl9VU0JfRVBUX0RBVEFfREVWX19kZXZfX0JJVE5SIDAKKyNkZWZpbmUgUl9VU0JfRVBUX0RBVEFfREVWX19kZXZfX1dJRFRIIDcKKworI2RlZmluZSBSX1VTQl9TTk1QX1RFUlJPUiAoSU9fVFlQRUNBU1RfVURXT1JEIDB4YjAwMDAyMjApCisjZGVmaW5lIFJfVVNCX1NOTVBfVEVSUk9SX192YWx1ZV9fQklUTlIgMAorI2RlZmluZSBSX1VTQl9TTk1QX1RFUlJPUl9fdmFsdWVfX1dJRFRIIDMyCisKKyNkZWZpbmUgUl9VU0JfRVBJRF9BVFROIChJT19UWVBFQ0FTVF9ST19VRFdPUkQgMHhiMDAwMDIyNCkKKyNkZWZpbmUgUl9VU0JfRVBJRF9BVFROX192YWx1ZV9fQklUTlIgMAorI2RlZmluZSBSX1VTQl9FUElEX0FUVE5fX3ZhbHVlX19XSURUSCAzMgorCisjZGVmaW5lIFJfVVNCX1BPUlQxX0RJU0FCTEUgKElPX1RZUEVDQVNUX0JZVEUgMHhiMDAwMDA2YSkKKyNkZWZpbmUgUl9VU0JfUE9SVDFfRElTQUJMRV9fZGlzYWJsZV9fQklUTlIgMAorI2RlZmluZSBSX1VTQl9QT1JUMV9ESVNBQkxFX19kaXNhYmxlX19XSURUSCAxCisjZGVmaW5lIFJfVVNCX1BPUlQxX0RJU0FCTEVfX2Rpc2FibGVfX3llcyAwCisjZGVmaW5lIFJfVVNCX1BPUlQxX0RJU0FCTEVfX2Rpc2FibGVfX25vIDEKKworI2RlZmluZSBSX1VTQl9QT1JUMl9ESVNBQkxFIChJT19UWVBFQ0FTVF9CWVRFIDB4YjAwMDAwNTIpCisjZGVmaW5lIFJfVVNCX1BPUlQyX0RJU0FCTEVfX2Rpc2FibGVfX0JJVE5SIDAKKyNkZWZpbmUgUl9VU0JfUE9SVDJfRElTQUJMRV9fZGlzYWJsZV9fV0lEVEggMQorI2RlZmluZSBSX1VTQl9QT1JUMl9ESVNBQkxFX19kaXNhYmxlX195ZXMgMAorI2RlZmluZSBSX1VTQl9QT1JUMl9ESVNBQkxFX19kaXNhYmxlX19ubyAxCisKKy8qCishKiBNTVUgcmVnaXN0ZXJzCishKi8KKworI2RlZmluZSBSX01NVV9DT05GSUcgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMjQwKQorI2RlZmluZSBSX01NVV9DT05GSUdfX21tdV9lbmFibGVfX0JJVE5SIDMxCisjZGVmaW5lIFJfTU1VX0NPTkZJR19fbW11X2VuYWJsZV9fV0lEVEggMQorI2RlZmluZSBSX01NVV9DT05GSUdfX21tdV9lbmFibGVfX2VuYWJsZSAxCisjZGVmaW5lIFJfTU1VX0NPTkZJR19fbW11X2VuYWJsZV9fZGlzYWJsZSAwCisjZGVmaW5lIFJfTU1VX0NPTkZJR19faW52X2V4Y3BfX0JJVE5SIDE4CisjZGVmaW5lIFJfTU1VX0NPTkZJR19faW52X2V4Y3BfX1dJRFRIIDEKKyNkZWZpbmUgUl9NTVVfQ09ORklHX19pbnZfZXhjcF9fZW5hYmxlIDEKKyNkZWZpbmUgUl9NTVVfQ09ORklHX19pbnZfZXhjcF9fZGlzYWJsZSAwCisjZGVmaW5lIFJfTU1VX0NPTkZJR19fYWNjX2V4Y3BfX0JJVE5SIDE3CisjZGVmaW5lIFJfTU1VX0NPTkZJR19fYWNjX2V4Y3BfX1dJRFRIIDEKKyNkZWZpbmUgUl9NTVVfQ09ORklHX19hY2NfZXhjcF9fZW5hYmxlIDEKKyNkZWZpbmUgUl9NTVVfQ09ORklHX19hY2NfZXhjcF9fZGlzYWJsZSAwCisjZGVmaW5lIFJfTU1VX0NPTkZJR19fd2VfZXhjcF9fQklUTlIgMTYKKyNkZWZpbmUgUl9NTVVfQ09ORklHX193ZV9leGNwX19XSURUSCAxCisjZGVmaW5lIFJfTU1VX0NPTkZJR19fd2VfZXhjcF9fZW5hYmxlIDEKKyNkZWZpbmUgUl9NTVVfQ09ORklHX193ZV9leGNwX19kaXNhYmxlIDAKKyNkZWZpbmUgUl9NTVVfQ09ORklHX19zZWdfZl9fQklUTlIgMTUKKyNkZWZpbmUgUl9NTVVfQ09ORklHX19zZWdfZl9fV0lEVEggMQorI2RlZmluZSBSX01NVV9DT05GSUdfX3NlZ19mX19zZWcgMQorI2RlZmluZSBSX01NVV9DT05GSUdfX3NlZ19mX19wYWdlIDAKKyNkZWZpbmUgUl9NTVVfQ09ORklHX19zZWdfZV9fQklUTlIgMTQKKyNkZWZpbmUgUl9NTVVfQ09ORklHX19zZWdfZV9fV0lEVEggMQorI2RlZmluZSBSX01NVV9DT05GSUdfX3NlZ19lX19zZWcgMQorI2RlZmluZSBSX01NVV9DT05GSUdfX3NlZ19lX19wYWdlIDAKKyNkZWZpbmUgUl9NTVVfQ09ORklHX19zZWdfZF9fQklUTlIgMTMKKyNkZWZpbmUgUl9NTVVfQ09ORklHX19zZWdfZF9fV0lEVEggMQorI2RlZmluZSBSX01NVV9DT05GSUdfX3NlZ19kX19zZWcgMQorI2RlZmluZSBSX01NVV9DT05GSUdfX3NlZ19kX19wYWdlIDAKKyNkZWZpbmUgUl9NTVVfQ09ORklHX19zZWdfY19fQklUTlIgMTIKKyNkZWZpbmUgUl9NTVVfQ09ORklHX19zZWdfY19fV0lEVEggMQorI2RlZmluZSBSX01NVV9DT05GSUdfX3NlZ19jX19zZWcgMQorI2RlZmluZSBSX01NVV9DT05GSUdfX3NlZ19jX19wYWdlIDAKKyNkZWZpbmUgUl9NTVVfQ09ORklHX19zZWdfYl9fQklUTlIgMTEKKyNkZWZpbmUgUl9NTVVfQ09ORklHX19zZWdfYl9fV0lEVEggMQorI2RlZmluZSBSX01NVV9DT05GSUdfX3NlZ19iX19zZWcgMQorI2RlZmluZSBSX01NVV9DT05GSUdfX3NlZ19iX19wYWdlIDAKKyNkZWZpbmUgUl9NTVVfQ09ORklHX19zZWdfYV9fQklUTlIgMTAKKyNkZWZpbmUgUl9NTVVfQ09ORklHX19zZWdfYV9fV0lEVEggMQorI2RlZmluZSBSX01NVV9DT05GSUdfX3NlZ19hX19zZWcgMQorI2RlZmluZSBSX01NVV9DT05GSUdfX3NlZ19hX19wYWdlIDAKKyNkZWZpbmUgUl9NTVVfQ09ORklHX19zZWdfOV9fQklUTlIgOQorI2RlZmluZSBSX01NVV9DT05GSUdfX3NlZ185X19XSURUSCAxCisjZGVmaW5lIFJfTU1VX0NPTkZJR19fc2VnXzlfX3NlZyAxCisjZGVmaW5lIFJfTU1VX0NPTkZJR19fc2VnXzlfX3BhZ2UgMAorI2RlZmluZSBSX01NVV9DT05GSUdfX3NlZ184X19CSVROUiA4CisjZGVmaW5lIFJfTU1VX0NPTkZJR19fc2VnXzhfX1dJRFRIIDEKKyNkZWZpbmUgUl9NTVVfQ09ORklHX19zZWdfOF9fc2VnIDEKKyNkZWZpbmUgUl9NTVVfQ09ORklHX19zZWdfOF9fcGFnZSAwCisjZGVmaW5lIFJfTU1VX0NPTkZJR19fc2VnXzdfX0JJVE5SIDcKKyNkZWZpbmUgUl9NTVVfQ09ORklHX19zZWdfN19fV0lEVEggMQorI2RlZmluZSBSX01NVV9DT05GSUdfX3NlZ183X19zZWcgMQorI2RlZmluZSBSX01NVV9DT05GSUdfX3NlZ183X19wYWdlIDAKKyNkZWZpbmUgUl9NTVVfQ09ORklHX19zZWdfNl9fQklUTlIgNgorI2RlZmluZSBSX01NVV9DT05GSUdfX3NlZ182X19XSURUSCAxCisjZGVmaW5lIFJfTU1VX0NPTkZJR19fc2VnXzZfX3NlZyAxCisjZGVmaW5lIFJfTU1VX0NPTkZJR19fc2VnXzZfX3BhZ2UgMAorI2RlZmluZSBSX01NVV9DT05GSUdfX3NlZ181X19CSVROUiA1CisjZGVmaW5lIFJfTU1VX0NPTkZJR19fc2VnXzVfX1dJRFRIIDEKKyNkZWZpbmUgUl9NTVVfQ09ORklHX19zZWdfNV9fc2VnIDEKKyNkZWZpbmUgUl9NTVVfQ09ORklHX19zZWdfNV9fcGFnZSAwCisjZGVmaW5lIFJfTU1VX0NPTkZJR19fc2VnXzRfX0JJVE5SIDQKKyNkZWZpbmUgUl9NTVVfQ09ORklHX19zZWdfNF9fV0lEVEggMQorI2RlZmluZSBSX01NVV9DT05GSUdfX3NlZ180X19zZWcgMQorI2RlZmluZSBSX01NVV9DT05GSUdfX3NlZ180X19wYWdlIDAKKyNkZWZpbmUgUl9NTVVfQ09ORklHX19zZWdfM19fQklUTlIgMworI2RlZmluZSBSX01NVV9DT05GSUdfX3NlZ18zX19XSURUSCAxCisjZGVmaW5lIFJfTU1VX0NPTkZJR19fc2VnXzNfX3NlZyAxCisjZGVmaW5lIFJfTU1VX0NPTkZJR19fc2VnXzNfX3BhZ2UgMAorI2RlZmluZSBSX01NVV9DT05GSUdfX3NlZ18yX19CSVROUiAyCisjZGVmaW5lIFJfTU1VX0NPTkZJR19fc2VnXzJfX1dJRFRIIDEKKyNkZWZpbmUgUl9NTVVfQ09ORklHX19zZWdfMl9fc2VnIDEKKyNkZWZpbmUgUl9NTVVfQ09ORklHX19zZWdfMl9fcGFnZSAwCisjZGVmaW5lIFJfTU1VX0NPTkZJR19fc2VnXzFfX0JJVE5SIDEKKyNkZWZpbmUgUl9NTVVfQ09ORklHX19zZWdfMV9fV0lEVEggMQorI2RlZmluZSBSX01NVV9DT05GSUdfX3NlZ18xX19zZWcgMQorI2RlZmluZSBSX01NVV9DT05GSUdfX3NlZ18xX19wYWdlIDAKKyNkZWZpbmUgUl9NTVVfQ09ORklHX19zZWdfMF9fQklUTlIgMAorI2RlZmluZSBSX01NVV9DT05GSUdfX3NlZ18wX19XSURUSCAxCisjZGVmaW5lIFJfTU1VX0NPTkZJR19fc2VnXzBfX3NlZyAxCisjZGVmaW5lIFJfTU1VX0NPTkZJR19fc2VnXzBfX3BhZ2UgMAorCisjZGVmaW5lIFJfTU1VX0tTRUcgKElPX1RZUEVDQVNUX1VXT1JEIDB4YjAwMDAyNDApCisjZGVmaW5lIFJfTU1VX0tTRUdfX3NlZ19mX19CSVROUiAxNQorI2RlZmluZSBSX01NVV9LU0VHX19zZWdfZl9fV0lEVEggMQorI2RlZmluZSBSX01NVV9LU0VHX19zZWdfZl9fc2VnIDEKKyNkZWZpbmUgUl9NTVVfS1NFR19fc2VnX2ZfX3BhZ2UgMAorI2RlZmluZSBSX01NVV9LU0VHX19zZWdfZV9fQklUTlIgMTQKKyNkZWZpbmUgUl9NTVVfS1NFR19fc2VnX2VfX1dJRFRIIDEKKyNkZWZpbmUgUl9NTVVfS1NFR19fc2VnX2VfX3NlZyAxCisjZGVmaW5lIFJfTU1VX0tTRUdfX3NlZ19lX19wYWdlIDAKKyNkZWZpbmUgUl9NTVVfS1NFR19fc2VnX2RfX0JJVE5SIDEzCisjZGVmaW5lIFJfTU1VX0tTRUdfX3NlZ19kX19XSURUSCAxCisjZGVmaW5lIFJfTU1VX0tTRUdfX3NlZ19kX19zZWcgMQorI2RlZmluZSBSX01NVV9LU0VHX19zZWdfZF9fcGFnZSAwCisjZGVmaW5lIFJfTU1VX0tTRUdfX3NlZ19jX19CSVROUiAxMgorI2RlZmluZSBSX01NVV9LU0VHX19zZWdfY19fV0lEVEggMQorI2RlZmluZSBSX01NVV9LU0VHX19zZWdfY19fc2VnIDEKKyNkZWZpbmUgUl9NTVVfS1NFR19fc2VnX2NfX3BhZ2UgMAorI2RlZmluZSBSX01NVV9LU0VHX19zZWdfYl9fQklUTlIgMTEKKyNkZWZpbmUgUl9NTVVfS1NFR19fc2VnX2JfX1dJRFRIIDEKKyNkZWZpbmUgUl9NTVVfS1NFR19fc2VnX2JfX3NlZyAxCisjZGVmaW5lIFJfTU1VX0tTRUdfX3NlZ19iX19wYWdlIDAKKyNkZWZpbmUgUl9NTVVfS1NFR19fc2VnX2FfX0JJVE5SIDEwCisjZGVmaW5lIFJfTU1VX0tTRUdfX3NlZ19hX19XSURUSCAxCisjZGVmaW5lIFJfTU1VX0tTRUdfX3NlZ19hX19zZWcgMQorI2RlZmluZSBSX01NVV9LU0VHX19zZWdfYV9fcGFnZSAwCisjZGVmaW5lIFJfTU1VX0tTRUdfX3NlZ185X19CSVROUiA5CisjZGVmaW5lIFJfTU1VX0tTRUdfX3NlZ185X19XSURUSCAxCisjZGVmaW5lIFJfTU1VX0tTRUdfX3NlZ185X19zZWcgMQorI2RlZmluZSBSX01NVV9LU0VHX19zZWdfOV9fcGFnZSAwCisjZGVmaW5lIFJfTU1VX0tTRUdfX3NlZ184X19CSVROUiA4CisjZGVmaW5lIFJfTU1VX0tTRUdfX3NlZ184X19XSURUSCAxCisjZGVmaW5lIFJfTU1VX0tTRUdfX3NlZ184X19zZWcgMQorI2RlZmluZSBSX01NVV9LU0VHX19zZWdfOF9fcGFnZSAwCisjZGVmaW5lIFJfTU1VX0tTRUdfX3NlZ183X19CSVROUiA3CisjZGVmaW5lIFJfTU1VX0tTRUdfX3NlZ183X19XSURUSCAxCisjZGVmaW5lIFJfTU1VX0tTRUdfX3NlZ183X19zZWcgMQorI2RlZmluZSBSX01NVV9LU0VHX19zZWdfN19fcGFnZSAwCisjZGVmaW5lIFJfTU1VX0tTRUdfX3NlZ182X19CSVROUiA2CisjZGVmaW5lIFJfTU1VX0tTRUdfX3NlZ182X19XSURUSCAxCisjZGVmaW5lIFJfTU1VX0tTRUdfX3NlZ182X19zZWcgMQorI2RlZmluZSBSX01NVV9LU0VHX19zZWdfNl9fcGFnZSAwCisjZGVmaW5lIFJfTU1VX0tTRUdfX3NlZ181X19CSVROUiA1CisjZGVmaW5lIFJfTU1VX0tTRUdfX3NlZ181X19XSURUSCAxCisjZGVmaW5lIFJfTU1VX0tTRUdfX3NlZ181X19zZWcgMQorI2RlZmluZSBSX01NVV9LU0VHX19zZWdfNV9fcGFnZSAwCisjZGVmaW5lIFJfTU1VX0tTRUdfX3NlZ180X19CSVROUiA0CisjZGVmaW5lIFJfTU1VX0tTRUdfX3NlZ180X19XSURUSCAxCisjZGVmaW5lIFJfTU1VX0tTRUdfX3NlZ180X19zZWcgMQorI2RlZmluZSBSX01NVV9LU0VHX19zZWdfNF9fcGFnZSAwCisjZGVmaW5lIFJfTU1VX0tTRUdfX3NlZ18zX19CSVROUiAzCisjZGVmaW5lIFJfTU1VX0tTRUdfX3NlZ18zX19XSURUSCAxCisjZGVmaW5lIFJfTU1VX0tTRUdfX3NlZ18zX19zZWcgMQorI2RlZmluZSBSX01NVV9LU0VHX19zZWdfM19fcGFnZSAwCisjZGVmaW5lIFJfTU1VX0tTRUdfX3NlZ18yX19CSVROUiAyCisjZGVmaW5lIFJfTU1VX0tTRUdfX3NlZ18yX19XSURUSCAxCisjZGVmaW5lIFJfTU1VX0tTRUdfX3NlZ18yX19zZWcgMQorI2RlZmluZSBSX01NVV9LU0VHX19zZWdfMl9fcGFnZSAwCisjZGVmaW5lIFJfTU1VX0tTRUdfX3NlZ18xX19CSVROUiAxCisjZGVmaW5lIFJfTU1VX0tTRUdfX3NlZ18xX19XSURUSCAxCisjZGVmaW5lIFJfTU1VX0tTRUdfX3NlZ18xX19zZWcgMQorI2RlZmluZSBSX01NVV9LU0VHX19zZWdfMV9fcGFnZSAwCisjZGVmaW5lIFJfTU1VX0tTRUdfX3NlZ18wX19CSVROUiAwCisjZGVmaW5lIFJfTU1VX0tTRUdfX3NlZ18wX19XSURUSCAxCisjZGVmaW5lIFJfTU1VX0tTRUdfX3NlZ18wX19zZWcgMQorI2RlZmluZSBSX01NVV9LU0VHX19zZWdfMF9fcGFnZSAwCisKKyNkZWZpbmUgUl9NTVVfQ1RSTCAoSU9fVFlQRUNBU1RfQllURSAweGIwMDAwMjQyKQorI2RlZmluZSBSX01NVV9DVFJMX19pbnZfZXhjcF9fQklUTlIgMgorI2RlZmluZSBSX01NVV9DVFJMX19pbnZfZXhjcF9fV0lEVEggMQorI2RlZmluZSBSX01NVV9DVFJMX19pbnZfZXhjcF9fZW5hYmxlIDEKKyNkZWZpbmUgUl9NTVVfQ1RSTF9faW52X2V4Y3BfX2Rpc2FibGUgMAorI2RlZmluZSBSX01NVV9DVFJMX19hY2NfZXhjcF9fQklUTlIgMQorI2RlZmluZSBSX01NVV9DVFJMX19hY2NfZXhjcF9fV0lEVEggMQorI2RlZmluZSBSX01NVV9DVFJMX19hY2NfZXhjcF9fZW5hYmxlIDEKKyNkZWZpbmUgUl9NTVVfQ1RSTF9fYWNjX2V4Y3BfX2Rpc2FibGUgMAorI2RlZmluZSBSX01NVV9DVFJMX193ZV9leGNwX19CSVROUiAwCisjZGVmaW5lIFJfTU1VX0NUUkxfX3dlX2V4Y3BfX1dJRFRIIDEKKyNkZWZpbmUgUl9NTVVfQ1RSTF9fd2VfZXhjcF9fZW5hYmxlIDEKKyNkZWZpbmUgUl9NTVVfQ1RSTF9fd2VfZXhjcF9fZGlzYWJsZSAwCisKKyNkZWZpbmUgUl9NTVVfRU5BQkxFIChJT19UWVBFQ0FTVF9CWVRFIDB4YjAwMDAyNDMpCisjZGVmaW5lIFJfTU1VX0VOQUJMRV9fbW11X2VuYWJsZV9fQklUTlIgNworI2RlZmluZSBSX01NVV9FTkFCTEVfX21tdV9lbmFibGVfX1dJRFRIIDEKKyNkZWZpbmUgUl9NTVVfRU5BQkxFX19tbXVfZW5hYmxlX19lbmFibGUgMQorI2RlZmluZSBSX01NVV9FTkFCTEVfX21tdV9lbmFibGVfX2Rpc2FibGUgMAorCisjZGVmaW5lIFJfTU1VX0tCQVNFX0xPIChJT19UWVBFQ0FTVF9VRFdPUkQgMHhiMDAwMDI0NCkKKyNkZWZpbmUgUl9NTVVfS0JBU0VfTE9fX2Jhc2VfN19fQklUTlIgMjgKKyNkZWZpbmUgUl9NTVVfS0JBU0VfTE9fX2Jhc2VfN19fV0lEVEggNAorI2RlZmluZSBSX01NVV9LQkFTRV9MT19fYmFzZV82X19CSVROUiAyNAorI2RlZmluZSBSX01NVV9LQkFTRV9MT19fYmFzZV82X19XSURUSCA0CisjZGVmaW5lIFJfTU1VX0tCQVNFX0xPX19iYXNlXzVfX0JJVE5SIDIwCisjZGVmaW5lIFJfTU1VX0tCQVNFX0xPX19iYXNlXzVfX1dJRFRIIDQKKyNkZWZpbmUgUl9NTVVfS0JBU0VfTE9fX2Jhc2VfNF9fQklUTlIgMTYKKyNkZWZpbmUgUl9NTVVfS0JBU0VfTE9fX2Jhc2VfNF9fV0lEVEggNAorI2RlZmluZSBSX01NVV9LQkFTRV9MT19fYmFzZV8zX19CSVROUiAxMgorI2RlZmluZSBSX01NVV9LQkFTRV9MT19fYmFzZV8zX19XSURUSCA0CisjZGVmaW5lIFJfTU1VX0tCQVNFX0xPX19iYXNlXzJfX0JJVE5SIDgKKyNkZWZpbmUgUl9NTVVfS0JBU0VfTE9fX2Jhc2VfMl9fV0lEVEggNAorI2RlZmluZSBSX01NVV9LQkFTRV9MT19fYmFzZV8xX19CSVROUiA0CisjZGVmaW5lIFJfTU1VX0tCQVNFX0xPX19iYXNlXzFfX1dJRFRIIDQKKyNkZWZpbmUgUl9NTVVfS0JBU0VfTE9fX2Jhc2VfMF9fQklUTlIgMAorI2RlZmluZSBSX01NVV9LQkFTRV9MT19fYmFzZV8wX19XSURUSCA0CisKKyNkZWZpbmUgUl9NTVVfS0JBU0VfSEkgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMjQ4KQorI2RlZmluZSBSX01NVV9LQkFTRV9ISV9fYmFzZV9mX19CSVROUiAyOAorI2RlZmluZSBSX01NVV9LQkFTRV9ISV9fYmFzZV9mX19XSURUSCA0CisjZGVmaW5lIFJfTU1VX0tCQVNFX0hJX19iYXNlX2VfX0JJVE5SIDI0CisjZGVmaW5lIFJfTU1VX0tCQVNFX0hJX19iYXNlX2VfX1dJRFRIIDQKKyNkZWZpbmUgUl9NTVVfS0JBU0VfSElfX2Jhc2VfZF9fQklUTlIgMjAKKyNkZWZpbmUgUl9NTVVfS0JBU0VfSElfX2Jhc2VfZF9fV0lEVEggNAorI2RlZmluZSBSX01NVV9LQkFTRV9ISV9fYmFzZV9jX19CSVROUiAxNgorI2RlZmluZSBSX01NVV9LQkFTRV9ISV9fYmFzZV9jX19XSURUSCA0CisjZGVmaW5lIFJfTU1VX0tCQVNFX0hJX19iYXNlX2JfX0JJVE5SIDEyCisjZGVmaW5lIFJfTU1VX0tCQVNFX0hJX19iYXNlX2JfX1dJRFRIIDQKKyNkZWZpbmUgUl9NTVVfS0JBU0VfSElfX2Jhc2VfYV9fQklUTlIgOAorI2RlZmluZSBSX01NVV9LQkFTRV9ISV9fYmFzZV9hX19XSURUSCA0CisjZGVmaW5lIFJfTU1VX0tCQVNFX0hJX19iYXNlXzlfX0JJVE5SIDQKKyNkZWZpbmUgUl9NTVVfS0JBU0VfSElfX2Jhc2VfOV9fV0lEVEggNAorI2RlZmluZSBSX01NVV9LQkFTRV9ISV9fYmFzZV84X19CSVROUiAwCisjZGVmaW5lIFJfTU1VX0tCQVNFX0hJX19iYXNlXzhfX1dJRFRIIDQKKworI2RlZmluZSBSX01NVV9DT05URVhUIChJT19UWVBFQ0FTVF9CWVRFIDB4YjAwMDAyNGMpCisjZGVmaW5lIFJfTU1VX0NPTlRFWFRfX3BhZ2VfaWRfX0JJVE5SIDAKKyNkZWZpbmUgUl9NTVVfQ09OVEVYVF9fcGFnZV9pZF9fV0lEVEggNgorCisjZGVmaW5lIFJfTU1VX0NBVVNFIChJT19UWVBFQ0FTVF9ST19VRFdPUkQgMHhiMDAwMDI1MCkKKyNkZWZpbmUgUl9NTVVfQ0FVU0VfX3Zwbl9fQklUTlIgMTMKKyNkZWZpbmUgUl9NTVVfQ0FVU0VfX3Zwbl9fV0lEVEggMTkKKyNkZWZpbmUgUl9NTVVfQ0FVU0VfX21pc3NfZXhjcF9fQklUTlIgMTIKKyNkZWZpbmUgUl9NTVVfQ0FVU0VfX21pc3NfZXhjcF9fV0lEVEggMQorI2RlZmluZSBSX01NVV9DQVVTRV9fbWlzc19leGNwX195ZXMgMQorI2RlZmluZSBSX01NVV9DQVVTRV9fbWlzc19leGNwX19ubyAwCisjZGVmaW5lIFJfTU1VX0NBVVNFX19pbnZfZXhjcF9fQklUTlIgMTEKKyNkZWZpbmUgUl9NTVVfQ0FVU0VfX2ludl9leGNwX19XSURUSCAxCisjZGVmaW5lIFJfTU1VX0NBVVNFX19pbnZfZXhjcF9feWVzIDEKKyNkZWZpbmUgUl9NTVVfQ0FVU0VfX2ludl9leGNwX19ubyAwCisjZGVmaW5lIFJfTU1VX0NBVVNFX19hY2NfZXhjcF9fQklUTlIgMTAKKyNkZWZpbmUgUl9NTVVfQ0FVU0VfX2FjY19leGNwX19XSURUSCAxCisjZGVmaW5lIFJfTU1VX0NBVVNFX19hY2NfZXhjcF9feWVzIDEKKyNkZWZpbmUgUl9NTVVfQ0FVU0VfX2FjY19leGNwX19ubyAwCisjZGVmaW5lIFJfTU1VX0NBVVNFX193ZV9leGNwX19CSVROUiA5CisjZGVmaW5lIFJfTU1VX0NBVVNFX193ZV9leGNwX19XSURUSCAxCisjZGVmaW5lIFJfTU1VX0NBVVNFX193ZV9leGNwX195ZXMgMQorI2RlZmluZSBSX01NVV9DQVVTRV9fd2VfZXhjcF9fbm8gMAorI2RlZmluZSBSX01NVV9DQVVTRV9fd3JfcmRfX0JJVE5SIDgKKyNkZWZpbmUgUl9NTVVfQ0FVU0VfX3dyX3JkX19XSURUSCAxCisjZGVmaW5lIFJfTU1VX0NBVVNFX193cl9yZF9fd3JpdGUgMQorI2RlZmluZSBSX01NVV9DQVVTRV9fd3JfcmRfX3JlYWQgMAorI2RlZmluZSBSX01NVV9DQVVTRV9fcGFnZV9pZF9fQklUTlIgMAorI2RlZmluZSBSX01NVV9DQVVTRV9fcGFnZV9pZF9fV0lEVEggNgorCisjZGVmaW5lIFJfVExCX1NFTEVDVCAoSU9fVFlQRUNBU1RfQllURSAweGIwMDAwMjU0KQorI2RlZmluZSBSX1RMQl9TRUxFQ1RfX2luZGV4X19CSVROUiAwCisjZGVmaW5lIFJfVExCX1NFTEVDVF9faW5kZXhfX1dJRFRIIDYKKworI2RlZmluZSBSX1RMQl9MTyAoSU9fVFlQRUNBU1RfVURXT1JEIDB4YjAwMDAyNTgpCisjZGVmaW5lIFJfVExCX0xPX19wZm5fX0JJVE5SIDEzCisjZGVmaW5lIFJfVExCX0xPX19wZm5fX1dJRFRIIDE5CisjZGVmaW5lIFJfVExCX0xPX19nbG9iYWxfX0JJVE5SIDMKKyNkZWZpbmUgUl9UTEJfTE9fX2dsb2JhbF9fV0lEVEggMQorI2RlZmluZSBSX1RMQl9MT19fZ2xvYmFsX195ZXMgMQorI2RlZmluZSBSX1RMQl9MT19fZ2xvYmFsX19ubyAwCisjZGVmaW5lIFJfVExCX0xPX192YWxpZF9fQklUTlIgMgorI2RlZmluZSBSX1RMQl9MT19fdmFsaWRfX1dJRFRIIDEKKyNkZWZpbmUgUl9UTEJfTE9fX3ZhbGlkX195ZXMgMQorI2RlZmluZSBSX1RMQl9MT19fdmFsaWRfX25vIDAKKyNkZWZpbmUgUl9UTEJfTE9fX2tlcm5lbF9fQklUTlIgMQorI2RlZmluZSBSX1RMQl9MT19fa2VybmVsX19XSURUSCAxCisjZGVmaW5lIFJfVExCX0xPX19rZXJuZWxfX3llcyAxCisjZGVmaW5lIFJfVExCX0xPX19rZXJuZWxfX25vIDAKKyNkZWZpbmUgUl9UTEJfTE9fX3dlX19CSVROUiAwCisjZGVmaW5lIFJfVExCX0xPX193ZV9fV0lEVEggMQorI2RlZmluZSBSX1RMQl9MT19fd2VfX3llcyAxCisjZGVmaW5lIFJfVExCX0xPX193ZV9fbm8gMAorCisjZGVmaW5lIFJfVExCX0hJIChJT19UWVBFQ0FTVF9VRFdPUkQgMHhiMDAwMDI1YykKKyNkZWZpbmUgUl9UTEJfSElfX3Zwbl9fQklUTlIgMTMKKyNkZWZpbmUgUl9UTEJfSElfX3Zwbl9fV0lEVEggMTkKKyNkZWZpbmUgUl9UTEJfSElfX3BhZ2VfaWRfX0JJVE5SIDAKKyNkZWZpbmUgUl9UTEJfSElfX3BhZ2VfaWRfX1dJRFRIIDYKKworLyoKKyEqIFN5bmNyb3Vub3VzIHNlcmlhbCBwb3J0IHJlZ2lzdGVycworISovCisKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDFfUkVDX0RBVEEgKElPX1RZUEVDQVNUX1JPX1VEV09SRCAweGIwMDAwMDZjKQorI2RlZmluZSBSX1NZTkNfU0VSSUFMMV9SRUNfREFUQV9fZGF0YV9pbl9fQklUTlIgMAorI2RlZmluZSBSX1NZTkNfU0VSSUFMMV9SRUNfREFUQV9fZGF0YV9pbl9fV0lEVEggMzIKKworI2RlZmluZSBSX1NZTkNfU0VSSUFMMV9SRUNfV09SRCAoSU9fVFlQRUNBU1RfUk9fVVdPUkQgMHhiMDAwMDA2YykKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDFfUkVDX1dPUkRfX2RhdGFfaW5fX0JJVE5SIDAKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDFfUkVDX1dPUkRfX2RhdGFfaW5fX1dJRFRIIDE2CisKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDFfUkVDX0JZVEUgKElPX1RZUEVDQVNUX1JPX0JZVEUgMHhiMDAwMDA2YykKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDFfUkVDX0JZVEVfX2RhdGFfaW5fX0JJVE5SIDAKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDFfUkVDX0JZVEVfX2RhdGFfaW5fX1dJRFRIIDgKKworI2RlZmluZSBSX1NZTkNfU0VSSUFMMV9TVEFUVVMgKElPX1RZUEVDQVNUX1JPX1VEV09SRCAweGIwMDAwMDY4KQorI2RlZmluZSBSX1NZTkNfU0VSSUFMMV9TVEFUVVNfX3JlY19zdGF0dXNfX0JJVE5SIDE1CisjZGVmaW5lIFJfU1lOQ19TRVJJQUwxX1NUQVRVU19fcmVjX3N0YXR1c19fV0lEVEggMQorI2RlZmluZSBSX1NZTkNfU0VSSUFMMV9TVEFUVVNfX3JlY19zdGF0dXNfX3J1bm5pbmcgMAorI2RlZmluZSBSX1NZTkNfU0VSSUFMMV9TVEFUVVNfX3JlY19zdGF0dXNfX2lkbGUgMQorI2RlZmluZSBSX1NZTkNfU0VSSUFMMV9TVEFUVVNfX3RyX2VtcHR5X19CSVROUiAxNAorI2RlZmluZSBSX1NZTkNfU0VSSUFMMV9TVEFUVVNfX3RyX2VtcHR5X19XSURUSCAxCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwxX1NUQVRVU19fdHJfZW1wdHlfX2VtcHR5IDEKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDFfU1RBVFVTX190cl9lbXB0eV9fbm90X2VtcHR5IDAKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDFfU1RBVFVTX190cl9yZWFkeV9fQklUTlIgMTMKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDFfU1RBVFVTX190cl9yZWFkeV9fV0lEVEggMQorI2RlZmluZSBSX1NZTkNfU0VSSUFMMV9TVEFUVVNfX3RyX3JlYWR5X19mdWxsIDAKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDFfU1RBVFVTX190cl9yZWFkeV9fcmVhZHkgMQorI2RlZmluZSBSX1NZTkNfU0VSSUFMMV9TVEFUVVNfX3Bpbl8xX19CSVROUiAxMgorI2RlZmluZSBSX1NZTkNfU0VSSUFMMV9TVEFUVVNfX3Bpbl8xX19XSURUSCAxCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwxX1NUQVRVU19fcGluXzFfX2xvdyAwCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwxX1NUQVRVU19fcGluXzFfX2hpZ2ggMQorI2RlZmluZSBSX1NZTkNfU0VSSUFMMV9TVEFUVVNfX3Bpbl8wX19CSVROUiAxMQorI2RlZmluZSBSX1NZTkNfU0VSSUFMMV9TVEFUVVNfX3Bpbl8wX19XSURUSCAxCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwxX1NUQVRVU19fcGluXzBfX2xvdyAwCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwxX1NUQVRVU19fcGluXzBfX2hpZ2ggMQorI2RlZmluZSBSX1NZTkNfU0VSSUFMMV9TVEFUVVNfX3VuZGVyZmxvd19fQklUTlIgMTAKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDFfU1RBVFVTX191bmRlcmZsb3dfX1dJRFRIIDEKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDFfU1RBVFVTX191bmRlcmZsb3dfX25vIDAKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDFfU1RBVFVTX191bmRlcmZsb3dfX3llcyAxCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwxX1NUQVRVU19fb3ZlcnJ1bl9fQklUTlIgOQorI2RlZmluZSBSX1NZTkNfU0VSSUFMMV9TVEFUVVNfX292ZXJydW5fX1dJRFRIIDEKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDFfU1RBVFVTX19vdmVycnVuX19ubyAwCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwxX1NUQVRVU19fb3ZlcnJ1bl9feWVzIDEKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDFfU1RBVFVTX19kYXRhX2F2YWlsX19CSVROUiA4CisjZGVmaW5lIFJfU1lOQ19TRVJJQUwxX1NUQVRVU19fZGF0YV9hdmFpbF9fV0lEVEggMQorI2RlZmluZSBSX1NZTkNfU0VSSUFMMV9TVEFUVVNfX2RhdGFfYXZhaWxfX25vIDAKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDFfU1RBVFVTX19kYXRhX2F2YWlsX195ZXMgMQorI2RlZmluZSBSX1NZTkNfU0VSSUFMMV9TVEFUVVNfX2RhdGFfX0JJVE5SIDAKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDFfU1RBVFVTX19kYXRhX19XSURUSCA4CisKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDFfVFJfREFUQSAoSU9fVFlQRUNBU1RfVURXT1JEIDB4YjAwMDAwNmMpCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwxX1RSX0RBVEFfX2RhdGFfb3V0X19CSVROUiAwCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwxX1RSX0RBVEFfX2RhdGFfb3V0X19XSURUSCAzMgorCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwxX1RSX1dPUkQgKElPX1RZUEVDQVNUX1VXT1JEIDB4YjAwMDAwNmMpCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwxX1RSX1dPUkRfX2RhdGFfb3V0X19CSVROUiAwCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwxX1RSX1dPUkRfX2RhdGFfb3V0X19XSURUSCAxNgorCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwxX1RSX0JZVEUgKElPX1RZUEVDQVNUX0JZVEUgMHhiMDAwMDA2YykKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDFfVFJfQllURV9fZGF0YV9vdXRfX0JJVE5SIDAKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDFfVFJfQllURV9fZGF0YV9vdXRfX1dJRFRIIDgKKworI2RlZmluZSBSX1NZTkNfU0VSSUFMMV9DVFJMIChJT19UWVBFQ0FTVF9VRFdPUkQgMHhiMDAwMDA2OCkKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDFfQ1RSTF9fdHJfYmF1ZF9fQklUTlIgMjgKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDFfQ1RSTF9fdHJfYmF1ZF9fV0lEVEggNAorI2RlZmluZSBSX1NZTkNfU0VSSUFMMV9DVFJMX190cl9iYXVkX19jMTUwSHogMAorI2RlZmluZSBSX1NZTkNfU0VSSUFMMV9DVFJMX190cl9iYXVkX19jMzAwSHogMQorI2RlZmluZSBSX1NZTkNfU0VSSUFMMV9DVFJMX190cl9iYXVkX19jNjAwSHogMgorI2RlZmluZSBSX1NZTkNfU0VSSUFMMV9DVFJMX190cl9iYXVkX19jMTIwMEh6IDMKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDFfQ1RSTF9fdHJfYmF1ZF9fYzI0MDBIeiA0CisjZGVmaW5lIFJfU1lOQ19TRVJJQUwxX0NUUkxfX3RyX2JhdWRfX2M0ODAwSHogNQorI2RlZmluZSBSX1NZTkNfU0VSSUFMMV9DVFJMX190cl9iYXVkX19jOTYwMEh6IDYKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDFfQ1RSTF9fdHJfYmF1ZF9fYzE5azJIeiA3CisjZGVmaW5lIFJfU1lOQ19TRVJJQUwxX0NUUkxfX3RyX2JhdWRfX2MyOGs4SHogOAorI2RlZmluZSBSX1NZTkNfU0VSSUFMMV9DVFJMX190cl9iYXVkX19jNTdrNkh6IDkKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDFfQ1RSTF9fdHJfYmF1ZF9fYzExNWsySHogMTAKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDFfQ1RSTF9fdHJfYmF1ZF9fYzIzMGs0SHogMTEKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDFfQ1RSTF9fdHJfYmF1ZF9fYzQ2MGs4SHogMTIKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDFfQ1RSTF9fdHJfYmF1ZF9fYzkyMWs2SHogMTMKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDFfQ1RSTF9fdHJfYmF1ZF9fYzMxMjVrSHogMTQKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDFfQ1RSTF9fdHJfYmF1ZF9fcmVzZXJ2ZWQgMTUKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDFfQ1RSTF9fZG1hX2VuYWJsZV9fQklUTlIgMjcKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDFfQ1RSTF9fZG1hX2VuYWJsZV9fV0lEVEggMQorI2RlZmluZSBSX1NZTkNfU0VSSUFMMV9DVFJMX19kbWFfZW5hYmxlX19vbiAxCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwxX0NUUkxfX2RtYV9lbmFibGVfX29mZiAwCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwxX0NUUkxfX21vZGVfX0JJVE5SIDI0CisjZGVmaW5lIFJfU1lOQ19TRVJJQUwxX0NUUkxfX21vZGVfX1dJRFRIIDMKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDFfQ1RSTF9fbW9kZV9fbWFzdGVyX291dHB1dCAwCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwxX0NUUkxfX21vZGVfX3NsYXZlX291dHB1dCAxCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwxX0NUUkxfX21vZGVfX21hc3Rlcl9pbnB1dCAyCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwxX0NUUkxfX21vZGVfX3NsYXZlX2lucHV0IDMKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDFfQ1RSTF9fbW9kZV9fbWFzdGVyX2JpZGlyIDQKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDFfQ1RSTF9fbW9kZV9fc2xhdmVfYmlkaXIgNQorI2RlZmluZSBSX1NZTkNfU0VSSUFMMV9DVFJMX19lcnJvcl9fQklUTlIgMjMKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDFfQ1RSTF9fZXJyb3JfX1dJRFRIIDEKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDFfQ1RSTF9fZXJyb3JfX25vcm1hbCAwCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwxX0NUUkxfX2Vycm9yX19pZ25vcmUgMQorI2RlZmluZSBSX1NZTkNfU0VSSUFMMV9DVFJMX19yZWNfZW5hYmxlX19CSVROUiAyMgorI2RlZmluZSBSX1NZTkNfU0VSSUFMMV9DVFJMX19yZWNfZW5hYmxlX19XSURUSCAxCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwxX0NUUkxfX3JlY19lbmFibGVfX2Rpc2FibGUgMAorI2RlZmluZSBSX1NZTkNfU0VSSUFMMV9DVFJMX19yZWNfZW5hYmxlX19lbmFibGUgMQorI2RlZmluZSBSX1NZTkNfU0VSSUFMMV9DVFJMX19mX3N5bmN0eXBlX19CSVROUiAyMQorI2RlZmluZSBSX1NZTkNfU0VSSUFMMV9DVFJMX19mX3N5bmN0eXBlX19XSURUSCAxCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwxX0NUUkxfX2Zfc3luY3R5cGVfX25vcm1hbCAwCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwxX0NUUkxfX2Zfc3luY3R5cGVfX2Vhcmx5IDEKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDFfQ1RSTF9fZl9zeW5jc2l6ZV9fQklUTlIgMTkKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDFfQ1RSTF9fZl9zeW5jc2l6ZV9fV0lEVEggMgorI2RlZmluZSBSX1NZTkNfU0VSSUFMMV9DVFJMX19mX3N5bmNzaXplX19iaXQgMAorI2RlZmluZSBSX1NZTkNfU0VSSUFMMV9DVFJMX19mX3N5bmNzaXplX193b3JkIDEKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDFfQ1RSTF9fZl9zeW5jc2l6ZV9fZXh0ZW5kZWQgMgorI2RlZmluZSBSX1NZTkNfU0VSSUFMMV9DVFJMX19mX3N5bmNzaXplX19yZXNlcnZlZCAzCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwxX0NUUkxfX2Zfc3luY19fQklUTlIgMTgKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDFfQ1RSTF9fZl9zeW5jX19XSURUSCAxCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwxX0NUUkxfX2Zfc3luY19fb24gMAorI2RlZmluZSBSX1NZTkNfU0VSSUFMMV9DVFJMX19mX3N5bmNfX29mZiAxCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwxX0NUUkxfX2Nsa19tb2RlX19CSVROUiAxNworI2RlZmluZSBSX1NZTkNfU0VSSUFMMV9DVFJMX19jbGtfbW9kZV9fV0lEVEggMQorI2RlZmluZSBSX1NZTkNfU0VSSUFMMV9DVFJMX19jbGtfbW9kZV9fbm9ybWFsIDAKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDFfQ1RSTF9fY2xrX21vZGVfX2dhdGVkIDEKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDFfQ1RSTF9fY2xrX2hhbHRfX0JJVE5SIDE2CisjZGVmaW5lIFJfU1lOQ19TRVJJQUwxX0NUUkxfX2Nsa19oYWx0X19XSURUSCAxCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwxX0NUUkxfX2Nsa19oYWx0X19ydW5uaW5nIDAKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDFfQ1RSTF9fY2xrX2hhbHRfX3N0b3BwZWQgMQorI2RlZmluZSBSX1NZTkNfU0VSSUFMMV9DVFJMX19iaXRvcmRlcl9fQklUTlIgMTUKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDFfQ1RSTF9fYml0b3JkZXJfX1dJRFRIIDEKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDFfQ1RSTF9fYml0b3JkZXJfX2xzYiAwCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwxX0NUUkxfX2JpdG9yZGVyX19tc2IgMQorI2RlZmluZSBSX1NZTkNfU0VSSUFMMV9DVFJMX190cl9lbmFibGVfX0JJVE5SIDE0CisjZGVmaW5lIFJfU1lOQ19TRVJJQUwxX0NUUkxfX3RyX2VuYWJsZV9fV0lEVEggMQorI2RlZmluZSBSX1NZTkNfU0VSSUFMMV9DVFJMX190cl9lbmFibGVfX2Rpc2FibGUgMAorI2RlZmluZSBSX1NZTkNfU0VSSUFMMV9DVFJMX190cl9lbmFibGVfX2VuYWJsZSAxCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwxX0NUUkxfX3dvcmRzaXplX19CSVROUiAxMQorI2RlZmluZSBSX1NZTkNfU0VSSUFMMV9DVFJMX193b3Jkc2l6ZV9fV0lEVEggMworI2RlZmluZSBSX1NZTkNfU0VSSUFMMV9DVFJMX193b3Jkc2l6ZV9fc2l6ZThiaXQgMAorI2RlZmluZSBSX1NZTkNfU0VSSUFMMV9DVFJMX193b3Jkc2l6ZV9fc2l6ZTEyYml0IDEKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDFfQ1RSTF9fd29yZHNpemVfX3NpemUxNmJpdCAyCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwxX0NUUkxfX3dvcmRzaXplX19zaXplMjRiaXQgMworI2RlZmluZSBSX1NZTkNfU0VSSUFMMV9DVFJMX193b3Jkc2l6ZV9fc2l6ZTMyYml0IDQKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDFfQ1RSTF9fYnVmX2VtcHR5X19CSVROUiAxMAorI2RlZmluZSBSX1NZTkNfU0VSSUFMMV9DVFJMX19idWZfZW1wdHlfX1dJRFRIIDEKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDFfQ1RSTF9fYnVmX2VtcHR5X19sbXRfOCAwCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwxX0NUUkxfX2J1Zl9lbXB0eV9fbG10XzAgMQorI2RlZmluZSBSX1NZTkNfU0VSSUFMMV9DVFJMX19idWZfZnVsbF9fQklUTlIgOQorI2RlZmluZSBSX1NZTkNfU0VSSUFMMV9DVFJMX19idWZfZnVsbF9fV0lEVEggMQorI2RlZmluZSBSX1NZTkNfU0VSSUFMMV9DVFJMX19idWZfZnVsbF9fbG10XzMyIDAKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDFfQ1RSTF9fYnVmX2Z1bGxfX2xtdF84IDEKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDFfQ1RSTF9fZmxvd19jdHJsX19CSVROUiA4CisjZGVmaW5lIFJfU1lOQ19TRVJJQUwxX0NUUkxfX2Zsb3dfY3RybF9fV0lEVEggMQorI2RlZmluZSBSX1NZTkNfU0VSSUFMMV9DVFJMX19mbG93X2N0cmxfX2Rpc2FibGVkIDAKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDFfQ1RSTF9fZmxvd19jdHJsX19lbmFibGVkIDEKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDFfQ1RSTF9fY2xrX3BvbGFyaXR5X19CSVROUiA2CisjZGVmaW5lIFJfU1lOQ19TRVJJQUwxX0NUUkxfX2Nsa19wb2xhcml0eV9fV0lEVEggMQorI2RlZmluZSBSX1NZTkNfU0VSSUFMMV9DVFJMX19jbGtfcG9sYXJpdHlfX3BvcyAwCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwxX0NUUkxfX2Nsa19wb2xhcml0eV9fbmVnIDEKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDFfQ1RSTF9fZnJhbWVfcG9sYXJpdHlfX0JJVE5SIDUKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDFfQ1RSTF9fZnJhbWVfcG9sYXJpdHlfX1dJRFRIIDEKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDFfQ1RSTF9fZnJhbWVfcG9sYXJpdHlfX25vcm1hbCAwCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwxX0NUUkxfX2ZyYW1lX3BvbGFyaXR5X19pbnZlcnRlZCAxCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwxX0NUUkxfX3N0YXR1c19wb2xhcml0eV9fQklUTlIgNAorI2RlZmluZSBSX1NZTkNfU0VSSUFMMV9DVFJMX19zdGF0dXNfcG9sYXJpdHlfX1dJRFRIIDEKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDFfQ1RSTF9fc3RhdHVzX3BvbGFyaXR5X19ub3JtYWwgMAorI2RlZmluZSBSX1NZTkNfU0VSSUFMMV9DVFJMX19zdGF0dXNfcG9sYXJpdHlfX2ludmVydGVkIDEKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDFfQ1RSTF9fY2xrX2RyaXZlcl9fQklUTlIgMworI2RlZmluZSBSX1NZTkNfU0VSSUFMMV9DVFJMX19jbGtfZHJpdmVyX19XSURUSCAxCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwxX0NUUkxfX2Nsa19kcml2ZXJfX25vcm1hbCAwCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwxX0NUUkxfX2Nsa19kcml2ZXJfX2ludmVydGVkIDEKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDFfQ1RSTF9fZnJhbWVfZHJpdmVyX19CSVROUiAyCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwxX0NUUkxfX2ZyYW1lX2RyaXZlcl9fV0lEVEggMQorI2RlZmluZSBSX1NZTkNfU0VSSUFMMV9DVFJMX19mcmFtZV9kcml2ZXJfX25vcm1hbCAwCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwxX0NUUkxfX2ZyYW1lX2RyaXZlcl9faW52ZXJ0ZWQgMQorI2RlZmluZSBSX1NZTkNfU0VSSUFMMV9DVFJMX19zdGF0dXNfZHJpdmVyX19CSVROUiAxCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwxX0NUUkxfX3N0YXR1c19kcml2ZXJfX1dJRFRIIDEKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDFfQ1RSTF9fc3RhdHVzX2RyaXZlcl9fbm9ybWFsIDAKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDFfQ1RSTF9fc3RhdHVzX2RyaXZlcl9faW52ZXJ0ZWQgMQorI2RlZmluZSBSX1NZTkNfU0VSSUFMMV9DVFJMX19kZWZfb3V0MF9fQklUTlIgMAorI2RlZmluZSBSX1NZTkNfU0VSSUFMMV9DVFJMX19kZWZfb3V0MF9fV0lEVEggMQorI2RlZmluZSBSX1NZTkNfU0VSSUFMMV9DVFJMX19kZWZfb3V0MF9faGlnaCAxCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwxX0NUUkxfX2RlZl9vdXQwX19sb3cgMAorCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwzX1JFQ19EQVRBIChJT19UWVBFQ0FTVF9ST19VRFdPUkQgMHhiMDAwMDA3YykKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDNfUkVDX0RBVEFfX2RhdGFfaW5fX0JJVE5SIDAKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDNfUkVDX0RBVEFfX2RhdGFfaW5fX1dJRFRIIDMyCisKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDNfUkVDX1dPUkQgKElPX1RZUEVDQVNUX1JPX1VXT1JEIDB4YjAwMDAwN2MpCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwzX1JFQ19XT1JEX19kYXRhX2luX19CSVROUiAwCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwzX1JFQ19XT1JEX19kYXRhX2luX19XSURUSCAxNgorCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwzX1JFQ19CWVRFIChJT19UWVBFQ0FTVF9ST19CWVRFIDB4YjAwMDAwN2MpCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwzX1JFQ19CWVRFX19kYXRhX2luX19CSVROUiAwCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwzX1JFQ19CWVRFX19kYXRhX2luX19XSURUSCA4CisKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDNfU1RBVFVTIChJT19UWVBFQ0FTVF9ST19VRFdPUkQgMHhiMDAwMDA3OCkKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDNfU1RBVFVTX19yZWNfc3RhdHVzX19CSVROUiAxNQorI2RlZmluZSBSX1NZTkNfU0VSSUFMM19TVEFUVVNfX3JlY19zdGF0dXNfX1dJRFRIIDEKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDNfU1RBVFVTX19yZWNfc3RhdHVzX19ydW5uaW5nIDAKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDNfU1RBVFVTX19yZWNfc3RhdHVzX19pZGxlIDEKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDNfU1RBVFVTX190cl9lbXB0eV9fQklUTlIgMTQKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDNfU1RBVFVTX190cl9lbXB0eV9fV0lEVEggMQorI2RlZmluZSBSX1NZTkNfU0VSSUFMM19TVEFUVVNfX3RyX2VtcHR5X19lbXB0eSAxCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwzX1NUQVRVU19fdHJfZW1wdHlfX25vdF9lbXB0eSAwCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwzX1NUQVRVU19fdHJfcmVhZHlfX0JJVE5SIDEzCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwzX1NUQVRVU19fdHJfcmVhZHlfX1dJRFRIIDEKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDNfU1RBVFVTX190cl9yZWFkeV9fZnVsbCAwCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwzX1NUQVRVU19fdHJfcmVhZHlfX3JlYWR5IDEKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDNfU1RBVFVTX19waW5fMV9fQklUTlIgMTIKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDNfU1RBVFVTX19waW5fMV9fV0lEVEggMQorI2RlZmluZSBSX1NZTkNfU0VSSUFMM19TVEFUVVNfX3Bpbl8xX19sb3cgMAorI2RlZmluZSBSX1NZTkNfU0VSSUFMM19TVEFUVVNfX3Bpbl8xX19oaWdoIDEKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDNfU1RBVFVTX19waW5fMF9fQklUTlIgMTEKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDNfU1RBVFVTX19waW5fMF9fV0lEVEggMQorI2RlZmluZSBSX1NZTkNfU0VSSUFMM19TVEFUVVNfX3Bpbl8wX19sb3cgMAorI2RlZmluZSBSX1NZTkNfU0VSSUFMM19TVEFUVVNfX3Bpbl8wX19oaWdoIDEKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDNfU1RBVFVTX191bmRlcmZsb3dfX0JJVE5SIDEwCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwzX1NUQVRVU19fdW5kZXJmbG93X19XSURUSCAxCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwzX1NUQVRVU19fdW5kZXJmbG93X19ubyAwCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwzX1NUQVRVU19fdW5kZXJmbG93X195ZXMgMQorI2RlZmluZSBSX1NZTkNfU0VSSUFMM19TVEFUVVNfX292ZXJydW5fX0JJVE5SIDkKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDNfU1RBVFVTX19vdmVycnVuX19XSURUSCAxCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwzX1NUQVRVU19fb3ZlcnJ1bl9fbm8gMAorI2RlZmluZSBSX1NZTkNfU0VSSUFMM19TVEFUVVNfX292ZXJydW5fX3llcyAxCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwzX1NUQVRVU19fZGF0YV9hdmFpbF9fQklUTlIgOAorI2RlZmluZSBSX1NZTkNfU0VSSUFMM19TVEFUVVNfX2RhdGFfYXZhaWxfX1dJRFRIIDEKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDNfU1RBVFVTX19kYXRhX2F2YWlsX19ubyAwCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwzX1NUQVRVU19fZGF0YV9hdmFpbF9feWVzIDEKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDNfU1RBVFVTX19kYXRhX19CSVROUiAwCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwzX1NUQVRVU19fZGF0YV9fV0lEVEggOAorCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwzX1RSX0RBVEEgKElPX1RZUEVDQVNUX1VEV09SRCAweGIwMDAwMDdjKQorI2RlZmluZSBSX1NZTkNfU0VSSUFMM19UUl9EQVRBX19kYXRhX291dF9fQklUTlIgMAorI2RlZmluZSBSX1NZTkNfU0VSSUFMM19UUl9EQVRBX19kYXRhX291dF9fV0lEVEggMzIKKworI2RlZmluZSBSX1NZTkNfU0VSSUFMM19UUl9XT1JEIChJT19UWVBFQ0FTVF9VV09SRCAweGIwMDAwMDdjKQorI2RlZmluZSBSX1NZTkNfU0VSSUFMM19UUl9XT1JEX19kYXRhX291dF9fQklUTlIgMAorI2RlZmluZSBSX1NZTkNfU0VSSUFMM19UUl9XT1JEX19kYXRhX291dF9fV0lEVEggMTYKKworI2RlZmluZSBSX1NZTkNfU0VSSUFMM19UUl9CWVRFIChJT19UWVBFQ0FTVF9CWVRFIDB4YjAwMDAwN2MpCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwzX1RSX0JZVEVfX2RhdGFfb3V0X19CSVROUiAwCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwzX1RSX0JZVEVfX2RhdGFfb3V0X19XSURUSCA4CisKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDNfQ1RSTCAoSU9fVFlQRUNBU1RfVURXT1JEIDB4YjAwMDAwNzgpCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwzX0NUUkxfX3RyX2JhdWRfX0JJVE5SIDI4CisjZGVmaW5lIFJfU1lOQ19TRVJJQUwzX0NUUkxfX3RyX2JhdWRfX1dJRFRIIDQKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDNfQ1RSTF9fdHJfYmF1ZF9fYzE1MEh6IDAKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDNfQ1RSTF9fdHJfYmF1ZF9fYzMwMEh6IDEKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDNfQ1RSTF9fdHJfYmF1ZF9fYzYwMEh6IDIKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDNfQ1RSTF9fdHJfYmF1ZF9fYzEyMDBIeiAzCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwzX0NUUkxfX3RyX2JhdWRfX2MyNDAwSHogNAorI2RlZmluZSBSX1NZTkNfU0VSSUFMM19DVFJMX190cl9iYXVkX19jNDgwMEh6IDUKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDNfQ1RSTF9fdHJfYmF1ZF9fYzk2MDBIeiA2CisjZGVmaW5lIFJfU1lOQ19TRVJJQUwzX0NUUkxfX3RyX2JhdWRfX2MxOWsySHogNworI2RlZmluZSBSX1NZTkNfU0VSSUFMM19DVFJMX190cl9iYXVkX19jMjhrOEh6IDgKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDNfQ1RSTF9fdHJfYmF1ZF9fYzU3azZIeiA5CisjZGVmaW5lIFJfU1lOQ19TRVJJQUwzX0NUUkxfX3RyX2JhdWRfX2MxMTVrMkh6IDEwCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwzX0NUUkxfX3RyX2JhdWRfX2MyMzBrNEh6IDExCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwzX0NUUkxfX3RyX2JhdWRfX2M0NjBrOEh6IDEyCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwzX0NUUkxfX3RyX2JhdWRfX2M5MjFrNkh6IDEzCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwzX0NUUkxfX3RyX2JhdWRfX2MzMTI1a0h6IDE0CisjZGVmaW5lIFJfU1lOQ19TRVJJQUwzX0NUUkxfX3RyX2JhdWRfX3Jlc2VydmVkIDE1CisjZGVmaW5lIFJfU1lOQ19TRVJJQUwzX0NUUkxfX2RtYV9lbmFibGVfX0JJVE5SIDI3CisjZGVmaW5lIFJfU1lOQ19TRVJJQUwzX0NUUkxfX2RtYV9lbmFibGVfX1dJRFRIIDEKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDNfQ1RSTF9fZG1hX2VuYWJsZV9fb24gMQorI2RlZmluZSBSX1NZTkNfU0VSSUFMM19DVFJMX19kbWFfZW5hYmxlX19vZmYgMAorI2RlZmluZSBSX1NZTkNfU0VSSUFMM19DVFJMX19tb2RlX19CSVROUiAyNAorI2RlZmluZSBSX1NZTkNfU0VSSUFMM19DVFJMX19tb2RlX19XSURUSCAzCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwzX0NUUkxfX21vZGVfX21hc3Rlcl9vdXRwdXQgMAorI2RlZmluZSBSX1NZTkNfU0VSSUFMM19DVFJMX19tb2RlX19zbGF2ZV9vdXRwdXQgMQorI2RlZmluZSBSX1NZTkNfU0VSSUFMM19DVFJMX19tb2RlX19tYXN0ZXJfaW5wdXQgMgorI2RlZmluZSBSX1NZTkNfU0VSSUFMM19DVFJMX19tb2RlX19zbGF2ZV9pbnB1dCAzCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwzX0NUUkxfX21vZGVfX21hc3Rlcl9iaWRpciA0CisjZGVmaW5lIFJfU1lOQ19TRVJJQUwzX0NUUkxfX21vZGVfX3NsYXZlX2JpZGlyIDUKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDNfQ1RSTF9fZXJyb3JfX0JJVE5SIDIzCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwzX0NUUkxfX2Vycm9yX19XSURUSCAxCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwzX0NUUkxfX2Vycm9yX19ub3JtYWwgMAorI2RlZmluZSBSX1NZTkNfU0VSSUFMM19DVFJMX19lcnJvcl9faWdub3JlIDEKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDNfQ1RSTF9fcmVjX2VuYWJsZV9fQklUTlIgMjIKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDNfQ1RSTF9fcmVjX2VuYWJsZV9fV0lEVEggMQorI2RlZmluZSBSX1NZTkNfU0VSSUFMM19DVFJMX19yZWNfZW5hYmxlX19kaXNhYmxlIDAKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDNfQ1RSTF9fcmVjX2VuYWJsZV9fZW5hYmxlIDEKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDNfQ1RSTF9fZl9zeW5jdHlwZV9fQklUTlIgMjEKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDNfQ1RSTF9fZl9zeW5jdHlwZV9fV0lEVEggMQorI2RlZmluZSBSX1NZTkNfU0VSSUFMM19DVFJMX19mX3N5bmN0eXBlX19ub3JtYWwgMAorI2RlZmluZSBSX1NZTkNfU0VSSUFMM19DVFJMX19mX3N5bmN0eXBlX19lYXJseSAxCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwzX0NUUkxfX2Zfc3luY3NpemVfX0JJVE5SIDE5CisjZGVmaW5lIFJfU1lOQ19TRVJJQUwzX0NUUkxfX2Zfc3luY3NpemVfX1dJRFRIIDIKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDNfQ1RSTF9fZl9zeW5jc2l6ZV9fYml0IDAKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDNfQ1RSTF9fZl9zeW5jc2l6ZV9fd29yZCAxCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwzX0NUUkxfX2Zfc3luY3NpemVfX2V4dGVuZGVkIDIKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDNfQ1RSTF9fZl9zeW5jc2l6ZV9fcmVzZXJ2ZWQgMworI2RlZmluZSBSX1NZTkNfU0VSSUFMM19DVFJMX19mX3N5bmNfX0JJVE5SIDE4CisjZGVmaW5lIFJfU1lOQ19TRVJJQUwzX0NUUkxfX2Zfc3luY19fV0lEVEggMQorI2RlZmluZSBSX1NZTkNfU0VSSUFMM19DVFJMX19mX3N5bmNfX29uIDAKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDNfQ1RSTF9fZl9zeW5jX19vZmYgMQorI2RlZmluZSBSX1NZTkNfU0VSSUFMM19DVFJMX19jbGtfbW9kZV9fQklUTlIgMTcKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDNfQ1RSTF9fY2xrX21vZGVfX1dJRFRIIDEKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDNfQ1RSTF9fY2xrX21vZGVfX25vcm1hbCAwCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwzX0NUUkxfX2Nsa19tb2RlX19nYXRlZCAxCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwzX0NUUkxfX2Nsa19oYWx0X19CSVROUiAxNgorI2RlZmluZSBSX1NZTkNfU0VSSUFMM19DVFJMX19jbGtfaGFsdF9fV0lEVEggMQorI2RlZmluZSBSX1NZTkNfU0VSSUFMM19DVFJMX19jbGtfaGFsdF9fcnVubmluZyAwCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwzX0NUUkxfX2Nsa19oYWx0X19zdG9wcGVkIDEKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDNfQ1RSTF9fYml0b3JkZXJfX0JJVE5SIDE1CisjZGVmaW5lIFJfU1lOQ19TRVJJQUwzX0NUUkxfX2JpdG9yZGVyX19XSURUSCAxCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwzX0NUUkxfX2JpdG9yZGVyX19sc2IgMAorI2RlZmluZSBSX1NZTkNfU0VSSUFMM19DVFJMX19iaXRvcmRlcl9fbXNiIDEKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDNfQ1RSTF9fdHJfZW5hYmxlX19CSVROUiAxNAorI2RlZmluZSBSX1NZTkNfU0VSSUFMM19DVFJMX190cl9lbmFibGVfX1dJRFRIIDEKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDNfQ1RSTF9fdHJfZW5hYmxlX19kaXNhYmxlIDAKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDNfQ1RSTF9fdHJfZW5hYmxlX19lbmFibGUgMQorI2RlZmluZSBSX1NZTkNfU0VSSUFMM19DVFJMX193b3Jkc2l6ZV9fQklUTlIgMTEKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDNfQ1RSTF9fd29yZHNpemVfX1dJRFRIIDMKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDNfQ1RSTF9fd29yZHNpemVfX3NpemU4Yml0IDAKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDNfQ1RSTF9fd29yZHNpemVfX3NpemUxMmJpdCAxCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwzX0NUUkxfX3dvcmRzaXplX19zaXplMTZiaXQgMgorI2RlZmluZSBSX1NZTkNfU0VSSUFMM19DVFJMX193b3Jkc2l6ZV9fc2l6ZTI0Yml0IDMKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDNfQ1RSTF9fd29yZHNpemVfX3NpemUzMmJpdCA0CisjZGVmaW5lIFJfU1lOQ19TRVJJQUwzX0NUUkxfX2J1Zl9lbXB0eV9fQklUTlIgMTAKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDNfQ1RSTF9fYnVmX2VtcHR5X19XSURUSCAxCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwzX0NUUkxfX2J1Zl9lbXB0eV9fbG10XzggMAorI2RlZmluZSBSX1NZTkNfU0VSSUFMM19DVFJMX19idWZfZW1wdHlfX2xtdF8wIDEKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDNfQ1RSTF9fYnVmX2Z1bGxfX0JJVE5SIDkKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDNfQ1RSTF9fYnVmX2Z1bGxfX1dJRFRIIDEKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDNfQ1RSTF9fYnVmX2Z1bGxfX2xtdF8zMiAwCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwzX0NUUkxfX2J1Zl9mdWxsX19sbXRfOCAxCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwzX0NUUkxfX2Zsb3dfY3RybF9fQklUTlIgOAorI2RlZmluZSBSX1NZTkNfU0VSSUFMM19DVFJMX19mbG93X2N0cmxfX1dJRFRIIDEKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDNfQ1RSTF9fZmxvd19jdHJsX19kaXNhYmxlZCAwCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwzX0NUUkxfX2Zsb3dfY3RybF9fZW5hYmxlZCAxCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwzX0NUUkxfX2Nsa19wb2xhcml0eV9fQklUTlIgNgorI2RlZmluZSBSX1NZTkNfU0VSSUFMM19DVFJMX19jbGtfcG9sYXJpdHlfX1dJRFRIIDEKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDNfQ1RSTF9fY2xrX3BvbGFyaXR5X19wb3MgMAorI2RlZmluZSBSX1NZTkNfU0VSSUFMM19DVFJMX19jbGtfcG9sYXJpdHlfX25lZyAxCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwzX0NUUkxfX2ZyYW1lX3BvbGFyaXR5X19CSVROUiA1CisjZGVmaW5lIFJfU1lOQ19TRVJJQUwzX0NUUkxfX2ZyYW1lX3BvbGFyaXR5X19XSURUSCAxCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwzX0NUUkxfX2ZyYW1lX3BvbGFyaXR5X19ub3JtYWwgMAorI2RlZmluZSBSX1NZTkNfU0VSSUFMM19DVFJMX19mcmFtZV9wb2xhcml0eV9faW52ZXJ0ZWQgMQorI2RlZmluZSBSX1NZTkNfU0VSSUFMM19DVFJMX19zdGF0dXNfcG9sYXJpdHlfX0JJVE5SIDQKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDNfQ1RSTF9fc3RhdHVzX3BvbGFyaXR5X19XSURUSCAxCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwzX0NUUkxfX3N0YXR1c19wb2xhcml0eV9fbm9ybWFsIDAKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDNfQ1RSTF9fc3RhdHVzX3BvbGFyaXR5X19pbnZlcnRlZCAxCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwzX0NUUkxfX2Nsa19kcml2ZXJfX0JJVE5SIDMKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDNfQ1RSTF9fY2xrX2RyaXZlcl9fV0lEVEggMQorI2RlZmluZSBSX1NZTkNfU0VSSUFMM19DVFJMX19jbGtfZHJpdmVyX19ub3JtYWwgMAorI2RlZmluZSBSX1NZTkNfU0VSSUFMM19DVFJMX19jbGtfZHJpdmVyX19pbnZlcnRlZCAxCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwzX0NUUkxfX2ZyYW1lX2RyaXZlcl9fQklUTlIgMgorI2RlZmluZSBSX1NZTkNfU0VSSUFMM19DVFJMX19mcmFtZV9kcml2ZXJfX1dJRFRIIDEKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDNfQ1RSTF9fZnJhbWVfZHJpdmVyX19ub3JtYWwgMAorI2RlZmluZSBSX1NZTkNfU0VSSUFMM19DVFJMX19mcmFtZV9kcml2ZXJfX2ludmVydGVkIDEKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDNfQ1RSTF9fc3RhdHVzX2RyaXZlcl9fQklUTlIgMQorI2RlZmluZSBSX1NZTkNfU0VSSUFMM19DVFJMX19zdGF0dXNfZHJpdmVyX19XSURUSCAxCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwzX0NUUkxfX3N0YXR1c19kcml2ZXJfX25vcm1hbCAwCisjZGVmaW5lIFJfU1lOQ19TRVJJQUwzX0NUUkxfX3N0YXR1c19kcml2ZXJfX2ludmVydGVkIDEKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDNfQ1RSTF9fZGVmX291dDBfX0JJVE5SIDAKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDNfQ1RSTF9fZGVmX291dDBfX1dJRFRIIDEKKyNkZWZpbmUgUl9TWU5DX1NFUklBTDNfQ1RSTF9fZGVmX291dDBfX2hpZ2ggMQorI2RlZmluZSBSX1NZTkNfU0VSSUFMM19DVFJMX19kZWZfb3V0MF9fbG93IDAKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy9hcmNoLXYxMC9zdl9hZGRyX2FnLmggYi9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjEwL3N2X2FkZHJfYWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGE2YjY4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9hcmNoLXYxMC9zdl9hZGRyX2FnLmgKQEAgLTAsMCArMSwxMzkgQEAKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorKiEgTUFDUk9TOgorKiEgICBJT19NQVNLKHJlZyxmaWVsZCkKKyohICAgSU9fU1RBVEUocmVnLGZpZWxkLHN0YXRlKQorKiEgICBJT19FWFRSQUNUKHJlZyxmaWVsZCx2YWwpCisqISAgIElPX1NUQVRFX1ZBTFVFKHJlZyxmaWVsZCxzdGF0ZSkKKyohICAgSU9fQklUTlIocmVnLGZpZWxkKQorKiEgICBJT19XSURUSChyZWcsZmllbGQpCisqISAgIElPX0ZJRUxEKHJlZyxmaWVsZCx2YWwpCisqISAgIElPX1JEKHJlZykKKyohICAgQWxsIG1vZGVyZWdpc3RlciBhZGRyZXNzZXMgYW5kIGZpZWxkcyBvZiB0aGVzZS4KKyohCisqISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fc3ZfYWRkcl9hZ19oX18KKyNkZWZpbmUgX19zdl9hZGRyX2FnX2hfXworCisKKyNkZWZpbmUgX190ZXN0X3N2X2FkZHJfXyAwCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCishKiBHZW5lcmFsIG1hY3JvcyB0byBtYW5pcHVsYXRlIG1vZGVyZWdpc3RlcnMuCishKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogSU9fTUFTSyByZXR1cm5zIGEgbWFzayBmb3IgYSBzcGVjaWZpZWQgYml0ZmllbGQgaW4gYSByZWdpc3Rlci4KKyAgIE5vdGUgdGhhdCB0aGlzIG1hY3JvIGRvZXNuJ3Qgd29yayB3aGVuIGZpZWxkIHdpZHRoIGlzIDMyIGJpdHMuICovCisjZGVmaW5lIElPX01BU0socmVnLCBmaWVsZCkgSU9fTUFTS18gKHJlZyMjXywgZmllbGQjI18pCisjZGVmaW5lIElPX01BU0tfKHJlZ18sIGZpZWxkXykgXAorICAgICggKCAoIDEgPDwgcmVnXyMjXyMjZmllbGRfIyNfV0lEVEggKSAtIDEgKSA8PCByZWdfIyNfIyNmaWVsZF8jI19CSVROUiApCisKKy8qIElPX1NUQVRFIHJldHVybnMgYSBjb25zdGFudCBjb3JyZXNwb25kaW5nIHRvIGEgb25lIG9mIHRoZSBzeW1ib2xpYworICAgc3RhdGVzIHRoYXQgdGhlIGJpdGZpZWxkIGNhbiBoYXZlLiAoU2hpZnRlZCB0byBjb3JyZWN0IHBvc2l0aW9uKSAgKi8KKyNkZWZpbmUgSU9fU1RBVEUocmVnLCBmaWVsZCwgc3RhdGUpIElPX1NUQVRFXyAocmVnIyNfLCBmaWVsZCMjXywgXyMjc3RhdGUpCisjZGVmaW5lIElPX1NUQVRFXyhyZWdfLCBmaWVsZF8sIF9zdGF0ZSkgXAorICAgICggcmVnXyMjXyMjZmllbGRfIyNfc3RhdGUgPDwgcmVnXyMjXyMjZmllbGRfIyNfQklUTlIgKQorCisvKiBJT19FWFRSQUNUIHJldHVybnMgdGhlIG1hc2tlZCBhbmQgc2hpZnRlZCB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIHRoZQorICAgYml0ZmllbGQgY2FuIGhhdmUuICovCisjZGVmaW5lIElPX0VYVFJBQ1QocmVnLCBmaWVsZCwgdmFsKSBJT19FWFRSQUNUXyAocmVnIyNfLCBmaWVsZCMjXywgdmFsKQorI2RlZmluZSBJT19FWFRSQUNUXyhyZWdfLCBmaWVsZF8sIHZhbCkgKCAoKCAoICggMSA8PCByZWdfIyNfIyNmaWVsZF8jI19XSURUSCApIFwKKyAgICAgLSAxICkgPDwgcmVnXyMjXyMjZmllbGRfIyNfQklUTlIgKSAmICh2YWwpKSA+PiByZWdfIyNfIyNmaWVsZF8jI19CSVROUiApCisKKy8qIElPX1NUQVRFX1ZBTFVFIHJldHVybnMgYSBjb25zdGFudCBjb3JyZXNwb25kaW5nIHRvIGEgb25lIG9mIHRoZSBzeW1ib2xpYworICAgc3RhdGVzIHRoYXQgdGhlIGJpdGZpZWxkIGNhbiBoYXZlLiAoTm90IHNoaWZ0ZWQpICAqLworI2RlZmluZSBJT19TVEFURV9WQUxVRShyZWcsIGZpZWxkLCBzdGF0ZSkgXAorICAgIElPX1NUQVRFX1ZBTFVFXyAocmVnIyNfLCBmaWVsZCMjXywgXyMjc3RhdGUpCisjZGVmaW5lIElPX1NUQVRFX1ZBTFVFXyhyZWdfLCBmaWVsZF8sIF9zdGF0ZSkgKCByZWdfIyNfIyNmaWVsZF8jI19zdGF0ZSApCisKKy8qIElPX0ZJRUxEIHNoaWZ0cyB0aGUgdmFsIHBhcmFtZXRlciB0byBiZSBhbGlnbmVkIHdpdGggdGhlIGJpdGZpZWxkCisgICBzcGVjaWZpZWQuICovCisjZGVmaW5lIElPX0ZJRUxEKHJlZywgZmllbGQsIHZhbCkgSU9fRklFTERfIChyZWcjI18sIGZpZWxkIyNfLCB2YWwpCisjZGVmaW5lIElPX0ZJRUxEXyhyZWdfLCBmaWVsZF8sIHZhbCkgKCh2YWwpIDw8IHJlZ18jI18jI2ZpZWxkXyMjX0JJVE5SKQorCisvKiBJT19CSVROUiByZXR1cm5zIHRoZSBzdGFydGluZyBiaXRudW1iZXIgb2YgYSBiaXRmaWVsZC4gQml0IDAgaXMKKyAgIExTQiBhbmQgdGhlIHJldHVybmVkIGJpdG51bWJlciBpcyBMU0Igb2YgdGhlIGZpZWxkLiAqLworI2RlZmluZSBJT19CSVROUihyZWcsIGZpZWxkKSBJT19CSVROUl8gKHJlZyMjXywgZmllbGQjI18pCisjZGVmaW5lIElPX0JJVE5SXyhyZWdfLCBmaWVsZF8pIChyZWdfIyNfIyNmaWVsZF8jI19CSVROUikKKworLyogSU9fV0lEVEggcmV0dXJucyB0aGUgd2lkdGgsIGluIGJpdHMsIG9mIGEgYml0ZmllbGQuICovCisjZGVmaW5lIElPX1dJRFRIKHJlZywgZmllbGQpIElPX1dJRFRIXyAocmVnIyNfLCBmaWVsZCMjXykKKyNkZWZpbmUgSU9fV0lEVEhfKHJlZ18sIGZpZWxkXykgKHJlZ18jI18jI2ZpZWxkXyMjX1dJRFRIKQorCisvKi0tLSBPYnNvbGV0ZS4gS2VwdCBmb3IgYmFja3cgY29tcGF0aWJpbGl0eS4gLS0tKi8KKy8qIFJlYWRzIChvciB3cml0ZXMpIGEgYnl0ZS91d29yZC91ZHdvcmQgZnJvbSB0aGUgc3BlY2lmaWVkIG1vZGUKKyAgIHJlZ2lzdGVyLiAqLworI2RlZmluZSBJT19SRChyZWcpICgqKHZvbGF0aWxlIHUzMiopKHJlZykpCisjZGVmaW5lIElPX1JEX0IocmVnKSAoKih2b2xhdGlsZSB1OCopKHJlZykpCisjZGVmaW5lIElPX1JEX1cocmVnKSAoKih2b2xhdGlsZSB1MTYqKShyZWcpKQorI2RlZmluZSBJT19SRF9EKHJlZykgKCoodm9sYXRpbGUgdTMyKikocmVnKSkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyEqIFN0YXJ0IGFkZHJlc3NlcyBvZiB0aGUgZGlmZmVyZW50IG1lbW9yeSBhcmVhcy4KKyEqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZGVmaW5lIE1FTV9DU0UwX1NUQVJUICgweDAwMDAwMDAwKQorI2RlZmluZSBNRU1fQ1NFMF9TSVpFICgweDA0MDAwMDAwKQorI2RlZmluZSBNRU1fQ1NFMV9TVEFSVCAoMHgwNDAwMDAwMCkKKyNkZWZpbmUgTUVNX0NTRTFfU0laRSAoMHgwNDAwMDAwMCkKKyNkZWZpbmUgTUVNX0NTUjBfU1RBUlQgKDB4MDgwMDAwMDApCisjZGVmaW5lIE1FTV9DU1IxX1NUQVJUICgweDBjMDAwMDAwKQorI2RlZmluZSBNRU1fQ1NQMF9TVEFSVCAoMHgxMDAwMDAwMCkKKyNkZWZpbmUgTUVNX0NTUDFfU1RBUlQgKDB4MTQwMDAwMDApCisjZGVmaW5lIE1FTV9DU1AyX1NUQVJUICgweDE4MDAwMDAwKQorI2RlZmluZSBNRU1fQ1NQM19TVEFSVCAoMHgxYzAwMDAwMCkKKyNkZWZpbmUgTUVNX0NTUDRfU1RBUlQgKDB4MjAwMDAwMDApCisjZGVmaW5lIE1FTV9DU1A1X1NUQVJUICgweDI0MDAwMDAwKQorI2RlZmluZSBNRU1fQ1NQNl9TVEFSVCAoMHgyODAwMDAwMCkKKyNkZWZpbmUgTUVNX0NTUDdfU1RBUlQgKDB4MmMwMDAwMDApCisjZGVmaW5lIE1FTV9EUkFNX1NUQVJUICgweDQwMDAwMDAwKQorCisjZGVmaW5lIE1FTV9OT05fQ0FDSEVBQkxFICgweDgwMDAwMDAwKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorISogVHlwZSBjYXN0cyB1c2VkIGluIG1vZGUgcmVnaXN0ZXIgbWFjcm9zLCBtYWtpbmcgcG9pbnRlcgorISogZGVyZWZlcmVuY2luZyBwb3NzaWJsZS4gRW1wdHkgaW4gYXNzZW1ibGVyLgorISotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZm5kZWYgX19BU1NFTUJMRVJfXworIyBkZWZpbmUgIElPX1RZUEVDQVNUX1VEV09SRCAgKHZvbGF0aWxlIHUzMiopCisjIGRlZmluZSAgSU9fVFlQRUNBU1RfUk9fVURXT1JEICAoY29uc3Qgdm9sYXRpbGUgdTMyKikKKyMgZGVmaW5lICBJT19UWVBFQ0FTVF9VV09SRCAgKHZvbGF0aWxlIHUxNiopCisjIGRlZmluZSAgSU9fVFlQRUNBU1RfUk9fVVdPUkQgIChjb25zdCB2b2xhdGlsZSB1MTYqKQorIyBkZWZpbmUgIElPX1RZUEVDQVNUX0JZVEUgICh2b2xhdGlsZSB1OCopCisjIGRlZmluZSAgSU9fVFlQRUNBU1RfUk9fQllURSAgKGNvbnN0IHZvbGF0aWxlIHU4KikKKyNlbHNlCisjIGRlZmluZSAgSU9fVFlQRUNBU1RfVURXT1JECisjIGRlZmluZSAgSU9fVFlQRUNBU1RfUk9fVURXT1JECisjIGRlZmluZSAgSU9fVFlQRUNBU1RfVVdPUkQKKyMgZGVmaW5lICBJT19UWVBFQ0FTVF9ST19VV09SRAorIyBkZWZpbmUgIElPX1RZUEVDQVNUX0JZVEUKKyMgZGVmaW5lICBJT19UWVBFQ0FTVF9ST19CWVRFCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaW5jbHVkZSAic3ZfYWRkci5hZ2giCisKKyNpZiBfX3Rlc3Rfc3ZfYWRkcl9fCisvKiBJT19NQVNLKCBSX0JVU19DT05GSUcgLCBDRSApICovCitJT19NQVNLKCBSX1dBSVRTVEFURVMgLCBTUkFNX1dTICkKK0lPX01BU0soIFJfVEVTVCAsIFczMiApCisKK0lPX1NUQVRFKCBSX0JVU19DT05GSUcsIENFLCBESVNBQkxFICkKK0lPX1NUQVRFKCBSX0JVU19DT05GSUcsIENFLCBFTkFCTEUgKQorCitJT19TVEFURSggUl9EUkFNX1RJTUlORywgUkVGLCBJVkFMMiApCisKK0lPX01BU0soIFJfRFJBTV9USU1JTkcsIFJFRiApCisKK0lPX01BU0soIFJfRVhUX0RNQV8wX1NUQVQsIFRGUl9DT1VOVCApID4+IElPX0JJVE5SKCBSX0VYVF9ETUFfMF9TVEFULCBURlJfQ09VTlQgKQorCitJT19SRChSX0VYVF9ETUFfMF9TVEFUKSAmIElPX01BU0soIFJfRVhUX0RNQV8wX1NUQVQsIFMgKSAKKyAgID09IElPX1NUQVRFKCBSX0VYVF9ETUFfMF9TVEFULCBTLCBTVEFSVEVEICkKKyNlbmRpZgorCisKKyNlbmRpZiAgLyogaWZuZGVmIF9fc3ZfYWRkcl9hZ19oX18gKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy9hcmNoLXYxMC9zdmludG8uaCBiL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MTAvc3ZpbnRvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg4MWExYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MTAvc3ZpbnRvLmgKQEAgLTAsMCArMSw2NCBAQAorI2lmbmRlZiBfQVNNX0NSSVNfU1ZJTlRPX0gKKyNkZWZpbmUgX0FTTV9DUklTX1NWSU5UT19ICisKKyNpbmNsdWRlICJzdl9hZGRyX2FnLmgiCisKK2V4dGVybiB1bnNpZ25lZCBpbnQgZ2VuY29uZmlnX3NoYWRvdzsgLyogZGVmaW5lZCBhbmQgc2V0IGluIGhlYWQuUyAqLworCisvKiBkbWEgc3R1ZmYgKi8KKworZW51bSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBdmFpbGFibGUgaW46ICAqLworCWRfZW9sICAgICAgPSAoMSA8PCAwKSwgIC8qIGZsYWdzICAgICAgICAgICovCisJZF9lb3AgICAgICA9ICgxIDw8IDEpLCAgLyogZmxhZ3MgJiBzdGF0dXMgKi8KKwlkX3dhaXQgICAgID0gKDEgPDwgMiksICAvKiBmbGFncyAgICAgICAgICAqLworCWRfaW50ICAgICAgPSAoMSA8PCAzKSwgIC8qIGZsYWdzICAgICAgICAgICovCisJZF90eGVyciAgICA9ICgxIDw8IDQpLCAgLyogZmxhZ3MgICAgICAgICAgKi8KKwlkX3N0b3AgICAgID0gKDEgPDwgNCksICAvKiAgICAgICAgIHN0YXR1cyAqLworCWRfZWNwICAgICAgPSAoMSA8PCA0KSwgIC8qIGZsYWdzICYgc3RhdHVzICovCisJZF9wcmkgICAgICA9ICgxIDw8IDUpLCAgLyogZmxhZ3MgJiBzdGF0dXMgKi8KKwlkX2FsaWduZXJyID0gKDEgPDwgNiksICAvKiAgICAgICAgIHN0YXR1cyAqLworCWRfY3JjZXJyICAgPSAoMSA8PCA3KSAgIC8qICAgICAgICAgc3RhdHVzICovCit9OworCisvKiBEbyByZW1lbWJlciB0aGF0IERNQSBkb2VzIG5vdCBnbyB0aHJvdWdoIHRoZSBNTVUgYW5kIG5lZWRzCisgKiBhIHJlYWwgcGh5c2ljYWwgYWRkcmVzcywgbm90IGFuIGFkZHJlc3MgdmlydHVhbGx5IG1hcHBlZCBvcgorICogcGFnZWQuIFRoZXJlZm9yZSB0aGUgYnVmL25leHQgcHRycyBiZWxvdyBhcmUgdW5zaWduZWQgbG9uZyBpbnN0ZWFkCisgKiBvZiB2b2lkICogdG8gZ2l2ZSBhIHdhcm5pbmcgaWYgeW91IHRyeSB0byBwdXQgYSBwb2ludGVyIGRpcmVjdGx5CisgKiB0byB0aGVtIGluc3RlYWQgb2YgZ29pbmcgdGhyb3VnaCB2aXJ0X3RvX3BoeXMvcGh5c190b192aXJ0LgorICovCisKK3R5cGVkZWYgc3RydWN0IGV0cmF4X2RtYV9kZXNjciB7CisJdW5zaWduZWQgc2hvcnQgc3dfbGVuOyAgICAgICAgICAgICAgICAvKiAwLTEgKi8KKwl1bnNpZ25lZCBzaG9ydCBjdHJsOyAgICAgICAgICAgICAgICAgIC8qIDItMyAqLworCXVuc2lnbmVkIGxvbmcgIG5leHQ7ICAgICAgICAgICAgICAgICAgLyogNC03ICovCisJdW5zaWduZWQgbG9uZyAgYnVmOyAgICAgICAgICAgICAgICAgICAvKiA4LTExICovCisJdW5zaWduZWQgc2hvcnQgaHdfbGVuOyAgICAgICAgICAgICAgICAvKiAxMi0xMyAqLworCXVuc2lnbmVkIGNoYXIgIHN0YXR1czsgICAgICAgICAgICAgICAgLyogMTQgKi8KKwl1bnNpZ25lZCBjaGFyICBmaWZvX2xlbjsgICAgICAgICAgICAgIC8qIDE1ICovCit9IGV0cmF4X2RtYV9kZXNjcjsKKworCisvKiBVc2UgdGhpcyBmb3IgY29uc3RhbnQgbnVtYmVycyBvbmx5ICovCisjZGVmaW5lIFJFU0VUX0RNQV9OVU0oIG4gKSBcCisgICpSX0RNQV9DSCMjbiMjX0NNRCA9IElPX1NUQVRFKCBSX0RNQV9DSDBfQ01ELCBjbWQsIHJlc2V0ICkKKworLyogVXNlIHRoaXMgZm9yIGNvbnN0YW50IG51bWJlcnMgb3Igc3ltYm9scywgCisgKiBoYXZpbmcgdHdvIG1hY3JvcyBtYWtlcyBpdCBwb3NzaWJsZSB0byB1c2UgY29uc3RhbnQgZXhwcmVzc2lvbnMuIAorICovCisjZGVmaW5lIFJFU0VUX0RNQSggbiApIFJFU0VUX0RNQV9OVU0oIG4gKQorCisKKy8qIFVzZSB0aGlzIGZvciBjb25zdGFudCBudW1iZXJzIG9ubHkgKi8KKyNkZWZpbmUgV0FJVF9ETUFfTlVNKCBuICkgXAorICB3aGlsZSggKCpSX0RNQV9DSCMjbiMjX0NNRCAmIElPX01BU0soIFJfRE1BX0NIMF9DTUQsIGNtZCApKSAhPSBcCisgICAgICAgICBJT19TVEFURSggUl9ETUFfQ0gwX0NNRCwgY21kLCBob2xkICkgKQorCisvKiBVc2UgdGhpcyBmb3IgY29uc3RhbnQgbnVtYmVycyBvciBzeW1ib2xzIAorICogaGF2aW5nIHR3byBtYWNyb3MgbWFrZXMgaXQgcG9zc2libGUgdG8gdXNlIGNvbnN0YW50IGV4cHJlc3Npb25zLiAKKyAqLworI2RlZmluZSBXQUlUX0RNQSggbiApIFdBSVRfRE1BX05VTSggbiApCisKK2V4dGVybiB2b2lkIHByZXBhcmVfcnhfZGVzY3JpcHRvcihzdHJ1Y3QgZXRyYXhfZG1hX2Rlc2NyICpkZXNjKTsKK2V4dGVybiB2b2lkIGZsdXNoX2V0cmF4X2NhY2hlKHZvaWQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MTAvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjEwL3N5c3RlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4MWNhMzAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjEwL3N5c3RlbS5oCkBAIC0wLDAgKzEsNjIgQEAKKyNpZm5kZWYgX19BU01fQ1JJU19BUkNIX1NZU1RFTV9ICisjZGVmaW5lIF9fQVNNX0NSSVNfQVJDSF9TWVNURU1fSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKy8qIHJlYWQgdGhlIENQVSB2ZXJzaW9uIHJlZ2lzdGVyICovCisKK2V4dGVybiBpbmxpbmUgdW5zaWduZWQgbG9uZyByZHZyKHZvaWQpIHsgCisJdW5zaWduZWQgY2hhciB2cjsKKwlfX2FzbV9fIHZvbGF0aWxlICgibW92ZSAkdnIsJTAiIDogIj1ybSIgKHZyKSk7CisJcmV0dXJuIHZyOworfQorCisvKiByZWFkL3dyaXRlIHRoZSB1c2VyLW1vZGUgc3RhY2twb2ludGVyICovCisKK2V4dGVybiBpbmxpbmUgdW5zaWduZWQgbG9uZyByZHVzcCh2b2lkKSB7CisJdW5zaWduZWQgbG9uZyB1c3A7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oIm1vdmUgJHVzcCwlMCIgOiAiPXJtIiAodXNwKSk7CisJcmV0dXJuIHVzcDsKK30KKworI2RlZmluZSB3cnVzcCh1c3ApIFwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibW92ZSAlMCwkdXNwIiA6IC8qIG5vIG91dHB1dHMgKi8gOiAicm0iICh1c3ApKQorCisvKiByZWFkIHRoZSBjdXJyZW50IHN0YWNrcG9pbnRlciAqLworCitleHRlcm4gaW5saW5lIHVuc2lnbmVkIGxvbmcgcmRzcCh2b2lkKSB7CisJdW5zaWduZWQgbG9uZyBzcDsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibW92ZS5kICRzcCwlMCIgOiAiPXJtIiAoc3ApKTsKKwlyZXR1cm4gc3A7Cit9CisKK2V4dGVybiBpbmxpbmUgdW5zaWduZWQgbG9uZyBfZ2V0X2Jhc2UoY2hhciAqIGFkZHIpCit7CisgIHJldHVybiAwOworfQorCisjZGVmaW5lIG5vcCgpIF9fYXNtX18gX192b2xhdGlsZV9fICgibm9wIik7CisKKyNkZWZpbmUgeGNoZyhwdHIseCkgKChfX3R5cGVvZl9fKCoocHRyKSkpX194Y2hnKCh1bnNpZ25lZCBsb25nKSh4KSwocHRyKSxzaXplb2YoKihwdHIpKSkpCisjZGVmaW5lIHRhcyhwdHIpICh4Y2hnKChwdHIpLDEpKQorCitzdHJ1Y3QgX194Y2hnX2R1bW15IHsgdW5zaWduZWQgbG9uZyBhWzEwMF07IH07CisjZGVmaW5lIF9feGcoeCkgKChzdHJ1Y3QgX194Y2hnX2R1bW15ICopKHgpKQorCisvKiBpbnRlcnJ1cHQgY29udHJvbC4uICovCisjZGVmaW5lIGxvY2FsX3NhdmVfZmxhZ3MoeCkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtb3ZlICRjY3IsJTAiIDogIj1ybSIgKHgpIDogOiAibWVtb3J5Iik7CisjZGVmaW5lIGxvY2FsX2lycV9yZXN0b3JlKHgpIAlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1vdmUgJTAsJGNjciIgOiA6ICJybSIgKHgpIDogIm1lbW9yeSIpOworI2RlZmluZSBsb2NhbF9pcnFfZGlzYWJsZSgpIAlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoICJkaSIgOiA6IDoibWVtb3J5Iik7CisjZGVmaW5lIGxvY2FsX2lycV9lbmFibGUoKQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoICJlaSIgOiA6IDoibWVtb3J5Iik7CisKKyNkZWZpbmUgaXJxc19kaXNhYmxlZCgpCQkJXAorKHsJCQkJCVwKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwkJXAorCWxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpOwlcCisJIShmbGFncyAmICgxPDw1KSk7CQlcCit9KQorCisvKiBGb3Igc3BpbmxvY2tzIGV0YyAqLworI2RlZmluZSBsb2NhbF9pcnFfc2F2ZSh4KSBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1vdmUgJGNjciwlMFxuXHRkaSIgOiAiPXJtIiAoeCkgOiA6ICJtZW1vcnkiKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjEwL3RocmVhZF9pbmZvLmggYi9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjEwL3RocmVhZF9pbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU3ZjVkZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MTAvdGhyZWFkX2luZm8uaApAQCAtMCwwICsxLDEyIEBACisjaWZuZGVmIF9BU01fQVJDSF9USFJFQURfSU5GT19ICisjZGVmaW5lIF9BU01fQVJDSF9USFJFQURfSU5GT19ICisKKy8qIGhvdyB0byBnZXQgdGhlIHRocmVhZCBpbmZvcm1hdGlvbiBzdHJ1Y3QgZnJvbSBDICovCitleHRlcm4gaW5saW5lIHN0cnVjdCB0aHJlYWRfaW5mbyAqY3VycmVudF90aHJlYWRfaW5mbyh2b2lkKQoreworCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGk7CisgICAgICAgIF9fYXNtX18oImFuZC5kICRzcCwlMDsgIjoiPXIiICh0aSkgOiAiMCIgKH44MTkxVUwpKTsKKyAgICAgICAgcmV0dXJuIHRpOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MTAvdGltZXguaCBiL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MTAvdGltZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2ZjNTUzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9hcmNoLXYxMC90aW1leC5oCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiBVc2UgcHJlc2NhbGUgdGltZXIgYXQgMjUwMDAgSHogaW5zdGVhZCBvZiB0aGUgYmF1ZHJhdGUgdGltZXIgYXQgCisgKiAxOTIwMCB0byBnZXQgcmlkIG9mIHRoZSA2NHBwbSB0byBmYXN0IHRpbWVyIChhbmQgd2UgZ2V0IGJldHRlciAKKyAqIHJlc29sdXRpb24gd2l0aGluIGEgamlmZmllIGFzIHdlbGwuIAorICovCisjaWZuZGVmIF9BU01fQ1JJU19BUkNIX1RJTUVYX0gKKyNkZWZpbmUgX0FTTV9DUklTX0FSQ0hfVElNRVhfSAorCisvKiBUaGUgcHJlc2NhbGVyIGNsb2NrIHJ1bnMgYXQgMjVNSHosIHdlIGRpdmlkZSBpdCBieSAxMDAwIGluIHRoZSBwcmVzY2FsZXIgKi8KKy8qIElmIHlvdSBjaGFuZ2UgYW55dGhpbmcgaGVyZSB5b3UgbXVzdCBjaGVjayB0aW1lLmMgYXMgd2VsbC4uLiAqLworI2RlZmluZSBQUkVTQ0FMRV9GUkVRIDI1MDAwMDAwCisjZGVmaW5lIFBSRVNDQUxFX1ZBTFVFIDEwMDAKKyNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFIDI1MDAwIC8qIFVuZGVybHlpbmcgZnJlcXVlbmN5IG9mIHRoZSBIWiB0aW1lciAqLworLyogVGhlIHRpbWVyMCB2YWx1ZXMgZ2l2ZXMgNDB1cyByZXNvbHV0aW9uICgxLzI1MDAwKSBidXQgaW50ZXJydXB0cyBhdCBIWiovCisjZGVmaW5lIFRJTUVSMF9GUkVRIChDTE9DS19USUNLX1JBVEUpCisjZGVmaW5lIFRJTUVSMF9DTEtTRUwgZmxleGlibGUKKyNkZWZpbmUgVElNRVIwX0RJViAoVElNRVIwX0ZSRVEvKEhaKSkKKworCisjZGVmaW5lIEdFVF9KSUZGSUVTX1VTRUMoKSBcCisgICggKFRJTUVSMF9ESVYgLSAqUl9USU1FUjBfREFUQSkgKiAoMTAwMDAwMC9IWikvVElNRVIwX0RJViApCisKK3Vuc2lnbmVkIGxvbmcgZ2V0X25zX2luX2ppZmZpZSh2b2lkKTsKKworZXh0ZXJuIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF91c19pbl9qaWZmaWVfaGlnaHJlcyh2b2lkKQoreworCXJldHVybiBnZXRfbnNfaW5famlmZmllKCkvMTAwMDsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjEwL3RsYi5oIGIvaW5jbHVkZS9hc20tY3Jpcy9hcmNoLXYxMC90bGIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTUyNWJiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9hcmNoLXYxMC90bGIuaApAQCAtMCwwICsxLDEzIEBACisjaWZuZGVmIF9DUklTX0FSQ0hfVExCX0gKKyNkZWZpbmUgX0NSSVNfQVJDSF9UTEJfSAorCisvKiBUaGUgVExCIGNhbiBob3N0IHVwIHRvIDY0IGRpZmZlcmVudCBtbSBjb250ZXh0cyBhdCB0aGUgc2FtZSB0aW1lLgorICogVGhlIGxhc3QgcGFnZV9pZCBpcyBuZXZlciBydW5uaW5nIC0gaXQgaXMgdXNlZCBhcyBhbiBpbnZhbGlkIHBhZ2VfaWQKKyAqIHNvIHdlIGNhbiBtYWtlIFRMQiBlbnRyaWVzIHRoYXQgd2lsbCBuZXZlciBtYXRjaC4gCisgKi8KKyNkZWZpbmUgTlVNX1RMQl9FTlRSSUVTIDY0CisjZGVmaW5lIE5VTV9QQUdFSUQgNjQKKyNkZWZpbmUgSU5WQUxJRF9QQUdFSUQgNjMKKyNkZWZpbmUgTk9fQ09OVEVYVCAtMQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MTAvdWFjY2Vzcy5oIGIvaW5jbHVkZS9hc20tY3Jpcy9hcmNoLXYxMC91YWNjZXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg3ZDJlNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MTAvdWFjY2Vzcy5oCkBAIC0wLDAgKzEsNjYwIEBACisvKiAKKyAqIEF1dGhvcnM6ICAgIEJqb3JuIFdlc2VuIChiam9ybndAYXhpcy5jb20pCisgKgkgICAgICAgSGFucy1QZXRlciBOaWxzc29uIChocEBheGlzLmNvbSkKKyAqCisgKi8KKyNpZm5kZWYgX0NSSVNfQVJDSF9VQUNDRVNTX0gKKyNkZWZpbmUgX0NSSVNfQVJDSF9VQUNDRVNTX0gKKworLyoKKyAqIFdlIGRvbid0IHRlbGwgZ2NjIHRoYXQgd2UgYXJlIGFjY2Vzc2luZyBtZW1vcnksIGJ1dCB0aGlzIGlzIE9LCisgKiBiZWNhdXNlIHdlIGRvIG5vdCB3cml0ZSB0byBhbnkgbWVtb3J5IGdjYyBrbm93cyBhYm91dCwgc28gdGhlcmUKKyAqIGFyZSBubyBhbGlhc2luZyBpc3N1ZXMuCisgKgorICogTm90ZSB0aGF0IFBDIGF0IGEgZmF1bHQgaXMgdGhlIGFkZHJlc3MgKmFmdGVyKiB0aGUgZmF1bHRpbmcKKyAqIGluc3RydWN0aW9uLgorICovCisjZGVmaW5lIF9fcHV0X3VzZXJfYXNtKHgsIGFkZHIsIGVyciwgb3ApCQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJXAorCQkiCSJvcCIgJTEsWyUyXVxuIgkJCQlcCisJCSIyOlxuIgkJCQkJCVwKKwkJIgkuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iCQlcCisJCSIzOgltb3ZlLmQgJTMsJTBcbiIJCQkJXAorCQkiCWp1bXAgMmJcbiIJCQkJXAorCQkiCS5wcmV2aW91c1xuIgkJCQlcCisJCSIJLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgkJXAorCQkiCS5kd29yZCAyYiwzYlxuIgkJCQlcCisJCSIJLnByZXZpb3VzXG4iCQkJCVwKKwkJOiAiPXIiIChlcnIpCQkJCQlcCisJCTogInIiICh4KSwgInIiIChhZGRyKSwgImciICgtRUZBVUxUKSwgIjAiIChlcnIpKQorCisjZGVmaW5lIF9fcHV0X3VzZXJfYXNtXzY0KHgsIGFkZHIsIGVycikJCQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJXAorCQkiCW1vdmUuZCAlTTEsWyUyXVxuIgkJCVwKKwkJIjI6CW1vdmUuZCAlSDEsWyUyKzRdXG4iCQkJXAorCQkiNDpcbiIJCQkJCQlcCisJCSIJLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIgkJXAorCQkiMzoJbW92ZS5kICUzLCUwXG4iCQkJCVwKKwkJIglqdW1wIDRiXG4iCQkJCVwKKwkJIgkucHJldmlvdXNcbiIJCQkJXAorCQkiCS5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIJCVwKKwkJIgkuZHdvcmQgMmIsM2JcbiIJCQkJXAorCQkiCS5kd29yZCA0YiwzYlxuIgkJCQlcCisJCSIJLnByZXZpb3VzXG4iCQkJCVwKKwkJOiAiPXIiIChlcnIpCQkJCQlcCisJCTogInIiICh4KSwgInIiIChhZGRyKSwgImciICgtRUZBVUxUKSwgIjAiIChlcnIpKQorCisvKiBTZWUgY29tbWVudCBiZWZvcmUgX19wdXRfdXNlcl9hc20uICAqLworCisjZGVmaW5lIF9fZ2V0X3VzZXJfYXNtKHgsIGFkZHIsIGVyciwgb3ApCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCVwKKwkJIgkib3AiIFslMl0sJTFcbiIJCQlcCisJCSIyOlxuIgkJCQkJXAorCQkiCS5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIJXAorCQkiMzoJbW92ZS5kICUzLCUwXG4iCQkJXAorCQkiCW1vdmVxIDAsJTFcbiIJCQlcCisJCSIJanVtcCAyYlxuIgkJCVwKKwkJIgkucHJldmlvdXNcbiIJCQlcCisJCSIJLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIglcCisJCSIJLmR3b3JkIDJiLDNiXG4iCQkJXAorCQkiCS5wcmV2aW91c1xuIgkJCVwKKwkJOiAiPXIiIChlcnIpLCAiPXIiICh4KQkJCVwKKwkJOiAiciIgKGFkZHIpLCAiZyIgKC1FRkFVTFQpLCAiMCIgKGVycikpCisKKyNkZWZpbmUgX19nZXRfdXNlcl9hc21fNjQoeCwgYWRkciwgZXJyKQkJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJXAorCQkiCW1vdmUuZCBbJTJdLCVNMVxuIgkJXAorCQkiMjoJbW92ZS5kIFslMis0XSwlSDFcbiIJCVwKKwkJIjQ6XG4iCQkJCQlcCisJCSIJLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIglcCisJCSIzOgltb3ZlLmQgJTMsJTBcbiIJCQlcCisJCSIJbW92ZXEgMCwlMVxuIgkJCVwKKwkJIglqdW1wIDRiXG4iCQkJXAorCQkiCS5wcmV2aW91c1xuIgkJCVwKKwkJIgkuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCVwKKwkJIgkuZHdvcmQgMmIsM2JcbiIJCQlcCisJCSIJLmR3b3JkIDRiLDNiXG4iCQkJXAorCQkiCS5wcmV2aW91c1xuIgkJCVwKKwkJOiAiPXIiIChlcnIpLCAiPXIiICh4KQkJCVwKKwkJOiAiciIgKGFkZHIpLCAiZyIgKC1FRkFVTFQpLCAiMCIgKGVycikpCisKKy8qCisgKiBDb3B5IGEgbnVsbCB0ZXJtaW5hdGVkIHN0cmluZyBmcm9tIHVzZXJzcGFjZS4KKyAqCisgKiBNdXN0IHJldHVybjoKKyAqIC1FRkFVTFQJCWZvciBhbiBleGNlcHRpb24KKyAqIGNvdW50CQlpZiB3ZSBoaXQgdGhlIGJ1ZmZlciBsaW1pdAorICogYnl0ZXMgY29waWVkCQlpZiB3ZSBoaXQgYSBudWxsIGJ5dGUKKyAqICh3aXRob3V0IHRoZSBudWxsIGJ5dGUpCisgKi8KK2V4dGVybiBpbmxpbmUgbG9uZyAgICAgICAgIAorX19kb19zdHJuY3B5X2Zyb21fdXNlcihjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYywgbG9uZyBjb3VudCkKK3sKKwlsb25nIHJlczsKKworCWlmIChjb3VudCA9PSAwKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogQ3VycmVudGx5LCBpbiAyLjQuMC10ZXN0OSwgbW9zdCBwb3J0cyB1c2UgYSBzaW1wbGUgYnl0ZS1jb3B5IGxvb3AuCisJICogIFNvIGRvIHdlLgorCSAqCisJICogIFRoaXMgY29kZSBpcyBkZWR1Y2VkIGZyb206CisJICoKKwkgKgljaGFyIHRtcDI7CisJICoJbG9uZyB0bXAxLCB0bXAzCQorCSAqCXRtcDEgPSBjb3VudDsKKwkgKgl3aGlsZSAoKCpkc3QrKyA9ICh0bXAyID0gKnNyYysrKSkgIT0gMAorCSAqCSAgICAgICAmJiAtLXRtcDEpCisJICoJICA7CisJICoKKwkgKglyZXMgPSBjb3VudCAtIHRtcDE7CisJICoKKwkgKiAgd2l0aCB0d2Vha3MuCisJICovCisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCSIJbW92ZS5kICUzLCUwXG4iCisJCSIJbW92ZS5iIFslMitdLCRyOVxuIgorCQkiMToJYmVxIDJmXG4iCisJCSIJbW92ZS5iICRyOSxbJTErXVxuIgorCisJCSIJc3VicSAxLCUwXG4iCisJCSIJYm5lIDFiXG4iCisJCSIJbW92ZS5iIFslMitdLCRyOVxuIgorCisJCSIyOglzdWIuZCAlMywlMFxuIgorCQkiCW5lZy5kICUwLCUwXG4iCisJCSIzOlxuIgorCQkiCS5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIKKwkJIjQ6CW1vdmUuZCAlNywlMFxuIgorCQkiCWp1bXAgM2JcbiIKKworCQkvKiBUaGVyZSdzIG9uZSBhZGRyZXNzIGZvciBhIGZhdWx0IGF0IHRoZSBmaXJzdCBtb3ZlLCBhbmQKKwkJICAgdHdvIHBvc3NpYmxlIFBDIHZhbHVlcyBmb3IgYSBmYXVsdCBhdCB0aGUgc2Vjb25kIG1vdmUsCisJCSAgIGJlaW5nIGEgZGVsYXktc2xvdCBmaWxsZXIuICBIb3dldmVyLCB0aGUgYnJhbmNoLXRhcmdldAorCQkgICBmb3IgdGhlIHNlY29uZCBtb3ZlIGlzIHRoZSBzYW1lIGFzIHRoZSBmaXJzdCBhZGRyZXNzLgorCQkgICBKdXN0IHNvIHlvdSBkb24ndCBnZXQgY29uZnVzZWQuLi4gICovCisJCSIJLnByZXZpb3VzXG4iCisJCSIJLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgorCQkiCS5kd29yZCAxYiw0YlxuIgorCQkiCS5kd29yZCAyYiw0YlxuIgorCQkiCS5wcmV2aW91cyIKKwkJOiAiPXIiIChyZXMpLCAiPXIiIChkc3QpLCAiPXIiIChzcmMpLCAiPXIiIChjb3VudCkKKwkJOiAiMyIgKGNvdW50KSwgIjEiIChkc3QpLCAiMiIgKHNyYyksICJnIiAoLUVGQVVMVCkKKwkJOiAicjkiKTsKKworCXJldHVybiByZXM7Cit9CisKKy8qIEEgZmV3IGNvcHkgYXNtcyB0byBidWlsZCB1cCB0aGUgbW9yZSBjb21wbGV4IG9uZXMgZnJvbS4KKworICAgTm90ZSBhZ2FpbiwgYSBwb3N0LWluY3JlbWVudCBpcyBwZXJmb3JtZWQgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGEgYnVzCisgICBmYXVsdCBvY2N1cnJlZCBpbiB0aGF0IGluc3RydWN0aW9uLCBhbmQgUEMgZm9yIGEgZmF1bHRlZCBpbnNuIGlzIHRoZQorICAgYWRkcmVzcyAqYWZ0ZXIqIHRoZSBpbnNuLiAgKi8KKworI2RlZmluZSBfX2FzbV9jb3B5X3VzZXJfY29udCh0bywgZnJvbSwgcmV0LCBDT1BZLCBGSVhVUCwgVEVOVFJZKSBcCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJCQlcCisJCQlDT1BZCQkJCVwKKwkJIjE6XG4iCQkJCQlcCisJCSIJLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIglcCisJCQlGSVhVUAkJCQlcCisJCSIJanVtcCAxYlxuIgkJCVwKKwkJIgkucHJldmlvdXNcbiIJCQlcCisJCSIJLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIglcCisJCQlURU5UUlkJCQkJXAorCQkiCS5wcmV2aW91c1xuIgkJCVwKKwkJOiAiPXIiICh0byksICI9ciIgKGZyb20pLCAiPXIiIChyZXQpCVwKKwkJOiAiMCIgKHRvKSwgIjEiIChmcm9tKSwgIjIiIChyZXQpCVwKKwkJOiAicjkiLCAibWVtb3J5IikKKworI2RlZmluZSBfX2FzbV9jb3B5X2Zyb21fdXNlcl8xKHRvLCBmcm9tLCByZXQpIFwKKwlfX2FzbV9jb3B5X3VzZXJfY29udCh0bywgZnJvbSwgcmV0LAlcCisJCSIJbW92ZS5iIFslMStdLCRyOVxuIglcCisJCSIyOgltb3ZlLmIgJHI5LFslMCtdXG4iLAlcCisJCSIzOglhZGRxIDEsJTJcbiIJCVwKKwkJIgljbGVhci5iIFslMCtdXG4iLAlcCisJCSIJLmR3b3JkIDJiLDNiXG4iKQorCisjZGVmaW5lIF9fYXNtX2NvcHlfZnJvbV91c2VyXzJ4X2NvbnQodG8sIGZyb20sIHJldCwgQ09QWSwgRklYVVAsIFRFTlRSWSkgXAorCV9fYXNtX2NvcHlfdXNlcl9jb250KHRvLCBmcm9tLCByZXQsCQlcCisJCSIJbW92ZS53IFslMStdLCRyOVxuIgkJXAorCQkiMjoJbW92ZS53ICRyOSxbJTArXVxuIiBDT1BZLAlcCisJCSIzOglhZGRxIDIsJTJcbiIJCQlcCisJCSIJY2xlYXIudyBbJTArXVxuIiBGSVhVUCwJCVwKKwkJIgkuZHdvcmQgMmIsM2JcbiIgVEVOVFJZKQorCisjZGVmaW5lIF9fYXNtX2NvcHlfZnJvbV91c2VyXzIodG8sIGZyb20sIHJldCkgXAorCV9fYXNtX2NvcHlfZnJvbV91c2VyXzJ4X2NvbnQodG8sIGZyb20sIHJldCwgIiIsICIiLCAiIikKKworI2RlZmluZSBfX2FzbV9jb3B5X2Zyb21fdXNlcl8zKHRvLCBmcm9tLCByZXQpCQlcCisJX19hc21fY29weV9mcm9tX3VzZXJfMnhfY29udCh0bywgZnJvbSwgcmV0LAlcCisJCSIJbW92ZS5iIFslMStdLCRyOVxuIgkJXAorCQkiNDoJbW92ZS5iICRyOSxbJTArXVxuIiwJCVwKKwkJIjU6CWFkZHEgMSwlMlxuIgkJCVwKKwkJIgljbGVhci5iIFslMCtdXG4iLAkJXAorCQkiCS5kd29yZCA0Yiw1YlxuIikKKworI2RlZmluZSBfX2FzbV9jb3B5X2Zyb21fdXNlcl80eF9jb250KHRvLCBmcm9tLCByZXQsIENPUFksIEZJWFVQLCBURU5UUlkpIFwKKwlfX2FzbV9jb3B5X3VzZXJfY29udCh0bywgZnJvbSwgcmV0LAkJXAorCQkiCW1vdmUuZCBbJTErXSwkcjlcbiIJCVwKKwkJIjI6CW1vdmUuZCAkcjksWyUwK11cbiIgQ09QWSwJXAorCQkiMzoJYWRkcSA0LCUyXG4iCQkJXAorCQkiCWNsZWFyLmQgWyUwK11cbiIgRklYVVAsCQlcCisJCSIJLmR3b3JkIDJiLDNiXG4iIFRFTlRSWSkKKworI2RlZmluZSBfX2FzbV9jb3B5X2Zyb21fdXNlcl80KHRvLCBmcm9tLCByZXQpIFwKKwlfX2FzbV9jb3B5X2Zyb21fdXNlcl80eF9jb250KHRvLCBmcm9tLCByZXQsICIiLCAiIiwgIiIpCisKKyNkZWZpbmUgX19hc21fY29weV9mcm9tX3VzZXJfNSh0bywgZnJvbSwgcmV0KSBcCisJX19hc21fY29weV9mcm9tX3VzZXJfNHhfY29udCh0bywgZnJvbSwgcmV0LAlcCisJCSIJbW92ZS5iIFslMStdLCRyOVxuIgkJXAorCQkiNDoJbW92ZS5iICRyOSxbJTArXVxuIiwJCVwKKwkJIjU6CWFkZHEgMSwlMlxuIgkJCVwKKwkJIgljbGVhci5iIFslMCtdXG4iLAkJXAorCQkiCS5kd29yZCA0Yiw1YlxuIikKKworI2RlZmluZSBfX2FzbV9jb3B5X2Zyb21fdXNlcl82eF9jb250KHRvLCBmcm9tLCByZXQsIENPUFksIEZJWFVQLCBURU5UUlkpIFwKKwlfX2FzbV9jb3B5X2Zyb21fdXNlcl80eF9jb250KHRvLCBmcm9tLCByZXQsCVwKKwkJIgltb3ZlLncgWyUxK10sJHI5XG4iCQlcCisJCSI0Ogltb3ZlLncgJHI5LFslMCtdXG4iIENPUFksCVwKKwkJIjU6CWFkZHEgMiwlMlxuIgkJCVwKKwkJIgljbGVhci53IFslMCtdXG4iIEZJWFVQLAkJXAorCQkiCS5kd29yZCA0Yiw1YlxuIiBURU5UUlkpCisKKyNkZWZpbmUgX19hc21fY29weV9mcm9tX3VzZXJfNih0bywgZnJvbSwgcmV0KSBcCisJX19hc21fY29weV9mcm9tX3VzZXJfNnhfY29udCh0bywgZnJvbSwgcmV0LCAiIiwgIiIsICIiKQorCisjZGVmaW5lIF9fYXNtX2NvcHlfZnJvbV91c2VyXzcodG8sIGZyb20sIHJldCkgXAorCV9fYXNtX2NvcHlfZnJvbV91c2VyXzZ4X2NvbnQodG8sIGZyb20sIHJldCwJXAorCQkiCW1vdmUuYiBbJTErXSwkcjlcbiIJCVwKKwkJIjY6CW1vdmUuYiAkcjksWyUwK11cbiIsCQlcCisJCSI3OglhZGRxIDEsJTJcbiIJCQlcCisJCSIJY2xlYXIuYiBbJTArXVxuIiwJCVwKKwkJIgkuZHdvcmQgNmIsN2JcbiIpCisKKyNkZWZpbmUgX19hc21fY29weV9mcm9tX3VzZXJfOHhfY29udCh0bywgZnJvbSwgcmV0LCBDT1BZLCBGSVhVUCwgVEVOVFJZKSBcCisJX19hc21fY29weV9mcm9tX3VzZXJfNHhfY29udCh0bywgZnJvbSwgcmV0LAlcCisJCSIJbW92ZS5kIFslMStdLCRyOVxuIgkJXAorCQkiNDoJbW92ZS5kICRyOSxbJTArXVxuIiBDT1BZLAlcCisJCSI1OglhZGRxIDQsJTJcbiIJCQlcCisJCSIJY2xlYXIuZCBbJTArXVxuIiBGSVhVUCwJCVwKKwkJIgkuZHdvcmQgNGIsNWJcbiIgVEVOVFJZKQorCisjZGVmaW5lIF9fYXNtX2NvcHlfZnJvbV91c2VyXzgodG8sIGZyb20sIHJldCkgXAorCV9fYXNtX2NvcHlfZnJvbV91c2VyXzh4X2NvbnQodG8sIGZyb20sIHJldCwgIiIsICIiLCAiIikKKworI2RlZmluZSBfX2FzbV9jb3B5X2Zyb21fdXNlcl85KHRvLCBmcm9tLCByZXQpIFwKKwlfX2FzbV9jb3B5X2Zyb21fdXNlcl84eF9jb250KHRvLCBmcm9tLCByZXQsCVwKKwkJIgltb3ZlLmIgWyUxK10sJHI5XG4iCQlcCisJCSI2Ogltb3ZlLmIgJHI5LFslMCtdXG4iLAkJXAorCQkiNzoJYWRkcSAxLCUyXG4iCQkJXAorCQkiCWNsZWFyLmIgWyUwK11cbiIsCQlcCisJCSIJLmR3b3JkIDZiLDdiXG4iKQorCisjZGVmaW5lIF9fYXNtX2NvcHlfZnJvbV91c2VyXzEweF9jb250KHRvLCBmcm9tLCByZXQsIENPUFksIEZJWFVQLCBURU5UUlkpIFwKKwlfX2FzbV9jb3B5X2Zyb21fdXNlcl84eF9jb250KHRvLCBmcm9tLCByZXQsCVwKKwkJIgltb3ZlLncgWyUxK10sJHI5XG4iCQlcCisJCSI2Ogltb3ZlLncgJHI5LFslMCtdXG4iIENPUFksCVwKKwkJIjc6CWFkZHEgMiwlMlxuIgkJCVwKKwkJIgljbGVhci53IFslMCtdXG4iIEZJWFVQLAkJXAorCQkiCS5kd29yZCA2Yiw3YlxuIiBURU5UUlkpCisKKyNkZWZpbmUgX19hc21fY29weV9mcm9tX3VzZXJfMTAodG8sIGZyb20sIHJldCkgXAorCV9fYXNtX2NvcHlfZnJvbV91c2VyXzEweF9jb250KHRvLCBmcm9tLCByZXQsICIiLCAiIiwgIiIpCisKKyNkZWZpbmUgX19hc21fY29weV9mcm9tX3VzZXJfMTEodG8sIGZyb20sIHJldCkJCVwKKwlfX2FzbV9jb3B5X2Zyb21fdXNlcl8xMHhfY29udCh0bywgZnJvbSwgcmV0LAlcCisJCSIJbW92ZS5iIFslMStdLCRyOVxuIgkJXAorCQkiODoJbW92ZS5iICRyOSxbJTArXVxuIiwJCVwKKwkJIjk6CWFkZHEgMSwlMlxuIgkJCVwKKwkJIgljbGVhci5iIFslMCtdXG4iLAkJXAorCQkiCS5kd29yZCA4Yiw5YlxuIikKKworI2RlZmluZSBfX2FzbV9jb3B5X2Zyb21fdXNlcl8xMnhfY29udCh0bywgZnJvbSwgcmV0LCBDT1BZLCBGSVhVUCwgVEVOVFJZKSBcCisJX19hc21fY29weV9mcm9tX3VzZXJfOHhfY29udCh0bywgZnJvbSwgcmV0LAlcCisJCSIJbW92ZS5kIFslMStdLCRyOVxuIgkJXAorCQkiNjoJbW92ZS5kICRyOSxbJTArXVxuIiBDT1BZLAlcCisJCSI3OglhZGRxIDQsJTJcbiIJCQlcCisJCSIJY2xlYXIuZCBbJTArXVxuIiBGSVhVUCwJCVwKKwkJIgkuZHdvcmQgNmIsN2JcbiIgVEVOVFJZKQorCisjZGVmaW5lIF9fYXNtX2NvcHlfZnJvbV91c2VyXzEyKHRvLCBmcm9tLCByZXQpIFwKKwlfX2FzbV9jb3B5X2Zyb21fdXNlcl8xMnhfY29udCh0bywgZnJvbSwgcmV0LCAiIiwgIiIsICIiKQorCisjZGVmaW5lIF9fYXNtX2NvcHlfZnJvbV91c2VyXzEzKHRvLCBmcm9tLCByZXQpIFwKKwlfX2FzbV9jb3B5X2Zyb21fdXNlcl8xMnhfY29udCh0bywgZnJvbSwgcmV0LAlcCisJCSIJbW92ZS5iIFslMStdLCRyOVxuIgkJXAorCQkiODoJbW92ZS5iICRyOSxbJTArXVxuIiwJCVwKKwkJIjk6CWFkZHEgMSwlMlxuIgkJCVwKKwkJIgljbGVhci5iIFslMCtdXG4iLAkJXAorCQkiCS5kd29yZCA4Yiw5YlxuIikKKworI2RlZmluZSBfX2FzbV9jb3B5X2Zyb21fdXNlcl8xNHhfY29udCh0bywgZnJvbSwgcmV0LCBDT1BZLCBGSVhVUCwgVEVOVFJZKSBcCisJX19hc21fY29weV9mcm9tX3VzZXJfMTJ4X2NvbnQodG8sIGZyb20sIHJldCwJXAorCQkiCW1vdmUudyBbJTErXSwkcjlcbiIJCVwKKwkJIjg6CW1vdmUudyAkcjksWyUwK11cbiIgQ09QWSwJXAorCQkiOToJYWRkcSAyLCUyXG4iCQkJXAorCQkiCWNsZWFyLncgWyUwK11cbiIgRklYVVAsCQlcCisJCSIJLmR3b3JkIDhiLDliXG4iIFRFTlRSWSkKKworI2RlZmluZSBfX2FzbV9jb3B5X2Zyb21fdXNlcl8xNCh0bywgZnJvbSwgcmV0KSBcCisJX19hc21fY29weV9mcm9tX3VzZXJfMTR4X2NvbnQodG8sIGZyb20sIHJldCwgIiIsICIiLCAiIikKKworI2RlZmluZSBfX2FzbV9jb3B5X2Zyb21fdXNlcl8xNSh0bywgZnJvbSwgcmV0KSBcCisJX19hc21fY29weV9mcm9tX3VzZXJfMTR4X2NvbnQodG8sIGZyb20sIHJldCwJXAorCQkiCW1vdmUuYiBbJTErXSwkcjlcbiIJCVwKKwkJIjEwOgltb3ZlLmIgJHI5LFslMCtdXG4iLAkJXAorCQkiMTE6CWFkZHEgMSwlMlxuIgkJCVwKKwkJIgljbGVhci5iIFslMCtdXG4iLAkJXAorCQkiCS5kd29yZCAxMGIsMTFiXG4iKQorCisjZGVmaW5lIF9fYXNtX2NvcHlfZnJvbV91c2VyXzE2eF9jb250KHRvLCBmcm9tLCByZXQsIENPUFksIEZJWFVQLCBURU5UUlkpIFwKKwlfX2FzbV9jb3B5X2Zyb21fdXNlcl8xMnhfY29udCh0bywgZnJvbSwgcmV0LAlcCisJCSIJbW92ZS5kIFslMStdLCRyOVxuIgkJXAorCQkiODoJbW92ZS5kICRyOSxbJTArXVxuIiBDT1BZLAlcCisJCSI5OglhZGRxIDQsJTJcbiIJCQlcCisJCSIJY2xlYXIuZCBbJTArXVxuIiBGSVhVUCwJCVwKKwkJIgkuZHdvcmQgOGIsOWJcbiIgVEVOVFJZKQorCisjZGVmaW5lIF9fYXNtX2NvcHlfZnJvbV91c2VyXzE2KHRvLCBmcm9tLCByZXQpIFwKKwlfX2FzbV9jb3B5X2Zyb21fdXNlcl8xNnhfY29udCh0bywgZnJvbSwgcmV0LCAiIiwgIiIsICIiKQorCisjZGVmaW5lIF9fYXNtX2NvcHlfZnJvbV91c2VyXzIweF9jb250KHRvLCBmcm9tLCByZXQsIENPUFksIEZJWFVQLCBURU5UUlkpIFwKKwlfX2FzbV9jb3B5X2Zyb21fdXNlcl8xNnhfY29udCh0bywgZnJvbSwgcmV0LAlcCisJCSIJbW92ZS5kIFslMStdLCRyOVxuIgkJXAorCQkiMTA6CW1vdmUuZCAkcjksWyUwK11cbiIgQ09QWSwJXAorCQkiMTE6CWFkZHEgNCwlMlxuIgkJCVwKKwkJIgljbGVhci5kIFslMCtdXG4iIEZJWFVQLAkJXAorCQkiCS5kd29yZCAxMGIsMTFiXG4iIFRFTlRSWSkKKworI2RlZmluZSBfX2FzbV9jb3B5X2Zyb21fdXNlcl8yMCh0bywgZnJvbSwgcmV0KSBcCisJX19hc21fY29weV9mcm9tX3VzZXJfMjB4X2NvbnQodG8sIGZyb20sIHJldCwgIiIsICIiLCAiIikKKworI2RlZmluZSBfX2FzbV9jb3B5X2Zyb21fdXNlcl8yNHhfY29udCh0bywgZnJvbSwgcmV0LCBDT1BZLCBGSVhVUCwgVEVOVFJZKSBcCisJX19hc21fY29weV9mcm9tX3VzZXJfMjB4X2NvbnQodG8sIGZyb20sIHJldCwJXAorCQkiCW1vdmUuZCBbJTErXSwkcjlcbiIJCVwKKwkJIjEyOgltb3ZlLmQgJHI5LFslMCtdXG4iIENPUFksCVwKKwkJIjEzOglhZGRxIDQsJTJcbiIJCQlcCisJCSIJY2xlYXIuZCBbJTArXVxuIiBGSVhVUCwJCVwKKwkJIgkuZHdvcmQgMTJiLDEzYlxuIiBURU5UUlkpCisKKyNkZWZpbmUgX19hc21fY29weV9mcm9tX3VzZXJfMjQodG8sIGZyb20sIHJldCkgXAorCV9fYXNtX2NvcHlfZnJvbV91c2VyXzI0eF9jb250KHRvLCBmcm9tLCByZXQsICIiLCAiIiwgIiIpCisKKy8qIEFuZCBub3csIHRoZSB0by11c2VyIG9uZXMuICAqLworCisjZGVmaW5lIF9fYXNtX2NvcHlfdG9fdXNlcl8xKHRvLCBmcm9tLCByZXQpCVwKKwlfX2FzbV9jb3B5X3VzZXJfY29udCh0bywgZnJvbSwgcmV0LAlcCisJCSIJbW92ZS5iIFslMStdLCRyOVxuIglcCisJCSIJbW92ZS5iICRyOSxbJTArXVxuMjpcbiIsCVwKKwkJIjM6CWFkZHEgMSwlMlxuIiwJCVwKKwkJIgkuZHdvcmQgMmIsM2JcbiIpCisKKyNkZWZpbmUgX19hc21fY29weV90b191c2VyXzJ4X2NvbnQodG8sIGZyb20sIHJldCwgQ09QWSwgRklYVVAsIFRFTlRSWSkgXAorCV9fYXNtX2NvcHlfdXNlcl9jb250KHRvLCBmcm9tLCByZXQsCQlcCisJCSIJbW92ZS53IFslMStdLCRyOVxuIgkJXAorCQkiCW1vdmUudyAkcjksWyUwK11cbjI6XG4iIENPUFksCVwKKwkJIjM6CWFkZHEgMiwlMlxuIiBGSVhVUCwJCVwKKwkJIgkuZHdvcmQgMmIsM2JcbiIgVEVOVFJZKQorCisjZGVmaW5lIF9fYXNtX2NvcHlfdG9fdXNlcl8yKHRvLCBmcm9tLCByZXQpIFwKKwlfX2FzbV9jb3B5X3RvX3VzZXJfMnhfY29udCh0bywgZnJvbSwgcmV0LCAiIiwgIiIsICIiKQorCisjZGVmaW5lIF9fYXNtX2NvcHlfdG9fdXNlcl8zKHRvLCBmcm9tLCByZXQpIFwKKwlfX2FzbV9jb3B5X3RvX3VzZXJfMnhfY29udCh0bywgZnJvbSwgcmV0LAlcCisJCSIJbW92ZS5iIFslMStdLCRyOVxuIgkJXAorCQkiCW1vdmUuYiAkcjksWyUwK11cbjQ6XG4iLAkJXAorCQkiNToJYWRkcSAxLCUyXG4iLAkJCVwKKwkJIgkuZHdvcmQgNGIsNWJcbiIpCisKKyNkZWZpbmUgX19hc21fY29weV90b191c2VyXzR4X2NvbnQodG8sIGZyb20sIHJldCwgQ09QWSwgRklYVVAsIFRFTlRSWSkgXAorCV9fYXNtX2NvcHlfdXNlcl9jb250KHRvLCBmcm9tLCByZXQsCQlcCisJCSIJbW92ZS5kIFslMStdLCRyOVxuIgkJXAorCQkiCW1vdmUuZCAkcjksWyUwK11cbjI6XG4iIENPUFksCVwKKwkJIjM6CWFkZHEgNCwlMlxuIiBGSVhVUCwJCVwKKwkJIgkuZHdvcmQgMmIsM2JcbiIgVEVOVFJZKQorCisjZGVmaW5lIF9fYXNtX2NvcHlfdG9fdXNlcl80KHRvLCBmcm9tLCByZXQpIFwKKwlfX2FzbV9jb3B5X3RvX3VzZXJfNHhfY29udCh0bywgZnJvbSwgcmV0LCAiIiwgIiIsICIiKQorCisjZGVmaW5lIF9fYXNtX2NvcHlfdG9fdXNlcl81KHRvLCBmcm9tLCByZXQpIFwKKwlfX2FzbV9jb3B5X3RvX3VzZXJfNHhfY29udCh0bywgZnJvbSwgcmV0LAlcCisJCSIJbW92ZS5iIFslMStdLCRyOVxuIgkJXAorCQkiCW1vdmUuYiAkcjksWyUwK11cbjQ6XG4iLAkJXAorCQkiNToJYWRkcSAxLCUyXG4iLAkJCVwKKwkJIgkuZHdvcmQgNGIsNWJcbiIpCisKKyNkZWZpbmUgX19hc21fY29weV90b191c2VyXzZ4X2NvbnQodG8sIGZyb20sIHJldCwgQ09QWSwgRklYVVAsIFRFTlRSWSkgXAorCV9fYXNtX2NvcHlfdG9fdXNlcl80eF9jb250KHRvLCBmcm9tLCByZXQsCVwKKwkJIgltb3ZlLncgWyUxK10sJHI5XG4iCQlcCisJCSIJbW92ZS53ICRyOSxbJTArXVxuNDpcbiIgQ09QWSwJXAorCQkiNToJYWRkcSAyLCUyXG4iIEZJWFVQLAkJXAorCQkiCS5kd29yZCA0Yiw1YlxuIiBURU5UUlkpCisKKyNkZWZpbmUgX19hc21fY29weV90b191c2VyXzYodG8sIGZyb20sIHJldCkgXAorCV9fYXNtX2NvcHlfdG9fdXNlcl82eF9jb250KHRvLCBmcm9tLCByZXQsICIiLCAiIiwgIiIpCisKKyNkZWZpbmUgX19hc21fY29weV90b191c2VyXzcodG8sIGZyb20sIHJldCkgXAorCV9fYXNtX2NvcHlfdG9fdXNlcl82eF9jb250KHRvLCBmcm9tLCByZXQsCVwKKwkJIgltb3ZlLmIgWyUxK10sJHI5XG4iCQlcCisJCSIJbW92ZS5iICRyOSxbJTArXVxuNjpcbiIsCQlcCisJCSI3OglhZGRxIDEsJTJcbiIsCQkJXAorCQkiCS5kd29yZCA2Yiw3YlxuIikKKworI2RlZmluZSBfX2FzbV9jb3B5X3RvX3VzZXJfOHhfY29udCh0bywgZnJvbSwgcmV0LCBDT1BZLCBGSVhVUCwgVEVOVFJZKSBcCisJX19hc21fY29weV90b191c2VyXzR4X2NvbnQodG8sIGZyb20sIHJldCwJXAorCQkiCW1vdmUuZCBbJTErXSwkcjlcbiIJCVwKKwkJIgltb3ZlLmQgJHI5LFslMCtdXG40OlxuIiBDT1BZLAlcCisJCSI1OglhZGRxIDQsJTJcbiIgIEZJWFVQLAkJXAorCQkiCS5kd29yZCA0Yiw1YlxuIiBURU5UUlkpCisKKyNkZWZpbmUgX19hc21fY29weV90b191c2VyXzgodG8sIGZyb20sIHJldCkgXAorCV9fYXNtX2NvcHlfdG9fdXNlcl84eF9jb250KHRvLCBmcm9tLCByZXQsICIiLCAiIiwgIiIpCisKKyNkZWZpbmUgX19hc21fY29weV90b191c2VyXzkodG8sIGZyb20sIHJldCkgXAorCV9fYXNtX2NvcHlfdG9fdXNlcl84eF9jb250KHRvLCBmcm9tLCByZXQsCVwKKwkJIgltb3ZlLmIgWyUxK10sJHI5XG4iCQlcCisJCSIJbW92ZS5iICRyOSxbJTArXVxuNjpcbiIsCQlcCisJCSI3OglhZGRxIDEsJTJcbiIsCQkJXAorCQkiCS5kd29yZCA2Yiw3YlxuIikKKworI2RlZmluZSBfX2FzbV9jb3B5X3RvX3VzZXJfMTB4X2NvbnQodG8sIGZyb20sIHJldCwgQ09QWSwgRklYVVAsIFRFTlRSWSkgXAorCV9fYXNtX2NvcHlfdG9fdXNlcl84eF9jb250KHRvLCBmcm9tLCByZXQsCVwKKwkJIgltb3ZlLncgWyUxK10sJHI5XG4iCQlcCisJCSIJbW92ZS53ICRyOSxbJTArXVxuNjpcbiIgQ09QWSwJXAorCQkiNzoJYWRkcSAyLCUyXG4iIEZJWFVQLAkJXAorCQkiCS5kd29yZCA2Yiw3YlxuIiBURU5UUlkpCisKKyNkZWZpbmUgX19hc21fY29weV90b191c2VyXzEwKHRvLCBmcm9tLCByZXQpIFwKKwlfX2FzbV9jb3B5X3RvX3VzZXJfMTB4X2NvbnQodG8sIGZyb20sIHJldCwgIiIsICIiLCAiIikKKworI2RlZmluZSBfX2FzbV9jb3B5X3RvX3VzZXJfMTEodG8sIGZyb20sIHJldCkgXAorCV9fYXNtX2NvcHlfdG9fdXNlcl8xMHhfY29udCh0bywgZnJvbSwgcmV0LAlcCisJCSIJbW92ZS5iIFslMStdLCRyOVxuIgkJXAorCQkiCW1vdmUuYiAkcjksWyUwK11cbjg6XG4iLAkJXAorCQkiOToJYWRkcSAxLCUyXG4iLAkJCVwKKwkJIgkuZHdvcmQgOGIsOWJcbiIpCisKKyNkZWZpbmUgX19hc21fY29weV90b191c2VyXzEyeF9jb250KHRvLCBmcm9tLCByZXQsIENPUFksIEZJWFVQLCBURU5UUlkpIFwKKwlfX2FzbV9jb3B5X3RvX3VzZXJfOHhfY29udCh0bywgZnJvbSwgcmV0LAlcCisJCSIJbW92ZS5kIFslMStdLCRyOVxuIgkJXAorCQkiCW1vdmUuZCAkcjksWyUwK11cbjY6XG4iIENPUFksCVwKKwkJIjc6CWFkZHEgNCwlMlxuIiBGSVhVUCwJCVwKKwkJIgkuZHdvcmQgNmIsN2JcbiIgVEVOVFJZKQorCisjZGVmaW5lIF9fYXNtX2NvcHlfdG9fdXNlcl8xMih0bywgZnJvbSwgcmV0KSBcCisJX19hc21fY29weV90b191c2VyXzEyeF9jb250KHRvLCBmcm9tLCByZXQsICIiLCAiIiwgIiIpCisKKyNkZWZpbmUgX19hc21fY29weV90b191c2VyXzEzKHRvLCBmcm9tLCByZXQpIFwKKwlfX2FzbV9jb3B5X3RvX3VzZXJfMTJ4X2NvbnQodG8sIGZyb20sIHJldCwJXAorCQkiCW1vdmUuYiBbJTErXSwkcjlcbiIJCVwKKwkJIgltb3ZlLmIgJHI5LFslMCtdXG44OlxuIiwJCVwKKwkJIjk6CWFkZHEgMSwlMlxuIiwJCQlcCisJCSIJLmR3b3JkIDhiLDliXG4iKQorCisjZGVmaW5lIF9fYXNtX2NvcHlfdG9fdXNlcl8xNHhfY29udCh0bywgZnJvbSwgcmV0LCBDT1BZLCBGSVhVUCwgVEVOVFJZKSBcCisJX19hc21fY29weV90b191c2VyXzEyeF9jb250KHRvLCBmcm9tLCByZXQsCVwKKwkJIgltb3ZlLncgWyUxK10sJHI5XG4iCQlcCisJCSIJbW92ZS53ICRyOSxbJTArXVxuODpcbiIgQ09QWSwJXAorCQkiOToJYWRkcSAyLCUyXG4iIEZJWFVQLAkJXAorCQkiCS5kd29yZCA4Yiw5YlxuIiBURU5UUlkpCisKKyNkZWZpbmUgX19hc21fY29weV90b191c2VyXzE0KHRvLCBmcm9tLCByZXQpCVwKKwlfX2FzbV9jb3B5X3RvX3VzZXJfMTR4X2NvbnQodG8sIGZyb20sIHJldCwgIiIsICIiLCAiIikKKworI2RlZmluZSBfX2FzbV9jb3B5X3RvX3VzZXJfMTUodG8sIGZyb20sIHJldCkgXAorCV9fYXNtX2NvcHlfdG9fdXNlcl8xNHhfY29udCh0bywgZnJvbSwgcmV0LAlcCisJCSIJbW92ZS5iIFslMStdLCRyOVxuIgkJXAorCQkiCW1vdmUuYiAkcjksWyUwK11cbjEwOlxuIiwJCVwKKwkJIjExOglhZGRxIDEsJTJcbiIsCQkJXAorCQkiCS5kd29yZCAxMGIsMTFiXG4iKQorCisjZGVmaW5lIF9fYXNtX2NvcHlfdG9fdXNlcl8xNnhfY29udCh0bywgZnJvbSwgcmV0LCBDT1BZLCBGSVhVUCwgVEVOVFJZKSBcCisJX19hc21fY29weV90b191c2VyXzEyeF9jb250KHRvLCBmcm9tLCByZXQsCVwKKwkJIgltb3ZlLmQgWyUxK10sJHI5XG4iCQlcCisJCSIJbW92ZS5kICRyOSxbJTArXVxuODpcbiIgQ09QWSwJXAorCQkiOToJYWRkcSA0LCUyXG4iIEZJWFVQLAkJXAorCQkiCS5kd29yZCA4Yiw5YlxuIiBURU5UUlkpCisKKyNkZWZpbmUgX19hc21fY29weV90b191c2VyXzE2KHRvLCBmcm9tLCByZXQpIFwKKwlfX2FzbV9jb3B5X3RvX3VzZXJfMTZ4X2NvbnQodG8sIGZyb20sIHJldCwgIiIsICIiLCAiIikKKworI2RlZmluZSBfX2FzbV9jb3B5X3RvX3VzZXJfMjB4X2NvbnQodG8sIGZyb20sIHJldCwgQ09QWSwgRklYVVAsIFRFTlRSWSkgXAorCV9fYXNtX2NvcHlfdG9fdXNlcl8xNnhfY29udCh0bywgZnJvbSwgcmV0LAlcCisJCSIJbW92ZS5kIFslMStdLCRyOVxuIgkJXAorCQkiCW1vdmUuZCAkcjksWyUwK11cbjEwOlxuIiBDT1BZLAlcCisJCSIxMToJYWRkcSA0LCUyXG4iIEZJWFVQLAkJXAorCQkiCS5kd29yZCAxMGIsMTFiXG4iIFRFTlRSWSkKKworI2RlZmluZSBfX2FzbV9jb3B5X3RvX3VzZXJfMjAodG8sIGZyb20sIHJldCkgXAorCV9fYXNtX2NvcHlfdG9fdXNlcl8yMHhfY29udCh0bywgZnJvbSwgcmV0LCAiIiwgIiIsICIiKQorCisjZGVmaW5lIF9fYXNtX2NvcHlfdG9fdXNlcl8yNHhfY29udCh0bywgZnJvbSwgcmV0LCBDT1BZLCBGSVhVUCwgVEVOVFJZKQlcCisJX19hc21fY29weV90b191c2VyXzIweF9jb250KHRvLCBmcm9tLCByZXQsCVwKKwkJIgltb3ZlLmQgWyUxK10sJHI5XG4iCQlcCisJCSIJbW92ZS5kICRyOSxbJTArXVxuMTI6XG4iIENPUFksCVwKKwkJIjEzOglhZGRxIDQsJTJcbiIgRklYVVAsCQlcCisJCSIJLmR3b3JkIDEyYiwxM2JcbiIgVEVOVFJZKQorCisjZGVmaW5lIF9fYXNtX2NvcHlfdG9fdXNlcl8yNCh0bywgZnJvbSwgcmV0KQlcCisJX19hc21fY29weV90b191c2VyXzI0eF9jb250KHRvLCBmcm9tLCByZXQsICIiLCAiIiwgIiIpCisKKy8qIERlZmluZSBhIGZldyBjbGVhcmluZyBhc21zIHdpdGggZXhjZXB0aW9uIGhhbmRsZXJzLiAgKi8KKworLyogVGhpcyBmcmFtZS1hc20gaXMgbGlrZSB0aGUgX19hc21fY29weV91c2VyX2NvbnQgb25lLCBidXQgaGFzIG9uZSBsZXNzCisgICBpbnB1dC4gICovCisKKyNkZWZpbmUgX19hc21fY2xlYXIodG8sIHJldCwgQ0xFQVIsIEZJWFVQLCBURU5UUlkpIFwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCVwKKwkJCUNMRUFSCQkJCVwKKwkJIjE6XG4iCQkJCQlcCisJCSIJLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIglcCisJCQlGSVhVUAkJCQlcCisJCSIJanVtcCAxYlxuIgkJCVwKKwkJIgkucHJldmlvdXNcbiIJCQlcCisJCSIJLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIglcCisJCQlURU5UUlkJCQkJXAorCQkiCS5wcmV2aW91cyIJCQlcCisJCTogIj1yIiAodG8pLCAiPXIiIChyZXQpCQkJXAorCQk6ICIwIiAodG8pLCAiMSIgKHJldCkJCQlcCisJCTogIm1lbW9yeSIpCisKKyNkZWZpbmUgX19hc21fY2xlYXJfMSh0bywgcmV0KSBcCisJX19hc21fY2xlYXIodG8sIHJldCwJCQlcCisJCSIJY2xlYXIuYiBbJTArXVxuMjpcbiIsCVwKKwkJIjM6CWFkZHEgMSwlMVxuIiwJCVwKKwkJIgkuZHdvcmQgMmIsM2JcbiIpCisKKyNkZWZpbmUgX19hc21fY2xlYXJfMih0bywgcmV0KSBcCisJX19hc21fY2xlYXIodG8sIHJldCwJCQlcCisJCSIJY2xlYXIudyBbJTArXVxuMjpcbiIsCVwKKwkJIjM6CWFkZHEgMiwlMVxuIiwJCVwKKwkJIgkuZHdvcmQgMmIsM2JcbiIpCisKKyNkZWZpbmUgX19hc21fY2xlYXJfMyh0bywgcmV0KSBcCisgICAgIF9fYXNtX2NsZWFyKHRvLCByZXQsCQkJXAorCQkgIgljbGVhci53IFslMCtdXG4iCVwKKwkJICIyOgljbGVhci5iIFslMCtdXG4zOlxuIiwJXAorCQkgIjQ6CWFkZHEgMiwlMVxuIgkJXAorCQkgIjU6CWFkZHEgMSwlMVxuIiwJCVwKKwkJICIJLmR3b3JkIDJiLDRiXG4iCQlcCisJCSAiCS5kd29yZCAzYiw1YlxuIikKKworI2RlZmluZSBfX2FzbV9jbGVhcl80eF9jb250KHRvLCByZXQsIENMRUFSLCBGSVhVUCwgVEVOVFJZKSBcCisJX19hc21fY2xlYXIodG8sIHJldCwJCQkJXAorCQkiCWNsZWFyLmQgWyUwK11cbjI6XG4iIENMRUFSLAlcCisJCSIzOglhZGRxIDQsJTFcbiIgRklYVVAsCQlcCisJCSIJLmR3b3JkIDJiLDNiXG4iIFRFTlRSWSkKKworI2RlZmluZSBfX2FzbV9jbGVhcl80KHRvLCByZXQpIFwKKwlfX2FzbV9jbGVhcl80eF9jb250KHRvLCByZXQsICIiLCAiIiwgIiIpCisKKyNkZWZpbmUgX19hc21fY2xlYXJfOHhfY29udCh0bywgcmV0LCBDTEVBUiwgRklYVVAsIFRFTlRSWSkgXAorCV9fYXNtX2NsZWFyXzR4X2NvbnQodG8sIHJldCwJCQlcCisJCSIJY2xlYXIuZCBbJTArXVxuNDpcbiIgQ0xFQVIsCVwKKwkJIjU6CWFkZHEgNCwlMVxuIiBGSVhVUCwJCVwKKwkJIgkuZHdvcmQgNGIsNWJcbiIgVEVOVFJZKQorCisjZGVmaW5lIF9fYXNtX2NsZWFyXzgodG8sIHJldCkgXAorCV9fYXNtX2NsZWFyXzh4X2NvbnQodG8sIHJldCwgIiIsICIiLCAiIikKKworI2RlZmluZSBfX2FzbV9jbGVhcl8xMnhfY29udCh0bywgcmV0LCBDTEVBUiwgRklYVVAsIFRFTlRSWSkgXAorCV9fYXNtX2NsZWFyXzh4X2NvbnQodG8sIHJldCwJCQlcCisJCSIJY2xlYXIuZCBbJTArXVxuNjpcbiIgQ0xFQVIsCVwKKwkJIjc6CWFkZHEgNCwlMVxuIiBGSVhVUCwJCVwKKwkJIgkuZHdvcmQgNmIsN2JcbiIgVEVOVFJZKQorCisjZGVmaW5lIF9fYXNtX2NsZWFyXzEyKHRvLCByZXQpIFwKKwlfX2FzbV9jbGVhcl8xMnhfY29udCh0bywgcmV0LCAiIiwgIiIsICIiKQorCisjZGVmaW5lIF9fYXNtX2NsZWFyXzE2eF9jb250KHRvLCByZXQsIENMRUFSLCBGSVhVUCwgVEVOVFJZKSBcCisJX19hc21fY2xlYXJfMTJ4X2NvbnQodG8sIHJldCwJCQlcCisJCSIJY2xlYXIuZCBbJTArXVxuODpcbiIgQ0xFQVIsCVwKKwkJIjk6CWFkZHEgNCwlMVxuIiBGSVhVUCwJCVwKKwkJIgkuZHdvcmQgOGIsOWJcbiIgVEVOVFJZKQorCisjZGVmaW5lIF9fYXNtX2NsZWFyXzE2KHRvLCByZXQpIFwKKwlfX2FzbV9jbGVhcl8xNnhfY29udCh0bywgcmV0LCAiIiwgIiIsICIiKQorCisjZGVmaW5lIF9fYXNtX2NsZWFyXzIweF9jb250KHRvLCByZXQsIENMRUFSLCBGSVhVUCwgVEVOVFJZKSBcCisJX19hc21fY2xlYXJfMTZ4X2NvbnQodG8sIHJldCwJCQlcCisJCSIJY2xlYXIuZCBbJTArXVxuMTA6XG4iIENMRUFSLAlcCisJCSIxMToJYWRkcSA0LCUxXG4iIEZJWFVQLAkJXAorCQkiCS5kd29yZCAxMGIsMTFiXG4iIFRFTlRSWSkKKworI2RlZmluZSBfX2FzbV9jbGVhcl8yMCh0bywgcmV0KSBcCisJX19hc21fY2xlYXJfMjB4X2NvbnQodG8sIHJldCwgIiIsICIiLCAiIikKKworI2RlZmluZSBfX2FzbV9jbGVhcl8yNHhfY29udCh0bywgcmV0LCBDTEVBUiwgRklYVVAsIFRFTlRSWSkgXAorCV9fYXNtX2NsZWFyXzIweF9jb250KHRvLCByZXQsCQkJXAorCQkiCWNsZWFyLmQgWyUwK11cbjEyOlxuIiBDTEVBUiwJXAorCQkiMTM6CWFkZHEgNCwlMVxuIiBGSVhVUCwJCVwKKwkJIgkuZHdvcmQgMTJiLDEzYlxuIiBURU5UUlkpCisKKyNkZWZpbmUgX19hc21fY2xlYXJfMjQodG8sIHJldCkgXAorCV9fYXNtX2NsZWFyXzI0eF9jb250KHRvLCByZXQsICIiLCAiIiwgIiIpCisKKy8qCisgKiBSZXR1cm4gdGhlIHNpemUgb2YgYSBzdHJpbmcgKGluY2x1ZGluZyB0aGUgZW5kaW5nIDApCisgKgorICogUmV0dXJuIGxlbmd0aCBvZiBzdHJpbmcgaW4gdXNlcnNwYWNlIGluY2x1ZGluZyB0ZXJtaW5hdGluZyAwCisgKiBvciAwIGZvciBlcnJvci4gIFJldHVybiBhIHZhbHVlIGdyZWF0ZXIgdGhhbiBOIGlmIHRvbyBsb25nLgorICovCisKK2V4dGVybiBpbmxpbmUgbG9uZworc3Rybmxlbl91c2VyKGNvbnN0IGNoYXIgKnMsIGxvbmcgbikKK3sKKwlsb25nIHJlcywgdG1wMTsKKworCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBzLCAwKSkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIFRoaXMgY29kZSBpcyBkZWR1Y2VkIGZyb206CisJICoKKwkgKgl0bXAxID0gbjsKKwkgKgl3aGlsZSAodG1wMS0tID4gMCAmJiAqcysrKQorCSAqCSAgOworCSAqCisJICoJcmVzID0gbiAtIHRtcDE7CisJICoKKwkgKiAgKHdpdGggdHdlYWtzKS4KKwkgKi8KKworCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwkJIgltb3ZlLmQgJTEsJHI5XG4iCisJCSIwOlxuIgorCQkiCWJsZSAxZlxuIgorCQkiCXN1YnEgMSwkcjlcbiIKKworCQkiCXRlc3QuYiBbJTArXVxuIgorCQkiCWJuZSAwYlxuIgorCQkiCXRlc3QuZCAkcjlcbiIKKwkJIjE6XG4iCisJCSIJbW92ZS5kICUxLCUwXG4iCisJCSIJc3ViLmQgJHI5LCUwXG4iCisJCSIyOlxuIgorCQkiCS5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIKKworCQkiMzoJY2xlYXIuZCAlMFxuIgorCQkiCWp1bXAgMmJcbiIKKworCQkvKiBUaGVyZSdzIG9uZSBhZGRyZXNzIGZvciBhIGZhdWx0IGF0IHRoZSBmaXJzdCBtb3ZlLCBhbmQKKwkJICAgdHdvIHBvc3NpYmxlIFBDIHZhbHVlcyBmb3IgYSBmYXVsdCBhdCB0aGUgc2Vjb25kIG1vdmUsCisJCSAgIGJlaW5nIGEgZGVsYXktc2xvdCBmaWxsZXIuICBIb3dldmVyLCB0aGUgYnJhbmNoLXRhcmdldAorCQkgICBmb3IgdGhlIHNlY29uZCBtb3ZlIGlzIHRoZSBzYW1lIGFzIHRoZSBmaXJzdCBhZGRyZXNzLgorCQkgICBKdXN0IHNvIHlvdSBkb24ndCBnZXQgY29uZnVzZWQuLi4gICovCisJCSIJLnByZXZpb3VzXG4iCisJCSIJLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgorCQkiCS5kd29yZCAwYiwzYlxuIgorCQkiCS5kd29yZCAxYiwzYlxuIgorCQkiCS5wcmV2aW91c1xuIgorCQk6ICI9ciIgKHJlcyksICI9ciIgKHRtcDEpCisJCTogIjAiIChzKSwgIjEiIChuKQorCQk6ICJyOSIpOworCisJcmV0dXJuIHJlczsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjEwL3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20tY3Jpcy9hcmNoLXYxMC91bmlzdGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWEzOGI5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9hcmNoLXYxMC91bmlzdGQuaApAQCAtMCwwICsxLDE0OCBAQAorI2lmbmRlZiBfQVNNX0NSSVNfQVJDSF9VTklTVERfSF8KKyNkZWZpbmUgX0FTTV9DUklTX0FSQ0hfVU5JU1REX0hfCisKKy8qIFhYWCAtIF9mb28gbmVlZHMgdG8gYmUgX19mb28sIHdoaWxlIF9fTlJfYmFyIGNvdWxkIGJlIF9OUl9iYXIuICovCisvKgorICogRG9uJ3QgcmVtb3ZlIHRoZSAuaWZuYyB0ZXN0czsgdGhleSBhcmUgYW4gaW5zdXJhbmNlIGFnYWluc3QKKyAqIGFueSBoYXJkLXRvLXNwb3QgZ2NjIHJlZ2lzdGVyIGFsbG9jYXRpb24gYnVncy4KKyAqLworI2RlZmluZSBfc3lzY2FsbDAodHlwZSxuYW1lKSBcCit0eXBlIG5hbWUodm9pZCkgXAoreyBcCisgIHJlZ2lzdGVyIGxvbmcgX19hIF9fYXNtX18gKCJyMTAiKTsgXAorICByZWdpc3RlciBsb25nIF9fbl8gX19hc21fXyAoInI5IikgPSAoX19OUl8jI25hbWUpOyBcCisgIF9fYXNtX18gX192b2xhdGlsZV9fICgiLmlmbmMgJTAlMSwkcjEwJHI5XG5cdCIgXAorCQkJIi5lcnJcblx0IiBcCisJCQkiLmVuZGlmXG5cdCIgXAorCQkJImJyZWFrIDEzIiBcCisJCQk6ICI9ciIgKF9fYSkgXAorCQkJOiAiciIgKF9fbl8pKTsgXAorICBpZiAoX19hID49IDApIFwKKyAgICAgcmV0dXJuICh0eXBlKSBfX2E7IFwKKyAgZXJybm8gPSAtX19hOyBcCisgIHJldHVybiAodHlwZSkgLTE7IFwKK30KKworI2RlZmluZSBfc3lzY2FsbDEodHlwZSxuYW1lLHR5cGUxLGFyZzEpIFwKK3R5cGUgbmFtZSh0eXBlMSBhcmcxKSBcCit7IFwKKyAgcmVnaXN0ZXIgbG9uZyBfX2EgX19hc21fXyAoInIxMCIpID0gKGxvbmcpIGFyZzE7IFwKKyAgcmVnaXN0ZXIgbG9uZyBfX25fIF9fYXNtX18gKCJyOSIpID0gKF9fTlJfIyNuYW1lKTsgXAorICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIi5pZm5jICUwJTEsJHIxMCRyOVxuXHQiIFwKKwkJCSIuZXJyXG5cdCIgXAorCQkJIi5lbmRpZlxuXHQiIFwKKwkJCSJicmVhayAxMyIgXAorCQkJOiAiPXIiIChfX2EpIFwKKwkJCTogInIiIChfX25fKSwgIjAiIChfX2EpKTsgXAorICBpZiAoX19hID49IDApIFwKKyAgICAgcmV0dXJuICh0eXBlKSBfX2E7IFwKKyAgZXJybm8gPSAtX19hOyBcCisgIHJldHVybiAodHlwZSkgLTE7IFwKK30KKworI2RlZmluZSBfc3lzY2FsbDIodHlwZSxuYW1lLHR5cGUxLGFyZzEsdHlwZTIsYXJnMikgXAordHlwZSBuYW1lKHR5cGUxIGFyZzEsdHlwZTIgYXJnMikgXAoreyBcCisgIHJlZ2lzdGVyIGxvbmcgX19hIF9fYXNtX18gKCJyMTAiKSA9IChsb25nKSBhcmcxOyBcCisgIHJlZ2lzdGVyIGxvbmcgX19iIF9fYXNtX18gKCJyMTEiKSA9IChsb25nKSBhcmcyOyBcCisgIHJlZ2lzdGVyIGxvbmcgX19uXyBfX2FzbV9fICgicjkiKSA9IChfX05SXyMjbmFtZSk7IFwKKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCIuaWZuYyAlMCUxJTMsJHIxMCRyOSRyMTFcblx0IiBcCisJCQkiLmVyclxuXHQiIFwKKwkJCSIuZW5kaWZcblx0IiBcCisJCQkiYnJlYWsgMTMiIFwKKwkJCTogIj1yIiAoX19hKSBcCisJCQk6ICJyIiAoX19uXyksICIwIiAoX19hKSwgInIiIChfX2IpKTsgXAorICBpZiAoX19hID49IDApIFwKKyAgICAgcmV0dXJuICh0eXBlKSBfX2E7IFwKKyAgZXJybm8gPSAtX19hOyBcCisgIHJldHVybiAodHlwZSkgLTE7IFwKK30KKworI2RlZmluZSBfc3lzY2FsbDModHlwZSxuYW1lLHR5cGUxLGFyZzEsdHlwZTIsYXJnMix0eXBlMyxhcmczKSBcCit0eXBlIG5hbWUodHlwZTEgYXJnMSx0eXBlMiBhcmcyLHR5cGUzIGFyZzMpIFwKK3sgXAorICByZWdpc3RlciBsb25nIF9fYSBfX2FzbV9fICgicjEwIikgPSAobG9uZykgYXJnMTsgXAorICByZWdpc3RlciBsb25nIF9fYiBfX2FzbV9fICgicjExIikgPSAobG9uZykgYXJnMjsgXAorICByZWdpc3RlciBsb25nIF9fYyBfX2FzbV9fICgicjEyIikgPSAobG9uZykgYXJnMzsgXAorICByZWdpc3RlciBsb25nIF9fbl8gX19hc21fXyAoInI5IikgPSAoX19OUl8jI25hbWUpOyBcCisgIF9fYXNtX18gX192b2xhdGlsZV9fICgiLmlmbmMgJTAlMSUzJTQsJHIxMCRyOSRyMTEkcjEyXG5cdCIgXAorCQkJIi5lcnJcblx0IiBcCisJCQkiLmVuZGlmXG5cdCIgXAorCQkJImJyZWFrIDEzIiBcCisJCQk6ICI9ciIgKF9fYSkgXAorCQkJOiAiciIgKF9fbl8pLCAiMCIgKF9fYSksICJyIiAoX19iKSwgInIiIChfX2MpKTsgXAorICBpZiAoX19hID49IDApIFwKKyAgICAgcmV0dXJuICh0eXBlKSBfX2E7IFwKKyAgZXJybm8gPSAtX19hOyBcCisgIHJldHVybiAodHlwZSkgLTE7IFwKK30KKworI2RlZmluZSBfc3lzY2FsbDQodHlwZSxuYW1lLHR5cGUxLGFyZzEsdHlwZTIsYXJnMix0eXBlMyxhcmczLHR5cGU0LGFyZzQpIFwKK3R5cGUgbmFtZSAodHlwZTEgYXJnMSwgdHlwZTIgYXJnMiwgdHlwZTMgYXJnMywgdHlwZTQgYXJnNCkgXAoreyBcCisgIHJlZ2lzdGVyIGxvbmcgX19hIF9fYXNtX18gKCJyMTAiKSA9IChsb25nKSBhcmcxOyBcCisgIHJlZ2lzdGVyIGxvbmcgX19iIF9fYXNtX18gKCJyMTEiKSA9IChsb25nKSBhcmcyOyBcCisgIHJlZ2lzdGVyIGxvbmcgX19jIF9fYXNtX18gKCJyMTIiKSA9IChsb25nKSBhcmczOyBcCisgIHJlZ2lzdGVyIGxvbmcgX19kIF9fYXNtX18gKCJyMTMiKSA9IChsb25nKSBhcmc0OyBcCisgIHJlZ2lzdGVyIGxvbmcgX19uXyBfX2FzbV9fICgicjkiKSA9IChfX05SXyMjbmFtZSk7IFwKKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCIuaWZuYyAlMCUxJTMlNCU1LCRyMTAkcjkkcjExJHIxMiRyMTNcblx0IiBcCisJCQkiLmVyclxuXHQiIFwKKwkJCSIuZW5kaWZcblx0IiBcCisJCQkiYnJlYWsgMTMiIFwKKwkJCTogIj1yIiAoX19hKSBcCisJCQk6ICJyIiAoX19uXyksICIwIiAoX19hKSwgInIiIChfX2IpLCBcCisJCQkgICJyIiAoX19jKSwgInIiIChfX2QpKTsgXAorICBpZiAoX19hID49IDApIFwKKyAgICAgcmV0dXJuICh0eXBlKSBfX2E7IFwKKyAgZXJybm8gPSAtX19hOyBcCisgIHJldHVybiAodHlwZSkgLTE7IFwKK30gCisKKyNkZWZpbmUgX3N5c2NhbGw1KHR5cGUsbmFtZSx0eXBlMSxhcmcxLHR5cGUyLGFyZzIsdHlwZTMsYXJnMyx0eXBlNCxhcmc0LCBcCisJICB0eXBlNSxhcmc1KSBcCit0eXBlIG5hbWUgKHR5cGUxIGFyZzEsdHlwZTIgYXJnMix0eXBlMyBhcmczLHR5cGU0IGFyZzQsdHlwZTUgYXJnNSkgXAoreyBcCisgIHJlZ2lzdGVyIGxvbmcgX19hIF9fYXNtX18gKCJyMTAiKSA9IChsb25nKSBhcmcxOyBcCisgIHJlZ2lzdGVyIGxvbmcgX19iIF9fYXNtX18gKCJyMTEiKSA9IChsb25nKSBhcmcyOyBcCisgIHJlZ2lzdGVyIGxvbmcgX19jIF9fYXNtX18gKCJyMTIiKSA9IChsb25nKSBhcmczOyBcCisgIHJlZ2lzdGVyIGxvbmcgX19kIF9fYXNtX18gKCJyMTMiKSA9IChsb25nKSBhcmc0OyBcCisgIHJlZ2lzdGVyIGxvbmcgX19uXyBfX2FzbV9fICgicjkiKSA9IChfX05SXyMjbmFtZSk7IFwKKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCIuaWZuYyAlMCUxJTMlNCU1LCRyMTAkcjkkcjExJHIxMiRyMTNcblx0IiBcCisJCQkiLmVyclxuXHQiIFwKKwkJCSIuZW5kaWZcblx0IiBcCisJCQkibW92ZSAlNiwkbW9mXG5cdCIgXAorCQkJImJyZWFrIDEzIiBcCisJCQk6ICI9ciIgKF9fYSkgXAorCQkJOiAiciIgKF9fbl8pLCAiMCIgKF9fYSksICJyIiAoX19iKSwgXAorCQkJICAiciIgKF9fYyksICJyIiAoX19kKSwgImciIChhcmc1KSk7IFwKKyAgaWYgKF9fYSA+PSAwKSBcCisgICAgIHJldHVybiAodHlwZSkgX19hOyBcCisgIGVycm5vID0gLV9fYTsgXAorICByZXR1cm4gKHR5cGUpIC0xOyBcCit9CisKKyNkZWZpbmUgX3N5c2NhbGw2KHR5cGUsbmFtZSx0eXBlMSxhcmcxLHR5cGUyLGFyZzIsdHlwZTMsYXJnMyx0eXBlNCxhcmc0LCBcCisJICB0eXBlNSxhcmc1LHR5cGU2LGFyZzYpIFwKK3R5cGUgbmFtZSAodHlwZTEgYXJnMSx0eXBlMiBhcmcyLHR5cGUzIGFyZzMsdHlwZTQgYXJnNCx0eXBlNSBhcmc1LHR5cGU2IGFyZzYpIFwKK3sgXAorICByZWdpc3RlciBsb25nIF9fYSBfX2FzbV9fICgicjEwIikgPSAobG9uZykgYXJnMTsgXAorICByZWdpc3RlciBsb25nIF9fYiBfX2FzbV9fICgicjExIikgPSAobG9uZykgYXJnMjsgXAorICByZWdpc3RlciBsb25nIF9fYyBfX2FzbV9fICgicjEyIikgPSAobG9uZykgYXJnMzsgXAorICByZWdpc3RlciBsb25nIF9fZCBfX2FzbV9fICgicjEzIikgPSAobG9uZykgYXJnNDsgXAorICByZWdpc3RlciBsb25nIF9fbl8gX19hc21fXyAoInI5IikgPSAoX19OUl8jI25hbWUpOyBcCisgIF9fYXNtX18gX192b2xhdGlsZV9fICgiLmlmbmMgJTAlMSUzJTQlNSwkcjEwJHI5JHIxMSRyMTIkcjEzXG5cdCIgXAorCQkJIi5lcnJcblx0IiBcCisJCQkiLmVuZGlmXG5cdCIgXAorCQkJIm1vdmUgJTYsJG1vZlxuXHRtb3ZlICU3LCRzcnBcblx0IiBcCisJCQkiYnJlYWsgMTMiIFwKKwkJCTogIj1yIiAoX19hKSBcCisJCQk6ICJyIiAoX19uXyksICIwIiAoX19hKSwgInIiIChfX2IpLCBcCisJCQkgICJyIiAoX19jKSwgInIiIChfX2QpLCAiZyIgKGFyZzUpLCAiZyIgKGFyZzYpXAorCQkJOiAic3JwIik7IFwKKyAgaWYgKF9fYSA+PSAwKSBcCisgICAgIHJldHVybiAodHlwZSkgX19hOyBcCisgIGVycm5vID0gLV9fYTsgXAorICByZXR1cm4gKHR5cGUpIC0xOyBcCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy9hcmNoLXYxMC91c2VyLmggYi9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjEwL3VzZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzAzZWE3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9hcmNoLXYxMC91c2VyLmgKQEAgLTAsMCArMSw0NiBAQAorI2lmbmRlZiBfX0FTTV9DUklTX0FSQ0hfVVNFUl9ICisjZGVmaW5lIF9fQVNNX0NSSVNfQVJDSF9VU0VSX0gKKworLyogVXNlciBtb2RlIHJlZ2lzdGVycywgdXNlZCBmb3IgY29yZSBkdW1wcy4gSW4gb3JkZXIgdG8ga2VlcCBFTEZfTkdSRUcKKyAgIHNlbnNpYmxlIHdlIGxldCBhbGwgcmVnaXN0ZXJzIGJlIDMyIGJpdHMuIFRoZSBjc3IgcmVnaXN0ZXJzIGFyZSBpbmNsdWRlZAorICAgZm9yIGZ1dHVyZSB1c2UuICovCitzdHJ1Y3QgdXNlcl9yZWdzX3N0cnVjdCB7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgcjA7ICAgICAgIC8qIEdlbmVyYWwgcmVnaXN0ZXJzLiAqLworICAgICAgICB1bnNpZ25lZCBsb25nIHIxOworICAgICAgICB1bnNpZ25lZCBsb25nIHIyOworICAgICAgICB1bnNpZ25lZCBsb25nIHIzOworICAgICAgICB1bnNpZ25lZCBsb25nIHI0OworICAgICAgICB1bnNpZ25lZCBsb25nIHI1OworICAgICAgICB1bnNpZ25lZCBsb25nIHI2OworICAgICAgICB1bnNpZ25lZCBsb25nIHI3OworICAgICAgICB1bnNpZ25lZCBsb25nIHI4OworICAgICAgICB1bnNpZ25lZCBsb25nIHI5OworICAgICAgICB1bnNpZ25lZCBsb25nIHIxMDsKKyAgICAgICAgdW5zaWduZWQgbG9uZyByMTE7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgcjEyOworICAgICAgICB1bnNpZ25lZCBsb25nIHIxMzsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBzcDsgICAgICAgLyogU3RhY2sgcG9pbnRlci4gKi8KKyAgICAgICAgdW5zaWduZWQgbG9uZyBwYzsgICAgICAgLyogUHJvZ3JhbSBjb3VudGVyLiAqLworICAgICAgICB1bnNpZ25lZCBsb25nIHAwOyAgICAgICAvKiBDb25zdGFudCB6ZXJvIChvbmx5IDggYml0cykuICovCisgICAgICAgIHVuc2lnbmVkIGxvbmcgdnI7ICAgICAgIC8qIFZlcnNpb24gcmVnaXN0ZXIgKG9ubHkgOCBiaXRzKS4gKi8KKyAgICAgICAgdW5zaWduZWQgbG9uZyBwMjsgICAgICAgLyogUmVzZXJ2ZWQuICovCisgICAgICAgIHVuc2lnbmVkIGxvbmcgcDM7ICAgICAgIC8qIFJlc2VydmVkLiAqLworICAgICAgICB1bnNpZ25lZCBsb25nIHA0OyAgICAgICAvKiBDb25zdGFudCB6ZXJvIChvbmx5IDE2IGJpdHMpLiAqLworICAgICAgICB1bnNpZ25lZCBsb25nIGNjcjsgICAgICAvKiBDb25kaXRpb24gY29kZSByZWdpc3RlciAob25seSAxNiBiaXRzKS4gKi8KKyAgICAgICAgdW5zaWduZWQgbG9uZyBwNjsgICAgICAgLyogUmVzZXJ2ZWQuICovCisgICAgICAgIHVuc2lnbmVkIGxvbmcgbW9mOyAgICAgIC8qIE11bHRpcGx5IG92ZXJmbG93IHJlZ2lzdGVyLiAqLworICAgICAgICB1bnNpZ25lZCBsb25nIHA4OyAgICAgICAvKiBDb25zdGFudCB6ZXJvLiAqLworICAgICAgICB1bnNpZ25lZCBsb25nIGlicjsgICAgICAvKiBOb3QgYWNjZXNzaWJsZS4gKi8KKyAgICAgICAgdW5zaWduZWQgbG9uZyBpcnA7ICAgICAgLyogTm90IGFjY2Vzc2libGUuICovCisgICAgICAgIHVuc2lnbmVkIGxvbmcgc3JwOyAgICAgIC8qIFN1YnJvdXRpbmUgcmV0dXJuIHBvaW50ZXIuICovCisgICAgICAgIHVuc2lnbmVkIGxvbmcgYmFyOyAgICAgIC8qIE5vdCBhY2Nlc3NpYmxlLiAqLworICAgICAgICB1bnNpZ25lZCBsb25nIGRjY3I7ICAgICAvKiBEd29yZCBjb25kaXRpb24gY29kZSByZWdpc3Rlci4gKi8KKyAgICAgICAgdW5zaWduZWQgbG9uZyBicnA7ICAgICAgLyogTm90IGFjY2Vzc2libGUuICovCisgICAgICAgIHVuc2lnbmVkIGxvbmcgdXNwOyAgICAgIC8qIFVzZXItbW9kZSBzdGFjayBwb2ludGVyLiBTYW1lIGFzIHNwIHdoZW4gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHVzZXIgbW9kZS4gKi8KKyAgICAgICAgdW5zaWduZWQgbG9uZyBjc3JpbnN0cjsgLyogSW50ZXJuYWwgc3RhdHVzIHJlZ2lzdGVycy4gKi8KKyAgICAgICAgdW5zaWduZWQgbG9uZyBjc3JhZGRyOworICAgICAgICB1bnNpZ25lZCBsb25nIGNzcmRhdGE7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvYXRvbWljLmggYi9pbmNsdWRlL2FzbS1jcmlzL2F0b21pYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzZGZlYTUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL2F0b21pYy5oCkBAIC0wLDAgKzEsMTUwIEBACisvKiAkSWQ6IGF0b21pYy5oLHYgMS4zIDIwMDEvMDcvMjUgMTY6MTU6MTkgYmpvcm53IEV4cCAkICovCisKKyNpZm5kZWYgX19BU01fQ1JJU19BVE9NSUNfXworI2RlZmluZSBfX0FTTV9DUklTX0FUT01JQ19fCisKKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisKKy8qCisgKiBBdG9taWMgb3BlcmF0aW9ucyB0aGF0IEMgY2FuJ3QgZ3VhcmFudGVlIHVzLiAgVXNlZnVsIGZvcgorICogcmVzb3VyY2UgY291bnRpbmcgZXRjLi4KKyAqLworCisvKgorICogTWFrZSBzdXJlIGdjYyBkb2Vzbid0IHRyeSB0byBiZSBjbGV2ZXIgYW5kIG1vdmUgdGhpbmdzIGFyb3VuZAorICogb24gdXMuIFdlIG5lZWQgdG8gdXNlIF9leGFjdGx5XyB0aGUgYWRkcmVzcyB0aGUgdXNlciBnYXZlIHVzLAorICogbm90IHNvbWUgYWxpYXMgdGhhdCBjb250YWlucyB0aGUgc2FtZSBpbmZvcm1hdGlvbi4KKyAqLworCisjZGVmaW5lIF9fYXRvbWljX2Zvb2xfZ2NjKHgpICgqKHN0cnVjdCB7IGludCBhWzEwMF07IH0gKil4KQorCit0eXBlZGVmIHN0cnVjdCB7IGludCBjb3VudGVyOyB9IGF0b21pY190OworCisjZGVmaW5lIEFUT01JQ19JTklUKGkpICB7IChpKSB9CisKKyNkZWZpbmUgYXRvbWljX3JlYWQodikgKCh2KS0+Y291bnRlcikKKyNkZWZpbmUgYXRvbWljX3NldCh2LGkpICgoKHYpLT5jb3VudGVyKSA9IChpKSkKKworLyogVGhlc2Ugc2hvdWxkIGJlIHdyaXR0ZW4gaW4gYXNtIGJ1dCB3ZSBkbyBpdCBpbiBDIGZvciBub3cuICovCisKK2V4dGVybiBfX2lubGluZV9fIHZvaWQgYXRvbWljX2FkZChpbnQgaSwgdm9sYXRpbGUgYXRvbWljX3QgKnYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlsb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKTsKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCXYtPmNvdW50ZXIgKz0gaTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK2V4dGVybiBfX2lubGluZV9fIHZvaWQgYXRvbWljX3N1YihpbnQgaSwgdm9sYXRpbGUgYXRvbWljX3QgKnYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlsb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKTsKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCXYtPmNvdW50ZXIgLT0gaTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK2V4dGVybiBfX2lubGluZV9fIGludCBhdG9taWNfYWRkX3JldHVybihpbnQgaSwgdm9sYXRpbGUgYXRvbWljX3QgKnYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0dmFsOworCWxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpOworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJcmV0dmFsID0gKHYtPmNvdW50ZXIgKz0gaSk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCXJldHVybiByZXR2YWw7Cit9CisKKyNkZWZpbmUgYXRvbWljX2FkZF9uZWdhdGl2ZShhLCB2KQkoYXRvbWljX2FkZF9yZXR1cm4oKGEpLCAodikpIDwgMCkKKworZXh0ZXJuIF9faW5saW5lX18gaW50IGF0b21pY19zdWJfcmV0dXJuKGludCBpLCB2b2xhdGlsZSBhdG9taWNfdCAqdikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXR2YWw7CisJbG9jYWxfc2F2ZV9mbGFncyhmbGFncyk7CisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwlyZXR2YWwgPSAodi0+Y291bnRlciAtPSBpKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJcmV0dXJuIHJldHZhbDsKK30KKworZXh0ZXJuIF9faW5saW5lX18gaW50IGF0b21pY19zdWJfYW5kX3Rlc3QoaW50IGksIHZvbGF0aWxlIGF0b21pY190ICp2KQoreworCWludCByZXR2YWw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlsb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKTsKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCXJldHZhbCA9ICh2LT5jb3VudGVyIC09IGkpID09IDA7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCXJldHVybiByZXR2YWw7Cit9CisKK2V4dGVybiBfX2lubGluZV9fIHZvaWQgYXRvbWljX2luYyh2b2xhdGlsZSBhdG9taWNfdCAqdikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpOworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJKHYtPmNvdW50ZXIpKys7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCitleHRlcm4gX19pbmxpbmVfXyB2b2lkIGF0b21pY19kZWModm9sYXRpbGUgYXRvbWljX3QgKnYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlsb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKTsKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCSh2LT5jb3VudGVyKS0tOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworZXh0ZXJuIF9faW5saW5lX18gaW50IGF0b21pY19pbmNfcmV0dXJuKHZvbGF0aWxlIGF0b21pY190ICp2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldHZhbDsKKwlsb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKTsKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCXJldHZhbCA9ICh2LT5jb3VudGVyKSsrOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitleHRlcm4gX19pbmxpbmVfXyBpbnQgYXRvbWljX2RlY19yZXR1cm4odm9sYXRpbGUgYXRvbWljX3QgKnYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0dmFsOworCWxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpOworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJcmV0dmFsID0gKHYtPmNvdW50ZXIpLS07CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCXJldHVybiByZXR2YWw7Cit9CitleHRlcm4gX19pbmxpbmVfXyBpbnQgYXRvbWljX2RlY19hbmRfdGVzdCh2b2xhdGlsZSBhdG9taWNfdCAqdikKK3sKKwlpbnQgcmV0dmFsOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJbG9jYWxfc2F2ZV9mbGFncyhmbGFncyk7CisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwlyZXR2YWwgPSAtLSh2LT5jb3VudGVyKSA9PSAwOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitleHRlcm4gX19pbmxpbmVfXyBpbnQgYXRvbWljX2luY19hbmRfdGVzdCh2b2xhdGlsZSBhdG9taWNfdCAqdikKK3sKKwlpbnQgcmV0dmFsOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJbG9jYWxfc2F2ZV9mbGFncyhmbGFncyk7CisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwlyZXR2YWwgPSArKyh2LT5jb3VudGVyKSA9PSAwOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKiBBdG9taWMgb3BlcmF0aW9ucyBhcmUgYWxyZWFkeSBzZXJpYWxpemluZyAqLworI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfZGVjKCkgICAgYmFycmllcigpCisjZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2RlYygpICAgICBiYXJyaWVyKCkKKyNkZWZpbmUgc21wX21iX19iZWZvcmVfYXRvbWljX2luYygpICAgIGJhcnJpZXIoKQorI2RlZmluZSBzbXBfbWJfX2FmdGVyX2F0b21pY19pbmMoKSAgICAgYmFycmllcigpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy9heGlzZmxhc2htYXAuaCBiL2luY2x1ZGUvYXNtLWNyaXMvYXhpc2ZsYXNobWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAwYmI4NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvYXhpc2ZsYXNobWFwLmgKQEAgLTAsMCArMSw0MyBAQAorI2lmbmRlZiBfX0FTTV9BWElTRkxBU0hNQVBfSAorI2RlZmluZSBfX0FTTV9BWElTRkxBU0hNQVBfSAorCisvKiBCb290YmxvY2sgcGFyYW1ldGVycyBhcmUgc3RvcmVkIGF0IDB4YzAwMCBhbmQgaGFzIHRoZSBGTEFTSF9CT09UX01BR0lDIAorICogYXMgc3RhcnQsIGl0IGVuZHMgd2l0aCAweEZGRkZGRkZGICovCisjZGVmaW5lIEZMQVNIX0JPT1RfTUFHSUMgMHhiZWVmY2FjZQorI2RlZmluZSBCT09UUEFSQU1fT0ZGU0VUIDB4YzAwMAorLyogYXBwcy9ib290YmxvY2t0b29sIGlzIHVzZWQgdG8gcmVhZCBhbmQgd3JpdGUgdGhlIHBhcmFtZXRlcnMsCisgKiBhbmQgaXQgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCB0aGUgcGFydGl0aW9uIHRhYmxlLiAKKyAqLworCisjZGVmaW5lIFBBUlRJVElPTl9UQUJMRV9PRkZTRVQgMTAKKyNkZWZpbmUgUEFSVElUSU9OX1RBQkxFX01BR0lDIDB4YmVlZiAvKiBOb3QgYSBnb29kIG1hZ2ljICovCisKKy8qIFRoZSBwYXJ0aXRpb250YWJsZV9oZWFkIGlzIGxvY2F0ZWQgYXQgb2Zmc2V0ICsxMDogKi8KK3N0cnVjdCBwYXJ0aXRpb250YWJsZV9oZWFkIHsKKwlfX3UxNiBtYWdpYzsgLyogUEFSVElUSU9OX1RBQkxFX01BR0lDICovIAorCV9fdTE2IHNpemU7ICAvKiBMZW5ndGggb2YgcHRhYmxlIGJsb2NrIChub3QgaGVhZGVyKSAqLworCV9fdTMyIGNoZWNrc3VtOyAvKiBzaW1wbGUgbG9uZ3dvcmQgc3VtICovCit9OworCisvKiBBbmQgZm9sbG93ZWQgYnkgcGFydGl0aW9uIHRhYmxlIGVudHJpZXMgKi8KK3N0cnVjdCBwYXJ0aXRpb250YWJsZV9lbnRyeSB7CisJX191MzIgb2Zmc2V0OyAgIC8qIE9mZnNldCBpcyByZWxhdGl2ZSB0byB0aGUgc2VjdG9yIHRoZSBwdGFibGUgaXMgaW4gKi8KKwlfX3UzMiBzaXplOworCV9fdTMyIGNoZWNrc3VtOyAvKiBzaW1wbGUgbG9uZ3dvcmQgc3VtICovCisJX191MTYgdHlwZTsKKwlfX3UxNiBmbGFnczsgICAvKiBiaXQgMDogcm8vcncgPSAxLzAgKi8KKwlfX3UzMiBmdXR1cmUwOyAvKiAxNiBieXRlcyByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqLworCV9fdTMyIGZ1dHVyZTE7CisJX191MzIgZnV0dXJlMjsKKwlfX3UzMiBmdXR1cmUzOworfTsKKy8qIGVuZGVkIGJ5IGFuIGVuZCBtYXJrZXI6ICovCisjZGVmaW5lIFBBUlRJVElPTlRBQkxFX0VORF9NQVJLRVIgMHhGRkZGRkZGRgorI2RlZmluZSBQQVJUSVRJT05UQUJMRV9FTkRfTUFSS0VSX1NJWkUgNAorCisvKiNkZWZpbmUgUEFSVElUSU9OX1RZUEVfUkVTQ1VFIDB4MDAwMD8qLyAgLyogTm90IHVzZWQsIG1heWJlIGl0IHNob3VsZD8gKi8KKyNkZWZpbmUgUEFSVElUSU9OX1RZUEVfUEFSQU0gIDB4MDAwMQorI2RlZmluZSBQQVJUSVRJT05fVFlQRV9LRVJORUwgMHgwMDAyCisjZGVmaW5lIFBBUlRJVElPTl9UWVBFX0pGRlMgICAweDAwMDMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1jcmlzL2JpdG9wcy5oIGIvaW5jbHVkZS9hc20tY3Jpcy9iaXRvcHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzg2MTExCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9iaXRvcHMuaApAQCAtMCwwICsxLDM4NyBAQAorLyogYXNtL2JpdG9wcy5oIGZvciBMaW51eC9DUklTCisgKgorICogVE9ETzogYXNtIHZlcnNpb25zIGlmIHNwZWVkIGlzIG5lZWRlZAorICoKKyAqIEFsbCBiaXQgb3BlcmF0aW9ucyByZXR1cm4gMCBpZiB0aGUgYml0IHdhcyBjbGVhcmVkIGJlZm9yZSB0aGUKKyAqIG9wZXJhdGlvbiBhbmQgIT0gMCBpZiBpdCB3YXMgbm90LgorICoKKyAqIGJpdCAwIGlzIHRoZSBMU0Igb2YgYWRkcjsgYml0IDMyIGlzIHRoZSBMU0Igb2YgKGFkZHIrMSkuCisgKi8KKworI2lmbmRlZiBfQ1JJU19CSVRPUFNfSAorI2RlZmluZSBfQ1JJU19CSVRPUFNfSAorCisvKiBDdXJyZW50bHkgdGhpcyBpcyB1bnN1aXRhYmxlIGZvciBjb25zdW1wdGlvbiBvdXRzaWRlIHRoZSBrZXJuZWwuICAqLworI2lmZGVmIF9fS0VSTkVMX18gCisKKyNpbmNsdWRlIDxhc20vYXJjaC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKworLyoKKyAqIFNvbWUgaGFja3MgdG8gZGVmZWF0IGdjYyBvdmVyLW9wdGltaXphdGlvbnMuLgorICovCitzdHJ1Y3QgX19kdW1teSB7IHVuc2lnbmVkIGxvbmcgYVsxMDBdOyB9OworI2RlZmluZSBBRERSICgqKHN0cnVjdCBfX2R1bW15ICopIGFkZHIpCisjZGVmaW5lIENPTlNUX0FERFIgKCooY29uc3Qgc3RydWN0IF9fZHVtbXkgKikgYWRkcikKKworLyoKKyAqIHNldF9iaXQgLSBBdG9taWNhbGx5IHNldCBhIGJpdCBpbiBtZW1vcnkKKyAqIEBucjogdGhlIGJpdCB0byBzZXQKKyAqIEBhZGRyOiB0aGUgYWRkcmVzcyB0byBzdGFydCBjb3VudGluZyBmcm9tCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBhdG9taWMgYW5kIG1heSBub3QgYmUgcmVvcmRlcmVkLiAgU2VlIF9fc2V0X2JpdCgpCisgKiBpZiB5b3UgZG8gbm90IHJlcXVpcmUgdGhlIGF0b21pYyBndWFyYW50ZWVzLgorICogTm90ZSB0aGF0IEBuciBtYXkgYmUgYWxtb3N0IGFyYml0cmFyaWx5IGxhcmdlOyB0aGlzIGZ1bmN0aW9uIGlzIG5vdAorICogcmVzdHJpY3RlZCB0byBhY3Rpbmcgb24gYSBzaW5nbGUtd29yZCBxdWFudGl0eS4KKyAqLworCisjZGVmaW5lIHNldF9iaXQobnIsIGFkZHIpICAgICh2b2lkKXRlc3RfYW5kX3NldF9iaXQobnIsIGFkZHIpCisKKyNkZWZpbmUgX19zZXRfYml0KG5yLCBhZGRyKSAgICAodm9pZClfX3Rlc3RfYW5kX3NldF9iaXQobnIsIGFkZHIpCisKKy8qCisgKiBjbGVhcl9iaXQgLSBDbGVhcnMgYSBiaXQgaW4gbWVtb3J5CisgKiBAbnI6IEJpdCB0byBjbGVhcgorICogQGFkZHI6IEFkZHJlc3MgdG8gc3RhcnQgY291bnRpbmcgZnJvbQorICoKKyAqIGNsZWFyX2JpdCgpIGlzIGF0b21pYyBhbmQgbWF5IG5vdCBiZSByZW9yZGVyZWQuICBIb3dldmVyLCBpdCBkb2VzCisgKiBub3QgY29udGFpbiBhIG1lbW9yeSBiYXJyaWVyLCBzbyBpZiBpdCBpcyB1c2VkIGZvciBsb2NraW5nIHB1cnBvc2VzLAorICogeW91IHNob3VsZCBjYWxsIHNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpIGFuZC9vciBzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpCisgKiBpbiBvcmRlciB0byBlbnN1cmUgY2hhbmdlcyBhcmUgdmlzaWJsZSBvbiBvdGhlciBwcm9jZXNzb3JzLgorICovCisKKyNkZWZpbmUgY2xlYXJfYml0KG5yLCBhZGRyKSAgKHZvaWQpdGVzdF9hbmRfY2xlYXJfYml0KG5yLCBhZGRyKQorCisjZGVmaW5lIF9fY2xlYXJfYml0KG5yLCBhZGRyKSAgKHZvaWQpX190ZXN0X2FuZF9jbGVhcl9iaXQobnIsIGFkZHIpCisKKy8qCisgKiBjaGFuZ2VfYml0IC0gVG9nZ2xlIGEgYml0IGluIG1lbW9yeQorICogQG5yOiBCaXQgdG8gY2hhbmdlCisgKiBAYWRkcjogQWRkcmVzcyB0byBzdGFydCBjb3VudGluZyBmcm9tCisgKgorICogY2hhbmdlX2JpdCgpIGlzIGF0b21pYyBhbmQgbWF5IG5vdCBiZSByZW9yZGVyZWQuCisgKiBOb3RlIHRoYXQgQG5yIG1heSBiZSBhbG1vc3QgYXJiaXRyYXJpbHkgbGFyZ2U7IHRoaXMgZnVuY3Rpb24gaXMgbm90CisgKiByZXN0cmljdGVkIHRvIGFjdGluZyBvbiBhIHNpbmdsZS13b3JkIHF1YW50aXR5LgorICovCisKKyNkZWZpbmUgY2hhbmdlX2JpdChuciwgYWRkcikgKHZvaWQpdGVzdF9hbmRfY2hhbmdlX2JpdChuciwgYWRkcikKKworLyoKKyAqIF9fY2hhbmdlX2JpdCAtIFRvZ2dsZSBhIGJpdCBpbiBtZW1vcnkKKyAqIEBucjogdGhlIGJpdCB0byBjaGFuZ2UKKyAqIEBhZGRyOiB0aGUgYWRkcmVzcyB0byBzdGFydCBjb3VudGluZyBmcm9tCisgKgorICogVW5saWtlIGNoYW5nZV9iaXQoKSwgdGhpcyBmdW5jdGlvbiBpcyBub24tYXRvbWljIGFuZCBtYXkgYmUgcmVvcmRlcmVkLgorICogSWYgaXQncyBjYWxsZWQgb24gdGhlIHNhbWUgcmVnaW9uIG9mIG1lbW9yeSBzaW11bHRhbmVvdXNseSwgdGhlIGVmZmVjdAorICogbWF5IGJlIHRoYXQgb25seSBvbmUgb3BlcmF0aW9uIHN1Y2NlZWRzLgorICovCisKKyNkZWZpbmUgX19jaGFuZ2VfYml0KG5yLCBhZGRyKSAodm9pZClfX3Rlc3RfYW5kX2NoYW5nZV9iaXQobnIsIGFkZHIpCisKKy8qKgorICogdGVzdF9hbmRfc2V0X2JpdCAtIFNldCBhIGJpdCBhbmQgcmV0dXJuIGl0cyBvbGQgdmFsdWUKKyAqIEBucjogQml0IHRvIHNldAorICogQGFkZHI6IEFkZHJlc3MgdG8gY291bnQgZnJvbQorICoKKyAqIFRoaXMgb3BlcmF0aW9uIGlzIGF0b21pYyBhbmQgY2Fubm90IGJlIHJlb3JkZXJlZC4gIAorICogSXQgYWxzbyBpbXBsaWVzIGEgbWVtb3J5IGJhcnJpZXIuCisgKi8KKworZXh0ZXJuIGlubGluZSBpbnQgdGVzdF9hbmRfc2V0X2JpdChpbnQgbnIsIHZvaWQgKmFkZHIpCit7CisJdW5zaWduZWQgaW50IG1hc2ssIHJldHZhbDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCAqYWRyID0gKHVuc2lnbmVkIGludCAqKWFkZHI7CisJCisJYWRyICs9IG5yID4+IDU7CisJbWFzayA9IDEgPDwgKG5yICYgMHgxZik7CisJbG9jYWxfc2F2ZV9mbGFncyhmbGFncyk7CisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwlyZXR2YWwgPSAobWFzayAmICphZHIpICE9IDA7CisJKmFkciB8PSBtYXNrOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitleHRlcm4gaW5saW5lIGludCBfX3Rlc3RfYW5kX3NldF9iaXQoaW50IG5yLCB2b2lkICphZGRyKQoreworCXVuc2lnbmVkIGludCBtYXNrLCByZXR2YWw7CisJdW5zaWduZWQgaW50ICphZHIgPSAodW5zaWduZWQgaW50ICopYWRkcjsKKwkKKwlhZHIgKz0gbnIgPj4gNTsKKwltYXNrID0gMSA8PCAobnIgJiAweDFmKTsKKwlyZXR2YWwgPSAobWFzayAmICphZHIpICE9IDA7CisJKmFkciB8PSBtYXNrOworCXJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiBjbGVhcl9iaXQoKSBkb2Vzbid0IHByb3ZpZGUgYW55IGJhcnJpZXIgZm9yIHRoZSBjb21waWxlci4KKyAqLworI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKSAgICAgIGJhcnJpZXIoKQorI2RlZmluZSBzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpICAgICAgIGJhcnJpZXIoKQorCisvKioKKyAqIHRlc3RfYW5kX2NsZWFyX2JpdCAtIENsZWFyIGEgYml0IGFuZCByZXR1cm4gaXRzIG9sZCB2YWx1ZQorICogQG5yOiBCaXQgdG8gY2xlYXIKKyAqIEBhZGRyOiBBZGRyZXNzIHRvIGNvdW50IGZyb20KKyAqCisgKiBUaGlzIG9wZXJhdGlvbiBpcyBhdG9taWMgYW5kIGNhbm5vdCBiZSByZW9yZGVyZWQuICAKKyAqIEl0IGFsc28gaW1wbGllcyBhIG1lbW9yeSBiYXJyaWVyLgorICovCisKK2V4dGVybiBpbmxpbmUgaW50IHRlc3RfYW5kX2NsZWFyX2JpdChpbnQgbnIsIHZvaWQgKmFkZHIpCit7CisJdW5zaWduZWQgaW50IG1hc2ssIHJldHZhbDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCAqYWRyID0gKHVuc2lnbmVkIGludCAqKWFkZHI7CisJCisJYWRyICs9IG5yID4+IDU7CisJbWFzayA9IDEgPDwgKG5yICYgMHgxZik7CisJbG9jYWxfc2F2ZV9mbGFncyhmbGFncyk7CisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwlyZXR2YWwgPSAobWFzayAmICphZHIpICE9IDA7CisJKmFkciAmPSB+bWFzazsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJcmV0dXJuIHJldHZhbDsKK30KKworLyoqCisgKiBfX3Rlc3RfYW5kX2NsZWFyX2JpdCAtIENsZWFyIGEgYml0IGFuZCByZXR1cm4gaXRzIG9sZCB2YWx1ZQorICogQG5yOiBCaXQgdG8gY2xlYXIKKyAqIEBhZGRyOiBBZGRyZXNzIHRvIGNvdW50IGZyb20KKyAqCisgKiBUaGlzIG9wZXJhdGlvbiBpcyBub24tYXRvbWljIGFuZCBjYW4gYmUgcmVvcmRlcmVkLiAgCisgKiBJZiB0d28gZXhhbXBsZXMgb2YgdGhpcyBvcGVyYXRpb24gcmFjZSwgb25lIGNhbiBhcHBlYXIgdG8gc3VjY2VlZAorICogYnV0IGFjdHVhbGx5IGZhaWwuICBZb3UgbXVzdCBwcm90ZWN0IG11bHRpcGxlIGFjY2Vzc2VzIHdpdGggYSBsb2NrLgorICovCisKK2V4dGVybiBpbmxpbmUgaW50IF9fdGVzdF9hbmRfY2xlYXJfYml0KGludCBuciwgdm9pZCAqYWRkcikKK3sKKwl1bnNpZ25lZCBpbnQgbWFzaywgcmV0dmFsOworCXVuc2lnbmVkIGludCAqYWRyID0gKHVuc2lnbmVkIGludCAqKWFkZHI7CisJCisJYWRyICs9IG5yID4+IDU7CisJbWFzayA9IDEgPDwgKG5yICYgMHgxZik7CisJcmV0dmFsID0gKG1hc2sgJiAqYWRyKSAhPSAwOworCSphZHIgJj0gfm1hc2s7CisJcmV0dXJuIHJldHZhbDsKK30KKy8qKgorICogdGVzdF9hbmRfY2hhbmdlX2JpdCAtIENoYW5nZSBhIGJpdCBhbmQgcmV0dXJuIGl0cyBvbGQgdmFsdWUKKyAqIEBucjogQml0IHRvIGNoYW5nZQorICogQGFkZHI6IEFkZHJlc3MgdG8gY291bnQgZnJvbQorICoKKyAqIFRoaXMgb3BlcmF0aW9uIGlzIGF0b21pYyBhbmQgY2Fubm90IGJlIHJlb3JkZXJlZC4gIAorICogSXQgYWxzbyBpbXBsaWVzIGEgbWVtb3J5IGJhcnJpZXIuCisgKi8KKworZXh0ZXJuIGlubGluZSBpbnQgdGVzdF9hbmRfY2hhbmdlX2JpdChpbnQgbnIsIHZvaWQgKmFkZHIpCit7CisJdW5zaWduZWQgaW50IG1hc2ssIHJldHZhbDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCAqYWRyID0gKHVuc2lnbmVkIGludCAqKWFkZHI7CisJYWRyICs9IG5yID4+IDU7CisJbWFzayA9IDEgPDwgKG5yICYgMHgxZik7CisJbG9jYWxfc2F2ZV9mbGFncyhmbGFncyk7CisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwlyZXR2YWwgPSAobWFzayAmICphZHIpICE9IDA7CisJKmFkciBePSBtYXNrOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKiBXQVJOSU5HOiBub24gYXRvbWljIGFuZCBpdCBjYW4gYmUgcmVvcmRlcmVkISAqLworCitleHRlcm4gaW5saW5lIGludCBfX3Rlc3RfYW5kX2NoYW5nZV9iaXQoaW50IG5yLCB2b2lkICphZGRyKQoreworCXVuc2lnbmVkIGludCBtYXNrLCByZXR2YWw7CisJdW5zaWduZWQgaW50ICphZHIgPSAodW5zaWduZWQgaW50ICopYWRkcjsKKworCWFkciArPSBuciA+PiA1OworCW1hc2sgPSAxIDw8IChuciAmIDB4MWYpOworCXJldHZhbCA9IChtYXNrICYgKmFkcikgIT0gMDsKKwkqYWRyIF49IG1hc2s7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKioKKyAqIHRlc3RfYml0IC0gRGV0ZXJtaW5lIHdoZXRoZXIgYSBiaXQgaXMgc2V0CisgKiBAbnI6IGJpdCBudW1iZXIgdG8gdGVzdAorICogQGFkZHI6IEFkZHJlc3MgdG8gc3RhcnQgY291bnRpbmcgZnJvbQorICoKKyAqIFRoaXMgcm91dGluZSBkb2Vzbid0IG5lZWQgdG8gYmUgYXRvbWljLgorICovCisKK2V4dGVybiBpbmxpbmUgaW50IHRlc3RfYml0KGludCBuciwgY29uc3Qgdm9pZCAqYWRkcikKK3sKKwl1bnNpZ25lZCBpbnQgbWFzazsKKwl1bnNpZ25lZCBpbnQgKmFkciA9ICh1bnNpZ25lZCBpbnQgKilhZGRyOworCQorCWFkciArPSBuciA+PiA1OworCW1hc2sgPSAxIDw8IChuciAmIDB4MWYpOworCXJldHVybiAoKG1hc2sgJiAqYWRyKSAhPSAwKTsKK30KKworLyoKKyAqIEZpbmQtYml0IHJvdXRpbmVzLi4KKyAqLworCisvKgorICogU2luY2Ugd2UgZGVmaW5lIGl0ICJleHRlcm5hbCIsIGl0IGNvbGxpZGVzIHdpdGggdGhlIGJ1aWx0LWluCisgKiBkZWZpbml0aW9uLCB3aGljaCBkb2Vzbid0IGhhdmUgdGhlIHNhbWUgc2VtYW50aWNzLiAgV2UgZG9uJ3Qgd2FudCB0bworICogdXNlIC1mbm8tYnVpbHRpbiwgc28ganVzdCBoaWRlIHRoZSBuYW1lIGZmcy4KKyAqLworI2RlZmluZSBmZnMga2VybmVsX2ZmcworCisvKgorICogZmxzOiBmaW5kIGxhc3QgYml0IHNldC4KKyAqLworCisjZGVmaW5lIGZscyh4KSBnZW5lcmljX2Zscyh4KQorCisvKgorICogaHdlaWdodE4gLSByZXR1cm5zIHRoZSBoYW1taW5nIHdlaWdodCBvZiBhIE4tYml0IHdvcmQKKyAqIEB4OiB0aGUgd29yZCB0byB3ZWlnaAorICoKKyAqIFRoZSBIYW1taW5nIFdlaWdodCBvZiBhIG51bWJlciBpcyB0aGUgdG90YWwgbnVtYmVyIG9mIGJpdHMgc2V0IGluIGl0LgorICovCisKKyNkZWZpbmUgaHdlaWdodDMyKHgpIGdlbmVyaWNfaHdlaWdodDMyKHgpCisjZGVmaW5lIGh3ZWlnaHQxNih4KSBnZW5lcmljX2h3ZWlnaHQxNih4KQorI2RlZmluZSBod2VpZ2h0OCh4KSBnZW5lcmljX2h3ZWlnaHQ4KHgpCisKKy8qKgorICogZmluZF9uZXh0X3plcm9fYml0IC0gZmluZCB0aGUgZmlyc3QgemVybyBiaXQgaW4gYSBtZW1vcnkgcmVnaW9uCisgKiBAYWRkcjogVGhlIGFkZHJlc3MgdG8gYmFzZSB0aGUgc2VhcmNoIG9uCisgKiBAb2Zmc2V0OiBUaGUgYml0bnVtYmVyIHRvIHN0YXJ0IHNlYXJjaGluZyBhdAorICogQHNpemU6IFRoZSBtYXhpbXVtIHNpemUgdG8gc2VhcmNoCisgKi8KK2V4dGVybiBpbmxpbmUgaW50IGZpbmRfbmV4dF96ZXJvX2JpdCAodm9pZCAqIGFkZHIsIGludCBzaXplLCBpbnQgb2Zmc2V0KQoreworCXVuc2lnbmVkIGxvbmcgKnAgPSAoKHVuc2lnbmVkIGxvbmcgKikgYWRkcikgKyAob2Zmc2V0ID4+IDUpOworCXVuc2lnbmVkIGxvbmcgcmVzdWx0ID0gb2Zmc2V0ICYgfjMxVUw7CisJdW5zaWduZWQgbG9uZyB0bXA7CisJCisJaWYgKG9mZnNldCA+PSBzaXplKQorCQlyZXR1cm4gc2l6ZTsKKwlzaXplIC09IHJlc3VsdDsKKwlvZmZzZXQgJj0gMzFVTDsKKwlpZiAob2Zmc2V0KSB7CisJCXRtcCA9ICoocCsrKTsKKwkJdG1wIHw9IH4wVUwgPj4gKDMyLW9mZnNldCk7CisJCWlmIChzaXplIDwgMzIpCisJCQlnb3RvIGZvdW5kX2ZpcnN0OworCQlpZiAofnRtcCkKKwkJCWdvdG8gZm91bmRfbWlkZGxlOworCQlzaXplIC09IDMyOworCQlyZXN1bHQgKz0gMzI7CisJfQorCXdoaWxlIChzaXplICYgfjMxVUwpIHsKKwkJaWYgKH4odG1wID0gKihwKyspKSkKKwkJCWdvdG8gZm91bmRfbWlkZGxlOworCQlyZXN1bHQgKz0gMzI7CisJCXNpemUgLT0gMzI7CisJfQorCWlmICghc2l6ZSkKKwkJcmV0dXJuIHJlc3VsdDsKKwl0bXAgPSAqcDsKKwkKKyBmb3VuZF9maXJzdDoKKwl0bXAgfD0gfjBVTCA+PiBzaXplOworIGZvdW5kX21pZGRsZToKKwlyZXR1cm4gcmVzdWx0ICsgZmZ6KHRtcCk7Cit9CisKKy8qKgorICogZmluZF9uZXh0X2JpdCAtIGZpbmQgdGhlIGZpcnN0IHNldCBiaXQgaW4gYSBtZW1vcnkgcmVnaW9uCisgKiBAYWRkcjogVGhlIGFkZHJlc3MgdG8gYmFzZSB0aGUgc2VhcmNoIG9uCisgKiBAb2Zmc2V0OiBUaGUgYml0bnVtYmVyIHRvIHN0YXJ0IHNlYXJjaGluZyBhdAorICogQHNpemU6IFRoZSBtYXhpbXVtIHNpemUgdG8gc2VhcmNoCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIGludCBmaW5kX25leHRfYml0KHZvaWQgKmFkZHIsIGludCBzaXplLCBpbnQgb2Zmc2V0KQoreworCXVuc2lnbmVkIGxvbmcgKnAgPSAoKHVuc2lnbmVkIGxvbmcgKikgYWRkcikgKyAob2Zmc2V0ID4+IDUpOworICAgICAgICB1bnNpZ25lZCBsb25nIHJlc3VsdCA9IG9mZnNldCAmIH4zMVVMOworICAgICAgICB1bnNpZ25lZCBsb25nIHRtcDsKKworICAgICAgICBpZiAob2Zmc2V0ID49IHNpemUpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNpemU7CisgICAgICAgIHNpemUgLT0gcmVzdWx0OworICAgICAgICBvZmZzZXQgJj0gMzFVTDsKKyAgICAgICAgaWYgKG9mZnNldCkgeworICAgICAgICAgICAgICAgIHRtcCA9ICoocCsrKTsKKyAgICAgICAgICAgICAgICB0bXAgJj0gKH4wVUwgPDwgb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBpZiAoc2l6ZSA8IDMyKQorICAgICAgICAgICAgICAgICAgICAgICAgZ290byBmb3VuZF9maXJzdDsKKyAgICAgICAgICAgICAgICBpZiAodG1wKQorICAgICAgICAgICAgICAgICAgICAgICAgZ290byBmb3VuZF9taWRkbGU7CisgICAgICAgICAgICAgICAgc2l6ZSAtPSAzMjsKKyAgICAgICAgICAgICAgICByZXN1bHQgKz0gMzI7CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUgKHNpemUgJiB+MzFVTCkgeworICAgICAgICAgICAgICAgIGlmICgodG1wID0gKihwKyspKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZm91bmRfbWlkZGxlOworICAgICAgICAgICAgICAgIHJlc3VsdCArPSAzMjsKKyAgICAgICAgICAgICAgICBzaXplIC09IDMyOworICAgICAgICB9CisgICAgICAgIGlmICghc2l6ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB0bXAgPSAqcDsKKworZm91bmRfZmlyc3Q6CisgICAgICAgIHRtcCAmPSAofjBVTCA+PiAoMzIgLSBzaXplKSk7CisgICAgICAgIGlmICh0bXAgPT0gMFVMKSAgICAgICAgLyogQXJlIGFueSBiaXRzIHNldD8gKi8KKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgc2l6ZTsgLyogTm9wZS4gKi8KK2ZvdW5kX21pZGRsZToKKyAgICAgICAgcmV0dXJuIHJlc3VsdCArIF9fZmZzKHRtcCk7Cit9CisKKy8qKgorICogZmluZF9maXJzdF96ZXJvX2JpdCAtIGZpbmQgdGhlIGZpcnN0IHplcm8gYml0IGluIGEgbWVtb3J5IHJlZ2lvbgorICogQGFkZHI6IFRoZSBhZGRyZXNzIHRvIHN0YXJ0IHRoZSBzZWFyY2ggYXQKKyAqIEBzaXplOiBUaGUgbWF4aW11bSBzaXplIHRvIHNlYXJjaAorICoKKyAqIFJldHVybnMgdGhlIGJpdC1udW1iZXIgb2YgdGhlIGZpcnN0IHplcm8gYml0LCBub3QgdGhlIG51bWJlciBvZiB0aGUgYnl0ZQorICogY29udGFpbmluZyBhIGJpdC4KKyAqLworCisjZGVmaW5lIGZpbmRfZmlyc3RfemVyb19iaXQoYWRkciwgc2l6ZSkgXAorICAgICAgICBmaW5kX25leHRfemVyb19iaXQoKGFkZHIpLCAoc2l6ZSksIDApCisjZGVmaW5lIGZpbmRfZmlyc3RfYml0KGFkZHIsIHNpemUpIFwKKyAgICAgICAgZmluZF9uZXh0X2JpdCgoYWRkciksIChzaXplKSwgMCkKKworI2RlZmluZSBleHQyX3NldF9iaXQgICAgICAgICAgICAgICAgIHRlc3RfYW5kX3NldF9iaXQKKyNkZWZpbmUgZXh0Ml9zZXRfYml0X2F0b21pYyhsLG4sYSkgICB0ZXN0X2FuZF9zZXRfYml0KG4sYSkKKyNkZWZpbmUgZXh0Ml9jbGVhcl9iaXQgICAgICAgICAgICAgICB0ZXN0X2FuZF9jbGVhcl9iaXQKKyNkZWZpbmUgZXh0Ml9jbGVhcl9iaXRfYXRvbWljKGwsbixhKSB0ZXN0X2FuZF9jbGVhcl9iaXQobixhKQorI2RlZmluZSBleHQyX3Rlc3RfYml0ICAgICAgICAgICAgICAgIHRlc3RfYml0CisjZGVmaW5lIGV4dDJfZmluZF9maXJzdF96ZXJvX2JpdCAgICAgZmluZF9maXJzdF96ZXJvX2JpdAorI2RlZmluZSBleHQyX2ZpbmRfbmV4dF96ZXJvX2JpdCAgICAgIGZpbmRfbmV4dF96ZXJvX2JpdAorCisvKiBCaXRtYXAgZnVuY3Rpb25zIGZvciB0aGUgbWluaXggZmlsZXN5c3RlbS4gICovCisjZGVmaW5lIG1pbml4X3NldF9iaXQobnIsYWRkcikgdGVzdF9hbmRfc2V0X2JpdChucixhZGRyKQorI2RlZmluZSBtaW5peF9jbGVhcl9iaXQobnIsYWRkcikgdGVzdF9hbmRfY2xlYXJfYml0KG5yLGFkZHIpCisjZGVmaW5lIG1pbml4X3Rlc3RfYml0KG5yLGFkZHIpIHRlc3RfYml0KG5yLGFkZHIpCisjZGVmaW5lIG1pbml4X2ZpbmRfZmlyc3RfemVyb19iaXQoYWRkcixzaXplKSBmaW5kX2ZpcnN0X3plcm9fYml0KGFkZHIsc2l6ZSkKKworZXh0ZXJuIGlubGluZSBpbnQgc2NoZWRfZmluZF9maXJzdF9iaXQodW5zaWduZWQgbG9uZyAqYikKK3sKKwlpZiAodW5saWtlbHkoYlswXSkpCisJCXJldHVybiBfX2ZmcyhiWzBdKTsKKwlpZiAodW5saWtlbHkoYlsxXSkpCisJCXJldHVybiBfX2ZmcyhiWzFdKSArIDMyOworCWlmICh1bmxpa2VseShiWzJdKSkKKwkJcmV0dXJuIF9fZmZzKGJbMl0pICsgNjQ7CisJaWYgKHVubGlrZWx5KGJbM10pKQorCQlyZXR1cm4gX19mZnMoYlszXSkgKyA5NjsKKwlpZiAoYls0XSkKKwkJcmV0dXJuIF9fZmZzKGJbNF0pICsgMTI4OworCXJldHVybiBfX2ZmcyhiWzVdKSArIDMyICsgMTI4OworfQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX0NSSVNfQklUT1BTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvYnVnLmggYi9pbmNsdWRlL2FzbS1jcmlzL2J1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkZDZiMjMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL2J1Zy5oCkBAIC0wLDAgKzEsNCBAQAorI2lmbmRlZiBfQ1JJU19CVUdfSAorI2RlZmluZSBfQ1JJU19CVUdfSAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2J1Zy5oPgorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1jcmlzL2J1Z3MuaCBiL2luY2x1ZGUvYXNtLWNyaXMvYnVncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1OTA3YWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL2J1Z3MuaApAQCAtMCwwICsxLDIxIEBACisvKiAkSWQ6IGJ1Z3MuaCx2IDEuMiAyMDAxLzAxLzE3IDE3OjAzOjE4IGJqb3JudyBFeHAgJAorICoKKyAqICBpbmNsdWRlL2FzbS1jcmlzL2J1Z3MuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEgQXhpcyBDb21tdW5pY2F0aW9ucyBBQgorICovCisKKy8qCisgKiBUaGlzIGlzIGluY2x1ZGVkIGJ5IGluaXQvbWFpbi5jIHRvIGNoZWNrIGZvciBhcmNoaXRlY3R1cmUtZGVwZW5kZW50IGJ1Z3MuCisgKgorICogTmVlZHM6CisgKgl2b2lkIGNoZWNrX2J1Z3Modm9pZCk7CisgKi8KKworc3RhdGljIHZvaWQgY2hlY2tfYnVncyh2b2lkKQoreworfQorCisKKworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1jcmlzL2J5dGVvcmRlci5oIGIvaW5jbHVkZS9hc20tY3Jpcy9ieXRlb3JkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWEyMjJhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9ieXRlb3JkZXIuaApAQCAtMCwwICsxLDI2IEBACisjaWZuZGVmIF9DUklTX0JZVEVPUkRFUl9ICisjZGVmaW5lIF9DUklTX0JZVEVPUkRFUl9ICisKKyNpZmRlZiBfX0dOVUNfXworCisjaW5jbHVkZSA8YXNtL2FyY2gvYnl0ZW9yZGVyLmg+CisKKy8qIGRlZmluZXMgYXJlIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBvdGhlciBmaWxlcyBkZXRlY3QgdGhlIHByZXNlbmNlCisgKiBvZiBhIGRlZmluZWQgX19hcmNoX3N3YWIzMiwgbm90IGFuIGlubGluZQorICovCisKKyNkZWZpbmUgX19hcmNoX19zd2FiMzIoeCkgX19fYXJjaF9fc3dhYjMyKHgpCisjZGVmaW5lIF9fYXJjaF9fc3dhYjE2KHgpIF9fX2FyY2hfX3N3YWIxNih4KQorCisjaWYgIWRlZmluZWQoX19TVFJJQ1RfQU5TSV9fKSB8fCBkZWZpbmVkKF9fS0VSTkVMX18pCisjICBkZWZpbmUgX19CWVRFT1JERVJfSEFTX1U2NF9fCisjICBkZWZpbmUgX19TV0FCXzY0X1RIUlVfMzJfXworI2VuZGlmCisKKyNlbmRpZiAvKiBfX0dOVUNfXyAqLworCisjaW5jbHVkZSA8bGludXgvYnl0ZW9yZGVyL2xpdHRsZV9lbmRpYW4uaD4KKworI2VuZGlmCisKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy9jYWNoZS5oIGIvaW5jbHVkZS9hc20tY3Jpcy9jYWNoZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2YTNiMjYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL2NhY2hlLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9BU01fQ0FDSEVfSAorI2RlZmluZSBfQVNNX0NBQ0hFX0gKKworI2luY2x1ZGUgPGFzbS9hcmNoL2NhY2hlLmg+CisKKyNlbmRpZiAvKiBfQVNNX0NBQ0hFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvY2FjaGVmbHVzaC5oIGIvaW5jbHVkZS9hc20tY3Jpcy9jYWNoZWZsdXNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJjYzcxZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvY2FjaGVmbHVzaC5oCkBAIC0wLDAgKzEsMzEgQEAKKyNpZm5kZWYgX0NSSVNfQ0FDSEVGTFVTSF9ICisjZGVmaW5lIF9DUklTX0NBQ0hFRkxVU0hfSAorCisvKiBLZWVwIGluY2x1ZGVzIHRoZSBzYW1lIGFjcm9zcyBhcmNoZXMuICAqLworI2luY2x1ZGUgPGxpbnV4L21tLmg+CisKKy8qIFRoZSBjYWNoZSBkb2Vzbid0IG5lZWQgdG8gYmUgZmx1c2hlZCB3aGVuIFRMQiBlbnRyaWVzIGNoYW5nZSBiZWNhdXNlIAorICogdGhlIGNhY2hlIGlzIG1hcHBlZCB0byBwaHlzaWNhbCBtZW1vcnksIG5vdCB2aXJ0dWFsIG1lbW9yeQorICovCisjZGVmaW5lIGZsdXNoX2NhY2hlX2FsbCgpCQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9jYWNoZV9tbShtbSkJCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2NhY2hlX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9jYWNoZV9wYWdlKHZtYSwgdm1hZGRyLCBwZm4pCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSkJCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2RjYWNoZV9tbWFwX2xvY2sobWFwcGluZykJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfZGNhY2hlX21tYXBfdW5sb2NrKG1hcHBpbmcpCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfaWNhY2hlX3JhbmdlKHN0YXJ0LCBlbmQpCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2ljYWNoZV9wYWdlKHZtYSxwZykJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfaWNhY2hlX3VzZXJfcmFuZ2Uodm1hLHBnLGFkcixsZW4pCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfdm1hcChzdGFydCwgZW5kKQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9jYWNoZV92dW5tYXAoc3RhcnQsIGVuZCkJCWRvIHsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBjb3B5X3RvX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIHZhZGRyLCBkc3QsIHNyYywgbGVuKSBcCisJbWVtY3B5KGRzdCwgc3JjLCBsZW4pCisjZGVmaW5lIGNvcHlfZnJvbV91c2VyX3BhZ2Uodm1hLCBwYWdlLCB2YWRkciwgZHN0LCBzcmMsIGxlbikgXAorCW1lbWNweShkc3QsIHNyYywgbGVuKQorCit2b2lkIGdsb2JhbF9mbHVzaF90bGIodm9pZCk7IAoraW50IGNoYW5nZV9wYWdlX2F0dHIoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBudW1wYWdlcywgcGdwcm90X3QgcHJvdCk7CisKKyNlbmRpZiAvKiBfQ1JJU19DQUNIRUZMVVNIX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvY2hlY2tzdW0uaCBiL2luY2x1ZGUvYXNtLWNyaXMvY2hlY2tzdW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWNhOGFlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9jaGVja3N1bS5oCkBAIC0wLDAgKzEsODcgQEAKKy8qIFRPRE86IGNzdW1fdGNwdWRwX21hZ2ljIGNvdWxkIGJlIHNwZWVkZWQgdXAsIGFuZCBjc3VtX2ZvbGQgYXMgd2VsbCAqLworCisjaWZuZGVmIF9DUklTX0NIRUNLU1VNX0gKKyNkZWZpbmUgX0NSSVNfQ0hFQ0tTVU1fSAorCisjaW5jbHVkZSA8YXNtL2FyY2gvY2hlY2tzdW0uaD4KKworLyoKKyAqIGNvbXB1dGVzIHRoZSBjaGVja3N1bSBvZiBhIG1lbW9yeSBibG9jayBhdCBidWZmLCBsZW5ndGggbGVuLAorICogYW5kIGFkZHMgaW4gInN1bSIgKDMyLWJpdCkKKyAqCisgKiByZXR1cm5zIGEgMzItYml0IG51bWJlciBzdWl0YWJsZSBmb3IgZmVlZGluZyBpbnRvIGl0c2VsZgorICogb3IgY3N1bV90Y3B1ZHBfbWFnaWMKKyAqCisgKiB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGggZXZlbiBsZW5ndGhzLCBleGNlcHQKKyAqIGZvciB0aGUgbGFzdCBmcmFnbWVudCwgd2hpY2ggbWF5IGJlIG9kZAorICoKKyAqIGl0J3MgYmVzdCB0byBoYXZlIGJ1ZmYgYWxpZ25lZCBvbiBhIDMyLWJpdCBib3VuZGFyeQorICovCit1bnNpZ25lZCBpbnQgY3N1bV9wYXJ0aWFsKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiBidWZmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgc3VtKTsKKworLyoKKyAqIHRoZSBzYW1lIGFzIGNzdW1fcGFydGlhbCwgYnV0IGNvcGllcyBmcm9tIHNyYyB3aGlsZSBpdAorICogY2hlY2tzdW1zCisgKgorICogaGVyZSBldmVuIG1vcmUgaW1wb3J0YW50IHRvIGFsaWduIHNyYyBhbmQgZHN0IG9uIGEgMzItYml0IChvciBldmVuCisgKiBiZXR0ZXIgNjQtYml0KSBib3VuZGFyeQorICovCisKK3Vuc2lnbmVkIGludCBjc3VtX3BhcnRpYWxfY29weV9ub2NoZWNrKGNvbnN0IGNoYXIgKnNyYywgY2hhciAqZHN0LAorCQkJCSAgICAgICBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgc3VtKTsKKworLyoKKyAqCUZvbGQgYSBwYXJ0aWFsIGNoZWNrc3VtIGludG8gYSB3b3JkCisgKi8KKworZXh0ZXJuIGlubGluZSB1bnNpZ25lZCBpbnQgY3N1bV9mb2xkKHVuc2lnbmVkIGludCBzdW0pCit7CisJLyogdGhlIHdoaWxlIGxvb3AgaXMgdW5uZWNlc3NhcnkgcmVhbGx5LCBpdCdzIGFsd2F5cyBlbm91Z2ggd2l0aCB0d28KKwkgICBpdGVyYXRpb25zICovCisJCisJd2hpbGUoc3VtID4+IDE2KQorCQlzdW0gPSAoc3VtICYgMHhmZmZmKSArIChzdW0gPj4gMTYpOyAvKiBhZGQgaW4gZW5kLWFyb3VuZCBjYXJyeSAqLworCQorCXJldHVybiB+c3VtOworfQorCitleHRlcm4gdW5zaWduZWQgaW50IGNzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlcihjb25zdCBjaGFyICpzcmMsIGNoYXIgKmRzdCwKKwkJCQkJCWludCBsZW4sIHVuc2lnbmVkIGludCBzdW0sIAorCQkJCQkJaW50ICplcnJwdHIpOworCisvKgorICoJVGhpcyBpcyBhIHZlcnNpb24gb2YgaXBfY29tcHV0ZV9jc3VtKCkgb3B0aW1pemVkIGZvciBJUCBoZWFkZXJzLAorICoJd2hpY2ggYWx3YXlzIGNoZWNrc3VtIG9uIDQgb2N0ZXQgYm91bmRhcmllcy4KKyAqCisgKi8KKworZXh0ZXJuIGlubGluZSB1bnNpZ25lZCBzaG9ydCBpcF9mYXN0X2NzdW0odW5zaWduZWQgY2hhciAqIGlwaCwKKwkJCQkJICB1bnNpZ25lZCBpbnQgaWhsKQoreworCXJldHVybiBjc3VtX2ZvbGQoY3N1bV9wYXJ0aWFsKGlwaCwgaWhsICogNCwgMCkpOworfQorIAorLyoKKyAqIGNvbXB1dGVzIHRoZSBjaGVja3N1bSBvZiB0aGUgVENQL1VEUCBwc2V1ZG8taGVhZGVyCisgKiByZXR1cm5zIGEgMTYtYml0IGNoZWNrc3VtLCBhbHJlYWR5IGNvbXBsZW1lbnRlZAorICovCisKK2V4dGVybiBpbmxpbmUgdW5zaWduZWQgc2hvcnQgaW50IGNzdW1fdGNwdWRwX21hZ2ljKHVuc2lnbmVkIGxvbmcgc2FkZHIsCisJCQkJCQkgICB1bnNpZ25lZCBsb25nIGRhZGRyLAorCQkJCQkJICAgdW5zaWduZWQgc2hvcnQgbGVuLAorCQkJCQkJICAgdW5zaWduZWQgc2hvcnQgcHJvdG8sCisJCQkJCQkgICB1bnNpZ25lZCBpbnQgc3VtKQoreworCXJldHVybiBjc3VtX2ZvbGQoY3N1bV90Y3B1ZHBfbm9mb2xkKHNhZGRyLGRhZGRyLGxlbixwcm90byxzdW0pKTsKK30KKworLyoKKyAqIHRoaXMgcm91dGluZSBpcyB1c2VkIGZvciBtaXNjZWxsYW5lb3VzIElQLWxpa2UgY2hlY2tzdW1zLCBtYWlubHkKKyAqIGluIGljbXAuYworICovCisKK2V4dGVybiBpbmxpbmUgdW5zaWduZWQgc2hvcnQgaXBfY29tcHV0ZV9jc3VtKHVuc2lnbmVkIGNoYXIgKiBidWZmLCBpbnQgbGVuKSB7CisJcmV0dXJuIGNzdW1fZm9sZCAoY3N1bV9wYXJ0aWFsKGJ1ZmYsIGxlbiwgMCkpOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvY3B1dGltZS5oIGIvaW5jbHVkZS9hc20tY3Jpcy9jcHV0aW1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ0NmE2NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvY3B1dGltZS5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfX0NSSVNfQ1BVVElNRV9ICisjZGVmaW5lIF9fQ1JJU19DUFVUSU1FX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2NwdXRpbWUuaD4KKworI2VuZGlmIC8qIF9fQ1JJU19DUFVUSU1FX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvY3VycmVudC5oIGIvaW5jbHVkZS9hc20tY3Jpcy9jdXJyZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNlNjljOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvY3VycmVudC5oCkBAIC0wLDAgKzEsMTUgQEAKKyNpZm5kZWYgX0NSSVNfQ1VSUkVOVF9ICisjZGVmaW5lIF9DUklTX0NVUlJFTlRfSAorCisjaW5jbHVkZSA8bGludXgvdGhyZWFkX2luZm8uaD4KKworc3RydWN0IHRhc2tfc3RydWN0OworCitleHRlcm4gaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqIGdldF9jdXJyZW50KHZvaWQpCit7CisgICAgICAgIHJldHVybiBjdXJyZW50X3RocmVhZF9pbmZvKCktPnRhc2s7Cit9CisgCisjZGVmaW5lIGN1cnJlbnQgZ2V0X2N1cnJlbnQoKQorCisjZW5kaWYgLyogIShfQ1JJU19DVVJSRU5UX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1jcmlzL2RlbGF5LmggYi9pbmNsdWRlL2FzbS1jcmlzL2RlbGF5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZjNDFhYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvZGVsYXkuaApAQCAtMCwwICsxLDI0IEBACisjaWZuZGVmIF9DUklTX0RFTEFZX0gKKyNkZWZpbmUgX0NSSVNfREVMQVlfSAorCisvKgorICogQ29weXJpZ2h0IChDKSAxOTk4LTIwMDIgQXhpcyBDb21tdW5pY2F0aW9ucyBBQgorICoKKyAqIERlbGF5IHJvdXRpbmVzLCB1c2luZyBhIHByZS1jb21wdXRlZCAibG9vcHNfcGVyX3NlY29uZCIgdmFsdWUuCisgKi8KKworI2luY2x1ZGUgPGFzbS9hcmNoL2RlbGF5Lmg+CisKKy8qIFVzZSBvbmx5IGZvciB2ZXJ5IHNtYWxsIGRlbGF5cyAoIDwgMSBtc2VjKS4gICovCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIGxvb3BzX3Blcl91c2VjOyAvKiBhcmNoL2NyaXMvbW0vaW5pdC5jICovCisKK2V4dGVybiBfX2lubGluZV9fIHZvaWQgdWRlbGF5KHVuc2lnbmVkIGxvbmcgdXNlY3MpCit7CisJX19kZWxheSh1c2VjcyAqIGxvb3BzX3Blcl91c2VjKTsKK30KKworI2VuZGlmIC8qIGRlZmluZWQoX0NSSVNfREVMQVlfSCkgKi8KKworCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvZGl2NjQuaCBiL2luY2x1ZGUvYXNtLWNyaXMvZGl2NjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2Q5NzhjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9kaXY2NC5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9kaXY2NC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy9kbWEtbWFwcGluZy5oIGIvaW5jbHVkZS9hc20tY3Jpcy9kbWEtbWFwcGluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkNzcwZjYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL2RtYS1tYXBwaW5nLmgKQEAgLTAsMCArMSwxMjUgQEAKKyNpZm5kZWYgX0FTTV9DUklTX0RNQV9NQVBQSU5HX0gKKyNkZWZpbmUgX0FTTV9DUklTX0RNQV9NQVBQSU5HX0gKKworI2luY2x1ZGUgInNjYXR0ZXJsaXN0LmgiCisKK3N0YXRpYyBpbmxpbmUgaW50CitkbWFfc3VwcG9ydGVkKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IG1hc2spCit7CisJQlVHKCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitkbWFfc2V0X21hc2soc3RydWN0IGRldmljZSAqZGV2LCB1NjQgZG1hX21hc2spCit7CisJQlVHKCk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqCitkbWFfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwKKwkJICAgaW50IGZsYWcpCit7CisJQlVHKCk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZG1hX2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgdm9pZCAqY3B1X2FkZHIsCisJCSAgICBkbWFfYWRkcl90IGRtYV9oYW5kbGUpCit7CisJQlVHKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdAorZG1hX21hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkciwgc2l6ZV90IHNpemUsCisJICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlCVUcoKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitkbWFfdW5tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkciwgc2l6ZV90IHNpemUsCisJCSBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJQlVHKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdAorZG1hX21hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsCisJICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsCisJICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJQlVHKCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZG1hX3VubWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyZXNzLCBzaXplX3Qgc2l6ZSwKKwkgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCUJVRygpOworfQorCitzdGF0aWMgaW5saW5lIGludAorZG1hX21hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZW50cywKKwkgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJQlVHKCk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZG1hX3VubWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5od2VudHJpZXMsCisJICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJQlVHKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZG1hX3N5bmNfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCBzaXplX3Qgc2l6ZSwKKwkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCUJVRygpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2RtYV9zeW5jX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbGVtcywKKwkgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCUJVRygpOworfQorCisvKiBOb3cgZm9yIHRoZSBBUEkgZXh0ZW5zaW9ucyBvdmVyIHRoZSBwY2lfIG9uZSAqLworCisjZGVmaW5lIGRtYV9hbGxvY19ub25jb2hlcmVudChkLCBzLCBoLCBmKSBkbWFfYWxsb2NfY29oZXJlbnQoZCwgcywgaCwgZikKKyNkZWZpbmUgZG1hX2ZyZWVfbm9uY29oZXJlbnQoZCwgcywgdiwgaCkgZG1hX2ZyZWVfY29oZXJlbnQoZCwgcywgdiwgaCkKKyNkZWZpbmUgZG1hX2lzX2NvbnNpc3RlbnQoZCkJKDEpCisKK3N0YXRpYyBpbmxpbmUgaW50CitkbWFfZ2V0X2NhY2hlX2FsaWdubWVudCh2b2lkKQoreworCS8qIG5vIGVhc3kgd2F5IHRvIGdldCBjYWNoZSBzaXplIG9uIGFsbCBwcm9jZXNzb3JzLCBzbyByZXR1cm4KKwkgKiB0aGUgbWF4aW11bSBwb3NzaWJsZSwgdG8gYmUgc2FmZSAqLworCXJldHVybiAoMSA8PCBMMV9DQUNIRV9TSElGVF9NQVgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2RtYV9zeW5jX3NpbmdsZV9yYW5nZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKKwkJICAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLAorCQkgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJQlVHKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZG1hX2NhY2hlX3N5bmModm9pZCAqdmFkZHIsIHNpemVfdCBzaXplLAorCSAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJQlVHKCk7Cit9CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1jcmlzL2RtYS5oIGIvaW5jbHVkZS9hc20tY3Jpcy9kbWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjI5ZmFjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9kbWEuaApAQCAtMCwwICsxLDEzIEBACisvKiAkSWQ6IGRtYS5oLHYgMS4yIDIwMDEvMDUvMDkgMTI6MTc6NDIgam9oYW5hIEV4cCAkICovCisKKyNpZm5kZWYgX0FTTV9ETUFfSAorI2RlZmluZSBfQVNNX0RNQV9ICisKKyNpbmNsdWRlIDxhc20vYXJjaC9kbWEuaD4KKworLyogaXQncyB1c2VsZXNzIG9uIHRoZSBFdHJheCwgYnV0IHVuZm9ydHVuYXRlbHkgbmVlZGVkIGJ5IHRoZSBuZXcKKyAgIGJvb3RtZW0gYWxsb2NhdG9yIChidXQgdGhpcyBzaG91bGQgZG8gaXQgZm9yIHRoaXMpICovCisKKyNkZWZpbmUgTUFYX0RNQV9BRERSRVNTIFBBR0VfT0ZGU0VUCisKKyNlbmRpZiAvKiBfQVNNX0RNQV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1jcmlzL2VsZi5oIGIvaW5jbHVkZS9hc20tY3Jpcy9lbGYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzdmZDVjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9lbGYuaApAQCAtMCwwICsxLDYxIEBACisjaWZuZGVmIF9fQVNNQ1JJU19FTEZfSAorI2RlZmluZSBfX0FTTUNSSVNfRUxGX0gKKworLyoKKyAqIEVMRiByZWdpc3RlciBkZWZpbml0aW9ucy4uCisgKi8KKworI2luY2x1ZGUgPGFzbS9hcmNoL2VsZi5oPgorI2luY2x1ZGUgPGFzbS91c2VyLmg+CisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBlbGZfZ3JlZ190OworCisvKiBOb3RlIHRoYXQgTkdSRUcgaXMgZGVmaW5lZCB0byBFTEZfTkdSRUcgaW4gaW5jbHVkZS9saW51eC9lbGZjb3JlLmgsIGFuZCBpcworICAgdGh1cyBleHBvc2VkIHRvIHVzZXItc3BhY2UuICovCisjZGVmaW5lIEVMRl9OR1JFRyAoc2l6ZW9mIChzdHJ1Y3QgdXNlcl9yZWdzX3N0cnVjdCkgLyBzaXplb2YoZWxmX2dyZWdfdCkpCit0eXBlZGVmIGVsZl9ncmVnX3QgZWxmX2dyZWdzZXRfdFtFTEZfTkdSRUddOworCisvKiBBIHBsYWNlaG9sZGVyOyBDUklTIGRvZXMgbm90IGhhdmUgYW55IGZwIHJlZ3MuICAqLwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGVsZl9mcHJlZ3NldF90OworCisvKgorICogVGhpcyBpcyB1c2VkIHRvIGVuc3VyZSB3ZSBkb24ndCBsb2FkIHNvbWV0aGluZyBmb3IgdGhlIHdyb25nIGFyY2hpdGVjdHVyZS4KKyAqLworI2RlZmluZSBlbGZfY2hlY2tfYXJjaCh4KSAoICh4KS0+ZV9tYWNoaW5lID09IEVNX0NSSVMgKQorCisvKgorICogVGhlc2UgYXJlIHVzZWQgdG8gc2V0IHBhcmFtZXRlcnMgaW4gdGhlIGNvcmUgZHVtcHMuCisgKi8KKyNkZWZpbmUgRUxGX0NMQVNTCUVMRkNMQVNTMzIKKyNkZWZpbmUgRUxGX0RBVEEJRUxGREFUQTJMU0I7CisjZGVmaW5lIEVMRl9BUkNICUVNX0NSSVMKKworI2RlZmluZSBVU0VfRUxGX0NPUkVfRFVNUAorCisjZGVmaW5lIEVMRl9FWEVDX1BBR0VTSVpFCTgxOTIKKworLyogVGhpcyBpcyB0aGUgbG9jYXRpb24gdGhhdCBhbiBFVF9EWU4gcHJvZ3JhbSBpcyBsb2FkZWQgaWYgZXhlYydlZC4gIFR5cGljYWwKKyAgIHVzZSBvZiB0aGlzIGlzIHRvIGludm9rZSAiLi9sZC5zbyBzb21lcHJvZyIgdG8gdGVzdCBvdXQgYSBuZXcgdmVyc2lvbiBvZgorICAgdGhlIGxvYWRlci4gIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgaXQgaXMgb3V0IG9mIHRoZSB3YXkgb2YgdGhlIHByb2dyYW0KKyAgIHRoYXQgaXQgd2lsbCAiZXhlYyIsIGFuZCB0aGF0IHRoZXJlIGlzIHN1ZmZpY2llbnQgcm9vbSBmb3IgdGhlIGJyay4gICovCisKKyNkZWZpbmUgRUxGX0VUX0RZTl9CQVNFICAgICAgICAgKDIgKiBUQVNLX1NJWkUgLyAzKQorCisvKiBUaGlzIHlpZWxkcyBhIG1hc2sgdGhhdCB1c2VyIHByb2dyYW1zIGNhbiB1c2UgdG8gZmlndXJlIG91dCB3aGF0CisgICBpbnN0cnVjdGlvbiBzZXQgdGhpcyBDUFUgc3VwcG9ydHMuICBUaGlzIGNvdWxkIGJlIGRvbmUgaW4gdXNlciBzcGFjZSwKKyAgIGJ1dCBpdCdzIG5vdCBlYXN5LCBhbmQgd2UndmUgYWxyZWFkeSBkb25lIGl0IGhlcmUuICAqLworCisjZGVmaW5lIEVMRl9IV0NBUCAgICAgICAoMCkKKworLyogVGhpcyB5aWVsZHMgYSBzdHJpbmcgdGhhdCBsZC5zbyB3aWxsIHVzZSB0byBsb2FkIGltcGxlbWVudGF0aW9uCisgICBzcGVjaWZpYyBsaWJyYXJpZXMgZm9yIG9wdGltaXphdGlvbi4gIFRoaXMgaXMgbW9yZSBzcGVjaWZpYyBpbgorICAgaW50ZW50IHRoYW4gcG9raW5nIGF0IHVuYW1lIG9yIC9wcm9jL2NwdWluZm8uCisqLworCisjZGVmaW5lIEVMRl9QTEFURk9STSAgKE5VTEwpCisKKyNpZmRlZiBfX0tFUk5FTF9fCisjZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCwgaWJjczIpIHNldF9wZXJzb25hbGl0eSgoaWJjczIpP1BFUl9TVlI0OlBFUl9MSU5VWCkKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvZXJybm8uaCBiL2luY2x1ZGUvYXNtLWNyaXMvZXJybm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmY1ZWI1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9lcnJuby5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfQ1JJU19FUlJOT19ICisjZGVmaW5lIF9DUklTX0VSUk5PX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2Vycm5vLmg+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy9lc2hsaWJsZC5oIGIvaW5jbHVkZS9hc20tY3Jpcy9lc2hsaWJsZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiNTc3Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL2VzaGxpYmxkLmgKQEAgLTAsMCArMSwxMTQgQEAKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIQorKiEgRklMRSBOQU1FICA6IGVzaGxpYmxkLmgKKyohCisqISBERVNDUklQVElPTjogUHJvdG90eXBlcyBmb3IgZXhwb3J0ZWQgc2hhcmVkIGxpYnJhcnkgZnVuY3Rpb25zCisqIQorKiEgRlVOQ1RJT05TICA6IHBlcmZvcm1fY3Jpc19hb3V0X3JlbG9jYXRpb25zLCBzaGxpYm1vZF9mb3JrLCBzaGxpYm1vZF9leGl0CisqISAoRVhQT1JURUQpCisqIQorKiEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyohCisqISAoQykgQ29weXJpZ2h0IDE5OTgsIDE5OTkgQXhpcyBDb21tdW5pY2F0aW9ucyBBQiwgTFVORCwgU1dFREVOCisqIQorKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICRJZDogZXNobGlibGQuaCx2IDEuMiAyMDAxLzAyLzIzIDEzOjQ3OjMzIGJqb3JudyBFeHAgJCAqLworCisjaWZuZGVmIF9jcmlzX3JlbG9jYXRlX2gKKyNkZWZpbmUgX2NyaXNfcmVsb2NhdGVfaAorCisvKiBQbGVhc2Ugbm90ZSB0aGF0IHRoaXMgZmlsZSBpcyBhbHNvIGNvbXBpbGVkIGludG8gdGhlIHhzaW0gc2ltdWxhdG9yLgorICAgVHJ5IHRvIGF2b2lkIGJyZWFraW5nIGl0cyBkb3VibGUgdXNlIChvbmx5IHdvcmtzIG9uIGEgbGl0dGxlLWVuZGlhbgorICAgMzItYml0IG1hY2hpbmUgc3VjaCBhcyB0aGUgaTM4NiBhbnl3YXkpLgorCisgICBVc2UgX19LRVJORUxfXyB3aGVuIHlvdSdyZSBhYm91dCB0byB1c2Uga2VybmVsIGZ1bmN0aW9ucywKKyAgICAgICAod2hpY2ggeW91IHNob3VsZCBub3QgZG8gaGVyZSBhbnl3YXksIHNpbmNlIHRoaXMgZmlsZSBpcworICAgICAgIHVzZWQgYnkgZ2xpYmMpLgorICAgVXNlIGRlZmluZWQoX19LRVJORUxfXykgfHwgZGVmaW5lZChfX2VsaW51eF9fKSB3aGVuIGRvaW5nCisgICAgICAgdGhpbmdzIHRoYXQgb25seSBtYWtlcyBzZW5zZSBvbiBhbiBlbGludXggc3lzdGVtLgorICAgVXNlIF9fQ1JJU19fIHdoZW4geW91J3JlIGFib3V0IHRvIGRvIChyZWFsbHkpIENSSVMtc3BlY2lmaWMgY29kZS4KKyovCisKKy8qIFdlIGhhdmUgZGVwZW5kZW5jaWVzIGFsbCBvdmVyIHRoZSBwbGFjZSBmb3IgdGhlIGhvc3Qgc3lzdGVtCisgICBmb3IgeHNpbSBiZWluZyBhIGxpbnV4IHN5c3RlbSwgc28gbGV0J3Mgbm90IHByZXRlbmQgYW55dGhpbmcKKyAgIGVsc2Ugd2l0aCAjaWZkZWY6cyBoZXJlIHVudGlsIGZpeGVkLiAgKi8KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9saW1pdHMuaD4KKworLyogTWF5YmUgZG8gc2FuaXR5IGNoZWNraW5nIGlmIGZpbGUgaW5wdXQuICovCisjdW5kZWYgU0FOSVRZQ0hFQ0tfUkVMT0MKKworLyogTWF5YmUgb3V0cHV0IGRlYnVnIG1lc3NhZ2VzLiAqLworI3VuZGVmIFJFTE9DX0RFQlVHCisKKy8qIE1heWJlIHdlIHdhbnQgdG8gc2hhcmUgY29yZSBhcyB3ZWxsIGFzIGRpc2sgc3BhY2UuCisgICBNYWlubHkgZGVwZW5kcyBvbiB0aGUgY29uZmlnIG1hY3JvIENPTkZJR19TSEFSRV9TSExJQl9DT1JFLCBidXQgaXQgaXMKKyAgIGFzc3VtZWQgdGhhdCB3ZSB3YW50IHRvIHNoYXJlIGNvZGUgd2hlbiBkZWJ1Z2dpbmcgKGV4cG9zZXMgbW9yZQorICAgdHJvdWJsZSkuICovCisjaWZuZGVmIFNIQVJFX0xJQl9DT1JFCisjIGlmIChkZWZpbmVkKF9fS0VSTkVMX18pIHx8ICFkZWZpbmVkKFJFTE9DX0RFQlVHKSkgXAorICAgICAmJiAhZGVmaW5lZChDT05GSUdfU0hBUkVfU0hMSUJfQ09SRSkKKyMgIGRlZmluZSBTSEFSRV9MSUJfQ09SRSAwCisjIGVsc2UKKyMgIGRlZmluZSBTSEFSRV9MSUJfQ09SRSAxCisjIGVuZGlmIC8qIF9fS0VSTkVMX18gZXRjICovCisjZW5kaWYgLyogU0hBUkVfTElCX0NPUkUgKi8KKworCisvKiBNYWluIGV4cG9ydGVkIGZ1bmN0aW9uOyBzdXBwb3NlZCB0byBiZSBjYWxsZWQgd2hlbiB0aGUgcHJvZ3JhbSBhLm91dAorICAgaGFzIGJlZW4gcmVhZCBpbi4gKi8KK2V4dGVybiBpbnQKK3BlcmZvcm1fY3Jpc19hb3V0X3JlbG9jYXRpb25zKHVuc2lnbmVkIGxvbmcgdGV4dCwgdW5zaWduZWQgbG9uZyB0bGVuZ3RoLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBkYXRhLCB1bnNpZ25lZCBsb25nIGRsZW5ndGgsCisJCQkgICAgICB1bnNpZ25lZCBsb25nIGJhZGRyLCB1bnNpZ25lZCBsb25nIGJsZW5ndGgsCisKKwkJCSAgICAgIC8qIFRoZXNlIG1heSBiZSB6ZXJvIHdoZW4gdGhlcmUncyAicGVyZmVjdCIKKwkJCQkgcG9zaXRpb24taW5kZXBlbmRlbnQgY29kZS4gKi8KKwkJCSAgICAgIHVuc2lnbmVkIGNoYXIgKnRyZWwsIHVuc2lnbmVkIGxvbmcgdHNyZWwsCisJCQkgICAgICB1bnNpZ25lZCBsb25nIGRzcmVsLAorCisJCQkgICAgICAvKiBUaGVzZSB3aWxsIGJlIHplcm8gYXQgYSBmaXJzdCB0cnksIHRvIHNlZQorCQkJCSBpZiBjb2RlIGlzIHN0YXRpY2FsbHkgbGlua2VkLiAgRWxzZSBhCisJCQkJIHNlY29uZCB0cnksIHdpdGggdGhlIHN5bWJvbCB0YWJsZSBhbmQKKwkJCQkgc3RyaW5nIHRhYmxlIG5vbnplcm8gc2hvdWxkIGJlIGRvbmUuICovCisJCQkgICAgICB1bnNpZ25lZCBjaGFyICpzeW1ib2xzLCB1bnNpZ25lZCBsb25nIHN5bWxlbmd0aCwKKwkJCSAgICAgIHVuc2lnbmVkIGNoYXIgKnN0cmluZ3MsIHVuc2lnbmVkIGxvbmcgc3RyaW5nbGVuZ3RoLAorCisJCQkgICAgICAvKiBUaGVzZSB3aWxsIG9ubHkgYmUgdXNlZCB3aGVuIHN5bWJvbCB0YWJsZQorCQkJICAgICAgIGluZm9ybWF0aW9uIGlzIHByZXNlbnQuICovCisJCQkgICAgICBjaGFyICoqZW52LCBpbnQgZW52YywKKwkJCSAgICAgIGludCBldWlkLCBpbnQgaXNfc3VpZCk7CisKKworI2lmZGVmIFJFTE9DX0RFQlVHCisvKiBUYXNrLXNwZWNpZmljIGRlYnVnIHN0dWZmLiAqLworc3RydWN0IHRhc2tfcmVsb2NfZGVidWcgeworCXN0cnVjdCBtZW1kZWJ1ZyAqYWxsb2NsYXN0OworCXVuc2lnbmVkIGxvbmcgYWxsb2NfdG90YWw7CisJdW5zaWduZWQgbG9uZyBleHBvcnRfdG90YWw7Cit9OworI2VuZGlmIC8qIFJFTE9DX0RFQlVHICovCisKKyNpZiBTSEFSRV9MSUJfQ09SRQorCisvKiBXaGVuIGNvZGUgKGFuZCBzb21lIHZlcnkgc3BlY2lmaWMgZGF0YSkgaXMgc2hhcmVkIGFuZCBub3QganVzdAorICAgZHluYW1pY2FsbHkgbGlua2VkLCB3ZSBuZWVkIHRvIGV4cG9ydCBob29rcyBmb3IgZXhlYyBiZWdpbm5pbmcgYW5kCisgICBlbmQuICovCisKK3N0cnVjdCBzaGxpYmRlcDsKKworZXh0ZXJuIHZvaWQKK3NobGlibW9kX2V4aXQoc3RydWN0IHNobGliZGVwICoqZGVwcyk7CisKKy8qIFJldHVybnMgMCBpZiBmYWlsdXJlLCBub256ZXJvIGZvciBvay4gKi8KK2V4dGVybiBpbnQKK3NobGlibW9kX2Zvcmsoc3RydWN0IHNobGliZGVwICoqZGVwcyk7CisKKyNlbHNlICAvKiAhIFNIQVJFX0xJQl9DT1JFICovCisjIGRlZmluZSBzaGxpYm1vZF9leGl0KHgpCisjIGRlZmluZSBzaGxpYm1vZF9mb3JrKHgpIDEKKyNlbmRpZiAvKiAhIFNIQVJFX0xJQl9DT1JFICovCisKKyNlbmRpZiBfY3Jpc19yZWxvY2F0ZV9oCisvKioqKioqKioqKioqKioqKioqKioqKiBFTkQgT0YgRklMRSBlc2hsaWJsZC5oICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1jcmlzL2V0aGVybmV0LmggYi9pbmNsdWRlL2FzbS1jcmlzL2V0aGVybmV0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBkYTU4YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvZXRoZXJuZXQuaApAQCAtMCwwICsxLDE4IEBACisvKiAgCisgKiBpb2N0bCBkZWZpbmVzIGZvciBldGhlcm5ldCBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEgQXhpcyBDb21tdW5pY2F0aW9ucyBBQgorICogCisgKiBBdXRob3I6IE1pa2FlbCBTdGFydmlrIAorICoKKyAqLworCisjaWZuZGVmIF9DUklTX0VUSEVSTkVUX0gKKyNkZWZpbmUgX0NSSVNfRVRIRVJORVRfSAorI2RlZmluZSBTRVRfRVRIX1NQRUVEX0FVVE8gICAgICBTSU9DREVWUFJJVkFURSAgICAgICAgICAvKiBBdXRvIG5lZyBzcGVlZCAqLworI2RlZmluZSBTRVRfRVRIX1NQRUVEXzEwICAgICAgICBTSU9DREVWUFJJVkFURSsxICAgICAgICAvKiAxMCBNYnBzICovCisjZGVmaW5lIFNFVF9FVEhfU1BFRURfMTAwICAgICAgIFNJT0NERVZQUklWQVRFKzIgICAgICAgIC8qIDEwMCBNYnBzLiAqLworI2RlZmluZSBTRVRfRVRIX0RVUExFWF9BVVRPICAgICBTSU9DREVWUFJJVkFURSszICAgICAgICAvKiBBdXRvIG5lZyBkdXBsZXggKi8KKyNkZWZpbmUgU0VUX0VUSF9EVVBMRVhfSEFMRiAgICAgU0lPQ0RFVlBSSVZBVEUrNCAgICAgICAgLyogRnVsbCBkdXBsZXggKi8KKyNkZWZpbmUgU0VUX0VUSF9EVVBMRVhfRlVMTCAgICAgU0lPQ0RFVlBSSVZBVEUrNSAgICAgICAgLyogSGFsZiBkdXBsZXggKi8KKyNlbmRpZiAvKiBfQ1JJU19FVEhFUk5FVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1jcmlzL2V0cmF4Z3Bpby5oIGIvaW5jbHVkZS9hc20tY3Jpcy9ldHJheGdwaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjA0YWY5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9ldHJheGdwaW8uaApAQCAtMCwwICsxLDEwNCBAQAorLyogJElkOiBldHJheGdwaW8uaCx2IDEuOCAyMDAyLzA2LzE3IDE1OjUzOjA3IGpvaGFuYSBFeHAgJCAqLworLyoKKyAqIFRoZSBmb2xsb3dpbmcgZGV2aWNlcyBhcmUgYWNjZXNzYWJsZSB1c2luZyB0aGlzIGRyaXZlciB1c2luZworICogR1BJT19NQUpPUiAoMTIwKSBhbmQgYSBjb3VwbGUgb2YgbWlub3IgbnVtYmVyczoKKyAqIEZvciBFVFJBWCAxMDBMWCAoQVJDSF9WMTApOgorICogL2Rldi9ncGlvYSAgbWlub3IgMCwgOCBiaXQgR1BJTywgZWFjaCBiaXQgY2FuIGNoYW5nZSBkaXJlY3Rpb24KKyAqIC9kZXYvZ3Bpb2IgIG1pbm9yIDEsIDggYml0IEdQSU8sIGVhY2ggYml0IGNhbiBjaGFuZ2UgZGlyZWN0aW9uCisgKiAvZGV2L2xlZHMgICBtaW5vciAyLCBBY2Nlc3MgdG8gbGVkcyBkZXBlbmRpbmcgb24ga2VybmVsY29uZmlnCisgKiAvZGV2L2dwaW9nICBtaW5vciAzCisgICAgICAgICBnMGRpciwgZzhfMTVkaXIsIGcxNl8yM2RpciwgZzI0IGRpciBjb25maWd1cmFibGUgaW4gUl9HRU5fQ09ORklHCisgICAgICAgICBnMS1nNyBhbmQgZzI1LWczMSBpcyBib3RoIGlucHV0IGFuZCBvdXRwdXRzIGJ1dCBvbiBkaWZmZXJlbnQgcGlucworICAgICAgICAgQWxzbyBub3RlIHRoYXQgc29tZSBiaXRzIGNoYW5nZSBwaW5zIGRlcGVuZGluZyBvbiB3aGF0IGludGVyZmFjZXMgCisgICAgICAgICBhcmUgZW5hYmxlZC4KKyAqCisgKgorICogRm9yIEVUUkFYIDIwMCAoQVJDSF9WMzIpOgorICogL2Rldi9ncGlvYSAgbWlub3IgMCwgIDggYml0IEdQSU8sIGVhY2ggYml0IGNhbiBjaGFuZ2UgZGlyZWN0aW9uCisgKiAvZGV2L2dwaW9iICBtaW5vciAxLCAxOCBiaXQgR1BJTywgZWFjaCBiaXQgY2FuIGNoYW5nZSBkaXJlY3Rpb24KKyAqIC9kZXYvZ3Bpb2MgIG1pbm9yIDIsIDE4IGJpdCBHUElPLCBlYWNoIGJpdCBjYW4gY2hhbmdlIGRpcmVjdGlvbgorICogL2Rldi9ncGlvZCAgbWlub3IgMywgMTggYml0IEdQSU8sIGVhY2ggYml0IGNhbiBjaGFuZ2UgZGlyZWN0aW9uCisgKiAvZGV2L2dwaW9lICBtaW5vciA0LCAxOCBiaXQgR1BJTywgZWFjaCBiaXQgY2FuIGNoYW5nZSBkaXJlY3Rpb24KKyAqIC9kZXYvbGVkcyAgIG1pbm9yIDUsIEFjY2VzcyB0byBsZWRzIGRlcGVuZGluZyBvbiBrZXJuZWxjb25maWcKKyAqCisgKi8KKyNpZm5kZWYgX0FTTV9FVFJBWEdQSU9fSAorI2RlZmluZSBfQVNNX0VUUkFYR1BJT19ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKy8qIGV0cmF4Z3BpbyBfSU9DX1RZUEUsIGJpdHMgOCB0byAxNSBpbiBpb2N0bCBjbWQgKi8KKyNpZmRlZiBDT05GSUdfRVRSQVhfQVJDSF9WMTAKKyNkZWZpbmUgRVRSQVhHUElPX0lPQ1RZUEUgNDMKKyNkZWZpbmUgR1BJT19NSU5PUl9BIDAKKyNkZWZpbmUgR1BJT19NSU5PUl9CIDEKKyNkZWZpbmUgR1BJT19NSU5PUl9MRURTIDIKKyNkZWZpbmUgR1BJT19NSU5PUl9HIDMKKyNkZWZpbmUgR1BJT19NSU5PUl9MQVNUIDMKKyNlbmRpZgorI2lmZGVmIENPTkZJR19FVFJBWF9BUkNIX1YzMgorI2RlZmluZSBFVFJBWEdQSU9fSU9DVFlQRSA0MworI2RlZmluZSBHUElPX01JTk9SX0EgMAorI2RlZmluZSBHUElPX01JTk9SX0IgMQorI2RlZmluZSBHUElPX01JTk9SX0MgMgorI2RlZmluZSBHUElPX01JTk9SX0QgMworI2RlZmluZSBHUElPX01JTk9SX0UgNAorI2RlZmluZSBHUElPX01JTk9SX0xFRFMgNQorI2RlZmluZSBHUElPX01JTk9SX0xBU1QgNQorI2VuZGlmCisKKy8qIHN1cHBvcnRlZCBpb2N0bCBfSU9DX05SJ3MgKi8KKworI2RlZmluZSBJT19SRUFEQklUUyAgMHgxICAvKiByZWFkIGFuZCByZXR1cm4gY3VycmVudCBwb3J0IGJpdHMgKG9ic29sZXRlKSAqLworI2RlZmluZSBJT19TRVRCSVRTICAgMHgyICAvKiBzZXQgdGhlIGJpdHMgbWFya2VkIGJ5IDEgaW4gdGhlIGFyZ3VtZW50ICovCisjZGVmaW5lIElPX0NMUkJJVFMgICAweDMgIC8qIGNsZWFyIHRoZSBiaXRzIG1hcmtlZCBieSAxIGluIHRoZSBhcmd1bWVudCAqLworCisvKiB0aGUgYWxhcm0gaXMgd2FpdGVkIGZvciBieSBzZWxlY3QoKSAqLworCisjZGVmaW5lIElPX0hJR0hBTEFSTSAweDQgIC8qIHNldCBhbGFybSBvbiBoaWdoIGZvciBiaXRzIG1hcmtlZCBieSAxICovCisjZGVmaW5lIElPX0xPV0FMQVJNICAweDUgIC8qIHNldCBhbGFybSBvbiBsb3cgZm9yIGJpdHMgbWFya2VkIGJ5IDEgKi8KKyNkZWZpbmUgSU9fQ0xSQUxBUk0gIDB4NiAgLyogY2xlYXIgYWxhcm0gZm9yIGJpdHMgbWFya2VkIGJ5IDEgKi8KKworLyogTEVEIGlvY3RsICovCisjZGVmaW5lIElPX0xFREFDVElWRV9TRVQgMHg3IC8qIHNldCBhY3RpdmUgbGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIDA9b2ZmLCAxPWdyZWVuLCAyPXJlZCwgMz15ZWxsb3cgKi8KKworLyogR1BJTyBkaXJlY3Rpb24gaW9jdGwncyAqLworI2RlZmluZSBJT19SRUFERElSICAgIDB4OCAgLyogUmVhZCBkaXJlY3Rpb24gMD1pbnB1dCAxPW91dHB1dCAgKG9ic29sZXRlKSAqLworI2RlZmluZSBJT19TRVRJTlBVVCAgIDB4OSAgLyogU2V0IGRpcmVjdGlvbiBmb3IgYml0cyBzZXQsIDA9dW5jaGFuZ2VkIDE9aW5wdXQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJucyBtYXNrIHdpdGggY3VycmVudCBpbnB1dHMgKG9ic29sZXRlKSAqLworI2RlZmluZSBJT19TRVRPVVRQVVQgIDB4QSAgLyogU2V0IGRpcmVjdGlvbiBmb3IgYml0cyBzZXQsIDA9dW5jaGFuZ2VkIDE9b3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJucyBtYXNrIHdpdGggY3VycmVudCBvdXRwdXRzIChvYnNvbGV0ZSkqLworCisvKiBMRUQgaW9jdGwgZXh0ZW5kZWQgKi8KKyNkZWZpbmUgSU9fTEVEX1NFVEJJVCAweEIKKyNkZWZpbmUgSU9fTEVEX0NMUkJJVCAweEMKKworLyogU0hVVERPV04gaW9jdGwgKi8KKyNkZWZpbmUgSU9fU0hVVERPV04gICAweEQKKyNkZWZpbmUgSU9fR0VUX1BXUl9CVCAweEUKKworLyogQml0IHRvZ2dsaW5nIGluIGRyaXZlciBzZXR0aW5ncyAqLworLyogYml0IHNldCBpbiBsb3cgYnl0ZTAgaXMgQ0xLIG1hc2sgKDB4MDBGRiksIAorICAgYml0IHNldCBpbiBieXRlMSBpcyBEQVRBIG1hc2sgICAgKDB4RkYwMCkgCisgICBtc2IsIGRhdGFfbWFza1s3OjBdICwgY2xrX21hc2tbNzowXQorICovCisjZGVmaW5lIElPX0NGR19XUklURV9NT0RFIDB4RiAKKyNkZWZpbmUgSU9fQ0ZHX1dSSVRFX01PREVfVkFMVUUobXNiLCBkYXRhX21hc2ssIGNsa19tYXNrKSBcCisgICggKCgobXNiKSYxKSA8PCAxNikgfCAoKChkYXRhX21hc2spICYweEZGKSA8PCA4KSB8ICgoY2xrX21hc2spICYgMHhGRikgKQorCisvKiBUaGUgZm9sbG93aW5nIDQgaW9jdGwncyB0YWtlIGEgcG9pbnRlciBhcyBhcmd1bWVudCBhbmQgaGFuZGxlcworICogMzIgYml0IHBvcnRzIChwb3J0IEcpIHByb3Blcmx5LgorICogVGhlc2UgcmVwbGFjZXMgSU9fUkVBREJJVFMsSU9fU0VUSU5QVVQgQU5EIElPX1NFVE9VVFBVVAorICovCisjZGVmaW5lIElPX1JFQURfSU5CSVRTICAgMHgxMCAvKiAqYXJnIGlzIHJlc3VsdCBvZiByZWFkaW5nIHRoZSBpbnB1dCBwaW5zICovCisjZGVmaW5lIElPX1JFQURfT1VUQklUUyAgMHgxMSAvKiAqYXJnIGlzIHJlc3VsdCBvZiByZWFkaW5nIHRoZSBvdXRwdXQgc2hhZG93ICovCisjZGVmaW5lIElPX1NFVEdFVF9JTlBVVCAgMHgxMiAvKiBiaXRzIHNldCBpbiAqYXJnIGlzIHNldCB0byBpbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICphcmcgdXBkYXRlZCB3aXRoIGN1cnJlbnQgaW5wdXQgcGlucy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJT19TRVRHRVRfT1VUUFVUIDB4MTMgLyogYml0cyBzZXQgaW4gKmFyZyBpcyBzZXQgdG8gb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogKmFyZyB1cGRhdGVkIHdpdGggY3VycmVudCBvdXRwdXQgcGlucy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1jcmlzL2V0cmF4aTJjLmggYi9pbmNsdWRlL2FzbS1jcmlzL2V0cmF4aTJjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM2OWE3NgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvZXRyYXhpMmMuaApAQCAtMCwwICsxLDM2IEBACisvKiAkSWQ6IGV0cmF4aTJjLmgsdiAxLjEgMjAwMS8wMS8xOCAxNTo0OTo1NyBiam9ybncgRXhwICQgKi8KKworI2lmbmRlZiBfTElOVVhfRVRSQVhJMkNfSAorI2RlZmluZSBfTElOVVhfRVRSQVhJMkNfSAorCisvKiBldHJheGkyYyBfSU9DX1RZUEUsIGJpdHMgOCB0byAxNSBpbiBpb2N0bCBjbWQgKi8KKworI2RlZmluZSBFVFJBWEkyQ19JT0NUWVBFIDQ0CisKKy8qIHN1cHBvcnRlZCBpb2N0bCBfSU9DX05SJ3MgKi8KKworLyogaW4gd3JpdGUgb3BlcmF0aW9ucywgdGhlIGFyZ3VtZW50IGNvbnRhaW5zIGJvdGggaTJjCisgKiBzbGF2ZSwgcmVnaXN0ZXIgYW5kIHZhbHVlLgorICovCisKKyNkZWZpbmUgSTJDX1dSSVRFQVJHKHNsYXZlLCByZWcsIHZhbHVlKSAoKChzbGF2ZSkgPDwgMTYpIHwgKChyZWcpIDw8IDgpIHwgKHZhbHVlKSkKKyNkZWZpbmUgSTJDX1JFQURBUkcoc2xhdmUsIHJlZykgKCgoc2xhdmUpIDw8IDE2KSB8ICgocmVnKSA8PCA4KSkKKworI2RlZmluZSBJMkNfQVJHU0xBVkUoYXJnKSAoKGFyZykgPj4gMTYpCisjZGVmaW5lIEkyQ19BUkdSRUcoYXJnKSAoKChhcmcpID4+IDgpICYgMHhmZikKKyNkZWZpbmUgSTJDX0FSR1ZBTFVFKGFyZykgKChhcmcpICYgMHhmZikKKworI2RlZmluZSBJMkNfV1JJVEVSRUcgMHgxICAgLyogd3JpdGUgdG8gYW4gaTJjIHJlZ2lzdGVyICovCisjZGVmaW5lIEkyQ19SRUFEUkVHICAweDIgICAvKiByZWFkIGZyb20gYW4gaTJjIHJlZ2lzdGVyICovCisKKy8qCitFWEFNUExFIHVzYWdlOgorCisgICAgaTJjX2FyZyA9IEkyQ19XUklURUFSRyhTVEEwMTNfV1JJVEVfQUREUiwgcmVnLCB2YWwpOworICAgIGlvY3RsKGZkLCBfSU8oRVRSQVhJMkNfSU9DVFlQRSwgSTJDX1dSSVRFUkVHKSwgaTJjX2FyZyk7CisKKyAgICBpMmNfYXJnID0gSTJDX1JFQURBUkcoU1RBMDEzX1JFQURfQUREUiwgcmVnKTsKKyAgICB2YWwgPSBpb2N0bChmZCwgX0lPKEVUUkFYSTJDX0lPQ1RZUEUsIEkyQ19SRUFEUkVHKSwgaTJjX2FyZyk7CisKKyovCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvZmFzdHRpbWVyLmggYi9pbmNsdWRlL2FzbS1jcmlzL2Zhc3R0aW1lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5NTIyMDIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL2Zhc3R0aW1lci5oCkBAIC0wLDAgKzEsNDQgQEAKKy8qICRJZDogZmFzdHRpbWVyLmgsdiAxLjMgMjAwNC8wNS8xNCAxMDoxOToxOSBzdGFydmlrIEV4cCAkCisgKiBsaW51eC9pbmNsdWRlL2FzbS1jcmlzL2Zhc3R0aW1lci5oCisgKgorICogRmFzdCB0aW1lcnMgZm9yIEVUUkFYMTAwTFgKKyAqIFRoaXMgbWF5IGJlIHVzZWZ1bCBpbiBvdGhlciBPUyB0aGFuIExpbnV4IHNvIHVzZSAyIHNwYWNlIGluZGVudGF0aW9uLi4uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDIgQXhpcyBDb21tdW5pY2F0aW9ucyBBQgorICovCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPiAvKiBzdHJ1Y3QgdGltZXZhbCAqLworI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CisKKyNpZmRlZiBDT05GSUdfRVRSQVhfRkFTVF9USU1FUgorCit0eXBlZGVmIHZvaWQgZmFzdF90aW1lcl9mdW5jdGlvbl90eXBlKHVuc2lnbmVkIGxvbmcpOworCitzdHJ1Y3QgZmFzdF90aW1lcnsgLyogQ2xvc2UgdG8gdGltZXJfbGlzdCAqLworICBzdHJ1Y3QgZmFzdF90aW1lciAqbmV4dDsKKyAgc3RydWN0IGZhc3RfdGltZXIgKnByZXY7CisgIHN0cnVjdCB0aW1ldmFsIHR2X3NldDsKKyAgc3RydWN0IHRpbWV2YWwgdHZfZXhwaXJlczsKKyAgdW5zaWduZWQgbG9uZyBkZWxheV91czsKKyAgZmFzdF90aW1lcl9mdW5jdGlvbl90eXBlICpmdW5jdGlvbjsKKyAgdW5zaWduZWQgbG9uZyBkYXRhOworICBjb25zdCBjaGFyICpuYW1lOworfTsKKworZXh0ZXJuIHN0cnVjdCBmYXN0X3RpbWVyICpmYXN0X3RpbWVyX2xpc3Q7CisKK3ZvaWQgc3RhcnRfb25lX3Nob3RfdGltZXIoc3RydWN0IGZhc3RfdGltZXIgKnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZhc3RfdGltZXJfZnVuY3Rpb25fdHlwZSAqZnVuY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBkZWxheV91cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSk7CisKK2ludCBkZWxfZmFzdF90aW1lcihzdHJ1Y3QgZmFzdF90aW1lciAqIHQpOworLyogcmV0dXJuIDEgaWYgZGVsZXRlZCAqLworCisKK3ZvaWQgc2NoZWR1bGVfdXNsZWVwKHVuc2lnbmVkIGxvbmcgdXMpOworCisKK3ZvaWQgZmFzdF90aW1lcl9pbml0KHZvaWQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvZmNudGwuaCBiL2luY2x1ZGUvYXNtLWNyaXMvZmNudGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWM1NjMyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9mY250bC5oCkBAIC0wLDAgKzEsOTAgQEAKKyNpZm5kZWYgX0NSSVNfRkNOVExfSAorI2RlZmluZSBfQ1JJU19GQ05UTF9ICisKKy8qIHZlcmJhdGltIGNvcHkgb2YgaTM4NiB2ZXJzaW9uICovCisKKy8qIG9wZW4vZmNudGwgLSBPX1NZTkMgaXMgb25seSBpbXBsZW1lbnRlZCBvbiBibG9ja3MgZGV2aWNlcyBhbmQgb24gZmlsZXMKKyAgIGxvY2F0ZWQgb24gYW4gZXh0MiBmaWxlIHN5c3RlbSAqLworI2RlZmluZSBPX0FDQ01PREUJICAgMDAwMworI2RlZmluZSBPX1JET05MWQkgICAgIDAwCisjZGVmaW5lIE9fV1JPTkxZCSAgICAgMDEKKyNkZWZpbmUgT19SRFdSCQkgICAgIDAyCisjZGVmaW5lIE9fQ1JFQVQJCSAgIDAxMDAJLyogbm90IGZjbnRsICovCisjZGVmaW5lIE9fRVhDTAkJICAgMDIwMAkvKiBub3QgZmNudGwgKi8KKyNkZWZpbmUgT19OT0NUVFkJICAgMDQwMAkvKiBub3QgZmNudGwgKi8KKyNkZWZpbmUgT19UUlVOQwkJICAwMTAwMAkvKiBub3QgZmNudGwgKi8KKyNkZWZpbmUgT19BUFBFTkQJICAwMjAwMAorI2RlZmluZSBPX05PTkJMT0NLCSAgMDQwMDAKKyNkZWZpbmUgT19OREVMQVkJT19OT05CTE9DSworI2RlZmluZSBPX1NZTkMJCSAwMTAwMDAKKyNkZWZpbmUgRkFTWU5DCQkgMDIwMDAwCS8qIGZjbnRsLCBmb3IgQlNEIGNvbXBhdGliaWxpdHkgKi8KKyNkZWZpbmUgT19ESVJFQ1QJIDA0MDAwMAkvKiBkaXJlY3QgZGlzayBhY2Nlc3MgaGludCAtIGN1cnJlbnRseSBpZ25vcmVkICovCisjZGVmaW5lIE9fTEFSR0VGSUxFCTAxMDAwMDAKKyNkZWZpbmUgT19ESVJFQ1RPUlkJMDIwMDAwMAkvKiBtdXN0IGJlIGEgZGlyZWN0b3J5ICovCisjZGVmaW5lIE9fTk9GT0xMT1cJMDQwMDAwMCAvKiBkb24ndCBmb2xsb3cgbGlua3MgKi8KKyNkZWZpbmUgT19OT0FUSU1FCTAxMDAwMDAwCisKKyNkZWZpbmUgRl9EVVBGRAkJMAkvKiBkdXAgKi8KKyNkZWZpbmUgRl9HRVRGRAkJMQkvKiBnZXQgZl9mbGFncyAqLworI2RlZmluZSBGX1NFVEZECQkyCS8qIHNldCBmX2ZsYWdzICovCisjZGVmaW5lIEZfR0VURkwJCTMJLyogbW9yZSBmbGFncyAoY2xvZXhlYykgKi8KKyNkZWZpbmUgRl9TRVRGTAkJNAorI2RlZmluZSBGX0dFVExLCQk1CisjZGVmaW5lIEZfU0VUTEsJCTYKKyNkZWZpbmUgRl9TRVRMS1cJNworCisjZGVmaW5lIEZfU0VUT1dOCTgJLyogIGZvciBzb2NrZXRzLiAqLworI2RlZmluZSBGX0dFVE9XTgk5CS8qICBmb3Igc29ja2V0cy4gKi8KKyNkZWZpbmUgRl9TRVRTSUcJMTAJLyogIGZvciBzb2NrZXRzLiAqLworI2RlZmluZSBGX0dFVFNJRwkxMQkvKiAgZm9yIHNvY2tldHMuICovCisKKyNkZWZpbmUgRl9HRVRMSzY0ICAgICAgMTIgICAgICAvKiAgdXNpbmcgJ3N0cnVjdCBmbG9jazY0JyAqLworI2RlZmluZSBGX1NFVExLNjQgICAgICAxMworI2RlZmluZSBGX1NFVExLVzY0ICAgICAxNAorCisvKiBmb3IgRl9bR0VUfFNFVF1GTCAqLworI2RlZmluZSBGRF9DTE9FWEVDCTEJLyogYWN0dWFsbHkgYW55dGhpbmcgd2l0aCBsb3cgYml0IHNldCBnb2VzICovCisKKy8qIGZvciBwb3NpeCBmY250bCgpIGFuZCBsb2NrZigpICovCisjZGVmaW5lIEZfUkRMQ0sJCTAKKyNkZWZpbmUgRl9XUkxDSwkJMQorI2RlZmluZSBGX1VOTENLCQkyCisKKy8qIGZvciBvbGQgaW1wbGVtZW50YXRpb24gb2YgYnNkIGZsb2NrICgpICovCisjZGVmaW5lIEZfRVhMQ0sJCTQJLyogb3IgMyAqLworI2RlZmluZSBGX1NITENLCQk4CS8qIG9yIDQgKi8KKworLyogZm9yIGxlYXNlcyAqLworI2RlZmluZSBGX0lOUFJPR1JFU1MgICAxNgorCisvKiBvcGVyYXRpb25zIGZvciBic2QgZmxvY2soKSwgYWxzbyB1c2VkIGJ5IHRoZSBrZXJuZWwgaW1wbGVtZW50YXRpb24gKi8KKyNkZWZpbmUgTE9DS19TSAkJMQkvKiBzaGFyZWQgbG9jayAqLworI2RlZmluZSBMT0NLX0VYCQkyCS8qIGV4Y2x1c2l2ZSBsb2NrICovCisjZGVmaW5lIExPQ0tfTkIJCTQJLyogb3InZCB3aXRoIG9uZSBvZiB0aGUgYWJvdmUgdG8gcHJldmVudAorCQkJCSAgIGJsb2NraW5nICovCisjZGVmaW5lIExPQ0tfVU4JCTgJLyogcmVtb3ZlIGxvY2sgKi8KKworI2RlZmluZSBMT0NLX01BTkQgICAgICAzMiAgICAgIC8qIFRoaXMgaXMgYSBtYW5kYXRvcnkgZmxvY2sgKi8KKyNkZWZpbmUgTE9DS19SRUFEICAgICAgNjQgICAgICAvKiAuLi4gV2hpY2ggYWxsb3dzIGNvbmN1cnJlbnQgcmVhZCBvcGVyYXRpb25zICovCisjZGVmaW5lIExPQ0tfV1JJVEUgICAgIDEyOCAgICAgLyogLi4uIFdoaWNoIGFsbG93cyBjb25jdXJyZW50IHdyaXRlIG9wZXJhdGlvbnMgKi8KKyNkZWZpbmUgTE9DS19SVyAgICAgICAgMTkyICAgICAvKiAuLi4gV2hpY2ggYWxsb3dzIGNvbmN1cnJlbnQgcmVhZCAmIHdyaXRlIG9wcyAqLworCitzdHJ1Y3QgZmxvY2sgeworCXNob3J0IGxfdHlwZTsKKwlzaG9ydCBsX3doZW5jZTsKKwlvZmZfdCBsX3N0YXJ0OworCW9mZl90IGxfbGVuOworCXBpZF90IGxfcGlkOworfTsKKworc3RydWN0IGZsb2NrNjQgeworCXNob3J0ICBsX3R5cGU7CisJc2hvcnQgIGxfd2hlbmNlOworCWxvZmZfdCBsX3N0YXJ0OworCWxvZmZfdCBsX2xlbjsKKwlwaWRfdCAgbF9waWQ7Cit9OworCisjZGVmaW5lIEZfTElOVVhfU1BFQ0lGSUNfQkFTRSAgMTAyNAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvaGFyZGlycS5oIGIvaW5jbHVkZS9hc20tY3Jpcy9oYXJkaXJxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRkMTM2MgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvaGFyZGlycS5oCkBAIC0wLDAgKzEsMjcgQEAKKyNpZm5kZWYgX19BU01fSEFSRElSUV9ICisjZGVmaW5lIF9fQVNNX0hBUkRJUlFfSAorCisvKiBvbmx5IG5vbi1TTVAgc3VwcG9ydGVkICovCisKKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KKworLyogZW50cnkuUyBpcyBzZW5zaXRpdmUgdG8gdGhlIG9mZnNldHMgb2YgdGhlc2UgZmllbGRzICovCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgaW50IF9fc29mdGlycV9wZW5kaW5nOworfSBfX19fY2FjaGVsaW5lX2FsaWduZWQgaXJxX2NwdXN0YXRfdDsKKworI2luY2x1ZGUgPGxpbnV4L2lycV9jcHVzdGF0Lmg+IC8qIFN0YW5kYXJkIG1hcHBpbmdzIGZvciBpcnFfY3B1c3RhdF90IGFib3ZlICovCisKKyNkZWZpbmUgSEFSRElSUV9CSVRTCTgKKworLyoKKyAqIFRoZSBoYXJkaXJxIG1hc2sgaGFzIHRvIGJlIGxhcmdlIGVub3VnaCB0byBoYXZlCisgKiBzcGFjZSBmb3IgcG90ZW50aWFsbHkgYWxsIElSUSBzb3VyY2VzIGluIHRoZSBzeXN0ZW0KKyAqIG5lc3Rpbmcgb24gYSBzaW5nbGUgQ1BVOgorICovCisjaWYgKDEgPDwgSEFSRElSUV9CSVRTKSA8IE5SX0lSUVMKKyMgZXJyb3IgSEFSRElSUV9CSVRTIGlzIHRvbyBsb3chCisjZW5kaWYKKworI2VuZGlmIC8qIF9fQVNNX0hBUkRJUlFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy9pby5oIGIvaW5jbHVkZS9hc20tY3Jpcy9pby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkMmI1MTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL2lvLmgKQEAgLTAsMCArMSwxMDAgQEAKKyNpZm5kZWYgX0FTTV9DUklTX0lPX0gKKyNkZWZpbmUgX0FTTV9DUklTX0lPX0gKKworI2luY2x1ZGUgPGFzbS9wYWdlLmg+ICAgLyogZm9yIF9fdmEsIF9fcGEgKi8KKyNpbmNsdWRlIDxhc20vYXJjaC9pby5oPgorCisvKgorICogQ2hhbmdlIHZpcnR1YWwgYWRkcmVzc2VzIHRvIHBoeXNpY2FsIGFkZHJlc3NlcyBhbmQgdnYuCisgKi8KKworZXh0ZXJuIGlubGluZSB1bnNpZ25lZCBsb25nIHZpcnRfdG9fcGh5cyh2b2xhdGlsZSB2b2lkICogYWRkcmVzcykKK3sKKwlyZXR1cm4gX19wYShhZGRyZXNzKTsKK30KKworZXh0ZXJuIGlubGluZSB2b2lkICogcGh5c190b192aXJ0KHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwlyZXR1cm4gX192YShhZGRyZXNzKTsKK30KKworZXh0ZXJuIHZvaWQgKiBfX2lvcmVtYXAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBmbGFncyk7CisKK2V4dGVybiBpbmxpbmUgdm9pZCAqIGlvcmVtYXAgKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJcmV0dXJuIF9faW9yZW1hcChvZmZzZXQsIHNpemUsIDApOworfQorCitleHRlcm4gdm9pZCBpb3VubWFwKHZvaWQgKmFkZHIpOworCisvKgorICogSU8gYnVzIG1lbW9yeSBhZGRyZXNzZXMgYXJlIGFsc28gMToxIHdpdGggdGhlIHBoeXNpY2FsIGFkZHJlc3MKKyAqLworI2RlZmluZSB2aXJ0X3RvX2J1cyB2aXJ0X3RvX3BoeXMKKyNkZWZpbmUgYnVzX3RvX3ZpcnQgcGh5c190b192aXJ0CisKKy8qCisgKiByZWFkWC93cml0ZVgoKSBhcmUgdXNlZCB0byBhY2Nlc3MgbWVtb3J5IG1hcHBlZCBkZXZpY2VzLiBPbiBzb21lCisgKiBhcmNoaXRlY3R1cmVzIHRoZSBtZW1vcnkgbWFwcGVkIElPIHN0dWZmIG5lZWRzIHRvIGJlIGFjY2Vzc2VkCisgKiBkaWZmZXJlbnRseS4gT24gdGhlIENSSVMgYXJjaGl0ZWN0dXJlLCB3ZSBqdXN0IHJlYWQvd3JpdGUgdGhlCisgKiBtZW1vcnkgbG9jYXRpb24gZGlyZWN0bHkuCisgKi8KKyNkZWZpbmUgcmVhZGIoYWRkcikgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoYWRkcikpCisjZGVmaW5lIHJlYWR3KGFkZHIpICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopIChhZGRyKSkKKyNkZWZpbmUgcmVhZGwoYWRkcikgKCoodm9sYXRpbGUgdW5zaWduZWQgaW50ICopIChhZGRyKSkKKyNkZWZpbmUgcmVhZGJfcmVsYXhlZChhZGRyKSByZWFkYihhZGRyKQorI2RlZmluZSByZWFkd19yZWxheGVkKGFkZHIpIHJlYWR3KGFkZHIpCisjZGVmaW5lIHJlYWRsX3JlbGF4ZWQoYWRkcikgcmVhZGwoYWRkcikKKyNkZWZpbmUgX19yYXdfcmVhZGIgcmVhZGIKKyNkZWZpbmUgX19yYXdfcmVhZHcgcmVhZHcKKyNkZWZpbmUgX19yYXdfcmVhZGwgcmVhZGwKKworI2RlZmluZSB3cml0ZWIoYixhZGRyKSAoKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoYWRkcikpID0gKGIpKQorI2RlZmluZSB3cml0ZXcoYixhZGRyKSAoKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikgKGFkZHIpKSA9IChiKSkKKyNkZWZpbmUgd3JpdGVsKGIsYWRkcikgKCgqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSAoYWRkcikpID0gKGIpKQorI2RlZmluZSBfX3Jhd193cml0ZWIgd3JpdGViCisjZGVmaW5lIF9fcmF3X3dyaXRldyB3cml0ZXcKKyNkZWZpbmUgX19yYXdfd3JpdGVsIHdyaXRlbAorCisjZGVmaW5lIG1taW93YigpCisKKyNkZWZpbmUgbWVtc2V0X2lvKGEsYixjKQltZW1zZXQoKHZvaWQgKikoYSksKGIpLChjKSkKKyNkZWZpbmUgbWVtY3B5X2Zyb21pbyhhLGIsYykJbWVtY3B5KChhKSwodm9pZCAqKShiKSwoYykpCisjZGVmaW5lIG1lbWNweV90b2lvKGEsYixjKQltZW1jcHkoKHZvaWQgKikoYSksKGIpLChjKSkKKworLyoKKyAqIEFnYWluLCBDUklTIGRvZXMgbm90IHJlcXVpcmUgbWVtIElPIHNwZWNpZmljIGZ1bmN0aW9uLgorICovCisKKyNkZWZpbmUgZXRoX2lvX2NvcHlfYW5kX3N1bShhLGIsYyxkKQlldGhfY29weV9hbmRfc3VtKChhKSwodm9pZCAqKShiKSwoYyksKGQpKQorCisvKiBUaGUgZm9sbG93aW5nIGlzIGp1bmsgbmVlZGVkIGZvciB0aGUgYXJjaC1pbmRlcGVuZGVudCBjb2RlIGJ1dCB3aGljaAorICogd2UgbmV2ZXIgdXNlIGluIHRoZSBDUklTIHBvcnQKKyAqLworCisjZGVmaW5lIElPX1NQQUNFX0xJTUlUIDB4ZmZmZgorI2RlZmluZSBpbmIoeCkgKDApCisjZGVmaW5lIGludyh4KSAoMCkKKyNkZWZpbmUgaW5sKHgpICgwKQorI2RlZmluZSBvdXRiKHgseSkKKyNkZWZpbmUgb3V0dyh4LHkpCisjZGVmaW5lIG91dGwoeCx5KQorI2RlZmluZSBpbnNiKHgseSx6KQorI2RlZmluZSBpbnN3KHgseSx6KQorI2RlZmluZSBpbnNsKHgseSx6KQorI2RlZmluZSBvdXRzYih4LHkseikKKyNkZWZpbmUgb3V0c3coeCx5LHopCisjZGVmaW5lIG91dHNsKHgseSx6KQorCisvKgorICogQ29udmVydCBhIHBoeXNpY2FsIHBvaW50ZXIgdG8gYSB2aXJ0dWFsIGtlcm5lbCBwb2ludGVyIGZvciAvZGV2L21lbQorICogYWNjZXNzCisgKi8KKyNkZWZpbmUgeGxhdGVfZGV2X21lbV9wdHIocCkJX192YShwKQorCisvKgorICogQ29udmVydCBhIHZpcnR1YWwgY2FjaGVkIHBvaW50ZXIgdG8gYW4gdW5jYWNoZWQgcG9pbnRlcgorICovCisjZGVmaW5lIHhsYXRlX2Rldl9rbWVtX3B0cihwKQlwCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy9pb2N0bC5oIGIvaW5jbHVkZS9hc20tY3Jpcy9pb2N0bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMmQ4ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL2lvY3RsLmgKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIGxpbnV4L2lvY3RsLmggZm9yIExpbnV4IGJ5IEguSC4gQmVyZ21hbi4KKyAqCisgKiBUaGlzIGlzIHRoZSBzYW1lIGFzIHRoZSBpMzg2IHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfQVNNQ1JJU19JT0NUTF9ICisjZGVmaW5lIF9BU01DUklTX0lPQ1RMX0gKKworLyogaW9jdGwgY29tbWFuZCBlbmNvZGluZzogMzIgYml0cyB0b3RhbCwgY29tbWFuZCBpbiBsb3dlciAxNiBiaXRzLAorICogc2l6ZSBvZiB0aGUgcGFyYW1ldGVyIHN0cnVjdHVyZSBpbiB0aGUgbG93ZXIgMTQgYml0cyBvZiB0aGUKKyAqIHVwcGVyIDE2IGJpdHMuCisgKiBFbmNvZGluZyB0aGUgc2l6ZSBvZiB0aGUgcGFyYW1ldGVyIHN0cnVjdHVyZSBpbiB0aGUgaW9jdGwgcmVxdWVzdAorICogaXMgdXNlZnVsIGZvciBjYXRjaGluZyBwcm9ncmFtcyBjb21waWxlZCB3aXRoIG9sZCB2ZXJzaW9ucworICogYW5kIHRvIGF2b2lkIG92ZXJ3cml0aW5nIHVzZXIgc3BhY2Ugb3V0c2lkZSB0aGUgdXNlciBidWZmZXIgYXJlYS4KKyAqIFRoZSBoaWdoZXN0IDIgYml0cyBhcmUgcmVzZXJ2ZWQgZm9yIGluZGljYXRpbmcgdGhlIGBgYWNjZXNzIG1vZGUnJy4KKyAqIE5PVEU6IFRoaXMgbGltaXRzIHRoZSBtYXggcGFyYW1ldGVyIHNpemUgdG8gMTZrQiAtMSAhCisgKi8KKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgaXMgZm9yIGNvbXBhdGliaWxpdHkgYWNyb3NzIHRoZSB2YXJpb3VzIExpbnV4CisgKiBwbGF0Zm9ybXMuICBUaGUgaTM4NiBpb2N0bCBudW1iZXJpbmcgc2NoZW1lIGRvZXNuJ3QgcmVhbGx5IGVuZm9yY2UKKyAqIGEgdHlwZSBmaWVsZC4gIERlIGZhY3RvLCBob3dldmVyLCB0aGUgdG9wIDggYml0cyBvZiB0aGUgbG93ZXIgMTYKKyAqIGJpdHMgYXJlIGluZGVlZCB1c2VkIGFzIGEgdHlwZSBmaWVsZCwgc28gd2UgbWlnaHQganVzdCBhcyB3ZWxsIG1ha2UKKyAqIHRoaXMgZXhwbGljaXQgaGVyZS4gIFBsZWFzZSBiZSBzdXJlIHRvIHVzZSB0aGUgZGVjb2RpbmcgbWFjcm9zCisgKiBiZWxvdyBmcm9tIG5vdyBvbi4KKyAqLworI2RlZmluZSBfSU9DX05SQklUUwk4CisjZGVmaW5lIF9JT0NfVFlQRUJJVFMJOAorI2RlZmluZSBfSU9DX1NJWkVCSVRTCTE0CisjZGVmaW5lIF9JT0NfRElSQklUUwkyCisKKyNkZWZpbmUgX0lPQ19OUk1BU0sJKCgxIDw8IF9JT0NfTlJCSVRTKS0xKQorI2RlZmluZSBfSU9DX1RZUEVNQVNLCSgoMSA8PCBfSU9DX1RZUEVCSVRTKS0xKQorI2RlZmluZSBfSU9DX1NJWkVNQVNLCSgoMSA8PCBfSU9DX1NJWkVCSVRTKS0xKQorI2RlZmluZSBfSU9DX0RJUk1BU0sJKCgxIDw8IF9JT0NfRElSQklUUyktMSkKKworI2RlZmluZSBfSU9DX05SU0hJRlQJMAorI2RlZmluZSBfSU9DX1RZUEVTSElGVAkoX0lPQ19OUlNISUZUK19JT0NfTlJCSVRTKQorI2RlZmluZSBfSU9DX1NJWkVTSElGVAkoX0lPQ19UWVBFU0hJRlQrX0lPQ19UWVBFQklUUykKKyNkZWZpbmUgX0lPQ19ESVJTSElGVAkoX0lPQ19TSVpFU0hJRlQrX0lPQ19TSVpFQklUUykKKworLyoKKyAqIERpcmVjdGlvbiBiaXRzLgorICovCisjZGVmaW5lIF9JT0NfTk9ORQkwVQorI2RlZmluZSBfSU9DX1dSSVRFCTFVCisjZGVmaW5lIF9JT0NfUkVBRAkyVQorCisjZGVmaW5lIF9JT0MoZGlyLHR5cGUsbnIsc2l6ZSkgXAorCSgoKGRpcikgIDw8IF9JT0NfRElSU0hJRlQpIHwgXAorCSAoKHR5cGUpIDw8IF9JT0NfVFlQRVNISUZUKSB8IFwKKwkgKChucikgICA8PCBfSU9DX05SU0hJRlQpIHwgXAorCSAoKHNpemUpIDw8IF9JT0NfU0laRVNISUZUKSkKKworLyogcHJvdm9rZSBjb21waWxlIGVycm9yIGZvciBpbnZhbGlkIHVzZXMgb2Ygc2l6ZSBhcmd1bWVudCAqLworZXh0ZXJuIGludCBfX2ludmFsaWRfc2l6ZV9hcmd1bWVudF9mb3JfSU9DOworI2RlZmluZSBfSU9DX1RZUEVDSEVDSyh0KSBcCisJKChzaXplb2YodCkgPT0gc2l6ZW9mKHRbMV0pICYmIFwKKwkgIHNpemVvZih0KSA8ICgxIDw8IF9JT0NfU0laRUJJVFMpKSA/IFwKKwkgIHNpemVvZih0KSA6IF9faW52YWxpZF9zaXplX2FyZ3VtZW50X2Zvcl9JT0MpCisKKy8qIHVzZWQgdG8gY3JlYXRlIG51bWJlcnMgKi8KKyNkZWZpbmUgX0lPKHR5cGUsbnIpCQlfSU9DKF9JT0NfTk9ORSwodHlwZSksKG5yKSwwKQorI2RlZmluZSBfSU9SKHR5cGUsbnIsc2l6ZSkJX0lPQyhfSU9DX1JFQUQsKHR5cGUpLChuciksKF9JT0NfVFlQRUNIRUNLKHNpemUpKSkKKyNkZWZpbmUgX0lPVyh0eXBlLG5yLHNpemUpCV9JT0MoX0lPQ19XUklURSwodHlwZSksKG5yKSwoX0lPQ19UWVBFQ0hFQ0soc2l6ZSkpKQorI2RlZmluZSBfSU9XUih0eXBlLG5yLHNpemUpCV9JT0MoX0lPQ19SRUFEfF9JT0NfV1JJVEUsKHR5cGUpLChuciksKF9JT0NfVFlQRUNIRUNLKHNpemUpKSkKKworLyogdXNlZCB0byBkZWNvZGUgaW9jdGwgbnVtYmVycy4uICovCisjZGVmaW5lIF9JT0NfRElSKG5yKQkJKCgobnIpID4+IF9JT0NfRElSU0hJRlQpICYgX0lPQ19ESVJNQVNLKQorI2RlZmluZSBfSU9DX1RZUEUobnIpCQkoKChucikgPj4gX0lPQ19UWVBFU0hJRlQpICYgX0lPQ19UWVBFTUFTSykKKyNkZWZpbmUgX0lPQ19OUihucikJCSgoKG5yKSA+PiBfSU9DX05SU0hJRlQpICYgX0lPQ19OUk1BU0spCisjZGVmaW5lIF9JT0NfU0laRShucikJCSgoKG5yKSA+PiBfSU9DX1NJWkVTSElGVCkgJiBfSU9DX1NJWkVNQVNLKQorCisvKiAuLi5hbmQgZm9yIHRoZSBkcml2ZXJzL3NvdW5kIGZpbGVzLi4uICovCisKKyNkZWZpbmUgSU9DX0lOCQkoX0lPQ19XUklURSA8PCBfSU9DX0RJUlNISUZUKQorI2RlZmluZSBJT0NfT1VUCQkoX0lPQ19SRUFEIDw8IF9JT0NfRElSU0hJRlQpCisjZGVmaW5lIElPQ19JTk9VVAkoKF9JT0NfV1JJVEV8X0lPQ19SRUFEKSA8PCBfSU9DX0RJUlNISUZUKQorI2RlZmluZSBJT0NTSVpFX01BU0sJKF9JT0NfU0laRU1BU0sgPDwgX0lPQ19TSVpFU0hJRlQpCisjZGVmaW5lIElPQ1NJWkVfU0hJRlQJKF9JT0NfU0laRVNISUZUKQorCisjZW5kaWYgLyogX0FTTUNSSVNfSU9DVExfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy9pb2N0bHMuaCBiL2luY2x1ZGUvYXNtLWNyaXMvaW9jdGxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc3ODdjMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvaW9jdGxzLmgKQEAgLTAsMCArMSw4NyBAQAorI2lmbmRlZiBfX0FSQ0hfQ1JJU19JT0NUTFNfSF9fCisjZGVmaW5lIF9fQVJDSF9DUklTX0lPQ1RMU19IX18KKworLyogdmVyYmF0aW0gY29weSBvZiBhc20taTM4Ni9pb2N0bHMuaCAqLworCisjaW5jbHVkZSA8YXNtL2lvY3RsLmg+CisKKy8qIDB4NTQgaXMganVzdCBhIG1hZ2ljIG51bWJlciB0byBtYWtlIHRoZXNlIHJlbGF0aXZlbHkgdW5pcXVlICgnVCcpICovCisKKyNkZWZpbmUgVENHRVRTCQkweDU0MDEKKyNkZWZpbmUgVENTRVRTCQkweDU0MDIKKyNkZWZpbmUgVENTRVRTVwkJMHg1NDAzCisjZGVmaW5lIFRDU0VUU0YJCTB4NTQwNAorI2RlZmluZSBUQ0dFVEEJCTB4NTQwNQorI2RlZmluZSBUQ1NFVEEJCTB4NTQwNgorI2RlZmluZSBUQ1NFVEFXCQkweDU0MDcKKyNkZWZpbmUgVENTRVRBRgkJMHg1NDA4CisjZGVmaW5lIFRDU0JSSwkJMHg1NDA5CisjZGVmaW5lIFRDWE9OQwkJMHg1NDBBCisjZGVmaW5lIFRDRkxTSAkJMHg1NDBCCisjZGVmaW5lIFRJT0NFWENMCTB4NTQwQworI2RlZmluZSBUSU9DTlhDTAkweDU0MEQKKyNkZWZpbmUgVElPQ1NDVFRZCTB4NTQwRQorI2RlZmluZSBUSU9DR1BHUlAJMHg1NDBGCisjZGVmaW5lIFRJT0NTUEdSUAkweDU0MTAKKyNkZWZpbmUgVElPQ09VVFEJMHg1NDExCisjZGVmaW5lIFRJT0NTVEkJCTB4NTQxMgorI2RlZmluZSBUSU9DR1dJTlNaCTB4NTQxMworI2RlZmluZSBUSU9DU1dJTlNaCTB4NTQxNAorI2RlZmluZSBUSU9DTUdFVAkweDU0MTUKKyNkZWZpbmUgVElPQ01CSVMJMHg1NDE2CisjZGVmaW5lIFRJT0NNQklDCTB4NTQxNworI2RlZmluZSBUSU9DTVNFVAkweDU0MTgKKyNkZWZpbmUgVElPQ0dTT0ZUQ0FSCTB4NTQxOQorI2RlZmluZSBUSU9DU1NPRlRDQVIJMHg1NDFBCisjZGVmaW5lIEZJT05SRUFECTB4NTQxQgorI2RlZmluZSBUSU9DSU5RCQlGSU9OUkVBRAorI2RlZmluZSBUSU9DTElOVVgJMHg1NDFDCisjZGVmaW5lIFRJT0NDT05TCTB4NTQxRAorI2RlZmluZSBUSU9DR1NFUklBTAkweDU0MUUKKyNkZWZpbmUgVElPQ1NTRVJJQUwJMHg1NDFGCisjZGVmaW5lIFRJT0NQS1QJCTB4NTQyMAorI2RlZmluZSBGSU9OQklPCQkweDU0MjEKKyNkZWZpbmUgVElPQ05PVFRZCTB4NTQyMgorI2RlZmluZSBUSU9DU0VURAkweDU0MjMKKyNkZWZpbmUgVElPQ0dFVEQJMHg1NDI0CisjZGVmaW5lIFRDU0JSS1AJCTB4NTQyNQkvKiBOZWVkZWQgZm9yIFBPU0lYIHRjc2VuZGJyZWFrKCkgKi8KKyNkZWZpbmUgVElPQ1NCUksJMHg1NDI3ICAvKiBCU0QgY29tcGF0aWJpbGl0eSAqLworI2RlZmluZSBUSU9DQ0JSSwkweDU0MjggIC8qIEJTRCBjb21wYXRpYmlsaXR5ICovCisjZGVmaW5lIFRJT0NHU0lECTB4NTQyOSAgLyogUmV0dXJuIHRoZSBzZXNzaW9uIElEIG9mIEZEICovCisjZGVmaW5lIFRJT0NHUFROCV9JT1IoJ1QnLDB4MzAsIHVuc2lnbmVkIGludCkgLyogR2V0IFB0eSBOdW1iZXIgKG9mIHB0eS1tdXggZGV2aWNlKSAqLworI2RlZmluZSBUSU9DU1BUTENLCV9JT1coJ1QnLDB4MzEsIGludCkgIC8qIExvY2svdW5sb2NrIFB0eSAqLworCisjZGVmaW5lIEZJT05DTEVYCTB4NTQ1MCAgLyogdGhlc2UgbnVtYmVycyBuZWVkIHRvIGJlIGFkanVzdGVkLiAqLworI2RlZmluZSBGSU9DTEVYCQkweDU0NTEKKyNkZWZpbmUgRklPQVNZTkMJMHg1NDUyCisjZGVmaW5lIFRJT0NTRVJDT05GSUcJMHg1NDUzCisjZGVmaW5lIFRJT0NTRVJHV0lMRAkweDU0NTQKKyNkZWZpbmUgVElPQ1NFUlNXSUxECTB4NTQ1NQorI2RlZmluZSBUSU9DR0xDS1RSTUlPUwkweDU0NTYKKyNkZWZpbmUgVElPQ1NMQ0tUUk1JT1MJMHg1NDU3CisjZGVmaW5lIFRJT0NTRVJHU1RSVUNUCTB4NTQ1OCAvKiBGb3IgZGVidWdnaW5nIG9ubHkgKi8KKyNkZWZpbmUgVElPQ1NFUkdFVExTUiAgIDB4NTQ1OSAvKiBHZXQgbGluZSBzdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgVElPQ1NFUkdFVE1VTFRJIDB4NTQ1QSAvKiBHZXQgbXVsdGlwb3J0IGNvbmZpZyAgKi8KKyNkZWZpbmUgVElPQ1NFUlNFVE1VTFRJIDB4NTQ1QiAvKiBTZXQgbXVsdGlwb3J0IGNvbmZpZyAqLworCisjZGVmaW5lIFRJT0NNSVdBSVQJMHg1NDVDCS8qIHdhaXQgZm9yIGEgY2hhbmdlIG9uIHNlcmlhbCBpbnB1dCBsaW5lKHMpICovCisjZGVmaW5lIFRJT0NHSUNPVU5UCTB4NTQ1RAkvKiByZWFkIHNlcmlhbCBwb3J0IGlubGluZSBpbnRlcnJ1cHQgY291bnRzICovCisjZGVmaW5lIFRJT0NHSEFZRVNFU1AgICAweDU0NUUgIC8qIEdldCBIYXllcyBFU1AgY29uZmlndXJhdGlvbiAqLworI2RlZmluZSBUSU9DU0hBWUVTRVNQICAgMHg1NDVGICAvKiBTZXQgSGF5ZXMgRVNQIGNvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgRklPUVNJWkUJMHg1NDYwCisKKyNkZWZpbmUgVElPQ1NFUlNFVFJTNDg1IDB4NTQ2MSAgLyogZW5hYmxlIHJzLTQ4NSAqLworI2RlZmluZSBUSU9DU0VSV1JSUzQ4NSAgMHg1NDYyICAvKiB3cml0ZSBycy00ODUgKi8KKworLyogVXNlZCBmb3IgcGFja2V0IG1vZGUgKi8KKyNkZWZpbmUgVElPQ1BLVF9EQVRBCQkgMAorI2RlZmluZSBUSU9DUEtUX0ZMVVNIUkVBRAkgMQorI2RlZmluZSBUSU9DUEtUX0ZMVVNIV1JJVEUJIDIKKyNkZWZpbmUgVElPQ1BLVF9TVE9QCQkgNAorI2RlZmluZSBUSU9DUEtUX1NUQVJUCQkgOAorI2RlZmluZSBUSU9DUEtUX05PU1RPUAkJMTYKKyNkZWZpbmUgVElPQ1BLVF9ET1NUT1AJCTMyCisKKyNkZWZpbmUgVElPQ1NFUl9URU1UICAgIDB4MDEJLyogVHJhbnNtaXR0ZXIgcGh5c2ljYWxseSBlbXB0eSAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvaXBjLmggYi9pbmNsdWRlL2FzbS1jcmlzL2lwYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0NmUzZDkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL2lwYy5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pcGMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvaXBjYnVmLmggYi9pbmNsdWRlL2FzbS1jcmlzL2lwY2J1Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiMGMxOGIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL2lwY2J1Zi5oCkBAIC0wLDAgKzEsMjkgQEAKKyNpZm5kZWYgX19DUklTX0lQQ0JVRl9IX18KKyNkZWZpbmUgX19DUklTX0lQQ0JVRl9IX18KKworLyoKKyAqIFRoZSB1c2VyX2lwY19wZXJtIHN0cnVjdHVyZSBmb3IgQ1JJUyBhcmNoaXRlY3R1cmUuCisgKiBOb3RlIGV4dHJhIHBhZGRpbmcgYmVjYXVzZSB0aGlzIHN0cnVjdHVyZSBpcyBwYXNzZWQgYmFjayBhbmQgZm9ydGgKKyAqIGJldHdlZW4ga2VybmVsIGFuZCB1c2VyIHNwYWNlLgorICoKKyAqIFBhZCBzcGFjZSBpcyBsZWZ0IGZvcjoKKyAqIC0gMzItYml0IG1vZGVfdCBhbmQgc2VxCisgKiAtIDIgbWlzY2VsbGFuZW91cyAzMi1iaXQgdmFsdWVzCisgKi8KKworc3RydWN0IGlwYzY0X3Blcm0KK3sKKwlfX2tlcm5lbF9rZXlfdAkJa2V5OworCV9fa2VybmVsX3VpZDMyX3QJdWlkOworCV9fa2VybmVsX2dpZDMyX3QJZ2lkOworCV9fa2VybmVsX3VpZDMyX3QJY3VpZDsKKwlfX2tlcm5lbF9naWQzMl90CWNnaWQ7CisJX19rZXJuZWxfbW9kZV90CQltb2RlOworCXVuc2lnbmVkIHNob3J0CQlfX3BhZDE7CisJdW5zaWduZWQgc2hvcnQJCXNlcTsKKwl1bnNpZ25lZCBzaG9ydAkJX19wYWQyOworCXVuc2lnbmVkIGxvbmcJCV9fdW51c2VkMTsKKwl1bnNpZ25lZCBsb25nCQlfX3VudXNlZDI7Cit9OworCisjZW5kaWYgLyogX19DUklTX0lQQ0JVRl9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvaXJxLmggYi9pbmNsdWRlL2FzbS1jcmlzL2lycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3ZjM0MjUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL2lycS5oCkBAIC0wLDAgKzEsMjMgQEAKKyNpZm5kZWYgX0FTTV9JUlFfSAorI2RlZmluZSBfQVNNX0lSUV9ICisKKyNpbmNsdWRlIDxhc20vYXJjaC9pcnEuaD4KKworZXh0ZXJuIF9faW5saW5lX18gaW50IGlycV9jYW5vbmljYWxpemUoaW50IGlycSkKK3sgIAorICByZXR1cm4gaXJxOyAKK30KKworZXh0ZXJuIHZvaWQgZGlzYWJsZV9pcnEodW5zaWduZWQgaW50KTsKK2V4dGVybiB2b2lkIGVuYWJsZV9pcnEodW5zaWduZWQgaW50KTsKKworI2RlZmluZSBkaXNhYmxlX2lycV9ub3N5bmMgICAgICBkaXNhYmxlX2lycQorI2RlZmluZSBlbmFibGVfaXJxX25vc3luYyAgICAgICBlbmFibGVfaXJxCisKK3N0cnVjdCBpcnFhY3Rpb247CitzdHJ1Y3QgcHRfcmVnczsKK2ludCBoYW5kbGVfSVJRX2V2ZW50KHVuc2lnbmVkIGludCwgc3RydWN0IHB0X3JlZ3MgKiwgc3RydWN0IGlycWFjdGlvbiAqKTsKKworI2VuZGlmICAvKiBfQVNNX0lSUV9IICovCisKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy9rbWFwX3R5cGVzLmggYi9pbmNsdWRlL2FzbS1jcmlzL2ttYXBfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWMwOTc0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9rbWFwX3R5cGVzLmgKQEAgLTAsMCArMSwyNSBAQAorI2lmbmRlZiBfQVNNX0tNQVBfVFlQRVNfSAorI2RlZmluZSBfQVNNX0tNQVBfVFlQRVNfSAorCisvKiBEdW1teSBoZWFkZXIganVzdCB0byBkZWZpbmUga21fdHlwZS4gIE5vbmUgb2YgdGhpcworICogaXMgYWN0dWFsbHkgdXNlZCBvbiBjcmlzLiAKKyAqLworCitlbnVtIGttX3R5cGUgeworCUtNX0JPVU5DRV9SRUFELAorCUtNX1NLQl9TVU5SUENfREFUQSwKKwlLTV9TS0JfREFUQV9TT0ZUSVJRLAorCUtNX1VTRVIwLAorCUtNX1VTRVIxLAorCUtNX0JJT19TUkNfSVJRLAorCUtNX0JJT19EU1RfSVJRLAorCUtNX1BURTAsCisJS01fUFRFMSwKKwlLTV9JUlEwLAorCUtNX0lSUTEsCisJS01fQ1JZUFRPX1VTRVIsCisJS01fQ1JZUFRPX1NPRlRJUlEsCisJS01fVFlQRV9OUgorfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1jcmlzL2xpbmthZ2UuaCBiL2luY2x1ZGUvYXNtLWNyaXMvbGlua2FnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5MWMyZDAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL2xpbmthZ2UuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19BU01fTElOS0FHRV9ICisjZGVmaW5lIF9fQVNNX0xJTktBR0VfSAorCisvKiBOb3RoaW5nIHRvIHNlZSBoZXJlLi4uICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy9sb2NhbC5oIGIvaW5jbHVkZS9hc20tY3Jpcy9sb2NhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxMWM1MzAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL2xvY2FsLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2xvY2FsLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1jcmlzL21tYW4uaCBiL2luY2x1ZGUvYXNtLWNyaXMvbW1hbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1NzBlNzIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL21tYW4uaApAQCAtMCwwICsxLDQ1IEBACisjaWZuZGVmIF9fQ1JJU19NTUFOX0hfXworI2RlZmluZSBfX0NSSVNfTU1BTl9IX18KKworLyogdmVyYmF0aW0gY29weSBvZiBhc20taTM4Ni8gdmVyc2lvbiAqLworCisjZGVmaW5lIFBST1RfUkVBRAkweDEJCS8qIHBhZ2UgY2FuIGJlIHJlYWQgKi8KKyNkZWZpbmUgUFJPVF9XUklURQkweDIJCS8qIHBhZ2UgY2FuIGJlIHdyaXR0ZW4gKi8KKyNkZWZpbmUgUFJPVF9FWEVDCTB4NAkJLyogcGFnZSBjYW4gYmUgZXhlY3V0ZWQgKi8KKyNkZWZpbmUgUFJPVF9TRU0JMHg4CQkvKiBwYWdlIG1heSBiZSB1c2VkIGZvciBhdG9taWMgb3BzICovCisjZGVmaW5lIFBST1RfTk9ORQkweDAJCS8qIHBhZ2UgY2FuIG5vdCBiZSBhY2Nlc3NlZCAqLworI2RlZmluZSBQUk9UX0dST1dTRE9XTgkweDAxMDAwMDAwCS8qIG1wcm90ZWN0IGZsYWc6IGV4dGVuZCBjaGFuZ2UgdG8gc3RhcnQgb2YgZ3Jvd3Nkb3duIHZtYSAqLworI2RlZmluZSBQUk9UX0dST1dTVVAJMHgwMjAwMDAwMAkvKiBtcHJvdGVjdCBmbGFnOiBleHRlbmQgY2hhbmdlIHRvIGVuZCBvZiBncm93c3VwIHZtYSAqLworCisjZGVmaW5lIE1BUF9TSEFSRUQJMHgwMQkJLyogU2hhcmUgY2hhbmdlcyAqLworI2RlZmluZSBNQVBfUFJJVkFURQkweDAyCQkvKiBDaGFuZ2VzIGFyZSBwcml2YXRlICovCisjZGVmaW5lIE1BUF9UWVBFCTB4MGYJCS8qIE1hc2sgZm9yIHR5cGUgb2YgbWFwcGluZyAqLworI2RlZmluZSBNQVBfRklYRUQJMHgxMAkJLyogSW50ZXJwcmV0IGFkZHIgZXhhY3RseSAqLworI2RlZmluZSBNQVBfQU5PTllNT1VTCTB4MjAJCS8qIGRvbid0IHVzZSBhIGZpbGUgKi8KKworI2RlZmluZSBNQVBfR1JPV1NET1dOCTB4MDEwMAkJLyogc3RhY2stbGlrZSBzZWdtZW50ICovCisjZGVmaW5lIE1BUF9ERU5ZV1JJVEUJMHgwODAwCQkvKiBFVFhUQlNZICovCisjZGVmaW5lIE1BUF9FWEVDVVRBQkxFCTB4MTAwMAkJLyogbWFyayBpdCBhcyBhbiBleGVjdXRhYmxlICovCisjZGVmaW5lIE1BUF9MT0NLRUQJMHgyMDAwCQkvKiBwYWdlcyBhcmUgbG9ja2VkICovCisjZGVmaW5lIE1BUF9OT1JFU0VSVkUJMHg0MDAwCQkvKiBkb24ndCBjaGVjayBmb3IgcmVzZXJ2YXRpb25zICovCisjZGVmaW5lIE1BUF9QT1BVTEFURQkweDgwMDAJCS8qIHBvcHVsYXRlIChwcmVmYXVsdCkgcGFnZXRhYmxlcyAqLworI2RlZmluZSBNQVBfTk9OQkxPQ0sJMHgxMDAwMAkJLyogZG8gbm90IGJsb2NrIG9uIElPICovCisKKyNkZWZpbmUgTVNfQVNZTkMJMQkJLyogc3luYyBtZW1vcnkgYXN5bmNocm9ub3VzbHkgKi8KKyNkZWZpbmUgTVNfSU5WQUxJREFURQkyCQkvKiBpbnZhbGlkYXRlIHRoZSBjYWNoZXMgKi8KKyNkZWZpbmUgTVNfU1lOQwkJNAkJLyogc3luY2hyb25vdXMgbWVtb3J5IHN5bmMgKi8KKworI2RlZmluZSBNQ0xfQ1VSUkVOVAkxCQkvKiBsb2NrIGFsbCBjdXJyZW50IG1hcHBpbmdzICovCisjZGVmaW5lIE1DTF9GVVRVUkUJMgkJLyogbG9jayBhbGwgZnV0dXJlIG1hcHBpbmdzICovCisKKyNkZWZpbmUgTUFEVl9OT1JNQUwJMHgwCQkvKiBkZWZhdWx0IHBhZ2UtaW4gYmVoYXZpb3IgKi8KKyNkZWZpbmUgTUFEVl9SQU5ET00JMHgxCQkvKiBwYWdlLWluIG1pbmltdW0gcmVxdWlyZWQgKi8KKyNkZWZpbmUgTUFEVl9TRVFVRU5USUFMCTB4MgkJLyogcmVhZC1haGVhZCBhZ2dyZXNzaXZlbHkgKi8KKyNkZWZpbmUgTUFEVl9XSUxMTkVFRAkweDMJCS8qIHByZS1mYXVsdCBwYWdlcyAqLworI2RlZmluZSBNQURWX0RPTlRORUVECTB4NAkJLyogZGlzY2FyZCB0aGVzZSBwYWdlcyAqLworCisvKiBjb21wYXRpYmlsaXR5IGZsYWdzICovCisjZGVmaW5lIE1BUF9BTk9OCU1BUF9BTk9OWU1PVVMKKyNkZWZpbmUgTUFQX0ZJTEUJMAorCisjZW5kaWYgLyogX19DUklTX01NQU5fSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1jcmlzL21tdS5oIGIvaW5jbHVkZS9hc20tY3Jpcy9tbXUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDBhMWJjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9tbXUuaApAQCAtMCwwICsxLDEwIEBACisvKgorICogQ1JJUyBNTVUgY29uc3RhbnRzIGFuZCBQVEUgbGF5b3V0CisgKi8KKworI2lmbmRlZiBfQ1JJU19NTVVfSAorI2RlZmluZSBfQ1JJU19NTVVfSAorCisjaW5jbHVkZSA8YXNtL2FyY2gvbW11Lmg+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy9tbXVfY29udGV4dC5oIGIvaW5jbHVkZS9hc20tY3Jpcy9tbXVfY29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5MzA4YzUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL21tdV9jb250ZXh0LmgKQEAgLTAsMCArMSwyNCBAQAorI2lmbmRlZiBfX0NSSVNfTU1VX0NPTlRFWFRfSAorI2RlZmluZSBfX0NSSVNfTU1VX0NPTlRFWFRfSAorCitleHRlcm4gaW50IGluaXRfbmV3X2NvbnRleHQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKK2V4dGVybiB2b2lkIGdldF9tbXVfY29udGV4dChzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CitleHRlcm4gdm9pZCBkZXN0cm95X2NvbnRleHQoc3RydWN0IG1tX3N0cnVjdCAqbW0pOworZXh0ZXJuIHZvaWQgc3dpdGNoX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKnByZXYsIHN0cnVjdCBtbV9zdHJ1Y3QgKm5leHQsCisJCSAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKKworI2RlZmluZSBkZWFjdGl2YXRlX21tKHRzayxtbSkJZG8geyB9IHdoaWxlICgwKQorCisjZGVmaW5lIGFjdGl2YXRlX21tKHByZXYsbmV4dCkgc3dpdGNoX21tKChwcmV2KSwobmV4dCksTlVMTCkKKworLyogY3VycmVudCBhY3RpdmUgcGdkIC0gdGhpcyBpcyBzaW1pbGFyIHRvIG90aGVyIHByb2Nlc3NvcnMgcGdkIAorICogcmVnaXN0ZXJzIGxpa2UgY3IzIG9uIHRoZSBpMzg2CisgKi8KKworZXh0ZXJuIHZvbGF0aWxlIHBnZF90ICpjdXJyZW50X3BnZDsgICAvKiBkZWZpbmVkIGluIGFyY2gvY3Jpcy9tbS9mYXVsdC5jICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBlbnRlcl9sYXp5X3RsYihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy9tb2R1bGUuaCBiL2luY2x1ZGUvYXNtLWNyaXMvbW9kdWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2VlNzIzMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvbW9kdWxlLmgKQEAgLTAsMCArMSw5IEBACisjaWZuZGVmIF9BU01fQ1JJU19NT0RVTEVfSAorI2RlZmluZSBfQVNNX0NSSVNfTU9EVUxFX0gKKy8qIGNyaXMgaXMgc2ltcGxlICovCitzdHJ1Y3QgbW9kX2FyY2hfc3BlY2lmaWMgeyB9OworCisjZGVmaW5lIEVsZl9TaGRyIEVsZjMyX1NoZHIKKyNkZWZpbmUgRWxmX1N5bSBFbGYzMl9TeW0KKyNkZWZpbmUgRWxmX0VoZHIgRWxmMzJfRWhkcgorI2VuZGlmIC8qIF9BU01fQ1JJU19NT0RVTEVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy9tc2didWYuaCBiL2luY2x1ZGUvYXNtLWNyaXMvbXNnYnVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRhNjNkZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvbXNnYnVmLmgKQEAgLTAsMCArMSwzMyBAQAorI2lmbmRlZiBfQ1JJU19NU0dCVUZfSAorI2RlZmluZSBfQ1JJU19NU0dCVUZfSAorCisvKiB2ZXJiYXRpbSBjb3B5IG9mIGFzbS1pMzg2IHZlcnNpb24gKi8KKworLyogCisgKiBUaGUgbXNxaWQ2NF9kcyBzdHJ1Y3R1cmUgZm9yIENSSVMgYXJjaGl0ZWN0dXJlLgorICogTm90ZSBleHRyYSBwYWRkaW5nIGJlY2F1c2UgdGhpcyBzdHJ1Y3R1cmUgaXMgcGFzc2VkIGJhY2sgYW5kIGZvcnRoCisgKiBiZXR3ZWVuIGtlcm5lbCBhbmQgdXNlciBzcGFjZS4KKyAqCisgKiBQYWQgc3BhY2UgaXMgbGVmdCBmb3I6CisgKiAtIDY0LWJpdCB0aW1lX3QgdG8gc29sdmUgeTIwMzggcHJvYmxlbQorICogLSAyIG1pc2NlbGxhbmVvdXMgMzItYml0IHZhbHVlcworICovCisKK3N0cnVjdCBtc3FpZDY0X2RzIHsKKwlzdHJ1Y3QgaXBjNjRfcGVybSBtc2dfcGVybTsKKwlfX2tlcm5lbF90aW1lX3QgbXNnX3N0aW1lOwkvKiBsYXN0IG1zZ3NuZCB0aW1lICovCisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDE7CisJX19rZXJuZWxfdGltZV90IG1zZ19ydGltZTsJLyogbGFzdCBtc2dyY3YgdGltZSAqLworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQyOworCV9fa2VybmVsX3RpbWVfdCBtc2dfY3RpbWU7CS8qIGxhc3QgY2hhbmdlIHRpbWUgKi8KKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkMzsKKwl1bnNpZ25lZCBsb25nICBtc2dfY2J5dGVzOwkvKiBjdXJyZW50IG51bWJlciBvZiBieXRlcyBvbiBxdWV1ZSAqLworCXVuc2lnbmVkIGxvbmcgIG1zZ19xbnVtOwkvKiBudW1iZXIgb2YgbWVzc2FnZXMgaW4gcXVldWUgKi8KKwl1bnNpZ25lZCBsb25nICBtc2dfcWJ5dGVzOwkvKiBtYXggbnVtYmVyIG9mIGJ5dGVzIG9uIHF1ZXVlICovCisJX19rZXJuZWxfcGlkX3QgbXNnX2xzcGlkOwkvKiBwaWQgb2YgbGFzdCBtc2dzbmQgKi8KKwlfX2tlcm5lbF9waWRfdCBtc2dfbHJwaWQ7CS8qIGxhc3QgcmVjZWl2ZSBwaWQgKi8KKwl1bnNpZ25lZCBsb25nICBfX3VudXNlZDQ7CisJdW5zaWduZWQgbG9uZyAgX191bnVzZWQ1OworfTsKKworI2VuZGlmIC8qIF9DUklTX01TR0JVRl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1jcmlzL25hbWVpLmggYi9pbmNsdWRlL2FzbS1jcmlzL25hbWVpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGEzYmU3YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvbmFtZWkuaApAQCAtMCwwICsxLDE3IEBACisvKiAkSWQ6IG5hbWVpLmgsdiAxLjEgMjAwMC8wNy8xMCAxNjozMjozMSBiam9ybncgRXhwICQKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLWNyaXMvbmFtZWkuaAorICoKKyAqIEluY2x1ZGVkIGZyb20gbGludXgvZnMvbmFtZWkuYworICovCisKKyNpZm5kZWYgX19DUklTX05BTUVJX0gKKyNkZWZpbmUgX19DUklTX05BTUVJX0gKKworLyogdXNlZCB0byBmaW5kIGZpbGUtc3lzdGVtIHByZWZpeGVzIGZvciBkb2luZyBlbXVsYXRpb25zCisgKiBzZWUgZm9yIGV4YW1wbGUgYXNtLXNwYXJjL25hbWVpLmgKKyAqIHdlIGRvbid0IHVzZSBpdC4uLgorICovCisKKyNkZWZpbmUgX19lbXVsX3ByZWZpeCgpIE5VTEwKKworI2VuZGlmIC8qIF9fQ1JJU19OQU1FSV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1jcmlzL3BhZ2UuaCBiL2luY2x1ZGUvYXNtLWNyaXMvcGFnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkZDg5MTUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL3BhZ2UuaApAQCAtMCwwICsxLDEwNSBAQAorI2lmbmRlZiBfQ1JJU19QQUdFX0gKKyNkZWZpbmUgX0NSSVNfUEFHRV9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9wYWdlLmg+CisKKy8qIFBBR0VfU0hJRlQgZGV0ZXJtaW5lcyB0aGUgcGFnZSBzaXplICovCisjZGVmaW5lIFBBR0VfU0hJRlQJMTMKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjZGVmaW5lIFBBR0VfU0laRQkoMVVMIDw8IFBBR0VfU0hJRlQpCisjZWxzZQorI2RlZmluZSBQQUdFX1NJWkUJKDEgPDwgUEFHRV9TSElGVCkKKyNlbmRpZgorI2RlZmluZSBQQUdFX01BU0sJKH4oUEFHRV9TSVpFLTEpKQorCisjaWZkZWYgX19LRVJORUxfXworCisjZGVmaW5lIGNsZWFyX3BhZ2UocGFnZSkgICAgICAgIG1lbXNldCgodm9pZCAqKShwYWdlKSwgMCwgUEFHRV9TSVpFKQorI2RlZmluZSBjb3B5X3BhZ2UodG8sZnJvbSkgICAgICBtZW1jcHkoKHZvaWQgKikodG8pLCAodm9pZCAqKShmcm9tKSwgUEFHRV9TSVpFKQorCisjZGVmaW5lIGNsZWFyX3VzZXJfcGFnZShwYWdlLCB2YWRkciwgcGcpICAgIGNsZWFyX3BhZ2UocGFnZSkKKyNkZWZpbmUgY29weV91c2VyX3BhZ2UodG8sIGZyb20sIHZhZGRyLCBwZykgY29weV9wYWdlKHRvLCBmcm9tKQorCisjZGVmaW5lIGFsbG9jX3plcm9lZF91c2VyX2hpZ2hwYWdlKHZtYSwgdmFkZHIpIGFsbG9jX3BhZ2Vfdm1hKEdGUF9ISUdIVVNFUiB8IF9fR0ZQX1pFUk8sIHZtYSwgdmFkZHIpCisjZGVmaW5lIF9fSEFWRV9BUkNIX0FMTE9DX1pFUk9FRF9VU0VSX0hJR0hQQUdFCisKKy8qCisgKiBUaGVzZSBhcmUgdXNlZCB0byBtYWtlIHVzZSBvZiBDIHR5cGUtY2hlY2tpbmcuLgorICovCisjaWZuZGVmIF9fQVNTRU1CTFlfXwordHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHB0ZTsgfSBwdGVfdDsKK3R5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBwbWQ7IH0gcG1kX3Q7Cit0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgcGdkOyB9IHBnZF90OwordHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHBncHJvdDsgfSBwZ3Byb3RfdDsKKyNlbmRpZgorCisjZGVmaW5lIHB0ZV92YWwoeCkJKCh4KS5wdGUpCisjZGVmaW5lIHBtZF92YWwoeCkJKCh4KS5wbWQpCisjZGVmaW5lIHBnZF92YWwoeCkJKCh4KS5wZ2QpCisjZGVmaW5lIHBncHJvdF92YWwoeCkJKCh4KS5wZ3Byb3QpCisKKyNkZWZpbmUgX19wdGUoeCkJKChwdGVfdCkgeyAoeCkgfSApCisjZGVmaW5lIF9fcG1kKHgpCSgocG1kX3QpIHsgKHgpIH0gKQorI2RlZmluZSBfX3BnZCh4KQkoKHBnZF90KSB7ICh4KSB9ICkKKyNkZWZpbmUgX19wZ3Byb3QoeCkJKChwZ3Byb3RfdCkgeyAoeCkgfSApCisKKy8qIE9uIENSSVMgdGhlIFBGTiBudW1iZXJzIGRvZXNuJ3Qgc3RhcnQgYXQgMCBzbyB3ZSBoYXZlIHRvIGNvbXBlbnNhdGUgKi8KKy8qIGZvciB0aGF0IGJlZm9yZSBpbmRleGluZyBpbnRvIHRoZSBwYWdlIHRhYmxlIHN0YXJ0aW5nIGF0IG1lbV9tYXAgICAgKi8KKyNkZWZpbmUgcGZuX3RvX3BhZ2UocGZuKQkobWVtX21hcCArICgocGZuKSAtIChQQUdFX09GRlNFVCA+PiBQQUdFX1NISUZUKSkpCisjZGVmaW5lIHBhZ2VfdG9fcGZuKHBhZ2UpCSgodW5zaWduZWQgbG9uZykoKHBhZ2UpIC0gbWVtX21hcCkgKyAoUEFHRV9PRkZTRVQgPj4gUEFHRV9TSElGVCkpCisjZGVmaW5lIHBmbl92YWxpZChwZm4pCQkoKChwZm4pIC0gKFBBR0VfT0ZGU0VUID4+IFBBR0VfU0hJRlQpKSA8IG1heF9tYXBucikKKworLyogdG8gaW5kZXggaW50byB0aGUgcGFnZSBtYXAuIG91ciBwYWdlcyBhbGwgc3RhcnQgYXQgcGh5c2ljYWwgYWRkciBQQUdFX09GRlNFVCBzbworICogd2UgY2FuIGxldCB0aGUgbWFwIHN0YXJ0IHRoZXJlLiBub3RpY2UgdGhhdCB3ZSBzdWJ0cmFjdCBQQUdFX09GRlNFVCBiZWNhdXNlCisgKiB3ZSBzdGFydCBvdXIgbWVtX21hcCB0aGVyZSAtIGluIG90aGVyIHBvcnRzIHRoZXkgbWFwIG1lbV9tYXAgcGh5c2ljYWxseSBhbmQKKyAqIHVzZSBfX3BhIGluc3RlYWQuIGluIG91ciBzeXN0ZW0gYm90aCB0aGUgcGh5c2ljYWwgYW5kIHZpcnR1YWwgYWRkcmVzcyBvZiBEUkFNCisgKiBpcyB0b28gaGlnaCB0byBsZXQgbWVtX21hcCBzdGFydCBhdCAwLCBzbyB3ZSBkbyBpdCB0aGlzIHdheSBpbnN0ZWFkIChzaW1pbGFyCisgKiB0byBhcm0gYW5kIG02OGsgSSB0aGluaykKKyAqLyAKKworI2RlZmluZSB2aXJ0X3RvX3BhZ2Uoa2FkZHIpICAgIChtZW1fbWFwICsgKCgodW5zaWduZWQgbG9uZykoa2FkZHIpIC0gUEFHRV9PRkZTRVQpID4+IFBBR0VfU0hJRlQpKQorI2RlZmluZSBWQUxJRF9QQUdFKHBhZ2UpICAgICAgICgoKHBhZ2UpIC0gbWVtX21hcCkgPCBtYXhfbWFwbnIpCisjZGVmaW5lIHZpcnRfYWRkcl92YWxpZChrYWRkcikJcGZuX3ZhbGlkKCh1bnNpZ25lZCkoa2FkZHIpID4+IFBBR0VfU0hJRlQpCisKKy8qIGNvbnZlcnQgYSBwYWdlIChiYXNlZCBvbiBtZW1fbWFwIGFuZCBmb3J3YXJkKSB0byBhIHBoeXNpY2FsIGFkZHJlc3MKKyAqIGRvIHRoaXMgYnkgZmlndXJpbmcgb3V0IHRoZSB2aXJ0dWFsIGFkZHJlc3MgYW5kIHRoZW4gdXNlIF9fcGEKKyAqLworCisjZGVmaW5lIHBhZ2VfdG9fcGh5cyhwYWdlKSAgICAgX19wYSgoKChwYWdlKSAtIG1lbV9tYXApIDw8IFBBR0VfU0hJRlQpICsgUEFHRV9PRkZTRVQpCisKKy8qIHRvIGFsaWduIHRoZSBwb2ludGVyIHRvIHRoZSAobmV4dCkgcGFnZSBib3VuZGFyeSAqLworI2RlZmluZSBQQUdFX0FMSUdOKGFkZHIpCSgoKGFkZHIpK1BBR0VfU0laRS0xKSZQQUdFX01BU0spCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNkZWZpbmUgQlVHKCkgZG8geyBcCisgIHByaW50aygia2VybmVsIEJVRyBhdCAlczolZCFcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyk7IFwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgUEFHRV9CVUcocGFnZSkgZG8geyBcCisgICAgICAgICBCVUcoKTsgXAorfSB3aGlsZSAoMCkKKworLyogUHVyZSAyXm4gdmVyc2lvbiBvZiBnZXRfb3JkZXIgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGdldF9vcmRlcih1bnNpZ25lZCBsb25nIHNpemUpCit7CisJaW50IG9yZGVyOworCisJc2l6ZSA9IChzaXplLTEpID4+IChQQUdFX1NISUZULTEpOworCW9yZGVyID0gLTE7CisJZG8geworCQlzaXplID4+PSAxOworCQlvcmRlcisrOworCX0gd2hpbGUgKHNpemUpOworCXJldHVybiBvcmRlcjsKK30KKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworI2RlZmluZSBWTV9EQVRBX0RFRkFVTFRfRkxBR1MJKFZNX1JFQUQgfCBWTV9XUklURSB8IFZNX0VYRUMgfCBcCisJCQkJIFZNX01BWVJFQUQgfCBWTV9NQVlXUklURSB8IFZNX01BWUVYRUMpCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfQ1JJU19QQUdFX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy9wYXJhbS5oIGIvaW5jbHVkZS9hc20tY3Jpcy9wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyNDk3MjYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL3BhcmFtLmgKQEAgLTAsMCArMSwyMyBAQAorI2lmbmRlZiBfQVNNQ1JJU19QQVJBTV9ICisjZGVmaW5lIF9BU01DUklTX1BBUkFNX0gKKworLyogQ3VycmVudGx5IHdlIGFzc3VtZSB0aGF0IEhaPTEwMCBpcyBnb29kIGZvciBDUklTLiAqLworI2lmZGVmIF9fS0VSTkVMX18KKyMgZGVmaW5lIEhaCQkxMDAJCS8qIEludGVybmFsIGtlcm5lbCB0aW1lciBmcmVxdWVuY3kgKi8KKyMgZGVmaW5lIFVTRVJfSFoJMTAwCQkvKiAuLiBzb21lIHVzZXIgaW50ZXJmYWNlcyBhcmUgaW4gInRpY2tzIiAqLworIyBkZWZpbmUgQ0xPQ0tTX1BFUl9TRUMJKFVTRVJfSFopCS8qIGxpa2UgdGltZXMoKSAqLworI2VuZGlmCisKKyNpZm5kZWYgSFoKKyNkZWZpbmUgSFogMTAwCisjZW5kaWYKKworI2RlZmluZSBFWEVDX1BBR0VTSVpFCTgxOTIKKworI2lmbmRlZiBOT0dST1VQCisjZGVmaW5lIE5PR1JPVVAJCSgtMSkKKyNlbmRpZgorCisjZGVmaW5lIE1BWEhPU1ROQU1FTEVOCTY0CS8qIG1heCBsZW5ndGggb2YgaG9zdG5hbWUgKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1jcmlzL3BjaS5oIGIvaW5jbHVkZS9hc20tY3Jpcy9wY2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjEwNDE1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9wY2kuaApAQCAtMCwwICsxLDEzIEBACisjaWZuZGVmIF9fQVNNX0NSSVNfUENJX0gKKyNkZWZpbmUgX19BU01fQ1JJU19QQ0lfSAorCisjaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGNpLWRtYS1jb21wYXQuaD4KKworLyogRVRSQVggY2hpcHMgZG9uJ3QgaGF2ZSBhIFBDSSBidXMuIFRoaXMgZmlsZSBpcyBqdXN0IGhlcmUgYmVjYXVzZSBzb21lIHN0dXBpZCAuYyBjb2RlCisgKiBpbmNsdWRlcyBpdCBldmVuIGlmIENPTkZJR19QQ0kgaXMgbm90IHNldC4KKyAqLworI2RlZmluZSBQQ0lfRE1BX0JVU19JU19QSFlTICAgICAgICgxKQorCisjZW5kaWYgLyogX19BU01fQ1JJU19QQ0lfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1jcmlzL3BlcmNwdS5oIGIvaW5jbHVkZS9hc20tY3Jpcy9wZXJjcHUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGI5YjQzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9wZXJjcHUuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX0NSSVNfUEVSQ1BVX0gKKyNkZWZpbmUgX0NSSVNfUEVSQ1BVX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BlcmNwdS5oPgorCisjZW5kaWYgLyogX0NSSVNfUEVSQ1BVX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvcGdhbGxvYy5oIGIvaW5jbHVkZS9hc20tY3Jpcy9wZ2FsbG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjIwMmU2MgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvcGdhbGxvYy5oCkBAIC0wLDAgKzEsNjIgQEAKKyNpZm5kZWYgX0NSSVNfUEdBTExPQ19ICisjZGVmaW5lIF9DUklTX1BHQUxMT0NfSAorCisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisKKyNkZWZpbmUgcG1kX3BvcHVsYXRlX2tlcm5lbChtbSwgcG1kLCBwdGUpIHBtZF9zZXQocG1kLCBwdGUpCisjZGVmaW5lIHBtZF9wb3B1bGF0ZShtbSwgcG1kLCBwdGUpIHBtZF9zZXQocG1kLCBwYWdlX2FkZHJlc3MocHRlKSkKKworLyoKKyAqIEFsbG9jYXRlIGFuZCBmcmVlIHBhZ2UgdGFibGVzLgorICovCisKK2V4dGVybiBpbmxpbmUgcGdkX3QgKnBnZF9hbGxvYyAoc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJcmV0dXJuIChwZ2RfdCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKK30KKworZXh0ZXJuIGlubGluZSB2b2lkIHBnZF9mcmVlIChwZ2RfdCAqcGdkKQoreworCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylwZ2QpOworfQorCitleHRlcm4gaW5saW5lIHB0ZV90ICpwdGVfYWxsb2Nfb25lX2tlcm5lbChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworICAJcHRlX3QgKnB0ZSA9IChwdGVfdCAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMfF9fR0ZQX1JFUEVBVHxfX0dGUF9aRVJPKTsKKyAJcmV0dXJuIHB0ZTsKK30KKworZXh0ZXJuIGlubGluZSBzdHJ1Y3QgcGFnZSAqcHRlX2FsbG9jX29uZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCXN0cnVjdCBwYWdlICpwdGU7CisJcHRlID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTHxfX0dGUF9SRVBFQVR8X19HRlBfWkVSTywgMCk7CisJcmV0dXJuIHB0ZTsKK30KKworZXh0ZXJuIGlubGluZSB2b2lkIHB0ZV9mcmVlX2tlcm5lbChwdGVfdCAqcHRlKQoreworCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylwdGUpOworfQorCitleHRlcm4gaW5saW5lIHZvaWQgcHRlX2ZyZWUoc3RydWN0IHBhZ2UgKnB0ZSkKK3sKKwlfX2ZyZWVfcGFnZShwdGUpOworfQorCisKKyNkZWZpbmUgX19wdGVfZnJlZV90bGIodGxiLHB0ZSkgdGxiX3JlbW92ZV9wYWdlKCh0bGIpLChwdGUpKQorCisvKgorICogV2UgZG9uJ3QgaGF2ZSBhbnkgcmVhbCBwbWQncywgYW5kIHRoaXMgY29kZSBuZXZlciB0cmlnZ2VycyBiZWNhdXNlCisgKiB0aGUgcGdkIHdpbGwgYWx3YXlzIGJlIHByZXNlbnQuLgorICovCisKKyNkZWZpbmUgcG1kX2FsbG9jX29uZShtbSwgYWRkcikgICAgKHsgQlVHKCk7ICgocG1kX3QgKikyKTsgfSkKKyNkZWZpbmUgcG1kX2ZyZWUoeCkgICAgICAgICAgICAgICAgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBfX3BtZF9mcmVlX3RsYih0bGIseCkgICAgICBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHBnZF9wb3B1bGF0ZShtbSwgcG1kLCBwdGUpIEJVRygpCisKKyNkZWZpbmUgY2hlY2tfcGd0X2NhY2hlKCkgICAgICAgICAgZG8geyB9IHdoaWxlICgwKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20tY3Jpcy9wZ3RhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU3ZGQ5MgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvcGd0YWJsZS5oCkBAIC0wLDAgKzEsMzUyIEBACisvKgorICogQ1JJUyBwZ3RhYmxlLmggLSBtYWNyb3MgYW5kIGZ1bmN0aW9ucyB0byBtYW5pcHVsYXRlIHBhZ2UgdGFibGVzLgorICovCisKKyNpZm5kZWYgX0NSSVNfUEdUQUJMRV9ICisjZGVmaW5lIF9DUklTX1BHVEFCTEVfSAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvNGxldmVsLWZpeHVwLmg+CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxhc20vbW11Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDxhc20vYXJjaC9wZ3RhYmxlLmg+CisKKy8qCisgKiBUaGUgTGludXggbWVtb3J5IG1hbmFnZW1lbnQgYXNzdW1lcyBhIHRocmVlLWxldmVsIHBhZ2UgdGFibGUgc2V0dXAuIE9uCisgKiBDUklTLCB3ZSB1c2UgdGhhdCwgYnV0ICJmb2xkIiB0aGUgbWlkIGxldmVsIGludG8gdGhlIHRvcC1sZXZlbCBwYWdlCisgKiB0YWJsZS4gU2luY2UgdGhlIE1NVSBUTEIgaXMgc29mdHdhcmUgbG9hZGVkIHRocm91Z2ggYW4gaW50ZXJydXB0LCBpdAorICogc3VwcG9ydHMgYW55IHBhZ2UgdGFibGUgc3RydWN0dXJlLCBzbyB3ZSBjb3VsZCBoYXZlIHVzZWQgYSB0aHJlZS1sZXZlbAorICogc2V0dXAsIGJ1dCBmb3IgdGhlIGFtb3VudHMgb2YgbWVtb3J5IHdlIG5vcm1hbGx5IHVzZSwgYSB0d28tbGV2ZWwgaXMKKyAqIHByb2JhYmx5IG1vcmUgZWZmaWNpZW50LgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZnVuY3Rpb25zIGFuZCBkZWZpbmVzIG5lY2Vzc2FyeSB0byBtb2RpZnkgYW5kIHVzZQorICogdGhlIENSSVMgcGFnZSB0YWJsZSB0cmVlLgorICovCisjaWZuZGVmIF9fQVNTRU1CTFlfXworZXh0ZXJuIHZvaWQgcGFnaW5nX2luaXQodm9pZCk7CisjZW5kaWYKKworLyogQ2VydGFpbiBhcmNoaXRlY3R1cmVzIG5lZWQgdG8gZG8gc3BlY2lhbCB0aGluZ3Mgd2hlbiBwdGUncworICogd2l0aGluIGEgcGFnZSB0YWJsZSBhcmUgZGlyZWN0bHkgbW9kaWZpZWQuICBUaHVzLCB0aGUgZm9sbG93aW5nCisgKiBob29rIGlzIG1hZGUgYXZhaWxhYmxlLgorICovCisjZGVmaW5lIHNldF9wdGUocHRlcHRyLCBwdGV2YWwpICgoKihwdGVwdHIpKSA9IChwdGV2YWwpKQorI2RlZmluZSBzZXRfcHRlX2F0KG1tLGFkZHIscHRlcCxwdGV2YWwpIHNldF9wdGUocHRlcCxwdGV2YWwpCisKKy8qCisgKiAocG1kcyBhcmUgZm9sZGVkIGludG8gcGdkcyBzbyB0aGlzIGRvZXNuJ3QgZ2V0IGFjdHVhbGx5IGNhbGxlZCwKKyAqIGJ1dCB0aGUgZGVmaW5lIGlzIG5lZWRlZCBmb3IgYSBnZW5lcmljIGlubGluZSBmdW5jdGlvbi4pCisgKi8KKyNkZWZpbmUgc2V0X3BtZChwbWRwdHIsIHBtZHZhbCkgKCoocG1kcHRyKSA9IHBtZHZhbCkKKyNkZWZpbmUgc2V0X3BnZChwZ2RwdHIsIHBnZHZhbCkgKCoocGdkcHRyKSA9IHBnZHZhbCkKKworLyogUE1EX1NISUZUIGRldGVybWluZXMgdGhlIHNpemUgb2YgdGhlIGFyZWEgYSBzZWNvbmQtbGV2ZWwgcGFnZSB0YWJsZSBjYW4KKyAqIG1hcC4gSXQgaXMgZXF1YWwgdG8gdGhlIHBhZ2Ugc2l6ZSB0aW1lcyB0aGUgbnVtYmVyIG9mIFBURSdzIHRoYXQgZml0IGluCisgKiBhIFBNRCBwYWdlLiBBIFBURSBpcyA0LWJ5dGVzIGluIENSSVMuIEhlbmNlIHRoZSBmb2xsb3dpbmcgbnVtYmVyLgorICovCisKKyNkZWZpbmUgUE1EX1NISUZUCShQQUdFX1NISUZUICsgKFBBR0VfU0hJRlQtMikpCisjZGVmaW5lIFBNRF9TSVpFCSgxVUwgPDwgUE1EX1NISUZUKQorI2RlZmluZSBQTURfTUFTSwkofihQTURfU0laRS0xKSkKKworLyogUEdESVJfU0hJRlQgZGV0ZXJtaW5lcyB3aGF0IGEgdGhpcmQtbGV2ZWwgcGFnZSB0YWJsZSBlbnRyeSBjYW4gbWFwLgorICogU2luY2Ugd2UgZm9sZCBpbnRvIGEgdHdvLWxldmVsIHN0cnVjdHVyZSwgdGhpcyBpcyB0aGUgc2FtZSBhcyBQTURfU0hJRlQuCisgKi8KKworI2RlZmluZSBQR0RJUl9TSElGVAlQTURfU0hJRlQKKyNkZWZpbmUgUEdESVJfU0laRQkoMVVMIDw8IFBHRElSX1NISUZUKQorI2RlZmluZSBQR0RJUl9NQVNLCSh+KFBHRElSX1NJWkUtMSkpCisKKy8qCisgKiBlbnRyaWVzIHBlciBwYWdlIGRpcmVjdG9yeSBsZXZlbDogd2UgdXNlIGEgdHdvLWxldmVsLCBzbworICogd2UgZG9uJ3QgcmVhbGx5IGhhdmUgYW55IFBNRCBkaXJlY3RvcnkgcGh5c2ljYWxseS4KKyAqIHBvaW50ZXJzIGFyZSA0IGJ5dGVzIHNvIHdlIGNhbiB1c2UgdGhlIHBhZ2Ugc2l6ZSBhbmQgCisgKiBkaXZpZGUgaXQgYnkgNCAoc2hpZnQgYnkgMikuCisgKi8KKyNkZWZpbmUgUFRSU19QRVJfUFRFCSgxVUwgPDwgKFBBR0VfU0hJRlQtMikpCisjZGVmaW5lIFBUUlNfUEVSX1BNRAkxCisjZGVmaW5lIFBUUlNfUEVSX1BHRAkoMVVMIDw8IChQQUdFX1NISUZULTIpKQorCisvKiBjYWxjdWxhdGUgaG93IG1hbnkgUEdEIGVudHJpZXMgYSB1c2VyLWxldmVsIHByb2dyYW0gY2FuIHVzZQorICogdGhlIGZpcnN0IG1hcHBhYmxlIHZpcnR1YWwgYWRkcmVzcyBpcyAwCisgKiAoVEFTS19TSVpFIGlzIHRoZSBtYXhpbXVtIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSkKKyAqLworCisjZGVmaW5lIFVTRVJfUFRSU19QRVJfUEdEICAgICAgIChUQVNLX1NJWkUvUEdESVJfU0laRSkKKyNkZWZpbmUgRklSU1RfVVNFUl9QR0RfTlIgICAgICAgMAorCisvKiB6ZXJvIHBhZ2UgdXNlZCBmb3IgdW5pbml0aWFsaXplZCBzdHVmZiAqLworI2lmbmRlZiBfX0FTU0VNQkxZX18KK2V4dGVybiB1bnNpZ25lZCBsb25nIGVtcHR5X3plcm9fcGFnZTsKKyNkZWZpbmUgWkVST19QQUdFKHZhZGRyKSAodmlydF90b19wYWdlKGVtcHR5X3plcm9fcGFnZSkpCisjZW5kaWYKKworLyogbnVtYmVyIG9mIGJpdHMgdGhhdCBmaXQgaW50byBhIG1lbW9yeSBwb2ludGVyICovCisjZGVmaW5lIEJJVFNfUEVSX1BUUgkJCSg4KnNpemVvZih1bnNpZ25lZCBsb25nKSkKKworLyogdG8gYWxpZ24gdGhlIHBvaW50ZXIgdG8gYSBwb2ludGVyIGFkZHJlc3MgKi8KKyNkZWZpbmUgUFRSX01BU0sJCQkofihzaXplb2Yodm9pZCopLTEpKQorCisvKiBzaXplb2Yodm9pZCopPT0xPDxTSVpFT0ZfUFRSX0xPRzIgKi8KKy8qIDY0LWJpdCBtYWNoaW5lcywgYmV3YXJlISAgU1JCLiAqLworI2RlZmluZSBTSVpFT0ZfUFRSX0xPRzIJCQkyCisKKy8qIHRvIGZpbmQgYW4gZW50cnkgaW4gYSBwYWdlLXRhYmxlICovCisjZGVmaW5lIFBBR0VfUFRSKGFkZHJlc3MpIFwKKygodW5zaWduZWQgbG9uZykoYWRkcmVzcyk+PihQQUdFX1NISUZULVNJWkVPRl9QVFJfTE9HMikmUFRSX01BU0smflBBR0VfTUFTSykKKworLyogdG8gc2V0IHRoZSBwYWdlLWRpciAqLworI2RlZmluZSBTRVRfUEFHRV9ESVIodHNrLHBnZGlyKQorCisjZGVmaW5lIHB0ZV9ub25lKHgpCSghcHRlX3ZhbCh4KSkKKyNkZWZpbmUgcHRlX3ByZXNlbnQoeCkJKHB0ZV92YWwoeCkgJiBfUEFHRV9QUkVTRU5UKQorI2RlZmluZSBwdGVfY2xlYXIobW0sYWRkcix4cCkJZG8geyBwdGVfdmFsKCooeHApKSA9IDA7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgcG1kX25vbmUoeCkJKCFwbWRfdmFsKHgpKQorLyogYnkgcmVtb3ZpbmcgdGhlIF9QQUdFX0tFUk5FTCBiaXQgZnJvbSB0aGUgY29tcGFyaXNpb24sIHRoZSBzYW1lIHBtZF9iYWQKKyAqIHdvcmtzIGZvciBib3RoIF9QQUdFX1RBQkxFIGFuZCBfS0VSTlBHX1RBQkxFIHBtZCBlbnRyaWVzLgorICovCisjZGVmaW5lCXBtZF9iYWQoeCkJKChwbWRfdmFsKHgpICYgKH5QQUdFX01BU0sgJiB+X1BBR0VfS0VSTkVMKSkgIT0gX1BBR0VfVEFCTEUpCisjZGVmaW5lIHBtZF9wcmVzZW50KHgpCShwbWRfdmFsKHgpICYgX1BBR0VfUFJFU0VOVCkKKyNkZWZpbmUgcG1kX2NsZWFyKHhwKQlkbyB7IHBtZF92YWwoKih4cCkpID0gMDsgfSB3aGlsZSAoMCkKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworLyoKKyAqIFRoZSAicGdkX3h4eCgpIiBmdW5jdGlvbnMgaGVyZSBhcmUgdHJpdmlhbCBmb3IgYSBmb2xkZWQgdHdvLWxldmVsCisgKiBzZXR1cDogdGhlIHBnZCBpcyBuZXZlciBiYWQsIGFuZCBhIHBtZCBhbHdheXMgZXhpc3RzIChhcyBpdCdzIGZvbGRlZAorICogaW50byB0aGUgcGdkIGVudHJ5KQorICovCitleHRlcm4gaW5saW5lIGludCBwZ2Rfbm9uZShwZ2RfdCBwZ2QpCQl7IHJldHVybiAwOyB9CitleHRlcm4gaW5saW5lIGludCBwZ2RfYmFkKHBnZF90IHBnZCkJCXsgcmV0dXJuIDA7IH0KK2V4dGVybiBpbmxpbmUgaW50IHBnZF9wcmVzZW50KHBnZF90IHBnZCkJeyByZXR1cm4gMTsgfQorZXh0ZXJuIGlubGluZSB2b2lkIHBnZF9jbGVhcihwZ2RfdCAqIHBnZHApCXsgfQorCisvKgorICogVGhlIGZvbGxvd2luZyBvbmx5IHdvcmsgaWYgcHRlX3ByZXNlbnQoKSBpcyB0cnVlLgorICogVW5kZWZpbmVkIGJlaGF2aW91ciBpZiBub3QuLgorICovCisKK2V4dGVybiBpbmxpbmUgaW50IHB0ZV9yZWFkKHB0ZV90IHB0ZSkgICAgICAgICAgIHsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX1JFQUQ7IH0KK2V4dGVybiBpbmxpbmUgaW50IHB0ZV93cml0ZShwdGVfdCBwdGUpICAgICAgICAgIHsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX1dSSVRFOyB9CitleHRlcm4gaW5saW5lIGludCBwdGVfZXhlYyhwdGVfdCBwdGUpICAgICAgICAgICB7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9SRUFEOyB9CitleHRlcm4gaW5saW5lIGludCBwdGVfZGlydHkocHRlX3QgcHRlKSAgICAgICAgICB7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9NT0RJRklFRDsgfQorZXh0ZXJuIGlubGluZSBpbnQgcHRlX3lvdW5nKHB0ZV90IHB0ZSkgICAgICAgICAgeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfQUNDRVNTRUQ7IH0KK2V4dGVybiBpbmxpbmUgaW50IHB0ZV9maWxlKHB0ZV90IHB0ZSkgICAgICAgICAgIHsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX0ZJTEU7IH0KKworZXh0ZXJuIGlubGluZSBwdGVfdCBwdGVfd3Jwcm90ZWN0KHB0ZV90IHB0ZSkKK3sKKyAgICAgICAgcHRlX3ZhbChwdGUpICY9IH4oX1BBR0VfV1JJVEUgfCBfUEFHRV9TSUxFTlRfV1JJVEUpOworICAgICAgICByZXR1cm4gcHRlOworfQorCitleHRlcm4gaW5saW5lIHB0ZV90IHB0ZV9yZHByb3RlY3QocHRlX3QgcHRlKQoreworICAgICAgICBwdGVfdmFsKHB0ZSkgJj0gfihfUEFHRV9SRUFEIHwgX1BBR0VfU0lMRU5UX1JFQUQpOworCXJldHVybiBwdGU7Cit9CisKK2V4dGVybiBpbmxpbmUgcHRlX3QgcHRlX2V4cHJvdGVjdChwdGVfdCBwdGUpCit7CisgICAgICAgIHB0ZV92YWwocHRlKSAmPSB+KF9QQUdFX1JFQUQgfCBfUEFHRV9TSUxFTlRfUkVBRCk7CisJcmV0dXJuIHB0ZTsKK30KKworZXh0ZXJuIGlubGluZSBwdGVfdCBwdGVfbWtjbGVhbihwdGVfdCBwdGUpCit7CisJcHRlX3ZhbChwdGUpICY9IH4oX1BBR0VfTU9ESUZJRUQgfCBfUEFHRV9TSUxFTlRfV1JJVEUpOyAKKwlyZXR1cm4gcHRlOyAKK30KKworZXh0ZXJuIGlubGluZSBwdGVfdCBwdGVfbWtvbGQocHRlX3QgcHRlKQoreworCXB0ZV92YWwocHRlKSAmPSB+KF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfU0lMRU5UX1JFQUQpOworCXJldHVybiBwdGU7Cit9CisKK2V4dGVybiBpbmxpbmUgcHRlX3QgcHRlX21rd3JpdGUocHRlX3QgcHRlKQoreworICAgICAgICBwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfV1JJVEU7CisgICAgICAgIGlmIChwdGVfdmFsKHB0ZSkgJiBfUEFHRV9NT0RJRklFRCkKKyAgICAgICAgICAgICAgICBwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfU0lMRU5UX1dSSVRFOworICAgICAgICByZXR1cm4gcHRlOworfQorCitleHRlcm4gaW5saW5lIHB0ZV90IHB0ZV9ta3JlYWQocHRlX3QgcHRlKQoreworICAgICAgICBwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfUkVBRDsKKyAgICAgICAgaWYgKHB0ZV92YWwocHRlKSAmIF9QQUdFX0FDQ0VTU0VEKQorICAgICAgICAgICAgICAgIHB0ZV92YWwocHRlKSB8PSBfUEFHRV9TSUxFTlRfUkVBRDsKKyAgICAgICAgcmV0dXJuIHB0ZTsKK30KKworZXh0ZXJuIGlubGluZSBwdGVfdCBwdGVfbWtleGVjKHB0ZV90IHB0ZSkKK3sKKyAgICAgICAgcHRlX3ZhbChwdGUpIHw9IF9QQUdFX1JFQUQ7CisgICAgICAgIGlmIChwdGVfdmFsKHB0ZSkgJiBfUEFHRV9BQ0NFU1NFRCkKKyAgICAgICAgICAgICAgICBwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfU0lMRU5UX1JFQUQ7CisgICAgICAgIHJldHVybiBwdGU7Cit9CisKK2V4dGVybiBpbmxpbmUgcHRlX3QgcHRlX21rZGlydHkocHRlX3QgcHRlKQoreworICAgICAgICBwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfTU9ESUZJRUQ7CisgICAgICAgIGlmIChwdGVfdmFsKHB0ZSkgJiBfUEFHRV9XUklURSkKKyAgICAgICAgICAgICAgICBwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfU0lMRU5UX1dSSVRFOworICAgICAgICByZXR1cm4gcHRlOworfQorCitleHRlcm4gaW5saW5lIHB0ZV90IHB0ZV9ta3lvdW5nKHB0ZV90IHB0ZSkKK3sKKyAgICAgICAgcHRlX3ZhbChwdGUpIHw9IF9QQUdFX0FDQ0VTU0VEOworICAgICAgICBpZiAocHRlX3ZhbChwdGUpICYgX1BBR0VfUkVBRCkKKyAgICAgICAgeworICAgICAgICAgICAgICAgIHB0ZV92YWwocHRlKSB8PSBfUEFHRV9TSUxFTlRfUkVBRDsKKyAgICAgICAgICAgICAgICBpZiAoKHB0ZV92YWwocHRlKSAmIChfUEFHRV9XUklURSB8IF9QQUdFX01PRElGSUVEKSkgPT0KKwkJICAgIChfUEFHRV9XUklURSB8IF9QQUdFX01PRElGSUVEKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHB0ZV92YWwocHRlKSB8PSBfUEFHRV9TSUxFTlRfV1JJVEU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHB0ZTsKK30KKworLyoKKyAqIENvbnZlcnNpb24gZnVuY3Rpb25zOiBjb252ZXJ0IGEgcGFnZSBhbmQgcHJvdGVjdGlvbiB0byBhIHBhZ2UgZW50cnksCisgKiBhbmQgYSBwYWdlIGVudHJ5IGFuZCBwYWdlIGRpcmVjdG9yeSB0byB0aGUgcGFnZSB0aGV5IHJlZmVyIHRvLgorICovCisKKy8qIFdoYXQgYWN0dWFsbHkgZ29lcyBhcyBhcmd1bWVudHMgdG8gdGhlIHZhcmlvdXMgZnVuY3Rpb25zIGlzIGxlc3MgdGhhbgorICogb2J2aW91cywgYnV0IGEgcnVsZSBvZiB0aHVtYiBpcyB0aGF0IHN0cnVjdCBwYWdlJ3MgZ29lcyBhcyBzdHJ1Y3QgcGFnZSAqLAorICogcmVhbGx5IHBoeXNpY2FsIERSQU0gYWRkcmVzc2VzIGFyZSB1bnNpZ25lZCBsb25nJ3MsIGFuZCBEUkFNICJ2aXJ0dWFsIgorICogYWRkcmVzc2VzICh0aGUgMHhjMHh4eHh4eCdzKSBnb2VzIGFzIHZvaWQgKidzLgorICovCisKK2V4dGVybiBpbmxpbmUgcHRlX3QgX19ta19wdGUodm9pZCAqIHBhZ2UsIHBncHJvdF90IHBncHJvdCkKK3sKKwlwdGVfdCBwdGU7CisJLyogdGhlIFBURSBuZWVkcyBhIHBoeXNpY2FsIGFkZHJlc3MgKi8KKwlwdGVfdmFsKHB0ZSkgPSBfX3BhKHBhZ2UpIHwgcGdwcm90X3ZhbChwZ3Byb3QpOworCXJldHVybiBwdGU7Cit9CisKKyNkZWZpbmUgbWtfcHRlKHBhZ2UsIHBncHJvdCkgX19ta19wdGUocGFnZV9hZGRyZXNzKHBhZ2UpLCAocGdwcm90KSkKKworI2RlZmluZSBta19wdGVfcGh5cyhwaHlzcGFnZSwgcGdwcm90KSBcCisoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHB0ZV90IF9fcHRlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHB0ZV92YWwoX19wdGUpID0gKHBoeXNwYWdlKSArIHBncHJvdF92YWwocGdwcm90KTsgICAgICAgICAgICAgICBcCisgICAgICAgIF9fcHRlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9KQorCitleHRlcm4gaW5saW5lIHB0ZV90IHB0ZV9tb2RpZnkocHRlX3QgcHRlLCBwZ3Byb3RfdCBuZXdwcm90KQoreyBwdGVfdmFsKHB0ZSkgPSAocHRlX3ZhbChwdGUpICYgX1BBR0VfQ0hHX01BU0spIHwgcGdwcm90X3ZhbChuZXdwcm90KTsgcmV0dXJuIHB0ZTsgfQorCisKKy8qIHB0ZV92YWwgcmVmZXJzIHRvIGEgcGFnZSBpbiB0aGUgMHg0eHh4eHh4eCBwaHlzaWNhbCBEUkFNIGludGVydmFsCisgKiBfX3B0ZV9wYWdlKHB0ZV92YWwpIHJlZmVycyB0byB0aGUgInZpcnR1YWwiIERSQU0gaW50ZXJ2YWwKKyAqIHB0ZV9wYWdlbnIgcmVmZXJzIHRvIHRoZSBwYWdlLW51bWJlciBjb3VudGVkIHN0YXJ0aW5nIGZyb20gdGhlIHZpcnR1YWwgRFJBTSBzdGFydAorICovCisKK2V4dGVybiBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX3B0ZV9wYWdlKHB0ZV90IHB0ZSkKK3sKKwkvKiB0aGUgUFRFIGNvbnRhaW5zIGEgcGh5c2ljYWwgYWRkcmVzcyAqLworCXJldHVybiAodW5zaWduZWQgbG9uZylfX3ZhKHB0ZV92YWwocHRlKSAmIFBBR0VfTUFTSyk7Cit9CisKKyNkZWZpbmUgcHRlX3BhZ2VucihwdGUpICAgICAgICAgKChfX3B0ZV9wYWdlKHB0ZSkgLSBQQUdFX09GRlNFVCkgPj4gUEFHRV9TSElGVCkKKworLyogcGVybWFuZW50IGFkZHJlc3Mgb2YgYSBwYWdlICovCisKKyNkZWZpbmUgX19wYWdlX2FkZHJlc3MocGFnZSkgICAgKFBBR0VfT0ZGU0VUICsgKCgocGFnZSkgLSBtZW1fbWFwKSA8PCBQQUdFX1NISUZUKSkKKyNkZWZpbmUgcHRlX3BhZ2UocHRlKSAgICAgICAgICAgKG1lbV9tYXArcHRlX3BhZ2VucihwdGUpKQorCisvKiBvbmx5IHRoZSBwdGUncyB0aGVtc2VsdmVzIG5lZWQgdG8gcG9pbnQgdG8gcGh5c2ljYWwgRFJBTSAoc2VlIGFib3ZlKQorICogdGhlIHBhZ2V0YWJsZSBsaW5rcyBhcmUgcHVyZWx5IGhhbmRsZWQgd2l0aGluIHRoZSBrZXJuZWwgU1cgYW5kIHRodXMKKyAqIGRvbid0IG5lZWQgdGhlIF9fcGEgYW5kIF9fdmEgdHJhbnNmb3JtYXRpb25zLgorICovCisKK2V4dGVybiBpbmxpbmUgdm9pZCBwbWRfc2V0KHBtZF90ICogcG1kcCwgcHRlX3QgKiBwdGVwKQoreyBwbWRfdmFsKCpwbWRwKSA9IF9QQUdFX1RBQkxFIHwgKHVuc2lnbmVkIGxvbmcpIHB0ZXA7IH0KKworI2RlZmluZSBwbWRfcGFnZShwbWQpCQkocGZuX3RvX3BhZ2UocG1kX3ZhbChwbWQpID4+IFBBR0VfU0hJRlQpKQorI2RlZmluZSBwbWRfcGFnZV9rZXJuZWwocG1kKQkoKHVuc2lnbmVkIGxvbmcpIF9fdmEocG1kX3ZhbChwbWQpICYgUEFHRV9NQVNLKSkKKworLyogdG8gZmluZCBhbiBlbnRyeSBpbiBhIHBhZ2UtdGFibGUtZGlyZWN0b3J5LiAqLworI2RlZmluZSBwZ2RfaW5kZXgoYWRkcmVzcykgKChhZGRyZXNzID4+IFBHRElSX1NISUZUKSAmIChQVFJTX1BFUl9QR0QtMSkpCisKKy8qIHRvIGZpbmQgYW4gZW50cnkgaW4gYSBwYWdlLXRhYmxlLWRpcmVjdG9yeSAqLworZXh0ZXJuIGlubGluZSBwZ2RfdCAqIHBnZF9vZmZzZXQoc3RydWN0IG1tX3N0cnVjdCAqIG1tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisJcmV0dXJuIG1tLT5wZ2QgKyBwZ2RfaW5kZXgoYWRkcmVzcyk7Cit9CisKKy8qIHRvIGZpbmQgYW4gZW50cnkgaW4gYSBrZXJuZWwgcGFnZS10YWJsZS1kaXJlY3RvcnkgKi8KKyNkZWZpbmUgcGdkX29mZnNldF9rKGFkZHJlc3MpIHBnZF9vZmZzZXQoJmluaXRfbW0sIGFkZHJlc3MpCisKKy8qIEZpbmQgYW4gZW50cnkgaW4gdGhlIHNlY29uZC1sZXZlbCBwYWdlIHRhYmxlLi4gKi8KK2V4dGVybiBpbmxpbmUgcG1kX3QgKiBwbWRfb2Zmc2V0KHBnZF90ICogZGlyLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisJcmV0dXJuIChwbWRfdCAqKSBkaXI7Cit9CisKKy8qIEZpbmQgYW4gZW50cnkgaW4gdGhlIHRoaXJkLWxldmVsIHBhZ2UgdGFibGUuLiAqLworI2RlZmluZSBfX3B0ZV9vZmZzZXQoYWRkcmVzcykgXAorCSgoKGFkZHJlc3MpID4+IFBBR0VfU0hJRlQpICYgKFBUUlNfUEVSX1BURSAtIDEpKQorI2RlZmluZSBwdGVfb2Zmc2V0X2tlcm5lbChkaXIsIGFkZHJlc3MpIFwKKwkoKHB0ZV90ICopIHBtZF9wYWdlX2tlcm5lbCgqKGRpcikpICsgIF9fcHRlX29mZnNldChhZGRyZXNzKSkKKyNkZWZpbmUgcHRlX29mZnNldF9tYXAoZGlyLCBhZGRyZXNzKSBcCisJKChwdGVfdCAqKXBhZ2VfYWRkcmVzcyhwbWRfcGFnZSgqKGRpcikpKSArIF9fcHRlX29mZnNldChhZGRyZXNzKSkKKyNkZWZpbmUgcHRlX29mZnNldF9tYXBfbmVzdGVkKGRpciwgYWRkcmVzcykgcHRlX29mZnNldF9tYXAoZGlyLCBhZGRyZXNzKQorCisjZGVmaW5lIHB0ZV91bm1hcChwdGUpIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgcHRlX3VubWFwX25lc3RlZChwdGUpIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgcHRlX3Bmbih4KQkJKCh1bnNpZ25lZCBsb25nKShfX3ZhKCh4KS5wdGUpKSA+PiBQQUdFX1NISUZUKQorI2RlZmluZSBwZm5fcHRlKHBmbiwgcHJvdCkJX19wdGUoKF9fcGEoKHBmbikgPDwgUEFHRV9TSElGVCkpIHwgcGdwcm90X3ZhbChwcm90KSkKKworI2RlZmluZSBwdGVfRVJST1IoZSkgXAorICAgICAgICBwcmludGsoIiVzOiVkOiBiYWQgcHRlICVwKCUwOGx4KS5cbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgJihlKSwgcHRlX3ZhbChlKSkKKyNkZWZpbmUgcG1kX0VSUk9SKGUpIFwKKyAgICAgICAgcHJpbnRrKCIlczolZDogYmFkIHBtZCAlcCglMDhseCkuXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sICYoZSksIHBtZF92YWwoZSkpCisjZGVmaW5lIHBnZF9FUlJPUihlKSBcCisgICAgICAgIHByaW50aygiJXM6JWQ6IGJhZCBwZ2QgJXAoJTA4bHgpLlxuIiwgX19GSUxFX18sIF9fTElORV9fLCAmKGUpLCBwZ2RfdmFsKGUpKQorCisKK2V4dGVybiBwZ2RfdCBzd2FwcGVyX3BnX2RpcltQVFJTX1BFUl9QR0RdOyAvKiBkZWZpbmVkIGluIGhlYWQuUyAqLworCisvKgorICogQ1JJUyBkb2Vzbid0IGhhdmUgYW55IGV4dGVybmFsIE1NVSBpbmZvOiB0aGUga2VybmVsIHBhZ2UKKyAqIHRhYmxlcyBjb250YWluIGFsbCB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uLgorICogCisgKiBBY3R1YWxseSBJIGFtIG5vdCBzdXJlIG9uIHdoYXQgdGhpcyBjb3VsZCBiZSB1c2VkIGZvci4KKyAqLworZXh0ZXJuIGlubGluZSB2b2lkIHVwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICogdm1hLAorCXVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgcHRlKQoreworfQorCisvKiBFbmNvZGUgYW5kIGRlLWNvZGUgYSBzd2FwIGVudHJ5IChtdXN0IGJlICFwdGVfbm9uZShlKSAmJiAhcHRlX3ByZXNlbnQoZSkpICovCisvKiBTaW5jZSB0aGUgUEFHRV9QUkVTRU5UIGJpdCBpcyBiaXQgNCwgd2UgY2FuIHVzZSB0aGUgYml0cyBhYm92ZSAqLworCisjZGVmaW5lIF9fc3dwX3R5cGUoeCkJCQkoKCh4KS52YWwgPj4gNSkgJiAweDdmKQorI2RlZmluZSBfX3N3cF9vZmZzZXQoeCkJCQkoKHgpLnZhbCA+PiAxMikKKyNkZWZpbmUgX19zd3BfZW50cnkodHlwZSwgb2Zmc2V0KQkoKHN3cF9lbnRyeV90KSB7ICgodHlwZSkgPDwgNSkgfCAoKG9mZnNldCkgPDwgMTIpIH0pCisjZGVmaW5lIF9fcHRlX3RvX3N3cF9lbnRyeShwdGUpCQkoKHN3cF9lbnRyeV90KSB7IHB0ZV92YWwocHRlKSB9KQorI2RlZmluZSBfX3N3cF9lbnRyeV90b19wdGUoeCkJCSgocHRlX3QpIHsgKHgpLnZhbCB9KQorCisjZGVmaW5lIGtlcm5fYWRkcl92YWxpZChhZGRyKSAgICgxKQorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGd0YWJsZS5oPgorCisvKgorICogTm8gcGFnZSB0YWJsZSBjYWNoZXMgdG8gaW5pdGlhbGlzZQorICovCisjZGVmaW5lIHBndGFibGVfY2FjaGVfaW5pdCgpICAgZG8geyB9IHdoaWxlICgwKQorCisjZGVmaW5lIHB0ZV90b19wZ29mZih4KQkocHRlX3ZhbCh4KSA+PiA2KQorI2RlZmluZSBwZ29mZl90b19wdGUoeCkJX19wdGUoKCh4KSA8PCA2KSB8IF9QQUdFX0ZJTEUpCisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKyNlbmRpZiAvKiBfQ1JJU19QR1RBQkxFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvcG9sbC5oIGIvaW5jbHVkZS9hc20tY3Jpcy9wb2xsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMwZWZjMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvcG9sbC5oCkBAIC0wLDAgKzEsMjUgQEAKKyNpZm5kZWYgX19BU01fQ1JJU19QT0xMX0gKKyNkZWZpbmUgX19BU01fQ1JJU19QT0xMX0gKKworLyogdGFrZW4gZnJvbSBhc20tYWxwaGEgKi8KKworI2RlZmluZSBQT0xMSU4JCTEKKyNkZWZpbmUgUE9MTFBSSQkJMgorI2RlZmluZSBQT0xMT1VUCQk0CisjZGVmaW5lIFBPTExFUlIJCTgKKyNkZWZpbmUgUE9MTEhVUAkJMTYKKyNkZWZpbmUgUE9MTE5WQUwJMzIKKyNkZWZpbmUgUE9MTFJETk9STQk2NAorI2RlZmluZSBQT0xMUkRCQU5ECTEyOAorI2RlZmluZSBQT0xMV1JOT1JNCTI1NgorI2RlZmluZSBQT0xMV1JCQU5ECTUxMgorI2RlZmluZSBQT0xMTVNHCQkxMDI0CisjZGVmaW5lIFBPTExSRU1PVkUJNDA5NgorCitzdHJ1Y3QgcG9sbGZkIHsKKwlpbnQgZmQ7CisJc2hvcnQgZXZlbnRzOworCXNob3J0IHJldmVudHM7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvcG9zaXhfdHlwZXMuaCBiL2luY2x1ZGUvYXNtLWNyaXMvcG9zaXhfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDI2ZmVlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9wb3NpeF90eXBlcy5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qICRJZDogcG9zaXhfdHlwZXMuaCx2IDEuMSAyMDAwLzA3LzEwIDE2OjMyOjMxIGJqb3JudyBFeHAgJCAqLworCisvKiBXZSBjaGVhdCBhIGJpdCBhbmQgdXNlIG91ciBDLWNvZGVkIGJpdG9wcyBmdW5jdGlvbnMgZnJvbSBhc20vYml0b3BzLmggKi8KKy8qIEkgZ3Vlc3Mgd2Ugc2hvdWxkIHdyaXRlIHRoZXNlIGluIGFzc2VtYmxlciBiZWNhdXNlIHRoZXkgYXJlIHVzZWQgb2Z0ZW4uICovCisKKyNpZm5kZWYgX19BUkNIX0NSSVNfUE9TSVhfVFlQRVNfSAorI2RlZmluZSBfX0FSQ0hfQ1JJU19QT1NJWF9UWVBFU19ICisKKyNpbmNsdWRlIDxhc20vYml0b3BzLmg+CisKKy8qCisgKiBUaGlzIGZpbGUgaXMgZ2VuZXJhbGx5IHVzZWQgYnkgdXNlci1sZXZlbCBzb2Z0d2FyZSwgc28geW91IG5lZWQgdG8KKyAqIGJlIGEgbGl0dGxlIGNhcmVmdWwgYWJvdXQgbmFtZXNwYWNlIHBvbGx1dGlvbiBldGMuICBBbHNvLCB3ZSBjYW5ub3QKKyAqIGFzc3VtZSBHQ0MgaXMgYmVpbmcgdXNlZC4KKyAqLworCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcJX19rZXJuZWxfaW5vX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CV9fa2VybmVsX21vZGVfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJX19rZXJuZWxfbmxpbmtfdDsKK3R5cGVkZWYgbG9uZwkJX19rZXJuZWxfb2ZmX3Q7Cit0eXBlZGVmIGludAkJX19rZXJuZWxfcGlkX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0ICBfX2tlcm5lbF9pcGNfcGlkX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CV9fa2VybmVsX3VpZF90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAlfX2tlcm5lbF9naWRfdDsKK3R5cGVkZWYgX19TSVpFX1RZUEVfXwlfX2tlcm5lbF9zaXplX3Q7Cit0eXBlZGVmIGxvbmcJCV9fa2VybmVsX3NzaXplX3Q7Cit0eXBlZGVmIGludAkJX19rZXJuZWxfcHRyZGlmZl90OwordHlwZWRlZiBsb25nCQlfX2tlcm5lbF90aW1lX3Q7Cit0eXBlZGVmIGxvbmcgICAgICAgICAgICBfX2tlcm5lbF9zdXNlY29uZHNfdDsKK3R5cGVkZWYgbG9uZwkJX19rZXJuZWxfY2xvY2tfdDsKK3R5cGVkZWYgaW50CQlfX2tlcm5lbF90aW1lcl90OwordHlwZWRlZiBpbnQJCV9fa2VybmVsX2Nsb2NraWRfdDsKK3R5cGVkZWYgaW50CQlfX2tlcm5lbF9kYWRkcl90OwordHlwZWRlZiBjaGFyICoJCV9fa2VybmVsX2NhZGRyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0ICBfX2tlcm5lbF91aWQxNl90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCAgX19rZXJuZWxfZ2lkMTZfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50ICAgIF9fa2VybmVsX3VpZDMyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludCAgICBfX2tlcm5lbF9naWQzMl90OworCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0ICBfX2tlcm5lbF9vbGRfdWlkX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0ICBfX2tlcm5lbF9vbGRfZ2lkX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CV9fa2VybmVsX29sZF9kZXZfdDsKKworI2lmZGVmIF9fR05VQ19fCit0eXBlZGVmIGxvbmcgbG9uZwlfX2tlcm5lbF9sb2ZmX3Q7CisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgeworI2lmIGRlZmluZWQoX19LRVJORUxfXykgfHwgZGVmaW5lZChfX1VTRV9BTEwpCisJaW50CXZhbFsyXTsKKyNlbHNlIC8qICFkZWZpbmVkKF9fS0VSTkVMX18pICYmICFkZWZpbmVkKF9fVVNFX0FMTCkgKi8KKwlpbnQJX192YWxbMl07CisjZW5kaWYgLyogIWRlZmluZWQoX19LRVJORUxfXykgJiYgIWRlZmluZWQoX19VU0VfQUxMKSAqLworfSBfX2tlcm5lbF9mc2lkX3Q7CisKKy8qIHNob3VsZCB0aGlzIGlmZGVmIGJlIGhlcmUgPyAgKi8KKworI2lmIGRlZmluZWQoX19LRVJORUxfXykgfHwgIWRlZmluZWQoX19HTElCQ19fKSB8fCAoX19HTElCQ19fIDwgMikKKworI3VuZGVmCV9fRkRfU0VUCisjZGVmaW5lIF9fRkRfU0VUKGZkLGZkc2V0cCkgc2V0X2JpdChmZCwgKHZvaWQgKikoZmRzZXRwKSkKKworI3VuZGVmCV9fRkRfQ0xSCisjZGVmaW5lIF9fRkRfQ0xSKGZkLGZkc2V0cCkgY2xlYXJfYml0KGZkLCAodm9pZCAqKShmZHNldHApKQorCisjdW5kZWYJX19GRF9JU1NFVAorI2RlZmluZSBfX0ZEX0lTU0VUKGZkLGZkc2V0cCkgdGVzdF9iaXQoZmQsICh2b2lkICopKGZkc2V0cCkpCisKKyN1bmRlZglfX0ZEX1pFUk8KKyNkZWZpbmUgX19GRF9aRVJPKGZkc2V0cCkgbWVtc2V0KCh2b2lkICopKGZkc2V0cCksIDAsIF9fRkRTRVRfTE9OR1MgPDwgMikKKworI2VuZGlmIC8qIGRlZmluZWQoX19LRVJORUxfXykgfHwgIWRlZmluZWQoX19HTElCQ19fKSB8fCAoX19HTElCQ19fIDwgMikgKi8KKworI2VuZGlmIC8qIF9fQVJDSF9DUklTX1BPU0lYX1RZUEVTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvcHJvY2Vzc29yLmggYi9pbmNsdWRlL2FzbS1jcmlzL3Byb2Nlc3Nvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyM2JkZjAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL3Byb2Nlc3Nvci5oCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1jcmlzL3Byb2Nlc3Nvci5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxIEF4aXMgQ29tbXVuaWNhdGlvbnMgQUIKKyAqCisgKiBBdXRob3JzOiAgICAgICAgIEJqb3JuIFdlc2VuICAgICAgICBJbml0aWFsIHZlcnNpb24KKyAqCisgKi8KKworI2lmbmRlZiBfX0FTTV9DUklTX1BST0NFU1NPUl9ICisjZGVmaW5lIF9fQVNNX0NSSVNfUFJPQ0VTU09SX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9wcm9jZXNzb3IuaD4KKworLyogVGhpcyBkZWNpZGVzIHdoZXJlIHRoZSBrZXJuZWwgd2lsbCBzZWFyY2ggZm9yIGEgZnJlZSBjaHVuayBvZiB2bQorICogc3BhY2UgZHVyaW5nIG1tYXAncy4KKyAqLworI2RlZmluZSBUQVNLX1VOTUFQUEVEX0JBU0UgICAgICAoUEFHRV9BTElHTihUQVNLX1NJWkUgLyAzKSkKKworLyogVEhSRUFEX1NJWkUgaXMgdGhlIHNpemUgb2YgdGhlIHRhc2tfc3RydWN0L2tlcm5lbF9zdGFjayBjb21iby4KKyAqIG5vcm1hbGx5LCB0aGUgc3RhY2sgaXMgZm91bmQgYnkgZG9pbmcgc29tZXRoaW5nIGxpa2UgcCArIFRIUkVBRF9TSVpFCisgKiBpbiBDUklTLCBhIHBhZ2UgaXMgODE5MiBieXRlcywgd2hpY2ggc2VlbXMgbGlrZSBhIHNhbmUgc2l6ZQorICovCisKKyNkZWZpbmUgVEhSRUFEX1NJWkUgICAgICAgUEFHRV9TSVpFCisjZGVmaW5lIEtFUk5FTF9TVEFDS19TSVpFIFBBR0VfU0laRQorCisvKgorICogQXQgdXNlci0+a2VybmVsIGVudHJ5LCB0aGUgcHRfcmVncyBzdHJ1Y3QgaXMgc3RhY2tlZCBvbiB0aGUgdG9wIG9mIHRoZSBrZXJuZWwtc3RhY2suCisgKiBUaGlzIG1hY3JvIGFsbG93cyB1cyB0byBmaW5kIHRob3NlIHJlZ3MgZm9yIGEgdGFzay4KKyAqIE5vdGljZSB0aGF0IHN1YnNlcXVlbnQgcHRfcmVncyBzdGFja2luZ3MsIGxpa2UgcmVjdXJzaXZlIGludGVycnVwdHMgb2NjdXJyaW5nIHdoaWxlCisgKiB3ZSdyZSBpbiB0aGUga2VybmVsLCB3b24ndCBhZmZlY3QgdGhpcyAtIG9ubHkgdGhlIGZpcnN0IHVzZXItPmtlcm5lbCB0cmFuc2l0aW9uCisgKiByZWdpc3RlcnMgYXJlIHJlYWNoZWQgYnkgdGhpcy4KKyAqLworCisjZGVmaW5lIHVzZXJfcmVncyh0aHJlYWRfaW5mbykgKCgoc3RydWN0IHB0X3JlZ3MgKikoKHVuc2lnbmVkIGxvbmcpKHRocmVhZF9pbmZvKSArIFRIUkVBRF9TSVpFKSkgLSAxKQorCisvKgorICogRGl0byBidXQgZm9yIHRoZSBjdXJyZW50bHkgcnVubmluZyB0YXNrCisgKi8KKworI2RlZmluZSBjdXJyZW50X3JlZ3MoKSB1c2VyX3JlZ3MoY3VycmVudC0+dGhyZWFkX2luZm8pCisKK2V4dGVybiBpbmxpbmUgdm9pZCBwcmVwYXJlX3RvX2NvcHkoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7Cit9CisKK2V4dGVybiBpbnQga2VybmVsX3RocmVhZChpbnQgKCpmbikodm9pZCAqKSwgdm9pZCAqIGFyZywgdW5zaWduZWQgbG9uZyBmbGFncyk7CisKK3Vuc2lnbmVkIGxvbmcgZ2V0X3djaGFuKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7CisKKyNkZWZpbmUgS1NUS19FU1AodHNrKSAgICgodHNrKSA9PSBjdXJyZW50ID8gcmR1c3AoKSA6ICh0c2spLT50aHJlYWQudXNwKQorCisvKgorICogRnJlZSBjdXJyZW50IHRocmVhZCBkYXRhIHN0cnVjdHVyZXMgZXRjLi4KKyAqLworCitleHRlcm4gaW5saW5lIHZvaWQgZXhpdF90aHJlYWQodm9pZCkKK3sKKyAgICAgICAgLyogTm90aGluZyBuZWVkcyB0byBiZSBkb25lLiAgKi8KK30KKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdGhyZWFkX3NhdmVkX3BjKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKKworLyogRnJlZSBhbGwgcmVzb3VyY2VzIGhlbGQgYnkgYSB0aHJlYWQuICovCitleHRlcm4gaW5saW5lIHZvaWQgcmVsZWFzZV90aHJlYWQoc3RydWN0IHRhc2tfc3RydWN0ICpkZWFkX3Rhc2spCit7CisgICAgICAgIC8qIE5vdGhpbmcgbmVlZHMgdG8gYmUgZG9uZS4gICovCit9CisKKyNkZWZpbmUgaW5pdF9zdGFjayAgICAgIChpbml0X3RocmVhZF91bmlvbi5zdGFjaykKKworI2RlZmluZSBjcHVfcmVsYXgoKSAgICAgYmFycmllcigpCisKKyNlbmRpZiAvKiBfX0FTTV9DUklTX1BST0NFU1NPUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1jcmlzL3B0cmFjZS5oIGIvaW5jbHVkZS9hc20tY3Jpcy9wdHJhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YThjMjg4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9wdHJhY2UuaApAQCAtMCwwICsxLDEyIEBACisjaWZuZGVmIF9DUklTX1BUUkFDRV9ICisjZGVmaW5lIF9DUklTX1BUUkFDRV9ICisKKyNpbmNsdWRlIDxhc20vYXJjaC9wdHJhY2UuaD4KKworI2lmZGVmIF9fS0VSTkVMX18KKy8qIEFyYml0cmFyaWx5IGNob29zZSB0aGUgc2FtZSBwdHJhY2UgbnVtYmVycyBhcyB1c2VkIGJ5IHRoZSBTcGFyYyBjb2RlLiAqLworI2RlZmluZSBQVFJBQ0VfR0VUUkVHUyAgICAgICAgICAgIDEyCisjZGVmaW5lIFBUUkFDRV9TRVRSRUdTICAgICAgICAgICAgMTMKKyNlbmRpZgorCisjZW5kaWYgLyogX0NSSVNfUFRSQUNFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvcmVzb3VyY2UuaCBiL2luY2x1ZGUvYXNtLWNyaXMvcmVzb3VyY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWQyOTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9yZXNvdXJjZS5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfQ1JJU19SRVNPVVJDRV9ICisjZGVmaW5lIF9DUklTX1JFU09VUkNFX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3Jlc291cmNlLmg+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy9yczQ4NS5oIGIvaW5jbHVkZS9hc20tY3Jpcy9yczQ4NS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzMzFjNTEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL3JzNDg1LmgKQEAgLTAsMCArMSwyMCBAQAorLyogUlMtNDg1IHN0cnVjdHVyZXMgKi8KKworLyogUlMtNDg1IHN1cHBvcnQgKi8KKy8qIFVzZWQgd2l0aCBpb2N0bCgpIFRJT0NTRVJTRVRSUzQ4NSAqLworc3RydWN0IHJzNDg1X2NvbnRyb2wgeworICAgICAgICB1bnNpZ25lZCBzaG9ydCBydHNfb25fc2VuZDsKKyAgICAgICAgdW5zaWduZWQgc2hvcnQgcnRzX2FmdGVyX3NlbnQ7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgZGVsYXlfcnRzX2JlZm9yZV9zZW5kOworICAgICAgICB1bnNpZ25lZCBzaG9ydCBlbmFibGVkOworI2lmZGVmIF9fS0VSTkVMX18KKyAgICAgICAgaW50IGRpc2FibGVfc2VyaWFsX2xvb3BiYWNrOworI2VuZGlmCit9OworCisvKiBVc2VkIHdpdGggaW9jdGwoKSBUSU9DU0VSV1JSUzQ4NSAqLworc3RydWN0IHJzNDg1X3dyaXRlIHsKKyAgICAgICAgdW5zaWduZWQgc2hvcnQgb3V0Y19zaXplOworICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRjOworfTsKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy9ydGMuaCBiL2luY2x1ZGUvYXNtLWNyaXMvcnRjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdjMTMwMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvcnRjLmgKQEAgLTAsMCArMSwxMDcgQEAKKy8qICRJZDogcnRjLmgsdiAxLjcgMjAwMi8xMS8wNCAwNzozMjowOSBzdGFydmlrIEV4cCAkICovCisKKyNpZm5kZWYgX19SVENfSF9fCisjZGVmaW5lIF9fUlRDX0hfXworCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2lmZGVmIENPTkZJR19FVFJBWF9EUzEzMDIKKyAgIC8qIERhbGxhcyBEUzEzMDIgY2xvY2svY2FsZW5kYXIgcmVnaXN0ZXIgbnVtYmVycy4gKi8KKyMgIGRlZmluZSBSVENfU0VDT05EUyAgICAgIDAKKyMgIGRlZmluZSBSVENfTUlOVVRFUyAgICAgIDEKKyMgIGRlZmluZSBSVENfSE9VUlMgICAgICAgIDIKKyMgIGRlZmluZSBSVENfREFZX09GX01PTlRIIDMKKyMgIGRlZmluZSBSVENfTU9OVEggICAgICAgIDQKKyMgIGRlZmluZSBSVENfV0VFS0RBWSAgICAgIDUKKyMgIGRlZmluZSBSVENfWUVBUiAgICAgICAgIDYKKyMgIGRlZmluZSBSVENfQ09OVFJPTCAgICAgIDcKKworICAgLyogQml0cyBpbiBDT05UUk9MIHJlZ2lzdGVyLiAqLworIyAgZGVmaW5lIFJUQ19DT05UUk9MX1dSSVRFUFJPVEVDVCAJMHg4MAorIyAgZGVmaW5lIFJUQ19UUklDS0xFQ0hBUkdFUiAJCTgKKyAgCisgIC8qIEJpdHMgaW4gVFJJQ0tMRUNIQVJHRVIgcmVnaXN0ZXIgVENTIFRDUyBUQ1MgVENTIERTIERTIFJTIFJTLiAqLworIyAgZGVmaW5lIFJUQ19UQ1JfUEFUVEVSTiAJMHhBMAkvKiAxMDEweHh4eCAqLworIyAgZGVmaW5lIFJUQ19UQ1JfMURJT0QgCTB4MDQJLyogeHh4eDAxeHggKi8KKyMgIGRlZmluZSBSVENfVENSXzJESU9EIAkweDA4CS8qIHh4eHgxMHh4ICovCisjICBkZWZpbmUgUlRDX1RDUl9ESVNBQkxFRCAJMHgwMAkvKiB4eHh4eHgwMCBEaXNhYmxlZCAqLworIyAgZGVmaW5lIFJUQ19UQ1JfMktPSE0gCTB4MDEJLyogeHh4eHh4MDEgMktPaG0gKi8KKyMgIGRlZmluZSBSVENfVENSXzRLT0hNIAkweDAyCS8qIHh4eHh4eDEwIDRrT2htICovCisjICBkZWZpbmUgUlRDX1RDUl84S09ITSAJMHgwMwkvKiB4eHh4eHgxMSA4a09obSAqLworCisjZWxpZiBkZWZpbmVkKENPTkZJR19FVFJBWF9QQ0Y4NTYzKQorICAgLyogSTJDIGJ1cyBzbGF2ZSByZWdpc3RlcnMuICovCisjICBkZWZpbmUgUlRDX0kyQ19SRUFECQkweGEzCisjICBkZWZpbmUgUlRDX0kyQ19XUklURQkJMHhhMgorCisgICAvKiBQaGlsbGlwcyBQQ0Y4NTYzIHJlZ2lzdGVycy4gKi8KKyMgIGRlZmluZSBSVENfQ09OVFJPTDEJCTB4MDAJCS8qIENvbnRyb2wvU3RhdHVzIHJlZ2lzdGVyIDEuICovCisjICBkZWZpbmUgUlRDX0NPTlRST0wyCQkweDAxCQkvKiBDb250cm9sL1N0YXR1cyByZWdpc3RlciAyLiAqLworIyAgZGVmaW5lIFJUQ19DTE9DS09VVF9GUkVRCTB4MGQJCS8qIENMS09VVCBmcmVxdWVuY3kuICovCisjICBkZWZpbmUgUlRDX1RJTUVSX0NPTlRST0wJMHgwZQkJLyogVGltZXIgY29udHJvbC4gKi8KKyMgIGRlZmluZSBSVENfVElNRVJfQ05URE9XTgkweDBmCQkvKiBUaW1lciBjb3VudGRvd24uICovCisKKyAgIC8qIEJDRCBlbmNvZGVkIGNsb2NrIHJlZ2lzdGVycy4gKi8KKyMgIGRlZmluZSBSVENfU0VDT05EUwkJMHgwMgorIyAgZGVmaW5lIFJUQ19NSU5VVEVTCQkweDAzCisjICBkZWZpbmUgUlRDX0hPVVJTCQkweDA0CisjICBkZWZpbmUgUlRDX0RBWV9PRl9NT05USAkweDA1CisjICBkZWZpbmUgUlRDX1dFRUtEQVkJCTB4MDYJLyogTm90IGNvZGVkIGluIEJDRCEgKi8KKyMgIGRlZmluZSBSVENfTU9OVEgJCTB4MDcKKyMgIGRlZmluZSBSVENfWUVBUgkJMHgwOAorIyAgZGVmaW5lIFJUQ19NSU5VVEVfQUxBUk0JMHgwOQorIyAgZGVmaW5lIFJUQ19IT1VSX0FMQVJNCTB4MGEKKyMgIGRlZmluZSBSVENfREFZX0FMQVJNCQkweDBiCisjICBkZWZpbmUgUlRDX1dFRUtEQVlfQUxBUk0gMHgwYworCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19FVFJBWF9EUzEzMDIKK2V4dGVybiB1bnNpZ25lZCBjaGFyIGRzMTMwMl9yZWFkcmVnKGludCByZWcpOworZXh0ZXJuIHZvaWQgZHMxMzAyX3dyaXRlcmVnKGludCByZWcsIHVuc2lnbmVkIGNoYXIgdmFsKTsKK2V4dGVybiBpbnQgZHMxMzAyX2luaXQodm9pZCk7CisjICBkZWZpbmUgQ01PU19SRUFEKHgpIGRzMTMwMl9yZWFkcmVnKHgpCisjICBkZWZpbmUgQ01PU19XUklURSh2YWwscmVnKSBkczEzMDJfd3JpdGVyZWcocmVnLHZhbCkKKyMgIGRlZmluZSBSVENfSU5JVCgpIGRzMTMwMl9pbml0KCkKKyNlbGlmIGRlZmluZWQoQ09ORklHX0VUUkFYX1BDRjg1NjMpCitleHRlcm4gdW5zaWduZWQgY2hhciBwY2Y4NTYzX3JlYWRyZWcoaW50IHJlZyk7CitleHRlcm4gdm9pZCBwY2Y4NTYzX3dyaXRlcmVnKGludCByZWcsIHVuc2lnbmVkIGNoYXIgdmFsKTsKK2V4dGVybiBpbnQgcGNmODU2M19pbml0KHZvaWQpOworIyAgZGVmaW5lIENNT1NfUkVBRCh4KSBwY2Y4NTYzX3JlYWRyZWcoeCkKKyMgIGRlZmluZSBDTU9TX1dSSVRFKHZhbCxyZWcpIHBjZjg1NjNfd3JpdGVyZWcocmVnLHZhbCkKKyMgIGRlZmluZSBSVENfSU5JVCgpIHBjZjg1NjNfaW5pdCgpCisjZWxzZQorICAvKiBObyBSVEMgY29uZmlndXJlZCBzbyB3ZSBzaG91bGRuJ3QgdHJ5IHRvIGFjY2VzcyBhbnkuICovCisjICBkZWZpbmUgQ01PU19SRUFEKHgpIDQyCisjICBkZWZpbmUgQ01PU19XUklURSh4LHkpCisjICBkZWZpbmUgUlRDX0lOSVQoKSAoLTEpCisjZW5kaWYKKworLyoKKyAqIFRoZSBzdHJ1Y3QgdXNlZCB0byBwYXNzIGRhdGEgdmlhIHRoZSBmb2xsb3dpbmcgaW9jdGwuIFNpbWlsYXIgdG8gdGhlCisgKiBzdHJ1Y3QgdG0gaW4gPHRpbWUuaD4sIGJ1dCBpdCBuZWVkcyB0byBiZSBoZXJlIHNvIHRoYXQgdGhlIGtlcm5lbCAKKyAqIHNvdXJjZSBpcyBzZWxmIGNvbnRhaW5lZCwgYWxsb3dpbmcgY3Jvc3MtY29tcGlsZXMsIGV0Yy4gZXRjLgorICovCitzdHJ1Y3QgcnRjX3RpbWUgeworCWludCB0bV9zZWM7CisJaW50IHRtX21pbjsKKwlpbnQgdG1faG91cjsKKwlpbnQgdG1fbWRheTsKKwlpbnQgdG1fbW9uOworCWludCB0bV95ZWFyOworCWludCB0bV93ZGF5OworCWludCB0bV95ZGF5OworCWludCB0bV9pc2RzdDsKK307CisKKy8qIGlvY3RsKCkgY2FsbHMgdGhhdCBhcmUgcGVybWl0dGVkIHRvIHRoZSAvZGV2L3J0YyBpbnRlcmZhY2UuICovCisjZGVmaW5lIFJUQ19NQUdJQyAncCcKKyNkZWZpbmUgUlRDX1JEX1RJTUUJCV9JT1IoUlRDX01BR0lDLCAweDA5LCBzdHJ1Y3QgcnRjX3RpbWUpCS8qIFJlYWQgUlRDIHRpbWUuICovCisjZGVmaW5lIFJUQ19TRVRfVElNRQkJX0lPVyhSVENfTUFHSUMsIDB4MGEsIHN0cnVjdCBydGNfdGltZSkJLyogU2V0IFJUQyB0aW1lLiAqLworI2RlZmluZSBSVENfU0VUX0NIQVJHRSAgCV9JT1coUlRDX01BR0lDLCAweDBiLCBpbnQpIAkJCisjZGVmaW5lIFJUQ19WTE9XX1JEICAgICBfSU9SKFJUQ19NQUdJQywgMHgxMSwgaW50KSAgLyogVm9sdGFnZSBMb3cgZGV0ZWN0b3IgKi8KKyNkZWZpbmUgUlRDX1ZMT1dfU0VUICAgIF9JTyhSVENfTUFHSUMsIDB4MTIpICAgICAgICAvKiBDbGVhciB2b2x0YWdlIGxvdyBpbmZvcm1hdGlvbiAqLworI2RlZmluZSBSVENfTUFYX0lPQ1RMIDB4MTIKKworI2VuZGlmIC8qIF9fUlRDX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy9zY2F0dGVybGlzdC5oIGIvaW5jbHVkZS9hc20tY3Jpcy9zY2F0dGVybGlzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiZGM0NGMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL3NjYXR0ZXJsaXN0LmgKQEAgLTAsMCArMSwyMCBAQAorI2lmbmRlZiBfX0FTTV9DUklTX1NDQVRURVJMSVNUX0gKKyNkZWZpbmUgX19BU01fQ1JJU19TQ0FUVEVSTElTVF9ICisKK3N0cnVjdCBzY2F0dGVybGlzdCB7CisJY2hhciAqICBhZGRyZXNzOyAgICAvKiBMb2NhdGlvbiBkYXRhIGlzIHRvIGJlIHRyYW5zZmVycmVkIHRvICovCisJdW5zaWduZWQgaW50IGxlbmd0aDsKKworCS8qIFRoZSBmb2xsb3dpbmcgaXMgaTM4NiBoaWdobWVtIGp1bmsgLSBub3QgdXNlZCBieSB1cyAqLworCXN0cnVjdCBwYWdlICogcGFnZTsgLyogTG9jYXRpb24gZm9yIGhpZ2htZW0gcGFnZSwgaWYgYW55ICovCisJdW5zaWduZWQgaW50IG9mZnNldDsvKiBmb3IgaGlnaG1lbSwgcGFnZSBvZmZzZXQgKi8KKworfTsKKworI2RlZmluZSBzZ19kbWFfYWRkcmVzcyhzZykJKChzZyktPmFkZHJlc3MpCisjZGVmaW5lIHNnX2RtYV9sZW4oc2cpCQkoKHNnKS0+bGVuZ3RoKQorLyogaTM4NiBqdW5rICovCisKKyNkZWZpbmUgSVNBX0RNQV9USFJFU0hPTEQgKDB4MWZmZmZmZmYpCisKKyNlbmRpZiAvKiAhKF9fQVNNX0NSSVNfU0NBVFRFUkxJU1RfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvc2VjdGlvbnMuaCBiL2luY2x1ZGUvYXNtLWNyaXMvc2VjdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzk5OGNlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9zZWN0aW9ucy5oCkBAIC0wLDAgKzEsNyBAQAorI2lmbmRlZiBfQ1JJU19TRUNUSU9OU19ICisjZGVmaW5lIF9DUklTX1NFQ1RJT05TX0gKKworLyogbm90aGluZyB0byBzZWUsIG1vdmUgYWxvbmcgKi8KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zZWN0aW9ucy5oPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvc2VnbWVudC5oIGIvaW5jbHVkZS9hc20tY3Jpcy9zZWdtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA2NzUxMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvc2VnbWVudC5oCkBAIC0wLDAgKzEsOCBAQAorI2lmbmRlZiBfQVNNX1NFR01FTlRfSAorI2RlZmluZSBfQVNNX1NFR01FTlRfSAorCit0eXBlZGVmIHN0cnVjdCB7CisgIHVuc2lnbmVkIGxvbmcgc2VnOworfSBtbV9zZWdtZW50X3Q7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy9zZW1hcGhvcmUtaGVscGVyLmggYi9pbmNsdWRlL2FzbS1jcmlzL3NlbWFwaG9yZS1oZWxwZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmQwZjMwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9zZW1hcGhvcmUtaGVscGVyLmgKQEAgLTAsMCArMSw4MSBAQAorLyogJElkOiBzZW1hcGhvcmUtaGVscGVyLmgsdiAxLjMgMjAwMS8wMy8yNiAxNTowMDozMyBvcmphbmYgRXhwICQKKyAqCisgKiBTTVAtIGFuZCBpbnRlcnJ1cHQtc2FmZSBzZW1hcGhvcmVzIGhlbHBlciBmdW5jdGlvbnMuIEdlbmVyaWMgdmVyc2lvbnMsIG5vCisgKiBvcHRpbWl6YXRpb25zIHdoYXRzb2V2ZXIuLi4gCisgKgorICovCisKKyNpZm5kZWYgX0FTTV9TRU1BUEhPUkVfSEVMUEVSX0gKKyNkZWZpbmUgX0FTTV9TRU1BUEhPUkVfSEVMUEVSX0gKKworI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorCisjZGVmaW5lIHJlYWQoYSkgKChhKS0+Y291bnRlcikKKyNkZWZpbmUgaW5jKGEpICgoKGEpLT5jb3VudGVyKSsrKQorI2RlZmluZSBkZWMoYSkgKCgoYSktPmNvdW50ZXIpLS0pCisKKyNkZWZpbmUgY291bnRfaW5jKGEpICgoKihhKSkrKykKKworLyoKKyAqIFRoZXNlIHR3byBfbXVzdF8gZXhlY3V0ZSBhdG9taWNhbGx5IHdydCBlYWNoIG90aGVyLgorICovCitleHRlcm4gaW5saW5lIHZvaWQgd2FrZV9vbmVfbW9yZShzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQoreworCWF0b21pY19pbmMoJnNlbS0+d2FraW5nKTsKK30KKworZXh0ZXJuIGlubGluZSBpbnQgd2FraW5nX25vbl96ZXJvKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQgPSAwOworCisJbG9jYWxfc2F2ZV9mbGFncyhmbGFncyk7CisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwlpZiAocmVhZCgmc2VtLT53YWtpbmcpID4gMCkgeworCQlkZWMoJnNlbS0+d2FraW5nKTsKKwkJcmV0ID0gMTsKKwl9CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCXJldHVybiByZXQ7Cit9CisKK2V4dGVybiBpbmxpbmUgaW50IHdha2luZ19ub25femVyb19pbnRlcnJ1cHRpYmxlKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSwKKwkJCQkJCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCWludCByZXQgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKTsKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCWlmIChyZWFkKCZzZW0tPndha2luZykgPiAwKSB7CisJCWRlYygmc2VtLT53YWtpbmcpOworCQlyZXQgPSAxOworCX0gZWxzZSBpZiAoc2lnbmFsX3BlbmRpbmcodHNrKSkgeworCQlpbmMoJnNlbS0+Y291bnQpOworCQlyZXQgPSAtRUlOVFI7CisJfQorCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlyZXR1cm4gcmV0OworfQorCitleHRlcm4gaW5saW5lIGludCB3YWtpbmdfbm9uX3plcm9fdHJ5bG9jayhzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCit7CisgICAgICAgIGludCByZXQgPSAxOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKTsKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCWlmIChyZWFkKCZzZW0tPndha2luZykgPD0gMCkKKwkJaW5jKCZzZW0tPmNvdW50KTsKKwllbHNlIHsKKwkJZGVjKCZzZW0tPndha2luZyk7CisJCXJldCA9IDA7CisJfQorCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlyZXR1cm4gcmV0OworfQorCisjZW5kaWYgLyogX0FTTV9TRU1BUEhPUkVfSEVMUEVSX0ggKi8KKworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1jcmlzL3NlbWFwaG9yZS5oIGIvaW5jbHVkZS9hc20tY3Jpcy9zZW1hcGhvcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDVhYTdlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9zZW1hcGhvcmUuaApAQCAtMCwwICsxLDE0MiBAQAorLyogJElkOiBzZW1hcGhvcmUuaCx2IDEuMyAyMDAxLzA1LzA4IDEzOjU0OjA5IGJqb3JudyBFeHAgJCAqLworCisvKiBPbiB0aGUgaTM4NiB0aGVzZSBhcmUgY29kZWQgaW4gYXNtLCBwZXJoYXBzIHdlIHNob3VsZCBhcyB3ZWxsLiBMYXRlci4uICovCisKKyNpZm5kZWYgX0NSSVNfU0VNQVBIT1JFX0gKKyNkZWZpbmUgX0NSSVNfU0VNQVBIT1JFX0gKKworI2RlZmluZSBSV19MT0NLX0JJQVMgICAgICAgICAgICAgMHgwMTAwMDAwMAorCisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KKworI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisKKy8qCisgKiBDUklTIHNlbWFwaG9yZXMsIGltcGxlbWVudGVkIGluIEMtb25seSBzbyBmYXIuIAorICovCisKK2ludCBwcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pOworCitzdHJ1Y3Qgc2VtYXBob3JlIHsKKwlhdG9taWNfdCBjb3VudDsKKwlhdG9taWNfdCB3YWtpbmc7CisJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKK307CisKKyNkZWZpbmUgX19TRU1BUEhPUkVfSU5JVElBTElaRVIobmFtZSwgbikJCQkJXAorewkJCQkJCQkJCVwKKwkuY291bnQJCT0gQVRPTUlDX0lOSVQobiksCQkJCVwKKwkud2FraW5nCQk9IEFUT01JQ19JTklUKDApLAkJCQlcCisJLndhaXQJCT0gX19XQUlUX1FVRVVFX0hFQURfSU5JVElBTElaRVIoKG5hbWUpLndhaXQpICAgIFwKK30KKworI2RlZmluZSBfX01VVEVYX0lOSVRJQUxJWkVSKG5hbWUpIFwKKyAgICAgICAgX19TRU1BUEhPUkVfSU5JVElBTElaRVIobmFtZSwxKQorCisjZGVmaW5lIF9fREVDTEFSRV9TRU1BUEhPUkVfR0VORVJJQyhuYW1lLGNvdW50KSBcCisgICAgICAgIHN0cnVjdCBzZW1hcGhvcmUgbmFtZSA9IF9fU0VNQVBIT1JFX0lOSVRJQUxJWkVSKG5hbWUsY291bnQpCisKKyNkZWZpbmUgREVDTEFSRV9NVVRFWChuYW1lKSBfX0RFQ0xBUkVfU0VNQVBIT1JFX0dFTkVSSUMobmFtZSwxKQorI2RlZmluZSBERUNMQVJFX01VVEVYX0xPQ0tFRChuYW1lKSBfX0RFQ0xBUkVfU0VNQVBIT1JFX0dFTkVSSUMobmFtZSwwKQorCitleHRlcm4gaW5saW5lIHZvaWQgc2VtYV9pbml0KHN0cnVjdCBzZW1hcGhvcmUgKnNlbSwgaW50IHZhbCkKK3sKKwkqc2VtID0gKHN0cnVjdCBzZW1hcGhvcmUpX19TRU1BUEhPUkVfSU5JVElBTElaRVIoKCpzZW0pLHZhbCk7Cit9CisKK2V4dGVybiBpbmxpbmUgdm9pZCBpbml0X01VVEVYIChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCit7CisgICAgICAgIHNlbWFfaW5pdChzZW0sIDEpOworfQorCitleHRlcm4gaW5saW5lIHZvaWQgaW5pdF9NVVRFWF9MT0NLRUQgKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKK3sKKyAgICAgICAgc2VtYV9pbml0KHNlbSwgMCk7Cit9CisKK2V4dGVybiB2b2lkIF9fZG93bihzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKTsKK2V4dGVybiBpbnQgX19kb3duX2ludGVycnVwdGlibGUoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSk7CitleHRlcm4gaW50IF9fZG93bl90cnlsb2NrKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pOworZXh0ZXJuIHZvaWQgX191cChzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKTsKKworLyogbm90aWNlIC0gd2UgcHJvYmFibHkgY2FuIGRvIGNsaS9zdGkgaGVyZSBpbnN0ZWFkIG9mIHNhdmluZyAqLworCitleHRlcm4gaW5saW5lIHZvaWQgZG93bihzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGZhaWxlZDsKKworCW1pZ2h0X3NsZWVwKCk7CisKKwkvKiBhdG9taWNhbGx5IGRlY3JlbWVudCB0aGUgc2VtYXBob3JlcyBjb3VudCwgYW5kIGlmIGl0cyBuZWdhdGl2ZSwgd2Ugd2FpdCAqLworCWxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpOworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJZmFpbGVkID0gLS0oc2VtLT5jb3VudC5jb3VudGVyKSA8IDA7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCWlmKGZhaWxlZCkgeworCQlfX2Rvd24oc2VtKTsKKwl9Cit9CisKKy8qCisgKiBUaGlzIHZlcnNpb24gd2FpdHMgaW4gaW50ZXJydXB0aWJsZSBzdGF0ZSBzbyB0aGF0IHRoZSB3YWl0aW5nCisgKiBwcm9jZXNzIGNhbiBiZSBraWxsZWQuICBUaGUgZG93bl9pbnRlcnJ1cHRpYmxlIHJvdXRpbmUKKyAqIHJldHVybnMgbmVnYXRpdmUgZm9yIHNpZ25hbGxlZCBhbmQgemVybyBmb3Igc2VtYXBob3JlIGFjcXVpcmVkLgorICovCisKK2V4dGVybiBpbmxpbmUgaW50IGRvd25faW50ZXJydXB0aWJsZShzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGZhaWxlZDsKKworCW1pZ2h0X3NsZWVwKCk7CisKKwkvKiBhdG9taWNhbGx5IGRlY3JlbWVudCB0aGUgc2VtYXBob3JlcyBjb3VudCwgYW5kIGlmIGl0cyBuZWdhdGl2ZSwgd2Ugd2FpdCAqLworCWxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpOworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJZmFpbGVkID0gLS0oc2VtLT5jb3VudC5jb3VudGVyKSA8IDA7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCWlmKGZhaWxlZCkKKwkJZmFpbGVkID0gX19kb3duX2ludGVycnVwdGlibGUoc2VtKTsKKwlyZXR1cm4oZmFpbGVkKTsKK30KKworZXh0ZXJuIGlubGluZSBpbnQgZG93bl90cnlsb2NrKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgZmFpbGVkOworCisJbG9jYWxfc2F2ZV9mbGFncyhmbGFncyk7CisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwlmYWlsZWQgPSAtLShzZW0tPmNvdW50LmNvdW50ZXIpIDwgMDsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJaWYoZmFpbGVkKQorCQlmYWlsZWQgPSBfX2Rvd25fdHJ5bG9jayhzZW0pOworCXJldHVybihmYWlsZWQpOworfQorCisvKgorICogTm90ZSEgVGhpcyBpcyBzdWJ0bGUuIFdlIGp1bXAgdG8gd2FrZSBwZW9wbGUgdXAgb25seSBpZgorICogdGhlIHNlbWFwaG9yZSB3YXMgbmVnYXRpdmUgKD09IHNvbWVib2R5IHdhcyB3YWl0aW5nIG9uIGl0KS4KKyAqIFRoZSBkZWZhdWx0IGNhc2UgKG5vIGNvbnRlbnRpb24pIHdpbGwgcmVzdWx0IGluIE5PCisgKiBqdW1wcyBmb3IgYm90aCBkb3duKCkgYW5kIHVwKCkuCisgKi8KK2V4dGVybiBpbmxpbmUgdm9pZCB1cChzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQoreyAgCisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgd2FrZXVwOworCisJLyogYXRvbWljYWxseSBpbmNyZW1lbnQgdGhlIHNlbWFwaG9yZXMgY291bnQsIGFuZCBpZiBpdCB3YXMgbmVnYXRpdmUsIHdlIHdha2UgcGVvcGxlICovCisJbG9jYWxfc2F2ZV9mbGFncyhmbGFncyk7CisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwl3YWtldXAgPSArKyhzZW0tPmNvdW50LmNvdW50ZXIpIDw9IDA7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCWlmKHdha2V1cCkgeworCQlfX3VwKHNlbSk7CisJfQorfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvc2VtYnVmLmggYi9pbmNsdWRlL2FzbS1jcmlzL3NlbWJ1Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmZWQ5ODQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL3NlbWJ1Zi5oCkBAIC0wLDAgKzEsMjUgQEAKKyNpZm5kZWYgX0NSSVNfU0VNQlVGX0gKKyNkZWZpbmUgX0NSSVNfU0VNQlVGX0gKKworLyogCisgKiBUaGUgc2VtaWQ2NF9kcyBzdHJ1Y3R1cmUgZm9yIENSSVMgYXJjaGl0ZWN0dXJlLgorICogTm90ZSBleHRyYSBwYWRkaW5nIGJlY2F1c2UgdGhpcyBzdHJ1Y3R1cmUgaXMgcGFzc2VkIGJhY2sgYW5kIGZvcnRoCisgKiBiZXR3ZWVuIGtlcm5lbCBhbmQgdXNlciBzcGFjZS4KKyAqCisgKiBQYWQgc3BhY2UgaXMgbGVmdCBmb3I6CisgKiAtIDY0LWJpdCB0aW1lX3QgdG8gc29sdmUgeTIwMzggcHJvYmxlbQorICogLSAyIG1pc2NlbGxhbmVvdXMgMzItYml0IHZhbHVlcworICovCisKK3N0cnVjdCBzZW1pZDY0X2RzIHsKKwlzdHJ1Y3QgaXBjNjRfcGVybSBzZW1fcGVybTsJCS8qIHBlcm1pc3Npb25zIC4uIHNlZSBpcGMuaCAqLworCV9fa2VybmVsX3RpbWVfdAlzZW1fb3RpbWU7CQkvKiBsYXN0IHNlbW9wIHRpbWUgKi8KKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkMTsKKwlfX2tlcm5lbF90aW1lX3QJc2VtX2N0aW1lOwkJLyogbGFzdCBjaGFuZ2UgdGltZSAqLworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQyOworCXVuc2lnbmVkIGxvbmcJc2VtX25zZW1zOwkJLyogbm8uIG9mIHNlbWFwaG9yZXMgaW4gYXJyYXkgKi8KKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkMzsKKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkNDsKK307CisKKyNlbmRpZiAvKiBfQ1JJU19TRU1CVUZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy9zZXR1cC5oIGIvaW5jbHVkZS9hc20tY3Jpcy9zZXR1cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5MDcyODYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL3NldHVwLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9DUklTX1NFVFVQX0gKKyNkZWZpbmUgX0NSSVNfU0VUVVBfSAorCisjZGVmaW5lIENPTU1BTkRfTElORV9TSVpFCTI1NgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvc2htYnVmLmggYi9pbmNsdWRlL2FzbS1jcmlzL3NobWJ1Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyMzllM2YKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL3NobWJ1Zi5oCkBAIC0wLDAgKzEsNDIgQEAKKyNpZm5kZWYgX0NSSVNfU0hNQlVGX0gKKyNkZWZpbmUgX0NSSVNfU0hNQlVGX0gKKworLyogCisgKiBUaGUgc2htaWQ2NF9kcyBzdHJ1Y3R1cmUgZm9yIENSSVMgYXJjaGl0ZWN0dXJlIChzYW1lIGFzIGZvciBpMzg2KQorICogTm90ZSBleHRyYSBwYWRkaW5nIGJlY2F1c2UgdGhpcyBzdHJ1Y3R1cmUgaXMgcGFzc2VkIGJhY2sgYW5kIGZvcnRoCisgKiBiZXR3ZWVuIGtlcm5lbCBhbmQgdXNlciBzcGFjZS4KKyAqCisgKiBQYWQgc3BhY2UgaXMgbGVmdCBmb3I6CisgKiAtIDY0LWJpdCB0aW1lX3QgdG8gc29sdmUgeTIwMzggcHJvYmxlbQorICogLSAyIG1pc2NlbGxhbmVvdXMgMzItYml0IHZhbHVlcworICovCisKK3N0cnVjdCBzaG1pZDY0X2RzIHsKKwlzdHJ1Y3QgaXBjNjRfcGVybQlzaG1fcGVybTsJLyogb3BlcmF0aW9uIHBlcm1zICovCisJc2l6ZV90CQkJc2htX3NlZ3N6OwkvKiBzaXplIG9mIHNlZ21lbnQgKGJ5dGVzKSAqLworCV9fa2VybmVsX3RpbWVfdAkJc2htX2F0aW1lOwkvKiBsYXN0IGF0dGFjaCB0aW1lICovCisJdW5zaWduZWQgbG9uZwkJX191bnVzZWQxOworCV9fa2VybmVsX3RpbWVfdAkJc2htX2R0aW1lOwkvKiBsYXN0IGRldGFjaCB0aW1lICovCisJdW5zaWduZWQgbG9uZwkJX191bnVzZWQyOworCV9fa2VybmVsX3RpbWVfdAkJc2htX2N0aW1lOwkvKiBsYXN0IGNoYW5nZSB0aW1lICovCisJdW5zaWduZWQgbG9uZwkJX191bnVzZWQzOworCV9fa2VybmVsX3BpZF90CQlzaG1fY3BpZDsJLyogcGlkIG9mIGNyZWF0b3IgKi8KKwlfX2tlcm5lbF9waWRfdAkJc2htX2xwaWQ7CS8qIHBpZCBvZiBsYXN0IG9wZXJhdG9yICovCisJdW5zaWduZWQgbG9uZwkJc2htX25hdHRjaDsJLyogbm8uIG9mIGN1cnJlbnQgYXR0YWNoZXMgKi8KKwl1bnNpZ25lZCBsb25nCQlfX3VudXNlZDQ7CisJdW5zaWduZWQgbG9uZwkJX191bnVzZWQ1OworfTsKKworc3RydWN0IHNobWluZm82NCB7CisJdW5zaWduZWQgbG9uZwlzaG1tYXg7CisJdW5zaWduZWQgbG9uZwlzaG1taW47CisJdW5zaWduZWQgbG9uZwlzaG1tbmk7CisJdW5zaWduZWQgbG9uZwlzaG1zZWc7CisJdW5zaWduZWQgbG9uZwlzaG1hbGw7CisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDE7CisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDI7CisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDM7CisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDQ7Cit9OworCisjZW5kaWYgLyogX0NSSVNfU0hNQlVGX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvc2htcGFyYW0uaCBiL2luY2x1ZGUvYXNtLWNyaXMvc2htcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjlkMTIyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9zaG1wYXJhbS5oCkBAIC0wLDAgKzEsOCBAQAorI2lmbmRlZiBfQVNNX0NSSVNfU0hNUEFSQU1fSAorI2RlZmluZSBfQVNNX0NSSVNfU0hNUEFSQU1fSAorCisvKiBzYW1lIGFzIGFzbS1pMzg2LyB2ZXJzaW9uLi4gKi8KKworI2RlZmluZQlTSE1MQkEgUEFHRV9TSVpFCQkgLyogYXR0YWNoIGFkZHIgYSBtdWx0aXBsZSBvZiB0aGlzICovCisKKyNlbmRpZiAvKiBfQVNNX0NSSVNfU0hNUEFSQU1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy9zaWdjb250ZXh0LmggYi9pbmNsdWRlL2FzbS1jcmlzL3NpZ2NvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWQ2MzRlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9zaWdjb250ZXh0LmgKQEAgLTAsMCArMSwyNCBAQAorLyogJElkOiBzaWdjb250ZXh0LmgsdiAxLjEgMjAwMC8wNy8xMCAxNjozMjozMSBiam9ybncgRXhwICQgKi8KKworI2lmbmRlZiBfQVNNX0NSSVNfU0lHQ09OVEVYVF9ICisjZGVmaW5lIF9BU01fQ1JJU19TSUdDT05URVhUX0gKKworI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKworLyogVGhpcyBzdHJ1Y3QgaXMgc2F2ZWQgYnkgc2V0dXBfZnJhbWUgaW4gc2lnbmFsLmMsIHRvIGtlZXAgdGhlIGN1cnJlbnQgY29udGV4dCB3aGlsZQorICAgYSBzaWduYWwgaGFuZGxlciBpcyBleGVjdXRlZC4gSXQncyByZXN0b3JlZCBieSBzeXNfc2lncmV0dXJuLgorICAgCisgICBUbyBrZWVwIHRoaW5ncyBzaW1wbGUsIHdlIHVzZSBwdF9yZWdzIGhlcmUgZXZlbiB0aG91Z2ggbm9ybWFsbHkgeW91IGp1c3Qgc3BlY2lmeQorICAgdGhlIGxpc3Qgb2YgcmVncyB0byBzYXZlLiBUaGVuIHdlIGNhbiB1c2UgY29weV9mcm9tX3VzZXIgb24gdGhlIGVudGlyZSByZWdzIGluc3RlYWQKKyAgIG9mIGEgYnVuY2ggb2YgZ2V0X3VzZXIncyBhcyB3ZWxsLi4uCisKKyovCisKK3N0cnVjdCBzaWdjb250ZXh0IHsKKwlzdHJ1Y3QgcHRfcmVncyByZWdzOyAgLyogbmVlZHMgdG8gYmUgZmlyc3QgKi8KKwl1bnNpZ25lZCBsb25nIG9sZG1hc2s7CisJdW5zaWduZWQgbG9uZyB1c3A7ICAgIC8qIHVzcCBiZWZvcmUgc3RhY2tpbmcgdGhpcyBndW5rIG9uIGl0ICovCit9OworCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy9zaWdpbmZvLmggYi9pbmNsdWRlL2FzbS1jcmlzL3NpZ2luZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWNkNmQxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9zaWdpbmZvLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9DUklTX1NJR0lORk9fSAorI2RlZmluZSBfQ1JJU19TSUdJTkZPX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NpZ2luZm8uaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1jcmlzL3NpZ25hbC5oIGIvaW5jbHVkZS9hc20tY3Jpcy9zaWduYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjE4N2VjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9zaWduYWwuaApAQCAtMCwwICsxLDE4OCBAQAorI2lmbmRlZiBfQVNNX0NSSVNfU0lHTkFMX0gKKyNkZWZpbmUgX0FTTV9DUklTX1NJR05BTF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKiBBdm9pZCB0b28gbWFueSBoZWFkZXIgb3JkZXJpbmcgcHJvYmxlbXMuICAqLworc3RydWN0IHNpZ2luZm87CisKKyNpZmRlZiBfX0tFUk5FTF9fCisvKiBNb3N0IHRoaW5ncyBzaG91bGQgYmUgY2xlYW4gZW5vdWdoIHRvIHJlZGVmaW5lIHRoaXMgYXQgd2lsbCwgaWYgY2FyZQorICAgaXMgdGFrZW4gdG8gbWFrZSBsaWJjIG1hdGNoLiAgKi8KKworI2RlZmluZSBfTlNJRwkJNjQKKyNkZWZpbmUgX05TSUdfQlBXCTMyCisjZGVmaW5lIF9OU0lHX1dPUkRTCShfTlNJRyAvIF9OU0lHX0JQVykKKwordHlwZWRlZiB1bnNpZ25lZCBsb25nIG9sZF9zaWdzZXRfdDsJCS8qIGF0IGxlYXN0IDMyIGJpdHMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcgc2lnW19OU0lHX1dPUkRTXTsKK30gc2lnc2V0X3Q7CisKKyNlbHNlCisvKiBIZXJlIHdlIG11c3QgY2F0ZXIgdG8gbGliY3MgdGhhdCBwb2tlIGFib3V0IGluIGtlcm5lbCBoZWFkZXJzLiAgKi8KKworI2RlZmluZSBOU0lHCQkzMgordHlwZWRlZiB1bnNpZ25lZCBsb25nIHNpZ3NldF90OworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZGVmaW5lIFNJR0hVUAkJIDEKKyNkZWZpbmUgU0lHSU5UCQkgMgorI2RlZmluZSBTSUdRVUlUCQkgMworI2RlZmluZSBTSUdJTEwJCSA0CisjZGVmaW5lIFNJR1RSQVAJCSA1CisjZGVmaW5lIFNJR0FCUlQJCSA2CisjZGVmaW5lIFNJR0lPVAkJIDYKKyNkZWZpbmUgU0lHQlVTCQkgNworI2RlZmluZSBTSUdGUEUJCSA4CisjZGVmaW5lIFNJR0tJTEwJCSA5CisjZGVmaW5lIFNJR1VTUjEJCTEwCisjZGVmaW5lIFNJR1NFR1YJCTExCisjZGVmaW5lIFNJR1VTUjIJCTEyCisjZGVmaW5lIFNJR1BJUEUJCTEzCisjZGVmaW5lIFNJR0FMUk0JCTE0CisjZGVmaW5lIFNJR1RFUk0JCTE1CisjZGVmaW5lIFNJR1NUS0ZMVAkxNgorI2RlZmluZSBTSUdDSExECQkxNworI2RlZmluZSBTSUdDT05UCQkxOAorI2RlZmluZSBTSUdTVE9QCQkxOQorI2RlZmluZSBTSUdUU1RQCQkyMAorI2RlZmluZSBTSUdUVElOCQkyMQorI2RlZmluZSBTSUdUVE9VCQkyMgorI2RlZmluZSBTSUdVUkcJCTIzCisjZGVmaW5lIFNJR1hDUFUJCTI0CisjZGVmaW5lIFNJR1hGU1oJCTI1CisjZGVmaW5lIFNJR1ZUQUxSTQkyNgorI2RlZmluZSBTSUdQUk9GCQkyNworI2RlZmluZSBTSUdXSU5DSAkyOAorI2RlZmluZSBTSUdJTwkJMjkKKyNkZWZpbmUgU0lHUE9MTAkJU0lHSU8KKy8qCisjZGVmaW5lIFNJR0xPU1QJCTI5CisqLworI2RlZmluZSBTSUdQV1IJCTMwCisjZGVmaW5lIFNJR1NZUyAgICAgICAgICAzMQorI2RlZmluZQlTSUdVTlVTRUQJMzEKKworLyogVGhlc2Ugc2hvdWxkIG5vdCBiZSBjb25zaWRlcmVkIGNvbnN0YW50cyBmcm9tIHVzZXJsYW5kLiAgKi8KKyNkZWZpbmUgU0lHUlRNSU4gICAgICAgIDMyCisjZGVmaW5lIFNJR1JUTUFYICAgICAgICBfTlNJRworCisvKgorICogU0FfRkxBR1MgdmFsdWVzOgorICoKKyAqIFNBX09OU1RBQ0sgaW5kaWNhdGVzIHRoYXQgYSByZWdpc3RlcmVkIHN0YWNrX3Qgd2lsbCBiZSB1c2VkLgorICogU0FfSU5URVJSVVBUIGlzIGEgbm8tb3AsIGJ1dCBsZWZ0IGR1ZSB0byBoaXN0b3JpY2FsIHJlYXNvbnMuIFVzZSB0aGUKKyAqIFNBX1JFU1RBUlQgZmxhZyB0byBnZXQgcmVzdGFydGluZyBzaWduYWxzICh3aGljaCB3ZXJlIHRoZSBkZWZhdWx0IGxvbmcgYWdvKQorICogU0FfTk9DTERTVE9QIGZsYWcgdG8gdHVybiBvZmYgU0lHQ0hMRCB3aGVuIGNoaWxkcmVuIHN0b3AuCisgKiBTQV9SRVNFVEhBTkQgY2xlYXJzIHRoZSBoYW5kbGVyIHdoZW4gdGhlIHNpZ25hbCBpcyBkZWxpdmVyZWQuCisgKiBTQV9OT0NMRFdBSVQgZmxhZyBvbiBTSUdDSExEIHRvIGluaGliaXQgem9tYmllcy4KKyAqIFNBX05PREVGRVIgcHJldmVudHMgdGhlIGN1cnJlbnQgc2lnbmFsIGZyb20gYmVpbmcgbWFza2VkIGluIHRoZSBoYW5kbGVyLgorICoKKyAqIFNBX09ORVNIT1QgYW5kIFNBX05PTUFTSyBhcmUgdGhlIGhpc3RvcmljYWwgTGludXggbmFtZXMgZm9yIHRoZSBTaW5nbGUKKyAqIFVuaXggbmFtZXMgUkVTRVRIQU5EIGFuZCBOT0RFRkVSIHJlc3BlY3RpdmVseS4KKyAqLworCisjZGVmaW5lIFNBX05PQ0xEU1RPUAkweDAwMDAwMDAxdQorI2RlZmluZSBTQV9OT0NMRFdBSVQJMHgwMDAwMDAwMnUKKyNkZWZpbmUgU0FfU0lHSU5GTwkweDAwMDAwMDA0dQorI2RlZmluZSBTQV9PTlNUQUNLCTB4MDgwMDAwMDB1CisjZGVmaW5lIFNBX1JFU1RBUlQJMHgxMDAwMDAwMHUKKyNkZWZpbmUgU0FfTk9ERUZFUgkweDQwMDAwMDAwdQorI2RlZmluZSBTQV9SRVNFVEhBTkQJMHg4MDAwMDAwMHUKKworI2RlZmluZSBTQV9OT01BU0sJU0FfTk9ERUZFUgorI2RlZmluZSBTQV9PTkVTSE9UCVNBX1JFU0VUSEFORAorI2RlZmluZSBTQV9JTlRFUlJVUFQJMHgyMDAwMDAwMCAvKiBkdW1teSAtLSBpZ25vcmVkICovCisKKyNkZWZpbmUgU0FfUkVTVE9SRVIJMHgwNDAwMDAwMAorCisvKiAKKyAqIHNpZ2FsdHN0YWNrIGNvbnRyb2xzCisgKi8KKyNkZWZpbmUgU1NfT05TVEFDSwkxCisjZGVmaW5lIFNTX0RJU0FCTEUJMgorCisjZGVmaW5lIE1JTlNJR1NUS1NaCTIwNDgKKyNkZWZpbmUgU0lHU1RLU1oJODE5MgorCisjaWZkZWYgX19LRVJORUxfXworCisvKgorICogVGhlc2UgdmFsdWVzIG9mIHNhX2ZsYWdzIGFyZSB1c2VkIG9ubHkgYnkgdGhlIGtlcm5lbCBhcyBwYXJ0IG9mIHRoZQorICogaXJxIGhhbmRsaW5nIHJvdXRpbmVzLgorICoKKyAqIFNBX0lOVEVSUlVQVCBpcyBhbHNvIHVzZWQgYnkgdGhlIGlycSBoYW5kbGluZyByb3V0aW5lcy4KKyAqIFNBX1NISVJRIGlzIGZvciBzaGFyZWQgaW50ZXJydXB0IHN1cHBvcnQKKyAqLworI2RlZmluZSBTQV9QUk9CRQkJU0FfT05FU0hPVAorI2RlZmluZSBTQV9TQU1QTEVfUkFORE9NCVNBX1JFU1RBUlQKKyNkZWZpbmUgU0FfU0hJUlEJCTB4MDQwMDAwMDAKKyNlbmRpZgorCisjZGVmaW5lIFNJR19CTE9DSyAgICAgICAgICAwCS8qIGZvciBibG9ja2luZyBzaWduYWxzICovCisjZGVmaW5lIFNJR19VTkJMT0NLICAgICAgICAxCS8qIGZvciB1bmJsb2NraW5nIHNpZ25hbHMgKi8KKyNkZWZpbmUgU0lHX1NFVE1BU0sgICAgICAgIDIJLyogZm9yIHNldHRpbmcgdGhlIHNpZ25hbCBtYXNrICovCisKKy8qIFR5cGUgb2YgYSBzaWduYWwgaGFuZGxlci4gICovCit0eXBlZGVmIHZvaWQgKCpfX3NpZ2hhbmRsZXJfdCkoaW50KTsKKworI2RlZmluZSBTSUdfREZMCSgoX19zaWdoYW5kbGVyX3QpMCkJLyogZGVmYXVsdCBzaWduYWwgaGFuZGxpbmcgKi8KKyNkZWZpbmUgU0lHX0lHTgkoKF9fc2lnaGFuZGxlcl90KTEpCS8qIGlnbm9yZSBzaWduYWwgKi8KKyNkZWZpbmUgU0lHX0VSUgkoKF9fc2lnaGFuZGxlcl90KS0xKQkvKiBlcnJvciByZXR1cm4gZnJvbSBzaWduYWwgKi8KKworI2lmZGVmIF9fS0VSTkVMX18KK3N0cnVjdCBvbGRfc2lnYWN0aW9uIHsKKwlfX3NpZ2hhbmRsZXJfdCBzYV9oYW5kbGVyOworCW9sZF9zaWdzZXRfdCBzYV9tYXNrOworCXVuc2lnbmVkIGxvbmcgc2FfZmxhZ3M7CisJdm9pZCAoKnNhX3Jlc3RvcmVyKSh2b2lkKTsKK307CisKK3N0cnVjdCBzaWdhY3Rpb24geworCV9fc2lnaGFuZGxlcl90IHNhX2hhbmRsZXI7CisJdW5zaWduZWQgbG9uZyBzYV9mbGFnczsKKwl2b2lkICgqc2FfcmVzdG9yZXIpKHZvaWQpOworCXNpZ3NldF90IHNhX21hc2s7CQkvKiBtYXNrIGxhc3QgZm9yIGV4dGVuc2liaWxpdHkgKi8KK307CisKK3N0cnVjdCBrX3NpZ2FjdGlvbiB7CisJc3RydWN0IHNpZ2FjdGlvbiBzYTsKK307CisjZWxzZQorLyogSGVyZSB3ZSBtdXN0IGNhdGVyIHRvIGxpYmNzIHRoYXQgcG9rZSBhYm91dCBpbiBrZXJuZWwgaGVhZGVycy4gICovCisKK3N0cnVjdCBzaWdhY3Rpb24geworCXVuaW9uIHsKKwkgIF9fc2lnaGFuZGxlcl90IF9zYV9oYW5kbGVyOworCSAgdm9pZCAoKl9zYV9zaWdhY3Rpb24pKGludCwgc3RydWN0IHNpZ2luZm8gKiwgdm9pZCAqKTsKKwl9IF91OworCXNpZ3NldF90IHNhX21hc2s7CisJdW5zaWduZWQgbG9uZyBzYV9mbGFnczsKKwl2b2lkICgqc2FfcmVzdG9yZXIpKHZvaWQpOworfTsKKworI2RlZmluZSBzYV9oYW5kbGVyCV91Ll9zYV9oYW5kbGVyCisjZGVmaW5lIHNhX3NpZ2FjdGlvbglfdS5fc2Ffc2lnYWN0aW9uCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKK3R5cGVkZWYgc3RydWN0IHNpZ2FsdHN0YWNrIHsKKwl2b2lkICpzc19zcDsKKwlpbnQgc3NfZmxhZ3M7CisJc2l6ZV90IHNzX3NpemU7Cit9IHN0YWNrX3Q7CisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8YXNtL3NpZ2NvbnRleHQuaD4KKworLyogaGVyZSB3ZSBjb3VsZCBkZWZpbmUgYXNtLW9wdGltaXplZCBzaWdhZGRzZXQsIHNpZ2RlbHNldCBldGMuIG9wZXJhdGlvbnMuIAorICogaWYgd2UgZG9uJ3QsIGdlbmVyaWMgb25lcyBhcmUgdXNlZCBmcm9tIGxpbnV4L3NpZ25hbC5oCisgKi8KKyNkZWZpbmUgcHRyYWNlX3NpZ25hbF9kZWxpdmVyKHJlZ3MsIGNvb2tpZSkgZG8geyB9IHdoaWxlICgwKQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvc21wLmggYi9pbmNsdWRlL2FzbS1jcmlzL3NtcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyZjRmZWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL3NtcC5oCkBAIC0wLDAgKzEsNCBAQAorI2lmbmRlZiBfX0FTTV9TTVBfSAorI2RlZmluZSBfX0FTTV9TTVBfSAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvc29ja2V0LmggYi9pbmNsdWRlL2FzbS1jcmlzL3NvY2tldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxNTliNGYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL3NvY2tldC5oCkBAIC0wLDAgKzEsNTQgQEAKKyNpZm5kZWYgX0FTTV9TT0NLRVRfSAorI2RlZmluZSBfQVNNX1NPQ0tFVF9ICisKKy8qIGFsbW9zdCB0aGUgc2FtZSBhcyBhc20taTM4Ni9zb2NrZXQuaCAqLworCisjaW5jbHVkZSA8YXNtL3NvY2tpb3MuaD4KKworLyogRm9yIHNldHNvY2tvcHRpb25zKDIpICovCisjZGVmaW5lIFNPTF9TT0NLRVQJMQorCisjZGVmaW5lIFNPX0RFQlVHCTEKKyNkZWZpbmUgU09fUkVVU0VBRERSCTIKKyNkZWZpbmUgU09fVFlQRQkJMworI2RlZmluZSBTT19FUlJPUgk0CisjZGVmaW5lIFNPX0RPTlRST1VURQk1CisjZGVmaW5lIFNPX0JST0FEQ0FTVAk2CisjZGVmaW5lIFNPX1NOREJVRgk3CisjZGVmaW5lIFNPX1JDVkJVRgk4CisjZGVmaW5lIFNPX0tFRVBBTElWRQk5CisjZGVmaW5lIFNPX09PQklOTElORQkxMAorI2RlZmluZSBTT19OT19DSEVDSwkxMQorI2RlZmluZSBTT19QUklPUklUWQkxMgorI2RlZmluZSBTT19MSU5HRVIJMTMKKyNkZWZpbmUgU09fQlNEQ09NUEFUCTE0CisvKiBUbyBhZGQgOiNkZWZpbmUgU09fUkVVU0VQT1JUIDE1ICovCisjZGVmaW5lIFNPX1BBU1NDUkVECTE2CisjZGVmaW5lIFNPX1BFRVJDUkVECTE3CisjZGVmaW5lIFNPX1JDVkxPV0FUCTE4CisjZGVmaW5lIFNPX1NORExPV0FUCTE5CisjZGVmaW5lIFNPX1JDVlRJTUVPCTIwCisjZGVmaW5lIFNPX1NORFRJTUVPCTIxCisKKy8qIFNlY3VyaXR5IGxldmVscyAtIGFzIHBlciBOUkwgSVB2NiAtIGRvbid0IGFjdHVhbGx5IGRvIGFueXRoaW5nICovCisjZGVmaW5lIFNPX1NFQ1VSSVRZX0FVVEhFTlRJQ0FUSU9OCQkyMgorI2RlZmluZSBTT19TRUNVUklUWV9FTkNSWVBUSU9OX1RSQU5TUE9SVAkyMworI2RlZmluZSBTT19TRUNVUklUWV9FTkNSWVBUSU9OX05FVFdPUksJCTI0CisKKyNkZWZpbmUgU09fQklORFRPREVWSUNFCTI1CisKKy8qIFNvY2tldCBmaWx0ZXJpbmcgKi8KKyNkZWZpbmUgU09fQVRUQUNIX0ZJTFRFUiAgICAgICAgMjYKKyNkZWZpbmUgU09fREVUQUNIX0ZJTFRFUiAgICAgICAgMjcKKworI2RlZmluZSBTT19QRUVSTkFNRQkJMjgKKyNkZWZpbmUgU09fVElNRVNUQU1QICAgICAgICAgICAyOQorI2RlZmluZSBTQ01fVElNRVNUQU1QICAgICAgICAgIFNPX1RJTUVTVEFNUAorCisjZGVmaW5lIFNPX0FDQ0VQVENPTk4gICAgICAgICAgMzAKKworI2RlZmluZSBTT19QRUVSU0VDICAgICAgICAgICAgIDMxCisKKyNlbmRpZiAvKiBfQVNNX1NPQ0tFVF9IICovCisKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy9zb2NraW9zLmggYi9pbmNsdWRlL2FzbS1jcmlzL3NvY2tpb3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzQwMTJmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9zb2NraW9zLmgKQEAgLTAsMCArMSwxMiBAQAorI2lmbmRlZiBfX0FSQ0hfQ1JJU19TT0NLSU9TX18KKyNkZWZpbmUgX19BUkNIX0NSSVNfU09DS0lPU19fCisKKy8qIFNvY2tldC1sZXZlbCBJL08gY29udHJvbCBjYWxscy4gKi8KKyNkZWZpbmUgRklPU0VUT1dOIAkweDg5MDEKKyNkZWZpbmUgU0lPQ1NQR1JQCTB4ODkwMgorI2RlZmluZSBGSU9HRVRPV04JMHg4OTAzCisjZGVmaW5lIFNJT0NHUEdSUAkweDg5MDQKKyNkZWZpbmUgU0lPQ0FUTUFSSwkweDg5MDUKKyNkZWZpbmUgU0lPQ0dTVEFNUAkweDg5MDYJCS8qIEdldCBzdGFtcCAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvc3RhdC5oIGIvaW5jbHVkZS9hc20tY3Jpcy9zdGF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU1NThjYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvc3RhdC5oCkBAIC0wLDAgKzEsODEgQEAKKyNpZm5kZWYgX0NSSVNfU1RBVF9ICisjZGVmaW5lIF9DUklTX1NUQVRfSAorCisvKiBLZWVwIHRoaXMgYSB2ZXJiYXRpbSBjb3B5IG9mIGkzODYgdmVyc2lvbjsgdHdlYWsgQ1JJUy1zcGVjaWZpYyBiaXRzIGluCisgICB0aGUga2VybmVsIGlmIG5lY2Vzc2FyeS4gICovCisKK3N0cnVjdCBfX29sZF9rZXJuZWxfc3RhdCB7CisJdW5zaWduZWQgc2hvcnQgc3RfZGV2OworCXVuc2lnbmVkIHNob3J0IHN0X2lubzsKKwl1bnNpZ25lZCBzaG9ydCBzdF9tb2RlOworCXVuc2lnbmVkIHNob3J0IHN0X25saW5rOworCXVuc2lnbmVkIHNob3J0IHN0X3VpZDsKKwl1bnNpZ25lZCBzaG9ydCBzdF9naWQ7CisJdW5zaWduZWQgc2hvcnQgc3RfcmRldjsKKwl1bnNpZ25lZCBsb25nICBzdF9zaXplOworCXVuc2lnbmVkIGxvbmcgIHN0X2F0aW1lOworCXVuc2lnbmVkIGxvbmcgIHN0X210aW1lOworCXVuc2lnbmVkIGxvbmcgIHN0X2N0aW1lOworfTsKKworI2RlZmluZSBTVEFUX0hBVkVfTlNFQyAxCisKK3N0cnVjdCBzdGF0IHsKKwl1bnNpZ25lZCBsb25nICBzdF9kZXY7CisJdW5zaWduZWQgbG9uZyAgc3RfaW5vOworCXVuc2lnbmVkIHNob3J0IHN0X21vZGU7CisJdW5zaWduZWQgc2hvcnQgc3Rfbmxpbms7CisJdW5zaWduZWQgc2hvcnQgc3RfdWlkOworCXVuc2lnbmVkIHNob3J0IHN0X2dpZDsKKwl1bnNpZ25lZCBsb25nICBzdF9yZGV2OworCXVuc2lnbmVkIGxvbmcgIHN0X3NpemU7CisJdW5zaWduZWQgbG9uZyAgc3RfYmxrc2l6ZTsKKwl1bnNpZ25lZCBsb25nICBzdF9ibG9ja3M7CisJdW5zaWduZWQgbG9uZyAgc3RfYXRpbWU7CisJdW5zaWduZWQgbG9uZyAgc3RfYXRpbWVfbnNlYzsKKwl1bnNpZ25lZCBsb25nICBzdF9tdGltZTsKKwl1bnNpZ25lZCBsb25nICBzdF9tdGltZV9uc2VjOworCXVuc2lnbmVkIGxvbmcgIHN0X2N0aW1lOworCXVuc2lnbmVkIGxvbmcgIHN0X2N0aW1lX25zZWM7CisJdW5zaWduZWQgbG9uZyAgX191bnVzZWQ0OworCXVuc2lnbmVkIGxvbmcgIF9fdW51c2VkNTsKK307CisKKy8qIFRoaXMgbWF0Y2hlcyBzdHJ1Y3Qgc3RhdDY0IGluIGdsaWJjMi4xLCBoZW5jZSB0aGUgYWJzb2x1dGVseQorICogaW5zYW5lIGFtb3VudHMgb2YgcGFkZGluZyBhcm91bmQgZGV2X3Qncy4KKyAqLworc3RydWN0IHN0YXQ2NCB7CisJdW5zaWduZWQgbG9uZyBsb25nCXN0X2RldjsKKwl1bnNpZ25lZCBjaGFyCV9fcGFkMFs0XTsKKworI2RlZmluZSBTVEFUNjRfSEFTX0JST0tFTl9TVF9JTk8JMQorCXVuc2lnbmVkIGxvbmcJX19zdF9pbm87CisKKwl1bnNpZ25lZCBpbnQJc3RfbW9kZTsKKwl1bnNpZ25lZCBpbnQJc3Rfbmxpbms7CisKKwl1bnNpZ25lZCBsb25nCXN0X3VpZDsKKwl1bnNpZ25lZCBsb25nCXN0X2dpZDsKKworCXVuc2lnbmVkIGxvbmcgbG9uZwlzdF9yZGV2OworCXVuc2lnbmVkIGNoYXIJX19wYWQzWzRdOworCisJbG9uZyBsb25nCXN0X3NpemU7CisJdW5zaWduZWQgbG9uZwlzdF9ibGtzaXplOworCisJdW5zaWduZWQgbG9uZwlzdF9ibG9ja3M7CS8qIE51bWJlciA1MTItYnl0ZSBibG9ja3MgYWxsb2NhdGVkLiAqLworCXVuc2lnbmVkIGxvbmcJX19wYWQ0OwkJLyogZnV0dXJlIHBvc3NpYmxlIHN0X2Jsb2NrcyBoaWdoIGJpdHMgKi8KKworCXVuc2lnbmVkIGxvbmcJc3RfYXRpbWU7CisJdW5zaWduZWQgbG9uZwlzdF9hdGltZV9uc2VjOworCisJdW5zaWduZWQgbG9uZwlzdF9tdGltZTsKKwl1bnNpZ25lZCBsb25nCXN0X210aW1lX25zZWM7CisKKwl1bnNpZ25lZCBsb25nCXN0X2N0aW1lOworCXVuc2lnbmVkIGxvbmcJc3RfY3RpbWVfbnNlYzsJLyogd2lsbCBiZSBoaWdoIDMyIGJpdHMgb2YgY3RpbWUgc29tZWRheSAqLworCisJdW5zaWduZWQgbG9uZyBsb25nCXN0X2lubzsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy9zdGF0ZnMuaCBiL2luY2x1ZGUvYXNtLWNyaXMvc3RhdGZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRhZjkyMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvc3RhdGZzLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9DUklTX1NUQVRGU19ICisjZGVmaW5lIF9DUklTX1NUQVRGU19ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zdGF0ZnMuaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1jcmlzL3N0cmluZy5oIGIvaW5jbHVkZS9hc20tY3Jpcy9zdHJpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTExOTBlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9zdHJpbmcuaApAQCAtMCwwICsxLDE0IEBACisjaWZuZGVmIF9BU01fQ1JJU19TVFJJTkdfSAorI2RlZmluZSBfQVNNX0NSSVNfU1RSSU5HX0gKKworLyogdGhlIG9wdGltaXplZCBtZW1jcHkgaXMgaW4gYXJjaC9jcmlzL2xpYi9zdHJpbmcuYyAqLworCisjZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNQWQorZXh0ZXJuIHZvaWQgKm1lbWNweSh2b2lkICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsKKworLyogTmV3IGFuZCBpbXByb3ZlZC4gIEluIGFyY2gvY3Jpcy9saWIvbWVtc2V0LmMgKi8KKworI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1TRVQKK2V4dGVybiB2b2lkICptZW1zZXQodm9pZCAqLCBpbnQsIHNpemVfdCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLWNyaXMvc3lzdGVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA2NzM5OAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvc3lzdGVtLmgKQEAgLTAsMCArMSw3NCBAQAorI2lmbmRlZiBfX0FTTV9DUklTX1NZU1RFTV9ICisjZGVmaW5lIF9fQVNNX0NSSVNfU1lTVEVNX0gKKworI2luY2x1ZGUgPGFzbS9hcmNoL3N5c3RlbS5oPgorCisvKiB0aGUgc3dpdGNoX3RvIG1hY3JvIGNhbGxzIHJlc3VtZSwgYW4gYXNtIGZ1bmN0aW9uIGluIGVudHJ5LlMgd2hpY2ggZG9lcyB0aGUgYWN0dWFsCisgKiB0YXNrIHN3aXRjaGluZy4KKyAqLworCitleHRlcm4gc3RydWN0IHRhc2tfc3RydWN0ICpyZXN1bWUoc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQsIGludCk7CisjZGVmaW5lIHByZXBhcmVfdG9fc3dpdGNoKCkgICAgIGRvIHsgfSB3aGlsZSgwKQorI2RlZmluZSBzd2l0Y2hfdG8ocHJldixuZXh0LGxhc3QpIGxhc3QgPSByZXN1bWUocHJldixuZXh0LCBcCisJCQkJCSAoaW50KSYoKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTApLT50aHJlYWQpCisKKyNkZWZpbmUgYmFycmllcigpIF9fYXNtX18gX192b2xhdGlsZV9fKCIiOiA6IDoibWVtb3J5IikKKyNkZWZpbmUgbWIoKSBiYXJyaWVyKCkKKyNkZWZpbmUgcm1iKCkgbWIoKQorI2RlZmluZSB3bWIoKSBtYigpCisjZGVmaW5lIHJlYWRfYmFycmllcl9kZXBlbmRzKCkgZG8geyB9IHdoaWxlKDApCisjZGVmaW5lIHNldF9tYih2YXIsIHZhbHVlKSAgZG8geyB2YXIgPSB2YWx1ZTsgbWIoKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgc2V0X3dtYih2YXIsIHZhbHVlKSBkbyB7IHZhciA9IHZhbHVlOyB3bWIoKTsgfSB3aGlsZSAoMCkKKworI2lmZGVmIENPTkZJR19TTVAKKyNkZWZpbmUgc21wX21iKCkgICAgICAgIG1iKCkKKyNkZWZpbmUgc21wX3JtYigpICAgICAgIHJtYigpCisjZGVmaW5lIHNtcF93bWIoKSAgICAgICB3bWIoKQorI2RlZmluZSBzbXBfcmVhZF9iYXJyaWVyX2RlcGVuZHMoKSAgICAgcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQorI2Vsc2UKKyNkZWZpbmUgc21wX21iKCkgICAgICAgIGJhcnJpZXIoKQorI2RlZmluZSBzbXBfcm1iKCkgICAgICAgYmFycmllcigpCisjZGVmaW5lIHNtcF93bWIoKSAgICAgICBiYXJyaWVyKCkKKyNkZWZpbmUgc21wX3JlYWRfYmFycmllcl9kZXBlbmRzKCkgICAgIGRvIHsgfSB3aGlsZSgwKQorI2VuZGlmCisKKyNkZWZpbmUgaXJldCgpCisKKy8qCisgKiBkaXNhYmxlIGhsdCBkdXJpbmcgY2VydGFpbiBjcml0aWNhbCBpL28gb3BlcmF0aW9ucworICovCisjZGVmaW5lIEhBVkVfRElTQUJMRV9ITFQKK3ZvaWQgZGlzYWJsZV9obHQodm9pZCk7Cit2b2lkIGVuYWJsZV9obHQodm9pZCk7CisKK2V4dGVybiBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX3hjaGcodW5zaWduZWQgbG9uZyB4LCB2b2xhdGlsZSB2b2lkICogcHRyLCBpbnQgc2l6ZSkKK3sKKyAgLyogc2luY2UgRXRyYXggZG9lc24ndCBoYXZlIGFueSBhdG9taWMgeGNoZyBpbnN0cnVjdGlvbnMsIHdlIG5lZWQgdG8gZGlzYWJsZQorICAgICBpcnEncyAoaWYgZW5hYmxlZCkgYW5kIGRvIGl0IHdpdGggbW92ZS5kJ3MgKi8KKyAgdW5zaWduZWQgbG9uZyBmbGFncyx0ZW1wOworICBsb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKTsgLyogc2F2ZSBmbGFncywgaW5jbHVkaW5nIGlycSBlbmFibGUgYml0ICovCisgIGxvY2FsX2lycV9kaXNhYmxlKCk7ICAgICAgICAgICAgIC8qIHNodXQgb2ZmIGlycSdzICovCisgIHN3aXRjaCAoc2l6ZSkgeworICBjYXNlIDE6CisgICAgKigodW5zaWduZWQgY2hhciAqKSZ0ZW1wKSA9IHg7CisgICAgeCA9ICoodW5zaWduZWQgY2hhciAqKXB0cjsKKyAgICAqKHVuc2lnbmVkIGNoYXIgKilwdHIgPSAqKCh1bnNpZ25lZCBjaGFyICopJnRlbXApOworICAgIGJyZWFrOworICBjYXNlIDI6CisgICAgKigodW5zaWduZWQgc2hvcnQgKikmdGVtcCkgPSB4OworICAgIHggPSAqKHVuc2lnbmVkIHNob3J0ICopcHRyOworICAgICoodW5zaWduZWQgc2hvcnQgKilwdHIgPSAqKCh1bnNpZ25lZCBzaG9ydCAqKSZ0ZW1wKTsKKyAgICBicmVhazsKKyAgY2FzZSA0OgorICAgIHRlbXAgPSB4OworICAgIHggPSAqKHVuc2lnbmVkIGxvbmcgKilwdHI7CisgICAgKih1bnNpZ25lZCBsb25nICopcHRyID0gdGVtcDsKKyAgICBicmVhazsKKyAgfQorICBsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7IC8qIHJlc3RvcmUgaXJxIGVuYWJsZSBiaXQgKi8KKyAgcmV0dXJuIHg7Cit9CisKKyNkZWZpbmUgYXJjaF9hbGlnbl9zdGFjayh4KSAoeCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1jcmlzL3Rlcm1iaXRzLmggYi9pbmNsdWRlL2FzbS1jcmlzL3Rlcm1iaXRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZkOWE0OQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvdGVybWJpdHMuaApAQCAtMCwwICsxLDE5OCBAQAorLyogJElkOiB0ZXJtYml0cy5oLHYgMS4xIDIwMDAvMDcvMTAgMTY6MzI6MzEgYmpvcm53IEV4cCAkICovCisKKyNpZm5kZWYgX19BUkNIX0VUUkFYMTAwX1RFUk1CSVRTX0hfXworI2RlZmluZSBfX0FSQ0hfRVRSQVgxMDBfVEVSTUJJVFNfSF9fCisKKyNpbmNsdWRlIDxsaW51eC9wb3NpeF90eXBlcy5oPgorCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIJY2NfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50CXNwZWVkX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludAl0Y2ZsYWdfdDsKKworI2RlZmluZSBOQ0NTIDE5CitzdHJ1Y3QgdGVybWlvcyB7CisJdGNmbGFnX3QgY19pZmxhZzsJCS8qIGlucHV0IG1vZGUgZmxhZ3MgKi8KKwl0Y2ZsYWdfdCBjX29mbGFnOwkJLyogb3V0cHV0IG1vZGUgZmxhZ3MgKi8KKwl0Y2ZsYWdfdCBjX2NmbGFnOwkJLyogY29udHJvbCBtb2RlIGZsYWdzICovCisJdGNmbGFnX3QgY19sZmxhZzsJCS8qIGxvY2FsIG1vZGUgZmxhZ3MgKi8KKwljY190IGNfbGluZTsJCQkvKiBsaW5lIGRpc2NpcGxpbmUgKi8KKwljY190IGNfY2NbTkNDU107CQkvKiBjb250cm9sIGNoYXJhY3RlcnMgKi8KK307CisKKy8qIGNfY2MgY2hhcmFjdGVycyAqLworI2RlZmluZSBWSU5UUiAwCisjZGVmaW5lIFZRVUlUIDEKKyNkZWZpbmUgVkVSQVNFIDIKKyNkZWZpbmUgVktJTEwgMworI2RlZmluZSBWRU9GIDQKKyNkZWZpbmUgVlRJTUUgNQorI2RlZmluZSBWTUlOIDYKKyNkZWZpbmUgVlNXVEMgNworI2RlZmluZSBWU1RBUlQgOAorI2RlZmluZSBWU1RPUCA5CisjZGVmaW5lIFZTVVNQIDEwCisjZGVmaW5lIFZFT0wgMTEKKyNkZWZpbmUgVlJFUFJJTlQgMTIKKyNkZWZpbmUgVkRJU0NBUkQgMTMKKyNkZWZpbmUgVldFUkFTRSAxNAorI2RlZmluZSBWTE5FWFQgMTUKKyNkZWZpbmUgVkVPTDIgMTYKKworLyogY19pZmxhZyBiaXRzICovCisjZGVmaW5lIElHTkJSSwkwMDAwMDAxCisjZGVmaW5lIEJSS0lOVAkwMDAwMDAyCisjZGVmaW5lIElHTlBBUgkwMDAwMDA0CisjZGVmaW5lIFBBUk1SSwkwMDAwMDEwCisjZGVmaW5lIElOUENLCTAwMDAwMjAKKyNkZWZpbmUgSVNUUklQCTAwMDAwNDAKKyNkZWZpbmUgSU5MQ1IJMDAwMDEwMAorI2RlZmluZSBJR05DUgkwMDAwMjAwCisjZGVmaW5lIElDUk5MCTAwMDA0MDAKKyNkZWZpbmUgSVVDTEMJMDAwMTAwMAorI2RlZmluZSBJWE9OCTAwMDIwMDAKKyNkZWZpbmUgSVhBTlkJMDAwNDAwMAorI2RlZmluZSBJWE9GRgkwMDEwMDAwCisjZGVmaW5lIElNQVhCRUwJMDAyMDAwMAorI2RlZmluZSBJVVRGOAkwMDQwMDAwCisKKy8qIGNfb2ZsYWcgYml0cyAqLworI2RlZmluZSBPUE9TVAkwMDAwMDAxCisjZGVmaW5lIE9MQ1VDCTAwMDAwMDIKKyNkZWZpbmUgT05MQ1IJMDAwMDAwNAorI2RlZmluZSBPQ1JOTAkwMDAwMDEwCisjZGVmaW5lIE9OT0NSCTAwMDAwMjAKKyNkZWZpbmUgT05MUkVUCTAwMDAwNDAKKyNkZWZpbmUgT0ZJTEwJMDAwMDEwMAorI2RlZmluZSBPRkRFTAkwMDAwMjAwCisjZGVmaW5lIE5MRExZCTAwMDA0MDAKKyNkZWZpbmUgICBOTDAJMDAwMDAwMAorI2RlZmluZSAgIE5MMQkwMDAwNDAwCisjZGVmaW5lIENSRExZCTAwMDMwMDAKKyNkZWZpbmUgICBDUjAJMDAwMDAwMAorI2RlZmluZSAgIENSMQkwMDAxMDAwCisjZGVmaW5lICAgQ1IyCTAwMDIwMDAKKyNkZWZpbmUgICBDUjMJMDAwMzAwMAorI2RlZmluZSBUQUJETFkJMDAxNDAwMAorI2RlZmluZSAgIFRBQjAJMDAwMDAwMAorI2RlZmluZSAgIFRBQjEJMDAwNDAwMAorI2RlZmluZSAgIFRBQjIJMDAxMDAwMAorI2RlZmluZSAgIFRBQjMJMDAxNDAwMAorI2RlZmluZSAgIFhUQUJTCTAwMTQwMDAKKyNkZWZpbmUgQlNETFkJMDAyMDAwMAorI2RlZmluZSAgIEJTMAkwMDAwMDAwCisjZGVmaW5lICAgQlMxCTAwMjAwMDAKKyNkZWZpbmUgVlRETFkJMDA0MDAwMAorI2RlZmluZSAgIFZUMAkwMDAwMDAwCisjZGVmaW5lICAgVlQxCTAwNDAwMDAKKyNkZWZpbmUgRkZETFkJMDEwMDAwMAorI2RlZmluZSAgIEZGMAkwMDAwMDAwCisjZGVmaW5lICAgRkYxCTAxMDAwMDAKKworLyogY19jZmxhZyBiaXQgbWVhbmluZyAqLworLyoKKyAqICAgICAzICAgICAgICAgICAgIDIgICAgICAgICAgICAxCisgKiAgICAxMCA5ODcgNjU0IDMyMSAwOTggNzY1IDQzMiAxMDkgODc2IDU0MyAyMTAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8IHx8fCBDQkFVRAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iYXVkICAgIAorICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHxDU0laRQorICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxDU1RPUAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Q1JFQUQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Q1BBUkVOQgorICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfENQQVJPREQgCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfEhVUENMCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Q0xPQ0FMCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfENCQVVERVgKKyAqICAgIDEwIDk4NyA2NTQgMzIxIDA5OCA3NjUgNDMyIDEwOSA4NzYgNTQzIDIxMAorICogICAgICAgIHwgICAgICAgICAgIHx8IHx8ICAgQ0lCQVVELCBJQlNISUZUPTE2CisgKiAgICAgICAgICAgICAgICAgICAgaWJhdWQKKyAqICAgICB8Q01TUEFSCisgKiAgICB8IENSVFNDVFMKKyAqICAgICAgIHggeCB4eHggeHh4IHggICAgIHggeHggRnJlZSBiaXRzCisgKi8KKworI2RlZmluZSBDQkFVRAkwMDEwMDE3CisjZGVmaW5lICBCMAkwMDAwMDAwCQkvKiBoYW5nIHVwICovCisjZGVmaW5lICBCNTAJMDAwMDAwMQorI2RlZmluZSAgQjc1CTAwMDAwMDIKKyNkZWZpbmUgIEIxMTAJMDAwMDAwMworI2RlZmluZSAgQjEzNAkwMDAwMDA0CisjZGVmaW5lICBCMTUwCTAwMDAwMDUKKyNkZWZpbmUgIEIyMDAJMDAwMDAwNgorI2RlZmluZSAgQjMwMAkwMDAwMDA3CisjZGVmaW5lICBCNjAwCTAwMDAwMTAKKyNkZWZpbmUgIEIxMjAwCTAwMDAwMTEKKyNkZWZpbmUgIEIxODAwCTAwMDAwMTIKKyNkZWZpbmUgIEIyNDAwCTAwMDAwMTMKKyNkZWZpbmUgIEI0ODAwCTAwMDAwMTQKKyNkZWZpbmUgIEI5NjAwCTAwMDAwMTUKKyNkZWZpbmUgIEIxOTIwMAkwMDAwMDE2CisjZGVmaW5lICBCMzg0MDAJMDAwMDAxNworI2RlZmluZSBFWFRBIEIxOTIwMAorI2RlZmluZSBFWFRCIEIzODQwMAorI2RlZmluZSBDU0laRQkwMDAwMDYwCisjZGVmaW5lICAgQ1M1CTAwMDAwMDAKKyNkZWZpbmUgICBDUzYJMDAwMDAyMAorI2RlZmluZSAgIENTNwkwMDAwMDQwCisjZGVmaW5lICAgQ1M4CTAwMDAwNjAKKyNkZWZpbmUgQ1NUT1BCCTAwMDAxMDAKKyNkZWZpbmUgQ1JFQUQJMDAwMDIwMAorI2RlZmluZSBQQVJFTkIJMDAwMDQwMAorI2RlZmluZSBQQVJPREQJMDAwMTAwMAorI2RlZmluZSBIVVBDTAkwMDAyMDAwCisjZGVmaW5lIENMT0NBTAkwMDA0MDAwCisjZGVmaW5lIENCQVVERVggMDAxMDAwMAorI2RlZmluZSAgQjU3NjAwICAwMDEwMDAxCisjZGVmaW5lICBCMTE1MjAwIDAwMTAwMDIKKyNkZWZpbmUgIEIyMzA0MDAgMDAxMDAwMworI2RlZmluZSAgQjQ2MDgwMCAwMDEwMDA0CisvKiBldHJheCBzdXBwb3J0cyB0aGVzZSBhZGRpdGlvbmFsIHRocmVlIGJhdWQgcmF0ZXMgKi8KKyNkZWZpbmUgIEI5MjE2MDAgICAwMDEwMDA1CisjZGVmaW5lICBCMTg0MzIwMCAgMDAxMDAwNgorI2RlZmluZSAgQjYyNTAwMDAgIDAwMTAwMDcKKy8qIGV0cmF4IDIwMCBzdXBwb3J0cyB0aGlzIGFzIHdlbGwgKi8KKyNkZWZpbmUgIEIxMjUwMDAwMCAwMDEwMDEwCisjZGVmaW5lIENJQkFVRAkgIDAwMjAwMzYwMDAwMAkvKiBpbnB1dCBiYXVkIHJhdGUgKHVzZWQgaW4gdjMyKSAqLworLyogVGhlIHZhbHVlcyBmb3IgQ0lCQVVEIGJpdHMgYXJlIHRoZSBzYW1lIGFzIHRoZSB2YWx1ZXMgZm9yIENCQVVEIGFuZCBDQkFVREVYCisgKiBzaGlmdGVkIGxlZnQgSUJTSElGVCBiaXRzLgorICovCisjZGVmaW5lIElCU0hJRlQgICAxNgorI2RlZmluZSBDTVNQQVIgICAgMDEwMDAwMDAwMDAwIC8qIG1hcmsgb3Igc3BhY2UgKHN0aWNrKSBwYXJpdHkgLSBQQVJPREQ9c3BhY2UqLworI2RlZmluZSBDUlRTQ1RTCSAgMDIwMDAwMDAwMDAwCQkvKiBmbG93IGNvbnRyb2wgKi8KKworLyogY19sZmxhZyBiaXRzICovCisjZGVmaW5lIElTSUcJMDAwMDAwMQorI2RlZmluZSBJQ0FOT04JMDAwMDAwMgorI2RlZmluZSBYQ0FTRQkwMDAwMDA0CisjZGVmaW5lIEVDSE8JMDAwMDAxMAorI2RlZmluZSBFQ0hPRQkwMDAwMDIwCisjZGVmaW5lIEVDSE9LCTAwMDAwNDAKKyNkZWZpbmUgRUNIT05MCTAwMDAxMDAKKyNkZWZpbmUgTk9GTFNICTAwMDAyMDAKKyNkZWZpbmUgVE9TVE9QCTAwMDA0MDAKKyNkZWZpbmUgRUNIT0NUTAkwMDAxMDAwCisjZGVmaW5lIEVDSE9QUlQJMDAwMjAwMAorI2RlZmluZSBFQ0hPS0UJMDAwNDAwMAorI2RlZmluZSBGTFVTSE8JMDAxMDAwMAorI2RlZmluZSBQRU5ESU4JMDA0MDAwMAorI2RlZmluZSBJRVhURU4JMDEwMDAwMAorCisvKiB0Y2Zsb3coKSBhbmQgVENYT05DIHVzZSB0aGVzZSAqLworI2RlZmluZQlUQ09PRkYJCTAKKyNkZWZpbmUJVENPT04JCTEKKyNkZWZpbmUJVENJT0ZGCQkyCisjZGVmaW5lCVRDSU9OCQkzCisKKy8qIHRjZmx1c2goKSBhbmQgVENGTFNIIHVzZSB0aGVzZSAqLworI2RlZmluZQlUQ0lGTFVTSAkwCisjZGVmaW5lCVRDT0ZMVVNICTEKKyNkZWZpbmUJVENJT0ZMVVNICTIKKworLyogdGNzZXRhdHRyIHVzZXMgdGhlc2UgKi8KKyNkZWZpbmUJVENTQU5PVwkJMAorI2RlZmluZQlUQ1NBRFJBSU4JMQorI2RlZmluZQlUQ1NBRkxVU0gJMgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvdGVybWlvcy5oIGIvaW5jbHVkZS9hc20tY3Jpcy90ZXJtaW9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNlMTAyMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvdGVybWlvcy5oCkBAIC0wLDAgKzEsMTA3IEBACisjaWZuZGVmIF9DUklTX1RFUk1JT1NfSAorI2RlZmluZSBfQ1JJU19URVJNSU9TX0gKKworI2luY2x1ZGUgPGFzbS90ZXJtYml0cy5oPgorI2luY2x1ZGUgPGFzbS9pb2N0bHMuaD4KKyNpbmNsdWRlIDxhc20vcnM0ODUuaD4KKworc3RydWN0IHdpbnNpemUgeworCXVuc2lnbmVkIHNob3J0IHdzX3JvdzsKKwl1bnNpZ25lZCBzaG9ydCB3c19jb2w7CisJdW5zaWduZWQgc2hvcnQgd3NfeHBpeGVsOworCXVuc2lnbmVkIHNob3J0IHdzX3lwaXhlbDsKK307CisKKyNkZWZpbmUgTkNDIDgKK3N0cnVjdCB0ZXJtaW8geworCXVuc2lnbmVkIHNob3J0IGNfaWZsYWc7CQkvKiBpbnB1dCBtb2RlIGZsYWdzICovCisJdW5zaWduZWQgc2hvcnQgY19vZmxhZzsJCS8qIG91dHB1dCBtb2RlIGZsYWdzICovCisJdW5zaWduZWQgc2hvcnQgY19jZmxhZzsJCS8qIGNvbnRyb2wgbW9kZSBmbGFncyAqLworCXVuc2lnbmVkIHNob3J0IGNfbGZsYWc7CQkvKiBsb2NhbCBtb2RlIGZsYWdzICovCisJdW5zaWduZWQgY2hhciBjX2xpbmU7CQkvKiBsaW5lIGRpc2NpcGxpbmUgKi8KKwl1bnNpZ25lZCBjaGFyIGNfY2NbTkNDXTsJLyogY29udHJvbCBjaGFyYWN0ZXJzICovCit9OworCisvKiBtb2RlbSBsaW5lcyAqLworI2RlZmluZSBUSU9DTV9MRQkweDAwMQorI2RlZmluZSBUSU9DTV9EVFIJMHgwMDIKKyNkZWZpbmUgVElPQ01fUlRTCTB4MDA0CisjZGVmaW5lIFRJT0NNX1NUCTB4MDA4CisjZGVmaW5lIFRJT0NNX1NSCTB4MDEwCisjZGVmaW5lIFRJT0NNX0NUUwkweDAyMAorI2RlZmluZSBUSU9DTV9DQVIJMHgwNDAKKyNkZWZpbmUgVElPQ01fUk5HCTB4MDgwCisjZGVmaW5lIFRJT0NNX0RTUgkweDEwMAorI2RlZmluZSBUSU9DTV9DRAlUSU9DTV9DQVIKKyNkZWZpbmUgVElPQ01fUkkJVElPQ01fUk5HCisjZGVmaW5lIFRJT0NNX09VVDEJMHgyMDAwCisjZGVmaW5lIFRJT0NNX09VVDIJMHg0MDAwCisjZGVmaW5lIFRJT0NNX0xPT1AJMHg4MDAwCisKKy8qIGlvY3RsIChmZCwgVElPQ1NFUkdFVExTUiwgJnJlc3VsdCkgd2hlcmUgcmVzdWx0IG1heSBiZSBhcyBiZWxvdyAqLworCisvKiBsaW5lIGRpc2NpcGxpbmVzICovCisjZGVmaW5lIE5fVFRZCQkwCisjZGVmaW5lIE5fU0xJUAkJMQorI2RlZmluZSBOX01PVVNFCQkyCisjZGVmaW5lIE5fUFBQCQkzCisjZGVmaW5lIE5fU1RSSVAJCTQKKyNkZWZpbmUgTl9BWDI1CQk1CisjZGVmaW5lIE5fWDI1CQk2CS8qIFguMjUgYXN5bmMgKi8KKyNkZWZpbmUgTl82UEFDSwkJNworI2RlZmluZSBOX01BU0MJCTgJLyogUmVzZXJ2ZWQgZm9yIE1vYml0ZXggbW9kdWxlIDxrYXpAY2FmZS5uZXQ+ICovCisjZGVmaW5lIE5fUjM5NjQJCTkJLyogUmVzZXJ2ZWQgZm9yIFNpbWF0aWMgUjM5NjQgbW9kdWxlICovCisjZGVmaW5lIE5fUFJPRklCVVNfRkRMCTEwCS8qIFJlc2VydmVkIGZvciBQcm9maWJ1cyA8RGF2ZUBtdmhpLmNvbT4gKi8KKyNkZWZpbmUgTl9JUkRBCQkxMQkvKiBMaW51eCBJUiAtIGh0dHA6Ly9pcmRhLnNvdXJjZWZvcmdlLm5ldC8gKi8KKyNkZWZpbmUgTl9TTVNCTE9DSwkxMgkvKiBTTVMgYmxvY2sgbW9kZSAtIGZvciB0YWxraW5nIHRvIEdTTSBkYXRhIGNhcmRzIGFib3V0IFNNUyBtZXNzYWdlcyAqLworI2RlZmluZSBOX0hETEMJCTEzCS8qIHN5bmNocm9ub3VzIEhETEMgKi8KKyNkZWZpbmUgTl9TWU5DX1BQUAkxNAkvKiBzeW5jaHJvbm91cyBQUFAgKi8KKyNkZWZpbmUgTl9CVAkJMTUJLyogYmx1ZXRvb3RoICovCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKy8qCWludHI9XkMJCXF1aXQ9XlwJCWVyYXNlPWRlbAlraWxsPV5VCisJZW9mPV5ECQl2dGltZT1cMAl2bWluPVwxCQlzeHRjPVwwCisJc3RhcnQ9XlEJc3RvcD1eUwkJc3VzcD1eWgkJZW9sPVwwCisJcmVwcmludD1eUglkaXNjYXJkPV5VCXdlcmFzZT1eVwlsbmV4dD1eVgorCWVvbDI9XDAKKyovCisjZGVmaW5lIElOSVRfQ19DQyAiXDAwM1wwMzRcMTc3XDAyNVwwMDRcMFwxXDBcMDIxXDAyM1wwMzJcMFwwMjJcMDE3XDAyN1wwMjZcMCIKKworLyoKKyAqIFRyYW5zbGF0ZSBhICJ0ZXJtaW8iIHN0cnVjdHVyZSBpbnRvIGEgInRlcm1pb3MiLiBVZ2guCisgKi8KKyNkZWZpbmUgU0VUX0xPV19URVJNSU9TX0JJVFModGVybWlvcywgdGVybWlvLCB4KSB7IFwKKwl1bnNpZ25lZCBzaG9ydCBfX3RtcDsgXAorCWdldF91c2VyKF9fdG1wLCYodGVybWlvKS0+eCk7IFwKKwkqKHVuc2lnbmVkIHNob3J0ICopICYodGVybWlvcyktPnggPSBfX3RtcDsgXAorfQorCisjZGVmaW5lIHVzZXJfdGVybWlvX3RvX2tlcm5lbF90ZXJtaW9zKHRlcm1pb3MsIHRlcm1pbykgXAorKHsgXAorCVNFVF9MT1dfVEVSTUlPU19CSVRTKHRlcm1pb3MsIHRlcm1pbywgY19pZmxhZyk7IFwKKwlTRVRfTE9XX1RFUk1JT1NfQklUUyh0ZXJtaW9zLCB0ZXJtaW8sIGNfb2ZsYWcpOyBcCisJU0VUX0xPV19URVJNSU9TX0JJVFModGVybWlvcywgdGVybWlvLCBjX2NmbGFnKTsgXAorCVNFVF9MT1dfVEVSTUlPU19CSVRTKHRlcm1pb3MsIHRlcm1pbywgY19sZmxhZyk7IFwKKwljb3B5X2Zyb21fdXNlcigodGVybWlvcyktPmNfY2MsICh0ZXJtaW8pLT5jX2NjLCBOQ0MpOyBcCit9KQorCisvKgorICogVHJhbnNsYXRlIGEgInRlcm1pb3MiIHN0cnVjdHVyZSBpbnRvIGEgInRlcm1pbyIuIFVnaC4KKyAqLworI2RlZmluZSBrZXJuZWxfdGVybWlvc190b191c2VyX3Rlcm1pbyh0ZXJtaW8sIHRlcm1pb3MpIFwKKyh7IFwKKwlwdXRfdXNlcigodGVybWlvcyktPmNfaWZsYWcsICYodGVybWlvKS0+Y19pZmxhZyk7IFwKKwlwdXRfdXNlcigodGVybWlvcyktPmNfb2ZsYWcsICYodGVybWlvKS0+Y19vZmxhZyk7IFwKKwlwdXRfdXNlcigodGVybWlvcyktPmNfY2ZsYWcsICYodGVybWlvKS0+Y19jZmxhZyk7IFwKKwlwdXRfdXNlcigodGVybWlvcyktPmNfbGZsYWcsICYodGVybWlvKS0+Y19sZmxhZyk7IFwKKwlwdXRfdXNlcigodGVybWlvcyktPmNfbGluZSwgICYodGVybWlvKS0+Y19saW5lKTsgXAorCWNvcHlfdG9fdXNlcigodGVybWlvKS0+Y19jYywgKHRlcm1pb3MpLT5jX2NjLCBOQ0MpOyBcCit9KQorCisjZGVmaW5lIHVzZXJfdGVybWlvc190b19rZXJuZWxfdGVybWlvcyhrLCB1KSBjb3B5X2Zyb21fdXNlcihrLCB1LCBzaXplb2Yoc3RydWN0IHRlcm1pb3MpKQorI2RlZmluZSBrZXJuZWxfdGVybWlvc190b191c2VyX3Rlcm1pb3ModSwgaykgY29weV90b191c2VyKHUsIGssIHNpemVvZihzdHJ1Y3QgdGVybWlvcykpCisKKyNlbmRpZgkvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZgkvKiBfQ1JJU19URVJNSU9TX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvdGhyZWFkX2luZm8uaCBiL2luY2x1ZGUvYXNtLWNyaXMvdGhyZWFkX2luZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzE5M2ZlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy90aHJlYWRfaW5mby5oCkBAIC0wLDAgKzEsMTAxIEBACisvKiB0aHJlYWRfaW5mby5oOiBDUklTIGxvdy1sZXZlbCB0aHJlYWQgaW5mb3JtYXRpb24KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgIERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKiAtIEluY29ycG9yYXRpbmcgc3VnZ2VzdGlvbnMgbWFkZSBieSBMaW51cyBUb3J2YWxkcyBhbmQgRGF2ZSBNaWxsZXIKKyAqIAorICogQ1JJUyBwb3J0IGJ5IEF4aXMgQ29tbXVuaWNhdGlvbnMKKyAqLworCisjaWZuZGVmIF9BU01fVEhSRUFEX0lORk9fSAorI2RlZmluZSBfQVNNX1RIUkVBRF9JTkZPX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvdGhyZWFkX2luZm8uaD4KKyNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgorI2VuZGlmCisKKworLyoKKyAqIGxvdyBsZXZlbCB0YXNrIGRhdGEgdGhhdCBlbnRyeS5TIG5lZWRzIGltbWVkaWF0ZSBhY2Nlc3MgdG8KKyAqIC0gdGhpcyBzdHJ1Y3Qgc2hvdWxkIGZpdCBlbnRpcmVseSBpbnNpZGUgb2Ygb25lIGNhY2hlIGxpbmUKKyAqIC0gdGhpcyBzdHJ1Y3Qgc2hhcmVzIHRoZSBzdXBlcnZpc29yIHN0YWNrIHBhZ2VzCisgKiAtIGlmIHRoZSBjb250ZW50cyBvZiB0aGlzIHN0cnVjdHVyZSBhcmUgY2hhbmdlZCwgdGhlIGFzc2VtYmx5IGNvbnN0YW50cyBtdXN0IGFsc28gYmUgY2hhbmdlZAorICovCisjaWZuZGVmIF9fQVNTRU1CTFlfXworc3RydWN0IHRocmVhZF9pbmZvIHsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QJKnRhc2s7CQkvKiBtYWluIHRhc2sgc3RydWN0dXJlICovCisJc3RydWN0IGV4ZWNfZG9tYWluCSpleGVjX2RvbWFpbjsJLyogZXhlY3V0aW9uIGRvbWFpbiAqLworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwkJLyogbG93IGxldmVsIGZsYWdzICovCisJX191MzIJCQljcHU7CQkvKiBjdXJyZW50IENQVSAqLworCV9fczMyCQkJcHJlZW1wdF9jb3VudDsgLyogMCA9PiBwcmVlbXB0YWJsZSwgPDAgPT4gQlVHICovCisKKwltbV9zZWdtZW50X3QJCWFkZHJfbGltaXQ7CS8qIHRocmVhZCBhZGRyZXNzIHNwYWNlOgorCQkJCQkgCSAgIDAtMHhCRkZGRkZGRiBmb3IgdXNlci10aGVhZAorCQkJCQkJICAgMC0weEZGRkZGRkZGIGZvciBrZXJuZWwtdGhyZWFkCisJCQkJCQkqLworCXN0cnVjdCByZXN0YXJ0X2Jsb2NrICAgIHJlc3RhcnRfYmxvY2s7CisJX191OAkJCXN1cGVydmlzb3Jfc3RhY2tbMF07Cit9OworCisjZW5kaWYKKworI2RlZmluZSBQUkVFTVBUX0FDVElWRQkJMHg0MDAwMDAwCisKKy8qCisgKiBtYWNyb3MvZnVuY3Rpb25zIGZvciBnYWluaW5nIGFjY2VzcyB0byB0aGUgdGhyZWFkIGluZm9ybWF0aW9uIHN0cnVjdHVyZQorICoKKyAqIHByZWVtcHRfY291bnQgbmVlZHMgdG8gYmUgMSBpbml0aWFsbHksIHVudGlsIHRoZSBzY2hlZHVsZXIgaXMgZnVuY3Rpb25hbC4KKyAqLworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNkZWZpbmUgSU5JVF9USFJFQURfSU5GTyh0c2spCQkJCVwKK3sJCQkJCQkJXAorCS50YXNrCQk9ICZ0c2ssCQkJCVwKKwkuZXhlY19kb21haW4JPSAmZGVmYXVsdF9leGVjX2RvbWFpbiwJCVwKKwkuZmxhZ3MJCT0gMCwJCQkJXAorCS5jcHUJCT0gMCwJCQkJXAorCS5wcmVlbXB0X2NvdW50CT0gMSwJCQkJXAorCS5hZGRyX2xpbWl0CT0gS0VSTkVMX0RTLAkJCVwKKwkucmVzdGFydF9ibG9jayA9IHsJCQkJXAorCQkgICAgICAgLmZuID0gZG9fbm9fcmVzdGFydF9zeXNjYWxsLAlcCisJfSwJCQkJCQlcCit9CisKKyNkZWZpbmUgaW5pdF90aHJlYWRfaW5mbwkoaW5pdF90aHJlYWRfdW5pb24udGhyZWFkX2luZm8pCisKKy8qIHRocmVhZCBpbmZvcm1hdGlvbiBhbGxvY2F0aW9uICovCisjZGVmaW5lIGFsbG9jX3RocmVhZF9pbmZvKHRzaykgKChzdHJ1Y3QgdGhyZWFkX2luZm8gKikgX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMLDEpKQorI2RlZmluZSBmcmVlX3RocmVhZF9pbmZvKHRpKSBmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKSAodGkpLCAxKQorI2RlZmluZSBnZXRfdGhyZWFkX2luZm8odGkpIGdldF90YXNrX3N0cnVjdCgodGkpLT50YXNrKQorI2RlZmluZSBwdXRfdGhyZWFkX2luZm8odGkpIHB1dF90YXNrX3N0cnVjdCgodGkpLT50YXNrKQorCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisvKgorICogdGhyZWFkIGluZm9ybWF0aW9uIGZsYWdzCisgKiAtIHRoZXNlIGFyZSBwcm9jZXNzIHN0YXRlIGZsYWdzIHRoYXQgdmFyaW91cyBhc3NlbWJseSBmaWxlcyBtYXkgbmVlZCB0byBhY2Nlc3MKKyAqIC0gcGVuZGluZyB3b3JrLXRvLWJlLWRvbmUgZmxhZ3MgYXJlIGluIExTVworICogLSBvdGhlciBmbGFncyBpbiBNU1cKKyAqLworI2RlZmluZSBUSUZfU1lTQ0FMTF9UUkFDRQkwCS8qIHN5c2NhbGwgdHJhY2UgYWN0aXZlICovCisjZGVmaW5lIFRJRl9OT1RJRllfUkVTVU1FCTEJLyogcmVzdW1wdGlvbiBub3RpZmljYXRpb24gcmVxdWVzdGVkICovCisjZGVmaW5lIFRJRl9TSUdQRU5ESU5HCQkyCS8qIHNpZ25hbCBwZW5kaW5nICovCisjZGVmaW5lIFRJRl9ORUVEX1JFU0NIRUQJMwkvKiByZXNjaGVkdWxpbmcgbmVjZXNzYXJ5ICovCisjZGVmaW5lIFRJRl9QT0xMSU5HX05SRkxBRwkxNgkvKiB0cnVlIGlmIHBvbGxfaWRsZSgpIGlzIHBvbGxpbmcgVElGX05FRURfUkVTQ0hFRCAqLworI2RlZmluZSBUSUZfTUVNRElFCQkxNworCisjZGVmaW5lIF9USUZfU1lTQ0FMTF9UUkFDRQkoMTw8VElGX1NZU0NBTExfVFJBQ0UpCisjZGVmaW5lIF9USUZfTk9USUZZX1JFU1VNRQkoMTw8VElGX05PVElGWV9SRVNVTUUpCisjZGVmaW5lIF9USUZfU0lHUEVORElORwkJKDE8PFRJRl9TSUdQRU5ESU5HKQorI2RlZmluZSBfVElGX05FRURfUkVTQ0hFRAkoMTw8VElGX05FRURfUkVTQ0hFRCkKKyNkZWZpbmUgX1RJRl9QT0xMSU5HX05SRkxBRwkoMTw8VElGX1BPTExJTkdfTlJGTEFHKQorCisjZGVmaW5lIF9USUZfV09SS19NQVNLCQkweDAwMDBGRkZFCS8qIHdvcmsgdG8gZG8gb24gaW50ZXJydXB0L2V4Y2VwdGlvbiByZXR1cm4gKi8KKyNkZWZpbmUgX1RJRl9BTExXT1JLX01BU0sJMHgwMDAwRkZGRgkvKiB3b3JrIHRvIGRvIG9uIGFueSByZXR1cm4gdG8gdS1zcGFjZSAqLworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX0FTTV9USFJFQURfSU5GT19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1jcmlzL3RpbWV4LmggYi9pbmNsdWRlL2FzbS1jcmlzL3RpbWV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc1YzQxYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvdGltZXguaApAQCAtMCwwICsxLDI0IEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tY3Jpcy90aW1leC5oCisgKgorICogQ1JJUyBhcmNoaXRlY3R1cmUgdGltZXggc3BlY2lmaWNhdGlvbnMKKyAqLworCisjaWZuZGVmIF9BU01fQ1JJU19USU1FWF9ICisjZGVmaW5lIF9BU01fQ1JJU19USU1FWF9ICisKKyNpbmNsdWRlIDxhc20vYXJjaC90aW1leC5oPgorCisvKgorICogV2UgZG9uJ3QgaGF2ZSBhIGN5Y2xlLWNvdW50ZXIuLiBidXQgd2UgZG8gbm90IHN1cHBvcnQgU01QIGFueXdheSB3aGVyZSB0aGlzIGlzCisgKiB1c2VkIHNvIGl0IGRvZXMgbm90IG1hdHRlci4KKyAqLworCit0eXBlZGVmIHVuc2lnbmVkIGludCBjeWNsZXNfdDsKKworZXh0ZXJuIGlubGluZSBjeWNsZXNfdCBnZXRfY3ljbGVzKHZvaWQpCit7CisgICAgICAgIHJldHVybiAwOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvdGxiLmggYi9pbmNsdWRlL2FzbS1jcmlzL3RsYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjYzI2ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL3RsYi5oCkBAIC0wLDAgKzEsMTcgQEAKKyNpZm5kZWYgX0NSSVNfVExCX0gKKyNkZWZpbmUgX0NSSVNfVExCX0gKKworI2luY2x1ZGUgPGFzbS9hcmNoL3RsYi5oPgorCisvKgorICogY3JpcyBkb2Vzbid0IG5lZWQgYW55IHNwZWNpYWwgcGVyLXB0ZSBvcgorICogcGVyLXZtYSBoYW5kbGluZy4uCisgKi8KKyNkZWZpbmUgdGxiX3N0YXJ0X3ZtYSh0bGIsIHZtYSkgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSB0bGJfZW5kX3ZtYSh0bGIsIHZtYSkgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBfX3RsYl9yZW1vdmVfdGxiX2VudHJ5KHRsYiwgcHRlcCwgYWRkcmVzcykgZG8geyB9IHdoaWxlICgwKQorCisjZGVmaW5lIHRsYl9mbHVzaCh0bGIpIGZsdXNoX3RsYl9tbSgodGxiKS0+bW0pCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdGxiLmg+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy90bGJmbHVzaC5oIGIvaW5jbHVkZS9hc20tY3Jpcy90bGJmbHVzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3ODFmZTEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL3RsYmZsdXNoLmgKQEAgLTAsMCArMSw0MyBAQAorI2lmbmRlZiBfQ1JJU19UTEJGTFVTSF9ICisjZGVmaW5lIF9DUklTX1RMQkZMVVNIX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KKworLyoKKyAqIFRMQiBmbHVzaGluZyAoaW1wbGVtZW50ZWQgaW4gYXJjaC9jcmlzL21tL3RsYi5jKToKKyAqCisgKiAgLSBmbHVzaF90bGIoKSBmbHVzaGVzIHRoZSBjdXJyZW50IG1tIHN0cnVjdCBUTEJzCisgKiAgLSBmbHVzaF90bGJfYWxsKCkgZmx1c2hlcyBhbGwgcHJvY2Vzc2VzIFRMQnMKKyAqICAtIGZsdXNoX3RsYl9tbShtbSkgZmx1c2hlcyB0aGUgc3BlY2lmaWVkIG1tIGNvbnRleHQgVExCJ3MKKyAqICAtIGZsdXNoX3RsYl9wYWdlKHZtYSwgdm1hZGRyKSBmbHVzaGVzIG9uZSBwYWdlCisgKiAgLSBmbHVzaF90bGJfcmFuZ2UobW0sIHN0YXJ0LCBlbmQpIGZsdXNoZXMgYSByYW5nZSBvZiBwYWdlcworICoKKyAqLworCitleHRlcm4gdm9pZCBmbHVzaF90bGJfYWxsKHZvaWQpOworZXh0ZXJuIHZvaWQgZmx1c2hfdGxiX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKK2V4dGVybiB2b2lkIGZsdXNoX3RsYl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCAKKwkJCSAgIHVuc2lnbmVkIGxvbmcgYWRkcik7CitleHRlcm4gdm9pZCBmbHVzaF90bGJfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQkgICAgdW5zaWduZWQgbG9uZyBzdGFydCwKKwkJCSAgICB1bnNpZ25lZCBsb25nIGVuZCk7CisKK2V4dGVybiBpbmxpbmUgdm9pZCBmbHVzaF90bGJfcGd0YWJsZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworICAgICAgICAvKiBDUklTIGRvZXMgbm90IGtlZXAgYW55IHBhZ2UgdGFibGUgY2FjaGVzIGluIFRMQiAqLworfQorCisKK2V4dGVybiBpbmxpbmUgdm9pZCBmbHVzaF90bGIodm9pZCkgCit7CisJZmx1c2hfdGxiX21tKGN1cnJlbnQtPm1tKTsKK30KKworI2RlZmluZSBmbHVzaF90bGJfa2VybmVsX3JhbmdlKHN0YXJ0LCBlbmQpIGZsdXNoX3RsYl9hbGwoKQorCisjZW5kaWYgLyogX0NSSVNfVExCRkxVU0hfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy90b3BvbG9neS5oIGIvaW5jbHVkZS9hc20tY3Jpcy90b3BvbG9neS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhYzYxM2QKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL3RvcG9sb2d5LmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9BU01fQ1JJU19UT1BPTE9HWV9ICisjZGVmaW5lIF9BU01fQ1JJU19UT1BPTE9HWV9ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy90b3BvbG9neS5oPgorCisjZW5kaWYgLyogX0FTTV9DUklTX1RPUE9MT0dZX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvdHlwZXMuaCBiL2luY2x1ZGUvYXNtLWNyaXMvdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWEwZDQ1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy90eXBlcy5oCkBAIC0wLDAgKzEsNjEgQEAKKyNpZm5kZWYgX0VUUkFYX1RZUEVTX0gKKyNkZWZpbmUgX0VUUkFYX1RZUEVTX0gKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1bW9kZV90OworCisvKgorICogX194eCBpcyBvazogaXQgZG9lc24ndCBwb2xsdXRlIHRoZSBQT1NJWCBuYW1lc3BhY2UuIFVzZSB0aGVzZSBpbiB0aGUKKyAqIGhlYWRlciBmaWxlcyBleHBvcnRlZCB0byB1c2VyIHNwYWNlCisgKi8KKwordHlwZWRlZiBfX3NpZ25lZF9fIGNoYXIgX19zODsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBfX3U4OworCit0eXBlZGVmIF9fc2lnbmVkX18gc2hvcnQgX19zMTY7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fdTE2OworCit0eXBlZGVmIF9fc2lnbmVkX18gaW50IF9fczMyOwordHlwZWRlZiB1bnNpZ25lZCBpbnQgX191MzI7CisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAhZGVmaW5lZChfX1NUUklDVF9BTlNJX18pCit0eXBlZGVmIF9fc2lnbmVkX18gbG9uZyBsb25nIF9fczY0OwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgX191NjQ7CisjZW5kaWYKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisvKgorICogVGhlc2UgYXJlbid0IGV4cG9ydGVkIG91dHNpZGUgdGhlIGtlcm5lbCB0byBhdm9pZCBuYW1lIHNwYWNlIGNsYXNoZXMKKyAqLworI2lmZGVmIF9fS0VSTkVMX18KKworI2RlZmluZSBCSVRTX1BFUl9MT05HIDMyCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK3R5cGVkZWYgc2lnbmVkIGNoYXIgczg7Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdTg7CisKK3R5cGVkZWYgc2lnbmVkIHNob3J0IHMxNjsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgdTE2OworCit0eXBlZGVmIHNpZ25lZCBpbnQgczMyOwordHlwZWRlZiB1bnNpZ25lZCBpbnQgdTMyOworCit0eXBlZGVmIHNpZ25lZCBsb25nIGxvbmcgczY0OwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdTY0OworCisvKiBEbWEgYWRkcmVzc2VzIGFyZSAzMi1iaXRzIHdpZGUsIGp1c3QgbGlrZSBvdXIgb3RoZXIgYWRkcmVzc2VzLiAgKi8KKyAKK3R5cGVkZWYgdTMyIGRtYV9hZGRyX3Q7Cit0eXBlZGVmIHUzMiBkbWE2NF9hZGRyX3Q7CisKK3R5cGVkZWYgdW5zaWduZWQgaW50IGttZW1fYnVmY3RsX3Q7CisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1jcmlzL3VhY2Nlc3MuaCBiL2luY2x1ZGUvYXNtLWNyaXMvdWFjY2Vzcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkYjE3MjIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL3VhY2Nlc3MuaApAQCAtMCwwICsxLDQ0NiBAQAorLyogCisgKiBBdXRob3JzOiAgICBCam9ybiBXZXNlbiAoYmpvcm53QGF4aXMuY29tKQorICoJICAgICAgIEhhbnMtUGV0ZXIgTmlsc3NvbiAoaHBAYXhpcy5jb20pCisgKgorICogJExvZzogdWFjY2Vzcy5oLHYgJAorICogUmV2aXNpb24gMS44ICAyMDAxLzEwLzI5IDEzOjAxOjQ4ICBiam9ybncKKyAqIFJlbW92ZWQgdW51c2VkIHZhcmlhYmxlIHRtcDIgaW4gc3Rybmxlbl91c2VyCisgKgorICogUmV2aXNpb24gMS43ICAyMDAxLzEwLzAyIDEyOjQ0OjUyICBocAorICogQWRkIHN1cHBvcnQgZm9yIDY0LWJpdCBwdXRfdXNlci9nZXRfdXNlcgorICoKKyAqIFJldmlzaW9uIDEuNiAgMjAwMS8xMC8wMSAxNDo1MToxNyAgYmpvcm53CisgKiBBZGRlZCByZWdpc3RlciBwcmVmaXhlcyBhbmQgcmVtb3ZlZCB1bmRlcnNjb3JlcworICoKKyAqIFJldmlzaW9uIDEuNSAgMjAwMC8xMC8yNSAwMzozMzoyMSAgaHAKKyAqIC0gUHJvdmlkZSBpbXBsZW1lbnRhdGlvbiBmb3IgZXZlcnl0aGluZyBlbHNlIGJ1dCBnZXRfdXNlciBhbmQgcHV0X3VzZXI7CisgKiAgIGNvcHlpbmcgaW5saW5lIHRvL2Zyb20gdXNlciBmb3IgY29uc3RhbnQgbGVuZ3RoIDAuLjE2LCAyMCwgMjQsIGFuZAorICogICBjbGVhcmluZyBmb3IgMC4uNCwgOCwgMTIsIDE2LCAyMCwgMjQsIHN0cm5jcHlfZnJvbV91c2VyIGFuZCBzdHJubGVuX3VzZXIKKyAqICAgYWx3YXlzIGlubGluZS4KKyAqIC0gQ29uc3RyYWludHMgZm9yIGRlc3RpbmF0aW9uIGFkZHIgaW4gZ2V0X3VzZXIgY2Fubm90IGJlIG1lbW9yeSwgb25seSByZWcuCisgKiAtIENvcnJlY3QgbGFiZWxzIGZvciBQQyBhdCBleHBlY3RlZCBmYXVsdCBwb2ludHMuCisgKiAtIE5pdHMgd2l0aCBhc3NlbWJseSBjb2RlLgorICogLSBEb24ndCB1c2Ugc3RhdGVtZW50IGV4cHJlc3Npb25zIHdpdGhvdXQgdmFsdWU7IHVzZSAiZG8ge30gd2hpbGUgKDApIi4KKyAqIC0gUmV0dXJuIGNvcnJlY3QgdmFsdWVzIGZyb20gX19nZW5lcmljXy4uLiBmdW5jdGlvbnMuCisgKgorICogUmV2aXNpb24gMS40ICAyMDAwLzA5LzEyIDE2OjI4OjI1ICBiam9ybncKKyAqICogUmVtb3ZlZCBjb21tZW50cyBmcm9tIHRoZSBnZXQvcHV0IHVzZXIgYXNtIGNvZGUKKyAqICogQ29uc3RyYWlucyBmb3IgZGVzdGluYXRpb24gYWRkciBpbiBwdXRfdXNlciBjYW5ub3QgYmUgbWVtb3J5LCBvbmx5IHJlZworICoKKyAqIFJldmlzaW9uIDEuMyAgMjAwMC8wOS8xMiAxNDozMDoyMCAgYmpvcm53CisgKiBNQVhfQUREUl9VU0VSIGRvZXMgbm90IGV4aXN0IGFueW1vcmUKKyAqCisgKiBSZXZpc2lvbiAxLjIgIDIwMDAvMDcvMTMgMTU6NTI6NDggIGJqb3JudworICogTmV3IHVzZXItYWNjZXNzIGZ1bmN0aW9ucworICoKKyAqIFJldmlzaW9uIDEuMS4xLjEgIDIwMDAvMDcvMTAgMTY6MzI6MzEgIGJqb3JudworICogQ1JJUyBhcmNoaXRlY3R1cmUsIHdvcmtpbmcgZHJhZnQKKyAqCisgKgorICoKKyAqLworCisvKiBBc206cyBoYXZlIGJlZW4gdHdlYWtlZCAod2l0aGluIHRoZSBkb21haW4gb2YgY29ycmVjdG5lc3MpIHRvIGdpdmUKKyAgIHNhdGlzZmFjdG9yeSByZXN1bHRzIGZvciAiZ2NjIHZlcnNpb24gMi45NiAyMDAwMDQyNyAoZXhwZXJpbWVudGFsKSIuCisKKyAgIENoZWNrIHJlZ3VsYXJseS4uLgorCisgICBSZWdpc3RlciAkcjkgaXMgY2hvc2VuIGZvciB0ZW1wb3JhcmllcywgYmVpbmcgYSBjYWxsLWNsb2JiZXJlZCByZWdpc3RlcgorICAgZmlyc3QgaW4gbGluZSB0byBiZSB1c2VkIChub3RhYmx5IGZvciBsb2NhbCBibG9ja3MpLCBub3QgY29sbGlkaW5nIHdpdGgKKyAgIHBhcmFtZXRlciByZWdpc3RlcnMuICAqLworCisjaWZuZGVmIF9DUklTX1VBQ0NFU1NfSAorI2RlZmluZSBfQ1JJU19VQUNDRVNTX0gKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisKKyNkZWZpbmUgVkVSSUZZX1JFQUQJMAorI2RlZmluZSBWRVJJRllfV1JJVEUJMQorCisvKgorICogVGhlIGZzIHZhbHVlIGRldGVybWluZXMgd2hldGhlciBhcmd1bWVudCB2YWxpZGl0eSBjaGVja2luZyBzaG91bGQgYmUKKyAqIHBlcmZvcm1lZCBvciBub3QuICBJZiBnZXRfZnMoKSA9PSBVU0VSX0RTLCBjaGVja2luZyBpcyBwZXJmb3JtZWQsIHdpdGgKKyAqIGdldF9mcygpID09IEtFUk5FTF9EUywgY2hlY2tpbmcgaXMgYnlwYXNzZWQuCisgKgorICogRm9yIGhpc3RvcmljYWwgcmVhc29ucywgdGhlc2UgbWFjcm9zIGFyZSBncm9zc2x5IG1pc25hbWVkLgorICovCisKKyNkZWZpbmUgTUFLRV9NTV9TRUcocykJKChtbV9zZWdtZW50X3QpIHsgKHMpIH0pCisKKy8qIGFkZHJfbGltaXQgaXMgdGhlIG1heGltdW0gYWNjZXNzaWJsZSBhZGRyZXNzIGZvciB0aGUgdGFzay4gd2UgbWlzdXNlCisgKiB0aGUgS0VSTkVMX0RTIGFuZCBVU0VSX0RTIHZhbHVlcyB0byBib3RoIGFzc2lnbiBhbmQgY29tcGFyZSB0aGUgCisgKiBhZGRyX2xpbWl0IHZhbHVlcyB0aHJvdWdoIHRoZSBlcXVhbGx5IG1pc25hbWVkIGdldC9zZXRfZnMgbWFjcm9zLgorICogKHNlZSBhYm92ZSkKKyAqLworCisjZGVmaW5lIEtFUk5FTF9EUwlNQUtFX01NX1NFRygweEZGRkZGRkZGKQorI2RlZmluZSBVU0VSX0RTCQlNQUtFX01NX1NFRyhUQVNLX1NJWkUpCisKKyNkZWZpbmUgZ2V0X2RzKCkJKEtFUk5FTF9EUykKKyNkZWZpbmUgZ2V0X2ZzKCkJKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+YWRkcl9saW1pdCkKKyNkZWZpbmUgc2V0X2ZzKHgpCShjdXJyZW50X3RocmVhZF9pbmZvKCktPmFkZHJfbGltaXQgPSAoeCkpCisKKyNkZWZpbmUgc2VnbWVudF9lcShhLGIpCSgoYSkuc2VnID09IChiKS5zZWcpCisKKyNkZWZpbmUgX19rZXJuZWxfb2sgKHNlZ21lbnRfZXEoZ2V0X2ZzKCksIEtFUk5FTF9EUykpCisjZGVmaW5lIF9fdXNlcl9vayhhZGRyLHNpemUpICgoKHNpemUpIDw9IFRBU0tfU0laRSkmJigoYWRkcikgPD0gVEFTS19TSVpFLShzaXplKSkpCisjZGVmaW5lIF9fYWNjZXNzX29rKGFkZHIsc2l6ZSkgKF9fa2VybmVsX29rIHx8IF9fdXNlcl9vaygoYWRkciksKHNpemUpKSkKKyNkZWZpbmUgYWNjZXNzX29rKHR5cGUsYWRkcixzaXplKSBfX2FjY2Vzc19vaygodW5zaWduZWQgbG9uZykoYWRkciksKHNpemUpKQorCisvKiB0aGlzIGZ1bmN0aW9uIHdpbGwgZ28gYXdheSBzb29uIC0gdXNlIGFjY2Vzc19vaygpIGluc3RlYWQgKi8KK2V4dGVybiBpbmxpbmUgaW50IF9fZGVwcmVjYXRlZCB2ZXJpZnlfYXJlYShpbnQgdHlwZSwgY29uc3Qgdm9pZCBfX3VzZXIgKiBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJcmV0dXJuIGFjY2Vzc19vayh0eXBlLGFkZHIsc2l6ZSkgPyAwIDogLUVGQVVMVDsKK30KKworCisjaW5jbHVkZSA8YXNtL2FyY2gvdWFjY2Vzcy5oPgorCisvKgorICogVGhlIGV4Y2VwdGlvbiB0YWJsZSBjb25zaXN0cyBvZiBwYWlycyBvZiBhZGRyZXNzZXM6IHRoZSBmaXJzdCBpcyB0aGUKKyAqIGFkZHJlc3Mgb2YgYW4gaW5zdHJ1Y3Rpb24gdGhhdCBpcyBhbGxvd2VkIHRvIGZhdWx0LCBhbmQgdGhlIHNlY29uZCBpcworICogdGhlIGFkZHJlc3MgYXQgd2hpY2ggdGhlIHByb2dyYW0gc2hvdWxkIGNvbnRpbnVlLiAgTm8gcmVnaXN0ZXJzIGFyZQorICogbW9kaWZpZWQsIHNvIGl0IGlzIGVudGlyZWx5IHVwIHRvIHRoZSBjb250aW51YXRpb24gY29kZSB0byBmaWd1cmUgb3V0CisgKiB3aGF0IHRvIGRvLgorICoKKyAqIEFsbCB0aGUgcm91dGluZXMgYmVsb3cgdXNlIGJpdHMgb2YgZml4dXAgY29kZSB0aGF0IGFyZSBvdXQgb2YgbGluZQorICogd2l0aCB0aGUgbWFpbiBpbnN0cnVjdGlvbiBwYXRoLiAgVGhpcyBtZWFucyB3aGVuIGV2ZXJ5dGhpbmcgaXMgd2VsbCwKKyAqIHdlIGRvbid0IGV2ZW4gaGF2ZSB0byBqdW1wIG92ZXIgdGhlbS4gIEZ1cnRoZXIsIHRoZXkgZG8gbm90IGludHJ1ZGUKKyAqIG9uIG91ciBjYWNoZSBvciB0bGIgZW50cmllcy4KKyAqLworCitzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5Cit7CisJdW5zaWduZWQgbG9uZyBpbnNuLCBmaXh1cDsKK307CisKKy8qCisgKiBUaGVzZSBhcmUgdGhlIG1haW4gc2luZ2xlLXZhbHVlIHRyYW5zZmVyIHJvdXRpbmVzLiAgVGhleSBhdXRvbWF0aWNhbGx5CisgKiB1c2UgdGhlIHJpZ2h0IHNpemUgaWYgd2UganVzdCBoYXZlIHRoZSByaWdodCBwb2ludGVyIHR5cGUuCisgKgorICogVGhpcyBnZXRzIGtpbmQgb2YgdWdseS4gV2Ugd2FudCB0byByZXR1cm4gX3R3b18gdmFsdWVzIGluICJnZXRfdXNlcigpIgorICogYW5kIHlldCB3ZSBkb24ndCB3YW50IHRvIGRvIGFueSBwb2ludGVycywgYmVjYXVzZSB0aGF0IGlzIHRvbyBtdWNoCisgKiBvZiBhIHBlcmZvcm1hbmNlIGltcGFjdC4gVGh1cyB3ZSBoYXZlIGEgZmV3IHJhdGhlciB1Z2x5IG1hY3JvcyBoZXJlLAorICogYW5kIGhpZGUgYWxsIHRoZSB1Z2xpbmVzcyBmcm9tIHRoZSB1c2VyLgorICoKKyAqIFRoZSAiX194eHgiIHZlcnNpb25zIG9mIHRoZSB1c2VyIGFjY2VzcyBmdW5jdGlvbnMgYXJlIHZlcnNpb25zIHRoYXQKKyAqIGRvIG5vdCB2ZXJpZnkgdGhlIGFkZHJlc3Mgc3BhY2UsIHRoYXQgbXVzdCBoYXZlIGJlZW4gZG9uZSBwcmV2aW91c2x5CisgKiB3aXRoIGEgc2VwYXJhdGUgImFjY2Vzc19vaygpIiBjYWxsICh0aGlzIGlzIHVzZWQgd2hlbiB3ZSBkbyBtdWx0aXBsZQorICogYWNjZXNzZXMgdG8gdGhlIHNhbWUgYXJlYSBvZiB1c2VyIG1lbW9yeSkuCisgKgorICogQXMgd2UgdXNlIHRoZSBzYW1lIGFkZHJlc3Mgc3BhY2UgZm9yIGtlcm5lbCBhbmQgdXNlciBkYXRhIG9uCisgKiBDUklTLCB3ZSBjYW4ganVzdCBkbyB0aGVzZSBhcyBkaXJlY3QgYXNzaWdubWVudHMuICAoT2YgY291cnNlLCB0aGUKKyAqIGV4Y2VwdGlvbiBoYW5kbGluZyBtZWFucyB0aGF0IGl0J3Mgbm8gbG9uZ2VyICJqdXN0Ii4uLikKKyAqLworI2RlZmluZSBnZXRfdXNlcih4LHB0cikgXAorICBfX2dldF91c2VyX2NoZWNrKCh4KSwocHRyKSxzaXplb2YoKihwdHIpKSkKKyNkZWZpbmUgcHV0X3VzZXIoeCxwdHIpIFwKKyAgX19wdXRfdXNlcl9jaGVjaygoX190eXBlb2ZfXygqKHB0cikpKSh4KSwocHRyKSxzaXplb2YoKihwdHIpKSkKKworI2RlZmluZSBfX2dldF91c2VyKHgscHRyKSBcCisgIF9fZ2V0X3VzZXJfbm9jaGVjaygoeCksKHB0ciksc2l6ZW9mKCoocHRyKSkpCisjZGVmaW5lIF9fcHV0X3VzZXIoeCxwdHIpIFwKKyAgX19wdXRfdXNlcl9ub2NoZWNrKChfX3R5cGVvZl9fKCoocHRyKSkpKHgpLChwdHIpLHNpemVvZigqKHB0cikpKQorCitleHRlcm4gbG9uZyBfX3B1dF91c2VyX2JhZCh2b2lkKTsKKworI2RlZmluZSBfX3B1dF91c2VyX3NpemUoeCxwdHIsc2l6ZSxyZXR2YWwpCQkJXAorZG8gewkJCQkJCQkJXAorCXJldHZhbCA9IDA7CQkJCQkJXAorCXN3aXRjaCAoc2l6ZSkgewkJCQkJCVwKKwkgIGNhc2UgMTogX19wdXRfdXNlcl9hc20oeCxwdHIscmV0dmFsLCJtb3ZlLmIiKTsgYnJlYWs7CVwKKwkgIGNhc2UgMjogX19wdXRfdXNlcl9hc20oeCxwdHIscmV0dmFsLCJtb3ZlLnciKTsgYnJlYWs7CVwKKwkgIGNhc2UgNDogX19wdXRfdXNlcl9hc20oeCxwdHIscmV0dmFsLCJtb3ZlLmQiKTsgYnJlYWs7CVwKKwkgIGNhc2UgODogX19wdXRfdXNlcl9hc21fNjQoeCxwdHIscmV0dmFsKTsgYnJlYWs7CVwKKwkgIGRlZmF1bHQ6IF9fcHV0X3VzZXJfYmFkKCk7CQkJCVwKKwl9CQkJCQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgX19nZXRfdXNlcl9zaXplKHgscHRyLHNpemUscmV0dmFsKQkJCVwKK2RvIHsJCQkJCQkJCVwKKwlyZXR2YWwgPSAwOwkJCQkJCVwKKwlzd2l0Y2ggKHNpemUpIHsJCQkJCQlcCisJICBjYXNlIDE6IF9fZ2V0X3VzZXJfYXNtKHgscHRyLHJldHZhbCwibW92ZS5iIik7IGJyZWFrOwlcCisJICBjYXNlIDI6IF9fZ2V0X3VzZXJfYXNtKHgscHRyLHJldHZhbCwibW92ZS53Iik7IGJyZWFrOwlcCisJICBjYXNlIDQ6IF9fZ2V0X3VzZXJfYXNtKHgscHRyLHJldHZhbCwibW92ZS5kIik7IGJyZWFrOwlcCisJICBjYXNlIDg6IF9fZ2V0X3VzZXJfYXNtXzY0KHgscHRyLHJldHZhbCk7IGJyZWFrOwlcCisJICBkZWZhdWx0OiAoeCkgPSBfX2dldF91c2VyX2JhZCgpOwkJCVwKKwl9CQkJCQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgX19wdXRfdXNlcl9ub2NoZWNrKHgscHRyLHNpemUpCQkJXAorKHsJCQkJCQkJXAorCWxvbmcgX19wdV9lcnI7CQkJCQlcCisJX19wdXRfdXNlcl9zaXplKCh4KSwocHRyKSwoc2l6ZSksX19wdV9lcnIpOwlcCisJX19wdV9lcnI7CQkJCQlcCit9KQorCisjZGVmaW5lIF9fcHV0X3VzZXJfY2hlY2soeCxwdHIsc2l6ZSkJCQkJXAorKHsJCQkJCQkJCVwKKwlsb25nIF9fcHVfZXJyID0gLUVGQVVMVDsJCQkJXAorCV9fdHlwZW9mX18oKihwdHIpKSAqX19wdV9hZGRyID0gKHB0cik7CQkJXAorCWlmIChhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLF9fcHVfYWRkcixzaXplKSkJCVwKKwkJX19wdXRfdXNlcl9zaXplKCh4KSxfX3B1X2FkZHIsKHNpemUpLF9fcHVfZXJyKTsJXAorCV9fcHVfZXJyOwkJCQkJCVwKK30pCisKK3N0cnVjdCBfX2xhcmdlX3N0cnVjdCB7IHVuc2lnbmVkIGxvbmcgYnVmWzEwMF07IH07CisjZGVmaW5lIF9fbSh4KSAoKihzdHJ1Y3QgX19sYXJnZV9zdHJ1Y3QgKikoeCkpCisKKworCisjZGVmaW5lIF9fZ2V0X3VzZXJfbm9jaGVjayh4LHB0cixzaXplKQkJCQlcCisoewkJCQkJCQkJXAorCWxvbmcgX19ndV9lcnIsIF9fZ3VfdmFsOwkJCQlcCisJX19nZXRfdXNlcl9zaXplKF9fZ3VfdmFsLChwdHIpLChzaXplKSxfX2d1X2Vycik7CVwKKwkoeCkgPSAoX190eXBlb2ZfXygqKHB0cikpKV9fZ3VfdmFsOwkJCVwKKwlfX2d1X2VycjsJCQkJCQlcCit9KQorCisjZGVmaW5lIF9fZ2V0X3VzZXJfY2hlY2soeCxwdHIsc2l6ZSkJCQkJCVwKKyh7CQkJCQkJCQkJXAorCWxvbmcgX19ndV9lcnIgPSAtRUZBVUxULCBfX2d1X3ZhbCA9IDA7CQkJCVwKKwljb25zdCBfX3R5cGVvZl9fKCoocHRyKSkgKl9fZ3VfYWRkciA9IChwdHIpOwkJCVwKKwlpZiAoYWNjZXNzX29rKFZFUklGWV9SRUFELF9fZ3VfYWRkcixzaXplKSkJCQlcCisJCV9fZ2V0X3VzZXJfc2l6ZShfX2d1X3ZhbCxfX2d1X2FkZHIsKHNpemUpLF9fZ3VfZXJyKTsJXAorCSh4KSA9IChfX3R5cGVvZl9fKCoocHRyKSkpX19ndV92YWw7CQkJCVwKKwlfX2d1X2VycjsJCQkJCQkJXAorfSkKKworZXh0ZXJuIGxvbmcgX19nZXRfdXNlcl9iYWQodm9pZCk7CisKKy8qIE1vcmUgY29tcGxleCBmdW5jdGlvbnMuICBNb3N0IGFyZSBpbmxpbmUsIGJ1dCBzb21lIGNhbGwgZnVuY3Rpb25zIHRoYXQKKyAgIGxpdmUgaW4gbGliL3VzZXJjb3B5LmMgICovCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fY29weV91c2VyKHZvaWQgKnRvLCBjb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19jb3B5X3VzZXJfemVyb2luZyh2b2lkICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fZG9fY2xlYXJfdXNlcih2b2lkICp0bywgdW5zaWduZWQgbG9uZyBuKTsKKworZXh0ZXJuIGlubGluZSB1bnNpZ25lZCBsb25nCitfX2dlbmVyaWNfY29weV90b191c2VyKHZvaWQgX191c2VyICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKQoreworCWlmIChhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCB0bywgbikpCisJCXJldHVybiBfX2NvcHlfdXNlcih0byxmcm9tLG4pOworCXJldHVybiBuOworfQorCitleHRlcm4gaW5saW5lIHVuc2lnbmVkIGxvbmcKK19fZ2VuZXJpY19jb3B5X2Zyb21fdXNlcih2b2lkICp0bywgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGxvbmcgbikKK3sKKwlpZiAoYWNjZXNzX29rKFZFUklGWV9SRUFELCBmcm9tLCBuKSkKKwkJcmV0dXJuIF9fY29weV91c2VyX3plcm9pbmcodG8sZnJvbSxuKTsKKwlyZXR1cm4gbjsKK30KKworZXh0ZXJuIGlubGluZSB1bnNpZ25lZCBsb25nCitfX2dlbmVyaWNfY2xlYXJfdXNlcih2b2lkIF9fdXNlciAqdG8sIHVuc2lnbmVkIGxvbmcgbikKK3sKKwlpZiAoYWNjZXNzX29rKFZFUklGWV9XUklURSwgdG8sIG4pKQorCQlyZXR1cm4gX19kb19jbGVhcl91c2VyKHRvLG4pOworCXJldHVybiBuOworfQorCitleHRlcm4gaW5saW5lIGxvbmcKK19fc3RybmNweV9mcm9tX3VzZXIoY2hhciAqZHN0LCBjb25zdCBjaGFyIF9fdXNlciAqc3JjLCBsb25nIGNvdW50KQoreworCXJldHVybiBfX2RvX3N0cm5jcHlfZnJvbV91c2VyKGRzdCwgc3JjLCBjb3VudCk7Cit9CisKK2V4dGVybiBpbmxpbmUgbG9uZworc3RybmNweV9mcm9tX3VzZXIoY2hhciAqZHN0LCBjb25zdCBjaGFyIF9fdXNlciAqc3JjLCBsb25nIGNvdW50KQoreworCWxvbmcgcmVzID0gLUVGQVVMVDsKKwlpZiAoYWNjZXNzX29rKFZFUklGWV9SRUFELCBzcmMsIDEpKQorCQlyZXMgPSBfX2RvX3N0cm5jcHlfZnJvbV91c2VyKGRzdCwgc3JjLCBjb3VudCk7CisJcmV0dXJuIHJlczsKK30KKworCisvKiBOb3RlIHRoYXQgaWYgdGhlc2UgZXhwYW5kIGF3ZnVsbHkgaWYgbWFkZSBpbnRvIHN3aXRjaCBjb25zdHJ1Y3RzLCBzbworICAgZG9uJ3QgZG8gdGhhdC4gICovCisKK2V4dGVybiBpbmxpbmUgdW5zaWduZWQgbG9uZworX19jb25zdGFudF9jb3B5X2Zyb21fdXNlcih2b2lkICp0bywgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGxvbmcgbikKK3sKKwl1bnNpZ25lZCBsb25nIHJldCA9IDA7CisJaWYgKG4gPT0gMCkKKwkJOworCWVsc2UgaWYgKG4gPT0gMSkKKwkJX19hc21fY29weV9mcm9tX3VzZXJfMSh0bywgZnJvbSwgcmV0KTsKKwllbHNlIGlmIChuID09IDIpCisJCV9fYXNtX2NvcHlfZnJvbV91c2VyXzIodG8sIGZyb20sIHJldCk7CisJZWxzZSBpZiAobiA9PSAzKQorCQlfX2FzbV9jb3B5X2Zyb21fdXNlcl8zKHRvLCBmcm9tLCByZXQpOworCWVsc2UgaWYgKG4gPT0gNCkKKwkJX19hc21fY29weV9mcm9tX3VzZXJfNCh0bywgZnJvbSwgcmV0KTsKKwllbHNlIGlmIChuID09IDUpCisJCV9fYXNtX2NvcHlfZnJvbV91c2VyXzUodG8sIGZyb20sIHJldCk7CisJZWxzZSBpZiAobiA9PSA2KQorCQlfX2FzbV9jb3B5X2Zyb21fdXNlcl82KHRvLCBmcm9tLCByZXQpOworCWVsc2UgaWYgKG4gPT0gNykKKwkJX19hc21fY29weV9mcm9tX3VzZXJfNyh0bywgZnJvbSwgcmV0KTsKKwllbHNlIGlmIChuID09IDgpCisJCV9fYXNtX2NvcHlfZnJvbV91c2VyXzgodG8sIGZyb20sIHJldCk7CisJZWxzZSBpZiAobiA9PSA5KQorCQlfX2FzbV9jb3B5X2Zyb21fdXNlcl85KHRvLCBmcm9tLCByZXQpOworCWVsc2UgaWYgKG4gPT0gMTApCisJCV9fYXNtX2NvcHlfZnJvbV91c2VyXzEwKHRvLCBmcm9tLCByZXQpOworCWVsc2UgaWYgKG4gPT0gMTEpCisJCV9fYXNtX2NvcHlfZnJvbV91c2VyXzExKHRvLCBmcm9tLCByZXQpOworCWVsc2UgaWYgKG4gPT0gMTIpCisJCV9fYXNtX2NvcHlfZnJvbV91c2VyXzEyKHRvLCBmcm9tLCByZXQpOworCWVsc2UgaWYgKG4gPT0gMTMpCisJCV9fYXNtX2NvcHlfZnJvbV91c2VyXzEzKHRvLCBmcm9tLCByZXQpOworCWVsc2UgaWYgKG4gPT0gMTQpCisJCV9fYXNtX2NvcHlfZnJvbV91c2VyXzE0KHRvLCBmcm9tLCByZXQpOworCWVsc2UgaWYgKG4gPT0gMTUpCisJCV9fYXNtX2NvcHlfZnJvbV91c2VyXzE1KHRvLCBmcm9tLCByZXQpOworCWVsc2UgaWYgKG4gPT0gMTYpCisJCV9fYXNtX2NvcHlfZnJvbV91c2VyXzE2KHRvLCBmcm9tLCByZXQpOworCWVsc2UgaWYgKG4gPT0gMjApCisJCV9fYXNtX2NvcHlfZnJvbV91c2VyXzIwKHRvLCBmcm9tLCByZXQpOworCWVsc2UgaWYgKG4gPT0gMjQpCisJCV9fYXNtX2NvcHlfZnJvbV91c2VyXzI0KHRvLCBmcm9tLCByZXQpOworCWVsc2UKKwkJcmV0ID0gX19nZW5lcmljX2NvcHlfZnJvbV91c2VyKHRvLCBmcm9tLCBuKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIERpdHRvLCBkb24ndCBtYWtlIGEgc3dpdGNoIG91dCBvZiB0aGlzLiAgKi8KKworZXh0ZXJuIGlubGluZSB1bnNpZ25lZCBsb25nCitfX2NvbnN0YW50X2NvcHlfdG9fdXNlcih2b2lkIF9fdXNlciAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxvbmcgbikKK3sKKwl1bnNpZ25lZCBsb25nIHJldCA9IDA7CisJaWYgKG4gPT0gMCkKKwkJOworCWVsc2UgaWYgKG4gPT0gMSkKKwkJX19hc21fY29weV90b191c2VyXzEodG8sIGZyb20sIHJldCk7CisJZWxzZSBpZiAobiA9PSAyKQorCQlfX2FzbV9jb3B5X3RvX3VzZXJfMih0bywgZnJvbSwgcmV0KTsKKwllbHNlIGlmIChuID09IDMpCisJCV9fYXNtX2NvcHlfdG9fdXNlcl8zKHRvLCBmcm9tLCByZXQpOworCWVsc2UgaWYgKG4gPT0gNCkKKwkJX19hc21fY29weV90b191c2VyXzQodG8sIGZyb20sIHJldCk7CisJZWxzZSBpZiAobiA9PSA1KQorCQlfX2FzbV9jb3B5X3RvX3VzZXJfNSh0bywgZnJvbSwgcmV0KTsKKwllbHNlIGlmIChuID09IDYpCisJCV9fYXNtX2NvcHlfdG9fdXNlcl82KHRvLCBmcm9tLCByZXQpOworCWVsc2UgaWYgKG4gPT0gNykKKwkJX19hc21fY29weV90b191c2VyXzcodG8sIGZyb20sIHJldCk7CisJZWxzZSBpZiAobiA9PSA4KQorCQlfX2FzbV9jb3B5X3RvX3VzZXJfOCh0bywgZnJvbSwgcmV0KTsKKwllbHNlIGlmIChuID09IDkpCisJCV9fYXNtX2NvcHlfdG9fdXNlcl85KHRvLCBmcm9tLCByZXQpOworCWVsc2UgaWYgKG4gPT0gMTApCisJCV9fYXNtX2NvcHlfdG9fdXNlcl8xMCh0bywgZnJvbSwgcmV0KTsKKwllbHNlIGlmIChuID09IDExKQorCQlfX2FzbV9jb3B5X3RvX3VzZXJfMTEodG8sIGZyb20sIHJldCk7CisJZWxzZSBpZiAobiA9PSAxMikKKwkJX19hc21fY29weV90b191c2VyXzEyKHRvLCBmcm9tLCByZXQpOworCWVsc2UgaWYgKG4gPT0gMTMpCisJCV9fYXNtX2NvcHlfdG9fdXNlcl8xMyh0bywgZnJvbSwgcmV0KTsKKwllbHNlIGlmIChuID09IDE0KQorCQlfX2FzbV9jb3B5X3RvX3VzZXJfMTQodG8sIGZyb20sIHJldCk7CisJZWxzZSBpZiAobiA9PSAxNSkKKwkJX19hc21fY29weV90b191c2VyXzE1KHRvLCBmcm9tLCByZXQpOworCWVsc2UgaWYgKG4gPT0gMTYpCisJCV9fYXNtX2NvcHlfdG9fdXNlcl8xNih0bywgZnJvbSwgcmV0KTsKKwllbHNlIGlmIChuID09IDIwKQorCQlfX2FzbV9jb3B5X3RvX3VzZXJfMjAodG8sIGZyb20sIHJldCk7CisJZWxzZSBpZiAobiA9PSAyNCkKKwkJX19hc21fY29weV90b191c2VyXzI0KHRvLCBmcm9tLCByZXQpOworCWVsc2UKKwkJcmV0ID0gX19nZW5lcmljX2NvcHlfdG9fdXNlcih0bywgZnJvbSwgbik7CisKKwlyZXR1cm4gcmV0OworfQorCisvKiBObyBzd2l0Y2gsIHBsZWFzZS4gICovCisKK2V4dGVybiBpbmxpbmUgdW5zaWduZWQgbG9uZworX19jb25zdGFudF9jbGVhcl91c2VyKHZvaWQgX191c2VyICp0bywgdW5zaWduZWQgbG9uZyBuKQoreworCXVuc2lnbmVkIGxvbmcgcmV0ID0gMDsKKwlpZiAobiA9PSAwKQorCQk7CisJZWxzZSBpZiAobiA9PSAxKQorCQlfX2FzbV9jbGVhcl8xKHRvLCByZXQpOworCWVsc2UgaWYgKG4gPT0gMikKKwkJX19hc21fY2xlYXJfMih0bywgcmV0KTsKKwllbHNlIGlmIChuID09IDMpCisJCV9fYXNtX2NsZWFyXzModG8sIHJldCk7CisJZWxzZSBpZiAobiA9PSA0KQorCQlfX2FzbV9jbGVhcl80KHRvLCByZXQpOworCWVsc2UgaWYgKG4gPT0gOCkKKwkJX19hc21fY2xlYXJfOCh0bywgcmV0KTsKKwllbHNlIGlmIChuID09IDEyKQorCQlfX2FzbV9jbGVhcl8xMih0bywgcmV0KTsKKwllbHNlIGlmIChuID09IDE2KQorCQlfX2FzbV9jbGVhcl8xNih0bywgcmV0KTsKKwllbHNlIGlmIChuID09IDIwKQorCQlfX2FzbV9jbGVhcl8yMCh0bywgcmV0KTsKKwllbHNlIGlmIChuID09IDI0KQorCQlfX2FzbV9jbGVhcl8yNCh0bywgcmV0KTsKKwllbHNlCisJCXJldCA9IF9fZ2VuZXJpY19jbGVhcl91c2VyKHRvLCBuKTsKKworCXJldHVybiByZXQ7Cit9CisKKworI2RlZmluZSBjbGVhcl91c2VyKHRvLCBuKQkJCVwKKyhfX2J1aWx0aW5fY29uc3RhbnRfcChuKSA/CQkJXAorIF9fY29uc3RhbnRfY2xlYXJfdXNlcih0bywgbikgOgkJCVwKKyBfX2dlbmVyaWNfY2xlYXJfdXNlcih0bywgbikpCisKKyNkZWZpbmUgY29weV9mcm9tX3VzZXIodG8sIGZyb20sIG4pCQlcCisoX19idWlsdGluX2NvbnN0YW50X3AobikgPwkJCVwKKyBfX2NvbnN0YW50X2NvcHlfZnJvbV91c2VyKHRvLCBmcm9tLCBuKSA6CVwKKyBfX2dlbmVyaWNfY29weV9mcm9tX3VzZXIodG8sIGZyb20sIG4pKQorCisjZGVmaW5lIGNvcHlfdG9fdXNlcih0bywgZnJvbSwgbikJCVwKKyhfX2J1aWx0aW5fY29uc3RhbnRfcChuKSA/CQkJXAorIF9fY29uc3RhbnRfY29weV90b191c2VyKHRvLCBmcm9tLCBuKSA6CQlcCisgX19nZW5lcmljX2NvcHlfdG9fdXNlcih0bywgZnJvbSwgbikpCisKKy8qIFdlIGxldCB0aGUgX18gdmVyc2lvbnMgb2YgY29weV9mcm9tL3RvX3VzZXIgaW5saW5lLCBiZWNhdXNlIHRoZXkncmUgb2Z0ZW4KKyAqIHVzZWQgaW4gZmFzdCBwYXRocyBhbmQgaGF2ZSBvbmx5IGEgc21hbGwgc3BhY2Ugb3ZlcmhlYWQuCisgKi8KKworZXh0ZXJuIGlubGluZSB1bnNpZ25lZCBsb25nCitfX2dlbmVyaWNfY29weV9mcm9tX3VzZXJfbm9jaGVjayh2b2lkICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKQoreworCXJldHVybiBfX2NvcHlfdXNlcl96ZXJvaW5nKHRvLGZyb20sbik7Cit9CisKK2V4dGVybiBpbmxpbmUgdW5zaWduZWQgbG9uZworX19nZW5lcmljX2NvcHlfdG9fdXNlcl9ub2NoZWNrKHZvaWQgKnRvLCBjb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pCit7CisJcmV0dXJuIF9fY29weV91c2VyKHRvLGZyb20sbik7Cit9CisKK2V4dGVybiBpbmxpbmUgdW5zaWduZWQgbG9uZworX19nZW5lcmljX2NsZWFyX3VzZXJfbm9jaGVjayh2b2lkICp0bywgdW5zaWduZWQgbG9uZyBuKQoreworCXJldHVybiBfX2RvX2NsZWFyX3VzZXIodG8sbik7Cit9CisKKy8qIHdpdGhvdXQgY2hlY2tpbmcgKi8KKworI2RlZmluZSBfX2NvcHlfdG9fdXNlcih0byxmcm9tLG4pICAgX19nZW5lcmljX2NvcHlfdG9fdXNlcl9ub2NoZWNrKCh0byksKGZyb20pLChuKSkKKyNkZWZpbmUgX19jb3B5X2Zyb21fdXNlcih0byxmcm9tLG4pIF9fZ2VuZXJpY19jb3B5X2Zyb21fdXNlcl9ub2NoZWNrKCh0byksKGZyb20pLChuKSkKKyNkZWZpbmUgX19jb3B5X3RvX3VzZXJfaW5hdG9taWMgX19jb3B5X3RvX3VzZXIKKyNkZWZpbmUgX19jb3B5X2Zyb21fdXNlcl9pbmF0b21pYyBfX2NvcHlfZnJvbV91c2VyCisjZGVmaW5lIF9fY2xlYXJfdXNlcih0byxuKSBfX2dlbmVyaWNfY2xlYXJfdXNlcl9ub2NoZWNrKCh0byksKG4pKQorCisjZGVmaW5lIHN0cmxlbl91c2VyKHN0cikJc3Rybmxlbl91c2VyKChzdHIpLCAweDdmZmZmZmZlKQorCisjZW5kaWYgIC8qIF9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYJLyogX0NSSVNfVUFDQ0VTU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1jcmlzL3Vjb250ZXh0LmggYi9pbmNsdWRlL2FzbS1jcmlzL3Vjb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWVkNmFkNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvdWNvbnRleHQuaApAQCAtMCwwICsxLDEyIEBACisjaWZuZGVmIF9BU01fQ1JJU19VQ09OVEVYVF9ICisjZGVmaW5lIF9BU01fQ1JJU19VQ09OVEVYVF9ICisKK3N0cnVjdCB1Y29udGV4dCB7CisJdW5zaWduZWQgbG9uZwkgIHVjX2ZsYWdzOworCXN0cnVjdCB1Y29udGV4dCAgKnVjX2xpbms7CisJc3RhY2tfdAkJICB1Y19zdGFjazsKKwlzdHJ1Y3Qgc2lnY29udGV4dCB1Y19tY29udGV4dDsKKwlzaWdzZXRfdAkgIHVjX3NpZ21hc2s7CS8qIG1hc2sgbGFzdCBmb3IgZXh0ZW5zaWJpbGl0eSAqLworfTsKKworI2VuZGlmIC8qICFfQVNNX0NSSVNfVUNPTlRFWFRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy91bmFsaWduZWQuaCBiL2luY2x1ZGUvYXNtLWNyaXMvdW5hbGlnbmVkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZiYmIzOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvdW5hbGlnbmVkLmgKQEAgLTAsMCArMSwxNiBAQAorI2lmbmRlZiBfX0NSSVNfVU5BTElHTkVEX0gKKyNkZWZpbmUgX19DUklTX1VOQUxJR05FRF9ICisKKy8qCisgKiBDUklTIGNhbiBkbyB1bmFsaWduZWQgYWNjZXNzZXMgaXRzZWxmLiAKKyAqCisgKiBUaGUgc3RyYW5nZSBtYWNyb3MgYXJlIHRoZXJlIHRvIG1ha2Ugc3VyZSB0aGVzZSBjYW4ndAorICogYmUgbWlzdXNlZCBpbiBhIHdheSB0aGF0IG1ha2VzIHRoZW0gbm90IHdvcmsgb24gb3RoZXIKKyAqIGFyY2hpdGVjdHVyZXMgd2hlcmUgdW5hbGlnbmVkIGFjY2Vzc2VzIGFyZW4ndCBhcyBzaW1wbGUuCisgKi8KKworI2RlZmluZSBnZXRfdW5hbGlnbmVkKHB0cikgKCoocHRyKSkKKworI2RlZmluZSBwdXRfdW5hbGlnbmVkKHZhbCwgcHRyKSAoKHZvaWQpKCAqKHB0cikgPSAodmFsKSApKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1jcmlzL3VuaXN0ZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4MGJmMjcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL3VuaXN0ZC5oCkBAIC0wLDAgKzEsMzkyIEBACisjaWZuZGVmIF9BU01fQ1JJU19VTklTVERfSF8KKyNkZWZpbmUgX0FTTV9DUklTX1VOSVNURF9IXworCisjaW5jbHVkZSA8YXNtL2FyY2gvdW5pc3RkLmg+CisKKy8qCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHN5c3RlbSBjYWxsIG51bWJlcnMsIGFuZCBzdHViIG1hY3JvcyBmb3IgbGliYy4KKyAqLworCisjZGVmaW5lIF9fTlJfcmVzdGFydF9zeXNjYWxsICAgICAgMAorI2RlZmluZSBfX05SX2V4aXQJCSAgMQorI2RlZmluZSBfX05SX2ZvcmsJCSAgMgorI2RlZmluZSBfX05SX3JlYWQJCSAgMworI2RlZmluZSBfX05SX3dyaXRlCQkgIDQKKyNkZWZpbmUgX19OUl9vcGVuCQkgIDUKKyNkZWZpbmUgX19OUl9jbG9zZQkJICA2CisjZGVmaW5lIF9fTlJfd2FpdHBpZAkJICA3CisjZGVmaW5lIF9fTlJfY3JlYXQJCSAgOAorI2RlZmluZSBfX05SX2xpbmsJCSAgOQorI2RlZmluZSBfX05SX3VubGluawkJIDEwCisjZGVmaW5lIF9fTlJfZXhlY3ZlCQkgMTEKKyNkZWZpbmUgX19OUl9jaGRpcgkJIDEyCisjZGVmaW5lIF9fTlJfdGltZQkJIDEzCisjZGVmaW5lIF9fTlJfbWtub2QJCSAxNAorI2RlZmluZSBfX05SX2NobW9kCQkgMTUKKyNkZWZpbmUgX19OUl9sY2hvd24JCSAxNgorI2RlZmluZSBfX05SX2JyZWFrCQkgMTcKKyNkZWZpbmUgX19OUl9vbGRzdGF0CQkgMTgKKyNkZWZpbmUgX19OUl9sc2VlawkJIDE5CisjZGVmaW5lIF9fTlJfZ2V0cGlkCQkgMjAKKyNkZWZpbmUgX19OUl9tb3VudAkJIDIxCisjZGVmaW5lIF9fTlJfdW1vdW50CQkgMjIKKyNkZWZpbmUgX19OUl9zZXR1aWQJCSAyMworI2RlZmluZSBfX05SX2dldHVpZAkJIDI0CisjZGVmaW5lIF9fTlJfc3RpbWUJCSAyNQorI2RlZmluZSBfX05SX3B0cmFjZQkJIDI2CisjZGVmaW5lIF9fTlJfYWxhcm0JCSAyNworI2RlZmluZSBfX05SX29sZGZzdGF0CQkgMjgKKyNkZWZpbmUgX19OUl9wYXVzZQkJIDI5CisjZGVmaW5lIF9fTlJfdXRpbWUJCSAzMAorI2RlZmluZSBfX05SX3N0dHkJCSAzMQorI2RlZmluZSBfX05SX2d0dHkJCSAzMgorI2RlZmluZSBfX05SX2FjY2VzcwkJIDMzCisjZGVmaW5lIF9fTlJfbmljZQkJIDM0CisjZGVmaW5lIF9fTlJfZnRpbWUJCSAzNQorI2RlZmluZSBfX05SX3N5bmMJCSAzNgorI2RlZmluZSBfX05SX2tpbGwJCSAzNworI2RlZmluZSBfX05SX3JlbmFtZQkJIDM4CisjZGVmaW5lIF9fTlJfbWtkaXIJCSAzOQorI2RlZmluZSBfX05SX3JtZGlyCQkgNDAKKyNkZWZpbmUgX19OUl9kdXAJCSA0MQorI2RlZmluZSBfX05SX3BpcGUJCSA0MgorI2RlZmluZSBfX05SX3RpbWVzCQkgNDMKKyNkZWZpbmUgX19OUl9wcm9mCQkgNDQKKyNkZWZpbmUgX19OUl9icmsJCSA0NQorI2RlZmluZSBfX05SX3NldGdpZAkJIDQ2CisjZGVmaW5lIF9fTlJfZ2V0Z2lkCQkgNDcKKyNkZWZpbmUgX19OUl9zaWduYWwJCSA0OAorI2RlZmluZSBfX05SX2dldGV1aWQJCSA0OQorI2RlZmluZSBfX05SX2dldGVnaWQJCSA1MAorI2RlZmluZSBfX05SX2FjY3QJCSA1MQorI2RlZmluZSBfX05SX3Vtb3VudDIJCSA1MgorI2RlZmluZSBfX05SX2xvY2sJCSA1MworI2RlZmluZSBfX05SX2lvY3RsCQkgNTQKKyNkZWZpbmUgX19OUl9mY250bAkJIDU1CisjZGVmaW5lIF9fTlJfbXB4CQkgNTYKKyNkZWZpbmUgX19OUl9zZXRwZ2lkCQkgNTcKKyNkZWZpbmUgX19OUl91bGltaXQJCSA1OAorI2RlZmluZSBfX05SX29sZG9sZHVuYW1lCSA1OQorI2RlZmluZSBfX05SX3VtYXNrCQkgNjAKKyNkZWZpbmUgX19OUl9jaHJvb3QJCSA2MQorI2RlZmluZSBfX05SX3VzdGF0CQkgNjIKKyNkZWZpbmUgX19OUl9kdXAyCQkgNjMKKyNkZWZpbmUgX19OUl9nZXRwcGlkCQkgNjQKKyNkZWZpbmUgX19OUl9nZXRwZ3JwCQkgNjUKKyNkZWZpbmUgX19OUl9zZXRzaWQJCSA2NgorI2RlZmluZSBfX05SX3NpZ2FjdGlvbgkJIDY3CisjZGVmaW5lIF9fTlJfc2dldG1hc2sJCSA2OAorI2RlZmluZSBfX05SX3NzZXRtYXNrCQkgNjkKKyNkZWZpbmUgX19OUl9zZXRyZXVpZAkJIDcwCisjZGVmaW5lIF9fTlJfc2V0cmVnaWQJCSA3MQorI2RlZmluZSBfX05SX3NpZ3N1c3BlbmQJCSA3MgorI2RlZmluZSBfX05SX3NpZ3BlbmRpbmcJCSA3MworI2RlZmluZSBfX05SX3NldGhvc3RuYW1lCSA3NAorI2RlZmluZSBfX05SX3NldHJsaW1pdAkJIDc1CisjZGVmaW5lIF9fTlJfZ2V0cmxpbWl0CQkgNzYKKyNkZWZpbmUgX19OUl9nZXRydXNhZ2UJCSA3NworI2RlZmluZSBfX05SX2dldHRpbWVvZmRheQkgNzgKKyNkZWZpbmUgX19OUl9zZXR0aW1lb2ZkYXkJIDc5CisjZGVmaW5lIF9fTlJfZ2V0Z3JvdXBzCQkgODAKKyNkZWZpbmUgX19OUl9zZXRncm91cHMJCSA4MQorI2RlZmluZSBfX05SX3NlbGVjdAkJIDgyCisjZGVmaW5lIF9fTlJfc3ltbGluawkJIDgzCisjZGVmaW5lIF9fTlJfb2xkbHN0YXQJCSA4NAorI2RlZmluZSBfX05SX3JlYWRsaW5rCQkgODUKKyNkZWZpbmUgX19OUl91c2VsaWIJCSA4NgorI2RlZmluZSBfX05SX3N3YXBvbgkJIDg3CisjZGVmaW5lIF9fTlJfcmVib290CQkgODgKKyNkZWZpbmUgX19OUl9yZWFkZGlyCQkgODkKKyNkZWZpbmUgX19OUl9tbWFwCQkgOTAKKyNkZWZpbmUgX19OUl9tdW5tYXAJCSA5MQorI2RlZmluZSBfX05SX3RydW5jYXRlCQkgOTIKKyNkZWZpbmUgX19OUl9mdHJ1bmNhdGUJCSA5MworI2RlZmluZSBfX05SX2ZjaG1vZAkJIDk0CisjZGVmaW5lIF9fTlJfZmNob3duCQkgOTUKKyNkZWZpbmUgX19OUl9nZXRwcmlvcml0eQkgOTYKKyNkZWZpbmUgX19OUl9zZXRwcmlvcml0eQkgOTcKKyNkZWZpbmUgX19OUl9wcm9maWwJCSA5OAorI2RlZmluZSBfX05SX3N0YXRmcwkJIDk5CisjZGVmaW5lIF9fTlJfZnN0YXRmcwkJMTAwCisjZGVmaW5lIF9fTlJfaW9wZXJtCQkxMDEKKyNkZWZpbmUgX19OUl9zb2NrZXRjYWxsCQkxMDIKKyNkZWZpbmUgX19OUl9zeXNsb2cJCTEwMworI2RlZmluZSBfX05SX3NldGl0aW1lcgkJMTA0CisjZGVmaW5lIF9fTlJfZ2V0aXRpbWVyCQkxMDUKKyNkZWZpbmUgX19OUl9zdGF0CQkxMDYKKyNkZWZpbmUgX19OUl9sc3RhdAkJMTA3CisjZGVmaW5lIF9fTlJfZnN0YXQJCTEwOAorI2RlZmluZSBfX05SX29sZHVuYW1lCQkxMDkKKyNkZWZpbmUgX19OUl9pb3BsCQkxMTAKKyNkZWZpbmUgX19OUl92aGFuZ3VwCQkxMTEKKyNkZWZpbmUgX19OUl9pZGxlCQkxMTIKKyNkZWZpbmUgX19OUl92bTg2CQkxMTMKKyNkZWZpbmUgX19OUl93YWl0NAkJMTE0CisjZGVmaW5lIF9fTlJfc3dhcG9mZgkJMTE1CisjZGVmaW5lIF9fTlJfc3lzaW5mbwkJMTE2CisjZGVmaW5lIF9fTlJfaXBjCQkxMTcKKyNkZWZpbmUgX19OUl9mc3luYwkJMTE4CisjZGVmaW5lIF9fTlJfc2lncmV0dXJuCQkxMTkKKyNkZWZpbmUgX19OUl9jbG9uZQkJMTIwCisjZGVmaW5lIF9fTlJfc2V0ZG9tYWlubmFtZQkxMjEKKyNkZWZpbmUgX19OUl91bmFtZQkJMTIyCisjZGVmaW5lIF9fTlJfbW9kaWZ5X2xkdAkJMTIzCisjZGVmaW5lIF9fTlJfYWRqdGltZXgJCTEyNAorI2RlZmluZSBfX05SX21wcm90ZWN0CQkxMjUKKyNkZWZpbmUgX19OUl9zaWdwcm9jbWFzawkxMjYKKyNkZWZpbmUgX19OUl9jcmVhdGVfbW9kdWxlCTEyNworI2RlZmluZSBfX05SX2luaXRfbW9kdWxlCTEyOAorI2RlZmluZSBfX05SX2RlbGV0ZV9tb2R1bGUJMTI5CisjZGVmaW5lIF9fTlJfZ2V0X2tlcm5lbF9zeW1zCTEzMAorI2RlZmluZSBfX05SX3F1b3RhY3RsCQkxMzEKKyNkZWZpbmUgX19OUl9nZXRwZ2lkCQkxMzIKKyNkZWZpbmUgX19OUl9mY2hkaXIJCTEzMworI2RlZmluZSBfX05SX2JkZmx1c2gJCTEzNAorI2RlZmluZSBfX05SX3N5c2ZzCQkxMzUKKyNkZWZpbmUgX19OUl9wZXJzb25hbGl0eQkxMzYKKyNkZWZpbmUgX19OUl9hZnNfc3lzY2FsbAkxMzcgLyogU3lzY2FsbCBmb3IgQW5kcmV3IEZpbGUgU3lzdGVtICovCisjZGVmaW5lIF9fTlJfc2V0ZnN1aWQJCTEzOAorI2RlZmluZSBfX05SX3NldGZzZ2lkCQkxMzkKKyNkZWZpbmUgX19OUl9fbGxzZWVrCQkxNDAKKyNkZWZpbmUgX19OUl9nZXRkZW50cwkJMTQxCisjZGVmaW5lIF9fTlJfX25ld3NlbGVjdAkJMTQyCisjZGVmaW5lIF9fTlJfZmxvY2sJCTE0MworI2RlZmluZSBfX05SX21zeW5jCQkxNDQKKyNkZWZpbmUgX19OUl9yZWFkdgkJMTQ1CisjZGVmaW5lIF9fTlJfd3JpdGV2CQkxNDYKKyNkZWZpbmUgX19OUl9nZXRzaWQJCTE0NworI2RlZmluZSBfX05SX2ZkYXRhc3luYwkJMTQ4CisjZGVmaW5lIF9fTlJfX3N5c2N0bAkJMTQ5CisjZGVmaW5lIF9fTlJfbWxvY2sJCTE1MAorI2RlZmluZSBfX05SX211bmxvY2sJCTE1MQorI2RlZmluZSBfX05SX21sb2NrYWxsCQkxNTIKKyNkZWZpbmUgX19OUl9tdW5sb2NrYWxsCQkxNTMKKyNkZWZpbmUgX19OUl9zY2hlZF9zZXRwYXJhbQkJMTU0CisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0cGFyYW0JCTE1NQorI2RlZmluZSBfX05SX3NjaGVkX3NldHNjaGVkdWxlcgkJMTU2CisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0c2NoZWR1bGVyCQkxNTcKKyNkZWZpbmUgX19OUl9zY2hlZF95aWVsZAkJMTU4CisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21heAkxNTkKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWluCTE2MAorI2RlZmluZSBfX05SX3NjaGVkX3JyX2dldF9pbnRlcnZhbAkxNjEKKyNkZWZpbmUgX19OUl9uYW5vc2xlZXAJCTE2MgorI2RlZmluZSBfX05SX21yZW1hcAkJMTYzCisjZGVmaW5lIF9fTlJfc2V0cmVzdWlkCQkxNjQKKyNkZWZpbmUgX19OUl9nZXRyZXN1aWQJCTE2NQorCisjZGVmaW5lIF9fTlJfcXVlcnlfbW9kdWxlCTE2NworI2RlZmluZSBfX05SX3BvbGwJCTE2OAorI2RlZmluZSBfX05SX25mc3NlcnZjdGwJCTE2OQorI2RlZmluZSBfX05SX3NldHJlc2dpZAkJMTcwCisjZGVmaW5lIF9fTlJfZ2V0cmVzZ2lkCQkxNzEKKyNkZWZpbmUgX19OUl9wcmN0bCAgICAgICAgICAgICAgMTcyCisjZGVmaW5lIF9fTlJfcnRfc2lncmV0dXJuCTE3MworI2RlZmluZSBfX05SX3J0X3NpZ2FjdGlvbgkxNzQKKyNkZWZpbmUgX19OUl9ydF9zaWdwcm9jbWFzawkxNzUKKyNkZWZpbmUgX19OUl9ydF9zaWdwZW5kaW5nCTE3NgorI2RlZmluZSBfX05SX3J0X3NpZ3RpbWVkd2FpdAkxNzcKKyNkZWZpbmUgX19OUl9ydF9zaWdxdWV1ZWluZm8JMTc4CisjZGVmaW5lIF9fTlJfcnRfc2lnc3VzcGVuZAkxNzkKKyNkZWZpbmUgX19OUl9wcmVhZDY0CQkxODAKKyNkZWZpbmUgX19OUl9wd3JpdGU2NAkJMTgxCisjZGVmaW5lIF9fTlJfY2hvd24JCTE4MgorI2RlZmluZSBfX05SX2dldGN3ZAkJMTgzCisjZGVmaW5lIF9fTlJfY2FwZ2V0CQkxODQKKyNkZWZpbmUgX19OUl9jYXBzZXQJCTE4NQorI2RlZmluZSBfX05SX3NpZ2FsdHN0YWNrCTE4NgorI2RlZmluZSBfX05SX3NlbmRmaWxlCQkxODcKKyNkZWZpbmUgX19OUl9nZXRwbXNnCQkxODgJLyogc29tZSBwZW9wbGUgYWN0dWFsbHkgd2FudCBzdHJlYW1zICovCisjZGVmaW5lIF9fTlJfcHV0cG1zZwkJMTg5CS8qIHNvbWUgcGVvcGxlIGFjdHVhbGx5IHdhbnQgc3RyZWFtcyAqLworI2RlZmluZSBfX05SX3Zmb3JrCQkxOTAKKyNkZWZpbmUgX19OUl91Z2V0cmxpbWl0CQkxOTEJLyogU3VTIGNvbXBsaWFudCBnZXRybGltaXQgKi8KKyNkZWZpbmUgX19OUl9tbWFwMgkJMTkyCisjZGVmaW5lIF9fTlJfdHJ1bmNhdGU2NAkJMTkzCisjZGVmaW5lIF9fTlJfZnRydW5jYXRlNjQJMTk0CisjZGVmaW5lIF9fTlJfc3RhdDY0CQkxOTUKKyNkZWZpbmUgX19OUl9sc3RhdDY0CQkxOTYKKyNkZWZpbmUgX19OUl9mc3RhdDY0CQkxOTcKKyNkZWZpbmUgX19OUl9sY2hvd24zMgkJMTk4CisjZGVmaW5lIF9fTlJfZ2V0dWlkMzIJCTE5OQorI2RlZmluZSBfX05SX2dldGdpZDMyCQkyMDAKKyNkZWZpbmUgX19OUl9nZXRldWlkMzIJCTIwMQorI2RlZmluZSBfX05SX2dldGVnaWQzMgkJMjAyCisjZGVmaW5lIF9fTlJfc2V0cmV1aWQzMgkJMjAzCisjZGVmaW5lIF9fTlJfc2V0cmVnaWQzMgkJMjA0CisjZGVmaW5lIF9fTlJfZ2V0Z3JvdXBzMzIJMjA1CisjZGVmaW5lIF9fTlJfc2V0Z3JvdXBzMzIJMjA2CisjZGVmaW5lIF9fTlJfZmNob3duMzIJCTIwNworI2RlZmluZSBfX05SX3NldHJlc3VpZDMyCTIwOAorI2RlZmluZSBfX05SX2dldHJlc3VpZDMyCTIwOQorI2RlZmluZSBfX05SX3NldHJlc2dpZDMyCTIxMAorI2RlZmluZSBfX05SX2dldHJlc2dpZDMyCTIxMQorI2RlZmluZSBfX05SX2Nob3duMzIJCTIxMgorI2RlZmluZSBfX05SX3NldHVpZDMyCQkyMTMKKyNkZWZpbmUgX19OUl9zZXRnaWQzMgkJMjE0CisjZGVmaW5lIF9fTlJfc2V0ZnN1aWQzMgkJMjE1CisjZGVmaW5lIF9fTlJfc2V0ZnNnaWQzMgkJMjE2CisjZGVmaW5lIF9fTlJfcGl2b3Rfcm9vdAkJMjE3CisjZGVmaW5lIF9fTlJfbWluY29yZQkJMjE4CisjZGVmaW5lIF9fTlJfbWFkdmlzZQkJMjE5CisjZGVmaW5lIF9fTlJfZ2V0ZGVudHM2NAkJMjIwCisjZGVmaW5lIF9fTlJfZmNudGw2NAkJMjIxCisvKiAyMjMgaXMgdW51c2VkICovCisjZGVmaW5lIF9fTlJfZ2V0dGlkICAgICAgICAgICAgIDIyNAorI2RlZmluZSBfX05SX3JlYWRhaGVhZCAgICAgICAgICAyMjUKKyNkZWZpbmUgX19OUl9zZXR4YXR0cgkJMjI2CisjZGVmaW5lIF9fTlJfbHNldHhhdHRyCQkyMjcKKyNkZWZpbmUgX19OUl9mc2V0eGF0dHIJCTIyOAorI2RlZmluZSBfX05SX2dldHhhdHRyCQkyMjkKKyNkZWZpbmUgX19OUl9sZ2V0eGF0dHIJCTIzMAorI2RlZmluZSBfX05SX2ZnZXR4YXR0cgkJMjMxCisjZGVmaW5lIF9fTlJfbGlzdHhhdHRyCQkyMzIKKyNkZWZpbmUgX19OUl9sbGlzdHhhdHRyCQkyMzMKKyNkZWZpbmUgX19OUl9mbGlzdHhhdHRyCQkyMzQKKyNkZWZpbmUgX19OUl9yZW1vdmV4YXR0cgkyMzUKKyNkZWZpbmUgX19OUl9scmVtb3ZleGF0dHIJMjM2CisjZGVmaW5lIF9fTlJfZnJlbW92ZXhhdHRyCTIzNworI2RlZmluZSBfX05SX3RraWxsCQkyMzgKKyNkZWZpbmUgX19OUl9zZW5kZmlsZTY0CQkyMzkKKyNkZWZpbmUgX19OUl9mdXRleAkJMjQwCisjZGVmaW5lIF9fTlJfc2NoZWRfc2V0YWZmaW5pdHkJMjQxCisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0YWZmaW5pdHkJMjQyCisjZGVmaW5lIF9fTlJfc2V0X3RocmVhZF9hcmVhCTI0MworI2RlZmluZSBfX05SX2dldF90aHJlYWRfYXJlYQkyNDQKKyNkZWZpbmUgX19OUl9pb19zZXR1cAkJMjQ1CisjZGVmaW5lIF9fTlJfaW9fZGVzdHJveQkJMjQ2CisjZGVmaW5lIF9fTlJfaW9fZ2V0ZXZlbnRzCTI0NworI2RlZmluZSBfX05SX2lvX3N1Ym1pdAkJMjQ4CisjZGVmaW5lIF9fTlJfaW9fY2FuY2VsCQkyNDkKKyNkZWZpbmUgX19OUl9mYWR2aXNlNjQJCTI1MAorI2RlZmluZSBfX05SX2V4aXRfZ3JvdXAJCTI1MgorI2RlZmluZSBfX05SX2xvb2t1cF9kY29va2llCTI1MworI2RlZmluZSBfX05SX2Vwb2xsX2NyZWF0ZQkyNTQKKyNkZWZpbmUgX19OUl9lcG9sbF9jdGwJCTI1NQorI2RlZmluZSBfX05SX2Vwb2xsX3dhaXQJCTI1NgorI2RlZmluZSBfX05SX3JlbWFwX2ZpbGVfcGFnZXMJMjU3CisjZGVmaW5lIF9fTlJfc2V0X3RpZF9hZGRyZXNzCTI1OAorI2RlZmluZSBfX05SX3RpbWVyX2NyZWF0ZQkyNTkKKyNkZWZpbmUgX19OUl90aW1lcl9zZXR0aW1lCShfX05SX3RpbWVyX2NyZWF0ZSsxKQorI2RlZmluZSBfX05SX3RpbWVyX2dldHRpbWUJKF9fTlJfdGltZXJfY3JlYXRlKzIpCisjZGVmaW5lIF9fTlJfdGltZXJfZ2V0b3ZlcnJ1bgkoX19OUl90aW1lcl9jcmVhdGUrMykKKyNkZWZpbmUgX19OUl90aW1lcl9kZWxldGUJKF9fTlJfdGltZXJfY3JlYXRlKzQpCisjZGVmaW5lIF9fTlJfY2xvY2tfc2V0dGltZQkoX19OUl90aW1lcl9jcmVhdGUrNSkKKyNkZWZpbmUgX19OUl9jbG9ja19nZXR0aW1lCShfX05SX3RpbWVyX2NyZWF0ZSs2KQorI2RlZmluZSBfX05SX2Nsb2NrX2dldHJlcwkoX19OUl90aW1lcl9jcmVhdGUrNykKKyNkZWZpbmUgX19OUl9jbG9ja19uYW5vc2xlZXAJKF9fTlJfdGltZXJfY3JlYXRlKzgpCisjZGVmaW5lIF9fTlJfc3RhdGZzNjQJCTI2OAorI2RlZmluZSBfX05SX2ZzdGF0ZnM2NAkJMjY5CisjZGVmaW5lIF9fTlJfdGdraWxsCQkyNzAKKyNkZWZpbmUgX19OUl91dGltZXMJCTI3MQorI2RlZmluZSBfX05SX2ZhZHZpc2U2NF82NAkyNzIKKyNkZWZpbmUgX19OUl92c2VydmVyCQkyNzMKKyNkZWZpbmUgX19OUl9tYmluZAkJMjc0CisjZGVmaW5lIF9fTlJfZ2V0X21lbXBvbGljeQkyNzUKKyNkZWZpbmUgX19OUl9zZXRfbWVtcG9saWN5CTI3NgorI2RlZmluZSBfX05SX21xX29wZW4gCQkyNzcKKyNkZWZpbmUgX19OUl9tcV91bmxpbmsJCShfX05SX21xX29wZW4rMSkKKyNkZWZpbmUgX19OUl9tcV90aW1lZHNlbmQJKF9fTlJfbXFfb3BlbisyKQorI2RlZmluZSBfX05SX21xX3RpbWVkcmVjZWl2ZQkoX19OUl9tcV9vcGVuKzMpCisjZGVmaW5lIF9fTlJfbXFfbm90aWZ5CQkoX19OUl9tcV9vcGVuKzQpCisjZGVmaW5lIF9fTlJfbXFfZ2V0c2V0YXR0cgkoX19OUl9tcV9vcGVuKzUpCisgCisjZGVmaW5lIE5SX3N5c2NhbGxzIDI4MworCisKKyNpZmRlZiBfX0tFUk5FTF9fCisjZGVmaW5lIF9fQVJDSF9XQU5UX0lQQ19QQVJTRV9WRVJTSU9OCisjZGVmaW5lIF9fQVJDSF9XQU5UX09MRF9SRUFERElSCisjZGVmaW5lIF9fQVJDSF9XQU5UX09MRF9TVEFUCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NUQVQ2NAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfQUxBUk0KKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0dFVEhPU1ROQU1FCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19QQVVTRQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0dFVE1BU0sKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR05BTAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfVElNRQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfVVRJTUUKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1dBSVRQSUQKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NPQ0tFVENBTEwKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0ZBRFZJU0U2NAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfR0VUUEdSUAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfTExTRUVLCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19OSUNFCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19PTERfR0VUUkxJTUlUCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19PTERVTU9VTlQKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR1BFTkRJTkcKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR1BST0NNQVNLCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19SVF9TSUdBQ1RJT04KKyNlbmRpZgorCisjaWZkZWYgX19LRVJORUxfU1lTQ0FMTFNfXworCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKworLyoKKyAqIHdlIG5lZWQgdGhpcyBpbmxpbmUgLSBmb3JraW5nIGZyb20ga2VybmVsIHNwYWNlIHdpbGwgcmVzdWx0CisgKiBpbiBOTyBDT1BZIE9OIFdSSVRFICghISEpLCB1bnRpbCBhbiBleGVjdmUgaXMgZXhlY3V0ZWQuIFRoaXMKKyAqIGlzIG5vIHByb2JsZW0sIGJ1dCBmb3IgdGhlIHN0YWNrLiBUaGlzIGlzIGhhbmRsZWQgYnkgbm90IGxldHRpbmcKKyAqIG1haW4oKSB1c2UgdGhlIHN0YWNrIGF0IGFsbCBhZnRlciBmb3JrKCkuIFRodXMsIG5vIGZ1bmN0aW9uCisgKiBjYWxscyAtIHdoaWNoIG1lYW5zIGlubGluZSBjb2RlIGZvciBmb3JrIHRvbywgYXMgb3RoZXJ3aXNlIHdlCisgKiB3b3VsZCB1c2UgdGhlIHN0YWNrIHVwb24gZXhpdCBmcm9tICdmb3JrKCknLgorICoKKyAqIEFjdHVhbGx5IG9ubHkgcGF1c2UgYW5kIGZvcmsgYXJlIG5lZWRlZCBpbmxpbmUsIHNvIHRoYXQgdGhlcmUKKyAqIHdvbid0IGJlIGFueSBtZXNzaW5nIHdpdGggdGhlIHN0YWNrIGZyb20gbWFpbigpLCBidXQgd2UgZGVmaW5lCisgKiBzb21lIG90aGVycyB0b28uCisgKi8KKyNkZWZpbmUgX19OUl9fZXhpdCBfX05SX2V4aXQKK2V4dGVybiBpbmxpbmUgX3N5c2NhbGwwKHBpZF90LHNldHNpZCkKK2V4dGVybiBpbmxpbmUgX3N5c2NhbGwzKGludCx3cml0ZSxpbnQsZmQsY29uc3QgY2hhciAqLGJ1ZixvZmZfdCxjb3VudCkKK2V4dGVybiBpbmxpbmUgX3N5c2NhbGwzKGludCxyZWFkLGludCxmZCxjaGFyICosYnVmLG9mZl90LGNvdW50KQorZXh0ZXJuIGlubGluZSBfc3lzY2FsbDMob2ZmX3QsbHNlZWssaW50LGZkLG9mZl90LG9mZnNldCxpbnQsY291bnQpCitleHRlcm4gaW5saW5lIF9zeXNjYWxsMShpbnQsZHVwLGludCxmZCkKK2V4dGVybiBpbmxpbmUgX3N5c2NhbGwzKGludCxleGVjdmUsY29uc3QgY2hhciAqLGZpbGUsY2hhciAqKixhcmd2LGNoYXIgKiosZW52cCkKK2V4dGVybiBpbmxpbmUgX3N5c2NhbGwzKGludCxvcGVuLGNvbnN0IGNoYXIgKixmaWxlLGludCxmbGFnLGludCxtb2RlKQorZXh0ZXJuIGlubGluZSBfc3lzY2FsbDEoaW50LGNsb3NlLGludCxmZCkKKworc3RydWN0IHB0X3JlZ3M7Cithc21saW5rYWdlIGxvbmcgc3lzX21tYXAyKAorCQkJdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwKKwkJCXVuc2lnbmVkIGxvbmcgcHJvdCwgdW5zaWduZWQgbG9uZyBmbGFncywKKwkJCXVuc2lnbmVkIGxvbmcgZmQsIHVuc2lnbmVkIGxvbmcgcGdvZmYpOworYXNtbGlua2FnZSBpbnQgc3lzX2V4ZWN2ZShjb25zdCBjaGFyICpmbmFtZSwgY2hhciAqKmFyZ3YsIGNoYXIgKiplbnZwLAorCQkJbG9uZyByMTMsIGxvbmcgbW9mLCBsb25nIHNycCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworYXNtbGlua2FnZSBpbnQgc3lzX2Nsb25lKHVuc2lnbmVkIGxvbmcgbmV3dXNwLCB1bnNpZ25lZCBsb25nIGZsYWdzLAorCQkJaW50KiBwYXJlbnRfdGlkLCBpbnQqIGNoaWxkX3RpZCwgbG9uZyBtb2YsIGxvbmcgc3JwLAorCQkJc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworYXNtbGlua2FnZSBpbnQgc3lzX2ZvcmsobG9uZyByMTAsIGxvbmcgcjExLCBsb25nIHIxMiwgbG9uZyByMTMsCisJCQlsb25nIG1vZiwgbG9uZyBzcnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2FzbWxpbmthZ2UgaW50IHN5c192Zm9yayhsb25nIHIxMCwgbG9uZyByMTEsIGxvbmcgcjEyLCBsb25nIHIxMywKKwkJCWxvbmcgbW9mLCBsb25nIHNycCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworYXNtbGlua2FnZSBpbnQgc3lzX3BpcGUodW5zaWduZWQgbG9uZyBfX3VzZXIgKmZpbGRlcyk7Cithc21saW5rYWdlIGludCBzeXNfcHRyYWNlKGxvbmcgcmVxdWVzdCwgbG9uZyBwaWQsIGxvbmcgYWRkciwgbG9uZyBkYXRhKTsKK3N0cnVjdCBzaWdhY3Rpb247Cithc21saW5rYWdlIGxvbmcgc3lzX3J0X3NpZ2FjdGlvbihpbnQgc2lnLAorCQkJCWNvbnN0IHN0cnVjdCBzaWdhY3Rpb24gX191c2VyICphY3QsCisJCQkJc3RydWN0IHNpZ2FjdGlvbiBfX3VzZXIgKm9hY3QsCisJCQkJc2l6ZV90IHNpZ3NldHNpemUpOworCisvKgorICogU2luY2Ugd2UgZGVmaW5lIGl0ICJleHRlcm5hbCIsIGl0IGNvbGxpZGVzIHdpdGggdGhlIGJ1aWx0LWluCisgKiBkZWZpbml0aW9uLCB3aGljaCBoYXMgdGhlICJub3JldHVybiIgYXR0cmlidXRlIGFuZCB3aWxsIGNhdXNlCisgKiBjb21wbGFpbnRzLiAgV2UgZG9uJ3Qgd2FudCB0byB1c2UgLWZuby1idWlsdGluLCBzbyBqdXN0IHVzZSBhCisgKiBkaWZmZXJlbnQgbmFtZSB3aGVuIGluIHRoZSBrZXJuZWwuCisgKi8KKyNpZmRlZiBfX0tFUk5FTF9fCisjZGVmaW5lIF9leGl0IGtlcm5lbF9zeXNjYWxsX2V4aXQKKyNlbmRpZgorZXh0ZXJuIGlubGluZSBfc3lzY2FsbDEoaW50LF9leGl0LGludCxleGl0Y29kZSkKK2V4dGVybiBpbmxpbmUgX3N5c2NhbGwzKHBpZF90LHdhaXRwaWQscGlkX3QscGlkLGludCAqLHdhaXRfc3RhdCxpbnQsb3B0aW9ucykKKyNlbmRpZgorCisKKy8qCisgKiAiQ29uZGl0aW9uYWwiIHN5c2NhbGxzCisgKgorICogV2hhdCB3ZSB3YW50IGlzIF9fYXR0cmlidXRlX18oKHdlYWssYWxpYXMoInN5c19uaV9zeXNjYWxsIikpKSwKKyAqIGJ1dCBpdCBkb2Vzbid0IHdvcmsgb24gYWxsIHRvb2xjaGFpbnMsIHNvIHdlIGp1c3QgZG8gaXQgYnkgaGFuZAorICovCisjZGVmaW5lIGNvbmRfc3lzY2FsbCh4KSBhc20oIi53ZWFrXHQiICN4ICJcblx0LnNldFx0IiAjeCAiLHN5c19uaV9zeXNjYWxsIikKKworI2VuZGlmIC8qIF9BU01fQ1JJU19VTklTVERfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvdXNlci5oIGIvaW5jbHVkZS9hc20tY3Jpcy91c2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjUzOGUyYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvdXNlci5oCkBAIC0wLDAgKzEsNTIgQEAKKyNpZm5kZWYgX19BU01fQ1JJU19VU0VSX0gKKyNkZWZpbmUgX19BU01fQ1JJU19VU0VSX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvdXNlci5oPgorCisvKgorICogQ29yZSBmaWxlIGZvcm1hdDogVGhlIGNvcmUgZmlsZSBpcyB3cml0dGVuIGluIHN1Y2ggYSB3YXkgdGhhdCBnZGIKKyAqIGNhbiB1bmRlcnN0YW5kIGl0IGFuZCBwcm92aWRlIHVzZWZ1bCBpbmZvcm1hdGlvbiB0byB0aGUgdXNlciAodW5kZXIKKyAqIGxpbnV4IHdlIHVzZSB0aGUgYHRyYWQtY29yZScgYmZkKS4gIFRoZSBmaWxlIGNvbnRlbnRzIGFyZSBhcyBmb2xsb3dzOgorICoKKyAqICB1cGFnZTogMSBwYWdlIGNvbnNpc3Rpbmcgb2YgYSB1c2VyIHN0cnVjdCB0aGF0IHRlbGxzIGdkYgorICoJd2hhdCBpcyBwcmVzZW50IGluIHRoZSBmaWxlLiAgRGlyZWN0bHkgYWZ0ZXIgdGhpcyBpcyBhCisgKgljb3B5IG9mIHRoZSB0YXNrX3N0cnVjdCwgd2hpY2ggaXMgY3VycmVudGx5IG5vdCB1c2VkIGJ5IGdkYiwKKyAqCWJ1dCBpdCBtYXkgY29tZSBpbiBoYW5keSBhdCBzb21lIHBvaW50LiAgQWxsIG9mIHRoZSByZWdpc3RlcnMKKyAqCWFyZSBzdG9yZWQgYXMgcGFydCBvZiB0aGUgdXBhZ2UuICBUaGUgdXBhZ2Ugc2hvdWxkIGFsd2F5cyBiZQorICoJb25seSBvbmUgcGFnZSBsb25nLgorICogIGRhdGE6IFRoZSBkYXRhIHNlZ21lbnQgZm9sbG93cyBuZXh0LiAgV2UgdXNlIGN1cnJlbnQtPmVuZF90ZXh0IHRvCisgKgljdXJyZW50LT5icmsgdG8gcGljayB1cCBhbGwgb2YgdGhlIHVzZXIgdmFyaWFibGVzLCBwbHVzIGFueSBtZW1vcnkKKyAqCXRoYXQgbWF5IGhhdmUgYmVlbiBzYnJrJ2VkLiAgTm8gYXR0ZW1wdCBpcyBtYWRlIHRvIGRldGVybWluZSBpZiBhCisgKglwYWdlIGlzIGRlbWFuZC16ZXJvIG9yIGlmIGEgcGFnZSBpcyB0b3RhbGx5IHVudXNlZCwgd2UganVzdCBjb3ZlcgorICoJdGhlIGVudGlyZSByYW5nZS4gIEFsbCBvZiB0aGUgYWRkcmVzc2VzIGFyZSByb3VuZGVkIGluIHN1Y2ggYSB3YXkKKyAqCXRoYXQgYW4gaW50ZWdyYWwgbnVtYmVyIG9mIHBhZ2VzIGlzIHdyaXR0ZW4uCisgKiAgc3RhY2s6IFdlIG5lZWQgdGhlIHN0YWNrIGluZm9ybWF0aW9uIGluIG9yZGVyIHRvIGdldCBhIG1lYW5pbmdmdWwKKyAqCWJhY2t0cmFjZS4gIFdlIG5lZWQgdG8gd3JpdGUgdGhlIGRhdGEgZnJvbSB1c3AgdG8KKyAqCWN1cnJlbnQtPnN0YXJ0X3N0YWNrLCBzbyB3ZSByb3VuZCBlYWNoIG9mIHRoZXNlIGluIG9yZGVyIHRvIGJlIGFibGUKKyAqCXRvIHdyaXRlIGFuIGludGVnZXIgbnVtYmVyIG9mIHBhZ2VzLgorICovCisgICAgICAgIAorc3RydWN0IHVzZXIgeworCXN0cnVjdCB1c2VyX3JlZ3Nfc3RydWN0CXJlZ3M7CQkvKiBlbnRpcmUgbWFjaGluZSBzdGF0ZSAqLworCXNpemVfdAkJdV90c2l6ZTsJCS8qIHRleHQgc2l6ZSAocGFnZXMpICovCisJc2l6ZV90CQl1X2RzaXplOwkJLyogZGF0YSBzaXplIChwYWdlcykgKi8KKwlzaXplX3QJCXVfc3NpemU7CQkvKiBzdGFjayBzaXplIChwYWdlcykgKi8KKwl1bnNpZ25lZCBsb25nCXN0YXJ0X2NvZGU7CQkvKiB0ZXh0IHN0YXJ0aW5nIGFkZHJlc3MgKi8KKwl1bnNpZ25lZCBsb25nCXN0YXJ0X2RhdGE7CQkvKiBkYXRhIHN0YXJ0aW5nIGFkZHJlc3MgKi8KKwl1bnNpZ25lZCBsb25nCXN0YXJ0X3N0YWNrOwkJLyogc3RhY2sgc3RhcnRpbmcgYWRkcmVzcyAqLworCWxvbmcgaW50CXNpZ25hbDsJCQkvKiBzaWduYWwgY2F1c2luZyBjb3JlIGR1bXAgKi8KKwlzdHJ1Y3QgcmVncyAqCXVfYXIwOwkJCS8qIGhlbHAgZ2RiIGZpbmQgcmVnaXN0ZXJzICovCisJdW5zaWduZWQgbG9uZwltYWdpYzsJCQkvKiBpZGVudGlmaWVzIGEgY29yZSBmaWxlICovCisJY2hhcgkJdV9jb21tWzMyXTsJCS8qIHVzZXIgY29tbWFuZCBuYW1lICovCit9OworCisjZGVmaW5lIE5CUEcJCQlQQUdFX1NJWkUKKyNkZWZpbmUgVVBBR0VTCQkJMQorI2RlZmluZSBIT1NUX1RFWFRfU1RBUlRfQUREUgkodS5zdGFydF9jb2RlKQorI2RlZmluZSBIT1NUX0RBVEFfU1RBUlRfQUREUgkodS5zdGFydF9kYXRhKQorI2RlZmluZSBIT1NUX1NUQUNLX0VORF9BRERSCSh1LnN0YXJ0X3N0YWNrICsgdS51X3NzaXplICogTkJQRykKKworI2VuZGlmIC8qIF9fQVNNX0NSSVNfVVNFUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvYS5vdXQuaCBiL2luY2x1ZGUvYXNtLWZydi9hLm91dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkM2I3ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1mcnYvYS5vdXQuaApAQCAtMCwwICsxLDUgQEAKKy8qCisgKiBGUlYgZG9lc24ndCBkbyBBT1VUIGZvcm1hdC4gVGhpcyBoZWFkZXIgZmlsZSBzaG91bGQgYmUgcmVtb3ZlZCBhcworICogc29vbiBhcyBmcy9leGVjLmMgYW5kIGZzL3Byb2Mva2NvcmUuYyBhbmQgdGhlIGFyY2hzIHRoYXQgcmVxdWlyZQorICogdGhlbSB0byBpbmNsdWRlIGxpbnV4L2Eub3V0LmggYXJlIGZpeGVkLgorICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvYXRvbWljLmggYi9pbmNsdWRlL2FzbS1mcnYvYXRvbWljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc1OTY4NAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWZydi9hdG9taWMuaApAQCAtMCwwICsxLDQxNyBAQAorLyogYXRvbWljLmg6IGF0b21pYyBvcGVyYXRpb24gZW11bGF0aW9uIGZvciBGUi1WCisgKgorICogRm9yIGFuIGV4cGxhbmF0aW9uIG9mIGhvdyBhdG9taWMgb3BzIHdvcmsgaW4gdGhpcyBhcmNoLCBzZWU6CisgKiAgIERvY3VtZW50YXRpb24vZnVqaXRzdS9mcnYvYXRvbWljLW9wcy50eHQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpZm5kZWYgX0FTTV9BVE9NSUNfSAorI2RlZmluZSBfQVNNX0FUT01JQ19ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9zcHItcmVncy5oPgorCisjaWZkZWYgQ09ORklHX1NNUAorI2Vycm9yIG5vdCBTTVAgc2FmZQorI2VuZGlmCisKKy8qCisgKiBBdG9taWMgb3BlcmF0aW9ucyB0aGF0IEMgY2FuJ3QgZ3VhcmFudGVlIHVzLiAgVXNlZnVsIGZvcgorICogcmVzb3VyY2UgY291bnRpbmcgZXRjLi4KKyAqCisgKiBXZSBkbyBub3QgaGF2ZSBTTVAgc3lzdGVtcywgc28gd2UgZG9uJ3QgaGF2ZSB0byBkZWFsIHdpdGggdGhhdC4KKyAqLworCisvKiBBdG9taWMgb3BlcmF0aW9ucyBhcmUgYWxyZWFkeSBzZXJpYWxpemluZyAqLworI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfZGVjKCkJYmFycmllcigpCisjZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2RlYygpCWJhcnJpZXIoKQorI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfaW5jKCkJYmFycmllcigpCisjZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpCWJhcnJpZXIoKQorCit0eXBlZGVmIHN0cnVjdCB7CisJaW50IGNvdW50ZXI7Cit9IGF0b21pY190OworCisjZGVmaW5lIEFUT01JQ19JTklUKGkpCQl7IChpKSB9CisjZGVmaW5lIGF0b21pY19yZWFkKHYpCQkoKHYpLT5jb3VudGVyKQorI2RlZmluZSBhdG9taWNfc2V0KHYsIGkpCSgoKHYpLT5jb3VudGVyKSA9IChpKSkKKworI2lmbmRlZiBDT05GSUdfRlJWX09VVE9GTElORV9BVE9NSUNfT1BTCitzdGF0aWMgaW5saW5lIGludCBhdG9taWNfYWRkX3JldHVybihpbnQgaSwgYXRvbWljX3QgKnYpCit7CisJdW5zaWduZWQgbG9uZyB2YWw7CisKKwlhc20oIjA6CQkJCQkJXG4iCisJICAgICIJb3JjYwkJZ3IwLGdyMCxncjAsaWNjMwlcbiIJLyogc2V0IElDQzMuWiAqLworCSAgICAiCWNrZXEJCWljYzMsY2M3CQlcbiIKKwkgICAgIglsZC5wCQklTTAsJTEJCQlcbiIJLyogTEQuUC9PUkNSIG11c3QgYmUgYXRvbWljICovCisJICAgICIJb3JjcgkJY2M3LGNjNyxjYzMJCVxuIgkvKiBzZXQgQ0MzIHRvIHRydWUgKi8KKwkgICAgIglhZGQlSTIJCSUxLCUyLCUxCQlcbiIKKwkgICAgIgljc3QucAkJJTEsJU0wCQksY2MzLCMxCVxuIgorCSAgICAiCWNvcmNjCQlncjI5LGdyMjksZ3IwCSxjYzMsIzEJXG4iCS8qIGNsZWFyIElDQzMuWiBpZiBzdG9yZSBoYXBwZW5zICovCisJICAgICIJYmVxCQlpY2MzLCMwLDBiCQlcbiIKKwkgICAgOiAiK1UiKHYtPmNvdW50ZXIpLCAiPSZyIih2YWwpCisJICAgIDogIk5QciIoaSkKKwkgICAgOiAibWVtb3J5IiwgImNjNyIsICJjYzMiLCAiaWNjMyIKKwkgICAgKTsKKworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pY19zdWJfcmV0dXJuKGludCBpLCBhdG9taWNfdCAqdikKK3sKKwl1bnNpZ25lZCBsb25nIHZhbDsKKworCWFzbSgiMDoJCQkJCQlcbiIKKwkgICAgIglvcmNjCQlncjAsZ3IwLGdyMCxpY2MzCVxuIgkvKiBzZXQgSUNDMy5aICovCisJICAgICIJY2tlcQkJaWNjMyxjYzcJCVxuIgorCSAgICAiCWxkLnAJCSVNMCwlMQkJCVxuIgkvKiBMRC5QL09SQ1IgbXVzdCBiZSBhdG9taWMgKi8KKwkgICAgIglvcmNyCQljYzcsY2M3LGNjMwkJXG4iCS8qIHNldCBDQzMgdG8gdHJ1ZSAqLworCSAgICAiCXN1YiVJMgkJJTEsJTIsJTEJCVxuIgorCSAgICAiCWNzdC5wCQklMSwlTTAJCSxjYzMsIzEJXG4iCisJICAgICIJY29yY2MJCWdyMjksZ3IyOSxncjAJLGNjMywjMQlcbiIJLyogY2xlYXIgSUNDMy5aIGlmIHN0b3JlIGhhcHBlbnMgKi8KKwkgICAgIgliZXEJCWljYzMsIzAsMGIJCVxuIgorCSAgICA6ICIrVSIodi0+Y291bnRlciksICI9JnIiKHZhbCkKKwkgICAgOiAiTlByIihpKQorCSAgICA6ICJtZW1vcnkiLCAiY2M3IiwgImNjMyIsICJpY2MzIgorCSAgICApOworCisJcmV0dXJuIHZhbDsKK30KKworI2Vsc2UKKworZXh0ZXJuIGludCBhdG9taWNfYWRkX3JldHVybihpbnQgaSwgYXRvbWljX3QgKnYpOworZXh0ZXJuIGludCBhdG9taWNfc3ViX3JldHVybihpbnQgaSwgYXRvbWljX3QgKnYpOworCisjZW5kaWYKKworc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2FkZF9uZWdhdGl2ZShpbnQgaSwgYXRvbWljX3QgKnYpCit7CisJcmV0dXJuIGF0b21pY19hZGRfcmV0dXJuKGksIHYpIDwgMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGF0b21pY19hZGQoaW50IGksIGF0b21pY190ICp2KQoreworCWF0b21pY19hZGRfcmV0dXJuKGksIHYpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX3N1YihpbnQgaSwgYXRvbWljX3QgKnYpCit7CisJYXRvbWljX3N1Yl9yZXR1cm4oaSwgdik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfaW5jKGF0b21pY190ICp2KQoreworCWF0b21pY19hZGRfcmV0dXJuKDEsIHYpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX2RlYyhhdG9taWNfdCAqdikKK3sKKwlhdG9taWNfc3ViX3JldHVybigxLCB2KTsKK30KKworI2RlZmluZSBhdG9taWNfZGVjX3JldHVybih2KQkJYXRvbWljX3N1Yl9yZXR1cm4oMSwgKHYpKQorI2RlZmluZSBhdG9taWNfaW5jX3JldHVybih2KQkJYXRvbWljX2FkZF9yZXR1cm4oMSwgKHYpKQorCisjZGVmaW5lIGF0b21pY19zdWJfYW5kX3Rlc3QoaSx2KQkoYXRvbWljX3N1Yl9yZXR1cm4oKGkpLCAodikpID09IDApCisjZGVmaW5lIGF0b21pY19kZWNfYW5kX3Rlc3QodikJCShhdG9taWNfc3ViX3JldHVybigxLCAodikpID09IDApCisjZGVmaW5lIGF0b21pY19pbmNfYW5kX3Rlc3QodikJCShhdG9taWNfYWRkX3JldHVybigxLCAodikpID09IDApCisKKyNpZm5kZWYgQ09ORklHX0ZSVl9PVVRPRkxJTkVfQVRPTUlDX09QUworc3RhdGljIGlubGluZQordW5zaWduZWQgbG9uZyBhdG9taWNfdGVzdF9hbmRfQU5ETk9UX21hc2sodW5zaWduZWQgbG9uZyBtYXNrLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICp2KQoreworCXVuc2lnbmVkIGxvbmcgb2xkLCB0bXA7CisKKwlhc20gdm9sYXRpbGUoCisJCSIwOgkJCQkJCVxuIgorCQkiCW9yY2MJCWdyMCxncjAsZ3IwLGljYzMJXG4iCS8qIHNldCBJQ0MzLlogKi8KKwkJIglja2VxCQlpY2MzLGNjNwkJXG4iCisJCSIJbGQucAkJJU0wLCUxCQkJXG4iCS8qIExELlAvT1JDUiBhcmUgYXRvbWljICovCisJCSIJb3JjcgkJY2M3LGNjNyxjYzMJCVxuIgkvKiBzZXQgQ0MzIHRvIHRydWUgKi8KKwkJIglhbmQlSTMJCSUxLCUzLCUyCQlcbiIKKwkJIgljc3QucAkJJTIsJU0wCQksY2MzLCMxCVxuIgkvKiBpZiBzdG9yZSBoYXBwZW5zLi4uICovCisJCSIJY29yY2MJCWdyMjksZ3IyOSxncjAJLGNjMywjMQlcbiIJLyogLi4uIGNsZWFyIElDQzMuWiAqLworCQkiCWJlcQkJaWNjMywjMCwwYgkJXG4iCisJCTogIitVIigqdiksICI9JnIiKG9sZCksICI9ciIodG1wKQorCQk6ICJOUHIiKH5tYXNrKQorCQk6ICJtZW1vcnkiLCAiY2M3IiwgImNjMyIsICJpY2MzIgorCQkpOworCisJcmV0dXJuIG9sZDsKK30KKworc3RhdGljIGlubGluZQordW5zaWduZWQgbG9uZyBhdG9taWNfdGVzdF9hbmRfT1JfbWFzayh1bnNpZ25lZCBsb25nIG1hc2ssIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKnYpCit7CisJdW5zaWduZWQgbG9uZyBvbGQsIHRtcDsKKworCWFzbSB2b2xhdGlsZSgKKwkJIjA6CQkJCQkJXG4iCisJCSIJb3JjYwkJZ3IwLGdyMCxncjAsaWNjMwlcbiIJLyogc2V0IElDQzMuWiAqLworCQkiCWNrZXEJCWljYzMsY2M3CQlcbiIKKwkJIglsZC5wCQklTTAsJTEJCQlcbiIJLyogTEQuUC9PUkNSIGFyZSBhdG9taWMgKi8KKwkJIglvcmNyCQljYzcsY2M3LGNjMwkJXG4iCS8qIHNldCBDQzMgdG8gdHJ1ZSAqLworCQkiCW9yJUkzCQklMSwlMywlMgkJXG4iCisJCSIJY3N0LnAJCSUyLCVNMAkJLGNjMywjMQlcbiIJLyogaWYgc3RvcmUgaGFwcGVucy4uLiAqLworCQkiCWNvcmNjCQlncjI5LGdyMjksZ3IwCSxjYzMsIzEJXG4iCS8qIC4uLiBjbGVhciBJQ0MzLlogKi8KKwkJIgliZXEJCWljYzMsIzAsMGIJCVxuIgorCQk6ICIrVSIoKnYpLCAiPSZyIihvbGQpLCAiPXIiKHRtcCkKKwkJOiAiTlByIihtYXNrKQorCQk6ICJtZW1vcnkiLCAiY2M3IiwgImNjMyIsICJpY2MzIgorCQkpOworCisJcmV0dXJuIG9sZDsKK30KKworc3RhdGljIGlubGluZQordW5zaWduZWQgbG9uZyBhdG9taWNfdGVzdF9hbmRfWE9SX21hc2sodW5zaWduZWQgbG9uZyBtYXNrLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICp2KQoreworCXVuc2lnbmVkIGxvbmcgb2xkLCB0bXA7CisKKwlhc20gdm9sYXRpbGUoCisJCSIwOgkJCQkJCVxuIgorCQkiCW9yY2MJCWdyMCxncjAsZ3IwLGljYzMJXG4iCS8qIHNldCBJQ0MzLlogKi8KKwkJIglja2VxCQlpY2MzLGNjNwkJXG4iCisJCSIJbGQucAkJJU0wLCUxCQkJXG4iCS8qIExELlAvT1JDUiBhcmUgYXRvbWljICovCisJCSIJb3JjcgkJY2M3LGNjNyxjYzMJCVxuIgkvKiBzZXQgQ0MzIHRvIHRydWUgKi8KKwkJIgl4b3IlSTMJCSUxLCUzLCUyCQlcbiIKKwkJIgljc3QucAkJJTIsJU0wCQksY2MzLCMxCVxuIgkvKiBpZiBzdG9yZSBoYXBwZW5zLi4uICovCisJCSIJY29yY2MJCWdyMjksZ3IyOSxncjAJLGNjMywjMQlcbiIJLyogLi4uIGNsZWFyIElDQzMuWiAqLworCQkiCWJlcQkJaWNjMywjMCwwYgkJXG4iCisJCTogIitVIigqdiksICI9JnIiKG9sZCksICI9ciIodG1wKQorCQk6ICJOUHIiKG1hc2spCisJCTogIm1lbW9yeSIsICJjYzciLCAiY2MzIiwgImljYzMiCisJCSk7CisKKwlyZXR1cm4gb2xkOworfQorCisjZWxzZQorCitleHRlcm4gdW5zaWduZWQgbG9uZyBhdG9taWNfdGVzdF9hbmRfQU5ETk9UX21hc2sodW5zaWduZWQgbG9uZyBtYXNrLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICp2KTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGF0b21pY190ZXN0X2FuZF9PUl9tYXNrKHVuc2lnbmVkIGxvbmcgbWFzaywgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqdik7CitleHRlcm4gdW5zaWduZWQgbG9uZyBhdG9taWNfdGVzdF9hbmRfWE9SX21hc2sodW5zaWduZWQgbG9uZyBtYXNrLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICp2KTsKKworI2VuZGlmCisKKyNkZWZpbmUgYXRvbWljX2NsZWFyX21hc2sobWFzaywgdikJYXRvbWljX3Rlc3RfYW5kX0FORE5PVF9tYXNrKChtYXNrKSwgKHYpKQorI2RlZmluZSBhdG9taWNfc2V0X21hc2sobWFzaywgdikJYXRvbWljX3Rlc3RfYW5kX09SX21hc2soKG1hc2spLCAodikpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBleGNoYW5nZSB2YWx1ZSB3aXRoIG1lbW9yeQorICovCisjaWZuZGVmIENPTkZJR19GUlZfT1VUT0ZMSU5FX0FUT01JQ19PUFMKKworI2RlZmluZSB4Y2hnKHB0ciwgeCkJCQkJCQkJCVwKKyh7CQkJCQkJCQkJCVwKKwlfX3R5cGVvZl9fKHB0cikgX194Z19wdHIgPSAocHRyKTsJCQkJCVwKKwlfX3R5cGVvZl9fKCoocHRyKSkgX194Z19vcmlnOwkJCQkJCVwKKwkJCQkJCQkJCQlcCisJc3dpdGNoIChzaXplb2YoX194Z19vcmlnKSkgewkJCQkJCVwKKwljYXNlIDE6CQkJCQkJCQkJXAorCQlhc20gdm9sYXRpbGUoCQkJCQkJCVwKKwkJCSIwOgkJCQkJCVxuIglcCisJCQkiCW9yY2MJCWdyMCxncjAsZ3IwLGljYzMJXG4iCVwKKwkJCSIJY2tlcQkJaWNjMyxjYzcJCVxuIglcCisJCQkiCWxkdWIucAkJJU0wLCUxCQkJXG4iCVwKKwkJCSIJb3JjcgkJY2M3LGNjNyxjYzMJCVxuIglcCisJCQkiCWNzdGIucAkJJTIsJU0wCQksY2MzLCMxCVxuIglcCisJCQkiCWNvcmNjCQlncjI5LGdyMjksZ3IwCSxjYzMsIzEJXG4iCVwKKwkJCSIJYmVxCQlpY2MzLCMwLDBiCQlcbiIJXAorCQkJOiAiK1UiKCpfX3hnX3B0ciksICI9JnIiKF9feGdfb3JpZykJCQlcCisJCQk6ICJyIih4KQkJCQkJCVwKKwkJCTogIm1lbW9yeSIsICJjYzciLCAiY2MzIiwgImljYzMiCQkJXAorCQkJKTsJCQkJCQkJXAorCQlicmVhazsJCQkJCQkJCVwKKwkJCQkJCQkJCQlcCisJY2FzZSAyOgkJCQkJCQkJCVwKKwkJYXNtIHZvbGF0aWxlKAkJCQkJCQlcCisJCQkiMDoJCQkJCQlcbiIJXAorCQkJIglvcmNjCQlncjAsZ3IwLGdyMCxpY2MzCVxuIglcCisJCQkiCWNrZXEJCWljYzMsY2M3CQlcbiIJXAorCQkJIglsZHVoLnAJCSVNMCwlMQkJCVxuIglcCisJCQkiCW9yY3IJCWNjNyxjYzcsY2MzCQlcbiIJXAorCQkJIgljc3RoLnAJCSUyLCVNMAkJLGNjMywjMQlcbiIJXAorCQkJIgljb3JjYwkJZ3IyOSxncjI5LGdyMAksY2MzLCMxCVxuIglcCisJCQkiCWJlcQkJaWNjMywjMCwwYgkJXG4iCVwKKwkJCTogIitVIigqX194Z19wdHIpLCAiPSZyIihfX3hnX29yaWcpCQkJXAorCQkJOiAiciIoeCkJCQkJCQlcCisJCQk6ICJtZW1vcnkiLCAiY2M3IiwgImNjMyIsICJpY2MzIgkJCVwKKwkJCSk7CQkJCQkJCVwKKwkJYnJlYWs7CQkJCQkJCQlcCisJCQkJCQkJCQkJXAorCWNhc2UgNDoJCQkJCQkJCQlcCisJCWFzbSB2b2xhdGlsZSgJCQkJCQkJXAorCQkJIjA6CQkJCQkJXG4iCVwKKwkJCSIJb3JjYwkJZ3IwLGdyMCxncjAsaWNjMwlcbiIJXAorCQkJIglja2VxCQlpY2MzLGNjNwkJXG4iCVwKKwkJCSIJbGQucAkJJU0wLCUxCQkJXG4iCVwKKwkJCSIJb3JjcgkJY2M3LGNjNyxjYzMJCVxuIglcCisJCQkiCWNzdC5wCQklMiwlTTAJCSxjYzMsIzEJXG4iCVwKKwkJCSIJY29yY2MJCWdyMjksZ3IyOSxncjAJLGNjMywjMQlcbiIJXAorCQkJIgliZXEJCWljYzMsIzAsMGIJCVxuIglcCisJCQk6ICIrVSIoKl9feGdfcHRyKSwgIj0mciIoX194Z19vcmlnKQkJCVwKKwkJCTogInIiKHgpCQkJCQkJXAorCQkJOiAibWVtb3J5IiwgImNjNyIsICJjYzMiLCAiaWNjMyIJCQlcCisJCQkpOwkJCQkJCQlcCisJCWJyZWFrOwkJCQkJCQkJXAorCQkJCQkJCQkJCVwKKwlkZWZhdWx0OgkJCQkJCQkJXAorCQlfX3hnX29yaWcgPSAwOwkJCQkJCQlcCisJCWFzbSB2b2xhdGlsZSgiYnJlYWsiKTsJCQkJCQlcCisJCWJyZWFrOwkJCQkJCQkJXAorCX0JCQkJCQkJCQlcCisJCQkJCQkJCQkJXAorCV9feGdfb3JpZzsJCQkJCQkJCVwKK30pCisKKyNlbHNlCisKK2V4dGVybiB1aW50OF90ICBfX3hjaGdfOCAodWludDhfdCBpLCAgdm9sYXRpbGUgdm9pZCAqdik7CitleHRlcm4gdWludDE2X3QgX194Y2hnXzE2KHVpbnQxNl90IGksIHZvbGF0aWxlIHZvaWQgKnYpOworZXh0ZXJuIHVpbnQzMl90IF9feGNoZ18zMih1aW50MzJfdCBpLCB2b2xhdGlsZSB2b2lkICp2KTsKKworI2RlZmluZSB4Y2hnKHB0ciwgeCkJCQkJCQkJCQkJXAorKHsJCQkJCQkJCQkJCQlcCisJX190eXBlb2ZfXyhwdHIpIF9feGdfcHRyID0gKHB0cik7CQkJCQkJCVwKKwlfX3R5cGVvZl9fKCoocHRyKSkgX194Z19vcmlnOwkJCQkJCQkJXAorCQkJCQkJCQkJCQkJXAorCXN3aXRjaCAoc2l6ZW9mKF9feGdfb3JpZykpIHsJCQkJCQkJCVwKKwljYXNlIDE6IF9feGdfb3JpZyA9IChfX3R5cGVvZl9fKCoocHRyKSkpIF9feGNoZ184ICgodWludDhfdCkgIHgsIF9feGdfcHRyKTsJYnJlYWs7CVwKKwljYXNlIDI6IF9feGdfb3JpZyA9IChfX3R5cGVvZl9fKCoocHRyKSkpIF9feGNoZ18xNigodWludDE2X3QpIHgsIF9feGdfcHRyKTsJYnJlYWs7CVwKKwljYXNlIDQ6IF9feGdfb3JpZyA9IChfX3R5cGVvZl9fKCoocHRyKSkpIF9feGNoZ18zMigodWludDMyX3QpIHgsIF9feGdfcHRyKTsJYnJlYWs7CVwKKwlkZWZhdWx0OgkJCQkJCQkJCQlcCisJCV9feGdfb3JpZyA9IDA7CQkJCQkJCQkJXAorCQlhc20gdm9sYXRpbGUoImJyZWFrIik7CQkJCQkJCQlcCisJCWJyZWFrOwkJCQkJCQkJCQlcCisJfQkJCQkJCQkJCQkJXAorCV9feGdfb3JpZzsJCQkJCQkJCQkJXAorfSkKKworI2VuZGlmCisKKyNkZWZpbmUgdGFzKHB0cikgKHhjaGcoKHB0ciksIDEpKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogY29tcGFyZSBhbmQgY29uZGl0aW9uYWxseSBleGNoYW5nZSB2YWx1ZSB3aXRoIG1lbW9yeQorICogLSBpZiAoKnB0ciA9PSB0ZXN0KSB0aGVuIG9yaWcgPSAqcHRyOyAqcHRyID0gdGVzdDsKKyAqIC0gaWYgKCpwdHIgIT0gdGVzdCkgdGhlbiBvcmlnID0gKnB0cjsKKyAqLworI2lmbmRlZiBDT05GSUdfRlJWX09VVE9GTElORV9BVE9NSUNfT1BTCisKKyNkZWZpbmUgY21weGNoZyhwdHIsIHRlc3QsIG5ldykJCQkJCQkJXAorKHsJCQkJCQkJCQkJXAorCV9fdHlwZW9mX18ocHRyKSBfX3hnX3B0ciA9IChwdHIpOwkJCQkJXAorCV9fdHlwZW9mX18oKihwdHIpKSBfX3hnX29yaWcsIF9feGdfdG1wOwkJCQkJXAorCV9fdHlwZW9mX18oKihwdHIpKSBfX3hnX3Rlc3QgPSAodGVzdCk7CQkJCQlcCisJX190eXBlb2ZfXygqKHB0cikpIF9feGdfbmV3ID0gKG5ldyk7CQkJCQlcCisJCQkJCQkJCQkJXAorCXN3aXRjaCAoc2l6ZW9mKF9feGdfb3JpZykpIHsJCQkJCQlcCisJY2FzZSAxOgkJCQkJCQkJCVwKKwkJYXNtIHZvbGF0aWxlKAkJCQkJCQlcCisJCQkiMDoJCQkJCQlcbiIJXAorCQkJIglvcmNjCQlncjAsZ3IwLGdyMCxpY2MzCVxuIglcCisJCQkiCWNrZXEJCWljYzMsY2M3CQlcbiIJXAorCQkJIglsZHViLnAJCSVNMCwlMQkJCVxuIglcCisJCQkiCW9yY3IJCWNjNyxjYzcsY2MzCQlcbiIJXAorCQkJIglzdWIlSTQJCSUxLCU0LCUyCQlcbiIJXAorCQkJIglzbGxjYwkJJTIsIzI0LGdyMCxpY2MwCQlcbiIJXAorCQkJIglibmUJCWljYzAsIzAsMWYJCVxuIglcCisJCQkiCWNzdGIucAkJJTMsJU0wCQksY2MzLCMxCVxuIglcCisJCQkiCWNvcmNjCQlncjI5LGdyMjksZ3IwCSxjYzMsIzEJXG4iCVwKKwkJCSIJYmVxCQlpY2MzLCMwLDBiCQlcbiIJXAorCQkJIjE6CQkJCQkJXG4iCVwKKwkJCTogIitVIigqX194Z19wdHIpLCAiPSZyIihfX3hnX29yaWcpLCAiPSZyIihfX3hnX3RtcCkJXAorCQkJOiAiciIoX194Z19uZXcpLCAiTlByIihfX3hnX3Rlc3QpCQkJXAorCQkJOiAibWVtb3J5IiwgImNjNyIsICJjYzMiLCAiaWNjMyIsICJpY2MwIgkJXAorCQkJKTsJCQkJCQkJXAorCQlicmVhazsJCQkJCQkJCVwKKwkJCQkJCQkJCQlcCisJY2FzZSAyOgkJCQkJCQkJCVwKKwkJYXNtIHZvbGF0aWxlKAkJCQkJCQlcCisJCQkiMDoJCQkJCQlcbiIJXAorCQkJIglvcmNjCQlncjAsZ3IwLGdyMCxpY2MzCVxuIglcCisJCQkiCWNrZXEJCWljYzMsY2M3CQlcbiIJXAorCQkJIglsZHVoLnAJCSVNMCwlMQkJCVxuIglcCisJCQkiCW9yY3IJCWNjNyxjYzcsY2MzCQlcbiIJXAorCQkJIglzdWIlSTQJCSUxLCU0LCUyCQlcbiIJXAorCQkJIglzbGxjYwkJJTIsIzE2LGdyMCxpY2MwCQlcbiIJXAorCQkJIglibmUJCWljYzAsIzAsMWYJCVxuIglcCisJCQkiCWNzdGgucAkJJTMsJU0wCQksY2MzLCMxCVxuIglcCisJCQkiCWNvcmNjCQlncjI5LGdyMjksZ3IwCSxjYzMsIzEJXG4iCVwKKwkJCSIJYmVxCQlpY2MzLCMwLDBiCQlcbiIJXAorCQkJIjE6CQkJCQkJXG4iCVwKKwkJCTogIitVIigqX194Z19wdHIpLCAiPSZyIihfX3hnX29yaWcpLCAiPSZyIihfX3hnX3RtcCkJXAorCQkJOiAiciIoX194Z19uZXcpLCAiTlByIihfX3hnX3Rlc3QpCQkJXAorCQkJOiAibWVtb3J5IiwgImNjNyIsICJjYzMiLCAiaWNjMyIsICJpY2MwIgkJXAorCQkJKTsJCQkJCQkJXAorCQlicmVhazsJCQkJCQkJCVwKKwkJCQkJCQkJCQlcCisJY2FzZSA0OgkJCQkJCQkJCVwKKwkJYXNtIHZvbGF0aWxlKAkJCQkJCQlcCisJCQkiMDoJCQkJCQlcbiIJXAorCQkJIglvcmNjCQlncjAsZ3IwLGdyMCxpY2MzCVxuIglcCisJCQkiCWNrZXEJCWljYzMsY2M3CQlcbiIJXAorCQkJIglsZC5wCQklTTAsJTEJCQlcbiIJXAorCQkJIglvcmNyCQljYzcsY2M3LGNjMwkJXG4iCVwKKwkJCSIJc3ViJUk0Y2MJJTEsJTQsJTIsaWNjMAkJXG4iCVwKKwkJCSIJYm5lCQlpY2MwLCMwLDFmCQlcbiIJXAorCQkJIgljc3QucAkJJTMsJU0wCQksY2MzLCMxCVxuIglcCisJCQkiCWNvcmNjCQlncjI5LGdyMjksZ3IwCSxjYzMsIzEJXG4iCVwKKwkJCSIJYmVxCQlpY2MzLCMwLDBiCQlcbiIJXAorCQkJIjE6CQkJCQkJXG4iCVwKKwkJCTogIitVIigqX194Z19wdHIpLCAiPSZyIihfX3hnX29yaWcpLCAiPSZyIihfX3hnX3RtcCkJXAorCQkJOiAiciIoX194Z19uZXcpLCAiTlByIihfX3hnX3Rlc3QpCQkJXAorCQkJOiAibWVtb3J5IiwgImNjNyIsICJjYzMiLCAiaWNjMyIsICJpY2MwIgkJXAorCQkJKTsJCQkJCQkJXAorCQlicmVhazsJCQkJCQkJCVwKKwkJCQkJCQkJCQlcCisJZGVmYXVsdDoJCQkJCQkJCVwKKwkJX194Z19vcmlnID0gMDsJCQkJCQkJXAorCQlhc20gdm9sYXRpbGUoImJyZWFrIik7CQkJCQkJXAorCQlicmVhazsJCQkJCQkJCVwKKwl9CQkJCQkJCQkJXAorCQkJCQkJCQkJCVwKKwlfX3hnX29yaWc7CQkJCQkJCQlcCit9KQorCisjZWxzZQorCitleHRlcm4gdWludDhfdCAgX19jbXB4Y2hnXzggKHVpbnQ4X3QgKnYsICB1aW50OF90IHRlc3QsICB1aW50OF90IG5ldyk7CitleHRlcm4gdWludDE2X3QgX19jbXB4Y2hnXzE2KHVpbnQxNl90ICp2LCB1aW50MTZfdCB0ZXN0LCB1aW50MTZfdCBuZXcpOworZXh0ZXJuIHVpbnQzMl90IF9fY21weGNoZ18zMih1aW50MzJfdCAqdiwgdWludDMyX3QgdGVzdCwgdWludDMyX3QgbmV3KTsKKworI2RlZmluZSBjbXB4Y2hnKHB0ciwgdGVzdCwgbmV3KQkJCQkJCQlcCisoewkJCQkJCQkJCQlcCisJX190eXBlb2ZfXyhwdHIpIF9feGdfcHRyID0gKHB0cik7CQkJCQlcCisJX190eXBlb2ZfXygqKHB0cikpIF9feGdfb3JpZzsJCQkJCQlcCisJX190eXBlb2ZfXygqKHB0cikpIF9feGdfdGVzdCA9ICh0ZXN0KTsJCQkJCVwKKwlfX3R5cGVvZl9fKCoocHRyKSkgX194Z19uZXcgPSAobmV3KTsJCQkJCVwKKwkJCQkJCQkJCQlcCisJc3dpdGNoIChzaXplb2YoX194Z19vcmlnKSkgewkJCQkJCVwKKwljYXNlIDE6IF9feGdfb3JpZyA9IF9fY21weGNoZ184IChfX3hnX3B0ciwgX194Z190ZXN0LCBfX3hnX25ldyk7IGJyZWFrOwlcCisJY2FzZSAyOiBfX3hnX29yaWcgPSBfX2NtcHhjaGdfMTYoX194Z19wdHIsIF9feGdfdGVzdCwgX194Z19uZXcpOyBicmVhazsJXAorCWNhc2UgNDogX194Z19vcmlnID0gX19jbXB4Y2hnXzMyKF9feGdfcHRyLCBfX3hnX3Rlc3QsIF9feGdfbmV3KTsgYnJlYWs7CVwKKwlkZWZhdWx0OgkJCQkJCQkJXAorCQlfX3hnX29yaWcgPSAwOwkJCQkJCQlcCisJCWFzbSB2b2xhdGlsZSgiYnJlYWsiKTsJCQkJCQlcCisJCWJyZWFrOwkJCQkJCQkJXAorCX0JCQkJCQkJCQlcCisJCQkJCQkJCQkJXAorCV9feGdfb3JpZzsJCQkJCQkJCVwKK30pCisKKyNlbmRpZgorCisjZW5kaWYgLyogX0FTTV9BVE9NSUNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L2F4ODg3OTYuaCBiL2luY2x1ZGUvYXNtLWZydi9heDg4Nzk2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM3ZTk4MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWZydi9heDg4Nzk2LmgKQEAgLTAsMCArMSwyMiBAQAorLyogYXg4ODc5Ni5oOiBhY2Nlc3MgcG9pbnRzIHRvIHRoZSBkcml2ZXIgZm9yIHRoZSBBWDg4Nzk2IE5FMjAwMCBjbG9uZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9BU01fQVg4ODc5Nl9ICisjZGVmaW5lIF9BU01fQVg4ODc5Nl9ICisKKyNpbmNsdWRlIDxhc20vbWItcmVncy5oPgorCisjZGVmaW5lIEFYODg3OTZfSU9BRERSCQkoX19yZWdpb25fQ1MxICsgMHgyMDApCisjZGVmaW5lIEFYODg3OTZfSVJRCQlJUlFfQ1BVX0VYVEVSTkFMNworI2RlZmluZSBBWDg4Nzk2X0ZVTExfRFVQTEVYCTAJCQkvKiBmb3JjZSBmdWxsIGR1cGxleCAqLworI2RlZmluZSBBWDg4Nzk2X0JVU19JTkZPCSJDUzEjKzB4MjAwIgkJLyogYnVzIGluZm8gZm9yIGV0aHRvb2wgKi8KKworI2VuZGlmIC8qIF9BU01fQVg4ODc5Nl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvYml0b3BzLmggYi9pbmNsdWRlL2FzbS1mcnYvYml0b3BzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY2NGJkNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWZydi9iaXRvcHMuaApAQCAtMCwwICsxLDM0MSBAQAorLyogYml0b3BzLmg6IGJpdCBvcGVyYXRpb25zIGZvciB0aGUgRnVqaXRzdSBGUi1WIENQVXMKKyAqCisgKiBGb3IgYW4gZXhwbGFuYXRpb24gb2YgaG93IGF0b21pYyBvcHMgd29yayBpbiB0aGlzIGFyY2gsIHNlZToKKyAqICAgRG9jdW1lbnRhdGlvbi9mdWppdHN1L2Zydi9hdG9taWMtb3BzLnR4dAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2lmbmRlZiBfQVNNX0JJVE9QU19ICisjZGVmaW5lIF9BU01fQklUT1BTX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKy8qCisgKiBmZnogPSBGaW5kIEZpcnN0IFplcm8gaW4gd29yZC4gVW5kZWZpbmVkIGlmIG5vIHplcm8gZXhpc3RzLAorICogc28gY29kZSBzaG91bGQgY2hlY2sgYWdhaW5zdCB+MFVMIGZpcnN0Li4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGZmeih1bnNpZ25lZCBsb25nIHdvcmQpCit7CisJdW5zaWduZWQgbG9uZyByZXN1bHQgPSAwOworCisJd2hpbGUgKHdvcmQgJiAxKSB7CisJCXJlc3VsdCsrOworCQl3b3JkID4+PSAxOworCX0KKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogY2xlYXJfYml0KCkgZG9lc24ndCBwcm92aWRlIGFueSBiYXJyaWVyIGZvciB0aGUgY29tcGlsZXIuCisgKi8KKyNkZWZpbmUgc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCkJYmFycmllcigpCisjZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCkJYmFycmllcigpCisKK3N0YXRpYyBpbmxpbmUgaW50IHRlc3RfYW5kX2NsZWFyX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKmFkZHIpCit7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqcHRyID0gYWRkcjsKKwl1bnNpZ25lZCBsb25nIG1hc2sgPSAxVUwgPDwgKG5yICYgMzEpOworCXB0ciArPSBuciA+PiA1OworCXJldHVybiAoYXRvbWljX3Rlc3RfYW5kX0FORE5PVF9tYXNrKG1hc2ssIHB0cikgJiBtYXNrKSAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIGludCB0ZXN0X2FuZF9zZXRfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqYWRkcikKK3sKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nICpwdHIgPSBhZGRyOworCXVuc2lnbmVkIGxvbmcgbWFzayA9IDFVTCA8PCAobnIgJiAzMSk7CisJcHRyICs9IG5yID4+IDU7CisJcmV0dXJuIChhdG9taWNfdGVzdF9hbmRfT1JfbWFzayhtYXNrLCBwdHIpICYgbWFzaykgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgdGVzdF9hbmRfY2hhbmdlX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKmFkZHIpCit7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqcHRyID0gYWRkcjsKKwl1bnNpZ25lZCBsb25nIG1hc2sgPSAxVUwgPDwgKG5yICYgMzEpOworCXB0ciArPSBuciA+PiA1OworCXJldHVybiAoYXRvbWljX3Rlc3RfYW5kX1hPUl9tYXNrKG1hc2ssIHB0cikgJiBtYXNrKSAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqYWRkcikKK3sKKwl0ZXN0X2FuZF9jbGVhcl9iaXQobnIsIGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKmFkZHIpCit7CisJdGVzdF9hbmRfc2V0X2JpdChuciwgYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGFuZ2VfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCit7CisJdGVzdF9hbmRfY2hhbmdlX2JpdChuciwgYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2NsZWFyX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQoreworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmEgPSBhZGRyOworCWludCBtYXNrOworCisJYSArPSBuciA+PiA1OworCW1hc2sgPSAxIDw8IChuciAmIDMxKTsKKwkqYSAmPSB+bWFzazsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fc2V0X2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQoreworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmEgPSBhZGRyOworCWludCBtYXNrOworCisJYSArPSBuciA+PiA1OworCW1hc2sgPSAxIDw8IChuciAmIDMxKTsKKwkqYSB8PSBtYXNrOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19jaGFuZ2VfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqYWRkcikKK3sKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphID0gYWRkcjsKKwlpbnQgbWFzazsKKworCWEgKz0gbnIgPj4gNTsKKwltYXNrID0gMSA8PCAobnIgJiAzMSk7CisJKmEgXj0gbWFzazsKK30KKworc3RhdGljIGlubGluZSBpbnQgX190ZXN0X2FuZF9jbGVhcl9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKK3sKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphID0gYWRkcjsKKwlpbnQgbWFzaywgcmV0dmFsOworCisJYSArPSBuciA+PiA1OworCW1hc2sgPSAxIDw8IChuciAmIDMxKTsKKwlyZXR2YWwgPSAobWFzayAmICphKSAhPSAwOworCSphICY9IH5tYXNrOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fdGVzdF9hbmRfc2V0X2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQoreworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmEgPSBhZGRyOworCWludCBtYXNrLCByZXR2YWw7CisKKwlhICs9IG5yID4+IDU7CisJbWFzayA9IDEgPDwgKG5yICYgMzEpOworCXJldHZhbCA9IChtYXNrICYgKmEpICE9IDA7CisJKmEgfD0gbWFzazsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW5saW5lIGludCBfX3Rlc3RfYW5kX2NoYW5nZV9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKK3sKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphID0gYWRkcjsKKwlpbnQgbWFzaywgcmV0dmFsOworCisJYSArPSBuciA+PiA1OworCW1hc2sgPSAxIDw8IChuciAmIDMxKTsKKwlyZXR2YWwgPSAobWFzayAmICphKSAhPSAwOworCSphIF49IG1hc2s7CisJcmV0dXJuIHJldHZhbDsKK30KKworLyoKKyAqIFRoaXMgcm91dGluZSBkb2Vzbid0IG5lZWQgdG8gYmUgYXRvbWljLgorICovCitzdGF0aWMgaW5saW5lIGludCBfX2NvbnN0YW50X3Rlc3RfYml0KGludCBuciwgY29uc3Qgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCit7CisJcmV0dXJuICgoMVVMIDw8IChuciAmIDMxKSkgJiAoKChjb25zdCB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgYWRkcilbbnIgPj4gNV0pKSAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBfX3Rlc3RfYml0KGludCBuciwgY29uc3Qgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCit7CisJaW50IAkqIGEgPSAoaW50ICopIGFkZHI7CisJaW50CW1hc2s7CisKKwlhICs9IG5yID4+IDU7CisJbWFzayA9IDEgPDwgKG5yICYgMHgxZik7CisJcmV0dXJuICgobWFzayAmICphKSAhPSAwKTsKK30KKworI2RlZmluZSB0ZXN0X2JpdChucixhZGRyKSBcCisoX19idWlsdGluX2NvbnN0YW50X3AobnIpID8gXAorIF9fY29uc3RhbnRfdGVzdF9iaXQoKG5yKSwoYWRkcikpIDogXAorIF9fdGVzdF9iaXQoKG5yKSwoYWRkcikpKQorCitleHRlcm4gaW50IGZpbmRfbmV4dF9iaXQoY29uc3QgdW5zaWduZWQgbG9uZyAqYWRkciwgaW50IHNpemUsIGludCBvZmZzZXQpOworCisjZGVmaW5lIGZpbmRfZmlyc3RfYml0KGFkZHIsIHNpemUpIGZpbmRfbmV4dF9iaXQoYWRkciwgc2l6ZSwgMCkKKworI2RlZmluZSBmaW5kX2ZpcnN0X3plcm9fYml0KGFkZHIsIHNpemUpIFwKKyAgICAgICAgZmluZF9uZXh0X3plcm9fYml0KChhZGRyKSwgKHNpemUpLCAwKQorCitzdGF0aWMgaW5saW5lIGludCBmaW5kX25leHRfemVyb19iaXQoY29uc3Qgdm9pZCAqYWRkciwgaW50IHNpemUsIGludCBvZmZzZXQpCit7CisJY29uc3QgdW5zaWduZWQgbG9uZyAqcCA9ICgoY29uc3QgdW5zaWduZWQgbG9uZyAqKSBhZGRyKSArIChvZmZzZXQgPj4gNSk7CisJdW5zaWduZWQgbG9uZyByZXN1bHQgPSBvZmZzZXQgJiB+MzFVTDsKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCWlmIChvZmZzZXQgPj0gc2l6ZSkKKwkJcmV0dXJuIHNpemU7CisJc2l6ZSAtPSByZXN1bHQ7CisJb2Zmc2V0ICY9IDMxVUw7CisJaWYgKG9mZnNldCkgeworCQl0bXAgPSAqKHArKyk7CisJCXRtcCB8PSB+MFVMID4+ICgzMi1vZmZzZXQpOworCQlpZiAoc2l6ZSA8IDMyKQorCQkJZ290byBmb3VuZF9maXJzdDsKKwkJaWYgKH50bXApCisJCQlnb3RvIGZvdW5kX21pZGRsZTsKKwkJc2l6ZSAtPSAzMjsKKwkJcmVzdWx0ICs9IDMyOworCX0KKwl3aGlsZSAoc2l6ZSAmIH4zMVVMKSB7CisJCWlmICh+KHRtcCA9ICoocCsrKSkpCisJCQlnb3RvIGZvdW5kX21pZGRsZTsKKwkJcmVzdWx0ICs9IDMyOworCQlzaXplIC09IDMyOworCX0KKwlpZiAoIXNpemUpCisJCXJldHVybiByZXN1bHQ7CisJdG1wID0gKnA7CisKK2ZvdW5kX2ZpcnN0OgorCXRtcCB8PSB+MFVMID4+IHNpemU7Citmb3VuZF9taWRkbGU6CisJcmV0dXJuIHJlc3VsdCArIGZmeih0bXApOworfQorCisjZGVmaW5lIGZmcyh4KSBnZW5lcmljX2Zmcyh4KQorI2RlZmluZSBfX2Zmcyh4KSAoZmZzKHgpIC0gMSkKKworLyoKKyAqIGZsczogZmluZCBsYXN0IGJpdCBzZXQuCisgKi8KKyNkZWZpbmUgZmxzKHgpCQkJCQkJXAorKHsJCQkJCQkJXAorCWludCBiaXQ7CQkJCQlcCisJCQkJCQkJXAorCWFzbSgic2NhbiAlMSxncjAsJTAiIDogIj1yIihiaXQpIDogInIiKHgpKTsJXAorCQkJCQkJCVwKKwliaXQgPyAzMyAtIGJpdCA6IGJpdDsJCQkJXAorfSkKKworLyoKKyAqIEV2ZXJ5IGFyY2hpdGVjdHVyZSBtdXN0IGRlZmluZSB0aGlzIGZ1bmN0aW9uLiBJdCdzIHRoZSBmYXN0ZXN0CisgKiB3YXkgb2Ygc2VhcmNoaW5nIGEgMTQwLWJpdCBiaXRtYXAgd2hlcmUgdGhlIGZpcnN0IDEwMCBiaXRzIGFyZQorICogdW5saWtlbHkgdG8gYmUgc2V0LiBJdCdzIGd1YXJhbnRlZWQgdGhhdCBhdCBsZWFzdCBvbmUgb2YgdGhlIDE0MAorICogYml0cyBpcyBjbGVhcmVkLgorICovCitzdGF0aWMgaW5saW5lIGludCBzY2hlZF9maW5kX2ZpcnN0X2JpdChjb25zdCB1bnNpZ25lZCBsb25nICpiKQoreworCWlmICh1bmxpa2VseShiWzBdKSkKKwkJcmV0dXJuIF9fZmZzKGJbMF0pOworCWlmICh1bmxpa2VseShiWzFdKSkKKwkJcmV0dXJuIF9fZmZzKGJbMV0pICsgMzI7CisJaWYgKHVubGlrZWx5KGJbMl0pKQorCQlyZXR1cm4gX19mZnMoYlsyXSkgKyA2NDsKKwlpZiAoYlszXSkKKwkJcmV0dXJuIF9fZmZzKGJbM10pICsgOTY7CisJcmV0dXJuIF9fZmZzKGJbNF0pICsgMTI4OworfQorCisKKy8qCisgKiBod2VpZ2h0TjogcmV0dXJucyB0aGUgaGFtbWluZyB3ZWlnaHQgKGkuZS4gdGhlIG51bWJlcgorICogb2YgYml0cyBzZXQpIG9mIGEgTi1iaXQgd29yZAorICovCisKKyNkZWZpbmUgaHdlaWdodDMyKHgpIGdlbmVyaWNfaHdlaWdodDMyKHgpCisjZGVmaW5lIGh3ZWlnaHQxNih4KSBnZW5lcmljX2h3ZWlnaHQxNih4KQorI2RlZmluZSBod2VpZ2h0OCh4KSBnZW5lcmljX2h3ZWlnaHQ4KHgpCisKKyNkZWZpbmUgZXh0Ml9zZXRfYml0KG5yLCBhZGRyKQkJdGVzdF9hbmRfc2V0X2JpdCAgKChucikgXiAweDE4LCAoYWRkcikpCisjZGVmaW5lIGV4dDJfY2xlYXJfYml0KG5yLCBhZGRyKQl0ZXN0X2FuZF9jbGVhcl9iaXQoKG5yKSBeIDB4MTgsIChhZGRyKSkKKworI2RlZmluZSBleHQyX3NldF9iaXRfYXRvbWljKGxvY2ssbnIsYWRkcikJZXh0Ml9zZXRfYml0KChuciksIGFkZHIpCisjZGVmaW5lIGV4dDJfY2xlYXJfYml0X2F0b21pYyhsb2NrLG5yLGFkZHIpCWV4dDJfY2xlYXJfYml0KChuciksIGFkZHIpCisKK3N0YXRpYyBpbmxpbmUgaW50IGV4dDJfdGVzdF9iaXQoaW50IG5yLCBjb25zdCB2b2xhdGlsZSB2b2lkICogYWRkcikKK3sKKwljb25zdCB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICpBRERSID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgYWRkcjsKKwlpbnQgbWFzazsKKworCUFERFIgKz0gbnIgPj4gMzsKKwltYXNrID0gMSA8PCAobnIgJiAweDA3KTsKKwlyZXR1cm4gKChtYXNrICYgKkFERFIpICE9IDApOworfQorCisjZGVmaW5lIGV4dDJfZmluZF9maXJzdF96ZXJvX2JpdChhZGRyLCBzaXplKSBcCisgICAgICAgIGV4dDJfZmluZF9uZXh0X3plcm9fYml0KChhZGRyKSwgKHNpemUpLCAwKQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZXh0Ml9maW5kX25leHRfemVyb19iaXQoY29uc3Qgdm9pZCAqYWRkciwKKwkJCQkJCSAgICB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkJCQkgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQpCit7CisJY29uc3QgdW5zaWduZWQgbG9uZyAqcCA9ICgoY29uc3QgdW5zaWduZWQgbG9uZyAqKSBhZGRyKSArIChvZmZzZXQgPj4gNSk7CisJdW5zaWduZWQgbG9uZyByZXN1bHQgPSBvZmZzZXQgJiB+MzFVTDsKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCWlmIChvZmZzZXQgPj0gc2l6ZSkKKwkJcmV0dXJuIHNpemU7CisJc2l6ZSAtPSByZXN1bHQ7CisJb2Zmc2V0ICY9IDMxVUw7CisJaWYob2Zmc2V0KSB7CisJCS8qIFdlIGhvbGQgdGhlIGxpdHRsZSBlbmRpYW4gdmFsdWUgaW4gdG1wLCBidXQgdGhlbiB0aGUKKwkJICogc2hpZnQgaXMgaWxsZWdhbC4gU28gd2UgY291bGQga2VlcCBhIGJpZyBlbmRpYW4gdmFsdWUKKwkJICogaW4gdG1wLCBsaWtlIHRoaXM6CisJCSAqCisJCSAqIHRtcCA9IF9fc3dhYjMyKCoocCsrKSk7CisJCSAqIHRtcCB8PSB+MFVMID4+ICgzMi1vZmZzZXQpOworCQkgKgorCQkgKiBidXQgdGhpcyB3b3VsZCBkZWNyZWFzZSBwcmVmb3JtYW5jZSwgc28gd2UgY2hhbmdlIHRoZQorCQkgKiBzaGlmdDoKKwkJICovCisJCXRtcCA9ICoocCsrKTsKKwkJdG1wIHw9IF9fc3dhYjMyKH4wVUwgPj4gKDMyLW9mZnNldCkpOworCQlpZihzaXplIDwgMzIpCisJCQlnb3RvIGZvdW5kX2ZpcnN0OworCQlpZih+dG1wKQorCQkJZ290byBmb3VuZF9taWRkbGU7CisJCXNpemUgLT0gMzI7CisJCXJlc3VsdCArPSAzMjsKKwl9CisJd2hpbGUoc2l6ZSAmIH4zMVVMKSB7CisJCWlmKH4odG1wID0gKihwKyspKSkKKwkJCWdvdG8gZm91bmRfbWlkZGxlOworCQlyZXN1bHQgKz0gMzI7CisJCXNpemUgLT0gMzI7CisJfQorCWlmKCFzaXplKQorCQlyZXR1cm4gcmVzdWx0OworCXRtcCA9ICpwOworCitmb3VuZF9maXJzdDoKKwkvKiB0bXAgaXMgbGl0dGxlIGVuZGlhbiwgc28gd2Ugd291bGQgaGF2ZSB0byBzd2FiIHRoZSBzaGlmdCwKKwkgKiBzZWUgYWJvdmUuIEJ1dCB0aGVuIHdlIGhhdmUgdG8gc3dhYiB0bXAgYmVsb3cgZm9yIGZmeiwgc28KKwkgKiB3ZSBtaWdodCBhcyB3ZWxsIGRvIHRoaXMgaGVyZS4KKwkgKi8KKwlyZXR1cm4gcmVzdWx0ICsgZmZ6KF9fc3dhYjMyKHRtcCkgfCAofjBVTCA8PCBzaXplKSk7Citmb3VuZF9taWRkbGU6CisJcmV0dXJuIHJlc3VsdCArIGZmeihfX3N3YWIzMih0bXApKTsKK30KKworLyogQml0bWFwIGZ1bmN0aW9ucyBmb3IgdGhlIG1pbml4IGZpbGVzeXN0ZW0uICAqLworI2RlZmluZSBtaW5peF90ZXN0X2FuZF9zZXRfYml0KG5yLGFkZHIpCQlleHQyX3NldF9iaXQobnIsYWRkcikKKyNkZWZpbmUgbWluaXhfc2V0X2JpdChucixhZGRyKQkJCWV4dDJfc2V0X2JpdChucixhZGRyKQorI2RlZmluZSBtaW5peF90ZXN0X2FuZF9jbGVhcl9iaXQobnIsYWRkcikJZXh0Ml9jbGVhcl9iaXQobnIsYWRkcikKKyNkZWZpbmUgbWluaXhfdGVzdF9iaXQobnIsYWRkcikJCQlleHQyX3Rlc3RfYml0KG5yLGFkZHIpCisjZGVmaW5lIG1pbml4X2ZpbmRfZmlyc3RfemVyb19iaXQoYWRkcixzaXplKQlleHQyX2ZpbmRfZmlyc3RfemVyb19iaXQoYWRkcixzaXplKQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX0FTTV9CSVRPUFNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L2J1Zy5oIGIvaW5jbHVkZS9hc20tZnJ2L2J1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxMTg2MGIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1mcnYvYnVnLmgKQEAgLTAsMCArMSw1MSBAQAorLyogYnVnLmg6IEZSViBidWcgdHJhcHBpbmcKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpZm5kZWYgX0FTTV9CVUdfSAorI2RlZmluZSBfQVNNX0JVR19ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworLyoKKyAqIFRlbGwgdGhlIHVzZXIgdGhlcmUgaXMgc29tZSBwcm9ibGVtLgorICovCitleHRlcm4gYXNtbGlua2FnZSB2b2lkIF9fZGVidWdfYnVnX3RyYXAoaW50IHNpZ25yKTsKKworI2lmZGVmIENPTkZJR19OT19LRVJORUxfTVNHCisjZGVmaW5lCV9kZWJ1Z19idWdfcHJpbnRrKCkKKyNlbHNlCitleHRlcm4gdm9pZCBfX2RlYnVnX2J1Z19wcmludGsoY29uc3QgY2hhciAqZmlsZSwgdW5zaWduZWQgbGluZSk7CisjZGVmaW5lCV9kZWJ1Z19idWdfcHJpbnRrKCkgX19kZWJ1Z19idWdfcHJpbnRrKF9fRklMRV9fLCBfX0xJTkVfXykKKyNlbmRpZgorCisjZGVmaW5lIF9kZWJ1Z19idWdfdHJhcChzaWducikJCQlcCitkbyB7CQkJCQkJXAorCV9fZGVidWdfYnVnX3RyYXAoc2lnbnIpOwkJXAorCWFzbSB2b2xhdGlsZSgibm9wIik7CQkJXAorfSB3aGlsZSgwKQorCisjZGVmaW5lIEhBVkVfQVJDSF9CVUcKKyNkZWZpbmUgQlVHKCkJCQkJCVwKK2RvIHsJCQkJCQlcCisJX2RlYnVnX2J1Z19wcmludGsoKTsJCQlcCisJX2RlYnVnX2J1Z190cmFwKDYgLypTSUdBQlJUKi8pOwkJXAorfSB3aGlsZSAoMCkKKworI2lmZGVmIENPTkZJR19HREJTVFVCCisjZGVmaW5lIEhBVkVfQVJDSF9LR0RCX1JBSVNFCisjZGVmaW5lIGtnZGJfcmFpc2Uoc2lnbnIpIGRvIHsgX2RlYnVnX2J1Z190cmFwKHNpZ25yKTsgfSB3aGlsZSgwKQorCisjZGVmaW5lIEhBVkVfQVJDSF9LR0RCX0JBRF9QQUdFCisjZGVmaW5lIGtnZGJfYmFkX3BhZ2UocGFnZSkgZG8geyBrZ2RiX3JhaXNlKFNJR0FCUlQpOyB9IHdoaWxlKDApCisjZW5kaWYKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2J1Zy5oPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9idWdzLmggYi9pbmNsdWRlL2FzbS1mcnYvYnVncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyMzgyYmUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1mcnYvYnVncy5oCkBAIC0wLDAgKzEsMTQgQEAKKy8qIGJ1Z3MuaDogYXJjaCBidWcgY2hlY2tpbmcgZW50cnkKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkIGNoZWNrX2J1Z3Modm9pZCkKK3sKK30KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9idXNjdGwtcmVncy5oIGIvaW5jbHVkZS9hc20tZnJ2L2J1c2N0bC1yZWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmIwZmY0OAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWZydi9idXNjdGwtcmVncy5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qIGJ1c2N0bC1yZWdzLmg6IEZSNDAwLXNlcmllcyBDUFUgYnVzIGNvbnRyb2xsZXIgcmVnaXN0ZXJzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzIFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgX0FTTV9CVVNDVExfUkVHU19ICisjZGVmaW5lIF9BU01fQlVTQ1RMX1JFR1NfSAorCisvKiBidXMgY29udHJvbGxlciByZWdpc3RlcnMgKi8KKyNkZWZpbmUgX19nZXRfTEdDUigpCSh7ICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSgweGZlMDAwMDEwKTsgfSkKKyNkZWZpbmUgX19nZXRfTE1BSUNSKCkJKHsgKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKDB4ZmUwMDAwMzApOyB9KQorI2RlZmluZSBfX2dldF9MRU1CUigpCSh7ICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSgweGZlMDAwMDQwKTsgfSkKKyNkZWZpbmUgX19nZXRfTEVNQU0oKQkoeyAqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoMHhmZTAwMDA0OCk7IH0pCisjZGVmaW5lIF9fZ2V0X0xDUihSKQkoeyAqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoMHhmZTAwMDEwMCArIDgqKFIpKTsgfSkKKyNkZWZpbmUgX19nZXRfTFNCUihSKQkoeyAqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoMHhmZTAwMGMwMCArIDgqKFIpKTsgfSkKKyNkZWZpbmUgX19nZXRfTFNBTShSKQkoeyAqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoMHhmZTAwMGQwMCArIDgqKFIpKTsgfSkKKworI2RlZmluZSBfX3NldF9MR0NSKFYpCWRvIHsgKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKDB4ZmUwMDAwMTApID0gKFYpOyB9IHdoaWxlKDApCisjZGVmaW5lIF9fc2V0X0xNQUlDUihWKQlkbyB7ICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSgweGZlMDAwMDMwKSA9IChWKTsgfSB3aGlsZSgwKQorI2RlZmluZSBfX3NldF9MRU1CUihWKQlkbyB7ICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSgweGZlMDAwMDQwKSA9IChWKTsgfSB3aGlsZSgwKQorI2RlZmluZSBfX3NldF9MRU1BTShWKQlkbyB7ICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSgweGZlMDAwMDQ4KSA9IChWKTsgfSB3aGlsZSgwKQorI2RlZmluZSBfX3NldF9MQ1IoUixWKQlkbyB7ICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSgweGZlMDAwMTAwICsgOCooUikpID0gKFYpOyB9IHdoaWxlKDApCisjZGVmaW5lIF9fc2V0X0xTQlIoUixWKQlkbyB7ICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSgweGZlMDAwYzAwICsgOCooUikpID0gKFYpOyB9IHdoaWxlKDApCisjZGVmaW5lIF9fc2V0X0xTQU0oUixWKQlkbyB7ICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSgweGZlMDAwZDAwICsgOCooUikpID0gKFYpOyB9IHdoaWxlKDApCisKKy8qIEZSNDAxIFNEUkFNIGNvbnRyb2xsZXIgcmVnaXN0ZXJzICovCisjZGVmaW5lIF9fZ2V0X0RCUihSKQkoeyAqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoMHhmZTAwMGUwMCArIDgqKFIpKTsgfSkKKyNkZWZpbmUgX19nZXRfREFNKFIpCSh7ICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSgweGZlMDAwZjAwICsgOCooUikpOyB9KQorCisvKiBGUjU1MSBTRFJBTSBjb250cm9sbGVyIHJlZ2lzdGVycyAqLworI2RlZmluZSBfX2dldF9EQVJTKFIpCSh7ICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSgweGZlZmYwMTAwICsgOCooUikpOyB9KQorI2RlZmluZSBfX2dldF9EQU1LKFIpCSh7ICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSgweGZlZmYwMTEwICsgOCooUikpOyB9KQorCisKKyNlbmRpZiAvKiBfQVNNX0JVU0NUTF9SRUdTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9ieXRlb3JkZXIuaCBiL2luY2x1ZGUvYXNtLWZydi9ieXRlb3JkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTFiZWMzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tZnJ2L2J5dGVvcmRlci5oCkBAIC0wLDAgKzEsMTMgQEAKKyNpZm5kZWYgX0FTTV9CWVRFT1JERVJfSAorI2RlZmluZSBfQVNNX0JZVEVPUkRFUl9ICisKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKworI2lmIGRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykgfHwgZGVmaW5lZChfX0tFUk5FTF9fKQorIyAgZGVmaW5lIF9fQllURU9SREVSX0hBU19VNjRfXworIyAgZGVmaW5lIF9fU1dBQl82NF9USFJVXzMyX18KKyNlbmRpZgorCisjaW5jbHVkZSA8bGludXgvYnl0ZW9yZGVyL2JpZ19lbmRpYW4uaD4KKworI2VuZGlmIC8qIF9BU01fQllURU9SREVSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9jYWNoZS5oIGIvaW5jbHVkZS9hc20tZnJ2L2NhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y2OWI2MwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWZydi9jYWNoZS5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qIGNhY2hlLmg6IEZSViBjYWNoZSBkZWZpbml0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9fQVNNX0NBQ0hFX0gKKyNkZWZpbmUgX19BU01fQ0FDSEVfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKy8qIGJ5dGVzIHBlciBMMSBjYWNoZSBsaW5lICovCisjZGVmaW5lIEwxX0NBQ0hFX1NISUZUCQkoQ09ORklHX0ZSVl9MMV9DQUNIRV9TSElGVCkKKyNkZWZpbmUgTDFfQ0FDSEVfQllURVMJCSgxIDw8IEwxX0NBQ0hFX1NISUZUKQorCisjZGVmaW5lIF9fY2FjaGVsaW5lX2FsaWduZWQJX19hdHRyaWJ1dGVfXygoYWxpZ25lZChMMV9DQUNIRV9CWVRFUykpKQorI2RlZmluZSBfX19fY2FjaGVsaW5lX2FsaWduZWQJX19hdHRyaWJ1dGVfXygoYWxpZ25lZChMMV9DQUNIRV9CWVRFUykpKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9jYWNoZWZsdXNoLmggYi9pbmNsdWRlL2FzbS1mcnYvY2FjaGVmbHVzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwMDdkZWMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1mcnYvY2FjaGVmbHVzaC5oCkBAIC0wLDAgKzEsOTEgQEAKKy8qIGNhY2hlZmx1c2guaDogRlJWIGNhY2hlIGZsdXNoaW5nIHJvdXRpbmVzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgX0FTTV9DQUNIRUZMVVNIX0gKKyNkZWZpbmUgX0FTTV9DQUNIRUZMVVNIX0gKKworLyogS2VlcCBpbmNsdWRlcyB0aGUgc2FtZSBhY3Jvc3MgYXJjaGVzLiAgKi8KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorCisvKgorICogdmlydHVhbGx5LWluZGV4ZWQgY2FjaGUgbWFuYWdlbWVudCAob3VyIGNhY2hlIGlzIHBoeXNpY2FsbHkgaW5kZXhlZCkKKyAqLworI2RlZmluZSBmbHVzaF9jYWNoZV9hbGwoKQkJCWRvIHt9IHdoaWxlKDApCisjZGVmaW5lIGZsdXNoX2NhY2hlX21tKG1tKQkJCWRvIHt9IHdoaWxlKDApCisjZGVmaW5lIGZsdXNoX2NhY2hlX3JhbmdlKG1tLCBzdGFydCwgZW5kKQlkbyB7fSB3aGlsZSgwKQorI2RlZmluZSBmbHVzaF9jYWNoZV9wYWdlKHZtYSwgdm1hZGRyLCBwZm4pCWRvIHt9IHdoaWxlKDApCisjZGVmaW5lIGZsdXNoX2NhY2hlX3ZtYXAoc3RhcnQsIGVuZCkJCWRvIHt9IHdoaWxlKDApCisjZGVmaW5lIGZsdXNoX2NhY2hlX3Z1bm1hcChzdGFydCwgZW5kKQkJZG8ge30gd2hpbGUoMCkKKyNkZWZpbmUgZmx1c2hfZGNhY2hlX21tYXBfbG9jayhtYXBwaW5nKQkJZG8ge30gd2hpbGUoMCkKKyNkZWZpbmUgZmx1c2hfZGNhY2hlX21tYXBfdW5sb2NrKG1hcHBpbmcpCWRvIHt9IHdoaWxlKDApCisKKy8qCisgKiBwaHlzaWNhbGx5LWluZGV4ZWQgY2FjaGUgbWFuYWdtZW50CisgKiAtIHNlZSBhcmNoL2Zydi9saWIvY2FjaGUuUworICovCitleHRlcm4gdm9pZCBmcnZfZGNhY2hlX3dyaXRlYmFjayh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpOworZXh0ZXJuIHZvaWQgZnJ2X2NhY2hlX2ludmFsaWRhdGUodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKTsKK2V4dGVybiB2b2lkIGZydl9pY2FjaGVfaW52YWxpZGF0ZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpOworZXh0ZXJuIHZvaWQgZnJ2X2NhY2hlX3diYWNrX2ludih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpOworCitzdGF0aWMgaW5saW5lIHZvaWQgX19mbHVzaF9jYWNoZV9hbGwodm9pZCkKK3sKKwlhc20gdm9sYXRpbGUoIglkY2VmCUAoZ3IwLGdyMCksIzEJXG4iCisJCSAgICAgIglpY2VpCUAoZ3IwLGdyMCksIzEJXG4iCisJCSAgICAgIgltZW1iYXIJCQlcbiIKKwkJICAgICA6IDogOiAibWVtb3J5IgorCQkgICAgICk7Cit9CisKKy8qIGRjYWNoZS9pY2FjaGUgY29oZXJlbmN5Li4uICovCisjaWZkZWYgQ09ORklHX01NVQorZXh0ZXJuIHZvaWQgZmx1c2hfZGNhY2hlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9kY2FjaGVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSBwYWdlX3RvX3BoeXMocGFnZSk7CisJZnJ2X2RjYWNoZV93cml0ZWJhY2soYWRkciwgYWRkciArIFBBR0VfU0laRSk7Cit9CisjZW5kaWYKKworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3BhZ2VfdG9fcmFtKHN0cnVjdCBwYWdlICpwYWdlKQoreworCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfaWNhY2hlKHZvaWQpCit7CisJX19mbHVzaF9jYWNoZV9hbGwoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2ljYWNoZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwlmcnZfY2FjaGVfd2JhY2tfaW52KHN0YXJ0LCBlbmQpOworfQorCisjaWZkZWYgQ09ORklHX01NVQorZXh0ZXJuIHZvaWQgZmx1c2hfaWNhY2hlX3VzZXJfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJCSAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGxlbik7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2ljYWNoZV91c2VyX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCQkJICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBsZW4pCit7CisJZnJ2X2NhY2hlX3diYWNrX2ludihzdGFydCwgc3RhcnQgKyBsZW4pOworfQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9pY2FjaGVfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJZmx1c2hfaWNhY2hlX3VzZXJfcmFuZ2Uodm1hLCBwYWdlLCBwYWdlX3RvX3BoeXMocGFnZSksIFBBR0VfU0laRSk7Cit9CisKKworI2VuZGlmIC8qIF9BU01fQ0FDSEVGTFVTSF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvY2hlY2tzdW0uaCBiL2luY2x1ZGUvYXNtLWZydi9jaGVja3N1bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwMjM2ZjY4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tZnJ2L2NoZWNrc3VtLmgKQEAgLTAsMCArMSwxODMgQEAKKy8qIGNoZWNrc3VtLmg6IEZSViBjaGVja3N1bW1pbmcKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfQVNNX0NIRUNLU1VNX0gKKyNkZWZpbmUgX0FTTV9DSEVDS1NVTV9ICisKKyNpbmNsdWRlIDxsaW51eC9pbjYuaD4KKworLyoKKyAqIGNvbXB1dGVzIHRoZSBjaGVja3N1bSBvZiBhIG1lbW9yeSBibG9jayBhdCBidWZmLCBsZW5ndGggbGVuLAorICogYW5kIGFkZHMgaW4gInN1bSIgKDMyLWJpdCkKKyAqCisgKiByZXR1cm5zIGEgMzItYml0IG51bWJlciBzdWl0YWJsZSBmb3IgZmVlZGluZyBpbnRvIGl0c2VsZgorICogb3IgY3N1bV90Y3B1ZHBfbWFnaWMKKyAqCisgKiB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGggZXZlbiBsZW5ndGhzLCBleGNlcHQKKyAqIGZvciB0aGUgbGFzdCBmcmFnbWVudCwgd2hpY2ggbWF5IGJlIG9kZAorICoKKyAqIGl0J3MgYmVzdCB0byBoYXZlIGJ1ZmYgYWxpZ25lZCBvbiBhIDMyLWJpdCBib3VuZGFyeQorICovCit1bnNpZ25lZCBpbnQgY3N1bV9wYXJ0aWFsKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiBidWZmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgc3VtKTsKKworLyoKKyAqIHRoZSBzYW1lIGFzIGNzdW1fcGFydGlhbCwgYnV0IGNvcGllcyBmcm9tIHNyYyB3aGlsZSBpdAorICogY2hlY2tzdW1zCisgKgorICogaGVyZSBldmVuIG1vcmUgaW1wb3J0YW50IHRvIGFsaWduIHNyYyBhbmQgZHN0IG9uIGEgMzItYml0IChvciBldmVuCisgKiBiZXR0ZXIgNjQtYml0KSBib3VuZGFyeQorICovCit1bnNpZ25lZCBpbnQgY3N1bV9wYXJ0aWFsX2NvcHkoY29uc3QgY2hhciAqc3JjLCBjaGFyICpkc3QsIGludCBsZW4sIGludCBzdW0pOworCisvKgorICogdGhlIHNhbWUgYXMgY3N1bV9wYXJ0aWFsX2NvcHksIGJ1dCBjb3BpZXMgZnJvbSB1c2VyIHNwYWNlLgorICoKKyAqIGhlcmUgZXZlbiBtb3JlIGltcG9ydGFudCB0byBhbGlnbiBzcmMgYW5kIGRzdCBvbiBhIDMyLWJpdCAob3IgZXZlbgorICogYmV0dGVyIDY0LWJpdCkgYm91bmRhcnkKKyAqLworZXh0ZXJuIHVuc2lnbmVkIGludCBjc3VtX3BhcnRpYWxfY29weV9mcm9tX3VzZXIoY29uc3QgY2hhciAqc3JjLCBjaGFyICpkc3QsCisJCQkJCQlpbnQgbGVuLCBpbnQgc3VtLCBpbnQgKmNzdW1fZXJyKTsKKworI2RlZmluZSBjc3VtX3BhcnRpYWxfY29weV9ub2NoZWNrKHNyYywgZHN0LCBsZW4sIHN1bSkJXAorCWNzdW1fcGFydGlhbF9jb3B5KChzcmMpLCAoZHN0KSwgKGxlbiksIChzdW0pKQorCisvKgorICoJVGhpcyBpcyBhIHZlcnNpb24gb2YgaXBfY29tcHV0ZV9jc3VtKCkgb3B0aW1pemVkIGZvciBJUCBoZWFkZXJzLAorICoJd2hpY2ggYWx3YXlzIGNoZWNrc3VtIG9uIDQgb2N0ZXQgYm91bmRhcmllcy4KKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUKK3Vuc2lnbmVkIHNob3J0IGlwX2Zhc3RfY3N1bSh1bnNpZ25lZCBjaGFyICppcGgsIHVuc2lnbmVkIGludCBpaGwpCit7CisJdW5zaWduZWQgaW50IHRtcCwgaW5jLCBzdW0gPSAwOworCisJYXNtKCIJYWRkY2MJCWdyMCxncjAsZ3IwLGljYzBcbiIgLyogY2xlYXIgaWNjMC5DICovCisJICAgICIJc3ViaQkJJTEsIzQsJTEJXG4iCisJICAgICIwOgkJCQkJXG4iCisJICAgICIJbGR1LnAJCUAoJTEsJTMpLCU0CVxuIgorCSAgICAiCXN1YmljYwkJJTIsIzEsJTIsaWNjMQlcbiIKKwkgICAgIglhZGR4Y2MucAklNCwlMCwlMCxpY2MwCVxuIgorCSAgICAiCWJoaQkJaWNjMSwjMiwwYglcbiIKKworCSAgICAvKiBmb2xkIHRoZSAzMy1iaXQgcmVzdWx0IGludG8gMTYtYml0cyAqLworCSAgICAiCWFkZHhjYwkJZ3IwLCUwLCUwLGljYzAJXG4iCisJICAgICIJc3JsaQkJJTAsIzE2LCUxCVxuIgorCSAgICAiCXNldGhpCQkjMCwlMAkJXG4iCisJICAgICIJYWRkCQklMSwlMCwlMAlcbiIKKwkgICAgIglzcmxpCQklMCwjMTYsJTEJXG4iCisJICAgICIJYWRkCQklMSwlMCwlMAlcbiIKKworCSAgICA6ICI9ciIgKHN1bSksICI9ciIgKGlwaCksICI9ciIgKGlobCksICI9ciIgKGluYyksICI9JnIiKHRtcCkKKwkgICAgOiAiMCIgKHN1bSksICIxIiAoaXBoKSwgIjIiIChpaGwpLCAiMyIgKDQpLAorCSAgICAibSIoKih2b2xhdGlsZSBzdHJ1Y3QgeyBpbnQgX1sxMDBdOyB9ICopaXBoKQorCSAgICA6ICJpY2MwIiwgImljYzEiCisJICAgICk7CisKKwlyZXR1cm4gfnN1bTsKK30KKworLyoKKyAqCUZvbGQgYSBwYXJ0aWFsIGNoZWNrc3VtCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNzdW1fZm9sZCh1bnNpZ25lZCBpbnQgc3VtKQoreworCXVuc2lnbmVkIGludCB0bXA7CisKKwlhc20oIglzcmxpCQklMCwjMTYsJTEJXG4iCisJICAgICIJc2V0aGkJCSMwLCUwCQlcbiIKKwkgICAgIglhZGQJCSUxLCUwLCUwCVxuIgorCSAgICAiCXNybGkJCSUwLCMxNiwlMQlcbiIKKwkgICAgIglhZGQJCSUxLCUwLCUwCVxuIgorCSAgICA6ICI9ciIoc3VtKSwgIj0mciIodG1wKQorCSAgICA6ICIwIihzdW0pCisJICAgICk7CisKKwlyZXR1cm4gfnN1bTsKK30KKworLyoKKyAqIGNvbXB1dGVzIHRoZSBjaGVja3N1bSBvZiB0aGUgVENQL1VEUCBwc2V1ZG8taGVhZGVyCisgKiByZXR1cm5zIGEgMTYtYml0IGNoZWNrc3VtLCBhbHJlYWR5IGNvbXBsZW1lbnRlZAorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAorY3N1bV90Y3B1ZHBfbm9mb2xkKHVuc2lnbmVkIGxvbmcgc2FkZHIsIHVuc2lnbmVkIGxvbmcgZGFkZHIsIHVuc2lnbmVkIHNob3J0IGxlbiwKKwkJICB1bnNpZ25lZCBzaG9ydCBwcm90bywgdW5zaWduZWQgaW50IHN1bSkKK3sKKwlhc20oIglhZGRjYwkJJTEsJTAsJTAsaWNjMAlcbiIKKwkgICAgIglhZGR4Y2MJCSUyLCUwLCUwLGljYzAJXG4iCisJICAgICIJYWRkeGNjCQklMywlMCwlMCxpY2MwCVxuIgorCSAgICAiCWFkZHhjYwkJZ3IwLCUwLCUwLGljYzAJXG4iCisJICAgIDogIj1yIiAoc3VtKQorCSAgICA6ICJyIiAoZGFkZHIpLCAiciIgKHNhZGRyKSwgInIiIChsZW4gKyBwcm90byksICIwIihzdW0pCisJICAgIDogImljYzAiCisJICAgICk7CisJcmV0dXJuIHN1bTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBpbnQKK2NzdW1fdGNwdWRwX21hZ2ljKHVuc2lnbmVkIGxvbmcgc2FkZHIsIHVuc2lnbmVkIGxvbmcgZGFkZHIsIHVuc2lnbmVkIHNob3J0IGxlbiwKKwkJICB1bnNpZ25lZCBzaG9ydCBwcm90bywgdW5zaWduZWQgaW50IHN1bSkKK3sKKwlyZXR1cm4gY3N1bV9mb2xkKGNzdW1fdGNwdWRwX25vZm9sZChzYWRkcixkYWRkcixsZW4scHJvdG8sc3VtKSk7Cit9CisKKy8qCisgKiB0aGlzIHJvdXRpbmUgaXMgdXNlZCBmb3IgbWlzY2VsbGFuZW91cyBJUC1saWtlIGNoZWNrc3VtcywgbWFpbmx5CisgKiBpbiBpY21wLmMKKyAqLworZXh0ZXJuIHVuc2lnbmVkIHNob3J0IGlwX2NvbXB1dGVfY3N1bShjb25zdCB1bnNpZ25lZCBjaGFyICogYnVmZiwgaW50IGxlbik7CisKKyNkZWZpbmUgX0hBVkVfQVJDSF9JUFY2X0NTVU0KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgaW50Citjc3VtX2lwdjZfbWFnaWMoc3RydWN0IGluNl9hZGRyICpzYWRkciwgc3RydWN0IGluNl9hZGRyICpkYWRkciwKKwkJX191MzIgbGVuLCB1bnNpZ25lZCBzaG9ydCBwcm90bywgdW5zaWduZWQgaW50IHN1bSkKK3sKKwl1bnNpZ25lZCBsb25nIHRtcCwgdG1wMjsKKworCWFzbSgiCWFkZGNjCQklMiwlMCwlMCxpY2MwCVxuIgorCisJICAgIC8qIGFkZCB1cCB0aGUgc291cmNlIGFkZHIgKi8KKwkgICAgIglsZGkJCUAoJTMsMCksJTEJXG4iCisJICAgICIJYWRkeGNjCQklMSwlMCwlMCxpY2MwCVxuIgorCSAgICAiCWxkaQkJQCglMyw0KSwlMglcbiIKKwkgICAgIglhZGR4Y2MJCSUyLCUwLCUwLGljYzAJXG4iCisJICAgICIJbGRpCQlAKCUzLDgpLCUxCVxuIgorCSAgICAiCWFkZHhjYwkJJTEsJTAsJTAsaWNjMAlcbiIKKwkgICAgIglsZGkJCUAoJTMsMTIpLCUyCVxuIgorCSAgICAiCWFkZHhjYwkJJTIsJTAsJTAsaWNjMAlcbiIKKworCSAgICAvKiBhZGQgdXAgdGhlIGRlc3QgYWRkciAqLworCSAgICAiCWxkaQkJQCglNCwwKSwlMQlcbiIKKwkgICAgIglhZGR4Y2MJCSUxLCUwLCUwLGljYzAJXG4iCisJICAgICIJbGRpCQlAKCU0LDQpLCUyCVxuIgorCSAgICAiCWFkZHhjYwkJJTIsJTAsJTAsaWNjMAlcbiIKKwkgICAgIglsZGkJCUAoJTQsOCksJTEJXG4iCisJICAgICIJYWRkeGNjCQklMSwlMCwlMCxpY2MwCVxuIgorCSAgICAiCWxkaQkJQCglNCwxMiksJTIJXG4iCisJICAgICIJYWRkeGNjCQklMiwlMCwlMCxpY2MwCVxuIgorCisJICAgIC8qIGZvbGQgdGhlIDMzLWJpdCByZXN1bHQgaW50byAxNi1iaXRzICovCisJICAgICIJYWRkeGNjCQlncjAsJTAsJTAsaWNjMAlcbiIKKwkgICAgIglzcmxpCQklMCwjMTYsJTEJXG4iCisJICAgICIJc2V0aGkJCSMwLCUwCQlcbiIKKwkgICAgIglhZGQJCSUxLCUwLCUwCVxuIgorCSAgICAiCXNybGkJCSUwLCMxNiwlMQlcbiIKKwkgICAgIglhZGQJCSUxLCUwLCUwCVxuIgorCisJICAgIDogIj1yIiAoc3VtKSwgIj0mciIgKHRtcCksICI9ciIgKHRtcDIpCisJICAgIDogInIiIChzYWRkciksICJyIiAoZGFkZHIpLCAiMCIgKHN1bSksICIyIiAobGVuICsgcHJvdG8pCisJICAgIDogImljYzAiCisJICAgICk7CisKKwlyZXR1cm4gfnN1bTsKK30KKworI2VuZGlmIC8qIF9BU01fQ0hFQ0tTVU1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L2NwdS1pcnFzLmggYi9pbmNsdWRlL2FzbS1mcnYvY3B1LWlycXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2Q2OTFlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tZnJ2L2NwdS1pcnFzLmgKQEAgLTAsMCArMSw4NyBAQAorLyogY3B1LWlycXMuaDogb24tQ1BVIHBlcmlwaGVyYWwgaXJxcworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9BU01fQ1BVX0lSUVNfSAorI2RlZmluZSBfQVNNX0NQVV9JUlFTX0gKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworI2luY2x1ZGUgPGFzbS9pcnEtcm91dGluZy5oPgorCisjZGVmaW5lIElSUV9CQVNFX0NQVQkJKE5SX0lSUV9BQ1RJT05TX1BFUl9HUk9VUCAqIDApCisKKy8qIElSUSBJRHMgcHJlc2VudGVkIHRvIGRyaXZlcnMgKi8KK2VudW0geworCUlSUV9DUFVfX1VOVVNFRCA9IElSUV9CQVNFX0NQVSwKKwlJUlFfQ1BVX1VBUlQwLAorCUlSUV9DUFVfVUFSVDEsCisJSVJRX0NQVV9USU1FUjAsCisJSVJRX0NQVV9USU1FUjEsCisJSVJRX0NQVV9USU1FUjIsCisJSVJRX0NQVV9ETUEwLAorCUlSUV9DUFVfRE1BMSwKKwlJUlFfQ1BVX0RNQTIsCisJSVJRX0NQVV9ETUEzLAorCUlSUV9DUFVfRE1BNCwKKwlJUlFfQ1BVX0RNQTUsCisJSVJRX0NQVV9ETUE2LAorCUlSUV9DUFVfRE1BNywKKwlJUlFfQ1BVX0VYVEVSTkFMMCwKKwlJUlFfQ1BVX0VYVEVSTkFMMSwKKwlJUlFfQ1BVX0VYVEVSTkFMMiwKKwlJUlFfQ1BVX0VYVEVSTkFMMywKKwlJUlFfQ1BVX0VYVEVSTkFMNCwKKwlJUlFfQ1BVX0VYVEVSTkFMNSwKKwlJUlFfQ1BVX0VYVEVSTkFMNiwKKwlJUlFfQ1BVX0VYVEVSTkFMNywKK307CisKKy8qIElSUSB0byBsZXZlbCBtYXBwaW5ncyAqLworI2RlZmluZSBJUlFfR0RCU1RVQl9MRVZFTAkxNQorI2RlZmluZSBJUlFfVUFSVF9MRVZFTAkJMTMKKworI2lmZGVmIENPTkZJR19HREJTVFVCX1VBUlQwCisjZGVmaW5lIElSUV9VQVJUMF9MRVZFTAkJSVJRX0dEQlNUVUJfTEVWRUwKKyNlbHNlCisjZGVmaW5lIElSUV9VQVJUMF9MRVZFTAkJSVJRX1VBUlRfTEVWRUwKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0dEQlNUVUJfVUFSVDEKKyNkZWZpbmUgSVJRX1VBUlQxX0xFVkVMCQlJUlFfR0RCU1RVQl9MRVZFTAorI2Vsc2UKKyNkZWZpbmUgSVJRX1VBUlQxX0xFVkVMCQlJUlFfVUFSVF9MRVZFTAorI2VuZGlmCisKKyNkZWZpbmUgSVJRX0RNQTBfTEVWRUwJCTE0CisjZGVmaW5lIElSUV9ETUExX0xFVkVMCQkxNAorI2RlZmluZSBJUlFfRE1BMl9MRVZFTAkJMTQKKyNkZWZpbmUgSVJRX0RNQTNfTEVWRUwJCTE0CisjZGVmaW5lIElSUV9ETUE0X0xFVkVMCQkxNAorI2RlZmluZSBJUlFfRE1BNV9MRVZFTAkJMTQKKyNkZWZpbmUgSVJRX0RNQTZfTEVWRUwJCTE0CisjZGVmaW5lIElSUV9ETUE3X0xFVkVMCQkxNAorCisjZGVmaW5lIElSUV9USU1FUjBfTEVWRUwJMTIKKyNkZWZpbmUgSVJRX1RJTUVSMV9MRVZFTAkxMQorI2RlZmluZSBJUlFfVElNRVIyX0xFVkVMCTEwCisKKyNkZWZpbmUgSVJRX1hJUlEwX0xFVkVMCQkxCisjZGVmaW5lIElSUV9YSVJRMV9MRVZFTAkJMgorI2RlZmluZSBJUlFfWElSUTJfTEVWRUwJCTMKKyNkZWZpbmUgSVJRX1hJUlEzX0xFVkVMCQk0CisjZGVmaW5lIElSUV9YSVJRNF9MRVZFTAkJNQorI2RlZmluZSBJUlFfWElSUTVfTEVWRUwJCTYKKyNkZWZpbmUgSVJRX1hJUlE2X0xFVkVMCQk3CisjZGVmaW5lIElSUV9YSVJRN19MRVZFTAkJOAorCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYgLyogX0FTTV9DUFVfSVJRU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvY3B1bWFzay5oIGIvaW5jbHVkZS9hc20tZnJ2L2NwdW1hc2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTk5YzIwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tZnJ2L2NwdW1hc2suaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX0FTTV9DUFVNQVNLX0gKKyNkZWZpbmUgX0FTTV9DUFVNQVNLX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2NwdW1hc2suaD4KKworI2VuZGlmIC8qIF9BU01fQ1BVTUFTS19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvY3B1dGltZS5oIGIvaW5jbHVkZS9hc20tZnJ2L2NwdXRpbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmMzNzNhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tZnJ2L2NwdXRpbWUuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX0FTTV9DUFVUSU1FX0gKKyNkZWZpbmUgX0FTTV9DUFVUSU1FX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2NwdXRpbWUuaD4KKworI2VuZGlmIC8qIF9BU01fQ1BVVElNRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvY3VycmVudC5oIGIvaW5jbHVkZS9hc20tZnJ2L2N1cnJlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmIwMjc0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tZnJ2L2N1cnJlbnQuaApAQCAtMCwwICsxLDMwIEBACisvKiBjdXJyZW50Lmg6IEZSViBjdXJyZW50IHRhc2sgcG9pbnRlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9BU01fQ1VSUkVOVF9ICisjZGVmaW5lIF9BU01fQ1VSUkVOVF9ICisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKy8qCisgKiBkZWRpY2F0ZSBHUjI5IHRvIGtlZXBpbmcgdGhlIGN1cnJlbnQgdGFzayBwb2ludGVyCisgKi8KK3JlZ2lzdGVyIHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VycmVudCBhc20oImdyMjkiKTsKKworI2RlZmluZSBnZXRfY3VycmVudCgpIGN1cnJlbnQKKworI2Vsc2UKKworI2RlZmluZSBDVVJSRU5UIGdyMjkKKworI2VuZGlmCisKKyNlbmRpZiAvKiBfQVNNX0NVUlJFTlRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L2RlbGF5LmggYi9pbmNsdWRlL2FzbS1mcnYvZGVsYXkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTdiNGViCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tZnJ2L2RlbGF5LmgKQEAgLTAsMCArMSw1MCBAQAorLyogZGVsYXkuaDogRlJWIGRlbGF5IGNvZGUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfQVNNX0RFTEFZX0gKKyNkZWZpbmUgX0FTTV9ERUxBWV9ICisKKyNpbmNsdWRlIDxhc20vcGFyYW0uaD4KKyNpbmNsdWRlIDxhc20vdGltZXItcmVncy5oPgorCisvKgorICogZGVsYXkgbG9vcCAtIHJ1bnMgYXQgX19jb3JlX2Nsb2NrX3NwZWVkX0haIC8gMiBbdGhlcmUgYXJlIDIgaW5zbnMgaW4gdGhlIGxvb3BdCisgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fZGVsYXlfbG9vcHNfTUh6OworCitzdGF0aWMgaW5saW5lIHZvaWQgX19kZWxheSh1bnNpZ25lZCBsb25nIGxvb3BzKQoreworCWFzbSB2b2xhdGlsZSgiMToJc3ViaWNjCSUwLCMxLCUwLGljYzAJXG4iCisJCSAgICAgIgkJYm5jCWljYzAsIzIsMWIJXG4iCisJCSAgICAgOiAiPXIiIChsb29wcykKKwkJICAgICA6ICIwIiAobG9vcHMpCisJCSAgICAgOiAiaWNjMCIKKwkJICAgICApOworfQorCisvKgorICogVXNlIG9ubHkgZm9yIHZlcnkgc21hbGwgZGVsYXlzICggPCAxIG1zZWMpLiAgU2hvdWxkIHByb2JhYmx5IHVzZSBhCisgKiBsb29rdXAgdGFibGUsIHJlYWxseSwgYXMgdGhlIG11bHRpcGxpY2F0aW9ucyB0YWtlIG11Y2ggdG9vIGxvbmcgd2l0aAorICogc2hvcnQgZGVsYXlzLiAgVGhpcyBpcyBhICJyZWFzb25hYmxlIiBpbXBsZW1lbnRhdGlvbiwgdGhvdWdoIChhbmQgdGhlCisgKiBmaXJzdCBjb25zdGFudCBtdWx0aXBsaWNhdGlvbnMgZ2V0cyBvcHRpbWl6ZWQgYXdheSBpZiB0aGUgZGVsYXkgaXMKKyAqIGEgY29uc3RhbnQpCisgKi8KKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9vcHNfcGVyX2ppZmZ5OworCitzdGF0aWMgaW5saW5lIHZvaWQgdWRlbGF5KHVuc2lnbmVkIGxvbmcgdXNlY3MpCit7CisJX19kZWxheSh1c2VjcyAqIF9fZGVsYXlfbG9vcHNfTUh6KTsKK30KKworI2RlZmluZSBuZGVsYXkobikJdWRlbGF5KChuKSAqIDUpCisKKyNlbmRpZiAvKiBfQVNNX0RFTEFZX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9kaXY2NC5oIGIvaW5jbHVkZS9hc20tZnJ2L2RpdjY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNkOTc4YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWZydi9kaXY2NC5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9kaXY2NC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L2RtOTAwMC5oIGIvaW5jbHVkZS9hc20tZnJ2L2RtOTAwMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2ZjQ4ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1mcnYvZG05MDAwLmgKQEAgLTAsMCArMSwzNyBAQAorLyogZG05MDAwLmg6IERhdmljb20gRE05MDAwIGFkYXB0ZXIgY29uZmlndXJhdGlvbgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9BU01fRE05MDAwX0gKKyNkZWZpbmUgX0FTTV9ETTkwMDBfSAorCisjaW5jbHVkZSA8YXNtL21iLXJlZ3MuaD4KKworI2RlZmluZSBETTkwMDBfQVJDSF9JT0JBU0UJKF9fcmVnaW9uX0NTNiArIDB4MzAwKQorI2RlZmluZSBETTkwMDBfQVJDSF9JUlEJCUlSUV9DUFVfRVhURVJOQUwzCS8qIFhJUlEgIzMgKHNoYXJlZCB3aXRoIEZQR0EpICovCisjdW5kZWYgRE05MDAwX0FSQ0hfSVJRX0FDVExPVwkJCQkvKiBJUlEgcGluIGFjdGl2ZSBoaWdoICovCisjZGVmaW5lIERNOTAwMF9BUkNIX0JVU19JTkZPCSJDUzYjKzB4MzAwIgkJLyogYnVzIGluZm8gZm9yIGV0aHRvb2wgKi8KKworI3VuZGVmIF9faXNfUENJX0lPCisjZGVmaW5lIF9faXNfUENJX0lPKGFkZHIpCTAJLyogbm90IFBDSSAqLworCisjdW5kZWYgaW5sCisjZGVmaW5lIGlubChhZGRyKQkJCQkJCQkJCQlcCisoewkJCQkJCQkJCQkJCVwKKwl1bnNpZ25lZCBsb25nIF9faW9hZGRyID0gKHVuc2lnbmVkIGxvbmcpIGFkZHI7CQkJCQkJXAorCXVpbnQzMl90IHggPSByZWFkbChfX2lvYWRkcik7CQkJCQkJCQlcCisJKCh4ICYgMHhmZikgPDwgMjQpIHwgKCh4ICYgMHhmZjAwKSA8PCA4KSB8ICgoeCA+PiA4KSAmIDB4ZmYwMCkgfCAoKHggPj4gMjQpICYgMHhmZik7CVwKK30pCisKKyN1bmRlZiBpbnNsCisjZGVmaW5lIGluc2woYSxiLGwpCV9faW5zbChhLGIsbCwwKSAvKiBkb24ndCBieXRlLXN3YXAgKi8KKworCisjZW5kaWYgLyogX0FTTV9ETTkwMDBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L2RtYS1tYXBwaW5nLmggYi9pbmNsdWRlL2FzbS1mcnYvZG1hLW1hcHBpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjA2YWIzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tZnJ2L2RtYS1tYXBwaW5nLmgKQEAgLTAsMCArMSwxODQgQEAKKyNpZm5kZWYgX0FTTV9ETUFfTUFQUElOR19ICisjZGVmaW5lIF9BU01fRE1BX01BUFBJTkdfSAorCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2RlZmluZSBkbWFfYWxsb2Nfbm9uY29oZXJlbnQoZCwgcywgaCwgZikgZG1hX2FsbG9jX2NvaGVyZW50KGQsIHMsIGgsIGYpCisjZGVmaW5lIGRtYV9mcmVlX25vbmNvaGVyZW50KGQsIHMsIHYsIGgpIGRtYV9mcmVlX2NvaGVyZW50KGQsIHMsIHYsIGgpCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fbm9uZ3ByZWxic3MgZG1hX2NvaGVyZW50X21lbV9zdGFydDsKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fbm9uZ3ByZWxic3MgZG1hX2NvaGVyZW50X21lbV9lbmQ7CisKK3ZvaWQgKmRtYV9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBpbnQgZ2ZwKTsKK3ZvaWQgZG1hX2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgdm9pZCAqdmFkZHIsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSk7CisKKy8qCisgKiBUaGVzZSBtYWNyb3Mgc2hvdWxkIGJlIHVzZWQgYWZ0ZXIgYSBwY2lfbWFwX3NnIGNhbGwgaGFzIGJlZW4gZG9uZQorICogdG8gZ2V0IGJ1cyBhZGRyZXNzZXMgb2YgZWFjaCBvZiB0aGUgU0cgZW50cmllcyBhbmQgdGhlaXIgbGVuZ3Rocy4KKyAqIFlvdSBzaG91bGQgb25seSB3b3JrIHdpdGggdGhlIG51bWJlciBvZiBzZyBlbnRyaWVzIHBjaV9tYXBfc2cKKyAqIHJldHVybnMsIG9yIGFsdGVybmF0aXZlbHkgc3RvcCBvbiB0aGUgZmlyc3Qgc2dfZG1hX2xlbihzZykgd2hpY2gKKyAqIGlzIDAuCisgKi8KKyNkZWZpbmUgc2dfZG1hX2FkZHJlc3Moc2cpCSgodW5zaWduZWQgbG9uZykgKHBhZ2VfdG9fcGh5cygoc2cpLT5wYWdlKSArIChzZyktPm9mZnNldCkpCisjZGVmaW5lIHNnX2RtYV9sZW4oc2cpCQkoKHNnKS0+bGVuZ3RoKQorCisvKgorICogTWFwIGEgc2luZ2xlIGJ1ZmZlciBvZiB0aGUgaW5kaWNhdGVkIHNpemUgZm9yIERNQSBpbiBzdHJlYW1pbmcgbW9kZS4KKyAqIFRoZSAzMi1iaXQgYnVzIGFkZHJlc3MgdG8gdXNlIGlzIHJldHVybmVkLgorICoKKyAqIE9uY2UgdGhlIGRldmljZSBpcyBnaXZlbiB0aGUgZG1hIGFkZHJlc3MsIHRoZSBkZXZpY2Ugb3ducyB0aGlzIG1lbW9yeQorICogdW50aWwgZWl0aGVyIHBjaV91bm1hcF9zaW5nbGUgb3IgcGNpX2RtYV9zeW5jX3NpbmdsZSBpcyBwZXJmb3JtZWQuCisgKi8KK2V4dGVybiBkbWFfYWRkcl90IGRtYV9tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwKKwkJCQkgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKTsKKworLyoKKyAqIFVubWFwIGEgc2luZ2xlIHN0cmVhbWluZyBtb2RlIERNQSB0cmFuc2xhdGlvbi4gIFRoZSBkbWFfYWRkciBhbmQgc2l6ZQorICogbXVzdCBtYXRjaCB3aGF0IHdhcyBwcm92aWRlZCBmb3IgaW4gYSBwcmV2aW91cyBwY2lfbWFwX3NpbmdsZSBjYWxsLiAgQWxsCisgKiBvdGhlciB1c2FnZXMgYXJlIHVuZGVmaW5lZC4KKyAqCisgKiBBZnRlciB0aGlzIGNhbGwsIHJlYWRzIGJ5IHRoZSBjcHUgdG8gdGhlIGJ1ZmZlciBhcmUgZ3VhcmVudGVlZCB0byBzZWUKKyAqIHdoYXRldmVyIHRoZSBkZXZpY2Ugd3JvdGUgdGhlcmUuCisgKi8KK3N0YXRpYyBpbmxpbmUKK3ZvaWQgZG1hX3VubWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIsIHNpemVfdCBzaXplLAorCQkgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJQlVHX09OKGRpcmVjdGlvbiA9PSBETUFfTk9ORSk7Cit9CisKKy8qCisgKiBNYXAgYSBzZXQgb2YgYnVmZmVycyBkZXNjcmliZWQgYnkgc2NhdHRlcmxpc3QgaW4gc3RyZWFtaW5nCisgKiBtb2RlIGZvciBETUEuICBUaGlzIGlzIHRoZSBzY2F0aGVyLWdhdGhlciB2ZXJzaW9uIG9mIHRoZQorICogYWJvdmUgcGNpX21hcF9zaW5nbGUgaW50ZXJmYWNlLiAgSGVyZSB0aGUgc2NhdHRlciBnYXRoZXIgbGlzdAorICogZWxlbWVudHMgYXJlIGVhY2ggdGFnZ2VkIHdpdGggdGhlIGFwcHJvcHJpYXRlIGRtYSBhZGRyZXNzCisgKiBhbmQgbGVuZ3RoLiAgVGhleSBhcmUgb2J0YWluZWQgdmlhIHNnX2RtYV97YWRkcmVzcyxsZW5ndGh9KFNHKS4KKyAqCisgKiBOT1RFOiBBbiBpbXBsZW1lbnRhdGlvbiBtYXkgYmUgYWJsZSB0byB1c2UgYSBzbWFsbGVyIG51bWJlciBvZgorICogICAgICAgRE1BIGFkZHJlc3MvbGVuZ3RoIHBhaXJzIHRoYW4gdGhlcmUgYXJlIFNHIHRhYmxlIGVsZW1lbnRzLgorICogICAgICAgKGZvciBleGFtcGxlIHZpYSB2aXJ0dWFsIG1hcHBpbmcgY2FwYWJpbGl0aWVzKQorICogICAgICAgVGhlIHJvdXRpbmUgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGFkZHIvbGVuZ3RoIHBhaXJzIGFjdHVhbGx5CisgKiAgICAgICB1c2VkLCBhdCBtb3N0IG5lbnRzLgorICoKKyAqIERldmljZSBvd25lcnNoaXAgaXNzdWVzIGFzIG1lbnRpb25lZCBhYm92ZSBmb3IgcGNpX21hcF9zaW5nbGUgYXJlCisgKiB0aGUgc2FtZSBoZXJlLgorICovCitleHRlcm4gaW50IGRtYV9tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVudHMsCisJCSAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbik7CisKKy8qCisgKiBVbm1hcCBhIHNldCBvZiBzdHJlYW1pbmcgbW9kZSBETUEgdHJhbnNsYXRpb25zLgorICogQWdhaW4sIGNwdSByZWFkIHJ1bGVzIGNvbmNlcm5pbmcgY2FsbHMgaGVyZSBhcmUgdGhlIHNhbWUgYXMgZm9yCisgKiBwY2lfdW5tYXBfc2luZ2xlKCkgYWJvdmUuCisgKi8KK3N0YXRpYyBpbmxpbmUKK3ZvaWQgZG1hX3VubWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5od2VudHJpZXMsCisJICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJQlVHX09OKGRpcmVjdGlvbiA9PSBETUFfTk9ORSk7Cit9CisKK2V4dGVybgorZG1hX2FkZHJfdCBkbWFfbWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsCisJCQlzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKTsKKworc3RhdGljIGlubGluZQordm9pZCBkbWFfdW5tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHJlc3MsIHNpemVfdCBzaXplLAorCQkgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCUJVR19PTihkaXJlY3Rpb24gPT0gRE1BX05PTkUpOworfQorCisKK3N0YXRpYyBpbmxpbmUKK3ZvaWQgZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHNpemVfdCBzaXplLAorCQkJICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7Cit9CisKK3N0YXRpYyBpbmxpbmUKK3ZvaWQgZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHNpemVfdCBzaXplLAorCQkJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlmbHVzaF93cml0ZV9idWZmZXJzKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUKK3ZvaWQgZG1hX3N5bmNfc2luZ2xlX3JhbmdlX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCisJCQkJICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLAorCQkJCSAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKK30KKworc3RhdGljIGlubGluZQordm9pZCBkbWFfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsCisJCQkJICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCWZsdXNoX3dyaXRlX2J1ZmZlcnMoKTsKK30KKworc3RhdGljIGlubGluZQordm9pZCBkbWFfc3luY19zZ19mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbGVtcywKKwkJCSBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7Cit9CisKK3N0YXRpYyBpbmxpbmUKK3ZvaWQgZG1hX3N5bmNfc2dfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZWxlbXMsCisJCQkgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCWZsdXNoX3dyaXRlX2J1ZmZlcnMoKTsKK30KKworc3RhdGljIGlubGluZQoraW50IGRtYV9tYXBwaW5nX2Vycm9yKGRtYV9hZGRyX3QgZG1hX2FkZHIpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUKK2ludCBkbWFfc3VwcG9ydGVkKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IG1hc2spCit7CisgICAgICAgIC8qCisgICAgICAgICAqIHdlIGZhbGwgYmFjayB0byBHRlBfRE1BIHdoZW4gdGhlIG1hc2sgaXNuJ3QgYWxsIDFzLAorICAgICAgICAgKiBzbyB3ZSBjYW4ndCBndWFyYW50ZWUgYWxsb2NhdGlvbnMgdGhhdCBtdXN0IGJlCisgICAgICAgICAqIHdpdGhpbiBhIHRpZ2h0ZXIgcmFuZ2UgdGhhbiBHRlBfRE1BLi4KKyAgICAgICAgICovCisgICAgICAgIGlmIChtYXNrIDwgMHgwMGZmZmZmZikKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW5saW5lCitpbnQgZG1hX3NldF9tYXNrKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IG1hc2spCit7CisJaWYgKCFkZXYtPmRtYV9tYXNrIHx8ICFkbWFfc3VwcG9ydGVkKGRldiwgbWFzaykpCisJCXJldHVybiAtRUlPOworCisJKmRldi0+ZG1hX21hc2sgPSBtYXNrOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUKK2ludCBkbWFfZ2V0X2NhY2hlX2FsaWdubWVudCh2b2lkKQoreworCXJldHVybiAxIDw8IEwxX0NBQ0hFX1NISUZUOworfQorCisjZGVmaW5lIGRtYV9pc19jb25zaXN0ZW50KGQpCSgxKQorCitzdGF0aWMgaW5saW5lCit2b2lkIGRtYV9jYWNoZV9zeW5jKHZvaWQgKnZhZGRyLCBzaXplX3Qgc2l6ZSwKKwkJICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlmbHVzaF93cml0ZV9idWZmZXJzKCk7Cit9CisKKyNlbmRpZiAgLyogX0FTTV9ETUFfTUFQUElOR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvZG1hLmggYi9pbmNsdWRlL2FzbS1mcnYvZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhmOWEyZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWZydi9kbWEuaApAQCAtMCwwICsxLDEyOSBAQAorLyogZG1hLmg6IEZSViBETUEgY29udHJvbGxlciBtYW5hZ2VtZW50CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgX0FTTV9ETUFfSAorI2RlZmluZSBfQVNNX0RNQV9ICisKKy8vI2RlZmluZSBETUFfREVCVUcgMQorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisKKyN1bmRlZiBNQVhfRE1BX0NIQU5ORUxTCQkvKiBkb24ndCB1c2Uga2VybmVsL2RtYS5jICovCisKKy8qIHVuZGVyIDIuNCB0aGlzIGlzIGFjdHVhbGx5IG5lZWRlZCBieSB0aGUgbmV3IGJvb3RtZW0gYWxsb2NhdG9yICovCisjZGVmaW5lIE1BWF9ETUFfQUREUkVTUwkJUEFHRV9PRkZTRVQKKworLyoKKyAqIEZSViBETUEgY29udHJvbGxlciBtYW5hZ2VtZW50CisgKi8KK3N0cnVjdCBwdF9yZWdzOworCit0eXBlZGVmIGlycXJldHVybl90ICgqZG1hX2lycV9oYW5kbGVyX3QpKGludCBkbWFjaGFuLCB1bnNpZ25lZCBsb25nIGNzdHIsIHZvaWQgKmRhdGEsCisJCQkJCSBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKK2V4dGVybiB2b2lkIGZydl9kbWFfaW5pdCh2b2lkKTsKKworZXh0ZXJuIGludCBmcnZfZG1hX29wZW4oY29uc3QgY2hhciAqZGV2bmFtZSwKKwkJCXVuc2lnbmVkIGxvbmcgZG1hbWFzaywKKwkJCWludCBkbWFjYXAsCisJCQlkbWFfaXJxX2hhbmRsZXJfdCBoYW5kbGVyLAorCQkJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3MsCisJCQl2b2lkICpkYXRhKTsKKworLyogY2hhbm5lbHMgcmVxdWlyZWQgKi8KKyNkZWZpbmUgRlJWX0RNQV9NQVNLX0FOWQlVTE9OR19NQVgJLyogYW55IGNoYW5uZWwgKi8KKworLyogY2FwYWJpbGl0aWVzIHJlcXVpcmVkICovCisjZGVmaW5lIEZSVl9ETUFfQ0FQX0RSRVEJMHgwMQkJLyogRE1BIHJlcXVlc3QgcGluICovCisjZGVmaW5lIEZSVl9ETUFfQ0FQX0RBQ0sJMHgwMgkJLyogRE1BIEFDSyBwaW4gKi8KKyNkZWZpbmUgRlJWX0RNQV9DQVBfRE9ORQkweDA0CQkvKiBETUEgZG9uZSBwaW4gKi8KKworZXh0ZXJuIHZvaWQgZnJ2X2RtYV9jbG9zZShpbnQgZG1hKTsKKworZXh0ZXJuIHZvaWQgZnJ2X2RtYV9jb25maWcoaW50IGRtYSwgdW5zaWduZWQgbG9uZyBjY2ZyLCB1bnNpZ25lZCBsb25nIGNjdHIsIHVuc2lnbmVkIGxvbmcgYXByKTsKKworZXh0ZXJuIHZvaWQgZnJ2X2RtYV9zdGFydChpbnQgZG1hLAorCQkJICB1bnNpZ25lZCBsb25nIHNiYSwgdW5zaWduZWQgbG9uZyBkYmEsCisJCQkgIHVuc2lnbmVkIGxvbmcgcGl4LCB1bnNpZ25lZCBsb25nIHNpeCwgdW5zaWduZWQgbG9uZyBiY2wpOworCitleHRlcm4gdm9pZCBmcnZfZG1hX3Jlc3RhcnRfY2lyY3VsYXIoaW50IGRtYSwgdW5zaWduZWQgbG9uZyBzaXgpOworCitleHRlcm4gdm9pZCBmcnZfZG1hX3N0b3AoaW50IGRtYSk7CisKK2V4dGVybiBpbnQgaXNfZnJ2X2RtYV9pbnRlcnJ1cHRpbmcoaW50IGRtYSk7CisKK2V4dGVybiB2b2lkIGZydl9kbWFfZHVtcChpbnQgZG1hKTsKKworZXh0ZXJuIHZvaWQgZnJ2X2RtYV9zdGF0dXNfY2xlYXIoaW50IGRtYSk7CisKKyNkZWZpbmUgRlJWX0RNQV9OQ0hBTlMJOAorI2RlZmluZSBGUlZfRE1BXzRDSEFOUwk0CisjZGVmaW5lIEZSVl9ETUFfOENIQU5TCTgKKworI2RlZmluZSBETUFDX0NDRlJ4CQkweDAwCS8qIGNoYW5uZWwgY29uZmlndXJhdGlvbiByZWcgKi8KKyNkZWZpbmUgRE1BQ19DQ0ZSeF9DTV9TSElGVAkxNgorI2RlZmluZSBETUFDX0NDRlJ4X0NNX0RBCTB4MDAwMDAwMDAKKyNkZWZpbmUgRE1BQ19DQ0ZSeF9DTV9TQ0EJMHgwMDAxMDAwMAorI2RlZmluZSBETUFDX0NDRlJ4X0NNX0RDQQkweDAwMDIwMDAwCisjZGVmaW5lIERNQUNfQ0NGUnhfQ01fMkQJMHgwMDAzMDAwMAorI2RlZmluZSBETUFDX0NDRlJ4X0FUU19TSElGVAk4CisjZGVmaW5lIERNQUNfQ0NGUnhfUlNfSU5URVJOCTB4MDAwMDAwMDAKKyNkZWZpbmUgRE1BQ19DQ0ZSeF9SU19FWFRFUk4JMHgwMDAwMDAwMQorI2RlZmluZSBETUFDX0NDRlJ4X1JTX1NISUZUCTAKKworI2RlZmluZSBETUFDX0NTVFJ4CQkweDA4CS8qIGNoYW5uZWwgc3RhdHVzIHJlZyAqLworI2RlZmluZSBETUFDX0NTVFJ4X0ZTCQkweDAwMDAwMDNmCisjZGVmaW5lIERNQUNfQ1NUUnhfTkUJCTB4MDAwMDAxMDAKKyNkZWZpbmUgRE1BQ19DU1RSeF9GRUQJCTB4MDAwMDAyMDAKKyNkZWZpbmUgRE1BQ19DU1RSeF9XRVIJCTB4MDAwMDA4MDAKKyNkZWZpbmUgRE1BQ19DU1RSeF9SRVIJCTB4MDAwMDEwMDAKKyNkZWZpbmUgRE1BQ19DU1RSeF9DRQkJMHgwMDAwMjAwMAorI2RlZmluZSBETUFDX0NTVFJ4X0lOVAkJMHgwMDgwMDAwMAorI2RlZmluZSBETUFDX0NTVFJ4X0JVU1kJCTB4ODAwMDAwMDAKKworI2RlZmluZSBETUFDX0NDVFJ4CQkweDEwCS8qIGNoYW5uZWwgY29udHJvbCByZWcgKi8KKyNkZWZpbmUgRE1BQ19DQ1RSeF9EU0laXzEJMHgwMDAwMDAwMAorI2RlZmluZSBETUFDX0NDVFJ4X0RTSVpfMgkweDAwMDAwMDAxCisjZGVmaW5lIERNQUNfQ0NUUnhfRFNJWl80CTB4MDAwMDAwMDIKKyNkZWZpbmUgRE1BQ19DQ1RSeF9EU0laXzMyCTB4MDAwMDAwMDUKKyNkZWZpbmUgRE1BQ19DQ1RSeF9EQVVfSE9MRAkweDAwMDAwMDAwCisjZGVmaW5lIERNQUNfQ0NUUnhfREFVX0lOQwkweDAwMDAwMDEwCisjZGVmaW5lIERNQUNfQ0NUUnhfREFVX0RFQwkweDAwMDAwMDIwCisjZGVmaW5lIERNQUNfQ0NUUnhfU1NJWl8xCTB4MDAwMDAwMDAKKyNkZWZpbmUgRE1BQ19DQ1RSeF9TU0laXzIJMHgwMDAwMDEwMAorI2RlZmluZSBETUFDX0NDVFJ4X1NTSVpfNAkweDAwMDAwMjAwCisjZGVmaW5lIERNQUNfQ0NUUnhfU1NJWl8zMgkweDAwMDAwNTAwCisjZGVmaW5lIERNQUNfQ0NUUnhfU0FVX0hPTEQJMHgwMDAwMDAwMAorI2RlZmluZSBETUFDX0NDVFJ4X1NBVV9JTkMJMHgwMDAwMTAwMAorI2RlZmluZSBETUFDX0NDVFJ4X1NBVV9ERUMJMHgwMDAwMjAwMAorI2RlZmluZSBETUFDX0NDVFJ4X0ZDCQkweDA4MDAwMDAwCisjZGVmaW5lIERNQUNfQ0NUUnhfSUNFCQkweDEwMDAwMDAwCisjZGVmaW5lIERNQUNfQ0NUUnhfSUUJCTB4NDAwMDAwMDAKKyNkZWZpbmUgRE1BQ19DQ1RSeF9BQ1QJCTB4ODAwMDAwMDAKKworI2RlZmluZSBETUFDX1NCQXgJCTB4MTgJLyogc291cmNlIGJhc2UgYWRkcmVzcyByZWcgKi8KKyNkZWZpbmUgRE1BQ19EQkF4CQkweDIwCS8qIGRhdGEgYmFzZSBhZGRyZXNzIHJlZyAqLworI2RlZmluZSBETUFDX1BJWHgJCTB4MjgJLyogcHJpbWFyeSBpbmRleCByZWcgKi8KKyNkZWZpbmUgRE1BQ19TSVh4CQkweDMwCS8qIHNlY29uZGFyeSBpbmRleCByZWcgKi8KKyNkZWZpbmUgRE1BQ19CQ0x4CQkweDM4CS8qIGJ5dGUgY291bnQgbGltaXQgcmVnICovCisjZGVmaW5lIERNQUNfQVBSeAkJMHg0MAkvKiBhbHRlcm5hdGUgcG9pbnRlciByZWcgKi8KKworLyoKKyAqIHJlcXVpcmVkIGZvciBQQ0kgKyBNT0RVTEVTCisgKi8KKyNpZmRlZiBDT05GSUdfUENJCitleHRlcm4gaW50IGlzYV9kbWFfYnJpZGdlX2J1Z2d5OworI2Vsc2UKKyNkZWZpbmUgaXNhX2RtYV9icmlkZ2VfYnVnZ3kgCSgwKQorI2VuZGlmCisKKyNlbmRpZiAvKiBfQVNNX0RNQV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvZWxmLmggYi9pbmNsdWRlL2FzbS1mcnYvZWxmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2QyMDk4ZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWZydi9lbGYuaApAQCAtMCwwICsxLDE0NyBAQAorLyogZWxmLmg6IEZSLVYgRUxGIGRlZmluaXRpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzIFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqIC0gRGVyaXZlZCBmcm9tIGluY2x1ZGUvYXNtLW02OGtub21tdS9lbGYuaAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpZm5kZWYgX19BU01fRUxGX0gKKyNkZWZpbmUgX19BU01fRUxGX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vdXNlci5oPgorCitzdHJ1Y3QgZWxmMzJfaGRyOworCisvKgorICogRUxGIGhlYWRlciBlX2ZsYWdzIGRlZmluZXMuCisgKi8KKyNkZWZpbmUgRUZfRlJWX0dQUl9NQVNLICAgICAgICAgMHgwMDAwMDAwMyAvKiBtYXNrIGZvciAjIG9mIGdwcnMgKi8KKyNkZWZpbmUgRUZfRlJWX0dQUjMyCQkweDAwMDAwMDAxIC8qIE9ubHkgdXNlcyBHUiBvbiAzMi1yZWdpc3RlciAqLworI2RlZmluZSBFRl9GUlZfR1BSNjQJCTB4MDAwMDAwMDIgLyogT25seSB1c2VzIEdSIG9uIDY0LXJlZ2lzdGVyICovCisjZGVmaW5lIEVGX0ZSVl9GUFJfTUFTSyAgICAgICAgIDB4MDAwMDAwMGMgLyogbWFzayBmb3IgIyBvZiBmcHJzICovCisjZGVmaW5lIEVGX0ZSVl9GUFIzMgkJMHgwMDAwMDAwNCAvKiBPbmx5IHVzZXMgRlIgb24gMzItcmVnaXN0ZXIgKi8KKyNkZWZpbmUgRUZfRlJWX0ZQUjY0CQkweDAwMDAwMDA4IC8qIE9ubHkgdXNlcyBGUiBvbiA2NC1yZWdpc3RlciAqLworI2RlZmluZSBFRl9GUlZfRlBSX05PTkUJCTB4MDAwMDAwMEMgLyogVXNlcyBzb2Z0d2FyZSBmbG9hdGluZy1wb2ludCAqLworI2RlZmluZSBFRl9GUlZfRFdPUkRfTUFTSyAgICAgICAweDAwMDAwMDMwIC8qIG1hc2sgZm9yIGR3b3JkIHN1cHBvcnQgKi8KKyNkZWZpbmUgRUZfRlJWX0RXT1JEX1lFUwkweDAwMDAwMDEwIC8qIEFzc3VtZXMgc3RhY2sgYWxpZ25lZCB0byA4LWJ5dGUgYm91bmRhcmllcy4gKi8KKyNkZWZpbmUgRUZfRlJWX0RXT1JEX05PCQkweDAwMDAwMDIwIC8qIEFzc3VtZXMgc3RhY2sgYWxpZ25lZCB0byA0LWJ5dGUgYm91bmRhcmllcy4gKi8KKyNkZWZpbmUgRUZfRlJWX0RPVUJMRQkJMHgwMDAwMDA0MCAvKiBVc2VzIGRvdWJsZSBpbnN0cnVjdGlvbnMuICovCisjZGVmaW5lIEVGX0ZSVl9NRURJQQkJMHgwMDAwMDA4MCAvKiBVc2VzIG1lZGlhIGluc3RydWN0aW9ucy4gKi8KKyNkZWZpbmUgRUZfRlJWX1BJQwkJMHgwMDAwMDEwMCAvKiBVc2VzIHBvc2l0aW9uIGluZGVwZW5kZW50IGNvZGUuICovCisjZGVmaW5lIEVGX0ZSVl9OT05fUElDX1JFTE9DUwkweDAwMDAwMjAwIC8qIERvZXMgbm90IHVzZSBwb3NpdGlvbiBJbmRlcGVuZGVudCBjb2RlLiAqLworI2RlZmluZSBFRl9GUlZfTVVMQUREICAgICAgICAgICAweDAwMDAwNDAwIC8qIC1tbXVsYWRkICovCisjZGVmaW5lIEVGX0ZSVl9CSUdQSUMgICAgICAgICAgIDB4MDAwMDA4MDAgLyogLWZQSUMgKi8KKyNkZWZpbmUgRUZfRlJWX0xJQlBJQyAgICAgICAgICAgMHgwMDAwMTAwMCAvKiAtbWxpYnJhcnktcGljICovCisjZGVmaW5lIEVGX0ZSVl9HMCAgICAgICAgICAgICAgIDB4MDAwMDIwMDAgLyogLUcgMCwgbm8gc21hbGwgZGF0YSBwdHIgKi8KKyNkZWZpbmUgRUZfRlJWX05PUEFDSyAgICAgICAgICAgMHgwMDAwNDAwMCAvKiAtbW5vcGFjayAqLworI2RlZmluZSBFRl9GUlZfRkRQSUMgICAgICAgICAgICAweDAwMDA4MDAwIC8qIC1tZmRwaWMgKi8KKyNkZWZpbmUgRUZfRlJWX0NQVV9NQVNLICAgICAgICAgMHhmZjAwMDAwMCAvKiBzcGVjaWZpYyBjcHUgYml0cyAqLworI2RlZmluZSBFRl9GUlZfQ1BVX0dFTkVSSUMJMHgwMDAwMDAwMCAvKiBTZXQgQ1BVIHR5cGUgaXMgRlItViAqLworI2RlZmluZSBFRl9GUlZfQ1BVX0ZSNTAwCTB4MDEwMDAwMDAgLyogU2V0IENQVSB0eXBlIGlzIEZSNTAwICovCisjZGVmaW5lIEVGX0ZSVl9DUFVfRlIzMDAJMHgwMjAwMDAwMCAvKiBTZXQgQ1BVIHR5cGUgaXMgRlIzMDAgKi8KKyNkZWZpbmUgRUZfRlJWX0NQVV9TSU1QTEUgICAgICAgMHgwMzAwMDAwMCAvKiBTSU1QTEUgKi8KKyNkZWZpbmUgRUZfRlJWX0NQVV9UT01DQVQgICAgICAgMHgwNDAwMDAwMCAvKiBUb21jYXQsIEZSNTAwIHByb3RvdHlwZSAqLworI2RlZmluZSBFRl9GUlZfQ1BVX0ZSNDAwCTB4MDUwMDAwMDAgLyogU2V0IENQVSB0eXBlIGlzIEZSNDAwICovCisjZGVmaW5lIEVGX0ZSVl9DUFVfRlI1NTAgICAgICAgIDB4MDYwMDAwMDAgLyogU2V0IENQVSB0eXBlIGlzIEZSNTUwICovCisjZGVmaW5lIEVGX0ZSVl9DUFVfRlI0MDUJMHgwNzAwMDAwMCAvKiBTZXQgQ1BVIHR5cGUgaXMgRlI0MDUgKi8KKyNkZWZpbmUgRUZfRlJWX0NQVV9GUjQ1MAkweDA4MDAwMDAwIC8qIFNldCBDUFUgdHlwZSBpcyBGUjQ1MCAqLworCisvKgorICogRlItViBFTEYgcmVsb2NhdGlvbiB0eXBlcworICovCisKKworLyoKKyAqIEVMRiByZWdpc3RlciBkZWZpbml0aW9ucy4uCisgKi8KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBlbGZfZ3JlZ190OworCisjZGVmaW5lIEVMRl9OR1JFRyAoc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKSAvIHNpemVvZihlbGZfZ3JlZ190KSkKK3R5cGVkZWYgZWxmX2dyZWdfdCBlbGZfZ3JlZ3NldF90W0VMRl9OR1JFR107CisKK3R5cGVkZWYgc3RydWN0IGZwbWVkaWFfc3RydWN0IGVsZl9mcHJlZ3NldF90OworCisvKgorICogVGhpcyBpcyB1c2VkIHRvIGVuc3VyZSB3ZSBkb24ndCBsb2FkIHNvbWV0aGluZyBmb3IgdGhlIHdyb25nIGFyY2hpdGVjdHVyZS4KKyAqLworZXh0ZXJuIGludCBlbGZfY2hlY2tfYXJjaChjb25zdCBzdHJ1Y3QgZWxmMzJfaGRyICpoZHIpOworCisjZGVmaW5lIGVsZl9jaGVja19mZHBpYyh4KSAoKHgpLT5lX2ZsYWdzICYgRUZfRlJWX0ZEUElDICYmICEoKHgpLT5lX2ZsYWdzICYgRUZfRlJWX05PTl9QSUNfUkVMT0NTKSkKKyNkZWZpbmUgZWxmX2NoZWNrX2NvbnN0X2Rpc3BsYWNlbWVudCh4KSAoKHgpLT5lX2ZsYWdzICYgRUZfRlJWX1BJQykKKworLyoKKyAqIFRoZXNlIGFyZSB1c2VkIHRvIHNldCBwYXJhbWV0ZXJzIGluIHRoZSBjb3JlIGR1bXBzLgorICovCisjZGVmaW5lIEVMRl9DTEFTUwlFTEZDTEFTUzMyCisjZGVmaW5lIEVMRl9EQVRBCUVMRkRBVEEyTVNCCisjZGVmaW5lIEVMRl9BUkNICUVNX0ZSVgorCisjZGVmaW5lIEVMRl9QTEFUX0lOSVQoX3IpCQkJXAorZG8gewkJCQkJCVwKKwlfX2tlcm5lbF9mcmFtZTBfcHRyLT5ncjE2CT0gMDsJXAorCV9fa2VybmVsX2ZyYW1lMF9wdHItPmdyMTcJPSAwOwlcCisJX19rZXJuZWxfZnJhbWUwX3B0ci0+Z3IxOAk9IDA7CVwKKwlfX2tlcm5lbF9mcmFtZTBfcHRyLT5ncjE5CT0gMDsJXAorCV9fa2VybmVsX2ZyYW1lMF9wdHItPmdyMjAJPSAwOwlcCisJX19rZXJuZWxfZnJhbWUwX3B0ci0+Z3IyMQk9IDA7CVwKKwlfX2tlcm5lbF9mcmFtZTBfcHRyLT5ncjIyCT0gMDsJXAorCV9fa2VybmVsX2ZyYW1lMF9wdHItPmdyMjMJPSAwOwlcCisJX19rZXJuZWxfZnJhbWUwX3B0ci0+Z3IyNAk9IDA7CVwKKwlfX2tlcm5lbF9mcmFtZTBfcHRyLT5ncjI1CT0gMDsJXAorCV9fa2VybmVsX2ZyYW1lMF9wdHItPmdyMjYJPSAwOwlcCisJX19rZXJuZWxfZnJhbWUwX3B0ci0+Z3IyNwk9IDA7CVwKKwlfX2tlcm5lbF9mcmFtZTBfcHRyLT5ncjI5CT0gMDsJXAorfSB3aGlsZSgwKQorCisjZGVmaW5lIEVMRl9GRFBJQ19QTEFUX0lOSVQoX3JlZ3MsIF9leGVjX21hcF9hZGRyLCBfaW50ZXJwX21hcF9hZGRyLCBfZHluYW1pY19hZGRyKQlcCitkbyB7CQkJCQkJCQkJCQlcCisJX19rZXJuZWxfZnJhbWUwX3B0ci0+Z3IxNgk9IF9leGVjX21hcF9hZGRyOwkJCQlcCisJX19rZXJuZWxfZnJhbWUwX3B0ci0+Z3IxNwk9IF9pbnRlcnBfbWFwX2FkZHI7CQkJCVwKKwlfX2tlcm5lbF9mcmFtZTBfcHRyLT5ncjE4CT0gX2R5bmFtaWNfYWRkcjsJCQkJXAorCV9fa2VybmVsX2ZyYW1lMF9wdHItPmdyMTkJPSAwOwkJCQkJCVwKKwlfX2tlcm5lbF9mcmFtZTBfcHRyLT5ncjIwCT0gMDsJCQkJCQlcCisJX19rZXJuZWxfZnJhbWUwX3B0ci0+Z3IyMQk9IDA7CQkJCQkJXAorCV9fa2VybmVsX2ZyYW1lMF9wdHItPmdyMjIJPSAwOwkJCQkJCVwKKwlfX2tlcm5lbF9mcmFtZTBfcHRyLT5ncjIzCT0gMDsJCQkJCQlcCisJX19rZXJuZWxfZnJhbWUwX3B0ci0+Z3IyNAk9IDA7CQkJCQkJXAorCV9fa2VybmVsX2ZyYW1lMF9wdHItPmdyMjUJPSAwOwkJCQkJCVwKKwlfX2tlcm5lbF9mcmFtZTBfcHRyLT5ncjI2CT0gMDsJCQkJCQlcCisJX19rZXJuZWxfZnJhbWUwX3B0ci0+Z3IyNwk9IDA7CQkJCQkJXAorCV9fa2VybmVsX2ZyYW1lMF9wdHItPmdyMjkJPSAwOwkJCQkJCVwKK30gd2hpbGUoMCkKKworI2RlZmluZSBVU0VfRUxGX0NPUkVfRFVNUAorI2RlZmluZSBFTEZfRVhFQ19QQUdFU0laRQkxNjM4NAorCisvKiBUaGlzIGlzIHRoZSBsb2NhdGlvbiB0aGF0IGFuIEVUX0RZTiBwcm9ncmFtIGlzIGxvYWRlZCBpZiBleGVjJ2VkLiAgVHlwaWNhbAorICAgdXNlIG9mIHRoaXMgaXMgdG8gaW52b2tlICIuL2xkLnNvIHNvbWVwcm9nIiB0byB0ZXN0IG91dCBhIG5ldyB2ZXJzaW9uIG9mCisgICB0aGUgbG9hZGVyLiAgV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBpdCBpcyBvdXQgb2YgdGhlIHdheSBvZiB0aGUgcHJvZ3JhbQorICAgdGhhdCBpdCB3aWxsICJleGVjIiwgYW5kIHRoYXQgdGhlcmUgaXMgc3VmZmljaWVudCByb29tIGZvciB0aGUgYnJrLiAgKi8KKworI2RlZmluZSBFTEZfRVRfRFlOX0JBU0UgICAgICAgICAweDA4MDAwMDAwVUwKKworI2RlZmluZSBFTEZfQ09SRV9DT1BZX1JFR1MocHJfcmVnLCByZWdzKQkJCQlcCisJbWVtY3B5KCZwcl9yZWdbMF0sICZyZWdzLT5zcCwgMzEgKiBzaXplb2YodWludDMyX3QpKTsKKworLyogVGhpcyB5aWVsZHMgYSBtYXNrIHRoYXQgdXNlciBwcm9ncmFtcyBjYW4gdXNlIHRvIGZpZ3VyZSBvdXQgd2hhdAorICAgaW5zdHJ1Y3Rpb24gc2V0IHRoaXMgY3B1IHN1cHBvcnRzLiAgKi8KKworI2RlZmluZSBFTEZfSFdDQVAJKDApCisKKy8qIFRoaXMgeWllbGRzIGEgc3RyaW5nIHRoYXQgbGQuc28gd2lsbCB1c2UgdG8gbG9hZCBpbXBsZW1lbnRhdGlvbgorICAgc3BlY2lmaWMgbGlicmFyaWVzIGZvciBvcHRpbWl6YXRpb24uICBUaGlzIGlzIG1vcmUgc3BlY2lmaWMgaW4KKyAgIGludGVudCB0aGFuIHBva2luZyBhdCB1bmFtZSBvciAvcHJvYy9jcHVpbmZvLiAgKi8KKworI2RlZmluZSBFTEZfUExBVEZPUk0gIChOVUxMKQorCisjaWZkZWYgX19LRVJORUxfXworI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgsIGliY3MyKSBzZXRfcGVyc29uYWxpdHkoKGliY3MyKT9QRVJfU1ZSNDpQRVJfTElOVVgpCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvZXJybm8uaCBiL2luY2x1ZGUvYXNtLWZydi9lcnJuby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwMTA3OTVjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tZnJ2L2Vycm5vLmgKQEAgLTAsMCArMSw3IEBACisjaWZuZGVmIF9BU01fRVJSTk9fSAorI2RlZmluZSBfQVNNX0VSUk5PX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2Vycm5vLmg+CisKKyNlbmRpZiAvKiBfQVNNX0VSUk5PX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L2ZjbnRsLmggYi9pbmNsdWRlL2FzbS1mcnYvZmNudGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjFiOTk5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tZnJ2L2ZjbnRsLmgKQEAgLTAsMCArMSw4OCBAQAorI2lmbmRlZiBfQVNNX0ZDTlRMX0gKKyNkZWZpbmUgX0FTTV9GQ05UTF9ICisKKy8qIG9wZW4vZmNudGwgLSBPX1NZTkMgaXMgb25seSBpbXBsZW1lbnRlZCBvbiBibG9ja3MgZGV2aWNlcyBhbmQgb24gZmlsZXMKKyAgIGxvY2F0ZWQgb24gYW4gZXh0MiBmaWxlIHN5c3RlbSAqLworI2RlZmluZSBPX0FDQ01PREUJICAgMDAwMworI2RlZmluZSBPX1JET05MWQkgICAgIDAwCisjZGVmaW5lIE9fV1JPTkxZCSAgICAgMDEKKyNkZWZpbmUgT19SRFdSCQkgICAgIDAyCisjZGVmaW5lIE9fQ1JFQVQJCSAgIDAxMDAJLyogbm90IGZjbnRsICovCisjZGVmaW5lIE9fRVhDTAkJICAgMDIwMAkvKiBub3QgZmNudGwgKi8KKyNkZWZpbmUgT19OT0NUVFkJICAgMDQwMAkvKiBub3QgZmNudGwgKi8KKyNkZWZpbmUgT19UUlVOQwkJICAwMTAwMAkvKiBub3QgZmNudGwgKi8KKyNkZWZpbmUgT19BUFBFTkQJICAwMjAwMAorI2RlZmluZSBPX05PTkJMT0NLCSAgMDQwMDAKKyNkZWZpbmUgT19OREVMQVkJT19OT05CTE9DSworI2RlZmluZSBPX1NZTkMJCSAwMTAwMDAKKyNkZWZpbmUgRkFTWU5DCQkgMDIwMDAwCS8qIGZjbnRsLCBmb3IgQlNEIGNvbXBhdGliaWxpdHkgKi8KKyNkZWZpbmUgT19ESVJFQ1QJIDA0MDAwMAkvKiBkaXJlY3QgZGlzayBhY2Nlc3MgaGludCAqLworI2RlZmluZSBPX0xBUkdFRklMRQkwMTAwMDAwCisjZGVmaW5lIE9fRElSRUNUT1JZCTAyMDAwMDAJLyogbXVzdCBiZSBhIGRpcmVjdG9yeSAqLworI2RlZmluZSBPX05PRk9MTE9XCTA0MDAwMDAgLyogZG9uJ3QgZm9sbG93IGxpbmtzICovCisjZGVmaW5lIE9fTk9BVElNRQkwMTAwMDAwMAorCisjZGVmaW5lIEZfRFVQRkQJCTAJLyogZHVwICovCisjZGVmaW5lIEZfR0VURkQJCTEJLyogZ2V0IGNsb3NlX29uX2V4ZWMgKi8KKyNkZWZpbmUgRl9TRVRGRAkJMgkvKiBzZXQvY2xlYXIgY2xvc2Vfb25fZXhlYyAqLworI2RlZmluZSBGX0dFVEZMCQkzCS8qIGdldCBmaWxlLT5mX2ZsYWdzICovCisjZGVmaW5lIEZfU0VURkwJCTQJLyogc2V0IGZpbGUtPmZfZmxhZ3MgKi8KKyNkZWZpbmUgRl9HRVRMSwkJNQorI2RlZmluZSBGX1NFVExLCQk2CisjZGVmaW5lIEZfU0VUTEtXCTcKKworI2RlZmluZSBGX1NFVE9XTgk4CS8qICBmb3Igc29ja2V0cy4gKi8KKyNkZWZpbmUgRl9HRVRPV04JOQkvKiAgZm9yIHNvY2tldHMuICovCisjZGVmaW5lIEZfU0VUU0lHCTEwCS8qICBmb3Igc29ja2V0cy4gKi8KKyNkZWZpbmUgRl9HRVRTSUcJMTEJLyogIGZvciBzb2NrZXRzLiAqLworCisjZGVmaW5lIEZfR0VUTEs2NAkxMgkvKiAgdXNpbmcgJ3N0cnVjdCBmbG9jazY0JyAqLworI2RlZmluZSBGX1NFVExLNjQJMTMKKyNkZWZpbmUgRl9TRVRMS1c2NAkxNAorCisvKiBmb3IgRl9bR0VUfFNFVF1GTCAqLworI2RlZmluZSBGRF9DTE9FWEVDCTEJLyogYWN0dWFsbHkgYW55dGhpbmcgd2l0aCBsb3cgYml0IHNldCBnb2VzICovCisKKy8qIGZvciBwb3NpeCBmY250bCgpIGFuZCBsb2NrZigpICovCisjZGVmaW5lIEZfUkRMQ0sJCTAKKyNkZWZpbmUgRl9XUkxDSwkJMQorI2RlZmluZSBGX1VOTENLCQkyCisKKy8qIGZvciBvbGQgaW1wbGVtZW50YXRpb24gb2YgYnNkIGZsb2NrICgpICovCisjZGVmaW5lIEZfRVhMQ0sJCTQJLyogb3IgMyAqLworI2RlZmluZSBGX1NITENLCQk4CS8qIG9yIDQgKi8KKworLyogZm9yIGxlYXNlcyAqLworI2RlZmluZSBGX0lOUFJPR1JFU1MJMTYKKworLyogb3BlcmF0aW9ucyBmb3IgYnNkIGZsb2NrKCksIGFsc28gdXNlZCBieSB0aGUga2VybmVsIGltcGxlbWVudGF0aW9uICovCisjZGVmaW5lIExPQ0tfU0gJCTEJLyogc2hhcmVkIGxvY2sgKi8KKyNkZWZpbmUgTE9DS19FWAkJMgkvKiBleGNsdXNpdmUgbG9jayAqLworI2RlZmluZSBMT0NLX05CCQk0CS8qIG9yJ2Qgd2l0aCBvbmUgb2YgdGhlIGFib3ZlIHRvIHByZXZlbnQKKwkJCQkgICBibG9ja2luZyAqLworI2RlZmluZSBMT0NLX1VOCQk4CS8qIHJlbW92ZSBsb2NrICovCisKKyNkZWZpbmUgTE9DS19NQU5ECTMyCS8qIFRoaXMgaXMgYSBtYW5kYXRvcnkgZmxvY2sgKi8KKyNkZWZpbmUgTE9DS19SRUFECTY0CS8qIC4uLiBXaGljaCBhbGxvd3MgY29uY3VycmVudCByZWFkIG9wZXJhdGlvbnMgKi8KKyNkZWZpbmUgTE9DS19XUklURQkxMjgJLyogLi4uIFdoaWNoIGFsbG93cyBjb25jdXJyZW50IHdyaXRlIG9wZXJhdGlvbnMgKi8KKyNkZWZpbmUgTE9DS19SVwkJMTkyCS8qIC4uLiBXaGljaCBhbGxvd3MgY29uY3VycmVudCByZWFkICYgd3JpdGUgb3BzICovCisKK3N0cnVjdCBmbG9jayB7CisJc2hvcnQgbF90eXBlOworCXNob3J0IGxfd2hlbmNlOworCW9mZl90IGxfc3RhcnQ7CisJb2ZmX3QgbF9sZW47CisJcGlkX3QgbF9waWQ7Cit9OworCitzdHJ1Y3QgZmxvY2s2NCB7CisJc2hvcnQgIGxfdHlwZTsKKwlzaG9ydCAgbF93aGVuY2U7CisJbG9mZl90IGxfc3RhcnQ7CisJbG9mZl90IGxfbGVuOworCXBpZF90ICBsX3BpZDsKK307CisKKyNkZWZpbmUgRl9MSU5VWF9TUEVDSUZJQ19CQVNFCTEwMjQKKyNlbmRpZiAvKiBfQVNNX0ZDTlRMX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L2ZwdS5oIGIvaW5jbHVkZS9hc20tZnJ2L2ZwdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxMTc4ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1mcnYvZnB1LmgKQEAgLTAsMCArMSwxMiBAQAorI2lmbmRlZiBfX0FTTV9GUFVfSAorI2RlZmluZSBfX0FTTV9GUFVfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKy8qCisgKiBNQVggZmxvYXRpbmcgcG9pbnQgdW5pdCBzdGF0ZSBzaXplIChGU0FWRS9GUkVTVE9SRSkKKyAqLworCisjZGVmaW5lIGtlcm5lbF9mcHVfZW5kKCkgZG8geyBhc20gdm9sYXRpbGUoImJhciI6OjoibWVtb3J5Iik7IHByZWVtcHRfZW5hYmxlKCk7IH0gd2hpbGUoMCkKKworI2VuZGlmIC8qIF9fQVNNX0ZQVV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvZ2RiLXN0dWIuaCBiL2luY2x1ZGUvYXNtLWZydi9nZGItc3R1Yi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1ODQ3OWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1mcnYvZ2RiLXN0dWIuaApAQCAtMCwwICsxLDExOCBAQAorLyogZ2RiLXN0dWIuaDogRlJWIEdEQiBzdHViCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzIFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqIC0gRGVyaXZlZCBmcm9tIGFzbS1taXBzL2dkYi1zdHViLmggKGMpIDE5OTUgQW5kcmVhcyBCdXNzZQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpZm5kZWYgX19BU01fR0RCX1NUVUJfSAorI2RlZmluZSBfX0FTTV9HREJfU1RVQl9ICisKKyN1bmRlZiBHREJTVFVCX0RFQlVHX1BST1RPQ09MCisKKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisKKy8qCisgKiBpbXBvcnRhbnQgcmVnaXN0ZXIgbnVtYmVycyBpbiBHREIgcHJvdG9jb2wKKyAqIC0gR1IwLCAgR1IxLCAgR1IyLCAgR1IzLCAgR1I0LCAgR1I1LCAgR1I2LCAgR1I3LAorICogLSBHUjgsICBHUjksICBHUjEwLCBHUjExLCBHUjEyLCBHUjEzLCBHUjE0LCBHUjE1LAorICogLSBHUjE2LCBHUjE3LCBHUjE4LCBHUjE5LCBHUjIwLCBHUjIxLCBHUjIyLCBHUjIzLAorICogLSBHUjI0LCBHUjI1LCBHUjI2LCBHUjI3LCBHUjI4LCBHUjI5LCBHUjMwLCBHUjMxLAorICogLSBHUjMyLCBHUjMzLCBHUjM0LCBHUjM1LCBHUjM2LCBHUjM3LCBHUjM4LCBHUjM5LAorICogLSBHUjQwLCBHUjQxLCBHUjQyLCBHUjQzLCBHUjQ0LCBHUjQ1LCBHUjQ2LCBHUjQ3LAorICogLSBHUjQ4LCBHUjQ5LCBHUjUwLCBHUjUxLCBHUjUyLCBHUjUzLCBHUjU0LCBHUjU1LAorICogLSBHUjU2LCBHUjU3LCBHUjU4LCBHUjU5LCBHUjYwLCBHUjYxLCBHUjYyLCBHUjYzLAorICogLSBGUjAsICBGUjEsICBGUjIsICBGUjMsICBGUjQsICBGUjUsICBGUjYsICBGUjcsCisgKiAtIEZSOCwgIEZSOSwgIEZSMTAsIEZSMTEsIEZSMTIsIEZSMTMsIEZSMTQsIEZSMTUsCisgKiAtIEZSMTYsIEZSMTcsIEZSMTgsIEZSMTksIEZSMjAsIEZSMjEsIEZSMjIsIEZSMjMsCisgKiAtIEZSMjQsIEZSMjUsIEZSMjYsIEZSMjcsIEZSMjgsIEZSMjksIEZSMzAsIEZSMzEsCisgKiAtIEZSMzIsIEZSMzMsIEZSMzQsIEZSMzUsIEZSMzYsIEZSMzcsIEZSMzgsIEZSMzksCisgKiAtIEZSNDAsIEZSNDEsIEZSNDIsIEZSNDMsIEZSNDQsIEZSNDUsIEZSNDYsIEZSNDcsCisgKiAtIEZSNDgsIEZSNDksIEZSNTAsIEZSNTEsIEZSNTIsIEZSNTMsIEZSNTQsIEZSNTUsCisgKiAtIEZSNTYsIEZSNTcsIEZSNTgsIEZSNTksIEZSNjAsIEZSNjEsIEZSNjIsIEZSNjMsCisgKiAtIFBDLCBQU1IsIENDUiwgQ0NDUiwKKyAqIC0gX1gxMzIsIF9YMTMzLCBfWDEzNAorICogLSBUQlIsIEJSUiwgREJBUjAsIERCQVIxLCBEQkFSMiwgREJBUjMsCisgKiAtIFNDUjAsIFNDUjEsIFNDUjIsIFNDUjMsCisgKiAtIExSLCBMQ1IsCisgKiAtIElBQ0MwSCwgSUFDQzBMLAorICogLSBGU1IwLAorICogLSBBQ0MwLCBBQ0MxLCBBQ0MyLCBBQ0MzLCBBQ0M0LCBBQ0M1LCBBQ0M2LCBBQ0M3LAorICogLSBBQ0NHMDEyMywgQUNDRzQ1NjcsCisgKiAtIE1TUjAsIE1TUjEsCisgKiAtIEdORVIwLCBHTkVSMSwKKyAqIC0gRk5FUjAsIEZORVIxLAorICovCisjZGVmaW5lIEdEQl9SRUdfR1IoTikJKE4pCisjZGVmaW5lIEdEQl9SRUdfRlIoTikJKDY0KyhOKSkKKyNkZWZpbmUgR0RCX1JFR19QQwkxMjgKKyNkZWZpbmUgR0RCX1JFR19QU1IJMTI5CisjZGVmaW5lIEdEQl9SRUdfQ0NSCTEzMAorI2RlZmluZSBHREJfUkVHX0NDQ1IJMTMxCisjZGVmaW5lIEdEQl9SRUdfVEJSCTEzNQorI2RlZmluZSBHREJfUkVHX0JSUgkxMzYKKyNkZWZpbmUgR0RCX1JFR19EQkFSKE4pCSgxMzcrKE4pKQorI2RlZmluZSBHREJfUkVHX1NDUihOKQkoMTQxKyhOKSkKKyNkZWZpbmUgR0RCX1JFR19MUgkxNDUKKyNkZWZpbmUgR0RCX1JFR19MQ1IJMTQ2CisjZGVmaW5lIEdEQl9SRUdfRlNSMAkxNDkKKyNkZWZpbmUgR0RCX1JFR19BQ0MoTikJKDE1MCsoTikpCisjZGVmaW5lIEdEQl9SRUdfQUNDRyhOKQkoMTU4KyhOKS80KQorI2RlZmluZSBHREJfUkVHX01TUihOKQkoMTYwKyhOKSkKKyNkZWZpbmUgR0RCX1JFR19HTkVSKE4pCSgxNjIrKE4pKQorI2RlZmluZSBHREJfUkVHX0ZORVIoTikJKDE2NCsoTikpCisKKyNkZWZpbmUgR0RCX1JFR19TUAlHREJfUkVHX0dSKDEpCisjZGVmaW5lIEdEQl9SRUdfRlAJR0RCX1JFR19HUigyKQorCisjaWZuZGVmIF9MQU5HVUFHRV9BU1NFTUJMWQorCisvKgorICogUHJvdG90eXBlcworICovCitleHRlcm4gdm9pZCBzaG93X3JlZ2lzdGVyc19vbmx5KHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworZXh0ZXJuIHZvaWQgZ2Ric3R1Yl9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgZ2Ric3R1YihpbnQgdHlwZSk7CitleHRlcm4gdm9pZCBnZGJzdHViX2V4aXQoaW50IHN0YXR1cyk7CisKK2V4dGVybiB2b2lkIGdkYnN0dWJfaW9faW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIGdkYnN0dWJfc2V0X2JhdWQodW5zaWduZWQgYmF1ZCk7CitleHRlcm4gaW50IGdkYnN0dWJfcnhfY2hhcih1bnNpZ25lZCBjaGFyICpfY2gsIGludCBub25ibG9jayk7CitleHRlcm4gdm9pZCBnZGJzdHViX3R4X2NoYXIodW5zaWduZWQgY2hhciBjaCk7CitleHRlcm4gdm9pZCBnZGJzdHViX3R4X2ZsdXNoKHZvaWQpOworZXh0ZXJuIHZvaWQgZ2Ric3R1Yl9kb19yeCh2b2lkKTsKKworZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBfX2RlYnVnX3N0dWJfaW5pdF9icmVhayh2b2lkKTsKK2V4dGVybiBhc21saW5rYWdlIHZvaWQgX19icmVha19oaWphY2tfa2VybmVsX2V2ZW50KHZvaWQpOworZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBzdGFydF9rZXJuZWwodm9pZCk7CisKK2V4dGVybiBhc21saW5rYWdlIHZvaWQgZ2Ric3R1Yl9yeF9oYW5kbGVyKHZvaWQpOworZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBnZGJzdHViX3J4X2lycSh2b2lkKTsKK2V4dGVybiBhc21saW5rYWdlIHZvaWQgZ2Ric3R1Yl9pbnRlcmNlcHQodm9pZCk7CisKK2V4dGVybiB1aW50MzJfdCBfX2VudHJ5X3VzZXJ0cmFwX3RhYmxlW107CitleHRlcm4gdWludDMyX3QgX19lbnRyeV9rZXJuZWx0cmFwX3RhYmxlW107CisKK2V4dGVybiB2b2xhdGlsZSB1OAlnZGJzdHViX3J4X2J1ZmZlcltQQUdFX1NJWkVdOworZXh0ZXJuIHZvbGF0aWxlIHUzMglnZGJzdHViX3J4X2lucDsKK2V4dGVybiB2b2xhdGlsZSB1MzIJZ2Ric3R1Yl9yeF9vdXRwOworZXh0ZXJuIHZvbGF0aWxlIHU4CWdkYnN0dWJfcnhfb3ZlcmZsb3c7CitleHRlcm4gdTgJCWdkYnN0dWJfcnhfdW5nZXQ7CisKK2V4dGVybiB2b2lkIGdkYnN0dWJfcHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKK2V4dGVybiB2b2lkIGRlYnVnX3RvX3NlcmlhbChjb25zdCBjaGFyICpwLCBpbnQgbik7CitleHRlcm4gdm9pZCBjb25zb2xlX3NldF9iYXVkKHVuc2lnbmVkIGJhdWQpOworCisjaWZkZWYgR0RCU1RVQl9ERUJVR19QUk9UT0NPTAorI2RlZmluZSBnZGJzdHViX3Byb3RvKEZNVCwuLi4pIGdkYnN0dWJfcHJpbnRrKEZNVCwjI19fVkFfQVJHU19fKQorI2Vsc2UKKyNkZWZpbmUgZ2Ric3R1Yl9wcm90byhGTVQsLi4uKSAoeyAwOyB9KQorI2VuZGlmCisKKyNlbmRpZiAvKiBfTEFOR1VBR0VfQVNTRU1CTFkgKi8KKyNlbmRpZiAvKiBfX0FTTV9HREJfU1RVQl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvZ3Bpby1yZWdzLmggYi9pbmNsdWRlL2FzbS1mcnYvZ3Bpby1yZWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWVkZjVkNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWZydi9ncGlvLXJlZ3MuaApAQCAtMCwwICsxLDExNiBAQAorLyogZ3Bpby1yZWdzLmg6IG9uLWNoaXAgZ2VuZXJhbCBwdXJwb3NlIEkvTyByZWdpc3RlcnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfQVNNX0dQSU9fUkVHUworI2RlZmluZSBfQVNNX0dQSU9fUkVHUworCisjZGVmaW5lIF9fcmVnKEFERFIpICgqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoQUREUikpCisKKyNkZWZpbmUgX19nZXRfUERSKCkJKHsgX19yZWcoMHhmZWZmMDQwMCk7IH0pCisjZGVmaW5lIF9fc2V0X1BEUihWKQlkbyB7IF9fcmVnKDB4ZmVmZjA0MDApID0gKFYpOyBtYigpOyB9IHdoaWxlKDApCisKKyNkZWZpbmUgX19nZXRfR1BEUigpCSh7IF9fcmVnKDB4ZmVmZjA0MDgpOyB9KQorI2RlZmluZSBfX3NldF9HUERSKFYpCWRvIHsgX19yZWcoMHhmZWZmMDQwOCkgPSAoVik7IG1iKCk7IH0gd2hpbGUoMCkKKworI2RlZmluZSBfX2dldF9TSVIoKQkoeyBfX3JlZygweGZlZmYwNDEwKTsgfSkKKyNkZWZpbmUgX19zZXRfU0lSKFYpCWRvIHsgX19yZWcoMHhmZWZmMDQxMCkgPSAoVik7IG1iKCk7IH0gd2hpbGUoMCkKKworI2RlZmluZSBfX2dldF9TT1IoKQkoeyBfX3JlZygweGZlZmYwNDE4KTsgfSkKKyNkZWZpbmUgX19zZXRfU09SKFYpCWRvIHsgX19yZWcoMHhmZWZmMDQxOCkgPSAoVik7IG1iKCk7IH0gd2hpbGUoMCkKKworI2RlZmluZSBfX3NldF9QRFNSKFYpCWRvIHsgX19yZWcoMHhmZWZmMDQyMCkgPSAoVik7IG1iKCk7IH0gd2hpbGUoMCkKKworI2RlZmluZSBfX3NldF9QRENSKFYpCWRvIHsgX19yZWcoMHhmZWZmMDQyOCkgPSAoVik7IG1iKCk7IH0gd2hpbGUoMCkKKworI2RlZmluZSBfX2dldF9SU1RSKCkJKHsgX19yZWcoMHhmZWZmMDUwMCk7IH0pCisjZGVmaW5lIF9fc2V0X1JTVFIoVikJZG8geyBfX3JlZygweGZlZmYwNTAwKSA9IChWKTsgbWIoKTsgfSB3aGlsZSgwKQorCisKKworLyogUERSIGRlZmluaXRpb25zICovCisjZGVmaW5lIFBEUl9HUElPX0RBVEEoWCkJKDEgPDwgKFgpKQorCisvKiBHUERSIGRlZmluaXRpb25zICovCisjZGVmaW5lIEdQRFJfSU5QVVQJCTAKKyNkZWZpbmUgR1BEUl9PVVRQVVQJCTEKKyNkZWZpbmUgR1BEUl9EUkVRMF9CSVQJCTB4MDAwMDEwMDAKKyNkZWZpbmUgR1BEUl9EUkVRMV9CSVQJCTB4MDAwMDgwMDAKKyNkZWZpbmUgR1BEUl9EUkVRMl9CSVQJCTB4MDAwNDAwMDAKKyNkZWZpbmUgR1BEUl9EUkVRM19CSVQJCTB4MDAwODAwMDAKKyNkZWZpbmUgR1BEUl9EUkVRNF9CSVQJCTB4MDAwMDQwMDAKKyNkZWZpbmUgR1BEUl9EUkVRNV9CSVQJCTB4MDAwMjAwMDAKKyNkZWZpbmUgR1BEUl9EUkVRNl9CSVQJCTB4MDAxMDAwMDAKKyNkZWZpbmUgR1BEUl9EUkVRN19CSVQJCTB4MDAyMDAwMDAKKyNkZWZpbmUgR1BEUl9EQUNLMF9CSVQJCTB4MDAwMDIwMDAKKyNkZWZpbmUgR1BEUl9EQUNLMV9CSVQJCTB4MDAwMTAwMDAKKyNkZWZpbmUgR1BEUl9EQUNLMl9CSVQJCTB4MDAxMDAwMDAKKyNkZWZpbmUgR1BEUl9EQUNLM19CSVQJCTB4MDAyMDAwMDAKKyNkZWZpbmUgR1BEUl9ET05FMF9CSVQJCTB4MDAwMDQwMDAKKyNkZWZpbmUgR1BEUl9ET05FMV9CSVQJCTB4MDAwMjAwMDAKKyNkZWZpbmUgR1BEUl9HUElPX0RJUihYLEQpCSgoRCkgPDwgKFgpKQorCisvKiBTSVIgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0lSX0dQSU9fSU5QVVQJCTAKKyNkZWZpbmUgU0lSX0RSRVE3X0lOUFVUCQkweDAwMjAwMDAwCisjZGVmaW5lIFNJUl9EUkVRNl9JTlBVVAkJMHgwMDEwMDAwMAorI2RlZmluZSBTSVJfRFJFUTNfSU5QVVQJCTB4MDAwODAwMDAKKyNkZWZpbmUgU0lSX0RSRVEyX0lOUFVUCQkweDAwMDQwMDAwCisjZGVmaW5lIFNJUl9EUkVRNV9JTlBVVAkJMHgwMDAyMDAwMAorI2RlZmluZSBTSVJfRFJFUTFfSU5QVVQJCTB4MDAwMDgwMDAKKyNkZWZpbmUgU0lSX0RSRVE0X0lOUFVUCQkweDAwMDA0MDAwCisjZGVmaW5lIFNJUl9EUkVRMF9JTlBVVAkJMHgwMDAwMTAwMAorI2RlZmluZSBTSVJfUlhEMV9JTlBVVAkJMHgwMDAwMDQwMAorI2RlZmluZSBTSVJfQ1RTMF9JTlBVVAkJMHgwMDAwMDEwMAorI2RlZmluZSBTSVJfUlhEMF9JTlBVVAkJMHgwMDAwMDA0MAorI2RlZmluZSBTSVJfR0FURTFfSU5QVVQJCTB4MDAwMDAwMjAKKyNkZWZpbmUgU0lSX0dBVEUwX0lOUFVUCQkweDAwMDAwMDEwCisjZGVmaW5lIFNJUl9JUlEzX0lOUFVUCQkweDAwMDAwMDA4CisjZGVmaW5lIFNJUl9JUlEyX0lOUFVUCQkweDAwMDAwMDA0CisjZGVmaW5lIFNJUl9JUlExX0lOUFVUCQkweDAwMDAwMDAyCisjZGVmaW5lIFNJUl9JUlEwX0lOUFVUCQkweDAwMDAwMDAxCisjZGVmaW5lIFNJUl9EUkVRX0JJVFMJCShTSVJfRFJFUTBfSU5QVVQgfCBTSVJfRFJFUTFfSU5QVVQgfCBcCisJCQkJIFNJUl9EUkVRMl9JTlBVVCB8IFNJUl9EUkVRM19JTlBVVCB8IFwKKwkJCQkgU0lSX0RSRVE0X0lOUFVUIHwgU0lSX0RSRVE1X0lOUFVUIHwgXAorCQkJCSBTSVJfRFJFUTZfSU5QVVQgfCBTSVJfRFJFUTdfSU5QVVQpCisKKy8qIFNPUiBkZWZpbml0aW9ucyAqLworI2RlZmluZSBTT1JfR1BJT19PVVRQVVQJCTAKKyNkZWZpbmUgU09SX0RBQ0szX09VVFBVVAkweDAwMjAwMDAwCisjZGVmaW5lIFNPUl9EQUNLMl9PVVRQVVQJMHgwMDEwMDAwMAorI2RlZmluZSBTT1JfRE9ORTFfT1VUUFVUCTB4MDAwMjAwMDAKKyNkZWZpbmUgU09SX0RBQ0sxX09VVFBVVAkweDAwMDEwMDAwCisjZGVmaW5lIFNPUl9ET05FMF9PVVRQVVQJMHgwMDAwNDAwMAorI2RlZmluZSBTT1JfREFDSzBfT1VUUFVUCTB4MDAwMDIwMDAKKyNkZWZpbmUgU09SX1RYRDFfT1VUUFVUCQkweDAwMDAwODAwCisjZGVmaW5lIFNPUl9SVFMwX09VVFBVVAkJMHgwMDAwMDIwMAorI2RlZmluZSBTT1JfVFhEMF9PVVRQVVQJCTB4MDAwMDAwODAKKyNkZWZpbmUgU09SX1RPVVQxX09VVFBVVAkweDAwMDAwMDIwCisjZGVmaW5lIFNPUl9UT1VUMF9PVVRQVVQJMHgwMDAwMDAxMAorI2RlZmluZSBTT1JfRE9ORV9CSVRTCQkoU09SX0RPTkUwX09VVFBVVCB8IFNPUl9ET05FMV9PVVRQVVQpCisjZGVmaW5lIFNPUl9EQUNLX0JJVFMJCShTT1JfREFDSzBfT1VUUFVUIHwgU09SX0RBQ0sxX09VVFBVVCB8IFwKKwkJCQkgU09SX0RBQ0syX09VVFBVVCB8IFNPUl9EQUNLM19PVVRQVVQpCisKKy8qIFBEU1IgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgUERTUl9VTkNIQU5HRUQJCTAKKyNkZWZpbmUgUERTUl9TRVRfQklUKFgpCQkoMSA8PCAoWCkpCisKKy8qIFBEQ1IgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgUERDUl9VTkNIQU5HRUQJCTAKKyNkZWZpbmUgUERDUl9DTEVBUl9CSVQoWCkJKDEgPDwgKFgpKQorCisvKiBSU1RSIGRlZmluaXRpb25zICovCisvKiBSZWFkIE9ubHkgKi8KKyNkZWZpbmUgUlNUUl9QT1dFUk9OCQkweDAwMDAwNDAwCisjZGVmaW5lIFJTVFJfU09GVFJFU0VUX1NUQVRVUwkweDAwMDAwMTAwCisvKiBXcml0ZSBPbmx5ICovCisjZGVmaW5lIFJTVFJfU09GVFJFU0VUCQkweDAwMDAwMDAxCisKKyNlbmRpZiAvKiBfQVNNX0dQSU9fUkVHUyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L2hhcmRpcnEuaCBiL2luY2x1ZGUvYXNtLWZydi9oYXJkaXJxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI0OGNhMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWZydi9oYXJkaXJxLmgKQEAgLTAsMCArMSwzMCBAQAorLyogaGFyZGlycS5oOiBGUlYgaGFyZHdhcmUgSVJRIG1hbmFnZW1lbnQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfX0FTTV9IQVJESVJRX0gKKyNkZWZpbmUgX19BU01fSEFSRElSUV9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQgX19zb2Z0aXJxX3BlbmRpbmc7CisJdW5zaWduZWQgbG9uZyBpZGxlX3RpbWVzdGFtcDsKK30gX19fX2NhY2hlbGluZV9hbGlnbmVkIGlycV9jcHVzdGF0X3Q7CisKKyNpbmNsdWRlIDxsaW51eC9pcnFfY3B1c3RhdC5oPgkvKiBTdGFuZGFyZCBtYXBwaW5ncyBmb3IgaXJxX2NwdXN0YXRfdCBhYm92ZSAqLworCisjaWZkZWYgQ09ORklHX1NNUAorI2Vycm9yIFNNUCBub3QgYXZhaWxhYmxlIG9uIEZSLVYKKyNlbmRpZiAvKiBDT05GSUdfU01QICovCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvaGlnaG1lbS5oIGIvaW5jbHVkZS9hc20tZnJ2L2hpZ2htZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTVmNzRhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tZnJ2L2hpZ2htZW0uaApAQCAtMCwwICsxLDE4MSBAQAorLyogaGlnaG1lbS5oOiB2aXJ0dWFsIGtlcm5lbCBtZW1vcnkgbWFwcGluZ3MgZm9yIGhpZ2ggbWVtb3J5CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqIC0gRGVyaXZlZCBmcm9tIGluY2x1ZGUvYXNtLWkzODYvaGlnaG1lbS5oCisgKgorICogU2VlIERvY3VtZW50YXRpb24vZnVqaXRzdS9mcnYvbW11LWxheW91dC50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9BU01fSElHSE1FTV9ICisjZGVmaW5lIF9BU01fSElHSE1FTV9ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8YXNtL21lbS1sYXlvdXQuaD4KKyNpbmNsdWRlIDxhc20vc3ByLXJlZ3MuaD4KKyNpbmNsdWRlIDxhc20vbWItcmVncy5oPgorCisjZGVmaW5lIE5SX1RMQl9MSU5FUwkJNjQJLyogbnVtYmVyIG9mIGxpbmVzIGluIHRoZSBUTEIgKi8KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGFzbS9rbWFwX3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKworI2lmZGVmIENPTkZJR19ERUJVR19ISUdITUVNCisjZGVmaW5lIEhJR0hNRU1fREVCVUcgMQorI2Vsc2UKKyNkZWZpbmUgSElHSE1FTV9ERUJVRyAwCisjZW5kaWYKKworLyogZGVjbGFyYXRpb25zIGZvciBoaWdobWVtLmMgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIGhpZ2hzdGFydF9wZm4sIGhpZ2hlbmRfcGZuOworCisjZGVmaW5lIGttYXBfcHJvdCBQQUdFX0tFUk5FTAorI2RlZmluZSBrbWFwX3B0ZSBfX19fX19rbWFwX3B0ZV9pbl9UTEIKK2V4dGVybiBwdGVfdCAqcGttYXBfcGFnZV90YWJsZTsKKworI2RlZmluZSBmbHVzaF9jYWNoZV9rbWFwcygpICBkbyB7IH0gd2hpbGUgKDApCisKKy8qCisgKiBSaWdodCBub3cgd2UgaW5pdGlhbGl6ZSBvbmx5IGEgc2luZ2xlIHB0ZSB0YWJsZS4gSXQgY2FuIGJlIGV4dGVuZGVkCisgKiBlYXNpbHksIHN1YnNlcXVlbnQgcHRlIHRhYmxlcyBoYXZlIHRvIGJlIGFsbG9jYXRlZCBpbiBvbmUgcGh5c2ljYWwKKyAqIGNodW5rIG9mIFJBTS4KKyAqLworI2RlZmluZSBMQVNUX1BLTUFQCVBUUlNfUEVSX1BURQorI2RlZmluZSBMQVNUX1BLTUFQX01BU0sJKExBU1RfUEtNQVAgLSAxKQorI2RlZmluZSBQS01BUF9OUih2aXJ0KQkoKHZpcnQgLSBQS01BUF9CQVNFKSA+PiBQQUdFX1NISUZUKQorI2RlZmluZSBQS01BUF9BRERSKG5yKQkoUEtNQVBfQkFTRSArICgobnIpIDw8IFBBR0VfU0hJRlQpKQorCitleHRlcm4gdm9pZCAqa21hcF9oaWdoKHN0cnVjdCBwYWdlICpwYWdlKTsKK2V4dGVybiB2b2lkIGt1bm1hcF9oaWdoKHN0cnVjdCBwYWdlICpwYWdlKTsKKworZXh0ZXJuIHZvaWQgKmttYXAoc3RydWN0IHBhZ2UgKnBhZ2UpOworZXh0ZXJuIHZvaWQga3VubWFwKHN0cnVjdCBwYWdlICpwYWdlKTsKKworZXh0ZXJuIHN0cnVjdCBwYWdlICprbWFwX2F0b21pY190b19wYWdlKHZvaWQgKnB0cik7CisKKyNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCisKKy8qCisgKiBUaGUgdXNlIG9mIGttYXBfYXRvbWljL2t1bm1hcF9hdG9taWMgaXMgZGlzY291cmFnZWQgLSBrbWFwL2t1bm1hcAorICogZ2l2ZXMgYSBtb3JlIGdlbmVyaWMgKGFuZCBjYWNoaW5nKSBpbnRlcmZhY2UuIEJ1dCBrbWFwX2F0b21pYyBjYW4KKyAqIGJlIHVzZWQgaW4gSVJRIGNvbnRleHRzLCBzbyBpbiBzb21lICh2ZXJ5IGxpbWl0ZWQpIGNhc2VzIHdlIG5lZWQKKyAqIGl0LgorICovCisjZGVmaW5lIEtNQVBfQVRPTUlDX0NBQ0hFX0RBTVIJCTgKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworI2RlZmluZSBfX2ttYXBfYXRvbWljX3ByaW1hcnkodHlwZSwgcGFkZHIsIGFtcHIpCQkJCQkJXAorKHsJCQkJCQkJCQkJCQlcCisJdW5zaWduZWQgbG9uZyBkYW1sciwgZGFtcHI7CQkJCQkJCQlcCisJCQkJCQkJCQkJCQlcCisJZGFtcHIgPSBwYWRkciB8IHhBTVBSeF9MIHwgeEFNUFJ4X00gfCB4QU1QUnhfUyB8IHhBTVBSeF9TU18xNktiIHwgeEFNUFJ4X1Y7CQlcCisJCQkJCQkJCQkJCQlcCisJaWYgKHR5cGUgIT0gX19LTV9DQUNIRSkJCQkJCQkJCQlcCisJCWFzbSB2b2xhdGlsZSgibW92Z3MgJTAsZGFtcHIiI2FtcHIgOjogInIiKGRhbXByKSk7CQkJCVwKKwllbHNlCQkJCQkJCQkJCQlcCisJCWFzbSB2b2xhdGlsZSgibW92Z3MgJTAsaWFtcHIiI2FtcHIiXG4iCQkJCQkJXAorCQkJICAgICAibW92Z3MgJTAsZGFtcHIiI2FtcHIiXG4iCQkJCQkJXAorCQkJICAgICA6OiAiciIoZGFtcHIpCQkJCQkJCVwKKwkJCSAgICAgKTsJCQkJCQkJCQlcCisJCQkJCQkJCQkJCQlcCisJYXNtKCJtb3ZzZyBkYW1sciIjYW1wciIsJTAiIDogIj1yIihkYW1scikpOwkJCQkJCVwKKwkJCQkJCQkJCQkJCVwKKwkvKnByaW50aygiREFNUiIjYW1wciI6IFBSSU0gc2w9JWQgTD0lMDhseCBQPSUwOGx4XG4iLCB0eXBlLCBkYW1sciwgZGFtcHIpOyovCQlcCisJCQkJCQkJCQkJCQlcCisJKHZvaWQgKikgZGFtbHI7CQkJCQkJCQkJCVwKK30pCisKKyNkZWZpbmUgX19rbWFwX2F0b21pY19zZWNvbmRhcnkoc2xvdCwgcGFkZHIpCQkJCQkJCSAgXAorKHsJCQkJCQkJCQkJCQkgIFwKKwl1bnNpZ25lZCBsb25nIGRhbWxyID0gS01BUF9BVE9NSUNfU0VDT05EQVJZX0ZSQU1FICsgKHNsb3QpICogUEFHRV9TSVpFOwkJCSAgXAorCXVuc2lnbmVkIGxvbmcgZGFtcHIgPSBwYWRkciB8IHhBTVBSeF9MIHwgeEFNUFJ4X00gfCB4QU1QUnhfUyB8IHhBTVBSeF9TU18xNktiIHwgeEFNUFJ4X1Y7IFwKKwkJCQkJCQkJCQkJCSAgXAorCWFzbSB2b2xhdGlsZSgibW92Z3MgJTAsdHBsciBcbiIJCQkJCQkJCSAgXAorCQkgICAgICJtb3ZncyAlMSx0cHByIFxuIgkJCQkJCQkJICBcCisJCSAgICAgInRsYnByICUwLGdyMCwjMiwjMSIJCQkJCQkJICBcCisJCSAgICAgOiA6ICJyIihkYW1sciksICJyIihkYW1wcikpOwkJCQkJCSAgXAorCQkJCQkJCQkJCQkJICBcCisJLypwcmludGsoIlRMQjogU0VDTiBzbD0lZCBMPSUwOGx4IFA9JTA4bHhcbiIsIHNsb3QsIGRhbWxyLCBkYW1wcik7Ki8JCQkgIFwKKwkJCQkJCQkJCQkJCSAgXAorCSh2b2lkICopIGRhbWxyOwkJCQkJCQkJCQkgIFwKK30pCisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqa21hcF9hdG9taWMoc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0ga21fdHlwZSB0eXBlKQoreworCXVuc2lnbmVkIGxvbmcgcGFkZHI7CisKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwlwYWRkciA9IHBhZ2VfdG9fcGh5cyhwYWdlKTsKKworCXN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIDA6CQlyZXR1cm4gX19rbWFwX2F0b21pY19wcmltYXJ5KDAsIHBhZGRyLCAyKTsKKyAgICAgICAgY2FzZSAxOgkJcmV0dXJuIF9fa21hcF9hdG9taWNfcHJpbWFyeSgxLCBwYWRkciwgMyk7CisgICAgICAgIGNhc2UgMjoJCXJldHVybiBfX2ttYXBfYXRvbWljX3ByaW1hcnkoMiwgcGFkZHIsIDQpOworICAgICAgICBjYXNlIDM6CQlyZXR1cm4gX19rbWFwX2F0b21pY19wcmltYXJ5KDMsIHBhZGRyLCA1KTsKKyAgICAgICAgY2FzZSA0OgkJcmV0dXJuIF9fa21hcF9hdG9taWNfcHJpbWFyeSg0LCBwYWRkciwgNik7CisgICAgICAgIGNhc2UgNToJCXJldHVybiBfX2ttYXBfYXRvbWljX3ByaW1hcnkoNSwgcGFkZHIsIDcpOworICAgICAgICBjYXNlIDY6CQlyZXR1cm4gX19rbWFwX2F0b21pY19wcmltYXJ5KDYsIHBhZGRyLCA4KTsKKyAgICAgICAgY2FzZSA3OgkJcmV0dXJuIF9fa21hcF9hdG9taWNfcHJpbWFyeSg3LCBwYWRkciwgOSk7CisgICAgICAgIGNhc2UgODoJCXJldHVybiBfX2ttYXBfYXRvbWljX3ByaW1hcnkoOCwgcGFkZHIsIDEwKTsKKworCWNhc2UgOSAuLi4gOSArIE5SX1RMQl9MSU5FUyAtIDE6CisJCXJldHVybiBfX2ttYXBfYXRvbWljX3NlY29uZGFyeSh0eXBlIC0gOSwgcGFkZHIpOworCisJZGVmYXVsdDoKKwkJQlVHKCk7CisJCXJldHVybiAwOworCX0KK30KKworI2RlZmluZSBfX2t1bm1hcF9hdG9taWNfcHJpbWFyeSh0eXBlLCBhbXByKQkJCVwKK2RvIHsJCQkJCQkJCVwKKwlhc20gdm9sYXRpbGUoIm1vdmdzIGdyMCxkYW1wciIjYW1wciJcbiIpOwkJXAorCWlmICh0eXBlID09IF9fS01fQ0FDSEUpCQkJCQlcCisJCWFzbSB2b2xhdGlsZSgibW92Z3MgZ3IwLGlhbXByIiNhbXByIlxuIik7CVwKK30gd2hpbGUoMCkKKworI2RlZmluZSBfX2t1bm1hcF9hdG9taWNfc2Vjb25kYXJ5KHNsb3QsIHZhZGRyKQkJCVwKK2RvIHsJCQkJCQkJCVwKKwlhc20gdm9sYXRpbGUoInRsYnByICUwLGdyMCwjNCwjMSIgOiA6ICJyIih2YWRkcikpOwlcCit9IHdoaWxlKDApCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBrdW5tYXBfYXRvbWljKHZvaWQgKmt2YWRkciwgZW51bSBrbV90eXBlIHR5cGUpCit7CisJc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgMDoJCV9fa3VubWFwX2F0b21pY19wcmltYXJ5KDAsIDIpOwlicmVhazsKKyAgICAgICAgY2FzZSAxOgkJX19rdW5tYXBfYXRvbWljX3ByaW1hcnkoMSwgMyk7CWJyZWFrOworICAgICAgICBjYXNlIDI6CQlfX2t1bm1hcF9hdG9taWNfcHJpbWFyeSgyLCA0KTsJYnJlYWs7CisgICAgICAgIGNhc2UgMzoJCV9fa3VubWFwX2F0b21pY19wcmltYXJ5KDMsIDUpOwlicmVhazsKKyAgICAgICAgY2FzZSA0OgkJX19rdW5tYXBfYXRvbWljX3ByaW1hcnkoNCwgNik7CWJyZWFrOworICAgICAgICBjYXNlIDU6CQlfX2t1bm1hcF9hdG9taWNfcHJpbWFyeSg1LCA3KTsJYnJlYWs7CisgICAgICAgIGNhc2UgNjoJCV9fa3VubWFwX2F0b21pY19wcmltYXJ5KDYsIDgpOwlicmVhazsKKyAgICAgICAgY2FzZSA3OgkJX19rdW5tYXBfYXRvbWljX3ByaW1hcnkoNywgOSk7CWJyZWFrOworICAgICAgICBjYXNlIDg6CQlfX2t1bm1hcF9hdG9taWNfcHJpbWFyeSg4LCAxMCk7CWJyZWFrOworCisJY2FzZSA5IC4uLiA5ICsgTlJfVExCX0xJTkVTIC0gMToKKwkJX19rdW5tYXBfYXRvbWljX3NlY29uZGFyeSh0eXBlIC0gOSwga3ZhZGRyKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwl9CisJcHJlZW1wdF9lbmFibGUoKTsKK30KKworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9BU01fSElHSE1FTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvaHdfaXJxLmggYi9pbmNsdWRlL2FzbS1mcnYvaHdfaXJxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTIyYWQzNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWZydi9od19pcnEuaApAQCAtMCwwICsxLDE2IEBACisvKiBod19pcnEuaDogRlItViBzcGVjaWZpYyBoL3cgSVJRIHN0dWZmCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzIFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgX0FTTV9IV19JUlFfSAorI2RlZmluZSBfQVNNX0hXX0lSUV9ICisKKworI2VuZGlmIC8qIF9BU01fSFdfSVJRX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9pZGUuaCBiL2luY2x1ZGUvYXNtLWZydi9pZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWNhZWNmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tZnJ2L2lkZS5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qIGlkZS5oOiBGUlYgSURFIGRlY2xhcmF0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9BU01fSURFX0gKKyNkZWZpbmUgX0FTTV9JREVfSAorCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorCisjdW5kZWYgU1VQUE9SVF9TTE9XX0RBVEFfUE9SVFMKKyNkZWZpbmUgU1VQUE9SVF9TTE9XX0RBVEFfUE9SVFMgMAorCisjdW5kZWYgU1VQUE9SVF9WTEJfU1lOQworI2RlZmluZSBTVVBQT1JUX1ZMQl9TWU5DIDAKKworI2lmbmRlZiBNQVhfSFdJRlMKKyNkZWZpbmUgTUFYX0hXSUZTIDgKKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBzb21lIGJpdHMgbmVlZGVkIGZvciBwYXJ0cyBvZiB0aGUgSURFIHN1YnN5c3RlbSB0byBjb21waWxlCisgKi8KKyNkZWZpbmUgX19pZGVfbW1faW5zdyhwb3J0LCBhZGRyLCBuKQlpbnN3KHBvcnQsIGFkZHIsIG4pCisjZGVmaW5lIF9faWRlX21tX2luc2wocG9ydCwgYWRkciwgbikJaW5zbChwb3J0LCBhZGRyLCBuKQorI2RlZmluZSBfX2lkZV9tbV9vdXRzdyhwb3J0LCBhZGRyLCBuKQlvdXRzdyhwb3J0LCBhZGRyLCBuKQorI2RlZmluZSBfX2lkZV9tbV9vdXRzbChwb3J0LCBhZGRyLCBuKQlvdXRzbChwb3J0LCBhZGRyLCBuKQorCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYgLyogX0FTTV9JREVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L2luaXQuaCBiL2luY2x1ZGUvYXNtLWZydi9pbml0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIxNTgzOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWZydi9pbml0LmgKQEAgLTAsMCArMSwxMiBAQAorI2lmbmRlZiBfQVNNX0lOSVRfSAorI2RlZmluZSBfQVNNX0lOSVRfSAorCisjZGVmaW5lIF9faW5pdCBfX2F0dHJpYnV0ZV9fICgoX19zZWN0aW9uX18gKCIudGV4dC5pbml0IikpKQorI2RlZmluZSBfX2luaXRkYXRhIF9fYXR0cmlidXRlX18gKChfX3NlY3Rpb25fXyAoIi5kYXRhLmluaXQiKSkpCisvKiBGb3IgYXNzZW1ibHkgcm91dGluZXMgKi8KKyNkZWZpbmUgX19JTklUCQkuc2VjdGlvbgkiLnRleHQuaW5pdCIsI2FsbG9jLCNleGVjaW5zdHIKKyNkZWZpbmUgX19GSU5JVAkJLnByZXZpb3VzCisjZGVmaW5lIF9fSU5JVERBVEEJLnNlY3Rpb24JIi5kYXRhLmluaXQiLCNhbGxvYywjd3JpdGUKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9pby5oIGIvaW5jbHVkZS9hc20tZnJ2L2lvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg4MjlmNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWZydi9pby5oCkBAIC0wLDAgKzEsMjkwIEBACisvKiBpby5oOiBGUlYgSS9PIG9wZXJhdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBnZXRzIGludGVyZXN0aW5nIHdoZW4gdGFsa2luZyB0byB0aGUgUENJIGJ1cyAtIHRoZSBDUFUgaXMgaW4gYmlnIGVuZGlhbgorICogbW9kZSwgdGhlIFBDSSBidXMgaXMgbGl0dGxlIGVuZGlhbiBhbmQgdGhlIGhhcmR3YXJlIGluIHRoZSBtaWRkbGUgY2FuIGRvCisgKiBieXRlIHN3YXBwaW5nCisgKi8KKyNpZm5kZWYgX0FTTV9JT19ICisjZGVmaW5lIF9BU01fSU9fSAorCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL3ZpcnRjb252ZXJ0Lmg+CisjaW5jbHVkZSA8YXNtL3N0cmluZy5oPgorI2luY2x1ZGUgPGFzbS9tYi1yZWdzLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworLyoKKyAqIHN3YXAgZnVuY3Rpb25zIGFyZSBzb21ldGltZXMgbmVlZGVkIHRvIGludGVyZmFjZSBsaXR0bGUtZW5kaWFuIGhhcmR3YXJlCisgKi8KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBfc3dhcHcodW5zaWduZWQgc2hvcnQgdikKK3sKKyAgICByZXR1cm4gKCh2IDw8IDgpIHwgKHYgPj4gOCkpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX3N3YXBsKHVuc2lnbmVkIGxvbmcgdikKK3sKKyAgICByZXR1cm4gKCh2IDw8IDI0KSB8ICgodiAmIDB4ZmYwMCkgPDwgOCkgfCAoKHYgJiAweGZmMDAwMCkgPj4gOCkgfCAodiA+PiAyNCkpOworfQorCisvLyNkZWZpbmUgX19pb3JtYigpIGFzbSB2b2xhdGlsZSgibWVtYmFyIikKKy8vI2RlZmluZSBfX2lvd21iKCkgYXNtIHZvbGF0aWxlKCJtZW1iYXIiKQorCisjZGVmaW5lIF9fcmF3X3JlYWRiKGFkZHIpIF9fYnVpbHRpbl9yZWFkOCgodm9pZCAqKSAoYWRkcikpCisjZGVmaW5lIF9fcmF3X3JlYWR3KGFkZHIpIF9fYnVpbHRpbl9yZWFkMTYoKHZvaWQgKikgKGFkZHIpKQorI2RlZmluZSBfX3Jhd19yZWFkbChhZGRyKSBfX2J1aWx0aW5fcmVhZDMyKCh2b2lkICopIChhZGRyKSkKKworI2RlZmluZSBfX3Jhd193cml0ZWIoZGF0dW0sIGFkZHIpIF9fYnVpbHRpbl93cml0ZTgoKHZvaWQgKikgKGFkZHIpLCBkYXR1bSkKKyNkZWZpbmUgX19yYXdfd3JpdGV3KGRhdHVtLCBhZGRyKSBfX2J1aWx0aW5fd3JpdGUxNigodm9pZCAqKSAoYWRkciksIGRhdHVtKQorI2RlZmluZSBfX3Jhd193cml0ZWwoZGF0dW0sIGFkZHIpIF9fYnVpbHRpbl93cml0ZTMyKCh2b2lkICopIChhZGRyKSwgZGF0dW0pCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpb19vdXRzYih1bnNpZ25lZCBpbnQgYWRkciwgY29uc3Qgdm9pZCAqYnVmLCBpbnQgbGVuKQoreworCXVuc2lnbmVkIGxvbmcgX19pb2FkZHIgPSAodW5zaWduZWQgbG9uZykgYWRkcjsKKwljb25zdCB1aW50OF90ICpicCA9IGJ1ZjsKKworCXdoaWxlIChsZW4tLSkKKwkJX19idWlsdGluX3dyaXRlOCgodm9sYXRpbGUgdm9pZCBfX2lvbWVtICopIF9faW9hZGRyLCAqYnArKyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpb19vdXRzdyh1bnNpZ25lZCBpbnQgYWRkciwgY29uc3Qgdm9pZCAqYnVmLCBpbnQgbGVuKQoreworCXVuc2lnbmVkIGxvbmcgX19pb2FkZHIgPSAodW5zaWduZWQgbG9uZykgYWRkcjsKKwljb25zdCB1aW50MTZfdCAqYnAgPSBidWY7CisKKwl3aGlsZSAobGVuLS0pCisJCV9fYnVpbHRpbl93cml0ZTE2KCh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKikgX19pb2FkZHIsICgqYnArKykpOworfQorCitleHRlcm4gdm9pZCBfX291dHNsX25zKHVuc2lnbmVkIGludCBhZGRyLCBjb25zdCB2b2lkICpidWYsIGludCBsZW4pOworZXh0ZXJuIHZvaWQgX19vdXRzbF9zdyh1bnNpZ25lZCBpbnQgYWRkciwgY29uc3Qgdm9pZCAqYnVmLCBpbnQgbGVuKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX291dHNsKHVuc2lnbmVkIGludCBhZGRyLCBjb25zdCB2b2lkICpidWYsIGludCBsZW4sIGludCBzd2FwKQoreworCXVuc2lnbmVkIGxvbmcgX19pb2FkZHIgPSAodW5zaWduZWQgbG9uZykgYWRkcjsKKworCWlmICghc3dhcCkKKwkJX19vdXRzbF9ucyhfX2lvYWRkciwgYnVmLCBsZW4pOworCWVsc2UKKwkJX19vdXRzbF9zdyhfX2lvYWRkciwgYnVmLCBsZW4pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW9faW5zYih1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmJ1ZiwgaW50IGxlbikKK3sKKwl1aW50OF90ICpicCA9IGJ1ZjsKKworCXdoaWxlIChsZW4tLSkKKwkJKmJwKysgPSBfX2J1aWx0aW5fcmVhZDgoKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqKSBhZGRyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGlvX2luc3codW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpidWYsIGludCBsZW4pCit7CisJdWludDE2X3QgKmJwID0gYnVmOworCisJd2hpbGUgKGxlbi0tKQorCQkqYnArKyA9IF9fYnVpbHRpbl9yZWFkMTYoKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqKSBhZGRyKTsKK30KKworZXh0ZXJuIHZvaWQgX19pbnNsX25zKHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqYnVmLCBpbnQgbGVuKTsKK2V4dGVybiB2b2lkIF9faW5zbF9zdyh1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmJ1ZiwgaW50IGxlbik7CitzdGF0aWMgaW5saW5lIHZvaWQgX19pbnNsKHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqYnVmLCBpbnQgbGVuLCBpbnQgc3dhcCkKK3sKKwlpZiAoIXN3YXApCisJCV9faW5zbF9ucyhhZGRyLCBidWYsIGxlbik7CisJZWxzZQorCQlfX2luc2xfc3coYWRkciwgYnVmLCBsZW4pOworfQorCisvKgorICoJbWFrZSB0aGUgc2hvcnQgbmFtZXMgbWFjcm9zIHNvIHNwZWNpZmljIGRldmljZXMKKyAqCWNhbiBvdmVycmlkZSB0aGVtIGFzIHJlcXVpcmVkCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkIG1lbXNldF9pbyh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIsIHVuc2lnbmVkIGNoYXIgdmFsLCBpbnQgY291bnQpCit7CisJbWVtc2V0KCh2b2lkIF9fZm9yY2UgKikgYWRkciwgdmFsLCBjb3VudCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtZW1jcHlfZnJvbWlvKHZvaWQgKmRzdCwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICpzcmMsIGludCBjb3VudCkKK3sKKwltZW1jcHkoZHN0LCAodm9pZCBfX2ZvcmNlICopIHNyYywgY291bnQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbWVtY3B5X3RvaW8odm9sYXRpbGUgdm9pZCBfX2lvbWVtICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgaW50IGNvdW50KQoreworCW1lbWNweSgodm9pZCBfX2ZvcmNlICopIGRzdCwgc3JjLCBjb3VudCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDhfdCBpbmIodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXJldHVybiBfX2J1aWx0aW5fcmVhZDgoKHZvaWQgKilhZGRyKTsKK30KKworc3RhdGljIGlubGluZSB1aW50MTZfdCBpbncodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXVpbnQxNl90IHJldCA9IF9fYnVpbHRpbl9yZWFkMTYoKHZvaWQgKilhZGRyKTsKKworCWlmIChfX2lzX1BDSV9JTyhhZGRyKSkKKwkJcmV0ID0gX3N3YXB3KHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGlubCh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJdWludDMyX3QgcmV0ID0gX19idWlsdGluX3JlYWQzMigodm9pZCAqKWFkZHIpOworCisJaWYgKF9faXNfUENJX0lPKGFkZHIpKQorCQlyZXQgPSBfc3dhcGwocmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvdXRiKHVpbnQ4X3QgZGF0dW0sIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlfX2J1aWx0aW5fd3JpdGU4KCh2b2lkICopYWRkciwgZGF0dW0pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgb3V0dyh1aW50MTZfdCBkYXR1bSwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCWlmIChfX2lzX1BDSV9JTyhhZGRyKSkKKwkJZGF0dW0gPSBfc3dhcHcoZGF0dW0pOworCV9fYnVpbHRpbl93cml0ZTE2KCh2b2lkICopYWRkciwgZGF0dW0pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgb3V0bCh1aW50MzJfdCBkYXR1bSwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCWlmIChfX2lzX1BDSV9JTyhhZGRyKSkKKwkJZGF0dW0gPSBfc3dhcGwoZGF0dW0pOworCV9fYnVpbHRpbl93cml0ZTMyKCh2b2lkICopYWRkciwgZGF0dW0pOworfQorCisjZGVmaW5lIGluYl9wKGFkZHIpCWluYihhZGRyKQorI2RlZmluZSBpbndfcChhZGRyKQlpbncoYWRkcikKKyNkZWZpbmUgaW5sX3AoYWRkcikJaW5sKGFkZHIpCisjZGVmaW5lIG91dGJfcCh4LGFkZHIpCW91dGIoeCxhZGRyKQorI2RlZmluZSBvdXR3X3AoeCxhZGRyKQlvdXR3KHgsYWRkcikKKyNkZWZpbmUgb3V0bF9wKHgsYWRkcikJb3V0bCh4LGFkZHIpCisKKyNkZWZpbmUgb3V0c2IoYSxiLGwpCWlvX291dHNiKGEsYixsKQorI2RlZmluZSBvdXRzdyhhLGIsbCkJaW9fb3V0c3coYSxiLGwpCisjZGVmaW5lIG91dHNsKGEsYixsKQlfX291dHNsKGEsYixsLDApCisKKyNkZWZpbmUgaW5zYihhLGIsbCkJaW9faW5zYihhLGIsbCkKKyNkZWZpbmUgaW5zdyhhLGIsbCkJaW9faW5zdyhhLGIsbCkKKyNkZWZpbmUgaW5zbChhLGIsbCkJX19pbnNsKGEsYixsLDApCisKKyNkZWZpbmUgSU9fU1BBQ0VfTElNSVQJMHhmZmZmZmZmZgorCitzdGF0aWMgaW5saW5lIHVpbnQ4X3QgcmVhZGIoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCXJldHVybiBfX2J1aWx0aW5fcmVhZDgoKHZvbGF0aWxlIHVpbnQ4X3QgX19mb3JjZSAqKSBhZGRyKTsKK30KKworc3RhdGljIGlubGluZSB1aW50MTZfdCByZWFkdyhjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJdWludDE2X3QgcmV0ID0JX19idWlsdGluX3JlYWQxNigodm9sYXRpbGUgdWludDE2X3QgX19mb3JjZSAqKWFkZHIpOworCisJaWYgKF9faXNfUENJX01FTShhZGRyKSkKKwkJcmV0ID0gX3N3YXB3KHJldCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSB1aW50MzJfdCByZWFkbChjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJdWludDMyX3QgcmV0ID0JX19idWlsdGluX3JlYWQzMigodm9sYXRpbGUgdWludDMyX3QgX19mb3JjZSAqKWFkZHIpOworCisJaWYgKF9faXNfUENJX01FTShhZGRyKSkKKwkJcmV0ID0gX3N3YXBsKHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGViKHVpbnQ4X3QgZGF0dW0sIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlfX2J1aWx0aW5fd3JpdGU4KCh2b2xhdGlsZSB1aW50OF90IF9fZm9yY2UgKikgYWRkciwgZGF0dW0pOworCWlmIChfX2lzX1BDSV9NRU0oYWRkcikpCisJCV9fZmx1c2hfUENJX3dyaXRlcygpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGV3KHVpbnQxNl90IGRhdHVtLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJaWYgKF9faXNfUENJX01FTShhZGRyKSkKKwkJZGF0dW0gPSBfc3dhcHcoZGF0dW0pOworCisJX19idWlsdGluX3dyaXRlMTYoKHZvbGF0aWxlIHVpbnQxNl90IF9fZm9yY2UgKikgYWRkciwgZGF0dW0pOworCWlmIChfX2lzX1BDSV9NRU0oYWRkcikpCisJCV9fZmx1c2hfUENJX3dyaXRlcygpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVsKHVpbnQzMl90IGRhdHVtLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJaWYgKF9faXNfUENJX01FTShhZGRyKSkKKwkJZGF0dW0gPSBfc3dhcGwoZGF0dW0pOworCisJX19idWlsdGluX3dyaXRlMzIoKHZvbGF0aWxlIHVpbnQzMl90IF9fZm9yY2UgKikgYWRkciwgZGF0dW0pOworCWlmIChfX2lzX1BDSV9NRU0oYWRkcikpCisJCV9fZmx1c2hfUENJX3dyaXRlcygpOworfQorCisKKy8qIFZhbHVlcyBmb3Igbm9jYWNoZWZsYWcgYW5kIGNtb2RlICovCisjZGVmaW5lIElPTUFQX0ZVTExfQ0FDSElORwkJMAorI2RlZmluZSBJT01BUF9OT0NBQ0hFX1NFUgkJMQorI2RlZmluZSBJT01BUF9OT0NBQ0hFX05PTlNFUgkJMgorI2RlZmluZSBJT01BUF9XUklURVRIUk9VR0gJCTMKKworZXh0ZXJuIHZvaWQgX19pb21lbSAqX19pb3JlbWFwKHVuc2lnbmVkIGxvbmcgcGh5c2FkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IGNhY2hlZmxhZyk7CitleHRlcm4gdm9pZCBfX2lvdW5tYXAodm9pZCBfX2lvbWVtICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpOworCitzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqaW9yZW1hcCh1bnNpZ25lZCBsb25nIHBoeXNhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJcmV0dXJuIF9faW9yZW1hcChwaHlzYWRkciwgc2l6ZSwgSU9NQVBfTk9DQUNIRV9TRVIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqaW9yZW1hcF9ub2NhY2hlKHVuc2lnbmVkIGxvbmcgcGh5c2FkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlyZXR1cm4gX19pb3JlbWFwKHBoeXNhZGRyLCBzaXplLCBJT01BUF9OT0NBQ0hFX1NFUik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbWVtICppb3JlbWFwX3dyaXRldGhyb3VnaCh1bnNpZ25lZCBsb25nIHBoeXNhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJcmV0dXJuIF9faW9yZW1hcChwaHlzYWRkciwgc2l6ZSwgSU9NQVBfV1JJVEVUSFJPVUdIKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKmlvcmVtYXBfZnVsbGNhY2hlKHVuc2lnbmVkIGxvbmcgcGh5c2FkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlyZXR1cm4gX19pb3JlbWFwKHBoeXNhZGRyLCBzaXplLCBJT01BUF9GVUxMX0NBQ0hJTkcpOworfQorCitleHRlcm4gdm9pZCBpb3VubWFwKHZvaWQgX19pb21lbSAqYWRkcik7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF93cml0ZV9idWZmZXJzKHZvaWQpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtZW1iYXIiIDogOiA6Im1lbW9yeSIpOworfQorCisKKy8qCisgKiBDb252ZXJ0IGEgcGh5c2ljYWwgcG9pbnRlciB0byBhIHZpcnR1YWwga2VybmVsIHBvaW50ZXIgZm9yIC9kZXYvbWVtCisgKiBhY2Nlc3MKKyAqLworI2RlZmluZSB4bGF0ZV9kZXZfbWVtX3B0cihwKQlfX3ZhKHApCisKKy8qCisgKiBDb252ZXJ0IGEgdmlydHVhbCBjYWNoZWQgcG9pbnRlciB0byBhbiB1bmNhY2hlZCBwb2ludGVyCisgKi8KKyNkZWZpbmUgeGxhdGVfZGV2X2ttZW1fcHRyKHApCXAKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9BU01fSU9fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L2lvY3RsLmggYi9pbmNsdWRlL2FzbS1mcnYvaW9jdGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWVlNzY5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tZnJ2L2lvY3RsLmgKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIGxpbnV4L2lvY3RsLmggZm9yIExpbnV4IGJ5IEguSC4gQmVyZ21hbi4KKyAqLworCisjaWZuZGVmIF9BU01fSU9DVExfSAorI2RlZmluZSBfQVNNX0lPQ1RMX0gKKworLyogaW9jdGwgY29tbWFuZCBlbmNvZGluZzogMzIgYml0cyB0b3RhbCwgY29tbWFuZCBpbiBsb3dlciAxNiBiaXRzLAorICogc2l6ZSBvZiB0aGUgcGFyYW1ldGVyIHN0cnVjdHVyZSBpbiB0aGUgbG93ZXIgMTQgYml0cyBvZiB0aGUKKyAqIHVwcGVyIDE2IGJpdHMuCisgKiBFbmNvZGluZyB0aGUgc2l6ZSBvZiB0aGUgcGFyYW1ldGVyIHN0cnVjdHVyZSBpbiB0aGUgaW9jdGwgcmVxdWVzdAorICogaXMgdXNlZnVsIGZvciBjYXRjaGluZyBwcm9ncmFtcyBjb21waWxlZCB3aXRoIG9sZCB2ZXJzaW9ucworICogYW5kIHRvIGF2b2lkIG92ZXJ3cml0aW5nIHVzZXIgc3BhY2Ugb3V0c2lkZSB0aGUgdXNlciBidWZmZXIgYXJlYS4KKyAqIFRoZSBoaWdoZXN0IDIgYml0cyBhcmUgcmVzZXJ2ZWQgZm9yIGluZGljYXRpbmcgdGhlIGBgYWNjZXNzIG1vZGUnJy4KKyAqIE5PVEU6IFRoaXMgbGltaXRzIHRoZSBtYXggcGFyYW1ldGVyIHNpemUgdG8gMTZrQiAtMSAhCisgKi8KKworLyoKKyAqIEkgZG9uJ3QgcmVhbGx5IGhhdmUgYW55IGlkZWEgYWJvdXQgd2hhdCB0aGlzIHNob3VsZCBsb29rIGxpa2UsIHNvCisgKiBmb3IgdGhlIHRpbWUgYmVpbmcsIHRoaXMgaXMgaGVhdmlseSBiYXNlZCBvbiB0aGUgUEMgZGVmaW5pdGlvbnMuCisgKi8KKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgaXMgZm9yIGNvbXBhdGliaWxpdHkgYWNyb3NzIHRoZSB2YXJpb3VzIExpbnV4CisgKiBwbGF0Zm9ybXMuICBUaGUgaTM4NiBpb2N0bCBudW1iZXJpbmcgc2NoZW1lIGRvZXNuJ3QgcmVhbGx5IGVuZm9yY2UKKyAqIGEgdHlwZSBmaWVsZC4gIERlIGZhY3RvLCBob3dldmVyLCB0aGUgdG9wIDggYml0cyBvZiB0aGUgbG93ZXIgMTYKKyAqIGJpdHMgYXJlIGluZGVlZCB1c2VkIGFzIGEgdHlwZSBmaWVsZCwgc28gd2UgbWlnaHQganVzdCBhcyB3ZWxsIG1ha2UKKyAqIHRoaXMgZXhwbGljaXQgaGVyZS4gIFBsZWFzZSBiZSBzdXJlIHRvIHVzZSB0aGUgZGVjb2RpbmcgbWFjcm9zCisgKiBiZWxvdyBmcm9tIG5vdyBvbi4KKyAqLworI2RlZmluZSBfSU9DX05SQklUUwk4CisjZGVmaW5lIF9JT0NfVFlQRUJJVFMJOAorI2RlZmluZSBfSU9DX1NJWkVCSVRTCTE0CisjZGVmaW5lIF9JT0NfRElSQklUUwkyCisKKyNkZWZpbmUgX0lPQ19OUk1BU0sJKCgxIDw8IF9JT0NfTlJCSVRTKS0xKQorI2RlZmluZSBfSU9DX1RZUEVNQVNLCSgoMSA8PCBfSU9DX1RZUEVCSVRTKS0xKQorI2RlZmluZSBfSU9DX1NJWkVNQVNLCSgoMSA8PCBfSU9DX1NJWkVCSVRTKS0xKQorI2RlZmluZSBfSU9DX0RJUk1BU0sJKCgxIDw8IF9JT0NfRElSQklUUyktMSkKKworI2RlZmluZSBfSU9DX05SU0hJRlQJMAorI2RlZmluZSBfSU9DX1RZUEVTSElGVAkoX0lPQ19OUlNISUZUK19JT0NfTlJCSVRTKQorI2RlZmluZSBfSU9DX1NJWkVTSElGVAkoX0lPQ19UWVBFU0hJRlQrX0lPQ19UWVBFQklUUykKKyNkZWZpbmUgX0lPQ19ESVJTSElGVAkoX0lPQ19TSVpFU0hJRlQrX0lPQ19TSVpFQklUUykKKworLyoKKyAqIERpcmVjdGlvbiBiaXRzLgorICovCisjZGVmaW5lIF9JT0NfTk9ORQkwVQorI2RlZmluZSBfSU9DX1dSSVRFCTFVCisjZGVmaW5lIF9JT0NfUkVBRAkyVQorCisjZGVmaW5lIF9JT0MoZGlyLHR5cGUsbnIsc2l6ZSkgXAorCSgoKGRpcikgIDw8IF9JT0NfRElSU0hJRlQpIHwgXAorCSAoKHR5cGUpIDw8IF9JT0NfVFlQRVNISUZUKSB8IFwKKwkgKChucikgICA8PCBfSU9DX05SU0hJRlQpIHwgXAorCSAoKHNpemUpIDw8IF9JT0NfU0laRVNISUZUKSkKKworLyogdXNlZCB0byBjcmVhdGUgbnVtYmVycyAqLworI2RlZmluZSBfSU8odHlwZSxucikJCV9JT0MoX0lPQ19OT05FLCh0eXBlKSwobnIpLDApCisjZGVmaW5lIF9JT1IodHlwZSxucixzaXplKQlfSU9DKF9JT0NfUkVBRCwodHlwZSksKG5yKSxzaXplb2Yoc2l6ZSkpCisjZGVmaW5lIF9JT1codHlwZSxucixzaXplKQlfSU9DKF9JT0NfV1JJVEUsKHR5cGUpLChuciksc2l6ZW9mKHNpemUpKQorI2RlZmluZSBfSU9XUih0eXBlLG5yLHNpemUpCV9JT0MoX0lPQ19SRUFEfF9JT0NfV1JJVEUsKHR5cGUpLChuciksc2l6ZW9mKHNpemUpKQorCisvKiB1c2VkIHRvIGRlY29kZSBpb2N0bCBudW1iZXJzLi4gKi8KKyNkZWZpbmUgX0lPQ19ESVIobnIpCQkoKChucikgPj4gX0lPQ19ESVJTSElGVCkgJiBfSU9DX0RJUk1BU0spCisjZGVmaW5lIF9JT0NfVFlQRShucikJCSgoKG5yKSA+PiBfSU9DX1RZUEVTSElGVCkgJiBfSU9DX1RZUEVNQVNLKQorI2RlZmluZSBfSU9DX05SKG5yKQkJKCgobnIpID4+IF9JT0NfTlJTSElGVCkgJiBfSU9DX05STUFTSykKKyNkZWZpbmUgX0lPQ19TSVpFKG5yKQkJKCgobnIpID4+IF9JT0NfU0laRVNISUZUKSAmIF9JT0NfU0laRU1BU0spCisKKy8qIC4uLmFuZCBmb3IgdGhlIGRyaXZlcnMvc291bmQgZmlsZXMuLi4gKi8KKworI2RlZmluZSBJT0NfSU4JCShfSU9DX1dSSVRFIDw8IF9JT0NfRElSU0hJRlQpCisjZGVmaW5lIElPQ19PVVQJCShfSU9DX1JFQUQgPDwgX0lPQ19ESVJTSElGVCkKKyNkZWZpbmUgSU9DX0lOT1VUCSgoX0lPQ19XUklURXxfSU9DX1JFQUQpIDw8IF9JT0NfRElSU0hJRlQpCisjZGVmaW5lIElPQ1NJWkVfTUFTSwkoX0lPQ19TSVpFTUFTSyA8PCBfSU9DX1NJWkVTSElGVCkKKyNkZWZpbmUgSU9DU0laRV9TSElGVAkoX0lPQ19TSVpFU0hJRlQpCisKKyNlbmRpZiAvKiBfQVNNX0lPQ1RMX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L2lvY3Rscy5oIGIvaW5jbHVkZS9hc20tZnJ2L2lvY3Rscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0MWM3ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1mcnYvaW9jdGxzLmgKQEAgLTAsMCArMSw4MiBAQAorI2lmbmRlZiBfX0FTTV9JT0NUTFNfSF9fCisjZGVmaW5lIF9fQVNNX0lPQ1RMU19IX18KKworI2luY2x1ZGUgPGFzbS9pb2N0bC5oPgorCisvKiAweDU0IGlzIGp1c3QgYSBtYWdpYyBudW1iZXIgdG8gbWFrZSB0aGVzZSByZWxhdGl2ZWx5IHVuaXF1ZSAoJ1QnKSAqLworCisjZGVmaW5lIFRDR0VUUwkJMHg1NDAxCisjZGVmaW5lIFRDU0VUUwkJMHg1NDAyCisjZGVmaW5lIFRDU0VUU1cJCTB4NTQwMworI2RlZmluZSBUQ1NFVFNGCQkweDU0MDQKKyNkZWZpbmUgVENHRVRBCQkweDU0MDUKKyNkZWZpbmUgVENTRVRBCQkweDU0MDYKKyNkZWZpbmUgVENTRVRBVwkJMHg1NDA3CisjZGVmaW5lIFRDU0VUQUYJCTB4NTQwOAorI2RlZmluZSBUQ1NCUksJCTB4NTQwOQorI2RlZmluZSBUQ1hPTkMJCTB4NTQwQQorI2RlZmluZSBUQ0ZMU0gJCTB4NTQwQgorI2RlZmluZSBUSU9DRVhDTAkweDU0MEMKKyNkZWZpbmUgVElPQ05YQ0wJMHg1NDBECisjZGVmaW5lIFRJT0NTQ1RUWQkweDU0MEUKKyNkZWZpbmUgVElPQ0dQR1JQCTB4NTQwRgorI2RlZmluZSBUSU9DU1BHUlAJMHg1NDEwCisjZGVmaW5lIFRJT0NPVVRRCTB4NTQxMQorI2RlZmluZSBUSU9DU1RJCQkweDU0MTIKKyNkZWZpbmUgVElPQ0dXSU5TWgkweDU0MTMKKyNkZWZpbmUgVElPQ1NXSU5TWgkweDU0MTQKKyNkZWZpbmUgVElPQ01HRVQJMHg1NDE1CisjZGVmaW5lIFRJT0NNQklTCTB4NTQxNgorI2RlZmluZSBUSU9DTUJJQwkweDU0MTcKKyNkZWZpbmUgVElPQ01TRVQJMHg1NDE4CisjZGVmaW5lIFRJT0NHU09GVENBUgkweDU0MTkKKyNkZWZpbmUgVElPQ1NTT0ZUQ0FSCTB4NTQxQQorI2RlZmluZSBGSU9OUkVBRAkweDU0MUIKKyNkZWZpbmUgVElPQ0lOUQkJRklPTlJFQUQKKyNkZWZpbmUgVElPQ0xJTlVYCTB4NTQxQworI2RlZmluZSBUSU9DQ09OUwkweDU0MUQKKyNkZWZpbmUgVElPQ0dTRVJJQUwJMHg1NDFFCisjZGVmaW5lIFRJT0NTU0VSSUFMCTB4NTQxRgorI2RlZmluZSBUSU9DUEtUCQkweDU0MjAKKyNkZWZpbmUgRklPTkJJTwkJMHg1NDIxCisjZGVmaW5lIFRJT0NOT1RUWQkweDU0MjIKKyNkZWZpbmUgVElPQ1NFVEQJMHg1NDIzCisjZGVmaW5lIFRJT0NHRVRECTB4NTQyNAorI2RlZmluZSBUQ1NCUktQCQkweDU0MjUJLyogTmVlZGVkIGZvciBQT1NJWCB0Y3NlbmRicmVhaygpICovCisjZGVmaW5lIFRJT0NUVFlHU1RSVUNUCTB4NTQyNiAgLyogRm9yIGRlYnVnZ2luZyBvbmx5ICovCisjZGVmaW5lIFRJT0NTQlJLCTB4NTQyNyAgLyogQlNEIGNvbXBhdGliaWxpdHkgKi8KKyNkZWZpbmUgVElPQ0NCUksJMHg1NDI4ICAvKiBCU0QgY29tcGF0aWJpbGl0eSAqLworI2RlZmluZSBUSU9DR1NJRAkweDU0MjkgIC8qIFJldHVybiB0aGUgc2Vzc2lvbiBJRCBvZiBGRCAqLworI2RlZmluZSBUSU9DR1BUTglfSU9SKCdUJywweDMwLCB1bnNpZ25lZCBpbnQpIC8qIEdldCBQdHkgTnVtYmVyIChvZiBwdHktbXV4IGRldmljZSkgKi8KKyNkZWZpbmUgVElPQ1NQVExDSwlfSU9XKCdUJywweDMxLCBpbnQpICAvKiBMb2NrL3VubG9jayBQdHkgKi8KKworI2RlZmluZSBGSU9OQ0xFWAkweDU0NTAgIC8qIHRoZXNlIG51bWJlcnMgbmVlZCB0byBiZSBhZGp1c3RlZC4gKi8KKyNkZWZpbmUgRklPQ0xFWAkJMHg1NDUxCisjZGVmaW5lIEZJT0FTWU5DCTB4NTQ1MgorI2RlZmluZSBUSU9DU0VSQ09ORklHCTB4NTQ1MworI2RlZmluZSBUSU9DU0VSR1dJTEQJMHg1NDU0CisjZGVmaW5lIFRJT0NTRVJTV0lMRAkweDU0NTUKKyNkZWZpbmUgVElPQ0dMQ0tUUk1JT1MJMHg1NDU2CisjZGVmaW5lIFRJT0NTTENLVFJNSU9TCTB4NTQ1NworI2RlZmluZSBUSU9DU0VSR1NUUlVDVAkweDU0NTggLyogRm9yIGRlYnVnZ2luZyBvbmx5ICovCisjZGVmaW5lIFRJT0NTRVJHRVRMU1IgICAweDU0NTkgLyogR2V0IGxpbmUgc3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIFRJT0NTRVJHRVRNVUxUSSAweDU0NUEgLyogR2V0IG11bHRpcG9ydCBjb25maWcgICovCisjZGVmaW5lIFRJT0NTRVJTRVRNVUxUSSAweDU0NUIgLyogU2V0IG11bHRpcG9ydCBjb25maWcgKi8KKworI2RlZmluZSBUSU9DTUlXQUlUCTB4NTQ1QwkvKiB3YWl0IGZvciBhIGNoYW5nZSBvbiBzZXJpYWwgaW5wdXQgbGluZShzKSAqLworI2RlZmluZSBUSU9DR0lDT1VOVAkweDU0NUQJLyogcmVhZCBzZXJpYWwgcG9ydCBpbmxpbmUgaW50ZXJydXB0IGNvdW50cyAqLworI2RlZmluZSBGSU9RU0laRQkweDU0NUUKKworLyogVXNlZCBmb3IgcGFja2V0IG1vZGUgKi8KKyNkZWZpbmUgVElPQ1BLVF9EQVRBCQkgMAorI2RlZmluZSBUSU9DUEtUX0ZMVVNIUkVBRAkgMQorI2RlZmluZSBUSU9DUEtUX0ZMVVNIV1JJVEUJIDIKKyNkZWZpbmUgVElPQ1BLVF9TVE9QCQkgNAorI2RlZmluZSBUSU9DUEtUX1NUQVJUCQkgOAorI2RlZmluZSBUSU9DUEtUX05PU1RPUAkJMTYKKyNkZWZpbmUgVElPQ1BLVF9ET1NUT1AJCTMyCisKKyNkZWZpbmUgVElPQ1NFUl9URU1UICAgIDB4MDEJLyogVHJhbnNtaXR0ZXIgcGh5c2ljYWxseSBlbXB0eSAqLworCisjZW5kaWYgLyogX19BU01fSU9DVExTX0hfXyAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvaXBjLmggYi9pbmNsdWRlL2FzbS1mcnYvaXBjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ2ZTNkOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWZydi9pcGMuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvaXBjLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvaXBjYnVmLmggYi9pbmNsdWRlL2FzbS1mcnYvaXBjYnVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU0NmY2NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWZydi9pcGNidWYuaApAQCAtMCwwICsxLDMwIEBACisjaWZuZGVmIF9fQVNNX0lQQ0JVRl9IX18KKyNkZWZpbmUgX19BU01fSVBDQlVGX0hfXworCisvKgorICogVGhlIHVzZXJfaXBjX3Blcm0gc3RydWN0dXJlIGZvciBGUi1WIGFyY2hpdGVjdHVyZS4KKyAqIE5vdGUgZXh0cmEgcGFkZGluZyBiZWNhdXNlIHRoaXMgc3RydWN0dXJlIGlzIHBhc3NlZCBiYWNrIGFuZCBmb3J0aAorICogYmV0d2VlbiBrZXJuZWwgYW5kIHVzZXIgc3BhY2UuCisgKgorICogUGFkIHNwYWNlIGlzIGxlZnQgZm9yOgorICogLSAzMi1iaXQgbW9kZV90IGFuZCBzZXEKKyAqIC0gMiBtaXNjZWxsYW5lb3VzIDMyLWJpdCB2YWx1ZXMKKyAqLworCitzdHJ1Y3QgaXBjNjRfcGVybQoreworCV9fa2VybmVsX2tleV90CQlrZXk7CisJX19rZXJuZWxfdWlkMzJfdAl1aWQ7CisJX19rZXJuZWxfZ2lkMzJfdAlnaWQ7CisJX19rZXJuZWxfdWlkMzJfdAljdWlkOworCV9fa2VybmVsX2dpZDMyX3QJY2dpZDsKKwlfX2tlcm5lbF9tb2RlX3QJCW1vZGU7CisJdW5zaWduZWQgc2hvcnQJCV9fcGFkMTsKKwl1bnNpZ25lZCBzaG9ydAkJc2VxOworCXVuc2lnbmVkIHNob3J0CQlfX3BhZDI7CisJdW5zaWduZWQgbG9uZwkJX191bnVzZWQxOworCXVuc2lnbmVkIGxvbmcJCV9fdW51c2VkMjsKK307CisKKyNlbmRpZiAvKiBfX0FTTV9JUENCVUZfSF9fICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9pcmMtcmVncy5oIGIvaW5jbHVkZS9hc20tZnJ2L2lyYy1yZWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZhMzBhZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWZydi9pcmMtcmVncy5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qIGlyYy1yZWdzLmg6IG9uLWNoaXAgaW50ZXJydXB0IGNvbnRyb2xsZXIgcmVnaXN0ZXJzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzIFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgX0FTTV9JUkNfUkVHUworI2RlZmluZSBfQVNNX0lSQ19SRUdTCisKKyNkZWZpbmUgX19yZWcoQUREUikgKCoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShBRERSKSkKKworI2RlZmluZSBfX2dldF9UTTAoKQkoeyBfX3JlZygweGZlZmY5ODAwKTsgfSkKKyNkZWZpbmUgX19nZXRfVE0xKCkJKHsgX19yZWcoMHhmZWZmOTgwOCk7IH0pCisjZGVmaW5lIF9fc2V0X1RNMShWKQlkbyB7IF9fcmVnKDB4ZmVmZjk4MDgpID0gKFYpOyBtYigpOyB9IHdoaWxlKDApCisKKyNkZWZpbmUgX19zZXRfVE0xeChYSSxWKQkJCVwKK2RvIHsJCQkJCQlcCisJaW50IHNoaWZ0ID0gKFhJKSAqIDIgKyAxNjsJCVwKKwl1bnNpZ25lZCBsb25nIHRtMSA9IF9fcmVnKDB4ZmVmZjk4MDgpOwlcCisJdG0xICY9IH4oMHgzIDw8IHNoaWZ0KTsJCQlcCisJdG0xIHw9IChWKSA8PCBzaGlmdDsJCQlcCisJX19yZWcoMHhmZWZmOTgwOCkgPSB0bTE7CQlcCisJbWIoKTsJCQkJCVwKK30gd2hpbGUoMCkKKworI2RlZmluZSBfX2dldF9SUyhDKQkoeyAoX19yZWcoMHhmZWZmOTgxMCkgPj4gKChDKSsxNikpICYgMTsgfSkKKworI2RlZmluZSBfX2Nscl9SQyhDKQlkbyB7IF9fcmVnKDB4ZmVmZjk4MTgpID0gMSA8PCAoKEMpKzE2KTsgbWIoKTsgfSB3aGlsZSgwKQorCisjZGVmaW5lIF9fZ2V0X01BU0soQykJKHsgKF9fcmVnKDB4ZmVmZjk4MjApID4+ICgoQykrMTYpKSAmIDE7IH0pCisjZGVmaW5lIF9fc2V0X01BU0soQykJZG8geyBfX3JlZygweGZlZmY5ODIwKSB8PSAgMSA8PCAoKEMpKzE2KTsgbWIoKTsgfSB3aGlsZSgwKQorI2RlZmluZSBfX2Nscl9NQVNLKEMpCWRvIHsgX19yZWcoMHhmZWZmOTgyMCkgJj0gIH4oMSA8PCAoKEMpKzE2KSk7IG1iKCk7IH0gd2hpbGUoMCkKKworI2RlZmluZSBfX2dldF9NQVNLX2FsbCgpIF9fZ2V0X01BU0soMCkKKyNkZWZpbmUgX19zZXRfTUFTS19hbGwoKSBfX3NldF9NQVNLKDApCisjZGVmaW5lIF9fY2xyX01BU0tfYWxsKCkgX19jbHJfTUFTSygwKQorCisjZGVmaW5lIF9fZ2V0X0lSTCgpCSh7IChfX3JlZygweGZlZmY5ODI4KSA+PiAxNikgJiAweGY7IH0pCisjZGVmaW5lIF9fY2xyX0lSTCgpCWRvIHsgX19yZWcoMHhmZWZmOTgyOCkgPSAweDEwMDAwMDsgbWIoKTsgfSB3aGlsZSgwKQorCisjZGVmaW5lIF9fZ2V0X0lSUihOKQkoeyBfX3JlZygweGZlZmY5ODQwICsgKE4pICogOCk7IH0pCisjZGVmaW5lIF9fc2V0X0lSUihOLFYpCWRvIHsgX19yZWcoMHhmZWZmOTg0MCArIChOKSAqIDgpID0gKFYpOyB9IHdoaWxlKDApCisKKyNkZWZpbmUgX19nZXRfSUlUTVIoTikJKHsgX19yZWcoMHhmZWZmOTg4MCArIChOKSAqIDgpOyB9KQorI2RlZmluZSBfX3NldF9JSVRNUihOLFYpIGRvIHsgX19yZWcoMHhmZWZmOTg4MCArIChOKSAqIDgpID0gKFYpOyB9IHdoaWxlKDApCisKKworI2VuZGlmIC8qIF9BU01fSVJDX1JFR1MgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9pcnEtcm91dGluZy5oIGIvaW5jbHVkZS9hc20tZnJ2L2lycS1yb3V0aW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg2ZmIyYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWZydi9pcnEtcm91dGluZy5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qIGlycS1yb3V0aW5nLmg6IG11bHRpcGxleGVkIElSUSByb3V0aW5nCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgX0FTTV9JUlFfUk9VVElOR19ICisjZGVmaW5lIF9BU01fSVJRX1JPVVRJTkdfSAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisKK3N0cnVjdCBpcnFfc291cmNlOworc3RydWN0IGlycV9sZXZlbDsKKworLyoKKyAqIElSUSBhY3Rpb24gZGlzdHJpYnV0aW9uIHNldHMKKyAqLworc3RydWN0IGlycV9ncm91cCB7CisJaW50CQkJZmlyc3RfaXJxOwkvKiBmaXJzdCBJUlEgZGlzdHJpYnV0ZWQgaGVyZSAqLworCXZvaWQgKCpjb250cm9sKShzdHJ1Y3QgaXJxX2dyb3VwICpncm91cCwgaW50IGluZGV4LCBpbnQgb24pOworCisJc3RydWN0IGlycWFjdGlvbgkqYWN0aW9uc1tOUl9JUlFfQUNUSU9OU19QRVJfR1JPVVBdOwkvKiBJUlEgYWN0aW9uIGNoYWlucyAqLworCXN0cnVjdCBpcnFfc291cmNlCSpzb3VyY2VzW05SX0lSUV9BQ1RJT05TX1BFUl9HUk9VUF07CS8qIElSUSBzb3VyY2VzICovCisJaW50CQkJZGlzYWJsZV9jbnRbTlJfSVJRX0FDVElPTlNfUEVSX0dST1VQXTsJLyogZGlzYWJsZSBjb3VudHMgKi8KK307CisKKy8qCisgKiBJUlEgc291cmNlIG1hbmFnZXIKKyAqLworc3RydWN0IGlycV9zb3VyY2UgeworCXN0cnVjdCBpcnFfc291cmNlCSpuZXh0OworCXN0cnVjdCBpcnFfbGV2ZWwJKmxldmVsOworCWNvbnN0IGNoYXIJCSptdXhuYW1lOworCXZvbGF0aWxlIHZvaWQgX19pb21lbQkqbXV4ZGF0YTsKKwl1bnNpZ25lZCBsb25nCQlpcnFtYXNrOworCisJdm9pZCAoKmRvaXJxKShzdHJ1Y3QgaXJxX3NvdXJjZSAqc291cmNlKTsKK307CisKKy8qCisgKiBJUlEgbGV2ZWwgbWFuYWdlbWVudCAocGVyIENQVSBJUlEgcHJpb3JpdHkgLyBlbnRyeSB2ZWN0b3IpCisgKi8KK3N0cnVjdCBpcnFfbGV2ZWwgeworCWludAkJCXVzYWdlOworCWludAkJCWRpc2FibGVfY291bnQ7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CQkvKiBjdXJyZW50IFNBX0lOVEVSUlVQVCBhbmQgU0FfU0hJUlEgc2V0dGluZ3MgKi8KKwlzcGlubG9ja190CQlsb2NrOworCXN0cnVjdCBpcnFfc291cmNlCSpzb3VyY2VzOworfTsKKworZXh0ZXJuIHN0cnVjdCBpcnFfbGV2ZWwgZnJ2X2lycV9sZXZlbHNbMTZdOworZXh0ZXJuIHN0cnVjdCBpcnFfZ3JvdXAgKmlycV9ncm91cHNbTlJfSVJRX0dST1VQU107CisKK2V4dGVybiB2b2lkIGZydl9pcnFfcm91dGUoc3RydWN0IGlycV9zb3VyY2UgKnNvdXJjZSwgaW50IGlycWxldmVsKTsKK2V4dGVybiB2b2lkIGZydl9pcnFfcm91dGVfZXh0ZXJuYWwoc3RydWN0IGlycV9zb3VyY2UgKnNvdXJjZSwgaW50IGlycSk7CitleHRlcm4gdm9pZCBmcnZfaXJxX3NldF9ncm91cChzdHJ1Y3QgaXJxX2dyb3VwICpncm91cCk7CitleHRlcm4gdm9pZCBkaXN0cmlidXRlX2lycXMoc3RydWN0IGlycV9ncm91cCAqZ3JvdXAsIHVuc2lnbmVkIGxvbmcgaXJxbWFzayk7CitleHRlcm4gdm9pZCByb3V0ZV9jcHVfaXJxcyh2b2lkKTsKKworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKworI2VuZGlmIC8qIF9BU01fSVJRX1JPVVRJTkdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L2lycS5oIGIvaW5jbHVkZS9hc20tZnJ2L2lycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMTZkOGQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1mcnYvaXJxLmgKQEAgLTAsMCArMSw0NCBAQAorLyogaXJxLmg6IEZSViBJUlEgZGVmaW5pdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfQVNNX0lSUV9IXworI2RlZmluZSBfQVNNX0lSUV9IXworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKy8qCisgKiB0aGUgc3lzdGVtIGhhcyBhbiBvbi1DUFUgUElDIGFuZCBhbm90aGVyIFBJQyBvbiB0aGUgRlBHQSBhbmQgb3RoZXIgUElDcyBvbiBvdGhlciBwZXJpcGhlcmFscywKKyAqIHNvIHdlIGRvIHNvbWUgcm91dGluZyBpbiBpcnEtcm91dGluZy5bY2hdIHRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGZhbHNlLXBvc2l0aXZlcyBzZWVuIGJ5CisgKiBkcml2ZXJzCisgKi8KKworLyogdGhpcyBudW1iZXIgaXMgdXNlZCB3aGVuIG5vIGludGVycnVwdCBoYXMgYmVlbiBhc3NpZ25lZCAqLworI2RlZmluZSBOT19JUlEJCQkJKC0xKQorCisjZGVmaW5lIE5SX0lSUV9MT0cyX0FDVElPTlNfUEVSX0dST1VQCTUKKyNkZWZpbmUgTlJfSVJRX0FDVElPTlNfUEVSX0dST1VQCSgxIDw8IE5SX0lSUV9MT0cyX0FDVElPTlNfUEVSX0dST1VQKQorI2RlZmluZSBOUl9JUlFfR1JPVVBTCQkJNAorI2RlZmluZSBOUl9JUlFTCQkJCShOUl9JUlFfQUNUSU9OU19QRVJfR1JPVVAgKiBOUl9JUlFfR1JPVVBTKQorCisvKiBwcm9iZSByZXR1cm5zIGEgMzItYml0IElSUSBtYXNrOi0vICovCisjZGVmaW5lIE1JTl9QUk9CRV9JUlEJKE5SX0lSUVMgLSAzMikKKworc3RhdGljIGlubGluZSBpbnQgaXJxX2Nhbm9uaWNhbGl6ZShpbnQgaXJxKQoreworCXJldHVybiBpcnE7Cit9CisKK2V4dGVybiB2b2lkIGRpc2FibGVfaXJxX25vc3luYyh1bnNpZ25lZCBpbnQgaXJxKTsKK2V4dGVybiB2b2lkIGRpc2FibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpOworZXh0ZXJuIHZvaWQgZW5hYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKKworCisjZW5kaWYgLyogX0FTTV9JUlFfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9rbWFwX3R5cGVzLmggYi9pbmNsdWRlL2FzbS1mcnYva21hcF90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4ZTE2YjIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1mcnYva21hcF90eXBlcy5oCkBAIC0wLDAgKzEsMjkgQEAKKworI2lmbmRlZiBfQVNNX0tNQVBfVFlQRVNfSAorI2RlZmluZSBfQVNNX0tNQVBfVFlQRVNfSAorCitlbnVtIGttX3R5cGUgeworCS8qIGFyY2ggc3BlY2lmaWMga21hcHMgLSBjaGFuZ2UgdGhlIG51bWJlcnMgYXR0YWNoZWQgdG8gdGhlc2UgYXQgeW91ciBwZXJpbCAqLworCV9fS01fQ0FDSEUsCQkvKiBjYWNoZSBmbHVzaCBwYWdlIGF0dGFjaG1lbnQgcG9pbnQgKi8KKwlfX0tNX1BHRCwJCS8qIGN1cnJlbnQgcGFnZSBkaXJlY3RvcnkgKi8KKwlfX0tNX0lUTEJfUFRELAkJLyogY3VycmVudCBpbnN0cnVjdGlvbiBUTEIgbWlzcyBwYWdlIHRhYmxlIGxvb2t1cCAqLworCV9fS01fRFRMQl9QVEQsCQkvKiBjdXJyZW50IGRhdGEgVExCIG1pc3MgcGFnZSB0YWJsZSBsb29rdXAgKi8KKworCS8qIGdlbmVyYWwga21hcHMgKi8KKyAgICAgICAgS01fQk9VTkNFX1JFQUQsCisgICAgICAgIEtNX1NLQl9TVU5SUENfREFUQSwKKyAgICAgICAgS01fU0tCX0RBVEFfU09GVElSUSwKKyAgICAgICAgS01fVVNFUjAsCisgICAgICAgIEtNX1VTRVIxLAorCUtNX0JJT19TUkNfSVJRLAorCUtNX0JJT19EU1RfSVJRLAorCUtNX1BURTAsCisJS01fUFRFMSwKKwlLTV9JUlEwLAorCUtNX0lSUTEsCisJS01fU09GVElSUTAsCisJS01fU09GVElSUTEsCisJS01fVFlQRV9OUgorfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvbGlua2FnZS5oIGIvaW5jbHVkZS9hc20tZnJ2L2xpbmthZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzZjMWJjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tZnJ2L2xpbmthZ2UuaApAQCAtMCwwICsxLDcgQEAKKyNpZm5kZWYgX19BU01fTElOS0FHRV9ICisjZGVmaW5lIF9fQVNNX0xJTktBR0VfSAorCisjZGVmaW5lIF9fQUxJR04JCS5hbGlnbiA0CisjZGVmaW5lIF9fQUxJR05fU1RSCSIuYWxpZ24gNCIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvbG9jYWwuaCBiL2luY2x1ZGUvYXNtLWZydi9sb2NhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyN2JkZjAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1mcnYvbG9jYWwuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX0FTTV9MT0NBTF9ICisjZGVmaW5lIF9BU01fTE9DQUxfSAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbG9jYWwuaD4KKworI2VuZGlmIC8qIF9BU01fTE9DQUxfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L21hdGgtZW11LmggYi9pbmNsdWRlL2FzbS1mcnYvbWF0aC1lbXUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzhmNzMxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tZnJ2L21hdGgtZW11LmgKQEAgLTAsMCArMSwzMDEgQEAKKyNpZm5kZWYgX0FTTV9NQVRIX0VNVV9ICisjZGVmaW5lIF9BU01fTUFUSF9FTVVfSAorCisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorCisvKiBTdGF0dXMgUmVnaXN0ZXIgYml0cyAqLworCisvKiBhY2NydWVkIGV4Y2VwdGlvbiBiaXRzICovCisjZGVmaW5lIEZQU1JfQUVYQ19JTkVYCTMKKyNkZWZpbmUgRlBTUl9BRVhDX0RaCTQKKyNkZWZpbmUgRlBTUl9BRVhDX1VORkwJNQorI2RlZmluZSBGUFNSX0FFWENfT1ZGTAk2CisjZGVmaW5lIEZQU1JfQUVYQ19JT1AJNworCisvKiBleGNlcHRpb24gc3RhdHVzIGJpdHMgKi8KKyNkZWZpbmUgRlBTUl9FWENfSU5FWDEJOAorI2RlZmluZSBGUFNSX0VYQ19JTkVYMgk5CisjZGVmaW5lIEZQU1JfRVhDX0RaCTEwCisjZGVmaW5lIEZQU1JfRVhDX1VORkwJMTEKKyNkZWZpbmUgRlBTUl9FWENfT1ZGTAkxMgorI2RlZmluZSBGUFNSX0VYQ19PUEVSUgkxMworI2RlZmluZSBGUFNSX0VYQ19TTkFOCTE0CisjZGVmaW5lIEZQU1JfRVhDX0JTVU4JMTUKKworLyogcXVvdGllbnQgYnl0ZSwgYXNzdW1lcyBiaWctZW5kaWFuLCBvZiBjb3Vyc2UgKi8KKyNkZWZpbmUgRlBTUl9RVU9USUVOVChmcHNyKSAoKigoc2lnbmVkIGNoYXIgKikgJihmcHNyKSArIDEpKQorCisvKiBjb25kaXRpb24gY29kZSBiaXRzICovCisjZGVmaW5lIEZQU1JfQ0NfTkFOCTI0CisjZGVmaW5lIEZQU1JfQ0NfSU5GCTI1CisjZGVmaW5lIEZQU1JfQ0NfWgkyNgorI2RlZmluZSBGUFNSX0NDX05FRwkyNworCisKKy8qIENvbnRyb2wgcmVnaXN0ZXIgYml0cyAqLworCisvKiByb3VuZGluZyBtb2RlICovCisjZGVmaW5lCUZQQ1JfUk9VTkRfUk4JMAkJLyogcm91bmQgdG8gbmVhcmVzdC9ldmVuICovCisjZGVmaW5lIEZQQ1JfUk9VTkRfUloJMQkJLyogcm91bmQgdG8gemVybyAqLworI2RlZmluZSBGUENSX1JPVU5EX1JNCTIJCS8qIG1pbnVzIGluZmluaXR5ICovCisjZGVmaW5lIEZQQ1JfUk9VTkRfUlAJMwkJLyogcGx1cyBpbmZpbml0eSAqLworCisvKiByb3VuZGluZyBwcmVjaXNpb24gKi8KKyNkZWZpbmUgRlBDUl9QUkVDSVNJT05fWAkwCS8qIGxvbmcgZG91YmxlICovCisjZGVmaW5lIEZQQ1JfUFJFQ0lTSU9OX1MJMQkvKiBkb3VibGUgKi8KKyNkZWZpbmUgRlBDUl9QUkVDSVNJT05fRAkyCS8qIGZsb2F0ICovCisKKworLyogRmxhZ3MgdG8gc2VsZWN0IHRoZSBkZWJ1Z2dpbmcgb3V0cHV0ICovCisjZGVmaW5lIFBERUNPREUJCTAKKyNkZWZpbmUgUEVYRUNVVEUJMQorI2RlZmluZSBQQ09OVgkJMgorI2RlZmluZSBQTk9STQkJMworI2RlZmluZSBQUkVHSVNURVIJNAorI2RlZmluZSBQSU5TVFIJCTUKKyNkZWZpbmUgUFVOSU1QTAkJNgorI2RlZmluZSBQTU9WRU0JCTcKKworI2RlZmluZSBQTURFQ09ERQkoMTw8UERFQ09ERSkKKyNkZWZpbmUgUE1FWEVDVVRFCSgxPDxQRVhFQ1VURSkKKyNkZWZpbmUgUE1DT05WCQkoMTw8UENPTlYpCisjZGVmaW5lIFBNTk9STQkJKDE8PFBOT1JNKQorI2RlZmluZSBQTVJFR0lTVEVSCSgxPDxQUkVHSVNURVIpCisjZGVmaW5lIFBNSU5TVFIJCSgxPDxQSU5TVFIpCisjZGVmaW5lIFBNVU5JTVBMCSgxPDxQVU5JTVBMKQorI2RlZmluZSBQTU1PVkVNCQkoMTw8UE1PVkVNKQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKwordW5pb24gZnBfbWFudDY0IHsKKwl1bnNpZ25lZCBsb25nIGxvbmcgbTY0OworCXVuc2lnbmVkIGxvbmcgbTMyWzJdOworfTsKKwordW5pb24gZnBfbWFudDEyOCB7CisJdW5zaWduZWQgbG9uZyBsb25nIG02NFsyXTsKKwl1bnNpZ25lZCBsb25nIG0zMls0XTsKK307CisKKy8qIGludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIGV4dGVuZGVkIGZwIG51bWJlcnMgKi8KK3N0cnVjdCBmcF9leHQgeworCXVuc2lnbmVkIGNoYXIgbG93bWFudDsKKwl1bnNpZ25lZCBjaGFyIHNpZ247CisJdW5zaWduZWQgc2hvcnQgZXhwOworCXVuaW9uIGZwX21hbnQ2NCBtYW50OworfTsKKworLyogQyByZXByZXNlbnRhdGlvbiBvZiBGUFUgcmVnaXN0ZXJzICovCisvKiBOT1RFOiBpZiB5b3UgY2hhbmdlIHRoaXMsIHlvdSBoYXZlIHRvIGNoYW5nZSB0aGUgYXNzZW1ibGVyIG9mZnNldHMKKyAgIGJlbG93IGFuZCB0aGUgc2l6ZSBpbiA8YXNtL2ZwdS5oPiwgdG9vICovCitzdHJ1Y3QgZnBfZGF0YSB7CisJc3RydWN0IGZwX2V4dCBmcHJlZ1s4XTsKKwl1bnNpZ25lZCBpbnQgZnBjcjsKKwl1bnNpZ25lZCBpbnQgZnBzcjsKKwl1bnNpZ25lZCBpbnQgZnBpYXI7CisJdW5zaWduZWQgc2hvcnQgcHJlYzsKKwl1bnNpZ25lZCBzaG9ydCBybmQ7CisJc3RydWN0IGZwX2V4dCB0ZW1wWzJdOworfTsKKworI2lmIEZQVV9FTVVfREVCVUcKK2V4dGVybiB1bnNpZ25lZCBpbnQgZnBfZGVidWdwcmludDsKKworI2RlZmluZSBkcHJpbnQoYml0LCBmbXQsIGFyZ3MuLi4pICh7CQkJXAorCWlmIChmcF9kZWJ1Z3ByaW50ICYgKDEgPDwgKGJpdCkpKQkJXAorCQlwcmludGsoZm10LCAjIyBhcmdzKTsJCQlcCit9KQorI2Vsc2UKKyNkZWZpbmUgZHByaW50KGJpdCwgZm10LCBhcmdzLi4uKQorI2VuZGlmCisKKyNkZWZpbmUgdXByaW50KHN0cikgKHsJCQkJCVwKKwlzdGF0aWMgaW50IF9fY291bnQgPSAzOwkJCQlcCisJCQkJCQkJXAorCWlmIChfX2NvdW50ID4gMCkgewkJCQlcCisJCXByaW50aygiWW91IGp1c3QgaGl0IGFuIHVuaW1wbGVtZW50ZWQgIglcCisJCSAgICAgICAiZnB1IGluc3RydWN0aW9uICglcylcbiIsIHN0cik7CVwKKwkJcHJpbnRrKCJQbGVhc2UgcmVwb3J0IHRoaXMgdG8gLi4uLlxuIik7CVwKKwkJX19jb3VudC0tOwkJCQlcCisJfQkJCQkJCVwKK30pCisKKyNkZWZpbmUgRlBEQVRBCQkoKHN0cnVjdCBmcF9kYXRhICopY3VycmVudC0+dGhyZWFkLmZwKQorCisjZWxzZQkvKiBfX0FTU0VNQkxZX18gKi8KKworI2RlZmluZSBGUERBVEEJCSVhMgorCisvKiBvZmZzZXRzIGZyb20gdGhlIGJhc2UgcmVnaXN0ZXIgdG8gdGhlIGZsb2F0aW5nIHBvaW50IGRhdGEgaW4gdGhlIHRhc2sgc3RydWN0ICovCisjZGVmaW5lIEZQRF9GUFJFRwkoVEFTS19USFJFQUQrVEhSRUFEX0ZQUkVHKzApCisjZGVmaW5lIEZQRF9GUENSCShUQVNLX1RIUkVBRCtUSFJFQURfRlBSRUcrOTYpCisjZGVmaW5lIEZQRF9GUFNSCShUQVNLX1RIUkVBRCtUSFJFQURfRlBSRUcrMTAwKQorI2RlZmluZSBGUERfRlBJQVIJKFRBU0tfVEhSRUFEK1RIUkVBRF9GUFJFRysxMDQpCisjZGVmaW5lIEZQRF9QUkVDCShUQVNLX1RIUkVBRCtUSFJFQURfRlBSRUcrMTA4KQorI2RlZmluZSBGUERfUk5ECQkoVEFTS19USFJFQUQrVEhSRUFEX0ZQUkVHKzExMCkKKyNkZWZpbmUgRlBEX1RFTVBGUDEJKFRBU0tfVEhSRUFEK1RIUkVBRF9GUFJFRysxMTIpCisjZGVmaW5lIEZQRF9URU1QRlAyCShUQVNLX1RIUkVBRCtUSFJFQURfRlBSRUcrMTI0KQorI2RlZmluZSBGUERfU0laRU9GCShUQVNLX1RIUkVBRCtUSFJFQURfRlBSRUcrMTM2KQorCisvKiBvZmZzZXRzIG9uIHRoZSBzdGFjayB0byBhY2Nlc3Mgc2F2ZWQgcmVnaXN0ZXJzLAorICogdGhlc2UgYXJlIG9ubHkgdXNlZCBkdXJpbmcgaW5zdHJ1Y3Rpb24gZGVjb2RpbmcKKyAqIHdoZXJlIHdlIGFsd2F5cyBrbm93IGhvdyBkZWVwIHdlJ3JlIG9uIHRoZSBzdGFjay4KKyAqLworI2RlZmluZSBGUFNfRE8JCShQVF9EMCkKKyNkZWZpbmUgRlBTX0QxCQkoUFRfRDEpCisjZGVmaW5lIEZQU19EMgkJKFBUX0QyKQorI2RlZmluZSBGUFNfQTAJCShQVF9BMCkKKyNkZWZpbmUgRlBTX0ExCQkoUFRfQTEpCisjZGVmaW5lIEZQU19BMgkJKFBUX0EyKQorI2RlZmluZSBGUFNfU1IJCShQVF9TUikKKyNkZWZpbmUgRlBTX1BDCQkoUFRfUEMpCisjZGVmaW5lIEZQU19FQQkJKFBUX1BDKzYpCisjZGVmaW5lIEZQU19QQzIJCShQVF9QQysxMCkKKworLm1hY3JvCWZwX2dldF9mcF9yZWcKKwlsZWEJKEZQRF9GUFJFRyxGUERBVEEsJWQwLncqNCksJWEwCisJbGVhCSglYTAsJWQwLncqOCksJWEwCisuZW5kbQorCisvKiBNYWNyb3MgdXNlZCB0byBnZXQvcHV0IHRoZSBjdXJyZW50IHByb2dyYW0gY291bnRlci4KKyAqIDAyMC8wMzAgdXNlIGEgZGlmZmVyZW50IHN0YWNrIGZyYW1lIHRoZW4gMDQwLzA2MCwgZm9yIHRoZQorICogMDQwLzA2MCB0aGUgcmV0dXJuIHBjIHBvaW50cyBhbHJlYWR5IHRvIHRoZSBuZXh0IGxvY2F0aW9uLAorICogc28gdGhpcyBvbmx5IG5lZWRzIHRvIGJlIG1vZGlmaWVkIGZvciBqdW1wIGluc3RydWN0aW9ucy4KKyAqLworLm1hY3JvCWZwX2dldF9wYyBkZXN0CisJbW92ZS5sCShGUFNfUEMrNCwlc3ApLFxkZXN0CisuZW5kbQorCisubWFjcm8JZnBfcHV0X3BjIHNyYyxqdW1wPTAKKwltb3ZlLmwJXHNyYywoRlBTX1BDKzQsJXNwKQorLmVuZG0KKworLm1hY3JvCWZwX2dldF9pbnN0cl9kYXRhCWYscyxkZXN0LGxhYmVsCisJZ2V0dXNlcglcZiwlc3BAKEZQU19QQys0KUAoMCksXGRlc3QsXGxhYmVsLCVzcEAoRlBTX1BDKzQpCisJYWRkcS5sCSNccywlc3BAKEZQU19QQys0KQorLmVuZG0KKworLm1hY3JvCWZwX2dldF9pbnN0cl93b3JkCWRlc3QsbGFiZWwsYWRkcgorCWZwX2dldF9pbnN0cl9kYXRhCXcsMixcZGVzdCxcbGFiZWwsXGFkZHIKKy5lbmRtCisKKy5tYWNybwlmcF9nZXRfaW5zdHJfbG9uZwlkZXN0LGxhYmVsLGFkZHIKKwlmcF9nZXRfaW5zdHJfZGF0YQlsLDQsXGRlc3QsXGxhYmVsLFxhZGRyCisuZW5kbQorCisvKiBUaGVzZSBtYWNyb3MgYXJlIHVzZWQgdG8gcmVhZCBmcm9tL3dyaXRlIHRvIHVzZXIgc3BhY2UKKyAqIG9uIGVycm9yIHdlIGp1bXAgdG8gdGhlIGZpeHVwIHNlY3Rpb24sIGxvYWQgdGhlIGZhdWx0CisgKiBhZGRyZXNzIGludG8gJWEwIGFuZCBqdW1wIHRvIHRoZSBleGl0LgorICogKGRlcml2ZWQgZnJvbSA8YXNtL3VhY2Nlc3MuaD4pCisgKi8KKy5tYWNybwlnZXR1c2VyCXNpemUsc3JjLGRlc3QsbGFiZWwsYWRkcgorfAlwcmludGYJLCJbXHNpemU8JTA4eF0iLDEsXGFkZHIKKy5MdTFcQDoJbW92ZXNcc2l6ZQlcc3JjLFxkZXN0CisKKwkuc2VjdGlvbiAuZml4dXAsImF4IgorCS5ldmVuCisuTHUyXEA6CW1vdmUubAlcYWRkciwlYTAKKwlqcmEJXGxhYmVsCisJLnByZXZpb3VzCisKKwkuc2VjdGlvbiBfX2V4X3RhYmxlLCJhIgorCS5hbGlnbgk0CisJLmxvbmcJLkx1MVxALC5MdTJcQAorCS5wcmV2aW91cworLmVuZG0KKworLm1hY3JvCXB1dHVzZXIJc2l6ZSxzcmMsZGVzdCxsYWJlbCxhZGRyCit8CXByaW50ZgksIltcc2l6ZT4lMDh4XSIsMSxcYWRkcgorLkx1MVxAOgltb3Zlc1xzaXplCVxzcmMsXGRlc3QKKy5MdTJcQDoKKworCS5zZWN0aW9uIC5maXh1cCwiYXgiCisJLmV2ZW4KKy5MdTNcQDoJbW92ZS5sCVxhZGRyLCVhMAorCWpyYQlcbGFiZWwKKwkucHJldmlvdXMKKworCS5zZWN0aW9uIF9fZXhfdGFibGUsImEiCisJLmFsaWduCTQKKwkubG9uZwkuTHUxXEAsLkx1M1xACisJLmxvbmcJLkx1MlxALC5MdTNcQAorCS5wcmV2aW91cworLmVuZG0KKworCisubWFjcm8JbW92ZXN0YWNrCW5yLGFyZzEsYXJnMixhcmczLGFyZzQsYXJnNQorCS5pZglcbnIKKwltb3Zlc3RhY2sJKFxuci0xKSxcYXJnMixcYXJnMyxcYXJnNCxcYXJnNQorCW1vdmUubAlcYXJnMSwtKCVzcCkKKwkuZW5kaWYKKy5lbmRtCisKKy5tYWNybwlwcmludGYJYml0PS0xLHN0cmluZyxucj0wLGFyZzEsYXJnMixhcmczLGFyZzQsYXJnNQorI2lmZGVmIEZQVV9FTVVfREVCVUcKKwkuZGF0YQorLkxwZGF0YVxAOgorCS5zdHJpbmcJIlxzdHJpbmciCisJLnByZXZpb3VzCisKKwltb3ZlbS5sCSVkMC8lZDEvJWEwLyVhMSwtKCVzcCkKKwkuaWYJXGJpdCsxCisjaWYgMAorCW1vdmVxCSNcYml0LCVkMAorCWFuZHcJIzcsJWQwCisJYnRzdAklZDAsZnBfZGVidWdwcmludCsoKDMxLVxiaXQpLzgpCisjZWxzZQorCWJ0c3QJI1xiaXQsZnBfZGVidWdwcmludCsoKDMxLVxiaXQpLzgpCisjZW5kaWYKKwlqZXEJLkxwc2tpcFxACisJLmVuZGlmCisJbW92ZXN0YWNrCVxucixcYXJnMSxcYXJnMixcYXJnMyxcYXJnNCxcYXJnNQorCXBlYQkuTHBkYXRhXEAKKwlqc3IJcHJpbnRrCisJbGVhCSgoXG5yKzEpKjQsJXNwKSwlc3AKKy5McHNraXBcQDoKKwltb3ZlbS5sCSglc3ApKywlZDAvJWQxLyVhMC8lYTEKKyNlbmRpZgorLmVuZG0KKworLm1hY3JvCXByaW50eAliaXQsZnAKKyNpZmRlZiBGUFVfRU1VX0RFQlVHCisJbW92ZW0ubAklZDAvJWEwLC0oJXNwKQorCWxlYQlcZnAsJWEwCisjaWYgMAorCW1vdmVxCSMnKycsJWQwCisJdHN0LncJKCVhMCkKKwlqZXEJLkx4MVxACisJbW92ZXEJIyctJywlZDAKKy5MeDFcQDoJcHJpbnRmCVxiaXQsIiAlYyIsMSwlZDAKKwltb3ZlLmwJKDQsJWEwKSwlZDAKKwliY2xyCSMzMSwlZDAKKwlqbmUJLkx4MlxACisJcHJpbnRmCVxiaXQsIjAuIgorCWpyYQkuTHgzXEAKKy5MeDJcQDoJcHJpbnRmCVxiaXQsIjEuIgorLkx4M1xAOglwcmludGYJXGJpdCwiJTA4eCUwOHgiLDIsJWQwLCVhMEAoOCkKKwltb3ZlLncJKDIsJWEwKSwlZDAKKwlleHQubAklZDAKKwlwcmludGYJXGJpdCwiRSUwNHgiLDEsJWQwCisjZWxzZQorCXByaW50ZglcYml0LCIgJTA4eCUwOHglMDh4IiwzLCVhMEAsJWEwQCg0KSwlYTBAKDgpCisjZW5kaWYKKwltb3ZlbS5sCSglc3ApKywlZDAvJWEwCisjZW5kaWYKKy5lbmRtCisKKy5tYWNybwlkZWJ1ZwlpbnN0cixhcmdzCisjaWZkZWYgRlBVX0VNVV9ERUJVRworCVxpbnN0cglcYXJncworI2VuZGlmCisuZW5kbQorCisKKyNlbmRpZgkvKiBfX0FTU0VNQkxZX18gKi8KKworI2VuZGlmCS8qIF9BU01fRlJWX01BVEhfRU1VX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L21iLXJlZ3MuaCBiL2luY2x1ZGUvYXNtLWZydi9tYi1yZWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhmNTc1ZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWZydi9tYi1yZWdzLmgKQEAgLTAsMCArMSwxODUgQEAKKy8qIG1iLXJlZ3MuaDogbW90aGVyYm9hcmQgcmVnaXN0ZXJzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgX0FTTV9NQl9SRUdTX0gKKyNkZWZpbmUgX0FTTV9NQl9SRUdTX0gKKworI2luY2x1ZGUgPGFzbS9jcHUtaXJxcy5oPgorI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgorI2luY2x1ZGUgPGFzbS9tZW0tbGF5b3V0Lmg+CisKKyNkZWZpbmUgX19yZWdpb25fSU8JS0VSTkVMX0lPX1NUQVJUCS8qIHRoZSByZWdpb24gZnJvbSAweGUwMDAwMDAwIHRvIDB4ZmZmZmZmZmYgaGFzIHN1aXRhYmxlCisJCQkJCSAqIHByb3RlY3Rpb24gbGFpZCBvdmVyIHRoZSB0b3AgZm9yIHVzZSBpbiBtZW1vcnktbWFwcGVkCisJCQkJCSAqIEkvTworCQkJCQkgKi8KKworI2RlZmluZSBfX3JlZ2lvbl9DUzAJMHhmZjAwMDAwMAkvKiBCb290IFJPTXMgYXJlYSAqLworCisjaWZkZWYgQ09ORklHX01COTMwOTFfVkRLCisvKgorICogVkRLIG1vdGhlcmJvYXJkIGFuZCBDUFUgY2FyZCBzcGVjaWZpYyBzdHVmZgorICovCisKKyNpbmNsdWRlIDxhc20vbWI5MzA5MS1mcGdhLWlycXMuaD4KKworI2RlZmluZSBJUlFfQ1BVX01COTM0OTNfMAlJUlFfQ1BVX0VYVEVSTkFMMAorI2RlZmluZSBJUlFfQ1BVX01COTM0OTNfMQlJUlFfQ1BVX0VYVEVSTkFMMQorCisjZGVmaW5lIF9fcmVnaW9uX0NTMgkweGUwMDAwMDAwCS8qIFNMQlVTL1BDSSBJL08gc3BhY2UgKi8KKyNkZWZpbmUgX19yZWdpb25fQ1MyX00JCTB4MGZmZmZmZmYgLyogbWFzayAqLworI2RlZmluZSBfX3JlZ2lvbl9DUzJfQwkJMHgwMDAwMDAwMCAvKiBjb250cm9sICovCisjZGVmaW5lIF9fcmVnaW9uX0NTNQkweGYwMDAwMDAwCS8qIE1COTM0OTMgQ1NDIGFyZWEgKERBViBkYXVnaHRlciBib2FyZCkgKi8KKyNkZWZpbmUgX19yZWdpb25fQ1M1X00JCTB4MDBmZmZmZmYKKyNkZWZpbmUgX19yZWdpb25fQ1M1X0MJCTB4MDAwMTAwMDAKKyNkZWZpbmUgX19yZWdpb25fQ1M3CTB4ZjEwMDAwMDAJLyogQ0I3MCBDUFUtY2FyZCBQQ01DSUEgcG9ydCBJL08gc3BhY2UgKi8KKyNkZWZpbmUgX19yZWdpb25fQ1M3X00JCTB4MDBmZmZmZmYKKyNkZWZpbmUgX19yZWdpb25fQ1M3X0MJCTB4MDA0MTA3MDEKKyNkZWZpbmUgX19yZWdpb25fQ1MxCTB4ZmMwMDAwMDAJLyogU0xCVVMvUENJIGJyaWRnZSBjb250cm9sIHJlZ2lzdGVycyAqLworI2RlZmluZSBfX3JlZ2lvbl9DUzFfTQkJMHgwMDBmZmZmZgorI2RlZmluZSBfX3JlZ2lvbl9DUzFfQwkJMHgwMDAwMDAwMAorI2RlZmluZSBfX3JlZ2lvbl9DUzYJMHhmYzEwMDAwMAkvKiBDQjcwIENQVS1jYXJkIERNOTAwMCBMQU4gSS9PIHNwYWNlICovCisjZGVmaW5lIF9fcmVnaW9uX0NTNl9NCQkweDAwMGZmZmZmCisjZGVmaW5lIF9fcmVnaW9uX0NTNl9DCQkweDAwNDAwNzA3CisjZGVmaW5lIF9fcmVnaW9uX0NTMwkweGZjMjAwMDAwCS8qIE1COTM0OTMgQ1NSIGFyZWEgKERBViBkYXVnaHRlciBib2FyZCkgKi8KKyNkZWZpbmUgX19yZWdpb25fQ1MzX00JCTB4MDAwZmZmZmYKKyNkZWZpbmUgX19yZWdpb25fQ1MzX0MJCTB4YzgxMDAwMDAKKyNkZWZpbmUgX19yZWdpb25fQ1M0CTB4ZmQwMDAwMDAJLyogQ0I3MCBDUFUtY2FyZCBleHRyYSBmbGFzaCBzcGFjZSAqLworI2RlZmluZSBfX3JlZ2lvbl9DUzRfTQkJMHgwMGZmZmZmZgorI2RlZmluZSBfX3JlZ2lvbl9DUzRfQwkJMHgwMDAwMGYwNworCisjZGVmaW5lIF9fcmVnaW9uX1BDSV9JTwkJKF9fcmVnaW9uX0NTMiArIDB4MDQwMDAwMDBVTCkKKyNkZWZpbmUgX19yZWdpb25fUENJX01FTQkoX19yZWdpb25fQ1MyICsgMHgwODAwMDAwMFVMKQorI2RlZmluZSBfX2ZsdXNoX1BDSV93cml0ZXMoKQkJCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJX19idWlsdGluX3dyaXRlOCgodm9sYXRpbGUgdm9pZCAqKSBfX3JlZ2lvbl9QQ0lfTUVNLCAwKTsJXAorfSB3aGlsZSgwKQorCisjZGVmaW5lIF9faXNfUENJX0lPKGFkZHIpIFwKKwkoKCh1bnNpZ25lZCBsb25nKShhZGRyKSA+PiAyNCkgLSAoX19yZWdpb25fUENJX0lPID4+IDI0KSAgPCAoMHgwNDAwMDAwMFVMID4+IDI0KSkKKworI2RlZmluZSBfX2lzX1BDSV9NRU0oYWRkcikgXAorCSgodW5zaWduZWQgbG9uZykoYWRkcikgLSBfX3JlZ2lvbl9QQ0lfTUVNIDwgMHgwODAwMDAwMFVMKQorCisjZGVmaW5lIF9fZ2V0X0NMS1NXKCkJKHsgKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKF9fcmVnaW9uX0NTMiArIDB4MDEzMDAwMGNVTCkgJiAweGZmVUw7IH0pCisjZGVmaW5lIF9fZ2V0X0NMS0lOKCkJKF9fZ2V0X0NMS1NXKCkgKiAxMjVVICogMTAwMDAwVSAvIDI0VSkKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK2V4dGVybiBpbnQgX19ub25ncHJlbGJzcyBtYjkzMDkwX21iMDBfZGV0ZWN0ZWQ7CisjZW5kaWYKKworI2RlZmluZSBfX2FkZHJfTEVEUygpCQkoX19yZWdpb25fQ1MyICsgMHgwMTIwMDAwNFVMKQorI2lmZGVmIENPTkZJR19NQjkzMDkwX01CMDAKKyNkZWZpbmUgX19zZXRfTEVEUyhYKQkJCQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCWlmIChtYjkzMDkwX21iMDBfZGV0ZWN0ZWQpCQkJCQlcCisJCV9fYnVpbHRpbl93cml0ZTMyKCh2b2lkICopIF9fYWRkcl9MRURTKCksIH4oWCkpOwlcCit9IHdoaWxlICgwKQorI2Vsc2UKKyNkZWZpbmUgX19zZXRfTEVEUyhYKQorI2VuZGlmCisKKyNkZWZpbmUgX19hZGRyX0xDRCgpCQkoX19yZWdpb25fQ1MyICsgMHgwMTIwMDAwOFVMKQorI2RlZmluZSBfX2dldF9MQ0QoQikJCV9fYnVpbHRpbl9yZWFkMzIoKHZvbGF0aWxlIHZvaWQgKikgKEIpKQorI2RlZmluZSBfX3NldF9MQ0QoQixYKQkJX19idWlsdGluX3dyaXRlMzIoKHZvbGF0aWxlIHZvaWQgKikgKEIpLCAoWCkpCisKKyNkZWZpbmUgTENEX0QJCQkweDAwMDAwMGZmCQkvKiBMQ0QgZGF0YSBidXMgKi8KKyNkZWZpbmUgTENEX1JXCQkJMHgwMDAwMDEwMAkJLyogTENEIFIvVyBzaWduYWwgKi8KKyNkZWZpbmUgTENEX1JTCQkJMHgwMDAwMDIwMAkJLyogTENEIFJlZ2lzdGVyIFNlbGVjdCAqLworI2RlZmluZSBMQ0RfRQkJCTB4MDAwMDA0MDAJCS8qIExDRCBTdGFydCBFbmFibGUgU2lnbmFsICovCisKKyNkZWZpbmUgTENEX0NNRF9DTEVBUgkJKExDRF9FfDB4MDAxKQorI2RlZmluZSBMQ0RfQ01EX0hPTUUJCShMQ0RfRXwweDAwMikKKyNkZWZpbmUgTENEX0NNRF9DVVJTT1JfSU5DCShMQ0RfRXwweDAwNCkKKyNkZWZpbmUgTENEX0NNRF9TQ1JPTExfSU5DCShMQ0RfRXwweDAwNSkKKyNkZWZpbmUgTENEX0NNRF9DVVJTT1JfREVDCShMQ0RfRXwweDAwNikKKyNkZWZpbmUgTENEX0NNRF9TQ1JPTExfREVDCShMQ0RfRXwweDAwNykKKyNkZWZpbmUgTENEX0NNRF9PRkYJCShMQ0RfRXwweDAwOCkKKyNkZWZpbmUgTENEX0NNRF9PTihDUlNSLEJMSU5LKQkoTENEX0V8MHgwMGN8KENSU1I8PDEpfEJMSU5LKQorI2RlZmluZSBMQ0RfQ01EX0NVUlNPUl9NT1ZFX0wJKExDRF9FfDB4MDEwKQorI2RlZmluZSBMQ0RfQ01EX0NVUlNPUl9NT1ZFX1IJKExDRF9FfDB4MDE0KQorI2RlZmluZSBMQ0RfQ01EX0RJU1BMQVlfU0hJRlRfTAkoTENEX0V8MHgwMTgpCisjZGVmaW5lIExDRF9DTURfRElTUExBWV9TSElGVF9SCShMQ0RfRXwweDAxYykKKyNkZWZpbmUgTENEX0NNRF9GVU5DU0VUKERMLE4sRikJKExDRF9FfDB4MDIwfChETDw8NCl8KE48PDMpfChGPDwyKSkKKyNkZWZpbmUgTENEX0NNRF9TRVRfQ0dfQUREUihYKQkoTENEX0V8MHgwNDB8WCkKKyNkZWZpbmUgTENEX0NNRF9TRVRfRERfQUREUihYKQkoTENEX0V8MHgwODB8WCkKKyNkZWZpbmUgTENEX0NNRF9SRUFEX0JVU1kJKExDRF9FfExDRF9SVykKKyNkZWZpbmUgTENEX0RBVEFfV1JJVEUoWCkJKExDRF9FfExDRF9SU3woWCkpCisjZGVmaW5lIExDRF9EQVRBX1JFQUQJCShMQ0RfRXxMQ0RfUlN8TENEX1JXKQorCisjZWxzZQorLyoKKyAqIFBESyB1bml0IHNwZWNpZmljIHN0dWZmCisgKi8KKworI2luY2x1ZGUgPGFzbS9tYjkzMDkzLWZwZ2EtaXJxcy5oPgorCisjZGVmaW5lIElSUV9DUFVfTUI5MzQ5M18wCUlSUV9DUFVfRVhURVJOQUwwCisjZGVmaW5lIElSUV9DUFVfTUI5MzQ5M18xCUlSUV9DUFVfRVhURVJOQUwxCisKKyNkZWZpbmUgX19yZWdpb25fQ1M1CTB4ZjAwMDAwMDAJLyogTUI5MzQ5MyBDU0MgYXJlYSAoREFWIGRhdWdodGVyIGJvYXJkKSAqLworI2RlZmluZSBfX3JlZ2lvbl9DUzVfTQkJMHgwMGZmZmZmZiAvKiBtYXNrICovCisjZGVmaW5lIF9fcmVnaW9uX0NTNV9DCQkweDAwMDEwMDAwIC8qIGNvbnRyb2wgKi8KKyNkZWZpbmUgX19yZWdpb25fQ1MyCTB4MjAwMDAwMDAJLyogRlBHQSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgX19yZWdpb25fQ1MyX00JCTB4MDAwZmZmZmYKKyNkZWZpbmUgX19yZWdpb25fQ1MyX0MJCTB4MDAwMDAwMDAKKyNkZWZpbmUgX19yZWdpb25fQ1MxCTB4ZmMxMDAwMDAJLyogTEFOIHJlZ2lzdGVycyAqLworI2RlZmluZSBfX3JlZ2lvbl9DUzFfTQkJMHgwMDBmZmZmZgorI2RlZmluZSBfX3JlZ2lvbl9DUzFfQwkJMHgwMDAxMDQwNAorI2RlZmluZSBfX3JlZ2lvbl9DUzMJMHhmYzIwMDAwMAkvKiBNQjkzNDkzIENTUiBhcmVhIChEQVYgZGF1Z2h0ZXIgYm9hcmQpICovCisjZGVmaW5lIF9fcmVnaW9uX0NTM19NCQkweDAwMGZmZmZmCisjZGVmaW5lIF9fcmVnaW9uX0NTM19DCQkweGM4MDAwMDAwCisjZGVmaW5lIF9fcmVnaW9uX0NTNAkweGZkMDAwMDAwCS8qIGV4dHJhIFJPTXMgYXJlYSAqLworI2RlZmluZSBfX3JlZ2lvbl9DUzRfTQkJMHgwMGZmZmZmZgorI2RlZmluZSBfX3JlZ2lvbl9DUzRfQwkJMHgwMDAwMGYwNworCisjZGVmaW5lIF9fcmVnaW9uX0NTNgkweGZlMDAwMDAwCS8qIG5vdCB1c2VkIC0gaGlkZSBiZWhpbmQgQ1BVIHJlc291cmNlIEkvTyByZWdzICovCisjZGVmaW5lIF9fcmVnaW9uX0NTNl9NCQkweDAwMGZmZmZmCisjZGVmaW5lIF9fcmVnaW9uX0NTNl9DCQkweDAwMDAwZjA3CisjZGVmaW5lIF9fcmVnaW9uX0NTNwkweGZlMDAwMDAwCS8qIG5vdCB1c2VkIC0gaGlkZSBiZWhpbmQgQ1BVIHJlc291cmNlIEkvTyByZWdzICovCisjZGVmaW5lIF9fcmVnaW9uX0NTN19NCQkweDAwMGZmZmZmCisjZGVmaW5lIF9fcmVnaW9uX0NTN19DCQkweDAwMDAwZjA3CisKKyNkZWZpbmUgX19pc19QQ0lfSU8oYWRkcikJMAkvKiBubyBQQ0kgKi8KKyNkZWZpbmUgX19pc19QQ0lfTUVNKGFkZHIpCTAKKyNkZWZpbmUgX19yZWdpb25fUENJX0lPCQkwCisjZGVmaW5lIF9fcmVnaW9uX1BDSV9NRU0JMAorI2RlZmluZSBfX2ZsdXNoX1BDSV93cml0ZXMoKQlkbyB7IH0gd2hpbGUoMCkKKworI2RlZmluZSBfX2dldF9DTEtTVygpCQkwVUwKKyNkZWZpbmUgX19nZXRfQ0xLSU4oKQkJNjYwMDAwMDBVTAorCisjZGVmaW5lIF9fYWRkcl9MRURTKCkJCShfX3JlZ2lvbl9DUzIgKyAweDAwMDAwMDIzVUwpCisjZGVmaW5lIF9fc2V0X0xFRFMoWCkJCV9fYnVpbHRpbl93cml0ZTgoKHZvbGF0aWxlIHZvaWQgKikgX19hZGRyX0xFRFMoKSwgKFgpKQorCisjZGVmaW5lIF9fYWRkcl9GUEdBVFIoKQkJKF9fcmVnaW9uX0NTMiArIDB4MDAwMDAwMzBVTCkKKyNkZWZpbmUgX19zZXRfRlBHQVRSKFgpCQlfX2J1aWx0aW5fd3JpdGUzMigodm9sYXRpbGUgdm9pZCAqKSBfX2FkZHJfRlBHQVRSKCksIChYKSkKKyNkZWZpbmUgX19nZXRfRlBHQVRSKCkJCV9fYnVpbHRpbl9yZWFkMzIoKHZvbGF0aWxlIHZvaWQgKikgX19hZGRyX0ZQR0FUUigpKQorCisjZGVmaW5lIE1COTMwOTNfRlBHQV9GUEdBVFJfQVVESU9fQ0xLCTB4MDAwMDAwMDMKKworI2RlZmluZSBfX3NldF9GUEdBVFJfQVVESU9fQ0xLKFYpIFwKKwlfX3NldF9GUEdBVFIoKF9fZ2V0X0ZQR0FUUigpICYgfk1COTMwOTNfRlBHQV9GUEdBVFJfQVVESU9fQ0xLKSB8IChWKSkKKworI2RlZmluZSBNQjkzMDkzX0ZQR0FfRlBHQVRSX0FVRElPX0NMS19PRkYJMHgwCisjZGVmaW5lIE1COTMwOTNfRlBHQV9GUEdBVFJfQVVESU9fQ0xLXzExTUh6CTB4MQorI2RlZmluZSBNQjkzMDkzX0ZQR0FfRlBHQVRSX0FVRElPX0NMS18xMk1IegkweDIKKyNkZWZpbmUgTUI5MzA5M19GUEdBX0ZQR0FUUl9BVURJT19DTEtfMDJNSHoJMHgzCisKKyNkZWZpbmUgTUI5MzA5M19GUEdBX1NXUl9QVVNIU1dNQVNLCSgweDFGPDwyNikKKyNkZWZpbmUgTUI5MzA5M19GUEdBX1NXUl9QVVNIU1c0CSgxPDwyOSkKKworI2RlZmluZSBfX2FkZHJfRlBHQV9TV1IJCSgodm9sYXRpbGUgdm9pZCAqKShfX3JlZ2lvbl9DUzIgKyAweDI4VUwpKQorI2RlZmluZSBfX2dldF9GUEdBX1BVU0hTVzFfNSgpCShfX2J1aWx0aW5fcmVhZDMyKF9fYWRkcl9GUEdBX1NXUikgJiBNQjkzMDkzX0ZQR0FfU1dSX1BVU0hTV01BU0spCisKKworI2VuZGlmCisKKyNlbmRpZiAvKiBfQVNNX01CX1JFR1NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L21iODY5NDNhLmggYi9pbmNsdWRlL2FzbS1mcnYvbWI4Njk0M2EuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODlmZDBiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tZnJ2L21iODY5NDNhLmgKQEAgLTAsMCArMSwzOSBAQAorLyogbWI4Njk0M2EuaDogTUI4Njk0MyBTUEFSQ2xpdGUgPC0+IFBDSSBicmlkZ2UgcmVnaXN0ZXJzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzIFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgX0FTTV9NQjg2OTQzQV9ICisjZGVmaW5lIF9BU01fTUI4Njk0M0FfSAorCisjaW5jbHVkZSA8YXNtL21iLXJlZ3MuaD4KKworI2RlZmluZSBfX3JlZ19NQjg2OTQzX3NsX2N0bAkJKih2b2xhdGlsZSB1aW50MzJfdCAqKSAoX19yZWdpb25fQ1MxICsgMHgwMCkKKworI2RlZmluZSBNQjg2OTQzX1NMX0NUTF9CVVNfV0lEVEhfNjQJMHgwMDAwMDAwMQorI2RlZmluZSBNQjg2OTQzX1NMX0NUTF9BU19IT1NUCQkweDAwMDAwMDAyCisjZGVmaW5lIE1CODY5NDNfU0xfQ1RMX0RSQ1RfTUFTVEVSX1NXQVAJMHgwMDAwMDAwNAorI2RlZmluZSBNQjg2OTQzX1NMX0NUTF9EUkNUX1NMQVZFX1NXQVAJMHgwMDAwMDAwOAorI2RlZmluZSBNQjg2OTQzX1NMX0NUTF9QQ0lfQ09ORklHX1NXQVAJMHgwMDAwMDAxMAorI2RlZmluZSBNQjg2OTQzX1NMX0NUTF9FQ1MwX0VOQUJMRQkweDAwMDAwMDIwCisjZGVmaW5lIE1CODY5NDNfU0xfQ1RMX0VDUzFfRU5BQkxFCTB4MDAwMDAwNDAKKyNkZWZpbmUgTUI4Njk0M19TTF9DVExfRUNTMl9FTkFCTEUJMHgwMDAwMDA4MAorCisjZGVmaW5lIF9fcmVnX01CODY5NDNfZWNzX2N0bChOKQkqKHZvbGF0aWxlIHVpbnQzMl90ICopIChfX3JlZ2lvbl9DUzEgKyAweDA4ICsgKDB4MDgqKE4pKSkKKyNkZWZpbmUgX19yZWdfTUI4Njk0M19lY3NfcmFuZ2UoTikJKih2b2xhdGlsZSB1aW50MzJfdCAqKSAoX19yZWdpb25fQ1MxICsgMHgyMCArICgweDEwKihOKSkpCisjZGVmaW5lIF9fcmVnX01CODY5NDNfZWNzX2Jhc2UoTikJKih2b2xhdGlsZSB1aW50MzJfdCAqKSAoX19yZWdpb25fQ1MxICsgMHgyOCArICgweDEwKihOKSkpCisKKyNkZWZpbmUgX19yZWdfTUI4Njk0M19zbF9wY2lfaW9fcmFuZ2UJKih2b2xhdGlsZSB1aW50MzJfdCAqKSAoX19yZWdpb25fQ1MxICsgMHg1MCkKKyNkZWZpbmUgX19yZWdfTUI4Njk0M19zbF9wY2lfaW9fYmFzZQkqKHZvbGF0aWxlIHVpbnQzMl90ICopIChfX3JlZ2lvbl9DUzEgKyAweDU4KQorI2RlZmluZSBfX3JlZ19NQjg2OTQzX3NsX3BjaV9tZW1fcmFuZ2UJKih2b2xhdGlsZSB1aW50MzJfdCAqKSAoX19yZWdpb25fQ1MxICsgMHg2MCkKKyNkZWZpbmUgX19yZWdfTUI4Njk0M19zbF9wY2lfbWVtX2Jhc2UJKih2b2xhdGlsZSB1aW50MzJfdCAqKSAoX19yZWdpb25fQ1MxICsgMHg2OCkKKyNkZWZpbmUgX19yZWdfTUI4Njk0M19wY2lfc2xfaW9fYmFzZQkqKHZvbGF0aWxlIHVpbnQzMl90ICopIChfX3JlZ2lvbl9DUzEgKyAweDcwKQorI2RlZmluZSBfX3JlZ19NQjg2OTQzX3BjaV9zbF9tZW1fYmFzZQkqKHZvbGF0aWxlIHVpbnQzMl90ICopIChfX3JlZ2lvbl9DUzEgKyAweDc4KQorCisjZW5kaWYgLyogX0FTTV9NQjg2OTQzQV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvbWI5MzA5MS1mcGdhLWlycXMuaCBiL2luY2x1ZGUvYXNtLWZydi9tYjkzMDkxLWZwZ2EtaXJxcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0MWJmYzUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1mcnYvbWI5MzA5MS1mcGdhLWlycXMuaApAQCAtMCwwICsxLDQ0IEBACisvKiBtYjkzMDkxLWZwZ2EtaXJxcy5oOiBNQjkzMDkxIENQVSBib2FyZCBGUEdBIElSUXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfQVNNX01COTMwOTFfRlBHQV9JUlFTX0gKKyNkZWZpbmUgX0FTTV9NQjkzMDkxX0ZQR0FfSVJRU19ICisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNpbmNsdWRlIDxhc20vaXJxLXJvdXRpbmcuaD4KKworI2RlZmluZSBJUlFfQkFTRV9GUEdBCQkoTlJfSVJRX0FDVElPTlNfUEVSX0dST1VQICogMSkKKworLyogSVJRIElEcyBwcmVzZW50ZWQgdG8gZHJpdmVycyAqLworZW51bSB7CisJSVJRX0ZQR0FfX1VOVVNFRAkJCT0gSVJRX0JBU0VfRlBHQSwKKwlJUlFfRlBHQV9TWVNJTlRfQlVTX0VYUEFOU0lPTl8xLAorCUlSUV9GUEdBX1NMX0JVU19FWFBBTlNJT05fMiwKKwlJUlFfRlBHQV9QQ0lfSU5URCwKKwlJUlFfRlBHQV9QQ0lfSU5UQywKKwlJUlFfRlBHQV9QQ0lfSU5UQiwKKwlJUlFfRlBHQV9QQ0lfSU5UQSwKKwlJUlFfRlBHQV9TTF9CVVNfRVhQQU5TSU9OXzcsCisJSVJRX0ZQR0FfU1lTSU5UX0JVU19FWFBBTlNJT05fOCwKKwlJUlFfRlBHQV9TTF9CVVNfRVhQQU5TSU9OXzksCisJSVJRX0ZQR0FfTUI4Njk0M19QQ0lfSU5UQSwKKwlJUlFfRlBHQV9NQjg2OTQzX1NMQlVTX1NJREUsCisJSVJRX0ZQR0FfUlRMODAyOV9JTlRBLAorCUlSUV9GUEdBX1NZU0lOVF9CVVNfRVhQQU5TSU9OXzEzLAorCUlSUV9GUEdBX1NMX0JVU19FWFBBTlNJT05fMTQsCisJSVJRX0ZQR0FfTk1JLAorfTsKKworCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYgLyogX0FTTV9NQjkzMDkxX0ZQR0FfSVJRU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvbWI5MzA5My1mcGdhLWlycXMuaCBiL2luY2x1ZGUvYXNtLWZydi9tYjkzMDkzLWZwZ2EtaXJxcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMGYxMWMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1mcnYvbWI5MzA5My1mcGdhLWlycXMuaApAQCAtMCwwICsxLDMxIEBACisvKiBtYjkzMDkzLWZwZ2EtaXJxcy5oOiBNQjkzMDkzIENQVSBib2FyZCBGUEdBIElSUXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfQVNNX01COTMwOTNfRlBHQV9JUlFTX0gKKyNkZWZpbmUgX0FTTV9NQjkzMDkzX0ZQR0FfSVJRU19ICisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNpbmNsdWRlIDxhc20vaXJxLXJvdXRpbmcuaD4KKworI2RlZmluZSBJUlFfQkFTRV9GUEdBCQkoTlJfSVJRX0FDVElPTlNfUEVSX0dST1VQICogMSkKKworLyogSVJRIElEcyBwcmVzZW50ZWQgdG8gZHJpdmVycyAqLworZW51bSB7CisJSVJRX0ZQR0FfUFVTSF9CVVRUT05fU1cxXzUJCT0gSVJRX0JBU0VfRlBHQSArIDgsCisJSVJRX0ZQR0FfUk9DS0VSX0NfU1c4CQkJPSBJUlFfQkFTRV9GUEdBICsgOSwKKwlJUlFfRlBHQV9ST0NLRVJfQ19TVzkJCQk9IElSUV9CQVNFX0ZQR0EgKyAxMCwKK307CisKKworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKworI2VuZGlmIC8qIF9BU01fTUI5MzA5M19GUEdBX0lSUVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L21iOTM0OTMtaXJxcy5oIGIvaW5jbHVkZS9hc20tZnJ2L21iOTM0OTMtaXJxcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1MDk2ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1mcnYvbWI5MzQ5My1pcnFzLmgKQEAgLTAsMCArMSw1MiBAQAorLyogbWI5MzQ5My1pcnFzLmg6IE1COTM0OTMgY29tcGFuaW9uIGNoaXAgSVJRcworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9BU01fTUI5MzQ5M19JUlFTX0gKKyNkZWZpbmUgX0FTTV9NQjkzNDkzX0lSUVNfSAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjaW5jbHVkZSA8YXNtL2lycS1yb3V0aW5nLmg+CisKKyNkZWZpbmUgSVJRX0JBU0VfTUI5MzQ5MwkoTlJfSVJRX0FDVElPTlNfUEVSX0dST1VQICogMikKKworLyogSVJRIElEcyBwcmVzZW50ZWQgdG8gZHJpdmVycyAqLworZW51bSB7CisJSVJRX01COTM0OTNfVkRDCQkJPSBJUlFfQkFTRV9NQjkzNDkzICsgMCwKKwlJUlFfTUI5MzQ5M19WQ0MJCQk9IElSUV9CQVNFX01COTM0OTMgKyAxLAorCUlSUV9NQjkzNDkzX0FVRElPX09VVAkJPSBJUlFfQkFTRV9NQjkzNDkzICsgMiwKKwlJUlFfTUI5MzQ5M19JMkNfMAkJPSBJUlFfQkFTRV9NQjkzNDkzICsgMywKKwlJUlFfTUI5MzQ5M19JMkNfMQkJPSBJUlFfQkFTRV9NQjkzNDkzICsgNCwKKwlJUlFfTUI5MzQ5M19VU0IJCQk9IElSUV9CQVNFX01COTM0OTMgKyA1LAorCUlSUV9NQjkzNDkzX0xPQ0FMX0JVUwkJPSBJUlFfQkFTRV9NQjkzNDkzICsgNywKKwlJUlFfTUI5MzQ5M19QQ01DSUEJCT0gSVJRX0JBU0VfTUI5MzQ5MyArIDgsCisJSVJRX01COTM0OTNfR1BJTwkJPSBJUlFfQkFTRV9NQjkzNDkzICsgOSwKKwlJUlFfTUI5MzQ5M19BVURJT19JTgkJPSBJUlFfQkFTRV9NQjkzNDkzICsgMTAsCit9OworCisvKiBJUlEgbXVsdGlwbGV4b3IgbWFwcGluZ3MgKi8KKyNkZWZpbmUgUk9VVEVfVklBX0lSUTAJMAkvKiByb3V0ZSBJUlEgYnkgd2F5IG9mIENQVSBleHRlcm5hbCBJUlEgMCAqLworI2RlZmluZSBST1VURV9WSUFfSVJRMQkxCS8qIHJvdXRlIElSUSBieSB3YXkgb2YgQ1BVIGV4dGVybmFsIElSUSAxICovCisKKyNkZWZpbmUgSVJRX01COTM0OTNfVkRDX1JPVVRFCQlST1VURV9WSUFfSVJRMAorI2RlZmluZSBJUlFfTUI5MzQ5M19WQ0NfUk9VVEUJCVJPVVRFX1ZJQV9JUlExCisjZGVmaW5lIElSUV9NQjkzNDkzX0FVRElPX09VVF9ST1VURQlST1VURV9WSUFfSVJRMQorI2RlZmluZSBJUlFfTUI5MzQ5M19JMkNfMF9ST1VURQkJUk9VVEVfVklBX0lSUTEKKyNkZWZpbmUgSVJRX01COTM0OTNfSTJDXzFfUk9VVEUJCVJPVVRFX1ZJQV9JUlExCisjZGVmaW5lIElSUV9NQjkzNDkzX1VTQl9ST1VURQkJUk9VVEVfVklBX0lSUTEKKyNkZWZpbmUgSVJRX01COTM0OTNfTE9DQUxfQlVTX1JPVVRFCVJPVVRFX1ZJQV9JUlExCisjZGVmaW5lIElSUV9NQjkzNDkzX1BDTUNJQV9ST1VURQlST1VURV9WSUFfSVJRMQorI2RlZmluZSBJUlFfTUI5MzQ5M19HUElPX1JPVVRFCQlST1VURV9WSUFfSVJRMQorI2RlZmluZSBJUlFfTUI5MzQ5M19BVURJT19JTl9ST1VURQlST1VURV9WSUFfSVJRMQorCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYgLyogX0FTTV9NQjkzNDkzX0lSUVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L21iOTM0OTMtcmVncy5oIGIvaW5jbHVkZS9hc20tZnJ2L21iOTM0OTMtcmVncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1NGFhOWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1mcnYvbWI5MzQ5My1yZWdzLmgKQEAgLTAsMCArMSwyNzkgQEAKKy8qIG1iOTM0OTMtcmVncy5oOiBNQjkzNDkzIGNvbXBhbmlvbiBjaGlwIHJlZ2lzdGVycworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9BU01fTUI5MzQ5M19SRUdTX0gKKyNkZWZpbmUgX0FTTV9NQjkzNDkzX1JFR1NfSAorCisjaW5jbHVkZSA8YXNtL21iLXJlZ3MuaD4KKyNpbmNsdWRlIDxhc20vbWI5MzQ5My1pcnFzLmg+CisKKyNkZWZpbmUgX19nZXRfTUI5MzQ5MyhYKQkoeyAqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoX19yZWdpb25fQ1MzICsgKFgpKTsgfSkKKworI2RlZmluZSBfX3NldF9NQjkzNDkzKFgsVikJCQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCSoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShfX3JlZ2lvbl9DUzMgKyAoWCkpID0gKFYpOyBtYigpOwlcCit9IHdoaWxlKDApCisKKyNkZWZpbmUgX19nZXRfTUI5MzQ5M19TVFNSKFgpCV9fZ2V0X01COTM0OTMoMHgzYzAgKyAoWCkgKiA0KQorI2RlZmluZSBfX3NldF9NQjkzNDkzX1NUU1IoWCxWKQlfX3NldF9NQjkzNDkzKDB4M2MwICsgKFgpICogNCwgKFYpKQorI2RlZmluZSBNQjkzNDkzX1NUU1JfRU4KKworI2RlZmluZSBfX2dldF9NQjkzNDkzX0lRU1IoWCkJX19nZXRfTUI5MzQ5MygweDNkMCArIChYKSAqIDQpCisjZGVmaW5lIF9fc2V0X01COTM0OTNfSVFTUihYLFYpCV9fc2V0X01COTM0OTMoMHgzZDAgKyAoWCkgKiA0LCAoVikpCisKKyNkZWZpbmUgX19nZXRfTUI5MzQ5M19EUVNSKFgpCV9fZ2V0X01COTM0OTMoMHgzZTAgKyAoWCkgKiA0KQorI2RlZmluZSBfX3NldF9NQjkzNDkzX0RRU1IoWCxWKQlfX3NldF9NQjkzNDkzKDB4M2UwICsgKFgpICogNCwgKFYpKQorCisjZGVmaW5lIF9fZ2V0X01COTM0OTNfTEJTRVIoKQlfX2dldF9NQjkzNDkzKDB4M2YwKQorI2RlZmluZSBfX3NldF9NQjkzNDkzX0xCU0VSKFYpCV9fc2V0X01COTM0OTMoMHgzZjAsIChWKSkKKworI2RlZmluZSBNQjkzNDkzX0xCU0VSX1ZEQwkweDAwMDEwMDAwCisjZGVmaW5lIE1COTM0OTNfTEJTRVJfVkNDCTB4MDAwMjAwMDAKKyNkZWZpbmUgTUI5MzQ5M19MQlNFUl9BVURJTwkweDAwMDQwMDAwCisjZGVmaW5lIE1COTM0OTNfTEJTRVJfSTJDXzAJMHgwMDA4MDAwMAorI2RlZmluZSBNQjkzNDkzX0xCU0VSX0kyQ18xCTB4MDAxMDAwMDAKKyNkZWZpbmUgTUI5MzQ5M19MQlNFUl9VU0IJMHgwMDIwMDAwMAorI2RlZmluZSBNQjkzNDkzX0xCU0VSX0dQSU8JMHgwMDgwMDAwMAorI2RlZmluZSBNQjkzNDkzX0xCU0VSX1BDTUNJQQkweDAxMDAwMDAwCisKKyNkZWZpbmUgX19nZXRfTUI5MzQ5M19MQlNSKCkJX19nZXRfTUI5MzQ5MygweDNmYykKKyNkZWZpbmUgX19zZXRfTUI5MzQ5M19MQlNSKFYpCV9fc2V0X01COTM0OTMoMHgzZmMsIChWKSkKKworLyoKKyAqIHZpZGVvIGRpc3BsYXkgY29udHJvbGxlcgorICovCisjZGVmaW5lIF9fZ2V0X01COTM0OTNfVkRDKFgpCV9fZ2V0X01COTM0OTMoTUI5MzQ5M19WRENfIyNYKQorI2RlZmluZSBfX3NldF9NQjkzNDkzX1ZEQyhYLFYpCV9fc2V0X01COTM0OTMoTUI5MzQ5M19WRENfIyNYLCAoVikpCisKKyNkZWZpbmUgTUI5MzQ5M19WRENfUkNVUlNPUgkweDE0MAkvKiBjdXJzb3IgcG9zaXRpb24gKi8KKyNkZWZpbmUgTUI5MzQ5M19WRENfUkNUMQkweDE0NAkvKiBjdXJzb3IgY29sb3VyIDEgKi8KKyNkZWZpbmUgTUI5MzQ5M19WRENfUkNUMgkweDE0OAkvKiBjdXJzb3IgY29sb3VyIDIgKi8KKyNkZWZpbmUgTUI5MzQ5M19WRENfUkhEQwkweDE1MAkvKiBob3Jpem9udGFsIGRpc3BsYXkgcGVyaW9kICovCisjZGVmaW5lIE1COTM0OTNfVkRDX1JIX01BUkdJTlMJMHgxNTQJLyogaG9yaXpvbnRhbCBtYXJnaW4gc2l6ZXMgKi8KKyNkZWZpbmUgTUI5MzQ5M19WRENfUlZEQwkweDE1OAkvKiB2ZXJ0aWNhbCBkaXNwbGF5IHBlcmlvZCAqLworI2RlZmluZSBNQjkzNDkzX1ZEQ19SVl9NQVJHSU5TCTB4MTVjCS8qIHZlcnRpY2FsIG1hcmdpbiBzaXplcyAqLworI2RlZmluZSBNQjkzNDkzX1ZEQ19SQwkJMHgxNzAJLyogVkRDIGNvbnRyb2wgKi8KKyNkZWZpbmUgTUI5MzQ5M19WRENfUkNMT0NLCTB4MTc0CS8qIGNsb2NrIGRpdmlkZXIsIERNQSByZXEgZGVsYXkgKi8KKyNkZWZpbmUgTUI5MzQ5M19WRENfUkJMQUNLCTB4MTc4CS8qIGJsYWNrIGluc2VydCBzaXplcyAqLworI2RlZmluZSBNQjkzNDkzX1ZEQ19SUwkJMHgxN2MJLyogVkRDIHN0YXR1cyAqLworCisjZGVmaW5lIF9fYWRkcl9NQjkzNDkzX1ZEQ19CQ0koWCkgICh7ICh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKF9fcmVnaW9uX0NTMyArIDB4MDAwICsgKFgpKTsgfSkKKyNkZWZpbmUgX19hZGRyX01COTM0OTNfVkRDX1RQTyhYKSAgKF9fcmVnaW9uX0NTMyArIDB4MWMwICsgKFgpKQorCisjZGVmaW5lIFZEQ19UUE9fV0lEVEgJCTMyCisKKyNkZWZpbmUgVkRDX1JDX0RTUgkJMHgwMDAwMDA4MAkvKiBWREMgbWFzdGVyIHJlc2V0ICovCisKKyNkZWZpbmUgVkRDX1JTX0lUCQkweDAwMDYwMDAwCS8qIGludGVycnVwdCBpbmRpY2F0b3JzICovCisjZGVmaW5lIFZEQ19SU19JVF9VTkRFUkZMT1cJMHgwMDA0MDAwMAkvKiAtIHVuZGVyZmxvdyBldmVudCAqLworI2RlZmluZSBWRENfUlNfSVRfVlNZTkMJCTB4MDAwMjAwMDAJLyogLSBWU1lOQyBldmVudCAqLworI2RlZmluZSBWRENfUlNfREZJCQkweDAwMDEwMDAwCS8qIGN1cnJlbnQgaW50ZXJsYWNlIGZpZWxkIG51bWJlciAqLworI2RlZmluZSBWRENfUlNfREZJX1RPUAkJMHgwMDAwMDAwMAkvKiAtIHRvcCBmaWVsZCAqLworI2RlZmluZSBWRENfUlNfREZJX0JPVFRPTQkweDAwMDEwMDAwCS8qIC0gYm90dG9tIGZpZWxkICovCisjZGVmaW5lIFZEQ19SU19EQ1NSCQkweDAwMDAwMDEwCS8qIGN1cnNvciBzdGF0ZSAqLworI2RlZmluZSBWRENfUlNfRENNCQkweDAwMDAwMDAzCS8qIGRpc3BsYXkgbW9kZSAqLworI2RlZmluZSBWRENfUlNfRENNX0RJU0FCTEVECTB4MDAwMDAwMDAJLyogLSBkaXNwbGF5IGRpc2FibGVkICovCisjZGVmaW5lIFZEQ19SU19EQ01fU1RPUFBFRAkweDAwMDAwMDAxCS8qIC0gVkRDIHN0b3BwZWQgKi8KKyNkZWZpbmUgVkRDX1JTX0RDTV9GUkVFUlVOTklORwkweDAwMDAwMDAyCS8qIC0gVkRDIGZyZWUtcnVubmluZyAqLworI2RlZmluZSBWRENfUlNfRENNX1RSQU5TRkVSUklORwkweDAwMDAwMDAzCS8qIC0gZGF0YSBiZWluZyB0cmFuc2ZlcnJlZCB0byBWREMgKi8KKworLyoKKyAqIHZpZGVvIGNhcHR1cmUgY29udHJvbGxlcgorICovCisjZGVmaW5lIF9fZ2V0X01COTM0OTNfVkNDKFgpCV9fZ2V0X01COTM0OTMoTUI5MzQ5M19WQ0NfIyNYKQorI2RlZmluZSBfX3NldF9NQjkzNDkzX1ZDQyhYLFYpCV9fc2V0X01COTM0OTMoTUI5MzQ5M19WQ0NfIyNYLCAoVikpCisKKyNkZWZpbmUgTUI5MzQ5M19WQ0NfUlJFRFVDVAkweDEwNAkvKiByZWR1Y3Rpb24gcmF0ZSAqLworI2RlZmluZSBNQjkzNDkzX1ZDQ19SSFkJCTB4MTA4CS8qIGhvcml6b250YWwgYnJpZ2h0bmVzcyBmaWx0ZXIgY29lZmZpY2llbnRzICovCisjZGVmaW5lIE1COTM0OTNfVkNDX1JIQwkJMHgxMGMJLyogaG9yaXpvbnRhbCBjb2xvdXItZGlmZmVyZW5jZSBmaWx0ZXIgY29lZmZpY2llbnRzICovCisjZGVmaW5lIE1COTM0OTNfVkNDX1JIU0laRQkweDExMAkvKiBob3Jpem9udGFsIGN5Y2xlIHNpemVzICovCisjZGVmaW5lIE1COTM0OTNfVkNDX1JIQkMJMHgxMTQJLyogaG9yaXpvbnRhbCBiYWNrIHBvcmNoIHNpemUgKi8KKyNkZWZpbmUgTUI5MzQ5M19WQ0NfUlZDQwkweDExOAkvKiB2ZXJ0aWNhbCBjYXB0dXJlIHBlcmlvZCAqLworI2RlZmluZSBNQjkzNDkzX1ZDQ19SVkJDCTB4MTFjCS8qIHZlcnRpY2FsIGJhY2sgcG9yY2ggcGVyaW9kICovCisjZGVmaW5lIE1COTM0OTNfVkNDX1JWCQkweDEyMAkvKiB2ZXJ0aWNhbCBmaWx0ZXIgY29lZmZpY2llbnRzICovCisjZGVmaW5lIE1COTM0OTNfVkNDX1JEVFMJMHgxMjgJLyogRE1BIHRyYW5zZmVyIHNpemUgKi8KKyNkZWZpbmUgTUI5MzQ5M19WQ0NfUkRUU180QgkweDAxMDAwMDAwCS8qIDQtYnl0ZSB0cmFuc2ZlciAqLworI2RlZmluZSBNQjkzNDkzX1ZDQ19SRFRTXzMyQgkweDAzMDAwMDAwCS8qIDMyLWJ5dGUgdHJhbnNmZXIgKi8KKyNkZWZpbmUgTUI5MzQ5M19WQ0NfUkRUU19TSElGVAkyNAorI2RlZmluZSBNQjkzNDkzX1ZDQ19SQ0MJCTB4MTMwCS8qIFZDQyBjb250cm9sICovCisjZGVmaW5lIE1COTM0OTNfVkNDX1JJUwkJMHgxMzQJLyogVkNDIGludGVycnVwdCBzdGF0dXMgKi8KKworI2RlZmluZSBfX2FkZHJfTUI5MzQ5M19WQ0NfVFBJKFgpICAoX19yZWdpb25fQ1MzICsgMHgxODAgKyAoWCkpCisKKyNkZWZpbmUgVkNDX1JIU0laRV9SSENDCQkweDAwMDAwN2ZmCisjZGVmaW5lIFZDQ19SSFNJWkVfUkhDQ19TSElGVAkwCisjZGVmaW5lIFZDQ19SSFNJWkVfUkhUQ0MJMHgwZmZmMDAwMAorI2RlZmluZSBWQ0NfUkhTSVpFX1JIVENDX1NISUZUCTE2CisKKyNkZWZpbmUgVkNDX1JWQkNfUlZCQwkJMHgwMDAwM2YwMAorI2RlZmluZSBWQ0NfUlZCQ19SVkJDX1NISUZUCTgKKworI2RlZmluZSBWQ0NfUlJFRFVDVF9SSFIJCTB4MDdmZjAwMDAKKyNkZWZpbmUgVkNDX1JSRURVQ1RfUkhSX1NISUZUCTE2CisjZGVmaW5lIFZDQ19SUkVEVUNUX1JWUgkJMHgwMDAwMDdmZgorI2RlZmluZSBWQ0NfUlJFRFVDVF9SVlJfU0hJRlQJMAorCisjZGVmaW5lIFZDQ19SQ0NfQ0UJCTB4MDAwMDAwMDEJLyogVkNDIGVuYWJsZSAqLworI2RlZmluZSBWQ0NfUkNDX0NTCQkweDAwMDAwMDAyCS8qIHJlcXVlc3QgdmlkZW8gY2FwdHVyZSBzdGFydCAqLworI2RlZmluZSBWQ0NfUkNDX0NQRgkJMHgwMDAwMDAwYwkvKiBwaXhlbCBmb3JtYXQgKi8KKyNkZWZpbmUgVkNDX1JDQ19DUEZfWUNCQ1JfMTYJMHgwMDAwMDAwMAkvKiAtIFlDYkNyIDQ6MjoyIDE2LWJpdCBmb3JtYXQgKi8KKyNkZWZpbmUgVkNDX1JDQ19DUEZfUkdCCQkweDAwMDAwMDA0CS8qIC0gUkdCIDQ6NDo0IGZvcm1hdCAqLworI2RlZmluZSBWQ0NfUkNDX0NQRl9ZQ0JDUl8yNAkweDAwMDAwMDA4CS8qIC0gWUNiQ3IgNDoyOjIgMjQtYml0IGZvcm1hdCAqLworI2RlZmluZSBWQ0NfUkNDX0NQRl9CVDY1NgkweDAwMDAwMDBjCS8qIC0gSVRVIFItQlQuNjU2IGZvcm1hdCAqLworI2RlZmluZSBWQ0NfUkNDX0NQRl9TSElGVAkyCisjZGVmaW5lIFZDQ19SQ0NfQ1NSCQkweDAwMDAwMDgwCS8qIHJlcXVlc3QgcmVzZXQgKi8KKyNkZWZpbmUgVkNDX1JDQ19IU0lQCQkweDAwMDAwMTAwCS8qIEhTWU5DIHBvbGFyaXR5ICovCisjZGVmaW5lIFZDQ19SQ0NfSFNJUF9MT0FDVAkweDAwMDAwMDAwCS8qIC0gbG93IGFjdGl2ZSAqLworI2RlZmluZSBWQ0NfUkNDX0hTSVBfSElBQ1QJMHgwMDAwMDEwMAkvKiAtIGhpZ2ggYWN0aXZlICovCisjZGVmaW5lIFZDQ19SQ0NfVlNJUAkJMHgwMDAwMDIwMAkvKiBWU1lOQyBwb2xhcml0eSAqLworI2RlZmluZSBWQ0NfUkNDX1ZTSVBfTE9BQ1QJMHgwMDAwMDAwMAkvKiAtIGxvdyBhY3RpdmUgKi8KKyNkZWZpbmUgVkNDX1JDQ19WU0lQX0hJQUNUCTB4MDAwMDAyMDAJLyogLSBoaWdoIGFjdGl2ZSAqLworI2RlZmluZSBWQ0NfUkNDX0NJRQkJMHgwMDAwMDgwMAkvKiBpbnRlcnJ1cHQgZW5hYmxlICovCisjZGVmaW5lIFZDQ19SQ0NfQ0ZQCQkweDAwMDAxMDAwCS8qIFJHQiBwaXhlbCBwYWNraW5nICovCisjZGVmaW5lIFZDQ19SQ0NfQ0ZQXzRUTzMJMHgwMDAwMDAwMAkvKiAtIHBhY2sgNCBwaXhlbHMgaW50byAzIHdvcmRzICovCisjZGVmaW5lIFZDQ19SQ0NfQ0ZQXzFUTzEJMHgwMDAwMTAwMAkvKiAtIHBhY2sgMSBwaXhlbCBpbnRvIDEgd29yZHMgKi8KKyNkZWZpbmUgVkNDX1JDQ19DU00JCTB4MDAwMDYwMDAJLyogaW50ZXJsYWNlIHNwZWNpZmljYXRpb24gKi8KKyNkZWZpbmUgVkNDX1JDQ19DU01fT05FUEFTUwkweDAwMDAyMDAwCS8qIC0gbm9uLWludGVybGFjZWQgKi8KKyNkZWZpbmUgVkNDX1JDQ19DU01fSU5URVJMQUNFCTB4MDAwMDQwMDAJLyogLSBpbnRlcmxhY2VkICovCisjZGVmaW5lIFZDQ19SQ0NfQ1NNX1NISUZUCTEzCisjZGVmaW5lIFZDQ19SQ0NfRVMJCTB4MDAwMDgwMDAJLyogY2FwdHVyZSBzdGFydCBwb2xhcml0eSAqLworI2RlZmluZSBWQ0NfUkNDX0VTX05FRwkJMHgwMDAwMDAwMAkvKiAtIG5lZ2F0aXZlIGVkZ2UgKi8KKyNkZWZpbmUgVkNDX1JDQ19FU19QT1MJCTB4MDAwMDgwMDAJLyogLSBwb3NpdGl2ZSBlZGdlICovCisjZGVmaW5lIFZDQ19SQ0NfSUZJCQkweDAwMDgwMDAwCS8qIGluZmVybGFjZSBmaWVsZCBldmFsdWF0aW9uIHJldmVyc2UgKi8KKyNkZWZpbmUgVkNDX1JDQ19GRFRTCQkweDAwMzAwMDAwCS8qIGludGVybGFjZSBmaWVsZCBzdGFydCAqLworI2RlZmluZSBWQ0NfUkNDX0ZEVFNfM184CTB4MDAwMDAwMDAJLyogLSAzLzggb2YgaG9yaXpvbnRhbCBlbnRpcmUgY3ljbGUgKi8KKyNkZWZpbmUgVkNDX1JDQ19GRFRTXzFfNAkweDAwMTAwMDAwCS8qIC0gMS80IG9mIGhvcml6b250YWwgZW50aXJlIGN5Y2xlICovCisjZGVmaW5lIFZDQ19SQ0NfRkRUU183XzE2CTB4MDAyMDAwMDAJLyogLSA3LzE2IG9mIGhvcml6b250YWwgZW50aXJlIGN5Y2xlICovCisjZGVmaW5lIFZDQ19SQ0NfRkRUU19TSElGVAkyMAorI2RlZmluZSBWQ0NfUkNDX01PVgkJMHgwMDQwMDAwMAkvKiB0ZXN0IGJpdCAtIGFsd2F5cyBzZXQgdG8gMSAqLworI2RlZmluZSBWQ0NfUkNDX1NUUAkJMHgwMDgwMDAwMAkvKiByZXF1ZXN0IHZpZGVvIGNhcHR1cmUgc3RvcCAqLworI2RlZmluZSBWQ0NfUkNDX1RPCQkweDAxMDAwMDAwCS8qIGlucHV0IGR1cmluZyB0b3AtZmllbGQgb25seSAqLworCisjZGVmaW5lIFZDQ19SSVNfVlNZTkMJCTB4MDEwMDAwMDAJLyogVlNZTkMgaW50ZXJydXB0ICovCisjZGVmaW5lIFZDQ19SSVNfT1YJCTB4MDIwMDAwMDAJLyogb3ZlcmZsb3cgaW50ZXJydXB0ICovCisjZGVmaW5lIFZDQ19SSVNfQk9UVE9NCQkweDA4MDAwMDAwCS8qIGludGVybGFjZSBib3R0b20gZmllbGQgKi8KKyNkZWZpbmUgVkNDX1JJU19TVEFSVEVECQkweDEwMDAwMDAwCS8qIGNhcHR1cmUgc3RhcnRlZCAqLworCisvKgorICogSTJDCisgKi8KKyNkZWZpbmUgTUI5MzQ5M19JMkNfQlNSIAkweDM0MAkJLyogYnVzIHN0YXR1cyAqLworI2RlZmluZSBNQjkzNDkzX0kyQ19CQ1IJCTB4MzQ0CQkvKiBidXMgY29udHJvbCAqLworI2RlZmluZSBNQjkzNDkzX0kyQ19DQ1IJCTB4MzQ4CQkvKiBjbG9jayBjb250cm9sICovCisjZGVmaW5lIE1COTM0OTNfSTJDX0FEUgkJMHgzNGMJCS8qIGFkZHJlc3MgKi8KKyNkZWZpbmUgTUI5MzQ5M19JMkNfRFRSCQkweDM1MAkJLyogZGF0YSAqLworI2RlZmluZSBNQjkzNDkzX0kyQ19CQzJSCTB4MzVjCQkvKiBidXMgY29udHJvbCAyICovCisKKyNkZWZpbmUgX19hZGRyX01COTM0OTNfSTJDKHBvcnQsWCkgICAoX19yZWdpb25fQ1MzICsgTUI5MzQ5M19JMkNfIyNYICsgKChwb3J0KSoweDIwKSkKKyNkZWZpbmUgX19nZXRfTUI5MzQ5M19JMkMocG9ydCxYKSAgICBfX2dldF9NQjkzNDkzKE1COTM0OTNfSTJDXyMjWCArICgocG9ydCkqMHgyMCkpCisjZGVmaW5lIF9fc2V0X01COTM0OTNfSTJDKHBvcnQsWCxWKSAgX19zZXRfTUI5MzQ5MyhNQjkzNDkzX0kyQ18jI1ggKyAoKHBvcnQpKjB4MjApLCAoVikpCisKKyNkZWZpbmUgSTJDX0JTUl9CQgkoMSA8PCA3KQorCisvKgorICogYXVkaW8gY29udHJvbGxlciAoSTJTKSByZWdpc3RlcnMKKyAqLworI2RlZmluZSBfX2dldF9NQjkzNDkzX0kyUyhYKQlfX2dldF9NQjkzNDkzKE1COTM0OTNfSTJTXyMjWCkKKyNkZWZpbmUgX19zZXRfTUI5MzQ5M19JMlMoWCxWKQlfX3NldF9NQjkzNDkzKE1COTM0OTNfSTJTXyMjWCwgKFYpKQorCisjZGVmaW5lIE1COTM0OTNfSTJTX0FMRFIJMHgzMDAJCS8qIEwtY2hhbm5lbCBkYXRhICovCisjZGVmaW5lIE1COTM0OTNfSTJTX0FSRFIJMHgzMDQJCS8qIFItY2hhbm5lbCBkYXRhICovCisjZGVmaW5lIE1COTM0OTNfSTJTX0FQRFIJMHgzMDgJCS8qIDE2LWJpdCBwYWNrZWQgZGF0YSAqLworI2RlZmluZSBNQjkzNDkzX0kyU19BSVNUUgkweDMxMAkJLyogc3RhdHVzICovCisjZGVmaW5lIE1COTM0OTNfSTJTX0FJQ1IJMHgzMTQJCS8qIGNvbnRyb2wgKi8KKworI2RlZmluZSBfX2FkZHJfTUI5MzQ5M19JMlNfQUxEUihYKQkoX19yZWdpb25fQ1MzICsgTUI5MzQ5M19JMlNfQUxEUiArIChYKSkKKyNkZWZpbmUgX19hZGRyX01COTM0OTNfSTJTX0FSRFIoWCkJKF9fcmVnaW9uX0NTMyArIE1COTM0OTNfSTJTX0FSRFIgKyAoWCkpCisjZGVmaW5lIF9fYWRkcl9NQjkzNDkzX0kyU19BUERSKFgpCShfX3JlZ2lvbl9DUzMgKyBNQjkzNDkzX0kyU19BUERSICsgKFgpKQorI2RlZmluZSBfX2FkZHJfTUI5MzQ5M19JMlNfQURSKFgpCShfX3JlZ2lvbl9DUzMgKyAweDMyMCArIChYKSkKKworI2RlZmluZSBJMlNfQUlTVFJfT1RTVAkJMHgwMDAwMDAwMwkvKiBzdGF0dXMgb2Ygb3V0cHV0IGRhdGEgdHJhbnNmZXIgKi8KKyNkZWZpbmUgSTJTX0FJU1RSX09UUgkJMHgwMDAwMDAxMAkvKiBvdXRwdXQgdHJhbnNmZXIgcmVxdWVzdCBwZW5kaW5nICovCisjZGVmaW5lIEkyU19BSVNUUl9PVVIJCTB4MDAwMDAwMjAJLyogb3V0cHV0IEZJRk8gdW5kZXJydW4gZGV0ZWN0ZWQgKi8KKyNkZWZpbmUgSTJTX0FJU1RSX09PUgkJMHgwMDAwMDA0MAkvKiBvdXRwdXQgRklGTyBvdmVycnVuIGRldGVjdGVkICovCisjZGVmaW5lIEkyU19BSVNUUl9PRFMJCTB4MDAwMDAxMDAJLyogb3V0cHV0IERNQSB0cmFuc2ZlciBzaXplICovCisjZGVmaW5lIEkyU19BSVNUUl9PREUJCTB4MDAwMDA0MDAJLyogb3V0cHV0IERNQSB0cmFuc2ZlciByZXF1ZXN0IGVuYWJsZSAqLworI2RlZmluZSBJMlNfQUlTVFJfT1RSSUUJCTB4MDAwMDEwMDAJLyogb3V0cHV0IHRyYW5zZmVyIHJlcXVlc3QgaW50ZXJydXB0IGVuYWJsZSAqLworI2RlZmluZSBJMlNfQUlTVFJfT1VSSUUJCTB4MDAwMDIwMDAJLyogb3V0cHV0IEZJRk8gdW5kZXJydW4gaW50ZXJydXB0IGVuYWJsZSAqLworI2RlZmluZSBJMlNfQUlTVFJfT09SSUUJCTB4MDAwMDQwMDAJLyogb3V0cHV0IEZJRk8gb3ZlcnJ1biBpbnRlcnJ1cHQgZW5hYmxlICovCisjZGVmaW5lIEkyU19BSVNUUl9fT1VUX01BU0sJMHgwMDAwNzU3MAorI2RlZmluZSBJMlNfQUlTVFJfSVRTVAkJMHgwMDAzMDAwMAkvKiBzdGF0dXMgb2YgaW5wdXQgZGF0YSB0cmFuc2ZlciAqLworI2RlZmluZSBJMlNfQUlTVFJfSVRTVF9TSElGVAkxNgorI2RlZmluZSBJMlNfQUlTVFJfSVRSCQkweDAwMTAwMDAwCS8qIGlucHV0IHRyYW5zZmVyIHJlcXVlc3QgcGVuZGluZyAqLworI2RlZmluZSBJMlNfQUlTVFJfSVVSCQkweDAwMjAwMDAwCS8qIGlucHV0IEZJRk8gdW5kZXJydW4gZGV0ZWN0ZWQgKi8KKyNkZWZpbmUgSTJTX0FJU1RSX0lPUgkJMHgwMDQwMDAwMAkvKiBpbnB1dCBGSUZPIG92ZXJydW4gZGV0ZWN0ZWQgKi8KKyNkZWZpbmUgSTJTX0FJU1RSX0lEUwkJMHgwMTAwMDAwMAkvKiBpbnB1dCBETUEgdHJhbnNmZXIgc2l6ZSAqLworI2RlZmluZSBJMlNfQUlTVFJfSURFCQkweDA0MDAwMDAwCS8qIGlucHV0IERNQSB0cmFuc2ZlciByZXF1ZXN0IGVuYWJsZSAqLworI2RlZmluZSBJMlNfQUlTVFJfSVRSSUUJCTB4MTAwMDAwMDAJLyogaW5wdXQgdHJhbnNmZXIgcmVxdWVzdCBpbnRlcnJ1cHQgZW5hYmxlICovCisjZGVmaW5lIEkyU19BSVNUUl9JVVJJRQkJMHgyMDAwMDAwMAkvKiBpbnB1dCBGSUZPIHVuZGVycnVuIGludGVycnVwdCBlbmFibGUgKi8KKyNkZWZpbmUgSTJTX0FJU1RSX0lPUklFCQkweDQwMDAwMDAwCS8qIGlucHV0IEZJRk8gb3ZlcnJ1biBpbnRlcnJ1cHQgZW5hYmxlICovCisjZGVmaW5lIEkyU19BSVNUUl9fSU5fTUFTSwkweDc1NzAwMDAwCisKKyNkZWZpbmUgSTJTX0FJQ1JfTUkJCTB4MDAwMDAwMDEJLyogbW9ubyBpbnB1dCByZXF1ZXN0ZWQgKi8KKyNkZWZpbmUgSTJTX0FJQ1JfQU1JCQkweDAwMDAwMDAyCS8qIHJlbGF0aW9uIGJldHdlZW4gTFJDS0kvRlMxIGFuZCBTREkgKi8KKyNkZWZpbmUgSTJTX0FJQ1JfTFJJCQkweDAwMDAwMDA0CS8qIGZ1bmN0aW9uIG9mIExSQ0tJIHBpbiAqLworI2RlZmluZSBJMlNfQUlDUl9TRE1JCQkweDAwMDAwMDcwCS8qIGZvcm1hdCBvZiBpbnB1dCBhdWRpbyBkYXRhICovCisjZGVmaW5lIEkyU19BSUNSX1NETUlfU0hJRlQJNAorI2RlZmluZSBJMlNfQUlDUl9DTEkJCTB4MDAwMDAwODAJLyogaW5wdXQgRklGTyBjbGVhcmluZyBjb250cm9sICovCisjZGVmaW5lIEkyU19BSUNSX0lNCQkweDAwMDAwMzAwCS8qIGlucHV0IHN0YXRlIGNvbnRyb2wgKi8KKyNkZWZpbmUgSTJTX0FJQ1JfSU1fU0hJRlQJOAorI2RlZmluZSBJMlNfQUlDUl9fSU5fTUFTSwkweDAwMDAwM2Y3CisjZGVmaW5lIEkyU19BSUNSX01PCQkweDAwMDAxMDAwCS8qIG1vbm8gb3V0cHV0IHJlcXVlc3RlZCAqLworI2RlZmluZSBJMlNfQUlDUl9BTU8JCTB4MDAwMDIwMDAJLyogcmVsYXRpb24gYmV0d2VlbiBMUkNLTy9GUzAgYW5kIFNETyAqLworI2RlZmluZSBJMlNfQUlDUl9BTU9fU0hJRlQJMTMKKyNkZWZpbmUgSTJTX0FJQ1JfTFJPCQkweDAwMDA0MDAwCS8qIGZ1bmN0aW9uIG9mIExSQ0tPIHBpbiAqLworI2RlZmluZSBJMlNfQUlDUl9TRE1PCQkweDAwMDcwMDAwCS8qIGZvcm1hdCBvZiBvdXRwdXQgYXVkaW8gZGF0YSAqLworI2RlZmluZSBJMlNfQUlDUl9TRE1PX1NISUZUCTE2CisjZGVmaW5lIEkyU19BSUNSX0NMTwkJMHgwMDA4MDAwMAkvKiBvdXRwdXQgRklGTyBjbGVhcmluZyBjb250cm9sICovCisjZGVmaW5lIEkyU19BSUNSX09NCQkweDAwMTAwMDAwCS8qIG91dHB1dCBzdGF0ZSBjb250cm9sICovCisjZGVmaW5lIEkyU19BSUNSX19PVVRfTUFTSwkweDAwMWY3MDAwCisjZGVmaW5lIEkyU19BSUNSX0RJVgkJMHgwMzAwMDAwMAkvKiBmcmVxdWVuY3kgZGl2aXNpb24gcmF0ZSAqLworI2RlZmluZSBJMlNfQUlDUl9ESVZfU0hJRlQJMjQKKyNkZWZpbmUgSTJTX0FJQ1JfRkwJCTB4MjAwMDAwMDAJLyogZnJhbWUgbGVuZ3RoICovCisjZGVmaW5lIEkyU19BSUNSX0ZTCQkweDQwMDAwMDAwCS8qIGZyYW1lIHN5bmMgbWV0aG9kICovCisjZGVmaW5lIEkyU19BSUNSX01FCQkweDgwMDAwMDAwCS8qIG1hc3RlciBlbmFibGUgKi8KKworLyoKKyAqIFBDTUNJQQorICovCisjZGVmaW5lIF9fYWRkcl9NQjkzNDkzX1BDTUNJQShYKSAgKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKF9fcmVnaW9uX0NTNSArIChYKSkpCisKKy8qCisgKiBHUElPCisgKi8KKyNkZWZpbmUgX19nZXRfTUI5MzQ5M19HUElPX1BEUihYKQlfX2dldF9NQjkzNDkzKDB4MzgwICsgKFgpICogMHhjMCkKKyNkZWZpbmUgX19zZXRfTUI5MzQ5M19HUElPX1BEUihYLFYpCV9fc2V0X01COTM0OTMoMHgzODAgKyAoWCkgKiAweGMwLCAoVikpCisKKyNkZWZpbmUgX19nZXRfTUI5MzQ5M19HUElPX0dQRFIoWCkJX19nZXRfTUI5MzQ5MygweDM4NCArIChYKSAqIDB4YzApCisjZGVmaW5lIF9fc2V0X01COTM0OTNfR1BJT19HUERSKFgsVikJX19zZXRfTUI5MzQ5MygweDM4NCArIChYKSAqIDB4YzAsIChWKSkKKworI2RlZmluZSBfX2dldF9NQjkzNDkzX0dQSU9fU0lSKFgpCV9fZ2V0X01COTM0OTMoMHgzODggKyAoWCkgKiAweGMwKQorI2RlZmluZSBfX3NldF9NQjkzNDkzX0dQSU9fU0lSKFgsVikJX19zZXRfTUI5MzQ5MygweDM4OCArIChYKSAqIDB4YzAsIChWKSkKKworI2RlZmluZSBfX2dldF9NQjkzNDkzX0dQSU9fU09SKFgpCV9fZ2V0X01COTM0OTMoMHgzOGMgKyAoWCkgKiAweGMwKQorI2RlZmluZSBfX3NldF9NQjkzNDkzX0dQSU9fU09SKFgsVikJX19zZXRfTUI5MzQ5MygweDM4YyArIChYKSAqIDB4YzAsIChWKSkKKworI2RlZmluZSBfX2dldF9NQjkzNDkzX0dQSU9fUERTUihYKQlfX2dldF9NQjkzNDkzKDB4MzkwICsgKFgpICogMHhjMCkKKyNkZWZpbmUgX19zZXRfTUI5MzQ5M19HUElPX1BEU1IoWCxWKQlfX3NldF9NQjkzNDkzKDB4MzkwICsgKFgpICogMHhjMCwgKFYpKQorCisjZGVmaW5lIF9fZ2V0X01COTM0OTNfR1BJT19QRENSKFgpCV9fZ2V0X01COTM0OTMoMHgzOTQgKyAoWCkgKiAweGMwKQorI2RlZmluZSBfX3NldF9NQjkzNDkzX0dQSU9fUERDUihYLFYpCV9fc2V0X01COTM0OTMoMHgzOTQgKyAoWCkgKiAweGMwLCAoVikpCisKKyNkZWZpbmUgX19nZXRfTUI5MzQ5M19HUElPX0lOVFNUKFgpCV9fZ2V0X01COTM0OTMoMHgzOTggKyAoWCkgKiAweGMwKQorI2RlZmluZSBfX3NldF9NQjkzNDkzX0dQSU9fSU5UU1QoWCxWKQlfX3NldF9NQjkzNDkzKDB4Mzk4ICsgKFgpICogMHhjMCwgKFYpKQorCisjZGVmaW5lIF9fZ2V0X01COTM0OTNfR1BJT19JRUhMKFgpCV9fZ2V0X01COTM0OTMoMHgzOWMgKyAoWCkgKiAweGMwKQorI2RlZmluZSBfX3NldF9NQjkzNDkzX0dQSU9fSUVITChYLFYpCV9fc2V0X01COTM0OTMoMHgzOWMgKyAoWCkgKiAweGMwLCAoVikpCisKKyNkZWZpbmUgX19nZXRfTUI5MzQ5M19HUElPX0lFTEgoWCkJX19nZXRfTUI5MzQ5MygweDNhMCArIChYKSAqIDB4YzApCisjZGVmaW5lIF9fc2V0X01COTM0OTNfR1BJT19JRUxIKFgsVikJX19zZXRfTUI5MzQ5MygweDNhMCArIChYKSAqIDB4YzAsIChWKSkKKworI2VuZGlmIC8qIF9BU01fTUI5MzQ5M19SRUdTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9tZW0tbGF5b3V0LmggYi9pbmNsdWRlL2FzbS1mcnYvbWVtLWxheW91dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwMjVkZDQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1mcnYvbWVtLWxheW91dC5oCkBAIC0wLDAgKzEsNzggQEAKKy8qIG1lbS1sYXlvdXQuaDogbWVtb3J5IGxheW91dAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9BU01fTUVNX0xBWU9VVF9ICisjZGVmaW5lIF9BU01fTUVNX0xBWU9VVF9ICisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjZGVmaW5lIF9fVUwoWCkJKCh1bnNpZ25lZCBsb25nKSAoWCkpCisjZWxzZQorI2RlZmluZSBfX1VMKFgpCShYKQorI2VuZGlmCisKKy8qCisgKiBQQUdFX1NISUZUIGRldGVybWluZXMgdGhlIHBhZ2Ugc2l6ZQorICovCisjZGVmaW5lIFBBR0VfU0hJRlQJCQkxNAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2RlZmluZSBQQUdFX1NJWkUJCQkoMVVMIDw8IFBBR0VfU0hJRlQpCisjZWxzZQorI2RlZmluZSBQQUdFX1NJWkUJCQkoMSA8PCBQQUdFX1NISUZUKQorI2VuZGlmCisKKyNkZWZpbmUgUEFHRV9NQVNLCQkJKH4oUEFHRV9TSVpFLTEpKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogdmlydHVhbCBtZW1vcnkgbGF5b3V0IGZyb20ga2VybmVsJ3MgcG9pbnQgb2YgdmlldworICovCisjZGVmaW5lIFBBR0VfT0ZGU0VUCQkJKCh1bnNpZ25lZCBsb25nKSAmX19wYWdlX29mZnNldCkKKworI2lmZGVmIENPTkZJR19NTVUKKworLyogc2VlIERvY3VtZW50YXRpb24vZnVqaXRzdS9mcnYvbW11LWxheW91dC50eHQgKi8KKyNkZWZpbmUgS0VSTkVMX0xPV01FTV9TVEFSVAkJX19VTCgweGMwMDAwMDAwKQorI2RlZmluZSBLRVJORUxfTE9XTUVNX0VORAkJX19VTCgweGQwMDAwMDAwKQorI2RlZmluZSBWTUFMTE9DX1NUQVJUCQkJX19VTCgweGQwMDAwMDAwKQorI2RlZmluZSBWTUFMTE9DX0VORAkJCV9fVUwoMHhkODAwMDAwMCkKKyNkZWZpbmUgUEtNQVBfQkFTRQkJCV9fVUwoMHhkODAwMDAwMCkKKyNkZWZpbmUgUEtNQVBfRU5ECQkJX19VTCgweGRjMDAwMDAwKQorI2RlZmluZSBLTUFQX0FUT01JQ19TRUNPTkRBUllfRlJBTUUJX19VTCgweGRjMDAwMDAwKQorI2RlZmluZSBLTUFQX0FUT01JQ19QUklNQVJZX0ZSQU1FCV9fVUwoMHhkZDAwMDAwMCkKKworI2VuZGlmCisKKyNkZWZpbmUgS0VSTkVMX0lPX1NUQVJUCQkJX19VTCgweGUwMDAwMDAwKQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBtZW1vcnkgbGF5b3V0IGZyb20gdXNlcnNwYWNlJ3MgcG9pbnQgb2YgdmlldworICovCisjZGVmaW5lIEJSS19CQVNFCQkJX19VTCgyICogMTAyNCAqIDEwMjQgKyBQQUdFX1NJWkUpCisjZGVmaW5lIFNUQUNLX1RPUAkJCV9fVUwoMiAqIDEwMjQgKiAxMDI0KQorCisvKiB1c2Vyc3BhY2UgcHJvY2VzcyBzaXplICovCisjaWZkZWYgQ09ORklHX01NVQorI2RlZmluZSBUQVNLX1NJWkUJCQkoUEFHRV9PRkZTRVQpCisjZWxzZQorI2RlZmluZSBUQVNLX1NJWkUJCQlfX1VMKDB4RkZGRkZGRkZVTCkKKyNlbmRpZgorCisvKiBiYXNlIG9mIGFyZWEgYXQgd2hpY2ggdW5zcGVjaWZpZWQgbW1hcHMgd2lsbCBzdGFydCAqLworI2lmZGVmIENPTkZJR19CSU5GTVRfRUxGX0ZEUElDCisjZGVmaW5lIFRBU0tfVU5NQVBQRURfQkFTRQkJX19VTCgxNiAqIDEwMjQgKiAxMDI0KQorI2Vsc2UKKyNkZWZpbmUgVEFTS19VTk1BUFBFRF9CQVNFCQlfX1VMKFRBU0tfU0laRSAvIDMpCisjZW5kaWYKKworI2VuZGlmIC8qIF9BU01fTUVNX0xBWU9VVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvbW1hbi5oIGIvaW5jbHVkZS9hc20tZnJ2L21tYW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjg0NzIwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tZnJ2L21tYW4uaApAQCAtMCwwICsxLDQ0IEBACisjaWZuZGVmIF9fQVNNX01NQU5fSF9fCisjZGVmaW5lIF9fQVNNX01NQU5fSF9fCisKKyNkZWZpbmUgUFJPVF9SRUFECTB4MQkJLyogcGFnZSBjYW4gYmUgcmVhZCAqLworI2RlZmluZSBQUk9UX1dSSVRFCTB4MgkJLyogcGFnZSBjYW4gYmUgd3JpdHRlbiAqLworI2RlZmluZSBQUk9UX0VYRUMJMHg0CQkvKiBwYWdlIGNhbiBiZSBleGVjdXRlZCAqLworI2RlZmluZSBQUk9UX1NFTQkweDgJCS8qIHBhZ2UgbWF5IGJlIHVzZWQgZm9yIGF0b21pYyBvcHMgKi8KKyNkZWZpbmUgUFJPVF9OT05FCTB4MAkJLyogcGFnZSBjYW4gbm90IGJlIGFjY2Vzc2VkICovCisjZGVmaW5lIFBST1RfR1JPV1NET1dOCTB4MDEwMDAwMDAJLyogbXByb3RlY3QgZmxhZzogZXh0ZW5kIGNoYW5nZSB0byBzdGFydCBvZiBncm93c2Rvd24gdm1hICovCisjZGVmaW5lIFBST1RfR1JPV1NVUAkweDAyMDAwMDAwCS8qIG1wcm90ZWN0IGZsYWc6IGV4dGVuZCBjaGFuZ2UgdG8gZW5kIG9mIGdyb3dzdXAgdm1hICovCisKKyNkZWZpbmUgTUFQX1NIQVJFRAkweDAxCQkvKiBTaGFyZSBjaGFuZ2VzICovCisjZGVmaW5lIE1BUF9QUklWQVRFCTB4MDIJCS8qIENoYW5nZXMgYXJlIHByaXZhdGUgKi8KKyNkZWZpbmUgTUFQX1RZUEUJMHgwZgkJLyogTWFzayBmb3IgdHlwZSBvZiBtYXBwaW5nICovCisjZGVmaW5lIE1BUF9GSVhFRAkweDEwCQkvKiBJbnRlcnByZXQgYWRkciBleGFjdGx5ICovCisjZGVmaW5lIE1BUF9BTk9OWU1PVVMJMHgyMAkJLyogZG9uJ3QgdXNlIGEgZmlsZSAqLworCisjZGVmaW5lIE1BUF9HUk9XU0RPV04JMHgwMTAwCQkvKiBzdGFjay1saWtlIHNlZ21lbnQgKi8KKyNkZWZpbmUgTUFQX0RFTllXUklURQkweDA4MDAJCS8qIEVUWFRCU1kgKi8KKyNkZWZpbmUgTUFQX0VYRUNVVEFCTEUJMHgxMDAwCQkvKiBtYXJrIGl0IGFzIGFuIGV4ZWN1dGFibGUgKi8KKyNkZWZpbmUgTUFQX0xPQ0tFRAkweDIwMDAJCS8qIHBhZ2VzIGFyZSBsb2NrZWQgKi8KKyNkZWZpbmUgTUFQX05PUkVTRVJWRQkweDQwMDAJCS8qIGRvbid0IGNoZWNrIGZvciByZXNlcnZhdGlvbnMgKi8KKyNkZWZpbmUgTUFQX1BPUFVMQVRFCTB4ODAwMAkJLyogcG9wdWxhdGUgKHByZWZhdWx0KSBwYWdldGFibGVzICovCisjZGVmaW5lIE1BUF9OT05CTE9DSwkweDEwMDAwCQkvKiBkbyBub3QgYmxvY2sgb24gSU8gKi8KKworI2RlZmluZSBNU19BU1lOQwkxCQkvKiBzeW5jIG1lbW9yeSBhc3luY2hyb25vdXNseSAqLworI2RlZmluZSBNU19JTlZBTElEQVRFCTIJCS8qIGludmFsaWRhdGUgdGhlIGNhY2hlcyAqLworI2RlZmluZSBNU19TWU5DCQk0CQkvKiBzeW5jaHJvbm91cyBtZW1vcnkgc3luYyAqLworCisjZGVmaW5lIE1DTF9DVVJSRU5UCTEJCS8qIGxvY2sgYWxsIGN1cnJlbnQgbWFwcGluZ3MgKi8KKyNkZWZpbmUgTUNMX0ZVVFVSRQkyCQkvKiBsb2NrIGFsbCBmdXR1cmUgbWFwcGluZ3MgKi8KKworI2RlZmluZSBNQURWX05PUk1BTAkweDAJCS8qIGRlZmF1bHQgcGFnZS1pbiBiZWhhdmlvciAqLworI2RlZmluZSBNQURWX1JBTkRPTQkweDEJCS8qIHBhZ2UtaW4gbWluaW11bSByZXF1aXJlZCAqLworI2RlZmluZSBNQURWX1NFUVVFTlRJQUwJMHgyCQkvKiByZWFkLWFoZWFkIGFnZ3Jlc3NpdmVseSAqLworI2RlZmluZSBNQURWX1dJTExORUVECTB4MwkJLyogcHJlLWZhdWx0IHBhZ2VzICovCisjZGVmaW5lIE1BRFZfRE9OVE5FRUQJMHg0CQkvKiBkaXNjYXJkIHRoZXNlIHBhZ2VzICovCisKKy8qIGNvbXBhdGliaWxpdHkgZmxhZ3MgKi8KKyNkZWZpbmUgTUFQX0FOT04JTUFQX0FOT05ZTU9VUworI2RlZmluZSBNQVBfRklMRQkwCisKKyNlbmRpZiAvKiBfX0FTTV9NTUFOX0hfXyAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvbW11LmggYi9pbmNsdWRlL2FzbS1mcnYvbW11LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJjMDM3MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWZydi9tbXUuaApAQCAtMCwwICsxLDQyIEBACisvKiBtbXUuaDogbWVtb3J5IG1hbmFnZW1lbnQgY29udGV4dCBmb3IgRlItViB3aXRoIG9yIHdpdGhvdXQgTU1VIHN1cHBvcnQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpZm5kZWYgX0FTTV9NTVVfSAorI2RlZmluZSBfQVNNX01NVV9ICisKK3R5cGVkZWYgc3RydWN0IHsKKyNpZmRlZiBDT05GSUdfTU1VCisJc3RydWN0IGxpc3RfaGVhZCBpZF9saW5rOwkJLyogbGluayBpbiBsaXN0IG9mIGNvbnRleHQgSUQgb3duZXJzICovCisJdW5zaWduZWQgc2hvcnQJaWQ7CQkJLyogTU1VIGNvbnRleHQgSUQgKi8KKwl1bnNpZ25lZCBzaG9ydAlpZF9idXN5OwkJLyogdHJ1ZSBpZiBJRCBpcyBpbiBDWE5SICovCisJdW5zaWduZWQgbG9uZwlpdGxiX2NhY2hlZF9wZ2U7CS8qIFtTQ1IwXSBQR0UgY2FjaGVkIGZvciBpbnNuIFRMQiBoYW5kbGVyICovCisJdW5zaWduZWQgbG9uZwlpdGxiX3B0ZF9tYXBwaW5nOwkvKiBbREFNUjRdIFBURCBtYXBwaW5nIGZvciBpdGxiIGNhY2hlZCBQR0UgKi8KKwl1bnNpZ25lZCBsb25nCWR0bGJfY2FjaGVkX3BnZTsJLyogW1NDUjFdIFBHRSBjYWNoZWQgZm9yIGRhdGEgVExCIGhhbmRsZXIgKi8KKwl1bnNpZ25lZCBsb25nCWR0bGJfcHRkX21hcHBpbmc7CS8qIFtEQU1SNV0gUFREIG1hcHBpbmcgZm9yIGR0bGIgY2FjaGVkIFBHRSAqLworCisjZWxzZQorCXN0cnVjdCB2bV9saXN0X3N0cnVjdAkqdm1saXN0OworCXVuc2lnbmVkIGxvbmcJCWVuZF9icms7CisKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0JJTkZNVF9FTEZfRkRQSUMKKwl1bnNpZ25lZCBsb25nCWV4ZWNfZmRwaWNfbG9hZG1hcDsKKwl1bnNpZ25lZCBsb25nCWludGVycF9mZHBpY19sb2FkbWFwOworI2VuZGlmCisKK30gbW1fY29udGV4dF90OworCisjaWZkZWYgQ09ORklHX01NVQorZXh0ZXJuIGludCBfX25vbmdwcmVsZGF0YSBjeG5fcGlubmVkOworZXh0ZXJuIGludCBjeG5fcGluX2J5X3BpZChwaWRfdCBwaWQpOworI2VuZGlmCisKKyNlbmRpZiAvKiBfQVNNX01NVV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvbW11X2NvbnRleHQuaCBiL2luY2x1ZGUvYXNtLWZydi9tbXVfY29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmYjllYTMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1mcnYvbW11X2NvbnRleHQuaApAQCAtMCwwICsxLDUwIEBACisvKiBtbXVfY29udGV4dC5oOiBNTVUgY29udGV4dCBtYW5hZ2VtZW50IHJvdXRpbmVzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgX0FTTV9NTVVfQ09OVEVYVF9ICisjZGVmaW5lIF9BU01fTU1VX0NPTlRFWFRfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgorCitzdGF0aWMgaW5saW5lIHZvaWQgZW50ZXJfbGF6eV90bGIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworfQorCisjaWZkZWYgQ09ORklHX01NVQorZXh0ZXJuIGludCBpbml0X25ld19jb250ZXh0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CitleHRlcm4gdm9pZCBjaGFuZ2VfbW1fY29udGV4dChtbV9jb250ZXh0X3QgKm9sZCwgbW1fY29udGV4dF90ICpjdHgsIHBnZF90ICpfcGdkKTsKK2V4dGVybiB2b2lkIGRlc3Ryb3lfY29udGV4dChzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CisKKyNlbHNlCisjZGVmaW5lIGluaXRfbmV3X2NvbnRleHQodHNrLCBtbSkJCSh7IDA7IH0pCisjZGVmaW5lIGNoYW5nZV9tbV9jb250ZXh0KG9sZCwgY3R4LCBfcG1sNCkJZG8ge30gd2hpbGUoMCkKKyNkZWZpbmUgZGVzdHJveV9jb250ZXh0KG1tKQkJCWRvIHt9IHdoaWxlKDApCisjZW5kaWYKKworI2RlZmluZSBzd2l0Y2hfbW0ocHJldiwgbmV4dCwgdHNrKQkJCQkJCVwKK2RvIHsJCQkJCQkJCQkJXAorCWlmIChwcmV2ICE9IG5leHQpCQkJCQkJCVwKKwkJY2hhbmdlX21tX2NvbnRleHQoJnByZXYtPmNvbnRleHQsICZuZXh0LT5jb250ZXh0LCBuZXh0LT5wZ2QpOwlcCit9IHdoaWxlKDApCisKKyNkZWZpbmUgYWN0aXZhdGVfbW0ocHJldiwgbmV4dCkJCQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCWNoYW5nZV9tbV9jb250ZXh0KCZwcmV2LT5jb250ZXh0LCAmbmV4dC0+Y29udGV4dCwgbmV4dC0+cGdkKTsJXAorfSB3aGlsZSgwKQorCisjZGVmaW5lIGRlYWN0aXZhdGVfbW0odHNrLCBtbSkJCQlcCitkbyB7CQkJCQkJXAorfSB3aGlsZSgwKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9tb2R1bGUuaCBiL2luY2x1ZGUvYXNtLWZydi9tb2R1bGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjIzY2ZhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tZnJ2L21vZHVsZS5oCkBAIC0wLDAgKzEsMjAgQEAKKy8qIG1vZHVsZS5oOiBGUlYgbW9kdWxlIHN0dWZmCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisjaWZuZGVmIF9BU01fTU9EVUxFX0gKKyNkZWZpbmUgX0FTTV9NT0RVTEVfSAorCisjZGVmaW5lIG1vZHVsZV9tYXAoeCkJCXZtYWxsb2MoeCkKKyNkZWZpbmUgbW9kdWxlX3VubWFwKHgpCQl2ZnJlZSh4KQorI2RlZmluZSBtb2R1bGVfYXJjaF9pbml0KHgpCSgwKQorI2RlZmluZSBhcmNoX2luaXRfbW9kdWxlcyh4KQlkbyB7IH0gd2hpbGUgKDApCisKKyNlbmRpZiAvKiBfQVNNX01PRFVMRV9IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9tc2didWYuaCBiL2luY2x1ZGUvYXNtLWZydi9tc2didWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2NlYjU1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tZnJ2L21zZ2J1Zi5oCkBAIC0wLDAgKzEsMzIgQEAKKyNpZm5kZWYgX0FTTV9NU0dCVUZfSAorI2RlZmluZSBfQVNNX01TR0JVRl9ICisKKy8qCisgKiBUaGUgbXNxaWQ2NF9kcyBzdHJ1Y3R1cmUgZm9yIEZSLVYgYXJjaGl0ZWN0dXJlLgorICogTm90ZSBleHRyYSBwYWRkaW5nIGJlY2F1c2UgdGhpcyBzdHJ1Y3R1cmUgaXMgcGFzc2VkIGJhY2sgYW5kIGZvcnRoCisgKiBiZXR3ZWVuIGtlcm5lbCBhbmQgdXNlciBzcGFjZS4KKyAqCisgKiBQYWQgc3BhY2UgaXMgbGVmdCBmb3I6CisgKiAtIDY0LWJpdCB0aW1lX3QgdG8gc29sdmUgeTIwMzggcHJvYmxlbQorICogLSAyIG1pc2NlbGxhbmVvdXMgMzItYml0IHZhbHVlcworICovCisKK3N0cnVjdCBtc3FpZDY0X2RzIHsKKwlzdHJ1Y3QgaXBjNjRfcGVybQltc2dfcGVybTsKKwlfX2tlcm5lbF90aW1lX3QJCW1zZ19zdGltZTsJLyogbGFzdCBtc2dzbmQgdGltZSAqLworCXVuc2lnbmVkIGxvbmcJCV9fdW51c2VkMTsKKwlfX2tlcm5lbF90aW1lX3QJCW1zZ19ydGltZTsJLyogbGFzdCBtc2dyY3YgdGltZSAqLworCXVuc2lnbmVkIGxvbmcJCV9fdW51c2VkMjsKKwlfX2tlcm5lbF90aW1lX3QJCW1zZ19jdGltZTsJLyogbGFzdCBjaGFuZ2UgdGltZSAqLworCXVuc2lnbmVkIGxvbmcJCV9fdW51c2VkMzsKKwl1bnNpZ25lZCBsb25nCQltc2dfY2J5dGVzOwkvKiBjdXJyZW50IG51bWJlciBvZiBieXRlcyBvbiBxdWV1ZSAqLworCXVuc2lnbmVkIGxvbmcJCW1zZ19xbnVtOwkvKiBudW1iZXIgb2YgbWVzc2FnZXMgaW4gcXVldWUgKi8KKwl1bnNpZ25lZCBsb25nCQltc2dfcWJ5dGVzOwkvKiBtYXggbnVtYmVyIG9mIGJ5dGVzIG9uIHF1ZXVlICovCisJX19rZXJuZWxfcGlkX3QJCW1zZ19sc3BpZDsJLyogcGlkIG9mIGxhc3QgbXNnc25kICovCisJX19rZXJuZWxfcGlkX3QJCW1zZ19scnBpZDsJLyogbGFzdCByZWNlaXZlIHBpZCAqLworCXVuc2lnbmVkIGxvbmcJCV9fdW51c2VkNDsKKwl1bnNpZ25lZCBsb25nCQlfX3VudXNlZDU7Cit9OworCisjZW5kaWYgLyogX0FTTV9NU0dCVUZfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvbmFtZWkuaCBiL2luY2x1ZGUvYXNtLWZydi9uYW1laS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0ZGRkNjQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1mcnYvbmFtZWkuaApAQCAtMCwwICsxLDE4IEBACisvKgorICogYXNtL25hbWVpLmgKKyAqCisgKiBJbmNsdWRlZCBmcm9tIGxpbnV4L2ZzL25hbWVpLmMKKyAqLworCisjaWZuZGVmIF9fQVNNX05BTUVJX0gKKyNkZWZpbmUgX19BU01fTkFNRUlfSAorCisvKiBUaGlzIGR1bW15IHJvdXRpbmUgbWF5YmUgY2hhbmdlZCB0byBzb21ldGhpbmcgdXNlZnVsCisgKiBmb3IgL3Vzci9nbmVtdWwvIGVtdWxhdGlvbiBzdHVmZi4KKyAqIExvb2sgYXQgYXNtLXNwYXJjL25hbWVpLmggZm9yIGRldGFpbHMuCisgKi8KKworI2RlZmluZSBfX2VtdWxfcHJlZml4KCkgTlVMTAorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L3BhZ2UuaCBiL2luY2x1ZGUvYXNtLWZydi9wYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc5MTRmMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWZydi9wYWdlLmgKQEAgLTAsMCArMSwxMDUgQEAKKyNpZm5kZWYgX0FTTV9QQUdFX0gKKyNkZWZpbmUgX0FTTV9QQUdFX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS92aXJ0Y29udmVydC5oPgorI2luY2x1ZGUgPGFzbS9tZW0tbGF5b3V0Lmg+CisjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNkZWZpbmUgZ2V0X3VzZXJfcGFnZSh2YWRkcikJCQlfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCkKKyNkZWZpbmUgZnJlZV91c2VyX3BhZ2UocGFnZSwgYWRkcikJCWZyZWVfcGFnZShhZGRyKQorCisjZGVmaW5lIGNsZWFyX3BhZ2UocGdhZGRyKQkJCW1lbXNldCgocGdhZGRyKSwgMCwgUEFHRV9TSVpFKQorI2RlZmluZSBjb3B5X3BhZ2UodG8sZnJvbSkJCQltZW1jcHkoKHRvKSwgKGZyb20pLCBQQUdFX1NJWkUpCisKKyNkZWZpbmUgY2xlYXJfdXNlcl9wYWdlKHBnYWRkciwgdmFkZHIsIHBhZ2UpCW1lbXNldCgocGdhZGRyKSwgMCwgUEFHRV9TSVpFKQorI2RlZmluZSBjb3B5X3VzZXJfcGFnZSh2dG8sIHZmcm9tLCB2YWRkciwgdG9wZykJbWVtY3B5KCh2dG8pLCAodmZyb20pLCBQQUdFX1NJWkUpCisKKy8qCisgKiBUaGVzZSBhcmUgdXNlZCB0byBtYWtlIHVzZSBvZiBDIHR5cGUtY2hlY2tpbmcuLgorICovCit0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcJcHRlOwl9IHB0ZV90OwordHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nCXN0ZVs2NF07fSBwbWRfdDsKK3R5cGVkZWYgc3RydWN0IHsgcG1kX3QJCXB1ZVsxXTsgfSBwdWRfdDsKK3R5cGVkZWYgc3RydWN0IHsgcHVkX3QJCXBnZVsxXTsJfSBwZ2RfdDsKK3R5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZwlwZ3Byb3Q7CX0gcGdwcm90X3Q7CisKKyNkZWZpbmUgcHRlX3ZhbCh4KQkoKHgpLnB0ZSkKKyNkZWZpbmUgcG1kX3ZhbCh4KQkoKHgpLnN0ZVswXSkKKyNkZWZpbmUgcHVkX3ZhbCh4KQkoKHgpLnB1ZVswXSkKKyNkZWZpbmUgcGdkX3ZhbCh4KQkoKHgpLnBnZVswXSkKKyNkZWZpbmUgcGdwcm90X3ZhbCh4KQkoKHgpLnBncHJvdCkKKworI2RlZmluZSBfX3B0ZSh4KQkoKHB0ZV90KSB7ICh4KSB9ICkKKyNkZWZpbmUgX19wbWQoeCkJKChwbWRfdCkgeyAoeCkgfSApCisjZGVmaW5lIF9fcHVkKHgpCSgocHVkX3QpIHsgKHgpIH0gKQorI2RlZmluZSBfX3BnZCh4KQkoKHBnZF90KSB7ICh4KSB9ICkKKyNkZWZpbmUgX19wZ3Byb3QoeCkJKChwZ3Byb3RfdCkgeyAoeCkgfSApCisjZGVmaW5lIFBURV9NQVNLCVBBR0VfTUFTSworCisvKiB0byBhbGlnbiB0aGUgcG9pbnRlciB0byB0aGUgKG5leHQpIHBhZ2UgYm91bmRhcnkgKi8KKyNkZWZpbmUgUEFHRV9BTElHTihhZGRyKQkoKChhZGRyKSArIFBBR0VfU0laRSAtIDEpICYgUEFHRV9NQVNLKQorCisvKiBQdXJlIDJebiB2ZXJzaW9uIG9mIGdldF9vcmRlciAqLworc3RhdGljIGlubGluZSBpbnQgZ2V0X29yZGVyKHVuc2lnbmVkIGxvbmcgc2l6ZSkgX19hdHRyaWJ1dGVfY29uc3RfXzsKK3N0YXRpYyBpbmxpbmUgaW50IGdldF9vcmRlcih1bnNpZ25lZCBsb25nIHNpemUpCit7CisJaW50IG9yZGVyOworCisJc2l6ZSA9IChzaXplIC0gMSkgPj4gKFBBR0VfU0hJRlQgLSAxKTsKKwlvcmRlciA9IC0xOworCWRvIHsKKwkJc2l6ZSA+Pj0gMTsKKwkJb3JkZXIrKzsKKwl9IHdoaWxlIChzaXplKTsKKwlyZXR1cm4gb3JkZXI7Cit9CisKKyNkZWZpbmUgZGV2bWVtX2lzX2FsbG93ZWQocGZuKQkxCisKKyNkZWZpbmUgX19wYSh2YWRkcikJCXZpcnRfdG9fcGh5cygodm9pZCAqKSB2YWRkcikKKyNkZWZpbmUgX192YShwYWRkcikJCXBoeXNfdG9fdmlydCgodW5zaWduZWQgbG9uZykgcGFkZHIpCisKKyNkZWZpbmUgcGZuX3RvX2thZGRyKHBmbikJX192YSgocGZuKSA8PCBQQUdFX1NISUZUKQorCitleHRlcm4gdW5zaWduZWQgbG9uZyBtYXhfbG93X3BmbjsKK2V4dGVybiB1bnNpZ25lZCBsb25nIG1pbl9sb3dfcGZuOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWF4X3BmbjsKKworI2lmZGVmIENPTkZJR19NTVUKKyNkZWZpbmUgcGZuX3RvX3BhZ2UocGZuKQkobWVtX21hcCArIChwZm4pKQorI2RlZmluZSBwYWdlX3RvX3BmbihwYWdlKQkoKHVuc2lnbmVkIGxvbmcpICgocGFnZSkgLSBtZW1fbWFwKSkKKyNkZWZpbmUgcGZuX3ZhbGlkKHBmbikJCSgocGZuKSA8IG1heF9tYXBucikKKworI2Vsc2UKKyNkZWZpbmUgcGZuX3RvX3BhZ2UocGZuKQkoJm1lbV9tYXBbKHBmbikgLSAoUEFHRV9PRkZTRVQgPj4gUEFHRV9TSElGVCldKQorI2RlZmluZSBwYWdlX3RvX3BmbihwYWdlKQkoKFBBR0VfT0ZGU0VUID4+IFBBR0VfU0hJRlQpICsgKHVuc2lnbmVkIGxvbmcpICgocGFnZSkgLSBtZW1fbWFwKSkKKyNkZWZpbmUgcGZuX3ZhbGlkKHBmbikJCSgocGZuKSA+PSBtaW5fbG93X3BmbiAmJiAocGZuKSA8IG1heF9sb3dfcGZuKQorCisjZW5kaWYKKworI2RlZmluZSB2aXJ0X3RvX3BhZ2Uoa2FkZHIpCXBmbl90b19wYWdlKF9fcGEoa2FkZHIpID4+IFBBR0VfU0hJRlQpCisjZGVmaW5lIHZpcnRfYWRkcl92YWxpZChrYWRkcikJcGZuX3ZhbGlkKF9fcGEoa2FkZHIpID4+IFBBR0VfU0hJRlQpCisKKworI2lmZGVmIENPTkZJR19NTVUKKyNkZWZpbmUgVk1fREFUQV9ERUZBVUxUX0ZMQUdTIFwKKwkoVk1fUkVBRCB8IFZNX1dSSVRFIHwgXAorCSgoY3VycmVudC0+cGVyc29uYWxpdHkgJiBSRUFEX0lNUExJRVNfRVhFQykgPyBWTV9FWEVDIDogMCApIHwgXAorCQkgVk1fTUFZUkVBRCB8IFZNX01BWVdSSVRFIHwgVk1fTUFZRVhFQykKKyNlbmRpZgorCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNpZmRlZiBDT05GSUdfQ09OVElHVU9VU19QQUdFX0FMTE9DCisjZGVmaW5lIFdBTlRfUEFHRV9WSVJUVUFMCTEKKyNlbmRpZgorCisjZW5kaWYgLyogX0FTTV9QQUdFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9wYXJhbS5oIGIvaW5jbHVkZS9hc20tZnJ2L3BhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY4MzgxZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWZydi9wYXJhbS5oCkBAIC0wLDAgKzEsMjMgQEAKKyNpZm5kZWYgX0FTTV9QQVJBTV9ICisjZGVmaW5lIF9BU01fUEFSQU1fSAorCisjaWZkZWYgX19LRVJORUxfXworI2RlZmluZSBIWgkJMTAwMAkJLyogSW50ZXJuYWwga2VybmVsIHRpbWVyIGZyZXF1ZW5jeSAqLworI2RlZmluZSBVU0VSX0haCQkxMDAJCS8qIC4uIHNvbWUgdXNlciBpbnRlcmZhY2VzIGFyZSBpbiAidGlja3MiICovCisjZGVmaW5lIENMT0NLU19QRVJfU0VDCShVU0VSX0haKQkvKiBsaWtlIHRpbWVzKCkgKi8KKyNlbmRpZgorCisjaWZuZGVmIEhaCisjZGVmaW5lIEhaIDEwMAorI2VuZGlmCisKKyNkZWZpbmUgRVhFQ19QQUdFU0laRQkxNjM4NAorCisjaWZuZGVmIE5PR1JPVVAKKyNkZWZpbmUgTk9HUk9VUAkJKC0xKQorI2VuZGlmCisKKyNkZWZpbmUgTUFYSE9TVE5BTUVMRU4JCTY0CS8qIG1heCBsZW5ndGggb2YgaG9zdG5hbWUgKi8KKyNkZWZpbmUgQ09NTUFORF9MSU5FX1NJWkUJNTEyCisKKyNlbmRpZiAvKiBfQVNNX1BBUkFNX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9wY2kuaCBiL2luY2x1ZGUvYXNtLWZydi9wY2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmE0NjkyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tZnJ2L3BjaS5oCkBAIC0wLDAgKzEsMTA4IEBACisvKiBwY2kuaDogRlItViBzcGVjaWZpYyBQQ0kgZGVjbGFyYXRpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzIFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqIC0gRGVyaXZlZCBmcm9tIGluY2x1ZGUvYXNtLW02OGsvcGNpLmgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgQVNNX1BDSV9ICisjZGVmaW5lCUFTTV9QQ0lfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxhc20vc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wY2ktZG1hLWNvbXBhdC5oPgorI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BjaS5oPgorCitzdHJ1Y3QgcGNpX2RldjsKKworI2RlZmluZSBwY2liaW9zX2Fzc2lnbl9hbGxfYnVzc2VzKCkJMAorCitzdGF0aWMgaW5saW5lIHZvaWQgcGNpYmlvc19hZGRfcGxhdGZvcm1fZW50cmllcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworfQorCitleHRlcm4gdm9pZCBwY2liaW9zX3NldF9tYXN0ZXIoc3RydWN0IHBjaV9kZXYgKmRldik7CisKK2V4dGVybiB2b2lkIHBjaWJpb3NfcGVuYWxpemVfaXNhX2lycShpbnQgaXJxKTsKKworI2lmZGVmIENPTkZJR19NTVUKK2V4dGVybiB2b2lkICpjb25zaXN0ZW50X2FsbG9jKGludCBnZnAsIHNpemVfdCBzaXplLCBkbWFfYWRkcl90ICpkbWFfaGFuZGxlKTsKK2V4dGVybiB2b2lkIGNvbnNpc3RlbnRfZnJlZSh2b2lkICp2YWRkcik7CitleHRlcm4gdm9pZCBjb25zaXN0ZW50X3N5bmModm9pZCAqdmFkZHIsIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKTsKK2V4dGVybiB2b2lkIGNvbnNpc3RlbnRfc3luY19wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKKwkJCQkgc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pOworI2VuZGlmCisKK2V4dGVybiB2b2lkICpwY2lfYWxsb2NfY29uc2lzdGVudChzdHJ1Y3QgcGNpX2RldiAqaHdkZXYsIHNpemVfdCBzaXplLAorCQkJCSAgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSk7CisKK2V4dGVybiB2b2lkIHBjaV9mcmVlX2NvbnNpc3RlbnQoc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCBzaXplX3Qgc2l6ZSwKKwkJCQl2b2lkICp2YWRkciwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlKTsKKworLyogVGhpcyBpcyBhbHdheXMgZmluZS4gKi8KKyNkZWZpbmUgcGNpX2RhY19kbWFfc3VwcG9ydGVkKHBjaV9kZXYsIG1hc2spCSgxKQorCisvKiBSZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBQQ0kgY29udHJvbGxlciBmb3IgZGV2aWNlIFBERVYuICovCisjZGVmaW5lIHBjaV9jb250cm9sbGVyX251bShQREVWKQkoMCkKKworLyogVGhlIFBDSSBhZGRyZXNzIHNwYWNlIGRvZXMgZXF1YWwgdGhlIHBoeXNpY2FsIG1lbW9yeQorICogYWRkcmVzcyBzcGFjZS4gIFRoZSBuZXR3b3JraW5nIGFuZCBibG9jayBkZXZpY2UgbGF5ZXJzIHVzZQorICogdGhpcyBib29sZWFuIGZvciBib3VuY2UgYnVmZmVyIGRlY2lzaW9ucy4KKyAqLworI2RlZmluZSBQQ0lfRE1BX0JVU19JU19QSFlTCSgxKQorCisvKgorICoJVGhlc2UgYXJlIHByZXR0eSBtdWNoIGFyYml0YXJ5IHdpdGggdGhlIENvTUVNIGltcGxlbWVudGF0aW9uLgorICoJV2UgaGF2ZSB0aGUgd2hvbGUgYWRkcmVzcyBzcGFjZSB0byBvdXJzZWx2ZXMuCisgKi8KKyNkZWZpbmUgUENJQklPU19NSU5fSU8JCTB4MTAwCisjZGVmaW5lIFBDSUJJT1NfTUlOX01FTQkJMHgwMDAxMDAwMAorCisvKiBNYWtlIHBoeXNpY2FsIG1lbW9yeSBjb25zaXN0ZW50IGZvciBhIHNpbmdsZQorICogc3RyZWFtaW5nIG1vZGUgRE1BIHRyYW5zbGF0aW9uIGFmdGVyIGEgdHJhbnNmZXIuCisgKgorICogSWYgeW91IHBlcmZvcm0gYSBwY2lfbWFwX3NpbmdsZSgpIGJ1dCB3aXNoIHRvIGludGVycm9nYXRlIHRoZQorICogYnVmZmVyIHVzaW5nIHRoZSBjcHUsIHlldCBkbyBub3Qgd2lzaCB0byB0ZWFyZG93biB0aGUgUENJIGRtYQorICogbWFwcGluZywgeW91IG11c3QgY2FsbCB0aGlzIGZ1bmN0aW9uIGJlZm9yZSBkb2luZyBzby4gIEF0IHRoZQorICogbmV4dCBwb2ludCB5b3UgZ2l2ZSB0aGUgUENJIGRtYSBhZGRyZXNzIGJhY2sgdG8gdGhlIGNhcmQsIHRoZQorICogZGV2aWNlIGFnYWluIG93bnMgdGhlIGJ1ZmZlci4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHBjaV9kbWFfc3luY19zaW5nbGUoc3RydWN0IHBjaV9kZXYgKmh3ZGV2LAorCQkJCSAgICAgICBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCisJCQkJICAgICAgIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKQoreworCWlmIChkaXJlY3Rpb24gPT0gUENJX0RNQV9OT05FKQorICAgICAgICAgICAgICAgIEJVRygpOworCisJZnJ2X2NhY2hlX3diYWNrX2ludigodW5zaWduZWQgbG9uZylidXNfdG9fdmlydChkbWFfaGFuZGxlKSwKKwkJCSAgICAodW5zaWduZWQgbG9uZylidXNfdG9fdmlydChkbWFfaGFuZGxlKSArIHNpemUpOworfQorCisvKiBNYWtlIHBoeXNpY2FsIG1lbW9yeSBjb25zaXN0ZW50IGZvciBhIHNldCBvZiBzdHJlYW1pbmcKKyAqIG1vZGUgRE1BIHRyYW5zbGF0aW9ucyBhZnRlciBhIHRyYW5zZmVyLgorICoKKyAqIFRoZSBzYW1lIGFzIHBjaV9kbWFfc3luY19zaW5nbGUgYnV0IGZvciBhIHNjYXR0ZXItZ2F0aGVyIGxpc3QsCisgKiBzYW1lIHJ1bGVzIGFuZCB1c2FnZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHBjaV9kbWFfc3luY19zZyhzdHJ1Y3QgcGNpX2RldiAqaHdkZXYsCisJCQkJICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwkJCQkgICBpbnQgbmVsZW1zLCBpbnQgZGlyZWN0aW9uKQoreworCWludCBpOworCisJaWYgKGRpcmVjdGlvbiA9PSBQQ0lfRE1BX05PTkUpCisgICAgICAgICAgICAgICAgQlVHKCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbmVsZW1zOyBpKyspCisJCWZydl9jYWNoZV93YmFja19pbnYoc2dfZG1hX2FkZHJlc3MoJnNnW2ldKSwKKwkJCQkgICAgc2dfZG1hX2FkZHJlc3MoJnNnW2ldKStzZ19kbWFfbGVuKCZzZ1tpXSkpOworfQorCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L3BlcmNwdS5oIGIvaW5jbHVkZS9hc20tZnJ2L3BlcmNwdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjYWQzZjgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1mcnYvcGVyY3B1LmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fQVNNX1BFUkNQVV9ICisjZGVmaW5lIF9fQVNNX1BFUkNQVV9ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wZXJjcHUuaD4KKworI2VuZGlmCS8qIF9fQVNNX1BFUkNQVV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvcGdhbGxvYy5oIGIvaW5jbHVkZS9hc20tZnJ2L3BnYWxsb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmQyOGY0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tZnJ2L3BnYWxsb2MuaApAQCAtMCwwICsxLDY0IEBACisvKiBwZ2FsbG9jLmg6IFBhZ2UgYWxsb2NhdGlvbiByb3V0aW5lcyBmb3IgRlJWCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIERlcml2ZWQgZnJvbToKKyAqCWluY2x1ZGUvYXNtLW02OGtub21tdS9wZ2FsbG9jLmgKKyAqCWluY2x1ZGUvYXNtLWkzODYvcGdhbGxvYy5oCisgKi8KKyNpZm5kZWYgX0FTTV9QR0FMTE9DX0gKKyNkZWZpbmUgX0FTTV9QR0FMTE9DX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS92aXJ0Y29udmVydC5oPgorCisjaWZkZWYgQ09ORklHX01NVQorCisjZGVmaW5lIHBtZF9wb3B1bGF0ZV9rZXJuZWwobW0sIHBtZCwgcHRlKSBfX3NldF9wbWQocG1kLCBfX3BhKHB0ZSkgfCBfUEFHRV9UQUJMRSkKKyNkZWZpbmUgcG1kX3BvcHVsYXRlKE1NLCBQTUQsIFBBR0UpCQkJCQkJXAorZG8gewkJCQkJCQkJCQlcCisJX19zZXRfcG1kKChQTUQpLCBwYWdlX3RvX3BmbihQQUdFKSA8PCBQQUdFX1NISUZUIHwgX1BBR0VfVEFCTEUpOwlcCit9IHdoaWxlKDApCisKKy8qCisgKiBBbGxvY2F0ZSBhbmQgZnJlZSBwYWdlIHRhYmxlcy4KKyAqLworCitleHRlcm4gcGdkX3QgKnBnZF9hbGxvYyhzdHJ1Y3QgbW1fc3RydWN0ICopOworZXh0ZXJuIHZvaWQgcGdkX2ZyZWUocGdkX3QgKik7CisKK2V4dGVybiBwdGVfdCAqcHRlX2FsbG9jX29uZV9rZXJuZWwoc3RydWN0IG1tX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nKTsKKworZXh0ZXJuIHN0cnVjdCBwYWdlICpwdGVfYWxsb2Nfb25lKHN0cnVjdCBtbV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZyk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdGVfZnJlZV9rZXJuZWwocHRlX3QgKnB0ZSkKK3sKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcHRlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHB0ZV9mcmVlKHN0cnVjdCBwYWdlICpwdGUpCit7CisJX19mcmVlX3BhZ2UocHRlKTsKK30KKworI2RlZmluZSBfX3B0ZV9mcmVlX3RsYih0bGIscHRlKQkJdGxiX3JlbW92ZV9wYWdlKCh0bGIpLChwdGUpKQorCisvKgorICogYWxsb2NhdGluZyBhbmQgZnJlZWluZyBhIHBtZCBpcyB0cml2aWFsOiB0aGUgMS1lbnRyeSBwbWQgaXMKKyAqIGluc2lkZSB0aGUgcGdkLCBzbyBoYXMgbm8gZXh0cmEgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCBpdC4KKyAqIChJbiB0aGUgUEFFIGNhc2Ugd2UgZnJlZSB0aGUgcG1kcyBhcyBwYXJ0IG9mIHRoZSBwZ2QuKQorICovCisjZGVmaW5lIHBtZF9hbGxvY19vbmUobW0sIGFkZHIpCQkoeyBCVUcoKTsgKChwbWRfdCAqKSAyKTsgfSkKKyNkZWZpbmUgcG1kX2ZyZWUoeCkJCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIF9fcG1kX2ZyZWVfdGxiKHRsYix4KQkJZG8geyB9IHdoaWxlICgwKQorCisjZW5kaWYgLyogQ09ORklHX01NVSAqLworCisjZW5kaWYgLyogX0FTTV9QR0FMTE9DX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1mcnYvcGd0YWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjMTM3M2MKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1mcnYvcGd0YWJsZS5oCkBAIC0wLDAgKzEsNTU1IEBACisvKiBwZ3RhYmxlLmg6IEZSLVYgcGFnZSB0YWJsZSBtYW5nbGluZworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBEZXJpdmVkIGZyb206CisgKglpbmNsdWRlL2FzbS1tNjhrbm9tbXUvcGd0YWJsZS5oCisgKglpbmNsdWRlL2FzbS1pMzg2L3BndGFibGUuaAorICovCisKKyNpZm5kZWYgX0FTTV9QR1RBQkxFX0gKKyNkZWZpbmUgX0FTTV9QR1RBQkxFX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS9tZW0tbGF5b3V0Lmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjZW5kaWYKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNpZiBkZWZpbmVkKENPTkZJR19ISUdIUFRFKQordHlwZWRlZiB1bnNpZ25lZCBsb25nIHB0ZV9hZGRyX3Q7CisjZWxzZQordHlwZWRlZiBwdGVfdCAqcHRlX2FkZHJfdDsKKyNlbmRpZgorI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBNTVUtbGVzcyBvcGVyYXRpb24gY2FzZSBmaXJzdAorICovCisjaWZuZGVmIENPTkZJR19NTVUKKworI2RlZmluZSBwZ2RfcHJlc2VudChwZ2QpCSgxKQkJLyogcGFnZXMgYXJlIGFsd2F5cyBwcmVzZW50IG9uIE5PX01NICovCisjZGVmaW5lIHBnZF9ub25lKHBnZCkJCSgwKQorI2RlZmluZSBwZ2RfYmFkKHBnZCkJCSgwKQorI2RlZmluZSBwZ2RfY2xlYXIocGdkcCkKKyNkZWZpbmUga2Vybl9hZGRyX3ZhbGlkKGFkZHIpCSgxKQorI2RlZmluZQlwbWRfb2Zmc2V0KGEsIGIpCSgodm9pZCAqKSAwKQorCisjZGVmaW5lIFBBR0VfTk9ORQkJX19wZ3Byb3QoMCkJLyogdGhlc2UgbWVhbiBub3RoaW5nIHRvIE5PX01NICovCisjZGVmaW5lIFBBR0VfU0hBUkVECQlfX3BncHJvdCgwKQkvKiB0aGVzZSBtZWFuIG5vdGhpbmcgdG8gTk9fTU0gKi8KKyNkZWZpbmUgUEFHRV9DT1BZCQlfX3BncHJvdCgwKQkvKiB0aGVzZSBtZWFuIG5vdGhpbmcgdG8gTk9fTU0gKi8KKyNkZWZpbmUgUEFHRV9SRUFET05MWQkJX19wZ3Byb3QoMCkJLyogdGhlc2UgbWVhbiBub3RoaW5nIHRvIE5PX01NICovCisjZGVmaW5lIFBBR0VfS0VSTkVMCQlfX3BncHJvdCgwKQkvKiB0aGVzZSBtZWFuIG5vdGhpbmcgdG8gTk9fTU0gKi8KKworI2RlZmluZSBfX3N3cF90eXBlKHgpCQkoMCkKKyNkZWZpbmUgX19zd3Bfb2Zmc2V0KHgpCQkoMCkKKyNkZWZpbmUgX19zd3BfZW50cnkodHlwLG9mZikJKChzd3BfZW50cnlfdCkgeyAoKHR5cCkgfCAoKG9mZikgPDwgNykpIH0pCisjZGVmaW5lIF9fcHRlX3RvX3N3cF9lbnRyeShwdGUpCSgoc3dwX2VudHJ5X3QpIHsgcHRlX3ZhbChwdGUpIH0pCisjZGVmaW5lIF9fc3dwX2VudHJ5X3RvX3B0ZSh4KQkoKHB0ZV90KSB7ICh4KS52YWwgfSkKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9maWxlKHB0ZV90IHB0ZSkgeyByZXR1cm4gMDsgfQorI2VuZGlmCisKKyNkZWZpbmUgWkVST19QQUdFKHZhZGRyKQkoeyBCVUcoKTsgTlVMTDsgfSkKKworI2RlZmluZSBzd2FwcGVyX3BnX2RpcgkJKChwZ2RfdCAqKSBOVUxMKQorCisjZGVmaW5lIHBndGFibGVfY2FjaGVfaW5pdCgpCWRvIHt9IHdoaWxlKDApCisKKyNlbHNlIC8qICFDT05GSUdfTU1VICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogdGhlbiBNTVUgb3BlcmF0aW9uCisgKi8KKworLyoKKyAqIFpFUk9fUEFHRSBpcyBhIGdsb2JhbCBzaGFyZWQgcGFnZSB0aGF0IGlzIGFsd2F5cyB6ZXJvOiB1c2VkCisgKiBmb3IgemVyby1tYXBwZWQgbWVtb3J5IGFyZWFzIGV0Yy4uCisgKi8KKyNpZm5kZWYgX19BU1NFTUJMWV9fCitleHRlcm4gdW5zaWduZWQgbG9uZyBlbXB0eV96ZXJvX3BhZ2U7CisjZGVmaW5lIFpFUk9fUEFHRSh2YWRkcikJdmlydF90b19wYWdlKGVtcHR5X3plcm9fcGFnZSkKKyNlbmRpZgorCisvKgorICogd2UgdXNlIDItbGV2ZWwgcGFnZSB0YWJsZXMsIGZvbGRpbmcgdGhlIFBNRCAobWlkLWxldmVsIHRhYmxlKSBpbnRvIHRoZSBQR0UgKHRvcC1sZXZlbCBlbnRyeSkKKyAqIFtzZWUgRG9jdW1lbnRhdGlvbi9mdWppdHN1L2Zydi9tbXUtbGF5b3V0LnR4dF0KKyAqCisgKiBQYWdlIERpcmVjdG9yeToKKyAqICAtIFNpemU6IDE2S0IKKyAqICAtIDY0IFBHRXMgcGVyIFBHRAorICogIC0gRWFjaCBQR0UgaG9sZHMgMSBQVUQgYW5kIGNvdmVycyA2NE1CCisgKgorICogUGFnZSBVcHBlciBEaXJlY3Rvcnk6CisgKiAgLSBTaXplOiAyNTZCCisgKiAgLSAxIFBVRSBwZXIgUFVECisgKiAgLSBFYWNoIFBVRSBob2xkcyAxIFBNRCBhbmQgY292ZXJzIDY0TUIKKyAqCisgKiBQYWdlIE1pZC1MZXZlbCBEaXJlY3RvcnkKKyAqICAtIFNpemU6IDI1NkIKKyAqICAtIDEgUE1FIHBlciBQTUQKKyAqICAtIEVhY2ggUE1FIGhvbGRzIDY0IFNURXMsIGFsbCBvZiB3aGljaCBwb2ludCB0byBzZXBhcmF0ZSBjaHVua3Mgb2YgdGhlIHNhbWUgUGFnZSBUYWJsZQorICogIC0gQWxsIFNURXMgYXJlIGluc3RhbnRpYXRlZCBhdCB0aGUgc2FtZSB0aW1lCisgKgorICogUGFnZSBUYWJsZQorICogIC0gU2l6ZTogMTZLQgorICogIC0gNDA5NiBQVEVzIHBlciBQVAorICogIC0gRWFjaCBMaW51eCBQVCBpcyBzdWJkaXZpZGVkIGludG8gNjQgRlI0NTEgUFQncywgZWFjaCBvZiB3aGljaCBob2xkcyA2NCBlbnRyaWVzCisgKgorICogUGFnZXMKKyAqICAtIFNpemU6IDRLQgorICoKKyAqIHRvdGFsIFBURXMKKyAqCT0gMSBQTUw0RSAqIDY0IFBHRXMgKiAxIFBVRXMgKiAxIFBNRXMgKiA0MDk2IFBURXMKKyAqCT0gMSBQTUw0RSAqIDY0IFBHRXMgKiA2NCBTVEVzICogNjQgUFRFcy9GUjQ1MS1QVAorICoJPSAyNjIxNDQgKG9yIDI1NiAqIDEwMjQpCisgKi8KKyNkZWZpbmUgUEdESVJfU0hJRlQJCTI2CisjZGVmaW5lIFBHRElSX1NJWkUJCSgxVUwgPDwgUEdESVJfU0hJRlQpCisjZGVmaW5lIFBHRElSX01BU0sJCSh+KFBHRElSX1NJWkUgLSAxKSkKKyNkZWZpbmUgUFRSU19QRVJfUEdECQk2NAorCisjZGVmaW5lIFBVRF9TSElGVAkJMjYKKyNkZWZpbmUgUFRSU19QRVJfUFVECQkxCisjZGVmaW5lIFBVRF9TSVpFCQkoMVVMIDw8IFBVRF9TSElGVCkKKyNkZWZpbmUgUFVEX01BU0sJCSh+KFBVRF9TSVpFIC0gMSkpCisjZGVmaW5lIFBVRV9TSVpFCQkyNTYKKworI2RlZmluZSBQTURfU0hJRlQJCTI2CisjZGVmaW5lIFBNRF9TSVpFCQkoMVVMIDw8IFBNRF9TSElGVCkKKyNkZWZpbmUgUE1EX01BU0sJCSh+KFBNRF9TSVpFIC0gMSkpCisjZGVmaW5lIFBUUlNfUEVSX1BNRAkJMQorI2RlZmluZSBQTUVfU0laRQkJMjU2CisKKyNkZWZpbmUgX19mcnZfUFRfU0laRQkJMjU2CisKKyNkZWZpbmUgUFRSU19QRVJfUFRFCQk0MDk2CisKKyNkZWZpbmUgVVNFUl9QR0RTX0lOX0xBU1RfUE1MNAkoVEFTS19TSVpFIC8gUEdESVJfU0laRSkKKyNkZWZpbmUgRklSU1RfVVNFUl9QR0RfTlIJMAorCisjZGVmaW5lIFVTRVJfUEdEX1BUUlMJCShQQUdFX09GRlNFVCA+PiBQR0RJUl9TSElGVCkKKyNkZWZpbmUgS0VSTkVMX1BHRF9QVFJTCQkoUFRSU19QRVJfUEdEIC0gVVNFUl9QR0RfUFRSUykKKworI2RlZmluZSBUV09MRVZFTF9QR0RJUl9TSElGVAkyNgorI2RlZmluZSBCT09UX1VTRVJfUEdEX1BUUlMJKF9fUEFHRV9PRkZTRVQgPj4gVFdPTEVWRUxfUEdESVJfU0hJRlQpCisjZGVmaW5lIEJPT1RfS0VSTkVMX1BHRF9QVFJTCShQVFJTX1BFUl9QR0QgLSBCT09UX1VTRVJfUEdEX1BUUlMpCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK2V4dGVybiBwZ2RfdCBzd2FwcGVyX3BnX2RpcltQVFJTX1BFUl9QR0RdOworCisjZGVmaW5lIHB0ZV9FUlJPUihlKSBcCisJcHJpbnRrKCIlczolZDogYmFkIHB0ZSAlMDhseC5cbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgKGUpLnB0ZSkKKyNkZWZpbmUgcG1kX0VSUk9SKGUpIFwKKwlwcmludGsoIiVzOiVkOiBiYWQgcG1kICUwOGx4LlxuIiwgX19GSUxFX18sIF9fTElORV9fLCBwbWRfdmFsKGUpKQorI2RlZmluZSBwdWRfRVJST1IoZSkgXAorCXByaW50aygiJXM6JWQ6IGJhZCBwdWQgJTA4bHguXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sIHBtZF92YWwocHVkX3ZhbChlKSkpCisjZGVmaW5lIHBnZF9FUlJPUihlKSBcCisJcHJpbnRrKCIlczolZDogYmFkIHBnZCAlMDhseC5cbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgcG1kX3ZhbChwdWRfdmFsKHBnZF92YWwoZSkpKSkKKworLyoKKyAqIENlcnRhaW4gYXJjaGl0ZWN0dXJlcyBuZWVkIHRvIGRvIHNwZWNpYWwgdGhpbmdzIHdoZW4gUFRFcworICogd2l0aGluIGEgcGFnZSB0YWJsZSBhcmUgZGlyZWN0bHkgbW9kaWZpZWQuICBUaHVzLCB0aGUgZm9sbG93aW5nCisgKiBob29rIGlzIG1hZGUgYXZhaWxhYmxlLgorICovCisjZGVmaW5lIHNldF9wdGUocHRlcHRyLCBwdGV2YWwpCQkJCVwKK2RvIHsJCQkJCQkJXAorCSoocHRlcHRyKSA9IChwdGV2YWwpOwkJCQlcCisJYXNtIHZvbGF0aWxlKCJkY2YgJU0wIiA6OiAiVSIoKnB0ZXB0cikpOwlcCit9IHdoaWxlKDApCisjZGVmaW5lIHNldF9wdGVfYXQobW0sYWRkcixwdGVwLHB0ZXZhbCkgc2V0X3B0ZShwdGVwLHB0ZXZhbCkKKworI2RlZmluZSBzZXRfcHRlX2F0b21pYyhwdGVwdHIsIHB0ZXZhbCkJCXNldF9wdGUoKHB0ZXB0ciksIChwdGV2YWwpKQorCisvKgorICogcGdkX29mZnNldCgpIHJldHVybnMgYSAocGdkX3QgKikKKyAqIHBnZF9pbmRleCgpIGlzIHVzZWQgZ2V0IHRoZSBvZmZzZXQgaW50byB0aGUgcGdkIHBhZ2UncyBhcnJheSBvZiBwZ2RfdCdzOworICovCisjZGVmaW5lIHBnZF9vZmZzZXQobW0sIGFkZHJlc3MpICgobW0pLT5wZ2QgKyBwZ2RfaW5kZXgoYWRkcmVzcykpCisKKy8qCisgKiBhIHNob3J0Y3V0IHdoaWNoIGltcGxpZXMgdGhlIHVzZSBvZiB0aGUga2VybmVsJ3MgcGdkLCBpbnN0ZWFkCisgKiBvZiBhIHByb2Nlc3MncworICovCisjZGVmaW5lIHBnZF9vZmZzZXRfayhhZGRyZXNzKSBwZ2Rfb2Zmc2V0KCZpbml0X21tLCBhZGRyZXNzKQorCisvKgorICogVGhlICJwZ2RfeHh4KCkiIGZ1bmN0aW9ucyBoZXJlIGFyZSB0cml2aWFsIGZvciBhIGZvbGRlZCB0d28tbGV2ZWwKKyAqIHNldHVwOiB0aGUgcHVkIGlzIG5ldmVyIGJhZCwgYW5kIGEgcHVkIGFsd2F5cyBleGlzdHMgKGFzIGl0J3MgZm9sZGVkCisgKiBpbnRvIHRoZSBwZ2QgZW50cnkpCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHBnZF9ub25lKHBnZF90IHBnZCkJCXsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHBnZF9iYWQocGdkX3QgcGdkKQkJeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSBpbnQgcGdkX3ByZXNlbnQocGdkX3QgcGdkKQl7IHJldHVybiAxOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgcGdkX2NsZWFyKHBnZF90ICpwZ2QpCXsgfQorCisjZGVmaW5lIHBnZF9wb3B1bGF0ZShtbSwgcGdkLCBwdWQpCQlkbyB7IH0gd2hpbGUgKDApCisvKgorICogKHB1ZHMgYXJlIGZvbGRlZCBpbnRvIHBnZHMgc28gdGhpcyBkb2Vzbid0IGdldCBhY3R1YWxseSBjYWxsZWQsCisgKiBidXQgdGhlIGRlZmluZSBpcyBuZWVkZWQgZm9yIGEgZ2VuZXJpYyBpbmxpbmUgZnVuY3Rpb24uKQorICovCisjZGVmaW5lIHNldF9wZ2QocGdkcHRyLCBwZ2R2YWwpCQkJCVwKK2RvIHsJCQkJCQkJXAorCW1lbWNweSgocGdkcHRyKSwgJihwZ2R2YWwpLCBzaXplb2YocGdkX3QpKTsJXAorCWFzbSB2b2xhdGlsZSgiZGNmICVNMCIgOjogIlUiKCoocGdkcHRyKSkpOwlcCit9IHdoaWxlKDApCisKK3N0YXRpYyBpbmxpbmUgcHVkX3QgKnB1ZF9vZmZzZXQocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCXJldHVybiAocHVkX3QgKikgcGdkOworfQorCisjZGVmaW5lIHBnZF9wYWdlKHBnZCkJCQkJKHB1ZF9wYWdlKChwdWRfdCl7IHBnZCB9KSkKKyNkZWZpbmUgcGdkX3BhZ2Vfa2VybmVsKHBnZCkJCQkocHVkX3BhZ2Vfa2VybmVsKChwdWRfdCl7IHBnZCB9KSkKKworLyoKKyAqIGFsbG9jYXRpbmcgYW5kIGZyZWVpbmcgYSBwdWQgaXMgdHJpdmlhbDogdGhlIDEtZW50cnkgcHVkIGlzCisgKiBpbnNpZGUgdGhlIHBnZCwgc28gaGFzIG5vIGV4dHJhIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggaXQuCisgKi8KKyNkZWZpbmUgcHVkX2FsbG9jX29uZShtbSwgYWRkcmVzcykJCU5VTEwKKyNkZWZpbmUgcHVkX2ZyZWUoeCkJCQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBfX3B1ZF9mcmVlX3RsYih0bGIsIHgpCQkJZG8geyB9IHdoaWxlICgwKQorCisvKgorICogVGhlICJwdWRfeHh4KCkiIGZ1bmN0aW9ucyBoZXJlIGFyZSB0cml2aWFsIGZvciBhIGZvbGRlZCB0d28tbGV2ZWwKKyAqIHNldHVwOiB0aGUgcG1kIGlzIG5ldmVyIGJhZCwgYW5kIGEgcG1kIGFsd2F5cyBleGlzdHMgKGFzIGl0J3MgZm9sZGVkCisgKiBpbnRvIHRoZSBwdWQgZW50cnkpCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHB1ZF9ub25lKHB1ZF90IHB1ZCkJCXsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHB1ZF9iYWQocHVkX3QgcHVkKQkJeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSBpbnQgcHVkX3ByZXNlbnQocHVkX3QgcHVkKQl7IHJldHVybiAxOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgcHVkX2NsZWFyKHB1ZF90ICpwdWQpCXsgfQorCisjZGVmaW5lIHB1ZF9wb3B1bGF0ZShtbSwgcG1kLCBwdGUpCQlkbyB7IH0gd2hpbGUgKDApCisKKy8qCisgKiAocG1kcyBhcmUgZm9sZGVkIGludG8gcHVkcyBzbyB0aGlzIGRvZXNuJ3QgZ2V0IGFjdHVhbGx5IGNhbGxlZCwKKyAqIGJ1dCB0aGUgZGVmaW5lIGlzIG5lZWRlZCBmb3IgYSBnZW5lcmljIGlubGluZSBmdW5jdGlvbi4pCisgKi8KKyNkZWZpbmUgc2V0X3B1ZChwdWRwdHIsIHB1ZHZhbCkJCQlzZXRfcG1kKChwbWRfdCAqKShwdWRwdHIpLCAocG1kX3QpIHsgcHVkdmFsIH0pCisKKyNkZWZpbmUgcHVkX3BhZ2UocHVkKQkJCQkocG1kX3BhZ2UoKHBtZF90KXsgcHVkIH0pKQorI2RlZmluZSBwdWRfcGFnZV9rZXJuZWwocHVkKQkJCShwbWRfcGFnZV9rZXJuZWwoKHBtZF90KXsgcHVkIH0pKQorCisvKgorICogKHBtZHMgYXJlIGZvbGRlZCBpbnRvIHBnZHMgc28gdGhpcyBkb2Vzbid0IGdldCBhY3R1YWxseSBjYWxsZWQsCisgKiBidXQgdGhlIGRlZmluZSBpcyBuZWVkZWQgZm9yIGEgZ2VuZXJpYyBpbmxpbmUgZnVuY3Rpb24uKQorICovCitleHRlcm4gdm9pZCBfX3NldF9wbWQocG1kX3QgKnBtZHB0ciwgdW5zaWduZWQgbG9uZyBfX3BtZCk7CisKKyNkZWZpbmUgc2V0X3BtZChwbWRwdHIsIHBtZHZhbCkJCQlcCitkbyB7CQkJCQkJXAorCV9fc2V0X3BtZCgocG1kcHRyKSwgKHBtZHZhbCkuc3RlWzBdKTsJXAorfSB3aGlsZSgwKQorCisjZGVmaW5lIF9fcG1kX2luZGV4KGFkZHJlc3MpCQkJMAorCitzdGF0aWMgaW5saW5lIHBtZF90ICpwbWRfb2Zmc2V0KHB1ZF90ICpkaXIsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwlyZXR1cm4gKHBtZF90ICopIGRpciArIF9fcG1kX2luZGV4KGFkZHJlc3MpOworfQorCisjZGVmaW5lIHB0ZV9zYW1lKGEsIGIpCQkoKGEpLnB0ZSA9PSAoYikucHRlKQorI2RlZmluZSBwdGVfcGFnZSh4KQkJKG1lbV9tYXAgKyAoKHVuc2lnbmVkIGxvbmcpKCgoeCkucHRlID4+IFBBR0VfU0hJRlQpKSkpCisjZGVmaW5lIHB0ZV9ub25lKHgpCQkoISh4KS5wdGUpCisjZGVmaW5lIHB0ZV9wZm4oeCkJCSgodW5zaWduZWQgbG9uZykoKCh4KS5wdGUgPj4gUEFHRV9TSElGVCkpKQorI2RlZmluZSBwZm5fcHRlKHBmbiwgcHJvdCkJX19wdGUoKChwZm4pIDw8IFBBR0VfU0hJRlQpIHwgcGdwcm90X3ZhbChwcm90KSkKKyNkZWZpbmUgcGZuX3BtZChwZm4sIHByb3QpCV9fcG1kKCgocGZuKSA8PCBQQUdFX1NISUZUKSB8IHBncHJvdF92YWwocHJvdCkpCisKKyNkZWZpbmUgVk1BTExPQ19WTUFERFIoeCkJKCh1bnNpZ25lZCBsb25nKSAoeCkpCisKKyNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCisKKy8qCisgKiBjb250cm9sIGZsYWdzIGluIEFNUFIgcmVnaXN0ZXJzIGFuZCBUTEIgZW50cmllcworICovCisjZGVmaW5lIF9QQUdFX0JJVF9QUkVTRU5UCXhBTVBSeF9WX0JJVAorI2RlZmluZSBfUEFHRV9CSVRfV1AJCURBTVBSeF9XUF9CSVQKKyNkZWZpbmUgX1BBR0VfQklUX05PQ0FDSEUJeEFNUFJ4X0NfQklUCisjZGVmaW5lIF9QQUdFX0JJVF9TVVBFUgkJeEFNUFJ4X1NfQklUCisjZGVmaW5lIF9QQUdFX0JJVF9BQ0NFU1NFRAl4QU1QUnhfUkVTRVJWRUQ4X0JJVAorI2RlZmluZSBfUEFHRV9CSVRfRElSVFkJCXhBTVBSeF9NX0JJVAorI2RlZmluZSBfUEFHRV9CSVRfTk9UR0xPQkFMCXhBTVBSeF9OR19CSVQKKworI2RlZmluZSBfUEFHRV9QUkVTRU5UCQl4QU1QUnhfVgorI2RlZmluZSBfUEFHRV9XUAkJREFNUFJ4X1dQCisjZGVmaW5lIF9QQUdFX05PQ0FDSEUJCXhBTVBSeF9DCisjZGVmaW5lIF9QQUdFX1NVUEVSCQl4QU1QUnhfUworI2RlZmluZSBfUEFHRV9BQ0NFU1NFRAkJeEFNUFJ4X1JFU0VSVkVEOAkvKiBhY2Nlc3NlZCBpZiBzZXQgKi8KKyNkZWZpbmUgX1BBR0VfRElSVFkJCXhBTVBSeF9NCisjZGVmaW5lIF9QQUdFX05PVEdMT0JBTAkJeEFNUFJ4X05HCisKKyNkZWZpbmUgX1BBR0VfUkVTRVJWRURfTUFTSwkoeEFNUFJ4X1JFU0VSVkVEOCB8IHhBTVBSeF9SRVNFUlZFRDEzKQorCisjZGVmaW5lIF9QQUdFX0ZJTEUJCTB4MDAyCS8qIHNldDpwYWdlY2FjaGUgdW5zZXQ6c3dhcCAqLworI2RlZmluZSBfUEFHRV9QUk9UTk9ORQkJMHgwMDAJLyogSWYgbm90IHByZXNlbnQgKi8KKworI2RlZmluZSBfUEFHRV9DSEdfTUFTSwkJKFBURV9NQVNLIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9ESVJUWSkKKworI2RlZmluZSBfX1BHUFJPVF9CQVNFIFwKKwkoX1BBR0VfUFJFU0VOVCB8IHhBTVBSeF9TU18xNktiIHwgeEFNUFJ4X0QgfCBfUEFHRV9OT1RHTE9CQUwgfCBfUEFHRV9BQ0NFU1NFRCkKKworI2RlZmluZSBQQUdFX05PTkUJX19wZ3Byb3QoX1BBR0VfUFJPVE5PTkUgfCBfUEFHRV9BQ0NFU1NFRCkKKyNkZWZpbmUgUEFHRV9TSEFSRUQJX19wZ3Byb3QoX19QR1BST1RfQkFTRSkKKyNkZWZpbmUgUEFHRV9DT1BZCV9fcGdwcm90KF9fUEdQUk9UX0JBU0UgfCBfUEFHRV9XUCkKKyNkZWZpbmUgUEFHRV9SRUFET05MWQlfX3BncHJvdChfX1BHUFJPVF9CQVNFIHwgX1BBR0VfV1ApCisKKyNkZWZpbmUgX19QQUdFX0tFUk5FTAkJKF9fUEdQUk9UX0JBU0UgfCBfUEFHRV9TVVBFUiB8IF9QQUdFX0RJUlRZKQorI2RlZmluZSBfX1BBR0VfS0VSTkVMX05PQ0FDSEUJKF9fUEdQUk9UX0JBU0UgfCBfUEFHRV9TVVBFUiB8IF9QQUdFX0RJUlRZIHwgX1BBR0VfTk9DQUNIRSkKKyNkZWZpbmUgX19QQUdFX0tFUk5FTF9STwkoX19QR1BST1RfQkFTRSB8IF9QQUdFX1NVUEVSIHwgX1BBR0VfRElSVFkgfCBfUEFHRV9XUCkKKworI2RlZmluZSBNQUtFX0dMT0JBTCh4KSBfX3BncHJvdCgoeCkgJiB+X1BBR0VfTk9UR0xPQkFMKQorCisjZGVmaW5lIFBBR0VfS0VSTkVMCQlNQUtFX0dMT0JBTChfX1BBR0VfS0VSTkVMKQorI2RlZmluZSBQQUdFX0tFUk5FTF9STwkJTUFLRV9HTE9CQUwoX19QQUdFX0tFUk5FTF9STykKKyNkZWZpbmUgUEFHRV9LRVJORUxfTk9DQUNIRQlNQUtFX0dMT0JBTChfX1BBR0VfS0VSTkVMX05PQ0FDSEUpCisKKyNkZWZpbmUgX1BBR0VfVEFCTEUJCShfUEFHRV9QUkVTRU5UIHwgeEFNUFJ4X1NTXzE2S2IpCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKy8qCisgKiBUaGUgRlI0NTEgY2FuIGRvIGV4ZWN1dGUgcHJvdGVjdGlvbiBieSB2aXJ0dWUgb2YgaGF2aW5nIHNlcGFyYXRlIFRMQiBtaXNzIGhhbmRsZXJzIGZvcgorICogaW5zdHJ1Y3Rpb24gYWNjZXNzIGFuZCBmb3IgZGF0YSBhY2Nlc3MuIEhvd2V2ZXIsIHdlIGRvbid0IGhhdmUgZW5vdWdoIHJlc2VydmVkIGJpdHMgdG8gc2F5CisgKiAiZXhlY3V0ZSBvbmx5Iiwgc28gd2UgZG9uJ3QgYm90aGVyLiBJZiB5b3UgY2FuIHJlYWQgaXQsIHlvdSBjYW4gZXhlY3V0ZSBpdCBhbmQgdmljZSB2ZXJzYS4KKyAqLworI2RlZmluZSBfX1AwMDAJUEFHRV9OT05FCisjZGVmaW5lIF9fUDAwMQlQQUdFX1JFQURPTkxZCisjZGVmaW5lIF9fUDAxMAlQQUdFX0NPUFkKKyNkZWZpbmUgX19QMDExCVBBR0VfQ09QWQorI2RlZmluZSBfX1AxMDAJUEFHRV9SRUFET05MWQorI2RlZmluZSBfX1AxMDEJUEFHRV9SRUFET05MWQorI2RlZmluZSBfX1AxMTAJUEFHRV9DT1BZCisjZGVmaW5lIF9fUDExMQlQQUdFX0NPUFkKKworI2RlZmluZSBfX1MwMDAJUEFHRV9OT05FCisjZGVmaW5lIF9fUzAwMQlQQUdFX1JFQURPTkxZCisjZGVmaW5lIF9fUzAxMAlQQUdFX1NIQVJFRAorI2RlZmluZSBfX1MwMTEJUEFHRV9TSEFSRUQKKyNkZWZpbmUgX19TMTAwCVBBR0VfUkVBRE9OTFkKKyNkZWZpbmUgX19TMTAxCVBBR0VfUkVBRE9OTFkKKyNkZWZpbmUgX19TMTEwCVBBR0VfU0hBUkVECisjZGVmaW5lIF9fUzExMQlQQUdFX1NIQVJFRAorCisvKgorICogRGVmaW5lIHRoaXMgdG8gd2FybiBhYm91dCBrZXJuZWwgbWVtb3J5IGFjY2Vzc2VzIHRoYXQgYXJlCisgKiBkb25lIHdpdGhvdXQgYSAndmVyaWZ5X2FyZWEoVkVSSUZZX1dSSVRFLC4uKScKKyAqLworI3VuZGVmIFRFU1RfVkVSSUZZX0FSRUEKKworI2RlZmluZSBwdGVfcHJlc2VudCh4KQkocHRlX3ZhbCh4KSAmIF9QQUdFX1BSRVNFTlQpCisjZGVmaW5lIHB0ZV9jbGVhcihtbSxhZGRyLHhwKQlkbyB7IHNldF9wdGVfYXQobW0sIGFkZHIsIHhwLCBfX3B0ZSgwKSk7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgcG1kX25vbmUoeCkJKCFwbWRfdmFsKHgpKQorI2RlZmluZSBwbWRfcHJlc2VudCh4KQkocG1kX3ZhbCh4KSAmIF9QQUdFX1BSRVNFTlQpCisjZGVmaW5lCXBtZF9iYWQoeCkJKHBtZF92YWwoeCkgJiB4QU1QUnhfU1MpCisjZGVmaW5lIHBtZF9jbGVhcih4cCkJZG8geyBfX3NldF9wbWQoeHAsIDApOyB9IHdoaWxlKDApCisKKyNkZWZpbmUgcG1kX3BhZ2Vfa2VybmVsKHBtZCkgXAorCSgodW5zaWduZWQgbG9uZykgX192YShwbWRfdmFsKHBtZCkgJiBQQUdFX01BU0spKQorCisjaWZuZGVmIENPTkZJR19ESVNDT05USUdNRU0KKyNkZWZpbmUgcG1kX3BhZ2UocG1kKQkocGZuX3RvX3BhZ2UocG1kX3ZhbChwbWQpID4+IFBBR0VfU0hJRlQpKQorI2VuZGlmCisKKyNkZWZpbmUgcGFnZXNfdG9fbWIoeCkgKCh4KSA+PiAoMjAtUEFHRV9TSElGVCkpCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIG9ubHkgd29yayBpZiBwdGVfcHJlc2VudCgpIGlzIHRydWUuCisgKiBVbmRlZmluZWQgYmVoYXZpb3VyIGlmIG5vdC4uCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9yZWFkKHB0ZV90IHB0ZSkJCXsgcmV0dXJuICEoKHB0ZSkucHRlICYgX1BBR0VfU1VQRVIpOyB9CitzdGF0aWMgaW5saW5lIGludCBwdGVfZXhlYyhwdGVfdCBwdGUpCQl7IHJldHVybiAhKChwdGUpLnB0ZSAmIF9QQUdFX1NVUEVSKTsgfQorc3RhdGljIGlubGluZSBpbnQgcHRlX2RpcnR5KHB0ZV90IHB0ZSkJCXsgcmV0dXJuIChwdGUpLnB0ZSAmIF9QQUdFX0RJUlRZOyB9CitzdGF0aWMgaW5saW5lIGludCBwdGVfeW91bmcocHRlX3QgcHRlKQkJeyByZXR1cm4gKHB0ZSkucHRlICYgX1BBR0VfQUNDRVNTRUQ7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV93cml0ZShwdGVfdCBwdGUpCQl7IHJldHVybiAhKChwdGUpLnB0ZSAmIF9QQUdFX1dQKTsgfQorCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9yZHByb3RlY3QocHRlX3QgcHRlKQl7IChwdGUpLnB0ZSB8PSBfUEFHRV9TVVBFUjsgcmV0dXJuIHB0ZTsgfQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfZXhwcm90ZWN0KHB0ZV90IHB0ZSkJeyAocHRlKS5wdGUgfD0gX1BBR0VfU1VQRVI7IHJldHVybiBwdGU7IH0KK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rY2xlYW4ocHRlX3QgcHRlKQl7IChwdGUpLnB0ZSAmPSB+X1BBR0VfRElSVFk7IHJldHVybiBwdGU7IH0KK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rb2xkKHB0ZV90IHB0ZSkJeyAocHRlKS5wdGUgJj0gfl9QQUdFX0FDQ0VTU0VEOyByZXR1cm4gcHRlOyB9CitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV93cnByb3RlY3QocHRlX3QgcHRlKQl7IChwdGUpLnB0ZSB8PSBfUEFHRV9XUDsgcmV0dXJuIHB0ZTsgfQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtyZWFkKHB0ZV90IHB0ZSkJeyAocHRlKS5wdGUgJj0gfl9QQUdFX1NVUEVSOyByZXR1cm4gcHRlOyB9CitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta2V4ZWMocHRlX3QgcHRlKQl7IChwdGUpLnB0ZSAmPSB+X1BBR0VfU1VQRVI7IHJldHVybiBwdGU7IH0KK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rZGlydHkocHRlX3QgcHRlKQl7IChwdGUpLnB0ZSB8PSBfUEFHRV9ESVJUWTsgcmV0dXJuIHB0ZTsgfQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt5b3VuZyhwdGVfdCBwdGUpCXsgKHB0ZSkucHRlIHw9IF9QQUdFX0FDQ0VTU0VEOyByZXR1cm4gcHRlOyB9CitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSkJeyAocHRlKS5wdGUgJj0gfl9QQUdFX1dQOyByZXR1cm4gcHRlOyB9CisKK3N0YXRpYyBpbmxpbmUgaW50IHB0ZXBfdGVzdF9hbmRfY2xlYXJfZGlydHkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApCit7CisJaW50IGkgPSB0ZXN0X2FuZF9jbGVhcl9iaXQoX1BBR0VfQklUX0RJUlRZLCBwdGVwKTsKKwlhc20gdm9sYXRpbGUoImRjZiAlTTAiIDo6ICJVIigqcHRlcCkpOworCXJldHVybiBpOworfQorCitzdGF0aWMgaW5saW5lIGludCBwdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKQoreworCWludCBpID0gdGVzdF9hbmRfY2xlYXJfYml0KF9QQUdFX0JJVF9BQ0NFU1NFRCwgcHRlcCk7CisJYXNtIHZvbGF0aWxlKCJkY2YgJU0wIiA6OiAiVSIoKnB0ZXApKTsKKwlyZXR1cm4gaTsKK30KKworc3RhdGljIGlubGluZSBwdGVfdCBwdGVwX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApCit7CisJdW5zaWduZWQgbG9uZyB4ID0geGNoZygmcHRlcC0+cHRlLCAwKTsKKwlhc20gdm9sYXRpbGUoImRjZiAlTTAiIDo6ICJVIigqcHRlcCkpOworCXJldHVybiBfX3B0ZSh4KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHB0ZXBfc2V0X3dycHJvdGVjdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCkKK3sKKwlzZXRfYml0KF9QQUdFX0JJVF9XUCwgcHRlcCk7CisJYXNtIHZvbGF0aWxlKCJkY2YgJU0wIiA6OiAiVSIoKnB0ZXApKTsKK30KKworLyoKKyAqIENvbnZlcnNpb24gZnVuY3Rpb25zOiBjb252ZXJ0IGEgcGFnZSBhbmQgcHJvdGVjdGlvbiB0byBhIHBhZ2UgZW50cnksCisgKiBhbmQgYSBwYWdlIGVudHJ5IGFuZCBwYWdlIGRpcmVjdG9yeSB0byB0aGUgcGFnZSB0aGV5IHJlZmVyIHRvLgorICovCisKKyNkZWZpbmUgbWtfcHRlKHBhZ2UsIHBncHJvdCkJcGZuX3B0ZShwYWdlX3RvX3BmbihwYWdlKSwgKHBncHJvdCkpCisjZGVmaW5lIG1rX3B0ZV9odWdlKGVudHJ5KQkoKGVudHJ5KS5wdGVfbG93IHw9IF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9QU0UpCisKKy8qIFRoaXMgdGFrZXMgYSBwaHlzaWNhbCBwYWdlIGFkZHJlc3MgdGhhdCBpcyB1c2VkIGJ5IHRoZSByZW1hcHBpbmcgZnVuY3Rpb25zICovCisjZGVmaW5lIG1rX3B0ZV9waHlzKHBoeXNwYWdlLCBwZ3Byb3QpCXBmbl9wdGUoKHBoeXNwYWdlKSA+PiBQQUdFX1NISUZULCBwZ3Byb3QpCisKK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21vZGlmeShwdGVfdCBwdGUsIHBncHJvdF90IG5ld3Byb3QpCit7CisJcHRlLnB0ZSAmPSBfUEFHRV9DSEdfTUFTSzsKKwlwdGUucHRlIHw9IHBncHJvdF92YWwobmV3cHJvdCk7CisJcmV0dXJuIHB0ZTsKK30KKworI2RlZmluZSBwYWdlX3B0ZShwYWdlKQlwYWdlX3B0ZV9wcm90KChwYWdlKSwgX19wZ3Byb3QoMCkpCisKKy8qIHRvIGZpbmQgYW4gZW50cnkgaW4gYSBwYWdlLXRhYmxlLWRpcmVjdG9yeS4gKi8KKyNkZWZpbmUgcGdkX2luZGV4KGFkZHJlc3MpICgoKGFkZHJlc3MpID4+IFBHRElSX1NISUZUKSAmIChQVFJTX1BFUl9QR0QgLSAxKSkKKyNkZWZpbmUgcGdkX2luZGV4X2soYWRkcikgcGdkX2luZGV4KGFkZHIpCisKKy8qIEZpbmQgYW4gZW50cnkgaW4gdGhlIGJvdHRvbS1sZXZlbCBwYWdlIHRhYmxlLi4gKi8KKyNkZWZpbmUgX19wdGVfaW5kZXgoYWRkcmVzcykgKCgoYWRkcmVzcykgPj4gUEFHRV9TSElGVCkgJiAoUFRSU19QRVJfUFRFIC0gMSkpCisKKy8qCisgKiB0aGUgcHRlIHBhZ2UgY2FuIGJlIHRob3VnaHQgb2YgYW4gYXJyYXkgbGlrZSB0aGlzOiBwdGVfdFtQVFJTX1BFUl9QVEVdCisgKgorICogdGhpcyBtYWNybyByZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgZW50cnkgaW4gdGhlIHB0ZSBwYWdlIHdoaWNoIHdvdWxkCisgKiBjb250cm9sIHRoZSBnaXZlbiB2aXJ0dWFsIGFkZHJlc3MKKyAqLworI2RlZmluZSBwdGVfaW5kZXgoYWRkcmVzcykgXAorCQkoKChhZGRyZXNzKSA+PiBQQUdFX1NISUZUKSAmIChQVFJTX1BFUl9QVEUgLSAxKSkKKyNkZWZpbmUgcHRlX29mZnNldF9rZXJuZWwoZGlyLCBhZGRyZXNzKSBcCisJKChwdGVfdCAqKSBwbWRfcGFnZV9rZXJuZWwoKihkaXIpKSArICBwdGVfaW5kZXgoYWRkcmVzcykpCisKKyNpZiBkZWZpbmVkKENPTkZJR19ISUdIUFRFKQorI2RlZmluZSBwdGVfb2Zmc2V0X21hcChkaXIsIGFkZHJlc3MpIFwKKwkoKHB0ZV90ICopa21hcF9hdG9taWMocG1kX3BhZ2UoKihkaXIpKSxLTV9QVEUwKSArIHB0ZV9pbmRleChhZGRyZXNzKSkKKyNkZWZpbmUgcHRlX29mZnNldF9tYXBfbmVzdGVkKGRpciwgYWRkcmVzcykgXAorCSgocHRlX3QgKilrbWFwX2F0b21pYyhwbWRfcGFnZSgqKGRpcikpLEtNX1BURTEpICsgcHRlX2luZGV4KGFkZHJlc3MpKQorI2RlZmluZSBwdGVfdW5tYXAocHRlKSBrdW5tYXBfYXRvbWljKHB0ZSwgS01fUFRFMCkKKyNkZWZpbmUgcHRlX3VubWFwX25lc3RlZChwdGUpIGt1bm1hcF9hdG9taWMoKHB0ZSksIEtNX1BURTEpCisjZWxzZQorI2RlZmluZSBwdGVfb2Zmc2V0X21hcChkaXIsIGFkZHJlc3MpIFwKKwkoKHB0ZV90ICopcGFnZV9hZGRyZXNzKHBtZF9wYWdlKCooZGlyKSkpICsgcHRlX2luZGV4KGFkZHJlc3MpKQorI2RlZmluZSBwdGVfb2Zmc2V0X21hcF9uZXN0ZWQoZGlyLCBhZGRyZXNzKSBwdGVfb2Zmc2V0X21hcCgoZGlyKSwgKGFkZHJlc3MpKQorI2RlZmluZSBwdGVfdW5tYXAocHRlKSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHB0ZV91bm1hcF9uZXN0ZWQocHRlKSBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKworLyoKKyAqIEhhbmRsZSBzd2FwIGFuZCBmaWxlIGVudHJpZXMKKyAqIC0gdGhlIFBURSBpcyBlbmNvZGVkIGluIHRoZSBmb2xsb3dpbmcgZm9ybWF0OgorICoJYml0IDA6CQlNdXN0IGJlIDAgKCFfUEFHRV9QUkVTRU5UKQorICoJYml0IDE6CQlUeXBlOiAwIGZvciBzd2FwLCAxIGZvciBmaWxlIChfUEFHRV9GSUxFKQorICoJYml0cyAyLTc6CVN3YXAgdHlwZQorICoJYml0cyA4LTMxOglTd2FwIG9mZnNldAorICoJYml0cyAyLTMxOglGaWxlIHBnb2ZmCisgKi8KKyNkZWZpbmUgX19zd3BfdHlwZSh4KQkJCSgoKHgpLnZhbCA+PiAyKSAmIDB4MWYpCisjZGVmaW5lIF9fc3dwX29mZnNldCh4KQkJCSgoeCkudmFsID4+IDgpCisjZGVmaW5lIF9fc3dwX2VudHJ5KHR5cGUsIG9mZnNldCkJKChzd3BfZW50cnlfdCkgeyAoKHR5cGUpIDw8IDIpIHwgKChvZmZzZXQpIDw8IDgpIH0pCisjZGVmaW5lIF9fcHRlX3RvX3N3cF9lbnRyeShwdGUpCQkoKHN3cF9lbnRyeV90KSB7IChwdGUpLnB0ZSB9KQorI2RlZmluZSBfX3N3cF9lbnRyeV90b19wdGUoeCkJCSgocHRlX3QpIHsgKHgpLnZhbCB9KQorCitzdGF0aWMgaW5saW5lIGludCBwdGVfZmlsZShwdGVfdCBwdGUpCit7CisJcmV0dXJuIHB0ZS5wdGUgJiBfUEFHRV9GSUxFOworfQorCisjZGVmaW5lIFBURV9GSUxFX01BWF9CSVRTCTI5CisKKyNkZWZpbmUgcHRlX3RvX3Bnb2ZmKFBURSkJKChQVEUpLnB0ZSA+PiAyKQorI2RlZmluZSBwZ29mZl90b19wdGUob2ZmKQlfX3B0ZSgob2ZmKSA8PCAyIHwgX1BBR0VfRklMRSkKKworLyogTmVlZHMgdG8gYmUgZGVmaW5lZCBoZXJlIGFuZCBub3QgaW4gbGludXgvbW0uaCwgYXMgaXQgaXMgYXJjaCBkZXBlbmRlbnQgKi8KKyNkZWZpbmUgUGFnZVNraXAocGFnZSkJCSgwKQorI2RlZmluZSBrZXJuX2FkZHJfdmFsaWQoYWRkcikJKDEpCisKKyNkZWZpbmUgaW9fcmVtYXBfcGFnZV9yYW5nZSh2bWEsIHZhZGRyLCBwYWRkciwgc2l6ZSwgcHJvdCkJCVwKKwkJcmVtYXBfcGZuX3JhbmdlKHZtYSwgdmFkZHIsIChwYWRkcikgPj4gUEFHRV9TSElGVCwgc2l6ZSwgcHJvdCkKKworI2RlZmluZSBpb19yZW1hcF9wZm5fcmFuZ2Uodm1hLCB2YWRkciwgcGZuLCBzaXplLCBwcm90KQkJXAorCQlyZW1hcF9wZm5fcmFuZ2Uodm1hLCB2YWRkciwgcGZuLCBzaXplLCBwcm90KQorCisjZGVmaW5lIE1LX0lPU1BBQ0VfUEZOKHNwYWNlLCBwZm4pCShwZm4pCisjZGVmaW5lIEdFVF9JT1NQQUNFKHBmbikJCTAKKyNkZWZpbmUgR0VUX1BGTihwZm4pCQkJKHBmbikKKworI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX1RFU1RfQU5EX0NMRUFSX1lPVU5HCisjZGVmaW5lIF9fSEFWRV9BUkNIX1BURVBfVEVTVF9BTkRfQ0xFQVJfRElSVFkKKyNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFUF9HRVRfQU5EX0NMRUFSCisjZGVmaW5lIF9fSEFWRV9BUkNIX1BURVBfU0VUX1dSUFJPVEVDVAorI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVfU0FNRQorI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BndGFibGUuaD4KKworLyoKKyAqIHByZWxvYWQgaW5mb3JtYXRpb24gYWJvdXQgYSBuZXdseSBpbnN0YW50aWF0ZWQgUFRFIGludG8gdGhlIFNDUjAvU0NSMSBQR0UgY2FjaGUKKyAqLworc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgcHRlKQoreworCXVuc2lnbmVkIGxvbmcgYW1wcjsKKwlwZ2RfdCAqcGdlID0gcGdkX29mZnNldChjdXJyZW50LT5tbSwgYWRkcmVzcyk7CisJcHVkX3QgKnB1ZSA9IHB1ZF9vZmZzZXQocGdlLCBhZGRyZXNzKTsKKwlwbWRfdCAqcG1lID0gcG1kX29mZnNldChwdWUsIGFkZHJlc3MpOworCisJYW1wciA9IHBtZS0+c3RlWzBdICYgMHhmZmZmZmYwMDsKKwlhbXByIHw9IHhBTVBSeF9MIHwgeEFNUFJ4X1NTXzE2S2IgfCB4QU1QUnhfUyB8IHhBTVBSeF9DIHwgeEFNUFJ4X1Y7CisKKwlhc20gdm9sYXRpbGUoIm1vdmdzICUwLHNjcjBcbiIKKwkJICAgICAibW92Z3MgJTAsc2NyMVxuIgorCQkgICAgICJtb3ZncyAlMSxkYW1wcjRcbiIKKwkJICAgICAibW92Z3MgJTEsZGFtcHI1XG4iCisJCSAgICAgOgorCQkgICAgIDogInIiKGFkZHJlc3MpLCAiciIoYW1wcikKKwkJICAgICApOworfQorCisjaWZkZWYgQ09ORklHX1BST0NfRlMKK2V4dGVybiBjaGFyICpwcm9jX3BpZF9zdGF0dXNfZnJ2X2N4bnIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGNoYXIgKmJ1ZmZlcik7CisjZW5kaWYKKworZXh0ZXJuIHZvaWQgX19pbml0IHBndGFibGVfY2FjaGVfaW5pdCh2b2lkKTsKKworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKyNlbmRpZiAvKiAhQ09ORklHX01NVSAqLworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworZXh0ZXJuIHZvaWQgX19pbml0IHBhZ2luZ19pbml0KHZvaWQpOworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKworI2VuZGlmIC8qIF9BU01fUEdUQUJMRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvcG9sbC5oIGIvaW5jbHVkZS9hc20tZnJ2L3BvbGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2JjZDYwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tZnJ2L3BvbGwuaApAQCAtMCwwICsxLDIzIEBACisjaWZuZGVmIF9BU01fUE9MTF9ICisjZGVmaW5lIF9BU01fUE9MTF9ICisKKyNkZWZpbmUgUE9MTElOCQkgIDEKKyNkZWZpbmUgUE9MTFBSSQkJICAyCisjZGVmaW5lIFBPTExPVVQJCSAgNAorI2RlZmluZSBQT0xMRVJSCQkgIDgKKyNkZWZpbmUgUE9MTEhVUAkJIDE2CisjZGVmaW5lIFBPTExOVkFMCSAzMgorI2RlZmluZSBQT0xMUkROT1JNCSA2NAorI2RlZmluZSBQT0xMV1JOT1JNCVBPTExPVVQKKyNkZWZpbmUgUE9MTFJEQkFORAkxMjgKKyNkZWZpbmUgUE9MTFdSQkFORAkyNTYKKyNkZWZpbmUgUE9MTE1TRwkJMHgwNDAwCisKK3N0cnVjdCBwb2xsZmQgeworCWludCBmZDsKKwlzaG9ydCBldmVudHM7CisJc2hvcnQgcmV2ZW50czsKK307CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvcG9zaXhfdHlwZXMuaCBiL2luY2x1ZGUvYXNtLWZydi9wb3NpeF90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczYzJiYTgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1mcnYvcG9zaXhfdHlwZXMuaApAQCAtMCwwICsxLDY2IEBACisjaWZuZGVmIF9BU01fUE9TSVhfVFlQRVNfSAorI2RlZmluZSBfQVNNX1BPU0lYX1RZUEVTX0gKKworLyoKKyAqIFRoaXMgZmlsZSBpcyBnZW5lcmFsbHkgdXNlZCBieSB1c2VyLWxldmVsIHNvZnR3YXJlLCBzbyB5b3UgbmVlZCB0bworICogYmUgYSBsaXR0bGUgY2FyZWZ1bCBhYm91dCBuYW1lc3BhY2UgcG9sbHV0aW9uIGV0Yy4gIEFsc28sIHdlIGNhbm5vdAorICogYXNzdW1lIEdDQyBpcyBiZWluZyB1c2VkLgorICovCisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZwlfX2tlcm5lbF9pbm9fdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJX19rZXJuZWxfbW9kZV90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAlfX2tlcm5lbF9ubGlua190OwordHlwZWRlZiBsb25nCQlfX2tlcm5lbF9vZmZfdDsKK3R5cGVkZWYgaW50CQlfX2tlcm5lbF9waWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJX19rZXJuZWxfaXBjX3BpZF90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAlfX2tlcm5lbF91aWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJX19rZXJuZWxfZ2lkX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludAlfX2tlcm5lbF9zaXplX3Q7Cit0eXBlZGVmIGludAkJX19rZXJuZWxfc3NpemVfdDsKK3R5cGVkZWYgaW50CQlfX2tlcm5lbF9wdHJkaWZmX3Q7Cit0eXBlZGVmIGxvbmcJCV9fa2VybmVsX3RpbWVfdDsKK3R5cGVkZWYgbG9uZwkJX19rZXJuZWxfc3VzZWNvbmRzX3Q7Cit0eXBlZGVmIGxvbmcJCV9fa2VybmVsX2Nsb2NrX3Q7Cit0eXBlZGVmIGludAkJX19rZXJuZWxfdGltZXJfdDsKK3R5cGVkZWYgaW50CQlfX2tlcm5lbF9jbG9ja2lkX3Q7Cit0eXBlZGVmIGludAkJX19rZXJuZWxfZGFkZHJfdDsKK3R5cGVkZWYgY2hhciAqCQlfX2tlcm5lbF9jYWRkcl90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAlfX2tlcm5lbF91aWQxNl90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAlfX2tlcm5lbF9naWQxNl90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQJX19rZXJuZWxfdWlkMzJfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50CV9fa2VybmVsX2dpZDMyX3Q7CisKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJX19rZXJuZWxfb2xkX3VpZF90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAlfX2tlcm5lbF9vbGRfZ2lkX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CV9fa2VybmVsX29sZF9kZXZfdDsKKworI2lmZGVmIF9fR05VQ19fCit0eXBlZGVmIGxvbmcgbG9uZwlfX2tlcm5lbF9sb2ZmX3Q7CisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgeworI2lmIGRlZmluZWQoX19LRVJORUxfXykgfHwgZGVmaW5lZChfX1VTRV9BTEwpCisJaW50CXZhbFsyXTsKKyNlbHNlIC8qICFkZWZpbmVkKF9fS0VSTkVMX18pICYmICFkZWZpbmVkKF9fVVNFX0FMTCkgKi8KKwlpbnQJX192YWxbMl07CisjZW5kaWYgLyogIWRlZmluZWQoX19LRVJORUxfXykgJiYgIWRlZmluZWQoX19VU0VfQUxMKSAqLworfSBfX2tlcm5lbF9mc2lkX3Q7CisKKyNpZiBkZWZpbmVkKF9fS0VSTkVMX18pIHx8ICFkZWZpbmVkKF9fR0xJQkNfXykgfHwgKF9fR0xJQkNfXyA8IDIpCisKKyN1bmRlZglfX0ZEX1NFVAorI2RlZmluZQlfX0ZEX1NFVChkLCBzZXQpCSgoc2V0KS0+ZmRzX2JpdHNbX19GREVMVChkKV0gfD0gX19GRE1BU0soZCkpCisKKyN1bmRlZglfX0ZEX0NMUgorI2RlZmluZQlfX0ZEX0NMUihkLCBzZXQpCSgoc2V0KS0+ZmRzX2JpdHNbX19GREVMVChkKV0gJj0gfl9fRkRNQVNLKGQpKQorCisjdW5kZWYJX19GRF9JU1NFVAorI2RlZmluZQlfX0ZEX0lTU0VUKGQsIHNldCkJKCEhKChzZXQpLT5mZHNfYml0c1tfX0ZERUxUKGQpXSAmIF9fRkRNQVNLKGQpKSkKKworI3VuZGVmCV9fRkRfWkVSTworI2RlZmluZSBfX0ZEX1pFUk8oZmRzZXRwKSAobWVtc2V0IChmZHNldHAsIDAsIHNpemVvZigqKGZkX3NldCAqKWZkc2V0cCkpKQorCisjZW5kaWYgLyogZGVmaW5lZChfX0tFUk5FTF9fKSB8fCAhZGVmaW5lZChfX0dMSUJDX18pIHx8IChfX0dMSUJDX18gPCAyKSAqLworCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L3Byb2Nlc3Nvci5oIGIvaW5jbHVkZS9hc20tZnJ2L3Byb2Nlc3Nvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyMjhjMTgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1mcnYvcHJvY2Vzc29yLmgKQEAgLTAsMCArMSwxNTMgQEAKKy8qIHByb2Nlc3Nvci5oOiBGUlYgcHJvY2Vzc29yIGRlZmluaXRpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzIFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgX0FTTV9QUk9DRVNTT1JfSAorI2RlZmluZSBfQVNNX1BST0NFU1NPUl9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxhc20vbWVtLWxheW91dC5oPgorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworLyoKKyAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgbWFjcm8gdGhhdCByZXR1cm5zIGN1cnJlbnQKKyAqIGluc3RydWN0aW9uIHBvaW50ZXIgKCJwcm9ncmFtIGNvdW50ZXIiKS4KKyAqLworI2RlZmluZSBjdXJyZW50X3RleHRfYWRkcigpICh7IF9fbGFiZWxfXyBfbDsgX2w6ICYmX2w7fSkKKworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KKyNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgorI2luY2x1ZGUgPGFzbS9mcHUuaD4KKyNpbmNsdWRlIDxhc20vcmVnaXN0ZXJzLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS9jdXJyZW50Lmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CisKKy8qIEZvcndhcmQgZGVjbGFyYXRpb24sIGEgc3RyYW5nZSBDIHRoaW5nICovCitzdHJ1Y3QgdGFza19zdHJ1Y3Q7CisKKy8qCisgKiAgQ1BVIHR5cGUgYW5kIGhhcmR3YXJlIGJ1ZyBmbGFncy4gS2VwdCBzZXBhcmF0ZWx5IGZvciBlYWNoIENQVS4KKyAqLworc3RydWN0IGNwdWluZm9fZnJ2IHsKKyNpZmRlZiBDT05GSUdfTU1VCisJdW5zaWduZWQgbG9uZwkqcGdkX3F1aWNrOworCXVuc2lnbmVkIGxvbmcJKnB0ZV9xdWljazsKKwl1bnNpZ25lZCBsb25nCXBndGFibGVfY2FjaGVfc3o7CisjZW5kaWYKK30gX19jYWNoZWxpbmVfYWxpZ25lZDsKKworZXh0ZXJuIHN0cnVjdCBjcHVpbmZvX2ZydiBfX25vbmdwcmVsYnNzIGJvb3RfY3B1X2RhdGE7CisKKyNkZWZpbmUgY3B1X2RhdGEJCSgmYm9vdF9jcHVfZGF0YSkKKyNkZWZpbmUgY3VycmVudF9jcHVfZGF0YQlib290X2NwdV9kYXRhCisKKy8qCisgKiBCdXMgdHlwZXMKKyAqLworI2RlZmluZSBFSVNBX2J1cyAwCisjZGVmaW5lIE1DQV9idXMgMAorCitzdHJ1Y3QgdGhyZWFkX3N0cnVjdCB7CisJc3RydWN0IHB0X3JlZ3MJCSpmcmFtZTsJCS8qIFtHUjI4XSBleGNlcHRpb24gZnJhbWUgcHRyIGZvciB0aGlzIHRocmVhZCAqLworCXN0cnVjdCB0YXNrX3N0cnVjdAkqY3VycjsJCS8qIFtHUjI5XSBjdXJyZW50IHBvaW50ZXIgZm9yIHRoaXMgdGhyZWFkICovCisJdW5zaWduZWQgbG9uZwkJc3A7CQkvKiBbR1IxIF0ga2VybmVsIHN0YWNrIHBvaW50ZXIgKi8KKwl1bnNpZ25lZCBsb25nCQlmcDsJCS8qIFtHUjIgXSBrZXJuZWwgZnJhbWUgcG9pbnRlciAqLworCXVuc2lnbmVkIGxvbmcJCWxyOwkJLyogbGluayByZWdpc3RlciAqLworCXVuc2lnbmVkIGxvbmcJCXBjOwkJLyogcHJvZ3JhbSBjb3VudGVyICovCisJdW5zaWduZWQgbG9uZwkJZ3JbMTJdOwkJLyogW0dSMTYtR1IyN10gKi8KKwl1bnNpZ25lZCBsb25nCQlzY2hlZF9scjsJLyogTFIgZnJvbSBzY2hlZHVsZSgpICovCisKKwl1bmlvbiB7CisJCXN0cnVjdCBwdF9yZWdzCQkqZnJhbWUwOwkvKiB0b3AgKHVzZXIpIHN0YWNrIGZyYW1lICovCisJCXN0cnVjdCB1c2VyX2NvbnRleHQJKnVzZXI7CQkvKiB1c2Vyc3BhY2UgY29udGV4dCAqLworCX07Cit9IF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKTsKKworZXh0ZXJuIHN0cnVjdCBwdF9yZWdzICpfX2tlcm5lbF9mcmFtZTBfcHRyOworZXh0ZXJuIHN0cnVjdCB0YXNrX3N0cnVjdCAqX19rZXJuZWxfY3VycmVudF90YXNrOworCisjZW5kaWYKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNkZWZpbmUgSU5JVF9USFJFQURfRlJBTUUwIFwKKwkoKHN0cnVjdCBwdF9yZWdzICopIFwKKwkoc2l6ZW9mKGluaXRfc3RhY2spICsgKHVuc2lnbmVkIGxvbmcpIGluaXRfc3RhY2sgLSBzaXplb2Yoc3RydWN0IHVzZXJfY29udGV4dCkpKQorCisjZGVmaW5lIElOSVRfVEhSRUFEIHsJCQkJXAorCU5VTEwsCQkJCQlcCisJKHN0cnVjdCB0YXNrX3N0cnVjdCAqKSBpbml0X3N0YWNrLAlcCisJMCwgMCwgMCwgMCwJCQkJXAorCXsgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9LAlcCisJMCwJCQkJCVwKKwl7IElOSVRfVEhSRUFEX0ZSQU1FMCB9LAkJCVwKK30KKworLyoKKyAqIGRvIG5lY2Vzc2FyeSBzZXR1cCB0byBzdGFydCB1cCBhIG5ld2x5IGV4ZWN1dGVkIHRocmVhZC4KKyAqIC0gbmVlZCB0byBkaXNjYXJkIHRoZSBmcmFtZSBzdGFja2VkIGJ5IGluaXQoKSBpbnZva2luZyB0aGUgZXhlY3ZlIHN5c2NhbGwKKyAqLworI2RlZmluZSBzdGFydF90aHJlYWQoX3JlZ3MsIF9wYywgX3VzcCkJCQlcCitkbyB7CQkJCQkJCVwKKwlzZXRfZnMoVVNFUl9EUyk7IC8qIHJlYWRzIGZyb20gdXNlciBzcGFjZSAqLwlcCisJX19mcmFtZSA9IF9fa2VybmVsX2ZyYW1lMF9wdHI7CQkJXAorCV9fZnJhbWUtPnBjCT0gKF9wYyk7CQkJXAorCV9fZnJhbWUtPnBzcgkmPSB+UFNSX1M7CQkJXAorCV9fZnJhbWUtPnNwCT0gKF91c3ApOwkJCVwKK30gd2hpbGUoMCkKKworZXh0ZXJuIHZvaWQgcHJlcGFyZV90b19jb3B5KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKKworLyogRnJlZSBhbGwgcmVzb3VyY2VzIGhlbGQgYnkgYSB0aHJlYWQuICovCitzdGF0aWMgaW5saW5lIHZvaWQgcmVsZWFzZV90aHJlYWQoc3RydWN0IHRhc2tfc3RydWN0ICpkZWFkX3Rhc2spCit7Cit9CisKK2V4dGVybiBhc21saW5rYWdlIGludCBrZXJuZWxfdGhyZWFkKGludCAoKmZuKSh2b2lkICopLCB2b2lkICogYXJnLCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKK2V4dGVybiBhc21saW5rYWdlIHZvaWQgc2F2ZV91c2VyX3JlZ3Moc3RydWN0IHVzZXJfY29udGV4dCAqdGFyZ2V0KTsKK2V4dGVybiBhc21saW5rYWdlIHZvaWQgKnJlc3RvcmVfdXNlcl9yZWdzKGNvbnN0IHN0cnVjdCB1c2VyX2NvbnRleHQgKnRhcmdldCwgLi4uKTsKKworI2RlZmluZSBjb3B5X3NlZ21lbnRzKHRzaywgbW0pCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHJlbGVhc2Vfc2VnbWVudHMobW0pCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZvcmdldF9zZWdtZW50cygpCQlkbyB7IH0gd2hpbGUgKDApCisKKy8qCisgKiBGcmVlIGN1cnJlbnQgdGhyZWFkIGRhdGEgc3RydWN0dXJlcyBldGMuLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgZXhpdF90aHJlYWQodm9pZCkKK3sKK30KKworLyoKKyAqIFJldHVybiBzYXZlZCBQQyBvZiBhIGJsb2NrZWQgdGhyZWFkLgorICovCitleHRlcm4gdW5zaWduZWQgbG9uZyB0aHJlYWRfc2F2ZWRfcGMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spOworCit1bnNpZ25lZCBsb25nIGdldF93Y2hhbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApOworCisjZGVmaW5lCUtTVEtfRUlQKHRzaykJKCh0c2spLT50aHJlYWQuZnJhbWUwLT5wYykKKyNkZWZpbmUJS1NUS19FU1AodHNrKQkoKHRzayktPnRocmVhZC5mcmFtZTAtPnNwKQorCisvKiBBbGxvY2F0aW9uIGFuZCBmcmVlaW5nIG9mIGJhc2ljIHRhc2sgcmVzb3VyY2VzLiAqLworZXh0ZXJuIHN0cnVjdCB0YXNrX3N0cnVjdCAqYWxsb2NfdGFza19zdHJ1Y3Qodm9pZCk7CitleHRlcm4gdm9pZCBmcmVlX3Rhc2tfc3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7CisKKyNkZWZpbmUgY3B1X3JlbGF4KCkgICAgZG8geyB9IHdoaWxlICgwKQorCisvKiBkYXRhIGNhY2hlIHByZWZldGNoICovCisjZGVmaW5lIEFSQ0hfSEFTX1BSRUZFVENICitzdGF0aWMgaW5saW5lIHZvaWQgcHJlZmV0Y2goY29uc3Qgdm9pZCAqeCkKK3sKKwlhc20gdm9sYXRpbGUoImRjcGwgJTAsZ3IwLCMwIiA6IDogInIiKHgpKTsKK30KKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworI2VuZGlmIC8qIF9BU01fUFJPQ0VTU09SX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9wdHJhY2UuaCBiL2luY2x1ZGUvYXNtLWZydi9wdHJhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmNjZTA3MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWZydi9wdHJhY2UuaApAQCAtMCwwICsxLDg2IEBACisvKiBwdHJhY2UuaDogcHRyYWNlKCkgcmVsZXZhbnQgZGVmaW5pdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpZm5kZWYgX0FTTV9QVFJBQ0VfSAorI2RlZmluZSBfQVNNX1BUUkFDRV9ICisKKyNpbmNsdWRlIDxhc20vcmVnaXN0ZXJzLmg+CisKKyNkZWZpbmUgaW5fc3lzY2FsbChyZWdzKSAoKChyZWdzKS0+dGJyICYgVEJSX1RUKSA9PSBUQlJfVFRfVFJBUDApCisKKworI2RlZmluZSBQVF9QU1IJCTAKKyNkZWZpbmUJUFRfSVNSCQkxCisjZGVmaW5lIFBUX0NDUgkJMgorI2RlZmluZSBQVF9DQ0NSCQkzCisjZGVmaW5lIFBUX0xSCQk0CisjZGVmaW5lIFBUX0xDUgkJNQorI2RlZmluZSBQVF9QQwkJNgorCisjZGVmaW5lIFBUX19TVEFUVVMJNwkvKiBleGNlcHRpb24gc3RhdHVzICovCisjZGVmaW5lIFBUX1NZU0NBTExOTwk4CS8qIHN5c2NhbGwgbnVtYmVyIG9yIC0xICovCisjZGVmaW5lIFBUX09SSUdfR1I4CTkJLyogc2F2ZWQgR1I4IGZvciBzaWduYWwgaGFuZGxpbmcgKi8KKyNkZWZpbmUgUFRfR05FUjAJMTAKKyNkZWZpbmUgUFRfR05FUjEJMTEKKyNkZWZpbmUgUFRfSUFDQzBICTEyCisjZGVmaW5lIFBUX0lBQ0MwTAkxMworCisjZGVmaW5lIFBUX0dSKGopCSggMTQgKyAoaikpCS8qIEdSaiBmb3IgMDw9ajw9NjMgKi8KKyNkZWZpbmUgUFRfRlIoaikJKCA3OCArIChqKSkJLyogRlJqIGZvciAwPD1qPD02MyAqLworI2RlZmluZSBQVF9GTkVSKGopCSgxNDIgKyAoaikpCS8qIEZORVJqIGZvciAwPD1qPD0xICovCisjZGVmaW5lIFBUX01TUihqKQkoMTQ0ICsgKGopKQkvKiBNU1JqIGZvciAwPD1qPD0yICovCisjZGVmaW5lIFBUX0FDQyhqKQkoMTQ2ICsgKGopKQkvKiBBQ0NqIGZvciAwPD1qPD03ICovCisjZGVmaW5lIFBUX0FDQ0coamtsbSkJKDE1NCArIChqa2xtKSkJLyogQUNDR2prbG0gZm9yIDA8PWprbG08PTEgKHJlYWRzIGZvdXIgcmVncyBwZXIgc2xvdCkgKi8KKyNkZWZpbmUgUFRfRlNSKGopCSgxNTYgKyAoaikpCS8qIEZTUmogZm9yIDA8PWo8PTAgKi8KKyNkZWZpbmUgUFRfX0dQRU5ECTc4CisjZGVmaW5lIFBUX19FTkQJCTE1NworCisjZGVmaW5lIFBUX1RCUgkJUFRfR1IoMCkKKyNkZWZpbmUgUFRfU1AJCVBUX0dSKDEpCisjZGVmaW5lIFBUX0ZQCQlQVF9HUigyKQorI2RlZmluZSBQVF9QUkVWX0ZSQU1FCVBUX0dSKDI4KQkvKiBwcmV2aW91cyBleGNlcHRpb24gZnJhbWUgcG9pbnRlciAob2xkIGdyMjggdmFsdWUpICovCisjZGVmaW5lIFBUX0NVUlJfVEFTSwlQVF9HUigyOSkJLyogY3VycmVudCB0YXNrICovCisKKworLyogQXJiaXRyYXJpbHkgY2hvb3NlIHRoZSBzYW1lIHB0cmFjZSBudW1iZXJzIGFzIHVzZWQgYnkgdGhlIFNwYXJjIGNvZGUuICovCisjZGVmaW5lIFBUUkFDRV9HRVRSRUdTCQkxMgorI2RlZmluZSBQVFJBQ0VfU0VUUkVHUwkJMTMKKyNkZWZpbmUgUFRSQUNFX0dFVEZQUkVHUwkxNAorI2RlZmluZSBQVFJBQ0VfU0VURlBSRUdTCTE1CisjZGVmaW5lIFBUUkFDRV9HRVRGRFBJQwkJMzEJLyogZ2V0IHRoZSBFTEYgZmRwaWMgbG9hZG1hcCBhZGRyZXNzICovCisKKyNkZWZpbmUgUFRSQUNFX0dFVEZEUElDX0VYRUMJMAkvKiBbYWRkcl0gcmVxdWVzdCB0aGUgZXhlY3V0YWJsZSBsb2FkbWFwICovCisjZGVmaW5lIFBUUkFDRV9HRVRGRFBJQ19JTlRFUlAJMQkvKiBbYWRkcl0gcmVxdWVzdCB0aGUgaW50ZXJwcmV0ZXIgbG9hZG1hcCAqLworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisvKgorICogZGVkaWNhdGUgR1IyODsgdG8ga2VlcGluZyB0aGUgYSBwb2ludGVyIHRvIHRoZSBjdXJyZW50IGV4Y2VwdGlvbiBmcmFtZQorICovCityZWdpc3RlciBzdHJ1Y3QgcHRfcmVncyAqX19mcmFtZSBhc20oImdyMjgiKTsKK3JlZ2lzdGVyIHN0cnVjdCBwdF9yZWdzICpfX2RlYnVnX2ZyYW1lIGFzbSgiZ3IzMSIpOworCisjaWZuZGVmIGNvbnRhaW5lcl9vZgorI2RlZmluZSBjb250YWluZXJfb2YocHRyLCB0eXBlLCBtZW1iZXIpICh7CQkJXAorICAgICAgICBjb25zdCB0eXBlb2YoICgodHlwZSAqKTApLT5tZW1iZXIgKSAqX19tcHRyID0gKHB0cik7CVwKKyAgICAgICAgKHR5cGUgKikoIChjaGFyICopX19tcHRyIC0gb2Zmc2V0b2YodHlwZSxtZW1iZXIpICk7fSkKKyNlbmRpZgorCisjZGVmaW5lIF9fZGVidWdfcmVncyBjb250YWluZXJfb2YoX19kZWJ1Z19mcmFtZSwgc3RydWN0IHB0X2RlYnVnX3JlZ3MsIG5vcm1hbF9yZWdzKQorCisjZGVmaW5lIHVzZXJfbW9kZShyZWdzKQkJCSghKChyZWdzKS0+cHNyICYgUFNSX1MpKQorI2RlZmluZSBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpCSgocmVncyktPnBjKQorCitleHRlcm4gdW5zaWduZWQgbG9uZyB1c2VyX3N0YWNrKGNvbnN0IHN0cnVjdCBwdF9yZWdzICopOworZXh0ZXJuIHZvaWQgc2hvd19yZWdzKHN0cnVjdCBwdF9yZWdzICopOworI2RlZmluZSBwcm9maWxlX3BjKHJlZ3MpICgocmVncyktPnBjKQorCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworI2VuZGlmIC8qIF9BU01fUFRSQUNFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9yZWdpc3RlcnMuaCBiL2luY2x1ZGUvYXNtLWZydi9yZWdpc3RlcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2NmZDk1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tZnJ2L3JlZ2lzdGVycy5oCkBAIC0wLDAgKzEsMjU1IEBACisvKiByZWdpc3RlcnMuaDogcmVnaXN0ZXIgZnJhbWUgZGVjbGFyYXRpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzIFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKy8qCisgKiBub3RlczoKKyAqCisgKiAoMSkgdGhhdCB0aGUgbWVtYmVycyBvZiBhbGwgdGhlc2Ugc3RydWN0dXJlcyBhcmUgY2FyZWZ1bGx5IGFsaWduZWQgdG8gcGVybWl0CisgKiAgICAgdXNhZ2Ugb2YgU1REL1NUREYgaW5zdHJ1Y3Rpb25zCisgKgorICogKDIpIGlmIHlvdSBjaGFuZ2UgdGhlc2Ugc3RydWN0dXJlcywgeW91IG11c3QgY2hhbmdlIHRoZSBjb2RlIGluCisgKiAgICAgYXJjaC9mcnZub21tdS9rZXJuZWwve2JyZWFrLlMsZW50cnkuUyxzd2l0Y2hfdG8uUyxnZGItc3R1Yi5jfQorICoKKyAqCisgKiB0aGUga2VybmVsIHN0YWNrIHNwYWNlIGJsb2NrIGxvb2tzIGxpa2UgdGhpczoKKyAqCisgKgkrMHgyMDAwCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgkJfCB1bmlvbiB7CisgKgkJfAlzdHJ1Y3QgdXNlcl9jb250ZXh0CisgKgkJfAlzdHJ1Y3QgcHRfcmVncyBbdXNlciBleGNlcHRpb25dCisgKgkJfCB9CisgKgkJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gPC0tIF9fa2VybmVsX2ZyYW1lMF9wdHIgKG1heWJlIEdSMjgpCisgKgkJfAorICoJCXwga2VybmVsIHN0YWNrCisgKgkJfAorICoJCXwuLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisgKgkJfCBzdHJ1Y3QgcHRfcmVncyBba2VybmVsIGV4Y2VwdGlvbl0KKyAqCQl8Li4uLi4uLi4uLi4uLi4uLi4uLi4uLiA8LS0gX19rZXJuZWxfZnJhbWUwX3B0ciAobWF5YmUgR1IyOCkKKyAqCQl8CisgKgkJfCBrZXJuZWwgc3RhY2sKKyAqCQl8CisgKgkJfC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gPC0tIHN0YWNrIHBvaW50ZXIgKEdSMSkKKyAqCQl8CisgKgkJfCB1bnVzZWQgc3RhY2sgc3BhY2UKKyAqCQl8CisgKgkJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCQl8IHN0cnVjdCB0aHJlYWRfaW5mbworICoJKzB4MDAwMAkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSA8LS0gX19jdXJyZW50X3RocmVhZF9pbmZvIChHUjE1KTsKKyAqCisgKiBub3RlIHRoYXQgR1IyOCBwb2ludHMgdG8gdGhlIGN1cnJlbnQgZXhjZXB0aW9uIGZyYW1lCisgKi8KKworI2lmbmRlZiBfQVNNX1JFR0lTVEVSU19ICisjZGVmaW5lIF9BU01fUkVHSVNURVJTX0gKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNkZWZpbmUgX19PRkZTRVQoWCkJKFgpCisjZGVmaW5lIF9fT0ZGU0VUQyhYLE4pCXh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAorI2Vsc2UKKyNkZWZpbmUgX19PRkZTRVQoWCkJKChYKSo0KQorI2RlZmluZSBfX09GRlNFVEMoWCxOKQkoKFgpKjQrKE4pKQorI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBFeGNlcHRpb24vSW50ZXJydXB0IGZyYW1lCisgKiAtIGhlbGQgb24ga2VybmVsIHN0YWNrCisgKiAtIDgtYnl0ZSBhbGlnbmVkIG9uIHN0YWNrIChvbGQgU1AgaXMgc2F2ZWQgaW4gZnJhbWUpCisgKiAtIEdSMCBpcyBmaXhlZCAwLCBzbyB3ZSBkb24ndCBzYXZlIGl0CisgKi8KKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK3N0cnVjdCBwdF9yZWdzIHsKKwl1bnNpZ25lZCBsb25nCQlwc3I7CQkvKiBQcm9jZXNzb3IgU3RhdHVzIFJlZ2lzdGVyICovCisJdW5zaWduZWQgbG9uZwkJaXNyOwkJLyogSW50ZWdlciBTdGF0dXMgUmVnaXN0ZXIgKi8KKwl1bnNpZ25lZCBsb25nCQljY3I7CQkvKiBDb25kaXRpb24gQ29kZSBSZWdpc3RlciAqLworCXVuc2lnbmVkIGxvbmcJCWNjY3I7CQkvKiBDb25kaXRpb24gQ29kZSBmb3IgQ29uZGl0aW9uYWwgSW5zbnMgUmVnaXN0ZXIgKi8KKwl1bnNpZ25lZCBsb25nCQlscjsJCS8qIExpbmsgUmVnaXN0ZXIgKi8KKwl1bnNpZ25lZCBsb25nCQlsY3I7CQkvKiBMb29wIENvdW50IFJlZ2lzdGVyICovCisJdW5zaWduZWQgbG9uZwkJcGM7CQkvKiBQcm9ncmFtIENvdW50ZXIgUmVnaXN0ZXIgKi8KKwl1bnNpZ25lZCBsb25nCQlfX3N0YXR1czsJLyogZXhjZXB0aW9uIHN0YXR1cyAqLworCXVuc2lnbmVkIGxvbmcJCXN5c2NhbGxubzsJLyogc3lzY2FsbCBudW1iZXIgb3IgLTEgKi8KKwl1bnNpZ25lZCBsb25nCQlvcmlnX2dyODsJLyogb3JpZ2luYWwgc3lzY2FsbCBhcmcgIzEgKi8KKwl1bnNpZ25lZCBsb25nCQlnbmVyMDsKKwl1bnNpZ25lZCBsb25nCQlnbmVyMTsKKwl1bnNpZ25lZCBsb25nIGxvbmcJaWFjYzA7CisJdW5zaWduZWQgbG9uZwkJdGJyOwkJLyogR1IwIGlzIGZpeGVkIHplcm8sIHNvIHdlIHVzZSB0aGlzIGZvciBUQlIgKi8KKwl1bnNpZ25lZCBsb25nCQlzcDsJCS8qIEdSMTogVVNQL0tTUCAqLworCXVuc2lnbmVkIGxvbmcJCWZwOwkJLyogR1IyOiBGUCAqLworCXVuc2lnbmVkIGxvbmcJCWdyMzsKKwl1bnNpZ25lZCBsb25nCQlncjQ7CisJdW5zaWduZWQgbG9uZwkJZ3I1OworCXVuc2lnbmVkIGxvbmcJCWdyNjsKKwl1bnNpZ25lZCBsb25nCQlncjc7CQkvKiBzeXNjYWxsIG51bWJlciAqLworCXVuc2lnbmVkIGxvbmcJCWdyODsJCS8qIDFzdCBzeXNjYWxsIHBhcmFtOyBzeXNjYWxsIHJldHVybiAqLworCXVuc2lnbmVkIGxvbmcJCWdyOTsJCS8qIDJuZCBzeXNjYWxsIHBhcmFtICovCisJdW5zaWduZWQgbG9uZwkJZ3IxMDsJCS8qIDNyZCBzeXNjYWxsIHBhcmFtICovCisJdW5zaWduZWQgbG9uZwkJZ3IxMTsJCS8qIDR0aCBzeXNjYWxsIHBhcmFtICovCisJdW5zaWduZWQgbG9uZwkJZ3IxMjsJCS8qIDV0aCBzeXNjYWxsIHBhcmFtICovCisJdW5zaWduZWQgbG9uZwkJZ3IxMzsJCS8qIDZ0aCBzeXNjYWxsIHBhcmFtICovCisJdW5zaWduZWQgbG9uZwkJZ3IxNDsKKwl1bnNpZ25lZCBsb25nCQlncjE1OworCXVuc2lnbmVkIGxvbmcJCWdyMTY7CQkvKiBHUCBwb2ludGVyICovCisJdW5zaWduZWQgbG9uZwkJZ3IxNzsJCS8qIHNtYWxsIGRhdGEgKi8KKwl1bnNpZ25lZCBsb25nCQlncjE4OwkJLyogUElDL1BJRCAqLworCXVuc2lnbmVkIGxvbmcJCWdyMTk7CisJdW5zaWduZWQgbG9uZwkJZ3IyMDsKKwl1bnNpZ25lZCBsb25nCQlncjIxOworCXVuc2lnbmVkIGxvbmcJCWdyMjI7CisJdW5zaWduZWQgbG9uZwkJZ3IyMzsKKwl1bnNpZ25lZCBsb25nCQlncjI0OworCXVuc2lnbmVkIGxvbmcJCWdyMjU7CisJdW5zaWduZWQgbG9uZwkJZ3IyNjsKKwl1bnNpZ25lZCBsb25nCQlncjI3OworCXN0cnVjdCBwdF9yZWdzCQkqbmV4dF9mcmFtZTsJLyogR1IyOCAtIG5leHQgZXhjZXB0aW9uIGZyYW1lICovCisJdW5zaWduZWQgbG9uZwkJZ3IyOTsJCS8qIEdSMjkgLSBPUyByZXNlcnZlZCAqLworCXVuc2lnbmVkIGxvbmcJCWdyMzA7CQkvKiBHUjMwIC0gT1MgcmVzZXJ2ZWQgKi8KKwl1bnNpZ25lZCBsb25nCQlncjMxOwkJLyogR1IzMSAtIE9TIHJlc2VydmVkICovCit9IF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKTsKKworI2VuZGlmCisKKyNkZWZpbmUgUkVHX1BTUgkJX19PRkZTRVQoIDApCS8qIFByb2Nlc3NvciBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUkVHX0lTUgkJX19PRkZTRVQoIDEpCS8qIEludGVnZXIgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIFJFR19DQ1IJCV9fT0ZGU0VUKCAyKQkvKiBDb25kaXRpb24gQ29kZSBSZWdpc3RlciAqLworI2RlZmluZSBSRUdfQ0NDUglfX09GRlNFVCggMykJLyogQ29uZGl0aW9uIENvZGUgZm9yIENvbmRpdGlvbmFsIEluc25zIFJlZ2lzdGVyICovCisjZGVmaW5lIFJFR19MUgkJX19PRkZTRVQoIDQpCS8qIExpbmsgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUkVHX0xDUgkJX19PRkZTRVQoIDUpCS8qIExvb3AgQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUkVHX1BDCQlfX09GRlNFVCggNikJLyogUHJvZ3JhbSBDb3VudGVyICovCisKKyNkZWZpbmUgUkVHX19TVEFUVVMJX19PRkZTRVQoIDcpCS8qIGV4Y2VwdGlvbiBzdGF0dXMgKi8KKyNkZWZpbmUgUkVHX19TVEFUVVNfU1RFUAkweDAwMDAwMDAxCS8qIC0gcmVlbmFibGUgc2luZ2xlIHN0ZXBwaW5nIG9uIHJldHVybiAqLworI2RlZmluZSBSRUdfX1NUQVRVU19TVEVQUEVECTB4MDAwMDAwMDIJLyogLSBzaW5nbGUgc3RlcCBjYXVzZWQgZXhjZXB0aW9uICovCisjZGVmaW5lIFJFR19fU1RBVFVTX0JST0tFCTB4MDAwMDAwMDQJLyogLSBCUkVBSyBpbnNuIGNhdXNlZCBleGNlcHRpb24gKi8KKyNkZWZpbmUgUkVHX19TVEFUVVNfU1lTQ19FTlRSWQkweDQwMDAwMDAwCS8qIC0gVCBvbiBzeXNjYWxsIGVudHJ5IChwdHJhY2UuYyBvbmx5KSAqLworI2RlZmluZSBSRUdfX1NUQVRVU19TWVNDX0VYSVQJMHg4MDAwMDAwMAkvKiAtIFQgb24gc3lzY2FsbCBleGl0IChwdHJhY2UuYyBvbmx5KSAqLworCisjZGVmaW5lIFJFR19TWVNDQUxMTk8JX19PRkZTRVQoIDgpCS8qIHN5c2NhbGwgbnVtYmVyIG9yIC0xICovCisjZGVmaW5lIFJFR19PUklHX0dSOAlfX09GRlNFVCggOSkJLyogc2F2ZWQgR1I4IGZvciBzaWduYWwgaGFuZGxpbmcgKi8KKyNkZWZpbmUgUkVHX0dORVIwCV9fT0ZGU0VUKDEwKQorI2RlZmluZSBSRUdfR05FUjEJX19PRkZTRVQoMTEpCisjZGVmaW5lIFJFR19JQUNDMAlfX09GRlNFVCgxMikKKworI2RlZmluZSBSRUdfVEJSCQlfX09GRlNFVCgxNCkJLyogVHJhcCBWZWN0b3IgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUkVHX0dSKFIpCV9fT0ZGU0VUKCgxNCsoUikpKQorI2RlZmluZSBSRUdfX0VORAlSRUdfR1IoMzIpCisKKyNkZWZpbmUgUkVHX1NQCQlSRUdfR1IoMSkKKyNkZWZpbmUgUkVHX0ZQCQlSRUdfR1IoMikKKyNkZWZpbmUgUkVHX1BSRVZfRlJBTUUJUkVHX0dSKDI4KQkvKiBwcmV2aW91cyBleGNlcHRpb24gZnJhbWUgcG9pbnRlciAob2xkIGdyMjggdmFsdWUpICovCisjZGVmaW5lIFJFR19DVVJSX1RBU0sJUkVHX0dSKDI5KQkvKiBjdXJyZW50IHRhc2sgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIGV4dGVuc2lvbiB0YWNrZWQgaW4gZnJvbnQgb2YgdGhlIGV4Y2VwdGlvbiBmcmFtZSBpbiBkZWJ1ZyBtb2RlCisgKi8KKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK3N0cnVjdCBwdF9kZWJ1Z19yZWdzCit7CisJdW5zaWduZWQgbG9uZwkJYnBzcjsKKwl1bnNpZ25lZCBsb25nCQlkY3I7CisJdW5zaWduZWQgbG9uZwkJYnJyOworCXVuc2lnbmVkIGxvbmcJCW5tYXI7CisJc3RydWN0IHB0X3JlZ3MJCW5vcm1hbF9yZWdzOworfSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSk7CisKKyNlbmRpZgorCisjZGVmaW5lIFJFR19OTUFSCQlfX09GRlNFVCgtMSkKKyNkZWZpbmUgUkVHX0JSUgkJCV9fT0ZGU0VUKC0yKQorI2RlZmluZSBSRUdfRENSCQkJX19PRkZTRVQoLTMpCisjZGVmaW5lIFJFR19CUFNSCQlfX09GRlNFVCgtNCkKKyNkZWZpbmUgUkVHX19ERUJVR19YVFJBCQlfX09GRlNFVCg0KQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogdXNlcnNwYWNlIHJlZ2lzdGVycworICovCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCitzdHJ1Y3QgdXNlcl9pbnRfcmVncworeworCS8qIGludGVnZXIgcmVnaXN0ZXJzCisJICogLSB1cCB0byBnclszMV0gbWlycm9yIHB0X3JlZ3MKKwkgKiAtIHRvdGFsIHNpemUgbXVzdCBiZSBtdWx0aXBsZSBvZiA4IGJ5dGVzCisJICovCisJdW5zaWduZWQgbG9uZwkJcHNyOwkJLyogUHJvY2Vzc29yIFN0YXR1cyBSZWdpc3RlciAqLworCXVuc2lnbmVkIGxvbmcJCWlzcjsJCS8qIEludGVnZXIgU3RhdHVzIFJlZ2lzdGVyICovCisJdW5zaWduZWQgbG9uZwkJY2NyOwkJLyogQ29uZGl0aW9uIENvZGUgUmVnaXN0ZXIgKi8KKwl1bnNpZ25lZCBsb25nCQljY2NyOwkJLyogQ29uZGl0aW9uIENvZGUgZm9yIENvbmRpdGlvbmFsIEluc25zIFJlZ2lzdGVyICovCisJdW5zaWduZWQgbG9uZwkJbHI7CQkvKiBMaW5rIFJlZ2lzdGVyICovCisJdW5zaWduZWQgbG9uZwkJbGNyOwkJLyogTG9vcCBDb3VudCBSZWdpc3RlciAqLworCXVuc2lnbmVkIGxvbmcJCXBjOwkJLyogUHJvZ3JhbSBDb3VudGVyIFJlZ2lzdGVyICovCisJdW5zaWduZWQgbG9uZwkJX19zdGF0dXM7CS8qIGV4Y2VwdGlvbiBzdGF0dXMgKi8KKwl1bnNpZ25lZCBsb25nCQlzeXNjYWxsbm87CS8qIHN5c2NhbGwgbnVtYmVyIG9yIC0xICovCisJdW5zaWduZWQgbG9uZwkJb3JpZ19ncjg7CS8qIG9yaWdpbmFsIHN5c2NhbGwgYXJnICMxICovCisJdW5zaWduZWQgbG9uZwkJZ25lclsyXTsKKwl1bnNpZ25lZCBsb25nIGxvbmcJaWFjY1sxXTsKKworCXVuaW9uIHsKKwkJdW5zaWduZWQgbG9uZwl0YnI7CisJCXVuc2lnbmVkIGxvbmcJZ3JbNjRdOworCX07Cit9OworCitzdHJ1Y3QgdXNlcl9mcG1lZGlhX3JlZ3MKK3sKKwkvKiBGUC9NZWRpYSByZWdpc3RlcnMgKi8KKwl1bnNpZ25lZCBsb25nCWZyWzY0XTsKKwl1bnNpZ25lZCBsb25nCWZuZXJbMl07CisJdW5zaWduZWQgbG9uZwltc3JbMl07CisJdW5zaWduZWQgbG9uZwlhY2NbOF07CisJdW5zaWduZWQgY2hhcglhY2NnWzhdOworCXVuc2lnbmVkIGxvbmcJZnNyWzFdOworfTsKKworc3RydWN0IHVzZXJfY29udGV4dAoreworCXN0cnVjdCB1c2VyX2ludF9yZWdzCQlpOworCXN0cnVjdCB1c2VyX2ZwbWVkaWFfcmVncwlmOworCisJLyogd2UgcHJvdmlkZSBhIGNvbnRleHQgZXh0ZW5zaW9uIHNvIHRoYXQgd2UgY2FuIHNhdmUgdGhlIHJlZ3MgZm9yIENQVXMgdGhhdAorCSAqIGltcGxlbWVudCBtYW55IG1vcmUgb2YgRnVqaXRzdSdzIGxhdmlzaCByZWdpc3RlciBzcGVjCisJICovCisJdm9pZCAqZXh0ZW5zaW9uOworfSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSk7CisKKyNlbmRpZgorCisjZGVmaW5lIE5SX1VTRVJfSU5UX1JFR1MJKDE0ICsgNjQpCisjZGVmaW5lIE5SX1VTRVJfRlBNRURJQV9SRUdTCSg2NCArIDIgKyAyICsgOCArIDgvNCArIDEpCisjZGVmaW5lIE5SX1VTRVJfQ09OVEVYVAkJKE5SX1VTRVJfSU5UX1JFR1MgKyBOUl9VU0VSX0ZQTUVESUFfUkVHUyArIDEpCisKKyNkZWZpbmUgVVNFUl9DT05URVhUX1NJWkUJKCgoTlJfVVNFUl9DT05URVhUICsgMSkgJiB+MSkgKiA0KQorCisjZGVmaW5lIF9fVEhSRUFEX0ZSQU1FCQlfX09GRlNFVCgwKQorI2RlZmluZSBfX1RIUkVBRF9DVVJSCQlfX09GRlNFVCgxKQorI2RlZmluZSBfX1RIUkVBRF9TUAkJX19PRkZTRVQoMikKKyNkZWZpbmUgX19USFJFQURfRlAJCV9fT0ZGU0VUKDMpCisjZGVmaW5lIF9fVEhSRUFEX0xSCQlfX09GRlNFVCg0KQorI2RlZmluZSBfX1RIUkVBRF9QQwkJX19PRkZTRVQoNSkKKyNkZWZpbmUgX19USFJFQURfR1IoUikJCV9fT0ZGU0VUKDYgKyAoUikgLSAxNikKKyNkZWZpbmUgX19USFJFQURfRlJBTUUwCQlfX09GRlNFVCgxOSkKKyNkZWZpbmUgX19USFJFQURfVVNFUgkJX19PRkZTRVQoMTkpCisKKyNkZWZpbmUgX19VU0VSX0lOVAkJX19PRkZTRVQoMCkKKyNkZWZpbmUgX19JTlRfR1IoUikJCV9fT0ZGU0VUKDE0ICsgKFIpKQorCisjZGVmaW5lIF9fVVNFUl9GUE1FRElBCQlfX09GRlNFVChOUl9VU0VSX0lOVF9SRUdTKQorI2RlZmluZSBfX0ZQTUVESUFfRlIoUikJCV9fT0ZGU0VUKE5SX1VTRVJfSU5UX1JFR1MgKyAoUikpCisjZGVmaW5lIF9fRlBNRURJQV9GTkVSKFIpCV9fT0ZGU0VUKE5SX1VTRVJfSU5UX1JFR1MgKyA2NCArIChSKSkKKyNkZWZpbmUgX19GUE1FRElBX01TUihSKQlfX09GRlNFVChOUl9VU0VSX0lOVF9SRUdTICsgNjYgKyAoUikpCisjZGVmaW5lIF9fRlBNRURJQV9BQ0MoUikJX19PRkZTRVQoTlJfVVNFUl9JTlRfUkVHUyArIDY4ICsgKFIpKQorI2RlZmluZSBfX0ZQTUVESUFfQUNDRyhSKQlfX09GRlNFVEMoTlJfVVNFUl9JTlRfUkVHUyArIDc2LCAoUikpCisjZGVmaW5lIF9fRlBNRURJQV9GU1IoUikJX19PRkZTRVQoTlJfVVNFUl9JTlRfUkVHUyArIDc4ICsgKFIpKQorCisjZW5kaWYgLyogX0FTTV9SRUdJU1RFUlNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L3Jlc291cmNlLmggYi9pbmNsdWRlL2FzbS1mcnYvcmVzb3VyY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmM2MDU0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tZnJ2L3Jlc291cmNlLmgKQEAgLTAsMCArMSw3IEBACisjaWZuZGVmIF9BU01fUkVTT1VSQ0VfSAorI2RlZmluZSBfQVNNX1JFU09VUkNFX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3Jlc291cmNlLmg+CisKKyNlbmRpZiAvKiBfQVNNX1JFU09VUkNFX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L3NjYXR0ZXJsaXN0LmggYi9pbmNsdWRlL2FzbS1mcnYvc2NhdHRlcmxpc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjM4ZmQzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tZnJ2L3NjYXR0ZXJsaXN0LmgKQEAgLTAsMCArMSwzMiBAQAorI2lmbmRlZiBfQVNNX1NDQVRURVJMSVNUX0gKKyNkZWZpbmUgX0FTTV9TQ0FUVEVSTElTVF9ICisKKy8qCisgKiBEcml2ZXJzIG11c3Qgc2V0IGVpdGhlciAtPmFkZHJlc3Mgb3IgKHByZWZlcnJlZCkgLT5wYWdlIGFuZCAtPm9mZnNldAorICogdG8gaW5kaWNhdGUgd2hlcmUgZGF0YSBtdXN0IGJlIHRyYW5zZmVycmVkIHRvL2Zyb20uCisgKgorICogVXNpbmcgLT5wYWdlIGlzIHJlY29tbWVuZGVkIHNpbmNlIGl0IGhhbmRsZXMgaGlnaG1lbSBkYXRhIGFzIHdlbGwgYXMKKyAqIGxvdyBtZW0uIC0+YWRkcmVzcyBpcyByZXN0cmljdGVkIHRvIGRhdGEgd2hpY2ggaGFzIGEgdmlydHVhbCBtYXBwaW5nLCBhbmQKKyAqIGl0IHdpbGwgZ28gYXdheSBpbiB0aGUgZnV0dXJlLiBVcGRhdGluZyB0byAtPnBhZ2UgY2FuIGJlIGF1dG9tYXRlZCB2ZXJ5CisgKiBlYXNpbHkgLS0gc29tZXRoaW5nIGxpa2UKKyAqCisgKiBzZy0+YWRkcmVzcyA9IHNvbWVfcHRyOworICoKKyAqIGNhbiBiZSByZXdyaXR0ZW4gYXMKKyAqCisgKiBzZy0+cGFnZSA9IHZpcnRfdG9fcGFnZShzb21lX3B0cik7CisgKiBzZy0+b2Zmc2V0ID0gKHVuc2lnbmVkIGxvbmcpIHNvbWVfcHRyICYgflBBR0VfTUFTSzsKKyAqCisgKiBhbmQgdGhhdCdzIGl0LiBUaGVyZSdzIG5vIGV4Y3VzZSBmb3Igbm90IGhpZ2htZW0gZW5hYmxpbmcgWU9VUiBkcml2ZXIuIC9qZW5zCisgKi8KK3N0cnVjdCBzY2F0dGVybGlzdCB7CisJc3RydWN0IHBhZ2UJKnBhZ2U7CQkvKiBMb2NhdGlvbiBmb3IgaGlnaG1lbSBwYWdlLCBpZiBhbnkgKi8KKwl1bnNpZ25lZCBpbnQJb2Zmc2V0OwkJLyogZm9yIGhpZ2htZW0sIHBhZ2Ugb2Zmc2V0ICovCisKKwlkbWFfYWRkcl90CWRtYV9hZGRyZXNzOworCXVuc2lnbmVkIGludAlsZW5ndGg7Cit9OworCisjZGVmaW5lIElTQV9ETUFfVEhSRVNIT0xEICgweGZmZmZmZmZmVUwpCisKKyNlbmRpZiAvKiAhX0FTTV9TQ0FUVEVSTElTVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvc2VjdGlvbnMuaCBiL2luY2x1ZGUvYXNtLWZydi9zZWN0aW9ucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3ZDBmYjE3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tZnJ2L3NlY3Rpb25zLmgKQEAgLTAsMCArMSw0NiBAQAorLyogc2VjdGlvbnMuaDogbGlua2FnZSBsYXlvdXQgdmFyaWFibGVzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgX0FTTV9TRUNUSU9OU19ICisjZGVmaW5lIF9BU01fU0VDVElPTlNfSAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zZWN0aW9ucy5oPgorCisjaWZkZWYgX19LRVJORUxfXworCisvKgorICogd2UgZG9uJ3Qgd2FudCB0byBwdXQgdmFyaWFibGVzIGluIHRoZSBHUC1SRUwgc2VjdGlvbiBpZiB0aGV5J3JlIG5vdCB1c2VkIHZlcnkgbXVjaCAtIHRoYXQgd291bGQKKyAqIGJlIHdhc3RlIHNpbmNlIEdQLVJFTCBhZGRyZXNzaW5nIGlzIGxpbWl0ZWQgdG8gR1AxNisvLTIwNDgKKyAqLworI2RlZmluZSBfX25vbmdwcmVsZGF0YQlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIuZGF0YSIpKSkKKyNkZWZpbmUgX19ub25ncHJlbGJzcwlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIuYnNzIikpKQorCisvKgorICogbGlua2VyIHN5bWJvbHMKKyAqLworZXh0ZXJuIGNvbnN0IHZvaWQgX19rZXJuZWxfaW1hZ2Vfc3RhcnQsIF9fa2VybmVsX2ltYWdlX2VuZCwgX19wYWdlX29mZnNldDsKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19ub25ncHJlbGJzcyBtZW1vcnlfc3RhcnQ7CitleHRlcm4gdW5zaWduZWQgbG9uZyBfX25vbmdwcmVsYnNzIG1lbW9yeV9lbmQ7CitleHRlcm4gdW5zaWduZWQgbG9uZyBfX25vbmdwcmVsYnNzIHJvbV9sZW5ndGg7CisKKy8qIGRldGVybWluZSBpZiB3ZSdyZSBydW5uaW5nIGZyb20gUk9NICovCitzdGF0aWMgaW5saW5lIGludCBpc19pbl9yb20odW5zaWduZWQgbG9uZyBhZGRyKQoreworCXJldHVybiAwOyAvKiBkZWZhdWx0IGNhc2U6IG5vdCBpbiBST00gKi8KK30KKworI2VuZGlmCisjZW5kaWYKKyNlbmRpZiAvKiBfQVNNX1NFQ1RJT05TX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9zZWdtZW50LmggYi9pbmNsdWRlL2FzbS1mcnYvc2VnbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxMjIyZjAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1mcnYvc2VnbWVudC5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qIHNlZ21lbnQuaDogTU1VIHNlZ21lbnQgc2V0dGluZ3MKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfQVNNX1NFR01FTlRfSAorI2RlZmluZSBfQVNNX1NFR01FTlRfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBsb25nIHNlZzsKK30gbW1fc2VnbWVudF90OworCisjZGVmaW5lIE1BS0VfTU1fU0VHKHMpCSgobW1fc2VnbWVudF90KSB7IChzKSB9KQorCisjZGVmaW5lIEtFUk5FTF9EUwkJTUFLRV9NTV9TRUcoMHhkZmZmZmZmZlVMKQorCisjaWZkZWYgQ09ORklHX01NVQorI2RlZmluZSBVU0VSX0RTCQkJTUFLRV9NTV9TRUcoVEFTS19TSVpFIC0gMSkKKyNlbHNlCisjZGVmaW5lIFVTRVJfRFMJCQlLRVJORUxfRFMKKyNlbmRpZgorCisjZGVmaW5lIGdldF9kcygpCQkoS0VSTkVMX0RTKQorI2RlZmluZSBnZXRfZnMoKQkJKF9fY3VycmVudF90aHJlYWRfaW5mby0+YWRkcl9saW1pdCkKKyNkZWZpbmUgc2VnbWVudF9lcShhLGIpCQkoKGEpLnNlZyA9PSAoYikuc2VnKQorI2RlZmluZSBfX2tlcm5lbF9kc19wKCkJCXNlZ21lbnRfZXEoZ2V0X2ZzKCksIEtFUk5FTF9EUykKKyNkZWZpbmUgZ2V0X2FkZHJfbGltaXQoKQkoZ2V0X2ZzKCkuc2VnKQorCisjZGVmaW5lIHNldF9mcyhfeCkJCQkJCVwKK2RvIHsJCQkJCQkJXAorCV9fY3VycmVudF90aHJlYWRfaW5mby0+YWRkcl9saW1pdCA9IChfeCk7CVwKK30gd2hpbGUoMCkKKworCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisjZW5kaWYgLyogX0FTTV9TRUdNRU5UX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9zZW1hcGhvcmUuaCBiL2luY2x1ZGUvYXNtLWZydi9zZW1hcGhvcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTM1NDU2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tZnJ2L3NlbWFwaG9yZS5oCkBAIC0wLDAgKzEsMTYxIEBACisvKiBzZW1hcGhvcmUuaDogc2VtYXBob3JlcyBmb3IgdGhlIEZSLVYKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpZm5kZWYgX0FTTV9TRU1BUEhPUkVfSAorI2RlZmluZSBfQVNNX1NFTUFQSE9SRV9ICisKKyNkZWZpbmUgUldfTE9DS19CSUFTCQkgMHgwMTAwMDAwMAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3J3c2VtLmg+CisKKyNkZWZpbmUgU0VNQVBIT1JFX0RFQlVHCQlXQUlUUVVFVUVfREVCVUcKKworLyoKKyAqIHRoZSBzZW1hcGhvcmUgZGVmaW5pdGlvbgorICogLSBpZiBjb3VudGVyIGlzID4wIHRoZW4gdGhlcmUgYXJlIHRva2VucyBhdmFpbGFibGUgb24gdGhlIHNlbWFwaG9yZSBmb3IgZG93biB0byBjb2xsZWN0CisgKiAtIGlmIGNvdW50ZXIgaXMgPD0wIHRoZW4gdGhlcmUgYXJlIG5vIHNwYXJlIHRva2VucywgYW5kIGFueW9uZSB0aGF0IHdhbnRzIG9uZSBtdXN0IHdhaXQKKyAqIC0gaWYgd2FpdF9saXN0IGlzIG5vdCBlbXB0eSwgdGhlbiB0aGVyZSBhcmUgcHJvY2Vzc2VzIHdhaXRpbmcgZm9yIHRoZSBzZW1hcGhvcmUKKyAqLworc3RydWN0IHNlbWFwaG9yZSB7CisJdW5zaWduZWQJCWNvdW50ZXI7CisJc3BpbmxvY2tfdAkJd2FpdF9sb2NrOworCXN0cnVjdCBsaXN0X2hlYWQJd2FpdF9saXN0OworI2lmIFNFTUFQSE9SRV9ERUJVRworCXVuc2lnbmVkCQlfX21hZ2ljOworI2VuZGlmCit9OworCisjaWYgU0VNQVBIT1JFX0RFQlVHCisjIGRlZmluZSBfX1NFTV9ERUJVR19JTklUKG5hbWUpICwgKGxvbmcpJihuYW1lKS5fX21hZ2ljCisjZWxzZQorIyBkZWZpbmUgX19TRU1fREVCVUdfSU5JVChuYW1lKQorI2VuZGlmCisKKworI2RlZmluZSBfX1NFTUFQSE9SRV9JTklUSUFMSVpFUihuYW1lLGNvdW50KSBcCit7IGNvdW50LCBTUElOX0xPQ0tfVU5MT0NLRUQsIExJU1RfSEVBRF9JTklUKChuYW1lKS53YWl0X2xpc3QpIF9fU0VNX0RFQlVHX0lOSVQobmFtZSkgfQorCisjZGVmaW5lIF9fTVVURVhfSU5JVElBTElaRVIobmFtZSkgXAorCV9fU0VNQVBIT1JFX0lOSVRJQUxJWkVSKG5hbWUsMSkKKworI2RlZmluZSBfX0RFQ0xBUkVfU0VNQVBIT1JFX0dFTkVSSUMobmFtZSxjb3VudCkgXAorCXN0cnVjdCBzZW1hcGhvcmUgbmFtZSA9IF9fU0VNQVBIT1JFX0lOSVRJQUxJWkVSKG5hbWUsY291bnQpCisKKyNkZWZpbmUgREVDTEFSRV9NVVRFWChuYW1lKSBfX0RFQ0xBUkVfU0VNQVBIT1JFX0dFTkVSSUMobmFtZSwxKQorI2RlZmluZSBERUNMQVJFX01VVEVYX0xPQ0tFRChuYW1lKSBfX0RFQ0xBUkVfU0VNQVBIT1JFX0dFTkVSSUMobmFtZSwwKQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2VtYV9pbml0IChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0sIGludCB2YWwpCit7CisJKnNlbSA9IChzdHJ1Y3Qgc2VtYXBob3JlKSBfX1NFTUFQSE9SRV9JTklUSUFMSVpFUigqc2VtLCB2YWwpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9NVVRFWCAoc3RydWN0IHNlbWFwaG9yZSAqc2VtKQoreworCXNlbWFfaW5pdChzZW0sIDEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9NVVRFWF9MT0NLRUQgKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKK3sKKwlzZW1hX2luaXQoc2VtLCAwKTsKK30KKworZXh0ZXJuIHZvaWQgX19kb3duKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSwgdW5zaWduZWQgbG9uZyBmbGFncyk7CitleHRlcm4gaW50ICBfX2Rvd25faW50ZXJydXB0aWJsZShzdHJ1Y3Qgc2VtYXBob3JlICpzZW0sIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOworZXh0ZXJuIHZvaWQgX191cChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pOworCitzdGF0aWMgaW5saW5lIHZvaWQgZG93bihzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworI2lmIFNFTUFQSE9SRV9ERUJVRworCUNIRUNLX01BR0lDKHNlbS0+X19tYWdpYyk7CisjZW5kaWYKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzZW0tPndhaXRfbG9jaywgZmxhZ3MpOworCWlmIChsaWtlbHkoc2VtLT5jb3VudGVyID4gMCkpIHsKKwkJc2VtLT5jb3VudGVyLS07CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlbS0+d2FpdF9sb2NrLCBmbGFncyk7CisJfQorCWVsc2UgeworCQlfX2Rvd24oc2VtLCBmbGFncyk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIGludCBkb3duX2ludGVycnVwdGlibGUoc3RydWN0IHNlbWFwaG9yZSAqc2VtKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldCA9IDA7CisKKyNpZiBTRU1BUEhPUkVfREVCVUcKKwlDSEVDS19NQUdJQyhzZW0tPl9fbWFnaWMpOworI2VuZGlmCisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2VtLT53YWl0X2xvY2ssIGZsYWdzKTsKKwlpZiAobGlrZWx5KHNlbS0+Y291bnRlciA+IDApKSB7CisJCXNlbS0+Y291bnRlci0tOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZW0tPndhaXRfbG9jaywgZmxhZ3MpOworCX0KKwllbHNlIHsKKwkJcmV0ID0gX19kb3duX2ludGVycnVwdGlibGUoc2VtLCBmbGFncyk7CisJfQorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBub24tYmxvY2tpbmdseSBhdHRlbXB0IHRvIGRvd24oKSBhIHNlbWFwaG9yZS4KKyAqIC0gcmV0dXJucyB6ZXJvIGlmIHdlIGFjcXVpcmVkIGl0CisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGRvd25fdHJ5bG9jayhzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgc3VjY2VzcyA9IDA7CisKKyNpZiBTRU1BUEhPUkVfREVCVUcKKwlDSEVDS19NQUdJQyhzZW0tPl9fbWFnaWMpOworI2VuZGlmCisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2VtLT53YWl0X2xvY2ssIGZsYWdzKTsKKwlpZiAoc2VtLT5jb3VudGVyID4gMCkgeworCQlzZW0tPmNvdW50ZXItLTsKKwkJc3VjY2VzcyA9IDE7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlbS0+d2FpdF9sb2NrLCBmbGFncyk7CisJcmV0dXJuICFzdWNjZXNzOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdXAoc3RydWN0IHNlbWFwaG9yZSAqc2VtKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKyNpZiBTRU1BUEhPUkVfREVCVUcKKwlDSEVDS19NQUdJQyhzZW0tPl9fbWFnaWMpOworI2VuZGlmCisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2VtLT53YWl0X2xvY2ssIGZsYWdzKTsKKwlpZiAoIWxpc3RfZW1wdHkoJnNlbS0+d2FpdF9saXN0KSkKKwkJX191cChzZW0pOworCWVsc2UKKwkJc2VtLT5jb3VudGVyKys7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VtLT53YWl0X2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VtX2dldGNvdW50KHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKK3sKKwlyZXR1cm4gc2VtLT5jb3VudGVyOworfQorCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L3NlbWJ1Zi5oIGIvaW5jbHVkZS9hc20tZnJ2L3NlbWJ1Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2NGIxMjcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1mcnYvc2VtYnVmLmgKQEAgLTAsMCArMSwyNiBAQAorI2lmbmRlZiBfQVNNX1NFTUJVRl9ICisjZGVmaW5lIF9BU01fU0VNQlVGX0gKKworLyoKKyAqIFRoZSBzZW1pZDY0X2RzIHN0cnVjdHVyZSBmb3IgRlItViBhcmNoaXRlY3R1cmUuCisgKiBOb3RlIGV4dHJhIHBhZGRpbmcgYmVjYXVzZSB0aGlzIHN0cnVjdHVyZSBpcyBwYXNzZWQgYmFjayBhbmQgZm9ydGgKKyAqIGJldHdlZW4ga2VybmVsIGFuZCB1c2VyIHNwYWNlLgorICoKKyAqIFBhZCBzcGFjZSBpcyBsZWZ0IGZvcjoKKyAqIC0gNjQtYml0IHRpbWVfdCB0byBzb2x2ZSB5MjAzOCBwcm9ibGVtCisgKiAtIDIgbWlzY2VsbGFuZW91cyAzMi1iaXQgdmFsdWVzCisgKi8KKworc3RydWN0IHNlbWlkNjRfZHMgeworCXN0cnVjdCBpcGM2NF9wZXJtCXNlbV9wZXJtOwkvKiBwZXJtaXNzaW9ucyAuLiBzZWUgaXBjLmggKi8KKwlfX2tlcm5lbF90aW1lX3QJCXNlbV9vdGltZTsJLyogbGFzdCBzZW1vcCB0aW1lICovCisJdW5zaWduZWQgbG9uZwkJX191bnVzZWQxOworCV9fa2VybmVsX3RpbWVfdAkJc2VtX2N0aW1lOwkvKiBsYXN0IGNoYW5nZSB0aW1lICovCisJdW5zaWduZWQgbG9uZwkJX191bnVzZWQyOworCXVuc2lnbmVkIGxvbmcJCXNlbV9uc2VtczsJLyogbm8uIG9mIHNlbWFwaG9yZXMgaW4gYXJyYXkgKi8KKwl1bnNpZ25lZCBsb25nCQlfX3VudXNlZDM7CisJdW5zaWduZWQgbG9uZwkJX191bnVzZWQ0OworfTsKKworI2VuZGlmIC8qIF9BU01fU0VNQlVGX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L3NlcmlhbC1yZWdzLmggYi9pbmNsdWRlL2FzbS1mcnYvc2VyaWFsLXJlZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTI4NmJkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tZnJ2L3NlcmlhbC1yZWdzLmgKQEAgLTAsMCArMSw0NCBAQAorLyogc2VyaWFsLXJlZ3MuaDogc2VyaWFsIHBvcnQgcmVnaXN0ZXJzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzIFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgX0FTTV9TRVJJQUxfUkVHU19ICisjZGVmaW5lIF9BU01fU0VSSUFMX1JFR1NfSAorCisjaW5jbHVkZSA8bGludXgvc2VyaWFsX3JlZy5oPgorI2luY2x1ZGUgPGFzbS9pcmMtcmVncy5oPgorCisjZGVmaW5lIFNFUklBTF9JQ0xLCTMzMzMzMzMzCS8qIHRoZSB0YXJnZXQgc2VyaWFsIGlucHV0IGNsb2NrICovCisjZGVmaW5lIFVBUlQwX0JBU0UJMHhmZWZmOWMwMAorI2RlZmluZSBVQVJUMV9CQVNFCTB4ZmVmZjljNDAKKworI2RlZmluZSBfX2dldF9VQVJUMChSKSAoeyBfX3JlZyhVQVJUMF9CQVNFICsgKFIpICogOCkgPj4gMjQ7IH0pCisjZGVmaW5lIF9fZ2V0X1VBUlQxKFIpICh7IF9fcmVnKFVBUlQxX0JBU0UgKyAoUikgKiA4KSA+PiAyNDsgfSkKKyNkZWZpbmUgX19zZXRfVUFSVDAoUixWKSBkbyB7IF9fcmVnKFVBUlQwX0JBU0UgKyAoUikgKiA4KSA9IChWKSA8PCAyNDsgfSB3aGlsZSgwKQorI2RlZmluZSBfX3NldF9VQVJUMShSLFYpIGRvIHsgX19yZWcoVUFSVDFfQkFTRSArIChSKSAqIDgpID0gKFYpIDw8IDI0OyB9IHdoaWxlKDApCisKKyNkZWZpbmUgX19nZXRfVUFSVDBfTFNSKCkgKHsgX19nZXRfVUFSVDAoVUFSVF9MU1IpOyB9KQorI2RlZmluZSBfX2dldF9VQVJUMV9MU1IoKSAoeyBfX2dldF9VQVJUMShVQVJUX0xTUik7IH0pCisKKyNkZWZpbmUgX19zZXRfVUFSVDBfSUVSKFYpIF9fc2V0X1VBUlQwKFVBUlRfSUVSLChWKSkKKyNkZWZpbmUgX19zZXRfVUFSVDFfSUVSKFYpIF9fc2V0X1VBUlQxKFVBUlRfSUVSLChWKSkKKworLyogc2VyaWFsIHByZXNjYWxlciBzZWxlY3QgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgX19nZXRfVUNQU1IoKQkoeyAqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoMHhmZWZmOWM5MCk7IH0pCisjZGVmaW5lIF9fc2V0X1VDUFNSKFYpCWRvIHsgKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKDB4ZmVmZjljOTApID0gKFYpOyB9IHdoaWxlKDApCisjZGVmaW5lIFVDUFNSX1NFTEVDVDAJMHgwNzAwMDAwMAorI2RlZmluZSBVQ1BTUl9TRUxFQ1QxCTB4MzgwMDAwMDAKKworLyogc2VyaWFsIHByZXNjYWxlciBiYXNlIHZhbHVlIHJlZ2lzdGVyICovCisjZGVmaW5lIF9fZ2V0X1VDUFZSKCkJKHsgKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKDB4ZmVmZjljOTgpOyBtYigpOyB9KQorI2RlZmluZSBfX3NldF9VQ1BWUihWKQlkbyB7ICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSgweGZlZmY5Yzk4KSA9IChWKSA8PCAyNDsgbWIoKTsgfSB3aGlsZSgwKQorCisKKyNlbmRpZiAvKiBfQVNNX1NFUklBTF9SRUdTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9zZXJpYWwuaCBiL2luY2x1ZGUvYXNtLWZydi9zZXJpYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTE3ZDU1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tZnJ2L3NlcmlhbC5oCkBAIC0wLDAgKzEsMTkgQEAKKy8qCisgKiBzZXJpYWwuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMyBEZXZlbGVyIFMuci5sLiAoaHR0cDovL3d3dy5kZXZlbGVyLmNvbS8pCisgKiBBdXRob3I6IEJlcm5hcmRvIElubm9jZW50aSA8YmVybmllQGNvZGV3aXoub3JnPgorICoKKyAqIEJhc2VkIG9uIGxpbnV4L2luY2x1ZGUvYXNtLWkzODYvc2VyaWFsLmgKKyAqLworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS9zZXJpYWwtcmVncy5oPgorCisvKgorICogdGhlIGJhc2UgYmF1ZCBpcyBkZXJpdmVkIGZyb20gdGhlIGNsb2NrIHNwZWVkIGFuZCBzbyBpcyB2YXJpYWJsZQorICovCisjZGVmaW5lIEJBU0VfQkFVRCAwCisKKyNkZWZpbmUgU1REX0NPTV9GTEFHUwkJQVNZTkNfQk9PVF9BVVRPQ09ORgorCisjZGVmaW5lIFNFUklBTF9QT1JUX0RGTlMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9zZXR1cC5oIGIvaW5jbHVkZS9hc20tZnJ2L3NldHVwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQyOTNiOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWZydi9zZXR1cC5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qIHNldHVwLmg6IHNldHVwIHN0dWZmCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgX0FTTV9TRVRVUF9ICisjZGVmaW5lIF9BU01fU0VUVVBfSAorCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjaWZkZWYgQ09ORklHX01NVQorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19pbml0ZGF0YSBudW1fbWFwcGVkcGFnZXM7CisjZW5kaWYKKworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKworI2VuZGlmIC8qIF9BU01fU0VUVVBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L3NobWJ1Zi5oIGIvaW5jbHVkZS9hc20tZnJ2L3NobWJ1Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjNmU3MTEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1mcnYvc2htYnVmLmgKQEAgLTAsMCArMSw0MyBAQAorI2lmbmRlZiBfQVNNX1NITUJVRl9ICisjZGVmaW5lIF9BU01fU0hNQlVGX0gKKworLyoKKyAqIFRoZSBzaG1pZDY0X2RzIHN0cnVjdHVyZSBmb3IgRlItViBhcmNoaXRlY3R1cmUuCisgKiBOb3RlIGV4dHJhIHBhZGRpbmcgYmVjYXVzZSB0aGlzIHN0cnVjdHVyZSBpcyBwYXNzZWQgYmFjayBhbmQgZm9ydGgKKyAqIGJldHdlZW4ga2VybmVsIGFuZCB1c2VyIHNwYWNlLgorICoKKyAqIFBhZCBzcGFjZSBpcyBsZWZ0IGZvcjoKKyAqIC0gNjQtYml0IHRpbWVfdCB0byBzb2x2ZSB5MjAzOCBwcm9ibGVtCisgKiAtIDIgbWlzY2VsbGFuZW91cyAzMi1iaXQgdmFsdWVzCisgKi8KKworc3RydWN0IHNobWlkNjRfZHMgeworCXN0cnVjdCBpcGM2NF9wZXJtCXNobV9wZXJtOwkvKiBvcGVyYXRpb24gcGVybXMgKi8KKwlzaXplX3QJCQlzaG1fc2Vnc3o7CS8qIHNpemUgb2Ygc2VnbWVudCAoYnl0ZXMpICovCisJX19rZXJuZWxfdGltZV90CQlzaG1fYXRpbWU7CS8qIGxhc3QgYXR0YWNoIHRpbWUgKi8KKwl1bnNpZ25lZCBsb25nCQlfX3VudXNlZDE7CisJX19rZXJuZWxfdGltZV90CQlzaG1fZHRpbWU7CS8qIGxhc3QgZGV0YWNoIHRpbWUgKi8KKwl1bnNpZ25lZCBsb25nCQlfX3VudXNlZDI7CisJX19rZXJuZWxfdGltZV90CQlzaG1fY3RpbWU7CS8qIGxhc3QgY2hhbmdlIHRpbWUgKi8KKwl1bnNpZ25lZCBsb25nCQlfX3VudXNlZDM7CisJX19rZXJuZWxfcGlkX3QJCXNobV9jcGlkOwkvKiBwaWQgb2YgY3JlYXRvciAqLworCV9fa2VybmVsX3BpZF90CQlzaG1fbHBpZDsJLyogcGlkIG9mIGxhc3Qgb3BlcmF0b3IgKi8KKwl1bnNpZ25lZCBsb25nCQlzaG1fbmF0dGNoOwkvKiBuby4gb2YgY3VycmVudCBhdHRhY2hlcyAqLworCXVuc2lnbmVkIGxvbmcJCV9fdW51c2VkNDsKKwl1bnNpZ25lZCBsb25nCQlfX3VudXNlZDU7Cit9OworCitzdHJ1Y3Qgc2htaW5mbzY0IHsKKwl1bnNpZ25lZCBsb25nCXNobW1heDsKKwl1bnNpZ25lZCBsb25nCXNobW1pbjsKKwl1bnNpZ25lZCBsb25nCXNobW1uaTsKKwl1bnNpZ25lZCBsb25nCXNobXNlZzsKKwl1bnNpZ25lZCBsb25nCXNobWFsbDsKKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkMTsKKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkMjsKKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkMzsKKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkNDsKK307CisKKyNlbmRpZiAvKiBfQVNNX1NITUJVRl9IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9zaG1wYXJhbS5oIGIvaW5jbHVkZS9hc20tZnJ2L3NobXBhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI3MTEwMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWZydi9zaG1wYXJhbS5oCkBAIC0wLDAgKzEsNyBAQAorI2lmbmRlZiBfQVNNX1NITVBBUkFNX0gKKyNkZWZpbmUgX0FTTV9TSE1QQVJBTV9ICisKKyNkZWZpbmUJU0hNTEJBIFBBR0VfU0laRQkJIC8qIGF0dGFjaCBhZGRyIGEgbXVsdGlwbGUgb2YgdGhpcyAqLworCisjZW5kaWYgLyogX0FTTV9TSE1QQVJBTV9IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9zaWdjb250ZXh0LmggYi9pbmNsdWRlL2FzbS1mcnYvc2lnY29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMjYzZjMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1mcnYvc2lnY29udGV4dC5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qIHNpZ2NvbnRleHQuaDogRlJWIHNpZ25hbCBjb250ZXh0CisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzIFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisjaWZuZGVmIF9BU01fU0lHQ09OVEVYVF9ICisjZGVmaW5lIF9BU01fU0lHQ09OVEVYVF9ICisKKyNpbmNsdWRlIDxhc20vcmVnaXN0ZXJzLmg+CisKKy8qCisgKiBTaWduYWwgY29udGV4dCBzdHJ1Y3R1cmUgLSBjb250YWlucyBhbGwgaW5mbyB0byBkbyB3aXRoIHRoZSBzdGF0ZQorICogYmVmb3JlIHRoZSBzaWduYWwgaGFuZGxlciB3YXMgaW52b2tlZC4gIE5vdGU6IG9ubHkgYWRkIG5ldyBlbnRyaWVzCisgKiB0byB0aGUgZW5kIG9mIHRoZSBzdHJ1Y3R1cmUuCisgKi8KK3N0cnVjdCBzaWdjb250ZXh0IHsKKwlzdHJ1Y3QgdXNlcl9jb250ZXh0CXNjX2NvbnRleHQ7CisJdW5zaWduZWQgbG9uZwkJc2Nfb2xkbWFzazsgCS8qIG9sZCBzaWdtYXNrICovCit9IF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvc2lnaW5mby5oIGIvaW5jbHVkZS9hc20tZnJ2L3NpZ2luZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2ZkMWNhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tZnJ2L3NpZ2luZm8uaApAQCAtMCwwICsxLDEyIEBACisjaWZuZGVmIF9BU01fU0lHSU5GT19ICisjZGVmaW5lIF9BU01fU0lHSU5GT19ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NpZ2luZm8uaD4KKworI2RlZmluZSBGUEVfTURBT1ZGCShfX1NJX0ZBVUxUfDkpCS8qIG1lZGlhIG92ZXJmbG93ICovCisjdW5kZWYgTlNJR0ZQRQorI2RlZmluZSBOU0lHRlBFCQk5CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvc2lnbmFsLmggYi9pbmNsdWRlL2FzbS1mcnYvc2lnbmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE4OTUyZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWZydi9zaWduYWwuaApAQCAtMCwwICsxLDE4NyBAQAorI2lmbmRlZiBfQVNNX1NJR05BTF9ICisjZGVmaW5lIF9BU01fU0lHTkFMX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qIEF2b2lkIHRvbyBtYW55IGhlYWRlciBvcmRlcmluZyBwcm9ibGVtcy4gICovCitzdHJ1Y3Qgc2lnaW5mbzsKKworI2lmZGVmIF9fS0VSTkVMX18KKy8qIE1vc3QgdGhpbmdzIHNob3VsZCBiZSBjbGVhbiBlbm91Z2ggdG8gcmVkZWZpbmUgdGhpcyBhdCB3aWxsLCBpZiBjYXJlCisgICBpcyB0YWtlbiB0byBtYWtlIGxpYmMgbWF0Y2guICAqLworCisjZGVmaW5lIF9OU0lHCQk2NAorI2RlZmluZSBfTlNJR19CUFcJMzIKKyNkZWZpbmUgX05TSUdfV09SRFMJKF9OU0lHIC8gX05TSUdfQlBXKQorCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgb2xkX3NpZ3NldF90OwkJLyogYXQgbGVhc3QgMzIgYml0cyAqLworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgbG9uZyBzaWdbX05TSUdfV09SRFNdOworfSBzaWdzZXRfdDsKKworI2Vsc2UKKy8qIEhlcmUgd2UgbXVzdCBjYXRlciB0byBsaWJjcyB0aGF0IHBva2UgYWJvdXQgaW4ga2VybmVsIGhlYWRlcnMuICAqLworCisjZGVmaW5lIE5TSUcJCTMyCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgc2lnc2V0X3Q7CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNkZWZpbmUgU0lHSFVQCQkgMQorI2RlZmluZSBTSUdJTlQJCSAyCisjZGVmaW5lIFNJR1FVSVQJCSAzCisjZGVmaW5lIFNJR0lMTAkJIDQKKyNkZWZpbmUgU0lHVFJBUAkJIDUKKyNkZWZpbmUgU0lHQUJSVAkJIDYKKyNkZWZpbmUgU0lHSU9UCQkgNgorI2RlZmluZSBTSUdCVVMJCSA3CisjZGVmaW5lIFNJR0ZQRQkJIDgKKyNkZWZpbmUgU0lHS0lMTAkJIDkKKyNkZWZpbmUgU0lHVVNSMQkJMTAKKyNkZWZpbmUgU0lHU0VHVgkJMTEKKyNkZWZpbmUgU0lHVVNSMgkJMTIKKyNkZWZpbmUgU0lHUElQRQkJMTMKKyNkZWZpbmUgU0lHQUxSTQkJMTQKKyNkZWZpbmUgU0lHVEVSTQkJMTUKKyNkZWZpbmUgU0lHU1RLRkxUCTE2CisjZGVmaW5lIFNJR0NITEQJCTE3CisjZGVmaW5lIFNJR0NPTlQJCTE4CisjZGVmaW5lIFNJR1NUT1AJCTE5CisjZGVmaW5lIFNJR1RTVFAJCTIwCisjZGVmaW5lIFNJR1RUSU4JCTIxCisjZGVmaW5lIFNJR1RUT1UJCTIyCisjZGVmaW5lIFNJR1VSRwkJMjMKKyNkZWZpbmUgU0lHWENQVQkJMjQKKyNkZWZpbmUgU0lHWEZTWgkJMjUKKyNkZWZpbmUgU0lHVlRBTFJNCTI2CisjZGVmaW5lIFNJR1BST0YJCTI3CisjZGVmaW5lIFNJR1dJTkNICTI4CisjZGVmaW5lIFNJR0lPCQkyOQorI2RlZmluZSBTSUdQT0xMCQlTSUdJTworLyoKKyNkZWZpbmUgU0lHTE9TVAkJMjkKKyovCisjZGVmaW5lIFNJR1BXUgkJMzAKKyNkZWZpbmUgU0lHU1lTCQkzMQorI2RlZmluZQlTSUdVTlVTRUQJMzEKKworLyogVGhlc2Ugc2hvdWxkIG5vdCBiZSBjb25zaWRlcmVkIGNvbnN0YW50cyBmcm9tIHVzZXJsYW5kLiAgKi8KKyNkZWZpbmUgU0lHUlRNSU4JMzIKKyNkZWZpbmUgU0lHUlRNQVgJKF9OU0lHLTEpCisKKy8qCisgKiBTQV9GTEFHUyB2YWx1ZXM6CisgKgorICogU0FfT05TVEFDSyBpbmRpY2F0ZXMgdGhhdCBhIHJlZ2lzdGVyZWQgc3RhY2tfdCB3aWxsIGJlIHVzZWQuCisgKiBTQV9JTlRFUlJVUFQgaXMgYSBuby1vcCwgYnV0IGxlZnQgZHVlIHRvIGhpc3RvcmljYWwgcmVhc29ucy4gVXNlIHRoZQorICogU0FfUkVTVEFSVCBmbGFnIHRvIGdldCByZXN0YXJ0aW5nIHNpZ25hbHMgKHdoaWNoIHdlcmUgdGhlIGRlZmF1bHQgbG9uZyBhZ28pCisgKiBTQV9OT0NMRFNUT1AgZmxhZyB0byB0dXJuIG9mZiBTSUdDSExEIHdoZW4gY2hpbGRyZW4gc3RvcC4KKyAqIFNBX1JFU0VUSEFORCBjbGVhcnMgdGhlIGhhbmRsZXIgd2hlbiB0aGUgc2lnbmFsIGlzIGRlbGl2ZXJlZC4KKyAqIFNBX05PQ0xEV0FJVCBmbGFnIG9uIFNJR0NITEQgdG8gaW5oaWJpdCB6b21iaWVzLgorICogU0FfTk9ERUZFUiBwcmV2ZW50cyB0aGUgY3VycmVudCBzaWduYWwgZnJvbSBiZWluZyBtYXNrZWQgaW4gdGhlIGhhbmRsZXIuCisgKgorICogU0FfT05FU0hPVCBhbmQgU0FfTk9NQVNLIGFyZSB0aGUgaGlzdG9yaWNhbCBMaW51eCBuYW1lcyBmb3IgdGhlIFNpbmdsZQorICogVW5peCBuYW1lcyBSRVNFVEhBTkQgYW5kIE5PREVGRVIgcmVzcGVjdGl2ZWx5LgorICovCisjZGVmaW5lIFNBX05PQ0xEU1RPUAkweDAwMDAwMDAxCisjZGVmaW5lIFNBX05PQ0xEV0FJVAkweDAwMDAwMDAyIC8qIG5vdCBzdXBwb3J0ZWQgeWV0ICovCisjZGVmaW5lIFNBX1NJR0lORk8JMHgwMDAwMDAwNAorI2RlZmluZSBTQV9PTlNUQUNLCTB4MDgwMDAwMDAKKyNkZWZpbmUgU0FfUkVTVEFSVAkweDEwMDAwMDAwCisjZGVmaW5lIFNBX05PREVGRVIJMHg0MDAwMDAwMAorI2RlZmluZSBTQV9SRVNFVEhBTkQJMHg4MDAwMDAwMAorCisjZGVmaW5lIFNBX05PTUFTSwlTQV9OT0RFRkVSCisjZGVmaW5lIFNBX09ORVNIT1QJU0FfUkVTRVRIQU5ECisjZGVmaW5lIFNBX0lOVEVSUlVQVAkweDIwMDAwMDAwIC8qIGR1bW15IC0tIGlnbm9yZWQgKi8KKworI2RlZmluZSBTQV9SRVNUT1JFUgkweDA0MDAwMDAwCisKKy8qCisgKiBzaWdhbHRzdGFjayBjb250cm9scworICovCisjZGVmaW5lIFNTX09OU1RBQ0sJMQorI2RlZmluZSBTU19ESVNBQkxFCTIKKworI2RlZmluZSBNSU5TSUdTVEtTWgkyMDQ4CisjZGVmaW5lIFNJR1NUS1NaCTgxOTIKKworI2lmZGVmIF9fS0VSTkVMX18KKworLyoKKyAqIFRoZXNlIHZhbHVlcyBvZiBzYV9mbGFncyBhcmUgdXNlZCBvbmx5IGJ5IHRoZSBrZXJuZWwgYXMgcGFydCBvZiB0aGUKKyAqIGlycSBoYW5kbGluZyByb3V0aW5lcy4KKyAqCisgKiBTQV9JTlRFUlJVUFQgaXMgYWxzbyB1c2VkIGJ5IHRoZSBpcnEgaGFuZGxpbmcgcm91dGluZXMuCisgKiBTQV9TSElSUSBpcyBmb3Igc2hhcmVkIGludGVycnVwdCBzdXBwb3J0IG9uIFBDSSBhbmQgRUlTQS4KKyAqLworI2RlZmluZSBTQV9QUk9CRQkJU0FfT05FU0hPVAorI2RlZmluZSBTQV9TQU1QTEVfUkFORE9NCVNBX1JFU1RBUlQKKyNkZWZpbmUgU0FfU0hJUlEJCTB4MDQwMDAwMDAKKyNlbmRpZgorCisjZGVmaW5lIFNJR19CTE9DSyAgICAgICAgICAwCS8qIGZvciBibG9ja2luZyBzaWduYWxzICovCisjZGVmaW5lIFNJR19VTkJMT0NLICAgICAgICAxCS8qIGZvciB1bmJsb2NraW5nIHNpZ25hbHMgKi8KKyNkZWZpbmUgU0lHX1NFVE1BU0sgICAgICAgIDIJLyogZm9yIHNldHRpbmcgdGhlIHNpZ25hbCBtYXNrICovCisKKy8qIFR5cGUgb2YgYSBzaWduYWwgaGFuZGxlci4gICovCit0eXBlZGVmIHZvaWQgKCpfX3NpZ2hhbmRsZXJfdCkoaW50KTsKKworI2RlZmluZSBTSUdfREZMCSgoX19zaWdoYW5kbGVyX3QpMCkJLyogZGVmYXVsdCBzaWduYWwgaGFuZGxpbmcgKi8KKyNkZWZpbmUgU0lHX0lHTgkoKF9fc2lnaGFuZGxlcl90KTEpCS8qIGlnbm9yZSBzaWduYWwgKi8KKyNkZWZpbmUgU0lHX0VSUgkoKF9fc2lnaGFuZGxlcl90KS0xKQkvKiBlcnJvciByZXR1cm4gZnJvbSBzaWduYWwgKi8KKworI2lmZGVmIF9fS0VSTkVMX18KK3N0cnVjdCBvbGRfc2lnYWN0aW9uIHsKKwlfX3NpZ2hhbmRsZXJfdCBzYV9oYW5kbGVyOworCW9sZF9zaWdzZXRfdCBzYV9tYXNrOworCXVuc2lnbmVkIGxvbmcgc2FfZmxhZ3M7CisJdm9pZCAoKnNhX3Jlc3RvcmVyKSh2b2lkKTsKK307CisKK3N0cnVjdCBzaWdhY3Rpb24geworCV9fc2lnaGFuZGxlcl90IHNhX2hhbmRsZXI7CisJdW5zaWduZWQgbG9uZyBzYV9mbGFnczsKKwl2b2lkICgqc2FfcmVzdG9yZXIpKHZvaWQpOworCXNpZ3NldF90IHNhX21hc2s7CQkvKiBtYXNrIGxhc3QgZm9yIGV4dGVuc2liaWxpdHkgKi8KK307CisKK3N0cnVjdCBrX3NpZ2FjdGlvbiB7CisJc3RydWN0IHNpZ2FjdGlvbiBzYTsKK307CisjZWxzZQorLyogSGVyZSB3ZSBtdXN0IGNhdGVyIHRvIGxpYmNzIHRoYXQgcG9rZSBhYm91dCBpbiBrZXJuZWwgaGVhZGVycy4gICovCisKK3N0cnVjdCBzaWdhY3Rpb24geworCXVuaW9uIHsKKwkgIF9fc2lnaGFuZGxlcl90IF9zYV9oYW5kbGVyOworCSAgdm9pZCAoKl9zYV9zaWdhY3Rpb24pKGludCwgc3RydWN0IHNpZ2luZm8gKiwgdm9pZCAqKTsKKwl9IF91OworCXNpZ3NldF90IHNhX21hc2s7CisJdW5zaWduZWQgbG9uZyBzYV9mbGFnczsKKwl2b2lkICgqc2FfcmVzdG9yZXIpKHZvaWQpOworfTsKKworI2RlZmluZSBzYV9oYW5kbGVyCV91Ll9zYV9oYW5kbGVyCisjZGVmaW5lIHNhX3NpZ2FjdGlvbglfdS5fc2Ffc2lnYWN0aW9uCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKK3R5cGVkZWYgc3RydWN0IHNpZ2FsdHN0YWNrIHsKKwl2b2lkICpzc19zcDsKKwlpbnQgc3NfZmxhZ3M7CisJc2l6ZV90IHNzX3NpemU7Cit9IHN0YWNrX3Q7CisKK2V4dGVybiBpbnQgZG9fc2lnbmFsKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzaWdzZXRfdCAqb2xkc2V0KTsKKyNkZWZpbmUgcHRyYWNlX3NpZ25hbF9kZWxpdmVyKHJlZ3MsIGNvb2tpZSkgZG8geyB9IHdoaWxlICgwKQorCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8YXNtL3NpZ2NvbnRleHQuaD4KKyN1bmRlZiBfX0hBVkVfQVJDSF9TSUdfQklUT1BTCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfQVNNX1NJR05BTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvc21wLmggYi9pbmNsdWRlL2FzbS1mcnYvc21wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNhNzcxNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWZydi9zbXAuaApAQCAtMCwwICsxLDEwIEBACisjaWZuZGVmIF9fQVNNX1NNUF9ICisjZGVmaW5lIF9fQVNNX1NNUF9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2lmZGVmIENPTkZJR19TTVAKKyNlcnJvciBTTVAgbm90IHN1cHBvcnRlZAorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L3NvY2tldC5oIGIvaW5jbHVkZS9hc20tZnJ2L3NvY2tldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzYmUxN2MKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1mcnYvc29ja2V0LmgKQEAgLTAsMCArMSw1MSBAQAorI2lmbmRlZiBfQVNNX1NPQ0tFVF9ICisjZGVmaW5lIF9BU01fU09DS0VUX0gKKworI2luY2x1ZGUgPGFzbS9zb2NraW9zLmg+CisKKy8qIEZvciBzZXRzb2Nrb3B0KDIpICovCisjZGVmaW5lIFNPTF9TT0NLRVQJMQorCisjZGVmaW5lIFNPX0RFQlVHCTEKKyNkZWZpbmUgU09fUkVVU0VBRERSCTIKKyNkZWZpbmUgU09fVFlQRQkJMworI2RlZmluZSBTT19FUlJPUgk0CisjZGVmaW5lIFNPX0RPTlRST1VURQk1CisjZGVmaW5lIFNPX0JST0FEQ0FTVAk2CisjZGVmaW5lIFNPX1NOREJVRgk3CisjZGVmaW5lIFNPX1JDVkJVRgk4CisjZGVmaW5lIFNPX0tFRVBBTElWRQk5CisjZGVmaW5lIFNPX09PQklOTElORQkxMAorI2RlZmluZSBTT19OT19DSEVDSwkxMQorI2RlZmluZSBTT19QUklPUklUWQkxMgorI2RlZmluZSBTT19MSU5HRVIJMTMKKyNkZWZpbmUgU09fQlNEQ09NUEFUCTE0CisvKiBUbyBhZGQgOiNkZWZpbmUgU09fUkVVU0VQT1JUIDE1ICovCisjZGVmaW5lIFNPX1BBU1NDUkVECTE2CisjZGVmaW5lIFNPX1BFRVJDUkVECTE3CisjZGVmaW5lIFNPX1JDVkxPV0FUCTE4CisjZGVmaW5lIFNPX1NORExPV0FUCTE5CisjZGVmaW5lIFNPX1JDVlRJTUVPCTIwCisjZGVmaW5lIFNPX1NORFRJTUVPCTIxCisKKy8qIFNlY3VyaXR5IGxldmVscyAtIGFzIHBlciBOUkwgSVB2NiAtIGRvbid0IGFjdHVhbGx5IGRvIGFueXRoaW5nICovCisjZGVmaW5lIFNPX1NFQ1VSSVRZX0FVVEhFTlRJQ0FUSU9OCQkyMgorI2RlZmluZSBTT19TRUNVUklUWV9FTkNSWVBUSU9OX1RSQU5TUE9SVAkyMworI2RlZmluZSBTT19TRUNVUklUWV9FTkNSWVBUSU9OX05FVFdPUksJCTI0CisKKyNkZWZpbmUgU09fQklORFRPREVWSUNFCTI1CisKKy8qIFNvY2tldCBmaWx0ZXJpbmcgKi8KKyNkZWZpbmUgU09fQVRUQUNIX0ZJTFRFUiAgICAgICAgMjYKKyNkZWZpbmUgU09fREVUQUNIX0ZJTFRFUiAgICAgICAgMjcKKworI2RlZmluZSBTT19QRUVSTkFNRSAgICAgICAgICAgICAyOAorI2RlZmluZSBTT19USU1FU1RBTVAJCTI5CisjZGVmaW5lIFNDTV9USU1FU1RBTVAJCVNPX1RJTUVTVEFNUAorCisjZGVmaW5lIFNPX0FDQ0VQVENPTk4JCTMwCisKKyNkZWZpbmUgU09fUEVFUlNFQwkJMzEKKworI2VuZGlmIC8qIF9BU01fU09DS0VUX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L3NvY2tpb3MuaCBiL2luY2x1ZGUvYXNtLWZydi9zb2NraW9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE2ZTRiMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWZydi9zb2NraW9zLmgKQEAgLTAsMCArMSwxMyBAQAorI2lmbmRlZiBfQVNNX1NPQ0tJT1NfXworI2RlZmluZSBfQVNNX1NPQ0tJT1NfXworCisvKiBTb2NrZXQtbGV2ZWwgSS9PIGNvbnRyb2wgY2FsbHMuICovCisjZGVmaW5lIEZJT1NFVE9XTiAJMHg4OTAxCisjZGVmaW5lIFNJT0NTUEdSUAkweDg5MDIKKyNkZWZpbmUgRklPR0VUT1dOCTB4ODkwMworI2RlZmluZSBTSU9DR1BHUlAJMHg4OTA0CisjZGVmaW5lIFNJT0NBVE1BUksJMHg4OTA1CisjZGVmaW5lIFNJT0NHU1RBTVAJMHg4OTA2CQkvKiBHZXQgc3RhbXAgKi8KKworI2VuZGlmIC8qIF9BU01fU09DS0lPU19fICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9zcGlubG9jay5oIGIvaW5jbHVkZS9hc20tZnJ2L3NwaW5sb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmUzODVmNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWZydi9zcGlubG9jay5oCkBAIC0wLDAgKzEsMTcgQEAKKy8qIHNwaW5sb2NrLmg6IHNwaW5sb2NrcyBmb3IgRlItVgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMyBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9BU01fU1BJTkxPQ0tfSAorI2RlZmluZSBfQVNNX1NQSU5MT0NLX0gKKworI2Vycm9yIG5vIHNwaW5sb2NrcyBmb3IgRlItViB5ZXQKKworI2VuZGlmIC8qIF9BU01fU1BJTkxPQ0tfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L3Nwci1yZWdzLmggYi9pbmNsdWRlL2FzbS1mcnYvc3ByLXJlZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjQ3MmYwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tZnJ2L3Nwci1yZWdzLmgKQEAgLTAsMCArMSw0MDEgQEAKKy8qIHNwci1yZWdzLmg6IHNwZWNpYWwtcHVycG9zZSByZWdpc3RlcnMgb24gdGhlIEZSVgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9BU01fU1BSX1JFR1NfSAorI2RlZmluZSBfQVNNX1NQUl9SRUdTX0gKKworLyoKKyAqIFBTUiAtIFByb2Nlc3NvciBTdGF0dXMgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBQU1JfRVQJCQkweDAwMDAwMDAxCS8qIGVuYWJsZSBpbnRlcnJ1cHRzL2V4Y2VwdGlvbnMgZmxhZyAqLworI2RlZmluZSBQU1JfUFMJCQkweDAwMDAwMDAyCS8qIHByZXZpb3VzIHN1cGVydmlzb3IgbW9kZSBmbGFnICovCisjZGVmaW5lIFBTUl9TCQkJMHgwMDAwMDAwNAkvKiBzdXBlcnZpc29yIG1vZGUgZmxhZyAqLworI2RlZmluZSBQU1JfUElMCQkJMHgwMDAwMDA3OAkvKiBwcm9jZXNzb3IgZXh0ZXJuYWwgaW50ZXJydXB0IGxldmVsICovCisjZGVmaW5lIFBTUl9QSUxfMAkJMHgwMDAwMDAwMAkvKiAtIG5vIGludGVycnVwdCBpbiBwcm9ncmVzcyAqLworI2RlZmluZSBQU1JfUElMXzEzCQkweDAwMDAwMDY4CS8qIC0gZGVidWdnaW5nIG9ubHkgKi8KKyNkZWZpbmUgUFNSX1BJTF8xNAkJMHgwMDAwMDA3MAkvKiAtIGRlYnVnZ2luZyBpbiBwcm9ncmVzcyAqLworI2RlZmluZSBQU1JfUElMXzE1CQkweDAwMDAwMDc4CS8qIC0gTk1JIGluIHByb2dyZXNzICovCisjZGVmaW5lIFBTUl9FTQkJCTB4MDAwMDAwODAJLyogZW5hYmxlIG1lZGlhIG9wZXJhdGlvbiAqLworI2RlZmluZSBQU1JfRUYJCQkweDAwMDAwMTAwCS8qIGVuYWJsZSBGUFUgb3BlcmF0aW9uICovCisjZGVmaW5lIFBTUl9CRQkJCTB4MDAwMDEwMDAJLyogZW5kaWFubmVzcyBtb2RlICovCisjZGVmaW5lIFBTUl9CRV9MRQkJMHgwMDAwMDAwMAkvKiAtIGxpdHRsZSBlbmRpYW4gbW9kZSAqLworI2RlZmluZSBQU1JfQkVfQkUJCTB4MDAwMDEwMDAJLyogLSBiaWcgZW5kaWFuIG1vZGUgKi8KKyNkZWZpbmUgUFNSX0NNCQkJMHgwMDAwMjAwMAkvKiBjb25kaXRpb25hbCBtb2RlICovCisjZGVmaW5lIFBTUl9ORU0JCQkweDAwMDA0MDAwCS8qIG5vbi1leGNlcHRpbmcgbW9kZSAqLworI2RlZmluZSBQU1JfSUNFCQkJMHgwMDAxMDAwMAkvKiBpbi1jaXJjdWl0IGVtdWxhdGlvbiBtb2RlICovCisjZGVmaW5lIFBTUl9WRVJTSU9OX1NISUZUCTI0CQkvKiBDUFUgc2lsaWNvbiBJRCAqLworI2RlZmluZSBQU1JfSU1QTEVfU0hJRlQJCTI4CQkvKiBDUFUgY29yZSBJRCAqLworCisjZGVmaW5lIFBTUl9WRVJTSU9OKHBzcikJKCgocHNyKSA+PiBQU1JfVkVSU0lPTl9TSElGVCkgJiAweGYpCisjZGVmaW5lIFBTUl9JTVBMRShwc3IpCQkoKChwc3IpID4+IFBTUl9JTVBMRV9TSElGVCkgJiAweGYpCisKKyNkZWZpbmUgUFNSX0lNUExFX0ZSNDAxCQkweDIKKyNkZWZpbmUgUFNSX1ZFUlNJT05fRlI0MDFfTUI5MzQwMQkweDAKKyNkZWZpbmUgUFNSX1ZFUlNJT05fRlI0MDFfTUI5MzQwMUEJMHgxCisjZGVmaW5lIFBTUl9WRVJTSU9OX0ZSNDAxX01COTM0MDMJMHgyCisKKyNkZWZpbmUgUFNSX0lNUExFX0ZSNDA1CQkweDQKKyNkZWZpbmUgUFNSX1ZFUlNJT05fRlI0MDVfTUI5MzQwNQkweDAKKworI2RlZmluZSBQU1JfSU1QTEVfRlI0NTEJCTB4NQorI2RlZmluZSBQU1JfVkVSU0lPTl9GUjQ1MV9NQjkzNDUxCTB4MAorCisjZGVmaW5lIFBTUl9JTVBMRV9GUjUwMQkJMHgxCisjZGVmaW5lIFBTUl9WRVJTSU9OX0ZSNTAxX01COTM1MDEJMHgxCisjZGVmaW5lIFBTUl9WRVJTSU9OX0ZSNTAxX01COTM1MDFBCTB4MgorCisjZGVmaW5lIFBTUl9JTVBMRV9GUjU1MQkJMHgzCisjZGVmaW5lIFBTUl9WRVJTSU9OX0ZSNTUxX01COTM1NTUJMHgxCisKKyNkZWZpbmUgX19nZXRfUFNSKCkJKHsgdW5zaWduZWQgbG9uZyB4OyBhc20gdm9sYXRpbGUoIm1vdnNnIHBzciwlMCIgOiAiPXIiKHgpKTsgeDsgfSkKKyNkZWZpbmUgX19zZXRfUFNSKFYpCWRvIHsgYXNtIHZvbGF0aWxlKCJtb3ZncyAlMCxwc3IiIDogOiAiciIoVikpOyB9IHdoaWxlKDApCisKKy8qCisgKiBUQlIgLSBUcmFwIEJhc2UgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBUQlJfVFQJCQkweDAwMDAwZmYwCisjZGVmaW5lIFRCUl9UVF9JTlNUUl9NTVVfTUlTUwkoMHgwMSA8PCA0KQorI2RlZmluZSBUQlJfVFRfSU5TVFJfQUNDX0VSUk9SCSgweDAyIDw8IDQpCisjZGVmaW5lIFRCUl9UVF9JTlNUUl9BQ0NfRVhDRVAJKDB4MDMgPDwgNCkKKyNkZWZpbmUgVEJSX1RUX1BSSVZfSU5TVFIJKDB4MDYgPDwgNCkKKyNkZWZpbmUgVEJSX1RUX0lMTEVHQUxfSU5TVFIJKDB4MDcgPDwgNCkKKyNkZWZpbmUgVEJSX1RUX0ZQX0VYQ0VQVElPTgkoMHgwZCA8PCA0KQorI2RlZmluZSBUQlJfVFRfTVBfRVhDRVBUSU9OCSgweDBlIDw8IDQpCisjZGVmaW5lIFRCUl9UVF9EQVRBX0FDQ19FUlJPUgkoMHgxMSA8PCA0KQorI2RlZmluZSBUQlJfVFRfREFUQV9NTVVfTUlTUwkoMHgxMiA8PCA0KQorI2RlZmluZSBUQlJfVFRfREFUQV9BQ0NfRVhDRVAJKDB4MTMgPDwgNCkKKyNkZWZpbmUgVEJSX1RUX0RBVEFfU1RSX0VSUk9SCSgweDE0IDw8IDQpCisjZGVmaW5lIFRCUl9UVF9ESVZJU0lPTl9FWENFUAkoMHgxNyA8PCA0KQorI2RlZmluZSBUQlJfVFRfQ09NTUlUX0VYQ0VQCSgweDE5IDw8IDQpCisjZGVmaW5lIFRCUl9UVF9JTlNUUl9UTEJfTUlTUwkoMHgxYSA8PCA0KQorI2RlZmluZSBUQlJfVFRfREFUQV9UTEJfTUlTUwkoMHgxYiA8PCA0KQorI2RlZmluZSBUQlJfVFRfREFUQV9EQVRfRVhDRVAJKDB4MWQgPDwgNCkKKyNkZWZpbmUgVEJSX1RUX0RFQ1JFTUVOVF9USU1FUgkoMHgxZiA8PCA0KQorI2RlZmluZSBUQlJfVFRfQ09NUE9VTkRfRVhDRVAJKDB4MjAgPDwgNCkKKyNkZWZpbmUgVEJSX1RUX0lOVEVSUlVQVF8xCSgweDIxIDw8IDQpCisjZGVmaW5lIFRCUl9UVF9JTlRFUlJVUFRfMgkoMHgyMiA8PCA0KQorI2RlZmluZSBUQlJfVFRfSU5URVJSVVBUXzMJKDB4MjMgPDwgNCkKKyNkZWZpbmUgVEJSX1RUX0lOVEVSUlVQVF80CSgweDI0IDw8IDQpCisjZGVmaW5lIFRCUl9UVF9JTlRFUlJVUFRfNQkoMHgyNSA8PCA0KQorI2RlZmluZSBUQlJfVFRfSU5URVJSVVBUXzYJKDB4MjYgPDwgNCkKKyNkZWZpbmUgVEJSX1RUX0lOVEVSUlVQVF83CSgweDI3IDw8IDQpCisjZGVmaW5lIFRCUl9UVF9JTlRFUlJVUFRfOAkoMHgyOCA8PCA0KQorI2RlZmluZSBUQlJfVFRfSU5URVJSVVBUXzkJKDB4MjkgPDwgNCkKKyNkZWZpbmUgVEJSX1RUX0lOVEVSUlVQVF8xMAkoMHgyYSA8PCA0KQorI2RlZmluZSBUQlJfVFRfSU5URVJSVVBUXzExCSgweDJiIDw8IDQpCisjZGVmaW5lIFRCUl9UVF9JTlRFUlJVUFRfMTIJKDB4MmMgPDwgNCkKKyNkZWZpbmUgVEJSX1RUX0lOVEVSUlVQVF8xMwkoMHgyZCA8PCA0KQorI2RlZmluZSBUQlJfVFRfSU5URVJSVVBUXzE0CSgweDJlIDw8IDQpCisjZGVmaW5lIFRCUl9UVF9JTlRFUlJVUFRfMTUJKDB4MmYgPDwgNCkKKyNkZWZpbmUgVEJSX1RUX1RSQVAwCQkoMHg4MCA8PCA0KQorI2RlZmluZSBUQlJfVFRfVFJBUDEJCSgweDgxIDw8IDQpCisjZGVmaW5lIFRCUl9UVF9UUkFQMgkJKDB4ODIgPDwgNCkKKyNkZWZpbmUgVEJSX1RUX1RSQVAxMjYJCSgweGZlIDw8IDQpCisjZGVmaW5lIFRCUl9UVF9CUkVBSwkJKDB4ZmYgPDwgNCkKKworI2RlZmluZSBfX2dldF9UQlIoKQkoeyB1bnNpZ25lZCBsb25nIHg7IGFzbSB2b2xhdGlsZSgibW92c2cgdGJyLCUwIiA6ICI9ciIoeCkpOyB4OyB9KQorCisvKgorICogSFNSMCAtIEhhcmR3YXJlIFN0YXR1cyBSZWdpc3RlciAwCisgKi8KKyNkZWZpbmUgSFNSMF9QRE0JCTB4MDAwMDAwMDcJLyogcG93ZXIgZG93biBtb2RlICovCisjZGVmaW5lIEhTUjBfUERNX05PUk1BTAkJMHgwMDAwMDAwMAkvKiAtIG5vcm1hbCBtb2RlICovCisjZGVmaW5lIEhTUjBfUERNX0NPUkVfU0xFRVAJMHgwMDAwMDAwMQkvKiAtIENQVSBjb3JlIHNsZWVwIG1vZGUgKi8KKyNkZWZpbmUgSFNSMF9QRE1fQlVTX1NMRUVQCTB4MDAwMDAwMDMJLyogLSBidXMgc2xlZXAgbW9kZSAqLworI2RlZmluZSBIU1IwX1BETV9QTExfUlVOCTB4MDAwMDAwMDUJLyogLSBQTEwgcnVuICovCisjZGVmaW5lIEhTUjBfUERNX1BMTF9TVE9QCTB4MDAwMDAwMDcJLyogLSBQTEwgc3RvcCAqLworI2RlZmluZSBIU1IwX0dSTEUJCTB4MDAwMDAwNDAJLyogR1IgbG93ZXIgcmVnaXN0ZXIgc2V0IGVuYWJsZSAqLworI2RlZmluZSBIU1IwX0dSSEUJCTB4MDAwMDAwODAJLyogR1IgaGlnaGVyIHJlZ2lzdGVyIHNldCBlbmFibGUgKi8KKyNkZWZpbmUgSFNSMF9GUkxFCQkweDAwMDAwMTAwCS8qIEZSIGxvd2VyIHJlZ2lzdGVyIHNldCBlbmFibGUgKi8KKyNkZWZpbmUgSFNSMF9GUkhFCQkweDAwMDAwMjAwCS8qIEZSIGhpZ2hlciByZWdpc3RlciBzZXQgZW5hYmxlICovCisjZGVmaW5lIEhTUjBfR1JOCQkweDAwMDAwNDAwCS8qIEdSIHF1YW50aXR5ICovCisjZGVmaW5lIEhTUjBfR1JOXzY0CQkweDAwMDAwMDAwCS8qIC0gNjQgR1IgcmVnaXN0ZXJzICovCisjZGVmaW5lIEhTUjBfR1JOXzMyCQkweDAwMDAwNDAwCS8qIC0gMzIgR1IgcmVnaXN0ZXJzICovCisjZGVmaW5lIEhTUjBfRlJOCQkweDAwMDAwODAwCS8qIEZSIHF1YW50aXR5ICovCisjZGVmaW5lIEhTUjBfRlJOXzY0CQkweDAwMDAwMDAwCS8qIC0gNjQgRlIgcmVnaXN0ZXJzICovCisjZGVmaW5lIEhTUjBfRlJOXzMyCQkweDAwMDAwODAwCS8qIC0gMzIgRlIgcmVnaXN0ZXJzICovCisjZGVmaW5lIEhTUjBfU0EJCQkweDAwMDAxMDAwCS8qIHN0YXJ0IGFkZHJlc3MgKFJBTUJPT1QjKSAqLworI2RlZmluZSBIU1IwX0VUTUkJCTB4MDAwMDgwMDAJLyogZW5hYmxlIFRJTUVSSSAoNjQtYml0IHVwIHRpbWVyKSAqLworI2RlZmluZSBIU1IwX0VUTUQJCTB4MDAwMDQwMDAJLyogZW5hYmxlIFRJTUVSRCAoMzItYml0IGRvd24gdGltZXIpICovCisjZGVmaW5lIEhTUjBfUEVEQVQJCTB4MDAwMTAwMDAJLyogcHJldmlvdXMgREFUIG1vZGUgKi8KKyNkZWZpbmUgSFNSMF9YRURBVAkJMHgwMDAyMDAwMAkvKiBleGNlcHRpb24gREFUIG1vZGUgKi8KKyNkZWZpbmUgSFNSMF9FREFUCQkweDAwMDgwMDAwCS8qIGVuYWJsZSBEQVQgbW9kZSAqLworI2RlZmluZSBIU1IwX1JNRQkJMHgwMDQwMDAwMAkvKiBlbmFibGUgUkFNIG1vZGUgKi8KKyNkZWZpbmUgSFNSMF9FTUVNCQkweDAwODAwMDAwCS8qIGVuYWJsZSBNTVVfTWlzcyBtYXNrICovCisjZGVmaW5lIEhTUjBfRVhNTVUJCTB4MDEwMDAwMDAJLyogZW5hYmxlIGV4dGVuZGVkIE1NVSBtb2RlICovCisjZGVmaW5lIEhTUjBfRURNTVUJCTB4MDIwMDAwMDAJLyogZW5hYmxlIGRhdGEgTU1VICovCisjZGVmaW5lIEhTUjBfRUlNTVUJCTB4MDQwMDAwMDAJLyogZW5hYmxlIGluc3RydWN0aW9uIE1NVSAqLworI2RlZmluZSBIU1IwX0NCTQkJMHgwODAwMDAwMAkvKiBjb3B5IGJhY2sgbW9kZSAqLworI2RlZmluZSBIU1IwX0NCTV9XUklURV9USFJVCTB4MDAwMDAwMDAJLyogLSB3cml0ZSB0aHJvdWdoICovCisjZGVmaW5lIEhTUjBfQ0JNX0NPUFlfQkFDSwkweDA4MDAwMDAwCS8qIC0gY29weSBiYWNrICovCisjZGVmaW5lIEhTUjBfTldBCQkweDEwMDAwMDAwCS8qIG5vIHdyaXRlIGFsbG9jYXRlICovCisjZGVmaW5lIEhTUjBfRENFCQkweDQwMDAwMDAwCS8qIGRhdGEgY2FjaGUgZW5hYmxlICovCisjZGVmaW5lIEhTUjBfSUNFCQkweDgwMDAwMDAwCS8qIGluc3RydWN0aW9uIGNhY2hlIGVuYWJsZSAqLworCisjZGVmaW5lIF9fZ2V0X0hTUihSKQkoeyB1bnNpZ25lZCBsb25nIHg7IGFzbSB2b2xhdGlsZSgibW92c2cgaHNyIiNSIiwlMCIgOiAiPXIiKHgpKTsgeDsgfSkKKyNkZWZpbmUgX19zZXRfSFNSKFIsVikJZG8geyBhc20gdm9sYXRpbGUoIm1vdmdzICUwLGhzciIjUiA6IDogInIiKFYpKTsgfSB3aGlsZSgwKQorCisvKgorICogQ0NSIC0gQ29uZGl0aW9uIENvZGVzIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgQ0NSX0ZDQzAJCTB4MDAwMDAwMGYJLyogRlAvTWVkaWEgY29uZGl0aW9uIDAgKGZjYzAgcmVnKSAqLworI2RlZmluZSBDQ1JfRkNDMQkJMHgwMDAwMDBmMAkvKiBGUC9NZWRpYSBjb25kaXRpb24gMSAoZmNjMSByZWcpICovCisjZGVmaW5lIENDUl9GQ0MyCQkweDAwMDAwZjAwCS8qIEZQL01lZGlhIGNvbmRpdGlvbiAyIChmY2MyIHJlZykgKi8KKyNkZWZpbmUgQ0NSX0ZDQzMJCTB4MDAwMGYwMDAJLyogRlAvTWVkaWEgY29uZGl0aW9uIDMgKGZjYzMgcmVnKSAqLworI2RlZmluZSBDQ1JfSUNDMAkJMHgwMDBmMDAwMAkvKiBJbnRlZ2VyIGNvbmRpdGlvbiAwIChpY2MwIHJlZykgKi8KKyNkZWZpbmUgQ0NSX0lDQzBfQwkJMHgwMDAxMDAwMAkvKiAtIENhcnJ5IGZsYWcgKi8KKyNkZWZpbmUgQ0NSX0lDQzBfVgkJMHgwMDAyMDAwMAkvKiAtIE92ZXJmbG93IGZsYWcgKi8KKyNkZWZpbmUgQ0NSX0lDQzBfWgkJMHgwMDA0MDAwMAkvKiAtIFplcm8gZmxhZyAqLworI2RlZmluZSBDQ1JfSUNDMF9OCQkweDAwMDgwMDAwCS8qIC0gTmVnYXRpdmUgZmxhZyAqLworI2RlZmluZSBDQ1JfSUNDMQkJMHgwMGYwMDAwMAkvKiBJbnRlZ2VyIGNvbmRpdGlvbiAxIChpY2MxIHJlZykgKi8KKyNkZWZpbmUgQ0NSX0lDQzIJCTB4MGYwMDAwMDAJLyogSW50ZWdlciBjb25kaXRpb24gMiAoaWNjMiByZWcpICovCisjZGVmaW5lIENDUl9JQ0MzCQkweGYwMDAwMDAwCS8qIEludGVnZXIgY29uZGl0aW9uIDMgKGljYzMgcmVnKSAqLworCisvKgorICogQ0NDUiAtIENvbmRpdGlvbiBDb2RlcyBmb3IgQ29uZGl0aW9uYWwgSW5zdHJ1Y3Rpb25zIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgQ0NDUl9DQzAJCTB4MDAwMDAwMDMJLyogY29uZGl0aW9uIDAgKGNjMCByZWcpICovCisjZGVmaW5lIENDQ1JfQ0MwX0ZBTFNFCQkweDAwMDAwMDAyCS8qIC0gY29uZGl0aW9uIGlzIGZhbHNlICovCisjZGVmaW5lIENDQ1JfQ0MwX1RSVUUJCTB4MDAwMDAwMDMJLyogLSBjb25kaXRpb24gaXMgdHJ1ZSAqLworI2RlZmluZSBDQ0NSX0NDMQkJMHgwMDAwMDAwYwkvKiBjb25kaXRpb24gMSAoY2MxIHJlZykgKi8KKyNkZWZpbmUgQ0NDUl9DQzIJCTB4MDAwMDAwMzAJLyogY29uZGl0aW9uIDIgKGNjMiByZWcpICovCisjZGVmaW5lIENDQ1JfQ0MzCQkweDAwMDAwMGMwCS8qIGNvbmRpdGlvbiAzIChjYzMgcmVnKSAqLworI2RlZmluZSBDQ0NSX0NDNAkJMHgwMDAwMDMwMAkvKiBjb25kaXRpb24gNCAoY2M0IHJlZykgKi8KKyNkZWZpbmUgQ0NDUl9DQzUJCTB4MDAwMDBjMDAJLyogY29uZGl0aW9uIDUgKGNjNSByZWcpICovCisjZGVmaW5lIENDQ1JfQ0M2CQkweDAwMDAzMDAwCS8qIGNvbmRpdGlvbiA2IChjYzYgcmVnKSAqLworI2RlZmluZSBDQ0NSX0NDNwkJMHgwMDAwYzAwMAkvKiBjb25kaXRpb24gNyAoY2M3IHJlZykgKi8KKworLyoKKyAqIElTUiAtIEludGVnZXIgU3RhdHVzIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgSVNSX0VNQU0JCTB4MDAwMDAwMDEJLyogbWVtb3J5IG1pc2FsaWduZWQgYWNjZXNzIGhhbmRsaW5nICovCisjZGVmaW5lIElTUl9FTUFNX0VYQ0VQVElPTgkweDAwMDAwMDAwCS8qIC0gZ2VuZXJhdGUgZXhjZXB0aW9uICovCisjZGVmaW5lIElTUl9FTUFNX0ZVREdFCQkweDAwMDAwMDAxCS8qIC0gbWFzayBvdXQgaW52YWxpZCBhZGRyZXNzIGJpdHMgKi8KKyNkZWZpbmUgSVNSX0FFWEMJCTB4MDAwMDAwMDQJLyogYWNjcnVlZCBbb3ZlcmZsb3ddIGV4Y2VwdGlvbiAqLworI2RlZmluZSBJU1JfRFRUCQkJMHgwMDAwMDAxOAkvKiBkaXZpc2lvbiB0eXBlIHRyYXAgKi8KKyNkZWZpbmUgSVNSX0RUVF9JR05PUkUJCTB4MDAwMDAwMDAJLyogLSBpZ25vcmUgZGl2aXNpb24gZXJyb3IgKi8KKyNkZWZpbmUgSVNSX0RUVF9ESVZCWVpFUk8JMHgwMDAwMDAwOAkvKiAtIGdlbmVyYXRlIGV4Y2VwdGlvbiAqLworI2RlZmluZSBJU1JfRFRUX09WRVJGTE9XCTB4MDAwMDAwMTAJLyogLSByZWNvcmQgb3ZlcmZsb3cgKi8KKyNkZWZpbmUgSVNSX0VERQkJCTB4MDAwMDAwMjAJLyogZW5hYmxlIGRpdmlzaW9uIGV4Y2VwdGlvbiAqLworI2RlZmluZSBJU1JfUExJCQkJMHgyMDAwMDAwMAkvKiBwcmUtbG9hZCBpbnN0cnVjdGlvbiBpbmZvcm1hdGlvbiAqLworI2RlZmluZSBJU1JfUUkJCQkweDgwMDAwMDAwCS8qIHF1YWQgZGF0YSBpbXBsZW1lbnRhdGlvbiBpbmZvcm1hdGlvbiAqLworCisvKgorICogRVBDUjAgLSBFeGNlcHRpb24gUEMgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBFUENSMF9WCQkJMHgwMDAwMDAwMQkvKiByZWdpc3RlciBjb250ZW50IHZhbGlkaXR5IGluZGljYXRvciAqLworI2RlZmluZSBFUENSMF9QQwkJMHhmZmZmZmZmYwkvKiBmYXVsdGluZyBpbnN0cnVjdGlvbiBhZGRyZXNzICovCisKKy8qCisgKiBFU1IwLzE0LzE1IC0gRXhjZXB0aW9uIFN0YXR1cyBSZWdpc3RlcgorICovCisjZGVmaW5lIEVTUnhfVkFMSUQJCTB4MDAwMDAwMDEJLyogcmVnaXN0ZXIgY29udGVudCB2YWxpZGl0eSBpbmRpY2F0b3IgKi8KKyNkZWZpbmUgRVNSeF9FQwkJCTB4MDAwMDAwM2UJLyogZXhjZXB0aW9uIHR5cGUgKi8KKyNkZWZpbmUgRVNSeF9FQ19EQVRBX1NUT1JFCTB4MDAwMDAwMDAJLyogLSBkYXRhX3N0b3JlX2Vycm9yICovCisjZGVmaW5lIEVTUnhfRUNfSU5TTl9BQ0NFU1MJMHgwMDAwMDAwNgkvKiAtIGluc3RydWN0aW9uX2FjY2Vzc19lcnJvciAqLworI2RlZmluZSBFU1J4X0VDX1BSSVZfSU5TTgkweDAwMDAwMDA4CS8qIC0gcHJpdmlsZWdlZF9pbnN0cnVjdGlvbiAqLworI2RlZmluZSBFU1J4X0VDX0lMTF9JTlNOCTB4MDAwMDAwMGEJLyogLSBpbGxlZ2FsX2luc3RydWN0aW9uICovCisjZGVmaW5lIEVTUnhfRUNfTVBfRVhDRVAJMHgwMDAwMDAxYwkvKiAtIG1wX2V4Y2VwdGlvbiAqLworI2RlZmluZSBFU1J4X0VDX0RBVEFfQUNDRVNTCTB4MDAwMDAwMjAJLyogLSBkYXRhX2FjY2Vzc19lcnJvciAqLworI2RlZmluZSBFU1J4X0VDX0RJVklTSU9OCTB4MDAwMDAwMjYJLyogLSBkaXZpc2lvbl9leGNlcHRpb24gKi8KKyNkZWZpbmUgRVNSeF9FQ19JVExCX01JU1MJMHgwMDAwMDAzNAkvKiAtIGluc3RydWN0aW9uX2FjY2Vzc19UTEJfbWlzcyAqLworI2RlZmluZSBFU1J4X0VDX0RUTEJfTUlTUwkweDAwMDAwMDM2CS8qIC0gZGF0YV9hY2Nlc3NfVExCX21pc3MgKi8KKyNkZWZpbmUgRVNSeF9FQ19EQVRBX0FDQ0VTU19EQVQJMHgwMDAwMDAzYQkvKiAtIGRhdGFfYWNjZXNzX0RBVF9leGNlcHRpb24gKi8KKworI2RlZmluZSBFU1IwX0lBRUMJCTB4MDAwMDAxMDAJLyogaW5mbyBmb3IgaW5zdHJ1Y3Rpb24tYWNjZXNzLWV4Y2VwdGlvbiAqLworI2RlZmluZSBFU1IwX0lBRUNfUkVTVgkJMHgwMDAwMDAwMAkvKiAtIHJlc2VydmVkICovCisjZGVmaW5lIEVTUjBfSUFFQ19QUk9UX1ZJT0wJMHgwMDAwMDEwMAkvKiAtIHByb3RlY3Rpb24gdmlvbGF0aW9uICovCisKKyNkZWZpbmUgRVNSMF9BVFhDCQkweDAwZjAwMDAwCS8qIGFkZHJlc3MgdHJhbnNsYXRpb24gZXhjZXB0aW9uIGNvZGUgKi8KKyNkZWZpbmUgRVNSMF9BVFhDX01NVV9NSVNTCTB4MDAwMDAwMDAJLyogLSBNTVUgbWlzcyBleGNlcHRpb24gYW5kIG1vcmUgKD8pICovCisjZGVmaW5lIEVTUjBfQVRYQ19NVUxUSV9EQVQJMHgwMDgwMDAwMAkvKiAtIG11bHRpcGxlIERBVCBlbnRyeSBoaXQgKi8KKyNkZWZpbmUgRVNSMF9BVFhDX01VTFRJX1NBVAkweDAwOTAwMDAwCS8qIC0gbXVsdGlwbGUgU0FUIGVudHJ5IGhpdCAqLworI2RlZmluZSBFU1IwX0FUWENfQU1SVExCX01JU1MJMHgwMGEwMDAwMAkvKiAtIE1NVS9UTEIgbWlzcyBleGNlcHRpb24gKi8KKyNkZWZpbmUgRVNSMF9BVFhDX1BSSVZfRVhDRVAJMHgwMGMwMDAwMAkvKiAtIHByaXZpbGVnZSBwcm90ZWN0aW9uIGZhdWx0ICovCisjZGVmaW5lIEVTUjBfQVRYQ19XUF9FWENFUAkweDAwZDAwMDAwCS8qIC0gd3JpdGUgcHJvdGVjdGlvbiBmYXVsdCAqLworCisjZGVmaW5lIEVTUjBfRUFWCQkweDAwMDAwODAwCS8qIHRydWUgaWYgRUFSMCByZWdpc3RlciB2YWxpZCAqLworI2RlZmluZSBFU1IxNV9FQVYJCTB4MDAwMDA4MDAJLyogdHJ1ZSBpZiBFQVIxNSByZWdpc3RlciB2YWxpZCAqLworCisvKgorICogRVNGUjEgLSBFeGNlcHRpb24gU3RhdHVzIFZhbGlkIEZsYWcgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBFU0ZSMV9FU1IwCQkweDAwMDAwMDAxCS8qIHRydWUgaWYgRVNSMCBpcyB2YWxpZCAqLworI2RlZmluZSBFU0ZSMV9FU1IxNAkJMHgwMDAwNDAwMAkvKiB0cnVlIGlmIEVTUjE0IGlzIHZhbGlkICovCisjZGVmaW5lIEVTRlIxX0VTUjE1CQkweDAwMDA4MDAwCS8qIHRydWUgaWYgRVNSMTUgaXMgdmFsaWQgKi8KKworLyoKKyAqIE1TUiAtIE1lZGlhIFN0YXR1cyBSZWdpc3RlcgorICovCisjZGVmaW5lIE1TUjBfQU9WRgkJMHgwMDAwMDAwMQkvKiBvdmVyZmxvdyBleGNlcHRpb24gYWNjcnVlZCAqLworI2RlZmluZSBNU1J4X09WRgkJMHgwMDAwMDAwMgkvKiBvdmVyZmxvdyBleGNlcHRpb24gZGV0ZWN0ZWQgKi8KKyNkZWZpbmUgTVNSeF9TSUUJCTB4MDAwMDAwM2MJLyogbGFzdCBTSU1EIGluc3RydWN0aW9uIGV4Y2VwdGlvbiBkZXRlY3RlZCAqLworI2RlZmluZSBNU1J4X1NJRV9OT05FCQkweDAwMDAwMDAwCS8qIC0gbm9uZSBkZXRlY3RlZCAqLworI2RlZmluZSBNU1J4X1NJRV9GUmtISV9BQ0NrCTB4MDAwMDAwMjAJLyogLSBleGNlcHRpb24gYXQgRlJrSEkgb3IgQUNDayAqLworI2RlZmluZSBNU1J4X1NJRV9GUmtMT19BQ0NrMQkweDAwMDAwMDEwCS8qIC0gZXhjZXB0aW9uIGF0IEZSa0xPIG9yIEFDQ2srMSAqLworI2RlZmluZSBNU1J4X1NJRV9GUmsxSElfQUNDazIJMHgwMDAwMDAwOAkvKiAtIGV4Y2VwdGlvbiBhdCBGUmsrMUhJIG9yIEFDQ2srMiAqLworI2RlZmluZSBNU1J4X1NJRV9GUmsxTE9fQUNDazMJMHgwMDAwMDAwNAkvKiAtIGV4Y2VwdGlvbiBhdCBGUmsrMUxPIG9yIEFDQ2srMyAqLworI2RlZmluZSBNU1IwX01UVAkJMHgwMDAwNzAwMAkvKiB0eXBlIG9mIGxhc3QgbWVkaWEgdHJhcCBkZXRlY3RlZCAqLworI2RlZmluZSBNU1IwX01UVF9OT05FCQkweDAwMDAwMDAwCS8qIC0gbm9uZSBkZXRlY3RlZCAqLworI2RlZmluZSBNU1IwX01UVF9PVkVSRkxPVwkweDAwMDAxMDAwCS8qIC0gb3ZlcmZsb3cgZGV0ZWN0ZWQgKi8KKyNkZWZpbmUgTVNSMF9ISQkJCTB4MDBjMDAwMDAJLyogaGFyZHdhcmUgaW1wbGVtZW50YXRpb24gKi8KKyNkZWZpbmUgTVNSMF9ISV9ST1VORElORwkweDAwMDAwMDAwCS8qIC0gcm91bmRpbmcgbW9kZSAqLworI2RlZmluZSBNU1IwX0hJX05PTlJPVU5ESU5HCTB4MDBjMDAwMDAJLyogLSBub24tcm91bmRpbmcgbW9kZSAqLworI2RlZmluZSBNU1IwX0VNQ0kJCTB4MDEwMDAwMDAJLyogZW5hYmxlIG1lZGlhIGN1c3RvbSBpbnN0cnVjdGlvbnMgKi8KKyNkZWZpbmUgTVNSMF9TUkRBVgkJMHgxMDAwMDAwMAkvKiBzZWxlY3Qgcm91bmRpbmcgbW9kZSBvZiBNQVZFSCAqLworI2RlZmluZSBNU1IwX1NSREFWX1JEQVYJCTB4MDAwMDAwMDAJLyogLSBjb250cm9sbGVkIGJ5IE1TUi5SREFWICovCisjZGVmaW5lIE1TUjBfU1JEQVZfUkQJCTB4MTAwMDAwMDAJLyogLSBjb250cm9sbGVkIGJ5IE1TUi5SRCAqLworI2RlZmluZSBNU1IwX1JEQVYJCTB4MjAwMDAwMDAJLyogcm91bmRpbmcgbW9kZSBvZiBNQVZFSCAqLworI2RlZmluZSBNU1IwX1JEQVZfTkVBUkVTVF9NSQkweDAwMDAwMDAwCS8qIC0gcm91bmQgdG8gbmVhcmVzdCBtaW51cyAqLworI2RlZmluZSBNU1IwX1JEQVZfTkVBUkVTVF9QTAkweDIwMDAwMDAwCS8qIC0gcm91bmQgdG8gbmVhcmVzdCBwbHVzICovCisjZGVmaW5lIE1TUjBfUkQJCQkweGMwMDAwMDAwCS8qIHJvdW5kaW5nIG1vZGUgKi8KKyNkZWZpbmUgTVNSMF9SRF9ORUFSRVNUCQkweDAwMDAwMDAwCS8qIC0gbmVhcmVzdCAqLworI2RlZmluZSBNU1IwX1JEX1pFUk8JCTB4NDAwMDAwMDAJLyogLSB6ZXJvICovCisjZGVmaW5lIE1TUjBfUkRfUE9TX0lORgkJMHg4MDAwMDAwMAkvKiAtIHBvc3RpdmUgaW5maW5pdHkgKi8KKyNkZWZpbmUgTVNSMF9SRF9ORUdfSU5GCQkweGMwMDAwMDAwCS8qIC0gbmVnYXRpdmUgaW5maW5pdHkgKi8KKworLyoKKyAqIElBTVBSMC03IC0gSW5zdHJ1Y3Rpb24gQWRkcmVzcyBNYXBwaW5nIFJlZ2lzdGVyCisgKiBEQU1QUjAtNyAtIERhdGEgQWRkcmVzcyBNYXBwaW5nIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgeEFNUFJ4X1YJCTB4MDAwMDAwMDEJLyogcmVnaXN0ZXIgY29udGVudCB2YWxpZGl0eSBpbmRpY2F0b3IgKi8KKyNkZWZpbmUgREFNUFJ4X1dQCQkweDAwMDAwMDAyCS8qIHdyaXRlIHByb3RlY3QgKi8KKyNkZWZpbmUgREFNUFJ4X1dQX1JXCQkweDAwMDAwMDAwCS8qIC0gcmVhZC93cml0ZSAqLworI2RlZmluZSBEQU1QUnhfV1BfUk8JCTB4MDAwMDAwMDIJLyogLSByZWFkLW9ubHkgKi8KKyNkZWZpbmUgeEFNUFJ4X0MJCTB4MDAwMDAwMDQJLyogY2FjaGVkL3VuY2FjaGVkICovCisjZGVmaW5lIHhBTVBSeF9DX0NBQ0hFRAkJMHgwMDAwMDAwMAkvKiAtIGNhY2hlZCAqLworI2RlZmluZSB4QU1QUnhfQ19VTkNBQ0hFRAkweDAwMDAwMDA0CS8qIC0gdW5jYWNoZWQgKi8KKyNkZWZpbmUgeEFNUFJ4X1MJCTB4MDAwMDAwMDgJLyogc3VwZXJ2aXNvciBvbmx5ICovCisjZGVmaW5lIHhBTVBSeF9TX1VTRVIJCTB4MDAwMDAwMDAJLyogLSB1c2Vyc3BhY2UgY2FuIGFjY2VzcyAqLworI2RlZmluZSB4QU1QUnhfU19LRVJORUwJCTB4MDAwMDAwMDgJLyogLSBrZXJuZWwgb25seSAqLworI2RlZmluZSB4QU1QUnhfU1MJCTB4MDAwMDAwZjAJLyogc2VnbWVudCBzaXplICovCisjZGVmaW5lIHhBTVBSeF9TU18xNktiCQkweDAwMDAwMDAwCS8qIC0gMTYga2lsb2J5dGVzICovCisjZGVmaW5lIHhBTVBSeF9TU182NEtiCQkweDAwMDAwMDEwCS8qIC0gNjQga2lsb2J5dGVzICovCisjZGVmaW5lIHhBTVBSeF9TU18yNTZLYgkJMHgwMDAwMDAyMAkvKiAtIDI1NiBraWxvYnl0ZXMgKi8KKyNkZWZpbmUgeEFNUFJ4X1NTXzFNYgkJMHgwMDAwMDAzMAkvKiAtIDEgbWVnYWJ5dGUgKi8KKyNkZWZpbmUgeEFNUFJ4X1NTXzJNYgkJMHgwMDAwMDA0MAkvKiAtIDIgbWVnYWJ5dGVzICovCisjZGVmaW5lIHhBTVBSeF9TU180TWIJCTB4MDAwMDAwNTAJLyogLSA0IG1lZ2FieXRlcyAqLworI2RlZmluZSB4QU1QUnhfU1NfOE1iCQkweDAwMDAwMDYwCS8qIC0gOCBtZWdhYnl0ZXMgKi8KKyNkZWZpbmUgeEFNUFJ4X1NTXzE2TWIJCTB4MDAwMDAwNzAJLyogLSAxNiBtZWdhYnl0ZXMgKi8KKyNkZWZpbmUgeEFNUFJ4X1NTXzMyTWIJCTB4MDAwMDAwODAJLyogLSAzMiBtZWdhYnl0ZXMgKi8KKyNkZWZpbmUgeEFNUFJ4X1NTXzY0TWIJCTB4MDAwMDAwOTAJLyogLSA2NCBtZWdhYnl0ZXMgKi8KKyNkZWZpbmUgeEFNUFJ4X1NTXzEyOE1iCQkweDAwMDAwMGEwCS8qIC0gMTI4IG1lZ2FieXRlcyAqLworI2RlZmluZSB4QU1QUnhfU1NfMjU2TWIJCTB4MDAwMDAwYjAJLyogLSAyNTYgbWVnYWJ5dGVzICovCisjZGVmaW5lIHhBTVBSeF9TU181MTJNYgkJMHgwMDAwMDBjMAkvKiAtIDUxMiBtZWdhYnl0ZXMgKi8KKyNkZWZpbmUgeEFNUFJ4X1JFU0VSVkVEOAkweDAwMDAwMTAwCS8qIHJlc2VydmVkIGJpdCAqLworI2RlZmluZSB4QU1QUnhfTkcJCTB4MDAwMDAyMDAJLyogbm9uLWdsb2JhbCAqLworI2RlZmluZSB4QU1QUnhfTAkJMHgwMDAwMDQwMAkvKiBsb2NrZWQgKi8KKyNkZWZpbmUgeEFNUFJ4X00JCTB4MDAwMDA4MDAJLyogbW9kaWZpZWQgKi8KKyNkZWZpbmUgeEFNUFJ4X0QJCTB4MDAwMDEwMDAJLyogREFUIGVudHJ5ICovCisjZGVmaW5lIHhBTVBSeF9SRVNFUlZFRDEzCTB4MDAwMDIwMDAJLyogcmVzZXJ2ZWQgYml0ICovCisjZGVmaW5lIHhBTVBSeF9QUEZOCQkweGZmZjAwMDAwCS8qIHBoeXNpY2FsIHBhZ2UgZnJhbWUgbnVtYmVyICovCisKKyNkZWZpbmUgeEFNUFJ4X1ZfQklUCQkwCisjZGVmaW5lIERBTVBSeF9XUF9CSVQJCTEKKyNkZWZpbmUgeEFNUFJ4X0NfQklUCQkyCisjZGVmaW5lIHhBTVBSeF9TX0JJVAkJMworI2RlZmluZSB4QU1QUnhfUkVTRVJWRUQ4X0JJVAk4CisjZGVmaW5lIHhBTVBSeF9OR19CSVQJCTkKKyNkZWZpbmUgeEFNUFJ4X0xfQklUCQkxMAorI2RlZmluZSB4QU1QUnhfTV9CSVQJCTExCisjZGVmaW5lIHhBTVBSeF9EX0JJVAkJMTIKKyNkZWZpbmUgeEFNUFJ4X1JFU0VSVkVEMTNfQklUCTEzCisKKyNkZWZpbmUgX19nZXRfSUFNUFIoUikgKHsgdW5zaWduZWQgbG9uZyB4OyBhc20gdm9sYXRpbGUoIm1vdnNnIGlhbXByIiNSIiwlMCIgOiAiPXIiKHgpKTsgeDsgfSkKKyNkZWZpbmUgX19nZXRfREFNUFIoUikgKHsgdW5zaWduZWQgbG9uZyB4OyBhc20gdm9sYXRpbGUoIm1vdnNnIGRhbXByIiNSIiwlMCIgOiAiPXIiKHgpKTsgeDsgfSkKKworI2RlZmluZSBfX2dldF9JQU1MUihSKSAoeyB1bnNpZ25lZCBsb25nIHg7IGFzbSB2b2xhdGlsZSgibW92c2cgaWFtbHIiI1IiLCUwIiA6ICI9ciIoeCkpOyB4OyB9KQorI2RlZmluZSBfX2dldF9EQU1MUihSKSAoeyB1bnNpZ25lZCBsb25nIHg7IGFzbSB2b2xhdGlsZSgibW92c2cgZGFtbHIiI1IiLCUwIiA6ICI9ciIoeCkpOyB4OyB9KQorCisjZGVmaW5lIF9fc2V0X0lBTVBSKFIsVikgCWRvIHsgYXNtIHZvbGF0aWxlKCJtb3ZncyAlMCxpYW1wciIjUiA6IDogInIiKFYpKTsgfSB3aGlsZSgwKQorI2RlZmluZSBfX3NldF9EQU1QUihSLFYpICAJZG8geyBhc20gdm9sYXRpbGUoIm1vdmdzICUwLGRhbXByIiNSIDogOiAiciIoVikpOyB9IHdoaWxlKDApCisKKyNkZWZpbmUgX19zZXRfSUFNTFIoUixWKSAJZG8geyBhc20gdm9sYXRpbGUoIm1vdmdzICUwLGlhbWxyIiNSIDogOiAiciIoVikpOyB9IHdoaWxlKDApCisjZGVmaW5lIF9fc2V0X0RBTUxSKFIsVikgIAlkbyB7IGFzbSB2b2xhdGlsZSgibW92Z3MgJTAsZGFtbHIiI1IgOiA6ICJyIihWKSk7IH0gd2hpbGUoMCkKKworI2RlZmluZSBzYXZlX2RhbXByKFIsIF9kYW1wcikJCQkJCVwKK2RvIHsJCQkJCQkJCVwKKwlhc20gdm9sYXRpbGUoIm1vdnNnIGRhbXByIlIiLCUwIiA6ICI9ciIoX2RhbXByKSk7CVwKK30gd2hpbGUoMCkKKworI2RlZmluZSByZXN0b3JlX2RhbXByKFIsIF9kYW1wcikJCQlcCitkbyB7CQkJCQkJCVwKKwlhc20gdm9sYXRpbGUoIm1vdmdzICUwLGRhbXByIlIgOjogInIiKF9kYW1wcikpOwlcCit9IHdoaWxlKDApCisKKy8qCisgKiBBTUNSIC0gQWRkcmVzcyBNYXBwaW5nIENvbnRyb2wgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBBTUNSX0lBTVJOCQkweDAwMDAwMGZmCS8qIHF1YW50aXR5IG9mIElBTVBSIHJlZ2lzdGVycyAqLworI2RlZmluZSBBTUNSX0RBTVJOCQkweDAwMDBmZjAwCS8qIHF1YW50aXR5IG9mIERBTVBSIHJlZ2lzdGVycyAqLworCisvKgorICogVFRCUiAtIEFkZHJlc3MgVHJhbnNsYXRpb24gVGFibGUgQmFzZSBSZWdpc3RlcgorICovCisjZGVmaW5lIF9fZ2V0X1RUQlIoKQkJKHsgdW5zaWduZWQgbG9uZyB4OyBhc20gdm9sYXRpbGUoIm1vdnNnIHR0YnIsJTAiIDogIj1yIih4KSk7IHg7IH0pCisKKy8qCisgKiBUUFhSIC0gVExCIFByb2JlIEV4dGVuZCBSZWdpc3RlcgorICovCisjZGVmaW5lIFRQWFJfRQkJCTB4MDAwMDAwMDEKKyNkZWZpbmUgVFBYUl9MTUFYX1NISUZUCQkyMAorI2RlZmluZSBUUFhSX0xNQVhfU01BU0sJCTB4ZgorI2RlZmluZSBUUFhSX1dNQVhfU0hJRlQJCTI0CisjZGVmaW5lIFRQWFJfV01BWF9TTUFTSwkJMHhmCisjZGVmaW5lIFRQWFJfV0FZX1NISUZUCQkyOAorI2RlZmluZSBUUFhSX1dBWV9TTUFTSwkJMHhmCisKKy8qCisgKiBEQ1IgLSBEZWJ1ZyBDb250cm9sIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgRENSX0lCQ0UzCQkweDAwMDAwMDAxCS8qIGJyZWFrIG9uIGNvbmRpdGlvbmFsIGluc24gcG9pbnRlZCB0byBieSBJQkFSMyAqLworI2RlZmluZSBEQ1JfSUJFMwkJMHgwMDAwMDAwMgkvKiBicmVhayBvbiBpbnNuIHBvaW50ZWQgdG8gYnkgSUJBUjMgKi8KKyNkZWZpbmUgRENSX0lCQ0UxCQkweDAwMDAwMDA0CS8qIGJyZWFrIG9uIGNvbmRpdGlvbmFsIGluc24gcG9pbnRlZCB0byBieSBJQkFSMiAqLworI2RlZmluZSBEQ1JfSUJFMQkJMHgwMDAwMDAwOAkvKiBicmVhayBvbiBpbnNuIHBvaW50ZWQgdG8gYnkgSUJBUjIgKi8KKyNkZWZpbmUgRENSX0lCQ0UyCQkweDAwMDAwMDEwCS8qIGJyZWFrIG9uIGNvbmRpdGlvbmFsIGluc24gcG9pbnRlZCB0byBieSBJQkFSMSAqLworI2RlZmluZSBEQ1JfSUJFMgkJMHgwMDAwMDAyMAkvKiBicmVhayBvbiBpbnNuIHBvaW50ZWQgdG8gYnkgSUJBUjEgKi8KKyNkZWZpbmUgRENSX0lCQ0UwCQkweDAwMDAwMDQwCS8qIGJyZWFrIG9uIGNvbmRpdGlvbmFsIGluc24gcG9pbnRlZCB0byBieSBJQkFSMCAqLworI2RlZmluZSBEQ1JfSUJFMAkJMHgwMDAwMDA4MAkvKiBicmVhayBvbiBpbnNuIHBvaW50ZWQgdG8gYnkgSUJBUjAgKi8KKworI2RlZmluZSBEQ1JfRERCRTEJCTB4MDAwMDQwMDAJLyogdXNlIERCRFIxeCB3aGVuIGNoZWNraW5nIERCQVIxICovCisjZGVmaW5lIERDUl9EV0JFMQkJMHgwMDAwODAwMAkvKiBicmVhayBvbiBzdG9yZSB0byBhZGRyZXNzIGluIERCQVIxL0RCTVIxeCAqLworI2RlZmluZSBEQ1JfRFJCRTEJCTB4MDAwMTAwMDAJLyogYnJlYWsgb24gbG9hZCBmcm9tIGFkZHJlc3MgaW4gREJBUjEvREJNUjF4ICovCisjZGVmaW5lIERDUl9EREJFMAkJMHgwMDAyMDAwMAkvKiB1c2UgREJEUjB4IHdoZW4gY2hlY2tpbmcgREJBUjAgKi8KKyNkZWZpbmUgRENSX0RXQkUwCQkweDAwMDQwMDAwCS8qIGJyZWFrIG9uIHN0b3JlIHRvIGFkZHJlc3MgaW4gREJBUjAvREJNUjB4ICovCisjZGVmaW5lIERDUl9EUkJFMAkJMHgwMDA4MDAwMAkvKiBicmVhayBvbiBsb2FkIGZyb20gYWRkcmVzcyBpbiBEQkFSMC9EQk1SMHggKi8KKworI2RlZmluZSBEQ1JfRUlNCQkJMHgwYzAwMDAwMAkvKiBleHRlcm5hbCBpbnRlcnJ1cHQgZGlzYWJsZSAqLworI2RlZmluZSBEQ1JfSUJNCQkJMHgxMDAwMDAwMAkvKiBpbnN0cnVjdGlvbiBicmVhayBkaXNhYmxlICovCisjZGVmaW5lIERDUl9TRQkJCTB4MjAwMDAwMDAJLyogc2luZ2xlIHN0ZXAgZW5hYmxlICovCisjZGVmaW5lIERDUl9FQkUJCQkweDQwMDAwMDAwCS8qIGV4Y2VwdGlvbiBicmVhayBlbmFibGUgKi8KKworLyoKKyAqIEJSUiAtIEJyZWFrIEludGVycnVwdCBSZXF1ZXN0IFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgQlJSX1NUCQkJMHgwMDAwMDAwMQkvKiBzaW5nbGUtc3RlcCBkZXRlY3RlZCAqLworI2RlZmluZSBCUlJfU0IJCQkweDAwMDAwMDAyCS8qIGJyZWFrIGluc3RydWN0aW9uIGRldGVjdGVkICovCisjZGVmaW5lIEJSUl9CQgkJCTB4MDAwMDAwMDQJLyogYnJhbmNoIHdpdGggaGludCBkZXRlY3RlZCAqLworI2RlZmluZSBCUlJfQ0JCCQkJMHgwMDAwMDAwOAkvKiBicmFuY2ggdG8gTFIgZGV0ZWN0ZWQgKi8KKyNkZWZpbmUgQlJSX0lCeAkJCTB4MDAwMDAwZjAJLyogaGFyZHdhcmUgYnJlYWtwb2ludCBkZXRlY3RlZCAqLworI2RlZmluZSBCUlJfREJ4CQkJMHgwMDAwMGYwMAkvKiBoYXJkd2FyZSB3YXRjaHBvaW50IGRldGVjdGVkICovCisjZGVmaW5lIEJSUl9EQk5FeAkJMHgwMDAwZjAwMAkvKiA/ICovCisjZGVmaW5lIEJSUl9FQlRUCQkweDAwZmYwMDAwCS8qIHRyYXAgdHlwZSBvZiBleGNlcHRpb24gYnJlYWsgKi8KKyNkZWZpbmUgQlJSX1RCCQkJMHgxMDAwMDAwMAkvKiBleHRlcm5hbCBicmVhayByZXF1ZXN0IGRldGVjdGVkICovCisjZGVmaW5lIEJSUl9DQgkJCTB4MjAwMDAwMDAJLyogSUNFIGJyZWFrIGNvbW1hbmQgZGV0ZWN0ZWQgKi8KKyNkZWZpbmUgQlJSX0VCCQkJMHg0MDAwMDAwMAkvKiBleGNlcHRpb24gYnJlYWsgZGV0ZWN0ZWQgKi8KKworLyoKKyAqIEJQU1IgLSBCcmVhayBQU1IgU2F2ZSBSZWdpc3RlcgorICovCisjZGVmaW5lIEJQU1JfQkVUCQkweDAwMDAwMDAxCS8qIGZvcm1lciBQU1IuRVQgKi8KKyNkZWZpbmUgQlBTUl9CUwkJCTB4MDAwMDEwMDAJLyogZm9ybWVyIFBTUi5TICovCisKKyNlbmRpZiAvKiBfQVNNX1NQUl9SRUdTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9zdGF0LmggYi9pbmNsdWRlL2FzbS1mcnYvc3RhdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlNTZkZTkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1mcnYvc3RhdC5oCkBAIC0wLDAgKzEsMTAwIEBACisjaWZuZGVmIF9BU01fU1RBVF9ICisjZGVmaW5lIF9BU01fU1RBVF9ICisKK3N0cnVjdCBfX29sZF9rZXJuZWxfc3RhdCB7CisJdW5zaWduZWQgc2hvcnQgc3RfZGV2OworCXVuc2lnbmVkIHNob3J0IHN0X2lubzsKKwl1bnNpZ25lZCBzaG9ydCBzdF9tb2RlOworCXVuc2lnbmVkIHNob3J0IHN0X25saW5rOworCXVuc2lnbmVkIHNob3J0IHN0X3VpZDsKKwl1bnNpZ25lZCBzaG9ydCBzdF9naWQ7CisJdW5zaWduZWQgc2hvcnQgc3RfcmRldjsKKwl1bnNpZ25lZCBsb25nICBzdF9zaXplOworCXVuc2lnbmVkIGxvbmcgIHN0X2F0aW1lOworCXVuc2lnbmVkIGxvbmcgIHN0X210aW1lOworCXVuc2lnbmVkIGxvbmcgIHN0X2N0aW1lOworfTsKKworLyogVGhpcyBtYXRjaGVzIHN0cnVjdCBzdGF0IGluIHVDbGliYy9nbGliYy4gICovCitzdHJ1Y3Qgc3RhdCB7CisJdW5zaWduZWQgY2hhciBfX3BhZDFbNl07CisJdW5zaWduZWQgc2hvcnQgc3RfZGV2OworCisJdW5zaWduZWQgbG9uZyBfX3BhZDI7CisJdW5zaWduZWQgbG9uZyBzdF9pbm87CisKKwl1bnNpZ25lZCBzaG9ydCBfX3BhZDM7CisJdW5zaWduZWQgc2hvcnQgc3RfbW9kZTsKKwl1bnNpZ25lZCBzaG9ydCBfX3BhZDQ7CisJdW5zaWduZWQgc2hvcnQgc3Rfbmxpbms7CisKKwl1bnNpZ25lZCBzaG9ydCBfX3BhZDU7CisJdW5zaWduZWQgc2hvcnQgc3RfdWlkOworCXVuc2lnbmVkIHNob3J0IF9fcGFkNjsKKwl1bnNpZ25lZCBzaG9ydCBzdF9naWQ7CisKKwl1bnNpZ25lZCBjaGFyIF9fcGFkN1s2XTsKKwl1bnNpZ25lZCBzaG9ydCBzdF9yZGV2OworCisJdW5zaWduZWQgbG9uZyBfX3BhZDg7CisJdW5zaWduZWQgbG9uZyBzdF9zaXplOworCisJdW5zaWduZWQgbG9uZyBfX3BhZDk7CQkvKiBhbGlnbiA2NC1iaXQgc3RfYmxvY2tzIHRvIDItd29yZCAqLworCXVuc2lnbmVkIGxvbmcgc3RfYmxrc2l6ZTsKKworCXVuc2lnbmVkIGxvbmcgX19wYWQxMDsJLyogZnV0dXJlIHBvc3NpYmxlIHN0X2Jsb2NrcyBoaWdoIGJpdHMgKi8KKwl1bnNpZ25lZCBsb25nIHN0X2Jsb2NrczsJLyogTnVtYmVyIDUxMi1ieXRlIGJsb2NrcyBhbGxvY2F0ZWQuICovCisKKwl1bnNpZ25lZCBsb25nIF9fdW51c2VkMTsKKwl1bnNpZ25lZCBsb25nIHN0X2F0aW1lOworCisJdW5zaWduZWQgbG9uZyBfX3VudXNlZDI7CisJdW5zaWduZWQgbG9uZyBzdF9tdGltZTsKKworCXVuc2lnbmVkIGxvbmcgX191bnVzZWQzOworCXVuc2lnbmVkIGxvbmcgc3RfY3RpbWU7CisKKwl1bnNpZ25lZCBsb25nIGxvbmcgX191bnVzZWQ0OworfTsKKworLyogVGhpcyBtYXRjaGVzIHN0cnVjdCBzdGF0NjQgaW4gdUNsaWJjL2dsaWJjLiAgVGhlIGxheW91dCBpcyBleGFjdGx5CisgICB0aGUgc2FtZSBhcyB0aGF0IG9mIHN0cnVjdCBzdGF0IGFib3ZlLCB3aXRoIDY0LWJpdCB0eXBlcyB0YWtpbmcgdXAKKyAgIHNwYWNlIHRoYXQgd2FzIGZvcm1lcmx5IHVzZWQgYnkgcGFkZGluZy4gIHN0YXQgc3lzY2FsbHMgYXJlIHN0aWxsCisgICBkaWZmZXJlbnQgZnJvbSBzdGF0NjQsIHRob3VnaCwgaW4gdGhhdCB0aGUgZm9ybWVyIHRlc3RzIGZvcgorICAgb3ZlcmZsb3cuICAqLworc3RydWN0IHN0YXQ2NCB7CisJdW5zaWduZWQgY2hhciBfX3BhZDFbNl07CisJdW5zaWduZWQgc2hvcnQgc3RfZGV2OworCisJdW5zaWduZWQgbG9uZyBsb25nIHN0X2lubzsKKworCXVuc2lnbmVkIGludCBzdF9tb2RlOworCXVuc2lnbmVkIGludCBzdF9ubGluazsKKworCXVuc2lnbmVkIGxvbmcgc3RfdWlkOworCXVuc2lnbmVkIGxvbmcgc3RfZ2lkOworCisJdW5zaWduZWQgY2hhciBfX3BhZDJbNl07CisJdW5zaWduZWQgc2hvcnQgc3RfcmRldjsKKworCWxvbmcgbG9uZyBzdF9zaXplOworCisJdW5zaWduZWQgbG9uZyBfX3BhZDM7CQkvKiBhbGlnbiA2NC1iaXQgc3RfYmxvY2tzIHRvIDItd29yZCAqLworCXVuc2lnbmVkIGxvbmcgc3RfYmxrc2l6ZTsKKworCXVuc2lnbmVkIGxvbmcgX19wYWQ0OwkJLyogZnV0dXJlIHBvc3NpYmxlIHN0X2Jsb2NrcyBoaWdoIGJpdHMgKi8KKwl1bnNpZ25lZCBsb25nIHN0X2Jsb2NrczsJLyogTnVtYmVyIDUxMi1ieXRlIGJsb2NrcyBhbGxvY2F0ZWQuICovCisKKwl1bnNpZ25lZCBsb25nIHN0X2F0aW1lX25zZWM7CisJdW5zaWduZWQgbG9uZyBzdF9hdGltZTsKKworCXVuc2lnbmVkIGludCBzdF9tdGltZV9uc2VjOworCXVuc2lnbmVkIGxvbmcgc3RfbXRpbWU7CisKKwl1bnNpZ25lZCBsb25nIHN0X2N0aW1lX25zZWM7CisJdW5zaWduZWQgbG9uZyBzdF9jdGltZTsKKworCXVuc2lnbmVkIGxvbmcgbG9uZyBfX3VudXNlZDQ7Cit9OworCisjZW5kaWYgLyogX0FTTV9TVEFUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9zdGF0ZnMuaCBiL2luY2x1ZGUvYXNtLWZydi9zdGF0ZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDFmNTg2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tZnJ2L3N0YXRmcy5oCkBAIC0wLDAgKzEsNyBAQAorI2lmbmRlZiBfQVNNX1NUQVRGU19ICisjZGVmaW5lIF9BU01fU1RBVEZTX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3N0YXRmcy5oPgorCisjZW5kaWYgLyogX0FTTV9TVEFURlNfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvc3RyaW5nLmggYi9pbmNsdWRlL2FzbS1mcnYvc3RyaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVkMzEwZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWZydi9zdHJpbmcuaApAQCAtMCwwICsxLDUxIEBACisvKiBzdHJpbmcuaDogRlJWIHN0cmluZyBoYW5kbGluZworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9BU01fU1RSSU5HX0hfCisjZGVmaW5lIF9BU01fU1RSSU5HX0hfCisKKyNpZmRlZiBfX0tFUk5FTF9fIC8qIG9ubHkgc2V0IHRoZXNlIHVwIGZvciBrZXJuZWwgY29kZSAqLworCisjZGVmaW5lIF9fSEFWRV9BUkNIX01FTVNFVCAxCisjZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNQWSAxCisKK2V4dGVybiB2b2lkICptZW1zZXQodm9pZCAqLCBpbnQsIF9fa2VybmVsX3NpemVfdCk7CitleHRlcm4gdm9pZCAqbWVtY3B5KHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBfX2tlcm5lbF9zaXplX3QpOworCisjZWxzZSAvKiBLRVJORUwgKi8KKworLyoKKyAqCWxldCB1c2VyIGxpYnJhcmllcyBkZWFsIHdpdGggdGhlc2UsCisgKglJTUhPIHRoZSBrZXJuZWwgaGFzIG5vIHBsYWNlIGRlZmluaW5nIHRoZXNlIGZ1bmN0aW9ucyBmb3IgdXNlciBhcHBzCisgKi8KKworI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJDUFkgMQorI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJOQ1BZIDEKKyNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSQ0FUIDEKKyNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSTkNBVCAxCisjZGVmaW5lIF9fSEFWRV9BUkNIX1NUUkNNUCAxCisjZGVmaW5lIF9fSEFWRV9BUkNIX1NUUk5DTVAgMQorI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJOSUNNUCAxCisjZGVmaW5lIF9fSEFWRV9BUkNIX1NUUkNIUiAxCisjZGVmaW5lIF9fSEFWRV9BUkNIX1NUUlJDSFIgMQorI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJTVFIgMQorI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJMRU4gMQorI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJOTEVOIDEKKyNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNU0VUIDEKKyNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNQ1BZIDEKKyNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNTU9WRSAxCisjZGVmaW5lIF9fSEFWRV9BUkNIX01FTVNDQU4gMQorI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1DTVAgMQorI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1DSFIgMQorI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJUT0sgMQorCisjZW5kaWYgLyogS0VSTkVMICovCisjZW5kaWYgLyogX0FTTV9TVFJJTkdfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9zdXNwZW5kLmggYi9pbmNsdWRlL2FzbS1mcnYvc3VzcGVuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmYTdiNWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1mcnYvc3VzcGVuZC5oCkBAIC0wLDAgKzEsMjAgQEAKKy8qIHN1c3BlbmQuaDogc3VzcGVuc2lvbiBzdHVmZgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9BU01fU1VTUEVORF9ICisjZGVmaW5lIF9BU01fU1VTUEVORF9ICisKK3N0YXRpYyBpbmxpbmUgaW50IGFyY2hfcHJlcGFyZV9zdXNwZW5kKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvKiBfQVNNX1NVU1BFTkRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tZnJ2L3N5c3RlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyYWVhNzAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1mcnYvc3lzdGVtLmgKQEAgLTAsMCArMSwxMjggQEAKKy8qIHN5c3RlbS5oOiBGUi1WIENQVSBjb250cm9sIGRlZmluaXRpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzIFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgX0FTTV9TWVNURU1fSAorI2RlZmluZSBfQVNNX1NZU1RFTV9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4gLyogZ2V0IGNvbmZpZ3VyYXRpb24gbWFjcm9zICovCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKworc3RydWN0IHRocmVhZF9zdHJ1Y3Q7CisKKyNkZWZpbmUgcHJlcGFyZV90b19zd2l0Y2goKSAgICBkbyB7IH0gd2hpbGUoMCkKKworLyoKKyAqIHN3aXRjaF90byhwcmV2LCBuZXh0KSBzaG91bGQgc3dpdGNoIGZyb20gdGFzayBgcHJldicgdG8gYG5leHQnCisgKiBgcHJldicgd2lsbCBuZXZlciBiZSB0aGUgc2FtZSBhcyBgbmV4dCcuCisgKiBUaGUgYG1iJyBpcyB0byB0ZWxsIEdDQyBub3QgdG8gY2FjaGUgYGN1cnJlbnQnIGFjcm9zcyB0aGlzIGNhbGwuCisgKi8KK2V4dGVybiBhc21saW5rYWdlCitzdHJ1Y3QgdGFza19zdHJ1Y3QgKl9fc3dpdGNoX3RvKHN0cnVjdCB0aHJlYWRfc3RydWN0ICpwcmV2X3RocmVhZCwKKwkJCQlzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqbmV4dF90aHJlYWQsCisJCQkJc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2KTsKKworI2RlZmluZSBzd2l0Y2hfdG8ocHJldiwgbmV4dCwgbGFzdCkJCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJKHByZXYpLT50aHJlYWQuc2NoZWRfbHIgPQkJCQkJXAorCQkodW5zaWduZWQgbG9uZykgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApOwkJXAorCShsYXN0KSA9IF9fc3dpdGNoX3RvKCYocHJldiktPnRocmVhZCwgJihuZXh0KS0+dGhyZWFkLCAocHJldikpOwlcCisJbWIoKTsJCQkJCQkJCVwKK30gd2hpbGUoMCkKKworLyoKKyAqIGludGVycnVwdCBmbGFnIG1hbmlwdWxhdGlvbgorICovCisjZGVmaW5lIGxvY2FsX2lycV9kaXNhYmxlKCkJCQkJXAorZG8gewkJCQkJCQlcCisJdW5zaWduZWQgbG9uZyBwc3I7CQkJCVwKKwlhc20gdm9sYXRpbGUoIgltb3ZzZwlwc3IsJTAJCVxuIglcCisJCSAgICAgIglhbmRpCSUwLCUyLCUwCVxuIglcCisJCSAgICAgIglvcmkJJTAsJTEsJTAJXG4iCVwKKwkJICAgICAiCW1vdmdzCSUwLHBzcgkJXG4iCVwKKwkJICAgICA6ICI9ciIocHNyKQkJCVwKKwkJICAgICA6ICJpIiAoUFNSX1BJTF8xNCksICJpIiAoflBTUl9QSUwpCVwKKwkJICAgICA6ICJtZW1vcnkiKTsJCQlcCit9IHdoaWxlKDApCisKKyNkZWZpbmUgbG9jYWxfaXJxX2VuYWJsZSgpCQkJCVwKK2RvIHsJCQkJCQkJXAorCXVuc2lnbmVkIGxvbmcgcHNyOwkJCQlcCisJYXNtIHZvbGF0aWxlKCIJbW92c2cJcHNyLCUwCQlcbiIJXAorCQkgICAgICIJYW5kaQklMCwlMSwlMAlcbiIJXAorCQkgICAgICIJbW92Z3MJJTAscHNyCQlcbiIJXAorCQkgICAgIDogIj1yIihwc3IpCQkJXAorCQkgICAgIDogImkiICh+UFNSX1BJTCkJCQlcCisJCSAgICAgOiAibWVtb3J5Iik7CQkJXAorfSB3aGlsZSgwKQorCisjZGVmaW5lIGxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpCQkJXAorZG8gewkJCQkJCVwKKwl0eXBlY2hlY2sodW5zaWduZWQgbG9uZywgZmxhZ3MpOwlcCisJYXNtKCJtb3ZzZyBwc3IsJTAiCQkJXAorCSAgICA6ICI9ciIoZmxhZ3MpCQkJXAorCSAgICA6CQkJCQlcCisJICAgIDogIm1lbW9yeSIpOwkJCVwKK30gd2hpbGUoMCkKKworI2RlZmluZQlsb2NhbF9pcnFfc2F2ZShmbGFncykJCQkJXAorZG8gewkJCQkJCQlcCisJdW5zaWduZWQgbG9uZyBucHNyOwkJCQlcCisJdHlwZWNoZWNrKHVuc2lnbmVkIGxvbmcsIGZsYWdzKTsJCVwKKwlhc20gdm9sYXRpbGUoIgltb3ZzZwlwc3IsJTAJCVxuIglcCisJCSAgICAgIglhbmRpCSUwLCUzLCUxCVxuIglcCisJCSAgICAgIglvcmkJJTEsJTIsJTEJXG4iCVwKKwkJICAgICAiCW1vdmdzCSUxLHBzcgkJXG4iCVwKKwkJICAgICA6ICI9ciIoZmxhZ3MpLCAiPXIiKG5wc3IpCQlcCisJCSAgICAgOiAiaSIgKFBTUl9QSUxfMTQpLCAiaSIgKH5QU1JfUElMKQlcCisJCSAgICAgOiAibWVtb3J5Iik7CQkJXAorfSB3aGlsZSgwKQorCisjZGVmaW5lCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKQkJCVwKK2RvIHsJCQkJCQkJXAorCXR5cGVjaGVjayh1bnNpZ25lZCBsb25nLCBmbGFncyk7CQlcCisJYXNtIHZvbGF0aWxlKCIJbW92Z3MJJTAscHNyCQlcbiIJXAorCQkgICAgIDoJCQkJCVwKKwkJICAgICA6ICJyIiAoZmxhZ3MpCQkJXAorCQkgICAgIDogIm1lbW9yeSIpOwkJCVwKK30gd2hpbGUoMCkKKworI2RlZmluZSBpcnFzX2Rpc2FibGVkKCkgXAorCSgoX19nZXRfUFNSKCkgJiBQU1JfUElMKSA+PSBQU1JfUElMXzE0KQorCisvKgorICogRm9yY2Ugc3RyaWN0IENQVSBvcmRlcmluZy4KKyAqLworI2RlZmluZSBub3AoKQkJCWFzbSB2b2xhdGlsZSAoIm5vcCI6OikKKyNkZWZpbmUgbWIoKQkJCWFzbSB2b2xhdGlsZSAoIm1lbWJhciIgOiA6IDoibWVtb3J5IikKKyNkZWZpbmUgcm1iKCkJCQlhc20gdm9sYXRpbGUgKCJtZW1iYXIiIDogOiA6Im1lbW9yeSIpCisjZGVmaW5lIHdtYigpCQkJYXNtIHZvbGF0aWxlICgibWVtYmFyIiA6IDogOiJtZW1vcnkiKQorI2RlZmluZSBzZXRfbWIodmFyLCB2YWx1ZSkJZG8geyB2YXIgPSB2YWx1ZTsgbWIoKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgc2V0X3dtYih2YXIsIHZhbHVlKQlkbyB7IHZhciA9IHZhbHVlOyB3bWIoKTsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBzbXBfbWIoKQkJbWIoKQorI2RlZmluZSBzbXBfcm1iKCkJCXJtYigpCisjZGVmaW5lIHNtcF93bWIoKQkJd21iKCkKKworI2RlZmluZSByZWFkX2JhcnJpZXJfZGVwZW5kcygpCQlkbyB7fSB3aGlsZSgwKQorI2RlZmluZSBzbXBfcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQlyZWFkX2JhcnJpZXJfZGVwZW5kcygpCisKKyNkZWZpbmUgSEFSRF9SRVNFVF9OT1coKQkJCVwKK2RvIHsJCQkJCQlcCisJY2xpKCk7CQkJCQlcCit9IHdoaWxlKDEpCisKK2V4dGVybiB2b2lkIGRpZV9pZl9rZXJuZWwoY29uc3QgY2hhciAqLCAuLi4pIF9fYXR0cmlidXRlX18oKGZvcm1hdChwcmludGYsIDEsIDIpKSk7CitleHRlcm4gdm9pZCBmcmVlX2luaXRtZW0odm9pZCk7CisKKyNkZWZpbmUgYXJjaF9hbGlnbl9zdGFjayh4KSAoeCkKKworI2VuZGlmIC8qIF9BU01fU1lTVEVNX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi90ZXJtYml0cy5oIGIvaW5jbHVkZS9hc20tZnJ2L3Rlcm1iaXRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRmMjBkNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWZydi90ZXJtYml0cy5oCkBAIC0wLDAgKzEsMTc3IEBACisjaWZuZGVmIF9BU01fVEVSTUJJVFNfSF9fCisjZGVmaW5lIF9BU01fVEVSTUJJVFNfSF9fCisKKyNpbmNsdWRlIDxsaW51eC9wb3NpeF90eXBlcy5oPgorCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIJY2NfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50CXNwZWVkX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludAl0Y2ZsYWdfdDsKKworI2RlZmluZSBOQ0NTIDE5CitzdHJ1Y3QgdGVybWlvcyB7CisJdGNmbGFnX3QgY19pZmxhZzsJCS8qIGlucHV0IG1vZGUgZmxhZ3MgKi8KKwl0Y2ZsYWdfdCBjX29mbGFnOwkJLyogb3V0cHV0IG1vZGUgZmxhZ3MgKi8KKwl0Y2ZsYWdfdCBjX2NmbGFnOwkJLyogY29udHJvbCBtb2RlIGZsYWdzICovCisJdGNmbGFnX3QgY19sZmxhZzsJCS8qIGxvY2FsIG1vZGUgZmxhZ3MgKi8KKwljY190IGNfbGluZTsJCQkvKiBsaW5lIGRpc2NpcGxpbmUgKi8KKwljY190IGNfY2NbTkNDU107CQkvKiBjb250cm9sIGNoYXJhY3RlcnMgKi8KK307CisKKy8qIGNfY2MgY2hhcmFjdGVycyAqLworI2RlZmluZSBWSU5UUiAwCisjZGVmaW5lIFZRVUlUIDEKKyNkZWZpbmUgVkVSQVNFIDIKKyNkZWZpbmUgVktJTEwgMworI2RlZmluZSBWRU9GIDQKKyNkZWZpbmUgVlRJTUUgNQorI2RlZmluZSBWTUlOIDYKKyNkZWZpbmUgVlNXVEMgNworI2RlZmluZSBWU1RBUlQgOAorI2RlZmluZSBWU1RPUCA5CisjZGVmaW5lIFZTVVNQIDEwCisjZGVmaW5lIFZFT0wgMTEKKyNkZWZpbmUgVlJFUFJJTlQgMTIKKyNkZWZpbmUgVkRJU0NBUkQgMTMKKyNkZWZpbmUgVldFUkFTRSAxNAorI2RlZmluZSBWTE5FWFQgMTUKKyNkZWZpbmUgVkVPTDIgMTYKKworCisvKiBjX2lmbGFnIGJpdHMgKi8KKyNkZWZpbmUgSUdOQlJLCTAwMDAwMDEKKyNkZWZpbmUgQlJLSU5UCTAwMDAwMDIKKyNkZWZpbmUgSUdOUEFSCTAwMDAwMDQKKyNkZWZpbmUgUEFSTVJLCTAwMDAwMTAKKyNkZWZpbmUgSU5QQ0sJMDAwMDAyMAorI2RlZmluZSBJU1RSSVAJMDAwMDA0MAorI2RlZmluZSBJTkxDUgkwMDAwMTAwCisjZGVmaW5lIElHTkNSCTAwMDAyMDAKKyNkZWZpbmUgSUNSTkwJMDAwMDQwMAorI2RlZmluZSBJVUNMQwkwMDAxMDAwCisjZGVmaW5lIElYT04JMDAwMjAwMAorI2RlZmluZSBJWEFOWQkwMDA0MDAwCisjZGVmaW5lIElYT0ZGCTAwMTAwMDAKKyNkZWZpbmUgSU1BWEJFTAkwMDIwMDAwCisjZGVmaW5lIElVVEY4CTAwNDAwMDAKKworLyogY19vZmxhZyBiaXRzICovCisjZGVmaW5lIE9QT1NUCTAwMDAwMDEKKyNkZWZpbmUgT0xDVUMJMDAwMDAwMgorI2RlZmluZSBPTkxDUgkwMDAwMDA0CisjZGVmaW5lIE9DUk5MCTAwMDAwMTAKKyNkZWZpbmUgT05PQ1IJMDAwMDAyMAorI2RlZmluZSBPTkxSRVQJMDAwMDA0MAorI2RlZmluZSBPRklMTAkwMDAwMTAwCisjZGVmaW5lIE9GREVMCTAwMDAyMDAKKyNkZWZpbmUgTkxETFkJMDAwMDQwMAorI2RlZmluZSAgIE5MMAkwMDAwMDAwCisjZGVmaW5lICAgTkwxCTAwMDA0MDAKKyNkZWZpbmUgQ1JETFkJMDAwMzAwMAorI2RlZmluZSAgIENSMAkwMDAwMDAwCisjZGVmaW5lICAgQ1IxCTAwMDEwMDAKKyNkZWZpbmUgICBDUjIJMDAwMjAwMAorI2RlZmluZSAgIENSMwkwMDAzMDAwCisjZGVmaW5lIFRBQkRMWQkwMDE0MDAwCisjZGVmaW5lICAgVEFCMAkwMDAwMDAwCisjZGVmaW5lICAgVEFCMQkwMDA0MDAwCisjZGVmaW5lICAgVEFCMgkwMDEwMDAwCisjZGVmaW5lICAgVEFCMwkwMDE0MDAwCisjZGVmaW5lICAgWFRBQlMJMDAxNDAwMAorI2RlZmluZSBCU0RMWQkwMDIwMDAwCisjZGVmaW5lICAgQlMwCTAwMDAwMDAKKyNkZWZpbmUgICBCUzEJMDAyMDAwMAorI2RlZmluZSBWVERMWQkwMDQwMDAwCisjZGVmaW5lICAgVlQwCTAwMDAwMDAKKyNkZWZpbmUgICBWVDEJMDA0MDAwMAorI2RlZmluZSBGRkRMWQkwMTAwMDAwCisjZGVmaW5lICAgRkYwCTAwMDAwMDAKKyNkZWZpbmUgICBGRjEJMDEwMDAwMAorCisvKiBjX2NmbGFnIGJpdCBtZWFuaW5nICovCisjZGVmaW5lIENCQVVECTAwMTAwMTcKKyNkZWZpbmUgIEIwCTAwMDAwMDAJCS8qIGhhbmcgdXAgKi8KKyNkZWZpbmUgIEI1MAkwMDAwMDAxCisjZGVmaW5lICBCNzUJMDAwMDAwMgorI2RlZmluZSAgQjExMAkwMDAwMDAzCisjZGVmaW5lICBCMTM0CTAwMDAwMDQKKyNkZWZpbmUgIEIxNTAJMDAwMDAwNQorI2RlZmluZSAgQjIwMAkwMDAwMDA2CisjZGVmaW5lICBCMzAwCTAwMDAwMDcKKyNkZWZpbmUgIEI2MDAJMDAwMDAxMAorI2RlZmluZSAgQjEyMDAJMDAwMDAxMQorI2RlZmluZSAgQjE4MDAJMDAwMDAxMgorI2RlZmluZSAgQjI0MDAJMDAwMDAxMworI2RlZmluZSAgQjQ4MDAJMDAwMDAxNAorI2RlZmluZSAgQjk2MDAJMDAwMDAxNQorI2RlZmluZSAgQjE5MjAwCTAwMDAwMTYKKyNkZWZpbmUgIEIzODQwMAkwMDAwMDE3CisjZGVmaW5lIEVYVEEgQjE5MjAwCisjZGVmaW5lIEVYVEIgQjM4NDAwCisjZGVmaW5lIENTSVpFCTAwMDAwNjAKKyNkZWZpbmUgICBDUzUJMDAwMDAwMAorI2RlZmluZSAgIENTNgkwMDAwMDIwCisjZGVmaW5lICAgQ1M3CTAwMDAwNDAKKyNkZWZpbmUgICBDUzgJMDAwMDA2MAorI2RlZmluZSBDU1RPUEIJMDAwMDEwMAorI2RlZmluZSBDUkVBRAkwMDAwMjAwCisjZGVmaW5lIFBBUkVOQgkwMDAwNDAwCisjZGVmaW5lIFBBUk9ERAkwMDAxMDAwCisjZGVmaW5lIEhVUENMCTAwMDIwMDAKKyNkZWZpbmUgQ0xPQ0FMCTAwMDQwMDAKKyNkZWZpbmUgQ0JBVURFWCAwMDEwMDAwCisjZGVmaW5lICAgIEI1NzYwMCAwMDEwMDAxCisjZGVmaW5lICAgQjExNTIwMCAwMDEwMDAyCisjZGVmaW5lICAgQjIzMDQwMCAwMDEwMDAzCisjZGVmaW5lICAgQjQ2MDgwMCAwMDEwMDA0CisjZGVmaW5lICAgQjUwMDAwMCAwMDEwMDA1CisjZGVmaW5lICAgQjU3NjAwMCAwMDEwMDA2CisjZGVmaW5lICAgQjkyMTYwMCAwMDEwMDA3CisjZGVmaW5lICBCMTAwMDAwMCAwMDEwMDEwCisjZGVmaW5lICBCMTE1MjAwMCAwMDEwMDExCisjZGVmaW5lICBCMTUwMDAwMCAwMDEwMDEyCisjZGVmaW5lICBCMjAwMDAwMCAwMDEwMDEzCisjZGVmaW5lICBCMjUwMDAwMCAwMDEwMDE0CisjZGVmaW5lICBCMzAwMDAwMCAwMDEwMDE1CisjZGVmaW5lICBCMzUwMDAwMCAwMDEwMDE2CisjZGVmaW5lICBCNDAwMDAwMCAwMDEwMDE3CisjZGVmaW5lIENJQkFVRAkgIDAwMjAwMzYwMDAwMAkvKiBpbnB1dCBiYXVkIHJhdGUgKG5vdCB1c2VkKSAqLworI2RlZmluZSBDVFZCCSAgMDA0MDAwMDAwMDAwCQkvKiBWaXNpb0JyYWlsbGUgVGVybWluYWwgZmxvdyBjb250cm9sICovCisjZGVmaW5lIENNU1BBUgkgIDAxMDAwMDAwMDAwMAkJLyogbWFyayBvciBzcGFjZSAoc3RpY2spIHBhcml0eSAqLworI2RlZmluZSBDUlRTQ1RTCSAgMDIwMDAwMDAwMDAwCQkvKiBmbG93IGNvbnRyb2wgKi8KKworLyogY19sZmxhZyBiaXRzICovCisjZGVmaW5lIElTSUcJMDAwMDAwMQorI2RlZmluZSBJQ0FOT04JMDAwMDAwMgorI2RlZmluZSBYQ0FTRQkwMDAwMDA0CisjZGVmaW5lIEVDSE8JMDAwMDAxMAorI2RlZmluZSBFQ0hPRQkwMDAwMDIwCisjZGVmaW5lIEVDSE9LCTAwMDAwNDAKKyNkZWZpbmUgRUNIT05MCTAwMDAxMDAKKyNkZWZpbmUgTk9GTFNICTAwMDAyMDAKKyNkZWZpbmUgVE9TVE9QCTAwMDA0MDAKKyNkZWZpbmUgRUNIT0NUTAkwMDAxMDAwCisjZGVmaW5lIEVDSE9QUlQJMDAwMjAwMAorI2RlZmluZSBFQ0hPS0UJMDAwNDAwMAorI2RlZmluZSBGTFVTSE8JMDAxMDAwMAorI2RlZmluZSBQRU5ESU4JMDA0MDAwMAorI2RlZmluZSBJRVhURU4JMDEwMDAwMAorCisKKy8qIHRjZmxvdygpIGFuZCBUQ1hPTkMgdXNlIHRoZXNlICovCisjZGVmaW5lCVRDT09GRgkJMAorI2RlZmluZQlUQ09PTgkJMQorI2RlZmluZQlUQ0lPRkYJCTIKKyNkZWZpbmUJVENJT04JCTMKKworLyogdGNmbHVzaCgpIGFuZCBUQ0ZMU0ggdXNlIHRoZXNlICovCisjZGVmaW5lCVRDSUZMVVNICTAKKyNkZWZpbmUJVENPRkxVU0gJMQorI2RlZmluZQlUQ0lPRkxVU0gJMgorCisvKiB0Y3NldGF0dHIgdXNlcyB0aGVzZSAqLworI2RlZmluZQlUQ1NBTk9XCQkwCisjZGVmaW5lCVRDU0FEUkFJTgkxCisjZGVmaW5lCVRDU0FGTFVTSAkyCisKKyNlbmRpZiAvKiBfQVNNX1RFUk1CSVRTX0hfXyAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvdGVybWlvcy5oIGIvaW5jbHVkZS9hc20tZnJ2L3Rlcm1pb3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGE2NjRlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tZnJ2L3Rlcm1pb3MuaApAQCAtMCwwICsxLDc0IEBACisjaWZuZGVmIF9BU01fVEVSTUlPU19ICisjZGVmaW5lIF9BU01fVEVSTUlPU19ICisKKyNpbmNsdWRlIDxhc20vdGVybWJpdHMuaD4KKyNpbmNsdWRlIDxhc20vaW9jdGxzLmg+CisKK3N0cnVjdCB3aW5zaXplIHsKKwl1bnNpZ25lZCBzaG9ydCB3c19yb3c7CisJdW5zaWduZWQgc2hvcnQgd3NfY29sOworCXVuc2lnbmVkIHNob3J0IHdzX3hwaXhlbDsKKwl1bnNpZ25lZCBzaG9ydCB3c195cGl4ZWw7Cit9OworCisjZGVmaW5lIE5DQyA4CitzdHJ1Y3QgdGVybWlvIHsKKwl1bnNpZ25lZCBzaG9ydCBjX2lmbGFnOwkJLyogaW5wdXQgbW9kZSBmbGFncyAqLworCXVuc2lnbmVkIHNob3J0IGNfb2ZsYWc7CQkvKiBvdXRwdXQgbW9kZSBmbGFncyAqLworCXVuc2lnbmVkIHNob3J0IGNfY2ZsYWc7CQkvKiBjb250cm9sIG1vZGUgZmxhZ3MgKi8KKwl1bnNpZ25lZCBzaG9ydCBjX2xmbGFnOwkJLyogbG9jYWwgbW9kZSBmbGFncyAqLworCXVuc2lnbmVkIGNoYXIgY19saW5lOwkJLyogbGluZSBkaXNjaXBsaW5lICovCisJdW5zaWduZWQgY2hhciBjX2NjW05DQ107CS8qIGNvbnRyb2wgY2hhcmFjdGVycyAqLworfTsKKworI2lmZGVmIF9fS0VSTkVMX18KKy8qCWludHI9XkMJCXF1aXQ9XnwJCWVyYXNlPWRlbAlraWxsPV5VCisJZW9mPV5ECQl2dGltZT1cMAl2bWluPVwxCQlzeHRjPVwwCisJc3RhcnQ9XlEJc3RvcD1eUwkJc3VzcD1eWgkJZW9sPVwwCisJcmVwcmludD1eUglkaXNjYXJkPV5VCXdlcmFzZT1eVwlsbmV4dD1eVgorCWVvbDI9XDAKKyovCisjZGVmaW5lIElOSVRfQ19DQyAiXDAwM1wwMzRcMTc3XDAyNVwwMDRcMFwxXDBcMDIxXDAyM1wwMzJcMFwwMjJcMDE3XDAyN1wwMjZcMCIKKyNlbmRpZgorCisvKiBtb2RlbSBsaW5lcyAqLworI2RlZmluZSBUSU9DTV9MRQkweDAwMQorI2RlZmluZSBUSU9DTV9EVFIJMHgwMDIKKyNkZWZpbmUgVElPQ01fUlRTCTB4MDA0CisjZGVmaW5lIFRJT0NNX1NUCTB4MDA4CisjZGVmaW5lIFRJT0NNX1NSCTB4MDEwCisjZGVmaW5lIFRJT0NNX0NUUwkweDAyMAorI2RlZmluZSBUSU9DTV9DQVIJMHgwNDAKKyNkZWZpbmUgVElPQ01fUk5HCTB4MDgwCisjZGVmaW5lIFRJT0NNX0RTUgkweDEwMAorI2RlZmluZSBUSU9DTV9DRAlUSU9DTV9DQVIKKyNkZWZpbmUgVElPQ01fUkkJVElPQ01fUk5HCisjZGVmaW5lIFRJT0NNX09VVDEJMHgyMDAwCisjZGVmaW5lIFRJT0NNX09VVDIJMHg0MDAwCisjZGVmaW5lIFRJT0NNX0xPT1AJMHg4MDAwCisKKyNkZWZpbmUgVElPQ01fTU9ERU1fQklUUyAgICAgICBUSU9DTV9PVVQyICAgICAgLyogSVJEQSBzdXBwb3J0ICovCisKKy8qIGlvY3RsIChmZCwgVElPQ1NFUkdFVExTUiwgJnJlc3VsdCkgd2hlcmUgcmVzdWx0IG1heSBiZSBhcyBiZWxvdyAqLworCisvKiBsaW5lIGRpc2NpcGxpbmVzICovCisjZGVmaW5lIE5fVFRZCQkwCisjZGVmaW5lIE5fU0xJUAkJMQorI2RlZmluZSBOX01PVVNFCQkyCisjZGVmaW5lIE5fUFBQCQkzCisjZGVmaW5lIE5fU1RSSVAJCTQKKyNkZWZpbmUgTl9BWDI1CQk1CisjZGVmaW5lIE5fWDI1CQk2CS8qIFguMjUgYXN5bmMgKi8KKyNkZWZpbmUgTl82UEFDSwkJNworI2RlZmluZSBOX01BU0MJCTgJLyogUmVzZXJ2ZWQgZm9yIE1vYml0ZXggbW9kdWxlIDxrYXpAY2FmZS5uZXQ+ICovCisjZGVmaW5lIE5fUjM5NjQJCTkJLyogUmVzZXJ2ZWQgZm9yIFNpbWF0aWMgUjM5NjQgbW9kdWxlICovCisjZGVmaW5lIE5fUFJPRklCVVNfRkRMCTEwCS8qIFJlc2VydmVkIGZvciBQcm9maWJ1cyA8RGF2ZUBtdmhpLmNvbT4gKi8KKyNkZWZpbmUgTl9JUkRBCQkxMQkvKiBMaW51eCBJckRhIC0gaHR0cDovL2lyZGEuc291cmNlZm9yZ2UubmV0LyAqLworI2RlZmluZSBOX1NNU0JMT0NLCTEyCS8qIFNNUyBibG9jayBtb2RlIC0gZm9yIHRhbGtpbmcgdG8gR1NNIGRhdGEgY2FyZHMgYWJvdXQgU01TIG1lc3NhZ2VzICovCisjZGVmaW5lIE5fSERMQwkJMTMJLyogc3luY2hyb25vdXMgSERMQyAqLworI2RlZmluZSBOX1NZTkNfUFBQCTE0CisjZGVmaW5lIE5fSENJCQkxNSAgLyogQmx1ZXRvb3RoIEhDSSBVQVJUICovCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy90ZXJtaW9zLmg+CisKKyNlbmRpZiAvKiBfQVNNX1RFUk1JT1NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L3RocmVhZF9pbmZvLmggYi9pbmNsdWRlL2FzbS1mcnYvdGhyZWFkX2luZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODBhOTdmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tZnJ2L3RocmVhZF9pbmZvLmgKQEAgLTAsMCArMSwxNTkgQEAKKy8qIHRocmVhZF9pbmZvLmg6IGRlc2NyaXB0aW9uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqIERlcml2ZWQgZnJvbSBpbmNsdWRlL2FzbS1pMzg2L3RocmVhZF9pbmZvLmgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgX0FTTV9USFJFQURfSU5GT19ICisjZGVmaW5lIF9BU01fVEhSRUFEX0lORk9fSAorCisjaWZkZWYgX19LRVJORUxfXworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNlbmRpZgorCisvKgorICogbG93IGxldmVsIHRhc2sgZGF0YSB0aGF0IGVudHJ5LlMgbmVlZHMgaW1tZWRpYXRlIGFjY2VzcyB0bworICogLSB0aGlzIHN0cnVjdCBzaG91bGQgZml0IGVudGlyZWx5IGluc2lkZSBvZiBvbmUgY2FjaGUgbGluZQorICogLSB0aGlzIHN0cnVjdCBzaGFyZXMgdGhlIHN1cGVydmlzb3Igc3RhY2sgcGFnZXMKKyAqIC0gaWYgdGhlIGNvbnRlbnRzIG9mIHRoaXMgc3RydWN0dXJlIGFyZSBjaGFuZ2VkLCB0aGUgYXNzZW1ibHkgY29uc3RhbnRzIG11c3QgYWxzbyBiZSBjaGFuZ2VkCisgKi8KKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK3N0cnVjdCB0aHJlYWRfaW5mbyB7CisJc3RydWN0IHRhc2tfc3RydWN0CSp0YXNrOwkJLyogbWFpbiB0YXNrIHN0cnVjdHVyZSAqLworCXN0cnVjdCBleGVjX2RvbWFpbgkqZXhlY19kb21haW47CS8qIGV4ZWN1dGlvbiBkb21haW4gKi8KKwl1bnNpZ25lZCBsb25nCQlmbGFnczsJCS8qIGxvdyBsZXZlbCBmbGFncyAqLworCXVuc2lnbmVkIGxvbmcJCXN0YXR1czsJCS8qIHRocmVhZC1zeW5jaHJvbm91cyBmbGFncyAqLworCV9fdTMyCQkJY3B1OwkJLyogY3VycmVudCBDUFUgKi8KKwlfX3MzMgkJCXByZWVtcHRfY291bnQ7CS8qIDAgPT4gcHJlZW1wdGFibGUsIDwwID0+IEJVRyAqLworCisJbW1fc2VnbWVudF90CQlhZGRyX2xpbWl0OwkvKiB0aHJlYWQgYWRkcmVzcyBzcGFjZToKKwkJCQkJIAkgICAwLTB4QkZGRkZGRkYgZm9yIHVzZXItdGhlYWQKKwkJCQkJCSAgIDAtMHhGRkZGRkZGRiBmb3Iga2VybmVsLXRocmVhZAorCQkJCQkJKi8KKwlzdHJ1Y3QgcmVzdGFydF9ibG9jayAgICByZXN0YXJ0X2Jsb2NrOworCisJX191OAkJCXN1cGVydmlzb3Jfc3RhY2tbMF07Cit9OworCisjZWxzZSAvKiAhX19BU1NFTUJMWV9fICovCisKKy8qIG9mZnNldHMgaW50byB0aGUgdGhyZWFkX2luZm8gc3RydWN0IGZvciBhc3NlbWJseSBjb2RlIGFjY2VzcyAqLworI2RlZmluZSBUSV9UQVNLCQkJMHgwMDAwMDAwMAorI2RlZmluZSBUSV9FWEVDX0RPTUFJTgkJMHgwMDAwMDAwNAorI2RlZmluZSBUSV9GTEFHUwkJMHgwMDAwMDAwOAorI2RlZmluZSBUSV9TVEFUVVMJCTB4MDAwMDAwMEMKKyNkZWZpbmUgVElfQ1BVCQkJMHgwMDAwMDAxMAorI2RlZmluZSBUSV9QUkVfQ09VTlQJCTB4MDAwMDAwMTQKKyNkZWZpbmUgVElfQUREUl9MSU1JVAkJMHgwMDAwMDAxOAorI2RlZmluZSBUSV9SRVNUQVJUX0JMT0NLCTB4MDAwMDAwMUMKKworI2VuZGlmCisKKyNkZWZpbmUgUFJFRU1QVF9BQ1RJVkUJCTB4NDAwMDAwMAorCisvKgorICogbWFjcm9zL2Z1bmN0aW9ucyBmb3IgZ2FpbmluZyBhY2Nlc3MgdG8gdGhlIHRocmVhZCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUKKyAqCisgKiBwcmVlbXB0X2NvdW50IG5lZWRzIHRvIGJlIDEgaW5pdGlhbGx5LCB1bnRpbCB0aGUgc2NoZWR1bGVyIGlzIGZ1bmN0aW9uYWwuCisgKi8KKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNkZWZpbmUgSU5JVF9USFJFQURfSU5GTyh0c2spCQkJXAorewkJCQkJCVwKKwkudGFzawkJPSAmdHNrLAkJCVwKKwkuZXhlY19kb21haW4JPSAmZGVmYXVsdF9leGVjX2RvbWFpbiwJXAorCS5mbGFncwkJPSAwLAkJCVwKKwkuY3B1CQk9IDAsCQkJXAorCS5wcmVlbXB0X2NvdW50CT0gMSwJCQlcCisJLmFkZHJfbGltaXQJPSBLRVJORUxfRFMsCQlcCisJLnJlc3RhcnRfYmxvY2sgPSB7CQkJXAorCQkuZm4gPSBkb19ub19yZXN0YXJ0X3N5c2NhbGwsCVwKKwl9LAkJCQkJXAorfQorCisjZGVmaW5lIGluaXRfdGhyZWFkX2luZm8JKGluaXRfdGhyZWFkX3VuaW9uLnRocmVhZF9pbmZvKQorI2RlZmluZSBpbml0X3N0YWNrCQkoaW5pdF90aHJlYWRfdW5pb24uc3RhY2spCisKKyNpZmRlZiBDT05GSUdfU01BTExfVEFTS1MKKyNkZWZpbmUgVEhSRUFEX1NJWkUJCTQwOTYKKyNlbHNlCisjZGVmaW5lIFRIUkVBRF9TSVpFCQk4MTkyCisjZW5kaWYKKworLyogaG93IHRvIGdldCB0aGUgdGhyZWFkIGluZm9ybWF0aW9uIHN0cnVjdCBmcm9tIEMgKi8KK3JlZ2lzdGVyIHN0cnVjdCB0aHJlYWRfaW5mbyAqX19jdXJyZW50X3RocmVhZF9pbmZvIGFzbSgiZ3IxNSIpOworCisjZGVmaW5lIGN1cnJlbnRfdGhyZWFkX2luZm8oKSAoeyBfX2N1cnJlbnRfdGhyZWFkX2luZm87IH0pCisKKy8qIHRocmVhZCBpbmZvcm1hdGlvbiBhbGxvY2F0aW9uICovCisjaWZkZWYgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFCisjZGVmaW5lIGFsbG9jX3RocmVhZF9pbmZvKHRzaykJCQkJCVwKKwkoewkJCQkJCQlcCisJCXN0cnVjdCB0aHJlYWRfaW5mbyAqcmV0OwkJCVwKKwkJCQkJCQkJXAorCQlyZXQgPSBrbWFsbG9jKFRIUkVBRF9TSVpFLCBHRlBfS0VSTkVMKTsJCVwKKwkJaWYgKHJldCkJCQkJCVwKKwkJCW1lbXNldChyZXQsIDAsIFRIUkVBRF9TSVpFKTsJCVwKKwkJcmV0OwkJCQkJCVwKKwl9KQorI2Vsc2UKKyNkZWZpbmUgYWxsb2NfdGhyZWFkX2luZm8odHNrKQlrbWFsbG9jKFRIUkVBRF9TSVpFLCBHRlBfS0VSTkVMKQorI2VuZGlmCisKKyNkZWZpbmUgZnJlZV90aHJlYWRfaW5mbyhpbmZvKQlrZnJlZShpbmZvKQorI2RlZmluZSBnZXRfdGhyZWFkX2luZm8odGkpCWdldF90YXNrX3N0cnVjdCgodGkpLT50YXNrKQorI2RlZmluZSBwdXRfdGhyZWFkX2luZm8odGkpCXB1dF90YXNrX3N0cnVjdCgodGkpLT50YXNrKQorCisjZWxzZSAvKiAhX19BU1NFTUJMWV9fICovCisKKyNkZWZpbmUgVEhSRUFEX1NJWkUJODE5MgorCisjZW5kaWYKKworLyoKKyAqIHRocmVhZCBpbmZvcm1hdGlvbiBmbGFncworICogLSB0aGVzZSBhcmUgcHJvY2VzcyBzdGF0ZSBmbGFncyB0aGF0IHZhcmlvdXMgYXNzZW1ibHkgZmlsZXMgbWF5IG5lZWQgdG8gYWNjZXNzCisgKiAtIHBlbmRpbmcgd29yay10by1iZS1kb25lIGZsYWdzIGFyZSBpbiBMU1cKKyAqIC0gb3RoZXIgZmxhZ3MgaW4gTVNXCisgKi8KKyNkZWZpbmUgVElGX1NZU0NBTExfVFJBQ0UJMAkvKiBzeXNjYWxsIHRyYWNlIGFjdGl2ZSAqLworI2RlZmluZSBUSUZfTk9USUZZX1JFU1VNRQkxCS8qIHJlc3VtcHRpb24gbm90aWZpY2F0aW9uIHJlcXVlc3RlZCAqLworI2RlZmluZSBUSUZfU0lHUEVORElORwkJMgkvKiBzaWduYWwgcGVuZGluZyAqLworI2RlZmluZSBUSUZfTkVFRF9SRVNDSEVECTMJLyogcmVzY2hlZHVsaW5nIG5lY2Vzc2FyeSAqLworI2RlZmluZSBUSUZfU0lOR0xFU1RFUAkJNAkvKiByZXN0b3JlIHNpbmdsZXN0ZXAgb24gcmV0dXJuIHRvIHVzZXIgbW9kZSAqLworI2RlZmluZSBUSUZfSVJFVAkJNQkvKiByZXR1cm4gd2l0aCBpcmV0ICovCisjZGVmaW5lIFRJRl9QT0xMSU5HX05SRkxBRwkxNgkvKiB0cnVlIGlmIHBvbGxfaWRsZSgpIGlzIHBvbGxpbmcgVElGX05FRURfUkVTQ0hFRCAqLworI2RlZmluZSBUSUZfTUVNRElFCQkxNwkvKiBPT00ga2lsbGVyIGtpbGxlZCBwcm9jZXNzICovCisKKyNkZWZpbmUgX1RJRl9TWVNDQUxMX1RSQUNFCSgxIDw8IFRJRl9TWVNDQUxMX1RSQUNFKQorI2RlZmluZSBfVElGX05PVElGWV9SRVNVTUUJKDEgPDwgVElGX05PVElGWV9SRVNVTUUpCisjZGVmaW5lIF9USUZfU0lHUEVORElORwkJKDEgPDwgVElGX1NJR1BFTkRJTkcpCisjZGVmaW5lIF9USUZfTkVFRF9SRVNDSEVECSgxIDw8IFRJRl9ORUVEX1JFU0NIRUQpCisjZGVmaW5lIF9USUZfU0lOR0xFU1RFUAkJKDEgPDwgVElGX1NJTkdMRVNURVApCisjZGVmaW5lIF9USUZfSVJFVAkJKDEgPDwgVElGX0lSRVQpCisjZGVmaW5lIF9USUZfUE9MTElOR19OUkZMQUcJKDEgPDwgVElGX1BPTExJTkdfTlJGTEFHKQorCisjZGVmaW5lIF9USUZfV09SS19NQVNLCQkweDAwMDBGRkZFCS8qIHdvcmsgdG8gZG8gb24gaW50ZXJydXB0L2V4Y2VwdGlvbiByZXR1cm4gKi8KKyNkZWZpbmUgX1RJRl9BTExXT1JLX01BU0sJMHgwMDAwRkZGRgkvKiB3b3JrIHRvIGRvIG9uIGFueSByZXR1cm4gdG8gdS1zcGFjZSAqLworCisvKgorICogVGhyZWFkLXN5bmNocm9ub3VzIHN0YXR1cy4KKyAqCisgKiBUaGlzIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBmbGFncyBpbiB0aGF0IG5vYm9keSBlbHNlCisgKiBldmVyIHRvdWNoZXMgb3VyIHRocmVhZC1zeW5jaHJvbm91cyBzdGF0dXMsIHNvIHdlIGRvbid0CisgKiBoYXZlIHRvIHdvcnJ5IGFib3V0IGF0b21pYyBhY2Nlc3Nlcy4KKyAqLworI2RlZmluZSBUU19VU0VERlBNCQkweDAwMDEJLyogRlBVL01lZGlhIHdhcyB1c2VkIGJ5IHRoaXMgdGFzayB0aGlzIHF1YW50dW0gKFNNUCkgKi8KKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9BU01fVEhSRUFEX0lORk9fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L3RpbWVyLXJlZ3MuaCBiL2luY2x1ZGUvYXNtLWZydi90aW1lci1yZWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM1YTg3MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWZydi90aW1lci1yZWdzLmgKQEAgLTAsMCArMSwxMDYgQEAKKy8qIHRpbWVyLXJlZ3MuaDogaGFyZHdhcmUgdGltZXIgcmVnaXN0ZXIgZGVmaW5pdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfQVNNX1RJTUVSX1JFR1NfSAorI2RlZmluZSBfQVNNX1RJTUVSX1JFR1NfSAorCisjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fbm9uZ3ByZWxic3MgX19jbGtpbl9jbG9ja19zcGVlZF9IWjsKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fbm9uZ3ByZWxic3MgX19leHRfYnVzX2Nsb2NrX3NwZWVkX0haOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19ub25ncHJlbGJzcyBfX3Jlc19idXNfY2xvY2tfc3BlZWRfSFo7CitleHRlcm4gdW5zaWduZWQgbG9uZyBfX25vbmdwcmVsYnNzIF9fc2RyYW1fY2xvY2tfc3BlZWRfSFo7CitleHRlcm4gdW5zaWduZWQgbG9uZyBfX25vbmdwcmVsYnNzIF9fY29yZV9idXNfY2xvY2tfc3BlZWRfSFo7CitleHRlcm4gdW5zaWduZWQgbG9uZyBfX25vbmdwcmVsYnNzIF9fY29yZV9jbG9ja19zcGVlZF9IWjsKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fbm9uZ3ByZWxic3MgX19kc3VfY2xvY2tfc3BlZWRfSFo7CitleHRlcm4gdW5zaWduZWQgbG9uZyBfX25vbmdwcmVsYnNzIF9fc2VyaWFsX2Nsb2NrX3NwZWVkX0haOworCisjZGVmaW5lIF9fZ2V0X0NMS0MoKQkoeyAqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoMHhmZWZmOWEwMCk7IH0pCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3NldF9DTEtDKHVuc2lnbmVkIGxvbmcgdikKK3sKKwlpbnQgdG1wOworCisJYXNtIHZvbGF0aWxlKCIJc3QlSTAucAklMiwlTTAJCVxuIgorCQkgICAgICIJc2V0bG9zCSUzLCUxCQlcbiIKKwkJICAgICAiCW1lbWJhcgkJCVxuIgorCQkgICAgICIwOgkJCVxuIgorCQkgICAgICIJc3ViaWNjCSUxLCMxLCUxLGljYzAJXG4iCisJCSAgICAgIglibmMJaWNjMCwjMSwwYglcbiIKKwkJICAgICA6ICI9bSIoKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopIDB4ZmVmZjlhMDApLCAiPXIiKHRtcCkKKwkJICAgICA6ICJyIih2KSwgImkiKDI1NikKKwkJICAgICA6ICJpY2MwIik7Cit9CisKKyNkZWZpbmUgX19nZXRfVENUUigpCSh7ICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSgweGZlZmY5NDE4KTsgfSkKKyNkZWZpbmUgX19nZXRfVFBSVigpCSh7ICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSgweGZlZmY5NDIwKTsgfSkKKyNkZWZpbmUgX19nZXRfVFBSQ0tTTCgpCSh7ICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSgweGZlZmY5NDI4KTsgfSkKKyNkZWZpbmUgX19nZXRfVENTUihUKQkoeyAqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoMHhmZWZmOTQwMCArIDggKiAoVCkpOyB9KQorI2RlZmluZSBfX2dldF9UeENLU0woVCkJKHsgKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKDB4ZmVmZjk0MzAgKyA4ICogKFQpKTsgfSkKKworI2RlZmluZSBfX2dldF9UQ1NSX0RBVEEoVCkgKHsgX19nZXRfVENTUihUKSA+PiAyNDsgfSkKKworI2RlZmluZSBfX3NldF9UQ1RSKFYpCWRvIHsgKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKDB4ZmVmZjk0MTgpID0gKFYpOyBtYigpOyB9IHdoaWxlKDApCisjZGVmaW5lIF9fc2V0X1RQUlYoVikJZG8geyAqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoMHhmZWZmOTQyMCkgPSAoVikgPDwgMjQ7IG1iKCk7IH0gd2hpbGUoMCkKKyNkZWZpbmUgX19zZXRfVFBSQ0tTTChWKSBkbyB7ICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSgweGZlZmY5NDI4KSA9IChWKTsgbWIoKTsgfSB3aGlsZSgwKQorI2RlZmluZSBfX3NldF9UQ1NSKFQsVikJXAorZG8geyAqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoMHhmZWZmOTQwMCArIDggKiAoVCkpID0gKFYpOyBtYigpOyB9IHdoaWxlKDApCisKKyNkZWZpbmUgX19zZXRfVHhDS1NMKFQsVikgXAorZG8geyAqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoMHhmZWZmOTQzMCArIDggKiAoVCkpID0gKFYpOyBtYigpOyB9IHdoaWxlKDApCisKKyNkZWZpbmUgX19zZXRfVENTUl9EQVRBKFQsVikgX19zZXRfVENTUihULCAoVikgPDwgMjQpCisjZGVmaW5lIF9fc2V0X1R4Q0tTTF9EQVRBKFQsVikgX19zZXRfVHhDS1NMKFQsIFR4Q0tTTF9FSUdIVCB8IF9fVHhDS1NMX1NFTEVDVCgoVikpKQorCisvKiBjbG9jayBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIENMS0NfQ01PREUJCTB4MGYwMDAwMDAKKyNkZWZpbmUgQ0xLQ19TTFBMCQkweDAwMGYwMDAwCisjZGVmaW5lIENMS0NfUDAJCQkweDAwMDAwMTAwCisjZGVmaW5lIENMS0NfQ00JCQkweDAwMDAwMDAzCisKKyNkZWZpbmUgQ0xLQ19DTU9ERV9zCQkyNAorCisvKiB0aW1lciBjb250cm9sIHJlZ2lzdGVyIC0gbm9uLXJlYWRiYWNrIG1vZGUgKi8KKyNkZWZpbmUgVENUUl9NT0RFXzAJCTB4MDAwMDAwMDAKKyNkZWZpbmUgVENUUl9NT0RFXzIJCTB4MDQwMDAwMDAKKyNkZWZpbmUgVENUUl9NT0RFXzQJCTB4MDgwMDAwMDAKKyNkZWZpbmUgVENUUl9NT0RFXzUJCTB4MGEwMDAwMDAKKyNkZWZpbmUgVENUUl9STF9MQVRDSAkJMHgwMDAwMDAwMAorI2RlZmluZSBUQ1RSX1JMX1JXX0xPVzgJCTB4MTAwMDAwMDAKKyNkZWZpbmUgVENUUl9STF9SV19ISUdIOAkweDIwMDAwMDAwCisjZGVmaW5lIFRDVFJfUkxfUldfTEg4CQkweDMwMDAwMDAwCisjZGVmaW5lIFRDVFJfU0NfQ1RSMAkJMHgwMDAwMDAwMAorI2RlZmluZSBUQ1RSX1NDX0NUUjEJCTB4NDAwMDAwMDAKKyNkZWZpbmUgVENUUl9TQ19DVFIyCQkweDgwMDAwMDAwCisKKy8qIHRpbWVyIGNvbnRyb2wgcmVnaXN0ZXIgLSByZWFkYmFjayBtb2RlICovCisjZGVmaW5lIFRDVFJfQ05UMAkJMHgwMjAwMDAwMAorI2RlZmluZSBUQ1RSX0NOVDEJCTB4MDQwMDAwMDAKKyNkZWZpbmUgVENUUl9DTlQyCQkweDA4MDAwMDAwCisjZGVmaW5lIFRDVFJfTlNUQVRVUwkJMHgxMDAwMDAwMAorI2RlZmluZSBUQ1RSX05DT1VOVAkJMHgyMDAwMDAwMAorI2RlZmluZSBUQ1RSX1NDX1JFQURCQUNLCTB4YzAwMDAwMDAKKworLyogdGltZXIgY29udHJvbCBzdGF0dXMgcmVnaXN0ZXJzIC0gbm9uLXJlYWRiYWNrIG1vZGUgKi8KKyNkZWZpbmUgVENTUnhfREFUQQkJMHhmZjAwMDAwMAorCisvKiB0aW1lciBjb250cm9sIHN0YXR1cyByZWdpc3RlcnMgLSByZWFkYmFjayBtb2RlICovCisjZGVmaW5lIFRDU1J4X09VVFBVVAkJMHg4MDAwMDAwMAorI2RlZmluZSBUQ1NSeF9OVUxMQ09VTlQJCTB4NDAwMDAwMDAKKyNkZWZpbmUgVENTUnhfUkwJCTB4MzAwMDAwMDAKKyNkZWZpbmUgVENTUnhfTU9ERQkJMHgwNzAwMDAwMAorCisvKiB0aW1lciBjbG9jayBzZWxlY3QgcmVnaXN0ZXJzICovCisjZGVmaW5lIFR4Q0tTTF9TRUxFQ1QJCTB4MGYwMDAwMDAKKyNkZWZpbmUgX19UeENLU0xfU0VMRUNUKFgpCSgoWCkgPDwgMjQpCisjZGVmaW5lIFR4Q0tTTF9FSUdIVAkJMHhmMDAwMDAwMAorCisjZW5kaWYgLyogX0FTTV9USU1FUl9SRUdTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi90aW1leC5oIGIvaW5jbHVkZS9hc20tZnJ2L3RpbWV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFhNTYyZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWZydi90aW1leC5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qIHRpbWV4Lmg6IEZSLVYgYXJjaGl0ZWN0dXJlIHRpbWV4IHNwZWNpZmljYXRpb25zCisgKi8KKyNpZm5kZWYgX0FTTV9USU1FWF9ICisjZGVmaW5lIF9BU01fVElNRVhfSAorCisjZGVmaW5lIENMT0NLX1RJQ0tfUkFURQkJMTE5MzE4MCAvKiBVbmRlcmx5aW5nIEhaICovCisjZGVmaW5lIENMT0NLX1RJQ0tfRkFDVE9SCTIwCS8qIEZhY3RvciBvZiBib3RoIDEwMDAwMDAgYW5kIENMT0NLX1RJQ0tfUkFURSAqLworCisjZGVmaW5lIEZJTkVUVU5FCQkJCQkJCVwKKygoKCgoKGxvbmcpTEFUQ0ggKiBIWiAtIENMT0NLX1RJQ0tfUkFURSkgPDwgU0hJRlRfSFopICoJCQlcCisgICAoMTAwMDAwMC9DTE9DS19USUNLX0ZBQ1RPUikgLyAoQ0xPQ0tfVElDS19SQVRFL0NMT0NLX1RJQ0tfRkFDVE9SKSkJXAorICA8PCAoU0hJRlRfU0NBTEUtU0hJRlRfSFopKSAvIEhaKQorCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgY3ljbGVzX3Q7CisKK3N0YXRpYyBpbmxpbmUgY3ljbGVzX3QgZ2V0X2N5Y2xlcyh2b2lkKQoreworCXJldHVybiAwOworfQorCisjZGVmaW5lIHZ4dGltZV9sb2NrKCkJCWRvIHt9IHdoaWxlICgwKQorI2RlZmluZSB2eHRpbWVfdW5sb2NrKCkJCWRvIHt9IHdoaWxlICgwKQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L3RsYi5oIGIvaW5jbHVkZS9hc20tZnJ2L3RsYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5NGZlNWMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1mcnYvdGxiLmgKQEAgLTAsMCArMSwyMyBAQAorI2lmbmRlZiBfQVNNX1RMQl9ICisjZGVmaW5lIF9BU01fVExCX0gKKworI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgorCisjZGVmaW5lIGNoZWNrX3BndF9jYWNoZSgpIGRvIHt9IHdoaWxlKDApCisKKy8qCisgKiB3ZSBkb24ndCBuZWVkIGFueSBzcGVjaWFsIHBlci1wdGUgb3IgcGVyLXZtYSBoYW5kbGluZy4uLgorICovCisjZGVmaW5lIHRsYl9zdGFydF92bWEodGxiLCB2bWEpCQkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgdGxiX2VuZF92bWEodGxiLCB2bWEpCQkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgX190bGJfcmVtb3ZlX3RsYl9lbnRyeSh0bGIsIHB0ZXAsIGFkZHJlc3MpCWRvIHsgfSB3aGlsZSAoMCkKKworLyoKKyAqIC4uIGJlY2F1c2Ugd2UgZmx1c2ggdGhlIHdob2xlIG1tIHdoZW4gaXQgZmlsbHMgdXAKKyAqLworI2RlZmluZSB0bGJfZmx1c2godGxiKQkJZmx1c2hfdGxiX21tKCh0bGIpLT5tbSkKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3RsYi5oPgorCisjZW5kaWYgLyogX0FTTV9UTEJfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvdGxiZmx1c2guaCBiL2luY2x1ZGUvYXNtLWZydi90bGJmbHVzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjMzQ2MjYyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tZnJ2L3RsYmZsdXNoLmgKQEAgLTAsMCArMSw3NyBAQAorLyogdGxiZmx1c2guaDogVExCIGZsdXNoaW5nIGZ1bmN0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9BU01fVExCRkxVU0hfSAorI2RlZmluZSBfQVNNX1RMQkZMVVNIX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorCisjaWZkZWYgQ09ORklHX01NVQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworZXh0ZXJuIHZvaWQgYXNtbGlua2FnZSBfX2ZsdXNoX3RsYl9hbGwodm9pZCk7CitleHRlcm4gdm9pZCBhc21saW5rYWdlIF9fZmx1c2hfdGxiX21tKHVuc2lnbmVkIGxvbmcgY29udGV4dGlkKTsKK2V4dGVybiB2b2lkIGFzbWxpbmthZ2UgX19mbHVzaF90bGJfcGFnZSh1bnNpZ25lZCBsb25nIGNvbnRleHRpZCwgdW5zaWduZWQgbG9uZyBzdGFydCk7CitleHRlcm4gdm9pZCBhc21saW5rYWdlIF9fZmx1c2hfdGxiX3JhbmdlKHVuc2lnbmVkIGxvbmcgY29udGV4dGlkLAorCQkJCQkgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpOworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKworI2RlZmluZSBmbHVzaF90bGJfYWxsKCkJCQkJXAorZG8gewkJCQkJCVwKKwlwcmVlbXB0X2Rpc2FibGUoKTsJCQlcCisJX19mbHVzaF90bGJfYWxsKCk7CQkJXAorCXByZWVtcHRfZW5hYmxlKCk7CQkJXAorfSB3aGlsZSgwKQorCisjZGVmaW5lIGZsdXNoX3RsYl9tbShtbSkJCQlcCitkbyB7CQkJCQkJXAorCXByZWVtcHRfZGlzYWJsZSgpOwkJCVwKKwlfX2ZsdXNoX3RsYl9tbSgobW0pLT5jb250ZXh0LmlkKTsJXAorCXByZWVtcHRfZW5hYmxlKCk7CQkJXAorfSB3aGlsZSgwKQorCisjZGVmaW5lIGZsdXNoX3RsYl9yYW5nZSh2bWEsc3RhcnQsZW5kKQkJCQkJXAorZG8gewkJCQkJCQkJCVwKKwlwcmVlbXB0X2Rpc2FibGUoKTsJCQkJCQlcCisJX19mbHVzaF90bGJfcmFuZ2UoKHZtYSktPnZtX21tLT5jb250ZXh0LmlkLCBzdGFydCwgZW5kKTsJXAorCXByZWVtcHRfZW5hYmxlKCk7CQkJCQkJXAorfSB3aGlsZSgwKQorCisjZGVmaW5lIGZsdXNoX3RsYl9wYWdlKHZtYSxhZGRyKQkJCQlcCitkbyB7CQkJCQkJCQlcCisJcHJlZW1wdF9kaXNhYmxlKCk7CQkJCQlcCisJX19mbHVzaF90bGJfcGFnZSgodm1hKS0+dm1fbW0tPmNvbnRleHQuaWQsIGFkZHIpOwlcCisJcHJlZW1wdF9lbmFibGUoKTsJCQkJCVwKK30gd2hpbGUoMCkKKworCisjZGVmaW5lIF9fZmx1c2hfdGxiX2dsb2JhbCgpCQkJZmx1c2hfdGxiX2FsbCgpCisjZGVmaW5lIGZsdXNoX3RsYigpCQkJCWZsdXNoX3RsYl9hbGwoKQorI2RlZmluZSBmbHVzaF90bGJfa2VybmVsX3JhbmdlKHN0YXJ0LCBlbmQpCWZsdXNoX3RsYl9hbGwoKQorI2RlZmluZSBmbHVzaF90bGJfcGd0YWJsZXMobW0sc3RhcnQsZW5kKSBcCisJYXNtIHZvbGF0aWxlKCJtb3ZncyAlMCxzY3IwICEgbW92Z3MgJTAsc2NyMSIgOjogInIiKFVMT05HX01BWCkgOiAibWVtb3J5Iik7CisKKyNlbHNlCisKKyNkZWZpbmUgZmx1c2hfdGxiKCkJCQkJQlVHKCkKKyNkZWZpbmUgZmx1c2hfdGxiX2FsbCgpCQkJCUJVRygpCisjZGVmaW5lIGZsdXNoX3RsYl9tbShtbSkJCQlCVUcoKQorI2RlZmluZSBmbHVzaF90bGJfcGFnZSh2bWEsYWRkcikJCUJVRygpCisjZGVmaW5lIGZsdXNoX3RsYl9yYW5nZShtbSxzdGFydCxlbmQpCQlCVUcoKQorI2RlZmluZSBmbHVzaF90bGJfcGd0YWJsZXMobW0sc3RhcnQsZW5kKQlCVUcoKQorI2RlZmluZSBmbHVzaF90bGJfa2VybmVsX3JhbmdlKHN0YXJ0LCBlbmQpCUJVRygpCisKKyNlbmRpZgorCisKKyNlbmRpZiAvKiBfQVNNX1RMQkZMVVNIX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi90b3BvbG9neS5oIGIvaW5jbHVkZS9hc20tZnJ2L3RvcG9sb2d5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJlNzI5OAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWZydi90b3BvbG9neS5oCkBAIC0wLDAgKzEsMTQgQEAKKyNpZm5kZWYgX0FTTV9UT1BPTE9HWV9ICisjZGVmaW5lIF9BU01fVE9QT0xPR1lfSAorCisjaWZkZWYgQ09ORklHX05VTUEKKworI2Vycm9yIE5VTUEgbm90IHN1cHBvcnRlZCB5ZXQKKworI2Vsc2UgLyogIUNPTkZJR19OVU1BICovCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy90b3BvbG9neS5oPgorCisjZW5kaWYgLyogQ09ORklHX05VTUEgKi8KKworI2VuZGlmIC8qIF9BU01fVE9QT0xPR1lfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L3R5cGVzLmggYi9pbmNsdWRlL2FzbS1mcnYvdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTViNjU0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tZnJ2L3R5cGVzLmgKQEAgLTAsMCArMSw3NCBAQAorLyogdHlwZXMuaDogRlJWIHR5cGVzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgX0FTTV9UWVBFU19ICisjZGVmaW5lIF9BU01fVFlQRVNfSAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVtb2RlX3Q7CisKKy8qCisgKiBfX3h4IGlzIG9rOiBpdCBkb2Vzbid0IHBvbGx1dGUgdGhlIFBPU0lYIG5hbWVzcGFjZS4gVXNlIHRoZXNlIGluIHRoZQorICogaGVhZGVyIGZpbGVzIGV4cG9ydGVkIHRvIHVzZXIgc3BhY2UKKyAqLworCit0eXBlZGVmIF9fc2lnbmVkX18gY2hhciBfX3M4OwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdTg7CisKK3R5cGVkZWYgX19zaWduZWRfXyBzaG9ydCBfX3MxNjsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgX191MTY7CisKK3R5cGVkZWYgX19zaWduZWRfXyBpbnQgX19zMzI7Cit0eXBlZGVmIHVuc2lnbmVkIGludCBfX3UzMjsKKworI2lmIGRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykKK3R5cGVkZWYgX19zaWduZWRfXyBsb25nIGxvbmcgX19zNjQ7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3U2NDsKKyNlbmRpZgorCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKy8qCisgKiBUaGVzZSBhcmVuJ3QgZXhwb3J0ZWQgb3V0c2lkZSB0aGUga2VybmVsIHRvIGF2b2lkIG5hbWUgc3BhY2UgY2xhc2hlcworICovCisjaWZkZWYgX19LRVJORUxfXworCisjZGVmaW5lIEJJVFNfUEVSX0xPTkcgMzIKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCit0eXBlZGVmIHNpZ25lZCBjaGFyIHM4OwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIHU4OworCit0eXBlZGVmIHNpZ25lZCBzaG9ydCBzMTY7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHUxNjsKKwordHlwZWRlZiBzaWduZWQgaW50IHMzMjsKK3R5cGVkZWYgdW5zaWduZWQgaW50IHUzMjsKKwordHlwZWRlZiBzaWduZWQgbG9uZyBsb25nIHM2NDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHU2NDsKK3R5cGVkZWYgdTY0IHVfcXVhZF90OworCisvKiBEbWEgYWRkcmVzc2VzIGFyZSAzMi1iaXRzIHdpZGUuICAqLworCit0eXBlZGVmIHUzMiBkbWFfYWRkcl90OworCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGttZW1fYnVmY3RsX3Q7CisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9BU01fVFlQRVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L3VhY2Nlc3MuaCBiL2luY2x1ZGUvYXNtLWZydi91YWNjZXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJkYzUyZTgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1mcnYvdWFjY2Vzcy5oCkBAIC0wLDAgKzEsMzE4IEBACisvKiB1YWNjZXNzLmg6IHVzZXJzcGFjZSBhY2Nlc3NvciBmdW5jdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfQVNNX1VBQ0NFU1NfSAorI2RlZmluZSBfQVNNX1VBQ0NFU1NfSAorCisvKgorICogVXNlciBzcGFjZSBtZW1vcnkgYWNjZXNzIGZ1bmN0aW9ucworICovCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CisjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CisKKyNkZWZpbmUgSEFWRV9BUkNIX1VOTUFQUEVEX0FSRUEJLyogd2UgZGVjaWRlIHdoZXJlIHRvIHB1dCBtbWFwcyAqLworCisjZGVmaW5lIF9fcHRyKHgpICgodW5zaWduZWQgbG9uZyAqKSh4KSkKKworI2RlZmluZSBWRVJJRllfUkVBRAkwCisjZGVmaW5lIFZFUklGWV9XUklURQkxCisKKyNkZWZpbmUgX19hZGRyX29rKGFkZHIpICgodW5zaWduZWQgbG9uZykoYWRkcikgPCBnZXRfYWRkcl9saW1pdCgpKQorCisvKgorICogY2hlY2sgdGhhdCBhIHJhbmdlIG9mIGFkZHJlc3NlcyBmYWxscyB3aXRoaW4gdGhlIGN1cnJlbnQgYWRkcmVzcyBsaW1pdAorICovCitzdGF0aWMgaW5saW5lIGludCBfX19yYW5nZV9vayh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKyNpZmRlZiBDT05GSUdfTU1VCisJaW50IGZsYWcgPSAtRUZBVUxULCB0bXA7CisKKwlhc20gdm9sYXRpbGUgKAorCQkiCWFkZGNjCSUzLCUyLCUxLGljYzAJXG4iCS8qIHNldCBDLWZsYWcgaWYgYWRkcitzaXplPjRHQiAqLworCQkiCXN1YmNjLnAJJTEsJTQsZ3IwLGljYzEJXG4iCS8qIGp1bXAgaWYgYWRkcitzaXplPmxpbWl0ICovCisJCSIJYmMJaWNjMCwjMCwwZglcbiIKKwkJIgliaGkJaWNjMSwjMCwwZglcbiIKKwkJIglzZXRsb3MJIzAsJTAJCVxuIgkvKiBtYXJrIG9rYXkgKi8KKwkJIjA6CQkJCVxuIgorCQk6ICI9ciIoZmxhZyksICI9JnIiKHRtcCkKKwkJOiAiciIoYWRkciksICJyIihzaXplKSwgInIiKGdldF9hZGRyX2xpbWl0KCkpLCAiMCIoZmxhZykKKwkJKTsKKworCXJldHVybiBmbGFnOworCisjZWxzZQorCisJaWYgKGFkZHIgPCBtZW1vcnlfc3RhcnQgfHwKKwkgICAgYWRkciA+IG1lbW9yeV9lbmQgfHwKKwkgICAgc2l6ZSA+IG1lbW9yeV9lbmQgLSBtZW1vcnlfc3RhcnQgfHwKKwkgICAgYWRkciArIHNpemUgPiBtZW1vcnlfZW5kKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiAwOworI2VuZGlmCit9CisKKyNkZWZpbmUgX19yYW5nZV9vayhhZGRyLHNpemUpIF9fX3JhbmdlX29rKCh1bnNpZ25lZCBsb25nKSAoYWRkciksICh1bnNpZ25lZCBsb25nKSAoc2l6ZSkpCisKKyNkZWZpbmUgYWNjZXNzX29rKHR5cGUsYWRkcixzaXplKSAoX19yYW5nZV9vaygoYWRkciksIChzaXplKSkgPT0gMCkKKyNkZWZpbmUgX19hY2Nlc3Nfb2soYWRkcixzaXplKSAoX19yYW5nZV9vaygoYWRkciksIChzaXplKSkgPT0gMCkKKworLyogdGhpcyBmdW5jdGlvbiB3aWxsIGdvIGF3YXkgc29vbiAtIHVzZSBhY2Nlc3Nfb2soKSAvIF9fcmFuZ2Vfb2soKSBpbnN0ZWFkICovCitzdGF0aWMgaW5saW5lIGludCBfX2RlcHJlY2F0ZWQgdmVyaWZ5X2FyZWEoaW50IHR5cGUsIGNvbnN0IHZvaWQgKiBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJcmV0dXJuIF9fcmFuZ2Vfb2soYWRkciwgc2l6ZSk7Cit9CisKKy8qCisgKiBUaGUgZXhjZXB0aW9uIHRhYmxlIGNvbnNpc3RzIG9mIHBhaXJzIG9mIGFkZHJlc3NlczogdGhlIGZpcnN0IGlzIHRoZQorICogYWRkcmVzcyBvZiBhbiBpbnN0cnVjdGlvbiB0aGF0IGlzIGFsbG93ZWQgdG8gZmF1bHQsIGFuZCB0aGUgc2Vjb25kIGlzCisgKiB0aGUgYWRkcmVzcyBhdCB3aGljaCB0aGUgcHJvZ3JhbSBzaG91bGQgY29udGludWUuICBObyByZWdpc3RlcnMgYXJlCisgKiBtb2RpZmllZCwgc28gaXQgaXMgZW50aXJlbHkgdXAgdG8gdGhlIGNvbnRpbnVhdGlvbiBjb2RlIHRvIGZpZ3VyZSBvdXQKKyAqIHdoYXQgdG8gZG8uCisgKgorICogQWxsIHRoZSByb3V0aW5lcyBiZWxvdyB1c2UgYml0cyBvZiBmaXh1cCBjb2RlIHRoYXQgYXJlIG91dCBvZiBsaW5lCisgKiB3aXRoIHRoZSBtYWluIGluc3RydWN0aW9uIHBhdGguICBUaGlzIG1lYW5zIHdoZW4gZXZlcnl0aGluZyBpcyB3ZWxsLAorICogd2UgZG9uJ3QgZXZlbiBoYXZlIHRvIGp1bXAgb3ZlciB0aGVtLiAgRnVydGhlciwgdGhleSBkbyBub3QgaW50cnVkZQorICogb24gb3VyIGNhY2hlIG9yIHRsYiBlbnRyaWVzLgorICovCitzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5Cit7CisJdW5zaWduZWQgbG9uZyBpbnNuLCBmaXh1cDsKK307CisKKy8qIFJldHVybnMgMCBpZiBleGNlcHRpb24gbm90IGZvdW5kIGFuZCBmaXh1cCBvdGhlcndpc2UuICAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc2VhcmNoX2V4Y2VwdGlvbl90YWJsZSh1bnNpZ25lZCBsb25nKTsKKworCisvKgorICogVGhlc2UgYXJlIHRoZSBtYWluIHNpbmdsZS12YWx1ZSB0cmFuc2ZlciByb3V0aW5lcy4gIFRoZXkgYXV0b21hdGljYWxseQorICogdXNlIHRoZSByaWdodCBzaXplIGlmIHdlIGp1c3QgaGF2ZSB0aGUgcmlnaHQgcG9pbnRlciB0eXBlLgorICovCisjZGVmaW5lIF9fcHV0X3VzZXIoeCwgcHRyKQkJCQkJCVwKKyh7CQkJCQkJCQkJXAorCWludCBfX3B1X2VyciA9IDA7CQkJCQkJXAorCQkJCQkJCQkJXAorCXR5cGVvZigqKHB0cikpIF9fcHVfdmFsID0gKHgpOwkJCQkJXAorCQkJCQkJCQkJXAorCXN3aXRjaCAoc2l6ZW9mICgqKHB0cikpKSB7CQkJCQlcCisJY2FzZSAxOgkJCQkJCQkJXAorCQlfX3B1dF91c2VyX2FzbShfX3B1X2VyciwgX19wdV92YWwsIHB0ciwgImIiLCAiciIpOwlcCisJCWJyZWFrOwkJCQkJCQlcCisJY2FzZSAyOgkJCQkJCQkJXAorCQlfX3B1dF91c2VyX2FzbShfX3B1X2VyciwgX19wdV92YWwsIHB0ciwgImgiLCAiciIpOwlcCisJCWJyZWFrOwkJCQkJCQlcCisJY2FzZSA0OgkJCQkJCQkJXAorCQlfX3B1dF91c2VyX2FzbShfX3B1X2VyciwgX19wdV92YWwsIHB0ciwgIiIsICAiciIpOwlcCisJCWJyZWFrOwkJCQkJCQlcCisJY2FzZSA4OgkJCQkJCQkJXAorCQlfX3B1dF91c2VyX2FzbShfX3B1X2VyciwgX19wdV92YWwsIHB0ciwgImQiLCAiZSIpOwlcCisJCWJyZWFrOwkJCQkJCQlcCisJZGVmYXVsdDoJCQkJCQkJXAorCQlfX3B1X2VyciA9IF9fcHV0X3VzZXJfYmFkKCk7CQkJCVwKKwkJYnJlYWs7CQkJCQkJCVwKKwl9CQkJCQkJCQlcCisJX19wdV9lcnI7CQkJCQkJCVwKK30pCisKKyNkZWZpbmUgcHV0X3VzZXIoeCwgcHRyKQkJCVwKKyh7CQkJCQkJXAorCXR5cGVvZigmKnB0cikgX3AgPSAocHRyKTsJCVwKKwlpbnQgX2U7CQkJCQlcCisJCQkJCQlcCisJX2UgPSBfX3JhbmdlX29rKF9wLCBzaXplb2YoKl9wKSk7CVwKKwlpZiAoX2UgPT0gMCkJCQkJXAorCQlfZSA9IF9fcHV0X3VzZXIoKHgpLCBfcCk7CVwKKwlfZTsJCQkJCVwKK30pCisKK2V4dGVybiBpbnQgX19wdXRfdXNlcl9iYWQodm9pZCk7CisKKy8qCisgKiBUZWxsIGdjYyB3ZSByZWFkIGZyb20gbWVtb3J5IGluc3RlYWQgb2Ygd3JpdGluZzogdGhpcyBpcyBiZWNhdXNlCisgKiB3ZSBkbyBub3Qgd3JpdGUgdG8gYW55IG1lbW9yeSBnY2Mga25vd3MgYWJvdXQsIHNvIHRoZXJlIGFyZSBubworICogYWxpYXNpbmcgaXNzdWVzLgorICovCisKKyNpZmRlZiBDT05GSUdfTU1VCisKKyNkZWZpbmUgX19wdXRfdXNlcl9hc20oZXJyLHgscHRyLGRzaXplLGNvbnN0cmFpbnQpCQkJCQlcCitkbyB7CQkJCQkJCQkJCQlcCisJYXNtIHZvbGF0aWxlKCIxOglzdCJkc2l6ZSIlSTEJJTIsJU0xCVxuIgkJCQlcCisJCSAgICAgIjI6CQkJCVxuIgkJCQlcCisJCSAgICAgIi5zdWJzZWN0aW9uIDIJCQlcbiIJCQkJXAorCQkgICAgICIzOglzZXRsb3MJCSUzLCUwCVxuIgkJCQlcCisJCSAgICAgIgkJYnJhCQkyYglcbiIJCQkJXAorCQkgICAgICIucHJldmlvdXMJCQkJXG4iCQkJCVwKKwkJICAgICAiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIgkJXG4iCQkJCVwKKwkJICAgICAiCQkuYmFsaWduCQk4CVxuIgkJCQlcCisJCSAgICAgIgkJLmxvbmcJCTFiLDNiCVxuIgkJCQlcCisJCSAgICAgIi5wcmV2aW91cyIJCQkJCQkJXAorCQkgICAgIDogIj1yIiAoZXJyKQkJCQkJCQlcCisJCSAgICAgOiAibSIgKCpfX3B0cihwdHIpKSwgY29uc3RyYWludCAoeCksICJpIigtRUZBVUxUKSwgIjAiKGVycikJXAorCQkgICAgIDogIm1lbW9yeSIpOwkJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZWxzZQorCisjZGVmaW5lIF9fcHV0X3VzZXJfYXNtKGVycix4LHB0cixid2wsY29uKQlcCitkbyB7CQkJCQkJXAorCWFzbSgiCXN0ImJ3bCIlSTAJJTEsJU0wCVxuIglcCisJICAgICIJbWVtYmFyCQkJXG4iCVwKKwkgICAgOgkJCQkJXAorCSAgICA6ICJtIiAoKl9fcHRyKHB0cikpLCBjb24gKHgpCVwKKwkgICAgOiAibWVtb3J5Iik7CQkJXAorfSB3aGlsZSAoMCkKKworI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKgorICovCisjZGVmaW5lIF9fZ2V0X3VzZXIoeCwgcHRyKQkJCQkJCVwKKyh7CQkJCQkJCQkJXAorCXR5cGVvZigqKHB0cikpIF9fZ3VfdmFsID0gMDsJCQkJCVwKKwlpbnQgX19ndV9lcnIgPSAwOwkJCQkJCVwKKwkJCQkJCQkJCVwKKwlzd2l0Y2ggKHNpemVvZigqKHB0cikpKSB7CQkJCQlcCisJY2FzZSAxOgkJCQkJCQkJXAorCQlfX2dldF91c2VyX2FzbShfX2d1X2VyciwgX19ndV92YWwsIHB0ciwgInViIiwgIj1yIik7CVwKKwkJYnJlYWs7CQkJCQkJCVwKKwljYXNlIDI6CQkJCQkJCQlcCisJCV9fZ2V0X3VzZXJfYXNtKF9fZ3VfZXJyLCBfX2d1X3ZhbCwgcHRyLCAidWgiLCAiPXIiKTsJXAorCQlicmVhazsJCQkJCQkJXAorCWNhc2UgNDoJCQkJCQkJCVwKKwkJX19nZXRfdXNlcl9hc20oX19ndV9lcnIsIF9fZ3VfdmFsLCBwdHIsICIiLCAiPXIiKTsJXAorCQlicmVhazsJCQkJCQkJXAorCWNhc2UgODoJCQkJCQkJCVwKKwkJX19nZXRfdXNlcl9hc20oX19ndV9lcnIsIF9fZ3VfdmFsLCBwdHIsICJkIiwgIj1lIik7CVwKKwkJYnJlYWs7CQkJCQkJCVwKKwlkZWZhdWx0OgkJCQkJCQlcCisJCV9fZ3VfZXJyID0gX19nZXRfdXNlcl9iYWQoKTsJCQkJXAorCQlicmVhazsJCQkJCQkJXAorCX0JCQkJCQkJCVwKKwkoeCkgPSBfX2d1X3ZhbDsJCQkJCQkJXAorCV9fZ3VfZXJyOwkJCQkJCQlcCit9KQorCisjZGVmaW5lIGdldF91c2VyKHgsIHB0cikJCQlcCisoewkJCQkJCVwKKwl0eXBlb2YoJipwdHIpIF9wID0gKHB0cik7CQlcCisJaW50IF9lOwkJCQkJXAorCQkJCQkJXAorCV9lID0gX19yYW5nZV9vayhfcCwgc2l6ZW9mKCpfcCkpOwlcCisJaWYgKGxpa2VseShfZSA9PSAwKSkJCQlcCisJCV9lID0gX19nZXRfdXNlcigoeCksIF9wKTsJXAorCWVsc2UJCQkJCVwKKwkJKHgpID0gKHR5cGVvZih4KSkgMDsJCVwKKwlfZTsJCQkJCVwKK30pCisKK2V4dGVybiBpbnQgX19nZXRfdXNlcl9iYWQodm9pZCk7CisKKyNpZmRlZiBDT05GSUdfTU1VCisKKyNkZWZpbmUgX19nZXRfdXNlcl9hc20oZXJyLHgscHRyLGR0eXBlLGNvbnN0cmFpbnQpCVwKK2RvIHsJCQkJCQkJXAorCWFzbSgiMToJCWxkImR0eXBlIiVJMgklTTIsJTEJXG4iCVwKKwkgICAgIjI6CQkJCQlcbiIJXAorCSAgICAiLnN1YnNlY3Rpb24gMgkJCVxuIglcCisJICAgICIzOgkJc2V0bG9zCQklMywlMAlcbiIJXAorCSAgICAiCQlzZXRsb3MJCSMwLCUxCVxuIglcCisJICAgICIJCWJyYQkJMmIJXG4iCVwKKwkgICAgIi5wcmV2aW91cwkJCQlcbiIJXAorCSAgICAiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIgkJXG4iCVwKKwkgICAgIgkJLmJhbGlnbgkJOAlcbiIJXAorCSAgICAiCQkubG9uZwkJMWIsM2IJXG4iCVwKKwkgICAgIi5wcmV2aW91cyIJCQkJCVwKKwkgICAgOiAiPXIiIChlcnIpLCBjb25zdHJhaW50ICh4KQkJXAorCSAgICA6ICJtIiAoKl9fcHRyKHB0cikpLCAiaSIoLUVGQVVMVCksICIwIihlcnIpCVwKKwkgICAgKTsJCQkJCQlcCit9IHdoaWxlKDApCisKKyNlbHNlCisKKyNkZWZpbmUgX19nZXRfdXNlcl9hc20oZXJyLHgscHRyLGJ3bCxjb24pCVwKKwlhc20oIglsZCJid2wiJUkxCSVNMSwlMAlcbiIJXAorCSAgICAiCW1lbWJhcgkJCVxuIglcCisJICAgIDogY29uKHgpCQkJCVwKKwkgICAgOiAibSIgKCpfX3B0cihwdHIpKSkKKworI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKgorICovCisjaWZkZWYgQ09ORklHX01NVQorZXh0ZXJuIGxvbmcgX19tZW1zZXRfdXNlcih2b2lkICpkc3QsIHVuc2lnbmVkIGxvbmcgY291bnQpOworZXh0ZXJuIGxvbmcgX19tZW1jcHlfdXNlcih2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgbG9uZyBjb3VudCk7CisKKyNkZWZpbmUgY2xlYXJfdXNlcihkc3QsY291bnQpCQkJX19tZW1zZXRfdXNlcigoZHN0KSwgKGNvdW50KSkKKyNkZWZpbmUgX19jb3B5X2Zyb21fdXNlcl9pbmF0b21pYyh0bywgZnJvbSwgbikJX19tZW1jcHlfdXNlcigodG8pLCAoZnJvbSksIChuKSkKKyNkZWZpbmUgX19jb3B5X3RvX3VzZXJfaW5hdG9taWModG8sIGZyb20sIG4pCV9fbWVtY3B5X3VzZXIoKHRvKSwgKGZyb20pLCAobikpCisKKyNlbHNlCisKKyNkZWZpbmUgY2xlYXJfdXNlcihkc3QsY291bnQpCQkJKG1lbXNldCgoZHN0KSwgMCwgKGNvdW50KSksIDApCisjZGVmaW5lIF9fY29weV9mcm9tX3VzZXJfaW5hdG9taWModG8sIGZyb20sIG4pCShtZW1jcHkoKHRvKSwgKGZyb20pLCAobikpLCAwKQorI2RlZmluZSBfX2NvcHlfdG9fdXNlcl9pbmF0b21pYyh0bywgZnJvbSwgbikJKG1lbWNweSgodG8pLCAoZnJvbSksIChuKSksIDApCisKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19tdXN0X2NoZWNrCitfX2NvcHlfdG9fdXNlcih2b2lkIF9fdXNlciAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxvbmcgbikKK3sKKyAgICAgICBtaWdodF9zbGVlcCgpOworICAgICAgIHJldHVybiBfX2NvcHlfdG9fdXNlcl9pbmF0b21pYyh0bywgZnJvbSwgbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZworX19jb3B5X2Zyb21fdXNlcih2b2lkICp0bywgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGxvbmcgbikKK3sKKyAgICAgICBtaWdodF9zbGVlcCgpOworICAgICAgIHJldHVybiBfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljKHRvLCBmcm9tLCBuKTsKK30KKworc3RhdGljIGlubGluZSBsb25nIGNvcHlfZnJvbV91c2VyKHZvaWQgKnRvLCBjb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pCit7CisJdW5zaWduZWQgbG9uZyByZXQgPSBuOworCisJaWYgKGxpa2VseShfX2FjY2Vzc19vayhmcm9tLCBuKSkpCisJCXJldCA9IF9fY29weV9mcm9tX3VzZXIodG8sIGZyb20sIG4pOworCisJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKKwkJbWVtc2V0KHRvICsgKG4gLSByZXQpLCAwLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSBsb25nIGNvcHlfdG9fdXNlcih2b2lkICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKQoreworCXJldHVybiBsaWtlbHkoX19hY2Nlc3Nfb2sodG8sIG4pKSA/IF9fY29weV90b191c2VyKHRvLCBmcm9tLCBuKSA6IG47Cit9CisKKyNkZWZpbmUgY29weV90b191c2VyX3JldCh0byxmcm9tLG4scmV0dmFsKQkoeyBpZiAoY29weV90b191c2VyKHRvLGZyb20sbikpIHJldHVybiByZXR2YWw7IH0pCisjZGVmaW5lIGNvcHlfZnJvbV91c2VyX3JldCh0byxmcm9tLG4scmV0dmFsKQkoeyBpZiAoY29weV9mcm9tX3VzZXIodG8sZnJvbSxuKSkgcmV0dXJuIHJldHZhbDsgfSkKKworZXh0ZXJuIGxvbmcgc3RybmNweV9mcm9tX3VzZXIoY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMsIGxvbmcgY291bnQpOworZXh0ZXJuIGxvbmcgc3Rybmxlbl91c2VyKGNvbnN0IGNoYXIgKnNyYywgbG9uZyBjb3VudCk7CisKKyNkZWZpbmUgc3RybGVuX3VzZXIoc3RyKSBzdHJubGVuX3VzZXIoc3RyLCAzMjc2NykKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc2VhcmNoX2V4Y2VwdGlvbl90YWJsZSh1bnNpZ25lZCBsb25nIGFkZHIpOworCisjZGVmaW5lIGNvcHlfdG9fdXNlcl9wYWdlKHZtYSwgcGFnZSwgdmFkZHIsIGRzdCwgc3JjLCBsZW4pCW1lbWNweShkc3QsIHNyYywgbGVuKQorI2RlZmluZSBjb3B5X2Zyb21fdXNlcl9wYWdlKHZtYSwgcGFnZSwgdmFkZHIsIGRzdCwgc3JjLCBsZW4pCW1lbWNweShkc3QsIHNyYywgbGVuKQorCisjZW5kaWYgLyogX0FTTV9VQUNDRVNTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi91Y29udGV4dC5oIGIvaW5jbHVkZS9hc20tZnJ2L3Vjb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ4YzBjOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWZydi91Y29udGV4dC5oCkBAIC0wLDAgKzEsMTIgQEAKKyNpZm5kZWYgX0FTTV9VQ09OVEVYVF9ICisjZGVmaW5lIF9BU01fVUNPTlRFWFRfSAorCitzdHJ1Y3QgdWNvbnRleHQgeworCXVuc2lnbmVkIGxvbmcJCXVjX2ZsYWdzOworCXN0cnVjdCB1Y29udGV4dAkJKnVjX2xpbms7CisJc3RhY2tfdAkJCXVjX3N0YWNrOworCXN0cnVjdCBzaWdjb250ZXh0CXVjX21jb250ZXh0OworCXNpZ3NldF90CQl1Y19zaWdtYXNrOwkvKiBtYXNrIGxhc3QgZm9yIGV4dGVuc2liaWxpdHkgKi8KK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L3VuYWxpZ25lZC5oIGIvaW5jbHVkZS9hc20tZnJ2L3VuYWxpZ25lZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwZDE5OWIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1mcnYvdW5hbGlnbmVkLmgKQEAgLTAsMCArMSwyMDMgQEAKKy8qIHVuYWxpZ25lZC5oOiB1bmFsaWduZWQgYWNjZXNzIGhhbmRsZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfQVNNX1VOQUxJR05FRF9ICisjZGVmaW5lIF9BU01fVU5BTElHTkVEX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisvKgorICogVW5hbGlnbmVkIGFjY2Vzc2VzIG9uIHVDbGludXggY2FuJ3QgYmUgcGVyZm9ybWVkIGluIGEgZmF1bHQgaGFuZGxlciAtIHRoZQorICogQ1BVIGRldGVjdHMgdGhlbSBhcyBpbXByZWNpc2UgZXhjZXB0aW9ucyBtYWtpbmcgdGhpcyBpbXBvc3NpYmxlLgorICoKKyAqIFdpdGggdGhlIEZSNDUxLCBob3dldmVyLCB0aGV5IGFyZSBwcmVjaXNlLCBhbmQgc28gd2UgdXNlZCB0byBmaXggdGhlbSB1cCBpbgorICogdGhlIG1lbW9yeSBhY2Nlc3MgZmF1bHQgaGFuZGxlci4gIEhvd2V2ZXIsIGluc3RydWN0aW9uIGJ1bmRsaW5nIG1ha2UgdGhpcworICogaW1wcmFjdGljYWwuICBTbywgbm93IHdlIGZhbGwgYmFjayB0byB1c2luZyBtZW1jcHkuCisgKi8KKyNpZmRlZiBDT05GSUdfTU1VCisKKy8qCisgKiBUaGUgYXNtIHN0YXRlbWVudCBpbiB0aGUgbWFjcm9zIGJlbG93IGlzIGEgd2F5IHRvIGdldCBHQ0MgdG8gY29weSBhCisgKiB2YWx1ZSBmcm9tIG9uZSB2YXJpYWJsZSB0byBhbm90aGVyIHdpdGhvdXQgaGF2aW5nIGFueSBjbHVlIGl0J3MKKyAqIGFjdHVhbGx5IGRvaW5nIHNvLCBzbyB0aGF0IGl0IHdvbid0IGhhdmUgYW55IGlkZWEgdGhhdCB0aGUgdmFsdWVzCisgKiBpbiB0aGUgdHdvIHZhcmlhYmxlcyBhcmUgcmVsYXRlZC4KKyAqLworCisjZGVmaW5lIGdldF91bmFsaWduZWQocHRyKSAoewkJCQlcCisJdHlwZW9mKCgqKHB0cikpKSBfX3g7CQkJCVwKKwl2b2lkICpfX3B0cmNvcHk7CQkJCVwKKwlhc20oIiIgOiAiPXIiIChfX3B0cmNvcHkpIDogIjAiIChwdHIpKTsJCVwKKwltZW1jcHkoJl9feCwgX19wdHJjb3B5LCBzaXplb2YoKihwdHIpKSk7CVwKKwlfX3g7CQkJCQkJXAorfSkKKworI2RlZmluZSBwdXRfdW5hbGlnbmVkKHZhbCwgcHRyKSAoewkJCVwKKwl0eXBlb2YoKCoocHRyKSkpIF9feCA9ICh2YWwpOwkJCVwKKwl2b2lkICpfX3B0cmNvcHk7CQkJCVwKKwlhc20oIiIgOiAiPXIiIChfX3B0cmNvcHkpIDogIjAiIChwdHIpKTsJCVwKKwltZW1jcHkoX19wdHJjb3B5LCAmX194LCBzaXplb2YoKihwdHIpKSk7CVwKK30pCisKK2V4dGVybiBpbnQgaGFuZGxlX21pc2FsaWdubWVudCh1bnNpZ25lZCBsb25nIGVzcjAsIHVuc2lnbmVkIGxvbmcgZWFyMCwgdW5zaWduZWQgbG9uZyBlcGNyMCk7CisKKyNlbHNlCisKKyNkZWZpbmUgZ2V0X3VuYWxpZ25lZChwdHIpCQkJCQkJCVwKKyh7CQkJCQkJCQkJCVwKKwl0eXBlb2YoKihwdHIpKSB4OwkJCQkJCQlcCisJY29uc3QgY2hhciAqX19wID0gKGNvbnN0IGNoYXIgKikgKHB0cik7CQkJCQlcCisJCQkJCQkJCQkJXAorCXN3aXRjaCAoc2l6ZW9mKHgpKSB7CQkJCQkJCVwKKwljYXNlIDE6CQkJCQkJCQkJXAorCQl4ID0gKihwdHIpOwkJCQkJCQlcCisJCWJyZWFrOwkJCQkJCQkJXAorCWNhc2UgMjoJCQkJCQkJCQlcCisJewkJCQkJCQkJCVwKKwkJdWludDhfdCBhOwkJCQkJCQlcCisJCWFzbSgiCWxkdWIlSTIJCSVNMiwlMAkJXG4iCQkJXAorCQkgICAgIglsZHViJUkzLnAJJU0zLCUxCQlcbiIJCQlcCisJCSAgICAiCXNsbGkJCSUwLCM4LCUwCVxuIgkJCVwKKwkJICAgICIJb3IJCSUwLCUxLCUwCVxuIgkJCVwKKwkJICAgIDogIj0mciIoeCksICI9JnIiKGEpCQkJCQlcCisJCSAgICA6ICJtIihfX3BbMF0pLCAgIm0iKF9fcFsxXSkJCQkJCVwKKwkJICAgICk7CQkJCQkJCQlcCisJCWJyZWFrOwkJCQkJCQkJXAorCX0JCQkJCQkJCQlcCisJCQkJCQkJCQkJXAorCWNhc2UgNDoJCQkJCQkJCQlcCisJewkJCQkJCQkJCVwKKwkJdWludDhfdCBhOwkJCQkJCQlcCisJCWFzbSgiCWxkdWIlSTIJCSVNMiwlMAkJXG4iCQkJXAorCQkgICAgIglsZHViJUkzLnAJJU0zLCUxCQlcbiIJCQlcCisJCSAgICAiCXNsbGkJCSUwLCM4LCUwCVxuIgkJCVwKKwkJICAgICIJb3IJCSUwLCUxLCUwCVxuIgkJCVwKKwkJICAgICIJbGR1YiVJNC5wCSVNNCwlMQkJXG4iCQkJXAorCQkgICAgIglzbGxpCQklMCwjOCwlMAlcbiIJCQlcCisJCSAgICAiCW9yCQklMCwlMSwlMAlcbiIJCQlcCisJCSAgICAiCWxkdWIlSTUucAklTTUsJTEJCVxuIgkJCVwKKwkJICAgICIJc2xsaQkJJTAsIzgsJTAJXG4iCQkJXAorCQkgICAgIglvcgkJJTAsJTEsJTAJXG4iCQkJXAorCQkgICAgOiAiPSZyIih4KSwgIj0mciIoYSkJCQkJCVwKKwkJICAgIDogIm0iKF9fcFswXSksICAibSIoX19wWzFdKSwgIm0iKF9fcFsyXSksICJtIihfX3BbM10pCVwKKwkJICAgICk7CQkJCQkJCQlcCisJCWJyZWFrOwkJCQkJCQkJXAorCX0JCQkJCQkJCQlcCisJCQkJCQkJCQkJXAorCWNhc2UgODoJCQkJCQkJCQlcCisJewkJCQkJCQkJCVwKKwkJdW5pb24geyB1aW50NjRfdCB4OyB1MzIgeVsyXTsgfSB6OwkJCQlcCisJCXVpbnQ4X3QgYTsJCQkJCQkJXAorCQlhc20oIglsZHViJUkzCQklTTMsJTAJCVxuIgkJCVwKKwkJICAgICIJbGR1YiVJNC5wCSVNNCwlMgkJXG4iCQkJXAorCQkgICAgIglzbGxpCQklMCwjOCwlMAlcbiIJCQlcCisJCSAgICAiCW9yCQklMCwlMiwlMAlcbiIJCQlcCisJCSAgICAiCWxkdWIlSTUucAklTTUsJTIJCVxuIgkJCVwKKwkJICAgICIJc2xsaQkJJTAsIzgsJTAJXG4iCQkJXAorCQkgICAgIglvcgkJJTAsJTIsJTAJXG4iCQkJXAorCQkgICAgIglsZHViJUk2LnAJJU02LCUyCQlcbiIJCQlcCisJCSAgICAiCXNsbGkJCSUwLCM4LCUwCVxuIgkJCVwKKwkJICAgICIJb3IJCSUwLCUyLCUwCVxuIgkJCVwKKwkJICAgICIJbGR1YiVJNwkJJU03LCUxCQlcbiIJCQlcCisJCSAgICAiCWxkdWIlSTgucAklTTgsJTIJCVxuIgkJCVwKKwkJICAgICIJc2xsaQkJJTEsIzgsJTEJXG4iCQkJXAorCQkgICAgIglvcgkJJTEsJTIsJTEJXG4iCQkJXAorCQkgICAgIglsZHViJUk5LnAJJU05LCUyCQlcbiIJCQlcCisJCSAgICAiCXNsbGkJCSUxLCM4LCUxCVxuIgkJCVwKKwkJICAgICIJb3IJCSUxLCUyLCUxCVxuIgkJCVwKKwkJICAgICIJbGR1YiVJMTAucAklTTEwLCUyCQlcbiIJCQlcCisJCSAgICAiCXNsbGkJCSUxLCM4LCUxCVxuIgkJCVwKKwkJICAgICIJb3IJCSUxLCUyLCUxCVxuIgkJCVwKKwkJICAgIDogIj0mciIoei55WzBdKSwgIj0mciIoei55WzFdKSwgIj0mciIoYSkJCQlcCisJCSAgICA6ICJtIihfX3BbMF0pLCAibSIoX19wWzFdKSwgIm0iKF9fcFsyXSksICJtIihfX3BbM10pLAlcCisJCSAgICAgICJtIihfX3BbNF0pLCAibSIoX19wWzVdKSwgIm0iKF9fcFs2XSksICJtIihfX3BbN10pCVwKKwkJICAgICk7CQkJCQkJCQlcCisJCXggPSB6Lng7CQkJCQkJCVwKKwkJYnJlYWs7CQkJCQkJCQlcCisJfQkJCQkJCQkJCVwKKwkJCQkJCQkJCQlcCisJZGVmYXVsdDoJCQkJCQkJCVwKKwkJeCA9IDA7CQkJCQkJCQlcCisJCUJVRygpOwkJCQkJCQkJXAorCQlicmVhazsJCQkJCQkJCVwKKwl9CQkJCQkJCQkJXAorCQkJCQkJCQkJCVwKKwl4OwkJCQkJCQkJCVwKK30pCisKKyNkZWZpbmUgcHV0X3VuYWxpZ25lZCh2YWwsIHB0cikJCQkJCQkJCVwKK2RvIHsJCQkJCQkJCQkJCVwKKwljaGFyICpfX3AgPSAoY2hhciAqKSAocHRyKTsJCQkJCQkJXAorCWludCB4OwkJCQkJCQkJCQlcCisJCQkJCQkJCQkJCVwKKwlzd2l0Y2ggKHNpemVvZigqcHRyKSkgewkJCQkJCQkJXAorCWNhc2UgMjoJCQkJCQkJCQkJXAorCXsJCQkJCQkJCQkJXAorCQlhc20oIglzdGIlSTEucAklMCwlTTEJCVxuIgkJCQlcCisJCSAgICAiCXNybGkJCSUwLCM4LCUwCVxuIgkJCQlcCisJCSAgICAiCXN0YiVJMgkJJTAsJU0yCQlcbiIJCQkJXAorCQkgICAgOiAiPXIiKHgpLCAiPW0iKF9fcFsxXSksICAiPW0iKF9fcFswXSkJCQkJXAorCQkgICAgOiAiMCIodmFsKQkJCQkJCQkJXAorCQkgICAgKTsJCQkJCQkJCQlcCisJCWJyZWFrOwkJCQkJCQkJCVwKKwl9CQkJCQkJCQkJCVwKKwkJCQkJCQkJCQkJXAorCWNhc2UgNDoJCQkJCQkJCQkJXAorCXsJCQkJCQkJCQkJXAorCQlhc20oIglzdGIlSTEucAklMCwlTTEJCVxuIgkJCQlcCisJCSAgICAiCXNybGkJCSUwLCM4LCUwCVxuIgkJCQlcCisJCSAgICAiCXN0YiVJMi5wCSUwLCVNMgkJXG4iCQkJCVwKKwkJICAgICIJc3JsaQkJJTAsIzgsJTAJXG4iCQkJCVwKKwkJICAgICIJc3RiJUkzLnAJJTAsJU0zCQlcbiIJCQkJXAorCQkgICAgIglzcmxpCQklMCwjOCwlMAlcbiIJCQkJXAorCQkgICAgIglzdGIlSTQJCSUwLCVNNAkJXG4iCQkJCVwKKwkJICAgIDogIj1yIih4KSwgIj1tIihfX3BbM10pLCAgIj1tIihfX3BbMl0pLCAiPW0iKF9fcFsxXSksICI9bSIoX19wWzBdKQlcCisJCSAgICA6ICIwIih2YWwpCQkJCQkJCQlcCisJCSAgICApOwkJCQkJCQkJCVwKKwkJYnJlYWs7CQkJCQkJCQkJXAorCX0JCQkJCQkJCQkJXAorCQkJCQkJCQkJCQlcCisJY2FzZSA4OgkJCQkJCQkJCQlcCisJewkJCQkJCQkJCQlcCisJCXVpbnQzMl90IF9faGlnaCwgX19sb3c7CQkJCQkJCVwKKwkJX19oaWdoID0gKHVpbnQ2NF90KXZhbCA+PiAzMjsJCQkJCQlcCisJCV9fbG93ID0gdmFsICYgMHhmZmZmZmZmZjsJCQkJCQlcCisJCWFzbSgiCXN0YiVJMi5wCSUwLCVNMgkJXG4iCQkJCVwKKwkJICAgICIJc3JsaQkJJTAsIzgsJTAJXG4iCQkJCVwKKwkJICAgICIJc3RiJUkzLnAJJTAsJU0zCQlcbiIJCQkJXAorCQkgICAgIglzcmxpCQklMCwjOCwlMAlcbiIJCQkJXAorCQkgICAgIglzdGIlSTQucAklMCwlTTQJCVxuIgkJCQlcCisJCSAgICAiCXNybGkJCSUwLCM4LCUwCVxuIgkJCQlcCisJCSAgICAiCXN0YiVJNS5wCSUwLCVNNQkJXG4iCQkJCVwKKwkJICAgICIJc3JsaQkJJTAsIzgsJTAJXG4iCQkJCVwKKwkJICAgICIJc3RiJUk2LnAJJTEsJU02CQlcbiIJCQkJXAorCQkgICAgIglzcmxpCQklMSwjOCwlMQlcbiIJCQkJXAorCQkgICAgIglzdGIlSTcucAklMSwlTTcJCVxuIgkJCQlcCisJCSAgICAiCXNybGkJCSUxLCM4LCUxCVxuIgkJCQlcCisJCSAgICAiCXN0YiVJOC5wCSUxLCVNOAkJXG4iCQkJCVwKKwkJICAgICIJc3JsaQkJJTEsIzgsJTEJXG4iCQkJCVwKKwkJICAgICIJc3RiJUk5CQklMSwlTTkJCVxuIgkJCQlcCisJCSAgICA6ICI9JnIiKF9fbG93KSwgIj0mciIoX19oaWdoKSwgIj1tIihfX3BbN10pLCAiPW0iKF9fcFs2XSksIAkJXAorCQkgICAgICAiPW0iKF9fcFs1XSksICI9bSIoX19wWzRdKSwgIj1tIihfX3BbM10pLCAiPW0iKF9fcFsyXSksIAkJXAorCQkgICAgICAiPW0iKF9fcFsxXSksICI9bSIoX19wWzBdKQkJCQkJXAorCQkgICAgOiAiMCIoX19sb3cpLCAiMSIoX19oaWdoKQkJCQkJCVwKKwkJICAgICk7CQkJCQkJCQkJXAorCQlicmVhazsJCQkJCQkJCQlcCisJfQkJCQkJCQkJCQlcCisJCQkJCQkJCQkJCVwKKyAgICAgICAgZGVmYXVsdDoJCQkJCQkJCQlcCisJCSoocHRyKSA9ICh2YWwpOwkJCQkJCQkJXAorCQlicmVhazsJCQkJCQkJCQlcCisJfQkJCQkJCQkJCQlcCit9IHdoaWxlKDApCisKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLWZydi91bmlzdGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2Y5ODliCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tZnJ2L3VuaXN0ZC5oCkBAIC0wLDAgKzEsNTAxIEBACisjaWZuZGVmIF9BU01fVU5JU1REX0hfCisjZGVmaW5lIF9BU01fVU5JU1REX0hfCisKKy8qCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHN5c3RlbSBjYWxsIG51bWJlcnMuCisgKi8KKworI2RlZmluZSBfX05SX3Jlc3RhcnRfc3lzY2FsbCAgICAgIDAKKyNkZWZpbmUgX19OUl9leGl0CQkgIDEKKyNkZWZpbmUgX19OUl9mb3JrCQkgIDIKKyNkZWZpbmUgX19OUl9yZWFkCQkgIDMKKyNkZWZpbmUgX19OUl93cml0ZQkJICA0CisjZGVmaW5lIF9fTlJfb3BlbgkJICA1CisjZGVmaW5lIF9fTlJfY2xvc2UJCSAgNgorI2RlZmluZSBfX05SX3dhaXRwaWQJCSAgNworI2RlZmluZSBfX05SX2NyZWF0CQkgIDgKKyNkZWZpbmUgX19OUl9saW5rCQkgIDkKKyNkZWZpbmUgX19OUl91bmxpbmsJCSAxMAorI2RlZmluZSBfX05SX2V4ZWN2ZQkJIDExCisjZGVmaW5lIF9fTlJfY2hkaXIJCSAxMgorI2RlZmluZSBfX05SX3RpbWUJCSAxMworI2RlZmluZSBfX05SX21rbm9kCQkgMTQKKyNkZWZpbmUgX19OUl9jaG1vZAkJIDE1CisjZGVmaW5lIF9fTlJfbGNob3duCQkgMTYKKyNkZWZpbmUgX19OUl9icmVhawkJIDE3CisjZGVmaW5lIF9fTlJfb2xkc3RhdAkJIDE4CisjZGVmaW5lIF9fTlJfbHNlZWsJCSAxOQorI2RlZmluZSBfX05SX2dldHBpZAkJIDIwCisjZGVmaW5lIF9fTlJfbW91bnQJCSAyMQorI2RlZmluZSBfX05SX3Vtb3VudAkJIDIyCisjZGVmaW5lIF9fTlJfc2V0dWlkCQkgMjMKKyNkZWZpbmUgX19OUl9nZXR1aWQJCSAyNAorI2RlZmluZSBfX05SX3N0aW1lCQkgMjUKKyNkZWZpbmUgX19OUl9wdHJhY2UJCSAyNgorI2RlZmluZSBfX05SX2FsYXJtCQkgMjcKKyNkZWZpbmUgX19OUl9vbGRmc3RhdAkJIDI4CisjZGVmaW5lIF9fTlJfcGF1c2UJCSAyOQorI2RlZmluZSBfX05SX3V0aW1lCQkgMzAKKyNkZWZpbmUgX19OUl9zdHR5CQkgMzEKKyNkZWZpbmUgX19OUl9ndHR5CQkgMzIKKyNkZWZpbmUgX19OUl9hY2Nlc3MJCSAzMworI2RlZmluZSBfX05SX25pY2UJCSAzNAorI2RlZmluZSBfX05SX2Z0aW1lCQkgMzUKKyNkZWZpbmUgX19OUl9zeW5jCQkgMzYKKyNkZWZpbmUgX19OUl9raWxsCQkgMzcKKyNkZWZpbmUgX19OUl9yZW5hbWUJCSAzOAorI2RlZmluZSBfX05SX21rZGlyCQkgMzkKKyNkZWZpbmUgX19OUl9ybWRpcgkJIDQwCisjZGVmaW5lIF9fTlJfZHVwCQkgNDEKKyNkZWZpbmUgX19OUl9waXBlCQkgNDIKKyNkZWZpbmUgX19OUl90aW1lcwkJIDQzCisjZGVmaW5lIF9fTlJfcHJvZgkJIDQ0CisjZGVmaW5lIF9fTlJfYnJrCQkgNDUKKyNkZWZpbmUgX19OUl9zZXRnaWQJCSA0NgorI2RlZmluZSBfX05SX2dldGdpZAkJIDQ3CisjZGVmaW5lIF9fTlJfc2lnbmFsCQkgNDgKKyNkZWZpbmUgX19OUl9nZXRldWlkCQkgNDkKKyNkZWZpbmUgX19OUl9nZXRlZ2lkCQkgNTAKKyNkZWZpbmUgX19OUl9hY2N0CQkgNTEKKyNkZWZpbmUgX19OUl91bW91bnQyCQkgNTIKKyNkZWZpbmUgX19OUl9sb2NrCQkgNTMKKyNkZWZpbmUgX19OUl9pb2N0bAkJIDU0CisjZGVmaW5lIF9fTlJfZmNudGwJCSA1NQorI2RlZmluZSBfX05SX21weAkJIDU2CisjZGVmaW5lIF9fTlJfc2V0cGdpZAkJIDU3CisjZGVmaW5lIF9fTlJfdWxpbWl0CQkgNTgKKy8vICNkZWZpbmUgX19OUl9vbGRvbGR1bmFtZQkgLyogNTkgKi8gb2Jzb2xldGUKKyNkZWZpbmUgX19OUl91bWFzawkJIDYwCisjZGVmaW5lIF9fTlJfY2hyb290CQkgNjEKKyNkZWZpbmUgX19OUl91c3RhdAkJIDYyCisjZGVmaW5lIF9fTlJfZHVwMgkJIDYzCisjZGVmaW5lIF9fTlJfZ2V0cHBpZAkJIDY0CisjZGVmaW5lIF9fTlJfZ2V0cGdycAkJIDY1CisjZGVmaW5lIF9fTlJfc2V0c2lkCQkgNjYKKyNkZWZpbmUgX19OUl9zaWdhY3Rpb24JCSA2NworI2RlZmluZSBfX05SX3NnZXRtYXNrCQkgNjgKKyNkZWZpbmUgX19OUl9zc2V0bWFzawkJIDY5CisjZGVmaW5lIF9fTlJfc2V0cmV1aWQJCSA3MAorI2RlZmluZSBfX05SX3NldHJlZ2lkCQkgNzEKKyNkZWZpbmUgX19OUl9zaWdzdXNwZW5kCQkgNzIKKyNkZWZpbmUgX19OUl9zaWdwZW5kaW5nCQkgNzMKKyNkZWZpbmUgX19OUl9zZXRob3N0bmFtZQkgNzQKKyNkZWZpbmUgX19OUl9zZXRybGltaXQJCSA3NQorI2RlZmluZSBfX05SX2dldHJsaW1pdAkJIDc2CS8qIEJhY2sgY29tcGF0aWJsZSAyR2lnIGxpbWl0ZWQgcmxpbWl0ICovCisjZGVmaW5lIF9fTlJfZ2V0cnVzYWdlCQkgNzcKKyNkZWZpbmUgX19OUl9nZXR0aW1lb2ZkYXkJIDc4CisjZGVmaW5lIF9fTlJfc2V0dGltZW9mZGF5CSA3OQorI2RlZmluZSBfX05SX2dldGdyb3VwcwkJIDgwCisjZGVmaW5lIF9fTlJfc2V0Z3JvdXBzCQkgODEKKyNkZWZpbmUgX19OUl9zZWxlY3QJCSA4MgorI2RlZmluZSBfX05SX3N5bWxpbmsJCSA4MworI2RlZmluZSBfX05SX29sZGxzdGF0CQkgODQKKyNkZWZpbmUgX19OUl9yZWFkbGluawkJIDg1CisjZGVmaW5lIF9fTlJfdXNlbGliCQkgODYKKyNkZWZpbmUgX19OUl9zd2Fwb24JCSA4NworI2RlZmluZSBfX05SX3JlYm9vdAkJIDg4CisjZGVmaW5lIF9fTlJfcmVhZGRpcgkJIDg5CisvLyAjZGVmaW5lIF9fTlJfbW1hcAkJIDkwCS8qIG9ic29sZXRlIC0gbm90IGltcGxlbWVudGVkICovCisjZGVmaW5lIF9fTlJfbXVubWFwCQkgOTEKKyNkZWZpbmUgX19OUl90cnVuY2F0ZQkJIDkyCisjZGVmaW5lIF9fTlJfZnRydW5jYXRlCQkgOTMKKyNkZWZpbmUgX19OUl9mY2htb2QJCSA5NAorI2RlZmluZSBfX05SX2ZjaG93bgkJIDk1CisjZGVmaW5lIF9fTlJfZ2V0cHJpb3JpdHkJIDk2CisjZGVmaW5lIF9fTlJfc2V0cHJpb3JpdHkJIDk3CisvLyAjZGVmaW5lIF9fTlJfcHJvZmlsCQkgLyogOTggKi8gb2Jzb2xldGUKKyNkZWZpbmUgX19OUl9zdGF0ZnMJCSA5OQorI2RlZmluZSBfX05SX2ZzdGF0ZnMJCTEwMAorLy8gI2RlZmluZSBfX05SX2lvcGVybQkJLyogMTAxICovIG5vdCBzdXBwb3J0ZWQKKyNkZWZpbmUgX19OUl9zb2NrZXRjYWxsCQkxMDIKKyNkZWZpbmUgX19OUl9zeXNsb2cJCTEwMworI2RlZmluZSBfX05SX3NldGl0aW1lcgkJMTA0CisjZGVmaW5lIF9fTlJfZ2V0aXRpbWVyCQkxMDUKKyNkZWZpbmUgX19OUl9zdGF0CQkxMDYKKyNkZWZpbmUgX19OUl9sc3RhdAkJMTA3CisjZGVmaW5lIF9fTlJfZnN0YXQJCTEwOAorLy8gI2RlZmluZSBfX05SX29sZHVuYW1lCQkvKiAxMDkgKi8gb2Jzb2xldGUKKy8vICNkZWZpbmUgX19OUl9pb3BsCQkvKiAxMTAgKi8gbm90IHN1cHBvcnRlZAorI2RlZmluZSBfX05SX3ZoYW5ndXAJCTExMQorLy8gI2RlZmluZSBfX05SX2lkbGUJCS8qIDExMiAqLyBPYnNvbGV0ZQorLy8gI2RlZmluZSBfX05SX3ZtODZvbGQJCS8qIDExMyAqLyBub3Qgc3VwcG9ydGVkCisjZGVmaW5lIF9fTlJfd2FpdDQJCTExNAorI2RlZmluZSBfX05SX3N3YXBvZmYJCTExNQorI2RlZmluZSBfX05SX3N5c2luZm8JCTExNgorI2RlZmluZSBfX05SX2lwYwkJMTE3CisjZGVmaW5lIF9fTlJfZnN5bmMJCTExOAorI2RlZmluZSBfX05SX3NpZ3JldHVybgkJMTE5CisjZGVmaW5lIF9fTlJfY2xvbmUJCTEyMAorI2RlZmluZSBfX05SX3NldGRvbWFpbm5hbWUJMTIxCisjZGVmaW5lIF9fTlJfdW5hbWUJCTEyMgorLy8gI2RlZmluZSBfX05SX21vZGlmeV9sZHQJLyogMTIzICovIG5vdCBzdXBwb3J0ZWQKKyNkZWZpbmUgX19OUl9jYWNoZWZsdXNoCQkxMjMKKyNkZWZpbmUgX19OUl9hZGp0aW1leAkJMTI0CisjZGVmaW5lIF9fTlJfbXByb3RlY3QJCTEyNQorI2RlZmluZSBfX05SX3NpZ3Byb2NtYXNrCTEyNgorI2RlZmluZSBfX05SX2NyZWF0ZV9tb2R1bGUJMTI3CisjZGVmaW5lIF9fTlJfaW5pdF9tb2R1bGUJMTI4CisjZGVmaW5lIF9fTlJfZGVsZXRlX21vZHVsZQkxMjkKKyNkZWZpbmUgX19OUl9nZXRfa2VybmVsX3N5bXMJMTMwCisjZGVmaW5lIF9fTlJfcXVvdGFjdGwJCTEzMQorI2RlZmluZSBfX05SX2dldHBnaWQJCTEzMgorI2RlZmluZSBfX05SX2ZjaGRpcgkJMTMzCisjZGVmaW5lIF9fTlJfYmRmbHVzaAkJMTM0CisjZGVmaW5lIF9fTlJfc3lzZnMJCTEzNQorI2RlZmluZSBfX05SX3BlcnNvbmFsaXR5CTEzNgorI2RlZmluZSBfX05SX2Fmc19zeXNjYWxsCTEzNyAvKiBTeXNjYWxsIGZvciBBbmRyZXcgRmlsZSBTeXN0ZW0gKi8KKyNkZWZpbmUgX19OUl9zZXRmc3VpZAkJMTM4CisjZGVmaW5lIF9fTlJfc2V0ZnNnaWQJCTEzOQorI2RlZmluZSBfX05SX19sbHNlZWsJCTE0MAorI2RlZmluZSBfX05SX2dldGRlbnRzCQkxNDEKKyNkZWZpbmUgX19OUl9fbmV3c2VsZWN0CQkxNDIKKyNkZWZpbmUgX19OUl9mbG9jawkJMTQzCisjZGVmaW5lIF9fTlJfbXN5bmMJCTE0NAorI2RlZmluZSBfX05SX3JlYWR2CQkxNDUKKyNkZWZpbmUgX19OUl93cml0ZXYJCTE0NgorI2RlZmluZSBfX05SX2dldHNpZAkJMTQ3CisjZGVmaW5lIF9fTlJfZmRhdGFzeW5jCQkxNDgKKyNkZWZpbmUgX19OUl9fc3lzY3RsCQkxNDkKKyNkZWZpbmUgX19OUl9tbG9jawkJMTUwCisjZGVmaW5lIF9fTlJfbXVubG9jawkJMTUxCisjZGVmaW5lIF9fTlJfbWxvY2thbGwJCTE1MgorI2RlZmluZSBfX05SX211bmxvY2thbGwJCTE1MworI2RlZmluZSBfX05SX3NjaGVkX3NldHBhcmFtCQkxNTQKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRwYXJhbQkJMTU1CisjZGVmaW5lIF9fTlJfc2NoZWRfc2V0c2NoZWR1bGVyCQkxNTYKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRzY2hlZHVsZXIJCTE1NworI2RlZmluZSBfX05SX3NjaGVkX3lpZWxkCQkxNTgKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4CTE1OQorI2RlZmluZSBfX05SX3NjaGVkX2dldF9wcmlvcml0eV9taW4JMTYwCisjZGVmaW5lIF9fTlJfc2NoZWRfcnJfZ2V0X2ludGVydmFsCTE2MQorI2RlZmluZSBfX05SX25hbm9zbGVlcAkJMTYyCisjZGVmaW5lIF9fTlJfbXJlbWFwCQkxNjMKKyNkZWZpbmUgX19OUl9zZXRyZXN1aWQJCTE2NAorI2RlZmluZSBfX05SX2dldHJlc3VpZAkJMTY1CisvLyAjZGVmaW5lIF9fTlJfdm04NgkJLyogMTY2ICovIG5vdCBzdXBwb3J0ZWQKKyNkZWZpbmUgX19OUl9xdWVyeV9tb2R1bGUJMTY3CisjZGVmaW5lIF9fTlJfcG9sbAkJMTY4CisjZGVmaW5lIF9fTlJfbmZzc2VydmN0bAkJMTY5CisjZGVmaW5lIF9fTlJfc2V0cmVzZ2lkCQkxNzAKKyNkZWZpbmUgX19OUl9nZXRyZXNnaWQJCTE3MQorI2RlZmluZSBfX05SX3ByY3RsCQkxNzIKKyNkZWZpbmUgX19OUl9ydF9zaWdyZXR1cm4JMTczCisjZGVmaW5lIF9fTlJfcnRfc2lnYWN0aW9uCTE3NAorI2RlZmluZSBfX05SX3J0X3NpZ3Byb2NtYXNrCTE3NQorI2RlZmluZSBfX05SX3J0X3NpZ3BlbmRpbmcJMTc2CisjZGVmaW5lIF9fTlJfcnRfc2lndGltZWR3YWl0CTE3NworI2RlZmluZSBfX05SX3J0X3NpZ3F1ZXVlaW5mbwkxNzgKKyNkZWZpbmUgX19OUl9ydF9zaWdzdXNwZW5kCTE3OQorI2RlZmluZSBfX05SX3ByZWFkCQkxODAKKyNkZWZpbmUgX19OUl9wd3JpdGUJCTE4MQorI2RlZmluZSBfX05SX2Nob3duCQkxODIKKyNkZWZpbmUgX19OUl9nZXRjd2QJCTE4MworI2RlZmluZSBfX05SX2NhcGdldAkJMTg0CisjZGVmaW5lIF9fTlJfY2Fwc2V0CQkxODUKKyNkZWZpbmUgX19OUl9zaWdhbHRzdGFjawkxODYKKyNkZWZpbmUgX19OUl9zZW5kZmlsZQkJMTg3CisjZGVmaW5lIF9fTlJfZ2V0cG1zZwkJMTg4CS8qIHNvbWUgcGVvcGxlIGFjdHVhbGx5IHdhbnQgc3RyZWFtcyAqLworI2RlZmluZSBfX05SX3B1dHBtc2cJCTE4OQkvKiBzb21lIHBlb3BsZSBhY3R1YWxseSB3YW50IHN0cmVhbXMgKi8KKyNkZWZpbmUgX19OUl92Zm9yawkJMTkwCisjZGVmaW5lIF9fTlJfdWdldHJsaW1pdAkJMTkxCS8qIFN1UyBjb21wbGlhbnQgZ2V0cmxpbWl0ICovCisjZGVmaW5lIF9fTlJfbW1hcDIJCTE5MgorI2RlZmluZSBfX05SX3RydW5jYXRlNjQJCTE5MworI2RlZmluZSBfX05SX2Z0cnVuY2F0ZTY0CTE5NAorI2RlZmluZSBfX05SX3N0YXQ2NAkJMTk1CisjZGVmaW5lIF9fTlJfbHN0YXQ2NAkJMTk2CisjZGVmaW5lIF9fTlJfZnN0YXQ2NAkJMTk3CisjZGVmaW5lIF9fTlJfbGNob3duMzIJCTE5OAorI2RlZmluZSBfX05SX2dldHVpZDMyCQkxOTkKKyNkZWZpbmUgX19OUl9nZXRnaWQzMgkJMjAwCisjZGVmaW5lIF9fTlJfZ2V0ZXVpZDMyCQkyMDEKKyNkZWZpbmUgX19OUl9nZXRlZ2lkMzIJCTIwMgorI2RlZmluZSBfX05SX3NldHJldWlkMzIJCTIwMworI2RlZmluZSBfX05SX3NldHJlZ2lkMzIJCTIwNAorI2RlZmluZSBfX05SX2dldGdyb3VwczMyCTIwNQorI2RlZmluZSBfX05SX3NldGdyb3VwczMyCTIwNgorI2RlZmluZSBfX05SX2ZjaG93bjMyCQkyMDcKKyNkZWZpbmUgX19OUl9zZXRyZXN1aWQzMgkyMDgKKyNkZWZpbmUgX19OUl9nZXRyZXN1aWQzMgkyMDkKKyNkZWZpbmUgX19OUl9zZXRyZXNnaWQzMgkyMTAKKyNkZWZpbmUgX19OUl9nZXRyZXNnaWQzMgkyMTEKKyNkZWZpbmUgX19OUl9jaG93bjMyCQkyMTIKKyNkZWZpbmUgX19OUl9zZXR1aWQzMgkJMjEzCisjZGVmaW5lIF9fTlJfc2V0Z2lkMzIJCTIxNAorI2RlZmluZSBfX05SX3NldGZzdWlkMzIJCTIxNQorI2RlZmluZSBfX05SX3NldGZzZ2lkMzIJCTIxNgorI2RlZmluZSBfX05SX3Bpdm90X3Jvb3QJCTIxNworI2RlZmluZSBfX05SX21pbmNvcmUJCTIxOAorI2RlZmluZSBfX05SX21hZHZpc2UJCTIxOQorCisjZGVmaW5lIF9fTlJfZ2V0ZGVudHM2NAkJMjIwCisjZGVmaW5lIF9fTlJfZmNudGw2NAkJMjIxCisjZGVmaW5lIF9fTlJfc2VjdXJpdHkJCTIyMwkvKiBzeXNjYWxsIGZvciBzZWN1cml0eSBtb2R1bGVzICovCisjZGVmaW5lIF9fTlJfZ2V0dGlkCQkyMjQKKyNkZWZpbmUgX19OUl9yZWFkYWhlYWQJCTIyNQorI2RlZmluZSBfX05SX3NldHhhdHRyCQkyMjYKKyNkZWZpbmUgX19OUl9sc2V0eGF0dHIJCTIyNworI2RlZmluZSBfX05SX2ZzZXR4YXR0cgkJMjI4CisjZGVmaW5lIF9fTlJfZ2V0eGF0dHIJCTIyOQorI2RlZmluZSBfX05SX2xnZXR4YXR0cgkJMjMwCisjZGVmaW5lIF9fTlJfZmdldHhhdHRyCQkyMzEKKyNkZWZpbmUgX19OUl9saXN0eGF0dHIJCTIzMgorI2RlZmluZSBfX05SX2xsaXN0eGF0dHIJCTIzMworI2RlZmluZSBfX05SX2ZsaXN0eGF0dHIJCTIzNAorI2RlZmluZSBfX05SX3JlbW92ZXhhdHRyCTIzNQorI2RlZmluZSBfX05SX2xyZW1vdmV4YXR0cgkyMzYKKyNkZWZpbmUgX19OUl9mcmVtb3ZleGF0dHIJMjM3CisjZGVmaW5lIF9fTlJfdGtpbGwJCTIzOAorI2RlZmluZSBfX05SX3NlbmRmaWxlNjQJCTIzOQorI2RlZmluZSBfX05SX2Z1dGV4CQkyNDAKKyNkZWZpbmUgX19OUl9zY2hlZF9zZXRhZmZpbml0eQkyNDEKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRhZmZpbml0eQkyNDIKKyNkZWZpbmUgX19OUl9zZXRfdGhyZWFkX2FyZWEJMjQzCisjZGVmaW5lIF9fTlJfZ2V0X3RocmVhZF9hcmVhCTI0NAorI2RlZmluZSBfX05SX2lvX3NldHVwCQkyNDUKKyNkZWZpbmUgX19OUl9pb19kZXN0cm95CQkyNDYKKyNkZWZpbmUgX19OUl9pb19nZXRldmVudHMJMjQ3CisjZGVmaW5lIF9fTlJfaW9fc3VibWl0CQkyNDgKKyNkZWZpbmUgX19OUl9pb19jYW5jZWwJCTI0OQorI2RlZmluZSBfX05SX2ZhZHZpc2U2NAkJMjUwCisKKyNkZWZpbmUgX19OUl9leGl0X2dyb3VwCQkyNTIKKyNkZWZpbmUgX19OUl9sb29rdXBfZGNvb2tpZQkyNTMKKyNkZWZpbmUgX19OUl9lcG9sbF9jcmVhdGUJMjU0CisjZGVmaW5lIF9fTlJfZXBvbGxfY3RsCQkyNTUKKyNkZWZpbmUgX19OUl9lcG9sbF93YWl0CQkyNTYKKyNkZWZpbmUgX19OUl9yZW1hcF9maWxlX3BhZ2VzCTI1NworI2RlZmluZSBfX05SX3NldF90aWRfYWRkcmVzcwkyNTgKKyNkZWZpbmUgX19OUl90aW1lcl9jcmVhdGUJMjU5CisjZGVmaW5lIF9fTlJfdGltZXJfc2V0dGltZQkoX19OUl90aW1lcl9jcmVhdGUrMSkKKyNkZWZpbmUgX19OUl90aW1lcl9nZXR0aW1lCShfX05SX3RpbWVyX2NyZWF0ZSsyKQorI2RlZmluZSBfX05SX3RpbWVyX2dldG92ZXJydW4JKF9fTlJfdGltZXJfY3JlYXRlKzMpCisjZGVmaW5lIF9fTlJfdGltZXJfZGVsZXRlCShfX05SX3RpbWVyX2NyZWF0ZSs0KQorI2RlZmluZSBfX05SX2Nsb2NrX3NldHRpbWUJKF9fTlJfdGltZXJfY3JlYXRlKzUpCisjZGVmaW5lIF9fTlJfY2xvY2tfZ2V0dGltZQkoX19OUl90aW1lcl9jcmVhdGUrNikKKyNkZWZpbmUgX19OUl9jbG9ja19nZXRyZXMJKF9fTlJfdGltZXJfY3JlYXRlKzcpCisjZGVmaW5lIF9fTlJfY2xvY2tfbmFub3NsZWVwCShfX05SX3RpbWVyX2NyZWF0ZSs4KQorI2RlZmluZSBfX05SX3N0YXRmczY0CQkyNjgKKyNkZWZpbmUgX19OUl9mc3RhdGZzNjQJCTI2OQorI2RlZmluZSBfX05SX3Rna2lsbAkJMjcwCisjZGVmaW5lIF9fTlJfdXRpbWVzCQkyNzEKKyNkZWZpbmUgX19OUl9mYWR2aXNlNjRfNjQJMjcyCisjZGVmaW5lIF9fTlJfdnNlcnZlcgkJMjczCisjZGVmaW5lIF9fTlJfbWJpbmQJCTI3NAorI2RlZmluZSBfX05SX2dldF9tZW1wb2xpY3kJMjc1CisjZGVmaW5lIF9fTlJfc2V0X21lbXBvbGljeQkyNzYKKyNkZWZpbmUgX19OUl9tcV9vcGVuIAkJMjc3CisjZGVmaW5lIF9fTlJfbXFfdW5saW5rCQkoX19OUl9tcV9vcGVuKzEpCisjZGVmaW5lIF9fTlJfbXFfdGltZWRzZW5kCShfX05SX21xX29wZW4rMikKKyNkZWZpbmUgX19OUl9tcV90aW1lZHJlY2VpdmUJKF9fTlJfbXFfb3BlbiszKQorI2RlZmluZSBfX05SX21xX25vdGlmeQkJKF9fTlJfbXFfb3Blbis0KQorI2RlZmluZSBfX05SX21xX2dldHNldGF0dHIJKF9fTlJfbXFfb3Blbis1KQorI2RlZmluZSBfX05SX3N5c19rZXhlY19sb2FkCTI4MworI2RlZmluZSBfX05SX3dhaXRpZAkJMjg0CisvKiAjZGVmaW5lIF9fTlJfc3lzX3NldGFsdHJvb3QJMjg1ICovCisjZGVmaW5lIF9fTlJfYWRkX2tleQkJMjg2CisjZGVmaW5lIF9fTlJfcmVxdWVzdF9rZXkJMjg3CisjZGVmaW5lIF9fTlJfa2V5Y3RsCQkyODgKKyNkZWZpbmUgX19OUl92cGVyZmN0cl9vcGVuCTI4OQorI2RlZmluZSBfX05SX3ZwZXJmY3RyX2NvbnRyb2wJKF9fTlJfcGVyZmN0cl9pbmZvKzEpCisjZGVmaW5lIF9fTlJfdnBlcmZjdHJfdW5saW5rCShfX05SX3BlcmZjdHJfaW5mbysyKQorI2RlZmluZSBfX05SX3ZwZXJmY3RyX2lyZXN1bWUJKF9fTlJfcGVyZmN0cl9pbmZvKzMpCisjZGVmaW5lIF9fTlJfdnBlcmZjdHJfcmVhZAkoX19OUl9wZXJmY3RyX2luZm8rNCkKKworI2RlZmluZSBOUl9zeXNjYWxscyAyOTQKKworLyoKKyAqIHByb2Nlc3MgdGhlIHJldHVybiB2YWx1ZSBvZiBhIHN5c2NhbGwsIGNvbnNpZ25pbmcgaXQgdG8gb25lIG9mIHR3byBwb3NzaWJsZSBmYXRlcworICogLSB1c2VyLXZpc2libGUgZXJyb3IgbnVtYmVycyBhcmUgaW4gdGhlIHJhbmdlIC0xIC0gLTQwOTU6IHNlZSA8YXNtLWZydi9lcnJuby5oPgorICovCisjdW5kZWYgX19zeXNjYWxsX3JldHVybgorI2RlZmluZSBfX3N5c2NhbGxfcmV0dXJuKHR5cGUsIHJlcykJCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisgICAgICAgIHVuc2lnbmVkIGxvbmcgX19zcjIgPSAocmVzKTsJCQkJCVwKKwlpZiAoX19idWlsdGluX2V4cGVjdChfX3NyMiA+PSAodW5zaWduZWQgbG9uZykoLTQwOTUpLCAwKSkgewlcCisJCWVycm5vID0gKC1fX3NyMik7CQkJCQlcCisJCV9fc3IyID0gVUxPTkdfTUFYOwkJCQkJXAorCX0JCQkJCQkJCVwKKwlyZXR1cm4gKHR5cGUpIF9fc3IyOwkJCQkJCVwKK30gd2hpbGUgKDApCisKKy8qIFhYWCAtIF9mb28gbmVlZHMgdG8gYmUgX19mb28sIHdoaWxlIF9fTlJfYmFyIGNvdWxkIGJlIF9OUl9iYXIuICovCisKKyN1bmRlZiBfc3lzY2FsbDAKKyNkZWZpbmUgX3N5c2NhbGwwKHR5cGUsbmFtZSkJCQkJCQlcCit0eXBlIG5hbWUodm9pZCkJCQkJCQkJCVwKK3sJCQkJCQkJCQlcCisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3NjbnVtIF9fYXNtX18gKCJncjciKSA9IChfX05SXyMjbmFtZSk7CVwKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fc2MwIF9fYXNtX18gKCJncjgiKTsJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJ0aXJhIGdyMCwjMCIJCQkJXAorCQkJICAgICAgOiAiPXIiIChfX3NjMCkJCQkJXAorCQkJICAgICAgOiAiciIgKF9fc2NudW0pKTsJCQkJXAorCV9fc3lzY2FsbF9yZXR1cm4odHlwZSwgX19zYzApOwkJCQkJXAorfQorCisjdW5kZWYgX3N5c2NhbGwxCisjZGVmaW5lIF9zeXNjYWxsMSh0eXBlLG5hbWUsdHlwZTEsYXJnMSkJCQkJCQlcCit0eXBlIG5hbWUodHlwZTEgYXJnMSkJCQkJCQkJCVwKK3sJCQkJCQkJCQkJXAorCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19zY251bSBfX2FzbV9fICgiZ3I3IikgPSAoX19OUl8jI25hbWUpOwkJXAorCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19zYzAgX19hc21fXyAoImdyOCIpID0gKHVuc2lnbmVkIGxvbmcpIGFyZzE7CVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInRpcmEgZ3IwLCMwIgkJCQkJXAorCQkJICAgICAgOiAiK3IiIChfX3NjMCkJCQkJCVwKKwkJCSAgICAgIDogInIiIChfX3NjbnVtKSk7CQkJCQlcCisJX19zeXNjYWxsX3JldHVybih0eXBlLCBfX3NjMCk7CQkJCQkJXAorfQorCisjdW5kZWYgX3N5c2NhbGwyCisjZGVmaW5lIF9zeXNjYWxsMih0eXBlLG5hbWUsdHlwZTEsYXJnMSx0eXBlMixhcmcyKQkJCQlcCit0eXBlIG5hbWUodHlwZTEgYXJnMSx0eXBlMiBhcmcyKQkJCQkJCVwKK3sJCQkJCQkJCQkJXAorCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19zY251bSBfX2FzbV9fICgiZ3I3IikgPSAoX19OUl8jI25hbWUpOwkJXAorCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19zYzAgX19hc21fXyAoImdyOCIpID0gKHVuc2lnbmVkIGxvbmcpIGFyZzE7CVwKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fc2MxIF9fYXNtX18gKCJncjkiKSA9ICh1bnNpZ25lZCBsb25nKSBhcmcyOwlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJ0aXJhIGdyMCwjMCIJCQkJCVwKKwkJCSAgICAgIDogIityIiAoX19zYzApCQkJCQlcCisJCQkgICAgICA6ICJyIiAoX19zY251bSksICJyIiAoX19zYzEpKTsJCQlcCisJX19zeXNjYWxsX3JldHVybih0eXBlLCBfX3NjMCk7CQkJCQkJXAorfQorCisjdW5kZWYgX3N5c2NhbGwzCisjZGVmaW5lIF9zeXNjYWxsMyh0eXBlLG5hbWUsdHlwZTEsYXJnMSx0eXBlMixhcmcyLHR5cGUzLGFyZzMpCQkJXAordHlwZSBuYW1lKHR5cGUxIGFyZzEsdHlwZTIgYXJnMix0eXBlMyBhcmczKQkJCQkJXAorewkJCQkJCQkJCQlcCisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3NjbnVtIF9fYXNtX18gKCJncjciKSA9IChfX05SXyMjbmFtZSk7CQlcCisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3NjMCBfX2FzbV9fICgiZ3I4IikgPSAodW5zaWduZWQgbG9uZykgYXJnMTsJXAorCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19zYzEgX19hc21fXyAoImdyOSIpID0gKHVuc2lnbmVkIGxvbmcpIGFyZzI7CVwKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fc2MyIF9fYXNtX18gKCJncjEwIikgPSAodW5zaWduZWQgbG9uZykgYXJnMzsJXAorCV9fYXNtX18gX192b2xhdGlsZV9fICgidGlyYSBncjAsIzAiCQkJCQlcCisJCQkgICAgICA6ICIrciIgKF9fc2MwKQkJCQkJXAorCQkJICAgICAgOiAiciIgKF9fc2NudW0pLCAiciIgKF9fc2MxKSwgInIiIChfX3NjMikpOwlcCisJX19zeXNjYWxsX3JldHVybih0eXBlLCBfX3NjMCk7CQkJCQkJXAorfQorCisjdW5kZWYgX3N5c2NhbGw0CisjZGVmaW5lIF9zeXNjYWxsNCh0eXBlLG5hbWUsdHlwZTEsYXJnMSx0eXBlMixhcmcyLHR5cGUzLGFyZzMsdHlwZTQsYXJnNCkJCVwKK3R5cGUgbmFtZSAodHlwZTEgYXJnMSwgdHlwZTIgYXJnMiwgdHlwZTMgYXJnMywgdHlwZTQgYXJnNCkJCQkJXAorewkJCQkJCQkJCQkJXAorCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19zY251bSBfX2FzbV9fICgiZ3I3IikgPSAoX19OUl8jI25hbWUpOwkJCVwKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fc2MwIF9fYXNtX18gKCJncjgiKSA9ICh1bnNpZ25lZCBsb25nKSBhcmcxOwkJXAorCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19zYzEgX19hc21fXyAoImdyOSIpID0gKHVuc2lnbmVkIGxvbmcpIGFyZzI7CQlcCisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3NjMiBfX2FzbV9fICgiZ3IxMCIpID0gKHVuc2lnbmVkIGxvbmcpIGFyZzM7CQlcCisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3NjMyBfX2FzbV9fICgiZ3IxMSIpID0gKHVuc2lnbmVkIGxvbmcpIGFyZzQ7CQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJ0aXJhIGdyMCwjMCIJCQkJCQlcCisJCQkgICAgICA6ICIrciIgKF9fc2MwKQkJCQkJCVwKKwkJCSAgICAgIDogInIiIChfX3NjbnVtKSwgInIiIChfX3NjMSksICJyIiAoX19zYzIpLCAiciIgKF9fc2MzKSk7CVwKKwlfX3N5c2NhbGxfcmV0dXJuKHR5cGUsIF9fc2MwKTsJCQkJCQkJXAorfQorCisjdW5kZWYgX3N5c2NhbGw1CisjZGVmaW5lIF9zeXNjYWxsNSh0eXBlLG5hbWUsdHlwZTEsYXJnMSx0eXBlMixhcmcyLHR5cGUzLGFyZzMsdHlwZTQsYXJnNCx0eXBlNSxhcmc1KQlcCit0eXBlIG5hbWUgKHR5cGUxIGFyZzEsIHR5cGUyIGFyZzIsIHR5cGUzIGFyZzMsIHR5cGU0IGFyZzQsIHR5cGU1IGFyZzUpCQkJXAorewkJCQkJCQkJCQkJXAorCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19zY251bSBfX2FzbV9fICgiZ3I3IikgPSAoX19OUl8jI25hbWUpOwkJCVwKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fc2MwIF9fYXNtX18gKCJncjgiKSA9ICh1bnNpZ25lZCBsb25nKSBhcmcxOwkJXAorCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19zYzEgX19hc21fXyAoImdyOSIpID0gKHVuc2lnbmVkIGxvbmcpIGFyZzI7CQlcCisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3NjMiBfX2FzbV9fICgiZ3IxMCIpID0gKHVuc2lnbmVkIGxvbmcpIGFyZzM7CQlcCisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3NjMyBfX2FzbV9fICgiZ3IxMSIpID0gKHVuc2lnbmVkIGxvbmcpIGFyZzQ7CQlcCisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3NjNCBfX2FzbV9fICgiZ3IxMiIpID0gKHVuc2lnbmVkIGxvbmcpIGFyZzU7CQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJ0aXJhIGdyMCwjMCIJCQkJCQlcCisJCQkgICAgICA6ICIrciIgKF9fc2MwKQkJCQkJCVwKKwkJCSAgICAgIDogInIiIChfX3NjbnVtKSwgInIiIChfX3NjMSksICJyIiAoX19zYzIpLAkJXAorCQkJICAgICAgInIiIChfX3NjMyksICJyIiAoX19zYzQpKTsJCQkJXAorCV9fc3lzY2FsbF9yZXR1cm4odHlwZSwgX19zYzApOwkJCQkJCQlcCit9CisKKyN1bmRlZiBfc3lzY2FsbDYKKyNkZWZpbmUgX3N5c2NhbGw2KHR5cGUsbmFtZSx0eXBlMSxhcmcxLHR5cGUyLGFyZzIsdHlwZTMsYXJnMyx0eXBlNCxhcmc0LHR5cGU1LGFyZzUsIHR5cGU2LCBhcmc2KSBcCit0eXBlIG5hbWUgKHR5cGUxIGFyZzEsIHR5cGUyIGFyZzIsIHR5cGUzIGFyZzMsIHR5cGU0IGFyZzQsIHR5cGU1IGFyZzUsIHR5cGU2IGFyZzYpCQkgXAorewkJCQkJCQkJCQkJCSBcCisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3NjbnVtIF9fYXNtX18gKCJncjciKSA9IChfX05SXyMjbmFtZSk7CQkJCSBcCisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3NjMCBfX2FzbV9fICgiZ3I4IikgPSAodW5zaWduZWQgbG9uZykgYXJnMTsJCQkgXAorCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19zYzEgX19hc21fXyAoImdyOSIpID0gKHVuc2lnbmVkIGxvbmcpIGFyZzI7CQkJIFwKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fc2MyIF9fYXNtX18gKCJncjEwIikgPSAodW5zaWduZWQgbG9uZykgYXJnMzsJCQkgXAorCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19zYzMgX19hc21fXyAoImdyMTEiKSA9ICh1bnNpZ25lZCBsb25nKSBhcmc0OwkJCSBcCisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3NjNCBfX2FzbV9fICgiZ3IxMiIpID0gKHVuc2lnbmVkIGxvbmcpIGFyZzU7CQkJIFwKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fc2M1IF9fYXNtX18gKCJncjEzIikgPSAodW5zaWduZWQgbG9uZykgYXJnNjsJCQkgXAorCV9fYXNtX18gX192b2xhdGlsZV9fICgidGlyYSBncjAsIzAiCQkJCQkJCSBcCisJCQkgICAgICA6ICIrciIgKF9fc2MwKQkJCQkJCQkgXAorCQkJICAgICAgOiAiciIgKF9fc2NudW0pLCAiciIgKF9fc2MxKSwgInIiIChfX3NjMiksCQkJIFwKKwkJCSAgICAgICJyIiAoX19zYzMpLCAiciIgKF9fc2M0KSwgInIiIChfX3NjNSkpOwkJCQkgXAorCV9fc3lzY2FsbF9yZXR1cm4odHlwZSwgX19zYzApOwkJCQkJCQkJIFwKK30KKworCisjaWZkZWYgX19LRVJORUxfU1lTQ0FMTFNfXworCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisKKy8qCisgKiB3ZSBuZWVkIHRoaXMgaW5saW5lIC0gZm9ya2luZyBmcm9tIGtlcm5lbCBzcGFjZSB3aWxsIHJlc3VsdAorICogaW4gTk8gQ09QWSBPTiBXUklURSAoISEhKSwgdW50aWwgYW4gZXhlY3ZlIGlzIGV4ZWN1dGVkLiBUaGlzCisgKiBpcyBubyBwcm9ibGVtLCBidXQgZm9yIHRoZSBzdGFjay4gVGhpcyBpcyBoYW5kbGVkIGJ5IG5vdCBsZXR0aW5nCisgKiBtYWluKCkgdXNlIHRoZSBzdGFjayBhdCBhbGwgYWZ0ZXIgZm9yaygpLiBUaHVzLCBubyBmdW5jdGlvbgorICogY2FsbHMgLSB3aGljaCBtZWFucyBpbmxpbmUgY29kZSBmb3IgZm9yayB0b28sIGFzIG90aGVyd2lzZSB3ZQorICogd291bGQgdXNlIHRoZSBzdGFjayB1cG9uIGV4aXQgZnJvbSAnZm9yaygpJy4KKyAqCisgKiBBY3R1YWxseSBvbmx5IHBhdXNlIGFuZCBmb3JrIGFyZSBuZWVkZWQgaW5saW5lLCBzbyB0aGF0IHRoZXJlCisgKiB3b24ndCBiZSBhbnkgbWVzc2luZyB3aXRoIHRoZSBzdGFjayBmcm9tIG1haW4oKSwgYnV0IHdlIGRlZmluZQorICogc29tZSBvdGhlcnMgdG9vLgorICovCisjZGVmaW5lIF9fTlJfX2V4aXQgX19OUl9leGl0CitzdGF0aWMgaW5saW5lIF9zeXNjYWxsMChpbnQscGF1c2UpCitzdGF0aWMgaW5saW5lIF9zeXNjYWxsMChpbnQsc3luYykKK3N0YXRpYyBpbmxpbmUgX3N5c2NhbGwwKHBpZF90LHNldHNpZCkKK3N0YXRpYyBpbmxpbmUgX3N5c2NhbGwzKGludCx3cml0ZSxpbnQsZmQsY29uc3QgY2hhciAqLGJ1ZixvZmZfdCxjb3VudCkKK3N0YXRpYyBpbmxpbmUgX3N5c2NhbGwzKGludCxyZWFkLGludCxmZCxjaGFyICosYnVmLG9mZl90LGNvdW50KQorc3RhdGljIGlubGluZSBfc3lzY2FsbDMob2ZmX3QsbHNlZWssaW50LGZkLG9mZl90LG9mZnNldCxpbnQsY291bnQpCitzdGF0aWMgaW5saW5lIF9zeXNjYWxsMShpbnQsZHVwLGludCxmZCkKK3N0YXRpYyBpbmxpbmUgX3N5c2NhbGwzKGludCxleGVjdmUsY29uc3QgY2hhciAqLGZpbGUsY2hhciAqKixhcmd2LGNoYXIgKiosZW52cCkKK3N0YXRpYyBpbmxpbmUgX3N5c2NhbGwzKGludCxvcGVuLGNvbnN0IGNoYXIgKixmaWxlLGludCxmbGFnLGludCxtb2RlKQorc3RhdGljIGlubGluZSBfc3lzY2FsbDEoaW50LGNsb3NlLGludCxmZCkKK3N0YXRpYyBpbmxpbmUgX3N5c2NhbGwxKGludCxfZXhpdCxpbnQsZXhpdGNvZGUpCitzdGF0aWMgaW5saW5lIF9zeXNjYWxsMyhwaWRfdCx3YWl0cGlkLHBpZF90LHBpZCxpbnQgKix3YWl0X3N0YXQsaW50LG9wdGlvbnMpCitzdGF0aWMgaW5saW5lIF9zeXNjYWxsMShpbnQsZGVsZXRlX21vZHVsZSxjb25zdCBjaGFyICosbmFtZSkKKworc3RhdGljIGlubGluZSBwaWRfdCB3YWl0KGludCAqIHdhaXRfc3RhdCkKK3sKKwlyZXR1cm4gd2FpdHBpZCgtMSx3YWl0X3N0YXQsMCk7Cit9CisKKyNlbmRpZgorCisjaWZkZWYgX19LRVJORUxfXworI2RlZmluZSBfX0FSQ0hfV0FOVF9JUENfUEFSU0VfVkVSU0lPTgorLyogI2RlZmluZSBfX0FSQ0hfV0FOVF9PTERfUkVBRERJUiAqLworI2RlZmluZSBfX0FSQ0hfV0FOVF9PTERfU1RBVAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TVEFUNjQKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0FMQVJNCisvKiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19HRVRIT1NUTkFNRSAqLworI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfUEFVU0UKKy8qICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NHRVRNQVNLICovCisvKiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdOQUwgKi8KKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1RJTUUKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1VUSU1FCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19XQUlUUElECisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TT0NLRVRDQUxMCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19GQURWSVNFNjQKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0dFVFBHUlAKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0xMU0VFSworI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfTklDRQorLyogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfT0xEX0dFVFJMSU1JVCAqLworI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfT0xEVU1PVU5UCisvKiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdQRU5ESU5HICovCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdQUk9DTUFTSworI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfUlRfU0lHQUNUSU9OCisjZW5kaWYKKworLyoKKyAqICJDb25kaXRpb25hbCIgc3lzY2FsbHMKKyAqCisgKiBXaGF0IHdlIHdhbnQgaXMgX19hdHRyaWJ1dGVfXygod2VhayxhbGlhcygic3lzX25pX3N5c2NhbGwiKSkpLAorICogYnV0IGl0IGRvZXNuJ3Qgd29yayBvbiBhbGwgdG9vbGNoYWlucywgc28gd2UganVzdCBkbyBpdCBieSBoYW5kCisgKi8KKyNpZm5kZWYgY29uZF9zeXNjYWxsCisjZGVmaW5lIGNvbmRfc3lzY2FsbCh4KSBhc20oIi53ZWFrXHQiICN4ICJcblx0LnNldFx0IiAjeCAiLHN5c19uaV9zeXNjYWxsIikKKyNlbmRpZgorCisjZW5kaWYgLyogX0FTTV9VTklTVERfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi91c2VyLmggYi9pbmNsdWRlL2FzbS1mcnYvdXNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyZmE4ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1mcnYvdXNlci5oCkBAIC0wLDAgKzEsODAgQEAKKy8qIHVzZXIuaDogRlItViBjb3JlIGZpbGUgZm9ybWF0IHN0dWZmCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzIFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisjaWZuZGVmIF9BU01fVVNFUl9ICisjZGVmaW5lIF9BU01fVVNFUl9ICisKKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9yZWdpc3RlcnMuaD4KKworLyogQ29yZSBmaWxlIGZvcm1hdDogVGhlIGNvcmUgZmlsZSBpcyB3cml0dGVuIGluIHN1Y2ggYSB3YXkgdGhhdCBnZGIKKyAqIGNhbiB1bmRlcnN0YW5kIGl0IGFuZCBwcm92aWRlIHVzZWZ1bCBpbmZvcm1hdGlvbiB0byB0aGUgdXNlciAodW5kZXIKKyAqIGxpbnV4IHdlIHVzZSB0aGUgJ3RyYWQtY29yZScgYmZkKS4gIFRoZXJlIGFyZSBxdWl0ZSBhIG51bWJlciBvZgorICogb2JzdGFjbGVzIHRvIGJlaW5nIGFibGUgdG8gdmlldyB0aGUgY29udGVudHMgb2YgdGhlIGZsb2F0aW5nIHBvaW50CisgKiByZWdpc3RlcnMsIGFuZCB1bnRpbCB0aGVzZSBhcmUgc29sdmVkIHlvdSB3aWxsIG5vdCBiZSBhYmxlIHRvIHZpZXcKKyAqIHRoZSBjb250ZW50cyBvZiB0aGVtLiAgQWN0dWFsbHksIHlvdSBjYW4gcmVhZCBpbiB0aGUgY29yZSBmaWxlIGFuZAorICogbG9vayBhdCB0aGUgY29udGVudHMgb2YgdGhlIHVzZXIgc3RydWN0IHRvIGZpbmQgb3V0IHdoYXQgdGhlCisgKiBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMgY29udGFpbi4KKyAqCisgKiBUaGUgYWN0dWFsIGZpbGUgY29udGVudHMgYXJlIGFzIGZvbGxvd3M6CisgKiBVUEFHRToKKyAqICAgMSBwYWdlIGNvbnNpc3Rpbmcgb2YgYSB1c2VyIHN0cnVjdCB0aGF0IHRlbGxzIGdkYiB3aGF0IGlzIHByZXNlbnQKKyAqICAgaW4gdGhlIGZpbGUuICBEaXJlY3RseSBhZnRlciB0aGlzIGlzIGEgY29weSBvZiB0aGUgdGFza19zdHJ1Y3QsCisgKiAgIHdoaWNoIGlzIGN1cnJlbnRseSBub3QgdXNlZCBieSBnZGIsIGJ1dCBpdCBtYXkgY29tZSBpbiB1c2VmdWwgYXQKKyAqICAgc29tZSBwb2ludC4gIEFsbCBvZiB0aGUgcmVnaXN0ZXJzIGFyZSBzdG9yZWQgYXMgcGFydCBvZiB0aGUKKyAqICAgdXBhZ2UuICBUaGUgdXBhZ2Ugc2hvdWxkIGFsd2F5cyBiZSBvbmx5IG9uZSBwYWdlLgorICoKKyAqIERBVEE6CisgKiAgIFRoZSBkYXRhIGFyZWEgaXMgc3RvcmVkLiAgV2UgdXNlIGN1cnJlbnQtPmVuZF90ZXh0IHRvCisgKiAgIGN1cnJlbnQtPmJyayB0byBwaWNrIHVwIGFsbCBvZiB0aGUgdXNlciB2YXJpYWJsZXMsIHBsdXMgYW55CisgKiAgIG1lbW9yeSB0aGF0IG1heSBoYXZlIGJlZW4gbWFsbG9jZWQuICBObyBhdHRlbXB0IGlzIG1hZGUgdG8KKyAqICAgZGV0ZXJtaW5lIGlmIGEgcGFnZSBpcyBkZW1hbmQtemVybyBvciBpZiBhIHBhZ2UgaXMgdG90YWxseQorICogICB1bnVzZWQsIHdlIGp1c3QgY292ZXIgdGhlIGVudGlyZSByYW5nZS4gIEFsbCBvZiB0aGUgYWRkcmVzc2VzIGFyZQorICogICByb3VuZGVkIGluIHN1Y2ggYSB3YXkgdGhhdCBhbiBpbnRlZ3JhbCBudW1iZXIgb2YgcGFnZXMgaXMKKyAqICAgd3JpdHRlbi4KKyAqCisgKiBTVEFDSzoKKyAqICAgV2UgbmVlZCB0aGUgc3RhY2sgaW5mb3JtYXRpb24gaW4gb3JkZXIgdG8gZ2V0IGEgbWVhbmluZ2Z1bAorICogICBiYWNrdHJhY2UuICBXZSBuZWVkIHRvIHdyaXRlIHRoZSBkYXRhIGZyb20gKGVzcCkgdG8KKyAqICAgY3VycmVudC0+c3RhcnRfc3RhY2ssIHNvIHdlIHJvdW5kIGVhY2ggb2YgdGhlc2Ugb2ZmIGluIG9yZGVyIHRvCisgKiAgIGJlIGFibGUgdG8gd3JpdGUgYW4gaW50ZWdlciBudW1iZXIgb2YgcGFnZXMuICBUaGUgbWluaW11bSBjb3JlCisgKiAgIGZpbGUgc2l6ZSBpcyAzIHBhZ2VzLCBvciAxMjI4OCBieXRlcy4KKyAqLworCisvKiBXaGVuIHRoZSBrZXJuZWwgZHVtcHMgY29yZSwgaXQgc3RhcnRzIGJ5IGR1bXBpbmcgdGhlIHVzZXIgc3RydWN0IC0KKyAqIHRoaXMgd2lsbCBiZSB1c2VkIGJ5IGdkYiB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBkYXRhIGFuZCBzdGFjayBzZWdtZW50cworICogIGFyZSB3aXRoaW4gdGhlIGZpbGUsIGFuZCB3aGF0IHZpcnR1YWwgYWRkcmVzc2VzIHRvIHVzZS4KKyAqLworc3RydWN0IHVzZXIgeworCS8qIFdlIHN0YXJ0IHdpdGggdGhlIHJlZ2lzdGVycywgdG8gbWltaWMgdGhlIHdheSB0aGF0ICJtZW1vcnkiIGlzIHJldHVybmVkCisJICogZnJvbSB0aGUgcHRyYWNlKDMsLi4uKSBmdW5jdGlvbi4gICovCisJc3RydWN0IHVzZXJfY29udGV4dAlyZWdzOworCisJLyogVGhlIHJlc3Qgb2YgdGhpcyBqdW5rIGlzIHRvIGhlbHAgZ2RiIGZpZ3VyZSBvdXQgd2hhdCBnb2VzIHdoZXJlICovCisJdW5zaWduZWQgbG9uZwkJdV90c2l6ZTsJLyogVGV4dCBzZWdtZW50IHNpemUgKHBhZ2VzKS4gKi8KKwl1bnNpZ25lZCBsb25nCQl1X2RzaXplOwkvKiBEYXRhIHNlZ21lbnQgc2l6ZSAocGFnZXMpLiAqLworCXVuc2lnbmVkIGxvbmcJCXVfc3NpemU7CS8qIFN0YWNrIHNlZ21lbnQgc2l6ZSAocGFnZXMpLiAqLworCXVuc2lnbmVkIGxvbmcJCXN0YXJ0X2NvZGU7ICAgICAvKiBTdGFydGluZyB2aXJ0dWFsIGFkZHJlc3Mgb2YgdGV4dC4gKi8KKwl1bnNpZ25lZCBsb25nCQlzdGFydF9zdGFjazsJLyogU3RhcnRpbmcgdmlydHVhbCBhZGRyZXNzIG9mIHN0YWNrIGFyZWEuCisJCQkJCQkgKiBUaGlzIGlzIGFjdHVhbGx5IHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLAorCQkJCQkJICogdGhlIHRvcCBvZiB0aGUgc3RhY2sgaXMgYWx3YXlzIGZvdW5kIGluIHRoZQorCQkJCQkJICogZXNwIHJlZ2lzdGVyLiAgKi8KKwlsb25nIGludAkJc2lnbmFsOwkJLyogU2lnbmFsIHRoYXQgY2F1c2VkIHRoZSBjb3JlIGR1bXAuICovCisKKwl1bnNpZ25lZCBsb25nCQltYWdpYzsJCS8qIFRvIHVuaXF1ZWx5IGlkZW50aWZ5IGEgY29yZSBmaWxlICovCisJY2hhcgkJCXVfY29tbVszMl07CS8qIFVzZXIgY29tbWFuZCB0aGF0IHdhcyByZXNwb25zaWJsZSAqLworfTsKKworI2RlZmluZSBOQlBHCQkJUEFHRV9TSVpFCisjZGVmaW5lIFVQQUdFUwkJCTEKKyNkZWZpbmUgSE9TVF9URVhUX1NUQVJUX0FERFIJKHUuc3RhcnRfY29kZSkKKyNkZWZpbmUgSE9TVF9TVEFDS19FTkRfQUREUgkodS5zdGFydF9zdGFjayArIHUudV9zc2l6ZSAqIE5CUEcpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L3ZpcnRjb252ZXJ0LmggYi9pbmNsdWRlL2FzbS1mcnYvdmlydGNvbnZlcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjlhMGFlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tZnJ2L3ZpcnRjb252ZXJ0LmgKQEAgLTAsMCArMSw0MiBAQAorLyogdmlydGNvbnZlcnQuaDogdmlydHVhbC9waHlzaWNhbC9wYWdlIGFkZHJlc3MgY29udmVydGlvbgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2lmbmRlZiBfQVNNX1ZJUlRDT05WRVJUX0gKKyNkZWZpbmUgX0FTTV9WSVJUQ09OVkVSVF9ICisKKy8qCisgKiBNYWNyb3MgdXNlZCBmb3IgY29udmVydGluZyBiZXR3ZWVuIHZpcnR1YWwgYW5kIHBoeXNpY2FsIG1hcHBpbmdzLgorICovCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKworI2lmZGVmIENPTkZJR19NTVUKKworI2RlZmluZSBwaHlzX3RvX3ZpcnQodmFkZHIpCSgodm9pZCAqKSAoKHVuc2lnbmVkIGxvbmcpKHZhZGRyKSArIFBBR0VfT0ZGU0VUKSkKKyNkZWZpbmUgdmlydF90b19waHlzKHZhZGRyKQkoKHVuc2lnbmVkIGxvbmcpICh2YWRkcikgLSBQQUdFX09GRlNFVCkKKworI2Vsc2UKKworI2RlZmluZSBwaHlzX3RvX3ZpcnQodmFkZHIpCSgodm9pZCAqKSAodmFkZHIpKQorI2RlZmluZSB2aXJ0X3RvX3BoeXModmFkZHIpCSgodW5zaWduZWQgbG9uZykgKHZhZGRyKSkKKworI2VuZGlmCisKKyNkZWZpbmUgdmlydF90b19idXMgdmlydF90b19waHlzCisjZGVmaW5lIGJ1c190b192aXJ0IHBoeXNfdG9fdmlydAorCisjZGVmaW5lIF9fcGFnZV9hZGRyZXNzKHBhZ2UpCShQQUdFX09GRlNFVCArICgoKHBhZ2UpIC0gbWVtX21hcCkgPDwgUEFHRV9TSElGVCkpCisjZGVmaW5lIHBhZ2VfdG9fcGh5cyhwYWdlKQl2aXJ0X3RvX3BoeXMoKHZvaWQgKilfX3BhZ2VfYWRkcmVzcyhwYWdlKSkKKworI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvNGxldmVsLWZpeHVwLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljLzRsZXZlbC1maXh1cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyMGVjMjUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljLzRsZXZlbC1maXh1cC5oCkBAIC0wLDAgKzEsMzggQEAKKyNpZm5kZWYgXzRMRVZFTF9GSVhVUF9ICisjZGVmaW5lIF80TEVWRUxfRklYVVBfSAorCisjZGVmaW5lIF9fQVJDSF9IQVNfNExFVkVMX0hBQ0sKKyNkZWZpbmUgX19QQUdFVEFCTEVfUFVEX0ZPTERFRAorCisjZGVmaW5lIFBVRF9TSVpFCQkJUEdESVJfU0laRQorI2RlZmluZSBQVURfTUFTSwkJCVBHRElSX01BU0sKKyNkZWZpbmUgUFRSU19QRVJfUFVECQkJMQorCisjZGVmaW5lIHB1ZF90CQkJCXBnZF90CisKKyNkZWZpbmUgcG1kX2FsbG9jKG1tLCBwdWQsIGFkZHJlc3MpCQkJXAorKHsJcG1kX3QgKnJldDsJCQkJCVwKKwlpZiAocGdkX25vbmUoKnB1ZCkpCQkJCVwKKyAJCXJldCA9IF9fcG1kX2FsbG9jKG1tLCBwdWQsIGFkZHJlc3MpOwlcCisgCWVsc2UJCQkJCQlcCisJCXJldCA9IHBtZF9vZmZzZXQocHVkLCBhZGRyZXNzKTsJCVwKKyAJcmV0OwkJCQkJCVwKK30pCisKKyNkZWZpbmUgcHVkX2FsbG9jKG1tLCBwZ2QsIGFkZHJlc3MpCShwZ2QpCisjZGVmaW5lIHB1ZF9vZmZzZXQocGdkLCBzdGFydCkJCShwZ2QpCisjZGVmaW5lIHB1ZF9ub25lKHB1ZCkJCQkwCisjZGVmaW5lIHB1ZF9iYWQocHVkKQkJCTAKKyNkZWZpbmUgcHVkX3ByZXNlbnQocHVkKQkJMQorI2RlZmluZSBwdWRfRVJST1IocHVkKQkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgcHVkX2NsZWFyKHB1ZCkJCQlwZ2RfY2xlYXIocHVkKQorCisjdW5kZWYgcHVkX2ZyZWVfdGxiCisjZGVmaW5lIHB1ZF9mcmVlX3RsYih0bGIsIHgpICAgICAgICAgICAgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBwdWRfZnJlZSh4KQkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgX19wdWRfZnJlZV90bGIodGxiLCB4KQkJZG8geyB9IHdoaWxlICgwKQorCisjdW5kZWYgIHB1ZF9hZGRyX2VuZAorI2RlZmluZSBwdWRfYWRkcl9lbmQoYWRkciwgZW5kKQkJKGVuZCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL2JpdG9wcy5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9iaXRvcHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTMxYjczCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9iaXRvcHMuaApAQCAtMCwwICsxLDgxIEBACisjaWZuZGVmIF9BU01fR0VORVJJQ19CSVRPUFNfSF8KKyNkZWZpbmUgX0FTTV9HRU5FUklDX0JJVE9QU19IXworCisvKgorICogRm9yIHRoZSBiZW5lZml0IG9mIHRob3NlIHdobyBhcmUgdHJ5aW5nIHRvIHBvcnQgTGludXggdG8gYW5vdGhlcgorICogYXJjaGl0ZWN0dXJlLCBoZXJlIGFyZSBzb21lIEMtbGFuZ3VhZ2UgZXF1aXZhbGVudHMuICBZb3Ugc2hvdWxkCisgKiByZWNvZGUgdGhlc2UgaW4gdGhlIG5hdGl2ZSBhc3NlbWJseSBsYW5ndWFnZSwgaWYgYXQgYWxsIHBvc3NpYmxlLgorICogVG8gZ3VhcmFudGVlIGF0b21pY2l0eSwgdGhlc2Ugcm91dGluZXMgY2FsbCBjbGkoKSBhbmQgc3RpKCkgdG8KKyAqIGRpc2FibGUgaW50ZXJydXB0cyB3aGlsZSB0aGV5IG9wZXJhdGUuICAoWW91IGhhdmUgdG8gcHJvdmlkZSBpbmxpbmUKKyAqIHJvdXRpbmVzIHRvIGNsaSgpIGFuZCBzdGkoKS4pCisgKgorICogQWxzbyBub3RlLCB0aGVzZSByb3V0aW5lcyBhc3N1bWUgdGhhdCB5b3UgaGF2ZSAzMiBiaXQgbG9uZ3MuCisgKiBZb3Ugd2lsbCBoYXZlIHRvIGNoYW5nZSB0aGlzIGlmIHlvdSBhcmUgdHJ5aW5nIHRvIHBvcnQgTGludXggdG8gdGhlCisgKiBBbHBoYSBhcmNoaXRlY3R1cmUgb3IgdG8gYSBDcmF5LiAgOi0pCisgKiAKKyAqIEMgbGFuZ3VhZ2UgZXF1aXZhbGVudHMgd3JpdHRlbiBieSBUaGVvZG9yZSBUcydvLCA5LzI2LzkyCisgKi8KKworZXh0ZXJuIF9faW5saW5lX18gaW50IHNldF9iaXQoaW50IG5yLGxvbmcgKiBhZGRyKQoreworCWludAltYXNrLCByZXR2YWw7CisKKwlhZGRyICs9IG5yID4+IDU7CisJbWFzayA9IDEgPDwgKG5yICYgMHgxZik7CisJY2xpKCk7CisJcmV0dmFsID0gKG1hc2sgJiAqYWRkcikgIT0gMDsKKwkqYWRkciB8PSBtYXNrOworCXN0aSgpOworCXJldHVybiByZXR2YWw7Cit9CisKK2V4dGVybiBfX2lubGluZV9fIGludCBjbGVhcl9iaXQoaW50IG5yLCBsb25nICogYWRkcikKK3sKKwlpbnQJbWFzaywgcmV0dmFsOworCisJYWRkciArPSBuciA+PiA1OworCW1hc2sgPSAxIDw8IChuciAmIDB4MWYpOworCWNsaSgpOworCXJldHZhbCA9IChtYXNrICYgKmFkZHIpICE9IDA7CisJKmFkZHIgJj0gfm1hc2s7CisJc3RpKCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworZXh0ZXJuIF9faW5saW5lX18gaW50IHRlc3RfYml0KGludCBuciwgY29uc3QgdW5zaWduZWQgbG9uZyAqIGFkZHIpCit7CisJaW50CW1hc2s7CisKKwlhZGRyICs9IG5yID4+IDU7CisJbWFzayA9IDEgPDwgKG5yICYgMHgxZik7CisJcmV0dXJuICgobWFzayAmICphZGRyKSAhPSAwKTsKK30KKworLyoKKyAqIGZsczogZmluZCBsYXN0IGJpdCBzZXQuCisgKi8KKworI2RlZmluZSBmbHMoeCkgZ2VuZXJpY19mbHMoeCkKKworI2lmZGVmIF9fS0VSTkVMX18KKworLyoKKyAqIGZmczogZmluZCBmaXJzdCBiaXQgc2V0LiBUaGlzIGlzIGRlZmluZWQgdGhlIHNhbWUgd2F5IGFzCisgKiB0aGUgbGliYyBhbmQgY29tcGlsZXIgYnVpbHRpbiBmZnMgcm91dGluZXMsIHRoZXJlZm9yZQorICogZGlmZmVycyBpbiBzcGlyaXQgZnJvbSB0aGUgYWJvdmUgZmZ6IChtYW4gZmZzKS4KKyAqLworCisjZGVmaW5lIGZmcyh4KSBnZW5lcmljX2Zmcyh4KQorCisvKgorICogaHdlaWdodE46IHJldHVybnMgdGhlIGhhbW1pbmcgd2VpZ2h0IChpLmUuIHRoZSBudW1iZXIKKyAqIG9mIGJpdHMgc2V0KSBvZiBhIE4tYml0IHdvcmQKKyAqLworCisjZGVmaW5lIGh3ZWlnaHQzMih4KSBnZW5lcmljX2h3ZWlnaHQzMih4KQorI2RlZmluZSBod2VpZ2h0MTYoeCkgZ2VuZXJpY19od2VpZ2h0MTYoeCkKKyNkZWZpbmUgaHdlaWdodDgoeCkgZ2VuZXJpY19od2VpZ2h0OCh4KQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX0FTTV9HRU5FUklDX0JJVE9QU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTkxM2MzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaApAQCAtMCwwICsxLDM0IEBACisjaWZuZGVmIF9BU01fR0VORVJJQ19CVUdfSAorI2RlZmluZSBfQVNNX0dFTkVSSUNfQlVHX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpZm5kZWYgSEFWRV9BUkNIX0JVRworI2RlZmluZSBCVUcoKSBkbyB7IFwKKwlwcmludGsoImtlcm5lbCBCVUcgYXQgJXM6JWQhXG4iLCBfX0ZJTEVfXywgX19MSU5FX18pOyBcCisJcGFuaWMoIkJVRyEiKTsgXAorfSB3aGlsZSAoMCkKKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfQVJDSF9QQUdFX0JVRworI2RlZmluZSBQQUdFX0JVRyhwYWdlKSBkbyB7IFwKKwlwcmludGsoInBhZ2UgQlVHIGZvciBwYWdlIGF0ICVwXG4iLCBwYWdlKTsgXAorCUJVRygpOyBcCit9IHdoaWxlICgwKQorI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9BUkNIX0JVR19PTgorI2RlZmluZSBCVUdfT04oY29uZGl0aW9uKSBkbyB7IGlmICh1bmxpa2VseSgoY29uZGl0aW9uKSE9MCkpIEJVRygpOyB9IHdoaWxlKDApCisjZW5kaWYKKworI2lmbmRlZiBIQVZFX0FSQ0hfV0FSTl9PTgorI2RlZmluZSBXQVJOX09OKGNvbmRpdGlvbikgZG8geyBcCisJaWYgKHVubGlrZWx5KChjb25kaXRpb24pIT0wKSkgeyBcCisJCXByaW50aygiQmFkbmVzcyBpbiAlcyBhdCAlczolZFxuIiwgX19GVU5DVElPTl9fLCBfX0ZJTEVfXywgX19MSU5FX18pOyBcCisJCWR1bXBfc3RhY2soKTsgXAorCX0gXAorfSB3aGlsZSAoMCkKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvY3B1dGltZS5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9jcHV0aW1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmYxNzg1NgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvY3B1dGltZS5oCkBAIC0wLDAgKzEsNjYgQEAKKyNpZm5kZWYgX0FTTV9HRU5FUklDX0NQVVRJTUVfSAorI2RlZmluZSBfQVNNX0dFTkVSSUNfQ1BVVElNRV9ICisKKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgorCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgY3B1dGltZV90OworCisjZGVmaW5lIGNwdXRpbWVfemVybwkJCSgwVUwpCisjZGVmaW5lIGNwdXRpbWVfbWF4CQkJKCh+MFVMID4+IDEpIC0gMSkKKyNkZWZpbmUgY3B1dGltZV9hZGQoX19hLCBfX2IpCQkoKF9fYSkgKyAgKF9fYikpCisjZGVmaW5lIGNwdXRpbWVfc3ViKF9fYSwgX19iKQkJKChfX2EpIC0gIChfX2IpKQorI2RlZmluZSBjcHV0aW1lX2RpdihfX2EsIF9fbikJCSgoX19hKSAvICAoX19uKSkKKyNkZWZpbmUgY3B1dGltZV9oYWx2ZShfX2EpCQkoKF9fYSkgPj4gMSkKKyNkZWZpbmUgY3B1dGltZV9lcShfX2EsIF9fYikJCSgoX19hKSA9PSAoX19iKSkKKyNkZWZpbmUgY3B1dGltZV9ndChfX2EsIF9fYikJCSgoX19hKSA+ICAoX19iKSkKKyNkZWZpbmUgY3B1dGltZV9nZShfX2EsIF9fYikJCSgoX19hKSA+PSAoX19iKSkKKyNkZWZpbmUgY3B1dGltZV9sdChfX2EsIF9fYikJCSgoX19hKSA8ICAoX19iKSkKKyNkZWZpbmUgY3B1dGltZV9sZShfX2EsIF9fYikJCSgoX19hKSA8PSAoX19iKSkKKyNkZWZpbmUgY3B1dGltZV90b19qaWZmaWVzKF9fY3QpCShfX2N0KQorI2RlZmluZSBqaWZmaWVzX3RvX2NwdXRpbWUoX19oeikJKF9faHopCisKK3R5cGVkZWYgdTY0IGNwdXRpbWU2NF90OworCisjZGVmaW5lIGNwdXRpbWU2NF96ZXJvICgwVUxMKQorI2RlZmluZSBjcHV0aW1lNjRfYWRkKF9fYSwgX19iKQkJKChfX2EpICsgKF9fYikpCisjZGVmaW5lIGNwdXRpbWU2NF90b19qaWZmaWVzNjQoX19jdCkJKF9fY3QpCisjZGVmaW5lIGNwdXRpbWVfdG9fY3B1dGltZTY0KF9fY3QpCSgodTY0KSBfX2N0KQorCisKKy8qCisgKiBDb252ZXJ0IGNwdXRpbWUgdG8gbWlsbGlzZWNvbmRzIGFuZCBiYWNrLgorICovCisjZGVmaW5lIGNwdXRpbWVfdG9fbXNlY3MoX19jdCkJCWppZmZpZXNfdG9fbXNlY3MoX19jdCkKKyNkZWZpbmUgbXNlY3NfdG9fY3B1dGltZShfX21zZWNzKQltc2Vjc190b19qaWZmaWVzKF9fbXNlY3MpCisKKy8qCisgKiBDb252ZXJ0IGNwdXRpbWUgdG8gc2Vjb25kcyBhbmQgYmFjay4KKyAqLworI2RlZmluZSBjcHV0aW1lX3RvX3NlY3MoamlmKQkJKChqaWYpIC8gSFopCisjZGVmaW5lIHNlY3NfdG9fY3B1dGltZShzZWMpCQkoKHNlYykgKiBIWikKKworLyoKKyAqIENvbnZlcnQgY3B1dGltZSB0byB0aW1lc3BlYyBhbmQgYmFjay4KKyAqLworI2RlZmluZSB0aW1lc3BlY190b19jcHV0aW1lKF9fdmFsKQl0aW1lc3BlY190b19qaWZmaWVzKF9fdmFsKQorI2RlZmluZSBjcHV0aW1lX3RvX3RpbWVzcGVjKF9fY3QsX192YWwpCWppZmZpZXNfdG9fdGltZXNwZWMoX19jdCxfX3ZhbCkKKworLyoKKyAqIENvbnZlcnQgY3B1dGltZSB0byB0aW1ldmFsIGFuZCBiYWNrLgorICovCisjZGVmaW5lIHRpbWV2YWxfdG9fY3B1dGltZShfX3ZhbCkJdGltZXZhbF90b19qaWZmaWVzKF9fdmFsKQorI2RlZmluZSBjcHV0aW1lX3RvX3RpbWV2YWwoX19jdCxfX3ZhbCkJamlmZmllc190b190aW1ldmFsKF9fY3QsX192YWwpCisKKy8qCisgKiBDb252ZXJ0IGNwdXRpbWUgdG8gY2xvY2sgYW5kIGJhY2suCisgKi8KKyNkZWZpbmUgY3B1dGltZV90b19jbG9ja190KF9fY3QpCWppZmZpZXNfdG9fY2xvY2tfdChfX2N0KQorI2RlZmluZSBjbG9ja190X3RvX2NwdXRpbWUoX194KQkJY2xvY2tfdF90b19qaWZmaWVzKF9feCkKKworLyoKKyAqIENvbnZlcnQgY3B1dGltZTY0IHRvIGNsb2NrLgorICovCisjZGVmaW5lIGNwdXRpbWU2NF90b19jbG9ja190KF9fY3QpCWppZmZpZXNfNjRfdG9fY2xvY2tfdChfX2N0KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvZGl2NjQuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvZGl2NjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjRlMzE5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9kaXY2NC5oCkBAIC0wLDAgKzEsNTggQEAKKyNpZm5kZWYgX0FTTV9HRU5FUklDX0RJVjY0X0gKKyNkZWZpbmUgX0FTTV9HRU5FUklDX0RJVjY0X0gKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgQmVybmFyZG8gSW5ub2NlbnRpIDxiZXJuaWVAZGV2ZWxlci5jb20+CisgKiBCYXNlZCBvbiBmb3JtZXIgYXNtLXBwYy9kaXY2NC5oIGFuZCBhc20tbTY4a25vbW11L2RpdjY0LmgKKyAqCisgKiBUaGUgc2VtYW50aWNzIG9mIGRvX2RpdigpIGFyZToKKyAqCisgKiB1aW50MzJfdCBkb19kaXYodWludDY0X3QgKm4sIHVpbnQzMl90IGJhc2UpCisgKiB7CisgKiAJdWludDMyX3QgcmVtYWluZGVyID0gKm4gJSBiYXNlOworICogCSpuID0gKm4gLyBiYXNlOworICogCXJldHVybiByZW1haW5kZXI7CisgKiB9CisgKgorICogTk9URTogbWFjcm8gcGFyYW1ldGVyIG4gaXMgZXZhbHVhdGVkIG11bHRpcGxlIHRpbWVzLAorICogICAgICAgYmV3YXJlIG9mIHNpZGUgZWZmZWN0cyEKKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorCisjaWYgQklUU19QRVJfTE9ORyA9PSA2NAorCisjIGRlZmluZSBkb19kaXYobixiYXNlKSAoewkJCQkJXAorCXVpbnQzMl90IF9fYmFzZSA9IChiYXNlKTsJCQkJXAorCXVpbnQzMl90IF9fcmVtOwkJCQkJCVwKKwlfX3JlbSA9ICgodWludDY0X3QpKG4pKSAlIF9fYmFzZTsJCQlcCisJKG4pID0gKCh1aW50NjRfdCkobikpIC8gX19iYXNlOwkJCQlcCisJX19yZW07CQkJCQkJCVwKKyB9KQorCisjZWxpZiBCSVRTX1BFUl9MT05HID09IDMyCisKK2V4dGVybiB1aW50MzJfdCBfX2RpdjY0XzMyKHVpbnQ2NF90ICpkaXZpZGVuZCwgdWludDMyX3QgZGl2aXNvcik7CisKKy8qIFRoZSB1bm5lY2Vzc2FyeSBwb2ludGVyIGNvbXBhcmUgaXMgdGhlcmUKKyAqIHRvIGNoZWNrIGZvciB0eXBlIHNhZmV0eSAobiBtdXN0IGJlIDY0Yml0KQorICovCisjIGRlZmluZSBkb19kaXYobixiYXNlKSAoewkJCQlcCisJdWludDMyX3QgX19iYXNlID0gKGJhc2UpOwkJCVwKKwl1aW50MzJfdCBfX3JlbTsJCQkJCVwKKwkodm9pZCkoKCh0eXBlb2YoKG4pKSAqKTApID09ICgodWludDY0X3QgKikwKSk7CVwKKwlpZiAobGlrZWx5KCgobikgPj4gMzIpID09IDApKSB7CQkJXAorCQlfX3JlbSA9ICh1aW50MzJfdCkobikgJSBfX2Jhc2U7CQlcCisJCShuKSA9ICh1aW50MzJfdCkobikgLyBfX2Jhc2U7CQlcCisJfSBlbHNlIAkJCQkJCVwKKwkJX19yZW0gPSBfX2RpdjY0XzMyKCYobiksIF9fYmFzZSk7CVwKKwlfX3JlbTsJCQkJCQlcCisgfSkKKworI2Vsc2UgLyogQklUU19QRVJfTE9ORyA9PSA/PyAqLworCisjIGVycm9yIGRvX2RpdigpIGRvZXMgbm90IHlldCBzdXBwb3J0IHRoZSBDNjQKKworI2VuZGlmIC8qIEJJVFNfUEVSX0xPTkcgKi8KKworI2VuZGlmIC8qIF9BU01fR0VORVJJQ19ESVY2NF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL2RtYS1tYXBwaW5nLWJyb2tlbi5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9kbWEtbWFwcGluZy1icm9rZW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDlkZTk1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9kbWEtbWFwcGluZy1icm9rZW4uaApAQCAtMCwwICsxLDIyIEBACisjaWZuZGVmIF9BU01fR0VORVJJQ19ETUFfTUFQUElOR19ICisjZGVmaW5lIF9BU01fR0VORVJJQ19ETUFfTUFQUElOR19ICisKKy8qIFRoaXMgaXMgdXNlZCBmb3IgYXJjaHMgdGhhdCBkbyBub3Qgc3VwcG9ydCBETUEgKi8KKworCitzdGF0aWMgaW5saW5lIHZvaWQgKgorZG1hX2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsCisJCSAgIGludCBmbGFnKQoreworCUJVRygpOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2RtYV9mcmVlX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIHZvaWQgKmNwdV9hZGRyLAorCQkgICAgZG1hX2FkZHJfdCBkbWFfaGFuZGxlKQoreworCUJVRygpOworfQorCisjZW5kaWYgLyogX0FTTV9HRU5FUklDX0RNQV9NQVBQSU5HX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvZG1hLW1hcHBpbmcuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvZG1hLW1hcHBpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2VmNjYzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9kbWEtbWFwcGluZy5oCkBAIC0wLDAgKzEsMzA5IEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDIgYnkgSmFtZXMuQm90dG9tbGV5QEhhbnNlblBhcnRuZXJzaGlwLmNvbSAKKyAqCisgKiBJbXBsZW1lbnRzIHRoZSBnZW5lcmljIGRldmljZSBkbWEgQVBJIHZpYSB0aGUgZXhpc3RpbmcgcGNpXyBvbmUKKyAqIGZvciB1bmNvbnZlcnRlZCBhcmNoaXRlY3R1cmVzCisgKi8KKworI2lmbmRlZiBfQVNNX0dFTkVSSUNfRE1BX01BUFBJTkdfSAorI2RlZmluZSBfQVNNX0dFTkVSSUNfRE1BX01BUFBJTkdfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpZmRlZiBDT05GSUdfUENJCisKKy8qIHdlIGltcGxlbWVudCB0aGUgQVBJIGJlbG93IGluIHRlcm1zIG9mIHRoZSBleGlzdGluZyBQQ0kgb25lLAorICogc28gaW5jbHVkZSBpdCAqLworI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorLyogbmVlZCBzdHJ1Y3QgcGFnZSBkZWZpbml0aW9ucyAqLworI2luY2x1ZGUgPGxpbnV4L21tLmg+CisKK3N0YXRpYyBpbmxpbmUgaW50CitkbWFfc3VwcG9ydGVkKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IG1hc2spCit7CisJQlVHX09OKGRldi0+YnVzICE9ICZwY2lfYnVzX3R5cGUpOworCisJcmV0dXJuIHBjaV9kbWFfc3VwcG9ydGVkKHRvX3BjaV9kZXYoZGV2KSwgbWFzayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitkbWFfc2V0X21hc2soc3RydWN0IGRldmljZSAqZGV2LCB1NjQgZG1hX21hc2spCit7CisJQlVHX09OKGRldi0+YnVzICE9ICZwY2lfYnVzX3R5cGUpOworCisJcmV0dXJuIHBjaV9zZXRfZG1hX21hc2sodG9fcGNpX2RldihkZXYpLCBkbWFfbWFzayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqCitkbWFfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwKKwkJICAgdW5zaWduZWQgaW50IF9fbm9jYXN0IGZsYWcpCit7CisJQlVHX09OKGRldi0+YnVzICE9ICZwY2lfYnVzX3R5cGUpOworCisJcmV0dXJuIHBjaV9hbGxvY19jb25zaXN0ZW50KHRvX3BjaV9kZXYoZGV2KSwgc2l6ZSwgZG1hX2hhbmRsZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZG1hX2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgdm9pZCAqY3B1X2FkZHIsCisJCSAgICBkbWFfYWRkcl90IGRtYV9oYW5kbGUpCit7CisJQlVHX09OKGRldi0+YnVzICE9ICZwY2lfYnVzX3R5cGUpOworCisJcGNpX2ZyZWVfY29uc2lzdGVudCh0b19wY2lfZGV2KGRldiksIHNpemUsIGNwdV9hZGRyLCBkbWFfaGFuZGxlKTsKK30KKworc3RhdGljIGlubGluZSBkbWFfYWRkcl90CitkbWFfbWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLCBzaXplX3Qgc2l6ZSwKKwkgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCUJVR19PTihkZXYtPmJ1cyAhPSAmcGNpX2J1c190eXBlKTsKKworCXJldHVybiBwY2lfbWFwX3NpbmdsZSh0b19wY2lfZGV2KGRldiksIGNwdV9hZGRyLCBzaXplLCAoaW50KWRpcmVjdGlvbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZG1hX3VubWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIsIHNpemVfdCBzaXplLAorCQkgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCUJVR19PTihkZXYtPmJ1cyAhPSAmcGNpX2J1c190eXBlKTsKKworCXBjaV91bm1hcF9zaW5nbGUodG9fcGNpX2RldihkZXYpLCBkbWFfYWRkciwgc2l6ZSwgKGludClkaXJlY3Rpb24pOworfQorCitzdGF0aWMgaW5saW5lIGRtYV9hZGRyX3QKK2RtYV9tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwYWdlICpwYWdlLAorCSAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLAorCSAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCUJVR19PTihkZXYtPmJ1cyAhPSAmcGNpX2J1c190eXBlKTsKKworCXJldHVybiBwY2lfbWFwX3BhZ2UodG9fcGNpX2RldihkZXYpLCBwYWdlLCBvZmZzZXQsIHNpemUsIChpbnQpZGlyZWN0aW9uKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitkbWFfdW5tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHJlc3MsIHNpemVfdCBzaXplLAorCSAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJQlVHX09OKGRldi0+YnVzICE9ICZwY2lfYnVzX3R5cGUpOworCisJcGNpX3VubWFwX3BhZ2UodG9fcGNpX2RldihkZXYpLCBkbWFfYWRkcmVzcywgc2l6ZSwgKGludClkaXJlY3Rpb24pOworfQorCitzdGF0aWMgaW5saW5lIGludAorZG1hX21hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZW50cywKKwkgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJQlVHX09OKGRldi0+YnVzICE9ICZwY2lfYnVzX3R5cGUpOworCisJcmV0dXJuIHBjaV9tYXBfc2codG9fcGNpX2RldihkZXYpLCBzZywgbmVudHMsIChpbnQpZGlyZWN0aW9uKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitkbWFfdW5tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmh3ZW50cmllcywKKwkgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlCVUdfT04oZGV2LT5idXMgIT0gJnBjaV9idXNfdHlwZSk7CisKKwlwY2lfdW5tYXBfc2codG9fcGNpX2RldihkZXYpLCBzZywgbmh3ZW50cmllcywgKGludClkaXJlY3Rpb24pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCBzaXplX3Qgc2l6ZSwKKwkJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlCVUdfT04oZGV2LT5idXMgIT0gJnBjaV9idXNfdHlwZSk7CisKKwlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUodG9fcGNpX2RldihkZXYpLCBkbWFfaGFuZGxlLAorCQkJCSAgICBzaXplLCAoaW50KWRpcmVjdGlvbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHNpemVfdCBzaXplLAorCQkJICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCUJVR19PTihkZXYtPmJ1cyAhPSAmcGNpX2J1c190eXBlKTsKKworCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZSh0b19wY2lfZGV2KGRldiksIGRtYV9oYW5kbGUsCisJCQkJICAgICAgIHNpemUsIChpbnQpZGlyZWN0aW9uKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitkbWFfc3luY19zZ19mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbGVtcywKKwkJICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlCVUdfT04oZGV2LT5idXMgIT0gJnBjaV9idXNfdHlwZSk7CisKKwlwY2lfZG1hX3N5bmNfc2dfZm9yX2NwdSh0b19wY2lfZGV2KGRldiksIHNnLCBuZWxlbXMsIChpbnQpZGlyZWN0aW9uKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitkbWFfc3luY19zZ19mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbGVtcywKKwkJICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlCVUdfT04oZGV2LT5idXMgIT0gJnBjaV9idXNfdHlwZSk7CisKKwlwY2lfZG1hX3N5bmNfc2dfZm9yX2RldmljZSh0b19wY2lfZGV2KGRldiksIHNnLCBuZWxlbXMsIChpbnQpZGlyZWN0aW9uKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2RtYV9tYXBwaW5nX2Vycm9yKGRtYV9hZGRyX3QgZG1hX2FkZHIpCit7CisJcmV0dXJuIHBjaV9kbWFfbWFwcGluZ19lcnJvcihkbWFfYWRkcik7Cit9CisKKworI2Vsc2UKKworc3RhdGljIGlubGluZSBpbnQKK2RtYV9zdXBwb3J0ZWQoc3RydWN0IGRldmljZSAqZGV2LCB1NjQgbWFzaykKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2RtYV9zZXRfbWFzayhzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBkbWFfbWFzaykKK3sKKwlCVUcoKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkICoKK2RtYV9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLAorCQkgICB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZmxhZykKK3sKKwlCVUcoKTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitkbWFfZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCB2b2lkICpjcHVfYWRkciwKKwkJICAgIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSkKK3sKKwlCVUcoKTsKK30KKworc3RhdGljIGlubGluZSBkbWFfYWRkcl90CitkbWFfbWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLCBzaXplX3Qgc2l6ZSwKKwkgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCUJVRygpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2RtYV91bm1hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyLCBzaXplX3Qgc2l6ZSwKKwkJIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlCVUcoKTsKK30KKworc3RhdGljIGlubGluZSBkbWFfYWRkcl90CitkbWFfbWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkgICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwKKwkgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlCVUcoKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitkbWFfdW5tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHJlc3MsIHNpemVfdCBzaXplLAorCSAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJQlVHKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitkbWFfbWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbnRzLAorCSAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlCVUcoKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitkbWFfdW5tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmh3ZW50cmllcywKKwkgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlCVUcoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitkbWFfc3luY19zaW5nbGVfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgc2l6ZV90IHNpemUsCisJCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJQlVHKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHNpemVfdCBzaXplLAorCQkJICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCUJVRygpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2RtYV9zeW5jX3NnX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVsZW1zLAorCQkgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCUJVRygpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2RtYV9zeW5jX3NnX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVsZW1zLAorCQkgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCUJVRygpOworfQorCitzdGF0aWMgaW5saW5lIGludAorZG1hX2Vycm9yKGRtYV9hZGRyX3QgZG1hX2FkZHIpCit7CisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZgorCisvKiBOb3cgZm9yIHRoZSBBUEkgZXh0ZW5zaW9ucyBvdmVyIHRoZSBwY2lfIG9uZSAqLworCisjZGVmaW5lIGRtYV9hbGxvY19ub25jb2hlcmVudChkLCBzLCBoLCBmKSBkbWFfYWxsb2NfY29oZXJlbnQoZCwgcywgaCwgZikKKyNkZWZpbmUgZG1hX2ZyZWVfbm9uY29oZXJlbnQoZCwgcywgdiwgaCkgZG1hX2ZyZWVfY29oZXJlbnQoZCwgcywgdiwgaCkKKyNkZWZpbmUgZG1hX2lzX2NvbnNpc3RlbnQoZCkJKDEpCisKK3N0YXRpYyBpbmxpbmUgaW50CitkbWFfZ2V0X2NhY2hlX2FsaWdubWVudCh2b2lkKQoreworCS8qIG5vIGVhc3kgd2F5IHRvIGdldCBjYWNoZSBzaXplIG9uIGFsbCBwcm9jZXNzb3JzLCBzbyByZXR1cm4KKwkgKiB0aGUgbWF4aW11bSBwb3NzaWJsZSwgdG8gYmUgc2FmZSAqLworCXJldHVybiAoMSA8PCBMMV9DQUNIRV9TSElGVF9NQVgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2RtYV9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLAorCQkJICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCS8qIGp1c3Qgc3luYyBldmVyeXRoaW5nLCB0aGF0J3MgYWxsIHRoZSBwY2kgQVBJIGNhbiBkbyAqLworCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGRldiwgZG1hX2hhbmRsZSwgb2Zmc2V0K3NpemUsIGRpcmVjdGlvbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZG1hX3N5bmNfc2luZ2xlX3JhbmdlX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCisJCQkJIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwKKwkJCQkgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCS8qIGp1c3Qgc3luYyBldmVyeXRoaW5nLCB0aGF0J3MgYWxsIHRoZSBwY2kgQVBJIGNhbiBkbyAqLworCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGRldiwgZG1hX2hhbmRsZSwgb2Zmc2V0K3NpemUsIGRpcmVjdGlvbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZG1hX2NhY2hlX3N5bmModm9pZCAqdmFkZHIsIHNpemVfdCBzaXplLAorCSAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJLyogY291bGQgZGVmaW5lIHRoaXMgaW4gdGVybXMgb2YgdGhlIGRtYV9jYWNoZSAuLi4gb3BlcmF0aW9ucywKKwkgKiBidXQgaWYgeW91IGdldCB0aGlzIG9uIGEgcGxhdGZvcm0sIHlvdSBzaG91bGQgY29udmVydCB0aGUgcGxhdGZvcm0KKwkgKiB0byB1c2luZyB0aGUgZ2VuZXJpYyBkZXZpY2UgRE1BIEFQSSAqLworCUJVRygpOworfQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9lcnJuby1iYXNlLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL2Vycm5vLWJhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTExNTk3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9lcnJuby1iYXNlLmgKQEAgLTAsMCArMSwzOSBAQAorI2lmbmRlZiBfQVNNX0dFTkVSSUNfRVJSTk9fQkFTRV9ICisjZGVmaW5lIF9BU01fR0VORVJJQ19FUlJOT19CQVNFX0gKKworI2RlZmluZQlFUEVSTQkJIDEJLyogT3BlcmF0aW9uIG5vdCBwZXJtaXR0ZWQgKi8KKyNkZWZpbmUJRU5PRU5UCQkgMgkvKiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5ICovCisjZGVmaW5lCUVTUkNICQkgMwkvKiBObyBzdWNoIHByb2Nlc3MgKi8KKyNkZWZpbmUJRUlOVFIJCSA0CS8qIEludGVycnVwdGVkIHN5c3RlbSBjYWxsICovCisjZGVmaW5lCUVJTwkJIDUJLyogSS9PIGVycm9yICovCisjZGVmaW5lCUVOWElPCQkgNgkvKiBObyBzdWNoIGRldmljZSBvciBhZGRyZXNzICovCisjZGVmaW5lCUUyQklHCQkgNwkvKiBBcmd1bWVudCBsaXN0IHRvbyBsb25nICovCisjZGVmaW5lCUVOT0VYRUMJCSA4CS8qIEV4ZWMgZm9ybWF0IGVycm9yICovCisjZGVmaW5lCUVCQURGCQkgOQkvKiBCYWQgZmlsZSBudW1iZXIgKi8KKyNkZWZpbmUJRUNISUxECQkxMAkvKiBObyBjaGlsZCBwcm9jZXNzZXMgKi8KKyNkZWZpbmUJRUFHQUlOCQkxMQkvKiBUcnkgYWdhaW4gKi8KKyNkZWZpbmUJRU5PTUVNCQkxMgkvKiBPdXQgb2YgbWVtb3J5ICovCisjZGVmaW5lCUVBQ0NFUwkJMTMJLyogUGVybWlzc2lvbiBkZW5pZWQgKi8KKyNkZWZpbmUJRUZBVUxUCQkxNAkvKiBCYWQgYWRkcmVzcyAqLworI2RlZmluZQlFTk9UQkxLCQkxNQkvKiBCbG9jayBkZXZpY2UgcmVxdWlyZWQgKi8KKyNkZWZpbmUJRUJVU1kJCTE2CS8qIERldmljZSBvciByZXNvdXJjZSBidXN5ICovCisjZGVmaW5lCUVFWElTVAkJMTcJLyogRmlsZSBleGlzdHMgKi8KKyNkZWZpbmUJRVhERVYJCTE4CS8qIENyb3NzLWRldmljZSBsaW5rICovCisjZGVmaW5lCUVOT0RFVgkJMTkJLyogTm8gc3VjaCBkZXZpY2UgKi8KKyNkZWZpbmUJRU5PVERJUgkJMjAJLyogTm90IGEgZGlyZWN0b3J5ICovCisjZGVmaW5lCUVJU0RJUgkJMjEJLyogSXMgYSBkaXJlY3RvcnkgKi8KKyNkZWZpbmUJRUlOVkFMCQkyMgkvKiBJbnZhbGlkIGFyZ3VtZW50ICovCisjZGVmaW5lCUVORklMRQkJMjMJLyogRmlsZSB0YWJsZSBvdmVyZmxvdyAqLworI2RlZmluZQlFTUZJTEUJCTI0CS8qIFRvbyBtYW55IG9wZW4gZmlsZXMgKi8KKyNkZWZpbmUJRU5PVFRZCQkyNQkvKiBOb3QgYSB0eXBld3JpdGVyICovCisjZGVmaW5lCUVUWFRCU1kJCTI2CS8qIFRleHQgZmlsZSBidXN5ICovCisjZGVmaW5lCUVGQklHCQkyNwkvKiBGaWxlIHRvbyBsYXJnZSAqLworI2RlZmluZQlFTk9TUEMJCTI4CS8qIE5vIHNwYWNlIGxlZnQgb24gZGV2aWNlICovCisjZGVmaW5lCUVTUElQRQkJMjkJLyogSWxsZWdhbCBzZWVrICovCisjZGVmaW5lCUVST0ZTCQkzMAkvKiBSZWFkLW9ubHkgZmlsZSBzeXN0ZW0gKi8KKyNkZWZpbmUJRU1MSU5LCQkzMQkvKiBUb28gbWFueSBsaW5rcyAqLworI2RlZmluZQlFUElQRQkJMzIJLyogQnJva2VuIHBpcGUgKi8KKyNkZWZpbmUJRURPTQkJMzMJLyogTWF0aCBhcmd1bWVudCBvdXQgb2YgZG9tYWluIG9mIGZ1bmMgKi8KKyNkZWZpbmUJRVJBTkdFCQkzNAkvKiBNYXRoIHJlc3VsdCBub3QgcmVwcmVzZW50YWJsZSAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvZXJybm8uaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvZXJybm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGQyMzg0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9lcnJuby5oCkBAIC0wLDAgKzEsMTA1IEBACisjaWZuZGVmIF9BU01fR0VORVJJQ19FUlJOT19ICisjZGVmaW5lIF9BU01fR0VORVJJQ19FUlJOT19ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9lcnJuby1iYXNlLmg+CisKKyNkZWZpbmUJRURFQURMSwkJMzUJLyogUmVzb3VyY2UgZGVhZGxvY2sgd291bGQgb2NjdXIgKi8KKyNkZWZpbmUJRU5BTUVUT09MT05HCTM2CS8qIEZpbGUgbmFtZSB0b28gbG9uZyAqLworI2RlZmluZQlFTk9MQ0sJCTM3CS8qIE5vIHJlY29yZCBsb2NrcyBhdmFpbGFibGUgKi8KKyNkZWZpbmUJRU5PU1lTCQkzOAkvKiBGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQgKi8KKyNkZWZpbmUJRU5PVEVNUFRZCTM5CS8qIERpcmVjdG9yeSBub3QgZW1wdHkgKi8KKyNkZWZpbmUJRUxPT1AJCTQwCS8qIFRvbyBtYW55IHN5bWJvbGljIGxpbmtzIGVuY291bnRlcmVkICovCisjZGVmaW5lCUVXT1VMREJMT0NLCUVBR0FJTgkvKiBPcGVyYXRpb24gd291bGQgYmxvY2sgKi8KKyNkZWZpbmUJRU5PTVNHCQk0MgkvKiBObyBtZXNzYWdlIG9mIGRlc2lyZWQgdHlwZSAqLworI2RlZmluZQlFSURSTQkJNDMJLyogSWRlbnRpZmllciByZW1vdmVkICovCisjZGVmaW5lCUVDSFJORwkJNDQJLyogQ2hhbm5lbCBudW1iZXIgb3V0IG9mIHJhbmdlICovCisjZGVmaW5lCUVMMk5TWU5DCTQ1CS8qIExldmVsIDIgbm90IHN5bmNocm9uaXplZCAqLworI2RlZmluZQlFTDNITFQJCTQ2CS8qIExldmVsIDMgaGFsdGVkICovCisjZGVmaW5lCUVMM1JTVAkJNDcJLyogTGV2ZWwgMyByZXNldCAqLworI2RlZmluZQlFTE5STkcJCTQ4CS8qIExpbmsgbnVtYmVyIG91dCBvZiByYW5nZSAqLworI2RlZmluZQlFVU5BVENICQk0OQkvKiBQcm90b2NvbCBkcml2ZXIgbm90IGF0dGFjaGVkICovCisjZGVmaW5lCUVOT0NTSQkJNTAJLyogTm8gQ1NJIHN0cnVjdHVyZSBhdmFpbGFibGUgKi8KKyNkZWZpbmUJRUwySExUCQk1MQkvKiBMZXZlbCAyIGhhbHRlZCAqLworI2RlZmluZQlFQkFERQkJNTIJLyogSW52YWxpZCBleGNoYW5nZSAqLworI2RlZmluZQlFQkFEUgkJNTMJLyogSW52YWxpZCByZXF1ZXN0IGRlc2NyaXB0b3IgKi8KKyNkZWZpbmUJRVhGVUxMCQk1NAkvKiBFeGNoYW5nZSBmdWxsICovCisjZGVmaW5lCUVOT0FOTwkJNTUJLyogTm8gYW5vZGUgKi8KKyNkZWZpbmUJRUJBRFJRQwkJNTYJLyogSW52YWxpZCByZXF1ZXN0IGNvZGUgKi8KKyNkZWZpbmUJRUJBRFNMVAkJNTcJLyogSW52YWxpZCBzbG90ICovCisKKyNkZWZpbmUJRURFQURMT0NLCUVERUFETEsKKworI2RlZmluZQlFQkZPTlQJCTU5CS8qIEJhZCBmb250IGZpbGUgZm9ybWF0ICovCisjZGVmaW5lCUVOT1NUUgkJNjAJLyogRGV2aWNlIG5vdCBhIHN0cmVhbSAqLworI2RlZmluZQlFTk9EQVRBCQk2MQkvKiBObyBkYXRhIGF2YWlsYWJsZSAqLworI2RlZmluZQlFVElNRQkJNjIJLyogVGltZXIgZXhwaXJlZCAqLworI2RlZmluZQlFTk9TUgkJNjMJLyogT3V0IG9mIHN0cmVhbXMgcmVzb3VyY2VzICovCisjZGVmaW5lCUVOT05FVAkJNjQJLyogTWFjaGluZSBpcyBub3Qgb24gdGhlIG5ldHdvcmsgKi8KKyNkZWZpbmUJRU5PUEtHCQk2NQkvKiBQYWNrYWdlIG5vdCBpbnN0YWxsZWQgKi8KKyNkZWZpbmUJRVJFTU9URQkJNjYJLyogT2JqZWN0IGlzIHJlbW90ZSAqLworI2RlZmluZQlFTk9MSU5LCQk2NwkvKiBMaW5rIGhhcyBiZWVuIHNldmVyZWQgKi8KKyNkZWZpbmUJRUFEVgkJNjgJLyogQWR2ZXJ0aXNlIGVycm9yICovCisjZGVmaW5lCUVTUk1OVAkJNjkJLyogU3Jtb3VudCBlcnJvciAqLworI2RlZmluZQlFQ09NTQkJNzAJLyogQ29tbXVuaWNhdGlvbiBlcnJvciBvbiBzZW5kICovCisjZGVmaW5lCUVQUk9UTwkJNzEJLyogUHJvdG9jb2wgZXJyb3IgKi8KKyNkZWZpbmUJRU1VTFRJSE9QCTcyCS8qIE11bHRpaG9wIGF0dGVtcHRlZCAqLworI2RlZmluZQlFRE9URE9UCQk3MwkvKiBSRlMgc3BlY2lmaWMgZXJyb3IgKi8KKyNkZWZpbmUJRUJBRE1TRwkJNzQJLyogTm90IGEgZGF0YSBtZXNzYWdlICovCisjZGVmaW5lCUVPVkVSRkxPVwk3NQkvKiBWYWx1ZSB0b28gbGFyZ2UgZm9yIGRlZmluZWQgZGF0YSB0eXBlICovCisjZGVmaW5lCUVOT1RVTklRCTc2CS8qIE5hbWUgbm90IHVuaXF1ZSBvbiBuZXR3b3JrICovCisjZGVmaW5lCUVCQURGRAkJNzcJLyogRmlsZSBkZXNjcmlwdG9yIGluIGJhZCBzdGF0ZSAqLworI2RlZmluZQlFUkVNQ0hHCQk3OAkvKiBSZW1vdGUgYWRkcmVzcyBjaGFuZ2VkICovCisjZGVmaW5lCUVMSUJBQ0MJCTc5CS8qIENhbiBub3QgYWNjZXNzIGEgbmVlZGVkIHNoYXJlZCBsaWJyYXJ5ICovCisjZGVmaW5lCUVMSUJCQUQJCTgwCS8qIEFjY2Vzc2luZyBhIGNvcnJ1cHRlZCBzaGFyZWQgbGlicmFyeSAqLworI2RlZmluZQlFTElCU0NOCQk4MQkvKiAubGliIHNlY3Rpb24gaW4gYS5vdXQgY29ycnVwdGVkICovCisjZGVmaW5lCUVMSUJNQVgJCTgyCS8qIEF0dGVtcHRpbmcgdG8gbGluayBpbiB0b28gbWFueSBzaGFyZWQgbGlicmFyaWVzICovCisjZGVmaW5lCUVMSUJFWEVDCTgzCS8qIENhbm5vdCBleGVjIGEgc2hhcmVkIGxpYnJhcnkgZGlyZWN0bHkgKi8KKyNkZWZpbmUJRUlMU0VRCQk4NAkvKiBJbGxlZ2FsIGJ5dGUgc2VxdWVuY2UgKi8KKyNkZWZpbmUJRVJFU1RBUlQJODUJLyogSW50ZXJydXB0ZWQgc3lzdGVtIGNhbGwgc2hvdWxkIGJlIHJlc3RhcnRlZCAqLworI2RlZmluZQlFU1RSUElQRQk4NgkvKiBTdHJlYW1zIHBpcGUgZXJyb3IgKi8KKyNkZWZpbmUJRVVTRVJTCQk4NwkvKiBUb28gbWFueSB1c2VycyAqLworI2RlZmluZQlFTk9UU09DSwk4OAkvKiBTb2NrZXQgb3BlcmF0aW9uIG9uIG5vbi1zb2NrZXQgKi8KKyNkZWZpbmUJRURFU1RBRERSUkVRCTg5CS8qIERlc3RpbmF0aW9uIGFkZHJlc3MgcmVxdWlyZWQgKi8KKyNkZWZpbmUJRU1TR1NJWkUJOTAJLyogTWVzc2FnZSB0b28gbG9uZyAqLworI2RlZmluZQlFUFJPVE9UWVBFCTkxCS8qIFByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldCAqLworI2RlZmluZQlFTk9QUk9UT09QVAk5MgkvKiBQcm90b2NvbCBub3QgYXZhaWxhYmxlICovCisjZGVmaW5lCUVQUk9UT05PU1VQUE9SVAk5MwkvKiBQcm90b2NvbCBub3Qgc3VwcG9ydGVkICovCisjZGVmaW5lCUVTT0NLVE5PU1VQUE9SVAk5NAkvKiBTb2NrZXQgdHlwZSBub3Qgc3VwcG9ydGVkICovCisjZGVmaW5lCUVPUE5PVFNVUFAJOTUJLyogT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQgb24gdHJhbnNwb3J0IGVuZHBvaW50ICovCisjZGVmaW5lCUVQRk5PU1VQUE9SVAk5NgkvKiBQcm90b2NvbCBmYW1pbHkgbm90IHN1cHBvcnRlZCAqLworI2RlZmluZQlFQUZOT1NVUFBPUlQJOTcJLyogQWRkcmVzcyBmYW1pbHkgbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbCAqLworI2RlZmluZQlFQUREUklOVVNFCTk4CS8qIEFkZHJlc3MgYWxyZWFkeSBpbiB1c2UgKi8KKyNkZWZpbmUJRUFERFJOT1RBVkFJTAk5OQkvKiBDYW5ub3QgYXNzaWduIHJlcXVlc3RlZCBhZGRyZXNzICovCisjZGVmaW5lCUVORVRET1dOCTEwMAkvKiBOZXR3b3JrIGlzIGRvd24gKi8KKyNkZWZpbmUJRU5FVFVOUkVBQ0gJMTAxCS8qIE5ldHdvcmsgaXMgdW5yZWFjaGFibGUgKi8KKyNkZWZpbmUJRU5FVFJFU0VUCTEwMgkvKiBOZXR3b3JrIGRyb3BwZWQgY29ubmVjdGlvbiBiZWNhdXNlIG9mIHJlc2V0ICovCisjZGVmaW5lCUVDT05OQUJPUlRFRAkxMDMJLyogU29mdHdhcmUgY2F1c2VkIGNvbm5lY3Rpb24gYWJvcnQgKi8KKyNkZWZpbmUJRUNPTk5SRVNFVAkxMDQJLyogQ29ubmVjdGlvbiByZXNldCBieSBwZWVyICovCisjZGVmaW5lCUVOT0JVRlMJCTEwNQkvKiBObyBidWZmZXIgc3BhY2UgYXZhaWxhYmxlICovCisjZGVmaW5lCUVJU0NPTk4JCTEwNgkvKiBUcmFuc3BvcnQgZW5kcG9pbnQgaXMgYWxyZWFkeSBjb25uZWN0ZWQgKi8KKyNkZWZpbmUJRU5PVENPTk4JMTA3CS8qIFRyYW5zcG9ydCBlbmRwb2ludCBpcyBub3QgY29ubmVjdGVkICovCisjZGVmaW5lCUVTSFVURE9XTgkxMDgJLyogQ2Fubm90IHNlbmQgYWZ0ZXIgdHJhbnNwb3J0IGVuZHBvaW50IHNodXRkb3duICovCisjZGVmaW5lCUVUT09NQU5ZUkVGUwkxMDkJLyogVG9vIG1hbnkgcmVmZXJlbmNlczogY2Fubm90IHNwbGljZSAqLworI2RlZmluZQlFVElNRURPVVQJMTEwCS8qIENvbm5lY3Rpb24gdGltZWQgb3V0ICovCisjZGVmaW5lCUVDT05OUkVGVVNFRAkxMTEJLyogQ29ubmVjdGlvbiByZWZ1c2VkICovCisjZGVmaW5lCUVIT1NURE9XTgkxMTIJLyogSG9zdCBpcyBkb3duICovCisjZGVmaW5lCUVIT1NUVU5SRUFDSAkxMTMJLyogTm8gcm91dGUgdG8gaG9zdCAqLworI2RlZmluZQlFQUxSRUFEWQkxMTQJLyogT3BlcmF0aW9uIGFscmVhZHkgaW4gcHJvZ3Jlc3MgKi8KKyNkZWZpbmUJRUlOUFJPR1JFU1MJMTE1CS8qIE9wZXJhdGlvbiBub3cgaW4gcHJvZ3Jlc3MgKi8KKyNkZWZpbmUJRVNUQUxFCQkxMTYJLyogU3RhbGUgTkZTIGZpbGUgaGFuZGxlICovCisjZGVmaW5lCUVVQ0xFQU4JCTExNwkvKiBTdHJ1Y3R1cmUgbmVlZHMgY2xlYW5pbmcgKi8KKyNkZWZpbmUJRU5PVE5BTQkJMTE4CS8qIE5vdCBhIFhFTklYIG5hbWVkIHR5cGUgZmlsZSAqLworI2RlZmluZQlFTkFWQUlMCQkxMTkJLyogTm8gWEVOSVggc2VtYXBob3JlcyBhdmFpbGFibGUgKi8KKyNkZWZpbmUJRUlTTkFNCQkxMjAJLyogSXMgYSBuYW1lZCB0eXBlIGZpbGUgKi8KKyNkZWZpbmUJRVJFTU9URUlPCTEyMQkvKiBSZW1vdGUgSS9PIGVycm9yICovCisjZGVmaW5lCUVEUVVPVAkJMTIyCS8qIFF1b3RhIGV4Y2VlZGVkICovCisKKyNkZWZpbmUJRU5PTUVESVVNCTEyMwkvKiBObyBtZWRpdW0gZm91bmQgKi8KKyNkZWZpbmUJRU1FRElVTVRZUEUJMTI0CS8qIFdyb25nIG1lZGl1bSB0eXBlICovCisjZGVmaW5lCUVDQU5DRUxFRAkxMjUJLyogT3BlcmF0aW9uIENhbmNlbGVkICovCisjZGVmaW5lCUVOT0tFWQkJMTI2CS8qIFJlcXVpcmVkIGtleSBub3QgYXZhaWxhYmxlICovCisjZGVmaW5lCUVLRVlFWFBJUkVECTEyNwkvKiBLZXkgaGFzIGV4cGlyZWQgKi8KKyNkZWZpbmUJRUtFWVJFVk9LRUQJMTI4CS8qIEtleSBoYXMgYmVlbiByZXZva2VkICovCisjZGVmaW5lCUVLRVlSRUpFQ1RFRAkxMjkJLyogS2V5IHdhcyByZWplY3RlZCBieSBzZXJ2aWNlICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9oZHJlZy5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9oZHJlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwNTFmYmEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL2hkcmVnLmgKQEAgLTAsMCArMSw4IEBACisjd2FybmluZyA8YXNtL2hkcmVnLmg+IGlzIG9ic29sZXRlLCBwbGVhc2UgZG8gbm90IHVzZSBpdAorCisjaWZuZGVmIF9fQVNNX0dFTkVSSUNfSERSRUdfSAorI2RlZmluZSBfX0FTTV9HRU5FUklDX0hEUkVHX0gKKwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGlkZV9pb3JlZ190OworCisjZW5kaWYgLyogX19BU01fR0VORVJJQ19IRFJFR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL2lkZV9pb3BzLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL2lkZV9pb3BzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI5MWQwNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvaWRlX2lvcHMuaApAQCAtMCwwICsxLDM4IEBACisvKiBHZW5lcmljIEkvTyBhbmQgTUVNSU8gc3RyaW5nIG9wZXJhdGlvbnMuICAqLworCisjZGVmaW5lIF9faWRlX2luc3cJaW5zdworI2RlZmluZSBfX2lkZV9pbnNsCWluc2wKKyNkZWZpbmUgX19pZGVfb3V0c3cJb3V0c3cKKyNkZWZpbmUgX19pZGVfb3V0c2wJb3V0c2wKKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX2lkZV9tbV9pbnN3KHZvaWQgX19pb21lbSAqcG9ydCwgdm9pZCAqYWRkciwgdTMyIGNvdW50KQoreworCXdoaWxlIChjb3VudC0tKSB7CisJCSoodTE2ICopYWRkciA9IHJlYWR3KHBvcnQpOworCQlhZGRyICs9IDI7CisJfQorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9faWRlX21tX2luc2wodm9pZCBfX2lvbWVtICpwb3J0LCB2b2lkICphZGRyLCB1MzIgY291bnQpCit7CisJd2hpbGUgKGNvdW50LS0pIHsKKwkJKih1MzIgKilhZGRyID0gcmVhZGwocG9ydCk7CisJCWFkZHIgKz0gNDsKKwl9Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19pZGVfbW1fb3V0c3codm9pZCBfX2lvbWVtICpwb3J0LCB2b2lkICphZGRyLCB1MzIgY291bnQpCit7CisJd2hpbGUgKGNvdW50LS0pIHsKKwkJd3JpdGV3KCoodTE2ICopYWRkciwgcG9ydCk7CisJCWFkZHIgKz0gMjsKKwl9Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19pZGVfbW1fb3V0c2wodm9pZCBfX2lvbWVtICogcG9ydCwgdm9pZCAqYWRkciwgdTMyIGNvdW50KQoreworCXdoaWxlIChjb3VudC0tKSB7CisJCXdyaXRlbCgqKHUzMiAqKWFkZHIsIHBvcnQpOworCQlhZGRyICs9IDQ7CisJfQorfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9pb21hcC5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9pb21hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5OTE1NDMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL2lvbWFwLmgKQEAgLTAsMCArMSw2MyBAQAorI2lmbmRlZiBfX0dFTkVSSUNfSU9fSAorI2RlZmluZSBfX0dFTkVSSUNfSU9fSAorCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorCisvKgorICogVGhlc2UgYXJlIHRoZSAiZ2VuZXJpYyIgaW50ZXJmYWNlcyBmb3IgZG9pbmcgbmV3LXN0eWxlCisgKiBtZW1vcnktbWFwcGVkIG9yIFBJTyBhY2Nlc3Nlcy4gQXJjaGl0ZWN0dXJlcyBtYXkgZG8KKyAqIHRoZWlyIG93biBhcmNoLW9wdGltaXplZCB2ZXJzaW9ucywgdGhlc2UganVzdCBhY3QgYXMKKyAqIHdyYXBwZXJzIGFyb3VuZCB0aGUgb2xkLXN0eWxlIElPIHJlZ2lzdGVyIGFjY2VzcyBmdW5jdGlvbnM6CisgKiByZWFkW2J3bF0vd3JpdGVbYndsXS9pbltid2xdL291dFtid2xdCisgKgorICogRG9uJ3QgaW5jbHVkZSB0aGlzIGRpcmVjdGx5LCBpbmNsdWRlIGl0IGZyb20gPGFzbS9pby5oPi4KKyAqLworCisvKgorICogUmVhZC93cml0ZSBmcm9tL3RvIGFuIChvZmZzZXR0YWJsZSkgaW9tZW0gY29va2llLiBJdCBtaWdodCBiZSBhIFBJTworICogYWNjZXNzIG9yIGEgTU1JTyBhY2Nlc3MsIHRoZXNlIGZ1bmN0aW9ucyBkb24ndCBjYXJlLiBUaGUgaW5mbyBpcworICogZW5jb2RlZCBpbiB0aGUgaGFyZHdhcmUgbWFwcGluZyBzZXQgdXAgYnkgdGhlIG1hcHBpbmcgZnVuY3Rpb25zCisgKiAob3IgdGhlIGNvb2tpZSBpdHNlbGYsIGRlcGVuZGluZyBvbiBpbXBsZW1lbnRhdGlvbiBhbmQgaHcpLgorICoKKyAqIFRoZSBnZW5lcmljIHJvdXRpbmVzIGp1c3QgZW5jb2RlIHRoZSBQSU8vTU1JTyBhcyBwYXJ0IG9mIHRoZQorICogY29va2llLCBhbmQgY29sZGx5IGFzc3VtZSB0aGF0IHRoZSBNTUlPIElPIG1hcHBpbmdzIGFyZSBub3QKKyAqIGluIHRoZSBsb3cgYWRkcmVzcyByYW5nZS4gQXJjaGl0ZWN0dXJlcyBmb3Igd2hpY2ggdGhpcyBpcyBub3QKKyAqIHRydWUgY2FuJ3QgdXNlIHRoaXMgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbi4KKyAqLworZXh0ZXJuIHVuc2lnbmVkIGludCBmYXN0Y2FsbCBpb3JlYWQ4KHZvaWQgX19pb21lbSAqKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgZmFzdGNhbGwgaW9yZWFkMTYodm9pZCBfX2lvbWVtICopOworZXh0ZXJuIHVuc2lnbmVkIGludCBmYXN0Y2FsbCBpb3JlYWQzMih2b2lkIF9faW9tZW0gKik7CisKK2V4dGVybiB2b2lkIGZhc3RjYWxsIGlvd3JpdGU4KHU4LCB2b2lkIF9faW9tZW0gKik7CitleHRlcm4gdm9pZCBmYXN0Y2FsbCBpb3dyaXRlMTYodTE2LCB2b2lkIF9faW9tZW0gKik7CitleHRlcm4gdm9pZCBmYXN0Y2FsbCBpb3dyaXRlMzIodTMyLCB2b2lkIF9faW9tZW0gKik7CisKKy8qCisgKiAic3RyaW5nIiB2ZXJzaW9ucyBvZiB0aGUgYWJvdmUuIE5vdGUgdGhhdCB0aGV5CisgKiB1c2UgbmF0aXZlIGJ5dGUgb3JkZXJpbmcgZm9yIHRoZSBhY2Nlc3NlcyAob24KKyAqIHRoZSBhc3N1bXB0aW9uIHRoYXQgSU8gYW5kIG1lbW9yeSBhZ3JlZSBvbiBhCisgKiBieXRlIG9yZGVyLCBhbmQgQ1BVIGJ5dGVvcmRlciBpcyBpcnJlbGV2YW50KS4KKyAqCisgKiBUaGV5IGRvIF9ub3RfIHVwZGF0ZSB0aGUgcG9ydCBhZGRyZXNzLiBJZiB5b3UKKyAqIHdhbnQgTU1JTyB0aGF0IGNvcGllcyBzdHVmZiBsYWlkIG91dCBpbiBNTUlPCisgKiBtZW1vcnkgYWNyb3NzIG11bHRpcGxlIHBvcnRzLCB1c2UgIm1lbWNweV90b2lvKCkiCisgKiBhbmQgZnJpZW5kcy4KKyAqLworZXh0ZXJuIHZvaWQgZmFzdGNhbGwgaW9yZWFkOF9yZXAodm9pZCBfX2lvbWVtICpwb3J0LCB2b2lkICpidWYsIHVuc2lnbmVkIGxvbmcgY291bnQpOworZXh0ZXJuIHZvaWQgZmFzdGNhbGwgaW9yZWFkMTZfcmVwKHZvaWQgX19pb21lbSAqcG9ydCwgdm9pZCAqYnVmLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKK2V4dGVybiB2b2lkIGZhc3RjYWxsIGlvcmVhZDMyX3JlcCh2b2lkIF9faW9tZW0gKnBvcnQsIHZvaWQgKmJ1ZiwgdW5zaWduZWQgbG9uZyBjb3VudCk7CisKK2V4dGVybiB2b2lkIGZhc3RjYWxsIGlvd3JpdGU4X3JlcCh2b2lkIF9faW9tZW0gKnBvcnQsIGNvbnN0IHZvaWQgKmJ1ZiwgdW5zaWduZWQgbG9uZyBjb3VudCk7CitleHRlcm4gdm9pZCBmYXN0Y2FsbCBpb3dyaXRlMTZfcmVwKHZvaWQgX19pb21lbSAqcG9ydCwgY29uc3Qgdm9pZCAqYnVmLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKK2V4dGVybiB2b2lkIGZhc3RjYWxsIGlvd3JpdGUzMl9yZXAodm9pZCBfX2lvbWVtICpwb3J0LCBjb25zdCB2b2lkICpidWYsIHVuc2lnbmVkIGxvbmcgY291bnQpOworCisvKiBDcmVhdGUgYSB2aXJ0dWFsIG1hcHBpbmcgY29va2llIGZvciBhbiBJTyBwb3J0IHJhbmdlICovCitleHRlcm4gdm9pZCBfX2lvbWVtICppb3BvcnRfbWFwKHVuc2lnbmVkIGxvbmcgcG9ydCwgdW5zaWduZWQgaW50IG5yKTsKK2V4dGVybiB2b2lkIGlvcG9ydF91bm1hcCh2b2lkIF9faW9tZW0gKik7CisKKy8qIENyZWF0ZSBhIHZpcnR1YWwgbWFwcGluZyBjb29raWUgZm9yIGEgUENJIEJBUiAobWVtb3J5IG9yIElPKSAqLworc3RydWN0IHBjaV9kZXY7CitleHRlcm4gdm9pZCBfX2lvbWVtICpwY2lfaW9tYXAoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGJhciwgdW5zaWduZWQgbG9uZyBtYXgpOworZXh0ZXJuIHZvaWQgcGNpX2lvdW5tYXAoc3RydWN0IHBjaV9kZXYgKmRldiwgdm9pZCBfX2lvbWVtICopOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvaXBjLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL2lwYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0MDQwN2EKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL2lwYy5oCkBAIC0wLDAgKzEsMzEgQEAKKyNpZm5kZWYgX0FTTV9HRU5FUklDX0lQQ19ICisjZGVmaW5lIF9BU01fR0VORVJJQ19JUENfSAorLyoKKyAqIFRoZXNlIGFyZSB1c2VkIHRvIHdyYXAgc3lzdGVtIGNhbGxzLgorICoKKyAqIFNlZSBhcmNoaXRlY3R1cmUgY29kZSBmb3IgdWdseSBkZXRhaWxzLi4KKyAqLworc3RydWN0IGlwY19rbHVkZ2UgeworCXN0cnVjdCBtc2didWYgX191c2VyICptc2dwOworCWxvbmcgbXNndHlwOworfTsKKworI2RlZmluZSBTRU1PUAkJIDEKKyNkZWZpbmUgU0VNR0VUCQkgMgorI2RlZmluZSBTRU1DVEwJCSAzCisjZGVmaW5lIFNFTVRJTUVET1AJIDQKKyNkZWZpbmUgTVNHU05ECQkxMQorI2RlZmluZSBNU0dSQ1YJCTEyCisjZGVmaW5lIE1TR0dFVAkJMTMKKyNkZWZpbmUgTVNHQ1RMCQkxNAorI2RlZmluZSBTSE1BVAkJMjEKKyNkZWZpbmUgU0hNRFQJCTIyCisjZGVmaW5lIFNITUdFVAkJMjMKKyNkZWZpbmUgU0hNQ1RMCQkyNAorCisvKiBVc2VkIGJ5IHRoZSBESVBDIHBhY2thZ2UsIHRyeSBhbmQgYXZvaWQgcmV1c2luZyBpdCAqLworI2RlZmluZSBESVBDICAgICAgICAgICAgMjUKKworI2RlZmluZSBJUENDQUxMKHZlcnNpb24sb3ApCSgodmVyc2lvbik8PDE2IHwgKG9wKSkKKworI2VuZGlmCS8qIF9BU01fR0VORVJJQ19JUENfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9sb2NhbC5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9sb2NhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2ZmMwMDMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL2xvY2FsLmgKQEAgLTAsMCArMSwxMTggQEAKKyNpZm5kZWYgX0FTTV9HRU5FUklDX0xPQ0FMX0gKKyNkZWZpbmUgX0FTTV9HRU5FUklDX0xPQ0FMX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKworLyogQW4gdW5zaWduZWQgbG9uZyB0eXBlIGZvciBvcGVyYXRpb25zIHdoaWNoIGFyZSBhdG9taWMgZm9yIGEgc2luZ2xlCisgKiBDUFUuICBVc3VhbGx5IHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCBwZXItY3B1IHZhcmlhYmxlcy4gKi8KKworI2lmIEJJVFNfUEVSX0xPTkcgPT0gMzIKKy8qIEltcGxlbWVudCBpbiB0ZXJtcyBvZiBhdG9taWNzLiAqLworCisvKiBEb24ndCB1c2UgdHlwZWRlZjogZG9uJ3Qgd2FudCB0aGVtIHRvIGJlIG1peGVkIHdpdGggYXRvbWljX3Qncy4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJYXRvbWljX3QgYTsKK30gbG9jYWxfdDsKKworI2RlZmluZSBMT0NBTF9JTklUKGkpCXsgQVRPTUlDX0lOSVQoaSkgfQorCisjZGVmaW5lIGxvY2FsX3JlYWQobCkJKCh1bnNpZ25lZCBsb25nKWF0b21pY19yZWFkKCYobCktPmEpKQorI2RlZmluZSBsb2NhbF9zZXQobCxpKQlhdG9taWNfc2V0KCgmKGwpLT5hKSwoaSkpCisjZGVmaW5lIGxvY2FsX2luYyhsKQlhdG9taWNfaW5jKCYobCktPmEpCisjZGVmaW5lIGxvY2FsX2RlYyhsKQlhdG9taWNfZGVjKCYobCktPmEpCisjZGVmaW5lIGxvY2FsX2FkZChpLGwpCWF0b21pY19hZGQoKGkpLCgmKGwpLT5hKSkKKyNkZWZpbmUgbG9jYWxfc3ViKGksbCkJYXRvbWljX3N1YigoaSksKCYobCktPmEpKQorCisvKiBOb24tYXRvbWljIHZhcmlhbnRzLCBpZS4gcHJlZW1wdGlvbiBkaXNhYmxlZCBhbmQgd29uJ3QgYmUgdG91Y2hlZAorICogaW4gaW50ZXJydXB0LCBldGMuICBTb21lIGFyY2hzIGNhbiBvcHRpbWl6ZSB0aGlzIGNhc2Ugd2VsbC4gKi8KKyNkZWZpbmUgX19sb2NhbF9pbmMobCkJCWxvY2FsX3NldCgobCksIGxvY2FsX3JlYWQobCkgKyAxKQorI2RlZmluZSBfX2xvY2FsX2RlYyhsKQkJbG9jYWxfc2V0KChsKSwgbG9jYWxfcmVhZChsKSAtIDEpCisjZGVmaW5lIF9fbG9jYWxfYWRkKGksbCkJbG9jYWxfc2V0KChsKSwgbG9jYWxfcmVhZChsKSArIChpKSkKKyNkZWZpbmUgX19sb2NhbF9zdWIoaSxsKQlsb2NhbF9zZXQoKGwpLCBsb2NhbF9yZWFkKGwpIC0gKGkpKQorCisjZWxzZSAvKiAuLi4gY2FuJ3QgdXNlIGF0b21pY3MuICovCisvKiBJbXBsZW1lbnQgaW4gdGVybXMgb2YgdGhyZWUgdmFyaWFibGVzLgorICAgQW5vdGhlciBvcHRpb24gd291bGQgYmUgdG8gdXNlIGxvY2FsX2lycV9zYXZlL3Jlc3RvcmUuICovCisKK3R5cGVkZWYgc3RydWN0Cit7CisJLyogMCA9IGluIGhhcmRpcnEsIDEgPSBpbiBzb2Z0aXJxLCAyID0gdXNlcm1vZGUuICovCisJdW5zaWduZWQgbG9uZyB2WzNdOworfSBsb2NhbF90OworCisjZGVmaW5lIF9MT0NBTF9WQVIobCkJKChsKS0+dlshaW5faW50ZXJydXB0KCkgKyAhaW5faXJxKCldKQorCisjZGVmaW5lIExPQ0FMX0lOSVQoaSkJeyB7IChpKSwgMCwgMCB9IH0KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvY2FsX3JlYWQobG9jYWxfdCAqbCkKK3sKKwlyZXR1cm4gbC0+dlswXSArIGwtPnZbMV0gKyBsLT52WzJdOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbG9jYWxfc2V0KGxvY2FsX3QgKmwsIHVuc2lnbmVkIGxvbmcgdikKK3sKKwlsLT52WzBdID0gdjsKKwlsLT52WzFdID0gbC0+dlsyXSA9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2NhbF9pbmMobG9jYWxfdCAqbCkKK3sKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwlfTE9DQUxfVkFSKGwpKys7CisJcHJlZW1wdF9lbmFibGUoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGxvY2FsX2RlYyhsb2NhbF90ICpsKQoreworCXByZWVtcHRfZGlzYWJsZSgpOworCV9MT0NBTF9WQVIobCktLTsKKwlwcmVlbXB0X2VuYWJsZSgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbG9jYWxfYWRkKHVuc2lnbmVkIGxvbmcgdiwgbG9jYWxfdCAqbCkKK3sKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwlfTE9DQUxfVkFSKGwpICs9IHY7CisJcHJlZW1wdF9lbmFibGUoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGxvY2FsX3N1Yih1bnNpZ25lZCBsb25nIHYsIGxvY2FsX3QgKmwpCit7CisJcHJlZW1wdF9kaXNhYmxlKCk7CisJX0xPQ0FMX1ZBUihsKSAtPSB2OworCXByZWVtcHRfZW5hYmxlKCk7Cit9CisKKy8qIE5vbi1hdG9taWMgdmFyaWFudHMsIGllLiBwcmVlbXB0aW9uIGRpc2FibGVkIGFuZCB3b24ndCBiZSB0b3VjaGVkCisgKiBpbiBpbnRlcnJ1cHQsIGV0Yy4gIFNvbWUgYXJjaHMgY2FuIG9wdGltaXplIHRoaXMgY2FzZSB3ZWxsLiAqLworI2RlZmluZSBfX2xvY2FsX2luYyhsKQkJKChsKS0+dlswXSsrKQorI2RlZmluZSBfX2xvY2FsX2RlYyhsKQkJKChsKS0+dlswXS0tKQorI2RlZmluZSBfX2xvY2FsX2FkZChpLGwpCSgobCktPnZbMF0gKz0gKGkpKQorI2RlZmluZSBfX2xvY2FsX3N1YihpLGwpCSgobCktPnZbMF0gLT0gKGkpKQorCisjZW5kaWYgLyogTm9uLWF0b21pYyBpbXBsZW1lbnRhdGlvbiAqLworCisvKiBVc2UgdGhlc2UgZm9yIHBlci1jcHUgbG9jYWxfdCB2YXJpYWJsZXM6IG9uIHNvbWUgYXJjaHMgdGhleSBhcmUKKyAqIG11Y2ggbW9yZSBlZmZpY2llbnQgdGhhbiB0aGVzZSBuYWl2ZSBpbXBsZW1lbnRhdGlvbnMuICBOb3RlIHRoZXkgdGFrZQorICogYSB2YXJpYWJsZSAoZWcuIG15c3RydWN0LmZvbyksIG5vdCBhbiBhZGRyZXNzLgorICovCisjZGVmaW5lIGNwdV9sb2NhbF9yZWFkKHYpCWxvY2FsX3JlYWQoJl9fZ2V0X2NwdV92YXIodikpCisjZGVmaW5lIGNwdV9sb2NhbF9zZXQodiwgaSkJbG9jYWxfc2V0KCZfX2dldF9jcHVfdmFyKHYpLCAoaSkpCisjZGVmaW5lIGNwdV9sb2NhbF9pbmModikJbG9jYWxfaW5jKCZfX2dldF9jcHVfdmFyKHYpKQorI2RlZmluZSBjcHVfbG9jYWxfZGVjKHYpCWxvY2FsX2RlYygmX19nZXRfY3B1X3Zhcih2KSkKKyNkZWZpbmUgY3B1X2xvY2FsX2FkZChpLCB2KQlsb2NhbF9hZGQoKGkpLCAmX19nZXRfY3B1X3Zhcih2KSkKKyNkZWZpbmUgY3B1X2xvY2FsX3N1YihpLCB2KQlsb2NhbF9zdWIoKGkpLCAmX19nZXRfY3B1X3Zhcih2KSkKKworLyogTm9uLWF0b21pYyBpbmNyZW1lbnRzLCBpZS4gcHJlZW1wdGlvbiBkaXNhYmxlZCBhbmQgd29uJ3QgYmUgdG91Y2hlZAorICogaW4gaW50ZXJydXB0LCBldGMuICBTb21lIGFyY2hzIGNhbiBvcHRpbWl6ZSB0aGlzIGNhc2Ugd2VsbC4KKyAqLworI2RlZmluZSBfX2NwdV9sb2NhbF9pbmModikJX19sb2NhbF9pbmMoJl9fZ2V0X2NwdV92YXIodikpCisjZGVmaW5lIF9fY3B1X2xvY2FsX2RlYyh2KQlfX2xvY2FsX2RlYygmX19nZXRfY3B1X3Zhcih2KSkKKyNkZWZpbmUgX19jcHVfbG9jYWxfYWRkKGksIHYpCV9fbG9jYWxfYWRkKChpKSwgJl9fZ2V0X2NwdV92YXIodikpCisjZGVmaW5lIF9fY3B1X2xvY2FsX3N1YihpLCB2KQlfX2xvY2FsX3N1YigoaSksICZfX2dldF9jcHVfdmFyKHYpKQorCisjZW5kaWYgLyogX0FTTV9HRU5FUklDX0xPQ0FMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGNpLWRtYS1jb21wYXQuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGNpLWRtYS1jb21wYXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWMxMGU5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9wY2ktZG1hLWNvbXBhdC5oCkBAIC0wLDAgKzEsMTA3IEBACisvKiBpbmNsdWRlIHRoaXMgZmlsZSBpZiB0aGUgcGxhdGZvcm0gaW1wbGVtZW50cyB0aGUgZG1hXyBETUEgTWFwcGluZyBBUEkKKyAqIGFuZCB3YW50cyB0byBwcm92aWRlIHRoZSBwY2lfIERNQSBNYXBwaW5nIEFQSSBpbiB0ZXJtcyBvZiBpdCAqLworCisjaWZuZGVmIF9BU01fR0VORVJJQ19QQ0lfRE1BX0NPTVBBVF9ICisjZGVmaW5lIF9BU01fR0VORVJJQ19QQ0lfRE1BX0NPTVBBVF9ICisKKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorCisvKiBub3RlIHBjaV9zZXRfZG1hX21hc2sgaXNuJ3QgaGVyZSwgc2luY2UgaXQncyBhIHB1YmxpYyBmdW5jdGlvbgorICogZXhwb3J0ZWQgZnJvbSBkcml2ZXJzL3BjaSwgdXNlIGRtYV9zdXBwb3J0ZWQgaW5zdGVhZCAqLworCitzdGF0aWMgaW5saW5lIGludAorcGNpX2RtYV9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCB1NjQgbWFzaykKK3sKKwlyZXR1cm4gZG1hX3N1cHBvcnRlZChod2RldiA9PSBOVUxMID8gTlVMTCA6ICZod2Rldi0+ZGV2LCBtYXNrKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkICoKK3BjaV9hbGxvY19jb25zaXN0ZW50KHN0cnVjdCBwY2lfZGV2ICpod2Rldiwgc2l6ZV90IHNpemUsCisJCSAgICAgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSkKK3sKKwlyZXR1cm4gZG1hX2FsbG9jX2NvaGVyZW50KGh3ZGV2ID09IE5VTEwgPyBOVUxMIDogJmh3ZGV2LT5kZXYsIHNpemUsIGRtYV9oYW5kbGUsIEdGUF9BVE9NSUMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3BjaV9mcmVlX2NvbnNpc3RlbnQoc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCBzaXplX3Qgc2l6ZSwKKwkJICAgIHZvaWQgKnZhZGRyLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUpCit7CisJZG1hX2ZyZWVfY29oZXJlbnQoaHdkZXYgPT0gTlVMTCA/IE5VTEwgOiAmaHdkZXYtPmRldiwgc2l6ZSwgdmFkZHIsIGRtYV9oYW5kbGUpOworfQorCitzdGF0aWMgaW5saW5lIGRtYV9hZGRyX3QKK3BjaV9tYXBfc2luZ2xlKHN0cnVjdCBwY2lfZGV2ICpod2Rldiwgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbikKK3sKKwlyZXR1cm4gZG1hX21hcF9zaW5nbGUoaHdkZXYgPT0gTlVMTCA/IE5VTEwgOiAmaHdkZXYtPmRldiwgcHRyLCBzaXplLCAoZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24pZGlyZWN0aW9uKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitwY2lfdW5tYXBfc2luZ2xlKHN0cnVjdCBwY2lfZGV2ICpod2RldiwgZG1hX2FkZHJfdCBkbWFfYWRkciwKKwkJIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKQoreworCWRtYV91bm1hcF9zaW5nbGUoaHdkZXYgPT0gTlVMTCA/IE5VTEwgOiAmaHdkZXYtPmRldiwgZG1hX2FkZHIsIHNpemUsIChlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbilkaXJlY3Rpb24pOworfQorCitzdGF0aWMgaW5saW5lIGRtYV9hZGRyX3QKK3BjaV9tYXBfcGFnZShzdHJ1Y3QgcGNpX2RldiAqaHdkZXYsIHN0cnVjdCBwYWdlICpwYWdlLAorCSAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKQoreworCXJldHVybiBkbWFfbWFwX3BhZ2UoaHdkZXYgPT0gTlVMTCA/IE5VTEwgOiAmaHdkZXYtPmRldiwgcGFnZSwgb2Zmc2V0LCBzaXplLCAoZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24pZGlyZWN0aW9uKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitwY2lfdW5tYXBfcGFnZShzdHJ1Y3QgcGNpX2RldiAqaHdkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHJlc3MsCisJICAgICAgIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKQoreworCWRtYV91bm1hcF9wYWdlKGh3ZGV2ID09IE5VTEwgPyBOVUxMIDogJmh3ZGV2LT5kZXYsIGRtYV9hZGRyZXNzLCBzaXplLCAoZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24pZGlyZWN0aW9uKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3BjaV9tYXBfc2coc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCSAgIGludCBuZW50cywgaW50IGRpcmVjdGlvbikKK3sKKwlyZXR1cm4gZG1hX21hcF9zZyhod2RldiA9PSBOVUxMID8gTlVMTCA6ICZod2Rldi0+ZGV2LCBzZywgbmVudHMsIChlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbilkaXJlY3Rpb24pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3BjaV91bm1hcF9zZyhzdHJ1Y3QgcGNpX2RldiAqaHdkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJICAgICBpbnQgbmVudHMsIGludCBkaXJlY3Rpb24pCit7CisJZG1hX3VubWFwX3NnKGh3ZGV2ID09IE5VTEwgPyBOVUxMIDogJmh3ZGV2LT5kZXYsIHNnLCBuZW50cywgKGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uKWRpcmVjdGlvbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHN0cnVjdCBwY2lfZGV2ICpod2RldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAorCQkgICAgc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pCit7CisJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoaHdkZXYgPT0gTlVMTCA/IE5VTEwgOiAmaHdkZXYtPmRldiwgZG1hX2hhbmRsZSwgc2l6ZSwgKGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uKWRpcmVjdGlvbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpod2RldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAorCQkgICAgc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pCit7CisJZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoaHdkZXYgPT0gTlVMTCA/IE5VTEwgOiAmaHdkZXYtPmRldiwgZG1hX2hhbmRsZSwgc2l6ZSwgKGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uKWRpcmVjdGlvbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcGNpX2RtYV9zeW5jX3NnX2Zvcl9jcHUoc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCQlpbnQgbmVsZW1zLCBpbnQgZGlyZWN0aW9uKQoreworCWRtYV9zeW5jX3NnX2Zvcl9jcHUoaHdkZXYgPT0gTlVMTCA/IE5VTEwgOiAmaHdkZXYtPmRldiwgc2csIG5lbGVtcywgKGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uKWRpcmVjdGlvbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcGNpX2RtYV9zeW5jX3NnX2Zvcl9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCQlpbnQgbmVsZW1zLCBpbnQgZGlyZWN0aW9uKQoreworCWRtYV9zeW5jX3NnX2Zvcl9kZXZpY2UoaHdkZXYgPT0gTlVMTCA/IE5VTEwgOiAmaHdkZXYtPmRldiwgc2csIG5lbGVtcywgKGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uKWRpcmVjdGlvbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitwY2lfZG1hX21hcHBpbmdfZXJyb3IoZG1hX2FkZHJfdCBkbWFfYWRkcikKK3sKKwlyZXR1cm4gZG1hX21hcHBpbmdfZXJyb3IoZG1hX2FkZHIpOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGNpLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL3BjaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkNGNjNDcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3BjaS5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1nZW5lcmljL3BjaS5oCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMyBSdXNzZWxsIEtpbmcKKyAqLworI2lmbmRlZiBfQVNNX0dFTkVSSUNfUENJX0gKKyNkZWZpbmUgX0FTTV9HRU5FUklDX1BDSV9ICisKKy8qKgorICogcGNpYmlvc19yZXNvdXJjZV90b19idXMgLSBjb252ZXJ0IHJlc291cmNlIHRvIFBDSSBidXMgYWRkcmVzcworICogQGRldjogZGV2aWNlIHdoaWNoIG93bnMgdGhpcyByZXNvdXJjZQorICogQHJlZ2lvbjogY29udmVydGVkIGJ1cy1jZW50cmljIHJlZ2lvbiAoc3RhcnQsZW5kKQorICogQHJlczogcmVzb3VyY2UgdG8gY29udmVydAorICoKKyAqIENvbnZlcnQgYSByZXNvdXJjZSB0byBhIFBDSSBkZXZpY2UgYnVzIGFkZHJlc3Mgb3IgYnVzIHdpbmRvdy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCitwY2liaW9zX3Jlc291cmNlX3RvX2J1cyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgcGNpX2J1c19yZWdpb24gKnJlZ2lvbiwKKwkJCSBzdHJ1Y3QgcmVzb3VyY2UgKnJlcykKK3sKKwlyZWdpb24tPnN0YXJ0ID0gcmVzLT5zdGFydDsKKwlyZWdpb24tPmVuZCA9IHJlcy0+ZW5kOworfQorCisjZGVmaW5lIHBjaWJpb3Nfc2Nhbl9hbGxfZm5zKGEsIGIpCTAKKworI2lmbmRlZiBIQVZFX0FSQ0hfUENJX0dFVF9MRUdBQ1lfSURFX0lSUQorc3RhdGljIGlubGluZSBpbnQgcGNpX2dldF9sZWdhY3lfaWRlX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgY2hhbm5lbCkKK3sKKwlyZXR1cm4gY2hhbm5lbCA/IDE1IDogMTQ7Cit9CisjZW5kaWYgLyogSEFWRV9BUkNIX1BDSV9HRVRfTEVHQUNZX0lERV9JUlEgKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL3BlcmNwdS5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZXJjcHUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjcwOWI4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZXJjcHUuaApAQCAtMCwwICsxLDQyIEBACisjaWZuZGVmIF9BU01fR0VORVJJQ19QRVJDUFVfSF8KKyNkZWZpbmUgX0FTTV9HRU5FUklDX1BFUkNQVV9IXworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisKKyNkZWZpbmUgX19HRU5FUklDX1BFUl9DUFUKKyNpZmRlZiBDT05GSUdfU01QCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fcGVyX2NwdV9vZmZzZXRbTlJfQ1BVU107CisKKy8qIFNlcGFyYXRlIG91dCB0aGUgdHlwZSwgc28gKGludFszXSwgZm9vKSB3b3Jrcy4gKi8KKyNkZWZpbmUgREVGSU5FX1BFUl9DUFUodHlwZSwgbmFtZSkgXAorICAgIF9fYXR0cmlidXRlX18oKF9fc2VjdGlvbl9fKCIuZGF0YS5wZXJjcHUiKSkpIF9fdHlwZW9mX18odHlwZSkgcGVyX2NwdV9fIyNuYW1lCisKKy8qIHZhciBpcyBpbiBkaXNjYXJkZWQgcmVnaW9uOiBvZmZzZXQgdG8gcGFydGljdWxhciBjb3B5IHdlIHdhbnQgKi8KKyNkZWZpbmUgcGVyX2NwdSh2YXIsIGNwdSkgKCpSRUxPQ19ISURFKCZwZXJfY3B1X18jI3ZhciwgX19wZXJfY3B1X29mZnNldFtjcHVdKSkKKyNkZWZpbmUgX19nZXRfY3B1X3Zhcih2YXIpIHBlcl9jcHUodmFyLCBzbXBfcHJvY2Vzc29yX2lkKCkpCisKKy8qIEEgbWFjcm8gdG8gYXZvaWQgI2luY2x1ZGUgaGVsbC4uLiAqLworI2RlZmluZSBwZXJjcHVfbW9kY29weShwY3B1ZHN0LCBzcmMsIHNpemUpCQkJXAorZG8gewkJCQkJCQkJXAorCXVuc2lnbmVkIGludCBfX2k7CQkJCQlcCisJZm9yIChfX2kgPSAwOyBfX2kgPCBOUl9DUFVTOyBfX2krKykJCQlcCisJCWlmIChjcHVfcG9zc2libGUoX19pKSkJCQkJXAorCQkJbWVtY3B5KChwY3B1ZHN0KStfX3Blcl9jcHVfb2Zmc2V0W19faV0sCVwKKwkJCSAgICAgICAoc3JjKSwgKHNpemUpKTsJCQlcCit9IHdoaWxlICgwKQorI2Vsc2UgLyogISBTTVAgKi8KKworI2RlZmluZSBERUZJTkVfUEVSX0NQVSh0eXBlLCBuYW1lKSBcCisgICAgX190eXBlb2ZfXyh0eXBlKSBwZXJfY3B1X18jI25hbWUKKworI2RlZmluZSBwZXJfY3B1KHZhciwgY3B1KQkJCSgqKCh2b2lkKWNwdSwgJnBlcl9jcHVfXyMjdmFyKSkKKyNkZWZpbmUgX19nZXRfY3B1X3Zhcih2YXIpCQkJcGVyX2NwdV9fIyN2YXIKKworI2VuZGlmCS8qIFNNUCAqLworCisjZGVmaW5lIERFQ0xBUkVfUEVSX0NQVSh0eXBlLCBuYW1lKSBleHRlcm4gX190eXBlb2ZfXyh0eXBlKSBwZXJfY3B1X18jI25hbWUKKworI2RlZmluZSBFWFBPUlRfUEVSX0NQVV9TWU1CT0wodmFyKSBFWFBPUlRfU1lNQk9MKHBlcl9jcHVfXyMjdmFyKQorI2RlZmluZSBFWFBPUlRfUEVSX0NQVV9TWU1CT0xfR1BMKHZhcikgRVhQT1JUX1NZTUJPTF9HUEwocGVyX2NwdV9fIyN2YXIpCisKKyNlbmRpZiAvKiBfQVNNX0dFTkVSSUNfUEVSQ1BVX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGUtbm9wbWQuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZS1ub3BtZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4ZDUzYmEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGUtbm9wbWQuaApAQCAtMCwwICsxLDY1IEBACisjaWZuZGVmIF9QR1RBQkxFX05PUE1EX0gKKyNkZWZpbmUgX1BHVEFCTEVfTk9QTURfSAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGd0YWJsZS1ub3B1ZC5oPgorCisjZGVmaW5lIF9fUEFHRVRBQkxFX1BNRF9GT0xERUQKKworLyoKKyAqIEhhdmluZyB0aGUgcG1kIHR5cGUgY29uc2lzdCBvZiBhIHB1ZCBnZXRzIHRoZSBzaXplIHJpZ2h0LCBhbmQgYWxsb3dzCisgKiB1cyB0byBjb25jZXB0dWFsbHkgYWNjZXNzIHRoZSBwdWQgZW50cnkgdGhhdCB0aGlzIHBtZCBpcyBmb2xkZWQgaW50bworICogd2l0aG91dCBjYXN0aW5nLgorICovCit0eXBlZGVmIHN0cnVjdCB7IHB1ZF90IHB1ZDsgfSBwbWRfdDsKKworI2RlZmluZSBQTURfU0hJRlQJUFVEX1NISUZUCisjZGVmaW5lIFBUUlNfUEVSX1BNRAkxCisjZGVmaW5lIFBNRF9TSVpFICAJKDFVTCA8PCBQTURfU0hJRlQpCisjZGVmaW5lIFBNRF9NQVNLICAJKH4oUE1EX1NJWkUtMSkpCisKKy8qCisgKiBUaGUgInB1ZF94eHgoKSIgZnVuY3Rpb25zIGhlcmUgYXJlIHRyaXZpYWwgZm9yIGEgZm9sZGVkIHR3by1sZXZlbAorICogc2V0dXA6IHRoZSBwbWQgaXMgbmV2ZXIgYmFkLCBhbmQgYSBwbWQgYWx3YXlzIGV4aXN0cyAoYXMgaXQncyBmb2xkZWQKKyAqIGludG8gdGhlIHB1ZCBlbnRyeSkKKyAqLworc3RhdGljIGlubGluZSBpbnQgcHVkX25vbmUocHVkX3QgcHVkKQkJeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSBpbnQgcHVkX2JhZChwdWRfdCBwdWQpCQl7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIGludCBwdWRfcHJlc2VudChwdWRfdCBwdWQpCXsgcmV0dXJuIDE7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBwdWRfY2xlYXIocHVkX3QgKnB1ZCkJeyB9CisjZGVmaW5lIHBtZF9FUlJPUihwbWQpCQkJCShwdWRfRVJST1IoKHBtZCkucHVkKSkKKworI2RlZmluZSBwdWRfcG9wdWxhdGUobW0sIHBtZCwgcHRlKQkJZG8geyB9IHdoaWxlICgwKQorCisvKgorICogKHBtZHMgYXJlIGZvbGRlZCBpbnRvIHB1ZHMgc28gdGhpcyBkb2Vzbid0IGdldCBhY3R1YWxseSBjYWxsZWQsCisgKiBidXQgdGhlIGRlZmluZSBpcyBuZWVkZWQgZm9yIGEgZ2VuZXJpYyBpbmxpbmUgZnVuY3Rpb24uKQorICovCisjZGVmaW5lIHNldF9wdWQocHVkcHRyLCBwdWR2YWwpCQkJc2V0X3BtZCgocG1kX3QgKikocHVkcHRyKSwgKHBtZF90KSB7IHB1ZHZhbCB9KQorCitzdGF0aWMgaW5saW5lIHBtZF90ICogcG1kX29mZnNldChwdWRfdCAqIHB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCXJldHVybiAocG1kX3QgKilwdWQ7Cit9CisKKyNkZWZpbmUgcG1kX3ZhbCh4KQkJCQkocHVkX3ZhbCgoeCkucHVkKSkKKyNkZWZpbmUgX19wbWQoeCkJCQkJKChwbWRfdCkgeyBfX3B1ZCh4KSB9ICkKKworI2RlZmluZSBwdWRfcGFnZShwdWQpCQkJCShwbWRfcGFnZSgocG1kX3QpeyBwdWQgfSkpCisjZGVmaW5lIHB1ZF9wYWdlX2tlcm5lbChwdWQpCQkJKHBtZF9wYWdlX2tlcm5lbCgocG1kX3QpeyBwdWQgfSkpCisKKy8qCisgKiBhbGxvY2F0aW5nIGFuZCBmcmVlaW5nIGEgcG1kIGlzIHRyaXZpYWw6IHRoZSAxLWVudHJ5IHBtZCBpcworICogaW5zaWRlIHRoZSBwdWQsIHNvIGhhcyBubyBleHRyYSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIGl0LgorICovCisjZGVmaW5lIHBtZF9hbGxvY19vbmUobW0sIGFkZHJlc3MpCQlOVUxMCisjZGVmaW5lIHBtZF9mcmVlKHgpCQkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgX19wbWRfZnJlZV90bGIodGxiLCB4KQkJCWRvIHsgfSB3aGlsZSAoMCkKKworI3VuZGVmICBwbWRfYWRkcl9lbmQKKyNkZWZpbmUgcG1kX2FkZHJfZW5kKGFkZHIsIGVuZCkJCQkoZW5kKQorCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiBfUEdUQUJMRV9OT1BNRF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGUtbm9wdWQuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZS1ub3B1ZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyZTI5ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGUtbm9wdWQuaApAQCAtMCwwICsxLDYxIEBACisjaWZuZGVmIF9QR1RBQkxFX05PUFVEX0gKKyNkZWZpbmUgX1BHVEFCTEVfTk9QVURfSAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjZGVmaW5lIF9fUEFHRVRBQkxFX1BVRF9GT0xERUQKKworLyoKKyAqIEhhdmluZyB0aGUgcHVkIHR5cGUgY29uc2lzdCBvZiBhIHBnZCBnZXRzIHRoZSBzaXplIHJpZ2h0LCBhbmQgYWxsb3dzCisgKiB1cyB0byBjb25jZXB0dWFsbHkgYWNjZXNzIHRoZSBwZ2QgZW50cnkgdGhhdCB0aGlzIHB1ZCBpcyBmb2xkZWQgaW50bworICogd2l0aG91dCBjYXN0aW5nLgorICovCit0eXBlZGVmIHN0cnVjdCB7IHBnZF90IHBnZDsgfSBwdWRfdDsKKworI2RlZmluZSBQVURfU0hJRlQJUEdESVJfU0hJRlQKKyNkZWZpbmUgUFRSU19QRVJfUFVECTEKKyNkZWZpbmUgUFVEX1NJWkUgIAkoMVVMIDw8IFBVRF9TSElGVCkKKyNkZWZpbmUgUFVEX01BU0sgIAkofihQVURfU0laRS0xKSkKKworLyoKKyAqIFRoZSAicGdkX3h4eCgpIiBmdW5jdGlvbnMgaGVyZSBhcmUgdHJpdmlhbCBmb3IgYSBmb2xkZWQgdHdvLWxldmVsCisgKiBzZXR1cDogdGhlIHB1ZCBpcyBuZXZlciBiYWQsIGFuZCBhIHB1ZCBhbHdheXMgZXhpc3RzIChhcyBpdCdzIGZvbGRlZAorICogaW50byB0aGUgcGdkIGVudHJ5KQorICovCitzdGF0aWMgaW5saW5lIGludCBwZ2Rfbm9uZShwZ2RfdCBwZ2QpCQl7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIGludCBwZ2RfYmFkKHBnZF90IHBnZCkJCXsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHBnZF9wcmVzZW50KHBnZF90IHBnZCkJeyByZXR1cm4gMTsgfQorc3RhdGljIGlubGluZSB2b2lkIHBnZF9jbGVhcihwZ2RfdCAqcGdkKQl7IH0KKyNkZWZpbmUgcHVkX0VSUk9SKHB1ZCkJCQkJKHBnZF9FUlJPUigocHVkKS5wZ2QpKQorCisjZGVmaW5lIHBnZF9wb3B1bGF0ZShtbSwgcGdkLCBwdWQpCQlkbyB7IH0gd2hpbGUgKDApCisvKgorICogKHB1ZHMgYXJlIGZvbGRlZCBpbnRvIHBnZHMgc28gdGhpcyBkb2Vzbid0IGdldCBhY3R1YWxseSBjYWxsZWQsCisgKiBidXQgdGhlIGRlZmluZSBpcyBuZWVkZWQgZm9yIGEgZ2VuZXJpYyBpbmxpbmUgZnVuY3Rpb24uKQorICovCisjZGVmaW5lIHNldF9wZ2QocGdkcHRyLCBwZ2R2YWwpCQkJc2V0X3B1ZCgocHVkX3QgKikocGdkcHRyKSwgKHB1ZF90KSB7IHBnZHZhbCB9KQorCitzdGF0aWMgaW5saW5lIHB1ZF90ICogcHVkX29mZnNldChwZ2RfdCAqIHBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCXJldHVybiAocHVkX3QgKilwZ2Q7Cit9CisKKyNkZWZpbmUgcHVkX3ZhbCh4KQkJCQkocGdkX3ZhbCgoeCkucGdkKSkKKyNkZWZpbmUgX19wdWQoeCkJCQkJKChwdWRfdCkgeyBfX3BnZCh4KSB9ICkKKworI2RlZmluZSBwZ2RfcGFnZShwZ2QpCQkJCShwdWRfcGFnZSgocHVkX3QpeyBwZ2QgfSkpCisjZGVmaW5lIHBnZF9wYWdlX2tlcm5lbChwZ2QpCQkJKHB1ZF9wYWdlX2tlcm5lbCgocHVkX3QpeyBwZ2QgfSkpCisKKy8qCisgKiBhbGxvY2F0aW5nIGFuZCBmcmVlaW5nIGEgcHVkIGlzIHRyaXZpYWw6IHRoZSAxLWVudHJ5IHB1ZCBpcworICogaW5zaWRlIHRoZSBwZ2QsIHNvIGhhcyBubyBleHRyYSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIGl0LgorICovCisjZGVmaW5lIHB1ZF9hbGxvY19vbmUobW0sIGFkZHJlc3MpCQlOVUxMCisjZGVmaW5lIHB1ZF9mcmVlKHgpCQkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgX19wdWRfZnJlZV90bGIodGxiLCB4KQkJCWRvIHsgfSB3aGlsZSAoMCkKKworI3VuZGVmICBwdWRfYWRkcl9lbmQKKyNkZWZpbmUgcHVkX2FkZHJfZW5kKGFkZHIsIGVuZCkJCQkoZW5kKQorCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisjZW5kaWYgLyogX1BHVEFCTEVfTk9QVURfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2IyODcxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlLmgKQEAgLTAsMCArMSwyMTMgQEAKKyNpZm5kZWYgX0FTTV9HRU5FUklDX1BHVEFCTEVfSAorI2RlZmluZSBfQVNNX0dFTkVSSUNfUEdUQUJMRV9ICisKKyNpZm5kZWYgX19IQVZFX0FSQ0hfUFRFUF9FU1RBQkxJU0gKKy8qCisgKiBFc3RhYmxpc2ggYSBuZXcgbWFwcGluZzoKKyAqICAtIGZsdXNoIHRoZSBvbGQgb25lCisgKiAgLSB1cGRhdGUgdGhlIHBhZ2UgdGFibGVzCisgKiAgLSBpbmZvcm0gdGhlIFRMQiBhYm91dCB0aGUgbmV3IG9uZQorICoKKyAqIFdlIGhvbGQgdGhlIG1tIHNlbWFwaG9yZSBmb3IgcmVhZGluZyBhbmQgdm1hLT52bV9tbS0+cGFnZV90YWJsZV9sb2NrLgorICoKKyAqIE5vdGU6IHRoZSBvbGQgcHRlIGlzIGtub3duIHRvIG5vdCBiZSB3cml0YWJsZSwgc28gd2UgZG9uJ3QgbmVlZCB0bworICogd29ycnkgYWJvdXQgZGlydHkgYml0cyBldGMgZ2V0dGluZyBsb3N0LgorICovCisjaWZuZGVmIF9fSEFWRV9BUkNIX1NFVF9QVEVfQVRPTUlDCisjZGVmaW5lIHB0ZXBfZXN0YWJsaXNoKF9fdm1hLCBfX2FkZHJlc3MsIF9fcHRlcCwgX19lbnRyeSkJCVwKK2RvIHsJCQkJICAJCQkJCVwKKwlzZXRfcHRlX2F0KChfX3ZtYSktPnZtX21tLCAoX19hZGRyZXNzKSwgX19wdGVwLCBfX2VudHJ5KTsJXAorCWZsdXNoX3RsYl9wYWdlKF9fdm1hLCBfX2FkZHJlc3MpOwkJCQlcCit9IHdoaWxlICgwKQorI2Vsc2UgLyogX19IQVZFX0FSQ0hfU0VUX1BURV9BVE9NSUMgKi8KKyNkZWZpbmUgcHRlcF9lc3RhYmxpc2goX192bWEsIF9fYWRkcmVzcywgX19wdGVwLCBfX2VudHJ5KQkJXAorZG8gewkJCQkgIAkJCQkJXAorCXNldF9wdGVfYXRvbWljKF9fcHRlcCwgX19lbnRyeSk7CQkJCVwKKwlmbHVzaF90bGJfcGFnZShfX3ZtYSwgX19hZGRyZXNzKTsJCQkJXAorfSB3aGlsZSAoMCkKKyNlbmRpZiAvKiBfX0hBVkVfQVJDSF9TRVRfUFRFX0FUT01JQyAqLworI2VuZGlmCisKKyNpZm5kZWYgX19IQVZFX0FSQ0hfUFRFUF9TRVRfQUNDRVNTX0ZMQUdTCisvKgorICogTGFyZ2VseSBzYW1lIGFzIGFib3ZlLCBidXQgb25seSBzZXRzIHRoZSBhY2Nlc3MgZmxhZ3MgKGRpcnR5LAorICogYWNjZXNzZWQsIGFuZCB3cml0YWJsZSkuIEZ1cnRoZXJtb3JlLCB3ZSBrbm93IGl0IGFsd2F5cyBnZXRzIHNldAorICogdG8gYSAibW9yZSBwZXJtaXNzaXZlIiBzZXR0aW5nLCB3aGljaCBhbGxvd3MgbW9zdCBhcmNoaXRlY3R1cmVzCisgKiB0byBvcHRpbWl6ZSB0aGlzLgorICovCisjZGVmaW5lIHB0ZXBfc2V0X2FjY2Vzc19mbGFncyhfX3ZtYSwgX19hZGRyZXNzLCBfX3B0ZXAsIF9fZW50cnksIF9fZGlydHkpIFwKK2RvIHsJCQkJICAJCQkJCSAgXAorCXNldF9wdGVfYXQoKF9fdm1hKS0+dm1fbW0sIChfX2FkZHJlc3MpLCBfX3B0ZXAsIF9fZW50cnkpOwkgIFwKKwlmbHVzaF90bGJfcGFnZShfX3ZtYSwgX19hZGRyZXNzKTsJCQkJICBcCit9IHdoaWxlICgwKQorI2VuZGlmCisKKyNpZm5kZWYgX19IQVZFX0FSQ0hfUFRFUF9URVNUX0FORF9DTEVBUl9ZT1VORworI2RlZmluZSBwdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKF9fdm1hLCBfX2FkZHJlc3MsIF9fcHRlcCkJCVwKKyh7CQkJCQkJCQkJXAorCXB0ZV90IF9fcHRlID0gKihfX3B0ZXApOwkJCQkJXAorCWludCByID0gMTsJCQkJCQkJXAorCWlmICghcHRlX3lvdW5nKF9fcHRlKSkJCQkJCQlcCisJCXIgPSAwOwkJCQkJCQlcCisJZWxzZQkJCQkJCQkJXAorCQlzZXRfcHRlX2F0KChfX3ZtYSktPnZtX21tLCAoX19hZGRyZXNzKSwJCQlcCisJCQkgICAoX19wdGVwKSwgcHRlX21rb2xkKF9fcHRlKSk7CQkJXAorCXI7CQkJCQkJCQlcCit9KQorI2VuZGlmCisKKyNpZm5kZWYgX19IQVZFX0FSQ0hfUFRFUF9DTEVBUl9ZT1VOR19GTFVTSAorI2RlZmluZSBwdGVwX2NsZWFyX2ZsdXNoX3lvdW5nKF9fdm1hLCBfX2FkZHJlc3MsIF9fcHRlcCkJCVwKKyh7CQkJCQkJCQkJXAorCWludCBfX3lvdW5nOwkJCQkJCQlcCisJX195b3VuZyA9IHB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoX192bWEsIF9fYWRkcmVzcywgX19wdGVwKTsJXAorCWlmIChfX3lvdW5nKQkJCQkJCQlcCisJCWZsdXNoX3RsYl9wYWdlKF9fdm1hLCBfX2FkZHJlc3MpOwkJCVwKKwlfX3lvdW5nOwkJCQkJCQlcCit9KQorI2VuZGlmCisKKyNpZm5kZWYgX19IQVZFX0FSQ0hfUFRFUF9URVNUX0FORF9DTEVBUl9ESVJUWQorI2RlZmluZSBwdGVwX3Rlc3RfYW5kX2NsZWFyX2RpcnR5KF9fdm1hLCBfX2FkZHJlc3MsIF9fcHRlcCkJCVwKKyh7CQkJCQkJCQkJXAorCXB0ZV90IF9fcHRlID0gKl9fcHRlcDsJCQkJCQlcCisJaW50IHIgPSAxOwkJCQkJCQlcCisJaWYgKCFwdGVfZGlydHkoX19wdGUpKQkJCQkJCVwKKwkJciA9IDA7CQkJCQkJCVwKKwllbHNlCQkJCQkJCQlcCisJCXNldF9wdGVfYXQoKF9fdm1hKS0+dm1fbW0sIChfX2FkZHJlc3MpLCAoX19wdGVwKSwJXAorCQkJICAgcHRlX21rY2xlYW4oX19wdGUpKTsJCQkJXAorCXI7CQkJCQkJCQlcCit9KQorI2VuZGlmCisKKyNpZm5kZWYgX19IQVZFX0FSQ0hfUFRFUF9DTEVBUl9ESVJUWV9GTFVTSAorI2RlZmluZSBwdGVwX2NsZWFyX2ZsdXNoX2RpcnR5KF9fdm1hLCBfX2FkZHJlc3MsIF9fcHRlcCkJCVwKKyh7CQkJCQkJCQkJXAorCWludCBfX2RpcnR5OwkJCQkJCQlcCisJX19kaXJ0eSA9IHB0ZXBfdGVzdF9hbmRfY2xlYXJfZGlydHkoX192bWEsIF9fYWRkcmVzcywgX19wdGVwKTsJXAorCWlmIChfX2RpcnR5KQkJCQkJCQlcCisJCWZsdXNoX3RsYl9wYWdlKF9fdm1hLCBfX2FkZHJlc3MpOwkJCVwKKwlfX2RpcnR5OwkJCQkJCQlcCit9KQorI2VuZGlmCisKKyNpZm5kZWYgX19IQVZFX0FSQ0hfUFRFUF9HRVRfQU5EX0NMRUFSCisjZGVmaW5lIHB0ZXBfZ2V0X2FuZF9jbGVhcihfX21tLCBfX2FkZHJlc3MsIF9fcHRlcCkJCQlcCisoewkJCQkJCQkJCVwKKwlwdGVfdCBfX3B0ZSA9ICooX19wdGVwKTsJCQkJCVwKKwlwdGVfY2xlYXIoKF9fbW0pLCAoX19hZGRyZXNzKSwgKF9fcHRlcCkpOwkJCVwKKwlfX3B0ZTsJCQkJCQkJCVwKK30pCisjZW5kaWYKKworI2lmbmRlZiBfX0hBVkVfQVJDSF9QVEVQX0NMRUFSX0ZMVVNICisjZGVmaW5lIHB0ZXBfY2xlYXJfZmx1c2goX192bWEsIF9fYWRkcmVzcywgX19wdGVwKQkJCVwKKyh7CQkJCQkJCQkJXAorCXB0ZV90IF9fcHRlOwkJCQkJCQlcCisJX19wdGUgPSBwdGVwX2dldF9hbmRfY2xlYXIoKF9fdm1hKS0+dm1fbW0sIF9fYWRkcmVzcywgX19wdGVwKTsJXAorCWZsdXNoX3RsYl9wYWdlKF9fdm1hLCBfX2FkZHJlc3MpOwkJCQlcCisJX19wdGU7CQkJCQkJCQlcCit9KQorI2VuZGlmCisKKyNpZm5kZWYgX19IQVZFX0FSQ0hfUFRFUF9TRVRfV1JQUk9URUNUCitzdGF0aWMgaW5saW5lIHZvaWQgcHRlcF9zZXRfd3Jwcm90ZWN0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90ICpwdGVwKQoreworCXB0ZV90IG9sZF9wdGUgPSAqcHRlcDsKKwlzZXRfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdGVwLCBwdGVfd3Jwcm90ZWN0KG9sZF9wdGUpKTsKK30KKyNlbmRpZgorCisjaWZuZGVmIF9fSEFWRV9BUkNIX1BURV9TQU1FCisjZGVmaW5lIHB0ZV9zYW1lKEEsQikJKHB0ZV92YWwoQSkgPT0gcHRlX3ZhbChCKSkKKyNlbmRpZgorCisjaWZuZGVmIF9fSEFWRV9BUkNIX1BBR0VfVEVTVF9BTkRfQ0xFQVJfRElSVFkKKyNkZWZpbmUgcGFnZV90ZXN0X2FuZF9jbGVhcl9kaXJ0eShwYWdlKSAoMCkKKyNlbmRpZgorCisjaWZuZGVmIF9fSEFWRV9BUkNIX1BBR0VfVEVTVF9BTkRfQ0xFQVJfWU9VTkcKKyNkZWZpbmUgcGFnZV90ZXN0X2FuZF9jbGVhcl95b3VuZyhwYWdlKSAoMCkKKyNlbmRpZgorCisjaWZuZGVmIF9fSEFWRV9BUkNIX1BHRF9PRkZTRVRfR0FURQorI2RlZmluZSBwZ2Rfb2Zmc2V0X2dhdGUobW0sIGFkZHIpCXBnZF9vZmZzZXQobW0sIGFkZHIpCisjZW5kaWYKKworI2lmbmRlZiBfX0hBVkVfQVJDSF9MQVpZX01NVV9QUk9UX1VQREFURQorI2RlZmluZSBsYXp5X21tdV9wcm90X3VwZGF0ZShwdGUpCWRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisvKgorICogV2hlbiB3YWxraW5nIHBhZ2UgdGFibGVzLCBnZXQgdGhlIGFkZHJlc3Mgb2YgdGhlIG5leHQgYm91bmRhcnksIG9yCisgKiB0aGUgZW5kIGFkZHJlc3Mgb2YgdGhlIHJhbmdlIGlmIHRoYXQgY29tZXMgZWFybGllci4gIEFsdGhvdWdoIGVuZCBtaWdodAorICogd3JhcCB0byAwIG9ubHkgaW4gY2xlYXJfcGFnZV9yYW5nZSwgX19ib3VuZGFyeSBtYXkgd3JhcCB0byAwIHRocm91Z2hvdXQuCisgKi8KKworI2lmbmRlZiBwZ2RfYWRkcl9lbmQKKyNkZWZpbmUgcGdkX2FkZHJfZW5kKGFkZHIsIGVuZCkJCQkJCQlcCisoewl1bnNpZ25lZCBsb25nIF9fYm91bmRhcnkgPSAoKGFkZHIpICsgUEdESVJfU0laRSkgJiBQR0RJUl9NQVNLOwlcCisJKF9fYm91bmRhcnkgLSAxIDwgKGVuZCkgLSAxKT8gX19ib3VuZGFyeTogKGVuZCk7CQlcCit9KQorI2VuZGlmCisKKyNpZm5kZWYgcHVkX2FkZHJfZW5kCisjZGVmaW5lIHB1ZF9hZGRyX2VuZChhZGRyLCBlbmQpCQkJCQkJXAorKHsJdW5zaWduZWQgbG9uZyBfX2JvdW5kYXJ5ID0gKChhZGRyKSArIFBVRF9TSVpFKSAmIFBVRF9NQVNLOwlcCisJKF9fYm91bmRhcnkgLSAxIDwgKGVuZCkgLSAxKT8gX19ib3VuZGFyeTogKGVuZCk7CQlcCit9KQorI2VuZGlmCisKKyNpZm5kZWYgcG1kX2FkZHJfZW5kCisjZGVmaW5lIHBtZF9hZGRyX2VuZChhZGRyLCBlbmQpCQkJCQkJXAorKHsJdW5zaWduZWQgbG9uZyBfX2JvdW5kYXJ5ID0gKChhZGRyKSArIFBNRF9TSVpFKSAmIFBNRF9NQVNLOwlcCisJKF9fYm91bmRhcnkgLSAxIDwgKGVuZCkgLSAxKT8gX19ib3VuZGFyeTogKGVuZCk7CQlcCit9KQorI2VuZGlmCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisvKgorICogV2hlbiB3YWxraW5nIHBhZ2UgdGFibGVzLCB3ZSB1c3VhbGx5IHdhbnQgdG8gc2tpcCBhbnkgcD9kX25vbmUgZW50cmllczsKKyAqIGFuZCBhbnkgcD9kX2JhZCBlbnRyaWVzIC0gcmVwb3J0aW5nIHRoZSBlcnJvciBiZWZvcmUgcmVzZXR0aW5nIHRvIG5vbmUuCisgKiBEbyB0aGUgdGVzdHMgaW5saW5lLCBidXQgcmVwb3J0IGFuZCBjbGVhciB0aGUgYmFkIGVudHJ5IGluIG1tL21lbW9yeS5jLgorICovCit2b2lkIHBnZF9jbGVhcl9iYWQocGdkX3QgKik7Cit2b2lkIHB1ZF9jbGVhcl9iYWQocHVkX3QgKik7Cit2b2lkIHBtZF9jbGVhcl9iYWQocG1kX3QgKik7CisKK3N0YXRpYyBpbmxpbmUgaW50IHBnZF9ub25lX29yX2NsZWFyX2JhZChwZ2RfdCAqcGdkKQoreworCWlmIChwZ2Rfbm9uZSgqcGdkKSkKKwkJcmV0dXJuIDE7CisJaWYgKHVubGlrZWx5KHBnZF9iYWQoKnBnZCkpKSB7CisJCXBnZF9jbGVhcl9iYWQocGdkKTsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBwdWRfbm9uZV9vcl9jbGVhcl9iYWQocHVkX3QgKnB1ZCkKK3sKKwlpZiAocHVkX25vbmUoKnB1ZCkpCisJCXJldHVybiAxOworCWlmICh1bmxpa2VseShwdWRfYmFkKCpwdWQpKSkgeworCQlwdWRfY2xlYXJfYmFkKHB1ZCk7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgcG1kX25vbmVfb3JfY2xlYXJfYmFkKHBtZF90ICpwbWQpCit7CisJaWYgKHBtZF9ub25lKCpwbWQpKQorCQlyZXR1cm4gMTsKKwlpZiAodW5saWtlbHkocG1kX2JhZCgqcG1kKSkpIHsKKwkJcG1kX2NsZWFyX2JhZChwbWQpOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYgLyogX0FTTV9HRU5FUklDX1BHVEFCTEVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9yZXNvdXJjZS5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9yZXNvdXJjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxZmNkYTkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3Jlc291cmNlLmgKQEAgLTAsMCArMSw4OCBAQAorI2lmbmRlZiBfQVNNX0dFTkVSSUNfUkVTT1VSQ0VfSAorI2RlZmluZSBfQVNNX0dFTkVSSUNfUkVTT1VSQ0VfSAorCisvKgorICogUmVzb3VyY2UgbGltaXQgSURzCisgKgorICogKCBDb21wYXRpYmlsaXR5IGRldGFpbDogdGhlcmUgYXJlIGFyY2hpdGVjdHVyZXMgdGhhdCBoYXZlCisgKiAgIGEgZGlmZmVyZW50IHJsaW1pdCBJRCBvcmRlciBpbiB0aGUgNS05IHJhbmdlIGFuZCB3YW50CisgKiAgIHRvIGtlZXAgdGhhdCBvcmRlciBmb3IgYmluYXJ5IGNvbXBhdGliaWxpdHkuIFRoZSByZWFzb25zCisgKiAgIGFyZSBoaXN0b3JpYyBhbmQgYWxsIG5ldyBybGltaXRzIGFyZSBpZGVudGljYWwgYWNyb3NzIGFsbAorICogICBhcmNoZXMuIElmIGFuIGFyY2ggaGFzIHN1Y2ggc3BlY2lhbCBvcmRlciBmb3Igc29tZSBybGltaXRzCisgKiAgIHRoZW4gaXQgZGVmaW5lcyB0aGVtIHByaW9yIGluY2x1ZGluZyBhc20tZ2VuZXJpYy9yZXNvdXJjZS5oLiApCisgKi8KKworI2RlZmluZSBSTElNSVRfQ1BVCQkwCS8qIENQVSB0aW1lIGluIG1zICovCisjZGVmaW5lIFJMSU1JVF9GU0laRQkJMQkvKiBNYXhpbXVtIGZpbGVzaXplICovCisjZGVmaW5lIFJMSU1JVF9EQVRBCQkyCS8qIG1heCBkYXRhIHNpemUgKi8KKyNkZWZpbmUgUkxJTUlUX1NUQUNLCQkzCS8qIG1heCBzdGFjayBzaXplICovCisjZGVmaW5lIFJMSU1JVF9DT1JFCQk0CS8qIG1heCBjb3JlIGZpbGUgc2l6ZSAqLworCisjaWZuZGVmIFJMSU1JVF9SU1MKKyMgZGVmaW5lIFJMSU1JVF9SU1MJCTUJLyogbWF4IHJlc2lkZW50IHNldCBzaXplICovCisjZW5kaWYKKworI2lmbmRlZiBSTElNSVRfTlBST0MKKyMgZGVmaW5lIFJMSU1JVF9OUFJPQwkJNgkvKiBtYXggbnVtYmVyIG9mIHByb2Nlc3NlcyAqLworI2VuZGlmCisKKyNpZm5kZWYgUkxJTUlUX05PRklMRQorIyBkZWZpbmUgUkxJTUlUX05PRklMRQkJNwkvKiBtYXggbnVtYmVyIG9mIG9wZW4gZmlsZXMgKi8KKyNlbmRpZgorCisjaWZuZGVmIFJMSU1JVF9NRU1MT0NLCisjIGRlZmluZSBSTElNSVRfTUVNTE9DSwkJOAkvKiBtYXggbG9ja2VkLWluLW1lbW9yeSBhZGRyZXNzIHNwYWNlICovCisjZW5kaWYKKworI2lmbmRlZiBSTElNSVRfQVMKKyMgZGVmaW5lIFJMSU1JVF9BUwkJOQkvKiBhZGRyZXNzIHNwYWNlIGxpbWl0ICovCisjZW5kaWYKKworI2RlZmluZSBSTElNSVRfTE9DS1MJCTEwCS8qIG1heGltdW0gZmlsZSBsb2NrcyBoZWxkICovCisjZGVmaW5lIFJMSU1JVF9TSUdQRU5ESU5HCTExCS8qIG1heCBudW1iZXIgb2YgcGVuZGluZyBzaWduYWxzICovCisjZGVmaW5lIFJMSU1JVF9NU0dRVUVVRQkJMTIJLyogbWF4aW11bSBieXRlcyBpbiBQT1NJWCBtcXVldWVzICovCisKKyNkZWZpbmUgUkxJTV9OTElNSVRTCQkxMworCisvKgorICogU3VTIHNheXMgbGltaXRzIGhhdmUgdG8gYmUgdW5zaWduZWQuCisgKiBXaGljaCBtYWtlcyBhIHRvbiBtb3JlIHNlbnNlIGFueXdheS4KKyAqCisgKiBTb21lIGFyY2hpdGVjdHVyZXMgb3ZlcnJpZGUgdGhpcyAoZm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucyk6CisgKi8KKyNpZm5kZWYgUkxJTV9JTkZJTklUWQorIyBkZWZpbmUgUkxJTV9JTkZJTklUWQkJKH4wVUwpCisjZW5kaWYKKworLyoKKyAqIFJMSU1JVF9TVEFDSyBkZWZhdWx0IG1heGltdW0gLSBzb21lIGFyY2hpdGVjdHVyZXMgb3ZlcnJpZGUgaXQ6CisgKi8KKyNpZm5kZWYgX1NUS19MSU1fTUFYCisjIGRlZmluZSBfU1RLX0xJTV9NQVgJCVJMSU1fSU5GSU5JVFkKKyNlbmRpZgorCisjaWZkZWYgX19LRVJORUxfXworCisvKgorICogYm9vdC10aW1lIHJsaW1pdCBkZWZhdWx0cyBmb3IgdGhlIGluaXQgdGFzazoKKyAqLworI2RlZmluZSBJTklUX1JMSU1JVFMJCQkJCQkJXAorewkJCQkJCQkJCVwKKwlbUkxJTUlUX0NQVV0JCT0geyAgUkxJTV9JTkZJTklUWSwgIFJMSU1fSU5GSU5JVFkgfSwJXAorCVtSTElNSVRfRlNJWkVdCQk9IHsgIFJMSU1fSU5GSU5JVFksICBSTElNX0lORklOSVRZIH0sCVwKKwlbUkxJTUlUX0RBVEFdCQk9IHsgIFJMSU1fSU5GSU5JVFksICBSTElNX0lORklOSVRZIH0sCVwKKwlbUkxJTUlUX1NUQUNLXQkJPSB7ICAgICAgIF9TVEtfTElNLCAgIF9TVEtfTElNX01BWCB9LAlcCisJW1JMSU1JVF9DT1JFXQkJPSB7ICAgICAgICAgICAgICAwLCAgUkxJTV9JTkZJTklUWSB9LAlcCisJW1JMSU1JVF9SU1NdCQk9IHsgIFJMSU1fSU5GSU5JVFksICBSTElNX0lORklOSVRZIH0sCVwKKwlbUkxJTUlUX05QUk9DXQkJPSB7ICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgMCB9LAlcCisJW1JMSU1JVF9OT0ZJTEVdCQk9IHsgICAgICAgSU5SX09QRU4sICAgICAgIElOUl9PUEVOIH0sCVwKKwlbUkxJTUlUX01FTUxPQ0tdCT0geyAgICBNTE9DS19MSU1JVCwgICAgTUxPQ0tfTElNSVQgfSwJXAorCVtSTElNSVRfQVNdCQk9IHsgIFJMSU1fSU5GSU5JVFksICBSTElNX0lORklOSVRZIH0sCVwKKwlbUkxJTUlUX0xPQ0tTXQkJPSB7ICBSTElNX0lORklOSVRZLCAgUkxJTV9JTkZJTklUWSB9LAlcCisJW1JMSU1JVF9TSUdQRU5ESU5HXQk9IHsgCQkwLAkgICAgICAgMCB9LAlcCisJW1JMSU1JVF9NU0dRVUVVRV0JPSB7ICAgTVFfQllURVNfTUFYLCAgIE1RX0JZVEVTX01BWCB9LAlcCit9CisKKyNlbmRpZgkvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9ydGMuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvcnRjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VmMDhkYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvcnRjLmgKQEAgLTAsMCArMSwyMTMgQEAKKy8qIAorICogaW5jbHVlL2FzbS1nZW5lcmljL3J0Yy5oCisgKgorICogQXV0aG9yOiBUb20gUmluaSA8dHJpbmlAbXZpc3RhLmNvbT4KKyAqCisgKiBCYXNlZCBvbjoKKyAqIGRyaXZlcnMvY2hhci9ydGMuYworICoKKyAqIFBsZWFzZSByZWFkIHRoZSBDT1BZSU5HIGZpbGUgZm9yIGFsbCBsaWNlbnNlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0FTTV9SVENfSF9fCisjZGVmaW5lIF9fQVNNX1JUQ19IX18KKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L21jMTQ2ODE4cnRjLmg+CisjaW5jbHVkZSA8bGludXgvcnRjLmg+CisjaW5jbHVkZSA8bGludXgvYmNkLmg+CisKKyNkZWZpbmUgUlRDX1BJRSAweDQwCQkvKiBwZXJpb2RpYyBpbnRlcnJ1cHQgZW5hYmxlICovCisjZGVmaW5lIFJUQ19BSUUgMHgyMAkJLyogYWxhcm0gaW50ZXJydXB0IGVuYWJsZSAqLworI2RlZmluZSBSVENfVUlFIDB4MTAJCS8qIHVwZGF0ZS1maW5pc2hlZCBpbnRlcnJ1cHQgZW5hYmxlICovCisKKy8qIHNvbWUgZHVtbXkgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgUlRDX0JBVFRfQkFEIDB4MTAwCS8qIGJhdHRlcnkgYmFkICovCisjZGVmaW5lIFJUQ19TUVdFIDB4MDgJCS8qIGVuYWJsZSBzcXVhcmUtd2F2ZSBvdXRwdXQgKi8KKyNkZWZpbmUgUlRDX0RNX0JJTkFSWSAweDA0CS8qIGFsbCB0aW1lL2RhdGUgdmFsdWVzIGFyZSBCQ0QgaWYgY2xlYXIgKi8KKyNkZWZpbmUgUlRDXzI0SCAweDAyCQkvKiAyNCBob3VyIG1vZGUgLSBlbHNlIGhvdXJzIGJpdCA3IG1lYW5zIHBtICovCisjZGVmaW5lIFJUQ19EU1RfRU4gMHgwMQkgICAgICAgIC8qIGF1dG8gc3dpdGNoIERTVCAtIHdvcmtzIGYuIFVTQSBvbmx5ICovCisKKy8qCisgKiBSZXR1cm5zIHRydWUgaWYgYSBjbG9jayB1cGRhdGUgaXMgaW4gcHJvZ3Jlc3MKKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIHJ0Y19pc191cGRhdGluZyh2b2lkKQoreworCXVuc2lnbmVkIGNoYXIgdWlwOworCisJc3Bpbl9sb2NrX2lycSgmcnRjX2xvY2spOworCXVpcCA9IChDTU9TX1JFQUQoUlRDX0ZSRVFfU0VMRUNUKSAmIFJUQ19VSVApOworCXNwaW5fdW5sb2NrX2lycSgmcnRjX2xvY2spOworCXJldHVybiB1aXA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldF9ydGNfdGltZShzdHJ1Y3QgcnRjX3RpbWUgKnRpbWUpCit7CisJdW5zaWduZWQgbG9uZyB1aXBfd2F0Y2hkb2cgPSBqaWZmaWVzOworCXVuc2lnbmVkIGNoYXIgY3RybDsKKyNpZmRlZiBDT05GSUdfTUFDSF9ERUNTVEFUSU9OCisJdW5zaWduZWQgaW50IHJlYWxfeWVhcjsKKyNlbmRpZgorCisJLyoKKwkgKiByZWFkIFJUQyBvbmNlIGFueSB1cGRhdGUgaW4gcHJvZ3Jlc3MgaXMgZG9uZS4gVGhlIHVwZGF0ZQorCSAqIGNhbiB0YWtlIGp1c3Qgb3ZlciAybXMuIFdlIHdhaXQgMTAgdG8gMjBtcy4gVGhlcmUgaXMgbm8gbmVlZCB0bworCSAqIHRvIHBvbGwtd2FpdCAodXAgdG8gMXMgLSBlZWNjY2gpIGZvciB0aGUgZmFsbGluZyBlZGdlIG9mIFJUQ19VSVAuCisJICogSWYgeW91IG5lZWQgdG8ga25vdyAqZXhhY3RseSogd2hlbiBhIHNlY29uZCBoYXMgc3RhcnRlZCwgZW5hYmxlCisJICogcGVyaW9kaWMgdXBkYXRlIGNvbXBsZXRlIGludGVycnVwdHMsICh2aWEgaW9jdGwpIGFuZCB0aGVuIAorCSAqIGltbWVkaWF0ZWx5IHJlYWQgL2Rldi9ydGMgd2hpY2ggd2lsbCBibG9jayB1bnRpbCB5b3UgZ2V0IHRoZSBJUlEuCisJICogT25jZSB0aGUgcmVhZCBjbGVhcnMsIHJlYWQgdGhlIFJUQyB0aW1lIChhZ2FpbiB2aWEgaW9jdGwpLiBFYXN5LgorCSAqLworCisJaWYgKHJ0Y19pc191cGRhdGluZygpICE9IDApCisJCXdoaWxlIChqaWZmaWVzIC0gdWlwX3dhdGNoZG9nIDwgMipIWi8xMDApIHsKKwkJCWJhcnJpZXIoKTsKKwkJCWNwdV9yZWxheCgpOworCQl9CisKKwkvKgorCSAqIE9ubHkgdGhlIHZhbHVlcyB0aGF0IHdlIHJlYWQgZnJvbSB0aGUgUlRDIGFyZSBzZXQuIFdlIGxlYXZlCisJICogdG1fd2RheSwgdG1feWRheSBhbmQgdG1faXNkc3QgdW50b3VjaGVkLiBFdmVuIHRob3VnaCB0aGUKKwkgKiBSVEMgaGFzIFJUQ19EQVlfT0ZfV0VFSywgd2UgaWdub3JlIGl0LCBhcyBpdCBpcyBvbmx5IHVwZGF0ZWQKKwkgKiBieSB0aGUgUlRDIHdoZW4gaW5pdGlhbGx5IHNldCB0byBhIG5vbi16ZXJvIHZhbHVlLgorCSAqLworCXNwaW5fbG9ja19pcnEoJnJ0Y19sb2NrKTsKKwl0aW1lLT50bV9zZWMgPSBDTU9TX1JFQUQoUlRDX1NFQ09ORFMpOworCXRpbWUtPnRtX21pbiA9IENNT1NfUkVBRChSVENfTUlOVVRFUyk7CisJdGltZS0+dG1faG91ciA9IENNT1NfUkVBRChSVENfSE9VUlMpOworCXRpbWUtPnRtX21kYXkgPSBDTU9TX1JFQUQoUlRDX0RBWV9PRl9NT05USCk7CisJdGltZS0+dG1fbW9uID0gQ01PU19SRUFEKFJUQ19NT05USCk7CisJdGltZS0+dG1feWVhciA9IENNT1NfUkVBRChSVENfWUVBUik7CisjaWZkZWYgQ09ORklHX01BQ0hfREVDU1RBVElPTgorCXJlYWxfeWVhciA9IENNT1NfUkVBRChSVENfREVDX1lFQVIpOworI2VuZGlmCisJY3RybCA9IENNT1NfUkVBRChSVENfQ09OVFJPTCk7CisJc3Bpbl91bmxvY2tfaXJxKCZydGNfbG9jayk7CisKKwlpZiAoIShjdHJsICYgUlRDX0RNX0JJTkFSWSkgfHwgUlRDX0FMV0FZU19CQ0QpCisJeworCQlCQ0RfVE9fQklOKHRpbWUtPnRtX3NlYyk7CisJCUJDRF9UT19CSU4odGltZS0+dG1fbWluKTsKKwkJQkNEX1RPX0JJTih0aW1lLT50bV9ob3VyKTsKKwkJQkNEX1RPX0JJTih0aW1lLT50bV9tZGF5KTsKKwkJQkNEX1RPX0JJTih0aW1lLT50bV9tb24pOworCQlCQ0RfVE9fQklOKHRpbWUtPnRtX3llYXIpOworCX0KKworI2lmZGVmIENPTkZJR19NQUNIX0RFQ1NUQVRJT04KKwl0aW1lLT50bV95ZWFyICs9IHJlYWxfeWVhciAtIDcyOworI2VuZGlmCisKKwkvKgorCSAqIEFjY291bnQgZm9yIGRpZmZlcmVuY2VzIGJldHdlZW4gaG93IHRoZSBSVEMgdXNlcyB0aGUgdmFsdWVzCisJICogYW5kIGhvdyB0aGV5IGFyZSBkZWZpbmVkIGluIGEgc3RydWN0IHJ0Y190aW1lOworCSAqLworCWlmICh0aW1lLT50bV95ZWFyIDw9IDY5KQorCQl0aW1lLT50bV95ZWFyICs9IDEwMDsKKworCXRpbWUtPnRtX21vbi0tOworCisJcmV0dXJuIFJUQ18yNEg7Cit9CisKKy8qIFNldCB0aGUgY3VycmVudCBkYXRlIGFuZCB0aW1lIGluIHRoZSByZWFsIHRpbWUgY2xvY2suICovCitzdGF0aWMgaW5saW5lIGludCBzZXRfcnRjX3RpbWUoc3RydWN0IHJ0Y190aW1lICp0aW1lKQoreworCXVuc2lnbmVkIGNoYXIgbW9uLCBkYXksIGhycywgbWluLCBzZWM7CisJdW5zaWduZWQgY2hhciBzYXZlX2NvbnRyb2wsIHNhdmVfZnJlcV9zZWxlY3Q7CisJdW5zaWduZWQgaW50IHlyczsKKyNpZmRlZiBDT05GSUdfTUFDSF9ERUNTVEFUSU9OCisJdW5zaWduZWQgaW50IHJlYWxfeXJzLCBsZWFwX3lyOworI2VuZGlmCisKKwl5cnMgPSB0aW1lLT50bV95ZWFyOworCW1vbiA9IHRpbWUtPnRtX21vbiArIDE7ICAgLyogdG1fbW9uIHN0YXJ0cyBhdCB6ZXJvICovCisJZGF5ID0gdGltZS0+dG1fbWRheTsKKwlocnMgPSB0aW1lLT50bV9ob3VyOworCW1pbiA9IHRpbWUtPnRtX21pbjsKKwlzZWMgPSB0aW1lLT50bV9zZWM7CisKKwlpZiAoeXJzID4gMjU1KQkvKiBUaGV5IGFyZSB1bnNpZ25lZCAqLworCQlyZXR1cm4gLUVJTlZBTDsKKworCXNwaW5fbG9ja19pcnEoJnJ0Y19sb2NrKTsKKyNpZmRlZiBDT05GSUdfTUFDSF9ERUNTVEFUSU9OCisJcmVhbF95cnMgPSB5cnM7CisJbGVhcF95ciA9ICgoISgoeXJzICsgMTkwMCkgJSA0KSAmJiAoKHlycyArIDE5MDApICUgMTAwKSkgfHwKKwkJCSEoKHlycyArIDE5MDApICUgNDAwKSk7CisJeXJzID0gNzI7CisKKwkvKgorCSAqIFdlIHdhbnQgdG8ga2VlcCB0aGUgeWVhciBzZXQgdG8gNzMgdW50aWwgTWFyY2gKKwkgKiBmb3Igbm9uLWxlYXAgeWVhcnMsIHNvIHRoYXQgRmViLCAyOXRoIGlzIGhhbmRsZWQKKwkgKiBjb3JyZWN0bHkuCisJICovCisJaWYgKCFsZWFwX3lyICYmIG1vbiA8IDMpIHsKKwkJcmVhbF95cnMtLTsKKwkJeXJzID0gNzM7CisJfQorI2VuZGlmCisJLyogVGhlc2UgbGltaXRzIGFuZCBhZGp1c3RtZW50cyBhcmUgaW5kZXBlbmRlbnQgb2YKKwkgKiB3aGV0aGVyIHRoZSBjaGlwIGlzIGluIGJpbmFyeSBtb2RlIG9yIG5vdC4KKwkgKi8KKwlpZiAoeXJzID4gMTY5KSB7CisJCXNwaW5fdW5sb2NrX2lycSgmcnRjX2xvY2spOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoeXJzID49IDEwMCkKKwkJeXJzIC09IDEwMDsKKworCWlmICghKENNT1NfUkVBRChSVENfQ09OVFJPTCkgJiBSVENfRE1fQklOQVJZKQorCSAgICB8fCBSVENfQUxXQVlTX0JDRCkgeworCQlCSU5fVE9fQkNEKHNlYyk7CisJCUJJTl9UT19CQ0QobWluKTsKKwkJQklOX1RPX0JDRChocnMpOworCQlCSU5fVE9fQkNEKGRheSk7CisJCUJJTl9UT19CQ0QobW9uKTsKKwkJQklOX1RPX0JDRCh5cnMpOworCX0KKworCXNhdmVfY29udHJvbCA9IENNT1NfUkVBRChSVENfQ09OVFJPTCk7CisJQ01PU19XUklURSgoc2F2ZV9jb250cm9sfFJUQ19TRVQpLCBSVENfQ09OVFJPTCk7CisJc2F2ZV9mcmVxX3NlbGVjdCA9IENNT1NfUkVBRChSVENfRlJFUV9TRUxFQ1QpOworCUNNT1NfV1JJVEUoKHNhdmVfZnJlcV9zZWxlY3R8UlRDX0RJVl9SRVNFVDIpLCBSVENfRlJFUV9TRUxFQ1QpOworCisjaWZkZWYgQ09ORklHX01BQ0hfREVDU1RBVElPTgorCUNNT1NfV1JJVEUocmVhbF95cnMsIFJUQ19ERUNfWUVBUik7CisjZW5kaWYKKwlDTU9TX1dSSVRFKHlycywgUlRDX1lFQVIpOworCUNNT1NfV1JJVEUobW9uLCBSVENfTU9OVEgpOworCUNNT1NfV1JJVEUoZGF5LCBSVENfREFZX09GX01PTlRIKTsKKwlDTU9TX1dSSVRFKGhycywgUlRDX0hPVVJTKTsKKwlDTU9TX1dSSVRFKG1pbiwgUlRDX01JTlVURVMpOworCUNNT1NfV1JJVEUoc2VjLCBSVENfU0VDT05EUyk7CisKKwlDTU9TX1dSSVRFKHNhdmVfY29udHJvbCwgUlRDX0NPTlRST0wpOworCUNNT1NfV1JJVEUoc2F2ZV9mcmVxX3NlbGVjdCwgUlRDX0ZSRVFfU0VMRUNUKTsKKworCXNwaW5fdW5sb2NrX2lycSgmcnRjX2xvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldF9ydGNfc3Modm9pZCkKK3sKKwlzdHJ1Y3QgcnRjX3RpbWUgaDsKKworCWdldF9ydGNfdGltZSgmaCk7CisJcmV0dXJuIGgudG1fc2VjOworfQorCitzdGF0aWMgaW5saW5lIGludCBnZXRfcnRjX3BsbChzdHJ1Y3QgcnRjX3BsbF9pbmZvICpwbGwpCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CitzdGF0aWMgaW5saW5lIGludCBzZXRfcnRjX3BsbChzdHJ1Y3QgcnRjX3BsbF9pbmZvICpwbGwpCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYgLyogX19BU01fUlRDX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9zZWN0aW9ucy5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9zZWN0aW9ucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3NmFjMjkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3NlY3Rpb25zLmgKQEAgLTAsMCArMSwxMyBAQAorI2lmbmRlZiBfQVNNX0dFTkVSSUNfU0VDVElPTlNfSF8KKyNkZWZpbmUgX0FTTV9HRU5FUklDX1NFQ1RJT05TX0hfCisKKy8qIFJlZmVyZW5jZXMgdG8gc2VjdGlvbiBib3VuZGFyaWVzICovCisKK2V4dGVybiBjaGFyIF90ZXh0W10sIF9zdGV4dFtdLCBfZXRleHRbXTsKK2V4dGVybiBjaGFyIF9kYXRhW10sIF9zZGF0YVtdLCBfZWRhdGFbXTsKK2V4dGVybiBjaGFyIF9fYnNzX3N0YXJ0W10sIF9fYnNzX3N0b3BbXTsKK2V4dGVybiBjaGFyIF9faW5pdF9iZWdpbltdLCBfX2luaXRfZW5kW107CitleHRlcm4gY2hhciBfc2luaXR0ZXh0W10sIF9laW5pdHRleHRbXTsKK2V4dGVybiBjaGFyIF9lbmRbXTsKKworI2VuZGlmIC8qIF9BU01fR0VORVJJQ19TRUNUSU9OU19IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9zaWdpbmZvLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL3NpZ2luZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2FjOGU4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9zaWdpbmZvLmgKQEAgLTAsMCArMSwyODcgQEAKKyNpZm5kZWYgX0FTTV9HRU5FUklDX1NJR0lORk9fSAorI2RlZmluZSBfQVNNX0dFTkVSSUNfU0lHSU5GT19ICisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3R5cGVkZWYgdW5pb24gc2lndmFsIHsKKwlpbnQgc2l2YWxfaW50OworCXZvaWQgX191c2VyICpzaXZhbF9wdHI7Cit9IHNpZ3ZhbF90OworCisvKgorICogVGhpcyBpcyB0aGUgc2l6ZSAoaW5jbHVkaW5nIHBhZGRpbmcpIG9mIHRoZSBwYXJ0IG9mIHRoZQorICogc3RydWN0IHNpZ2luZm8gdGhhdCBpcyBiZWZvcmUgdGhlIHVuaW9uLgorICovCisjaWZuZGVmIF9fQVJDSF9TSV9QUkVBTUJMRV9TSVpFCisjZGVmaW5lIF9fQVJDSF9TSV9QUkVBTUJMRV9TSVpFCSgzICogc2l6ZW9mKGludCkpCisjZW5kaWYKKworI2RlZmluZSBTSV9NQVhfU0laRQkxMjgKKyNpZm5kZWYgU0lfUEFEX1NJWkUKKyNkZWZpbmUgU0lfUEFEX1NJWkUJKChTSV9NQVhfU0laRSAtIF9fQVJDSF9TSV9QUkVBTUJMRV9TSVpFKSAvIHNpemVvZihpbnQpKQorI2VuZGlmCisKKyNpZm5kZWYgX19BUkNIX1NJX1VJRF9UCisjZGVmaW5lIF9fQVJDSF9TSV9VSURfVAl1aWRfdAorI2VuZGlmCisKKy8qCisgKiBUaGUgZGVmYXVsdCAic2lfYmFuZCIgdHlwZSBpcyAibG9uZyIsIGFzIHNwZWNpZmllZCBieSBQT1NJWC4KKyAqIEhvd2V2ZXIsIHNvbWUgYXJjaGl0ZWN0dXJlcyB3YW50IHRvIG92ZXJyaWRlIHRoaXMgdG8gImludCIKKyAqIGZvciBoaXN0b3JpY2FsIGNvbXBhdGliaWxpdHkgcmVhc29ucywgc28gd2UgYWxsb3cgdGhhdC4KKyAqLworI2lmbmRlZiBfX0FSQ0hfU0lfQkFORF9UCisjZGVmaW5lIF9fQVJDSF9TSV9CQU5EX1QgbG9uZworI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9BUkNIX1NJR0lORk9fVAorCit0eXBlZGVmIHN0cnVjdCBzaWdpbmZvIHsKKwlpbnQgc2lfc2lnbm87CisJaW50IHNpX2Vycm5vOworCWludCBzaV9jb2RlOworCisJdW5pb24geworCQlpbnQgX3BhZFtTSV9QQURfU0laRV07CisKKwkJLyoga2lsbCgpICovCisJCXN0cnVjdCB7CisJCQlwaWRfdCBfcGlkOwkJLyogc2VuZGVyJ3MgcGlkICovCisJCQlfX0FSQ0hfU0lfVUlEX1QgX3VpZDsJLyogc2VuZGVyJ3MgdWlkICovCisJCX0gX2tpbGw7CisKKwkJLyogUE9TSVguMWIgdGltZXJzICovCisJCXN0cnVjdCB7CisJCQl0aW1lcl90IF90aWQ7CQkvKiB0aW1lciBpZCAqLworCQkJaW50IF9vdmVycnVuOwkJLyogb3ZlcnJ1biBjb3VudCAqLworCQkJY2hhciBfcGFkW3NpemVvZiggX19BUkNIX1NJX1VJRF9UKSAtIHNpemVvZihpbnQpXTsKKwkJCXNpZ3ZhbF90IF9zaWd2YWw7CS8qIHNhbWUgYXMgYmVsb3cgKi8KKwkJCWludCBfc3lzX3ByaXZhdGU7ICAgICAgIC8qIG5vdCB0byBiZSBwYXNzZWQgdG8gdXNlciAqLworCQl9IF90aW1lcjsKKworCQkvKiBQT1NJWC4xYiBzaWduYWxzICovCisJCXN0cnVjdCB7CisJCQlwaWRfdCBfcGlkOwkJLyogc2VuZGVyJ3MgcGlkICovCisJCQlfX0FSQ0hfU0lfVUlEX1QgX3VpZDsJLyogc2VuZGVyJ3MgdWlkICovCisJCQlzaWd2YWxfdCBfc2lndmFsOworCQl9IF9ydDsKKworCQkvKiBTSUdDSExEICovCisJCXN0cnVjdCB7CisJCQlwaWRfdCBfcGlkOwkJLyogd2hpY2ggY2hpbGQgKi8KKwkJCV9fQVJDSF9TSV9VSURfVCBfdWlkOwkvKiBzZW5kZXIncyB1aWQgKi8KKwkJCWludCBfc3RhdHVzOwkJLyogZXhpdCBjb2RlICovCisJCQljbG9ja190IF91dGltZTsKKwkJCWNsb2NrX3QgX3N0aW1lOworCQl9IF9zaWdjaGxkOworCisJCS8qIFNJR0lMTCwgU0lHRlBFLCBTSUdTRUdWLCBTSUdCVVMgKi8KKwkJc3RydWN0IHsKKwkJCXZvaWQgX191c2VyICpfYWRkcjsgLyogZmF1bHRpbmcgaW5zbi9tZW1vcnkgcmVmLiAqLworI2lmZGVmIF9fQVJDSF9TSV9UUkFQTk8KKwkJCWludCBfdHJhcG5vOwkvKiBUUkFQICMgd2hpY2ggY2F1c2VkIHRoZSBzaWduYWwgKi8KKyNlbmRpZgorCQl9IF9zaWdmYXVsdDsKKworCQkvKiBTSUdQT0xMICovCisJCXN0cnVjdCB7CisJCQlfX0FSQ0hfU0lfQkFORF9UIF9iYW5kOwkvKiBQT0xMX0lOLCBQT0xMX09VVCwgUE9MTF9NU0cgKi8KKwkJCWludCBfZmQ7CisJCX0gX3NpZ3BvbGw7CisJfSBfc2lmaWVsZHM7Cit9IHNpZ2luZm9fdDsKKworI2VuZGlmCisKKy8qCisgKiBIb3cgdGhlc2UgZmllbGRzIGFyZSB0byBiZSBhY2Nlc3NlZC4KKyAqLworI2RlZmluZSBzaV9waWQJCV9zaWZpZWxkcy5fa2lsbC5fcGlkCisjZGVmaW5lIHNpX3VpZAkJX3NpZmllbGRzLl9raWxsLl91aWQKKyNkZWZpbmUgc2lfdGlkCQlfc2lmaWVsZHMuX3RpbWVyLl90aWQKKyNkZWZpbmUgc2lfb3ZlcnJ1bglfc2lmaWVsZHMuX3RpbWVyLl9vdmVycnVuCisjZGVmaW5lIHNpX3N5c19wcml2YXRlICBfc2lmaWVsZHMuX3RpbWVyLl9zeXNfcHJpdmF0ZQorI2RlZmluZSBzaV9zdGF0dXMJX3NpZmllbGRzLl9zaWdjaGxkLl9zdGF0dXMKKyNkZWZpbmUgc2lfdXRpbWUJX3NpZmllbGRzLl9zaWdjaGxkLl91dGltZQorI2RlZmluZSBzaV9zdGltZQlfc2lmaWVsZHMuX3NpZ2NobGQuX3N0aW1lCisjZGVmaW5lIHNpX3ZhbHVlCV9zaWZpZWxkcy5fcnQuX3NpZ3ZhbAorI2RlZmluZSBzaV9pbnQJCV9zaWZpZWxkcy5fcnQuX3NpZ3ZhbC5zaXZhbF9pbnQKKyNkZWZpbmUgc2lfcHRyCQlfc2lmaWVsZHMuX3J0Ll9zaWd2YWwuc2l2YWxfcHRyCisjZGVmaW5lIHNpX2FkZHIJCV9zaWZpZWxkcy5fc2lnZmF1bHQuX2FkZHIKKyNpZmRlZiBfX0FSQ0hfU0lfVFJBUE5PCisjZGVmaW5lIHNpX3RyYXBubwlfc2lmaWVsZHMuX3NpZ2ZhdWx0Ll90cmFwbm8KKyNlbmRpZgorI2RlZmluZSBzaV9iYW5kCQlfc2lmaWVsZHMuX3NpZ3BvbGwuX2JhbmQKKyNkZWZpbmUgc2lfZmQJCV9zaWZpZWxkcy5fc2lncG9sbC5fZmQKKworI2lmZGVmIF9fS0VSTkVMX18KKyNkZWZpbmUgX19TSV9NQVNLCTB4ZmZmZjAwMDB1CisjZGVmaW5lIF9fU0lfS0lMTAkoMCA8PCAxNikKKyNkZWZpbmUgX19TSV9USU1FUgkoMSA8PCAxNikKKyNkZWZpbmUgX19TSV9QT0xMCSgyIDw8IDE2KQorI2RlZmluZSBfX1NJX0ZBVUxUCSgzIDw8IDE2KQorI2RlZmluZSBfX1NJX0NITEQJKDQgPDwgMTYpCisjZGVmaW5lIF9fU0lfUlQJCSg1IDw8IDE2KQorI2RlZmluZSBfX1NJX01FU0dRCSg2IDw8IDE2KQorI2RlZmluZSBfX1NJX0NPREUoVCxOKQkoKFQpIHwgKChOKSAmIDB4ZmZmZikpCisjZWxzZQorI2RlZmluZSBfX1NJX0tJTEwJMAorI2RlZmluZSBfX1NJX1RJTUVSCTAKKyNkZWZpbmUgX19TSV9QT0xMCTAKKyNkZWZpbmUgX19TSV9GQVVMVAkwCisjZGVmaW5lIF9fU0lfQ0hMRAkwCisjZGVmaW5lIF9fU0lfUlQJCTAKKyNkZWZpbmUgX19TSV9NRVNHUQkwCisjZGVmaW5lIF9fU0lfQ09ERShULE4pCShOKQorI2VuZGlmCisKKy8qCisgKiBzaV9jb2RlIHZhbHVlcworICogRGlnaXRhbCByZXNlcnZlcyBwb3NpdGl2ZSB2YWx1ZXMgZm9yIGtlcm5lbC1nZW5lcmF0ZWQgc2lnbmFscy4KKyAqLworI2RlZmluZSBTSV9VU0VSCQkwCQkvKiBzZW50IGJ5IGtpbGwsIHNpZ3NlbmQsIHJhaXNlICovCisjZGVmaW5lIFNJX0tFUk5FTAkweDgwCQkvKiBzZW50IGJ5IHRoZSBrZXJuZWwgZnJvbSBzb21ld2hlcmUgKi8KKyNkZWZpbmUgU0lfUVVFVUUJLTEJCS8qIHNlbnQgYnkgc2lncXVldWUgKi8KKyNkZWZpbmUgU0lfVElNRVIgX19TSV9DT0RFKF9fU0lfVElNRVIsLTIpIC8qIHNlbnQgYnkgdGltZXIgZXhwaXJhdGlvbiAqLworI2RlZmluZSBTSV9NRVNHUSBfX1NJX0NPREUoX19TSV9NRVNHUSwtMykgLyogc2VudCBieSByZWFsIHRpbWUgbWVzcSBzdGF0ZSBjaGFuZ2UgKi8KKyNkZWZpbmUgU0lfQVNZTkNJTwktNAkJLyogc2VudCBieSBBSU8gY29tcGxldGlvbiAqLworI2RlZmluZSBTSV9TSUdJTwktNQkJLyogc2VudCBieSBxdWV1ZWQgU0lHSU8gKi8KKyNkZWZpbmUgU0lfVEtJTEwJLTYJCS8qIHNlbnQgYnkgdGtpbGwgc3lzdGVtIGNhbGwgKi8KKyNkZWZpbmUgU0lfREVUSFJFQUQJLTcJCS8qIHNlbnQgYnkgZXhlY3ZlKCkga2lsbGluZyBzdWJzaWRpYXJ5IHRocmVhZHMgKi8KKworI2RlZmluZSBTSV9GUk9NVVNFUihzaXB0cikJKChzaXB0ciktPnNpX2NvZGUgPD0gMCkKKyNkZWZpbmUgU0lfRlJPTUtFUk5FTChzaXB0cikJKChzaXB0ciktPnNpX2NvZGUgPiAwKQorCisvKgorICogU0lHSUxMIHNpX2NvZGVzCisgKi8KKyNkZWZpbmUgSUxMX0lMTE9QQwkoX19TSV9GQVVMVHwxKQkvKiBpbGxlZ2FsIG9wY29kZSAqLworI2RlZmluZSBJTExfSUxMT1BOCShfX1NJX0ZBVUxUfDIpCS8qIGlsbGVnYWwgb3BlcmFuZCAqLworI2RlZmluZSBJTExfSUxMQURSCShfX1NJX0ZBVUxUfDMpCS8qIGlsbGVnYWwgYWRkcmVzc2luZyBtb2RlICovCisjZGVmaW5lIElMTF9JTExUUlAJKF9fU0lfRkFVTFR8NCkJLyogaWxsZWdhbCB0cmFwICovCisjZGVmaW5lIElMTF9QUlZPUEMJKF9fU0lfRkFVTFR8NSkJLyogcHJpdmlsZWdlZCBvcGNvZGUgKi8KKyNkZWZpbmUgSUxMX1BSVlJFRwkoX19TSV9GQVVMVHw2KQkvKiBwcml2aWxlZ2VkIHJlZ2lzdGVyICovCisjZGVmaW5lIElMTF9DT1BST0MJKF9fU0lfRkFVTFR8NykJLyogY29wcm9jZXNzb3IgZXJyb3IgKi8KKyNkZWZpbmUgSUxMX0JBRFNUSwkoX19TSV9GQVVMVHw4KQkvKiBpbnRlcm5hbCBzdGFjayBlcnJvciAqLworI2RlZmluZSBOU0lHSUxMCQk4CisKKy8qCisgKiBTSUdGUEUgc2lfY29kZXMKKyAqLworI2RlZmluZSBGUEVfSU5URElWCShfX1NJX0ZBVUxUfDEpCS8qIGludGVnZXIgZGl2aWRlIGJ5IHplcm8gKi8KKyNkZWZpbmUgRlBFX0lOVE9WRgkoX19TSV9GQVVMVHwyKQkvKiBpbnRlZ2VyIG92ZXJmbG93ICovCisjZGVmaW5lIEZQRV9GTFRESVYJKF9fU0lfRkFVTFR8MykJLyogZmxvYXRpbmcgcG9pbnQgZGl2aWRlIGJ5IHplcm8gKi8KKyNkZWZpbmUgRlBFX0ZMVE9WRgkoX19TSV9GQVVMVHw0KQkvKiBmbG9hdGluZyBwb2ludCBvdmVyZmxvdyAqLworI2RlZmluZSBGUEVfRkxUVU5ECShfX1NJX0ZBVUxUfDUpCS8qIGZsb2F0aW5nIHBvaW50IHVuZGVyZmxvdyAqLworI2RlZmluZSBGUEVfRkxUUkVTCShfX1NJX0ZBVUxUfDYpCS8qIGZsb2F0aW5nIHBvaW50IGluZXhhY3QgcmVzdWx0ICovCisjZGVmaW5lIEZQRV9GTFRJTlYJKF9fU0lfRkFVTFR8NykJLyogZmxvYXRpbmcgcG9pbnQgaW52YWxpZCBvcGVyYXRpb24gKi8KKyNkZWZpbmUgRlBFX0ZMVFNVQgkoX19TSV9GQVVMVHw4KQkvKiBzdWJzY3JpcHQgb3V0IG9mIHJhbmdlICovCisjZGVmaW5lIE5TSUdGUEUJCTgKKworLyoKKyAqIFNJR1NFR1Ygc2lfY29kZXMKKyAqLworI2RlZmluZSBTRUdWX01BUEVSUgkoX19TSV9GQVVMVHwxKQkvKiBhZGRyZXNzIG5vdCBtYXBwZWQgdG8gb2JqZWN0ICovCisjZGVmaW5lIFNFR1ZfQUNDRVJSCShfX1NJX0ZBVUxUfDIpCS8qIGludmFsaWQgcGVybWlzc2lvbnMgZm9yIG1hcHBlZCBvYmplY3QgKi8KKyNkZWZpbmUgTlNJR1NFR1YJMgorCisvKgorICogU0lHQlVTIHNpX2NvZGVzCisgKi8KKyNkZWZpbmUgQlVTX0FEUkFMTgkoX19TSV9GQVVMVHwxKQkvKiBpbnZhbGlkIGFkZHJlc3MgYWxpZ25tZW50ICovCisjZGVmaW5lIEJVU19BRFJFUlIJKF9fU0lfRkFVTFR8MikJLyogbm9uLWV4aXN0YW50IHBoeXNpY2FsIGFkZHJlc3MgKi8KKyNkZWZpbmUgQlVTX09CSkVSUgkoX19TSV9GQVVMVHwzKQkvKiBvYmplY3Qgc3BlY2lmaWMgaGFyZHdhcmUgZXJyb3IgKi8KKyNkZWZpbmUgTlNJR0JVUwkJMworCisvKgorICogU0lHVFJBUCBzaV9jb2RlcworICovCisjZGVmaW5lIFRSQVBfQlJLUFQJKF9fU0lfRkFVTFR8MSkJLyogcHJvY2VzcyBicmVha3BvaW50ICovCisjZGVmaW5lIFRSQVBfVFJBQ0UJKF9fU0lfRkFVTFR8MikJLyogcHJvY2VzcyB0cmFjZSB0cmFwICovCisjZGVmaW5lIE5TSUdUUkFQCTIKKworLyoKKyAqIFNJR0NITEQgc2lfY29kZXMKKyAqLworI2RlZmluZSBDTERfRVhJVEVECShfX1NJX0NITER8MSkJLyogY2hpbGQgaGFzIGV4aXRlZCAqLworI2RlZmluZSBDTERfS0lMTEVECShfX1NJX0NITER8MikJLyogY2hpbGQgd2FzIGtpbGxlZCAqLworI2RlZmluZSBDTERfRFVNUEVECShfX1NJX0NITER8MykJLyogY2hpbGQgdGVybWluYXRlZCBhYm5vcm1hbGx5ICovCisjZGVmaW5lIENMRF9UUkFQUEVECShfX1NJX0NITER8NCkJLyogdHJhY2VkIGNoaWxkIGhhcyB0cmFwcGVkICovCisjZGVmaW5lIENMRF9TVE9QUEVECShfX1NJX0NITER8NSkJLyogY2hpbGQgaGFzIHN0b3BwZWQgKi8KKyNkZWZpbmUgQ0xEX0NPTlRJTlVFRAkoX19TSV9DSExEfDYpCS8qIHN0b3BwZWQgY2hpbGQgaGFzIGNvbnRpbnVlZCAqLworI2RlZmluZSBOU0lHQ0hMRAk2CisKKy8qCisgKiBTSUdQT0xMIHNpX2NvZGVzCisgKi8KKyNkZWZpbmUgUE9MTF9JTgkJKF9fU0lfUE9MTHwxKQkvKiBkYXRhIGlucHV0IGF2YWlsYWJsZSAqLworI2RlZmluZSBQT0xMX09VVAkoX19TSV9QT0xMfDIpCS8qIG91dHB1dCBidWZmZXJzIGF2YWlsYWJsZSAqLworI2RlZmluZSBQT0xMX01TRwkoX19TSV9QT0xMfDMpCS8qIGlucHV0IG1lc3NhZ2UgYXZhaWxhYmxlICovCisjZGVmaW5lIFBPTExfRVJSCShfX1NJX1BPTEx8NCkJLyogaS9vIGVycm9yICovCisjZGVmaW5lIFBPTExfUFJJCShfX1NJX1BPTEx8NSkJLyogaGlnaCBwcmlvcml0eSBpbnB1dCBhdmFpbGFibGUgKi8KKyNkZWZpbmUgUE9MTF9IVVAJKF9fU0lfUE9MTHw2KQkvKiBkZXZpY2UgZGlzY29ubmVjdGVkICovCisjZGVmaW5lIE5TSUdQT0xMCTYKKworLyoKKyAqIHNpZ2V2ZW50IGRlZmluaXRpb25zCisgKiAKKyAqIEl0IHNlZW1zIGxpa2VseSB0aGF0IFNJR0VWX1RIUkVBRCB3aWxsIGhhdmUgdG8gYmUgaGFuZGxlZCBmcm9tIAorICogdXNlcnNwYWNlLCBsaWJwdGhyZWFkIHRyYW5zbXV0aW5nIGl0IHRvIFNJR0VWX1NJR05BTCwgd2hpY2ggdGhlCisgKiB0aHJlYWQgbWFuYWdlciB0aGVuIGNhdGNoZXMgYW5kIGRvZXMgdGhlIGFwcHJvcHJpYXRlIG5vbnNlbnNlLgorICogSG93ZXZlciwgZXZlcnl0aGluZyBpcyB3cml0dGVuIG91dCBoZXJlIHNvIGFzIHRvIG5vdCBnZXQgbG9zdC4KKyAqLworI2RlZmluZSBTSUdFVl9TSUdOQUwJMAkvKiBub3RpZnkgdmlhIHNpZ25hbCAqLworI2RlZmluZSBTSUdFVl9OT05FCTEJLyogb3RoZXIgbm90aWZpY2F0aW9uOiBtZWFuaW5nbGVzcyAqLworI2RlZmluZSBTSUdFVl9USFJFQUQJMgkvKiBkZWxpdmVyIHZpYSB0aHJlYWQgY3JlYXRpb24gKi8KKyNkZWZpbmUgU0lHRVZfVEhSRUFEX0lEIDQJLyogZGVsaXZlciB0byB0aHJlYWQgKi8KKworI2RlZmluZSBTSUdFVl9NQVhfU0laRQk2NAorI2lmbmRlZiBTSUdFVl9QQURfU0laRQorI2RlZmluZSBTSUdFVl9QQURfU0laRQkoKFNJR0VWX01BWF9TSVpFL3NpemVvZihpbnQpKSAtIDMpCisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3Qgc2lnZXZlbnQgeworCXNpZ3ZhbF90IHNpZ2V2X3ZhbHVlOworCWludCBzaWdldl9zaWdubzsKKwlpbnQgc2lnZXZfbm90aWZ5OworCXVuaW9uIHsKKwkJaW50IF9wYWRbU0lHRVZfUEFEX1NJWkVdOworCQkgaW50IF90aWQ7CisKKwkJc3RydWN0IHsKKwkJCXZvaWQgKCpfZnVuY3Rpb24pKHNpZ3ZhbF90KTsKKwkJCXZvaWQgKl9hdHRyaWJ1dGU7CS8qIHJlYWxseSBwdGhyZWFkX2F0dHJfdCAqLworCQl9IF9zaWdldl90aHJlYWQ7CisJfSBfc2lnZXZfdW47Cit9IHNpZ2V2ZW50X3Q7CisKKyNkZWZpbmUgc2lnZXZfbm90aWZ5X2Z1bmN0aW9uCV9zaWdldl91bi5fc2lnZXZfdGhyZWFkLl9mdW5jdGlvbgorI2RlZmluZSBzaWdldl9ub3RpZnlfYXR0cmlidXRlcwlfc2lnZXZfdW4uX3NpZ2V2X3RocmVhZC5fYXR0cmlidXRlCisjZGVmaW5lIHNpZ2V2X25vdGlmeV90aHJlYWRfaWQJIF9zaWdldl91bi5fdGlkCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKK3N0cnVjdCBzaWdpbmZvOwordm9pZCBkb19zY2hlZHVsZV9uZXh0X3RpbWVyKHN0cnVjdCBzaWdpbmZvICppbmZvKTsKKworI2lmbmRlZiBIQVZFX0FSQ0hfQ09QWV9TSUdJTkZPCisKKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKworc3RhdGljIGlubGluZSB2b2lkIGNvcHlfc2lnaW5mbyhzdHJ1Y3Qgc2lnaW5mbyAqdG8sIHN0cnVjdCBzaWdpbmZvICpmcm9tKQoreworCWlmIChmcm9tLT5zaV9jb2RlIDwgMCkKKwkJbWVtY3B5KHRvLCBmcm9tLCBzaXplb2YoKnRvKSk7CisJZWxzZQorCQkvKiBfc2lnY2hsZCBpcyBjdXJyZW50bHkgdGhlIGxhcmdlc3Qga25vdyB1bmlvbiBtZW1iZXIgKi8KKwkJbWVtY3B5KHRvLCBmcm9tLCBfX0FSQ0hfU0lfUFJFQU1CTEVfU0laRSArIHNpemVvZihmcm9tLT5fc2lmaWVsZHMuX3NpZ2NobGQpKTsKK30KKworI2VuZGlmCisKK2V4dGVybiBpbnQgY29weV9zaWdpbmZvX3RvX3VzZXIoc3RydWN0IHNpZ2luZm8gX191c2VyICp0bywgc3RydWN0IHNpZ2luZm8gKmZyb20pOworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvc3RhdGZzLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL3N0YXRmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkMDEwNDMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3N0YXRmcy5oCkBAIC0wLDAgKzEsNTEgQEAKKyNpZm5kZWYgX0dFTkVSSUNfU1RBVEZTX0gKKyNkZWZpbmUgX0dFTkVSSUNfU1RBVEZTX0gKKworI2lmbmRlZiBfX0tFUk5FTF9TVFJJQ1RfTkFNRVMKKyMgaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KK3R5cGVkZWYgX19rZXJuZWxfZnNpZF90CWZzaWRfdDsKKyNlbmRpZgorCitzdHJ1Y3Qgc3RhdGZzIHsKKwlfX3UzMiBmX3R5cGU7CisJX191MzIgZl9ic2l6ZTsKKwlfX3UzMiBmX2Jsb2NrczsKKwlfX3UzMiBmX2JmcmVlOworCV9fdTMyIGZfYmF2YWlsOworCV9fdTMyIGZfZmlsZXM7CisJX191MzIgZl9mZnJlZTsKKwlfX2tlcm5lbF9mc2lkX3QgZl9mc2lkOworCV9fdTMyIGZfbmFtZWxlbjsKKwlfX3UzMiBmX2Zyc2l6ZTsKKwlfX3UzMiBmX3NwYXJlWzVdOworfTsKKworc3RydWN0IHN0YXRmczY0IHsKKwlfX3UzMiBmX3R5cGU7CisJX191MzIgZl9ic2l6ZTsKKwlfX3U2NCBmX2Jsb2NrczsKKwlfX3U2NCBmX2JmcmVlOworCV9fdTY0IGZfYmF2YWlsOworCV9fdTY0IGZfZmlsZXM7CisJX191NjQgZl9mZnJlZTsKKwlfX2tlcm5lbF9mc2lkX3QgZl9mc2lkOworCV9fdTMyIGZfbmFtZWxlbjsKKwlfX3UzMiBmX2Zyc2l6ZTsKKwlfX3UzMiBmX3NwYXJlWzVdOworfTsKKworc3RydWN0IGNvbXBhdF9zdGF0ZnM2NCB7CisJX191MzIgZl90eXBlOworCV9fdTMyIGZfYnNpemU7CisJX191NjQgZl9ibG9ja3M7CisJX191NjQgZl9iZnJlZTsKKwlfX3U2NCBmX2JhdmFpbDsKKwlfX3U2NCBmX2ZpbGVzOworCV9fdTY0IGZfZmZyZWU7CisJX19rZXJuZWxfZnNpZF90IGZfZnNpZDsKKwlfX3UzMiBmX25hbWVsZW47CisJX191MzIgZl9mcnNpemU7CisJX191MzIgZl9zcGFyZVs1XTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy90ZXJtaW9zLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL3Rlcm1pb3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTU4Y2EzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy90ZXJtaW9zLmgKQEAgLTAsMCArMSw2OSBAQAorLyogdGVybWlvcy5oOiBnZW5lcmljIHRlcm1pb3MvdGVybWlvIHVzZXIgY29weWluZy90cmFuc2xhdGlvbgorICovCisKKyNpZm5kZWYgX0FTTV9HRU5FUklDX1RFUk1JT1NfSAorI2RlZmluZSBfQVNNX0dFTkVSSUNfVEVSTUlPU19ICisKKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorCisjaWZuZGVmIF9fQVJDSF9URVJNSU9fR0VUUFVUCisKKy8qCisgKiBUcmFuc2xhdGUgYSAidGVybWlvIiBzdHJ1Y3R1cmUgaW50byBhICJ0ZXJtaW9zIi4gVWdoLgorICovCitzdGF0aWMgaW5saW5lIGludCB1c2VyX3Rlcm1pb190b19rZXJuZWxfdGVybWlvcyhzdHJ1Y3QgdGVybWlvcyAqdGVybWlvcywKKwkJCQkJCXN0cnVjdCB0ZXJtaW8gX191c2VyICp0ZXJtaW8pCit7CisJdW5zaWduZWQgc2hvcnQgdG1wOworCisJaWYgKGdldF91c2VyKHRtcCwgJnRlcm1pby0+Y19pZmxhZykgPCAwKQorCQlnb3RvIGZhdWx0OworCXRlcm1pb3MtPmNfaWZsYWcgPSAoMHhmZmZmMDAwMCAmIHRlcm1pb3MtPmNfaWZsYWcpIHwgdG1wOworCisJaWYgKGdldF91c2VyKHRtcCwgJnRlcm1pby0+Y19vZmxhZykgPCAwKQorCQlnb3RvIGZhdWx0OworCXRlcm1pb3MtPmNfb2ZsYWcgPSAoMHhmZmZmMDAwMCAmIHRlcm1pb3MtPmNfb2ZsYWcpIHwgdG1wOworCisJaWYgKGdldF91c2VyKHRtcCwgJnRlcm1pby0+Y19jZmxhZykgPCAwKQorCQlnb3RvIGZhdWx0OworCXRlcm1pb3MtPmNfY2ZsYWcgPSAoMHhmZmZmMDAwMCAmIHRlcm1pb3MtPmNfY2ZsYWcpIHwgdG1wOworCisJaWYgKGdldF91c2VyKHRtcCwgJnRlcm1pby0+Y19sZmxhZykgPCAwKQorCQlnb3RvIGZhdWx0OworCXRlcm1pb3MtPmNfbGZsYWcgPSAoMHhmZmZmMDAwMCAmIHRlcm1pb3MtPmNfbGZsYWcpIHwgdG1wOworCisJaWYgKGdldF91c2VyKHRlcm1pb3MtPmNfbGluZSwgJnRlcm1pby0+Y19saW5lKSA8IDApCisJCWdvdG8gZmF1bHQ7CisKKwlpZiAoY29weV9mcm9tX3VzZXIodGVybWlvcy0+Y19jYywgdGVybWlvLT5jX2NjLCBOQ0MpICE9IDApCisJCWdvdG8gZmF1bHQ7CisKKwlyZXR1cm4gMDsKKworIGZhdWx0OgorCXJldHVybiAtRUZBVUxUOworfQorCisvKgorICogVHJhbnNsYXRlIGEgInRlcm1pb3MiIHN0cnVjdHVyZSBpbnRvIGEgInRlcm1pbyIuIFVnaC4KKyAqLworc3RhdGljIGlubGluZSBpbnQga2VybmVsX3Rlcm1pb3NfdG9fdXNlcl90ZXJtaW8oc3RydWN0IHRlcm1pbyBfX3VzZXIgKnRlcm1pbywKKwkJCQkJCXN0cnVjdCB0ZXJtaW9zICp0ZXJtaW9zKQoreworCWlmIChwdXRfdXNlcih0ZXJtaW9zLT5jX2lmbGFnLCAmdGVybWlvLT5jX2lmbGFnKSA8IDAgfHwKKwkgICAgcHV0X3VzZXIodGVybWlvcy0+Y19vZmxhZywgJnRlcm1pby0+Y19vZmxhZykgPCAwIHx8CisJICAgIHB1dF91c2VyKHRlcm1pb3MtPmNfY2ZsYWcsICZ0ZXJtaW8tPmNfY2ZsYWcpIDwgMCB8fAorCSAgICBwdXRfdXNlcih0ZXJtaW9zLT5jX2xmbGFnLCAmdGVybWlvLT5jX2xmbGFnKSA8IDAgfHwKKwkgICAgcHV0X3VzZXIodGVybWlvcy0+Y19saW5lLCAgJnRlcm1pby0+Y19saW5lKSA8IDAgfHwKKwkgICAgY29weV90b191c2VyKHRlcm1pby0+Y19jYywgdGVybWlvcy0+Y19jYywgTkNDKSAhPSAwKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiAwOworfQorCisjZGVmaW5lIHVzZXJfdGVybWlvc190b19rZXJuZWxfdGVybWlvcyhrLCB1KSBjb3B5X2Zyb21fdXNlcihrLCB1LCBzaXplb2Yoc3RydWN0IHRlcm1pb3MpKQorI2RlZmluZSBrZXJuZWxfdGVybWlvc190b191c2VyX3Rlcm1pb3ModSwgaykgY29weV90b191c2VyKHUsIGssIHNpemVvZihzdHJ1Y3QgdGVybWlvcykpCisKKyNlbmRpZgkvKiBfX0FSQ0hfVEVSTUlPX0dFVFBVVCAqLworCisjZW5kaWYgLyogX0FTTV9HRU5FUklDX1RFUk1JT1NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy90bGIuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdGxiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFmZjQwMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdGxiLmgKQEAgLTAsMCArMSwxNjAgQEAKKy8qIGFzbS1nZW5lcmljL3RsYi5oCisgKgorICoJR2VuZXJpYyBUTEIgc2hvb3Rkb3duIGNvZGUKKyAqCisgKiBDb3B5cmlnaHQgMjAwMSBSZWQgSGF0LCBJbmMuCisgKiBCYXNlZCBvbiBjb2RlIGZyb20gbW0vbWVtb3J5LmMgQ29weXJpZ2h0IExpbnVzIFRvcnZhbGRzIGFuZCBvdGhlcnMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2lmbmRlZiBfQVNNX0dFTkVSSUNfX1RMQl9ICisjZGVmaW5lIF9BU01fR0VORVJJQ19fVExCX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KKyNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgorI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgorCisvKgorICogRm9yIFVQIHdlIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgVExCIGZsdXNoCisgKiBhbmQgcGFnZSBmcmVlIG9yZGVyIHNvIG11Y2guLgorICovCisjaWZkZWYgQ09ORklHX1NNUAorICAjZGVmaW5lIEZSRUVfUFRFX05SCTUwNgorICAjZGVmaW5lIHRsYl9mYXN0X21vZGUodGxiKSAoKHRsYiktPm5yID09IH4wVSkKKyNlbHNlCisgICNkZWZpbmUgRlJFRV9QVEVfTlIJMQorICAjZGVmaW5lIHRsYl9mYXN0X21vZGUodGxiKSAxCisjZW5kaWYKKworLyogc3RydWN0IG1tdV9nYXRoZXIgaXMgYW4gb3BhcXVlIHR5cGUgdXNlZCBieSB0aGUgbW0gY29kZSBmb3IgcGFzc2luZyBhcm91bmQKKyAqIGFueSBkYXRhIG5lZWRlZCBieSBhcmNoIHNwZWNpZmljIGNvZGUgZm9yIHRsYl9yZW1vdmVfcGFnZS4gIFRoaXMgc3RydWN0dXJlCisgKiBjYW4gYmUgcGVyLUNQVSBvciBwZXItTU0gYXMgdGhlIHBhZ2UgdGFibGUgbG9jayBpcyBoZWxkIGZvciB0aGUgZHVyYXRpb24gb2YKKyAqIFRMQiBzaG9vdGRvd24uCisgKi8KK3N0cnVjdCBtbXVfZ2F0aGVyIHsKKwlzdHJ1Y3QgbW1fc3RydWN0CSptbTsKKwl1bnNpZ25lZCBpbnQJCW5yOwkvKiBzZXQgdG8gfjBVIG1lYW5zIGZhc3QgbW9kZSAqLworCXVuc2lnbmVkIGludAkJbmVlZF9mbHVzaDsvKiBSZWFsbHkgdW5tYXBwZWQgc29tZSBwdGVzPyAqLworCXVuc2lnbmVkIGludAkJZnVsbG1tOyAvKiBub24temVybyBtZWFucyBmdWxsIG1tIGZsdXNoICovCisJdW5zaWduZWQgbG9uZwkJZnJlZWQ7CisJc3RydWN0IHBhZ2UgKgkJcGFnZXNbRlJFRV9QVEVfTlJdOworfTsKKworLyogVXNlcnMgb2YgdGhlIGdlbmVyaWMgVExCIHNob290ZG93biBjb2RlIG11c3QgZGVjbGFyZSB0aGlzIHN0b3JhZ2Ugc3BhY2UuICovCitERUNMQVJFX1BFUl9DUFUoc3RydWN0IG1tdV9nYXRoZXIsIG1tdV9nYXRoZXJzKTsKKworLyogdGxiX2dhdGhlcl9tbXUKKyAqCVJldHVybiBhIHBvaW50ZXIgdG8gYW4gaW5pdGlhbGl6ZWQgc3RydWN0IG1tdV9nYXRoZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1tdV9nYXRoZXIgKgordGxiX2dhdGhlcl9tbXUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGludCBmdWxsX21tX2ZsdXNoKQoreworCXN0cnVjdCBtbXVfZ2F0aGVyICp0bGIgPSAmcGVyX2NwdShtbXVfZ2F0aGVycywgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKworCXRsYi0+bW0gPSBtbTsKKworCS8qIFVzZSBmYXN0IG1vZGUgaWYgb25seSBvbmUgQ1BVIGlzIG9ubGluZSAqLworCXRsYi0+bnIgPSBudW1fb25saW5lX2NwdXMoKSA+IDEgPyAwVSA6IH4wVTsKKworCXRsYi0+ZnVsbG1tID0gZnVsbF9tbV9mbHVzaDsKKwl0bGItPmZyZWVkID0gMDsKKworCXJldHVybiB0bGI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAordGxiX2ZsdXNoX21tdShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwlpZiAoIXRsYi0+bmVlZF9mbHVzaCkKKwkJcmV0dXJuOworCXRsYi0+bmVlZF9mbHVzaCA9IDA7CisJdGxiX2ZsdXNoKHRsYik7CisJaWYgKCF0bGJfZmFzdF9tb2RlKHRsYikpIHsKKwkJZnJlZV9wYWdlc19hbmRfc3dhcF9jYWNoZSh0bGItPnBhZ2VzLCB0bGItPm5yKTsKKwkJdGxiLT5uciA9IDA7CisJfQorfQorCisvKiB0bGJfZmluaXNoX21tdQorICoJQ2FsbGVkIGF0IHRoZSBlbmQgb2YgdGhlIHNob290ZG93biBvcGVyYXRpb24gdG8gZnJlZSB1cCBhbnkgcmVzb3VyY2VzCisgKgl0aGF0IHdlcmUgcmVxdWlyZWQuICBUaGUgcGFnZSB0YWJsZSBsb2NrIGlzIHN0aWxsIGhlbGQgYXQgdGhpcyBwb2ludC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCit0bGJfZmluaXNoX21tdShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwlpbnQgZnJlZWQgPSB0bGItPmZyZWVkOworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdGxiLT5tbTsKKwlpbnQgcnNzID0gZ2V0X21tX2NvdW50ZXIobW0sIHJzcyk7CisKKwlpZiAocnNzIDwgZnJlZWQpCisJCWZyZWVkID0gcnNzOworCWFkZF9tbV9jb3VudGVyKG1tLCByc3MsIC1mcmVlZCk7CisJdGxiX2ZsdXNoX21tdSh0bGIsIHN0YXJ0LCBlbmQpOworCisJLyoga2VlcCB0aGUgcGFnZSB0YWJsZSBjYWNoZSB3aXRoaW4gYm91bmRzICovCisJY2hlY2tfcGd0X2NhY2hlKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50Cit0bGJfaXNfZnVsbF9tbShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiKQoreworCXJldHVybiB0bGItPmZ1bGxtbTsKK30KKworLyogdGxiX3JlbW92ZV9wYWdlCisgKglNdXN0IHBlcmZvcm0gdGhlIGVxdWl2YWxlbnQgdG8gX19mcmVlX3B0ZShwdGVfZ2V0X2FuZF9jbGVhcihwdGVwKSksIHdoaWxlCisgKgloYW5kbGluZyB0aGUgYWRkaXRpb25hbCByYWNlcyBpbiBTTVAgY2F1c2VkIGJ5IG90aGVyIENQVXMgY2FjaGluZyB2YWxpZAorICoJbWFwcGluZ3MgaW4gdGhlaXIgVExCcy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHRsYl9yZW1vdmVfcGFnZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwl0bGItPm5lZWRfZmx1c2ggPSAxOworCWlmICh0bGJfZmFzdF9tb2RlKHRsYikpIHsKKwkJZnJlZV9wYWdlX2FuZF9zd2FwX2NhY2hlKHBhZ2UpOworCQlyZXR1cm47CisJfQorCXRsYi0+cGFnZXNbdGxiLT5ucisrXSA9IHBhZ2U7CisJaWYgKHRsYi0+bnIgPj0gRlJFRV9QVEVfTlIpCisJCXRsYl9mbHVzaF9tbXUodGxiLCAwLCAwKTsKK30KKworLyoqCisgKiB0bGJfcmVtb3ZlX3RsYl9lbnRyeSAtIHJlbWVtYmVyIGEgcHRlIHVubWFwcGluZyBmb3IgbGF0ZXIgdGxiIGludmFsaWRhdGlvbi4KKyAqCisgKiBSZWNvcmQgdGhlIGZhY3QgdGhhdCBwdGUncyB3ZXJlIHJlYWxseSB1bWFwcGVkIGluIC0+bmVlZF9mbHVzaCwgc28gd2UgY2FuCisgKiBsYXRlciBvcHRpbWlzZSBhd2F5IHRoZSB0bGIgaW52YWxpZGF0ZS4gICBUaGlzIGhlbHBzIHdoZW4gdXNlcnNwYWNlIGlzCisgKiB1bm1hcHBpbmcgYWxyZWFkeS11bm1hcHBlZCBwYWdlcywgd2hpY2ggaGFwcGVucyBxdWl0ZSBhIGxvdC4KKyAqLworI2RlZmluZSB0bGJfcmVtb3ZlX3RsYl9lbnRyeSh0bGIsIHB0ZXAsIGFkZHJlc3MpCQlcCisJZG8gewkJCQkJCQlcCisJCXRsYi0+bmVlZF9mbHVzaCA9IDE7CQkJCVwKKwkJX190bGJfcmVtb3ZlX3RsYl9lbnRyeSh0bGIsIHB0ZXAsIGFkZHJlc3MpOwlcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBwdGVfZnJlZV90bGIodGxiLCBwdGVwKQkJCQkJXAorCWRvIHsJCQkJCQkJXAorCQl0bGItPm5lZWRfZmx1c2ggPSAxOwkJCQlcCisJCV9fcHRlX2ZyZWVfdGxiKHRsYiwgcHRlcCk7CQkJXAorCX0gd2hpbGUgKDApCisKKyNpZm5kZWYgX19BUkNIX0hBU180TEVWRUxfSEFDSworI2RlZmluZSBwdWRfZnJlZV90bGIodGxiLCBwdWRwKQkJCQkJXAorCWRvIHsJCQkJCQkJXAorCQl0bGItPm5lZWRfZmx1c2ggPSAxOwkJCQlcCisJCV9fcHVkX2ZyZWVfdGxiKHRsYiwgcHVkcCk7CQkJXAorCX0gd2hpbGUgKDApCisjZW5kaWYKKworI2RlZmluZSBwbWRfZnJlZV90bGIodGxiLCBwbWRwKQkJCQkJXAorCWRvIHsJCQkJCQkJXAorCQl0bGItPm5lZWRfZmx1c2ggPSAxOwkJCQlcCisJCV9fcG1kX2ZyZWVfdGxiKHRsYiwgcG1kcCk7CQkJXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgdGxiX21pZ3JhdGVfZmluaXNoKG1tKSBkbyB7fSB3aGlsZSAoMCkKKworI2VuZGlmIC8qIF9BU01fR0VORVJJQ19fVExCX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvdG9wb2xvZ3kuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdG9wb2xvZ3kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzk2ZThiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy90b3BvbG9neS5oCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1nZW5lcmljL3RvcG9sb2d5LmgKKyAqCisgKiBXcml0dGVuIGJ5OiBNYXR0aGV3IERvYnNvbiwgSUJNIENvcnBvcmF0aW9uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAyLCBJQk0gQ29ycC4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUKKyAqIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKiBTZW5kIGZlZWRiYWNrIHRvIDxjb2xwYXRjaEB1cy5pYm0uY29tPgorICovCisjaWZuZGVmIF9BU01fR0VORVJJQ19UT1BPTE9HWV9ICisjZGVmaW5lIF9BU01fR0VORVJJQ19UT1BPTE9HWV9ICisKKy8qIE90aGVyIGFyY2hpdGVjdHVyZXMgd2lzaGluZyB0byB1c2UgdGhpcyBzaW1wbGUgdG9wb2xvZ3kgQVBJIHNob3VsZCBmaWxsCisgICBpbiB0aGUgYmVsb3cgZnVuY3Rpb25zIGFzIGFwcHJvcHJpYXRlIGluIHRoZWlyIG93biA8YXNtL3RvcG9sb2d5Lmg+IGZpbGUuICovCisjaWZuZGVmIGNwdV90b19ub2RlCisjZGVmaW5lIGNwdV90b19ub2RlKGNwdSkJKDApCisjZW5kaWYKKyNpZm5kZWYgcGFyZW50X25vZGUKKyNkZWZpbmUgcGFyZW50X25vZGUobm9kZSkJKDApCisjZW5kaWYKKyNpZm5kZWYgbm9kZV90b19jcHVtYXNrCisjZGVmaW5lIG5vZGVfdG9fY3B1bWFzayhub2RlKQkoY3B1X29ubGluZV9tYXApCisjZW5kaWYKKyNpZm5kZWYgbm9kZV90b19maXJzdF9jcHUKKyNkZWZpbmUgbm9kZV90b19maXJzdF9jcHUobm9kZSkJKDApCisjZW5kaWYKKyNpZm5kZWYgcGNpYnVzX3RvX2NwdW1hc2sKKyNkZWZpbmUgcGNpYnVzX3RvX2NwdW1hc2soYnVzKQkoY3B1X29ubGluZV9tYXApCisjZW5kaWYKKworI2VuZGlmIC8qIF9BU01fR0VORVJJQ19UT1BPTE9HWV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL3VhY2Nlc3MuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdWFjY2Vzcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0OWNiM2EKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3VhY2Nlc3MuaApAQCAtMCwwICsxLDI2IEBACisjaWZuZGVmIF9BU01fR0VORVJJQ19VQUNDRVNTX0hfCisjZGVmaW5lIF9BU01fR0VORVJJQ19VQUNDRVNTX0hfCisKKy8qCisgKiBUaGlzIG1hY3JvIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgb2YgX19nZXRfdXNlcigpIHdoZW4gYWNjZXNzaW5nCisgKiB2YWx1ZXMgYXQgbG9jYXRpb25zIHRoYXQgYXJlIG5vdCBrbm93biB0byBiZSBhbGlnbmVkLgorICovCisjZGVmaW5lIF9fZ2V0X3VzZXJfdW5hbGlnbmVkKHgsIHB0cikJCQkJCVwKKyh7CQkJCQkJCQkJXAorCV9fdHlwZW9mX18gKCoocHRyKSkgX194OwkJCQkJXAorCV9fY29weV9mcm9tX3VzZXIoJl9feCwgKHB0ciksIHNpemVvZigqKHB0cikpKSA/IC1FRkFVTFQgOiAwOwlcCisJKHgpID0gX194OwkJCQkJCQlcCit9KQorCisKKy8qCisgKiBUaGlzIG1hY3JvIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgb2YgX19wdXRfdXNlcigpIHdoZW4gYWNjZXNzaW5nCisgKiB2YWx1ZXMgYXQgbG9jYXRpb25zIHRoYXQgYXJlIG5vdCBrbm93biB0byBiZSBhbGlnbmVkLgorICovCisjZGVmaW5lIF9fcHV0X3VzZXJfdW5hbGlnbmVkKHgsIHB0cikJCQkJCVwKKyh7CQkJCQkJCQkJXAorCV9fdHlwZW9mX18gKCoocHRyKSkgX194ID0gKHgpOwkJCQkJXAorCV9fY29weV90b191c2VyKChwdHIpLCAmX194LCBzaXplb2YoKihwdHIpKSkgPyAtRUZBVUxUIDogMDsJXAorfSkKKworI2VuZGlmIC8qIF9BU01fR0VORVJJQ19VQUNDRVNTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvdW5hbGlnbmVkLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL3VuYWxpZ25lZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4NTZhNDNlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy91bmFsaWduZWQuaApAQCAtMCwwICsxLDEyMSBAQAorI2lmbmRlZiBfQVNNX0dFTkVSSUNfVU5BTElHTkVEX0hfCisjZGVmaW5lIF9BU01fR0VORVJJQ19VTkFMSUdORURfSF8KKworLyoKKyAqIEZvciB0aGUgYmVuZWZpdCBvZiB0aG9zZSB3aG8gYXJlIHRyeWluZyB0byBwb3J0IExpbnV4IHRvIGFub3RoZXIKKyAqIGFyY2hpdGVjdHVyZSwgaGVyZSBhcmUgc29tZSBDLWxhbmd1YWdlIGVxdWl2YWxlbnRzLiAKKyAqCisgKiBUaGlzIGlzIGJhc2VkIGFsbW9zdCBlbnRpcmVseSB1cG9uIFJpY2hhcmQgSGVuZGVyc29uJ3MKKyAqIGFzbS1hbHBoYS91bmFsaWduZWQuaCBpbXBsZW1lbnRhdGlvbi4gIFNvbWUgY29tbWVudHMgd2VyZQorICogdGFrZW4gZnJvbSBEYXZpZCBNb3NiZXJnZXIncyBhc20taWE2NC91bmFsaWduZWQuaCBoZWFkZXIuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qIAorICogVGhlIG1haW4gc2luZ2xlLXZhbHVlIHVuYWxpZ25lZCB0cmFuc2ZlciByb3V0aW5lcy4KKyAqLworI2RlZmluZSBnZXRfdW5hbGlnbmVkKHB0cikgXAorCSgoX190eXBlb2ZfXygqKHB0cikpKV9fZ2V0X3VuYWxpZ25lZCgocHRyKSwgc2l6ZW9mKCoocHRyKSkpKQorI2RlZmluZSBwdXRfdW5hbGlnbmVkKHgscHRyKSBcCisJX19wdXRfdW5hbGlnbmVkKCh1bnNpZ25lZCBsb25nKSh4KSwgKHB0ciksIHNpemVvZigqKHB0cikpKQorCisvKgorICogVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGFjdHVhbGx5IGV4aXN0LiAgVGhlIGlkZWEgaXMgdGhhdCB3aGVuCisgKiBzb21lb25lIHVzZXMgdGhlIG1hY3JvcyBiZWxvdyB3aXRoIGFuIHVuc3VwcG9ydGVkIHNpemUgKGRhdGF0eXBlKSwKKyAqIHRoZSBsaW5rZXIgd2lsbCBhbGVydCB1cyB0byB0aGUgcHJvYmxlbSB2aWEgYW4gdW5yZXNvbHZlZCByZWZlcmVuY2UKKyAqIGVycm9yLgorICovCitleHRlcm4gdm9pZCBiYWRfdW5hbGlnbmVkX2FjY2Vzc19sZW5ndGgodm9pZCkgX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKTsKKworc3RydWN0IF9fdW5hX3U2NCB7IF9fdTY0IHggX19hdHRyaWJ1dGVfXygocGFja2VkKSk7IH07CitzdHJ1Y3QgX191bmFfdTMyIHsgX191MzIgeCBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsgfTsKK3N0cnVjdCBfX3VuYV91MTYgeyBfX3UxNiB4IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOyB9OworCisvKgorICogRWxlbWVudGFsIHVuYWxpZ25lZCBsb2FkcyAKKyAqLworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX191bGRxKGNvbnN0IF9fdTY0ICphZGRyKQoreworCWNvbnN0IHN0cnVjdCBfX3VuYV91NjQgKnB0ciA9IChjb25zdCBzdHJ1Y3QgX191bmFfdTY0ICopIGFkZHI7CisJcmV0dXJuIHB0ci0+eDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fdWxkbChjb25zdCBfX3UzMiAqYWRkcikKK3sKKwljb25zdCBzdHJ1Y3QgX191bmFfdTMyICpwdHIgPSAoY29uc3Qgc3RydWN0IF9fdW5hX3UzMiAqKSBhZGRyOworCXJldHVybiBwdHItPng7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX3VsZHcoY29uc3QgX191MTYgKmFkZHIpCit7CisJY29uc3Qgc3RydWN0IF9fdW5hX3UxNiAqcHRyID0gKGNvbnN0IHN0cnVjdCBfX3VuYV91MTYgKikgYWRkcjsKKwlyZXR1cm4gcHRyLT54OworfQorCisvKgorICogRWxlbWVudGFsIHVuYWxpZ25lZCBzdG9yZXMgCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkIF9fdXN0cShfX3U2NCB2YWwsIF9fdTY0ICphZGRyKQoreworCXN0cnVjdCBfX3VuYV91NjQgKnB0ciA9IChzdHJ1Y3QgX191bmFfdTY0ICopIGFkZHI7CisJcHRyLT54ID0gdmFsOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX191c3RsKF9fdTMyIHZhbCwgX191MzIgKmFkZHIpCit7CisJc3RydWN0IF9fdW5hX3UzMiAqcHRyID0gKHN0cnVjdCBfX3VuYV91MzIgKikgYWRkcjsKKwlwdHItPnggPSB2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3VzdHcoX191MTYgdmFsLCBfX3UxNiAqYWRkcikKK3sKKwlzdHJ1Y3QgX191bmFfdTE2ICpwdHIgPSAoc3RydWN0IF9fdW5hX3UxNiAqKSBhZGRyOworCXB0ci0+eCA9IHZhbDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fZ2V0X3VuYWxpZ25lZChjb25zdCB2b2lkICpwdHIsIHNpemVfdCBzaXplKQoreworCXVuc2lnbmVkIGxvbmcgdmFsOworCXN3aXRjaCAoc2l6ZSkgeworCWNhc2UgMToKKwkJdmFsID0gKihjb25zdCBfX3U4ICopcHRyOworCQlicmVhazsKKwljYXNlIDI6CisJCXZhbCA9IF9fdWxkdygoY29uc3QgX191MTYgKilwdHIpOworCQlicmVhazsKKwljYXNlIDQ6CisJCXZhbCA9IF9fdWxkbCgoY29uc3QgX191MzIgKilwdHIpOworCQlicmVhazsKKwljYXNlIDg6CisJCXZhbCA9IF9fdWxkcSgoY29uc3QgX191NjQgKilwdHIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQliYWRfdW5hbGlnbmVkX2FjY2Vzc19sZW5ndGgoKTsKKwl9OworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3B1dF91bmFsaWduZWQodW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpCit7CisJc3dpdGNoIChzaXplKSB7CisJY2FzZSAxOgorCQkqKF9fdTggKilwdHIgPSB2YWw7CisJICAgICAgICBicmVhazsKKwljYXNlIDI6CisJCV9fdXN0dyh2YWwsIChfX3UxNiAqKXB0cik7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJX191c3RsKHZhbCwgKF9fdTMyICopcHRyKTsKKwkJYnJlYWs7CisJY2FzZSA4OgorCQlfX3VzdHEodmFsLCAoX191NjQgKilwdHIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCSAgICAJYmFkX3VuYWxpZ25lZF9hY2Nlc3NfbGVuZ3RoKCk7CisJfTsKK30KKworI2VuZGlmIC8qIF9BU01fR0VORVJJQ19VTkFMSUdORURfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5Y2VmMDYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3ZtbGludXgubGRzLmgKQEAgLTAsMCArMSw5MCBAQAorI2lmbmRlZiBMT0FEX09GRlNFVAorI2RlZmluZSBMT0FEX09GRlNFVCAwCisjZW5kaWYKKworI2lmbmRlZiBWTUxJTlVYX1NZTUJPTAorI2RlZmluZSBWTUxJTlVYX1NZTUJPTChfc3ltXykgX3N5bV8KKyNlbmRpZgorCisjZGVmaW5lIFJPREFUQQkJCQkJCQkJXAorCS5yb2RhdGEgICAgICAgICAgIDogQVQoQUREUigucm9kYXRhKSAtIExPQURfT0ZGU0VUKSB7CQlcCisJCSooLnJvZGF0YSkgKigucm9kYXRhLiopCQkJCQlcCisJCSooX192ZXJtYWdpYykJCS8qIEtlcm5lbCB2ZXJzaW9uIG1hZ2ljICovCVwKKwl9CQkJCQkJCQlcCisJCQkJCQkJCQlcCisJLnJvZGF0YTEgICAgICAgICAgOiBBVChBRERSKC5yb2RhdGExKSAtIExPQURfT0ZGU0VUKSB7CQlcCisJCSooLnJvZGF0YTEpCQkJCQkJXAorCX0JCQkJCQkJCVwKKwkJCQkJCQkJCVwKKwkvKiBQQ0kgcXVpcmtzICovCQkJCQkJXAorCS5wY2lfZml4dXAgICAgICAgIDogQVQoQUREUigucGNpX2ZpeHVwKSAtIExPQURfT0ZGU0VUKSB7CVwKKwkJVk1MSU5VWF9TWU1CT0woX19zdGFydF9wY2lfZml4dXBzX2Vhcmx5KSA9IC47CQlcCisJCSooLnBjaV9maXh1cF9lYXJseSkJCQkJCVwKKwkJVk1MSU5VWF9TWU1CT0woX19lbmRfcGNpX2ZpeHVwc19lYXJseSkgPSAuOwkJXAorCQlWTUxJTlVYX1NZTUJPTChfX3N0YXJ0X3BjaV9maXh1cHNfaGVhZGVyKSA9IC47CQlcCisJCSooLnBjaV9maXh1cF9oZWFkZXIpCQkJCQlcCisJCVZNTElOVVhfU1lNQk9MKF9fZW5kX3BjaV9maXh1cHNfaGVhZGVyKSA9IC47CQlcCisJCVZNTElOVVhfU1lNQk9MKF9fc3RhcnRfcGNpX2ZpeHVwc19maW5hbCkgPSAuOwkJXAorCQkqKC5wY2lfZml4dXBfZmluYWwpCQkJCQlcCisJCVZNTElOVVhfU1lNQk9MKF9fZW5kX3BjaV9maXh1cHNfZmluYWwpID0gLjsJCVwKKwkJVk1MSU5VWF9TWU1CT0woX19zdGFydF9wY2lfZml4dXBzX2VuYWJsZSkgPSAuOwkJXAorCQkqKC5wY2lfZml4dXBfZW5hYmxlKQkJCQkJXAorCQlWTUxJTlVYX1NZTUJPTChfX2VuZF9wY2lfZml4dXBzX2VuYWJsZSkgPSAuOwkJXAorCX0JCQkJCQkJCVwKKwkJCQkJCQkJCVwKKwkvKiBLZXJuZWwgc3ltYm9sIHRhYmxlOiBOb3JtYWwgc3ltYm9scyAqLwkJCVwKKwlfX2tzeW10YWIgICAgICAgICA6IEFUKEFERFIoX19rc3ltdGFiKSAtIExPQURfT0ZGU0VUKSB7CQlcCisJCVZNTElOVVhfU1lNQk9MKF9fc3RhcnRfX19rc3ltdGFiKSA9IC47CQkJXAorCQkqKF9fa3N5bXRhYikJCQkJCQlcCisJCVZNTElOVVhfU1lNQk9MKF9fc3RvcF9fX2tzeW10YWIpID0gLjsJCQlcCisJfQkJCQkJCQkJXAorCQkJCQkJCQkJXAorCS8qIEtlcm5lbCBzeW1ib2wgdGFibGU6IEdQTC1vbmx5IHN5bWJvbHMgKi8JCQlcCisJX19rc3ltdGFiX2dwbCAgICAgOiBBVChBRERSKF9fa3N5bXRhYl9ncGwpIC0gTE9BRF9PRkZTRVQpIHsJXAorCQlWTUxJTlVYX1NZTUJPTChfX3N0YXJ0X19fa3N5bXRhYl9ncGwpID0gLjsJCVwKKwkJKihfX2tzeW10YWJfZ3BsKQkJCQkJXAorCQlWTUxJTlVYX1NZTUJPTChfX3N0b3BfX19rc3ltdGFiX2dwbCkgPSAuOwkJXAorCX0JCQkJCQkJCVwKKwkJCQkJCQkJCVwKKwkvKiBLZXJuZWwgc3ltYm9sIHRhYmxlOiBOb3JtYWwgc3ltYm9scyAqLwkJCVwKKwlfX2tjcmN0YWIgICAgICAgICA6IEFUKEFERFIoX19rY3JjdGFiKSAtIExPQURfT0ZGU0VUKSB7CQlcCisJCVZNTElOVVhfU1lNQk9MKF9fc3RhcnRfX19rY3JjdGFiKSA9IC47CQkJXAorCQkqKF9fa2NyY3RhYikJCQkJCQlcCisJCVZNTElOVVhfU1lNQk9MKF9fc3RvcF9fX2tjcmN0YWIpID0gLjsJCQlcCisJfQkJCQkJCQkJXAorCQkJCQkJCQkJXAorCS8qIEtlcm5lbCBzeW1ib2wgdGFibGU6IEdQTC1vbmx5IHN5bWJvbHMgKi8JCQlcCisJX19rY3JjdGFiX2dwbCAgICAgOiBBVChBRERSKF9fa2NyY3RhYl9ncGwpIC0gTE9BRF9PRkZTRVQpIHsJXAorCQlWTUxJTlVYX1NZTUJPTChfX3N0YXJ0X19fa2NyY3RhYl9ncGwpID0gLjsJCVwKKwkJKihfX2tjcmN0YWJfZ3BsKQkJCQkJXAorCQlWTUxJTlVYX1NZTUJPTChfX3N0b3BfX19rY3JjdGFiX2dwbCkgPSAuOwkJXAorCX0JCQkJCQkJCVwKKwkJCQkJCQkJCVwKKwkvKiBLZXJuZWwgc3ltYm9sIHRhYmxlOiBzdHJpbmdzICovCQkJCVwKKyAgICAgICAgX19rc3ltdGFiX3N0cmluZ3MgOiBBVChBRERSKF9fa3N5bXRhYl9zdHJpbmdzKSAtIExPQURfT0ZGU0VUKSB7CVwKKwkJKihfX2tzeW10YWJfc3RyaW5ncykJCQkJCVwKKwl9CQkJCQkJCQlcCisJCQkJCQkJCQlcCisJLyogQnVpbHQtaW4gbW9kdWxlIHBhcmFtZXRlcnMuICovCQkJCVwKKwlfX3BhcmFtIDogQVQoQUREUihfX3BhcmFtKSAtIExPQURfT0ZGU0VUKSB7CQkJXAorCQlWTUxJTlVYX1NZTUJPTChfX3N0YXJ0X19fcGFyYW0pID0gLjsJCQlcCisJCSooX19wYXJhbSkJCQkJCQlcCisJCVZNTElOVVhfU1lNQk9MKF9fc3RvcF9fX3BhcmFtKSA9IC47CQkJXAorCX0KKworI2RlZmluZSBTRUNVUklUWV9JTklUCQkJCQkJCVwKKwkuc2VjdXJpdHlfaW5pdGNhbGwuaW5pdCA6IHsJCQkJCVwKKwkJVk1MSU5VWF9TWU1CT0woX19zZWN1cml0eV9pbml0Y2FsbF9zdGFydCkgPSAuOwkJXAorCQkqKC5zZWN1cml0eV9pbml0Y2FsbC5pbml0KSAJCQkJXAorCQlWTUxJTlVYX1NZTUJPTChfX3NlY3VyaXR5X2luaXRjYWxsX2VuZCkgPSAuOwkJXAorCX0KKworI2RlZmluZSBTQ0hFRF9URVhUCQkJCQkJCVwKKwkJVk1MSU5VWF9TWU1CT0woX19zY2hlZF90ZXh0X3N0YXJ0KSA9IC47CQkJXAorCQkqKC5zY2hlZC50ZXh0KQkJCQkJCVwKKwkJVk1MSU5VWF9TWU1CT0woX19zY2hlZF90ZXh0X2VuZCkgPSAuOworCisjZGVmaW5lIExPQ0tfVEVYVAkJCQkJCQlcCisJCVZNTElOVVhfU1lNQk9MKF9fbG9ja190ZXh0X3N0YXJ0KSA9IC47CQkJXAorCQkqKC5zcGlubG9jay50ZXh0KQkJCQkJXAorCQlWTUxJTlVYX1NZTUJPTChfX2xvY2tfdGV4dF9lbmQpID0gLjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMveG9yLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL3hvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhYWI4NzUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3hvci5oCkBAIC0wLDAgKzEsNzE4IEBACisvKgorICogaW5jbHVkZS9hc20tZ2VuZXJpYy94b3IuaAorICoKKyAqIEdlbmVyaWMgb3B0aW1pemVkIFJBSUQtNSBjaGVja3N1bW1pbmcgZnVuY3Rpb25zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIChmb3IgZXhhbXBsZSAvdXNyL3NyYy9saW51eC9DT1BZSU5HKTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKworc3RhdGljIHZvaWQKK3hvcl84cmVnc18yKHVuc2lnbmVkIGxvbmcgYnl0ZXMsIHVuc2lnbmVkIGxvbmcgKnAxLCB1bnNpZ25lZCBsb25nICpwMikKK3sKKwlsb25nIGxpbmVzID0gYnl0ZXMgLyAoc2l6ZW9mIChsb25nKSkgLyA4OworCisJZG8geworCQlwMVswXSBePSBwMlswXTsKKwkJcDFbMV0gXj0gcDJbMV07CisJCXAxWzJdIF49IHAyWzJdOworCQlwMVszXSBePSBwMlszXTsKKwkJcDFbNF0gXj0gcDJbNF07CisJCXAxWzVdIF49IHAyWzVdOworCQlwMVs2XSBePSBwMls2XTsKKwkJcDFbN10gXj0gcDJbN107CisJCXAxICs9IDg7CisJCXAyICs9IDg7CisJfSB3aGlsZSAoLS1saW5lcyA+IDApOworfQorCitzdGF0aWMgdm9pZAoreG9yXzhyZWdzXzModW5zaWduZWQgbG9uZyBieXRlcywgdW5zaWduZWQgbG9uZyAqcDEsIHVuc2lnbmVkIGxvbmcgKnAyLAorCSAgICB1bnNpZ25lZCBsb25nICpwMykKK3sKKwlsb25nIGxpbmVzID0gYnl0ZXMgLyAoc2l6ZW9mIChsb25nKSkgLyA4OworCisJZG8geworCQlwMVswXSBePSBwMlswXSBeIHAzWzBdOworCQlwMVsxXSBePSBwMlsxXSBeIHAzWzFdOworCQlwMVsyXSBePSBwMlsyXSBeIHAzWzJdOworCQlwMVszXSBePSBwMlszXSBeIHAzWzNdOworCQlwMVs0XSBePSBwMls0XSBeIHAzWzRdOworCQlwMVs1XSBePSBwMls1XSBeIHAzWzVdOworCQlwMVs2XSBePSBwMls2XSBeIHAzWzZdOworCQlwMVs3XSBePSBwMls3XSBeIHAzWzddOworCQlwMSArPSA4OworCQlwMiArPSA4OworCQlwMyArPSA4OworCX0gd2hpbGUgKC0tbGluZXMgPiAwKTsKK30KKworc3RhdGljIHZvaWQKK3hvcl84cmVnc180KHVuc2lnbmVkIGxvbmcgYnl0ZXMsIHVuc2lnbmVkIGxvbmcgKnAxLCB1bnNpZ25lZCBsb25nICpwMiwKKwkgICAgdW5zaWduZWQgbG9uZyAqcDMsIHVuc2lnbmVkIGxvbmcgKnA0KQoreworCWxvbmcgbGluZXMgPSBieXRlcyAvIChzaXplb2YgKGxvbmcpKSAvIDg7CisKKwlkbyB7CisJCXAxWzBdIF49IHAyWzBdIF4gcDNbMF0gXiBwNFswXTsKKwkJcDFbMV0gXj0gcDJbMV0gXiBwM1sxXSBeIHA0WzFdOworCQlwMVsyXSBePSBwMlsyXSBeIHAzWzJdIF4gcDRbMl07CisJCXAxWzNdIF49IHAyWzNdIF4gcDNbM10gXiBwNFszXTsKKwkJcDFbNF0gXj0gcDJbNF0gXiBwM1s0XSBeIHA0WzRdOworCQlwMVs1XSBePSBwMls1XSBeIHAzWzVdIF4gcDRbNV07CisJCXAxWzZdIF49IHAyWzZdIF4gcDNbNl0gXiBwNFs2XTsKKwkJcDFbN10gXj0gcDJbN10gXiBwM1s3XSBeIHA0WzddOworCQlwMSArPSA4OworCQlwMiArPSA4OworCQlwMyArPSA4OworCQlwNCArPSA4OworCX0gd2hpbGUgKC0tbGluZXMgPiAwKTsKK30KKworc3RhdGljIHZvaWQKK3hvcl84cmVnc181KHVuc2lnbmVkIGxvbmcgYnl0ZXMsIHVuc2lnbmVkIGxvbmcgKnAxLCB1bnNpZ25lZCBsb25nICpwMiwKKwkgICAgdW5zaWduZWQgbG9uZyAqcDMsIHVuc2lnbmVkIGxvbmcgKnA0LCB1bnNpZ25lZCBsb25nICpwNSkKK3sKKwlsb25nIGxpbmVzID0gYnl0ZXMgLyAoc2l6ZW9mIChsb25nKSkgLyA4OworCisJZG8geworCQlwMVswXSBePSBwMlswXSBeIHAzWzBdIF4gcDRbMF0gXiBwNVswXTsKKwkJcDFbMV0gXj0gcDJbMV0gXiBwM1sxXSBeIHA0WzFdIF4gcDVbMV07CisJCXAxWzJdIF49IHAyWzJdIF4gcDNbMl0gXiBwNFsyXSBeIHA1WzJdOworCQlwMVszXSBePSBwMlszXSBeIHAzWzNdIF4gcDRbM10gXiBwNVszXTsKKwkJcDFbNF0gXj0gcDJbNF0gXiBwM1s0XSBeIHA0WzRdIF4gcDVbNF07CisJCXAxWzVdIF49IHAyWzVdIF4gcDNbNV0gXiBwNFs1XSBeIHA1WzVdOworCQlwMVs2XSBePSBwMls2XSBeIHAzWzZdIF4gcDRbNl0gXiBwNVs2XTsKKwkJcDFbN10gXj0gcDJbN10gXiBwM1s3XSBeIHA0WzddIF4gcDVbN107CisJCXAxICs9IDg7CisJCXAyICs9IDg7CisJCXAzICs9IDg7CisJCXA0ICs9IDg7CisJCXA1ICs9IDg7CisJfSB3aGlsZSAoLS1saW5lcyA+IDApOworfQorCitzdGF0aWMgdm9pZAoreG9yXzMycmVnc18yKHVuc2lnbmVkIGxvbmcgYnl0ZXMsIHVuc2lnbmVkIGxvbmcgKnAxLCB1bnNpZ25lZCBsb25nICpwMikKK3sKKwlsb25nIGxpbmVzID0gYnl0ZXMgLyAoc2l6ZW9mIChsb25nKSkgLyA4OworCisJZG8geworCQlyZWdpc3RlciBsb25nIGQwLCBkMSwgZDIsIGQzLCBkNCwgZDUsIGQ2LCBkNzsKKwkJZDAgPSBwMVswXTsJLyogUHVsbCB0aGUgc3R1ZmYgaW50byByZWdpc3RlcnMJKi8KKwkJZDEgPSBwMVsxXTsJLyogIC4uLiBpbiBidXJzdHMsIGlmIHBvc3NpYmxlLgkJKi8KKwkJZDIgPSBwMVsyXTsKKwkJZDMgPSBwMVszXTsKKwkJZDQgPSBwMVs0XTsKKwkJZDUgPSBwMVs1XTsKKwkJZDYgPSBwMVs2XTsKKwkJZDcgPSBwMVs3XTsKKwkJZDAgXj0gcDJbMF07CisJCWQxIF49IHAyWzFdOworCQlkMiBePSBwMlsyXTsKKwkJZDMgXj0gcDJbM107CisJCWQ0IF49IHAyWzRdOworCQlkNSBePSBwMls1XTsKKwkJZDYgXj0gcDJbNl07CisJCWQ3IF49IHAyWzddOworCQlwMVswXSA9IGQwOwkvKiBTdG9yZSB0aGUgcmVzdWx0IChpbiBidXJzdHMpCQkqLworCQlwMVsxXSA9IGQxOworCQlwMVsyXSA9IGQyOworCQlwMVszXSA9IGQzOworCQlwMVs0XSA9IGQ0OworCQlwMVs1XSA9IGQ1OworCQlwMVs2XSA9IGQ2OworCQlwMVs3XSA9IGQ3OworCQlwMSArPSA4OworCQlwMiArPSA4OworCX0gd2hpbGUgKC0tbGluZXMgPiAwKTsKK30KKworc3RhdGljIHZvaWQKK3hvcl8zMnJlZ3NfMyh1bnNpZ25lZCBsb25nIGJ5dGVzLCB1bnNpZ25lZCBsb25nICpwMSwgdW5zaWduZWQgbG9uZyAqcDIsCisJICAgIHVuc2lnbmVkIGxvbmcgKnAzKQoreworCWxvbmcgbGluZXMgPSBieXRlcyAvIChzaXplb2YgKGxvbmcpKSAvIDg7CisKKwlkbyB7CisJCXJlZ2lzdGVyIGxvbmcgZDAsIGQxLCBkMiwgZDMsIGQ0LCBkNSwgZDYsIGQ3OworCQlkMCA9IHAxWzBdOwkvKiBQdWxsIHRoZSBzdHVmZiBpbnRvIHJlZ2lzdGVycwkqLworCQlkMSA9IHAxWzFdOwkvKiAgLi4uIGluIGJ1cnN0cywgaWYgcG9zc2libGUuCQkqLworCQlkMiA9IHAxWzJdOworCQlkMyA9IHAxWzNdOworCQlkNCA9IHAxWzRdOworCQlkNSA9IHAxWzVdOworCQlkNiA9IHAxWzZdOworCQlkNyA9IHAxWzddOworCQlkMCBePSBwMlswXTsKKwkJZDEgXj0gcDJbMV07CisJCWQyIF49IHAyWzJdOworCQlkMyBePSBwMlszXTsKKwkJZDQgXj0gcDJbNF07CisJCWQ1IF49IHAyWzVdOworCQlkNiBePSBwMls2XTsKKwkJZDcgXj0gcDJbN107CisJCWQwIF49IHAzWzBdOworCQlkMSBePSBwM1sxXTsKKwkJZDIgXj0gcDNbMl07CisJCWQzIF49IHAzWzNdOworCQlkNCBePSBwM1s0XTsKKwkJZDUgXj0gcDNbNV07CisJCWQ2IF49IHAzWzZdOworCQlkNyBePSBwM1s3XTsKKwkJcDFbMF0gPSBkMDsJLyogU3RvcmUgdGhlIHJlc3VsdCAoaW4gYnVyc3RzKQkJKi8KKwkJcDFbMV0gPSBkMTsKKwkJcDFbMl0gPSBkMjsKKwkJcDFbM10gPSBkMzsKKwkJcDFbNF0gPSBkNDsKKwkJcDFbNV0gPSBkNTsKKwkJcDFbNl0gPSBkNjsKKwkJcDFbN10gPSBkNzsKKwkJcDEgKz0gODsKKwkJcDIgKz0gODsKKwkJcDMgKz0gODsKKwl9IHdoaWxlICgtLWxpbmVzID4gMCk7Cit9CisKK3N0YXRpYyB2b2lkCit4b3JfMzJyZWdzXzQodW5zaWduZWQgbG9uZyBieXRlcywgdW5zaWduZWQgbG9uZyAqcDEsIHVuc2lnbmVkIGxvbmcgKnAyLAorCSAgICB1bnNpZ25lZCBsb25nICpwMywgdW5zaWduZWQgbG9uZyAqcDQpCit7CisJbG9uZyBsaW5lcyA9IGJ5dGVzIC8gKHNpemVvZiAobG9uZykpIC8gODsKKworCWRvIHsKKwkJcmVnaXN0ZXIgbG9uZyBkMCwgZDEsIGQyLCBkMywgZDQsIGQ1LCBkNiwgZDc7CisJCWQwID0gcDFbMF07CS8qIFB1bGwgdGhlIHN0dWZmIGludG8gcmVnaXN0ZXJzCSovCisJCWQxID0gcDFbMV07CS8qICAuLi4gaW4gYnVyc3RzLCBpZiBwb3NzaWJsZS4JCSovCisJCWQyID0gcDFbMl07CisJCWQzID0gcDFbM107CisJCWQ0ID0gcDFbNF07CisJCWQ1ID0gcDFbNV07CisJCWQ2ID0gcDFbNl07CisJCWQ3ID0gcDFbN107CisJCWQwIF49IHAyWzBdOworCQlkMSBePSBwMlsxXTsKKwkJZDIgXj0gcDJbMl07CisJCWQzIF49IHAyWzNdOworCQlkNCBePSBwMls0XTsKKwkJZDUgXj0gcDJbNV07CisJCWQ2IF49IHAyWzZdOworCQlkNyBePSBwMls3XTsKKwkJZDAgXj0gcDNbMF07CisJCWQxIF49IHAzWzFdOworCQlkMiBePSBwM1syXTsKKwkJZDMgXj0gcDNbM107CisJCWQ0IF49IHAzWzRdOworCQlkNSBePSBwM1s1XTsKKwkJZDYgXj0gcDNbNl07CisJCWQ3IF49IHAzWzddOworCQlkMCBePSBwNFswXTsKKwkJZDEgXj0gcDRbMV07CisJCWQyIF49IHA0WzJdOworCQlkMyBePSBwNFszXTsKKwkJZDQgXj0gcDRbNF07CisJCWQ1IF49IHA0WzVdOworCQlkNiBePSBwNFs2XTsKKwkJZDcgXj0gcDRbN107CisJCXAxWzBdID0gZDA7CS8qIFN0b3JlIHRoZSByZXN1bHQgKGluIGJ1cnN0cykJCSovCisJCXAxWzFdID0gZDE7CisJCXAxWzJdID0gZDI7CisJCXAxWzNdID0gZDM7CisJCXAxWzRdID0gZDQ7CisJCXAxWzVdID0gZDU7CisJCXAxWzZdID0gZDY7CisJCXAxWzddID0gZDc7CisJCXAxICs9IDg7CisJCXAyICs9IDg7CisJCXAzICs9IDg7CisJCXA0ICs9IDg7CisJfSB3aGlsZSAoLS1saW5lcyA+IDApOworfQorCitzdGF0aWMgdm9pZAoreG9yXzMycmVnc181KHVuc2lnbmVkIGxvbmcgYnl0ZXMsIHVuc2lnbmVkIGxvbmcgKnAxLCB1bnNpZ25lZCBsb25nICpwMiwKKwkgICAgdW5zaWduZWQgbG9uZyAqcDMsIHVuc2lnbmVkIGxvbmcgKnA0LCB1bnNpZ25lZCBsb25nICpwNSkKK3sKKwlsb25nIGxpbmVzID0gYnl0ZXMgLyAoc2l6ZW9mIChsb25nKSkgLyA4OworCisJZG8geworCQlyZWdpc3RlciBsb25nIGQwLCBkMSwgZDIsIGQzLCBkNCwgZDUsIGQ2LCBkNzsKKwkJZDAgPSBwMVswXTsJLyogUHVsbCB0aGUgc3R1ZmYgaW50byByZWdpc3RlcnMJKi8KKwkJZDEgPSBwMVsxXTsJLyogIC4uLiBpbiBidXJzdHMsIGlmIHBvc3NpYmxlLgkJKi8KKwkJZDIgPSBwMVsyXTsKKwkJZDMgPSBwMVszXTsKKwkJZDQgPSBwMVs0XTsKKwkJZDUgPSBwMVs1XTsKKwkJZDYgPSBwMVs2XTsKKwkJZDcgPSBwMVs3XTsKKwkJZDAgXj0gcDJbMF07CisJCWQxIF49IHAyWzFdOworCQlkMiBePSBwMlsyXTsKKwkJZDMgXj0gcDJbM107CisJCWQ0IF49IHAyWzRdOworCQlkNSBePSBwMls1XTsKKwkJZDYgXj0gcDJbNl07CisJCWQ3IF49IHAyWzddOworCQlkMCBePSBwM1swXTsKKwkJZDEgXj0gcDNbMV07CisJCWQyIF49IHAzWzJdOworCQlkMyBePSBwM1szXTsKKwkJZDQgXj0gcDNbNF07CisJCWQ1IF49IHAzWzVdOworCQlkNiBePSBwM1s2XTsKKwkJZDcgXj0gcDNbN107CisJCWQwIF49IHA0WzBdOworCQlkMSBePSBwNFsxXTsKKwkJZDIgXj0gcDRbMl07CisJCWQzIF49IHA0WzNdOworCQlkNCBePSBwNFs0XTsKKwkJZDUgXj0gcDRbNV07CisJCWQ2IF49IHA0WzZdOworCQlkNyBePSBwNFs3XTsKKwkJZDAgXj0gcDVbMF07CisJCWQxIF49IHA1WzFdOworCQlkMiBePSBwNVsyXTsKKwkJZDMgXj0gcDVbM107CisJCWQ0IF49IHA1WzRdOworCQlkNSBePSBwNVs1XTsKKwkJZDYgXj0gcDVbNl07CisJCWQ3IF49IHA1WzddOworCQlwMVswXSA9IGQwOwkvKiBTdG9yZSB0aGUgcmVzdWx0IChpbiBidXJzdHMpCQkqLworCQlwMVsxXSA9IGQxOworCQlwMVsyXSA9IGQyOworCQlwMVszXSA9IGQzOworCQlwMVs0XSA9IGQ0OworCQlwMVs1XSA9IGQ1OworCQlwMVs2XSA9IGQ2OworCQlwMVs3XSA9IGQ3OworCQlwMSArPSA4OworCQlwMiArPSA4OworCQlwMyArPSA4OworCQlwNCArPSA4OworCQlwNSArPSA4OworCX0gd2hpbGUgKC0tbGluZXMgPiAwKTsKK30KKworc3RhdGljIHZvaWQKK3hvcl84cmVnc19wXzIodW5zaWduZWQgbG9uZyBieXRlcywgdW5zaWduZWQgbG9uZyAqcDEsIHVuc2lnbmVkIGxvbmcgKnAyKQoreworCWxvbmcgbGluZXMgPSBieXRlcyAvIChzaXplb2YgKGxvbmcpKSAvIDggLSAxOworCXByZWZldGNodyhwMSk7CisJcHJlZmV0Y2gocDIpOworCisJZG8geworCQlwcmVmZXRjaHcocDErOCk7CisJCXByZWZldGNoKHAyKzgpOworIG9uY2VfbW9yZToKKwkJcDFbMF0gXj0gcDJbMF07CisJCXAxWzFdIF49IHAyWzFdOworCQlwMVsyXSBePSBwMlsyXTsKKwkJcDFbM10gXj0gcDJbM107CisJCXAxWzRdIF49IHAyWzRdOworCQlwMVs1XSBePSBwMls1XTsKKwkJcDFbNl0gXj0gcDJbNl07CisJCXAxWzddIF49IHAyWzddOworCQlwMSArPSA4OworCQlwMiArPSA4OworCX0gd2hpbGUgKC0tbGluZXMgPiAwKTsKKwlpZiAobGluZXMgPT0gMCkKKwkJZ290byBvbmNlX21vcmU7Cit9CisKK3N0YXRpYyB2b2lkCit4b3JfOHJlZ3NfcF8zKHVuc2lnbmVkIGxvbmcgYnl0ZXMsIHVuc2lnbmVkIGxvbmcgKnAxLCB1bnNpZ25lZCBsb25nICpwMiwKKwkgICAgdW5zaWduZWQgbG9uZyAqcDMpCit7CisJbG9uZyBsaW5lcyA9IGJ5dGVzIC8gKHNpemVvZiAobG9uZykpIC8gOCAtIDE7CisJcHJlZmV0Y2h3KHAxKTsKKwlwcmVmZXRjaChwMik7CisJcHJlZmV0Y2gocDMpOworCisJZG8geworCQlwcmVmZXRjaHcocDErOCk7CisJCXByZWZldGNoKHAyKzgpOworCQlwcmVmZXRjaChwMys4KTsKKyBvbmNlX21vcmU6CisJCXAxWzBdIF49IHAyWzBdIF4gcDNbMF07CisJCXAxWzFdIF49IHAyWzFdIF4gcDNbMV07CisJCXAxWzJdIF49IHAyWzJdIF4gcDNbMl07CisJCXAxWzNdIF49IHAyWzNdIF4gcDNbM107CisJCXAxWzRdIF49IHAyWzRdIF4gcDNbNF07CisJCXAxWzVdIF49IHAyWzVdIF4gcDNbNV07CisJCXAxWzZdIF49IHAyWzZdIF4gcDNbNl07CisJCXAxWzddIF49IHAyWzddIF4gcDNbN107CisJCXAxICs9IDg7CisJCXAyICs9IDg7CisJCXAzICs9IDg7CisJfSB3aGlsZSAoLS1saW5lcyA+IDApOworCWlmIChsaW5lcyA9PSAwKQorCQlnb3RvIG9uY2VfbW9yZTsKK30KKworc3RhdGljIHZvaWQKK3hvcl84cmVnc19wXzQodW5zaWduZWQgbG9uZyBieXRlcywgdW5zaWduZWQgbG9uZyAqcDEsIHVuc2lnbmVkIGxvbmcgKnAyLAorCSAgICB1bnNpZ25lZCBsb25nICpwMywgdW5zaWduZWQgbG9uZyAqcDQpCit7CisJbG9uZyBsaW5lcyA9IGJ5dGVzIC8gKHNpemVvZiAobG9uZykpIC8gOCAtIDE7CisKKwlwcmVmZXRjaHcocDEpOworCXByZWZldGNoKHAyKTsKKwlwcmVmZXRjaChwMyk7CisJcHJlZmV0Y2gocDQpOworCisJZG8geworCQlwcmVmZXRjaHcocDErOCk7CisJCXByZWZldGNoKHAyKzgpOworCQlwcmVmZXRjaChwMys4KTsKKwkJcHJlZmV0Y2gocDQrOCk7Cisgb25jZV9tb3JlOgorCQlwMVswXSBePSBwMlswXSBeIHAzWzBdIF4gcDRbMF07CisJCXAxWzFdIF49IHAyWzFdIF4gcDNbMV0gXiBwNFsxXTsKKwkJcDFbMl0gXj0gcDJbMl0gXiBwM1syXSBeIHA0WzJdOworCQlwMVszXSBePSBwMlszXSBeIHAzWzNdIF4gcDRbM107CisJCXAxWzRdIF49IHAyWzRdIF4gcDNbNF0gXiBwNFs0XTsKKwkJcDFbNV0gXj0gcDJbNV0gXiBwM1s1XSBeIHA0WzVdOworCQlwMVs2XSBePSBwMls2XSBeIHAzWzZdIF4gcDRbNl07CisJCXAxWzddIF49IHAyWzddIF4gcDNbN10gXiBwNFs3XTsKKwkJcDEgKz0gODsKKwkJcDIgKz0gODsKKwkJcDMgKz0gODsKKwkJcDQgKz0gODsKKwl9IHdoaWxlICgtLWxpbmVzID4gMCk7CisJaWYgKGxpbmVzID09IDApCisJCWdvdG8gb25jZV9tb3JlOworfQorCitzdGF0aWMgdm9pZAoreG9yXzhyZWdzX3BfNSh1bnNpZ25lZCBsb25nIGJ5dGVzLCB1bnNpZ25lZCBsb25nICpwMSwgdW5zaWduZWQgbG9uZyAqcDIsCisJICAgIHVuc2lnbmVkIGxvbmcgKnAzLCB1bnNpZ25lZCBsb25nICpwNCwgdW5zaWduZWQgbG9uZyAqcDUpCit7CisJbG9uZyBsaW5lcyA9IGJ5dGVzIC8gKHNpemVvZiAobG9uZykpIC8gOCAtIDE7CisKKwlwcmVmZXRjaHcocDEpOworCXByZWZldGNoKHAyKTsKKwlwcmVmZXRjaChwMyk7CisJcHJlZmV0Y2gocDQpOworCXByZWZldGNoKHA1KTsKKworCWRvIHsKKwkJcHJlZmV0Y2h3KHAxKzgpOworCQlwcmVmZXRjaChwMis4KTsKKwkJcHJlZmV0Y2gocDMrOCk7CisJCXByZWZldGNoKHA0KzgpOworCQlwcmVmZXRjaChwNSs4KTsKKyBvbmNlX21vcmU6CisJCXAxWzBdIF49IHAyWzBdIF4gcDNbMF0gXiBwNFswXSBeIHA1WzBdOworCQlwMVsxXSBePSBwMlsxXSBeIHAzWzFdIF4gcDRbMV0gXiBwNVsxXTsKKwkJcDFbMl0gXj0gcDJbMl0gXiBwM1syXSBeIHA0WzJdIF4gcDVbMl07CisJCXAxWzNdIF49IHAyWzNdIF4gcDNbM10gXiBwNFszXSBeIHA1WzNdOworCQlwMVs0XSBePSBwMls0XSBeIHAzWzRdIF4gcDRbNF0gXiBwNVs0XTsKKwkJcDFbNV0gXj0gcDJbNV0gXiBwM1s1XSBeIHA0WzVdIF4gcDVbNV07CisJCXAxWzZdIF49IHAyWzZdIF4gcDNbNl0gXiBwNFs2XSBeIHA1WzZdOworCQlwMVs3XSBePSBwMls3XSBeIHAzWzddIF4gcDRbN10gXiBwNVs3XTsKKwkJcDEgKz0gODsKKwkJcDIgKz0gODsKKwkJcDMgKz0gODsKKwkJcDQgKz0gODsKKwkJcDUgKz0gODsKKwl9IHdoaWxlICgtLWxpbmVzID4gMCk7CisJaWYgKGxpbmVzID09IDApCisJCWdvdG8gb25jZV9tb3JlOworfQorCitzdGF0aWMgdm9pZAoreG9yXzMycmVnc19wXzIodW5zaWduZWQgbG9uZyBieXRlcywgdW5zaWduZWQgbG9uZyAqcDEsIHVuc2lnbmVkIGxvbmcgKnAyKQoreworCWxvbmcgbGluZXMgPSBieXRlcyAvIChzaXplb2YgKGxvbmcpKSAvIDggLSAxOworCisJcHJlZmV0Y2h3KHAxKTsKKwlwcmVmZXRjaChwMik7CisKKwlkbyB7CisJCXJlZ2lzdGVyIGxvbmcgZDAsIGQxLCBkMiwgZDMsIGQ0LCBkNSwgZDYsIGQ3OworCisJCXByZWZldGNodyhwMSs4KTsKKwkJcHJlZmV0Y2gocDIrOCk7Cisgb25jZV9tb3JlOgorCQlkMCA9IHAxWzBdOwkvKiBQdWxsIHRoZSBzdHVmZiBpbnRvIHJlZ2lzdGVycwkqLworCQlkMSA9IHAxWzFdOwkvKiAgLi4uIGluIGJ1cnN0cywgaWYgcG9zc2libGUuCQkqLworCQlkMiA9IHAxWzJdOworCQlkMyA9IHAxWzNdOworCQlkNCA9IHAxWzRdOworCQlkNSA9IHAxWzVdOworCQlkNiA9IHAxWzZdOworCQlkNyA9IHAxWzddOworCQlkMCBePSBwMlswXTsKKwkJZDEgXj0gcDJbMV07CisJCWQyIF49IHAyWzJdOworCQlkMyBePSBwMlszXTsKKwkJZDQgXj0gcDJbNF07CisJCWQ1IF49IHAyWzVdOworCQlkNiBePSBwMls2XTsKKwkJZDcgXj0gcDJbN107CisJCXAxWzBdID0gZDA7CS8qIFN0b3JlIHRoZSByZXN1bHQgKGluIGJ1cnN0cykJCSovCisJCXAxWzFdID0gZDE7CisJCXAxWzJdID0gZDI7CisJCXAxWzNdID0gZDM7CisJCXAxWzRdID0gZDQ7CisJCXAxWzVdID0gZDU7CisJCXAxWzZdID0gZDY7CisJCXAxWzddID0gZDc7CisJCXAxICs9IDg7CisJCXAyICs9IDg7CisJfSB3aGlsZSAoLS1saW5lcyA+IDApOworCWlmIChsaW5lcyA9PSAwKQorCQlnb3RvIG9uY2VfbW9yZTsKK30KKworc3RhdGljIHZvaWQKK3hvcl8zMnJlZ3NfcF8zKHVuc2lnbmVkIGxvbmcgYnl0ZXMsIHVuc2lnbmVkIGxvbmcgKnAxLCB1bnNpZ25lZCBsb25nICpwMiwKKwkgICAgdW5zaWduZWQgbG9uZyAqcDMpCit7CisJbG9uZyBsaW5lcyA9IGJ5dGVzIC8gKHNpemVvZiAobG9uZykpIC8gOCAtIDE7CisKKwlwcmVmZXRjaHcocDEpOworCXByZWZldGNoKHAyKTsKKwlwcmVmZXRjaChwMyk7CisKKwlkbyB7CisJCXJlZ2lzdGVyIGxvbmcgZDAsIGQxLCBkMiwgZDMsIGQ0LCBkNSwgZDYsIGQ3OworCisJCXByZWZldGNodyhwMSs4KTsKKwkJcHJlZmV0Y2gocDIrOCk7CisJCXByZWZldGNoKHAzKzgpOworIG9uY2VfbW9yZToKKwkJZDAgPSBwMVswXTsJLyogUHVsbCB0aGUgc3R1ZmYgaW50byByZWdpc3RlcnMJKi8KKwkJZDEgPSBwMVsxXTsJLyogIC4uLiBpbiBidXJzdHMsIGlmIHBvc3NpYmxlLgkJKi8KKwkJZDIgPSBwMVsyXTsKKwkJZDMgPSBwMVszXTsKKwkJZDQgPSBwMVs0XTsKKwkJZDUgPSBwMVs1XTsKKwkJZDYgPSBwMVs2XTsKKwkJZDcgPSBwMVs3XTsKKwkJZDAgXj0gcDJbMF07CisJCWQxIF49IHAyWzFdOworCQlkMiBePSBwMlsyXTsKKwkJZDMgXj0gcDJbM107CisJCWQ0IF49IHAyWzRdOworCQlkNSBePSBwMls1XTsKKwkJZDYgXj0gcDJbNl07CisJCWQ3IF49IHAyWzddOworCQlkMCBePSBwM1swXTsKKwkJZDEgXj0gcDNbMV07CisJCWQyIF49IHAzWzJdOworCQlkMyBePSBwM1szXTsKKwkJZDQgXj0gcDNbNF07CisJCWQ1IF49IHAzWzVdOworCQlkNiBePSBwM1s2XTsKKwkJZDcgXj0gcDNbN107CisJCXAxWzBdID0gZDA7CS8qIFN0b3JlIHRoZSByZXN1bHQgKGluIGJ1cnN0cykJCSovCisJCXAxWzFdID0gZDE7CisJCXAxWzJdID0gZDI7CisJCXAxWzNdID0gZDM7CisJCXAxWzRdID0gZDQ7CisJCXAxWzVdID0gZDU7CisJCXAxWzZdID0gZDY7CisJCXAxWzddID0gZDc7CisJCXAxICs9IDg7CisJCXAyICs9IDg7CisJCXAzICs9IDg7CisJfSB3aGlsZSAoLS1saW5lcyA+IDApOworCWlmIChsaW5lcyA9PSAwKQorCQlnb3RvIG9uY2VfbW9yZTsKK30KKworc3RhdGljIHZvaWQKK3hvcl8zMnJlZ3NfcF80KHVuc2lnbmVkIGxvbmcgYnl0ZXMsIHVuc2lnbmVkIGxvbmcgKnAxLCB1bnNpZ25lZCBsb25nICpwMiwKKwkgICAgdW5zaWduZWQgbG9uZyAqcDMsIHVuc2lnbmVkIGxvbmcgKnA0KQoreworCWxvbmcgbGluZXMgPSBieXRlcyAvIChzaXplb2YgKGxvbmcpKSAvIDggLSAxOworCisJcHJlZmV0Y2h3KHAxKTsKKwlwcmVmZXRjaChwMik7CisJcHJlZmV0Y2gocDMpOworCXByZWZldGNoKHA0KTsKKworCWRvIHsKKwkJcmVnaXN0ZXIgbG9uZyBkMCwgZDEsIGQyLCBkMywgZDQsIGQ1LCBkNiwgZDc7CisKKwkJcHJlZmV0Y2h3KHAxKzgpOworCQlwcmVmZXRjaChwMis4KTsKKwkJcHJlZmV0Y2gocDMrOCk7CisJCXByZWZldGNoKHA0KzgpOworIG9uY2VfbW9yZToKKwkJZDAgPSBwMVswXTsJLyogUHVsbCB0aGUgc3R1ZmYgaW50byByZWdpc3RlcnMJKi8KKwkJZDEgPSBwMVsxXTsJLyogIC4uLiBpbiBidXJzdHMsIGlmIHBvc3NpYmxlLgkJKi8KKwkJZDIgPSBwMVsyXTsKKwkJZDMgPSBwMVszXTsKKwkJZDQgPSBwMVs0XTsKKwkJZDUgPSBwMVs1XTsKKwkJZDYgPSBwMVs2XTsKKwkJZDcgPSBwMVs3XTsKKwkJZDAgXj0gcDJbMF07CisJCWQxIF49IHAyWzFdOworCQlkMiBePSBwMlsyXTsKKwkJZDMgXj0gcDJbM107CisJCWQ0IF49IHAyWzRdOworCQlkNSBePSBwMls1XTsKKwkJZDYgXj0gcDJbNl07CisJCWQ3IF49IHAyWzddOworCQlkMCBePSBwM1swXTsKKwkJZDEgXj0gcDNbMV07CisJCWQyIF49IHAzWzJdOworCQlkMyBePSBwM1szXTsKKwkJZDQgXj0gcDNbNF07CisJCWQ1IF49IHAzWzVdOworCQlkNiBePSBwM1s2XTsKKwkJZDcgXj0gcDNbN107CisJCWQwIF49IHA0WzBdOworCQlkMSBePSBwNFsxXTsKKwkJZDIgXj0gcDRbMl07CisJCWQzIF49IHA0WzNdOworCQlkNCBePSBwNFs0XTsKKwkJZDUgXj0gcDRbNV07CisJCWQ2IF49IHA0WzZdOworCQlkNyBePSBwNFs3XTsKKwkJcDFbMF0gPSBkMDsJLyogU3RvcmUgdGhlIHJlc3VsdCAoaW4gYnVyc3RzKQkJKi8KKwkJcDFbMV0gPSBkMTsKKwkJcDFbMl0gPSBkMjsKKwkJcDFbM10gPSBkMzsKKwkJcDFbNF0gPSBkNDsKKwkJcDFbNV0gPSBkNTsKKwkJcDFbNl0gPSBkNjsKKwkJcDFbN10gPSBkNzsKKwkJcDEgKz0gODsKKwkJcDIgKz0gODsKKwkJcDMgKz0gODsKKwkJcDQgKz0gODsKKwl9IHdoaWxlICgtLWxpbmVzID4gMCk7CisJaWYgKGxpbmVzID09IDApCisJCWdvdG8gb25jZV9tb3JlOworfQorCitzdGF0aWMgdm9pZAoreG9yXzMycmVnc19wXzUodW5zaWduZWQgbG9uZyBieXRlcywgdW5zaWduZWQgbG9uZyAqcDEsIHVuc2lnbmVkIGxvbmcgKnAyLAorCSAgICB1bnNpZ25lZCBsb25nICpwMywgdW5zaWduZWQgbG9uZyAqcDQsIHVuc2lnbmVkIGxvbmcgKnA1KQoreworCWxvbmcgbGluZXMgPSBieXRlcyAvIChzaXplb2YgKGxvbmcpKSAvIDggLSAxOworCisJcHJlZmV0Y2h3KHAxKTsKKwlwcmVmZXRjaChwMik7CisJcHJlZmV0Y2gocDMpOworCXByZWZldGNoKHA0KTsKKwlwcmVmZXRjaChwNSk7CisKKwlkbyB7CisJCXJlZ2lzdGVyIGxvbmcgZDAsIGQxLCBkMiwgZDMsIGQ0LCBkNSwgZDYsIGQ3OworCisJCXByZWZldGNodyhwMSs4KTsKKwkJcHJlZmV0Y2gocDIrOCk7CisJCXByZWZldGNoKHAzKzgpOworCQlwcmVmZXRjaChwNCs4KTsKKwkJcHJlZmV0Y2gocDUrOCk7Cisgb25jZV9tb3JlOgorCQlkMCA9IHAxWzBdOwkvKiBQdWxsIHRoZSBzdHVmZiBpbnRvIHJlZ2lzdGVycwkqLworCQlkMSA9IHAxWzFdOwkvKiAgLi4uIGluIGJ1cnN0cywgaWYgcG9zc2libGUuCQkqLworCQlkMiA9IHAxWzJdOworCQlkMyA9IHAxWzNdOworCQlkNCA9IHAxWzRdOworCQlkNSA9IHAxWzVdOworCQlkNiA9IHAxWzZdOworCQlkNyA9IHAxWzddOworCQlkMCBePSBwMlswXTsKKwkJZDEgXj0gcDJbMV07CisJCWQyIF49IHAyWzJdOworCQlkMyBePSBwMlszXTsKKwkJZDQgXj0gcDJbNF07CisJCWQ1IF49IHAyWzVdOworCQlkNiBePSBwMls2XTsKKwkJZDcgXj0gcDJbN107CisJCWQwIF49IHAzWzBdOworCQlkMSBePSBwM1sxXTsKKwkJZDIgXj0gcDNbMl07CisJCWQzIF49IHAzWzNdOworCQlkNCBePSBwM1s0XTsKKwkJZDUgXj0gcDNbNV07CisJCWQ2IF49IHAzWzZdOworCQlkNyBePSBwM1s3XTsKKwkJZDAgXj0gcDRbMF07CisJCWQxIF49IHA0WzFdOworCQlkMiBePSBwNFsyXTsKKwkJZDMgXj0gcDRbM107CisJCWQ0IF49IHA0WzRdOworCQlkNSBePSBwNFs1XTsKKwkJZDYgXj0gcDRbNl07CisJCWQ3IF49IHA0WzddOworCQlkMCBePSBwNVswXTsKKwkJZDEgXj0gcDVbMV07CisJCWQyIF49IHA1WzJdOworCQlkMyBePSBwNVszXTsKKwkJZDQgXj0gcDVbNF07CisJCWQ1IF49IHA1WzVdOworCQlkNiBePSBwNVs2XTsKKwkJZDcgXj0gcDVbN107CisJCXAxWzBdID0gZDA7CS8qIFN0b3JlIHRoZSByZXN1bHQgKGluIGJ1cnN0cykJCSovCisJCXAxWzFdID0gZDE7CisJCXAxWzJdID0gZDI7CisJCXAxWzNdID0gZDM7CisJCXAxWzRdID0gZDQ7CisJCXAxWzVdID0gZDU7CisJCXAxWzZdID0gZDY7CisJCXAxWzddID0gZDc7CisJCXAxICs9IDg7CisJCXAyICs9IDg7CisJCXAzICs9IDg7CisJCXA0ICs9IDg7CisJCXA1ICs9IDg7CisJfSB3aGlsZSAoLS1saW5lcyA+IDApOworCWlmIChsaW5lcyA9PSAwKQorCQlnb3RvIG9uY2VfbW9yZTsKK30KKworc3RhdGljIHN0cnVjdCB4b3JfYmxvY2tfdGVtcGxhdGUgeG9yX2Jsb2NrXzhyZWdzID0geworCS5uYW1lID0gIjhyZWdzIiwKKwkuZG9fMiA9IHhvcl84cmVnc18yLAorCS5kb18zID0geG9yXzhyZWdzXzMsCisJLmRvXzQgPSB4b3JfOHJlZ3NfNCwKKwkuZG9fNSA9IHhvcl84cmVnc181LAorfTsKKworc3RhdGljIHN0cnVjdCB4b3JfYmxvY2tfdGVtcGxhdGUgeG9yX2Jsb2NrXzMycmVncyA9IHsKKwkubmFtZSA9ICIzMnJlZ3MiLAorCS5kb18yID0geG9yXzMycmVnc18yLAorCS5kb18zID0geG9yXzMycmVnc18zLAorCS5kb180ID0geG9yXzMycmVnc180LAorCS5kb181ID0geG9yXzMycmVnc181LAorfTsKKworc3RhdGljIHN0cnVjdCB4b3JfYmxvY2tfdGVtcGxhdGUgeG9yX2Jsb2NrXzhyZWdzX3AgPSB7CisJLm5hbWUgPSAiOHJlZ3NfcHJlZmV0Y2giLAorCS5kb18yID0geG9yXzhyZWdzX3BfMiwKKwkuZG9fMyA9IHhvcl84cmVnc19wXzMsCisJLmRvXzQgPSB4b3JfOHJlZ3NfcF80LAorCS5kb181ID0geG9yXzhyZWdzX3BfNSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgeG9yX2Jsb2NrX3RlbXBsYXRlIHhvcl9ibG9ja18zMnJlZ3NfcCA9IHsKKwkubmFtZSA9ICIzMnJlZ3NfcHJlZmV0Y2giLAorCS5kb18yID0geG9yXzMycmVnc19wXzIsCisJLmRvXzMgPSB4b3JfMzJyZWdzX3BfMywKKwkuZG9fNCA9IHhvcl8zMnJlZ3NfcF80LAorCS5kb181ID0geG9yXzMycmVnc19wXzUsCit9OworCisjZGVmaW5lIFhPUl9UUllfVEVNUExBVEVTCQkJXAorCWRvIHsJCQkJCVwKKwkJeG9yX3NwZWVkKCZ4b3JfYmxvY2tfOHJlZ3MpOwlcCisJCXhvcl9zcGVlZCgmeG9yX2Jsb2NrXzhyZWdzX3ApOwlcCisJCXhvcl9zcGVlZCgmeG9yX2Jsb2NrXzMycmVncyk7CVwKKwkJeG9yX3NwZWVkKCZ4b3JfYmxvY2tfMzJyZWdzX3ApOwlcCisJfSB3aGlsZSAoMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWg4MzAwL2Eub3V0LmggYi9pbmNsdWRlL2FzbS1oODMwMC9hLm91dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjNzA5MzkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC9hLm91dC5oCkBAIC0wLDAgKzEsMjYgQEAKKyNpZm5kZWYgX19IODMwMF9BX09VVF9IX18KKyNkZWZpbmUgX19IODMwMF9BX09VVF9IX18KKworc3RydWN0IGV4ZWMKK3sKKyAgdW5zaWduZWQgbG9uZyBhX2luZm87CQkvKiBVc2UgbWFjcm9zIE5fTUFHSUMsIGV0YyBmb3IgYWNjZXNzICovCisgIHVuc2lnbmVkIGFfdGV4dDsJCS8qIGxlbmd0aCBvZiB0ZXh0LCBpbiBieXRlcyAqLworICB1bnNpZ25lZCBhX2RhdGE7CQkvKiBsZW5ndGggb2YgZGF0YSwgaW4gYnl0ZXMgKi8KKyAgdW5zaWduZWQgYV9ic3M7CQkvKiBsZW5ndGggb2YgdW5pbml0aWFsaXplZCBkYXRhIGFyZWEgZm9yIGZpbGUsIGluIGJ5dGVzICovCisgIHVuc2lnbmVkIGFfc3ltczsJCS8qIGxlbmd0aCBvZiBzeW1ib2wgdGFibGUgZGF0YSBpbiBmaWxlLCBpbiBieXRlcyAqLworICB1bnNpZ25lZCBhX2VudHJ5OwkJLyogc3RhcnQgYWRkcmVzcyAqLworICB1bnNpZ25lZCBhX3Ryc2l6ZTsJCS8qIGxlbmd0aCBvZiByZWxvY2F0aW9uIGluZm8gZm9yIHRleHQsIGluIGJ5dGVzICovCisgIHVuc2lnbmVkIGFfZHJzaXplOwkJLyogbGVuZ3RoIG9mIHJlbG9jYXRpb24gaW5mbyBmb3IgZGF0YSwgaW4gYnl0ZXMgKi8KK307CisKKyNkZWZpbmUgTl9UUlNJWkUoYSkJKChhKS5hX3Ryc2l6ZSkKKyNkZWZpbmUgTl9EUlNJWkUoYSkJKChhKS5hX2Ryc2l6ZSkKKyNkZWZpbmUgTl9TWU1TSVpFKGEpCSgoYSkuYV9zeW1zKQorCisjaWZkZWYgX19LRVJORUxfXworCisjZGVmaW5lIFNUQUNLX1RPUAlUQVNLX1NJWkUKKworI2VuZGlmCisKKyNlbmRpZiAvKiBfX0g4MzAwX0FfT1VUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvYXRvbWljLmggYi9pbmNsdWRlL2FzbS1oODMwMC9hdG9taWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjMwZjY1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvYXRvbWljLmgKQEAgLTAsMCArMSwxMTMgQEAKKyNpZm5kZWYgX19BUkNIX0g4MzAwX0FUT01JQ19fCisjZGVmaW5lIF9fQVJDSF9IODMwMF9BVE9NSUNfXworCisvKgorICogQXRvbWljIG9wZXJhdGlvbnMgdGhhdCBDIGNhbid0IGd1YXJhbnRlZSB1cy4gIFVzZWZ1bCBmb3IKKyAqIHJlc291cmNlIGNvdW50aW5nIGV0Yy4uCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeyBpbnQgY291bnRlcjsgfSBhdG9taWNfdDsKKyNkZWZpbmUgQVRPTUlDX0lOSVQoaSkJeyAoaSkgfQorCisjZGVmaW5lIGF0b21pY19yZWFkKHYpCQkoKHYpLT5jb3VudGVyKQorI2RlZmluZSBhdG9taWNfc2V0KHYsIGkpCSgoKHYpLT5jb3VudGVyKSA9IGkpCisKKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBhdG9taWNfYWRkX3JldHVybihpbnQgaSwgYXRvbWljX3QgKnYpCit7CisJaW50IHJldCxmbGFnczsKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJcmV0ID0gdi0+Y291bnRlciArPSBpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlyZXR1cm4gcmV0OworfQorCisjZGVmaW5lIGF0b21pY19hZGQoaSwgdikgYXRvbWljX2FkZF9yZXR1cm4oaSwgdikKKyNkZWZpbmUgYXRvbWljX2FkZF9uZWdhdGl2ZShhLCB2KQkoYXRvbWljX2FkZF9yZXR1cm4oKGEpLCAodikpIDwgMCkKKworc3RhdGljIF9faW5saW5lX18gaW50IGF0b21pY19zdWJfcmV0dXJuKGludCBpLCBhdG9taWNfdCAqdikKK3sKKwlpbnQgcmV0LGZsYWdzOworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlyZXQgPSB2LT5jb3VudGVyIC09IGk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCXJldHVybiByZXQ7Cit9CisKKyNkZWZpbmUgYXRvbWljX3N1YihpLCB2KSBhdG9taWNfc3ViX3JldHVybihpLCB2KQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgYXRvbWljX2luY19yZXR1cm4oYXRvbWljX3QgKnYpCit7CisJaW50IHJldCxmbGFnczsKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJdi0+Y291bnRlcisrOworCXJldCA9IHYtPmNvdW50ZXI7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCXJldHVybiByZXQ7Cit9CisKKyNkZWZpbmUgYXRvbWljX2luYyh2KSBhdG9taWNfaW5jX3JldHVybih2KQorCisvKgorICogYXRvbWljX2luY19hbmRfdGVzdCAtIGluY3JlbWVudCBhbmQgdGVzdAorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICoKKyAqIEF0b21pY2FsbHkgaW5jcmVtZW50cyBAdiBieSAxCisgKiBhbmQgcmV0dXJucyB0cnVlIGlmIHRoZSByZXN1bHQgaXMgemVybywgb3IgZmFsc2UgZm9yIGFsbAorICogb3RoZXIgY2FzZXMuCisgKi8KKyNkZWZpbmUgYXRvbWljX2luY19hbmRfdGVzdCh2KSAoYXRvbWljX2luY19yZXR1cm4odikgPT0gMCkKKworc3RhdGljIF9faW5saW5lX18gaW50IGF0b21pY19kZWNfcmV0dXJuKGF0b21pY190ICp2KQoreworCWludCByZXQsZmxhZ3M7CisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCS0tdi0+Y291bnRlcjsKKwlyZXQgPSB2LT5jb3VudGVyOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlyZXR1cm4gcmV0OworfQorCisjZGVmaW5lIGF0b21pY19kZWModikgYXRvbWljX2RlY19yZXR1cm4odikKKworc3RhdGljIF9faW5saW5lX18gaW50IGF0b21pY19kZWNfYW5kX3Rlc3QoYXRvbWljX3QgKnYpCit7CisJaW50IHJldCxmbGFnczsKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJLS12LT5jb3VudGVyOworCXJldCA9IHYtPmNvdW50ZXI7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCXJldHVybiByZXQgPT0gMDsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBhdG9taWNfY2xlYXJfbWFzayh1bnNpZ25lZCBsb25nIG1hc2ssIHVuc2lnbmVkIGxvbmcgKnYpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0YyBjY3IscjFsXG5cdCIKKwkgICAgICAgICAgICAgICAgICAgICAib3JjICMweDgwLGNjclxuXHQiCisJICAgICAgICAgICAgICAgICAgICAgIm1vdi5sICUwLGVyMFxuXHQiCisJICAgICAgICAgICAgICAgICAgICAgImFuZC5sICUxLGVyMFxuXHQiCisJICAgICAgICAgICAgICAgICAgICAgIm1vdi5sIGVyMCwlMFxuXHQiCisJICAgICAgICAgICAgICAgICAgICAgImxkYyByMWwsY2NyIiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiPW0iICgqdikgOiAiZyIgKH4obWFzaykpIDoiZXIwIiwiZXIxIik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgYXRvbWljX3NldF9tYXNrKHVuc2lnbmVkIGxvbmcgbWFzaywgdW5zaWduZWQgbG9uZyAqdikKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RjIGNjcixyMWxcblx0IgorCSAgICAgICAgICAgICAgICAgICAgICJvcmMgIzB4ODAsY2NyXG5cdCIKKwkgICAgICAgICAgICAgICAgICAgICAibW92LmwgJTAsZXIwXG5cdCIKKwkgICAgICAgICAgICAgICAgICAgICAib3IubCAlMSxlcjBcblx0IgorCSAgICAgICAgICAgICAgICAgICAgICJtb3YubCBlcjAsJTBcblx0IgorCSAgICAgICAgICAgICAgICAgICAgICJsZGMgcjFsLGNjciIgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIj1tIiAoKnYpIDogImciIChtYXNrKSA6ImVyMCIsImVyMSIpOworfQorCisvKiBBdG9taWMgb3BlcmF0aW9ucyBhcmUgYWxyZWFkeSBzZXJpYWxpemluZyAqLworI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfZGVjKCkgICAgYmFycmllcigpCisjZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2RlYygpIGJhcnJpZXIoKQorI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfaW5jKCkgICAgYmFycmllcigpCisjZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpIGJhcnJpZXIoKQorCisjZW5kaWYgLyogX19BUkNIX0g4MzAwX0FUT01JQyBfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvYml0b3BzLmggYi9pbmNsdWRlL2FzbS1oODMwMC9iaXRvcHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDM2ZjU5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvYml0b3BzLmgKQEAgLTAsMCArMSw0MTAgQEAKKyNpZm5kZWYgX0g4MzAwX0JJVE9QU19ICisjZGVmaW5lIF9IODMwMF9CSVRPUFNfSAorCisvKgorICogQ29weXJpZ2h0IDE5OTIsIExpbnVzIFRvcnZhbGRzLgorICogQ29weXJpZ2h0IDIwMDIsIFlvc2hpbm9yaSBTYXRvCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgkvKiBzd2FiMzIgKi8KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisKKyNpZmRlZiBfX0tFUk5FTF9fCisvKgorICogRnVuY3Rpb24gcHJvdG90eXBlcyB0byBrZWVwIGdjYyAtV2FsbCBoYXBweQorICovCisKKy8qCisgKiBmZnogPSBGaW5kIEZpcnN0IFplcm8gaW4gd29yZC4gVW5kZWZpbmVkIGlmIG5vIHplcm8gZXhpc3RzLAorICogc28gY29kZSBzaG91bGQgY2hlY2sgYWdhaW5zdCB+MFVMIGZpcnN0Li4KKyAqLworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBmZnoodW5zaWduZWQgbG9uZyB3b3JkKQoreworCXVuc2lnbmVkIGxvbmcgcmVzdWx0OworCisJcmVzdWx0ID0gLTE7CisJX19hc21fXygiMTpcblx0IgorCQkic2hsci5sICUyXG5cdCIKKwkJImFkZHMgIzEsJTBcblx0IgorCQkiYmNzIDFiIgorCQk6ICI9ciIgKHJlc3VsdCkKKwkJOiAiMCIgIChyZXN1bHQpLCJyIiAod29yZCkpOworCXJldHVybiByZXN1bHQ7Cit9CisKKyNkZWZpbmUgSDgzMDBfR0VOX0JJVE9QX0NPTlNUKE9QLEJJVCkJCQkgICAgXAorCWNhc2UgQklUOgkJCQkJICAgIFwKKwlfX2FzbV9fKE9QICIgIyIgI0JJVCAiLEAlMCI6OiJyIihiX2FkZHIpOiJtZW1vcnkiKTsgXAorCWJyZWFrOworCisjZGVmaW5lIEg4MzAwX0dFTl9CSVRPUChGTkFNRSxPUCkJCQkJICAgICAgXAorc3RhdGljIF9faW5saW5lX18gdm9pZCBGTkFNRShpbnQgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcqIGFkZHIpICAgIFwKK3sJCQkJCQkJCSAgICAgIFwKKwl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICpiX2FkZHI7CQkJCSAgICAgIFwKKwliX2FkZHIgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKWFkZHIgKyAoKG5yID4+IDMpIF4gMyk7ICAgIFwKKwlpZiAoX19idWlsdGluX2NvbnN0YW50X3AobnIpKSB7CQkJCSAgICAgIFwKKwkJc3dpdGNoKG5yICYgNykgewkJCQkgICAgICBcCisJCQlIODMwMF9HRU5fQklUT1BfQ09OU1QoT1AsMCkJCSAgICAgIFwKKwkJCUg4MzAwX0dFTl9CSVRPUF9DT05TVChPUCwxKQkJICAgICAgXAorCQkJSDgzMDBfR0VOX0JJVE9QX0NPTlNUKE9QLDIpCQkgICAgICBcCisJCQlIODMwMF9HRU5fQklUT1BfQ09OU1QoT1AsMykJCSAgICAgIFwKKwkJCUg4MzAwX0dFTl9CSVRPUF9DT05TVChPUCw0KQkJICAgICAgXAorCQkJSDgzMDBfR0VOX0JJVE9QX0NPTlNUKE9QLDUpCQkgICAgICBcCisJCQlIODMwMF9HRU5fQklUT1BfQ09OU1QoT1AsNikJCSAgICAgIFwKKwkJCUg4MzAwX0dFTl9CSVRPUF9DT05TVChPUCw3KQkJICAgICAgXAorCQl9CQkJCQkJICAgICAgXAorCX0gZWxzZSB7CQkJCQkJICAgICAgXAorCQlfX2FzbV9fKE9QICIgJXcwLEAlMSI6OiJyIihuciksInIiKGJfYWRkcik6Im1lbW9yeSIpOyBcCisJfQkJCQkJCQkgICAgICBcCit9CisKKy8qCisgKiBjbGVhcl9iaXQoKSBkb2Vzbid0IHByb3ZpZGUgYW55IGJhcnJpZXIgZm9yIHRoZSBjb21waWxlci4KKyAqLworI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKQliYXJyaWVyKCkKKyNkZWZpbmUgc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKQliYXJyaWVyKCkKKworSDgzMDBfR0VOX0JJVE9QKHNldF9iaXQJICAsImJzZXQiKQorSDgzMDBfR0VOX0JJVE9QKGNsZWFyX2JpdCAsImJjbHIiKQorSDgzMDBfR0VOX0JJVE9QKGNoYW5nZV9iaXQsImJub3QiKQorI2RlZmluZSBfX3NldF9iaXQobnIsYWRkcikgICAgc2V0X2JpdCgobnIpLChhZGRyKSkKKyNkZWZpbmUgX19jbGVhcl9iaXQobnIsYWRkcikgIGNsZWFyX2JpdCgobnIpLChhZGRyKSkKKyNkZWZpbmUgX19jaGFuZ2VfYml0KG5yLGFkZHIpIGNoYW5nZV9iaXQoKG5yKSwoYWRkcikpCisKKyN1bmRlZiBIODMwMF9HRU5fQklUT1AKKyN1bmRlZiBIODMwMF9HRU5fQklUT1BfQ09OU1QKKworc3RhdGljIF9faW5saW5lX18gaW50IHRlc3RfYml0KGludCBuciwgY29uc3QgdW5zaWduZWQgbG9uZyogYWRkcikKK3sKKwlyZXR1cm4gKCooKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilhZGRyICsgCisgICAgICAgICAgICAgICAoKG5yID4+IDMpIF4gMykpICYgKDFVTCA8PCAobnIgJiA3KSkpICE9IDA7Cit9CisKKyNkZWZpbmUgX190ZXN0X2JpdChuciwgYWRkcikgdGVzdF9iaXQobnIsIGFkZHIpCisKKyNkZWZpbmUgSDgzMDBfR0VOX1RFU1RfQklUT1BfQ09OU1RfSU5UKE9QLEJJVCkJCQkgICAgIFwKKwljYXNlIEJJVDoJCQkJCQkgICAgIFwKKwlfX2FzbV9fKCJzdGMgY2NyLCV3MVxuXHQiCQkJCSAgICAgXAorCQkib3JjICMweDgwLGNjclxuXHQiCQkJCSAgICAgXAorCQkiYmxkICMiICNCSVQgIixAJTRcblx0IgkJCQkgICAgIFwKKwkJT1AgIiAjIiAjQklUICIsQCU0XG5cdCIJCQkJICAgICBcCisJCSJyb3R4bC5sICUwXG5cdCIJCQkJICAgICBcCisJCSJsZGMgJXcxLGNjciIJCQkJCSAgICAgXAorCQk6ICI9ciIocmV0dmFsKSwiPSZyIihjY3JzYXZlKSwiPW0iKCpiX2FkZHIpCSAgICAgXAorCQk6ICIwIiAocmV0dmFsKSwiciIgKGJfYWRkcikJCQkgICAgIFwKKwkJOiAibWVtb3J5Iik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGJyZWFrOworCisjZGVmaW5lIEg4MzAwX0dFTl9URVNUX0JJVE9QX0NPTlNUKE9QLEJJVCkJCQkgICAgIFwKKwljYXNlIEJJVDoJCQkJCQkgICAgIFwKKwlfX2FzbV9fKCJibGQgIyIgI0JJVCAiLEAlM1xuXHQiCQkJCSAgICAgXAorCQlPUCAiICMiICNCSVQgIixAJTNcblx0IgkJCQkgICAgIFwKKwkJInJvdHhsLmwgJTBcblx0IgkJCQkgICAgIFwKKwkJOiAiPXIiKHJldHZhbCksIj1tIigqYl9hZGRyKQkJCSAgICAgXAorCQk6ICIwIiAocmV0dmFsKSwiciIgKGJfYWRkcikJCQkgICAgIFwKKwkJOiAibWVtb3J5Iik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGJyZWFrOworCisjZGVmaW5lIEg4MzAwX0dFTl9URVNUX0JJVE9QKEZOTkFNRSxPUCkJCQkJICAgICBcCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgRk5OQU1FKGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCSAgICAgXAorewkJCQkJCQkJICAgICBcCisJaW50IHJldHZhbCA9IDA7CQkJCQkJICAgICBcCisJY2hhciBjY3JzYXZlOwkJCQkJCSAgICAgXAorCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKmJfYWRkcjsJCQkJICAgICBcCisJYl9hZGRyID0gKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilhZGRyICsgKChuciA+PiAzKSBeIDMpOyAgIFwKKwlpZiAoX19idWlsdGluX2NvbnN0YW50X3AobnIpKSB7CQkJCSAgICAgXAorCQlzd2l0Y2gobnIgJiA3KSB7CQkJCSAgICAgXAorCQkJSDgzMDBfR0VOX1RFU1RfQklUT1BfQ09OU1RfSU5UKE9QLDApCSAgICAgXAorCQkJSDgzMDBfR0VOX1RFU1RfQklUT1BfQ09OU1RfSU5UKE9QLDEpCSAgICAgXAorCQkJSDgzMDBfR0VOX1RFU1RfQklUT1BfQ09OU1RfSU5UKE9QLDIpCSAgICAgXAorCQkJSDgzMDBfR0VOX1RFU1RfQklUT1BfQ09OU1RfSU5UKE9QLDMpCSAgICAgXAorCQkJSDgzMDBfR0VOX1RFU1RfQklUT1BfQ09OU1RfSU5UKE9QLDQpCSAgICAgXAorCQkJSDgzMDBfR0VOX1RFU1RfQklUT1BfQ09OU1RfSU5UKE9QLDUpCSAgICAgXAorCQkJSDgzMDBfR0VOX1RFU1RfQklUT1BfQ09OU1RfSU5UKE9QLDYpCSAgICAgXAorCQkJSDgzMDBfR0VOX1RFU1RfQklUT1BfQ09OU1RfSU5UKE9QLDcpCSAgICAgXAorCQl9CQkJCQkJICAgICBcCisJfSBlbHNlIHsJCQkJCQkgICAgIFwKKwkJX19hc21fXygic3RjIGNjciwldzFcblx0IgkJCSAgICAgXAorCQkJIm9yYyAjMHg4MCxjY3Jcblx0IgkJCSAgICAgXAorCQkJImJ0c3QgJXc1LEAlNFxuXHQiCQkJICAgICBcCisJCQlPUCAiICV3NSxAJTRcblx0IgkJCSAgICAgXAorCQkJImJlcSAxZlxuXHQiCQkJCSAgICAgXAorCQkJImluYy5sICMxLCUwXG4iCQkJCSAgICAgXAorCQkJIjE6XG5cdCIJCQkJICAgICBcCisJCQkibGRjICV3MSxjY3IiCQkJCSAgICAgXAorCQkJOiAiPXIiKHJldHZhbCksIj0mciIoY2Nyc2F2ZSksIj1tIigqYl9hZGRyKSAgXAorCQkJOiAiMCIgKHJldHZhbCksInIiIChiX2FkZHIpLCJyIihucikJICAgICBcCisJCQk6ICJtZW1vcnkiKTsJCQkJICAgICBcCisJfQkJCQkJCQkgICAgIFwKKwlyZXR1cm4gcmV0dmFsOwkJCQkJCSAgICAgXAorfQkJCQkJCQkJICAgICBcCisJCQkJCQkJCSAgICAgXAorc3RhdGljIF9faW5saW5lX18gaW50IF9fICMjIEZOTkFNRShpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKSAgICAgXAorewkJCQkJCQkJICAgICBcCisJaW50IHJldHZhbCA9IDA7CQkJCQkJICAgICBcCisJdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqYl9hZGRyOwkJCQkgICAgIFwKKwliX2FkZHIgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKWFkZHIgKyAoKG5yID4+IDMpIF4gMyk7ICAgXAorCWlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChucikpIHsJCQkJICAgICBcCisJCXN3aXRjaChuciAmIDcpIHsJCQkJICAgICBcCisJCQlIODMwMF9HRU5fVEVTVF9CSVRPUF9DT05TVChPUCwwKSAJICAgICBcCisJCQlIODMwMF9HRU5fVEVTVF9CSVRPUF9DT05TVChPUCwxKSAJICAgICBcCisJCQlIODMwMF9HRU5fVEVTVF9CSVRPUF9DT05TVChPUCwyKSAJICAgICBcCisJCQlIODMwMF9HRU5fVEVTVF9CSVRPUF9DT05TVChPUCwzKSAJICAgICBcCisJCQlIODMwMF9HRU5fVEVTVF9CSVRPUF9DT05TVChPUCw0KSAJICAgICBcCisJCQlIODMwMF9HRU5fVEVTVF9CSVRPUF9DT05TVChPUCw1KSAJICAgICBcCisJCQlIODMwMF9HRU5fVEVTVF9CSVRPUF9DT05TVChPUCw2KSAJICAgICBcCisJCQlIODMwMF9HRU5fVEVTVF9CSVRPUF9DT05TVChPUCw3KSAJICAgICBcCisJCX0JCQkJCQkgICAgIFwKKwl9IGVsc2UgewkJCQkJCSAgICAgXAorCQlfX2FzbV9fKCJidHN0ICV3NCxAJTNcblx0IgkJCSAgICAgXAorCQkJT1AgIiAldzQsQCUzXG5cdCIJCQkgICAgIFwKKwkJCSJiZXEgMWZcblx0IgkJCQkgICAgIFwKKwkJCSJpbmMubCAjMSwlMFxuIgkJCQkgICAgIFwKKwkJCSIxOiIJCQkJCSAgICAgXAorCQkJOiAiPXIiKHJldHZhbCksIj1tIigqYl9hZGRyKQkJICAgICBcCisJCQk6ICIwIiAocmV0dmFsKSwiciIgKGJfYWRkciksInIiKG5yKQkgICAgIFwKKwkJCTogIm1lbW9yeSIpOwkJCQkgICAgIFwKKwl9CQkJCQkJCSAgICAgXAorCXJldHVybiByZXR2YWw7CQkJCQkJICAgICBcCit9CisKK0g4MzAwX0dFTl9URVNUX0JJVE9QKHRlc3RfYW5kX3NldF9iaXQsCSAiYnNldCIpCitIODMwMF9HRU5fVEVTVF9CSVRPUCh0ZXN0X2FuZF9jbGVhcl9iaXQsICJiY2xyIikKK0g4MzAwX0dFTl9URVNUX0JJVE9QKHRlc3RfYW5kX2NoYW5nZV9iaXQsImJub3QiKQorI3VuZGVmIEg4MzAwX0dFTl9URVNUX0JJVE9QX0NPTlNUCisjdW5kZWYgSDgzMDBfR0VOX1RFU1RfQklUT1BfQ09OU1RfSU5UCisjdW5kZWYgSDgzMDBfR0VOX1RFU1RfQklUT1AKKworI2RlZmluZSBmaW5kX2ZpcnN0X3plcm9fYml0KGFkZHIsIHNpemUpIFwKKwlmaW5kX25leHRfemVyb19iaXQoKGFkZHIpLCAoc2l6ZSksIDApCisKKyNkZWZpbmUgZmZzKHgpIGdlbmVyaWNfZmZzKHgpCisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgX19mZnModW5zaWduZWQgbG9uZyB3b3JkKQoreworCXVuc2lnbmVkIGxvbmcgcmVzdWx0OworCisJcmVzdWx0ID0gLTE7CisJX19hc21fXygiMTpcblx0IgorCQkic2hsci5sICUyXG5cdCIKKwkJImFkZHMgIzEsJTBcblx0IgorCQkiYmNjIDFiIgorCQk6ICI9ciIgKHJlc3VsdCkKKwkJOiAiMCIocmVzdWx0KSwiciIod29yZCkpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBmaW5kX25leHRfemVyb19iaXQgKGNvbnN0IHVuc2lnbmVkIGxvbmcgKiBhZGRyLCBpbnQgc2l6ZSwgaW50IG9mZnNldCkKK3sKKwl1bnNpZ25lZCBsb25nICpwID0gKHVuc2lnbmVkIGxvbmcgKikoKCh1bnNpZ25lZCBsb25nKWFkZHIgKyAob2Zmc2V0ID4+IDMpKSAmIH4zKTsKKwl1bnNpZ25lZCBsb25nIHJlc3VsdCA9IG9mZnNldCAmIH4zMVVMOworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJaWYgKG9mZnNldCA+PSBzaXplKQorCQlyZXR1cm4gc2l6ZTsKKwlzaXplIC09IHJlc3VsdDsKKwlvZmZzZXQgJj0gMzFVTDsKKwlpZiAob2Zmc2V0KSB7CisJCXRtcCA9ICoocCsrKTsKKwkJdG1wIHw9IH4wVUwgPj4gKDMyLW9mZnNldCk7CisJCWlmIChzaXplIDwgMzIpCisJCQlnb3RvIGZvdW5kX2ZpcnN0OworCQlpZiAofnRtcCkKKwkJCWdvdG8gZm91bmRfbWlkZGxlOworCQlzaXplIC09IDMyOworCQlyZXN1bHQgKz0gMzI7CisJfQorCXdoaWxlIChzaXplICYgfjMxVUwpIHsKKwkJaWYgKH4odG1wID0gKihwKyspKSkKKwkJCWdvdG8gZm91bmRfbWlkZGxlOworCQlyZXN1bHQgKz0gMzI7CisJCXNpemUgLT0gMzI7CisJfQorCWlmICghc2l6ZSkKKwkJcmV0dXJuIHJlc3VsdDsKKwl0bXAgPSAqcDsKKworZm91bmRfZmlyc3Q6CisJdG1wIHw9IH4wVUwgPj4gc2l6ZTsKK2ZvdW5kX21pZGRsZToKKwlyZXR1cm4gcmVzdWx0ICsgZmZ6KHRtcCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgZmluZF9uZXh0X2JpdChjb25zdCB1bnNpZ25lZCBsb25nICphZGRyLAorCXVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpCit7CisJdW5zaWduZWQgbG9uZyAqcCA9ICh1bnNpZ25lZCBsb25nICopKCgodW5zaWduZWQgbG9uZylhZGRyICsgKG9mZnNldCA+PiAzKSkgJiB+Myk7CisJdW5zaWduZWQgaW50IHJlc3VsdCA9IG9mZnNldCAmIH4zMVVMOworCXVuc2lnbmVkIGludCB0bXA7CisKKwlpZiAob2Zmc2V0ID49IHNpemUpCisJCXJldHVybiBzaXplOworCXNpemUgLT0gcmVzdWx0OworCW9mZnNldCAmPSAzMVVMOworCWlmIChvZmZzZXQpIHsKKwkJdG1wID0gKihwKyspOworCQl0bXAgJj0gfjBVTCA8PCBvZmZzZXQ7CisJCWlmIChzaXplIDwgMzIpCisJCQlnb3RvIGZvdW5kX2ZpcnN0OworCQlpZiAodG1wKQorCQkJZ290byBmb3VuZF9taWRkbGU7CisJCXNpemUgLT0gMzI7CisJCXJlc3VsdCArPSAzMjsKKwl9CisJd2hpbGUgKHNpemUgPj0gMzIpIHsKKwkJaWYgKCh0bXAgPSAqcCsrKSAhPSAwKQorCQkJZ290byBmb3VuZF9taWRkbGU7CisJCXJlc3VsdCArPSAzMjsKKwkJc2l6ZSAtPSAzMjsKKwl9CisJaWYgKCFzaXplKQorCQlyZXR1cm4gcmVzdWx0OworCXRtcCA9ICpwOworCitmb3VuZF9maXJzdDoKKwl0bXAgJj0gfjBVTCA+PiAoMzIgLSBzaXplKTsKKwlpZiAodG1wID09IDBVTCkKKwkJcmV0dXJuIHJlc3VsdCArIHNpemU7Citmb3VuZF9taWRkbGU6CisJcmV0dXJuIHJlc3VsdCArIF9fZmZzKHRtcCk7Cit9CisKKyNkZWZpbmUgZmluZF9maXJzdF9iaXQoYWRkciwgc2l6ZSkgZmluZF9uZXh0X2JpdChhZGRyLCBzaXplLCAwKQorCisvKgorICogRXZlcnkgYXJjaGl0ZWN0dXJlIG11c3QgZGVmaW5lIHRoaXMgZnVuY3Rpb24uIEl0J3MgdGhlIGZhc3Rlc3QKKyAqIHdheSBvZiBzZWFyY2hpbmcgYSAxNDAtYml0IGJpdG1hcCB3aGVyZSB0aGUgZmlyc3QgMTAwIGJpdHMgYXJlCisgKiB1bmxpa2VseSB0byBiZSBzZXQuIEl0J3MgZ3VhcmFudGVlZCB0aGF0IGF0IGxlYXN0IG9uZSBvZiB0aGUgMTQwCisgKiBiaXRzIGlzIGNsZWFyZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHNjaGVkX2ZpbmRfZmlyc3RfYml0KHVuc2lnbmVkIGxvbmcgKmIpCit7CisJaWYgKHVubGlrZWx5KGJbMF0pKQorCQlyZXR1cm4gX19mZnMoYlswXSk7CisJaWYgKHVubGlrZWx5KGJbMV0pKQorCQlyZXR1cm4gX19mZnMoYlsxXSkgKyAzMjsKKwlpZiAodW5saWtlbHkoYlsyXSkpCisJCXJldHVybiBfX2ZmcyhiWzJdKSArIDY0OworCWlmIChiWzNdKQorCQlyZXR1cm4gX19mZnMoYlszXSkgKyA5NjsKKwlyZXR1cm4gX19mZnMoYls0XSkgKyAxMjg7Cit9CisKKy8qCisgKiBod2VpZ2h0TjogcmV0dXJucyB0aGUgaGFtbWluZyB3ZWlnaHQgKGkuZS4gdGhlIG51bWJlcgorICogb2YgYml0cyBzZXQpIG9mIGEgTi1iaXQgd29yZAorICovCisKKyNkZWZpbmUgaHdlaWdodDMyKHgpIGdlbmVyaWNfaHdlaWdodDMyKHgpCisjZGVmaW5lIGh3ZWlnaHQxNih4KSBnZW5lcmljX2h3ZWlnaHQxNih4KQorI2RlZmluZSBod2VpZ2h0OCh4KSBnZW5lcmljX2h3ZWlnaHQ4KHgpCisKK3N0YXRpYyBfX2lubGluZV9fIGludCBleHQyX3NldF9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKK3sKKwlpbnQJCW1hc2ssIHJldHZhbDsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIJKkFERFIgPSAodW5zaWduZWQgY2hhciAqKSBhZGRyOworCisJQUREUiArPSBuciA+PiAzOworCW1hc2sgPSAxIDw8IChuciAmIDB4MDcpOworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlyZXR2YWwgPSAobWFzayAmICpBRERSKSAhPSAwOworCSpBRERSIHw9IG1hc2s7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCXJldHVybiByZXR2YWw7Cit9CisjZGVmaW5lIGV4dDJfc2V0X2JpdF9hdG9taWMobG9jaywgbnIsIGFkZHIpIGV4dDJfc2V0X2JpdChuciwgYWRkcikKKworc3RhdGljIF9faW5saW5lX18gaW50IGV4dDJfY2xlYXJfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCit7CisJaW50CQltYXNrLCByZXR2YWw7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKwl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyCSpBRERSID0gKHVuc2lnbmVkIGNoYXIgKikgYWRkcjsKKworCUFERFIgKz0gbnIgPj4gMzsKKwltYXNrID0gMSA8PCAobnIgJiAweDA3KTsKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJcmV0dmFsID0gKG1hc2sgJiAqQUREUikgIT0gMDsKKwkqQUREUiAmPSB+bWFzazsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJcmV0dXJuIHJldHZhbDsKK30KKyNkZWZpbmUgZXh0Ml9jbGVhcl9iaXRfYXRvbWljKGxvY2ssIG5yLCBhZGRyKSBleHQyX3NldF9iaXQobnIsIGFkZHIpCisKK3N0YXRpYyBfX2lubGluZV9fIGludCBleHQyX3Rlc3RfYml0KGludCBuciwgY29uc3Qgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCit7CisJaW50CQkJbWFzazsKKwljb25zdCB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyCSpBRERSID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgYWRkcjsKKworCUFERFIgKz0gbnIgPj4gMzsKKwltYXNrID0gMSA8PCAobnIgJiAweDA3KTsKKwlyZXR1cm4gKChtYXNrICYgKkFERFIpICE9IDApOworfQorCisjZGVmaW5lIGV4dDJfZmluZF9maXJzdF96ZXJvX2JpdChhZGRyLCBzaXplKSBcCisJZXh0Ml9maW5kX25leHRfemVyb19iaXQoKGFkZHIpLCAoc2l6ZSksIDApCisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgZXh0Ml9maW5kX25leHRfemVyb19iaXQodm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIG9mZnNldCkKK3sKKwl1bnNpZ25lZCBsb25nICpwID0gKCh1bnNpZ25lZCBsb25nICopIGFkZHIpICsgKG9mZnNldCA+PiA1KTsKKwl1bnNpZ25lZCBsb25nIHJlc3VsdCA9IG9mZnNldCAmIH4zMVVMOworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJaWYgKG9mZnNldCA+PSBzaXplKQorCQlyZXR1cm4gc2l6ZTsKKwlzaXplIC09IHJlc3VsdDsKKwlvZmZzZXQgJj0gMzFVTDsKKwlpZihvZmZzZXQpIHsKKwkJLyogV2UgaG9sZCB0aGUgbGl0dGxlIGVuZGlhbiB2YWx1ZSBpbiB0bXAsIGJ1dCB0aGVuIHRoZQorCQkgKiBzaGlmdCBpcyBpbGxlZ2FsLiBTbyB3ZSBjb3VsZCBrZWVwIGEgYmlnIGVuZGlhbiB2YWx1ZQorCQkgKiBpbiB0bXAsIGxpa2UgdGhpczoKKwkJICoKKwkJICogdG1wID0gX19zd2FiMzIoKihwKyspKTsKKwkJICogdG1wIHw9IH4wVUwgPj4gKDMyLW9mZnNldCk7CisJCSAqCisJCSAqIGJ1dCB0aGlzIHdvdWxkIGRlY3JlYXNlIHBlcmZvcm1hbmNlLCBzbyB3ZSBjaGFuZ2UgdGhlCisJCSAqIHNoaWZ0OgorCQkgKi8KKwkJdG1wID0gKihwKyspOworCQl0bXAgfD0gX19zd2FiMzIofjBVTCA+PiAoMzItb2Zmc2V0KSk7CisJCWlmKHNpemUgPCAzMikKKwkJCWdvdG8gZm91bmRfZmlyc3Q7CisJCWlmKH50bXApCisJCQlnb3RvIGZvdW5kX21pZGRsZTsKKwkJc2l6ZSAtPSAzMjsKKwkJcmVzdWx0ICs9IDMyOworCX0KKwl3aGlsZShzaXplICYgfjMxVUwpIHsKKwkJaWYofih0bXAgPSAqKHArKykpKQorCQkJZ290byBmb3VuZF9taWRkbGU7CisJCXJlc3VsdCArPSAzMjsKKwkJc2l6ZSAtPSAzMjsKKwl9CisJaWYoIXNpemUpCisJCXJldHVybiByZXN1bHQ7CisJdG1wID0gKnA7CisKK2ZvdW5kX2ZpcnN0OgorCS8qIHRtcCBpcyBsaXR0bGUgZW5kaWFuLCBzbyB3ZSB3b3VsZCBoYXZlIHRvIHN3YWIgdGhlIHNoaWZ0LAorCSAqIHNlZSBhYm92ZS4gQnV0IHRoZW4gd2UgaGF2ZSB0byBzd2FiIHRtcCBiZWxvdyBmb3IgZmZ6LCBzbworCSAqIHdlIG1pZ2h0IGFzIHdlbGwgZG8gdGhpcyBoZXJlLgorCSAqLworCXJldHVybiByZXN1bHQgKyBmZnooX19zd2FiMzIodG1wKSB8ICh+MFVMIDw8IHNpemUpKTsKK2ZvdW5kX21pZGRsZToKKwlyZXR1cm4gcmVzdWx0ICsgZmZ6KF9fc3dhYjMyKHRtcCkpOworfQorCisvKiBCaXRtYXAgZnVuY3Rpb25zIGZvciB0aGUgbWluaXggZmlsZXN5c3RlbS4gICovCisjZGVmaW5lIG1pbml4X3Rlc3RfYW5kX3NldF9iaXQobnIsYWRkcikgdGVzdF9hbmRfc2V0X2JpdChucixhZGRyKQorI2RlZmluZSBtaW5peF9zZXRfYml0KG5yLGFkZHIpIHNldF9iaXQobnIsYWRkcikKKyNkZWZpbmUgbWluaXhfdGVzdF9hbmRfY2xlYXJfYml0KG5yLGFkZHIpIHRlc3RfYW5kX2NsZWFyX2JpdChucixhZGRyKQorI2RlZmluZSBtaW5peF90ZXN0X2JpdChucixhZGRyKSB0ZXN0X2JpdChucixhZGRyKQorI2RlZmluZSBtaW5peF9maW5kX2ZpcnN0X3plcm9fYml0KGFkZHIsc2l6ZSkgZmluZF9maXJzdF96ZXJvX2JpdChhZGRyLHNpemUpCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNkZWZpbmUgZmxzKHgpIGdlbmVyaWNfZmxzKHgpCisKKyNlbmRpZiAvKiBfSDgzMDBfQklUT1BTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWg4MzAwL2Jvb3RpbmZvLmggYi9pbmNsdWRlL2FzbS1oODMwMC9ib290aW5mby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViZWQ3ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC9ib290aW5mby5oCkBAIC0wLDAgKzEsMiBAQAorCisvKiBOb3RoaW5nIGZvciBoODMwMCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvYnVnLmggYi9pbmNsdWRlL2FzbS1oODMwMC9idWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGRkZjViCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvYnVnLmgKQEAgLTAsMCArMSw0IEBACisjaWZuZGVmIF9IODMwMF9CVUdfSAorI2RlZmluZSBfSDgzMDBfQlVHX0gKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9idWcuaD4KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvYnVncy5oIGIvaW5jbHVkZS9hc20taDgzMDAvYnVncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjYjRhZmIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC9idWdzLmgKQEAgLTAsMCArMSwxNiBAQAorLyoKKyAqICBpbmNsdWRlL2FzbS1oODMwMC9idWdzLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk0ICBMaW51cyBUb3J2YWxkcworICovCisKKy8qCisgKiBUaGlzIGlzIGluY2x1ZGVkIGJ5IGluaXQvbWFpbi5jIHRvIGNoZWNrIGZvciBhcmNoaXRlY3R1cmUtZGVwZW5kZW50IGJ1Z3MuCisgKgorICogTmVlZHM6CisgKgl2b2lkIGNoZWNrX2J1Z3Modm9pZCk7CisgKi8KKworc3RhdGljIHZvaWQgY2hlY2tfYnVncyh2b2lkKQoreworfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvYnl0ZW9yZGVyLmggYi9pbmNsdWRlL2FzbS1oODMwMC9ieXRlb3JkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmU1OTdkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvYnl0ZW9yZGVyLmgKQEAgLTAsMCArMSwxMyBAQAorI2lmbmRlZiBfSDgzMDBfQllURU9SREVSX0gKKyNkZWZpbmUgX0g4MzAwX0JZVEVPUkRFUl9ICisKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKworI2lmIGRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykgfHwgZGVmaW5lZChfX0tFUk5FTF9fKQorIyAgZGVmaW5lIF9fQllURU9SREVSX0hBU19VNjRfXworIyAgZGVmaW5lIF9fU1dBQl82NF9USFJVXzMyX18KKyNlbmRpZgorCisjaW5jbHVkZSA8bGludXgvYnl0ZW9yZGVyL2JpZ19lbmRpYW4uaD4KKworI2VuZGlmIC8qIF9IODMwMF9CWVRFT1JERVJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvY2FjaGUuaCBiL2luY2x1ZGUvYXNtLWg4MzAwL2NhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYzNTAyOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWg4MzAwL2NhY2hlLmgKQEAgLTAsMCArMSwxMiBAQAorI2lmbmRlZiBfX0FSQ0hfSDgzMDBfQ0FDSEVfSAorI2RlZmluZSBfX0FSQ0hfSDgzMDBfQ0FDSEVfSAorCisvKiBieXRlcyBwZXIgTDEgY2FjaGUgbGluZSAqLworI2RlZmluZSAgICAgICAgTDFfQ0FDSEVfQllURVMgIDQKKworLyogbTY4ay1lbGYtZ2NjICAyLjk1LjIgZG9lc24ndCBsaWtlIHRoZXNlICovCisKKyNkZWZpbmUgX19jYWNoZWxpbmVfYWxpZ25lZAorI2RlZmluZSBfX19fY2FjaGVsaW5lX2FsaWduZWQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1oODMwMC9jYWNoZWN0bC5oIGIvaW5jbHVkZS9hc20taDgzMDAvY2FjaGVjdGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDY0MDIyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvY2FjaGVjdGwuaApAQCAtMCwwICsxLDE0IEBACisjaWZuZGVmIF9IODMwMF9DQUNIRUNUTF9ICisjZGVmaW5lIF9IODMwMF9DQUNIRUNUTF9ICisKKy8qIERlZmluaXRpb25zIGZvciB0aGUgY2FjaGVmbHVzaCBzeXN0ZW0gY2FsbC4gICovCisKKyNkZWZpbmUgRkxVU0hfU0NPUEVfTElORSAgICAwCS8qIEZsdXNoIGEgY2FjaGUgbGluZSAqLworI2RlZmluZSBGTFVTSF9TQ09QRV9QQUdFICAgIDAJLyogRmx1c2ggYSBwYWdlICovCisjZGVmaW5lIEZMVVNIX1NDT1BFX0FMTCAgICAgMAkvKiBGbHVzaCB0aGUgd2hvbGUgY2FjaGUgLS0gc3VwZXJ1c2VyIG9ubHkgKi8KKworI2RlZmluZSBGTFVTSF9DQUNIRV9EQVRBICAgIDAJLyogV3JpdGViYWNrIGFuZCBmbHVzaCBkYXRhIGNhY2hlICovCisjZGVmaW5lIEZMVVNIX0NBQ0hFX0lOU04gICAgMAkvKiBGbHVzaCBpbnN0cnVjdGlvbiBjYWNoZSAqLworI2RlZmluZSBGTFVTSF9DQUNIRV9CT1RIICAgIDAJLyogRmx1c2ggYm90aCBjYWNoZXMgKi8KKworI2VuZGlmIC8qIF9IODMwMF9DQUNIRUNUTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1oODMwMC9jYWNoZWZsdXNoLmggYi9pbmNsdWRlL2FzbS1oODMwMC9jYWNoZWZsdXNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU0ZDk1YgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWg4MzAwL2NhY2hlZmx1c2guaApAQCAtMCwwICsxLDM4IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDAyLCBZb3NoaW5vcmkgU2F0byA8eXNhdG9AdXNlcnMuc291cmNlZm9yZ2UuanA+CisgKi8KKworI2lmbmRlZiBfQVNNX0g4MzAwX0NBQ0hFRkxVU0hfSAorI2RlZmluZSBfQU1TX0g4MzAwX0NBQ0hFRkxVU0hfSAorCisvKgorICogQ2FjaGUgaGFuZGxpbmcgZnVuY3Rpb25zCisgKiBObyBDYWNoZSBtZW1vcnkgYWxsIGR1bW15IGZ1bmN0aW9ucworICovCisKKyNkZWZpbmUgZmx1c2hfY2FjaGVfYWxsKCkKKyNkZWZpbmUJZmx1c2hfY2FjaGVfbW0obW0pCisjZGVmaW5lCWZsdXNoX2NhY2hlX3JhbmdlKHZtYSxhLGIpCisjZGVmaW5lCWZsdXNoX2NhY2hlX3BhZ2Uodm1hLHAscGZuKQorI2RlZmluZQlmbHVzaF9kY2FjaGVfcGFnZShwYWdlKQorI2RlZmluZQlmbHVzaF9kY2FjaGVfbW1hcF9sb2NrKG1hcHBpbmcpCisjZGVmaW5lCWZsdXNoX2RjYWNoZV9tbWFwX3VubG9jayhtYXBwaW5nKQorI2RlZmluZQlmbHVzaF9pY2FjaGUoKQorI2RlZmluZQlmbHVzaF9pY2FjaGVfcGFnZSh2bWEscGFnZSkKKyNkZWZpbmUJZmx1c2hfaWNhY2hlX3JhbmdlKHN0YXJ0LGxlbikKKyNkZWZpbmUgZmx1c2hfY2FjaGVfdm1hcChzdGFydCwgZW5kKQorI2RlZmluZSBmbHVzaF9jYWNoZV92dW5tYXAoc3RhcnQsIGVuZCkKKyNkZWZpbmUJY2FjaGVfcHVzaF92KHZhZGRyLGxlbikKKyNkZWZpbmUJY2FjaGVfcHVzaChwYWRkcixsZW4pCisjZGVmaW5lCWNhY2hlX2NsZWFyKHBhZGRyLGxlbikKKworI2RlZmluZQlmbHVzaF9kY2FjaGVfcmFuZ2UoYSxiKQorCisjZGVmaW5lCWZsdXNoX2ljYWNoZV91c2VyX3JhbmdlKHZtYSxwYWdlLGFkZHIsbGVuKQorCisjZGVmaW5lIGNvcHlfdG9fdXNlcl9wYWdlKHZtYSwgcGFnZSwgdmFkZHIsIGRzdCwgc3JjLCBsZW4pIFwKKwltZW1jcHkoZHN0LCBzcmMsIGxlbikKKyNkZWZpbmUgY29weV9mcm9tX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIHZhZGRyLCBkc3QsIHNyYywgbGVuKSBcCisJbWVtY3B5KGRzdCwgc3JjLCBsZW4pCisKKyNlbmRpZiAvKiBfQVNNX0g4MzAwX0NBQ0hFRkxVU0hfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvY2hlY2tzdW0uaCBiL2luY2x1ZGUvYXNtLWg4MzAwL2NoZWNrc3VtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA1MTkzMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWg4MzAwL2NoZWNrc3VtLmgKQEAgLTAsMCArMSwxMDUgQEAKKyNpZm5kZWYgX0g4MzAwX0NIRUNLU1VNX0gKKyNkZWZpbmUgX0g4MzAwX0NIRUNLU1VNX0gKKworLyoKKyAqIGNvbXB1dGVzIHRoZSBjaGVja3N1bSBvZiBhIG1lbW9yeSBibG9jayBhdCBidWZmLCBsZW5ndGggbGVuLAorICogYW5kIGFkZHMgaW4gInN1bSIgKDMyLWJpdCkKKyAqCisgKiByZXR1cm5zIGEgMzItYml0IG51bWJlciBzdWl0YWJsZSBmb3IgZmVlZGluZyBpbnRvIGl0c2VsZgorICogb3IgY3N1bV90Y3B1ZHBfbWFnaWMKKyAqCisgKiB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGggZXZlbiBsZW5ndGhzLCBleGNlcHQKKyAqIGZvciB0aGUgbGFzdCBmcmFnbWVudCwgd2hpY2ggbWF5IGJlIG9kZAorICoKKyAqIGl0J3MgYmVzdCB0byBoYXZlIGJ1ZmYgYWxpZ25lZCBvbiBhIDMyLWJpdCBib3VuZGFyeQorICovCit1bnNpZ25lZCBpbnQgY3N1bV9wYXJ0aWFsKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiBidWZmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgc3VtKTsKKworLyoKKyAqIHRoZSBzYW1lIGFzIGNzdW1fcGFydGlhbCwgYnV0IGNvcGllcyBmcm9tIHNyYyB3aGlsZSBpdAorICogY2hlY2tzdW1zCisgKgorICogaGVyZSBldmVuIG1vcmUgaW1wb3J0YW50IHRvIGFsaWduIHNyYyBhbmQgZHN0IG9uIGEgMzItYml0IChvciBldmVuCisgKiBiZXR0ZXIgNjQtYml0KSBib3VuZGFyeQorICovCisKK3Vuc2lnbmVkIGludCBjc3VtX3BhcnRpYWxfY29weShjb25zdCBjaGFyICpzcmMsIGNoYXIgKmRzdCwgaW50IGxlbiwgaW50IHN1bSk7CisKKworLyoKKyAqIHRoZSBzYW1lIGFzIGNzdW1fcGFydGlhbF9jb3B5LCBidXQgY29waWVzIGZyb20gdXNlciBzcGFjZS4KKyAqCisgKiBoZXJlIGV2ZW4gbW9yZSBpbXBvcnRhbnQgdG8gYWxpZ24gc3JjIGFuZCBkc3Qgb24gYSAzMi1iaXQgKG9yIGV2ZW4KKyAqIGJldHRlciA2NC1iaXQpIGJvdW5kYXJ5CisgKi8KKworZXh0ZXJuIHVuc2lnbmVkIGludCBjc3VtX3BhcnRpYWxfY29weV9mcm9tX3VzZXIoY29uc3QgY2hhciAqc3JjLCBjaGFyICpkc3QsCisJCQkJCQlpbnQgbGVuLCBpbnQgc3VtLCBpbnQgKmNzdW1fZXJyKTsKKworI2RlZmluZSBjc3VtX3BhcnRpYWxfY29weV9ub2NoZWNrKHNyYywgZHN0LCBsZW4sIHN1bSkJXAorCWNzdW1fcGFydGlhbF9jb3B5KChzcmMpLCAoZHN0KSwgKGxlbiksIChzdW0pKQorCit1bnNpZ25lZCBzaG9ydCBpcF9mYXN0X2NzdW0odW5zaWduZWQgY2hhciAqaXBoLCB1bnNpZ25lZCBpbnQgaWhsKTsKKworCisvKgorICoJRm9sZCBhIHBhcnRpYWwgY2hlY2tzdW0KKyAqLworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjc3VtX2ZvbGQodW5zaWduZWQgaW50IHN1bSkKK3sKKwlfX2FzbV9fKCJtb3YubCAlMCxlcjBcblx0IgorCQkiYWRkLncgZTAscjBcblx0IgorCQkieG9yLncgZTAsZTBcblx0IgorCQkicm90eGwudyBlMFxuXHQiCisJCSJhZGQudyBlMCxyMFxuXHQiCisJCSJzdWIudyBlMCxlMFxuXHQiCisJCSJtb3YubCBlcjAsJTAiCisJCTogIj1yIihzdW0pCisJCTogIjAiKHN1bSkKKwkJOiAiZXIwIik7CisJcmV0dXJuIH5zdW07Cit9CisKKworLyoKKyAqIGNvbXB1dGVzIHRoZSBjaGVja3N1bSBvZiB0aGUgVENQL1VEUCBwc2V1ZG8taGVhZGVyCisgKiByZXR1cm5zIGEgMTYtYml0IGNoZWNrc3VtLCBhbHJlYWR5IGNvbXBsZW1lbnRlZAorICovCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50Citjc3VtX3RjcHVkcF9ub2ZvbGQodW5zaWduZWQgbG9uZyBzYWRkciwgdW5zaWduZWQgbG9uZyBkYWRkciwgdW5zaWduZWQgc2hvcnQgbGVuLAorCQkgIHVuc2lnbmVkIHNob3J0IHByb3RvLCB1bnNpZ25lZCBpbnQgc3VtKQoreworCV9fYXNtX18gKCJzdWIubCBlcjAsZXIwXG5cdCIKKwkJICJhZGQubCAlMiwlMFxuXHQiCisJCSAiYWRkeAkjMCxyMGxcblx0IgorCQkgImFkZC5sCSUzLCUwXG5cdCIKKwkJICJhZGR4CSMwLHIwbFxuXHQiCisJCSAiYWRkLmwgJTQsJTBcblx0IgorCQkgImFkZHgJIzAscjBsXG5cdCIKKwkJICJhZGQubAllcjAsJTBcblx0IgorCQkgImJjYwkxZlxuXHQiCisJCSAiaW5jLmwJIzEsJTBcbiIKKwkJICIxOiIKKwkJIDogIj0mciIgKHN1bSkKKwkJIDogIjAiIChzdW0pLCAiciIgKGRhZGRyKSwgInIiIChzYWRkciksICJyIiAobGVuICsgcHJvdG8pCisJCSA6ImVyMCIpOworCXJldHVybiBzdW07Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgaW50Citjc3VtX3RjcHVkcF9tYWdpYyh1bnNpZ25lZCBsb25nIHNhZGRyLCB1bnNpZ25lZCBsb25nIGRhZGRyLCB1bnNpZ25lZCBzaG9ydCBsZW4sCisJCSAgdW5zaWduZWQgc2hvcnQgcHJvdG8sIHVuc2lnbmVkIGludCBzdW0pCit7CisJcmV0dXJuIGNzdW1fZm9sZChjc3VtX3RjcHVkcF9ub2ZvbGQoc2FkZHIsZGFkZHIsbGVuLHByb3RvLHN1bSkpOworfQorCisvKgorICogdGhpcyByb3V0aW5lIGlzIHVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgSVAtbGlrZSBjaGVja3N1bXMsIG1haW5seQorICogaW4gaWNtcC5jCisgKi8KKworZXh0ZXJuIHVuc2lnbmVkIHNob3J0IGlwX2NvbXB1dGVfY3N1bShjb25zdCB1bnNpZ25lZCBjaGFyICogYnVmZiwgaW50IGxlbik7CisKKyNlbmRpZiAvKiBfSDgzMDBfQ0hFQ0tTVU1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvY3B1dGltZS5oIGIvaW5jbHVkZS9hc20taDgzMDAvY3B1dGltZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5MmUxODcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC9jcHV0aW1lLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fSDgzMDBfQ1BVVElNRV9ICisjZGVmaW5lIF9fSDgzMDBfQ1BVVElNRV9ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9jcHV0aW1lLmg+CisKKyNlbmRpZiAvKiBfX0g4MzAwX0NQVVRJTUVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvY3VycmVudC5oIGIvaW5jbHVkZS9hc20taDgzMDAvY3VycmVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3ZDc0ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC9jdXJyZW50LmgKQEAgLTAsMCArMSwyNSBAQAorI2lmbmRlZiBfSDgzMDBfQ1VSUkVOVF9ICisjZGVmaW5lIF9IODMwMF9DVVJSRU5UX0gKKy8qCisgKgljdXJyZW50LmgKKyAqCShDKSBDb3B5cmlnaHQgMjAwMCwgTGluZW8sIERhdmlkIE1jQ3VsbG91Z2ggPGRhdmlkbUBsaW5lby5jb20+CisgKgkoQykgQ29weXJpZ2h0IDIwMDIsIEdyZWcgVW5nZXJlciAoZ2VyZ0BzbmFwZ2Vhci5jb20pCisgKgorICoJcmF0aGVyIHRoYW4gZGVkaWNhdGUgYSByZWdpc3RlciAoYXMgdGhlIG02OGsgc291cmNlIGRvZXMpLCB3ZQorICoJanVzdCBrZWVwIGEgZ2xvYmFsLCAgd2Ugc2hvdWxkIHByb2JhYmx5IGp1c3QgY2hhbmdlIGl0IGFsbCB0byBiZQorICoJY3VycmVudCBhbmQgbG9zZSBfY3VycmVudF90YXNrLgorICovCisKKyNpbmNsdWRlIDxsaW51eC90aHJlYWRfaW5mby5oPgorI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgorCitzdHJ1Y3QgdGFza19zdHJ1Y3Q7CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRhc2tfc3RydWN0ICpnZXRfY3VycmVudCh2b2lkKQoreworCXJldHVybihjdXJyZW50X3RocmVhZF9pbmZvKCktPnRhc2spOworfQorCisjZGVmaW5lCWN1cnJlbnQJZ2V0X2N1cnJlbnQoKQorCisjZW5kaWYgLyogX0g4MzAwX0NVUlJFTlRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvZGJnLmggYi9pbmNsdWRlL2FzbS1oODMwMC9kYmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzZkMWNiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvZGJnLmgKQEAgLTAsMCArMSwyIEBACisjZGVmaW5lIERFQlVHIDEKKyNkZWZpbmUJQlJFQUsgYXNtIHZvbGF0aWxlICgidHJhcCAjMyIpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1oODMwMC9kZWxheS5oIGIvaW5jbHVkZS9hc20taDgzMDAvZGVsYXkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmNjYmJkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvZGVsYXkuaApAQCAtMCwwICsxLDM4IEBACisjaWZuZGVmIF9IODMwMF9ERUxBWV9ICisjZGVmaW5lIF9IODMwMF9ERUxBWV9ICisKKyNpbmNsdWRlIDxhc20vcGFyYW0uaD4KKworLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMiBZb3NoaW5vcmkgU2F0byA8eXNhdG9Ac291cmNlZm9yZ2UuanA+CisgKgorICogRGVsYXkgcm91dGluZXMsIHVzaW5nIGEgcHJlLWNvbXB1dGVkICJsb29wc19wZXJfc2Vjb25kIiB2YWx1ZS4KKyAqLworCitleHRlcm4gX19pbmxpbmVfXyB2b2lkIF9fZGVsYXkodW5zaWduZWQgbG9uZyBsb29wcykKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIjE6XG5cdCIKKwkJCSAgICAgICJkZWMubCAjMSwlMFxuXHQiCisJCQkgICAgICAiYm5lIDFiIgorCQkJICAgICAgOiI9ciIgKGxvb3BzKToiMCIobG9vcHMpKTsKK30KKworLyoKKyAqIFVzZSBvbmx5IGZvciB2ZXJ5IHNtYWxsIGRlbGF5cyAoIDwgMSBtc2VjKS4gIFNob3VsZCBwcm9iYWJseSB1c2UgYQorICogbG9va3VwIHRhYmxlLCByZWFsbHksIGFzIHRoZSBtdWx0aXBsaWNhdGlvbnMgdGFrZSBtdWNoIHRvbyBsb25nIHdpdGgKKyAqIHNob3J0IGRlbGF5cy4gIFRoaXMgaXMgYSAicmVhc29uYWJsZSIgaW1wbGVtZW50YXRpb24sIHRob3VnaCAoYW5kIHRoZQorICogZmlyc3QgY29uc3RhbnQgbXVsdGlwbGljYXRpb25zIGdldHMgb3B0aW1pemVkIGF3YXkgaWYgdGhlIGRlbGF5IGlzCisgKiBhIGNvbnN0YW50KSAgCisgKi8KKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9vcHNfcGVyX2ppZmZ5OworCitleHRlcm4gX19pbmxpbmVfXyB2b2lkIHVkZWxheSh1bnNpZ25lZCBsb25nIHVzZWNzKQoreworCXVzZWNzICo9IDQyOTU7CQkvKiAyKiozMiAvIDEwMDAwMDAgKi8KKwl1c2VjcyAvPSAobG9vcHNfcGVyX2ppZmZ5KkhaKTsKKwlpZiAodXNlY3MpCisJCV9fZGVsYXkodXNlY3MpOworfQorCisjZW5kaWYgLyogX0g4MzAwX0RFTEFZX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWg4MzAwL2RpdjY0LmggYi9pbmNsdWRlL2FzbS1oODMwMC9kaXY2NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjZDk3OGMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC9kaXY2NC5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9kaXY2NC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvZG1hLW1hcHBpbmcuaCBiL2luY2x1ZGUvYXNtLWg4MzAwL2RtYS1tYXBwaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDAwZTQwMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWg4MzAwL2RtYS1tYXBwaW5nLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2RtYS1tYXBwaW5nLWJyb2tlbi5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvZG1hLmggYi9pbmNsdWRlL2FzbS1oODMwMC9kbWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzA4NjgxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvZG1hLmgKQEAgLTAsMCArMSwxNiBAQAorI2lmbmRlZiBfSDgzMDBfRE1BX0gKKyNkZWZpbmUgX0g4MzAwX0RNQV9IIAorIAorI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisvKgorICogU2V0IG51bWJlciBvZiBjaGFubmVscyBvZiBETUEgb24gQ29sZEZpcmUgZm9yIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbnMuCisgKi8KKyNkZWZpbmUgTUFYX0RNQV9DSEFOTkVMUyAwCisjZGVmaW5lIE1BWF9ETUFfQUREUkVTUyBQQUdFX09GRlNFVAorCisvKiBUaGVzZSBhcmUgaW4ga2VybmVsL2RtYS5jOiAqLworZXh0ZXJuIGludCByZXF1ZXN0X2RtYSh1bnNpZ25lZCBpbnQgZG1hbnIsIGNvbnN0IGNoYXIgKmRldmljZV9pZCk7CS8qIHJlc2VydmUgYSBETUEgY2hhbm5lbCAqLworZXh0ZXJuIHZvaWQgZnJlZV9kbWEodW5zaWduZWQgaW50IGRtYW5yKTsJLyogcmVsZWFzZSBpdCBhZ2FpbiAqLworIAorI2VuZGlmIC8qIF9IODMwMF9ETUFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvZWxmLmggYi9pbmNsdWRlL2FzbS1oODMwMC9lbGYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGFmMTU1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvZWxmLmgKQEAgLTAsMCArMSwxMDcgQEAKKyNpZm5kZWYgX19BU01IODMwMF9FTEZfSAorI2RlZmluZSBfX0FTTUg4MzAwX0VMRl9ICisKKy8qCisgKiBFTEYgcmVnaXN0ZXIgZGVmaW5pdGlvbnMuLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisjaW5jbHVkZSA8YXNtL3VzZXIuaD4KKwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGVsZl9ncmVnX3Q7CisKKyNkZWZpbmUgRUxGX05HUkVHIChzaXplb2Yoc3RydWN0IHVzZXJfcmVnc19zdHJ1Y3QpIC8gc2l6ZW9mKGVsZl9ncmVnX3QpKQordHlwZWRlZiBlbGZfZ3JlZ190IGVsZl9ncmVnc2V0X3RbRUxGX05HUkVHXTsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBlbGZfZnByZWdzZXRfdDsKKworLyoKKyAqIFRoaXMgaXMgdXNlZCB0byBlbnN1cmUgd2UgZG9uJ3QgbG9hZCBzb21ldGhpbmcgZm9yIHRoZSB3cm9uZyBhcmNoaXRlY3R1cmUuCisgKi8KKyNkZWZpbmUgZWxmX2NoZWNrX2FyY2goeCkgKCh4KS0+ZV9tYWNoaW5lID09IEVNX0g4XzMwMCkKKworLyoKKyAqIFRoZXNlIGFyZSB1c2VkIHRvIHNldCBwYXJhbWV0ZXJzIGluIHRoZSBjb3JlIGR1bXBzLgorICovCisjZGVmaW5lIEVMRl9DTEFTUwlFTEZDTEFTUzMyCisjZGVmaW5lIEVMRl9EQVRBCUVMRkRBVEEyTVNCCisjZGVmaW5lIEVMRl9BUkNICUVNX0g4XzMwMAorI2lmIGRlZmluZWQoX19IODMwMEhfXykKKyNkZWZpbmUgRUxGX0ZMQUdTICAgICAgIDB4ODEwMDAwCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fSDgzMDBTX18pCisjZGVmaW5lIEVMRl9GTEFHUyAgICAgICAweDgyMDAwMAorI2VuZGlmCisKKyNkZWZpbmUgRUxGX1BMQVRfSU5JVChfcikJX3ItPmVyMSA9IDAKKworI2RlZmluZSBVU0VfRUxGX0NPUkVfRFVNUAorI2RlZmluZSBFTEZfRVhFQ19QQUdFU0laRQk0MDk2CisKKy8qIFRoaXMgaXMgdGhlIGxvY2F0aW9uIHRoYXQgYW4gRVRfRFlOIHByb2dyYW0gaXMgbG9hZGVkIGlmIGV4ZWMnZWQuICBUeXBpY2FsCisgICB1c2Ugb2YgdGhpcyBpcyB0byBpbnZva2UgIi4vbGQuc28gc29tZXByb2ciIHRvIHRlc3Qgb3V0IGEgbmV3IHZlcnNpb24gb2YKKyAgIHRoZSBsb2FkZXIuICBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGl0IGlzIG91dCBvZiB0aGUgd2F5IG9mIHRoZSBwcm9ncmFtCisgICB0aGF0IGl0IHdpbGwgImV4ZWMiLCBhbmQgdGhhdCB0aGVyZSBpcyBzdWZmaWNpZW50IHJvb20gZm9yIHRoZSBicmsuICAqLworCisjZGVmaW5lIEVMRl9FVF9EWU5fQkFTRSAgICAgICAgIDB4RDAwMDAwMDBVTAorCisvKiBUaGlzIHlpZWxkcyBhIG1hc2sgdGhhdCB1c2VyIHByb2dyYW1zIGNhbiB1c2UgdG8gZmlndXJlIG91dCB3aGF0CisgICBpbnN0cnVjdGlvbiBzZXQgdGhpcyBjcHUgc3VwcG9ydHMuICAqLworCisjZGVmaW5lIEVMRl9IV0NBUAkoMCkKKworLyogVGhpcyB5aWVsZHMgYSBzdHJpbmcgdGhhdCBsZC5zbyB3aWxsIHVzZSB0byBsb2FkIGltcGxlbWVudGF0aW9uCisgICBzcGVjaWZpYyBsaWJyYXJpZXMgZm9yIG9wdGltaXphdGlvbi4gIFRoaXMgaXMgbW9yZSBzcGVjaWZpYyBpbgorICAgaW50ZW50IHRoYW4gcG9raW5nIGF0IHVuYW1lIG9yIC9wcm9jL2NwdWluZm8uICAqLworCisjZGVmaW5lIEVMRl9QTEFURk9STSAgKE5VTEwpCisKKyNpZmRlZiBfX0tFUk5FTF9fCisjZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCwgaWJjczIpIHNldF9wZXJzb25hbGl0eShQRVJfTElOVVgpCisjZW5kaWYKKworI2RlZmluZSBSX0g4X05PTkUgICAgICAgMAorI2RlZmluZSBSX0g4X0RJUjMyICAgICAgMQorI2RlZmluZSBSX0g4X0RJUjMyXzI4ICAgMgorI2RlZmluZSBSX0g4X0RJUjMyXzI0ICAgMworI2RlZmluZSBSX0g4X0RJUjMyXzE2ICAgNAorI2RlZmluZSBSX0g4X0RJUjMyVSAgICAgNgorI2RlZmluZSBSX0g4X0RJUjMyVV8yOCAgNworI2RlZmluZSBSX0g4X0RJUjMyVV8yNCAgOAorI2RlZmluZSBSX0g4X0RJUjMyVV8yMCAgOQorI2RlZmluZSBSX0g4X0RJUjMyVV8xNiAxMAorI2RlZmluZSBSX0g4X0RJUjI0ICAgICAxMQorI2RlZmluZSBSX0g4X0RJUjI0XzIwICAxMgorI2RlZmluZSBSX0g4X0RJUjI0XzE2ICAxMworI2RlZmluZSBSX0g4X0RJUjI0VSAgICAxNAorI2RlZmluZSBSX0g4X0RJUjI0VV8yMCAxNQorI2RlZmluZSBSX0g4X0RJUjI0VV8xNiAxNgorI2RlZmluZSBSX0g4X0RJUjE2ICAgICAxNworI2RlZmluZSBSX0g4X0RJUjE2VSAgICAxOAorI2RlZmluZSBSX0g4X0RJUjE2U18zMiAxOQorI2RlZmluZSBSX0g4X0RJUjE2U18yOCAyMAorI2RlZmluZSBSX0g4X0RJUjE2U18yNCAyMQorI2RlZmluZSBSX0g4X0RJUjE2U18yMCAyMgorI2RlZmluZSBSX0g4X0RJUjE2UyAgICAyMworI2RlZmluZSBSX0g4X0RJUjggICAgICAyNAorI2RlZmluZSBSX0g4X0RJUjhVICAgICAyNQorI2RlZmluZSBSX0g4X0RJUjhaXzMyICAyNgorI2RlZmluZSBSX0g4X0RJUjhaXzI4ICAyNworI2RlZmluZSBSX0g4X0RJUjhaXzI0ICAyOAorI2RlZmluZSBSX0g4X0RJUjhaXzIwICAyOQorI2RlZmluZSBSX0g4X0RJUjhaXzE2ICAzMAorI2RlZmluZSBSX0g4X1BDUkVMMTYgICAzMQorI2RlZmluZSBSX0g4X1BDUkVMOCAgICAzMgorI2RlZmluZSBSX0g4X0JQT1MgICAgICAzMworI2RlZmluZSBSX0g4X1BDUkVMMzIgICAzNAorI2RlZmluZSBSX0g4X0dPVDMyTyAgICAzNQorI2RlZmluZSBSX0g4X0dPVDE2TyAgICAzNgorI2RlZmluZSBSX0g4X0RJUjE2QTggICA1OQorI2RlZmluZSBSX0g4X0RJUjE2UjggICA2MAorI2RlZmluZSBSX0g4X0RJUjI0QTggICA2MQorI2RlZmluZSBSX0g4X0RJUjI0UjggICA2MgorI2RlZmluZSBSX0g4X0RJUjMyQTE2ICA2MworI2RlZmluZSBSX0g4X0FCUzMyICAgICA2NQorI2RlZmluZSBSX0g4X0FCUzMyQTE2IDEyNworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWg4MzAwL2Vycm5vLmggYi9pbmNsdWRlL2FzbS1oODMwMC9lcnJuby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjMmY1NjQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC9lcnJuby5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfSDgzMDBfRVJSTk9fSAorI2RlZmluZSBfSDgzMDBfRVJSTk9fSAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZXJybm8uaD4KKworI2VuZGlmIC8qIF9IODMwMF9FUlJOT19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1oODMwMC9mY250bC5oIGIvaW5jbHVkZS9hc20taDgzMDAvZmNudGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTUzNTBhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvZmNudGwuaApAQCAtMCwwICsxLDg3IEBACisjaWZuZGVmIF9IODMwMF9GQ05UTF9ICisjZGVmaW5lIF9IODMwMF9GQ05UTF9ICisKKy8qIG9wZW4vZmNudGwgLSBPX1NZTkMgaXMgb25seSBpbXBsZW1lbnRlZCBvbiBibG9ja3MgZGV2aWNlcyBhbmQgb24gZmlsZXMKKyAgIGxvY2F0ZWQgb24gYW4gZXh0MiBmaWxlIHN5c3RlbSAqLworI2RlZmluZSBPX0FDQ01PREUJICAwMDAzCisjZGVmaW5lIE9fUkRPTkxZCSAgICAwMAorI2RlZmluZSBPX1dST05MWQkgICAgMDEKKyNkZWZpbmUgT19SRFdSCQkgICAgMDIKKyNkZWZpbmUgT19DUkVBVAkJICAwMTAwCS8qIG5vdCBmY250bCAqLworI2RlZmluZSBPX0VYQ0wJCSAgMDIwMAkvKiBub3QgZmNudGwgKi8KKyNkZWZpbmUgT19OT0NUVFkJICAwNDAwCS8qIG5vdCBmY250bCAqLworI2RlZmluZSBPX1RSVU5DCQkgMDEwMDAJLyogbm90IGZjbnRsICovCisjZGVmaW5lIE9fQVBQRU5ECSAwMjAwMAorI2RlZmluZSBPX05PTkJMT0NLCSAwNDAwMAorI2RlZmluZSBPX05ERUxBWQlPX05PTkJMT0NLCisjZGVmaW5lIE9fU1lOQwkJMDEwMDAwCisjZGVmaW5lIEZBU1lOQwkJMDIwMDAwCS8qIGZjbnRsLCBmb3IgQlNEIGNvbXBhdGliaWxpdHkgKi8KKyNkZWZpbmUgT19ESVJFQ1RPUlkJMDQwMDAwCS8qIG11c3QgYmUgYSBkaXJlY3RvcnkgKi8KKyNkZWZpbmUgT19OT0ZPTExPVwkwMTAwMDAwCS8qIGRvbid0IGZvbGxvdyBsaW5rcyAqLworI2RlZmluZSBPX0RJUkVDVAkwMjAwMDAwCS8qIGRpcmVjdCBkaXNrIGFjY2VzcyBoaW50IC0gY3VycmVudGx5IGlnbm9yZWQgKi8KKyNkZWZpbmUgT19MQVJHRUZJTEUJMDQwMDAwMAorI2RlZmluZSBPX05PQVRJTUUJMDEwMDAwMDAKKworI2RlZmluZSBGX0RVUEZECQkwCS8qIGR1cCAqLworI2RlZmluZSBGX0dFVEZECQkxCS8qIGdldCBjbG9zZV9vbl9leGVjICovCisjZGVmaW5lIEZfU0VURkQJCTIJLyogc2V0L2NsZWFyIGNsb3NlX29uX2V4ZWMgKi8KKyNkZWZpbmUgRl9HRVRGTAkJMwkvKiBnZXQgZmlsZS0+Zl9mbGFncyAqLworI2RlZmluZSBGX1NFVEZMCQk0CS8qIHNldCBmaWxlLT5mX2ZsYWdzICovCisjZGVmaW5lIEZfR0VUTEsJCTUKKyNkZWZpbmUgRl9TRVRMSwkJNgorI2RlZmluZSBGX1NFVExLVwk3CisKKyNkZWZpbmUgRl9TRVRPV04JOAkvKiAgZm9yIHNvY2tldHMuICovCisjZGVmaW5lIEZfR0VUT1dOCTkJLyogIGZvciBzb2NrZXRzLiAqLworI2RlZmluZSBGX1NFVFNJRwkxMAkvKiAgZm9yIHNvY2tldHMuICovCisjZGVmaW5lIEZfR0VUU0lHCTExCS8qICBmb3Igc29ja2V0cy4gKi8KKworI2RlZmluZSBGX0dFVExLNjQJMTIJLyogIHVzaW5nICdzdHJ1Y3QgZmxvY2s2NCcgKi8KKyNkZWZpbmUgRl9TRVRMSzY0CTEzCisjZGVmaW5lIEZfU0VUTEtXNjQJMTQKKworLyogZm9yIEZfW0dFVHxTRVRdRkwgKi8KKyNkZWZpbmUgRkRfQ0xPRVhFQwkxCS8qIGFjdHVhbGx5IGFueXRoaW5nIHdpdGggbG93IGJpdCBzZXQgZ29lcyAqLworCisvKiBmb3IgcG9zaXggZmNudGwoKSBhbmQgbG9ja2YoKSAqLworI2RlZmluZSBGX1JETENLCQkwCisjZGVmaW5lIEZfV1JMQ0sJCTEKKyNkZWZpbmUgRl9VTkxDSwkJMgorCisvKiBmb3Igb2xkIGltcGxlbWVudGF0aW9uIG9mIGJzZCBmbG9jayAoKSAqLworI2RlZmluZSBGX0VYTENLCQk0CS8qIG9yIDMgKi8KKyNkZWZpbmUgRl9TSExDSwkJOAkvKiBvciA0ICovCisKKy8qIGZvciBsZWFzZXMgKi8KKyNkZWZpbmUgRl9JTlBST0dSRVNTCTE2CisKKy8qIG9wZXJhdGlvbnMgZm9yIGJzZCBmbG9jaygpLCBhbHNvIHVzZWQgYnkgdGhlIGtlcm5lbCBpbXBsZW1lbnRhdGlvbiAqLworI2RlZmluZSBMT0NLX1NICQkxCS8qIHNoYXJlZCBsb2NrICovCisjZGVmaW5lIExPQ0tfRVgJCTIJLyogZXhjbHVzaXZlIGxvY2sgKi8KKyNkZWZpbmUgTE9DS19OQgkJNAkvKiBvcidkIHdpdGggb25lIG9mIHRoZSBhYm92ZSB0byBwcmV2ZW50CisJCQkJICAgYmxvY2tpbmcgKi8KKyNkZWZpbmUgTE9DS19VTgkJOAkvKiByZW1vdmUgbG9jayAqLworCisjZGVmaW5lIExPQ0tfTUFORAkzMgkvKiBUaGlzIGlzIGEgbWFuZGF0b3J5IGZsb2NrICovCisjZGVmaW5lIExPQ0tfUkVBRAk2NAkvKiAuLi4gV2hpY2ggYWxsb3dzIGNvbmN1cnJlbnQgcmVhZCBvcGVyYXRpb25zICovCisjZGVmaW5lIExPQ0tfV1JJVEUJMTI4CS8qIC4uLiBXaGljaCBhbGxvd3MgY29uY3VycmVudCB3cml0ZSBvcGVyYXRpb25zICovCisjZGVmaW5lIExPQ0tfUlcJCTE5MgkvKiAuLi4gV2hpY2ggYWxsb3dzIGNvbmN1cnJlbnQgcmVhZCAmIHdyaXRlIG9wcyAqLworCitzdHJ1Y3QgZmxvY2sgeworCXNob3J0IGxfdHlwZTsKKwlzaG9ydCBsX3doZW5jZTsKKwlvZmZfdCBsX3N0YXJ0OworCW9mZl90IGxfbGVuOworCXBpZF90IGxfcGlkOworfTsKKworc3RydWN0IGZsb2NrNjQgeworCXNob3J0ICBsX3R5cGU7CisJc2hvcnQgIGxfd2hlbmNlOworCWxvZmZfdCBsX3N0YXJ0OworCWxvZmZfdCBsX2xlbjsKKwlwaWRfdCAgbF9waWQ7Cit9OworCisjZGVmaW5lIEZfTElOVVhfU1BFQ0lGSUNfQkFTRQkxMDI0CisjZW5kaWYgLyogX0g4MzAwX0ZDTlRMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWg4MzAwL2ZsYXQuaCBiL2luY2x1ZGUvYXNtLWg4MzAwL2ZsYXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjBlZWU3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvZmxhdC5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1oODMwMC9mbGF0LmggLS0gdUNsaW51eCBmbGF0LWZvcm1hdCBleGVjdXRhYmxlcworICovCisKKyNpZm5kZWYgX19IODMwMF9GTEFUX0hfXworI2RlZmluZSBfX0g4MzAwX0ZMQVRfSF9fCisKKyNkZWZpbmUJZmxhdF9zdGFja19hbGlnbihzcCkJCQkvKiBub3RoaW5nIG5lZWRlZCAqLworI2RlZmluZQlmbGF0X2FyZ3ZwX2VudnBfb25fc3RhY2soKQkJMQorI2RlZmluZQlmbGF0X29sZF9yYW1fZmxhZyhmbGFncykJCTEKKyNkZWZpbmUJZmxhdF9yZWxvY192YWxpZChyZWxvYywgc2l6ZSkJCSgocmVsb2MpIDw9IChzaXplKSkKKworLyoKKyAqIG9uIHRoZSBIOCBhIGNvdXBsZSBvZiB0aGUgcmVsb2NhdGlvbnMgaGF2ZSBhbiBpbnN0cnVjdGlvbiBpbiB0aGUKKyAqIHRvcCBieXRlLiAgQXMgdGhlcmUgY2FuIG9ubHkgYmUgMjRiaXRzIG9mIGFkZHJlc3Mgc3BhY2UsICB3ZSBqdXN0CisgKiBhbHdheXMgcHJlc2VydmUgdGhhdCA4Yml0cyBhdCB0aGUgdG9wLCAgd2hlbiBpdCBpc24ndCBhbiBpbnN0cnVjdGlvbgorICogaXMgaXMgMCAoZGF2aWRtQHNuYXBnZWFyLmNvbSkKKyAqLworCisjZGVmaW5lCWZsYXRfZ2V0X3JlbG9jYXRlX2FkZHIocmVsKQkJKHJlbCkKKyNkZWZpbmUgZmxhdF9nZXRfYWRkcl9mcm9tX3JwKHJwLCByZWx2YWwsIGZsYWdzKSBcCisgICAgICAgIChnZXRfdW5hbGlnbmVkKHJwKSAmICgoZmxhZ3MgJiBGTEFUX0ZMQUdfR09UUElDKSA/IDB4ZmZmZmZmZmY6IDB4MDBmZmZmZmYpKQorI2RlZmluZSBmbGF0X3B1dF9hZGRyX2F0X3JwKHJwLCBhZGRyLCByZWwpIFwKKwlwdXRfdW5hbGlnbmVkICgoKCooY2hhciAqKShycCkpIDw8IDI0KSB8ICgoYWRkcikgJiAweDAwZmZmZmZmKSwgcnApCisKKyNlbmRpZiAvKiBfX0g4MzAwX0ZMQVRfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1oODMwMC9mcHUuaCBiL2luY2x1ZGUvYXNtLWg4MzAwL2ZwdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmYzQxNmUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC9mcHUuaApAQCAtMCwwICsxIEBACisvKiBOb3RoaW5nIGRvICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1oODMwMC9ncGlvLmggYi9pbmNsdWRlL2FzbS1oODMwMC9ncGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTcxNGYwYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWg4MzAwL2dwaW8uaApAQCAtMCwwICsxLDUyIEBACisjaWZuZGVmIF9IODMwMF9HUElPX0gKKyNkZWZpbmUgX0g4MzAwX0dQSU9fSAorCisjZGVmaW5lIEg4MzAwX0dQSU9fUDEgMAorI2RlZmluZSBIODMwMF9HUElPX1AyIDEKKyNkZWZpbmUgSDgzMDBfR1BJT19QMyAyCisjZGVmaW5lIEg4MzAwX0dQSU9fUDQgMworI2RlZmluZSBIODMwMF9HUElPX1A1IDQKKyNkZWZpbmUgSDgzMDBfR1BJT19QNiA1CisjZGVmaW5lIEg4MzAwX0dQSU9fUDcgNgorI2RlZmluZSBIODMwMF9HUElPX1A4IDcKKyNkZWZpbmUgSDgzMDBfR1BJT19QOSA4CisjZGVmaW5lIEg4MzAwX0dQSU9fUEEgOQorI2RlZmluZSBIODMwMF9HUElPX1BCIDEwCisjZGVmaW5lIEg4MzAwX0dQSU9fUEMgMTEKKyNkZWZpbmUgSDgzMDBfR1BJT19QRCAxMgorI2RlZmluZSBIODMwMF9HUElPX1BFIDEzCisjZGVmaW5lIEg4MzAwX0dQSU9fUEYgMTQKKyNkZWZpbmUgSDgzMDBfR1BJT19QRyAxNQorI2RlZmluZSBIODMwMF9HUElPX1BIIDE2CisKKyNkZWZpbmUgSDgzMDBfR1BJT19CNyAweDgwCisjZGVmaW5lIEg4MzAwX0dQSU9fQjYgMHg0MAorI2RlZmluZSBIODMwMF9HUElPX0I1IDB4MjAKKyNkZWZpbmUgSDgzMDBfR1BJT19CNCAweDEwCisjZGVmaW5lIEg4MzAwX0dQSU9fQjMgMHgwOAorI2RlZmluZSBIODMwMF9HUElPX0IyIDB4MDQKKyNkZWZpbmUgSDgzMDBfR1BJT19CMSAweDAyCisjZGVmaW5lIEg4MzAwX0dQSU9fQjAgMHgwMQorCisjZGVmaW5lIEg4MzAwX0dQSU9fSU5QVVQgMAorI2RlZmluZSBIODMwMF9HUElPX09VVFBVVCAxCisKKyNkZWZpbmUgSDgzMDBfR1BJT19SRVNFUlZFKHBvcnQsIGJpdHMpIFwKKyAgICAgICAgaDgzMDBfcmVzZXJ2ZWRfZ3Bpbyhwb3J0LCBiaXRzKQorCisjZGVmaW5lIEg4MzAwX0dQSU9fRlJFRShwb3J0LCBiaXRzKSBcCisgICAgICAgIGg4MzAwX2ZyZWVfZ3Bpbyhwb3J0LCBiaXRzKQorCisjZGVmaW5lIEg4MzAwX0dQSU9fRERSKHBvcnQsIGJpdCwgZGlyKSBcCisgICAgICAgIGg4MzAwX3NldF9ncGlvX2RpcigoKHBvcnQpIDw8IDgpIHwgKGJpdCksIGRpcikKKworI2RlZmluZSBIODMwMF9HUElPX0dFVERJUihwb3J0LCBiaXQpIFwKKyAgICAgICAgaDgzMDBfZ2V0X2dwaW9fZGlyKCgocG9ydCkgPDwgOCkgfCAoYml0KSkKKworZXh0ZXJuIGludCBoODMwMF9yZXNlcnZlZF9ncGlvKGludCBwb3J0LCBpbnQgYml0cyk7CitleHRlcm4gaW50IGg4MzAwX2ZyZWVfZ3BpbyhpbnQgcG9ydCwgaW50IGJpdHMpOworZXh0ZXJuIGludCBoODMwMF9zZXRfZ3Bpb19kaXIoaW50IHBvcnRfYml0LCBpbnQgZGlyKTsKK2V4dGVybiBpbnQgaDgzMDBfZ2V0X2dwaW9fZGlyKGludCBwb3J0X2JpdCk7CitleHRlcm4gaW50IGg4MzAwX2luaXRfZ3Bpbyh2b2lkKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1oODMwMC9oYXJkaXJxLmggYi9pbmNsdWRlL2FzbS1oODMwMC9oYXJkaXJxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk2MWJmZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWg4MzAwL2hhcmRpcnEuaApAQCAtMCwwICsxLDI3IEBACisjaWZuZGVmIF9fSDgzMDBfSEFSRElSUV9ICisjZGVmaW5lIF9fSDgzMDBfSEFSRElSUV9ICisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQgX19zb2Z0aXJxX3BlbmRpbmc7Cit9IF9fX19jYWNoZWxpbmVfYWxpZ25lZCBpcnFfY3B1c3RhdF90OworCisjaW5jbHVkZSA8bGludXgvaXJxX2NwdXN0YXQuaD4JLyogU3RhbmRhcmQgbWFwcGluZ3MgZm9yIGlycV9jcHVzdGF0X3QgYWJvdmUgKi8KKworI2RlZmluZSBIQVJESVJRX0JJVFMJOAorCisvKgorICogVGhlIGhhcmRpcnEgbWFzayBoYXMgdG8gYmUgbGFyZ2UgZW5vdWdoIHRvIGhhdmUKKyAqIHNwYWNlIGZvciBwb3RlbnRpYWxseSBhbGwgSVJRIHNvdXJjZXMgaW4gdGhlIHN5c3RlbQorICogbmVzdGluZyBvbiBhIHNpbmdsZSBDUFU6CisgKi8KKyNpZiAoMSA8PCBIQVJESVJRX0JJVFMpIDwgTlJfSVJRUworIyBlcnJvciBIQVJESVJRX0JJVFMgaXMgdG9vIGxvdyEKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWg4MzAwL2hkcmVnLmggYi9pbmNsdWRlL2FzbS1oODMwMC9oZHJlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2ZDBjMDYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC9oZHJlZy5oCkBAIC0wLDAgKzEsMTUgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20taDgzMDAvaGRyZWcuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTQtMTk5NiAgTGludXMgVG9ydmFsZHMgJiBhdXRob3JzCisgKi8KKworI3dhcm5pbmcgdGhpcyBmaWxlIGlzIG9ic29sZXRlLCBwbGVhc2UgZG8gbm90IHVzZSBpdAorCisjaWZuZGVmIF9IODMwMF9IRFJFR19ICisjZGVmaW5lIF9IODMwMF9IRFJFR19ICisKK3R5cGVkZWYgdW5zaWduZWQgaW50ICAgcTQwaWRlX2lvcmVnX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgKiBpZGVfaW9yZWdfdDsKKworI2VuZGlmIC8qIF9IODMwMF9IRFJFR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1oODMwMC9od19pcnEuaCBiL2luY2x1ZGUvYXNtLWg4MzAwL2h3X2lycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NWE1YTEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC9od19pcnEuaApAQCAtMCwwICsxIEBACisvKiBEbyBOb3RoaW5nICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1oODMwMC9pZGUuaCBiL2luY2x1ZGUvYXNtLWg4MzAwL2lkZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4NTM1Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC9pZGUuaApAQCAtMCwwICsxLDI2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1oODMwMC9pZGUuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTQtMTk5NiAgTGludXMgVG9ydmFsZHMgJiBhdXRob3JzCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxICAgICAgIExpbmVvIEluYy4sIGRhdmlkbUBzbmFwZ2Vhci5jb20KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDIgICAgICAgR3JlZyBVbmdlcmVyIChnZXJnQHNuYXBnZWFyLmNvbSkKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDIgICAgICAgWW9zaGlub3JpIFNhdG8gKHlzYXRvQHVzZXJzLnNvdXJjZWZvcmdlLmpwKQorICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfSDgzMDBfSURFX0gKKyNkZWZpbmUgX0g4MzAwX0lERV9ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZmRlZiBfX0tFUk5FTF9fCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBNQVhfSFdJRlMJMQorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvaWRlX2lvcHMuaD4KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9IODMwMF9JREVfSCAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1oODMwMC9pby5oIGIvaW5jbHVkZS9hc20taDgzMDAvaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzczZTM3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvaW8uaApAQCAtMCwwICsxLDMzMyBAQAorI2lmbmRlZiBfSDgzMDBfSU9fSAorI2RlZmluZSBfSDgzMDBfSU9fSAorCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL3ZpcnRjb252ZXJ0Lmg+CisKKyNpZiBkZWZpbmVkKENPTkZJR19IODMwMDcpIHx8IGRlZmluZWQoQ09ORklHX0g4MzA2OCkKKyNpbmNsdWRlIDxhc20vcmVnczMwNnguaD4KKyNlbGlmIGRlZmluZWQoQ09ORklHX0g4UzI2NzgpCisjaW5jbHVkZSA8YXNtL3JlZ3MyNjd4Lmg+CisjZWxzZQorI2Vycm9yIFVOS05PV04gQ1BVIFRZUEUKKyNlbmRpZgorCisKKy8qCisgKiBUaGVzZSBhcmUgZm9yIElTQS9QQ0kgc2hhcmVkIG1lbW9yeSBfb25seV8gYW5kIHNob3VsZCBuZXZlciBiZSB1c2VkCisgKiBvbiBhbnkgb3RoZXIgdHlwZSBvZiBtZW1vcnksIGluY2x1ZGluZyBab3JybyBtZW1vcnkuIFRoZXkgYXJlIG1lYW50IHRvCisgKiBhY2Nlc3MgdGhlIGJ1cyBpbiB0aGUgYnVzIGJ5dGUgb3JkZXIgd2hpY2ggaXMgbGl0dGxlLWVuZGlhbiEuCisgKgorICogcmVhZFgvd3JpdGVYKCkgYXJlIHVzZWQgdG8gYWNjZXNzIG1lbW9yeSBtYXBwZWQgZGV2aWNlcy4gT24gc29tZQorICogYXJjaGl0ZWN0dXJlcyB0aGUgbWVtb3J5IG1hcHBlZCBJTyBzdHVmZiBuZWVkcyB0byBiZSBhY2Nlc3NlZAorICogZGlmZmVyZW50bHkuIE9uIHRoZSBtNjhrIGFyY2hpdGVjdHVyZSwgd2UganVzdCByZWFkL3dyaXRlIHRoZQorICogbWVtb3J5IGxvY2F0aW9uIGRpcmVjdGx5LgorICovCisvKiArK3JvbWFuOiBUaGUgYXNzaWdubWVudHMgdG8gdGVtcC4gdmFycyBhdm9pZCB0aGF0IGdjYyBzb21ldGltZXMgZ2VuZXJhdGVzCisgKiB0d28gYWNjZXNzZXMgdG8gbWVtb3J5LCB3aGljaCBtYXkgYmUgdW5kZXNpcmVhYmxlIGZvciBzb21lIGRldmljZXMuCisgKi8KKworLyoKKyAqIHN3YXAgZnVuY3Rpb25zIGFyZSBzb21ldGltZXMgbmVlZGVkIHRvIGludGVyZmFjZSBsaXR0bGUtZW5kaWFuIGhhcmR3YXJlCisgKi8KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBfc3dhcHcodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgdikKK3sKKyNpZm5kZWYgSDgzMDBfSU9fTk9TV0FQCisJdW5zaWduZWQgc2hvcnQgcjsKKwlfX2FzbV9fKCJ4b3IuYiAldzAsJXgwXG5cdCIKKwkJInhvci5iICV4MCwldzBcblx0IgorCQkieG9yLmIgJXcwLCV4MCIKKwkJOiI9ciIocikKKwkJOiIwIih2KSk7CisJcmV0dXJuIHI7CisjZWxzZQorCXJldHVybiB2OworI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfc3dhcGwodm9sYXRpbGUgdW5zaWduZWQgbG9uZyB2KQoreworI2lmbmRlZiBIODMwMF9JT19OT1NXQVAKKwl1bnNpZ25lZCBsb25nIHI7CisJX19hc21fXygieG9yLmIgJXcwLCV4MFxuXHQiCisJCSJ4b3IuYiAleDAsJXcwXG5cdCIKKwkJInhvci5iICV3MCwleDBcblx0IgorCQkieG9yLncgJWUwLCVmMFxuXHQiCisJCSJ4b3IudyAlZjAsJWUwXG5cdCIKKwkJInhvci53ICVlMCwlZjBcblx0IgorCQkieG9yLmIgJXcwLCV4MFxuXHQiCisJCSJ4b3IuYiAleDAsJXcwXG5cdCIKKwkJInhvci5iICV3MCwleDAiCisJCToiPXIiKHIpCisJCToiMCIodikpOworCXJldHVybiByOworI2Vsc2UKKwlyZXR1cm4gdjsKKyNlbmRpZgorfQorCisjZGVmaW5lIHJlYWRiKGFkZHIpIFwKKyAgICAoeyB1bnNpZ25lZCBjaGFyIF9fdiA9IFwKKyAgICAgKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKCh1bnNpZ25lZCBsb25nKShhZGRyKSAmIDB4MDBmZmZmZmYpOyBcCisgICAgIF9fdjsgfSkKKyNkZWZpbmUgcmVhZHcoYWRkcikgXAorICAgICh7IHVuc2lnbmVkIHNob3J0IF9fdiA9IFwKKyAgICAgKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgodW5zaWduZWQgbG9uZykoYWRkcikgJiAweDAwZmZmZmZmKTsgXAorICAgICBfX3Y7IH0pCisjZGVmaW5lIHJlYWRsKGFkZHIpIFwKKyAgICAoeyB1bnNpZ25lZCBsb25nIF9fdiA9IFwKKyAgICAgKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKCh1bnNpZ25lZCBsb25nKShhZGRyKSAmIDB4MDBmZmZmZmYpOyBcCisgICAgIF9fdjsgfSkKKworI2RlZmluZSB3cml0ZWIoYixhZGRyKSAodm9pZCkoKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgbG9uZykoYWRkcikgJiAweDAwZmZmZmZmKSkgPSAoYikpCisjZGVmaW5lIHdyaXRldyhiLGFkZHIpICh2b2lkKSgoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgbG9uZykoYWRkcikgJiAweDAwZmZmZmZmKSkgPSAoYikpCisjZGVmaW5lIHdyaXRlbChiLGFkZHIpICh2b2lkKSgoKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBsb25nKShhZGRyKSAmIDB4MDBmZmZmZmYpKSA9IChiKSkKKyNkZWZpbmUgcmVhZGJfcmVsYXhlZChhZGRyKSByZWFkYihhZGRyKQorI2RlZmluZSByZWFkd19yZWxheGVkKGFkZHIpIHJlYWR3KGFkZHIpCisjZGVmaW5lIHJlYWRsX3JlbGF4ZWQoYWRkcikgcmVhZGwoYWRkcikKKworI2RlZmluZSBfX3Jhd19yZWFkYiByZWFkYgorI2RlZmluZSBfX3Jhd19yZWFkdyByZWFkdworI2RlZmluZSBfX3Jhd19yZWFkbCByZWFkbAorI2RlZmluZSBfX3Jhd193cml0ZWIgd3JpdGViCisjZGVmaW5lIF9fcmF3X3dyaXRldyB3cml0ZXcKKyNkZWZpbmUgX19yYXdfd3JpdGVsIHdyaXRlbAorCitzdGF0aWMgaW5saW5lIGludCBoODMwMF9idXN3aWR0aCh1bnNpZ25lZCBpbnQgYWRkcikKK3sKKwlyZXR1cm4gKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKUFCV0NSICYgKDEgPDwgKChhZGRyID4+IDIxKSAmIDcpKSkgPT0gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGlvX291dHNiKHVuc2lnbmVkIGludCBhZGRyLCBjb25zdCB2b2lkICpidWYsIGludCBsZW4pCit7CisJdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgKmFwX2IgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSBhZGRyOworCXZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICphcF93ID0gKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopIGFkZHI7CisJdW5zaWduZWQgY2hhciAqYnAgPSAodW5zaWduZWQgY2hhciAqKSBidWY7CisKKwlpZihoODMwMF9idXN3aWR0aChhZGRyKSAmJiAoYWRkciAmIDEpKSB7CisJCXdoaWxlIChsZW4tLSkKKwkJCSphcF93ID0gKmJwKys7CisJfSBlbHNlIHsKKwkJd2hpbGUgKGxlbi0tKQorCQkJKmFwX2IgPSAqYnArKzsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpb19vdXRzdyh1bnNpZ25lZCBpbnQgYWRkciwgY29uc3Qgdm9pZCAqYnVmLCBpbnQgbGVuKQoreworCXZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICphcCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSBhZGRyOworCXVuc2lnbmVkIHNob3J0ICpicCA9ICh1bnNpZ25lZCBzaG9ydCAqKSBidWY7CisJd2hpbGUgKGxlbi0tKQorCQkqYXAgPSBfc3dhcHcoKmJwKyspOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW9fb3V0c2wodW5zaWduZWQgaW50IGFkZHIsIGNvbnN0IHZvaWQgKmJ1ZiwgaW50IGxlbikKK3sKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphcCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopIGFkZHI7CisJdW5zaWduZWQgbG9uZyAqYnAgPSAodW5zaWduZWQgbG9uZyAqKSBidWY7CisJd2hpbGUgKGxlbi0tKQorCQkqYXAgPSBfc3dhcGwoKmJwKyspOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW9fb3V0c3dfbm9zd2FwKHVuc2lnbmVkIGludCBhZGRyLCBjb25zdCB2b2lkICpidWYsIGludCBsZW4pCit7CisJdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKmFwID0gKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopIGFkZHI7CisJdW5zaWduZWQgc2hvcnQgKmJwID0gKHVuc2lnbmVkIHNob3J0ICopIGJ1ZjsKKwl3aGlsZSAobGVuLS0pCisJCSphcCA9ICpicCsrOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW9fb3V0c2xfbm9zd2FwKHVuc2lnbmVkIGludCBhZGRyLCBjb25zdCB2b2lkICpidWYsIGludCBsZW4pCit7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYXAgPSAodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSBhZGRyOworCXVuc2lnbmVkIGxvbmcgKmJwID0gKHVuc2lnbmVkIGxvbmcgKikgYnVmOworCXdoaWxlIChsZW4tLSkKKwkJKmFwID0gKmJwKys7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpb19pbnNiKHVuc2lnbmVkIGludCBhZGRyLCB2b2lkICpidWYsIGludCBsZW4pCit7CisJdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgKmFwX2I7CisJdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKmFwX3c7CisJdW5zaWduZWQgY2hhciAqYnAgPSAodW5zaWduZWQgY2hhciAqKSBidWY7CisKKwlpZihoODMwMF9idXN3aWR0aChhZGRyKSkgeworCQlhcF93ID0gKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKGFkZHIgJiB+MSk7CisJCXdoaWxlIChsZW4tLSkKKwkJCSpicCsrID0gKmFwX3cgJiAweGZmOworCX0gZWxzZSB7CisJCWFwX2IgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKWFkZHI7CisJCXdoaWxlIChsZW4tLSkKKwkJCSpicCsrID0gKmFwX2I7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW9faW5zdyh1bnNpZ25lZCBpbnQgYWRkciwgdm9pZCAqYnVmLCBpbnQgbGVuKQoreworCXZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICphcCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSBhZGRyOworCXVuc2lnbmVkIHNob3J0ICpicCA9ICh1bnNpZ25lZCBzaG9ydCAqKSBidWY7CisJd2hpbGUgKGxlbi0tKQorCQkqYnArKyA9IF9zd2FwdygqYXApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW9faW5zbCh1bnNpZ25lZCBpbnQgYWRkciwgdm9pZCAqYnVmLCBpbnQgbGVuKQoreworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFwID0gKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikgYWRkcjsKKwl1bnNpZ25lZCBsb25nICpicCA9ICh1bnNpZ25lZCBsb25nICopIGJ1ZjsKKwl3aGlsZSAobGVuLS0pCisJCSpicCsrID0gX3N3YXBsKCphcCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpb19pbnN3X25vc3dhcCh1bnNpZ25lZCBpbnQgYWRkciwgdm9pZCAqYnVmLCBpbnQgbGVuKQoreworCXZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICphcCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSBhZGRyOworCXVuc2lnbmVkIHNob3J0ICpicCA9ICh1bnNpZ25lZCBzaG9ydCAqKSBidWY7CisJd2hpbGUgKGxlbi0tKQorCQkqYnArKyA9ICphcDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGlvX2luc2xfbm9zd2FwKHVuc2lnbmVkIGludCBhZGRyLCB2b2lkICpidWYsIGludCBsZW4pCit7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYXAgPSAodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSBhZGRyOworCXVuc2lnbmVkIGxvbmcgKmJwID0gKHVuc2lnbmVkIGxvbmcgKikgYnVmOworCXdoaWxlIChsZW4tLSkKKwkJKmJwKysgPSAqYXA7Cit9CisKKy8qCisgKgltYWtlIHRoZSBzaG9ydCBuYW1lcyBtYWNyb3Mgc28gc3BlY2lmaWMgZGV2aWNlcworICoJY2FuIG92ZXJyaWRlIHRoZW0gYXMgcmVxdWlyZWQKKyAqLworCisjZGVmaW5lIG1lbXNldF9pbyhhLGIsYykJbWVtc2V0KCh2b2lkICopKGEpLChiKSwoYykpCisjZGVmaW5lIG1lbWNweV9mcm9taW8oYSxiLGMpCW1lbWNweSgoYSksKHZvaWQgKikoYiksKGMpKQorI2RlZmluZSBtZW1jcHlfdG9pbyhhLGIsYykJbWVtY3B5KCh2b2lkICopKGEpLChiKSwoYykpCisKKyNkZWZpbmUgbW1pb3diKCkKKworI2RlZmluZSBpbmIoYWRkcikgICAgKChoODMwMF9idXN3aWR0aChhZGRyKSk/cmVhZHcoKGFkZHIpICYgfjEpICYgMHhmZjpyZWFkYihhZGRyKSkKKyNkZWZpbmUgaW53KGFkZHIpICAgIF9zd2FwdyhyZWFkdyhhZGRyKSkKKyNkZWZpbmUgaW5sKGFkZHIpICAgIF9zd2FwbChyZWFkbChhZGRyKSkKKyNkZWZpbmUgb3V0Yih4LGFkZHIpICgodm9pZCkoKGg4MzAwX2J1c3dpZHRoKGFkZHIpICYmIFwKKyAgICAgICAgICAgICAgICAgICAgICAoKGFkZHIpICYgMSkpP3dyaXRldyh4LChhZGRyKSAmIH4xKTp3cml0ZWIoeCxhZGRyKSkpCisjZGVmaW5lIG91dHcoeCxhZGRyKSAoKHZvaWQpIHdyaXRldyhfc3dhcHcoeCksYWRkcikpCisjZGVmaW5lIG91dGwoeCxhZGRyKSAoKHZvaWQpIHdyaXRlbChfc3dhcGwoeCksYWRkcikpCisKKyNkZWZpbmUgaW5iX3AoYWRkcikgICAgaW5iKGFkZHIpCisjZGVmaW5lIGlud19wKGFkZHIpICAgIGludyhhZGRyKQorI2RlZmluZSBpbmxfcChhZGRyKSAgICBpbmwoYWRkcikKKyNkZWZpbmUgb3V0Yl9wKHgsYWRkcikgb3V0Yih4LGFkZHIpCisjZGVmaW5lIG91dHdfcCh4LGFkZHIpIG91dHcoeCxhZGRyKQorI2RlZmluZSBvdXRsX3AoeCxhZGRyKSBvdXRsKHgsYWRkcikKKworI2RlZmluZSBvdXRzYihhLGIsbCkgaW9fb3V0c2IoYSxiLGwpCisjZGVmaW5lIG91dHN3KGEsYixsKSBpb19vdXRzdyhhLGIsbCkKKyNkZWZpbmUgb3V0c2woYSxiLGwpIGlvX291dHNsKGEsYixsKQorCisjZGVmaW5lIGluc2IoYSxiLGwpIGlvX2luc2IoYSxiLGwpCisjZGVmaW5lIGluc3coYSxiLGwpIGlvX2luc3coYSxiLGwpCisjZGVmaW5lIGluc2woYSxiLGwpIGlvX2luc2woYSxiLGwpCisKKyNkZWZpbmUgSU9fU1BBQ0VfTElNSVQgMHhmZmZmZmYKKworCisvKiBWYWx1ZXMgZm9yIG5vY2FjaGVmbGFnIGFuZCBjbW9kZSAqLworI2RlZmluZSBJT01BUF9GVUxMX0NBQ0hJTkcJCTAKKyNkZWZpbmUgSU9NQVBfTk9DQUNIRV9TRVIJCTEKKyNkZWZpbmUgSU9NQVBfTk9DQUNIRV9OT05TRVIJCTIKKyNkZWZpbmUgSU9NQVBfV1JJVEVUSFJPVUdICQkzCisKK2V4dGVybiB2b2lkICpfX2lvcmVtYXAodW5zaWduZWQgbG9uZyBwaHlzYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLCBpbnQgY2FjaGVmbGFnKTsKK2V4dGVybiB2b2lkIF9faW91bm1hcCh2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpOworCitzdGF0aWMgaW5saW5lIHZvaWQgKmlvcmVtYXAodW5zaWduZWQgbG9uZyBwaHlzYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXJldHVybiBfX2lvcmVtYXAocGh5c2FkZHIsIHNpemUsIElPTUFQX05PQ0FDSEVfU0VSKTsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCAqaW9yZW1hcF9ub2NhY2hlKHVuc2lnbmVkIGxvbmcgcGh5c2FkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlyZXR1cm4gX19pb3JlbWFwKHBoeXNhZGRyLCBzaXplLCBJT01BUF9OT0NBQ0hFX1NFUik7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgKmlvcmVtYXBfd3JpdGV0aHJvdWdoKHVuc2lnbmVkIGxvbmcgcGh5c2FkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlyZXR1cm4gX19pb3JlbWFwKHBoeXNhZGRyLCBzaXplLCBJT01BUF9XUklURVRIUk9VR0gpOworfQorc3RhdGljIGlubGluZSB2b2lkICppb3JlbWFwX2Z1bGxjYWNoZSh1bnNpZ25lZCBsb25nIHBoeXNhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJcmV0dXJuIF9faW9yZW1hcChwaHlzYWRkciwgc2l6ZSwgSU9NQVBfRlVMTF9DQUNISU5HKTsKK30KKworZXh0ZXJuIHZvaWQgaW91bm1hcCh2b2lkICphZGRyKTsKKworLyogTm90aGluZyB0byBkbyAqLworCisjZGVmaW5lIGRtYV9jYWNoZV9pbnYoX3N0YXJ0LF9zaXplKQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBkbWFfY2FjaGVfd2JhY2soX3N0YXJ0LF9zaXplKQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBkbWFfY2FjaGVfd2JhY2tfaW52KF9zdGFydCxfc2l6ZSkJZG8geyB9IHdoaWxlICgwKQorCisvKiBIOC8zMDAgaW50ZXJuYWwgSS9PIGZ1bmN0aW9ucyAqLworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgY2hhciBjdHJsX2luYih1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcmV0dXJuICoodm9sYXRpbGUgdW5zaWduZWQgY2hhciopYWRkcjsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgc2hvcnQgY3RybF9pbncodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXJldHVybiAqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0KilhZGRyOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGN0cmxfaW5sKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nKilhZGRyOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGN0cmxfb3V0Yih1bnNpZ25lZCBjaGFyIGIsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwkqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIqKWFkZHIgPSBiOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGN0cmxfb3V0dyh1bnNpZ25lZCBzaG9ydCBiLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCopYWRkciA9IGI7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgY3RybF9vdXRsKHVuc2lnbmVkIGxvbmcgYiwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworICAgICAgICAqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcqKWFkZHIgPSBiOworfQorCisvKiBQYWdlcyB0byBwaHlzaWNhbCBhZGRyZXNzLi4uICovCisjZGVmaW5lIHBhZ2VfdG9fcGh5cyhwYWdlKSAgICAgICgocGFnZSAtIG1lbV9tYXApIDw8IFBBR0VfU0hJRlQpCisjZGVmaW5lIHBhZ2VfdG9fYnVzKHBhZ2UpICAgICAgICgocGFnZSAtIG1lbV9tYXApIDw8IFBBR0VfU0hJRlQpCisKKy8qCisgKiBNYWNyb3MgdXNlZCBmb3IgY29udmVydGluZyBiZXR3ZWVuIHZpcnR1YWwgYW5kIHBoeXNpY2FsIG1hcHBpbmdzLgorICovCisjZGVmaW5lIG1tX3B0b3YodmFkZHIpCQkoKHZvaWQgKikgKHZhZGRyKSkKKyNkZWZpbmUgbW1fdnRvcCh2YWRkcikJCSgodW5zaWduZWQgbG9uZykgKHZhZGRyKSkKKyNkZWZpbmUgcGh5c190b192aXJ0KHZhZGRyKQkoKHZvaWQgKikgKHZhZGRyKSkKKyNkZWZpbmUgdmlydF90b19waHlzKHZhZGRyKQkoKHVuc2lnbmVkIGxvbmcpICh2YWRkcikpCisKKyNkZWZpbmUgdmlydF90b19idXMgdmlydF90b19waHlzCisjZGVmaW5lIGJ1c190b192aXJ0IHBoeXNfdG9fdmlydAorCisvKgorICogQ29udmVydCBhIHBoeXNpY2FsIHBvaW50ZXIgdG8gYSB2aXJ0dWFsIGtlcm5lbCBwb2ludGVyIGZvciAvZGV2L21lbQorICogYWNjZXNzCisgKi8KKyNkZWZpbmUgeGxhdGVfZGV2X21lbV9wdHIocCkJX192YShwKQorCisvKgorICogQ29udmVydCBhIHZpcnR1YWwgY2FjaGVkIHBvaW50ZXIgdG8gYW4gdW5jYWNoZWQgcG9pbnRlcgorICovCisjZGVmaW5lIHhsYXRlX2Rldl9rbWVtX3B0cihwKQlwCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfSDgzMDBfSU9fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvaW9jdGwuaCBiL2luY2x1ZGUvYXNtLWg4MzAwL2lvY3RsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMxYzYyMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWg4MzAwL2lvY3RsLmgKQEAgLTAsMCArMSw4MCBAQAorLyogJElkOiBpb2N0bC5oLHYgMS4xIDIwMDIvMTEvMTkgMDI6MDk6MjYgZ2VyZyBFeHAgJAorICoKKyAqIGxpbnV4L2lvY3RsLmggZm9yIExpbnV4IGJ5IEguSC4gQmVyZ21hbi4KKyAqLworCisjaWZuZGVmIF9IODMwMF9JT0NUTF9ICisjZGVmaW5lIF9IODMwMF9JT0NUTF9ICisKKy8qIGlvY3RsIGNvbW1hbmQgZW5jb2Rpbmc6IDMyIGJpdHMgdG90YWwsIGNvbW1hbmQgaW4gbG93ZXIgMTYgYml0cywKKyAqIHNpemUgb2YgdGhlIHBhcmFtZXRlciBzdHJ1Y3R1cmUgaW4gdGhlIGxvd2VyIDE0IGJpdHMgb2YgdGhlCisgKiB1cHBlciAxNiBiaXRzLgorICogRW5jb2RpbmcgdGhlIHNpemUgb2YgdGhlIHBhcmFtZXRlciBzdHJ1Y3R1cmUgaW4gdGhlIGlvY3RsIHJlcXVlc3QKKyAqIGlzIHVzZWZ1bCBmb3IgY2F0Y2hpbmcgcHJvZ3JhbXMgY29tcGlsZWQgd2l0aCBvbGQgdmVyc2lvbnMKKyAqIGFuZCB0byBhdm9pZCBvdmVyd3JpdGluZyB1c2VyIHNwYWNlIG91dHNpZGUgdGhlIHVzZXIgYnVmZmVyIGFyZWEuCisgKiBUaGUgaGlnaGVzdCAyIGJpdHMgYXJlIHJlc2VydmVkIGZvciBpbmRpY2F0aW5nIHRoZSBgYGFjY2VzcyBtb2RlJycuCisgKiBOT1RFOiBUaGlzIGxpbWl0cyB0aGUgbWF4IHBhcmFtZXRlciBzaXplIHRvIDE2a0IgLTEgIQorICovCisKKy8qCisgKiBJIGRvbid0IHJlYWxseSBoYXZlIGFueSBpZGVhIGFib3V0IHdoYXQgdGhpcyBzaG91bGQgbG9vayBsaWtlLCBzbworICogZm9yIHRoZSB0aW1lIGJlaW5nLCB0aGlzIGlzIGhlYXZpbHkgYmFzZWQgb24gdGhlIFBDIGRlZmluaXRpb25zLgorICovCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGlzIGZvciBjb21wYXRpYmlsaXR5IGFjcm9zcyB0aGUgdmFyaW91cyBMaW51eAorICogcGxhdGZvcm1zLiAgVGhlIGkzODYgaW9jdGwgbnVtYmVyaW5nIHNjaGVtZSBkb2Vzbid0IHJlYWxseSBlbmZvcmNlCisgKiBhIHR5cGUgZmllbGQuICBEZSBmYWN0bywgaG93ZXZlciwgdGhlIHRvcCA4IGJpdHMgb2YgdGhlIGxvd2VyIDE2CisgKiBiaXRzIGFyZSBpbmRlZWQgdXNlZCBhcyBhIHR5cGUgZmllbGQsIHNvIHdlIG1pZ2h0IGp1c3QgYXMgd2VsbCBtYWtlCisgKiB0aGlzIGV4cGxpY2l0IGhlcmUuICBQbGVhc2UgYmUgc3VyZSB0byB1c2UgdGhlIGRlY29kaW5nIG1hY3JvcworICogYmVsb3cgZnJvbSBub3cgb24uCisgKi8KKyNkZWZpbmUgX0lPQ19OUkJJVFMJOAorI2RlZmluZSBfSU9DX1RZUEVCSVRTCTgKKyNkZWZpbmUgX0lPQ19TSVpFQklUUwkxNAorI2RlZmluZSBfSU9DX0RJUkJJVFMJMgorCisjZGVmaW5lIF9JT0NfTlJNQVNLCSgoMSA8PCBfSU9DX05SQklUUyktMSkKKyNkZWZpbmUgX0lPQ19UWVBFTUFTSwkoKDEgPDwgX0lPQ19UWVBFQklUUyktMSkKKyNkZWZpbmUgX0lPQ19TSVpFTUFTSwkoKDEgPDwgX0lPQ19TSVpFQklUUyktMSkKKyNkZWZpbmUgX0lPQ19ESVJNQVNLCSgoMSA8PCBfSU9DX0RJUkJJVFMpLTEpCisKKyNkZWZpbmUgX0lPQ19OUlNISUZUCTAKKyNkZWZpbmUgX0lPQ19UWVBFU0hJRlQJKF9JT0NfTlJTSElGVCtfSU9DX05SQklUUykKKyNkZWZpbmUgX0lPQ19TSVpFU0hJRlQJKF9JT0NfVFlQRVNISUZUK19JT0NfVFlQRUJJVFMpCisjZGVmaW5lIF9JT0NfRElSU0hJRlQJKF9JT0NfU0laRVNISUZUK19JT0NfU0laRUJJVFMpCisKKy8qCisgKiBEaXJlY3Rpb24gYml0cy4KKyAqLworI2RlZmluZSBfSU9DX05PTkUJMFUKKyNkZWZpbmUgX0lPQ19XUklURQkxVQorI2RlZmluZSBfSU9DX1JFQUQJMlUKKworI2RlZmluZSBfSU9DKGRpcix0eXBlLG5yLHNpemUpIFwKKwkoKChkaXIpICA8PCBfSU9DX0RJUlNISUZUKSB8IFwKKwkgKCh0eXBlKSA8PCBfSU9DX1RZUEVTSElGVCkgfCBcCisJICgobnIpICAgPDwgX0lPQ19OUlNISUZUKSB8IFwKKwkgKChzaXplKSA8PCBfSU9DX1NJWkVTSElGVCkpCisKKy8qIHVzZWQgdG8gY3JlYXRlIG51bWJlcnMgKi8KKyNkZWZpbmUgX0lPKHR5cGUsbnIpCQlfSU9DKF9JT0NfTk9ORSwodHlwZSksKG5yKSwwKQorI2RlZmluZSBfSU9SKHR5cGUsbnIsc2l6ZSkJX0lPQyhfSU9DX1JFQUQsKHR5cGUpLChuciksc2l6ZW9mKHNpemUpKQorI2RlZmluZSBfSU9XKHR5cGUsbnIsc2l6ZSkJX0lPQyhfSU9DX1dSSVRFLCh0eXBlKSwobnIpLHNpemVvZihzaXplKSkKKyNkZWZpbmUgX0lPV1IodHlwZSxucixzaXplKQlfSU9DKF9JT0NfUkVBRHxfSU9DX1dSSVRFLCh0eXBlKSwobnIpLHNpemVvZihzaXplKSkKKworLyogdXNlZCB0byBkZWNvZGUgaW9jdGwgbnVtYmVycy4uICovCisjZGVmaW5lIF9JT0NfRElSKG5yKQkJKCgobnIpID4+IF9JT0NfRElSU0hJRlQpICYgX0lPQ19ESVJNQVNLKQorI2RlZmluZSBfSU9DX1RZUEUobnIpCQkoKChucikgPj4gX0lPQ19UWVBFU0hJRlQpICYgX0lPQ19UWVBFTUFTSykKKyNkZWZpbmUgX0lPQ19OUihucikJCSgoKG5yKSA+PiBfSU9DX05SU0hJRlQpICYgX0lPQ19OUk1BU0spCisjZGVmaW5lIF9JT0NfU0laRShucikJCSgoKG5yKSA+PiBfSU9DX1NJWkVTSElGVCkgJiBfSU9DX1NJWkVNQVNLKQorCisvKiAuLi5hbmQgZm9yIHRoZSBkcml2ZXJzL3NvdW5kIGZpbGVzLi4uICovCisKKyNkZWZpbmUgSU9DX0lOCQkoX0lPQ19XUklURSA8PCBfSU9DX0RJUlNISUZUKQorI2RlZmluZSBJT0NfT1VUCQkoX0lPQ19SRUFEIDw8IF9JT0NfRElSU0hJRlQpCisjZGVmaW5lIElPQ19JTk9VVAkoKF9JT0NfV1JJVEV8X0lPQ19SRUFEKSA8PCBfSU9DX0RJUlNISUZUKQorI2RlZmluZSBJT0NTSVpFX01BU0sJKF9JT0NfU0laRU1BU0sgPDwgX0lPQ19TSVpFU0hJRlQpCisjZGVmaW5lIElPQ1NJWkVfU0hJRlQJKF9JT0NfU0laRVNISUZUKQorCisjZW5kaWYgLyogX0g4MzAwX0lPQ1RMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWg4MzAwL2lvY3Rscy5oIGIvaW5jbHVkZS9hc20taDgzMDAvaW9jdGxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWMyMDQ1NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWg4MzAwL2lvY3Rscy5oCkBAIC0wLDAgKzEsODEgQEAKKyNpZm5kZWYgX19BUkNIX0g4MzAwX0lPQ1RMU19IX18KKyNkZWZpbmUgX19BUkNIX0g4MzAwX0lPQ1RMU19IX18KKworI2luY2x1ZGUgPGFzbS9pb2N0bC5oPgorCisvKiAweDU0IGlzIGp1c3QgYSBtYWdpYyBudW1iZXIgdG8gbWFrZSB0aGVzZSByZWxhdGl2ZWx5IHVuaXF1ZSAoJ1QnKSAqLworCisjZGVmaW5lIFRDR0VUUwkJMHg1NDAxCisjZGVmaW5lIFRDU0VUUwkJMHg1NDAyCisjZGVmaW5lIFRDU0VUU1cJCTB4NTQwMworI2RlZmluZSBUQ1NFVFNGCQkweDU0MDQKKyNkZWZpbmUgVENHRVRBCQkweDU0MDUKKyNkZWZpbmUgVENTRVRBCQkweDU0MDYKKyNkZWZpbmUgVENTRVRBVwkJMHg1NDA3CisjZGVmaW5lIFRDU0VUQUYJCTB4NTQwOAorI2RlZmluZSBUQ1NCUksJCTB4NTQwOQorI2RlZmluZSBUQ1hPTkMJCTB4NTQwQQorI2RlZmluZSBUQ0ZMU0gJCTB4NTQwQgorI2RlZmluZSBUSU9DRVhDTAkweDU0MEMKKyNkZWZpbmUgVElPQ05YQ0wJMHg1NDBECisjZGVmaW5lIFRJT0NTQ1RUWQkweDU0MEUKKyNkZWZpbmUgVElPQ0dQR1JQCTB4NTQwRgorI2RlZmluZSBUSU9DU1BHUlAJMHg1NDEwCisjZGVmaW5lIFRJT0NPVVRRCTB4NTQxMQorI2RlZmluZSBUSU9DU1RJCQkweDU0MTIKKyNkZWZpbmUgVElPQ0dXSU5TWgkweDU0MTMKKyNkZWZpbmUgVElPQ1NXSU5TWgkweDU0MTQKKyNkZWZpbmUgVElPQ01HRVQJMHg1NDE1CisjZGVmaW5lIFRJT0NNQklTCTB4NTQxNgorI2RlZmluZSBUSU9DTUJJQwkweDU0MTcKKyNkZWZpbmUgVElPQ01TRVQJMHg1NDE4CisjZGVmaW5lIFRJT0NHU09GVENBUgkweDU0MTkKKyNkZWZpbmUgVElPQ1NTT0ZUQ0FSCTB4NTQxQQorI2RlZmluZSBGSU9OUkVBRAkweDU0MUIKKyNkZWZpbmUgVElPQ0lOUQkJRklPTlJFQUQKKyNkZWZpbmUgVElPQ0xJTlVYCTB4NTQxQworI2RlZmluZSBUSU9DQ09OUwkweDU0MUQKKyNkZWZpbmUgVElPQ0dTRVJJQUwJMHg1NDFFCisjZGVmaW5lIFRJT0NTU0VSSUFMCTB4NTQxRgorI2RlZmluZSBUSU9DUEtUCQkweDU0MjAKKyNkZWZpbmUgRklPTkJJTwkJMHg1NDIxCisjZGVmaW5lIFRJT0NOT1RUWQkweDU0MjIKKyNkZWZpbmUgVElPQ1NFVEQJMHg1NDIzCisjZGVmaW5lIFRJT0NHRVRECTB4NTQyNAorI2RlZmluZSBUQ1NCUktQCQkweDU0MjUJLyogTmVlZGVkIGZvciBQT1NJWCB0Y3NlbmRicmVhaygpICovCisjZGVmaW5lIFRJT0NUVFlHU1RSVUNUCTB4NTQyNiAgLyogRm9yIGRlYnVnZ2luZyBvbmx5ICovCisjZGVmaW5lIFRJT0NTQlJLCTB4NTQyNyAgLyogQlNEIGNvbXBhdGliaWxpdHkgKi8KKyNkZWZpbmUgVElPQ0NCUksJMHg1NDI4ICAvKiBCU0QgY29tcGF0aWJpbGl0eSAqLworI2RlZmluZSBUSU9DR1NJRAkweDU0MjkgIC8qIFJldHVybiB0aGUgc2Vzc2lvbiBJRCBvZiBGRCAqLworI2RlZmluZSBUSU9DR1BUTglfSU9SKCdUJywweDMwLCB1bnNpZ25lZCBpbnQpIC8qIEdldCBQdHkgTnVtYmVyIChvZiBwdHktbXV4IGRldmljZSkgKi8KKyNkZWZpbmUgVElPQ1NQVExDSwlfSU9XKCdUJywweDMxLCBpbnQpICAvKiBMb2NrL3VubG9jayBQdHkgKi8KKworI2RlZmluZSBGSU9OQ0xFWAkweDU0NTAgIC8qIHRoZXNlIG51bWJlcnMgbmVlZCB0byBiZSBhZGp1c3RlZC4gKi8KKyNkZWZpbmUgRklPQ0xFWAkJMHg1NDUxCisjZGVmaW5lIEZJT0FTWU5DCTB4NTQ1MgorI2RlZmluZSBUSU9DU0VSQ09ORklHCTB4NTQ1MworI2RlZmluZSBUSU9DU0VSR1dJTEQJMHg1NDU0CisjZGVmaW5lIFRJT0NTRVJTV0lMRAkweDU0NTUKKyNkZWZpbmUgVElPQ0dMQ0tUUk1JT1MJMHg1NDU2CisjZGVmaW5lIFRJT0NTTENLVFJNSU9TCTB4NTQ1NworI2RlZmluZSBUSU9DU0VSR1NUUlVDVAkweDU0NTggLyogRm9yIGRlYnVnZ2luZyBvbmx5ICovCisjZGVmaW5lIFRJT0NTRVJHRVRMU1IgICAweDU0NTkgLyogR2V0IGxpbmUgc3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIFRJT0NTRVJHRVRNVUxUSSAweDU0NUEgLyogR2V0IG11bHRpcG9ydCBjb25maWcgICovCisjZGVmaW5lIFRJT0NTRVJTRVRNVUxUSSAweDU0NUIgLyogU2V0IG11bHRpcG9ydCBjb25maWcgKi8KKworI2RlZmluZSBUSU9DTUlXQUlUCTB4NTQ1QwkvKiB3YWl0IGZvciBhIGNoYW5nZSBvbiBzZXJpYWwgaW5wdXQgbGluZShzKSAqLworI2RlZmluZSBUSU9DR0lDT1VOVAkweDU0NUQJLyogcmVhZCBzZXJpYWwgcG9ydCBpbmxpbmUgaW50ZXJydXB0IGNvdW50cyAqLworI2RlZmluZSBGSU9RU0laRQkweDU0NUUKKworLyogVXNlZCBmb3IgcGFja2V0IG1vZGUgKi8KKyNkZWZpbmUgVElPQ1BLVF9EQVRBCQkgMAorI2RlZmluZSBUSU9DUEtUX0ZMVVNIUkVBRAkgMQorI2RlZmluZSBUSU9DUEtUX0ZMVVNIV1JJVEUJIDIKKyNkZWZpbmUgVElPQ1BLVF9TVE9QCQkgNAorI2RlZmluZSBUSU9DUEtUX1NUQVJUCQkgOAorI2RlZmluZSBUSU9DUEtUX05PU1RPUAkJMTYKKyNkZWZpbmUgVElPQ1BLVF9ET1NUT1AJCTMyCisKKyNkZWZpbmUgVElPQ1NFUl9URU1UICAgIDB4MDEJLyogVHJhbnNtaXR0ZXIgcGh5c2ljYWxseSBlbXB0eSAqLworCisjZW5kaWYgLyogX19BUkNIX0g4MzAwX0lPQ1RMU19IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWg4MzAwL2lwYy5oIGIvaW5jbHVkZS9hc20taDgzMDAvaXBjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ2ZTNkOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWg4MzAwL2lwYy5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pcGMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWg4MzAwL2lwY2J1Zi5oIGIvaW5jbHVkZS9hc20taDgzMDAvaXBjYnVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNkMWViYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWg4MzAwL2lwY2J1Zi5oCkBAIC0wLDAgKzEsMjkgQEAKKyNpZm5kZWYgX19IODMwMF9JUENCVUZfSF9fCisjZGVmaW5lIF9fSDgzMDBfSVBDQlVGX0hfXworCisvKgorICogVGhlIHVzZXJfaXBjX3Blcm0gc3RydWN0dXJlIGZvciBIOC8zMDAgYXJjaGl0ZWN0dXJlLgorICogTm90ZSBleHRyYSBwYWRkaW5nIGJlY2F1c2UgdGhpcyBzdHJ1Y3R1cmUgaXMgcGFzc2VkIGJhY2sgYW5kIGZvcnRoCisgKiBiZXR3ZWVuIGtlcm5lbCBhbmQgdXNlciBzcGFjZS4KKyAqCisgKiBQYWQgc3BhY2UgaXMgbGVmdCBmb3I6CisgKiAtIDMyLWJpdCBtb2RlX3QgYW5kIHNlcQorICogLSAyIG1pc2NlbGxhbmVvdXMgMzItYml0IHZhbHVlcworICovCisKK3N0cnVjdCBpcGM2NF9wZXJtCit7CisJX19rZXJuZWxfa2V5X3QJCWtleTsKKwlfX2tlcm5lbF91aWQzMl90CXVpZDsKKwlfX2tlcm5lbF9naWQzMl90CWdpZDsKKwlfX2tlcm5lbF91aWQzMl90CWN1aWQ7CisJX19rZXJuZWxfZ2lkMzJfdAljZ2lkOworCV9fa2VybmVsX21vZGVfdAkJbW9kZTsKKwl1bnNpZ25lZCBzaG9ydAkJX19wYWQxOworCXVuc2lnbmVkIHNob3J0CQlzZXE7CisJdW5zaWduZWQgc2hvcnQJCV9fcGFkMjsKKwl1bnNpZ25lZCBsb25nCQlfX3VudXNlZDE7CisJdW5zaWduZWQgbG9uZwkJX191bnVzZWQyOworfTsKKworI2VuZGlmIC8qIF9fSDgzMDBfSVBDQlVGX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvaXJxLmggYi9pbmNsdWRlL2FzbS1oODMwMC9pcnEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDI3MTgxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvaXJxLmgKQEAgLTAsMCArMSw3NSBAQAorI2lmbmRlZiBfSDgzMDBfSVJRX0hfCisjZGVmaW5lIF9IODMwMF9JUlFfSF8KKworI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKworI2lmIGRlZmluZWQoX19IODMwMEhfXykKKyNkZWZpbmUgTlJfSVJRUyA2NAorI2RlZmluZSBFWFRfSVJRMCAxMgorI2RlZmluZSBFWFRfSVJRMSAxMworI2RlZmluZSBFWFRfSVJRMiAxNAorI2RlZmluZSBFWFRfSVJRMyAxNQorI2RlZmluZSBFWFRfSVJRNCAxNgorI2RlZmluZSBFWFRfSVJRNSAxNworI2RlZmluZSBFWFRfSVJRNiAxOAorI2RlZmluZSBFWFRfSVJRNyAxOQorI2RlZmluZSBFWFRfSVJRUyA1CisKKyNpbmNsdWRlIDxhc20vcmVnczMwNnguaD4KKyNkZWZpbmUgaDgzMDBfY2xlYXJfaXNyKGlycSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWlmIChpcnEgPj0gRVhUX0lSUTAgJiYgaXJxIDw9IEVYVF9JUlE1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilJU1IgJj0gfigxIDw8IChpcnEgLSBFWFRfSVJRMCkpOyBcCit9IHdoaWxlKDApCisKKyNkZWZpbmUgSUVSX1JFR1MgKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopSUVSCisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfSDhTKQorI2RlZmluZSBOUl9JUlFTIDEyOAorI2RlZmluZSBFWFRfSVJRMCAxNgorI2RlZmluZSBFWFRfSVJRMSAxNworI2RlZmluZSBFWFRfSVJRMiAxOAorI2RlZmluZSBFWFRfSVJRMyAxOQorI2RlZmluZSBFWFRfSVJRNCAyMAorI2RlZmluZSBFWFRfSVJRNSAyMQorI2RlZmluZSBFWFRfSVJRNiAyMgorI2RlZmluZSBFWFRfSVJRNyAyMworI2RlZmluZSBFWFRfSVJROCAyNAorI2RlZmluZSBFWFRfSVJROSAyNQorI2RlZmluZSBFWFRfSVJRMTAgMjYKKyNkZWZpbmUgRVhUX0lSUTExIDI3CisjZGVmaW5lIEVYVF9JUlExMiAyOAorI2RlZmluZSBFWFRfSVJRMTMgMjkKKyNkZWZpbmUgRVhUX0lSUTE0IDMwCisjZGVmaW5lIEVYVF9JUlExNSAzMQorI2RlZmluZSBFWFRfSVJRUyAxNQorCisjaW5jbHVkZSA8YXNtL3JlZ3MyNjd4Lmg+CisjZGVmaW5lIGg4MzAwX2NsZWFyX2lzcihpcnEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWlmIChpcnEgPj0gRVhUX0lSUTAgJiYgaXJxIDw9IEVYVF9JUlExNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKUlTUiAmPSB+KDEgPDwgKGlycSAtIEVYVF9JUlEwKSk7IFwKK30gd2hpbGUoMCkKKworI2RlZmluZSBJRVJfUkVHUyAqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopSUVSCisjZW5kaWYKKworc3RhdGljIF9faW5saW5lX18gaW50IGlycV9jYW5vbmljYWxpemUoaW50IGlycSkKK3sKKwlyZXR1cm4gaXJxOworfQorCitleHRlcm4gdm9pZCBlbmFibGVfaXJxKHVuc2lnbmVkIGludCk7CitleHRlcm4gdm9pZCBkaXNhYmxlX2lycSh1bnNpZ25lZCBpbnQpOworCisvKgorICogU29tZSBkcml2ZXJzIHdhbnQgdGhlc2UgZW50cnkgcG9pbnRzCisgKi8KKyNkZWZpbmUgZW5hYmxlX2lycV9ub3N5bmMoeCkJZW5hYmxlX2lycSh4KQorI2RlZmluZSBkaXNhYmxlX2lycV9ub3N5bmMoeCkJZGlzYWJsZV9pcnEoeCkKKworc3RydWN0IGlycWFjdGlvbjsKK3N0cnVjdCBwdF9yZWdzOworaW50IGhhbmRsZV9JUlFfZXZlbnQodW5zaWduZWQgaW50LCBzdHJ1Y3QgcHRfcmVncyAqLCBzdHJ1Y3QgaXJxYWN0aW9uICopOworCisjZW5kaWYgLyogX0g4MzAwX0lSUV9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAva2V5Ym9hcmQuaCBiL2luY2x1ZGUvYXNtLWg4MzAwL2tleWJvYXJkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA1ZDExMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWg4MzAwL2tleWJvYXJkLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1oODMwMC9rZXlib2FyZC5oCisgKiAgQ3JlYXRlZCAwNCBEZWMgMjAwMSBieSBLaGFsZWQgSGFzc291bmFoIDxraGFzc291bmFoQG1lZGl1bXdhcmUubmV0PgorICogIFRoaXMgZmlsZSBjb250YWlucyB0aGUgRHJhZ29uYmFsbCBhcmNoaXRlY3R1cmUgc3BlY2lmaWMga2V5Ym9hcmQgZGVmaW5pdGlvbnMKKyAqLworCisjaWZuZGVmIF9IODMwMF9LRVlCT0FSRF9ICisjZGVmaW5lIF9IODMwMF9LRVlCT0FSRF9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworLyogZHVtbXkgaS5lLiBubyByZWFsIGtleWJvYXJkICovCisjZGVmaW5lIGtiZF9zZXRrZXljb2RlKHguLi4pCSgtRU5PU1lTKQorI2RlZmluZSBrYmRfZ2V0a2V5Y29kZSh4Li4uKQkoLUVOT1NZUykKKyNkZWZpbmUga2JkX3RyYW5zbGF0ZSh4Li4uKQkoMCkKKyNkZWZpbmUga2JkX3VuZXhwZWN0ZWRfdXAoeC4uLikJKDEpCisjZGVmaW5lIGtiZF9sZWRzKHguLi4pCQlkbyB7O30gd2hpbGUgKDApCisjZGVmaW5lIGtiZF9pbml0X2h3KHguLi4pCWRvIHs7fSB3aGlsZSAoMCkKKyNkZWZpbmUga2JkX2VuYWJsZV9pcnEoeC4uLikJZG8gezt9IHdoaWxlICgwKQorI2RlZmluZSBrYmRfZGlzYWJsZV9pcnEoeC4uLikJZG8gezt9IHdoaWxlICgwKQorCisKKy8qIG5lZWRlZCBpZiBNQUdJQ19TWVNSUSBpcyBlbmFibGVkIGZvciBzZXJpYWwgY29uc29sZSAqLworI2lmbmRlZiBTWVNSUV9LRVkKKyNkZWZpbmUgU1lTUlFfS0VZCQkoKHVuc2lnbmVkIGNoYXIpKC0xKSkKKyNkZWZpbmUga2JkX3N5c3JxX3hsYXRlICAgICAgICAgKCh1bnNpZ25lZCBjaGFyICopTlVMTCkKKyNlbmRpZgorCisKKyNlbmRpZiAgLyogX0g4MzAwX0tFWUJPQVJEX0ggKi8KKworCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWg4MzAwL2ttYXBfdHlwZXMuaCBiL2luY2x1ZGUvYXNtLWg4MzAwL2ttYXBfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjQzMWVkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taDgzMDAva21hcF90eXBlcy5oCkBAIC0wLDAgKzEsMTkgQEAKKyNpZm5kZWYgX0FTTV9LTUFQX1RZUEVTX0gKKyNkZWZpbmUgX0FTTV9LTUFQX1RZUEVTX0gKKworZW51bSBrbV90eXBlIHsKKwlLTV9CT1VOQ0VfUkVBRCwKKwlLTV9TS0JfU1VOUlBDX0RBVEEsCisJS01fU0tCX0RBVEFfU09GVElSUSwKKwlLTV9VU0VSMCwKKwlLTV9VU0VSMSwKKwlLTV9CSU9fU1JDX0lSUSwKKwlLTV9CSU9fRFNUX0lSUSwKKwlLTV9QVEUwLAorCUtNX1BURTEsCisJS01fSVJRMCwKKwlLTV9JUlExLAorCUtNX1RZUEVfTlIKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvbGlua2FnZS5oIGIvaW5jbHVkZS9hc20taDgzMDAvbGlua2FnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmNGRmN2QKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC9saW5rYWdlLmgKQEAgLTAsMCArMSw4IEBACisjaWZuZGVmIF9IODMwMF9MSU5LQUdFX0gKKyNkZWZpbmUgX0g4MzAwX0xJTktBR0VfSAorCisjdW5kZWYgU1lNQk9MX05BTUVfTEFCRUwKKyN1bmRlZiBTWU1CT0xfTkFNRQorI2RlZmluZSBTWU1CT0xfTkFNRV9MQUJFTChfbmFtZV8pIF8jI19uYW1lXyMjOgorI2RlZmluZSBTWU1CT0xfTkFNRShfbmFtZV8pIF8jI19uYW1lXworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1oODMwMC9sb2NhbC5oIGIvaW5jbHVkZS9hc20taDgzMDAvbG9jYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGQ0ZWZlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvbG9jYWwuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX0g4MzAwX0xPQ0FMX0hfCisjZGVmaW5lIF9IODMwMF9MT0NBTF9IXworCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbG9jYWwuaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1oODMwMC9tYzE0NjgxOHJ0Yy5oIGIvaW5jbHVkZS9hc20taDgzMDAvbWMxNDY4MThydGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjlkOTY0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvbWMxNDY4MThydGMuaApAQCAtMCwwICsxLDkgQEAKKy8qCisgKiBNYWNoaW5lIGRlcGVuZGVudCBhY2Nlc3MgZnVuY3Rpb25zIGZvciBSVEMgcmVnaXN0ZXJzLgorICovCisjaWZuZGVmIF9IODMwMF9NQzE0NjgxOFJUQ19ICisjZGVmaW5lIF9IODMwMF9NQzE0NjgxOFJUQ19ICisKKy8qIGVtcHR5IGluY2x1ZGUgZmlsZSB0byBzYXRpc2Z5IHRoZSBpbmNsdWRlIGluIGdlbnJ0Yy5jL2lkZS1nZW9tZXRyeS5jICovCisKKyNlbmRpZiAvKiBfSDgzMDBfTUMxNDY4MThSVENfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvbWQuaCBiL2luY2x1ZGUvYXNtLWg4MzAwL21kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE0N2RjNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWg4MzAwL21kLmgKQEAgLTAsMCArMSwxMyBAQAorLyogJElkOiBtZC5oLHYgMS4xIDIwMDIvMTEvMTkgMDI6MDk6MjYgZ2VyZyBFeHAgJAorICogbWQuaDogSGlnaCBzcGVlZCB4b3JfYmxvY2sgb3BlcmF0aW9uIGZvciBSQUlENC81IAorICoKKyAqLworIAorI2lmbmRlZiBfX0FTTV9NRF9ICisjZGVmaW5lIF9fQVNNX01EX0gKKworLyogI2RlZmluZSBIQVZFX0FSQ0hfWE9SQkxPQ0sgKi8KKworI2RlZmluZSBNRF9YT1JCTE9DS19BTElHTk1FTlQJc2l6ZW9mKGxvbmcpCisKKyNlbmRpZiAvKiBfX0FTTV9NRF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1oODMwMC9tbWFuLmggYi9pbmNsdWRlL2FzbS1oODMwMC9tbWFuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJlMDg4NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWg4MzAwL21tYW4uaApAQCAtMCwwICsxLDQwIEBACisjaWZuZGVmIF9fSDgzMDBfTU1BTl9IX18KKyNkZWZpbmUgX19IODMwMF9NTUFOX0hfXworCisjZGVmaW5lIFBST1RfUkVBRAkweDEJCS8qIHBhZ2UgY2FuIGJlIHJlYWQgKi8KKyNkZWZpbmUgUFJPVF9XUklURQkweDIJCS8qIHBhZ2UgY2FuIGJlIHdyaXR0ZW4gKi8KKyNkZWZpbmUgUFJPVF9FWEVDCTB4NAkJLyogcGFnZSBjYW4gYmUgZXhlY3V0ZWQgKi8KKyNkZWZpbmUgUFJPVF9OT05FCTB4MAkJLyogcGFnZSBjYW4gbm90IGJlIGFjY2Vzc2VkICovCisjZGVmaW5lIFBST1RfR1JPV1NET1dOCTB4MDEwMDAwMDAJLyogbXByb3RlY3QgZmxhZzogZXh0ZW5kIGNoYW5nZSB0byBzdGFydCBvZiBncm93c2Rvd24gdm1hICovCisjZGVmaW5lIFBST1RfR1JPV1NVUAkweDAyMDAwMDAwCS8qIG1wcm90ZWN0IGZsYWc6IGV4dGVuZCBjaGFuZ2UgdG8gZW5kIG9mIGdyb3dzdXAgdm1hICovCisKKyNkZWZpbmUgTUFQX1NIQVJFRAkweDAxCQkvKiBTaGFyZSBjaGFuZ2VzICovCisjZGVmaW5lIE1BUF9QUklWQVRFCTB4MDIJCS8qIENoYW5nZXMgYXJlIHByaXZhdGUgKi8KKyNkZWZpbmUgTUFQX1RZUEUJMHgwZgkJLyogTWFzayBmb3IgdHlwZSBvZiBtYXBwaW5nICovCisjZGVmaW5lIE1BUF9GSVhFRAkweDEwCQkvKiBJbnRlcnByZXQgYWRkciBleGFjdGx5ICovCisjZGVmaW5lIE1BUF9BTk9OWU1PVVMJMHgyMAkJLyogZG9uJ3QgdXNlIGEgZmlsZSAqLworCisjZGVmaW5lIE1BUF9HUk9XU0RPV04JMHgwMTAwCQkvKiBzdGFjay1saWtlIHNlZ21lbnQgKi8KKyNkZWZpbmUgTUFQX0RFTllXUklURQkweDA4MDAJCS8qIEVUWFRCU1kgKi8KKyNkZWZpbmUgTUFQX0VYRUNVVEFCTEUJMHgxMDAwCQkvKiBtYXJrIGl0IGFzIGFuIGV4ZWN1dGFibGUgKi8KKyNkZWZpbmUgTUFQX0xPQ0tFRAkweDIwMDAJCS8qIHBhZ2VzIGFyZSBsb2NrZWQgKi8KKyNkZWZpbmUgTUFQX05PUkVTRVJWRQkweDQwMDAJCS8qIGRvbid0IGNoZWNrIGZvciByZXNlcnZhdGlvbnMgKi8KKworI2RlZmluZSBNU19BU1lOQwkxCQkvKiBzeW5jIG1lbW9yeSBhc3luY2hyb25vdXNseSAqLworI2RlZmluZSBNU19JTlZBTElEQVRFCTIJCS8qIGludmFsaWRhdGUgdGhlIGNhY2hlcyAqLworI2RlZmluZSBNU19TWU5DCQk0CQkvKiBzeW5jaHJvbm91cyBtZW1vcnkgc3luYyAqLworCisjZGVmaW5lIE1DTF9DVVJSRU5UCTEJCS8qIGxvY2sgYWxsIGN1cnJlbnQgbWFwcGluZ3MgKi8KKyNkZWZpbmUgTUNMX0ZVVFVSRQkyCQkvKiBsb2NrIGFsbCBmdXR1cmUgbWFwcGluZ3MgKi8KKworI2RlZmluZSBNQURWX05PUk1BTAkweDAJCS8qIGRlZmF1bHQgcGFnZS1pbiBiZWhhdmlvciAqLworI2RlZmluZSBNQURWX1JBTkRPTQkweDEJCS8qIHBhZ2UtaW4gbWluaW11bSByZXF1aXJlZCAqLworI2RlZmluZSBNQURWX1NFUVVFTlRJQUwJMHgyCQkvKiByZWFkLWFoZWFkIGFnZ3Jlc3NpdmVseSAqLworI2RlZmluZSBNQURWX1dJTExORUVECTB4MwkJLyogcHJlLWZhdWx0IHBhZ2VzICovCisjZGVmaW5lIE1BRFZfRE9OVE5FRUQJMHg0CQkvKiBkaXNjYXJkIHRoZXNlIHBhZ2VzICovCisKKy8qIGNvbXBhdGliaWxpdHkgZmxhZ3MgKi8KKyNkZWZpbmUgTUFQX0FOT04JTUFQX0FOT05ZTU9VUworI2RlZmluZSBNQVBfRklMRQkwCisKKyNlbmRpZiAvKiBfX0g4MzAwX01NQU5fSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1oODMwMC9tbXUuaCBiL2luY2x1ZGUvYXNtLWg4MzAwL21tdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjZTA2ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC9tbXUuaApAQCAtMCwwICsxLDExIEBACisjaWZuZGVmIF9fTU1VX0gKKyNkZWZpbmUgX19NTVVfSAorCisvKiBDb3B5cmlnaHQgKEMpIDIwMDIsIERhdmlkIE1jQ3VsbG91Z2ggPGRhdmlkbUBzbmFwZ2Vhci5jb20+ICovCisKK3R5cGVkZWYgc3RydWN0IHsKKwlzdHJ1Y3Qgdm1fbGlzdF9zdHJ1Y3QJKnZtbGlzdDsKKwl1bnNpZ25lZCBsb25nCQllbmRfYnJrOworfSBtbV9jb250ZXh0X3Q7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvbW11X2NvbnRleHQuaCBiL2luY2x1ZGUvYXNtLWg4MzAwL21tdV9jb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNiNTU1YgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWg4MzAwL21tdV9jb250ZXh0LmgKQEAgLTAsMCArMSwzMiBAQAorI2lmbmRlZiBfX0g4MzAwX01NVV9DT05URVhUX0gKKyNkZWZpbmUgX19IODMwMF9NTVVfQ09OVEVYVF9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBlbnRlcl9sYXp5X3RsYihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7Cit9CisKK2V4dGVybiBpbmxpbmUgaW50Citpbml0X25ld19jb250ZXh0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwkvLyBtbS0+Y29udGV4dCA9IHZpcnRfdG9fcGh5cyhtbS0+cGdkKTsKKwlyZXR1cm4oMCk7Cit9CisKKyNkZWZpbmUgZGVzdHJveV9jb250ZXh0KG1tKQkJZG8geyB9IHdoaWxlKDApCisjZGVmaW5lIGRlYWN0aXZhdGVfbW0odHNrLG1tKSAgICAgICAgICAgZG8geyB9IHdoaWxlKDApCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzd2l0Y2hfbW0oc3RydWN0IG1tX3N0cnVjdCAqcHJldiwgc3RydWN0IG1tX3N0cnVjdCAqbmV4dCwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7Cit9CisKK2V4dGVybiBpbmxpbmUgdm9pZCBhY3RpdmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICpwcmV2X21tLAorCQkJICAgICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm5leHRfbW0pCit7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvbW9kdWxlLmggYi9pbmNsdWRlL2FzbS1oODMwMC9tb2R1bGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTIzMjMxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvbW9kdWxlLmgKQEAgLTAsMCArMSwxMyBAQAorI2lmbmRlZiBfQVNNX0g4MzAwX01PRFVMRV9ICisjZGVmaW5lIF9BU01fSDgzMDBfTU9EVUxFX0gKKy8qCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIEg4LzMwMCBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgbW9kdWxlIGNvZGUuCisgKi8KK3N0cnVjdCBtb2RfYXJjaF9zcGVjaWZpYyB7IH07CisjZGVmaW5lIEVsZl9TaGRyIEVsZjMyX1NoZHIKKyNkZWZpbmUgRWxmX1N5bSBFbGYzMl9TeW0KKyNkZWZpbmUgRWxmX0VoZHIgRWxmMzJfRWhkcgorCisjZGVmaW5lIE1PRFVMRV9TWU1CT0xfUFJFRklYICJfIgorCisjZW5kaWYgLyogX0FTTV9IOC8zMDBfTU9EVUxFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWg4MzAwL21zZ2J1Zi5oIGIvaW5jbHVkZS9hc20taDgzMDAvbXNnYnVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIxNDhjZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWg4MzAwL21zZ2J1Zi5oCkBAIC0wLDAgKzEsMzEgQEAKKyNpZm5kZWYgX0g4MzAwX01TR0JVRl9ICisjZGVmaW5lIF9IODMwMF9NU0dCVUZfSAorCisvKiAKKyAqIFRoZSBtc3FpZDY0X2RzIHN0cnVjdHVyZSBmb3IgSDgvMzAwIGFyY2hpdGVjdHVyZS4KKyAqIE5vdGUgZXh0cmEgcGFkZGluZyBiZWNhdXNlIHRoaXMgc3RydWN0dXJlIGlzIHBhc3NlZCBiYWNrIGFuZCBmb3J0aAorICogYmV0d2VlbiBrZXJuZWwgYW5kIHVzZXIgc3BhY2UuCisgKgorICogUGFkIHNwYWNlIGlzIGxlZnQgZm9yOgorICogLSA2NC1iaXQgdGltZV90IHRvIHNvbHZlIHkyMDM4IHByb2JsZW0KKyAqIC0gMiBtaXNjZWxsYW5lb3VzIDMyLWJpdCB2YWx1ZXMKKyAqLworCitzdHJ1Y3QgbXNxaWQ2NF9kcyB7CisJc3RydWN0IGlwYzY0X3Blcm0gbXNnX3Blcm07CisJX19rZXJuZWxfdGltZV90IG1zZ19zdGltZTsJLyogbGFzdCBtc2dzbmQgdGltZSAqLworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQxOworCV9fa2VybmVsX3RpbWVfdCBtc2dfcnRpbWU7CS8qIGxhc3QgbXNncmN2IHRpbWUgKi8KKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkMjsKKwlfX2tlcm5lbF90aW1lX3QgbXNnX2N0aW1lOwkvKiBsYXN0IGNoYW5nZSB0aW1lICovCisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDM7CisJdW5zaWduZWQgbG9uZyAgbXNnX2NieXRlczsJLyogY3VycmVudCBudW1iZXIgb2YgYnl0ZXMgb24gcXVldWUgKi8KKwl1bnNpZ25lZCBsb25nICBtc2dfcW51bTsJLyogbnVtYmVyIG9mIG1lc3NhZ2VzIGluIHF1ZXVlICovCisJdW5zaWduZWQgbG9uZyAgbXNnX3FieXRlczsJLyogbWF4IG51bWJlciBvZiBieXRlcyBvbiBxdWV1ZSAqLworCV9fa2VybmVsX3BpZF90IG1zZ19sc3BpZDsJLyogcGlkIG9mIGxhc3QgbXNnc25kICovCisJX19rZXJuZWxfcGlkX3QgbXNnX2xycGlkOwkvKiBsYXN0IHJlY2VpdmUgcGlkICovCisJdW5zaWduZWQgbG9uZyAgX191bnVzZWQ0OworCXVuc2lnbmVkIGxvbmcgIF9fdW51c2VkNTsKK307CisKKyNlbmRpZiAvKiBfSDgzMDBfTVNHQlVGX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWg4MzAwL25hbWVpLmggYi9pbmNsdWRlL2FzbS1oODMwMC9uYW1laS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiNmYxOTYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC9uYW1laS5oCkBAIC0wLDAgKzEsMTcgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1oODMwMC9uYW1laS5oCisgKgorICogSW5jbHVkZWQgZnJvbSBsaW51eC9mcy9uYW1laS5jCisgKi8KKworI2lmbmRlZiBfX0g4MzAwX05BTUVJX0gKKyNkZWZpbmUgX19IODMwMF9OQU1FSV9ICisKKy8qIFRoaXMgZHVtbXkgcm91dGluZSBtYXliZSBjaGFuZ2VkIHRvIHNvbWV0aGluZyB1c2VmdWwKKyAqIGZvciAvdXNyL2duZW11bC8gZW11bGF0aW9uIHN0dWZmLgorICogTG9vayBhdCBhc20tc3BhcmMvbmFtZWkuaCBmb3IgZGV0YWlscy4KKyAqLworCisjZGVmaW5lIF9fZW11bF9wcmVmaXgoKSBOVUxMCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvcGFnZS5oIGIvaW5jbHVkZS9hc20taDgzMDAvcGFnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4YjA1M2YKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC9wYWdlLmgKQEAgLTAsMCArMSwxMDQgQEAKKyNpZm5kZWYgX0g4MzAwX1BBR0VfSAorI2RlZmluZSBfSDgzMDBfUEFHRV9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworLyogUEFHRV9TSElGVCBkZXRlcm1pbmVzIHRoZSBwYWdlIHNpemUgKi8KKworI2RlZmluZSBQQUdFX1NISUZUCSgxMikKKyNkZWZpbmUgUEFHRV9TSVpFCSgxVUwgPDwgUEFHRV9TSElGVCkKKyNkZWZpbmUgUEFHRV9NQVNLCSh+KFBBR0VfU0laRS0xKSkKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorCisjaWYgIWRlZmluZWQoQ09ORklHX1NNQUxMX1RBU0tTKSAmJiBQQUdFX1NISUZUIDwgMTMKKyNkZWZpbmUgS1RIUkVBRF9TSVpFICg4MTkyKQorI2Vsc2UKKyNkZWZpbmUgS1RIUkVBRF9TSVpFIFBBR0VfU0laRQorI2VuZGlmCisgCisjaWZuZGVmIF9fQVNTRU1CTFlfXworIAorI2RlZmluZSBnZXRfdXNlcl9wYWdlKHZhZGRyKQkJX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpCisjZGVmaW5lIGZyZWVfdXNlcl9wYWdlKHBhZ2UsIGFkZHIpCWZyZWVfcGFnZShhZGRyKQorCisjZGVmaW5lIGNsZWFyX3BhZ2UocGFnZSkJbWVtc2V0KChwYWdlKSwgMCwgUEFHRV9TSVpFKQorI2RlZmluZSBjb3B5X3BhZ2UodG8sZnJvbSkJbWVtY3B5KCh0byksIChmcm9tKSwgUEFHRV9TSVpFKQorCisjZGVmaW5lIGNsZWFyX3VzZXJfcGFnZShwYWdlLCB2YWRkciwgcGcpCWNsZWFyX3BhZ2UocGFnZSkKKyNkZWZpbmUgY29weV91c2VyX3BhZ2UodG8sIGZyb20sIHZhZGRyLCBwZykJY29weV9wYWdlKHRvLCBmcm9tKQorCisjZGVmaW5lIGFsbG9jX3plcm9lZF91c2VyX2hpZ2hwYWdlKHZtYSwgdmFkZHIpIGFsbG9jX3BhZ2Vfdm1hKEdGUF9ISUdIVVNFUiB8IF9fR0ZQX1pFUk8sIHZtYSwgdmFkZHIpCisjZGVmaW5lIF9fSEFWRV9BUkNIX0FMTE9DX1pFUk9FRF9VU0VSX0hJR0hQQUdFCisKKy8qCisgKiBUaGVzZSBhcmUgdXNlZCB0byBtYWtlIHVzZSBvZiBDIHR5cGUtY2hlY2tpbmcuLgorICovCit0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgcHRlOyB9IHB0ZV90OwordHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHBtZFsxNl07IH0gcG1kX3Q7Cit0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgcGdkOyB9IHBnZF90OwordHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHBncHJvdDsgfSBwZ3Byb3RfdDsKKworI2RlZmluZSBwdGVfdmFsKHgpCSgoeCkucHRlKQorI2RlZmluZSBwbWRfdmFsKHgpCSgoJngpLT5wbWRbMF0pCisjZGVmaW5lIHBnZF92YWwoeCkJKCh4KS5wZ2QpCisjZGVmaW5lIHBncHJvdF92YWwoeCkJKCh4KS5wZ3Byb3QpCisKKyNkZWZpbmUgX19wdGUoeCkJKChwdGVfdCkgeyAoeCkgfSApCisjZGVmaW5lIF9fcG1kKHgpCSgocG1kX3QpIHsgKHgpIH0gKQorI2RlZmluZSBfX3BnZCh4KQkoKHBnZF90KSB7ICh4KSB9ICkKKyNkZWZpbmUgX19wZ3Byb3QoeCkJKChwZ3Byb3RfdCkgeyAoeCkgfSApCisKKy8qIHRvIGFsaWduIHRoZSBwb2ludGVyIHRvIHRoZSAobmV4dCkgcGFnZSBib3VuZGFyeSAqLworI2RlZmluZSBQQUdFX0FMSUdOKGFkZHIpCSgoKGFkZHIpK1BBR0VfU0laRS0xKSZQQUdFX01BU0spCisKKy8qIFB1cmUgMl5uIHZlcnNpb24gb2YgZ2V0X29yZGVyICovCitleHRlcm4gX19pbmxpbmVfXyBpbnQgZ2V0X29yZGVyKHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlpbnQgb3JkZXI7CisKKwlzaXplID0gKHNpemUtMSkgPj4gKFBBR0VfU0hJRlQtMSk7CisJb3JkZXIgPSAtMTsKKwlkbyB7CisJCXNpemUgPj49IDE7CisJCW9yZGVyKys7CisJfSB3aGlsZSAoc2l6ZSk7CisJcmV0dXJuIG9yZGVyOworfQorCitleHRlcm4gdW5zaWduZWQgbG9uZyBtZW1vcnlfc3RhcnQ7CitleHRlcm4gdW5zaWduZWQgbG9uZyBtZW1vcnlfZW5kOworCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisjaW5jbHVkZSA8YXNtL3BhZ2Vfb2Zmc2V0Lmg+CisKKyNkZWZpbmUgUEFHRV9PRkZTRVQJCShQQUdFX09GRlNFVF9SQVcpCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNkZWZpbmUgX19wYSh2YWRkcikJCXZpcnRfdG9fcGh5cygodm9pZCAqKXZhZGRyKQorI2RlZmluZSBfX3ZhKHBhZGRyKQkJcGh5c190b192aXJ0KCh1bnNpZ25lZCBsb25nKXBhZGRyKQorCisjZGVmaW5lIHZpcnRfdG9fcGZuKGthZGRyKQkoX19wYShrYWRkcikgPj4gUEFHRV9TSElGVCkKKyNkZWZpbmUgcGZuX3RvX3ZpcnQocGZuKQlfX3ZhKChwZm4pIDw8IFBBR0VfU0hJRlQpCisKKyNkZWZpbmUgTUFQX05SKGFkZHIpCQkoKCh1bnNpZ25lZCBsb25nKShhZGRyKS1QQUdFX09GRlNFVCkgPj4gUEFHRV9TSElGVCkKKyNkZWZpbmUgdmlydF90b19wYWdlKGFkZHIpCShtZW1fbWFwICsgKCgodW5zaWduZWQgbG9uZykoYWRkciktUEFHRV9PRkZTRVQpID4+IFBBR0VfU0hJRlQpKQorI2RlZmluZSB2aXJ0X3RvX3BhZ2UoYWRkcikJKG1lbV9tYXAgKyAoKCh1bnNpZ25lZCBsb25nKShhZGRyKS1QQUdFX09GRlNFVCkgPj4gUEFHRV9TSElGVCkpCisjZGVmaW5lIHBhZ2VfdG9fdmlydChwYWdlKQkoKCgocGFnZSkgLSBtZW1fbWFwKSA8PCBQQUdFX1NISUZUKSArIFBBR0VfT0ZGU0VUKQorI2RlZmluZSBWQUxJRF9QQUdFKHBhZ2UpCSgocGFnZSAtIG1lbV9tYXApIDwgbWF4X21hcG5yKQorCisjZGVmaW5lIHBmbl90b19wYWdlKHBmbikJdmlydF90b19wYWdlKHBmbl90b192aXJ0KHBmbikpCisjZGVmaW5lIHBhZ2VfdG9fcGZuKHBhZ2UpCXZpcnRfdG9fcGZuKHBhZ2VfdG9fdmlydChwYWdlKSkKKworI2RlZmluZQl2aXJ0X2FkZHJfdmFsaWQoa2FkZHIpCSgoKHZvaWQgKikoa2FkZHIpID49ICh2b2lkICopUEFHRV9PRkZTRVQpICYmIFwKKwkJCQkoKHZvaWQgKikoa2FkZHIpIDwgKHZvaWQgKiltZW1vcnlfZW5kKSkKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX0g4MzAwX1BBR0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvcGFnZV9vZmZzZXQuaCBiL2luY2x1ZGUvYXNtLWg4MzAwL3BhZ2Vfb2Zmc2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGNjNmUxNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWg4MzAwL3BhZ2Vfb2Zmc2V0LmgKQEAgLTAsMCArMSw0IEBACisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNkZWZpbmUgUEFHRV9PRkZTRVRfUkFXCQkweDAwMDAwMDAwCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWg4MzAwL3BhcmFtLmggYi9pbmNsdWRlL2FzbS1oODMwMC9wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyNmRkZGYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC9wYXJhbS5oCkBAIC0wLDAgKzEsMjMgQEAKKyNpZm5kZWYgX0g4MzAwX1BBUkFNX0gKKyNkZWZpbmUgX0g4MzAwX1BBUkFNX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjaWZuZGVmIEhaCisjZGVmaW5lIEhaIDEwMAorI2VuZGlmCisKKyNpZmRlZiBfX0tFUk5FTF9fCisjZGVmaW5lCVVTRVJfSFoJCUhaCisjZGVmaW5lCUNMT0NLU19QRVJfU0VDCShVU0VSX0haKQorI2VuZGlmCisKKyNkZWZpbmUgRVhFQ19QQUdFU0laRQk0MDk2CisKKyNpZm5kZWYgTk9HUk9VUAorI2RlZmluZSBOT0dST1VQCQkoLTEpCisjZW5kaWYKKworI2RlZmluZSBNQVhIT1NUTkFNRUxFTgk2NAkvKiBtYXggbGVuZ3RoIG9mIGhvc3RuYW1lICovCisKKyNlbmRpZiAvKiBfSDgzMDBfUEFSQU1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvcGNpLmggYi9pbmNsdWRlL2FzbS1oODMwMC9wY2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDMyNzI5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvcGNpLmgKQEAgLTAsMCArMSwyOSBAQAorI2lmbmRlZiBfQVNNX0g4MzAwX1BDSV9ICisjZGVmaW5lIF9BU01fSDgzMDBfUENJX0gKKworLyoKKyAqIGFzbS1oODMwMC9wY2kuaCAtIEg4LzMwMCBzcGVjaWZpYyBQQ0kgZGVjbGFyYXRpb25zLgorICoKKyAqIFlvc2hpbm9yaSBTYXRvIDx5c2F0b0B1c2Vycy5zb3VyY2Vmb3JnZS5qcD4KKyAqLworCisjZGVmaW5lIHBjaWJpb3NfYXNzaWduX2FsbF9idXNzZXMoKQkwCisjZGVmaW5lIHBjaWJpb3Nfc2Nhbl9hbGxfZm5zKGEsIGIpCTAKKworZXh0ZXJuIGlubGluZSB2b2lkIHBjaWJpb3Nfc2V0X21hc3RlcihzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCS8qIE5vIHNwZWNpYWwgYnVzIG1hc3RlcmluZyBzZXR1cCBoYW5kbGluZyAqLworfQorCitleHRlcm4gaW5saW5lIHZvaWQgcGNpYmlvc19wZW5hbGl6ZV9pc2FfaXJxKGludCBpcnEpCit7CisJLyogV2UgZG9uJ3QgZG8gZHluYW1pYyBQQ0kgSVJRIGFsbG9jYXRpb24gKi8KK30KKworI2RlZmluZSBQQ0lfRE1BX0JVU19JU19QSFlTCSgxKQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGNpYmlvc19hZGRfcGxhdGZvcm1fZW50cmllcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworfQorCisjZW5kaWYgLyogX0FTTV9IODMwMF9QQ0lfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvcGVyY3B1LmggYi9pbmNsdWRlL2FzbS1oODMwMC9wZXJjcHUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmMwM2UzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvcGVyY3B1LmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fQVJDSF9IODMwMF9QRVJDUFVfXworI2RlZmluZSBfX0FSQ0hfSDgzMDBfUEVSQ1BVX18KKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BlcmNwdS5oPgorCisjZW5kaWYgLyogX19BUkNIX0g4MzAwX1BFUkNQVV9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1oODMwMC9wZ2FsbG9jLmggYi9pbmNsdWRlL2FzbS1oODMwMC9wZ2FsbG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJlODlhMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWg4MzAwL3BnYWxsb2MuaApAQCAtMCwwICsxLDggQEAKKyNpZm5kZWYgX0g4MzAwX1BHQUxMT0NfSAorI2RlZmluZSBfSDgzMDBfUEdBTExPQ19ICisKKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKworI2RlZmluZSBjaGVja19wZ3RfY2FjaGUoKQlkbyB7IH0gd2hpbGUgKDApCisKKyNlbmRpZiAvKiBfSDgzMDBfUEdBTExPQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1oODMwMC9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1oODMwMC9wZ3RhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjkwNzZlYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWg4MzAwL3BndGFibGUuaApAQCAtMCwwICsxLDc5IEBACisjaWZuZGVmIF9IODMwMF9QR1RBQkxFX0gKKyNkZWZpbmUgX0g4MzAwX1BHVEFCTEVfSAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvNGxldmVsLWZpeHVwLmg+CisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNkZWZpbmUgcGdkX3ByZXNlbnQocGdkKSAgICAgKDEpICAgICAgIC8qIHBhZ2VzIGFyZSBhbHdheXMgcHJlc2VudCBvbiBOT19NTSAqLworI2RlZmluZSBwZ2Rfbm9uZShwZ2QpCQkoMCkKKyNkZWZpbmUgcGdkX2JhZChwZ2QpCQkoMCkKKyNkZWZpbmUgcGdkX2NsZWFyKHBnZHApCisjZGVmaW5lIGtlcm5fYWRkcl92YWxpZChhZGRyKQkoMSkKKyNkZWZpbmUJcG1kX29mZnNldChhLCBiKQkoKHZvaWQgKikwKQorI2RlZmluZSBwbWRfbm9uZShwbWQpICAgICAgICAgICAoMSkKKyNkZWZpbmUgcGdkX29mZnNldF9rKGFkcmRyZXNzKSAgKChwZ2RfdCAqKTApCisjZGVmaW5lIHB0ZV9vZmZzZXRfa2VybmVsKGRpciwgYWRkcmVzcykgKChwdGVfdCAqKTApCisKKyNkZWZpbmUgUEFHRV9OT05FCQlfX3BncHJvdCgwKSAgICAvKiB0aGVzZSBtZWFuIG5vdGhpbmcgdG8gTk9fTU0gKi8KKyNkZWZpbmUgUEFHRV9TSEFSRUQJCV9fcGdwcm90KDApICAgIC8qIHRoZXNlIG1lYW4gbm90aGluZyB0byBOT19NTSAqLworI2RlZmluZSBQQUdFX0NPUFkJCV9fcGdwcm90KDApICAgIC8qIHRoZXNlIG1lYW4gbm90aGluZyB0byBOT19NTSAqLworI2RlZmluZSBQQUdFX1JFQURPTkxZCV9fcGdwcm90KDApICAgIC8qIHRoZXNlIG1lYW4gbm90aGluZyB0byBOT19NTSAqLworI2RlZmluZSBQQUdFX0tFUk5FTAkJX19wZ3Byb3QoMCkgICAgLyogdGhlc2UgbWVhbiBub3RoaW5nIHRvIE5PX01NICovCisKK2V4dGVybiB2b2lkIHBhZ2luZ19pbml0KHZvaWQpOworI2RlZmluZSBzd2FwcGVyX3BnX2RpciAoKHBnZF90ICopIDApCisKKyNkZWZpbmUgX19zd3BfdHlwZSh4KQkJKDApCisjZGVmaW5lIF9fc3dwX29mZnNldCh4KQkJKDApCisjZGVmaW5lIF9fc3dwX2VudHJ5KHR5cCxvZmYpCSgoc3dwX2VudHJ5X3QpIHsgKCh0eXApIHwgKChvZmYpIDw8IDcpKSB9KQorI2RlZmluZSBfX3B0ZV90b19zd3BfZW50cnkocHRlKQkoKHN3cF9lbnRyeV90KSB7IHB0ZV92YWwocHRlKSB9KQorI2RlZmluZSBfX3N3cF9lbnRyeV90b19wdGUoeCkJKChwdGVfdCkgeyAoeCkudmFsIH0pCisKK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9maWxlKHB0ZV90IHB0ZSkgeyByZXR1cm4gMDsgfQorCisvKgorICogWkVST19QQUdFIGlzIGEgZ2xvYmFsIHNoYXJlZCBwYWdlIHRoYXQgaXMgYWx3YXlzIHplcm86IHVzZWQKKyAqIGZvciB6ZXJvLW1hcHBlZCBtZW1vcnkgYXJlYXMgZXRjLi4KKyAqLworI2RlZmluZSBaRVJPX1BBR0UodmFkZHIpCSh2aXJ0X3RvX3BhZ2UoMCkpCisKKy8qCisgKiBUaGVzZSB3b3VsZCBiZSBpbiBvdGhlciBwbGFjZXMgYnV0IGhhdmluZyB0aGVtIGhlcmUgcmVkdWNlcyB0aGUgZGlmZnMuCisgKi8KK2V4dGVybiB1bnNpZ25lZCBpbnQga29ianNpemUoY29uc3Qgdm9pZCAqb2JqcCk7CitleHRlcm4gaW50IGlzX2luX3JvbSh1bnNpZ25lZCBsb25nKTsKKworLyoKKyAqIE5vIHBhZ2UgdGFibGUgY2FjaGVzIHRvIGluaXRpYWxpc2UKKyAqLworI2RlZmluZSBwZ3RhYmxlX2NhY2hlX2luaXQoKSAgIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgaW9fcmVtYXBfcGFnZV9yYW5nZSh2bWEsIHZhZGRyLCBwYWRkciwgc2l6ZSwgcHJvdCkJCVwKKwkJcmVtYXBfcGZuX3JhbmdlKHZtYSwgdmFkZHIsIChwYWRkcikgPj4gUEFHRV9TSElGVCwgc2l6ZSwgcHJvdCkKKworI2RlZmluZSBpb19yZW1hcF9wZm5fcmFuZ2Uodm1hLCB2YWRkciwgcGZuLCBzaXplLCBwcm90KQkJXAorCQlyZW1hcF9wZm5fcmFuZ2Uodm1hLCB2YWRkciwgcGZuLCBzaXplLCBwcm90KQorCisjZGVmaW5lIE1LX0lPU1BBQ0VfUEZOKHNwYWNlLCBwZm4pCShwZm4pCisjZGVmaW5lIEdFVF9JT1NQQUNFKHBmbikJCTAKKyNkZWZpbmUgR0VUX1BGTihwZm4pCQkJKHBmbikKKworLyoKKyAqIEFsbCAzMmJpdCBhZGRyZXNzZXMgYXJlIGVmZmVjdGl2ZWx5IHZhbGlkIGZvciB2bWFsbG9jLi4uCisgKiBTb3J0IG9mIG1lYW5pbmdsZXNzIGZvciBub24tVk0gdGFyZ2V0cy4KKyAqLworI2RlZmluZQlWTUFMTE9DX1NUQVJUCTAKKyNkZWZpbmUJVk1BTExPQ19FTkQJMHhmZmZmZmZmZgorCisvKgorICogQWxsIDMyYml0IGFkZHJlc3NlcyBhcmUgZWZmZWN0aXZlbHkgdmFsaWQgZm9yIHZtYWxsb2MuLi4KKyAqIFNvcnQgb2YgbWVhbmluZ2xlc3MgZm9yIG5vbi1WTSB0YXJnZXRzLgorICovCisjZGVmaW5lCVZNQUxMT0NfU1RBUlQJMAorI2RlZmluZQlWTUFMTE9DX0VORAkweGZmZmZmZmZmCisKKyNlbmRpZiAvKiBfSDgzMDBfUEdUQUJMRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1oODMwMC9wb2xsLmggYi9pbmNsdWRlL2FzbS1oODMwMC9wb2xsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY0OWFiOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWg4MzAwL3BvbGwuaApAQCAtMCwwICsxLDIyIEBACisjaWZuZGVmIF9fSDgzMDBfUE9MTF9ICisjZGVmaW5lIF9fSDgzMDBfUE9MTF9ICisKKyNkZWZpbmUgUE9MTElOCQkgIDEKKyNkZWZpbmUgUE9MTFBSSQkJICAyCisjZGVmaW5lIFBPTExPVVQJCSAgNAorI2RlZmluZSBQT0xMRVJSCQkgIDgKKyNkZWZpbmUgUE9MTEhVUAkJIDE2CisjZGVmaW5lIFBPTExOVkFMCSAzMgorI2RlZmluZSBQT0xMUkROT1JNCSA2NAorI2RlZmluZSBQT0xMV1JOT1JNCVBPTExPVVQKKyNkZWZpbmUgUE9MTFJEQkFORAkxMjgKKyNkZWZpbmUgUE9MTFdSQkFORAkyNTYKKyNkZWZpbmUgUE9MTE1TRwkJMHgwNDAwCisKK3N0cnVjdCBwb2xsZmQgeworCWludCBmZDsKKwlzaG9ydCBldmVudHM7CisJc2hvcnQgcmV2ZW50czsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvcG9zaXhfdHlwZXMuaCBiL2luY2x1ZGUvYXNtLWg4MzAwL3Bvc2l4X3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RlOTRiMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWg4MzAwL3Bvc2l4X3R5cGVzLmgKQEAgLTAsMCArMSw2NCBAQAorI2lmbmRlZiBfX0FSQ0hfSDgzMDBfUE9TSVhfVFlQRVNfSAorI2RlZmluZSBfX0FSQ0hfSDgzMDBfUE9TSVhfVFlQRVNfSAorCisvKgorICogVGhpcyBmaWxlIGlzIGdlbmVyYWxseSB1c2VkIGJ5IHVzZXItbGV2ZWwgc29mdHdhcmUsIHNvIHlvdSBuZWVkIHRvCisgKiBiZSBhIGxpdHRsZSBjYXJlZnVsIGFib3V0IG5hbWVzcGFjZSBwb2xsdXRpb24gZXRjLiAgQWxzbywgd2UgY2Fubm90CisgKiBhc3N1bWUgR0NDIGlzIGJlaW5nIHVzZWQuCisgKi8KKwordHlwZWRlZiB1bnNpZ25lZCBsb25nCV9fa2VybmVsX2lub190OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAlfX2tlcm5lbF9tb2RlX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CV9fa2VybmVsX25saW5rX3Q7Cit0eXBlZGVmIGxvbmcJCV9fa2VybmVsX29mZl90OwordHlwZWRlZiBpbnQJCV9fa2VybmVsX3BpZF90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAlfX2tlcm5lbF9pcGNfcGlkX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CV9fa2VybmVsX3VpZF90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAlfX2tlcm5lbF9naWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50CV9fa2VybmVsX3NpemVfdDsKK3R5cGVkZWYgaW50CQlfX2tlcm5lbF9zc2l6ZV90OwordHlwZWRlZiBpbnQJCV9fa2VybmVsX3B0cmRpZmZfdDsKK3R5cGVkZWYgbG9uZwkJX19rZXJuZWxfdGltZV90OwordHlwZWRlZiBsb25nCQlfX2tlcm5lbF9zdXNlY29uZHNfdDsKK3R5cGVkZWYgbG9uZwkJX19rZXJuZWxfY2xvY2tfdDsKK3R5cGVkZWYgaW50CQlfX2tlcm5lbF90aW1lcl90OwordHlwZWRlZiBpbnQJCV9fa2VybmVsX2Nsb2NraWRfdDsKK3R5cGVkZWYgaW50CQlfX2tlcm5lbF9kYWRkcl90OwordHlwZWRlZiBjaGFyICoJCV9fa2VybmVsX2NhZGRyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CV9fa2VybmVsX3VpZDE2X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CV9fa2VybmVsX2dpZDE2X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludAlfX2tlcm5lbF91aWQzMl90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQJX19rZXJuZWxfZ2lkMzJfdDsKKwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAlfX2tlcm5lbF9vbGRfdWlkX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CV9fa2VybmVsX29sZF9naWRfdDsKKworI2lmZGVmIF9fR05VQ19fCit0eXBlZGVmIGxvbmcgbG9uZwlfX2tlcm5lbF9sb2ZmX3Q7CisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgeworI2lmIGRlZmluZWQoX19LRVJORUxfXykgfHwgZGVmaW5lZChfX1VTRV9BTEwpCisJaW50CXZhbFsyXTsKKyNlbHNlIC8qICFkZWZpbmVkKF9fS0VSTkVMX18pICYmICFkZWZpbmVkKF9fVVNFX0FMTCkgKi8KKwlpbnQJX192YWxbMl07CisjZW5kaWYgLyogIWRlZmluZWQoX19LRVJORUxfXykgJiYgIWRlZmluZWQoX19VU0VfQUxMKSAqLworfSBfX2tlcm5lbF9mc2lkX3Q7CisKKyNpZiBkZWZpbmVkKF9fS0VSTkVMX18pIHx8ICFkZWZpbmVkKF9fR0xJQkNfXykgfHwgKF9fR0xJQkNfXyA8IDIpCisKKyN1bmRlZglfX0ZEX1NFVAorI2RlZmluZQlfX0ZEX1NFVChkLCBzZXQpCSgoc2V0KS0+ZmRzX2JpdHNbX19GREVMVChkKV0gfD0gX19GRE1BU0soZCkpCisKKyN1bmRlZglfX0ZEX0NMUgorI2RlZmluZQlfX0ZEX0NMUihkLCBzZXQpCSgoc2V0KS0+ZmRzX2JpdHNbX19GREVMVChkKV0gJj0gfl9fRkRNQVNLKGQpKQorCisjdW5kZWYJX19GRF9JU1NFVAorI2RlZmluZQlfX0ZEX0lTU0VUKGQsIHNldCkJKChzZXQpLT5mZHNfYml0c1tfX0ZERUxUKGQpXSAmIF9fRkRNQVNLKGQpKQorCisjdW5kZWYJX19GRF9aRVJPCisjZGVmaW5lIF9fRkRfWkVSTyhmZHNldHApIChtZW1zZXQgKGZkc2V0cCwgMCwgc2l6ZW9mKCooZmRfc2V0ICopZmRzZXRwKSkpCisKKyNlbmRpZiAvKiBkZWZpbmVkKF9fS0VSTkVMX18pIHx8ICFkZWZpbmVkKF9fR0xJQkNfXykgfHwgKF9fR0xJQkNfXyA8IDIpICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvcHJvY2Vzc29yLmggYi9pbmNsdWRlL2FzbS1oODMwMC9wcm9jZXNzb3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmYwYTcxMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWg4MzAwL3Byb2Nlc3Nvci5oCkBAIC0wLDAgKzEsMTM1IEBACisvKgorICogaW5jbHVkZS9hc20taDgzMDAvcHJvY2Vzc29yLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgWW9zaGlub3JpIFNhdG8KKyAqCisgKiBCYXNlZCBvbjogbGludXgvYXNtLW02OG5vbW11L3Byb2Nlc3Nvci5oCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1IEhhbWlzaCBNYWNkb25hbGQKKyAqLworCisjaWZuZGVmIF9fQVNNX0g4MzAwX1BST0NFU1NPUl9ICisjZGVmaW5lIF9fQVNNX0g4MzAwX1BST0NFU1NPUl9ICisKKy8qCisgKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIG1hY3JvIHRoYXQgcmV0dXJucyBjdXJyZW50CisgKiBpbnN0cnVjdGlvbiBwb2ludGVyICgicHJvZ3JhbSBjb3VudGVyIikuCisgKi8KKyNkZWZpbmUgY3VycmVudF90ZXh0X2FkZHIoKSAoeyBfX2xhYmVsX18gX2w7IF9sOiAmJl9sO30pCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgorI2luY2x1ZGUgPGFzbS9mcHUuaD4KKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisjaW5jbHVkZSA8YXNtL2N1cnJlbnQuaD4KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHJkdXNwKHZvaWQpIHsKKwlleHRlcm4gdW5zaWduZWQgaW50CXN3X3VzcDsKKwlyZXR1cm4oc3dfdXNwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHdydXNwKHVuc2lnbmVkIGxvbmcgdXNwKSB7CisJZXh0ZXJuIHVuc2lnbmVkIGludAlzd191c3A7CisJc3dfdXNwID0gdXNwOworfQorCisvKgorICogVXNlciBzcGFjZSBwcm9jZXNzIHNpemU6IDMuNzVHQi4gVGhpcyBpcyBoYXJkY29kZWQgaW50byBhIGZldyBwbGFjZXMsCisgKiBzbyBkb24ndCBjaGFuZ2UgaXQgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy4KKyAqLworI2RlZmluZSBUQVNLX1NJWkUJKDB4RkZGRkZGRkZVTCkKKworLyoKKyAqIFRoaXMgZGVjaWRlcyB3aGVyZSB0aGUga2VybmVsIHdpbGwgc2VhcmNoIGZvciBhIGZyZWUgY2h1bmsgb2Ygdm0KKyAqIHNwYWNlIGR1cmluZyBtbWFwJ3MuIFdlIHdvbid0IGJlIHVzaW5nIGl0CisgKi8KKyNkZWZpbmUgVEFTS19VTk1BUFBFRF9CQVNFCTAKKworc3RydWN0IHRocmVhZF9zdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcgIGtzcDsJCS8qIGtlcm5lbCBzdGFjayBwb2ludGVyICovCisJdW5zaWduZWQgbG9uZyAgdXNwOwkJLyogdXNlciBzdGFjayBwb2ludGVyICovCisJdW5zaWduZWQgbG9uZyAgY2NyOwkJLyogc2F2ZWQgc3RhdHVzIHJlZ2lzdGVyICovCisJdW5zaWduZWQgbG9uZyAgZXNwMDsgICAgICAgICAgICAvKiBwb2ludHMgdG8gU1Igb2Ygc3RhY2sgZnJhbWUgKi8KKwlzdHJ1Y3QgeworCQl1bnNpZ25lZCBzaG9ydCAqYWRkcjsKKwkJdW5zaWduZWQgc2hvcnQgaW5zdDsKKwl9IGJyZWFraW5mbzsKK307CisKKyNkZWZpbmUgSU5JVF9USFJFQUQgIHsJCQkJCQlcCisJLmtzcCAgPSBzaXplb2YoaW5pdF9zdGFjaykgKyAodW5zaWduZWQgbG9uZylpbml0X3N0YWNrLCBcCisJLnVzcCAgPSAwLAkJCQkJCVwKKwkuY2NyICA9IFBTX1MsCQkJCQkJXAorCS5lc3AwID0gMCwJCQkJCQlcCisJLmJyZWFraW5mbyA9IHsJCQkJCQlcCisJCS5hZGRyID0gKHVuc2lnbmVkIHNob3J0ICopLTEsCQkJXAorCQkuaW5zdCA9IDAJCQkJCVwKKwl9CQkJCQkJCVwKK30KKworLyoKKyAqIERvIG5lY2Vzc2FyeSBzZXR1cCB0byBzdGFydCB1cCBhIG5ld2x5IGV4ZWN1dGVkIHRocmVhZC4KKyAqCisgKiBwYXNzIHRoZSBkYXRhIHNlZ21lbnQgaW50byB1c2VyIHByb2dyYW1zIGlmIGl0IGV4aXN0cywKKyAqIGl0IGNhbid0IGh1cnQgYW55dGhpbmcgYXMgZmFyIGFzIEkgY2FuIHRlbGwKKyAqLworI2lmIGRlZmluZWQoX19IODMwMEhfXykKKyNkZWZpbmUgc3RhcnRfdGhyZWFkKF9yZWdzLCBfcGMsIF91c3ApCQkJICAgICAgICBcCitkbyB7CQkJCQkJCSAgICAgICAgXAorCXNldF9mcyhVU0VSX0RTKTsgICAgICAgICAgIC8qIHJlYWRzIGZyb20gdXNlciBzcGFjZSAqLyAgXAorICAJKF9yZWdzKS0+cGMgPSAoX3BjKTsJCQkJICAgICAgICBcCisJKF9yZWdzKS0+Y2NyICY9IDB4MDA7CSAgIC8qIGNsZWFyIGtlcm5lbCBmbGFnICovICAgICAgXAorCShfcmVncyktPmVyNSA9IGN1cnJlbnQtPm1tLT5zdGFydF9kYXRhOwkvKiBHT1QgYmFzZSAqLyAgXAorCXdydXNwKCh1bnNpZ25lZCBsb25nKShfdXNwKSAtIHNpemVvZih1bnNpZ25lZCBsb25nKSozKTsJXAorfSB3aGlsZSgwKQorI2VuZGlmCisjaWYgZGVmaW5lZChfX0g4MzAwU19fKQorI2RlZmluZSBzdGFydF90aHJlYWQoX3JlZ3MsIF9wYywgX3VzcCkJCQkgICAgICAgIFwKK2RvIHsJCQkJCQkJICAgICAgICBcCisJc2V0X2ZzKFVTRVJfRFMpOyAgICAgICAgICAgLyogcmVhZHMgZnJvbSB1c2VyIHNwYWNlICovICBcCisJKF9yZWdzKS0+cGMgPSAoX3BjKTsJCQkJICAgICAgICBcCisJKF9yZWdzKS0+Y2NyID0gMHgwMDsJICAgLyogY2xlYXIga2VybmVsIGZsYWcgKi8gICAgICBcCisJKF9yZWdzKS0+ZXhyID0gMHg3ODsgICAgICAgLyogZW5hYmxlIGFsbCBpbnRlcnJ1cHRzICovICBcCisJKF9yZWdzKS0+ZXI1ID0gY3VycmVudC0+bW0tPnN0YXJ0X2RhdGE7CS8qIEdPVCBiYXNlICovICBcCisJLyogMTQgPSBzcGFjZSBmb3IgcmV0YWRkcig0KSwgdmVjdG9yKDQpLCBlcjAoNCkgYW5kIGV4dCgyKSBvbiBzdGFjayAqLyBcCisJd3J1c3AoKCh1bnNpZ25lZCBsb25nKShfdXNwKSkgLSAxNCk7ICAgICAgICAgICAgICAgICAgICBcCit9IHdoaWxlKDApCisjZW5kaWYKKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbiwgYSBzdHJhbmdlIEMgdGhpbmcgKi8KK3N0cnVjdCB0YXNrX3N0cnVjdDsKKworLyogRnJlZSBhbGwgcmVzb3VyY2VzIGhlbGQgYnkgYSB0aHJlYWQuICovCitzdGF0aWMgaW5saW5lIHZvaWQgcmVsZWFzZV90aHJlYWQoc3RydWN0IHRhc2tfc3RydWN0ICpkZWFkX3Rhc2spCit7Cit9CisKK2V4dGVybiBpbnQga2VybmVsX3RocmVhZChpbnQgKCpmbikodm9pZCAqKSwgdm9pZCAqIGFyZywgdW5zaWduZWQgbG9uZyBmbGFncyk7CisKKyNkZWZpbmUgcHJlcGFyZV90b19jb3B5KHRzaykJZG8geyB9IHdoaWxlICgwKQorCisvKgorICogRnJlZSBjdXJyZW50IHRocmVhZCBkYXRhIHN0cnVjdHVyZXMgZXRjLi4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGV4aXRfdGhyZWFkKHZvaWQpCit7Cit9CisKKy8qCisgKiBSZXR1cm4gc2F2ZWQgUEMgb2YgYSBibG9ja2VkIHRocmVhZC4KKyAqLwordW5zaWduZWQgbG9uZyB0aHJlYWRfc2F2ZWRfcGMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spOwordW5zaWduZWQgbG9uZyBnZXRfd2NoYW4oc3RydWN0IHRhc2tfc3RydWN0ICpwKTsKKworI2RlZmluZQlLU1RLX0VJUCh0c2spCVwKKyAgICAoewkJCVwKKwl1bnNpZ25lZCBsb25nIGVpcCA9IDA7CSBcCisJaWYgKCh0c2spLT50aHJlYWQuZXNwMCA+IFBBR0VfU0laRSAmJiBcCisJICAgIE1BUF9OUigodHNrKS0+dGhyZWFkLmVzcDApIDwgbWF4X21hcG5yKSBcCisJICAgICAgZWlwID0gKChzdHJ1Y3QgcHRfcmVncyAqKSAodHNrKS0+dGhyZWFkLmVzcDApLT5wYzsgXAorCWVpcDsgfSkKKyNkZWZpbmUJS1NUS19FU1AodHNrKQkoKHRzaykgPT0gY3VycmVudCA/IHJkdXNwKCkgOiAodHNrKS0+dGhyZWFkLnVzcCkKKworI2RlZmluZSBjcHVfcmVsYXgoKSAgICBkbyB7IH0gd2hpbGUgKDApCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvcHRyYWNlLmggYi9pbmNsdWRlL2FzbS1oODMwMC9wdHJhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmUwNWU0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvcHRyYWNlLmgKQEAgLTAsMCArMSw2NCBAQAorI2lmbmRlZiBfSDgzMDBfUFRSQUNFX0gKKyNkZWZpbmUgX0g4MzAwX1BUUkFDRV9ICisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNkZWZpbmUgUFRfRVIxCSAgIDAKKyNkZWZpbmUgUFRfRVIyCSAgIDEKKyNkZWZpbmUgUFRfRVIzCSAgIDIKKyNkZWZpbmUgUFRfRVI0CSAgIDMKKyNkZWZpbmUgUFRfRVI1CSAgIDQKKyNkZWZpbmUgUFRfRVI2CSAgIDUKKyNkZWZpbmUgUFRfRVIwCSAgIDYKKyNkZWZpbmUgUFRfT1JJR19FUjAJICAgNworI2RlZmluZSBQVF9DQ1IJICAgOAorI2RlZmluZSBQVF9QQwkgICA5CisjZGVmaW5lIFBUX1VTUAkgICAxMAorI2RlZmluZSBQVF9FWFIgICAgIDEyCisKKy8qIHRoaXMgc3RydWN0IGRlZmluZXMgdGhlIHdheSB0aGUgcmVnaXN0ZXJzIGFyZSBzdG9yZWQgb24gdGhlCisgICBzdGFjayBkdXJpbmcgYSBzeXN0ZW0gY2FsbC4gKi8KKworc3RydWN0IHB0X3JlZ3MgeworCWxvbmcgICAgIHJldHBjOworCWxvbmcgICAgIGVyNDsKKwlsb25nICAgICBlcjU7CisJbG9uZyAgICAgZXI2OworCWxvbmcgICAgIGVyMzsKKwlsb25nICAgICBlcjI7CisJbG9uZyAgICAgZXIxOworCWxvbmcgICAgIG9yaWdfZXIwOworCXVuc2lnbmVkIHNob3J0IGNjcjsKKwlsb25nICAgICBlcjA7CisJbG9uZyAgICAgdmVjdG9yOworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9IOFMpCisJdW5zaWduZWQgc2hvcnQgZXhyOworI2VuZGlmCisJdW5zaWduZWQgbG9uZyAgcGM7Cit9IF9fYXR0cmlidXRlX18oKGFsaWduZWQoMikscGFja2VkKSk7CisKKyNkZWZpbmUgUFRSQUNFX0dFVFJFR1MgICAgICAgICAgICAxMgorI2RlZmluZSBQVFJBQ0VfU0VUUkVHUyAgICAgICAgICAgIDEzCisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaWZuZGVmIFBTX1MKKyNkZWZpbmUgUFNfUyAgKDB4MTApCisjZW5kaWYKKworI2lmIGRlZmluZWQoX19IODMwMEhfXykKKyNkZWZpbmUgSDgzMDBfUkVHU19OTyAxMQorI2VuZGlmCisjaWYgZGVmaW5lZChfX0g4MzAwU19fKQorI2RlZmluZSBIODMwMF9SRUdTX05PIDEyCisjZW5kaWYKKworLyogRmluZCB0aGUgc3RhY2sgb2Zmc2V0IGZvciBhIHJlZ2lzdGVyLCByZWxhdGl2ZSB0byB0aHJlYWQuZXNwMC4gKi8KKyNkZWZpbmUgUFRfUkVHKHJlZykJKChsb25nKSYoKHN0cnVjdCBwdF9yZWdzICopMCktPnJlZykKKworI2RlZmluZSB1c2VyX21vZGUocmVncykgKCEoKHJlZ3MpLT5jY3IgJiBQU19TKSkKKyNkZWZpbmUgaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKSAoKHJlZ3MpLT5wYykKKyNkZWZpbmUgcHJvZmlsZV9wYyhyZWdzKSBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpCitleHRlcm4gdm9pZCBzaG93X3JlZ3Moc3RydWN0IHB0X3JlZ3MgKik7CisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworI2VuZGlmIC8qIF9IODMwMF9QVFJBQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvcmVnczI2N3guaCBiL2luY2x1ZGUvYXNtLWg4MzAwL3JlZ3MyNjd4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJmZjczMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWg4MzAwL3JlZ3MyNjd4LmgKQEAgLTAsMCArMSwzMzYgQEAKKy8qIGludGVybmFsIFBlcmlwaGVyYWxzIFJlZ2lzdGVyIGFkZHJlc3MgZGVmaW5lICovCisvKiBDUFU6IEg4LzMwNnggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisjaWYgIWRlZmluZWQoX19SRUdTX0g4UzI2N3hfXykKKyNkZWZpbmUgX19SRUdTX0g4UzI2N3hfXyAKKworI2lmIGRlZmluZWQoX19LRVJORUxfXykKKworI2RlZmluZSBEQVNUQ1IgMHhGRUUwMUEKKyNkZWZpbmUgREFEUjAgIDB4RkZGRkE0CisjZGVmaW5lIERBRFIxICAweEZGRkZBNQorI2RlZmluZSBEQUNSMDEgMHhGRkZGQTYKKyNkZWZpbmUgREFEUjIgIDB4RkZGRkE4CisjZGVmaW5lIERBRFIzICAweEZGRkZBOQorI2RlZmluZSBEQUNSMjMgMHhGRkZGQUEKKworI2RlZmluZSBBRERSQSAgMHhGRkZGOTAKKyNkZWZpbmUgQUREUkFIIDB4RkZGRjkwCisjZGVmaW5lIEFERFJBTCAweEZGRkY5MQorI2RlZmluZSBBRERSQiAgMHhGRkZGOTIKKyNkZWZpbmUgQUREUkJIIDB4RkZGRjkyCisjZGVmaW5lIEFERFJCTCAweEZGRkY5MworI2RlZmluZSBBRERSQyAgMHhGRkZGOTQKKyNkZWZpbmUgQUREUkNIIDB4RkZGRjk0CisjZGVmaW5lIEFERFJDTCAweEZGRkY5NQorI2RlZmluZSBBRERSRCAgMHhGRkZGOTYKKyNkZWZpbmUgQUREUkRIIDB4RkZGRjk2CisjZGVmaW5lIEFERFJETCAweEZGRkY5NworI2RlZmluZSBBRERSRSAgMHhGRkZGOTgKKyNkZWZpbmUgQUREUkVIIDB4RkZGRjk4CisjZGVmaW5lIEFERFJFTCAweEZGRkY5OQorI2RlZmluZSBBRERSRiAgMHhGRkZGOUEKKyNkZWZpbmUgQUREUkZIIDB4RkZGRjlBCisjZGVmaW5lIEFERFJGTCAweEZGRkY5QgorI2RlZmluZSBBRERSRyAgMHhGRkZGOUMKKyNkZWZpbmUgQUREUkdIIDB4RkZGRjlDCisjZGVmaW5lIEFERFJHTCAweEZGRkY5RAorI2RlZmluZSBBRERSSCAgMHhGRkZGOUUKKyNkZWZpbmUgQUREUkhIIDB4RkZGRjlFCisjZGVmaW5lIEFERFJITCAweEZGRkY5RgorCisjZGVmaW5lIEFEQ1NSICAweEZGRkZBMAorI2RlZmluZSBBRENSICAgMHhGRkZGQTEKKworI2RlZmluZSBBQldDUiAgMHhGRkZFQzAKKyNkZWZpbmUgQVNUQ1IgIDB4RkZGRUMxCisjZGVmaW5lIFdUQ1JBSCAweEZGRkVDMgorI2RlZmluZSBXVENSQUwgMHhGRkZFQzMKKyNkZWZpbmUgV1RDUkJIIDB4RkZGRUM0CisjZGVmaW5lIFdUQ1JCTCAweEZGRkVDNQorI2RlZmluZSBSRE5DUiAgMHhGRkZFQzYKKyNkZWZpbmUgQ1NBQ1JIIDB4RkZGRUM4CisjZGVmaW5lIENTQUNSTCAweEZGRkVDOQorI2RlZmluZSBCUk9NQ1JIIDB4RkZGRUNBCisjZGVmaW5lIEJST01DUkwgMHhGRkZFQ0IKKyNkZWZpbmUgQkNSICAgIDB4RkZGRUNDCisjZGVmaW5lIERSQU1DUiAweEZGRkVEMAorI2RlZmluZSBEUkFDQ1IgMHhGRkZFRDIKKyNkZWZpbmUgUkVGQ1IgIDB4RkZGRUQ0CisjZGVmaW5lIFJUQ05UICAweEZGRkVENgorI2RlZmluZSBSVENPUiAgMHhGRkZFRDcKKworI2RlZmluZSBNQVIwQUggIDB4RkZGRUUwCisjZGVmaW5lIE1BUjBBTCAgMHhGRkZFRTIKKyNkZWZpbmUgSU9BUjBBICAweEZGRkVFNAorI2RlZmluZSBFVENSMEEgIDB4RkZGRUU2CisjZGVmaW5lIE1BUjBCSCAgMHhGRkZFRTgKKyNkZWZpbmUgTUFSMEJMICAweEZGRkVFQQorI2RlZmluZSBJT0FSMEIgIDB4RkZGRUVDCisjZGVmaW5lIEVUQ1IwQiAgMHhGRkZFRUUKKyNkZWZpbmUgTUFSMUFIICAweEZGRkVGMAorI2RlZmluZSBNQVIxQUwgIDB4RkZGRUYyCisjZGVmaW5lIElPQVIxQSAgMHhGRkZFRjQKKyNkZWZpbmUgRVRDUjFBICAweEZGRkVGNgorI2RlZmluZSBNQVIxQkggIDB4RkZGRUY4CisjZGVmaW5lIE1BUjFCTCAgMHhGRkZFRkEKKyNkZWZpbmUgSU9BUjFCICAweEZGRkVGQworI2RlZmluZSBFVENSMUIgIDB4RkZGRUZFCisjZGVmaW5lIERNQVdFUiAgMHhGRkZGMjAKKyNkZWZpbmUgRE1BVENSICAweEZGRkYyMQorI2RlZmluZSBETUFDUjBBIDB4RkZGRjIyCisjZGVmaW5lIERNQUNSMEIgMHhGRkZGMjMKKyNkZWZpbmUgRE1BQ1IxQSAweEZGRkYyNAorI2RlZmluZSBETUFDUjFCIDB4RkZGRjI1CisjZGVmaW5lIERNQUJDUkggMHhGRkZGMjYKKyNkZWZpbmUgRE1BQkNSTCAweEZGRkYyNworCisjZGVmaW5lIEVEU0FSMCAgMHhGRkZEQzAKKyNkZWZpbmUgRUREQVIwICAweEZGRkRDNAorI2RlZmluZSBFRFRDUjAgIDB4RkZGREM4CisjZGVmaW5lIEVETURSMCAgMHhGRkZEQ0MKKyNkZWZpbmUgRURNRFIwSCAweEZGRkRDQworI2RlZmluZSBFRE1EUjBMIDB4RkZGRENECisjZGVmaW5lIEVEQUNSMCAgMHhGRkZEQ0UKKyNkZWZpbmUgRURTQVIxICAweEZGRkREMAorI2RlZmluZSBFRERBUjEgIDB4RkZGREQ0CisjZGVmaW5lIEVEVENSMSAgMHhGRkZERDgKKyNkZWZpbmUgRURNRFIxICAweEZGRkREQworI2RlZmluZSBFRE1EUjFIIDB4RkZGRERDCisjZGVmaW5lIEVETURSMUwgMHhGRkZEREQKKyNkZWZpbmUgRURBQ1IxICAweEZGRkRERQorI2RlZmluZSBFRFNBUjIgIDB4RkZGREUwCisjZGVmaW5lIEVEREFSMiAgMHhGRkZERTQKKyNkZWZpbmUgRURUQ1IyICAweEZGRkRFOAorI2RlZmluZSBFRE1EUjIgIDB4RkZGREVDCisjZGVmaW5lIEVETURSMkggMHhGRkZERUMKKyNkZWZpbmUgRURNRFIyTCAweEZGRkRFRAorI2RlZmluZSBFREFDUjIgIDB4RkZGREVFCisjZGVmaW5lIEVEU0FSMyAgMHhGRkZERjAKKyNkZWZpbmUgRUREQVIzICAweEZGRkRGNAorI2RlZmluZSBFRFRDUjMgIDB4RkZGREY4CisjZGVmaW5lIEVETURSMyAgMHhGRkZERkMKKyNkZWZpbmUgRURNRFIzSCAweEZGRkRGQworI2RlZmluZSBFRE1EUjNMIDB4RkZGREZECisjZGVmaW5lIEVEQUNSMyAgMHhGRkZERkUKKworI2RlZmluZSBJUFJBICAweEZGRkUwMAorI2RlZmluZSBJUFJCICAweEZGRkUwMgorI2RlZmluZSBJUFJDICAweEZGRkUwNAorI2RlZmluZSBJUFJEICAweEZGRkUwNgorI2RlZmluZSBJUFJFICAweEZGRkUwOAorI2RlZmluZSBJUFJGICAweEZGRkUwQQorI2RlZmluZSBJUFJHICAweEZGRkUwQworI2RlZmluZSBJUFJIICAweEZGRkUwRQorI2RlZmluZSBJUFJJICAweEZGRkUxMAorI2RlZmluZSBJUFJKICAweEZGRkUxMgorI2RlZmluZSBJUFJLICAweEZGRkUxNAorI2RlZmluZSBJVFNSICAweEZGRkUxNgorI2RlZmluZSBTU0lFUiAweEZGRkUxOAorI2RlZmluZSBJU0NSSCAweEZGRkUxQQorI2RlZmluZSBJU0NSTCAweEZGRkUxQworCisjZGVmaW5lIElOVENSIDB4RkZGRjMxCisjZGVmaW5lIElFUiAgIDB4RkZGRjMyCisjZGVmaW5lIElFUkggIDB4RkZGRjMyCisjZGVmaW5lIElFUkwgIDB4RkZGRjMzCisjZGVmaW5lIElTUiAgIDB4RkZGRjM0CisjZGVmaW5lIElTUkggIDB4RkZGRjM0CisjZGVmaW5lIElTUkwgIDB4RkZGRjM1CisKKyNkZWZpbmUgUDFERFIgMHhGRkZFMjAKKyNkZWZpbmUgUDJERFIgMHhGRkZFMjEKKyNkZWZpbmUgUDNERFIgMHhGRkZFMjIKKyNkZWZpbmUgUDRERFIgMHhGRkZFMjMKKyNkZWZpbmUgUDVERFIgMHhGRkZFMjQKKyNkZWZpbmUgUDZERFIgMHhGRkZFMjUKKyNkZWZpbmUgUDdERFIgMHhGRkZFMjYKKyNkZWZpbmUgUDhERFIgMHhGRkZFMjcKKyNkZWZpbmUgUDlERFIgMHhGRkZFMjgKKyNkZWZpbmUgUEFERFIgMHhGRkZFMjkKKyNkZWZpbmUgUEJERFIgMHhGRkZFMkEKKyNkZWZpbmUgUENERFIgMHhGRkZFMkIKKyNkZWZpbmUgUERERFIgMHhGRkZFMkMKKyNkZWZpbmUgUEVERFIgMHhGRkZFMkQKKyNkZWZpbmUgUEZERFIgMHhGRkZFMkUKKyNkZWZpbmUgUEdERFIgMHhGRkZFMkYKKyNkZWZpbmUgUEhERFIgMHhGRkZGNzQKKworI2RlZmluZSBQRkNSMCAweEZGRkUzMgorI2RlZmluZSBQRkNSMSAweEZGRkUzMworI2RlZmluZSBQRkNSMiAweEZGRkUzNAorCisjZGVmaW5lIFBBUENSIDB4RkZGRTM2CisjZGVmaW5lIFBCUENSIDB4RkZGRTM3CisjZGVmaW5lIFBDUENSIDB4RkZGRTM4CisjZGVmaW5lIFBEUENSIDB4RkZGRTM5CisjZGVmaW5lIFBFUENSIDB4RkZGRTNBCisKKyNkZWZpbmUgUDNPRFIgMHhGRkZFM0MKKyNkZWZpbmUgUEFPRFIgMHhGRkZFM0QKKworI2RlZmluZSBQMURSICAweEZGRkY2MAorI2RlZmluZSBQMkRSICAweEZGRkY2MQorI2RlZmluZSBQM0RSICAweEZGRkY2MgorI2RlZmluZSBQNERSICAweEZGRkY2MworI2RlZmluZSBQNURSICAweEZGRkY2NAorI2RlZmluZSBQNkRSICAweEZGRkY2NQorI2RlZmluZSBQN0RSICAweEZGRkY2NgorI2RlZmluZSBQOERSICAweEZGRkY2NworI2RlZmluZSBQOURSICAweEZGRkY2OAorI2RlZmluZSBQQURSICAweEZGRkY2OQorI2RlZmluZSBQQkRSICAweEZGRkY2QQorI2RlZmluZSBQQ0RSICAweEZGRkY2QgorI2RlZmluZSBQRERSICAweEZGRkY2QworI2RlZmluZSBQRURSICAweEZGRkY2RAorI2RlZmluZSBQRkRSICAweEZGRkY2RQorI2RlZmluZSBQR0RSICAweEZGRkY2RgorI2RlZmluZSBQSERSICAweEZGRkY3MgorCisjZGVmaW5lIFBPUlQxIDB4RkZGRjUwCisjZGVmaW5lIFBPUlQyIDB4RkZGRjUxCisjZGVmaW5lIFBPUlQzIDB4RkZGRjUyCisjZGVmaW5lIFBPUlQ0IDB4RkZGRjUzCisjZGVmaW5lIFBPUlQ1IDB4RkZGRjU0CisjZGVmaW5lIFBPUlQ2IDB4RkZGRjU1CisjZGVmaW5lIFBPUlQ3IDB4RkZGRjU2CisjZGVmaW5lIFBPUlQ4IDB4RkZGRjU3CisjZGVmaW5lIFBPUlQ5IDB4RkZGRjU4CisjZGVmaW5lIFBPUlRBIDB4RkZGRjU5CisjZGVmaW5lIFBPUlRCIDB4RkZGRjVBCisjZGVmaW5lIFBPUlRDIDB4RkZGRjVCCisjZGVmaW5lIFBPUlREIDB4RkZGRjVDCisjZGVmaW5lIFBPUlRFIDB4RkZGRjVECisjZGVmaW5lIFBPUlRGIDB4RkZGRjVFCisjZGVmaW5lIFBPUlRHIDB4RkZGRjVGCisjZGVmaW5lIFBPUlRIIDB4RkZGRjcwCisKKyNkZWZpbmUgUENSICAgMHhGRkZGNDYKKyNkZWZpbmUgUE1SICAgMHhGRkZGNDcKKyNkZWZpbmUgTkRFUkggMHhGRkZGNDgKKyNkZWZpbmUgTkRFUkwgMHhGRkZGNDkKKyNkZWZpbmUgUE9EUkggMHhGRkZGNEEKKyNkZWZpbmUgUE9EUkwgMHhGRkZGNEIKKyNkZWZpbmUgTkRSSDEgMHhGRkZGNEMKKyNkZWZpbmUgTkRSTDEgMHhGRkZGNEQKKyNkZWZpbmUgTkRSSDIgMHhGRkZGNEUKKyNkZWZpbmUgTkRSTDIgMHhGRkZGNEYKKworI2RlZmluZSBTTVIwICAweEZGRkY3OAorI2RlZmluZSBCUlIwICAweEZGRkY3OQorI2RlZmluZSBTQ1IwICAweEZGRkY3QQorI2RlZmluZSBURFIwICAweEZGRkY3QgorI2RlZmluZSBTU1IwICAweEZGRkY3QworI2RlZmluZSBSRFIwICAweEZGRkY3RAorI2RlZmluZSBTQ01SMCAweEZGRkY3RQorI2RlZmluZSBTTVIxICAweEZGRkY4MAorI2RlZmluZSBCUlIxICAweEZGRkY4MQorI2RlZmluZSBTQ1IxICAweEZGRkY4MgorI2RlZmluZSBURFIxICAweEZGRkY4MworI2RlZmluZSBTU1IxICAweEZGRkY4NAorI2RlZmluZSBSRFIxICAweEZGRkY4NQorI2RlZmluZSBTQ01SMSAweEZGRkY4NgorI2RlZmluZSBTTVIyICAweEZGRkY4OAorI2RlZmluZSBCUlIyICAweEZGRkY4OQorI2RlZmluZSBTQ1IyICAweEZGRkY4QQorI2RlZmluZSBURFIyICAweEZGRkY4QgorI2RlZmluZSBTU1IyICAweEZGRkY4QworI2RlZmluZSBSRFIyICAweEZGRkY4RAorI2RlZmluZSBTQ01SMiAweEZGRkY4RQorCisjZGVmaW5lIElSQ1IwIDB4RkZGRTFFCisjZGVmaW5lIFNFTVIgIDB4RkZGREE4CisKKyNkZWZpbmUgTURDUiAgICAweEZGRkYzRQorI2RlZmluZSBTWVNDUiAgIDB4RkZGRjNECisjZGVmaW5lIE1TVFBDUkggMHhGRkZGNDAKKyNkZWZpbmUgTVNUUENSTCAweEZGRkY0MQorI2RlZmluZSBGTE1DUjEgIDB4RkZGRkM4CisjZGVmaW5lIEZMTUNSMiAgMHhGRkZGQzkKKyNkZWZpbmUgRUJSMSAgICAweEZGRkZDQQorI2RlZmluZSBFQlIyICAgIDB4RkZGRkNCCisjZGVmaW5lIENUR0FSQ19SQU1DUiAgIDB4RkZGRUNFCisjZGVmaW5lIFNCWUNSICAgMHhGRkZGM0EKKyNkZWZpbmUgU0NLQ1IgICAweEZGRkYzQgorI2RlZmluZSBQTExDUiAgIDB4RkZGRjQ1CisKKyNkZWZpbmUgVFNUUiAgIDB4RkZGRkMwCisjZGVmaW5lIFRTTkMgICAwWEZGRkZDMQorCisjZGVmaW5lIFRDUjAgICAweEZGRkZEMAorI2RlZmluZSBUTURSMCAgMHhGRkZGRDEKKyNkZWZpbmUgVElPUkgwIDB4RkZGRkQyCisjZGVmaW5lIFRJT1JMMCAweEZGRkZEMworI2RlZmluZSBUSUVSMCAgMHhGRkZGRDQKKyNkZWZpbmUgVFNSMCAgIDB4RkZGRkQ1CisjZGVmaW5lIFRDTlQwICAweEZGRkZENgorI2RlZmluZSBHUkEwICAgMHhGRkZGRDgKKyNkZWZpbmUgR1JCMCAgIDB4RkZGRkRBCisjZGVmaW5lIEdSQzAgICAweEZGRkZEQworI2RlZmluZSBHUkQwICAgMHhGRkZGREUKKyNkZWZpbmUgVENSMSAgIDB4RkZGRkUwCisjZGVmaW5lIFRNRFIxICAweEZGRkZFMQorI2RlZmluZSBUSU9SSDEgMHhGRkZGRTIKKyNkZWZpbmUgVElPUkwxIDB4RkZGRkUzCisjZGVmaW5lIFRJRVIxICAweEZGRkZFNAorI2RlZmluZSBUU1IxICAgMHhGRkZGRTUKKyNkZWZpbmUgVENOVDEgIDB4RkZGRkU2CisjZGVmaW5lIEdSQTEgICAweEZGRkZFOAorI2RlZmluZSBHUkIxICAgMHhGRkZGRUEKKyNkZWZpbmUgVENSMiAgIDB4RkZGRkYwCisjZGVmaW5lIFRNRFIyICAweEZGRkZGMQorI2RlZmluZSBUSU9SSDIgMHhGRkZGRjIKKyNkZWZpbmUgVElPUkwyIDB4RkZGRkYzCisjZGVmaW5lIFRJRVIyICAweEZGRkZGNAorI2RlZmluZSBUU1IyICAgMHhGRkZGRjUKKyNkZWZpbmUgVENOVDIgIDB4RkZGRkY2CisjZGVmaW5lIEdSQTIgICAweEZGRkZGOAorI2RlZmluZSBHUkIyICAgMHhGRkZGRkEKKyNkZWZpbmUgVENSMyAgIDB4RkZGRTgwCisjZGVmaW5lIFRNRFIzICAweEZGRkU4MQorI2RlZmluZSBUSU9SSDMgMHhGRkZFODIKKyNkZWZpbmUgVElPUkwzIDB4RkZGRTgzCisjZGVmaW5lIFRJRVIzICAweEZGRkU4NAorI2RlZmluZSBUU1IzICAgMHhGRkZFODUKKyNkZWZpbmUgVENOVDMgIDB4RkZGRTg2CisjZGVmaW5lIEdSQTMgICAweEZGRkU4OAorI2RlZmluZSBHUkIzICAgMHhGRkZFOEEKKyNkZWZpbmUgR1JDMyAgIDB4RkZGRThDCisjZGVmaW5lIEdSRDMgICAweEZGRkU4RQorI2RlZmluZSBUQ1I0ICAgMHhGRkZFOTAKKyNkZWZpbmUgVE1EUjQgIDB4RkZGRTkxCisjZGVmaW5lIFRJT1JINCAweEZGRkU5MgorI2RlZmluZSBUSU9STDQgMHhGRkZFOTMKKyNkZWZpbmUgVElFUjQgIDB4RkZGRTk0CisjZGVmaW5lIFRTUjQgICAweEZGRkU5NQorI2RlZmluZSBUQ05UNCAgMHhGRkZFOTYKKyNkZWZpbmUgR1JBNCAgIDB4RkZGRTk4CisjZGVmaW5lIEdSQjQgICAweEZGRkU5QQorI2RlZmluZSBUQ1I1ICAgMHhGRkZFQTAKKyNkZWZpbmUgVE1EUjUgIDB4RkZGRUExCisjZGVmaW5lIFRJT1JINSAweEZGRkVBMgorI2RlZmluZSBUSU9STDUgMHhGRkZFQTMKKyNkZWZpbmUgVElFUjUgIDB4RkZGRUE0CisjZGVmaW5lIFRTUjUgICAweEZGRkVBNQorI2RlZmluZSBUQ05UNSAgMHhGRkZFQTYKKyNkZWZpbmUgR1JBNSAgIDB4RkZGRUE4CisjZGVmaW5lIEdSQjUgICAweEZGRkVBQQorCisjZGVmaW5lIF84VENSMCAgIDB4RkZGRkIwCisjZGVmaW5lIF84VENSMSAgIDB4RkZGRkIxCisjZGVmaW5lIF84VENTUjAgIDB4RkZGRkIyCisjZGVmaW5lIF84VENTUjEgIDB4RkZGRkIzCisjZGVmaW5lIF84VENPUkEwIDB4RkZGRkI0CisjZGVmaW5lIF84VENPUkExIDB4RkZGRkI1CisjZGVmaW5lIF84VENPUkIwIDB4RkZGRkI2CisjZGVmaW5lIF84VENPUkIxIDB4RkZGRkI3CisjZGVmaW5lIF84VENOVDAgIDB4RkZGRkI4CisjZGVmaW5lIF84VENOVDEgIDB4RkZGRkI5CisKKyNkZWZpbmUgVENTUiAgICAweEZGRkZCQworI2RlZmluZSBUQ05UICAgIDB4RkZGRkJECisjZGVmaW5lIFJTVENTUlcgMHhGRkZGQkUKKyNkZWZpbmUgUlNUQ1NSUiAweEZGRkZCRgorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9fUkVHU19IOFMyNjd4X18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWg4MzAwL3JlZ3MzMDZ4LmggYi9pbmNsdWRlL2FzbS1oODMwMC9yZWdzMzA2eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyN2RkNjMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC9yZWdzMzA2eC5oCkBAIC0wLDAgKzEsMjEyIEBACisvKiBpbnRlcm5hbCBQZXJpcGhlcmFscyBSZWdpc3RlciBhZGRyZXNzIGRlZmluZSAqLworLyogQ1BVOiBIOC8zMDZ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworI2lmICFkZWZpbmVkKF9fUkVHU19IODMwNnhfXykKKyNkZWZpbmUgX19SRUdTX0g4MzA2eF9fIAorCisjaWYgZGVmaW5lZChfX0tFUk5FTF9fKQorCisjZGVmaW5lIERBU1RDUiAweEZFRTAxQQorI2RlZmluZSBEQURSMCAgMHhGRUUwOUMKKyNkZWZpbmUgREFEUjEgIDB4RkVFMDlECisjZGVmaW5lIERBQ1IgICAweEZFRTA5RQorCisjZGVmaW5lIEFERFJBSCAweEZGRkZFMAorI2RlZmluZSBBRERSQUwgMHhGRkZGRTEKKyNkZWZpbmUgQUREUkJIIDB4RkZGRkUyCisjZGVmaW5lIEFERFJCTCAweEZGRkZFMworI2RlZmluZSBBRERSQ0ggMHhGRkZGRTQKKyNkZWZpbmUgQUREUkNMIDB4RkZGRkU1CisjZGVmaW5lIEFERFJESCAweEZGRkZFNgorI2RlZmluZSBBRERSREwgMHhGRkZGRTcKKyNkZWZpbmUgQURDU1IgIDB4RkZGRkU4CisjZGVmaW5lIEFEQ1IgICAweEZGRkZFOQorCisjZGVmaW5lIEJSQ1IgICAweEZFRTAxMworI2RlZmluZSBBRFJDUiAgMHhGRUUwMUUKKyNkZWZpbmUgQ1NDUiAgIDB4RkVFMDFGCisjZGVmaW5lIEFCV0NSICAweEZFRTAyMAorI2RlZmluZSBBU1RDUiAgMHhGRUUwMjEKKyNkZWZpbmUgV0NSSCAgIDB4RkVFMDIyCisjZGVmaW5lIFdDUkwgICAweEZFRTAyMworI2RlZmluZSBCQ1IgICAgMHhGRUUwMjQKKyNkZWZpbmUgRFJDUkEgIDB4RkVFMDI2CisjZGVmaW5lIERSQ1JCICAweEZFRTAyNworI2RlZmluZSBSVE1DU1IgMHhGRUUwMjgKKyNkZWZpbmUgUlRDTlQgIDB4RkVFMDI5CisjZGVmaW5lIFJUQ09SICAweEZFRTAyQQorCisjZGVmaW5lIE1BUjBBUiAgMHhGRkZGMjAKKyNkZWZpbmUgTUFSMEFFICAweEZGRkYyMQorI2RlZmluZSBNQVIwQUggIDB4RkZGRjIyCisjZGVmaW5lIE1BUjBBTCAgMHhGRkZGMjMKKyNkZWZpbmUgRVRDUjBBTCAweEZGRkYyNAorI2RlZmluZSBFVENSMEFIIDB4RkZGRjI1CisjZGVmaW5lIElPQVIwQSAgMHhGRkZGMjYKKyNkZWZpbmUgRFRDUjBBICAweEZGRkYyNworI2RlZmluZSBNQVIwQlIgIDB4RkZGRjI4CisjZGVmaW5lIE1BUjBCRSAgMHhGRkZGMjkKKyNkZWZpbmUgTUFSMEJIICAweEZGRkYyQQorI2RlZmluZSBNQVIwQkwgIDB4RkZGRjJCCisjZGVmaW5lIEVUQ1IwQkwgMHhGRkZGMkMKKyNkZWZpbmUgRVRDUjBCSCAweEZGRkYyRAorI2RlZmluZSBJT0FSMEIgIDB4RkZGRjJFCisjZGVmaW5lIERUQ1IwQiAgMHhGRkZGMkYKKyNkZWZpbmUgTUFSMUFSICAweEZGRkYzMAorI2RlZmluZSBNQVIxQUUgIDB4RkZGRjMxCisjZGVmaW5lIE1BUjFBSCAgMHhGRkZGMzIKKyNkZWZpbmUgTUFSMUFMICAweEZGRkYzMworI2RlZmluZSBFVENSMUFMIDB4RkZGRjM0CisjZGVmaW5lIEVUQ1IxQUggMHhGRkZGMzUKKyNkZWZpbmUgSU9BUjFBICAweEZGRkYzNgorI2RlZmluZSBEVENSMUEgIDB4RkZGRjM3CisjZGVmaW5lIE1BUjFCUiAgMHhGRkZGMzgKKyNkZWZpbmUgTUFSMUJFICAweEZGRkYzOQorI2RlZmluZSBNQVIxQkggIDB4RkZGRjNBCisjZGVmaW5lIE1BUjFCTCAgMHhGRkZGM0IKKyNkZWZpbmUgRVRDUjFCTCAweEZGRkYzQworI2RlZmluZSBFVENSMUJIIDB4RkZGRjNECisjZGVmaW5lIElPQVIxQiAgMHhGRkZGM0UKKyNkZWZpbmUgRFRDUjFCICAweEZGRkYzRgorCisjZGVmaW5lIElTQ1IgMHhGRUUwMTQKKyNkZWZpbmUgSUVSICAweEZFRTAxNQorI2RlZmluZSBJU1IgIDB4RkVFMDE2CisjZGVmaW5lIElQUkEgMHhGRUUwMTgKKyNkZWZpbmUgSVBSQiAweEZFRTAxOQorCisjZGVmaW5lIFAxRERSIDB4RkVFMDAwCisjZGVmaW5lIFAyRERSIDB4RkVFMDAxCisjZGVmaW5lIFAzRERSIDB4RkVFMDAyCisjZGVmaW5lIFA0RERSIDB4RkVFMDAzCisjZGVmaW5lIFA1RERSIDB4RkVFMDA0CisjZGVmaW5lIFA2RERSIDB4RkVFMDA1CisvKiNkZWZpbmUgUDdERFIgMHhGRUUwMDYqLworI2RlZmluZSBQOEREUiAweEZFRTAwNworI2RlZmluZSBQOUREUiAweEZFRTAwOAorI2RlZmluZSBQQUREUiAweEZFRTAwOQorI2RlZmluZSBQQkREUiAweEZFRTAwQQorCisjZGVmaW5lIFAxRFIgIDB4RkZGRkQwCisjZGVmaW5lIFAyRFIgIDB4RkZGRkQxCisjZGVmaW5lIFAzRFIgIDB4RkZGRkQyCisjZGVmaW5lIFA0RFIgIDB4RkZGRkQzCisjZGVmaW5lIFA1RFIgIDB4RkZGRkQ0CisjZGVmaW5lIFA2RFIgIDB4RkZGRkQ1CisvKiNkZWZpbmUgUDdEUiAgMHhGRkZGRDYqLworI2RlZmluZSBQOERSICAweEZGRkZENworI2RlZmluZSBQOURSICAweEZGRkZEOAorI2RlZmluZSBQQURSICAweEZGRkZEOQorI2RlZmluZSBQQkRSICAweEZGRkZEQQorCisjZGVmaW5lIFAyQ1IgIDB4RkVFMDNDCisjZGVmaW5lIFA0Q1IgIDB4RkVFMDNFCisjZGVmaW5lIFA1Q1IgIDB4RkVFMDNGCisKKyNkZWZpbmUgU01SMCAgMHhGRkZGQjAKKyNkZWZpbmUgQlJSMCAgMHhGRkZGQjEKKyNkZWZpbmUgU0NSMCAgMHhGRkZGQjIKKyNkZWZpbmUgVERSMCAgMHhGRkZGQjMKKyNkZWZpbmUgU1NSMCAgMHhGRkZGQjQKKyNkZWZpbmUgUkRSMCAgMHhGRkZGQjUKKyNkZWZpbmUgU0NNUjAgMHhGRkZGQjYKKyNkZWZpbmUgU01SMSAgMHhGRkZGQjgKKyNkZWZpbmUgQlJSMSAgMHhGRkZGQjkKKyNkZWZpbmUgU0NSMSAgMHhGRkZGQkEKKyNkZWZpbmUgVERSMSAgMHhGRkZGQkIKKyNkZWZpbmUgU1NSMSAgMHhGRkZGQkMKKyNkZWZpbmUgUkRSMSAgMHhGRkZGQkQKKyNkZWZpbmUgU0NNUjEgMHhGRkZGQkUKKyNkZWZpbmUgU01SMiAgMHhGRkZGQzAKKyNkZWZpbmUgQlJSMiAgMHhGRkZGQzEKKyNkZWZpbmUgU0NSMiAgMHhGRkZGQzIKKyNkZWZpbmUgVERSMiAgMHhGRkZGQzMKKyNkZWZpbmUgU1NSMiAgMHhGRkZGQzQKKyNkZWZpbmUgUkRSMiAgMHhGRkZGQzUKKyNkZWZpbmUgU0NNUjIgMHhGRkZGQzYKKworI2RlZmluZSBNRENSICAgMHhGRUUwMTEKKyNkZWZpbmUgU1lTQ1IgIDB4RkVFMDEyCisjZGVmaW5lIERJVkNSICAweEZFRTAxQgorI2RlZmluZSBNU1RDUkggMHhGRUUwMUMKKyNkZWZpbmUgTVNUQ1JMIDB4RkVFMDFECisjZGVmaW5lIEZMTUNSMSAweEZFRTAzMAorI2RlZmluZSBGTE1DUjIgMHhGRUUwMzEKKyNkZWZpbmUgRUJSMSAgIDB4RkVFMDMyCisjZGVmaW5lIEVCUjIgICAweEZFRTAzMworI2RlZmluZSBSQU1DUiAgMHhGRUUwNzcKKworI2RlZmluZSBUU1RSICAgMHhGRkZGNjAKKyNkZWZpbmUgVFNOQyAgIDBYRkZGRjYxCisjZGVmaW5lIFRNRFIgICAweEZGRkY2MgorI2RlZmluZSBUT0xSICAgMHhGRkZGNjMKKyNkZWZpbmUgVElTUkEgIDB4RkZGRjY0CisjZGVmaW5lIFRJU1JCICAweEZGRkY2NQorI2RlZmluZSBUSVNSQyAgMHhGRkZGNjYKKyNkZWZpbmUgVENSMCAgIDB4RkZGRjY4CisjZGVmaW5lIFRJT1IwICAweEZGRkY2OQorI2RlZmluZSBUQ05UMEggMHhGRkZGNkEKKyNkZWZpbmUgVENOVDBMIDB4RkZGRjZCCisjZGVmaW5lIEdSQTBIICAweEZGRkY2QworI2RlZmluZSBHUkEwTCAgMHhGRkZGNkQKKyNkZWZpbmUgR1JCMEggIDB4RkZGRjZFCisjZGVmaW5lIEdSQjBMICAweEZGRkY2RgorI2RlZmluZSBUQ1IxICAgMHhGRkZGNzAKKyNkZWZpbmUgVElPUjEgIDB4RkZGRjcxCisjZGVmaW5lIFRDTlQxSCAweEZGRkY3MgorI2RlZmluZSBUQ05UMUwgMHhGRkZGNzMKKyNkZWZpbmUgR1JBMUggIDB4RkZGRjc0CisjZGVmaW5lIEdSQTFMICAweEZGRkY3NQorI2RlZmluZSBHUkIxSCAgMHhGRkZGNzYKKyNkZWZpbmUgR1JCMUwgIDB4RkZGRjc3CisjZGVmaW5lIFRDUjMgICAweEZGRkY3OAorI2RlZmluZSBUSU9SMyAgMHhGRkZGNzkKKyNkZWZpbmUgVENOVDNIIDB4RkZGRjdBCisjZGVmaW5lIFRDTlQzTCAweEZGRkY3QgorI2RlZmluZSBHUkEzSCAgMHhGRkZGN0MKKyNkZWZpbmUgR1JBM0wgIDB4RkZGRjdECisjZGVmaW5lIEdSQjNIICAweEZGRkY3RQorI2RlZmluZSBHUkIzTCAgMHhGRkZGN0YKKworI2RlZmluZSBfOFRDUjAgIDB4RkZGRjgwCisjZGVmaW5lIF84VENSMSAgMHhGRkZGODEKKyNkZWZpbmUgXzhUQ1NSMCAweEZGRkY4MgorI2RlZmluZSBfOFRDU1IxIDB4RkZGRjgzCisjZGVmaW5lIFRDT1JBMCAweEZGRkY4NAorI2RlZmluZSBUQ09SQTEgMHhGRkZGODUKKyNkZWZpbmUgVENPUkIwIDB4RkZGRjg2CisjZGVmaW5lIFRDT1JCMSAweEZGRkY4NworI2RlZmluZSBfOFRDTlQwIDB4RkZGRjg4CisjZGVmaW5lIF84VENOVDEgMHhGRkZGODkKKworI2RlZmluZSBfOFRDUjIgIDB4RkZGRjkwCisjZGVmaW5lIF84VENSMyAgMHhGRkZGOTEKKyNkZWZpbmUgXzhUQ1NSMiAweEZGRkY5MgorI2RlZmluZSBfOFRDU1IzIDB4RkZGRjkzCisjZGVmaW5lIFRDT1JBMiAweEZGRkY5NAorI2RlZmluZSBUQ09SQTMgMHhGRkZGOTUKKyNkZWZpbmUgVENPUkIyIDB4RkZGRjk2CisjZGVmaW5lIFRDT1JCMyAweEZGRkY5NworI2RlZmluZSBfOFRDTlQyIDB4RkZGRjk4CisjZGVmaW5lIF84VENOVDMgMHhGRkZGOTkKKworI2RlZmluZSBUQ1NSICAgMHhGRkZGOEMKKyNkZWZpbmUgVENOVCAgIDB4RkZGRjhECisjZGVmaW5lIFJTVENTUiAweEZGRkY4RgorCisjZGVmaW5lIFRQTVIgIDB4RkZGRkEwCisjZGVmaW5lIFRQQ1IgIDB4RkZGRkExCisjZGVmaW5lIE5ERVJCIDB4RkZGRkEyCisjZGVmaW5lIE5ERVJBIDB4RkZGRkEzCisjZGVmaW5lIE5EUkIxIDB4RkZGRkE0CisjZGVmaW5lIE5EUkExIDB4RkZGRkE1CisjZGVmaW5lIE5EUkIyIDB4RkZGRkE2CisjZGVmaW5lIE5EUkEyIDB4RkZGRkE3CisKKyNkZWZpbmUgVENTUiAgICAweEZGRkY4QworI2RlZmluZSBUQ05UICAgIDB4RkZGRjhECisjZGVmaW5lIFJTVENTUlcgMHhGRkZGOEUKKyNkZWZpbmUgUlNUQ1NSUiAweEZGRkY4RgorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9fUkVHU19IODMwNnhfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvcmVzb3VyY2UuaCBiL2luY2x1ZGUvYXNtLWg4MzAwL3Jlc291cmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZjNWY0MwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWg4MzAwL3Jlc291cmNlLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9IODMwMF9SRVNPVVJDRV9ICisjZGVmaW5lIF9IODMwMF9SRVNPVVJDRV9ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9yZXNvdXJjZS5oPgorCisjZW5kaWYgLyogX0g4MzAwX1JFU09VUkNFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWg4MzAwL3NjYXR0ZXJsaXN0LmggYi9pbmNsdWRlL2FzbS1oODMwMC9zY2F0dGVybGlzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2MjdmMGMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC9zY2F0dGVybGlzdC5oCkBAIC0wLDAgKzEsMTMgQEAKKyNpZm5kZWYgX0g4MzAwX1NDQVRURVJMSVNUX0gKKyNkZWZpbmUgX0g4MzAwX1NDQVRURVJMSVNUX0gKKworc3RydWN0IHNjYXR0ZXJsaXN0IHsKKwlzdHJ1Y3QgcGFnZQkqcGFnZTsKKwl1bnNpZ25lZCBpbnQJb2Zmc2V0OworCWRtYV9hZGRyX3QJZG1hX2FkZHJlc3M7CisJdW5zaWduZWQgaW50CWxlbmd0aDsKK307CisKKyNkZWZpbmUgSVNBX0RNQV9USFJFU0hPTEQJKDB4ZmZmZmZmZmYpCisKKyNlbmRpZiAvKiAhKF9IODMwMF9TQ0FUVEVSTElTVF9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvc2VjdGlvbnMuaCBiL2luY2x1ZGUvYXNtLWg4MzAwL3NlY3Rpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTgxNzQzZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWg4MzAwL3NlY3Rpb25zLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9IODMwMF9TRUNUSU9OU19IXworI2RlZmluZSBfSDgzMDBfU0VDVElPTlNfSF8KKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NlY3Rpb25zLmg+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvc2VnbWVudC5oIGIvaW5jbHVkZS9hc20taDgzMDAvc2VnbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3OWE4MmQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC9zZWdtZW50LmgKQEAgLTAsMCArMSw0OSBAQAorI2lmbmRlZiBfSDgzMDBfU0VHTUVOVF9ICisjZGVmaW5lIF9IODMwMF9TRUdNRU5UX0gKKworLyogZGVmaW5lIGNvbnN0YW50cyAqLworI2RlZmluZSBVU0VSX0RBVEEgICAgICgxKQorI2lmbmRlZiBfX1VTRVJfRFMKKyNkZWZpbmUgX19VU0VSX0RTICAgICAoVVNFUl9EQVRBKQorI2VuZGlmCisjZGVmaW5lIFVTRVJfUFJPR1JBTSAgKDIpCisjZGVmaW5lIFNVUEVSX0RBVEEgICAgKDMpCisjaWZuZGVmIF9fS0VSTkVMX0RTCisjZGVmaW5lIF9fS0VSTkVMX0RTICAgKFNVUEVSX0RBVEEpCisjZW5kaWYKKyNkZWZpbmUgU1VQRVJfUFJPR1JBTSAoNCkKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcgc2VnOworfSBtbV9zZWdtZW50X3Q7CisKKyNkZWZpbmUgTUFLRV9NTV9TRUcocykJKChtbV9zZWdtZW50X3QpIHsgKHMpIH0pCisjZGVmaW5lIFVTRVJfRFMJCU1BS0VfTU1fU0VHKF9fVVNFUl9EUykKKyNkZWZpbmUgS0VSTkVMX0RTCU1BS0VfTU1fU0VHKF9fS0VSTkVMX0RTKQorCisvKgorICogR2V0L3NldCB0aGUgU0ZDL0RGQyByZWdpc3RlcnMgZm9yIE1PVkVTIGluc3RydWN0aW9ucworICovCisKK3N0YXRpYyBpbmxpbmUgbW1fc2VnbWVudF90IGdldF9mcyh2b2lkKQoreworICAgIHJldHVybiBVU0VSX0RTOworfQorCitzdGF0aWMgaW5saW5lIG1tX3NlZ21lbnRfdCBnZXRfZHModm9pZCkKK3sKKyAgICAvKiByZXR1cm4gdGhlIHN1cGVydmlzb3IgZGF0YSBzcGFjZSBjb2RlICovCisgICAgcmV0dXJuIEtFUk5FTF9EUzsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldF9mcyhtbV9zZWdtZW50X3QgdmFsKQoreworfQorCisjZGVmaW5lIHNlZ21lbnRfZXEoYSxiKQkoKGEpLnNlZyA9PSAoYikuc2VnKQorCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiBfSDgzMDBfU0VHTUVOVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1oODMwMC9zZW1hcGhvcmUtaGVscGVyLmggYi9pbmNsdWRlL2FzbS1oODMwMC9zZW1hcGhvcmUtaGVscGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjllMGZiZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWg4MzAwL3NlbWFwaG9yZS1oZWxwZXIuaApAQCAtMCwwICsxLDg2IEBACisjaWZuZGVmIF9IODMwMF9TRU1BUEhPUkVfSEVMUEVSX0gKKyNkZWZpbmUgX0g4MzAwX1NFTUFQSE9SRV9IRUxQRVJfSAorCisvKgorICogU01QLSBhbmQgaW50ZXJydXB0LXNhZmUgc2VtYXBob3JlcyBoZWxwZXIgZnVuY3Rpb25zLgorICoKKyAqIChDKSBDb3B5cmlnaHQgMTk5NiBMaW51cyBUb3J2YWxkcworICoKKyAqIGJhc2VkIG9uCisgKiBtNjhrIHZlcnNpb24gYnkgQW5kcmVhcyBTY2h3YWIKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKworLyoKKyAqIFRoZXNlIHR3byBfbXVzdF8gZXhlY3V0ZSBhdG9taWNhbGx5IHdydCBlYWNoIG90aGVyLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgd2FrZV9vbmVfbW9yZShzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQoreworCWF0b21pY19pbmMoKGF0b21pY190ICopJnNlbS0+c2xlZXBlcnMpOworfQorCitzdGF0aWMgaW5saW5lIGludCB3YWtpbmdfbm9uX3plcm8oc3RydWN0IHNlbWFwaG9yZSAqc2VtKQoreworCWludCByZXQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzZW1hcGhvcmVfd2FrZV9sb2NrLCBmbGFncyk7CisJcmV0ID0gMDsKKwlpZiAoc2VtLT5zbGVlcGVycyA+IDApIHsKKwkJc2VtLT5zbGVlcGVycy0tOworCQlyZXQgPSAxOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZW1hcGhvcmVfd2FrZV9sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIHdha2luZ19ub25femVyb19pbnRlcnJ1cHRpYmxlOgorICoJMQlnb3QgdGhlIGxvY2sKKyAqCTAJZ28gdG8gc2xlZXAKKyAqCS1FSU5UUglpbnRlcnJ1cHRlZAorICovCitzdGF0aWMgaW5saW5lIGludCB3YWtpbmdfbm9uX3plcm9faW50ZXJydXB0aWJsZShzdHJ1Y3Qgc2VtYXBob3JlICpzZW0sCisJCQkJCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2VtYXBob3JlX3dha2VfbG9jaywgZmxhZ3MpOworCXJldCA9IDA7CisJaWYgKHNlbS0+c2xlZXBlcnMgPiAwKSB7CisJCXNlbS0+c2xlZXBlcnMtLTsKKwkJcmV0ID0gMTsKKwl9IGVsc2UgaWYgKHNpZ25hbF9wZW5kaW5nKHRzaykpIHsKKwkJYXRvbWljX2luYygmc2VtLT5jb3VudCk7CisJCXJldCA9IC1FSU5UUjsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VtYXBob3JlX3dha2VfbG9jaywgZmxhZ3MpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiB3YWtpbmdfbm9uX3plcm9fdHJ5bG9jazoKKyAqCTEJZmFpbGVkIHRvIGxvY2sKKyAqCTAJZ290IHRoZSBsb2NrCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHdha2luZ19ub25femVyb190cnlsb2NrKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2VtYXBob3JlX3dha2VfbG9jaywgZmxhZ3MpOworCXJldCA9IDE7CisJaWYgKHNlbS0+c2xlZXBlcnMgPD0gMCkKKwkJYXRvbWljX2luYygmc2VtLT5jb3VudCk7CisJZWxzZSB7CisJCXNlbS0+c2xlZXBlcnMtLTsKKwkJcmV0ID0gMDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VtYXBob3JlX3dha2VfbG9jaywgZmxhZ3MpOworCXJldHVybiByZXQ7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvc2VtYXBob3JlLmggYi9pbmNsdWRlL2FzbS1oODMwMC9zZW1hcGhvcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTZlZjM3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvc2VtYXBob3JlLmgKQEAgLTAsMCArMSwxOTQgQEAKKyNpZm5kZWYgX0g4MzAwX1NFTUFQSE9SRV9ICisjZGVmaW5lIF9IODMwMF9TRU1BUEhPUkVfSAorCisjZGVmaW5lIFJXX0xPQ0tfQklBUwkJIDB4MDEwMDAwMDAKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgorCisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKworLyoKKyAqIEludGVycnVwdC1zYWZlIHNlbWFwaG9yZXMuLgorICoKKyAqIChDKSBDb3B5cmlnaHQgMTk5NiBMaW51cyBUb3J2YWxkcworICoKKyAqIEg4LzMwMCB2ZXJzaW9uIGJ5IFlvc2hpbm9yaSBTYXRvCisgKi8KKworCitzdHJ1Y3Qgc2VtYXBob3JlIHsKKwlhdG9taWNfdCBjb3VudDsKKwlpbnQgc2xlZXBlcnM7CisJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKK307CisKKyNkZWZpbmUgX19TRU1BUEhPUkVfSU5JVElBTElaRVIobmFtZSwgbikJCQkJXAorewkJCQkJCQkJCVwKKwkuY291bnQJCT0gQVRPTUlDX0lOSVQobiksCQkJCVwKKwkuc2xlZXBlcnMJPSAwLAkJCQkJCVwKKwkud2FpdAkJPSBfX1dBSVRfUVVFVUVfSEVBRF9JTklUSUFMSVpFUigobmFtZSkud2FpdCkJXAorfQorCisjZGVmaW5lIF9fTVVURVhfSU5JVElBTElaRVIobmFtZSkgXAorCV9fU0VNQVBIT1JFX0lOSVRJQUxJWkVSKG5hbWUsMSkKKworI2RlZmluZSBfX0RFQ0xBUkVfU0VNQVBIT1JFX0dFTkVSSUMobmFtZSxjb3VudCkgXAorCXN0cnVjdCBzZW1hcGhvcmUgbmFtZSA9IF9fU0VNQVBIT1JFX0lOSVRJQUxJWkVSKG5hbWUsY291bnQpCisKKyNkZWZpbmUgREVDTEFSRV9NVVRFWChuYW1lKSBfX0RFQ0xBUkVfU0VNQVBIT1JFX0dFTkVSSUMobmFtZSwxKQorI2RlZmluZSBERUNMQVJFX01VVEVYX0xPQ0tFRChuYW1lKSBfX0RFQ0xBUkVfU0VNQVBIT1JFX0dFTkVSSUMobmFtZSwwKQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2VtYV9pbml0IChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0sIGludCB2YWwpCit7CisJKnNlbSA9IChzdHJ1Y3Qgc2VtYXBob3JlKV9fU0VNQVBIT1JFX0lOSVRJQUxJWkVSKCpzZW0sIHZhbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbml0X01VVEVYIChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCit7CisJc2VtYV9pbml0KHNlbSwgMSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbml0X01VVEVYX0xPQ0tFRCAoc3RydWN0IHNlbWFwaG9yZSAqc2VtKQoreworCXNlbWFfaW5pdChzZW0sIDApOworfQorCithc21saW5rYWdlIHZvaWQgX19kb3duX2ZhaWxlZCh2b2lkIC8qIHNwZWNpYWwgcmVnaXN0ZXIgY2FsbGluZyBjb252ZW50aW9uICovKTsKK2FzbWxpbmthZ2UgaW50ICBfX2Rvd25fZmFpbGVkX2ludGVycnVwdGlibGUodm9pZCAgLyogcGFyYW1zIGluIHJlZ2lzdGVycyAqLyk7Cithc21saW5rYWdlIGludCAgX19kb3duX2ZhaWxlZF90cnlsb2NrKHZvaWQgIC8qIHBhcmFtcyBpbiByZWdpc3RlcnMgKi8pOworYXNtbGlua2FnZSB2b2lkIF9fdXBfd2FrZXVwKHZvaWQgLyogc3BlY2lhbCByZWdpc3RlciBjYWxsaW5nIGNvbnZlbnRpb24gKi8pOworCithc21saW5rYWdlIHZvaWQgX19kb3duKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pOworYXNtbGlua2FnZSBpbnQgIF9fZG93bl9pbnRlcnJ1cHRpYmxlKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pOworYXNtbGlua2FnZSBpbnQgIF9fZG93bl90cnlsb2NrKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pOworYXNtbGlua2FnZSB2b2lkIF9fdXAoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSk7CisKK2V4dGVybiBzcGlubG9ja190IHNlbWFwaG9yZV93YWtlX2xvY2s7CisKKy8qCisgKiBUaGlzIGlzIHVnbHksIGJ1dCB3ZSB3YW50IHRoZSBkZWZhdWx0IGNhc2UgdG8gZmFsbCB0aHJvdWdoLgorICogImRvd25fZmFpbGVkIiBpcyBhIHNwZWNpYWwgYXNtIGhhbmRsZXIgdGhhdCBjYWxscyB0aGUgQworICogcm91dGluZSB0aGF0IGFjdHVhbGx5IHdhaXRzLiBTZWUgYXJjaC9tNjhrL2xpYi9zZW1hcGhvcmUuUworICovCitzdGF0aWMgaW5saW5lIHZvaWQgZG93bihzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQoreworCXJlZ2lzdGVyIGF0b21pY190ICpjb3VudCBhc20oImVyMCIpOworCisJbWlnaHRfc2xlZXAoKTsKKworCWNvdW50ID0gJihzZW0tPmNvdW50KTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJInN0YyBjY3IscjNsXG5cdCIKKwkJIm9yYyAjMHg4MCxjY3Jcblx0IgorCQkibW92LmwgJTIsIGVyMVxuXHQiCisJCSJkZWMubCAjMSxlcjFcblx0IgorCQkibW92LmwgZXIxLCUwXG5cdCIKKwkJImJwbCAxZlxuXHQiCisJCSJsZGMgcjNsLGNjclxuXHQiCisJCSJtb3YubCAlMSxlcjBcblx0IgorCQkianNyIEBfX19kb3duXG5cdCIKKwkJImJyYSAyZlxuIgorCQkiMTpcblx0IgorCQkibGRjIHIzbCxjY3JcbiIKKwkJIjI6IgorCQk6ICI9bSIoKmNvdW50KQorCQk6ICJnIihzZW0pLCJtIigqY291bnQpCisJCTogImNjIiwgICJlcjEiLCAiZXIyIiwgImVyMyIpOworfQorCitzdGF0aWMgaW5saW5lIGludCBkb3duX2ludGVycnVwdGlibGUoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKK3sKKwlyZWdpc3RlciBhdG9taWNfdCAqY291bnQgYXNtKCJlcjAiKTsKKworCW1pZ2h0X3NsZWVwKCk7CisKKwljb3VudCA9ICYoc2VtLT5jb3VudCk7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSJzdGMgY2NyLHIxbFxuXHQiCisJCSJvcmMgIzB4ODAsY2NyXG5cdCIKKwkJIm1vdi5sICUzLCBlcjJcblx0IgorCQkiZGVjLmwgIzEsZXIyXG5cdCIKKwkJIm1vdi5sIGVyMiwlMVxuXHQiCisJCSJicGwgMWZcblx0IgorCQkibGRjIHIxbCxjY3Jcblx0IgorCQkibW92LmwgJTIsZXIwXG5cdCIKKwkJImpzciBAX19fZG93bl9pbnRlcnJ1cHRpYmxlXG5cdCIKKwkJImJyYSAyZlxuIgorCQkiMTpcblx0IgorCQkibGRjIHIxbCxjY3Jcblx0IgorCQkic3ViLmwgJTAsJTBcblx0IgorCQkiMjpcblx0IgorCQk6ICI9ciIgKGNvdW50KSwiPW0iICgqY291bnQpCisJCTogImciKHNlbSksIm0iKCpjb3VudCkKKwkJOiAiY2MiLCAiZXIxIiwgImVyMiIsICJlcjMiKTsKKwlyZXR1cm4gKGludCljb3VudDsKK30KKworc3RhdGljIGlubGluZSBpbnQgZG93bl90cnlsb2NrKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCit7CisJcmVnaXN0ZXIgYXRvbWljX3QgKmNvdW50IGFzbSgiZXIwIik7CisKKwljb3VudCA9ICYoc2VtLT5jb3VudCk7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSJzdGMgY2NyLHIzbFxuXHQiCisJCSJvcmMgIzB4ODAsY2NyXG5cdCIKKwkJIm1vdi5sICUzLGVyMlxuXHQiCisJCSJkZWMubCAjMSxlcjJcblx0IgorCQkibW92LmwgZXIyLCUwXG5cdCIKKwkJImJwbCAxZlxuXHQiCisJCSJsZGMgcjNsLGNjclxuXHQiCisJCSJqbXAgQDNmXG5cdCIKKwkJTE9DS19TRUNUSU9OX1NUQVJUKCIuYWxpZ24gMlxuXHQiKQorCQkiMzpcblx0IgorCQkibW92LmwgJTIsZXIwXG5cdCIKKwkJImpzciBAX19fZG93bl90cnlsb2NrXG5cdCIKKwkJImptcCBAMmZcblx0IgorCQlMT0NLX1NFQ1RJT05fRU5ECisJCSIxOlxuXHQiCisJCSJsZGMgcjNsLGNjclxuXHQiCisJCSJzdWIubCAlMSwlMVxuIgorCQkiMjoiCisJCTogIj1tIiAoKmNvdW50KSwiPXIiKGNvdW50KQorCQk6ICJnIihzZW0pLCJtIigqY291bnQpCisJCTogImNjIiwgImVyMSIsImVyMiIsICJlcjMiKTsKKwlyZXR1cm4gKGludCljb3VudDsKK30KKworLyoKKyAqIE5vdGUhIFRoaXMgaXMgc3VidGxlLiBXZSBqdW1wIHRvIHdha2UgcGVvcGxlIHVwIG9ubHkgaWYKKyAqIHRoZSBzZW1hcGhvcmUgd2FzIG5lZ2F0aXZlICg9PSBzb21lYm9keSB3YXMgd2FpdGluZyBvbiBpdCkuCisgKiBUaGUgZGVmYXVsdCBjYXNlIChubyBjb250ZW50aW9uKSB3aWxsIHJlc3VsdCBpbiBOTworICoganVtcHMgZm9yIGJvdGggZG93bigpIGFuZCB1cCgpLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgdXAoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKK3sKKwlyZWdpc3RlciBhdG9taWNfdCAqY291bnQgYXNtKCJlcjAiKTsKKworCWNvdW50ID0gJihzZW0tPmNvdW50KTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJInN0YyBjY3IscjNsXG5cdCIKKwkJIm9yYyAjMHg4MCxjY3Jcblx0IgorCQkibW92LmwgJTIsZXIxXG5cdCIKKwkJImluYy5sICMxLGVyMVxuXHQiCisJCSJtb3YubCBlcjEsJTBcblx0IgorCQkibGRjIHIzbCxjY3Jcblx0IgorCQkic3ViLmwgZXIyLGVyMlxuXHQiCisJCSJjbXAubCBlcjIsZXIxXG5cdCIKKwkJImJndCAxZlxuXHQiCisJCSJtb3YubCAlMSxlcjBcblx0IgorCQkianNyIEBfX191cFxuIgorCQkiMToiCisJCTogIj1tIigqY291bnQpCisJCTogImciKHNlbSksIm0iKCpjb3VudCkKKwkJOiAiY2MiLCAiZXIxIiwgImVyMiIsICJlcjMiKTsKK30KKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWg4MzAwL3NlbWJ1Zi5oIGIvaW5jbHVkZS9hc20taDgzMDAvc2VtYnVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA0YTNlYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWg4MzAwL3NlbWJ1Zi5oCkBAIC0wLDAgKzEsMjUgQEAKKyNpZm5kZWYgX0g4MzAwX1NFTUJVRl9ICisjZGVmaW5lIF9IODMwMF9TRU1CVUZfSAorCisvKiAKKyAqIFRoZSBzZW1pZDY0X2RzIHN0cnVjdHVyZSBmb3IgbTY4ayBhcmNoaXRlY3R1cmUuCisgKiBOb3RlIGV4dHJhIHBhZGRpbmcgYmVjYXVzZSB0aGlzIHN0cnVjdHVyZSBpcyBwYXNzZWQgYmFjayBhbmQgZm9ydGgKKyAqIGJldHdlZW4ga2VybmVsIGFuZCB1c2VyIHNwYWNlLgorICoKKyAqIFBhZCBzcGFjZSBpcyBsZWZ0IGZvcjoKKyAqIC0gNjQtYml0IHRpbWVfdCB0byBzb2x2ZSB5MjAzOCBwcm9ibGVtCisgKiAtIDIgbWlzY2VsbGFuZW91cyAzMi1iaXQgdmFsdWVzCisgKi8KKworc3RydWN0IHNlbWlkNjRfZHMgeworCXN0cnVjdCBpcGM2NF9wZXJtIHNlbV9wZXJtOwkJLyogcGVybWlzc2lvbnMgLi4gc2VlIGlwYy5oICovCisJX19rZXJuZWxfdGltZV90CXNlbV9vdGltZTsJCS8qIGxhc3Qgc2Vtb3AgdGltZSAqLworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQxOworCV9fa2VybmVsX3RpbWVfdAlzZW1fY3RpbWU7CQkvKiBsYXN0IGNoYW5nZSB0aW1lICovCisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDI7CisJdW5zaWduZWQgbG9uZwlzZW1fbnNlbXM7CQkvKiBuby4gb2Ygc2VtYXBob3JlcyBpbiBhcnJheSAqLworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQzOworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQ0OworfTsKKworI2VuZGlmIC8qIF9IODMwMF9TRU1CVUZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvc2V0dXAuaCBiL2luY2x1ZGUvYXNtLWg4MzAwL3NldHVwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJjNjAwZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWg4MzAwL3NldHVwLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fSDgzMDBfU0VUVVBfSAorI2RlZmluZSBfX0g4MzAwX1NFVFVQX0gKKworI2RlZmluZSBDT01NQU5EX0xJTkVfU0laRQk1MTIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1oODMwMC9zaF9iaW9zLmggYi9pbmNsdWRlL2FzbS1oODMwMC9zaF9iaW9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZiYjZlNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWg4MzAwL3NoX2Jpb3MuaApAQCAtMCwwICsxLDI5IEBACisvKiBlQ29zIEhBTCBpbnRlcmZhY2UgaGVhZGVyICovCisKKyNpZm5kZWYgU0hfQklPU19ICisjZGVmaW5lIFNIX0JJT1NfSAorCisjZGVmaW5lIEhBTF9JRl9WRUNUT1JfVEFCTEUgMHhmZmZlMjAKKyNkZWZpbmUgQ0FMTF9JRl9TRVRfQ09OU09MRV9DT01NICAxMworI2RlZmluZSBRVUVSWV9DVVJSRU5UIC0xCisjZGVmaW5lIE1BTkdMRVIgICAgICAgLTMKKworLyogQ2hlY2tpbmcgZm9yIEdEQiBzdHViIGFjdGl2ZSAqLworLyogc3VnZ2VzdGlvbiBKb25hdGhhbiBMYXJtb3VyICovCitzdGF0aWMgaW50IHNoX2Jpb3NfaW5fZ2RiX21vZGUodm9pZCkKK3sKKwlzdGF0aWMgaW50IGdkYl9hY3RpdmUgPSAtMTsKKwlpZiAoZ2RiX2FjdGl2ZSA9PSAtMSkgeworCQlpbnQgKCpzZXRfY29uc29sZV9jb21tKShpbnQpOworCQlzZXRfY29uc29sZV9jb21tID0gKCh2b2lkICoqKUhBTF9JRl9WRUNUT1JfVEFCTEUpW0NBTExfSUZfU0VUX0NPTlNPTEVfQ09NTV07CisJCWdkYl9hY3RpdmUgPSAoc2V0X2NvbnNvbGVfY29tbShRVUVSWV9DVVJSRU5UKSA9PSBNQU5HTEVSKTsKKwl9CisJcmV0dXJuIGdkYl9hY3RpdmU7Cit9CisKK3N0YXRpYyB2b2lkIHNoX2Jpb3NfZ2RiX2RldGFjaCh2b2lkKQoreworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvc2htLmggYi9pbmNsdWRlL2FzbS1oODMwMC9zaG0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWM3NTg1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvc2htLmgKQEAgLTAsMCArMSwzMiBAQAorI2lmbmRlZiBfSDgzMDBfU0hNX0gKKyNkZWZpbmUgX0g4MzAwX1NITV9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworLyogZm9ybWF0IG9mIHBhZ2UgdGFibGUgZW50cmllcyB0aGF0IGNvcnJlc3BvbmQgdG8gc2hhcmVkIG1lbW9yeSBwYWdlcworICAgY3VycmVudGx5IG91dCBpbiBzd2FwIHNwYWNlIChzZWUgYWxzbyBtbS9zd2FwLmMpOgorICAgYml0cyAwLTEgKFBBR0VfUFJFU0VOVCkgaXMgID0gMAorICAgYml0cyA4Li4yIChTV1BfVFlQRSkgYXJlID0gU0hNX1NXUF9UWVBFCisgICBiaXRzIDMxLi45IGFyZSB1c2VkIGxpa2UgdGhpczoKKyAgIGJpdHMgMTUuLjkgKFNITV9JRCkgdGhlIGlkIG9mIHRoZSBzaGFyZWQgbWVtb3J5IHNlZ21lbnQKKyAgIGJpdHMgMzAuLjE2IChTSE1fSURYKSB0aGUgaW5kZXggb2YgdGhlIHBhZ2Ugd2l0aGluIHRoZSBzaGFyZWQgbWVtb3J5IHNlZ21lbnQKKyAgICAgICAgICAgICAgICAgICAgKGFjdHVhbGx5IG9ubHkgYml0cyAyNS4uMTYgZ2V0IHVzZWQgc2luY2UgU0hNTUFYIGlzIHNvIGxvdykKKyAgIGJpdCAzMSAoU0hNX1JFQURfT05MWSkgZmxhZyB3aGV0aGVyIHRoZSBwYWdlIGJlbG9uZ3MgdG8gYSByZWFkLW9ubHkgYXR0YWNoCisqLworLyogb24gdGhlIG02OGsgYm90aCBiaXRzIDAgYW5kIDEgbXVzdCBiZSB6ZXJvICovCisvKiBmb3JtYXQgb24gdGhlIHN1bjMgaXMgc2ltaWxhciwgYnV0IGJpdHMgMzAsIDMxIGFyZSBzZXQgdG8gemVybyBhbmQgYWxsCisgICBvdGhlcnMgYXJlIHJlZHVjZWQgYnkgMi4gLS1tICovCisKKyNpZm5kZWYgQ09ORklHX1NVTjMKKyNkZWZpbmUgU0hNX0lEX1NISUZUCTkKKyNlbHNlCisjZGVmaW5lIFNITV9JRF9TSElGVAk3CisjZW5kaWYKKyNkZWZpbmUgX1NITV9JRF9CSVRTCTcKKyNkZWZpbmUgU0hNX0lEX01BU0sJKCgxPDxfU0hNX0lEX0JJVFMpLTEpCisKKyNkZWZpbmUgU0hNX0lEWF9TSElGVAkoU0hNX0lEX1NISUZUK19TSE1fSURfQklUUykKKyNkZWZpbmUgX1NITV9JRFhfQklUUwkxNQorI2RlZmluZSBTSE1fSURYX01BU0sJKCgxPDxfU0hNX0lEWF9CSVRTKS0xKQorCisjZW5kaWYgLyogX0g4MzAwX1NITV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1oODMwMC9zaG1idWYuaCBiL2luY2x1ZGUvYXNtLWg4MzAwL3NobWJ1Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0ZTc3OTkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC9zaG1idWYuaApAQCAtMCwwICsxLDQyIEBACisjaWZuZGVmIF9IODMwMF9TSE1CVUZfSAorI2RlZmluZSBfSDgzMDBfU0hNQlVGX0gKKworLyogCisgKiBUaGUgc2htaWQ2NF9kcyBzdHJ1Y3R1cmUgZm9yIG02OGsgYXJjaGl0ZWN0dXJlLgorICogTm90ZSBleHRyYSBwYWRkaW5nIGJlY2F1c2UgdGhpcyBzdHJ1Y3R1cmUgaXMgcGFzc2VkIGJhY2sgYW5kIGZvcnRoCisgKiBiZXR3ZWVuIGtlcm5lbCBhbmQgdXNlciBzcGFjZS4KKyAqCisgKiBQYWQgc3BhY2UgaXMgbGVmdCBmb3I6CisgKiAtIDY0LWJpdCB0aW1lX3QgdG8gc29sdmUgeTIwMzggcHJvYmxlbQorICogLSAyIG1pc2NlbGxhbmVvdXMgMzItYml0IHZhbHVlcworICovCisKK3N0cnVjdCBzaG1pZDY0X2RzIHsKKwlzdHJ1Y3QgaXBjNjRfcGVybQlzaG1fcGVybTsJLyogb3BlcmF0aW9uIHBlcm1zICovCisJc2l6ZV90CQkJc2htX3NlZ3N6OwkvKiBzaXplIG9mIHNlZ21lbnQgKGJ5dGVzKSAqLworCV9fa2VybmVsX3RpbWVfdAkJc2htX2F0aW1lOwkvKiBsYXN0IGF0dGFjaCB0aW1lICovCisJdW5zaWduZWQgbG9uZwkJX191bnVzZWQxOworCV9fa2VybmVsX3RpbWVfdAkJc2htX2R0aW1lOwkvKiBsYXN0IGRldGFjaCB0aW1lICovCisJdW5zaWduZWQgbG9uZwkJX191bnVzZWQyOworCV9fa2VybmVsX3RpbWVfdAkJc2htX2N0aW1lOwkvKiBsYXN0IGNoYW5nZSB0aW1lICovCisJdW5zaWduZWQgbG9uZwkJX191bnVzZWQzOworCV9fa2VybmVsX3BpZF90CQlzaG1fY3BpZDsJLyogcGlkIG9mIGNyZWF0b3IgKi8KKwlfX2tlcm5lbF9waWRfdAkJc2htX2xwaWQ7CS8qIHBpZCBvZiBsYXN0IG9wZXJhdG9yICovCisJdW5zaWduZWQgbG9uZwkJc2htX25hdHRjaDsJLyogbm8uIG9mIGN1cnJlbnQgYXR0YWNoZXMgKi8KKwl1bnNpZ25lZCBsb25nCQlfX3VudXNlZDQ7CisJdW5zaWduZWQgbG9uZwkJX191bnVzZWQ1OworfTsKKworc3RydWN0IHNobWluZm82NCB7CisJdW5zaWduZWQgbG9uZwlzaG1tYXg7CisJdW5zaWduZWQgbG9uZwlzaG1taW47CisJdW5zaWduZWQgbG9uZwlzaG1tbmk7CisJdW5zaWduZWQgbG9uZwlzaG1zZWc7CisJdW5zaWduZWQgbG9uZwlzaG1hbGw7CisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDE7CisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDI7CisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDM7CisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDQ7Cit9OworCisjZW5kaWYgLyogX0g4MzAwX1NITUJVRl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1oODMwMC9zaG1wYXJhbS5oIGIvaW5jbHVkZS9hc20taDgzMDAvc2htcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTg2Mzk1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvc2htcGFyYW0uaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX0g4MzAwX1NITVBBUkFNX0gKKyNkZWZpbmUgX0g4MzAwX1NITVBBUkFNX0gKKworI2RlZmluZQlTSE1MQkEgUEFHRV9TSVpFCQkgLyogYXR0YWNoIGFkZHIgYSBtdWx0aXBsZSBvZiB0aGlzICovCisKKyNlbmRpZiAvKiBfSDgzMDBfU0hNUEFSQU1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvc2lnY29udGV4dC5oIGIvaW5jbHVkZS9hc20taDgzMDAvc2lnY29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0YjgxNTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC9zaWdjb250ZXh0LmgKQEAgLTAsMCArMSwxOCBAQAorI2lmbmRlZiBfQVNNX0g4MzAwX1NJR0NPTlRFWFRfSAorI2RlZmluZSBfQVNNX0g4MzAwX1NJR0NPTlRFWFRfSAorCitzdHJ1Y3Qgc2lnY29udGV4dCB7CisJdW5zaWduZWQgbG9uZyAgc2NfbWFzazsgCS8qIG9sZCBzaWdtYXNrICovCisJdW5zaWduZWQgbG9uZyAgc2NfdXNwOwkJLyogb2xkIHVzZXIgc3RhY2sgcG9pbnRlciAqLworCXVuc2lnbmVkIGxvbmcgIHNjX2VyMDsKKwl1bnNpZ25lZCBsb25nICBzY19lcjE7CisJdW5zaWduZWQgbG9uZyAgc2NfZXIyOworCXVuc2lnbmVkIGxvbmcgIHNjX2VyMzsKKwl1bnNpZ25lZCBsb25nICBzY19lcjQ7CisJdW5zaWduZWQgbG9uZyAgc2NfZXI1OworCXVuc2lnbmVkIGxvbmcgIHNjX2VyNjsKKwl1bnNpZ25lZCBzaG9ydCBzY19jY3I7CisJdW5zaWduZWQgbG9uZyAgc2NfcGM7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWg4MzAwL3NpZ2luZm8uaCBiL2luY2x1ZGUvYXNtLWg4MzAwL3NpZ2luZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzhmYmVhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvc2lnaW5mby5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfSDgzMDBfU0lHSU5GT19ICisjZGVmaW5lIF9IODMwMF9TSUdJTkZPX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NpZ2luZm8uaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1oODMwMC9zaWduYWwuaCBiL2luY2x1ZGUvYXNtLWg4MzAwL3NpZ25hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhMDg1NDQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC9zaWduYWwuaApAQCAtMCwwICsxLDE4NSBAQAorI2lmbmRlZiBfSDgzMDBfU0lHTkFMX0gKKyNkZWZpbmUgX0g4MzAwX1NJR05BTF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKiBBdm9pZCB0b28gbWFueSBoZWFkZXIgb3JkZXJpbmcgcHJvYmxlbXMuICAqLworc3RydWN0IHNpZ2luZm87CisKKyNpZmRlZiBfX0tFUk5FTF9fCisvKiBNb3N0IHRoaW5ncyBzaG91bGQgYmUgY2xlYW4gZW5vdWdoIHRvIHJlZGVmaW5lIHRoaXMgYXQgd2lsbCwgaWYgY2FyZQorICAgaXMgdGFrZW4gdG8gbWFrZSBsaWJjIG1hdGNoLiAgKi8KKworI2RlZmluZSBfTlNJRwkJNjQKKyNkZWZpbmUgX05TSUdfQlBXCTMyCisjZGVmaW5lIF9OU0lHX1dPUkRTCShfTlNJRyAvIF9OU0lHX0JQVykKKwordHlwZWRlZiB1bnNpZ25lZCBsb25nIG9sZF9zaWdzZXRfdDsJCS8qIGF0IGxlYXN0IDMyIGJpdHMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcgc2lnW19OU0lHX1dPUkRTXTsKK30gc2lnc2V0X3Q7CisKKyNlbHNlCisvKiBIZXJlIHdlIG11c3QgY2F0ZXIgdG8gbGliY3MgdGhhdCBwb2tlIGFib3V0IGluIGtlcm5lbCBoZWFkZXJzLiAgKi8KKworI2RlZmluZSBOU0lHCQkzMgordHlwZWRlZiB1bnNpZ25lZCBsb25nIHNpZ3NldF90OworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZGVmaW5lIFNJR0hVUAkJIDEKKyNkZWZpbmUgU0lHSU5UCQkgMgorI2RlZmluZSBTSUdRVUlUCQkgMworI2RlZmluZSBTSUdJTEwJCSA0CisjZGVmaW5lIFNJR1RSQVAJCSA1CisjZGVmaW5lIFNJR0FCUlQJCSA2CisjZGVmaW5lIFNJR0lPVAkJIDYKKyNkZWZpbmUgU0lHQlVTCQkgNworI2RlZmluZSBTSUdGUEUJCSA4CisjZGVmaW5lIFNJR0tJTEwJCSA5CisjZGVmaW5lIFNJR1VTUjEJCTEwCisjZGVmaW5lIFNJR1NFR1YJCTExCisjZGVmaW5lIFNJR1VTUjIJCTEyCisjZGVmaW5lIFNJR1BJUEUJCTEzCisjZGVmaW5lIFNJR0FMUk0JCTE0CisjZGVmaW5lIFNJR1RFUk0JCTE1CisjZGVmaW5lIFNJR1NUS0ZMVAkxNgorI2RlZmluZSBTSUdDSExECQkxNworI2RlZmluZSBTSUdDT05UCQkxOAorI2RlZmluZSBTSUdTVE9QCQkxOQorI2RlZmluZSBTSUdUU1RQCQkyMAorI2RlZmluZSBTSUdUVElOCQkyMQorI2RlZmluZSBTSUdUVE9VCQkyMgorI2RlZmluZSBTSUdVUkcJCTIzCisjZGVmaW5lIFNJR1hDUFUJCTI0CisjZGVmaW5lIFNJR1hGU1oJCTI1CisjZGVmaW5lIFNJR1ZUQUxSTQkyNgorI2RlZmluZSBTSUdQUk9GCQkyNworI2RlZmluZSBTSUdXSU5DSAkyOAorI2RlZmluZSBTSUdJTwkJMjkKKyNkZWZpbmUgU0lHUE9MTAkJU0lHSU8KKy8qCisjZGVmaW5lIFNJR0xPU1QJCTI5CisqLworI2RlZmluZSBTSUdQV1IJCTMwCisjZGVmaW5lIFNJR1NZUwkJMzEKKyNkZWZpbmUJU0lHVU5VU0VECTMxCisKKy8qIFRoZXNlIHNob3VsZCBub3QgYmUgY29uc2lkZXJlZCBjb25zdGFudHMgZnJvbSB1c2VybGFuZC4gICovCisjZGVmaW5lIFNJR1JUTUlOCTMyCisjZGVmaW5lIFNJR1JUTUFYCV9OU0lHCisKKy8qCisgKiBTQV9GTEFHUyB2YWx1ZXM6CisgKgorICogU0FfT05TVEFDSyBpbmRpY2F0ZXMgdGhhdCBhIHJlZ2lzdGVyZWQgc3RhY2tfdCB3aWxsIGJlIHVzZWQuCisgKiBTQV9JTlRFUlJVUFQgaXMgYSBuby1vcCwgYnV0IGxlZnQgZHVlIHRvIGhpc3RvcmljYWwgcmVhc29ucy4gVXNlIHRoZQorICogU0FfUkVTVEFSVCBmbGFnIHRvIGdldCByZXN0YXJ0aW5nIHNpZ25hbHMgKHdoaWNoIHdlcmUgdGhlIGRlZmF1bHQgbG9uZyBhZ28pCisgKiBTQV9OT0NMRFNUT1AgZmxhZyB0byB0dXJuIG9mZiBTSUdDSExEIHdoZW4gY2hpbGRyZW4gc3RvcC4KKyAqIFNBX1JFU0VUSEFORCBjbGVhcnMgdGhlIGhhbmRsZXIgd2hlbiB0aGUgc2lnbmFsIGlzIGRlbGl2ZXJlZC4KKyAqIFNBX05PQ0xEV0FJVCBmbGFnIG9uIFNJR0NITEQgdG8gaW5oaWJpdCB6b21iaWVzLgorICogU0FfTk9ERUZFUiBwcmV2ZW50cyB0aGUgY3VycmVudCBzaWduYWwgZnJvbSBiZWluZyBtYXNrZWQgaW4gdGhlIGhhbmRsZXIuCisgKgorICogU0FfT05FU0hPVCBhbmQgU0FfTk9NQVNLIGFyZSB0aGUgaGlzdG9yaWNhbCBMaW51eCBuYW1lcyBmb3IgdGhlIFNpbmdsZQorICogVW5peCBuYW1lcyBSRVNFVEhBTkQgYW5kIE5PREVGRVIgcmVzcGVjdGl2ZWx5LgorICovCisjZGVmaW5lIFNBX05PQ0xEU1RPUAkweDAwMDAwMDAxCisjZGVmaW5lIFNBX05PQ0xEV0FJVAkweDAwMDAwMDAyIC8qIG5vdCBzdXBwb3J0ZWQgeWV0ICovCisjZGVmaW5lIFNBX1NJR0lORk8JMHgwMDAwMDAwNAorI2RlZmluZSBTQV9PTlNUQUNLCTB4MDgwMDAwMDAKKyNkZWZpbmUgU0FfUkVTVEFSVAkweDEwMDAwMDAwCisjZGVmaW5lIFNBX05PREVGRVIJMHg0MDAwMDAwMAorI2RlZmluZSBTQV9SRVNFVEhBTkQJMHg4MDAwMDAwMAorCisjZGVmaW5lIFNBX05PTUFTSwlTQV9OT0RFRkVSCisjZGVmaW5lIFNBX09ORVNIT1QJU0FfUkVTRVRIQU5ECisjZGVmaW5lIFNBX0lOVEVSUlVQVAkweDIwMDAwMDAwIC8qIGR1bW15IC0tIGlnbm9yZWQgKi8KKworI2RlZmluZSBTQV9SRVNUT1JFUgkweDA0MDAwMDAwCisKKy8qIAorICogc2lnYWx0c3RhY2sgY29udHJvbHMKKyAqLworI2RlZmluZSBTU19PTlNUQUNLCTEKKyNkZWZpbmUgU1NfRElTQUJMRQkyCisKKyNkZWZpbmUgTUlOU0lHU1RLU1oJMjA0OAorI2RlZmluZSBTSUdTVEtTWgk4MTkyCisKKyNpZmRlZiBfX0tFUk5FTF9fCisvKgorICogVGhlc2UgdmFsdWVzIG9mIHNhX2ZsYWdzIGFyZSB1c2VkIG9ubHkgYnkgdGhlIGtlcm5lbCBhcyBwYXJ0IG9mIHRoZQorICogaXJxIGhhbmRsaW5nIHJvdXRpbmVzLgorICoKKyAqIFNBX0lOVEVSUlVQVCBpcyBhbHNvIHVzZWQgYnkgdGhlIGlycSBoYW5kbGluZyByb3V0aW5lcy4KKyAqIFNBX1NISVJRIGlzIGZvciBzaGFyZWQgaW50ZXJydXB0IHN1cHBvcnQgb24gUENJIGFuZCBFSVNBLgorICovCisjZGVmaW5lIFNBX1BST0JFCQlTQV9PTkVTSE9UCisjZGVmaW5lIFNBX1NBTVBMRV9SQU5ET00JU0FfUkVTVEFSVAorI2RlZmluZSBTQV9TSElSUQkJMHgwNDAwMDAwMAorI2VuZGlmCisKKyNkZWZpbmUgU0lHX0JMT0NLICAgICAgICAgIDAJLyogZm9yIGJsb2NraW5nIHNpZ25hbHMgKi8KKyNkZWZpbmUgU0lHX1VOQkxPQ0sgICAgICAgIDEJLyogZm9yIHVuYmxvY2tpbmcgc2lnbmFscyAqLworI2RlZmluZSBTSUdfU0VUTUFTSyAgICAgICAgMgkvKiBmb3Igc2V0dGluZyB0aGUgc2lnbmFsIG1hc2sgKi8KKworLyogVHlwZSBvZiBhIHNpZ25hbCBoYW5kbGVyLiAgKi8KK3R5cGVkZWYgdm9pZCAoKl9fc2lnaGFuZGxlcl90KShpbnQpOworCisjZGVmaW5lIFNJR19ERkwJKChfX3NpZ2hhbmRsZXJfdCkwKQkvKiBkZWZhdWx0IHNpZ25hbCBoYW5kbGluZyAqLworI2RlZmluZSBTSUdfSUdOCSgoX19zaWdoYW5kbGVyX3QpMSkJLyogaWdub3JlIHNpZ25hbCAqLworI2RlZmluZSBTSUdfRVJSCSgoX19zaWdoYW5kbGVyX3QpLTEpCS8qIGVycm9yIHJldHVybiBmcm9tIHNpZ25hbCAqLworCisjaWZkZWYgX19LRVJORUxfXworc3RydWN0IG9sZF9zaWdhY3Rpb24geworCV9fc2lnaGFuZGxlcl90IHNhX2hhbmRsZXI7CisJb2xkX3NpZ3NldF90IHNhX21hc2s7CisJdW5zaWduZWQgbG9uZyBzYV9mbGFnczsKKwl2b2lkICgqc2FfcmVzdG9yZXIpKHZvaWQpOworfTsKKworc3RydWN0IHNpZ2FjdGlvbiB7CisJX19zaWdoYW5kbGVyX3Qgc2FfaGFuZGxlcjsKKwl1bnNpZ25lZCBsb25nIHNhX2ZsYWdzOworCXZvaWQgKCpzYV9yZXN0b3Jlcikodm9pZCk7CisJc2lnc2V0X3Qgc2FfbWFzazsJCS8qIG1hc2sgbGFzdCBmb3IgZXh0ZW5zaWJpbGl0eSAqLworfTsKKworc3RydWN0IGtfc2lnYWN0aW9uIHsKKwlzdHJ1Y3Qgc2lnYWN0aW9uIHNhOworfTsKKyNlbHNlCisvKiBIZXJlIHdlIG11c3QgY2F0ZXIgdG8gbGliY3MgdGhhdCBwb2tlIGFib3V0IGluIGtlcm5lbCBoZWFkZXJzLiAgKi8KKworc3RydWN0IHNpZ2FjdGlvbiB7CisJdW5pb24geworCSAgX19zaWdoYW5kbGVyX3QgX3NhX2hhbmRsZXI7CisJICB2b2lkICgqX3NhX3NpZ2FjdGlvbikoaW50LCBzdHJ1Y3Qgc2lnaW5mbyAqLCB2b2lkICopOworCX0gX3U7CisJc2lnc2V0X3Qgc2FfbWFzazsKKwl1bnNpZ25lZCBsb25nIHNhX2ZsYWdzOworCXZvaWQgKCpzYV9yZXN0b3Jlcikodm9pZCk7Cit9OworCisjZGVmaW5lIHNhX2hhbmRsZXIJX3UuX3NhX2hhbmRsZXIKKyNkZWZpbmUgc2Ffc2lnYWN0aW9uCV91Ll9zYV9zaWdhY3Rpb24KKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKwordHlwZWRlZiBzdHJ1Y3Qgc2lnYWx0c3RhY2sgeworCXZvaWQgKnNzX3NwOworCWludCBzc19mbGFnczsKKwlzaXplX3Qgc3Nfc2l6ZTsKK30gc3RhY2tfdDsKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGFzbS9zaWdjb250ZXh0Lmg+CisjdW5kZWYgX19IQVZFX0FSQ0hfU0lHX0JJVE9QUworCisjZGVmaW5lIHB0cmFjZV9zaWduYWxfZGVsaXZlcihyZWdzLCBjb29raWUpIGRvIHsgfSB3aGlsZSAoMCkKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9IODMwMF9TSUdOQUxfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvc21wLmggYi9pbmNsdWRlL2FzbS1oODMwMC9zbXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTliZDdlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvc21wLmgKQEAgLTAsMCArMSBAQAorLyogbm90aGluZyByZXF1aXJlZCBoZXJlIHlldCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvc29ja2V0LmggYi9pbmNsdWRlL2FzbS1oODMwMC9zb2NrZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjMzYjg1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvc29ja2V0LmgKQEAgLTAsMCArMSw1MCBAQAorI2lmbmRlZiBfQVNNX1NPQ0tFVF9ICisjZGVmaW5lIF9BU01fU09DS0VUX0gKKworI2luY2x1ZGUgPGFzbS9zb2NraW9zLmg+CisKKy8qIEZvciBzZXRzb2Nrb3B0aW9ucygyKSAqLworI2RlZmluZSBTT0xfU09DS0VUCTEKKworI2RlZmluZSBTT19ERUJVRwkxCisjZGVmaW5lIFNPX1JFVVNFQUREUgkyCisjZGVmaW5lIFNPX1RZUEUJCTMKKyNkZWZpbmUgU09fRVJST1IJNAorI2RlZmluZSBTT19ET05UUk9VVEUJNQorI2RlZmluZSBTT19CUk9BRENBU1QJNgorI2RlZmluZSBTT19TTkRCVUYJNworI2RlZmluZSBTT19SQ1ZCVUYJOAorI2RlZmluZSBTT19LRUVQQUxJVkUJOQorI2RlZmluZSBTT19PT0JJTkxJTkUJMTAKKyNkZWZpbmUgU09fTk9fQ0hFQ0sJMTEKKyNkZWZpbmUgU09fUFJJT1JJVFkJMTIKKyNkZWZpbmUgU09fTElOR0VSCTEzCisjZGVmaW5lIFNPX0JTRENPTVBBVAkxNAorLyogVG8gYWRkIDojZGVmaW5lIFNPX1JFVVNFUE9SVCAxNSAqLworI2RlZmluZSBTT19QQVNTQ1JFRAkxNgorI2RlZmluZSBTT19QRUVSQ1JFRAkxNworI2RlZmluZSBTT19SQ1ZMT1dBVAkxOAorI2RlZmluZSBTT19TTkRMT1dBVAkxOQorI2RlZmluZSBTT19SQ1ZUSU1FTwkyMAorI2RlZmluZSBTT19TTkRUSU1FTwkyMQorCisvKiBTZWN1cml0eSBsZXZlbHMgLSBhcyBwZXIgTlJMIElQdjYgLSBkb24ndCBhY3R1YWxseSBkbyBhbnl0aGluZyAqLworI2RlZmluZSBTT19TRUNVUklUWV9BVVRIRU5USUNBVElPTgkJMjIKKyNkZWZpbmUgU09fU0VDVVJJVFlfRU5DUllQVElPTl9UUkFOU1BPUlQJMjMKKyNkZWZpbmUgU09fU0VDVVJJVFlfRU5DUllQVElPTl9ORVRXT1JLCQkyNAorCisjZGVmaW5lIFNPX0JJTkRUT0RFVklDRQkyNQorCisvKiBTb2NrZXQgZmlsdGVyaW5nICovCisjZGVmaW5lIFNPX0FUVEFDSF9GSUxURVIgICAgICAgIDI2CisjZGVmaW5lIFNPX0RFVEFDSF9GSUxURVIgICAgICAgIDI3CisKKyNkZWZpbmUgU09fUEVFUk5BTUUgICAgICAgICAgICAgMjgKKyNkZWZpbmUgU09fVElNRVNUQU1QCQkyOQorI2RlZmluZSBTQ01fVElNRVNUQU1QCQlTT19USU1FU1RBTVAKKworI2RlZmluZSBTT19BQ0NFUFRDT05OCQkzMAorCisjZGVmaW5lIFNPX1BFRVJTRUMJCTMxCisKKyNlbmRpZiAvKiBfQVNNX1NPQ0tFVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1oODMwMC9zb2NraW9zLmggYi9pbmNsdWRlL2FzbS1oODMwMC9zb2NraW9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDAwNWQ5NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWg4MzAwL3NvY2tpb3MuaApAQCAtMCwwICsxLDEyIEBACisjaWZuZGVmIF9fQVJDSF9IODMwMF9TT0NLSU9TX18KKyNkZWZpbmUgX19BUkNIX0g4MzAwX1NPQ0tJT1NfXworCisvKiBTb2NrZXQtbGV2ZWwgSS9PIGNvbnRyb2wgY2FsbHMuICovCisjZGVmaW5lIEZJT1NFVE9XTiAJMHg4OTAxCisjZGVmaW5lIFNJT0NTUEdSUAkweDg5MDIKKyNkZWZpbmUgRklPR0VUT1dOCTB4ODkwMworI2RlZmluZSBTSU9DR1BHUlAJMHg4OTA0CisjZGVmaW5lIFNJT0NBVE1BUksJMHg4OTA1CisjZGVmaW5lIFNJT0NHU1RBTVAJMHg4OTA2CQkvKiBHZXQgc3RhbXAgKi8KKworI2VuZGlmIC8qIF9fQVJDSF9IODMwMF9TT0NLSU9TX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWg4MzAwL3NwaW5sb2NrLmggYi9pbmNsdWRlL2FzbS1oODMwMC9zcGlubG9jay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1NDA3ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC9zcGlubG9jay5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfX0g4MzAwX1NQSU5MT0NLX0gKKyNkZWZpbmUgX19IODMwMF9TUElOTE9DS19ICisKKyNlcnJvciAiSDgvMzAwIGRvZXNuJ3QgZG8gU01QIHlldCIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1oODMwMC9zdGF0LmggYi9pbmNsdWRlL2FzbS1oODMwMC9zdGF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJjM2NjMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWg4MzAwL3N0YXQuaApAQCAtMCwwICsxLDc4IEBACisjaWZuZGVmIF9IODMwMF9TVEFUX0gKKyNkZWZpbmUgX0g4MzAwX1NUQVRfSAorCitzdHJ1Y3QgX19vbGRfa2VybmVsX3N0YXQgeworCXVuc2lnbmVkIHNob3J0IHN0X2RldjsKKwl1bnNpZ25lZCBzaG9ydCBzdF9pbm87CisJdW5zaWduZWQgc2hvcnQgc3RfbW9kZTsKKwl1bnNpZ25lZCBzaG9ydCBzdF9ubGluazsKKwl1bnNpZ25lZCBzaG9ydCBzdF91aWQ7CisJdW5zaWduZWQgc2hvcnQgc3RfZ2lkOworCXVuc2lnbmVkIHNob3J0IHN0X3JkZXY7CisJdW5zaWduZWQgbG9uZyAgc3Rfc2l6ZTsKKwl1bnNpZ25lZCBsb25nICBzdF9hdGltZTsKKwl1bnNpZ25lZCBsb25nICBzdF9tdGltZTsKKwl1bnNpZ25lZCBsb25nICBzdF9jdGltZTsKK307CisKK3N0cnVjdCBzdGF0IHsKKwl1bnNpZ25lZCBzaG9ydCBzdF9kZXY7CisJdW5zaWduZWQgc2hvcnQgX19wYWQxOworCXVuc2lnbmVkIGxvbmcgc3RfaW5vOworCXVuc2lnbmVkIHNob3J0IHN0X21vZGU7CisJdW5zaWduZWQgc2hvcnQgc3Rfbmxpbms7CisJdW5zaWduZWQgc2hvcnQgc3RfdWlkOworCXVuc2lnbmVkIHNob3J0IHN0X2dpZDsKKwl1bnNpZ25lZCBzaG9ydCBzdF9yZGV2OworCXVuc2lnbmVkIHNob3J0IF9fcGFkMjsKKwl1bnNpZ25lZCBsb25nICBzdF9zaXplOworCXVuc2lnbmVkIGxvbmcgIHN0X2Jsa3NpemU7CisJdW5zaWduZWQgbG9uZyAgc3RfYmxvY2tzOworCXVuc2lnbmVkIGxvbmcgIHN0X2F0aW1lOworCXVuc2lnbmVkIGxvbmcgIF9fdW51c2VkMTsKKwl1bnNpZ25lZCBsb25nICBzdF9tdGltZTsKKwl1bnNpZ25lZCBsb25nICBfX3VudXNlZDI7CisJdW5zaWduZWQgbG9uZyAgc3RfY3RpbWU7CisJdW5zaWduZWQgbG9uZyAgX191bnVzZWQzOworCXVuc2lnbmVkIGxvbmcgIF9fdW51c2VkNDsKKwl1bnNpZ25lZCBsb25nICBfX3VudXNlZDU7Cit9OworCisvKiBUaGlzIG1hdGNoZXMgc3RydWN0IHN0YXQ2NCBpbiBnbGliYzIuMSwgaGVuY2UgdGhlIGFic29sdXRlbHkKKyAqIGluc2FuZSBhbW91bnRzIG9mIHBhZGRpbmcgYXJvdW5kIGRldl90J3MuCisgKi8KK3N0cnVjdCBzdGF0NjQgeworCXVuc2lnbmVkIGxvbmcgbG9uZwlzdF9kZXY7CisJdW5zaWduZWQgY2hhcglfX3BhZDFbMl07CisKKyNkZWZpbmUgU1RBVDY0X0hBU19CUk9LRU5fU1RfSU5PCTEKKwl1bnNpZ25lZCBsb25nCV9fc3RfaW5vOworCisJdW5zaWduZWQgaW50CXN0X21vZGU7CisJdW5zaWduZWQgaW50CXN0X25saW5rOworCisJdW5zaWduZWQgbG9uZwlzdF91aWQ7CisJdW5zaWduZWQgbG9uZwlzdF9naWQ7CisKKwl1bnNpZ25lZCBsb25nIGxvbmcJc3RfcmRldjsKKwl1bnNpZ25lZCBjaGFyCV9fcGFkM1syXTsKKworCWxvbmcgbG9uZwlzdF9zaXplOworCXVuc2lnbmVkIGxvbmcJc3RfYmxrc2l6ZTsKKworCXVuc2lnbmVkIGxvbmcJX19wYWQ0OwkJLyogZnV0dXJlIHBvc3NpYmxlIHN0X2Jsb2NrcyBoaWdoIGJpdHMgKi8KKwl1bnNpZ25lZCBsb25nCXN0X2Jsb2NrczsJLyogTnVtYmVyIDUxMi1ieXRlIGJsb2NrcyBhbGxvY2F0ZWQuICovCisKKwl1bnNpZ25lZCBsb25nCXN0X2F0aW1lOworCXVuc2lnbmVkIGxvbmcJc3RfYXRpbWVfbnNlYzsKKworCXVuc2lnbmVkIGxvbmcJc3RfbXRpbWU7CisJdW5zaWduZWQgbG9uZwlzdF9tdGltZV9uc2VjOworCisJdW5zaWduZWQgbG9uZwlzdF9jdGltZTsKKwl1bnNpZ25lZCBsb25nCXN0X2N0aW1lX25zZWM7CisKKwl1bnNpZ25lZCBsb25nIGxvbmcJc3RfaW5vOworfTsKKworI2VuZGlmIC8qIF9IODMwMF9TVEFUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWg4MzAwL3N0YXRmcy5oIGIvaW5jbHVkZS9hc20taDgzMDAvc3RhdGZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk2ZWZhNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWg4MzAwL3N0YXRmcy5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfSDgzMDBfU1RBVEZTX0gKKyNkZWZpbmUgX0g4MzAwX1NUQVRGU19ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zdGF0ZnMuaD4KKworI2VuZGlmIC8qIF9IODMwMF9TVEFURlNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvc3RyaW5nLmggYi9pbmNsdWRlL2FzbS1oODMwMC9zdHJpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTUwMzQ4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvc3RyaW5nLmgKQEAgLTAsMCArMSw0NCBAQAorI2lmbmRlZiBfSDgzMDBfU1RSSU5HX0hfCisjZGVmaW5lIF9IODMwMF9TVFJJTkdfSF8KKworI2lmZGVmIF9fS0VSTkVMX18gLyogb25seSBzZXQgdGhlc2UgdXAgZm9yIGtlcm5lbCBjb2RlICovCisKKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorCisjZGVmaW5lIF9fSEFWRV9BUkNIX01FTVNFVAorZXh0ZXJuIHZvaWQgKiBtZW1zZXQodm9pZCAqIHMsIGludCBjLCBzaXplX3QgY291bnQpOworCisjZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNQWQorZXh0ZXJuIHZvaWQgKiBtZW1jcHkodm9pZCAqZCwgY29uc3Qgdm9pZCAqcywgc2l6ZV90IGNvdW50KTsKKworI2Vsc2UgLyogS0VSTkVMICovCisKKy8qCisgKglsZXQgdXNlciBsaWJyYXJpZXMgZGVhbCB3aXRoIHRoZXNlLAorICoJSU1ITyB0aGUga2VybmVsIGhhcyBubyBwbGFjZSBkZWZpbmluZyB0aGVzZSBmdW5jdGlvbnMgZm9yIHVzZXIgYXBwcworICovCisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSQ1BZIDEKKyNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSTkNQWSAxCisjZGVmaW5lIF9fSEFWRV9BUkNIX1NUUkNBVCAxCisjZGVmaW5lIF9fSEFWRV9BUkNIX1NUUk5DQVQgMQorI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJDTVAgMQorI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJOQ01QIDEKKyNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSTklDTVAgMQorI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJDSFIgMQorI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJSQ0hSIDEKKyNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSU1RSIDEKKyNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSTEVOIDEKKyNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSTkxFTiAxCisjZGVmaW5lIF9fSEFWRV9BUkNIX01FTVNFVCAxCisjZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNQWSAxCisjZGVmaW5lIF9fSEFWRV9BUkNIX01FTU1PVkUgMQorI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1TQ0FOIDEKKyNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNQ01QIDEKKyNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNQ0hSIDEKKyNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSVE9LIDEKKworI2VuZGlmIC8qIEtFUk5FTCAqLworCisjZW5kaWYgLyogX002OEtfU1RSSU5HX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1oODMwMC9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLWg4MzAwL3N5c3RlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmZTk2YzcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC9zeXN0ZW0uaApAQCAtMCwwICsxLDE0OSBAQAorI2lmbmRlZiBfSDgzMDBfU1lTVEVNX0gKKyNkZWZpbmUgX0g4MzAwX1NZU1RFTV9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4gLyogZ2V0IGNvbmZpZ3VyYXRpb24gbWFjcm9zICovCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorCisjZGVmaW5lIHByZXBhcmVfdG9fc3dpdGNoKCkJZG8geyB9IHdoaWxlKDApCisKKy8qCisgKiBzd2l0Y2hfdG8obikgc2hvdWxkIHN3aXRjaCB0YXNrcyB0byB0YXNrIHB0ciwgZmlyc3QgY2hlY2tpbmcgdGhhdAorICogcHRyIGlzbid0IHRoZSBjdXJyZW50IHRhc2ssIGluIHdoaWNoIGNhc2UgaXQgZG9lcyBub3RoaW5nLiAgVGhpcworICogYWxzbyBjbGVhcnMgdGhlIFRTLWZsYWcgaWYgdGhlIHRhc2sgd2Ugc3dpdGNoZWQgdG8gaGFzIHVzZWQgdGhlCisgKiBtYXRoIGNvLXByb2Nlc3NvciBsYXRlc3QuCisgKi8KKy8qCisgKiBzd2l0Y2hfdG8oKSBzYXZlcyB0aGUgZXh0cmEgcmVnaXN0ZXJzLCB0aGF0IGFyZSBub3Qgc2F2ZWQKKyAqIGF1dG9tYXRpY2FsbHkgYnkgU0FWRV9TV0lUQ0hfU1RBQ0sgaW4gcmVzdW1lKCksIGllLiBkMC1kNSBhbmQKKyAqIGEwLWExLiBTb21lIG9mIHRoZXNlIGFyZSB1c2VkIGJ5IHNjaGVkdWxlKCkgYW5kIGl0cyBwcmVkZWNlc3NvcnMKKyAqIGFuZCBzbyB3ZSBtaWdodCBnZXQgc2VlIHVuZXhwZWN0ZWQgYmVoYXZpb3JzIHdoZW4gYSB0YXNrIHJldHVybnMKKyAqIHdpdGggdW5leHBlY3RlZCByZWdpc3RlciB2YWx1ZXMuCisgKgorICogc3lzY2FsbCBzdG9yZXMgdGhlc2UgcmVnaXN0ZXJzIGl0c2VsZiBhbmQgbm9uZSBvZiB0aGVtIGFyZSB1c2VkCisgKiBieSBzeXNjYWxsIGFmdGVyIHRoZSBmdW5jdGlvbiBpbiB0aGUgc3lzY2FsbCBoYXMgYmVlbiBjYWxsZWQuCisgKgorICogQmV3YXJlIHRoYXQgcmVzdW1lIG5vdyBleHBlY3RzICpuZXh0IHRvIGJlIGluIGQxIGFuZCB0aGUgb2Zmc2V0IG9mCisgKiB0c3MgdG8gYmUgaW4gYTEuIFRoaXMgc2F2ZXMgYSBmZXcgaW5zdHJ1Y3Rpb25zIGFzIHdlIG5vIGxvbmdlciBoYXZlCisgKiB0byBwdXNoIHRoZW0gb250byB0aGUgc3RhY2sgYW5kIHJlYWQgdGhlbSBiYWNrIHJpZ2h0IGFmdGVyLgorICoKKyAqIDAyLzE3Lzk2IC0gSmVzIFNvcmVuc2VuIChqZHNAa29tLmF1Yy5kaykKKyAqCisgKiBDaGFuZ2VkIDk2LzA5LzE5IGJ5IEFuZHJlYXMgU2Nod2FiCisgKiBwYXNzIHByZXYgaW4gYTAsIG5leHQgaW4gYTEsIG9mZnNldCBvZiB0c3MgaW4gZDEsIGFuZCB3aGV0aGVyCisgKiB0aGUgbW0gc3RydWN0dXJlcyBhcmUgc2hhcmVkIGluIGQyICh0byBhdm9pZCBhdGMgZmx1c2hpbmcpLgorICoKKyAqIEg4LzMwMCBQb3J0aW5nIDIwMDIvMDkvMDQgWW9zaGlub3JpIFNhdG8KKyAqLworCithc21saW5rYWdlIHZvaWQgcmVzdW1lKHZvaWQpOworI2RlZmluZSBzd2l0Y2hfdG8ocHJldixuZXh0LGxhc3QpIHsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB2b2lkICpfbGFzdDsJCQkJCQkgICAgXAorICBfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCSAgICBcCisgIAkJCSJtb3YubAklMSwgZXIwXG5cdCIJCSAgICBcCisJCQkibW92LmwJJTIsIGVyMVxuXHQiCQkgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgIm1vdi5sICAlMywgZXIyXG5cdCIgICAgICAgICAgICAgICAgXAorCQkJImpzciBAX3Jlc3VtZVxuXHQiICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgIm1vdi5sICBlcjIsJTBcblx0IiAgICAgICAgICAgICAgICAgXAorCQkgICAgICAgOiAiPXIiIChfbGFzdCkJCQkgICAgXAorCQkgICAgICAgOiAiciIgKCYocHJldi0+dGhyZWFkKSksCQkgICAgXAorCQkJICJyIiAoJihuZXh0LT50aHJlYWQpKSwJCSAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgImciIChwcmV2KSAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSAgICAgICA6ICJjYyIsICJlcjAiLCAiZXIxIiwgImVyMiIsICJlcjMiKTsgXAorICAobGFzdCkgPSBfbGFzdDsgCQkJCQkgICAgXAorfQorCisjZGVmaW5lIF9fc3RpKCkgYXNtIHZvbGF0aWxlICgiYW5kYyAjMHg3ZixjY3IiKQorI2RlZmluZSBfX2NsaSgpIGFzbSB2b2xhdGlsZSAoIm9yYyAgIzB4ODAsY2NyIikKKworI2RlZmluZSBfX3NhdmVfZmxhZ3MoeCkgXAorICAgICAgIGFzbSB2b2xhdGlsZSAoInN0YyBjY3IsJXcwIjoiPXIiICh4KSkKKworI2RlZmluZSBfX3Jlc3RvcmVfZmxhZ3MoeCkgXAorICAgICAgIGFzbSB2b2xhdGlsZSAoImxkYyAldzAsY2NyIjogOiJyIiAoeCkpCisKKyNkZWZpbmUJaXJxc19kaXNhYmxlZCgpCQkJXAorKHsJCQkJCVwKKwl1bnNpZ25lZCBjaGFyIGZsYWdzOwkJXAorCV9fc2F2ZV9mbGFncyhmbGFncyk7CSAgICAgICAgXAorCSgoZmxhZ3MgJiAweDgwKSA9PSAweDgwKTsJXAorfSkKKworI2RlZmluZSBpcmV0KCkgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJydGUiOiA6IDoibWVtb3J5IiwgInNwIiwgImNjIikKKworLyogRm9yIHNwaW5sb2NrcyBldGMgKi8KKyNkZWZpbmUgbG9jYWxfaXJxX2Rpc2FibGUoKQlfX2NsaSgpCisjZGVmaW5lIGxvY2FsX2lycV9lbmFibGUoKSAgICAgIF9fc3RpKCkKKyNkZWZpbmUgbG9jYWxfaXJxX3NhdmUoeCkJKHsgX19zYXZlX2ZsYWdzKHgpOyBsb2NhbF9pcnFfZGlzYWJsZSgpOyB9KQorI2RlZmluZSBsb2NhbF9pcnFfcmVzdG9yZSh4KQlfX3Jlc3RvcmVfZmxhZ3MoeCkKKyNkZWZpbmUgbG9jYWxfc2F2ZV9mbGFncyh4KSAgICAgX19zYXZlX2ZsYWdzKHgpCisKKy8qCisgKiBGb3JjZSBzdHJpY3QgQ1BVIG9yZGVyaW5nLgorICogTm90IHJlYWxseSByZXF1aXJlZCBvbiBIOC4uLgorICovCisjZGVmaW5lIG5vcCgpICBhc20gdm9sYXRpbGUgKCJub3AiOjopCisjZGVmaW5lIG1iKCkgICBhc20gdm9sYXRpbGUgKCIiICAgOiA6IDoibWVtb3J5IikKKyNkZWZpbmUgcm1iKCkgIGFzbSB2b2xhdGlsZSAoIiIgICA6IDogOiJtZW1vcnkiKQorI2RlZmluZSB3bWIoKSAgYXNtIHZvbGF0aWxlICgiIiAgIDogOiA6Im1lbW9yeSIpCisjZGVmaW5lIHNldF9ybWIodmFyLCB2YWx1ZSkgICAgZG8geyB4Y2hnKCZ2YXIsIHZhbHVlKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgc2V0X21iKHZhciwgdmFsdWUpICAgICBzZXRfcm1iKHZhciwgdmFsdWUpCisjZGVmaW5lIHNldF93bWIodmFyLCB2YWx1ZSkgICAgZG8geyB2YXIgPSB2YWx1ZTsgd21iKCk7IH0gd2hpbGUgKDApCisKKyNpZmRlZiBDT05GSUdfU01QCisjZGVmaW5lIHNtcF9tYigpCW1iKCkKKyNkZWZpbmUgc21wX3JtYigpCXJtYigpCisjZGVmaW5lIHNtcF93bWIoKQl3bWIoKQorI2RlZmluZSBzbXBfcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQlyZWFkX2JhcnJpZXJfZGVwZW5kcygpCisjZWxzZQorI2RlZmluZSBzbXBfbWIoKQliYXJyaWVyKCkKKyNkZWZpbmUgc21wX3JtYigpCWJhcnJpZXIoKQorI2RlZmluZSBzbXBfd21iKCkJYmFycmllcigpCisjZGVmaW5lIHNtcF9yZWFkX2JhcnJpZXJfZGVwZW5kcygpCWRvIHsgfSB3aGlsZSgwKQorI2VuZGlmCisKKyNkZWZpbmUgeGNoZyhwdHIseCkgKChfX3R5cGVvZl9fKCoocHRyKSkpX194Y2hnKCh1bnNpZ25lZCBsb25nKSh4KSwocHRyKSxzaXplb2YoKihwdHIpKSkpCisjZGVmaW5lIHRhcyhwdHIpICh4Y2hnKChwdHIpLDEpKQorCitzdHJ1Y3QgX194Y2hnX2R1bW15IHsgdW5zaWduZWQgbG9uZyBhWzEwMF07IH07CisjZGVmaW5lIF9feGcoeCkgKCh2b2xhdGlsZSBzdHJ1Y3QgX194Y2hnX2R1bW15ICopKHgpKQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX194Y2hnKHVuc2lnbmVkIGxvbmcgeCwgdm9sYXRpbGUgdm9pZCAqIHB0ciwgaW50IHNpemUpCit7CisgIHVuc2lnbmVkIGxvbmcgdG1wLCBmbGFnczsKKworICBsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKyAgc3dpdGNoIChzaXplKSB7CisgIGNhc2UgMToKKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXworICAgICgibW92LmIgJTIsJTBcblx0IgorICAgICAibW92LmIgJTEsJTIiCisgICAgOiAiPSZyIiAodG1wKSA6ICJyIiAoeCksICJtIiAoKl9feGcocHRyKSkgOiAibWVtb3J5Iik7CisgICAgYnJlYWs7CisgIGNhc2UgMjoKKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXworICAgICgibW92LncgJTIsJTBcblx0IgorICAgICAibW92LncgJTEsJTIiCisgICAgOiAiPSZyIiAodG1wKSA6ICJyIiAoeCksICJtIiAoKl9feGcocHRyKSkgOiAibWVtb3J5Iik7CisgICAgYnJlYWs7CisgIGNhc2UgNDoKKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXworICAgICgibW92LmwgJTIsJTBcblx0IgorICAgICAibW92LmwgJTEsJTIiCisgICAgOiAiPSZyIiAodG1wKSA6ICJyIiAoeCksICJtIiAoKl9feGcocHRyKSkgOiAibWVtb3J5Iik7CisgICAgYnJlYWs7CisgIGRlZmF1bHQ6CisgICAgdG1wID0gMDsJICAKKyAgfQorICBsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisgIHJldHVybiB0bXA7Cit9CisKKyNkZWZpbmUgSEFSRF9SRVNFVF9OT1coKSAoewkJXAorICAgICAgICBsb2NhbF9pcnFfZGlzYWJsZSgpOwkJXAorICAgICAgICBhc20oImptcCBAQDAiKTsJCQlcCit9KQorCisjZGVmaW5lIGFyY2hfYWxpZ25fc3RhY2soeCkgKHgpCisKKyNlbmRpZiAvKiBfSDgzMDBfU1lTVEVNX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWg4MzAwL3RhcmdldF90aW1lLmggYi9pbmNsdWRlL2FzbS1oODMwMC90YXJnZXRfdGltZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmMmE5YWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC90YXJnZXRfdGltZS5oCkBAIC0wLDAgKzEsNCBAQAorZXh0ZXJuIGludCBwbGF0Zm9ybV90aW1lcl9zZXR1cCh2b2lkICgqdGltZXJfaW50KShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKikpOworZXh0ZXJuIHZvaWQgcGxhdGZvcm1fdGltZXJfZW9pKHZvaWQpOworZXh0ZXJuIHZvaWQgcGxhdGZvcm1fZ2V0dG9kKHVuc2lnbmVkIGludCAqeWVhciwgdW5zaWduZWQgaW50ICptb24sIHVuc2lnbmVkIGludCAqZGF5LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmhvdXIsIHVuc2lnbmVkIGludCAqbWluLCB1bnNpZ25lZCBpbnQgKnNlYyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1oODMwMC90ZXJtYml0cy5oIGIvaW5jbHVkZS9hc20taDgzMDAvdGVybWJpdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTY5YWUwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvdGVybWJpdHMuaApAQCAtMCwwICsxLDE3NSBAQAorI2lmbmRlZiBfX0FSQ0hfSDgzMDBfVEVSTUJJVFNfSF9fCisjZGVmaW5lIF9fQVJDSF9IODMwMF9URVJNQklUU19IX18KKworI2luY2x1ZGUgPGxpbnV4L3Bvc2l4X3R5cGVzLmg+CisKK3R5cGVkZWYgdW5zaWduZWQgY2hhcgljY190OwordHlwZWRlZiB1bnNpZ25lZCBpbnQJc3BlZWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50CXRjZmxhZ190OworCisjZGVmaW5lIE5DQ1MgMTkKK3N0cnVjdCB0ZXJtaW9zIHsKKwl0Y2ZsYWdfdCBjX2lmbGFnOwkJLyogaW5wdXQgbW9kZSBmbGFncyAqLworCXRjZmxhZ190IGNfb2ZsYWc7CQkvKiBvdXRwdXQgbW9kZSBmbGFncyAqLworCXRjZmxhZ190IGNfY2ZsYWc7CQkvKiBjb250cm9sIG1vZGUgZmxhZ3MgKi8KKwl0Y2ZsYWdfdCBjX2xmbGFnOwkJLyogbG9jYWwgbW9kZSBmbGFncyAqLworCWNjX3QgY19saW5lOwkJCS8qIGxpbmUgZGlzY2lwbGluZSAqLworCWNjX3QgY19jY1tOQ0NTXTsJCS8qIGNvbnRyb2wgY2hhcmFjdGVycyAqLworfTsKKworLyogY19jYyBjaGFyYWN0ZXJzICovCisjZGVmaW5lIFZJTlRSIDAKKyNkZWZpbmUgVlFVSVQgMQorI2RlZmluZSBWRVJBU0UgMgorI2RlZmluZSBWS0lMTCAzCisjZGVmaW5lIFZFT0YgNAorI2RlZmluZSBWVElNRSA1CisjZGVmaW5lIFZNSU4gNgorI2RlZmluZSBWU1dUQyA3CisjZGVmaW5lIFZTVEFSVCA4CisjZGVmaW5lIFZTVE9QIDkKKyNkZWZpbmUgVlNVU1AgMTAKKyNkZWZpbmUgVkVPTCAxMQorI2RlZmluZSBWUkVQUklOVCAxMgorI2RlZmluZSBWRElTQ0FSRCAxMworI2RlZmluZSBWV0VSQVNFIDE0CisjZGVmaW5lIFZMTkVYVCAxNQorI2RlZmluZSBWRU9MMiAxNgorCisKKy8qIGNfaWZsYWcgYml0cyAqLworI2RlZmluZSBJR05CUksJMDAwMDAwMQorI2RlZmluZSBCUktJTlQJMDAwMDAwMgorI2RlZmluZSBJR05QQVIJMDAwMDAwNAorI2RlZmluZSBQQVJNUksJMDAwMDAxMAorI2RlZmluZSBJTlBDSwkwMDAwMDIwCisjZGVmaW5lIElTVFJJUAkwMDAwMDQwCisjZGVmaW5lIElOTENSCTAwMDAxMDAKKyNkZWZpbmUgSUdOQ1IJMDAwMDIwMAorI2RlZmluZSBJQ1JOTAkwMDAwNDAwCisjZGVmaW5lIElVQ0xDCTAwMDEwMDAKKyNkZWZpbmUgSVhPTgkwMDAyMDAwCisjZGVmaW5lIElYQU5ZCTAwMDQwMDAKKyNkZWZpbmUgSVhPRkYJMDAxMDAwMAorI2RlZmluZSBJTUFYQkVMCTAwMjAwMDAKKyNkZWZpbmUgSVVURjgJMDA0MDAwMAorCisvKiBjX29mbGFnIGJpdHMgKi8KKyNkZWZpbmUgT1BPU1QJMDAwMDAwMQorI2RlZmluZSBPTENVQwkwMDAwMDAyCisjZGVmaW5lIE9OTENSCTAwMDAwMDQKKyNkZWZpbmUgT0NSTkwJMDAwMDAxMAorI2RlZmluZSBPTk9DUgkwMDAwMDIwCisjZGVmaW5lIE9OTFJFVAkwMDAwMDQwCisjZGVmaW5lIE9GSUxMCTAwMDAxMDAKKyNkZWZpbmUgT0ZERUwJMDAwMDIwMAorI2RlZmluZSBOTERMWQkwMDAwNDAwCisjZGVmaW5lICAgTkwwCTAwMDAwMDAKKyNkZWZpbmUgICBOTDEJMDAwMDQwMAorI2RlZmluZSBDUkRMWQkwMDAzMDAwCisjZGVmaW5lICAgQ1IwCTAwMDAwMDAKKyNkZWZpbmUgICBDUjEJMDAwMTAwMAorI2RlZmluZSAgIENSMgkwMDAyMDAwCisjZGVmaW5lICAgQ1IzCTAwMDMwMDAKKyNkZWZpbmUgVEFCRExZCTAwMTQwMDAKKyNkZWZpbmUgICBUQUIwCTAwMDAwMDAKKyNkZWZpbmUgICBUQUIxCTAwMDQwMDAKKyNkZWZpbmUgICBUQUIyCTAwMTAwMDAKKyNkZWZpbmUgICBUQUIzCTAwMTQwMDAKKyNkZWZpbmUgICBYVEFCUwkwMDE0MDAwCisjZGVmaW5lIEJTRExZCTAwMjAwMDAKKyNkZWZpbmUgICBCUzAJMDAwMDAwMAorI2RlZmluZSAgIEJTMQkwMDIwMDAwCisjZGVmaW5lIFZURExZCTAwNDAwMDAKKyNkZWZpbmUgICBWVDAJMDAwMDAwMAorI2RlZmluZSAgIFZUMQkwMDQwMDAwCisjZGVmaW5lIEZGRExZCTAxMDAwMDAKKyNkZWZpbmUgICBGRjAJMDAwMDAwMAorI2RlZmluZSAgIEZGMQkwMTAwMDAwCisKKy8qIGNfY2ZsYWcgYml0IG1lYW5pbmcgKi8KKyNkZWZpbmUgQ0JBVUQJMDAxMDAxNworI2RlZmluZSAgQjAJMDAwMDAwMAkJLyogaGFuZyB1cCAqLworI2RlZmluZSAgQjUwCTAwMDAwMDEKKyNkZWZpbmUgIEI3NQkwMDAwMDAyCisjZGVmaW5lICBCMTEwCTAwMDAwMDMKKyNkZWZpbmUgIEIxMzQJMDAwMDAwNAorI2RlZmluZSAgQjE1MAkwMDAwMDA1CisjZGVmaW5lICBCMjAwCTAwMDAwMDYKKyNkZWZpbmUgIEIzMDAJMDAwMDAwNworI2RlZmluZSAgQjYwMAkwMDAwMDEwCisjZGVmaW5lICBCMTIwMAkwMDAwMDExCisjZGVmaW5lICBCMTgwMAkwMDAwMDEyCisjZGVmaW5lICBCMjQwMAkwMDAwMDEzCisjZGVmaW5lICBCNDgwMAkwMDAwMDE0CisjZGVmaW5lICBCOTYwMAkwMDAwMDE1CisjZGVmaW5lICBCMTkyMDAJMDAwMDAxNgorI2RlZmluZSAgQjM4NDAwCTAwMDAwMTcKKyNkZWZpbmUgRVhUQSBCMTkyMDAKKyNkZWZpbmUgRVhUQiBCMzg0MDAKKyNkZWZpbmUgQ1NJWkUJMDAwMDA2MAorI2RlZmluZSAgIENTNQkwMDAwMDAwCisjZGVmaW5lICAgQ1M2CTAwMDAwMjAKKyNkZWZpbmUgICBDUzcJMDAwMDA0MAorI2RlZmluZSAgIENTOAkwMDAwMDYwCisjZGVmaW5lIENTVE9QQgkwMDAwMTAwCisjZGVmaW5lIENSRUFECTAwMDAyMDAKKyNkZWZpbmUgUEFSRU5CCTAwMDA0MDAKKyNkZWZpbmUgUEFST0RECTAwMDEwMDAKKyNkZWZpbmUgSFVQQ0wJMDAwMjAwMAorI2RlZmluZSBDTE9DQUwJMDAwNDAwMAorI2RlZmluZSBDQkFVREVYIDAwMTAwMDAKKyNkZWZpbmUgICAgQjU3NjAwIDAwMTAwMDEKKyNkZWZpbmUgICBCMTE1MjAwIDAwMTAwMDIKKyNkZWZpbmUgICBCMjMwNDAwIDAwMTAwMDMKKyNkZWZpbmUgICBCNDYwODAwIDAwMTAwMDQKKyNkZWZpbmUgICBCNTAwMDAwIDAwMTAwMDUKKyNkZWZpbmUgICBCNTc2MDAwIDAwMTAwMDYKKyNkZWZpbmUgICBCOTIxNjAwIDAwMTAwMDcKKyNkZWZpbmUgIEIxMDAwMDAwIDAwMTAwMTAKKyNkZWZpbmUgIEIxMTUyMDAwIDAwMTAwMTEKKyNkZWZpbmUgIEIxNTAwMDAwIDAwMTAwMTIKKyNkZWZpbmUgIEIyMDAwMDAwIDAwMTAwMTMKKyNkZWZpbmUgIEIyNTAwMDAwIDAwMTAwMTQKKyNkZWZpbmUgIEIzMDAwMDAwIDAwMTAwMTUKKyNkZWZpbmUgIEIzNTAwMDAwIDAwMTAwMTYKKyNkZWZpbmUgIEI0MDAwMDAwIDAwMTAwMTcKKyNkZWZpbmUgQ0lCQVVECSAgMDAyMDAzNjAwMDAwCS8qIGlucHV0IGJhdWQgcmF0ZSAobm90IHVzZWQpICovCisjZGVmaW5lIENNU1BBUgkgIDAxMDAwMDAwMDAwMAkJLyogbWFyayBvciBzcGFjZSAoc3RpY2spIHBhcml0eSAqLworI2RlZmluZSBDUlRTQ1RTCSAgMDIwMDAwMDAwMDAwCQkvKiBmbG93IGNvbnRyb2wgKi8KKworLyogY19sZmxhZyBiaXRzICovCisjZGVmaW5lIElTSUcJMDAwMDAwMQorI2RlZmluZSBJQ0FOT04JMDAwMDAwMgorI2RlZmluZSBYQ0FTRQkwMDAwMDA0CisjZGVmaW5lIEVDSE8JMDAwMDAxMAorI2RlZmluZSBFQ0hPRQkwMDAwMDIwCisjZGVmaW5lIEVDSE9LCTAwMDAwNDAKKyNkZWZpbmUgRUNIT05MCTAwMDAxMDAKKyNkZWZpbmUgTk9GTFNICTAwMDAyMDAKKyNkZWZpbmUgVE9TVE9QCTAwMDA0MDAKKyNkZWZpbmUgRUNIT0NUTAkwMDAxMDAwCisjZGVmaW5lIEVDSE9QUlQJMDAwMjAwMAorI2RlZmluZSBFQ0hPS0UJMDAwNDAwMAorI2RlZmluZSBGTFVTSE8JMDAxMDAwMAorI2RlZmluZSBQRU5ESU4JMDA0MDAwMAorI2RlZmluZSBJRVhURU4JMDEwMDAwMAorCisKKy8qIHRjZmxvdygpIGFuZCBUQ1hPTkMgdXNlIHRoZXNlICovCisjZGVmaW5lCVRDT09GRgkJMAorI2RlZmluZQlUQ09PTgkJMQorI2RlZmluZQlUQ0lPRkYJCTIKKyNkZWZpbmUJVENJT04JCTMKKworLyogdGNmbHVzaCgpIGFuZCBUQ0ZMU0ggdXNlIHRoZXNlICovCisjZGVmaW5lCVRDSUZMVVNICTAKKyNkZWZpbmUJVENPRkxVU0gJMQorI2RlZmluZQlUQ0lPRkxVU0gJMgorCisvKiB0Y3NldGF0dHIgdXNlcyB0aGVzZSAqLworI2RlZmluZQlUQ1NBTk9XCQkwCisjZGVmaW5lCVRDU0FEUkFJTgkxCisjZGVmaW5lCVRDU0FGTFVTSAkyCisKKyNlbmRpZiAvKiBfX0FSQ0hfSDgzMDBfVEVSTUJJVFNfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1oODMwMC90ZXJtaW9zLmggYi9pbmNsdWRlL2FzbS1oODMwMC90ZXJtaW9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTIzMTlmOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWg4MzAwL3Rlcm1pb3MuaApAQCAtMCwwICsxLDEwOCBAQAorI2lmbmRlZiBfSDgzMDBfVEVSTUlPU19ICisjZGVmaW5lIF9IODMwMF9URVJNSU9TX0gKKworI2luY2x1ZGUgPGFzbS90ZXJtYml0cy5oPgorI2luY2x1ZGUgPGFzbS9pb2N0bHMuaD4KKyAKK3N0cnVjdCB3aW5zaXplIHsKKwl1bnNpZ25lZCBzaG9ydCB3c19yb3c7CisJdW5zaWduZWQgc2hvcnQgd3NfY29sOworCXVuc2lnbmVkIHNob3J0IHdzX3hwaXhlbDsKKwl1bnNpZ25lZCBzaG9ydCB3c195cGl4ZWw7Cit9OworCisjZGVmaW5lIE5DQyA4CitzdHJ1Y3QgdGVybWlvIHsKKwl1bnNpZ25lZCBzaG9ydCBjX2lmbGFnOwkJLyogaW5wdXQgbW9kZSBmbGFncyAqLworCXVuc2lnbmVkIHNob3J0IGNfb2ZsYWc7CQkvKiBvdXRwdXQgbW9kZSBmbGFncyAqLworCXVuc2lnbmVkIHNob3J0IGNfY2ZsYWc7CQkvKiBjb250cm9sIG1vZGUgZmxhZ3MgKi8KKwl1bnNpZ25lZCBzaG9ydCBjX2xmbGFnOwkJLyogbG9jYWwgbW9kZSBmbGFncyAqLworCXVuc2lnbmVkIGNoYXIgY19saW5lOwkJLyogbGluZSBkaXNjaXBsaW5lICovCisJdW5zaWduZWQgY2hhciBjX2NjW05DQ107CS8qIGNvbnRyb2wgY2hhcmFjdGVycyAqLworfTsKKworI2lmZGVmIF9fS0VSTkVMX18KKy8qCWludHI9XkMJCXF1aXQ9XnwJCWVyYXNlPWRlbAlraWxsPV5VCisJZW9mPV5ECQl2dGltZT1cMAl2bWluPVwxCQlzeHRjPVwwCisJc3RhcnQ9XlEJc3RvcD1eUwkJc3VzcD1eWgkJZW9sPVwwCisJcmVwcmludD1eUglkaXNjYXJkPV5VCXdlcmFzZT1eVwlsbmV4dD1eVgorCWVvbDI9XDAKKyovCisjZGVmaW5lIElOSVRfQ19DQyAiXDAwM1wwMzRcMTc3XDAyNVwwMDRcMFwxXDBcMDIxXDAyM1wwMzJcMFwwMjJcMDE3XDAyN1wwMjZcMCIKKyNlbmRpZgorCisvKiBtb2RlbSBsaW5lcyAqLworI2RlZmluZSBUSU9DTV9MRQkweDAwMQorI2RlZmluZSBUSU9DTV9EVFIJMHgwMDIKKyNkZWZpbmUgVElPQ01fUlRTCTB4MDA0CisjZGVmaW5lIFRJT0NNX1NUCTB4MDA4CisjZGVmaW5lIFRJT0NNX1NSCTB4MDEwCisjZGVmaW5lIFRJT0NNX0NUUwkweDAyMAorI2RlZmluZSBUSU9DTV9DQVIJMHgwNDAKKyNkZWZpbmUgVElPQ01fUk5HCTB4MDgwCisjZGVmaW5lIFRJT0NNX0RTUgkweDEwMAorI2RlZmluZSBUSU9DTV9DRAlUSU9DTV9DQVIKKyNkZWZpbmUgVElPQ01fUkkJVElPQ01fUk5HCisjZGVmaW5lIFRJT0NNX09VVDEJMHgyMDAwCisjZGVmaW5lIFRJT0NNX09VVDIJMHg0MDAwCisjZGVmaW5lIFRJT0NNX0xPT1AJMHg4MDAwCisKKy8qIGlvY3RsIChmZCwgVElPQ1NFUkdFVExTUiwgJnJlc3VsdCkgd2hlcmUgcmVzdWx0IG1heSBiZSBhcyBiZWxvdyAqLworCisvKiBsaW5lIGRpc2NpcGxpbmVzICovCisjZGVmaW5lIE5fVFRZCQkwCisjZGVmaW5lIE5fU0xJUAkJMQorI2RlZmluZSBOX01PVVNFCQkyCisjZGVmaW5lIE5fUFBQCQkzCisjZGVmaW5lIE5fU1RSSVAJCTQKKyNkZWZpbmUgTl9BWDI1CQk1CisjZGVmaW5lIE5fWDI1CQk2CS8qIFguMjUgYXN5bmMgKi8KKyNkZWZpbmUgTl82UEFDSwkJNworI2RlZmluZSBOX01BU0MJCTgJLyogUmVzZXJ2ZWQgZm9yIE1vYml0ZXggbW9kdWxlIDxrYXpAY2FmZS5uZXQ+ICovCisjZGVmaW5lIE5fUjM5NjQJCTkJLyogUmVzZXJ2ZWQgZm9yIFNpbWF0aWMgUjM5NjQgbW9kdWxlICovCisjZGVmaW5lIE5fUFJPRklCVVNfRkRMCTEwCS8qIFJlc2VydmVkIGZvciBQcm9maWJ1cyA8RGF2ZUBtdmhpLmNvbT4gKi8KKyNkZWZpbmUgTl9JUkRBCQkxMQkvKiBMaW51eCBJckRhIC0gaHR0cDovL2lyZGEuc291cmNlZm9yZ2UubmV0LyAqLworI2RlZmluZSBOX1NNU0JMT0NLCTEyCS8qIFNNUyBibG9jayBtb2RlIC0gZm9yIHRhbGtpbmcgdG8gR1NNIGRhdGEgY2FyZHMgYWJvdXQgU01TIG1lc3NhZ2VzICovCisjZGVmaW5lIE5fSERMQwkJMTMJLyogc3luY2hyb25vdXMgSERMQyAqLworI2RlZmluZSBOX1NZTkNfUFBQCTE0CisjZGVmaW5lIE5fSENJCQkxNSAgLyogQmx1ZXRvb3RoIEhDSSBVQVJUICovCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKy8qCisgKiBUcmFuc2xhdGUgYSAidGVybWlvIiBzdHJ1Y3R1cmUgaW50byBhICJ0ZXJtaW9zIi4gVWdoLgorICovCisjZGVmaW5lIHVzZXJfdGVybWlvX3RvX2tlcm5lbF90ZXJtaW9zKHRlcm1pb3MsIHRlcm1pbykgXAorKHsgXAorCXVuc2lnbmVkIHNob3J0IHRtcDsgXAorCWdldF91c2VyKHRtcCwgJih0ZXJtaW8pLT5jX2lmbGFnKTsgXAorCSh0ZXJtaW9zKS0+Y19pZmxhZyA9ICgweGZmZmYwMDAwICYgKCh0ZXJtaW9zKS0+Y19pZmxhZykpIHwgdG1wOyBcCisJZ2V0X3VzZXIodG1wLCAmKHRlcm1pbyktPmNfb2ZsYWcpOyBcCisJKHRlcm1pb3MpLT5jX29mbGFnID0gKDB4ZmZmZjAwMDAgJiAoKHRlcm1pb3MpLT5jX29mbGFnKSkgfCB0bXA7IFwKKwlnZXRfdXNlcih0bXAsICYodGVybWlvKS0+Y19jZmxhZyk7IFwKKwkodGVybWlvcyktPmNfY2ZsYWcgPSAoMHhmZmZmMDAwMCAmICgodGVybWlvcyktPmNfY2ZsYWcpKSB8IHRtcDsgXAorCWdldF91c2VyKHRtcCwgJih0ZXJtaW8pLT5jX2xmbGFnKTsgXAorCSh0ZXJtaW9zKS0+Y19sZmxhZyA9ICgweGZmZmYwMDAwICYgKCh0ZXJtaW9zKS0+Y19sZmxhZykpIHwgdG1wOyBcCisJZ2V0X3VzZXIoKHRlcm1pb3MpLT5jX2xpbmUsICYodGVybWlvKS0+Y19saW5lKTsgXAorCWNvcHlfZnJvbV91c2VyKCh0ZXJtaW9zKS0+Y19jYywgKHRlcm1pbyktPmNfY2MsIE5DQyk7IFwKK30pCisKKy8qCisgKiBUcmFuc2xhdGUgYSAidGVybWlvcyIgc3RydWN0dXJlIGludG8gYSAidGVybWlvIi4gVWdoLgorICovCisjZGVmaW5lIGtlcm5lbF90ZXJtaW9zX3RvX3VzZXJfdGVybWlvKHRlcm1pbywgdGVybWlvcykgXAorKHsgXAorCXB1dF91c2VyKCh0ZXJtaW9zKS0+Y19pZmxhZywgJih0ZXJtaW8pLT5jX2lmbGFnKTsgXAorCXB1dF91c2VyKCh0ZXJtaW9zKS0+Y19vZmxhZywgJih0ZXJtaW8pLT5jX29mbGFnKTsgXAorCXB1dF91c2VyKCh0ZXJtaW9zKS0+Y19jZmxhZywgJih0ZXJtaW8pLT5jX2NmbGFnKTsgXAorCXB1dF91c2VyKCh0ZXJtaW9zKS0+Y19sZmxhZywgJih0ZXJtaW8pLT5jX2xmbGFnKTsgXAorCXB1dF91c2VyKCh0ZXJtaW9zKS0+Y19saW5lLCAgJih0ZXJtaW8pLT5jX2xpbmUpOyBcCisJY29weV90b191c2VyKCh0ZXJtaW8pLT5jX2NjLCAodGVybWlvcyktPmNfY2MsIE5DQyk7IFwKK30pCisKKyNkZWZpbmUgdXNlcl90ZXJtaW9zX3RvX2tlcm5lbF90ZXJtaW9zKGssIHUpIGNvcHlfZnJvbV91c2VyKGssIHUsIHNpemVvZihzdHJ1Y3QgdGVybWlvcykpCisjZGVmaW5lIGtlcm5lbF90ZXJtaW9zX3RvX3VzZXJfdGVybWlvcyh1LCBrKSBjb3B5X3RvX3VzZXIodSwgaywgc2l6ZW9mKHN0cnVjdCB0ZXJtaW9zKSkKKworI2VuZGlmCS8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9IODMwMF9URVJNSU9TX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWg4MzAwL3RocmVhZF9pbmZvLmggYi9pbmNsdWRlL2FzbS1oODMwMC90aHJlYWRfaW5mby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwN2M5MzQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC90aHJlYWRfaW5mby5oCkBAIC0wLDAgKzEsMTA5IEBACisvKiB0aHJlYWRfaW5mby5oOiBoODMwMCBsb3ctbGV2ZWwgdGhyZWFkIGluZm9ybWF0aW9uCisgKiBhZGFwdGVkIGZyb20gdGhlIGkzODYgYW5kIFBQQyB2ZXJzaW9ucyBieSBZb3NoaW5vcmkgU2F0byA8eXNhdG9AdXNlcnMuc291cmNlZm9yZ2UuanA+CisgKgorICogQ29weXJpZ2h0IChDKSAyMDAyICBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQorICogLSBJbmNvcnBvcmF0aW5nIHN1Z2dlc3Rpb25zIG1hZGUgYnkgTGludXMgVG9ydmFsZHMgYW5kIERhdmUgTWlsbGVyCisgKi8KKworI2lmbmRlZiBfQVNNX1RIUkVBRF9JTkZPX0gKKyNkZWZpbmUgX0FTTV9USFJFQURfSU5GT19ICisKKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorCisjaWZkZWYgX19LRVJORUxfXworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisvKgorICogbG93IGxldmVsIHRhc2sgZGF0YS4KKyAqIElmIHlvdSBjaGFuZ2UgdGhpcywgY2hhbmdlIHRoZSBUSV8qIG9mZnNldHMgYmVsb3cgdG8gbWF0Y2guCisgKi8KK3N0cnVjdCB0aHJlYWRfaW5mbyB7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwkJLyogbWFpbiB0YXNrIHN0cnVjdHVyZSAqLworCXN0cnVjdCBleGVjX2RvbWFpbiAqZXhlY19kb21haW47CS8qIGV4ZWN1dGlvbiBkb21haW4gKi8KKwl1bnNpZ25lZCBsb25nCSAgIGZsYWdzOwkJLyogbG93IGxldmVsIGZsYWdzICovCisJaW50CQkgICBjcHU7CQkJLyogY3B1IHdlJ3JlIG9uICovCisJaW50CQkgICBwcmVlbXB0X2NvdW50OwkvKiAwID0+IHByZWVtcHRhYmxlLCA8MCA9PiBCVUcqLworCXN0cnVjdCByZXN0YXJ0X2Jsb2NrIHJlc3RhcnRfYmxvY2s7Cit9OworCisvKgorICogbWFjcm9zL2Z1bmN0aW9ucyBmb3IgZ2FpbmluZyBhY2Nlc3MgdG8gdGhlIHRocmVhZCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUKKyAqLworI2RlZmluZSBJTklUX1RIUkVBRF9JTkZPKHRzaykJCQlcCit7CQkJCQkJXAorCS50YXNrID0JCSZ0c2ssCQkJXAorCS5leGVjX2RvbWFpbiA9CSZkZWZhdWx0X2V4ZWNfZG9tYWluLAlcCisJLmZsYWdzID0JMCwJCQlcCisJLmNwdSA9CQkwLAkJCVwKKwkucHJlZW1wdF9jb3VudCA9IDEsCQkJXAorCS5yZXN0YXJ0X2Jsb2NrCT0gewkJCVwKKwkJLmZuID0gZG9fbm9fcmVzdGFydF9zeXNjYWxsLAlcCisJfSwJCQkJCVwKK30KKworI2RlZmluZSBpbml0X3RocmVhZF9pbmZvCShpbml0X3RocmVhZF91bmlvbi50aHJlYWRfaW5mbykKKyNkZWZpbmUgaW5pdF9zdGFjawkJKGluaXRfdGhyZWFkX3VuaW9uLnN0YWNrKQorCisKKy8qCisgKiBTaXplIG9mIGtlcm5lbCBzdGFjayBmb3IgZWFjaCBwcm9jZXNzLiBUaGlzIG11c3QgYmUgYSBwb3dlciBvZiAyLi4uCisgKi8KKyNkZWZpbmUgVEhSRUFEX1NJWkUJCTgxOTIJLyogMiBwYWdlcyAqLworCisKKy8qIGhvdyB0byBnZXQgdGhlIHRocmVhZCBpbmZvcm1hdGlvbiBzdHJ1Y3QgZnJvbSBDICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCB0aHJlYWRfaW5mbyAqY3VycmVudF90aHJlYWRfaW5mbyh2b2lkKQoreworCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGk7CisJX19hc21fXygKKwkJIm1vdi5sCXNwLCAlMCBcblx0IgorCQkiYW5kLmwJJTEsICUwIgorCQk6ICI9JnIiKHRpKQorCQk6ICJpIiAofihUSFJFQURfU0laRS0xKSkKKwkJKTsKKwlyZXR1cm4gdGk7Cit9CisKKy8qIHRocmVhZCBpbmZvcm1hdGlvbiBhbGxvY2F0aW9uICovCisjZGVmaW5lIGFsbG9jX3RocmVhZF9pbmZvKHRzaykgKChzdHJ1Y3QgdGhyZWFkX2luZm8gKikgXAorCQkJCV9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwgMSkpCisjZGVmaW5lIGZyZWVfdGhyZWFkX2luZm8odGkpCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpICh0aSksIDEpCisjZGVmaW5lIGdldF90aHJlYWRfaW5mbyh0aSkJZ2V0X3Rhc2tfc3RydWN0KCh0aSktPnRhc2spCisjZGVmaW5lIHB1dF90aHJlYWRfaW5mbyh0aSkJcHV0X3Rhc2tfc3RydWN0KCh0aSktPnRhc2spCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKy8qCisgKiBPZmZzZXRzIGluIHRocmVhZF9pbmZvIHN0cnVjdHVyZSwgdXNlZCBpbiBhc3NlbWJseSBjb2RlCisgKi8KKyNkZWZpbmUgVElfVEFTSwkJMAorI2RlZmluZSBUSV9FWEVDRE9NQUlOCTQKKyNkZWZpbmUgVElfRkxBR1MJOAorI2RlZmluZSBUSV9DUFUJCTEyCisjZGVmaW5lIFRJX1BSRV9DT1VOVAkxNgorCisjZGVmaW5lCVBSRUVNUFRfQUNUSVZFCTB4NDAwMDAwMAorCisvKgorICogdGhyZWFkIGluZm9ybWF0aW9uIGZsYWcgYml0IG51bWJlcnMKKyAqLworI2RlZmluZSBUSUZfU1lTQ0FMTF9UUkFDRQkwCS8qIHN5c2NhbGwgdHJhY2UgYWN0aXZlICovCisjZGVmaW5lIFRJRl9OT1RJRllfUkVTVU1FCTEJLyogcmVzdW1wdGlvbiBub3RpZmljYXRpb24gcmVxdWVzdGVkICovCisjZGVmaW5lIFRJRl9TSUdQRU5ESU5HCQkyCS8qIHNpZ25hbCBwZW5kaW5nICovCisjZGVmaW5lIFRJRl9ORUVEX1JFU0NIRUQJMwkvKiByZXNjaGVkdWxpbmcgbmVjZXNzYXJ5ICovCisjZGVmaW5lIFRJRl9QT0xMSU5HX05SRkxBRwk0CS8qIHRydWUgaWYgcG9sbF9pZGxlKCkgaXMgcG9sbGluZworCQkJCQkgICBUSUZfTkVFRF9SRVNDSEVEICovCisjZGVmaW5lIFRJRl9NRU1ESUUJCTUKKworLyogYXMgYWJvdmUsIGJ1dCBhcyBiaXQgdmFsdWVzICovCisjZGVmaW5lIF9USUZfU1lTQ0FMTF9UUkFDRQkoMTw8VElGX1NZU0NBTExfVFJBQ0UpCisjZGVmaW5lIF9USUZfTk9USUZZX1JFU1VNRQkoMTw8VElGX05PVElGWV9SRVNVTUUpCisjZGVmaW5lIF9USUZfU0lHUEVORElORwkJKDE8PFRJRl9TSUdQRU5ESU5HKQorI2RlZmluZSBfVElGX05FRURfUkVTQ0hFRAkoMTw8VElGX05FRURfUkVTQ0hFRCkKKyNkZWZpbmUgX1RJRl9QT0xMSU5HX05SRkxBRwkoMTw8VElGX1BPTExJTkdfTlJGTEFHKQorCisjZGVmaW5lIF9USUZfV09SS19NQVNLCQkweDAwMDBGRkZFCS8qIHdvcmsgdG8gZG8gb24gaW50ZXJydXB0L2V4Y2VwdGlvbiByZXR1cm4gKi8KKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9BU01fVEhSRUFEX0lORk9fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvdGltZXguaCBiL2luY2x1ZGUvYXNtLWg4MzAwL3RpbWV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA0MTMxNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWg4MzAwL3RpbWV4LmgKQEAgLTAsMCArMSwxOSBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLWg4MzAwL3RpbWV4LmgKKyAqCisgKiBIOC8zMDAgYXJjaGl0ZWN0dXJlIHRpbWV4IHNwZWNpZmljYXRpb25zCisgKi8KKyNpZm5kZWYgX0FTTV9IODMwMF9USU1FWF9ICisjZGVmaW5lIF9BU01fSDgzMDBfVElNRVhfSAorCisjZGVmaW5lIENMT0NLX1RJQ0tfUkFURSBDT05GSUdfQ1BVX0NMT0NLKjEwMDAvODE5MiAvKiBUaW1lciBpbnB1dCBmcmVxLiAqLworCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgY3ljbGVzX3Q7CitleHRlcm4gc2hvcnQgaDgzMDBfdGltZXJfY291bnQ7CisKK3N0YXRpYyBpbmxpbmUgY3ljbGVzX3QgZ2V0X2N5Y2xlcyh2b2lkKQoreworCXJldHVybiAwOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWg4MzAwL3RsYi5oIGIvaW5jbHVkZS9hc20taDgzMDAvdGxiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RlYTgwYWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC90bGIuaApAQCAtMCwwICsxLDIzIEBACisvKiAKKyAgaW5jbHVkZS9hc20taDgzMDAvdGxiLmggCisqLworCisjaWZuZGVmIF9fSDgzMDBfVExCX0hfXworI2RlZmluZSBfX0g4MzAwX1RMQl9IX18KKworI2RlZmluZSB0bGJfZmx1c2godGxiKQlkbyB7IH0gd2hpbGUoMCkKKworLyogCisgIGluY2x1ZGUvYXNtLWg4MzAwL3RsYi5oIAorKi8KKworI2lmbmRlZiBfX0g4MzAwX1RMQl9IX18KKyNkZWZpbmUgX19IODMwMF9UTEJfSF9fCisKKyNkZWZpbmUgdGxiX2ZsdXNoKHRsYikJZG8geyB9IHdoaWxlKDApCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy90bGIuaD4KKworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvdGxiZmx1c2guaCBiL2luY2x1ZGUvYXNtLWg4MzAwL3RsYmZsdXNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJkZmZiZWUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC90bGJmbHVzaC5oCkBAIC0wLDAgKzEsNjEgQEAKKyNpZm5kZWYgX0g4MzAwX1RMQkZMVVNIX0gKKyNkZWZpbmUgX0g4MzAwX1RMQkZMVVNIX0gKKworLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBMaW5lbywgRGF2aWQgTWNDdWxsb3VnaCA8ZGF2aWRtQHVjbGludXgub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDAwLTIwMDIsIEdyZWcgVW5nZXJlciA8Z2VyZ0BzbmFwZ2Vhci5jb20+CisgKi8KKworI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorCisvKgorICogZmx1c2ggYWxsIHVzZXItc3BhY2UgYXRjIGVudHJpZXMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2ZsdXNoX3RsYih2b2lkKQoreworCUJVRygpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19mbHVzaF90bGJfb25lKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlCVUcoKTsKK30KKworI2RlZmluZSBmbHVzaF90bGIoKSBfX2ZsdXNoX3RsYigpCisKKy8qCisgKiBmbHVzaCBhbGwgYXRjIGVudHJpZXMgKGJvdGgga2VybmVsIGFuZCB1c2VyLXNwYWNlIGVudHJpZXMpLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX2FsbCh2b2lkKQoreworCUJVRygpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCUJVRygpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlCVUcoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCQkgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwlCVUcoKTsKK30KKworZXh0ZXJuIGlubGluZSB2b2lkIGZsdXNoX3RsYl9rZXJuZWxfcGFnZSh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJQlVHKCk7Cit9CisKK2V4dGVybiBpbmxpbmUgdm9pZCBmbHVzaF90bGJfcGd0YWJsZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJQlVHKCk7Cit9CisKKyNlbmRpZiAvKiBfSDgzMDBfVExCRkxVU0hfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvdG9wb2xvZ3kuaCBiL2luY2x1ZGUvYXNtLWg4MzAwL3RvcG9sb2d5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRjMTIxOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWg4MzAwL3RvcG9sb2d5LmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9BU01fSDgzMDBfVE9QT0xPR1lfSAorI2RlZmluZSBfQVNNX0g4MzAwX1RPUE9MT0dZX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3RvcG9sb2d5Lmg+CisKKyNlbmRpZiAvKiBfQVNNX0g4MzAwX1RPUE9MT0dZX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWg4MzAwL3RyYXBzLmggYi9pbmNsdWRlL2FzbS1oODMwMC90cmFwcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxY2Y2YmUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC90cmFwcy5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20taDgzMDAvdHJhcHMuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMgWW9zaGlub3JpIFNhdG8gPHlzYXRvQHVzZXJzLnNvdXJjZWZvcmdlLmpwPgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9IODMwMF9UUkFQU19ICisjZGVmaW5lIF9IODMwMF9UUkFQU19ICisKK2V4dGVybiB2b2lkIHN5c3RlbV9jYWxsKHZvaWQpOworZXh0ZXJuIHZvaWQgaW50ZXJydXB0X2VudHJ5KHZvaWQpOworZXh0ZXJuIHZvaWQgdHJhY2VfYnJlYWsodm9pZCk7CisKKyNkZWZpbmUgSk1QX09QIDB4NWEwMDAwMDAKKyNkZWZpbmUgSlNSX09QIDB4NWUwMDAwMDAKKyNkZWZpbmUgVkVDVE9SKGFkZHJlc3MpICgoSk1QX09QKXwoKHVuc2lnbmVkIGxvbmcpYWRkcmVzcykpCisjZGVmaW5lIFJFRElSRUNUKGFkZHJlc3MpICgoSlNSX09QKXwoKHVuc2lnbmVkIGxvbmcpYWRkcmVzcykpCisKKyNkZWZpbmUgVFJBQ0VfVkVDIDUKKworI2RlZmluZSBUUkFQMF9WRUMgOAorI2RlZmluZSBUUkFQMV9WRUMgOQorI2RlZmluZSBUUkFQMl9WRUMgMTAKKyNkZWZpbmUgVFJBUDNfVkVDIDExCisKKyNpZiBkZWZpbmVkKF9fSDgzMDBIX18pCisjZGVmaW5lIE5SX1RSQVBTIDEyCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fSDgzMDBTX18pCisjZGVmaW5lIE5SX1RSQVBTIDE2CisjZW5kaWYKKworI2VuZGlmIC8qIF9IODMwMF9UUkFQU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1oODMwMC90eXBlcy5oIGIvaW5jbHVkZS9hc20taDgzMDAvdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWY0ZmMwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvdHlwZXMuaApAQCAtMCwwICsxLDY3IEBACisjaWZuZGVmIF9IODMwMF9UWVBFU19ICisjZGVmaW5lIF9IODMwMF9UWVBFU19ICisKKyNpZiAhZGVmaW5lZChfX0FTU0VNQkxZX18pCisKKy8qCisgKiBUaGlzIGZpbGUgaXMgbmV2ZXIgaW5jbHVkZWQgYnkgYXBwbGljYXRpb24gc29mdHdhcmUgdW5sZXNzCisgKiBleHBsaWNpdGx5IHJlcXVlc3RlZCAoZS5nLiwgdmlhIGxpbnV4L3R5cGVzLmgpIGluIHdoaWNoIGNhc2UgdGhlCisgKiBhcHBsaWNhdGlvbiBpcyBMaW51eCBzcGVjaWZpYyBzbyAodXNlci0pIG5hbWUgc3BhY2UgcG9sbHV0aW9uIGlzCisgKiBub3QgYSBtYWpvciBpc3N1ZS4gIEhvd2V2ZXIsIGZvciBpbnRlcm9wZXJhYmlsaXR5LCBsaWJyYXJpZXMgc3RpbGwKKyAqIG5lZWQgdG8gYmUgY2FyZWZ1bCB0byBhdm9pZCBhIG5hbWUgY2xhc2hlcy4KKyAqLworCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVtb2RlX3Q7CisKKy8qCisgKiBfX3h4IGlzIG9rOiBpdCBkb2Vzbid0IHBvbGx1dGUgdGhlIFBPU0lYIG5hbWVzcGFjZS4gVXNlIHRoZXNlIGluIHRoZQorICogaGVhZGVyIGZpbGVzIGV4cG9ydGVkIHRvIHVzZXIgc3BhY2UKKyAqLworCit0eXBlZGVmIF9fc2lnbmVkX18gY2hhciBfX3M4OwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdTg7CisKK3R5cGVkZWYgX19zaWduZWRfXyBzaG9ydCBfX3MxNjsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgX191MTY7CisKK3R5cGVkZWYgX19zaWduZWRfXyBpbnQgX19zMzI7Cit0eXBlZGVmIHVuc2lnbmVkIGludCBfX3UzMjsKKworI2lmIGRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykKK3R5cGVkZWYgX19zaWduZWRfXyBsb25nIGxvbmcgX19zNjQ7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3U2NDsKKyNlbmRpZgorCisvKgorICogVGhlc2UgYXJlbid0IGV4cG9ydGVkIG91dHNpZGUgdGhlIGtlcm5lbCB0byBhdm9pZCBuYW1lIHNwYWNlIGNsYXNoZXMKKyAqLworI2lmZGVmIF9fS0VSTkVMX18KKwordHlwZWRlZiBzaWduZWQgY2hhciBzODsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciB1ODsKKwordHlwZWRlZiBzaWduZWQgc2hvcnQgczE2OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1MTY7CisKK3R5cGVkZWYgc2lnbmVkIGludCBzMzI7Cit0eXBlZGVmIHVuc2lnbmVkIGludCB1MzI7CisKK3R5cGVkZWYgc2lnbmVkIGxvbmcgbG9uZyBzNjQ7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1NjQ7CisKKyNkZWZpbmUgQklUU19QRVJfTE9ORyAzMgorCisvKiBEbWEgYWRkcmVzc2VzIGFyZSAzMi1iaXRzIHdpZGUuICAqLworCit0eXBlZGVmIHUzMiBkbWFfYWRkcl90OworCisjZGVmaW5lIEhBVkVfU0VDVE9SX1QKK3R5cGVkZWYgdTY0IHNlY3Rvcl90OworCit0eXBlZGVmIHVuc2lnbmVkIGludCBrbWVtX2J1ZmN0bF90OworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiBfSDgzMDBfVFlQRVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvdWFjY2Vzcy5oIGIvaW5jbHVkZS9hc20taDgzMDAvdWFjY2Vzcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0ODBmMzAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC91YWNjZXNzLmgKQEAgLTAsMCArMSwxNzEgQEAKKyNpZm5kZWYgX19IODMwMF9VQUNDRVNTX0gKKyNkZWZpbmUgX19IODMwMF9VQUNDRVNTX0gKKworLyoKKyAqIFVzZXIgc3BhY2UgbWVtb3J5IGFjY2VzcyBmdW5jdGlvbnMKKyAqLworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKworI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CisKKyNkZWZpbmUgVkVSSUZZX1JFQUQJMAorI2RlZmluZSBWRVJJRllfV1JJVEUJMQorCisvKiBXZSBsZXQgdGhlIE1NVSBkbyBhbGwgY2hlY2tpbmcgKi8KKyNkZWZpbmUgYWNjZXNzX29rKHR5cGUsIGFkZHIsIHNpemUpIF9fYWNjZXNzX29rKCh1bnNpZ25lZCBsb25nKWFkZHIsc2l6ZSkKK3N0YXRpYyBpbmxpbmUgaW50IF9fYWNjZXNzX29rKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQoreworI2RlZmluZQlSQU5HRV9DSEVDS19PSyhhZGRyLCBzaXplLCBsb3dlciwgdXBwZXIpIFwKKwkoKChhZGRyKSA+PSAobG93ZXIpKSAmJiAoKChhZGRyKSArIChzaXplKSkgPCAodXBwZXIpKSkKKworCWV4dGVybiB1bnNpZ25lZCBsb25nIF9yYW1lbmQ7CisJcmV0dXJuKFJBTkdFX0NIRUNLX09LKGFkZHIsIHNpemUsIDBMLCAodW5zaWduZWQgbG9uZykmX3JhbWVuZCkpOworfQorCisvKiB0aGlzIGZ1bmN0aW9uIHdpbGwgZ28gYXdheSBzb29uIC0gdXNlIGFjY2Vzc19vaygpIGluc3RlYWQgKi8KK3N0YXRpYyBpbmxpbmUgaW50IF9fZGVwcmVjYXRlZCB2ZXJpZnlfYXJlYShpbnQgdHlwZSwgY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXJldHVybiBhY2Nlc3Nfb2sodHlwZSxhZGRyLHNpemUpPzA6LUVGQVVMVDsKK30KKworLyoKKyAqIFRoZSBleGNlcHRpb24gdGFibGUgY29uc2lzdHMgb2YgcGFpcnMgb2YgYWRkcmVzc2VzOiB0aGUgZmlyc3QgaXMgdGhlCisgKiBhZGRyZXNzIG9mIGFuIGluc3RydWN0aW9uIHRoYXQgaXMgYWxsb3dlZCB0byBmYXVsdCwgYW5kIHRoZSBzZWNvbmQgaXMKKyAqIHRoZSBhZGRyZXNzIGF0IHdoaWNoIHRoZSBwcm9ncmFtIHNob3VsZCBjb250aW51ZS4gIE5vIHJlZ2lzdGVycyBhcmUKKyAqIG1vZGlmaWVkLCBzbyBpdCBpcyBlbnRpcmVseSB1cCB0byB0aGUgY29udGludWF0aW9uIGNvZGUgdG8gZmlndXJlIG91dAorICogd2hhdCB0byBkby4KKyAqCisgKiBBbGwgdGhlIHJvdXRpbmVzIGJlbG93IHVzZSBiaXRzIG9mIGZpeHVwIGNvZGUgdGhhdCBhcmUgb3V0IG9mIGxpbmUKKyAqIHdpdGggdGhlIG1haW4gaW5zdHJ1Y3Rpb24gcGF0aC4gIFRoaXMgbWVhbnMgd2hlbiBldmVyeXRoaW5nIGlzIHdlbGwsCisgKiB3ZSBkb24ndCBldmVuIGhhdmUgdG8ganVtcCBvdmVyIHRoZW0uICBGdXJ0aGVyLCB0aGV5IGRvIG5vdCBpbnRydWRlCisgKiBvbiBvdXIgY2FjaGUgb3IgdGxiIGVudHJpZXMuCisgKi8KKworc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeQoreworCXVuc2lnbmVkIGxvbmcgaW5zbiwgZml4dXA7Cit9OworCisvKiBSZXR1cm5zIDAgaWYgZXhjZXB0aW9uIG5vdCBmb3VuZCBhbmQgZml4dXAgb3RoZXJ3aXNlLiAgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIHNlYXJjaF9leGNlcHRpb25fdGFibGUodW5zaWduZWQgbG9uZyk7CisKKworLyoKKyAqIFRoZXNlIGFyZSB0aGUgbWFpbiBzaW5nbGUtdmFsdWUgdHJhbnNmZXIgcm91dGluZXMuICBUaGV5IGF1dG9tYXRpY2FsbHkKKyAqIHVzZSB0aGUgcmlnaHQgc2l6ZSBpZiB3ZSBqdXN0IGhhdmUgdGhlIHJpZ2h0IHBvaW50ZXIgdHlwZS4KKyAqLworCisjZGVmaW5lIHB1dF91c2VyKHgsIHB0cikJCQkJXAorKHsJCQkJCQkJXAorICAgIGludCBfX3B1X2VyciA9IDA7CQkJCQlcCisgICAgdHlwZW9mKCoocHRyKSkgX19wdV92YWwgPSAoeCk7CQkJXAorICAgIHN3aXRjaCAoc2l6ZW9mICgqKHB0cikpKSB7CQkJCVwKKyAgICBjYXNlIDE6CQkJCQkJXAorICAgIGNhc2UgMjoJCQkJCQlcCisgICAgY2FzZSA0OgkJCQkJCVwKKwkqKHB0cikgPSAoX19wdV92YWwpOyAgIAkgICAgICAgIAkJXAorCWJyZWFrOwkJCQkJCVwKKyAgICBjYXNlIDg6CQkJCQkJXAorCW1lbWNweShwdHIsICZfX3B1X3ZhbCwgc2l6ZW9mICgqKHB0cikpKTsgICAgICAgIFwKKwlicmVhazsJCQkJCQlcCisgICAgZGVmYXVsdDoJCQkJCQlcCisJX19wdV9lcnIgPSBfX3B1dF91c2VyX2JhZCgpOwkJCVwKKwlicmVhazsJCQkJCQlcCisgICAgfQkJCQkJCQlcCisgICAgX19wdV9lcnI7CQkJCQkJXAorfSkKKyNkZWZpbmUgX19wdXRfdXNlcih4LCBwdHIpIHB1dF91c2VyKHgsIHB0cikKKworZXh0ZXJuIGludCBfX3B1dF91c2VyX2JhZCh2b2lkKTsKKworLyoKKyAqIFRlbGwgZ2NjIHdlIHJlYWQgZnJvbSBtZW1vcnkgaW5zdGVhZCBvZiB3cml0aW5nOiB0aGlzIGlzIGJlY2F1c2UKKyAqIHdlIGRvIG5vdCB3cml0ZSB0byBhbnkgbWVtb3J5IGdjYyBrbm93cyBhYm91dCwgc28gdGhlcmUgYXJlIG5vCisgKiBhbGlhc2luZyBpc3N1ZXMuCisgKi8KKworI2RlZmluZSBfX3B0cih4KSAoKHVuc2lnbmVkIGxvbmcgKikoeCkpCisKKy8qCisgKiBUZWxsIGdjYyB3ZSByZWFkIGZyb20gbWVtb3J5IGluc3RlYWQgb2Ygd3JpdGluZzogdGhpcyBpcyBiZWNhdXNlCisgKiB3ZSBkbyBub3Qgd3JpdGUgdG8gYW55IG1lbW9yeSBnY2Mga25vd3MgYWJvdXQsIHNvIHRoZXJlIGFyZSBubworICogYWxpYXNpbmcgaXNzdWVzLgorICovCisKKyNkZWZpbmUgZ2V0X3VzZXIoeCwgcHRyKQkJCQkJXAorKHsJCQkJCQkJCVwKKyAgICBpbnQgX19ndV9lcnIgPSAwOwkJCQkJCVwKKyAgICB0eXBlb2YoKihwdHIpKSBfX2d1X3ZhbCA9IDA7CQkJCVwKKyAgICBzd2l0Y2ggKHNpemVvZigqKHB0cikpKSB7CQkJCQlcCisgICAgY2FzZSAxOgkJCQkJCQlcCisgICAgY2FzZSAyOgkJCQkJCQlcCisgICAgY2FzZSA0OgkJCQkJCQlcCisJX19ndV92YWwgPSAqKHB0cik7CSAgICAgICAgICAgICAgICAJCVwKKwlicmVhazsJCQkJCQkJXAorICAgIGNhc2UgODoJCQkJCQkJXAorCW1lbWNweSgmX19ndV92YWwsIHB0ciwgc2l6ZW9mICgqKHB0cikpKTsgCQlcCisJYnJlYWs7CQkJCQkJCVwKKyAgICBkZWZhdWx0OgkJCQkJCQlcCisJX19ndV92YWwgPSAwOwkJCQkJCVwKKwlfX2d1X2VyciA9IF9fZ2V0X3VzZXJfYmFkKCk7CQkJCVwKKwlicmVhazsJCQkJCQkJXAorICAgIH0JCQkJCQkJCVwKKyAgICAoeCkgPSBfX2d1X3ZhbDsJCQkJCQlcCisgICAgX19ndV9lcnI7CQkJCQkJCVwKK30pCisjZGVmaW5lIF9fZ2V0X3VzZXIoeCwgcHRyKSBnZXRfdXNlcih4LCBwdHIpCisKK2V4dGVybiBpbnQgX19nZXRfdXNlcl9iYWQodm9pZCk7CisKKyNkZWZpbmUgY29weV9mcm9tX3VzZXIodG8sIGZyb20sIG4pCQkobWVtY3B5KHRvLCBmcm9tLCBuKSwgMCkKKyNkZWZpbmUgY29weV90b191c2VyKHRvLCBmcm9tLCBuKQkJKG1lbWNweSh0bywgZnJvbSwgbiksIDApCisKKyNkZWZpbmUgX19jb3B5X2Zyb21fdXNlcih0bywgZnJvbSwgbikgY29weV9mcm9tX3VzZXIodG8sIGZyb20sIG4pCisjZGVmaW5lIF9fY29weV90b191c2VyKHRvLCBmcm9tLCBuKSBjb3B5X3RvX3VzZXIodG8sIGZyb20sIG4pCisjZGVmaW5lIF9fY29weV90b191c2VyX2luYXRvbWljIF9fY29weV90b191c2VyCisjZGVmaW5lIF9fY29weV9mcm9tX3VzZXJfaW5hdG9taWMgX19jb3B5X2Zyb21fdXNlcgorCisjZGVmaW5lIGNvcHlfdG9fdXNlcl9yZXQodG8sZnJvbSxuLHJldHZhbCkgKHsgaWYgKGNvcHlfdG9fdXNlcih0byxmcm9tLG4pKSByZXR1cm4gcmV0dmFsOyB9KQorCisjZGVmaW5lIGNvcHlfZnJvbV91c2VyX3JldCh0byxmcm9tLG4scmV0dmFsKSAoeyBpZiAoY29weV9mcm9tX3VzZXIodG8sZnJvbSxuKSkgcmV0dXJuIHJldHZhbDsgfSkKKworLyoKKyAqIENvcHkgYSBudWxsIHRlcm1pbmF0ZWQgc3RyaW5nIGZyb20gdXNlcnNwYWNlLgorICovCisKK3N0YXRpYyBpbmxpbmUgbG9uZworc3RybmNweV9mcm9tX3VzZXIoY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMsIGxvbmcgY291bnQpCit7CisJY2hhciAqdG1wOworCXN0cm5jcHkoZHN0LCBzcmMsIGNvdW50KTsKKwlmb3IgKHRtcCA9IGRzdDsgKnRtcCAmJiBjb3VudCA+IDA7IHRtcCsrLCBjb3VudC0tKQorCQk7CisJcmV0dXJuKHRtcCAtIGRzdCk7IC8qIERBVklETSBzaG91bGQgd2UgY291bnQgYSBOVUwgPyAgY2hlY2sgZ2V0bmFtZSAqLworfQorCisvKgorICogUmV0dXJuIHRoZSBzaXplIG9mIGEgc3RyaW5nIChpbmNsdWRpbmcgdGhlIGVuZGluZyAwKQorICoKKyAqIFJldHVybiAwIG9uIGV4Y2VwdGlvbiwgYSB2YWx1ZSBncmVhdGVyIHRoYW4gTiBpZiB0b28gbG9uZworICovCitzdGF0aWMgaW5saW5lIGxvbmcgc3Rybmxlbl91c2VyKGNvbnN0IGNoYXIgKnNyYywgbG9uZyBuKQoreworCXJldHVybihzdHJsZW4oc3JjKSArIDEpOyAvKiBEQVZJRE0gbWFrZSBzYWZlciAqLworfQorCisjZGVmaW5lIHN0cmxlbl91c2VyKHN0cikgc3Rybmxlbl91c2VyKHN0ciwgMzI3NjcpCisKKy8qCisgKiBaZXJvIFVzZXJzcGFjZQorICovCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZworY2xlYXJfdXNlcih2b2lkICp0bywgdW5zaWduZWQgbG9uZyBuKQoreworCW1lbXNldCh0bywgMCwgbik7CisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvKiBfSDgzMDBfVUFDQ0VTU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1oODMwMC91Y29udGV4dC5oIGIvaW5jbHVkZS9hc20taDgzMDAvdWNvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmNmOGY4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvdWNvbnRleHQuaApAQCAtMCwwICsxLDEyIEBACisjaWZuZGVmIF9IODMwMF9VQ09OVEVYVF9ICisjZGVmaW5lIF9IODMwMF9VQ09OVEVYVF9ICisKK3N0cnVjdCB1Y29udGV4dCB7CisJdW5zaWduZWQgbG9uZwkgIHVjX2ZsYWdzOworCXN0cnVjdCB1Y29udGV4dCAgKnVjX2xpbms7CisJc3RhY2tfdAkJICB1Y19zdGFjazsKKwlzdHJ1Y3Qgc2lnY29udGV4dCB1Y19tY29udGV4dDsKKwlzaWdzZXRfdAkgIHVjX3NpZ21hc2s7CS8qIG1hc2sgbGFzdCBmb3IgZXh0ZW5zaWJpbGl0eSAqLworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1oODMwMC91bmFsaWduZWQuaCBiL2luY2x1ZGUvYXNtLWg4MzAwL3VuYWxpZ25lZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhOTM5NjEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC91bmFsaWduZWQuaApAQCAtMCwwICsxLDE2IEBACisjaWZuZGVmIF9fSDgzMDBfVU5BTElHTkVEX0gKKyNkZWZpbmUgX19IODMwMF9VTkFMSUdORURfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKy8qIFVzZSBtZW1tb3ZlIGhlcmUsIHNvIGdjYyBkb2VzIG5vdCBpbnNlcnQgYSBfX2J1aWx0aW5fbWVtY3B5LiAqLworCisjZGVmaW5lIGdldF91bmFsaWduZWQocHRyKSBcCisgICh7IF9fdHlwZW9mX18oKihwdHIpKSBfX3RtcDsgbWVtbW92ZSgmX190bXAsIChwdHIpLCBzaXplb2YoKihwdHIpKSk7IF9fdG1wOyB9KQorCisjZGVmaW5lIHB1dF91bmFsaWduZWQodmFsLCBwdHIpCQkJCVwKKyAgKHsgX190eXBlb2ZfXygqKHB0cikpIF9fdG1wID0gKHZhbCk7CQkJXAorICAgICBtZW1tb3ZlKChwdHIpLCAmX190bXAsIHNpemVvZigqKHB0cikpKTsJCVwKKyAgICAgKHZvaWQpMDsgfSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1oODMwMC91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLWg4MzAwL3VuaXN0ZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4YjM2MmYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC91bmlzdGQuaApAQCAtMCwwICsxLDU1NSBAQAorI2lmbmRlZiBfQVNNX0g4MzAwX1VOSVNURF9IXworI2RlZmluZSBfQVNNX0g4MzAwX1VOSVNURF9IXworCisvKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBzeXN0ZW0gY2FsbCBudW1iZXJzLgorICovCisKKyNkZWZpbmUgX19OUl9yZXN0YXJ0X3N5c2NhbGwgICAgICAwCisjZGVmaW5lIF9fTlJfZXhpdAkJICAxCisjZGVmaW5lIF9fTlJfZm9yawkJICAyCisjZGVmaW5lIF9fTlJfcmVhZAkJICAzCisjZGVmaW5lIF9fTlJfd3JpdGUJCSAgNAorI2RlZmluZSBfX05SX29wZW4JCSAgNQorI2RlZmluZSBfX05SX2Nsb3NlCQkgIDYKKyNkZWZpbmUgX19OUl93YWl0cGlkCQkgIDcKKyNkZWZpbmUgX19OUl9jcmVhdAkJICA4CisjZGVmaW5lIF9fTlJfbGluawkJICA5CisjZGVmaW5lIF9fTlJfdW5saW5rCQkgMTAKKyNkZWZpbmUgX19OUl9leGVjdmUJCSAxMQorI2RlZmluZSBfX05SX2NoZGlyCQkgMTIKKyNkZWZpbmUgX19OUl90aW1lCQkgMTMKKyNkZWZpbmUgX19OUl9ta25vZAkJIDE0CisjZGVmaW5lIF9fTlJfY2htb2QJCSAxNQorI2RlZmluZSBfX05SX2Nob3duCQkgMTYKKyNkZWZpbmUgX19OUl9icmVhawkJIDE3CisjZGVmaW5lIF9fTlJfb2xkc3RhdAkJIDE4CisjZGVmaW5lIF9fTlJfbHNlZWsJCSAxOQorI2RlZmluZSBfX05SX2dldHBpZAkJIDIwCisjZGVmaW5lIF9fTlJfbW91bnQJCSAyMQorI2RlZmluZSBfX05SX3Vtb3VudAkJIDIyCisjZGVmaW5lIF9fTlJfc2V0dWlkCQkgMjMKKyNkZWZpbmUgX19OUl9nZXR1aWQJCSAyNAorI2RlZmluZSBfX05SX3N0aW1lCQkgMjUKKyNkZWZpbmUgX19OUl9wdHJhY2UJCSAyNgorI2RlZmluZSBfX05SX2FsYXJtCQkgMjcKKyNkZWZpbmUgX19OUl9vbGRmc3RhdAkJIDI4CisjZGVmaW5lIF9fTlJfcGF1c2UJCSAyOQorI2RlZmluZSBfX05SX3V0aW1lCQkgMzAKKyNkZWZpbmUgX19OUl9zdHR5CQkgMzEKKyNkZWZpbmUgX19OUl9ndHR5CQkgMzIKKyNkZWZpbmUgX19OUl9hY2Nlc3MJCSAzMworI2RlZmluZSBfX05SX25pY2UJCSAzNAorI2RlZmluZSBfX05SX2Z0aW1lCQkgMzUKKyNkZWZpbmUgX19OUl9zeW5jCQkgMzYKKyNkZWZpbmUgX19OUl9raWxsCQkgMzcKKyNkZWZpbmUgX19OUl9yZW5hbWUJCSAzOAorI2RlZmluZSBfX05SX21rZGlyCQkgMzkKKyNkZWZpbmUgX19OUl9ybWRpcgkJIDQwCisjZGVmaW5lIF9fTlJfZHVwCQkgNDEKKyNkZWZpbmUgX19OUl9waXBlCQkgNDIKKyNkZWZpbmUgX19OUl90aW1lcwkJIDQzCisjZGVmaW5lIF9fTlJfcHJvZgkJIDQ0CisjZGVmaW5lIF9fTlJfYnJrCQkgNDUKKyNkZWZpbmUgX19OUl9zZXRnaWQJCSA0NgorI2RlZmluZSBfX05SX2dldGdpZAkJIDQ3CisjZGVmaW5lIF9fTlJfc2lnbmFsCQkgNDgKKyNkZWZpbmUgX19OUl9nZXRldWlkCQkgNDkKKyNkZWZpbmUgX19OUl9nZXRlZ2lkCQkgNTAKKyNkZWZpbmUgX19OUl9hY2N0CQkgNTEKKyNkZWZpbmUgX19OUl91bW91bnQyCQkgNTIKKyNkZWZpbmUgX19OUl9sb2NrCQkgNTMKKyNkZWZpbmUgX19OUl9pb2N0bAkJIDU0CisjZGVmaW5lIF9fTlJfZmNudGwJCSA1NQorI2RlZmluZSBfX05SX21weAkJIDU2CisjZGVmaW5lIF9fTlJfc2V0cGdpZAkJIDU3CisjZGVmaW5lIF9fTlJfdWxpbWl0CQkgNTgKKyNkZWZpbmUgX19OUl9vbGRvbGR1bmFtZQkgNTkKKyNkZWZpbmUgX19OUl91bWFzawkJIDYwCisjZGVmaW5lIF9fTlJfY2hyb290CQkgNjEKKyNkZWZpbmUgX19OUl91c3RhdAkJIDYyCisjZGVmaW5lIF9fTlJfZHVwMgkJIDYzCisjZGVmaW5lIF9fTlJfZ2V0cHBpZAkJIDY0CisjZGVmaW5lIF9fTlJfZ2V0cGdycAkJIDY1CisjZGVmaW5lIF9fTlJfc2V0c2lkCQkgNjYKKyNkZWZpbmUgX19OUl9zaWdhY3Rpb24JCSA2NworI2RlZmluZSBfX05SX3NnZXRtYXNrCQkgNjgKKyNkZWZpbmUgX19OUl9zc2V0bWFzawkJIDY5CisjZGVmaW5lIF9fTlJfc2V0cmV1aWQJCSA3MAorI2RlZmluZSBfX05SX3NldHJlZ2lkCQkgNzEKKyNkZWZpbmUgX19OUl9zaWdzdXNwZW5kCQkgNzIKKyNkZWZpbmUgX19OUl9zaWdwZW5kaW5nCQkgNzMKKyNkZWZpbmUgX19OUl9zZXRob3N0bmFtZQkgNzQKKyNkZWZpbmUgX19OUl9zZXRybGltaXQJCSA3NQorI2RlZmluZSBfX05SX2dldHJsaW1pdAkJIDc2CisjZGVmaW5lIF9fTlJfZ2V0cnVzYWdlCQkgNzcKKyNkZWZpbmUgX19OUl9nZXR0aW1lb2ZkYXkJIDc4CisjZGVmaW5lIF9fTlJfc2V0dGltZW9mZGF5CSA3OQorI2RlZmluZSBfX05SX2dldGdyb3VwcwkJIDgwCisjZGVmaW5lIF9fTlJfc2V0Z3JvdXBzCQkgODEKKyNkZWZpbmUgX19OUl9zZWxlY3QJCSA4MgorI2RlZmluZSBfX05SX3N5bWxpbmsJCSA4MworI2RlZmluZSBfX05SX29sZGxzdGF0CQkgODQKKyNkZWZpbmUgX19OUl9yZWFkbGluawkJIDg1CisjZGVmaW5lIF9fTlJfdXNlbGliCQkgODYKKyNkZWZpbmUgX19OUl9zd2Fwb24JCSA4NworI2RlZmluZSBfX05SX3JlYm9vdAkJIDg4CisjZGVmaW5lIF9fTlJfcmVhZGRpcgkJIDg5CisjZGVmaW5lIF9fTlJfbW1hcAkJIDkwCisjZGVmaW5lIF9fTlJfbXVubWFwCQkgOTEKKyNkZWZpbmUgX19OUl90cnVuY2F0ZQkJIDkyCisjZGVmaW5lIF9fTlJfZnRydW5jYXRlCQkgOTMKKyNkZWZpbmUgX19OUl9mY2htb2QJCSA5NAorI2RlZmluZSBfX05SX2ZjaG93bgkJIDk1CisjZGVmaW5lIF9fTlJfZ2V0cHJpb3JpdHkJIDk2CisjZGVmaW5lIF9fTlJfc2V0cHJpb3JpdHkJIDk3CisjZGVmaW5lIF9fTlJfcHJvZmlsCQkgOTgKKyNkZWZpbmUgX19OUl9zdGF0ZnMJCSA5OQorI2RlZmluZSBfX05SX2ZzdGF0ZnMJCTEwMAorI2RlZmluZSBfX05SX2lvcGVybQkJMTAxCisjZGVmaW5lIF9fTlJfc29ja2V0Y2FsbAkJMTAyCisjZGVmaW5lIF9fTlJfc3lzbG9nCQkxMDMKKyNkZWZpbmUgX19OUl9zZXRpdGltZXIJCTEwNAorI2RlZmluZSBfX05SX2dldGl0aW1lcgkJMTA1CisjZGVmaW5lIF9fTlJfc3RhdAkJMTA2CisjZGVmaW5lIF9fTlJfbHN0YXQJCTEwNworI2RlZmluZSBfX05SX2ZzdGF0CQkxMDgKKyNkZWZpbmUgX19OUl9vbGR1bmFtZQkJMTA5CisjZGVmaW5lIF9fTlJfaW9wbAkJLyogMTEwICovIG5vdCBzdXBwb3J0ZWQKKyNkZWZpbmUgX19OUl92aGFuZ3VwCQkxMTEKKyNkZWZpbmUgX19OUl9pZGxlCQkvKiAxMTIgKi8gT2Jzb2xldGUKKyNkZWZpbmUgX19OUl92bTg2CQkvKiAxMTMgKi8gbm90IHN1cHBvcnRlZAorI2RlZmluZSBfX05SX3dhaXQ0CQkxMTQKKyNkZWZpbmUgX19OUl9zd2Fwb2ZmCQkxMTUKKyNkZWZpbmUgX19OUl9zeXNpbmZvCQkxMTYKKyNkZWZpbmUgX19OUl9pcGMJCTExNworI2RlZmluZSBfX05SX2ZzeW5jCQkxMTgKKyNkZWZpbmUgX19OUl9zaWdyZXR1cm4JCTExOQorI2RlZmluZSBfX05SX2Nsb25lCQkxMjAKKyNkZWZpbmUgX19OUl9zZXRkb21haW5uYW1lCTEyMQorI2RlZmluZSBfX05SX3VuYW1lCQkxMjIKKyNkZWZpbmUgX19OUl9jYWNoZWZsdXNoCQkxMjMKKyNkZWZpbmUgX19OUl9hZGp0aW1leAkJMTI0CisjZGVmaW5lIF9fTlJfbXByb3RlY3QJCTEyNQorI2RlZmluZSBfX05SX3NpZ3Byb2NtYXNrCTEyNgorI2RlZmluZSBfX05SX2NyZWF0ZV9tb2R1bGUJMTI3CisjZGVmaW5lIF9fTlJfaW5pdF9tb2R1bGUJMTI4CisjZGVmaW5lIF9fTlJfZGVsZXRlX21vZHVsZQkxMjkKKyNkZWZpbmUgX19OUl9nZXRfa2VybmVsX3N5bXMJMTMwCisjZGVmaW5lIF9fTlJfcXVvdGFjdGwJCTEzMQorI2RlZmluZSBfX05SX2dldHBnaWQJCTEzMgorI2RlZmluZSBfX05SX2ZjaGRpcgkJMTMzCisjZGVmaW5lIF9fTlJfYmRmbHVzaAkJMTM0CisjZGVmaW5lIF9fTlJfc3lzZnMJCTEzNQorI2RlZmluZSBfX05SX3BlcnNvbmFsaXR5CTEzNgorI2RlZmluZSBfX05SX2Fmc19zeXNjYWxsCTEzNyAvKiBTeXNjYWxsIGZvciBBbmRyZXcgRmlsZSBTeXN0ZW0gKi8KKyNkZWZpbmUgX19OUl9zZXRmc3VpZAkJMTM4CisjZGVmaW5lIF9fTlJfc2V0ZnNnaWQJCTEzOQorI2RlZmluZSBfX05SX19sbHNlZWsJCTE0MAorI2RlZmluZSBfX05SX2dldGRlbnRzCQkxNDEKKyNkZWZpbmUgX19OUl9fbmV3c2VsZWN0CQkxNDIKKyNkZWZpbmUgX19OUl9mbG9jawkJMTQzCisjZGVmaW5lIF9fTlJfbXN5bmMJCTE0NAorI2RlZmluZSBfX05SX3JlYWR2CQkxNDUKKyNkZWZpbmUgX19OUl93cml0ZXYJCTE0NgorI2RlZmluZSBfX05SX2dldHNpZAkJMTQ3CisjZGVmaW5lIF9fTlJfZmRhdGFzeW5jCQkxNDgKKyNkZWZpbmUgX19OUl9fc3lzY3RsCQkxNDkKKyNkZWZpbmUgX19OUl9tbG9jawkJMTUwCisjZGVmaW5lIF9fTlJfbXVubG9jawkJMTUxCisjZGVmaW5lIF9fTlJfbWxvY2thbGwJCTE1MgorI2RlZmluZSBfX05SX211bmxvY2thbGwJCTE1MworI2RlZmluZSBfX05SX3NjaGVkX3NldHBhcmFtCQkxNTQKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRwYXJhbQkJMTU1CisjZGVmaW5lIF9fTlJfc2NoZWRfc2V0c2NoZWR1bGVyCQkxNTYKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRzY2hlZHVsZXIJCTE1NworI2RlZmluZSBfX05SX3NjaGVkX3lpZWxkCQkxNTgKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4CTE1OQorI2RlZmluZSBfX05SX3NjaGVkX2dldF9wcmlvcml0eV9taW4JMTYwCisjZGVmaW5lIF9fTlJfc2NoZWRfcnJfZ2V0X2ludGVydmFsCTE2MQorI2RlZmluZSBfX05SX25hbm9zbGVlcAkJMTYyCisjZGVmaW5lIF9fTlJfbXJlbWFwCQkxNjMKKyNkZWZpbmUgX19OUl9zZXRyZXN1aWQJCTE2NAorI2RlZmluZSBfX05SX2dldHJlc3VpZAkJMTY1CisjZGVmaW5lIF9fTlJfZ2V0cGFnZXNpemUJMTY2CisjZGVmaW5lIF9fTlJfcXVlcnlfbW9kdWxlCTE2NworI2RlZmluZSBfX05SX3BvbGwJCTE2OAorI2RlZmluZSBfX05SX25mc3NlcnZjdGwJCTE2OQorI2RlZmluZSBfX05SX3NldHJlc2dpZAkJMTcwCisjZGVmaW5lIF9fTlJfZ2V0cmVzZ2lkCQkxNzEKKyNkZWZpbmUgX19OUl9wcmN0bAkJMTcyCisjZGVmaW5lIF9fTlJfcnRfc2lncmV0dXJuCTE3MworI2RlZmluZSBfX05SX3J0X3NpZ2FjdGlvbgkxNzQKKyNkZWZpbmUgX19OUl9ydF9zaWdwcm9jbWFzawkxNzUKKyNkZWZpbmUgX19OUl9ydF9zaWdwZW5kaW5nCTE3NgorI2RlZmluZSBfX05SX3J0X3NpZ3RpbWVkd2FpdAkxNzcKKyNkZWZpbmUgX19OUl9ydF9zaWdxdWV1ZWluZm8JMTc4CisjZGVmaW5lIF9fTlJfcnRfc2lnc3VzcGVuZAkxNzkKKyNkZWZpbmUgX19OUl9wcmVhZDY0CQkxODAKKyNkZWZpbmUgX19OUl9wd3JpdGU2NAkJMTgxCisjZGVmaW5lIF9fTlJfbGNob3duCQkxODIKKyNkZWZpbmUgX19OUl9nZXRjd2QJCTE4MworI2RlZmluZSBfX05SX2NhcGdldAkJMTg0CisjZGVmaW5lIF9fTlJfY2Fwc2V0CQkxODUKKyNkZWZpbmUgX19OUl9zaWdhbHRzdGFjawkxODYKKyNkZWZpbmUgX19OUl9zZW5kZmlsZQkJMTg3CisjZGVmaW5lIF9fTlJfZ2V0cG1zZwkJMTg4CS8qIHNvbWUgcGVvcGxlIGFjdHVhbGx5IHdhbnQgc3RyZWFtcyAqLworI2RlZmluZSBfX05SX3B1dHBtc2cJCTE4OQkvKiBzb21lIHBlb3BsZSBhY3R1YWxseSB3YW50IHN0cmVhbXMgKi8KKyNkZWZpbmUgX19OUl92Zm9yawkJMTkwCisjZGVmaW5lIF9fTlJfdWdldHJsaW1pdAkJMTkxCisjZGVmaW5lIF9fTlJfbW1hcDIJCTE5MgorI2RlZmluZSBfX05SX3RydW5jYXRlNjQJCTE5MworI2RlZmluZSBfX05SX2Z0cnVuY2F0ZTY0CTE5NAorI2RlZmluZSBfX05SX3N0YXQ2NAkJMTk1CisjZGVmaW5lIF9fTlJfbHN0YXQ2NAkJMTk2CisjZGVmaW5lIF9fTlJfZnN0YXQ2NAkJMTk3CisjZGVmaW5lIF9fTlJfY2hvd24zMgkJMTk4CisjZGVmaW5lIF9fTlJfZ2V0dWlkMzIJCTE5OQorI2RlZmluZSBfX05SX2dldGdpZDMyCQkyMDAKKyNkZWZpbmUgX19OUl9nZXRldWlkMzIJCTIwMQorI2RlZmluZSBfX05SX2dldGVnaWQzMgkJMjAyCisjZGVmaW5lIF9fTlJfc2V0cmV1aWQzMgkJMjAzCisjZGVmaW5lIF9fTlJfc2V0cmVnaWQzMgkJMjA0CisjZGVmaW5lIF9fTlJfZ2V0Z3JvdXBzMzIJMjA1CisjZGVmaW5lIF9fTlJfc2V0Z3JvdXBzMzIJMjA2CisjZGVmaW5lIF9fTlJfZmNob3duMzIJCTIwNworI2RlZmluZSBfX05SX3NldHJlc3VpZDMyCTIwOAorI2RlZmluZSBfX05SX2dldHJlc3VpZDMyCTIwOQorI2RlZmluZSBfX05SX3NldHJlc2dpZDMyCTIxMAorI2RlZmluZSBfX05SX2dldHJlc2dpZDMyCTIxMQorI2RlZmluZSBfX05SX2xjaG93bjMyCQkyMTIKKyNkZWZpbmUgX19OUl9zZXR1aWQzMgkJMjEzCisjZGVmaW5lIF9fTlJfc2V0Z2lkMzIJCTIxNAorI2RlZmluZSBfX05SX3NldGZzdWlkMzIJCTIxNQorI2RlZmluZSBfX05SX3NldGZzZ2lkMzIJCTIxNgorI2RlZmluZSBfX05SX3Bpdm90X3Jvb3QJCTIxNworI2RlZmluZSBfX05SX2dldGRlbnRzNjQJCTIyMAorI2RlZmluZSBfX05SX2ZjbnRsNjQJCTIyMQorI2RlZmluZSBfX05SX3NlY3VyaXR5CQkyMjMKKyNkZWZpbmUgX19OUl9nZXR0aWQJCTIyNAorI2RlZmluZSBfX05SX3JlYWRhaGVhZAkJMjI1CisjZGVmaW5lIF9fTlJfc2V0eGF0dHIJCTIyNgorI2RlZmluZSBfX05SX2xzZXR4YXR0cgkJMjI3CisjZGVmaW5lIF9fTlJfZnNldHhhdHRyCQkyMjgKKyNkZWZpbmUgX19OUl9nZXR4YXR0cgkJMjI5CisjZGVmaW5lIF9fTlJfbGdldHhhdHRyCQkyMzAKKyNkZWZpbmUgX19OUl9mZ2V0eGF0dHIJCTIzMQorI2RlZmluZSBfX05SX2xpc3R4YXR0cgkJMjMyCisjZGVmaW5lIF9fTlJfbGxpc3R4YXR0cgkJMjMzCisjZGVmaW5lIF9fTlJfZmxpc3R4YXR0cgkJMjM0CisjZGVmaW5lIF9fTlJfcmVtb3ZleGF0dHIJMjM1CisjZGVmaW5lIF9fTlJfbHJlbW92ZXhhdHRyCTIzNgorI2RlZmluZSBfX05SX2ZyZW1vdmV4YXR0cgkyMzcKKyNkZWZpbmUgX19OUl90a2lsbAkJMjM4CisjZGVmaW5lIF9fTlJfc2VuZGZpbGU2NAkJMjM5CisjZGVmaW5lIF9fTlJfZnV0ZXgJCTI0MAorI2RlZmluZSBfX05SX3NjaGVkX3NldGFmZmluaXR5CTI0MQorI2RlZmluZSBfX05SX3NjaGVkX2dldGFmZmluaXR5CTI0MgorI2RlZmluZSBfX05SX3NldF90aHJlYWRfYXJlYQkyNDMKKyNkZWZpbmUgX19OUl9nZXRfdGhyZWFkX2FyZWEJMjQ0CisjZGVmaW5lIF9fTlJfaW9fc2V0dXAJCTI0NQorI2RlZmluZSBfX05SX2lvX2Rlc3Ryb3kJCTI0NgorI2RlZmluZSBfX05SX2lvX2dldGV2ZW50cwkyNDcKKyNkZWZpbmUgX19OUl9pb19zdWJtaXQJCTI0OAorI2RlZmluZSBfX05SX2lvX2NhbmNlbAkJMjQ5CisjZGVmaW5lIF9fTlJfYWxsb2NfaHVnZXBhZ2VzCTI1MAorI2RlZmluZSBfX05SX2ZyZWVfaHVnZXBhZ2VzCTI1MQorI2RlZmluZSBfX05SX2V4aXRfZ3JvdXAJCTI1MgorI2RlZmluZSBfX05SX2xvb2t1cF9kY29va2llCTI1MworI2RlZmluZSBfX05SX3N5c19lcG9sbF9jcmVhdGUJMjU0CisjZGVmaW5lIF9fTlJfc3lzX2Vwb2xsX2N0bAkyNTUKKyNkZWZpbmUgX19OUl9zeXNfZXBvbGxfd2FpdAkyNTYKKyNkZWZpbmUgX19OUl9yZW1hcF9maWxlX3BhZ2VzCTI1NworI2RlZmluZSBfX05SX3NldF90aWRfYWRkcmVzcwkyNTgKKyNkZWZpbmUgX19OUl90aW1lcl9jcmVhdGUJMjU5CisjZGVmaW5lIF9fTlJfdGltZXJfc2V0dGltZQkoX19OUl90aW1lcl9jcmVhdGUrMSkKKyNkZWZpbmUgX19OUl90aW1lcl9nZXR0aW1lCShfX05SX3RpbWVyX2NyZWF0ZSsyKQorI2RlZmluZSBfX05SX3RpbWVyX2dldG92ZXJydW4JKF9fTlJfdGltZXJfY3JlYXRlKzMpCisjZGVmaW5lIF9fTlJfdGltZXJfZGVsZXRlCShfX05SX3RpbWVyX2NyZWF0ZSs0KQorI2RlZmluZSBfX05SX2Nsb2NrX3NldHRpbWUJKF9fTlJfdGltZXJfY3JlYXRlKzUpCisjZGVmaW5lIF9fTlJfY2xvY2tfZ2V0dGltZQkoX19OUl90aW1lcl9jcmVhdGUrNikKKyNkZWZpbmUgX19OUl9jbG9ja19nZXRyZXMJKF9fTlJfdGltZXJfY3JlYXRlKzcpCisjZGVmaW5lIF9fTlJfY2xvY2tfbmFub3NsZWVwCShfX05SX3RpbWVyX2NyZWF0ZSs4KQorI2RlZmluZSBfX05SX3N0YXRmczY0CQkyNjgKKyNkZWZpbmUgX19OUl9mc3RhdGZzNjQJCTI2OQorI2RlZmluZSBfX05SX3Rna2lsbAkJMjcwCisjZGVmaW5lIF9fTlJfdXRpbWVzCQkyNzEKKyNkZWZpbmUgX19OUl9mYWR2aXNlNjRfNjQJMjcyCisjZGVmaW5lIF9fTlJfdnNlcnZlcgkJMjczCisjZGVmaW5lIF9fTlJfbWJpbmQJCTI3NAorI2RlZmluZSBfX05SX2dldF9tZW1wb2xpY3kJMjc1CisjZGVmaW5lIF9fTlJfc2V0X21lbXBvbGljeQkyNzYKKyNkZWZpbmUgX19OUl9tcV9vcGVuIAkJMjc3CisjZGVmaW5lIF9fTlJfbXFfdW5saW5rCQkoX19OUl9tcV9vcGVuKzEpCisjZGVmaW5lIF9fTlJfbXFfdGltZWRzZW5kCShfX05SX21xX29wZW4rMikKKyNkZWZpbmUgX19OUl9tcV90aW1lZHJlY2VpdmUJKF9fTlJfbXFfb3BlbiszKQorI2RlZmluZSBfX05SX21xX25vdGlmeQkJKF9fTlJfbXFfb3Blbis0KQorI2RlZmluZSBfX05SX21xX2dldHNldGF0dHIJKF9fTlJfbXFfb3Blbis1KQorI2RlZmluZSBfX05SX3N5c19rZXhlY19sb2FkCTI4MworI2RlZmluZSBfX05SX3dhaXRpZAkJMjg0CisvKiAjZGVmaW5lIF9fTlJfc3lzX3NldGFsdHJvb3QJMjg1ICovCisjZGVmaW5lIF9fTlJfYWRkX2tleQkJMjg2CisjZGVmaW5lIF9fTlJfcmVxdWVzdF9rZXkJMjg3CisjZGVmaW5lIF9fTlJfa2V5Y3RsCQkyODgKKworI2RlZmluZSBOUl9zeXNjYWxscyAyODkKKworCisvKiB1c2VyLXZpc2libGUgZXJyb3IgbnVtYmVycyBhcmUgaW4gdGhlIHJhbmdlIC0xIC0gLTEyMjogc2VlCisgICA8YXNtLW02OGsvZXJybm8uaD4gKi8KKworI2RlZmluZSBfX3N5c2NhbGxfcmV0dXJuKHR5cGUsIHJlcykgXAorZG8geyBcCisJaWYgKCh1bnNpZ25lZCBsb25nKShyZXMpID49ICh1bnNpZ25lZCBsb25nKSgtMTI1KSkgeyBcCisJLyogYXZvaWQgdXNpbmcgcmVzIHdoaWNoIGlzIGRlY2xhcmVkIHRvIGJlIGluIHJlZ2lzdGVyIGQwOyBcCisJICAgZXJybm8gbWlnaHQgZXhwYW5kIHRvIGEgZnVuY3Rpb24gY2FsbCBhbmQgY2xvYmJlciBpdC4gICovIFwKKwkJaW50IF9fZXJyID0gLShyZXMpOyBcCisJCWVycm5vID0gX19lcnI7IFwKKwkJcmVzID0gLTE7IFwKKwl9IFwKKwlyZXR1cm4gKHR5cGUpIChyZXMpOyBcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIF9zeXNjYWxsMCh0eXBlLCBuYW1lKQkJCQkJCQlcCit0eXBlIG5hbWUodm9pZCkJCQkJCQkJCQlcCit7CQkJCQkJCQkJCVwKKyAgcmVnaXN0ZXIgbG9uZyBfX3JlcyBfX2FzbV9fKCJlcjAiKTsJCQkJCQlcCisgIF9fYXNtX18gX192b2xhdGlsZV9fICgibW92LmwJJTEsZXIwXG5cdCIJCQkJCVwKKyAgCQkJInRyYXBhCSMwXG5cdCIJCQkJCQlcCisJCQk6ICI9ciIgKF9fcmVzKQkJCQkJCVwKKwkJCTogImlyIiAoX19OUl8jI25hbWUpCQkJCQlcCisJCQk6ICJjYyIpOwkJCQkJCVwKKyAgaWYgKCh1bnNpZ25lZCBsb25nKShfX3JlcykgPj0gKHVuc2lnbmVkIGxvbmcpKC0xMjUpKSB7CQkJXAorICAgIGVycm5vID0gLV9fcmVzOwkJCQkJCQkJXAorICAgIF9fcmVzID0gLTE7CQkJCQkJCQkJXAorICB9CQkJCQkJCQkJCVwKKyAgcmV0dXJuICh0eXBlKV9fcmVzOwkJCQkJCQkJXAorfQorCisjZGVmaW5lIF9zeXNjYWxsMSh0eXBlLCBuYW1lLCBhdHlwZSwgYSkJCQkJCQlcCit0eXBlIG5hbWUoYXR5cGUgYSkJCQkJCQkJCVwKK3sJCQkJCQkJCQkJXAorICByZWdpc3RlciBsb25nIF9fcmVzIF9fYXNtX18oImVyMCIpOwkJCQkJCVwKKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtb3YubAklMiwgZXIxXG5cdCIJCQkJCVwKKyAgCQkJIm1vdi5sCSUxLCBlcjBcblx0IgkJCQkJXAorICAJCQkidHJhcGEJIzBcblx0IgkJCQkJCVwKKwkJCTogIj1yIiAoX19yZXMpCQkJCQkJXAorCQkJOiAiaXIiIChfX05SXyMjbmFtZSksCQkJCQlcCisJCQkgICJnIiAoKGxvbmcpYSkJCQkJCQlcCisJCQk6ICJjYyIsICJlcjEiKTsJCQkJCVwKKyAgaWYgKCh1bnNpZ25lZCBsb25nKShfX3JlcykgPj0gKHVuc2lnbmVkIGxvbmcpKC0xMjUpKSB7CQkJXAorICAgIGVycm5vID0gLV9fcmVzOwkJCQkJCQkJXAorICAgIF9fcmVzID0gLTE7CQkJCQkJCQkJXAorICB9CQkJCQkJCQkJCVwKKyAgcmV0dXJuICh0eXBlKV9fcmVzOwkJCQkJCQkJXAorfQorCisjZGVmaW5lIF9zeXNjYWxsMih0eXBlLCBuYW1lLCBhdHlwZSwgYSwgYnR5cGUsIGIpCQkJCVwKK3R5cGUgbmFtZShhdHlwZSBhLCBidHlwZSBiKQkJCQkJCQlcCit7CQkJCQkJCQkJCVwKKyAgcmVnaXN0ZXIgbG9uZyBfX3JlcyBfX2FzbV9fKCJlcjAiKTsJCQkJCQlcCisgIF9fYXNtX18gX192b2xhdGlsZV9fICgibW92LmwJJTMsIGVyMlxuXHQiCQkJCQlcCisgIAkJCSJtb3YubAklMiwgZXIxXG5cdCIJCQkJCVwKKwkJCSJtb3YubAklMSwgZXIwXG5cdCIJCQkJCVwKKyAgCQkJInRyYXBhCSMwXG5cdCIJCQkJCQlcCisJCQk6ICI9ciIgKF9fcmVzKQkJCQkJCVwKKwkJCTogImlyIiAoX19OUl8jI25hbWUpLAkJCQkJXAorCQkJICAiZyIgKChsb25nKWEpLAkJCQkJXAorCQkJICAiZyIgKChsb25nKWIpCQkJCQkJXAorCQkJOiAiY2MiLCAiZXIxIiwgImVyMiIpOyAJCQkJXAorICBpZiAoKHVuc2lnbmVkIGxvbmcpKF9fcmVzKSA+PSAodW5zaWduZWQgbG9uZykoLTEyNSkpIHsJCQlcCisgICAgZXJybm8gPSAtX19yZXM7CQkJCQkJCQlcCisgICAgX19yZXMgPSAtMTsJCQkJCQkJCQlcCisgIH0JCQkJCQkJCQkJXAorICByZXR1cm4gKHR5cGUpX19yZXM7CQkJCQkJCQlcCit9CisKKyNkZWZpbmUgX3N5c2NhbGwzKHR5cGUsIG5hbWUsIGF0eXBlLCBhLCBidHlwZSwgYiwgY3R5cGUsIGMpCQkJXAordHlwZSBuYW1lKGF0eXBlIGEsIGJ0eXBlIGIsIGN0eXBlIGMpCQkJCQkJXAorewkJCQkJCQkJCQlcCisgIHJlZ2lzdGVyIGxvbmcgX19yZXMgX19hc21fXygiZXIwIik7CQkJCQkJXAorICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1vdi5sCSU0LCBlcjNcblx0IgkJCQkJXAorCQkJIm1vdi5sCSUzLCBlcjJcblx0IgkJCQkJXAorICAJCQkibW92LmwJJTIsIGVyMVxuXHQiCQkJCQlcCisJCQkibW92LmwJJTEsIGVyMFxuXHQiCQkJCQlcCisgIAkJCSJ0cmFwYQkjMFxuXHQiCQkJCQkJXAorCQkJOiAiPXIiIChfX3JlcykJCQkJCQlcCisJCQk6ICJpciIgKF9fTlJfIyNuYW1lKSwJCQkJCVwKKwkJCSAgImciICgobG9uZylhKSwJCQkJCVwKKwkJCSAgImciICgobG9uZyliKSwJCQkJCVwKKwkJCSAgImciICgobG9uZyljKQkJCQkJCVwKKwkJCTogImNjIiwgImVyMSIsICJlcjIiLCAiZXIzIik7ICAJCQlcCisgIGlmICgodW5zaWduZWQgbG9uZykoX19yZXMpID49ICh1bnNpZ25lZCBsb25nKSgtMTI1KSkgewkJCVwKKyAgICBlcnJubyA9IC1fX3JlczsJCQkJCQkJCVwKKyAgICBfX3JlcyA9IC0xOwkJCQkJCQkJCVwKKyAgfQkJCQkJCQkJCQlcCisgIHJldHVybiAodHlwZSlfX3JlczsJCQkJCQkJCVwKK30KKworI2RlZmluZSBfc3lzY2FsbDQodHlwZSwgbmFtZSwgYXR5cGUsIGEsIGJ0eXBlLCBiLCBjdHlwZSwgYywgZHR5cGUsIGQpCQlcCit0eXBlIG5hbWUoYXR5cGUgYSwgYnR5cGUgYiwgY3R5cGUgYywgZHR5cGUgZCkJCQkJCVwKK3sJCQkJCQkJCQkJXAorICByZWdpc3RlciBsb25nIF9fcmVzIF9fYXNtX18oImVyMCIpOwkJCQkJCVwKKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtb3YubAklNSwgZXI0XG5cdCIJCQkJCVwKKwkJCSJtb3YubAklNCwgZXIzXG5cdCIJCQkJCVwKKwkJCSJtb3YubAklMywgZXIyXG5cdCIJCQkJCVwKKyAgCQkJIm1vdi5sCSUyLCBlcjFcblx0IgkJCQkJXAorCQkJIm1vdi5sCSUxLCBlcjBcblx0IgkJCQkJXAorICAJCQkidHJhcGEJIzBcblx0IgkJCQkJCVwKKwkJCTogIj1yIiAoX19yZXMpCQkJCQkJXAorCQkJOiAiaXIiIChfX05SXyMjbmFtZSksCQkJCQlcCisJCQkgICJnIiAoKGxvbmcpYSksCQkJCQlcCisJCQkgICJnIiAoKGxvbmcpYiksCQkJCQlcCisJCQkgICJnIiAoKGxvbmcpYyksCQkJCQlcCisJCQkgICJnIiAoKGxvbmcpZCkJCQkJCQlcCisJCQk6ICJjYyIsICJlcjEiLCAiZXIyIiwgImVyMyIsICJlcjQiKTsJCQlcCisgIGlmICgodW5zaWduZWQgbG9uZykoX19yZXMpID49ICh1bnNpZ25lZCBsb25nKSgtMTI1KSkgewkJCVwKKyAgICBlcnJubyA9IC1fX3JlczsJCQkJCQkJCVwKKyAgICBfX3JlcyA9IC0xOwkJCQkJCQkJCVwKKyAgfQkJCQkJCQkJCQlcCisgIHJldHVybiAodHlwZSlfX3JlczsJCQkJCQkJCVwKK30KKworI2RlZmluZSBfc3lzY2FsbDUodHlwZSwgbmFtZSwgYXR5cGUsIGEsIGJ0eXBlLCBiLCBjdHlwZSwgYywgZHR5cGUsIGQsIGV0eXBlLCBlKQlcCit0eXBlIG5hbWUoYXR5cGUgYSwgYnR5cGUgYiwgY3R5cGUgYywgZHR5cGUgZCwgZXR5cGUgZSkJCQkJXAorewkJCQkJCQkJCQlcCisgIHJlZ2lzdGVyIGxvbmcgX19yZXMgX19hc21fXygiZXIwIik7CQkJCQkJXAorICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1vdi5sCSU2LCBlcjVcblx0IgkJCQkJXAorCQkJIm1vdi5sCSU1LCBlcjRcblx0IgkJCQkJXAorCQkJIm1vdi5sCSU0LCBlcjNcblx0IgkJCQkJXAorCQkJIm1vdi5sCSUzLCBlcjJcblx0IgkJCQkJXAorICAJCQkibW92LmwJJTIsIGVyMVxuXHQiCQkJCQlcCisJCQkibW92LmwJJTEsIGVyMFxuXHQiCQkJCQlcCisgIAkJCSJ0cmFwYQkjMFxuXHQiCQkJCQkJXAorCQkJOiAiPXIiIChfX3JlcykJCQkJCQlcCisJCQk6ICJpciIgKF9fTlJfIyNuYW1lKSwJCQkJCVwKKwkJCSAgImciICgobG9uZylhKSwJCQkJCVwKKwkJCSAgImciICgobG9uZyliKSwJCQkJCVwKKwkJCSAgImciICgobG9uZyljKSwJCQkJCVwKKwkJCSAgImciICgobG9uZylkKSwJCQkJCVwKKwkJCSAgIm0iICgobG9uZyllKQkJCQkJCVwKKwkJCTogImNjIiwgImVyMSIsICJlcjIiLCAiZXIzIiwgImVyNCIsICJlcjUiKTsJCVwKKyAgaWYgKCh1bnNpZ25lZCBsb25nKShfX3JlcykgPj0gKHVuc2lnbmVkIGxvbmcpKC0xMjUpKSB7CQkgICAgICAgCVwKKyAgICBlcnJubyA9IC1fX3JlczsJCQkJCQkJCVwKKyAgICBfX3JlcyA9IC0xOwkJCQkJCQkJCVwKKyAgfQkJCQkJCQkJCQlcCisgIHJldHVybiAodHlwZSlfX3JlczsJCQkJCQkJCVwKK30KKwkJCisjZGVmaW5lIF9zeXNjYWxsNih0eXBlLCBuYW1lLCBhdHlwZSwgYSwgYnR5cGUsIGIsIGN0eXBlLCBjLCBkdHlwZSwgZCwgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0eXBlLCBlLCBmdHlwZSwgZikJICAgICAgICAgICAgICAgICAgICAgICAgXAordHlwZSBuYW1lKGF0eXBlIGEsIGJ0eXBlIGIsIGN0eXBlIGMsIGR0eXBlIGQsIGV0eXBlIGUsIGZ0eXBlIGYpCQkJXAorewkJCQkJCQkJCQlcCisgIHJlZ2lzdGVyIGxvbmcgX19yZXMgX19hc21fXygiZXIwIik7CQkJCQkJXAorICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1vdi5sCWVyNixALXNwXG5cdCIJCQkJCVwKKyAgICAgICAgICAgICAgICAgICAgICAgICJtb3YubAklNywgZXI2XG5cdCIJCQkJCVwKKyAgICAgICAgICAgICAgICAgICAgICAgICJtb3YubAklNiwgZXI1XG5cdCIJCQkJCVwKKwkJCSJtb3YubAklNSwgZXI0XG5cdCIJCQkJCVwKKwkJCSJtb3YubAklNCwgZXIzXG5cdCIJCQkJCVwKKwkJCSJtb3YubAklMywgZXIyXG5cdCIJCQkJCVwKKyAgCQkJIm1vdi5sCSUyLCBlcjFcblx0IgkJCQkJXAorCQkJIm1vdi5sCSUxLCBlcjBcblx0IgkJCQkJXAorICAJCQkidHJhcGEJIzBcblx0IgkJCQkJCVwKKyAgCQkJIm1vdi5sCUBzcCssZXI2IgkJCQkJXAorCQkJOiAiPXIiIChfX3JlcykJCQkJCQlcCisJCQk6ICJpciIgKF9fTlJfIyNuYW1lKSwJCQkJCVwKKwkJCSAgImciICgobG9uZylhKSwJCQkJCVwKKwkJCSAgImciICgobG9uZyliKSwJCQkJCVwKKwkJCSAgImciICgobG9uZyljKSwJCQkJCVwKKwkJCSAgImciICgobG9uZylkKSwJCQkJCVwKKwkJCSAgIm0iICgobG9uZyllKSwJCQkJCVwKKwkJCSAgIm0iICgobG9uZyllKQkJCQkJCVwKKwkJCTogImNjIiwgImVyMSIsICJlcjIiLCAiZXIzIiwgImVyNCIsICJlcjUiKTsJCVwKKyAgaWYgKCh1bnNpZ25lZCBsb25nKShfX3JlcykgPj0gKHVuc2lnbmVkIGxvbmcpKC0xMjUpKSB7CQkgICAgICAgCVwKKyAgICBlcnJubyA9IC1fX3JlczsJCQkJCQkJCVwKKyAgICBfX3JlcyA9IC0xOwkJCQkJCQkJCVwKKyAgfQkJCQkJCQkJCQlcCisgIHJldHVybiAodHlwZSlfX3JlczsJCQkJCQkJCVwKK30KKwkJCisKKyNpZmRlZiBfX0tFUk5FTF9fCisjZGVmaW5lIF9fQVJDSF9XQU5UX0lQQ19QQVJTRV9WRVJTSU9OCisjZGVmaW5lIF9fQVJDSF9XQU5UX09MRF9SRUFERElSCisjZGVmaW5lIF9fQVJDSF9XQU5UX09MRF9TVEFUCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NUQVQ2NAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfQUxBUk0KKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0dFVEhPU1ROQU1FCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19QQVVTRQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0dFVE1BU0sKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR05BTAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfVElNRQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfVVRJTUUKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1dBSVRQSUQKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NPQ0tFVENBTEwKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0ZBRFZJU0U2NAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfR0VUUEdSUAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfTExTRUVLCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19OSUNFCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19PTERfR0VUUkxJTUlUCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19PTERVTU9VTlQKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR1BFTkRJTkcKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR1BST0NNQVNLCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19SVF9TSUdBQ1RJT04KKyNlbmRpZgorCisjaWZkZWYgX19LRVJORUxfU1lTQ0FMTFNfXworCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKgorICogd2UgbmVlZCB0aGlzIGlubGluZSAtIGZvcmtpbmcgZnJvbSBrZXJuZWwgc3BhY2Ugd2lsbCByZXN1bHQKKyAqIGluIE5PIENPUFkgT04gV1JJVEUgKCEhISksIHVudGlsIGFuIGV4ZWN2ZSBpcyBleGVjdXRlZC4gVGhpcworICogaXMgbm8gcHJvYmxlbSwgYnV0IGZvciB0aGUgc3RhY2suIFRoaXMgaXMgaGFuZGxlZCBieSBub3QgbGV0dGluZworICogbWFpbigpIHVzZSB0aGUgc3RhY2sgYXQgYWxsIGFmdGVyIGZvcmsoKS4gVGh1cywgbm8gZnVuY3Rpb24KKyAqIGNhbGxzIC0gd2hpY2ggbWVhbnMgaW5saW5lIGNvZGUgZm9yIGZvcmsgdG9vLCBhcyBvdGhlcndpc2Ugd2UKKyAqIHdvdWxkIHVzZSB0aGUgc3RhY2sgdXBvbiBleGl0IGZyb20gJ2ZvcmsoKScuCisgKgorICogQWN0dWFsbHkgb25seSBwYXVzZSBhbmQgZm9yayBhcmUgbmVlZGVkIGlubGluZSwgc28gdGhhdCB0aGVyZQorICogd29uJ3QgYmUgYW55IG1lc3Npbmcgd2l0aCB0aGUgc3RhY2sgZnJvbSBtYWluKCksIGJ1dCB3ZSBkZWZpbmUKKyAqIHNvbWUgb3RoZXJzIHRvby4KKyAqLworI2RlZmluZSBfX05SX19leGl0IF9fTlJfZXhpdAorc3RhdGljIGlubGluZSBfc3lzY2FsbDAoaW50LHBhdXNlKQorc3RhdGljIGlubGluZSBfc3lzY2FsbDAoaW50LHN5bmMpCitzdGF0aWMgaW5saW5lIF9zeXNjYWxsMChwaWRfdCxzZXRzaWQpCitzdGF0aWMgaW5saW5lIF9zeXNjYWxsMyhpbnQsd3JpdGUsaW50LGZkLGNvbnN0IGNoYXIgKixidWYsb2ZmX3QsY291bnQpCitzdGF0aWMgaW5saW5lIF9zeXNjYWxsMyhpbnQscmVhZCxpbnQsZmQsY2hhciAqLGJ1ZixvZmZfdCxjb3VudCkKK3N0YXRpYyBpbmxpbmUgX3N5c2NhbGwzKG9mZl90LGxzZWVrLGludCxmZCxvZmZfdCxvZmZzZXQsaW50LGNvdW50KQorc3RhdGljIGlubGluZSBfc3lzY2FsbDEoaW50LGR1cCxpbnQsZmQpCitzdGF0aWMgaW5saW5lIF9zeXNjYWxsMyhpbnQsZXhlY3ZlLGNvbnN0IGNoYXIgKixmaWxlLGNoYXIgKiosYXJndixjaGFyICoqLGVudnApCitzdGF0aWMgaW5saW5lIF9zeXNjYWxsMyhpbnQsb3Blbixjb25zdCBjaGFyICosZmlsZSxpbnQsZmxhZyxpbnQsbW9kZSkKK3N0YXRpYyBpbmxpbmUgX3N5c2NhbGwxKGludCxjbG9zZSxpbnQsZmQpCitzdGF0aWMgaW5saW5lIF9zeXNjYWxsMShpbnQsX2V4aXQsaW50LGV4aXRjb2RlKQorc3RhdGljIGlubGluZSBfc3lzY2FsbDMocGlkX3Qsd2FpdHBpZCxwaWRfdCxwaWQsaW50ICosd2FpdF9zdGF0LGludCxvcHRpb25zKQorc3RhdGljIGlubGluZSBfc3lzY2FsbDEoaW50LGRlbGV0ZV9tb2R1bGUsY29uc3QgY2hhciAqLG5hbWUpCisKK3N0YXRpYyBpbmxpbmUgcGlkX3Qgd2FpdChpbnQgKiB3YWl0X3N0YXQpCit7CisJcmV0dXJuIHdhaXRwaWQoLTEsd2FpdF9zdGF0LDApOworfQorCithc21saW5rYWdlIGxvbmcgc3lzX21tYXAyKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sCisJCQl1bnNpZ25lZCBsb25nIHByb3QsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCisJCQl1bnNpZ25lZCBsb25nIGZkLCB1bnNpZ25lZCBsb25nIHBnb2ZmKTsKK2FzbWxpbmthZ2UgaW50IHN5c19leGVjdmUoY2hhciAqbmFtZSwgY2hhciAqKmFyZ3YsIGNoYXIgKiplbnZwLAorCQkJaW50IGR1bW15LCAuLi4pOworYXNtbGlua2FnZSBpbnQgc3lzX3BpcGUodW5zaWduZWQgbG9uZyAqZmlsZGVzKTsKK2FzbWxpbmthZ2UgaW50IHN5c19wdHJhY2UobG9uZyByZXF1ZXN0LCBsb25nIHBpZCwgbG9uZyBhZGRyLCBsb25nIGRhdGEpOworc3RydWN0IHNpZ2FjdGlvbjsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfcnRfc2lnYWN0aW9uKGludCBzaWcsCisJCQkJY29uc3Qgc3RydWN0IHNpZ2FjdGlvbiBfX3VzZXIgKmFjdCwKKwkJCQlzdHJ1Y3Qgc2lnYWN0aW9uIF9fdXNlciAqb2FjdCwKKwkJCQlzaXplX3Qgc2lnc2V0c2l6ZSk7CisKKyNlbmRpZgorCisvKgorICogIkNvbmRpdGlvbmFsIiBzeXNjYWxscworICovCisjZGVmaW5lIGNvbmRfc3lzY2FsbChuYW1lKQkJCQkJCVwKKyAgYXNtICgiLndlYWtcdF8iICNuYW1lICJcbiIJCQkJXAorICAgICAgICIuc2V0XHRfIiAjbmFtZSAiLF9zeXNfbmlfc3lzY2FsbCIpOworCisjZW5kaWYgLyogX0FTTV9IODMwMF9VTklTVERfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWg4MzAwL3VzZXIuaCBiL2luY2x1ZGUvYXNtLWg4MzAwL3VzZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzY0Zjk5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvdXNlci5oCkBAIC0wLDAgKzEsNzYgQEAKKyNpZm5kZWYgX0g4MzAwX1VTRVJfSAorI2RlZmluZSBfSDgzMDBfVVNFUl9ICisKKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorCisvKiBDb3JlIGZpbGUgZm9ybWF0OiBUaGUgY29yZSBmaWxlIGlzIHdyaXR0ZW4gaW4gc3VjaCBhIHdheSB0aGF0IGdkYgorICAgY2FuIHVuZGVyc3RhbmQgaXQgYW5kIHByb3ZpZGUgdXNlZnVsIGluZm9ybWF0aW9uIHRvIHRoZSB1c2VyICh1bmRlcgorICAgbGludXggd2UgdXNlIHRoZSAndHJhZC1jb3JlJyBiZmQpLiAgVGhlcmUgYXJlIHF1aXRlIGEgbnVtYmVyIG9mCisgICBvYnN0YWNsZXMgdG8gYmVpbmcgYWJsZSB0byB2aWV3IHRoZSBjb250ZW50cyBvZiB0aGUgZmxvYXRpbmcgcG9pbnQKKyAgIHJlZ2lzdGVycywgYW5kIHVudGlsIHRoZXNlIGFyZSBzb2x2ZWQgeW91IHdpbGwgbm90IGJlIGFibGUgdG8gdmlldyB0aGUKKyAgIGNvbnRlbnRzIG9mIHRoZW0uICBBY3R1YWxseSwgeW91IGNhbiByZWFkIGluIHRoZSBjb3JlIGZpbGUgYW5kIGxvb2sgYXQKKyAgIHRoZSBjb250ZW50cyBvZiB0aGUgdXNlciBzdHJ1Y3QgdG8gZmluZCBvdXQgd2hhdCB0aGUgZmxvYXRpbmcgcG9pbnQKKyAgIHJlZ2lzdGVycyBjb250YWluLgorICAgVGhlIGFjdHVhbCBmaWxlIGNvbnRlbnRzIGFyZSBhcyBmb2xsb3dzOgorICAgVVBBR0U6IDEgcGFnZSBjb25zaXN0aW5nIG9mIGEgdXNlciBzdHJ1Y3QgdGhhdCB0ZWxscyBnZGIgd2hhdCBpcyBwcmVzZW50CisgICBpbiB0aGUgZmlsZS4gIERpcmVjdGx5IGFmdGVyIHRoaXMgaXMgYSBjb3B5IG9mIHRoZSB0YXNrX3N0cnVjdCwgd2hpY2gKKyAgIGlzIGN1cnJlbnRseSBub3QgdXNlZCBieSBnZGIsIGJ1dCBpdCBtYXkgY29tZSBpbiB1c2VmdWwgYXQgc29tZSBwb2ludC4KKyAgIEFsbCBvZiB0aGUgcmVnaXN0ZXJzIGFyZSBzdG9yZWQgYXMgcGFydCBvZiB0aGUgdXBhZ2UuICBUaGUgdXBhZ2Ugc2hvdWxkCisgICBhbHdheXMgYmUgb25seSBvbmUgcGFnZS4KKyAgIERBVEE6IFRoZSBkYXRhIGFyZWEgaXMgc3RvcmVkLiAgV2UgdXNlIGN1cnJlbnQtPmVuZF90ZXh0IHRvCisgICBjdXJyZW50LT5icmsgdG8gcGljayB1cCBhbGwgb2YgdGhlIHVzZXIgdmFyaWFibGVzLCBwbHVzIGFueSBtZW1vcnkKKyAgIHRoYXQgbWF5IGhhdmUgYmVlbiBtYWxsb2NlZC4gIE5vIGF0dGVtcHQgaXMgbWFkZSB0byBkZXRlcm1pbmUgaWYgYSBwYWdlCisgICBpcyBkZW1hbmQtemVybyBvciBpZiBhIHBhZ2UgaXMgdG90YWxseSB1bnVzZWQsIHdlIGp1c3QgY292ZXIgdGhlIGVudGlyZQorICAgcmFuZ2UuICBBbGwgb2YgdGhlIGFkZHJlc3NlcyBhcmUgcm91bmRlZCBpbiBzdWNoIGEgd2F5IHRoYXQgYW4gaW50ZWdyYWwKKyAgIG51bWJlciBvZiBwYWdlcyBpcyB3cml0dGVuLgorICAgU1RBQ0s6IFdlIG5lZWQgdGhlIHN0YWNrIGluZm9ybWF0aW9uIGluIG9yZGVyIHRvIGdldCBhIG1lYW5pbmdmdWwKKyAgIGJhY2t0cmFjZS4gIFdlIG5lZWQgdG8gd3JpdGUgdGhlIGRhdGEgZnJvbSAoZXNwKSB0bworICAgY3VycmVudC0+c3RhcnRfc3RhY2ssIHNvIHdlIHJvdW5kIGVhY2ggb2YgdGhlc2Ugb2ZmIGluIG9yZGVyIHRvIGJlIGFibGUKKyAgIHRvIHdyaXRlIGFuIGludGVnZXIgbnVtYmVyIG9mIHBhZ2VzLgorICAgVGhlIG1pbmltdW0gY29yZSBmaWxlIHNpemUgaXMgMyBwYWdlcywgb3IgMTIyODggYnl0ZXMuCisqLworCisvKiBUaGlzIGlzIHRoZSBvbGQgbGF5b3V0IG9mICJzdHJ1Y3QgcHRfcmVncyIgYXMgb2YgTGludXggMS54LCBhbmQKKyAgIGlzIHN0aWxsIHRoZSBsYXlvdXQgdXNlZCBieSB1c2VyICh0aGUgbmV3IHB0X3JlZ3MgZG9lc24ndCBoYXZlCisgICBhbGwgcmVnaXN0ZXJzKS4gKi8KK3N0cnVjdCB1c2VyX3JlZ3Nfc3RydWN0IHsKKwlsb25nIGVyMSxlcjIsZXIzLGVyNCxlcjUsZXI2OworCWxvbmcgZXIwOworCWxvbmcgdXNwOworCWxvbmcgb3JpZ19lcjA7CisJc2hvcnQgY2NyOworCWxvbmcgcGM7Cit9OworCisJCisvKiBXaGVuIHRoZSBrZXJuZWwgZHVtcHMgY29yZSwgaXQgc3RhcnRzIGJ5IGR1bXBpbmcgdGhlIHVzZXIgc3RydWN0IC0KKyAgIHRoaXMgd2lsbCBiZSB1c2VkIGJ5IGdkYiB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBkYXRhIGFuZCBzdGFjayBzZWdtZW50cworICAgYXJlIHdpdGhpbiB0aGUgZmlsZSwgYW5kIHdoYXQgdmlydHVhbCBhZGRyZXNzZXMgdG8gdXNlLiAqLworc3RydWN0IHVzZXJ7CisvKiBXZSBzdGFydCB3aXRoIHRoZSByZWdpc3RlcnMsIHRvIG1pbWljIHRoZSB3YXkgdGhhdCAibWVtb3J5IiBpcyByZXR1cm5lZAorICAgZnJvbSB0aGUgcHRyYWNlKDMsLi4uKSBmdW5jdGlvbi4gICovCisgIHN0cnVjdCB1c2VyX3JlZ3Nfc3RydWN0IHJlZ3M7CS8qIFdoZXJlIHRoZSByZWdpc3RlcnMgYXJlIGFjdHVhbGx5IHN0b3JlZCAqLworLyogcHRyYWNlIGRvZXMgbm90IHlldCBzdXBwbHkgdGhlc2UuICBTb21lZGF5Li4uLiAqLworLyogVGhlIHJlc3Qgb2YgdGhpcyBqdW5rIGlzIHRvIGhlbHAgZ2RiIGZpZ3VyZSBvdXQgd2hhdCBnb2VzIHdoZXJlICovCisgIHVuc2lnbmVkIGxvbmcgaW50IHVfdHNpemU7CS8qIFRleHQgc2VnbWVudCBzaXplIChwYWdlcykuICovCisgIHVuc2lnbmVkIGxvbmcgaW50IHVfZHNpemU7CS8qIERhdGEgc2VnbWVudCBzaXplIChwYWdlcykuICovCisgIHVuc2lnbmVkIGxvbmcgaW50IHVfc3NpemU7CS8qIFN0YWNrIHNlZ21lbnQgc2l6ZSAocGFnZXMpLiAqLworICB1bnNpZ25lZCBsb25nIHN0YXJ0X2NvZGU7ICAgICAvKiBTdGFydGluZyB2aXJ0dWFsIGFkZHJlc3Mgb2YgdGV4dC4gKi8KKyAgdW5zaWduZWQgbG9uZyBzdGFydF9zdGFjazsJLyogU3RhcnRpbmcgdmlydHVhbCBhZGRyZXNzIG9mIHN0YWNrIGFyZWEuCisJCQkJICAgVGhpcyBpcyBhY3R1YWxseSB0aGUgYm90dG9tIG9mIHRoZSBzdGFjaywKKwkJCQkgICB0aGUgdG9wIG9mIHRoZSBzdGFjayBpcyBhbHdheXMgZm91bmQgaW4gdGhlCisJCQkJICAgZXNwIHJlZ2lzdGVyLiAgKi8KKyAgbG9uZyBpbnQgc2lnbmFsOyAgICAgCQkvKiBTaWduYWwgdGhhdCBjYXVzZWQgdGhlIGNvcmUgZHVtcC4gKi8KKyAgaW50IHJlc2VydmVkOwkJCS8qIE5vIGxvbmdlciB1c2VkICovCisgIHN0cnVjdCB1c2VyX3JlZ3Nfc3RydWN0ICp1X2FyMDsKKwkJCQkvKiBVc2VkIGJ5IGdkYiB0byBoZWxwIGZpbmQgdGhlIHZhbHVlcyBmb3IgKi8KKwkJCQkvKiB0aGUgcmVnaXN0ZXJzLiAqLworICB1bnNpZ25lZCBsb25nIG1hZ2ljOwkJLyogVG8gdW5pcXVlbHkgaWRlbnRpZnkgYSBjb3JlIGZpbGUgKi8KKyAgY2hhciB1X2NvbW1bMzJdOwkJLyogVXNlciBjb21tYW5kIHRoYXQgd2FzIHJlc3BvbnNpYmxlICovCit9OworI2RlZmluZSBOQlBHIFBBR0VfU0laRQorI2RlZmluZSBVUEFHRVMgMQorI2RlZmluZSBIT1NUX1RFWFRfU1RBUlRfQUREUiAodS5zdGFydF9jb2RlKQorI2RlZmluZSBIT1NUX1NUQUNLX0VORF9BRERSICh1LnN0YXJ0X3N0YWNrICsgdS51X3NzaXplICogTkJQRykKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1oODMwMC92aXJ0Y29udmVydC5oIGIvaW5jbHVkZS9hc20taDgzMDAvdmlydGNvbnZlcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjM0NGMxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvdmlydGNvbnZlcnQuaApAQCAtMCwwICsxLDIzIEBACisjaWZuZGVmIF9fSDgzMDBfVklSVF9DT05WRVJUX18KKyNkZWZpbmUgX19IODMwMF9WSVJUX0NPTlZFUlRfXworCisvKgorICogTWFjcm9zIHVzZWQgZm9yIGNvbnZlcnRpbmcgYmV0d2VlbiB2aXJ0dWFsIGFuZCBwaHlzaWNhbCBtYXBwaW5ncy4KKyAqLworCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKworI2RlZmluZSBtbV9wdG92KHZhZGRyKQkJKCh2b2lkICopICh2YWRkcikpCisjZGVmaW5lIG1tX3Z0b3AodmFkZHIpCQkoKHVuc2lnbmVkIGxvbmcpICh2YWRkcikpCisjZGVmaW5lIHBoeXNfdG9fdmlydCh2YWRkcikJKCh2b2lkICopICh2YWRkcikpCisjZGVmaW5lIHZpcnRfdG9fcGh5cyh2YWRkcikJKCh1bnNpZ25lZCBsb25nKSAodmFkZHIpKQorCisjZGVmaW5lIHZpcnRfdG9fYnVzIHZpcnRfdG9fcGh5cworI2RlZmluZSBidXNfdG9fdmlydCBwaHlzX3RvX3ZpcnQKKworI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvODI1M3BpdC5oIGIvaW5jbHVkZS9hc20taTM4Ni84MjUzcGl0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZjN2MzNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvODI1M3BpdC5oCkBAIC0wLDAgKzEsMTIgQEAKKy8qCisgKiA4MjUzLzgyNTQgUHJvZ3JhbW1hYmxlIEludGVydmFsIFRpbWVyCisgKi8KKworI2lmbmRlZiBfODI1M1BJVF9ICisjZGVmaW5lIF84MjUzUElUX0gKKworI2luY2x1ZGUgPGFzbS90aW1leC5oPgorCisjZGVmaW5lIFBJVF9USUNLX1JBVEUgCUNMT0NLX1RJQ0tfUkFURQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvYS5vdXQuaCBiL2luY2x1ZGUvYXNtLWkzODYvYS5vdXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjE3YmI4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9hLm91dC5oCkBAIC0wLDAgKzEsMjYgQEAKKyNpZm5kZWYgX19JMzg2X0FfT1VUX0hfXworI2RlZmluZSBfX0kzODZfQV9PVVRfSF9fCisKK3N0cnVjdCBleGVjCit7CisgIHVuc2lnbmVkIGxvbmcgYV9pbmZvOwkJLyogVXNlIG1hY3JvcyBOX01BR0lDLCBldGMgZm9yIGFjY2VzcyAqLworICB1bnNpZ25lZCBhX3RleHQ7CQkvKiBsZW5ndGggb2YgdGV4dCwgaW4gYnl0ZXMgKi8KKyAgdW5zaWduZWQgYV9kYXRhOwkJLyogbGVuZ3RoIG9mIGRhdGEsIGluIGJ5dGVzICovCisgIHVuc2lnbmVkIGFfYnNzOwkJLyogbGVuZ3RoIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSBhcmVhIGZvciBmaWxlLCBpbiBieXRlcyAqLworICB1bnNpZ25lZCBhX3N5bXM7CQkvKiBsZW5ndGggb2Ygc3ltYm9sIHRhYmxlIGRhdGEgaW4gZmlsZSwgaW4gYnl0ZXMgKi8KKyAgdW5zaWduZWQgYV9lbnRyeTsJCS8qIHN0YXJ0IGFkZHJlc3MgKi8KKyAgdW5zaWduZWQgYV90cnNpemU7CQkvKiBsZW5ndGggb2YgcmVsb2NhdGlvbiBpbmZvIGZvciB0ZXh0LCBpbiBieXRlcyAqLworICB1bnNpZ25lZCBhX2Ryc2l6ZTsJCS8qIGxlbmd0aCBvZiByZWxvY2F0aW9uIGluZm8gZm9yIGRhdGEsIGluIGJ5dGVzICovCit9OworCisjZGVmaW5lIE5fVFJTSVpFKGEpCSgoYSkuYV90cnNpemUpCisjZGVmaW5lIE5fRFJTSVpFKGEpCSgoYSkuYV9kcnNpemUpCisjZGVmaW5lIE5fU1lNU0laRShhKQkoKGEpLmFfc3ltcykKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2RlZmluZSBTVEFDS19UT1AJVEFTS19TSVpFCisKKyNlbmRpZgorCisjZW5kaWYgLyogX19BX09VVF9HTlVfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L2FjcGkuaCBiL2luY2x1ZGUvYXNtLWkzODYvYWNwaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NzZjMWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2FjcGkuaApAQCAtMCwwICsxLDE5MCBAQAorLyoKKyAqICBhc20taTM4Ni9hY3BpLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBhdWwgRGllZmVuYmF1Z2ggPHBhdWwucy5kaWVmZW5iYXVnaEBpbnRlbC5jb20+CisgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBhdHJpY2sgTW9jaGVsIDxtb2NoZWxAb3NkbC5vcmc+CisgICoKKyAqIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyAqLworCisjaWZuZGVmIF9BU01fQUNQSV9ICisjZGVmaW5lIF9BU01fQUNQSV9ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CQkvKiBkZWZpbmVzIGNtcHhjaGcgKi8KKworI2RlZmluZSBDT01QSUxFUl9ERVBFTkRFTlRfSU5UNjQgICBsb25nIGxvbmcKKyNkZWZpbmUgQ09NUElMRVJfREVQRU5ERU5UX1VJTlQ2NCAgdW5zaWduZWQgbG9uZyBsb25nCisKKy8qCisgKiBDYWxsaW5nIGNvbnZlbnRpb25zOgorICoKKyAqIEFDUElfU1lTVEVNX1hGQUNFICAgICAgICAtIEludGVyZmFjZXMgdG8gaG9zdCBPUyAoaGFuZGxlcnMsIHRocmVhZHMpCisgKiBBQ1BJX0VYVEVSTkFMX1hGQUNFICAgICAgLSBFeHRlcm5hbCBBQ1BJIGludGVyZmFjZXMgCisgKiBBQ1BJX0lOVEVSTkFMX1hGQUNFICAgICAgLSBJbnRlcm5hbCBBQ1BJIGludGVyZmFjZXMKKyAqIEFDUElfSU5URVJOQUxfVkFSX1hGQUNFICAtIEludGVybmFsIHZhcmlhYmxlLXBhcmFtZXRlciBsaXN0IGludGVyZmFjZXMKKyAqLworI2RlZmluZSBBQ1BJX1NZU1RFTV9YRkFDRQorI2RlZmluZSBBQ1BJX0VYVEVSTkFMX1hGQUNFCisjZGVmaW5lIEFDUElfSU5URVJOQUxfWEZBQ0UKKyNkZWZpbmUgQUNQSV9JTlRFUk5BTF9WQVJfWEZBQ0UKKworLyogQXNtIG1hY3JvcyAqLworCisjZGVmaW5lIEFDUElfQVNNX01BQ1JPUworI2RlZmluZSBCUkVBS1BPSU5UMworI2RlZmluZSBBQ1BJX0RJU0FCTEVfSVJRUygpIGxvY2FsX2lycV9kaXNhYmxlKCkKKyNkZWZpbmUgQUNQSV9FTkFCTEVfSVJRUygpICBsb2NhbF9pcnFfZW5hYmxlKCkKKyNkZWZpbmUgQUNQSV9GTFVTSF9DUFVfQ0FDSEUoKQl3YmludmQoKQorCisKK3N0YXRpYyBpbmxpbmUgaW50CitfX2FjcGlfYWNxdWlyZV9nbG9iYWxfbG9jayAodW5zaWduZWQgaW50ICpsb2NrKQoreworCXVuc2lnbmVkIGludCBvbGQsIG5ldywgdmFsOworCWRvIHsKKwkJb2xkID0gKmxvY2s7CisJCW5ldyA9ICgoKG9sZCAmIH4weDMpICsgMikgKyAoKG9sZCA+PiAxKSAmIDB4MSkpOworCQl2YWwgPSBjbXB4Y2hnKGxvY2ssIG9sZCwgbmV3KTsKKwl9IHdoaWxlICh1bmxpa2VseSAodmFsICE9IG9sZCkpOworCXJldHVybiAobmV3IDwgMykgPyAtMSA6IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitfX2FjcGlfcmVsZWFzZV9nbG9iYWxfbG9jayAodW5zaWduZWQgaW50ICpsb2NrKQoreworCXVuc2lnbmVkIGludCBvbGQsIG5ldywgdmFsOworCWRvIHsKKwkJb2xkID0gKmxvY2s7CisJCW5ldyA9IG9sZCAmIH4weDM7CisJCXZhbCA9IGNtcHhjaGcobG9jaywgb2xkLCBuZXcpOworCX0gd2hpbGUgKHVubGlrZWx5ICh2YWwgIT0gb2xkKSk7CisJcmV0dXJuIG9sZCAmIDB4MTsKK30KKworI2RlZmluZSBBQ1BJX0FDUVVJUkVfR0xPQkFMX0xPQ0soR0xwdHIsIEFjcSkgXAorCSgoQWNxKSA9IF9fYWNwaV9hY3F1aXJlX2dsb2JhbF9sb2NrKCh1bnNpZ25lZCBpbnQgKikgR0xwdHIpKQorCisjZGVmaW5lIEFDUElfUkVMRUFTRV9HTE9CQUxfTE9DSyhHTHB0ciwgQWNxKSBcCisJKChBY3EpID0gX19hY3BpX3JlbGVhc2VfZ2xvYmFsX2xvY2soKHVuc2lnbmVkIGludCAqKSBHTHB0cikpCisKKy8qCisgKiBNYXRoIGhlbHBlciBhc20gbWFjcm9zCisgKi8KKyNkZWZpbmUgQUNQSV9ESVZfNjRfQllfMzIobl9oaSwgbl9sbywgZDMyLCBxMzIsIHIzMikgXAorICAgICAgICBhc20oImRpdmwgJTI7IiAgICAgICAgXAorICAgICAgICA6Ij1hIihxMzIpLCAiPWQiKHIzMikgXAorICAgICAgICA6InIiKGQzMiksICAgICAgICAgICAgXAorICAgICAgICAiMCIobl9sbyksICIxIihuX2hpKSkKKworCisjZGVmaW5lIEFDUElfU0hJRlRfUklHSFRfNjQobl9oaSwgbl9sbykgXAorICAgIGFzbSgic2hybCAgICQxLCUyOyIgICAgICAgICAgICAgXAorICAgICAgICAicmNybCAgICQxLCUzOyIgICAgICAgICAgICAgXAorICAgICAgICA6Ij1yIihuX2hpKSwgIj1yIihuX2xvKSAgICAgXAorICAgICAgICA6IjAiKG5faGkpLCAiMSIobl9sbykpCisKKy8qCisgKiBSZWZlciBJbnRlbCBBQ1BJIF9QREMgc3VwcG9ydCBkb2N1bWVudCBmb3IgYml0IGRlZmluaXRpb25zCisgKi8KKyNkZWZpbmUgQUNQSV9QRENfRVNUX0NBUEFCSUxJVFlfU01QIAkweGEKKyNkZWZpbmUgQUNQSV9QRENfRVNUX0NBUEFCSUxJVFlfTVNSCTB4MQorCisjaWZkZWYgQ09ORklHX0FDUElfQk9PVCAKK2V4dGVybiBpbnQgYWNwaV9sYXBpYzsKK2V4dGVybiBpbnQgYWNwaV9pb2FwaWM7CitleHRlcm4gaW50IGFjcGlfbm9pcnE7CitleHRlcm4gaW50IGFjcGlfc3RyaWN0OworZXh0ZXJuIGludCBhY3BpX2Rpc2FibGVkOworZXh0ZXJuIGludCBhY3BpX2h0OworZXh0ZXJuIGludCBhY3BpX3BjaV9kaXNhYmxlZDsKK3N0YXRpYyBpbmxpbmUgdm9pZCBkaXNhYmxlX2FjcGkodm9pZCkgCit7IAorCWFjcGlfZGlzYWJsZWQgPSAxOyAKKwlhY3BpX2h0ID0gMDsKKwlhY3BpX3BjaV9kaXNhYmxlZCA9IDE7CisJYWNwaV9ub2lycSA9IDE7Cit9CisKKy8qIEZpeG1hcCBwYWdlcyB0byByZXNlcnZlIGZvciBBQ1BJIGJvb3QtdGltZSB0YWJsZXMgKHNlZSBmaXhtYXAuaCkgKi8KKyNkZWZpbmUgRklYX0FDUElfUEFHRVMgNAorCitleHRlcm4gaW50IGFjcGlfZ3NpX3RvX2lycSh1MzIgZ3NpLCB1bnNpZ25lZCBpbnQgKmlycSk7CisKKyNpZmRlZiBDT05GSUdfWDg2X0lPX0FQSUMKK2V4dGVybiBpbnQgc2tpcF9pb2FwaWNfc2V0dXA7CitleHRlcm4gaW50IGFjcGlfc2tpcF90aW1lcl9vdmVycmlkZTsKKworZXh0ZXJuIHZvaWQgY2hlY2tfYWNwaV9wY2kodm9pZCk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkaXNhYmxlX2lvYXBpY19zZXR1cCh2b2lkKQoreworCXNraXBfaW9hcGljX3NldHVwID0gMTsKK30KKworc3RhdGljIGlubGluZSBpbnQgaW9hcGljX3NldHVwX2Rpc2FibGVkKHZvaWQpCit7CisJcmV0dXJuIHNraXBfaW9hcGljX3NldHVwOworfQorCisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGRpc2FibGVfaW9hcGljX3NldHVwKHZvaWQpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIGNoZWNrX2FjcGlfcGNpKHZvaWQpIHsgfQorCisjZW5kaWYKKworI2Vsc2UJLyogQ09ORklHX0FDUElfQk9PVCAqLworIyAgZGVmaW5lIGFjcGlfbGFwaWMgMAorIyAgZGVmaW5lIGFjcGlfaW9hcGljIDAKKworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQUNQSV9QQ0kKK3N0YXRpYyBpbmxpbmUgdm9pZCBhY3BpX25vaXJxX3NldCh2b2lkKSB7IGFjcGlfbm9pcnEgPSAxOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgYWNwaV9kaXNhYmxlX3BjaSh2b2lkKSAKK3sKKwlhY3BpX3BjaV9kaXNhYmxlZCA9IDE7IAorCWFjcGlfbm9pcnFfc2V0KCk7Cit9CitleHRlcm4gaW50IGFjcGlfaXJxX2JhbGFuY2Vfc2V0KGNoYXIgKnN0cik7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGFjcGlfbm9pcnFfc2V0KHZvaWQpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIGFjcGlfZGlzYWJsZV9wY2kodm9pZCkgeyB9CitzdGF0aWMgaW5saW5lIGludCBhY3BpX2lycV9iYWxhbmNlX3NldChjaGFyICpzdHIpIHsgcmV0dXJuIDA7IH0KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0FDUElfU0xFRVAKKworLyogcm91dGluZXMgZm9yIHNhdmluZy9yZXN0b3Jpbmcga2VybmVsIHN0YXRlICovCitleHRlcm4gaW50IGFjcGlfc2F2ZV9zdGF0ZV9tZW0odm9pZCk7CitleHRlcm4gdm9pZCBhY3BpX3Jlc3RvcmVfc3RhdGVfbWVtKHZvaWQpOworCitleHRlcm4gdW5zaWduZWQgbG9uZyBhY3BpX3dha2V1cF9hZGRyZXNzOworCisvKiBlYXJseSBpbml0aWFsaXphdGlvbiByb3V0aW5lICovCitleHRlcm4gdm9pZCBhY3BpX3Jlc2VydmVfYm9vdG1lbSh2b2lkKTsKKworI2VuZGlmIC8qQ09ORklHX0FDUElfU0xFRVAqLworCitleHRlcm4gdTggeDg2X2FjcGlpZF90b19hcGljaWRbXTsKKworI2VuZGlmIC8qX19LRVJORUxfXyovCisKKyNlbmRpZiAvKl9BU01fQUNQSV9IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvYWdwLmggYi9pbmNsdWRlL2FzbS1pMzg2L2FncC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5MTdmZjUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2FncC5oCkBAIC0wLDAgKzEsMjQgQEAKKyNpZm5kZWYgQUdQX0gKKyNkZWZpbmUgQUdQX0ggMQorCisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorCisvKiAKKyAqIEZ1bmN0aW9ucyB0byBrZWVwIHRoZSBhZ3BnYXJ0IG1hcHBpbmdzIGNvaGVyZW50IHdpdGggdGhlIE1NVS4KKyAqIFRoZSBHQVJUIGdpdmVzIHRoZSBDUFUgYSBwaHlzaWNhbCBhbGlhcyBvZiBwYWdlcyBpbiBtZW1vcnkuIFRoZSBhbGlhcyByZWdpb24gaXMKKyAqIG1hcHBlZCB1bmNhY2hlYWJsZS4gTWFrZSBzdXJlIHRoZXJlIGFyZSBubyBjb25mbGljdGluZyBtYXBwaW5ncworICogd2l0aCBkaWZmZXJlbnQgY2FjaGFiaWxpdHkgYXR0cmlidXRlcyBmb3IgdGhlIHNhbWUgcGFnZS4gVGhpcyBhdm9pZHMKKyAqIGRhdGEgY29ycnVwdGlvbiBvbiBzb21lIENQVXMuCisgKi8KKworaW50IG1hcF9wYWdlX2ludG9fYWdwKHN0cnVjdCBwYWdlICpwYWdlKTsKK2ludCB1bm1hcF9wYWdlX2Zyb21fYWdwKHN0cnVjdCBwYWdlICpwYWdlKTsKKyNkZWZpbmUgZmx1c2hfYWdwX21hcHBpbmdzKCkgZ2xvYmFsX2ZsdXNoX3RsYigpCisKKy8qIENvdWxkIHVzZSBDTEZMVVNIIGhlcmUgaWYgdGhlIGNwdSBzdXBwb3J0cyBpdC4gQnV0IHRoZW4gaXQgd291bGQKKyAgIG5lZWQgdG8gYmUgY2FsbGVkIGZvciBlYWNoIGNhY2hlbGluZSBvZiB0aGUgd2hvbGUgcGFnZSBzbyBpdCBtYXkgbm90IGJlIAorICAgd29ydGggaXQuIFdvdWxkIG5lZWQgYSBwYWdlIGZvciBpdC4gKi8KKyNkZWZpbmUgZmx1c2hfYWdwX2NhY2hlKCkgYXNtIHZvbGF0aWxlKCJ3YmludmQiOjo6Im1lbW9yeSIpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9hcGljLmggYi9pbmNsdWRlL2FzbS1pMzg2L2FwaWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWRlNjc0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9hcGljLmgKQEAgLTAsMCArMSwxMjYgQEAKKyNpZm5kZWYgX19BU01fQVBJQ19ICisjZGVmaW5lIF9fQVNNX0FQSUNfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxhc20vZml4bWFwLmg+CisjaW5jbHVkZSA8YXNtL2FwaWNkZWYuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisKKyNkZWZpbmUgRHByaW50ayh4Li4uKQorCisvKgorICogRGVidWdnaW5nIG1hY3JvcworICovCisjZGVmaW5lIEFQSUNfUVVJRVQgICAwCisjZGVmaW5lIEFQSUNfVkVSQk9TRSAxCisjZGVmaW5lIEFQSUNfREVCVUcgICAyCisKK2V4dGVybiBpbnQgYXBpY192ZXJib3NpdHk7CisKKy8qCisgKiBEZWZpbmUgdGhlIGRlZmF1bHQgbGV2ZWwgb2Ygb3V0cHV0IHRvIGJlIHZlcnkgbGl0dGxlCisgKiBUaGlzIGNhbiBiZSB0dXJuZWQgdXAgYnkgdXNpbmcgYXBpYz12ZXJib3NlIGZvciBtb3JlCisgKiBpbmZvcm1hdGlvbiBhbmQgYXBpYz1kZWJ1ZyBmb3IgX2xvdHNfIG9mIGluZm9ybWF0aW9uLgorICogYXBpY192ZXJib3NpdHkgaXMgZGVmaW5lZCBpbiBhcGljLmMKKyAqLworI2RlZmluZSBhcGljX3ByaW50ayh2LCBzLCBhLi4uKSBkbyB7ICAgICAgIFwKKwkJaWYgKCh2KSA8PSBhcGljX3ZlcmJvc2l0eSkgXAorCQkJcHJpbnRrKHMsICMjYSk7ICAgIFwKKwl9IHdoaWxlICgwKQorCisKKyNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKKworLyoKKyAqIEJhc2ljIGZ1bmN0aW9ucyBhY2Nlc3NpbmcgQVBJQ3MuCisgKi8KKworc3RhdGljIF9faW5saW5lIHZvaWQgYXBpY193cml0ZSh1bnNpZ25lZCBsb25nIHJlZywgdW5zaWduZWQgbG9uZyB2KQoreworCSooKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoQVBJQ19CQVNFK3JlZykpID0gdjsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQgYXBpY193cml0ZV9hdG9taWModW5zaWduZWQgbG9uZyByZWcsIHVuc2lnbmVkIGxvbmcgdikKK3sKKwl4Y2hnKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKEFQSUNfQkFTRStyZWcpLCB2KTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGxvbmcgYXBpY19yZWFkKHVuc2lnbmVkIGxvbmcgcmVnKQoreworCXJldHVybiAqKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKEFQSUNfQkFTRStyZWcpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBhcGljX3dhaXRfaWNyX2lkbGUodm9pZCkKK3sKKwl3aGlsZSAoIGFwaWNfcmVhZCggQVBJQ19JQ1IgKSAmIEFQSUNfSUNSX0JVU1kgKQorCQljcHVfcmVsYXgoKTsKK30KKworaW50IGdldF9waHlzaWNhbF9icm9hZGNhc3Qodm9pZCk7CisKKyNpZmRlZiBDT05GSUdfWDg2X0dPT0RfQVBJQworIyBkZWZpbmUgRk9SQ0VfUkVBRF9BUk9VTkRfV1JJVEUgMAorIyBkZWZpbmUgYXBpY19yZWFkX2Fyb3VuZCh4KQorIyBkZWZpbmUgYXBpY193cml0ZV9hcm91bmQoeCx5KSBhcGljX3dyaXRlKCh4KSwoeSkpCisjZWxzZQorIyBkZWZpbmUgRk9SQ0VfUkVBRF9BUk9VTkRfV1JJVEUgMQorIyBkZWZpbmUgYXBpY19yZWFkX2Fyb3VuZCh4KSBhcGljX3JlYWQoeCkKKyMgZGVmaW5lIGFwaWNfd3JpdGVfYXJvdW5kKHgseSkgYXBpY193cml0ZV9hdG9taWMoKHgpLCh5KSkKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHZvaWQgYWNrX0FQSUNfaXJxKHZvaWQpCit7CisJLyoKKwkgKiBhY2tfQVBJQ19pcnEoKSBhY3R1YWxseSBnZXRzIGNvbXBpbGVkIGFzIGEgc2luZ2xlIGluc3RydWN0aW9uOgorCSAqIC0gYSBzaW5nbGUgcm13IG9uIFBlbnRpdW0vODI0ODlEWAorCSAqIC0gYSBzaW5nbGUgd3JpdGUgb24gUDYrIGNvcmVzIChDT05GSUdfWDg2X0dPT0RfQVBJQykKKwkgKiAuLi4geXVtbWllLgorCSAqLworCisJLyogRG9jcyBzYXkgdXNlIDAgZm9yIGZ1dHVyZSBjb21wYXRpYmlsaXR5ICovCisJYXBpY193cml0ZV9hcm91bmQoQVBJQ19FT0ksIDApOworfQorCitleHRlcm4gdm9pZCAoKndhaXRfdGltZXJfdGljaykodm9pZCk7CisKK2V4dGVybiBpbnQgZ2V0X21heGx2dCh2b2lkKTsKK2V4dGVybiB2b2lkIGNsZWFyX2xvY2FsX0FQSUModm9pZCk7CitleHRlcm4gdm9pZCBjb25uZWN0X2JzcF9BUElDICh2b2lkKTsKK2V4dGVybiB2b2lkIGRpc2Nvbm5lY3RfYnNwX0FQSUMgKHZvaWQpOworZXh0ZXJuIHZvaWQgZGlzYWJsZV9sb2NhbF9BUElDICh2b2lkKTsKK2V4dGVybiB2b2lkIGxhcGljX3NodXRkb3duICh2b2lkKTsKK2V4dGVybiBpbnQgdmVyaWZ5X2xvY2FsX0FQSUMgKHZvaWQpOworZXh0ZXJuIHZvaWQgY2FjaGVfQVBJQ19yZWdpc3RlcnMgKHZvaWQpOworZXh0ZXJuIHZvaWQgc3luY19BcmJfSURzICh2b2lkKTsKK2V4dGVybiB2b2lkIGluaXRfYnNwX0FQSUMgKHZvaWQpOworZXh0ZXJuIHZvaWQgc2V0dXBfbG9jYWxfQVBJQyAodm9pZCk7CitleHRlcm4gdm9pZCBpbml0X2FwaWNfbWFwcGluZ3MgKHZvaWQpOworZXh0ZXJuIHZvaWQgc21wX2xvY2FsX3RpbWVyX2ludGVycnVwdCAoc3RydWN0IHB0X3JlZ3MgKiByZWdzKTsKK2V4dGVybiB2b2lkIHNldHVwX2Jvb3RfQVBJQ19jbG9jayAodm9pZCk7CitleHRlcm4gdm9pZCBzZXR1cF9zZWNvbmRhcnlfQVBJQ19jbG9jayAodm9pZCk7CitleHRlcm4gdm9pZCBzZXR1cF9hcGljX25taV93YXRjaGRvZyAodm9pZCk7CitleHRlcm4gaW50IHJlc2VydmVfbGFwaWNfbm1pKHZvaWQpOworZXh0ZXJuIHZvaWQgcmVsZWFzZV9sYXBpY19ubWkodm9pZCk7CitleHRlcm4gdm9pZCBkaXNhYmxlX3RpbWVyX25taV93YXRjaGRvZyh2b2lkKTsKK2V4dGVybiB2b2lkIGVuYWJsZV90aW1lcl9ubWlfd2F0Y2hkb2codm9pZCk7CitleHRlcm4gdm9pZCBubWlfd2F0Y2hkb2dfdGljayAoc3RydWN0IHB0X3JlZ3MgKiByZWdzKTsKK2V4dGVybiBpbnQgQVBJQ19pbml0X3VuaXByb2Nlc3NvciAodm9pZCk7CitleHRlcm4gdm9pZCBkaXNhYmxlX0FQSUNfdGltZXIodm9pZCk7CitleHRlcm4gdm9pZCBlbmFibGVfQVBJQ190aW1lcih2b2lkKTsKKworZXh0ZXJuIGludCBjaGVja19ubWlfd2F0Y2hkb2cgKHZvaWQpOworZXh0ZXJuIHZvaWQgZW5hYmxlX05NSV90aHJvdWdoX0xWVDAgKHZvaWQgKiBkdW1teSk7CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgbm1pX3dhdGNoZG9nOworI2RlZmluZSBOTUlfTk9ORQkwCisjZGVmaW5lIE5NSV9JT19BUElDCTEKKyNkZWZpbmUgTk1JX0xPQ0FMX0FQSUMJMgorI2RlZmluZSBOTUlfSU5WQUxJRAkzCisKKyNlbHNlIC8qICFDT05GSUdfWDg2X0xPQ0FMX0FQSUMgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBsYXBpY19zaHV0ZG93bih2b2lkKSB7IH0KKworI2VuZGlmIC8qICFDT05GSUdfWDg2X0xPQ0FMX0FQSUMgKi8KKworI2VuZGlmIC8qIF9fQVNNX0FQSUNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9hcGljZGVmLmggYi9pbmNsdWRlL2FzbS1pMzg2L2FwaWNkZWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjg5NTU0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9hcGljZGVmLmgKQEAgLTAsMCArMSwzNzcgQEAKKyNpZm5kZWYgX19BU01fQVBJQ0RFRl9ICisjZGVmaW5lIF9fQVNNX0FQSUNERUZfSAorCisvKgorICogQ29uc3RhbnRzIGZvciB2YXJpb3VzIEludGVsIEFQSUNzLiAobG9jYWwgQVBJQywgSU9BUElDLCBldGMuKQorICoKKyAqIEFsYW4gQ294IDxBbGFuLkNveEBsaW51eC5vcmc+LCAxOTk1LgorICogSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+LCAxOTk5LCAyMDAwCisgKi8KKworI2RlZmluZQkJQVBJQ19ERUZBVUxUX1BIWVNfQkFTRQkweGZlZTAwMDAwCisgCisjZGVmaW5lCQlBUElDX0lECQkweDIwCisjZGVmaW5lCQlBUElDX0xWUgkweDMwCisjZGVmaW5lCQkJQVBJQ19MVlJfTUFTSwkJMHhGRjAwRkYKKyNkZWZpbmUJCQlHRVRfQVBJQ19WRVJTSU9OKHgpCSgoeCkmMHhGRikKKyNkZWZpbmUJCQlHRVRfQVBJQ19NQVhMVlQoeCkJKCgoeCk+PjE2KSYweEZGKQorI2RlZmluZQkJCUFQSUNfSU5URUdSQVRFRCh4KQkoKHgpJjB4RjApCisjZGVmaW5lCQlBUElDX1RBU0tQUkkJMHg4MAorI2RlZmluZQkJCUFQSUNfVFBSSV9NQVNLCQkweEZGCisjZGVmaW5lCQlBUElDX0FSQlBSSQkweDkwCisjZGVmaW5lCQkJQVBJQ19BUkJQUklfTUFTSwkweEZGCisjZGVmaW5lCQlBUElDX1BST0NQUkkJMHhBMAorI2RlZmluZQkJQVBJQ19FT0kJMHhCMAorI2RlZmluZQkJCUFQSUNfRUlPX0FDSwkJMHgwCQkvKiBXcml0ZSB0aGlzIHRvIHRoZSBFT0kgcmVnaXN0ZXIgKi8KKyNkZWZpbmUJCUFQSUNfUlJSCTB4QzAKKyNkZWZpbmUJCUFQSUNfTERSCTB4RDAKKyNkZWZpbmUJCQlBUElDX0xEUl9NQVNLCQkoMHhGRjw8MjQpCisjZGVmaW5lCQkJR0VUX0FQSUNfTE9HSUNBTF9JRCh4KQkoKCh4KT4+MjQpJjB4RkYpCisjZGVmaW5lCQkJU0VUX0FQSUNfTE9HSUNBTF9JRCh4KQkoKCh4KTw8MjQpKQorI2RlZmluZQkJCUFQSUNfQUxMX0NQVVMJCTB4RkYKKyNkZWZpbmUJCUFQSUNfREZSCTB4RTAKKyNkZWZpbmUJCQlBUElDX0RGUl9DTFVTVEVSCQkweDBGRkZGRkZGdWwKKyNkZWZpbmUJCQlBUElDX0RGUl9GTEFUCQkJMHhGRkZGRkZGRnVsCisjZGVmaW5lCQlBUElDX1NQSVYJMHhGMAorI2RlZmluZQkJCUFQSUNfU1BJVl9GT0NVU19ESVNBQkxFRAkoMTw8OSkKKyNkZWZpbmUJCQlBUElDX1NQSVZfQVBJQ19FTkFCTEVECQkoMTw8OCkKKyNkZWZpbmUJCUFQSUNfSVNSCTB4MTAwCisjZGVmaW5lCQlBUElDX1RNUgkweDE4MAorI2RlZmluZSAJQVBJQ19JUlIJMHgyMDAKKyNkZWZpbmUgCUFQSUNfRVNSCTB4MjgwCisjZGVmaW5lCQkJQVBJQ19FU1JfU0VORF9DUwkweDAwMDAxCisjZGVmaW5lCQkJQVBJQ19FU1JfUkVDVl9DUwkweDAwMDAyCisjZGVmaW5lCQkJQVBJQ19FU1JfU0VORF9BQ0MJMHgwMDAwNAorI2RlZmluZQkJCUFQSUNfRVNSX1JFQ1ZfQUNDCTB4MDAwMDgKKyNkZWZpbmUJCQlBUElDX0VTUl9TRU5ESUxMCTB4MDAwMjAKKyNkZWZpbmUJCQlBUElDX0VTUl9SRUNWSUxMCTB4MDAwNDAKKyNkZWZpbmUJCQlBUElDX0VTUl9JTExSRUdBCTB4MDAwODAKKyNkZWZpbmUJCUFQSUNfSUNSCTB4MzAwCisjZGVmaW5lCQkJQVBJQ19ERVNUX1NFTEYJCTB4NDAwMDAKKyNkZWZpbmUJCQlBUElDX0RFU1RfQUxMSU5DCTB4ODAwMDAKKyNkZWZpbmUJCQlBUElDX0RFU1RfQUxMQlVUCTB4QzAwMDAKKyNkZWZpbmUJCQlBUElDX0lDUl9SUl9NQVNLCTB4MzAwMDAKKyNkZWZpbmUJCQlBUElDX0lDUl9SUl9JTlZBTElECTB4MDAwMDAKKyNkZWZpbmUJCQlBUElDX0lDUl9SUl9JTlBST0cJMHgxMDAwMAorI2RlZmluZQkJCUFQSUNfSUNSX1JSX1ZBTElECTB4MjAwMDAKKyNkZWZpbmUJCQlBUElDX0lOVF9MRVZFTFRSSUcJMHgwODAwMAorI2RlZmluZQkJCUFQSUNfSU5UX0FTU0VSVAkJMHgwNDAwMAorI2RlZmluZQkJCUFQSUNfSUNSX0JVU1kJCTB4MDEwMDAKKyNkZWZpbmUJCQlBUElDX0RFU1RfTE9HSUNBTAkweDAwODAwCisjZGVmaW5lCQkJQVBJQ19ETV9GSVhFRAkJMHgwMDAwMAorI2RlZmluZQkJCUFQSUNfRE1fTE9XRVNUCQkweDAwMTAwCisjZGVmaW5lCQkJQVBJQ19ETV9TTUkJCTB4MDAyMDAKKyNkZWZpbmUJCQlBUElDX0RNX1JFTVJECQkweDAwMzAwCisjZGVmaW5lCQkJQVBJQ19ETV9OTUkJCTB4MDA0MDAKKyNkZWZpbmUJCQlBUElDX0RNX0lOSVQJCTB4MDA1MDAKKyNkZWZpbmUJCQlBUElDX0RNX1NUQVJUVVAJCTB4MDA2MDAKKyNkZWZpbmUJCQlBUElDX0RNX0VYVElOVAkJMHgwMDcwMAorI2RlZmluZQkJCUFQSUNfVkVDVE9SX01BU0sJMHgwMDBGRgorI2RlZmluZQkJQVBJQ19JQ1IyCTB4MzEwCisjZGVmaW5lCQkJR0VUX0FQSUNfREVTVF9GSUVMRCh4KQkoKCh4KT4+MjQpJjB4RkYpCisjZGVmaW5lCQkJU0VUX0FQSUNfREVTVF9GSUVMRCh4KQkoKHgpPDwyNCkKKyNkZWZpbmUJCUFQSUNfTFZUVAkweDMyMAorI2RlZmluZQkJQVBJQ19MVlRUSE1SCTB4MzMwCisjZGVmaW5lCQlBUElDX0xWVFBDCTB4MzQwCisjZGVmaW5lCQlBUElDX0xWVDAJMHgzNTAKKyNkZWZpbmUJCQlBUElDX0xWVF9USU1FUl9CQVNFX01BU0sJKDB4Mzw8MTgpCisjZGVmaW5lCQkJR0VUX0FQSUNfVElNRVJfQkFTRSh4KQkJKCgoeCk+PjE4KSYweDMpCisjZGVmaW5lCQkJU0VUX0FQSUNfVElNRVJfQkFTRSh4KQkJKCgoeCk8PDE4KSkKKyNkZWZpbmUJCQlBUElDX1RJTUVSX0JBU0VfQ0xLSU4JCTB4MAorI2RlZmluZQkJCUFQSUNfVElNRVJfQkFTRV9UTUJBU0UJCTB4MQorI2RlZmluZQkJCUFQSUNfVElNRVJfQkFTRV9ESVYJCTB4MgorI2RlZmluZQkJCUFQSUNfTFZUX1RJTUVSX1BFUklPRElDCQkoMTw8MTcpCisjZGVmaW5lCQkJQVBJQ19MVlRfTUFTS0VECQkJKDE8PDE2KQorI2RlZmluZQkJCUFQSUNfTFZUX0xFVkVMX1RSSUdHRVIJCSgxPDwxNSkKKyNkZWZpbmUJCQlBUElDX0xWVF9SRU1PVEVfSVJSCQkoMTw8MTQpCisjZGVmaW5lCQkJQVBJQ19JTlBVVF9QT0xBUklUWQkJKDE8PDEzKQorI2RlZmluZQkJCUFQSUNfU0VORF9QRU5ESU5HCQkoMTw8MTIpCisjZGVmaW5lCQkJR0VUX0FQSUNfREVMSVZFUllfTU9ERSh4KQkoKCh4KT4+OCkmMHg3KQorI2RlZmluZQkJCVNFVF9BUElDX0RFTElWRVJZX01PREUoeCx5KQkoKCh4KSZ+MHg3MDApfCgoeSk8PDgpKQorI2RlZmluZQkJCQlBUElDX01PREVfRklYRUQJCTB4MAorI2RlZmluZQkJCQlBUElDX01PREVfTk1JCQkweDQKKyNkZWZpbmUJCQkJQVBJQ19NT0RFX0VYSU5UCQkweDcKKyNkZWZpbmUgCUFQSUNfTFZUMQkweDM2MAorI2RlZmluZQkJQVBJQ19MVlRFUlIJMHgzNzAKKyNkZWZpbmUJCUFQSUNfVE1JQ1QJMHgzODAKKyNkZWZpbmUJCUFQSUNfVE1DQ1QJMHgzOTAKKyNkZWZpbmUJCUFQSUNfVERDUgkweDNFMAorI2RlZmluZQkJCUFQSUNfVERSX0RJVl9UTUJBU0UJKDE8PDIpCisjZGVmaW5lCQkJQVBJQ19URFJfRElWXzEJCTB4QgorI2RlZmluZQkJCUFQSUNfVERSX0RJVl8yCQkweDAKKyNkZWZpbmUJCQlBUElDX1REUl9ESVZfNAkJMHgxCisjZGVmaW5lCQkJQVBJQ19URFJfRElWXzgJCTB4MgorI2RlZmluZQkJCUFQSUNfVERSX0RJVl8xNgkJMHgzCisjZGVmaW5lCQkJQVBJQ19URFJfRElWXzMyCQkweDgKKyNkZWZpbmUJCQlBUElDX1REUl9ESVZfNjQJCTB4OQorI2RlZmluZQkJCUFQSUNfVERSX0RJVl8xMjgJMHhBCisKKyNkZWZpbmUgQVBJQ19CQVNFIChmaXhfdG9fdmlydChGSVhfQVBJQ19CQVNFKSkKKworI2lmZGVmIENPTkZJR19OVU1BCisgI2RlZmluZSBNQVhfSU9fQVBJQ1MgMzIKKyNlbHNlCisgI2RlZmluZSBNQVhfSU9fQVBJQ1MgOAorI2VuZGlmCisKKy8qCisgKiB0aGUgbG9jYWwgQVBJQyByZWdpc3RlciBzdHJ1Y3R1cmUsIG1lbW9yeSBtYXBwZWQuIE5vdCB0ZXJyaWJseSB3ZWxsCisgKiB0ZXN0ZWQsIGJ1dCB3ZSBtaWdodCBldmVudHVhbGx5IHVzZSB0aGlzIG9uZSBpbiB0aGUgZnV0dXJlIC0gdGhlCisgKiBwcm9ibGVtIHdoeSB3ZSBjYW5ub3QgdXNlIGl0IHJpZ2h0IG5vdyBpcyB0aGUgUDUgQVBJQywgaXQgaGFzIGFuCisgKiBlcnJhdGEgd2hpY2ggY2Fubm90IHRha2UgOC1iaXQgcmVhZHMgYW5kIHdyaXRlcywgb25seSAzMi1iaXQgb25lcyAuLi4KKyAqLworI2RlZmluZSB1MzIgdW5zaWduZWQgaW50CisKKyNkZWZpbmUgbGFwaWMgKCh2b2xhdGlsZSBzdHJ1Y3QgbG9jYWxfYXBpYyAqKUFQSUNfQkFTRSkKKworc3RydWN0IGxvY2FsX2FwaWMgeworCisvKjAwMCovCXN0cnVjdCB7IHUzMiBfX3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2ZWRfMDE7CisKKy8qMDEwKi8Jc3RydWN0IHsgdTMyIF9fcmVzZXJ2ZWRbNF07IH0gX19yZXNlcnZlZF8wMjsKKworLyowMjAqLwlzdHJ1Y3QgeyAvKiBBUElDIElEIFJlZ2lzdGVyICovCisJCXUzMiAgIF9fcmVzZXJ2ZWRfMQk6IDI0LAorCQkJcGh5c19hcGljX2lkCTogIDQsCisJCQlfX3Jlc2VydmVkXzIJOiAgNDsKKwkJdTMyIF9fcmVzZXJ2ZWRbM107CisJfSBpZDsKKworLyowMzAqLwljb25zdAorCXN0cnVjdCB7IC8qIEFQSUMgVmVyc2lvbiBSZWdpc3RlciAqLworCQl1MzIgICB2ZXJzaW9uCQk6ICA4LAorCQkJX19yZXNlcnZlZF8xCTogIDgsCisJCQltYXhfbHZ0CQk6ICA4LAorCQkJX19yZXNlcnZlZF8yCTogIDg7CisJCXUzMiBfX3Jlc2VydmVkWzNdOworCX0gdmVyc2lvbjsKKworLyowNDAqLwlzdHJ1Y3QgeyB1MzIgX19yZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzAzOworCisvKjA1MCovCXN0cnVjdCB7IHUzMiBfX3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2ZWRfMDQ7CisKKy8qMDYwKi8Jc3RydWN0IHsgdTMyIF9fcmVzZXJ2ZWRbNF07IH0gX19yZXNlcnZlZF8wNTsKKworLyowNzAqLwlzdHJ1Y3QgeyB1MzIgX19yZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzA2OworCisvKjA4MCovCXN0cnVjdCB7IC8qIFRhc2sgUHJpb3JpdHkgUmVnaXN0ZXIgKi8KKwkJdTMyICAgcHJpb3JpdHkJOiAgOCwKKwkJCV9fcmVzZXJ2ZWRfMQk6IDI0OworCQl1MzIgX19yZXNlcnZlZF8yWzNdOworCX0gdHByOworCisvKjA5MCovCWNvbnN0CisJc3RydWN0IHsgLyogQXJiaXRyYXRpb24gUHJpb3JpdHkgUmVnaXN0ZXIgKi8KKwkJdTMyICAgcHJpb3JpdHkJOiAgOCwKKwkJCV9fcmVzZXJ2ZWRfMQk6IDI0OworCQl1MzIgX19yZXNlcnZlZF8yWzNdOworCX0gYXByOworCisvKjBBMCovCWNvbnN0CisJc3RydWN0IHsgLyogUHJvY2Vzc29yIFByaW9yaXR5IFJlZ2lzdGVyICovCisJCXUzMiAgIHByaW9yaXR5CTogIDgsCisJCQlfX3Jlc2VydmVkXzEJOiAyNDsKKwkJdTMyIF9fcmVzZXJ2ZWRfMlszXTsKKwl9IHBwcjsKKworLyowQjAqLwlzdHJ1Y3QgeyAvKiBFbmQgT2YgSW50ZXJydXB0IFJlZ2lzdGVyICovCisJCXUzMiAgIGVvaTsKKwkJdTMyIF9fcmVzZXJ2ZWRbM107CisJfSBlb2k7CisKKy8qMEMwKi8Jc3RydWN0IHsgdTMyIF9fcmVzZXJ2ZWRbNF07IH0gX19yZXNlcnZlZF8wNzsKKworLyowRDAqLwlzdHJ1Y3QgeyAvKiBMb2dpY2FsIERlc3RpbmF0aW9uIFJlZ2lzdGVyICovCisJCXUzMiAgIF9fcmVzZXJ2ZWRfMQk6IDI0LAorCQkJbG9naWNhbF9kZXN0CTogIDg7CisJCXUzMiBfX3Jlc2VydmVkXzJbM107CisJfSBsZHI7CisKKy8qMEUwKi8Jc3RydWN0IHsgLyogRGVzdGluYXRpb24gRm9ybWF0IFJlZ2lzdGVyICovCisJCXUzMiAgIF9fcmVzZXJ2ZWRfMQk6IDI4LAorCQkJbW9kZWwJCTogIDQ7CisJCXUzMiBfX3Jlc2VydmVkXzJbM107CisJfSBkZnI7CisKKy8qMEYwKi8Jc3RydWN0IHsgLyogU3B1cmlvdXMgSW50ZXJydXB0IFZlY3RvciBSZWdpc3RlciAqLworCQl1MzIJc3B1cmlvdXNfdmVjdG9yCTogIDgsCisJCQlhcGljX2VuYWJsZWQJOiAgMSwKKwkJCWZvY3VzX2NwdQk6ICAxLAorCQkJX19yZXNlcnZlZF8yCTogMjI7CisJCXUzMiBfX3Jlc2VydmVkXzNbM107CisJfSBzdnI7CisKKy8qMTAwKi8Jc3RydWN0IHsgLyogSW4gU2VydmljZSBSZWdpc3RlciAqLworLyoxNzAqLwkJdTMyIGJpdGZpZWxkOworCQl1MzIgX19yZXNlcnZlZFszXTsKKwl9IGlzciBbOF07CisKKy8qMTgwKi8Jc3RydWN0IHsgLyogVHJpZ2dlciBNb2RlIFJlZ2lzdGVyICovCisvKjFGMCovCQl1MzIgYml0ZmllbGQ7CisJCXUzMiBfX3Jlc2VydmVkWzNdOworCX0gdG1yIFs4XTsKKworLyoyMDAqLwlzdHJ1Y3QgeyAvKiBJbnRlcnJ1cHQgUmVxdWVzdCBSZWdpc3RlciAqLworLyoyNzAqLwkJdTMyIGJpdGZpZWxkOworCQl1MzIgX19yZXNlcnZlZFszXTsKKwl9IGlyciBbOF07CisKKy8qMjgwKi8JdW5pb24geyAvKiBFcnJvciBTdGF0dXMgUmVnaXN0ZXIgKi8KKwkJc3RydWN0IHsKKwkJCXUzMiAgIHNlbmRfY3NfZXJyb3IJCQk6ICAxLAorCQkJCXJlY2VpdmVfY3NfZXJyb3IJCTogIDEsCisJCQkJc2VuZF9hY2NlcHRfZXJyb3IJCTogIDEsCisJCQkJcmVjZWl2ZV9hY2NlcHRfZXJyb3IJCTogIDEsCisJCQkJX19yZXNlcnZlZF8xCQkJOiAgMSwKKwkJCQlzZW5kX2lsbGVnYWxfdmVjdG9yCQk6ICAxLAorCQkJCXJlY2VpdmVfaWxsZWdhbF92ZWN0b3IJCTogIDEsCisJCQkJaWxsZWdhbF9yZWdpc3Rlcl9hZGRyZXNzCTogIDEsCisJCQkJX19yZXNlcnZlZF8yCQkJOiAyNDsKKwkJCXUzMiBfX3Jlc2VydmVkXzNbM107CisJCX0gZXJyb3JfYml0czsKKwkJc3RydWN0IHsKKwkJCXUzMiBlcnJvcnM7CisJCQl1MzIgX19yZXNlcnZlZF8zWzNdOworCQl9IGFsbF9lcnJvcnM7CisJfSBlc3I7CisKKy8qMjkwKi8Jc3RydWN0IHsgdTMyIF9fcmVzZXJ2ZWRbNF07IH0gX19yZXNlcnZlZF8wODsKKworLyoyQTAqLwlzdHJ1Y3QgeyB1MzIgX19yZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzA5OworCisvKjJCMCovCXN0cnVjdCB7IHUzMiBfX3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2ZWRfMTA7CisKKy8qMkMwKi8Jc3RydWN0IHsgdTMyIF9fcmVzZXJ2ZWRbNF07IH0gX19yZXNlcnZlZF8xMTsKKworLyoyRDAqLwlzdHJ1Y3QgeyB1MzIgX19yZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzEyOworCisvKjJFMCovCXN0cnVjdCB7IHUzMiBfX3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2ZWRfMTM7CisKKy8qMkYwKi8Jc3RydWN0IHsgdTMyIF9fcmVzZXJ2ZWRbNF07IH0gX19yZXNlcnZlZF8xNDsKKworLyozMDAqLwlzdHJ1Y3QgeyAvKiBJbnRlcnJ1cHQgQ29tbWFuZCBSZWdpc3RlciAxICovCisJCXUzMiAgIHZlY3RvcgkJCTogIDgsCisJCQlkZWxpdmVyeV9tb2RlCQk6ICAzLAorCQkJZGVzdGluYXRpb25fbW9kZQk6ICAxLAorCQkJZGVsaXZlcnlfc3RhdHVzCQk6ICAxLAorCQkJX19yZXNlcnZlZF8xCQk6ICAxLAorCQkJbGV2ZWwJCQk6ICAxLAorCQkJdHJpZ2dlcgkJCTogIDEsCisJCQlfX3Jlc2VydmVkXzIJCTogIDIsCisJCQlzaG9ydGhhbmQJCTogIDIsCisJCQlfX3Jlc2VydmVkXzMJCTogIDEyOworCQl1MzIgX19yZXNlcnZlZF80WzNdOworCX0gaWNyMTsKKworLyozMTAqLwlzdHJ1Y3QgeyAvKiBJbnRlcnJ1cHQgQ29tbWFuZCBSZWdpc3RlciAyICovCisJCXVuaW9uIHsKKwkJCXUzMiAgIF9fcmVzZXJ2ZWRfMQk6IDI0LAorCQkJCXBoeXNfZGVzdAk6ICA0LAorCQkJCV9fcmVzZXJ2ZWRfMgk6ICA0OworCQkJdTMyICAgX19yZXNlcnZlZF8zCTogMjQsCisJCQkJbG9naWNhbF9kZXN0CTogIDg7CisJCX0gZGVzdDsKKwkJdTMyIF9fcmVzZXJ2ZWRfNFszXTsKKwl9IGljcjI7CisKKy8qMzIwKi8Jc3RydWN0IHsgLyogTFZUIC0gVGltZXIgKi8KKwkJdTMyICAgdmVjdG9yCQk6ICA4LAorCQkJX19yZXNlcnZlZF8xCTogIDQsCisJCQlkZWxpdmVyeV9zdGF0dXMJOiAgMSwKKwkJCV9fcmVzZXJ2ZWRfMgk6ICAzLAorCQkJbWFzawkJOiAgMSwKKwkJCXRpbWVyX21vZGUJOiAgMSwKKwkJCV9fcmVzZXJ2ZWRfMwk6IDE0OworCQl1MzIgX19yZXNlcnZlZF80WzNdOworCX0gbHZ0X3RpbWVyOworCisvKjMzMCovCXN0cnVjdCB7IC8qIExWVCAtIFRoZXJtYWwgU2Vuc29yICovCisJCXUzMiAgdmVjdG9yCQk6ICA4LAorCQkJZGVsaXZlcnlfbW9kZQk6ICAzLAorCQkJX19yZXNlcnZlZF8xCTogIDEsCisJCQlkZWxpdmVyeV9zdGF0dXMJOiAgMSwKKwkJCV9fcmVzZXJ2ZWRfMgk6ICAzLAorCQkJbWFzawkJOiAgMSwKKwkJCV9fcmVzZXJ2ZWRfMwk6IDE1OworCQl1MzIgX19yZXNlcnZlZF80WzNdOworCX0gbHZ0X3RoZXJtYWw7CisKKy8qMzQwKi8Jc3RydWN0IHsgLyogTFZUIC0gUGVyZm9ybWFuY2UgQ291bnRlciAqLworCQl1MzIgICB2ZWN0b3IJCTogIDgsCisJCQlkZWxpdmVyeV9tb2RlCTogIDMsCisJCQlfX3Jlc2VydmVkXzEJOiAgMSwKKwkJCWRlbGl2ZXJ5X3N0YXR1cwk6ICAxLAorCQkJX19yZXNlcnZlZF8yCTogIDMsCisJCQltYXNrCQk6ICAxLAorCQkJX19yZXNlcnZlZF8zCTogMTU7CisJCXUzMiBfX3Jlc2VydmVkXzRbM107CisJfSBsdnRfcGM7CisKKy8qMzUwKi8Jc3RydWN0IHsgLyogTFZUIC0gTElOVDAgKi8KKwkJdTMyICAgdmVjdG9yCQk6ICA4LAorCQkJZGVsaXZlcnlfbW9kZQk6ICAzLAorCQkJX19yZXNlcnZlZF8xCTogIDEsCisJCQlkZWxpdmVyeV9zdGF0dXMJOiAgMSwKKwkJCXBvbGFyaXR5CTogIDEsCisJCQlyZW1vdGVfaXJyCTogIDEsCisJCQl0cmlnZ2VyCQk6ICAxLAorCQkJbWFzawkJOiAgMSwKKwkJCV9fcmVzZXJ2ZWRfMgk6IDE1OworCQl1MzIgX19yZXNlcnZlZF8zWzNdOworCX0gbHZ0X2xpbnQwOworCisvKjM2MCovCXN0cnVjdCB7IC8qIExWVCAtIExJTlQxICovCisJCXUzMiAgIHZlY3RvcgkJOiAgOCwKKwkJCWRlbGl2ZXJ5X21vZGUJOiAgMywKKwkJCV9fcmVzZXJ2ZWRfMQk6ICAxLAorCQkJZGVsaXZlcnlfc3RhdHVzCTogIDEsCisJCQlwb2xhcml0eQk6ICAxLAorCQkJcmVtb3RlX2lycgk6ICAxLAorCQkJdHJpZ2dlcgkJOiAgMSwKKwkJCW1hc2sJCTogIDEsCisJCQlfX3Jlc2VydmVkXzIJOiAxNTsKKwkJdTMyIF9fcmVzZXJ2ZWRfM1szXTsKKwl9IGx2dF9saW50MTsKKworLyozNzAqLwlzdHJ1Y3QgeyAvKiBMVlQgLSBFcnJvciAqLworCQl1MzIgICB2ZWN0b3IJCTogIDgsCisJCQlfX3Jlc2VydmVkXzEJOiAgNCwKKwkJCWRlbGl2ZXJ5X3N0YXR1cwk6ICAxLAorCQkJX19yZXNlcnZlZF8yCTogIDMsCisJCQltYXNrCQk6ICAxLAorCQkJX19yZXNlcnZlZF8zCTogMTU7CisJCXUzMiBfX3Jlc2VydmVkXzRbM107CisJfSBsdnRfZXJyb3I7CisKKy8qMzgwKi8Jc3RydWN0IHsgLyogVGltZXIgSW5pdGlhbCBDb3VudCBSZWdpc3RlciAqLworCQl1MzIgICBpbml0aWFsX2NvdW50OworCQl1MzIgX19yZXNlcnZlZF8yWzNdOworCX0gdGltZXJfaWNyOworCisvKjM5MCovCWNvbnN0CisJc3RydWN0IHsgLyogVGltZXIgQ3VycmVudCBDb3VudCBSZWdpc3RlciAqLworCQl1MzIgICBjdXJyX2NvdW50OworCQl1MzIgX19yZXNlcnZlZF8yWzNdOworCX0gdGltZXJfY2NyOworCisvKjNBMCovCXN0cnVjdCB7IHUzMiBfX3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2ZWRfMTY7CisKKy8qM0IwKi8Jc3RydWN0IHsgdTMyIF9fcmVzZXJ2ZWRbNF07IH0gX19yZXNlcnZlZF8xNzsKKworLyozQzAqLwlzdHJ1Y3QgeyB1MzIgX19yZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzE4OworCisvKjNEMCovCXN0cnVjdCB7IHUzMiBfX3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2ZWRfMTk7CisKKy8qM0UwKi8Jc3RydWN0IHsgLyogVGltZXIgRGl2aWRlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKwkJdTMyICAgZGl2aXNvcgkJOiAgNCwKKwkJCV9fcmVzZXJ2ZWRfMQk6IDI4OworCQl1MzIgX19yZXNlcnZlZF8yWzNdOworCX0gdGltZXJfZGNyOworCisvKjNGMCovCXN0cnVjdCB7IHUzMiBfX3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2ZWRfMjA7CisKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjdW5kZWYgdTMyCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9hcmNoX2hvb2tzLmggYi9pbmNsdWRlL2FzbS1pMzg2L2FyY2hfaG9va3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGI5NmE2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9hcmNoX2hvb2tzLmgKQEAgLTAsMCArMSwyNyBAQAorI2lmbmRlZiBfQVNNX0FSQ0hfSE9PS1NfSAorI2RlZmluZSBfQVNNX0FSQ0hfSE9PS1NfSAorCisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisKKy8qCisgKglsaW51eC9pbmNsdWRlL2FzbS9hcmNoX2hvb2tzLmgKKyAqCisgKglkZWZpbmUgdGhlIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBob29rcyAKKyAqLworCisvKiB0aGVzZSBhcmVuJ3QgYXJjaCBob29rcywgdGhleSBhcmUgZ2VuZXJpYyByb3V0aW5lcworICogdGhhdCBjYW4gYmUgdXNlZCBieSB0aGUgaG9va3MgKi8KK2V4dGVybiB2b2lkIGluaXRfSVNBX2lycXModm9pZCk7CitleHRlcm4gdm9pZCBhcGljX2ludHJfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIHNtcF9pbnRyX2luaXQodm9pZCk7CitleHRlcm4gaXJxcmV0dXJuX3QgdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCisvKiB0aGVzZSBhcmUgdGhlIGRlZmluZWQgaG9va3MgKi8KK2V4dGVybiB2b2lkIGludHJfaW5pdF9ob29rKHZvaWQpOworZXh0ZXJuIHZvaWQgcHJlX2ludHJfaW5pdF9ob29rKHZvaWQpOworZXh0ZXJuIHZvaWQgcHJlX3NldHVwX2FyY2hfaG9vayh2b2lkKTsKK2V4dGVybiB2b2lkIHRyYXBfaW5pdF9ob29rKHZvaWQpOworZXh0ZXJuIHZvaWQgdGltZV9pbml0X2hvb2sodm9pZCk7CitleHRlcm4gdm9pZCBtY2Ffbm1pX2hvb2sodm9pZCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9hdG9taWMuaCBiL2luY2x1ZGUvYXNtLWkzODYvYXRvbWljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA5NzIwYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvYXRvbWljLmgKQEAgLTAsMCArMSwyMzYgQEAKKyNpZm5kZWYgX19BUkNIX0kzODZfQVRPTUlDX18KKyNkZWZpbmUgX19BUkNIX0kzODZfQVRPTUlDX18KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorCisvKgorICogQXRvbWljIG9wZXJhdGlvbnMgdGhhdCBDIGNhbid0IGd1YXJhbnRlZSB1cy4gIFVzZWZ1bCBmb3IKKyAqIHJlc291cmNlIGNvdW50aW5nIGV0Yy4uCisgKi8KKworI2lmZGVmIENPTkZJR19TTVAKKyNkZWZpbmUgTE9DSyAibG9jayA7ICIKKyNlbHNlCisjZGVmaW5lIExPQ0sgIiIKKyNlbmRpZgorCisvKgorICogTWFrZSBzdXJlIGdjYyBkb2Vzbid0IHRyeSB0byBiZSBjbGV2ZXIgYW5kIG1vdmUgdGhpbmdzIGFyb3VuZAorICogb24gdXMuIFdlIG5lZWQgdG8gdXNlIF9leGFjdGx5XyB0aGUgYWRkcmVzcyB0aGUgdXNlciBnYXZlIHVzLAorICogbm90IHNvbWUgYWxpYXMgdGhhdCBjb250YWlucyB0aGUgc2FtZSBpbmZvcm1hdGlvbi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeyB2b2xhdGlsZSBpbnQgY291bnRlcjsgfSBhdG9taWNfdDsKKworI2RlZmluZSBBVE9NSUNfSU5JVChpKQl7IChpKSB9CisKKy8qKgorICogYXRvbWljX3JlYWQgLSByZWFkIGF0b21pYyB2YXJpYWJsZQorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICogCisgKiBBdG9taWNhbGx5IHJlYWRzIHRoZSB2YWx1ZSBvZiBAdi4KKyAqLyAKKyNkZWZpbmUgYXRvbWljX3JlYWQodikJCSgodiktPmNvdW50ZXIpCisKKy8qKgorICogYXRvbWljX3NldCAtIHNldCBhdG9taWMgdmFyaWFibGUKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqIEBpOiByZXF1aXJlZCB2YWx1ZQorICogCisgKiBBdG9taWNhbGx5IHNldHMgdGhlIHZhbHVlIG9mIEB2IHRvIEBpLgorICovIAorI2RlZmluZSBhdG9taWNfc2V0KHYsaSkJCSgoKHYpLT5jb3VudGVyKSA9IChpKSkKKworLyoqCisgKiBhdG9taWNfYWRkIC0gYWRkIGludGVnZXIgdG8gYXRvbWljIHZhcmlhYmxlCisgKiBAaTogaW50ZWdlciB2YWx1ZSB0byBhZGQKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqIAorICogQXRvbWljYWxseSBhZGRzIEBpIHRvIEB2LgorICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGF0b21pY19hZGQoaW50IGksIGF0b21pY190ICp2KQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQlMT0NLICJhZGRsICUxLCUwIgorCQk6Ij1tIiAodi0+Y291bnRlcikKKwkJOiJpciIgKGkpLCAibSIgKHYtPmNvdW50ZXIpKTsKK30KKworLyoqCisgKiBhdG9taWNfc3ViIC0gc3VidHJhY3QgdGhlIGF0b21pYyB2YXJpYWJsZQorICogQGk6IGludGVnZXIgdmFsdWUgdG8gc3VidHJhY3QKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqIAorICogQXRvbWljYWxseSBzdWJ0cmFjdHMgQGkgZnJvbSBAdi4KKyAqLworc3RhdGljIF9faW5saW5lX18gdm9pZCBhdG9taWNfc3ViKGludCBpLCBhdG9taWNfdCAqdikKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJTE9DSyAic3VibCAlMSwlMCIKKwkJOiI9bSIgKHYtPmNvdW50ZXIpCisJCToiaXIiIChpKSwgIm0iICh2LT5jb3VudGVyKSk7Cit9CisKKy8qKgorICogYXRvbWljX3N1Yl9hbmRfdGVzdCAtIHN1YnRyYWN0IHZhbHVlIGZyb20gdmFyaWFibGUgYW5kIHRlc3QgcmVzdWx0CisgKiBAaTogaW50ZWdlciB2YWx1ZSB0byBzdWJ0cmFjdAorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICogCisgKiBBdG9taWNhbGx5IHN1YnRyYWN0cyBAaSBmcm9tIEB2IGFuZCByZXR1cm5zCisgKiB0cnVlIGlmIHRoZSByZXN1bHQgaXMgemVybywgb3IgZmFsc2UgZm9yIGFsbAorICogb3RoZXIgY2FzZXMuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIGludCBhdG9taWNfc3ViX2FuZF90ZXN0KGludCBpLCBhdG9taWNfdCAqdikKK3sKKwl1bnNpZ25lZCBjaGFyIGM7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJTE9DSyAic3VibCAlMiwlMDsgc2V0ZSAlMSIKKwkJOiI9bSIgKHYtPmNvdW50ZXIpLCAiPXFtIiAoYykKKwkJOiJpciIgKGkpLCAibSIgKHYtPmNvdW50ZXIpIDogIm1lbW9yeSIpOworCXJldHVybiBjOworfQorCisvKioKKyAqIGF0b21pY19pbmMgLSBpbmNyZW1lbnQgYXRvbWljIHZhcmlhYmxlCisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CisgKiAKKyAqIEF0b21pY2FsbHkgaW5jcmVtZW50cyBAdiBieSAxLgorICovIAorc3RhdGljIF9faW5saW5lX18gdm9pZCBhdG9taWNfaW5jKGF0b21pY190ICp2KQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQlMT0NLICJpbmNsICUwIgorCQk6Ij1tIiAodi0+Y291bnRlcikKKwkJOiJtIiAodi0+Y291bnRlcikpOworfQorCisvKioKKyAqIGF0b21pY19kZWMgLSBkZWNyZW1lbnQgYXRvbWljIHZhcmlhYmxlCisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CisgKiAKKyAqIEF0b21pY2FsbHkgZGVjcmVtZW50cyBAdiBieSAxLgorICovIAorc3RhdGljIF9faW5saW5lX18gdm9pZCBhdG9taWNfZGVjKGF0b21pY190ICp2KQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQlMT0NLICJkZWNsICUwIgorCQk6Ij1tIiAodi0+Y291bnRlcikKKwkJOiJtIiAodi0+Y291bnRlcikpOworfQorCisvKioKKyAqIGF0b21pY19kZWNfYW5kX3Rlc3QgLSBkZWNyZW1lbnQgYW5kIHRlc3QKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqIAorICogQXRvbWljYWxseSBkZWNyZW1lbnRzIEB2IGJ5IDEgYW5kCisgKiByZXR1cm5zIHRydWUgaWYgdGhlIHJlc3VsdCBpcyAwLCBvciBmYWxzZSBmb3IgYWxsIG90aGVyCisgKiBjYXNlcy4KKyAqLyAKK3N0YXRpYyBfX2lubGluZV9fIGludCBhdG9taWNfZGVjX2FuZF90ZXN0KGF0b21pY190ICp2KQoreworCXVuc2lnbmVkIGNoYXIgYzsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQlMT0NLICJkZWNsICUwOyBzZXRlICUxIgorCQk6Ij1tIiAodi0+Y291bnRlciksICI9cW0iIChjKQorCQk6Im0iICh2LT5jb3VudGVyKSA6ICJtZW1vcnkiKTsKKwlyZXR1cm4gYyAhPSAwOworfQorCisvKioKKyAqIGF0b21pY19pbmNfYW5kX3Rlc3QgLSBpbmNyZW1lbnQgYW5kIHRlc3QgCisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CisgKiAKKyAqIEF0b21pY2FsbHkgaW5jcmVtZW50cyBAdiBieSAxCisgKiBhbmQgcmV0dXJucyB0cnVlIGlmIHRoZSByZXN1bHQgaXMgemVybywgb3IgZmFsc2UgZm9yIGFsbAorICogb3RoZXIgY2FzZXMuCisgKi8gCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgYXRvbWljX2luY19hbmRfdGVzdChhdG9taWNfdCAqdikKK3sKKwl1bnNpZ25lZCBjaGFyIGM7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJTE9DSyAiaW5jbCAlMDsgc2V0ZSAlMSIKKwkJOiI9bSIgKHYtPmNvdW50ZXIpLCAiPXFtIiAoYykKKwkJOiJtIiAodi0+Y291bnRlcikgOiAibWVtb3J5Iik7CisJcmV0dXJuIGMgIT0gMDsKK30KKworLyoqCisgKiBhdG9taWNfYWRkX25lZ2F0aXZlIC0gYWRkIGFuZCB0ZXN0IGlmIG5lZ2F0aXZlCisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CisgKiBAaTogaW50ZWdlciB2YWx1ZSB0byBhZGQKKyAqIAorICogQXRvbWljYWxseSBhZGRzIEBpIHRvIEB2IGFuZCByZXR1cm5zIHRydWUKKyAqIGlmIHRoZSByZXN1bHQgaXMgbmVnYXRpdmUsIG9yIGZhbHNlIHdoZW4KKyAqIHJlc3VsdCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gemVyby4KKyAqLyAKK3N0YXRpYyBfX2lubGluZV9fIGludCBhdG9taWNfYWRkX25lZ2F0aXZlKGludCBpLCBhdG9taWNfdCAqdikKK3sKKwl1bnNpZ25lZCBjaGFyIGM7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJTE9DSyAiYWRkbCAlMiwlMDsgc2V0cyAlMSIKKwkJOiI9bSIgKHYtPmNvdW50ZXIpLCAiPXFtIiAoYykKKwkJOiJpciIgKGkpLCAibSIgKHYtPmNvdW50ZXIpIDogIm1lbW9yeSIpOworCXJldHVybiBjOworfQorCisvKioKKyAqIGF0b21pY19hZGRfcmV0dXJuIC0gYWRkIGFuZCByZXR1cm4KKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqIEBpOiBpbnRlZ2VyIHZhbHVlIHRvIGFkZAorICoKKyAqIEF0b21pY2FsbHkgYWRkcyBAaSB0byBAdiBhbmQgcmV0dXJucyBAaSArIEB2CisgKi8KK3N0YXRpYyBfX2lubGluZV9fIGludCBhdG9taWNfYWRkX3JldHVybihpbnQgaSwgYXRvbWljX3QgKnYpCit7CisJaW50IF9faTsKKyNpZmRlZiBDT05GSUdfTTM4NgorCWlmKHVubGlrZWx5KGJvb3RfY3B1X2RhdGEueDg2PT0zKSkKKwkJZ290byBub194YWRkOworI2VuZGlmCisJLyogTW9kZXJuIDQ4NisgcHJvY2Vzc29yICovCisJX19pID0gaTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJTE9DSyAieGFkZGwgJTAsICUxOyIKKwkJOiI9ciIoaSkKKwkJOiJtIih2LT5jb3VudGVyKSwgIjAiKGkpKTsKKwlyZXR1cm4gaSArIF9faTsKKworI2lmZGVmIENPTkZJR19NMzg2Citub194YWRkOiAvKiBMZWdhY3kgMzg2IHByb2Nlc3NvciAqLworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJX19pID0gYXRvbWljX3JlYWQodik7CisJYXRvbWljX3NldCh2LCBpICsgX19pKTsKKwlsb2NhbF9pcnFfZW5hYmxlKCk7CisJcmV0dXJuIGkgKyBfX2k7CisjZW5kaWYKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IGF0b21pY19zdWJfcmV0dXJuKGludCBpLCBhdG9taWNfdCAqdikKK3sKKwlyZXR1cm4gYXRvbWljX2FkZF9yZXR1cm4oLWksdik7Cit9CisKKyNkZWZpbmUgYXRvbWljX2luY19yZXR1cm4odikgIChhdG9taWNfYWRkX3JldHVybigxLHYpKQorI2RlZmluZSBhdG9taWNfZGVjX3JldHVybih2KSAgKGF0b21pY19zdWJfcmV0dXJuKDEsdikpCisKKy8qIFRoZXNlIGFyZSB4ODYtc3BlY2lmaWMsIHVzZWQgYnkgc29tZSBoZWFkZXIgZmlsZXMgKi8KKyNkZWZpbmUgYXRvbWljX2NsZWFyX21hc2sobWFzaywgYWRkcikgXAorX19hc21fXyBfX3ZvbGF0aWxlX18oTE9DSyAiYW5kbCAlMCwlMSIgXAorOiA6ICJyIiAofihtYXNrKSksIm0iICgqYWRkcikgOiAibWVtb3J5IikKKworI2RlZmluZSBhdG9taWNfc2V0X21hc2sobWFzaywgYWRkcikgXAorX19hc21fXyBfX3ZvbGF0aWxlX18oTE9DSyAib3JsICUwLCUxIiBcCis6IDogInIiIChtYXNrKSwibSIgKCooYWRkcikpIDogIm1lbW9yeSIpCisKKy8qIEF0b21pYyBvcGVyYXRpb25zIGFyZSBhbHJlYWR5IHNlcmlhbGl6aW5nIG9uIHg4NiAqLworI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfZGVjKCkJYmFycmllcigpCisjZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2RlYygpCWJhcnJpZXIoKQorI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfaW5jKCkJYmFycmllcigpCisjZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpCWJhcnJpZXIoKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvYml0b3BzLmggYi9pbmNsdWRlL2FzbS1pMzg2L2JpdG9wcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkYjBiNzEyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9iaXRvcHMuaApAQCAtMCwwICsxLDQ2MiBAQAorI2lmbmRlZiBfSTM4Nl9CSVRPUFNfSAorI2RlZmluZSBfSTM4Nl9CSVRPUFNfSAorCisvKgorICogQ29weXJpZ2h0IDE5OTIsIExpbnVzIFRvcnZhbGRzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorCisvKgorICogVGhlc2UgaGF2ZSB0byBiZSBkb25lIHdpdGggaW5saW5lIGFzc2VtYmx5OiB0aGF0IHdheSB0aGUgYml0LXNldHRpbmcKKyAqIGlzIGd1YXJhbnRlZWQgdG8gYmUgYXRvbWljLiBBbGwgYml0IG9wZXJhdGlvbnMgcmV0dXJuIDAgaWYgdGhlIGJpdAorICogd2FzIGNsZWFyZWQgYmVmb3JlIHRoZSBvcGVyYXRpb24gYW5kICE9IDAgaWYgaXQgd2FzIG5vdC4KKyAqCisgKiBiaXQgMCBpcyB0aGUgTFNCIG9mIGFkZHI7IGJpdCAzMiBpcyB0aGUgTFNCIG9mIChhZGRyKzEpLgorICovCisKKyNpZmRlZiBDT05GSUdfU01QCisjZGVmaW5lIExPQ0tfUFJFRklYICJsb2NrIDsgIgorI2Vsc2UKKyNkZWZpbmUgTE9DS19QUkVGSVggIiIKKyNlbmRpZgorCisjZGVmaW5lIEFERFIgKCoodm9sYXRpbGUgbG9uZyAqKSBhZGRyKQorCisvKioKKyAqIHNldF9iaXQgLSBBdG9taWNhbGx5IHNldCBhIGJpdCBpbiBtZW1vcnkKKyAqIEBucjogdGhlIGJpdCB0byBzZXQKKyAqIEBhZGRyOiB0aGUgYWRkcmVzcyB0byBzdGFydCBjb3VudGluZyBmcm9tCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBhdG9taWMgYW5kIG1heSBub3QgYmUgcmVvcmRlcmVkLiAgU2VlIF9fc2V0X2JpdCgpCisgKiBpZiB5b3UgZG8gbm90IHJlcXVpcmUgdGhlIGF0b21pYyBndWFyYW50ZWVzLgorICoKKyAqIE5vdGU6IHRoZXJlIGFyZSBubyBndWFyYW50ZWVzIHRoYXQgdGhpcyBmdW5jdGlvbiB3aWxsIG5vdCBiZSByZW9yZGVyZWQKKyAqIG9uIG5vbiB4ODYgYXJjaGl0ZWN0dXJlcywgc28gaWYgeW91IGFyZSB3cml0dGluZyBwb3J0YWJsZSBjb2RlLAorICogbWFrZSBzdXJlIG5vdCB0byByZWx5IG9uIGl0cyByZW9yZGVyaW5nIGd1YXJhbnRlZXMuCisgKgorICogTm90ZSB0aGF0IEBuciBtYXkgYmUgYWxtb3N0IGFyYml0cmFyaWx5IGxhcmdlOyB0aGlzIGZ1bmN0aW9uIGlzIG5vdAorICogcmVzdHJpY3RlZCB0byBhY3Rpbmcgb24gYSBzaW5nbGUtd29yZCBxdWFudGl0eS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHNldF9iaXQoaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICogYWRkcikKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyggTE9DS19QUkVGSVgKKwkJImJ0c2wgJTEsJTAiCisJCToiPW0iIChBRERSKQorCQk6IklyIiAobnIpKTsKK30KKworLyoqCisgKiBfX3NldF9iaXQgLSBTZXQgYSBiaXQgaW4gbWVtb3J5CisgKiBAbnI6IHRoZSBiaXQgdG8gc2V0CisgKiBAYWRkcjogdGhlIGFkZHJlc3MgdG8gc3RhcnQgY291bnRpbmcgZnJvbQorICoKKyAqIFVubGlrZSBzZXRfYml0KCksIHRoaXMgZnVuY3Rpb24gaXMgbm9uLWF0b21pYyBhbmQgbWF5IGJlIHJlb3JkZXJlZC4KKyAqIElmIGl0J3MgY2FsbGVkIG9uIHRoZSBzYW1lIHJlZ2lvbiBvZiBtZW1vcnkgc2ltdWx0YW5lb3VzbHksIHRoZSBlZmZlY3QKKyAqIG1heSBiZSB0aGF0IG9ubHkgb25lIG9wZXJhdGlvbiBzdWNjZWVkcy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIF9fc2V0X2JpdChpbnQgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKiBhZGRyKQoreworCV9fYXNtX18oCisJCSJidHNsICUxLCUwIgorCQk6Ij1tIiAoQUREUikKKwkJOiJJciIgKG5yKSk7Cit9CisKKy8qKgorICogY2xlYXJfYml0IC0gQ2xlYXJzIGEgYml0IGluIG1lbW9yeQorICogQG5yOiBCaXQgdG8gY2xlYXIKKyAqIEBhZGRyOiBBZGRyZXNzIHRvIHN0YXJ0IGNvdW50aW5nIGZyb20KKyAqCisgKiBjbGVhcl9iaXQoKSBpcyBhdG9taWMgYW5kIG1heSBub3QgYmUgcmVvcmRlcmVkLiAgSG93ZXZlciwgaXQgZG9lcworICogbm90IGNvbnRhaW4gYSBtZW1vcnkgYmFycmllciwgc28gaWYgaXQgaXMgdXNlZCBmb3IgbG9ja2luZyBwdXJwb3NlcywKKyAqIHlvdSBzaG91bGQgY2FsbCBzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKSBhbmQvb3Igc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKQorICogaW4gb3JkZXIgdG8gZW5zdXJlIGNoYW5nZXMgYXJlIHZpc2libGUgb24gb3RoZXIgcHJvY2Vzc29ycy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX2JpdChpbnQgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKiBhZGRyKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKCBMT0NLX1BSRUZJWAorCQkiYnRybCAlMSwlMCIKKwkJOiI9bSIgKEFERFIpCisJCToiSXIiIChucikpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19jbGVhcl9iaXQoaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICogYWRkcikKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJImJ0cmwgJTEsJTAiCisJCToiPW0iIChBRERSKQorCQk6IklyIiAobnIpKTsKK30KKyNkZWZpbmUgc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCkJYmFycmllcigpCisjZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCkJYmFycmllcigpCisKKy8qKgorICogX19jaGFuZ2VfYml0IC0gVG9nZ2xlIGEgYml0IGluIG1lbW9yeQorICogQG5yOiB0aGUgYml0IHRvIGNoYW5nZQorICogQGFkZHI6IHRoZSBhZGRyZXNzIHRvIHN0YXJ0IGNvdW50aW5nIGZyb20KKyAqCisgKiBVbmxpa2UgY2hhbmdlX2JpdCgpLCB0aGlzIGZ1bmN0aW9uIGlzIG5vbi1hdG9taWMgYW5kIG1heSBiZSByZW9yZGVyZWQuCisgKiBJZiBpdCdzIGNhbGxlZCBvbiB0aGUgc2FtZSByZWdpb24gb2YgbWVtb3J5IHNpbXVsdGFuZW91c2x5LCB0aGUgZWZmZWN0CisgKiBtYXkgYmUgdGhhdCBvbmx5IG9uZSBvcGVyYXRpb24gc3VjY2VlZHMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2NoYW5nZV9iaXQoaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICogYWRkcikKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJImJ0Y2wgJTEsJTAiCisJCToiPW0iIChBRERSKQorCQk6IklyIiAobnIpKTsKK30KKworLyoqCisgKiBjaGFuZ2VfYml0IC0gVG9nZ2xlIGEgYml0IGluIG1lbW9yeQorICogQG5yOiBCaXQgdG8gY2hhbmdlCisgKiBAYWRkcjogQWRkcmVzcyB0byBzdGFydCBjb3VudGluZyBmcm9tCisgKgorICogY2hhbmdlX2JpdCgpIGlzIGF0b21pYyBhbmQgbWF5IG5vdCBiZSByZW9yZGVyZWQuIEl0IG1heSBiZQorICogcmVvcmRlcmVkIG9uIG90aGVyIGFyY2hpdGVjdHVyZXMgdGhhbiB4ODYuCisgKiBOb3RlIHRoYXQgQG5yIG1heSBiZSBhbG1vc3QgYXJiaXRyYXJpbHkgbGFyZ2U7IHRoaXMgZnVuY3Rpb24gaXMgbm90CisgKiByZXN0cmljdGVkIHRvIGFjdGluZyBvbiBhIHNpbmdsZS13b3JkIHF1YW50aXR5LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hhbmdlX2JpdChpbnQgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKiBhZGRyKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKCBMT0NLX1BSRUZJWAorCQkiYnRjbCAlMSwlMCIKKwkJOiI9bSIgKEFERFIpCisJCToiSXIiIChucikpOworfQorCisvKioKKyAqIHRlc3RfYW5kX3NldF9iaXQgLSBTZXQgYSBiaXQgYW5kIHJldHVybiBpdHMgb2xkIHZhbHVlCisgKiBAbnI6IEJpdCB0byBzZXQKKyAqIEBhZGRyOiBBZGRyZXNzIHRvIGNvdW50IGZyb20KKyAqCisgKiBUaGlzIG9wZXJhdGlvbiBpcyBhdG9taWMgYW5kIGNhbm5vdCBiZSByZW9yZGVyZWQuICAKKyAqIEl0IG1heSBiZSByZW9yZGVyZWQgb24gb3RoZXIgYXJjaGl0ZWN0dXJlcyB0aGFuIHg4Ni4KKyAqIEl0IGFsc28gaW1wbGllcyBhIG1lbW9yeSBiYXJyaWVyLgorICovCitzdGF0aWMgaW5saW5lIGludCB0ZXN0X2FuZF9zZXRfYml0KGludCBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqIGFkZHIpCit7CisJaW50IG9sZGJpdDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKCBMT0NLX1BSRUZJWAorCQkiYnRzbCAlMiwlMVxuXHRzYmJsICUwLCUwIgorCQk6Ij1yIiAob2xkYml0KSwiPW0iIChBRERSKQorCQk6IklyIiAobnIpIDogIm1lbW9yeSIpOworCXJldHVybiBvbGRiaXQ7Cit9CisKKy8qKgorICogX190ZXN0X2FuZF9zZXRfYml0IC0gU2V0IGEgYml0IGFuZCByZXR1cm4gaXRzIG9sZCB2YWx1ZQorICogQG5yOiBCaXQgdG8gc2V0CisgKiBAYWRkcjogQWRkcmVzcyB0byBjb3VudCBmcm9tCisgKgorICogVGhpcyBvcGVyYXRpb24gaXMgbm9uLWF0b21pYyBhbmQgY2FuIGJlIHJlb3JkZXJlZC4gIAorICogSWYgdHdvIGV4YW1wbGVzIG9mIHRoaXMgb3BlcmF0aW9uIHJhY2UsIG9uZSBjYW4gYXBwZWFyIHRvIHN1Y2NlZWQKKyAqIGJ1dCBhY3R1YWxseSBmYWlsLiAgWW91IG11c3QgcHJvdGVjdCBtdWx0aXBsZSBhY2Nlc3NlcyB3aXRoIGEgbG9jay4KKyAqLworc3RhdGljIGlubGluZSBpbnQgX190ZXN0X2FuZF9zZXRfYml0KGludCBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqIGFkZHIpCit7CisJaW50IG9sZGJpdDsKKworCV9fYXNtX18oCisJCSJidHNsICUyLCUxXG5cdHNiYmwgJTAsJTAiCisJCToiPXIiIChvbGRiaXQpLCI9bSIgKEFERFIpCisJCToiSXIiIChucikpOworCXJldHVybiBvbGRiaXQ7Cit9CisKKy8qKgorICogdGVzdF9hbmRfY2xlYXJfYml0IC0gQ2xlYXIgYSBiaXQgYW5kIHJldHVybiBpdHMgb2xkIHZhbHVlCisgKiBAbnI6IEJpdCB0byBjbGVhcgorICogQGFkZHI6IEFkZHJlc3MgdG8gY291bnQgZnJvbQorICoKKyAqIFRoaXMgb3BlcmF0aW9uIGlzIGF0b21pYyBhbmQgY2Fubm90IGJlIHJlb3JkZXJlZC4KKyAqIEl0IGNhbiBiZSByZW9yZGVyZGVyZWQgb24gb3RoZXIgYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHg4Ni4KKyAqIEl0IGFsc28gaW1wbGllcyBhIG1lbW9yeSBiYXJyaWVyLgorICovCitzdGF0aWMgaW5saW5lIGludCB0ZXN0X2FuZF9jbGVhcl9iaXQoaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICogYWRkcikKK3sKKwlpbnQgb2xkYml0OworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oIExPQ0tfUFJFRklYCisJCSJidHJsICUyLCUxXG5cdHNiYmwgJTAsJTAiCisJCToiPXIiIChvbGRiaXQpLCI9bSIgKEFERFIpCisJCToiSXIiIChucikgOiAibWVtb3J5Iik7CisJcmV0dXJuIG9sZGJpdDsKK30KKworLyoqCisgKiBfX3Rlc3RfYW5kX2NsZWFyX2JpdCAtIENsZWFyIGEgYml0IGFuZCByZXR1cm4gaXRzIG9sZCB2YWx1ZQorICogQG5yOiBCaXQgdG8gY2xlYXIKKyAqIEBhZGRyOiBBZGRyZXNzIHRvIGNvdW50IGZyb20KKyAqCisgKiBUaGlzIG9wZXJhdGlvbiBpcyBub24tYXRvbWljIGFuZCBjYW4gYmUgcmVvcmRlcmVkLiAgCisgKiBJZiB0d28gZXhhbXBsZXMgb2YgdGhpcyBvcGVyYXRpb24gcmFjZSwgb25lIGNhbiBhcHBlYXIgdG8gc3VjY2VlZAorICogYnV0IGFjdHVhbGx5IGZhaWwuICBZb3UgbXVzdCBwcm90ZWN0IG11bHRpcGxlIGFjY2Vzc2VzIHdpdGggYSBsb2NrLgorICovCitzdGF0aWMgaW5saW5lIGludCBfX3Rlc3RfYW5kX2NsZWFyX2JpdChpbnQgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpCit7CisJaW50IG9sZGJpdDsKKworCV9fYXNtX18oCisJCSJidHJsICUyLCUxXG5cdHNiYmwgJTAsJTAiCisJCToiPXIiIChvbGRiaXQpLCI9bSIgKEFERFIpCisJCToiSXIiIChucikpOworCXJldHVybiBvbGRiaXQ7Cit9CisKKy8qIFdBUk5JTkc6IG5vbiBhdG9taWMgYW5kIGl0IGNhbiBiZSByZW9yZGVyZWQhICovCitzdGF0aWMgaW5saW5lIGludCBfX3Rlc3RfYW5kX2NoYW5nZV9iaXQoaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQoreworCWludCBvbGRiaXQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJImJ0Y2wgJTIsJTFcblx0c2JibCAlMCwlMCIKKwkJOiI9ciIgKG9sZGJpdCksIj1tIiAoQUREUikKKwkJOiJJciIgKG5yKSA6ICJtZW1vcnkiKTsKKwlyZXR1cm4gb2xkYml0OworfQorCisvKioKKyAqIHRlc3RfYW5kX2NoYW5nZV9iaXQgLSBDaGFuZ2UgYSBiaXQgYW5kIHJldHVybiBpdHMgb2xkIHZhbHVlCisgKiBAbnI6IEJpdCB0byBjaGFuZ2UKKyAqIEBhZGRyOiBBZGRyZXNzIHRvIGNvdW50IGZyb20KKyAqCisgKiBUaGlzIG9wZXJhdGlvbiBpcyBhdG9taWMgYW5kIGNhbm5vdCBiZSByZW9yZGVyZWQuICAKKyAqIEl0IGFsc28gaW1wbGllcyBhIG1lbW9yeSBiYXJyaWVyLgorICovCitzdGF0aWMgaW5saW5lIGludCB0ZXN0X2FuZF9jaGFuZ2VfYml0KGludCBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyogYWRkcikKK3sKKwlpbnQgb2xkYml0OworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oIExPQ0tfUFJFRklYCisJCSJidGNsICUyLCUxXG5cdHNiYmwgJTAsJTAiCisJCToiPXIiIChvbGRiaXQpLCI9bSIgKEFERFIpCisJCToiSXIiIChucikgOiAibWVtb3J5Iik7CisJcmV0dXJuIG9sZGJpdDsKK30KKworI2lmIDAgLyogRm9vbCBrZXJuZWwtZG9jIHNpbmNlIGl0IGRvZXNuJ3QgZG8gbWFjcm9zIHlldCAqLworLyoqCisgKiB0ZXN0X2JpdCAtIERldGVybWluZSB3aGV0aGVyIGEgYml0IGlzIHNldAorICogQG5yOiBiaXQgbnVtYmVyIHRvIHRlc3QKKyAqIEBhZGRyOiBBZGRyZXNzIHRvIHN0YXJ0IGNvdW50aW5nIGZyb20KKyAqLworc3RhdGljIGludCB0ZXN0X2JpdChpbnQgbnIsIGNvbnN0IHZvbGF0aWxlIHZvaWQgKiBhZGRyKTsKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIGludCBjb25zdGFudF90ZXN0X2JpdChpbnQgbnIsIGNvbnN0IHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpCit7CisJcmV0dXJuICgoMVVMIDw8IChuciAmIDMxKSkgJiAoYWRkcltuciA+PiA1XSkpICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHZhcmlhYmxlX3Rlc3RfYml0KGludCBuciwgY29uc3Qgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqIGFkZHIpCit7CisJaW50IG9sZGJpdDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkiYnRsICUyLCUxXG5cdHNiYmwgJTAsJTAiCisJCToiPXIiIChvbGRiaXQpCisJCToibSIgKEFERFIpLCJJciIgKG5yKSk7CisJcmV0dXJuIG9sZGJpdDsKK30KKworI2RlZmluZSB0ZXN0X2JpdChucixhZGRyKSBcCisoX19idWlsdGluX2NvbnN0YW50X3AobnIpID8gXAorIGNvbnN0YW50X3Rlc3RfYml0KChuciksKGFkZHIpKSA6IFwKKyB2YXJpYWJsZV90ZXN0X2JpdCgobnIpLChhZGRyKSkpCisKKyN1bmRlZiBBRERSCisKKy8qKgorICogZmluZF9maXJzdF96ZXJvX2JpdCAtIGZpbmQgdGhlIGZpcnN0IHplcm8gYml0IGluIGEgbWVtb3J5IHJlZ2lvbgorICogQGFkZHI6IFRoZSBhZGRyZXNzIHRvIHN0YXJ0IHRoZSBzZWFyY2ggYXQKKyAqIEBzaXplOiBUaGUgbWF4aW11bSBzaXplIHRvIHNlYXJjaAorICoKKyAqIFJldHVybnMgdGhlIGJpdC1udW1iZXIgb2YgdGhlIGZpcnN0IHplcm8gYml0LCBub3QgdGhlIG51bWJlciBvZiB0aGUgYnl0ZQorICogY29udGFpbmluZyBhIGJpdC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgZmluZF9maXJzdF96ZXJvX2JpdChjb25zdCB1bnNpZ25lZCBsb25nICphZGRyLCB1bnNpZ25lZCBzaXplKQoreworCWludCBkMCwgZDEsIGQyOworCWludCByZXM7CisKKwlpZiAoIXNpemUpCisJCXJldHVybiAwOworCS8qIFRoaXMgbG9va3MgYXQgbWVtb3J5LiBNYXJrIGl0IHZvbGF0aWxlIHRvIHRlbGwgZ2NjIG5vdCB0byBtb3ZlIGl0IGFyb3VuZCAqLworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkibW92bCAkLTEsJSVlYXhcblx0IgorCQkieG9ybCAlJWVkeCwlJWVkeFxuXHQiCisJCSJyZXBlOyBzY2FzbFxuXHQiCisJCSJqZSAxZlxuXHQiCisJCSJ4b3JsIC00KCUlZWRpKSwlJWVheFxuXHQiCisJCSJzdWJsICQ0LCUlZWRpXG5cdCIKKwkJImJzZmwgJSVlYXgsJSVlZHhcbiIKKwkJIjE6XHRzdWJsICUlZWJ4LCUlZWRpXG5cdCIKKwkJInNobGwgJDMsJSVlZGlcblx0IgorCQkiYWRkbCAlJWVkaSwlJWVkeCIKKwkJOiI9ZCIgKHJlcyksICI9JmMiIChkMCksICI9JkQiIChkMSksICI9JmEiIChkMikKKwkJOiIxIiAoKHNpemUgKyAzMSkgPj4gNSksICIyIiAoYWRkciksICJiIiAoYWRkcikgOiAibWVtb3J5Iik7CisJcmV0dXJuIHJlczsKK30KKworLyoqCisgKiBmaW5kX25leHRfemVyb19iaXQgLSBmaW5kIHRoZSBmaXJzdCB6ZXJvIGJpdCBpbiBhIG1lbW9yeSByZWdpb24KKyAqIEBhZGRyOiBUaGUgYWRkcmVzcyB0byBiYXNlIHRoZSBzZWFyY2ggb24KKyAqIEBvZmZzZXQ6IFRoZSBiaXRudW1iZXIgdG8gc3RhcnQgc2VhcmNoaW5nIGF0CisgKiBAc2l6ZTogVGhlIG1heGltdW0gc2l6ZSB0byBzZWFyY2gKKyAqLworaW50IGZpbmRfbmV4dF96ZXJvX2JpdChjb25zdCB1bnNpZ25lZCBsb25nICphZGRyLCBpbnQgc2l6ZSwgaW50IG9mZnNldCk7CisKKy8qKgorICogZmluZF9maXJzdF9iaXQgLSBmaW5kIHRoZSBmaXJzdCBzZXQgYml0IGluIGEgbWVtb3J5IHJlZ2lvbgorICogQGFkZHI6IFRoZSBhZGRyZXNzIHRvIHN0YXJ0IHRoZSBzZWFyY2ggYXQKKyAqIEBzaXplOiBUaGUgbWF4aW11bSBzaXplIHRvIHNlYXJjaAorICoKKyAqIFJldHVybnMgdGhlIGJpdC1udW1iZXIgb2YgdGhlIGZpcnN0IHNldCBiaXQsIG5vdCB0aGUgbnVtYmVyIG9mIHRoZSBieXRlCisgKiBjb250YWluaW5nIGEgYml0LgorICovCitzdGF0aWMgaW5saW5lIGludCBmaW5kX2ZpcnN0X2JpdChjb25zdCB1bnNpZ25lZCBsb25nICphZGRyLCB1bnNpZ25lZCBzaXplKQoreworCWludCBkMCwgZDE7CisJaW50IHJlczsKKworCS8qIFRoaXMgbG9va3MgYXQgbWVtb3J5LiBNYXJrIGl0IHZvbGF0aWxlIHRvIHRlbGwgZ2NjIG5vdCB0byBtb3ZlIGl0IGFyb3VuZCAqLworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkieG9ybCAlJWVheCwlJWVheFxuXHQiCisJCSJyZXBlOyBzY2FzbFxuXHQiCisJCSJqeiAxZlxuXHQiCisJCSJsZWFsIC00KCUlZWRpKSwlJWVkaVxuXHQiCisJCSJic2ZsICglJWVkaSksJSVlYXhcbiIKKwkJIjE6XHRzdWJsICUlZWJ4LCUlZWRpXG5cdCIKKwkJInNobGwgJDMsJSVlZGlcblx0IgorCQkiYWRkbCAlJWVkaSwlJWVheCIKKwkJOiI9YSIgKHJlcyksICI9JmMiIChkMCksICI9JkQiIChkMSkKKwkJOiIxIiAoKHNpemUgKyAzMSkgPj4gNSksICIyIiAoYWRkciksICJiIiAoYWRkcikgOiAibWVtb3J5Iik7CisJcmV0dXJuIHJlczsKK30KKworLyoqCisgKiBmaW5kX25leHRfYml0IC0gZmluZCB0aGUgZmlyc3Qgc2V0IGJpdCBpbiBhIG1lbW9yeSByZWdpb24KKyAqIEBhZGRyOiBUaGUgYWRkcmVzcyB0byBiYXNlIHRoZSBzZWFyY2ggb24KKyAqIEBvZmZzZXQ6IFRoZSBiaXRudW1iZXIgdG8gc3RhcnQgc2VhcmNoaW5nIGF0CisgKiBAc2l6ZTogVGhlIG1heGltdW0gc2l6ZSB0byBzZWFyY2gKKyAqLworaW50IGZpbmRfbmV4dF9iaXQoY29uc3QgdW5zaWduZWQgbG9uZyAqYWRkciwgaW50IHNpemUsIGludCBvZmZzZXQpOworCisvKioKKyAqIGZmeiAtIGZpbmQgZmlyc3QgemVybyBpbiB3b3JkLgorICogQHdvcmQ6IFRoZSB3b3JkIHRvIHNlYXJjaAorICoKKyAqIFVuZGVmaW5lZCBpZiBubyB6ZXJvIGV4aXN0cywgc28gY29kZSBzaG91bGQgY2hlY2sgYWdhaW5zdCB+MFVMIGZpcnN0LgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZmZ6KHVuc2lnbmVkIGxvbmcgd29yZCkKK3sKKwlfX2FzbV9fKCJic2ZsICUxLCUwIgorCQk6Ij1yIiAod29yZCkKKwkJOiJyIiAofndvcmQpKTsKKwlyZXR1cm4gd29yZDsKK30KKworLyoqCisgKiBfX2ZmcyAtIGZpbmQgZmlyc3QgYml0IGluIHdvcmQuCisgKiBAd29yZDogVGhlIHdvcmQgdG8gc2VhcmNoCisgKgorICogVW5kZWZpbmVkIGlmIG5vIGJpdCBleGlzdHMsIHNvIGNvZGUgc2hvdWxkIGNoZWNrIGFnYWluc3QgMCBmaXJzdC4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fZmZzKHVuc2lnbmVkIGxvbmcgd29yZCkKK3sKKwlfX2FzbV9fKCJic2ZsICUxLCUwIgorCQk6Ij1yIiAod29yZCkKKwkJOiJybSIgKHdvcmQpKTsKKwlyZXR1cm4gd29yZDsKK30KKworLyoKKyAqIGZsczogZmluZCBsYXN0IGJpdCBzZXQuCisgKi8KKworI2RlZmluZSBmbHMoeCkgZ2VuZXJpY19mbHMoeCkKKworI2lmZGVmIF9fS0VSTkVMX18KKworLyoKKyAqIEV2ZXJ5IGFyY2hpdGVjdHVyZSBtdXN0IGRlZmluZSB0aGlzIGZ1bmN0aW9uLiBJdCdzIHRoZSBmYXN0ZXN0CisgKiB3YXkgb2Ygc2VhcmNoaW5nIGEgMTQwLWJpdCBiaXRtYXAgd2hlcmUgdGhlIGZpcnN0IDEwMCBiaXRzIGFyZQorICogdW5saWtlbHkgdG8gYmUgc2V0LiBJdCdzIGd1YXJhbnRlZWQgdGhhdCBhdCBsZWFzdCBvbmUgb2YgdGhlIDE0MAorICogYml0cyBpcyBjbGVhcmVkLgorICovCitzdGF0aWMgaW5saW5lIGludCBzY2hlZF9maW5kX2ZpcnN0X2JpdChjb25zdCB1bnNpZ25lZCBsb25nICpiKQoreworCWlmICh1bmxpa2VseShiWzBdKSkKKwkJcmV0dXJuIF9fZmZzKGJbMF0pOworCWlmICh1bmxpa2VseShiWzFdKSkKKwkJcmV0dXJuIF9fZmZzKGJbMV0pICsgMzI7CisJaWYgKHVubGlrZWx5KGJbMl0pKQorCQlyZXR1cm4gX19mZnMoYlsyXSkgKyA2NDsKKwlpZiAoYlszXSkKKwkJcmV0dXJuIF9fZmZzKGJbM10pICsgOTY7CisJcmV0dXJuIF9fZmZzKGJbNF0pICsgMTI4OworfQorCisvKioKKyAqIGZmcyAtIGZpbmQgZmlyc3QgYml0IHNldAorICogQHg6IHRoZSB3b3JkIHRvIHNlYXJjaAorICoKKyAqIFRoaXMgaXMgZGVmaW5lZCB0aGUgc2FtZSB3YXkgYXMKKyAqIHRoZSBsaWJjIGFuZCBjb21waWxlciBidWlsdGluIGZmcyByb3V0aW5lcywgdGhlcmVmb3JlCisgKiBkaWZmZXJzIGluIHNwaXJpdCBmcm9tIHRoZSBhYm92ZSBmZnogKG1hbiBmZnMpLgorICovCitzdGF0aWMgaW5saW5lIGludCBmZnMoaW50IHgpCit7CisJaW50IHI7CisKKwlfX2FzbV9fKCJic2ZsICUxLCUwXG5cdCIKKwkJImpueiAxZlxuXHQiCisJCSJtb3ZsICQtMSwlMFxuIgorCQkiMToiIDogIj1yIiAocikgOiAicm0iICh4KSk7CisJcmV0dXJuIHIrMTsKK30KKworLyoqCisgKiBod2VpZ2h0TiAtIHJldHVybnMgdGhlIGhhbW1pbmcgd2VpZ2h0IG9mIGEgTi1iaXQgd29yZAorICogQHg6IHRoZSB3b3JkIHRvIHdlaWdoCisgKgorICogVGhlIEhhbW1pbmcgV2VpZ2h0IG9mIGEgbnVtYmVyIGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgYml0cyBzZXQgaW4gaXQuCisgKi8KKworI2RlZmluZSBod2VpZ2h0MzIoeCkgZ2VuZXJpY19od2VpZ2h0MzIoeCkKKyNkZWZpbmUgaHdlaWdodDE2KHgpIGdlbmVyaWNfaHdlaWdodDE2KHgpCisjZGVmaW5lIGh3ZWlnaHQ4KHgpIGdlbmVyaWNfaHdlaWdodDgoeCkKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2lmZGVmIF9fS0VSTkVMX18KKworI2RlZmluZSBleHQyX3NldF9iaXQobnIsYWRkcikgXAorCV9fdGVzdF9hbmRfc2V0X2JpdCgobnIpLCh1bnNpZ25lZCBsb25nKilhZGRyKQorI2RlZmluZSBleHQyX3NldF9iaXRfYXRvbWljKGxvY2ssbnIsYWRkcikgXAorICAgICAgICB0ZXN0X2FuZF9zZXRfYml0KChuciksKHVuc2lnbmVkIGxvbmcqKWFkZHIpCisjZGVmaW5lIGV4dDJfY2xlYXJfYml0KG5yLCBhZGRyKSBcCisJX190ZXN0X2FuZF9jbGVhcl9iaXQoKG5yKSwodW5zaWduZWQgbG9uZyopYWRkcikKKyNkZWZpbmUgZXh0Ml9jbGVhcl9iaXRfYXRvbWljKGxvY2ssbnIsIGFkZHIpIFwKKwkgICAgICAgIHRlc3RfYW5kX2NsZWFyX2JpdCgobnIpLCh1bnNpZ25lZCBsb25nKilhZGRyKQorI2RlZmluZSBleHQyX3Rlc3RfYml0KG5yLCBhZGRyKSAgICAgIHRlc3RfYml0KChuciksKHVuc2lnbmVkIGxvbmcqKWFkZHIpCisjZGVmaW5lIGV4dDJfZmluZF9maXJzdF96ZXJvX2JpdChhZGRyLCBzaXplKSBcCisJZmluZF9maXJzdF96ZXJvX2JpdCgodW5zaWduZWQgbG9uZyopYWRkciwgc2l6ZSkKKyNkZWZpbmUgZXh0Ml9maW5kX25leHRfemVyb19iaXQoYWRkciwgc2l6ZSwgb2ZmKSBcCisJZmluZF9uZXh0X3plcm9fYml0KCh1bnNpZ25lZCBsb25nKilhZGRyLCBzaXplLCBvZmYpCisKKy8qIEJpdG1hcCBmdW5jdGlvbnMgZm9yIHRoZSBtaW5peCBmaWxlc3lzdGVtLiAgKi8KKyNkZWZpbmUgbWluaXhfdGVzdF9hbmRfc2V0X2JpdChucixhZGRyKSBfX3Rlc3RfYW5kX3NldF9iaXQobnIsKHZvaWQqKWFkZHIpCisjZGVmaW5lIG1pbml4X3NldF9iaXQobnIsYWRkcikgX19zZXRfYml0KG5yLCh2b2lkKilhZGRyKQorI2RlZmluZSBtaW5peF90ZXN0X2FuZF9jbGVhcl9iaXQobnIsYWRkcikgX190ZXN0X2FuZF9jbGVhcl9iaXQobnIsKHZvaWQqKWFkZHIpCisjZGVmaW5lIG1pbml4X3Rlc3RfYml0KG5yLGFkZHIpIHRlc3RfYml0KG5yLCh2b2lkKilhZGRyKQorI2RlZmluZSBtaW5peF9maW5kX2ZpcnN0X3plcm9fYml0KGFkZHIsc2l6ZSkgXAorCWZpbmRfZmlyc3RfemVyb19iaXQoKHZvaWQqKWFkZHIsc2l6ZSkKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9JMzg2X0JJVE9QU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L2Jvb3QuaCBiL2luY2x1ZGUvYXNtLWkzODYvYm9vdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2YjIyOGUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2Jvb3QuaApAQCAtMCwwICsxLDE1IEBACisjaWZuZGVmIF9MSU5VWF9CT09UX0gKKyNkZWZpbmUgX0xJTlVYX0JPT1RfSAorCisvKiBEb24ndCB0b3VjaCB0aGVzZSwgdW5sZXNzIHlvdSByZWFsbHkga25vdyB3aGF0IHlvdSdyZSBkb2luZy4gKi8KKyNkZWZpbmUgREVGX0lOSVRTRUcJMHg5MDAwCisjZGVmaW5lIERFRl9TWVNTRUcJMHgxMDAwCisjZGVmaW5lIERFRl9TRVRVUFNFRwkweDkwMjAKKyNkZWZpbmUgREVGX1NZU1NJWkUJMHg3RjAwCisKKy8qIEludGVybmFsIHN2Z2Egc3RhcnR1cCBjb25zdGFudHMgKi8KKyNkZWZpbmUgTk9STUFMX1ZHQQkweGZmZmYJCS8qIDgweDI1IG1vZGUgKi8KKyNkZWZpbmUgRVhURU5ERURfVkdBCTB4ZmZmZQkJLyogODB4NTAgbW9kZSAqLworI2RlZmluZSBBU0tfVkdBCQkweGZmZmQJCS8qIGFzayBmb3IgaXQgYXQgYm9vdHVwICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9idWcuaCBiL2luY2x1ZGUvYXNtLWkzODYvYnVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA2ZWI1MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvYnVnLmgKQEAgLTAsMCArMSwyNSBAQAorI2lmbmRlZiBfSTM4Nl9CVUdfSAorI2RlZmluZSBfSTM4Nl9CVUdfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKy8qCisgKiBUZWxsIHRoZSB1c2VyIHRoZXJlIGlzIHNvbWUgcHJvYmxlbS4KKyAqIFRoZSBvZmZlbmRpbmcgZmlsZSBhbmQgbGluZSBhcmUgZW5jb2RlZCBhZnRlciB0aGUgIm9mZmljaWFsbHkKKyAqIHVuZGVmaW5lZCIgb3Bjb2RlIGZvciBwYXJzaW5nIGluIHRoZSB0cmFwIGhhbmRsZXIuCisgKi8KKworI2lmZGVmIENPTkZJR19ERUJVR19CVUdWRVJCT1NFCisjZGVmaW5lIEJVRygpCQkJCVwKKyBfX2FzbV9fIF9fdm9sYXRpbGVfXygJInVkMlxuIgkJXAorCQkJIlx0LndvcmQgJWMwXG4iCVwKKwkJCSJcdC5sb25nICVjMVxuIglcCisJCQkgOiA6ICJpIiAoX19MSU5FX18pLCAiaSIgKF9fRklMRV9fKSkKKyNlbHNlCisjZGVmaW5lIEJVRygpIF9fYXNtX18gX192b2xhdGlsZV9fKCJ1ZDJcbiIpCisjZW5kaWYKKworI2RlZmluZSBIQVZFX0FSQ0hfQlVHCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYnVnLmg+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9idWdzLmggYi9pbmNsdWRlL2FzbS1pMzg2L2J1Z3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Nzg5ZmMyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9idWdzLmgKQEAgLTAsMCArMSwyMTMgQEAKKy8qCisgKiAgaW5jbHVkZS9hc20taTM4Ni9idWdzLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk0ICBMaW51cyBUb3J2YWxkcworICoKKyAqICBDeXJpeCBzdHVmZiwgSnVuZSAxOTk4IGJ5OgorICoJLSBSYWZhZWwgUi4gUmVpbG92YSAobW92ZWQgZXZlcnl0aGluZyBmcm9tIGhlYWQuUyksCisgKiAgICAgICAgPHJyZWlsb3ZhQGVjZWNzLnVjLmVkdT4KKyAqCS0gQ2hhbm5pbmcgQ29ybiAodGVzdHMgJiBmaXhlcyksCisgKgktIEFuZHJldyBELiBCYWxzYSAoY29kZSBjbGVhbnVwKS4KKyAqCisgKiAgUGVudGl1bSBJSUkgRlhTUiwgU1NFIHN1cHBvcnQKKyAqCUdhcmV0aCBIdWdoZXMgPGdhcmV0aEB2YWxpbnV4LmNvbT4sIE1heSAyMDAwCisgKi8KKworLyoKKyAqIFRoaXMgaXMgaW5jbHVkZWQgYnkgaW5pdC9tYWluLmMgdG8gY2hlY2sgZm9yIGFyY2hpdGVjdHVyZS1kZXBlbmRlbnQgYnVncy4KKyAqCisgKiBOZWVkczoKKyAqCXZvaWQgY2hlY2tfYnVncyh2b2lkKTsKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vaTM4Ny5oPgorI2luY2x1ZGUgPGFzbS9tc3IuaD4KKworc3RhdGljIGludCBfX2luaXQgbm9faGFsdChjaGFyICpzKQoreworCWJvb3RfY3B1X2RhdGEuaGx0X3dvcmtzX29rID0gMDsKKwlyZXR1cm4gMTsKK30KKworX19zZXR1cCgibm8taGx0Iiwgbm9faGFsdCk7CisKK3N0YXRpYyBpbnQgX19pbml0IG1jYV9wZW50aXVtKGNoYXIgKnMpCit7CisJbWNhX3BlbnRpdW1fZmxhZyA9IDE7CisJcmV0dXJuIDE7Cit9CisKK19fc2V0dXAoIm1jYS1wZW50aXVtIiwgbWNhX3BlbnRpdW0pOworCitzdGF0aWMgaW50IF9faW5pdCBub18zODcoY2hhciAqcykKK3sKKwlib290X2NwdV9kYXRhLmhhcmRfbWF0aCA9IDA7CisJd3JpdGVfY3IwKDB4RSB8IHJlYWRfY3IwKCkpOworCXJldHVybiAxOworfQorCitfX3NldHVwKCJubzM4NyIsIG5vXzM4Nyk7CisKK3N0YXRpYyBkb3VibGUgX19pbml0ZGF0YSB4ID0gNDE5NTgzNS4wOworc3RhdGljIGRvdWJsZSBfX2luaXRkYXRhIHkgPSAzMTQ1NzI3LjA7CisKKy8qCisgKiBUaGlzIHVzZWQgdG8gY2hlY2sgZm9yIGV4Y2VwdGlvbnMuLiAKKyAqIEhvd2V2ZXIsIGl0IHR1cm5zIG91dCB0aGF0IHRvIHN1cHBvcnQgdGhhdCwKKyAqIHRoZSBYTU0gdHJhcCBoYW5kbGVycyBiYXNpY2FsbHkgaGFkIHRvCisgKiBiZSBidWdneS4gU28gbGV0J3MgaGF2ZSBhIGNvcnJlY3QgWE1NIHRyYXAKKyAqIGhhbmRsZXIsIGFuZCBmb3JnZXQgYWJvdXQgcHJpbnRpbmcgb3V0CisgKiBzb21lIHN0YXR1cyBhdCBib290LgorICoKKyAqIFdlIHNob3VsZCByZWFsbHkgb25seSBjYXJlIGFib3V0IGJ1Z3MgaGVyZQorICogYW55d2F5LiBOb3QgZmVhdHVyZXMuCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBjaGVja19mcHUodm9pZCkKK3sKKwlpZiAoIWJvb3RfY3B1X2RhdGEuaGFyZF9tYXRoKSB7CisjaWZuZGVmIENPTkZJR19NQVRIX0VNVUxBVElPTgorCQlwcmludGsoS0VSTl9FTUVSRyAiTm8gY29wcm9jZXNzb3IgZm91bmQgYW5kIG5vIG1hdGggZW11bGF0aW9uIHByZXNlbnQuXG4iKTsKKwkJcHJpbnRrKEtFUk5fRU1FUkcgIkdpdmluZyB1cC5cbiIpOworCQlmb3IgKDs7KSA7CisjZW5kaWYKKwkJcmV0dXJuOworCX0KKworLyogRW5hYmxlIEZYU1IgYW5kIGNvbXBhbnkgX2JlZm9yZV8gdGVzdGluZyBmb3IgRlAgcHJvYmxlbXMuICovCisJLyoKKwkgKiBWZXJpZnkgdGhhdCB0aGUgRlhTQVZFL0ZYUlNUT1IgZGF0YSB3aWxsIGJlIDE2LWJ5dGUgYWxpZ25lZC4KKwkgKi8KKwlpZiAob2Zmc2V0b2Yoc3RydWN0IHRhc2tfc3RydWN0LCB0aHJlYWQuaTM4Ny5meHNhdmUpICYgMTUpIHsKKwkJZXh0ZXJuIHZvaWQgX19idWdneV9meHNyX2FsaWdubWVudCh2b2lkKTsKKwkJX19idWdneV9meHNyX2FsaWdubWVudCgpOworCX0KKwlpZiAoY3B1X2hhc19meHNyKSB7CisJCXByaW50ayhLRVJOX0lORk8gIkVuYWJsaW5nIGZhc3QgRlBVIHNhdmUgYW5kIHJlc3RvcmUuLi4gIik7CisJCXNldF9pbl9jcjQoWDg2X0NSNF9PU0ZYU1IpOworCQlwcmludGsoImRvbmUuXG4iKTsKKwl9CisJaWYgKGNwdV9oYXNfeG1tKSB7CisJCXByaW50ayhLRVJOX0lORk8gIkVuYWJsaW5nIHVubWFza2VkIFNJTUQgRlBVIGV4Y2VwdGlvbiBzdXBwb3J0Li4uICIpOworCQlzZXRfaW5fY3I0KFg4Nl9DUjRfT1NYTU1FWENQVCk7CisJCXByaW50aygiZG9uZS5cbiIpOworCX0KKworCS8qIFRlc3QgZm9yIHRoZSBkaXZsIGJ1Zy4uICovCisJX19hc21fXygiZm5pbml0XG5cdCIKKwkJImZsZGwgJTFcblx0IgorCQkiZmRpdmwgJTJcblx0IgorCQkiZm11bGwgJTJcblx0IgorCQkiZmxkbCAlMVxuXHQiCisJCSJmc3VicCAlJXN0LCUlc3QoMSlcblx0IgorCQkiZmlzdHBsICUwXG5cdCIKKwkJImZ3YWl0XG5cdCIKKwkJImZuaW5pdCIKKwkJOiAiPW0iICgqJmJvb3RfY3B1X2RhdGEuZmRpdl9idWcpCisJCTogIm0iICgqJngpLCAibSIgKComeSkpOworCWlmIChib290X2NwdV9kYXRhLmZkaXZfYnVnKQorCQlwcmludGsoIkhtbSwgRlBVIHdpdGggRkRJViBidWcuXG4iKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGNoZWNrX2hsdCh2b2lkKQoreworCXByaW50ayhLRVJOX0lORk8gIkNoZWNraW5nICdobHQnIGluc3RydWN0aW9uLi4uICIpOworCWlmICghYm9vdF9jcHVfZGF0YS5obHRfd29ya3Nfb2spIHsKKwkJcHJpbnRrKCJkaXNhYmxlZFxuIik7CisJCXJldHVybjsKKwl9CisJX19hc21fXyBfX3ZvbGF0aWxlX18oImhsdCA7IGhsdCA7IGhsdCA7IGhsdCIpOworCXByaW50aygiT0suXG4iKTsKK30KKworLyoKKyAqCU1vc3QgMzg2IHByb2Nlc3NvcnMgaGF2ZSBhIGJ1ZyB3aGVyZSBhIFBPUEFEIGNhbiBsb2NrIHRoZSAKKyAqCW1hY2hpbmUgZXZlbiBmcm9tIHVzZXIgc3BhY2UuCisgKi8KKyAKK3N0YXRpYyB2b2lkIF9faW5pdCBjaGVja19wb3BhZCh2b2lkKQoreworI2lmbmRlZiBDT05GSUdfWDg2X1BPUEFEX09LCisJaW50IHJlcywgaW5wID0gKGludCkgJnJlczsKKworCXByaW50ayhLRVJOX0lORk8gIkNoZWNraW5nIGZvciBwb3BhZCBidWcuLi4gIik7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oIAorCSAgIm1vdmwgJDEyMzQ1Njc4LCUlZWF4OyBtb3ZsICQwLCUlZWRpOyBwdXNoYTsgcG9wYTsgbW92bCAoJSVlZHgsJSVlZGkpLCUlZWN4ICIKKwkgIDogIj0mYSIgKHJlcykKKwkgIDogImQiIChpbnApCisJICA6ICJlY3giLCAiZWRpIiApOworCS8qIElmIHRoaXMgZmFpbHMsIGl0IG1lYW5zIHRoYXQgYW55IHVzZXIgcHJvZ3JhbSBtYXkgbG9jayB0aGUgQ1BVIGhhcmQuIFRvbyBiYWQuICovCisJaWYgKHJlcyAhPSAxMjM0NTY3OCkgcHJpbnRrKCAiQnVnZ3kuXG4iICk7CisJCSAgICAgICAgZWxzZSBwcmludGsoICJPSy5cbiIgKTsKKyNlbmRpZgorfQorCisvKgorICogQ2hlY2sgd2hldGhlciB3ZSBhcmUgYWJsZSB0byBydW4gdGhpcyBrZXJuZWwgc2FmZWx5IG9uIFNNUC4KKyAqCisgKiAtIEluIG9yZGVyIHRvIHJ1biBvbiBhIGkzODYsIHdlIG5lZWQgdG8gYmUgY29tcGlsZWQgZm9yIGkzODYKKyAqICAgKGZvciBkdWUgdG8gbGFjayBvZiAiaW52bHBnIiBhbmQgd29ya2luZyBXUCBvbiBhIGkzODYpCisgKiAtIEluIG9yZGVyIHRvIHJ1biBvbiBhbnl0aGluZyB3aXRob3V0IGEgVFNDLCB3ZSBuZWVkIHRvIGJlCisgKiAgIGNvbXBpbGVkIGZvciBhIGk0ODYuCisgKiAtIEluIG9yZGVyIHRvIHN1cHBvcnQgdGhlIGxvY2FsIEFQSUMgb24gYSBidWdneSBQZW50aXVtIG1hY2hpbmUsCisgKiAgIHdlIG5lZWQgdG8gYmUgY29tcGlsZWQgd2l0aCBDT05GSUdfWDg2X0dPT0RfQVBJQyBkaXNhYmxlZCwKKyAqICAgd2hpY2ggaGFwcGVucyBpbXBsaWNpdGx5IGlmIGNvbXBpbGVkIGZvciBhIFBlbnRpdW0gb3IgbG93ZXIKKyAqICAgKHVubGVzcyBhbiBhZHZhbmNlZCBzZWxlY3Rpb24gb2YgQ1BVIGZlYXR1cmVzIGlzIHVzZWQpIGFzIGFuCisgKiAgIG90aGVyd2lzZSBjb25maWcgaW1wbGllcyBhIHByb3Blcmx5IHdvcmtpbmcgbG9jYWwgQVBJQyB3aXRob3V0CisgKiAgIHRoZSBuZWVkIHRvIGRvIGV4dHJhIHJlYWRzIGZyb20gdGhlIEFQSUMuCisqLworCitzdGF0aWMgdm9pZCBfX2luaXQgY2hlY2tfY29uZmlnKHZvaWQpCit7CisvKgorICogV2UnZCBiZXR0ZXIgbm90IGJlIGEgaTM4NiBpZiB3ZSdyZSBjb25maWd1cmVkIHRvIHVzZSBzb21lCisgKiBpNDg2KyBvbmx5IGZlYXR1cmVzISAoV1Agd29ya3MgaW4gc3VwZXJ2aXNvciBtb2RlIGFuZCB0aGUKKyAqIG5ldyAiaW52bHBnIiBhbmQgImJzd2FwIiBpbnN0cnVjdGlvbnMpCisgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19YODZfV1BfV09SS1NfT0spIHx8IGRlZmluZWQoQ09ORklHX1g4Nl9JTlZMUEcpIHx8IGRlZmluZWQoQ09ORklHX1g4Nl9CU1dBUCkKKwlpZiAoYm9vdF9jcHVfZGF0YS54ODYgPT0gMykKKwkJcGFuaWMoIktlcm5lbCByZXF1aXJlcyBpNDg2KyBmb3IgJ2ludmxwZycgYW5kIG90aGVyIGZlYXR1cmVzIik7CisjZW5kaWYKKworLyoKKyAqIElmIHdlIGNvbmZpZ3VyZWQgb3Vyc2VsdmVzIGZvciBhIFRTQywgd2UnZCBiZXR0ZXIgaGF2ZSBvbmUhCisgKi8KKyNpZmRlZiBDT05GSUdfWDg2X1RTQworCWlmICghY3B1X2hhc190c2MpCisJCXBhbmljKCJLZXJuZWwgY29tcGlsZWQgZm9yIFBlbnRpdW0rLCByZXF1aXJlcyBUU0MgZmVhdHVyZSEiKTsKKyNlbmRpZgorCisvKgorICogSWYgd2Ugd2VyZSB0b2xkIHdlIGhhZCBhIGdvb2QgbG9jYWwgQVBJQywgY2hlY2sgZm9yIGJ1Z2d5IFBlbnRpYSwKKyAqIGkuZS4gYWxsIEIgc3RlcHBpbmdzIGFuZCB0aGUgQzIgc3RlcHBpbmcgb2YgUDU0QyB3aGVuIHVzaW5nIHRoZWlyCisgKiBpbnRlZ3JhdGVkIEFQSUMgKHNlZSAxMUFQIGVycmF0dW0gaW4gIlBlbnRpdW0gUHJvY2Vzc29yCisgKiBTcGVjaWZpY2F0aW9uIFVwZGF0ZSIpLgorICovCisjaWYgZGVmaW5lZChDT05GSUdfWDg2X0xPQ0FMX0FQSUMpICYmIGRlZmluZWQoQ09ORklHX1g4Nl9HT09EX0FQSUMpCisJaWYgKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0lOVEVMCisJICAgICYmIGNwdV9oYXNfYXBpYworCSAgICAmJiBib290X2NwdV9kYXRhLng4NiA9PSA1CisJICAgICYmIGJvb3RfY3B1X2RhdGEueDg2X21vZGVsID09IDIKKwkgICAgJiYgKGJvb3RfY3B1X2RhdGEueDg2X21hc2sgPCA2IHx8IGJvb3RfY3B1X2RhdGEueDg2X21hc2sgPT0gMTEpKQorCQlwYW5pYygiS2VybmVsIGNvbXBpbGVkIGZvciBQTU1YKywgYXNzdW1lcyBhIGxvY2FsIEFQSUMgd2l0aG91dCB0aGUgcmVhZC1iZWZvcmUtd3JpdGUgYnVnISIpOworI2VuZGlmCit9CisKK2V4dGVybiB2b2lkIGFsdGVybmF0aXZlX2luc3RydWN0aW9ucyh2b2lkKTsKKworc3RhdGljIHZvaWQgX19pbml0IGNoZWNrX2J1Z3Modm9pZCkKK3sKKwlpZGVudGlmeV9jcHUoJmJvb3RfY3B1X2RhdGEpOworI2lmbmRlZiBDT05GSUdfU01QCisJcHJpbnRrKCJDUFU6ICIpOworCXByaW50X2NwdV9pbmZvKCZib290X2NwdV9kYXRhKTsKKyNlbmRpZgorCWNoZWNrX2NvbmZpZygpOworCWNoZWNrX2ZwdSgpOworCWNoZWNrX2hsdCgpOworCWNoZWNrX3BvcGFkKCk7CisJc3lzdGVtX3V0c25hbWUubWFjaGluZVsxXSA9ICcwJyArIChib290X2NwdV9kYXRhLng4NiA+IDYgPyA2IDogYm9vdF9jcHVfZGF0YS54ODYpOworCWFsdGVybmF0aXZlX2luc3RydWN0aW9ucygpOyAKK30KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvYnl0ZW9yZGVyLmggYi9pbmNsdWRlL2FzbS1pMzg2L2J5dGVvcmRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwZDczZjQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2J5dGVvcmRlci5oCkBAIC0wLDAgKzEsNTkgQEAKKyNpZm5kZWYgX0kzODZfQllURU9SREVSX0gKKyNkZWZpbmUgX0kzODZfQllURU9SREVSX0gKKworI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisKKyNpZmRlZiBfX0dOVUNfXworCisvKiBGb3IgYXZvaWRpbmcgYnN3YXAgb24gaTM4NiAqLworI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNlbmRpZgorCitzdGF0aWMgX19pbmxpbmVfXyBfX2F0dHJpYnV0ZV9jb25zdF9fIF9fdTMyIF9fX2FyY2hfX3N3YWIzMihfX3UzMiB4KQoreworI2lmZGVmIENPTkZJR19YODZfQlNXQVAKKwlfX2FzbV9fKCJic3dhcCAlMCIgOiAiPXIiICh4KSA6ICIwIiAoeCkpOworI2Vsc2UKKwlfX2FzbV9fKCJ4Y2hnYiAlYjAsJWgwXG5cdCIJLyogc3dhcCBsb3dlciBieXRlcwkqLworCQkicm9ybCAkMTYsJTBcblx0IgkvKiBzd2FwIHdvcmRzCQkqLworCQkieGNoZ2IgJWIwLCVoMCIJCS8qIHN3YXAgaGlnaGVyIGJ5dGVzCSovCisJCToiPXEiICh4KQorCQk6ICIwIiAoeCkpOworI2VuZGlmCisJcmV0dXJuIHg7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fYXR0cmlidXRlX2NvbnN0X18gX191NjQgX19fYXJjaF9fc3dhYjY0KF9fdTY0IHZhbCkKK3sgCisJdW5pb24geyAKKwkJc3RydWN0IHsgX191MzIgYSxiOyB9IHM7CisJCV9fdTY0IHU7CisJfSB2OworCXYudSA9IHZhbDsKKyNpZmRlZiBDT05GSUdfWDg2X0JTV0FQCisJYXNtKCJic3dhcGwgJTAgOyBic3dhcGwgJTEgOyB4Y2hnbCAlMCwlMSIgCisJICAgIDogIj1yIiAodi5zLmEpLCAiPXIiICh2LnMuYikgCisJICAgIDogIjAiICh2LnMuYSksICIxIiAodi5zLmIpKTsgCisjZWxzZQorICAgdi5zLmEgPSBfX19hcmNoX19zd2FiMzIodi5zLmEpOyAKKwl2LnMuYiA9IF9fX2FyY2hfX3N3YWIzMih2LnMuYik7IAorCWFzbSgieGNoZ2wgJTAsJTEiIDogIj1yIiAodi5zLmEpLCAiPXIiICh2LnMuYikgOiAiMCIgKHYucy5hKSwgIjEiICh2LnMuYikpOworI2VuZGlmCisJcmV0dXJuIHYudTsJCit9IAorCisvKiBEbyBub3QgZGVmaW5lIHN3YWIxNi4gIEdjYyBpcyBzbWFydCBlbm91Z2ggdG8gcmVjb2duaXplICJDIiB2ZXJzaW9uIGFuZAorICAgY29udmVydCBpdCBpbnRvIHJvdGF0aW9uIG9yIGV4aGFuZ2UuICAqLworCisjZGVmaW5lIF9fYXJjaF9fc3dhYjY0KHgpIF9fX2FyY2hfX3N3YWI2NCh4KQorI2RlZmluZSBfX2FyY2hfX3N3YWIzMih4KSBfX19hcmNoX19zd2FiMzIoeCkKKworI2RlZmluZSBfX0JZVEVPUkRFUl9IQVNfVTY0X18KKworI2VuZGlmIC8qIF9fR05VQ19fICovCisKKyNpbmNsdWRlIDxsaW51eC9ieXRlb3JkZXIvbGl0dGxlX2VuZGlhbi5oPgorCisjZW5kaWYgLyogX0kzODZfQllURU9SREVSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvY2FjaGUuaCBiL2luY2x1ZGUvYXNtLWkzODYvY2FjaGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDk3ODg3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9jYWNoZS5oCkBAIC0wLDAgKzEsMTUgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1pMzg2L2NhY2hlLmgKKyAqLworI2lmbmRlZiBfX0FSQ0hfSTM4Nl9DQUNIRV9ICisjZGVmaW5lIF9fQVJDSF9JMzg2X0NBQ0hFX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisvKiBMMSBjYWNoZSBsaW5lIHNpemUgKi8KKyNkZWZpbmUgTDFfQ0FDSEVfU0hJRlQJKENPTkZJR19YODZfTDFfQ0FDSEVfU0hJRlQpCisjZGVmaW5lIEwxX0NBQ0hFX0JZVEVTCSgxIDw8IEwxX0NBQ0hFX1NISUZUKQorCisjZGVmaW5lIEwxX0NBQ0hFX1NISUZUX01BWCA3CS8qIGxhcmdlc3QgTDEgd2hpY2ggdGhpcyBhcmNoIHN1cHBvcnRzICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9jYWNoZWZsdXNoLmggYi9pbmNsdWRlL2FzbS1pMzg2L2NhY2hlZmx1c2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWEzNmRlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9jYWNoZWZsdXNoLmgKQEAgLTAsMCArMSwzNCBAQAorI2lmbmRlZiBfSTM4Nl9DQUNIRUZMVVNIX0gKKyNkZWZpbmUgX0kzODZfQ0FDSEVGTFVTSF9ICisKKy8qIEtlZXAgaW5jbHVkZXMgdGhlIHNhbWUgYWNyb3NzIGFyY2hlcy4gICovCisjaW5jbHVkZSA8bGludXgvbW0uaD4KKworLyogQ2FjaGVzIGFyZW4ndCBicmFpbi1kZWFkIG9uIHRoZSBpbnRlbC4gKi8KKyNkZWZpbmUgZmx1c2hfY2FjaGVfYWxsKCkJCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2NhY2hlX21tKG1tKQkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfcmFuZ2Uodm1hLCBzdGFydCwgZW5kKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2NhY2hlX3BhZ2Uodm1hLCB2bWFkZHIsIHBmbikJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9kY2FjaGVfcGFnZShwYWdlKQkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfZGNhY2hlX21tYXBfbG9jayhtYXBwaW5nKQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9kY2FjaGVfbW1hcF91bmxvY2sobWFwcGluZykJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9pY2FjaGVfcmFuZ2Uoc3RhcnQsIGVuZCkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfaWNhY2hlX3BhZ2Uodm1hLHBnKQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9pY2FjaGVfdXNlcl9yYW5nZSh2bWEscGcsYWRyLGxlbikJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9jYWNoZV92bWFwKHN0YXJ0LCBlbmQpCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2NhY2hlX3Z1bm1hcChzdGFydCwgZW5kKQkJZG8geyB9IHdoaWxlICgwKQorCisjZGVmaW5lIGNvcHlfdG9fdXNlcl9wYWdlKHZtYSwgcGFnZSwgdmFkZHIsIGRzdCwgc3JjLCBsZW4pIFwKKwltZW1jcHkoZHN0LCBzcmMsIGxlbikKKyNkZWZpbmUgY29weV9mcm9tX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIHZhZGRyLCBkc3QsIHNyYywgbGVuKSBcCisJbWVtY3B5KGRzdCwgc3JjLCBsZW4pCisKK3ZvaWQgZ2xvYmFsX2ZsdXNoX3RsYih2b2lkKTsgCitpbnQgY2hhbmdlX3BhZ2VfYXR0cihzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG51bXBhZ2VzLCBwZ3Byb3RfdCBwcm90KTsKKworI2lmZGVmIENPTkZJR19ERUJVR19QQUdFQUxMT0MKKy8qIGludGVybmFsIGRlYnVnZ2luZyBmdW5jdGlvbiAqLwordm9pZCBrZXJuZWxfbWFwX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbnVtcGFnZXMsIGludCBlbmFibGUpOworI2VuZGlmCisKKyNlbmRpZiAvKiBfSTM4Nl9DQUNIRUZMVVNIX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvY2hlY2tzdW0uaCBiL2luY2x1ZGUvYXNtLWkzODYvY2hlY2tzdW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzZhNWYwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9jaGVja3N1bS5oCkBAIC0wLDAgKzEsMTkyIEBACisjaWZuZGVmIF9JMzg2X0NIRUNLU1VNX0gKKyNkZWZpbmUgX0kzODZfQ0hFQ0tTVU1fSAorCisjaW5jbHVkZSA8bGludXgvaW42Lmg+CisKKy8qCisgKiBjb21wdXRlcyB0aGUgY2hlY2tzdW0gb2YgYSBtZW1vcnkgYmxvY2sgYXQgYnVmZiwgbGVuZ3RoIGxlbiwKKyAqIGFuZCBhZGRzIGluICJzdW0iICgzMi1iaXQpCisgKgorICogcmV0dXJucyBhIDMyLWJpdCBudW1iZXIgc3VpdGFibGUgZm9yIGZlZWRpbmcgaW50byBpdHNlbGYKKyAqIG9yIGNzdW1fdGNwdWRwX21hZ2ljCisgKgorICogdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIGV2ZW4gbGVuZ3RocywgZXhjZXB0CisgKiBmb3IgdGhlIGxhc3QgZnJhZ21lbnQsIHdoaWNoIG1heSBiZSBvZGQKKyAqCisgKiBpdCdzIGJlc3QgdG8gaGF2ZSBidWZmIGFsaWduZWQgb24gYSAzMi1iaXQgYm91bmRhcnkKKyAqLworYXNtbGlua2FnZSB1bnNpZ25lZCBpbnQgY3N1bV9wYXJ0aWFsKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiBidWZmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgc3VtKTsKKworLyoKKyAqIHRoZSBzYW1lIGFzIGNzdW1fcGFydGlhbCwgYnV0IGNvcGllcyBmcm9tIHNyYyB3aGlsZSBpdAorICogY2hlY2tzdW1zLCBhbmQgaGFuZGxlcyB1c2VyLXNwYWNlIHBvaW50ZXIgZXhjZXB0aW9ucyBjb3JyZWN0bHksIHdoZW4gbmVlZGVkLgorICoKKyAqIGhlcmUgZXZlbiBtb3JlIGltcG9ydGFudCB0byBhbGlnbiBzcmMgYW5kIGRzdCBvbiBhIDMyLWJpdCAob3IgZXZlbgorICogYmV0dGVyIDY0LWJpdCkgYm91bmRhcnkKKyAqLworCithc21saW5rYWdlIHVuc2lnbmVkIGludCBjc3VtX3BhcnRpYWxfY29weV9nZW5lcmljKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYywgdW5zaWduZWQgY2hhciAqZHN0LAorCQkJCQkJICBpbnQgbGVuLCBpbnQgc3VtLCBpbnQgKnNyY19lcnJfcHRyLCBpbnQgKmRzdF9lcnJfcHRyKTsKKworLyoKKyAqCU5vdGU6IHdoZW4geW91IGdldCBhIE5VTEwgcG9pbnRlciBleGNlcHRpb24gaGVyZSB0aGlzIG1lYW5zIHNvbWVvbmUKKyAqCXBhc3NlZCBpbiBhbiBpbmNvcnJlY3Qga2VybmVsIGFkZHJlc3MgdG8gb25lIG9mIHRoZXNlIGZ1bmN0aW9ucy4KKyAqCisgKglJZiB5b3UgdXNlIHRoZXNlIGZ1bmN0aW9ucyBkaXJlY3RseSBwbGVhc2UgZG9uJ3QgZm9yZ2V0IHRoZQorICoJdmVyaWZ5X2FyZWEoKS4KKyAqLworc3RhdGljIF9faW5saW5lX18KK3Vuc2lnbmVkIGludCBjc3VtX3BhcnRpYWxfY29weV9ub2NoZWNrIChjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMsIHVuc2lnbmVkIGNoYXIgKmRzdCwKKwkJCQkJaW50IGxlbiwgaW50IHN1bSkKK3sKKwlyZXR1cm4gY3N1bV9wYXJ0aWFsX2NvcHlfZ2VuZXJpYyAoIHNyYywgZHN0LCBsZW4sIHN1bSwgTlVMTCwgTlVMTCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fCit1bnNpZ25lZCBpbnQgY3N1bV9wYXJ0aWFsX2NvcHlfZnJvbV91c2VyKGNvbnN0IHVuc2lnbmVkIGNoYXIgX191c2VyICpzcmMsIHVuc2lnbmVkIGNoYXIgKmRzdCwKKwkJCQkJCWludCBsZW4sIGludCBzdW0sIGludCAqZXJyX3B0cikKK3sKKwltaWdodF9zbGVlcCgpOworCXJldHVybiBjc3VtX3BhcnRpYWxfY29weV9nZW5lcmljKChfX2ZvcmNlIHVuc2lnbmVkIGNoYXIgKilzcmMsIGRzdCwKKwkJCQkJbGVuLCBzdW0sIGVycl9wdHIsIE5VTEwpOworfQorCisvKgorICoJVGhpcyBpcyBhIHZlcnNpb24gb2YgaXBfY29tcHV0ZV9jc3VtKCkgb3B0aW1pemVkIGZvciBJUCBoZWFkZXJzLAorICoJd2hpY2ggYWx3YXlzIGNoZWNrc3VtIG9uIDQgb2N0ZXQgYm91bmRhcmllcy4KKyAqCisgKglCeSBKb3JnZSBDd2lrIDxqb3JnZUBsYXNlci5zYXRsaW5rLm5ldD4sIGFkYXB0ZWQgZm9yIGxpbnV4IGJ5CisgKglBcm50IEd1bGJyYW5kc2VuLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IGlwX2Zhc3RfY3N1bSh1bnNpZ25lZCBjaGFyICogaXBoLAorCQkJCQkgIHVuc2lnbmVkIGludCBpaGwpCit7CisJdW5zaWduZWQgaW50IHN1bTsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCSAgICAibW92bCAoJTEpLCAlMAk7XG4iCisJICAgICJzdWJsICQ0LCAlMgk7XG4iCisJICAgICJqYmUgMmYJCTtcbiIKKwkgICAgImFkZGwgNCglMSksICUwCTtcbiIKKwkgICAgImFkY2wgOCglMSksICUwCTtcbiIKKwkgICAgImFkY2wgMTIoJTEpLCAlMAk7XG4iCisiMToJICAgIGFkY2wgMTYoJTEpLCAlMAk7XG4iCisJICAgICJsZWEgNCglMSksICUxCTtcbiIKKwkgICAgImRlY2wgJTIJCTtcbiIKKwkgICAgImpuZSAxYgkJO1xuIgorCSAgICAiYWRjbCAkMCwgJTAJO1xuIgorCSAgICAibW92bCAlMCwgJTIJO1xuIgorCSAgICAic2hybCAkMTYsICUwCTtcbiIKKwkgICAgImFkZHcgJXcyLCAldzAJO1xuIgorCSAgICAiYWRjbCAkMCwgJTAJO1xuIgorCSAgICAibm90bCAlMAkJO1xuIgorIjI6CQkJCTtcbiIKKwkvKiBTaW5jZSB0aGUgaW5wdXQgcmVnaXN0ZXJzIHdoaWNoIGFyZSBsb2FkZWQgd2l0aCBpcGggYW5kIGlwbAorCSAgIGFyZSBtb2RpZmllZCwgd2UgbXVzdCBhbHNvIHNwZWNpZnkgdGhlbSBhcyBvdXRwdXRzLCBvciBnY2MKKwkgICB3aWxsIGFzc3VtZSB0aGV5IGNvbnRhaW4gdGhlaXIgb3JpZ2luYWwgdmFsdWVzLiAqLworCTogIj1yIiAoc3VtKSwgIj1yIiAoaXBoKSwgIj1yIiAoaWhsKQorCTogIjEiIChpcGgpLCAiMiIgKGlobCkKKwk6ICJtZW1vcnkiKTsKKwlyZXR1cm4oc3VtKTsKK30KKworLyoKKyAqCUZvbGQgYSBwYXJ0aWFsIGNoZWNrc3VtCisgKi8KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3N1bV9mb2xkKHVuc2lnbmVkIGludCBzdW0pCit7CisJX19hc21fXygKKwkJImFkZGwgJTEsICUwCQk7XG4iCisJCSJhZGNsICQweGZmZmYsICUwCTtcbiIKKwkJOiAiPXIiIChzdW0pCisJCTogInIiIChzdW0gPDwgMTYpLCAiMCIgKHN1bSAmIDB4ZmZmZjAwMDApCisJKTsKKwlyZXR1cm4gKH5zdW0pID4+IDE2OworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY3N1bV90Y3B1ZHBfbm9mb2xkKHVuc2lnbmVkIGxvbmcgc2FkZHIsCisJCQkJCQkgICB1bnNpZ25lZCBsb25nIGRhZGRyLAorCQkJCQkJICAgdW5zaWduZWQgc2hvcnQgbGVuLAorCQkJCQkJICAgdW5zaWduZWQgc2hvcnQgcHJvdG8sCisJCQkJCQkgICB1bnNpZ25lZCBpbnQgc3VtKQoreworICAgIF9fYXNtX18oCisJImFkZGwgJTEsICUwCTtcbiIKKwkiYWRjbCAlMiwgJTAJO1xuIgorCSJhZGNsICUzLCAlMAk7XG4iCisJImFkY2wgJDAsICUwCTtcbiIKKwk6ICI9ciIgKHN1bSkKKwk6ICJnIiAoZGFkZHIpLCAiZyIoc2FkZHIpLCAiZyIoKG50b2hzKGxlbik8PDE2KStwcm90byoyNTYpLCAiMCIoc3VtKSk7CisgICAgcmV0dXJuIHN1bTsKK30KKworLyoKKyAqIGNvbXB1dGVzIHRoZSBjaGVja3N1bSBvZiB0aGUgVENQL1VEUCBwc2V1ZG8taGVhZGVyCisgKiByZXR1cm5zIGEgMTYtYml0IGNoZWNrc3VtLCBhbHJlYWR5IGNvbXBsZW1lbnRlZAorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IGludCBjc3VtX3RjcHVkcF9tYWdpYyh1bnNpZ25lZCBsb25nIHNhZGRyLAorCQkJCQkJICAgdW5zaWduZWQgbG9uZyBkYWRkciwKKwkJCQkJCSAgIHVuc2lnbmVkIHNob3J0IGxlbiwKKwkJCQkJCSAgIHVuc2lnbmVkIHNob3J0IHByb3RvLAorCQkJCQkJICAgdW5zaWduZWQgaW50IHN1bSkKK3sKKwlyZXR1cm4gY3N1bV9mb2xkKGNzdW1fdGNwdWRwX25vZm9sZChzYWRkcixkYWRkcixsZW4scHJvdG8sc3VtKSk7Cit9CisKKy8qCisgKiB0aGlzIHJvdXRpbmUgaXMgdXNlZCBmb3IgbWlzY2VsbGFuZW91cyBJUC1saWtlIGNoZWNrc3VtcywgbWFpbmx5CisgKiBpbiBpY21wLmMKKyAqLworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IGlwX2NvbXB1dGVfY3N1bSh1bnNpZ25lZCBjaGFyICogYnVmZiwgaW50IGxlbikKK3sKKyAgICByZXR1cm4gY3N1bV9mb2xkIChjc3VtX3BhcnRpYWwoYnVmZiwgbGVuLCAwKSk7Cit9CisKKyNkZWZpbmUgX0hBVkVfQVJDSF9JUFY2X0NTVU0KK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIHNob3J0IGludCBjc3VtX2lwdjZfbWFnaWMoc3RydWN0IGluNl9hZGRyICpzYWRkciwKKwkJCQkJCSAgICAgc3RydWN0IGluNl9hZGRyICpkYWRkciwKKwkJCQkJCSAgICAgX191MzIgbGVuLAorCQkJCQkJICAgICB1bnNpZ25lZCBzaG9ydCBwcm90bywKKwkJCQkJCSAgICAgdW5zaWduZWQgaW50IHN1bSkKK3sKKwlfX2FzbV9fKAorCQkiYWRkbCAwKCUxKSwgJTAJCTtcbiIKKwkJImFkY2wgNCglMSksICUwCQk7XG4iCisJCSJhZGNsIDgoJTEpLCAlMAkJO1xuIgorCQkiYWRjbCAxMiglMSksICUwCTtcbiIKKwkJImFkY2wgMCglMiksICUwCQk7XG4iCisJCSJhZGNsIDQoJTIpLCAlMAkJO1xuIgorCQkiYWRjbCA4KCUyKSwgJTAJCTtcbiIKKwkJImFkY2wgMTIoJTIpLCAlMAk7XG4iCisJCSJhZGNsICUzLCAlMAkJO1xuIgorCQkiYWRjbCAlNCwgJTAJCTtcbiIKKwkJImFkY2wgJDAsICUwCQk7XG4iCisJCTogIj0mciIgKHN1bSkKKwkJOiAiciIgKHNhZGRyKSwgInIiIChkYWRkciksCisJCSAgInIiKGh0b25sKGxlbikpLCAiciIoaHRvbmwocHJvdG8pKSwgIjAiKHN1bSkpOworCisJcmV0dXJuIGNzdW1fZm9sZChzdW0pOworfQorCisvKgorICoJQ29weSBhbmQgY2hlY2tzdW0gdG8gdXNlcgorICovCisjZGVmaW5lIEhBVkVfQ1NVTV9DT1BZX1VTRVIKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCBjc3VtX2FuZF9jb3B5X3RvX3VzZXIoY29uc3QgdW5zaWduZWQgY2hhciAqc3JjLAorCQkJCQkJICAgICB1bnNpZ25lZCBjaGFyIF9fdXNlciAqZHN0LAorCQkJCQkJICAgICBpbnQgbGVuLCBpbnQgc3VtLCAKKwkJCQkJCSAgICAgaW50ICplcnJfcHRyKQoreworCW1pZ2h0X3NsZWVwKCk7CisJaWYgKGFjY2Vzc19vayhWRVJJRllfV1JJVEUsIGRzdCwgbGVuKSkKKwkJcmV0dXJuIGNzdW1fcGFydGlhbF9jb3B5X2dlbmVyaWMoc3JjLCAoX19mb3JjZSB1bnNpZ25lZCBjaGFyICopZHN0LCBsZW4sIHN1bSwgTlVMTCwgZXJyX3B0cik7CisKKwlpZiAobGVuKQorCQkqZXJyX3B0ciA9IC1FRkFVTFQ7CisKKwlyZXR1cm4gLTE7IC8qIGludmFsaWQgY2hlY2tzdW0gKi8KK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L2NwdS5oIGIvaW5jbHVkZS9hc20taTM4Ni9jcHUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDI3NDBiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9jcHUuaApAQCAtMCwwICsxLDE5IEBACisjaWZuZGVmIF9BU01fSTM4Nl9DUFVfSF8KKyNkZWZpbmUgX0FTTV9JMzg2X0NQVV9IXworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvdG9wb2xvZ3kuaD4KKyNpbmNsdWRlIDxsaW51eC9ub2RlbWFzay5oPgorCisjaW5jbHVkZSA8YXNtL25vZGUuaD4KKworc3RydWN0IGkzODZfY3B1IHsKKwlzdHJ1Y3QgY3B1IGNwdTsKK307CitleHRlcm4gaW50IGFyY2hfcmVnaXN0ZXJfY3B1KGludCBudW0pOworI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQorZXh0ZXJuIHZvaWQgYXJjaF91bnJlZ2lzdGVyX2NwdShpbnQpOworI2VuZGlmCisKKyNlbmRpZiAvKiBfQVNNX0kzODZfQ1BVX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L2NwdWZlYXR1cmUuaCBiL2luY2x1ZGUvYXNtLWkzODYvY3B1ZmVhdHVyZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNDdjYWIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2NwdWZlYXR1cmUuaApAQCAtMCwwICsxLDEyOSBAQAorLyoKKyAqIGNwdWZlYXR1cmUuaAorICoKKyAqIERlZmluZXMgeDg2IENQVSBmZWF0dXJlIGJpdHMKKyAqLworCisjaWZuZGVmIF9fQVNNX0kzODZfQ1BVRkVBVFVSRV9ICisjZGVmaW5lIF9fQVNNX0kzODZfQ1BVRkVBVFVSRV9ICisKKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKworI2RlZmluZSBOQ0FQSU5UUwk3CS8qIE4gMzItYml0IHdvcmRzIHdvcnRoIG9mIGluZm8gKi8KKworLyogSW50ZWwtZGVmaW5lZCBDUFUgZmVhdHVyZXMsIENQVUlEIGxldmVsIDB4MDAwMDAwMDEgKGVkeCksIHdvcmQgMCAqLworI2RlZmluZSBYODZfRkVBVFVSRV9GUFUJCSgwKjMyKyAwKSAvKiBPbmJvYXJkIEZQVSAqLworI2RlZmluZSBYODZfRkVBVFVSRV9WTUUJCSgwKjMyKyAxKSAvKiBWaXJ0dWFsIE1vZGUgRXh0ZW5zaW9ucyAqLworI2RlZmluZSBYODZfRkVBVFVSRV9ERQkJKDAqMzIrIDIpIC8qIERlYnVnZ2luZyBFeHRlbnNpb25zICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX1BTRSAJKDAqMzIrIDMpIC8qIFBhZ2UgU2l6ZSBFeHRlbnNpb25zICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX1RTQwkJKDAqMzIrIDQpIC8qIFRpbWUgU3RhbXAgQ291bnRlciAqLworI2RlZmluZSBYODZfRkVBVFVSRV9NU1IJCSgwKjMyKyA1KSAvKiBNb2RlbC1TcGVjaWZpYyBSZWdpc3RlcnMsIFJETVNSLCBXUk1TUiAqLworI2RlZmluZSBYODZfRkVBVFVSRV9QQUUJCSgwKjMyKyA2KSAvKiBQaHlzaWNhbCBBZGRyZXNzIEV4dGVuc2lvbnMgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfTUNFCQkoMCozMisgNykgLyogTWFjaGluZSBDaGVjayBBcmNoaXRlY3R1cmUgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfQ1g4CQkoMCozMisgOCkgLyogQ01QWENIRzggaW5zdHJ1Y3Rpb24gKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfQVBJQwkoMCozMisgOSkgLyogT25ib2FyZCBBUElDICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX1NFUAkJKDAqMzIrMTEpIC8qIFNZU0VOVEVSL1NZU0VYSVQgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfTVRSUgkoMCozMisxMikgLyogTWVtb3J5IFR5cGUgUmFuZ2UgUmVnaXN0ZXJzICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX1BHRQkJKDAqMzIrMTMpIC8qIFBhZ2UgR2xvYmFsIEVuYWJsZSAqLworI2RlZmluZSBYODZfRkVBVFVSRV9NQ0EJCSgwKjMyKzE0KSAvKiBNYWNoaW5lIENoZWNrIEFyY2hpdGVjdHVyZSAqLworI2RlZmluZSBYODZfRkVBVFVSRV9DTU9WCSgwKjMyKzE1KSAvKiBDTU9WIGluc3RydWN0aW9uIChGQ01PVkNDIGFuZCBGQ09NSSB0b28gaWYgRlBVIHByZXNlbnQpICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX1BBVAkJKDAqMzIrMTYpIC8qIFBhZ2UgQXR0cmlidXRlIFRhYmxlICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX1BTRTM2CSgwKjMyKzE3KSAvKiAzNi1iaXQgUFNFcyAqLworI2RlZmluZSBYODZfRkVBVFVSRV9QTgkJKDAqMzIrMTgpIC8qIFByb2Nlc3NvciBzZXJpYWwgbnVtYmVyICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX0NMRkxTSAkoMCozMisxOSkgLyogU3VwcG9ydHMgdGhlIENMRkxVU0ggaW5zdHJ1Y3Rpb24gKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfRFRFUwkoMCozMisyMSkgLyogRGVidWcgVHJhY2UgU3RvcmUgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfQUNQSQkoMCozMisyMikgLyogQUNQSSB2aWEgTVNSICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX01NWAkJKDAqMzIrMjMpIC8qIE11bHRpbWVkaWEgRXh0ZW5zaW9ucyAqLworI2RlZmluZSBYODZfRkVBVFVSRV9GWFNSCSgwKjMyKzI0KSAvKiBGWFNBVkUgYW5kIEZYUlNUT1IgaW5zdHJ1Y3Rpb25zIChmYXN0IHNhdmUgYW5kIHJlc3RvcmUgKi8KKwkJCQkgICAgICAgICAgLyogb2YgRlBVIGNvbnRleHQpLCBhbmQgQ1I0Lk9TRlhTUiBhdmFpbGFibGUgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfWE1NCQkoMCozMisyNSkgLyogU3RyZWFtaW5nIFNJTUQgRXh0ZW5zaW9ucyAqLworI2RlZmluZSBYODZfRkVBVFVSRV9YTU0yCSgwKjMyKzI2KSAvKiBTdHJlYW1pbmcgU0lNRCBFeHRlbnNpb25zLTIgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfU0VMRlNOT09QCSgwKjMyKzI3KSAvKiBDUFUgc2VsZiBzbm9vcCAqLworI2RlZmluZSBYODZfRkVBVFVSRV9IVAkJKDAqMzIrMjgpIC8qIEh5cGVyLVRocmVhZGluZyAqLworI2RlZmluZSBYODZfRkVBVFVSRV9BQ0MJCSgwKjMyKzI5KSAvKiBBdXRvbWF0aWMgY2xvY2sgY29udHJvbCAqLworI2RlZmluZSBYODZfRkVBVFVSRV9JQTY0CSgwKjMyKzMwKSAvKiBJQS02NCBwcm9jZXNzb3IgKi8KKworLyogQU1ELWRlZmluZWQgQ1BVIGZlYXR1cmVzLCBDUFVJRCBsZXZlbCAweDgwMDAwMDAxLCB3b3JkIDEgKi8KKy8qIERvbid0IGR1cGxpY2F0ZSBmZWF0dXJlIGZsYWdzIHdoaWNoIGFyZSByZWR1bmRhbnQgd2l0aCBJbnRlbCEgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfU1lTQ0FMTAkoMSozMisxMSkgLyogU1lTQ0FMTC9TWVNSRVQgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfTVAJCSgxKjMyKzE5KSAvKiBNUCBDYXBhYmxlLiAqLworI2RlZmluZSBYODZfRkVBVFVSRV9OWAkJKDEqMzIrMjApIC8qIEV4ZWN1dGUgRGlzYWJsZSAqLworI2RlZmluZSBYODZfRkVBVFVSRV9NTVhFWFQJKDEqMzIrMjIpIC8qIEFNRCBNTVggZXh0ZW5zaW9ucyAqLworI2RlZmluZSBYODZfRkVBVFVSRV9MTQkJKDEqMzIrMjkpIC8qIExvbmcgTW9kZSAoeDg2LTY0KSAqLworI2RlZmluZSBYODZfRkVBVFVSRV8zRE5PV0VYVAkoMSozMiszMCkgLyogQU1EIDNETm93ISBleHRlbnNpb25zICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFXzNETk9XCSgxKjMyKzMxKSAvKiAzRE5vdyEgKi8KKworLyogVHJhbnNtZXRhLWRlZmluZWQgQ1BVIGZlYXR1cmVzLCBDUFVJRCBsZXZlbCAweDgwODYwMDAxLCB3b3JkIDIgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfUkVDT1ZFUlkJKDIqMzIrIDApIC8qIENQVSBpbiByZWNvdmVyeSBtb2RlICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX0xPTkdSVU4JKDIqMzIrIDEpIC8qIExvbmdydW4gcG93ZXIgY29udHJvbCAqLworI2RlZmluZSBYODZfRkVBVFVSRV9MUlRJCSgyKjMyKyAzKSAvKiBMb25nUnVuIHRhYmxlIGludGVyZmFjZSAqLworCisvKiBPdGhlciBmZWF0dXJlcywgTGludXgtZGVmaW5lZCBtYXBwaW5nLCB3b3JkIDMgKi8KKy8qIFRoaXMgcmFuZ2UgaXMgdXNlZCBmb3IgZmVhdHVyZSBiaXRzIHdoaWNoIGNvbmZsaWN0IG9yIGFyZSBzeW50aGVzaXplZCAqLworI2RlZmluZSBYODZfRkVBVFVSRV9DWE1NWAkoMyozMisgMCkgLyogQ3lyaXggTU1YIGV4dGVuc2lvbnMgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfSzZfTVRSUgkoMyozMisgMSkgLyogQU1EIEs2IG5vbnN0YW5kYXJkIE1UUlJzICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX0NZUklYX0FSUgkoMyozMisgMikgLyogQ3lyaXggQVJScyAoPSBNVFJScykgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfQ0VOVEFVUl9NQ1IJKDMqMzIrIDMpIC8qIENlbnRhdXIgTUNScyAoPSBNVFJScykgKi8KKy8qIGNwdSB0eXBlcyBmb3Igc3BlY2lmaWMgdHVuaW5nczogKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfSzgJCSgzKjMyKyA0KSAvKiBPcHRlcm9uLCBBdGhsb242NCAqLworI2RlZmluZSBYODZfRkVBVFVSRV9LNwkJKDMqMzIrIDUpIC8qIEF0aGxvbiAqLworI2RlZmluZSBYODZfRkVBVFVSRV9QMwkJKDMqMzIrIDYpIC8qIFAzICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX1A0CQkoMyozMisgNykgLyogUDQgKi8KKworLyogSW50ZWwtZGVmaW5lZCBDUFUgZmVhdHVyZXMsIENQVUlEIGxldmVsIDB4MDAwMDAwMDEgKGVjeCksIHdvcmQgNCAqLworI2RlZmluZSBYODZfRkVBVFVSRV9YTU0zCSg0KjMyKyAwKSAvKiBTdHJlYW1pbmcgU0lNRCBFeHRlbnNpb25zLTMgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfTVdBSVQJKDQqMzIrIDMpIC8qIE1vbml0b3IvTXdhaXQgc3VwcG9ydCAqLworI2RlZmluZSBYODZfRkVBVFVSRV9EU0NQTAkoNCozMisgNCkgLyogQ1BMIFF1YWxpZmllZCBEZWJ1ZyBTdG9yZSAqLworI2RlZmluZSBYODZfRkVBVFVSRV9FU1QJCSg0KjMyKyA3KSAvKiBFbmhhbmNlZCBTcGVlZFN0ZXAgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfVE0yCQkoNCozMisgOCkgLyogVGhlcm1hbCBNb25pdG9yIDIgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfQ0lECQkoNCozMisxMCkgLyogQ29udGV4dCBJRCAqLworI2RlZmluZSBYODZfRkVBVFVSRV9DWDE2ICAgICAgICAoNCozMisxMykgLyogQ01QWENIRzE2QiAqLworI2RlZmluZSBYODZfRkVBVFVSRV9YVFBSCSg0KjMyKzE0KSAvKiBTZW5kIFRhc2sgUHJpb3JpdHkgTWVzc2FnZXMgKi8KKworLyogVklBL0N5cml4L0NlbnRhdXItZGVmaW5lZCBDUFUgZmVhdHVyZXMsIENQVUlEIGxldmVsIDB4QzAwMDAwMDEsIHdvcmQgNSAqLworI2RlZmluZSBYODZfRkVBVFVSRV9YU1RPUkUJKDUqMzIrIDIpIC8qIG9uLUNQVSBSTkcgcHJlc2VudCAoeHN0b3JlIGluc24pICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX1hTVE9SRV9FTgkoNSozMisgMykgLyogb24tQ1BVIFJORyBlbmFibGVkICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX1hDUllQVAkoNSozMisgNikgLyogb24tQ1BVIGNyeXB0byAoeGNyeXB0IGluc24pICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX1hDUllQVF9FTgkoNSozMisgNykgLyogb24tQ1BVIGNyeXB0byBlbmFibGVkICovCisKKy8qIE1vcmUgZXh0ZW5kZWQgQU1EIGZsYWdzOiBDUFVJRCBsZXZlbCAweDgwMDAwMDAxLCBlY3gsIHdvcmQgNiAqLworI2RlZmluZSBYODZfRkVBVFVSRV9MQUhGX0xNCSg1KjMyKyAwKSAvKiBMQUhGL1NBSEYgaW4gbG9uZyBtb2RlICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX0NNUF9MRUdBQ1kJKDUqMzIrIDEpIC8qIElmIHllcyBIeXBlclRocmVhZGluZyBub3QgdmFsaWQgKi8KKworI2RlZmluZSBjcHVfaGFzKGMsIGJpdCkJCXRlc3RfYml0KGJpdCwgKGMpLT54ODZfY2FwYWJpbGl0eSkKKyNkZWZpbmUgYm9vdF9jcHVfaGFzKGJpdCkJdGVzdF9iaXQoYml0LCBib290X2NwdV9kYXRhLng4Nl9jYXBhYmlsaXR5KQorCisjZGVmaW5lIGNwdV9oYXNfZnB1CQlib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfRlBVKQorI2RlZmluZSBjcHVfaGFzX3ZtZQkJYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1ZNRSkKKyNkZWZpbmUgY3B1X2hhc19kZQkJYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0RFKQorI2RlZmluZSBjcHVfaGFzX3BzZQkJYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1BTRSkKKyNkZWZpbmUgY3B1X2hhc190c2MJCWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9UU0MpCisjZGVmaW5lIGNwdV9oYXNfcGFlCQlib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfUEFFKQorI2RlZmluZSBjcHVfaGFzX3BnZQkJYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1BHRSkKKyNkZWZpbmUgY3B1X2hhc19hcGljCQlib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQVBJQykKKyNkZWZpbmUgY3B1X2hhc19zZXAJCWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9TRVApCisjZGVmaW5lIGNwdV9oYXNfbXRycgkJYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX01UUlIpCisjZGVmaW5lIGNwdV9oYXNfbW14CQlib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfTU1YKQorI2RlZmluZSBjcHVfaGFzX2Z4c3IJCWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9GWFNSKQorI2RlZmluZSBjcHVfaGFzX3htbQkJYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1hNTSkKKyNkZWZpbmUgY3B1X2hhc194bW0yCQlib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfWE1NMikKKyNkZWZpbmUgY3B1X2hhc194bW0zCQlib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfWE1NMykKKyNkZWZpbmUgY3B1X2hhc19odAkJYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0hUKQorI2RlZmluZSBjcHVfaGFzX21wCQlib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfTVApCisjZGVmaW5lIGNwdV9oYXNfbngJCWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9OWCkKKyNkZWZpbmUgY3B1X2hhc19rNl9tdHJyCQlib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfSzZfTVRSUikKKyNkZWZpbmUgY3B1X2hhc19jeXJpeF9hcnIJYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0NZUklYX0FSUikKKyNkZWZpbmUgY3B1X2hhc19jZW50YXVyX21jcglib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQ0VOVEFVUl9NQ1IpCisjZGVmaW5lIGNwdV9oYXNfeHN0b3JlCQlib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfWFNUT1JFKQorI2RlZmluZSBjcHVfaGFzX3hzdG9yZV9lbmFibGVkCWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9YU1RPUkVfRU4pCisjZGVmaW5lIGNwdV9oYXNfeGNyeXB0CQlib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfWENSWVBUKQorI2RlZmluZSBjcHVfaGFzX3hjcnlwdF9lbmFibGVkCWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9YQ1JZUFRfRU4pCisKKyNlbmRpZiAvKiBfX0FTTV9JMzg2X0NQVUZFQVRVUkVfSCAqLworCisvKiAKKyAqIExvY2FsIFZhcmlhYmxlczoKKyAqIG1vZGU6YworICogY29tbWVudC1jb2x1bW46NDIKKyAqIEVuZDoKKyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9jcHV0aW1lLmggYi9pbmNsdWRlL2FzbS1pMzg2L2NwdXRpbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOThlZDdjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9jcHV0aW1lLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fSTM4Nl9DUFVUSU1FX0gKKyNkZWZpbmUgX19JMzg2X0NQVVRJTUVfSAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvY3B1dGltZS5oPgorCisjZW5kaWYgLyogX19JMzg2X0NQVVRJTUVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9jdXJyZW50LmggYi9pbmNsdWRlL2FzbS1pMzg2L2N1cnJlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTczMjg5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9jdXJyZW50LmgKQEAgLTAsMCArMSwxNSBAQAorI2lmbmRlZiBfSTM4Nl9DVVJSRU5UX0gKKyNkZWZpbmUgX0kzODZfQ1VSUkVOVF9ICisKKyNpbmNsdWRlIDxsaW51eC90aHJlYWRfaW5mby5oPgorCitzdHJ1Y3QgdGFza19zdHJ1Y3Q7CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRhc2tfc3RydWN0ICogZ2V0X2N1cnJlbnQodm9pZCkKK3sKKwlyZXR1cm4gY3VycmVudF90aHJlYWRfaW5mbygpLT50YXNrOworfQorIAorI2RlZmluZSBjdXJyZW50IGdldF9jdXJyZW50KCkKKworI2VuZGlmIC8qICEoX0kzODZfQ1VSUkVOVF9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9kZWJ1Z3JlZy5oIGIvaW5jbHVkZS9hc20taTM4Ni9kZWJ1Z3JlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwYjJiMDYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2RlYnVncmVnLmgKQEAgLTAsMCArMSw2NCBAQAorI2lmbmRlZiBfSTM4Nl9ERUJVR1JFR19ICisjZGVmaW5lIF9JMzg2X0RFQlVHUkVHX0gKKworCisvKiBJbmRpY2F0ZSB0aGUgcmVnaXN0ZXIgbnVtYmVycyBmb3IgYSBudW1iZXIgb2YgdGhlIHNwZWNpZmljCisgICBkZWJ1ZyByZWdpc3RlcnMuICBSZWdpc3RlcnMgMC0zIGNvbnRhaW4gdGhlIGFkZHJlc3NlcyB3ZSB3aXNoIHRvIHRyYXAgb24gKi8KKyNkZWZpbmUgRFJfRklSU1RBRERSIDAgICAgICAgIC8qIHVfZGVidWdyZWdbRFJfRklSU1RBRERSXSAqLworI2RlZmluZSBEUl9MQVNUQUREUiAzICAgICAgICAgLyogdV9kZWJ1Z3JlZ1tEUl9MQVNUQUREUl0gICovCisKKyNkZWZpbmUgRFJfU1RBVFVTIDYgICAgICAgICAgIC8qIHVfZGVidWdyZWdbRFJfU1RBVFVTXSAgICAgKi8KKyNkZWZpbmUgRFJfQ09OVFJPTCA3ICAgICAgICAgIC8qIHVfZGVidWdyZWdbRFJfQ09OVFJPTF0gKi8KKworLyogRGVmaW5lIGEgZmV3IHRoaW5ncyBmb3IgdGhlIHN0YXR1cyByZWdpc3Rlci4gIFdlIGNhbiB1c2UgdGhpcyB0byBkZXRlcm1pbmUKKyAgIHdoaWNoIGRlYnVnZ2luZyByZWdpc3RlciB3YXMgcmVzcG9uc2libGUgZm9yIHRoZSB0cmFwLiAgVGhlIG90aGVyIGJpdHMKKyAgIGFyZSBlaXRoZXIgcmVzZXJ2ZWQgb3Igbm90IG9mIGludGVyZXN0IHRvIHVzLiAqLworCisjZGVmaW5lIERSX1RSQVAwCSgweDEpCQkvKiBkYjAgKi8KKyNkZWZpbmUgRFJfVFJBUDEJKDB4MikJCS8qIGRiMSAqLworI2RlZmluZSBEUl9UUkFQMgkoMHg0KQkJLyogZGIyICovCisjZGVmaW5lIERSX1RSQVAzCSgweDgpCQkvKiBkYjMgKi8KKworI2RlZmluZSBEUl9TVEVQCQkoMHg0MDAwKQkvKiBzaW5nbGUtc3RlcCAqLworI2RlZmluZSBEUl9TV0lUQ0gJKDB4ODAwMCkJLyogdGFzayBzd2l0Y2ggKi8KKworLyogTm93IGRlZmluZSBhIGJ1bmNoIG9mIHRoaW5ncyBmb3IgbWFuaXB1bGF0aW5nIHRoZSBjb250cm9sIHJlZ2lzdGVyLgorICAgVGhlIHRvcCB0d28gYnl0ZXMgb2YgdGhlIGNvbnRyb2wgcmVnaXN0ZXIgY29uc2lzdCBvZiA0IGZpZWxkcyBvZiA0CisgICBiaXRzIC0gZWFjaCBmaWVsZCBjb3JyZXNwb25kcyB0byBvbmUgb2YgdGhlIGZvdXIgZGVidWcgcmVnaXN0ZXJzLAorICAgYW5kIGluZGljYXRlcyB3aGF0IHR5cGVzIG9mIGFjY2VzcyB3ZSB0cmFwIG9uLCBhbmQgaG93IGxhcmdlIHRoZSBkYXRhCisgICBmaWVsZCBpcyB0aGF0IHdlIGFyZSBsb29raW5nIGF0ICovCisKKyNkZWZpbmUgRFJfQ09OVFJPTF9TSElGVCAxNiAvKiBTa2lwIHRoaXMgbWFueSBiaXRzIGluIGN0bCByZWdpc3RlciAqLworI2RlZmluZSBEUl9DT05UUk9MX1NJWkUgNCAgIC8qIDQgY29udHJvbCBiaXRzIHBlciByZWdpc3RlciAqLworCisjZGVmaW5lIERSX1JXX0VYRUNVVEUgKDB4MCkgICAvKiBTZXR0aW5ncyBmb3IgdGhlIGFjY2VzcyB0eXBlcyB0byB0cmFwIG9uICovCisjZGVmaW5lIERSX1JXX1dSSVRFICgweDEpCisjZGVmaW5lIERSX1JXX1JFQUQgKDB4MykKKworI2RlZmluZSBEUl9MRU5fMSAoMHgwKSAvKiBTZXR0aW5ncyBmb3IgZGF0YSBsZW5ndGggdG8gdHJhcCBvbiAqLworI2RlZmluZSBEUl9MRU5fMiAoMHg0KQorI2RlZmluZSBEUl9MRU5fNCAoMHhDKQorCisvKiBUaGUgbG93IGJ5dGUgdG8gdGhlIGNvbnRyb2wgcmVnaXN0ZXIgZGV0ZXJtaW5lIHdoaWNoIHJlZ2lzdGVycyBhcmUKKyAgIGVuYWJsZWQuICBUaGVyZSBhcmUgNCBmaWVsZHMgb2YgdHdvIGJpdHMuICBPbmUgYml0IGlzICJsb2NhbCIsIG1lYW5pbmcKKyAgIHRoYXQgdGhlIHByb2Nlc3NvciB3aWxsIHJlc2V0IHRoZSBiaXQgYWZ0ZXIgYSB0YXNrIHN3aXRjaCBhbmQgdGhlIG90aGVyCisgICBpcyBnbG9iYWwgbWVhbmluZyB0aGF0IHdlIGhhdmUgdG8gZXhwbGljaXRseSByZXNldCB0aGUgYml0LiAgV2l0aCBsaW51eCwKKyAgIHlvdSBjYW4gdXNlIGVpdGhlciBvbmUsIHNpbmNlIHdlIGV4cGxpY2l0bHkgemVybyB0aGUgcmVnaXN0ZXIgd2hlbiB3ZSBlbnRlcgorICAga2VybmVsIG1vZGUuICovCisKKyNkZWZpbmUgRFJfTE9DQUxfRU5BQkxFX1NISUZUIDAgICAgLyogRXh0cmEgc2hpZnQgdG8gdGhlIGxvY2FsIGVuYWJsZSBiaXQgKi8KKyNkZWZpbmUgRFJfR0xPQkFMX0VOQUJMRV9TSElGVCAxICAgLyogRXh0cmEgc2hpZnQgdG8gdGhlIGdsb2JhbCBlbmFibGUgYml0ICovCisjZGVmaW5lIERSX0VOQUJMRV9TSVpFIDIgICAgICAgICAgIC8qIDIgZW5hYmxlIGJpdHMgcGVyIHJlZ2lzdGVyICovCisKKyNkZWZpbmUgRFJfTE9DQUxfRU5BQkxFX01BU0sgKDB4NTUpICAvKiBTZXQgIGxvY2FsIGJpdHMgZm9yIGFsbCA0IHJlZ3MgKi8KKyNkZWZpbmUgRFJfR0xPQkFMX0VOQUJMRV9NQVNLICgweEFBKSAvKiBTZXQgZ2xvYmFsIGJpdHMgZm9yIGFsbCA0IHJlZ3MgKi8KKworLyogVGhlIHNlY29uZCBieXRlIHRvIHRoZSBjb250cm9sIHJlZ2lzdGVyIGhhcyBhIGZldyBzcGVjaWFsIHRoaW5ncy4KKyAgIFdlIGNhbiBzbG93IHRoZSBpbnN0cnVjdGlvbiBwaXBlbGluZSBmb3IgaW5zdHJ1Y3Rpb25zIGNvbWluZyB2aWEgdGhlCisgICBnZHQgb3IgdGhlIGxkdCBpZiB3ZSB3YW50IHRvLiAgSSBhbSBub3Qgc3VyZSB3aHkgdGhpcyBpcyBhbiBhZHZhbnRhZ2UgKi8KKworI2RlZmluZSBEUl9DT05UUk9MX1JFU0VSVkVEICgweEZDMDApIC8qIFJlc2VydmVkIGJ5IEludGVsICovCisjZGVmaW5lIERSX0xPQ0FMX1NMT1dET1dOICgweDEwMCkgICAvKiBMb2NhbCBzbG93IHRoZSBwaXBlbGluZSAqLworI2RlZmluZSBEUl9HTE9CQUxfU0xPV0RPV04gKDB4MjAwKSAgLyogR2xvYmFsIHNsb3cgdGhlIHBpcGVsaW5lICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9kZWxheS5oIGIvaW5jbHVkZS9hc20taTM4Ni9kZWxheS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1NmRiODUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2RlbGF5LmgKQEAgLTAsMCArMSwyNiBAQAorI2lmbmRlZiBfSTM4Nl9ERUxBWV9ICisjZGVmaW5lIF9JMzg2X0RFTEFZX0gKKworLyoKKyAqIENvcHlyaWdodCAoQykgMTk5MyBMaW51cyBUb3J2YWxkcworICoKKyAqIERlbGF5IHJvdXRpbmVzIGNhbGxpbmcgZnVuY3Rpb25zIGluIGFyY2gvaTM4Ni9saWIvZGVsYXkuYworICovCisgCitleHRlcm4gdm9pZCBfX2JhZF91ZGVsYXkodm9pZCk7CitleHRlcm4gdm9pZCBfX2JhZF9uZGVsYXkodm9pZCk7CisKK2V4dGVybiB2b2lkIF9fdWRlbGF5KHVuc2lnbmVkIGxvbmcgdXNlY3MpOworZXh0ZXJuIHZvaWQgX19uZGVsYXkodW5zaWduZWQgbG9uZyBuc2Vjcyk7CitleHRlcm4gdm9pZCBfX2NvbnN0X3VkZWxheSh1bnNpZ25lZCBsb25nIHVzZWNzKTsKK2V4dGVybiB2b2lkIF9fZGVsYXkodW5zaWduZWQgbG9uZyBsb29wcyk7CisKKyNkZWZpbmUgdWRlbGF5KG4pIChfX2J1aWx0aW5fY29uc3RhbnRfcChuKSA/IFwKKwkoKG4pID4gMjAwMDAgPyBfX2JhZF91ZGVsYXkoKSA6IF9fY29uc3RfdWRlbGF5KChuKSAqIDB4MTBjN3VsKSkgOiBcCisJX191ZGVsYXkobikpCisJCisjZGVmaW5lIG5kZWxheShuKSAoX19idWlsdGluX2NvbnN0YW50X3AobikgPyBcCisJKChuKSA+IDIwMDAwID8gX19iYWRfbmRlbGF5KCkgOiBfX2NvbnN0X3VkZWxheSgobikgKiA1dWwpKSA6IFwKKwlfX25kZWxheShuKSkKKworI2VuZGlmIC8qIGRlZmluZWQoX0kzODZfREVMQVlfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvZGVzYy5oIGIvaW5jbHVkZS9hc20taTM4Ni9kZXNjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFlNjc4MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvZGVzYy5oCkBAIC0wLDAgKzEsMTQ0IEBACisjaWZuZGVmIF9fQVJDSF9ERVNDX0gKKyNkZWZpbmUgX19BUkNIX0RFU0NfSAorCisjaW5jbHVkZSA8YXNtL2xkdC5oPgorI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CisKKyNkZWZpbmUgQ1BVXzE2QklUX1NUQUNLX1NJWkUgMTAyNAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjaW5jbHVkZSA8bGludXgvcHJlZW1wdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorCisjaW5jbHVkZSA8YXNtL21tdS5oPgorCitleHRlcm4gc3RydWN0IGRlc2Nfc3RydWN0IGNwdV9nZHRfdGFibGVbR0RUX0VOVFJJRVNdOworREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCBkZXNjX3N0cnVjdCwgY3B1X2dkdF90YWJsZVtHRFRfRU5UUklFU10pOworCitERUNMQVJFX1BFUl9DUFUodW5zaWduZWQgY2hhciwgY3B1XzE2Yml0X3N0YWNrW0NQVV8xNkJJVF9TVEFDS19TSVpFXSk7CisKK3N0cnVjdCBYZ3RfZGVzY19zdHJ1Y3QgeworCXVuc2lnbmVkIHNob3J0IHNpemU7CisJdW5zaWduZWQgbG9uZyBhZGRyZXNzIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCXVuc2lnbmVkIHNob3J0IHBhZDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitleHRlcm4gc3RydWN0IFhndF9kZXNjX3N0cnVjdCBpZHRfZGVzY3IsIGNwdV9nZHRfZGVzY3JbTlJfQ1BVU107CisKKyNkZWZpbmUgbG9hZF9UUl9kZXNjKCkgX19hc21fXyBfX3ZvbGF0aWxlX18oImx0ciAlJWF4Ijo6ImEiIChHRFRfRU5UUllfVFNTKjgpKQorI2RlZmluZSBsb2FkX0xEVF9kZXNjKCkgX19hc21fXyBfX3ZvbGF0aWxlX18oImxsZHQgJSVheCI6OiJhIiAoR0RUX0VOVFJZX0xEVCo4KSkKKworLyoKKyAqIFRoaXMgaXMgdGhlIGxkdCB0aGF0IGV2ZXJ5IHByb2Nlc3Mgd2lsbCBnZXQgdW5sZXNzIHdlIG5lZWQKKyAqIHNvbWV0aGluZyBvdGhlciB0aGFuIHRoaXMuCisgKi8KK2V4dGVybiBzdHJ1Y3QgZGVzY19zdHJ1Y3QgZGVmYXVsdF9sZHRbXTsKK2V4dGVybiB2b2lkIHNldF9pbnRyX2dhdGUodW5zaWduZWQgaW50IGlycSwgdm9pZCAqIGFkZHIpOworCisjZGVmaW5lIF9zZXRfdHNzbGR0X2Rlc2MobixhZGRyLGxpbWl0LHR5cGUpIFwKK19fYXNtX18gX192b2xhdGlsZV9fICgibW92dyAldzMsMCglMilcblx0IiBcCisJIm1vdncgJSVheCwyKCUyKVxuXHQiIFwKKwkicm9ybCAkMTYsJSVlYXhcblx0IiBcCisJIm1vdmIgJSVhbCw0KCUyKVxuXHQiIFwKKwkibW92YiAlNCw1KCUyKVxuXHQiIFwKKwkibW92YiAkMCw2KCUyKVxuXHQiIFwKKwkibW92YiAlJWFoLDcoJTIpXG5cdCIgXAorCSJyb3JsICQxNiwlJWVheCIgXAorCTogIj1tIigqKG4pKSA6ICJhIiAoYWRkciksICJyIihuKSwgImlyIihsaW1pdCksICJpIih0eXBlKSkKKworc3RhdGljIGlubGluZSB2b2lkIF9fc2V0X3Rzc19kZXNjKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGludCBlbnRyeSwgdm9pZCAqYWRkcikKK3sKKwlfc2V0X3Rzc2xkdF9kZXNjKCZwZXJfY3B1KGNwdV9nZHRfdGFibGUsIGNwdSlbZW50cnldLCAoaW50KWFkZHIsCisJCW9mZnNldG9mKHN0cnVjdCB0c3Nfc3RydWN0LCBfX2NhY2hlbGluZV9maWxsZXIpIC0gMSwgMHg4OSk7Cit9CisKKyNkZWZpbmUgc2V0X3Rzc19kZXNjKGNwdSxhZGRyKSBfX3NldF90c3NfZGVzYyhjcHUsIEdEVF9FTlRSWV9UU1MsIGFkZHIpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfbGR0X2Rlc2ModW5zaWduZWQgaW50IGNwdSwgdm9pZCAqYWRkciwgdW5zaWduZWQgaW50IHNpemUpCit7CisJX3NldF90c3NsZHRfZGVzYygmcGVyX2NwdShjcHVfZ2R0X3RhYmxlLCBjcHUpW0dEVF9FTlRSWV9MRFRdLCAoaW50KWFkZHIsICgoc2l6ZSA8PCAzKS0xKSwgMHg4Mik7Cit9CisKKyNkZWZpbmUgTERUX2VudHJ5X2EoaW5mbykgXAorCSgoKChpbmZvKS0+YmFzZV9hZGRyICYgMHgwMDAwZmZmZikgPDwgMTYpIHwgKChpbmZvKS0+bGltaXQgJiAweDBmZmZmKSkKKworI2RlZmluZSBMRFRfZW50cnlfYihpbmZvKSBcCisJKCgoaW5mbyktPmJhc2VfYWRkciAmIDB4ZmYwMDAwMDApIHwgXAorCSgoKGluZm8pLT5iYXNlX2FkZHIgJiAweDAwZmYwMDAwKSA+PiAxNikgfCBcCisJKChpbmZvKS0+bGltaXQgJiAweGYwMDAwKSB8IFwKKwkoKChpbmZvKS0+cmVhZF9leGVjX29ubHkgXiAxKSA8PCA5KSB8IFwKKwkoKGluZm8pLT5jb250ZW50cyA8PCAxMCkgfCBcCisJKCgoaW5mbyktPnNlZ19ub3RfcHJlc2VudCBeIDEpIDw8IDE1KSB8IFwKKwkoKGluZm8pLT5zZWdfMzJiaXQgPDwgMjIpIHwgXAorCSgoaW5mbyktPmxpbWl0X2luX3BhZ2VzIDw8IDIzKSB8IFwKKwkoKGluZm8pLT51c2VhYmxlIDw8IDIwKSB8IFwKKwkweDcwMDApCisKKyNkZWZpbmUgTERUX2VtcHR5KGluZm8pIChcCisJKGluZm8pLT5iYXNlX2FkZHIJPT0gMAkmJiBcCisJKGluZm8pLT5saW1pdAkJPT0gMAkmJiBcCisJKGluZm8pLT5jb250ZW50cwk9PSAwCSYmIFwKKwkoaW5mbyktPnJlYWRfZXhlY19vbmx5CT09IDEJJiYgXAorCShpbmZvKS0+c2VnXzMyYml0CT09IDAJJiYgXAorCShpbmZvKS0+bGltaXRfaW5fcGFnZXMJPT0gMAkmJiBcCisJKGluZm8pLT5zZWdfbm90X3ByZXNlbnQJPT0gMQkmJiBcCisJKGluZm8pLT51c2VhYmxlCQk9PSAwCSkKKworI2lmIFRMU19TSVpFICE9IDI0CisjIGVycm9yIHVwZGF0ZSB0aGlzIGNvZGUuCisjZW5kaWYKKworc3RhdGljIGlubGluZSB2b2lkIGxvYWRfVExTKHN0cnVjdCB0aHJlYWRfc3RydWN0ICp0LCB1bnNpZ25lZCBpbnQgY3B1KQoreworI2RlZmluZSBDKGkpIHBlcl9jcHUoY3B1X2dkdF90YWJsZSwgY3B1KVtHRFRfRU5UUllfVExTX01JTiArIGldID0gdC0+dGxzX2FycmF5W2ldCisJQygwKTsgQygxKTsgQygyKTsKKyN1bmRlZiBDCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9MRFQodm9pZCkKK3sKKwlpbnQgY3B1ID0gZ2V0X2NwdSgpOworCisJc2V0X2xkdF9kZXNjKGNwdSwgJmRlZmF1bHRfbGR0WzBdLCA1KTsKKwlsb2FkX0xEVF9kZXNjKCk7CisJcHV0X2NwdSgpOworfQorCisvKgorICogbG9hZCBvbmUgcGFydGljdWxhciBMRFQgaW50byB0aGUgY3VycmVudCBDUFUKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGxvYWRfTERUX25vbG9jayhtbV9jb250ZXh0X3QgKnBjLCBpbnQgY3B1KQoreworCXZvaWQgKnNlZ21lbnRzID0gcGMtPmxkdDsKKwlpbnQgY291bnQgPSBwYy0+c2l6ZTsKKworCWlmIChsaWtlbHkoIWNvdW50KSkgeworCQlzZWdtZW50cyA9ICZkZWZhdWx0X2xkdFswXTsKKwkJY291bnQgPSA1OworCX0KKwkJCisJc2V0X2xkdF9kZXNjKGNwdSwgc2VnbWVudHMsIGNvdW50KTsKKwlsb2FkX0xEVF9kZXNjKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2FkX0xEVChtbV9jb250ZXh0X3QgKnBjKQoreworCWludCBjcHUgPSBnZXRfY3B1KCk7CisJbG9hZF9MRFRfbm9sb2NrKHBjLCBjcHUpOworCXB1dF9jcHUoKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9kZXNjX2Jhc2UodW5zaWduZWQgbG9uZyAqZGVzYykKK3sKKwl1bnNpZ25lZCBsb25nIGJhc2U7CisJYmFzZSA9ICgoZGVzY1swXSA+PiAxNikgICYgMHgwMDAwZmZmZikgfAorCQkoKGRlc2NbMV0gPDwgMTYpICYgMHgwMGZmMDAwMCkgfAorCQkoZGVzY1sxXSAmIDB4ZmYwMDAwMDApOworCXJldHVybiBiYXNlOworfQorCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvZGl2NjQuaCBiL2luY2x1ZGUvYXNtLWkzODYvZGl2NjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGVkOGIyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9kaXY2NC5oCkBAIC0wLDAgKzEsNDggQEAKKyNpZm5kZWYgX19JMzg2X0RJVjY0CisjZGVmaW5lIF9fSTM4Nl9ESVY2NAorCisvKgorICogZG9fZGl2KCkgaXMgTk9UIGEgQyBmdW5jdGlvbi4gSXQgd2FudHMgdG8gcmV0dXJuCisgKiB0d28gdmFsdWVzICh0aGUgcXVvdGllbnQgYW5kIHRoZSByZW1haW5kZXIpLCBidXQKKyAqIHNpbmNlIHRoYXQgZG9lc24ndCB3b3JrIHZlcnkgd2VsbCBpbiBDLCB3aGF0IGl0CisgKiBkb2VzIGlzOgorICoKKyAqIC0gbW9kaWZpZXMgdGhlIDY0LWJpdCBkaXZpZGVuZCBfaW5fcGxhY2VfCisgKiAtIHJldHVybnMgdGhlIDMyLWJpdCByZW1haW5kZXIKKyAqCisgKiBUaGlzIGVuZHMgdXAgYmVpbmcgdGhlIG1vc3QgZWZmaWNpZW50ICJjYWxsaW5nCisgKiBjb252ZW50aW9uIiBvbiB4ODYuCisgKi8KKyNkZWZpbmUgZG9fZGl2KG4sYmFzZSkgKHsgXAorCXVuc2lnbmVkIGxvbmcgX191cHBlciwgX19sb3csIF9faGlnaCwgX19tb2QsIF9fYmFzZTsgXAorCV9fYmFzZSA9IChiYXNlKTsgXAorCWFzbSgiIjoiPWEiIChfX2xvdyksICI9ZCIgKF9faGlnaCk6IkEiIChuKSk7IFwKKwlfX3VwcGVyID0gX19oaWdoOyBcCisJaWYgKF9faGlnaCkgeyBcCisJCV9fdXBwZXIgPSBfX2hpZ2ggJSAoX19iYXNlKTsgXAorCQlfX2hpZ2ggPSBfX2hpZ2ggLyAoX19iYXNlKTsgXAorCX0gXAorCWFzbSgiZGl2bCAlMiI6Ij1hIiAoX19sb3cpLCAiPWQiIChfX21vZCk6InJtIiAoX19iYXNlKSwgIjAiIChfX2xvdyksICIxIiAoX191cHBlcikpOyBcCisJYXNtKCIiOiI9QSIgKG4pOiJhIiAoX19sb3cpLCJkIiAoX19oaWdoKSk7IFwKKwlfX21vZDsgXAorfSkKKworLyoKKyAqIChsb25nKVggPSAoKGxvbmcgbG9uZylkaXZzKSAvIChsb25nKWRpdgorICogKGxvbmcpcmVtID0gKChsb25nIGxvbmcpZGl2cykgJSAobG9uZylkaXYKKyAqCisgKiBXYXJuaW5nLCB0aGlzIHdpbGwgZG8gYW4gZXhjZXB0aW9uIGlmIFggb3ZlcmZsb3dzLgorICovCisjZGVmaW5lIGRpdl9sb25nX2xvbmdfcmVtKGEsYixjKSBkaXZfbGxfWF9sX3JlbShhLGIsYykKKworZXh0ZXJuIGlubGluZSBsb25nCitkaXZfbGxfWF9sX3JlbShsb25nIGxvbmcgZGl2cywgbG9uZyBkaXYsIGxvbmcgKnJlbSkKK3sKKwlsb25nIGR1bTI7CisgICAgICBfX2FzbV9fKCJkaXZsICUyIjoiPWEiKGR1bTIpLCAiPWQiKCpyZW0pCisgICAgICA6CSJybSIoZGl2KSwgIkEiKGRpdnMpKTsKKworCXJldHVybiBkdW0yOworCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvZG1hLW1hcHBpbmcuaCBiL2luY2x1ZGUvYXNtLWkzODYvZG1hLW1hcHBpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjM5NjRiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9kbWEtbWFwcGluZy5oCkBAIC0wLDAgKzEsMTc3IEBACisjaWZuZGVmIF9BU01fSTM4Nl9ETUFfTUFQUElOR19ICisjZGVmaW5lIF9BU01fSTM4Nl9ETUFfTUFQUElOR19ICisKKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorCisjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+CisKKyNkZWZpbmUgZG1hX2FsbG9jX25vbmNvaGVyZW50KGQsIHMsIGgsIGYpIGRtYV9hbGxvY19jb2hlcmVudChkLCBzLCBoLCBmKQorI2RlZmluZSBkbWFfZnJlZV9ub25jb2hlcmVudChkLCBzLCB2LCBoKSBkbWFfZnJlZV9jb2hlcmVudChkLCBzLCB2LCBoKQorCit2b2lkICpkbWFfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKKwkJCSAgIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIHVuc2lnbmVkIGludCBfX25vY2FzdCBmbGFnKTsKKwordm9pZCBkbWFfZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAorCQkJIHZvaWQgKnZhZGRyLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUpOworCitzdGF0aWMgaW5saW5lIGRtYV9hZGRyX3QKK2RtYV9tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwKKwkgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCUJVR19PTihkaXJlY3Rpb24gPT0gRE1BX05PTkUpOworCWZsdXNoX3dyaXRlX2J1ZmZlcnMoKTsKKwlyZXR1cm4gdmlydF90b19waHlzKHB0cik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZG1hX3VubWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIsIHNpemVfdCBzaXplLAorCQkgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCUJVR19PTihkaXJlY3Rpb24gPT0gRE1BX05PTkUpOworfQorCitzdGF0aWMgaW5saW5lIGludAorZG1hX21hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZW50cywKKwkgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJaW50IGk7CisKKwlCVUdfT04oZGlyZWN0aW9uID09IERNQV9OT05FKTsKKworCWZvciAoaSA9IDA7IGkgPCBuZW50czsgaSsrICkgeworCQlCVUdfT04oIXNnW2ldLnBhZ2UpOworCisJCXNnW2ldLmRtYV9hZGRyZXNzID0gcGFnZV90b19waHlzKHNnW2ldLnBhZ2UpICsgc2dbaV0ub2Zmc2V0OworCX0KKworCWZsdXNoX3dyaXRlX2J1ZmZlcnMoKTsKKwlyZXR1cm4gbmVudHM7Cit9CisKK3N0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdAorZG1hX21hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorCSAgICAgc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlCVUdfT04oZGlyZWN0aW9uID09IERNQV9OT05FKTsKKwlyZXR1cm4gcGFnZV90b19waHlzKHBhZ2UpICsgb2Zmc2V0OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2RtYV91bm1hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkcmVzcywgc2l6ZV90IHNpemUsCisJICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlCVUdfT04oZGlyZWN0aW9uID09IERNQV9OT05FKTsKK30KKworCitzdGF0aWMgaW5saW5lIHZvaWQKK2RtYV91bm1hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuaHdlbnRyaWVzLAorCSAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCUJVR19PTihkaXJlY3Rpb24gPT0gRE1BX05PTkUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCBzaXplX3Qgc2l6ZSwKKwkJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkCitkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgc2l6ZV90IHNpemUsCisJCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJZmx1c2hfd3JpdGVfYnVmZmVycygpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2RtYV9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLAorCQkJICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2RtYV9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAorCQkJCSB1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsCisJCQkJIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlmbHVzaF93cml0ZV9idWZmZXJzKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZG1hX3N5bmNfc2dfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZWxlbXMsCisJCSAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZG1hX3N5bmNfc2dfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZWxlbXMsCisJCSAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJZmx1c2hfd3JpdGVfYnVmZmVycygpOworfQorCitzdGF0aWMgaW5saW5lIGludAorZG1hX21hcHBpbmdfZXJyb3IoZG1hX2FkZHJfdCBkbWFfYWRkcikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2RtYV9zdXBwb3J0ZWQoc3RydWN0IGRldmljZSAqZGV2LCB1NjQgbWFzaykKK3sKKyAgICAgICAgLyoKKyAgICAgICAgICogd2UgZmFsbCBiYWNrIHRvIEdGUF9ETUEgd2hlbiB0aGUgbWFzayBpc24ndCBhbGwgMXMsCisgICAgICAgICAqIHNvIHdlIGNhbid0IGd1YXJhbnRlZSBhbGxvY2F0aW9ucyB0aGF0IG11c3QgYmUKKyAgICAgICAgICogd2l0aGluIGEgdGlnaHRlciByYW5nZSB0aGFuIEdGUF9ETUEuLgorICAgICAgICAgKi8KKyAgICAgICAgaWYobWFzayA8IDB4MDBmZmZmZmYpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2RtYV9zZXRfbWFzayhzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBtYXNrKQoreworCWlmKCFkZXYtPmRtYV9tYXNrIHx8ICFkbWFfc3VwcG9ydGVkKGRldiwgbWFzaykpCisJCXJldHVybiAtRUlPOworCisJKmRldi0+ZG1hX21hc2sgPSBtYXNrOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitkbWFfZ2V0X2NhY2hlX2FsaWdubWVudCh2b2lkKQoreworCS8qIG5vIGVhc3kgd2F5IHRvIGdldCBjYWNoZSBzaXplIG9uIGFsbCB4ODYsIHNvIHJldHVybiB0aGUKKwkgKiBtYXhpbXVtIHBvc3NpYmxlLCB0byBiZSBzYWZlICovCisJcmV0dXJuICgxIDw8IEwxX0NBQ0hFX1NISUZUX01BWCk7Cit9CisKKyNkZWZpbmUgZG1hX2lzX2NvbnNpc3RlbnQoZCkJKDEpCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZG1hX2NhY2hlX3N5bmModm9pZCAqdmFkZHIsIHNpemVfdCBzaXplLAorCSAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJZmx1c2hfd3JpdGVfYnVmZmVycygpOworfQorCisjZGVmaW5lIEFSQ0hfSEFTX0RNQV9ERUNMQVJFX0NPSEVSRU5UX01FTU9SWQorZXh0ZXJuIGludAorZG1hX2RlY2xhcmVfY29oZXJlbnRfbWVtb3J5KHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBidXNfYWRkciwKKwkJCSAgICBkbWFfYWRkcl90IGRldmljZV9hZGRyLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKTsKKworZXh0ZXJuIHZvaWQKK2RtYV9yZWxlYXNlX2RlY2xhcmVkX21lbW9yeShzdHJ1Y3QgZGV2aWNlICpkZXYpOworCitleHRlcm4gdm9pZCAqCitkbWFfbWFya19kZWNsYXJlZF9tZW1vcnlfb2NjdXBpZWQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgZG1hX2FkZHJfdCBkZXZpY2VfYWRkciwgc2l6ZV90IHNpemUpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvZG1hLmggYi9pbmNsdWRlL2FzbS1pMzg2L2RtYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyNGIyYmIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2RtYS5oCkBAIC0wLDAgKzEsMjk4IEBACisvKiAkSWQ6IGRtYS5oLHYgMS43IDE5OTIvMTIvMTQgMDA6Mjk6MzQgcm9vdCBFeHAgcm9vdCAkCisgKiBsaW51eC9pbmNsdWRlL2FzbS9kbWEuaDogRGVmaW5lcyBmb3IgdXNpbmcgYW5kIGFsbG9jYXRpbmcgZG1hIGNoYW5uZWxzLgorICogV3JpdHRlbiBieSBIZW5udXMgQmVyZ21hbiwgMTk5Mi4KKyAqIEhpZ2ggRE1BIGNoYW5uZWwgc3VwcG9ydCAmIGluZm8gYnkgSGFubnUgU2F2b2xhaW5lbgorICogYW5kIEpvaG4gQm95ZCwgTm92LiAxOTkyLgorICovCisKKyNpZm5kZWYgX0FTTV9ETUFfSAorI2RlZmluZSBfQVNNX0RNQV9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgkvKiBBbmQgc3BpbmxvY2tzICovCisjaW5jbHVkZSA8YXNtL2lvLmg+CQkvKiBuZWVkIGJ5dGUgSU8gKi8KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisKKyNpZmRlZiBIQVZFX1JFQUxMWV9TTE9XX0RNQV9DT05UUk9MTEVSCisjZGVmaW5lIGRtYV9vdXRiCW91dGJfcAorI2Vsc2UKKyNkZWZpbmUgZG1hX291dGIJb3V0YgorI2VuZGlmCisKKyNkZWZpbmUgZG1hX2luYgkJaW5iCisKKy8qCisgKiBOT1RFUyBhYm91dCBETUEgdHJhbnNmZXJzOgorICoKKyAqICBjb250cm9sbGVyIDE6IGNoYW5uZWxzIDAtMywgYnl0ZSBvcGVyYXRpb25zLCBwb3J0cyAwMC0xRgorICogIGNvbnRyb2xsZXIgMjogY2hhbm5lbHMgNC03LCB3b3JkIG9wZXJhdGlvbnMsIHBvcnRzIEMwLURGCisgKgorICogIC0gQUxMIHJlZ2lzdGVycyBhcmUgOCBiaXRzIG9ubHksIHJlZ2FyZGxlc3Mgb2YgdHJhbnNmZXIgc2l6ZQorICogIC0gY2hhbm5lbCA0IGlzIG5vdCB1c2VkIC0gY2FzY2FkZXMgMSBpbnRvIDIuCisgKiAgLSBjaGFubmVscyAwLTMgYXJlIGJ5dGUgLSBhZGRyZXNzZXMvY291bnRzIGFyZSBmb3IgcGh5c2ljYWwgYnl0ZXMKKyAqICAtIGNoYW5uZWxzIDUtNyBhcmUgd29yZCAtIGFkZHJlc3Nlcy9jb3VudHMgYXJlIGZvciBwaHlzaWNhbCB3b3JkcworICogIC0gdHJhbnNmZXJzIG11c3Qgbm90IGNyb3NzIHBoeXNpY2FsIDY0SyAoMC0zKSBvciAxMjhLICg1LTcpIGJvdW5kYXJpZXMKKyAqICAtIHRyYW5zZmVyIGNvdW50IGxvYWRlZCB0byByZWdpc3RlcnMgaXMgMSBsZXNzIHRoYW4gYWN0dWFsIGNvdW50CisgKiAgLSBjb250cm9sbGVyIDIgb2Zmc2V0cyBhcmUgYWxsIGV2ZW4gKDJ4IG9mZnNldHMgZm9yIGNvbnRyb2xsZXIgMSkKKyAqICAtIHBhZ2UgcmVnaXN0ZXJzIGZvciA1LTcgZG9uJ3QgdXNlIGRhdGEgYml0IDAsIHJlcHJlc2VudCAxMjhLIHBhZ2VzCisgKiAgLSBwYWdlIHJlZ2lzdGVycyBmb3IgMC0zIHVzZSBiaXQgMCwgcmVwcmVzZW50IDY0SyBwYWdlcworICoKKyAqIERNQSB0cmFuc2ZlcnMgYXJlIGxpbWl0ZWQgdG8gdGhlIGxvd2VyIDE2TUIgb2YgX3BoeXNpY2FsXyBtZW1vcnkuICAKKyAqIE5vdGUgdGhhdCBhZGRyZXNzZXMgbG9hZGVkIGludG8gcmVnaXN0ZXJzIG11c3QgYmUgX3BoeXNpY2FsXyBhZGRyZXNzZXMsCisgKiBub3QgbG9naWNhbCBhZGRyZXNzZXMgKHdoaWNoIG1heSBkaWZmZXIgaWYgcGFnaW5nIGlzIGFjdGl2ZSkuCisgKgorICogIEFkZHJlc3MgbWFwcGluZyBmb3IgY2hhbm5lbHMgMC0zOgorICoKKyAqICAgQTIzIC4uLiBBMTYgQTE1IC4uLiBBOCAgQTcgLi4uIEEwICAgIChQaHlzaWNhbCBhZGRyZXNzZXMpCisgKiAgICB8ICAuLi4gIHwgICB8ICAuLi4gfCAgIHwgIC4uLiB8CisgKiAgICB8ICAuLi4gIHwgICB8ICAuLi4gfCAgIHwgIC4uLiB8CisgKiAgICB8ICAuLi4gIHwgICB8ICAuLi4gfCAgIHwgIC4uLiB8CisgKiAgIFA3ICAuLi4gIFAwICBBNyAuLi4gQTAgIEE3IC4uLiBBMCAgIAorICogfCAgICBQYWdlICAgIHwgQWRkciBNU0IgfCBBZGRyIExTQiB8ICAgKERNQSByZWdpc3RlcnMpCisgKgorICogIEFkZHJlc3MgbWFwcGluZyBmb3IgY2hhbm5lbHMgNS03OgorICoKKyAqICAgQTIzIC4uLiBBMTcgQTE2IEExNSAuLi4gQTkgQTggQTcgLi4uIEExIEEwICAgIChQaHlzaWNhbCBhZGRyZXNzZXMpCisgKiAgICB8ICAuLi4gIHwgICBcICAgXCAgIC4uLiBcICBcICBcICAuLi4gXCAgXAorICogICAgfCAgLi4uICB8ICAgIFwgICBcICAgLi4uIFwgIFwgIFwgIC4uLiBcICAobm90IHVzZWQpCisgKiAgICB8ICAuLi4gIHwgICAgIFwgICBcICAgLi4uIFwgIFwgIFwgIC4uLiBcCisgKiAgIFA3ICAuLi4gIFAxICgwKSBBNyBBNiAgLi4uIEEwIEE3IEE2IC4uLiBBMCAgIAorICogfCAgICAgIFBhZ2UgICAgICB8ICBBZGRyIE1TQiAgIHwgIEFkZHIgTFNCICB8ICAgKERNQSByZWdpc3RlcnMpCisgKgorICogQWdhaW4sIGNoYW5uZWxzIDUtNyB0cmFuc2ZlciBfcGh5c2ljYWxfIHdvcmRzICgxNiBiaXRzKSwgc28gYWRkcmVzc2VzCisgKiBhbmQgY291bnRzIF9tdXN0XyBiZSB3b3JkLWFsaWduZWQgKHRoZSBsb3dlc3QgYWRkcmVzcyBiaXQgaXMgX2lnbm9yZWRfIGF0CisgKiB0aGUgaGFyZHdhcmUgbGV2ZWwsIHNvIG9kZC1ieXRlIHRyYW5zZmVycyBhcmVuJ3QgcG9zc2libGUpLgorICoKKyAqIFRyYW5zZmVyIGNvdW50IChfbm90ICMgYnl0ZXNfKSBpcyBsaW1pdGVkIHRvIDY0SywgcmVwcmVzZW50ZWQgYXMgYWN0dWFsCisgKiBjb3VudCAtIDEgOiA2NEsgPT4gMHhGRkZGLCAxID0+IDB4MDAwMC4gIFRodXMsIGNvdW50IGlzIGFsd2F5cyAxIG9yIG1vcmUsCisgKiBhbmQgdXAgdG8gMTI4SyBieXRlcyBtYXkgYmUgdHJhbnNmZXJyZWQgb24gY2hhbm5lbHMgNS03IGluIG9uZSBvcGVyYXRpb24uIAorICoKKyAqLworCisjZGVmaW5lIE1BWF9ETUFfQ0hBTk5FTFMJOAorCisvKiBUaGUgbWF4aW11bSBhZGRyZXNzIHRoYXQgd2UgY2FuIHBlcmZvcm0gYSBETUEgdHJhbnNmZXIgdG8gb24gdGhpcyBwbGF0Zm9ybSAqLworI2RlZmluZSBNQVhfRE1BX0FERFJFU1MgICAgICAoUEFHRV9PRkZTRVQrMHgxMDAwMDAwKQorCisvKiA4MjM3IERNQSBjb250cm9sbGVycyAqLworI2RlZmluZSBJT19ETUExX0JBU0UJMHgwMAkvKiA4IGJpdCBzbGF2ZSBETUEsIGNoYW5uZWxzIDAuLjMgKi8KKyNkZWZpbmUgSU9fRE1BMl9CQVNFCTB4QzAJLyogMTYgYml0IG1hc3RlciBETUEsIGNoIDQoPXNsYXZlIGlucHV0KS4uNyAqLworCisvKiBETUEgY29udHJvbGxlciByZWdpc3RlcnMgKi8KKyNkZWZpbmUgRE1BMV9DTURfUkVHCQkweDA4CS8qIGNvbW1hbmQgcmVnaXN0ZXIgKHcpICovCisjZGVmaW5lIERNQTFfU1RBVF9SRUcJCTB4MDgJLyogc3RhdHVzIHJlZ2lzdGVyIChyKSAqLworI2RlZmluZSBETUExX1JFUV9SRUcgICAgICAgICAgICAweDA5ICAgIC8qIHJlcXVlc3QgcmVnaXN0ZXIgKHcpICovCisjZGVmaW5lIERNQTFfTUFTS19SRUcJCTB4MEEJLyogc2luZ2xlLWNoYW5uZWwgbWFzayAodykgKi8KKyNkZWZpbmUgRE1BMV9NT0RFX1JFRwkJMHgwQgkvKiBtb2RlIHJlZ2lzdGVyICh3KSAqLworI2RlZmluZSBETUExX0NMRUFSX0ZGX1JFRwkweDBDCS8qIGNsZWFyIHBvaW50ZXIgZmxpcC1mbG9wICh3KSAqLworI2RlZmluZSBETUExX1RFTVBfUkVHICAgICAgICAgICAweDBEICAgIC8qIFRlbXBvcmFyeSBSZWdpc3RlciAocikgKi8KKyNkZWZpbmUgRE1BMV9SRVNFVF9SRUcJCTB4MEQJLyogTWFzdGVyIENsZWFyICh3KSAqLworI2RlZmluZSBETUExX0NMUl9NQVNLX1JFRyAgICAgICAweDBFICAgIC8qIENsZWFyIE1hc2sgKi8KKyNkZWZpbmUgRE1BMV9NQVNLX0FMTF9SRUcgICAgICAgMHgwRiAgICAvKiBhbGwtY2hhbm5lbHMgbWFzayAodykgKi8KKworI2RlZmluZSBETUEyX0NNRF9SRUcJCTB4RDAJLyogY29tbWFuZCByZWdpc3RlciAodykgKi8KKyNkZWZpbmUgRE1BMl9TVEFUX1JFRwkJMHhEMAkvKiBzdGF0dXMgcmVnaXN0ZXIgKHIpICovCisjZGVmaW5lIERNQTJfUkVRX1JFRyAgICAgICAgICAgIDB4RDIgICAgLyogcmVxdWVzdCByZWdpc3RlciAodykgKi8KKyNkZWZpbmUgRE1BMl9NQVNLX1JFRwkJMHhENAkvKiBzaW5nbGUtY2hhbm5lbCBtYXNrICh3KSAqLworI2RlZmluZSBETUEyX01PREVfUkVHCQkweEQ2CS8qIG1vZGUgcmVnaXN0ZXIgKHcpICovCisjZGVmaW5lIERNQTJfQ0xFQVJfRkZfUkVHCTB4RDgJLyogY2xlYXIgcG9pbnRlciBmbGlwLWZsb3AgKHcpICovCisjZGVmaW5lIERNQTJfVEVNUF9SRUcgICAgICAgICAgIDB4REEgICAgLyogVGVtcG9yYXJ5IFJlZ2lzdGVyIChyKSAqLworI2RlZmluZSBETUEyX1JFU0VUX1JFRwkJMHhEQQkvKiBNYXN0ZXIgQ2xlYXIgKHcpICovCisjZGVmaW5lIERNQTJfQ0xSX01BU0tfUkVHICAgICAgIDB4REMgICAgLyogQ2xlYXIgTWFzayAqLworI2RlZmluZSBETUEyX01BU0tfQUxMX1JFRyAgICAgICAweERFICAgIC8qIGFsbC1jaGFubmVscyBtYXNrICh3KSAqLworCisjZGVmaW5lIERNQV9BRERSXzAgICAgICAgICAgICAgIDB4MDAgICAgLyogRE1BIGFkZHJlc3MgcmVnaXN0ZXJzICovCisjZGVmaW5lIERNQV9BRERSXzEgICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgRE1BX0FERFJfMiAgICAgICAgICAgICAgMHgwNAorI2RlZmluZSBETUFfQUREUl8zICAgICAgICAgICAgICAweDA2CisjZGVmaW5lIERNQV9BRERSXzQgICAgICAgICAgICAgIDB4QzAKKyNkZWZpbmUgRE1BX0FERFJfNSAgICAgICAgICAgICAgMHhDNAorI2RlZmluZSBETUFfQUREUl82ICAgICAgICAgICAgICAweEM4CisjZGVmaW5lIERNQV9BRERSXzcgICAgICAgICAgICAgIDB4Q0MKKworI2RlZmluZSBETUFfQ05UXzAgICAgICAgICAgICAgICAweDAxICAgIC8qIERNQSBjb3VudCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgRE1BX0NOVF8xICAgICAgICAgICAgICAgMHgwMworI2RlZmluZSBETUFfQ05UXzIgICAgICAgICAgICAgICAweDA1CisjZGVmaW5lIERNQV9DTlRfMyAgICAgICAgICAgICAgIDB4MDcKKyNkZWZpbmUgRE1BX0NOVF80ICAgICAgICAgICAgICAgMHhDMgorI2RlZmluZSBETUFfQ05UXzUgICAgICAgICAgICAgICAweEM2CisjZGVmaW5lIERNQV9DTlRfNiAgICAgICAgICAgICAgIDB4Q0EKKyNkZWZpbmUgRE1BX0NOVF83ICAgICAgICAgICAgICAgMHhDRQorCisjZGVmaW5lIERNQV9QQUdFXzAgICAgICAgICAgICAgIDB4ODcgICAgLyogRE1BIHBhZ2UgcmVnaXN0ZXJzICovCisjZGVmaW5lIERNQV9QQUdFXzEgICAgICAgICAgICAgIDB4ODMKKyNkZWZpbmUgRE1BX1BBR0VfMiAgICAgICAgICAgICAgMHg4MQorI2RlZmluZSBETUFfUEFHRV8zICAgICAgICAgICAgICAweDgyCisjZGVmaW5lIERNQV9QQUdFXzUgICAgICAgICAgICAgIDB4OEIKKyNkZWZpbmUgRE1BX1BBR0VfNiAgICAgICAgICAgICAgMHg4OQorI2RlZmluZSBETUFfUEFHRV83ICAgICAgICAgICAgICAweDhBCisKKyNkZWZpbmUgRE1BX01PREVfUkVBRAkweDQ0CS8qIEkvTyB0byBtZW1vcnksIG5vIGF1dG9pbml0LCBpbmNyZW1lbnQsIHNpbmdsZSBtb2RlICovCisjZGVmaW5lIERNQV9NT0RFX1dSSVRFCTB4NDgJLyogbWVtb3J5IHRvIEkvTywgbm8gYXV0b2luaXQsIGluY3JlbWVudCwgc2luZ2xlIG1vZGUgKi8KKyNkZWZpbmUgRE1BX01PREVfQ0FTQ0FERSAweEMwICAgLyogcGFzcyB0aHJ1IERSRVEtPkhSUSwgREFDSzwtSExEQSBvbmx5ICovCisKKyNkZWZpbmUgRE1BX0FVVE9JTklUCTB4MTAKKworCitleHRlcm4gc3BpbmxvY2tfdCAgZG1hX3NwaW5fbG9jazsKKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBjbGFpbV9kbWFfbG9jayh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmRtYV9zcGluX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gZmxhZ3M7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgcmVsZWFzZV9kbWFfbG9jayh1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRtYV9zcGluX2xvY2ssIGZsYWdzKTsKK30KKworLyogZW5hYmxlL2Rpc2FibGUgYSBzcGVjaWZpYyBETUEgY2hhbm5lbCAqLworc3RhdGljIF9faW5saW5lX18gdm9pZCBlbmFibGVfZG1hKHVuc2lnbmVkIGludCBkbWFucikKK3sKKwlpZiAoZG1hbnI8PTMpCisJCWRtYV9vdXRiKGRtYW5yLCAgRE1BMV9NQVNLX1JFRyk7CisJZWxzZQorCQlkbWFfb3V0YihkbWFuciAmIDMsICBETUEyX01BU0tfUkVHKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBkaXNhYmxlX2RtYSh1bnNpZ25lZCBpbnQgZG1hbnIpCit7CisJaWYgKGRtYW5yPD0zKQorCQlkbWFfb3V0YihkbWFuciB8IDQsICBETUExX01BU0tfUkVHKTsKKwllbHNlCisJCWRtYV9vdXRiKChkbWFuciAmIDMpIHwgNCwgIERNQTJfTUFTS19SRUcpOworfQorCisvKiBDbGVhciB0aGUgJ0RNQSBQb2ludGVyIEZsaXAgRmxvcCcuCisgKiBXcml0ZSAwIGZvciBMU0IvTVNCLCAxIGZvciBNU0IvTFNCIGFjY2Vzcy4KKyAqIFVzZSB0aGlzIG9uY2UgdG8gaW5pdGlhbGl6ZSB0aGUgRkYgdG8gYSBrbm93biBzdGF0ZS4KKyAqIEFmdGVyIHRoYXQsIGtlZXAgdHJhY2sgb2YgaXQuIDotKQorICogLS0tIEluIG9yZGVyIHRvIGRvIHRoYXQsIHRoZSBETUEgcm91dGluZXMgYmVsb3cgc2hvdWxkIC0tLQorICogLS0tIG9ubHkgYmUgdXNlZCB3aGlsZSBob2xkaW5nIHRoZSBETUEgbG9jayAhIC0tLQorICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGNsZWFyX2RtYV9mZih1bnNpZ25lZCBpbnQgZG1hbnIpCit7CisJaWYgKGRtYW5yPD0zKQorCQlkbWFfb3V0YigwLCAgRE1BMV9DTEVBUl9GRl9SRUcpOworCWVsc2UKKwkJZG1hX291dGIoMCwgIERNQTJfQ0xFQVJfRkZfUkVHKTsKK30KKworLyogc2V0IG1vZGUgKGFib3ZlKSBmb3IgYSBzcGVjaWZpYyBETUEgY2hhbm5lbCAqLworc3RhdGljIF9faW5saW5lX18gdm9pZCBzZXRfZG1hX21vZGUodW5zaWduZWQgaW50IGRtYW5yLCBjaGFyIG1vZGUpCit7CisJaWYgKGRtYW5yPD0zKQorCQlkbWFfb3V0Yihtb2RlIHwgZG1hbnIsICBETUExX01PREVfUkVHKTsKKwllbHNlCisJCWRtYV9vdXRiKG1vZGUgfCAoZG1hbnImMyksICBETUEyX01PREVfUkVHKTsKK30KKworLyogU2V0IG9ubHkgdGhlIHBhZ2UgcmVnaXN0ZXIgYml0cyBvZiB0aGUgdHJhbnNmZXIgYWRkcmVzcy4KKyAqIFRoaXMgaXMgdXNlZCBmb3Igc3VjY2Vzc2l2ZSB0cmFuc2ZlcnMgd2hlbiB3ZSBrbm93IHRoZSBjb250ZW50cyBvZgorICogdGhlIGxvd2VyIDE2IGJpdHMgb2YgdGhlIERNQSBjdXJyZW50IGFkZHJlc3MgcmVnaXN0ZXIsIGJ1dCBhIDY0ayBib3VuZGFyeQorICogbWF5IGhhdmUgYmVlbiBjcm9zc2VkLgorICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHNldF9kbWFfcGFnZSh1bnNpZ25lZCBpbnQgZG1hbnIsIGNoYXIgcGFnZW5yKQoreworCXN3aXRjaChkbWFucikgeworCQljYXNlIDA6CisJCQlkbWFfb3V0YihwYWdlbnIsIERNQV9QQUdFXzApOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCWRtYV9vdXRiKHBhZ2VuciwgRE1BX1BBR0VfMSk7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJZG1hX291dGIocGFnZW5yLCBETUFfUEFHRV8yKTsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCQlkbWFfb3V0YihwYWdlbnIsIERNQV9QQUdFXzMpOworCQkJYnJlYWs7CisJCWNhc2UgNToKKwkJCWRtYV9vdXRiKHBhZ2VuciAmIDB4ZmUsIERNQV9QQUdFXzUpOworCQkJYnJlYWs7CisJCWNhc2UgNjoKKwkJCWRtYV9vdXRiKHBhZ2VuciAmIDB4ZmUsIERNQV9QQUdFXzYpOworCQkJYnJlYWs7CisJCWNhc2UgNzoKKwkJCWRtYV9vdXRiKHBhZ2VuciAmIDB4ZmUsIERNQV9QQUdFXzcpOworCQkJYnJlYWs7CisJfQorfQorCisKKy8qIFNldCB0cmFuc2ZlciBhZGRyZXNzICYgcGFnZSBiaXRzIGZvciBzcGVjaWZpYyBETUEgY2hhbm5lbC4KKyAqIEFzc3VtZXMgZG1hIGZsaXBmbG9wIGlzIGNsZWFyLgorICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHNldF9kbWFfYWRkcih1bnNpZ25lZCBpbnQgZG1hbnIsIHVuc2lnbmVkIGludCBhKQoreworCXNldF9kbWFfcGFnZShkbWFuciwgYT4+MTYpOworCWlmIChkbWFuciA8PSAzKSAgeworCSAgICBkbWFfb3V0YiggYSAmIDB4ZmYsICgoZG1hbnImMyk8PDEpICsgSU9fRE1BMV9CQVNFICk7CisgICAgICAgICAgICBkbWFfb3V0YiggKGE+PjgpICYgMHhmZiwgKChkbWFuciYzKTw8MSkgKyBJT19ETUExX0JBU0UgKTsKKwl9ICBlbHNlICB7CisJICAgIGRtYV9vdXRiKCAoYT4+MSkgJiAweGZmLCAoKGRtYW5yJjMpPDwyKSArIElPX0RNQTJfQkFTRSApOworCSAgICBkbWFfb3V0YiggKGE+PjkpICYgMHhmZiwgKChkbWFuciYzKTw8MikgKyBJT19ETUEyX0JBU0UgKTsKKwl9Cit9CisKKworLyogU2V0IHRyYW5zZmVyIHNpemUgKG1heCA2NGsgZm9yIERNQTAuLjMsIDEyOGsgZm9yIERNQTUuLjcpIGZvcgorICogYSBzcGVjaWZpYyBETUEgY2hhbm5lbC4KKyAqIFlvdSBtdXN0IGVuc3VyZSB0aGUgcGFyYW1ldGVycyBhcmUgdmFsaWQuCisgKiBOT1RFOiBmcm9tIGEgbWFudWFsOiAidGhlIG51bWJlciBvZiB0cmFuc2ZlcnMgaXMgb25lIG1vcmUKKyAqIHRoYW4gdGhlIGluaXRpYWwgd29yZCBjb3VudCIhIFRoaXMgaXMgdGFrZW4gaW50byBhY2NvdW50LgorICogQXNzdW1lcyBkbWEgZmxpcC1mbG9wIGlzIGNsZWFyLgorICogTk9URSAyOiAiY291bnQiIHJlcHJlc2VudHMgX2J5dGVzXyBhbmQgbXVzdCBiZSBldmVuIGZvciBjaGFubmVscyA1LTcuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgc2V0X2RtYV9jb3VudCh1bnNpZ25lZCBpbnQgZG1hbnIsIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKyAgICAgICAgY291bnQtLTsKKwlpZiAoZG1hbnIgPD0gMykgIHsKKwkgICAgZG1hX291dGIoIGNvdW50ICYgMHhmZiwgKChkbWFuciYzKTw8MSkgKyAxICsgSU9fRE1BMV9CQVNFICk7CisJICAgIGRtYV9vdXRiKCAoY291bnQ+PjgpICYgMHhmZiwgKChkbWFuciYzKTw8MSkgKyAxICsgSU9fRE1BMV9CQVNFICk7CisgICAgICAgIH0gZWxzZSB7CisJICAgIGRtYV9vdXRiKCAoY291bnQ+PjEpICYgMHhmZiwgKChkbWFuciYzKTw8MikgKyAyICsgSU9fRE1BMl9CQVNFICk7CisJICAgIGRtYV9vdXRiKCAoY291bnQ+PjkpICYgMHhmZiwgKChkbWFuciYzKTw8MikgKyAyICsgSU9fRE1BMl9CQVNFICk7CisgICAgICAgIH0KK30KKworCisvKiBHZXQgRE1BIHJlc2lkdWUgY291bnQuIEFmdGVyIGEgRE1BIHRyYW5zZmVyLCB0aGlzCisgKiBzaG91bGQgcmV0dXJuIHplcm8uIFJlYWRpbmcgdGhpcyB3aGlsZSBhIERNQSB0cmFuc2ZlciBpcworICogc3RpbGwgaW4gcHJvZ3Jlc3Mgd2lsbCByZXR1cm4gdW5wcmVkaWN0YWJsZSByZXN1bHRzLgorICogSWYgY2FsbGVkIGJlZm9yZSB0aGUgY2hhbm5lbCBoYXMgYmVlbiB1c2VkLCBpdCBtYXkgcmV0dXJuIDEuCisgKiBPdGhlcndpc2UsIGl0IHJldHVybnMgdGhlIG51bWJlciBvZiBfYnl0ZXNfIGxlZnQgdG8gdHJhbnNmZXIuCisgKgorICogQXNzdW1lcyBETUEgZmxpcC1mbG9wIGlzIGNsZWFyLgorICovCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgZ2V0X2RtYV9yZXNpZHVlKHVuc2lnbmVkIGludCBkbWFucikKK3sKKwl1bnNpZ25lZCBpbnQgaW9fcG9ydCA9IChkbWFucjw9Myk/ICgoZG1hbnImMyk8PDEpICsgMSArIElPX0RNQTFfQkFTRQorCQkJCQkgOiAoKGRtYW5yJjMpPDwyKSArIDIgKyBJT19ETUEyX0JBU0U7CisKKwkvKiB1c2luZyBzaG9ydCB0byBnZXQgMTYtYml0IHdyYXAgYXJvdW5kICovCisJdW5zaWduZWQgc2hvcnQgY291bnQ7CisKKwljb3VudCA9IDEgKyBkbWFfaW5iKGlvX3BvcnQpOworCWNvdW50ICs9IGRtYV9pbmIoaW9fcG9ydCkgPDwgODsKKwkKKwlyZXR1cm4gKGRtYW5yPD0zKT8gY291bnQgOiAoY291bnQ8PDEpOworfQorCisKKy8qIFRoZXNlIGFyZSBpbiBrZXJuZWwvZG1hLmM6ICovCitleHRlcm4gaW50IHJlcXVlc3RfZG1hKHVuc2lnbmVkIGludCBkbWFuciwgY29uc3QgY2hhciAqIGRldmljZV9pZCk7CS8qIHJlc2VydmUgYSBETUEgY2hhbm5lbCAqLworZXh0ZXJuIHZvaWQgZnJlZV9kbWEodW5zaWduZWQgaW50IGRtYW5yKTsJLyogcmVsZWFzZSBpdCBhZ2FpbiAqLworCisvKiBGcm9tIFBDSSAqLworCisjaWZkZWYgQ09ORklHX1BDSQorZXh0ZXJuIGludCBpc2FfZG1hX2JyaWRnZV9idWdneTsKKyNlbHNlCisjZGVmaW5lIGlzYV9kbWFfYnJpZGdlX2J1Z2d5IAkoMCkKKyNlbmRpZgorCisjZW5kaWYgLyogX0FTTV9ETUFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9lODIwLmggYi9pbmNsdWRlL2FzbS1pMzg2L2U4MjAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzI4NWFlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9lODIwLmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIHN0cnVjdHVyZXMgYW5kIGRlZmluaXRpb25zIGZvciB0aGUgaW50IDE1LCBheD1lODIwIG1lbW9yeSBtYXAKKyAqIHNjaGVtZS4KKyAqCisgKiBJbiBhIG51dHNoZWxsLCBhcmNoL2kzODYvYm9vdC9zZXR1cC5TIHBvcHVsYXRlcyBhIHNjcmF0Y2ggdGFibGUKKyAqIGluIHRoZSBlbXB0eV96ZXJvX2Jsb2NrIHRoYXQgY29udGFpbnMgYSBsaXN0IG9mIHVzYWJsZSBhZGRyZXNzL3NpemUKKyAqIGR1cGxlcy4gICBJbiBhcmNoL2kzODYva2VybmVsL3NldHVwLmMsIHRoaXMgaW5mb3JtYXRpb24gaXMKKyAqIHRyYW5zZmVycmVkIGludG8gdGhlIGU4MjBtYXAsIGFuZCBpbiBhcmNoL2kzODYvbW0vaW5pdC5jLCB0aGF0CisgKiBuZXcgaW5mb3JtYXRpb24gaXMgdXNlZCB0byBtYXJrIHBhZ2VzIHJlc2VydmVkIG9yIG5vdC4KKyAqCisgKi8KKyNpZm5kZWYgX19FODIwX0hFQURFUgorI2RlZmluZSBfX0U4MjBfSEVBREVSCisKKyNkZWZpbmUgRTgyME1BUAkweDJkMAkJLyogb3VyIG1hcCAqLworI2RlZmluZSBFODIwTUFYCTMyCQkvKiBudW1iZXIgb2YgZW50cmllcyBpbiBFODIwTUFQICovCisjZGVmaW5lIEU4MjBOUgkweDFlOAkJLyogIyBlbnRyaWVzIGluIEU4MjBNQVAgKi8KKworI2RlZmluZSBFODIwX1JBTQkxCisjZGVmaW5lIEU4MjBfUkVTRVJWRUQJMgorI2RlZmluZSBFODIwX0FDUEkJMyAvKiB1c2FibGUgYXMgUkFNIG9uY2UgQUNQSSB0YWJsZXMgaGF2ZSBiZWVuIHJlYWQgKi8KKyNkZWZpbmUgRTgyMF9OVlMJNAorCisjZGVmaW5lIEhJR0hfTUVNT1JZCSgxMDI0KjEwMjQpCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK3N0cnVjdCBlODIwbWFwIHsKKyAgICBpbnQgbnJfbWFwOworICAgIHN0cnVjdCBlODIwZW50cnkgeworCXVuc2lnbmVkIGxvbmcgbG9uZyBhZGRyOwkvKiBzdGFydCBvZiBtZW1vcnkgc2VnbWVudCAqLworCXVuc2lnbmVkIGxvbmcgbG9uZyBzaXplOwkvKiBzaXplIG9mIG1lbW9yeSBzZWdtZW50ICovCisJdW5zaWduZWQgbG9uZyB0eXBlOwkJLyogdHlwZSBvZiBtZW1vcnkgc2VnbWVudCAqLworICAgIH0gbWFwW0U4MjBNQVhdOworfTsKKworZXh0ZXJuIHN0cnVjdCBlODIwbWFwIGU4MjA7CisjZW5kaWYvKiFfX0FTU0VNQkxZX18qLworCisjZW5kaWYvKl9fRTgyMF9IRUFERVIqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9lbGYuaCBiL2luY2x1ZGUvYXNtLWkzODYvZWxmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTMwYmRjOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvZWxmLmgKQEAgLTAsMCArMSwxOTMgQEAKKyNpZm5kZWYgX19BU01pMzg2X0VMRl9ICisjZGVmaW5lIF9fQVNNaTM4Nl9FTEZfSAorCisvKgorICogRUxGIHJlZ2lzdGVyIGRlZmluaXRpb25zLi4KKyAqLworCisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS91c2VyLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4JCS8qIGZvciBzYXZlc2VnbWVudCAqLworCisjaW5jbHVkZSA8bGludXgvdXRzbmFtZS5oPgorCisjZGVmaW5lIFJfMzg2X05PTkUJMAorI2RlZmluZSBSXzM4Nl8zMgkxCisjZGVmaW5lIFJfMzg2X1BDMzIJMgorI2RlZmluZSBSXzM4Nl9HT1QzMgkzCisjZGVmaW5lIFJfMzg2X1BMVDMyCTQKKyNkZWZpbmUgUl8zODZfQ09QWQk1CisjZGVmaW5lIFJfMzg2X0dMT0JfREFUCTYKKyNkZWZpbmUgUl8zODZfSk1QX1NMT1QJNworI2RlZmluZSBSXzM4Nl9SRUxBVElWRQk4CisjZGVmaW5lIFJfMzg2X0dPVE9GRgk5CisjZGVmaW5lIFJfMzg2X0dPVFBDCTEwCisjZGVmaW5lIFJfMzg2X05VTQkxMQorCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgZWxmX2dyZWdfdDsKKworI2RlZmluZSBFTEZfTkdSRUcgKHNpemVvZiAoc3RydWN0IHVzZXJfcmVnc19zdHJ1Y3QpIC8gc2l6ZW9mKGVsZl9ncmVnX3QpKQordHlwZWRlZiBlbGZfZ3JlZ190IGVsZl9ncmVnc2V0X3RbRUxGX05HUkVHXTsKKwordHlwZWRlZiBzdHJ1Y3QgdXNlcl9pMzg3X3N0cnVjdCBlbGZfZnByZWdzZXRfdDsKK3R5cGVkZWYgc3RydWN0IHVzZXJfZnhzcl9zdHJ1Y3QgZWxmX2ZweHJlZ3NldF90OworCisvKgorICogVGhpcyBpcyB1c2VkIHRvIGVuc3VyZSB3ZSBkb24ndCBsb2FkIHNvbWV0aGluZyBmb3IgdGhlIHdyb25nIGFyY2hpdGVjdHVyZS4KKyAqLworI2RlZmluZSBlbGZfY2hlY2tfYXJjaCh4KSBcCisJKCgoeCktPmVfbWFjaGluZSA9PSBFTV8zODYpIHx8ICgoeCktPmVfbWFjaGluZSA9PSBFTV80ODYpKQorCisvKgorICogVGhlc2UgYXJlIHVzZWQgdG8gc2V0IHBhcmFtZXRlcnMgaW4gdGhlIGNvcmUgZHVtcHMuCisgKi8KKyNkZWZpbmUgRUxGX0NMQVNTCUVMRkNMQVNTMzIKKyNkZWZpbmUgRUxGX0RBVEEJRUxGREFUQTJMU0IKKyNkZWZpbmUgRUxGX0FSQ0gJRU1fMzg2CisKKy8qIFNWUjQvaTM4NiBBQkkgKHBhZ2VzIDMtMzEsIDMtMzIpIHNheXMgdGhhdCB3aGVuIHRoZSBwcm9ncmFtIHN0YXJ0cyAlZWR4CisgICBjb250YWlucyBhIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiB3aGljaCBtaWdodCBiZSByZWdpc3RlcmVkIHVzaW5nIGBhdGV4aXQnLgorICAgVGhpcyBwcm92aWRlcyBhIG1lYW4gZm9yIHRoZSBkeW5hbWljIGxpbmtlciB0byBjYWxsIERUX0ZJTkkgZnVuY3Rpb25zIGZvcgorICAgc2hhcmVkIGxpYnJhcmllcyB0aGF0IGhhdmUgYmVlbiBsb2FkZWQgYmVmb3JlIHRoZSBjb2RlIHJ1bnMuCisKKyAgIEEgdmFsdWUgb2YgMCB0ZWxscyB3ZSBoYXZlIG5vIHN1Y2ggaGFuZGxlci4gCisKKyAgIFdlIG1pZ2h0IGFzIHdlbGwgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgZWxzZSBpcyBjbGVhcmVkIHRvbyAoZXhjZXB0IGZvciAlZXNwKSwKKyAgIGp1c3QgdG8gbWFrZSB0aGluZ3MgbW9yZSBkZXRlcm1pbmlzdGljLgorICovCisjZGVmaW5lIEVMRl9QTEFUX0lOSVQoX3IsIGxvYWRfYWRkcikJZG8geyBcCisJX3ItPmVieCA9IDA7IF9yLT5lY3ggPSAwOyBfci0+ZWR4ID0gMDsgXAorCV9yLT5lc2kgPSAwOyBfci0+ZWRpID0gMDsgX3ItPmVicCA9IDA7IFwKKwlfci0+ZWF4ID0gMDsgXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBVU0VfRUxGX0NPUkVfRFVNUAorI2RlZmluZSBFTEZfRVhFQ19QQUdFU0laRQk0MDk2CisKKy8qIFRoaXMgaXMgdGhlIGxvY2F0aW9uIHRoYXQgYW4gRVRfRFlOIHByb2dyYW0gaXMgbG9hZGVkIGlmIGV4ZWMnZWQuICBUeXBpY2FsCisgICB1c2Ugb2YgdGhpcyBpcyB0byBpbnZva2UgIi4vbGQuc28gc29tZXByb2ciIHRvIHRlc3Qgb3V0IGEgbmV3IHZlcnNpb24gb2YKKyAgIHRoZSBsb2FkZXIuICBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGl0IGlzIG91dCBvZiB0aGUgd2F5IG9mIHRoZSBwcm9ncmFtCisgICB0aGF0IGl0IHdpbGwgImV4ZWMiLCBhbmQgdGhhdCB0aGVyZSBpcyBzdWZmaWNpZW50IHJvb20gZm9yIHRoZSBicmsuICAqLworCisjZGVmaW5lIEVMRl9FVF9EWU5fQkFTRSAgICAgICAgIChUQVNLX1NJWkUgLyAzICogMikKKworLyogcmVncyBpcyBzdHJ1Y3QgcHRfcmVncywgcHJfcmVnIGlzIGVsZl9ncmVnc2V0X3QgKHdoaWNoIGlzCisgICBub3cgc3RydWN0X3VzZXJfcmVncywgdGhleSBhcmUgZGlmZmVyZW50KSAqLworCisjZGVmaW5lIEVMRl9DT1JFX0NPUFlfUkVHUyhwcl9yZWcsIHJlZ3MpCQlcCisJcHJfcmVnWzBdID0gcmVncy0+ZWJ4OwkJCQlcCisJcHJfcmVnWzFdID0gcmVncy0+ZWN4OwkJCQlcCisJcHJfcmVnWzJdID0gcmVncy0+ZWR4OwkJCQlcCisJcHJfcmVnWzNdID0gcmVncy0+ZXNpOwkJCQlcCisJcHJfcmVnWzRdID0gcmVncy0+ZWRpOwkJCQlcCisJcHJfcmVnWzVdID0gcmVncy0+ZWJwOwkJCQlcCisJcHJfcmVnWzZdID0gcmVncy0+ZWF4OwkJCQlcCisJcHJfcmVnWzddID0gcmVncy0+eGRzOwkJCQlcCisJcHJfcmVnWzhdID0gcmVncy0+eGVzOwkJCQlcCisJc2F2ZXNlZ21lbnQoZnMscHJfcmVnWzldKTsJCQlcCisJc2F2ZXNlZ21lbnQoZ3MscHJfcmVnWzEwXSk7CQkJXAorCXByX3JlZ1sxMV0gPSByZWdzLT5vcmlnX2VheDsJCQlcCisJcHJfcmVnWzEyXSA9IHJlZ3MtPmVpcDsJCQkJXAorCXByX3JlZ1sxM10gPSByZWdzLT54Y3M7CQkJCVwKKwlwcl9yZWdbMTRdID0gcmVncy0+ZWZsYWdzOwkJCVwKKwlwcl9yZWdbMTVdID0gcmVncy0+ZXNwOwkJCQlcCisJcHJfcmVnWzE2XSA9IHJlZ3MtPnhzczsKKworLyogVGhpcyB5aWVsZHMgYSBtYXNrIHRoYXQgdXNlciBwcm9ncmFtcyBjYW4gdXNlIHRvIGZpZ3VyZSBvdXQgd2hhdAorICAgaW5zdHJ1Y3Rpb24gc2V0IHRoaXMgQ1BVIHN1cHBvcnRzLiAgVGhpcyBjb3VsZCBiZSBkb25lIGluIHVzZXIgc3BhY2UsCisgICBidXQgaXQncyBub3QgZWFzeSwgYW5kIHdlJ3ZlIGFscmVhZHkgZG9uZSBpdCBoZXJlLiAgKi8KKworI2RlZmluZSBFTEZfSFdDQVAJKGJvb3RfY3B1X2RhdGEueDg2X2NhcGFiaWxpdHlbMF0pCisKKy8qIFRoaXMgeWllbGRzIGEgc3RyaW5nIHRoYXQgbGQuc28gd2lsbCB1c2UgdG8gbG9hZCBpbXBsZW1lbnRhdGlvbgorICAgc3BlY2lmaWMgbGlicmFyaWVzIGZvciBvcHRpbWl6YXRpb24uICBUaGlzIGlzIG1vcmUgc3BlY2lmaWMgaW4KKyAgIGludGVudCB0aGFuIHBva2luZyBhdCB1bmFtZSBvciAvcHJvYy9jcHVpbmZvLgorCisgICBGb3IgdGhlIG1vbWVudCwgd2UgaGF2ZSBvbmx5IG9wdGltaXphdGlvbnMgZm9yIHRoZSBJbnRlbCBnZW5lcmF0aW9ucywKKyAgIGJ1dCB0aGF0IGNvdWxkIGNoYW5nZS4uLiAqLworCisjZGVmaW5lIEVMRl9QTEFURk9STSAgKHN5c3RlbV91dHNuYW1lLm1hY2hpbmUpCisKKy8qCisgKiBBcmNoaXRlY3R1cmUtbmV1dHJhbCBBVF8gdmFsdWVzIGluIDAtMTcsIGxlYXZlIHNvbWUgcm9vbQorICogZm9yIG1vcmUgb2YgdGhlbSwgc3RhcnQgdGhlIHg4Ni1zcGVjaWZpYyBvbmVzIGF0IDMyLgorICovCisjZGVmaW5lIEFUX1NZU0lORk8JCTMyCisjZGVmaW5lIEFUX1NZU0lORk9fRUhEUgkJMzMKKworI2lmZGVmIF9fS0VSTkVMX18KKyNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4LCBpYmNzMikgZG8geyB9IHdoaWxlICgwKQorCisvKgorICogQW4gZXhlY3V0YWJsZSBmb3Igd2hpY2ggZWxmX3JlYWRfaW1wbGllc19leGVjKCkgcmV0dXJucyBUUlVFIHdpbGwKKyAqIGhhdmUgdGhlIFJFQURfSU1QTElFU19FWEVDIHBlcnNvbmFsaXR5IGZsYWcgc2V0IGF1dG9tYXRpY2FsbHkuCisgKi8KKyNkZWZpbmUgZWxmX3JlYWRfaW1wbGllc19leGVjKGV4LCBleGVjdXRhYmxlX3N0YWNrKQkoZXhlY3V0YWJsZV9zdGFjayAhPSBFWFNUQUNLX0RJU0FCTEVfWCkKKworZXh0ZXJuIGludCBkdW1wX3Rhc2tfcmVncyAoc3RydWN0IHRhc2tfc3RydWN0ICosIGVsZl9ncmVnc2V0X3QgKik7CitleHRlcm4gaW50IGR1bXBfdGFza19mcHUgKHN0cnVjdCB0YXNrX3N0cnVjdCAqLCBlbGZfZnByZWdzZXRfdCAqKTsKK2V4dGVybiBpbnQgZHVtcF90YXNrX2V4dGVuZGVkX2ZwdSAoc3RydWN0IHRhc2tfc3RydWN0ICosIHN0cnVjdCB1c2VyX2Z4c3Jfc3RydWN0ICopOworCisjZGVmaW5lIEVMRl9DT1JFX0NPUFlfVEFTS19SRUdTKHRzaywgZWxmX3JlZ3MpIGR1bXBfdGFza19yZWdzKHRzaywgZWxmX3JlZ3MpCisjZGVmaW5lIEVMRl9DT1JFX0NPUFlfRlBSRUdTKHRzaywgZWxmX2ZwcmVncykgZHVtcF90YXNrX2ZwdSh0c2ssIGVsZl9mcHJlZ3MpCisjZGVmaW5lIEVMRl9DT1JFX0NPUFlfWEZQUkVHUyh0c2ssIGVsZl94ZnByZWdzKSBkdW1wX3Rhc2tfZXh0ZW5kZWRfZnB1KHRzaywgZWxmX3hmcHJlZ3MpCisKKyNkZWZpbmUgVlNZU0NBTExfQkFTRQkoX19maXhfdG9fdmlydChGSVhfVlNZU0NBTEwpKQorI2RlZmluZSBWU1lTQ0FMTF9FSERSCSgoY29uc3Qgc3RydWN0IGVsZmhkciAqKSBWU1lTQ0FMTF9CQVNFKQorI2RlZmluZSBWU1lTQ0FMTF9FTlRSWQkoKHVuc2lnbmVkIGxvbmcpICZfX2tlcm5lbF92c3lzY2FsbCkKK2V4dGVybiB2b2lkIF9fa2VybmVsX3ZzeXNjYWxsOworCisjZGVmaW5lIEFSQ0hfRExJTkZPCQkJCQkJXAorZG8gewkJCQkJCQkJXAorCQlORVdfQVVYX0VOVChBVF9TWVNJTkZPLAlWU1lTQ0FMTF9FTlRSWSk7CVwKKwkJTkVXX0FVWF9FTlQoQVRfU1lTSU5GT19FSERSLCBWU1lTQ0FMTF9CQVNFKTsJXAorfSB3aGlsZSAoMCkKKworLyoKKyAqIFRoZXNlIG1hY3JvcyBwYXJhbWV0ZXJpemUgZWxmX2NvcmVfZHVtcCBpbiBmcy9iaW5mbXRfZWxmLmMgdG8gd3JpdGUgb3V0CisgKiBleHRyYSBzZWdtZW50cyBjb250YWluaW5nIHRoZSB2c3lzY2FsbCBEU08gY29udGVudHMuICBEdW1waW5nIGl0cworICogY29udGVudHMgbWFrZXMgcG9zdC1tb3J0ZW0gZnVsbHkgaW50ZXJwcmV0YWJsZSBsYXRlciB3aXRob3V0IG1hdGNoaW5nIHVwCisgKiB0aGUgc2FtZSBrZXJuZWwgYW5kIGhhcmR3YXJlIGNvbmZpZyB0byBzZWUgd2hhdCBQQyB2YWx1ZXMgbWVhbnQuCisgKiBEdW1waW5nIGl0cyBleHRyYSBFTEYgcHJvZ3JhbSBoZWFkZXJzIGluY2x1ZGVzIGFsbCB0aGUgb3RoZXIgaW5mb3JtYXRpb24KKyAqIGEgZGVidWdnZXIgbmVlZHMgdG8gZWFzaWx5IGZpbmQgaG93IHRoZSB2c3lzY2FsbCBEU08gd2FzIGJlaW5nIHVzZWQuCisgKi8KKyNkZWZpbmUgRUxGX0NPUkVfRVhUUkFfUEhEUlMJCShWU1lTQ0FMTF9FSERSLT5lX3BobnVtKQorI2RlZmluZSBFTEZfQ09SRV9XUklURV9FWFRSQV9QSERSUwkJCQkJICAgICAgXAorZG8gewkJCQkJCQkJCSAgICAgIFwKKwljb25zdCBzdHJ1Y3QgZWxmX3BoZHIgKmNvbnN0IHZzeXNjYWxsX3BoZHJzID0JCQkgICAgICBcCisJCShjb25zdCBzdHJ1Y3QgZWxmX3BoZHIgKikgKFZTWVNDQUxMX0JBU0UJCSAgICAgIFwKKwkJCQkJICAgKyBWU1lTQ0FMTF9FSERSLT5lX3Bob2ZmKTsJICAgICAgXAorCWludCBpOwkJCQkJCQkJICAgICAgXAorCUVsZjMyX09mZiBvZnMgPSAwOwkJCQkJCSAgICAgIFwKKwlmb3IgKGkgPSAwOyBpIDwgVlNZU0NBTExfRUhEUi0+ZV9waG51bTsgKytpKSB7CQkJICAgICAgXAorCQlzdHJ1Y3QgZWxmX3BoZHIgcGhkciA9IHZzeXNjYWxsX3BoZHJzW2ldOwkJICAgICAgXAorCQlpZiAocGhkci5wX3R5cGUgPT0gUFRfTE9BRCkgewkJCQkgICAgICBcCisJCQlCVUdfT04ob2ZzICE9IDApOwkJCQkgICAgICBcCisJCQlvZnMgPSBwaGRyLnBfb2Zmc2V0ID0gb2Zmc2V0OwkJCSAgICAgIFwKKwkJCXBoZHIucF9tZW1zeiA9IFBBR0VfQUxJR04ocGhkci5wX21lbXN6KTsJICAgICAgXAorCQkJcGhkci5wX2ZpbGVzeiA9IHBoZHIucF9tZW1zejsJCQkgICAgICBcCisJCQlvZmZzZXQgKz0gcGhkci5wX2ZpbGVzejsJCQkgICAgICBcCisJCX0JCQkJCQkJICAgICAgXAorCQllbHNlCQkJCQkJCSAgICAgIFwKKwkJCXBoZHIucF9vZmZzZXQgKz0gb2ZzOwkJCQkgICAgICBcCisJCXBoZHIucF9wYWRkciA9IDA7IC8qIG1hdGNoIG90aGVyIGNvcmUgcGhkcnMgKi8JCSAgICAgIFwKKwkJRFVNUF9XUklURSgmcGhkciwgc2l6ZW9mKHBoZHIpKTsJCQkgICAgICBcCisJfQkJCQkJCQkJICAgICAgXAorfSB3aGlsZSAoMCkKKyNkZWZpbmUgRUxGX0NPUkVfV1JJVEVfRVhUUkFfREFUQQkJCQkJICAgICAgXAorZG8gewkJCQkJCQkJCSAgICAgIFwKKwljb25zdCBzdHJ1Y3QgZWxmX3BoZHIgKmNvbnN0IHZzeXNjYWxsX3BoZHJzID0JCQkgICAgICBcCisJCShjb25zdCBzdHJ1Y3QgZWxmX3BoZHIgKikgKFZTWVNDQUxMX0JBU0UJCSAgICAgIFwKKwkJCQkJICAgKyBWU1lTQ0FMTF9FSERSLT5lX3Bob2ZmKTsJICAgICAgXAorCWludCBpOwkJCQkJCQkJICAgICAgXAorCWZvciAoaSA9IDA7IGkgPCBWU1lTQ0FMTF9FSERSLT5lX3BobnVtOyArK2kpIHsJCQkgICAgICBcCisJCWlmICh2c3lzY2FsbF9waGRyc1tpXS5wX3R5cGUgPT0gUFRfTE9BRCkJCSAgICAgIFwKKwkJCURVTVBfV1JJVEUoKHZvaWQgKikgdnN5c2NhbGxfcGhkcnNbaV0ucF92YWRkciwJICAgICAgXAorCQkJCSAgIFBBR0VfQUxJR04odnN5c2NhbGxfcGhkcnNbaV0ucF9tZW1zeikpOyAgICBcCisJfQkJCQkJCQkJICAgICAgXAorfSB3aGlsZSAoMCkKKworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9lcnJuby5oIGIvaW5jbHVkZS9hc20taTM4Ni9lcnJuby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2OWIzNDMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2Vycm5vLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9JMzg2X0VSUk5PX0gKKyNkZWZpbmUgX0kzODZfRVJSTk9fSAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZXJybm8uaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L2ZjbnRsLmggYi9pbmNsdWRlL2FzbS1pMzg2L2ZjbnRsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTExY2RlOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvZmNudGwuaApAQCAtMCwwICsxLDg4IEBACisjaWZuZGVmIF9JMzg2X0ZDTlRMX0gKKyNkZWZpbmUgX0kzODZfRkNOVExfSAorCisvKiBvcGVuL2ZjbnRsIC0gT19TWU5DIGlzIG9ubHkgaW1wbGVtZW50ZWQgb24gYmxvY2tzIGRldmljZXMgYW5kIG9uIGZpbGVzCisgICBsb2NhdGVkIG9uIGFuIGV4dDIgZmlsZSBzeXN0ZW0gKi8KKyNkZWZpbmUgT19BQ0NNT0RFCSAgIDAwMDMKKyNkZWZpbmUgT19SRE9OTFkJICAgICAwMAorI2RlZmluZSBPX1dST05MWQkgICAgIDAxCisjZGVmaW5lIE9fUkRXUgkJICAgICAwMgorI2RlZmluZSBPX0NSRUFUCQkgICAwMTAwCS8qIG5vdCBmY250bCAqLworI2RlZmluZSBPX0VYQ0wJCSAgIDAyMDAJLyogbm90IGZjbnRsICovCisjZGVmaW5lIE9fTk9DVFRZCSAgIDA0MDAJLyogbm90IGZjbnRsICovCisjZGVmaW5lIE9fVFJVTkMJCSAgMDEwMDAJLyogbm90IGZjbnRsICovCisjZGVmaW5lIE9fQVBQRU5ECSAgMDIwMDAKKyNkZWZpbmUgT19OT05CTE9DSwkgIDA0MDAwCisjZGVmaW5lIE9fTkRFTEFZCU9fTk9OQkxPQ0sKKyNkZWZpbmUgT19TWU5DCQkgMDEwMDAwCisjZGVmaW5lIEZBU1lOQwkJIDAyMDAwMAkvKiBmY250bCwgZm9yIEJTRCBjb21wYXRpYmlsaXR5ICovCisjZGVmaW5lIE9fRElSRUNUCSAwNDAwMDAJLyogZGlyZWN0IGRpc2sgYWNjZXNzIGhpbnQgKi8KKyNkZWZpbmUgT19MQVJHRUZJTEUJMDEwMDAwMAorI2RlZmluZSBPX0RJUkVDVE9SWQkwMjAwMDAwCS8qIG11c3QgYmUgYSBkaXJlY3RvcnkgKi8KKyNkZWZpbmUgT19OT0ZPTExPVwkwNDAwMDAwIC8qIGRvbid0IGZvbGxvdyBsaW5rcyAqLworI2RlZmluZSBPX05PQVRJTUUJMDEwMDAwMDAKKworI2RlZmluZSBGX0RVUEZECQkwCS8qIGR1cCAqLworI2RlZmluZSBGX0dFVEZECQkxCS8qIGdldCBjbG9zZV9vbl9leGVjICovCisjZGVmaW5lIEZfU0VURkQJCTIJLyogc2V0L2NsZWFyIGNsb3NlX29uX2V4ZWMgKi8KKyNkZWZpbmUgRl9HRVRGTAkJMwkvKiBnZXQgZmlsZS0+Zl9mbGFncyAqLworI2RlZmluZSBGX1NFVEZMCQk0CS8qIHNldCBmaWxlLT5mX2ZsYWdzICovCisjZGVmaW5lIEZfR0VUTEsJCTUKKyNkZWZpbmUgRl9TRVRMSwkJNgorI2RlZmluZSBGX1NFVExLVwk3CisKKyNkZWZpbmUgRl9TRVRPV04JOAkvKiAgZm9yIHNvY2tldHMuICovCisjZGVmaW5lIEZfR0VUT1dOCTkJLyogIGZvciBzb2NrZXRzLiAqLworI2RlZmluZSBGX1NFVFNJRwkxMAkvKiAgZm9yIHNvY2tldHMuICovCisjZGVmaW5lIEZfR0VUU0lHCTExCS8qICBmb3Igc29ja2V0cy4gKi8KKworI2RlZmluZSBGX0dFVExLNjQJMTIJLyogIHVzaW5nICdzdHJ1Y3QgZmxvY2s2NCcgKi8KKyNkZWZpbmUgRl9TRVRMSzY0CTEzCisjZGVmaW5lIEZfU0VUTEtXNjQJMTQKKworLyogZm9yIEZfW0dFVHxTRVRdRkwgKi8KKyNkZWZpbmUgRkRfQ0xPRVhFQwkxCS8qIGFjdHVhbGx5IGFueXRoaW5nIHdpdGggbG93IGJpdCBzZXQgZ29lcyAqLworCisvKiBmb3IgcG9zaXggZmNudGwoKSBhbmQgbG9ja2YoKSAqLworI2RlZmluZSBGX1JETENLCQkwCisjZGVmaW5lIEZfV1JMQ0sJCTEKKyNkZWZpbmUgRl9VTkxDSwkJMgorCisvKiBmb3Igb2xkIGltcGxlbWVudGF0aW9uIG9mIGJzZCBmbG9jayAoKSAqLworI2RlZmluZSBGX0VYTENLCQk0CS8qIG9yIDMgKi8KKyNkZWZpbmUgRl9TSExDSwkJOAkvKiBvciA0ICovCisKKy8qIGZvciBsZWFzZXMgKi8KKyNkZWZpbmUgRl9JTlBST0dSRVNTCTE2CisKKy8qIG9wZXJhdGlvbnMgZm9yIGJzZCBmbG9jaygpLCBhbHNvIHVzZWQgYnkgdGhlIGtlcm5lbCBpbXBsZW1lbnRhdGlvbiAqLworI2RlZmluZSBMT0NLX1NICQkxCS8qIHNoYXJlZCBsb2NrICovCisjZGVmaW5lIExPQ0tfRVgJCTIJLyogZXhjbHVzaXZlIGxvY2sgKi8KKyNkZWZpbmUgTE9DS19OQgkJNAkvKiBvcidkIHdpdGggb25lIG9mIHRoZSBhYm92ZSB0byBwcmV2ZW50CisJCQkJICAgYmxvY2tpbmcgKi8KKyNkZWZpbmUgTE9DS19VTgkJOAkvKiByZW1vdmUgbG9jayAqLworCisjZGVmaW5lIExPQ0tfTUFORAkzMgkvKiBUaGlzIGlzIGEgbWFuZGF0b3J5IGZsb2NrICovCisjZGVmaW5lIExPQ0tfUkVBRAk2NAkvKiAuLi4gV2hpY2ggYWxsb3dzIGNvbmN1cnJlbnQgcmVhZCBvcGVyYXRpb25zICovCisjZGVmaW5lIExPQ0tfV1JJVEUJMTI4CS8qIC4uLiBXaGljaCBhbGxvd3MgY29uY3VycmVudCB3cml0ZSBvcGVyYXRpb25zICovCisjZGVmaW5lIExPQ0tfUlcJCTE5MgkvKiAuLi4gV2hpY2ggYWxsb3dzIGNvbmN1cnJlbnQgcmVhZCAmIHdyaXRlIG9wcyAqLworCitzdHJ1Y3QgZmxvY2sgeworCXNob3J0IGxfdHlwZTsKKwlzaG9ydCBsX3doZW5jZTsKKwlvZmZfdCBsX3N0YXJ0OworCW9mZl90IGxfbGVuOworCXBpZF90IGxfcGlkOworfTsKKworc3RydWN0IGZsb2NrNjQgeworCXNob3J0ICBsX3R5cGU7CisJc2hvcnQgIGxfd2hlbmNlOworCWxvZmZfdCBsX3N0YXJ0OworCWxvZmZfdCBsX2xlbjsKKwlwaWRfdCAgbF9waWQ7Cit9OworCisjZGVmaW5lIEZfTElOVVhfU1BFQ0lGSUNfQkFTRQkxMDI0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9maXhtYXAuaCBiL2luY2x1ZGUvYXNtLWkzODYvZml4bWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk0Y2FjOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvZml4bWFwLmgKQEAgLTAsMCArMSwxNTggQEAKKy8qCisgKiBmaXhtYXAuaDogY29tcGlsZS10aW1lIHZpcnR1YWwgbWVtb3J5IGFsbG9jYXRpb24KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggSW5nbyBNb2xuYXIKKyAqCisgKiBTdXBwb3J0IG9mIEJJR01FTSBhZGRlZCBieSBHZXJoYXJkIFdpY2hlcnQsIFNpZW1lbnMgQUcsIEp1bHkgMTk5OQorICovCisKKyNpZm5kZWYgX0FTTV9GSVhNQVBfSAorI2RlZmluZSBfQVNNX0ZJWE1BUF9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworLyogdXNlZCBieSB2bWFsbG9jLmMsIHZzeXNjYWxsLmxkcy5TLgorICoKKyAqIExlYXZlIG9uZSBlbXB0eSBwYWdlIGJldHdlZW4gdm1hbGxvYydlZCBhcmVhcyBhbmQKKyAqIHRoZSBzdGFydCBvZiB0aGUgZml4bWFwLgorICovCisjZGVmaW5lIF9fRklYQUREUl9UT1AJMHhmZmZmZjAwMAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGFzbS9hY3BpLmg+CisjaW5jbHVkZSA8YXNtL2FwaWNkZWYuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2lmZGVmIENPTkZJR19ISUdITUVNCisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorI2luY2x1ZGUgPGFzbS9rbWFwX3R5cGVzLmg+CisjZW5kaWYKKworLyoKKyAqIEhlcmUgd2UgZGVmaW5lIGFsbCB0aGUgY29tcGlsZS10aW1lICdzcGVjaWFsJyB2aXJ0dWFsCisgKiBhZGRyZXNzZXMuIFRoZSBwb2ludCBpcyB0byBoYXZlIGEgY29uc3RhbnQgYWRkcmVzcyBhdAorICogY29tcGlsZSB0aW1lLCBidXQgdG8gc2V0IHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9ubHkKKyAqIGluIHRoZSBib290IHByb2Nlc3MuIFdlIGFsbG9jYXRlIHRoZXNlIHNwZWNpYWwgYWRkcmVzc2VzCisgKiBmcm9tIHRoZSBlbmQgb2YgdmlydHVhbCBtZW1vcnkgKDB4ZmZmZmYwMDApIGJhY2t3YXJkcy4KKyAqIEFsc28gdGhpcyBsZXRzIHVzIGRvIGZhaWwtc2FmZSB2bWFsbG9jKCksIHdlCisgKiBjYW4gZ3VhcmFudGVlIHRoYXQgdGhlc2Ugc3BlY2lhbCBhZGRyZXNzZXMgYW5kCisgKiB2bWFsbG9jKCktZWQgYWRkcmVzc2VzIG5ldmVyIG92ZXJsYXAuCisgKgorICogdGhlc2UgJ2NvbXBpbGUtdGltZSBhbGxvY2F0ZWQnIG1lbW9yeSBidWZmZXJzIGFyZQorICogZml4ZWQtc2l6ZSA0ayBwYWdlcy4gKG9yIGxhcmdlciBpZiB1c2VkIHdpdGggYW4gaW5jcmVtZW50CisgKiBoaWdoZ2VyIHRoYW4gMSkgdXNlIGZpeG1hcF9zZXQoaWR4LHBoeXMpIHRvIGFzc29jaWF0ZQorICogcGh5c2ljYWwgbWVtb3J5IHdpdGggZml4bWFwIGluZGljZXMuCisgKgorICogVExCIGVudHJpZXMgb2Ygc3VjaCBidWZmZXJzIHdpbGwgbm90IGJlIGZsdXNoZWQgYWNyb3NzCisgKiB0YXNrIHN3aXRjaGVzLgorICovCitlbnVtIGZpeGVkX2FkZHJlc3NlcyB7CisJRklYX0hPTEUsCisJRklYX1ZTWVNDQUxMLAorI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQworCUZJWF9BUElDX0JBU0UsCS8qIGxvY2FsIChDUFUpIEFQSUMpIC0tIHJlcXVpcmVkIGZvciBTTVAgb3Igbm90ICovCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfWDg2X0lPX0FQSUMKKwlGSVhfSU9fQVBJQ19CQVNFXzAsCisJRklYX0lPX0FQSUNfQkFTRV9FTkQgPSBGSVhfSU9fQVBJQ19CQVNFXzAgKyBNQVhfSU9fQVBJQ1MtMSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19YODZfVklTV1NfQVBJQworCUZJWF9DT19DUFUsCS8qIENvYmFsdCB0aW1lciAqLworCUZJWF9DT19BUElDLAkvKiBDb2JhbHQgQVBJQyBSZWRpcmVjdGlvbiBUYWJsZSAqLyAKKwlGSVhfTElfUENJQSwJLyogTGl0aGl1bSBQQ0kgQnJpZGdlIEEgKi8KKwlGSVhfTElfUENJQiwJLyogTGl0aGl1bSBQQ0kgQnJpZGdlIEIgKi8KKyNlbmRpZgorI2lmZGVmIENPTkZJR19YODZfRjAwRl9CVUcKKwlGSVhfRjAwRl9JRFQsCS8qIFZpcnR1YWwgbWFwcGluZyBmb3IgSURUICovCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfWDg2X0NZQ0xPTkVfVElNRVIKKwlGSVhfQ1lDTE9ORV9USU1FUiwgLypjeWNsb25lIHRpbWVyIHJlZ2lzdGVyKi8KKyNlbmRpZiAKKyNpZmRlZiBDT05GSUdfSElHSE1FTQorCUZJWF9LTUFQX0JFR0lOLAkvKiByZXNlcnZlZCBwdGUncyBmb3IgdGVtcG9yYXJ5IGtlcm5lbCBtYXBwaW5ncyAqLworCUZJWF9LTUFQX0VORCA9IEZJWF9LTUFQX0JFR0lOKyhLTV9UWVBFX05SKk5SX0NQVVMpLTEsCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQUNQSV9CT09UCisJRklYX0FDUElfQkVHSU4sCisJRklYX0FDUElfRU5EID0gRklYX0FDUElfQkVHSU4gKyBGSVhfQUNQSV9QQUdFUyAtIDEsCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfUENJX01NQ09ORklHCisJRklYX1BDSUVfTUNGRywKKyNlbmRpZgorCV9fZW5kX29mX3Blcm1hbmVudF9maXhlZF9hZGRyZXNzZXMsCisJLyogdGVtcG9yYXJ5IGJvb3QtdGltZSBtYXBwaW5ncywgdXNlZCBiZWZvcmUgaW9yZW1hcCgpIGlzIGZ1bmN0aW9uYWwgKi8KKyNkZWZpbmUgTlJfRklYX0JUTUFQUwkxNgorCUZJWF9CVE1BUF9FTkQgPSBfX2VuZF9vZl9wZXJtYW5lbnRfZml4ZWRfYWRkcmVzc2VzLAorCUZJWF9CVE1BUF9CRUdJTiA9IEZJWF9CVE1BUF9FTkQgKyBOUl9GSVhfQlRNQVBTIC0gMSwKKwlGSVhfV1BfVEVTVCwKKwlfX2VuZF9vZl9maXhlZF9hZGRyZXNzZXMKK307CisKK2V4dGVybiB2b2lkIF9fc2V0X2ZpeG1hcCAoZW51bSBmaXhlZF9hZGRyZXNzZXMgaWR4LAorCQkJCQl1bnNpZ25lZCBsb25nIHBoeXMsIHBncHJvdF90IGZsYWdzKTsKKworI2RlZmluZSBzZXRfZml4bWFwKGlkeCwgcGh5cykgXAorCQlfX3NldF9maXhtYXAoaWR4LCBwaHlzLCBQQUdFX0tFUk5FTCkKKy8qCisgKiBTb21lIGhhcmR3YXJlIHdhbnRzIHRvIGdldCBmaXhtYXBwZWQgd2l0aG91dCBjYWNoaW5nLgorICovCisjZGVmaW5lIHNldF9maXhtYXBfbm9jYWNoZShpZHgsIHBoeXMpIFwKKwkJX19zZXRfZml4bWFwKGlkeCwgcGh5cywgUEFHRV9LRVJORUxfTk9DQUNIRSkKKworI2RlZmluZSBjbGVhcl9maXhtYXAoaWR4KSBcCisJCV9fc2V0X2ZpeG1hcChpZHgsIDAsIF9fcGdwcm90KDApKQorCisjZGVmaW5lIEZJWEFERFJfVE9QCSgodW5zaWduZWQgbG9uZylfX0ZJWEFERFJfVE9QKQorCisjZGVmaW5lIF9fRklYQUREUl9TSVpFCShfX2VuZF9vZl9wZXJtYW5lbnRfZml4ZWRfYWRkcmVzc2VzIDw8IFBBR0VfU0hJRlQpCisjZGVmaW5lIF9fRklYQUREUl9CT09UX1NJWkUJKF9fZW5kX29mX2ZpeGVkX2FkZHJlc3NlcyA8PCBQQUdFX1NISUZUKQorI2RlZmluZSBGSVhBRERSX1NUQVJUCQkoRklYQUREUl9UT1AgLSBfX0ZJWEFERFJfU0laRSkKKyNkZWZpbmUgRklYQUREUl9CT09UX1NUQVJUCShGSVhBRERSX1RPUCAtIF9fRklYQUREUl9CT09UX1NJWkUpCisKKyNkZWZpbmUgX19maXhfdG9fdmlydCh4KQkoRklYQUREUl9UT1AgLSAoKHgpIDw8IFBBR0VfU0hJRlQpKQorI2RlZmluZSBfX3ZpcnRfdG9fZml4KHgpCSgoRklYQUREUl9UT1AgLSAoKHgpJlBBR0VfTUFTSykpID4+IFBBR0VfU0hJRlQpCisKKy8qCisgKiBUaGlzIGlzIHRoZSByYW5nZSB0aGF0IGlzIHJlYWRhYmxlIGJ5IHVzZXIgbW9kZSwgYW5kIHRoaW5ncworICogYWN0aW5nIGxpa2UgdXNlciBtb2RlIHN1Y2ggYXMgZ2V0X3VzZXJfcGFnZXMuCisgKi8KKyNkZWZpbmUgRklYQUREUl9VU0VSX1NUQVJUCShfX2ZpeF90b192aXJ0KEZJWF9WU1lTQ0FMTCkpCisjZGVmaW5lIEZJWEFERFJfVVNFUl9FTkQJKEZJWEFERFJfVVNFUl9TVEFSVCArIFBBR0VfU0laRSkKKworCitleHRlcm4gdm9pZCBfX3RoaXNfZml4bWFwX2RvZXNfbm90X2V4aXN0KHZvaWQpOworCisvKgorICogJ2luZGV4IHRvIGFkZHJlc3MnIHRyYW5zbGF0aW9uLiBJZiBhbnlvbmUgdHJpZXMgdG8gdXNlIHRoZSBpZHgKKyAqIGRpcmVjdGx5IHdpdGhvdXQgdHJhbmxhdGlvbiwgd2UgY2F0Y2ggdGhlIGJ1ZyB3aXRoIGEgTlVMTC1kZWZlcmVuY2UKKyAqIGtlcm5lbCBvb3BzLiBJbGxlZ2FsIHJhbmdlcyBvZiBpbmNvbWluZyBpbmRpY2VzIGFyZSBjYXVnaHQgdG9vLgorICovCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGxvbmcgZml4X3RvX3ZpcnQoY29uc3QgdW5zaWduZWQgaW50IGlkeCkKK3sKKwkvKgorCSAqIHRoaXMgYnJhbmNoIGdldHMgY29tcGxldGVseSBlbGltaW5hdGVkIGFmdGVyIGlubGluaW5nLAorCSAqIGV4Y2VwdCB3aGVuIHNvbWVvbmUgdHJpZXMgdG8gdXNlIGZpeGFkZHIgaW5kaWNlcyBpbiBhbgorCSAqIGlsbGVnYWwgd2F5LiAoc3VjaCBhcyBtaXhpbmcgdXAgYWRkcmVzcyB0eXBlcyBvciB1c2luZworCSAqIG91dC1vZi1yYW5nZSBpbmRpY2VzKS4KKwkgKgorCSAqIElmIGl0IGRvZXNuJ3QgZ2V0IHJlbW92ZWQsIHRoZSBsaW5rZXIgd2lsbCBjb21wbGFpbgorCSAqIGxvdWRseSB3aXRoIGEgcmVhc29uYWJseSBjbGVhciBlcnJvciBtZXNzYWdlLi4KKwkgKi8KKwlpZiAoaWR4ID49IF9fZW5kX29mX2ZpeGVkX2FkZHJlc3NlcykKKwkJX190aGlzX2ZpeG1hcF9kb2VzX25vdF9leGlzdCgpOworCisgICAgICAgIHJldHVybiBfX2ZpeF90b192aXJ0KGlkeCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB2aXJ0X3RvX2ZpeChjb25zdCB1bnNpZ25lZCBsb25nIHZhZGRyKQoreworCUJVR19PTih2YWRkciA+PSBGSVhBRERSX1RPUCB8fCB2YWRkciA8IEZJWEFERFJfU1RBUlQpOworCXJldHVybiBfX3ZpcnRfdG9fZml4KHZhZGRyKTsKK30KKworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9mbG9wcHkuaCBiL2luY2x1ZGUvYXNtLWkzODYvZmxvcHB5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ3ODIyOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvZmxvcHB5LmgKQEAgLTAsMCArMSwzMTkgQEAKKy8qCisgKiBBcmNoaXRlY3R1cmUgc3BlY2lmaWMgcGFydHMgb2YgdGhlIEZsb3BweSBkcml2ZXIKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUKKyAqLworI2lmbmRlZiBfX0FTTV9JMzg2X0ZMT1BQWV9ICisjZGVmaW5lIF9fQVNNX0kzODZfRkxPUFBZX0gKKworI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKworCisvKgorICogVGhlIERNQSBjaGFubmVsIHVzZWQgYnkgdGhlIGZsb3BweSBjb250cm9sbGVyIGNhbm5vdCBhY2Nlc3MgZGF0YSBhdAorICogYWRkcmVzc2VzID49IDE2TUIKKyAqCisgKiBXZW50IGJhY2sgdG8gdGhlIDFNQiBsaW1pdCwgYXMgc29tZSBwZW9wbGUgaGFkIHByb2JsZW1zIHdpdGggdGhlIGZsb3BweQorICogZHJpdmVyIG90aGVyd2lzZS4gSXQgZG9lc24ndCBtYXR0ZXIgbXVjaCBmb3IgcGVyZm9ybWFuY2UgYW55d2F5LCBhcyBtb3N0CisgKiBmbG9wcHkgYWNjZXNzZXMgZ28gdGhyb3VnaCB0aGUgdHJhY2sgYnVmZmVyLgorICovCisjZGVmaW5lIF9DUk9TU182NEtCKGEscyx2ZG1hKSBcCisoISh2ZG1hKSAmJiAoKHVuc2lnbmVkIGxvbmcpKGEpL0tfNjQgIT0gKCh1bnNpZ25lZCBsb25nKShhKSArIChzKSAtIDEpIC8gS182NCkpCisKKyNkZWZpbmUgQ1JPU1NfNjRLQihhLHMpIF9DUk9TU182NEtCKGEscyx1c2VfdmlydHVhbF9kbWEgJiAxKQorCisKKyNkZWZpbmUgU1cgZmRfcm91dGluZVt1c2VfdmlydHVhbF9kbWEmMV0KKyNkZWZpbmUgQ1NXIGZkX3JvdXRpbmVbY2FuX3VzZV92aXJ0dWFsX2RtYSAmIDFdCisKKworI2RlZmluZSBmZF9pbmIocG9ydCkJCQlpbmJfcChwb3J0KQorI2RlZmluZSBmZF9vdXRiKHZhbHVlLHBvcnQpCQlvdXRiX3AodmFsdWUscG9ydCkKKworI2RlZmluZSBmZF9yZXF1ZXN0X2RtYSgpICAgICAgICBDU1cuX3JlcXVlc3RfZG1hKEZMT1BQWV9ETUEsImZsb3BweSIpCisjZGVmaW5lIGZkX2ZyZWVfZG1hKCkgICAgICAgICAgIENTVy5fZnJlZV9kbWEoRkxPUFBZX0RNQSkKKyNkZWZpbmUgZmRfZW5hYmxlX2lycSgpICAgICAgICAgZW5hYmxlX2lycShGTE9QUFlfSVJRKQorI2RlZmluZSBmZF9kaXNhYmxlX2lycSgpICAgICAgICBkaXNhYmxlX2lycShGTE9QUFlfSVJRKQorI2RlZmluZSBmZF9mcmVlX2lycSgpCQlmcmVlX2lycShGTE9QUFlfSVJRLCBOVUxMKQorI2RlZmluZSBmZF9nZXRfZG1hX3Jlc2lkdWUoKSAgICBTVy5fZ2V0X2RtYV9yZXNpZHVlKEZMT1BQWV9ETUEpCisjZGVmaW5lIGZkX2RtYV9tZW1fYWxsb2Moc2l6ZSkJU1cuX2RtYV9tZW1fYWxsb2Moc2l6ZSkKKyNkZWZpbmUgZmRfZG1hX3NldHVwKGFkZHIsIHNpemUsIG1vZGUsIGlvKSBTVy5fZG1hX3NldHVwKGFkZHIsIHNpemUsIG1vZGUsIGlvKQorCisjZGVmaW5lIEZMT1BQWV9DQU5fRkFMTEJBQ0tfT05fTk9ETUEKKworc3RhdGljIGludCB2aXJ0dWFsX2RtYV9jb3VudDsKK3N0YXRpYyBpbnQgdmlydHVhbF9kbWFfcmVzaWR1ZTsKK3N0YXRpYyBjaGFyICp2aXJ0dWFsX2RtYV9hZGRyOworc3RhdGljIGludCB2aXJ0dWFsX2RtYV9tb2RlOworc3RhdGljIGludCBkb2luZ19wZG1hOworCitzdGF0aWMgaXJxcmV0dXJuX3QgZmxvcHB5X2hhcmRpbnQoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MpCit7CisJcmVnaXN0ZXIgdW5zaWduZWQgY2hhciBzdDsKKworI3VuZGVmIFRSQUNFX0ZMUFlfSU5UCisjZGVmaW5lIE5PX0ZMT1BQWV9BU1NFTUJMRVIKKworI2lmZGVmIFRSQUNFX0ZMUFlfSU5UCisJc3RhdGljIGludCBjYWxscz0wOworCXN0YXRpYyBpbnQgYnl0ZXM9MDsKKwlzdGF0aWMgaW50IGRtYV93YWl0PTA7CisjZW5kaWYKKwlpZiAoIWRvaW5nX3BkbWEpCisJCXJldHVybiBmbG9wcHlfaW50ZXJydXB0KGlycSwgZGV2X2lkLCByZWdzKTsKKworI2lmZGVmIFRSQUNFX0ZMUFlfSU5UCisJaWYoIWNhbGxzKQorCQlieXRlcyA9IHZpcnR1YWxfZG1hX2NvdW50OworI2VuZGlmCisKKyNpZm5kZWYgTk9fRkxPUFBZX0FTU0VNQkxFUgorCV9fYXNtX18gKAorICAgICAgICJ0ZXN0bCAlMSwlMSIKKwkiamUgM2YiCisiMToJaW5iICV3NCwlYjAiCisJImFuZGIgJDE2MCwlYjAiCisJImNtcGIgJDE2MCwlYjAiCisJImpuZSAyZiIKKwkiaW5jdyAldzQiCisJInRlc3RsICUzLCUzIgorCSJqbmUgNGYiCisJImluYiAldzQsJWIwIgorCSJtb3ZiICUwLCglMikiCisJImptcCA1ZiIKKyI0OiAgICAJbW92YiAoJTIpLCUwIgorCSJvdXRiICViMCwldzQiCisiNToJZGVjdyAldzQiCisJIm91dGIgJTAsJDB4ODAiCisJImRlY2wgJTEiCisJImluY2wgJTIiCisJInRlc3RsICUxLCUxIgorCSJqbmUgMWIiCisiMzoJaW5iICV3NCwlYjAiCisiMjoJIgorICAgICAgIDogIj1hIiAoKGNoYXIpIHN0KSwgCisgICAgICAgIj1jIiAoKGxvbmcpIHZpcnR1YWxfZG1hX2NvdW50KSwgCisgICAgICAgIj1TIiAoKGxvbmcpIHZpcnR1YWxfZG1hX2FkZHIpCisgICAgICAgOiAiYiIgKChsb25nKSB2aXJ0dWFsX2RtYV9tb2RlKSwKKyAgICAgICAiZCIgKChzaG9ydCkgdmlydHVhbF9kbWFfcG9ydCs0KSwgCisgICAgICAgIjEiICgobG9uZykgdmlydHVhbF9kbWFfY291bnQpLAorICAgICAgICIyIiAoKGxvbmcpIHZpcnR1YWxfZG1hX2FkZHIpKTsKKyNlbHNlCQorCXsKKwkJcmVnaXN0ZXIgaW50IGxjb3VudDsKKwkJcmVnaXN0ZXIgY2hhciAqbHB0cjsKKworCQlzdCA9IDE7CisJCWZvcihsY291bnQ9dmlydHVhbF9kbWFfY291bnQsIGxwdHI9dmlydHVhbF9kbWFfYWRkcjsgCisJCSAgICBsY291bnQ7IGxjb3VudC0tLCBscHRyKyspIHsKKwkJCXN0PWluYih2aXJ0dWFsX2RtYV9wb3J0KzQpICYgMHhhMCA7CisJCQlpZihzdCAhPSAweGEwKSAKKwkJCQlicmVhazsKKwkJCWlmKHZpcnR1YWxfZG1hX21vZGUpCisJCQkJb3V0Yl9wKCpscHRyLCB2aXJ0dWFsX2RtYV9wb3J0KzUpOworCQkJZWxzZQorCQkJCSpscHRyID0gaW5iX3AodmlydHVhbF9kbWFfcG9ydCs1KTsKKwkJfQorCQl2aXJ0dWFsX2RtYV9jb3VudCA9IGxjb3VudDsKKwkJdmlydHVhbF9kbWFfYWRkciA9IGxwdHI7CisJCXN0ID0gaW5iKHZpcnR1YWxfZG1hX3BvcnQrNCk7CisJfQorI2VuZGlmCisKKyNpZmRlZiBUUkFDRV9GTFBZX0lOVAorCWNhbGxzKys7CisjZW5kaWYKKwlpZihzdCA9PSAweDIwKQorCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJaWYoIShzdCAmIDB4MjApKSB7CisJCXZpcnR1YWxfZG1hX3Jlc2lkdWUgKz0gdmlydHVhbF9kbWFfY291bnQ7CisJCXZpcnR1YWxfZG1hX2NvdW50PTA7CisjaWZkZWYgVFJBQ0VfRkxQWV9JTlQKKwkJcHJpbnRrKCJjb3VudD0leCwgcmVzaWR1ZT0leCBjYWxscz0lZCBieXRlcz0lZCBkbWFfd2FpdD0lZFxuIiwgCisJCSAgICAgICB2aXJ0dWFsX2RtYV9jb3VudCwgdmlydHVhbF9kbWFfcmVzaWR1ZSwgY2FsbHMsIGJ5dGVzLAorCQkgICAgICAgZG1hX3dhaXQpOworCQljYWxscyA9IDA7CisJCWRtYV93YWl0PTA7CisjZW5kaWYKKwkJZG9pbmdfcGRtYSA9IDA7CisJCWZsb3BweV9pbnRlcnJ1cHQoaXJxLCBkZXZfaWQsIHJlZ3MpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorI2lmZGVmIFRSQUNFX0ZMUFlfSU5UCisJaWYoIXZpcnR1YWxfZG1hX2NvdW50KQorCQlkbWFfd2FpdCsrOworI2VuZGlmCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCBmZF9kaXNhYmxlX2RtYSh2b2lkKQoreworCWlmKCEgKGNhbl91c2VfdmlydHVhbF9kbWEgJiAxKSkKKwkJZGlzYWJsZV9kbWEoRkxPUFBZX0RNQSk7CisJZG9pbmdfcGRtYSA9IDA7CisJdmlydHVhbF9kbWFfcmVzaWR1ZSArPSB2aXJ0dWFsX2RtYV9jb3VudDsKKwl2aXJ0dWFsX2RtYV9jb3VudD0wOworfQorCitzdGF0aWMgaW50IHZkbWFfcmVxdWVzdF9kbWEodW5zaWduZWQgaW50IGRtYW5yLCBjb25zdCBjaGFyICogZGV2aWNlX2lkKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB2ZG1hX25vcCh1bnNpZ25lZCBpbnQgZHVtbXkpCit7Cit9CisKKworc3RhdGljIGludCB2ZG1hX2dldF9kbWFfcmVzaWR1ZSh1bnNpZ25lZCBpbnQgZHVtbXkpCit7CisJcmV0dXJuIHZpcnR1YWxfZG1hX2NvdW50ICsgdmlydHVhbF9kbWFfcmVzaWR1ZTsKK30KKworCitzdGF0aWMgaW50IGZkX3JlcXVlc3RfaXJxKHZvaWQpCit7CisJaWYoY2FuX3VzZV92aXJ0dWFsX2RtYSkKKwkJcmV0dXJuIHJlcXVlc3RfaXJxKEZMT1BQWV9JUlEsIGZsb3BweV9oYXJkaW50LFNBX0lOVEVSUlVQVCwKKwkJCQkJCSAgICJmbG9wcHkiLCBOVUxMKTsKKwllbHNlCisJCXJldHVybiByZXF1ZXN0X2lycShGTE9QUFlfSVJRLCBmbG9wcHlfaW50ZXJydXB0LAorCQkJCQkJICAgU0FfSU5URVJSVVBUfFNBX1NBTVBMRV9SQU5ET00sCisJCQkJCQkgICAiZmxvcHB5IiwgTlVMTCk7CQorCit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGRtYV9tZW1fYWxsb2ModW5zaWduZWQgbG9uZyBzaXplKQoreworCXJldHVybiBfX2dldF9kbWFfcGFnZXMoR0ZQX0tFUk5FTCxnZXRfb3JkZXIoc2l6ZSkpOworfQorCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHZkbWFfbWVtX2FsbG9jKHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpIHZtYWxsb2Moc2l6ZSk7CisKK30KKworI2RlZmluZSBub2RtYV9tZW1fYWxsb2Moc2l6ZSkgdmRtYV9tZW1fYWxsb2Moc2l6ZSkKKworc3RhdGljIHZvaWQgX2ZkX2RtYV9tZW1fZnJlZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlpZigodW5zaWduZWQgaW50KSBhZGRyID49ICh1bnNpZ25lZCBpbnQpIGhpZ2hfbWVtb3J5KQorCQl2ZnJlZSgodm9pZCAqKWFkZHIpOworCWVsc2UKKwkJZnJlZV9wYWdlcyhhZGRyLCBnZXRfb3JkZXIoc2l6ZSkpOwkJCit9CisKKyNkZWZpbmUgZmRfZG1hX21lbV9mcmVlKGFkZHIsIHNpemUpICBfZmRfZG1hX21lbV9mcmVlKGFkZHIsIHNpemUpIAorCitzdGF0aWMgdm9pZCBfZmRfY2hvc2VfZG1hX21vZGUoY2hhciAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCWlmKGNhbl91c2VfdmlydHVhbF9kbWEgPT0gMikgeworCQlpZigodW5zaWduZWQgaW50KSBhZGRyID49ICh1bnNpZ25lZCBpbnQpIGhpZ2hfbWVtb3J5IHx8CisJCSAgIGlzYV92aXJ0X3RvX2J1cyhhZGRyKSA+PSAweDEwMDAwMDAgfHwKKwkJICAgX0NST1NTXzY0S0IoYWRkciwgc2l6ZSwgMCkpCisJCQl1c2VfdmlydHVhbF9kbWEgPSAxOworCQllbHNlCisJCQl1c2VfdmlydHVhbF9kbWEgPSAwOworCX0gZWxzZSB7CisJCXVzZV92aXJ0dWFsX2RtYSA9IGNhbl91c2VfdmlydHVhbF9kbWEgJiAxOworCX0KK30KKworI2RlZmluZSBmZF9jaG9zZV9kbWFfbW9kZShhZGRyLCBzaXplKSBfZmRfY2hvc2VfZG1hX21vZGUoYWRkciwgc2l6ZSkKKworCitzdGF0aWMgaW50IHZkbWFfZG1hX3NldHVwKGNoYXIgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IG1vZGUsIGludCBpbykKK3sKKwlkb2luZ19wZG1hID0gMTsKKwl2aXJ0dWFsX2RtYV9wb3J0ID0gaW87CisJdmlydHVhbF9kbWFfbW9kZSA9IChtb2RlICA9PSBETUFfTU9ERV9XUklURSk7CisJdmlydHVhbF9kbWFfYWRkciA9IGFkZHI7CisJdmlydHVhbF9kbWFfY291bnQgPSBzaXplOworCXZpcnR1YWxfZG1hX3Jlc2lkdWUgPSAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhhcmRfZG1hX3NldHVwKGNoYXIgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IG1vZGUsIGludCBpbykKK3sKKyNpZmRlZiBGTE9QUFlfU0FOSVRZX0NIRUNLCisJaWYgKENST1NTXzY0S0IoYWRkciwgc2l6ZSkpIHsKKwkJcHJpbnRrKCJETUEgY3Jvc3NpbmcgNjQtSyBib3VuZGFyeSAlcC0lcFxuIiwgYWRkciwgYWRkcitzaXplKTsKKwkJcmV0dXJuIC0xOworCX0KKyNlbmRpZgorCS8qIGFjdHVhbCwgcGh5c2ljYWwgRE1BICovCisJZG9pbmdfcGRtYSA9IDA7CisJY2xlYXJfZG1hX2ZmKEZMT1BQWV9ETUEpOworCXNldF9kbWFfbW9kZShGTE9QUFlfRE1BLG1vZGUpOworCXNldF9kbWFfYWRkcihGTE9QUFlfRE1BLGlzYV92aXJ0X3RvX2J1cyhhZGRyKSk7CisJc2V0X2RtYV9jb3VudChGTE9QUFlfRE1BLHNpemUpOworCWVuYWJsZV9kbWEoRkxPUFBZX0RNQSk7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBmZF9yb3V0aW5lX2wgeworCWludCAoKl9yZXF1ZXN0X2RtYSkodW5zaWduZWQgaW50IGRtYW5yLCBjb25zdCBjaGFyICogZGV2aWNlX2lkKTsKKwl2b2lkICgqX2ZyZWVfZG1hKSh1bnNpZ25lZCBpbnQgZG1hbnIpOworCWludCAoKl9nZXRfZG1hX3Jlc2lkdWUpKHVuc2lnbmVkIGludCBkdW1teSk7CisJdW5zaWduZWQgbG9uZyAoKl9kbWFfbWVtX2FsbG9jKSAodW5zaWduZWQgbG9uZyBzaXplKTsKKwlpbnQgKCpfZG1hX3NldHVwKShjaGFyICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIGludCBtb2RlLCBpbnQgaW8pOworfSBmZF9yb3V0aW5lW10gPSB7CisJeworCQlyZXF1ZXN0X2RtYSwKKwkJZnJlZV9kbWEsCisJCWdldF9kbWFfcmVzaWR1ZSwKKwkJZG1hX21lbV9hbGxvYywKKwkJaGFyZF9kbWFfc2V0dXAKKwl9LAorCXsKKwkJdmRtYV9yZXF1ZXN0X2RtYSwKKwkJdmRtYV9ub3AsCisJCXZkbWFfZ2V0X2RtYV9yZXNpZHVlLAorCQl2ZG1hX21lbV9hbGxvYywKKwkJdmRtYV9kbWFfc2V0dXAKKwl9Cit9OworCisKK3N0YXRpYyBpbnQgRkRDMSA9IDB4M2YwOworc3RhdGljIGludCBGREMyID0gLTE7CisKKy8qCisgKiBGbG9wcHkgdHlwZXMgYXJlIHN0b3JlZCBpbiB0aGUgcnRjJ3MgQ01PUyBSQU0gYW5kIHNvIHJ0Y19sb2NrCisgKiBpcyBuZWVkZWQgdG8gcHJldmVudCBjb3JydXB0ZWQgQ01PUyBSQU0gaW4gY2FzZSAiaW5zbW9kIGZsb3BweSIKKyAqIGNvaW5jaWRlcyB3aXRoIGFub3RoZXIgcnRjIENNT1MgdXNlci4JCVBhdWwgRy4KKyAqLworI2RlZmluZSBGTE9QUFkwX1RZUEUJKHsJCQkJXAorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CQkJCVwKKwl1bnNpZ25lZCBjaGFyIHZhbDsJCQkJXAorCXNwaW5fbG9ja19pcnFzYXZlKCZydGNfbG9jaywgZmxhZ3MpOwkJXAorCXZhbCA9IChDTU9TX1JFQUQoMHgxMCkgPj4gNCkgJiAxNTsJCVwKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGNfbG9jaywgZmxhZ3MpOwlcCisJdmFsOwkJCQkJCVwKK30pCisKKyNkZWZpbmUgRkxPUFBZMV9UWVBFCSh7CQkJCVwKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwkJCQlcCisJdW5zaWduZWQgY2hhciB2YWw7CQkJCVwKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcnRjX2xvY2ssIGZsYWdzKTsJCVwKKwl2YWwgPSBDTU9TX1JFQUQoMHgxMCkgJiAxNTsJCQlcCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnRjX2xvY2ssIGZsYWdzKTsJXAorCXZhbDsJCQkJCQlcCit9KQorCisjZGVmaW5lIE5fRkRDIDIKKyNkZWZpbmUgTl9EUklWRSA4CisKKyNkZWZpbmUgRkxPUFBZX01PVE9SX01BU0sgMHhmMAorCisjZGVmaW5lIEFVVE9fRE1BCisKKyNkZWZpbmUgRVhUUkFfRkxPUFBZX1BBUkFNUworCisjZW5kaWYgLyogX19BU01fSTM4Nl9GTE9QUFlfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9nZW5hcGljLmggYi9pbmNsdWRlL2FzbS1pMzg2L2dlbmFwaWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzgxM2IyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9nZW5hcGljLmgKQEAgLTAsMCArMSwxMTUgQEAKKyNpZm5kZWYgX0FTTV9HRU5BUElDX0gKKyNkZWZpbmUgX0FTTV9HRU5BUElDX0ggMQorCisvKgorICogR2VuZXJpYyBBUElDIGRyaXZlciBpbnRlcmZhY2UuCisgKgorICogQW4gc3RyYWlnaHQgZm9yd2FyZCBtYXBwaW5nIG9mIHRoZSBBUElDIHJlbGF0ZWQgcGFydHMgb2YgdGhlCisgKiB4ODYgc3ViYXJjaGl0ZWN0dXJlIGludGVyZmFjZSB0byBhIGR5bmFtaWMgb2JqZWN0LgorICoKKyAqIFRoaXMgaXMgdXNlZCBieSB0aGUgImdlbmVyaWMiIHg4NiBzdWJhcmNoaXRlY3R1cmUuCisgKgorICogQ29weXJpZ2h0IDIwMDMgQW5kaSBLbGVlbiwgU3VTRSBMYWJzLgorICovCisKK3N0cnVjdCBtcGNfY29uZmlnX3RyYW5zbGF0aW9uOworc3RydWN0IG1wY19jb25maWdfYnVzOworc3RydWN0IG1wX2NvbmZpZ190YWJsZTsKK3N0cnVjdCBtcGNfY29uZmlnX3Byb2Nlc3NvcjsKKworc3RydWN0IGdlbmFwaWMgeyAKKwljaGFyICpuYW1lOyAKKwlpbnQgKCpwcm9iZSkodm9pZCk7IAorCisJaW50ICgqYXBpY19pZF9yZWdpc3RlcmVkKSh2b2lkKTsKKwljcHVtYXNrX3QgKCp0YXJnZXRfY3B1cykodm9pZCk7CisJaW50IGludF9kZWxpdmVyeV9tb2RlOworCWludCBpbnRfZGVzdF9tb2RlOyAKKwlpbnQgRVNSX0RJU0FCTEU7CisJaW50IGFwaWNfZGVzdGluYXRpb25fbG9naWNhbDsKKwl1bnNpZ25lZCBsb25nICgqY2hlY2tfYXBpY2lkX3VzZWQpKHBoeXNpZF9tYXNrX3QgYml0bWFwLCBpbnQgYXBpY2lkKTsKKwl1bnNpZ25lZCBsb25nICgqY2hlY2tfYXBpY2lkX3ByZXNlbnQpKGludCBhcGljaWQpOyAKKwlpbnQgbm9fYmFsYW5jZV9pcnE7CisJaW50IG5vX2lvYXBpY19jaGVjazsKKwl2b2lkICgqaW5pdF9hcGljX2xkcikodm9pZCk7CisJcGh5c2lkX21hc2tfdCAoKmlvYXBpY19waHlzX2lkX21hcCkocGh5c2lkX21hc2tfdCBtYXApOworCisJdm9pZCAoKmNsdXN0ZXJlZF9hcGljX2NoZWNrKSh2b2lkKTsKKwlpbnQgKCptdWx0aV90aW1lcl9jaGVjaykoaW50IGFwaWMsIGludCBpcnEpOworCWludCAoKmFwaWNpZF90b19ub2RlKShpbnQgbG9naWNhbF9hcGljaWQpOyAKKwlpbnQgKCpjcHVfdG9fbG9naWNhbF9hcGljaWQpKGludCBjcHUpOworCWludCAoKmNwdV9wcmVzZW50X3RvX2FwaWNpZCkoaW50IG1wc19jcHUpOworCXBoeXNpZF9tYXNrX3QgKCphcGljaWRfdG9fY3B1X3ByZXNlbnQpKGludCBwaHlzX2FwaWNpZCk7CisJaW50ICgqbXBjX2FwaWNfaWQpKHN0cnVjdCBtcGNfY29uZmlnX3Byb2Nlc3NvciAqbSwgCisJCQkgICBzdHJ1Y3QgbXBjX2NvbmZpZ190cmFuc2xhdGlvbiAqdCk7IAorCXZvaWQgKCpzZXR1cF9wb3J0aW9fcmVtYXApKHZvaWQpOyAKKwlpbnQgKCpjaGVja19waHlzX2FwaWNpZF9wcmVzZW50KShpbnQgYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkKTsKKwl2b2lkICgqZW5hYmxlX2FwaWNfbW9kZSkodm9pZCk7CisJdTMyICgqcGh5c19wa2dfaWQpKHUzMiBjcHVpZF9hcGljLCBpbnQgaW5kZXhfbXNiKTsKKworCS8qIG1wcGFyc2UgKi8KKwl2b2lkICgqbXBjX29lbV9idXNfaW5mbykoc3RydWN0IG1wY19jb25maWdfYnVzICosIGNoYXIgKiwgCisJCQkJIHN0cnVjdCBtcGNfY29uZmlnX3RyYW5zbGF0aW9uICopOworCXZvaWQgKCptcGNfb2VtX3BjaV9idXMpKHN0cnVjdCBtcGNfY29uZmlnX2J1cyAqLCAKKwkJCQlzdHJ1Y3QgbXBjX2NvbmZpZ190cmFuc2xhdGlvbiAqKTsgCisKKwkvKiBXaGVuIG9uZSBvZiB0aGUgbmV4dCB0d28gaG9va3MgcmV0dXJucyAxIHRoZSBnZW5hcGljCisJICAgaXMgc3dpdGNoZWQgdG8gdGhpcy4gRXNzZW50aWFsbHkgdGhleSBhcmUgYWRkaXRpb25hbCBwcm9iZSAKKwkgICBmdW5jdGlvbnMuICovCisJaW50ICgqbXBzX29lbV9jaGVjaykoc3RydWN0IG1wX2NvbmZpZ190YWJsZSAqbXBjLCBjaGFyICpvZW0sIAorCQkJICAgICAgY2hhciAqcHJvZHVjdGlkKTsKKwlpbnQgKCphY3BpX21hZHRfb2VtX2NoZWNrKShjaGFyICpvZW1faWQsIGNoYXIgKm9lbV90YWJsZV9pZCk7CisKKwl1bnNpZ25lZCAoKmdldF9hcGljX2lkKSh1bnNpZ25lZCBsb25nIHgpOworCXVuc2lnbmVkIGxvbmcgYXBpY19pZF9tYXNrOworCXVuc2lnbmVkIGludCAoKmNwdV9tYXNrX3RvX2FwaWNpZCkoY3B1bWFza190IGNwdW1hc2spOworCQorCS8qIGlwaSAqLworCXZvaWQgKCpzZW5kX0lQSV9tYXNrKShjcHVtYXNrX3QgbWFzaywgaW50IHZlY3Rvcik7CisJdm9pZCAoKnNlbmRfSVBJX2FsbGJ1dHNlbGYpKGludCB2ZWN0b3IpOworCXZvaWQgKCpzZW5kX0lQSV9hbGwpKGludCB2ZWN0b3IpOworfTsgCisKKyNkZWZpbmUgQVBJQ0ZVTkMoeCkgLnggPSB4CisKKyNkZWZpbmUgQVBJQ19JTklUKGFuYW1lLCBhcHJvYmUpIHsgXAorCS5uYW1lID0gYW5hbWUsIFwKKwkucHJvYmUgPSBhcHJvYmUsIFwKKwkuaW50X2RlbGl2ZXJ5X21vZGUgPSBJTlRfREVMSVZFUllfTU9ERSwgXAorCS5pbnRfZGVzdF9tb2RlID0gSU5UX0RFU1RfTU9ERSwgXAorCS5ub19iYWxhbmNlX2lycSA9IE5PX0JBTEFOQ0VfSVJRLCBcCisJLm5vX2lvYXBpY19jaGVjayA9IE5PX0lPQVBJQ19DSEVDSywgXAorCS5FU1JfRElTQUJMRSA9IGVzcl9kaXNhYmxlLCBcCisJLmFwaWNfZGVzdGluYXRpb25fbG9naWNhbCA9IEFQSUNfREVTVF9MT0dJQ0FMLCBcCisJQVBJQ0ZVTkMoYXBpY19pZF9yZWdpc3RlcmVkKSwgXAorCUFQSUNGVU5DKHRhcmdldF9jcHVzKSwgXAorCUFQSUNGVU5DKGNoZWNrX2FwaWNpZF91c2VkKSwgXAorCUFQSUNGVU5DKGNoZWNrX2FwaWNpZF9wcmVzZW50KSwgXAorCUFQSUNGVU5DKGluaXRfYXBpY19sZHIpLCBcCisJQVBJQ0ZVTkMoaW9hcGljX3BoeXNfaWRfbWFwKSwgXAorCUFQSUNGVU5DKGNsdXN0ZXJlZF9hcGljX2NoZWNrKSwgXAorCUFQSUNGVU5DKG11bHRpX3RpbWVyX2NoZWNrKSwgXAorCUFQSUNGVU5DKGFwaWNpZF90b19ub2RlKSwgXAorCUFQSUNGVU5DKGNwdV90b19sb2dpY2FsX2FwaWNpZCksIFwKKwlBUElDRlVOQyhjcHVfcHJlc2VudF90b19hcGljaWQpLCBcCisJQVBJQ0ZVTkMoYXBpY2lkX3RvX2NwdV9wcmVzZW50KSwgXAorCUFQSUNGVU5DKG1wY19hcGljX2lkKSwgXAorCUFQSUNGVU5DKHNldHVwX3BvcnRpb19yZW1hcCksIFwKKwlBUElDRlVOQyhjaGVja19waHlzX2FwaWNpZF9wcmVzZW50KSwgXAorCUFQSUNGVU5DKG1wY19vZW1fYnVzX2luZm8pLCBcCisJQVBJQ0ZVTkMobXBjX29lbV9wY2lfYnVzKSwgXAorCUFQSUNGVU5DKG1wc19vZW1fY2hlY2spLCBcCisJQVBJQ0ZVTkMoZ2V0X2FwaWNfaWQpLCBcCisJLmFwaWNfaWRfbWFzayA9IEFQSUNfSURfTUFTSywgXAorCUFQSUNGVU5DKGNwdV9tYXNrX3RvX2FwaWNpZCksIFwKKwlBUElDRlVOQyhhY3BpX21hZHRfb2VtX2NoZWNrKSwgXAorCUFQSUNGVU5DKHNlbmRfSVBJX21hc2spLCBcCisJQVBJQ0ZVTkMoc2VuZF9JUElfYWxsYnV0c2VsZiksIFwKKwlBUElDRlVOQyhzZW5kX0lQSV9hbGwpLCBcCisJQVBJQ0ZVTkMoZW5hYmxlX2FwaWNfbW9kZSksIFwKKwlBUElDRlVOQyhwaHlzX3BrZ19pZCksIFwKKwl9CisKK2V4dGVybiBzdHJ1Y3QgZ2VuYXBpYyAqZ2VuYXBpYzsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L2hhcmRpcnEuaCBiL2luY2x1ZGUvYXNtLWkzODYvaGFyZGlycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlNzU0ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2hhcmRpcnEuaApAQCAtMCwwICsxLDI0IEBACisjaWZuZGVmIF9fQVNNX0hBUkRJUlFfSAorI2RlZmluZSBfX0FTTV9IQVJESVJRX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludCBfX3NvZnRpcnFfcGVuZGluZzsKKwl1bnNpZ25lZCBsb25nIGlkbGVfdGltZXN0YW1wOworCXVuc2lnbmVkIGludCBfX25taV9jb3VudDsJLyogYXJjaCBkZXBlbmRlbnQgKi8KKwl1bnNpZ25lZCBpbnQgYXBpY190aW1lcl9pcnFzOwkvKiBhcmNoIGRlcGVuZGVudCAqLworfSBfX19fY2FjaGVsaW5lX2FsaWduZWQgaXJxX2NwdXN0YXRfdDsKKworREVDTEFSRV9QRVJfQ1BVKGlycV9jcHVzdGF0X3QsIGlycV9zdGF0KTsKK2V4dGVybiBpcnFfY3B1c3RhdF90IGlycV9zdGF0W107CisKKyNkZWZpbmUgX19BUkNIX0lSUV9TVEFUCisjZGVmaW5lIF9fSVJRX1NUQVQoY3B1LCBtZW1iZXIpIChwZXJfY3B1KGlycV9zdGF0LCBjcHUpLm1lbWJlcikKKwordm9pZCBhY2tfYmFkX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKKyNpbmNsdWRlIDxsaW51eC9pcnFfY3B1c3RhdC5oPgorCisjZW5kaWYgLyogX19BU01fSEFSRElSUV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L2hkcmVnLmggYi9pbmNsdWRlL2FzbS1pMzg2L2hkcmVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk4OWJiYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvaGRyZWcuaApAQCAtMCwwICsxIEBACisjd2FybmluZyB0aGlzIGZpbGUgaXMgb2Jzb2xldGUsIHBsZWFzZSBkbyBub3QgdXNlIGl0CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L2hpZ2htZW0uaCBiL2luY2x1ZGUvYXNtLWkzODYvaGlnaG1lbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkZjQyYmYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2hpZ2htZW0uaApAQCAtMCwwICsxLDc5IEBACisvKgorICogaGlnaG1lbS5oOiB2aXJ0dWFsIGtlcm5lbCBtZW1vcnkgbWFwcGluZ3MgZm9yIGhpZ2ggbWVtb3J5CisgKgorICogVXNlZCBpbiBDT05GSUdfSElHSE1FTSBzeXN0ZW1zIGZvciBtZW1vcnkgcGFnZXMgd2hpY2gKKyAqIGFyZSBub3QgYWRkcmVzc2FibGUgYnkgZGlyZWN0IGtlcm5lbCB2aXJ0dWFsIGFkZHJlc3Nlcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgR2VyaGFyZCBXaWNoZXJ0LCBTaWVtZW5zIEFHCisgKgkJICAgICAgR2VyaGFyZC5XaWNoZXJ0QHBkYi5zaWVtZW5zLmRlCisgKgorICoKKyAqIFJlZGVzaWduZWQgdGhlIHg4NiAzMi1iaXQgVk0gYXJjaGl0ZWN0dXJlIHRvIGRlYWwgd2l0aCAKKyAqIHVwIHRvIDE2IFRlcmFieXRlIHBoeXNpY2FsIG1lbW9yeS4gV2l0aCBjdXJyZW50IHg4NiBDUFVzCisgKiB3ZSBub3cgc3VwcG9ydCB1cCB0byA2NCBHaWdhYnl0ZXMgcGh5c2ljYWwgUkFNLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBJbmdvIE1vbG5hciA8bWluZ29AcmVkaGF0LmNvbT4KKyAqLworCisjaWZuZGVmIF9BU01fSElHSE1FTV9ICisjZGVmaW5lIF9BU01fSElHSE1FTV9ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisjaW5jbHVkZSA8YXNtL2ttYXBfdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KKworLyogZGVjbGFyYXRpb25zIGZvciBoaWdobWVtLmMgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIGhpZ2hzdGFydF9wZm4sIGhpZ2hlbmRfcGZuOworCitleHRlcm4gcHRlX3QgKmttYXBfcHRlOworZXh0ZXJuIHBncHJvdF90IGttYXBfcHJvdDsKK2V4dGVybiBwdGVfdCAqcGttYXBfcGFnZV90YWJsZTsKKworLyoKKyAqIFJpZ2h0IG5vdyB3ZSBpbml0aWFsaXplIG9ubHkgYSBzaW5nbGUgcHRlIHRhYmxlLiBJdCBjYW4gYmUgZXh0ZW5kZWQKKyAqIGVhc2lseSwgc3Vic2VxdWVudCBwdGUgdGFibGVzIGhhdmUgdG8gYmUgYWxsb2NhdGVkIGluIG9uZSBwaHlzaWNhbAorICogY2h1bmsgb2YgUkFNLgorICovCisjaWZkZWYgQ09ORklHX1g4Nl9QQUUKKyNkZWZpbmUgTEFTVF9QS01BUCA1MTIKKyNlbHNlCisjZGVmaW5lIExBU1RfUEtNQVAgMTAyNAorI2VuZGlmCisvKgorICogT3JkZXJpbmcgaXM6CisgKgorICogRklYQUREUl9UT1AKKyAqIAkJCWZpeGVkX2FkZHJlc3NlcworICogRklYQUREUl9TVEFSVAorICogCQkJdGVtcCBmaXhlZCBhZGRyZXNzZXMKKyAqIEZJWEFERFJfQk9PVF9TVEFSVAorICogCQkJUGVyc2lzdGVudCBrbWFwIGFyZWEKKyAqIFBLTUFQX0JBU0UKKyAqIFZNQUxMT0NfRU5ECisgKiAJCQlWbWFsbG9jIGFyZWEKKyAqIFZNQUxMT0NfU1RBUlQKKyAqIGhpZ2hfbWVtb3J5CisgKi8KKyNkZWZpbmUgUEtNQVBfQkFTRSAoIChGSVhBRERSX0JPT1RfU1RBUlQgLSBQQUdFX1NJWkUqKExBU1RfUEtNQVAgKyAxKSkgJiBQTURfTUFTSyApCisjZGVmaW5lIExBU1RfUEtNQVBfTUFTSyAoTEFTVF9QS01BUC0xKQorI2RlZmluZSBQS01BUF9OUih2aXJ0KSAgKCh2aXJ0LVBLTUFQX0JBU0UpID4+IFBBR0VfU0hJRlQpCisjZGVmaW5lIFBLTUFQX0FERFIobnIpICAoUEtNQVBfQkFTRSArICgobnIpIDw8IFBBR0VfU0hJRlQpKQorCitleHRlcm4gdm9pZCAqIEZBU1RDQUxMKGttYXBfaGlnaChzdHJ1Y3QgcGFnZSAqcGFnZSkpOworZXh0ZXJuIHZvaWQgRkFTVENBTEwoa3VubWFwX2hpZ2goc3RydWN0IHBhZ2UgKnBhZ2UpKTsKKwordm9pZCAqa21hcChzdHJ1Y3QgcGFnZSAqcGFnZSk7Cit2b2lkIGt1bm1hcChzdHJ1Y3QgcGFnZSAqcGFnZSk7Cit2b2lkICprbWFwX2F0b21pYyhzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSBrbV90eXBlIHR5cGUpOwordm9pZCBrdW5tYXBfYXRvbWljKHZvaWQgKmt2YWRkciwgZW51bSBrbV90eXBlIHR5cGUpOworc3RydWN0IHBhZ2UgKmttYXBfYXRvbWljX3RvX3BhZ2Uodm9pZCAqcHRyKTsKKworI2RlZmluZSBmbHVzaF9jYWNoZV9rbWFwcygpCWRvIHsgfSB3aGlsZSAoMCkKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9BU01fSElHSE1FTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L2hwZXQuaCBiL2luY2x1ZGUvYXNtLWkzODYvaHBldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlMjBiMDcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2hwZXQuaApAQCAtMCwwICsxLDExMyBAQAorCisjaWZuZGVmIF9JMzg2X0hQRVRfSAorI2RlZmluZSBfSTM4Nl9IUEVUX0gKKworI2lmZGVmIENPTkZJR19IUEVUX1RJTUVSCisKKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9zbXAuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL21zci5oPgorI2luY2x1ZGUgPGFzbS9kZWxheS5oPgorI2luY2x1ZGUgPGFzbS9tcHNwZWMuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKworI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpbmNsdWRlIDxhc20vZml4bWFwLmg+CisKKy8qCisgKiBEb2N1bWVudGF0aW9uIG9uIEhQRVQgY2FuIGJlIGZvdW5kIGF0OgorICogICAgICBodHRwOi8vd3d3LmludGVsLmNvbS9pYWwvaG9tZS9zcC9wY21tc3BlYy5odG0KKyAqICAgICAgZnRwOi8vZG93bmxvYWQuaW50ZWwuY29tL2lhbC9ob21lL3NwL21tdHMwOTgucGRmCisgKi8KKworI2RlZmluZSBIUEVUX01NQVBfU0laRQkxMDI0CisKKyNkZWZpbmUgSFBFVF9JRAkJMHgwMDAKKyNkZWZpbmUgSFBFVF9QRVJJT0QJMHgwMDQKKyNkZWZpbmUgSFBFVF9DRkcJMHgwMTAKKyNkZWZpbmUgSFBFVF9TVEFUVVMJMHgwMjAKKyNkZWZpbmUgSFBFVF9DT1VOVEVSCTB4MGYwCisjZGVmaW5lIEhQRVRfVDBfQ0ZHCTB4MTAwCisjZGVmaW5lIEhQRVRfVDBfQ01QCTB4MTA4CisjZGVmaW5lIEhQRVRfVDBfUk9VVEUJMHgxMTAKKyNkZWZpbmUgSFBFVF9UMV9DRkcJMHgxMjAKKyNkZWZpbmUgSFBFVF9UMV9DTVAJMHgxMjgKKyNkZWZpbmUgSFBFVF9UMV9ST1VURQkweDEzMAorI2RlZmluZSBIUEVUX1QyX0NGRwkweDE0MAorI2RlZmluZSBIUEVUX1QyX0NNUAkweDE0OAorI2RlZmluZSBIUEVUX1QyX1JPVVRFCTB4MTUwCisKKyNkZWZpbmUgSFBFVF9JRF9MRUdTVVAJMHgwMDAwODAwMAorI2RlZmluZSBIUEVUX0lEX05VTUJFUgkweDAwMDAxZjAwCisjZGVmaW5lIEhQRVRfSURfUkVWCTB4MDAwMDAwZmYKKyNkZWZpbmUJSFBFVF9JRF9OVU1CRVJfU0hJRlQJOAorCisjZGVmaW5lIEhQRVRfQ0ZHX0VOQUJMRQkweDAwMQorI2RlZmluZSBIUEVUX0NGR19MRUdBQ1kJMHgwMDIKKyNkZWZpbmUJSFBFVF9MRUdBQ1lfODI1NAkyCisjZGVmaW5lCUhQRVRfTEVHQUNZX1JUQwkJOAorCisjZGVmaW5lIEhQRVRfVE5fRU5BQkxFCQkweDAwNAorI2RlZmluZSBIUEVUX1ROX1BFUklPRElDCTB4MDA4CisjZGVmaW5lIEhQRVRfVE5fUEVSSU9ESUNfQ0FQCTB4MDEwCisjZGVmaW5lIEhQRVRfVE5fU0VUVkFMCQkweDA0MAorI2RlZmluZSBIUEVUX1ROXzMyQklUCQkweDEwMAorCisvKiBVc2Ugb3VyIG93biBhc20gZm9yIDY0IGJpdCBtdWx0aXBseS9kaXZpZGUgKi8KKyNkZWZpbmUgQVNNX01VTDY0X1JFRyhlYXhfb3V0LGVkeF9vdXQscmVnX2luLGVheF9pbikgCQkJXAorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygibXVsbCAlMiIgCQkJCVwKKwkJCQk6Ij1hIiAoZWF4X291dCksICI9ZCIgKGVkeF9vdXQpIAlcCisJCQkJOiJyIiAocmVnX2luKSwgIjAiIChlYXhfaW4pKQorCisjZGVmaW5lIEFTTV9ESVY2NF9SRUcoZWF4X291dCxlZHhfb3V0LHJlZ19pbixlYXhfaW4sZWR4X2luKSAJCVwKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oImRpdmwgJTIiIAkJCQlcCisJCQkJOiI9YSIgKGVheF9vdXQpLCAiPWQiIChlZHhfb3V0KSAJXAorCQkJCToiciIgKHJlZ19pbiksICIwIiAoZWF4X2luKSwgIjEiIChlZHhfaW4pKQorCisjZGVmaW5lIEtFUk5FTF9USUNLX1VTRUMgCSgxMDAwMDAwVUwvSFopCS8qIHRpY2sgdmFsdWUgaW4gbWljcm9zZWMgKi8KKy8qIE1heCBIUEVUIFBlcmlvZCBpcyAxMF44IGZlbXRvIHNlYyBhcyBpbiBIUEVUIHNwZWMgKi8KKyNkZWZpbmUgSFBFVF9NQVhfUEVSSU9EICgxMDAwMDAwMDBVTCkKKy8qCisgKiBNaW4gSFBFVCBwZXJpb2QgaXMgMTBeNSBmZW10byBzZWMganVzdCBmb3Igc2FmZXR5LiBJZiBpdCBpcyBsZXNzIHRoYW4gdGhpcywKKyAqIHRoZW4gMzIgYml0IEhQRVQgY291bnRlciB3cmFwc2Fyb3VuZCBpbiBsZXNzIHRoYW4gMC41IHNlYy4KKyAqLworI2RlZmluZSBIUEVUX01JTl9QRVJJT0QgKDEwMDAwMFVMKQorCitleHRlcm4gdW5zaWduZWQgbG9uZyBocGV0X3RpY2s7ICAJLyogaHBldCBjbGtzIGNvdW50IHBlciB0aWNrICovCitleHRlcm4gdW5zaWduZWQgbG9uZyBocGV0X2FkZHJlc3M7CS8qIGhwZXQgbWVtb3J5IG1hcCBwaHlzaWNhbCBhZGRyZXNzICovCisKK2V4dGVybiBpbnQgaHBldF9ydGNfdGltZXJfaW5pdCh2b2lkKTsKK2V4dGVybiBpbnQgaHBldF9lbmFibGUodm9pZCk7CitleHRlcm4gaW50IGhwZXRfcmVlbmFibGUodm9pZCk7CitleHRlcm4gaW50IGlzX2hwZXRfZW5hYmxlZCh2b2lkKTsKK2V4dGVybiBpbnQgaXNfaHBldF9jYXBhYmxlKHZvaWQpOworZXh0ZXJuIGludCBocGV0X3JlYWRsKHVuc2lnbmVkIGxvbmcgYSk7CisKKyNpZmRlZiBDT05GSUdfSFBFVF9FTVVMQVRFX1JUQworZXh0ZXJuIGludCBocGV0X21hc2tfcnRjX2lycV9iaXQodW5zaWduZWQgbG9uZyBiaXRfbWFzayk7CitleHRlcm4gaW50IGhwZXRfc2V0X3J0Y19pcnFfYml0KHVuc2lnbmVkIGxvbmcgYml0X21hc2spOworZXh0ZXJuIGludCBocGV0X3NldF9hbGFybV90aW1lKHVuc2lnbmVkIGNoYXIgaHJzLCB1bnNpZ25lZCBjaGFyIG1pbiwgdW5zaWduZWQgY2hhciBzZWMpOworZXh0ZXJuIGludCBocGV0X3NldF9wZXJpb2RpY19mcmVxKHVuc2lnbmVkIGxvbmcgZnJlcSk7CitleHRlcm4gaW50IGhwZXRfcnRjX2Ryb3BwZWRfaXJxKHZvaWQpOworZXh0ZXJuIGludCBocGV0X3J0Y190aW1lcl9pbml0KHZvaWQpOworZXh0ZXJuIGlycXJldHVybl90IGhwZXRfcnRjX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKyNlbmRpZiAvKiBDT05GSUdfSFBFVF9FTVVMQVRFX1JUQyAqLworI2VuZGlmIC8qIENPTkZJR19IUEVUX1RJTUVSICovCisjZW5kaWYgLyogX0kzODZfSFBFVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L2h3X2lycS5oIGIvaW5jbHVkZS9hc20taTM4Ni9od19pcnEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWM4NGNjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9od19pcnEuaApAQCAtMCwwICsxLDc5IEBACisjaWZuZGVmIF9BU01fSFdfSVJRX0gKKyNkZWZpbmUgX0FTTV9IV19JUlFfSAorCisvKgorICoJbGludXgvaW5jbHVkZS9hc20vaHdfaXJxLmgKKyAqCisgKgkoQykgMTk5MiwgMTk5MyBMaW51cyBUb3J2YWxkcywgKEMpIDE5OTcgSW5nbyBNb2xuYXIKKyAqCisgKgltb3ZlZCBzb21lIG9mIHRoZSBvbGQgYXJjaC9pMzg2L2tlcm5lbC9pcnEuaCB0byBoZXJlLiBWWQorICoKKyAqCUlSUS9JUEkgY2hhbmdlcyB0YWtlbiBmcm9tIHdvcmsgYnkgVGhvbWFzIFJhZGtlCisgKgk8dG9tc29mdEBpbmZvcm1hdGlrLnR1LWNoZW1uaXR6LmRlPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9maWxlLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KKworLyoKKyAqIFZhcmlvdXMgbG93LWxldmVsIGlycSBkZXRhaWxzIG5lZWRlZCBieSBpcnEuYywgcHJvY2Vzcy5jLAorICogdGltZS5jLCBpb19hcGljLmMgYW5kIHNtcC5jCisgKgorICogSW50ZXJydXB0IGVudHJ5L2V4aXQgY29kZSBhdCBib3RoIEMgYW5kIGFzc2VtYmx5IGxldmVsCisgKi8KKworZXh0ZXJuIHU4IGlycV92ZWN0b3JbTlJfSVJRX1ZFQ1RPUlNdOworI2RlZmluZSBJT19BUElDX1ZFQ1RPUihpcnEpCShpcnFfdmVjdG9yW2lycV0pCisjZGVmaW5lIEFVVE9fQVNTSUdOCQktMQorCitleHRlcm4gdm9pZCAoKmludGVycnVwdFtOUl9JUlFTXSkodm9pZCk7CisKKyNpZmRlZiBDT05GSUdfU01QCitmYXN0Y2FsbCB2b2lkIHJlc2NoZWR1bGVfaW50ZXJydXB0KHZvaWQpOworZmFzdGNhbGwgdm9pZCBpbnZhbGlkYXRlX2ludGVycnVwdCh2b2lkKTsKK2Zhc3RjYWxsIHZvaWQgY2FsbF9mdW5jdGlvbl9pbnRlcnJ1cHQodm9pZCk7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQworZmFzdGNhbGwgdm9pZCBhcGljX3RpbWVyX2ludGVycnVwdCh2b2lkKTsKK2Zhc3RjYWxsIHZvaWQgZXJyb3JfaW50ZXJydXB0KHZvaWQpOworZmFzdGNhbGwgdm9pZCBzcHVyaW91c19pbnRlcnJ1cHQodm9pZCk7CitmYXN0Y2FsbCB2b2lkIHRoZXJtYWxfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICopOworI2RlZmluZSBwbGF0Zm9ybV9sZWdhY3lfaXJxKGlycSkJKChpcnEpIDwgMTYpCisjZW5kaWYKKwordm9pZCBkaXNhYmxlXzgyNTlBX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKK3ZvaWQgZW5hYmxlXzgyNTlBX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKK2ludCBpODI1OUFfaXJxX3BlbmRpbmcodW5zaWduZWQgaW50IGlycSk7Cit2b2lkIG1ha2VfODI1OUFfaXJxKHVuc2lnbmVkIGludCBpcnEpOwordm9pZCBpbml0XzgyNTlBKGludCBhZW9pKTsKK3ZvaWQgRkFTVENBTEwoc2VuZF9JUElfc2VsZihpbnQgdmVjdG9yKSk7Cit2b2lkIGluaXRfVklTV1NfQVBJQ19pcnFzKHZvaWQpOwordm9pZCBzZXR1cF9JT19BUElDKHZvaWQpOwordm9pZCBkaXNhYmxlX0lPX0FQSUModm9pZCk7Cit2b2lkIHByaW50X0lPX0FQSUModm9pZCk7CitpbnQgSU9fQVBJQ19nZXRfUENJX2lycV92ZWN0b3IoaW50IGJ1cywgaW50IHNsb3QsIGludCBmbik7Cit2b2lkIHNlbmRfSVBJKGludCBkZXN0LCBpbnQgdmVjdG9yKTsKK3ZvaWQgc2V0dXBfaW9hcGljX2Rlc3Qodm9pZCk7CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIGlvX2FwaWNfaXJxczsKKworZXh0ZXJuIGF0b21pY190IGlycV9lcnJfY291bnQ7CitleHRlcm4gYXRvbWljX3QgaXJxX21pc19jb3VudDsKKworI2RlZmluZSBJT19BUElDX0lSUSh4KSAoKCh4KSA+PSAxNikgfHwgKCgxPDwoeCkpICYgaW9fYXBpY19pcnFzKSkKKworI2lmIGRlZmluZWQoQ09ORklHX1g4Nl9JT19BUElDKQorc3RhdGljIGlubGluZSB2b2lkIGh3X3Jlc2VuZF9pcnEoc3RydWN0IGh3X2ludGVycnVwdF90eXBlICpoLCB1bnNpZ25lZCBpbnQgaSkKK3sKKwlpZiAoSU9fQVBJQ19JUlEoaSkpCisJCXNlbmRfSVBJX3NlbGYoSU9fQVBJQ19WRUNUT1IoaSkpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBod19yZXNlbmRfaXJxKHN0cnVjdCBod19pbnRlcnJ1cHRfdHlwZSAqaCwgdW5zaWduZWQgaW50IGkpIHt9CisjZW5kaWYKKworI2VuZGlmIC8qIF9BU01fSFdfSVJRX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvaTM4Ny5oIGIvaW5jbHVkZS9hc20taTM4Ni9pMzg3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZmZWI5OAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvaTM4Ny5oCkBAIC0wLDAgKzEsMTE1IEBACisvKgorICogaW5jbHVkZS9hc20taTM4Ni9pMzg3LmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTQgTGludXMgVG9ydmFsZHMKKyAqCisgKiBQZW50aXVtIElJSSBGWFNSLCBTU0Ugc3VwcG9ydAorICogR2VuZXJhbCBGUFUgc3RhdGUgaGFuZGxpbmcgY2xlYW51cHMKKyAqCUdhcmV0aCBIdWdoZXMgPGdhcmV0aEB2YWxpbnV4LmNvbT4sIE1heSAyMDAwCisgKi8KKworI2lmbmRlZiBfX0FTTV9JMzg2X0kzODdfSAorI2RlZmluZSBfX0FTTV9JMzg2X0kzODdfSAorCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9zaWdjb250ZXh0Lmg+CisjaW5jbHVkZSA8YXNtL3VzZXIuaD4KKworZXh0ZXJuIHZvaWQgbXhjc3JfZmVhdHVyZV9tYXNrX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBpbml0X2ZwdShzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CisvKgorICogRlBVIGxhenkgc3RhdGUgc2F2ZSBoYW5kbGluZy4uLgorICovCitleHRlcm4gdm9pZCByZXN0b3JlX2ZwdSggc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgKTsKKworZXh0ZXJuIHZvaWQga2VybmVsX2ZwdV9iZWdpbih2b2lkKTsKKyNkZWZpbmUga2VybmVsX2ZwdV9lbmQoKSBkbyB7IHN0dHMoKTsgcHJlZW1wdF9lbmFibGUoKTsgfSB3aGlsZSgwKQorCisvKgorICogVGhlc2UgbXVzdCBiZSBjYWxsZWQgd2l0aCBwcmVlbXB0IGRpc2FibGVkCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3NhdmVfaW5pdF9mcHUoIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrICkKK3sKKwlpZiAoIGNwdV9oYXNfZnhzciApIHsKKwkJYXNtIHZvbGF0aWxlKCAiZnhzYXZlICUwIDsgZm5jbGV4IgorCQkJICAgICAgOiAiPW0iICh0c2stPnRocmVhZC5pMzg3LmZ4c2F2ZSkgKTsKKwl9IGVsc2UgeworCQlhc20gdm9sYXRpbGUoICJmbnNhdmUgJTAgOyBmd2FpdCIKKwkJCSAgICAgIDogIj1tIiAodHNrLT50aHJlYWQuaTM4Ny5mc2F2ZSkgKTsKKwl9CisJdHNrLT50aHJlYWRfaW5mby0+c3RhdHVzICY9IH5UU19VU0VERlBVOworfQorCisjZGVmaW5lIF9fdW5sYXp5X2ZwdSggdHNrICkgZG8geyBcCisJaWYgKCh0c2spLT50aHJlYWRfaW5mby0+c3RhdHVzICYgVFNfVVNFREZQVSkgXAorCQlzYXZlX2luaXRfZnB1KCB0c2sgKTsgXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBfX2NsZWFyX2ZwdSggdHNrICkJCQkJCVwKK2RvIHsJCQkJCQkJCVwKKwlpZiAoKHRzayktPnRocmVhZF9pbmZvLT5zdGF0dXMgJiBUU19VU0VERlBVKSB7CQlcCisJCWFzbSB2b2xhdGlsZSgiZm5jbGV4IDsgZndhaXQiKTsJCQkJXAorCQkodHNrKS0+dGhyZWFkX2luZm8tPnN0YXR1cyAmPSB+VFNfVVNFREZQVTsJXAorCQlzdHRzKCk7CQkJCQkJXAorCX0JCQkJCQkJXAorfSB3aGlsZSAoMCkKKworCisvKgorICogVGhlc2UgZGlzYWJsZSBwcmVlbXB0aW9uIG9uIHRoZWlyIG93biBhbmQgYXJlIHNhZmUKKyAqLworc3RhdGljIGlubGluZSB2b2lkIHNhdmVfaW5pdF9mcHUoIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrICkKK3sKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwlfX3NhdmVfaW5pdF9mcHUodHNrKTsKKwlzdHRzKCk7CisJcHJlZW1wdF9lbmFibGUoKTsKK30KKworI2RlZmluZSB1bmxhenlfZnB1KCB0c2sgKSBkbyB7CVwKKwlwcmVlbXB0X2Rpc2FibGUoKTsJXAorCV9fdW5sYXp5X2ZwdSh0c2spOwlcCisJcHJlZW1wdF9lbmFibGUoKTsJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBjbGVhcl9mcHUoIHRzayApIGRvIHsJXAorCXByZWVtcHRfZGlzYWJsZSgpOwlcCisJX19jbGVhcl9mcHUoIHRzayApOwlcCisJcHJlZW1wdF9lbmFibGUoKTsJXAorfSB3aGlsZSAoMCkKKwkJCQkJXAorLyoKKyAqIEZQVSBzdGF0ZSBpbnRlcmFjdGlvbi4uLgorICovCitleHRlcm4gdW5zaWduZWQgc2hvcnQgZ2V0X2ZwdV9jd2QoIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrICk7CitleHRlcm4gdW5zaWduZWQgc2hvcnQgZ2V0X2ZwdV9zd2QoIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrICk7CitleHRlcm4gdW5zaWduZWQgc2hvcnQgZ2V0X2ZwdV9teGNzciggc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgKTsKKworLyoKKyAqIFNpZ25hbCBmcmFtZSBoYW5kbGVycy4uLgorICovCitleHRlcm4gaW50IHNhdmVfaTM4Nyggc3RydWN0IF9mcHN0YXRlIF9fdXNlciAqYnVmICk7CitleHRlcm4gaW50IHJlc3RvcmVfaTM4Nyggc3RydWN0IF9mcHN0YXRlIF9fdXNlciAqYnVmICk7CisKKy8qCisgKiBwdHJhY2UgcmVxdWVzdCBoYW5kZXJzLi4uCisgKi8KK2V4dGVybiBpbnQgZ2V0X2ZwcmVncyggc3RydWN0IHVzZXJfaTM4N19zdHJ1Y3QgX191c2VyICpidWYsCisJCSAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayApOworZXh0ZXJuIGludCBzZXRfZnByZWdzKCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywKKwkJICAgICAgIHN0cnVjdCB1c2VyX2kzODdfc3RydWN0IF9fdXNlciAqYnVmICk7CisKK2V4dGVybiBpbnQgZ2V0X2ZweHJlZ3MoIHN0cnVjdCB1c2VyX2Z4c3Jfc3RydWN0IF9fdXNlciAqYnVmLAorCQkJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgKTsKK2V4dGVybiBpbnQgc2V0X2ZweHJlZ3MoIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLAorCQkJc3RydWN0IHVzZXJfZnhzcl9zdHJ1Y3QgX191c2VyICpidWYgKTsKKworLyoKKyAqIEZQVSBzdGF0ZSBmb3IgY29yZSBkdW1wcy4uLgorICovCitleHRlcm4gaW50IGR1bXBfZnB1KCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwkJICAgICBzdHJ1Y3QgdXNlcl9pMzg3X3N0cnVjdCAqZnB1ICk7CisKKyNlbmRpZiAvKiBfX0FTTV9JMzg2X0kzODdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9pODI1OS5oIGIvaW5jbHVkZS9hc20taTM4Ni9pODI1OS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5ZDhmOWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2k4MjU5LmgKQEAgLTAsMCArMSwxNyBAQAorI2lmbmRlZiBfX0FTTV9JODI1OV9IX18KKyNkZWZpbmUgX19BU01fSTgyNTlfSF9fCisKK2V4dGVybiB1bnNpZ25lZCBpbnQgY2FjaGVkX2lycV9tYXNrOworCisjZGVmaW5lIF9fYnl0ZSh4LHkpIAkJKCgodW5zaWduZWQgY2hhciAqKSAmKHkpKVt4XSkKKyNkZWZpbmUgY2FjaGVkX21hc3Rlcl9tYXNrCShfX2J5dGUoMCwgY2FjaGVkX2lycV9tYXNrKSkKKyNkZWZpbmUgY2FjaGVkX3NsYXZlX21hc2sJKF9fYnl0ZSgxLCBjYWNoZWRfaXJxX21hc2spKQorCitleHRlcm4gc3BpbmxvY2tfdCBpODI1OUFfbG9jazsKKworZXh0ZXJuIHZvaWQgaW5pdF84MjU5QShpbnQgYXV0b19lb2kpOworZXh0ZXJuIHZvaWQgZW5hYmxlXzgyNTlBX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKK2V4dGVybiB2b2lkIGRpc2FibGVfODI1OUFfaXJxKHVuc2lnbmVkIGludCBpcnEpOworZXh0ZXJuIHVuc2lnbmVkIGludCBzdGFydHVwXzgyNTlBX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKKworI2VuZGlmCS8qIF9fQVNNX0k4MjU5X0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9pZGUuaCBiL2luY2x1ZGUvYXNtLWkzODYvaWRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU5ZWJmNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvaWRlLmgKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1pMzg2L2lkZS5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NC0xOTk2ICBMaW51cyBUb3J2YWxkcyAmIGF1dGhvcnMKKyAqLworCisvKgorICogIFRoaXMgZmlsZSBjb250YWlucyB0aGUgaTM4NiBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgSURFIGNvZGUuCisgKi8KKworI2lmbmRlZiBfX0FTTWkzODZfSURFX0gKKyNkZWZpbmUgX19BU01pMzg2X0lERV9ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2lmbmRlZiBNQVhfSFdJRlMKKyMgaWZkZWYgQ09ORklHX0JMS19ERVZfSURFUENJCisjZGVmaW5lIE1BWF9IV0lGUwkxMAorIyBlbHNlCisjZGVmaW5lIE1BWF9IV0lGUwk2CisjIGVuZGlmCisjZW5kaWYKKworI2RlZmluZSBJREVfQVJDSF9PQlNPTEVURV9ERUZBVUxUUworCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgaWRlX2RlZmF1bHRfaXJxKHVuc2lnbmVkIGxvbmcgYmFzZSkKK3sKKwlzd2l0Y2ggKGJhc2UpIHsKKwkJY2FzZSAweDFmMDogcmV0dXJuIDE0OworCQljYXNlIDB4MTcwOiByZXR1cm4gMTU7CisJCWNhc2UgMHgxZTg6IHJldHVybiAxMTsKKwkJY2FzZSAweDE2ODogcmV0dXJuIDEwOworCQljYXNlIDB4MWUwOiByZXR1cm4gODsKKwkJY2FzZSAweDE2MDogcmV0dXJuIDEyOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGlkZV9kZWZhdWx0X2lvX2Jhc2UoaW50IGluZGV4KQoreworCXN3aXRjaCAoaW5kZXgpIHsKKwkJY2FzZSAwOglyZXR1cm4gMHgxZjA7CisJCWNhc2UgMToJcmV0dXJuIDB4MTcwOworCQljYXNlIDI6IHJldHVybiAweDFlODsKKwkJY2FzZSAzOiByZXR1cm4gMHgxNjg7CisJCWNhc2UgNDogcmV0dXJuIDB4MWUwOworCQljYXNlIDU6IHJldHVybiAweDE2MDsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAwOworCX0KK30KKworI2RlZmluZSBJREVfQVJDSF9PQlNPTEVURV9JTklUCisjZGVmaW5lIGlkZV9kZWZhdWx0X2lvX2N0bChiYXNlKQkoKGJhc2UpICsgMHgyMDYpIC8qIG9ic29sZXRlICovCisKKyNpZmRlZiBDT05GSUdfQkxLX0RFVl9JREVQQ0kKKyNkZWZpbmUgaWRlX2luaXRfZGVmYXVsdF9pcnEoYmFzZSkJKDApCisjZWxzZQorI2RlZmluZSBpZGVfaW5pdF9kZWZhdWx0X2lycShiYXNlKQlpZGVfZGVmYXVsdF9pcnEoYmFzZSkKKyNlbmRpZgorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvaWRlX2lvcHMuaD4KKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9fQVNNaTM4Nl9JREVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9pby5oIGIvaW5jbHVkZS9hc20taTM4Ni9pby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiYWJiOTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2lvLmgKQEAgLTAsMCArMSwzODEgQEAKKyNpZm5kZWYgX0FTTV9JT19ICisjZGVmaW5lIF9BU01fSU9fSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKworLyoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZGVmaW5pdGlvbnMgZm9yIHRoZSB4ODYgSU8gaW5zdHJ1Y3Rpb25zCisgKiBpbmIvaW53L2lubC9vdXRiL291dHcvb3V0bCBhbmQgdGhlICJzdHJpbmcgdmVyc2lvbnMiIG9mIHRoZSBzYW1lCisgKiAoaW5zYi9pbnN3L2luc2wvb3V0c2Ivb3V0c3cvb3V0c2wpLiBZb3UgY2FuIGFsc28gdXNlICJwYXVzaW5nIgorICogdmVyc2lvbnMgb2YgdGhlIHNpbmdsZS1JTyBpbnN0cnVjdGlvbnMgKGluYl9wL2lud19wLy4uKS4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbm90IG1lYW50IHRvIGJlIG9iZnVzY2F0aW5nOiBpdCdzIGp1c3QgY29tcGxpY2F0ZWQKKyAqIHRvIChhKSBoYW5kbGUgaXQgYWxsIGluIGEgd2F5IHRoYXQgbWFrZXMgZ2NjIGFibGUgdG8gb3B0aW1pemUgaXQKKyAqIGFzIHdlbGwgYXMgcG9zc2libGUgYW5kIChiKSB0cnlpbmcgdG8gYXZvaWQgd3JpdGluZyB0aGUgc2FtZSB0aGluZworICogb3ZlciBhbmQgb3ZlciBhZ2FpbiB3aXRoIHNsaWdodCB2YXJpYXRpb25zIGFuZCBwb3NzaWJseSBtYWtpbmcgYQorICogbWlzdGFrZSBzb21ld2hlcmUuCisgKi8KKworLyoKKyAqIFRoYW5rcyB0byBKYW1lcyB2YW4gQXJ0c2RhbGVuIGZvciBhIGJldHRlciB0aW1pbmctZml4IHRoYW4KKyAqIHRoZSB0d28gc2hvcnQganVtcHM6IHVzaW5nIG91dGIncyB0byBhIG5vbmV4aXN0ZW50IHBvcnQgc2VlbXMKKyAqIHRvIGd1YXJhbnRlZSBiZXR0ZXIgdGltaW5ncyBldmVuIG9uIGZhc3QgbWFjaGluZXMuCisgKgorICogT24gdGhlIG90aGVyIGhhbmQsIEknZCBsaWtlIHRvIGJlIHN1cmUgb2YgYSBub24tZXhpc3RlbnQgcG9ydDoKKyAqIEkgZmVlbCBhIGJpdCB1bnNhZmUgYWJvdXQgdXNpbmcgMHg4MCAoc2hvdWxkIGJlIHNhZmUsIHRob3VnaCkKKyAqCisgKgkJTGludXMKKyAqLworCisgLyoKKyAgKiAgQml0IHNpbXBsaWZpZWQgYW5kIG9wdGltaXplZCBieSBKYW4gSHViaWNrYQorICAqICBTdXBwb3J0IG9mIEJJR01FTSBhZGRlZCBieSBHZXJoYXJkIFdpY2hlcnQsIFNpZW1lbnMgQUcsIEp1bHkgMTk5OS4KKyAgKgorICAqICBpc2FfbWVtc2V0X2lvLCBpc2FfbWVtY3B5X2Zyb21pbywgaXNhX21lbWNweV90b2lvIGFkZGVkLAorICAqICBpc2FfcmVhZFt3bF0gYW5kIGlzYV93cml0ZVt3bF0gZml4ZWQKKyAgKiAgLSBBcm5hbGRvIENhcnZhbGhvIGRlIE1lbG8gPGFjbWVAY29uZWN0aXZhLmNvbS5icj4KKyAgKi8KKworI2RlZmluZSBJT19TUEFDRV9MSU1JVCAweGZmZmYKKworI2RlZmluZSBYUVVBRF9QT1JUSU9fQkFTRSAweGZlNDAwMDAwCisjZGVmaW5lIFhRVUFEX1BPUlRJT19RVUFEIDB4NDAwMDAgIC8qIDI1NmsgcGVyIHF1YWQuICovCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pb21hcC5oPgorCisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorCisvKgorICogQ29udmVydCBhIHBoeXNpY2FsIHBvaW50ZXIgdG8gYSB2aXJ0dWFsIGtlcm5lbCBwb2ludGVyIGZvciAvZGV2L21lbQorICogYWNjZXNzCisgKi8KKyNkZWZpbmUgeGxhdGVfZGV2X21lbV9wdHIocCkJX192YShwKQorCisvKgorICogQ29udmVydCBhIHZpcnR1YWwgY2FjaGVkIHBvaW50ZXIgdG8gYW4gdW5jYWNoZWQgcG9pbnRlcgorICovCisjZGVmaW5lIHhsYXRlX2Rldl9rbWVtX3B0cihwKQlwCisKKy8qKgorICoJdmlydF90b19waHlzCS0JbWFwIHZpcnR1YWwgYWRkcmVzc2VzIHRvIHBoeXNpY2FsCisgKglAYWRkcmVzczogYWRkcmVzcyB0byByZW1hcAorICoKKyAqCVRoZSByZXR1cm5lZCBwaHlzaWNhbCBhZGRyZXNzIGlzIHRoZSBwaHlzaWNhbCAoQ1BVKSBtYXBwaW5nIGZvcgorICoJdGhlIG1lbW9yeSBhZGRyZXNzIGdpdmVuLiBJdCBpcyBvbmx5IHZhbGlkIHRvIHVzZSB0aGlzIGZ1bmN0aW9uIG9uCisgKglhZGRyZXNzZXMgZGlyZWN0bHkgbWFwcGVkIG9yIGFsbG9jYXRlZCB2aWEga21hbGxvYy4gCisgKgorICoJVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBnaXZlIGJ1cyBtYXBwaW5ncyBmb3IgRE1BIHRyYW5zZmVycy4gSW4KKyAqCWFsbW9zdCBhbGwgY29uY2VpdmFibGUgY2FzZXMgYSBkZXZpY2UgZHJpdmVyIHNob3VsZCBub3QgYmUgdXNpbmcKKyAqCXRoaXMgZnVuY3Rpb24KKyAqLworIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHZpcnRfdG9fcGh5cyh2b2xhdGlsZSB2b2lkICogYWRkcmVzcykKK3sKKwlyZXR1cm4gX19wYShhZGRyZXNzKTsKK30KKworLyoqCisgKglwaHlzX3RvX3ZpcnQJLQltYXAgcGh5c2ljYWwgYWRkcmVzcyB0byB2aXJ0dWFsCisgKglAYWRkcmVzczogYWRkcmVzcyB0byByZW1hcAorICoKKyAqCVRoZSByZXR1cm5lZCB2aXJ0dWFsIGFkZHJlc3MgaXMgYSBjdXJyZW50IENQVSBtYXBwaW5nIGZvcgorICoJdGhlIG1lbW9yeSBhZGRyZXNzIGdpdmVuLiBJdCBpcyBvbmx5IHZhbGlkIHRvIHVzZSB0aGlzIGZ1bmN0aW9uIG9uCisgKglhZGRyZXNzZXMgdGhhdCBoYXZlIGEga2VybmVsIG1hcHBpbmcKKyAqCisgKglUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGhhbmRsZSBidXMgbWFwcGluZ3MgZm9yIERNQSB0cmFuc2ZlcnMuIEluCisgKglhbG1vc3QgYWxsIGNvbmNlaXZhYmxlIGNhc2VzIGEgZGV2aWNlIGRyaXZlciBzaG91bGQgbm90IGJlIHVzaW5nCisgKgl0aGlzIGZ1bmN0aW9uCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkICogcGh5c190b192aXJ0KHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwlyZXR1cm4gX192YShhZGRyZXNzKTsKK30KKworLyoKKyAqIENoYW5nZSAic3RydWN0IHBhZ2UiIHRvIHBoeXNpY2FsIGFkZHJlc3MuCisgKi8KKyNkZWZpbmUgcGFnZV90b19waHlzKHBhZ2UpICAgICgoZG1hX2FkZHJfdClwYWdlX3RvX3BmbihwYWdlKSA8PCBQQUdFX1NISUZUKQorCitleHRlcm4gdm9pZCBfX2lvbWVtICogX19pb3JlbWFwKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOworCisvKioKKyAqIGlvcmVtYXAgICAgIC0gICBtYXAgYnVzIG1lbW9yeSBpbnRvIENQVSBzcGFjZQorICogQG9mZnNldDogICAgYnVzIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeQorICogQHNpemU6ICAgICAgc2l6ZSBvZiB0aGUgcmVzb3VyY2UgdG8gbWFwCisgKgorICogaW9yZW1hcCBwZXJmb3JtcyBhIHBsYXRmb3JtIHNwZWNpZmljIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgdG8KKyAqIG1ha2UgYnVzIG1lbW9yeSBDUFUgYWNjZXNzaWJsZSB2aWEgdGhlIHJlYWRiL3JlYWR3L3JlYWRsL3dyaXRlYi8KKyAqIHdyaXRldy93cml0ZWwgZnVuY3Rpb25zIGFuZCB0aGUgb3RoZXIgbW1pbyBoZWxwZXJzLiBUaGUgcmV0dXJuZWQKKyAqIGFkZHJlc3MgaXMgbm90IGd1YXJhbnRlZWQgdG8gYmUgdXNhYmxlIGRpcmVjdGx5IGFzIGEgdmlydHVhbAorICogYWRkcmVzcy4gCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKiBpb3JlbWFwKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJcmV0dXJuIF9faW9yZW1hcChvZmZzZXQsIHNpemUsIDApOworfQorCitleHRlcm4gdm9pZCBfX2lvbWVtICogaW9yZW1hcF9ub2NhY2hlKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUpOworZXh0ZXJuIHZvaWQgaW91bm1hcCh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpOworCisvKgorICogYnRfaW9yZW1hcCgpIGFuZCBidF9pb3VubWFwKCkgYXJlIGZvciB0ZW1wb3JhcnkgZWFybHkgYm9vdC10aW1lCisgKiBtYXBwaW5ncywgYmVmb3JlIHRoZSByZWFsIGlvcmVtYXAoKSBpcyBmdW5jdGlvbmFsLgorICogQSBib290LXRpbWUgbWFwcGluZyBpcyBjdXJyZW50bHkgbGltaXRlZCB0byBhdCBtb3N0IDE2IHBhZ2VzLgorICovCitleHRlcm4gdm9pZCAqYnRfaW9yZW1hcCh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKTsKK2V4dGVybiB2b2lkIGJ0X2lvdW5tYXAodm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKTsKKworLyoKKyAqIElTQSBJL08gYnVzIG1lbW9yeSBhZGRyZXNzZXMgYXJlIDE6MSB3aXRoIHRoZSBwaHlzaWNhbCBhZGRyZXNzLgorICovCisjZGVmaW5lIGlzYV92aXJ0X3RvX2J1cyB2aXJ0X3RvX3BoeXMKKyNkZWZpbmUgaXNhX3BhZ2VfdG9fYnVzIHBhZ2VfdG9fcGh5cworI2RlZmluZSBpc2FfYnVzX3RvX3ZpcnQgcGh5c190b192aXJ0CisKKy8qCisgKiBIb3dldmVyIFBDSSBvbmVzIGFyZSBub3QgbmVjZXNzYXJpbHkgMToxIGFuZCB0aGVyZWZvcmUgdGhlc2UgaW50ZXJmYWNlcworICogYXJlIGZvcmJpZGRlbiBpbiBwb3J0YWJsZSBQQ0kgZHJpdmVycy4KKyAqCisgKiBBbGxvdyB0aGVtIG9uIHg4NiBmb3IgbGVnYWN5IGRyaXZlcnMsIHRob3VnaC4KKyAqLworI2RlZmluZSB2aXJ0X3RvX2J1cyB2aXJ0X3RvX3BoeXMKKyNkZWZpbmUgYnVzX3RvX3ZpcnQgcGh5c190b192aXJ0CisKKy8qCisgKiByZWFkWC93cml0ZVgoKSBhcmUgdXNlZCB0byBhY2Nlc3MgbWVtb3J5IG1hcHBlZCBkZXZpY2VzLiBPbiBzb21lCisgKiBhcmNoaXRlY3R1cmVzIHRoZSBtZW1vcnkgbWFwcGVkIElPIHN0dWZmIG5lZWRzIHRvIGJlIGFjY2Vzc2VkCisgKiBkaWZmZXJlbnRseS4gT24gdGhlIHg4NiBhcmNoaXRlY3R1cmUsIHdlIGp1c3QgcmVhZC93cml0ZSB0aGUKKyAqIG1lbW9yeSBsb2NhdGlvbiBkaXJlY3RseS4KKyAqLworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgcmVhZGIoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCXJldHVybiAqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgX19mb3JjZSAqKSBhZGRyOworfQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCByZWFkdyhjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJcmV0dXJuICoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgX19mb3JjZSAqKSBhZGRyOworfQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcmVhZGwoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCXJldHVybiAqKHZvbGF0aWxlIHVuc2lnbmVkIGludCBfX2ZvcmNlICopIGFkZHI7Cit9CisjZGVmaW5lIHJlYWRiX3JlbGF4ZWQoYWRkcikgcmVhZGIoYWRkcikKKyNkZWZpbmUgcmVhZHdfcmVsYXhlZChhZGRyKSByZWFkdyhhZGRyKQorI2RlZmluZSByZWFkbF9yZWxheGVkKGFkZHIpIHJlYWRsKGFkZHIpCisjZGVmaW5lIF9fcmF3X3JlYWRiIHJlYWRiCisjZGVmaW5lIF9fcmF3X3JlYWR3IHJlYWR3CisjZGVmaW5lIF9fcmF3X3JlYWRsIHJlYWRsCisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZWIodW5zaWduZWQgY2hhciBiLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIF9fZm9yY2UgKikgYWRkciA9IGI7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGV3KHVuc2lnbmVkIHNob3J0IGIsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwkqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IF9fZm9yY2UgKikgYWRkciA9IGI7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVsKHVuc2lnbmVkIGludCBiLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgX19mb3JjZSAqKSBhZGRyID0gYjsKK30KKyNkZWZpbmUgX19yYXdfd3JpdGViIHdyaXRlYgorI2RlZmluZSBfX3Jhd193cml0ZXcgd3JpdGV3CisjZGVmaW5lIF9fcmF3X3dyaXRlbCB3cml0ZWwKKworI2RlZmluZSBtbWlvd2IoKQorCitzdGF0aWMgaW5saW5lIHZvaWQgbWVtc2V0X2lvKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkciwgdW5zaWduZWQgY2hhciB2YWwsIGludCBjb3VudCkKK3sKKwltZW1zZXQoKHZvaWQgX19mb3JjZSAqKSBhZGRyLCB2YWwsIGNvdW50KTsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBtZW1jcHlfZnJvbWlvKHZvaWQgKmRzdCwgY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICpzcmMsIGludCBjb3VudCkKK3sKKwlfX21lbWNweShkc3QsICh2b2lkIF9fZm9yY2UgKikgc3JjLCBjb3VudCk7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgbWVtY3B5X3RvaW8odm9sYXRpbGUgdm9pZCBfX2lvbWVtICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgaW50IGNvdW50KQoreworCV9fbWVtY3B5KCh2b2lkIF9fZm9yY2UgKikgZHN0LCBzcmMsIGNvdW50KTsKK30KKworLyoKKyAqIElTQSBzcGFjZSBpcyAnYWx3YXlzIG1hcHBlZCcgb24gYSB0eXBpY2FsIHg4NiBzeXN0ZW0sIG5vIG5lZWQgdG8KKyAqIGV4cGxpY2l0bHkgaW9yZW1hcCgpIGl0LiBUaGUgZmFjdCB0aGF0IHRoZSBJU0EgSU8gc3BhY2UgaXMgbWFwcGVkCisgKiB0byBQQUdFX09GRlNFVCBpcyBwdXJlIGNvaW5jaWRlbmNlIC0gaXQgZG9lcyBub3QgbWVhbiBJU0EgdmFsdWVzCisgKiBhcmUgcGh5c2ljYWwgYWRkcmVzc2VzLiBUaGUgZm9sbG93aW5nIGNvbnN0YW50IHBvaW50ZXIgY2FuIGJlCisgKiB1c2VkIGFzIHRoZSBJTy1hcmVhIHBvaW50ZXIgKGl0IGNhbiBiZSBpb3VubWFwcGVkIGFzIHdlbGwsIHNvIHRoZQorICogYW5hbG9neSB3aXRoIFBDSSBpcyBxdWl0ZSBsYXJnZSk6CisgKi8KKyNkZWZpbmUgX19JU0FfSU9fYmFzZSAoKGNoYXIgX19pb21lbSAqKShQQUdFX09GRlNFVCkpCisKKyNkZWZpbmUgaXNhX3JlYWRiKGEpIHJlYWRiKF9fSVNBX0lPX2Jhc2UgKyAoYSkpCisjZGVmaW5lIGlzYV9yZWFkdyhhKSByZWFkdyhfX0lTQV9JT19iYXNlICsgKGEpKQorI2RlZmluZSBpc2FfcmVhZGwoYSkgcmVhZGwoX19JU0FfSU9fYmFzZSArIChhKSkKKyNkZWZpbmUgaXNhX3dyaXRlYihiLGEpIHdyaXRlYihiLF9fSVNBX0lPX2Jhc2UgKyAoYSkpCisjZGVmaW5lIGlzYV93cml0ZXcodyxhKSB3cml0ZXcodyxfX0lTQV9JT19iYXNlICsgKGEpKQorI2RlZmluZSBpc2Ffd3JpdGVsKGwsYSkgd3JpdGVsKGwsX19JU0FfSU9fYmFzZSArIChhKSkKKyNkZWZpbmUgaXNhX21lbXNldF9pbyhhLGIsYykJCW1lbXNldF9pbyhfX0lTQV9JT19iYXNlICsgKGEpLChiKSwoYykpCisjZGVmaW5lIGlzYV9tZW1jcHlfZnJvbWlvKGEsYixjKQltZW1jcHlfZnJvbWlvKChhKSxfX0lTQV9JT19iYXNlICsgKGIpLChjKSkKKyNkZWZpbmUgaXNhX21lbWNweV90b2lvKGEsYixjKQkJbWVtY3B5X3RvaW8oX19JU0FfSU9fYmFzZSArIChhKSwoYiksKGMpKQorCisKKy8qCisgKiBBZ2FpbiwgaTM4NiBkb2VzIG5vdCByZXF1aXJlIG1lbSBJTyBzcGVjaWZpYyBmdW5jdGlvbi4KKyAqLworCisjZGVmaW5lIGV0aF9pb19jb3B5X2FuZF9zdW0oYSxiLGMsZCkJCWV0aF9jb3B5X2FuZF9zdW0oKGEpLCh2b2lkIF9fZm9yY2UgKikoYiksKGMpLChkKSkKKyNkZWZpbmUgaXNhX2V0aF9pb19jb3B5X2FuZF9zdW0oYSxiLGMsZCkJZXRoX2NvcHlfYW5kX3N1bSgoYSksKHZvaWQgX19mb3JjZSAqKShfX0lTQV9JT19iYXNlICsgKGIpKSwoYyksKGQpKQorCisvKioKKyAqCWNoZWNrX3NpZ25hdHVyZQkJLQlmaW5kIEJJT1Mgc2lnbmF0dXJlcworICoJQGlvX2FkZHI6IG1taW8gYWRkcmVzcyB0byBjaGVjayAKKyAqCUBzaWduYXR1cmU6ICBzaWduYXR1cmUgYmxvY2sKKyAqCUBsZW5ndGg6IGxlbmd0aCBvZiBzaWduYXR1cmUKKyAqCisgKglQZXJmb3JtIGEgc2lnbmF0dXJlIGNvbXBhcmlzb24gd2l0aCB0aGUgbW1pbyBhZGRyZXNzIGlvX2FkZHIuIFRoaXMKKyAqCWFkZHJlc3Mgc2hvdWxkIGhhdmUgYmVlbiBvYnRhaW5lZCBieSBpb3JlbWFwLgorICoJUmV0dXJucyAxIG9uIGEgbWF0Y2guCisgKi8KKyAKK3N0YXRpYyBpbmxpbmUgaW50IGNoZWNrX3NpZ25hdHVyZSh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKiBpb19hZGRyLAorCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNpZ25hdHVyZSwgaW50IGxlbmd0aCkKK3sKKwlpbnQgcmV0dmFsID0gMDsKKwlkbyB7CisJCWlmIChyZWFkYihpb19hZGRyKSAhPSAqc2lnbmF0dXJlKQorCQkJZ290byBvdXQ7CisJCWlvX2FkZHIrKzsKKwkJc2lnbmF0dXJlKys7CisJCWxlbmd0aC0tOworCX0gd2hpbGUgKGxlbmd0aCk7CisJcmV0dmFsID0gMTsKK291dDoKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKgorICoJQ2FjaGUgbWFuYWdlbWVudAorICoKKyAqCVRoaXMgbmVlZGVkIGZvciB0d28gY2FzZXMKKyAqCTEuIE91dCBvZiBvcmRlciBhd2FyZSBwcm9jZXNzb3JzCisgKgkyLiBBY2NpZGVudGFsbHkgb3V0IG9mIG9yZGVyIHByb2Nlc3NvcnMgKFBQcm8gZXJyYXRhICM1MSkKKyAqLworIAorI2lmIGRlZmluZWQoQ09ORklHX1g4Nl9PT1NUT1JFKSB8fCBkZWZpbmVkKENPTkZJR19YODZfUFBST19GRU5DRSkKKworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3dyaXRlX2J1ZmZlcnModm9pZCkKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImxvY2s7IGFkZGwgJDAsMCglJWVzcCkiOiA6IDoibWVtb3J5Iik7Cit9CisKKyNkZWZpbmUgZG1hX2NhY2hlX2ludihfc3RhcnQsX3NpemUpCQlmbHVzaF93cml0ZV9idWZmZXJzKCkKKyNkZWZpbmUgZG1hX2NhY2hlX3diYWNrKF9zdGFydCxfc2l6ZSkJCWZsdXNoX3dyaXRlX2J1ZmZlcnMoKQorI2RlZmluZSBkbWFfY2FjaGVfd2JhY2tfaW52KF9zdGFydCxfc2l6ZSkJZmx1c2hfd3JpdGVfYnVmZmVycygpCisKKyNlbHNlCisKKy8qIE5vdGhpbmcgdG8gZG8gKi8KKworI2RlZmluZSBkbWFfY2FjaGVfaW52KF9zdGFydCxfc2l6ZSkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZG1hX2NhY2hlX3diYWNrKF9zdGFydCxfc2l6ZSkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZG1hX2NhY2hlX3diYWNrX2ludihfc3RhcnQsX3NpemUpCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfd3JpdGVfYnVmZmVycygpCisKKyNlbmRpZgorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjaWZkZWYgU0xPV19JT19CWV9KVU1QSU5HCisjZGVmaW5lIF9fU0xPV19ET1dOX0lPICJqbXAgMWY7IDE6IGptcCAxZjsgMToiCisjZWxzZQorI2RlZmluZSBfX1NMT1dfRE9XTl9JTyAib3V0YiAlJWFsLCQweDgwOyIKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHZvaWQgc2xvd19kb3duX2lvKHZvaWQpIHsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJX19TTE9XX0RPV05fSU8KKyNpZmRlZiBSRUFMTFlfU0xPV19JTworCQlfX1NMT1dfRE9XTl9JTyBfX1NMT1dfRE9XTl9JTyBfX1NMT1dfRE9XTl9JTworI2VuZGlmCisJCTogOiApOworfQorCisjaWZkZWYgQ09ORklHX1g4Nl9OVU1BUQorZXh0ZXJuIHZvaWQgKnhxdWFkX3BvcnRpbzsgICAgLyogV2hlcmUgdGhlIElPIGFyZWEgd2FzIG1hcHBlZCAqLworI2RlZmluZSBYUVVBRF9QT1JUX0FERFIocG9ydCwgcXVhZCkgKHhxdWFkX3BvcnRpbyArIChYUVVBRF9QT1JUSU9fUVVBRCpxdWFkKSArIHBvcnQpCisjZGVmaW5lIF9fQlVJTERJTyhid2wsYncsdHlwZSkgXAorc3RhdGljIGlubGluZSB2b2lkIG91dCMjYndsIyNfcXVhZCh1bnNpZ25lZCB0eXBlIHZhbHVlLCBpbnQgcG9ydCwgaW50IHF1YWQpIHsgXAorCWlmICh4cXVhZF9wb3J0aW8pIFwKKwkJd3JpdGUjI2J3bCh2YWx1ZSwgWFFVQURfUE9SVF9BRERSKHBvcnQsIHF1YWQpKTsgXAorCWVsc2UgXAorCQlvdXQjI2J3bCMjX2xvY2FsKHZhbHVlLCBwb3J0KTsgXAorfSBcCitzdGF0aWMgaW5saW5lIHZvaWQgb3V0IyNid2wodW5zaWduZWQgdHlwZSB2YWx1ZSwgaW50IHBvcnQpIHsgXAorCW91dCMjYndsIyNfcXVhZCh2YWx1ZSwgcG9ydCwgMCk7IFwKK30gXAorc3RhdGljIGlubGluZSB1bnNpZ25lZCB0eXBlIGluIyNid2wjI19xdWFkKGludCBwb3J0LCBpbnQgcXVhZCkgeyBcCisJaWYgKHhxdWFkX3BvcnRpbykgXAorCQlyZXR1cm4gcmVhZCMjYndsKFhRVUFEX1BPUlRfQUREUihwb3J0LCBxdWFkKSk7IFwKKwllbHNlIFwKKwkJcmV0dXJuIGluIyNid2wjI19sb2NhbChwb3J0KTsgXAorfSBcCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHR5cGUgaW4jI2J3bChpbnQgcG9ydCkgeyBcCisJcmV0dXJuIGluIyNid2wjI19xdWFkKHBvcnQsIDApOyBcCit9CisjZWxzZQorI2RlZmluZSBfX0JVSUxESU8oYndsLGJ3LHR5cGUpIFwKK3N0YXRpYyBpbmxpbmUgdm9pZCBvdXQjI2J3bCh1bnNpZ25lZCB0eXBlIHZhbHVlLCBpbnQgcG9ydCkgeyBcCisJb3V0IyNid2wjI19sb2NhbCh2YWx1ZSwgcG9ydCk7IFwKK30gXAorc3RhdGljIGlubGluZSB1bnNpZ25lZCB0eXBlIGluIyNid2woaW50IHBvcnQpIHsgXAorCXJldHVybiBpbiMjYndsIyNfbG9jYWwocG9ydCk7IFwKK30KKyNlbmRpZgorCisKKyNkZWZpbmUgQlVJTERJTyhid2wsYncsdHlwZSkgXAorc3RhdGljIGlubGluZSB2b2lkIG91dCMjYndsIyNfbG9jYWwodW5zaWduZWQgdHlwZSB2YWx1ZSwgaW50IHBvcnQpIHsgXAorCV9fYXNtX18gX192b2xhdGlsZV9fKCJvdXQiICNid2wgIiAlIiAjYncgIjAsICV3MSIgOiA6ICJhIih2YWx1ZSksICJOZCIocG9ydCkpOyBcCit9IFwKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgdHlwZSBpbiMjYndsIyNfbG9jYWwoaW50IHBvcnQpIHsgXAorCXVuc2lnbmVkIHR5cGUgdmFsdWU7IFwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygiaW4iICNid2wgIiAldzEsICUiICNidyAiMCIgOiAiPWEiKHZhbHVlKSA6ICJOZCIocG9ydCkpOyBcCisJcmV0dXJuIHZhbHVlOyBcCit9IFwKK3N0YXRpYyBpbmxpbmUgdm9pZCBvdXQjI2J3bCMjX2xvY2FsX3AodW5zaWduZWQgdHlwZSB2YWx1ZSwgaW50IHBvcnQpIHsgXAorCW91dCMjYndsIyNfbG9jYWwodmFsdWUsIHBvcnQpOyBcCisJc2xvd19kb3duX2lvKCk7IFwKK30gXAorc3RhdGljIGlubGluZSB1bnNpZ25lZCB0eXBlIGluIyNid2wjI19sb2NhbF9wKGludCBwb3J0KSB7IFwKKwl1bnNpZ25lZCB0eXBlIHZhbHVlID0gaW4jI2J3bCMjX2xvY2FsKHBvcnQpOyBcCisJc2xvd19kb3duX2lvKCk7IFwKKwlyZXR1cm4gdmFsdWU7IFwKK30gXAorX19CVUlMRElPKGJ3bCxidyx0eXBlKSBcCitzdGF0aWMgaW5saW5lIHZvaWQgb3V0IyNid2wjI19wKHVuc2lnbmVkIHR5cGUgdmFsdWUsIGludCBwb3J0KSB7IFwKKwlvdXQjI2J3bCh2YWx1ZSwgcG9ydCk7IFwKKwlzbG93X2Rvd25faW8oKTsgXAorfSBcCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHR5cGUgaW4jI2J3bCMjX3AoaW50IHBvcnQpIHsgXAorCXVuc2lnbmVkIHR5cGUgdmFsdWUgPSBpbiMjYndsKHBvcnQpOyBcCisJc2xvd19kb3duX2lvKCk7IFwKKwlyZXR1cm4gdmFsdWU7IFwKK30gXAorc3RhdGljIGlubGluZSB2b2lkIG91dHMjI2J3bChpbnQgcG9ydCwgY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCkgeyBcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oInJlcDsgb3V0cyIgI2J3bCA6ICIrUyIoYWRkciksICIrYyIoY291bnQpIDogImQiKHBvcnQpKTsgXAorfSBcCitzdGF0aWMgaW5saW5lIHZvaWQgaW5zIyNid2woaW50IHBvcnQsIHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpIHsgXAorCV9fYXNtX18gX192b2xhdGlsZV9fKCJyZXA7IGlucyIgI2J3bCA6ICIrRCIoYWRkciksICIrYyIoY291bnQpIDogImQiKHBvcnQpKTsgXAorfQorCitCVUlMRElPKGIsYixjaGFyKQorQlVJTERJTyh3LHcsc2hvcnQpCitCVUlMRElPKGwsLGludCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L2lvX2FwaWMuaCBiL2luY2x1ZGUvYXNtLWkzODYvaW9fYXBpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwMmMyMDMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2lvX2FwaWMuaApAQCAtMCwwICsxLDIxMyBAQAorI2lmbmRlZiBfX0FTTV9JT19BUElDX0gKKyNkZWZpbmUgX19BU01fSU9fQVBJQ19ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbXBzcGVjLmg+CisKKy8qCisgKiBJbnRlbCBJTy1BUElDIHN1cHBvcnQgZm9yIFNNUCBhbmQgVVAgc3lzdGVtcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAgSW5nbyBNb2xuYXIKKyAqLworCisjaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCisKKyNpZmRlZiBDT05GSUdfUENJX01TSQorc3RhdGljIGlubGluZSBpbnQgdXNlX3BjaV92ZWN0b3Iodm9pZCkJe3JldHVybiAxO30KK3N0YXRpYyBpbmxpbmUgdm9pZCBkaXNhYmxlX2VkZ2VfaW9hcGljX3ZlY3Rvcih1bnNpZ25lZCBpbnQgdmVjdG9yKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBtYXNrX2FuZF9hY2tfbGV2ZWxfaW9hcGljX3ZlY3Rvcih1bnNpZ25lZCBpbnQgdmVjdG9yKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBlbmRfZWRnZV9pb2FwaWNfdmVjdG9yICh1bnNpZ25lZCBpbnQgdmVjdG9yKSB7IH0KKyNkZWZpbmUgc3RhcnR1cF9sZXZlbF9pb2FwaWMJc3RhcnR1cF9sZXZlbF9pb2FwaWNfdmVjdG9yCisjZGVmaW5lIHNodXRkb3duX2xldmVsX2lvYXBpYwltYXNrX0lPX0FQSUNfdmVjdG9yCisjZGVmaW5lIGVuYWJsZV9sZXZlbF9pb2FwaWMJdW5tYXNrX0lPX0FQSUNfdmVjdG9yCisjZGVmaW5lIGRpc2FibGVfbGV2ZWxfaW9hcGljCW1hc2tfSU9fQVBJQ192ZWN0b3IKKyNkZWZpbmUgbWFza19hbmRfYWNrX2xldmVsX2lvYXBpYyBtYXNrX2FuZF9hY2tfbGV2ZWxfaW9hcGljX3ZlY3RvcgorI2RlZmluZSBlbmRfbGV2ZWxfaW9hcGljCWVuZF9sZXZlbF9pb2FwaWNfdmVjdG9yCisjZGVmaW5lIHNldF9pb2FwaWNfYWZmaW5pdHkJc2V0X2lvYXBpY19hZmZpbml0eV92ZWN0b3IKKworI2RlZmluZSBzdGFydHVwX2VkZ2VfaW9hcGljIAlzdGFydHVwX2VkZ2VfaW9hcGljX3ZlY3RvcgorI2RlZmluZSBzaHV0ZG93bl9lZGdlX2lvYXBpYyAJZGlzYWJsZV9lZGdlX2lvYXBpY192ZWN0b3IKKyNkZWZpbmUgZW5hYmxlX2VkZ2VfaW9hcGljIAl1bm1hc2tfSU9fQVBJQ192ZWN0b3IKKyNkZWZpbmUgZGlzYWJsZV9lZGdlX2lvYXBpYyAJZGlzYWJsZV9lZGdlX2lvYXBpY192ZWN0b3IKKyNkZWZpbmUgYWNrX2VkZ2VfaW9hcGljIAlhY2tfZWRnZV9pb2FwaWNfdmVjdG9yCisjZGVmaW5lIGVuZF9lZGdlX2lvYXBpYyAJZW5kX2VkZ2VfaW9hcGljX3ZlY3RvcgorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IHVzZV9wY2lfdmVjdG9yKHZvaWQpCXtyZXR1cm4gMDt9CitzdGF0aWMgaW5saW5lIHZvaWQgZGlzYWJsZV9lZGdlX2lvYXBpY19pcnEodW5zaWduZWQgaW50IGlycSkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgbWFza19hbmRfYWNrX2xldmVsX2lvYXBpY19pcnEodW5zaWduZWQgaW50IGlycSkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgZW5kX2VkZ2VfaW9hcGljX2lycSAodW5zaWduZWQgaW50IGlycSkgeyB9CisjZGVmaW5lIHN0YXJ0dXBfbGV2ZWxfaW9hcGljCXN0YXJ0dXBfbGV2ZWxfaW9hcGljX2lycQorI2RlZmluZSBzaHV0ZG93bl9sZXZlbF9pb2FwaWMJbWFza19JT19BUElDX2lycQorI2RlZmluZSBlbmFibGVfbGV2ZWxfaW9hcGljCXVubWFza19JT19BUElDX2lycQorI2RlZmluZSBkaXNhYmxlX2xldmVsX2lvYXBpYwltYXNrX0lPX0FQSUNfaXJxCisjZGVmaW5lIG1hc2tfYW5kX2Fja19sZXZlbF9pb2FwaWMgbWFza19hbmRfYWNrX2xldmVsX2lvYXBpY19pcnEKKyNkZWZpbmUgZW5kX2xldmVsX2lvYXBpYwllbmRfbGV2ZWxfaW9hcGljX2lycQorI2RlZmluZSBzZXRfaW9hcGljX2FmZmluaXR5CXNldF9pb2FwaWNfYWZmaW5pdHlfaXJxCisKKyNkZWZpbmUgc3RhcnR1cF9lZGdlX2lvYXBpYyAJc3RhcnR1cF9lZGdlX2lvYXBpY19pcnEKKyNkZWZpbmUgc2h1dGRvd25fZWRnZV9pb2FwaWMgCWRpc2FibGVfZWRnZV9pb2FwaWNfaXJxCisjZGVmaW5lIGVuYWJsZV9lZGdlX2lvYXBpYyAJdW5tYXNrX0lPX0FQSUNfaXJxCisjZGVmaW5lIGRpc2FibGVfZWRnZV9pb2FwaWMgCWRpc2FibGVfZWRnZV9pb2FwaWNfaXJxCisjZGVmaW5lIGFja19lZGdlX2lvYXBpYyAJYWNrX2VkZ2VfaW9hcGljX2lycQorI2RlZmluZSBlbmRfZWRnZV9pb2FwaWMgCWVuZF9lZGdlX2lvYXBpY19pcnEKKyNlbmRpZgorCisjZGVmaW5lIElPX0FQSUNfQkFTRShpZHgpIFwKKwkJKCh2b2xhdGlsZSBpbnQgKikoX19maXhfdG9fdmlydChGSVhfSU9fQVBJQ19CQVNFXzAgKyBpZHgpIFwKKwkJKyAobXBfaW9hcGljc1tpZHhdLm1wY19hcGljYWRkciAmIH5QQUdFX01BU0spKSkKKworLyoKKyAqIFRoZSBzdHJ1Y3R1cmUgb2YgdGhlIElPLUFQSUM6CisgKi8KK3VuaW9uIElPX0FQSUNfcmVnXzAwIHsKKwl1MzIJcmF3OworCXN0cnVjdCB7CisJCXUzMglfX3Jlc2VydmVkXzIJOiAxNCwKKwkJCUxUUwkJOiAgMSwKKwkJCWRlbGl2ZXJ5X3R5cGUJOiAgMSwKKwkJCV9fcmVzZXJ2ZWRfMQk6ICA4LAorCQkJSUQJCTogIDg7CisJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgYml0czsKK307CisKK3VuaW9uIElPX0FQSUNfcmVnXzAxIHsKKwl1MzIJcmF3OworCXN0cnVjdCB7CisJCXUzMgl2ZXJzaW9uCQk6ICA4LAorCQkJX19yZXNlcnZlZF8yCTogIDcsCisJCQlQUlEJCTogIDEsCisJCQllbnRyaWVzCQk6ICA4LAorCQkJX19yZXNlcnZlZF8xCTogIDg7CisJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgYml0czsKK307CisKK3VuaW9uIElPX0FQSUNfcmVnXzAyIHsKKwl1MzIJcmF3OworCXN0cnVjdCB7CisJCXUzMglfX3Jlc2VydmVkXzIJOiAyNCwKKwkJCWFyYml0cmF0aW9uCTogIDQsCisJCQlfX3Jlc2VydmVkXzEJOiAgNDsKKwl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBiaXRzOworfTsKKwordW5pb24gSU9fQVBJQ19yZWdfMDMgeworCXUzMglyYXc7CisJc3RydWN0IHsKKwkJdTMyCWJvb3RfRFQJCTogIDEsCisJCQlfX3Jlc2VydmVkXzEJOiAzMTsKKwl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBiaXRzOworfTsKKworLyoKKyAqICMgb2YgSU8tQVBJQ3MgYW5kICMgb2YgSVJRIHJvdXRpbmcgcmVnaXN0ZXJzCisgKi8KK2V4dGVybiBpbnQgbnJfaW9hcGljczsKK2V4dGVybiBpbnQgbnJfaW9hcGljX3JlZ2lzdGVyc1tNQVhfSU9fQVBJQ1NdOworCitlbnVtIGlvYXBpY19pcnFfZGVzdGluYXRpb25fdHlwZXMgeworCWRlc3RfRml4ZWQgPSAwLAorCWRlc3RfTG93ZXN0UHJpbyA9IDEsCisJZGVzdF9TTUkgPSAyLAorCWRlc3RfX3Jlc2VydmVkXzEgPSAzLAorCWRlc3RfTk1JID0gNCwKKwlkZXN0X0lOSVQgPSA1LAorCWRlc3RfX3Jlc2VydmVkXzIgPSA2LAorCWRlc3RfRXh0SU5UID0gNworfTsKKworc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgeworCV9fdTMyCXZlY3RvcgkJOiAgOCwKKwkJZGVsaXZlcnlfbW9kZQk6ICAzLAkvKiAwMDA6IEZJWEVECisJCQkJCSAqIDAwMTogbG93ZXN0IHByaW8KKwkJCQkJICogMTExOiBFeHRJTlQKKwkJCQkJICovCisJCWRlc3RfbW9kZQk6ICAxLAkvKiAwOiBwaHlzaWNhbCwgMTogbG9naWNhbCAqLworCQlkZWxpdmVyeV9zdGF0dXMJOiAgMSwKKwkJcG9sYXJpdHkJOiAgMSwKKwkJaXJyCQk6ICAxLAorCQl0cmlnZ2VyCQk6ICAxLAkvKiAwOiBlZGdlLCAxOiBsZXZlbCAqLworCQltYXNrCQk6ICAxLAkvKiAwOiBlbmFibGVkLCAxOiBkaXNhYmxlZCAqLworCQlfX3Jlc2VydmVkXzIJOiAxNTsKKworCXVuaW9uIHsJCXN0cnVjdCB7IF9fdTMyCisJCQkJCV9fcmVzZXJ2ZWRfMQk6IDI0LAorCQkJCQlwaHlzaWNhbF9kZXN0CTogIDQsCisJCQkJCV9fcmVzZXJ2ZWRfMgk6ICA0OworCQkJfSBwaHlzaWNhbDsKKworCQkJc3RydWN0IHsgX191MzIKKwkJCQkJX19yZXNlcnZlZF8xCTogMjQsCisJCQkJCWxvZ2ljYWxfZGVzdAk6ICA4OworCQkJfSBsb2dpY2FsOworCX0gZGVzdDsKKworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qCisgKiBNUC1CSU9TIGlycSBjb25maWd1cmF0aW9uIHRhYmxlIHN0cnVjdHVyZXM6CisgKi8KKworLyogSS9PIEFQSUMgZW50cmllcyAqLworZXh0ZXJuIHN0cnVjdCBtcGNfY29uZmlnX2lvYXBpYyBtcF9pb2FwaWNzW01BWF9JT19BUElDU107CisKKy8qICMgb2YgTVAgSVJRIHNvdXJjZSBlbnRyaWVzICovCitleHRlcm4gaW50IG1wX2lycV9lbnRyaWVzOworCisvKiBNUCBJUlEgc291cmNlIGVudHJpZXMgKi8KK2V4dGVybiBzdHJ1Y3QgbXBjX2NvbmZpZ19pbnRzcmMgbXBfaXJxc1tNQVhfSVJRX1NPVVJDRVNdOworCisvKiBub24tMCBpZiBkZWZhdWx0ICh0YWJsZS1sZXNzKSBNUCBjb25maWd1cmF0aW9uICovCitleHRlcm4gaW50IG1wY19kZWZhdWx0X3R5cGU7CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlvX2FwaWNfcmVhZCh1bnNpZ25lZCBpbnQgYXBpYywgdW5zaWduZWQgaW50IHJlZykKK3sKKwkqSU9fQVBJQ19CQVNFKGFwaWMpID0gcmVnOworCXJldHVybiAqKElPX0FQSUNfQkFTRShhcGljKSs0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGlvX2FwaWNfd3JpdGUodW5zaWduZWQgaW50IGFwaWMsIHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGludCB2YWx1ZSkKK3sKKwkqSU9fQVBJQ19CQVNFKGFwaWMpID0gcmVnOworCSooSU9fQVBJQ19CQVNFKGFwaWMpKzQpID0gdmFsdWU7Cit9CisKKy8qCisgKiBSZS13cml0ZSBhIHZhbHVlOiB0byBiZSB1c2VkIGZvciByZWFkLW1vZGlmeS13cml0ZQorICogY3ljbGVzIHdoZXJlIHRoZSByZWFkIGFscmVhZHkgc2V0IHVwIHRoZSBpbmRleCByZWdpc3Rlci4KKyAqCisgKiBPbGRlciBTaVMgQVBJQyByZXF1aXJlcyB3ZSByZXdyaXRlIHRoZSBpbmRleCByZWdpc2VyCisgKi8KK2V4dGVybiBpbnQgc2lzX2FwaWNfYnVnOworc3RhdGljIGlubGluZSB2b2lkIGlvX2FwaWNfbW9kaWZ5KHVuc2lnbmVkIGludCBhcGljLCB1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQgdmFsdWUpCit7CisJaWYgKHNpc19hcGljX2J1ZykKKwkJKklPX0FQSUNfQkFTRShhcGljKSA9IHJlZzsKKwkqKElPX0FQSUNfQkFTRShhcGljKSs0KSA9IHZhbHVlOworfQorCisvKiAxIGlmICJub2FwaWMiIGJvb3Qgb3B0aW9uIHBhc3NlZCAqLworZXh0ZXJuIGludCBza2lwX2lvYXBpY19zZXR1cDsKKworLyoKKyAqIElmIHdlIHVzZSB0aGUgSU8tQVBJQyBmb3IgSVJRIHJvdXRpbmcsIGRpc2FibGUgYXV0b21hdGljCisgKiBhc3NpZ25tZW50IG9mIFBDSSBJUlEncy4KKyAqLworI2RlZmluZSBpb19hcGljX2Fzc2lnbl9wY2lfaXJxcyAobXBfaXJxX2VudHJpZXMgJiYgIXNraXBfaW9hcGljX3NldHVwICYmIGlvX2FwaWNfaXJxcykKKworI2lmZGVmIENPTkZJR19BQ1BJX0JPT1QKK2V4dGVybiBpbnQgaW9fYXBpY19nZXRfdW5pcXVlX2lkIChpbnQgaW9hcGljLCBpbnQgYXBpY19pZCk7CitleHRlcm4gaW50IGlvX2FwaWNfZ2V0X3ZlcnNpb24gKGludCBpb2FwaWMpOworZXh0ZXJuIGludCBpb19hcGljX2dldF9yZWRpcl9lbnRyaWVzIChpbnQgaW9hcGljKTsKK2V4dGVybiBpbnQgaW9fYXBpY19zZXRfcGNpX3JvdXRpbmcgKGludCBpb2FwaWMsIGludCBwaW4sIGludCBpcnEsIGludCBlZGdlX2xldmVsLCBpbnQgYWN0aXZlX2hpZ2hfbG93KTsKKyNlbmRpZiAvKkNPTkZJR19BQ1BJX0JPT1QqLworCitleHRlcm4gaW50ICgqaW9hcGljX3JlbnVtYmVyX2lycSkoaW50IGlvYXBpYywgaW50IGlycSk7CisKKyNlbHNlICAvKiAhQ09ORklHX1g4Nl9JT19BUElDICovCisjZGVmaW5lIGlvX2FwaWNfYXNzaWduX3BjaV9pcnFzIDAKKyNlbmRpZgorCitleHRlcm4gaW50IGFzc2lnbl9pcnFfdmVjdG9yKGludCBpcnEpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvaW9jdGwuaCBiL2luY2x1ZGUvYXNtLWkzODYvaW9jdGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDNmNzg0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9pb2N0bC5oCkBAIC0wLDAgKzEsODUgQEAKKy8qICRJZDogaW9jdGwuaCx2IDEuNSAxOTkzLzA3LzE5IDIxOjUzOjUwIHJvb3QgRXhwIHJvb3QgJAorICoKKyAqIGxpbnV4L2lvY3RsLmggZm9yIExpbnV4IGJ5IEguSC4gQmVyZ21hbi4KKyAqLworCisjaWZuZGVmIF9BU01JMzg2X0lPQ1RMX0gKKyNkZWZpbmUgX0FTTUkzODZfSU9DVExfSAorCisvKiBpb2N0bCBjb21tYW5kIGVuY29kaW5nOiAzMiBiaXRzIHRvdGFsLCBjb21tYW5kIGluIGxvd2VyIDE2IGJpdHMsCisgKiBzaXplIG9mIHRoZSBwYXJhbWV0ZXIgc3RydWN0dXJlIGluIHRoZSBsb3dlciAxNCBiaXRzIG9mIHRoZQorICogdXBwZXIgMTYgYml0cy4KKyAqIEVuY29kaW5nIHRoZSBzaXplIG9mIHRoZSBwYXJhbWV0ZXIgc3RydWN0dXJlIGluIHRoZSBpb2N0bCByZXF1ZXN0CisgKiBpcyB1c2VmdWwgZm9yIGNhdGNoaW5nIHByb2dyYW1zIGNvbXBpbGVkIHdpdGggb2xkIHZlcnNpb25zCisgKiBhbmQgdG8gYXZvaWQgb3ZlcndyaXRpbmcgdXNlciBzcGFjZSBvdXRzaWRlIHRoZSB1c2VyIGJ1ZmZlciBhcmVhLgorICogVGhlIGhpZ2hlc3QgMiBiaXRzIGFyZSByZXNlcnZlZCBmb3IgaW5kaWNhdGluZyB0aGUgYGBhY2Nlc3MgbW9kZScnLgorICogTk9URTogVGhpcyBsaW1pdHMgdGhlIG1heCBwYXJhbWV0ZXIgc2l6ZSB0byAxNmtCIC0xICEKKyAqLworCisvKgorICogVGhlIGZvbGxvd2luZyBpcyBmb3IgY29tcGF0aWJpbGl0eSBhY3Jvc3MgdGhlIHZhcmlvdXMgTGludXgKKyAqIHBsYXRmb3Jtcy4gIFRoZSBpMzg2IGlvY3RsIG51bWJlcmluZyBzY2hlbWUgZG9lc24ndCByZWFsbHkgZW5mb3JjZQorICogYSB0eXBlIGZpZWxkLiAgRGUgZmFjdG8sIGhvd2V2ZXIsIHRoZSB0b3AgOCBiaXRzIG9mIHRoZSBsb3dlciAxNgorICogYml0cyBhcmUgaW5kZWVkIHVzZWQgYXMgYSB0eXBlIGZpZWxkLCBzbyB3ZSBtaWdodCBqdXN0IGFzIHdlbGwgbWFrZQorICogdGhpcyBleHBsaWNpdCBoZXJlLiAgUGxlYXNlIGJlIHN1cmUgdG8gdXNlIHRoZSBkZWNvZGluZyBtYWNyb3MKKyAqIGJlbG93IGZyb20gbm93IG9uLgorICovCisjZGVmaW5lIF9JT0NfTlJCSVRTCTgKKyNkZWZpbmUgX0lPQ19UWVBFQklUUwk4CisjZGVmaW5lIF9JT0NfU0laRUJJVFMJMTQKKyNkZWZpbmUgX0lPQ19ESVJCSVRTCTIKKworI2RlZmluZSBfSU9DX05STUFTSwkoKDEgPDwgX0lPQ19OUkJJVFMpLTEpCisjZGVmaW5lIF9JT0NfVFlQRU1BU0sJKCgxIDw8IF9JT0NfVFlQRUJJVFMpLTEpCisjZGVmaW5lIF9JT0NfU0laRU1BU0sJKCgxIDw8IF9JT0NfU0laRUJJVFMpLTEpCisjZGVmaW5lIF9JT0NfRElSTUFTSwkoKDEgPDwgX0lPQ19ESVJCSVRTKS0xKQorCisjZGVmaW5lIF9JT0NfTlJTSElGVAkwCisjZGVmaW5lIF9JT0NfVFlQRVNISUZUCShfSU9DX05SU0hJRlQrX0lPQ19OUkJJVFMpCisjZGVmaW5lIF9JT0NfU0laRVNISUZUCShfSU9DX1RZUEVTSElGVCtfSU9DX1RZUEVCSVRTKQorI2RlZmluZSBfSU9DX0RJUlNISUZUCShfSU9DX1NJWkVTSElGVCtfSU9DX1NJWkVCSVRTKQorCisvKgorICogRGlyZWN0aW9uIGJpdHMuCisgKi8KKyNkZWZpbmUgX0lPQ19OT05FCTBVCisjZGVmaW5lIF9JT0NfV1JJVEUJMVUKKyNkZWZpbmUgX0lPQ19SRUFECTJVCisKKyNkZWZpbmUgX0lPQyhkaXIsdHlwZSxucixzaXplKSBcCisJKCgoZGlyKSAgPDwgX0lPQ19ESVJTSElGVCkgfCBcCisJICgodHlwZSkgPDwgX0lPQ19UWVBFU0hJRlQpIHwgXAorCSAoKG5yKSAgIDw8IF9JT0NfTlJTSElGVCkgfCBcCisJICgoc2l6ZSkgPDwgX0lPQ19TSVpFU0hJRlQpKQorCisvKiBwcm92b2tlIGNvbXBpbGUgZXJyb3IgZm9yIGludmFsaWQgdXNlcyBvZiBzaXplIGFyZ3VtZW50ICovCitleHRlcm4gdW5zaWduZWQgaW50IF9faW52YWxpZF9zaXplX2FyZ3VtZW50X2Zvcl9JT0M7CisjZGVmaW5lIF9JT0NfVFlQRUNIRUNLKHQpIFwKKwkoKHNpemVvZih0KSA9PSBzaXplb2YodFsxXSkgJiYgXAorCSAgc2l6ZW9mKHQpIDwgKDEgPDwgX0lPQ19TSVpFQklUUykpID8gXAorCSAgc2l6ZW9mKHQpIDogX19pbnZhbGlkX3NpemVfYXJndW1lbnRfZm9yX0lPQykKKworLyogdXNlZCB0byBjcmVhdGUgbnVtYmVycyAqLworI2RlZmluZSBfSU8odHlwZSxucikJCV9JT0MoX0lPQ19OT05FLCh0eXBlKSwobnIpLDApCisjZGVmaW5lIF9JT1IodHlwZSxucixzaXplKQlfSU9DKF9JT0NfUkVBRCwodHlwZSksKG5yKSwoX0lPQ19UWVBFQ0hFQ0soc2l6ZSkpKQorI2RlZmluZSBfSU9XKHR5cGUsbnIsc2l6ZSkJX0lPQyhfSU9DX1dSSVRFLCh0eXBlKSwobnIpLChfSU9DX1RZUEVDSEVDSyhzaXplKSkpCisjZGVmaW5lIF9JT1dSKHR5cGUsbnIsc2l6ZSkJX0lPQyhfSU9DX1JFQUR8X0lPQ19XUklURSwodHlwZSksKG5yKSwoX0lPQ19UWVBFQ0hFQ0soc2l6ZSkpKQorI2RlZmluZSBfSU9SX0JBRCh0eXBlLG5yLHNpemUpCV9JT0MoX0lPQ19SRUFELCh0eXBlKSwobnIpLHNpemVvZihzaXplKSkKKyNkZWZpbmUgX0lPV19CQUQodHlwZSxucixzaXplKQlfSU9DKF9JT0NfV1JJVEUsKHR5cGUpLChuciksc2l6ZW9mKHNpemUpKQorI2RlZmluZSBfSU9XUl9CQUQodHlwZSxucixzaXplKQlfSU9DKF9JT0NfUkVBRHxfSU9DX1dSSVRFLCh0eXBlKSwobnIpLHNpemVvZihzaXplKSkKKworLyogdXNlZCB0byBkZWNvZGUgaW9jdGwgbnVtYmVycy4uICovCisjZGVmaW5lIF9JT0NfRElSKG5yKQkJKCgobnIpID4+IF9JT0NfRElSU0hJRlQpICYgX0lPQ19ESVJNQVNLKQorI2RlZmluZSBfSU9DX1RZUEUobnIpCQkoKChucikgPj4gX0lPQ19UWVBFU0hJRlQpICYgX0lPQ19UWVBFTUFTSykKKyNkZWZpbmUgX0lPQ19OUihucikJCSgoKG5yKSA+PiBfSU9DX05SU0hJRlQpICYgX0lPQ19OUk1BU0spCisjZGVmaW5lIF9JT0NfU0laRShucikJCSgoKG5yKSA+PiBfSU9DX1NJWkVTSElGVCkgJiBfSU9DX1NJWkVNQVNLKQorCisvKiAuLi5hbmQgZm9yIHRoZSBkcml2ZXJzL3NvdW5kIGZpbGVzLi4uICovCisKKyNkZWZpbmUgSU9DX0lOCQkoX0lPQ19XUklURSA8PCBfSU9DX0RJUlNISUZUKQorI2RlZmluZSBJT0NfT1VUCQkoX0lPQ19SRUFEIDw8IF9JT0NfRElSU0hJRlQpCisjZGVmaW5lIElPQ19JTk9VVAkoKF9JT0NfV1JJVEV8X0lPQ19SRUFEKSA8PCBfSU9DX0RJUlNISUZUKQorI2RlZmluZSBJT0NTSVpFX01BU0sJKF9JT0NfU0laRU1BU0sgPDwgX0lPQ19TSVpFU0hJRlQpCisjZGVmaW5lIElPQ1NJWkVfU0hJRlQJKF9JT0NfU0laRVNISUZUKQorCisjZW5kaWYgLyogX0FTTUkzODZfSU9DVExfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9pb2N0bHMuaCBiL2luY2x1ZGUvYXNtLWkzODYvaW9jdGxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk2MmZhZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvaW9jdGxzLmgKQEAgLTAsMCArMSw4MyBAQAorI2lmbmRlZiBfX0FSQ0hfSTM4Nl9JT0NUTFNfSF9fCisjZGVmaW5lIF9fQVJDSF9JMzg2X0lPQ1RMU19IX18KKworI2luY2x1ZGUgPGFzbS9pb2N0bC5oPgorCisvKiAweDU0IGlzIGp1c3QgYSBtYWdpYyBudW1iZXIgdG8gbWFrZSB0aGVzZSByZWxhdGl2ZWx5IHVuaXF1ZSAoJ1QnKSAqLworCisjZGVmaW5lIFRDR0VUUwkJMHg1NDAxCisjZGVmaW5lIFRDU0VUUwkJMHg1NDAyIC8qIENsYXNoZXMgd2l0aCBTTkRDVExfVE1SX1NUQVJUIHNvdW5kIGlvY3RsICovCisjZGVmaW5lIFRDU0VUU1cJCTB4NTQwMworI2RlZmluZSBUQ1NFVFNGCQkweDU0MDQKKyNkZWZpbmUgVENHRVRBCQkweDU0MDUKKyNkZWZpbmUgVENTRVRBCQkweDU0MDYKKyNkZWZpbmUgVENTRVRBVwkJMHg1NDA3CisjZGVmaW5lIFRDU0VUQUYJCTB4NTQwOAorI2RlZmluZSBUQ1NCUksJCTB4NTQwOQorI2RlZmluZSBUQ1hPTkMJCTB4NTQwQQorI2RlZmluZSBUQ0ZMU0gJCTB4NTQwQgorI2RlZmluZSBUSU9DRVhDTAkweDU0MEMKKyNkZWZpbmUgVElPQ05YQ0wJMHg1NDBECisjZGVmaW5lIFRJT0NTQ1RUWQkweDU0MEUKKyNkZWZpbmUgVElPQ0dQR1JQCTB4NTQwRgorI2RlZmluZSBUSU9DU1BHUlAJMHg1NDEwCisjZGVmaW5lIFRJT0NPVVRRCTB4NTQxMQorI2RlZmluZSBUSU9DU1RJCQkweDU0MTIKKyNkZWZpbmUgVElPQ0dXSU5TWgkweDU0MTMKKyNkZWZpbmUgVElPQ1NXSU5TWgkweDU0MTQKKyNkZWZpbmUgVElPQ01HRVQJMHg1NDE1CisjZGVmaW5lIFRJT0NNQklTCTB4NTQxNgorI2RlZmluZSBUSU9DTUJJQwkweDU0MTcKKyNkZWZpbmUgVElPQ01TRVQJMHg1NDE4CisjZGVmaW5lIFRJT0NHU09GVENBUgkweDU0MTkKKyNkZWZpbmUgVElPQ1NTT0ZUQ0FSCTB4NTQxQQorI2RlZmluZSBGSU9OUkVBRAkweDU0MUIKKyNkZWZpbmUgVElPQ0lOUQkJRklPTlJFQUQKKyNkZWZpbmUgVElPQ0xJTlVYCTB4NTQxQworI2RlZmluZSBUSU9DQ09OUwkweDU0MUQKKyNkZWZpbmUgVElPQ0dTRVJJQUwJMHg1NDFFCisjZGVmaW5lIFRJT0NTU0VSSUFMCTB4NTQxRgorI2RlZmluZSBUSU9DUEtUCQkweDU0MjAKKyNkZWZpbmUgRklPTkJJTwkJMHg1NDIxCisjZGVmaW5lIFRJT0NOT1RUWQkweDU0MjIKKyNkZWZpbmUgVElPQ1NFVEQJMHg1NDIzCisjZGVmaW5lIFRJT0NHRVRECTB4NTQyNAorI2RlZmluZSBUQ1NCUktQCQkweDU0MjUJLyogTmVlZGVkIGZvciBQT1NJWCB0Y3NlbmRicmVhaygpICovCisvKiAjZGVmaW5lIFRJT0NUVFlHU1RSVUNUIDB4NTQyNiAtIEZvcm1lciBkZWJ1Z2dpbmctb25seSBpb2N0bCAqLworI2RlZmluZSBUSU9DU0JSSwkweDU0MjcgIC8qIEJTRCBjb21wYXRpYmlsaXR5ICovCisjZGVmaW5lIFRJT0NDQlJLCTB4NTQyOCAgLyogQlNEIGNvbXBhdGliaWxpdHkgKi8KKyNkZWZpbmUgVElPQ0dTSUQJMHg1NDI5ICAvKiBSZXR1cm4gdGhlIHNlc3Npb24gSUQgb2YgRkQgKi8KKyNkZWZpbmUgVElPQ0dQVE4JX0lPUignVCcsMHgzMCwgdW5zaWduZWQgaW50KSAvKiBHZXQgUHR5IE51bWJlciAob2YgcHR5LW11eCBkZXZpY2UpICovCisjZGVmaW5lIFRJT0NTUFRMQ0sJX0lPVygnVCcsMHgzMSwgaW50KSAgLyogTG9jay91bmxvY2sgUHR5ICovCisKKyNkZWZpbmUgRklPTkNMRVgJMHg1NDUwCisjZGVmaW5lIEZJT0NMRVgJCTB4NTQ1MQorI2RlZmluZSBGSU9BU1lOQwkweDU0NTIKKyNkZWZpbmUgVElPQ1NFUkNPTkZJRwkweDU0NTMKKyNkZWZpbmUgVElPQ1NFUkdXSUxECTB4NTQ1NAorI2RlZmluZSBUSU9DU0VSU1dJTEQJMHg1NDU1CisjZGVmaW5lIFRJT0NHTENLVFJNSU9TCTB4NTQ1NgorI2RlZmluZSBUSU9DU0xDS1RSTUlPUwkweDU0NTcKKyNkZWZpbmUgVElPQ1NFUkdTVFJVQ1QJMHg1NDU4IC8qIEZvciBkZWJ1Z2dpbmcgb25seSAqLworI2RlZmluZSBUSU9DU0VSR0VUTFNSICAgMHg1NDU5IC8qIEdldCBsaW5lIHN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBUSU9DU0VSR0VUTVVMVEkgMHg1NDVBIC8qIEdldCBtdWx0aXBvcnQgY29uZmlnICAqLworI2RlZmluZSBUSU9DU0VSU0VUTVVMVEkgMHg1NDVCIC8qIFNldCBtdWx0aXBvcnQgY29uZmlnICovCisKKyNkZWZpbmUgVElPQ01JV0FJVAkweDU0NUMJLyogd2FpdCBmb3IgYSBjaGFuZ2Ugb24gc2VyaWFsIGlucHV0IGxpbmUocykgKi8KKyNkZWZpbmUgVElPQ0dJQ09VTlQJMHg1NDVECS8qIHJlYWQgc2VyaWFsIHBvcnQgaW5saW5lIGludGVycnVwdCBjb3VudHMgKi8KKyNkZWZpbmUgVElPQ0dIQVlFU0VTUCAgIDB4NTQ1RSAgLyogR2V0IEhheWVzIEVTUCBjb25maWd1cmF0aW9uICovCisjZGVmaW5lIFRJT0NTSEFZRVNFU1AgICAweDU0NUYgIC8qIFNldCBIYXllcyBFU1AgY29uZmlndXJhdGlvbiAqLworI2RlZmluZSBGSU9RU0laRQkweDU0NjAKKworLyogVXNlZCBmb3IgcGFja2V0IG1vZGUgKi8KKyNkZWZpbmUgVElPQ1BLVF9EQVRBCQkgMAorI2RlZmluZSBUSU9DUEtUX0ZMVVNIUkVBRAkgMQorI2RlZmluZSBUSU9DUEtUX0ZMVVNIV1JJVEUJIDIKKyNkZWZpbmUgVElPQ1BLVF9TVE9QCQkgNAorI2RlZmluZSBUSU9DUEtUX1NUQVJUCQkgOAorI2RlZmluZSBUSU9DUEtUX05PU1RPUAkJMTYKKyNkZWZpbmUgVElPQ1BLVF9ET1NUT1AJCTMyCisKKyNkZWZpbmUgVElPQ1NFUl9URU1UICAgIDB4MDEJLyogVHJhbnNtaXR0ZXIgcGh5c2ljYWxseSBlbXB0eSAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvaXBjLmggYi9pbmNsdWRlL2FzbS1pMzg2L2lwYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0NmUzZDkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2lwYy5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pcGMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvaXBjYnVmLmggYi9pbmNsdWRlL2FzbS1pMzg2L2lwY2J1Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkY2FkNGYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2lwY2J1Zi5oCkBAIC0wLDAgKzEsMjkgQEAKKyNpZm5kZWYgX19pMzg2X0lQQ0JVRl9IX18KKyNkZWZpbmUgX19pMzg2X0lQQ0JVRl9IX18KKworLyoKKyAqIFRoZSBpcGM2NF9wZXJtIHN0cnVjdHVyZSBmb3IgaTM4NiBhcmNoaXRlY3R1cmUuCisgKiBOb3RlIGV4dHJhIHBhZGRpbmcgYmVjYXVzZSB0aGlzIHN0cnVjdHVyZSBpcyBwYXNzZWQgYmFjayBhbmQgZm9ydGgKKyAqIGJldHdlZW4ga2VybmVsIGFuZCB1c2VyIHNwYWNlLgorICoKKyAqIFBhZCBzcGFjZSBpcyBsZWZ0IGZvcjoKKyAqIC0gMzItYml0IG1vZGVfdCBhbmQgc2VxCisgKiAtIDIgbWlzY2VsbGFuZW91cyAzMi1iaXQgdmFsdWVzCisgKi8KKworc3RydWN0IGlwYzY0X3Blcm0KK3sKKwlfX2tlcm5lbF9rZXlfdAkJa2V5OworCV9fa2VybmVsX3VpZDMyX3QJdWlkOworCV9fa2VybmVsX2dpZDMyX3QJZ2lkOworCV9fa2VybmVsX3VpZDMyX3QJY3VpZDsKKwlfX2tlcm5lbF9naWQzMl90CWNnaWQ7CisJX19rZXJuZWxfbW9kZV90CQltb2RlOworCXVuc2lnbmVkIHNob3J0CQlfX3BhZDE7CisJdW5zaWduZWQgc2hvcnQJCXNlcTsKKwl1bnNpZ25lZCBzaG9ydAkJX19wYWQyOworCXVuc2lnbmVkIGxvbmcJCV9fdW51c2VkMTsKKwl1bnNpZ25lZCBsb25nCQlfX3VudXNlZDI7Cit9OworCisjZW5kaWYgLyogX19pMzg2X0lQQ0JVRl9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvaXJxLmggYi9pbmNsdWRlL2FzbS1pMzg2L2lycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1YjllNjEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2lycS5oCkBAIC0wLDAgKzEsNDEgQEAKKyNpZm5kZWYgX0FTTV9JUlFfSAorI2RlZmluZSBfQVNNX0lSUV9ICisKKy8qCisgKglsaW51eC9pbmNsdWRlL2FzbS9pcnEuaAorICoKKyAqCShDKSAxOTkyLCAxOTkzIExpbnVzIFRvcnZhbGRzLCAoQykgMTk5NyBJbmdvIE1vbG5hcgorICoKKyAqCUlSUS9JUEkgY2hhbmdlcyB0YWtlbiBmcm9tIHdvcmsgYnkgVGhvbWFzIFJhZGtlCisgKgk8dG9tc29mdEBpbmZvcm1hdGlrLnR1LWNoZW1uaXR6LmRlPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorLyogaW5jbHVkZSBjb21lcyBmcm9tIG1hY2hpbmUgc3BlY2lmaWMgZGlyZWN0b3J5ICovCisjaW5jbHVkZSAiaXJxX3ZlY3RvcnMuaCIKKyNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KKworc3RhdGljIF9faW5saW5lX18gaW50IGlycV9jYW5vbmljYWxpemUoaW50IGlycSkKK3sKKwlyZXR1cm4gKChpcnEgPT0gMikgPyA5IDogaXJxKTsKK30KKworZXh0ZXJuIHZvaWQgcmVsZWFzZV92bTg2X2lycXMoc3RydWN0IHRhc2tfc3RydWN0ICopOworCisjaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCisjIGRlZmluZSBBUkNIX0hBU19OTUlfV0FUQ0hET0cJCS8qIFNlZSBpbmNsdWRlL2xpbnV4L25taS5oICovCisjZW5kaWYKKworI2lmZGVmIENPTkZJR180S1NUQUNLUworICBleHRlcm4gdm9pZCBpcnFfY3R4X2luaXQoaW50IGNwdSk7CisjIGRlZmluZSBfX0FSQ0hfSEFTX0RPX1NPRlRJUlEKKyNlbHNlCisjIGRlZmluZSBpcnFfY3R4X2luaXQoY3B1KSBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19JUlFCQUxBTkNFCitleHRlcm4gaW50IGlycWJhbGFuY2VfZGlzYWJsZShjaGFyICpzdHIpOworI2VuZGlmCisKKyNlbmRpZiAvKiBfQVNNX0lSUV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L2lzdC5oIGIvaW5jbHVkZS9hc20taTM4Ni9pc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTNkMWU2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9pc3QuaApAQCAtMCwwICsxLDMyIEBACisjaWZuZGVmIF9BU01fSVNUX0gKKyNkZWZpbmUgX0FTTV9JU1RfSAorCisvKgorICogSW5jbHVkZSBmaWxlIGZvciB0aGUgaW50ZXJmYWNlIHRvIElTVCBCSU9TCisgKiBDb3B5cmlnaHQgMjAwMiBBbmR5IEdyb3ZlciA8YW5kcmV3Lmdyb3ZlckBpbnRlbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKworI2lmZGVmIF9fS0VSTkVMX18KKworc3RydWN0IGlzdF9pbmZvIHsKKwl1bnNpZ25lZCBsb25nCXNpZ25hdHVyZTsKKwl1bnNpZ25lZCBsb25nCWNvbW1hbmQ7CisJdW5zaWduZWQgbG9uZwlldmVudDsKKwl1bnNpZ25lZCBsb25nCXBlcmZfbGV2ZWw7Cit9OworCitleHRlcm4gc3RydWN0IGlzdF9pbmZvIGlzdF9pbmZvOworCisjZW5kaWYJLyogX19LRVJORUxfXyAqLworI2VuZGlmCS8qIF9BU01fSVNUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYva2RlYnVnLmggYi9pbmNsdWRlL2FzbS1pMzg2L2tkZWJ1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNjQ5OGIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2tkZWJ1Zy5oCkBAIC0wLDAgKzEsNTAgQEAKKyNpZm5kZWYgX0kzODZfS0RFQlVHX0gKKyNkZWZpbmUgX0kzODZfS0RFQlVHX0ggMQorCisvKgorICogQXVnLTA1IDIwMDQgUG9ydGVkIGJ5IFByYXNhbm5hIFMgUGFuY2hhbXVraGkgPHByYXNhbm5hQGluLmlibS5jb20+CisgKiBmcm9tIHg4Nl82NCBhcmNoaXRlY3R1cmUuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgorCitzdHJ1Y3QgcHRfcmVnczsKKworc3RydWN0IGRpZV9hcmdzIHsKKwlzdHJ1Y3QgcHRfcmVncyAqcmVnczsKKwljb25zdCBjaGFyICpzdHI7CisJbG9uZyBlcnI7CisJaW50IHRyYXBucjsKKwlpbnQgc2lnbnI7Cit9OworCisvKiBOb3RlIC0geW91IHNob3VsZCBuZXZlciB1bnJlZ2lzdGVyIGJlY2F1c2UgdGhhdCBjYW4gcmFjZSB3aXRoIE5NSXMuCisgICBJZiB5b3UgcmVhbGx5IHdhbnQgdG8gZG8gaXQgZmlyc3QgdW5yZWdpc3RlciAtIHRoZW4gc3luY2hyb25pemVfa2VybmVsIC0gdGhlbiBmcmVlLgorICAqLworaW50IHJlZ2lzdGVyX2RpZV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTsKK2V4dGVybiBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKmkzODZkaWVfY2hhaW47CisKKworLyogR3Jvc3NseSBtaXNuYW1lZC4gKi8KK2VudW0gZGllX3ZhbCB7CisJRElFX09PUFMgPSAxLAorCURJRV9JTlQzLAorCURJRV9ERUJVRywKKwlESUVfUEFOSUMsCisJRElFX05NSSwKKwlESUVfRElFLAorCURJRV9OTUlXQVRDSERPRywKKwlESUVfS0VSTkVMREVCVUcsCisJRElFX1RSQVAsCisJRElFX0dQRiwKKwlESUVfQ0FMTCwKKwlESUVfTk1JX0lQSSwKKwlESUVfUEFHRV9GQVVMVCwKK307CisKK3N0YXRpYyBpbmxpbmUgaW50IG5vdGlmeV9kaWUoZW51bSBkaWVfdmFsIHZhbCxjaGFyICpzdHIsc3RydWN0IHB0X3JlZ3MgKnJlZ3MsbG9uZyBlcnIsaW50IHRyYXAsIGludCBzaWcpCit7CisJc3RydWN0IGRpZV9hcmdzIGFyZ3MgPSB7IC5yZWdzPXJlZ3MsIC5zdHI9c3RyLCAuZXJyPWVyciwgLnRyYXBucj10cmFwLC5zaWducj1zaWcgfTsKKwlyZXR1cm4gbm90aWZpZXJfY2FsbF9jaGFpbigmaTM4NmRpZV9jaGFpbiwgdmFsLCAmYXJncyk7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9rbWFwX3R5cGVzLmggYi9pbmNsdWRlL2FzbS1pMzg2L2ttYXBfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODg2YTBjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9rbWFwX3R5cGVzLmgKQEAgLTAsMCArMSwzMSBAQAorI2lmbmRlZiBfQVNNX0tNQVBfVFlQRVNfSAorI2RlZmluZSBfQVNNX0tNQVBfVFlQRVNfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpZmRlZiBDT05GSUdfREVCVUdfSElHSE1FTQorIyBkZWZpbmUgRChuKSBfX0tNX0ZFTkNFXyMjbiAsCisjZWxzZQorIyBkZWZpbmUgRChuKQorI2VuZGlmCisKK2VudW0ga21fdHlwZSB7CitEKDApCUtNX0JPVU5DRV9SRUFELAorRCgxKQlLTV9TS0JfU1VOUlBDX0RBVEEsCitEKDIpCUtNX1NLQl9EQVRBX1NPRlRJUlEsCitEKDMpCUtNX1VTRVIwLAorRCg0KQlLTV9VU0VSMSwKK0QoNSkJS01fQklPX1NSQ19JUlEsCitEKDYpCUtNX0JJT19EU1RfSVJRLAorRCg3KQlLTV9QVEUwLAorRCg4KQlLTV9QVEUxLAorRCg5KQlLTV9JUlEwLAorRCgxMCkJS01fSVJRMSwKK0QoMTEpCUtNX1NPRlRJUlEwLAorRCgxMikJS01fU09GVElSUTEsCitEKDEzKQlLTV9UWVBFX05SCit9OworCisjdW5kZWYgRAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYva3Byb2Jlcy5oIGIvaW5jbHVkZS9hc20taTM4Ni9rcHJvYmVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA5MmY2OAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYva3Byb2Jlcy5oCkBAIC0wLDAgKzEsNjkgQEAKKyNpZm5kZWYgX0FTTV9LUFJPQkVTX0gKKyNkZWZpbmUgX0FTTV9LUFJPQkVTX0gKKy8qCisgKiAgS2VybmVsIFByb2JlcyAoS1Byb2JlcykKKyAqICBpbmNsdWRlL2FzbS1pMzg2L2twcm9iZXMuaAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICogQ29weXJpZ2h0IChDKSBJQk0gQ29ycG9yYXRpb24sIDIwMDIsIDIwMDQKKyAqCisgKiAyMDAyLU9jdAlDcmVhdGVkIGJ5IFZhbXNpIEtyaXNobmEgUyA8dmFtc2lfa3Jpc2huYUBpbi5pYm0uY29tPiBLZXJuZWwKKyAqCQlQcm9iZXMgaW5pdGlhbCBpbXBsZW1lbnRhdGlvbiAoIGluY2x1ZGVzIHN1Z2dlc3Rpb25zIGZyb20KKyAqCQlSdXN0eSBSdXNzZWxsKS4KKyAqLworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisKK3N0cnVjdCBwdF9yZWdzOworCit0eXBlZGVmIHU4IGtwcm9iZV9vcGNvZGVfdDsKKyNkZWZpbmUgQlJFQUtQT0lOVF9JTlNUUlVDVElPTgkweGNjCisjZGVmaW5lIE1BWF9JTlNOX1NJWkUgMTYKKyNkZWZpbmUgTUFYX1NUQUNLX1NJWkUgNjQKKyNkZWZpbmUgTUlOX1NUQUNLX1NJWkUoQUREUikgKCgoTUFYX1NUQUNLX1NJWkUpIDwgXAorCSgoKHVuc2lnbmVkIGxvbmcpY3VycmVudF90aHJlYWRfaW5mbygpKSArIFRIUkVBRF9TSVpFIC0gKEFERFIpKSkgXAorCT8gKE1BWF9TVEFDS19TSVpFKSBcCisJOiAoKCh1bnNpZ25lZCBsb25nKWN1cnJlbnRfdGhyZWFkX2luZm8oKSkgKyBUSFJFQURfU0laRSAtIChBRERSKSkpCisKKyNkZWZpbmUgSlBST0JFX0VOVFJZKHBlbnRyeSkJKGtwcm9iZV9vcGNvZGVfdCAqKXBlbnRyeQorCisvKiBBcmNoaXRlY3R1cmUgc3BlY2lmaWMgY29weSBvZiBvcmlnaW5hbCBpbnN0cnVjdGlvbiovCitzdHJ1Y3QgYXJjaF9zcGVjaWZpY19pbnNuIHsKKwkvKiBjb3B5IG9mIHRoZSBvcmlnaW5hbCBpbnN0cnVjdGlvbiAqLworCWtwcm9iZV9vcGNvZGVfdCBpbnNuW01BWF9JTlNOX1NJWkVdOworfTsKKworCisvKiB0cmFwMy8xIGFyZSBpbnRyIGdhdGVzIGZvciBrcHJvYmVzLiAgU28sIHJlc3RvcmUgdGhlIHN0YXR1cyBvZiBJRiwKKyAqIGlmIG5lY2Vzc2FyeSwgYmVmb3JlIGV4ZWN1dGluZyB0aGUgb3JpZ2luYWwgaW50My8xICh0cmFwKSBoYW5kbGVyLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgcmVzdG9yZV9pbnRlcnJ1cHRzKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWlmIChyZWdzLT5lZmxhZ3MgJiBJRl9NQVNLKQorCQlsb2NhbF9pcnFfZW5hYmxlKCk7Cit9CisKKyNpZmRlZiBDT05GSUdfS1BST0JFUworZXh0ZXJuIGludCBrcHJvYmVfZXhjZXB0aW9uc19ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLAorCQkJCSAgICB1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqZGF0YSk7CisjZWxzZQkJCQkvKiAhQ09ORklHX0tQUk9CRVMgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGtwcm9iZV9leGNlcHRpb25zX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCisJCQkJCSAgIHVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICpkYXRhKQoreworCXJldHVybiAwOworfQorI2VuZGlmCisjZW5kaWYJCQkJLyogX0FTTV9LUFJPQkVTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvbGR0LmggYi9pbmNsdWRlL2FzbS1pMzg2L2xkdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5ZDNkZTEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2xkdC5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBsZHQuaAorICoKKyAqIERlZmluaXRpb25zIG9mIHN0cnVjdHVyZXMgdXNlZCB3aXRoIHRoZSBtb2RpZnlfbGR0IHN5c3RlbSBjYWxsLgorICovCisjaWZuZGVmIF9MSU5VWF9MRFRfSAorI2RlZmluZSBfTElOVVhfTERUX0gKKworLyogTWF4aW11bSBudW1iZXIgb2YgTERUIGVudHJpZXMgc3VwcG9ydGVkLiAqLworI2RlZmluZSBMRFRfRU5UUklFUwk4MTkyCisvKiBUaGUgc2l6ZSBvZiBlYWNoIExEVCBlbnRyeS4gKi8KKyNkZWZpbmUgTERUX0VOVFJZX1NJWkUJOAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworc3RydWN0IHVzZXJfZGVzYyB7CisJdW5zaWduZWQgaW50ICBlbnRyeV9udW1iZXI7CisJdW5zaWduZWQgbG9uZyBiYXNlX2FkZHI7CisJdW5zaWduZWQgaW50ICBsaW1pdDsKKwl1bnNpZ25lZCBpbnQgIHNlZ18zMmJpdDoxOworCXVuc2lnbmVkIGludCAgY29udGVudHM6MjsKKwl1bnNpZ25lZCBpbnQgIHJlYWRfZXhlY19vbmx5OjE7CisJdW5zaWduZWQgaW50ICBsaW1pdF9pbl9wYWdlczoxOworCXVuc2lnbmVkIGludCAgc2VnX25vdF9wcmVzZW50OjE7CisJdW5zaWduZWQgaW50ICB1c2VhYmxlOjE7Cit9OworCisjZGVmaW5lIE1PRElGWV9MRFRfQ09OVEVOVFNfREFUQQkwCisjZGVmaW5lIE1PRElGWV9MRFRfQ09OVEVOVFNfU1RBQ0sJMQorI2RlZmluZSBNT0RJRllfTERUX0NPTlRFTlRTX0NPREUJMgorCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L2xpbmthZ2UuaCBiL2luY2x1ZGUvYXNtLWkzODYvbGlua2FnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmM2Q4NTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2xpbmthZ2UuaApAQCAtMCwwICsxLDE3IEBACisjaWZuZGVmIF9fQVNNX0xJTktBR0VfSAorI2RlZmluZSBfX0FTTV9MSU5LQUdFX0gKKworI2RlZmluZSBhc21saW5rYWdlIENQUF9BU01MSU5LQUdFIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMCkpKQorI2RlZmluZSBGQVNUQ0FMTCh4KQl4IF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKQorI2RlZmluZSBmYXN0Y2FsbAlfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSkKKworI2lmZGVmIENPTkZJR19SRUdQQVJNCisjIGRlZmluZSBwcmV2ZW50X3RhaWxfY2FsbChyZXQpIF9fYXNtX18gKCIiIDogIj1yIiAocmV0KSA6ICIwIiAocmV0KSkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1g4Nl9BTElHTk1FTlRfMTYKKyNkZWZpbmUgX19BTElHTiAuYWxpZ24gMTYsMHg5MAorI2RlZmluZSBfX0FMSUdOX1NUUiAiLmFsaWduIDE2LDB4OTAiCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L2xvY2FsLmggYi9pbmNsdWRlL2FzbS1pMzg2L2xvY2FsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE3N2RhOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvbG9jYWwuaApAQCAtMCwwICsxLDcwIEBACisjaWZuZGVmIF9BUkNIX0kzODZfTE9DQUxfSAorI2RlZmluZSBfQVJDSF9JMzg2X0xPQ0FMX0gKKworI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorCit0eXBlZGVmIHN0cnVjdAoreworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgY291bnRlcjsKK30gbG9jYWxfdDsKKworI2RlZmluZSBMT0NBTF9JTklUKGkpCXsgKGkpIH0KKworI2RlZmluZSBsb2NhbF9yZWFkKHYpCSgodiktPmNvdW50ZXIpCisjZGVmaW5lIGxvY2FsX3NldCh2LGkpCSgoKHYpLT5jb3VudGVyKSA9IChpKSkKKworc3RhdGljIF9faW5saW5lX18gdm9pZCBsb2NhbF9pbmMobG9jYWxfdCAqdikKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJImluY2wgJTAiCisJCToiPW0iICh2LT5jb3VudGVyKQorCQk6Im0iICh2LT5jb3VudGVyKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgbG9jYWxfZGVjKGxvY2FsX3QgKnYpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSJkZWNsICUwIgorCQk6Ij1tIiAodi0+Y291bnRlcikKKwkJOiJtIiAodi0+Y291bnRlcikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGxvY2FsX2FkZCh1bnNpZ25lZCBsb25nIGksIGxvY2FsX3QgKnYpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSJhZGRsICUxLCUwIgorCQk6Ij1tIiAodi0+Y291bnRlcikKKwkJOiJpciIgKGkpLCAibSIgKHYtPmNvdW50ZXIpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBsb2NhbF9zdWIodW5zaWduZWQgbG9uZyBpLCBsb2NhbF90ICp2KQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkic3VibCAlMSwlMCIKKwkJOiI9bSIgKHYtPmNvdW50ZXIpCisJCToiaXIiIChpKSwgIm0iICh2LT5jb3VudGVyKSk7Cit9CisKKy8qIE9uIHg4NiwgdGhlc2UgYXJlIG5vIGJldHRlciB0aGFuIHRoZSBhdG9taWMgdmFyaWFudHMuICovCisjZGVmaW5lIF9fbG9jYWxfaW5jKGwpCQlsb2NhbF9pbmMobCkKKyNkZWZpbmUgX19sb2NhbF9kZWMobCkJCWxvY2FsX2RlYyhsKQorI2RlZmluZSBfX2xvY2FsX2FkZChpLGwpCWxvY2FsX2FkZCgoaSksKGwpKQorI2RlZmluZSBfX2xvY2FsX3N1YihpLGwpCWxvY2FsX3N1YigoaSksKGwpKQorCisvKiBVc2UgdGhlc2UgZm9yIHBlci1jcHUgbG9jYWxfdCB2YXJpYWJsZXM6IG9uIHNvbWUgYXJjaHMgdGhleSBhcmUKKyAqIG11Y2ggbW9yZSBlZmZpY2llbnQgdGhhbiB0aGVzZSBuYWl2ZSBpbXBsZW1lbnRhdGlvbnMuICBOb3RlIHRoZXkgdGFrZQorICogYSB2YXJpYWJsZSwgbm90IGFuIGFkZHJlc3MuCisgKi8KKyNkZWZpbmUgY3B1X2xvY2FsX3JlYWQodikJbG9jYWxfcmVhZCgmX19nZXRfY3B1X3Zhcih2KSkKKyNkZWZpbmUgY3B1X2xvY2FsX3NldCh2LCBpKQlsb2NhbF9zZXQoJl9fZ2V0X2NwdV92YXIodiksIChpKSkKKyNkZWZpbmUgY3B1X2xvY2FsX2luYyh2KQlsb2NhbF9pbmMoJl9fZ2V0X2NwdV92YXIodikpCisjZGVmaW5lIGNwdV9sb2NhbF9kZWModikJbG9jYWxfZGVjKCZfX2dldF9jcHVfdmFyKHYpKQorI2RlZmluZSBjcHVfbG9jYWxfYWRkKGksIHYpCWxvY2FsX2FkZCgoaSksICZfX2dldF9jcHVfdmFyKHYpKQorI2RlZmluZSBjcHVfbG9jYWxfc3ViKGksIHYpCWxvY2FsX3N1YigoaSksICZfX2dldF9jcHVfdmFyKHYpKQorCisjZGVmaW5lIF9fY3B1X2xvY2FsX2luYyh2KQljcHVfbG9jYWxfaW5jKHYpCisjZGVmaW5lIF9fY3B1X2xvY2FsX2RlYyh2KQljcHVfbG9jYWxfZGVjKHYpCisjZGVmaW5lIF9fY3B1X2xvY2FsX2FkZChpLCB2KQljcHVfbG9jYWxfYWRkKChpKSwgKHYpKQorI2RlZmluZSBfX2NwdV9sb2NhbF9zdWIoaSwgdikJY3B1X2xvY2FsX3N1YigoaSksICh2KSkKKworI2VuZGlmIC8qIF9BUkNIX0kzODZfTE9DQUxfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9tYWNoLWJpZ3NtcC9tYWNoX2FwaWMuaCBiL2luY2x1ZGUvYXNtLWkzODYvbWFjaC1iaWdzbXAvbWFjaF9hcGljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMzOTg2OAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvbWFjaC1iaWdzbXAvbWFjaF9hcGljLmgKQEAgLTAsMCArMSwxNjcgQEAKKyNpZm5kZWYgX19BU01fTUFDSF9BUElDX0gKKyNkZWZpbmUgX19BU01fTUFDSF9BUElDX0gKKyNpbmNsdWRlIDxhc20vc21wLmg+CisKKyNkZWZpbmUgU0VRVUVOVElBTF9BUElDSUQKKyNpZmRlZiBTRVFVRU5USUFMX0FQSUNJRAorI2RlZmluZSB4YXBpY19waHlzX3RvX2xvZ19hcGljaWQocGh5c19hcGljKSAoICgxdWwgPDwgKChwaHlzX2FwaWMpICYgMHgzKSkgfFwKKwkJKChwaHlzX2FwaWM8PDIpICYgKH4weGYpKSApCisjZWxpZiBDTFVTVEVSRURfQVBJQ0lECisjZGVmaW5lIHhhcGljX3BoeXNfdG9fbG9nX2FwaWNpZChwaHlzX2FwaWMpICggKDF1bCA8PCAoKHBoeXNfYXBpYykgJiAweDMpKSB8XAorCQkoKHBoeXNfYXBpYykgJiAofjB4ZikpICkKKyNlbmRpZgorCisjZGVmaW5lIE5PX0JBTEFOQ0VfSVJRICgxKQorI2RlZmluZSBlc3JfZGlzYWJsZSAoMSkKKworI2RlZmluZSBOT19JT0FQSUNfQ0hFQ0sgKDApCisKK3N0YXRpYyBpbmxpbmUgaW50IGFwaWNfaWRfcmVnaXN0ZXJlZCh2b2lkKQoreworCXJldHVybiAoMSk7Cit9CisKKyNkZWZpbmUgQVBJQ19ERlJfVkFMVUUJKEFQSUNfREZSX0NMVVNURVIpCisvKiBSb3VuZCByb2JpbiB0aGUgaXJxcyBhbW91bmcgdGhlIG9ubGluZSBjcHVzICovCitzdGF0aWMgaW5saW5lIGNwdW1hc2tfdCB0YXJnZXRfY3B1cyh2b2lkKQoreyAKKwlzdGF0aWMgdW5zaWduZWQgbG9uZyBjcHUgPSBOUl9DUFVTOworCWRvIHsKKwkJaWYgKGNwdSA+PSBOUl9DUFVTKQorCQkJY3B1ID0gZmlyc3RfY3B1KGNwdV9vbmxpbmVfbWFwKTsKKwkJZWxzZQorCQkJY3B1ID0gbmV4dF9jcHUoY3B1LCBjcHVfb25saW5lX21hcCk7CisJfSB3aGlsZSAoY3B1ID49IE5SX0NQVVMpOworCXJldHVybiBjcHVtYXNrX29mX2NwdShjcHUpOworfQorI2RlZmluZSBUQVJHRVRfQ1BVUwkodGFyZ2V0X2NwdXMoKSkKKworI2RlZmluZSBJTlRfREVMSVZFUllfTU9ERSBkZXN0X0ZpeGVkCisjZGVmaW5lIElOVF9ERVNUX01PREUgMSAgICAgLyogbG9naWNhbCBkZWxpdmVyeSBicm9hZGNhc3QgdG8gYWxsIHByb2NzICovCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjaGVja19hcGljaWRfdXNlZChwaHlzaWRfbWFza190IGJpdG1hcCwgaW50IGFwaWNpZCkKK3sKKwlyZXR1cm4gMDsKK30KKworLyogd2UgZG9uJ3QgdXNlIHRoZSBwaHlzX2NwdV9wcmVzZW50X21hcCB0byBpbmRpY2F0ZSBhcGljaWQgcHJlc2VuY2UgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjaGVja19hcGljaWRfcHJlc2VudChpbnQgYml0KSAKK3sKKwlyZXR1cm4gMTsKK30KKworI2RlZmluZSBhcGljaWRfY2x1c3RlcihhcGljaWQpIChhcGljaWQgJiAweEYwKQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY2FsY3VsYXRlX2xkcih1bnNpZ25lZCBsb25nIG9sZCkKK3sKKwl1bnNpZ25lZCBsb25nIGlkOworCWlkID0geGFwaWNfcGh5c190b19sb2dfYXBpY2lkKGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwlyZXR1cm4gKChvbGQgJiB+QVBJQ19MRFJfTUFTSykgfCBTRVRfQVBJQ19MT0dJQ0FMX0lEKGlkKSk7Cit9CisKKy8qCisgKiBTZXQgdXAgdGhlIGxvZ2ljYWwgZGVzdGluYXRpb24gSUQuCisgKgorICogSW50ZWwgcmVjb21tZW5kcyB0byBzZXQgREZSLCBMRFIgYW5kIFRQUiBiZWZvcmUgZW5hYmxpbmcKKyAqIGFuIEFQSUMuICBTZWUgZS5nLiAiQVAtMzg4IDgyNDg5RFggVXNlcidzIE1hbnVhbCIgKEludGVsCisgKiBkb2N1bWVudCBudW1iZXIgMjkyMTE2KS4gIFNvIGhlcmUgaXQgZ29lcy4uLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9hcGljX2xkcih2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgdmFsOworCisJYXBpY193cml0ZV9hcm91bmQoQVBJQ19ERlIsIEFQSUNfREZSX1ZBTFVFKTsKKwl2YWwgPSBhcGljX3JlYWQoQVBJQ19MRFIpICYgfkFQSUNfTERSX01BU0s7CisJdmFsID0gY2FsY3VsYXRlX2xkcih2YWwpOworCWFwaWNfd3JpdGVfYXJvdW5kKEFQSUNfTERSLCB2YWwpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2x1c3RlcmVkX2FwaWNfY2hlY2sodm9pZCkKK3sKKwlwcmludGsoIkVuYWJsaW5nIEFQSUMgbW9kZTogICVzLiAgVXNpbmcgJWQgSS9PIEFQSUNzXG4iLAorCQkiQ2x1c3RlciIsIG5yX2lvYXBpY3MpOworfQorCitzdGF0aWMgaW5saW5lIGludCBtdWx0aV90aW1lcl9jaGVjayhpbnQgYXBpYywgaW50IGlycSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgYXBpY2lkX3RvX25vZGUoaW50IGxvZ2ljYWxfYXBpY2lkKQoreworCXJldHVybiAwOworfQorCitleHRlcm4gdTggYmlvc19jcHVfYXBpY2lkW107CisKK3N0YXRpYyBpbmxpbmUgaW50IGNwdV9wcmVzZW50X3RvX2FwaWNpZChpbnQgbXBzX2NwdSkKK3sKKwlpZiAobXBzX2NwdSA8IE5SX0NQVVMpCisJCXJldHVybiAoaW50KWJpb3NfY3B1X2FwaWNpZFttcHNfY3B1XTsKKwllbHNlCisJCXJldHVybiBCQURfQVBJQ0lEOworfQorCitzdGF0aWMgaW5saW5lIHBoeXNpZF9tYXNrX3QgYXBpY2lkX3RvX2NwdV9wcmVzZW50KGludCBwaHlzX2FwaWNpZCkKK3sKKwlyZXR1cm4gcGh5c2lkX21hc2tfb2ZfcGh5c2lkKHBoeXNfYXBpY2lkKTsKK30KKworZXh0ZXJuIHU4IGNwdV8yX2xvZ2ljYWxfYXBpY2lkW107CisvKiBNYXBwaW5nIGZyb20gY3B1IG51bWJlciB0byBsb2dpY2FsIGFwaWNpZCAqLworc3RhdGljIGlubGluZSBpbnQgY3B1X3RvX2xvZ2ljYWxfYXBpY2lkKGludCBjcHUpCit7CisgICAgICAgaWYgKGNwdSA+PSBOUl9DUFVTKQorCSAgICAgICByZXR1cm4gQkFEX0FQSUNJRDsKKyAgICAgICByZXR1cm4gKGludCljcHVfMl9sb2dpY2FsX2FwaWNpZFtjcHVdOworIH0KKworc3RhdGljIGlubGluZSBpbnQgbXBjX2FwaWNfaWQoc3RydWN0IG1wY19jb25maWdfcHJvY2Vzc29yICptLAorCQkJc3RydWN0IG1wY19jb25maWdfdHJhbnNsYXRpb24gKnRyYW5zbGF0aW9uX3JlY29yZCkKK3sKKwlwcmludGsoIlByb2Nlc3NvciAjJWQgJWxkOiVsZCBBUElDIHZlcnNpb24gJWRcbiIsCisJICAgICAgICBtLT5tcGNfYXBpY2lkLAorCSAgICAgICAgKG0tPm1wY19jcHVmZWF0dXJlICYgQ1BVX0ZBTUlMWV9NQVNLKSA+PiA4LAorCSAgICAgICAgKG0tPm1wY19jcHVmZWF0dXJlICYgQ1BVX01PREVMX01BU0spID4+IDQsCisJICAgICAgICBtLT5tcGNfYXBpY3Zlcik7CisJcmV0dXJuIG0tPm1wY19hcGljaWQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgcGh5c2lkX21hc2tfdCBpb2FwaWNfcGh5c19pZF9tYXAocGh5c2lkX21hc2tfdCBwaHlzX21hcCkKK3sKKwkvKiBGb3IgY2x1c3RlcmVkIHdlIGRvbid0IGhhdmUgYSBnb29kIHdheSB0byBkbyB0aGlzIHlldCAtIGhhY2sgKi8KKwlyZXR1cm4gcGh5c2lkc19wcm9tb3RlKDB4RlVMKTsKK30KKworI2RlZmluZSBXQUtFX1NFQ09OREFSWV9WSUFfSU5JVAorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfcG9ydGlvX3JlbWFwKHZvaWQpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBlbmFibGVfYXBpY19tb2RlKHZvaWQpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNoZWNrX3BoeXNfYXBpY2lkX3ByZXNlbnQoaW50IGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCkKK3sKKwlyZXR1cm4gKDEpOworfQorCisvKiBBcyB3ZSBhcmUgdXNpbmcgc2luZ2xlIENQVSBhcyBkZXN0aW5hdGlvbiwgcGljayBvbmx5IG9uZSBDUFUgaGVyZSAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3B1X21hc2tfdG9fYXBpY2lkKGNwdW1hc2tfdCBjcHVtYXNrKQoreworCWludCBjcHU7CisJaW50IGFwaWNpZDsJCisKKwljcHUgPSBmaXJzdF9jcHUoY3B1bWFzayk7CisJYXBpY2lkID0gY3B1X3RvX2xvZ2ljYWxfYXBpY2lkKGNwdSk7CisJcmV0dXJuIGFwaWNpZDsKK30KKworc3RhdGljIGlubGluZSB1MzIgcGh5c19wa2dfaWQodTMyIGNwdWlkX2FwaWMsIGludCBpbmRleF9tc2IpCit7CisJcmV0dXJuIGNwdWlkX2FwaWMgPj4gaW5kZXhfbXNiOworfQorCisjZW5kaWYgLyogX19BU01fTUFDSF9BUElDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvbWFjaC1iaWdzbXAvbWFjaF9hcGljZGVmLmggYi9pbmNsdWRlL2FzbS1pMzg2L21hY2gtYmlnc21wL21hY2hfYXBpY2RlZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzZTU4YjMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L21hY2gtYmlnc21wL21hY2hfYXBpY2RlZi5oCkBAIC0wLDAgKzEsMTMgQEAKKyNpZm5kZWYgX19BU01fTUFDSF9BUElDREVGX0gKKyNkZWZpbmUgX19BU01fTUFDSF9BUElDREVGX0gKKworI2RlZmluZQkJQVBJQ19JRF9NQVNLCQkoMHgwRjw8MjQpCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgZ2V0X2FwaWNfaWQodW5zaWduZWQgbG9uZyB4KSAKK3sgCisJcmV0dXJuICgoKHgpPj4yNCkmMHgwRik7Cit9IAorCisjZGVmaW5lCQlHRVRfQVBJQ19JRCh4KQlnZXRfYXBpY19pZCh4KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvbWFjaC1iaWdzbXAvbWFjaF9pcGkuaCBiL2luY2x1ZGUvYXNtLWkzODYvbWFjaC1iaWdzbXAvbWFjaF9pcGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDA0YzUzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9tYWNoLWJpZ3NtcC9tYWNoX2lwaS5oCkBAIC0wLDAgKzEsMjUgQEAKKyNpZm5kZWYgX19BU01fTUFDSF9JUElfSAorI2RlZmluZSBfX0FTTV9NQUNIX0lQSV9ICisKK3ZvaWQgc2VuZF9JUElfbWFza19zZXF1ZW5jZShjcHVtYXNrX3QgbWFzaywgaW50IHZlY3Rvcik7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZW5kX0lQSV9tYXNrKGNwdW1hc2tfdCBtYXNrLCBpbnQgdmVjdG9yKQoreworCXNlbmRfSVBJX21hc2tfc2VxdWVuY2UobWFzaywgdmVjdG9yKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNlbmRfSVBJX2FsbGJ1dHNlbGYoaW50IHZlY3RvcikKK3sKKwljcHVtYXNrX3QgbWFzayA9IGNwdV9vbmxpbmVfbWFwOworCWNwdV9jbGVhcihzbXBfcHJvY2Vzc29yX2lkKCksIG1hc2spOworCisJaWYgKCFjcHVzX2VtcHR5KG1hc2spKQorCQlzZW5kX0lQSV9tYXNrKG1hc2ssIHZlY3Rvcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZW5kX0lQSV9hbGwoaW50IHZlY3RvcikKK3sKKwlzZW5kX0lQSV9tYXNrKGNwdV9vbmxpbmVfbWFwLCB2ZWN0b3IpOworfQorCisjZW5kaWYgLyogX19BU01fTUFDSF9JUElfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9tYWNoLWJpZ3NtcC9tYWNoX21wc3BlYy5oIGIvaW5jbHVkZS9hc20taTM4Ni9tYWNoLWJpZ3NtcC9tYWNoX21wc3BlYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiNWRhZGMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L21hY2gtYmlnc21wL21hY2hfbXBzcGVjLmgKQEAgLTAsMCArMSw4IEBACisjaWZuZGVmIF9fQVNNX01BQ0hfTVBTUEVDX0gKKyNkZWZpbmUgX19BU01fTUFDSF9NUFNQRUNfSAorCisjZGVmaW5lIE1BWF9JUlFfU09VUkNFUyAyNTYKKworI2RlZmluZSBNQVhfTVBfQlVTU0VTIDMyCisKKyNlbmRpZiAvKiBfX0FTTV9NQUNIX01QU1BFQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L21hY2gtZGVmYXVsdC9hcG0uaCBiL2luY2x1ZGUvYXNtLWkzODYvbWFjaC1kZWZhdWx0L2FwbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmNzMwYjgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L21hY2gtZGVmYXVsdC9hcG0uaApAQCAtMCwwICsxLDc1IEBACisvKgorICogIGluY2x1ZGUvYXNtLWkzODYvbWFjaC1kZWZhdWx0L2FwbS5oCisgKgorICogIE1hY2hpbmUgc3BlY2lmaWMgQVBNIEJJT1MgZnVuY3Rpb25zIGZvciBnZW5lcmljLgorICogIFNwbGl0IG91dCBmcm9tIGFwbS5jIGJ5IE9zYW11IFRvbWl0YSA8dG9taXRhQGNpbmV0LmNvLmpwPgorICovCisKKyNpZm5kZWYgX0FTTV9BUE1fSAorI2RlZmluZSBfQVNNX0FQTV9ICisKKyNpZmRlZiBBUE1fWkVST19TRUdTCisjCWRlZmluZSBBUE1fRE9fWkVST19TRUdTIFwKKwkJInB1c2hsICUlZHNcblx0IiBcCisJCSJwdXNobCAlJWVzXG5cdCIgXAorCQkieG9ybCAlJWVkeCwgJSVlZHhcblx0IiBcCisJCSJtb3YgJSVkeCwgJSVkc1xuXHQiIFwKKwkJIm1vdiAlJWR4LCAlJWVzXG5cdCIgXAorCQkibW92ICUlZHgsICUlZnNcblx0IiBcCisJCSJtb3YgJSVkeCwgJSVnc1xuXHQiCisjCWRlZmluZSBBUE1fRE9fUE9QX1NFR1MgXAorCQkicG9wbCAlJWVzXG5cdCIgXAorCQkicG9wbCAlJWRzXG5cdCIKKyNlbHNlCisjCWRlZmluZSBBUE1fRE9fWkVST19TRUdTCisjCWRlZmluZSBBUE1fRE9fUE9QX1NFR1MKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHZvaWQgYXBtX2Jpb3NfY2FsbF9hc20odTMyIGZ1bmMsIHUzMiBlYnhfaW4sIHUzMiBlY3hfaW4sCisJCQkJCXUzMiAqZWF4LCB1MzIgKmVieCwgdTMyICplY3gsCisJCQkJCXUzMiAqZWR4LCB1MzIgKmVzaSkKK3sKKwkvKgorCSAqIE4uQi4gV2UgZG8gTk9UIG5lZWQgYSBjbGQgYWZ0ZXIgdGhlIEJJT1MgY2FsbAorCSAqIGJlY2F1c2Ugd2UgYWx3YXlzIHNhdmUgYW5kIHJlc3RvcmUgdGhlIGZsYWdzLgorCSAqLworCV9fYXNtX18gX192b2xhdGlsZV9fKEFQTV9ET19aRVJPX1NFR1MKKwkJInB1c2hsICUlZWRpXG5cdCIKKwkJInB1c2hsICUlZWJwXG5cdCIKKwkJImxjYWxsIColJWNzOmFwbV9iaW9zX2VudHJ5XG5cdCIKKwkJInNldGMgJSVhbFxuXHQiCisJCSJwb3BsICUlZWJwXG5cdCIKKwkJInBvcGwgJSVlZGlcblx0IgorCQlBUE1fRE9fUE9QX1NFR1MKKwkJOiAiPWEiICgqZWF4KSwgIj1iIiAoKmVieCksICI9YyIgKCplY3gpLCAiPWQiICgqZWR4KSwKKwkJICAiPVMiICgqZXNpKQorCQk6ICJhIiAoZnVuYyksICJiIiAoZWJ4X2luKSwgImMiIChlY3hfaW4pCisJCTogIm1lbW9yeSIsICJjYyIpOworfQorCitzdGF0aWMgaW5saW5lIHU4IGFwbV9iaW9zX2NhbGxfc2ltcGxlX2FzbSh1MzIgZnVuYywgdTMyIGVieF9pbiwKKwkJCQkJCXUzMiBlY3hfaW4sIHUzMiAqZWF4KQoreworCWludAljeCwgZHgsIHNpOworCXU4CWVycm9yOworCisJLyoKKwkgKiBOLkIuIFdlIGRvIE5PVCBuZWVkIGEgY2xkIGFmdGVyIHRoZSBCSU9TIGNhbGwKKwkgKiBiZWNhdXNlIHdlIGFsd2F5cyBzYXZlIGFuZCByZXN0b3JlIHRoZSBmbGFncy4KKwkgKi8KKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyhBUE1fRE9fWkVST19TRUdTCisJCSJwdXNobCAlJWVkaVxuXHQiCisJCSJwdXNobCAlJWVicFxuXHQiCisJCSJsY2FsbCAqJSVjczphcG1fYmlvc19lbnRyeVxuXHQiCisJCSJzZXRjICUlYmxcblx0IgorCQkicG9wbCAlJWVicFxuXHQiCisJCSJwb3BsICUlZWRpXG5cdCIKKwkJQVBNX0RPX1BPUF9TRUdTCisJCTogIj1hIiAoKmVheCksICI9YiIgKGVycm9yKSwgIj1jIiAoY3gpLCAiPWQiIChkeCksCisJCSAgIj1TIiAoc2kpCisJCTogImEiIChmdW5jKSwgImIiIChlYnhfaW4pLCAiYyIgKGVjeF9pbikKKwkJOiAibWVtb3J5IiwgImNjIik7CisJcmV0dXJuIGVycm9yOworfQorCisjZW5kaWYgLyogX0FTTV9BUE1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9tYWNoLWRlZmF1bHQvYmlvc19lYmRhLmggYi9pbmNsdWRlL2FzbS1pMzg2L21hY2gtZGVmYXVsdC9iaW9zX2ViZGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2JkOWE2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9tYWNoLWRlZmF1bHQvYmlvc19lYmRhLmgKQEAgLTAsMCArMSwxNSBAQAorI2lmbmRlZiBfTUFDSF9CSU9TX0VCREFfSAorI2RlZmluZSBfTUFDSF9CSU9TX0VCREFfSAorCisvKgorICogdGhlcmUgaXMgYSByZWFsLW1vZGUgc2VnbWVudGVkIHBvaW50ZXIgcG9pbnRpbmcgdG8gdGhlCisgKiA0SyBFQkRBIGFyZWEgYXQgMHg0MEUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldF9iaW9zX2ViZGEodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgYWRkcmVzcyA9ICoodW5zaWduZWQgc2hvcnQgKilwaHlzX3RvX3ZpcnQoMHg0MEUpOworCWFkZHJlc3MgPDw9IDQ7CisJcmV0dXJuIGFkZHJlc3M7CS8qIDAgbWVhbnMgbm9uZSAqLworfQorCisjZW5kaWYgLyogX01BQ0hfQklPU19FQkRBX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvbWFjaC1kZWZhdWx0L2RvX3RpbWVyLmggYi9pbmNsdWRlL2FzbS1pMzg2L21hY2gtZGVmYXVsdC9kb190aW1lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzZGQxM2EKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L21hY2gtZGVmYXVsdC9kb190aW1lci5oCkBAIC0wLDAgKzEsODUgQEAKKy8qIGRlZmluZXMgZm9yIGlubGluZSBhcmNoIHNldHVwIGZ1bmN0aW9ucyAqLworCisjaW5jbHVkZSA8YXNtL2FwaWMuaD4KKworLyoqCisgKiBkb190aW1lcl9pbnRlcnJ1cHRfaG9vayAtIGhvb2sgaW50byB0aW1lciB0aWNrCisgKiBAcmVnczoJc3RhbmRhcmQgcmVnaXN0ZXJzIGZyb20gaW50ZXJydXB0CisgKgorICogRGVzY3JpcHRpb246CisgKglUaGlzIGhvb2sgaXMgY2FsbGVkIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSB0aW1lciBpbnRlcnJ1cHQgaXMgYWNrJ2QuCisgKglJdCdzIHByaW1hcnkgcHVycG9zZSBpcyB0byBhbGxvdyBhcmNoaXRlY3R1cmVzIHRoYXQgZG9uJ3QgcG9zc2VzcworICoJaW5kaXZpZHVhbCBwZXIgQ1BVIGNsb2NrcyAobGlrZSB0aGUgQ1BVIEFQSUNzIHN1cHBseSkgdG8gYnJvYWRjYXN0IHRoZQorICoJdGltZXIgaW50ZXJydXB0IGFzIGEgbWVhbnMgb2YgdHJpZ2dlcmluZyByZXNjaGVkdWxlcyBldGMuCisgKiovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkb190aW1lcl9pbnRlcnJ1cHRfaG9vayhzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlkb190aW1lcihyZWdzKTsKKyNpZm5kZWYgQ09ORklHX1NNUAorCXVwZGF0ZV9wcm9jZXNzX3RpbWVzKHVzZXJfbW9kZShyZWdzKSk7CisjZW5kaWYKKy8qCisgKiBJbiB0aGUgU01QIGNhc2Ugd2UgdXNlIHRoZSBsb2NhbCBBUElDIHRpbWVyIGludGVycnVwdCB0byBkbyB0aGUKKyAqIHByb2ZpbGluZywgZXhjZXB0IHdoZW4gd2Ugc2ltdWxhdGUgU01QIG1vZGUgb24gYSB1bmlwcm9jZXNzb3IKKyAqIHN5c3RlbSwgaW4gdGhhdCBjYXNlIHdlIGhhdmUgdG8gY2FsbCB0aGUgbG9jYWwgaW50ZXJydXB0IGhhbmRsZXIuCisgKi8KKyNpZm5kZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCisJcHJvZmlsZV90aWNrKENQVV9QUk9GSUxJTkcsIHJlZ3MpOworI2Vsc2UKKwlpZiAoIXVzaW5nX2FwaWNfdGltZXIpCisJCXNtcF9sb2NhbF90aW1lcl9pbnRlcnJ1cHQocmVncyk7CisjZW5kaWYKK30KKworCisvKiB5b3UgY2FuIHNhZmVseSB1bmRlZmluZSB0aGlzIGlmIHlvdSBkb24ndCBoYXZlIHRoZSBOZXB0dW5lIGNoaXBzZXQgKi8KKworI2RlZmluZSBCVUdHWV9ORVBUVU5fVElNRVIKKworLyoqCisgKiBkb190aW1lcl9vdmVyZmxvdyAtIHByb2Nlc3MgYSBkZXRlY3RlZCB0aW1lciBvdmVyZmxvdyBjb25kaXRpb24KKyAqIEBjb3VudDoJaGFyZHdhcmUgdGltZXIgaW50ZXJydXB0IGNvdW50IG9uIG92ZXJmbG93CisgKgorICogRGVzY3JpcHRpb246CisgKglUaGlzIGNhbGwgaXMgaW52b2tlZCB3aGVuIHRoZSBqaWZmaWVzIGNvdW50IGhhcyBub3QgaW5jcmVtZW50ZWQgYnV0CisgKgl0aGUgaGFyZHdhcmUgdGltZXIgaW50ZXJydXB0IGhhcy4gIEl0IG1lYW5zIHRoYXQgYSB0aW1lciB0aWNrIGludGVycnVwdAorICoJY2FtZSBhbG9uZyB3aGlsZSB0aGUgcHJldmlvdXMgb25lIHdhcyBwZW5kaW5nLCB0aHVzIGEgdGljayB3YXMgbWlzc2VkCisgKiovCitzdGF0aWMgaW5saW5lIGludCBkb190aW1lcl9vdmVyZmxvdyhpbnQgY291bnQpCit7CisJaW50IGk7CisKKwlzcGluX2xvY2soJmk4MjU5QV9sb2NrKTsKKwkvKgorCSAqIFRoaXMgaXMgdHJpY2t5IHdoZW4gSS9PIEFQSUNzIGFyZSB1c2VkOworCSAqIHNlZSBkb190aW1lcl9pbnRlcnJ1cHQoKS4KKwkgKi8KKwlpID0gaW5iKDB4MjApOworCXNwaW5fdW5sb2NrKCZpODI1OUFfbG9jayk7CisJCisJLyogYXNzdW1wdGlvbiBhYm91dCB0aW1lciBiZWluZyBJUlEwICovCisJaWYgKGkgJiAweDAxKSB7CisJCS8qCisJCSAqIFdlIGNhbm5vdCBkZXRlY3QgbG9zdCB0aW1lciBpbnRlcnJ1cHRzIC4uLiAKKwkJICogd2VsbCwgdGhhdCdzIHdoeSB3ZSBjYWxsIHRoZW0gbG9zdCwgZG9uJ3Qgd2U/IDopCisJCSAqIFtobW0sIG9uIHRoZSBQZW50aXVtIGFuZCBBbHBoYSB3ZSBjYW4gLi4uIHNvcnQgb2ZdCisJCSAqLworCQljb3VudCAtPSBMQVRDSDsKKwl9IGVsc2UgeworI2lmZGVmIEJVR0dZX05FUFRVTl9USU1FUgorCQkvKgorCQkgKiBmb3IgdGhlIE5lcHR1biBidWcgd2Uga25vdyB0aGF0IHRoZSAnbGF0Y2gnCisJCSAqIGNvbW1hbmQgZG9lc24ndCBsYXRjaCB0aGUgaGlnaCBhbmQgbG93IHZhbHVlCisJCSAqIG9mIHRoZSBjb3VudGVyIGF0b21pY2FsbHkuIFRodXMgd2UgaGF2ZSB0byAKKwkJICogc3Vic3RyYWN0IDI1NiBmcm9tIHRoZSBjb3VudGVyIAorCQkgKiAuLi4gZnVubnksIGlzbnQgaXQ/IDopCisJCSAqLworCQkKKwkJY291bnQgLT0gMjU2OworI2Vsc2UKKwkJcHJpbnRrKCJkb19zbG93X2dldHRpbWVvZmZzZXQoKTogaGFyZHdhcmUgdGltZXIgcHJvYmxlbT9cbiIpOworI2VuZGlmCisJfQorCXJldHVybiBjb3VudDsKK30KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvbWFjaC1kZWZhdWx0L2VudHJ5X2FyY2guaCBiL2luY2x1ZGUvYXNtLWkzODYvbWFjaC1kZWZhdWx0L2VudHJ5X2FyY2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzg2MTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9tYWNoLWRlZmF1bHQvZW50cnlfYXJjaC5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgZGVzaWduZWQgdG8gY29udGFpbiB0aGUgQlVJTERfSU5URVJSVVBUIHNwZWNpZmljYXRpb25zIGZvcgorICogYWxsIG9mIHRoZSBleHRyYSBuYW1lZCBpbnRlcnJ1cHQgdmVjdG9ycyB1c2VkIGJ5IHRoZSBhcmNoaXRlY3R1cmUuCisgKiBVc3VhbGx5IHRoaXMgaXMgdGhlIEludGVyIFByb2Nlc3MgSW50ZXJydXB0cyAoSVBJcykKKyAqLworCisvKgorICogVGhlIGZvbGxvd2luZyB2ZWN0b3JzIGFyZSBwYXJ0IG9mIHRoZSBMaW51eCBhcmNoaXRlY3R1cmUsIHRoZXJlCisgKiBpcyBubyBoYXJkd2FyZSBJUlEgcGluIGVxdWl2YWxlbnQgZm9yIHRoZW0sIHRoZXkgYXJlIHRyaWdnZXJlZAorICogdGhyb3VnaCB0aGUgSUNDIGJ5IHVzIChJUElzKQorICovCisjaWZkZWYgQ09ORklHX1g4Nl9TTVAKK0JVSUxEX0lOVEVSUlVQVChyZXNjaGVkdWxlX2ludGVycnVwdCxSRVNDSEVEVUxFX1ZFQ1RPUikKK0JVSUxEX0lOVEVSUlVQVChpbnZhbGlkYXRlX2ludGVycnVwdCxJTlZBTElEQVRFX1RMQl9WRUNUT1IpCitCVUlMRF9JTlRFUlJVUFQoY2FsbF9mdW5jdGlvbl9pbnRlcnJ1cHQsQ0FMTF9GVU5DVElPTl9WRUNUT1IpCisjZW5kaWYKKworLyoKKyAqIGV2ZXJ5IHBlbnRpdW0gbG9jYWwgQVBJQyBoYXMgdHdvICdsb2NhbCBpbnRlcnJ1cHRzJywgd2l0aCBhCisgKiBzb2Z0LWRlZmluYWJsZSB2ZWN0b3IgYXR0YWNoZWQgdG8gYm90aCBpbnRlcnJ1cHRzLCBvbmUgb2YKKyAqIHdoaWNoIGlzIGEgdGltZXIgaW50ZXJydXB0LCB0aGUgb3RoZXIgb25lIGlzIGVycm9yIGNvdW50ZXIKKyAqIG92ZXJmbG93LiBMaW51eCB1c2VzIHRoZSBsb2NhbCBBUElDIHRpbWVyIGludGVycnVwdCB0byBnZXQKKyAqIGEgbXVjaCBzaW1wbGVyIFNNUCB0aW1lIGFyY2hpdGVjdHVyZToKKyAqLworI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQworQlVJTERfSU5URVJSVVBUKGFwaWNfdGltZXJfaW50ZXJydXB0LExPQ0FMX1RJTUVSX1ZFQ1RPUikKK0JVSUxEX0lOVEVSUlVQVChlcnJvcl9pbnRlcnJ1cHQsRVJST1JfQVBJQ19WRUNUT1IpCitCVUlMRF9JTlRFUlJVUFQoc3B1cmlvdXNfaW50ZXJydXB0LFNQVVJJT1VTX0FQSUNfVkVDVE9SKQorCisjaWZkZWYgQ09ORklHX1g4Nl9NQ0VfUDRUSEVSTUFMCitCVUlMRF9JTlRFUlJVUFQodGhlcm1hbF9pbnRlcnJ1cHQsVEhFUk1BTF9BUElDX1ZFQ1RPUikKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvbWFjaC1kZWZhdWx0L2lvX3BvcnRzLmggYi9pbmNsdWRlL2FzbS1pMzg2L21hY2gtZGVmYXVsdC9pb19wb3J0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5NmQ5ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L21hY2gtZGVmYXVsdC9pb19wb3J0cy5oCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiAgYXJjaC9pMzg2L21hY2gtZ2VuZXJpYy9pb19wb3J0cy5oCisgKgorICogIE1hY2hpbmUgc3BlY2lmaWMgSU8gcG9ydCBhZGRyZXNzIGRlZmluaXRpb24gZm9yIGdlbmVyaWMuCisgKiAgV3JpdHRlbiBieSBPc2FtdSBUb21pdGEgPHRvbWl0YUBjaW5ldC5jby5qcD4KKyAqLworI2lmbmRlZiBfTUFDSF9JT19QT1JUU19ICisjZGVmaW5lIF9NQUNIX0lPX1BPUlRTX0gKKworLyogaTgyNTNBIFBJVCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgUElUX01PREUJCTB4NDMKKyNkZWZpbmUgUElUX0NIMAkJCTB4NDAKKyNkZWZpbmUgUElUX0NIMgkJCTB4NDIKKworLyogaTgyNTlBIFBJQyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgUElDX01BU1RFUl9DTUQJCTB4MjAKKyNkZWZpbmUgUElDX01BU1RFUl9JTVIJCTB4MjEKKyNkZWZpbmUgUElDX01BU1RFUl9JU1IJCVBJQ19NQVNURVJfQ01ECisjZGVmaW5lIFBJQ19NQVNURVJfUE9MTAkJUElDX01BU1RFUl9JU1IKKyNkZWZpbmUgUElDX01BU1RFUl9PQ1czCQlQSUNfTUFTVEVSX0lTUgorI2RlZmluZSBQSUNfU0xBVkVfQ01ECQkweGEwCisjZGVmaW5lIFBJQ19TTEFWRV9JTVIJCTB4YTEKKworLyogaTgyNTlBIFBJQyByZWxhdGVkIHZhbHVlICovCisjZGVmaW5lIFBJQ19DQVNDQURFX0lSCQkyCisjZGVmaW5lIE1BU1RFUl9JQ1c0X0RFRkFVTFQJMHgwMQorI2RlZmluZSBTTEFWRV9JQ1c0X0RFRkFVTFQJMHgwMQorI2RlZmluZSBQSUNfSUNXNF9BRU9JCQkyCisKKyNlbmRpZiAvKiAhX01BQ0hfSU9fUE9SVFNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9tYWNoLWRlZmF1bHQvaXJxX3ZlY3RvcnMuaCBiL2luY2x1ZGUvYXNtLWkzODYvbWFjaC1kZWZhdWx0L2lycV92ZWN0b3JzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODgxYzYzYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvbWFjaC1kZWZhdWx0L2lycV92ZWN0b3JzLmgKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIFRoaXMgZmlsZSBzaG91bGQgY29udGFpbiAjZGVmaW5lcyBmb3IgYWxsIG9mIHRoZSBpbnRlcnJ1cHQgdmVjdG9yCisgKiBudW1iZXJzIHVzZWQgYnkgdGhpcyBhcmNoaXRlY3R1cmUuCisgKgorICogSW4gYWRkaXRpb24sIHRoZXJlIGFyZSBzb21lIHN0YW5kYXJkIGRlZmluZXM6CisgKgorICoJRklSU1RfRVhURVJOQUxfVkVDVE9SOgorICoJCVRoZSBmaXJzdCBmcmVlIHBsYWNlIGZvciBleHRlcm5hbCBpbnRlcnJ1cHRzCisgKgorICoJU1lTQ0FMTF9WRUNUT1I6CisgKgkJVGhlIElSUSB2ZWN0b3IgYSBzeXNjYWxsIG1ha2VzIHRoZSB1c2VyIHRvIGtlcm5lbCB0cmFuc2l0aW9uCisgKgkJdW5kZXIuCisgKgorICoJVElNRVJfSVJROgorICoJCVRoZSBJUlEgbnVtYmVyIHRoZSB0aW1lciBpbnRlcnJ1cHQgY29tZXMgaW4gYXQuCisgKgorICoJTlJfSVJRUzoKKyAqCQlUaGUgdG90YWwgbnVtYmVyIG9mIGludGVycnVwdCB2ZWN0b3JzIChpbmNsdWRpbmcgYWxsIHRoZQorICoJCWFyY2hpdGVjdHVyZSBzcGVjaWZpYyBpbnRlcnJ1cHRzKSBuZWVkZWQuCisgKgorICovCQkJCisjaWZuZGVmIF9BU01fSVJRX1ZFQ1RPUlNfSAorI2RlZmluZSBfQVNNX0lSUV9WRUNUT1JTX0gKKworLyoKKyAqIElEVCB2ZWN0b3JzIHVzYWJsZSBmb3IgZXh0ZXJuYWwgaW50ZXJydXB0IHNvdXJjZXMgc3RhcnQKKyAqIGF0IDB4MjA6CisgKi8KKyNkZWZpbmUgRklSU1RfRVhURVJOQUxfVkVDVE9SCTB4MjAKKworI2RlZmluZSBTWVNDQUxMX1ZFQ1RPUgkJMHg4MAorCisvKgorICogVmVjdG9ycyAweDIwLTB4MmYgYXJlIHVzZWQgZm9yIElTQSBpbnRlcnJ1cHRzLgorICovCisKKy8qCisgKiBTcGVjaWFsIElSUSB2ZWN0b3JzIHVzZWQgYnkgdGhlIFNNUCBhcmNoaXRlY3R1cmUsIDB4ZjAtMHhmZgorICoKKyAqICBzb21lIG9mIHRoZSBmb2xsb3dpbmcgdmVjdG9ycyBhcmUgJ3JhcmUnLCB0aGV5IGFyZSBtZXJnZWQKKyAqICBpbnRvIGEgc2luZ2xlIHZlY3RvciAoQ0FMTF9GVU5DVElPTl9WRUNUT1IpIHRvIHNhdmUgdmVjdG9yIHNwYWNlLgorICogIFRMQiwgcmVzY2hlZHVsZSBhbmQgbG9jYWwgQVBJQyB2ZWN0b3JzIGFyZSBwZXJmb3JtYW5jZS1jcml0aWNhbC4KKyAqCisgKiAgVmVjdG9ycyAweGYwLTB4ZmEgYXJlIGZyZWUgKHJlc2VydmVkIGZvciBmdXR1cmUgTGludXggdXNlKS4KKyAqLworI2RlZmluZSBTUFVSSU9VU19BUElDX1ZFQ1RPUgkweGZmCisjZGVmaW5lIEVSUk9SX0FQSUNfVkVDVE9SCTB4ZmUKKyNkZWZpbmUgSU5WQUxJREFURV9UTEJfVkVDVE9SCTB4ZmQKKyNkZWZpbmUgUkVTQ0hFRFVMRV9WRUNUT1IJMHhmYworI2RlZmluZSBDQUxMX0ZVTkNUSU9OX1ZFQ1RPUgkweGZiCisKKyNkZWZpbmUgVEhFUk1BTF9BUElDX1ZFQ1RPUgkweGYwCisvKgorICogTG9jYWwgQVBJQyB0aW1lciBJUlEgdmVjdG9yIGlzIG9uIGEgZGlmZmVyZW50IHByaW9yaXR5IGxldmVsLAorICogdG8gd29yayBhcm91bmQgdGhlICdsb3N0IGxvY2FsIGludGVycnVwdCBpZiBtb3JlIHRoYW4gMiBJUlEKKyAqIHNvdXJjZXMgcGVyIGxldmVsJyBlcnJhdGEuCisgKi8KKyNkZWZpbmUgTE9DQUxfVElNRVJfVkVDVE9SCTB4ZWYKKworLyoKKyAqIEZpcnN0IEFQSUMgdmVjdG9yIGF2YWlsYWJsZSB0byBkcml2ZXJzOiAodmVjdG9ycyAweDMwLTB4ZWUpCisgKiB3ZSBzdGFydCBhdCAweDMxIHRvIHNwcmVhZCBvdXQgdmVjdG9ycyBldmVubHkgYmV0d2VlbiBwcmlvcml0eQorICogbGV2ZWxzLiAoMHg4MCBpcyB0aGUgc3lzY2FsbCB2ZWN0b3IpCisgKi8KKyNkZWZpbmUgRklSU1RfREVWSUNFX1ZFQ1RPUgkweDMxCisjZGVmaW5lIEZJUlNUX1NZU1RFTV9WRUNUT1IJMHhlZgorCisjZGVmaW5lIFRJTUVSX0lSUSAwCisKKy8qCisgKiAxNiA4MjU5QSBJUlEncywgMjA4IHBvdGVudGlhbCBBUElDIGludGVycnVwdCBzb3VyY2VzLgorICogUmlnaHQgbm93IHRoZSBBUElDIGlzIG1vc3RseSBvbmx5IHVzZWQgZm9yIFNNUC4KKyAqIDI1NiB2ZWN0b3JzIGlzIGFuIGFyY2hpdGVjdHVyYWwgbGltaXQuICh3ZSBjYW4gaGF2ZQorICogbW9yZSB0aGFuIDI1NiBkZXZpY2VzIHRoZW9yZXRpY2FsbHksIGJ1dCB0aGV5IHdpbGwKKyAqIGhhdmUgdG8gdXNlIHNoYXJlZCBpbnRlcnJ1cHRzKQorICogU2luY2UgdmVjdG9ycyAweDAwLTB4MWYgYXJlIHVzZWQvcmVzZXJ2ZWQgZm9yIHRoZSBDUFUsCisgKiB0aGUgdXNhYmxlIHZlY3RvciBzcGFjZSBpcyAweDIwLTB4ZmYgKDIyNCB2ZWN0b3JzKQorICovCisKKy8qCisgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgdmVjdG9ycyBzdXBwb3J0ZWQgYnkgaTM4NiBwcm9jZXNzb3JzCisgKiBpcyBsaW1pdGVkIHRvIDI1Ni4gRm9yIHByb2Nlc3NvcnMgb3RoZXIgdGhhbiBpMzg2LCBOUl9WRUNUT1JTCisgKiBzaG91bGQgYmUgY2hhbmdlZCBhY2NvcmRpbmdseS4KKyAqLworI2RlZmluZSBOUl9WRUNUT1JTIDI1NgorCisjaW5jbHVkZSAiaXJxX3ZlY3RvcnNfbGltaXRzLmgiCisKKyNkZWZpbmUgRlBVX0lSUQkJCTEzCisKKyNkZWZpbmUJRklSU1RfVk04Nl9JUlEJCTMKKyNkZWZpbmUgTEFTVF9WTTg2X0lSUQkJMTUKKyNkZWZpbmUgaW52YWxpZF92bTg2X2lycShpcnEpCSgoaXJxKSA8IDMgfHwgKGlycSkgPiAxNSkKKworCisjZW5kaWYgLyogX0FTTV9JUlFfVkVDVE9SU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L21hY2gtZGVmYXVsdC9pcnFfdmVjdG9yc19saW1pdHMuaCBiL2luY2x1ZGUvYXNtLWkzODYvbWFjaC1kZWZhdWx0L2lycV92ZWN0b3JzX2xpbWl0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMzAwMjYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L21hY2gtZGVmYXVsdC9pcnFfdmVjdG9yc19saW1pdHMuaApAQCAtMCwwICsxLDIxIEBACisjaWZuZGVmIF9BU01fSVJRX1ZFQ1RPUlNfTElNSVRTX0gKKyNkZWZpbmUgX0FTTV9JUlFfVkVDVE9SU19MSU1JVFNfSAorCisjaWZkZWYgQ09ORklHX1BDSV9NU0kKKyNkZWZpbmUgTlJfSVJRUyBGSVJTVF9TWVNURU1fVkVDVE9SCisjZGVmaW5lIE5SX0lSUV9WRUNUT1JTIE5SX0lSUVMKKyNlbHNlCisjaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCisjZGVmaW5lIE5SX0lSUVMgMjI0CisjIGlmICgyMjQgPj0gMzIgKiBOUl9DUFVTKQorIyBkZWZpbmUgTlJfSVJRX1ZFQ1RPUlMgTlJfSVJRUworIyBlbHNlCisjIGRlZmluZSBOUl9JUlFfVkVDVE9SUyAoMzIgKiBOUl9DUFVTKQorIyBlbmRpZgorI2Vsc2UKKyNkZWZpbmUgTlJfSVJRUyAxNgorI2RlZmluZSBOUl9JUlFfVkVDVE9SUyBOUl9JUlFTCisjZW5kaWYKKyNlbmRpZgorCisjZW5kaWYgLyogX0FTTV9JUlFfVkVDVE9SU19MSU1JVFNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9tYWNoLWRlZmF1bHQvbWFjaF9hcGljLmggYi9pbmNsdWRlL2FzbS1pMzg2L21hY2gtZGVmYXVsdC9tYWNoX2FwaWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjdmMWNkMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvbWFjaC1kZWZhdWx0L21hY2hfYXBpYy5oCkBAIC0wLDAgKzEsMTMzIEBACisjaWZuZGVmIF9fQVNNX01BQ0hfQVBJQ19ICisjZGVmaW5lIF9fQVNNX01BQ0hfQVBJQ19ICisKKyNpbmNsdWRlIDxtYWNoX2FwaWNkZWYuaD4KKyNpbmNsdWRlIDxhc20vc21wLmg+CisKKyNkZWZpbmUgQVBJQ19ERlJfVkFMVUUJKEFQSUNfREZSX0ZMQVQpCisKK3N0YXRpYyBpbmxpbmUgY3B1bWFza190IHRhcmdldF9jcHVzKHZvaWQpCit7IAorI2lmZGVmIENPTkZJR19TTVAKKwlyZXR1cm4gY3B1X29ubGluZV9tYXA7CisjZWxzZQorCXJldHVybiBjcHVtYXNrX29mX2NwdSgwKTsKKyNlbmRpZgorfSAKKyNkZWZpbmUgVEFSR0VUX0NQVVMgKHRhcmdldF9jcHVzKCkpCisKKyNkZWZpbmUgTk9fQkFMQU5DRV9JUlEgKDApCisjZGVmaW5lIGVzcl9kaXNhYmxlICgwKQorCisjZGVmaW5lIE5PX0lPQVBJQ19DSEVDSyAoMCkKKworI2RlZmluZSBJTlRfREVMSVZFUllfTU9ERSBkZXN0X0xvd2VzdFByaW8KKyNkZWZpbmUgSU5UX0RFU1RfTU9ERSAxICAgICAvKiBsb2dpY2FsIGRlbGl2ZXJ5IGJyb2FkY2FzdCB0byBhbGwgcHJvY3MgKi8KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGNoZWNrX2FwaWNpZF91c2VkKHBoeXNpZF9tYXNrX3QgYml0bWFwLCBpbnQgYXBpY2lkKQoreworCXJldHVybiBwaHlzaWRfaXNzZXQoYXBpY2lkLCBiaXRtYXApOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY2hlY2tfYXBpY2lkX3ByZXNlbnQoaW50IGJpdCkKK3sKKwlyZXR1cm4gcGh5c2lkX2lzc2V0KGJpdCwgcGh5c19jcHVfcHJlc2VudF9tYXApOworfQorCisvKgorICogU2V0IHVwIHRoZSBsb2dpY2FsIGRlc3RpbmF0aW9uIElELgorICoKKyAqIEludGVsIHJlY29tbWVuZHMgdG8gc2V0IERGUiwgTERSIGFuZCBUUFIgYmVmb3JlIGVuYWJsaW5nCisgKiBhbiBBUElDLiAgU2VlIGUuZy4gIkFQLTM4OCA4MjQ4OURYIFVzZXIncyBNYW51YWwiIChJbnRlbAorICogZG9jdW1lbnQgbnVtYmVyIDI5MjExNikuICBTbyBoZXJlIGl0IGdvZXMuLi4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGluaXRfYXBpY19sZHIodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHZhbDsKKworCWFwaWNfd3JpdGVfYXJvdW5kKEFQSUNfREZSLCBBUElDX0RGUl9WQUxVRSk7CisJdmFsID0gYXBpY19yZWFkKEFQSUNfTERSKSAmIH5BUElDX0xEUl9NQVNLOworCXZhbCB8PSBTRVRfQVBJQ19MT0dJQ0FMX0lEKDFVTCA8PCBzbXBfcHJvY2Vzc29yX2lkKCkpOworCWFwaWNfd3JpdGVfYXJvdW5kKEFQSUNfTERSLCB2YWwpOworfQorCitzdGF0aWMgaW5saW5lIHBoeXNpZF9tYXNrX3QgaW9hcGljX3BoeXNfaWRfbWFwKHBoeXNpZF9tYXNrX3QgcGh5c19tYXApCit7CisJcmV0dXJuIHBoeXNfbWFwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2x1c3RlcmVkX2FwaWNfY2hlY2sodm9pZCkKK3sKKwlwcmludGsoIkVuYWJsaW5nIEFQSUMgbW9kZTogICVzLiAgVXNpbmcgJWQgSS9PIEFQSUNzXG4iLAorCQkJCQkiRmxhdCIsIG5yX2lvYXBpY3MpOworfQorCitzdGF0aWMgaW5saW5lIGludCBtdWx0aV90aW1lcl9jaGVjayhpbnQgYXBpYywgaW50IGlycSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgYXBpY2lkX3RvX25vZGUoaW50IGxvZ2ljYWxfYXBpY2lkKQoreworCXJldHVybiAwOworfQorCisvKiBNYXBwaW5nIGZyb20gY3B1IG51bWJlciB0byBsb2dpY2FsIGFwaWNpZCAqLworc3RhdGljIGlubGluZSBpbnQgY3B1X3RvX2xvZ2ljYWxfYXBpY2lkKGludCBjcHUpCit7CisJcmV0dXJuIDEgPDwgY3B1OworfQorCitzdGF0aWMgaW5saW5lIGludCBjcHVfcHJlc2VudF90b19hcGljaWQoaW50IG1wc19jcHUpCit7CisJaWYgKG1wc19jcHUgPCBnZXRfcGh5c2ljYWxfYnJvYWRjYXN0KCkpCisJCXJldHVybiAgbXBzX2NwdTsKKwllbHNlCisJCXJldHVybiBCQURfQVBJQ0lEOworfQorCitzdGF0aWMgaW5saW5lIHBoeXNpZF9tYXNrX3QgYXBpY2lkX3RvX2NwdV9wcmVzZW50KGludCBwaHlzX2FwaWNpZCkKK3sKKwlyZXR1cm4gcGh5c2lkX21hc2tfb2ZfcGh5c2lkKHBoeXNfYXBpY2lkKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgbXBjX2FwaWNfaWQoc3RydWN0IG1wY19jb25maWdfcHJvY2Vzc29yICptLCAKKwkJCXN0cnVjdCBtcGNfY29uZmlnX3RyYW5zbGF0aW9uICp0cmFuc2xhdGlvbl9yZWNvcmQpCit7CisJcHJpbnRrKCJQcm9jZXNzb3IgIyVkICVsZDolbGQgQVBJQyB2ZXJzaW9uICVkXG4iLAorCQkJbS0+bXBjX2FwaWNpZCwKKwkJCShtLT5tcGNfY3B1ZmVhdHVyZSAmIENQVV9GQU1JTFlfTUFTSykgPj4gOCwKKwkJCShtLT5tcGNfY3B1ZmVhdHVyZSAmIENQVV9NT0RFTF9NQVNLKSA+PiA0LAorCQkJbS0+bXBjX2FwaWN2ZXIpOworCXJldHVybiAobS0+bXBjX2FwaWNpZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXR1cF9wb3J0aW9fcmVtYXAodm9pZCkKK3sKK30KKworc3RhdGljIGlubGluZSBpbnQgY2hlY2tfcGh5c19hcGljaWRfcHJlc2VudChpbnQgYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkKQoreworCXJldHVybiBwaHlzaWRfaXNzZXQoYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkLCBwaHlzX2NwdV9wcmVzZW50X21hcCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGFwaWNfaWRfcmVnaXN0ZXJlZCh2b2lkKQoreworCXJldHVybiBwaHlzaWRfaXNzZXQoR0VUX0FQSUNfSUQoYXBpY19yZWFkKEFQSUNfSUQpKSwgcGh5c19jcHVfcHJlc2VudF9tYXApOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjcHVfbWFza190b19hcGljaWQoY3B1bWFza190IGNwdW1hc2spCit7CisJcmV0dXJuIGNwdXNfYWRkcihjcHVtYXNrKVswXTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGVuYWJsZV9hcGljX21vZGUodm9pZCkKK3sKK30KKworc3RhdGljIGlubGluZSB1MzIgcGh5c19wa2dfaWQodTMyIGNwdWlkX2FwaWMsIGludCBpbmRleF9tc2IpCit7CisJcmV0dXJuIGNwdWlkX2FwaWMgPj4gaW5kZXhfbXNiOworfQorCisjZW5kaWYgLyogX19BU01fTUFDSF9BUElDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvbWFjaC1kZWZhdWx0L21hY2hfYXBpY2RlZi5oIGIvaW5jbHVkZS9hc20taTM4Ni9tYWNoLWRlZmF1bHQvbWFjaF9hcGljZGVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JjYjM1MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvbWFjaC1kZWZhdWx0L21hY2hfYXBpY2RlZi5oCkBAIC0wLDAgKzEsMTMgQEAKKyNpZm5kZWYgX19BU01fTUFDSF9BUElDREVGX0gKKyNkZWZpbmUgX19BU01fTUFDSF9BUElDREVGX0gKKworI2RlZmluZQkJQVBJQ19JRF9NQVNLCQkoMHhGPDwyNCkKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBnZXRfYXBpY19pZCh1bnNpZ25lZCBsb25nIHgpIAoreyAKKwlyZXR1cm4gKCgoeCk+PjI0KSYweEYpOworfSAKKworI2RlZmluZQkJR0VUX0FQSUNfSUQoeCkJZ2V0X2FwaWNfaWQoeCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L21hY2gtZGVmYXVsdC9tYWNoX2lwaS5oIGIvaW5jbHVkZS9hc20taTM4Ni9tYWNoLWRlZmF1bHQvbWFjaF9pcGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjJiMTdhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9tYWNoLWRlZmF1bHQvbWFjaF9pcGkuaApAQCAtMCwwICsxLDMwIEBACisjaWZuZGVmIF9fQVNNX01BQ0hfSVBJX0gKKyNkZWZpbmUgX19BU01fTUFDSF9JUElfSAorCit2b2lkIHNlbmRfSVBJX21hc2tfYml0bWFzayhjcHVtYXNrX3QgbWFzaywgaW50IHZlY3Rvcik7Cit2b2lkIF9fc2VuZF9JUElfc2hvcnRjdXQodW5zaWduZWQgaW50IHNob3J0Y3V0LCBpbnQgdmVjdG9yKTsKKworc3RhdGljIGlubGluZSB2b2lkIHNlbmRfSVBJX21hc2soY3B1bWFza190IG1hc2ssIGludCB2ZWN0b3IpCit7CisJc2VuZF9JUElfbWFza19iaXRtYXNrKG1hc2ssIHZlY3Rvcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZW5kX0lQSV9hbGxidXRzZWxmKGludCB2ZWN0b3IpCit7CisJLyoKKwkgKiBpZiB0aGVyZSBhcmUgbm8gb3RoZXIgQ1BVcyBpbiB0aGUgc3lzdGVtIHRoZW4gd2UgZ2V0IGFuIEFQSUMgc2VuZCAKKwkgKiBlcnJvciBpZiB3ZSB0cnkgdG8gYnJvYWRjYXN0LCB0aHVzIGF2b2lkIHNlbmRpbmcgSVBJcyBpbiB0aGlzIGNhc2UuCisJICovCisJaWYgKCEobnVtX29ubGluZV9jcHVzKCkgPiAxKSkKKwkJcmV0dXJuOworCisJX19zZW5kX0lQSV9zaG9ydGN1dChBUElDX0RFU1RfQUxMQlVULCB2ZWN0b3IpOworCXJldHVybjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNlbmRfSVBJX2FsbChpbnQgdmVjdG9yKQoreworCV9fc2VuZF9JUElfc2hvcnRjdXQoQVBJQ19ERVNUX0FMTElOQywgdmVjdG9yKTsKK30KKworI2VuZGlmIC8qIF9fQVNNX01BQ0hfSVBJX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvbWFjaC1kZWZhdWx0L21hY2hfbXBwYXJzZS5oIGIvaW5jbHVkZS9hc20taTM4Ni9tYWNoLWRlZmF1bHQvbWFjaF9tcHBhcnNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQzODMyNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvbWFjaC1kZWZhdWx0L21hY2hfbXBwYXJzZS5oCkBAIC0wLDAgKzEsMjggQEAKKyNpZm5kZWYgX19BU01fTUFDSF9NUFBBUlNFX0gKKyNkZWZpbmUgX19BU01fTUFDSF9NUFBBUlNFX0gKKworc3RhdGljIGlubGluZSB2b2lkIG1wY19vZW1fYnVzX2luZm8oc3RydWN0IG1wY19jb25maWdfYnVzICptLCBjaGFyICpuYW1lLCAKKwkJCQlzdHJ1Y3QgbXBjX2NvbmZpZ190cmFuc2xhdGlvbiAqdHJhbnNsYXRpb24pCit7CisvLwlEcHJpbnRrKCJCdXMgIyVkIGlzICVzXG4iLCBtLT5tcGNfYnVzaWQsIG5hbWUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbXBjX29lbV9wY2lfYnVzKHN0cnVjdCBtcGNfY29uZmlnX2J1cyAqbSwgCisJCQkJc3RydWN0IG1wY19jb25maWdfdHJhbnNsYXRpb24gKnRyYW5zbGF0aW9uKQoreworfQorCitzdGF0aWMgaW5saW5lIGludCBtcHNfb2VtX2NoZWNrKHN0cnVjdCBtcF9jb25maWdfdGFibGUgKm1wYywgY2hhciAqb2VtLCAKKwkJY2hhciAqcHJvZHVjdGlkKQoreworCXJldHVybiAwOworfQorCisvKiBIb29rIGZyb20gZ2VuZXJpYyBBQ1BJIHRhYmxlcy5jICovCitzdGF0aWMgaW5saW5lIGludCBhY3BpX21hZHRfb2VtX2NoZWNrKGNoYXIgKm9lbV9pZCwgY2hhciAqb2VtX3RhYmxlX2lkKQoreworCXJldHVybiAwOworfQorCisKKyNlbmRpZiAvKiBfX0FTTV9NQUNIX01QUEFSU0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9tYWNoLWRlZmF1bHQvbWFjaF9tcHNwZWMuaCBiL2luY2x1ZGUvYXNtLWkzODYvbWFjaC1kZWZhdWx0L21hY2hfbXBzcGVjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI1ZGFkYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvbWFjaC1kZWZhdWx0L21hY2hfbXBzcGVjLmgKQEAgLTAsMCArMSw4IEBACisjaWZuZGVmIF9fQVNNX01BQ0hfTVBTUEVDX0gKKyNkZWZpbmUgX19BU01fTUFDSF9NUFNQRUNfSAorCisjZGVmaW5lIE1BWF9JUlFfU09VUkNFUyAyNTYKKworI2RlZmluZSBNQVhfTVBfQlVTU0VTIDMyCisKKyNlbmRpZiAvKiBfX0FTTV9NQUNIX01QU1BFQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L21hY2gtZGVmYXVsdC9tYWNoX3JlYm9vdC5oIGIvaW5jbHVkZS9hc20taTM4Ni9tYWNoLWRlZmF1bHQvbWFjaF9yZWJvb3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjFlMjI3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9tYWNoLWRlZmF1bHQvbWFjaF9yZWJvb3QuaApAQCAtMCwwICsxLDMwIEBACisvKgorICogIGFyY2gvaTM4Ni9tYWNoLWdlbmVyaWMvbWFjaF9yZWJvb3QuaAorICoKKyAqICBNYWNoaW5lIHNwZWNpZmljIHJlYm9vdCBmdW5jdGlvbnMgZm9yIGdlbmVyaWMuCisgKiAgU3BsaXQgb3V0IGZyb20gcmVib290LmMgYnkgT3NhbXUgVG9taXRhIDx0b21pdGFAY2luZXQuY28uanA+CisgKi8KKyNpZm5kZWYgX01BQ0hfUkVCT09UX0gKKyNkZWZpbmUgX01BQ0hfUkVCT09UX0gKKworc3RhdGljIGlubGluZSB2b2lkIGtiX3dhaXQodm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCAweDEwMDAwOyBpKyspCisJCWlmICgoaW5iX3AoMHg2NCkgJiAweDAyKSA9PSAwKQorCQkJYnJlYWs7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtYWNoX3JlYm9vdCh2b2lkKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCAxMDA7IGkrKykgeworCQlrYl93YWl0KCk7CisJCXVkZWxheSg1MCk7CisJCW91dGIoMHhmZSwgMHg2NCk7ICAgICAgICAgLyogcHVsc2UgcmVzZXQgbG93ICovCisJCXVkZWxheSg1MCk7CisJfQorfQorCisjZW5kaWYgLyogIV9NQUNIX1JFQk9PVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L21hY2gtZGVmYXVsdC9tYWNoX3RpbWUuaCBiL2luY2x1ZGUvYXNtLWkzODYvbWFjaC1kZWZhdWx0L21hY2hfdGltZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3NDlhYTQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L21hY2gtZGVmYXVsdC9tYWNoX3RpbWUuaApAQCAtMCwwICsxLDEyMiBAQAorLyoKKyAqICBpbmNsdWRlL2FzbS1pMzg2L21hY2gtZGVmYXVsdC9tYWNoX3RpbWUuaAorICoKKyAqICBNYWNoaW5lIHNwZWNpZmljIHNldCBSVEMgZnVuY3Rpb24gZm9yIGdlbmVyaWMuCisgKiAgU3BsaXQgb3V0IGZyb20gdGltZS5jIGJ5IE9zYW11IFRvbWl0YSA8dG9taXRhQGNpbmV0LmNvLmpwPgorICovCisjaWZuZGVmIF9NQUNIX1RJTUVfSAorI2RlZmluZSBfTUFDSF9USU1FX0gKKworI2luY2x1ZGUgPGxpbnV4L21jMTQ2ODE4cnRjLmg+CisKKy8qIGZvciBjaGVjayB0aW1pbmcgY2FsbCBzZXRfcnRjX21tc3MoKSA1MDBtcyAgICAgKi8KKy8qIHVzZWQgaW4gYXJjaC9pMzg2L3RpbWUuYzo6ZG9fdGltZXJfaW50ZXJydXB0KCkgKi8KKyNkZWZpbmUgVVNFQ19BRlRFUgk1MDAwMDAKKyNkZWZpbmUgVVNFQ19CRUZPUkUJNTAwMDAwCisKKy8qCisgKiBJbiBvcmRlciB0byBzZXQgdGhlIENNT1MgY2xvY2sgcHJlY2lzZWx5LCBzZXRfcnRjX21tc3MgaGFzIHRvIGJlCisgKiBjYWxsZWQgNTAwIG1zIGFmdGVyIHRoZSBzZWNvbmQgbm93dGltZSBoYXMgc3RhcnRlZCwgYmVjYXVzZSB3aGVuCisgKiBub3d0aW1lIGlzIHdyaXR0ZW4gaW50byB0aGUgcmVnaXN0ZXJzIG9mIHRoZSBDTU9TIGNsb2NrLCBpdCB3aWxsCisgKiBqdW1wIHRvIHRoZSBuZXh0IHNlY29uZCBwcmVjaXNlbHkgNTAwIG1zIGxhdGVyLiBDaGVjayB0aGUgTW90b3JvbGEKKyAqIE1DMTQ2ODE4QSBvciBEYWxsYXMgRFMxMjg4NyBkYXRhIHNoZWV0IGZvciBkZXRhaWxzLgorICoKKyAqIEJVRzogVGhpcyByb3V0aW5lIGRvZXMgbm90IGhhbmRsZSBob3VyIG92ZXJmbG93IHByb3Blcmx5OyBpdCBqdXN0CisgKiAgICAgIHNldHMgdGhlIG1pbnV0ZXMuIFVzdWFsbHkgeW91J2xsIG9ubHkgbm90aWNlIHRoYXQgYWZ0ZXIgcmVib290IQorICovCitzdGF0aWMgaW5saW5lIGludCBtYWNoX3NldF9ydGNfbW1zcyh1bnNpZ25lZCBsb25nIG5vd3RpbWUpCit7CisJaW50IHJldHZhbCA9IDA7CisJaW50IHJlYWxfc2Vjb25kcywgcmVhbF9taW51dGVzLCBjbW9zX21pbnV0ZXM7CisJdW5zaWduZWQgY2hhciBzYXZlX2NvbnRyb2wsIHNhdmVfZnJlcV9zZWxlY3Q7CisKKwlzYXZlX2NvbnRyb2wgPSBDTU9TX1JFQUQoUlRDX0NPTlRST0wpOyAvKiB0ZWxsIHRoZSBjbG9jayBpdCdzIGJlaW5nIHNldCAqLworCUNNT1NfV1JJVEUoKHNhdmVfY29udHJvbHxSVENfU0VUKSwgUlRDX0NPTlRST0wpOworCisJc2F2ZV9mcmVxX3NlbGVjdCA9IENNT1NfUkVBRChSVENfRlJFUV9TRUxFQ1QpOyAvKiBzdG9wIGFuZCByZXNldCBwcmVzY2FsZXIgKi8KKwlDTU9TX1dSSVRFKChzYXZlX2ZyZXFfc2VsZWN0fFJUQ19ESVZfUkVTRVQyKSwgUlRDX0ZSRVFfU0VMRUNUKTsKKworCWNtb3NfbWludXRlcyA9IENNT1NfUkVBRChSVENfTUlOVVRFUyk7CisJaWYgKCEoc2F2ZV9jb250cm9sICYgUlRDX0RNX0JJTkFSWSkgfHwgUlRDX0FMV0FZU19CQ0QpCisJCUJDRF9UT19CSU4oY21vc19taW51dGVzKTsKKworCS8qCisJICogc2luY2Ugd2UncmUgb25seSBhZGp1c3RpbmcgbWludXRlcyBhbmQgc2Vjb25kcywKKwkgKiBkb24ndCBpbnRlcmZlcmUgd2l0aCBob3VyIG92ZXJmbG93LiBUaGlzIGF2b2lkcworCSAqIG1lc3Npbmcgd2l0aCB1bmtub3duIHRpbWUgem9uZXMgYnV0IHJlcXVpcmVzIHlvdXIKKwkgKiBSVEMgbm90IHRvIGJlIG9mZiBieSBtb3JlIHRoYW4gMTUgbWludXRlcworCSAqLworCXJlYWxfc2Vjb25kcyA9IG5vd3RpbWUgJSA2MDsKKwlyZWFsX21pbnV0ZXMgPSBub3d0aW1lIC8gNjA7CisJaWYgKCgoYWJzKHJlYWxfbWludXRlcyAtIGNtb3NfbWludXRlcykgKyAxNSkvMzApICYgMSkKKwkJcmVhbF9taW51dGVzICs9IDMwOwkJLyogY29ycmVjdCBmb3IgaGFsZiBob3VyIHRpbWUgem9uZSAqLworCXJlYWxfbWludXRlcyAlPSA2MDsKKworCWlmIChhYnMocmVhbF9taW51dGVzIC0gY21vc19taW51dGVzKSA8IDMwKSB7CisJCWlmICghKHNhdmVfY29udHJvbCAmIFJUQ19ETV9CSU5BUlkpIHx8IFJUQ19BTFdBWVNfQkNEKSB7CisJCQlCSU5fVE9fQkNEKHJlYWxfc2Vjb25kcyk7CisJCQlCSU5fVE9fQkNEKHJlYWxfbWludXRlcyk7CisJCX0KKwkJQ01PU19XUklURShyZWFsX3NlY29uZHMsUlRDX1NFQ09ORFMpOworCQlDTU9TX1dSSVRFKHJlYWxfbWludXRlcyxSVENfTUlOVVRFUyk7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgInNldF9ydGNfbW1zczogY2FuJ3QgdXBkYXRlIGZyb20gJWQgdG8gJWRcbiIsCisJCSAgICAgICBjbW9zX21pbnV0ZXMsIHJlYWxfbWludXRlcyk7CisJCXJldHZhbCA9IC0xOworCX0KKworCS8qIFRoZSBmb2xsb3dpbmcgZmxhZ3MgaGF2ZSB0byBiZSByZWxlYXNlZCBleGFjdGx5IGluIHRoaXMgb3JkZXIsCisJICogb3RoZXJ3aXNlIHRoZSBEUzEyODg3IChwb3B1bGFyIE1DMTQ2ODE4QSBjbG9uZSB3aXRoIGludGVncmF0ZWQKKwkgKiBiYXR0ZXJ5IGFuZCBxdWFydHopIHdpbGwgbm90IHJlc2V0IHRoZSBvc2NpbGxhdG9yIGFuZCB3aWxsIG5vdAorCSAqIHVwZGF0ZSBwcmVjaXNlbHkgNTAwIG1zIGxhdGVyLiBZb3Ugd29uJ3QgZmluZCB0aGlzIG1lbnRpb25lZCBpbgorCSAqIHRoZSBEYWxsYXMgU2VtaWNvbmR1Y3RvciBkYXRhIHNoZWV0cywgYnV0IHdobyBiZWxpZXZlcyBkYXRhCisJICogc2hlZXRzIGFueXdheSAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAtLSBNYXJrdXMgS3VobgorCSAqLworCUNNT1NfV1JJVEUoc2F2ZV9jb250cm9sLCBSVENfQ09OVFJPTCk7CisJQ01PU19XUklURShzYXZlX2ZyZXFfc2VsZWN0LCBSVENfRlJFUV9TRUxFQ1QpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1hY2hfZ2V0X2Ntb3NfdGltZSh2b2lkKQoreworCXVuc2lnbmVkIGludCB5ZWFyLCBtb24sIGRheSwgaG91ciwgbWluLCBzZWM7CisJaW50IGk7CisKKwkvKiBUaGUgTGludXggaW50ZXJwcmV0YXRpb24gb2YgdGhlIENNT1MgY2xvY2sgcmVnaXN0ZXIgY29udGVudHM6CisJICogV2hlbiB0aGUgVXBkYXRlLUluLVByb2dyZXNzIChVSVApIGZsYWcgZ29lcyBmcm9tIDEgdG8gMCwgdGhlCisJICogUlRDIHJlZ2lzdGVycyBzaG93IHRoZSBzZWNvbmQgd2hpY2ggaGFzIHByZWNpc2VseSBqdXN0IHN0YXJ0ZWQuCisJICogTGV0J3MgaG9wZSBvdGhlciBvcGVyYXRpbmcgc3lzdGVtcyBpbnRlcnByZXQgdGhlIFJUQyB0aGUgc2FtZSB3YXkuCisJICovCisJLyogcmVhZCBSVEMgZXhhY3RseSBvbiBmYWxsaW5nIGVkZ2Ugb2YgdXBkYXRlIGZsYWcgKi8KKwlmb3IgKGkgPSAwIDsgaSA8IDEwMDAwMDAgOyBpKyspCS8qIG1heSB0YWtlIHVwIHRvIDEgc2Vjb25kLi4uICovCisJCWlmIChDTU9TX1JFQUQoUlRDX0ZSRVFfU0VMRUNUKSAmIFJUQ19VSVApCisJCQlicmVhazsKKwlmb3IgKGkgPSAwIDsgaSA8IDEwMDAwMDAgOyBpKyspCS8qIG11c3QgdHJ5IGF0IGxlYXN0IDIuMjI4IG1zICovCisJCWlmICghKENNT1NfUkVBRChSVENfRlJFUV9TRUxFQ1QpICYgUlRDX1VJUCkpCisJCQlicmVhazsKKwlkbyB7IC8qIElzbid0IHRoaXMgb3ZlcmtpbGwgPyBVSVAgYWJvdmUgc2hvdWxkIGd1YXJhbnRlZSBjb25zaXN0ZW5jeSAqLworCQlzZWMgPSBDTU9TX1JFQUQoUlRDX1NFQ09ORFMpOworCQltaW4gPSBDTU9TX1JFQUQoUlRDX01JTlVURVMpOworCQlob3VyID0gQ01PU19SRUFEKFJUQ19IT1VSUyk7CisJCWRheSA9IENNT1NfUkVBRChSVENfREFZX09GX01PTlRIKTsKKwkJbW9uID0gQ01PU19SRUFEKFJUQ19NT05USCk7CisJCXllYXIgPSBDTU9TX1JFQUQoUlRDX1lFQVIpOworCX0gd2hpbGUgKHNlYyAhPSBDTU9TX1JFQUQoUlRDX1NFQ09ORFMpKTsKKwlpZiAoIShDTU9TX1JFQUQoUlRDX0NPTlRST0wpICYgUlRDX0RNX0JJTkFSWSkgfHwgUlRDX0FMV0FZU19CQ0QpCisJICB7CisJICAgIEJDRF9UT19CSU4oc2VjKTsKKwkgICAgQkNEX1RPX0JJTihtaW4pOworCSAgICBCQ0RfVE9fQklOKGhvdXIpOworCSAgICBCQ0RfVE9fQklOKGRheSk7CisJICAgIEJDRF9UT19CSU4obW9uKTsKKwkgICAgQkNEX1RPX0JJTih5ZWFyKTsKKwkgIH0KKwlpZiAoKHllYXIgKz0gMTkwMCkgPCAxOTcwKQorCQl5ZWFyICs9IDEwMDsKKworCXJldHVybiBta3RpbWUoeWVhciwgbW9uLCBkYXksIGhvdXIsIG1pbiwgc2VjKTsKK30KKworI2VuZGlmIC8qICFfTUFDSF9USU1FX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvbWFjaC1kZWZhdWx0L21hY2hfdGltZXIuaCBiL2luY2x1ZGUvYXNtLWkzODYvbWFjaC1kZWZhdWx0L21hY2hfdGltZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Yjk3MDNiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9tYWNoLWRlZmF1bHQvbWFjaF90aW1lci5oCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiAgaW5jbHVkZS9hc20taTM4Ni9tYWNoLWRlZmF1bHQvbWFjaF90aW1lci5oCisgKgorICogIE1hY2hpbmUgc3BlY2lmaWMgY2FsaWJyYXRlX3RzYygpIGZvciBnZW5lcmljLgorICogIFNwbGl0IG91dCBmcm9tIHRpbWVyX3RzYy5jIGJ5IE9zYW11IFRvbWl0YSA8dG9taXRhQGNpbmV0LmNvLmpwPgorICovCisvKiAtLS0tLS0gQ2FsaWJyYXRlIHRoZSBUU0MgLS0tLS0tLSAKKyAqIFJldHVybiAyXjMyICogKDEgLyAoVFNDIGNsb2NrcyBwZXIgdXNlYykpIGZvciBkb19mYXN0X2dldHRpbWVvZmZzZXQoKS4KKyAqIFRvbyBtdWNoIDY0LWJpdCBhcml0aG1ldGljIGhlcmUgdG8gZG8gdGhpcyBjbGVhbmx5IGluIEMsIGFuZCBmb3IKKyAqIGFjY3VyYWN5J3Mgc2FrZSB3ZSB3YW50IHRvIGtlZXAgdGhlIG92ZXJoZWFkIG9uIHRoZSBDVEMgc3BlYWtlciAoY2hhbm5lbCAyKQorICogb3V0cHV0IGJ1c3kgbG9vcCBhcyBsb3cgYXMgcG9zc2libGUuIFdlIGF2b2lkIHJlYWRpbmcgdGhlIENUQyByZWdpc3RlcnMKKyAqIGRpcmVjdGx5IGJlY2F1c2Ugb2YgdGhlIGF3a3dhcmQgOC1iaXQgYWNjZXNzIG1lY2hhbmlzbSBvZiB0aGUgODJDNTQKKyAqIGRldmljZS4KKyAqLworI2lmbmRlZiBfTUFDSF9USU1FUl9ICisjZGVmaW5lIF9NQUNIX1RJTUVSX0gKKworI2RlZmluZSBDQUxJQlJBVEVfTEFUQ0gJKDUgKiBMQVRDSCkKKworc3RhdGljIGlubGluZSB2b2lkIG1hY2hfcHJlcGFyZV9jb3VudGVyKHZvaWQpCit7CisgICAgICAgLyogU2V0IHRoZSBHYXRlIGhpZ2gsIGRpc2FibGUgc3BlYWtlciAqLworCW91dGIoKGluYigweDYxKSAmIH4weDAyKSB8IDB4MDEsIDB4NjEpOworCisJLyoKKwkgKiBOb3cgbGV0J3MgdGFrZSBjYXJlIG9mIENUQyBjaGFubmVsIDIKKwkgKgorCSAqIFNldCB0aGUgR2F0ZSBoaWdoLCBwcm9ncmFtIENUQyBjaGFubmVsIDIgZm9yIG1vZGUgMCwKKwkgKiAoaW50ZXJydXB0IG9uIHRlcm1pbmFsIGNvdW50IG1vZGUpLCBiaW5hcnkgY291bnQsCisJICogbG9hZCA1ICogTEFUQ0ggY291bnQsIChMU0IgYW5kIE1TQikgdG8gYmVnaW4gY291bnRkb3duLgorCSAqCisJICogU29tZSBkZXZpY2VzIG5lZWQgYSBkZWxheSBoZXJlLgorCSAqLworCW91dGIoMHhiMCwgMHg0Myk7CQkJLyogYmluYXJ5LCBtb2RlIDAsIExTQi9NU0IsIENoIDIgKi8KKwlvdXRiX3AoQ0FMSUJSQVRFX0xBVENIICYgMHhmZiwgMHg0Mik7CS8qIExTQiBvZiBjb3VudCAqLworCW91dGJfcChDQUxJQlJBVEVfTEFUQ0ggPj4gOCwgMHg0Mik7ICAgICAgIC8qIE1TQiBvZiBjb3VudCAqLworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbWFjaF9jb3VudHVwKHVuc2lnbmVkIGxvbmcgKmNvdW50X3ApCit7CisJdW5zaWduZWQgbG9uZyBjb3VudCA9IDA7CisJZG8geworCQljb3VudCsrOworCX0gd2hpbGUgKChpbmJfcCgweDYxKSAmIDB4MjApID09IDApOworCSpjb3VudF9wID0gY291bnQ7Cit9CisKKyNlbmRpZiAvKiAhX01BQ0hfVElNRVJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9tYWNoLWRlZmF1bHQvbWFjaF90cmFwcy5oIGIvaW5jbHVkZS9hc20taTM4Ni9tYWNoLWRlZmF1bHQvbWFjaF90cmFwcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNTQzOGIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L21hY2gtZGVmYXVsdC9tYWNoX3RyYXBzLmgKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqICBpbmNsdWRlL2FzbS1pMzg2L21hY2gtZGVmYXVsdC9tYWNoX3RyYXBzLmgKKyAqCisgKiAgTWFjaGluZSBzcGVjaWZpYyBOTUkgaGFuZGxpbmcgZm9yIGdlbmVyaWMuCisgKiAgU3BsaXQgb3V0IGZyb20gdHJhcHMuYyBieSBPc2FtdSBUb21pdGEgPHRvbWl0YUBjaW5ldC5jby5qcD4KKyAqLworI2lmbmRlZiBfTUFDSF9UUkFQU19ICisjZGVmaW5lIF9NQUNIX1RSQVBTX0gKKworI2luY2x1ZGUgPGFzbS9tYzE0NjgxOHJ0Yy5oPgorCitzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfbWVtX2Vycm9yKHVuc2lnbmVkIGNoYXIgcmVhc29uKQoreworCXJlYXNvbiA9IChyZWFzb24gJiAweGYpIHwgNDsKKwlvdXRiKHJlYXNvbiwgMHg2MSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciBnZXRfbm1pX3JlYXNvbih2b2lkKQoreworCXJldHVybiBpbmIoMHg2MSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByZWFzc2VydF9ubWkodm9pZCkKK3sKKwlpbnQgb2xkX3JlZyA9IC0xOworCisJaWYgKGRvX2lfaGF2ZV9sb2NrX2Ntb3MoKSkKKwkJb2xkX3JlZyA9IGN1cnJlbnRfbG9ja19jbW9zX3JlZygpOworCWVsc2UKKwkJbG9ja19jbW9zKDApOyAvKiByZWdpc3RlciBkb2Vzbid0IG1hdHRlciBoZXJlICovCisJb3V0YigweDhmLCAweDcwKTsKKwlpbmIoMHg3MSk7CQkvKiBkdW1teSAqLworCW91dGIoMHgwZiwgMHg3MCk7CisJaW5iKDB4NzEpOwkJLyogZHVtbXkgKi8KKwlpZiAob2xkX3JlZyA+PSAwKQorCQlvdXRiKG9sZF9yZWcsIDB4NzApOworCWVsc2UKKwkJdW5sb2NrX2Ntb3MoKTsKK30KKworI2VuZGlmIC8qICFfTUFDSF9UUkFQU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L21hY2gtZGVmYXVsdC9tYWNoX3dha2VjcHUuaCBiL2luY2x1ZGUvYXNtLWkzODYvbWFjaC1kZWZhdWx0L21hY2hfd2FrZWNwdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3M2I4NWMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L21hY2gtZGVmYXVsdC9tYWNoX3dha2VjcHUuaApAQCAtMCwwICsxLDQxIEBACisjaWZuZGVmIF9fQVNNX01BQ0hfV0FLRUNQVV9ICisjZGVmaW5lIF9fQVNNX01BQ0hfV0FLRUNQVV9ICisKKy8qIAorICogVGhpcyBmaWxlIGNvcGVzIHdpdGggbWFjaGluZXMgdGhhdCB3YWtldXAgc2Vjb25kYXJ5IENQVXMgYnkgdGhlCisgKiBJTklULCBJTklULCBTVEFSVFVQIHNlcXVlbmNlLgorICovCisKKyNkZWZpbmUgV0FLRV9TRUNPTkRBUllfVklBX0lOSVQKKworI2RlZmluZSBUUkFNUE9MSU5FX0xPVyBwaHlzX3RvX3ZpcnQoMHg0NjcpCisjZGVmaW5lIFRSQU1QT0xJTkVfSElHSCBwaHlzX3RvX3ZpcnQoMHg0NjkpCisKKyNkZWZpbmUgYm9vdF9jcHVfYXBpY2lkIGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZAorCitzdGF0aWMgaW5saW5lIHZvaWQgd2FpdF9mb3JfaW5pdF9kZWFzc2VydChhdG9taWNfdCAqZGVhc3NlcnQpCit7CisJd2hpbGUgKCFhdG9taWNfcmVhZChkZWFzc2VydCkpOworCXJldHVybjsKK30KKworLyogTm90aGluZyB0byBkbyBmb3IgbW9zdCBwbGF0Zm9ybXMsIHNpbmNlIGNsZWFyZWQgYnkgdGhlIElOSVQgY3ljbGUgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzbXBfY2FsbGluX2NsZWFyX2xvY2FsX2FwaWModm9pZCkKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN0b3JlX05NSV92ZWN0b3IodW5zaWduZWQgc2hvcnQgKmhpZ2gsIHVuc2lnbmVkIHNob3J0ICpsb3cpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByZXN0b3JlX05NSV92ZWN0b3IodW5zaWduZWQgc2hvcnQgKmhpZ2gsIHVuc2lnbmVkIHNob3J0ICpsb3cpCit7Cit9CisKKyNpZiBBUElDX0RFQlVHCisgI2RlZmluZSBpbnF1aXJlX3JlbW90ZV9hcGljKGFwaWNpZCkgX19pbnF1aXJlX3JlbW90ZV9hcGljKGFwaWNpZCkKKyNlbHNlCisgI2RlZmluZSBpbnF1aXJlX3JlbW90ZV9hcGljKGFwaWNpZCkge30KKyNlbmRpZgorCisjZW5kaWYgLyogX19BU01fTUFDSF9XQUtFQ1BVX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvbWFjaC1kZWZhdWx0L3BjaS1mdW5jdGlvbnMuaCBiL2luY2x1ZGUvYXNtLWkzODYvbWFjaC1kZWZhdWx0L3BjaS1mdW5jdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDBiYWI0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9tYWNoLWRlZmF1bHQvcGNpLWZ1bmN0aW9ucy5oCkBAIC0wLDAgKzEsMTkgQEAKKy8qCisgKglQQ0kgQklPUyBmdW5jdGlvbiBudW1iZXJpbmcgZm9yIGNvbnZlbnRpb25hbCBQQ0kgQklPUyAKKyAqCXN5c3RlbXMKKyAqLworCisjZGVmaW5lIFBDSUJJT1NfUENJX0ZVTkNUSU9OX0lEIAkweGIxWFgKKyNkZWZpbmUgUENJQklPU19QQ0lfQklPU19QUkVTRU5UIAkweGIxMDEKKyNkZWZpbmUgUENJQklPU19GSU5EX1BDSV9ERVZJQ0UJCTB4YjEwMgorI2RlZmluZSBQQ0lCSU9TX0ZJTkRfUENJX0NMQVNTX0NPREUJMHhiMTAzCisjZGVmaW5lIFBDSUJJT1NfR0VORVJBVEVfU1BFQ0lBTF9DWUNMRQkweGIxMDYKKyNkZWZpbmUgUENJQklPU19SRUFEX0NPTkZJR19CWVRFCTB4YjEwOAorI2RlZmluZSBQQ0lCSU9TX1JFQURfQ09ORklHX1dPUkQJMHhiMTA5CisjZGVmaW5lIFBDSUJJT1NfUkVBRF9DT05GSUdfRFdPUkQJMHhiMTBhCisjZGVmaW5lIFBDSUJJT1NfV1JJVEVfQ09ORklHX0JZVEUJMHhiMTBiCisjZGVmaW5lIFBDSUJJT1NfV1JJVEVfQ09ORklHX1dPUkQJMHhiMTBjCisjZGVmaW5lIFBDSUJJT1NfV1JJVEVfQ09ORklHX0RXT1JECTB4YjEwZAorI2RlZmluZSBQQ0lCSU9TX0dFVF9ST1VUSU5HX09QVElPTlMJMHhiMTBlCisjZGVmaW5lIFBDSUJJT1NfU0VUX1BDSV9IV19JTlQJCTB4YjEwZgorCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L21hY2gtZGVmYXVsdC9zZXR1cF9hcmNoX3Bvc3QuaCBiL2luY2x1ZGUvYXNtLWkzODYvbWFjaC1kZWZhdWx0L3NldHVwX2FyY2hfcG9zdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmYzQ4ODgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L21hY2gtZGVmYXVsdC9zZXR1cF9hcmNoX3Bvc3QuaApAQCAtMCwwICsxLDQwIEBACisvKioKKyAqIG1hY2hpbmVfc3BlY2lmaWNfbWVtb3J5X3NldHVwIC0gSG9vayBmb3IgbWFjaGluZSBzcGVjaWZpYyBtZW1vcnkgc2V0dXAuCisgKgorICogRGVzY3JpcHRpb246CisgKglUaGlzIGlzIGluY2x1ZGVkIGxhdGUgaW4ga2VybmVsL3NldHVwLmMgc28gdGhhdCBpdCBjYW4gbWFrZQorICoJdXNlIG9mIGFsbCBvZiB0aGUgc3RhdGljIGZ1bmN0aW9ucy4KKyAqKi8KKworc3RhdGljIGNoYXIgKiBfX2luaXQgbWFjaGluZV9zcGVjaWZpY19tZW1vcnlfc2V0dXAodm9pZCkKK3sKKwljaGFyICp3aG87CisKKworCXdobyA9ICJCSU9TLWU4MjAiOworCisJLyoKKwkgKiBUcnkgdG8gY29weSB0aGUgQklPUy1zdXBwbGllZCBFODIwLW1hcC4KKwkgKgorCSAqIE90aGVyd2lzZSBmYWtlIGEgbWVtb3J5IG1hcDsgb25lIHNlY3Rpb24gZnJvbSAway0+NjQwaywKKwkgKiB0aGUgbmV4dCBzZWN0aW9uIGZyb20gMW1iLT5hcHByb3ByaWF0ZV9tZW1faworCSAqLworCXNhbml0aXplX2U4MjBfbWFwKEU4MjBfTUFQLCAmRTgyMF9NQVBfTlIpOworCWlmIChjb3B5X2U4MjBfbWFwKEU4MjBfTUFQLCBFODIwX01BUF9OUikgPCAwKSB7CisJCXVuc2lnbmVkIGxvbmcgbWVtX3NpemU7CisKKwkJLyogY29tcGFyZSByZXN1bHRzIGZyb20gb3RoZXIgbWV0aG9kcyBhbmQgdGFrZSB0aGUgZ3JlYXRlciAqLworCQlpZiAoQUxUX01FTV9LIDwgRVhUX01FTV9LKSB7CisJCQltZW1fc2l6ZSA9IEVYVF9NRU1fSzsKKwkJCXdobyA9ICJCSU9TLTg4IjsKKwkJfSBlbHNlIHsKKwkJCW1lbV9zaXplID0gQUxUX01FTV9LOworCQkJd2hvID0gIkJJT1MtZTgwMSI7CisJCX0KKworCQllODIwLm5yX21hcCA9IDA7CisJCWFkZF9tZW1vcnlfcmVnaW9uKDAsIExPV01FTVNJWkUoKSwgRTgyMF9SQU0pOworCQlhZGRfbWVtb3J5X3JlZ2lvbihISUdIX01FTU9SWSwgbWVtX3NpemUgPDwgMTAsIEU4MjBfUkFNKTsKKyAgCX0KKwlyZXR1cm4gd2hvOworfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9tYWNoLWRlZmF1bHQvc2V0dXBfYXJjaF9wcmUuaCBiL2luY2x1ZGUvYXNtLWkzODYvbWFjaC1kZWZhdWx0L3NldHVwX2FyY2hfcHJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI0MjA5OWUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L21hY2gtZGVmYXVsdC9zZXR1cF9hcmNoX3ByZS5oCkBAIC0wLDAgKzEsNSBAQAorLyogSG9vayB0byBjYWxsIEJJT1MgaW5pdGlhbGlzYXRpb24gZnVuY3Rpb24gKi8KKworLyogbm8gYWN0aW9uIGZvciBnZW5lcmljICovCisKKyNkZWZpbmUgQVJDSF9TRVRVUApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9tYWNoLWRlZmF1bHQvc21wYm9vdF9ob29rcy5oIGIvaW5jbHVkZS9hc20taTM4Ni9tYWNoLWRlZmF1bHQvc21wYm9vdF9ob29rcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmNDVmNjMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L21hY2gtZGVmYXVsdC9zbXBib290X2hvb2tzLmgKQEAgLTAsMCArMSw0NCBAQAorLyogdHdvIGFic3RyYWN0aW9ucyBzcGVjaWZpYyB0byBrZXJuZWwvc21wYm9vdC5jLCBtYWlubHkgdG8gY2F0ZXIgdG8gdmlzd3MKKyAqIHdoaWNoIG5lZWRzIHRvIGFsdGVyIHRoZW0uICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbXBib290X2NsZWFyX2lvX2FwaWNfaXJxcyh2b2lkKQoreworCWlvX2FwaWNfaXJxcyA9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbXBib290X3NldHVwX3dhcm1fcmVzZXRfdmVjdG9yKHVuc2lnbmVkIGxvbmcgc3RhcnRfZWlwKQoreworCUNNT1NfV1JJVEUoMHhhLCAweGYpOworCWxvY2FsX2ZsdXNoX3RsYigpOworCURwcmludGsoIjEuXG4iKTsKKwkqKCh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSBUUkFNUE9MSU5FX0hJR0gpID0gc3RhcnRfZWlwID4+IDQ7CisJRHByaW50aygiMi5cbiIpOworCSooKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopIFRSQU1QT0xJTkVfTE9XKSA9IHN0YXJ0X2VpcCAmIDB4ZjsKKwlEcHJpbnRrKCIzLlxuIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbXBib290X3Jlc3RvcmVfd2FybV9yZXNldF92ZWN0b3Iodm9pZCkKK3sKKwkvKgorCSAqIEluc3RhbGwgd3JpdGFibGUgcGFnZSAwIGVudHJ5IHRvIHNldCBCSU9TIGRhdGEgYXJlYS4KKwkgKi8KKwlsb2NhbF9mbHVzaF90bGIoKTsKKworCS8qCisJICogUGFyYW5vaWQ6ICBTZXQgd2FybSByZXNldCBjb2RlIGFuZCB2ZWN0b3IgaGVyZSBiYWNrCisJICogdG8gZGVmYXVsdCB2YWx1ZXMuCisJICovCisJQ01PU19XUklURSgwLCAweGYpOworCisJKigodm9sYXRpbGUgbG9uZyAqKSBwaHlzX3RvX3ZpcnQoMHg0NjcpKSA9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbXBib290X3NldHVwX2lvX2FwaWModm9pZCkKK3sKKwkvKgorCSAqIEhlcmUgd2UgY2FuIGJlIHN1cmUgdGhhdCB0aGVyZSBpcyBhbiBJTy1BUElDIGluIHRoZSBzeXN0ZW0uIExldCdzCisJICogZ28gYW5kIHNldCBpdCB1cDoKKwkgKi8KKwlpZiAoIXNraXBfaW9hcGljX3NldHVwICYmIG5yX2lvYXBpY3MpCisJCXNldHVwX0lPX0FQSUMoKTsKK30KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvbWFjaC1lczcwMDAvbWFjaF9hcGljLmggYi9pbmNsdWRlL2FzbS1pMzg2L21hY2gtZXM3MDAwL21hY2hfYXBpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlYWIyYzQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L21hY2gtZXM3MDAwL21hY2hfYXBpYy5oCkBAIC0wLDAgKzEsMjA3IEBACisjaWZuZGVmIF9fQVNNX01BQ0hfQVBJQ19ICisjZGVmaW5lIF9fQVNNX01BQ0hfQVBJQ19ICisKK2V4dGVybiB1OCBiaW9zX2NwdV9hcGljaWRbXTsKKworI2RlZmluZSB4YXBpY19waHlzX3RvX2xvZ19hcGljaWQoY3B1KSAoYmlvc19jcHVfYXBpY2lkW2NwdV0pCisjZGVmaW5lIGVzcl9kaXNhYmxlICgxKQorCitzdGF0aWMgaW5saW5lIGludCBhcGljX2lkX3JlZ2lzdGVyZWQodm9pZCkKK3sKKwkgICAgICAgIHJldHVybiAoMSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgY3B1bWFza190IHRhcmdldF9jcHVzKHZvaWQpCit7IAorI2lmIGRlZmluZWQgQ09ORklHX0VTNzAwMF9DTFVTVEVSRURfQVBJQworCXJldHVybiBDUFVfTUFTS19BTEw7CisjZWxzZQorCXJldHVybiBjcHVtYXNrX29mX2NwdShzbXBfcHJvY2Vzc29yX2lkKCkpOworI2VuZGlmCit9CisjZGVmaW5lIFRBUkdFVF9DUFVTCSh0YXJnZXRfY3B1cygpKQorCisjaWYgZGVmaW5lZCBDT05GSUdfRVM3MDAwX0NMVVNURVJFRF9BUElDCisjZGVmaW5lIEFQSUNfREZSX1ZBTFVFCQkoQVBJQ19ERlJfQ0xVU1RFUikKKyNkZWZpbmUgSU5UX0RFTElWRVJZX01PREUJKGRlc3RfTG93ZXN0UHJpbykKKyNkZWZpbmUgSU5UX0RFU1RfTU9ERQkJKDEpICAgIC8qIGxvZ2ljYWwgZGVsaXZlcnkgYnJvYWRjYXN0IHRvIGFsbCBwcm9jcyAqLworI2RlZmluZSBOT19CQUxBTkNFX0lSUSAJCSgxKQorI3VuZGVmICBXQUtFX1NFQ09OREFSWV9WSUFfSU5JVAorI2RlZmluZSBXQUtFX1NFQ09OREFSWV9WSUFfTUlQCisjZWxzZQorI2RlZmluZSBBUElDX0RGUl9WQUxVRQkJKEFQSUNfREZSX0ZMQVQpCisjZGVmaW5lIElOVF9ERUxJVkVSWV9NT0RFCShkZXN0X0ZpeGVkKQorI2RlZmluZSBJTlRfREVTVF9NT0RFCQkoMCkgICAgLyogcGh5cyBkZWxpdmVyeSB0byB0YXJnZXQgcHJvY3MgKi8KKyNkZWZpbmUgTk9fQkFMQU5DRV9JUlEgCQkoMCkKKyN1bmRlZiAgQVBJQ19ERVNUX0xPR0lDQUwKKyNkZWZpbmUgQVBJQ19ERVNUX0xPR0lDQUwJMHgwCisjZGVmaW5lIFdBS0VfU0VDT05EQVJZX1ZJQV9JTklUCisjZW5kaWYKKworI2RlZmluZSBOT19JT0FQSUNfQ0hFQ0sgKDEpCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjaGVja19hcGljaWRfdXNlZChwaHlzaWRfbWFza190IGJpdG1hcCwgaW50IGFwaWNpZCkKK3sgCisJcmV0dXJuIDA7Cit9IAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGNoZWNrX2FwaWNpZF9wcmVzZW50KGludCBiaXQpIAoreworCXJldHVybiBwaHlzaWRfaXNzZXQoYml0LCBwaHlzX2NwdV9wcmVzZW50X21hcCk7Cit9CisKKyNkZWZpbmUgYXBpY2lkX2NsdXN0ZXIoYXBpY2lkKSAoYXBpY2lkICYgMHhGMCkKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGNhbGN1bGF0ZV9sZHIoaW50IGNwdSkKK3sKKwl1bnNpZ25lZCBsb25nIGlkOworCWlkID0geGFwaWNfcGh5c190b19sb2dfYXBpY2lkKGNwdSk7CisJcmV0dXJuIChTRVRfQVBJQ19MT0dJQ0FMX0lEKGlkKSk7Cit9CisKKy8qCisgKiBTZXQgdXAgdGhlIGxvZ2ljYWwgZGVzdGluYXRpb24gSUQuCisgKgorICogSW50ZWwgcmVjb21tZW5kcyB0byBzZXQgREZSLCBMZFIgYW5kIFRQUiBiZWZvcmUgZW5hYmxpbmcKKyAqIGFuIEFQSUMuICBTZWUgZS5nLiAiQVAtMzg4IDgyNDg5RFggVXNlcidzIE1hbnVhbCIgKEludGVsCisgKiBkb2N1bWVudCBudW1iZXIgMjkyMTE2KS4gIFNvIGhlcmUgaXQgZ29lcy4uLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9hcGljX2xkcih2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgdmFsOworCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisKKwlhcGljX3dyaXRlX2Fyb3VuZChBUElDX0RGUiwgQVBJQ19ERlJfVkFMVUUpOworCXZhbCA9IGNhbGN1bGF0ZV9sZHIoY3B1KTsKKwlhcGljX3dyaXRlX2Fyb3VuZChBUElDX0xEUiwgdmFsKTsKK30KKworZXh0ZXJuIHZvaWQgZXM3MDAwX3N3X2FwaWModm9pZCk7CitzdGF0aWMgaW5saW5lIHZvaWQgZW5hYmxlX2FwaWNfbW9kZSh2b2lkKQoreworCWVzNzAwMF9zd19hcGljKCk7CisJcmV0dXJuOworfQorCitleHRlcm4gaW50IGFwaWNfdmVyc2lvbiBbTUFYX0FQSUNTXTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbHVzdGVyZWRfYXBpY19jaGVjayh2b2lkKQoreworCWludCBhcGljID0gYmlvc19jcHVfYXBpY2lkW3NtcF9wcm9jZXNzb3JfaWQoKV07CisJcHJpbnRrKCJFbmFibGluZyBBUElDIG1vZGU6ICAlcy4gIFVzaW5nICVkIEkvTyBBUElDcywgdGFyZ2V0IGNwdXMgJWx4XG4iLAorCQkoYXBpY192ZXJzaW9uW2FwaWNdID09IDB4MTQpID8gCisJCSJQaHlzaWNhbCBDbHVzdGVyIiA6ICJMb2dpY2FsIENsdXN0ZXIiLCBucl9pb2FwaWNzLCBjcHVzX2FkZHIoVEFSR0VUX0NQVVMpWzBdKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgbXVsdGlfdGltZXJfY2hlY2soaW50IGFwaWMsIGludCBpcnEpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGFwaWNpZF90b19ub2RlKGludCBsb2dpY2FsX2FwaWNpZCkKK3sKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW5saW5lIGludCBjcHVfcHJlc2VudF90b19hcGljaWQoaW50IG1wc19jcHUpCit7CisJaWYgKCFtcHNfY3B1KQorCQlyZXR1cm4gYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkOworCWVsc2UgaWYgKG1wc19jcHUgPCBOUl9DUFVTKQorCQlyZXR1cm4gKGludCkgYmlvc19jcHVfYXBpY2lkW21wc19jcHVdOworCWVsc2UKKwkJcmV0dXJuIEJBRF9BUElDSUQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgcGh5c2lkX21hc2tfdCBhcGljaWRfdG9fY3B1X3ByZXNlbnQoaW50IHBoeXNfYXBpY2lkKQoreworCXN0YXRpYyBpbnQgaWQgPSAwOworCXBoeXNpZF9tYXNrX3QgbWFzazsKKwltYXNrID0gcGh5c2lkX21hc2tfb2ZfcGh5c2lkKGlkKTsKKwkrK2lkOworCXJldHVybiBtYXNrOworfQorCitleHRlcm4gdTggY3B1XzJfbG9naWNhbF9hcGljaWRbXTsKKy8qIE1hcHBpbmcgZnJvbSBjcHUgbnVtYmVyIHRvIGxvZ2ljYWwgYXBpY2lkICovCitzdGF0aWMgaW5saW5lIGludCBjcHVfdG9fbG9naWNhbF9hcGljaWQoaW50IGNwdSkKK3sKKyAgICAgICBpZiAoY3B1ID49IE5SX0NQVVMpCisJICAgICAgIHJldHVybiBCQURfQVBJQ0lEOworICAgICAgIHJldHVybiAoaW50KWNwdV8yX2xvZ2ljYWxfYXBpY2lkW2NwdV07Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG1wY19hcGljX2lkKHN0cnVjdCBtcGNfY29uZmlnX3Byb2Nlc3NvciAqbSwgc3RydWN0IG1wY19jb25maWdfdHJhbnNsYXRpb24gKnVudXNlZCkKK3sKKwlwcmludGsoIlByb2Nlc3NvciAjJWQgJWxkOiVsZCBBUElDIHZlcnNpb24gJWRcbiIsCisJICAgICAgICBtLT5tcGNfYXBpY2lkLAorCSAgICAgICAgKG0tPm1wY19jcHVmZWF0dXJlICYgQ1BVX0ZBTUlMWV9NQVNLKSA+PiA4LAorCSAgICAgICAgKG0tPm1wY19jcHVmZWF0dXJlICYgQ1BVX01PREVMX01BU0spID4+IDQsCisJICAgICAgICBtLT5tcGNfYXBpY3Zlcik7CisJcmV0dXJuIChtLT5tcGNfYXBpY2lkKTsKK30KKworc3RhdGljIGlubGluZSBwaHlzaWRfbWFza190IGlvYXBpY19waHlzX2lkX21hcChwaHlzaWRfbWFza190IHBoeXNfbWFwKQoreworCS8qIEZvciBjbHVzdGVyZWQgd2UgZG9uJ3QgaGF2ZSBhIGdvb2Qgd2F5IHRvIGRvIHRoaXMgeWV0IC0gaGFjayAqLworCXJldHVybiBwaHlzaWRzX3Byb21vdGUoMHhmZik7Cit9CisKKworc3RhdGljIGlubGluZSB2b2lkIHNldHVwX3BvcnRpb19yZW1hcCh2b2lkKQoreworfQorCitleHRlcm4gdW5zaWduZWQgaW50IGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZDsKK3N0YXRpYyBpbmxpbmUgaW50IGNoZWNrX3BoeXNfYXBpY2lkX3ByZXNlbnQoaW50IGNwdV9waHlzaWNhbF9hcGljaWQpCit7CisJYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkID0gR0VUX0FQSUNfSUQoYXBpY19yZWFkKEFQSUNfSUQpKTsKKwlyZXR1cm4gKDEpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjcHVfbWFza190b19hcGljaWQoY3B1bWFza190IGNwdW1hc2spCit7CisJaW50IG51bV9iaXRzX3NldDsKKwlpbnQgY3B1c19mb3VuZCA9IDA7CisJaW50IGNwdTsKKwlpbnQgYXBpY2lkOwkKKworCW51bV9iaXRzX3NldCA9IGNwdXNfd2VpZ2h0KGNwdW1hc2spOworCS8qIFJldHVybiBpZCB0byBhbGwgKi8KKwlpZiAobnVtX2JpdHNfc2V0ID09IE5SX0NQVVMpCisjaWYgZGVmaW5lZCBDT05GSUdfRVM3MDAwX0NMVVNURVJFRF9BUElDCisJCXJldHVybiAweEZGOworI2Vsc2UKKwkJcmV0dXJuIGNwdV90b19sb2dpY2FsX2FwaWNpZCgwKTsKKyNlbmRpZgorCS8qIAorCSAqIFRoZSBjcHVzIGluIHRoZSBtYXNrIG11c3QgYWxsIGJlIG9uIHRoZSBhcGljIGNsdXN0ZXIuICBJZiBhcmUgbm90IAorCSAqIG9uIHRoZSBzYW1lIGFwaWNpZCBjbHVzdGVyIHJldHVybiBkZWZhdWx0IHZhbHVlIG9mIFRBUkdFVF9DUFVTLiAKKwkgKi8KKwljcHUgPSBmaXJzdF9jcHUoY3B1bWFzayk7CisJYXBpY2lkID0gY3B1X3RvX2xvZ2ljYWxfYXBpY2lkKGNwdSk7CisJd2hpbGUgKGNwdXNfZm91bmQgPCBudW1fYml0c19zZXQpIHsKKwkJaWYgKGNwdV9pc3NldChjcHUsIGNwdW1hc2spKSB7CisJCQlpbnQgbmV3X2FwaWNpZCA9IGNwdV90b19sb2dpY2FsX2FwaWNpZChjcHUpOworCQkJaWYgKGFwaWNpZF9jbHVzdGVyKGFwaWNpZCkgIT0gCisJCQkJCWFwaWNpZF9jbHVzdGVyKG5ld19hcGljaWQpKXsKKwkJCQlwcmludGsgKCIlczogTm90IGEgdmFsaWQgbWFzayFcbiIsX19GVU5DVElPTl9fKTsKKyNpZiBkZWZpbmVkIENPTkZJR19FUzcwMDBfQ0xVU1RFUkVEX0FQSUMKKwkJCQlyZXR1cm4gMHhGRjsKKyNlbHNlCisJCQkJcmV0dXJuIGNwdV90b19sb2dpY2FsX2FwaWNpZCgwKTsKKyNlbmRpZgorCQkJfQorCQkJYXBpY2lkID0gbmV3X2FwaWNpZDsKKwkJCWNwdXNfZm91bmQrKzsKKwkJfQorCQljcHUrKzsKKwl9CisJcmV0dXJuIGFwaWNpZDsKK30KKworc3RhdGljIGlubGluZSB1MzIgcGh5c19wa2dfaWQodTMyIGNwdWlkX2FwaWMsIGludCBpbmRleF9tc2IpCit7CisJcmV0dXJuIGNwdWlkX2FwaWMgPj4gaW5kZXhfbXNiOworfQorCisjZW5kaWYgLyogX19BU01fTUFDSF9BUElDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvbWFjaC1lczcwMDAvbWFjaF9hcGljZGVmLmggYi9pbmNsdWRlL2FzbS1pMzg2L21hY2gtZXM3MDAwL21hY2hfYXBpY2RlZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1OGFiNWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L21hY2gtZXM3MDAwL21hY2hfYXBpY2RlZi5oCkBAIC0wLDAgKzEsMTMgQEAKKyNpZm5kZWYgX19BU01fTUFDSF9BUElDREVGX0gKKyNkZWZpbmUgX19BU01fTUFDSF9BUElDREVGX0gKKworI2RlZmluZQkJQVBJQ19JRF9NQVNLCQkoMHhGRjw8MjQpCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgZ2V0X2FwaWNfaWQodW5zaWduZWQgbG9uZyB4KSAKK3sgCisJcmV0dXJuICgoKHgpPj4yNCkmMHhGRik7Cit9IAorCisjZGVmaW5lCQlHRVRfQVBJQ19JRCh4KQlnZXRfYXBpY19pZCh4KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvbWFjaC1lczcwMDAvbWFjaF9pcGkuaCBiL2luY2x1ZGUvYXNtLWkzODYvbWFjaC1lczcwMDAvbWFjaF9pcGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTYxYmQyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9tYWNoLWVzNzAwMC9tYWNoX2lwaS5oCkBAIC0wLDAgKzEsMjQgQEAKKyNpZm5kZWYgX19BU01fTUFDSF9JUElfSAorI2RlZmluZSBfX0FTTV9NQUNIX0lQSV9ICisKK3ZvaWQgc2VuZF9JUElfbWFza19zZXF1ZW5jZShjcHVtYXNrX3QgbWFzaywgaW50IHZlY3Rvcik7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZW5kX0lQSV9tYXNrKGNwdW1hc2tfdCBtYXNrLCBpbnQgdmVjdG9yKQoreworCXNlbmRfSVBJX21hc2tfc2VxdWVuY2UobWFzaywgdmVjdG9yKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNlbmRfSVBJX2FsbGJ1dHNlbGYoaW50IHZlY3RvcikKK3sKKwljcHVtYXNrX3QgbWFzayA9IGNwdV9vbmxpbmVfbWFwOworCWNwdV9jbGVhcihzbXBfcHJvY2Vzc29yX2lkKCksIG1hc2spOworCWlmICghY3B1c19lbXB0eShtYXNrKSkKKwkJc2VuZF9JUElfbWFzayhtYXNrLCB2ZWN0b3IpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2VuZF9JUElfYWxsKGludCB2ZWN0b3IpCit7CisJc2VuZF9JUElfbWFzayhjcHVfb25saW5lX21hcCwgdmVjdG9yKTsKK30KKworI2VuZGlmIC8qIF9fQVNNX01BQ0hfSVBJX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvbWFjaC1lczcwMDAvbWFjaF9tcHBhcnNlLmggYi9pbmNsdWRlL2FzbS1pMzg2L21hY2gtZXM3MDAwL21hY2hfbXBwYXJzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1ODA5ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L21hY2gtZXM3MDAwL21hY2hfbXBwYXJzZS5oCkBAIC0wLDAgKzEsNDEgQEAKKyNpZm5kZWYgX19BU01fTUFDSF9NUFBBUlNFX0gKKyNkZWZpbmUgX19BU01fTUFDSF9NUFBBUlNFX0gKKworc3RhdGljIGlubGluZSB2b2lkIG1wY19vZW1fYnVzX2luZm8oc3RydWN0IG1wY19jb25maWdfYnVzICptLCBjaGFyICpuYW1lLCAKKwkJCQlzdHJ1Y3QgbXBjX2NvbmZpZ190cmFuc2xhdGlvbiAqdHJhbnNsYXRpb24pCit7CisJRHByaW50aygiQnVzICMlZCBpcyAlc1xuIiwgbS0+bXBjX2J1c2lkLCBuYW1lKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG1wY19vZW1fcGNpX2J1cyhzdHJ1Y3QgbXBjX2NvbmZpZ19idXMgKm0sIAorCQkJCXN0cnVjdCBtcGNfY29uZmlnX3RyYW5zbGF0aW9uICp0cmFuc2xhdGlvbikKK3sKK30KKworZXh0ZXJuIGludCBwYXJzZV91bmlzeXNfb2VtIChjaGFyICpvZW1wdHIsIGludCBvZW1fZW50cmllcyk7CitleHRlcm4gaW50IGZpbmRfdW5pc3lzX2FjcGlfb2VtX3RhYmxlKHVuc2lnbmVkIGxvbmcgKm9lbV9hZGRyLCBpbnQgKmxlbmd0aCk7CisKK3N0YXRpYyBpbmxpbmUgaW50IG1wc19vZW1fY2hlY2soc3RydWN0IG1wX2NvbmZpZ190YWJsZSAqbXBjLCBjaGFyICpvZW0sCisJCWNoYXIgKnByb2R1Y3RpZCkKK3sKKwlpZiAobXBjLT5tcGNfb2VtcHRyKSB7CisJCXN0cnVjdCBtcF9jb25maWdfb2VtdGFibGUgKm9lbV90YWJsZSA9IAorCQkJKHN0cnVjdCBtcF9jb25maWdfb2VtdGFibGUgKiltcGMtPm1wY19vZW1wdHI7CisJCWlmICghc3RybmNtcChvZW0sICJVTklTWVMiLCA2KSkKKwkJCXJldHVybiBwYXJzZV91bmlzeXNfb2VtKChjaGFyICopb2VtX3RhYmxlLCBvZW1fdGFibGUtPm9lbV9sZW5ndGgpOworCX0KKwlyZXR1cm4gMDsKK30KKworLyogSG9vayBmcm9tIGdlbmVyaWMgQUNQSSB0YWJsZXMuYyAqLworc3RhdGljIGlubGluZSBpbnQgYWNwaV9tYWR0X29lbV9jaGVjayhjaGFyICpvZW1faWQsIGNoYXIgKm9lbV90YWJsZV9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIG9lbV9hZGRyOyAKKwlpbnQgb2VtX2VudHJpZXM7CisJaWYgKCFmaW5kX3VuaXN5c19hY3BpX29lbV90YWJsZSgmb2VtX2FkZHIsICZvZW1fZW50cmllcykpCisJCXJldHVybiBwYXJzZV91bmlzeXNfb2VtKChjaGFyICopb2VtX2FkZHIsIG9lbV9lbnRyaWVzKTsKKwlyZXR1cm4gMDsKK30KKworCisjZW5kaWYgLyogX19BU01fTUFDSF9NUFBBUlNFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvbWFjaC1lczcwMDAvbWFjaF9tcHNwZWMuaCBiL2luY2x1ZGUvYXNtLWkzODYvbWFjaC1lczcwMDAvbWFjaF9tcHNwZWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWY1MDM5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9tYWNoLWVzNzAwMC9tYWNoX21wc3BlYy5oCkBAIC0wLDAgKzEsOCBAQAorI2lmbmRlZiBfX0FTTV9NQUNIX01QU1BFQ19ICisjZGVmaW5lIF9fQVNNX01BQ0hfTVBTUEVDX0gKKworI2RlZmluZSBNQVhfSVJRX1NPVVJDRVMgMjU2CisKKyNkZWZpbmUgTUFYX01QX0JVU1NFUyAyNTYKKworI2VuZGlmIC8qIF9fQVNNX01BQ0hfTVBTUEVDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvbWFjaC1lczcwMDAvbWFjaF93YWtlY3B1LmggYi9pbmNsdWRlL2FzbS1pMzg2L21hY2gtZXM3MDAwL21hY2hfd2FrZWNwdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmYzkwM2IKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L21hY2gtZXM3MDAwL21hY2hfd2FrZWNwdS5oCkBAIC0wLDAgKzEsNTggQEAKKyNpZm5kZWYgX19BU01fTUFDSF9XQUtFQ1BVX0gKKyNkZWZpbmUgX19BU01fTUFDSF9XQUtFQ1BVX0gKKworLyogCisgKiBUaGlzIGZpbGUgY29wZXMgd2l0aCBtYWNoaW5lcyB0aGF0IHdha2V1cCBzZWNvbmRhcnkgQ1BVcyBieSB0aGUKKyAqIElOSVQsIElOSVQsIFNUQVJUVVAgc2VxdWVuY2UuCisgKi8KKworI2lmZGVmIENPTkZJR19FUzcwMDBfQ0xVU1RFUkVEX0FQSUMKKyNkZWZpbmUgV0FLRV9TRUNPTkRBUllfVklBX01JUAorI2Vsc2UKKyNkZWZpbmUgV0FLRV9TRUNPTkRBUllfVklBX0lOSVQKKyNlbmRpZgorCisjaWZkZWYgV0FLRV9TRUNPTkRBUllfVklBX01JUAorZXh0ZXJuIGludCBlczcwMDBfc3RhcnRfY3B1KGludCBjcHUsIHVuc2lnbmVkIGxvbmcgZWlwKTsKK3N0YXRpYyBpbmxpbmUgaW50Cit3YWtldXBfc2Vjb25kYXJ5X2NwdShpbnQgcGh5c19hcGljaWQsIHVuc2lnbmVkIGxvbmcgc3RhcnRfZWlwKQoreworCWludCBib290X2Vycm9yID0gMDsKKwlib290X2Vycm9yID0gZXM3MDAwX3N0YXJ0X2NwdShwaHlzX2FwaWNpZCwgc3RhcnRfZWlwKTsKKwlyZXR1cm4gYm9vdF9lcnJvcjsKK30KKyNlbmRpZgorCisjZGVmaW5lIFRSQU1QT0xJTkVfTE9XIHBoeXNfdG9fdmlydCgweDQ2NykKKyNkZWZpbmUgVFJBTVBPTElORV9ISUdIIHBoeXNfdG9fdmlydCgweDQ2OSkKKworI2RlZmluZSBib290X2NwdV9hcGljaWQgYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkCisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3YWl0X2Zvcl9pbml0X2RlYXNzZXJ0KGF0b21pY190ICpkZWFzc2VydCkKK3sKKyNpZmRlZiBXQUtFX1NFQ09OREFSWV9WSUFfSU5JVAorCXdoaWxlICghYXRvbWljX3JlYWQoZGVhc3NlcnQpKTsKKyNlbmRpZgorCXJldHVybjsKK30KKworLyogTm90aGluZyB0byBkbyBmb3IgbW9zdCBwbGF0Zm9ybXMsIHNpbmNlIGNsZWFyZWQgYnkgdGhlIElOSVQgY3ljbGUgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzbXBfY2FsbGluX2NsZWFyX2xvY2FsX2FwaWModm9pZCkKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN0b3JlX05NSV92ZWN0b3IodW5zaWduZWQgc2hvcnQgKmhpZ2gsIHVuc2lnbmVkIHNob3J0ICpsb3cpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByZXN0b3JlX05NSV92ZWN0b3IodW5zaWduZWQgc2hvcnQgKmhpZ2gsIHVuc2lnbmVkIHNob3J0ICpsb3cpCit7Cit9CisKKyNpZiBBUElDX0RFQlVHCisgI2RlZmluZSBpbnF1aXJlX3JlbW90ZV9hcGljKGFwaWNpZCkgX19pbnF1aXJlX3JlbW90ZV9hcGljKGFwaWNpZCkKKyNlbHNlCisgI2RlZmluZSBpbnF1aXJlX3JlbW90ZV9hcGljKGFwaWNpZCkge30KKyNlbmRpZgorCisjZW5kaWYgLyogX19BU01fTUFDSF9XQUtFQ1BVX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvbWFjaC1nZW5lcmljL2lycV92ZWN0b3JzX2xpbWl0cy5oIGIvaW5jbHVkZS9hc20taTM4Ni9tYWNoLWdlbmVyaWMvaXJxX3ZlY3RvcnNfbGltaXRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODkwY2UzZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvbWFjaC1nZW5lcmljL2lycV92ZWN0b3JzX2xpbWl0cy5oCkBAIC0wLDAgKzEsMTQgQEAKKyNpZm5kZWYgX0FTTV9JUlFfVkVDVE9SU19MSU1JVFNfSAorI2RlZmluZSBfQVNNX0lSUV9WRUNUT1JTX0xJTUlUU19ICisKKy8qCisgKiBGb3IgU3VtbWl0IG9yIGdlbmVyaWMgKGkuZS4gaW5zdGFsbGVyKSBrZXJuZWxzLCB3ZSBoYXZlIGxvdHMgb2YgSS9PIEFQSUNzLAorICogZXZlbiB3aXRoIHVuaS1wcm9jIGtlcm5lbHMsIHNvIHVzZSBhIGJpZyBhcnJheS4KKyAqCisgKiBUaGlzIHZhbHVlIHNob3VsZCBiZSB0aGUgc2FtZSBpbiBib3RoIHRoZSBnZW5lcmljIGFuZCBzdW1taXQgc3ViYXJjaGVzLgorICogQ2hhbmdlIG9uZSwgY2hhbmdlICdlbSBib3RoLgorICovCisjZGVmaW5lIE5SX0lSUVMJMjI0CisjZGVmaW5lIE5SX0lSUV9WRUNUT1JTCTEwMjQKKworI2VuZGlmIC8qIF9BU01fSVJRX1ZFQ1RPUlNfTElNSVRTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvbWFjaC1nZW5lcmljL21hY2hfYXBpYy5oIGIvaW5jbHVkZS9hc20taTM4Ni9tYWNoLWdlbmVyaWMvbWFjaF9hcGljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWIzNmQwMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvbWFjaC1nZW5lcmljL21hY2hfYXBpYy5oCkBAIC0wLDAgKzEsMzIgQEAKKyNpZm5kZWYgX19BU01fTUFDSF9BUElDX0gKKyNkZWZpbmUgX19BU01fTUFDSF9BUElDX0gKKworI2luY2x1ZGUgPGFzbS9nZW5hcGljLmg+CisKKyNkZWZpbmUgZXNyX2Rpc2FibGUgKGdlbmFwaWMtPkVTUl9ESVNBQkxFKQorI2RlZmluZSBOT19CQUxBTkNFX0lSUSAoZ2VuYXBpYy0+bm9fYmFsYW5jZV9pcnEpCisjZGVmaW5lIE5PX0lPQVBJQ19DSEVDSwkoZ2VuYXBpYy0+bm9faW9hcGljX2NoZWNrKQorI2RlZmluZSBJTlRfREVMSVZFUllfTU9ERSAoZ2VuYXBpYy0+aW50X2RlbGl2ZXJ5X21vZGUpCisjZGVmaW5lIElOVF9ERVNUX01PREUgKGdlbmFwaWMtPmludF9kZXN0X21vZGUpCisjdW5kZWYgQVBJQ19ERVNUX0xPR0lDQUwKKyNkZWZpbmUgQVBJQ19ERVNUX0xPR0lDQUwgKGdlbmFwaWMtPmFwaWNfZGVzdGluYXRpb25fbG9naWNhbCkKKyNkZWZpbmUgVEFSR0VUX0NQVVMJICAoZ2VuYXBpYy0+dGFyZ2V0X2NwdXMoKSkKKyNkZWZpbmUgYXBpY19pZF9yZWdpc3RlcmVkIChnZW5hcGljLT5hcGljX2lkX3JlZ2lzdGVyZWQpCisjZGVmaW5lIGluaXRfYXBpY19sZHIgKGdlbmFwaWMtPmluaXRfYXBpY19sZHIpCisjZGVmaW5lIGlvYXBpY19waHlzX2lkX21hcCAoZ2VuYXBpYy0+aW9hcGljX3BoeXNfaWRfbWFwKQorI2RlZmluZSBjbHVzdGVyZWRfYXBpY19jaGVjayAoZ2VuYXBpYy0+Y2x1c3RlcmVkX2FwaWNfY2hlY2spIAorI2RlZmluZSBtdWx0aV90aW1lcl9jaGVjayAoZ2VuYXBpYy0+bXVsdGlfdGltZXJfY2hlY2spCisjZGVmaW5lIGFwaWNpZF90b19ub2RlIChnZW5hcGljLT5hcGljaWRfdG9fbm9kZSkKKyNkZWZpbmUgY3B1X3RvX2xvZ2ljYWxfYXBpY2lkIChnZW5hcGljLT5jcHVfdG9fbG9naWNhbF9hcGljaWQpIAorI2RlZmluZSBjcHVfcHJlc2VudF90b19hcGljaWQgKGdlbmFwaWMtPmNwdV9wcmVzZW50X3RvX2FwaWNpZCkKKyNkZWZpbmUgYXBpY2lkX3RvX2NwdV9wcmVzZW50IChnZW5hcGljLT5hcGljaWRfdG9fY3B1X3ByZXNlbnQpCisjZGVmaW5lIG1wY19hcGljX2lkIChnZW5hcGljLT5tcGNfYXBpY19pZCkgCisjZGVmaW5lIHNldHVwX3BvcnRpb19yZW1hcCAoZ2VuYXBpYy0+c2V0dXBfcG9ydGlvX3JlbWFwKQorI2RlZmluZSBjaGVja19hcGljaWRfcHJlc2VudCAoZ2VuYXBpYy0+Y2hlY2tfYXBpY2lkX3ByZXNlbnQpCisjZGVmaW5lIGNoZWNrX3BoeXNfYXBpY2lkX3ByZXNlbnQgKGdlbmFwaWMtPmNoZWNrX3BoeXNfYXBpY2lkX3ByZXNlbnQpCisjZGVmaW5lIGNoZWNrX2FwaWNpZF91c2VkIChnZW5hcGljLT5jaGVja19hcGljaWRfdXNlZCkKKyNkZWZpbmUgY3B1X21hc2tfdG9fYXBpY2lkIChnZW5hcGljLT5jcHVfbWFza190b19hcGljaWQpCisjZGVmaW5lIGVuYWJsZV9hcGljX21vZGUgKGdlbmFwaWMtPmVuYWJsZV9hcGljX21vZGUpCisjZGVmaW5lIHBoeXNfcGtnX2lkIChnZW5hcGljLT5waHlzX3BrZ19pZCkKKworI2VuZGlmIC8qIF9fQVNNX01BQ0hfQVBJQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L21hY2gtZ2VuZXJpYy9tYWNoX2FwaWNkZWYuaCBiL2luY2x1ZGUvYXNtLWkzODYvbWFjaC1nZW5lcmljL21hY2hfYXBpY2RlZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4ZWQ5ODkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L21hY2gtZ2VuZXJpYy9tYWNoX2FwaWNkZWYuaApAQCAtMCwwICsxLDExIEBACisjaWZuZGVmIF9HRU5BUElDX01BQ0hfQVBJQ0RFRl9ICisjZGVmaW5lIF9HRU5BUElDX01BQ0hfQVBJQ0RFRl9IIDEKKworI2lmbmRlZiBBUElDX0RFRklOSVRJT04KKyNpbmNsdWRlIDxhc20vZ2VuYXBpYy5oPgorCisjZGVmaW5lIEdFVF9BUElDX0lEIChnZW5hcGljLT5nZXRfYXBpY19pZCkKKyNkZWZpbmUgQVBJQ19JRF9NQVNLIChnZW5hcGljLT5hcGljX2lkX21hc2spCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L21hY2gtZ2VuZXJpYy9tYWNoX2lwaS5oIGIvaW5jbHVkZS9hc20taTM4Ni9tYWNoLWdlbmVyaWMvbWFjaF9pcGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDFiMGZlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9tYWNoLWdlbmVyaWMvbWFjaF9pcGkuaApAQCAtMCwwICsxLDEwIEBACisjaWZuZGVmIF9NQUNIX0lQSV9ICisjZGVmaW5lIF9NQUNIX0lQSV9IIDEKKworI2luY2x1ZGUgPGFzbS9nZW5hcGljLmg+CisKKyNkZWZpbmUgc2VuZF9JUElfbWFzayAoZ2VuYXBpYy0+c2VuZF9JUElfbWFzaykKKyNkZWZpbmUgc2VuZF9JUElfYWxsYnV0c2VsZiAoZ2VuYXBpYy0+c2VuZF9JUElfYWxsYnV0c2VsZikKKyNkZWZpbmUgc2VuZF9JUElfYWxsIChnZW5hcGljLT5zZW5kX0lQSV9hbGwpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9tYWNoLWdlbmVyaWMvbWFjaF9tcHBhcnNlLmggYi9pbmNsdWRlL2FzbS1pMzg2L21hY2gtZ2VuZXJpYy9tYWNoX21wcGFyc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmQ5ZmNlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9tYWNoLWdlbmVyaWMvbWFjaF9tcHBhcnNlLmgKQEAgLTAsMCArMSwxMiBAQAorI2lmbmRlZiBfTUFDSF9NUFBBUlNFX0gKKyNkZWZpbmUgX01BQ0hfTVBQQVJTRV9IIDEKKworI2luY2x1ZGUgPGFzbS9nZW5hcGljLmg+CisKKyNkZWZpbmUgbXBjX29lbV9idXNfaW5mbyAoZ2VuYXBpYy0+bXBjX29lbV9idXNfaW5mbykKKyNkZWZpbmUgbXBjX29lbV9wY2lfYnVzIChnZW5hcGljLT5tcGNfb2VtX3BjaV9idXMpCisKK2ludCBtcHNfb2VtX2NoZWNrKHN0cnVjdCBtcF9jb25maWdfdGFibGUgKm1wYywgY2hhciAqb2VtLCBjaGFyICpwcm9kdWN0aWQpOyAKK2ludCBhY3BpX21hZHRfb2VtX2NoZWNrKGNoYXIgKm9lbV9pZCwgY2hhciAqb2VtX3RhYmxlX2lkKTsgCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9tYWNoLWdlbmVyaWMvbWFjaF9tcHNwZWMuaCBiL2luY2x1ZGUvYXNtLWkzODYvbWFjaC1nZW5lcmljL21hY2hfbXBzcGVjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWVmMGI5NAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvbWFjaC1nZW5lcmljL21hY2hfbXBzcGVjLmgKQEAgLTAsMCArMSwxMCBAQAorI2lmbmRlZiBfX0FTTV9NQUNIX01QU1BFQ19ICisjZGVmaW5lIF9fQVNNX01BQ0hfTVBTUEVDX0gKKworI2RlZmluZSBNQVhfSVJRX1NPVVJDRVMgMjU2CisKKy8qIFN1bW1pdCBvciBnZW5lcmljIChpLmUuIGluc3RhbGxlcikga2VybmVscyBuZWVkIGxvdHMgb2YgYnVzIGVudHJpZXMuICovCisvKiBNYXhpbXVtIDI1NiBQQ0kgYnVzc2VzLCBwbHVzIDEgSVNBIGJ1cyBpbiBlYWNoIG9mIDQgY2FiaW5ldHMuICovCisjZGVmaW5lIE1BWF9NUF9CVVNTRVMgMjYwCisKKyNlbmRpZiAvKiBfX0FTTV9NQUNIX01QU1BFQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L21hY2gtbnVtYXEvbWFjaF9hcGljLmggYi9pbmNsdWRlL2FzbS1pMzg2L21hY2gtbnVtYXEvbWFjaF9hcGljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFhMDQ0OQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvbWFjaC1udW1hcS9tYWNoX2FwaWMuaApAQCAtMCwwICsxLDE1MSBAQAorI2lmbmRlZiBfX0FTTV9NQUNIX0FQSUNfSAorI2RlZmluZSBfX0FTTV9NQUNIX0FQSUNfSAorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvbW16b25lLmg+CisjaW5jbHVkZSA8bGludXgvbm9kZW1hc2suaD4KKworI2RlZmluZSBBUElDX0RGUl9WQUxVRQkoQVBJQ19ERlJfQ0xVU1RFUikKKworc3RhdGljIGlubGluZSBjcHVtYXNrX3QgdGFyZ2V0X2NwdXModm9pZCkKK3sKKwlyZXR1cm4gQ1BVX01BU0tfQUxMOworfQorCisjZGVmaW5lIFRBUkdFVF9DUFVTICh0YXJnZXRfY3B1cygpKQorCisjZGVmaW5lIE5PX0JBTEFOQ0VfSVJRICgxKQorI2RlZmluZSBlc3JfZGlzYWJsZSAoMSkKKworI2RlZmluZSBOT19JT0FQSUNfQ0hFQ0sgKDApCisKKyNkZWZpbmUgSU5UX0RFTElWRVJZX01PREUgZGVzdF9Mb3dlc3RQcmlvCisjZGVmaW5lIElOVF9ERVNUX01PREUgMCAgICAgLyogcGh5c2ljYWwgZGVsaXZlcnkgb24gTE9DQUwgcXVhZCAqLworIAorI2RlZmluZSBjaGVja19hcGljaWRfdXNlZChiaXRtYXAsIGFwaWNpZCkgcGh5c2lkX2lzc2V0KGFwaWNpZCwgYml0bWFwKQorI2RlZmluZSBjaGVja19hcGljaWRfcHJlc2VudChiaXQpIHBoeXNpZF9pc3NldChiaXQsIHBoeXNfY3B1X3ByZXNlbnRfbWFwKQorI2RlZmluZSBhcGljaWRfY2x1c3RlcihhcGljaWQpIChhcGljaWQgJiAweEYwKQorCitzdGF0aWMgaW5saW5lIGludCBhcGljX2lkX3JlZ2lzdGVyZWQodm9pZCkKK3sKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGluaXRfYXBpY19sZHIodm9pZCkKK3sKKwkvKiBBbHJlYWR5IGRvbmUgaW4gTlVNQS1RIGZpcm13YXJlICovCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbHVzdGVyZWRfYXBpY19jaGVjayh2b2lkKQoreworCXByaW50aygiRW5hYmxpbmcgQVBJQyBtb2RlOiAgJXMuICBVc2luZyAlZCBJL08gQVBJQ3NcbiIsCisJCSJOVU1BLVEiLCBucl9pb2FwaWNzKTsKK30KKworLyoKKyAqIFNraXAgYWRkaW5nIHRoZSB0aW1lciBpbnQgb24gc2Vjb25kYXJ5IG5vZGVzLCB3aGljaCBjYXVzZXMKKyAqIGEgc21hbGwgYnV0IHBhaW5mdWwgcmlmdCBpbiB0aGUgdGltZS1zcGFjZSBjb250aW51dW0uCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IG11bHRpX3RpbWVyX2NoZWNrKGludCBhcGljLCBpbnQgaXJxKQoreworCXJldHVybiBhcGljICE9IDAgJiYgaXJxID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgcGh5c2lkX21hc2tfdCBpb2FwaWNfcGh5c19pZF9tYXAocGh5c2lkX21hc2tfdCBwaHlzX21hcCkKK3sKKwkvKiBXZSBkb24ndCBoYXZlIGEgZ29vZCB3YXkgdG8gZG8gdGhpcyB5ZXQgLSBoYWNrICovCisJcmV0dXJuIHBoeXNpZHNfcHJvbW90ZSgweEZVTCk7Cit9CisKKy8qIE1hcHBpbmcgZnJvbSBjcHUgbnVtYmVyIHRvIGxvZ2ljYWwgYXBpY2lkICovCitleHRlcm4gdTggY3B1XzJfbG9naWNhbF9hcGljaWRbXTsKK3N0YXRpYyBpbmxpbmUgaW50IGNwdV90b19sb2dpY2FsX2FwaWNpZChpbnQgY3B1KQoreworICAgICAgIGlmIChjcHUgPj0gTlJfQ1BVUykKKwkgICAgICAgcmV0dXJuIEJBRF9BUElDSUQ7CisJcmV0dXJuIChpbnQpY3B1XzJfbG9naWNhbF9hcGljaWRbY3B1XTsKK30KKworLyoKKyAqIFN1cHBvcnRpbmcgb3ZlciA2MCBjcHVzIG9uIE5VTUEtUSByZXF1aXJlcyBhIGxvY2FsaXR5LWRlcGVuZGVudAorICogY3B1IHRvIEFQSUMgSUQgcmVsYXRpb24gdG8gcHJvcGVybHkgaW50ZXJhY3Qgd2l0aCB0aGUgaW50ZWxsaWdlbnQKKyAqIG1vZGUgb2YgdGhlIGNsdXN0ZXIgY29udHJvbGxlci4KKyAqLworc3RhdGljIGlubGluZSBpbnQgY3B1X3ByZXNlbnRfdG9fYXBpY2lkKGludCBtcHNfY3B1KQoreworCWlmIChtcHNfY3B1IDwgNjApCisJCXJldHVybiAoKG1wc19jcHUgPj4gMikgPDwgNCkgfCAoMSA8PCAobXBzX2NwdSAmIDB4MykpOworCWVsc2UKKwkJcmV0dXJuIEJBRF9BUElDSUQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGdlbmVyYXRlX2xvZ2ljYWxfYXBpY2lkKGludCBxdWFkLCBpbnQgcGh5c19hcGljaWQpCit7CisJcmV0dXJuIChxdWFkIDw8IDQpICsgKHBoeXNfYXBpY2lkID8gcGh5c19hcGljaWQgPDwgMSA6IDEpOworfQorCitzdGF0aWMgaW5saW5lIGludCBhcGljaWRfdG9fbm9kZShpbnQgbG9naWNhbF9hcGljaWQpIAoreworCXJldHVybiBsb2dpY2FsX2FwaWNpZCA+PiA0OworfQorCitzdGF0aWMgaW5saW5lIHBoeXNpZF9tYXNrX3QgYXBpY2lkX3RvX2NwdV9wcmVzZW50KGludCBsb2dpY2FsX2FwaWNpZCkKK3sKKwlpbnQgbm9kZSA9IGFwaWNpZF90b19ub2RlKGxvZ2ljYWxfYXBpY2lkKTsKKwlpbnQgY3B1ID0gX19mZnMobG9naWNhbF9hcGljaWQgJiAweGYpOworCisJcmV0dXJuIHBoeXNpZF9tYXNrX29mX3BoeXNpZChjcHUgKyA0Km5vZGUpOworfQorCitzdGF0aWMgaW5saW5lIGludCBtcGNfYXBpY19pZChzdHJ1Y3QgbXBjX2NvbmZpZ19wcm9jZXNzb3IgKm0sIAorCQkJc3RydWN0IG1wY19jb25maWdfdHJhbnNsYXRpb24gKnRyYW5zbGF0aW9uX3JlY29yZCkKK3sKKwlpbnQgcXVhZCA9IHRyYW5zbGF0aW9uX3JlY29yZC0+dHJhbnNfcXVhZDsKKwlpbnQgbG9naWNhbF9hcGljaWQgPSBnZW5lcmF0ZV9sb2dpY2FsX2FwaWNpZChxdWFkLCBtLT5tcGNfYXBpY2lkKTsKKworCXByaW50aygiUHJvY2Vzc29yICMlZCAlbGQ6JWxkIEFQSUMgdmVyc2lvbiAlZCAocXVhZCAlZCwgYXBpYyAlZClcbiIsCisJCQltLT5tcGNfYXBpY2lkLAorCQkJKG0tPm1wY19jcHVmZWF0dXJlICYgQ1BVX0ZBTUlMWV9NQVNLKSA+PiA4LAorCQkJKG0tPm1wY19jcHVmZWF0dXJlICYgQ1BVX01PREVMX01BU0spID4+IDQsCisJCQltLT5tcGNfYXBpY3ZlciwgcXVhZCwgbG9naWNhbF9hcGljaWQpOworCXJldHVybiBsb2dpY2FsX2FwaWNpZDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldHVwX3BvcnRpb19yZW1hcCh2b2lkKQoreworCWludCBudW1fcXVhZHMgPSBudW1fb25saW5lX25vZGVzKCk7CisKKwlpZiAobnVtX3F1YWRzIDw9IDEpCisgICAgICAgCQlyZXR1cm47CisKKwlwcmludGsoIlJlbWFwcGluZyBjcm9zcy1xdWFkIHBvcnQgSS9PIGZvciAlZCBxdWFkc1xuIiwgbnVtX3F1YWRzKTsKKwl4cXVhZF9wb3J0aW8gPSBpb3JlbWFwKFhRVUFEX1BPUlRJT19CQVNFLCBudW1fcXVhZHMqWFFVQURfUE9SVElPX1FVQUQpOworCXByaW50aygieHF1YWRfcG9ydGlvIHZhZGRyIDB4JTA4bHgsIGxlbiAlMDhseFxuIiwKKwkJKHVfbG9uZykgeHF1YWRfcG9ydGlvLCAodV9sb25nKSBudW1fcXVhZHMqWFFVQURfUE9SVElPX1FVQUQpOworfQorCitzdGF0aWMgaW5saW5lIGludCBjaGVja19waHlzX2FwaWNpZF9wcmVzZW50KGludCBib290X2NwdV9waHlzaWNhbF9hcGljaWQpCit7CisJcmV0dXJuICgxKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGVuYWJsZV9hcGljX21vZGUodm9pZCkKK3sKK30KKworLyoKKyAqIFdlIHVzZSBwaHlzaWNhbCBhcGljaWRzIGhlcmUsIG5vdCBsb2dpY2FsLCBzbyBqdXN0IHJldHVybiB0aGUgZGVmYXVsdAorICogcGh5c2ljYWwgYnJvYWRjYXN0IHRvIHN0b3AgcGVvcGxlIGZyb20gYnJlYWtpbmcgdXMKKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3B1X21hc2tfdG9fYXBpY2lkKGNwdW1hc2tfdCBjcHVtYXNrKQoreworCXJldHVybiAoaW50KSAweEY7Cit9CisKKy8qIE5vIE5VTUEtUSBib3ggaGFzIGEgSFQgQ1BVLCBidXQgaXQgY2FuJ3QgaHVydCB0byB1c2UgdGhlIGRlZmF1bHQgY29kZS4gKi8KK3N0YXRpYyBpbmxpbmUgdTMyIHBoeXNfcGtnX2lkKHUzMiBjcHVpZF9hcGljLCBpbnQgaW5kZXhfbXNiKQoreworCXJldHVybiBjcHVpZF9hcGljID4+IGluZGV4X21zYjsKK30KKworI2VuZGlmIC8qIF9fQVNNX01BQ0hfQVBJQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L21hY2gtbnVtYXEvbWFjaF9hcGljZGVmLmggYi9pbmNsdWRlL2FzbS1pMzg2L21hY2gtbnVtYXEvbWFjaF9hcGljZGVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY0MzlkMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvbWFjaC1udW1hcS9tYWNoX2FwaWNkZWYuaApAQCAtMCwwICsxLDE0IEBACisjaWZuZGVmIF9fQVNNX01BQ0hfQVBJQ0RFRl9ICisjZGVmaW5lIF9fQVNNX01BQ0hfQVBJQ0RFRl9ICisKKworI2RlZmluZSBBUElDX0lEX01BU0sgKDB4Rjw8MjQpCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgZ2V0X2FwaWNfaWQodW5zaWduZWQgbG9uZyB4KQoreworCSAgICAgICAgcmV0dXJuICgoKHgpPj4yNCkmMHgwRik7Cit9CisKKyNkZWZpbmUgICAgICAgICBHRVRfQVBJQ19JRCh4KSAgZ2V0X2FwaWNfaWQoeCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L21hY2gtbnVtYXEvbWFjaF9pcGkuaCBiL2luY2x1ZGUvYXNtLWkzODYvbWFjaC1udW1hcS9tYWNoX2lwaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNDZmZDMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L21hY2gtbnVtYXEvbWFjaF9pcGkuaApAQCAtMCwwICsxLDI1IEBACisjaWZuZGVmIF9fQVNNX01BQ0hfSVBJX0gKKyNkZWZpbmUgX19BU01fTUFDSF9JUElfSAorCitpbmxpbmUgdm9pZCBzZW5kX0lQSV9tYXNrX3NlcXVlbmNlKGNwdW1hc2tfdCwgaW50IHZlY3Rvcik7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZW5kX0lQSV9tYXNrKGNwdW1hc2tfdCBtYXNrLCBpbnQgdmVjdG9yKQoreworCXNlbmRfSVBJX21hc2tfc2VxdWVuY2UobWFzaywgdmVjdG9yKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNlbmRfSVBJX2FsbGJ1dHNlbGYoaW50IHZlY3RvcikKK3sKKwljcHVtYXNrX3QgbWFzayA9IGNwdV9vbmxpbmVfbWFwOworCWNwdV9jbGVhcihzbXBfcHJvY2Vzc29yX2lkKCksIG1hc2spOworCisJaWYgKCFjcHVzX2VtcHR5KG1hc2spKQorCQlzZW5kX0lQSV9tYXNrKG1hc2ssIHZlY3Rvcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZW5kX0lQSV9hbGwoaW50IHZlY3RvcikKK3sKKwlzZW5kX0lQSV9tYXNrKGNwdV9vbmxpbmVfbWFwLCB2ZWN0b3IpOworfQorCisjZW5kaWYgLyogX19BU01fTUFDSF9JUElfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9tYWNoLW51bWFxL21hY2hfbXBwYXJzZS5oIGIvaW5jbHVkZS9hc20taTM4Ni9tYWNoLW51bWFxL21hY2hfbXBwYXJzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxYmJhYzgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L21hY2gtbnVtYXEvbWFjaF9tcHBhcnNlLmgKQEAgLTAsMCArMSwyOSBAQAorI2lmbmRlZiBfX0FTTV9NQUNIX01QUEFSU0VfSAorI2RlZmluZSBfX0FTTV9NQUNIX01QUEFSU0VfSAorCitzdGF0aWMgaW5saW5lIHZvaWQgbXBjX29lbV9idXNfaW5mbyhzdHJ1Y3QgbXBjX2NvbmZpZ19idXMgKm0sIGNoYXIgKm5hbWUsIAorCQkJCXN0cnVjdCBtcGNfY29uZmlnX3RyYW5zbGF0aW9uICp0cmFuc2xhdGlvbikKK3sKKwlpbnQgcXVhZCA9IHRyYW5zbGF0aW9uLT50cmFuc19xdWFkOworCWludCBsb2NhbCA9IHRyYW5zbGF0aW9uLT50cmFuc19sb2NhbDsKKworCW1wX2J1c19pZF90b19ub2RlW20tPm1wY19idXNpZF0gPSBxdWFkOworCW1wX2J1c19pZF90b19sb2NhbFttLT5tcGNfYnVzaWRdID0gbG9jYWw7CisJcHJpbnRrKCJCdXMgIyVkIGlzICVzIChub2RlICVkKVxuIiwgbS0+bXBjX2J1c2lkLCBuYW1lLCBxdWFkKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG1wY19vZW1fcGNpX2J1cyhzdHJ1Y3QgbXBjX2NvbmZpZ19idXMgKm0sIAorCQkJCXN0cnVjdCBtcGNfY29uZmlnX3RyYW5zbGF0aW9uICp0cmFuc2xhdGlvbikKK3sKKwlpbnQgcXVhZCA9IHRyYW5zbGF0aW9uLT50cmFuc19xdWFkOworCWludCBsb2NhbCA9IHRyYW5zbGF0aW9uLT50cmFuc19sb2NhbDsKKworCXF1YWRfbG9jYWxfdG9fbXBfYnVzX2lkW3F1YWRdW2xvY2FsXSA9IG0tPm1wY19idXNpZDsKK30KKworLyogSG9vayBmcm9tIGdlbmVyaWMgQUNQSSB0YWJsZXMuYyAqLworc3RhdGljIGlubGluZSB2b2lkIGFjcGlfbWFkdF9vZW1fY2hlY2soY2hhciAqb2VtX2lkLCBjaGFyICpvZW1fdGFibGVfaWQpCit7Cit9CisKKyNlbmRpZiAvKiBfX0FTTV9NQUNIX01QUEFSU0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9tYWNoLW51bWFxL21hY2hfbXBzcGVjLmggYi9pbmNsdWRlL2FzbS1pMzg2L21hY2gtbnVtYXEvbWFjaF9tcHNwZWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmZiMDk4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9tYWNoLW51bWFxL21hY2hfbXBzcGVjLmgKQEAgLTAsMCArMSw4IEBACisjaWZuZGVmIF9fQVNNX01BQ0hfTVBTUEVDX0gKKyNkZWZpbmUgX19BU01fTUFDSF9NUFNQRUNfSAorCisjZGVmaW5lIE1BWF9JUlFfU09VUkNFUyA1MTIKKworI2RlZmluZSBNQVhfTVBfQlVTU0VTIDMyCisKKyNlbmRpZiAvKiBfX0FTTV9NQUNIX01QU1BFQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L21hY2gtbnVtYXEvbWFjaF93YWtlY3B1LmggYi9pbmNsdWRlL2FzbS1pMzg2L21hY2gtbnVtYXEvbWFjaF93YWtlY3B1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA1MzAwNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvbWFjaC1udW1hcS9tYWNoX3dha2VjcHUuaApAQCAtMCwwICsxLDQzIEBACisjaWZuZGVmIF9fQVNNX01BQ0hfV0FLRUNQVV9ICisjZGVmaW5lIF9fQVNNX01BQ0hfV0FLRUNQVV9ICisKKy8qIFRoaXMgZmlsZSBjb3BlcyB3aXRoIG1hY2hpbmVzIHRoYXQgd2FrZXVwIHNlY29uZGFyeSBDUFVzIGJ5IE5NSXMgKi8KKworI2RlZmluZSBXQUtFX1NFQ09OREFSWV9WSUFfTk1JCisKKyNkZWZpbmUgVFJBTVBPTElORV9MT1cgcGh5c190b192aXJ0KDB4OCkKKyNkZWZpbmUgVFJBTVBPTElORV9ISUdIIHBoeXNfdG9fdmlydCgweGEpCisKKyNkZWZpbmUgYm9vdF9jcHVfYXBpY2lkIGJvb3RfY3B1X2xvZ2ljYWxfYXBpY2lkCisKKy8qIFdlIGRvbid0IGRvIGFueXRoaW5nIGhlcmUgYmVjYXVzZSB3ZSB1c2UgTk1JJ3MgdG8gYm9vdCBpbnN0ZWFkICovCitzdGF0aWMgaW5saW5lIHZvaWQgd2FpdF9mb3JfaW5pdF9kZWFzc2VydChhdG9taWNfdCAqZGVhc3NlcnQpCit7Cit9CisKKy8qCisgKiBCZWNhdXNlIHdlIHVzZSBOTUlzIHJhdGhlciB0aGFuIHRoZSBJTklULVNUQVJUVVAgc2VxdWVuY2UgdG8KKyAqIGJvb3RzdHJhcCB0aGUgQ1BVcywgdGhlIEFQSUMgbWF5IGJlIGluIGEgd2VpcmQgc3RhdGUuIEtpY2sgaXQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzbXBfY2FsbGluX2NsZWFyX2xvY2FsX2FwaWModm9pZCkKK3sKKwljbGVhcl9sb2NhbF9BUElDKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzdG9yZV9OTUlfdmVjdG9yKHVuc2lnbmVkIHNob3J0ICpoaWdoLCB1bnNpZ25lZCBzaG9ydCAqbG93KQoreworCXByaW50aygiU3RvcmluZyBOTUkgdmVjdG9yXG4iKTsKKwkqaGlnaCA9ICooKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopIFRSQU1QT0xJTkVfSElHSCk7CisJKmxvdyA9ICooKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopIFRSQU1QT0xJTkVfTE9XKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJlc3RvcmVfTk1JX3ZlY3Rvcih1bnNpZ25lZCBzaG9ydCAqaGlnaCwgdW5zaWduZWQgc2hvcnQgKmxvdykKK3sKKwlwcmludGsoIlJlc3RvcmluZyBOTUkgdmVjdG9yXG4iKTsKKwkqKCh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSBUUkFNUE9MSU5FX0hJR0gpID0gKmhpZ2g7CisJKigodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikgVFJBTVBPTElORV9MT1cpID0gKmxvdzsKK30KKworI2RlZmluZSBpbnF1aXJlX3JlbW90ZV9hcGljKGFwaWNpZCkge30KKworI2VuZGlmIC8qIF9fQVNNX01BQ0hfV0FLRUNQVV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L21hY2gtc3VtbWl0L2lycV92ZWN0b3JzX2xpbWl0cy5oIGIvaW5jbHVkZS9hc20taTM4Ni9tYWNoLXN1bW1pdC9pcnFfdmVjdG9yc19saW1pdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTBjZTNmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9tYWNoLXN1bW1pdC9pcnFfdmVjdG9yc19saW1pdHMuaApAQCAtMCwwICsxLDE0IEBACisjaWZuZGVmIF9BU01fSVJRX1ZFQ1RPUlNfTElNSVRTX0gKKyNkZWZpbmUgX0FTTV9JUlFfVkVDVE9SU19MSU1JVFNfSAorCisvKgorICogRm9yIFN1bW1pdCBvciBnZW5lcmljIChpLmUuIGluc3RhbGxlcikga2VybmVscywgd2UgaGF2ZSBsb3RzIG9mIEkvTyBBUElDcywKKyAqIGV2ZW4gd2l0aCB1bmktcHJvYyBrZXJuZWxzLCBzbyB1c2UgYSBiaWcgYXJyYXkuCisgKgorICogVGhpcyB2YWx1ZSBzaG91bGQgYmUgdGhlIHNhbWUgaW4gYm90aCB0aGUgZ2VuZXJpYyBhbmQgc3VtbWl0IHN1YmFyY2hlcy4KKyAqIENoYW5nZSBvbmUsIGNoYW5nZSAnZW0gYm90aC4KKyAqLworI2RlZmluZSBOUl9JUlFTCTIyNAorI2RlZmluZSBOUl9JUlFfVkVDVE9SUwkxMDI0CisKKyNlbmRpZiAvKiBfQVNNX0lSUV9WRUNUT1JTX0xJTUlUU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L21hY2gtc3VtbWl0L21hY2hfYXBpYy5oIGIvaW5jbHVkZS9hc20taTM4Ni9tYWNoLXN1bW1pdC9tYWNoX2FwaWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGU5Y2JjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9tYWNoLXN1bW1pdC9tYWNoX2FwaWMuaApAQCAtMCwwICsxLDE4OSBAQAorI2lmbmRlZiBfX0FTTV9NQUNIX0FQSUNfSAorI2RlZmluZSBfX0FTTV9NQUNIX0FQSUNfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL3NtcC5oPgorCisjZGVmaW5lIGVzcl9kaXNhYmxlICgxKQorI2RlZmluZSBOT19CQUxBTkNFX0lSUSAoMCkKKworI2RlZmluZSBOT19JT0FQSUNfQ0hFQ0sgKDEpCS8qIERvbid0IGNoZWNrIEkvTyBBUElDIElEIGZvciB4QVBJQyAqLworCisvKiBJbiBjbHVzdGVyZWQgbW9kZSwgdGhlIGhpZ2ggbmliYmxlIG9mIEFQSUMgSUQgaXMgYSBjbHVzdGVyIG51bWJlci4KKyAqIFRoZSBsb3cgbmliYmxlIGlzIGEgNC1iaXQgYml0bWFwLiAqLworI2RlZmluZSBYQVBJQ19ERVNUX0NQVVNfU0hJRlQJNAorI2RlZmluZSBYQVBJQ19ERVNUX0NQVVNfTUFTSwkoKDF1IDw8IFhBUElDX0RFU1RfQ1BVU19TSElGVCkgLSAxKQorI2RlZmluZSBYQVBJQ19ERVNUX0NMVVNURVJfTUFTSwkoWEFQSUNfREVTVF9DUFVTX01BU0sgPDwgWEFQSUNfREVTVF9DUFVTX1NISUZUKQorCisjZGVmaW5lIEFQSUNfREZSX1ZBTFVFCShBUElDX0RGUl9DTFVTVEVSKQorCitzdGF0aWMgaW5saW5lIGNwdW1hc2tfdCB0YXJnZXRfY3B1cyh2b2lkKQoreworCS8qIENQVV9NQVNLX0FMTCAoMHhmZikgaGFzIHVuZGVmaW5lZCBiZWhhdmlvdXIgd2l0aAorCSAqIGRlc3RfTG93ZXN0UHJpbyBtb2RlIGxvZ2ljYWwgY2x1c3RlcmVkIGFwaWMgaW50ZXJydXB0IHJvdXRpbmcKKwkgKiBKdXN0IHN0YXJ0IG9uIGNwdSAwLiAgSVJRIGJhbGFuY2luZyB3aWxsIHNwcmVhZCBsb2FkCisJICovCisJcmV0dXJuIGNwdW1hc2tfb2ZfY3B1KDApOworfSAKKyNkZWZpbmUgVEFSR0VUX0NQVVMJKHRhcmdldF9jcHVzKCkpCisKKyNkZWZpbmUgSU5UX0RFTElWRVJZX01PREUgKGRlc3RfTG93ZXN0UHJpbykKKyNkZWZpbmUgSU5UX0RFU1RfTU9ERSAxICAgICAvKiBsb2dpY2FsIGRlbGl2ZXJ5IGJyb2FkY2FzdCB0byBhbGwgcHJvY3MgKi8KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGNoZWNrX2FwaWNpZF91c2VkKHBoeXNpZF9tYXNrX3QgYml0bWFwLCBpbnQgYXBpY2lkKQoreworCXJldHVybiAwOworfSAKKworLyogd2UgZG9uJ3QgdXNlIHRoZSBwaHlzX2NwdV9wcmVzZW50X21hcCB0byBpbmRpY2F0ZSBhcGljaWQgcHJlc2VuY2UgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjaGVja19hcGljaWRfcHJlc2VudChpbnQgYml0KSAKK3sKKwlyZXR1cm4gMTsKK30KKworI2RlZmluZSBhcGljaWRfY2x1c3RlcihhcGljaWQpICgoYXBpY2lkKSAmIFhBUElDX0RFU1RfQ0xVU1RFUl9NQVNLKQorCitleHRlcm4gdTggYmlvc19jcHVfYXBpY2lkW107CitleHRlcm4gdTggY3B1XzJfbG9naWNhbF9hcGljaWRbXTsKKworc3RhdGljIGlubGluZSB2b2lkIGluaXRfYXBpY19sZHIodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHZhbCwgaWQ7CisJaW50IGksIGNvdW50OworCXU4IGxpZDsKKwl1OCBteV9pZCA9ICh1OCloYXJkX3NtcF9wcm9jZXNzb3JfaWQoKTsKKwl1OCBteV9jbHVzdGVyID0gKHU4KWFwaWNpZF9jbHVzdGVyKG15X2lkKTsKKworCS8qIENyZWF0ZSBsb2dpY2FsIEFQSUMgSURzIGJ5IGNvdW50aW5nIENQVXMgYWxyZWFkeSBpbiBjbHVzdGVyLiAqLworCWZvciAoY291bnQgPSAwLCBpID0gTlJfQ1BVUzsgLS1pID49IDA7ICkgeworCQlsaWQgPSBjcHVfMl9sb2dpY2FsX2FwaWNpZFtpXTsKKwkJaWYgKGxpZCAhPSBCQURfQVBJQ0lEICYmIGFwaWNpZF9jbHVzdGVyKGxpZCkgPT0gbXlfY2x1c3RlcikKKwkJCSsrY291bnQ7CisJfQorCS8qIFdlIG9ubHkgaGF2ZSBhIDQgd2lkZSBiaXRtYXAgaW4gY2x1c3RlciBtb2RlLiAgSWYgYSBkZXJhbmdlZAorCSAqIEJJT1MgcHV0cyA1IENQVXMgaW4gb25lIEFQSUMgY2x1c3Rlciwgd2UncmUgaG9zZWQuICovCisJQlVHX09OKGNvdW50ID49IFhBUElDX0RFU1RfQ1BVU19TSElGVCk7CisJaWQgPSBteV9jbHVzdGVyIHwgKDFVTCA8PCBjb3VudCk7CisJYXBpY193cml0ZV9hcm91bmQoQVBJQ19ERlIsIEFQSUNfREZSX1ZBTFVFKTsKKwl2YWwgPSBhcGljX3JlYWQoQVBJQ19MRFIpICYgfkFQSUNfTERSX01BU0s7CisJdmFsIHw9IFNFVF9BUElDX0xPR0lDQUxfSUQoaWQpOworCWFwaWNfd3JpdGVfYXJvdW5kKEFQSUNfTERSLCB2YWwpOworfQorCitzdGF0aWMgaW5saW5lIGludCBtdWx0aV90aW1lcl9jaGVjayhpbnQgYXBpYywgaW50IGlycSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgYXBpY19pZF9yZWdpc3RlcmVkKHZvaWQpCit7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbHVzdGVyZWRfYXBpY19jaGVjayh2b2lkKQoreworCXByaW50aygiRW5hYmxpbmcgQVBJQyBtb2RlOiAgU3VtbWl0LiAgVXNpbmcgJWQgSS9PIEFQSUNzXG4iLAorCQkJCQkJbnJfaW9hcGljcyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGFwaWNpZF90b19ub2RlKGludCBsb2dpY2FsX2FwaWNpZCkKK3sKKwlyZXR1cm4gbG9naWNhbF9hcGljaWQgPj4gNTsgICAgICAgICAgLyogMiBjbHVzdGVyaWRzIHBlciBDRUMgKi8KK30KKworLyogTWFwcGluZyBmcm9tIGNwdSBudW1iZXIgdG8gbG9naWNhbCBhcGljaWQgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGNwdV90b19sb2dpY2FsX2FwaWNpZChpbnQgY3B1KQoreworICAgICAgIGlmIChjcHUgPj0gTlJfQ1BVUykKKwkgICAgICAgcmV0dXJuIEJBRF9BUElDSUQ7CisJcmV0dXJuIChpbnQpY3B1XzJfbG9naWNhbF9hcGljaWRbY3B1XTsKK30KKworc3RhdGljIGlubGluZSBpbnQgY3B1X3ByZXNlbnRfdG9fYXBpY2lkKGludCBtcHNfY3B1KQoreworCWlmIChtcHNfY3B1IDwgTlJfQ1BVUykKKwkJcmV0dXJuIChpbnQpYmlvc19jcHVfYXBpY2lkW21wc19jcHVdOworCWVsc2UKKwkJcmV0dXJuIEJBRF9BUElDSUQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgcGh5c2lkX21hc2tfdCBpb2FwaWNfcGh5c19pZF9tYXAocGh5c2lkX21hc2tfdCBwaHlzX2lkX21hcCkKK3sKKwkvKiBGb3IgY2x1c3RlcmVkIHdlIGRvbid0IGhhdmUgYSBnb29kIHdheSB0byBkbyB0aGlzIHlldCAtIGhhY2sgKi8KKwlyZXR1cm4gcGh5c2lkc19wcm9tb3RlKDB4MEYpOworfQorCitzdGF0aWMgaW5saW5lIHBoeXNpZF9tYXNrX3QgYXBpY2lkX3RvX2NwdV9wcmVzZW50KGludCBhcGljaWQpCit7CisJcmV0dXJuIHBoeXNpZF9tYXNrX29mX3BoeXNpZCgwKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgbXBjX2FwaWNfaWQoc3RydWN0IG1wY19jb25maWdfcHJvY2Vzc29yICptLCAKKwkJCXN0cnVjdCBtcGNfY29uZmlnX3RyYW5zbGF0aW9uICp0cmFuc2xhdGlvbl9yZWNvcmQpCit7CisJcHJpbnRrKCJQcm9jZXNzb3IgIyVkICVsZDolbGQgQVBJQyB2ZXJzaW9uICVkXG4iLAorCQkJbS0+bXBjX2FwaWNpZCwKKwkJCShtLT5tcGNfY3B1ZmVhdHVyZSAmIENQVV9GQU1JTFlfTUFTSykgPj4gOCwKKwkJCShtLT5tcGNfY3B1ZmVhdHVyZSAmIENQVV9NT0RFTF9NQVNLKSA+PiA0LAorCQkJbS0+bXBjX2FwaWN2ZXIpOworCXJldHVybiAobS0+bXBjX2FwaWNpZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXR1cF9wb3J0aW9fcmVtYXAodm9pZCkKK3sKK30KKworc3RhdGljIGlubGluZSBpbnQgY2hlY2tfcGh5c19hcGljaWRfcHJlc2VudChpbnQgYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkKQoreworCXJldHVybiAxOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZW5hYmxlX2FwaWNfbW9kZSh2b2lkKQoreworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjcHVfbWFza190b19hcGljaWQoY3B1bWFza190IGNwdW1hc2spCit7CisJaW50IG51bV9iaXRzX3NldDsKKwlpbnQgY3B1c19mb3VuZCA9IDA7CisJaW50IGNwdTsKKwlpbnQgYXBpY2lkOwkKKworCW51bV9iaXRzX3NldCA9IGNwdXNfd2VpZ2h0KGNwdW1hc2spOworCS8qIFJldHVybiBpZCB0byBhbGwgKi8KKwlpZiAobnVtX2JpdHNfc2V0ID09IE5SX0NQVVMpCisJCXJldHVybiAoaW50KSAweEZGOworCS8qIAorCSAqIFRoZSBjcHVzIGluIHRoZSBtYXNrIG11c3QgYWxsIGJlIG9uIHRoZSBhcGljIGNsdXN0ZXIuICBJZiBhcmUgbm90IAorCSAqIG9uIHRoZSBzYW1lIGFwaWNpZCBjbHVzdGVyIHJldHVybiBkZWZhdWx0IHZhbHVlIG9mIFRBUkdFVF9DUFVTLiAKKwkgKi8KKwljcHUgPSBmaXJzdF9jcHUoY3B1bWFzayk7CisJYXBpY2lkID0gY3B1X3RvX2xvZ2ljYWxfYXBpY2lkKGNwdSk7CisJd2hpbGUgKGNwdXNfZm91bmQgPCBudW1fYml0c19zZXQpIHsKKwkJaWYgKGNwdV9pc3NldChjcHUsIGNwdW1hc2spKSB7CisJCQlpbnQgbmV3X2FwaWNpZCA9IGNwdV90b19sb2dpY2FsX2FwaWNpZChjcHUpOworCQkJaWYgKGFwaWNpZF9jbHVzdGVyKGFwaWNpZCkgIT0gCisJCQkJCWFwaWNpZF9jbHVzdGVyKG5ld19hcGljaWQpKXsKKwkJCQlwcmludGsgKCIlczogTm90IGEgdmFsaWQgbWFzayFcbiIsX19GVU5DVElPTl9fKTsKKwkJCQlyZXR1cm4gMHhGRjsKKwkJCX0KKwkJCWFwaWNpZCA9IGFwaWNpZCB8IG5ld19hcGljaWQ7CisJCQljcHVzX2ZvdW5kKys7CisJCX0KKwkJY3B1Kys7CisJfQorCXJldHVybiBhcGljaWQ7Cit9CisKKy8qIGNwdWlkIHJldHVybnMgdGhlIHZhbHVlIGxhdGNoZWQgaW4gdGhlIEhXIGF0IHJlc2V0LCBub3QgdGhlIEFQSUMgSUQKKyAqIHJlZ2lzdGVyJ3MgdmFsdWUuICBGb3IgYW55IGJveCB3aG9zZSBCSU9TIGNoYW5nZXMgQVBJQyBJRHMsIGxpa2UKKyAqIGNsdXN0ZXJlZCBBUElDIHN5c3RlbXMsIHdlIG11c3QgdXNlIGhhcmRfc21wX3Byb2Nlc3Nvcl9pZC4KKyAqCisgKiBTZWUgSW50ZWwncyBJQS0zMiBTVyBEZXYncyBNYW51YWwgVm9sMiB1bmRlciBDUFVJRC4KKyAqLworc3RhdGljIGlubGluZSB1MzIgcGh5c19wa2dfaWQodTMyIGNwdWlkX2FwaWMsIGludCBpbmRleF9tc2IpCit7CisJcmV0dXJuIGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpID4+IGluZGV4X21zYjsKK30KKworI2VuZGlmIC8qIF9fQVNNX01BQ0hfQVBJQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L21hY2gtc3VtbWl0L21hY2hfYXBpY2RlZi5oIGIvaW5jbHVkZS9hc20taTM4Ni9tYWNoLXN1bW1pdC9tYWNoX2FwaWNkZWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNThhYjVhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9tYWNoLXN1bW1pdC9tYWNoX2FwaWNkZWYuaApAQCAtMCwwICsxLDEzIEBACisjaWZuZGVmIF9fQVNNX01BQ0hfQVBJQ0RFRl9ICisjZGVmaW5lIF9fQVNNX01BQ0hfQVBJQ0RFRl9ICisKKyNkZWZpbmUJCUFQSUNfSURfTUFTSwkJKDB4RkY8PDI0KQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGdldF9hcGljX2lkKHVuc2lnbmVkIGxvbmcgeCkgCit7IAorCXJldHVybiAoKCh4KT4+MjQpJjB4RkYpOworfSAKKworI2RlZmluZQkJR0VUX0FQSUNfSUQoeCkJZ2V0X2FwaWNfaWQoeCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L21hY2gtc3VtbWl0L21hY2hfaXBpLmggYi9pbmNsdWRlL2FzbS1pMzg2L21hY2gtc3VtbWl0L21hY2hfaXBpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQwNGM1MwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvbWFjaC1zdW1taXQvbWFjaF9pcGkuaApAQCAtMCwwICsxLDI1IEBACisjaWZuZGVmIF9fQVNNX01BQ0hfSVBJX0gKKyNkZWZpbmUgX19BU01fTUFDSF9JUElfSAorCit2b2lkIHNlbmRfSVBJX21hc2tfc2VxdWVuY2UoY3B1bWFza190IG1hc2ssIGludCB2ZWN0b3IpOworCitzdGF0aWMgaW5saW5lIHZvaWQgc2VuZF9JUElfbWFzayhjcHVtYXNrX3QgbWFzaywgaW50IHZlY3RvcikKK3sKKwlzZW5kX0lQSV9tYXNrX3NlcXVlbmNlKG1hc2ssIHZlY3Rvcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZW5kX0lQSV9hbGxidXRzZWxmKGludCB2ZWN0b3IpCit7CisJY3B1bWFza190IG1hc2sgPSBjcHVfb25saW5lX21hcDsKKwljcHVfY2xlYXIoc21wX3Byb2Nlc3Nvcl9pZCgpLCBtYXNrKTsKKworCWlmICghY3B1c19lbXB0eShtYXNrKSkKKwkJc2VuZF9JUElfbWFzayhtYXNrLCB2ZWN0b3IpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2VuZF9JUElfYWxsKGludCB2ZWN0b3IpCit7CisJc2VuZF9JUElfbWFzayhjcHVfb25saW5lX21hcCwgdmVjdG9yKTsKK30KKworI2VuZGlmIC8qIF9fQVNNX01BQ0hfSVBJX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvbWFjaC1zdW1taXQvbWFjaF9tcHBhcnNlLmggYi9pbmNsdWRlL2FzbS1pMzg2L21hY2gtc3VtbWl0L21hY2hfbXBwYXJzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiOWU2ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L21hY2gtc3VtbWl0L21hY2hfbXBwYXJzZS5oCkBAIC0wLDAgKzEsMTIxIEBACisjaWZuZGVmIF9fQVNNX01BQ0hfTVBQQVJTRV9ICisjZGVmaW5lIF9fQVNNX01BQ0hfTVBQQVJTRV9ICisKKyNpbmNsdWRlIDxtYWNoX2FwaWMuaD4KKworZXh0ZXJuIGludCB1c2VfY3ljbG9uZTsKKworI2lmZGVmIENPTkZJR19YODZfU1VNTUlUX05VTUEKK2V4dGVybiB2b2lkIHNldHVwX3N1bW1pdCh2b2lkKTsKKyNlbHNlCisjZGVmaW5lIHNldHVwX3N1bW1pdCgpCXt9CisjZW5kaWYKKworc3RhdGljIGlubGluZSB2b2lkIG1wY19vZW1fYnVzX2luZm8oc3RydWN0IG1wY19jb25maWdfYnVzICptLCBjaGFyICpuYW1lLCAKKwkJCQlzdHJ1Y3QgbXBjX2NvbmZpZ190cmFuc2xhdGlvbiAqdHJhbnNsYXRpb24pCit7CisJRHByaW50aygiQnVzICMlZCBpcyAlc1xuIiwgbS0+bXBjX2J1c2lkLCBuYW1lKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG1wY19vZW1fcGNpX2J1cyhzdHJ1Y3QgbXBjX2NvbmZpZ19idXMgKm0sIAorCQkJCXN0cnVjdCBtcGNfY29uZmlnX3RyYW5zbGF0aW9uICp0cmFuc2xhdGlvbikKK3sKK30KKworZXh0ZXJuIGludCB1c2JfZWFybHlfaGFuZG9mZjsKK3N0YXRpYyBpbmxpbmUgaW50IG1wc19vZW1fY2hlY2soc3RydWN0IG1wX2NvbmZpZ190YWJsZSAqbXBjLCBjaGFyICpvZW0sIAorCQljaGFyICpwcm9kdWN0aWQpCit7CisJaWYgKCFzdHJuY21wKG9lbSwgIklCTSBFTlNXIiwgOCkgJiYgCisJCQkoIXN0cm5jbXAocHJvZHVjdGlkLCAiVklHSUwgU01QIiwgOSkgCisJCQkgfHwgIXN0cm5jbXAocHJvZHVjdGlkLCAiRVhBIiwgMykKKwkJCSB8fCAhc3RybmNtcChwcm9kdWN0aWQsICJSVVRITEVTUyBTTVAiLCAxMikpKXsKKwkJdXNlX2N5Y2xvbmUgPSAxOyAvKmVuYWJsZSBjeWNsb25lLXRpbWVyKi8KKwkJc2V0dXBfc3VtbWl0KCk7CisJCXVzYl9lYXJseV9oYW5kb2ZmID0gMTsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCisvKiBIb29rIGZyb20gZ2VuZXJpYyBBQ1BJIHRhYmxlcy5jICovCitzdGF0aWMgaW5saW5lIGludCBhY3BpX21hZHRfb2VtX2NoZWNrKGNoYXIgKm9lbV9pZCwgY2hhciAqb2VtX3RhYmxlX2lkKQoreworCWlmICghc3RybmNtcChvZW1faWQsICJJQk0iLCAzKSAmJgorCSAgICAoIXN0cm5jbXAob2VtX3RhYmxlX2lkLCAiU0VSVklHSUwiLCA4KQorCSAgICAgfHwgIXN0cm5jbXAob2VtX3RhYmxlX2lkLCAiRVhBIiwgMykpKXsKKwkJdXNlX2N5Y2xvbmUgPSAxOyAvKmVuYWJsZSBjeWNsb25lLXRpbWVyKi8KKwkJc2V0dXBfc3VtbWl0KCk7CisJCXVzYl9lYXJseV9oYW5kb2ZmID0gMTsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitzdHJ1Y3QgcmlvX3RhYmxlX2hkciB7CisJdW5zaWduZWQgY2hhciB2ZXJzaW9uOyAgICAgIC8qIFZlcnNpb24gbnVtYmVyIG9mIHRoaXMgZGF0YSBzdHJ1Y3R1cmUgICAgICAgICAgICovCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFZlcnNpb24gMyBhZGRzIGNoYXNzaXNfbnVtICYgV1BfaW5kZXggICAgICAgICAgICovCisJdW5zaWduZWQgY2hhciBudW1fc2NhbF9kZXY7IC8qICMgb2YgU2NhbGFiaWxpdHkgZGV2aWNlcyAoVHdpc3RlcnMgZm9yIFZpZ2lsKSAgICovCisJdW5zaWduZWQgY2hhciBudW1fcmlvX2RldjsgIC8qICMgb2YgUklPIEkvTyBkZXZpY2VzIChDeWNsb25lcyBhbmQgV2lubmlwZWdzKSAgICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3Qgc2NhbF9kZXRhaWwgeworCXVuc2lnbmVkIGNoYXIgbm9kZV9pZDsgICAgICAvKiBTY2FsYWJpbGl0eSBOb2RlIElEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCXVuc2lnbmVkIGxvbmcgQ0JBUjsgICAgICAgICAvKiBBZGRyZXNzIG9mIDFNQiByZWdpc3RlciBzcGFjZSAgICAgICAgICAgICAgICAgICAqLworCXVuc2lnbmVkIGNoYXIgcG9ydDBub2RlOyAgICAvKiBOb2RlIElEIHBvcnQgY29ubmVjdGVkIHRvOiAweEZGPU5vbmUgICAgICAgICAgICAqLworCXVuc2lnbmVkIGNoYXIgcG9ydDBwb3J0OyAgICAvKiBQb3J0IG51bSBwb3J0IGNvbm5lY3RlZCB0bzogMCwxLDIsIG9yIDB4RkY9Tm9uZSAqLworCXVuc2lnbmVkIGNoYXIgcG9ydDFub2RlOyAgICAvKiBOb2RlIElEIHBvcnQgY29ubmVjdGVkIHRvOiAweEZGID0gTm9uZSAgICAgICAgICAqLworCXVuc2lnbmVkIGNoYXIgcG9ydDFwb3J0OyAgICAvKiBQb3J0IG51bSBwb3J0IGNvbm5lY3RlZCB0bzogMCwxLDIsIG9yIDB4RkY9Tm9uZSAqLworCXVuc2lnbmVkIGNoYXIgcG9ydDJub2RlOyAgICAvKiBOb2RlIElEIHBvcnQgY29ubmVjdGVkIHRvOiAweEZGID0gTm9uZSAgICAgICAgICAqLworCXVuc2lnbmVkIGNoYXIgcG9ydDJwb3J0OyAgICAvKiBQb3J0IG51bSBwb3J0IGNvbm5lY3RlZCB0bzogMCwxLDIsIG9yIDB4RkY9Tm9uZSAqLworCXVuc2lnbmVkIGNoYXIgY2hhc3Npc19udW07ICAvKiAxIGJhc2VkIENoYXNzaXMgbnVtYmVyICgxID0gYm9vdCBub2RlKSAgICAgICAgICAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IHJpb19kZXRhaWwgeworCXVuc2lnbmVkIGNoYXIgbm9kZV9pZDsgICAgICAvKiBSSU8gTm9kZSBJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCXVuc2lnbmVkIGxvbmcgQkJBUjsgICAgICAgICAvKiBBZGRyZXNzIG9mIDFNQiByZWdpc3RlciBzcGFjZSAgICAgICAgICAgICAgICAgICAqLworCXVuc2lnbmVkIGNoYXIgdHlwZTsgICAgICAgICAvKiBUeXBlIG9mIGRldmljZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCXVuc2lnbmVkIGNoYXIgb3duZXJfaWQ7ICAgICAvKiBGb3IgV1BFRzogTm9kZSBJRCBvZiBDeWNsb25lIHRoYXQgb3ducyB0aGlzIFdQRUcqLworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGb3IgQ1lDOiAgTm9kZSBJRCBvZiBUd2lzdGVyIHRoYXQgb3ducyB0aGlzIENZQyAqLworCXVuc2lnbmVkIGNoYXIgcG9ydDBub2RlOyAgICAvKiBOb2RlIElEIHBvcnQgY29ubmVjdGVkIHRvOiAweEZGPU5vbmUgICAgICAgICAgICAqLworCXVuc2lnbmVkIGNoYXIgcG9ydDBwb3J0OyAgICAvKiBQb3J0IG51bSBwb3J0IGNvbm5lY3RlZCB0bzogMCwxLDIsIG9yIDB4RkY9Tm9uZSAqLworCXVuc2lnbmVkIGNoYXIgcG9ydDFub2RlOyAgICAvKiBOb2RlIElEIHBvcnQgY29ubmVjdGVkIHRvOiAweEZGPU5vbmUgICAgICAgICAgICAqLworCXVuc2lnbmVkIGNoYXIgcG9ydDFwb3J0OyAgICAvKiBQb3J0IG51bSBwb3J0IGNvbm5lY3RlZCB0bzogMCwxLDIsIG9yIDB4RkY9Tm9uZSAqLworCXVuc2lnbmVkIGNoYXIgZmlyc3Rfc2xvdDsgICAvKiBGb3IgV1BFRzogTG93ZXN0IHNsb3QgbnVtYmVyIGJlbG93IHRoaXMgV1BFRyAgICAqLworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGb3IgQ1lDOiAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCXVuc2lnbmVkIGNoYXIgc3RhdHVzOyAgICAgICAvKiBGb3IgV1BFRzogQml0IDAgPSAxIDogdGhlIFhBUElDIGlzIHVzZWQgICAgICAgICAqLworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAgICAgICAgICAgPSAwIDogdGhlIFhBUElDIGlzIG5vdCB1c2VkLCBpZToqLworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgIGludHMgZndkZWQgdG8gYW5vdGhlciBYQVBJQyAqLworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAgICAgQml0czE6NyBSZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAqLworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGb3IgQ1lDOiAgQml0czA6NyBSZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAqLworCXVuc2lnbmVkIGNoYXIgV1BfaW5kZXg7ICAgICAvKiBGb3IgV1BFRzogV1BFRyBpbnN0YW5jZSBpbmRleCAtIGxvd2VyIG9uZXMgaGF2ZSAqLworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAgICAgbG93ZXIgc2xvdCBudW1iZXJzL1BDSSBidXMgbnVtYmVycyAgICAqLworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGb3IgQ1lDOiAgTm8gbWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCXVuc2lnbmVkIGNoYXIgY2hhc3Npc19udW07ICAvKiAxIGJhc2VkIENoYXNzaXMgbnVtYmVyICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGb3IgTG9va091dCBXUEVHcyB0aGlzIGZpZWxkIGluZGljYXRlcyB0aGUgICAgICAqLworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFeHBhbnNpb24gQ2hhc3NpcyAjLCBlbnVtZXJhdGVkIGZyb20gQm9vdCAgICAgICAqLworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOb2RlIFdQRUcgZXh0ZXJuYWwgcG9ydCwgdGhlbiBCb290IE5vZGUgQ1lDICAgICAqLworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBleHRlcm5hbCBwb3J0LCB0aGVuIE5leHQgVmlnaWwgY2hhc3NpcyBXUEVHICAgICAqLworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBleHRlcm5hbCBwb3J0LCBldGMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTaGFyZWQgTG9va291dHMgaGF2ZSBvbmx5IDEgY2hhc3NpcyBudW1iZXIgKHRoZSAqLworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmaXJzdCBvbmUgYXNzaWduZWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworCit0eXBlZGVmIGVudW0geworCUNvbXBhdFR3aXN0ZXIgPSAwLCAgLyogQ29tcGF0aWJpbGl0eSBUd2lzdGVyICAgICAgICAgICAgICAgKi8KKwlBbHRUd2lzdGVyICAgID0gMSwgIC8qIEFsdGVybmF0ZSBUd2lzdGVyIG9mIGludGVybmFsIDgtd2F5ICovCisJQ29tcGF0Q3ljbG9uZSA9IDIsICAvKiBDb21wYXRpYmlsaXR5IEN5Y2xvbmUgICAgICAgICAgICAgICAqLworCUFsdEN5Y2xvbmUgICAgPSAzLCAgLyogQWx0ZXJuYXRlIEN5Y2xvbmUgb2YgaW50ZXJuYWwgOC13YXkgKi8KKwlDb21wYXRXUEVHICAgID0gNCwgIC8qIENvbXBhdGliaWxpdHkgV1BFRyAgICAgICAgICAgICAgICAgICovCisJQWx0V1BFRyAgICAgICA9IDUsICAvKiBTZWNvbmQgUGxhbmFyIFdQRUcgICAgICAgICAgICAgICAgICAqLworCUxvb2tPdXRBV1BFRyAgPSA2LCAgLyogTG9va091dCBXUEVHICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwlMb29rT3V0QldQRUcgID0gNywgIC8qIExvb2tPdXQgV1BFRyAgICAgICAgICAgICAgICAgICAgICAgICovCit9IG5vZGVfdHlwZTsKKworc3RhdGljIGlubGluZSBpbnQgaXNfV1BFRyhzdHJ1Y3QgcmlvX2RldGFpbCAqcmlvKXsKKwlyZXR1cm4gKHJpby0+dHlwZSA9PSBDb21wYXRXUEVHIHx8IHJpby0+dHlwZSA9PSBBbHRXUEVHIHx8CisJCXJpby0+dHlwZSA9PSBMb29rT3V0QVdQRUcgfHwgcmlvLT50eXBlID09IExvb2tPdXRCV1BFRyk7Cit9CisKKyNlbmRpZiAvKiBfX0FTTV9NQUNIX01QUEFSU0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9tYWNoLXN1bW1pdC9tYWNoX21wc3BlYy5oIGIvaW5jbHVkZS9hc20taTM4Ni9tYWNoLXN1bW1pdC9tYWNoX21wc3BlYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkNzY1NTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L21hY2gtc3VtbWl0L21hY2hfbXBzcGVjLmgKQEAgLTAsMCArMSw5IEBACisjaWZuZGVmIF9fQVNNX01BQ0hfTVBTUEVDX0gKKyNkZWZpbmUgX19BU01fTUFDSF9NUFNQRUNfSAorCisjZGVmaW5lIE1BWF9JUlFfU09VUkNFUyAyNTYKKworLyogTWF4aW11bSAyNTYgUENJIGJ1c3NlcywgcGx1cyAxIElTQSBidXMgaW4gZWFjaCBvZiA0IGNhYmluZXRzLiAqLworI2RlZmluZSBNQVhfTVBfQlVTU0VTIDI2MAorCisjZW5kaWYgLyogX19BU01fTUFDSF9NUFNQRUNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9tYWNoLXZpc3dzL2NvYmFsdC5oIGIvaW5jbHVkZS9hc20taTM4Ni9tYWNoLXZpc3dzL2NvYmFsdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzYzM2MjIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L21hY2gtdmlzd3MvY29iYWx0LmgKQEAgLTAsMCArMSwxMjUgQEAKKyNpZm5kZWYgX19JMzg2X1NHSV9DT0JBTFRfSAorI2RlZmluZSBfX0kzODZfU0dJX0NPQkFMVF9ICisKKyNpbmNsdWRlIDxhc20vZml4bWFwLmg+CisKKy8qCisgKiBDb2JhbHQgU0dJIFZpc3VhbCBXb3Jrc3RhdGlvbiBzeXN0ZW0gQVNJQworICovIAorCisjZGVmaW5lIENPX0NQVV9OVU1fUEhZUyAweDFlMDAKKyNkZWZpbmUgQ09fQ1BVX1RBQl9QSFlTIChDT19DUFVfTlVNX1BIWVMgKyAyKQorCisjZGVmaW5lIENPX0NQVV9NQVggNAorCisjZGVmaW5lCUNPX0NQVV9QSFlTCQkweGMyMDAwMDAwCisjZGVmaW5lCUNPX0FQSUNfUEhZUwkJMHhjNDAwMDAwMAorCisvKiBzZWUgc2V0X2ZpeG1hcCgpIGFuZCBhc20vZml4bWFwLmggKi8KKyNkZWZpbmUJQ09fQ1BVX1ZBRERSCQkoZml4X3RvX3ZpcnQoRklYX0NPX0NQVSkpCisjZGVmaW5lCUNPX0FQSUNfVkFERFIJCShmaXhfdG9fdmlydChGSVhfQ09fQVBJQykpCisKKy8qIENvYmFsdCBDUFUgcmVnaXN0ZXJzIC0tIHJlbGF0aXZlIHRvIENPX0NQVV9WQUREUiwgdXNlIGNvX2NwdV8qKCkgKi8KKyNkZWZpbmUJQ09fQ1BVX1JFVgkJMHgwOAorI2RlZmluZQlDT19DUFVfQ1RSTAkJMHgxMAorI2RlZmluZQlDT19DUFVfU1RBVAkJMHgyMAorI2RlZmluZQlDT19DUFVfVElNRVZBTAkJMHgzMAorCisvKiBDT19DUFVfQ1RSTCBiaXRzICovCisjZGVmaW5lCUNPX0NUUkxfVElNRVJVTgkJMHgwNAkJLyogMCA9PSBkaXNhYmxlZCAqLworI2RlZmluZQlDT19DVFJMX1RJTUVNQVNLCTB4MDgJCS8qIDAgPT0gdW5tYXNrZWQgKi8KKworLyogQ09fQ1BVX1NUQVRVUyBiaXRzICovCisjZGVmaW5lCUNPX1NUQVRfVElNRUlOVFIJMHgwMgkvKiAocikgMSA9PSBpbnQgcGVuZCwgKHcpIDAgPT0gY2xlYXIgKi8KKworLyogQ09fQ1BVX1RJTUVWQUwgdmFsdWUgKi8KKyNkZWZpbmUJQ09fVElNRV9IWgkJMTAwMDAwMDAwCS8qIENvYmFsdCBjb3JlIHJhdGUgKi8KKworLyogQ29iYWx0IEFQSUMgcmVnaXN0ZXJzIC0tIHJlbGF0aXZlIHRvIENPX0FQSUNfVkFERFIsIHVzZSBjb19hcGljXyooKSAqLworI2RlZmluZQlDT19BUElDX0hJKG4pCQkoKChuKSAqIDB4MTApICsgNCkKKyNkZWZpbmUJQ09fQVBJQ19MTyhuKQkJKChuKSAqIDB4MTApCisjZGVmaW5lCUNPX0FQSUNfSUQJCTB4MGZmYworCisvKiBDT19BUElDX0lEIGJpdHMgKi8KKyNkZWZpbmUJQ09fQVBJQ19FTkFCTEUJCTB4MDAwMDAxMDAKKworLyogQ09fQVBJQ19MTyBiaXRzICovCisjZGVmaW5lCUNPX0FQSUNfTUFTSwkJMHgwMDAxMDAwMAkvKiAwID0gZW5hYmxlZCAqLworI2RlZmluZQlDT19BUElDX0xFVkVMCQkweDAwMDA4MDAwCS8qIDAgPSBlZGdlICovCisKKy8qCisgKiBXaGVyZSB0aGluZ3MgYXJlIHBoeXNpY2FsbHkgd2lyZWQgdG8gQ29iYWx0CisgKiAjZGVmaW5lcyB3aXRoIG5vIGJvYXJkIF88dHlwZT5fPHJldj5fIGFyZSBjb21tb24gdG8gYWxsICh0aHVzIGZhcikKKyAqLworI2RlZmluZQlDT19BUElDX0lERTAJCTQKKyNkZWZpbmUgQ09fQVBJQ19JREUxCQkyCQkvKiBPbmx5IG9uIDMyMCAqLworCisjZGVmaW5lCUNPX0FQSUNfODI1OQkJMTIJCS8qIHNlcmlhbCwgZmxvcHB5LCBwYXItbC1sICovCisKKy8qIExpdGhpdW0gUENJIEJyaWRnZSBBIC0tICJ0aGUgb25lIHdpdGggODI1NTcgRXRoZXJuZXQiICovCisjZGVmaW5lCUNPX0FQSUNfUENJQV9CQVNFMAkwIC8qIGFuZCAxICovCS8qIHNsb3QgMCwgbGluZSAwICovCisjZGVmaW5lCUNPX0FQSUNfUENJQV9CQVNFMTIzCTUgLyogYW5kIDYgKi8JLyogc2xvdCAwLCBsaW5lIDEgKi8KKworI2RlZmluZQlDT19BUElDX1BJSVg0X1VTQgk3CQkvKiB0aGlzIG9uZSBpcyB3ZWlyZCAqLworCisvKiBMaXRoaXVtIFBDSSBCcmlkZ2UgQiAtLSAidGhlIG9uZSB3aXRoIFBJSVg0IiAqLworI2RlZmluZQlDT19BUElDX1BDSUJfQkFTRTAJOCAvKiBhbmQgOS0xMiAqLy8qIHNsb3QgMCwgbGluZSAwICovCisjZGVmaW5lCUNPX0FQSUNfUENJQl9CQVNFMTIzCTEzIC8qIDE0LjE1ICovCS8qIHNsb3QgMCwgbGluZSAxICovCisKKyNkZWZpbmUJQ09fQVBJQ19WSURPVVQwCQkxNgorI2RlZmluZQlDT19BUElDX1ZJRE9VVDEJCTE3CisjZGVmaW5lCUNPX0FQSUNfVklESU4wCQkxOAorI2RlZmluZQlDT19BUElDX1ZJRElOMQkJMTkKKworI2RlZmluZQlDT19BUElDX0xJX0FVRElPCTIyCisKKyNkZWZpbmUJQ09fQVBJQ19BUwkJMjQKKyNkZWZpbmUJQ09fQVBJQ19SRQkJMjUKKworI2RlZmluZSBDT19BUElDX0NQVQkJMjgJCS8qIFRpbWVyIGFuZCBDYWNoZSBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUJQ09fQVBJQ19OTUkJCTI5CisjZGVmaW5lCUNPX0FQSUNfTEFTVAkJQ09fQVBJQ19OTUkKKworLyoKKyAqIFRoaXMgaXMgaG93IGlycXMgYXJlIGFzc2lnbmVkIG9uIHRoZSBWaXN1YWwgV29ya3N0YXRpb24uCisgKiBMZWdhY3kgZGV2aWNlcyBnZXQgaXJxJ3MgMS0xNSAoc3lzdGVtIGNsb2NrIGlzIDAgYW5kIGlzIENPX0FQSUNfQ1BVKS4KKyAqIEFsbCBvdGhlciBkZXZpY2VzIChpbmNsdWRpbmcgUENJKSBnbyB0byBDb2JhbHQgYW5kIGFyZSBpcnEncyAxNiBvbiB1cC4KKyAqLworI2RlZmluZQlDT19JUlFfQVBJQzAJMTYJCQkvKiBpcnEgb2YgYXBpYyBlbnRyeSAwICovCisjZGVmaW5lCUlTX0NPX0FQSUMoaXJxKQkoKGlycSkgPj0gQ09fSVJRX0FQSUMwKQorI2RlZmluZQlDT19JUlEoYXBpYykJKENPX0lSUV9BUElDMCArIChhcGljKSkJLyogYXBpYyBlbnQgdG8gaXJxICovCisjZGVmaW5lCUNPX0FQSUMoaXJxKQkoKGlycSkgLSBDT19JUlFfQVBJQzApCS8qIGlycSB0byBhcGljIGVudCAqLworI2RlZmluZSBDT19JUlFfSURFMAkxNAkJCS8qIGtub3dsZWRnZSBvZi4uLiAqLworI2RlZmluZSBDT19JUlFfSURFMQkxNQkJCS8qIC4uLiBpZGUgZHJpdmVyIGRlZmF1bHRzISAqLworI2RlZmluZQlDT19JUlFfODI1OQlDT19JUlEoQ09fQVBJQ184MjU5KQorCisjaWZkZWYgQ09ORklHX1g4Nl9WSVNXU19BUElDCitleHRlcm4gX19pbmxpbmUgdm9pZCBjb19jcHVfd3JpdGUodW5zaWduZWQgbG9uZyByZWcsIHVuc2lnbmVkIGxvbmcgdikKK3sKKwkqKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKENPX0NQVV9WQUREUityZWcpKT12OworfQorCitleHRlcm4gX19pbmxpbmUgdW5zaWduZWQgbG9uZyBjb19jcHVfcmVhZCh1bnNpZ25lZCBsb25nIHJlZykKK3sKKwlyZXR1cm4gKigodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShDT19DUFVfVkFERFIrcmVnKSk7Cit9ICAgICAgICAgICAgCisgICAgICAgICAgICAgCitleHRlcm4gX19pbmxpbmUgdm9pZCBjb19hcGljX3dyaXRlKHVuc2lnbmVkIGxvbmcgcmVnLCB1bnNpZ25lZCBsb25nIHYpCit7CisJKigodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShDT19BUElDX1ZBRERSK3JlZykpPXY7Cit9ICAgICAgICAgICAgCisgICAgICAgICAgICAgCitleHRlcm4gX19pbmxpbmUgdW5zaWduZWQgbG9uZyBjb19hcGljX3JlYWQodW5zaWduZWQgbG9uZyByZWcpCit7CisJcmV0dXJuICooKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoQ09fQVBJQ19WQUREUityZWcpKTsKK30KKyNlbmRpZgorCitleHRlcm4gY2hhciB2aXN3c19ib2FyZF90eXBlOworCisjZGVmaW5lCVZJU1dTXzMyMAkwCisjZGVmaW5lCVZJU1dTXzU0MAkxCisKK2V4dGVybiBjaGFyIHZpc3dzX2JvYXJkX3JldjsKKworI2VuZGlmIC8qIF9fSTM4Nl9TR0lfQ09CQUxUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvbWFjaC12aXN3cy9kb190aW1lci5oIGIvaW5jbHVkZS9hc20taTM4Ni9tYWNoLXZpc3dzL2RvX3RpbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNhY2Q1MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvbWFjaC12aXN3cy9kb190aW1lci5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qIGRlZmluZXMgZm9yIGlubGluZSBhcmNoIHNldHVwIGZ1bmN0aW9ucyAqLworCisjaW5jbHVkZSA8YXNtL2ZpeG1hcC5oPgorI2luY2x1ZGUgImNvYmFsdC5oIgorCitzdGF0aWMgaW5saW5lIHZvaWQgZG9fdGltZXJfaW50ZXJydXB0X2hvb2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJLyogQ2xlYXIgdGhlIGludGVycnVwdCAqLworCWNvX2NwdV93cml0ZShDT19DUFVfU1RBVCxjb19jcHVfcmVhZChDT19DUFVfU1RBVCkgJiB+Q09fU1RBVF9USU1FSU5UUik7CisKKwlkb190aW1lcihyZWdzKTsKKyNpZm5kZWYgQ09ORklHX1NNUAorCXVwZGF0ZV9wcm9jZXNzX3RpbWVzKHVzZXJfbW9kZShyZWdzKSk7CisjZW5kaWYKKy8qCisgKiBJbiB0aGUgU01QIGNhc2Ugd2UgdXNlIHRoZSBsb2NhbCBBUElDIHRpbWVyIGludGVycnVwdCB0byBkbyB0aGUKKyAqIHByb2ZpbGluZywgZXhjZXB0IHdoZW4gd2Ugc2ltdWxhdGUgU01QIG1vZGUgb24gYSB1bmlwcm9jZXNzb3IKKyAqIHN5c3RlbSwgaW4gdGhhdCBjYXNlIHdlIGhhdmUgdG8gY2FsbCB0aGUgbG9jYWwgaW50ZXJydXB0IGhhbmRsZXIuCisgKi8KKyNpZm5kZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCisJcHJvZmlsZV90aWNrKENQVV9QUk9GSUxJTkcsIHJlZ3MpOworI2Vsc2UKKwlpZiAoIXVzaW5nX2FwaWNfdGltZXIpCisJCXNtcF9sb2NhbF90aW1lcl9pbnRlcnJ1cHQocmVncyk7CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSBpbnQgZG9fdGltZXJfb3ZlcmZsb3coaW50IGNvdW50KQoreworCWludCBpOworCisJc3Bpbl9sb2NrKCZpODI1OUFfbG9jayk7CisJLyoKKwkgKiBUaGlzIGlzIHRyaWNreSB3aGVuIEkvTyBBUElDcyBhcmUgdXNlZDsKKwkgKiBzZWUgZG9fdGltZXJfaW50ZXJydXB0KCkuCisJICovCisJaSA9IGluYigweDIwKTsKKwlzcGluX3VubG9jaygmaTgyNTlBX2xvY2spOworCQorCS8qIGFzc3VtcHRpb24gYWJvdXQgdGltZXIgYmVpbmcgSVJRMCAqLworCWlmIChpICYgMHgwMSkgeworCQkvKgorCQkgKiBXZSBjYW5ub3QgZGV0ZWN0IGxvc3QgdGltZXIgaW50ZXJydXB0cyAuLi4gCisJCSAqIHdlbGwsIHRoYXQncyB3aHkgd2UgY2FsbCB0aGVtIGxvc3QsIGRvbid0IHdlPyA6KQorCQkgKiBbaG1tLCBvbiB0aGUgUGVudGl1bSBhbmQgQWxwaGEgd2UgY2FuIC4uLiBzb3J0IG9mXQorCQkgKi8KKwkJY291bnQgLT0gTEFUQ0g7CisJfSBlbHNlIHsKKwkJcHJpbnRrKCJkb19zbG93X2dldHRpbWVvZmZzZXQoKTogaGFyZHdhcmUgdGltZXIgcHJvYmxlbT9cbiIpOworCX0KKwlyZXR1cm4gY291bnQ7Cit9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L21hY2gtdmlzd3MvZW50cnlfYXJjaC5oIGIvaW5jbHVkZS9hc20taTM4Ni9tYWNoLXZpc3dzL2VudHJ5X2FyY2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTgzZmE2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9tYWNoLXZpc3dzL2VudHJ5X2FyY2guaApAQCAtMCwwICsxLDIzIEBACisvKgorICogVGhlIGZvbGxvd2luZyB2ZWN0b3JzIGFyZSBwYXJ0IG9mIHRoZSBMaW51eCBhcmNoaXRlY3R1cmUsIHRoZXJlCisgKiBpcyBubyBoYXJkd2FyZSBJUlEgcGluIGVxdWl2YWxlbnQgZm9yIHRoZW0sIHRoZXkgYXJlIHRyaWdnZXJlZAorICogdGhyb3VnaCB0aGUgSUNDIGJ5IHVzIChJUElzKQorICovCisjaWZkZWYgQ09ORklHX1g4Nl9TTVAKK0JVSUxEX0lOVEVSUlVQVChyZXNjaGVkdWxlX2ludGVycnVwdCxSRVNDSEVEVUxFX1ZFQ1RPUikKK0JVSUxEX0lOVEVSUlVQVChpbnZhbGlkYXRlX2ludGVycnVwdCxJTlZBTElEQVRFX1RMQl9WRUNUT1IpCitCVUlMRF9JTlRFUlJVUFQoY2FsbF9mdW5jdGlvbl9pbnRlcnJ1cHQsQ0FMTF9GVU5DVElPTl9WRUNUT1IpCisjZW5kaWYKKworLyoKKyAqIGV2ZXJ5IHBlbnRpdW0gbG9jYWwgQVBJQyBoYXMgdHdvICdsb2NhbCBpbnRlcnJ1cHRzJywgd2l0aCBhCisgKiBzb2Z0LWRlZmluYWJsZSB2ZWN0b3IgYXR0YWNoZWQgdG8gYm90aCBpbnRlcnJ1cHRzLCBvbmUgb2YKKyAqIHdoaWNoIGlzIGEgdGltZXIgaW50ZXJydXB0LCB0aGUgb3RoZXIgb25lIGlzIGVycm9yIGNvdW50ZXIKKyAqIG92ZXJmbG93LiBMaW51eCB1c2VzIHRoZSBsb2NhbCBBUElDIHRpbWVyIGludGVycnVwdCB0byBnZXQKKyAqIGEgbXVjaCBzaW1wbGVyIFNNUCB0aW1lIGFyY2hpdGVjdHVyZToKKyAqLworI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQworQlVJTERfSU5URVJSVVBUKGFwaWNfdGltZXJfaW50ZXJydXB0LExPQ0FMX1RJTUVSX1ZFQ1RPUikKK0JVSUxEX0lOVEVSUlVQVChlcnJvcl9pbnRlcnJ1cHQsRVJST1JfQVBJQ19WRUNUT1IpCitCVUlMRF9JTlRFUlJVUFQoc3B1cmlvdXNfaW50ZXJydXB0LFNQVVJJT1VTX0FQSUNfVkVDVE9SKQorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L21hY2gtdmlzd3MvaXJxX3ZlY3RvcnMuaCBiL2luY2x1ZGUvYXNtLWkzODYvbWFjaC12aXN3cy9pcnFfdmVjdG9ycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiNTcyZDgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L21hY2gtdmlzd3MvaXJxX3ZlY3RvcnMuaApAQCAtMCwwICsxLDYyIEBACisjaWZuZGVmIF9BU01fSVJRX1ZFQ1RPUlNfSAorI2RlZmluZSBfQVNNX0lSUV9WRUNUT1JTX0gKKworLyoKKyAqIElEVCB2ZWN0b3JzIHVzYWJsZSBmb3IgZXh0ZXJuYWwgaW50ZXJydXB0IHNvdXJjZXMgc3RhcnQKKyAqIGF0IDB4MjA6CisgKi8KKyNkZWZpbmUgRklSU1RfRVhURVJOQUxfVkVDVE9SCTB4MjAKKworI2RlZmluZSBTWVNDQUxMX1ZFQ1RPUgkJMHg4MAorCisvKgorICogVmVjdG9ycyAweDIwLTB4MmYgYXJlIHVzZWQgZm9yIElTQSBpbnRlcnJ1cHRzLgorICovCisKKy8qCisgKiBTcGVjaWFsIElSUSB2ZWN0b3JzIHVzZWQgYnkgdGhlIFNNUCBhcmNoaXRlY3R1cmUsIDB4ZjAtMHhmZgorICoKKyAqICBzb21lIG9mIHRoZSBmb2xsb3dpbmcgdmVjdG9ycyBhcmUgJ3JhcmUnLCB0aGV5IGFyZSBtZXJnZWQKKyAqICBpbnRvIGEgc2luZ2xlIHZlY3RvciAoQ0FMTF9GVU5DVElPTl9WRUNUT1IpIHRvIHNhdmUgdmVjdG9yIHNwYWNlLgorICogIFRMQiwgcmVzY2hlZHVsZSBhbmQgbG9jYWwgQVBJQyB2ZWN0b3JzIGFyZSBwZXJmb3JtYW5jZS1jcml0aWNhbC4KKyAqCisgKiAgVmVjdG9ycyAweGYwLTB4ZmEgYXJlIGZyZWUgKHJlc2VydmVkIGZvciBmdXR1cmUgTGludXggdXNlKS4KKyAqLworI2RlZmluZSBTUFVSSU9VU19BUElDX1ZFQ1RPUgkweGZmCisjZGVmaW5lIEVSUk9SX0FQSUNfVkVDVE9SCTB4ZmUKKyNkZWZpbmUgSU5WQUxJREFURV9UTEJfVkVDVE9SCTB4ZmQKKyNkZWZpbmUgUkVTQ0hFRFVMRV9WRUNUT1IJMHhmYworI2RlZmluZSBDQUxMX0ZVTkNUSU9OX1ZFQ1RPUgkweGZiCisKKyNkZWZpbmUgVEhFUk1BTF9BUElDX1ZFQ1RPUgkweGYwCisvKgorICogTG9jYWwgQVBJQyB0aW1lciBJUlEgdmVjdG9yIGlzIG9uIGEgZGlmZmVyZW50IHByaW9yaXR5IGxldmVsLAorICogdG8gd29yayBhcm91bmQgdGhlICdsb3N0IGxvY2FsIGludGVycnVwdCBpZiBtb3JlIHRoYW4gMiBJUlEKKyAqIHNvdXJjZXMgcGVyIGxldmVsJyBlcnJhdGEuCisgKi8KKyNkZWZpbmUgTE9DQUxfVElNRVJfVkVDVE9SCTB4ZWYKKworLyoKKyAqIEZpcnN0IEFQSUMgdmVjdG9yIGF2YWlsYWJsZSB0byBkcml2ZXJzOiAodmVjdG9ycyAweDMwLTB4ZWUpCisgKiB3ZSBzdGFydCBhdCAweDMxIHRvIHNwcmVhZCBvdXQgdmVjdG9ycyBldmVubHkgYmV0d2VlbiBwcmlvcml0eQorICogbGV2ZWxzLiAoMHg4MCBpcyB0aGUgc3lzY2FsbCB2ZWN0b3IpCisgKi8KKyNkZWZpbmUgRklSU1RfREVWSUNFX1ZFQ1RPUgkweDMxCisjZGVmaW5lIEZJUlNUX1NZU1RFTV9WRUNUT1IJMHhlZgorCisjZGVmaW5lIFRJTUVSX0lSUSAwCisKKy8qCisgKiBJUlEgZGVmaW5pdGlvbnMKKyAqLworI2RlZmluZSBOUl9WRUNUT1JTIDI1NgorI2RlZmluZSBOUl9JUlFTIDIyNAorI2RlZmluZSBOUl9JUlFfVkVDVE9SUyBOUl9JUlFTCisKKyNkZWZpbmUgRlBVX0lSUQkJCTEzCisKKyNkZWZpbmUJRklSU1RfVk04Nl9JUlEJCTMKKyNkZWZpbmUgTEFTVF9WTTg2X0lSUQkJMTUKKyNkZWZpbmUgaW52YWxpZF92bTg2X2lycShpcnEpCSgoaXJxKSA8IDMgfHwgKGlycSkgPiAxNSkKKworI2VuZGlmIC8qIF9BU01fSVJRX1ZFQ1RPUlNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9tYWNoLXZpc3dzL2xpdGhpdW0uaCBiL2luY2x1ZGUvYXNtLWkzODYvbWFjaC12aXN3cy9saXRoaXVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ0M2U2OAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvbWFjaC12aXN3cy9saXRoaXVtLmgKQEAgLTAsMCArMSw1MyBAQAorI2lmbmRlZiBfX0kzODZfU0dJX0xJVEhJVU1fSAorI2RlZmluZSBfX0kzODZfU0dJX0xJVEhJVU1fSAorCisjaW5jbHVkZSA8YXNtL2ZpeG1hcC5oPgorCisvKgorICogTGl0aGl1bSBpcyB0aGUgU0dJIFZpc3VhbCBXb3Jrc3RhdGlvbiBJL08gQVNJQworICovCisKKyNkZWZpbmUJTElfUENJX0FfUEhZUwkJMHhmYzAwMDAwMAkvKiBFbmV0IGlzIGRldiAzICovCisjZGVmaW5lCUxJX1BDSV9CX1BIWVMJCTB4ZmQwMDAwMDAJLyogUElJWDQgaXMgaGVyZSAqLworCisvKiBzZWUgc2V0X2ZpeG1hcCgpIGFuZCBhc20vZml4bWFwLmggKi8KKyNkZWZpbmUgTElfUENJQV9WQUREUiAgIChmaXhfdG9fdmlydChGSVhfTElfUENJQSkpCisjZGVmaW5lIExJX1BDSUJfVkFERFIgICAoZml4X3RvX3ZpcnQoRklYX0xJX1BDSUIpKQorCisvKiBOb3QgYSBzdGFuZGFyZCBQQ0k/IChub3QgaW4gbGludXgvcGNpLmgpICovCisjZGVmaW5lCUxJX1BDSV9CVVNOVU0JMHg0NAkJCS8qIGxvODogcHJpbWFyeSwgaGk4OiBzdWIgKi8KKyNkZWZpbmUgTElfUENJX0lOVEVOICAgIDB4NDYKKworLyogTElfUENJX0lOVEVOVCBiaXRzICovCisjZGVmaW5lCUxJX0lOVEFfMAkweDAwMDEKKyNkZWZpbmUJTElfSU5UQV8xCTB4MDAwMgorI2RlZmluZQlMSV9JTlRBXzIJMHgwMDA0CisjZGVmaW5lCUxJX0lOVEFfMwkweDAwMDgKKyNkZWZpbmUJTElfSU5UQV80CTB4MDAxMAorI2RlZmluZQlMSV9JTlRCCQkweDAwMjAKKyNkZWZpbmUJTElfSU5UQwkJMHgwMDQwCisjZGVmaW5lCUxJX0lOVEQJCTB4MDA4MAorCisvKiBNb3JlIHNwZWNpYWwgcHVycG9zZSBtYWNyb3MuLi4gKi8KK2V4dGVybiBfX2lubGluZSB2b2lkIGxpX3BjaWFfd3JpdGUxNih1bnNpZ25lZCBsb25nIHJlZywgdW5zaWduZWQgc2hvcnQgdikKK3sKKwkqKCh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKShMSV9QQ0lBX1ZBRERSK3JlZykpPXY7Cit9CisKK2V4dGVybiBfX2lubGluZSB1bnNpZ25lZCBzaG9ydCBsaV9wY2lhX3JlYWQxNih1bnNpZ25lZCBsb25nIHJlZykKK3sKKwkgcmV0dXJuICooKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKExJX1BDSUFfVkFERFIrcmVnKSk7Cit9CisKK2V4dGVybiBfX2lubGluZSB2b2lkIGxpX3BjaWJfd3JpdGUxNih1bnNpZ25lZCBsb25nIHJlZywgdW5zaWduZWQgc2hvcnQgdikKK3sKKwkqKCh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKShMSV9QQ0lCX1ZBRERSK3JlZykpPXY7Cit9CisKK2V4dGVybiBfX2lubGluZSB1bnNpZ25lZCBzaG9ydCBsaV9wY2liX3JlYWQxNih1bnNpZ25lZCBsb25nIHJlZykKK3sKKwlyZXR1cm4gKigodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoTElfUENJQl9WQUREUityZWcpKTsKK30KKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvbWFjaC12aXN3cy9tYWNoX2FwaWMuaCBiL2luY2x1ZGUvYXNtLWkzODYvbWFjaC12aXN3cy9tYWNoX2FwaWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTZjZGZiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9tYWNoLXZpc3dzL21hY2hfYXBpYy5oCkBAIC0wLDAgKzEsMTAwIEBACisjaWZuZGVmIF9fQVNNX01BQ0hfQVBJQ19ICisjZGVmaW5lIF9fQVNNX01BQ0hfQVBJQ19ICisKKyNpbmNsdWRlIDxtYWNoX2FwaWNkZWYuaD4KKyNpbmNsdWRlIDxhc20vc21wLmg+CisKKyNkZWZpbmUgQVBJQ19ERlJfVkFMVUUJKEFQSUNfREZSX0ZMQVQpCisKKyNkZWZpbmUgbm9fYmFsYW5jZV9pcnEgKDApCisjZGVmaW5lIGVzcl9kaXNhYmxlICgwKQorCisjZGVmaW5lIE5PX0lPQVBJQ19DSEVDSyAoMCkKKworI2RlZmluZSBJTlRfREVMSVZFUllfTU9ERSBkZXN0X0xvd2VzdFByaW8KKyNkZWZpbmUgSU5UX0RFU1RfTU9ERSAxICAgICAvKiBsb2dpY2FsIGRlbGl2ZXJ5IGJyb2FkY2FzdCB0byBhbGwgcHJvY3MgKi8KKworI2lmZGVmIENPTkZJR19TTVAKKyAjZGVmaW5lIFRBUkdFVF9DUFVTIGNwdV9vbmxpbmVfbWFwCisjZWxzZQorICNkZWZpbmUgVEFSR0VUX0NQVVMgY3B1bWFza19vZl9jcHUoMCkKKyNlbmRpZgorCisjZGVmaW5lIGNoZWNrX2FwaWNpZF91c2VkKGJpdG1hcCwgYXBpY2lkKQlwaHlzaWRfaXNzZXQoYXBpY2lkLCBiaXRtYXApCisjZGVmaW5lIGNoZWNrX2FwaWNpZF9wcmVzZW50KGJpdCkJCXBoeXNpZF9pc3NldChiaXQsIHBoeXNfY3B1X3ByZXNlbnRfbWFwKQorCitzdGF0aWMgaW5saW5lIGludCBhcGljX2lkX3JlZ2lzdGVyZWQodm9pZCkKK3sKKwlyZXR1cm4gcGh5c2lkX2lzc2V0KEdFVF9BUElDX0lEKGFwaWNfcmVhZChBUElDX0lEKSksIHBoeXNfY3B1X3ByZXNlbnRfbWFwKTsKK30KKworLyoKKyAqIFNldCB1cCB0aGUgbG9naWNhbCBkZXN0aW5hdGlvbiBJRC4KKyAqCisgKiBJbnRlbCByZWNvbW1lbmRzIHRvIHNldCBERlIsIExEUiBhbmQgVFBSIGJlZm9yZSBlbmFibGluZworICogYW4gQVBJQy4gIFNlZSBlLmcuICJBUC0zODggODI0ODlEWCBVc2VyJ3MgTWFudWFsIiAoSW50ZWwKKyAqIGRvY3VtZW50IG51bWJlciAyOTIxMTYpLiAgU28gaGVyZSBpdCBnb2VzLi4uCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpbml0X2FwaWNfbGRyKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyB2YWw7CisKKwlhcGljX3dyaXRlX2Fyb3VuZChBUElDX0RGUiwgQVBJQ19ERlJfVkFMVUUpOworCXZhbCA9IGFwaWNfcmVhZChBUElDX0xEUikgJiB+QVBJQ19MRFJfTUFTSzsKKwl2YWwgfD0gU0VUX0FQSUNfTE9HSUNBTF9JRCgxVUwgPDwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwlhcGljX3dyaXRlX2Fyb3VuZChBUElDX0xEUiwgdmFsKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN1bW1pdF9jaGVjayhjaGFyICpvZW0sIGNoYXIgKnByb2R1Y3RpZCkgCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbHVzdGVyZWRfYXBpY19jaGVjayh2b2lkKQoreworfQorCisvKiBNYXBwaW5nIGZyb20gY3B1IG51bWJlciB0byBsb2dpY2FsIGFwaWNpZCAqLworc3RhdGljIGlubGluZSBpbnQgY3B1X3RvX2xvZ2ljYWxfYXBpY2lkKGludCBjcHUpCit7CisJcmV0dXJuIDEgPDwgY3B1OworfQorCitzdGF0aWMgaW5saW5lIGludCBjcHVfcHJlc2VudF90b19hcGljaWQoaW50IG1wc19jcHUpCit7CisJaWYgKG1wc19jcHUgPCBnZXRfcGh5c2ljYWxfYnJvYWRjYXN0KCkpCisJCXJldHVybiBtcHNfY3B1OworCWVsc2UKKwkJcmV0dXJuIEJBRF9BUElDSUQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgcGh5c2lkX21hc2tfdCBhcGljaWRfdG9fY3B1X3ByZXNlbnQoaW50IGFwaWNpZCkKK3sKKwlyZXR1cm4gcGh5c2lkX21hc2tfb2ZfcGh5c2lkKGFwaWNpZCk7Cit9CisKKyNkZWZpbmUgV0FLRV9TRUNPTkRBUllfVklBX0lOSVQKKworc3RhdGljIGlubGluZSB2b2lkIHNldHVwX3BvcnRpb19yZW1hcCh2b2lkKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZW5hYmxlX2FwaWNfbW9kZSh2b2lkKQoreworfQorCitzdGF0aWMgaW5saW5lIGludCBjaGVja19waHlzX2FwaWNpZF9wcmVzZW50KGludCBib290X2NwdV9waHlzaWNhbF9hcGljaWQpCit7CisJcmV0dXJuIHBoeXNpZF9pc3NldChib290X2NwdV9waHlzaWNhbF9hcGljaWQsIHBoeXNfY3B1X3ByZXNlbnRfbWFwKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3B1X21hc2tfdG9fYXBpY2lkKGNwdW1hc2tfdCBjcHVtYXNrKQoreworCXJldHVybiBjcHVzX2FkZHIoY3B1bWFzaylbMF07Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIHBoeXNfcGtnX2lkKHUzMiBjcHVpZF9hcGljLCBpbnQgaW5kZXhfbXNiKQoreworCXJldHVybiBjcHVpZF9hcGljID4+IGluZGV4X21zYjsKK30KKworI2VuZGlmIC8qIF9fQVNNX01BQ0hfQVBJQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L21hY2gtdmlzd3MvbWFjaF9hcGljZGVmLmggYi9pbmNsdWRlL2FzbS1pMzg2L21hY2gtdmlzd3MvbWFjaF9hcGljZGVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI2Y2ZhOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvbWFjaC12aXN3cy9tYWNoX2FwaWNkZWYuaApAQCAtMCwwICsxLDEyIEBACisjaWZuZGVmIF9fQVNNX01BQ0hfQVBJQ0RFRl9ICisjZGVmaW5lIF9fQVNNX01BQ0hfQVBJQ0RFRl9ICisKKyNkZWZpbmUgICAgICAgICBBUElDX0lEX01BU0sgICAgICAgICAgICAoMHhGPDwyNCkKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBnZXRfYXBpY19pZCh1bnNpZ25lZCBsb25nIHgpCit7CisJICAgICAgICByZXR1cm4gKCgoeCk+PjI0KSYweEYpOworfQorI2RlZmluZSAgICAgICAgIEdFVF9BUElDX0lEKHgpICBnZXRfYXBpY19pZCh4KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvbWFjaC12aXN3cy9waWl4NC5oIGIvaW5jbHVkZS9hc20taTM4Ni9tYWNoLXZpc3dzL3BpaXg0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNlYTRmNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvbWFjaC12aXN3cy9waWl4NC5oCkBAIC0wLDAgKzEsMTA3IEBACisjaWZuZGVmIF9fSTM4Nl9TR0lfUElJWF9ICisjZGVmaW5lIF9fSTM4Nl9TR0lfUElJWF9ICisKKy8qCisgKiBQSUlYNCBhcyB1c2VkIG9uIFNHSSBWaXN1YWwgV29ya3N0YXRpb25zCisgKi8KKworI2RlZmluZQlQSUlYX1BNX1NUQVJUCQkweDBGODAKKworI2RlZmluZQlTSU9fR1BJT19TVEFSVAkJMHgwRkMwCisKKyNkZWZpbmUJU0lPX1BNX1NUQVJUCQkweDBGQzgKKworI2RlZmluZQlQTUJBU0UJCQlQSUlYX1BNX1NUQVJUCisjZGVmaW5lCUdQSVJFRzAJCQkoUE1CQVNFKzB4MzApCisjZGVmaW5lCUdQSVJFRyh4KQkJKEdQSVJFRzArKCh4KS84KSkKKyNkZWZpbmUJR1BJQklUKHgpCQkoMSA8PCAoKHgpJTgpKQorCisjZGVmaW5lCVBJSVhfR1BJX0JEX0lEMQkJMTgKKyNkZWZpbmUJUElJWF9HUElfQkRfSUQyCQkxOQorI2RlZmluZQlQSUlYX0dQSV9CRF9JRDMJCTIwCisjZGVmaW5lCVBJSVhfR1BJX0JEX0lENAkJMjEKKyNkZWZpbmUJUElJWF9HUElfQkRfUkVHCQlHUElSRUcoUElJWF9HUElfQkRfSUQxKQorI2RlZmluZQlQSUlYX0dQSV9CRF9NQVNLCShHUElCSVQoUElJWF9HUElfQkRfSUQxKSB8IFwKKwkJCQlHUElCSVQoUElJWF9HUElfQkRfSUQyKSB8IFwKKwkJCQlHUElCSVQoUElJWF9HUElfQkRfSUQzKSB8IFwKKwkJCQlHUElCSVQoUElJWF9HUElfQkRfSUQ0KSApCisKKyNkZWZpbmUJUElJWF9HUElfQkRfU0hJRlQJKFBJSVhfR1BJX0JEX0lEMSAlIDgpCisKKyNkZWZpbmUJU0lPX0lOREVYCQkweDJlCisjZGVmaW5lCVNJT19EQVRBCQkweDJmCisKKyNkZWZpbmUJU0lPX0RFVl9TRUwJCTB4NworI2RlZmluZQlTSU9fREVWX0VOQgkJMHgzMAorI2RlZmluZQlTSU9fREVWX01TQgkJMHg2MAorI2RlZmluZQlTSU9fREVWX0xTQgkJMHg2MQorCisjZGVmaW5lCVNJT19HUF9ERVYJCTB4NworCisjZGVmaW5lCVNJT19HUF9CQVNFCQlTSU9fR1BJT19TVEFSVAorI2RlZmluZQlTSU9fR1BfTVNCCQkoU0lPX0dQX0JBU0U+PjgpCisjZGVmaW5lCVNJT19HUF9MU0IJCShTSU9fR1BfQkFTRSYweGZmKQorCisjZGVmaW5lCVNJT19HUF9EQVRBMQkJKFNJT19HUF9CQVNFKzApCisKKyNkZWZpbmUJU0lPX1BNX0RFVgkJMHg4CisKKyNkZWZpbmUJU0lPX1BNX0JBU0UJCVNJT19QTV9TVEFSVAorI2RlZmluZQlTSU9fUE1fTVNCCQkoU0lPX1BNX0JBU0U+PjgpCisjZGVmaW5lCVNJT19QTV9MU0IJCShTSU9fUE1fQkFTRSYweGZmKQorI2RlZmluZQlTSU9fUE1fSU5ERVgJCShTSU9fUE1fQkFTRSswKQorI2RlZmluZQlTSU9fUE1fREFUQQkJKFNJT19QTV9CQVNFKzEpCisKKyNkZWZpbmUJU0lPX1BNX0ZFUjIJCTB4MQorCisjZGVmaW5lCVNJT19QTV9HUF9FTgkJMHg4MAorCisKKworLyoKKyAqIFRoaXMgaXMgdGhlIGRldi9yZWcgd2hlcmUgZ2VuZXJhdGluZyBhIGNvbmZpZyBjeWNsZSB3aWxsCisgKiByZXN1bHQgaW4gYSBQQ0kgc3BlY2lhbCBjeWNsZS4KKyAqLworI2RlZmluZSBTUEVDSUFMX0RFVgkJMHhmZgorI2RlZmluZSBTUEVDSUFMX1JFRwkJMHgwMAorCisvKgorICogUElJWDQgbmVlZHMgdG8gc2VlIGEgc3BlY2lhbCBjeWNsZSB3aXRoIHRoZSBmb2xsb3dpbmcgZGF0YQorICogdG8gYmUgY29udmluY2VkIHRoZSBwcm9jZXNzb3IgaGFzIGdvbmUgaW50byB0aGUgc3RvcCBncmFudAorICogc3RhdGUuICBQSUlYNCBpbnNpc3RzIG9uIHNlZWluZyB0aGlzIGJlZm9yZSBpdCB3aWxsIHBvd2VyCisgKiBkb3duIGEgc3lzdGVtLgorICovCisjZGVmaW5lIFBJSVhfU1BFQ0lBTF9TVE9QCQkweDAwMTIwMDAyCisKKyNkZWZpbmUgUElJWDRfUkVTRVRfUE9SVAkweGNmOQorI2RlZmluZSBQSUlYNF9SRVNFVF9WQUwJCTB4NgorCisjZGVmaW5lIFBNU1RTX1BPUlQJCTB4ZjgwCS8vIDIgYnl0ZXMJUE0gU3RhdHVzCisjZGVmaW5lIFBNRU5fUE9SVAkJMHhmODIJLy8gMiBieXRlcwlQTSBFbmFibGUKKyNkZWZpbmUJUE1DTlRSTF9QT1JUCQkweGY4NAkvLyAyIGJ5dGVzCVBNIENvbnRyb2wKKworI2RlZmluZSBQTV9TVVNQRU5EX0VOQUJMRQkweDIwMDAJLy8gc3RhcnQgc2VxdWVuY2UgdG8gc3VzcGVuZCBzdGF0ZQorCisvKgorICogUE1TVFMgYW5kIFBNRU4gSS9PIGJpdCBkZWZpbml0aW9ucy4KKyAqIChCaXRzIGFyZSB0aGUgc2FtZSBpbiBib3RoIHJlZ2lzdGVycykKKyAqLworI2RlZmluZSBQTV9TVFNfUlNNCQkoMTw8MTUpCS8vIFJlc3VtZSBTdGF0dXMKKyNkZWZpbmUgUE1fU1RTX1BXUkJUTk9SCQkoMTw8MTEpCS8vIFBvd2VyIEJ1dHRvbiBPdmVycmlkZQorI2RlZmluZSBQTV9TVFNfUlRDCQkoMTw8MTApCS8vIFJUQyBzdGF0dXMKKyNkZWZpbmUgUE1fU1RTX1BXUkJUTgkJKDE8PDgpCS8vIFBvd2VyIEJ1dHRvbiBQcmVzc2VkPworI2RlZmluZSBQTV9TVFNfR0JMCQkoMTw8NSkJLy8gR2xvYmFsIFN0YXR1cworI2RlZmluZSBQTV9TVFNfQk0JCSgxPDw0KQkvLyBCdXMgTWFzdGVyIFN0YXR1cworI2RlZmluZSBQTV9TVFNfVE1ST0YJCSgxPDwwKQkvLyBUaW1lciBPdmVyZmxvdyBTdGF0dXMuCisKKy8qCisgKiBTdG9wIGNsb2NrIEdQSSByZWdpc3RlcgorICovCisjZGVmaW5lIFBJSVhfR1BJUkVHMAkJCSgweGY4MCArIDB4MzApCisKKy8qCisgKiBTdG9wIGNsb2NrIEdQSSBiaXQgaW4gR1BJUkVHMAorICovCisjZGVmaW5lCVBJSVhfR1BJX1NUUENMSwkJMHg0CS8vIFNUUENMSyBzaWduYWwgcm91dGVkIGJhY2sgaW4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L21hY2gtdmlzd3Mvc2V0dXBfYXJjaF9wb3N0LmggYi9pbmNsdWRlL2FzbS1pMzg2L21hY2gtdmlzd3Mvc2V0dXBfYXJjaF9wb3N0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RiZDg5NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvbWFjaC12aXN3cy9zZXR1cF9hcmNoX3Bvc3QuaApAQCAtMCwwICsxLDQ5IEBACisvKiBIb29rIGZvciBtYWNoaW5lIHNwZWNpZmljIG1lbW9yeSBzZXR1cC4KKyAqCisgKiBUaGlzIGlzIGluY2x1ZGVkIGxhdGUgaW4ga2VybmVsL3NldHVwLmMgc28gdGhhdCBpdCBjYW4gbWFrZSB1c2Ugb2YgYWxsIG9mCisgKiB0aGUgc3RhdGljIGZ1bmN0aW9ucy4gKi8KKworI2RlZmluZSBNQiAoMTAyNCAqIDEwMjQpCisKK3Vuc2lnbmVkIGxvbmcgc2dpdndmYl9tZW1fcGh5czsKK3Vuc2lnbmVkIGxvbmcgc2dpdndmYl9tZW1fc2l6ZTsKKworbG9uZyBsb25nIG1lbV9zaXplIF9faW5pdGRhdGEgPSAwOworCitzdGF0aWMgY2hhciAqIF9faW5pdCBtYWNoaW5lX3NwZWNpZmljX21lbW9yeV9zZXR1cCh2b2lkKQoreworCWxvbmcgbG9uZyBnZnhfbWVtX3NpemUgPSA4ICogTUI7CisKKwltZW1fc2l6ZSA9IEFMVF9NRU1fSzsKKworCWlmICghbWVtX3NpemUpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiQm9vdGxvYWRlciBkaWRuJ3Qgc2V0IG1lbW9yeSBzaXplLCB1cGdyYWRlIGl0ICFcbiIpOworCQltZW1fc2l6ZSA9IDEyOCAqIE1COworCX0KKworCS8qCisJICogdGhpcyBoYXJkY29kZXMgdGhlIGdyYXBoaWNzIG1lbW9yeSB0byA4IE1CCisJICogaXQgcmVhbGx5IHNob3VsZCBiZSBzaXplZCBkeW5hbWljYWxseSAob3IgYXQgbGVhc3QKKwkgKiBzZXQgYXMgYSBib290IHBhcmFtKQorCSAqLworCWlmICghc2dpdndmYl9tZW1fc2l6ZSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJEZWZhdWx0aW5nIHRvIDggTUIgZnJhbWVidWZmZXIgc2l6ZVxuIik7CisJCXNnaXZ3ZmJfbWVtX3NpemUgPSA4ICogTUI7CisJfQorCisJLyoKKwkgKiBUcmltIHRvIG5lYXJlc3QgTUIKKwkgKi8KKwlzZ2l2d2ZiX21lbV9zaXplICY9IH4oKDEgPDwgMjApIC0gMSk7CisJc2dpdndmYl9tZW1fcGh5cyA9IG1lbV9zaXplIC0gZ2Z4X21lbV9zaXplOworCisJYWRkX21lbW9yeV9yZWdpb24oMCwgTE9XTUVNU0laRSgpLCBFODIwX1JBTSk7CisJYWRkX21lbW9yeV9yZWdpb24oSElHSF9NRU1PUlksIG1lbV9zaXplIC0gc2dpdndmYl9tZW1fc2l6ZSAtIEhJR0hfTUVNT1JZLCBFODIwX1JBTSk7CisJYWRkX21lbW9yeV9yZWdpb24oc2dpdndmYl9tZW1fcGh5cywgc2dpdndmYl9tZW1fc2l6ZSwgRTgyMF9SRVNFUlZFRCk7CisKKwlyZXR1cm4gIlBST00iOworCisJLyogUmVtb3ZlIGdjYyB3YXJuaW5ncyAqLworCSh2b2lkKSBzYW5pdGl6ZV9lODIwX21hcChOVUxMLCBOVUxMKTsKKwkodm9pZCkgY29weV9lODIwX21hcChOVUxMLCAwKTsKK30KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvbWFjaC12aXN3cy9zZXR1cF9hcmNoX3ByZS5oIGIvaW5jbHVkZS9hc20taTM4Ni9tYWNoLXZpc3dzL3NldHVwX2FyY2hfcHJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjkyZDZkOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvbWFjaC12aXN3cy9zZXR1cF9hcmNoX3ByZS5oCkBAIC0wLDAgKzEsNSBAQAorLyogSG9vayB0byBjYWxsIEJJT1MgaW5pdGlhbGlzYXRpb24gZnVuY3Rpb24gKi8KKworLyogbm8gYWN0aW9uIGZvciB2aXN3cyAqLworCisjZGVmaW5lIEFSQ0hfU0VUVVAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvbWFjaC12aXN3cy9zbXBib290X2hvb2tzLmggYi9pbmNsdWRlL2FzbS1pMzg2L21hY2gtdmlzd3Mvc21wYm9vdF9ob29rcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MjY0NzEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L21hY2gtdmlzd3Mvc21wYm9vdF9ob29rcy5oCkBAIC0wLDAgKzEsMjQgQEAKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbXBib290X3NldHVwX3dhcm1fcmVzZXRfdmVjdG9yKHVuc2lnbmVkIGxvbmcgc3RhcnRfZWlwKQoreworCUNNT1NfV1JJVEUoMHhhLCAweGYpOworCWxvY2FsX2ZsdXNoX3RsYigpOworCURwcmludGsoIjEuXG4iKTsKKwkqKCh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSBUUkFNUE9MSU5FX0hJR0gpID0gc3RhcnRfZWlwID4+IDQ7CisJRHByaW50aygiMi5cbiIpOworCSooKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopIFRSQU1QT0xJTkVfTE9XKSA9IHN0YXJ0X2VpcCAmIDB4ZjsKKwlEcHJpbnRrKCIzLlxuIik7Cit9CisKKy8qIGZvciB2aXN3cyBkbyBub3RoaW5nIGZvciBhbnkgb2YgdGhlc2UgKi8KKworc3RhdGljIGlubGluZSB2b2lkIHNtcGJvb3RfY2xlYXJfaW9fYXBpY19pcnFzKHZvaWQpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbXBib290X3Jlc3RvcmVfd2FybV9yZXNldF92ZWN0b3Iodm9pZCkKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNtcGJvb3Rfc2V0dXBfaW9fYXBpYyh2b2lkKQoreworfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9tYWNoLXZveWFnZXIvZG9fdGltZXIuaCBiL2luY2x1ZGUvYXNtLWkzODYvbWFjaC12b3lhZ2VyL2RvX3RpbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU1MTBlNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvbWFjaC12b3lhZ2VyL2RvX3RpbWVyLmgKQEAgLTAsMCArMSwyNSBAQAorLyogZGVmaW5lcyBmb3IgaW5saW5lIGFyY2ggc2V0dXAgZnVuY3Rpb25zICovCisjaW5jbHVkZSA8YXNtL3ZveWFnZXIuaD4KKworc3RhdGljIGlubGluZSB2b2lkIGRvX3RpbWVyX2ludGVycnVwdF9ob29rKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWRvX3RpbWVyKHJlZ3MpOworI2lmbmRlZiBDT05GSUdfU01QCisJdXBkYXRlX3Byb2Nlc3NfdGltZXModXNlcl9tb2RlKHJlZ3MpKTsKKyNlbmRpZgorCisJdm95YWdlcl90aW1lcl9pbnRlcnJ1cHQocmVncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGRvX3RpbWVyX292ZXJmbG93KGludCBjb3VudCkKK3sKKwkvKiBjYW4ndCByZWFkIHRoZSBJU1IsIGp1c3QgYXNzdW1lIDEgdGljaworCSAgIG92ZXJmbG93ICovCisJaWYoY291bnQgPiBMQVRDSCB8fCBjb3VudCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJWT1lBR0VSIFBST0JMRU06IGNvdW50IGlzICVkLCBsYXRjaCBpcyAlZFxuIiwgY291bnQsIExBVENIKTsKKwkJY291bnQgPSBMQVRDSDsKKwl9CisJY291bnQgLT0gTEFUQ0g7CisKKwlyZXR1cm4gY291bnQ7Cit9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L21hY2gtdm95YWdlci9lbnRyeV9hcmNoLmggYi9pbmNsdWRlL2FzbS1pMzg2L21hY2gtdm95YWdlci9lbnRyeV9hcmNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGExZTFlOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvbWFjaC12b3lhZ2VyL2VudHJ5X2FyY2guaApAQCAtMCwwICsxLDI2IEBACisvKiAtKi0gbW9kZTogYzsgYy1iYXNpYy1vZmZzZXQ6IDggLSotICovCisKKy8qIENvcHlyaWdodCAoQykgMjAwMgorICoKKyAqIEF1dGhvcjogSmFtZXMuQm90dG9tbGV5QEhhbnNlblBhcnRuZXJzaGlwLmNvbQorICoKKyAqIGxpbnV4L2FyY2gvaTM4Ni92b3lhZ2VyL2VudHJ5X2FyY2guaAorICoKKyAqIFRoaXMgZmlsZSBidWlsZHMgdGhlIFZJQyBhbmQgUUlDIENQSSBnYXRlcworICovCisKKy8qIGluaXRpYWxpc2UgdGhlIHZveWFnZXIgaW50ZXJydXB0IGdhdGVzIAorICoKKyAqIFRoaXMgdXNlcyB0aGUgbWFjcm9zIGluIGlycS5oIHRvIHNldCB1cCBhc3NlbWJseSBqdW1wIGdhdGVzLiAgVGhlCisgKiBjYWxscyBhcmUgdGhlbiByZWRpcmVjdGVkIHRvIHRoZSBzYW1lIHJvdXRpbmUgd2l0aCBzbXBfIHByZWZpeGVkICovCitCVUlMRF9JTlRFUlJVUFQodmljX3N5c19pbnRlcnJ1cHQsIFZJQ19TWVNfSU5UKQorQlVJTERfSU5URVJSVVBUKHZpY19jbW5faW50ZXJydXB0LCBWSUNfQ01OX0lOVCkKK0JVSUxEX0lOVEVSUlVQVCh2aWNfY3BpX2ludGVycnVwdCwgVklDX0NQSV9MRVZFTDApOworCisvKiBkbyBhbGwgdGhlIFFJQyBpbnRlcnJ1cHRzICovCitCVUlMRF9JTlRFUlJVUFQocWljX3RpbWVyX2ludGVycnVwdCwgUUlDX1RJTUVSX0NQSSk7CitCVUlMRF9JTlRFUlJVUFQocWljX2ludmFsaWRhdGVfaW50ZXJydXB0LCBRSUNfSU5WQUxJREFURV9DUEkpOworQlVJTERfSU5URVJSVVBUKHFpY19yZXNjaGVkdWxlX2ludGVycnVwdCwgUUlDX1JFU0NIRURVTEVfQ1BJKTsKK0JVSUxEX0lOVEVSUlVQVChxaWNfZW5hYmxlX2lycV9pbnRlcnJ1cHQsIFFJQ19FTkFCTEVfSVJRX0NQSSk7CitCVUlMRF9JTlRFUlJVUFQocWljX2NhbGxfZnVuY3Rpb25faW50ZXJydXB0LCBRSUNfQ0FMTF9GVU5DVElPTl9DUEkpOworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L21hY2gtdm95YWdlci9pcnFfdmVjdG9ycy5oIGIvaW5jbHVkZS9hc20taTM4Ni9tYWNoLXZveWFnZXIvaXJxX3ZlY3RvcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjU0MjFmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9tYWNoLXZveWFnZXIvaXJxX3ZlY3RvcnMuaApAQCAtMCwwICsxLDc5IEBACisvKiAtKi0gbW9kZTogYzsgYy1iYXNpYy1vZmZzZXQ6IDggLSotICovCisKKy8qIENvcHlyaWdodCAoQykgMjAwMgorICoKKyAqIEF1dGhvcjogSmFtZXMuQm90dG9tbGV5QEhhbnNlblBhcnRuZXJzaGlwLmNvbQorICoKKyAqIGxpbnV4L2FyY2gvaTM4Ni92b3lhZ2VyL2lycV92ZWN0b3JzLmgKKyAqCisgKiBUaGlzIGZpbGUgcHJvdmlkZXMgZGVmaW5pdGlvbnMgZm9yIHRoZSBWSUMgYW5kIFFJQyBDUElzCisgKi8KKworI2lmbmRlZiBfQVNNX0lSUV9WRUNUT1JTX0gKKyNkZWZpbmUgX0FTTV9JUlFfVkVDVE9SU19ICisKKy8qCisgKiBJRFQgdmVjdG9ycyB1c2FibGUgZm9yIGV4dGVybmFsIGludGVycnVwdCBzb3VyY2VzIHN0YXJ0CisgKiBhdCAweDIwOgorICovCisjZGVmaW5lIEZJUlNUX0VYVEVSTkFMX1ZFQ1RPUgkweDIwCisKKyNkZWZpbmUgU1lTQ0FMTF9WRUNUT1IJCTB4ODAKKworLyoKKyAqIFZlY3RvcnMgMHgyMC0weDJmIGFyZSB1c2VkIGZvciBJU0EgaW50ZXJydXB0cy4KKyAqLworCisvKiBUaGVzZSBkZWZpbmUgdGhlIENQSXMgd2UgdXNlIGluIGxpbnV4ICovCisjZGVmaW5lIFZJQ19DUElfTEVWRUwwCQkJMAorI2RlZmluZSBWSUNfQ1BJX0xFVkVMMQkJCTEKKy8qIG5vdyB0aGUgZmFrZSBDUElzICovCisjZGVmaW5lIFZJQ19USU1FUl9DUEkJCQkyCisjZGVmaW5lIFZJQ19JTlZBTElEQVRFX0NQSQkJMworI2RlZmluZSBWSUNfUkVTQ0hFRFVMRV9DUEkJCTQKKyNkZWZpbmUgVklDX0VOQUJMRV9JUlFfQ1BJCQk1CisjZGVmaW5lIFZJQ19DQUxMX0ZVTkNUSU9OX0NQSQkJNgorCisvKiBOb3cgdGhlIFFJQyBDUElzOiAgU2luY2Ugd2UgZG9uJ3QgbmVlZCB0aGUgdHdvIGluaXRpYWwgbGV2ZWxzLAorICogdGhlc2UgYXJlIDIgbGVzcyB0aGFuIHRoZSBWSUMgQ1BJcyAqLworI2RlZmluZSBRSUNfQ1BJX09GRlNFVAkJCTEKKyNkZWZpbmUgUUlDX1RJTUVSX0NQSQkJCShWSUNfVElNRVJfQ1BJIC0gUUlDX0NQSV9PRkZTRVQpCisjZGVmaW5lIFFJQ19JTlZBTElEQVRFX0NQSQkJKFZJQ19JTlZBTElEQVRFX0NQSSAtIFFJQ19DUElfT0ZGU0VUKQorI2RlZmluZSBRSUNfUkVTQ0hFRFVMRV9DUEkJCShWSUNfUkVTQ0hFRFVMRV9DUEkgLSBRSUNfQ1BJX09GRlNFVCkKKyNkZWZpbmUgUUlDX0VOQUJMRV9JUlFfQ1BJCQkoVklDX0VOQUJMRV9JUlFfQ1BJIC0gUUlDX0NQSV9PRkZTRVQpCisjZGVmaW5lIFFJQ19DQUxMX0ZVTkNUSU9OX0NQSQkJKFZJQ19DQUxMX0ZVTkNUSU9OX0NQSSAtIFFJQ19DUElfT0ZGU0VUKQorCisjZGVmaW5lIFZJQ19TVEFSVF9GQUtFX0NQSQkJVklDX1RJTUVSX0NQSQorI2RlZmluZSBWSUNfRU5EX0ZBS0VfQ1BJCQlWSUNfQ0FMTF9GVU5DVElPTl9DUEkKKworLyogdGhpcyBpcyB0aGUgU1lTX0lOVCBDUEkuICovCisjZGVmaW5lIFZJQ19TWVNfSU5UCQkJOAorI2RlZmluZSBWSUNfQ01OX0lOVAkJCTE1CisKKy8qIFRoaXMgaXMgdGhlIGJvb3QgQ1BJIGZvciBhbHRlcm5hdGUgcHJvY2Vzc29ycy4gIEl0IGdldHMgb3ZlcndyaXR0ZW4KKyAqIGJ5IHRoZSBhYm92ZSBvbmNlIHRoZSBzeXN0ZW0gaGFzIGFjdGl2YXRlZCBhbGwgYXZhaWxhYmxlIHByb2Nlc3NvcnMgKi8KKyNkZWZpbmUgVklDX0NQVV9CT09UX0NQSQkJVklDX0NQSV9MRVZFTDAKKyNkZWZpbmUgVklDX0NQVV9CT09UX0VSUkFUQV9DUEkJCShWSUNfQ1BJX0xFVkVMMCArIDgpCisKKyNkZWZpbmUgTlJfVkVDVE9SUyAyNTYKKyNkZWZpbmUgTlJfSVJRUyAyMjQKKyNkZWZpbmUgTlJfSVJRX1ZFQ1RPUlMgTlJfSVJRUworCisjZGVmaW5lIEZQVV9JUlEJCQkJMTMKKworI2RlZmluZQlGSVJTVF9WTTg2X0lSUQkJMworI2RlZmluZSBMQVNUX1ZNODZfSVJRCQkxNQorI2RlZmluZSBpbnZhbGlkX3ZtODZfaXJxKGlycSkJKChpcnEpIDwgMyB8fCAoaXJxKSA+IDE1KQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCB2aWNfY3BpX2ludGVycnVwdCh2b2lkKTsKK2V4dGVybiBhc21saW5rYWdlIHZvaWQgdmljX3N5c19pbnRlcnJ1cHQodm9pZCk7CitleHRlcm4gYXNtbGlua2FnZSB2b2lkIHZpY19jbW5faW50ZXJydXB0KHZvaWQpOworZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBxaWNfdGltZXJfaW50ZXJydXB0KHZvaWQpOworZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBxaWNfaW52YWxpZGF0ZV9pbnRlcnJ1cHQodm9pZCk7CitleHRlcm4gYXNtbGlua2FnZSB2b2lkIHFpY19yZXNjaGVkdWxlX2ludGVycnVwdCh2b2lkKTsKK2V4dGVybiBhc21saW5rYWdlIHZvaWQgcWljX2VuYWJsZV9pcnFfaW50ZXJydXB0KHZvaWQpOworZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBxaWNfY2FsbF9mdW5jdGlvbl9pbnRlcnJ1cHQodm9pZCk7CisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYgLyogX0FTTV9JUlFfVkVDVE9SU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L21hY2gtdm95YWdlci9zZXR1cF9hcmNoX3Bvc3QuaCBiL2luY2x1ZGUvYXNtLWkzODYvbWFjaC12b3lhZ2VyL3NldHVwX2FyY2hfcG9zdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2ZjZjMmMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L21hY2gtdm95YWdlci9zZXR1cF9hcmNoX3Bvc3QuaApAQCAtMCwwICsxLDczIEBACisvKiBIb29rIGZvciBtYWNoaW5lIHNwZWNpZmljIG1lbW9yeSBzZXR1cC4KKyAqCisgKiBUaGlzIGlzIGluY2x1ZGVkIGxhdGUgaW4ga2VybmVsL3NldHVwLmMgc28gdGhhdCBpdCBjYW4gbWFrZSB1c2Ugb2YgYWxsIG9mCisgKiB0aGUgc3RhdGljIGZ1bmN0aW9ucy4gKi8KKworc3RhdGljIGNoYXIgKiBfX2luaXQgbWFjaGluZV9zcGVjaWZpY19tZW1vcnlfc2V0dXAodm9pZCkKK3sKKwljaGFyICp3aG87CisKKwl3aG8gPSAiTk9UIFZPWUFHRVIiOworCisJaWYodm95YWdlcl9sZXZlbCA9PSA1KSB7CisJCV9fdTMyIGFkZHIsIGxlbmd0aDsKKwkJaW50IGk7CisKKwkJd2hvID0gIlZveWFnZXItU1VTIjsKKworCQllODIwLm5yX21hcCA9IDA7CisJCWZvcihpPTA7IHZveWFnZXJfbWVtb3J5X2RldGVjdChpLCAmYWRkciwgJmxlbmd0aCk7IGkrKykgeworCQkJYWRkX21lbW9yeV9yZWdpb24oYWRkciwgbGVuZ3RoLCBFODIwX1JBTSk7CisJCX0KKwkJcmV0dXJuIHdobzsKKwl9IGVsc2UgaWYodm95YWdlcl9sZXZlbCA9PSA0KSB7CisJCV9fdTMyIHRvbTsKKwkJX191MTYgY2F0YmFzZSA9IGluYihWT1lBR0VSX1NTUEJfUkVMT0NBVElPTl9QT1JUKTw8ODsKKwkJLyogc2VsZWN0IHRoZSBESU5PIGNvbmZpZyBzcGFjZSAqLworCQlvdXRiKFZPWUFHRVJfRElOTywgVk9ZQUdFUl9DQVRfQ09ORklHX1BPUlQpOworCQkvKiBSZWFkIERJTk8gdG9wIG9mIG1lbW9yeSByZWdpc3RlciAqLworCQl0b20gPSAoKGluYihjYXRiYXNlICsgMHg0KSAmIDB4ZjApIDw8IDE2KQorCQkJKyAoKGluYihjYXRiYXNlICsgMHg1KSAmIDB4N2YpIDw8IDI0KTsKKworCQlpZihpbmIoY2F0YmFzZSkgIT0gVk9ZQUdFUl9ESU5PKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIlZveWFnZXI6IEZhaWxlZCB0byBnZXQgRElOTyBmb3IgTDQsIHNldHRpbmcgdG9tIHRvIEVYVF9NRU1fS1xuIik7CisJCQl0b20gPSAoRVhUX01FTV9LKTw8MTA7CisJCX0KKwkJd2hvID0gIlZveWFnZXItVE9NIjsKKwkJYWRkX21lbW9yeV9yZWdpb24oMCwgMHg5ZjAwMCwgRTgyMF9SQU0pOworCQkvKiBtYXAgZnJvbSAxTSB0byB0b3Agb2YgbWVtb3J5ICovCisJCWFkZF9tZW1vcnlfcmVnaW9uKDEqMTAyNCoxMDI0LCB0b20gLSAxKjEwMjQqMTAyNCwgRTgyMF9SQU0pOworCQkvKiBGSVhNRTogU2hvdWxkIGNoZWNrIHRoZSBBU0lDcyB0byBzZWUgaWYgSSBuZWVkIHRvCisJCSAqIHRha2Ugb3V0IHRoZSA4TSB3aW5kb3cuICBKdXN0IGRvIGl0IGF0IHRoZSBtb21lbnQKKwkJICogKi8KKwkJYWRkX21lbW9yeV9yZWdpb24oOCoxMDI0KjEwMjQsIDgqMTAyNCoxMDI0LCBFODIwX1JFU0VSVkVEKTsKKwkJcmV0dXJuIHdobzsKKwl9CisKKwl3aG8gPSAiQklPUy1lODIwIjsKKworCS8qCisJICogVHJ5IHRvIGNvcHkgdGhlIEJJT1Mtc3VwcGxpZWQgRTgyMC1tYXAuCisJICoKKwkgKiBPdGhlcndpc2UgZmFrZSBhIG1lbW9yeSBtYXA7IG9uZSBzZWN0aW9uIGZyb20gMGstPjY0MGssCisJICogdGhlIG5leHQgc2VjdGlvbiBmcm9tIDFtYi0+YXBwcm9wcmlhdGVfbWVtX2sKKwkgKi8KKwlzYW5pdGl6ZV9lODIwX21hcChFODIwX01BUCwgJkU4MjBfTUFQX05SKTsKKwlpZiAoY29weV9lODIwX21hcChFODIwX01BUCwgRTgyMF9NQVBfTlIpIDwgMCkgeworCQl1bnNpZ25lZCBsb25nIG1lbV9zaXplOworCisJCS8qIGNvbXBhcmUgcmVzdWx0cyBmcm9tIG90aGVyIG1ldGhvZHMgYW5kIHRha2UgdGhlIGdyZWF0ZXIgKi8KKwkJaWYgKEFMVF9NRU1fSyA8IEVYVF9NRU1fSykgeworCQkJbWVtX3NpemUgPSBFWFRfTUVNX0s7CisJCQl3aG8gPSAiQklPUy04OCI7CisJCX0gZWxzZSB7CisJCQltZW1fc2l6ZSA9IEFMVF9NRU1fSzsKKwkJCXdobyA9ICJCSU9TLWU4MDEiOworCQl9CisKKwkJZTgyMC5ucl9tYXAgPSAwOworCQlhZGRfbWVtb3J5X3JlZ2lvbigwLCBMT1dNRU1TSVpFKCksIEU4MjBfUkFNKTsKKwkJYWRkX21lbW9yeV9yZWdpb24oSElHSF9NRU1PUlksIG1lbV9zaXplIDw8IDEwLCBFODIwX1JBTSk7CisgIAl9CisJcmV0dXJuIHdobzsKK30KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvbWFjaC12b3lhZ2VyL3NldHVwX2FyY2hfcHJlLmggYi9pbmNsdWRlL2FzbS1pMzg2L21hY2gtdm95YWdlci9zZXR1cF9hcmNoX3ByZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4ZjdlNmYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L21hY2gtdm95YWdlci9zZXR1cF9hcmNoX3ByZS5oCkBAIC0wLDAgKzEsMTAgQEAKKyNpbmNsdWRlIDxhc20vdm95YWdlci5oPgorI2RlZmluZSBWT1lBR0VSX0JJT1NfSU5GTyAoKHN0cnVjdCB2b3lhZ2VyX2Jpb3NfaW5mbyAqKShQQVJBTSsweDQwKSkKKworLyogSG9vayB0byBjYWxsIEJJT1MgaW5pdGlhbGlzYXRpb24gZnVuY3Rpb24gKi8KKworLyogZm9yIHZveWFnZXIsIHBhc3MgdGhlIHZveWFnZXIgQklPUy9TVVMgaW5mbyBhcmVhIHRvIHRoZSBkZXRlY3Rpb24gCisgKiByb3V0aW5lcyAqLworCisjZGVmaW5lIEFSQ0hfU0VUVVAJdm95YWdlcl9kZXRlY3QoVk9ZQUdFUl9CSU9TX0lORk8pOworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L21hdGhfZW11LmggYi9pbmNsdWRlL2FzbS1pMzg2L21hdGhfZW11LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk3NjczYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvbWF0aF9lbXUuaApAQCAtMCwwICsxLDM1IEBACisjaWZuZGVmIF9JMzg2X01BVEhfRU1VX0gKKyNkZWZpbmUgX0kzODZfTUFUSF9FTVVfSAorCisjaW5jbHVkZSA8YXNtL3NpZ2NvbnRleHQuaD4KKworaW50IHJlc3RvcmVfaTM4N19zb2Z0KHZvaWQgKnMzODcsIHN0cnVjdCBfZnBzdGF0ZSBfX3VzZXIgKmJ1Zik7CitpbnQgc2F2ZV9pMzg3X3NvZnQodm9pZCAqczM4Nywgc3RydWN0IF9mcHN0YXRlIF9fdXNlciAqYnVmKTsKKworLyogVGhpcyBzdHJ1Y3R1cmUgbWF0Y2hlcyB0aGUgbGF5b3V0IG9mIHRoZSBkYXRhIHNhdmVkIHRvIHRoZSBzdGFjaworICAgZm9sbG93aW5nIGEgZGV2aWNlLW5vdC1wcmVzZW50IGludGVycnVwdCwgcGFydCBvZiBpdCBzYXZlZAorICAgYXV0b21hdGljYWxseSBieSB0aGUgODAzODYvODA0ODYuCisgICAqLworc3RydWN0IGluZm8geworCWxvbmcgX19fb3JpZ19laXA7CisJbG9uZyBfX19lYng7CisJbG9uZyBfX19lY3g7CisJbG9uZyBfX19lZHg7CisJbG9uZyBfX19lc2k7CisJbG9uZyBfX19lZGk7CisJbG9uZyBfX19lYnA7CisJbG9uZyBfX19lYXg7CisJbG9uZyBfX19kczsKKwlsb25nIF9fX2VzOworCWxvbmcgX19fb3JpZ19lYXg7CisJbG9uZyBfX19laXA7CisJbG9uZyBfX19jczsKKwlsb25nIF9fX2VmbGFnczsKKwlsb25nIF9fX2VzcDsKKwlsb25nIF9fX3NzOworCWxvbmcgX19fdm04Nl9lczsgLyogVGhpcyBhbmQgdGhlIGZvbGxvd2luZyBvbmx5IGluIHZtODYgbW9kZSAqLworCWxvbmcgX19fdm04Nl9kczsKKwlsb25nIF9fX3ZtODZfZnM7CisJbG9uZyBfX192bTg2X2dzOworfTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9tYzE0NjgxOHJ0Yy5oIGIvaW5jbHVkZS9hc20taTM4Ni9tYzE0NjgxOHJ0Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5YTg5MDAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L21jMTQ2ODE4cnRjLmgKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqIE1hY2hpbmUgZGVwZW5kZW50IGFjY2VzcyBmdW5jdGlvbnMgZm9yIFJUQyByZWdpc3RlcnMuCisgKi8KKyNpZm5kZWYgX0FTTV9NQzE0NjgxOFJUQ19ICisjZGVmaW5lIF9BU01fTUMxNDY4MThSVENfSAorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGxpbnV4L21jMTQ2ODE4cnRjLmg+CisKKyNpZm5kZWYgUlRDX1BPUlQKKyNkZWZpbmUgUlRDX1BPUlQoeCkJKDB4NzAgKyAoeCkpCisjZGVmaW5lIFJUQ19BTFdBWVNfQkNECTEJLyogUlRDIG9wZXJhdGVzIGluIGJpbmFyeSBtb2RlICovCisjZW5kaWYKKworI2lmZGVmIF9fSEFWRV9BUkNIX0NNUFhDSEcKKy8qCisgKiBUaGlzIGxvY2sgcHJvdmlkZXMgbm1pIGFjY2VzcyB0byB0aGUgQ01PUy9SVEMgcmVnaXN0ZXJzLiAgSXQgaGFzIHNvbWUKKyAqIHNwZWNpYWwgcHJvcGVydGllcy4gIEl0IGlzIG93bmVkIGJ5IGEgQ1BVIGFuZCBzdG9yZXMgdGhlIGluZGV4IHJlZ2lzdGVyCisgKiBjdXJyZW50bHkgYmVpbmcgYWNjZXNzZWQgKGlmIG93bmVkKS4gIFRoZSBpZGVhIGhlcmUgaXMgdGhhdCBpdCB3b3JrcworICogbGlrZSBhIG5vcm1hbCBsb2NrIChub3JtYWxseSkuICBIb3dldmVyLCBpbiBhbiBOTUksIHRoZSBOTUkgY29kZSB3aWxsCisgKiBmaXJzdCBjaGVjayB0byBzZWUgaWYgaXRzIENQVSBvd25zIHRoZSBsb2NrLCBtZWFuaW5nIHRoYXQgdGhlIE5NSQorICogaW50ZXJydXB0ZWQgZHVyaW5nIHRoZSByZWFkL3dyaXRlIG9mIHRoZSBkZXZpY2UuICBJZiBpdCBkb2VzLCBpdCBnb2VzIGFoZWFkCisgKiBhbmQgcGVyZm9ybXMgdGhlIGFjY2VzcyBhbmQgdGhlbiByZXN0b3JlcyB0aGUgaW5kZXggcmVnaXN0ZXIuICBJZiBpdCBkb2VzCisgKiBub3QsIGl0IGxvY2tzIG5vcm1hbGx5LgorICoKKyAqIE5vdGUgdGhhdCBzaW5jZSB3ZSBhcmUgd29ya2luZyB3aXRoIE5NSXMsIHdlIG5lZWQgdGhpcyBsb2NrIGV2ZW4gaW4KKyAqIGEgbm9uLVNNUCBtYWNoaW5lIGp1c3QgdG8gbWFyayB0aGF0IHRoZSBsb2NrIGlzIG93bmVkLgorICoKKyAqIFRoaXMgb25seSB3b3JrcyB3aXRoIGNvbXBhcmUtYW5kLXN3YXAuICBUaGVyZSBpcyBubyBvdGhlciB3YXkgdG8KKyAqIGF0b21pY2FsbHkgY2xhaW0gdGhlIGxvY2sgYW5kIHNldCB0aGUgb3duZXIuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KK2V4dGVybiB2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGNtb3NfbG9jazsKKworLyoKKyAqIEFsbCBvZiB0aGVzZSBiZWxvdyBtdXN0IGJlIGNhbGxlZCB3aXRoIGludGVycnVwdHMgb2ZmLCBwcmVlbXB0CisgKiBkaXNhYmxlZCwgZXRjLgorICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2NrX2Ntb3ModW5zaWduZWQgY2hhciByZWcpCit7CisJdW5zaWduZWQgbG9uZyBuZXc7CisJbmV3ID0gKChzbXBfcHJvY2Vzc29yX2lkKCkrMSkgPDwgOCkgfCByZWc7CisJZm9yICg7OykgeworCQlpZiAoY21vc19sb2NrKQorCQkJY29udGludWU7CisJCWlmIChfX2NtcHhjaGcoJmNtb3NfbG9jaywgMCwgbmV3LCBzaXplb2YoY21vc19sb2NrKSkgPT0gMCkKKwkJCXJldHVybjsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tfY21vcyh2b2lkKQoreworCWNtb3NfbG9jayA9IDA7Cit9CitzdGF0aWMgaW5saW5lIGludCBkb19pX2hhdmVfbG9ja19jbW9zKHZvaWQpCit7CisJcmV0dXJuIChjbW9zX2xvY2sgPj4gOCkgPT0gKHNtcF9wcm9jZXNzb3JfaWQoKSsxKTsKK30KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciBjdXJyZW50X2xvY2tfY21vc19yZWcodm9pZCkKK3sKKwlyZXR1cm4gY21vc19sb2NrICYgMHhmZjsKK30KKyNkZWZpbmUgbG9ja19jbW9zX3ByZWZpeChyZWcpIFwKKwlkbyB7CQkJCQlcCisJCXVuc2lnbmVkIGxvbmcgY21vc19mbGFnczsJXAorCQlsb2NhbF9pcnFfc2F2ZShjbW9zX2ZsYWdzKTsJXAorCQlsb2NrX2Ntb3MocmVnKQorI2RlZmluZSBsb2NrX2Ntb3Nfc3VmZml4KHJlZykgXAorCQl1bmxvY2tfY21vcygpOwkJCVwKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoY21vc19mbGFncyk7CVwKKwl9IHdoaWxlICgwKQorI2Vsc2UKKyNkZWZpbmUgbG9ja19jbW9zX3ByZWZpeChyZWcpIGRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBsb2NrX2Ntb3Nfc3VmZml4KHJlZykgZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIGxvY2tfY21vcyhyZWcpCisjZGVmaW5lIHVubG9ja19jbW9zKCkKKyNkZWZpbmUgZG9faV9oYXZlX2xvY2tfY21vcygpIDAKKyNkZWZpbmUgY3VycmVudF9sb2NrX2Ntb3NfcmVnKCkgMAorI2VuZGlmCisKKy8qCisgKiBUaGUgeWV0IHN1cHBvcnRlZCBtYWNoaW5lcyBhbGwgYWNjZXNzIHRoZSBSVEMgaW5kZXggcmVnaXN0ZXIgdmlhCisgKiBhbiBJU0EgcG9ydCBhY2Nlc3MgYnV0IHRoZSB3YXkgdG8gYWNjZXNzIHRoZSBkYXRlIHJlZ2lzdGVyIGRpZmZlcnMgLi4uCisgKi8KKyNkZWZpbmUgQ01PU19SRUFEKGFkZHIpIHJ0Y19jbW9zX3JlYWQoYWRkcikKKyNkZWZpbmUgQ01PU19XUklURSh2YWwsIGFkZHIpIHJ0Y19jbW9zX3dyaXRlKHZhbCwgYWRkcikKK3Vuc2lnbmVkIGNoYXIgcnRjX2Ntb3NfcmVhZCh1bnNpZ25lZCBjaGFyIGFkZHIpOwordm9pZCBydGNfY21vc193cml0ZSh1bnNpZ25lZCBjaGFyIHZhbCwgdW5zaWduZWQgY2hhciBhZGRyKTsKKworI2RlZmluZSBSVENfSVJRIDgKKworI2VuZGlmIC8qIF9BU01fTUMxNDY4MThSVENfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9tY2EuaCBiL2luY2x1ZGUvYXNtLWkzODYvbWNhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDlhZGYyZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvbWNhLmgKQEAgLTAsMCArMSw0MyBAQAorLyogLSotIG1vZGU6IGM7IGMtYmFzaWMtb2Zmc2V0OiA4IC0qLSAqLworCisvKiBQbGF0Zm9ybSBzcGVjaWZpYyBNQ0EgZGVmaW5lcyAqLworI2lmbmRlZiBfQVNNX01DQV9ICisjZGVmaW5lIF9BU01fTUNBX0gKKworLyogTWF4aW1hbCBudW1iZXIgb2YgTUNBIHNsb3RzIC0gYWN0dWFsbHksIHNvbWUgbWFjaGluZXMgaGF2ZSBsZXNzLCBidXQKKyAqIHRoZXkgYWxsIGhhdmUgc3VmZmljaWVudCBudW1iZXIgb2YgUE9TIHJlZ2lzdGVycyB0byBjb3ZlciA4LgorICovCisjZGVmaW5lIE1DQV9NQVhfU0xPVF9OUiAgOAorCisvKiBNb3N0IG1hY2hpbmVzIGhhdmUgb25seSBvbmUgTUNBIGJ1cy4gIFRoZSBvbmx5IG11bHRpcGxlIGJ1cyBtYWNoaW5lcworICogSSBrbm93IGhhdmUgYXQgbW9zdCB0d28gKi8KKyNkZWZpbmUgTUFYX01DQV9CVVNTRVMgMgorCisjZGVmaW5lIE1DQV9QUklNQVJZX0JVUwkJMAorI2RlZmluZSBNQ0FfU0VDT05EQVJZX0JVUwkxCisKKy8qIER1bW15IHNsb3QgbnVtYmVycyBvbiBwcmltYXJ5IE1DQSBmb3IgaW50ZWdyYXRlZCBmdW5jdGlvbnMgKi8KKyNkZWZpbmUgTUNBX0lOVEVHU0NTSQkoTUNBX01BWF9TTE9UX05SKQorI2RlZmluZSBNQ0FfSU5URUdWSURFTwkoTUNBX01BWF9TTE9UX05SKzEpCisjZGVmaW5lIE1DQV9NT1RIRVJCT0FSRCAoTUNBX01BWF9TTE9UX05SKzIpCisKKy8qIER1bW15IFBPUyB2YWx1ZXMgZm9yIGludGVncmF0ZWQgZnVuY3Rpb25zICovCisjZGVmaW5lIE1DQV9EVU1NWV9QT1NfU1RBUlQJMHgxMDAwMAorI2RlZmluZSBNQ0FfSU5URUdTQ1NJX1BPUwkoTUNBX0RVTU1ZX1BPU19TVEFSVCsxKQorI2RlZmluZSBNQ0FfSU5URUdWSURFT19QT1MJKE1DQV9EVU1NWV9QT1NfU1RBUlQrMikKKyNkZWZpbmUgTUNBX01PVEhFUkJPQVJEX1BPUwkoTUNBX0RVTU1ZX1BPU19TVEFSVCszKQorCisvKiBNQ0EgcmVnaXN0ZXJzICovCisKKyNkZWZpbmUgTUNBX01PVEhFUkJPQVJEX1NFVFVQX1JFRwkweDk0CisjZGVmaW5lIE1DQV9BREFQVEVSX1NFVFVQX1JFRwkJMHg5NgorI2RlZmluZSBNQ0FfUE9TX1JFRyhuKQkJCSgweDEwMCsobikpCisKKyNkZWZpbmUgTUNBX0VOQUJMRUQJMHgwMQkvKiBQT1MgMiwgc2V0IGlmIGFkYXB0ZXIgZW5hYmxlZCAqLworCisvKiBNYXggbnVtYmVyIG9mIGFkYXB0ZXJzLCBpbmNsdWRpbmcgYm90aCBzbG90cyBhbmQgdmFyaW91cyBpbnRlZ3JhdGVkCisgKiB0aGluZ3MuCisgKi8KKyNkZWZpbmUgTUNBX05VTUFEQVBURVJTIChNQ0FfTUFYX1NMT1RfTlIrMykKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L21jYV9kbWEuaCBiL2luY2x1ZGUvYXNtLWkzODYvbWNhX2RtYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiM2I1MjYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L21jYV9kbWEuaApAQCAtMCwwICsxLDIwMiBAQAorI2lmbmRlZiBNQ0FfRE1BX0gKKyNkZWZpbmUgTUNBX0RNQV9ICisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKworLyoKKyAqIE1pY3JvY2hhbm5lbCBzcGVjaWZpYyBETUEgc3R1ZmYuICBETUEgb24gYW4gTUNBIG1hY2hpbmUgaXMgZmFpcmx5IHNpbWlsYXIgdG8KKyAqICAgc3RhbmRhcmQgUEMgZG1hLCBidXQgaXQgY2VydGFpbmx5IGhhcyBpdHMgcXVpcmtzLiAgRE1BIHJlZ2lzdGVyIGFkZHJlc3NlcworICogICBhcmUgaW4gYSBkaWZmZXJlbnQgcGxhY2UgYW5kIHRoZXJlIGFyZSBzb21lIGFkZGVkIGZ1bmN0aW9ucy4gIE1vc3Qgb2YgdGhpcworICogICBzaG91bGQgYmUgcHJldHR5IG9idmlvdXMgb24gaW5zcGVjdGlvbi4gIE5vdGUgdGhhdCB0aGUgdXNlciBtdXN0IGRpdmlkZQorICogICBjb3VudCBieSAyIHdoZW4gdXNpbmcgMTYtYml0IGRtYTsgdGhhdCBpcyBub3QgaGFuZGxlZCBieSB0aGVzZSBmdW5jdGlvbnMuCisgKgorICogUmFtZW4gTm9vZGxlcyBhcmUgeXVtbXkuCisgKiAKKyAqICAxOTk4IFR5bW0gVHdpbGxtYW4gPHR5bW1AY29tcHV0ZXIub3JnPiAgCisgKi8KKworLyoKKyAqIFJlZ2lzdGVycyB0aGF0IGFyZSB1c2VkIGJ5IHRoZSBETUEgY29udHJvbGxlcjsgRk4gaXMgdGhlIGZ1bmN0aW9uIHJlZ2lzdGVyIAorICogICAodGVsbCB0aGUgY29udHJvbGxlciB3aGF0IHRvIGRvKSBhbmQgRVhFIGlzIHRoZSBleGVjdXRpb24gcmVnaXN0ZXIgKGhvdworICogICB0byBkbyBpdCkKKyAqLworCisjZGVmaW5lIE1DQV9ETUFfUkVHX0ZOICAweDE4CisjZGVmaW5lIE1DQV9ETUFfUkVHX0VYRSAweDFBIAorCisvKgorICogRnVuY3Rpb25zIHRoYXQgdGhlIERNQSBjb250cm9sbGVyIGNhbiBkbworICovCisKKyNkZWZpbmUgTUNBX0RNQV9GTl9TRVRfSU8gICAgICAgMHgwMAorI2RlZmluZSBNQ0FfRE1BX0ZOX1NFVF9BRERSICAgICAweDIwCisjZGVmaW5lIE1DQV9ETUFfRk5fR0VUX0FERFIgICAgIDB4MzAKKyNkZWZpbmUgTUNBX0RNQV9GTl9TRVRfQ09VTlQgICAgMHg0MAorI2RlZmluZSBNQ0FfRE1BX0ZOX0dFVF9DT1VOVCAgICAweDUwCisjZGVmaW5lIE1DQV9ETUFfRk5fR0VUX1NUQVRVUyAgIDB4NjAKKyNkZWZpbmUgTUNBX0RNQV9GTl9TRVRfTU9ERSAgICAgMHg3MAorI2RlZmluZSBNQ0FfRE1BX0ZOX1NFVF9BUkJVUyAgICAweDgwCisjZGVmaW5lIE1DQV9ETUFfRk5fTUFTSyAgICAgICAgIDB4OTAKKyNkZWZpbmUgTUNBX0RNQV9GTl9SRVNFVF9NQVNLICAgMHhBMAorI2RlZmluZSBNQ0FfRE1BX0ZOX01BU1RFUl9DTEVBUiAweEQwCisKKy8qCisgKiBNb2RlcyAodXNlZCBieSBzZXR0aW5nIE1DQV9ETUFfRk5fTU9ERSBpbiB0aGUgZnVuY3Rpb24gcmVnaXN0ZXIpCisgKiAKKyAqIE5vdGUgdGhhdCB0aGUgTU9ERV9SRUFEIGlzIHJlYWQgZnJvbSBtZW1vcnkgKHdyaXRlIHRvIGRldmljZSksIGFuZAorICogICBNT0RFX1dSSVRFIGlzIHZpY2UtdmVyc2EuICAKKyAqLworCisjZGVmaW5lIE1DQV9ETUFfTU9ERV9YRkVSICAweDA0ICAvKiByZWFkIGJ5IGRlZmF1bHQgKi8KKyNkZWZpbmUgTUNBX0RNQV9NT0RFX1JFQUQgIDB4MDQgIC8qIHNhbWUgYXMgWEZFUiAqLworI2RlZmluZSBNQ0FfRE1BX01PREVfV1JJVEUgMHgwOCAgLyogT1Igd2l0aCBNT0RFX1hGRVIgdG8gdXNlICovCisjZGVmaW5lIE1DQV9ETUFfTU9ERV9JTyAgICAweDAxICAvKiBETUEgZnJvbSBJTyByZWdpc3RlciAqLworI2RlZmluZSBNQ0FfRE1BX01PREVfMTYgICAgMHg0MCAgLyogMTYgYml0IHhmZXJzICovCisKKworLyoqCisgKgltY2FfZW5hYmxlX2RtYQktCWNoYW5uZWwgdG8gZW5hYmxlIERNQSBvbgorICoJQGRtYW5yOiBETUEgY2hhbm5lbAorICoKKyAqCUVuYWJsZSB0aGUgTUNBIGJ1cyBETUEgb24gYSBjaGFubmVsLiBUaGlzIGNhbiBiZSBjYWxsZWQgZnJvbQorICoJSVJRIGNvbnRleHQuCisgKi8KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBtY2FfZW5hYmxlX2RtYSh1bnNpZ25lZCBpbnQgZG1hbnIpCit7CisJb3V0YihNQ0FfRE1BX0ZOX1JFU0VUX01BU0sgfCBkbWFuciwgTUNBX0RNQV9SRUdfRk4pOworfQorCisvKioKKyAqCW1jYV9kaXNibGVfZG1hCS0JY2hhbm5lbCB0byBkaXNhYmxlIERNQSBvbgorICoJQGRtYW5yOiBETUEgY2hhbm5lbAorICoKKyAqCUVuYWJsZSB0aGUgTUNBIGJ1cyBETUEgb24gYSBjaGFubmVsLiBUaGlzIGNhbiBiZSBjYWxsZWQgZnJvbQorICoJSVJRIGNvbnRleHQuCisgKi8KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBtY2FfZGlzYWJsZV9kbWEodW5zaWduZWQgaW50IGRtYW5yKQoreworCW91dGIoTUNBX0RNQV9GTl9NQVNLIHwgZG1hbnIsIE1DQV9ETUFfUkVHX0ZOKTsKK30KKworLyoqCisgKgltY2Ffc2V0X2RtYV9hZGRyIC0JbG9hZCBhIDI0Yml0IERNQSBhZGRyZXNzCisgKglAZG1hbnI6IERNQSBjaGFubmVsCisgKglAYTogMjRiaXQgYnVzIGFkZHJlc3MKKyAqCisgKglMb2FkIHRoZSBhZGRyZXNzIHJlZ2lzdGVyIGluIHRoZSBETUEgY29udHJvbGxlci4gVGhpcyBoYXMgYSAyNGJpdAorICoJbGltaXRhdGlvbiAoMTZNYikuIAorICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgbWNhX3NldF9kbWFfYWRkcih1bnNpZ25lZCBpbnQgZG1hbnIsIHVuc2lnbmVkIGludCBhKQoreworCW91dGIoTUNBX0RNQV9GTl9TRVRfQUREUiB8IGRtYW5yLCBNQ0FfRE1BX1JFR19GTik7CisJb3V0YihhICYgMHhmZiwgTUNBX0RNQV9SRUdfRVhFKTsKKwlvdXRiKChhID4+IDgpICYgMHhmZiwgTUNBX0RNQV9SRUdfRVhFKTsKKwlvdXRiKChhID4+IDE2KSAmIDB4ZmYsIE1DQV9ETUFfUkVHX0VYRSk7Cit9CisKKy8qKgorICoJbWNhX2dldF9kbWFfYWRkciAtCWxvYWQgYSAyNGJpdCBETUEgYWRkcmVzcworICoJQGRtYW5yOiBETUEgY2hhbm5lbAorICoKKyAqCVJlYWQgdGhlIGFkZHJlc3MgcmVnaXN0ZXIgaW4gdGhlIERNQSBjb250cm9sbGVyLiBUaGlzIGhhcyBhIDI0Yml0CisgKglsaW1pdGF0aW9uICgxNk1iKS4gVGhlIHJldHVybiBpcyBhIGJ1cyBhZGRyZXNzLgorICovCisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCBtY2FfZ2V0X2RtYV9hZGRyKHVuc2lnbmVkIGludCBkbWFucikKK3sKKwl1bnNpZ25lZCBpbnQgYWRkcjsKKworCW91dGIoTUNBX0RNQV9GTl9HRVRfQUREUiB8IGRtYW5yLCBNQ0FfRE1BX1JFR19GTik7CisJYWRkciA9IGluYihNQ0FfRE1BX1JFR19FWEUpOworCWFkZHIgfD0gaW5iKE1DQV9ETUFfUkVHX0VYRSkgPDwgODsKKwlhZGRyIHw9IGluYihNQ0FfRE1BX1JFR19FWEUpIDw8IDE2OyAgCisKKwlyZXR1cm4gYWRkcjsKK30KKworLyoqCisgKgltY2Ffc2V0X2RtYV9jb3VudCAtCWxvYWQgYSAxNmJpdCB0cmFuc2ZlciBjb3VudAorICoJQGRtYW5yOiBETUEgY2hhbm5lbAorICoJQGNvdW50OiBjb3VudAorICoKKyAqCVNldCB0aGUgRE1BIGNvdW50IGZvciB0aGlzIGNoYW5uZWwuIFRoaXMgY2FuIGJlIHVwIHRvIDY0S2J5dGVzLgorICoJU2V0dGluZyBhIGNvdW50IG9mIHplcm8gd2lsbCBub3QgZG8gd2hhdCB5b3UgZXhwZWN0LgorICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgbWNhX3NldF9kbWFfY291bnQodW5zaWduZWQgaW50IGRtYW5yLCB1bnNpZ25lZCBpbnQgY291bnQpCit7CisJY291bnQtLTsgIC8qIHRyYW5zZmVycyBvbmUgbW9yZSB0aGFuIGNvdW50IC0tIGNvcnJlY3QgZm9yIHRoaXMgKi8KKworCW91dGIoTUNBX0RNQV9GTl9TRVRfQ09VTlQgfCBkbWFuciwgTUNBX0RNQV9SRUdfRk4pOworCW91dGIoY291bnQgJiAweGZmLCBNQ0FfRE1BX1JFR19FWEUpOworCW91dGIoKGNvdW50ID4+IDgpICYgMHhmZiwgTUNBX0RNQV9SRUdfRVhFKTsKK30KKworLyoqCisgKgltY2FfZ2V0X2RtYV9yZXNpZHVlIC0JZ2V0IHRoZSByZW1haW5pbmcgYnl0ZXMgdG8gdHJhbnNmZXIKKyAqCUBkbWFucjogRE1BIGNoYW5uZWwKKyAqCisgKglUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBsZWZ0IHRvIHRyYW5zZmVyCisgKglvbiB0aGlzIERNQSBjaGFubmVsLgorICovCisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCBtY2FfZ2V0X2RtYV9yZXNpZHVlKHVuc2lnbmVkIGludCBkbWFucikKK3sKKwl1bnNpZ25lZCBzaG9ydCBjb3VudDsKKworCW91dGIoTUNBX0RNQV9GTl9HRVRfQ09VTlQgfCBkbWFuciwgTUNBX0RNQV9SRUdfRk4pOworCWNvdW50ID0gMSArIGluYihNQ0FfRE1BX1JFR19FWEUpOworCWNvdW50ICs9IGluYihNQ0FfRE1BX1JFR19FWEUpIDw8IDg7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qKgorICoJbWNhX3NldF9kbWFfaW8gLQlzZXQgdGhlIHBvcnQgZm9yIGFuIEkvTyB0cmFuc2ZlcgorICoJQGRtYW5yOiBETUEgY2hhbm5lbAorICoJQGlvX2FkZHI6IGFuIEkvTyBwb3J0IG51bWJlcgorICoKKyAqCVVubGlrZSB0aGUgSVNBIGJ1cyBETUEgY29udHJvbGxlcnMgdGhlIERNQSBvbiBNQ0EgYnVzIGNhbiB0cmFuc2ZlcgorICoJd2l0aCBhbiBJL08gcG9ydCB0YXJnZXQuCisgKi8KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBtY2Ffc2V0X2RtYV9pbyh1bnNpZ25lZCBpbnQgZG1hbnIsIHVuc2lnbmVkIGludCBpb19hZGRyKQoreworCS8qCisJICogRE1BIGZyb20gYSBwb3J0IGFkZHJlc3MgLS0gc2V0IHRoZSBpbyBhZGRyZXNzCisJICovCisJCisJb3V0YihNQ0FfRE1BX0ZOX1NFVF9JTyB8IGRtYW5yLCBNQ0FfRE1BX1JFR19GTik7CisJb3V0Yihpb19hZGRyICYgMHhmZiwgTUNBX0RNQV9SRUdfRVhFKTsKKwlvdXRiKChpb19hZGRyID4+ICA4KSAmIDB4ZmYsIE1DQV9ETUFfUkVHX0VYRSk7Cit9CisKKy8qKgorICoJbWNhX3NldF9kbWFfbW9kZSAtCXNldCB0aGUgRE1BIG1vZGUKKyAqCUBkbWFucjogRE1BIGNoYW5uZWwKKyAqCUBtb2RlOiBtb2RlIHRvIHNldAorICoKKyAqCVRoZSBETUEgY29udHJvbGxlciBzdXBwb3J0cyBzZXZlcmFsIG1vZGVzLiBUaGUgbW9kZSB2YWx1ZXMgeW91IGNhbgorICoJc2V0IGFyZSA6CisgKgorICoJJU1DQV9ETUFfTU9ERV9SRUFEIHdoZW4gcmVhZGluZyBmcm9tIHRoZSBETUEgZGV2aWNlLgorICoKKyAqCSVNQ0FfRE1BX01PREVfV1JJVEUgdG8gd3JpdGluZyB0byB0aGUgRE1BIGRldmljZS4KKyAqCisgKgklTUNBX0RNQV9NT0RFX0lPIHRvIGRvIERNQSB0byBvciBmcm9tIGFuIEkvTyBwb3J0LgorICoKKyAqCSVNQ0FfRE1BX01PREVfMTYgdG8gZG8gMTZiaXQgdHJhbnNmZXJzLgorICoKKyAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIG1jYV9zZXRfZG1hX21vZGUodW5zaWduZWQgaW50IGRtYW5yLCB1bnNpZ25lZCBpbnQgbW9kZSkKK3sKKwlvdXRiKE1DQV9ETUFfRk5fU0VUX01PREUgfCBkbWFuciwgTUNBX0RNQV9SRUdfRk4pOworCW91dGIobW9kZSwgTUNBX0RNQV9SRUdfRVhFKTsKK30KKworI2VuZGlmIC8qIE1DQV9ETUFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9tbWFuLmggYi9pbmNsdWRlL2FzbS1pMzg2L21tYW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTY2MTlhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9tbWFuLmgKQEAgLTAsMCArMSw0MyBAQAorI2lmbmRlZiBfX0kzODZfTU1BTl9IX18KKyNkZWZpbmUgX19JMzg2X01NQU5fSF9fCisKKyNkZWZpbmUgUFJPVF9SRUFECTB4MQkJLyogcGFnZSBjYW4gYmUgcmVhZCAqLworI2RlZmluZSBQUk9UX1dSSVRFCTB4MgkJLyogcGFnZSBjYW4gYmUgd3JpdHRlbiAqLworI2RlZmluZSBQUk9UX0VYRUMJMHg0CQkvKiBwYWdlIGNhbiBiZSBleGVjdXRlZCAqLworI2RlZmluZSBQUk9UX1NFTQkweDgJCS8qIHBhZ2UgbWF5IGJlIHVzZWQgZm9yIGF0b21pYyBvcHMgKi8KKyNkZWZpbmUgUFJPVF9OT05FCTB4MAkJLyogcGFnZSBjYW4gbm90IGJlIGFjY2Vzc2VkICovCisjZGVmaW5lIFBST1RfR1JPV1NET1dOCTB4MDEwMDAwMDAJLyogbXByb3RlY3QgZmxhZzogZXh0ZW5kIGNoYW5nZSB0byBzdGFydCBvZiBncm93c2Rvd24gdm1hICovCisjZGVmaW5lIFBST1RfR1JPV1NVUAkweDAyMDAwMDAwCS8qIG1wcm90ZWN0IGZsYWc6IGV4dGVuZCBjaGFuZ2UgdG8gZW5kIG9mIGdyb3dzdXAgdm1hICovCisKKyNkZWZpbmUgTUFQX1NIQVJFRAkweDAxCQkvKiBTaGFyZSBjaGFuZ2VzICovCisjZGVmaW5lIE1BUF9QUklWQVRFCTB4MDIJCS8qIENoYW5nZXMgYXJlIHByaXZhdGUgKi8KKyNkZWZpbmUgTUFQX1RZUEUJMHgwZgkJLyogTWFzayBmb3IgdHlwZSBvZiBtYXBwaW5nICovCisjZGVmaW5lIE1BUF9GSVhFRAkweDEwCQkvKiBJbnRlcnByZXQgYWRkciBleGFjdGx5ICovCisjZGVmaW5lIE1BUF9BTk9OWU1PVVMJMHgyMAkJLyogZG9uJ3QgdXNlIGEgZmlsZSAqLworCisjZGVmaW5lIE1BUF9HUk9XU0RPV04JMHgwMTAwCQkvKiBzdGFjay1saWtlIHNlZ21lbnQgKi8KKyNkZWZpbmUgTUFQX0RFTllXUklURQkweDA4MDAJCS8qIEVUWFRCU1kgKi8KKyNkZWZpbmUgTUFQX0VYRUNVVEFCTEUJMHgxMDAwCQkvKiBtYXJrIGl0IGFzIGFuIGV4ZWN1dGFibGUgKi8KKyNkZWZpbmUgTUFQX0xPQ0tFRAkweDIwMDAJCS8qIHBhZ2VzIGFyZSBsb2NrZWQgKi8KKyNkZWZpbmUgTUFQX05PUkVTRVJWRQkweDQwMDAJCS8qIGRvbid0IGNoZWNrIGZvciByZXNlcnZhdGlvbnMgKi8KKyNkZWZpbmUgTUFQX1BPUFVMQVRFCTB4ODAwMAkJLyogcG9wdWxhdGUgKHByZWZhdWx0KSBwYWdldGFibGVzICovCisjZGVmaW5lIE1BUF9OT05CTE9DSwkweDEwMDAwCQkvKiBkbyBub3QgYmxvY2sgb24gSU8gKi8KKworI2RlZmluZSBNU19BU1lOQwkxCQkvKiBzeW5jIG1lbW9yeSBhc3luY2hyb25vdXNseSAqLworI2RlZmluZSBNU19JTlZBTElEQVRFCTIJCS8qIGludmFsaWRhdGUgdGhlIGNhY2hlcyAqLworI2RlZmluZSBNU19TWU5DCQk0CQkvKiBzeW5jaHJvbm91cyBtZW1vcnkgc3luYyAqLworCisjZGVmaW5lIE1DTF9DVVJSRU5UCTEJCS8qIGxvY2sgYWxsIGN1cnJlbnQgbWFwcGluZ3MgKi8KKyNkZWZpbmUgTUNMX0ZVVFVSRQkyCQkvKiBsb2NrIGFsbCBmdXR1cmUgbWFwcGluZ3MgKi8KKworI2RlZmluZSBNQURWX05PUk1BTAkweDAJCS8qIGRlZmF1bHQgcGFnZS1pbiBiZWhhdmlvciAqLworI2RlZmluZSBNQURWX1JBTkRPTQkweDEJCS8qIHBhZ2UtaW4gbWluaW11bSByZXF1aXJlZCAqLworI2RlZmluZSBNQURWX1NFUVVFTlRJQUwJMHgyCQkvKiByZWFkLWFoZWFkIGFnZ3Jlc3NpdmVseSAqLworI2RlZmluZSBNQURWX1dJTExORUVECTB4MwkJLyogcHJlLWZhdWx0IHBhZ2VzICovCisjZGVmaW5lIE1BRFZfRE9OVE5FRUQJMHg0CQkvKiBkaXNjYXJkIHRoZXNlIHBhZ2VzICovCisKKy8qIGNvbXBhdGliaWxpdHkgZmxhZ3MgKi8KKyNkZWZpbmUgTUFQX0FOT04JTUFQX0FOT05ZTU9VUworI2RlZmluZSBNQVBfRklMRQkwCisKKyNlbmRpZiAvKiBfX0kzODZfTU1BTl9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvbW11LmggYi9pbmNsdWRlL2FzbS1pMzg2L21tdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0MzFhMGIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L21tdS5oCkBAIC0wLDAgKzEsMTcgQEAKKyNpZm5kZWYgX19pMzg2X01NVV9ICisjZGVmaW5lIF9faTM4Nl9NTVVfSAorCisjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgorLyoKKyAqIFRoZSBpMzg2IGRvZXNuJ3QgaGF2ZSBhIG1tdSBjb250ZXh0LCBidXQKKyAqIHdlIHB1dCB0aGUgc2VnbWVudCBpbmZvcm1hdGlvbiBoZXJlLgorICoKKyAqIGNwdV92bV9tYXNrIGlzIHVzZWQgdG8gb3B0aW1pemUgbGR0IGZsdXNoaW5nLgorICovCit0eXBlZGVmIHN0cnVjdCB7IAorCWludCBzaXplOworCXN0cnVjdCBzZW1hcGhvcmUgc2VtOworCXZvaWQgKmxkdDsKK30gbW1fY29udGV4dF90OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvbW11X2NvbnRleHQuaCBiL2luY2x1ZGUvYXNtLWkzODYvbW11X2NvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjA4MjE4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9tbXVfY29udGV4dC5oCkBAIC0wLDAgKzEsNzIgQEAKKyNpZm5kZWYgX19JMzg2X1NDSEVEX0gKKyNkZWZpbmUgX19JMzg2X1NDSEVEX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS9kZXNjLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CisjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CisKKy8qCisgKiBVc2VkIGZvciBMRFQgY29weS9kZXN0cnVjdGlvbi4KKyAqLworaW50IGluaXRfbmV3X2NvbnRleHQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKK3ZvaWQgZGVzdHJveV9jb250ZXh0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKKworCitzdGF0aWMgaW5saW5lIHZvaWQgZW50ZXJfbGF6eV90bGIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworI2lmZGVmIENPTkZJR19TTVAKKwl1bnNpZ25lZCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJaWYgKHBlcl9jcHUoY3B1X3RsYnN0YXRlLCBjcHUpLnN0YXRlID09IFRMQlNUQVRFX09LKQorCQlwZXJfY3B1KGNwdV90bGJzdGF0ZSwgY3B1KS5zdGF0ZSA9IFRMQlNUQVRFX0xBWlk7CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN3aXRjaF9tbShzdHJ1Y3QgbW1fc3RydWN0ICpwcmV2LAorCQkJICAgICBzdHJ1Y3QgbW1fc3RydWN0ICpuZXh0LAorCQkJICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJaWYgKGxpa2VseShwcmV2ICE9IG5leHQpKSB7CisJCS8qIHN0b3AgZmx1c2ggaXBpcyBmb3IgdGhlIHByZXZpb3VzIG1tICovCisJCWNwdV9jbGVhcihjcHUsIHByZXYtPmNwdV92bV9tYXNrKTsKKyNpZmRlZiBDT05GSUdfU01QCisJCXBlcl9jcHUoY3B1X3RsYnN0YXRlLCBjcHUpLnN0YXRlID0gVExCU1RBVEVfT0s7CisJCXBlcl9jcHUoY3B1X3RsYnN0YXRlLCBjcHUpLmFjdGl2ZV9tbSA9IG5leHQ7CisjZW5kaWYKKwkJY3B1X3NldChjcHUsIG5leHQtPmNwdV92bV9tYXNrKTsKKworCQkvKiBSZS1sb2FkIHBhZ2UgdGFibGVzICovCisJCWxvYWRfY3IzKG5leHQtPnBnZCk7CisKKwkJLyoKKwkJICogbG9hZCB0aGUgTERULCBpZiB0aGUgTERUIGlzIGRpZmZlcmVudDoKKwkJICovCisJCWlmICh1bmxpa2VseShwcmV2LT5jb250ZXh0LmxkdCAhPSBuZXh0LT5jb250ZXh0LmxkdCkpCisJCQlsb2FkX0xEVF9ub2xvY2soJm5leHQtPmNvbnRleHQsIGNwdSk7CisJfQorI2lmZGVmIENPTkZJR19TTVAKKwllbHNlIHsKKwkJcGVyX2NwdShjcHVfdGxic3RhdGUsIGNwdSkuc3RhdGUgPSBUTEJTVEFURV9PSzsKKwkJQlVHX09OKHBlcl9jcHUoY3B1X3RsYnN0YXRlLCBjcHUpLmFjdGl2ZV9tbSAhPSBuZXh0KTsKKworCQlpZiAoIWNwdV90ZXN0X2FuZF9zZXQoY3B1LCBuZXh0LT5jcHVfdm1fbWFzaykpIHsKKwkJCS8qIFdlIHdlcmUgaW4gbGF6eSB0bGIgbW9kZSBhbmQgbGVhdmVfbW0gZGlzYWJsZWQgCisJCQkgKiB0bGIgZmx1c2ggSVBJIGRlbGl2ZXJ5LiBXZSBtdXN0IHJlbG9hZCAlY3IzLgorCQkJICovCisJCQlsb2FkX2NyMyhuZXh0LT5wZ2QpOworCQkJbG9hZF9MRFRfbm9sb2NrKCZuZXh0LT5jb250ZXh0LCBjcHUpOworCQl9CisJfQorI2VuZGlmCit9CisKKyNkZWZpbmUgZGVhY3RpdmF0ZV9tbSh0c2ssIG1tKSBcCisJYXNtKCJtb3ZsICUwLCUlZnMgOyBtb3ZsICUwLCUlZ3MiOiA6InIiICgwKSkKKworI2RlZmluZSBhY3RpdmF0ZV9tbShwcmV2LCBuZXh0KSBcCisJc3dpdGNoX21tKChwcmV2KSwobmV4dCksTlVMTCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L21teC5oIGIvaW5jbHVkZS9hc20taTM4Ni9tbXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmI3MWRhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9tbXguaApAQCAtMCwwICsxLDE0IEBACisjaWZuZGVmIF9BU01fTU1YX0gKKyNkZWZpbmUgX0FTTV9NTVhfSAorCisvKgorICoJTU1YIDNEbm93ISBoZWxwZXIgb3BlcmF0aW9ucworICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorIAorZXh0ZXJuIHZvaWQgKl9tbXhfbWVtY3B5KHZvaWQgKnRvLCBjb25zdCB2b2lkICpmcm9tLCBzaXplX3Qgc2l6ZSk7CitleHRlcm4gdm9pZCBtbXhfY2xlYXJfcGFnZSh2b2lkICpwYWdlKTsKK2V4dGVybiB2b2lkIG1teF9jb3B5X3BhZ2Uodm9pZCAqdG8sIHZvaWQgKmZyb20pOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvbW16b25lLmggYi9pbmNsdWRlL2FzbS1pMzg2L21tem9uZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzODMwYWUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L21tem9uZS5oCkBAIC0wLDAgKzEsMTQ3IEBACisvKgorICogV3JpdHRlbiBieSBQYXQgR2F1Z2hlbiAoZ29uZUB1cy5pYm0uY29tKSBNYXIgMjAwMgorICoKKyAqLworCisjaWZuZGVmIF9BU01fTU1aT05FX0hfCisjZGVmaW5lIF9BU01fTU1aT05FX0hfCisKKyNpbmNsdWRlIDxhc20vc21wLmg+CisKKyNpZmRlZiBDT05GSUdfRElTQ09OVElHTUVNCisKKyNpZmRlZiBDT05GSUdfTlVNQQorCSNpZmRlZiBDT05GSUdfWDg2X05VTUFRCisJCSNpbmNsdWRlIDxhc20vbnVtYXEuaD4KKwkjZWxzZQkvKiBzdW1taXQgb3IgZ2VuZXJpYyBhcmNoICovCisJCSNpbmNsdWRlIDxhc20vc3JhdC5oPgorCSNlbmRpZgorI2Vsc2UgLyogIUNPTkZJR19OVU1BICovCisJI2RlZmluZSBnZXRfbWVtY2ZnX251bWEgZ2V0X21lbWNmZ19udW1hX2ZsYXQKKwkjZGVmaW5lIGdldF96aG9sZXNfc2l6ZShuKSAoMCkKKyNlbmRpZiAvKiBDT05GSUdfTlVNQSAqLworCitleHRlcm4gc3RydWN0IHBnbGlzdF9kYXRhICpub2RlX2RhdGFbXTsKKyNkZWZpbmUgTk9ERV9EQVRBKG5pZCkJCShub2RlX2RhdGFbbmlkXSkKKworLyoKKyAqIGdlbmVyaWMgbm9kZSBtZW1vcnkgc3VwcG9ydCwgdGhlIGZvbGxvd2luZyBhc3N1bXB0aW9ucyBhcHBseToKKyAqCisgKiAxKSBtZW1vcnkgY29tZXMgaW4gMjU2TWIgY29udGlnaW91cyBjaHVua3Mgd2hpY2ggYXJlIGVpdGhlciBwcmVzZW50IG9yIG5vdAorICogMikgd2Ugd2lsbCBub3QgaGF2ZSBtb3JlIHRoYW4gNjRHYiBpbiB0b3RhbAorICoKKyAqIGZvciBub3cgYXNzdW1lIHRoYXQgNjRHYiBpcyBtYXggYW1vdW50IG9mIFJBTSBmb3Igd2hvbGUgc3lzdGVtCisgKiAgICA2NEdiIC8gNDA5NmJ5dGVzL3BhZ2UgPSAxNjc3NzIxNiBwYWdlcworICovCisjZGVmaW5lIE1BWF9OUl9QQUdFUyAxNjc3NzIxNgorI2RlZmluZSBNQVhfRUxFTUVOVFMgMjU2CisjZGVmaW5lIFBBR0VTX1BFUl9FTEVNRU5UIChNQVhfTlJfUEFHRVMvTUFYX0VMRU1FTlRTKQorCitleHRlcm4gczggcGh5c25vZGVfbWFwW107CisKK3N0YXRpYyBpbmxpbmUgaW50IHBmbl90b19uaWQodW5zaWduZWQgbG9uZyBwZm4pCit7CisjaWZkZWYgQ09ORklHX05VTUEKKwlyZXR1cm4oKGludCkgcGh5c25vZGVfbWFwWyhwZm4pIC8gUEFHRVNfUEVSX0VMRU1FTlRdKTsKKyNlbHNlCisJcmV0dXJuIDA7CisjZW5kaWYKK30KKworLyoKKyAqIEZvbGxvd2luZyBhcmUgbWFjcm9zIHRoYXQgYXJlIHNwZWNpZmljIHRvIHRoaXMgbnVtYSBwbGF0Zm9ybS4KKyAqLworI2RlZmluZSByZXNlcnZlX2Jvb3RtZW0oYWRkciwgc2l6ZSkgXAorCXJlc2VydmVfYm9vdG1lbV9ub2RlKE5PREVfREFUQSgwKSwgKGFkZHIpLCAoc2l6ZSkpCisjZGVmaW5lIGFsbG9jX2Jvb3RtZW0oeCkgXAorCV9fYWxsb2NfYm9vdG1lbV9ub2RlKE5PREVfREFUQSgwKSwgKHgpLCBTTVBfQ0FDSEVfQllURVMsIF9fcGEoTUFYX0RNQV9BRERSRVNTKSkKKyNkZWZpbmUgYWxsb2NfYm9vdG1lbV9sb3coeCkgXAorCV9fYWxsb2NfYm9vdG1lbV9ub2RlKE5PREVfREFUQSgwKSwgKHgpLCBTTVBfQ0FDSEVfQllURVMsIDApCisjZGVmaW5lIGFsbG9jX2Jvb3RtZW1fcGFnZXMoeCkgXAorCV9fYWxsb2NfYm9vdG1lbV9ub2RlKE5PREVfREFUQSgwKSwgKHgpLCBQQUdFX1NJWkUsIF9fcGEoTUFYX0RNQV9BRERSRVNTKSkKKyNkZWZpbmUgYWxsb2NfYm9vdG1lbV9sb3dfcGFnZXMoeCkgXAorCV9fYWxsb2NfYm9vdG1lbV9ub2RlKE5PREVfREFUQSgwKSwgKHgpLCBQQUdFX1NJWkUsIDApCisjZGVmaW5lIGFsbG9jX2Jvb3RtZW1fbm9kZShpZ25vcmUsIHgpIFwKKwlfX2FsbG9jX2Jvb3RtZW1fbm9kZShOT0RFX0RBVEEoMCksICh4KSwgU01QX0NBQ0hFX0JZVEVTLCBfX3BhKE1BWF9ETUFfQUREUkVTUykpCisjZGVmaW5lIGFsbG9jX2Jvb3RtZW1fcGFnZXNfbm9kZShpZ25vcmUsIHgpIFwKKwlfX2FsbG9jX2Jvb3RtZW1fbm9kZShOT0RFX0RBVEEoMCksICh4KSwgUEFHRV9TSVpFLCBfX3BhKE1BWF9ETUFfQUREUkVTUykpCisjZGVmaW5lIGFsbG9jX2Jvb3RtZW1fbG93X3BhZ2VzX25vZGUoaWdub3JlLCB4KSBcCisJX19hbGxvY19ib290bWVtX25vZGUoTk9ERV9EQVRBKDApLCAoeCksIFBBR0VfU0laRSwgMCkKKworI2RlZmluZSBub2RlX2xvY2FsbnIocGZuLCBuaWQpCQkoKHBmbikgLSBub2RlX2RhdGFbbmlkXS0+bm9kZV9zdGFydF9wZm4pCisKKy8qCisgKiBGb2xsb3dpbmcgYXJlIG1hY3JvcyB0aGF0IGVhY2ggbnVtYSBpbXBsbWVudGF0aW9uIG11c3QgZGVmaW5lLgorICovCisKKy8qCisgKiBHaXZlbiBhIGtlcm5lbCBhZGRyZXNzLCBmaW5kIHRoZSBob21lIG5vZGUgb2YgdGhlIHVuZGVybHlpbmcgbWVtb3J5LgorICovCisjZGVmaW5lIGt2YWRkcl90b19uaWQoa2FkZHIpCXBmbl90b19uaWQoX19wYShrYWRkcikgPj4gUEFHRV9TSElGVCkKKworI2RlZmluZSBub2RlX21lbV9tYXAobmlkKQkoTk9ERV9EQVRBKG5pZCktPm5vZGVfbWVtX21hcCkKKyNkZWZpbmUgbm9kZV9zdGFydF9wZm4obmlkKQkoTk9ERV9EQVRBKG5pZCktPm5vZGVfc3RhcnRfcGZuKQorI2RlZmluZSBub2RlX2VuZF9wZm4obmlkKQkJCQkJCVwKKyh7CQkJCQkJCQkJXAorCXBnX2RhdGFfdCAqX19wZ2RhdCA9IE5PREVfREFUQShuaWQpOwkJCQlcCisJX19wZ2RhdC0+bm9kZV9zdGFydF9wZm4gKyBfX3BnZGF0LT5ub2RlX3NwYW5uZWRfcGFnZXM7CQlcCit9KQorCisjZGVmaW5lIGxvY2FsX21hcG5yKGt2YWRkcikJCQkJCQlcCisoewkJCQkJCQkJCVwKKwl1bnNpZ25lZCBsb25nIF9fcGZuID0gX19wYShrdmFkZHIpID4+IFBBR0VfU0hJRlQ7CQlcCisJKF9fcGZuIC0gbm9kZV9zdGFydF9wZm4ocGZuX3RvX25pZChfX3BmbikpKTsJCQlcCit9KQorCisvKiBYWFg6IEZJWE1FIC0tIHdsaSAqLworI2RlZmluZSBrZXJuX2FkZHJfdmFsaWQoa2FkZHIpCSgwKQorCisjZGVmaW5lIHBmbl90b19wYWdlKHBmbikJCQkJCQlcCisoewkJCQkJCQkJCVwKKwl1bnNpZ25lZCBsb25nIF9fcGZuID0gcGZuOwkJCQkJXAorCWludCBfX25vZGUgID0gcGZuX3RvX25pZChfX3Bmbik7CQkJCVwKKwkmbm9kZV9tZW1fbWFwKF9fbm9kZSlbbm9kZV9sb2NhbG5yKF9fcGZuLF9fbm9kZSldOwkJXAorfSkKKworI2RlZmluZSBwYWdlX3RvX3BmbihwZykJCQkJCQkJXAorKHsJCQkJCQkJCQlcCisJc3RydWN0IHBhZ2UgKl9fcGFnZSA9IHBnOwkJCQkJXAorCXN0cnVjdCB6b25lICpfX3pvbmUgPSBwYWdlX3pvbmUoX19wYWdlKTsJCQlcCisJKHVuc2lnbmVkIGxvbmcpKF9fcGFnZSAtIF9fem9uZS0+em9uZV9tZW1fbWFwKQkJCVwKKwkJKyBfX3pvbmUtPnpvbmVfc3RhcnRfcGZuOwkJCQlcCit9KQorCisjaWZkZWYgQ09ORklHX1g4Nl9OVU1BUSAgICAgICAgICAgIC8qIHdlIGhhdmUgY29udGlndW91cyBtZW1vcnkgb24gTlVNQS1RICovCisjZGVmaW5lIHBmbl92YWxpZChwZm4pICAgICAgICAgICgocGZuKSA8IG51bV9waHlzcGFnZXMpCisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgcGZuX3ZhbGlkKGludCBwZm4pCit7CisJaW50IG5pZCA9IHBmbl90b19uaWQocGZuKTsKKworCWlmIChuaWQgPj0gMCkKKwkJcmV0dXJuIChwZm4gPCBub2RlX2VuZF9wZm4obmlkKSk7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworZXh0ZXJuIGludCBnZXRfbWVtY2ZnX251bWFfZmxhdCh2b2lkICk7CisvKgorICogVGhpcyBhbGxvd3MgYW55IG9uZSBOVU1BIGFyY2hpdGVjdHVyZSB0byBiZSBjb21waWxlZAorICogZm9yLCBhbmQgc3RpbGwgZmFsbCBiYWNrIHRvIHRoZSBmbGF0IGZ1bmN0aW9uIGlmIGl0CisgKiBmYWlscy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGdldF9tZW1jZmdfbnVtYSh2b2lkKQoreworI2lmZGVmIENPTkZJR19YODZfTlVNQVEKKwlpZiAoZ2V0X21lbWNmZ19udW1hcSgpKQorCQlyZXR1cm47CisjZWxpZiBDT05GSUdfQUNQSV9TUkFUCisJaWYgKGdldF9tZW1jZmdfZnJvbV9zcmF0KCkpCisJCXJldHVybjsKKyNlbmRpZgorCisJZ2V0X21lbWNmZ19udW1hX2ZsYXQoKTsKK30KKworI2VuZGlmIC8qIENPTkZJR19ESVNDT05USUdNRU0gKi8KKyNlbmRpZiAvKiBfQVNNX01NWk9ORV9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9tb2R1bGUuaCBiL2luY2x1ZGUvYXNtLWkzODYvbW9kdWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA4ODY1ZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvbW9kdWxlLmgKQEAgLTAsMCArMSw3NSBAQAorI2lmbmRlZiBfQVNNX0kzODZfTU9EVUxFX0gKKyNkZWZpbmUgX0FTTV9JMzg2X01PRFVMRV9ICisKKy8qIHg4NiBpcyBzaW1wbGUgKi8KK3N0cnVjdCBtb2RfYXJjaF9zcGVjaWZpYworeworfTsKKworI2RlZmluZSBFbGZfU2hkciBFbGYzMl9TaGRyCisjZGVmaW5lIEVsZl9TeW0gRWxmMzJfU3ltCisjZGVmaW5lIEVsZl9FaGRyIEVsZjMyX0VoZHIKKworI2lmZGVmIENPTkZJR19NMzg2CisjZGVmaW5lIE1PRFVMRV9QUk9DX0ZBTUlMWSAiMzg2ICIKKyNlbGlmIGRlZmluZWQgQ09ORklHX000ODYKKyNkZWZpbmUgTU9EVUxFX1BST0NfRkFNSUxZICI0ODYgIgorI2VsaWYgZGVmaW5lZCBDT05GSUdfTTU4NgorI2RlZmluZSBNT0RVTEVfUFJPQ19GQU1JTFkgIjU4NiAiCisjZWxpZiBkZWZpbmVkIENPTkZJR19NNTg2VFNDCisjZGVmaW5lIE1PRFVMRV9QUk9DX0ZBTUlMWSAiNTg2VFNDICIKKyNlbGlmIGRlZmluZWQgQ09ORklHX001ODZNTVgKKyNkZWZpbmUgTU9EVUxFX1BST0NfRkFNSUxZICI1ODZNTVggIgorI2VsaWYgZGVmaW5lZCBDT05GSUdfTTY4NgorI2RlZmluZSBNT0RVTEVfUFJPQ19GQU1JTFkgIjY4NiAiCisjZWxpZiBkZWZpbmVkIENPTkZJR19NUEVOVElVTUlJCisjZGVmaW5lIE1PRFVMRV9QUk9DX0ZBTUlMWSAiUEVOVElVTUlJICIKKyNlbGlmIGRlZmluZWQgQ09ORklHX01QRU5USVVNSUlJCisjZGVmaW5lIE1PRFVMRV9QUk9DX0ZBTUlMWSAiUEVOVElVTUlJSSAiCisjZWxpZiBkZWZpbmVkIENPTkZJR19NUEVOVElVTU0KKyNkZWZpbmUgTU9EVUxFX1BST0NfRkFNSUxZICJQRU5USVVNTSAiCisjZWxpZiBkZWZpbmVkIENPTkZJR19NUEVOVElVTTQKKyNkZWZpbmUgTU9EVUxFX1BST0NfRkFNSUxZICJQRU5USVVNNCAiCisjZWxpZiBkZWZpbmVkIENPTkZJR19NSzYKKyNkZWZpbmUgTU9EVUxFX1BST0NfRkFNSUxZICJLNiAiCisjZWxpZiBkZWZpbmVkIENPTkZJR19NSzcKKyNkZWZpbmUgTU9EVUxFX1BST0NfRkFNSUxZICJLNyAiCisjZWxpZiBkZWZpbmVkIENPTkZJR19NSzgKKyNkZWZpbmUgTU9EVUxFX1BST0NfRkFNSUxZICJLOCAiCisjZWxpZiBkZWZpbmVkIENPTkZJR19YODZfRUxBTgorI2RlZmluZSBNT0RVTEVfUFJPQ19GQU1JTFkgIkVMQU4gIgorI2VsaWYgZGVmaW5lZCBDT05GSUdfTUNSVVNPRQorI2RlZmluZSBNT0RVTEVfUFJPQ19GQU1JTFkgIkNSVVNPRSAiCisjZWxpZiBkZWZpbmVkIENPTkZJR19NRUZGSUNFT04KKyNkZWZpbmUgTU9EVUxFX1BST0NfRkFNSUxZICJFRkZJQ0VPTiAiCisjZWxpZiBkZWZpbmVkIENPTkZJR19NV0lOQ0hJUEM2CisjZGVmaW5lIE1PRFVMRV9QUk9DX0ZBTUlMWSAiV0lOQ0hJUEM2ICIKKyNlbGlmIGRlZmluZWQgQ09ORklHX01XSU5DSElQMgorI2RlZmluZSBNT0RVTEVfUFJPQ19GQU1JTFkgIldJTkNISVAyICIKKyNlbGlmIGRlZmluZWQgQ09ORklHX01XSU5DSElQM0QKKyNkZWZpbmUgTU9EVUxFX1BST0NfRkFNSUxZICJXSU5DSElQM0QgIgorI2VsaWYgZGVmaW5lZCBDT05GSUdfTUNZUklYSUlJCisjZGVmaW5lIE1PRFVMRV9QUk9DX0ZBTUlMWSAiQ1lSSVhJSUkgIgorI2VsaWYgZGVmaW5lZCBDT05GSUdfTVZJQUMzXzIKKyNkZWZpbmUgTU9EVUxFX1BST0NfRkFNSUxZICJWSUFDMy0yICIKKyNlbGlmIENPTkZJR19NR0VPREUKKyNkZWZpbmUgTU9EVUxFX1BST0NfRkFNSUxZICJHRU9ERSAiCisjZWxzZQorI2Vycm9yIHVua25vd24gcHJvY2Vzc29yIGZhbWlseQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfUkVHUEFSTQorI2RlZmluZSBNT0RVTEVfUkVHUEFSTSAiUkVHUEFSTSAiCisjZWxzZQorI2RlZmluZSBNT0RVTEVfUkVHUEFSTSAiIgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfNEtTVEFDS1MKKyNkZWZpbmUgTU9EVUxFX1NUQUNLU0laRSAiNEtTVEFDS1MgIgorI2Vsc2UKKyNkZWZpbmUgTU9EVUxFX1NUQUNLU0laRSAiIgorI2VuZGlmCisKKyNkZWZpbmUgTU9EVUxFX0FSQ0hfVkVSTUFHSUMgTU9EVUxFX1BST0NfRkFNSUxZIE1PRFVMRV9SRUdQQVJNIE1PRFVMRV9TVEFDS1NJWkUKKworI2VuZGlmIC8qIF9BU01fSTM4Nl9NT0RVTEVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9tcHNwZWMuaCBiL2luY2x1ZGUvYXNtLWkzODYvbXBzcGVjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDlmYWZiYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvbXBzcGVjLmgKQEAgLTAsMCArMSw4MyBAQAorI2lmbmRlZiBfX0FTTV9NUFNQRUNfSAorI2RlZmluZSBfX0FTTV9NUFNQRUNfSAorCisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgorI2luY2x1ZGUgPGFzbS9tcHNwZWNfZGVmLmg+CisjaW5jbHVkZSA8bWFjaF9tcHNwZWMuaD4KKworZXh0ZXJuIGludCBtcF9idXNfaWRfdG9fdHlwZSBbTUFYX01QX0JVU1NFU107CitleHRlcm4gaW50IG1wX2J1c19pZF90b19ub2RlIFtNQVhfTVBfQlVTU0VTXTsKK2V4dGVybiBpbnQgbXBfYnVzX2lkX3RvX2xvY2FsIFtNQVhfTVBfQlVTU0VTXTsKK2V4dGVybiBpbnQgcXVhZF9sb2NhbF90b19tcF9idXNfaWQgW05SX0NQVVMvNF1bNF07CitleHRlcm4gaW50IG1wX2J1c19pZF90b19wY2lfYnVzIFtNQVhfTVBfQlVTU0VTXTsKKworZXh0ZXJuIHVuc2lnbmVkIGludCBib290X2NwdV9waHlzaWNhbF9hcGljaWQ7CitleHRlcm4gaW50IHNtcF9mb3VuZF9jb25maWc7CitleHRlcm4gdm9pZCBmaW5kX3NtcF9jb25maWcgKHZvaWQpOworZXh0ZXJuIHZvaWQgZ2V0X3NtcF9jb25maWcgKHZvaWQpOworZXh0ZXJuIGludCBucl9pb2FwaWNzOworZXh0ZXJuIGludCBhcGljX3ZlcnNpb24gW01BWF9BUElDU107CitleHRlcm4gaW50IG1wX2J1c19pZF90b190eXBlIFtNQVhfTVBfQlVTU0VTXTsKK2V4dGVybiBpbnQgbXBfaXJxX2VudHJpZXM7CitleHRlcm4gc3RydWN0IG1wY19jb25maWdfaW50c3JjIG1wX2lycXMgW01BWF9JUlFfU09VUkNFU107CitleHRlcm4gaW50IG1wY19kZWZhdWx0X3R5cGU7CitleHRlcm4gaW50IG1wX2J1c19pZF90b19wY2lfYnVzIFtNQVhfTVBfQlVTU0VTXTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIG1wX2xhcGljX2FkZHI7CitleHRlcm4gaW50IHBpY19tb2RlOworZXh0ZXJuIGludCB1c2luZ19hcGljX3RpbWVyOworCisjaWZkZWYgQ09ORklHX0FDUElfQk9PVAorZXh0ZXJuIHZvaWQgbXBfcmVnaXN0ZXJfbGFwaWMgKHU4IGlkLCB1OCBlbmFibGVkKTsKK2V4dGVybiB2b2lkIG1wX3JlZ2lzdGVyX2xhcGljX2FkZHJlc3MgKHU2NCBhZGRyZXNzKTsKK2V4dGVybiB2b2lkIG1wX3JlZ2lzdGVyX2lvYXBpYyAodTggaWQsIHUzMiBhZGRyZXNzLCB1MzIgZ3NpX2Jhc2UpOworZXh0ZXJuIHZvaWQgbXBfb3ZlcnJpZGVfbGVnYWN5X2lycSAodTggYnVzX2lycSwgdTggcG9sYXJpdHksIHU4IHRyaWdnZXIsIHUzMiBnc2kpOworZXh0ZXJuIHZvaWQgbXBfY29uZmlnX2FjcGlfbGVnYWN5X2lycXMgKHZvaWQpOworZXh0ZXJuIGludCBtcF9yZWdpc3Rlcl9nc2kgKHUzMiBnc2ksIGludCBlZGdlX2xldmVsLCBpbnQgYWN0aXZlX2hpZ2hfbG93KTsKKyNlbmRpZiAvKkNPTkZJR19BQ1BJX0JPT1QqLworCisjZGVmaW5lIFBIWVNJRF9BUlJBWV9TSVpFCUJJVFNfVE9fTE9OR1MoTUFYX0FQSUNTKQorCitzdHJ1Y3QgcGh5c2lkX21hc2sKK3sKKwl1bnNpZ25lZCBsb25nIG1hc2tbUEhZU0lEX0FSUkFZX1NJWkVdOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgcGh5c2lkX21hc2sgcGh5c2lkX21hc2tfdDsKKworI2RlZmluZSBwaHlzaWRfc2V0KHBoeXNpZCwgbWFwKQkJCXNldF9iaXQocGh5c2lkLCAobWFwKS5tYXNrKQorI2RlZmluZSBwaHlzaWRfY2xlYXIocGh5c2lkLCBtYXApCQljbGVhcl9iaXQocGh5c2lkLCAobWFwKS5tYXNrKQorI2RlZmluZSBwaHlzaWRfaXNzZXQocGh5c2lkLCBtYXApCQl0ZXN0X2JpdChwaHlzaWQsIChtYXApLm1hc2spCisjZGVmaW5lIHBoeXNpZF90ZXN0X2FuZF9zZXQocGh5c2lkLCBtYXApCXRlc3RfYW5kX3NldF9iaXQocGh5c2lkLCAobWFwKS5tYXNrKQorCisjZGVmaW5lIHBoeXNpZHNfYW5kKGRzdCwgc3JjMSwgc3JjMikJCWJpdG1hcF9hbmQoKGRzdCkubWFzaywgKHNyYzEpLm1hc2ssIChzcmMyKS5tYXNrLCBNQVhfQVBJQ1MpCisjZGVmaW5lIHBoeXNpZHNfb3IoZHN0LCBzcmMxLCBzcmMyKQkJYml0bWFwX29yKChkc3QpLm1hc2ssIChzcmMxKS5tYXNrLCAoc3JjMikubWFzaywgTUFYX0FQSUNTKQorI2RlZmluZSBwaHlzaWRzX2NsZWFyKG1hcCkJCQliaXRtYXBfemVybygobWFwKS5tYXNrLCBNQVhfQVBJQ1MpCisjZGVmaW5lIHBoeXNpZHNfY29tcGxlbWVudChkc3QsIHNyYykJCWJpdG1hcF9jb21wbGVtZW50KChkc3QpLm1hc2ssKHNyYykubWFzaywgTUFYX0FQSUNTKQorI2RlZmluZSBwaHlzaWRzX2VtcHR5KG1hcCkJCQliaXRtYXBfZW1wdHkoKG1hcCkubWFzaywgTUFYX0FQSUNTKQorI2RlZmluZSBwaHlzaWRzX2VxdWFsKG1hcDEsIG1hcDIpCQliaXRtYXBfZXF1YWwoKG1hcDEpLm1hc2ssIChtYXAyKS5tYXNrLCBNQVhfQVBJQ1MpCisjZGVmaW5lIHBoeXNpZHNfd2VpZ2h0KG1hcCkJCQliaXRtYXBfd2VpZ2h0KChtYXApLm1hc2ssIE1BWF9BUElDUykKKyNkZWZpbmUgcGh5c2lkc19zaGlmdF9yaWdodChkLCBzLCBuKQkJYml0bWFwX3NoaWZ0X3JpZ2h0KChkKS5tYXNrLCAocykubWFzaywgbiwgTUFYX0FQSUNTKQorI2RlZmluZSBwaHlzaWRzX3NoaWZ0X2xlZnQoZCwgcywgbikJCWJpdG1hcF9zaGlmdF9sZWZ0KChkKS5tYXNrLCAocykubWFzaywgbiwgTUFYX0FQSUNTKQorI2RlZmluZSBwaHlzaWRzX2NvZXJjZShtYXApCQkJKChtYXApLm1hc2tbMF0pCisKKyNkZWZpbmUgcGh5c2lkc19wcm9tb3RlKHBoeXNpZHMpCQkJCQkJXAorCSh7CQkJCQkJCQkJXAorCQlwaHlzaWRfbWFza190IF9fcGh5c2lkX21hc2sgPSBQSFlTSURfTUFTS19OT05FOwkJCVwKKwkJX19waHlzaWRfbWFzay5tYXNrWzBdID0gcGh5c2lkczsJCQkJXAorCQlfX3BoeXNpZF9tYXNrOwkJCQkJCQlcCisJfSkKKworI2RlZmluZSBwaHlzaWRfbWFza19vZl9waHlzaWQocGh5c2lkKQkJCQkJCVwKKwkoewkJCQkJCQkJCVwKKwkJcGh5c2lkX21hc2tfdCBfX3BoeXNpZF9tYXNrID0gUEhZU0lEX01BU0tfTk9ORTsJCQlcCisJCXBoeXNpZF9zZXQocGh5c2lkLCBfX3BoeXNpZF9tYXNrKTsJCQkJXAorCQlfX3BoeXNpZF9tYXNrOwkJCQkJCQlcCisJfSkKKworI2RlZmluZSBQSFlTSURfTUFTS19BTEwJCXsge1swIC4uLiBQSFlTSURfQVJSQVlfU0laRS0xXSA9IH4wVUx9IH0KKyNkZWZpbmUgUEhZU0lEX01BU0tfTk9ORQl7IHtbMCAuLi4gUEhZU0lEX0FSUkFZX1NJWkUtMV0gPSAwVUx9IH0KKworZXh0ZXJuIHBoeXNpZF9tYXNrX3QgcGh5c19jcHVfcHJlc2VudF9tYXA7CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L21wc3BlY19kZWYuaCBiL2luY2x1ZGUvYXNtLWkzODYvbXBzcGVjX2RlZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5NjEwOTMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L21wc3BlY19kZWYuaApAQCAtMCwwICsxLDE4OCBAQAorI2lmbmRlZiBfX0FTTV9NUFNQRUNfREVGX0gKKyNkZWZpbmUgX19BU01fTVBTUEVDX0RFRl9ICisKKy8qCisgKiBTdHJ1Y3R1cmUgZGVmaW5pdGlvbnMgZm9yIFNNUCBtYWNoaW5lcyBmb2xsb3dpbmcgdGhlCisgKiBJbnRlbCBNdWx0aXByb2Nlc3NpbmcgU3BlY2lmaWNhdGlvbiAxLjEgYW5kIDEuNC4KKyAqLworCisvKgorICogVGhpcyB0YWcgaWRlbnRpZmllcyB3aGVyZSB0aGUgU01QIGNvbmZpZ3VyYXRpb24KKyAqIGluZm9ybWF0aW9uIGlzLiAKKyAqLworIAorI2RlZmluZSBTTVBfTUFHSUNfSURFTlQJKCgnXyc8PDI0KXwoJ1AnPDwxNil8KCdNJzw8OCl8J18nKQorCisjZGVmaW5lIE1BWF9NUENfRU5UUlkgMTAyNAorI2RlZmluZSBNQVhfQVBJQ1MgICAgICAyNTYKKworc3RydWN0IGludGVsX21wX2Zsb2F0aW5nCit7CisJY2hhciBtcGZfc2lnbmF0dXJlWzRdOwkJLyogIl9NUF8iIAkJCSovCisJdW5zaWduZWQgbG9uZyBtcGZfcGh5c3B0cjsJLyogQ29uZmlndXJhdGlvbiB0YWJsZSBhZGRyZXNzCSovCisJdW5zaWduZWQgY2hhciBtcGZfbGVuZ3RoOwkvKiBPdXIgbGVuZ3RoIChwYXJhZ3JhcGhzKQkqLworCXVuc2lnbmVkIGNoYXIgbXBmX3NwZWNpZmljYXRpb247LyogU3BlY2lmaWNhdGlvbiB2ZXJzaW9uCSovCisJdW5zaWduZWQgY2hhciBtcGZfY2hlY2tzdW07CS8qIENoZWNrc3VtIChtYWtlcyBzdW0gMCkJKi8KKwl1bnNpZ25lZCBjaGFyIG1wZl9mZWF0dXJlMTsJLyogU3RhbmRhcmQgb3IgY29uZmlndXJhdGlvbiA/IAkqLworCXVuc2lnbmVkIGNoYXIgbXBmX2ZlYXR1cmUyOwkvKiBCaXQ3IHNldCBmb3IgSU1DUnxQSUMJKi8KKwl1bnNpZ25lZCBjaGFyIG1wZl9mZWF0dXJlMzsJLyogVW51c2VkICgwKQkJCSovCisJdW5zaWduZWQgY2hhciBtcGZfZmVhdHVyZTQ7CS8qIFVudXNlZCAoMCkJCQkqLworCXVuc2lnbmVkIGNoYXIgbXBmX2ZlYXR1cmU1OwkvKiBVbnVzZWQgKDApCQkJKi8KK307CisKK3N0cnVjdCBtcF9jb25maWdfdGFibGUKK3sKKwljaGFyIG1wY19zaWduYXR1cmVbNF07CisjZGVmaW5lIE1QQ19TSUdOQVRVUkUgIlBDTVAiCisJdW5zaWduZWQgc2hvcnQgbXBjX2xlbmd0aDsJLyogU2l6ZSBvZiB0YWJsZSAqLworCWNoYXIgIG1wY19zcGVjOwkJCS8qIDB4MDEgKi8KKwljaGFyICBtcGNfY2hlY2tzdW07CisJY2hhciAgbXBjX29lbVs4XTsKKwljaGFyICBtcGNfcHJvZHVjdGlkWzEyXTsKKwl1bnNpZ25lZCBsb25nIG1wY19vZW1wdHI7CS8qIDAgaWYgbm90IHByZXNlbnQgKi8KKwl1bnNpZ25lZCBzaG9ydCBtcGNfb2Vtc2l6ZTsJLyogMCBpZiBub3QgcHJlc2VudCAqLworCXVuc2lnbmVkIHNob3J0IG1wY19vZW1jb3VudDsKKwl1bnNpZ25lZCBsb25nIG1wY19sYXBpYzsJLyogQVBJQyBhZGRyZXNzICovCisJdW5zaWduZWQgbG9uZyByZXNlcnZlZDsKK307CisKKy8qIEZvbGxvd2VkIGJ5IGVudHJpZXMgKi8KKworI2RlZmluZQlNUF9QUk9DRVNTT1IJMAorI2RlZmluZQlNUF9CVVMJCTEKKyNkZWZpbmUJTVBfSU9BUElDCTIKKyNkZWZpbmUJTVBfSU5UU1JDCTMKKyNkZWZpbmUJTVBfTElOVFNSQwk0CisjZGVmaW5lCU1QX1RSQU5TTEFUSU9OICAxOTIgIC8qIFVzZWQgYnkgSUJNIE5VTUEtUSB0byBkZXNjcmliZSBub2RlIGxvY2FsaXR5ICovCisKK3N0cnVjdCBtcGNfY29uZmlnX3Byb2Nlc3NvcgoreworCXVuc2lnbmVkIGNoYXIgbXBjX3R5cGU7CisJdW5zaWduZWQgY2hhciBtcGNfYXBpY2lkOwkvKiBMb2NhbCBBUElDIG51bWJlciAqLworCXVuc2lnbmVkIGNoYXIgbXBjX2FwaWN2ZXI7CS8qIEl0cyB2ZXJzaW9ucyAqLworCXVuc2lnbmVkIGNoYXIgbXBjX2NwdWZsYWc7CisjZGVmaW5lIENQVV9FTkFCTEVECQkxCS8qIFByb2Nlc3NvciBpcyBhdmFpbGFibGUgKi8KKyNkZWZpbmUgQ1BVX0JPT1RQUk9DRVNTT1IJMgkvKiBQcm9jZXNzb3IgaXMgdGhlIEJQICovCisJdW5zaWduZWQgbG9uZyBtcGNfY3B1ZmVhdHVyZTsJCQorI2RlZmluZSBDUFVfU1RFUFBJTkdfTUFTSyAweDBGCisjZGVmaW5lIENQVV9NT0RFTF9NQVNLCTB4RjAKKyNkZWZpbmUgQ1BVX0ZBTUlMWV9NQVNLCTB4RjAwCisJdW5zaWduZWQgbG9uZyBtcGNfZmVhdHVyZWZsYWc7CS8qIENQVUlEIGZlYXR1cmUgdmFsdWUgKi8KKwl1bnNpZ25lZCBsb25nIG1wY19yZXNlcnZlZFsyXTsKK307CisKK3N0cnVjdCBtcGNfY29uZmlnX2J1cworeworCXVuc2lnbmVkIGNoYXIgbXBjX3R5cGU7CisJdW5zaWduZWQgY2hhciBtcGNfYnVzaWQ7CisJdW5zaWduZWQgY2hhciBtcGNfYnVzdHlwZVs2XSBfX2F0dHJpYnV0ZSgocGFja2VkKSk7Cit9OworCisvKiBMaXN0IG9mIEJ1cyBUeXBlIHN0cmluZyB2YWx1ZXMsIEludGVsIE1QIFNwZWMuICovCisjZGVmaW5lIEJVU1RZUEVfRUlTQQkiRUlTQSIKKyNkZWZpbmUgQlVTVFlQRV9JU0EJIklTQSIKKyNkZWZpbmUgQlVTVFlQRV9JTlRFUk4JIklOVEVSTiIJLyogSW50ZXJuYWwgQlVTICovCisjZGVmaW5lIEJVU1RZUEVfTUNBCSJNQ0EiCisjZGVmaW5lIEJVU1RZUEVfVkwJIlZMIgkJLyogTG9jYWwgYnVzICovCisjZGVmaW5lIEJVU1RZUEVfUENJCSJQQ0kiCisjZGVmaW5lIEJVU1RZUEVfUENNQ0lBCSJQQ01DSUEiCisjZGVmaW5lIEJVU1RZUEVfQ0JVUwkiQ0JVUyIKKyNkZWZpbmUgQlVTVFlQRV9DQlVTSUkJIkNCVVNJSSIKKyNkZWZpbmUgQlVTVFlQRV9GVVRVUkUJIkZVVFVSRSIKKyNkZWZpbmUgQlVTVFlQRV9NQkkJIk1CSSIKKyNkZWZpbmUgQlVTVFlQRV9NQklJCSJNQklJIgorI2RlZmluZSBCVVNUWVBFX01QSQkiTVBJIgorI2RlZmluZSBCVVNUWVBFX01QU0EJIk1QU0EiCisjZGVmaW5lIEJVU1RZUEVfTlVCVVMJIk5VQlVTIgorI2RlZmluZSBCVVNUWVBFX1RDCSJUQyIKKyNkZWZpbmUgQlVTVFlQRV9WTUUJIlZNRSIKKyNkZWZpbmUgQlVTVFlQRV9YUFJFU1MJIlhQUkVTUyIKKyNkZWZpbmUgQlVTVFlQRV9ORUM5OAkiTkVDOTgiCisKK3N0cnVjdCBtcGNfY29uZmlnX2lvYXBpYworeworCXVuc2lnbmVkIGNoYXIgbXBjX3R5cGU7CisJdW5zaWduZWQgY2hhciBtcGNfYXBpY2lkOworCXVuc2lnbmVkIGNoYXIgbXBjX2FwaWN2ZXI7CisJdW5zaWduZWQgY2hhciBtcGNfZmxhZ3M7CisjZGVmaW5lIE1QQ19BUElDX1VTQUJMRQkJMHgwMQorCXVuc2lnbmVkIGxvbmcgbXBjX2FwaWNhZGRyOworfTsKKworc3RydWN0IG1wY19jb25maWdfaW50c3JjCit7CisJdW5zaWduZWQgY2hhciBtcGNfdHlwZTsKKwl1bnNpZ25lZCBjaGFyIG1wY19pcnF0eXBlOworCXVuc2lnbmVkIHNob3J0IG1wY19pcnFmbGFnOworCXVuc2lnbmVkIGNoYXIgbXBjX3NyY2J1czsKKwl1bnNpZ25lZCBjaGFyIG1wY19zcmNidXNpcnE7CisJdW5zaWduZWQgY2hhciBtcGNfZHN0YXBpYzsKKwl1bnNpZ25lZCBjaGFyIG1wY19kc3RpcnE7Cit9OworCitlbnVtIG1wX2lycV9zb3VyY2VfdHlwZXMgeworCW1wX0lOVCA9IDAsCisJbXBfTk1JID0gMSwKKwltcF9TTUkgPSAyLAorCW1wX0V4dElOVCA9IDMKK307CisKKyNkZWZpbmUgTVBfSVJRRElSX0RFRkFVTFQJMAorI2RlZmluZSBNUF9JUlFESVJfSElHSAkJMQorI2RlZmluZSBNUF9JUlFESVJfTE9XCQkzCisKKworc3RydWN0IG1wY19jb25maWdfbGludHNyYworeworCXVuc2lnbmVkIGNoYXIgbXBjX3R5cGU7CisJdW5zaWduZWQgY2hhciBtcGNfaXJxdHlwZTsKKwl1bnNpZ25lZCBzaG9ydCBtcGNfaXJxZmxhZzsKKwl1bnNpZ25lZCBjaGFyIG1wY19zcmNidXNpZDsKKwl1bnNpZ25lZCBjaGFyIG1wY19zcmNidXNpcnE7CisJdW5zaWduZWQgY2hhciBtcGNfZGVzdGFwaWM7CQorI2RlZmluZSBNUF9BUElDX0FMTAkweEZGCisJdW5zaWduZWQgY2hhciBtcGNfZGVzdGFwaWNsaW50OworfTsKKworc3RydWN0IG1wX2NvbmZpZ19vZW10YWJsZQoreworCWNoYXIgb2VtX3NpZ25hdHVyZVs0XTsKKyNkZWZpbmUgTVBDX09FTV9TSUdOQVRVUkUgIl9PRU0iCisJdW5zaWduZWQgc2hvcnQgb2VtX2xlbmd0aDsJLyogU2l6ZSBvZiB0YWJsZSAqLworCWNoYXIgIG9lbV9yZXY7CQkJLyogMHgwMSAqLworCWNoYXIgIG9lbV9jaGVja3N1bTsKKwljaGFyICBtcGNfb2VtWzhdOworfTsKKworc3RydWN0IG1wY19jb25maWdfdHJhbnNsYXRpb24KK3sKKyAgICAgICAgdW5zaWduZWQgY2hhciBtcGNfdHlwZTsKKyAgICAgICAgdW5zaWduZWQgY2hhciB0cmFuc19sZW47CisgICAgICAgIHVuc2lnbmVkIGNoYXIgdHJhbnNfdHlwZTsKKyAgICAgICAgdW5zaWduZWQgY2hhciB0cmFuc19xdWFkOworICAgICAgICB1bnNpZ25lZCBjaGFyIHRyYW5zX2dsb2JhbDsKKyAgICAgICAgdW5zaWduZWQgY2hhciB0cmFuc19sb2NhbDsKKyAgICAgICAgdW5zaWduZWQgc2hvcnQgdHJhbnNfcmVzZXJ2ZWQ7Cit9OworCisvKgorICoJRGVmYXVsdCBjb25maWd1cmF0aW9ucworICoKKyAqCTEJMiBDUFUgSVNBIDgyNDg5RFgKKyAqCTIJMiBDUFUgRUlTQSA4MjQ4OURYIG5laXRoZXIgSVJRIDAgdGltZXIgbm9yIElSUSAxMyBETUEgY2hhaW5pbmcKKyAqCTMJMiBDUFUgRUlTQSA4MjQ4OURYCisgKgk0CTIgQ1BVIE1DQSA4MjQ4OURYCisgKgk1CTIgQ1BVIElTQStQQ0kKKyAqCTYJMiBDUFUgRUlTQStQQ0kKKyAqCTcJMiBDUFUgTUNBK1BDSQorICovCisKK2VudW0gbXBfYnVzdHlwZSB7CisJTVBfQlVTX0lTQSA9IDEsCisJTVBfQlVTX0VJU0EsCisJTVBfQlVTX1BDSSwKKwlNUF9CVVNfTUNBLAorCU1QX0JVU19ORUM5OAorfTsKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L21zZ2J1Zi5oIGIvaW5jbHVkZS9hc20taTM4Ni9tc2didWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGQ2NTljCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9tc2didWYuaApAQCAtMCwwICsxLDMxIEBACisjaWZuZGVmIF9JMzg2X01TR0JVRl9ICisjZGVmaW5lIF9JMzg2X01TR0JVRl9ICisKKy8qIAorICogVGhlIG1zcWlkNjRfZHMgc3RydWN0dXJlIGZvciBpMzg2IGFyY2hpdGVjdHVyZS4KKyAqIE5vdGUgZXh0cmEgcGFkZGluZyBiZWNhdXNlIHRoaXMgc3RydWN0dXJlIGlzIHBhc3NlZCBiYWNrIGFuZCBmb3J0aAorICogYmV0d2VlbiBrZXJuZWwgYW5kIHVzZXIgc3BhY2UuCisgKgorICogUGFkIHNwYWNlIGlzIGxlZnQgZm9yOgorICogLSA2NC1iaXQgdGltZV90IHRvIHNvbHZlIHkyMDM4IHByb2JsZW0KKyAqIC0gMiBtaXNjZWxsYW5lb3VzIDMyLWJpdCB2YWx1ZXMKKyAqLworCitzdHJ1Y3QgbXNxaWQ2NF9kcyB7CisJc3RydWN0IGlwYzY0X3Blcm0gbXNnX3Blcm07CisJX19rZXJuZWxfdGltZV90IG1zZ19zdGltZTsJLyogbGFzdCBtc2dzbmQgdGltZSAqLworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQxOworCV9fa2VybmVsX3RpbWVfdCBtc2dfcnRpbWU7CS8qIGxhc3QgbXNncmN2IHRpbWUgKi8KKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkMjsKKwlfX2tlcm5lbF90aW1lX3QgbXNnX2N0aW1lOwkvKiBsYXN0IGNoYW5nZSB0aW1lICovCisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDM7CisJdW5zaWduZWQgbG9uZyAgbXNnX2NieXRlczsJLyogY3VycmVudCBudW1iZXIgb2YgYnl0ZXMgb24gcXVldWUgKi8KKwl1bnNpZ25lZCBsb25nICBtc2dfcW51bTsJLyogbnVtYmVyIG9mIG1lc3NhZ2VzIGluIHF1ZXVlICovCisJdW5zaWduZWQgbG9uZyAgbXNnX3FieXRlczsJLyogbWF4IG51bWJlciBvZiBieXRlcyBvbiBxdWV1ZSAqLworCV9fa2VybmVsX3BpZF90IG1zZ19sc3BpZDsJLyogcGlkIG9mIGxhc3QgbXNnc25kICovCisJX19rZXJuZWxfcGlkX3QgbXNnX2xycGlkOwkvKiBsYXN0IHJlY2VpdmUgcGlkICovCisJdW5zaWduZWQgbG9uZyAgX191bnVzZWQ0OworCXVuc2lnbmVkIGxvbmcgIF9fdW51c2VkNTsKK307CisKKyNlbmRpZiAvKiBfSTM4Nl9NU0dCVUZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9tc2kuaCBiL2luY2x1ZGUvYXNtLWkzODYvbXNpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg1MzkzMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvbXNpLmgKQEAgLTAsMCArMSwyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA0IEludGVsCisgKiBDb3B5cmlnaHQgKEMpIFRvbSBMb25nIE5ndXllbiAodG9tLmwubmd1eWVuQGludGVsLmNvbSkKKyAqLworCisjaWZuZGVmIEFTTV9NU0lfSAorI2RlZmluZSBBU01fTVNJX0gKKworI2luY2x1ZGUgPGFzbS9kZXNjLmg+CisjaW5jbHVkZSA8bWFjaF9hcGljLmg+CisKKyNkZWZpbmUgTEFTVF9ERVZJQ0VfVkVDVE9SCQkyMzIKKyNkZWZpbmUgTVNJX0RFU1RfTU9ERQkJCU1TSV9MT0dJQ0FMX01PREUKKyNkZWZpbmUgTVNJX1RBUkdFVF9DUFVfU0hJRlQJCTEyCisKKyNpZmRlZiBDT05GSUdfU01QCisjZGVmaW5lIE1TSV9UQVJHRVRfQ1BVCQlsb2dpY2FsX3NtcF9wcm9jZXNzb3JfaWQoKQorI2Vsc2UKKyNkZWZpbmUgTVNJX1RBUkdFVF9DUFUJY3B1X3RvX2xvZ2ljYWxfYXBpY2lkKGZpcnN0X2NwdShjcHVfb25saW5lX21hcCkpCisjZW5kaWYKKworI2VuZGlmIC8qIEFTTV9NU0lfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9tc3IuaCBiL2luY2x1ZGUvYXNtLWkzODYvbXNyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc2ZmNlOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvbXNyLmgKQEAgLTAsMCArMSwyNzIgQEAKKyNpZm5kZWYgX19BU01fTVNSX0gKKyNkZWZpbmUgX19BU01fTVNSX0gKKworLyoKKyAqIEFjY2VzcyB0byBtYWNoaW5lLXNwZWNpZmljIHJlZ2lzdGVycyAoYXZhaWxhYmxlIG9uIDU4NiBhbmQgYmV0dGVyIG9ubHkpCisgKiBOb3RlOiB0aGUgcmQqIG9wZXJhdGlvbnMgbW9kaWZ5IHRoZSBwYXJhbWV0ZXJzIGRpcmVjdGx5ICh3aXRob3V0IHVzaW5nCisgKiBwb2ludGVyIGluZGlyZWN0aW9uKSwgdGhpcyBhbGxvd3MgZ2NjIHRvIG9wdGltaXplIGJldHRlcgorICovCisKKyNkZWZpbmUgcmRtc3IobXNyLHZhbDEsdmFsMikgXAorCV9fYXNtX18gX192b2xhdGlsZV9fKCJyZG1zciIgXAorCQkJICA6ICI9YSIgKHZhbDEpLCAiPWQiICh2YWwyKSBcCisJCQkgIDogImMiIChtc3IpKQorCisjZGVmaW5lIHdybXNyKG1zcix2YWwxLHZhbDIpIFwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygid3Jtc3IiIFwKKwkJCSAgOiAvKiBubyBvdXRwdXRzICovIFwKKwkJCSAgOiAiYyIgKG1zciksICJhIiAodmFsMSksICJkIiAodmFsMikpCisKKyNkZWZpbmUgcmRtc3JsKG1zcix2YWwpIGRvIHsgXAorCXVuc2lnbmVkIGxvbmcgbF9fLGhfXzsgXAorCXJkbXNyIChtc3IsIGxfXywgaF9fKTsgIFwKKwl2YWwgPSBsX187ICBcCisJdmFsIHw9ICgodTY0KWhfXzw8MzIpOyAgXAorfSB3aGlsZSgwKQorCitzdGF0aWMgaW5saW5lIHZvaWQgd3Jtc3JsICh1bnNpZ25lZCBsb25nIG1zciwgdW5zaWduZWQgbG9uZyBsb25nIHZhbCkKK3sKKwl1bnNpZ25lZCBsb25nIGxvLCBoaTsKKwlsbyA9ICh1bnNpZ25lZCBsb25nKSB2YWw7CisJaGkgPSB2YWwgPj4gMzI7CisJd3Jtc3IgKG1zciwgbG8sIGhpKTsKK30KKworLyogd3Jtc3Igd2l0aCBleGNlcHRpb24gaGFuZGxpbmcgKi8KKyNkZWZpbmUgd3Jtc3Jfc2FmZShtc3IsYSxiKSAoeyBpbnQgcmV0X187CQkJCQkJXAorCWFzbSB2b2xhdGlsZSgiMjogd3Jtc3IgOyB4b3JsICUwLCUwXG4iCQkJCQkJXAorCQkgICAgICIxOlxuXHQiCQkJCQkJCQlcCisJCSAgICAgIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcblx0IgkJCQkJXAorCQkgICAgICIzOiAgbW92bCAlNCwlMCA7IGptcCAxYlxuXHQiCQkJCQlcCisJCSAgICAgIi5wcmV2aW91c1xuXHQiCQkJCQkJCVwKKyAJCSAgICAgIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIJCQkJCVwKKwkJICAgICAiICAgLmFsaWduIDRcblx0IgkJCQkJCQlcCisJCSAgICAgIiAgIC5sb25nIAkyYiwzYlxuXHQiCQkJCQkJXAorCQkgICAgICIucHJldmlvdXMiCQkJCQkJCVwKKwkJICAgICA6ICI9YSIgKHJldF9fKQkJCQkJCQlcCisJCSAgICAgOiAiYyIgKG1zciksICIwIiAoYSksICJkIiAoYiksICJpIiAoLUVGQVVMVCkpO1wKKwlyZXRfXzsgfSkKKworI2RlZmluZSByZHRzYyhsb3csaGlnaCkgXAorICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygicmR0c2MiIDogIj1hIiAobG93KSwgIj1kIiAoaGlnaCkpCisKKyNkZWZpbmUgcmR0c2NsKGxvdykgXAorICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygicmR0c2MiIDogIj1hIiAobG93KSA6IDogImVkeCIpCisKKyNkZWZpbmUgcmR0c2NsbCh2YWwpIFwKKyAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInJkdHNjIiA6ICI9QSIgKHZhbCkpCisKKyNkZWZpbmUgd3JpdGVfdHNjKHZhbDEsdmFsMikgd3Jtc3IoMHgxMCwgdmFsMSwgdmFsMikKKworI2RlZmluZSByZHBtYyhjb3VudGVyLGxvdyxoaWdoKSBcCisgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJyZHBtYyIgXAorCQkJICA6ICI9YSIgKGxvdyksICI9ZCIgKGhpZ2gpIFwKKwkJCSAgOiAiYyIgKGNvdW50ZXIpKQorCisvKiBzeW1ib2xpYyBuYW1lcyBmb3Igc29tZSBpbnRlcmVzdGluZyBNU1JzICovCisvKiBJbnRlbCBkZWZpbmVkIE1TUnMuICovCisjZGVmaW5lIE1TUl9JQTMyX1A1X01DX0FERFIJCTAKKyNkZWZpbmUgTVNSX0lBMzJfUDVfTUNfVFlQRQkJMQorI2RlZmluZSBNU1JfSUEzMl9QTEFURk9STV9JRAkJMHgxNworI2RlZmluZSBNU1JfSUEzMl9FQkxfQ1JfUE9XRVJPTgkJMHgyYQorCisjZGVmaW5lIE1TUl9JQTMyX0FQSUNCQVNFCQkweDFiCisjZGVmaW5lIE1TUl9JQTMyX0FQSUNCQVNFX0JTUAkJKDE8PDgpCisjZGVmaW5lIE1TUl9JQTMyX0FQSUNCQVNFX0VOQUJMRQkoMTw8MTEpCisjZGVmaW5lIE1TUl9JQTMyX0FQSUNCQVNFX0JBU0UJCSgweGZmZmZmPDwxMikKKworI2RlZmluZSBNU1JfSUEzMl9VQ09ERV9XUklURQkJMHg3OQorI2RlZmluZSBNU1JfSUEzMl9VQ09ERV9SRVYJCTB4OGIKKworI2RlZmluZSBNU1JfUDZfUEVSRkNUUjAJCTB4YzEKKyNkZWZpbmUgTVNSX1A2X1BFUkZDVFIxCQkweGMyCisKKyNkZWZpbmUgTVNSX0lBMzJfQkJMX0NSX0NUTAkJMHgxMTkKKworI2RlZmluZSBNU1JfSUEzMl9TWVNFTlRFUl9DUwkJMHgxNzQKKyNkZWZpbmUgTVNSX0lBMzJfU1lTRU5URVJfRVNQCQkweDE3NQorI2RlZmluZSBNU1JfSUEzMl9TWVNFTlRFUl9FSVAJCTB4MTc2CisKKyNkZWZpbmUgTVNSX0lBMzJfTUNHX0NBUAkJMHgxNzkKKyNkZWZpbmUgTVNSX0lBMzJfTUNHX1NUQVRVUwkJMHgxN2EKKyNkZWZpbmUgTVNSX0lBMzJfTUNHX0NUTAkJMHgxN2IKKworLyogUDQvWGVvbisgc3BlY2lmaWMgKi8KKyNkZWZpbmUgTVNSX0lBMzJfTUNHX0VBWAkJMHgxODAKKyNkZWZpbmUgTVNSX0lBMzJfTUNHX0VCWAkJMHgxODEKKyNkZWZpbmUgTVNSX0lBMzJfTUNHX0VDWAkJMHgxODIKKyNkZWZpbmUgTVNSX0lBMzJfTUNHX0VEWAkJMHgxODMKKyNkZWZpbmUgTVNSX0lBMzJfTUNHX0VTSQkJMHgxODQKKyNkZWZpbmUgTVNSX0lBMzJfTUNHX0VESQkJMHgxODUKKyNkZWZpbmUgTVNSX0lBMzJfTUNHX0VCUAkJMHgxODYKKyNkZWZpbmUgTVNSX0lBMzJfTUNHX0VTUAkJMHgxODcKKyNkZWZpbmUgTVNSX0lBMzJfTUNHX0VGTEFHUwkJMHgxODgKKyNkZWZpbmUgTVNSX0lBMzJfTUNHX0VJUAkJMHgxODkKKyNkZWZpbmUgTVNSX0lBMzJfTUNHX1JFU0VSVkVECQkweDE4QQorCisjZGVmaW5lIE1TUl9QNl9FVk5UU0VMMAkJCTB4MTg2CisjZGVmaW5lIE1TUl9QNl9FVk5UU0VMMQkJCTB4MTg3CisKKyNkZWZpbmUgTVNSX0lBMzJfUEVSRl9TVEFUVVMJCTB4MTk4CisjZGVmaW5lIE1TUl9JQTMyX1BFUkZfQ1RMCQkweDE5OQorCisjZGVmaW5lIE1TUl9JQTMyX1RIRVJNX0NPTlRST0wJCTB4MTlhCisjZGVmaW5lIE1TUl9JQTMyX1RIRVJNX0lOVEVSUlVQVAkweDE5YgorI2RlZmluZSBNU1JfSUEzMl9USEVSTV9TVEFUVVMJCTB4MTljCisjZGVmaW5lIE1TUl9JQTMyX01JU0NfRU5BQkxFCQkweDFhMAorCisjZGVmaW5lIE1TUl9JQTMyX0RFQlVHQ1RMTVNSCQkweDFkOQorI2RlZmluZSBNU1JfSUEzMl9MQVNUQlJBTkNIRlJPTUlQCTB4MWRiCisjZGVmaW5lIE1TUl9JQTMyX0xBU1RCUkFOQ0hUT0lQCQkweDFkYworI2RlZmluZSBNU1JfSUEzMl9MQVNUSU5URlJPTUlQCQkweDFkZAorI2RlZmluZSBNU1JfSUEzMl9MQVNUSU5UVE9JUAkJMHgxZGUKKworI2RlZmluZSBNU1JfSUEzMl9NQzBfQ1RMCQkweDQwMAorI2RlZmluZSBNU1JfSUEzMl9NQzBfU1RBVFVTCQkweDQwMQorI2RlZmluZSBNU1JfSUEzMl9NQzBfQUREUgkJMHg0MDIKKyNkZWZpbmUgTVNSX0lBMzJfTUMwX01JU0MJCTB4NDAzCisKKy8qIFBlbnRpdW0gSVYgcGVyZm9ybWFuY2UgY291bnRlciBNU1JzICovCisjZGVmaW5lIE1TUl9QNF9CUFVfUEVSRkNUUjAgCQkweDMwMAorI2RlZmluZSBNU1JfUDRfQlBVX1BFUkZDVFIxIAkJMHgzMDEKKyNkZWZpbmUgTVNSX1A0X0JQVV9QRVJGQ1RSMiAJCTB4MzAyCisjZGVmaW5lIE1TUl9QNF9CUFVfUEVSRkNUUjMgCQkweDMwMworI2RlZmluZSBNU1JfUDRfTVNfUEVSRkNUUjAgCQkweDMwNAorI2RlZmluZSBNU1JfUDRfTVNfUEVSRkNUUjEgCQkweDMwNQorI2RlZmluZSBNU1JfUDRfTVNfUEVSRkNUUjIgCQkweDMwNgorI2RlZmluZSBNU1JfUDRfTVNfUEVSRkNUUjMgCQkweDMwNworI2RlZmluZSBNU1JfUDRfRkxBTUVfUEVSRkNUUjAgCQkweDMwOAorI2RlZmluZSBNU1JfUDRfRkxBTUVfUEVSRkNUUjEgCQkweDMwOQorI2RlZmluZSBNU1JfUDRfRkxBTUVfUEVSRkNUUjIgCQkweDMwYQorI2RlZmluZSBNU1JfUDRfRkxBTUVfUEVSRkNUUjMgCQkweDMwYgorI2RlZmluZSBNU1JfUDRfSVFfUEVSRkNUUjAgCQkweDMwYworI2RlZmluZSBNU1JfUDRfSVFfUEVSRkNUUjEgCQkweDMwZAorI2RlZmluZSBNU1JfUDRfSVFfUEVSRkNUUjIgCQkweDMwZQorI2RlZmluZSBNU1JfUDRfSVFfUEVSRkNUUjMgCQkweDMwZgorI2RlZmluZSBNU1JfUDRfSVFfUEVSRkNUUjQgCQkweDMxMAorI2RlZmluZSBNU1JfUDRfSVFfUEVSRkNUUjUgCQkweDMxMQorI2RlZmluZSBNU1JfUDRfQlBVX0NDQ1IwIAkJMHgzNjAKKyNkZWZpbmUgTVNSX1A0X0JQVV9DQ0NSMSAJCTB4MzYxCisjZGVmaW5lIE1TUl9QNF9CUFVfQ0NDUjIgCQkweDM2MgorI2RlZmluZSBNU1JfUDRfQlBVX0NDQ1IzIAkJMHgzNjMKKyNkZWZpbmUgTVNSX1A0X01TX0NDQ1IwIAkJMHgzNjQKKyNkZWZpbmUgTVNSX1A0X01TX0NDQ1IxIAkJMHgzNjUKKyNkZWZpbmUgTVNSX1A0X01TX0NDQ1IyIAkJMHgzNjYKKyNkZWZpbmUgTVNSX1A0X01TX0NDQ1IzIAkJMHgzNjcKKyNkZWZpbmUgTVNSX1A0X0ZMQU1FX0NDQ1IwIAkJMHgzNjgKKyNkZWZpbmUgTVNSX1A0X0ZMQU1FX0NDQ1IxIAkJMHgzNjkKKyNkZWZpbmUgTVNSX1A0X0ZMQU1FX0NDQ1IyIAkJMHgzNmEKKyNkZWZpbmUgTVNSX1A0X0ZMQU1FX0NDQ1IzIAkJMHgzNmIKKyNkZWZpbmUgTVNSX1A0X0lRX0NDQ1IwIAkJMHgzNmMKKyNkZWZpbmUgTVNSX1A0X0lRX0NDQ1IxIAkJMHgzNmQKKyNkZWZpbmUgTVNSX1A0X0lRX0NDQ1IyIAkJMHgzNmUKKyNkZWZpbmUgTVNSX1A0X0lRX0NDQ1IzIAkJMHgzNmYKKyNkZWZpbmUgTVNSX1A0X0lRX0NDQ1I0IAkJMHgzNzAKKyNkZWZpbmUgTVNSX1A0X0lRX0NDQ1I1IAkJMHgzNzEKKyNkZWZpbmUgTVNSX1A0X0FMRl9FU0NSMCAJCTB4M2NhCisjZGVmaW5lIE1TUl9QNF9BTEZfRVNDUjEgCQkweDNjYgorI2RlZmluZSBNU1JfUDRfQlBVX0VTQ1IwIAkJMHgzYjIKKyNkZWZpbmUgTVNSX1A0X0JQVV9FU0NSMSAJCTB4M2IzCisjZGVmaW5lIE1TUl9QNF9CU1VfRVNDUjAgCQkweDNhMAorI2RlZmluZSBNU1JfUDRfQlNVX0VTQ1IxIAkJMHgzYTEKKyNkZWZpbmUgTVNSX1A0X0NSVV9FU0NSMCAJCTB4M2I4CisjZGVmaW5lIE1TUl9QNF9DUlVfRVNDUjEgCQkweDNiOQorI2RlZmluZSBNU1JfUDRfQ1JVX0VTQ1IyIAkJMHgzY2MKKyNkZWZpbmUgTVNSX1A0X0NSVV9FU0NSMyAJCTB4M2NkCisjZGVmaW5lIE1TUl9QNF9DUlVfRVNDUjQgCQkweDNlMAorI2RlZmluZSBNU1JfUDRfQ1JVX0VTQ1I1IAkJMHgzZTEKKyNkZWZpbmUgTVNSX1A0X0RBQ19FU0NSMCAJCTB4M2E4CisjZGVmaW5lIE1TUl9QNF9EQUNfRVNDUjEgCQkweDNhOQorI2RlZmluZSBNU1JfUDRfRklSTV9FU0NSMCAJCTB4M2E0CisjZGVmaW5lIE1TUl9QNF9GSVJNX0VTQ1IxIAkJMHgzYTUKKyNkZWZpbmUgTVNSX1A0X0ZMQU1FX0VTQ1IwIAkJMHgzYTYKKyNkZWZpbmUgTVNSX1A0X0ZMQU1FX0VTQ1IxIAkJMHgzYTcKKyNkZWZpbmUgTVNSX1A0X0ZTQl9FU0NSMCAJCTB4M2EyCisjZGVmaW5lIE1TUl9QNF9GU0JfRVNDUjEgCQkweDNhMworI2RlZmluZSBNU1JfUDRfSVFfRVNDUjAgCQkweDNiYQorI2RlZmluZSBNU1JfUDRfSVFfRVNDUjEgCQkweDNiYgorI2RlZmluZSBNU1JfUDRfSVNfRVNDUjAgCQkweDNiNAorI2RlZmluZSBNU1JfUDRfSVNfRVNDUjEgCQkweDNiNQorI2RlZmluZSBNU1JfUDRfSVRMQl9FU0NSMCAJCTB4M2I2CisjZGVmaW5lIE1TUl9QNF9JVExCX0VTQ1IxIAkJMHgzYjcKKyNkZWZpbmUgTVNSX1A0X0lYX0VTQ1IwIAkJMHgzYzgKKyNkZWZpbmUgTVNSX1A0X0lYX0VTQ1IxIAkJMHgzYzkKKyNkZWZpbmUgTVNSX1A0X01PQl9FU0NSMCAJCTB4M2FhCisjZGVmaW5lIE1TUl9QNF9NT0JfRVNDUjEgCQkweDNhYgorI2RlZmluZSBNU1JfUDRfTVNfRVNDUjAgCQkweDNjMAorI2RlZmluZSBNU1JfUDRfTVNfRVNDUjEgCQkweDNjMQorI2RlZmluZSBNU1JfUDRfUE1IX0VTQ1IwIAkJMHgzYWMKKyNkZWZpbmUgTVNSX1A0X1BNSF9FU0NSMSAJCTB4M2FkCisjZGVmaW5lIE1TUl9QNF9SQVRfRVNDUjAgCQkweDNiYworI2RlZmluZSBNU1JfUDRfUkFUX0VTQ1IxIAkJMHgzYmQKKyNkZWZpbmUgTVNSX1A0X1NBQVRfRVNDUjAgCQkweDNhZQorI2RlZmluZSBNU1JfUDRfU0FBVF9FU0NSMSAJCTB4M2FmCisjZGVmaW5lIE1TUl9QNF9TU1VfRVNDUjAgCQkweDNiZQorI2RlZmluZSBNU1JfUDRfU1NVX0VTQ1IxIAkJMHgzYmYgICAgLyogZ3Vlc3M6IG5vdCBkZWZpbmVkIGluIG1hbnVhbCAqLworI2RlZmluZSBNU1JfUDRfVEJQVV9FU0NSMCAJCTB4M2MyCisjZGVmaW5lIE1TUl9QNF9UQlBVX0VTQ1IxIAkJMHgzYzMKKyNkZWZpbmUgTVNSX1A0X1RDX0VTQ1IwIAkJMHgzYzQKKyNkZWZpbmUgTVNSX1A0X1RDX0VTQ1IxIAkJMHgzYzUKKyNkZWZpbmUgTVNSX1A0X1UyTF9FU0NSMCAJCTB4M2IwCisjZGVmaW5lIE1TUl9QNF9VMkxfRVNDUjEgCQkweDNiMQorCisvKiBBTUQgRGVmaW5lZCBNU1JzICovCisjZGVmaW5lIE1TUl9LNl9FRkVSCQkJMHhDMDAwMDA4MAorI2RlZmluZSBNU1JfSzZfU1RBUgkJCTB4QzAwMDAwODEKKyNkZWZpbmUgTVNSX0s2X1dIQ1IJCQkweEMwMDAwMDgyCisjZGVmaW5lIE1TUl9LNl9VV0NDUgkJCTB4QzAwMDAwODUKKyNkZWZpbmUgTVNSX0s2X0VQTVIJCQkweEMwMDAwMDg2CisjZGVmaW5lIE1TUl9LNl9QU09SCQkJMHhDMDAwMDA4NworI2RlZmluZSBNU1JfSzZfUEZJUgkJCTB4QzAwMDAwODgKKworI2RlZmluZSBNU1JfSzdfRVZOVFNFTDAJCQkweEMwMDEwMDAwCisjZGVmaW5lIE1TUl9LN19FVk5UU0VMMQkJCTB4QzAwMTAwMDEKKyNkZWZpbmUgTVNSX0s3X0VWTlRTRUwyCQkJMHhDMDAxMDAwMgorI2RlZmluZSBNU1JfSzdfRVZOVFNFTDMJCQkweEMwMDEwMDAzCisjZGVmaW5lIE1TUl9LN19QRVJGQ1RSMAkJCTB4QzAwMTAwMDQKKyNkZWZpbmUgTVNSX0s3X1BFUkZDVFIxCQkJMHhDMDAxMDAwNQorI2RlZmluZSBNU1JfSzdfUEVSRkNUUjIJCQkweEMwMDEwMDA2CisjZGVmaW5lIE1TUl9LN19QRVJGQ1RSMwkJCTB4QzAwMTAwMDcKKyNkZWZpbmUgTVNSX0s3X0hXQ1IJCQkweEMwMDEwMDE1CisjZGVmaW5lIE1TUl9LN19DTEtfQ1RMCQkJMHhDMDAxMDAxYgorI2RlZmluZSBNU1JfSzdfRklEX1ZJRF9DVEwJCTB4QzAwMTAwNDEKKyNkZWZpbmUgTVNSX0s3X0ZJRF9WSURfU1RBVFVTCQkweEMwMDEwMDQyCisKKy8qIGV4dGVuZGVkIGZlYXR1cmUgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTVNSX0VGRVIgCQkJMHhjMDAwMDA4MAorCisvKiBFRkVSIGJpdHM6ICovCisKKy8qIEV4ZWN1dGUgRGlzYWJsZSBlbmFibGUgKi8KKyNkZWZpbmUgX0VGRVJfTlgJCQkxMQorI2RlZmluZSBFRkVSX05YCQkJCSgxPDxfRUZFUl9OWCkKKworLyogQ2VudGF1ci1IYXVscy9JRFQgZGVmaW5lZCBNU1JzLiAqLworI2RlZmluZSBNU1JfSURUX0ZDUjEJCQkweDEwNworI2RlZmluZSBNU1JfSURUX0ZDUjIJCQkweDEwOAorI2RlZmluZSBNU1JfSURUX0ZDUjMJCQkweDEwOQorI2RlZmluZSBNU1JfSURUX0ZDUjQJCQkweDEwYQorCisjZGVmaW5lIE1TUl9JRFRfTUNSMAkJCTB4MTEwCisjZGVmaW5lIE1TUl9JRFRfTUNSMQkJCTB4MTExCisjZGVmaW5lIE1TUl9JRFRfTUNSMgkJCTB4MTEyCisjZGVmaW5lIE1TUl9JRFRfTUNSMwkJCTB4MTEzCisjZGVmaW5lIE1TUl9JRFRfTUNSNAkJCTB4MTE0CisjZGVmaW5lIE1TUl9JRFRfTUNSNQkJCTB4MTE1CisjZGVmaW5lIE1TUl9JRFRfTUNSNgkJCTB4MTE2CisjZGVmaW5lIE1TUl9JRFRfTUNSNwkJCTB4MTE3CisjZGVmaW5lIE1TUl9JRFRfTUNSX0NUUkwJCTB4MTIwCisKKy8qIFZJQSBDeXJpeCBkZWZpbmVkIE1TUnMqLworI2RlZmluZSBNU1JfVklBX0ZDUgkJCTB4MTEwNworI2RlZmluZSBNU1JfVklBX0xPTkdIQVVMCQkweDExMGEKKyNkZWZpbmUgTVNSX1ZJQV9STkcJCQkweDExMGIKKyNkZWZpbmUgTVNSX1ZJQV9CQ1IyCQkJMHgxMTQ3CisKKy8qIFRyYW5zbWV0YSBkZWZpbmVkIE1TUnMgKi8KKyNkZWZpbmUgTVNSX1RNVEFfTE9OR1JVTl9DVFJMCQkweDgwODY4MDEwCisjZGVmaW5lIE1TUl9UTVRBX0xPTkdSVU5fRkxBR1MJCTB4ODA4NjgwMTEKKyNkZWZpbmUgTVNSX1RNVEFfTFJUSV9SRUFET1VUCQkweDgwODY4MDE4CisjZGVmaW5lIE1TUl9UTVRBX0xSVElfVk9MVF9NSFoJCTB4ODA4NjgwMWEKKworI2VuZGlmIC8qIF9fQVNNX01TUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L210cnIuaCBiL2luY2x1ZGUvYXNtLWkzODYvbXRyci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViNmNlZGEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L210cnIuaApAQCAtMCwwICsxLDEwNyBAQAorLyogIEdlbmVyaWMgTVRSUiAoTWVtb3J5IFR5cGUgUmFuZ2UgUmVnaXN0ZXIpIGlvY3Rscy4KKworICAgIENvcHlyaWdodCAoQykgMTk5Ny0xOTk5ICBSaWNoYXJkIEdvb2NoCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworICAgIFJpY2hhcmQgR29vY2ggbWF5IGJlIHJlYWNoZWQgYnkgZW1haWwgYXQgIHJnb29jaEBhdG5mLmNzaXJvLmF1CisgICAgVGhlIHBvc3RhbCBhZGRyZXNzIGlzOgorICAgICAgUmljaGFyZCBHb29jaCwgYy9vIEFUTkYsIFAuIE8uIEJveCA3NiwgRXBwaW5nLCBOLlMuVy4sIDIxMjEsIEF1c3RyYWxpYS4KKyovCisjaWZuZGVmIF9MSU5VWF9NVFJSX0gKKyNkZWZpbmUgX0xJTlVYX01UUlJfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKworI2RlZmluZQlNVFJSX0lPQ1RMX0JBU0UJJ00nCisKK3N0cnVjdCBtdHJyX3NlbnRyeQoreworICAgIHVuc2lnbmVkIGxvbmcgYmFzZTsgICAgLyogIEJhc2UgYWRkcmVzcyAgICAgKi8KKyAgICB1bnNpZ25lZCBpbnQgc2l6ZTsgICAgLyogIFNpemUgb2YgcmVnaW9uICAgKi8KKyAgICB1bnNpZ25lZCBpbnQgdHlwZTsgICAgIC8qICBUeXBlIG9mIHJlZ2lvbiAgICovCit9OworCitzdHJ1Y3QgbXRycl9nZW50cnkKK3sKKyAgICB1bnNpZ25lZCBpbnQgcmVnbnVtOyAgIC8qICBSZWdpc3RlciBudW1iZXIgICovCisgICAgdW5zaWduZWQgbG9uZyBiYXNlOyAgICAvKiAgQmFzZSBhZGRyZXNzICAgICAqLworICAgIHVuc2lnbmVkIGludCBzaXplOyAgICAvKiAgU2l6ZSBvZiByZWdpb24gICAqLworICAgIHVuc2lnbmVkIGludCB0eXBlOyAgICAgLyogIFR5cGUgb2YgcmVnaW9uICAgKi8KK307CisKKy8qICBUaGVzZSBhcmUgdGhlIHZhcmlvdXMgaW9jdGxzICAqLworI2RlZmluZSBNVFJSSU9DX0FERF9FTlRSWSAgICAgICAgX0lPVyhNVFJSX0lPQ1RMX0JBU0UsICAwLCBzdHJ1Y3QgbXRycl9zZW50cnkpCisjZGVmaW5lIE1UUlJJT0NfU0VUX0VOVFJZICAgICAgICBfSU9XKE1UUlJfSU9DVExfQkFTRSwgIDEsIHN0cnVjdCBtdHJyX3NlbnRyeSkKKyNkZWZpbmUgTVRSUklPQ19ERUxfRU5UUlkgICAgICAgIF9JT1coTVRSUl9JT0NUTF9CQVNFLCAgMiwgc3RydWN0IG10cnJfc2VudHJ5KQorI2RlZmluZSBNVFJSSU9DX0dFVF9FTlRSWSAgICAgICAgX0lPV1IoTVRSUl9JT0NUTF9CQVNFLCAzLCBzdHJ1Y3QgbXRycl9nZW50cnkpCisjZGVmaW5lIE1UUlJJT0NfS0lMTF9FTlRSWSAgICAgICBfSU9XKE1UUlJfSU9DVExfQkFTRSwgIDQsIHN0cnVjdCBtdHJyX3NlbnRyeSkKKyNkZWZpbmUgTVRSUklPQ19BRERfUEFHRV9FTlRSWSAgIF9JT1coTVRSUl9JT0NUTF9CQVNFLCAgNSwgc3RydWN0IG10cnJfc2VudHJ5KQorI2RlZmluZSBNVFJSSU9DX1NFVF9QQUdFX0VOVFJZICAgX0lPVyhNVFJSX0lPQ1RMX0JBU0UsICA2LCBzdHJ1Y3QgbXRycl9zZW50cnkpCisjZGVmaW5lIE1UUlJJT0NfREVMX1BBR0VfRU5UUlkgICBfSU9XKE1UUlJfSU9DVExfQkFTRSwgIDcsIHN0cnVjdCBtdHJyX3NlbnRyeSkKKyNkZWZpbmUgTVRSUklPQ19HRVRfUEFHRV9FTlRSWSAgIF9JT1dSKE1UUlJfSU9DVExfQkFTRSwgOCwgc3RydWN0IG10cnJfZ2VudHJ5KQorI2RlZmluZSBNVFJSSU9DX0tJTExfUEFHRV9FTlRSWSAgX0lPVyhNVFJSX0lPQ1RMX0JBU0UsICA5LCBzdHJ1Y3QgbXRycl9zZW50cnkpCisKKy8qICBUaGVzZSBhcmUgdGhlIHJlZ2lvbiB0eXBlcyAgKi8KKyNkZWZpbmUgTVRSUl9UWVBFX1VOQ0FDSEFCTEUgMAorI2RlZmluZSBNVFJSX1RZUEVfV1JDT01CICAgICAxCisvKiNkZWZpbmUgTVRSUl9UWVBFXyAgICAgICAgIDIqLworLyojZGVmaW5lIE1UUlJfVFlQRV8gICAgICAgICAzKi8KKyNkZWZpbmUgTVRSUl9UWVBFX1dSVEhST1VHSCAgNAorI2RlZmluZSBNVFJSX1RZUEVfV1JQUk9UICAgICA1CisjZGVmaW5lIE1UUlJfVFlQRV9XUkJBQ0sgICAgIDYKKyNkZWZpbmUgTVRSUl9OVU1fVFlQRVMgICAgICAgNworCisjaWZkZWYgX19LRVJORUxfXworCisvKiAgVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIGZvciB1c2UgYnkgb3RoZXIgZHJpdmVycyAgKi8KKyMgaWZkZWYgQ09ORklHX01UUlIKK2V4dGVybiBpbnQgbXRycl9hZGQgKHVuc2lnbmVkIGxvbmcgYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplLAorCQkgICAgIHVuc2lnbmVkIGludCB0eXBlLCBjaGFyIGluY3JlbWVudCk7CitleHRlcm4gaW50IG10cnJfYWRkX3BhZ2UgKHVuc2lnbmVkIGxvbmcgYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplLAorCQkgICAgIHVuc2lnbmVkIGludCB0eXBlLCBjaGFyIGluY3JlbWVudCk7CitleHRlcm4gaW50IG10cnJfZGVsIChpbnQgcmVnLCB1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CitleHRlcm4gaW50IG10cnJfZGVsX3BhZ2UgKGludCByZWcsIHVuc2lnbmVkIGxvbmcgYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplKTsKK2V4dGVybiB2b2lkIG10cnJfY2VudGF1cl9yZXBvcnRfbWNyKGludCBtY3IsIHUzMiBsbywgdTMyIGhpKTsKKyMgIGVsc2UKK3N0YXRpYyBfX2lubGluZV9fIGludCBtdHJyX2FkZCAodW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkJdW5zaWduZWQgaW50IHR5cGUsIGNoYXIgaW5jcmVtZW50KQoreworICAgIHJldHVybiAtRU5PREVWOworfQorc3RhdGljIF9faW5saW5lX18gaW50IG10cnJfYWRkX3BhZ2UgKHVuc2lnbmVkIGxvbmcgYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJCXVuc2lnbmVkIGludCB0eXBlLCBjaGFyIGluY3JlbWVudCkKK3sKKyAgICByZXR1cm4gLUVOT0RFVjsKK30KK3N0YXRpYyBfX2lubGluZV9fIGludCBtdHJyX2RlbCAoaW50IHJlZywgdW5zaWduZWQgbG9uZyBiYXNlLAorCQkJCXVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKyAgICByZXR1cm4gLUVOT0RFVjsKK30KK3N0YXRpYyBfX2lubGluZV9fIGludCBtdHJyX2RlbF9wYWdlIChpbnQgcmVnLCB1bnNpZ25lZCBsb25nIGJhc2UsCisJCQkJdW5zaWduZWQgbG9uZyBzaXplKQoreworICAgIHJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIG10cnJfY2VudGF1cl9yZXBvcnRfbWNyKGludCBtY3IsIHUzMiBsbywgdTMyIGhpKSB7O30KKworIyAgZW5kaWYKKworI2VuZGlmCisKKyNlbmRpZiAgLyogIF9MSU5VWF9NVFJSX0ggICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L25hbWVpLmggYi9pbmNsdWRlL2FzbS1pMzg2L25hbWVpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE0ODY1MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvbmFtZWkuaApAQCAtMCwwICsxLDE3IEBACisvKiAkSWQ6IG5hbWVpLmgsdiAxLjEgMTk5Ni8xMi8xMyAxNDo0ODoyMSBqaiBFeHAgJAorICogbGludXgvaW5jbHVkZS9hc20taTM4Ni9uYW1laS5oCisgKgorICogSW5jbHVkZWQgZnJvbSBsaW51eC9mcy9uYW1laS5jCisgKi8KKworI2lmbmRlZiBfX0kzODZfTkFNRUlfSAorI2RlZmluZSBfX0kzODZfTkFNRUlfSAorCisvKiBUaGlzIGR1bW15IHJvdXRpbmUgbWF5YmUgY2hhbmdlZCB0byBzb21ldGhpbmcgdXNlZnVsCisgKiBmb3IgL3Vzci9nbmVtdWwvIGVtdWxhdGlvbiBzdHVmZi4KKyAqIExvb2sgYXQgYXNtLXNwYXJjL25hbWVpLmggZm9yIGRldGFpbHMuCisgKi8KKworI2RlZmluZSBfX2VtdWxfcHJlZml4KCkgTlVMTAorCisjZW5kaWYgLyogX19JMzg2X05BTUVJX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvbm1pLmggYi9pbmNsdWRlL2FzbS1pMzg2L25taS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxZjE2NjMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L25taS5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20taTM4Ni9ubWkuaAorICovCisjaWZuZGVmIEFTTV9OTUlfSAorI2RlZmluZSBBU01fTk1JX0gKKworI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisgCitzdHJ1Y3QgcHRfcmVnczsKKyAKK3R5cGVkZWYgaW50ICgqbm1pX2NhbGxiYWNrX3QpKHN0cnVjdCBwdF9yZWdzICogcmVncywgaW50IGNwdSk7CisgCisvKiogCisgKiBzZXRfbm1pX2NhbGxiYWNrCisgKgorICogU2V0IGEgaGFuZGxlciBmb3IgYW4gTk1JLiBPbmx5IG9uZSBoYW5kbGVyIG1heSBiZQorICogc2V0LiBSZXR1cm4gMSBpZiB0aGUgTk1JIHdhcyBoYW5kbGVkLgorICovCit2b2lkIHNldF9ubWlfY2FsbGJhY2sobm1pX2NhbGxiYWNrX3QgY2FsbGJhY2spOworIAorLyoqIAorICogdW5zZXRfbm1pX2NhbGxiYWNrCisgKgorICogUmVtb3ZlIHRoZSBoYW5kbGVyIHByZXZpb3VzbHkgc2V0LgorICovCit2b2lkIHVuc2V0X25taV9jYWxsYmFjayh2b2lkKTsKKyAKKyNlbmRpZiAvKiBBU01fTk1JX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvbm9kZS5oIGIvaW5jbHVkZS9hc20taTM4Ni9ub2RlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTEzYzZmZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvbm9kZS5oCkBAIC0wLDAgKzEsMjkgQEAKKyNpZm5kZWYgX0FTTV9JMzg2X05PREVfSF8KKyNkZWZpbmUgX0FTTV9JMzg2X05PREVfSF8KKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L21tem9uZS5oPgorI2luY2x1ZGUgPGxpbnV4L25vZGUuaD4KKyNpbmNsdWRlIDxsaW51eC90b3BvbG9neS5oPgorI2luY2x1ZGUgPGxpbnV4L25vZGVtYXNrLmg+CisKK3N0cnVjdCBpMzg2X25vZGUgeworCXN0cnVjdCBub2RlIG5vZGU7Cit9OworZXh0ZXJuIHN0cnVjdCBpMzg2X25vZGUgbm9kZV9kZXZpY2VzW01BWF9OVU1OT0RFU107CisKK3N0YXRpYyBpbmxpbmUgaW50IGFyY2hfcmVnaXN0ZXJfbm9kZShpbnQgbnVtKXsKKwlpbnQgcF9ub2RlOworCXN0cnVjdCBub2RlICpwYXJlbnQgPSBOVUxMOworCisJaWYgKCFub2RlX29ubGluZShudW0pKQorCQlyZXR1cm4gMDsKKwlwX25vZGUgPSBwYXJlbnRfbm9kZShudW0pOworCisJaWYgKHBfbm9kZSAhPSBudW0pCisJCXBhcmVudCA9ICZub2RlX2RldmljZXNbcF9ub2RlXS5ub2RlOworCisJcmV0dXJuIHJlZ2lzdGVyX25vZGUoJm5vZGVfZGV2aWNlc1tudW1dLm5vZGUsIG51bSwgcGFyZW50KTsKK30KKworI2VuZGlmIC8qIF9BU01fSTM4Nl9OT0RFX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L251bWFxLmggYi9pbmNsdWRlL2FzbS1pMzg2L251bWFxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhmNzEwZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvbnVtYXEuaApAQCAtMCwwICsxLDE2NCBAQAorLyoKKyAqIFdyaXR0ZW4gYnk6IFBhdHJpY2lhIEdhdWdoZW4sIElCTSBDb3Jwb3JhdGlvbgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMiwgSUJNIENvcnAuCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAgICAgICAgCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlCisgKiBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICogU2VuZCBmZWVkYmFjayB0byA8Z29uZUB1cy5pYm0uY29tPgorICovCisKKyNpZm5kZWYgTlVNQVFfSAorI2RlZmluZSBOVU1BUV9ICisKKyNpZmRlZiBDT05GSUdfWDg2X05VTUFRCisKK2V4dGVybiBpbnQgZ2V0X21lbWNmZ19udW1hcSh2b2lkKTsKKworLyoKKyAqIFNZU19DRkdfREFUQV9QUklWX0FERFIsIHN0cnVjdCBlYWNocXVhZG1lbSwgYW5kIHN0cnVjdCBzeXNfY2ZnX2RhdGEgYXJlIHRoZQorICovCisjZGVmaW5lIFNZU19DRkdfREFUQV9QUklWX0FERFIJCTB4MDAwOWQwMDAgLyogcGxhY2UgZm9yIHNjZCBpbiBwcml2YXRlIHF1YWQgc3BhY2UgKi8KKworLyoKKyAqIENvbW11bmljYXRpb24gYXJlYSBmb3IgZWFjaCBwcm9jZXNzb3Igb24gbHlueGVyLXByb2Nlc3NvciB0ZXN0cy4KKyAqCisgKiBOT1RFOiBJZiB5b3UgY2hhbmdlIHRoZSBzaXplIG9mIHRoaXMgZWFjaHByb2Mgc3RydWN0dXJlIHlvdSBuZWVkCisgKiAgICAgICB0byBjaGFuZ2UgdGhlIGRlZmluaXRpb24gZm9yIEVBQ0hfUVVBRF9TSVpFLgorICovCitzdHJ1Y3QgZWFjaHF1YWRtZW0geworCXVuc2lnbmVkIGludAlwcml2X21lbV9zdGFydDsJCS8qIFN0YXJ0aW5nIGFkZHJlc3Mgb2YgdGhpcyAqLworCQkJCQkJLyogcXVhZCdzIHByaXZhdGUgbWVtb3J5LiAqLworCQkJCQkJLyogVGhpcyBpcyBhbHdheXMgMC4gKi8KKwkJCQkJCS8qIEluIE1CLiAqLworCXVuc2lnbmVkIGludAlwcml2X21lbV9zaXplOwkJLyogU2l6ZSBvZiB0aGlzIHF1YWQncyAqLworCQkJCQkJLyogcHJpdmF0ZSBtZW1vcnkuICovCisJCQkJCQkvKiBJbiBNQi4gKi8KKwl1bnNpZ25lZCBpbnQJbG93X3NocmRfbWVtX3N0cnBfc3RhcnQ7LyogU3RhcnRpbmcgYWRkcmVzcyBvZiB0aGlzICovCisJCQkJCQkvKiBxdWFkJ3MgbG93IHNoYXJlZCBibG9jayAqLworCQkJCQkJLyogKHVudHJhbnNsYXRlZCkuICovCisJCQkJCQkvKiBJbiBNQi4gKi8KKwl1bnNpZ25lZCBpbnQJbG93X3NocmRfbWVtX3N0YXJ0OwkvKiBTdGFydGluZyBhZGRyZXNzIG9mIHRoaXMgKi8KKwkJCQkJCS8qIHF1YWQncyBsb3cgc2hhcmVkIG1lbW9yeSAqLworCQkJCQkJLyogKHVudHJhbnNsYXRlZCkuICovCisJCQkJCQkvKiBJbiBNQi4gKi8KKwl1bnNpZ25lZCBpbnQJbG93X3NocmRfbWVtX3NpemU7CS8qIFNpemUgb2YgdGhpcyBxdWFkJ3MgbG93ICovCisJCQkJCQkvKiBzaGFyZWQgbWVtb3J5LiAqLworCQkJCQkJLyogSW4gTUIuICovCisJdW5zaWduZWQgaW50CWxtbWlvX2NvcGJfc3RhcnQ7CS8qIFN0YXJ0aW5nIGFkZHJlc3Mgb2YgdGhpcyAqLworCQkJCQkJLyogcXVhZCdzIGxvY2FsIG1lbW9yeSAqLworCQkJCQkJLyogbWFwcGVkIEkvTyBpbiB0aGUgKi8KKwkJCQkJCS8qIGNvbXBhdGliaWxpdHkgT1BCLiAqLworCQkJCQkJLyogSW4gTUIuICovCisJdW5zaWduZWQgaW50CWxtbWlvX2NvcGJfc2l6ZTsJLyogU2l6ZSBvZiB0aGlzIHF1YWQncyBsb2NhbCAqLworCQkJCQkJLyogbWVtb3J5IG1hcHBlZCBJL08gaW4gdGhlICovCisJCQkJCQkvKiBjb21wYXRpYmlsaXR5IE9QQi4gKi8KKwkJCQkJCS8qIEluIE1CLiAqLworCXVuc2lnbmVkIGludAlsbW1pb19ub3BiX3N0YXJ0OwkvKiBTdGFydGluZyBhZGRyZXNzIG9mIHRoaXMgKi8KKwkJCQkJCS8qIHF1YWQncyBsb2NhbCBtZW1vcnkgKi8KKwkJCQkJCS8qIG1hcHBlZCBJL08gaW4gdGhlICovCisJCQkJCQkvKiBub24tY29tcGF0aWJpbGl0eSBPUEIuICovCisJCQkJCQkvKiBJbiBNQi4gKi8KKwl1bnNpZ25lZCBpbnQJbG1taW9fbm9wYl9zaXplOwkvKiBTaXplIG9mIHRoaXMgcXVhZCdzIGxvY2FsICovCisJCQkJCQkvKiBtZW1vcnkgbWFwcGVkIEkvTyBpbiB0aGUgKi8KKwkJCQkJCS8qIG5vbi1jb21wYXRpYmlsaXR5IE9QQi4gKi8KKwkJCQkJCS8qIEluIE1CLiAqLworCXVuc2lnbmVkIGludAlpb19hcGljXzBfc3RhcnQ7CS8qIFN0YXJ0aW5nIGFkZHJlc3Mgb2YgSS9PICovCisJCQkJCQkvKiBBUElDIDAuICovCisJdW5zaWduZWQgaW50CWlvX2FwaWNfMF9zejsJCS8qIFNpemUgSS9PIEFQSUMgMC4gKi8KKwl1bnNpZ25lZCBpbnQJaW9fYXBpY18xX3N0YXJ0OwkvKiBTdGFydGluZyBhZGRyZXNzIG9mIEkvTyAqLworCQkJCQkJLyogQVBJQyAxLiAqLworCXVuc2lnbmVkIGludAlpb19hcGljXzFfc3o7CQkvKiBTaXplIEkvTyBBUElDIDEuICovCisJdW5zaWduZWQgaW50CWhpX3NocmRfbWVtX3N0YXJ0OwkvKiBTdGFydGluZyBhZGRyZXNzIG9mIHRoaXMgKi8KKwkJCQkJCS8qIHF1YWQncyBoaWdoIHNoYXJlZCBtZW1vcnkuKi8KKwkJCQkJCS8qIEluIE1CLiAqLworCXVuc2lnbmVkIGludAloaV9zaHJkX21lbV9zaXplOwkvKiBTaXplIG9mIHRoaXMgcXVhZCdzIGhpZ2ggKi8KKwkJCQkJCS8qIHNoYXJlZCBtZW1vcnkuICovCisJCQkJCQkvKiBJbiBNQi4gKi8KKwl1bnNpZ25lZCBpbnQJbXBzX3RhYmxlX2FkZHI7CQkvKiBBZGRyZXNzIG9mIHRoaXMgcXVhZCdzICovCisJCQkJCQkvKiBNUFMgdGFibGVzIGZyb20gQklPUywgKi8KKwkJCQkJCS8qIGluIHN5c3RlbSBzcGFjZS4qLworCXVuc2lnbmVkIGludAlsY2xfTURDX3Bpb19hZGRyOwkvKiBQb3J0LUkvTyBhZGRyZXNzIGZvciAqLworCQkJCQkJLyogbG9jYWwgYWNjZXNzIG9mIE1EQy4gKi8KKwl1bnNpZ25lZCBpbnQJcm10X01EQ19tbXBpb19hZGRyOwkvKiBNTS1Qb3J0LUkvTyBhZGRyZXNzIGZvciAqLworCQkJCQkJLyogcmVtb3RlIGFjY2VzcyBvZiBNREMuICovCisJdW5zaWduZWQgaW50CW1tX3BvcnRfaW9fc3RhcnQ7CS8qIFN0YXJ0aW5nIGFkZHJlc3Mgb2YgdGhpcyAqLworCQkJCQkJLyogcXVhZCdzIG1lbW9yeSBtYXBwZWQgUG9ydCAqLworCQkJCQkJLyogSS9PIHNwYWNlLiAqLworCXVuc2lnbmVkIGludAltbV9wb3J0X2lvX3NpemU7CS8qIFNpemUgb2YgdGhpcyBxdWFkJ3MgbWVtb3J5Ki8KKwkJCQkJCS8qIG1hcHBlZCBQb3J0IEkvTyBzcGFjZS4gKi8KKwl1bnNpZ25lZCBpbnQJbW1fcm10X2lvX2FwaWNfc3RhcnQ7CS8qIFN0YXJ0aW5nIGFkZHJlc3Mgb2YgdGhpcyAqLworCQkJCQkJLyogcXVhZCdzIG1lbW9yeSBtYXBwZWQgKi8KKwkJCQkJCS8qIHJlbW90ZSBJL08gQVBJQyBzcGFjZS4gKi8KKwl1bnNpZ25lZCBpbnQJbW1fcm10X2lvX2FwaWNfc2l6ZTsJLyogU2l6ZSBvZiB0aGlzIHF1YWQncyBtZW1vcnkqLworCQkJCQkJLyogbWFwcGVkIHJlbW90ZSBJL08gQVBJQyAqLworCQkJCQkJLyogc3BhY2UuICovCisJdW5zaWduZWQgaW50CW1tX2lzYV9zdGFydDsJCS8qIFN0YXJ0aW5nIGFkZHJlc3Mgb2YgdGhpcyAqLworCQkJCQkJLyogcXVhZCdzIG1lbW9yeSBtYXBwZWQgSVNBICovCisJCQkJCQkvKiBzcGFjZSAoY29udGFpbnMgTURDICovCisJCQkJCQkvKiBtZW1vcnkgc3BhY2UpLiAqLworCXVuc2lnbmVkIGludAltbV9pc2Ffc2l6ZTsJCS8qIFNpemUgb2YgdGhpcyBxdWFkJ3MgbWVtb3J5Ki8KKwkJCQkJCS8qIG1hcHBlZCBJU0Egc3BhY2UgKGNvbnRhaW5zKi8KKwkJCQkJCS8qIE1EQyBtZW1vcnkgc3BhY2UpLiAqLworCXVuc2lnbmVkIGludAlybXRfcW1pX2FkZHI7CQkvKiBSZW1vdGUgYWRkciB0byBhY2Nlc3MgUU1JLiovCisJdW5zaWduZWQgaW50CWxjbF9xbWlfYWRkcjsJCS8qIExvY2FsIGFkZHIgdG8gYWNjZXNzIFFNSS4gKi8KK307CisKKy8qCisgKiBOb3RlOiBUaGlzIHN0cnVjdHVyZSBtdXN0IGJlIE5PVCBiZSBjaGFuZ2VkIHVubGVzcyB0aGUgbXVsdGlwcm9jIGFuZAorICogT1MgYXJlIGNoYW5nZWQgdG8gcmVmbGVjdCB0aGUgbmV3IHN0cnVjdHVyZS4KKyAqLworc3RydWN0IHN5c19jZmdfZGF0YSB7CisJdW5zaWduZWQgaW50CXF1YWRfaWQ7CisJdW5zaWduZWQgaW50CWJzcF9wcm9jX2lkOyAvKiBCb290IFN0cmFwIFByb2Nlc3NvciBpbiB0aGlzIHF1YWQuICovCisJdW5zaWduZWQgaW50CXNjZF92ZXJzaW9uOyAvKiBWZXJzaW9uIG51bWJlciBvZiB0aGlzIHRhYmxlLiAqLworCXVuc2lnbmVkIGludAlmaXJzdF9xdWFkX2lkOworCXVuc2lnbmVkIGludAlxdWFkc19wcmVzZW50MzFfMDsgLyogMSBiaXQgZm9yIGVhY2ggcXVhZCAqLworCXVuc2lnbmVkIGludAlxdWFkc19wcmVzZW50NjNfMzI7IC8qIDEgYml0IGZvciBlYWNoIHF1YWQgKi8KKwl1bnNpZ25lZCBpbnQJY29uZmlnX2ZsYWdzOworCXVuc2lnbmVkIGludAlib290X2ZsYWdzOworCXVuc2lnbmVkIGludAljc3Jfc3RhcnRfYWRkcjsgLyogQWJzb2x1dGUgdmFsdWUgKG5vdCBpbiBNQikgKi8KKwl1bnNpZ25lZCBpbnQJY3NyX3NpemU7IC8qIEFic29sdXRlIHZhbHVlIChub3QgaW4gTUIpICovCisJdW5zaWduZWQgaW50CWxjbF9hcGljX3N0YXJ0X2FkZHI7IC8qIEFic29sdXRlIHZhbHVlIChub3QgaW4gTUIpICovCisJdW5zaWduZWQgaW50CWxjbF9hcGljX3NpemU7IC8qIEFic29sdXRlIHZhbHVlIChub3QgaW4gTUIpICovCisJdW5zaWduZWQgaW50CWxvd19zaHJkX21lbV9iYXNlOyAvKiAwIG9yIDUxMk1CIG9yIDFHQiAqLworCXVuc2lnbmVkIGludAlsb3dfc2hyZF9tZW1fcXVhZF9vZmZzZXQ7IC8qIDAsMTI4TSwyNTZNLDUxMk0sMUcgKi8KKwkJCQkJLyogbWF5IG5vdCBiZSB0b3RhbGx5IHBvcHVsYXRlZCAqLworCXVuc2lnbmVkIGludAlzcGxpdF9tZW1fZW5ibDsgLyogMCBmb3Igbm8gbG93IHNoYXJlZCBtZW1vcnkgKi8gCisJdW5zaWduZWQgaW50CW1taW9fc3o7IC8qIFNpemUgb2YgdG90YWwgc3lzdGVtIG1lbW9yeSBtYXBwZWQgSS9PICovCisJCQkJIC8qIChpbiBNQikuICovCisJdW5zaWduZWQgaW50CXF1YWRfc3Bpbl9sb2NrOyAvKiBTcGFyZSBsb2NhdGlvbiB1c2VkIGZvciBxdWFkICovCisJCQkJCS8qIGJyaW5ndXAuICovCisJdW5zaWduZWQgaW50CW5vbnplcm81NTsgLyogRm9yIGNoZWNrc3VtbWluZy4gKi8KKwl1bnNpZ25lZCBpbnQJbm9uemVyb2FhOyAvKiBGb3IgY2hlY2tzdW1taW5nLiAqLworCXVuc2lnbmVkIGludAlzY2RfbWFnaWNfbnVtYmVyOworCXVuc2lnbmVkIGludAlzeXN0ZW1fdHlwZTsKKwl1bnNpZ25lZCBpbnQJY2hlY2tzdW07CisJLyoKKwkgKgltZW1vcnkgY29uZmlndXJhdGlvbiBhcmVhIGZvciBlYWNoIHF1YWQKKwkgKi8KKyAgICAgICAgc3RydWN0CWVhY2hxdWFkbWVtIGVxW01BWF9OVU1OT0RFU107CS8qIGluZGV4ZWQgYnkgcXVhZCBpZCAqLworfTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nICpnZXRfemhvbGVzX3NpemUoaW50IG5pZCkKK3sKKwlyZXR1cm4gTlVMTDsKK30KKyNlbmRpZiAvKiBDT05GSUdfWDg2X05VTUFRICovCisjZW5kaWYgLyogTlVNQVFfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L251bW5vZGVzLmggYi9pbmNsdWRlL2FzbS1pMzg2L251bW5vZGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTYxZjM4YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvbnVtbm9kZXMuaApAQCAtMCwwICsxLDE4IEBACisjaWZuZGVmIF9BU01fTUFYX05VTU5PREVTX0gKKyNkZWZpbmUgX0FTTV9NQVhfTlVNTk9ERVNfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpZmRlZiBDT05GSUdfWDg2X05VTUFRCisKKy8qIE1heCAxNiBOb2RlcyAqLworI2RlZmluZSBOT0RFU19TSElGVAk0CisKKyNlbGlmIGRlZmluZWQoQ09ORklHX0FDUElfU1JBVCkKKworLyogTWF4IDggTm9kZXMgKi8KKyNkZWZpbmUgTk9ERVNfU0hJRlQJMworCisjZW5kaWYgLyogQ09ORklHX1g4Nl9OVU1BUSAqLworCisjZW5kaWYgLyogX0FTTV9NQVhfTlVNTk9ERVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9wYWdlLmggYi9pbmNsdWRlL2FzbS1pMzg2L3BhZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDEzOTY5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9wYWdlLmgKQEAgLTAsMCArMSwxNTMgQEAKKyNpZm5kZWYgX0kzODZfUEFHRV9ICisjZGVmaW5lIF9JMzg2X1BBR0VfSAorCisvKiBQQUdFX1NISUZUIGRldGVybWluZXMgdGhlIHBhZ2Ugc2l6ZSAqLworI2RlZmluZSBQQUdFX1NISUZUCTEyCisjZGVmaW5lIFBBR0VfU0laRQkoMVVMIDw8IFBBR0VfU0hJRlQpCisjZGVmaW5lIFBBR0VfTUFTSwkofihQQUdFX1NJWkUtMSkpCisKKyNkZWZpbmUgTEFSR0VfUEFHRV9NQVNLICh+KExBUkdFX1BBR0VfU0laRS0xKSkKKyNkZWZpbmUgTEFSR0VfUEFHRV9TSVpFICgxVUwgPDwgUE1EX1NISUZUKQorCisjaWZkZWYgX19LRVJORUxfXworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjaWZkZWYgQ09ORklHX1g4Nl9VU0VfM0ROT1cKKworI2luY2x1ZGUgPGFzbS9tbXguaD4KKworI2RlZmluZSBjbGVhcl9wYWdlKHBhZ2UpCW1teF9jbGVhcl9wYWdlKCh2b2lkICopKHBhZ2UpKQorI2RlZmluZSBjb3B5X3BhZ2UodG8sZnJvbSkJbW14X2NvcHlfcGFnZSh0byxmcm9tKQorCisjZWxzZQorCisvKgorICoJT24gb2xkZXIgWDg2IHByb2Nlc3NvcnMgaXQncyBub3QgYSB3aW4gdG8gdXNlIE1NWCBoZXJlIGl0IHNlZW1zLgorICoJTWF5YmUgdGhlIEs2LUlJSSA/CisgKi8KKyAKKyNkZWZpbmUgY2xlYXJfcGFnZShwYWdlKQltZW1zZXQoKHZvaWQgKikocGFnZSksIDAsIFBBR0VfU0laRSkKKyNkZWZpbmUgY29weV9wYWdlKHRvLGZyb20pCW1lbWNweSgodm9pZCAqKSh0byksICh2b2lkICopKGZyb20pLCBQQUdFX1NJWkUpCisKKyNlbmRpZgorCisjZGVmaW5lIGNsZWFyX3VzZXJfcGFnZShwYWdlLCB2YWRkciwgcGcpCWNsZWFyX3BhZ2UocGFnZSkKKyNkZWZpbmUgY29weV91c2VyX3BhZ2UodG8sIGZyb20sIHZhZGRyLCBwZykJY29weV9wYWdlKHRvLCBmcm9tKQorCisjZGVmaW5lIGFsbG9jX3plcm9lZF91c2VyX2hpZ2hwYWdlKHZtYSwgdmFkZHIpIGFsbG9jX3BhZ2Vfdm1hKEdGUF9ISUdIVVNFUiB8IF9fR0ZQX1pFUk8sIHZtYSwgdmFkZHIpCisjZGVmaW5lIF9fSEFWRV9BUkNIX0FMTE9DX1pFUk9FRF9VU0VSX0hJR0hQQUdFCisKKy8qCisgKiBUaGVzZSBhcmUgdXNlZCB0byBtYWtlIHVzZSBvZiBDIHR5cGUtY2hlY2tpbmcuLgorICovCitleHRlcm4gaW50IG54X2VuYWJsZWQ7CisjaWZkZWYgQ09ORklHX1g4Nl9QQUUKK2V4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgX19zdXBwb3J0ZWRfcHRlX21hc2s7Cit0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgcHRlX2xvdywgcHRlX2hpZ2g7IH0gcHRlX3Q7Cit0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgbG9uZyBwbWQ7IH0gcG1kX3Q7Cit0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgbG9uZyBwZ2Q7IH0gcGdkX3Q7Cit0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgbG9uZyBwZ3Byb3Q7IH0gcGdwcm90X3Q7CisjZGVmaW5lIHBtZF92YWwoeCkJKCh4KS5wbWQpCisjZGVmaW5lIHB0ZV92YWwoeCkJKCh4KS5wdGVfbG93IHwgKCh1bnNpZ25lZCBsb25nIGxvbmcpKHgpLnB0ZV9oaWdoIDw8IDMyKSkKKyNkZWZpbmUgX19wbWQoeCkgKChwbWRfdCkgeyAoeCkgfSApCisjZGVmaW5lIEhQQUdFX1NISUZUCTIxCisjZWxzZQordHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHB0ZV9sb3c7IH0gcHRlX3Q7Cit0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgcGdkOyB9IHBnZF90OwordHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHBncHJvdDsgfSBwZ3Byb3RfdDsKKyNkZWZpbmUgYm9vdF9wdGVfdCBwdGVfdCAvKiBvciB3b3VsZCB5b3UgcmF0aGVyIGhhdmUgYSB0eXBlZGVmICovCisjZGVmaW5lIHB0ZV92YWwoeCkJKCh4KS5wdGVfbG93KQorI2RlZmluZSBIUEFHRV9TSElGVAkyMgorI2VuZGlmCisjZGVmaW5lIFBURV9NQVNLCVBBR0VfTUFTSworCisjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQorI2RlZmluZSBIUEFHRV9TSVpFCSgoMVVMKSA8PCBIUEFHRV9TSElGVCkKKyNkZWZpbmUgSFBBR0VfTUFTSwkofihIUEFHRV9TSVpFIC0gMSkpCisjZGVmaW5lIEhVR0VUTEJfUEFHRV9PUkRFUgkoSFBBR0VfU0hJRlQgLSBQQUdFX1NISUZUKQorI2RlZmluZSBIQVZFX0FSQ0hfSFVHRVRMQl9VTk1BUFBFRF9BUkVBCisjZW5kaWYKKworI2RlZmluZSBwZ2RfdmFsKHgpCSgoeCkucGdkKQorI2RlZmluZSBwZ3Byb3RfdmFsKHgpCSgoeCkucGdwcm90KQorCisjZGVmaW5lIF9fcHRlKHgpICgocHRlX3QpIHsgKHgpIH0gKQorI2RlZmluZSBfX3BnZCh4KSAoKHBnZF90KSB7ICh4KSB9ICkKKyNkZWZpbmUgX19wZ3Byb3QoeCkJKChwZ3Byb3RfdCkgeyAoeCkgfSApCisKKyNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCisKKy8qIHRvIGFsaWduIHRoZSBwb2ludGVyIHRvIHRoZSAobmV4dCkgcGFnZSBib3VuZGFyeSAqLworI2RlZmluZSBQQUdFX0FMSUdOKGFkZHIpCSgoKGFkZHIpK1BBR0VfU0laRS0xKSZQQUdFX01BU0spCisKKy8qCisgKiBUaGlzIGhhbmRsZXMgdGhlIG1lbW9yeSBtYXAuLiBXZSBjb3VsZCBtYWtlIHRoaXMgYSBjb25maWcKKyAqIG9wdGlvbiwgYnV0IHRvbyBtYW55IHBlb3BsZSBzY3JldyBpdCB1cCwgYW5kIHRvbyBmZXcgbmVlZAorICogaXQuCisgKgorICogQSBfX1BBR0VfT0ZGU0VUIG9mIDB4QzAwMDAwMDAgbWVhbnMgdGhhdCB0aGUga2VybmVsIGhhcworICogYSB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2Ugb2Ygb25lIGdpZ2FieXRlLCB3aGljaCBsaW1pdHMgdGhlCisgKiBhbW91bnQgb2YgcGh5c2ljYWwgbWVtb3J5IHlvdSBjYW4gdXNlIHRvIGFib3V0IDk1ME1CLiAKKyAqCisgKiBJZiB5b3Ugd2FudCBtb3JlIHBoeXNpY2FsIG1lbW9yeSB0aGFuIHRoaXMgdGhlbiBzZWUgdGhlIENPTkZJR19ISUdITUVNNEcKKyAqIGFuZCBDT05GSUdfSElHSE1FTTY0RyBvcHRpb25zIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisvKgorICogVGhpcyBtdWNoIGFkZHJlc3Mgc3BhY2UgaXMgcmVzZXJ2ZWQgZm9yIHZtYWxsb2MoKSBhbmQgaW9tYXAoKQorICogYXMgd2VsbCBhcyBmaXhtYXAgbWFwcGluZ3MuCisgKi8KK2V4dGVybiB1bnNpZ25lZCBpbnQgX19WTUFMTE9DX1JFU0VSVkU7CisKKy8qIFB1cmUgMl5uIHZlcnNpb24gb2YgZ2V0X29yZGVyICovCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgZ2V0X29yZGVyKHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlpbnQgb3JkZXI7CisKKwlzaXplID0gKHNpemUtMSkgPj4gKFBBR0VfU0hJRlQtMSk7CisJb3JkZXIgPSAtMTsKKwlkbyB7CisJCXNpemUgPj49IDE7CisJCW9yZGVyKys7CisJfSB3aGlsZSAoc2l6ZSk7CisJcmV0dXJuIG9yZGVyOworfQorCitleHRlcm4gaW50IHN5c2N0bF9sZWdhY3lfdmFfbGF5b3V0OworCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKyNpZmRlZiBfX0FTU0VNQkxZX18KKyNkZWZpbmUgX19QQUdFX09GRlNFVAkJKDB4QzAwMDAwMDApCisjZWxzZQorI2RlZmluZSBfX1BBR0VfT0ZGU0VUCQkoMHhDMDAwMDAwMFVMKQorI2VuZGlmCisKKworI2RlZmluZSBQQUdFX09GRlNFVAkJKCh1bnNpZ25lZCBsb25nKV9fUEFHRV9PRkZTRVQpCisjZGVmaW5lIFZNQUxMT0NfUkVTRVJWRQkJKCh1bnNpZ25lZCBsb25nKV9fVk1BTExPQ19SRVNFUlZFKQorI2RlZmluZSBNQVhNRU0JCQkoLV9fUEFHRV9PRkZTRVQtX19WTUFMTE9DX1JFU0VSVkUpCisjZGVmaW5lIF9fcGEoeCkJCQkoKHVuc2lnbmVkIGxvbmcpKHgpLVBBR0VfT0ZGU0VUKQorI2RlZmluZSBfX3ZhKHgpCQkJKCh2b2lkICopKCh1bnNpZ25lZCBsb25nKSh4KStQQUdFX09GRlNFVCkpCisjZGVmaW5lIHBmbl90b19rYWRkcihwZm4pICAgICAgX192YSgocGZuKSA8PCBQQUdFX1NISUZUKQorI2lmbmRlZiBDT05GSUdfRElTQ09OVElHTUVNCisjZGVmaW5lIHBmbl90b19wYWdlKHBmbikJKG1lbV9tYXAgKyAocGZuKSkKKyNkZWZpbmUgcGFnZV90b19wZm4ocGFnZSkJKCh1bnNpZ25lZCBsb25nKSgocGFnZSkgLSBtZW1fbWFwKSkKKyNkZWZpbmUgcGZuX3ZhbGlkKHBmbikJCSgocGZuKSA8IG1heF9tYXBucikKKyNlbmRpZiAvKiAhQ09ORklHX0RJU0NPTlRJR01FTSAqLworI2RlZmluZSB2aXJ0X3RvX3BhZ2Uoa2FkZHIpCXBmbl90b19wYWdlKF9fcGEoa2FkZHIpID4+IFBBR0VfU0hJRlQpCisKKyNkZWZpbmUgdmlydF9hZGRyX3ZhbGlkKGthZGRyKQlwZm5fdmFsaWQoX19wYShrYWRkcikgPj4gUEFHRV9TSElGVCkKKworI2RlZmluZSBWTV9EQVRBX0RFRkFVTFRfRkxBR1MgXAorCShWTV9SRUFEIHwgVk1fV1JJVEUgfCBcCisJKChjdXJyZW50LT5wZXJzb25hbGl0eSAmIFJFQURfSU1QTElFU19FWEVDKSA/IFZNX0VYRUMgOiAwICkgfCBcCisJCSBWTV9NQVlSRUFEIHwgVk1fTUFZV1JJVEUgfCBWTV9NQVlFWEVDKQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX0kzODZfUEFHRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3BhcmFtLmggYi9pbmNsdWRlL2FzbS1pMzg2L3BhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY0NDA1MgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvcGFyYW0uaApAQCAtMCwwICsxLDIzIEBACisjaWZuZGVmIF9BU01pMzg2X1BBUkFNX0gKKyNkZWZpbmUgX0FTTWkzODZfUEFSQU1fSAorCisjaWZkZWYgX19LRVJORUxfXworIyBkZWZpbmUgSFoJCTEwMDAJCS8qIEludGVybmFsIGtlcm5lbCB0aW1lciBmcmVxdWVuY3kgKi8KKyMgZGVmaW5lIFVTRVJfSFoJMTAwCQkvKiAuLiBzb21lIHVzZXIgaW50ZXJmYWNlcyBhcmUgaW4gInRpY2tzIiAqLworIyBkZWZpbmUgQ0xPQ0tTX1BFUl9TRUMJCShVU0VSX0haKQkvKiBsaWtlIHRpbWVzKCkgKi8KKyNlbmRpZgorCisjaWZuZGVmIEhaCisjZGVmaW5lIEhaIDEwMAorI2VuZGlmCisKKyNkZWZpbmUgRVhFQ19QQUdFU0laRQk0MDk2CisKKyNpZm5kZWYgTk9HUk9VUAorI2RlZmluZSBOT0dST1VQCQkoLTEpCisjZW5kaWYKKworI2RlZmluZSBNQVhIT1NUTkFNRUxFTgk2NAkvKiBtYXggbGVuZ3RoIG9mIGhvc3RuYW1lICovCisjZGVmaW5lIENPTU1BTkRfTElORV9TSVpFIDI1NgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvcGFycG9ydC5oIGIvaW5jbHVkZS9hc20taTM4Ni9wYXJwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmEwZTMyMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvcGFycG9ydC5oCkBAIC0wLDAgKzEsMTggQEAKKy8qCisgKiBwYXJwb3J0Lmg6IGlhMzItc3BlY2lmaWMgcGFycG9ydCBpbml0aWFsaXNhdGlvbgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCAgVGltIFdhdWdoIDx0aW1AY3liZXJlbGsuZGVtb24uY28udWs+CisgKgorICogVGhpcyBmaWxlIHNob3VsZCBvbmx5IGJlIGluY2x1ZGVkIGJ5IGRyaXZlcnMvcGFycG9ydC9wYXJwb3J0X3BjLmMuCisgKi8KKworI2lmbmRlZiBfQVNNX0kzODZfUEFSUE9SVF9ICisjZGVmaW5lIF9BU01fSTM4Nl9QQVJQT1JUX0ggMQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBwYXJwb3J0X3BjX2ZpbmRfaXNhX3BvcnRzIChpbnQgYXV0b2lycSwgaW50IGF1dG9kbWEpOworc3RhdGljIGludCBfX2RldmluaXQgcGFycG9ydF9wY19maW5kX25vbnBjaV9wb3J0cyAoaW50IGF1dG9pcnEsIGludCBhdXRvZG1hKQoreworCXJldHVybiBwYXJwb3J0X3BjX2ZpbmRfaXNhX3BvcnRzIChhdXRvaXJxLCBhdXRvZG1hKTsKK30KKworI2VuZGlmIC8qICEoX0FTTV9JMzg2X1BBUlBPUlRfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvcGNpLWRpcmVjdC5oIGIvaW5jbHVkZS9hc20taTM4Ni9wY2ktZGlyZWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY2NzM4YgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvcGNpLWRpcmVjdC5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlICJhc20teDg2XzY0L3BjaS1kaXJlY3QuaCIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvcGNpLmggYi9pbmNsdWRlL2FzbS1pMzg2L3BjaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiNzQ5YjgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3BjaS5oCkBAIC0wLDAgKzEsMTEwIEBACisjaWZuZGVmIF9faTM4Nl9QQ0lfSAorI2RlZmluZSBfX2kzODZfUENJX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGxpbnV4L21tLmg+CQkvKiBmb3Igc3RydWN0IHBhZ2UgKi8KKworLyogQ2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIGxvZ2ljIGluIHBjaV9zY2FuX2J1cyBmb3Igc2tpcHBpbmcKKyAgIGFscmVhZHktY29uZmlndXJlZCBidXMgbnVtYmVycyAtIHRvIGJlIHVzZWQgZm9yIGJ1Z2d5IEJJT1NlcworICAgb3IgYXJjaGl0ZWN0dXJlcyB3aXRoIGluY29tcGxldGUgUENJIHNldHVwIGJ5IHRoZSBsb2FkZXIgKi8KKworI2lmZGVmIENPTkZJR19QQ0kKK2V4dGVybiB1bnNpZ25lZCBpbnQgcGNpYmlvc19hc3NpZ25fYWxsX2J1c3Nlcyh2b2lkKTsKKyNlbHNlCisjZGVmaW5lIHBjaWJpb3NfYXNzaWduX2FsbF9idXNzZXMoKQkwCisjZW5kaWYKKyNkZWZpbmUgcGNpYmlvc19zY2FuX2FsbF9mbnMoYSwgYikJMAorCitleHRlcm4gdW5zaWduZWQgbG9uZyBwY2lfbWVtX3N0YXJ0OworI2RlZmluZSBQQ0lCSU9TX01JTl9JTwkJMHgxMDAwCisjZGVmaW5lIFBDSUJJT1NfTUlOX01FTQkJKHBjaV9tZW1fc3RhcnQpCisKKyNkZWZpbmUgUENJQklPU19NSU5fQ0FSREJVU19JTwkweDQwMDAKKwordm9pZCBwY2liaW9zX2NvbmZpZ19pbml0KHZvaWQpOworc3RydWN0IHBjaV9idXMgKiBwY2liaW9zX3NjYW5fcm9vdChpbnQgYnVzKTsKKwordm9pZCBwY2liaW9zX3NldF9tYXN0ZXIoc3RydWN0IHBjaV9kZXYgKmRldik7Cit2b2lkIHBjaWJpb3NfcGVuYWxpemVfaXNhX2lycShpbnQgaXJxKTsKK3N0cnVjdCBpcnFfcm91dGluZ190YWJsZSAqcGNpYmlvc19nZXRfaXJxX3JvdXRpbmdfdGFibGUodm9pZCk7CitpbnQgcGNpYmlvc19zZXRfaXJxX3JvdXRpbmcoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHBpbiwgaW50IGlycSk7CisKKy8qIER5bmFtaWMgRE1BIG1hcHBpbmcgc3R1ZmYuCisgKiBpMzg2IGhhcyBldmVyeXRoaW5nIG1hcHBlZCBzdGF0aWNhbGx5LgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxhc20vc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworc3RydWN0IHBjaV9kZXY7CisKKy8qIFRoZSBQQ0kgYWRkcmVzcyBzcGFjZSBkb2VzIGVxdWFsIHRoZSBwaHlzaWNhbCBtZW1vcnkKKyAqIGFkZHJlc3Mgc3BhY2UuICBUaGUgbmV0d29ya2luZyBhbmQgYmxvY2sgZGV2aWNlIGxheWVycyB1c2UKKyAqIHRoaXMgYm9vbGVhbiBmb3IgYm91bmNlIGJ1ZmZlciBkZWNpc2lvbnMuCisgKi8KKyNkZWZpbmUgUENJX0RNQV9CVVNfSVNfUEhZUwkoMSkKKworLyogcGNpX3VubWFwX3twYWdlLHNpbmdsZX0gaXMgYSBub3Agc28uLi4gKi8KKyNkZWZpbmUgREVDTEFSRV9QQ0lfVU5NQVBfQUREUihBRERSX05BTUUpCisjZGVmaW5lIERFQ0xBUkVfUENJX1VOTUFQX0xFTihMRU5fTkFNRSkKKyNkZWZpbmUgcGNpX3VubWFwX2FkZHIoUFRSLCBBRERSX05BTUUpCQkoMCkKKyNkZWZpbmUgcGNpX3VubWFwX2FkZHJfc2V0KFBUUiwgQUREUl9OQU1FLCBWQUwpCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgcGNpX3VubWFwX2xlbihQVFIsIExFTl9OQU1FKQkJKDApCisjZGVmaW5lIHBjaV91bm1hcF9sZW5fc2V0KFBUUiwgTEVOX05BTUUsIFZBTCkJZG8geyB9IHdoaWxlICgwKQorCisvKiBUaGlzIGlzIGFsd2F5cyBmaW5lLiAqLworI2RlZmluZSBwY2lfZGFjX2RtYV9zdXBwb3J0ZWQocGNpX2RldiwgbWFzaykJKDEpCisKK3N0YXRpYyBpbmxpbmUgZG1hNjRfYWRkcl90CitwY2lfZGFjX3BhZ2VfdG9fZG1hKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsIGludCBkaXJlY3Rpb24pCit7CisJcmV0dXJuICgoZG1hNjRfYWRkcl90KSBwYWdlX3RvX3BoeXMocGFnZSkgKworCQkoZG1hNjRfYWRkcl90KSBvZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICoKK3BjaV9kYWNfZG1hX3RvX3BhZ2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGRtYTY0X2FkZHJfdCBkbWFfYWRkcikKK3sKKwlyZXR1cm4gcGZuX3RvX3BhZ2UoZG1hX2FkZHIgPj4gUEFHRV9TSElGVCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZworcGNpX2RhY19kbWFfdG9fb2Zmc2V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBkbWE2NF9hZGRyX3QgZG1hX2FkZHIpCit7CisJcmV0dXJuIChkbWFfYWRkciAmIH5QQUdFX01BU0spOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3BjaV9kYWNfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGRtYTY0X2FkZHJfdCBkbWFfYWRkciwgc2l6ZV90IGxlbiwgaW50IGRpcmVjdGlvbikKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkCitwY2lfZGFjX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBkbWE2NF9hZGRyX3QgZG1hX2FkZHIsIHNpemVfdCBsZW4sIGludCBkaXJlY3Rpb24pCit7CisJZmx1c2hfd3JpdGVfYnVmZmVycygpOworfQorCisjZGVmaW5lIEhBVkVfUENJX01NQVAKK2V4dGVybiBpbnQgcGNpX21tYXBfcGFnZV9yYW5nZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCSAgICAgICBlbnVtIHBjaV9tbWFwX3N0YXRlIG1tYXBfc3RhdGUsIGludCB3cml0ZV9jb21iaW5lKTsKKworCitzdGF0aWMgaW5saW5lIHZvaWQgcGNpYmlvc19hZGRfcGxhdGZvcm1fZW50cmllcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworfQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisvKiBpbXBsZW1lbnQgdGhlIHBjaV8gRE1BIEFQSSBpbiB0ZXJtcyBvZiB0aGUgZ2VuZXJpYyBkZXZpY2UgZG1hXyBvbmUgKi8KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wY2ktZG1hLWNvbXBhdC5oPgorCisvKiBnZW5lcmljIHBjaSBzdHVmZiAqLworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BjaS5oPgorCisjZW5kaWYgLyogX19pMzg2X1BDSV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3BlcmNwdS5oIGIvaW5jbHVkZS9hc20taTM4Ni9wZXJjcHUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzY0YWZhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9wZXJjcHUuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19BUkNIX0kzODZfUEVSQ1BVX18KKyNkZWZpbmUgX19BUkNIX0kzODZfUEVSQ1BVX18KKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BlcmNwdS5oPgorCisjZW5kaWYgLyogX19BUkNIX0kzODZfUEVSQ1BVX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvcGdhbGxvYy5oIGIvaW5jbHVkZS9hc20taTM4Ni9wZ2FsbG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM4MGMzZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvcGdhbGxvYy5oCkBAIC0wLDAgKzEsNTAgQEAKKyNpZm5kZWYgX0kzODZfUEdBTExPQ19ICisjZGVmaW5lIF9JMzg2X1BHQUxMT0NfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL2ZpeG1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgkJLyogZm9yIHN0cnVjdCBwYWdlICovCisKKyNkZWZpbmUgcG1kX3BvcHVsYXRlX2tlcm5lbChtbSwgcG1kLCBwdGUpIFwKKwkJc2V0X3BtZChwbWQsIF9fcG1kKF9QQUdFX1RBQkxFICsgX19wYShwdGUpKSkKKworI2RlZmluZSBwbWRfcG9wdWxhdGUobW0sIHBtZCwgcHRlKSAJCQkJXAorCXNldF9wbWQocG1kLCBfX3BtZChfUEFHRV9UQUJMRSArCQkJXAorCQkoKHVuc2lnbmVkIGxvbmcgbG9uZylwYWdlX3RvX3BmbihwdGUpIDw8CVwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIFBBR0VfU0hJRlQpKSkKKy8qCisgKiBBbGxvY2F0ZSBhbmQgZnJlZSBwYWdlIHRhYmxlcy4KKyAqLworZXh0ZXJuIHBnZF90ICpwZ2RfYWxsb2Moc3RydWN0IG1tX3N0cnVjdCAqKTsKK2V4dGVybiB2b2lkIHBnZF9mcmVlKHBnZF90ICpwZ2QpOworCitleHRlcm4gcHRlX3QgKnB0ZV9hbGxvY19vbmVfa2VybmVsKHN0cnVjdCBtbV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZyk7CitleHRlcm4gc3RydWN0IHBhZ2UgKnB0ZV9hbGxvY19vbmUoc3RydWN0IG1tX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nKTsKKworc3RhdGljIGlubGluZSB2b2lkIHB0ZV9mcmVlX2tlcm5lbChwdGVfdCAqcHRlKQoreworCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylwdGUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcHRlX2ZyZWUoc3RydWN0IHBhZ2UgKnB0ZSkKK3sKKwlfX2ZyZWVfcGFnZShwdGUpOworfQorCisKKyNkZWZpbmUgX19wdGVfZnJlZV90bGIodGxiLHB0ZSkgdGxiX3JlbW92ZV9wYWdlKCh0bGIpLChwdGUpKQorCisjaWZkZWYgQ09ORklHX1g4Nl9QQUUKKy8qCisgKiBJbiB0aGUgUEFFIGNhc2Ugd2UgZnJlZSB0aGUgcG1kcyBhcyBwYXJ0IG9mIHRoZSBwZ2QuCisgKi8KKyNkZWZpbmUgcG1kX2FsbG9jX29uZShtbSwgYWRkcikJCSh7IEJVRygpOyAoKHBtZF90ICopMik7IH0pCisjZGVmaW5lIHBtZF9mcmVlKHgpCQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBfX3BtZF9mcmVlX3RsYih0bGIseCkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgcHVkX3BvcHVsYXRlKG1tLCBwbWQsIHB0ZSkJQlVHKCkKKyNlbmRpZgorCisjZGVmaW5lIGNoZWNrX3BndF9jYWNoZSgpCWRvIHsgfSB3aGlsZSAoMCkKKworI2VuZGlmIC8qIF9JMzg2X1BHQUxMT0NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9wZ3RhYmxlLTJsZXZlbC1kZWZzLmggYi9pbmNsdWRlL2FzbS1pMzg2L3BndGFibGUtMmxldmVsLWRlZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjUxODA3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9wZ3RhYmxlLTJsZXZlbC1kZWZzLmgKQEAgLTAsMCArMSwxOCBAQAorI2lmbmRlZiBfSTM4Nl9QR1RBQkxFXzJMRVZFTF9ERUZTX0gKKyNkZWZpbmUgX0kzODZfUEdUQUJMRV8yTEVWRUxfREVGU19ICisKKy8qCisgKiB0cmFkaXRpb25hbCBpMzg2IHR3by1sZXZlbCBwYWdpbmcgc3RydWN0dXJlOgorICovCisKKyNkZWZpbmUgUEdESVJfU0hJRlQJMjIKKyNkZWZpbmUgUFRSU19QRVJfUEdECTEwMjQKKworLyoKKyAqIHRoZSBpMzg2IGlzIHR3by1sZXZlbCwgc28gd2UgZG9uJ3QgcmVhbGx5IGhhdmUgYW55CisgKiBQTUQgZGlyZWN0b3J5IHBoeXNpY2FsbHkuCisgKi8KKworI2RlZmluZSBQVFJTX1BFUl9QVEUJMTAyNAorCisjZW5kaWYgLyogX0kzODZfUEdUQUJMRV8yTEVWRUxfREVGU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3BndGFibGUtMmxldmVsLmggYi9pbmNsdWRlL2FzbS1pMzg2L3BndGFibGUtMmxldmVsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmEwN2JkNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvcGd0YWJsZS0ybGV2ZWwuaApAQCAtMCwwICsxLDY5IEBACisjaWZuZGVmIF9JMzg2X1BHVEFCTEVfMkxFVkVMX0gKKyNkZWZpbmUgX0kzODZfUEdUQUJMRV8yTEVWRUxfSAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGd0YWJsZS1ub3BtZC5oPgorCisjZGVmaW5lIHB0ZV9FUlJPUihlKSBcCisJcHJpbnRrKCIlczolZDogYmFkIHB0ZSAlMDhseC5cbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgKGUpLnB0ZV9sb3cpCisjZGVmaW5lIHBnZF9FUlJPUihlKSBcCisJcHJpbnRrKCIlczolZDogYmFkIHBnZCAlMDhseC5cbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgcGdkX3ZhbChlKSkKKworLyoKKyAqIENlcnRhaW4gYXJjaGl0ZWN0dXJlcyBuZWVkIHRvIGRvIHNwZWNpYWwgdGhpbmdzIHdoZW4gUFRFcworICogd2l0aGluIGEgcGFnZSB0YWJsZSBhcmUgZGlyZWN0bHkgbW9kaWZpZWQuICBUaHVzLCB0aGUgZm9sbG93aW5nCisgKiBob29rIGlzIG1hZGUgYXZhaWxhYmxlLgorICovCisjZGVmaW5lIHNldF9wdGUocHRlcHRyLCBwdGV2YWwpICgqKHB0ZXB0cikgPSBwdGV2YWwpCisjZGVmaW5lIHNldF9wdGVfYXQobW0sYWRkcixwdGVwLHB0ZXZhbCkgc2V0X3B0ZShwdGVwLHB0ZXZhbCkKKyNkZWZpbmUgc2V0X3B0ZV9hdG9taWMocHRlcHRyLCBwdGV2YWwpIHNldF9wdGUocHRlcHRyLHB0ZXZhbCkKKyNkZWZpbmUgc2V0X3BtZChwbWRwdHIsIHBtZHZhbCkgKCoocG1kcHRyKSA9IChwbWR2YWwpKQorCisjZGVmaW5lIHB0ZXBfZ2V0X2FuZF9jbGVhcihtbSxhZGRyLHhwKQlfX3B0ZSh4Y2hnKCYoeHApLT5wdGVfbG93LCAwKSkKKyNkZWZpbmUgcHRlX3NhbWUoYSwgYikJCSgoYSkucHRlX2xvdyA9PSAoYikucHRlX2xvdykKKyNkZWZpbmUgcHRlX3BhZ2UoeCkJCXBmbl90b19wYWdlKHB0ZV9wZm4oeCkpCisjZGVmaW5lIHB0ZV9ub25lKHgpCQkoISh4KS5wdGVfbG93KQorI2RlZmluZSBwdGVfcGZuKHgpCQkoKHVuc2lnbmVkIGxvbmcpKCgoeCkucHRlX2xvdyA+PiBQQUdFX1NISUZUKSkpCisjZGVmaW5lIHBmbl9wdGUocGZuLCBwcm90KQlfX3B0ZSgoKHBmbikgPDwgUEFHRV9TSElGVCkgfCBwZ3Byb3RfdmFsKHByb3QpKQorI2RlZmluZSBwZm5fcG1kKHBmbiwgcHJvdCkJX19wbWQoKChwZm4pIDw8IFBBR0VfU0hJRlQpIHwgcGdwcm90X3ZhbChwcm90KSkKKworI2RlZmluZSBwbWRfcGFnZShwbWQpIChwZm5fdG9fcGFnZShwbWRfdmFsKHBtZCkgPj4gUEFHRV9TSElGVCkpCisKKyNkZWZpbmUgcG1kX3BhZ2Vfa2VybmVsKHBtZCkgXAorKCh1bnNpZ25lZCBsb25nKSBfX3ZhKHBtZF92YWwocG1kKSAmIFBBR0VfTUFTSykpCisKKy8qCisgKiBBbGwgcHJlc2VudCB1c2VyIHBhZ2VzIGFyZSB1c2VyLWV4ZWN1dGFibGU6CisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9leGVjKHB0ZV90IHB0ZSkKK3sKKwlyZXR1cm4gcHRlX3VzZXIocHRlKTsKK30KKworLyoKKyAqIEFsbCBwcmVzZW50IHBhZ2VzIGFyZSBrZXJuZWwtZXhlY3V0YWJsZToKKyAqLworc3RhdGljIGlubGluZSBpbnQgcHRlX2V4ZWNfa2VybmVsKHB0ZV90IHB0ZSkKK3sKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIEJpdHMgMCwgNiBhbmQgNyBhcmUgdGFrZW4sIHNwbGl0IHVwIHRoZSAyOSBiaXRzIG9mIG9mZnNldAorICogaW50byB0aGlzIHJhbmdlOgorICovCisjZGVmaW5lIFBURV9GSUxFX01BWF9CSVRTCTI5CisKKyNkZWZpbmUgcHRlX3RvX3Bnb2ZmKHB0ZSkgXAorCSgoKChwdGUpLnB0ZV9sb3cgPj4gMSkgJiAweDFmICkgKyAoKChwdGUpLnB0ZV9sb3cgPj4gOCkgPDwgNSApKQorCisjZGVmaW5lIHBnb2ZmX3RvX3B0ZShvZmYpIFwKKwkoKHB0ZV90KSB7ICgoKG9mZikgJiAweDFmKSA8PCAxKSArICgoKG9mZikgPj4gNSkgPDwgOCkgKyBfUEFHRV9GSUxFIH0pCisKKy8qIEVuY29kZSBhbmQgZGUtY29kZSBhIHN3YXAgZW50cnkgKi8KKyNkZWZpbmUgX19zd3BfdHlwZSh4KQkJCSgoKHgpLnZhbCA+PiAxKSAmIDB4MWYpCisjZGVmaW5lIF9fc3dwX29mZnNldCh4KQkJCSgoeCkudmFsID4+IDgpCisjZGVmaW5lIF9fc3dwX2VudHJ5KHR5cGUsIG9mZnNldCkJKChzd3BfZW50cnlfdCkgeyAoKHR5cGUpIDw8IDEpIHwgKChvZmZzZXQpIDw8IDgpIH0pCisjZGVmaW5lIF9fcHRlX3RvX3N3cF9lbnRyeShwdGUpCQkoKHN3cF9lbnRyeV90KSB7IChwdGUpLnB0ZV9sb3cgfSkKKyNkZWZpbmUgX19zd3BfZW50cnlfdG9fcHRlKHgpCQkoKHB0ZV90KSB7ICh4KS52YWwgfSkKKworI2VuZGlmIC8qIF9JMzg2X1BHVEFCTEVfMkxFVkVMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvcGd0YWJsZS0zbGV2ZWwtZGVmcy5oIGIvaW5jbHVkZS9hc20taTM4Ni9wZ3RhYmxlLTNsZXZlbC1kZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWIzYTFlYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvcGd0YWJsZS0zbGV2ZWwtZGVmcy5oCkBAIC0wLDAgKzEsMjIgQEAKKyNpZm5kZWYgX0kzODZfUEdUQUJMRV8zTEVWRUxfREVGU19ICisjZGVmaW5lIF9JMzg2X1BHVEFCTEVfM0xFVkVMX0RFRlNfSAorCisvKgorICogUEdESVJfU0hJRlQgZGV0ZXJtaW5lcyB3aGF0IGEgdG9wLWxldmVsIHBhZ2UgdGFibGUgZW50cnkgY2FuIG1hcAorICovCisjZGVmaW5lIFBHRElSX1NISUZUCTMwCisjZGVmaW5lIFBUUlNfUEVSX1BHRAk0CisKKy8qCisgKiBQTURfU0hJRlQgZGV0ZXJtaW5lcyB0aGUgc2l6ZSBvZiB0aGUgYXJlYSBhIG1pZGRsZS1sZXZlbAorICogcGFnZSB0YWJsZSBjYW4gbWFwCisgKi8KKyNkZWZpbmUgUE1EX1NISUZUCTIxCisjZGVmaW5lIFBUUlNfUEVSX1BNRAk1MTIKKworLyoKKyAqIGVudHJpZXMgcGVyIHBhZ2UgZGlyZWN0b3J5IGxldmVsCisgKi8KKyNkZWZpbmUgUFRSU19QRVJfUFRFCTUxMgorCisjZW5kaWYgLyogX0kzODZfUEdUQUJMRV8zTEVWRUxfREVGU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3BndGFibGUtM2xldmVsLmggYi9pbmNsdWRlL2FzbS1pMzg2L3BndGFibGUtM2xldmVsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYwOWY5YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvcGd0YWJsZS0zbGV2ZWwuaApAQCAtMCwwICsxLDE2MCBAQAorI2lmbmRlZiBfSTM4Nl9QR1RBQkxFXzNMRVZFTF9ICisjZGVmaW5lIF9JMzg2X1BHVEFCTEVfM0xFVkVMX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BndGFibGUtbm9wdWQuaD4KKworLyoKKyAqIEludGVsIFBoeXNpY2FsIEFkZHJlc3MgRXh0ZW5zaW9uIChQQUUpIE1vZGUgLSB0aHJlZS1sZXZlbCBwYWdlCisgKiB0YWJsZXMgb24gUFBybysgQ1BVcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+CisgKi8KKworI2RlZmluZSBwdGVfRVJST1IoZSkgXAorCXByaW50aygiJXM6JWQ6IGJhZCBwdGUgJXAoJTA4bHglMDhseCkuXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sICYoZSksIChlKS5wdGVfaGlnaCwgKGUpLnB0ZV9sb3cpCisjZGVmaW5lIHBtZF9FUlJPUihlKSBcCisJcHJpbnRrKCIlczolZDogYmFkIHBtZCAlcCglMDE2THgpLlxuIiwgX19GSUxFX18sIF9fTElORV9fLCAmKGUpLCBwbWRfdmFsKGUpKQorI2RlZmluZSBwZ2RfRVJST1IoZSkgXAorCXByaW50aygiJXM6JWQ6IGJhZCBwZ2QgJXAoJTAxNkx4KS5cbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgJihlKSwgcGdkX3ZhbChlKSkKKworI2RlZmluZSBwdWRfbm9uZShwdWQpCQkJCTAKKyNkZWZpbmUgcHVkX2JhZChwdWQpCQkJCTAKKyNkZWZpbmUgcHVkX3ByZXNlbnQocHVkKQkJCTEKKworLyoKKyAqIElzIHRoZSBwdGUgZXhlY3V0YWJsZT8KKyAqLworc3RhdGljIGlubGluZSBpbnQgcHRlX3gocHRlX3QgcHRlKQoreworCXJldHVybiAhKHB0ZV92YWwocHRlKSAmIF9QQUdFX05YKTsKK30KKworLyoKKyAqIEFsbCBwcmVzZW50IHVzZXItcGFnZXMgd2l0aCAhTlggYml0IGFyZSB1c2VyLWV4ZWN1dGFibGU6CisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9leGVjKHB0ZV90IHB0ZSkKK3sKKwlyZXR1cm4gcHRlX3VzZXIocHRlKSAmJiBwdGVfeChwdGUpOworfQorLyoKKyAqIEFsbCBwcmVzZW50IHBhZ2VzIHdpdGggIU5YIGJpdCBhcmUga2VybmVsLWV4ZWN1dGFibGU6CisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9leGVjX2tlcm5lbChwdGVfdCBwdGUpCit7CisJcmV0dXJuIHB0ZV94KHB0ZSk7Cit9CisKKy8qIFJ1bGVzIGZvciB1c2luZyBzZXRfcHRlOiB0aGUgcHRlIGJlaW5nIGFzc2lnbmVkICptdXN0KiBiZQorICogZWl0aGVyIG5vdCBwcmVzZW50IG9yIGluIGEgc3RhdGUgd2hlcmUgdGhlIGhhcmR3YXJlIHdpbGwKKyAqIG5vdCBhdHRlbXB0IHRvIHVwZGF0ZSB0aGUgcHRlLiAgSW4gcGxhY2VzIHdoZXJlIHRoaXMgaXMKKyAqIG5vdCBwb3NzaWJsZSwgdXNlIHB0ZV9nZXRfYW5kX2NsZWFyIHRvIG9idGFpbiB0aGUgb2xkIHB0ZQorICogdmFsdWUgYW5kIHRoZW4gdXNlIHNldF9wdGUgdG8gdXBkYXRlIGl0LiAgLWJlbgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3B0ZShwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKQoreworCXB0ZXAtPnB0ZV9oaWdoID0gcHRlLnB0ZV9oaWdoOworCXNtcF93bWIoKTsKKwlwdGVwLT5wdGVfbG93ID0gcHRlLnB0ZV9sb3c7Cit9CisjZGVmaW5lIHNldF9wdGVfYXQobW0sYWRkcixwdGVwLHB0ZXZhbCkgc2V0X3B0ZShwdGVwLHB0ZXZhbCkKKworI2RlZmluZSBfX0hBVkVfQVJDSF9TRVRfUFRFX0FUT01JQworI2RlZmluZSBzZXRfcHRlX2F0b21pYyhwdGVwdHIscHRldmFsKSBcCisJCXNldF82NGJpdCgodW5zaWduZWQgbG9uZyBsb25nICopKHB0ZXB0cikscHRlX3ZhbChwdGV2YWwpKQorI2RlZmluZSBzZXRfcG1kKHBtZHB0cixwbWR2YWwpIFwKKwkJc2V0XzY0Yml0KCh1bnNpZ25lZCBsb25nIGxvbmcgKikocG1kcHRyKSxwbWRfdmFsKHBtZHZhbCkpCisjZGVmaW5lIHNldF9wdWQocHVkcHRyLHB1ZHZhbCkgXAorCQlzZXRfNjRiaXQoKHVuc2lnbmVkIGxvbmcgbG9uZyAqKShwdWRwdHIpLHB1ZF92YWwocHVkdmFsKSkKKworLyoKKyAqIFBlbnRpdW0tSUkgZXJyYXR1bSBBMTM6IGluIFBBRSBtb2RlIHdlIGV4cGxpY2l0bHkgaGF2ZSB0byBmbHVzaAorICogdGhlIFRMQiB2aWEgY3IzIGlmIHRoZSB0b3AtbGV2ZWwgcGdkIGlzIGNoYW5nZWQuLi4KKyAqIFdlIGRvIG5vdCBsZXQgdGhlIGdlbmVyaWMgY29kZSBmcmVlIGFuZCBjbGVhciBwZ2QgZW50cmllcyBkdWUgdG8KKyAqIHRoaXMgZXJyYXR1bS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHB1ZF9jbGVhciAocHVkX3QgKiBwdWQpIHsgfQorCisjZGVmaW5lIHBtZF9wYWdlKHBtZCkgKHBmbl90b19wYWdlKHBtZF92YWwocG1kKSA+PiBQQUdFX1NISUZUKSkKKworI2RlZmluZSBwbWRfcGFnZV9rZXJuZWwocG1kKSBcCisoKHVuc2lnbmVkIGxvbmcpIF9fdmEocG1kX3ZhbChwbWQpICYgUEFHRV9NQVNLKSkKKworI2RlZmluZSBwdWRfcGFnZShwdWQpIFwKKygoc3RydWN0IHBhZ2UgKikgX192YShwdWRfdmFsKHB1ZCkgJiBQQUdFX01BU0spKQorCisjZGVmaW5lIHB1ZF9wYWdlX2tlcm5lbChwdWQpIFwKKygodW5zaWduZWQgbG9uZykgX192YShwdWRfdmFsKHB1ZCkgJiBQQUdFX01BU0spKQorCisKKy8qIEZpbmQgYW4gZW50cnkgaW4gdGhlIHNlY29uZC1sZXZlbCBwYWdlIHRhYmxlLi4gKi8KKyNkZWZpbmUgcG1kX29mZnNldChwdWQsIGFkZHJlc3MpICgocG1kX3QgKikgcHVkX3BhZ2UoKihwdWQpKSArIFwKKwkJCXBtZF9pbmRleChhZGRyZXNzKSkKKworc3RhdGljIGlubGluZSBwdGVfdCBwdGVwX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApCit7CisJcHRlX3QgcmVzOworCisJLyogeGNoZyBhY3RzIGFzIGEgYmFycmllciBiZWZvcmUgdGhlIHNldHRpbmcgb2YgdGhlIGhpZ2ggYml0cyAqLworCXJlcy5wdGVfbG93ID0geGNoZygmcHRlcC0+cHRlX2xvdywgMCk7CisJcmVzLnB0ZV9oaWdoID0gcHRlcC0+cHRlX2hpZ2g7CisJcHRlcC0+cHRlX2hpZ2ggPSAwOworCisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGlubGluZSBpbnQgcHRlX3NhbWUocHRlX3QgYSwgcHRlX3QgYikKK3sKKwlyZXR1cm4gYS5wdGVfbG93ID09IGIucHRlX2xvdyAmJiBhLnB0ZV9oaWdoID09IGIucHRlX2hpZ2g7Cit9CisKKyNkZWZpbmUgcHRlX3BhZ2UoeCkJcGZuX3RvX3BhZ2UocHRlX3Bmbih4KSkKKworc3RhdGljIGlubGluZSBpbnQgcHRlX25vbmUocHRlX3QgcHRlKQoreworCXJldHVybiAhcHRlLnB0ZV9sb3cgJiYgIXB0ZS5wdGVfaGlnaDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHB0ZV9wZm4ocHRlX3QgcHRlKQoreworCXJldHVybiAocHRlLnB0ZV9sb3cgPj4gUEFHRV9TSElGVCkgfAorCQkocHRlLnB0ZV9oaWdoIDw8ICgzMiAtIFBBR0VfU0hJRlQpKTsKK30KKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3N1cHBvcnRlZF9wdGVfbWFzazsKKworc3RhdGljIGlubGluZSBwdGVfdCBwZm5fcHRlKHVuc2lnbmVkIGxvbmcgcGFnZV9uciwgcGdwcm90X3QgcGdwcm90KQoreworCXB0ZV90IHB0ZTsKKworCXB0ZS5wdGVfaGlnaCA9IChwYWdlX25yID4+ICgzMiAtIFBBR0VfU0hJRlQpKSB8IFwKKwkJCQkJKHBncHJvdF92YWwocGdwcm90KSA+PiAzMik7CisJcHRlLnB0ZV9oaWdoICY9IChfX3N1cHBvcnRlZF9wdGVfbWFzayA+PiAzMik7CisJcHRlLnB0ZV9sb3cgPSAoKHBhZ2VfbnIgPDwgUEFHRV9TSElGVCkgfCBwZ3Byb3RfdmFsKHBncHJvdCkpICYgXAorCQkJCQkJCV9fc3VwcG9ydGVkX3B0ZV9tYXNrOworCXJldHVybiBwdGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgcG1kX3QgcGZuX3BtZCh1bnNpZ25lZCBsb25nIHBhZ2VfbnIsIHBncHJvdF90IHBncHJvdCkKK3sKKwlyZXR1cm4gX19wbWQoKCgodW5zaWduZWQgbG9uZyBsb25nKXBhZ2VfbnIgPDwgUEFHRV9TSElGVCkgfCBcCisJCQlwZ3Byb3RfdmFsKHBncHJvdCkpICYgX19zdXBwb3J0ZWRfcHRlX21hc2spOworfQorCisvKgorICogQml0cyAwLCA2IGFuZCA3IGFyZSB0YWtlbiBpbiB0aGUgbG93IHBhcnQgb2YgdGhlIHB0ZSwKKyAqIHB1dCB0aGUgMzIgYml0cyBvZiBvZmZzZXQgaW50byB0aGUgaGlnaCBwYXJ0LgorICovCisjZGVmaW5lIHB0ZV90b19wZ29mZihwdGUpICgocHRlKS5wdGVfaGlnaCkKKyNkZWZpbmUgcGdvZmZfdG9fcHRlKG9mZikgKChwdGVfdCkgeyBfUEFHRV9GSUxFLCAob2ZmKSB9KQorI2RlZmluZSBQVEVfRklMRV9NQVhfQklUUyAgICAgICAzMgorCisvKiBFbmNvZGUgYW5kIGRlLWNvZGUgYSBzd2FwIGVudHJ5ICovCisjZGVmaW5lIF9fc3dwX3R5cGUoeCkJCQkoKCh4KS52YWwpICYgMHgxZikKKyNkZWZpbmUgX19zd3Bfb2Zmc2V0KHgpCQkJKCh4KS52YWwgPj4gNSkKKyNkZWZpbmUgX19zd3BfZW50cnkodHlwZSwgb2Zmc2V0KQkoKHN3cF9lbnRyeV90KXsodHlwZSkgfCAob2Zmc2V0KSA8PCA1fSkKKyNkZWZpbmUgX19wdGVfdG9fc3dwX2VudHJ5KHB0ZSkJCSgoc3dwX2VudHJ5X3QpeyAocHRlKS5wdGVfaGlnaCB9KQorI2RlZmluZSBfX3N3cF9lbnRyeV90b19wdGUoeCkJCSgocHRlX3QpeyAwLCAoeCkudmFsIH0pCisKKyNkZWZpbmUgX19wbWRfZnJlZV90bGIodGxiLCB4KQkJZG8geyB9IHdoaWxlICgwKQorCisjZW5kaWYgLyogX0kzODZfUEdUQUJMRV8zTEVWRUxfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1pMzg2L3BndGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODhjMmI0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9wZ3RhYmxlLmgKQEAgLTAsMCArMSw0MjIgQEAKKyNpZm5kZWYgX0kzODZfUEdUQUJMRV9ICisjZGVmaW5lIF9JMzg2X1BHVEFCTEVfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKy8qCisgKiBUaGUgTGludXggbWVtb3J5IG1hbmFnZW1lbnQgYXNzdW1lcyBhIHRocmVlLWxldmVsIHBhZ2UgdGFibGUgc2V0dXAuIE9uCisgKiB0aGUgaTM4Niwgd2UgdXNlIHRoYXQsIGJ1dCAiZm9sZCIgdGhlIG1pZCBsZXZlbCBpbnRvIHRoZSB0b3AtbGV2ZWwgcGFnZQorICogdGFibGUsIHNvIHRoYXQgd2UgcGh5c2ljYWxseSBoYXZlIHRoZSBzYW1lIHR3by1sZXZlbCBwYWdlIHRhYmxlIGFzIHRoZQorICogaTM4NiBtbXUgZXhwZWN0cy4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGZ1bmN0aW9ucyBhbmQgZGVmaW5lcyBuZWNlc3NhcnkgdG8gbW9kaWZ5IGFuZCB1c2UKKyAqIHRoZSBpMzg2IHBhZ2UgdGFibGUgdHJlZS4KKyAqLworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL2ZpeG1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKworI2lmbmRlZiBfSTM4Nl9CSVRPUFNfSAorI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorCisvKgorICogWkVST19QQUdFIGlzIGEgZ2xvYmFsIHNoYXJlZCBwYWdlIHRoYXQgaXMgYWx3YXlzIHplcm86IHVzZWQKKyAqIGZvciB6ZXJvLW1hcHBlZCBtZW1vcnkgYXJlYXMgZXRjLi4KKyAqLworI2RlZmluZSBaRVJPX1BBR0UodmFkZHIpICh2aXJ0X3RvX3BhZ2UoZW1wdHlfemVyb19wYWdlKSkKK2V4dGVybiB1bnNpZ25lZCBsb25nIGVtcHR5X3plcm9fcGFnZVsxMDI0XTsKK2V4dGVybiBwZ2RfdCBzd2FwcGVyX3BnX2RpclsxMDI0XTsKK2V4dGVybiBrbWVtX2NhY2hlX3QgKnBnZF9jYWNoZTsKK2V4dGVybiBrbWVtX2NhY2hlX3QgKnBtZF9jYWNoZTsKK2V4dGVybiBzcGlubG9ja190IHBnZF9sb2NrOworZXh0ZXJuIHN0cnVjdCBwYWdlICpwZ2RfbGlzdDsKKwordm9pZCBwbWRfY3Rvcih2b2lkICosIGttZW1fY2FjaGVfdCAqLCB1bnNpZ25lZCBsb25nKTsKK3ZvaWQgcGdkX2N0b3Iodm9pZCAqLCBrbWVtX2NhY2hlX3QgKiwgdW5zaWduZWQgbG9uZyk7Cit2b2lkIHBnZF9kdG9yKHZvaWQgKiwga21lbV9jYWNoZV90ICosIHVuc2lnbmVkIGxvbmcpOwordm9pZCBwZ3RhYmxlX2NhY2hlX2luaXQodm9pZCk7Cit2b2lkIHBhZ2luZ19pbml0KHZvaWQpOworCisvKgorICogVGhlIExpbnV4IHg4NiBwYWdpbmcgYXJjaGl0ZWN0dXJlIGlzICdjb21waWxlLXRpbWUgZHVhbC1tb2RlJywgaXQKKyAqIGltcGxlbWVudHMgYm90aCB0aGUgdHJhZGl0aW9uYWwgMi1sZXZlbCB4ODYgcGFnZSB0YWJsZXMgYW5kIHRoZQorICogbmV3ZXIgMy1sZXZlbCBQQUUtbW9kZSBwYWdlIHRhYmxlcy4KKyAqLworI2lmZGVmIENPTkZJR19YODZfUEFFCisjIGluY2x1ZGUgPGFzbS9wZ3RhYmxlLTNsZXZlbC1kZWZzLmg+CisjIGRlZmluZSBQTURfU0laRQkoMVVMIDw8IFBNRF9TSElGVCkKKyMgZGVmaW5lIFBNRF9NQVNLCSh+KFBNRF9TSVpFLTEpKQorI2Vsc2UKKyMgaW5jbHVkZSA8YXNtL3BndGFibGUtMmxldmVsLWRlZnMuaD4KKyNlbmRpZgorCisjZGVmaW5lIFBHRElSX1NJWkUJKDFVTCA8PCBQR0RJUl9TSElGVCkKKyNkZWZpbmUgUEdESVJfTUFTSwkofihQR0RJUl9TSVpFLTEpKQorCisjZGVmaW5lIFVTRVJfUFRSU19QRVJfUEdECShUQVNLX1NJWkUvUEdESVJfU0laRSkKKyNkZWZpbmUgRklSU1RfVVNFUl9QR0RfTlIJMAorCisjZGVmaW5lIFVTRVJfUEdEX1BUUlMgKFBBR0VfT0ZGU0VUID4+IFBHRElSX1NISUZUKQorI2RlZmluZSBLRVJORUxfUEdEX1BUUlMgKFBUUlNfUEVSX1BHRC1VU0VSX1BHRF9QVFJTKQorCisjZGVmaW5lIFRXT0xFVkVMX1BHRElSX1NISUZUCTIyCisjZGVmaW5lIEJPT1RfVVNFUl9QR0RfUFRSUyAoX19QQUdFX09GRlNFVCA+PiBUV09MRVZFTF9QR0RJUl9TSElGVCkKKyNkZWZpbmUgQk9PVF9LRVJORUxfUEdEX1BUUlMgKDEwMjQtQk9PVF9VU0VSX1BHRF9QVFJTKQorCisvKiBKdXN0IGFueSBhcmJpdHJhcnkgb2Zmc2V0IHRvIHRoZSBzdGFydCBvZiB0aGUgdm1hbGxvYyBWTSBhcmVhOiB0aGUKKyAqIGN1cnJlbnQgOE1CIHZhbHVlIGp1c3QgbWVhbnMgdGhhdCB0aGVyZSB3aWxsIGJlIGEgOE1CICJob2xlIiBhZnRlciB0aGUKKyAqIHBoeXNpY2FsIG1lbW9yeSB1bnRpbCB0aGUga2VybmVsIHZpcnR1YWwgbWVtb3J5IHN0YXJ0cy4gIFRoYXQgbWVhbnMgdGhhdAorICogYW55IG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIHdpbGwgaG9wZWZ1bGx5IGJlIGNhdWdodC4KKyAqIFRoZSB2bWFsbG9jKCkgcm91dGluZXMgbGVhdmVzIGEgaG9sZSBvZiA0a0IgYmV0d2VlbiBlYWNoIHZtYWxsb2NlZAorICogYXJlYSBmb3IgdGhlIHNhbWUgcmVhc29uLiA7KQorICovCisjZGVmaW5lIFZNQUxMT0NfT0ZGU0VUCSg4KjEwMjQqMTAyNCkKKyNkZWZpbmUgVk1BTExPQ19TVEFSVAkoKCh1bnNpZ25lZCBsb25nKSBoaWdoX21lbW9yeSArIHZtYWxsb2NfZWFybHlyZXNlcnZlICsgXAorCQkJMipWTUFMTE9DX09GRlNFVC0xKSAmIH4oVk1BTExPQ19PRkZTRVQtMSkpCisjaWZkZWYgQ09ORklHX0hJR0hNRU0KKyMgZGVmaW5lIFZNQUxMT0NfRU5ECShQS01BUF9CQVNFLTIqUEFHRV9TSVpFKQorI2Vsc2UKKyMgZGVmaW5lIFZNQUxMT0NfRU5ECShGSVhBRERSX1NUQVJULTIqUEFHRV9TSVpFKQorI2VuZGlmCisKKy8qCisgKiBUaGUgNE1CIHBhZ2UgaXMgZ3Vlc3NpbmcuLiAgRGV0YWlsZWQgaW4gdGhlIGluZmFtb3VzICJDaGFwdGVyIEgiCisgKiBvZiB0aGUgUGVudGl1bSBkZXRhaWxzLCBidXQgYXNzdW1pbmcgaW50ZWwgZGlkIHRoZSBzdHJhaWdodGZvcndhcmQKKyAqIHRoaW5nLCB0aGlzIGJpdCBzZXQgaW4gdGhlIHBhZ2UgZGlyZWN0b3J5IGVudHJ5IGp1c3QgbWVhbnMgdGhhdAorICogdGhlIHBhZ2UgZGlyZWN0b3J5IGVudHJ5IHBvaW50cyBkaXJlY3RseSB0byBhIDRNQi1hbGlnbmVkIGJsb2NrIG9mCisgKiBtZW1vcnkuIAorICovCisjZGVmaW5lIF9QQUdFX0JJVF9QUkVTRU5UCTAKKyNkZWZpbmUgX1BBR0VfQklUX1JXCQkxCisjZGVmaW5lIF9QQUdFX0JJVF9VU0VSCQkyCisjZGVmaW5lIF9QQUdFX0JJVF9QV1QJCTMKKyNkZWZpbmUgX1BBR0VfQklUX1BDRAkJNAorI2RlZmluZSBfUEFHRV9CSVRfQUNDRVNTRUQJNQorI2RlZmluZSBfUEFHRV9CSVRfRElSVFkJCTYKKyNkZWZpbmUgX1BBR0VfQklUX1BTRQkJNwkvKiA0IE1CIChvciAyTUIpIHBhZ2UsIFBlbnRpdW0rLCBpZiBwcmVzZW50Li4gKi8KKyNkZWZpbmUgX1BBR0VfQklUX0dMT0JBTAk4CS8qIEdsb2JhbCBUTEIgZW50cnkgUFBybysgKi8KKyNkZWZpbmUgX1BBR0VfQklUX1VOVVNFRDEJOQkvKiBhdmFpbGFibGUgZm9yIHByb2dyYW1tZXIgKi8KKyNkZWZpbmUgX1BBR0VfQklUX1VOVVNFRDIJMTAKKyNkZWZpbmUgX1BBR0VfQklUX1VOVVNFRDMJMTEKKyNkZWZpbmUgX1BBR0VfQklUX05YCQk2MworCisjZGVmaW5lIF9QQUdFX1BSRVNFTlQJMHgwMDEKKyNkZWZpbmUgX1BBR0VfUlcJMHgwMDIKKyNkZWZpbmUgX1BBR0VfVVNFUgkweDAwNAorI2RlZmluZSBfUEFHRV9QV1QJMHgwMDgKKyNkZWZpbmUgX1BBR0VfUENECTB4MDEwCisjZGVmaW5lIF9QQUdFX0FDQ0VTU0VECTB4MDIwCisjZGVmaW5lIF9QQUdFX0RJUlRZCTB4MDQwCisjZGVmaW5lIF9QQUdFX1BTRQkweDA4MAkvKiA0IE1CIChvciAyTUIpIHBhZ2UsIFBlbnRpdW0rLCBpZiBwcmVzZW50Li4gKi8KKyNkZWZpbmUgX1BBR0VfR0xPQkFMCTB4MTAwCS8qIEdsb2JhbCBUTEIgZW50cnkgUFBybysgKi8KKyNkZWZpbmUgX1BBR0VfVU5VU0VEMQkweDIwMAkvKiBhdmFpbGFibGUgZm9yIHByb2dyYW1tZXIgKi8KKyNkZWZpbmUgX1BBR0VfVU5VU0VEMgkweDQwMAorI2RlZmluZSBfUEFHRV9VTlVTRUQzCTB4ODAwCisKKyNkZWZpbmUgX1BBR0VfRklMRQkweDA0MAkvKiBzZXQ6cGFnZWNhY2hlIHVuc2V0OnN3YXAgKi8KKyNkZWZpbmUgX1BBR0VfUFJPVE5PTkUJMHgwODAJLyogSWYgbm90IHByZXNlbnQgKi8KKyNpZmRlZiBDT05GSUdfWDg2X1BBRQorI2RlZmluZSBfUEFHRV9OWAkoMVVMTDw8X1BBR0VfQklUX05YKQorI2Vsc2UKKyNkZWZpbmUgX1BBR0VfTlgJMAorI2VuZGlmCisKKyNkZWZpbmUgX1BBR0VfVEFCTEUJKF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SVyB8IF9QQUdFX1VTRVIgfCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX0RJUlRZKQorI2RlZmluZSBfS0VSTlBHX1RBQkxFCShfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUlcgfCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX0RJUlRZKQorI2RlZmluZSBfUEFHRV9DSEdfTUFTSwkoUFRFX01BU0sgfCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX0RJUlRZKQorCisjZGVmaW5lIFBBR0VfTk9ORSBcCisJX19wZ3Byb3QoX1BBR0VfUFJPVE5PTkUgfCBfUEFHRV9BQ0NFU1NFRCkKKyNkZWZpbmUgUEFHRV9TSEFSRUQgXAorCV9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SVyB8IF9QQUdFX1VTRVIgfCBfUEFHRV9BQ0NFU1NFRCkKKworI2RlZmluZSBQQUdFX1NIQVJFRF9FWEVDIFwKKwlfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUlcgfCBfUEFHRV9VU0VSIHwgX1BBR0VfQUNDRVNTRUQpCisjZGVmaW5lIFBBR0VfQ09QWV9OT0VYRUMgXAorCV9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9VU0VSIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9OWCkKKyNkZWZpbmUgUEFHRV9DT1BZX0VYRUMgXAorCV9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9VU0VSIHwgX1BBR0VfQUNDRVNTRUQpCisjZGVmaW5lIFBBR0VfQ09QWSBcCisJUEFHRV9DT1BZX05PRVhFQworI2RlZmluZSBQQUdFX1JFQURPTkxZIFwKKwlfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfVVNFUiB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfTlgpCisjZGVmaW5lIFBBR0VfUkVBRE9OTFlfRVhFQyBcCisJX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1VTRVIgfCBfUEFHRV9BQ0NFU1NFRCkKKworI2RlZmluZSBfUEFHRV9LRVJORUwgXAorCShfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUlcgfCBfUEFHRV9ESVJUWSB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfTlgpCisjZGVmaW5lIF9QQUdFX0tFUk5FTF9FWEVDIFwKKwkoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JXIHwgX1BBR0VfRElSVFkgfCBfUEFHRV9BQ0NFU1NFRCkKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBfX1BBR0VfS0VSTkVMLCBfX1BBR0VfS0VSTkVMX0VYRUM7CisjZGVmaW5lIF9fUEFHRV9LRVJORUxfUk8JCShfX1BBR0VfS0VSTkVMICYgfl9QQUdFX1JXKQorI2RlZmluZSBfX1BBR0VfS0VSTkVMX05PQ0FDSEUJCShfX1BBR0VfS0VSTkVMIHwgX1BBR0VfUENEKQorI2RlZmluZSBfX1BBR0VfS0VSTkVMX0xBUkdFCQkoX19QQUdFX0tFUk5FTCB8IF9QQUdFX1BTRSkKKyNkZWZpbmUgX19QQUdFX0tFUk5FTF9MQVJHRV9FWEVDCShfX1BBR0VfS0VSTkVMX0VYRUMgfCBfUEFHRV9QU0UpCisKKyNkZWZpbmUgUEFHRV9LRVJORUwJCV9fcGdwcm90KF9fUEFHRV9LRVJORUwpCisjZGVmaW5lIFBBR0VfS0VSTkVMX1JPCQlfX3BncHJvdChfX1BBR0VfS0VSTkVMX1JPKQorI2RlZmluZSBQQUdFX0tFUk5FTF9FWEVDCV9fcGdwcm90KF9fUEFHRV9LRVJORUxfRVhFQykKKyNkZWZpbmUgUEFHRV9LRVJORUxfTk9DQUNIRQlfX3BncHJvdChfX1BBR0VfS0VSTkVMX05PQ0FDSEUpCisjZGVmaW5lIFBBR0VfS0VSTkVMX0xBUkdFCV9fcGdwcm90KF9fUEFHRV9LRVJORUxfTEFSR0UpCisjZGVmaW5lIFBBR0VfS0VSTkVMX0xBUkdFX0VYRUMJX19wZ3Byb3QoX19QQUdFX0tFUk5FTF9MQVJHRV9FWEVDKQorCisvKgorICogVGhlIGkzODYgY2FuJ3QgZG8gcGFnZSBwcm90ZWN0aW9uIGZvciBleGVjdXRlLCBhbmQgY29uc2lkZXJzIHRoYXQKKyAqIHRoZSBzYW1lIGFyZSByZWFkLiBBbHNvLCB3cml0ZSBwZXJtaXNzaW9ucyBpbXBseSByZWFkIHBlcm1pc3Npb25zLgorICogVGhpcyBpcyB0aGUgY2xvc2VzdCB3ZSBjYW4gZ2V0Li4KKyAqLworI2RlZmluZSBfX1AwMDAJUEFHRV9OT05FCisjZGVmaW5lIF9fUDAwMQlQQUdFX1JFQURPTkxZCisjZGVmaW5lIF9fUDAxMAlQQUdFX0NPUFkKKyNkZWZpbmUgX19QMDExCVBBR0VfQ09QWQorI2RlZmluZSBfX1AxMDAJUEFHRV9SRUFET05MWV9FWEVDCisjZGVmaW5lIF9fUDEwMQlQQUdFX1JFQURPTkxZX0VYRUMKKyNkZWZpbmUgX19QMTEwCVBBR0VfQ09QWV9FWEVDCisjZGVmaW5lIF9fUDExMQlQQUdFX0NPUFlfRVhFQworCisjZGVmaW5lIF9fUzAwMAlQQUdFX05PTkUKKyNkZWZpbmUgX19TMDAxCVBBR0VfUkVBRE9OTFkKKyNkZWZpbmUgX19TMDEwCVBBR0VfU0hBUkVECisjZGVmaW5lIF9fUzAxMQlQQUdFX1NIQVJFRAorI2RlZmluZSBfX1MxMDAJUEFHRV9SRUFET05MWV9FWEVDCisjZGVmaW5lIF9fUzEwMQlQQUdFX1JFQURPTkxZX0VYRUMKKyNkZWZpbmUgX19TMTEwCVBBR0VfU0hBUkVEX0VYRUMKKyNkZWZpbmUgX19TMTExCVBBR0VfU0hBUkVEX0VYRUMKKworLyoKKyAqIERlZmluZSB0aGlzIGlmIHRoaW5ncyB3b3JrIGRpZmZlcmVudGx5IG9uIGFuIGkzODYgYW5kIGFuIGk0ODY6CisgKiBpdCB3aWxsIChvbiBhbiBpNDg2KSB3YXJuIGFib3V0IGtlcm5lbCBtZW1vcnkgYWNjZXNzZXMgdGhhdCBhcmUKKyAqIGRvbmUgd2l0aG91dCBhICd2ZXJpZnlfYXJlYShWRVJJRllfV1JJVEUsLi4pJworICovCisjdW5kZWYgVEVTVF9WRVJJRllfQVJFQQorCisvKiBUaGUgYm9vdCBwYWdlIHRhYmxlcyAoYWxsIGNyZWF0ZWQgYXMgYSBzaW5nbGUgYXJyYXkpICovCitleHRlcm4gdW5zaWduZWQgbG9uZyBwZzBbXTsKKworI2RlZmluZSBwdGVfcHJlc2VudCh4KQkoKHgpLnB0ZV9sb3cgJiAoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1BST1ROT05FKSkKKyNkZWZpbmUgcHRlX2NsZWFyKG1tLGFkZHIseHApCWRvIHsgc2V0X3B0ZV9hdChtbSwgYWRkciwgeHAsIF9fcHRlKDApKTsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBwbWRfbm9uZSh4KQkoIXBtZF92YWwoeCkpCisjZGVmaW5lIHBtZF9wcmVzZW50KHgpCShwbWRfdmFsKHgpICYgX1BBR0VfUFJFU0VOVCkKKyNkZWZpbmUgcG1kX2NsZWFyKHhwKQlkbyB7IHNldF9wbWQoeHAsIF9fcG1kKDApKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUJcG1kX2JhZCh4KQkoKHBtZF92YWwoeCkgJiAoflBBR0VfTUFTSyAmIH5fUEFHRV9VU0VSKSkgIT0gX0tFUk5QR19UQUJMRSkKKworCisjZGVmaW5lIHBhZ2VzX3RvX21iKHgpICgoeCkgPj4gKDIwLVBBR0VfU0hJRlQpKQorCisvKgorICogVGhlIGZvbGxvd2luZyBvbmx5IHdvcmsgaWYgcHRlX3ByZXNlbnQoKSBpcyB0cnVlLgorICogVW5kZWZpbmVkIGJlaGF2aW91ciBpZiBub3QuLgorICovCitzdGF0aWMgaW5saW5lIGludCBwdGVfdXNlcihwdGVfdCBwdGUpCQl7IHJldHVybiAocHRlKS5wdGVfbG93ICYgX1BBR0VfVVNFUjsgfQorc3RhdGljIGlubGluZSBpbnQgcHRlX3JlYWQocHRlX3QgcHRlKQkJeyByZXR1cm4gKHB0ZSkucHRlX2xvdyAmIF9QQUdFX1VTRVI7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9kaXJ0eShwdGVfdCBwdGUpCQl7IHJldHVybiAocHRlKS5wdGVfbG93ICYgX1BBR0VfRElSVFk7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV95b3VuZyhwdGVfdCBwdGUpCQl7IHJldHVybiAocHRlKS5wdGVfbG93ICYgX1BBR0VfQUNDRVNTRUQ7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV93cml0ZShwdGVfdCBwdGUpCQl7IHJldHVybiAocHRlKS5wdGVfbG93ICYgX1BBR0VfUlc7IH0KKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgb25seSB3b3JrcyBpZiBwdGVfcHJlc2VudCgpIGlzIG5vdCB0cnVlLgorICovCitzdGF0aWMgaW5saW5lIGludCBwdGVfZmlsZShwdGVfdCBwdGUpCQl7IHJldHVybiAocHRlKS5wdGVfbG93ICYgX1BBR0VfRklMRTsgfQorCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9yZHByb3RlY3QocHRlX3QgcHRlKQl7IChwdGUpLnB0ZV9sb3cgJj0gfl9QQUdFX1VTRVI7IHJldHVybiBwdGU7IH0KK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX2V4cHJvdGVjdChwdGVfdCBwdGUpCXsgKHB0ZSkucHRlX2xvdyAmPSB+X1BBR0VfVVNFUjsgcmV0dXJuIHB0ZTsgfQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtjbGVhbihwdGVfdCBwdGUpCXsgKHB0ZSkucHRlX2xvdyAmPSB+X1BBR0VfRElSVFk7IHJldHVybiBwdGU7IH0KK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rb2xkKHB0ZV90IHB0ZSkJeyAocHRlKS5wdGVfbG93ICY9IH5fUEFHRV9BQ0NFU1NFRDsgcmV0dXJuIHB0ZTsgfQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfd3Jwcm90ZWN0KHB0ZV90IHB0ZSkJeyAocHRlKS5wdGVfbG93ICY9IH5fUEFHRV9SVzsgcmV0dXJuIHB0ZTsgfQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtyZWFkKHB0ZV90IHB0ZSkJeyAocHRlKS5wdGVfbG93IHw9IF9QQUdFX1VTRVI7IHJldHVybiBwdGU7IH0KK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rZXhlYyhwdGVfdCBwdGUpCXsgKHB0ZSkucHRlX2xvdyB8PSBfUEFHRV9VU0VSOyByZXR1cm4gcHRlOyB9CitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta2RpcnR5KHB0ZV90IHB0ZSkJeyAocHRlKS5wdGVfbG93IHw9IF9QQUdFX0RJUlRZOyByZXR1cm4gcHRlOyB9CitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3lvdW5nKHB0ZV90IHB0ZSkJeyAocHRlKS5wdGVfbG93IHw9IF9QQUdFX0FDQ0VTU0VEOyByZXR1cm4gcHRlOyB9CitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSkJeyAocHRlKS5wdGVfbG93IHw9IF9QQUdFX1JXOyByZXR1cm4gcHRlOyB9CisKKyNpZmRlZiBDT05GSUdfWDg2X1BBRQorIyBpbmNsdWRlIDxhc20vcGd0YWJsZS0zbGV2ZWwuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzbS9wZ3RhYmxlLTJsZXZlbC5oPgorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgaW50IHB0ZXBfdGVzdF9hbmRfY2xlYXJfZGlydHkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApCit7CisJaWYgKCFwdGVfZGlydHkoKnB0ZXApKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gdGVzdF9hbmRfY2xlYXJfYml0KF9QQUdFX0JJVF9ESVJUWSwgJnB0ZXAtPnB0ZV9sb3cpOworfQorCitzdGF0aWMgaW5saW5lIGludCBwdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKQoreworCWlmICghcHRlX3lvdW5nKCpwdGVwKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHRlc3RfYW5kX2NsZWFyX2JpdChfUEFHRV9CSVRfQUNDRVNTRUQsICZwdGVwLT5wdGVfbG93KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHB0ZXBfc2V0X3dycHJvdGVjdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCkKK3sKKwljbGVhcl9iaXQoX1BBR0VfQklUX1JXLCAmcHRlcC0+cHRlX2xvdyk7Cit9CisKKy8qCisgKiBNYWNybyB0byBtYXJrIGEgcGFnZSBwcm90ZWN0aW9uIHZhbHVlIGFzICJ1bmNhY2hlYWJsZSIuICBPbiBwcm9jZXNzb3JzIHdoaWNoIGRvIG5vdCBzdXBwb3J0CisgKiBpdCwgdGhpcyBpcyBhIG5vLW9wLgorICovCisjZGVmaW5lIHBncHJvdF9ub25jYWNoZWQocHJvdCkJKChib290X2NwdV9kYXRhLng4NiA+IDMpCQkJCQkgIFwKKwkJCQkgPyAoX19wZ3Byb3QocGdwcm90X3ZhbChwcm90KSB8IF9QQUdFX1BDRCB8IF9QQUdFX1BXVCkpIDogKHByb3QpKQorCisvKgorICogQ29udmVyc2lvbiBmdW5jdGlvbnM6IGNvbnZlcnQgYSBwYWdlIGFuZCBwcm90ZWN0aW9uIHRvIGEgcGFnZSBlbnRyeSwKKyAqIGFuZCBhIHBhZ2UgZW50cnkgYW5kIHBhZ2UgZGlyZWN0b3J5IHRvIHRoZSBwYWdlIHRoZXkgcmVmZXIgdG8uCisgKi8KKworI2RlZmluZSBta19wdGUocGFnZSwgcGdwcm90KQlwZm5fcHRlKHBhZ2VfdG9fcGZuKHBhZ2UpLCAocGdwcm90KSkKKyNkZWZpbmUgbWtfcHRlX2h1Z2UoZW50cnkpICgoZW50cnkpLnB0ZV9sb3cgfD0gX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1BTRSkKKworc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbW9kaWZ5KHB0ZV90IHB0ZSwgcGdwcm90X3QgbmV3cHJvdCkKK3sKKwlwdGUucHRlX2xvdyAmPSBfUEFHRV9DSEdfTUFTSzsKKwlwdGUucHRlX2xvdyB8PSBwZ3Byb3RfdmFsKG5ld3Byb3QpOworI2lmZGVmIENPTkZJR19YODZfUEFFCisJLyoKKwkgKiBDaG9wIG9mZiB0aGUgTlggYml0IChpZiBwcmVzZW50KSwgYW5kIGFkZCB0aGUgTlggcG9ydGlvbiBvZgorCSAqIHRoZSBuZXdwcm90IChpZiBwcmVzZW50KToKKwkgKi8KKwlwdGUucHRlX2hpZ2ggJj0gfigxIDw8IChfUEFHRV9CSVRfTlggLSAzMikpOworCXB0ZS5wdGVfaGlnaCB8PSAocGdwcm90X3ZhbChuZXdwcm90KSA+PiAzMikgJiBcCisJCQkJCShfX3N1cHBvcnRlZF9wdGVfbWFzayA+PiAzMik7CisjZW5kaWYKKwlyZXR1cm4gcHRlOworfQorCisjZGVmaW5lIHBhZ2VfcHRlKHBhZ2UpIHBhZ2VfcHRlX3Byb3QocGFnZSwgX19wZ3Byb3QoMCkpCisKKyNkZWZpbmUgcG1kX2xhcmdlKHBtZCkgXAorKChwbWRfdmFsKHBtZCkgJiAoX1BBR0VfUFNFfF9QQUdFX1BSRVNFTlQpKSA9PSAoX1BBR0VfUFNFfF9QQUdFX1BSRVNFTlQpKQorCisvKgorICogdGhlIHBnZCBwYWdlIGNhbiBiZSB0aG91Z2h0IG9mIGFuIGFycmF5IGxpa2UgdGhpczogcGdkX3RbUFRSU19QRVJfUEdEXQorICoKKyAqIHRoaXMgbWFjcm8gcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGVudHJ5IGluIHRoZSBwZ2QgcGFnZSB3aGljaCB3b3VsZAorICogY29udHJvbCB0aGUgZ2l2ZW4gdmlydHVhbCBhZGRyZXNzCisgKi8KKyNkZWZpbmUgcGdkX2luZGV4KGFkZHJlc3MpICgoKGFkZHJlc3MpID4+IFBHRElSX1NISUZUKSAmIChQVFJTX1BFUl9QR0QtMSkpCisjZGVmaW5lIHBnZF9pbmRleF9rKGFkZHIpIHBnZF9pbmRleChhZGRyKQorCisvKgorICogcGdkX29mZnNldCgpIHJldHVybnMgYSAocGdkX3QgKikKKyAqIHBnZF9pbmRleCgpIGlzIHVzZWQgZ2V0IHRoZSBvZmZzZXQgaW50byB0aGUgcGdkIHBhZ2UncyBhcnJheSBvZiBwZ2RfdCdzOworICovCisjZGVmaW5lIHBnZF9vZmZzZXQobW0sIGFkZHJlc3MpICgobW0pLT5wZ2QrcGdkX2luZGV4KGFkZHJlc3MpKQorCisvKgorICogYSBzaG9ydGN1dCB3aGljaCBpbXBsaWVzIHRoZSB1c2Ugb2YgdGhlIGtlcm5lbCdzIHBnZCwgaW5zdGVhZAorICogb2YgYSBwcm9jZXNzJ3MKKyAqLworI2RlZmluZSBwZ2Rfb2Zmc2V0X2soYWRkcmVzcykgcGdkX29mZnNldCgmaW5pdF9tbSwgYWRkcmVzcykKKworLyoKKyAqIHRoZSBwbWQgcGFnZSBjYW4gYmUgdGhvdWdodCBvZiBhbiBhcnJheSBsaWtlIHRoaXM6IHBtZF90W1BUUlNfUEVSX1BNRF0KKyAqCisgKiB0aGlzIG1hY3JvIHJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBlbnRyeSBpbiB0aGUgcG1kIHBhZ2Ugd2hpY2ggd291bGQKKyAqIGNvbnRyb2wgdGhlIGdpdmVuIHZpcnR1YWwgYWRkcmVzcworICovCisjZGVmaW5lIHBtZF9pbmRleChhZGRyZXNzKSBcCisJCSgoKGFkZHJlc3MpID4+IFBNRF9TSElGVCkgJiAoUFRSU19QRVJfUE1ELTEpKQorCisvKgorICogdGhlIHB0ZSBwYWdlIGNhbiBiZSB0aG91Z2h0IG9mIGFuIGFycmF5IGxpa2UgdGhpczogcHRlX3RbUFRSU19QRVJfUFRFXQorICoKKyAqIHRoaXMgbWFjcm8gcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGVudHJ5IGluIHRoZSBwdGUgcGFnZSB3aGljaCB3b3VsZAorICogY29udHJvbCB0aGUgZ2l2ZW4gdmlydHVhbCBhZGRyZXNzCisgKi8KKyNkZWZpbmUgcHRlX2luZGV4KGFkZHJlc3MpIFwKKwkJKCgoYWRkcmVzcykgPj4gUEFHRV9TSElGVCkgJiAoUFRSU19QRVJfUFRFIC0gMSkpCisjZGVmaW5lIHB0ZV9vZmZzZXRfa2VybmVsKGRpciwgYWRkcmVzcykgXAorCSgocHRlX3QgKikgcG1kX3BhZ2Vfa2VybmVsKCooZGlyKSkgKyAgcHRlX2luZGV4KGFkZHJlc3MpKQorCisvKgorICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUga2VybmVsIHBhZ2V0YWJsZSBlbnRyeSBjb250cm9sbGluZworICogdGhlIHZpcnR1YWwgYWRkcmVzcyAnYWRkcmVzcycuIE5VTEwgbWVhbnMgbm8gcGFnZXRhYmxlIGVudHJ5IHByZXNlbnQuCisgKiBOT1RFOiB0aGUgcmV0dXJuIHR5cGUgaXMgcHRlX3QgYnV0IGlmIHRoZSBwbWQgaXMgUFNFIHRoZW4gd2UgcmV0dXJuIGl0CisgKiBhcyBhIHB0ZSB0b28uCisgKi8KK2V4dGVybiBwdGVfdCAqbG9va3VwX2FkZHJlc3ModW5zaWduZWQgbG9uZyBhZGRyZXNzKTsKKworLyoKKyAqIE1ha2UgYSBnaXZlbiBrZXJuZWwgdGV4dCBwYWdlIGV4ZWN1dGFibGUvbm9uLWV4ZWN1dGFibGUuCisgKiBSZXR1cm5zIHRoZSBwcmV2aW91cyBleGVjdXRhYmlsaXR5IHNldHRpbmcgb2YgdGhhdCBwYWdlICh3aGljaAorICogaXMgdXNlZCB0byByZXN0b3JlIHRoZSBwcmV2aW91cyBzdGF0ZSkuIFVzZWQgYnkgdGhlIFNNUCBib290dXAgY29kZS4KKyAqIE5PVEU6IHRoaXMgaXMgYW4gX19pbml0IGZ1bmN0aW9uIGZvciBzZWN1cml0eSByZWFzb25zLgorICovCisjaWZkZWYgQ09ORklHX1g4Nl9QQUUKKyBleHRlcm4gaW50IHNldF9rZXJuZWxfZXhlYyh1bnNpZ25lZCBsb25nIHZhZGRyLCBpbnQgZW5hYmxlKTsKKyNlbHNlCisgc3RhdGljIGlubGluZSBpbnQgc2V0X2tlcm5lbF9leGVjKHVuc2lnbmVkIGxvbmcgdmFkZHIsIGludCBlbmFibGUpIHsgcmV0dXJuIDA7fQorI2VuZGlmCisKK2V4dGVybiB2b2lkIG5vZXhlY19zZXR1cChjb25zdCBjaGFyICpzdHIpOworCisjaWYgZGVmaW5lZChDT05GSUdfSElHSFBURSkKKyNkZWZpbmUgcHRlX29mZnNldF9tYXAoZGlyLCBhZGRyZXNzKSBcCisJKChwdGVfdCAqKWttYXBfYXRvbWljKHBtZF9wYWdlKCooZGlyKSksS01fUFRFMCkgKyBwdGVfaW5kZXgoYWRkcmVzcykpCisjZGVmaW5lIHB0ZV9vZmZzZXRfbWFwX25lc3RlZChkaXIsIGFkZHJlc3MpIFwKKwkoKHB0ZV90ICopa21hcF9hdG9taWMocG1kX3BhZ2UoKihkaXIpKSxLTV9QVEUxKSArIHB0ZV9pbmRleChhZGRyZXNzKSkKKyNkZWZpbmUgcHRlX3VubWFwKHB0ZSkga3VubWFwX2F0b21pYyhwdGUsIEtNX1BURTApCisjZGVmaW5lIHB0ZV91bm1hcF9uZXN0ZWQocHRlKSBrdW5tYXBfYXRvbWljKHB0ZSwgS01fUFRFMSkKKyNlbHNlCisjZGVmaW5lIHB0ZV9vZmZzZXRfbWFwKGRpciwgYWRkcmVzcykgXAorCSgocHRlX3QgKilwYWdlX2FkZHJlc3MocG1kX3BhZ2UoKihkaXIpKSkgKyBwdGVfaW5kZXgoYWRkcmVzcykpCisjZGVmaW5lIHB0ZV9vZmZzZXRfbWFwX25lc3RlZChkaXIsIGFkZHJlc3MpIHB0ZV9vZmZzZXRfbWFwKGRpciwgYWRkcmVzcykKKyNkZWZpbmUgcHRlX3VubWFwKHB0ZSkgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBwdGVfdW5tYXBfbmVzdGVkKHB0ZSkgZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKKy8qCisgKiBUaGUgaTM4NiBkb2Vzbid0IGhhdmUgYW55IGV4dGVybmFsIE1NVSBpbmZvOiB0aGUga2VybmVsIHBhZ2UKKyAqIHRhYmxlcyBjb250YWluIGFsbCB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uLgorICoKKyAqIEFsc28sIHdlIG9ubHkgdXBkYXRlIHRoZSBkaXJ0eS9hY2Nlc3NlZCBzdGF0ZSBpZiB3ZSBzZXQKKyAqIHRoZSBkaXJ0eSBiaXQgYnkgaGFuZCBpbiB0aGUga2VybmVsLCBzaW5jZSB0aGUgaGFyZHdhcmUKKyAqIHdpbGwgZG8gdGhlIGFjY2Vzc2VkIGJpdCBmb3IgdXMsIGFuZCB3ZSBkb24ndCB3YW50IHRvCisgKiByYWNlIHdpdGggb3RoZXIgQ1BVJ3MgdGhhdCBtaWdodCBiZSB1cGRhdGluZyB0aGUgZGlydHkKKyAqIGJpdCBhdCB0aGUgc2FtZSB0aW1lLgorICovCisjZGVmaW5lIHVwZGF0ZV9tbXVfY2FjaGUodm1hLGFkZHJlc3MscHRlKSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lICBfX0hBVkVfQVJDSF9QVEVQX1NFVF9BQ0NFU1NfRkxBR1MKKyNkZWZpbmUgcHRlcF9zZXRfYWNjZXNzX2ZsYWdzKF9fdm1hLCBfX2FkZHJlc3MsIF9fcHRlcCwgX19lbnRyeSwgX19kaXJ0eSkgXAorCWRvIHsJCQkJCQkJCSAgXAorCQlpZiAoX19kaXJ0eSkgewkJCQkJCSAgXAorCQkJKF9fcHRlcCktPnB0ZV9sb3cgPSAoX19lbnRyeSkucHRlX2xvdzsJICAJICBcCisJCQlmbHVzaF90bGJfcGFnZShfX3ZtYSwgX19hZGRyZXNzKTsJCSAgXAorCQl9CQkJCQkJCSAgXAorCX0gd2hpbGUgKDApCisKKyNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCisKKyNpZm5kZWYgQ09ORklHX0RJU0NPTlRJR01FTQorI2RlZmluZSBrZXJuX2FkZHJfdmFsaWQoYWRkcikJKDEpCisjZW5kaWYgLyogIUNPTkZJR19ESVNDT05USUdNRU0gKi8KKworI2RlZmluZSBpb19yZW1hcF9wYWdlX3JhbmdlKHZtYSwgdmFkZHIsIHBhZGRyLCBzaXplLCBwcm90KQkJXAorCQlyZW1hcF9wZm5fcmFuZ2Uodm1hLCB2YWRkciwgKHBhZGRyKSA+PiBQQUdFX1NISUZULCBzaXplLCBwcm90KQorCisjZGVmaW5lIGlvX3JlbWFwX3Bmbl9yYW5nZSh2bWEsIHZhZGRyLCBwZm4sIHNpemUsIHByb3QpCQlcCisJCXJlbWFwX3Bmbl9yYW5nZSh2bWEsIHZhZGRyLCBwZm4sIHNpemUsIHByb3QpCisKKyNkZWZpbmUgTUtfSU9TUEFDRV9QRk4oc3BhY2UsIHBmbikJKHBmbikKKyNkZWZpbmUgR0VUX0lPU1BBQ0UocGZuKQkJMAorI2RlZmluZSBHRVRfUEZOKHBmbikJCQkocGZuKQorCisjZGVmaW5lIF9fSEFWRV9BUkNIX1BURVBfVEVTVF9BTkRfQ0xFQVJfWU9VTkcKKyNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFUF9URVNUX0FORF9DTEVBUl9ESVJUWQorI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX0dFVF9BTkRfQ0xFQVIKKyNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFUF9TRVRfV1JQUk9URUNUCisjZGVmaW5lIF9fSEFWRV9BUkNIX1BURV9TQU1FCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGd0YWJsZS5oPgorCisjZW5kaWYgLyogX0kzODZfUEdUQUJMRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3BvbGwuaCBiL2luY2x1ZGUvYXNtLWkzODYvcG9sbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlY2M4MGEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3BvbGwuaApAQCAtMCwwICsxLDI2IEBACisjaWZuZGVmIF9faTM4Nl9QT0xMX0gKKyNkZWZpbmUgX19pMzg2X1BPTExfSAorCisvKiBUaGVzZSBhcmUgc3BlY2lmaWVkIGJ5IGlCQ1MyICovCisjZGVmaW5lIFBPTExJTgkJMHgwMDAxCisjZGVmaW5lIFBPTExQUkkJCTB4MDAwMgorI2RlZmluZSBQT0xMT1VUCQkweDAwMDQKKyNkZWZpbmUgUE9MTEVSUgkJMHgwMDA4CisjZGVmaW5lIFBPTExIVVAJCTB4MDAxMAorI2RlZmluZSBQT0xMTlZBTAkweDAwMjAKKworLyogVGhlIHJlc3Qgc2VlbSB0byBiZSBtb3JlLW9yLWxlc3Mgbm9uc3RhbmRhcmQuIENoZWNrIHRoZW0hICovCisjZGVmaW5lIFBPTExSRE5PUk0JMHgwMDQwCisjZGVmaW5lIFBPTExSREJBTkQJMHgwMDgwCisjZGVmaW5lIFBPTExXUk5PUk0JMHgwMTAwCisjZGVmaW5lIFBPTExXUkJBTkQJMHgwMjAwCisjZGVmaW5lIFBPTExNU0cJCTB4MDQwMAorI2RlZmluZSBQT0xMUkVNT1ZFCTB4MTAwMAorCitzdHJ1Y3QgcG9sbGZkIHsKKwlpbnQgZmQ7CisJc2hvcnQgZXZlbnRzOworCXNob3J0IHJldmVudHM7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvcG9zaXhfdHlwZXMuaCBiL2luY2x1ZGUvYXNtLWkzODYvcG9zaXhfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTQ3ZWQwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9wb3NpeF90eXBlcy5oCkBAIC0wLDAgKzEsODIgQEAKKyNpZm5kZWYgX19BUkNIX0kzODZfUE9TSVhfVFlQRVNfSAorI2RlZmluZSBfX0FSQ0hfSTM4Nl9QT1NJWF9UWVBFU19ICisKKy8qCisgKiBUaGlzIGZpbGUgaXMgZ2VuZXJhbGx5IHVzZWQgYnkgdXNlci1sZXZlbCBzb2Z0d2FyZSwgc28geW91IG5lZWQgdG8KKyAqIGJlIGEgbGl0dGxlIGNhcmVmdWwgYWJvdXQgbmFtZXNwYWNlIHBvbGx1dGlvbiBldGMuICBBbHNvLCB3ZSBjYW5ub3QKKyAqIGFzc3VtZSBHQ0MgaXMgYmVpbmcgdXNlZC4KKyAqLworCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcJX19rZXJuZWxfaW5vX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CV9fa2VybmVsX21vZGVfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJX19rZXJuZWxfbmxpbmtfdDsKK3R5cGVkZWYgbG9uZwkJX19rZXJuZWxfb2ZmX3Q7Cit0eXBlZGVmIGludAkJX19rZXJuZWxfcGlkX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CV9fa2VybmVsX2lwY19waWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJX19rZXJuZWxfdWlkX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CV9fa2VybmVsX2dpZF90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQJX19rZXJuZWxfc2l6ZV90OwordHlwZWRlZiBpbnQJCV9fa2VybmVsX3NzaXplX3Q7Cit0eXBlZGVmIGludAkJX19rZXJuZWxfcHRyZGlmZl90OwordHlwZWRlZiBsb25nCQlfX2tlcm5lbF90aW1lX3Q7Cit0eXBlZGVmIGxvbmcJCV9fa2VybmVsX3N1c2Vjb25kc190OwordHlwZWRlZiBsb25nCQlfX2tlcm5lbF9jbG9ja190OwordHlwZWRlZiBpbnQJCV9fa2VybmVsX3RpbWVyX3Q7Cit0eXBlZGVmIGludAkJX19rZXJuZWxfY2xvY2tpZF90OwordHlwZWRlZiBpbnQJCV9fa2VybmVsX2RhZGRyX3Q7Cit0eXBlZGVmIGNoYXIgKgkJX19rZXJuZWxfY2FkZHJfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJX19rZXJuZWxfdWlkMTZfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJX19rZXJuZWxfZ2lkMTZfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50CV9fa2VybmVsX3VpZDMyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludAlfX2tlcm5lbF9naWQzMl90OworCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CV9fa2VybmVsX29sZF91aWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJX19rZXJuZWxfb2xkX2dpZF90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAlfX2tlcm5lbF9vbGRfZGV2X3Q7CisKKyNpZmRlZiBfX0dOVUNfXwordHlwZWRlZiBsb25nIGxvbmcJX19rZXJuZWxfbG9mZl90OworI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IHsKKyNpZiBkZWZpbmVkKF9fS0VSTkVMX18pIHx8IGRlZmluZWQoX19VU0VfQUxMKQorCWludAl2YWxbMl07CisjZWxzZSAvKiAhZGVmaW5lZChfX0tFUk5FTF9fKSAmJiAhZGVmaW5lZChfX1VTRV9BTEwpICovCisJaW50CV9fdmFsWzJdOworI2VuZGlmIC8qICFkZWZpbmVkKF9fS0VSTkVMX18pICYmICFkZWZpbmVkKF9fVVNFX0FMTCkgKi8KK30gX19rZXJuZWxfZnNpZF90OworCisjaWYgZGVmaW5lZChfX0tFUk5FTF9fKSB8fCAhZGVmaW5lZChfX0dMSUJDX18pIHx8IChfX0dMSUJDX18gPCAyKQorCisjdW5kZWYJX19GRF9TRVQKKyNkZWZpbmUgX19GRF9TRVQoZmQsZmRzZXRwKSBcCisJCV9fYXNtX18gX192b2xhdGlsZV9fKCJidHNsICUxLCUwIjogXAorCQkJIj1tIiAoKihfX2tlcm5lbF9mZF9zZXQgKikgKGZkc2V0cCkpOiJyIiAoKGludCkgKGZkKSkpCisKKyN1bmRlZglfX0ZEX0NMUgorI2RlZmluZSBfX0ZEX0NMUihmZCxmZHNldHApIFwKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oImJ0cmwgJTEsJTAiOiBcCisJCQkiPW0iICgqKF9fa2VybmVsX2ZkX3NldCAqKSAoZmRzZXRwKSk6InIiICgoaW50KSAoZmQpKSkKKworI3VuZGVmCV9fRkRfSVNTRVQKKyNkZWZpbmUgX19GRF9JU1NFVChmZCxmZHNldHApIChfX2V4dGVuc2lvbl9fICh7IFwKKwkJdW5zaWduZWQgY2hhciBfX3Jlc3VsdDsgXAorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiYnRsICUxLCUyIDsgc2V0YiAlMCIgXAorCQkJOiI9cSIgKF9fcmVzdWx0KSA6InIiICgoaW50KSAoZmQpKSwgXAorCQkJIm0iICgqKF9fa2VybmVsX2ZkX3NldCAqKSAoZmRzZXRwKSkpOyBcCisJCV9fcmVzdWx0OyB9KSkKKworI3VuZGVmCV9fRkRfWkVSTworI2RlZmluZSBfX0ZEX1pFUk8oZmRzZXRwKSBcCitkbyB7IFwKKwlpbnQgX19kMCwgX19kMTsgXAorCV9fYXNtX18gX192b2xhdGlsZV9fKCJjbGQgOyByZXAgOyBzdG9zbCIgXAorCQkJOiI9bSIgKCooX19rZXJuZWxfZmRfc2V0ICopIChmZHNldHApKSwgXAorCQkJICAiPSZjIiAoX19kMCksICI9JkQiIChfX2QxKSBcCisJCQk6ImEiICgwKSwgIjEiIChfX0ZEU0VUX0xPTkdTKSwgXAorCQkJIjIiICgoX19rZXJuZWxfZmRfc2V0ICopIChmZHNldHApKSA6ICJtZW1vcnkiKTsgXAorfSB3aGlsZSAoMCkKKworI2VuZGlmIC8qIGRlZmluZWQoX19LRVJORUxfXykgfHwgIWRlZmluZWQoX19HTElCQ19fKSB8fCAoX19HTElCQ19fIDwgMikgKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3Byb2Nlc3Nvci5oIGIvaW5jbHVkZS9hc20taTM4Ni9wcm9jZXNzb3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTI1OGIwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9wcm9jZXNzb3IuaApAQCAtMCwwICsxLDY4MiBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWkzODYvcHJvY2Vzc29yLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTQgTGludXMgVG9ydmFsZHMKKyAqLworCisjaWZuZGVmIF9fQVNNX0kzODZfUFJPQ0VTU09SX0gKKyNkZWZpbmUgX19BU01fSTM4Nl9QUk9DRVNTT1JfSAorCisjaW5jbHVkZSA8YXNtL3ZtODYuaD4KKyNpbmNsdWRlIDxhc20vbWF0aF9lbXUuaD4KKyNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3NpZ2NvbnRleHQuaD4KKyNpbmNsdWRlIDxhc20vY3B1ZmVhdHVyZS5oPgorI2luY2x1ZGUgPGFzbS9tc3IuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisjaW5jbHVkZSA8YXNtL3BlcmNwdS5oPgorCisvKiBmbGFnIGZvciBkaXNhYmxpbmcgdGhlIHRzYyAqLworZXh0ZXJuIGludCB0c2NfZGlzYWJsZTsKKworc3RydWN0IGRlc2Nfc3RydWN0IHsKKwl1bnNpZ25lZCBsb25nIGEsYjsKK307CisKKyNkZWZpbmUgZGVzY19lbXB0eShkZXNjKSBcCisJCSghKChkZXNjKS0+YSArIChkZXNjKS0+YikpCisKKyNkZWZpbmUgZGVzY19lcXVhbChkZXNjMSwgZGVzYzIpIFwKKwkJKCgoZGVzYzEpLT5hID09IChkZXNjMiktPmEpICYmICgoZGVzYzEpLT5iID09IChkZXNjMiktPmIpKQorLyoKKyAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgbWFjcm8gdGhhdCByZXR1cm5zIGN1cnJlbnQKKyAqIGluc3RydWN0aW9uIHBvaW50ZXIgKCJwcm9ncmFtIGNvdW50ZXIiKS4KKyAqLworI2RlZmluZSBjdXJyZW50X3RleHRfYWRkcigpICh7IHZvaWQgKnBjOyBfX2FzbV9fKCJtb3ZsICQxZiwlMFxuMToiOiI9ZyIgKHBjKSk7IHBjOyB9KQorCisvKgorICogIENQVSB0eXBlIGFuZCBoYXJkd2FyZSBidWcgZmxhZ3MuIEtlcHQgc2VwYXJhdGVseSBmb3IgZWFjaCBDUFUuCisgKiAgTWVtYmVycyBvZiB0aGlzIHN0cnVjdHVyZSBhcmUgcmVmZXJlbmNlZCBpbiBoZWFkLlMsIHNvIHRoaW5rIHR3aWNlCisgKiAgYmVmb3JlIHRvdWNoaW5nIHRoZW0uIFttal0KKyAqLworCitzdHJ1Y3QgY3B1aW5mb194ODYgeworCV9fdTgJeDg2OwkJLyogQ1BVIGZhbWlseSAqLworCV9fdTgJeDg2X3ZlbmRvcjsJLyogQ1BVIHZlbmRvciAqLworCV9fdTgJeDg2X21vZGVsOworCV9fdTgJeDg2X21hc2s7CisJY2hhcgl3cF93b3Jrc19vazsJLyogSXQgZG9lc24ndCBvbiAzODYncyAqLworCWNoYXIJaGx0X3dvcmtzX29rOwkvKiBQcm9ibGVtcyBvbiBzb21lIDQ4NkR4NCdzIGFuZCBvbGQgMzg2J3MgKi8KKwljaGFyCWhhcmRfbWF0aDsKKwljaGFyCXJmdTsKKyAgICAgICAJaW50CWNwdWlkX2xldmVsOwkvKiBNYXhpbXVtIHN1cHBvcnRlZCBDUFVJRCBsZXZlbCwgLTE9bm8gQ1BVSUQgKi8KKwl1bnNpZ25lZCBsb25nCXg4Nl9jYXBhYmlsaXR5W05DQVBJTlRTXTsKKwljaGFyCXg4Nl92ZW5kb3JfaWRbMTZdOworCWNoYXIJeDg2X21vZGVsX2lkWzY0XTsKKwlpbnQgCXg4Nl9jYWNoZV9zaXplOyAgLyogaW4gS0IgLSB2YWxpZCBmb3IgQ1BVUyB3aGljaCBzdXBwb3J0IHRoaXMKKwkJCQkgICAgY2FsbCAgKi8KKwlpbnQgCXg4Nl9jYWNoZV9hbGlnbm1lbnQ7CS8qIEluIGJ5dGVzICovCisJaW50CWZkaXZfYnVnOworCWludAlmMDBmX2J1ZzsKKwlpbnQJY29tYV9idWc7CisJdW5zaWduZWQgbG9uZyBsb29wc19wZXJfamlmZnk7CisJdW5zaWduZWQgY2hhciB4ODZfbnVtX2NvcmVzOworfSBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyhTTVBfQ0FDSEVfQllURVMpKSk7CisKKyNkZWZpbmUgWDg2X1ZFTkRPUl9JTlRFTCAwCisjZGVmaW5lIFg4Nl9WRU5ET1JfQ1lSSVggMQorI2RlZmluZSBYODZfVkVORE9SX0FNRCAyCisjZGVmaW5lIFg4Nl9WRU5ET1JfVU1DIDMKKyNkZWZpbmUgWDg2X1ZFTkRPUl9ORVhHRU4gNAorI2RlZmluZSBYODZfVkVORE9SX0NFTlRBVVIgNQorI2RlZmluZSBYODZfVkVORE9SX1JJU0UgNgorI2RlZmluZSBYODZfVkVORE9SX1RSQU5TTUVUQSA3CisjZGVmaW5lIFg4Nl9WRU5ET1JfTlNDIDgKKyNkZWZpbmUgWDg2X1ZFTkRPUl9OVU0gOQorI2RlZmluZSBYODZfVkVORE9SX1VOS05PV04gMHhmZgorCisvKgorICogY2FwYWJpbGl0aWVzIG9mIENQVXMKKyAqLworCitleHRlcm4gc3RydWN0IGNwdWluZm9feDg2IGJvb3RfY3B1X2RhdGE7CitleHRlcm4gc3RydWN0IGNwdWluZm9feDg2IG5ld19jcHVfZGF0YTsKK2V4dGVybiBzdHJ1Y3QgdHNzX3N0cnVjdCBkb3VibGVmYXVsdF90c3M7CitERUNMQVJFX1BFUl9DUFUoc3RydWN0IHRzc19zdHJ1Y3QsIGluaXRfdHNzKTsKKworI2lmZGVmIENPTkZJR19TTVAKK2V4dGVybiBzdHJ1Y3QgY3B1aW5mb194ODYgY3B1X2RhdGFbXTsKKyNkZWZpbmUgY3VycmVudF9jcHVfZGF0YSBjcHVfZGF0YVtzbXBfcHJvY2Vzc29yX2lkKCldCisjZWxzZQorI2RlZmluZSBjcHVfZGF0YSAoJmJvb3RfY3B1X2RhdGEpCisjZGVmaW5lIGN1cnJlbnRfY3B1X2RhdGEgYm9vdF9jcHVfZGF0YQorI2VuZGlmCisKK2V4dGVybglpbnQgcGh5c19wcm9jX2lkW05SX0NQVVNdOworZXh0ZXJuIGNoYXIgaWdub3JlX2ZwdV9pcnE7CisKK2V4dGVybiB2b2lkIGlkZW50aWZ5X2NwdShzdHJ1Y3QgY3B1aW5mb194ODYgKik7CitleHRlcm4gdm9pZCBwcmludF9jcHVfaW5mbyhzdHJ1Y3QgY3B1aW5mb194ODYgKik7CitleHRlcm4gdW5zaWduZWQgaW50IGluaXRfaW50ZWxfY2FjaGVpbmZvKHN0cnVjdCBjcHVpbmZvX3g4NiAqYyk7CisKKyNpZmRlZiBDT05GSUdfWDg2X0hUCitleHRlcm4gdm9pZCBkZXRlY3RfaHQoc3RydWN0IGNwdWluZm9feDg2ICpjKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgZGV0ZWN0X2h0KHN0cnVjdCBjcHVpbmZvX3g4NiAqYykge30KKyNlbmRpZgorCisvKgorICogRUZMQUdTIGJpdHMKKyAqLworI2RlZmluZSBYODZfRUZMQUdTX0NGCTB4MDAwMDAwMDEgLyogQ2FycnkgRmxhZyAqLworI2RlZmluZSBYODZfRUZMQUdTX1BGCTB4MDAwMDAwMDQgLyogUGFyaXR5IEZsYWcgKi8KKyNkZWZpbmUgWDg2X0VGTEFHU19BRgkweDAwMDAwMDEwIC8qIEF1eGlsbGFyeSBjYXJyeSBGbGFnICovCisjZGVmaW5lIFg4Nl9FRkxBR1NfWkYJMHgwMDAwMDA0MCAvKiBaZXJvIEZsYWcgKi8KKyNkZWZpbmUgWDg2X0VGTEFHU19TRgkweDAwMDAwMDgwIC8qIFNpZ24gRmxhZyAqLworI2RlZmluZSBYODZfRUZMQUdTX1RGCTB4MDAwMDAxMDAgLyogVHJhcCBGbGFnICovCisjZGVmaW5lIFg4Nl9FRkxBR1NfSUYJMHgwMDAwMDIwMCAvKiBJbnRlcnJ1cHQgRmxhZyAqLworI2RlZmluZSBYODZfRUZMQUdTX0RGCTB4MDAwMDA0MDAgLyogRGlyZWN0aW9uIEZsYWcgKi8KKyNkZWZpbmUgWDg2X0VGTEFHU19PRgkweDAwMDAwODAwIC8qIE92ZXJmbG93IEZsYWcgKi8KKyNkZWZpbmUgWDg2X0VGTEFHU19JT1BMCTB4MDAwMDMwMDAgLyogSU9QTCBtYXNrICovCisjZGVmaW5lIFg4Nl9FRkxBR1NfTlQJMHgwMDAwNDAwMCAvKiBOZXN0ZWQgVGFzayAqLworI2RlZmluZSBYODZfRUZMQUdTX1JGCTB4MDAwMTAwMDAgLyogUmVzdW1lIEZsYWcgKi8KKyNkZWZpbmUgWDg2X0VGTEFHU19WTQkweDAwMDIwMDAwIC8qIFZpcnR1YWwgTW9kZSAqLworI2RlZmluZSBYODZfRUZMQUdTX0FDCTB4MDAwNDAwMDAgLyogQWxpZ25tZW50IENoZWNrICovCisjZGVmaW5lIFg4Nl9FRkxBR1NfVklGCTB4MDAwODAwMDAgLyogVmlydHVhbCBJbnRlcnJ1cHQgRmxhZyAqLworI2RlZmluZSBYODZfRUZMQUdTX1ZJUAkweDAwMTAwMDAwIC8qIFZpcnR1YWwgSW50ZXJydXB0IFBlbmRpbmcgKi8KKyNkZWZpbmUgWDg2X0VGTEFHU19JRAkweDAwMjAwMDAwIC8qIENQVUlEIGRldGVjdGlvbiBmbGFnICovCisKKy8qCisgKiBHZW5lcmljIENQVUlEIGZ1bmN0aW9uCisgKiBjbGVhciAlZWN4IHNpbmNlIHNvbWUgY3B1cyAoQ3lyaXggTUlJKSBkbyBub3Qgc2V0IG9yIGNsZWFyICVlY3gKKyAqIHJlc3VsdGluZyBpbiBzdGFsZSByZWdpc3RlciBjb250ZW50cyBiZWluZyByZXR1cm5lZC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGNwdWlkKHVuc2lnbmVkIGludCBvcCwgdW5zaWduZWQgaW50ICplYXgsIHVuc2lnbmVkIGludCAqZWJ4LCB1bnNpZ25lZCBpbnQgKmVjeCwgdW5zaWduZWQgaW50ICplZHgpCit7CisJX19hc21fXygiY3B1aWQiCisJCTogIj1hIiAoKmVheCksCisJCSAgIj1iIiAoKmVieCksCisJCSAgIj1jIiAoKmVjeCksCisJCSAgIj1kIiAoKmVkeCkKKwkJOiAiMCIgKG9wKSwgImMiKDApKTsKK30KKworLyogU29tZSBDUFVJRCBjYWxscyB3YW50ICdjb3VudCcgdG8gYmUgcGxhY2VkIGluIGVjeCAqLworc3RhdGljIGlubGluZSB2b2lkIGNwdWlkX2NvdW50KGludCBvcCwgaW50IGNvdW50LCBpbnQgKmVheCwgaW50ICplYngsIGludCAqZWN4LAorCSAgICAgICAJaW50ICplZHgpCit7CisJX19hc21fXygiY3B1aWQiCisJCTogIj1hIiAoKmVheCksCisJCSAgIj1iIiAoKmVieCksCisJCSAgIj1jIiAoKmVjeCksCisJCSAgIj1kIiAoKmVkeCkKKwkJOiAiMCIgKG9wKSwgImMiIChjb3VudCkpOworfQorCisvKgorICogQ1BVSUQgZnVuY3Rpb25zIHJldHVybmluZyBhIHNpbmdsZSBkYXR1bQorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjcHVpZF9lYXgodW5zaWduZWQgaW50IG9wKQoreworCXVuc2lnbmVkIGludCBlYXg7CisKKwlfX2FzbV9fKCJjcHVpZCIKKwkJOiAiPWEiIChlYXgpCisJCTogIjAiIChvcCkKKwkJOiAiYngiLCAiY3giLCAiZHgiKTsKKwlyZXR1cm4gZWF4OworfQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3B1aWRfZWJ4KHVuc2lnbmVkIGludCBvcCkKK3sKKwl1bnNpZ25lZCBpbnQgZWF4LCBlYng7CisKKwlfX2FzbV9fKCJjcHVpZCIKKwkJOiAiPWEiIChlYXgpLCAiPWIiIChlYngpCisJCTogIjAiIChvcCkKKwkJOiAiY3giLCAiZHgiICk7CisJcmV0dXJuIGVieDsKK30KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNwdWlkX2VjeCh1bnNpZ25lZCBpbnQgb3ApCit7CisJdW5zaWduZWQgaW50IGVheCwgZWN4OworCisJX19hc21fXygiY3B1aWQiCisJCTogIj1hIiAoZWF4KSwgIj1jIiAoZWN4KQorCQk6ICIwIiAob3ApCisJCTogImJ4IiwgImR4IiApOworCXJldHVybiBlY3g7Cit9CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjcHVpZF9lZHgodW5zaWduZWQgaW50IG9wKQoreworCXVuc2lnbmVkIGludCBlYXgsIGVkeDsKKworCV9fYXNtX18oImNwdWlkIgorCQk6ICI9YSIgKGVheCksICI9ZCIgKGVkeCkKKwkJOiAiMCIgKG9wKQorCQk6ICJieCIsICJjeCIpOworCXJldHVybiBlZHg7Cit9CisKKyNkZWZpbmUgbG9hZF9jcjMocGdkaXIpIFwKKwlhc20gdm9sYXRpbGUoIm1vdmwgJTAsJSVjcjMiOiA6InIiIChfX3BhKHBnZGlyKSkpCisKKworLyoKKyAqIEludGVsIENQVSBmZWF0dXJlcyBpbiBDUjQKKyAqLworI2RlZmluZSBYODZfQ1I0X1ZNRQkJMHgwMDAxCS8qIGVuYWJsZSB2bTg2IGV4dGVuc2lvbnMgKi8KKyNkZWZpbmUgWDg2X0NSNF9QVkkJCTB4MDAwMgkvKiB2aXJ0dWFsIGludGVycnVwdHMgZmxhZyBlbmFibGUgKi8KKyNkZWZpbmUgWDg2X0NSNF9UU0QJCTB4MDAwNAkvKiBkaXNhYmxlIHRpbWUgc3RhbXAgYXQgaXBsIDMgKi8KKyNkZWZpbmUgWDg2X0NSNF9ERQkJMHgwMDA4CS8qIGVuYWJsZSBkZWJ1Z2dpbmcgZXh0ZW5zaW9ucyAqLworI2RlZmluZSBYODZfQ1I0X1BTRQkJMHgwMDEwCS8qIGVuYWJsZSBwYWdlIHNpemUgZXh0ZW5zaW9ucyAqLworI2RlZmluZSBYODZfQ1I0X1BBRQkJMHgwMDIwCS8qIGVuYWJsZSBwaHlzaWNhbCBhZGRyZXNzIGV4dGVuc2lvbnMgKi8KKyNkZWZpbmUgWDg2X0NSNF9NQ0UJCTB4MDA0MAkvKiBNYWNoaW5lIGNoZWNrIGVuYWJsZSAqLworI2RlZmluZSBYODZfQ1I0X1BHRQkJMHgwMDgwCS8qIGVuYWJsZSBnbG9iYWwgcGFnZXMgKi8KKyNkZWZpbmUgWDg2X0NSNF9QQ0UJCTB4MDEwMAkvKiBlbmFibGUgcGVyZm9ybWFuY2UgY291bnRlcnMgYXQgaXBsIDMgKi8KKyNkZWZpbmUgWDg2X0NSNF9PU0ZYU1IJCTB4MDIwMAkvKiBlbmFibGUgZmFzdCBGUFUgc2F2ZSBhbmQgcmVzdG9yZSAqLworI2RlZmluZSBYODZfQ1I0X09TWE1NRVhDUFQJMHgwNDAwCS8qIGVuYWJsZSB1bm1hc2tlZCBTU0UgZXhjZXB0aW9ucyAqLworCisvKgorICogU2F2ZSB0aGUgY3I0IGZlYXR1cmUgc2V0IHdlJ3JlIHVzaW5nIChpZQorICogUGVudGl1bSA0TUIgZW5hYmxlIGFuZCBQUHJvIEdsb2JhbCBwYWdlCisgKiBlbmFibGUpLCBzbyB0aGF0IGFueSBDUFUncyB0aGF0IGJvb3QgdXAKKyAqIGFmdGVyIHVzIGNhbiBnZXQgdGhlIGNvcnJlY3QgZmxhZ3MuCisgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIG1tdV9jcjRfZmVhdHVyZXM7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfaW5fY3I0ICh1bnNpZ25lZCBsb25nIG1hc2spCit7CisJbW11X2NyNF9mZWF0dXJlcyB8PSBtYXNrOworCV9fYXNtX18oIm1vdmwgJSVjcjQsJSVlYXhcblx0IgorCQkib3JsICUwLCUlZWF4XG5cdCIKKwkJIm1vdmwgJSVlYXgsJSVjcjRcbiIKKwkJOiA6ICJpcmciIChtYXNrKQorCQk6ImF4Iik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9pbl9jcjQgKHVuc2lnbmVkIGxvbmcgbWFzaykKK3sKKwltbXVfY3I0X2ZlYXR1cmVzICY9IH5tYXNrOworCV9fYXNtX18oIm1vdmwgJSVjcjQsJSVlYXhcblx0IgorCQkiYW5kbCAlMCwlJWVheFxuXHQiCisJCSJtb3ZsICUlZWF4LCUlY3I0XG4iCisJCTogOiAiaXJnIiAofm1hc2spCisJCToiYXgiKTsKK30KKworLyoKKyAqICAgICAgTlNDL0N5cml4IENQVSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIGluZGV4ZXMKKyAqLworCisjZGVmaW5lIENYODZfUENSMCAweDIwCisjZGVmaW5lIENYODZfR0NSICAweGI4CisjZGVmaW5lIENYODZfQ0NSMCAweGMwCisjZGVmaW5lIENYODZfQ0NSMSAweGMxCisjZGVmaW5lIENYODZfQ0NSMiAweGMyCisjZGVmaW5lIENYODZfQ0NSMyAweGMzCisjZGVmaW5lIENYODZfQ0NSNCAweGU4CisjZGVmaW5lIENYODZfQ0NSNSAweGU5CisjZGVmaW5lIENYODZfQ0NSNiAweGVhCisjZGVmaW5lIENYODZfQ0NSNyAweGViCisjZGVmaW5lIENYODZfUENSMSAweGYwCisjZGVmaW5lIENYODZfRElSMCAweGZlCisjZGVmaW5lIENYODZfRElSMSAweGZmCisjZGVmaW5lIENYODZfQVJSX0JBU0UgMHhjNAorI2RlZmluZSBDWDg2X1JDUl9CQVNFIDB4ZGMKKworLyoKKyAqICAgICAgTlNDL0N5cml4IENQVSBpbmRleGVkIHJlZ2lzdGVyIGFjY2VzcyBtYWNyb3MKKyAqLworCisjZGVmaW5lIGdldEN4ODYocmVnKSAoeyBvdXRiKChyZWcpLCAweDIyKTsgaW5iKDB4MjMpOyB9KQorCisjZGVmaW5lIHNldEN4ODYocmVnLCBkYXRhKSBkbyB7IFwKKwlvdXRiKChyZWcpLCAweDIyKTsgXAorCW91dGIoKGRhdGEpLCAweDIzKTsgXAorfSB3aGlsZSAoMCkKKworc3RhdGljIGlubGluZSB2b2lkIF9fbW9uaXRvcihjb25zdCB2b2lkICplYXgsIHVuc2lnbmVkIGxvbmcgZWN4LAorCQl1bnNpZ25lZCBsb25nIGVkeCkKK3sKKwkvKiAibW9uaXRvciAlZWF4LCVlY3gsJWVkeDsiICovCisJYXNtIHZvbGF0aWxlKAorCQkiLmJ5dGUgMHgwZiwweDAxLDB4Yzg7IgorCQk6IDoiYSIgKGVheCksICJjIiAoZWN4KSwgImQiKGVkeCkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19td2FpdCh1bnNpZ25lZCBsb25nIGVheCwgdW5zaWduZWQgbG9uZyBlY3gpCit7CisJLyogIm13YWl0ICVlYXgsJWVjeDsiICovCisJYXNtIHZvbGF0aWxlKAorCQkiLmJ5dGUgMHgwZiwweDAxLDB4Yzk7IgorCQk6IDoiYSIgKGVheCksICJjIiAoZWN4KSk7Cit9CisKKy8qIGZyb20gc3lzdGVtIGRlc2NyaXB0aW9uIHRhYmxlIGluIEJJT1MuICBNb3N0bHkgZm9yIE1DQSB1c2UsIGJ1dAorb3RoZXJzIG1heSBmaW5kIGl0IHVzZWZ1bC4gKi8KK2V4dGVybiB1bnNpZ25lZCBpbnQgbWFjaGluZV9pZDsKK2V4dGVybiB1bnNpZ25lZCBpbnQgbWFjaGluZV9zdWJtb2RlbF9pZDsKK2V4dGVybiB1bnNpZ25lZCBpbnQgQklPU19yZXZpc2lvbjsKK2V4dGVybiB1bnNpZ25lZCBpbnQgbWNhX3BlbnRpdW1fZmxhZzsKKworLyogQm9vdCBsb2FkZXIgdHlwZSBmcm9tIHRoZSBzZXR1cCBoZWFkZXIgKi8KK2V4dGVybiBpbnQgYm9vdGxvYWRlcl90eXBlOworCisvKgorICogVXNlciBzcGFjZSBwcm9jZXNzIHNpemU6IDNHQiAoZGVmYXVsdCkuCisgKi8KKyNkZWZpbmUgVEFTS19TSVpFCShQQUdFX09GRlNFVCkKKworLyogVGhpcyBkZWNpZGVzIHdoZXJlIHRoZSBrZXJuZWwgd2lsbCBzZWFyY2ggZm9yIGEgZnJlZSBjaHVuayBvZiB2bQorICogc3BhY2UgZHVyaW5nIG1tYXAncy4KKyAqLworI2RlZmluZSBUQVNLX1VOTUFQUEVEX0JBU0UJKFBBR0VfQUxJR04oVEFTS19TSVpFIC8gMykpCisKKyNkZWZpbmUgSEFWRV9BUkNIX1BJQ0tfTU1BUF9MQVlPVVQKKworLyoKKyAqIFNpemUgb2YgaW9fYml0bWFwLgorICovCisjZGVmaW5lIElPX0JJVE1BUF9CSVRTICA2NTUzNgorI2RlZmluZSBJT19CSVRNQVBfQllURVMgKElPX0JJVE1BUF9CSVRTLzgpCisjZGVmaW5lIElPX0JJVE1BUF9MT05HUyAoSU9fQklUTUFQX0JZVEVTL3NpemVvZihsb25nKSkKKyNkZWZpbmUgSU9fQklUTUFQX09GRlNFVCBvZmZzZXRvZihzdHJ1Y3QgdHNzX3N0cnVjdCxpb19iaXRtYXApCisjZGVmaW5lIElOVkFMSURfSU9fQklUTUFQX09GRlNFVCAweDgwMDAKKyNkZWZpbmUgSU5WQUxJRF9JT19CSVRNQVBfT0ZGU0VUX0xBWlkgMHg5MDAwCisKK3N0cnVjdCBpMzg3X2ZzYXZlX3N0cnVjdCB7CisJbG9uZwljd2Q7CisJbG9uZwlzd2Q7CisJbG9uZwl0d2Q7CisJbG9uZwlmaXA7CisJbG9uZwlmY3M7CisJbG9uZwlmb287CisJbG9uZwlmb3M7CisJbG9uZwlzdF9zcGFjZVsyMF07CS8qIDgqMTAgYnl0ZXMgZm9yIGVhY2ggRlAtcmVnID0gODAgYnl0ZXMgKi8KKwlsb25nCXN0YXR1czsJCS8qIHNvZnR3YXJlIHN0YXR1cyBpbmZvcm1hdGlvbiAqLworfTsKKworc3RydWN0IGkzODdfZnhzYXZlX3N0cnVjdCB7CisJdW5zaWduZWQgc2hvcnQJY3dkOworCXVuc2lnbmVkIHNob3J0CXN3ZDsKKwl1bnNpZ25lZCBzaG9ydAl0d2Q7CisJdW5zaWduZWQgc2hvcnQJZm9wOworCWxvbmcJZmlwOworCWxvbmcJZmNzOworCWxvbmcJZm9vOworCWxvbmcJZm9zOworCWxvbmcJbXhjc3I7CisJbG9uZwlteGNzcl9tYXNrOworCWxvbmcJc3Rfc3BhY2VbMzJdOwkvKiA4KjE2IGJ5dGVzIGZvciBlYWNoIEZQLXJlZyA9IDEyOCBieXRlcyAqLworCWxvbmcJeG1tX3NwYWNlWzMyXTsJLyogOCoxNiBieXRlcyBmb3IgZWFjaCBYTU0tcmVnID0gMTI4IGJ5dGVzICovCisJbG9uZwlwYWRkaW5nWzU2XTsKK30gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKDE2KSkpOworCitzdHJ1Y3QgaTM4N19zb2Z0X3N0cnVjdCB7CisJbG9uZwljd2Q7CisJbG9uZwlzd2Q7CisJbG9uZwl0d2Q7CisJbG9uZwlmaXA7CisJbG9uZwlmY3M7CisJbG9uZwlmb287CisJbG9uZwlmb3M7CisJbG9uZwlzdF9zcGFjZVsyMF07CS8qIDgqMTAgYnl0ZXMgZm9yIGVhY2ggRlAtcmVnID0gODAgYnl0ZXMgKi8KKwl1bnNpZ25lZCBjaGFyCWZ0b3AsIGNoYW5nZWQsIGxvb2thaGVhZCwgbm9fdXBkYXRlLCBybSwgYWxpbWl0OworCXN0cnVjdCBpbmZvCSppbmZvOworCXVuc2lnbmVkIGxvbmcJZW50cnlfZWlwOworfTsKKwordW5pb24gaTM4N191bmlvbiB7CisJc3RydWN0IGkzODdfZnNhdmVfc3RydWN0CWZzYXZlOworCXN0cnVjdCBpMzg3X2Z4c2F2ZV9zdHJ1Y3QJZnhzYXZlOworCXN0cnVjdCBpMzg3X3NvZnRfc3RydWN0IHNvZnQ7Cit9OworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgbG9uZyBzZWc7Cit9IG1tX3NlZ21lbnRfdDsKKworc3RydWN0IHRocmVhZF9zdHJ1Y3Q7CisKK3N0cnVjdCB0c3Nfc3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydAliYWNrX2xpbmssX19ibGg7CisJdW5zaWduZWQgbG9uZwllc3AwOworCXVuc2lnbmVkIHNob3J0CXNzMCxfX3NzMGg7CisJdW5zaWduZWQgbG9uZwllc3AxOworCXVuc2lnbmVkIHNob3J0CXNzMSxfX3NzMWg7CS8qIHNzMSBpcyB1c2VkIHRvIGNhY2hlIE1TUl9JQTMyX1NZU0VOVEVSX0NTICovCisJdW5zaWduZWQgbG9uZwllc3AyOworCXVuc2lnbmVkIHNob3J0CXNzMixfX3NzMmg7CisJdW5zaWduZWQgbG9uZwlfX2NyMzsKKwl1bnNpZ25lZCBsb25nCWVpcDsKKwl1bnNpZ25lZCBsb25nCWVmbGFnczsKKwl1bnNpZ25lZCBsb25nCWVheCxlY3gsZWR4LGVieDsKKwl1bnNpZ25lZCBsb25nCWVzcDsKKwl1bnNpZ25lZCBsb25nCWVicDsKKwl1bnNpZ25lZCBsb25nCWVzaTsKKwl1bnNpZ25lZCBsb25nCWVkaTsKKwl1bnNpZ25lZCBzaG9ydAllcywgX19lc2g7CisJdW5zaWduZWQgc2hvcnQJY3MsIF9fY3NoOworCXVuc2lnbmVkIHNob3J0CXNzLCBfX3NzaDsKKwl1bnNpZ25lZCBzaG9ydAlkcywgX19kc2g7CisJdW5zaWduZWQgc2hvcnQJZnMsIF9fZnNoOworCXVuc2lnbmVkIHNob3J0CWdzLCBfX2dzaDsKKwl1bnNpZ25lZCBzaG9ydAlsZHQsIF9fbGR0aDsKKwl1bnNpZ25lZCBzaG9ydAl0cmFjZSwgaW9fYml0bWFwX2Jhc2U7CisJLyoKKwkgKiBUaGUgZXh0cmEgMSBpcyB0aGVyZSBiZWNhdXNlIHRoZSBDUFUgd2lsbCBhY2Nlc3MgYW4KKwkgKiBhZGRpdGlvbmFsIGJ5dGUgYmV5b25kIHRoZSBlbmQgb2YgdGhlIElPIHBlcm1pc3Npb24KKwkgKiBiaXRtYXAuIFRoZSBleHRyYSBieXRlIG11c3QgYmUgYWxsIDEgYml0cywgYW5kIG11c3QKKwkgKiBiZSB3aXRoaW4gdGhlIGxpbWl0LgorCSAqLworCXVuc2lnbmVkIGxvbmcJaW9fYml0bWFwW0lPX0JJVE1BUF9MT05HUyArIDFdOworCS8qCisJICogQ2FjaGUgdGhlIGN1cnJlbnQgbWF4aW11bSBhbmQgdGhlIGxhc3QgdGFzayB0aGF0IHVzZWQgdGhlIGJpdG1hcDoKKwkgKi8KKwl1bnNpZ25lZCBsb25nIGlvX2JpdG1hcF9tYXg7CisJc3RydWN0IHRocmVhZF9zdHJ1Y3QgKmlvX2JpdG1hcF9vd25lcjsKKwkvKgorCSAqIHBhZHMgdGhlIFRTUyB0byBiZSBjYWNoZWxpbmUtYWxpZ25lZCAoc2l6ZSBpcyAweDEwMCkKKwkgKi8KKwl1bnNpZ25lZCBsb25nIF9fY2FjaGVsaW5lX2ZpbGxlclszNV07CisJLyoKKwkgKiAuLiBhbmQgdGhlbiBhbm90aGVyIDB4MTAwIGJ5dGVzIGZvciBlbWVyZ2VuY3kga2VybmVsIHN0YWNrCisJICovCisJdW5zaWduZWQgbG9uZyBzdGFja1s2NF07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIEFSQ0hfTUlOX1RBU0tBTElHTgkxNgorCitzdHJ1Y3QgdGhyZWFkX3N0cnVjdCB7CisvKiBjYWNoZWQgVExTIGRlc2NyaXB0b3JzLiAqLworCXN0cnVjdCBkZXNjX3N0cnVjdCB0bHNfYXJyYXlbR0RUX0VOVFJZX1RMU19FTlRSSUVTXTsKKwl1bnNpZ25lZCBsb25nCWVzcDA7CisJdW5zaWduZWQgbG9uZwlzeXNlbnRlcl9jczsKKwl1bnNpZ25lZCBsb25nCWVpcDsKKwl1bnNpZ25lZCBsb25nCWVzcDsKKwl1bnNpZ25lZCBsb25nCWZzOworCXVuc2lnbmVkIGxvbmcJZ3M7CisvKiBIYXJkd2FyZSBkZWJ1Z2dpbmcgcmVnaXN0ZXJzICovCisJdW5zaWduZWQgbG9uZwlkZWJ1Z3JlZ1s4XTsgIC8qICUlZGIwLTcgZGVidWcgcmVnaXN0ZXJzICovCisvKiBmYXVsdCBpbmZvICovCisJdW5zaWduZWQgbG9uZwljcjIsIHRyYXBfbm8sIGVycm9yX2NvZGU7CisvKiBmbG9hdGluZyBwb2ludCBpbmZvICovCisJdW5pb24gaTM4N191bmlvbglpMzg3OworLyogdmlydHVhbCA4NiBtb2RlIGluZm8gKi8KKwlzdHJ1Y3Qgdm04Nl9zdHJ1Y3QgX191c2VyICogdm04Nl9pbmZvOworCXVuc2lnbmVkIGxvbmcJCXNjcmVlbl9iaXRtYXA7CisJdW5zaWduZWQgbG9uZwkJdjg2ZmxhZ3MsIHY4Nm1hc2ssIHNhdmVkX2VzcDA7CisJdW5zaWduZWQgaW50CQlzYXZlZF9mcywgc2F2ZWRfZ3M7CisvKiBJTyBwZXJtaXNzaW9ucyAqLworCXVuc2lnbmVkIGxvbmcJKmlvX2JpdG1hcF9wdHI7CisvKiBtYXggYWxsb3dlZCBwb3J0IGluIHRoZSBiaXRtYXAsIGluIGJ5dGVzOiAqLworCXVuc2lnbmVkIGxvbmcJaW9fYml0bWFwX21heDsKK307CisKKyNkZWZpbmUgSU5JVF9USFJFQUQgIHsJCQkJCQkJXAorCS52bTg2X2luZm8gPSBOVUxMLAkJCQkJCVwKKwkuc3lzZW50ZXJfY3MgPSBfX0tFUk5FTF9DUywJCQkJCVwKKwkuaW9fYml0bWFwX3B0ciA9IE5VTEwsCQkJCQkJXAorfQorCisvKgorICogTm90ZSB0aGF0IHRoZSAuaW9fYml0bWFwIG1lbWJlciBtdXN0IGJlIGV4dHJhLWJpZy4gVGhpcyBpcyBiZWNhdXNlCisgKiB0aGUgQ1BVIHdpbGwgYWNjZXNzIGFuIGFkZGl0aW9uYWwgYnl0ZSBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgSU8KKyAqIHBlcm1pc3Npb24gYml0bWFwLiBUaGUgZXh0cmEgYnl0ZSBtdXN0IGJlIGFsbCAxIGJpdHMsIGFuZCBtdXN0CisgKiBiZSB3aXRoaW4gdGhlIGxpbWl0LgorICovCisjZGVmaW5lIElOSVRfVFNTICB7CQkJCQkJCVwKKwkuZXNwMAkJPSBzaXplb2YoaW5pdF9zdGFjaykgKyAobG9uZykmaW5pdF9zdGFjaywJXAorCS5zczAJCT0gX19LRVJORUxfRFMsCQkJCQlcCisJLnNzMQkJPSBfX0tFUk5FTF9DUywJCQkJCVwKKwkubGR0CQk9IEdEVF9FTlRSWV9MRFQsCQkJCVwKKwkuaW9fYml0bWFwX2Jhc2UJPSBJTlZBTElEX0lPX0JJVE1BUF9PRkZTRVQsCQkJXAorCS5pb19iaXRtYXAJPSB7IFsgMCAuLi4gSU9fQklUTUFQX0xPTkdTXSA9IH4wIH0sCQlcCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2FkX2VzcDAoc3RydWN0IHRzc19zdHJ1Y3QgKnRzcywgc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnRocmVhZCkKK3sKKwl0c3MtPmVzcDAgPSB0aHJlYWQtPmVzcDA7CisJLyogVGhpcyBjYW4gb25seSBoYXBwZW4gd2hlbiBTRVAgaXMgZW5hYmxlZCwgbm8gbmVlZCB0byB0ZXN0ICJTRVAiYXJhdGVseSAqLworCWlmICh1bmxpa2VseSh0c3MtPnNzMSAhPSB0aHJlYWQtPnN5c2VudGVyX2NzKSkgeworCQl0c3MtPnNzMSA9IHRocmVhZC0+c3lzZW50ZXJfY3M7CisJCXdybXNyKE1TUl9JQTMyX1NZU0VOVEVSX0NTLCB0aHJlYWQtPnN5c2VudGVyX2NzLCAwKTsKKwl9Cit9CisKKyNkZWZpbmUgc3RhcnRfdGhyZWFkKHJlZ3MsIG5ld19laXAsIG5ld19lc3ApIGRvIHsJCVwKKwlfX2FzbV9fKCJtb3ZsICUwLCUlZnMgOyBtb3ZsICUwLCUlZ3MiOiA6InIiICgwKSk7CVwKKwlzZXRfZnMoVVNFUl9EUyk7CQkJCQlcCisJcmVncy0+eGRzID0gX19VU0VSX0RTOwkJCQkJXAorCXJlZ3MtPnhlcyA9IF9fVVNFUl9EUzsJCQkJCVwKKwlyZWdzLT54c3MgPSBfX1VTRVJfRFM7CQkJCQlcCisJcmVncy0+eGNzID0gX19VU0VSX0NTOwkJCQkJXAorCXJlZ3MtPmVpcCA9IG5ld19laXA7CQkJCQlcCisJcmVncy0+ZXNwID0gbmV3X2VzcDsJCQkJCVwKK30gd2hpbGUgKDApCisKKy8qIEZvcndhcmQgZGVjbGFyYXRpb24sIGEgc3RyYW5nZSBDIHRoaW5nICovCitzdHJ1Y3QgdGFza19zdHJ1Y3Q7CitzdHJ1Y3QgbW1fc3RydWN0OworCisvKiBGcmVlIGFsbCByZXNvdXJjZXMgaGVsZCBieSBhIHRocmVhZC4gKi8KK2V4dGVybiB2b2lkIHJlbGVhc2VfdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKKworLyogUHJlcGFyZSB0byBjb3B5IHRocmVhZCBzdGF0ZSAtIHVubGF6eSBhbGwgbGF6eSBzdGF0dXMgKi8KK2V4dGVybiB2b2lkIHByZXBhcmVfdG9fY29weShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7CisKKy8qCisgKiBjcmVhdGUgYSBrZXJuZWwgdGhyZWFkIHdpdGhvdXQgcmVtb3ZpbmcgaXQgZnJvbSB0YXNrbGlzdHMKKyAqLworZXh0ZXJuIGludCBrZXJuZWxfdGhyZWFkKGludCAoKmZuKSh2b2lkICopLCB2b2lkICogYXJnLCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdGhyZWFkX3NhdmVkX3BjKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKK3ZvaWQgc2hvd190cmFjZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHVuc2lnbmVkIGxvbmcgKnN0YWNrKTsKKwordW5zaWduZWQgbG9uZyBnZXRfd2NoYW4oc3RydWN0IHRhc2tfc3RydWN0ICpwKTsKKworI2RlZmluZSBUSFJFQURfU0laRV9MT05HUyAgICAgIChUSFJFQURfU0laRS9zaXplb2YodW5zaWduZWQgbG9uZykpCisjZGVmaW5lIEtTVEtfVE9QKGluZm8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVuc2lnbmVkIGxvbmcgKl9fcHRyID0gKHVuc2lnbmVkIGxvbmcgKikoaW5mbyk7ICAgICAgICAgICAgICAgICBcCisgICAgICAgKHVuc2lnbmVkIGxvbmcpKCZfX3B0cltUSFJFQURfU0laRV9MT05HU10pOyAgICAgICAgICAgICAgICAgICAgIFwKK30pCisKKyNkZWZpbmUgdGFza19wdF9yZWdzKHRhc2spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgc3RydWN0IHB0X3JlZ3MgKl9fcmVnc19fOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX3JlZ3NfXyA9IChzdHJ1Y3QgcHRfcmVncyAqKUtTVEtfVE9QKCh0YXNrKS0+dGhyZWFkX2luZm8pOyAgICAgXAorICAgICAgIF9fcmVnc19fIC0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9KQorCisjZGVmaW5lIEtTVEtfRUlQKHRhc2spICh0YXNrX3B0X3JlZ3ModGFzayktPmVpcCkKKyNkZWZpbmUgS1NUS19FU1AodGFzaykgKHRhc2tfcHRfcmVncyh0YXNrKS0+ZXNwKQorCisKK3N0cnVjdCBtaWNyb2NvZGVfaGVhZGVyIHsKKwl1bnNpZ25lZCBpbnQgaGRydmVyOworCXVuc2lnbmVkIGludCByZXY7CisJdW5zaWduZWQgaW50IGRhdGU7CisJdW5zaWduZWQgaW50IHNpZzsKKwl1bnNpZ25lZCBpbnQgY2tzdW07CisJdW5zaWduZWQgaW50IGxkcnZlcjsKKwl1bnNpZ25lZCBpbnQgcGY7CisJdW5zaWduZWQgaW50IGRhdGFzaXplOworCXVuc2lnbmVkIGludCB0b3RhbHNpemU7CisJdW5zaWduZWQgaW50IHJlc2VydmVkWzNdOworfTsKKworc3RydWN0IG1pY3JvY29kZSB7CisJc3RydWN0IG1pY3JvY29kZV9oZWFkZXIgaGRyOworCXVuc2lnbmVkIGludCBiaXRzWzBdOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgbWljcm9jb2RlIG1pY3JvY29kZV90OwordHlwZWRlZiBzdHJ1Y3QgbWljcm9jb2RlX2hlYWRlciBtaWNyb2NvZGVfaGVhZGVyX3Q7CisKKy8qIG1pY3JvY29kZSBmb3JtYXQgaXMgZXh0ZW5kZWQgZnJvbSBwcmVzY290dCBwcm9jZXNzb3JzICovCitzdHJ1Y3QgZXh0ZW5kZWRfc2lnbmF0dXJlIHsKKwl1bnNpZ25lZCBpbnQgc2lnOworCXVuc2lnbmVkIGludCBwZjsKKwl1bnNpZ25lZCBpbnQgY2tzdW07Cit9OworCitzdHJ1Y3QgZXh0ZW5kZWRfc2lndGFibGUgeworCXVuc2lnbmVkIGludCBjb3VudDsKKwl1bnNpZ25lZCBpbnQgY2tzdW07CisJdW5zaWduZWQgaW50IHJlc2VydmVkWzNdOworCXN0cnVjdCBleHRlbmRlZF9zaWduYXR1cmUgc2lnc1swXTsKK307CisvKiAnNicgYmVjYXVzZSBpdCB1c2VkIHRvIGJlIGZvciBQNiBvbmx5IChidXQgbm93IGNvdmVycyBQZW50aXVtIDQgYXMgd2VsbCkgKi8KKyNkZWZpbmUgTUlDUk9DT0RFX0lPQ0ZSRUUJX0lPKCc2JywwKQorCisvKiBSRVAgTk9QIChQQVVTRSkgaXMgYSBnb29kIHRoaW5nIHRvIGluc2VydCBpbnRvIGJ1c3ktd2FpdCBsb29wcy4gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCByZXBfbm9wKHZvaWQpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInJlcDtub3AiOiA6IDoibWVtb3J5Iik7Cit9CisKKyNkZWZpbmUgY3B1X3JlbGF4KCkJcmVwX25vcCgpCisKKy8qIGdlbmVyaWMgdmVyc2lvbnMgZnJvbSBnYXMgKi8KKyNkZWZpbmUgR0VORVJJQ19OT1AxCSIuYnl0ZSAweDkwXG4iCisjZGVmaW5lIEdFTkVSSUNfTk9QMiAgICAJIi5ieXRlIDB4ODksMHhmNlxuIgorI2RlZmluZSBHRU5FUklDX05PUDMgICAgICAgICIuYnl0ZSAweDhkLDB4NzYsMHgwMFxuIgorI2RlZmluZSBHRU5FUklDX05PUDQgICAgICAgICIuYnl0ZSAweDhkLDB4NzQsMHgyNiwweDAwXG4iCisjZGVmaW5lIEdFTkVSSUNfTk9QNSAgICAgICAgR0VORVJJQ19OT1AxIEdFTkVSSUNfTk9QNAorI2RlZmluZSBHRU5FUklDX05PUDYJIi5ieXRlIDB4OGQsMHhiNiwweDAwLDB4MDAsMHgwMCwweDAwXG4iCisjZGVmaW5lIEdFTkVSSUNfTk9QNwkiLmJ5dGUgMHg4ZCwweGI0LDB4MjYsMHgwMCwweDAwLDB4MDAsMHgwMFxuIgorI2RlZmluZSBHRU5FUklDX05PUDgJR0VORVJJQ19OT1AxIEdFTkVSSUNfTk9QNworCisvKiBPcHRlcm9uIG5vcHMgKi8KKyNkZWZpbmUgSzhfTk9QMSBHRU5FUklDX05PUDEKKyNkZWZpbmUgSzhfTk9QMgkiLmJ5dGUgMHg2NiwweDkwXG4iIAorI2RlZmluZSBLOF9OT1AzCSIuYnl0ZSAweDY2LDB4NjYsMHg5MFxuIiAKKyNkZWZpbmUgSzhfTk9QNAkiLmJ5dGUgMHg2NiwweDY2LDB4NjYsMHg5MFxuIiAKKyNkZWZpbmUgSzhfTk9QNQlLOF9OT1AzIEs4X05PUDIgCisjZGVmaW5lIEs4X05PUDYJSzhfTk9QMyBLOF9OT1AzCisjZGVmaW5lIEs4X05PUDcJSzhfTk9QNCBLOF9OT1AzCisjZGVmaW5lIEs4X05PUDgJSzhfTk9QNCBLOF9OT1A0CisKKy8qIEs3IG5vcHMgKi8KKy8qIHVzZXMgZWF4IGRlcGVuZGVuY2llcyAoYXJiaXRhcnkgY2hvaWNlKSAqLworI2RlZmluZSBLN19OT1AxICBHRU5FUklDX05PUDEKKyNkZWZpbmUgSzdfTk9QMgkiLmJ5dGUgMHg4YiwweGMwXG4iIAorI2RlZmluZSBLN19OT1AzCSIuYnl0ZSAweDhkLDB4MDQsMHgyMFxuIgorI2RlZmluZSBLN19OT1A0CSIuYnl0ZSAweDhkLDB4NDQsMHgyMCwweDAwXG4iCisjZGVmaW5lIEs3X05PUDUJSzdfTk9QNCBBU01fTk9QMQorI2RlZmluZSBLN19OT1A2CSIuYnl0ZSAweDhkLDB4ODAsMCwwLDAsMFxuIgorI2RlZmluZSBLN19OT1A3ICAgICAgICAiLmJ5dGUgMHg4RCwweDA0LDB4MDUsMCwwLDAsMFxuIgorI2RlZmluZSBLN19OT1A4ICAgICAgICBLN19OT1A3IEFTTV9OT1AxCisKKyNpZmRlZiBDT05GSUdfTUs4CisjZGVmaW5lIEFTTV9OT1AxIEs4X05PUDEKKyNkZWZpbmUgQVNNX05PUDIgSzhfTk9QMgorI2RlZmluZSBBU01fTk9QMyBLOF9OT1AzCisjZGVmaW5lIEFTTV9OT1A0IEs4X05PUDQKKyNkZWZpbmUgQVNNX05PUDUgSzhfTk9QNQorI2RlZmluZSBBU01fTk9QNiBLOF9OT1A2CisjZGVmaW5lIEFTTV9OT1A3IEs4X05PUDcKKyNkZWZpbmUgQVNNX05PUDggSzhfTk9QOAorI2VsaWYgZGVmaW5lZChDT05GSUdfTUs3KQorI2RlZmluZSBBU01fTk9QMSBLN19OT1AxCisjZGVmaW5lIEFTTV9OT1AyIEs3X05PUDIKKyNkZWZpbmUgQVNNX05PUDMgSzdfTk9QMworI2RlZmluZSBBU01fTk9QNCBLN19OT1A0CisjZGVmaW5lIEFTTV9OT1A1IEs3X05PUDUKKyNkZWZpbmUgQVNNX05PUDYgSzdfTk9QNgorI2RlZmluZSBBU01fTk9QNyBLN19OT1A3CisjZGVmaW5lIEFTTV9OT1A4IEs3X05PUDgKKyNlbHNlCisjZGVmaW5lIEFTTV9OT1AxIEdFTkVSSUNfTk9QMQorI2RlZmluZSBBU01fTk9QMiBHRU5FUklDX05PUDIKKyNkZWZpbmUgQVNNX05PUDMgR0VORVJJQ19OT1AzCisjZGVmaW5lIEFTTV9OT1A0IEdFTkVSSUNfTk9QNAorI2RlZmluZSBBU01fTk9QNSBHRU5FUklDX05PUDUKKyNkZWZpbmUgQVNNX05PUDYgR0VORVJJQ19OT1A2CisjZGVmaW5lIEFTTV9OT1A3IEdFTkVSSUNfTk9QNworI2RlZmluZSBBU01fTk9QOCBHRU5FUklDX05PUDgKKyNlbmRpZgorCisjZGVmaW5lIEFTTV9OT1BfTUFYIDgKKworLyogUHJlZmV0Y2ggaW5zdHJ1Y3Rpb25zIGZvciBQZW50aXVtIElJSSBhbmQgQU1EIEF0aGxvbiAqLworLyogSXQncyBub3Qgd29ydGggdG8gY2FyZSBhYm91dCAzZG5vdyEgcHJlZmV0Y2hlcyBmb3IgdGhlIEs2CisgICBiZWNhdXNlIHRoZXkgYXJlIG1pY3JvY29kZWQgdGhlcmUgYW5kIHZlcnkgc2xvdy4KKyAgIEhvd2V2ZXIgd2UgZG9uJ3QgZG8gcHJlZmV0Y2hlcyBmb3IgcHJlIFhQIEF0aGxvbnMgY3VycmVudGx5CisgICBUaGF0IHNob3VsZCBiZSBmaXhlZC4gKi8KKyNkZWZpbmUgQVJDSF9IQVNfUFJFRkVUQ0gKK2V4dGVybiBpbmxpbmUgdm9pZCBwcmVmZXRjaChjb25zdCB2b2lkICp4KQoreworCWFsdGVybmF0aXZlX2lucHV0KEFTTV9OT1A0LAorCQkJICAicHJlZmV0Y2hudGEgKCUxKSIsCisJCQkgIFg4Nl9GRUFUVVJFX1hNTSwKKwkJCSAgInIiICh4KSk7Cit9CisKKyNkZWZpbmUgQVJDSF9IQVNfUFJFRkVUQ0gKKyNkZWZpbmUgQVJDSF9IQVNfUFJFRkVUQ0hXCisjZGVmaW5lIEFSQ0hfSEFTX1NQSU5MT0NLX1BSRUZFVENICisKKy8qIDNkbm93ISBwcmVmZXRjaCB0byBnZXQgYW4gZXhjbHVzaXZlIGNhY2hlIGxpbmUuIFVzZWZ1bCBmb3IgCisgICBzcGlubG9ja3MgdG8gYXZvaWQgb25lIHN0YXRlIHRyYW5zaXRpb24gaW4gdGhlIGNhY2hlIGNvaGVyZW5jeSBwcm90b2NvbC4gKi8KK2V4dGVybiBpbmxpbmUgdm9pZCBwcmVmZXRjaHcoY29uc3Qgdm9pZCAqeCkKK3sKKwlhbHRlcm5hdGl2ZV9pbnB1dChBU01fTk9QNCwKKwkJCSAgInByZWZldGNodyAoJTEpIiwKKwkJCSAgWDg2X0ZFQVRVUkVfM0ROT1csCisJCQkgICJyIiAoeCkpOworfQorI2RlZmluZSBzcGluX2xvY2tfcHJlZmV0Y2goeCkJcHJlZmV0Y2h3KHgpCisKK2V4dGVybiB2b2lkIHNlbGVjdF9pZGxlX3JvdXRpbmUoY29uc3Qgc3RydWN0IGNwdWluZm9feDg2ICpjKTsKKworI2RlZmluZSBjYWNoZV9saW5lX3NpemUoKSAoYm9vdF9jcHVfZGF0YS54ODZfY2FjaGVfYWxpZ25tZW50KQorCitleHRlcm4gdW5zaWduZWQgbG9uZyBib290X29wdGlvbl9pZGxlX292ZXJyaWRlOworCisjZW5kaWYgLyogX19BU01fSTM4Nl9QUk9DRVNTT1JfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9wdHJhY2UuaCBiL2luY2x1ZGUvYXNtLWkzODYvcHRyYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODYxODkxNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvcHRyYWNlLmgKQEAgLTAsMCArMSw2OSBAQAorI2lmbmRlZiBfSTM4Nl9QVFJBQ0VfSAorI2RlZmluZSBfSTM4Nl9QVFJBQ0VfSAorCisjZGVmaW5lIEVCWCAwCisjZGVmaW5lIEVDWCAxCisjZGVmaW5lIEVEWCAyCisjZGVmaW5lIEVTSSAzCisjZGVmaW5lIEVESSA0CisjZGVmaW5lIEVCUCA1CisjZGVmaW5lIEVBWCA2CisjZGVmaW5lIERTIDcKKyNkZWZpbmUgRVMgOAorI2RlZmluZSBGUyA5CisjZGVmaW5lIEdTIDEwCisjZGVmaW5lIE9SSUdfRUFYIDExCisjZGVmaW5lIEVJUCAxMgorI2RlZmluZSBDUyAgMTMKKyNkZWZpbmUgRUZMIDE0CisjZGVmaW5lIFVFU1AgMTUKKyNkZWZpbmUgU1MgICAxNgorI2RlZmluZSBGUkFNRV9TSVpFIDE3CisKKy8qIHRoaXMgc3RydWN0IGRlZmluZXMgdGhlIHdheSB0aGUgcmVnaXN0ZXJzIGFyZSBzdG9yZWQgb24gdGhlIAorICAgc3RhY2sgZHVyaW5nIGEgc3lzdGVtIGNhbGwuICovCisKK3N0cnVjdCBwdF9yZWdzIHsKKwlsb25nIGVieDsKKwlsb25nIGVjeDsKKwlsb25nIGVkeDsKKwlsb25nIGVzaTsKKwlsb25nIGVkaTsKKwlsb25nIGVicDsKKwlsb25nIGVheDsKKwlpbnQgIHhkczsKKwlpbnQgIHhlczsKKwlsb25nIG9yaWdfZWF4OworCWxvbmcgZWlwOworCWludCAgeGNzOworCWxvbmcgZWZsYWdzOworCWxvbmcgZXNwOworCWludCAgeHNzOworfTsKKworLyogQXJiaXRyYXJpbHkgY2hvb3NlIHRoZSBzYW1lIHB0cmFjZSBudW1iZXJzIGFzIHVzZWQgYnkgdGhlIFNwYXJjIGNvZGUuICovCisjZGVmaW5lIFBUUkFDRV9HRVRSRUdTICAgICAgICAgICAgMTIKKyNkZWZpbmUgUFRSQUNFX1NFVFJFR1MgICAgICAgICAgICAxMworI2RlZmluZSBQVFJBQ0VfR0VURlBSRUdTICAgICAgICAgIDE0CisjZGVmaW5lIFBUUkFDRV9TRVRGUFJFR1MgICAgICAgICAgMTUKKyNkZWZpbmUgUFRSQUNFX0dFVEZQWFJFR1MgICAgICAgICAxOAorI2RlZmluZSBQVFJBQ0VfU0VURlBYUkVHUyAgICAgICAgIDE5CisKKyNkZWZpbmUgUFRSQUNFX09MRFNFVE9QVElPTlMgICAgICAgICAyMQorCisjZGVmaW5lIFBUUkFDRV9HRVRfVEhSRUFEX0FSRUEgICAgMjUKKyNkZWZpbmUgUFRSQUNFX1NFVF9USFJFQURfQVJFQSAgICAyNgorCisjaWZkZWYgX19LRVJORUxfXworc3RydWN0IHRhc2tfc3RydWN0OworZXh0ZXJuIHZvaWQgc2VuZF9zaWd0cmFwKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGVycm9yX2NvZGUpOworI2RlZmluZSB1c2VyX21vZGUocmVncykgKChWTV9NQVNLICYgKHJlZ3MpLT5lZmxhZ3MpIHx8ICgzICYgKHJlZ3MpLT54Y3MpKQorI2RlZmluZSBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpICgocmVncyktPmVpcCkKKyNpZiBkZWZpbmVkKENPTkZJR19TTVApICYmIGRlZmluZWQoQ09ORklHX0ZSQU1FX1BPSU5URVIpCitleHRlcm4gdW5zaWduZWQgbG9uZyBwcm9maWxlX3BjKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKyNlbHNlCisjZGVmaW5lIHByb2ZpbGVfcGMocmVncykgaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKQorI2VuZGlmCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3Jlc291cmNlLmggYi9pbmNsdWRlL2FzbS1pMzg2L3Jlc291cmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmMxZWEzNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvcmVzb3VyY2UuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX0kzODZfUkVTT1VSQ0VfSAorI2RlZmluZSBfSTM4Nl9SRVNPVVJDRV9ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9yZXNvdXJjZS5oPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvcnRjLmggYi9pbmNsdWRlL2FzbS1pMzg2L3J0Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmZDAyMTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3J0Yy5oCkBAIC0wLDAgKzEsMTAgQEAKKyNpZm5kZWYgX0kzODZfUlRDX0gKKyNkZWZpbmUgX0kzODZfUlRDX0gKKworLyoKKyAqIHg4NiB1c2VzIHRoZSBkZWZhdWx0IGFjY2VzcyBtZXRob2RzIGZvciB0aGUgUlRDLgorICovCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9ydGMuaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3J3bG9jay5oIGIvaW5jbHVkZS9hc20taTM4Ni9yd2xvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTdjYzdhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9yd2xvY2suaApAQCAtMCwwICsxLDcxIEBACisvKiBpbmNsdWRlL2FzbS1pMzg2L3J3bG9jay5oCisgKgorICoJSGVscGVycyB1c2VkIGJ5IGJvdGggcncgc3BpbmxvY2tzIGFuZCBydyBzZW1hcGhvcmVzLgorICoKKyAqCUJhc2VkIGluIHBhcnQgb24gY29kZSBmcm9tIHNlbWFwaG9yZS5oIGFuZAorICoJc3BpbmxvY2suaCBDb3B5cmlnaHQgMTk5NiBMaW51cyBUb3J2YWxkcy4KKyAqCisgKglDb3B5cmlnaHQgMTk5OSBSZWQgSGF0LCBJbmMuCisgKgorICoJV3JpdHRlbiBieSBCZW5qYW1pbiBMYUhhaXNlLgorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKglhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpZm5kZWYgX0FTTV9JMzg2X1JXTE9DS19ICisjZGVmaW5lIF9BU01fSTM4Nl9SV0xPQ0tfSAorCisjZGVmaW5lIFJXX0xPQ0tfQklBUwkJIDB4MDEwMDAwMDAKKyNkZWZpbmUgUldfTE9DS19CSUFTX1NUUgkiMHgwMTAwMDAwMCIKKworI2RlZmluZSBfX2J1aWxkX3JlYWRfbG9ja19wdHIocncsIGhlbHBlcikgICBcCisJYXNtIHZvbGF0aWxlKExPQ0sgInN1YmwgJDEsKCUwKVxuXHQiIFwKKwkJICAgICAiam5zIDFmXG4iIFwKKwkJICAgICAiY2FsbCAiIGhlbHBlciAiXG5cdCIgXAorCQkgICAgICIxOlxuIiBcCisJCSAgICAgOjoiYSIgKHJ3KSA6ICJtZW1vcnkiKQorCisjZGVmaW5lIF9fYnVpbGRfcmVhZF9sb2NrX2NvbnN0KHJ3LCBoZWxwZXIpICAgXAorCWFzbSB2b2xhdGlsZShMT0NLICJzdWJsICQxLCUwXG5cdCIgXAorCQkgICAgICJqbnMgMWZcbiIgXAorCQkgICAgICJwdXNobCAlJWVheFxuXHQiIFwKKwkJICAgICAibGVhbCAlMCwlJWVheFxuXHQiIFwKKwkJICAgICAiY2FsbCAiIGhlbHBlciAiXG5cdCIgXAorCQkgICAgICJwb3BsICUlZWF4XG5cdCIgXAorCQkgICAgICIxOlxuIiBcCisJCSAgICAgOiI9bSIgKCoodm9sYXRpbGUgaW50ICopcncpIDogOiAibWVtb3J5IikKKworI2RlZmluZSBfX2J1aWxkX3JlYWRfbG9jayhydywgaGVscGVyKQlkbyB7IFwKKwkJCQkJCWlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChydykpIFwKKwkJCQkJCQlfX2J1aWxkX3JlYWRfbG9ja19jb25zdChydywgaGVscGVyKTsgXAorCQkJCQkJZWxzZSBcCisJCQkJCQkJX19idWlsZF9yZWFkX2xvY2tfcHRyKHJ3LCBoZWxwZXIpOyBcCisJCQkJCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgX19idWlsZF93cml0ZV9sb2NrX3B0cihydywgaGVscGVyKSBcCisJYXNtIHZvbGF0aWxlKExPQ0sgInN1YmwgJCIgUldfTE9DS19CSUFTX1NUUiAiLCglMClcblx0IiBcCisJCSAgICAgImp6IDFmXG4iIFwKKwkJICAgICAiY2FsbCAiIGhlbHBlciAiXG5cdCIgXAorCQkgICAgICIxOlxuIiBcCisJCSAgICAgOjoiYSIgKHJ3KSA6ICJtZW1vcnkiKQorCisjZGVmaW5lIF9fYnVpbGRfd3JpdGVfbG9ja19jb25zdChydywgaGVscGVyKSBcCisJYXNtIHZvbGF0aWxlKExPQ0sgInN1YmwgJCIgUldfTE9DS19CSUFTX1NUUiAiLCUwXG5cdCIgXAorCQkgICAgICJqeiAxZlxuIiBcCisJCSAgICAgInB1c2hsICUlZWF4XG5cdCIgXAorCQkgICAgICJsZWFsICUwLCUlZWF4XG5cdCIgXAorCQkgICAgICJjYWxsICIgaGVscGVyICJcblx0IiBcCisJCSAgICAgInBvcGwgJSVlYXhcblx0IiBcCisJCSAgICAgIjE6XG4iIFwKKwkJICAgICA6Ij1tIiAoKih2b2xhdGlsZSBpbnQgKilydykgOiA6ICJtZW1vcnkiKQorCisjZGVmaW5lIF9fYnVpbGRfd3JpdGVfbG9jayhydywgaGVscGVyKQlkbyB7IFwKKwkJCQkJCWlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChydykpIFwKKwkJCQkJCQlfX2J1aWxkX3dyaXRlX2xvY2tfY29uc3QocncsIGhlbHBlcik7IFwKKwkJCQkJCWVsc2UgXAorCQkJCQkJCV9fYnVpbGRfd3JpdGVfbG9ja19wdHIocncsIGhlbHBlcik7IFwKKwkJCQkJfSB3aGlsZSAoMCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3J3c2VtLmggYi9pbmNsdWRlL2FzbS1pMzg2L3J3c2VtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzYyNWE2NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvcndzZW0uaApAQCAtMCwwICsxLDI4OCBAQAorLyogcndzZW0uaDogUi9XIHNlbWFwaG9yZXMgaW1wbGVtZW50ZWQgdXNpbmcgWEFERC9DTVBYQ0hHIGZvciBpNDg2KworICoKKyAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkuCisgKgorICogRGVyaXZlZCBmcm9tIGFzbS1pMzg2L3NlbWFwaG9yZS5oCisgKgorICoKKyAqIFRoZSBNU1cgb2YgdGhlIGNvdW50IGlzIHRoZSBuZWdhdGVkIG51bWJlciBvZiBhY3RpdmUgd3JpdGVycyBhbmQgd2FpdGluZworICogbG9ja2VycywgYW5kIHRoZSBMU1cgaXMgdGhlIHRvdGFsIG51bWJlciBvZiBhY3RpdmUgbG9ja3MKKyAqCisgKiBUaGUgbG9jayBjb3VudCBpcyBpbml0aWFsaXplZCB0byAwIChubyBhY3RpdmUgYW5kIG5vIHdhaXRpbmcgbG9ja2VycykuCisgKgorICogV2hlbiBhIHdyaXRlciBzdWJ0cmFjdHMgV1JJVEVfQklBUywgaXQnbGwgZ2V0IDB4ZmZmZjAwMDEgZm9yIHRoZSBjYXNlIG9mIGFuCisgKiB1bmNvbnRlbmRlZCBsb2NrLiBUaGlzIGNhbiBiZSBkZXRlcm1pbmVkIGJlY2F1c2UgWEFERCByZXR1cm5zIHRoZSBvbGQgdmFsdWUuCisgKiBSZWFkZXJzIGluY3JlbWVudCBieSAxIGFuZCBzZWUgYSBwb3NpdGl2ZSB2YWx1ZSB3aGVuIHVuY29udGVuZGVkLCBuZWdhdGl2ZQorICogaWYgdGhlcmUgYXJlIHdyaXRlcnMgKGFuZCBtYXliZSkgcmVhZGVycyB3YWl0aW5nIChpbiB3aGljaCBjYXNlIGl0IGdvZXMgdG8KKyAqIHNsZWVwKS4KKyAqCisgKiBUaGUgdmFsdWUgb2YgV0FJVElOR19CSUFTIHN1cHBvcnRzIHVwIHRvIDMyNzY2IHdhaXRpbmcgcHJvY2Vzc2VzLiBUaGlzIGNhbgorICogYmUgZXh0ZW5kZWQgdG8gNjU1MzQgYnkgbWFudWFsbHkgY2hlY2tpbmcgdGhlIHdob2xlIE1TVyByYXRoZXIgdGhhbiByZWx5aW5nCisgKiBvbiB0aGUgUyBmbGFnLgorICoKKyAqIFRoZSB2YWx1ZSBvZiBBQ1RJVkVfQklBUyBzdXBwb3J0cyB1cCB0byA2NTUzNSBhY3RpdmUgcHJvY2Vzc2VzLgorICoKKyAqIFRoaXMgc2hvdWxkIGJlIHRvdGFsbHkgZmFpciAtIGlmIGFueXRoaW5nIGlzIHdhaXRpbmcsIGEgcHJvY2VzcyB0aGF0IHdhbnRzIGEKKyAqIGxvY2sgd2lsbCBnbyB0byB0aGUgYmFjayBvZiB0aGUgcXVldWUuIFdoZW4gdGhlIGN1cnJlbnRseSBhY3RpdmUgbG9jayBpcworICogcmVsZWFzZWQsIGlmIHRoZXJlJ3MgYSB3cml0ZXIgYXQgdGhlIGZyb250IG9mIHRoZSBxdWV1ZSwgdGhlbiB0aGF0IGFuZCBvbmx5CisgKiB0aGF0IHdpbGwgYmUgd29rZW4gdXA7IGlmIHRoZXJlJ3MgYSBidW5jaCBvZiBjb25zZXF1dGl2ZSByZWFkZXJzIGF0IHRoZQorICogZnJvbnQsIHRoZW4gdGhleSdsbCBhbGwgYmUgd29rZW4gdXAsIGJ1dCBubyBvdGhlciByZWFkZXJzIHdpbGwgYmUuCisgKi8KKworI2lmbmRlZiBfSTM4Nl9SV1NFTV9ICisjZGVmaW5lIF9JMzg2X1JXU0VNX0gKKworI2lmbmRlZiBfTElOVVhfUldTRU1fSAorI2Vycm9yICJwbGVhc2UgZG9uJ3QgaW5jbHVkZSBhc20vcndzZW0uaCBkaXJlY3RseSwgdXNlIGxpbnV4L3J3c2VtLmggaW5zdGVhZCIKKyNlbmRpZgorCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisKK3N0cnVjdCByd3NlbV93YWl0ZXI7CisKK2V4dGVybiBzdHJ1Y3Qgcndfc2VtYXBob3JlICpGQVNUQ0FMTChyd3NlbV9kb3duX3JlYWRfZmFpbGVkKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkpOworZXh0ZXJuIHN0cnVjdCByd19zZW1hcGhvcmUgKkZBU1RDQUxMKHJ3c2VtX2Rvd25fd3JpdGVfZmFpbGVkKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkpOworZXh0ZXJuIHN0cnVjdCByd19zZW1hcGhvcmUgKkZBU1RDQUxMKHJ3c2VtX3dha2Uoc3RydWN0IHJ3X3NlbWFwaG9yZSAqKSk7CitleHRlcm4gc3RydWN0IHJ3X3NlbWFwaG9yZSAqRkFTVENBTEwocndzZW1fZG93bmdyYWRlX3dha2Uoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKSk7CisKKy8qCisgKiB0aGUgc2VtYXBob3JlIGRlZmluaXRpb24KKyAqLworc3RydWN0IHJ3X3NlbWFwaG9yZSB7CisJc2lnbmVkIGxvbmcJCWNvdW50OworI2RlZmluZSBSV1NFTV9VTkxPQ0tFRF9WQUxVRQkJMHgwMDAwMDAwMAorI2RlZmluZSBSV1NFTV9BQ1RJVkVfQklBUwkJMHgwMDAwMDAwMQorI2RlZmluZSBSV1NFTV9BQ1RJVkVfTUFTSwkJMHgwMDAwZmZmZgorI2RlZmluZSBSV1NFTV9XQUlUSU5HX0JJQVMJCSgtMHgwMDAxMDAwMCkKKyNkZWZpbmUgUldTRU1fQUNUSVZFX1JFQURfQklBUwkJUldTRU1fQUNUSVZFX0JJQVMKKyNkZWZpbmUgUldTRU1fQUNUSVZFX1dSSVRFX0JJQVMJCShSV1NFTV9XQUlUSU5HX0JJQVMgKyBSV1NFTV9BQ1RJVkVfQklBUykKKwlzcGlubG9ja190CQl3YWl0X2xvY2s7CisJc3RydWN0IGxpc3RfaGVhZAl3YWl0X2xpc3Q7CisjaWYgUldTRU1fREVCVUcKKwlpbnQJCQlkZWJ1ZzsKKyNlbmRpZgorfTsKKworLyoKKyAqIGluaXRpYWxpc2F0aW9uCisgKi8KKyNpZiBSV1NFTV9ERUJVRworI2RlZmluZSBfX1JXU0VNX0RFQlVHX0lOSVQgICAgICAsIDAKKyNlbHNlCisjZGVmaW5lIF9fUldTRU1fREVCVUdfSU5JVAkvKiAqLworI2VuZGlmCisKKyNkZWZpbmUgX19SV1NFTV9JTklUSUFMSVpFUihuYW1lKSBcCit7IFJXU0VNX1VOTE9DS0VEX1ZBTFVFLCBTUElOX0xPQ0tfVU5MT0NLRUQsIExJU1RfSEVBRF9JTklUKChuYW1lKS53YWl0X2xpc3QpIFwKKwlfX1JXU0VNX0RFQlVHX0lOSVQgfQorCisjZGVmaW5lIERFQ0xBUkVfUldTRU0obmFtZSkgXAorCXN0cnVjdCByd19zZW1hcGhvcmUgbmFtZSA9IF9fUldTRU1fSU5JVElBTElaRVIobmFtZSkKKworc3RhdGljIGlubGluZSB2b2lkIGluaXRfcndzZW0oc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQoreworCXNlbS0+Y291bnQgPSBSV1NFTV9VTkxPQ0tFRF9WQUxVRTsKKwlzcGluX2xvY2tfaW5pdCgmc2VtLT53YWl0X2xvY2spOworCUlOSVRfTElTVF9IRUFEKCZzZW0tPndhaXRfbGlzdCk7CisjaWYgUldTRU1fREVCVUcKKwlzZW0tPmRlYnVnID0gMDsKKyNlbmRpZgorfQorCisvKgorICogbG9jayBmb3IgcmVhZGluZworICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19kb3duX3JlYWQoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkiIyBiZWdpbm5pbmcgZG93bl9yZWFkXG5cdCIKK0xPQ0tfUFJFRklYCSIgIGluY2wgICAgICAoJSVlYXgpXG5cdCIgLyogYWRkcyAweDAwMDAwMDAxLCByZXR1cm5zIHRoZSBvbGQgdmFsdWUgKi8KKwkJIiAganMgICAgICAgIDJmXG5cdCIgLyoganVtcCBpZiB3ZSB3ZXJlbid0IGdyYW50ZWQgdGhlIGxvY2sgKi8KKwkJIjE6XG5cdCIKKwkJTE9DS19TRUNUSU9OX1NUQVJUKCIiKQorCQkiMjpcblx0IgorCQkiICBwdXNobCAgICAgJSVlY3hcblx0IgorCQkiICBwdXNobCAgICAgJSVlZHhcblx0IgorCQkiICBjYWxsICAgICAgcndzZW1fZG93bl9yZWFkX2ZhaWxlZFxuXHQiCisJCSIgIHBvcGwgICAgICAlJWVkeFxuXHQiCisJCSIgIHBvcGwgICAgICAlJWVjeFxuXHQiCisJCSIgIGptcCAgICAgICAxYlxuIgorCQlMT0NLX1NFQ1RJT05fRU5ECisJCSIjIGVuZGluZyBkb3duX3JlYWRcblx0IgorCQk6ICI9bSIoc2VtLT5jb3VudCkKKwkJOiAiYSIoc2VtKSwgIm0iKHNlbS0+Y291bnQpCisJCTogIm1lbW9yeSIsICJjYyIpOworfQorCisvKgorICogdHJ5bG9jayBmb3IgcmVhZGluZyAtLSByZXR1cm5zIDEgaWYgc3VjY2Vzc2Z1bCwgMCBpZiBjb250ZW50aW9uCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IF9fZG93bl9yZWFkX3RyeWxvY2soc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQoreworCV9fczMyIHJlc3VsdCwgdG1wOworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkiIyBiZWdpbm5pbmcgX19kb3duX3JlYWRfdHJ5bG9ja1xuXHQiCisJCSIgIG1vdmwgICAgICAlMCwlMVxuXHQiCisJCSIxOlxuXHQiCisJCSIgIG1vdmwJICAgICAlMSwlMlxuXHQiCisJCSIgIGFkZGwgICAgICAlMywlMlxuXHQiCisJCSIgIGpsZQkgICAgIDJmXG5cdCIKK0xPQ0tfUFJFRklYCSIgIGNtcHhjaGdsICAlMiwlMFxuXHQiCisJCSIgIGpuegkgICAgIDFiXG5cdCIKKwkJIjI6XG5cdCIKKwkJIiMgZW5kaW5nIF9fZG93bl9yZWFkX3RyeWxvY2tcblx0IgorCQk6ICIrbSIoc2VtLT5jb3VudCksICI9JmEiKHJlc3VsdCksICI9JnIiKHRtcCkKKwkJOiAiaSIoUldTRU1fQUNUSVZFX1JFQURfQklBUykKKwkJOiAibWVtb3J5IiwgImNjIik7CisJcmV0dXJuIHJlc3VsdD49MCA/IDEgOiAwOworfQorCisvKgorICogbG9jayBmb3Igd3JpdGluZworICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19kb3duX3dyaXRlKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKK3sKKwlpbnQgdG1wOworCisJdG1wID0gUldTRU1fQUNUSVZFX1dSSVRFX0JJQVM7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSIjIGJlZ2lubmluZyBkb3duX3dyaXRlXG5cdCIKK0xPQ0tfUFJFRklYCSIgIHhhZGQgICAgICAlJWVkeCwoJSVlYXgpXG5cdCIgLyogc3VidHJhY3QgMHgwMDAwZmZmZiwgcmV0dXJucyB0aGUgb2xkIHZhbHVlICovCisJCSIgIHRlc3RsICAgICAlJWVkeCwlJWVkeFxuXHQiIC8qIHdhcyB0aGUgY291bnQgMCBiZWZvcmU/ICovCisJCSIgIGpueiAgICAgICAyZlxuXHQiIC8qIGp1bXAgaWYgd2Ugd2VyZW4ndCBncmFudGVkIHRoZSBsb2NrICovCisJCSIxOlxuXHQiCisJCUxPQ0tfU0VDVElPTl9TVEFSVCgiIikKKwkJIjI6XG5cdCIKKwkJIiAgcHVzaGwgICAgICUlZWN4XG5cdCIKKwkJIiAgY2FsbCAgICAgIHJ3c2VtX2Rvd25fd3JpdGVfZmFpbGVkXG5cdCIKKwkJIiAgcG9wbCAgICAgICUlZWN4XG5cdCIKKwkJIiAgam1wICAgICAgIDFiXG4iCisJCUxPQ0tfU0VDVElPTl9FTkQKKwkJIiMgZW5kaW5nIGRvd25fd3JpdGUiCisJCTogIj1tIihzZW0tPmNvdW50KSwgIj1kIih0bXApCisJCTogImEiKHNlbSksICIxIih0bXApLCAibSIoc2VtLT5jb3VudCkKKwkJOiAibWVtb3J5IiwgImNjIik7Cit9CisKKy8qCisgKiB0cnlsb2NrIGZvciB3cml0aW5nIC0tIHJldHVybnMgMSBpZiBzdWNjZXNzZnVsLCAwIGlmIGNvbnRlbnRpb24KKyAqLworc3RhdGljIGlubGluZSBpbnQgX19kb3duX3dyaXRlX3RyeWxvY2soc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQoreworCXNpZ25lZCBsb25nIHJldCA9IGNtcHhjaGcoJnNlbS0+Y291bnQsCisJCQkJICBSV1NFTV9VTkxPQ0tFRF9WQUxVRSwgCisJCQkJICBSV1NFTV9BQ1RJVkVfV1JJVEVfQklBUyk7CisJaWYgKHJldCA9PSBSV1NFTV9VTkxPQ0tFRF9WQUxVRSkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiB1bmxvY2sgYWZ0ZXIgcmVhZGluZworICovCitzdGF0aWMgaW5saW5lIHZvaWQgX191cF9yZWFkKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKK3sKKwlfX3MzMiB0bXAgPSAtUldTRU1fQUNUSVZFX1JFQURfQklBUzsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJIiMgYmVnaW5uaW5nIF9fdXBfcmVhZFxuXHQiCitMT0NLX1BSRUZJWAkiICB4YWRkICAgICAgJSVlZHgsKCUlZWF4KVxuXHQiIC8qIHN1YnRyYWN0cyAxLCByZXR1cm5zIHRoZSBvbGQgdmFsdWUgKi8KKwkJIiAganMgICAgICAgIDJmXG5cdCIgLyoganVtcCBpZiB0aGUgbG9jayBpcyBiZWluZyB3YWl0ZWQgdXBvbiAqLworCQkiMTpcblx0IgorCQlMT0NLX1NFQ1RJT05fU1RBUlQoIiIpCisJCSIyOlxuXHQiCisJCSIgIGRlY3cgICAgICAlJWR4XG5cdCIgLyogZG8gbm90aGluZyBpZiBzdGlsbCBvdXRzdGFuZGluZyBhY3RpdmUgcmVhZGVycyAqLworCQkiICBqbnogICAgICAgMWJcblx0IgorCQkiICBwdXNobCAgICAgJSVlY3hcblx0IgorCQkiICBjYWxsICAgICAgcndzZW1fd2FrZVxuXHQiCisJCSIgIHBvcGwgICAgICAlJWVjeFxuXHQiCisJCSIgIGptcCAgICAgICAxYlxuIgorCQlMT0NLX1NFQ1RJT05fRU5ECisJCSIjIGVuZGluZyBfX3VwX3JlYWRcbiIKKwkJOiAiPW0iKHNlbS0+Y291bnQpLCAiPWQiKHRtcCkKKwkJOiAiYSIoc2VtKSwgIjEiKHRtcCksICJtIihzZW0tPmNvdW50KQorCQk6ICJtZW1vcnkiLCAiY2MiKTsKK30KKworLyoKKyAqIHVubG9jayBhZnRlciB3cml0aW5nCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3VwX3dyaXRlKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJIiMgYmVnaW5uaW5nIF9fdXBfd3JpdGVcblx0IgorCQkiICBtb3ZsICAgICAgJTIsJSVlZHhcblx0IgorTE9DS19QUkVGSVgJIiAgeGFkZGwgICAgICUlZWR4LCglJWVheClcblx0IiAvKiB0cmllcyB0byB0cmFuc2l0aW9uIDB4ZmZmZjAwMDEgLT4gMHgwMDAwMDAwMCAqLworCQkiICBqbnogICAgICAgMmZcblx0IiAvKiBqdW1wIGlmIHRoZSBsb2NrIGlzIGJlaW5nIHdhaXRlZCB1cG9uICovCisJCSIxOlxuXHQiCisJCUxPQ0tfU0VDVElPTl9TVEFSVCgiIikKKwkJIjI6XG5cdCIKKwkJIiAgZGVjdyAgICAgICUlZHhcblx0IiAvKiBkaWQgdGhlIGFjdGl2ZSBjb3VudCByZWR1Y2UgdG8gMD8gKi8KKwkJIiAgam56ICAgICAgIDFiXG5cdCIgLyoganVtcCBiYWNrIGlmIG5vdCAqLworCQkiICBwdXNobCAgICAgJSVlY3hcblx0IgorCQkiICBjYWxsICAgICAgcndzZW1fd2FrZVxuXHQiCisJCSIgIHBvcGwgICAgICAlJWVjeFxuXHQiCisJCSIgIGptcCAgICAgICAxYlxuIgorCQlMT0NLX1NFQ1RJT05fRU5ECisJCSIjIGVuZGluZyBfX3VwX3dyaXRlXG4iCisJCTogIj1tIihzZW0tPmNvdW50KQorCQk6ICJhIihzZW0pLCAiaSIoLVJXU0VNX0FDVElWRV9XUklURV9CSUFTKSwgIm0iKHNlbS0+Y291bnQpCisJCTogIm1lbW9yeSIsICJjYyIsICJlZHgiKTsKK30KKworLyoKKyAqIGRvd25ncmFkZSB3cml0ZSBsb2NrIHRvIHJlYWQgbG9jaworICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19kb3duZ3JhZGVfd3JpdGUoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkiIyBiZWdpbm5pbmcgX19kb3duZ3JhZGVfd3JpdGVcblx0IgorTE9DS19QUkVGSVgJIiAgYWRkbCAgICAgICUyLCglJWVheClcblx0IiAvKiB0cmFuc2l0aW9ucyAweFpaWlowMDAxIC0+IDB4WVlZWTAwMDEgKi8KKwkJIiAganMgICAgICAgIDJmXG5cdCIgLyoganVtcCBpZiB0aGUgbG9jayBpcyBiZWluZyB3YWl0ZWQgdXBvbiAqLworCQkiMTpcblx0IgorCQlMT0NLX1NFQ1RJT05fU1RBUlQoIiIpCisJCSIyOlxuXHQiCisJCSIgIHB1c2hsICAgICAlJWVjeFxuXHQiCisJCSIgIHB1c2hsICAgICAlJWVkeFxuXHQiCisJCSIgIGNhbGwgICAgICByd3NlbV9kb3duZ3JhZGVfd2FrZVxuXHQiCisJCSIgIHBvcGwgICAgICAlJWVkeFxuXHQiCisJCSIgIHBvcGwgICAgICAlJWVjeFxuXHQiCisJCSIgIGptcCAgICAgICAxYlxuIgorCQlMT0NLX1NFQ1RJT05fRU5ECisJCSIjIGVuZGluZyBfX2Rvd25ncmFkZV93cml0ZVxuIgorCQk6ICI9bSIoc2VtLT5jb3VudCkKKwkJOiAiYSIoc2VtKSwgImkiKC1SV1NFTV9XQUlUSU5HX0JJQVMpLCAibSIoc2VtLT5jb3VudCkKKwkJOiAibWVtb3J5IiwgImNjIik7Cit9CisKKy8qCisgKiBpbXBsZW1lbnQgYXRvbWljIGFkZCBmdW5jdGlvbmFsaXR5CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCByd3NlbV9hdG9taWNfYWRkKGludCBkZWx0YSwgc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKAorTE9DS19QUkVGSVgJImFkZGwgJTEsJTAiCisJCTogIj1tIihzZW0tPmNvdW50KQorCQk6ICJpciIoZGVsdGEpLCAibSIoc2VtLT5jb3VudCkpOworfQorCisvKgorICogaW1wbGVtZW50IGV4Y2hhbmdlIGFuZCBhZGQgZnVuY3Rpb25hbGl0eQorICovCitzdGF0aWMgaW5saW5lIGludCByd3NlbV9hdG9taWNfdXBkYXRlKGludCBkZWx0YSwgc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQoreworCWludCB0bXAgPSBkZWx0YTsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorTE9DS19QUkVGSVgJInhhZGQgJTAsKCUyKSIKKwkJOiAiK3IiKHRtcCksICI9bSIoc2VtLT5jb3VudCkKKwkJOiAiciIoc2VtKSwgIm0iKHNlbS0+Y291bnQpCisJCTogIm1lbW9yeSIpOworCisJcmV0dXJuIHRtcCtkZWx0YTsKK30KKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAvKiBfSTM4Nl9SV1NFTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3NjYXR0ZXJsaXN0LmggYi9pbmNsdWRlL2FzbS1pMzg2L3NjYXR0ZXJsaXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVkNmM5NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvc2NhdHRlcmxpc3QuaApAQCAtMCwwICsxLDIxIEBACisjaWZuZGVmIF9JMzg2X1NDQVRURVJMSVNUX0gKKyNkZWZpbmUgX0kzODZfU0NBVFRFUkxJU1RfSAorCitzdHJ1Y3Qgc2NhdHRlcmxpc3QgeworICAgIHN0cnVjdCBwYWdlCQkqcGFnZTsKKyAgICB1bnNpZ25lZCBpbnQJb2Zmc2V0OworICAgIGRtYV9hZGRyX3QJCWRtYV9hZGRyZXNzOworICAgIHVuc2lnbmVkIGludAlsZW5ndGg7Cit9OworCisvKiBUaGVzZSBtYWNyb3Mgc2hvdWxkIGJlIHVzZWQgYWZ0ZXIgYSBwY2lfbWFwX3NnIGNhbGwgaGFzIGJlZW4gZG9uZQorICogdG8gZ2V0IGJ1cyBhZGRyZXNzZXMgb2YgZWFjaCBvZiB0aGUgU0cgZW50cmllcyBhbmQgdGhlaXIgbGVuZ3Rocy4KKyAqIFlvdSBzaG91bGQgb25seSB3b3JrIHdpdGggdGhlIG51bWJlciBvZiBzZyBlbnRyaWVzIHBjaV9tYXBfc2cKKyAqIHJldHVybnMuCisgKi8KKyNkZWZpbmUgc2dfZG1hX2FkZHJlc3Moc2cpCSgoc2cpLT5kbWFfYWRkcmVzcykKKyNkZWZpbmUgc2dfZG1hX2xlbihzZykJCSgoc2cpLT5sZW5ndGgpCisKKyNkZWZpbmUgSVNBX0RNQV9USFJFU0hPTEQgKDB4MDBmZmZmZmYpCisKKyNlbmRpZiAvKiAhKF9JMzg2X1NDQVRURVJMSVNUX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3NlY2NvbXAuaCBiL2luY2x1ZGUvYXNtLWkzODYvc2VjY29tcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4ZGExOWUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3NlY2NvbXAuaApAQCAtMCwwICsxLDE2IEBACisjaWZuZGVmIF9BU01fU0VDQ09NUF9ICisKKyNpbmNsdWRlIDxsaW51eC90aHJlYWRfaW5mby5oPgorCisjaWZkZWYgVElGXzMyQklUCisjZXJyb3IgInVuZXhwZWN0ZWQgVElGXzMyQklUIG9uIGkzODYiCisjZW5kaWYKKworI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgorCisjZGVmaW5lIF9fTlJfc2VjY29tcF9yZWFkIF9fTlJfcmVhZAorI2RlZmluZSBfX05SX3NlY2NvbXBfd3JpdGUgX19OUl93cml0ZQorI2RlZmluZSBfX05SX3NlY2NvbXBfZXhpdCBfX05SX2V4aXQKKyNkZWZpbmUgX19OUl9zZWNjb21wX3NpZ3JldHVybiBfX05SX3NpZ3JldHVybgorCisjZW5kaWYgLyogX0FTTV9TRUNDT01QX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvc2VjdGlvbnMuaCBiL2luY2x1ZGUvYXNtLWkzODYvc2VjdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGNiYjkyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9zZWN0aW9ucy5oCkBAIC0wLDAgKzEsNyBAQAorI2lmbmRlZiBfSTM4Nl9TRUNUSU9OU19ICisjZGVmaW5lIF9JMzg2X1NFQ1RJT05TX0gKKworLyogbm90aGluZyB0byBzZWUsIG1vdmUgYWxvbmcgKi8KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zZWN0aW9ucy5oPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvc2VnbWVudC5oIGIvaW5jbHVkZS9hc20taTM4Ni9zZWdtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI1ZmY1YgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvc2VnbWVudC5oCkBAIC0wLDAgKzEsMTAxIEBACisjaWZuZGVmIF9BU01fU0VHTUVOVF9ICisjZGVmaW5lIF9BU01fU0VHTUVOVF9ICisKKy8qCisgKiBUaGUgbGF5b3V0IG9mIHRoZSBwZXItQ1BVIEdEVCB1bmRlciBMaW51eDoKKyAqCisgKiAgIDAgLSBudWxsCisgKiAgIDEgLSByZXNlcnZlZAorICogICAyIC0gcmVzZXJ2ZWQKKyAqICAgMyAtIHJlc2VydmVkCisgKgorICogICA0IC0gdW51c2VkCQkJPD09PT0gbmV3IGNhY2hlbGluZQorICogICA1IC0gdW51c2VkCisgKgorICogIC0tLS0tLS0gc3RhcnQgb2YgVExTIChUaHJlYWQtTG9jYWwgU3RvcmFnZSkgc2VnbWVudHM6CisgKgorICogICA2IC0gVExTIHNlZ21lbnQgIzEJCQlbIGdsaWJjJ3MgVExTIHNlZ21lbnQgXQorICogICA3IC0gVExTIHNlZ21lbnQgIzIJCQlbIFdpbmUncyAlZnMgV2luMzIgc2VnbWVudCBdCisgKiAgIDggLSBUTFMgc2VnbWVudCAjMworICogICA5IC0gcmVzZXJ2ZWQKKyAqICAxMCAtIHJlc2VydmVkCisgKiAgMTEgLSByZXNlcnZlZAorICoKKyAqICAtLS0tLS0tIHN0YXJ0IG9mIGtlcm5lbCBzZWdtZW50czoKKyAqCisgKiAgMTIgLSBrZXJuZWwgY29kZSBzZWdtZW50CQk8PT09PSBuZXcgY2FjaGVsaW5lCisgKiAgMTMgLSBrZXJuZWwgZGF0YSBzZWdtZW50CisgKiAgMTQgLSBkZWZhdWx0IHVzZXIgQ1MKKyAqICAxNSAtIGRlZmF1bHQgdXNlciBEUworICogIDE2IC0gVFNTCisgKiAgMTcgLSBMRFQKKyAqICAxOCAtIFBOUEJJT1Mgc3VwcG9ydCAoMTYtPjMyIGdhdGUpCisgKiAgMTkgLSBQTlBCSU9TIHN1cHBvcnQKKyAqICAyMCAtIFBOUEJJT1Mgc3VwcG9ydAorICogIDIxIC0gUE5QQklPUyBzdXBwb3J0CisgKiAgMjIgLSBQTlBCSU9TIHN1cHBvcnQKKyAqICAyMyAtIEFQTSBCSU9TIHN1cHBvcnQKKyAqICAyNCAtIEFQTSBCSU9TIHN1cHBvcnQKKyAqICAyNSAtIEFQTSBCSU9TIHN1cHBvcnQgCisgKgorICogIDI2IC0gRVNQRklYIHNtYWxsIFNTCisgKiAgMjcgLSB1bnVzZWQKKyAqICAyOCAtIHVudXNlZAorICogIDI5IC0gdW51c2VkCisgKiAgMzAgLSB1bnVzZWQKKyAqICAzMSAtIFRTUyBmb3IgZG91YmxlIGZhdWx0IGhhbmRsZXIKKyAqLworI2RlZmluZSBHRFRfRU5UUllfVExTX0VOVFJJRVMJMworI2RlZmluZSBHRFRfRU5UUllfVExTX01JTgk2CisjZGVmaW5lIEdEVF9FTlRSWV9UTFNfTUFYIAkoR0RUX0VOVFJZX1RMU19NSU4gKyBHRFRfRU5UUllfVExTX0VOVFJJRVMgLSAxKQorCisjZGVmaW5lIFRMU19TSVpFIChHRFRfRU5UUllfVExTX0VOVFJJRVMgKiA4KQorCisjZGVmaW5lIEdEVF9FTlRSWV9ERUZBVUxUX1VTRVJfQ1MJMTQKKyNkZWZpbmUgX19VU0VSX0NTIChHRFRfRU5UUllfREVGQVVMVF9VU0VSX0NTICogOCArIDMpCisKKyNkZWZpbmUgR0RUX0VOVFJZX0RFRkFVTFRfVVNFUl9EUwkxNQorI2RlZmluZSBfX1VTRVJfRFMgKEdEVF9FTlRSWV9ERUZBVUxUX1VTRVJfRFMgKiA4ICsgMykKKworI2RlZmluZSBHRFRfRU5UUllfS0VSTkVMX0JBU0UJMTIKKworI2RlZmluZSBHRFRfRU5UUllfS0VSTkVMX0NTCQkoR0RUX0VOVFJZX0tFUk5FTF9CQVNFICsgMCkKKyNkZWZpbmUgX19LRVJORUxfQ1MgKEdEVF9FTlRSWV9LRVJORUxfQ1MgKiA4KQorCisjZGVmaW5lIEdEVF9FTlRSWV9LRVJORUxfRFMJCShHRFRfRU5UUllfS0VSTkVMX0JBU0UgKyAxKQorI2RlZmluZSBfX0tFUk5FTF9EUyAoR0RUX0VOVFJZX0tFUk5FTF9EUyAqIDgpCisKKyNkZWZpbmUgR0RUX0VOVFJZX1RTUwkJCShHRFRfRU5UUllfS0VSTkVMX0JBU0UgKyA0KQorI2RlZmluZSBHRFRfRU5UUllfTERUCQkJKEdEVF9FTlRSWV9LRVJORUxfQkFTRSArIDUpCisKKyNkZWZpbmUgR0RUX0VOVFJZX1BOUEJJT1NfQkFTRQkJKEdEVF9FTlRSWV9LRVJORUxfQkFTRSArIDYpCisjZGVmaW5lIEdEVF9FTlRSWV9BUE1CSU9TX0JBU0UJCShHRFRfRU5UUllfS0VSTkVMX0JBU0UgKyAxMSkKKworI2RlZmluZSBHRFRfRU5UUllfRVNQRklYX1NTCQkoR0RUX0VOVFJZX0tFUk5FTF9CQVNFICsgMTQpCisjZGVmaW5lIF9fRVNQRklYX1NTIChHRFRfRU5UUllfRVNQRklYX1NTICogOCkKKworI2RlZmluZSBHRFRfRU5UUllfRE9VQkxFRkFVTFRfVFNTCTMxCisKKy8qCisgKiBUaGUgR0RUIGhhcyAzMiBlbnRyaWVzCisgKi8KKyNkZWZpbmUgR0RUX0VOVFJJRVMgMzIKKworI2RlZmluZSBHRFRfU0laRSAoR0RUX0VOVFJJRVMgKiA4KQorCisvKiBTaW1wbGUgYW5kIHNtYWxsIEdEVCBlbnRyaWVzIGZvciBib290aW5nIG9ubHkgKi8KKworI2RlZmluZSBHRFRfRU5UUllfQk9PVF9DUwkJMgorI2RlZmluZSBfX0JPT1RfQ1MJKEdEVF9FTlRSWV9CT09UX0NTICogOCkKKworI2RlZmluZSBHRFRfRU5UUllfQk9PVF9EUwkJKEdEVF9FTlRSWV9CT09UX0NTICsgMSkKKyNkZWZpbmUgX19CT09UX0RTCShHRFRfRU5UUllfQk9PVF9EUyAqIDgpCisKKy8qCisgKiBUaGUgaW50ZXJydXB0IGRlc2NyaXB0b3IgdGFibGUgaGFzIHJvb20gZm9yIDI1NiBpZHQncywKKyAqIHRoZSBnbG9iYWwgZGVzY3JpcHRvciB0YWJsZSBpcyBkZXBlbmRlbnQgb24gdGhlIG51bWJlcgorICogb2YgdGFza3Mgd2UgY2FuIGhhdmUuLgorICovCisjZGVmaW5lIElEVF9FTlRSSUVTIDI1NgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvc2VtYXBob3JlLmggYi9pbmNsdWRlL2FzbS1pMzg2L3NlbWFwaG9yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNTYzZGEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3NlbWFwaG9yZS5oCkBAIC0wLDAgKzEsMTk0IEBACisjaWZuZGVmIF9JMzg2X1NFTUFQSE9SRV9ICisjZGVmaW5lIF9JMzg2X1NFTUFQSE9SRV9ICisKKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKy8qCisgKiBTTVAtIGFuZCBpbnRlcnJ1cHQtc2FmZSBzZW1hcGhvcmVzLi4KKyAqCisgKiAoQykgQ29weXJpZ2h0IDE5OTYgTGludXMgVG9ydmFsZHMKKyAqCisgKiBNb2RpZmllZCAxOTk2LTEyLTIzIGJ5IERhdmUgR3JvdGhlIDxkYXZlQGdjb20uY29tPiB0byBmaXggYnVncyBpbgorICogICAgICAgICAgICAgICAgICAgICB0aGUgb3JpZ2luYWwgY29kZSBhbmQgdG8gbWFrZSBzZW1hcGhvcmUgd2FpdHMKKyAqICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0aWJsZSBzbyB0aGF0IHByb2Nlc3NlcyB3YWl0aW5nIG9uCisgKiAgICAgICAgICAgICAgICAgICAgIHNlbWFwaG9yZXMgY2FuIGJlIGtpbGxlZC4KKyAqIE1vZGlmaWVkIDE5OTktMDItMTQgYnkgQW5kcmVhIEFyY2FuZ2VsaSwgc3BsaXQgdGhlIHNjaGVkLmMgaGVscGVyCisgKgkJICAgICAgIGZ1bmN0aW9ucyBpbiBhc20vc2VtcGFob3JlLWhlbHBlci5oIHdoaWxlIGZpeGluZyBhCisgKgkJICAgICAgIHBvdGVudGlhbCBhbmQgc3VidGxlIHJhY2UgZGlzY292ZXJlZCBieSBVbHJpY2ggU2NobWlkCisgKgkJICAgICAgIGluIGRvd25faW50ZXJydXB0aWJsZSgpLiBTaW5jZSBJIHN0YXJ0ZWQgdG8gcGxheSBoZXJlIEkKKyAqCQkgICAgICAgYWxzbyBpbXBsZW1lbnRlZCB0aGUgYHRyeWxvY2snIHNlbWFwaG9yZSBvcGVyYXRpb24uCisgKiAgICAgICAgICAxOTk5LTA3LTAyIEFydHVyIFNrYXdpbmEgPHNrYXdpbmFAZ2VvY2l0aWVzLmNvbT4KKyAqICAgICAgICAgICAgICAgICAgICAgT3B0aW1pemVkICIwKGVjeCkiIC0+ICIoZWN4KSIgKHRoZSBhc3NlbWJsZXIgZG9lcyBub3QKKyAqICAgICAgICAgICAgICAgICAgICAgZG8gdGhpcykuIENoYW5nZWQgY2FsbGluZyBzZXF1ZW5jZXMgZnJvbSBwdXNoL2ptcCB0bworICogICAgICAgICAgICAgICAgICAgICB0cmFkaXRpb25hbCBjYWxsL3JldC4KKyAqIE1vZGlmaWVkIDIwMDEtMDEtMDEgQW5kcmVhcyBGcmFuY2sgPGFmcmFuY2tAZ214LmRlPgorICoJCSAgICAgICBTb21lIGhhY2tzIHRvIGVuc3VyZSBjb21wYXRpYmlsaXR5IHdpdGggcmVjZW50CisgKgkJICAgICAgIEdDQyBzbmFwc2hvdHMsIHRvIGF2b2lkIHN0YWNrIGNvcnJ1cHRpb24gd2hlbiBjb21waWxpbmcKKyAqCQkgICAgICAgd2l0aCAtZm9taXQtZnJhbWUtcG9pbnRlci4gSXQncyBub3Qgc3VyZSBpZiB0aGlzIHdpbGwKKyAqCQkgICAgICAgYmUgZml4ZWQgaW4gR0NDLCBhcyBvdXIgcHJldmlvdXMgaW1wbGVtZW50YXRpb24gd2FzIGEKKyAqCQkgICAgICAgYml0IGR1YmlvdXMuCisgKgorICogSWYgeW91IHdvdWxkIGxpa2UgdG8gc2VlIGFuIGFuYWx5c2lzIG9mIHRoaXMgaW1wbGVtZW50YXRpb24sIHBsZWFzZQorICogZnRwIHRvIGdjb20uY29tIGFuZCBkb3dubG9hZCB0aGUgZmlsZQorICogL3B1Yi9saW51eC9zcmMvc2VtYXBob3JlL3NlbWFwaG9yZS0yLjAuMjQudGFyLmd6LgorICoKKyAqLworCisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KKworc3RydWN0IHNlbWFwaG9yZSB7CisJYXRvbWljX3QgY291bnQ7CisJaW50IHNsZWVwZXJzOworCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7Cit9OworCisKKyNkZWZpbmUgX19TRU1BUEhPUkVfSU5JVElBTElaRVIobmFtZSwgbikJCQkJXAorewkJCQkJCQkJCVwKKwkuY291bnQJCT0gQVRPTUlDX0lOSVQobiksCQkJCVwKKwkuc2xlZXBlcnMJPSAwLAkJCQkJCVwKKwkud2FpdAkJPSBfX1dBSVRfUVVFVUVfSEVBRF9JTklUSUFMSVpFUigobmFtZSkud2FpdCkJXAorfQorCisjZGVmaW5lIF9fTVVURVhfSU5JVElBTElaRVIobmFtZSkgXAorCV9fU0VNQVBIT1JFX0lOSVRJQUxJWkVSKG5hbWUsMSkKKworI2RlZmluZSBfX0RFQ0xBUkVfU0VNQVBIT1JFX0dFTkVSSUMobmFtZSxjb3VudCkgXAorCXN0cnVjdCBzZW1hcGhvcmUgbmFtZSA9IF9fU0VNQVBIT1JFX0lOSVRJQUxJWkVSKG5hbWUsY291bnQpCisKKyNkZWZpbmUgREVDTEFSRV9NVVRFWChuYW1lKSBfX0RFQ0xBUkVfU0VNQVBIT1JFX0dFTkVSSUMobmFtZSwxKQorI2RlZmluZSBERUNMQVJFX01VVEVYX0xPQ0tFRChuYW1lKSBfX0RFQ0xBUkVfU0VNQVBIT1JFX0dFTkVSSUMobmFtZSwwKQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2VtYV9pbml0IChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0sIGludCB2YWwpCit7CisvKgorICoJKnNlbSA9IChzdHJ1Y3Qgc2VtYXBob3JlKV9fU0VNQVBIT1JFX0lOSVRJQUxJWkVSKCgqc2VtKSx2YWwpOworICoKKyAqIGknZCByYXRoZXIgdXNlIHRoZSBtb3JlIGZsZXhpYmxlIGluaXRpYWxpemF0aW9uIGFib3ZlLCBidXQgc2FkbHkKKyAqIEdDQyAyLjcuMi4zIGVtaXRzIGEgYm9ndXMgd2FybmluZy4gRUdDUyBkb2Vzbid0LiBPaCB3ZWxsLgorICovCisJYXRvbWljX3NldCgmc2VtLT5jb3VudCwgdmFsKTsKKwlzZW0tPnNsZWVwZXJzID0gMDsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzZW0tPndhaXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9NVVRFWCAoc3RydWN0IHNlbWFwaG9yZSAqc2VtKQoreworCXNlbWFfaW5pdChzZW0sIDEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9NVVRFWF9MT0NLRUQgKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKK3sKKwlzZW1hX2luaXQoc2VtLCAwKTsKK30KKworZmFzdGNhbGwgdm9pZCBfX2Rvd25fZmFpbGVkKHZvaWQgLyogc3BlY2lhbCByZWdpc3RlciBjYWxsaW5nIGNvbnZlbnRpb24gKi8pOworZmFzdGNhbGwgaW50ICBfX2Rvd25fZmFpbGVkX2ludGVycnVwdGlibGUodm9pZCAgLyogcGFyYW1zIGluIHJlZ2lzdGVycyAqLyk7CitmYXN0Y2FsbCBpbnQgIF9fZG93bl9mYWlsZWRfdHJ5bG9jayh2b2lkICAvKiBwYXJhbXMgaW4gcmVnaXN0ZXJzICovKTsKK2Zhc3RjYWxsIHZvaWQgX191cF93YWtldXAodm9pZCAvKiBzcGVjaWFsIHJlZ2lzdGVyIGNhbGxpbmcgY29udmVudGlvbiAqLyk7CisKKy8qCisgKiBUaGlzIGlzIHVnbHksIGJ1dCB3ZSB3YW50IHRoZSBkZWZhdWx0IGNhc2UgdG8gZmFsbCB0aHJvdWdoLgorICogIl9fZG93bl9mYWlsZWQiIGlzIGEgc3BlY2lhbCBhc20gaGFuZGxlciB0aGF0IGNhbGxzIHRoZSBDCisgKiByb3V0aW5lIHRoYXQgYWN0dWFsbHkgd2FpdHMuIFNlZSBhcmNoL2kzODYva2VybmVsL3NlbWFwaG9yZS5jCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBkb3duKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCit7CisJbWlnaHRfc2xlZXAoKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJIiMgYXRvbWljIGRvd24gb3BlcmF0aW9uXG5cdCIKKwkJTE9DSyAiZGVjbCAlMFxuXHQiICAgICAvKiAtLXNlbS0+Y291bnQgKi8KKwkJImpzIDJmXG4iCisJCSIxOlxuIgorCQlMT0NLX1NFQ1RJT05fU1RBUlQoIiIpCisJCSIyOlx0bGVhICUwLCUlZWF4XG5cdCIKKwkJImNhbGwgX19kb3duX2ZhaWxlZFxuXHQiCisJCSJqbXAgMWJcbiIKKwkJTE9DS19TRUNUSU9OX0VORAorCQk6Ij1tIiAoc2VtLT5jb3VudCkKKwkJOgorCQk6Im1lbW9yeSIsImF4Iik7Cit9CisKKy8qCisgKiBJbnRlcnJ1cHRpYmxlIHRyeSB0byBhY3F1aXJlIGEgc2VtYXBob3JlLiAgSWYgd2Ugb2J0YWluZWQKKyAqIGl0LCByZXR1cm4gemVyby4gIElmIHdlIHdlcmUgaW50ZXJydXB0ZWQsIHJldHVybnMgLUVJTlRSCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGRvd25faW50ZXJydXB0aWJsZShzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQoreworCWludCByZXN1bHQ7CisKKwltaWdodF9zbGVlcCgpOworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkiIyBhdG9taWMgaW50ZXJydXB0aWJsZSBkb3duIG9wZXJhdGlvblxuXHQiCisJCUxPQ0sgImRlY2wgJTFcblx0IiAgICAgLyogLS1zZW0tPmNvdW50ICovCisJCSJqcyAyZlxuXHQiCisJCSJ4b3JsICUwLCUwXG4iCisJCSIxOlxuIgorCQlMT0NLX1NFQ1RJT05fU1RBUlQoIiIpCisJCSIyOlx0bGVhICUxLCUlZWF4XG5cdCIKKwkJImNhbGwgX19kb3duX2ZhaWxlZF9pbnRlcnJ1cHRpYmxlXG5cdCIKKwkJImptcCAxYlxuIgorCQlMT0NLX1NFQ1RJT05fRU5ECisJCToiPWEiIChyZXN1bHQpLCAiPW0iIChzZW0tPmNvdW50KQorCQk6CisJCToibWVtb3J5Iik7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIE5vbi1ibG9ja2luZ2x5IGF0dGVtcHQgdG8gZG93bigpIGEgc2VtYXBob3JlLgorICogUmV0dXJucyB6ZXJvIGlmIHdlIGFjcXVpcmVkIGl0CisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGRvd25fdHJ5bG9jayhzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQoreworCWludCByZXN1bHQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJIiMgYXRvbWljIGludGVycnVwdGlibGUgZG93biBvcGVyYXRpb25cblx0IgorCQlMT0NLICJkZWNsICUxXG5cdCIgICAgIC8qIC0tc2VtLT5jb3VudCAqLworCQkianMgMmZcblx0IgorCQkieG9ybCAlMCwlMFxuIgorCQkiMTpcbiIKKwkJTE9DS19TRUNUSU9OX1NUQVJUKCIiKQorCQkiMjpcdGxlYSAlMSwlJWVheFxuXHQiCisJCSJjYWxsIF9fZG93bl9mYWlsZWRfdHJ5bG9ja1xuXHQiCisJCSJqbXAgMWJcbiIKKwkJTE9DS19TRUNUSU9OX0VORAorCQk6Ij1hIiAocmVzdWx0KSwgIj1tIiAoc2VtLT5jb3VudCkKKwkJOgorCQk6Im1lbW9yeSIpOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBOb3RlISBUaGlzIGlzIHN1YnRsZS4gV2UganVtcCB0byB3YWtlIHBlb3BsZSB1cCBvbmx5IGlmCisgKiB0aGUgc2VtYXBob3JlIHdhcyBuZWdhdGl2ZSAoPT0gc29tZWJvZHkgd2FzIHdhaXRpbmcgb24gaXQpLgorICogVGhlIGRlZmF1bHQgY2FzZSAobm8gY29udGVudGlvbikgd2lsbCByZXN1bHQgaW4gTk8KKyAqIGp1bXBzIGZvciBib3RoIGRvd24oKSBhbmQgdXAoKS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHVwKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSIjIGF0b21pYyB1cCBvcGVyYXRpb25cblx0IgorCQlMT0NLICJpbmNsICUwXG5cdCIgICAgIC8qICsrc2VtLT5jb3VudCAqLworCQkiamxlIDJmXG4iCisJCSIxOlxuIgorCQlMT0NLX1NFQ1RJT05fU1RBUlQoIiIpCisJCSIyOlx0bGVhICUwLCUlZWF4XG5cdCIKKwkJImNhbGwgX191cF93YWtldXBcblx0IgorCQkiam1wIDFiXG4iCisJCUxPQ0tfU0VDVElPTl9FTkQKKwkJIi5zdWJzZWN0aW9uIDBcbiIKKwkJOiI9bSIgKHNlbS0+Y291bnQpCisJCToKKwkJOiJtZW1vcnkiLCJheCIpOworfQorCisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9zZW1idWYuaCBiL2luY2x1ZGUvYXNtLWkzODYvc2VtYnVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzIzODM1MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvc2VtYnVmLmgKQEAgLTAsMCArMSwyNSBAQAorI2lmbmRlZiBfSTM4Nl9TRU1CVUZfSAorI2RlZmluZSBfSTM4Nl9TRU1CVUZfSAorCisvKiAKKyAqIFRoZSBzZW1pZDY0X2RzIHN0cnVjdHVyZSBmb3IgaTM4NiBhcmNoaXRlY3R1cmUuCisgKiBOb3RlIGV4dHJhIHBhZGRpbmcgYmVjYXVzZSB0aGlzIHN0cnVjdHVyZSBpcyBwYXNzZWQgYmFjayBhbmQgZm9ydGgKKyAqIGJldHdlZW4ga2VybmVsIGFuZCB1c2VyIHNwYWNlLgorICoKKyAqIFBhZCBzcGFjZSBpcyBsZWZ0IGZvcjoKKyAqIC0gNjQtYml0IHRpbWVfdCB0byBzb2x2ZSB5MjAzOCBwcm9ibGVtCisgKiAtIDIgbWlzY2VsbGFuZW91cyAzMi1iaXQgdmFsdWVzCisgKi8KKworc3RydWN0IHNlbWlkNjRfZHMgeworCXN0cnVjdCBpcGM2NF9wZXJtIHNlbV9wZXJtOwkJLyogcGVybWlzc2lvbnMgLi4gc2VlIGlwYy5oICovCisJX19rZXJuZWxfdGltZV90CXNlbV9vdGltZTsJCS8qIGxhc3Qgc2Vtb3AgdGltZSAqLworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQxOworCV9fa2VybmVsX3RpbWVfdAlzZW1fY3RpbWU7CQkvKiBsYXN0IGNoYW5nZSB0aW1lICovCisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDI7CisJdW5zaWduZWQgbG9uZwlzZW1fbnNlbXM7CQkvKiBuby4gb2Ygc2VtYXBob3JlcyBpbiBhcnJheSAqLworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQzOworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQ0OworfTsKKworI2VuZGlmIC8qIF9JMzg2X1NFTUJVRl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3NlcmlhbC5oIGIvaW5jbHVkZS9hc20taTM4Ni9zZXJpYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWRkZWNjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9zZXJpYWwuaApAQCAtMCwwICsxLDEzMCBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWkzODYvc2VyaWFsLmgKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKy8qCisgKiBUaGlzIGFzc3VtZXMgeW91IGhhdmUgYSAxLjg0MzIgTUh6IGNsb2NrIGZvciB5b3VyIFVBUlQuCisgKgorICogSXQnZCBiZSBuaWNlIGlmIHNvbWVvbmUgYnVpbHQgYSBzZXJpYWwgY2FyZCB3aXRoIGEgMjQuNTc2IE1IegorICogY2xvY2ssIHNpbmNlIHRoZSAxNjU1MEEgaXMgY2FwYWJsZSBvZiBoYW5kbGluZyBhIHRvcCBzcGVlZCBvZiAxLjUKKyAqIG1lZ2FiaXRzL3NlY29uZDsgYnV0IHRoaXMgcmVxdWlyZXMgdGhlIGZhc3RlciBjbG9jay4KKyAqLworI2RlZmluZSBCQVNFX0JBVUQgKCAxODQzMjAwIC8gMTYgKQorCisvKiBTdGFuZGFyZCBDT00gZmxhZ3MgKGV4Y2VwdCBmb3IgQ09NNCwgYmVjYXVzZSBvZiB0aGUgODUxNCBwcm9ibGVtKSAqLworI2lmZGVmIENPTkZJR19TRVJJQUxfREVURUNUX0lSUQorI2RlZmluZSBTVERfQ09NX0ZMQUdTIChBU1lOQ19CT09UX0FVVE9DT05GIHwgQVNZTkNfU0tJUF9URVNUIHwgQVNZTkNfQVVUT19JUlEpCisjZGVmaW5lIFNURF9DT000X0ZMQUdTIChBU1lOQ19CT09UX0FVVE9DT05GIHwgQVNZTkNfQVVUT19JUlEpCisjZWxzZQorI2RlZmluZSBTVERfQ09NX0ZMQUdTIChBU1lOQ19CT09UX0FVVE9DT05GIHwgQVNZTkNfU0tJUF9URVNUKQorI2RlZmluZSBTVERfQ09NNF9GTEFHUyBBU1lOQ19CT09UX0FVVE9DT05GCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19TRVJJQUxfTUFOWV9QT1JUUworI2RlZmluZSBGT1VSUE9SVF9GTEFHUyBBU1lOQ19GT1VSUE9SVAorI2RlZmluZSBBQ0NFTlRfRkxBR1MgMAorI2RlZmluZSBCT0NBX0ZMQUdTIDAKKyNkZWZpbmUgSFVCNl9GTEFHUyAwCisjZW5kaWYKKworI2RlZmluZSBNQ0FfQ09NX0ZMQUdTCShTVERfQ09NX0ZMQUdTfEFTWU5DX0JPT1RfT05MWU1DQSkKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgZGVmaW5lIHRoZSBhY2Nlc3MgbWV0aG9kcyBmb3IgdGhlIEhVQjYgY2FyZC4gQWxsCisgKiBhY2Nlc3MgaXMgdGhyb3VnaCB0d28gcG9ydHMgZm9yIGFsbCAyNCBwb3NzaWJsZSBjaGlwcy4gVGhlIGNhcmQgaXMKKyAqIHNlbGVjdGVkIHRocm91Z2ggdGhlIGhpZ2ggMiBiaXRzLCB0aGUgcG9ydCBvbiB0aGF0IGNhcmQgd2l0aCB0aGUKKyAqICJtaWRkbGUiIDMgYml0cywgYW5kIHRoZSByZWdpc3RlciBvbiB0aGF0IHBvcnQgd2l0aCB0aGUgYm90dG9tCisgKiAzIGJpdHMuCisgKgorICogV2hpbGUgdGhlIGFjY2VzcyBwb3J0IGFuZCBpbnRlcnJ1cHQgaXMgY29uZmlndXJhYmxlLCB0aGUgZGVmYXVsdAorICogcG9ydCBsb2NhdGlvbnMgYXJlIDB4MzAyIGZvciB0aGUgcG9ydCBjb250cm9sIHJlZ2lzdGVyLCBhbmQgMHgzMDMKKyAqIGZvciB0aGUgZGF0YSByZWFkL3dyaXRlIHJlZ2lzdGVyLiBOb3JtYWxseSwgdGhlIGludGVycnVwdCBpcyBhdCBpcnEzCisgKiBidXQgY2FuIGJlIGFueXRoaW5nIGZyb20gMyB0byA3IGluY2x1c2l2ZS4gTm90ZSB0aGF0IHVzaW5nIDMgd2lsbAorICogcmVxdWlyZSBkaXNhYmxpbmcgY29tMi4KKyAqLworCisjZGVmaW5lIENfUChjYXJkLHBvcnQpICgoKGNhcmQpPDw2fChwb3J0KTw8MykgKyAxKQorCisjZGVmaW5lIFNURF9TRVJJQUxfUE9SVF9ERUZOUwkJCVwKKwkvKiBVQVJUIENMSyAgIFBPUlQgSVJRICAgICBGTEFHUyAgICAgICAgKi8JCQlcCisJeyAwLCBCQVNFX0JBVUQsIDB4M0Y4LCA0LCBTVERfQ09NX0ZMQUdTIH0sCS8qIHR0eVMwICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgyRjgsIDMsIFNURF9DT01fRkxBR1MgfSwJLyogdHR5UzEgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDNFOCwgNCwgU1REX0NPTV9GTEFHUyB9LAkvKiB0dHlTMiAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MkU4LCAzLCBTVERfQ09NNF9GTEFHUyB9LAkvKiB0dHlTMyAqLworCisKKyNpZmRlZiBDT05GSUdfU0VSSUFMX01BTllfUE9SVFMKKyNkZWZpbmUgRVhUUkFfU0VSSUFMX1BPUlRfREVGTlMJCQlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MUEwLCA5LCBGT1VSUE9SVF9GTEFHUyB9LCAJLyogdHR5UzQgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDFBOCwgOSwgRk9VUlBPUlRfRkxBR1MgfSwJLyogdHR5UzUgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDFCMCwgOSwgRk9VUlBPUlRfRkxBR1MgfSwJLyogdHR5UzYgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDFCOCwgOSwgRk9VUlBPUlRfRkxBR1MgfSwJLyogdHR5UzcgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDJBMCwgNSwgRk9VUlBPUlRfRkxBR1MgfSwJLyogdHR5UzggKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDJBOCwgNSwgRk9VUlBPUlRfRkxBR1MgfSwJLyogdHR5UzkgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDJCMCwgNSwgRk9VUlBPUlRfRkxBR1MgfSwJLyogdHR5UzEwICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgyQjgsIDUsIEZPVVJQT1JUX0ZMQUdTIH0sCS8qIHR0eVMxMSAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MzMwLCA0LCBBQ0NFTlRfRkxBR1MgfSwJLyogdHR5UzEyICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgzMzgsIDQsIEFDQ0VOVF9GTEFHUyB9LAkvKiB0dHlTMTMgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDAwMCwgMCwgMCB9LAkvKiB0dHlTMTQgKHNwYXJlKSAqLwkJXAorCXsgMCwgQkFTRV9CQVVELCAweDAwMCwgMCwgMCB9LAkvKiB0dHlTMTUgKHNwYXJlKSAqLwkJXAorCXsgMCwgQkFTRV9CQVVELCAweDEwMCwgMTIsIEJPQ0FfRkxBR1MgfSwJLyogdHR5UzE2ICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgxMDgsIDEyLCBCT0NBX0ZMQUdTIH0sCS8qIHR0eVMxNyAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MTEwLCAxMiwgQk9DQV9GTEFHUyB9LAkvKiB0dHlTMTggKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDExOCwgMTIsIEJPQ0FfRkxBR1MgfSwJLyogdHR5UzE5ICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgxMjAsIDEyLCBCT0NBX0ZMQUdTIH0sCS8qIHR0eVMyMCAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MTI4LCAxMiwgQk9DQV9GTEFHUyB9LAkvKiB0dHlTMjEgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDEzMCwgMTIsIEJPQ0FfRkxBR1MgfSwJLyogdHR5UzIyICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgxMzgsIDEyLCBCT0NBX0ZMQUdTIH0sCS8qIHR0eVMyMyAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MTQwLCAxMiwgQk9DQV9GTEFHUyB9LAkvKiB0dHlTMjQgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDE0OCwgMTIsIEJPQ0FfRkxBR1MgfSwJLyogdHR5UzI1ICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgxNTAsIDEyLCBCT0NBX0ZMQUdTIH0sCS8qIHR0eVMyNiAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MTU4LCAxMiwgQk9DQV9GTEFHUyB9LAkvKiB0dHlTMjcgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDE2MCwgMTIsIEJPQ0FfRkxBR1MgfSwJLyogdHR5UzI4ICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgxNjgsIDEyLCBCT0NBX0ZMQUdTIH0sCS8qIHR0eVMyOSAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MTcwLCAxMiwgQk9DQV9GTEFHUyB9LAkvKiB0dHlTMzAgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDE3OCwgMTIsIEJPQ0FfRkxBR1MgfSwJLyogdHR5UzMxICovCisjZWxzZQorI2RlZmluZSBFWFRSQV9TRVJJQUxfUE9SVF9ERUZOUworI2VuZGlmCisKKy8qIFlvdSBjYW4gaGF2ZSB1cCB0byBmb3VyIEhVQjYncyBpbiB0aGUgc3lzdGVtLCBidXQgSSd2ZSBvbmx5CisgKiBpbmNsdWRlZCB0d28gY2FyZHMgaGVyZSBmb3IgYSB0b3RhbCBvZiB0d2VsdmUgcG9ydHMuCisgKi8KKyNpZiAoZGVmaW5lZChDT05GSUdfSFVCNikgJiYgZGVmaW5lZChDT05GSUdfU0VSSUFMX01BTllfUE9SVFMpKQorI2RlZmluZSBIVUI2X1NFUklBTF9QT1JUX0RGTlMJCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgzMDIsIDMsIEhVQjZfRkxBR1MsIENfUCgwLDApIH0sICAvKiB0dHlTMzIgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDMwMiwgMywgSFVCNl9GTEFHUywgQ19QKDAsMSkgfSwgIC8qIHR0eVMzMyAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MzAyLCAzLCBIVUI2X0ZMQUdTLCBDX1AoMCwyKSB9LCAgLyogdHR5UzM0ICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgzMDIsIDMsIEhVQjZfRkxBR1MsIENfUCgwLDMpIH0sICAvKiB0dHlTMzUgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDMwMiwgMywgSFVCNl9GTEFHUywgQ19QKDAsNCkgfSwgIC8qIHR0eVMzNiAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MzAyLCAzLCBIVUI2X0ZMQUdTLCBDX1AoMCw1KSB9LCAgLyogdHR5UzM3ICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgzMDIsIDMsIEhVQjZfRkxBR1MsIENfUCgxLDApIH0sICAvKiB0dHlTMzggKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDMwMiwgMywgSFVCNl9GTEFHUywgQ19QKDEsMSkgfSwgIC8qIHR0eVMzOSAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MzAyLCAzLCBIVUI2X0ZMQUdTLCBDX1AoMSwyKSB9LCAgLyogdHR5UzQwICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgzMDIsIDMsIEhVQjZfRkxBR1MsIENfUCgxLDMpIH0sICAvKiB0dHlTNDEgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDMwMiwgMywgSFVCNl9GTEFHUywgQ19QKDEsNCkgfSwgIC8qIHR0eVM0MiAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MzAyLCAzLCBIVUI2X0ZMQUdTLCBDX1AoMSw1KSB9LCAgLyogdHR5UzQzICovCisjZWxzZQorI2RlZmluZSBIVUI2X1NFUklBTF9QT1JUX0RGTlMKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01DQQorI2RlZmluZSBNQ0FfU0VSSUFMX1BPUlRfREZOUwkJCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgzMjIwLCAzLCBNQ0FfQ09NX0ZMQUdTIH0sCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgzMjI4LCAzLCBNQ0FfQ09NX0ZMQUdTIH0sCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHg0MjIwLCAzLCBNQ0FfQ09NX0ZMQUdTIH0sCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHg0MjI4LCAzLCBNQ0FfQ09NX0ZMQUdTIH0sCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHg1MjIwLCAzLCBNQ0FfQ09NX0ZMQUdTIH0sCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHg1MjI4LCAzLCBNQ0FfQ09NX0ZMQUdTIH0sCisjZWxzZQorI2RlZmluZSBNQ0FfU0VSSUFMX1BPUlRfREZOUworI2VuZGlmCisKKyNkZWZpbmUgU0VSSUFMX1BPUlRfREZOUwkJXAorCVNURF9TRVJJQUxfUE9SVF9ERUZOUwkJXAorCUVYVFJBX1NFUklBTF9QT1JUX0RFRk5TCQlcCisJSFVCNl9TRVJJQUxfUE9SVF9ERk5TCQlcCisJTUNBX1NFUklBTF9QT1JUX0RGTlMKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9zZXR1cC5oIGIvaW5jbHVkZS9hc20taTM4Ni9zZXR1cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4MTRiNTQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3NldHVwLmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqCUp1c3QgYSBwbGFjZSBob2xkZXIuIFdlIGRvbid0IHdhbnQgdG8gaGF2ZSB0byB0ZXN0IHg4NiBiZWZvcmUKKyAqCXdlIGluY2x1ZGUgc3R1ZmYKKyAqLworCisjaWZuZGVmIF9pMzg2X1NFVFVQX0gKKyNkZWZpbmUgX2kzODZfU0VUVVBfSAorCisjZGVmaW5lIFBGTl9VUCh4KQkoKCh4KSArIFBBR0VfU0laRS0xKSA+PiBQQUdFX1NISUZUKQorI2RlZmluZSBQRk5fRE9XTih4KQkoKHgpID4+IFBBR0VfU0hJRlQpCisjZGVmaW5lIFBGTl9QSFlTKHgpCSgoeCkgPDwgUEFHRV9TSElGVCkKKworLyoKKyAqIFJlc2VydmVkIHNwYWNlIGZvciB2bWFsbG9jIGFuZCBpb21hcCAtIGRlZmluZWQgaW4gYXNtL3BhZ2UuaAorICovCisjZGVmaW5lIE1BWE1FTV9QRk4JUEZOX0RPV04oTUFYTUVNKQorI2RlZmluZSBNQVhfTk9OUEFFX1BGTgkoMSA8PCAyMCkKKworI2RlZmluZSBQQVJBTV9TSVpFIDIwNDgKKyNkZWZpbmUgQ09NTUFORF9MSU5FX1NJWkUgMjU2CisKKyNkZWZpbmUgT0xEX0NMX01BR0lDX0FERFIJMHg5MDAyMAorI2RlZmluZSBPTERfQ0xfTUFHSUMJCTB4QTMzRgorI2RlZmluZSBPTERfQ0xfQkFTRV9BRERSCTB4OTAwMDAKKyNkZWZpbmUgT0xEX0NMX09GRlNFVAkJMHg5MDAyMgorI2RlZmluZSBORVdfQ0xfUE9JTlRFUgkJMHgyMjgJLyogUmVsYXRpdmUgdG8gcmVhbCBtb2RlIGRhdGEgKi8KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKy8qCisgKiBUaGlzIGlzIHNldCB1cCBieSB0aGUgc2V0dXAtcm91dGluZSBhdCBib290LXRpbWUKKyAqLworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgYm9vdF9wYXJhbXNbUEFSQU1fU0laRV07CisKKyNkZWZpbmUgUEFSQU0JKGJvb3RfcGFyYW1zKQorI2RlZmluZSBTQ1JFRU5fSU5GTyAoKihzdHJ1Y3Qgc2NyZWVuX2luZm8gKikgKFBBUkFNKzApKQorI2RlZmluZSBFWFRfTUVNX0sgKCoodW5zaWduZWQgc2hvcnQgKikgKFBBUkFNKzIpKQorI2RlZmluZSBBTFRfTUVNX0sgKCoodW5zaWduZWQgbG9uZyAqKSAoUEFSQU0rMHgxZTApKQorI2RlZmluZSBFODIwX01BUF9OUiAoKihjaGFyKikgKFBBUkFNK0U4MjBOUikpCisjZGVmaW5lIEU4MjBfTUFQICAgICgoc3RydWN0IGU4MjBlbnRyeSAqKSAoUEFSQU0rRTgyME1BUCkpCisjZGVmaW5lIEFQTV9CSU9TX0lORk8gKCooc3RydWN0IGFwbV9iaW9zX2luZm8gKikgKFBBUkFNKzB4NDApKQorI2RlZmluZSBJU1RfSU5GTyAgICgqKHN0cnVjdCBpc3RfaW5mbyAqKSAoUEFSQU0rMHg2MCkpCisjZGVmaW5lIERSSVZFX0lORk8gKCooc3RydWN0IGRyaXZlX2luZm9fc3RydWN0ICopIChQQVJBTSsweDgwKSkKKyNkZWZpbmUgU1lTX0RFU0NfVEFCTEUgKCooc3RydWN0IHN5c19kZXNjX3RhYmxlX3N0cnVjdCopKFBBUkFNKzB4YTApKQorI2RlZmluZSBFRklfU1lTVEFCICgoZWZpX3N5c3RlbV90YWJsZV90ICopICooKHVuc2lnbmVkIGxvbmcgKikoUEFSQU0rMHgxYzQpKSkKKyNkZWZpbmUgRUZJX01FTURFU0NfU0laRSAoKigodW5zaWduZWQgbG9uZyAqKSAoUEFSQU0rMHgxYzgpKSkKKyNkZWZpbmUgRUZJX01FTURFU0NfVkVSU0lPTiAoKigodW5zaWduZWQgbG9uZyAqKSAoUEFSQU0rMHgxY2MpKSkKKyNkZWZpbmUgRUZJX01FTU1BUCAoKGVmaV9tZW1vcnlfZGVzY190ICopICooKHVuc2lnbmVkIGxvbmcgKikoUEFSQU0rMHgxZDApKSkKKyNkZWZpbmUgRUZJX01FTU1BUF9TSVpFICgqKCh1bnNpZ25lZCBsb25nICopIChQQVJBTSsweDFkNCkpKQorI2RlZmluZSBNT1VOVF9ST09UX1JET05MWSAoKih1bnNpZ25lZCBzaG9ydCAqKSAoUEFSQU0rMHgxRjIpKQorI2RlZmluZSBSQU1ESVNLX0ZMQUdTICgqKHVuc2lnbmVkIHNob3J0ICopIChQQVJBTSsweDFGOCkpCisjZGVmaW5lIFZJREVPX01PREUgKCoodW5zaWduZWQgc2hvcnQgKikgKFBBUkFNKzB4MUZBKSkKKyNkZWZpbmUgT1JJR19ST09UX0RFViAoKih1bnNpZ25lZCBzaG9ydCAqKSAoUEFSQU0rMHgxRkMpKQorI2RlZmluZSBBVVhfREVWSUNFX0lORk8gKCoodW5zaWduZWQgY2hhciAqKSAoUEFSQU0rMHgxRkYpKQorI2RlZmluZSBMT0FERVJfVFlQRSAoKih1bnNpZ25lZCBjaGFyICopIChQQVJBTSsweDIxMCkpCisjZGVmaW5lIEtFUk5FTF9TVEFSVCAoKih1bnNpZ25lZCBsb25nICopIChQQVJBTSsweDIxNCkpCisjZGVmaW5lIElOSVRSRF9TVEFSVCAoKih1bnNpZ25lZCBsb25nICopIChQQVJBTSsweDIxOCkpCisjZGVmaW5lIElOSVRSRF9TSVpFICgqKHVuc2lnbmVkIGxvbmcgKikgKFBBUkFNKzB4MjFjKSkKKyNkZWZpbmUgRURJRF9JTkZPICAgKCooc3RydWN0IGVkaWRfaW5mbyAqKSAoUEFSQU0rMHgxNDApKQorI2RlZmluZSBFRERfTlIgICAgICgqKHVuc2lnbmVkIGNoYXIgKikgKFBBUkFNK0VERE5SKSkKKyNkZWZpbmUgRUREX01CUl9TSUdfTlIgKCoodW5zaWduZWQgY2hhciAqKSAoUEFSQU0rRUREX01CUl9TSUdfTlJfQlVGKSkKKyNkZWZpbmUgRUREX01CUl9TSUdOQVRVUkUgKCh1bnNpZ25lZCBpbnQgKikgKFBBUkFNK0VERF9NQlJfU0lHX0JVRikpCisjZGVmaW5lIEVERF9CVUYgICAgICgoc3RydWN0IGVkZF9pbmZvICopIChQQVJBTStFRERCVUYpKQorCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiBfaTM4Nl9TRVRVUF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3NobWJ1Zi5oIGIvaW5jbHVkZS9hc20taTM4Ni9zaG1idWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWNkYzNjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9zaG1idWYuaApAQCAtMCwwICsxLDQyIEBACisjaWZuZGVmIF9JMzg2X1NITUJVRl9ICisjZGVmaW5lIF9JMzg2X1NITUJVRl9ICisKKy8qIAorICogVGhlIHNobWlkNjRfZHMgc3RydWN0dXJlIGZvciBpMzg2IGFyY2hpdGVjdHVyZS4KKyAqIE5vdGUgZXh0cmEgcGFkZGluZyBiZWNhdXNlIHRoaXMgc3RydWN0dXJlIGlzIHBhc3NlZCBiYWNrIGFuZCBmb3J0aAorICogYmV0d2VlbiBrZXJuZWwgYW5kIHVzZXIgc3BhY2UuCisgKgorICogUGFkIHNwYWNlIGlzIGxlZnQgZm9yOgorICogLSA2NC1iaXQgdGltZV90IHRvIHNvbHZlIHkyMDM4IHByb2JsZW0KKyAqIC0gMiBtaXNjZWxsYW5lb3VzIDMyLWJpdCB2YWx1ZXMKKyAqLworCitzdHJ1Y3Qgc2htaWQ2NF9kcyB7CisJc3RydWN0IGlwYzY0X3Blcm0Jc2htX3Blcm07CS8qIG9wZXJhdGlvbiBwZXJtcyAqLworCXNpemVfdAkJCXNobV9zZWdzejsJLyogc2l6ZSBvZiBzZWdtZW50IChieXRlcykgKi8KKwlfX2tlcm5lbF90aW1lX3QJCXNobV9hdGltZTsJLyogbGFzdCBhdHRhY2ggdGltZSAqLworCXVuc2lnbmVkIGxvbmcJCV9fdW51c2VkMTsKKwlfX2tlcm5lbF90aW1lX3QJCXNobV9kdGltZTsJLyogbGFzdCBkZXRhY2ggdGltZSAqLworCXVuc2lnbmVkIGxvbmcJCV9fdW51c2VkMjsKKwlfX2tlcm5lbF90aW1lX3QJCXNobV9jdGltZTsJLyogbGFzdCBjaGFuZ2UgdGltZSAqLworCXVuc2lnbmVkIGxvbmcJCV9fdW51c2VkMzsKKwlfX2tlcm5lbF9waWRfdAkJc2htX2NwaWQ7CS8qIHBpZCBvZiBjcmVhdG9yICovCisJX19rZXJuZWxfcGlkX3QJCXNobV9scGlkOwkvKiBwaWQgb2YgbGFzdCBvcGVyYXRvciAqLworCXVuc2lnbmVkIGxvbmcJCXNobV9uYXR0Y2g7CS8qIG5vLiBvZiBjdXJyZW50IGF0dGFjaGVzICovCisJdW5zaWduZWQgbG9uZwkJX191bnVzZWQ0OworCXVuc2lnbmVkIGxvbmcJCV9fdW51c2VkNTsKK307CisKK3N0cnVjdCBzaG1pbmZvNjQgeworCXVuc2lnbmVkIGxvbmcJc2htbWF4OworCXVuc2lnbmVkIGxvbmcJc2htbWluOworCXVuc2lnbmVkIGxvbmcJc2htbW5pOworCXVuc2lnbmVkIGxvbmcJc2htc2VnOworCXVuc2lnbmVkIGxvbmcJc2htYWxsOworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQxOworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQyOworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQzOworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQ0OworfTsKKworI2VuZGlmIC8qIF9JMzg2X1NITUJVRl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3NobXBhcmFtLmggYi9pbmNsdWRlL2FzbS1pMzg2L3NobXBhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg2MjQzYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvc2htcGFyYW0uaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX0FTTUkzODZfU0hNUEFSQU1fSAorI2RlZmluZSBfQVNNSTM4Nl9TSE1QQVJBTV9ICisKKyNkZWZpbmUJU0hNTEJBIFBBR0VfU0laRQkJIC8qIGF0dGFjaCBhZGRyIGEgbXVsdGlwbGUgb2YgdGhpcyAqLworCisjZW5kaWYgLyogX0FTTUkzODZfU0hNUEFSQU1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9zaWdjb250ZXh0LmggYi9pbmNsdWRlL2FzbS1pMzg2L3NpZ2NvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWVmMDg5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9zaWdjb250ZXh0LmgKQEAgLTAsMCArMSw4NSBAQAorI2lmbmRlZiBfQVNNaTM4Nl9TSUdDT05URVhUX0gKKyNkZWZpbmUgX0FTTWkzODZfU0lHQ09OVEVYVF9ICisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorCisvKgorICogQXMgZG9jdW1lbnRlZCBpbiB0aGUgaUJDUzIgc3RhbmRhcmQuLgorICoKKyAqIFRoZSBmaXJzdCBwYXJ0IG9mICJzdHJ1Y3QgX2Zwc3RhdGUiIGlzIGp1c3QgdGhlIG5vcm1hbCBpMzg3CisgKiBoYXJkd2FyZSBzZXR1cCwgdGhlIGV4dHJhICJzdGF0dXMiIHdvcmQgaXMgdXNlZCB0byBzYXZlIHRoZQorICogY29wcm9jZXNzb3Igc3RhdHVzIHdvcmQgYmVmb3JlIGVudGVyaW5nIHRoZSBoYW5kbGVyLgorICoKKyAqIFBlbnRpdW0gSUlJIEZYU1IsIFNTRSBzdXBwb3J0CisgKglHYXJldGggSHVnaGVzIDxnYXJldGhAdmFsaW51eC5jb20+LCBNYXkgMjAwMAorICoKKyAqIFRoZSBGUFUgc3RhdGUgZGF0YSBzdHJ1Y3R1cmUgaGFzIGhhZCB0byBncm93IHRvIGFjY29tbW9kYXRlIHRoZQorICogZXh0ZW5kZWQgRlBVIHN0YXRlIHJlcXVpcmVkIGJ5IHRoZSBTdHJlYW1pbmcgU0lNRCBFeHRlbnNpb25zLgorICogVGhlcmUgaXMgbm8gZG9jdW1lbnRlZCBzdGFuZGFyZCB0byBhY2NvbXBsaXNoIHRoaXMgYXQgdGhlIG1vbWVudC4KKyAqLworc3RydWN0IF9mcHJlZyB7CisJdW5zaWduZWQgc2hvcnQgc2lnbmlmaWNhbmRbNF07CisJdW5zaWduZWQgc2hvcnQgZXhwb25lbnQ7Cit9OworCitzdHJ1Y3QgX2ZweHJlZyB7CisJdW5zaWduZWQgc2hvcnQgc2lnbmlmaWNhbmRbNF07CisJdW5zaWduZWQgc2hvcnQgZXhwb25lbnQ7CisJdW5zaWduZWQgc2hvcnQgcGFkZGluZ1szXTsKK307CisKK3N0cnVjdCBfeG1tcmVnIHsKKwl1bnNpZ25lZCBsb25nIGVsZW1lbnRbNF07Cit9OworCitzdHJ1Y3QgX2Zwc3RhdGUgeworCS8qIFJlZ3VsYXIgRlBVIGVudmlyb25tZW50ICovCisJdW5zaWduZWQgbG9uZyAJY3c7CisJdW5zaWduZWQgbG9uZwlzdzsKKwl1bnNpZ25lZCBsb25nCXRhZzsKKwl1bnNpZ25lZCBsb25nCWlwb2ZmOworCXVuc2lnbmVkIGxvbmcJY3NzZWw7CisJdW5zaWduZWQgbG9uZwlkYXRhb2ZmOworCXVuc2lnbmVkIGxvbmcJZGF0YXNlbDsKKwlzdHJ1Y3QgX2ZwcmVnCV9zdFs4XTsKKwl1bnNpZ25lZCBzaG9ydAlzdGF0dXM7CisJdW5zaWduZWQgc2hvcnQJbWFnaWM7CQkvKiAweGZmZmYgPSByZWd1bGFyIEZQVSBkYXRhIG9ubHkgKi8KKworCS8qIEZYU1IgRlBVIGVudmlyb25tZW50ICovCisJdW5zaWduZWQgbG9uZwlfZnhzcl9lbnZbNl07CS8qIEZYU1IgRlBVIGVudiBpcyBpZ25vcmVkICovCisJdW5zaWduZWQgbG9uZwlteGNzcjsKKwl1bnNpZ25lZCBsb25nCXJlc2VydmVkOworCXN0cnVjdCBfZnB4cmVnCV9meHNyX3N0WzhdOwkvKiBGWFNSIEZQVSByZWcgZGF0YSBpcyBpZ25vcmVkICovCisJc3RydWN0IF94bW1yZWcJX3htbVs4XTsKKwl1bnNpZ25lZCBsb25nCXBhZGRpbmdbNTZdOworfTsKKworI2RlZmluZSBYODZfRlhTUl9NQUdJQwkJMHgwMDAwCisKK3N0cnVjdCBzaWdjb250ZXh0IHsKKwl1bnNpZ25lZCBzaG9ydCBncywgX19nc2g7CisJdW5zaWduZWQgc2hvcnQgZnMsIF9fZnNoOworCXVuc2lnbmVkIHNob3J0IGVzLCBfX2VzaDsKKwl1bnNpZ25lZCBzaG9ydCBkcywgX19kc2g7CisJdW5zaWduZWQgbG9uZyBlZGk7CisJdW5zaWduZWQgbG9uZyBlc2k7CisJdW5zaWduZWQgbG9uZyBlYnA7CisJdW5zaWduZWQgbG9uZyBlc3A7CisJdW5zaWduZWQgbG9uZyBlYng7CisJdW5zaWduZWQgbG9uZyBlZHg7CisJdW5zaWduZWQgbG9uZyBlY3g7CisJdW5zaWduZWQgbG9uZyBlYXg7CisJdW5zaWduZWQgbG9uZyB0cmFwbm87CisJdW5zaWduZWQgbG9uZyBlcnI7CisJdW5zaWduZWQgbG9uZyBlaXA7CisJdW5zaWduZWQgc2hvcnQgY3MsIF9fY3NoOworCXVuc2lnbmVkIGxvbmcgZWZsYWdzOworCXVuc2lnbmVkIGxvbmcgZXNwX2F0X3NpZ25hbDsKKwl1bnNpZ25lZCBzaG9ydCBzcywgX19zc2g7CisJc3RydWN0IF9mcHN0YXRlIF9fdXNlciAqIGZwc3RhdGU7CisJdW5zaWduZWQgbG9uZyBvbGRtYXNrOworCXVuc2lnbmVkIGxvbmcgY3IyOworfTsKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvc2lnaW5mby5oIGIvaW5jbHVkZS9hc20taTM4Ni9zaWdpbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmUxOGY5OAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvc2lnaW5mby5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfSTM4Nl9TSUdJTkZPX0gKKyNkZWZpbmUgX0kzODZfU0lHSU5GT19ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zaWdpbmZvLmg+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9zaWduYWwuaCBiL2luY2x1ZGUvYXNtLWkzODYvc2lnbmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2VmMzQzYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvc2lnbmFsLmgKQEAgLTAsMCArMSwyMzcgQEAKKyNpZm5kZWYgX0FTTWkzODZfU0lHTkFMX0gKKyNkZWZpbmUgX0FTTWkzODZfU0lHTkFMX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorCisvKiBBdm9pZCB0b28gbWFueSBoZWFkZXIgb3JkZXJpbmcgcHJvYmxlbXMuICAqLworc3RydWN0IHNpZ2luZm87CisKKyNpZmRlZiBfX0tFUk5FTF9fCisvKiBNb3N0IHRoaW5ncyBzaG91bGQgYmUgY2xlYW4gZW5vdWdoIHRvIHJlZGVmaW5lIHRoaXMgYXQgd2lsbCwgaWYgY2FyZQorICAgaXMgdGFrZW4gdG8gbWFrZSBsaWJjIG1hdGNoLiAgKi8KKworI2RlZmluZSBfTlNJRwkJNjQKKyNkZWZpbmUgX05TSUdfQlBXCTMyCisjZGVmaW5lIF9OU0lHX1dPUkRTCShfTlNJRyAvIF9OU0lHX0JQVykKKwordHlwZWRlZiB1bnNpZ25lZCBsb25nIG9sZF9zaWdzZXRfdDsJCS8qIGF0IGxlYXN0IDMyIGJpdHMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcgc2lnW19OU0lHX1dPUkRTXTsKK30gc2lnc2V0X3Q7CisKKyNlbHNlCisvKiBIZXJlIHdlIG11c3QgY2F0ZXIgdG8gbGliY3MgdGhhdCBwb2tlIGFib3V0IGluIGtlcm5lbCBoZWFkZXJzLiAgKi8KKworI2RlZmluZSBOU0lHCQkzMgordHlwZWRlZiB1bnNpZ25lZCBsb25nIHNpZ3NldF90OworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZGVmaW5lIFNJR0hVUAkJIDEKKyNkZWZpbmUgU0lHSU5UCQkgMgorI2RlZmluZSBTSUdRVUlUCQkgMworI2RlZmluZSBTSUdJTEwJCSA0CisjZGVmaW5lIFNJR1RSQVAJCSA1CisjZGVmaW5lIFNJR0FCUlQJCSA2CisjZGVmaW5lIFNJR0lPVAkJIDYKKyNkZWZpbmUgU0lHQlVTCQkgNworI2RlZmluZSBTSUdGUEUJCSA4CisjZGVmaW5lIFNJR0tJTEwJCSA5CisjZGVmaW5lIFNJR1VTUjEJCTEwCisjZGVmaW5lIFNJR1NFR1YJCTExCisjZGVmaW5lIFNJR1VTUjIJCTEyCisjZGVmaW5lIFNJR1BJUEUJCTEzCisjZGVmaW5lIFNJR0FMUk0JCTE0CisjZGVmaW5lIFNJR1RFUk0JCTE1CisjZGVmaW5lIFNJR1NUS0ZMVAkxNgorI2RlZmluZSBTSUdDSExECQkxNworI2RlZmluZSBTSUdDT05UCQkxOAorI2RlZmluZSBTSUdTVE9QCQkxOQorI2RlZmluZSBTSUdUU1RQCQkyMAorI2RlZmluZSBTSUdUVElOCQkyMQorI2RlZmluZSBTSUdUVE9VCQkyMgorI2RlZmluZSBTSUdVUkcJCTIzCisjZGVmaW5lIFNJR1hDUFUJCTI0CisjZGVmaW5lIFNJR1hGU1oJCTI1CisjZGVmaW5lIFNJR1ZUQUxSTQkyNgorI2RlZmluZSBTSUdQUk9GCQkyNworI2RlZmluZSBTSUdXSU5DSAkyOAorI2RlZmluZSBTSUdJTwkJMjkKKyNkZWZpbmUgU0lHUE9MTAkJU0lHSU8KKy8qCisjZGVmaW5lIFNJR0xPU1QJCTI5CisqLworI2RlZmluZSBTSUdQV1IJCTMwCisjZGVmaW5lIFNJR1NZUwkJMzEKKyNkZWZpbmUJU0lHVU5VU0VECTMxCisKKy8qIFRoZXNlIHNob3VsZCBub3QgYmUgY29uc2lkZXJlZCBjb25zdGFudHMgZnJvbSB1c2VybGFuZC4gICovCisjZGVmaW5lIFNJR1JUTUlOCTMyCisjZGVmaW5lIFNJR1JUTUFYCV9OU0lHCisKKy8qCisgKiBTQV9GTEFHUyB2YWx1ZXM6CisgKgorICogU0FfT05TVEFDSyBpbmRpY2F0ZXMgdGhhdCBhIHJlZ2lzdGVyZWQgc3RhY2tfdCB3aWxsIGJlIHVzZWQuCisgKiBTQV9JTlRFUlJVUFQgaXMgYSBuby1vcCwgYnV0IGxlZnQgZHVlIHRvIGhpc3RvcmljYWwgcmVhc29ucy4gVXNlIHRoZQorICogU0FfUkVTVEFSVCBmbGFnIHRvIGdldCByZXN0YXJ0aW5nIHNpZ25hbHMgKHdoaWNoIHdlcmUgdGhlIGRlZmF1bHQgbG9uZyBhZ28pCisgKiBTQV9OT0NMRFNUT1AgZmxhZyB0byB0dXJuIG9mZiBTSUdDSExEIHdoZW4gY2hpbGRyZW4gc3RvcC4KKyAqIFNBX1JFU0VUSEFORCBjbGVhcnMgdGhlIGhhbmRsZXIgd2hlbiB0aGUgc2lnbmFsIGlzIGRlbGl2ZXJlZC4KKyAqIFNBX05PQ0xEV0FJVCBmbGFnIG9uIFNJR0NITEQgdG8gaW5oaWJpdCB6b21iaWVzLgorICogU0FfTk9ERUZFUiBwcmV2ZW50cyB0aGUgY3VycmVudCBzaWduYWwgZnJvbSBiZWluZyBtYXNrZWQgaW4gdGhlIGhhbmRsZXIuCisgKgorICogU0FfT05FU0hPVCBhbmQgU0FfTk9NQVNLIGFyZSB0aGUgaGlzdG9yaWNhbCBMaW51eCBuYW1lcyBmb3IgdGhlIFNpbmdsZQorICogVW5peCBuYW1lcyBSRVNFVEhBTkQgYW5kIE5PREVGRVIgcmVzcGVjdGl2ZWx5LgorICovCisjZGVmaW5lIFNBX05PQ0xEU1RPUAkweDAwMDAwMDAxdQorI2RlZmluZSBTQV9OT0NMRFdBSVQJMHgwMDAwMDAwMnUKKyNkZWZpbmUgU0FfU0lHSU5GTwkweDAwMDAwMDA0dQorI2RlZmluZSBTQV9PTlNUQUNLCTB4MDgwMDAwMDB1CisjZGVmaW5lIFNBX1JFU1RBUlQJMHgxMDAwMDAwMHUKKyNkZWZpbmUgU0FfTk9ERUZFUgkweDQwMDAwMDAwdQorI2RlZmluZSBTQV9SRVNFVEhBTkQJMHg4MDAwMDAwMHUKKworI2RlZmluZSBTQV9OT01BU0sJU0FfTk9ERUZFUgorI2RlZmluZSBTQV9PTkVTSE9UCVNBX1JFU0VUSEFORAorI2RlZmluZSBTQV9JTlRFUlJVUFQJMHgyMDAwMDAwMCAvKiBkdW1teSAtLSBpZ25vcmVkICovCisKKyNkZWZpbmUgU0FfUkVTVE9SRVIJMHgwNDAwMDAwMAorCisvKiAKKyAqIHNpZ2FsdHN0YWNrIGNvbnRyb2xzCisgKi8KKyNkZWZpbmUgU1NfT05TVEFDSwkxCisjZGVmaW5lIFNTX0RJU0FCTEUJMgorCisjZGVmaW5lIE1JTlNJR1NUS1NaCTIwNDgKKyNkZWZpbmUgU0lHU1RLU1oJODE5MgorCisjaWZkZWYgX19LRVJORUxfXworCisvKgorICogVGhlc2UgdmFsdWVzIG9mIHNhX2ZsYWdzIGFyZSB1c2VkIG9ubHkgYnkgdGhlIGtlcm5lbCBhcyBwYXJ0IG9mIHRoZQorICogaXJxIGhhbmRsaW5nIHJvdXRpbmVzLgorICoKKyAqIFNBX0lOVEVSUlVQVCBpcyBhbHNvIHVzZWQgYnkgdGhlIGlycSBoYW5kbGluZyByb3V0aW5lcy4KKyAqIFNBX1NISVJRIGlzIGZvciBzaGFyZWQgaW50ZXJydXB0IHN1cHBvcnQgb24gUENJIGFuZCBFSVNBLgorICovCisjZGVmaW5lIFNBX1BST0JFCQlTQV9PTkVTSE9UCisjZGVmaW5lIFNBX1NBTVBMRV9SQU5ET00JU0FfUkVTVEFSVAorI2RlZmluZSBTQV9TSElSUQkJMHgwNDAwMDAwMAorI2VuZGlmCisKKyNkZWZpbmUgU0lHX0JMT0NLICAgICAgICAgIDAJLyogZm9yIGJsb2NraW5nIHNpZ25hbHMgKi8KKyNkZWZpbmUgU0lHX1VOQkxPQ0sgICAgICAgIDEJLyogZm9yIHVuYmxvY2tpbmcgc2lnbmFscyAqLworI2RlZmluZSBTSUdfU0VUTUFTSyAgICAgICAgMgkvKiBmb3Igc2V0dGluZyB0aGUgc2lnbmFsIG1hc2sgKi8KKworLyogVHlwZSBvZiBhIHNpZ25hbCBoYW5kbGVyLiAgKi8KK3R5cGVkZWYgdm9pZCBfX3NpZ25hbGZuX3QoaW50KTsKK3R5cGVkZWYgX19zaWduYWxmbl90IF9fdXNlciAqX19zaWdoYW5kbGVyX3Q7CisKK3R5cGVkZWYgdm9pZCBfX3Jlc3RvcmVmbl90KHZvaWQpOwordHlwZWRlZiBfX3Jlc3RvcmVmbl90IF9fdXNlciAqX19zaWdyZXN0b3JlX3Q7CisKKyNkZWZpbmUgU0lHX0RGTAkoKF9fc2lnaGFuZGxlcl90KTApCS8qIGRlZmF1bHQgc2lnbmFsIGhhbmRsaW5nICovCisjZGVmaW5lIFNJR19JR04JKChfX3NpZ2hhbmRsZXJfdCkxKQkvKiBpZ25vcmUgc2lnbmFsICovCisjZGVmaW5lIFNJR19FUlIJKChfX3NpZ2hhbmRsZXJfdCktMSkJLyogZXJyb3IgcmV0dXJuIGZyb20gc2lnbmFsICovCisKKyNpZmRlZiBfX0tFUk5FTF9fCitzdHJ1Y3Qgb2xkX3NpZ2FjdGlvbiB7CisJX19zaWdoYW5kbGVyX3Qgc2FfaGFuZGxlcjsKKwlvbGRfc2lnc2V0X3Qgc2FfbWFzazsKKwl1bnNpZ25lZCBsb25nIHNhX2ZsYWdzOworCV9fc2lncmVzdG9yZV90IHNhX3Jlc3RvcmVyOworfTsKKworc3RydWN0IHNpZ2FjdGlvbiB7CisJX19zaWdoYW5kbGVyX3Qgc2FfaGFuZGxlcjsKKwl1bnNpZ25lZCBsb25nIHNhX2ZsYWdzOworCV9fc2lncmVzdG9yZV90IHNhX3Jlc3RvcmVyOworCXNpZ3NldF90IHNhX21hc2s7CQkvKiBtYXNrIGxhc3QgZm9yIGV4dGVuc2liaWxpdHkgKi8KK307CisKK3N0cnVjdCBrX3NpZ2FjdGlvbiB7CisJc3RydWN0IHNpZ2FjdGlvbiBzYTsKK307CisjZWxzZQorLyogSGVyZSB3ZSBtdXN0IGNhdGVyIHRvIGxpYmNzIHRoYXQgcG9rZSBhYm91dCBpbiBrZXJuZWwgaGVhZGVycy4gICovCisKK3N0cnVjdCBzaWdhY3Rpb24geworCXVuaW9uIHsKKwkgIF9fc2lnaGFuZGxlcl90IF9zYV9oYW5kbGVyOworCSAgdm9pZCAoKl9zYV9zaWdhY3Rpb24pKGludCwgc3RydWN0IHNpZ2luZm8gKiwgdm9pZCAqKTsKKwl9IF91OworCXNpZ3NldF90IHNhX21hc2s7CisJdW5zaWduZWQgbG9uZyBzYV9mbGFnczsKKwl2b2lkICgqc2FfcmVzdG9yZXIpKHZvaWQpOworfTsKKworI2RlZmluZSBzYV9oYW5kbGVyCV91Ll9zYV9oYW5kbGVyCisjZGVmaW5lIHNhX3NpZ2FjdGlvbglfdS5fc2Ffc2lnYWN0aW9uCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKK3R5cGVkZWYgc3RydWN0IHNpZ2FsdHN0YWNrIHsKKwl2b2lkIF9fdXNlciAqc3Nfc3A7CisJaW50IHNzX2ZsYWdzOworCXNpemVfdCBzc19zaXplOworfSBzdGFja190OworCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGFzbS9zaWdjb250ZXh0Lmg+CisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfU0lHX0JJVE9QUworCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHNpZ2FkZHNldChzaWdzZXRfdCAqc2V0LCBpbnQgX3NpZykKK3sKKwlfX2FzbV9fKCJidHNsICUxLCUwIiA6ICI9bSIoKnNldCkgOiAiSXIiKF9zaWcgLSAxKSA6ICJjYyIpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHNpZ2RlbHNldChzaWdzZXRfdCAqc2V0LCBpbnQgX3NpZykKK3sKKwlfX2FzbV9fKCJidHJsICUxLCUwIiA6ICI9bSIoKnNldCkgOiAiSXIiKF9zaWcgLSAxKSA6ICJjYyIpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19jb25zdF9zaWdpc21lbWJlcihzaWdzZXRfdCAqc2V0LCBpbnQgX3NpZykKK3sKKwl1bnNpZ25lZCBsb25nIHNpZyA9IF9zaWcgLSAxOworCXJldHVybiAxICYgKHNldC0+c2lnW3NpZyAvIF9OU0lHX0JQV10gPj4gKHNpZyAlIF9OU0lHX0JQVykpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19nZW5fc2lnaXNtZW1iZXIoc2lnc2V0X3QgKnNldCwgaW50IF9zaWcpCit7CisJaW50IHJldDsKKwlfX2FzbV9fKCJidGwgJTIsJTFcblx0c2JibCAlMCwlMCIKKwkJOiAiPXIiKHJldCkgOiAibSIoKnNldCksICJJciIoX3NpZy0xKSA6ICJjYyIpOworCXJldHVybiByZXQ7Cit9CisKKyNkZWZpbmUgc2lnaXNtZW1iZXIoc2V0LHNpZykJCQlcCisJKF9fYnVpbHRpbl9jb25zdGFudF9wKHNpZykgPwkJXAorCSBfX2NvbnN0X3NpZ2lzbWVtYmVyKChzZXQpLChzaWcpKSA6CVwKKwkgX19nZW5fc2lnaXNtZW1iZXIoKHNldCksKHNpZykpKQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgc2lnZmluZGlud29yZCh1bnNpZ25lZCBsb25nIHdvcmQpCit7CisJX19hc21fXygiYnNmbCAlMSwlMCIgOiAiPXIiKHdvcmQpIDogInJtIih3b3JkKSA6ICJjYyIpOworCXJldHVybiB3b3JkOworfQorCitzdHJ1Y3QgcHRfcmVnczsKK2V4dGVybiBpbnQgRkFTVENBTEwoZG9fc2lnbmFsKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzaWdzZXRfdCAqb2xkc2V0KSk7CisKKyNkZWZpbmUgcHRyYWNlX3NpZ25hbF9kZWxpdmVyKHJlZ3MsIGNvb2tpZSkJCVwKKwlkbyB7CQkJCQkJXAorCQlpZiAoY3VycmVudC0+cHRyYWNlICYgUFRfRFRSQUNFKSB7CVwKKwkJCWN1cnJlbnQtPnB0cmFjZSAmPSB+UFRfRFRSQUNFOwlcCisJCQkocmVncyktPmVmbGFncyAmPSB+VEZfTUFTSzsJXAorCQl9CQkJCQlcCisJfSB3aGlsZSAoMCkKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3NtcC5oIGIvaW5jbHVkZS9hc20taTM4Ni9zbXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDE0OTEyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9zbXAuaApAQCAtMCwwICsxLDkwIEBACisjaWZuZGVmIF9fQVNNX1NNUF9ICisjZGVmaW5lIF9fQVNNX1NNUF9ICisKKy8qCisgKiBXZSBuZWVkIHRoZSBBUElDIGRlZmluaXRpb25zIGF1dG9tYXRpY2FsbHkgYXMgcGFydCBvZiAnc21wLmgnCisgKi8KKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2luY2x1ZGUgPGFzbS9maXhtYXAuaD4KKyNpbmNsdWRlIDxhc20vYml0b3BzLmg+CisjaW5jbHVkZSA8YXNtL21wc3BlYy5oPgorI2lmZGVmIENPTkZJR19YODZfSU9fQVBJQworI2luY2x1ZGUgPGFzbS9pb19hcGljLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxhc20vYXBpYy5oPgorI2VuZGlmCisjZW5kaWYKKworI2RlZmluZSBCQURfQVBJQ0lEIDB4RkZ1CisjaWZkZWYgQ09ORklHX1NNUAorI2lmbmRlZiBfX0FTU0VNQkxZX18KKworLyoKKyAqIFByaXZhdGUgcm91dGluZXMvZGF0YQorICovCisgCitleHRlcm4gdm9pZCBzbXBfYWxsb2NfbWVtb3J5KHZvaWQpOworZXh0ZXJuIGludCBwaWNfbW9kZTsKK2V4dGVybiBpbnQgc21wX251bV9zaWJsaW5nczsKK2V4dGVybiBjcHVtYXNrX3QgY3B1X3NpYmxpbmdfbWFwW107CisKK2V4dGVybiB2b2lkIHNtcF9mbHVzaF90bGIodm9pZCk7CitleHRlcm4gdm9pZCBzbXBfbWVzc2FnZV9pcnEoaW50IGNwbCwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitleHRlcm4gdm9pZCBzbXBfaW52YWxpZGF0ZV9yY3Yodm9pZCk7CQkvKiBQcm9jZXNzIGFuIE5NSSAqLworZXh0ZXJuIHZvaWQgKCptdHJyX2hvb2spICh2b2lkKTsKK2V4dGVybiB2b2lkIHphcF9sb3dfbWFwcGluZ3MgKHZvaWQpOworCisjZGVmaW5lIE1BWF9BUElDSUQgMjU2CitleHRlcm4gdTggeDg2X2NwdV90b19hcGljaWRbXTsKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgbmVlZGVkIGJ5IGFsbCBTTVAgc3lzdGVtcy4gSXQgbXVzdCBfYWx3YXlzXyBiZSB2YWxpZAorICogZnJvbSB0aGUgaW5pdGlhbCBzdGFydHVwLiBXZSBtYXAgQVBJQ19CQVNFIHZlcnkgZWFybHkgaW4gcGFnZV9zZXR1cCgpLAorICogc28gdGhpcyBpcyBjb3JyZWN0IGluIHRoZSB4ODYgY2FzZS4KKyAqLworI2RlZmluZSBfX3NtcF9wcm9jZXNzb3JfaWQoKSAoY3VycmVudF90aHJlYWRfaW5mbygpLT5jcHUpCisKK2V4dGVybiBjcHVtYXNrX3QgY3B1X2NhbGxvdXRfbWFwOworZXh0ZXJuIGNwdW1hc2tfdCBjcHVfY2FsbGluX21hcDsKKyNkZWZpbmUgY3B1X3Bvc3NpYmxlX21hcCBjcHVfY2FsbG91dF9tYXAKKworLyogV2UgZG9uJ3QgbWFyayBDUFVzIG9ubGluZSB1bnRpbCBfX2NwdV91cCgpLCBzbyB3ZSBuZWVkIGFub3RoZXIgbWVhc3VyZSAqLworc3RhdGljIGlubGluZSBpbnQgbnVtX2Jvb3RpbmdfY3B1cyh2b2lkKQoreworCXJldHVybiBjcHVzX3dlaWdodChjcHVfY2FsbG91dF9tYXApOworfQorCisjaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCisKKyNpZmRlZiBBUElDX0RFRklOSVRJT04KK2V4dGVybiBpbnQgaGFyZF9zbXBfcHJvY2Vzc29yX2lkKHZvaWQpOworI2Vsc2UKKyNpbmNsdWRlIDxtYWNoX2FwaWNkZWYuaD4KK3N0YXRpYyBpbmxpbmUgaW50IGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCh2b2lkKQoreworCS8qIHdlIGRvbid0IHdhbnQgdG8gbWFyayB0aGlzIGFjY2VzcyB2b2xhdGlsZSAtIGJhZCBjb2RlIGdlbmVyYXRpb24gKi8KKwlyZXR1cm4gR0VUX0FQSUNfSUQoKih1bnNpZ25lZCBsb25nICopKEFQSUNfQkFTRStBUElDX0lEKSk7Cit9CisjZW5kaWYKKworc3RhdGljIF9faW5saW5lIGludCBsb2dpY2FsX3NtcF9wcm9jZXNzb3JfaWQodm9pZCkKK3sKKwkvKiB3ZSBkb24ndCB3YW50IHRvIG1hcmsgdGhpcyBhY2Nlc3Mgdm9sYXRpbGUgLSBiYWQgY29kZSBnZW5lcmF0aW9uICovCisJcmV0dXJuIEdFVF9BUElDX0xPR0lDQUxfSUQoKih1bnNpZ25lZCBsb25nICopKEFQSUNfQkFTRStBUElDX0xEUikpOworfQorCisjZW5kaWYKKyNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCisKKyNkZWZpbmUgTk9fUFJPQ19JRAkJMHhGRgkJLyogTm8gcHJvY2Vzc29yIG1hZ2ljIG1hcmtlciAqLworCisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9zb2NrZXQuaCBiL2luY2x1ZGUvYXNtLWkzODYvc29ja2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdmNmIzOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvc29ja2V0LmgKQEAgLTAsMCArMSw1MCBAQAorI2lmbmRlZiBfQVNNX1NPQ0tFVF9ICisjZGVmaW5lIF9BU01fU09DS0VUX0gKKworI2luY2x1ZGUgPGFzbS9zb2NraW9zLmg+CisKKy8qIEZvciBzZXRzb2Nrb3B0KDIpICovCisjZGVmaW5lIFNPTF9TT0NLRVQJMQorCisjZGVmaW5lIFNPX0RFQlVHCTEKKyNkZWZpbmUgU09fUkVVU0VBRERSCTIKKyNkZWZpbmUgU09fVFlQRQkJMworI2RlZmluZSBTT19FUlJPUgk0CisjZGVmaW5lIFNPX0RPTlRST1VURQk1CisjZGVmaW5lIFNPX0JST0FEQ0FTVAk2CisjZGVmaW5lIFNPX1NOREJVRgk3CisjZGVmaW5lIFNPX1JDVkJVRgk4CisjZGVmaW5lIFNPX0tFRVBBTElWRQk5CisjZGVmaW5lIFNPX09PQklOTElORQkxMAorI2RlZmluZSBTT19OT19DSEVDSwkxMQorI2RlZmluZSBTT19QUklPUklUWQkxMgorI2RlZmluZSBTT19MSU5HRVIJMTMKKyNkZWZpbmUgU09fQlNEQ09NUEFUCTE0CisvKiBUbyBhZGQgOiNkZWZpbmUgU09fUkVVU0VQT1JUIDE1ICovCisjZGVmaW5lIFNPX1BBU1NDUkVECTE2CisjZGVmaW5lIFNPX1BFRVJDUkVECTE3CisjZGVmaW5lIFNPX1JDVkxPV0FUCTE4CisjZGVmaW5lIFNPX1NORExPV0FUCTE5CisjZGVmaW5lIFNPX1JDVlRJTUVPCTIwCisjZGVmaW5lIFNPX1NORFRJTUVPCTIxCisKKy8qIFNlY3VyaXR5IGxldmVscyAtIGFzIHBlciBOUkwgSVB2NiAtIGRvbid0IGFjdHVhbGx5IGRvIGFueXRoaW5nICovCisjZGVmaW5lIFNPX1NFQ1VSSVRZX0FVVEhFTlRJQ0FUSU9OCQkyMgorI2RlZmluZSBTT19TRUNVUklUWV9FTkNSWVBUSU9OX1RSQU5TUE9SVAkyMworI2RlZmluZSBTT19TRUNVUklUWV9FTkNSWVBUSU9OX05FVFdPUksJCTI0CisKKyNkZWZpbmUgU09fQklORFRPREVWSUNFCTI1CisKKy8qIFNvY2tldCBmaWx0ZXJpbmcgKi8KKyNkZWZpbmUgU09fQVRUQUNIX0ZJTFRFUiAgICAgICAgMjYKKyNkZWZpbmUgU09fREVUQUNIX0ZJTFRFUiAgICAgICAgMjcKKworI2RlZmluZSBTT19QRUVSTkFNRQkJMjgKKyNkZWZpbmUgU09fVElNRVNUQU1QCQkyOQorI2RlZmluZSBTQ01fVElNRVNUQU1QCQlTT19USU1FU1RBTVAKKworI2RlZmluZSBTT19BQ0NFUFRDT05OCQkzMAorCisjZGVmaW5lIFNPX1BFRVJTRUMJCTMxCisKKyNlbmRpZiAvKiBfQVNNX1NPQ0tFVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3NvY2tpb3MuaCBiL2luY2x1ZGUvYXNtLWkzODYvc29ja2lvcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiNzQ3ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3NvY2tpb3MuaApAQCAtMCwwICsxLDEyIEBACisjaWZuZGVmIF9fQVJDSF9JMzg2X1NPQ0tJT1NfXworI2RlZmluZSBfX0FSQ0hfSTM4Nl9TT0NLSU9TX18KKworLyogU29ja2V0LWxldmVsIEkvTyBjb250cm9sIGNhbGxzLiAqLworI2RlZmluZSBGSU9TRVRPV04gCTB4ODkwMQorI2RlZmluZSBTSU9DU1BHUlAJMHg4OTAyCisjZGVmaW5lIEZJT0dFVE9XTgkweDg5MDMKKyNkZWZpbmUgU0lPQ0dQR1JQCTB4ODkwNAorI2RlZmluZSBTSU9DQVRNQVJLCTB4ODkwNQorI2RlZmluZSBTSU9DR1NUQU1QCTB4ODkwNgkJLyogR2V0IHN0YW1wICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9zcGlubG9jay5oIGIvaW5jbHVkZS9hc20taTM4Ni9zcGlubG9jay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5ZmYzMWYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3NwaW5sb2NrLmgKQEAgLTAsMCArMSwyNTAgQEAKKyNpZm5kZWYgX19BU01fU1BJTkxPQ0tfSAorI2RlZmluZSBfX0FTTV9TUElOTE9DS19ICisKKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8YXNtL3J3bG9jay5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKworYXNtbGlua2FnZSBpbnQgcHJpbnRrKGNvbnN0IGNoYXIgKiBmbXQsIC4uLikKKwlfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDEsIDIpKSk7CisKKy8qCisgKiBZb3VyIGJhc2ljIFNNUCBzcGlubG9ja3MsIGFsbG93aW5nIG9ubHkgYSBzaW5nbGUgQ1BVIGFueXdoZXJlCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworCXZvbGF0aWxlIHVuc2lnbmVkIGludCBzbG9jazsKKyNpZmRlZiBDT05GSUdfREVCVUdfU1BJTkxPQ0sKKwl1bnNpZ25lZCBtYWdpYzsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19QUkVFTVBUCisJdW5zaWduZWQgaW50IGJyZWFrX2xvY2s7CisjZW5kaWYKK30gc3BpbmxvY2tfdDsKKworI2RlZmluZSBTUElOTE9DS19NQUdJQwkweGRlYWQ0ZWFkCisKKyNpZmRlZiBDT05GSUdfREVCVUdfU1BJTkxPQ0sKKyNkZWZpbmUgU1BJTkxPQ0tfTUFHSUNfSU5JVAksIFNQSU5MT0NLX01BR0lDCisjZWxzZQorI2RlZmluZSBTUElOTE9DS19NQUdJQ19JTklUCS8qICovCisjZW5kaWYKKworI2RlZmluZSBTUElOX0xPQ0tfVU5MT0NLRUQgKHNwaW5sb2NrX3QpIHsgMSBTUElOTE9DS19NQUdJQ19JTklUIH0KKworI2RlZmluZSBzcGluX2xvY2tfaW5pdCh4KQlkbyB7ICooeCkgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7IH0gd2hpbGUoMCkKKworLyoKKyAqIFNpbXBsZSBzcGluIGxvY2sgb3BlcmF0aW9ucy4gIFRoZXJlIGFyZSB0d28gdmFyaWFudHMsIG9uZSBjbGVhcnMgSVJRJ3MKKyAqIG9uIHRoZSBsb2NhbCBwcm9jZXNzb3IsIG9uZSBkb2VzIG5vdC4KKyAqCisgKiBXZSBtYWtlIG5vIGZhaXJuZXNzIGFzc3VtcHRpb25zLiBUaGV5IGhhdmUgYSBjb3N0LgorICovCisKKyNkZWZpbmUgc3Bpbl9pc19sb2NrZWQoeCkJKCoodm9sYXRpbGUgc2lnbmVkIGNoYXIgKikoJih4KS0+c2xvY2spIDw9IDApCisjZGVmaW5lIHNwaW5fdW5sb2NrX3dhaXQoeCkJZG8geyBiYXJyaWVyKCk7IH0gd2hpbGUoc3Bpbl9pc19sb2NrZWQoeCkpCisKKyNkZWZpbmUgc3Bpbl9sb2NrX3N0cmluZyBcCisJIlxuMTpcdCIgXAorCSJsb2NrIDsgZGVjYiAlMFxuXHQiIFwKKwkiam5zIDNmXG4iIFwKKwkiMjpcdCIgXAorCSJyZXA7bm9wXG5cdCIgXAorCSJjbXBiICQwLCUwXG5cdCIgXAorCSJqbGUgMmJcblx0IiBcCisJImptcCAxYlxuIiBcCisJIjM6XG5cdCIKKworI2RlZmluZSBzcGluX2xvY2tfc3RyaW5nX2ZsYWdzIFwKKwkiXG4xOlx0IiBcCisJImxvY2sgOyBkZWNiICUwXG5cdCIgXAorCSJqbnMgNGZcblx0IiBcCisJIjI6XHQiIFwKKwkidGVzdGwgJDB4MjAwLCAlMVxuXHQiIFwKKwkianogM2Zcblx0IiBcCisJInN0aVxuXHQiIFwKKwkiMzpcdCIgXAorCSJyZXA7bm9wXG5cdCIgXAorCSJjbXBiICQwLCAlMFxuXHQiIFwKKwkiamxlIDNiXG5cdCIgXAorCSJjbGlcblx0IiBcCisJImptcCAxYlxuIiBcCisJIjQ6XG5cdCIKKworLyoKKyAqIFRoaXMgd29ya3MuIERlc3BpdGUgYWxsIHRoZSBjb25mdXNpb24uCisgKiAoZXhjZXB0IG9uIFBQcm8gU01QIG9yIGlmIHdlIGFyZSB1c2luZyBPT1NUT1JFKQorICogKFBQcm8gZXJyYXRhIDY2LCA5MikKKyAqLworCisjaWYgIWRlZmluZWQoQ09ORklHX1g4Nl9PT1NUT1JFKSAmJiAhZGVmaW5lZChDT05GSUdfWDg2X1BQUk9fRkVOQ0UpCisKKyNkZWZpbmUgc3Bpbl91bmxvY2tfc3RyaW5nIFwKKwkibW92YiAkMSwlMCIgXAorCQk6Ij1tIiAobG9jay0+c2xvY2spIDogOiAibWVtb3J5IgorCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfcmF3X3NwaW5fdW5sb2NrKHNwaW5sb2NrX3QgKmxvY2spCit7CisjaWZkZWYgQ09ORklHX0RFQlVHX1NQSU5MT0NLCisJQlVHX09OKGxvY2stPm1hZ2ljICE9IFNQSU5MT0NLX01BR0lDKTsKKwlCVUdfT04oIXNwaW5faXNfbG9ja2VkKGxvY2spKTsKKyNlbmRpZgorCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQlzcGluX3VubG9ja19zdHJpbmcKKwkpOworfQorCisjZWxzZQorCisjZGVmaW5lIHNwaW5fdW5sb2NrX3N0cmluZyBcCisJInhjaGdiICViMCwgJTEiIFwKKwkJOiI9cSIgKG9sZHZhbCksICI9bSIgKGxvY2stPnNsb2NrKSBcCisJCToiMCIgKG9sZHZhbCkgOiAibWVtb3J5IgorCitzdGF0aWMgaW5saW5lIHZvaWQgX3Jhd19zcGluX3VubG9jayhzcGlubG9ja190ICpsb2NrKQoreworCWNoYXIgb2xkdmFsID0gMTsKKyNpZmRlZiBDT05GSUdfREVCVUdfU1BJTkxPQ0sKKwlCVUdfT04obG9jay0+bWFnaWMgIT0gU1BJTkxPQ0tfTUFHSUMpOworCUJVR19PTighc3Bpbl9pc19sb2NrZWQobG9jaykpOworI2VuZGlmCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCXNwaW5fdW5sb2NrX3N0cmluZworCSk7Cit9CisKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIGludCBfcmF3X3NwaW5fdHJ5bG9jayhzcGlubG9ja190ICpsb2NrKQoreworCWNoYXIgb2xkdmFsOworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkieGNoZ2IgJWIwLCUxIgorCQk6Ij1xIiAob2xkdmFsKSwgIj1tIiAobG9jay0+c2xvY2spCisJCToiMCIgKDApIDogIm1lbW9yeSIpOworCXJldHVybiBvbGR2YWwgPiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX3Jhd19zcGluX2xvY2soc3BpbmxvY2tfdCAqbG9jaykKK3sKKyNpZmRlZiBDT05GSUdfREVCVUdfU1BJTkxPQ0sKKwlpZiAodW5saWtlbHkobG9jay0+bWFnaWMgIT0gU1BJTkxPQ0tfTUFHSUMpKSB7CisJCXByaW50aygiZWlwOiAlcFxuIiwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKKwkJQlVHKCk7CisJfQorI2VuZGlmCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCXNwaW5fbG9ja19zdHJpbmcKKwkJOiI9bSIgKGxvY2stPnNsb2NrKSA6IDogIm1lbW9yeSIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX3Jhd19zcGluX2xvY2tfZmxhZ3MgKHNwaW5sb2NrX3QgKmxvY2ssIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisjaWZkZWYgQ09ORklHX0RFQlVHX1NQSU5MT0NLCisJaWYgKHVubGlrZWx5KGxvY2stPm1hZ2ljICE9IFNQSU5MT0NLX01BR0lDKSkgeworCQlwcmludGsoImVpcDogJXBcbiIsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CisJCUJVRygpOworCX0KKyNlbmRpZgorCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQlzcGluX2xvY2tfc3RyaW5nX2ZsYWdzCisJCToiPW0iIChsb2NrLT5zbG9jaykgOiAiciIgKGZsYWdzKSA6ICJtZW1vcnkiKTsKK30KKworLyoKKyAqIFJlYWQtd3JpdGUgc3BpbmxvY2tzLCBhbGxvd2luZyBtdWx0aXBsZSByZWFkZXJzCisgKiBidXQgb25seSBvbmUgd3JpdGVyLgorICoKKyAqIE5PVEUhIGl0IGlzIHF1aXRlIGNvbW1vbiB0byBoYXZlIHJlYWRlcnMgaW4gaW50ZXJydXB0cworICogYnV0IG5vIGludGVycnVwdCB3cml0ZXJzLiBGb3IgdGhvc2UgY2lyY3Vtc3RhbmNlcyB3ZQorICogY2FuICJtaXgiIGlycS1zYWZlIGxvY2tzIC0gYW55IHdyaXRlciBuZWVkcyB0byBnZXQgYQorICogaXJxLXNhZmUgd3JpdGUtbG9jaywgYnV0IHJlYWRlcnMgY2FuIGdldCBub24taXJxc2FmZQorICogcmVhZC1sb2Nrcy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCXZvbGF0aWxlIHVuc2lnbmVkIGludCBsb2NrOworI2lmZGVmIENPTkZJR19ERUJVR19TUElOTE9DSworCXVuc2lnbmVkIG1hZ2ljOworI2VuZGlmCisjaWZkZWYgQ09ORklHX1BSRUVNUFQKKwl1bnNpZ25lZCBpbnQgYnJlYWtfbG9jazsKKyNlbmRpZgorfSByd2xvY2tfdDsKKworI2RlZmluZSBSV0xPQ0tfTUFHSUMJMHhkZWFmMWVlZAorCisjaWZkZWYgQ09ORklHX0RFQlVHX1NQSU5MT0NLCisjZGVmaW5lIFJXTE9DS19NQUdJQ19JTklUCSwgUldMT0NLX01BR0lDCisjZWxzZQorI2RlZmluZSBSV0xPQ0tfTUFHSUNfSU5JVAkvKiAqLworI2VuZGlmCisKKyNkZWZpbmUgUldfTE9DS19VTkxPQ0tFRCAocndsb2NrX3QpIHsgUldfTE9DS19CSUFTIFJXTE9DS19NQUdJQ19JTklUIH0KKworI2RlZmluZSByd2xvY2tfaW5pdCh4KQlkbyB7ICooeCkgPSBSV19MT0NLX1VOTE9DS0VEOyB9IHdoaWxlKDApCisKKy8qKgorICogcmVhZF9jYW5fbG9jayAtIHdvdWxkIHJlYWRfdHJ5bG9jaygpIHN1Y2NlZWQ/CisgKiBAbG9jazogdGhlIHJ3bG9jayBpbiBxdWVzdGlvbi4KKyAqLworI2RlZmluZSByZWFkX2Nhbl9sb2NrKHgpICgoaW50KSh4KS0+bG9jayA+IDApCisKKy8qKgorICogd3JpdGVfY2FuX2xvY2sgLSB3b3VsZCB3cml0ZV90cnlsb2NrKCkgc3VjY2VlZD8KKyAqIEBsb2NrOiB0aGUgcndsb2NrIGluIHF1ZXN0aW9uLgorICovCisjZGVmaW5lIHdyaXRlX2Nhbl9sb2NrKHgpICgoeCktPmxvY2sgPT0gUldfTE9DS19CSUFTKQorCisvKgorICogT24geDg2LCB3ZSBpbXBsZW1lbnQgcmVhZC13cml0ZSBsb2NrcyBhcyBhIDMyLWJpdCBjb3VudGVyCisgKiB3aXRoIHRoZSBoaWdoIGJpdCAoc2lnbikgYmVpbmcgdGhlICJjb250ZW5kZWQiIGJpdC4KKyAqCisgKiBUaGUgaW5saW5lIGFzc2VtYmx5IGlzIG5vbi1vYnZpb3VzLiBUaGluayBhYm91dCBpdC4KKyAqCisgKiBDaGFuZ2VkIHRvIHVzZSB0aGUgc2FtZSB0ZWNobmlxdWUgYXMgcncgc2VtYXBob3Jlcy4gIFNlZQorICogc2VtYXBob3JlLmggZm9yIGRldGFpbHMuICAtYmVuCisgKi8KKy8qIHRoZSBzcGlubG9jayBoZWxwZXJzIGFyZSBpbiBhcmNoL2kzODYva2VybmVsL3NlbWFwaG9yZS5jICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfcmF3X3JlYWRfbG9jayhyd2xvY2tfdCAqcncpCit7CisjaWZkZWYgQ09ORklHX0RFQlVHX1NQSU5MT0NLCisJQlVHX09OKHJ3LT5tYWdpYyAhPSBSV0xPQ0tfTUFHSUMpOworI2VuZGlmCisJX19idWlsZF9yZWFkX2xvY2socncsICJfX3JlYWRfbG9ja19mYWlsZWQiKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9yYXdfd3JpdGVfbG9jayhyd2xvY2tfdCAqcncpCit7CisjaWZkZWYgQ09ORklHX0RFQlVHX1NQSU5MT0NLCisJQlVHX09OKHJ3LT5tYWdpYyAhPSBSV0xPQ0tfTUFHSUMpOworI2VuZGlmCisJX19idWlsZF93cml0ZV9sb2NrKHJ3LCAiX193cml0ZV9sb2NrX2ZhaWxlZCIpOworfQorCisjZGVmaW5lIF9yYXdfcmVhZF91bmxvY2socncpCQlhc20gdm9sYXRpbGUoImxvY2sgOyBpbmNsICUwIiA6Ij1tIiAoKHJ3KS0+bG9jaykgOiA6ICJtZW1vcnkiKQorI2RlZmluZSBfcmF3X3dyaXRlX3VubG9jayhydykJYXNtIHZvbGF0aWxlKCJsb2NrIDsgYWRkbCAkIiBSV19MT0NLX0JJQVNfU1RSICIsJTAiOiI9bSIgKChydyktPmxvY2spIDogOiAibWVtb3J5IikKKworc3RhdGljIGlubGluZSBpbnQgX3Jhd19yZWFkX3RyeWxvY2socndsb2NrX3QgKmxvY2spCit7CisJYXRvbWljX3QgKmNvdW50ID0gKGF0b21pY190ICopbG9jazsKKwlhdG9taWNfZGVjKGNvdW50KTsKKwlpZiAoYXRvbWljX3JlYWQoY291bnQpID49IDApCisJCXJldHVybiAxOworCWF0b21pY19pbmMoY291bnQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBfcmF3X3dyaXRlX3RyeWxvY2socndsb2NrX3QgKmxvY2spCit7CisJYXRvbWljX3QgKmNvdW50ID0gKGF0b21pY190ICopbG9jazsKKwlpZiAoYXRvbWljX3N1Yl9hbmRfdGVzdChSV19MT0NLX0JJQVMsIGNvdW50KSkKKwkJcmV0dXJuIDE7CisJYXRvbWljX2FkZChSV19MT0NLX0JJQVMsIGNvdW50KTsKKwlyZXR1cm4gMDsKK30KKworI2VuZGlmIC8qIF9fQVNNX1NQSU5MT0NLX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvc3JhdC5oIGIvaW5jbHVkZS9hc20taTM4Ni9zcmF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY1YWI0YgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvc3JhdC5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBTb21lIG9mIHRoZSBjb2RlIGluIHRoaXMgZmlsZSBoYXMgYmVlbiBnbGVhbmVkIGZyb20gdGhlIDY0IGJpdCAKKyAqIGRpc2NvbnRpZ21lbSBzdXBwb3J0IGNvZGUgYmFzZS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIsIElCTSBDb3JwLgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlCisgKiBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICogU2VuZCBmZWVkYmFjayB0byBQYXQgR2F1Z2hlbiA8Z29uZUB1cy5pYm0uY29tPgorICovCisKKyNpZm5kZWYgX0FTTV9TUkFUX0hfCisjZGVmaW5lIF9BU01fU1JBVF9IXworCisjaWZuZGVmIENPTkZJR19BQ1BJX1NSQVQKKyNlcnJvciBDT05GSUdfQUNQSV9TUkFUIG5vdCBkZWZpbmVkLCBhbmQgc3JhdC5oIGhlYWRlciBoYXMgYmVlbiBpbmNsdWRlZAorI2VuZGlmCisKK2V4dGVybiBpbnQgZ2V0X21lbWNmZ19mcm9tX3NyYXQodm9pZCk7CitleHRlcm4gdW5zaWduZWQgbG9uZyAqZ2V0X3pob2xlc19zaXplKGludCk7CisKKyNlbmRpZiAvKiBfQVNNX1NSQVRfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvc3RhdC5oIGIvaW5jbHVkZS9hc20taTM4Ni9zdGF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ2NGY4MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvc3RhdC5oCkBAIC0wLDAgKzEsNzggQEAKKyNpZm5kZWYgX0kzODZfU1RBVF9ICisjZGVmaW5lIF9JMzg2X1NUQVRfSAorCitzdHJ1Y3QgX19vbGRfa2VybmVsX3N0YXQgeworCXVuc2lnbmVkIHNob3J0IHN0X2RldjsKKwl1bnNpZ25lZCBzaG9ydCBzdF9pbm87CisJdW5zaWduZWQgc2hvcnQgc3RfbW9kZTsKKwl1bnNpZ25lZCBzaG9ydCBzdF9ubGluazsKKwl1bnNpZ25lZCBzaG9ydCBzdF91aWQ7CisJdW5zaWduZWQgc2hvcnQgc3RfZ2lkOworCXVuc2lnbmVkIHNob3J0IHN0X3JkZXY7CisJdW5zaWduZWQgbG9uZyAgc3Rfc2l6ZTsKKwl1bnNpZ25lZCBsb25nICBzdF9hdGltZTsKKwl1bnNpZ25lZCBsb25nICBzdF9tdGltZTsKKwl1bnNpZ25lZCBsb25nICBzdF9jdGltZTsKK307CisKK3N0cnVjdCBzdGF0IHsKKwl1bnNpZ25lZCBsb25nICBzdF9kZXY7CisJdW5zaWduZWQgbG9uZyAgc3RfaW5vOworCXVuc2lnbmVkIHNob3J0IHN0X21vZGU7CisJdW5zaWduZWQgc2hvcnQgc3Rfbmxpbms7CisJdW5zaWduZWQgc2hvcnQgc3RfdWlkOworCXVuc2lnbmVkIHNob3J0IHN0X2dpZDsKKwl1bnNpZ25lZCBsb25nICBzdF9yZGV2OworCXVuc2lnbmVkIGxvbmcgIHN0X3NpemU7CisJdW5zaWduZWQgbG9uZyAgc3RfYmxrc2l6ZTsKKwl1bnNpZ25lZCBsb25nICBzdF9ibG9ja3M7CisJdW5zaWduZWQgbG9uZyAgc3RfYXRpbWU7CisJdW5zaWduZWQgbG9uZyAgc3RfYXRpbWVfbnNlYzsKKwl1bnNpZ25lZCBsb25nICBzdF9tdGltZTsKKwl1bnNpZ25lZCBsb25nICBzdF9tdGltZV9uc2VjOworCXVuc2lnbmVkIGxvbmcgIHN0X2N0aW1lOworCXVuc2lnbmVkIGxvbmcgIHN0X2N0aW1lX25zZWM7CisJdW5zaWduZWQgbG9uZyAgX191bnVzZWQ0OworCXVuc2lnbmVkIGxvbmcgIF9fdW51c2VkNTsKK307CisKKy8qIFRoaXMgbWF0Y2hlcyBzdHJ1Y3Qgc3RhdDY0IGluIGdsaWJjMi4xLCBoZW5jZSB0aGUgYWJzb2x1dGVseQorICogaW5zYW5lIGFtb3VudHMgb2YgcGFkZGluZyBhcm91bmQgZGV2X3Qncy4KKyAqLworc3RydWN0IHN0YXQ2NCB7CisJdW5zaWduZWQgbG9uZyBsb25nCXN0X2RldjsKKwl1bnNpZ25lZCBjaGFyCV9fcGFkMFs0XTsKKworI2RlZmluZSBTVEFUNjRfSEFTX0JST0tFTl9TVF9JTk8JMQorCXVuc2lnbmVkIGxvbmcJX19zdF9pbm87CisKKwl1bnNpZ25lZCBpbnQJc3RfbW9kZTsKKwl1bnNpZ25lZCBpbnQJc3Rfbmxpbms7CisKKwl1bnNpZ25lZCBsb25nCXN0X3VpZDsKKwl1bnNpZ25lZCBsb25nCXN0X2dpZDsKKworCXVuc2lnbmVkIGxvbmcgbG9uZwlzdF9yZGV2OworCXVuc2lnbmVkIGNoYXIJX19wYWQzWzRdOworCisJbG9uZyBsb25nCXN0X3NpemU7CisJdW5zaWduZWQgbG9uZwlzdF9ibGtzaXplOworCisJdW5zaWduZWQgbG9uZwlzdF9ibG9ja3M7CS8qIE51bWJlciA1MTItYnl0ZSBibG9ja3MgYWxsb2NhdGVkLiAqLworCXVuc2lnbmVkIGxvbmcJX19wYWQ0OwkJLyogZnV0dXJlIHBvc3NpYmxlIHN0X2Jsb2NrcyBoaWdoIGJpdHMgKi8KKworCXVuc2lnbmVkIGxvbmcJc3RfYXRpbWU7CisJdW5zaWduZWQgbG9uZwlzdF9hdGltZV9uc2VjOworCisJdW5zaWduZWQgbG9uZwlzdF9tdGltZTsKKwl1bnNpZ25lZCBpbnQJc3RfbXRpbWVfbnNlYzsKKworCXVuc2lnbmVkIGxvbmcJc3RfY3RpbWU7CisJdW5zaWduZWQgbG9uZwlzdF9jdGltZV9uc2VjOworCisJdW5zaWduZWQgbG9uZyBsb25nCXN0X2lubzsKK307CisKKyNkZWZpbmUgU1RBVF9IQVZFX05TRUMgMQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvc3RhdGZzLmggYi9pbmNsdWRlL2FzbS1pMzg2L3N0YXRmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0OTcyYzEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3N0YXRmcy5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfSTM4Nl9TVEFURlNfSAorI2RlZmluZSBfSTM4Nl9TVEFURlNfSAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc3RhdGZzLmg+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9zdHJpbmcuaCBiL2luY2x1ZGUvYXNtLWkzODYvc3RyaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY3OTk4MwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvc3RyaW5nLmgKQEAgLTAsMCArMSw0NDkgQEAKKyNpZm5kZWYgX0kzODZfU1RSSU5HX0hfCisjZGVmaW5lIF9JMzg2X1NUUklOR19IXworCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorLyoKKyAqIE9uIGEgNDg2IG9yIFBlbnRpdW0sIHdlIGFyZSBiZXR0ZXIgb2ZmIG5vdCB1c2luZyB0aGUKKyAqIGJ5dGUgc3RyaW5nIG9wZXJhdGlvbnMuIEJ1dCBvbiBhIDM4NiBvciBhIFBQcm8gdGhlCisgKiBieXRlIHN0cmluZyBvcHMgYXJlIGZhc3RlciB0aGFuIGRvaW5nIGl0IGJ5IGhhbmQKKyAqIChNVUNIIGZhc3RlciBvbiBhIFBlbnRpdW0pLgorICovCisKKy8qCisgKiBUaGlzIHN0cmluZy1pbmNsdWRlIGRlZmluZXMgYWxsIHN0cmluZyBmdW5jdGlvbnMgYXMgaW5saW5lCisgKiBmdW5jdGlvbnMuIFVzZSBnY2MuIEl0IGFsc28gYXNzdW1lcyBkcz1lcz1kYXRhIHNwYWNlLCB0aGlzIHNob3VsZCBiZQorICogbm9ybWFsLiBNb3N0IG9mIHRoZSBzdHJpbmctZnVuY3Rpb25zIGFyZSByYXRoZXIgaGVhdmlseSBoYW5kLW9wdGltaXplZCwKKyAqIHNlZSBlc3BlY2lhbGx5IHN0cnNlcCxzdHJzdHIsc3RyW2Ndc3BuLiBUaGV5IHNob3VsZCB3b3JrLCBidXQgYXJlIG5vdAorICogdmVyeSBlYXN5IHRvIHVuZGVyc3RhbmQuIEV2ZXJ5dGhpbmcgaXMgZG9uZSBlbnRpcmVseSB3aXRoaW4gdGhlIHJlZ2lzdGVyCisgKiBzZXQsIG1ha2luZyB0aGUgZnVuY3Rpb25zIGZhc3QgYW5kIGNsZWFuLiBTdHJpbmcgaW5zdHJ1Y3Rpb25zIGhhdmUgYmVlbgorICogdXNlZCB0aHJvdWdoLW91dCwgbWFraW5nIGZvciAic2xpZ2h0bHkiIHVuY2xlYXIgY29kZSA6LSkKKyAqCisgKgkJTk8gQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyIExpbnVzIFRvcnZhbGRzLAorICoJCWNvbnNpZGVyIHRoZXNlIHRyaXZpYWwgZnVuY3Rpb25zIHRvIGJlIFBELgorICovCisKKy8qIEFLOiBpbiBmYWN0IEkgYmV0IGl0IHdvdWxkIGJlIGJldHRlciB0byBtb3ZlIHRoaXMgc3R1ZmYgYWxsIG91dCBvZiBsaW5lLgorICovCisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSQ1BZCitzdGF0aWMgaW5saW5lIGNoYXIgKiBzdHJjcHkoY2hhciAqIGRlc3QsY29uc3QgY2hhciAqc3JjKQoreworaW50IGQwLCBkMSwgZDI7CitfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkiMTpcdGxvZHNiXG5cdCIKKwkic3Rvc2Jcblx0IgorCSJ0ZXN0YiAlJWFsLCUlYWxcblx0IgorCSJqbmUgMWIiCisJOiAiPSZTIiAoZDApLCAiPSZEIiAoZDEpLCAiPSZhIiAoZDIpCisJOiIwIiAoc3JjKSwiMSIgKGRlc3QpIDogIm1lbW9yeSIpOworcmV0dXJuIGRlc3Q7Cit9CisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSTkNQWQorc3RhdGljIGlubGluZSBjaGFyICogc3RybmNweShjaGFyICogZGVzdCxjb25zdCBjaGFyICpzcmMsc2l6ZV90IGNvdW50KQoreworaW50IGQwLCBkMSwgZDIsIGQzOworX19hc21fXyBfX3ZvbGF0aWxlX18oCisJIjE6XHRkZWNsICUyXG5cdCIKKwkianMgMmZcblx0IgorCSJsb2RzYlxuXHQiCisJInN0b3NiXG5cdCIKKwkidGVzdGIgJSVhbCwlJWFsXG5cdCIKKwkiam5lIDFiXG5cdCIKKwkicmVwXG5cdCIKKwkic3Rvc2JcbiIKKwkiMjoiCisJOiAiPSZTIiAoZDApLCAiPSZEIiAoZDEpLCAiPSZjIiAoZDIpLCAiPSZhIiAoZDMpCisJOiIwIiAoc3JjKSwiMSIgKGRlc3QpLCIyIiAoY291bnQpIDogIm1lbW9yeSIpOworcmV0dXJuIGRlc3Q7Cit9CisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSQ0FUCitzdGF0aWMgaW5saW5lIGNoYXIgKiBzdHJjYXQoY2hhciAqIGRlc3QsY29uc3QgY2hhciAqIHNyYykKK3sKK2ludCBkMCwgZDEsIGQyLCBkMzsKK19fYXNtX18gX192b2xhdGlsZV9fKAorCSJyZXBuZVxuXHQiCisJInNjYXNiXG5cdCIKKwkiZGVjbCAlMVxuIgorCSIxOlx0bG9kc2Jcblx0IgorCSJzdG9zYlxuXHQiCisJInRlc3RiICUlYWwsJSVhbFxuXHQiCisJImpuZSAxYiIKKwk6ICI9JlMiIChkMCksICI9JkQiIChkMSksICI9JmEiIChkMiksICI9JmMiIChkMykKKwk6ICIwIiAoc3JjKSwgIjEiIChkZXN0KSwgIjIiICgwKSwgIjMiICgweGZmZmZmZmZmdSk6Im1lbW9yeSIpOworcmV0dXJuIGRlc3Q7Cit9CisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSTkNBVAorc3RhdGljIGlubGluZSBjaGFyICogc3RybmNhdChjaGFyICogZGVzdCxjb25zdCBjaGFyICogc3JjLHNpemVfdCBjb3VudCkKK3sKK2ludCBkMCwgZDEsIGQyLCBkMzsKK19fYXNtX18gX192b2xhdGlsZV9fKAorCSJyZXBuZVxuXHQiCisJInNjYXNiXG5cdCIKKwkiZGVjbCAlMVxuXHQiCisJIm1vdmwgJTgsJTNcbiIKKwkiMTpcdGRlY2wgJTNcblx0IgorCSJqcyAyZlxuXHQiCisJImxvZHNiXG5cdCIKKwkic3Rvc2Jcblx0IgorCSJ0ZXN0YiAlJWFsLCUlYWxcblx0IgorCSJqbmUgMWJcbiIKKwkiMjpcdHhvcmwgJTIsJTJcblx0IgorCSJzdG9zYiIKKwk6ICI9JlMiIChkMCksICI9JkQiIChkMSksICI9JmEiIChkMiksICI9JmMiIChkMykKKwk6ICIwIiAoc3JjKSwiMSIgKGRlc3QpLCIyIiAoMCksIjMiICgweGZmZmZmZmZmdSksICJnIiAoY291bnQpCisJOiAibWVtb3J5Iik7CityZXR1cm4gZGVzdDsKK30KKworI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJDTVAKK3N0YXRpYyBpbmxpbmUgaW50IHN0cmNtcChjb25zdCBjaGFyICogY3MsY29uc3QgY2hhciAqIGN0KQoreworaW50IGQwLCBkMTsKK3JlZ2lzdGVyIGludCBfX3JlczsKK19fYXNtX18gX192b2xhdGlsZV9fKAorCSIxOlx0bG9kc2Jcblx0IgorCSJzY2FzYlxuXHQiCisJImpuZSAyZlxuXHQiCisJInRlc3RiICUlYWwsJSVhbFxuXHQiCisJImpuZSAxYlxuXHQiCisJInhvcmwgJSVlYXgsJSVlYXhcblx0IgorCSJqbXAgM2ZcbiIKKwkiMjpcdHNiYmwgJSVlYXgsJSVlYXhcblx0IgorCSJvcmIgJDEsJSVhbFxuIgorCSIzOiIKKwk6Ij1hIiAoX19yZXMpLCAiPSZTIiAoZDApLCAiPSZEIiAoZDEpCisJCSAgICAgOiIxIiAoY3MpLCIyIiAoY3QpKTsKK3JldHVybiBfX3JlczsKK30KKworI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJOQ01QCitzdGF0aWMgaW5saW5lIGludCBzdHJuY21wKGNvbnN0IGNoYXIgKiBjcyxjb25zdCBjaGFyICogY3Qsc2l6ZV90IGNvdW50KQoreworcmVnaXN0ZXIgaW50IF9fcmVzOworaW50IGQwLCBkMSwgZDI7CitfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkiMTpcdGRlY2wgJTNcblx0IgorCSJqcyAyZlxuXHQiCisJImxvZHNiXG5cdCIKKwkic2Nhc2Jcblx0IgorCSJqbmUgM2Zcblx0IgorCSJ0ZXN0YiAlJWFsLCUlYWxcblx0IgorCSJqbmUgMWJcbiIKKwkiMjpcdHhvcmwgJSVlYXgsJSVlYXhcblx0IgorCSJqbXAgNGZcbiIKKwkiMzpcdHNiYmwgJSVlYXgsJSVlYXhcblx0IgorCSJvcmIgJDEsJSVhbFxuIgorCSI0OiIKKwkJICAgICA6Ij1hIiAoX19yZXMpLCAiPSZTIiAoZDApLCAiPSZEIiAoZDEpLCAiPSZjIiAoZDIpCisJCSAgICAgOiIxIiAoY3MpLCIyIiAoY3QpLCIzIiAoY291bnQpKTsKK3JldHVybiBfX3JlczsKK30KKworI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJDSFIKK3N0YXRpYyBpbmxpbmUgY2hhciAqIHN0cmNocihjb25zdCBjaGFyICogcywgaW50IGMpCit7CitpbnQgZDA7CityZWdpc3RlciBjaGFyICogX19yZXM7CitfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkibW92YiAlJWFsLCUlYWhcbiIKKwkiMTpcdGxvZHNiXG5cdCIKKwkiY21wYiAlJWFoLCUlYWxcblx0IgorCSJqZSAyZlxuXHQiCisJInRlc3RiICUlYWwsJSVhbFxuXHQiCisJImpuZSAxYlxuXHQiCisJIm1vdmwgJDEsJTFcbiIKKwkiMjpcdG1vdmwgJTEsJTBcblx0IgorCSJkZWNsICUwIgorCToiPWEiIChfX3JlcyksICI9JlMiIChkMCkgOiAiMSIgKHMpLCIwIiAoYykpOworcmV0dXJuIF9fcmVzOworfQorCisjZGVmaW5lIF9fSEFWRV9BUkNIX1NUUlJDSFIKK3N0YXRpYyBpbmxpbmUgY2hhciAqIHN0cnJjaHIoY29uc3QgY2hhciAqIHMsIGludCBjKQoreworaW50IGQwLCBkMTsKK3JlZ2lzdGVyIGNoYXIgKiBfX3JlczsKK19fYXNtX18gX192b2xhdGlsZV9fKAorCSJtb3ZiICUlYWwsJSVhaFxuIgorCSIxOlx0bG9kc2Jcblx0IgorCSJjbXBiICUlYWgsJSVhbFxuXHQiCisJImpuZSAyZlxuXHQiCisJImxlYWwgLTEoJSVlc2kpLCUwXG4iCisJIjI6XHR0ZXN0YiAlJWFsLCUlYWxcblx0IgorCSJqbmUgMWIiCisJOiI9ZyIgKF9fcmVzKSwgIj0mUyIgKGQwKSwgIj0mYSIgKGQxKSA6IjAiICgwKSwiMSIgKHMpLCIyIiAoYykpOworcmV0dXJuIF9fcmVzOworfQorCisjZGVmaW5lIF9fSEFWRV9BUkNIX1NUUkxFTgorc3RhdGljIGlubGluZSBzaXplX3Qgc3RybGVuKGNvbnN0IGNoYXIgKiBzKQoreworaW50IGQwOworcmVnaXN0ZXIgaW50IF9fcmVzOworX19hc21fXyBfX3ZvbGF0aWxlX18oCisJInJlcG5lXG5cdCIKKwkic2Nhc2Jcblx0IgorCSJub3RsICUwXG5cdCIKKwkiZGVjbCAlMCIKKwk6Ij1jIiAoX19yZXMpLCAiPSZEIiAoZDApIDoiMSIgKHMpLCJhIiAoMCksICIwIiAoMHhmZmZmZmZmZnUpKTsKK3JldHVybiBfX3JlczsKK30KKworc3RhdGljIGlubGluZSB2b2lkICogX19tZW1jcHkodm9pZCAqIHRvLCBjb25zdCB2b2lkICogZnJvbSwgc2l6ZV90IG4pCit7CitpbnQgZDAsIGQxLCBkMjsKK19fYXNtX18gX192b2xhdGlsZV9fKAorCSJyZXAgOyBtb3ZzbFxuXHQiCisJInRlc3RiICQyLCViNFxuXHQiCisJImplIDFmXG5cdCIKKwkibW92c3dcbiIKKwkiMTpcdHRlc3RiICQxLCViNFxuXHQiCisJImplIDJmXG5cdCIKKwkibW92c2JcbiIKKwkiMjoiCisJOiAiPSZjIiAoZDApLCAiPSZEIiAoZDEpLCAiPSZTIiAoZDIpCisJOiIwIiAobi80KSwgInEiIChuKSwiMSIgKChsb25nKSB0byksIjIiICgobG9uZykgZnJvbSkKKwk6ICJtZW1vcnkiKTsKK3JldHVybiAodG8pOworfQorCisvKgorICogVGhpcyBsb29rcyBob3JyaWJseSB1Z2x5LCBidXQgdGhlIGNvbXBpbGVyIGNhbiBvcHRpbWl6ZSBpdCB0b3RhbGx5LAorICogYXMgdGhlIGNvdW50IGlzIGNvbnN0YW50LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgKiBfX2NvbnN0YW50X21lbWNweSh2b2lkICogdG8sIGNvbnN0IHZvaWQgKiBmcm9tLCBzaXplX3QgbikKK3sKKwlpZiAobiA8PSAxMjgpCisJCXJldHVybiBfX2J1aWx0aW5fbWVtY3B5KHRvLCBmcm9tLCBuKTsKKworI2RlZmluZSBDT01NT04oeCkgXAorX19hc21fXyBfX3ZvbGF0aWxlX18oIFwKKwkicmVwIDsgbW92c2wiIFwKKwl4IFwKKwk6ICI9JmMiIChkMCksICI9JkQiIChkMSksICI9JlMiIChkMikgXAorCTogIjAiIChuLzQpLCIxIiAoKGxvbmcpIHRvKSwiMiIgKChsb25nKSBmcm9tKSBcCisJOiAibWVtb3J5Iik7Cit7CisJaW50IGQwLCBkMSwgZDI7CisJc3dpdGNoIChuICUgNCkgeworCQljYXNlIDA6IENPTU1PTigiIik7IHJldHVybiB0bzsKKwkJY2FzZSAxOiBDT01NT04oIlxuXHRtb3ZzYiIpOyByZXR1cm4gdG87CisJCWNhc2UgMjogQ09NTU9OKCJcblx0bW92c3ciKTsgcmV0dXJuIHRvOworCQlkZWZhdWx0OiBDT01NT04oIlxuXHRtb3Zzd1xuXHRtb3ZzYiIpOyByZXR1cm4gdG87CisJfQorfQorICAKKyN1bmRlZiBDT01NT04KK30KKworI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1DUFkKKworI2lmZGVmIENPTkZJR19YODZfVVNFXzNETk9XCisKKyNpbmNsdWRlIDxhc20vbW14Lmg+CisKKy8qCisgKglUaGlzIENQVSBmYXZvdXJzIDNETm93IHN0cm9uZ2x5IChlZyBBTUQgQXRobG9uKQorICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqIF9fY29uc3RhbnRfbWVtY3B5M2Qodm9pZCAqIHRvLCBjb25zdCB2b2lkICogZnJvbSwgc2l6ZV90IGxlbikKK3sKKwlpZiAobGVuIDwgNTEyKQorCQlyZXR1cm4gX19jb25zdGFudF9tZW1jcHkodG8sIGZyb20sIGxlbik7CisJcmV0dXJuIF9tbXhfbWVtY3B5KHRvLCBmcm9tLCBsZW4pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkICpfX21lbWNweTNkKHZvaWQgKnRvLCBjb25zdCB2b2lkICpmcm9tLCBzaXplX3QgbGVuKQoreworCWlmIChsZW4gPCA1MTIpCisJCXJldHVybiBfX21lbWNweSh0bywgZnJvbSwgbGVuKTsKKwlyZXR1cm4gX21teF9tZW1jcHkodG8sIGZyb20sIGxlbik7Cit9CisKKyNkZWZpbmUgbWVtY3B5KHQsIGYsIG4pIFwKKyhfX2J1aWx0aW5fY29uc3RhbnRfcChuKSA/IFwKKyBfX2NvbnN0YW50X21lbWNweTNkKCh0KSwoZiksKG4pKSA6IFwKKyBfX21lbWNweTNkKCh0KSwoZiksKG4pKSkKKworI2Vsc2UKKworLyoKKyAqCU5vIDNEIE5vdyEKKyAqLworIAorI2RlZmluZSBtZW1jcHkodCwgZiwgbikgXAorKF9fYnVpbHRpbl9jb25zdGFudF9wKG4pID8gXAorIF9fY29uc3RhbnRfbWVtY3B5KCh0KSwoZiksKG4pKSA6IFwKKyBfX21lbWNweSgodCksKGYpLChuKSkpCisKKyNlbmRpZgorCisjZGVmaW5lIF9fSEFWRV9BUkNIX01FTU1PVkUKK3ZvaWQgKm1lbW1vdmUodm9pZCAqIGRlc3QsY29uc3Qgdm9pZCAqIHNyYywgc2l6ZV90IG4pOworCisjZGVmaW5lIG1lbWNtcCBfX2J1aWx0aW5fbWVtY21wCisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNQ0hSCitzdGF0aWMgaW5saW5lIHZvaWQgKiBtZW1jaHIoY29uc3Qgdm9pZCAqIGNzLGludCBjLHNpemVfdCBjb3VudCkKK3sKK2ludCBkMDsKK3JlZ2lzdGVyIHZvaWQgKiBfX3JlczsKK2lmICghY291bnQpCisJcmV0dXJuIE5VTEw7CitfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkicmVwbmVcblx0IgorCSJzY2FzYlxuXHQiCisJImplIDFmXG5cdCIKKwkibW92bCAkMSwlMFxuIgorCSIxOlx0ZGVjbCAlMCIKKwk6Ij1EIiAoX19yZXMpLCAiPSZjIiAoZDApIDogImEiIChjKSwiMCIgKGNzKSwiMSIgKGNvdW50KSk7CityZXR1cm4gX19yZXM7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqIF9fbWVtc2V0X2dlbmVyaWModm9pZCAqIHMsIGNoYXIgYyxzaXplX3QgY291bnQpCit7CitpbnQgZDAsIGQxOworX19hc21fXyBfX3ZvbGF0aWxlX18oCisJInJlcFxuXHQiCisJInN0b3NiIgorCTogIj0mYyIgKGQwKSwgIj0mRCIgKGQxKQorCToiYSIgKGMpLCIxIiAocyksIjAiIChjb3VudCkKKwk6Im1lbW9yeSIpOworcmV0dXJuIHM7Cit9CisKKy8qIHdlIG1pZ2h0IHdhbnQgdG8gd3JpdGUgb3B0aW1pemVkIHZlcnNpb25zIG9mIHRoZXNlIGxhdGVyICovCisjZGVmaW5lIF9fY29uc3RhbnRfY291bnRfbWVtc2V0KHMsYyxjb3VudCkgX19tZW1zZXRfZ2VuZXJpYygocyksKGMpLChjb3VudCkpCisKKy8qCisgKiBtZW1zZXQoeCwwLHkpIGlzIGEgcmVhc29uYWJseSBjb21tb24gdGhpbmcgdG8gZG8sIHNvIHdlIHdhbnQgdG8gZmlsbAorICogdGhpbmdzIDMyIGJpdHMgYXQgYSB0aW1lIGV2ZW4gd2hlbiB3ZSBkb24ndCBrbm93IHRoZSBzaXplIG9mIHRoZQorICogYXJlYSBhdCBjb21waWxlLXRpbWUuLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgKiBfX2NvbnN0YW50X2NfbWVtc2V0KHZvaWQgKiBzLCB1bnNpZ25lZCBsb25nIGMsIHNpemVfdCBjb3VudCkKK3sKK2ludCBkMCwgZDE7CitfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkicmVwIDsgc3Rvc2xcblx0IgorCSJ0ZXN0YiAkMiwlYjNcblx0IgorCSJqZSAxZlxuXHQiCisJInN0b3N3XG4iCisJIjE6XHR0ZXN0YiAkMSwlYjNcblx0IgorCSJqZSAyZlxuXHQiCisJInN0b3NiXG4iCisJIjI6IgorCTogIj0mYyIgKGQwKSwgIj0mRCIgKGQxKQorCToiYSIgKGMpLCAicSIgKGNvdW50KSwgIjAiIChjb3VudC80KSwgIjEiICgobG9uZykgcykKKwk6Im1lbW9yeSIpOworcmV0dXJuIChzKTsJCit9CisKKy8qIEFkZGVkIGJ5IEdlcnRqYW4gdmFuIFdpbmdlcmRlIHRvIG1ha2UgbWluaXggYW5kIHN5c3YgbW9kdWxlIHdvcmsgKi8KKyNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSTkxFTgorc3RhdGljIGlubGluZSBzaXplX3Qgc3Rybmxlbihjb25zdCBjaGFyICogcywgc2l6ZV90IGNvdW50KQoreworaW50IGQwOworcmVnaXN0ZXIgaW50IF9fcmVzOworX19hc21fXyBfX3ZvbGF0aWxlX18oCisJIm1vdmwgJTIsJTBcblx0IgorCSJqbXAgMmZcbiIKKwkiMTpcdGNtcGIgJDAsKCUwKVxuXHQiCisJImplIDNmXG5cdCIKKwkiaW5jbCAlMFxuIgorCSIyOlx0ZGVjbCAlMVxuXHQiCisJImNtcGwgJC0xLCUxXG5cdCIKKwkiam5lIDFiXG4iCisJIjM6XHRzdWJsICUyLCUwIgorCToiPWEiIChfX3JlcyksICI9JmQiIChkMCkKKwk6ImMiIChzKSwiMSIgKGNvdW50KSk7CityZXR1cm4gX19yZXM7Cit9CisvKiBlbmQgb2YgYWRkaXRpb25hbCBzdHVmZiAqLworCisjZGVmaW5lIF9fSEFWRV9BUkNIX1NUUlNUUgorCitleHRlcm4gY2hhciAqc3Ryc3RyKGNvbnN0IGNoYXIgKmNzLCBjb25zdCBjaGFyICpjdCk7CisKKy8qCisgKiBUaGlzIGxvb2tzIGhvcnJpYmx5IHVnbHksIGJ1dCB0aGUgY29tcGlsZXIgY2FuIG9wdGltaXplIGl0IHRvdGFsbHksCisgKiBhcyB3ZSBieSBub3cga25vdyB0aGF0IGJvdGggcGF0dGVybiBhbmQgY291bnQgaXMgY29uc3RhbnQuLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgKiBfX2NvbnN0YW50X2NfYW5kX2NvdW50X21lbXNldCh2b2lkICogcywgdW5zaWduZWQgbG9uZyBwYXR0ZXJuLCBzaXplX3QgY291bnQpCit7CisJc3dpdGNoIChjb3VudCkgeworCQljYXNlIDA6CisJCQlyZXR1cm4gczsKKwkJY2FzZSAxOgorCQkJKih1bnNpZ25lZCBjaGFyICopcyA9IHBhdHRlcm47CisJCQlyZXR1cm4gczsKKwkJY2FzZSAyOgorCQkJKih1bnNpZ25lZCBzaG9ydCAqKXMgPSBwYXR0ZXJuOworCQkJcmV0dXJuIHM7CisJCWNhc2UgMzoKKwkJCSoodW5zaWduZWQgc2hvcnQgKilzID0gcGF0dGVybjsKKwkJCSooMisodW5zaWduZWQgY2hhciAqKXMpID0gcGF0dGVybjsKKwkJCXJldHVybiBzOworCQljYXNlIDQ6CisJCQkqKHVuc2lnbmVkIGxvbmcgKilzID0gcGF0dGVybjsKKwkJCXJldHVybiBzOworCX0KKyNkZWZpbmUgQ09NTU9OKHgpIFwKK19fYXNtX18gIF9fdm9sYXRpbGVfXyggXAorCSJyZXAgOyBzdG9zbCIgXAorCXggXAorCTogIj0mYyIgKGQwKSwgIj0mRCIgKGQxKSBcCisJOiAiYSIgKHBhdHRlcm4pLCIwIiAoY291bnQvNCksIjEiICgobG9uZykgcykgXAorCTogIm1lbW9yeSIpCit7CisJaW50IGQwLCBkMTsKKwlzd2l0Y2ggKGNvdW50ICUgNCkgeworCQljYXNlIDA6IENPTU1PTigiIik7IHJldHVybiBzOworCQljYXNlIDE6IENPTU1PTigiXG5cdHN0b3NiIik7IHJldHVybiBzOworCQljYXNlIDI6IENPTU1PTigiXG5cdHN0b3N3Iik7IHJldHVybiBzOworCQlkZWZhdWx0OiBDT01NT04oIlxuXHRzdG9zd1xuXHRzdG9zYiIpOyByZXR1cm4gczsKKwl9Cit9CisgIAorI3VuZGVmIENPTU1PTgorfQorCisjZGVmaW5lIF9fY29uc3RhbnRfY194X21lbXNldChzLCBjLCBjb3VudCkgXAorKF9fYnVpbHRpbl9jb25zdGFudF9wKGNvdW50KSA/IFwKKyBfX2NvbnN0YW50X2NfYW5kX2NvdW50X21lbXNldCgocyksKGMpLChjb3VudCkpIDogXAorIF9fY29uc3RhbnRfY19tZW1zZXQoKHMpLChjKSwoY291bnQpKSkKKworI2RlZmluZSBfX21lbXNldChzLCBjLCBjb3VudCkgXAorKF9fYnVpbHRpbl9jb25zdGFudF9wKGNvdW50KSA/IFwKKyBfX2NvbnN0YW50X2NvdW50X21lbXNldCgocyksKGMpLChjb3VudCkpIDogXAorIF9fbWVtc2V0X2dlbmVyaWMoKHMpLChjKSwoY291bnQpKSkKKworI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1TRVQKKyNkZWZpbmUgbWVtc2V0KHMsIGMsIGNvdW50KSBcCisoX19idWlsdGluX2NvbnN0YW50X3AoYykgPyBcCisgX19jb25zdGFudF9jX3hfbWVtc2V0KChzKSwoMHgwMTAxMDEwMVVMKih1bnNpZ25lZCBjaGFyKShjKSksKGNvdW50KSkgOiBcCisgX19tZW1zZXQoKHMpLChjKSwoY291bnQpKSkKKworLyoKKyAqIGZpbmQgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgYnl0ZSAnYycsIG9yIDEgcGFzdCB0aGUgYXJlYSBpZiBub25lCisgKi8KKyNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNU0NBTgorc3RhdGljIGlubGluZSB2b2lkICogbWVtc2Nhbih2b2lkICogYWRkciwgaW50IGMsIHNpemVfdCBzaXplKQoreworCWlmICghc2l6ZSkKKwkJcmV0dXJuIGFkZHI7CisJX19hc21fXygicmVwbno7IHNjYXNiXG5cdCIKKwkJImpueiAxZlxuXHQiCisJCSJkZWMgJSVlZGlcbiIKKwkJIjE6IgorCQk6ICI9RCIgKGFkZHIpLCAiPWMiIChzaXplKQorCQk6ICIwIiAoYWRkciksICIxIiAoc2l6ZSksICJhIiAoYykpOworCXJldHVybiBhZGRyOworfQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvc3VzcGVuZC5oIGIvaW5jbHVkZS9hc20taTM4Ni9zdXNwZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGZjMTExNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvc3VzcGVuZC5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMS0yMDAyIFBhdmVsIE1hY2hlayA8cGF2ZWxAc3VzZS5jej4KKyAqIEJhc2VkIG9uIGNvZGUKKyAqIENvcHlyaWdodCAyMDAxIFBhdHJpY2sgTW9jaGVsIDxtb2NoZWxAb3NkbC5vcmc+CisgKi8KKyNpbmNsdWRlIDxhc20vZGVzYy5oPgorI2luY2x1ZGUgPGFzbS9pMzg3Lmg+CisKK3N0YXRpYyBpbmxpbmUgaW50CithcmNoX3ByZXBhcmVfc3VzcGVuZCh2b2lkKQoreworCS8qIElmIHlvdSB3YW50IHRvIG1ha2Ugbm9uLVBTRSBtYWNoaW5lIHdvcmssIHR1cm4gb2ZmIHBhZ2luZworICAgICAgICAgICBpbiBzd3N1c3BfYXJjaF9zdXNwZW5kLiBzd3N1c3BfcGdfZGlyIHNob3VsZCBoYXZlIGlkZW50aXR5IG1hcHBpbmcsIHNvCisgICAgICAgICAgIGl0IGNvdWxkIHdvcmsuLi4gICovCisJaWYgKCFjcHVfaGFzX3BzZSkgeworCQlwcmludGsoS0VSTl9FUlIgIlBTRSBpcyByZXF1aXJlZCBmb3Igc3dzdXNwLlxuIik7CisJCXJldHVybiAtRVBFUk07CisJfQorCXJldHVybiAwOworfQorCisvKiBpbWFnZSBvZiB0aGUgc2F2ZWQgcHJvY2Vzc29yIHN0YXRlICovCitzdHJ1Y3Qgc2F2ZWRfY29udGV4dCB7CisgIAl1MTYgZXMsIGZzLCBncywgc3M7CisJdW5zaWduZWQgbG9uZyBjcjAsIGNyMiwgY3IzLCBjcjQ7CisJdTE2IGdkdF9wYWQ7CisJdTE2IGdkdF9saW1pdDsKKwl1bnNpZ25lZCBsb25nIGdkdF9iYXNlOworCXUxNiBpZHRfcGFkOworCXUxNiBpZHRfbGltaXQ7CisJdW5zaWduZWQgbG9uZyBpZHRfYmFzZTsKKwl1MTYgbGR0OworCXUxNiB0c3M7CisJdW5zaWduZWQgbG9uZyB0cjsKKwl1bnNpZ25lZCBsb25nIHNhZmV0eTsKKwl1bnNpZ25lZCBsb25nIHJldHVybl9hZGRyZXNzOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBsb2FkZGVidWcodGhyZWFkLHJlZ2lzdGVyKSBcCisgICAgICAgICAgICAgICBfX2FzbV9fKCJtb3ZsICUwLCUlZGIiICNyZWdpc3RlciAgXAorICAgICAgICAgICAgICAgICAgICAgICA6IC8qIG5vIG91dHB1dCAqLyBcCisgICAgICAgICAgICAgICAgICAgICAgIDoiciIgKCh0aHJlYWQpLT5kZWJ1Z3JlZ1tyZWdpc3Rlcl0pKQorCisjaWZkZWYgQ09ORklHX0FDUElfU0xFRVAKK2V4dGVybiB1bnNpZ25lZCBsb25nIHNhdmVkX2VpcDsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHNhdmVkX2VzcDsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHNhdmVkX2VicDsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHNhdmVkX2VieDsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHNhdmVkX2VzaTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHNhdmVkX2VkaTsKKworc3RhdGljIGlubGluZSB2b2lkIGFjcGlfc2F2ZV9yZWdpc3Rlcl9zdGF0ZSh1bnNpZ25lZCBsb25nIHJldHVybl9wb2ludCkKK3sKKwlzYXZlZF9laXAgPSByZXR1cm5fcG9pbnQ7CisJYXNtIHZvbGF0aWxlICgibW92bCAlJWVzcCwlMCIgOiAiPW0iIChzYXZlZF9lc3ApKTsKKwlhc20gdm9sYXRpbGUgKCJtb3ZsICUlZWJwLCUwIiA6ICI9bSIgKHNhdmVkX2VicCkpOworCWFzbSB2b2xhdGlsZSAoIm1vdmwgJSVlYngsJTAiIDogIj1tIiAoc2F2ZWRfZWJ4KSk7CisJYXNtIHZvbGF0aWxlICgibW92bCAlJWVkaSwlMCIgOiAiPW0iIChzYXZlZF9lZGkpKTsKKwlhc20gdm9sYXRpbGUgKCJtb3ZsICUlZXNpLCUwIiA6ICI9bSIgKHNhdmVkX2VzaSkpOworfQorCisjZGVmaW5lIGFjcGlfcmVzdG9yZV9yZWdpc3Rlcl9zdGF0ZSgpICBkbyB7fSB3aGlsZSAoMCkKKworLyogcm91dGluZXMgZm9yIHNhdmluZy9yZXN0b3Jpbmcga2VybmVsIHN0YXRlICovCitleHRlcm4gaW50IGFjcGlfc2F2ZV9zdGF0ZV9tZW0odm9pZCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1pMzg2L3N5c3RlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmNzRkNGMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3N5c3RlbS5oCkBAIC0wLDAgKzEsNDczIEBACisjaWZuZGVmIF9fQVNNX1NZU1RFTV9ICisjZGVmaW5lIF9fQVNNX1NZU1RFTV9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgorI2luY2x1ZGUgPGFzbS9jcHVmZWF0dXJlLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+IC8qIGZvciBMT0NLX1BSRUZJWCAqLworCisjaWZkZWYgX19LRVJORUxfXworCitzdHJ1Y3QgdGFza19zdHJ1Y3Q7CS8qIG9uZSBvZiB0aGUgc3RyYW5nZXIgYXNwZWN0cyBvZiBDIGZvcndhcmQgZGVjbGFyYXRpb25zLi4gKi8KK2V4dGVybiBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBGQVNUQ0FMTChfX3N3aXRjaF90byhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYsIHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCkpOworCisjZGVmaW5lIHN3aXRjaF90byhwcmV2LG5leHQsbGFzdCkgZG8gewkJCQkJXAorCXVuc2lnbmVkIGxvbmcgZXNpLGVkaTsJCQkJCQlcCisJYXNtIHZvbGF0aWxlKCJwdXNoZmxcblx0IgkJCQkJXAorCQkgICAgICJwdXNobCAlJWVicFxuXHQiCQkJCQlcCisJCSAgICAgIm1vdmwgJSVlc3AsJTBcblx0IgkvKiBzYXZlIEVTUCAqLwkJXAorCQkgICAgICJtb3ZsICU1LCUlZXNwXG5cdCIJLyogcmVzdG9yZSBFU1AgKi8JXAorCQkgICAgICJtb3ZsICQxZiwlMVxuXHQiCQkvKiBzYXZlIEVJUCAqLwkJXAorCQkgICAgICJwdXNobCAlNlxuXHQiCQkvKiByZXN0b3JlIEVJUCAqLwlcCisJCSAgICAgImptcCBfX3N3aXRjaF90b1xuIgkJCQlcCisJCSAgICAgIjE6XHQiCQkJCQkJXAorCQkgICAgICJwb3BsICUlZWJwXG5cdCIJCQkJCVwKKwkJICAgICAicG9wZmwiCQkJCQkJXAorCQkgICAgIDoiPW0iIChwcmV2LT50aHJlYWQuZXNwKSwiPW0iIChwcmV2LT50aHJlYWQuZWlwKSwJXAorCQkgICAgICAiPWEiIChsYXN0KSwiPVMiIChlc2kpLCI9RCIgKGVkaSkJCQlcCisJCSAgICAgOiJtIiAobmV4dC0+dGhyZWFkLmVzcCksIm0iIChuZXh0LT50aHJlYWQuZWlwKSwJXAorCQkgICAgICAiMiIgKHByZXYpLCAiZCIgKG5leHQpKTsJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBfc2V0X2Jhc2UoYWRkcixiYXNlKSBkbyB7IHVuc2lnbmVkIGxvbmcgX19wcjsgXAorX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtb3Z3ICUlZHgsJTFcblx0IiBcCisJInJvcmwgJDE2LCUlZWR4XG5cdCIgXAorCSJtb3ZiICUlZGwsJTJcblx0IiBcCisJIm1vdmIgJSVkaCwlMyIgXAorCToiPSZkIiAoX19wcikgXAorCToibSIgKCooKGFkZHIpKzIpKSwgXAorCSAibSIgKCooKGFkZHIpKzQpKSwgXAorCSAibSIgKCooKGFkZHIpKzcpKSwgXAorICAgICAgICAgIjAiIChiYXNlKSBcCisgICAgICAgICk7IH0gd2hpbGUoMCkKKworI2RlZmluZSBfc2V0X2xpbWl0KGFkZHIsbGltaXQpIGRvIHsgdW5zaWduZWQgbG9uZyBfX2xyOyBcCitfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1vdncgJSVkeCwlMVxuXHQiIFwKKwkicm9ybCAkMTYsJSVlZHhcblx0IiBcCisJIm1vdmIgJTIsJSVkaFxuXHQiIFwKKwkiYW5kYiAkMHhmMCwlJWRoXG5cdCIgXAorCSJvcmIgJSVkaCwlJWRsXG5cdCIgXAorCSJtb3ZiICUlZGwsJTIiIFwKKwk6Ij0mZCIgKF9fbHIpIFwKKwk6Im0iICgqKGFkZHIpKSwgXAorCSAibSIgKCooKGFkZHIpKzYpKSwgXAorCSAiMCIgKGxpbWl0KSBcCisgICAgICAgICk7IH0gd2hpbGUoMCkKKworI2RlZmluZSBzZXRfYmFzZShsZHQsYmFzZSkgX3NldF9iYXNlKCAoKGNoYXIgKikmKGxkdCkpICwgKGJhc2UpICkKKyNkZWZpbmUgc2V0X2xpbWl0KGxkdCxsaW1pdCkgX3NldF9saW1pdCggKChjaGFyICopJihsZHQpKSAsICgobGltaXQpLTEpPj4xMiApCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfZ2V0X2Jhc2UoY2hhciAqIGFkZHIpCit7CisJdW5zaWduZWQgbG9uZyBfX2Jhc2U7CisJX19hc21fXygibW92YiAlMywlJWRoXG5cdCIKKwkJIm1vdmIgJTIsJSVkbFxuXHQiCisJCSJzaGxsICQxNiwlJWVkeFxuXHQiCisJCSJtb3Z3ICUxLCUlZHgiCisJCToiPSZkIiAoX19iYXNlKQorCQk6Im0iICgqKChhZGRyKSsyKSksCisJCSAibSIgKCooKGFkZHIpKzQpKSwKKwkJICJtIiAoKigoYWRkcikrNykpKTsKKwlyZXR1cm4gX19iYXNlOworfQorCisjZGVmaW5lIGdldF9iYXNlKGxkdCkgX2dldF9iYXNlKCAoKGNoYXIgKikmKGxkdCkpICkKKworLyoKKyAqIExvYWQgYSBzZWdtZW50LiBGYWxsIGJhY2sgb24gbG9hZGluZyB0aGUgemVybworICogc2VnbWVudCBpZiBzb21ldGhpbmcgZ29lcyB3cm9uZy4uCisgKi8KKyNkZWZpbmUgbG9hZHNlZ21lbnQoc2VnLHZhbHVlKQkJCVwKKwlhc20gdm9sYXRpbGUoIlxuIgkJCVwKKwkJIjE6XHQiCQkJCVwKKwkJIm1vdmwgJTAsJSUiICNzZWcgIlxuIgkJXAorCQkiMjpcbiIJCQkJXAorCQkiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIglcCisJCSIzOlx0IgkJCQlcCisJCSJwdXNobCAkMFxuXHQiCQkJXAorCQkicG9wbCAlJSIgI3NlZyAiXG5cdCIJCVwKKwkJImptcCAyYlxuIgkJCVwKKwkJIi5wcmV2aW91c1xuIgkJCVwKKwkJIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcblx0IglcCisJCSIuYWxpZ24gNFxuXHQiCQkJXAorCQkiLmxvbmcgMWIsM2JcbiIJCQlcCisJCSIucHJldmlvdXMiCQkJXAorCQk6IDoibSIgKCoodW5zaWduZWQgaW50ICopJih2YWx1ZSkpKQorCisvKgorICogU2F2ZSBhIHNlZ21lbnQgcmVnaXN0ZXIgYXdheQorICovCisjZGVmaW5lIHNhdmVzZWdtZW50KHNlZywgdmFsdWUpIFwKKwlhc20gdm9sYXRpbGUoIm1vdmwgJSUiICNzZWcgIiwlMCI6Ij1tIiAoKihpbnQgKikmKHZhbHVlKSkpCisKKy8qCisgKiBDbGVhciBhbmQgc2V0ICdUUycgYml0IHJlc3BlY3RpdmVseQorICovCisjZGVmaW5lIGNsdHMoKSBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImNsdHMiKQorI2RlZmluZSByZWFkX2NyMCgpICh7IFwKKwl1bnNpZ25lZCBpbnQgX19kdW1teTsgXAorCV9fYXNtX18oIFwKKwkJIm1vdmwgJSVjcjAsJTBcblx0IiBcCisJCToiPXIiIChfX2R1bW15KSk7IFwKKwlfX2R1bW15OyBcCit9KQorI2RlZmluZSB3cml0ZV9jcjAoeCkgXAorCV9fYXNtX18oIm1vdmwgJTAsJSVjcjAiOiA6InIiICh4KSk7CisKKyNkZWZpbmUgcmVhZF9jcjQoKSAoeyBcCisJdW5zaWduZWQgaW50IF9fZHVtbXk7IFwKKwlfX2FzbV9fKCBcCisJCSJtb3ZsICUlY3I0LCUwXG5cdCIgXAorCQk6Ij1yIiAoX19kdW1teSkpOyBcCisJX19kdW1teTsgXAorfSkKKyNkZWZpbmUgd3JpdGVfY3I0KHgpIFwKKwlfX2FzbV9fKCJtb3ZsICUwLCUlY3I0IjogOiJyIiAoeCkpOworI2RlZmluZSBzdHRzKCkgd3JpdGVfY3IwKDggfCByZWFkX2NyMCgpKQorCisjZW5kaWYJLyogX19LRVJORUxfXyAqLworCisjZGVmaW5lIHdiaW52ZCgpIFwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIndiaW52ZCI6IDogOiJtZW1vcnkiKTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9saW1pdCh1bnNpZ25lZCBsb25nIHNlZ21lbnQpCit7CisJdW5zaWduZWQgbG9uZyBfX2xpbWl0OworCV9fYXNtX18oImxzbGwgJTEsJTAiCisJCToiPXIiIChfX2xpbWl0KToiciIgKHNlZ21lbnQpKTsKKwlyZXR1cm4gX19saW1pdCsxOworfQorCisjZGVmaW5lIG5vcCgpIF9fYXNtX18gX192b2xhdGlsZV9fICgibm9wIikKKworI2RlZmluZSB4Y2hnKHB0cix2KSAoKF9fdHlwZW9mX18oKihwdHIpKSlfX3hjaGcoKHVuc2lnbmVkIGxvbmcpKHYpLChwdHIpLHNpemVvZigqKHB0cikpKSkKKworI2RlZmluZSB0YXMocHRyKSAoeGNoZygocHRyKSwxKSkKKworc3RydWN0IF9feGNoZ19kdW1teSB7IHVuc2lnbmVkIGxvbmcgYVsxMDBdOyB9OworI2RlZmluZSBfX3hnKHgpICgoc3RydWN0IF9feGNoZ19kdW1teSAqKSh4KSkKKworCisvKgorICogVGhlIHNlbWFudGljcyBvZiBYQ0hHQ01QOEIgYXJlIGEgYml0IHN0cmFuZ2UsIHRoaXMgaXMgd2h5CisgKiB0aGVyZSBpcyBhIGxvb3AgYW5kIHRoZSBsb2FkaW5nIG9mICUlZWF4IGFuZCAlJWVkeCBoYXMgdG8KKyAqIGJlIGluc2lkZS4gVGhpcyBpbmxpbmVzIHdlbGwgaW4gbW9zdCBjYXNlcywgdGhlIGNhY2hlZAorICogY29zdCBpcyBhcm91bmQgfjM4IGN5Y2xlcy4gKGluIHRoZSBmdXR1cmUgd2UgbWlnaHQgd2FudAorICogdG8gZG8gYW4gU0lNRC8zRE5PVyEvTU1YL0ZQVSA2NC1iaXQgc3RvcmUgaGVyZSwgYnV0IHRoYXQKKyAqIG1pZ2h0IGhhdmUgYW4gaW1wbGljaXQgRlBVLXNhdmUgYXMgYSBjb3N0LCBzbyBpdCdzIG5vdAorICogY2xlYXIgd2hpY2ggcGF0aCB0byBnby4pCisgKgorICogY21weGNoZzhiIG11c3QgYmUgdXNlZCB3aXRoIHRoZSBsb2NrIHByZWZpeCBoZXJlIHRvIGFsbG93CisgKiB0aGUgaW5zdHJ1Y3Rpb24gdG8gYmUgZXhlY3V0ZWQgYXRvbWljYWxseSwgc2VlIHBhZ2UgMy0xMDIKKyAqIG9mIHRoZSBpbnN0cnVjdGlvbiBzZXQgcmVmZXJlbmNlIDI0MzE5MTAyLnBkZi4gV2UgbmVlZAorICogdGhlIHJlYWRlciBzaWRlIHRvIHNlZSB0aGUgY29oZXJlbnQgNjRiaXQgdmFsdWUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3NldF82NGJpdCAodW5zaWduZWQgbG9uZyBsb25nICogcHRyLAorCQl1bnNpZ25lZCBpbnQgbG93LCB1bnNpZ25lZCBpbnQgaGlnaCkKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCSJcbjE6XHQiCisJCSJtb3ZsICglMCksICUlZWF4XG5cdCIKKwkJIm1vdmwgNCglMCksICUlZWR4XG5cdCIKKwkJImxvY2sgY21weGNoZzhiICglMClcblx0IgorCQkiam56IDFiIgorCQk6IC8qIG5vIG91dHB1dHMgKi8KKwkJOgkiRCIocHRyKSwKKwkJCSJiIihsb3cpLAorCQkJImMiKGhpZ2gpCisJCToJImF4IiwiZHgiLCJtZW1vcnkiKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fc2V0XzY0Yml0X2NvbnN0YW50ICh1bnNpZ25lZCBsb25nIGxvbmcgKnB0ciwKKwkJCQkJCSB1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWUpCit7CisJX19zZXRfNjRiaXQocHRyLCh1bnNpZ25lZCBpbnQpKHZhbHVlKSwgKHVuc2lnbmVkIGludCkoKHZhbHVlKT4+MzJVTEwpKTsKK30KKyNkZWZpbmUgbGxfbG93KHgpCSooKCh1bnNpZ25lZCBpbnQqKSYoeCkpKzApCisjZGVmaW5lIGxsX2hpZ2goeCkJKigoKHVuc2lnbmVkIGludCopJih4KSkrMSkKKworc3RhdGljIGlubGluZSB2b2lkIF9fc2V0XzY0Yml0X3ZhciAodW5zaWduZWQgbG9uZyBsb25nICpwdHIsCisJCQkgdW5zaWduZWQgbG9uZyBsb25nIHZhbHVlKQoreworCV9fc2V0XzY0Yml0KHB0cixsbF9sb3codmFsdWUpLCBsbF9oaWdoKHZhbHVlKSk7Cit9CisKKyNkZWZpbmUgc2V0XzY0Yml0KHB0cix2YWx1ZSkgXAorKF9fYnVpbHRpbl9jb25zdGFudF9wKHZhbHVlKSA/IFwKKyBfX3NldF82NGJpdF9jb25zdGFudChwdHIsIHZhbHVlKSA6IFwKKyBfX3NldF82NGJpdF92YXIocHRyLCB2YWx1ZSkgKQorCisjZGVmaW5lIF9zZXRfNjRiaXQocHRyLHZhbHVlKSBcCisoX19idWlsdGluX2NvbnN0YW50X3AodmFsdWUpID8gXAorIF9fc2V0XzY0Yml0KHB0ciwgKHVuc2lnbmVkIGludCkodmFsdWUpLCAodW5zaWduZWQgaW50KSgodmFsdWUpPj4zMlVMTCkgKSA6IFwKKyBfX3NldF82NGJpdChwdHIsIGxsX2xvdyh2YWx1ZSksIGxsX2hpZ2godmFsdWUpKSApCisKKy8qCisgKiBOb3RlOiBubyAibG9jayIgcHJlZml4IGV2ZW4gb24gU01QOiB4Y2hnIGFsd2F5cyBpbXBsaWVzIGxvY2sgYW55d2F5CisgKiBOb3RlIDI6IHhjaGcgaGFzIHNpZGUgZWZmZWN0LCBzbyB0aGF0IGF0dHJpYnV0ZSB2b2xhdGlsZSBpcyBuZWNlc3NhcnksCisgKgkgIGJ1dCBnZW5lcmFsbHkgdGhlIHByaW1pdGl2ZSBpcyBpbnZhbGlkLCAqcHRyIGlzIG91dHB1dCBhcmd1bWVudC4gLS1BTksKKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9feGNoZyh1bnNpZ25lZCBsb25nIHgsIHZvbGF0aWxlIHZvaWQgKiBwdHIsIGludCBzaXplKQoreworCXN3aXRjaCAoc2l6ZSkgeworCQljYXNlIDE6CisJCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygieGNoZ2IgJWIwLCUxIgorCQkJCToiPXEiICh4KQorCQkJCToibSIgKCpfX3hnKHB0cikpLCAiMCIgKHgpCisJCQkJOiJtZW1vcnkiKTsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygieGNoZ3cgJXcwLCUxIgorCQkJCToiPXIiICh4KQorCQkJCToibSIgKCpfX3hnKHB0cikpLCAiMCIgKHgpCisJCQkJOiJtZW1vcnkiKTsKKwkJCWJyZWFrOworCQljYXNlIDQ6CisJCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygieGNoZ2wgJTAsJTEiCisJCQkJOiI9ciIgKHgpCisJCQkJOiJtIiAoKl9feGcocHRyKSksICIwIiAoeCkKKwkJCQk6Im1lbW9yeSIpOworCQkJYnJlYWs7CisJfQorCXJldHVybiB4OworfQorCisvKgorICogQXRvbWljIGNvbXBhcmUgYW5kIGV4Y2hhbmdlLiAgQ29tcGFyZSBPTEQgd2l0aCBNRU0sIGlmIGlkZW50aWNhbCwKKyAqIHN0b3JlIE5FVyBpbiBNRU0uICBSZXR1cm4gdGhlIGluaXRpYWwgdmFsdWUgaW4gTUVNLiAgU3VjY2VzcyBpcworICogaW5kaWNhdGVkIGJ5IGNvbXBhcmluZyBSRVRVUk4gd2l0aCBPTEQuCisgKi8KKworI2lmZGVmIENPTkZJR19YODZfQ01QWENIRworI2RlZmluZSBfX0hBVkVfQVJDSF9DTVBYQ0hHIDEKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19jbXB4Y2hnKHZvbGF0aWxlIHZvaWQgKnB0ciwgdW5zaWduZWQgbG9uZyBvbGQsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBuZXcsIGludCBzaXplKQoreworCXVuc2lnbmVkIGxvbmcgcHJldjsKKwlzd2l0Y2ggKHNpemUpIHsKKwljYXNlIDE6CisJCV9fYXNtX18gX192b2xhdGlsZV9fKExPQ0tfUFJFRklYICJjbXB4Y2hnYiAlYjEsJTIiCisJCQkJICAgICA6ICI9YSIocHJldikKKwkJCQkgICAgIDogInEiKG5ldyksICJtIigqX194ZyhwdHIpKSwgIjAiKG9sZCkKKwkJCQkgICAgIDogIm1lbW9yeSIpOworCQlyZXR1cm4gcHJldjsKKwljYXNlIDI6CisJCV9fYXNtX18gX192b2xhdGlsZV9fKExPQ0tfUFJFRklYICJjbXB4Y2hndyAldzEsJTIiCisJCQkJICAgICA6ICI9YSIocHJldikKKwkJCQkgICAgIDogInEiKG5ldyksICJtIigqX194ZyhwdHIpKSwgIjAiKG9sZCkKKwkJCQkgICAgIDogIm1lbW9yeSIpOworCQlyZXR1cm4gcHJldjsKKwljYXNlIDQ6CisJCV9fYXNtX18gX192b2xhdGlsZV9fKExPQ0tfUFJFRklYICJjbXB4Y2hnbCAlMSwlMiIKKwkJCQkgICAgIDogIj1hIihwcmV2KQorCQkJCSAgICAgOiAicSIobmV3KSwgIm0iKCpfX3hnKHB0cikpLCAiMCIob2xkKQorCQkJCSAgICAgOiAibWVtb3J5Iik7CisJCXJldHVybiBwcmV2OworCX0KKwlyZXR1cm4gb2xkOworfQorCisjZGVmaW5lIGNtcHhjaGcocHRyLG8sbilcCisJKChfX3R5cGVvZl9fKCoocHRyKSkpX19jbXB4Y2hnKChwdHIpLCh1bnNpZ25lZCBsb25nKShvKSxcCisJCQkJCSh1bnNpZ25lZCBsb25nKShuKSxzaXplb2YoKihwdHIpKSkpCisgICAgCisjaWZkZWYgX19LRVJORUxfXworc3RydWN0IGFsdF9pbnN0ciB7IAorCV9fdTggKmluc3RyOyAJCS8qIG9yaWdpbmFsIGluc3RydWN0aW9uICovCisJX191OCAqcmVwbGFjZW1lbnQ7CisJX191OCAgY3B1aWQ7CQkvKiBjcHVpZCBiaXQgc2V0IGZvciByZXBsYWNlbWVudCAqLworCV9fdTggIGluc3RybGVuOwkJLyogbGVuZ3RoIG9mIG9yaWdpbmFsIGluc3RydWN0aW9uICovCisJX191OCAgcmVwbGFjZW1lbnRsZW47IAkvKiBsZW5ndGggb2YgbmV3IGluc3RydWN0aW9uLCA8PSBpbnN0cmxlbiAqLyAKKwlfX3U4ICBwYWQ7Cit9OyAKKyNlbmRpZgorCisvKiAKKyAqIEFsdGVybmF0aXZlIGluc3RydWN0aW9ucyBmb3IgZGlmZmVyZW50IENQVSB0eXBlcyBvciBjYXBhYmlsaXRpZXMuCisgKiAKKyAqIFRoaXMgYWxsb3dzIHRvIHVzZSBvcHRpbWl6ZWQgaW5zdHJ1Y3Rpb25zIGV2ZW4gb24gZ2VuZXJpYyBiaW5hcnkKKyAqIGtlcm5lbHMuCisgKiAKKyAqIGxlbmd0aCBvZiBvbGRpbnN0ciBtdXN0IGJlIGxvbmdlciBvciBlcXVhbCB0aGUgbGVuZ3RoIG9mIG5ld2luc3RyCisgKiBJdCBjYW4gYmUgcGFkZGVkIHdpdGggbm9wcyBhcyBuZWVkZWQuCisgKiAKKyAqIEZvciBub24gYmFycmllciBsaWtlIGlubGluZXMgcGxlYXNlIGRlZmluZSBuZXcgdmFyaWFudHMKKyAqIHdpdGhvdXQgdm9sYXRpbGUgYW5kIG1lbW9yeSBjbG9iYmVyLgorICovCisjZGVmaW5lIGFsdGVybmF0aXZlKG9sZGluc3RyLCBuZXdpbnN0ciwgZmVhdHVyZSkgCVwKKwlhc20gdm9sYXRpbGUgKCI2NjE6XG5cdCIgb2xkaW5zdHIgIlxuNjYyOlxuIiAJCSAgICAgXAorCQkgICAgICAiLnNlY3Rpb24gLmFsdGluc3RydWN0aW9ucyxcImFcIlxuIiAgICAgCSAgICAgXAorCQkgICAgICAiICAuYWxpZ24gNFxuIgkJCQkgICAgICAgXAorCQkgICAgICAiICAubG9uZyA2NjFiXG4iICAgICAgICAgICAgLyogbGFiZWwgKi8gICAgICAgICAgXAorCQkgICAgICAiICAubG9uZyA2NjNmXG4iCQkgIC8qIG5ldyBpbnN0cnVjdGlvbiAqLyAJXAorCQkgICAgICAiICAuYnl0ZSAlYzBcbiIgICAgICAgICAgICAgLyogZmVhdHVyZSBiaXQgKi8gICAgXAorCQkgICAgICAiICAuYnl0ZSA2NjJiLTY2MWJcbiIgICAgICAgLyogc291cmNlbGVuICovICAgICAgXAorCQkgICAgICAiICAuYnl0ZSA2NjRmLTY2M2ZcbiIgICAgICAgLyogcmVwbGFjZW1lbnRsZW4gKi8gXAorCQkgICAgICAiLnByZXZpb3VzXG4iCQkJCQkJXAorCQkgICAgICAiLnNlY3Rpb24gLmFsdGluc3RyX3JlcGxhY2VtZW50LFwiYXhcIlxuIgkJCVwKKwkJICAgICAgIjY2Mzpcblx0IiBuZXdpbnN0ciAiXG42NjQ6XG4iICAgLyogcmVwbGFjZW1lbnQgKi8gICAgXAorCQkgICAgICAiLnByZXZpb3VzIiA6OiAiaSIgKGZlYXR1cmUpIDogIm1lbW9yeSIpICAKKworLyoKKyAqIEFsdGVybmF0aXZlIGlubGluZSBhc3NlbWJseSB3aXRoIGlucHV0LgorICogCisgKiBQZWN1bGFyaXRpZXM6CisgKiBObyBtZW1vcnkgY2xvYmJlciBoZXJlLiAKKyAqIEFyZ3VtZW50IG51bWJlcnMgc3RhcnQgd2l0aCAxLgorICogQmVzdCBpcyB0byB1c2UgY29uc3RyYWludHMgdGhhdCBhcmUgZml4ZWQgc2l6ZSAobGlrZSAoJTEpIC4uLiAiciIpCisgKiBJZiB5b3UgdXNlIHZhcmlhYmxlIHNpemVkIGNvbnN0cmFpbnRzIGxpa2UgIm0iIG9yICJnIiBpbiB0aGUgCisgKiByZXBsYWNlbWVudCBtYWFrZSBzdXJlIHRvIHBhZCB0byB0aGUgd29yc3QgY2FzZSBsZW5ndGguCisgKi8KKyNkZWZpbmUgYWx0ZXJuYXRpdmVfaW5wdXQob2xkaW5zdHIsIG5ld2luc3RyLCBmZWF0dXJlLCBpbnB1dC4uLikJCVwKKwlhc20gdm9sYXRpbGUgKCI2NjE6XG5cdCIgb2xkaW5zdHIgIlxuNjYyOlxuIgkJCQlcCisJCSAgICAgICIuc2VjdGlvbiAuYWx0aW5zdHJ1Y3Rpb25zLFwiYVwiXG4iCQkJXAorCQkgICAgICAiICAuYWxpZ24gNFxuIgkJCQkJCVwKKwkJICAgICAgIiAgLmxvbmcgNjYxYlxuIiAgICAgICAgICAgIC8qIGxhYmVsICovCQkJXAorCQkgICAgICAiICAubG9uZyA2NjNmXG4iCQkgIC8qIG5ldyBpbnN0cnVjdGlvbiAqLyAJXAorCQkgICAgICAiICAuYnl0ZSAlYzBcbiIgICAgICAgICAgICAgLyogZmVhdHVyZSBiaXQgKi8JCVwKKwkJICAgICAgIiAgLmJ5dGUgNjYyYi02NjFiXG4iICAgICAgIC8qIHNvdXJjZWxlbiAqLwkJXAorCQkgICAgICAiICAuYnl0ZSA2NjRmLTY2M2ZcbiIgICAgICAgLyogcmVwbGFjZW1lbnRsZW4gKi8gCQlcCisJCSAgICAgICIucHJldmlvdXNcbiIJCQkJCQlcCisJCSAgICAgICIuc2VjdGlvbiAuYWx0aW5zdHJfcmVwbGFjZW1lbnQsXCJheFwiXG4iCQkJXAorCQkgICAgICAiNjYzOlxuXHQiIG5ld2luc3RyICJcbjY2NDpcbiIgICAvKiByZXBsYWNlbWVudCAqLyAJXAorCQkgICAgICAiLnByZXZpb3VzIiA6OiAiaSIgKGZlYXR1cmUpLCAjI2lucHV0KQorCisvKgorICogRm9yY2Ugc3RyaWN0IENQVSBvcmRlcmluZy4KKyAqIEFuZCB5ZXMsIHRoaXMgaXMgcmVxdWlyZWQgb24gVVAgdG9vIHdoZW4gd2UncmUgdGFsa2luZworICogdG8gZGV2aWNlcy4KKyAqCisgKiBGb3Igbm93LCAid21iKCkiIGRvZXNuJ3QgYWN0dWFsbHkgZG8gYW55dGhpbmcsIGFzIGFsbAorICogSW50ZWwgQ1BVJ3MgZm9sbG93IHdoYXQgSW50ZWwgY2FsbHMgYSAqUHJvY2Vzc29yIE9yZGVyKiwKKyAqIGluIHdoaWNoIGFsbCB3cml0ZXMgYXJlIHNlZW4gaW4gdGhlIHByb2dyYW0gb3JkZXIgZXZlbgorICogb3V0c2lkZSB0aGUgQ1BVLgorICoKKyAqIEkgZXhwZWN0IGZ1dHVyZSBJbnRlbCBDUFUncyB0byBoYXZlIGEgd2Vha2VyIG9yZGVyaW5nLAorICogYnV0IEknZCBhbHNvIGV4cGVjdCB0aGVtIHRvIGZpbmFsbHkgZ2V0IHRoZWlyIGFjdCB0b2dldGhlcgorICogYW5kIGFkZCBzb21lIHJlYWwgbWVtb3J5IGJhcnJpZXJzIGlmIHNvLgorICoKKyAqIFNvbWUgbm9uIGludGVsIGNsb25lcyBzdXBwb3J0IG91dCBvZiBvcmRlciBzdG9yZS4gd21iKCkgY2Vhc2VzIHRvIGJlIGEKKyAqIG5vcCBmb3IgdGhlc2UuCisgKi8KKyAKKworLyogCisgKiBBY3R1YWxseSBvbmx5IGxmZW5jZSB3b3VsZCBiZSBuZWVkZWQgZm9yIG1iKCkgYmVjYXVzZSBhbGwgc3RvcmVzIGRvbmUgCisgKiBieSB0aGUga2VybmVsIHNob3VsZCBiZSBhbHJlYWR5IG9yZGVyZWQuIEJ1dCBrZWVwIGEgZnVsbCBiYXJyaWVyIGZvciBub3cuIAorICovCisKKyNkZWZpbmUgbWIoKSBhbHRlcm5hdGl2ZSgibG9jazsgYWRkbCAkMCwwKCUlZXNwKSIsICJtZmVuY2UiLCBYODZfRkVBVFVSRV9YTU0yKQorI2RlZmluZSBybWIoKSBhbHRlcm5hdGl2ZSgibG9jazsgYWRkbCAkMCwwKCUlZXNwKSIsICJsZmVuY2UiLCBYODZfRkVBVFVSRV9YTU0yKQorCisvKioKKyAqIHJlYWRfYmFycmllcl9kZXBlbmRzIC0gRmx1c2ggYWxsIHBlbmRpbmcgcmVhZHMgdGhhdCBzdWJzZXF1ZW50cyByZWFkcworICogZGVwZW5kIG9uLgorICoKKyAqIE5vIGRhdGEtZGVwZW5kZW50IHJlYWRzIGZyb20gbWVtb3J5LWxpa2UgcmVnaW9ucyBhcmUgZXZlciByZW9yZGVyZWQKKyAqIG92ZXIgdGhpcyBiYXJyaWVyLiAgQWxsIHJlYWRzIHByZWNlZGluZyB0aGlzIHByaW1pdGl2ZSBhcmUgZ3VhcmFudGVlZAorICogdG8gYWNjZXNzIG1lbW9yeSAoYnV0IG5vdCBuZWNlc3NhcmlseSBvdGhlciBDUFVzJyBjYWNoZXMpIGJlZm9yZSBhbnkKKyAqIHJlYWRzIGZvbGxvd2luZyB0aGlzIHByaW1pdGl2ZSB0aGF0IGRlcGVuZCBvbiB0aGUgZGF0YSByZXR1cm4gYnkKKyAqIGFueSBvZiB0aGUgcHJlY2VkaW5nIHJlYWRzLiAgVGhpcyBwcmltaXRpdmUgaXMgbXVjaCBsaWdodGVyIHdlaWdodCB0aGFuCisgKiBybWIoKSBvbiBtb3N0IENQVXMsIGFuZCBpcyBuZXZlciBoZWF2aWVyIHdlaWdodCB0aGFuIGlzCisgKiBybWIoKS4KKyAqCisgKiBUaGVzZSBvcmRlcmluZyBjb25zdHJhaW50cyBhcmUgcmVzcGVjdGVkIGJ5IGJvdGggdGhlIGxvY2FsIENQVQorICogYW5kIHRoZSBjb21waWxlci4KKyAqCisgKiBPcmRlcmluZyBpcyBub3QgZ3VhcmFudGVlZCBieSBhbnl0aGluZyBvdGhlciB0aGFuIHRoZXNlIHByaW1pdGl2ZXMsCisgKiBub3QgZXZlbiBieSBkYXRhIGRlcGVuZGVuY2llcy4gIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IKKyAqIG1lbW9yeV9iYXJyaWVyKCkgZm9yIGV4YW1wbGVzIGFuZCBVUkxzIHRvIG1vcmUgaW5mb3JtYXRpb24uCisgKgorICogRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY29kZSB3b3VsZCBmb3JjZSBvcmRlcmluZyAodGhlIGluaXRpYWwKKyAqIHZhbHVlIG9mICJhIiBpcyB6ZXJvLCAiYiIgaXMgb25lLCBhbmQgInAiIGlzICImYSIpOgorICoKKyAqIDxwcm9ncmFtbGlzdGluZz4KKyAqCUNQVSAwCQkJCUNQVSAxCisgKgorICoJYiA9IDI7CisgKgltZW1vcnlfYmFycmllcigpOworICoJcCA9ICZiOwkJCQlxID0gcDsKKyAqCQkJCQlyZWFkX2JhcnJpZXJfZGVwZW5kcygpOworICoJCQkJCWQgPSAqcTsKKyAqIDwvcHJvZ3JhbWxpc3Rpbmc+CisgKgorICogYmVjYXVzZSB0aGUgcmVhZCBvZiAiKnEiIGRlcGVuZHMgb24gdGhlIHJlYWQgb2YgInAiIGFuZCB0aGVzZQorICogdHdvIHJlYWRzIGFyZSBzZXBhcmF0ZWQgYnkgYSByZWFkX2JhcnJpZXJfZGVwZW5kcygpLiAgSG93ZXZlciwKKyAqIHRoZSBmb2xsb3dpbmcgY29kZSwgd2l0aCB0aGUgc2FtZSBpbml0aWFsIHZhbHVlcyBmb3IgImEiIGFuZCAiYiI6CisgKgorICogPHByb2dyYW1saXN0aW5nPgorICoJQ1BVIDAJCQkJQ1BVIDEKKyAqCisgKglhID0gMjsKKyAqCW1lbW9yeV9iYXJyaWVyKCk7CisgKgliID0gMzsJCQkJeSA9IGI7CisgKgkJCQkJcmVhZF9iYXJyaWVyX2RlcGVuZHMoKTsKKyAqCQkJCQl4ID0gYTsKKyAqIDwvcHJvZ3JhbWxpc3Rpbmc+CisgKgorICogZG9lcyBub3QgZW5mb3JjZSBvcmRlcmluZywgc2luY2UgdGhlcmUgaXMgbm8gZGF0YSBkZXBlbmRlbmN5IGJldHdlZW4KKyAqIHRoZSByZWFkIG9mICJhIiBhbmQgdGhlIHJlYWQgb2YgImIiLiAgVGhlcmVmb3JlLCBvbiBzb21lIENQVXMsIHN1Y2gKKyAqIGFzIEFscGhhLCAieSIgY291bGQgYmUgc2V0IHRvIDMgYW5kICJ4IiB0byAwLiAgVXNlIHJtYigpCisgKiBpbiBjYXNlcyBsaWtlIHRoaXN3aGVyZSB0aGVyZSBhcmUgbm8gZGF0YSBkZXBlbmRlbmNpZXMuCisgKiovCisKKyNkZWZpbmUgcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQlkbyB7IH0gd2hpbGUoMCkKKworI2lmZGVmIENPTkZJR19YODZfT09TVE9SRQorLyogQWN0dWFsbHkgdGhlcmUgYXJlIG5vIE9PTyBzdG9yZSBjYXBhYmxlIENQVXMgZm9yIG5vdyB0aGF0IGRvIFNTRSwgCisgICBidXQgbWFrZSBpdCBhbHJlYWR5IGFuIHBvc3NpYmlsaXR5LiAqLworI2RlZmluZSB3bWIoKSBhbHRlcm5hdGl2ZSgibG9jazsgYWRkbCAkMCwwKCUlZXNwKSIsICJzZmVuY2UiLCBYODZfRkVBVFVSRV9YTU0pCisjZWxzZQorI2RlZmluZSB3bWIoKQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIiI6IDogOiJtZW1vcnkiKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfU01QCisjZGVmaW5lIHNtcF9tYigpCW1iKCkKKyNkZWZpbmUgc21wX3JtYigpCXJtYigpCisjZGVmaW5lIHNtcF93bWIoKQl3bWIoKQorI2RlZmluZSBzbXBfcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQlyZWFkX2JhcnJpZXJfZGVwZW5kcygpCisjZGVmaW5lIHNldF9tYih2YXIsIHZhbHVlKSBkbyB7IHhjaGcoJnZhciwgdmFsdWUpOyB9IHdoaWxlICgwKQorI2Vsc2UKKyNkZWZpbmUgc21wX21iKCkJYmFycmllcigpCisjZGVmaW5lIHNtcF9ybWIoKQliYXJyaWVyKCkKKyNkZWZpbmUgc21wX3dtYigpCWJhcnJpZXIoKQorI2RlZmluZSBzbXBfcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQlkbyB7IH0gd2hpbGUoMCkKKyNkZWZpbmUgc2V0X21iKHZhciwgdmFsdWUpIGRvIHsgdmFyID0gdmFsdWU7IGJhcnJpZXIoKTsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisjZGVmaW5lIHNldF93bWIodmFyLCB2YWx1ZSkgZG8geyB2YXIgPSB2YWx1ZTsgd21iKCk7IH0gd2hpbGUgKDApCisKKy8qIGludGVycnVwdCBjb250cm9sLi4gKi8KKyNkZWZpbmUgbG9jYWxfc2F2ZV9mbGFncyh4KQlkbyB7IHR5cGVjaGVjayh1bnNpZ25lZCBsb25nLHgpOyBfX2FzbV9fIF9fdm9sYXRpbGVfXygicHVzaGZsIDsgcG9wbCAlMCI6Ij1nIiAoeCk6IC8qIG5vIGlucHV0ICovKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgbG9jYWxfaXJxX3Jlc3RvcmUoeCkgCWRvIHsgdHlwZWNoZWNrKHVuc2lnbmVkIGxvbmcseCk7IF9fYXNtX18gX192b2xhdGlsZV9fKCJwdXNobCAlMCA7IHBvcGZsIjogLyogbm8gb3V0cHV0ICovIDoiZyIgKHgpOiJtZW1vcnkiLCAiY2MiKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgbG9jYWxfaXJxX2Rpc2FibGUoKSAJX19hc21fXyBfX3ZvbGF0aWxlX18oImNsaSI6IDogOiJtZW1vcnkiKQorI2RlZmluZSBsb2NhbF9pcnFfZW5hYmxlKCkJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0aSI6IDogOiJtZW1vcnkiKQorLyogdXNlZCBpbiB0aGUgaWRsZSBsb29wOyBzdGkgdGFrZXMgb25lIGluc3RydWN0aW9uIGN5Y2xlIHRvIGNvbXBsZXRlICovCisjZGVmaW5lIHNhZmVfaGFsdCgpCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RpOyBobHQiOiA6IDoibWVtb3J5IikKKworI2RlZmluZSBpcnFzX2Rpc2FibGVkKCkJCQlcCisoewkJCQkJXAorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CQlcCisJbG9jYWxfc2F2ZV9mbGFncyhmbGFncyk7CVwKKwkhKGZsYWdzICYgKDE8PDkpKTsJCVwKK30pCisKKy8qIEZvciBzcGlubG9ja3MgZXRjICovCisjZGVmaW5lIGxvY2FsX2lycV9zYXZlKHgpCV9fYXNtX18gX192b2xhdGlsZV9fKCJwdXNoZmwgOyBwb3BsICUwIDsgY2xpIjoiPWciICh4KTogLyogbm8gaW5wdXQgKi8gOiJtZW1vcnkiKQorCisvKgorICogZGlzYWJsZSBobHQgZHVyaW5nIGNlcnRhaW4gY3JpdGljYWwgaS9vIG9wZXJhdGlvbnMKKyAqLworI2RlZmluZSBIQVZFX0RJU0FCTEVfSExUCit2b2lkIGRpc2FibGVfaGx0KHZvaWQpOwordm9pZCBlbmFibGVfaGx0KHZvaWQpOworCitleHRlcm4gaW50IGVzNzAwMF9wbGF0Owordm9pZCBjcHVfaWRsZV93YWl0KHZvaWQpOworCitleHRlcm4gdW5zaWduZWQgbG9uZyBhcmNoX2FsaWduX3N0YWNrKHVuc2lnbmVkIGxvbmcgc3ApOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvdGVybWJpdHMuaCBiL2luY2x1ZGUvYXNtLWkzODYvdGVybWJpdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmMxMGUzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taTM4Ni90ZXJtYml0cy5oCkBAIC0wLDAgKzEsMTczIEBACisjaWZuZGVmIF9fQVJDSF9JMzg2X1RFUk1CSVRTX0hfXworI2RlZmluZSBfX0FSQ0hfSTM4Nl9URVJNQklUU19IX18KKworI2luY2x1ZGUgPGxpbnV4L3Bvc2l4X3R5cGVzLmg+CisKK3R5cGVkZWYgdW5zaWduZWQgY2hhcgljY190OwordHlwZWRlZiB1bnNpZ25lZCBpbnQJc3BlZWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50CXRjZmxhZ190OworCisjZGVmaW5lIE5DQ1MgMTkKK3N0cnVjdCB0ZXJtaW9zIHsKKwl0Y2ZsYWdfdCBjX2lmbGFnOwkJLyogaW5wdXQgbW9kZSBmbGFncyAqLworCXRjZmxhZ190IGNfb2ZsYWc7CQkvKiBvdXRwdXQgbW9kZSBmbGFncyAqLworCXRjZmxhZ190IGNfY2ZsYWc7CQkvKiBjb250cm9sIG1vZGUgZmxhZ3MgKi8KKwl0Y2ZsYWdfdCBjX2xmbGFnOwkJLyogbG9jYWwgbW9kZSBmbGFncyAqLworCWNjX3QgY19saW5lOwkJCS8qIGxpbmUgZGlzY2lwbGluZSAqLworCWNjX3QgY19jY1tOQ0NTXTsJCS8qIGNvbnRyb2wgY2hhcmFjdGVycyAqLworfTsKKworLyogY19jYyBjaGFyYWN0ZXJzICovCisjZGVmaW5lIFZJTlRSIDAKKyNkZWZpbmUgVlFVSVQgMQorI2RlZmluZSBWRVJBU0UgMgorI2RlZmluZSBWS0lMTCAzCisjZGVmaW5lIFZFT0YgNAorI2RlZmluZSBWVElNRSA1CisjZGVmaW5lIFZNSU4gNgorI2RlZmluZSBWU1dUQyA3CisjZGVmaW5lIFZTVEFSVCA4CisjZGVmaW5lIFZTVE9QIDkKKyNkZWZpbmUgVlNVU1AgMTAKKyNkZWZpbmUgVkVPTCAxMQorI2RlZmluZSBWUkVQUklOVCAxMgorI2RlZmluZSBWRElTQ0FSRCAxMworI2RlZmluZSBWV0VSQVNFIDE0CisjZGVmaW5lIFZMTkVYVCAxNQorI2RlZmluZSBWRU9MMiAxNgorCisvKiBjX2lmbGFnIGJpdHMgKi8KKyNkZWZpbmUgSUdOQlJLCTAwMDAwMDEKKyNkZWZpbmUgQlJLSU5UCTAwMDAwMDIKKyNkZWZpbmUgSUdOUEFSCTAwMDAwMDQKKyNkZWZpbmUgUEFSTVJLCTAwMDAwMTAKKyNkZWZpbmUgSU5QQ0sJMDAwMDAyMAorI2RlZmluZSBJU1RSSVAJMDAwMDA0MAorI2RlZmluZSBJTkxDUgkwMDAwMTAwCisjZGVmaW5lIElHTkNSCTAwMDAyMDAKKyNkZWZpbmUgSUNSTkwJMDAwMDQwMAorI2RlZmluZSBJVUNMQwkwMDAxMDAwCisjZGVmaW5lIElYT04JMDAwMjAwMAorI2RlZmluZSBJWEFOWQkwMDA0MDAwCisjZGVmaW5lIElYT0ZGCTAwMTAwMDAKKyNkZWZpbmUgSU1BWEJFTAkwMDIwMDAwCisjZGVmaW5lIElVVEY4CTAwNDAwMDAKKworLyogY19vZmxhZyBiaXRzICovCisjZGVmaW5lIE9QT1NUCTAwMDAwMDEKKyNkZWZpbmUgT0xDVUMJMDAwMDAwMgorI2RlZmluZSBPTkxDUgkwMDAwMDA0CisjZGVmaW5lIE9DUk5MCTAwMDAwMTAKKyNkZWZpbmUgT05PQ1IJMDAwMDAyMAorI2RlZmluZSBPTkxSRVQJMDAwMDA0MAorI2RlZmluZSBPRklMTAkwMDAwMTAwCisjZGVmaW5lIE9GREVMCTAwMDAyMDAKKyNkZWZpbmUgTkxETFkJMDAwMDQwMAorI2RlZmluZSAgIE5MMAkwMDAwMDAwCisjZGVmaW5lICAgTkwxCTAwMDA0MDAKKyNkZWZpbmUgQ1JETFkJMDAwMzAwMAorI2RlZmluZSAgIENSMAkwMDAwMDAwCisjZGVmaW5lICAgQ1IxCTAwMDEwMDAKKyNkZWZpbmUgICBDUjIJMDAwMjAwMAorI2RlZmluZSAgIENSMwkwMDAzMDAwCisjZGVmaW5lIFRBQkRMWQkwMDE0MDAwCisjZGVmaW5lICAgVEFCMAkwMDAwMDAwCisjZGVmaW5lICAgVEFCMQkwMDA0MDAwCisjZGVmaW5lICAgVEFCMgkwMDEwMDAwCisjZGVmaW5lICAgVEFCMwkwMDE0MDAwCisjZGVmaW5lICAgWFRBQlMJMDAxNDAwMAorI2RlZmluZSBCU0RMWQkwMDIwMDAwCisjZGVmaW5lICAgQlMwCTAwMDAwMDAKKyNkZWZpbmUgICBCUzEJMDAyMDAwMAorI2RlZmluZSBWVERMWQkwMDQwMDAwCisjZGVmaW5lICAgVlQwCTAwMDAwMDAKKyNkZWZpbmUgICBWVDEJMDA0MDAwMAorI2RlZmluZSBGRkRMWQkwMTAwMDAwCisjZGVmaW5lICAgRkYwCTAwMDAwMDAKKyNkZWZpbmUgICBGRjEJMDEwMDAwMAorCisvKiBjX2NmbGFnIGJpdCBtZWFuaW5nICovCisjZGVmaW5lIENCQVVECTAwMTAwMTcKKyNkZWZpbmUgIEIwCTAwMDAwMDAJCS8qIGhhbmcgdXAgKi8KKyNkZWZpbmUgIEI1MAkwMDAwMDAxCisjZGVmaW5lICBCNzUJMDAwMDAwMgorI2RlZmluZSAgQjExMAkwMDAwMDAzCisjZGVmaW5lICBCMTM0CTAwMDAwMDQKKyNkZWZpbmUgIEIxNTAJMDAwMDAwNQorI2RlZmluZSAgQjIwMAkwMDAwMDA2CisjZGVmaW5lICBCMzAwCTAwMDAwMDcKKyNkZWZpbmUgIEI2MDAJMDAwMDAxMAorI2RlZmluZSAgQjEyMDAJMDAwMDAxMQorI2RlZmluZSAgQjE4MDAJMDAwMDAxMgorI2RlZmluZSAgQjI0MDAJMDAwMDAxMworI2RlZmluZSAgQjQ4MDAJMDAwMDAxNAorI2RlZmluZSAgQjk2MDAJMDAwMDAxNQorI2RlZmluZSAgQjE5MjAwCTAwMDAwMTYKKyNkZWZpbmUgIEIzODQwMAkwMDAwMDE3CisjZGVmaW5lIEVYVEEgQjE5MjAwCisjZGVmaW5lIEVYVEIgQjM4NDAwCisjZGVmaW5lIENTSVpFCTAwMDAwNjAKKyNkZWZpbmUgICBDUzUJMDAwMDAwMAorI2RlZmluZSAgIENTNgkwMDAwMDIwCisjZGVmaW5lICAgQ1M3CTAwMDAwNDAKKyNkZWZpbmUgICBDUzgJMDAwMDA2MAorI2RlZmluZSBDU1RPUEIJMDAwMDEwMAorI2RlZmluZSBDUkVBRAkwMDAwMjAwCisjZGVmaW5lIFBBUkVOQgkwMDAwNDAwCisjZGVmaW5lIFBBUk9ERAkwMDAxMDAwCisjZGVmaW5lIEhVUENMCTAwMDIwMDAKKyNkZWZpbmUgQ0xPQ0FMCTAwMDQwMDAKKyNkZWZpbmUgQ0JBVURFWCAwMDEwMDAwCisjZGVmaW5lICAgIEI1NzYwMCAwMDEwMDAxCisjZGVmaW5lICAgQjExNTIwMCAwMDEwMDAyCisjZGVmaW5lICAgQjIzMDQwMCAwMDEwMDAzCisjZGVmaW5lICAgQjQ2MDgwMCAwMDEwMDA0CisjZGVmaW5lICAgQjUwMDAwMCAwMDEwMDA1CisjZGVmaW5lICAgQjU3NjAwMCAwMDEwMDA2CisjZGVmaW5lICAgQjkyMTYwMCAwMDEwMDA3CisjZGVmaW5lICBCMTAwMDAwMCAwMDEwMDEwCisjZGVmaW5lICBCMTE1MjAwMCAwMDEwMDExCisjZGVmaW5lICBCMTUwMDAwMCAwMDEwMDEyCisjZGVmaW5lICBCMjAwMDAwMCAwMDEwMDEzCisjZGVmaW5lICBCMjUwMDAwMCAwMDEwMDE0CisjZGVmaW5lICBCMzAwMDAwMCAwMDEwMDE1CisjZGVmaW5lICBCMzUwMDAwMCAwMDEwMDE2CisjZGVmaW5lICBCNDAwMDAwMCAwMDEwMDE3CisjZGVmaW5lIENJQkFVRAkgIDAwMjAwMzYwMDAwMAkvKiBpbnB1dCBiYXVkIHJhdGUgKG5vdCB1c2VkKSAqLworI2RlZmluZSBDTVNQQVIJICAwMTAwMDAwMDAwMDAJCS8qIG1hcmsgb3Igc3BhY2UgKHN0aWNrKSBwYXJpdHkgKi8KKyNkZWZpbmUgQ1JUU0NUUwkgIDAyMDAwMDAwMDAwMAkJLyogZmxvdyBjb250cm9sICovCisKKy8qIGNfbGZsYWcgYml0cyAqLworI2RlZmluZSBJU0lHCTAwMDAwMDEKKyNkZWZpbmUgSUNBTk9OCTAwMDAwMDIKKyNkZWZpbmUgWENBU0UJMDAwMDAwNAorI2RlZmluZSBFQ0hPCTAwMDAwMTAKKyNkZWZpbmUgRUNIT0UJMDAwMDAyMAorI2RlZmluZSBFQ0hPSwkwMDAwMDQwCisjZGVmaW5lIEVDSE9OTAkwMDAwMTAwCisjZGVmaW5lIE5PRkxTSAkwMDAwMjAwCisjZGVmaW5lIFRPU1RPUAkwMDAwNDAwCisjZGVmaW5lIEVDSE9DVEwJMDAwMTAwMAorI2RlZmluZSBFQ0hPUFJUCTAwMDIwMDAKKyNkZWZpbmUgRUNIT0tFCTAwMDQwMDAKKyNkZWZpbmUgRkxVU0hPCTAwMTAwMDAKKyNkZWZpbmUgUEVORElOCTAwNDAwMDAKKyNkZWZpbmUgSUVYVEVOCTAxMDAwMDAKKworLyogdGNmbG93KCkgYW5kIFRDWE9OQyB1c2UgdGhlc2UgKi8KKyNkZWZpbmUJVENPT0ZGCQkwCisjZGVmaW5lCVRDT09OCQkxCisjZGVmaW5lCVRDSU9GRgkJMgorI2RlZmluZQlUQ0lPTgkJMworCisvKiB0Y2ZsdXNoKCkgYW5kIFRDRkxTSCB1c2UgdGhlc2UgKi8KKyNkZWZpbmUJVENJRkxVU0gJMAorI2RlZmluZQlUQ09GTFVTSAkxCisjZGVmaW5lCVRDSU9GTFVTSAkyCisKKy8qIHRjc2V0YXR0ciB1c2VzIHRoZXNlICovCisjZGVmaW5lCVRDU0FOT1cJCTAKKyNkZWZpbmUJVENTQURSQUlOCTEKKyNkZWZpbmUJVENTQUZMVVNICTIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3Rlcm1pb3MuaCBiL2luY2x1ZGUvYXNtLWkzODYvdGVybWlvcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzZjU0ODUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3Rlcm1pb3MuaApAQCAtMCwwICsxLDEwNyBAQAorI2lmbmRlZiBfSTM4Nl9URVJNSU9TX0gKKyNkZWZpbmUgX0kzODZfVEVSTUlPU19ICisKKyNpbmNsdWRlIDxhc20vdGVybWJpdHMuaD4KKyNpbmNsdWRlIDxhc20vaW9jdGxzLmg+CisKK3N0cnVjdCB3aW5zaXplIHsKKwl1bnNpZ25lZCBzaG9ydCB3c19yb3c7CisJdW5zaWduZWQgc2hvcnQgd3NfY29sOworCXVuc2lnbmVkIHNob3J0IHdzX3hwaXhlbDsKKwl1bnNpZ25lZCBzaG9ydCB3c195cGl4ZWw7Cit9OworCisjZGVmaW5lIE5DQyA4CitzdHJ1Y3QgdGVybWlvIHsKKwl1bnNpZ25lZCBzaG9ydCBjX2lmbGFnOwkJLyogaW5wdXQgbW9kZSBmbGFncyAqLworCXVuc2lnbmVkIHNob3J0IGNfb2ZsYWc7CQkvKiBvdXRwdXQgbW9kZSBmbGFncyAqLworCXVuc2lnbmVkIHNob3J0IGNfY2ZsYWc7CQkvKiBjb250cm9sIG1vZGUgZmxhZ3MgKi8KKwl1bnNpZ25lZCBzaG9ydCBjX2xmbGFnOwkJLyogbG9jYWwgbW9kZSBmbGFncyAqLworCXVuc2lnbmVkIGNoYXIgY19saW5lOwkJLyogbGluZSBkaXNjaXBsaW5lICovCisJdW5zaWduZWQgY2hhciBjX2NjW05DQ107CS8qIGNvbnRyb2wgY2hhcmFjdGVycyAqLworfTsKKworLyogbW9kZW0gbGluZXMgKi8KKyNkZWZpbmUgVElPQ01fTEUJMHgwMDEKKyNkZWZpbmUgVElPQ01fRFRSCTB4MDAyCisjZGVmaW5lIFRJT0NNX1JUUwkweDAwNAorI2RlZmluZSBUSU9DTV9TVAkweDAwOAorI2RlZmluZSBUSU9DTV9TUgkweDAxMAorI2RlZmluZSBUSU9DTV9DVFMJMHgwMjAKKyNkZWZpbmUgVElPQ01fQ0FSCTB4MDQwCisjZGVmaW5lIFRJT0NNX1JORwkweDA4MAorI2RlZmluZSBUSU9DTV9EU1IJMHgxMDAKKyNkZWZpbmUgVElPQ01fQ0QJVElPQ01fQ0FSCisjZGVmaW5lIFRJT0NNX1JJCVRJT0NNX1JORworI2RlZmluZSBUSU9DTV9PVVQxCTB4MjAwMAorI2RlZmluZSBUSU9DTV9PVVQyCTB4NDAwMAorI2RlZmluZSBUSU9DTV9MT09QCTB4ODAwMAorCisvKiBpb2N0bCAoZmQsIFRJT0NTRVJHRVRMU1IsICZyZXN1bHQpIHdoZXJlIHJlc3VsdCBtYXkgYmUgYXMgYmVsb3cgKi8KKworLyogbGluZSBkaXNjaXBsaW5lcyAqLworI2RlZmluZSBOX1RUWQkJMAorI2RlZmluZSBOX1NMSVAJCTEKKyNkZWZpbmUgTl9NT1VTRQkJMgorI2RlZmluZSBOX1BQUAkJMworI2RlZmluZSBOX1NUUklQCQk0CisjZGVmaW5lIE5fQVgyNQkJNQorI2RlZmluZSBOX1gyNQkJNgkvKiBYLjI1IGFzeW5jICovCisjZGVmaW5lIE5fNlBBQ0sJCTcKKyNkZWZpbmUgTl9NQVNDCQk4CS8qIFJlc2VydmVkIGZvciBNb2JpdGV4IG1vZHVsZSA8a2F6QGNhZmUubmV0PiAqLworI2RlZmluZSBOX1IzOTY0CQk5CS8qIFJlc2VydmVkIGZvciBTaW1hdGljIFIzOTY0IG1vZHVsZSAqLworI2RlZmluZSBOX1BST0ZJQlVTX0ZETAkxMAkvKiBSZXNlcnZlZCBmb3IgUHJvZmlidXMgPERhdmVAbXZoaS5jb20+ICovCisjZGVmaW5lIE5fSVJEQQkJMTEJLyogTGludXggSVIgLSBodHRwOi8vaXJkYS5zb3VyY2Vmb3JnZS5uZXQvICovCisjZGVmaW5lIE5fU01TQkxPQ0sJMTIJLyogU01TIGJsb2NrIG1vZGUgLSBmb3IgdGFsa2luZyB0byBHU00gZGF0YSBjYXJkcyBhYm91dCBTTVMgbWVzc2FnZXMgKi8KKyNkZWZpbmUgTl9IRExDCQkxMwkvKiBzeW5jaHJvbm91cyBIRExDICovCisjZGVmaW5lIE5fU1lOQ19QUFAJMTQJLyogc3luY2hyb25vdXMgUFBQICovCisjZGVmaW5lIE5fSENJCQkxNSAgLyogQmx1ZXRvb3RoIEhDSSBVQVJUICovCisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKy8qCWludHI9XkMJCXF1aXQ9XlwJCWVyYXNlPWRlbAlraWxsPV5VCisJZW9mPV5ECQl2dGltZT1cMAl2bWluPVwxCQlzeHRjPVwwCisJc3RhcnQ9XlEJc3RvcD1eUwkJc3VzcD1eWgkJZW9sPVwwCisJcmVwcmludD1eUglkaXNjYXJkPV5VCXdlcmFzZT1eVwlsbmV4dD1eVgorCWVvbDI9XDAKKyovCisjZGVmaW5lIElOSVRfQ19DQyAiXDAwM1wwMzRcMTc3XDAyNVwwMDRcMFwxXDBcMDIxXDAyM1wwMzJcMFwwMjJcMDE3XDAyN1wwMjZcMCIKKworLyoKKyAqIFRyYW5zbGF0ZSBhICJ0ZXJtaW8iIHN0cnVjdHVyZSBpbnRvIGEgInRlcm1pb3MiLiBVZ2guCisgKi8KKyNkZWZpbmUgU0VUX0xPV19URVJNSU9TX0JJVFModGVybWlvcywgdGVybWlvLCB4KSB7IFwKKwl1bnNpZ25lZCBzaG9ydCBfX3RtcDsgXAorCWdldF91c2VyKF9fdG1wLCYodGVybWlvKS0+eCk7IFwKKwkqKHVuc2lnbmVkIHNob3J0ICopICYodGVybWlvcyktPnggPSBfX3RtcDsgXAorfQorCisjZGVmaW5lIHVzZXJfdGVybWlvX3RvX2tlcm5lbF90ZXJtaW9zKHRlcm1pb3MsIHRlcm1pbykgXAorKHsgXAorCVNFVF9MT1dfVEVSTUlPU19CSVRTKHRlcm1pb3MsIHRlcm1pbywgY19pZmxhZyk7IFwKKwlTRVRfTE9XX1RFUk1JT1NfQklUUyh0ZXJtaW9zLCB0ZXJtaW8sIGNfb2ZsYWcpOyBcCisJU0VUX0xPV19URVJNSU9TX0JJVFModGVybWlvcywgdGVybWlvLCBjX2NmbGFnKTsgXAorCVNFVF9MT1dfVEVSTUlPU19CSVRTKHRlcm1pb3MsIHRlcm1pbywgY19sZmxhZyk7IFwKKwljb3B5X2Zyb21fdXNlcigodGVybWlvcyktPmNfY2MsICh0ZXJtaW8pLT5jX2NjLCBOQ0MpOyBcCit9KQorCisvKgorICogVHJhbnNsYXRlIGEgInRlcm1pb3MiIHN0cnVjdHVyZSBpbnRvIGEgInRlcm1pbyIuIFVnaC4KKyAqLworI2RlZmluZSBrZXJuZWxfdGVybWlvc190b191c2VyX3Rlcm1pbyh0ZXJtaW8sIHRlcm1pb3MpIFwKKyh7IFwKKwlwdXRfdXNlcigodGVybWlvcyktPmNfaWZsYWcsICYodGVybWlvKS0+Y19pZmxhZyk7IFwKKwlwdXRfdXNlcigodGVybWlvcyktPmNfb2ZsYWcsICYodGVybWlvKS0+Y19vZmxhZyk7IFwKKwlwdXRfdXNlcigodGVybWlvcyktPmNfY2ZsYWcsICYodGVybWlvKS0+Y19jZmxhZyk7IFwKKwlwdXRfdXNlcigodGVybWlvcyktPmNfbGZsYWcsICYodGVybWlvKS0+Y19sZmxhZyk7IFwKKwlwdXRfdXNlcigodGVybWlvcyktPmNfbGluZSwgICYodGVybWlvKS0+Y19saW5lKTsgXAorCWNvcHlfdG9fdXNlcigodGVybWlvKS0+Y19jYywgKHRlcm1pb3MpLT5jX2NjLCBOQ0MpOyBcCit9KQorCisjZGVmaW5lIHVzZXJfdGVybWlvc190b19rZXJuZWxfdGVybWlvcyhrLCB1KSBjb3B5X2Zyb21fdXNlcihrLCB1LCBzaXplb2Yoc3RydWN0IHRlcm1pb3MpKQorI2RlZmluZSBrZXJuZWxfdGVybWlvc190b191c2VyX3Rlcm1pb3ModSwgaykgY29weV90b191c2VyKHUsIGssIHNpemVvZihzdHJ1Y3QgdGVybWlvcykpCisKKyNlbmRpZgkvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZgkvKiBfSTM4Nl9URVJNSU9TX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvdGhyZWFkX2luZm8uaCBiL2luY2x1ZGUvYXNtLWkzODYvdGhyZWFkX2luZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2Q1NzI3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taTM4Ni90aHJlYWRfaW5mby5oCkBAIC0wLDAgKzEsMTc0IEBACisvKiB0aHJlYWRfaW5mby5oOiBpMzg2IGxvdy1sZXZlbCB0aHJlYWQgaW5mb3JtYXRpb24KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgIERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKiAtIEluY29ycG9yYXRpbmcgc3VnZ2VzdGlvbnMgbWFkZSBieSBMaW51cyBUb3J2YWxkcyBhbmQgRGF2ZSBNaWxsZXIKKyAqLworCisjaWZuZGVmIF9BU01fVEhSRUFEX0lORk9fSAorI2RlZmluZSBfQVNNX1RIUkVBRF9JTkZPX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjZW5kaWYKKworLyoKKyAqIGxvdyBsZXZlbCB0YXNrIGRhdGEgdGhhdCBlbnRyeS5TIG5lZWRzIGltbWVkaWF0ZSBhY2Nlc3MgdG8KKyAqIC0gdGhpcyBzdHJ1Y3Qgc2hvdWxkIGZpdCBlbnRpcmVseSBpbnNpZGUgb2Ygb25lIGNhY2hlIGxpbmUKKyAqIC0gdGhpcyBzdHJ1Y3Qgc2hhcmVzIHRoZSBzdXBlcnZpc29yIHN0YWNrIHBhZ2VzCisgKiAtIGlmIHRoZSBjb250ZW50cyBvZiB0aGlzIHN0cnVjdHVyZSBhcmUgY2hhbmdlZCwgdGhlIGFzc2VtYmx5IGNvbnN0YW50cyBtdXN0IGFsc28gYmUgY2hhbmdlZAorICovCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCitzdHJ1Y3QgdGhyZWFkX2luZm8geworCXN0cnVjdCB0YXNrX3N0cnVjdAkqdGFzazsJCS8qIG1haW4gdGFzayBzdHJ1Y3R1cmUgKi8KKwlzdHJ1Y3QgZXhlY19kb21haW4JKmV4ZWNfZG9tYWluOwkvKiBleGVjdXRpb24gZG9tYWluICovCisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CQkvKiBsb3cgbGV2ZWwgZmxhZ3MgKi8KKwl1bnNpZ25lZCBsb25nCQlzdGF0dXM7CQkvKiB0aHJlYWQtc3luY2hyb25vdXMgZmxhZ3MgKi8KKwlfX3UzMgkJCWNwdTsJCS8qIGN1cnJlbnQgQ1BVICovCisJX19zMzIJCQlwcmVlbXB0X2NvdW50OyAvKiAwID0+IHByZWVtcHRhYmxlLCA8MCA9PiBCVUcgKi8KKworCisJbW1fc2VnbWVudF90CQlhZGRyX2xpbWl0OwkvKiB0aHJlYWQgYWRkcmVzcyBzcGFjZToKKwkJCQkJIAkgICAwLTB4QkZGRkZGRkYgZm9yIHVzZXItdGhlYWQKKwkJCQkJCSAgIDAtMHhGRkZGRkZGRiBmb3Iga2VybmVsLXRocmVhZAorCQkJCQkJKi8KKwlzdHJ1Y3QgcmVzdGFydF9ibG9jayAgICByZXN0YXJ0X2Jsb2NrOworCisJdW5zaWduZWQgbG9uZyAgICAgICAgICAgcHJldmlvdXNfZXNwOyAgIC8qIEVTUCBvZiB0aGUgcHJldmlvdXMgc3RhY2sgaW4gY2FzZQorCQkJCQkJICAgb2YgbmVzdGVkIChJUlEpIHN0YWNrcworCQkJCQkJKi8KKwlfX3U4CQkJc3VwZXJ2aXNvcl9zdGFja1swXTsKK307CisKKyNlbHNlIC8qICFfX0FTU0VNQkxZX18gKi8KKworI2luY2x1ZGUgPGFzbS9hc21fb2Zmc2V0cy5oPgorCisjZW5kaWYKKworI2RlZmluZSBQUkVFTVBUX0FDVElWRQkJMHgxMDAwMDAwMAorI2lmZGVmIENPTkZJR180S1NUQUNLUworI2RlZmluZSBUSFJFQURfU0laRSAgICAgICAgICAgICg0MDk2KQorI2Vsc2UKKyNkZWZpbmUgVEhSRUFEX1NJWkUJCSg4MTkyKQorI2VuZGlmCisKKyNkZWZpbmUgU1RBQ0tfV0FSTiAgICAgICAgICAgICAoVEhSRUFEX1NJWkUvOCkKKy8qCisgKiBtYWNyb3MvZnVuY3Rpb25zIGZvciBnYWluaW5nIGFjY2VzcyB0byB0aGUgdGhyZWFkIGluZm9ybWF0aW9uIHN0cnVjdHVyZQorICoKKyAqIHByZWVtcHRfY291bnQgbmVlZHMgdG8gYmUgMSBpbml0aWFsbHksIHVudGlsIHRoZSBzY2hlZHVsZXIgaXMgZnVuY3Rpb25hbC4KKyAqLworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworI2RlZmluZSBJTklUX1RIUkVBRF9JTkZPKHRzaykJCQlcCit7CQkJCQkJXAorCS50YXNrCQk9ICZ0c2ssCQkJXAorCS5leGVjX2RvbWFpbgk9ICZkZWZhdWx0X2V4ZWNfZG9tYWluLAlcCisJLmZsYWdzCQk9IDAsCQkJXAorCS5jcHUJCT0gMCwJCQlcCisJLnByZWVtcHRfY291bnQJPSAxLAkJCVwKKwkuYWRkcl9saW1pdAk9IEtFUk5FTF9EUywJCVwKKwkucmVzdGFydF9ibG9jayA9IHsJCQlcCisJCS5mbiA9IGRvX25vX3Jlc3RhcnRfc3lzY2FsbCwJXAorCX0sCQkJCQlcCit9CisKKyNkZWZpbmUgaW5pdF90aHJlYWRfaW5mbwkoaW5pdF90aHJlYWRfdW5pb24udGhyZWFkX2luZm8pCisjZGVmaW5lIGluaXRfc3RhY2sJCShpbml0X3RocmVhZF91bmlvbi5zdGFjaykKKworCisvKiBob3cgdG8gZ2V0IHRoZSB0aHJlYWQgaW5mb3JtYXRpb24gc3RydWN0IGZyb20gQyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgdGhyZWFkX2luZm8gKmN1cnJlbnRfdGhyZWFkX2luZm8odm9pZCkKK3sKKwlzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpOworCV9fYXNtX18oImFuZGwgJSVlc3AsJTA7ICI6Ij1yIiAodGkpIDogIjAiICh+KFRIUkVBRF9TSVpFIC0gMSkpKTsKKwlyZXR1cm4gdGk7Cit9CisKKy8qIGhvdyB0byBnZXQgdGhlIGN1cnJlbnQgc3RhY2sgcG9pbnRlciBmcm9tIEMgKi8KK3JlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgY3VycmVudF9zdGFja19wb2ludGVyIGFzbSgiZXNwIikgX19hdHRyaWJ1dGVfdXNlZF9fOworCisvKiB0aHJlYWQgaW5mb3JtYXRpb24gYWxsb2NhdGlvbiAqLworI2lmZGVmIENPTkZJR19ERUJVR19TVEFDS19VU0FHRQorI2RlZmluZSBhbGxvY190aHJlYWRfaW5mbyh0c2spCQkJCQlcCisJKHsJCQkJCQkJXAorCQlzdHJ1Y3QgdGhyZWFkX2luZm8gKnJldDsJCQlcCisJCQkJCQkJCVwKKwkJcmV0ID0ga21hbGxvYyhUSFJFQURfU0laRSwgR0ZQX0tFUk5FTCk7CQlcCisJCWlmIChyZXQpCQkJCQlcCisJCQltZW1zZXQocmV0LCAwLCBUSFJFQURfU0laRSk7CQlcCisJCXJldDsJCQkJCQlcCisJfSkKKyNlbHNlCisjZGVmaW5lIGFsbG9jX3RocmVhZF9pbmZvKHRzaykga21hbGxvYyhUSFJFQURfU0laRSwgR0ZQX0tFUk5FTCkKKyNlbmRpZgorCisjZGVmaW5lIGZyZWVfdGhyZWFkX2luZm8oaW5mbykJa2ZyZWUoaW5mbykKKyNkZWZpbmUgZ2V0X3RocmVhZF9pbmZvKHRpKSBnZXRfdGFza19zdHJ1Y3QoKHRpKS0+dGFzaykKKyNkZWZpbmUgcHV0X3RocmVhZF9pbmZvKHRpKSBwdXRfdGFza19zdHJ1Y3QoKHRpKS0+dGFzaykKKworI2Vsc2UgLyogIV9fQVNTRU1CTFlfXyAqLworCisvKiBob3cgdG8gZ2V0IHRoZSB0aHJlYWQgaW5mb3JtYXRpb24gc3RydWN0IGZyb20gQVNNICovCisjZGVmaW5lIEdFVF9USFJFQURfSU5GTyhyZWcpIFwKKwltb3ZsICQtVEhSRUFEX1NJWkUsIHJlZzsgXAorCWFuZGwgJWVzcCwgcmVnCisKKy8qIHVzZSB0aGlzIG9uZSBpZiByZWcgYWxyZWFkeSBjb250YWlucyAlZXNwICovCisjZGVmaW5lIEdFVF9USFJFQURfSU5GT19XSVRIX0VTUChyZWcpIFwKKwlhbmRsICQtVEhSRUFEX1NJWkUsIHJlZworCisjZW5kaWYKKworLyoKKyAqIHRocmVhZCBpbmZvcm1hdGlvbiBmbGFncworICogLSB0aGVzZSBhcmUgcHJvY2VzcyBzdGF0ZSBmbGFncyB0aGF0IHZhcmlvdXMgYXNzZW1ibHkgZmlsZXMgbWF5IG5lZWQgdG8gYWNjZXNzCisgKiAtIHBlbmRpbmcgd29yay10by1iZS1kb25lIGZsYWdzIGFyZSBpbiBMU1cKKyAqIC0gb3RoZXIgZmxhZ3MgaW4gTVNXCisgKi8KKyNkZWZpbmUgVElGX1NZU0NBTExfVFJBQ0UJMAkvKiBzeXNjYWxsIHRyYWNlIGFjdGl2ZSAqLworI2RlZmluZSBUSUZfTk9USUZZX1JFU1VNRQkxCS8qIHJlc3VtcHRpb24gbm90aWZpY2F0aW9uIHJlcXVlc3RlZCAqLworI2RlZmluZSBUSUZfU0lHUEVORElORwkJMgkvKiBzaWduYWwgcGVuZGluZyAqLworI2RlZmluZSBUSUZfTkVFRF9SRVNDSEVECTMJLyogcmVzY2hlZHVsaW5nIG5lY2Vzc2FyeSAqLworI2RlZmluZSBUSUZfU0lOR0xFU1RFUAkJNAkvKiByZXN0b3JlIHNpbmdsZXN0ZXAgb24gcmV0dXJuIHRvIHVzZXIgbW9kZSAqLworI2RlZmluZSBUSUZfSVJFVAkJNQkvKiByZXR1cm4gd2l0aCBpcmV0ICovCisjZGVmaW5lIFRJRl9TWVNDQUxMX0FVRElUCTcJLyogc3lzY2FsbCBhdWRpdGluZyBhY3RpdmUgKi8KKyNkZWZpbmUgVElGX1NFQ0NPTVAJCTgJLyogc2VjdXJlIGNvbXB1dGluZyAqLworI2RlZmluZSBUSUZfUE9MTElOR19OUkZMQUcJMTYJLyogdHJ1ZSBpZiBwb2xsX2lkbGUoKSBpcyBwb2xsaW5nIFRJRl9ORUVEX1JFU0NIRUQgKi8KKyNkZWZpbmUgVElGX01FTURJRQkJMTcKKworI2RlZmluZSBfVElGX1NZU0NBTExfVFJBQ0UJKDE8PFRJRl9TWVNDQUxMX1RSQUNFKQorI2RlZmluZSBfVElGX05PVElGWV9SRVNVTUUJKDE8PFRJRl9OT1RJRllfUkVTVU1FKQorI2RlZmluZSBfVElGX1NJR1BFTkRJTkcJCSgxPDxUSUZfU0lHUEVORElORykKKyNkZWZpbmUgX1RJRl9ORUVEX1JFU0NIRUQJKDE8PFRJRl9ORUVEX1JFU0NIRUQpCisjZGVmaW5lIF9USUZfU0lOR0xFU1RFUAkJKDE8PFRJRl9TSU5HTEVTVEVQKQorI2RlZmluZSBfVElGX0lSRVQJCSgxPDxUSUZfSVJFVCkKKyNkZWZpbmUgX1RJRl9TWVNDQUxMX0FVRElUCSgxPDxUSUZfU1lTQ0FMTF9BVURJVCkKKyNkZWZpbmUgX1RJRl9TRUNDT01QCQkoMTw8VElGX1NFQ0NPTVApCisjZGVmaW5lIF9USUZfUE9MTElOR19OUkZMQUcJKDE8PFRJRl9QT0xMSU5HX05SRkxBRykKKworLyogd29yayB0byBkbyBvbiBpbnRlcnJ1cHQvZXhjZXB0aW9uIHJldHVybiAqLworI2RlZmluZSBfVElGX1dPUktfTUFTSyBcCisgICgweDAwMDBGRkZGICYgfihfVElGX1NZU0NBTExfVFJBQ0V8X1RJRl9TWVNDQUxMX0FVRElUfF9USUZfU0lOR0xFU1RFUHxfVElGX1NFQ0NPTVApKQorLyogd29yayB0byBkbyBvbiBhbnkgcmV0dXJuIHRvIHUtc3BhY2UgKi8KKyNkZWZpbmUgX1RJRl9BTExXT1JLX01BU0sJKDB4MDAwMEZGRkYgJiB+X1RJRl9TRUNDT01QKQorCisvKgorICogVGhyZWFkLXN5bmNocm9ub3VzIHN0YXR1cy4KKyAqCisgKiBUaGlzIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBmbGFncyBpbiB0aGF0IG5vYm9keSBlbHNlCisgKiBldmVyIHRvdWNoZXMgb3VyIHRocmVhZC1zeW5jaHJvbm91cyBzdGF0dXMsIHNvIHdlIGRvbid0CisgKiBoYXZlIHRvIHdvcnJ5IGFib3V0IGF0b21pYyBhY2Nlc3Nlcy4KKyAqLworI2RlZmluZSBUU19VU0VERlBVCQkweDAwMDEJLyogRlBVIHdhcyB1c2VkIGJ5IHRoaXMgdGFzayB0aGlzIHF1YW50dW0gKFNNUCkgKi8KKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9BU01fVEhSRUFEX0lORk9fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni90aW1lci5oIGIvaW5jbHVkZS9hc20taTM4Ni90aW1lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwYzU0ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3RpbWVyLmgKQEAgLTAsMCArMSw2NCBAQAorI2lmbmRlZiBfQVNNaTM4Nl9USU1FUl9ICisjZGVmaW5lIF9BU01pMzg2X1RJTUVSX0gKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKy8qKgorICogc3RydWN0IHRpbWVyX29wcyAtIHVzZWQgdG8gZGVmaW5lIGEgdGltZXIgc291cmNlCisgKgorICogQG5hbWU6IG5hbWUgb2YgdGhlIHRpbWVyLgorICogQGluaXQ6IFByb2JlcyBhbmQgaW5pdGlhbGl6ZXMgdGhlIHRpbWVyLiBUYWtlcyBjbG9jaz0gb3ZlcnJpZGUgCisgKiAgICAgICAgc3RyaW5nIGFzIGFuIGFyZ3VtZW50LiBSZXR1cm5zIDAgb24gc3VjY2VzcywgYW55dGhpbmcgZWxzZQorICogICAgICAgIG9uIGZhaWx1cmUuCisgKiBAbWFya19vZmZzZXQ6IGNhbGxlZCBieSB0aGUgdGltZXIgaW50ZXJydXB0LgorICogQGdldF9vZmZzZXQ6ICBjYWxsZWQgYnkgZ2V0dGltZW9mZGF5KCkuIFJldHVybnMgdGhlIG51bWJlciBvZiBtaWNyb3NlY29uZHMKKyAqICAgICAgICAgICAgICAgc2luY2UgdGhlIGxhc3QgdGltZXIgaW50ZXJ1cHQuCisgKiBAbW9ub3RvbmljX2Nsb2NrOiByZXR1cm5zIHRoZSBudW1iZXIgb2YgbmFub3NlY29uZHMgc2luY2UgdGhlIGluaXQgb2YgdGhlCisgKiAgICAgICAgICAgICAgICAgICB0aW1lci4KKyAqIEBkZWxheTogZGVsYXlzIHRoaXMgbWFueSBjbG9jayBjeWNsZXMuCisgKi8KK3N0cnVjdCB0aW1lcl9vcHRzIHsKKwljaGFyKiBuYW1lOworCXZvaWQgKCptYXJrX29mZnNldCkodm9pZCk7CisJdW5zaWduZWQgbG9uZyAoKmdldF9vZmZzZXQpKHZvaWQpOworCXVuc2lnbmVkIGxvbmcgbG9uZyAoKm1vbm90b25pY19jbG9jaykodm9pZCk7CisJdm9pZCAoKmRlbGF5KSh1bnNpZ25lZCBsb25nKTsKK307CisKK3N0cnVjdCBpbml0X3RpbWVyX29wdHMgeworCWludCAoKmluaXQpKGNoYXIgKm92ZXJyaWRlKTsKKwlzdHJ1Y3QgdGltZXJfb3B0cyAqb3B0czsKK307CisKKyNkZWZpbmUgVElDS19TSVpFICh0aWNrX25zZWMgLyAxMDAwKQorCitleHRlcm4gc3RydWN0IHRpbWVyX29wdHMqIF9faW5pdCBzZWxlY3RfdGltZXIodm9pZCk7CitleHRlcm4gdm9pZCBjbG9ja19mYWxsYmFjayh2b2lkKTsKK3ZvaWQgc2V0dXBfcGl0X3RpbWVyKHZvaWQpOworCisvKiBNb2RpZmllcnMgZm9yIGJ1Z2d5IFBJVCBoYW5kbGluZyAqLworCitleHRlcm4gaW50IHBpdF9sYXRjaF9idWdneTsKKworZXh0ZXJuIHN0cnVjdCB0aW1lcl9vcHRzICpjdXJfdGltZXI7CitleHRlcm4gaW50IHRpbWVyX2FjazsKKworLyogbGlzdCBvZiBleHRlcm5lZCB0aW1lcnMgKi8KK2V4dGVybiBzdHJ1Y3QgdGltZXJfb3B0cyB0aW1lcl9ub25lOworZXh0ZXJuIHN0cnVjdCB0aW1lcl9vcHRzIHRpbWVyX3BpdDsKK2V4dGVybiBzdHJ1Y3QgaW5pdF90aW1lcl9vcHRzIHRpbWVyX3BpdF9pbml0OworZXh0ZXJuIHN0cnVjdCBpbml0X3RpbWVyX29wdHMgdGltZXJfdHNjX2luaXQ7CisjaWZkZWYgQ09ORklHX1g4Nl9DWUNMT05FX1RJTUVSCitleHRlcm4gc3RydWN0IGluaXRfdGltZXJfb3B0cyB0aW1lcl9jeWNsb25lX2luaXQ7CisjZW5kaWYKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgY2FsaWJyYXRlX3RzYyh2b2lkKTsKK2V4dGVybiB2b2lkIGluaXRfY3B1X2toeih2b2lkKTsKKyNpZmRlZiBDT05GSUdfSFBFVF9USU1FUgorZXh0ZXJuIHN0cnVjdCBpbml0X3RpbWVyX29wdHMgdGltZXJfaHBldF9pbml0OworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgY2FsaWJyYXRlX3RzY19ocGV0KHVuc2lnbmVkIGxvbmcgKnRzY19ocGV0X3F1b3RpZW50X3B0cik7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19YODZfUE1fVElNRVIKK2V4dGVybiBzdHJ1Y3QgaW5pdF90aW1lcl9vcHRzIHRpbWVyX3BtdG1yX2luaXQ7CisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni90aW1leC5oIGIvaW5jbHVkZS9hc20taTM4Ni90aW1leC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0MWU0ODQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3RpbWV4LmgKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLWkzODYvdGltZXguaAorICoKKyAqIGkzODYgYXJjaGl0ZWN0dXJlIHRpbWV4IHNwZWNpZmljYXRpb25zCisgKi8KKyNpZm5kZWYgX0FTTWkzODZfVElNRVhfSAorI2RlZmluZSBfQVNNaTM4Nl9USU1FWF9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisKKyNpZmRlZiBDT05GSUdfWDg2X0VMQU4KKyMgIGRlZmluZSBDTE9DS19USUNLX1JBVEUgMTE4OTIwMCAvKiBBTUQgRWxhbiBoYXMgZGlmZmVyZW50IGZyZXF1ZW5jeSEgKi8KKyNlbHNlCisjICBkZWZpbmUgQ0xPQ0tfVElDS19SQVRFIDExOTMxODIgLyogVW5kZXJseWluZyBIWiAqLworI2VuZGlmCisKKworLyoKKyAqIFN0YW5kYXJkIHdheSB0byBhY2Nlc3MgdGhlIGN5Y2xlIGNvdW50ZXIgb24gaTU4NisgQ1BVcy4KKyAqIEN1cnJlbnRseSBvbmx5IHVzZWQgb24gU01QLgorICoKKyAqIElmIHlvdSByZWFsbHkgaGF2ZSBhIFNNUCBtYWNoaW5lIHdpdGggaTQ4NiBjaGlwcyBvciBvbGRlciwKKyAqIGNvbXBpbGUgZm9yIHRoYXQsIGFuZCB0aGlzIHdpbGwganVzdCBhbHdheXMgcmV0dXJuIHplcm8uCisgKiBUaGF0J3Mgb2ssIGl0IGp1c3QgbWVhbnMgdGhhdCB0aGUgbmljZXIgc2NoZWR1bGluZyBoZXVyaXN0aWNzCisgKiB3b24ndCB3b3JrIGZvciB5b3UuCisgKgorICogV2Ugb25seSB1c2UgdGhlIGxvdyAzMiBiaXRzLCBhbmQgd2UnZCBzaW1wbHkgYmV0dGVyIG1ha2Ugc3VyZQorICogdGhhdCB3ZSByZXNjaGVkdWxlIGJlZm9yZSB0aGF0IHdyYXBzLiBTY2hlZHVsaW5nIGF0IGxlYXN0IGV2ZXJ5CisgKiBmb3VyIGJpbGxpb24gY3ljbGVzIGp1c3QgYmFzaWNhbGx5IHNvdW5kcyBsaWtlIGEgZ29vZCBpZGVhLAorICogcmVnYXJkbGVzcyBvZiBob3cgZmFzdCB0aGUgbWFjaGluZSBpcy4gCisgKi8KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGN5Y2xlc190OworCitzdGF0aWMgaW5saW5lIGN5Y2xlc190IGdldF9jeWNsZXMgKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIHJldD0wOworCisjaWZuZGVmIENPTkZJR19YODZfVFNDCisJaWYgKCFjcHVfaGFzX3RzYykKKwkJcmV0dXJuIDA7CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX1g4Nl9HRU5FUklDKSB8fCBkZWZpbmVkKENPTkZJR19YODZfVFNDKQorCXJkdHNjbGwocmV0KTsKKyNlbmRpZgorCXJldHVybiByZXQ7Cit9CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIGNwdV9raHo7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni90bGIuaCBiL2luY2x1ZGUvYXNtLWkzODYvdGxiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzAwNmM1YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvdGxiLmgKQEAgLTAsMCArMSwyMCBAQAorI2lmbmRlZiBfSTM4Nl9UTEJfSAorI2RlZmluZSBfSTM4Nl9UTEJfSAorCisvKgorICogeDg2IGRvZXNuJ3QgbmVlZCBhbnkgc3BlY2lhbCBwZXItcHRlIG9yCisgKiBwZXItdm1hIGhhbmRsaW5nLi4KKyAqLworI2RlZmluZSB0bGJfc3RhcnRfdm1hKHRsYiwgdm1hKSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHRsYl9lbmRfdm1hKHRsYiwgdm1hKSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIF9fdGxiX3JlbW92ZV90bGJfZW50cnkodGxiLCBwdGVwLCBhZGRyZXNzKSBkbyB7IH0gd2hpbGUgKDApCisKKy8qCisgKiAuLiBiZWNhdXNlIHdlIGZsdXNoIHRoZSB3aG9sZSBtbSB3aGVuIGl0CisgKiBmaWxscyB1cC4KKyAqLworI2RlZmluZSB0bGJfZmx1c2godGxiKSBmbHVzaF90bGJfbW0oKHRsYiktPm1tKQorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdGxiLmg+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni90bGJmbHVzaC5oIGIvaW5jbHVkZS9hc20taTM4Ni90bGJmbHVzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyMmZhYjAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3RsYmZsdXNoLmgKQEAgLTAsMCArMSwxNDcgQEAKKyNpZm5kZWYgX0kzODZfVExCRkxVU0hfSAorI2RlZmluZSBfSTM4Nl9UTEJGTFVTSF9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKworI2RlZmluZSBfX2ZsdXNoX3RsYigpCQkJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCXVuc2lnbmVkIGludCB0bXByZWc7CQkJCQlcCisJCQkJCQkJCQlcCisJCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJXAorCQkJIm1vdmwgJSVjcjMsICUwOyAgICAgICAgICAgICAgXG4iCQlcCisJCQkibW92bCAlMCwgJSVjcjM7ICAjIGZsdXNoIFRMQiBcbiIJCVwKKwkJCTogIj1yIiAodG1wcmVnKQkJCQkJXAorCQkJOjogIm1lbW9yeSIpOwkJCQkJXAorCX0gd2hpbGUgKDApCisKKy8qCisgKiBHbG9iYWwgcGFnZXMgaGF2ZSB0byBiZSBmbHVzaGVkIGEgYml0IGRpZmZlcmVudGx5LiBOb3QgYSByZWFsCisgKiBwZXJmb3JtYW5jZSBwcm9ibGVtIGJlY2F1c2UgdGhpcyBkb2VzIG5vdCBoYXBwZW4gb2Z0ZW4uCisgKi8KKyNkZWZpbmUgX19mbHVzaF90bGJfZ2xvYmFsKCkJCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQl1bnNpZ25lZCBpbnQgdG1wcmVnOwkJCQkJXAorCQkJCQkJCQkJXAorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCVwKKwkJCSJtb3ZsICUxLCAlJWNyNDsgICMgdHVybiBvZmYgUEdFICAgICBcbiIJXAorCQkJIm1vdmwgJSVjcjMsICUwOyAgICAgICAgICAgICAgICAgICAgIFxuIglcCisJCQkibW92bCAlMCwgJSVjcjM7ICAjIGZsdXNoIFRMQiAgICAgICAgXG4iCVwKKwkJCSJtb3ZsICUyLCAlJWNyNDsgICMgdHVybiBQR0UgYmFjayBvbiBcbiIJXAorCQkJOiAiPSZyIiAodG1wcmVnKQkJCQlcCisJCQk6ICJyIiAobW11X2NyNF9mZWF0dXJlcyAmIH5YODZfQ1I0X1BHRSksCVwKKwkJCSAgInIiIChtbXVfY3I0X2ZlYXR1cmVzKQkJCVwKKwkJCTogIm1lbW9yeSIpOwkJCQkJXAorCX0gd2hpbGUgKDApCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIHBna2Vybl9tYXNrOworCisjIGRlZmluZSBfX2ZsdXNoX3RsYl9hbGwoKQkJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCWlmIChjcHVfaGFzX3BnZSkJCQkJCVwKKwkJCV9fZmx1c2hfdGxiX2dsb2JhbCgpOwkJCQlcCisJCWVsc2UJCQkJCQkJXAorCQkJX19mbHVzaF90bGIoKTsJCQkJCVwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIGNwdV9oYXNfaW52bHBnCShib290X2NwdV9kYXRhLng4NiA+IDMpCisKKyNkZWZpbmUgX19mbHVzaF90bGJfc2luZ2xlKGFkZHIpIFwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygiaW52bHBnICUwIjogOiJtIiAoKihjaGFyICopIGFkZHIpKQorCisjaWZkZWYgQ09ORklHX1g4Nl9JTlZMUEcKKyMgZGVmaW5lIF9fZmx1c2hfdGxiX29uZShhZGRyKSBfX2ZsdXNoX3RsYl9zaW5nbGUoYWRkcikKKyNlbHNlCisjIGRlZmluZSBfX2ZsdXNoX3RsYl9vbmUoYWRkcikJCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlpZiAoY3B1X2hhc19pbnZscGcpCQkJCQlcCisJCQlfX2ZsdXNoX3RsYl9zaW5nbGUoYWRkcik7CQkJXAorCQllbHNlCQkJCQkJCVwKKwkJCV9fZmx1c2hfdGxiKCk7CQkJCQlcCisJfSB3aGlsZSAoMCkKKyNlbmRpZgorCisvKgorICogVExCIGZsdXNoaW5nOgorICoKKyAqICAtIGZsdXNoX3RsYigpIGZsdXNoZXMgdGhlIGN1cnJlbnQgbW0gc3RydWN0IFRMQnMKKyAqICAtIGZsdXNoX3RsYl9hbGwoKSBmbHVzaGVzIGFsbCBwcm9jZXNzZXMgVExCcworICogIC0gZmx1c2hfdGxiX21tKG1tKSBmbHVzaGVzIHRoZSBzcGVjaWZpZWQgbW0gY29udGV4dCBUTEIncworICogIC0gZmx1c2hfdGxiX3BhZ2Uodm1hLCB2bWFkZHIpIGZsdXNoZXMgb25lIHBhZ2UKKyAqICAtIGZsdXNoX3RsYl9yYW5nZSh2bWEsIHN0YXJ0LCBlbmQpIGZsdXNoZXMgYSByYW5nZSBvZiBwYWdlcworICogIC0gZmx1c2hfdGxiX2tlcm5lbF9yYW5nZShzdGFydCwgZW5kKSBmbHVzaGVzIGEgcmFuZ2Ugb2Yga2VybmVsIHBhZ2VzCisgKiAgLSBmbHVzaF90bGJfcGd0YWJsZXMobW0sIHN0YXJ0LCBlbmQpIGZsdXNoZXMgYSByYW5nZSBvZiBwYWdlIHRhYmxlcworICoKKyAqIC4uYnV0IHRoZSBpMzg2IGhhcyBzb21ld2hhdCBsaW1pdGVkIHRsYiBmbHVzaGluZyBjYXBhYmlsaXRpZXMsCisgKiBhbmQgcGFnZS1ncmFudWxhciBmbHVzaGVzIGFyZSBhdmFpbGFibGUgb25seSBvbiBpNDg2IGFuZCB1cC4KKyAqLworCisjaWZuZGVmIENPTkZJR19TTVAKKworI2RlZmluZSBmbHVzaF90bGIoKSBfX2ZsdXNoX3RsYigpCisjZGVmaW5lIGZsdXNoX3RsYl9hbGwoKSBfX2ZsdXNoX3RsYl9hbGwoKQorI2RlZmluZSBsb2NhbF9mbHVzaF90bGIoKSBfX2ZsdXNoX3RsYigpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJaWYgKG1tID09IGN1cnJlbnQtPmFjdGl2ZV9tbSkKKwkJX19mbHVzaF90bGIoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCXVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlpZiAodm1hLT52bV9tbSA9PSBjdXJyZW50LT5hY3RpdmVfbW0pCisJCV9fZmx1c2hfdGxiX29uZShhZGRyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwl1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwlpZiAodm1hLT52bV9tbSA9PSBjdXJyZW50LT5hY3RpdmVfbW0pCisJCV9fZmx1c2hfdGxiKCk7Cit9CisKKyNlbHNlCisKKyNpbmNsdWRlIDxhc20vc21wLmg+CisKKyNkZWZpbmUgbG9jYWxfZmx1c2hfdGxiKCkgXAorCV9fZmx1c2hfdGxiKCkKKworZXh0ZXJuIHZvaWQgZmx1c2hfdGxiX2FsbCh2b2lkKTsKK2V4dGVybiB2b2lkIGZsdXNoX3RsYl9jdXJyZW50X3Rhc2sodm9pZCk7CitleHRlcm4gdm9pZCBmbHVzaF90bGJfbW0oc3RydWN0IG1tX3N0cnVjdCAqKTsKK2V4dGVybiB2b2lkIGZsdXNoX3RsYl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nKTsKKworI2RlZmluZSBmbHVzaF90bGIoKQlmbHVzaF90bGJfY3VycmVudF90YXNrKCkKKworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCWZsdXNoX3RsYl9tbSh2bWEtPnZtX21tKTsKK30KKworI2RlZmluZSBUTEJTVEFURV9PSwkxCisjZGVmaW5lIFRMQlNUQVRFX0xBWlkJMgorCitzdHJ1Y3QgdGxiX3N0YXRlCit7CisJc3RydWN0IG1tX3N0cnVjdCAqYWN0aXZlX21tOworCWludCBzdGF0ZTsKKwljaGFyIF9fY2FjaGVsaW5lX3BhZGRpbmdbTDFfQ0FDSEVfQllURVMtOF07Cit9OworREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCB0bGJfc3RhdGUsIGNwdV90bGJzdGF0ZSk7CisKKworI2VuZGlmCisKKyNkZWZpbmUgZmx1c2hfdGxiX2tlcm5lbF9yYW5nZShzdGFydCwgZW5kKSBmbHVzaF90bGJfYWxsKCkKKworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9wZ3RhYmxlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwkvKiBpMzg2IGRvZXMgbm90IGtlZXAgYW55IHBhZ2UgdGFibGUgY2FjaGVzIGluIFRMQiAqLworfQorCisjZW5kaWYgLyogX0kzODZfVExCRkxVU0hfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni90b3BvbG9neS5oIGIvaW5jbHVkZS9hc20taTM4Ni90b3BvbG9neS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4ZjllNjgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3RvcG9sb2d5LmgKQEAgLTAsMCArMSwxMDggQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1pMzg2L3RvcG9sb2d5LmgKKyAqCisgKiBXcml0dGVuIGJ5OiBNYXR0aGV3IERvYnNvbiwgSUJNIENvcnBvcmF0aW9uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAyLCBJQk0gQ29ycC4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUKKyAqIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKiBTZW5kIGZlZWRiYWNrIHRvIDxjb2xwYXRjaEB1cy5pYm0uY29tPgorICovCisjaWZuZGVmIF9BU01fSTM4Nl9UT1BPTE9HWV9ICisjZGVmaW5lIF9BU01fSTM4Nl9UT1BPTE9HWV9ICisKKyNpZmRlZiBDT05GSUdfTlVNQQorCisjaW5jbHVkZSA8YXNtL21wc3BlYy5oPgorCisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgorCisvKiBNYXBwaW5ncyBiZXR3ZWVuIGxvZ2ljYWwgY3B1IG51bWJlciBhbmQgbm9kZSBudW1iZXIgKi8KK2V4dGVybiBjcHVtYXNrX3Qgbm9kZV8yX2NwdV9tYXNrW107CitleHRlcm4gaW50IGNwdV8yX25vZGVbXTsKKworLyogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHRoZSBub2RlIGNvbnRhaW5pbmcgQ1BVICdjcHUnICovCitzdGF0aWMgaW5saW5lIGludCBjcHVfdG9fbm9kZShpbnQgY3B1KQoreyAKKwlyZXR1cm4gY3B1XzJfbm9kZVtjcHVdOworfQorCisvKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgdGhlIG5vZGUgY29udGFpbmluZyBOb2RlICdub2RlJy4gIFRoaXMgYXJjaGl0ZWN0dXJlIGlzIGZsYXQsIAorICAgc28gaXQgaXMgYSBwcmV0dHkgc2ltcGxlIGZ1bmN0aW9uISAqLworI2RlZmluZSBwYXJlbnRfbm9kZShub2RlKSAobm9kZSkKKworLyogUmV0dXJucyBhIGJpdG1hc2sgb2YgQ1BVcyBvbiBOb2RlICdub2RlJy4gKi8KK3N0YXRpYyBpbmxpbmUgY3B1bWFza190IG5vZGVfdG9fY3B1bWFzayhpbnQgbm9kZSkKK3sKKwlyZXR1cm4gbm9kZV8yX2NwdV9tYXNrW25vZGVdOworfQorCisvKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgdGhlIGZpcnN0IENQVSBvbiBOb2RlICdub2RlJy4gKi8KK3N0YXRpYyBpbmxpbmUgaW50IG5vZGVfdG9fZmlyc3RfY3B1KGludCBub2RlKQoreyAKKwljcHVtYXNrX3QgbWFzayA9IG5vZGVfdG9fY3B1bWFzayhub2RlKTsKKwlyZXR1cm4gZmlyc3RfY3B1KG1hc2spOworfQorCisvKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgdGhlIG5vZGUgY29udGFpbmluZyBQQ0kgYnVzIG51bWJlciAnYnVzbnInICovCitzdGF0aWMgaW5saW5lIGNwdW1hc2tfdCBfX3BjaWJ1c190b19jcHVtYXNrKGludCBidXNucikKK3sKKwlyZXR1cm4gbm9kZV90b19jcHVtYXNrKG1wX2J1c19pZF90b19ub2RlW2J1c25yXSk7Cit9CisjZGVmaW5lIHBjaWJ1c190b19jcHVtYXNrKGJ1cykJX19wY2lidXNfdG9fY3B1bWFzayhidXMtPm51bWJlcikKKworLyogc2NoZWRfZG9tYWlucyBTRF9OT0RFX0lOSVQgZm9yIE5VTUFRIG1hY2hpbmVzICovCisjZGVmaW5lIFNEX05PREVfSU5JVCAoc3RydWN0IHNjaGVkX2RvbWFpbikgewkJXAorCS5zcGFuCQkJPSBDUFVfTUFTS19OT05FLAlcCisJLnBhcmVudAkJCT0gTlVMTCwJCQlcCisJLmdyb3VwcwkJCT0gTlVMTCwJCQlcCisJLm1pbl9pbnRlcnZhbAkJPSA4LAkJCVwKKwkubWF4X2ludGVydmFsCQk9IDMyLAkJCVwKKwkuYnVzeV9mYWN0b3IJCT0gMzIsCQkJXAorCS5pbWJhbGFuY2VfcGN0CQk9IDEyNSwJCQlcCisJLmNhY2hlX2hvdF90aW1lCQk9ICgxMCoxMDAwMDAwKSwJCVwKKwkuY2FjaGVfbmljZV90cmllcwk9IDEsCQkJXAorCS5wZXJfY3B1X2dhaW4JCT0gMTAwLAkJCVwKKwkuZmxhZ3MJCQk9IFNEX0xPQURfQkFMQU5DRQlcCisJCQkJfCBTRF9CQUxBTkNFX0VYRUMJXAorCQkJCXwgU0RfQkFMQU5DRV9ORVdJRExFCVwKKwkJCQl8IFNEX1dBS0VfSURMRQkJXAorCQkJCXwgU0RfV0FLRV9CQUxBTkNFLAlcCisJLmxhc3RfYmFsYW5jZQkJPSBqaWZmaWVzLAkJXAorCS5iYWxhbmNlX2ludGVydmFsCT0gMSwJCQlcCisJLm5yX2JhbGFuY2VfZmFpbGVkCT0gMCwJCQlcCit9CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIG5vZGVfc3RhcnRfcGZuW107CitleHRlcm4gdW5zaWduZWQgbG9uZyBub2RlX2VuZF9wZm5bXTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIG5vZGVfcmVtYXBfc2l6ZVtdOworCisjZGVmaW5lIG5vZGVfaGFzX29ubGluZV9tZW0obmlkKSAobm9kZV9zdGFydF9wZm5bbmlkXSAhPSBub2RlX2VuZF9wZm5bbmlkXSkKKworI2Vsc2UgLyogIUNPTkZJR19OVU1BICovCisvKgorICogT3RoZXIgaTM4NiBwbGF0Zm9ybXMgc2hvdWxkIGRlZmluZSB0aGVpciBvd24gdmVyc2lvbiBvZiB0aGUgCisgKiBhYm92ZSBtYWNyb3MgaGVyZS4KKyAqLworCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdG9wb2xvZ3kuaD4KKworI2VuZGlmIC8qIENPTkZJR19OVU1BICovCisKKyNlbmRpZiAvKiBfQVNNX0kzODZfVE9QT0xPR1lfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni90eXBlcy5oIGIvaW5jbHVkZS9hc20taTM4Ni90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwMWI3N2MKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3R5cGVzLmgKQEAgLTAsMCArMSw3MiBAQAorI2lmbmRlZiBfSTM4Nl9UWVBFU19ICisjZGVmaW5lIF9JMzg2X1RZUEVTX0gKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1bW9kZV90OworCisvKgorICogX194eCBpcyBvazogaXQgZG9lc24ndCBwb2xsdXRlIHRoZSBQT1NJWCBuYW1lc3BhY2UuIFVzZSB0aGVzZSBpbiB0aGUKKyAqIGhlYWRlciBmaWxlcyBleHBvcnRlZCB0byB1c2VyIHNwYWNlCisgKi8KKwordHlwZWRlZiBfX3NpZ25lZF9fIGNoYXIgX19zODsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBfX3U4OworCit0eXBlZGVmIF9fc2lnbmVkX18gc2hvcnQgX19zMTY7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fdTE2OworCit0eXBlZGVmIF9fc2lnbmVkX18gaW50IF9fczMyOwordHlwZWRlZiB1bnNpZ25lZCBpbnQgX191MzI7CisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAhZGVmaW5lZChfX1NUUklDVF9BTlNJX18pCit0eXBlZGVmIF9fc2lnbmVkX18gbG9uZyBsb25nIF9fczY0OwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgX191NjQ7CisjZW5kaWYKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisvKgorICogVGhlc2UgYXJlbid0IGV4cG9ydGVkIG91dHNpZGUgdGhlIGtlcm5lbCB0byBhdm9pZCBuYW1lIHNwYWNlIGNsYXNoZXMKKyAqLworI2lmZGVmIF9fS0VSTkVMX18KKworI2RlZmluZSBCSVRTX1BFUl9MT05HIDMyCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKwordHlwZWRlZiBzaWduZWQgY2hhciBzODsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciB1ODsKKwordHlwZWRlZiBzaWduZWQgc2hvcnQgczE2OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1MTY7CisKK3R5cGVkZWYgc2lnbmVkIGludCBzMzI7Cit0eXBlZGVmIHVuc2lnbmVkIGludCB1MzI7CisKK3R5cGVkZWYgc2lnbmVkIGxvbmcgbG9uZyBzNjQ7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1NjQ7CisKKy8qIERNQSBhZGRyZXNzZXMgY29tZSBpbiBnZW5lcmljIGFuZCA2NC1iaXQgZmxhdm91cnMuICAqLworCisjaWZkZWYgQ09ORklHX0hJR0hNRU02NEcKK3R5cGVkZWYgdTY0IGRtYV9hZGRyX3Q7CisjZWxzZQordHlwZWRlZiB1MzIgZG1hX2FkZHJfdDsKKyNlbmRpZgordHlwZWRlZiB1NjQgZG1hNjRfYWRkcl90OworCisjaWZkZWYgQ09ORklHX0xCRAordHlwZWRlZiB1NjQgc2VjdG9yX3Q7CisjZGVmaW5lIEhBVkVfU0VDVE9SX1QKKyNlbmRpZgorCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGttZW1fYnVmY3RsX3Q7CisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3VhY2Nlc3MuaCBiL2luY2x1ZGUvYXNtLWkzODYvdWFjY2Vzcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4Njg2N2EKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3VhY2Nlc3MuaApAQCAtMCwwICsxLDUzOSBAQAorI2lmbmRlZiBfX2kzODZfVUFDQ0VTU19ICisjZGVmaW5lIF9faTM4Nl9VQUNDRVNTX0gKKworLyoKKyAqIFVzZXIgc3BhY2UgbWVtb3J5IGFjY2VzcyBmdW5jdGlvbnMKKyAqLworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvdGhyZWFkX2luZm8uaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisKKyNkZWZpbmUgVkVSSUZZX1JFQUQgMAorI2RlZmluZSBWRVJJRllfV1JJVEUgMQorCisvKgorICogVGhlIGZzIHZhbHVlIGRldGVybWluZXMgd2hldGhlciBhcmd1bWVudCB2YWxpZGl0eSBjaGVja2luZyBzaG91bGQgYmUKKyAqIHBlcmZvcm1lZCBvciBub3QuICBJZiBnZXRfZnMoKSA9PSBVU0VSX0RTLCBjaGVja2luZyBpcyBwZXJmb3JtZWQsIHdpdGgKKyAqIGdldF9mcygpID09IEtFUk5FTF9EUywgY2hlY2tpbmcgaXMgYnlwYXNzZWQuCisgKgorICogRm9yIGhpc3RvcmljYWwgcmVhc29ucywgdGhlc2UgbWFjcm9zIGFyZSBncm9zc2x5IG1pc25hbWVkLgorICovCisKKyNkZWZpbmUgTUFLRV9NTV9TRUcocykJKChtbV9zZWdtZW50X3QpIHsgKHMpIH0pCisKKworI2RlZmluZSBLRVJORUxfRFMJTUFLRV9NTV9TRUcoMHhGRkZGRkZGRlVMKQorI2RlZmluZSBVU0VSX0RTCQlNQUtFX01NX1NFRyhQQUdFX09GRlNFVCkKKworI2RlZmluZSBnZXRfZHMoKQkoS0VSTkVMX0RTKQorI2RlZmluZSBnZXRfZnMoKQkoY3VycmVudF90aHJlYWRfaW5mbygpLT5hZGRyX2xpbWl0KQorI2RlZmluZSBzZXRfZnMoeCkJKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+YWRkcl9saW1pdCA9ICh4KSkKKworI2RlZmluZSBzZWdtZW50X2VxKGEsYikJKChhKS5zZWcgPT0gKGIpLnNlZykKKworLyoKKyAqIG1vdnNsIGNhbiBiZSBzbG93IHdoZW4gc291cmNlIGFuZCBkZXN0IGFyZSBub3QgYm90aCA4LWJ5dGUgYWxpZ25lZAorICovCisjaWZkZWYgQ09ORklHX1g4Nl9JTlRFTF9VU0VSQ09QWQorZXh0ZXJuIHN0cnVjdCBtb3ZzbF9tYXNrIHsKKwlpbnQgbWFzazsKK30gX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcCBtb3ZzbF9tYXNrOworI2VuZGlmCisKKyNkZWZpbmUgX19hZGRyX29rKGFkZHIpICgodW5zaWduZWQgbG9uZyBfX2ZvcmNlKShhZGRyKSA8IChjdXJyZW50X3RocmVhZF9pbmZvKCktPmFkZHJfbGltaXQuc2VnKSkKKworLyoKKyAqIFRlc3Qgd2hldGhlciBhIGJsb2NrIG9mIG1lbW9yeSBpcyBhIHZhbGlkIHVzZXIgc3BhY2UgYWRkcmVzcy4KKyAqIFJldHVybnMgMCBpZiB0aGUgcmFuZ2UgaXMgdmFsaWQsIG5vbnplcm8gb3RoZXJ3aXNlLgorICoKKyAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byB0aGUgZm9sbG93aW5nIHRlc3Q6CisgKiAodTMzKWFkZHIgKyAodTMzKXNpemUgPj0gKHUzMyljdXJyZW50LT5hZGRyX2xpbWl0LnNlZworICoKKyAqIFRoaXMgbmVlZHMgMzMtYml0IGFyaXRobWV0aWMuIFdlIGhhdmUgYSBjYXJyeS4uLgorICovCisjZGVmaW5lIF9fcmFuZ2Vfb2soYWRkcixzaXplKSAoeyBcCisJdW5zaWduZWQgbG9uZyBmbGFnLHN1bTsgXAorCV9fY2hrX3VzZXJfcHRyKGFkZHIpOyBcCisJYXNtKCJhZGRsICUzLCUxIDsgc2JibCAlMCwlMDsgY21wbCAlMSwlNDsgc2JibCAkMCwlMCIgXAorCQk6Ij0mciIgKGZsYWcpLCAiPXIiIChzdW0pIFwKKwkJOiIxIiAoYWRkciksImciICgoaW50KShzaXplKSksImciIChjdXJyZW50X3RocmVhZF9pbmZvKCktPmFkZHJfbGltaXQuc2VnKSk7IFwKKwlmbGFnOyB9KQorCisvKioKKyAqIGFjY2Vzc19vazogLSBDaGVja3MgaWYgYSB1c2VyIHNwYWNlIHBvaW50ZXIgaXMgdmFsaWQKKyAqIEB0eXBlOiBUeXBlIG9mIGFjY2VzczogJVZFUklGWV9SRUFEIG9yICVWRVJJRllfV1JJVEUuICBOb3RlIHRoYXQKKyAqICAgICAgICAlVkVSSUZZX1dSSVRFIGlzIGEgc3VwZXJzZXQgb2YgJVZFUklGWV9SRUFEIC0gaWYgaXQgaXMgc2FmZQorICogICAgICAgIHRvIHdyaXRlIHRvIGEgYmxvY2ssIGl0IGlzIGFsd2F5cyBzYWZlIHRvIHJlYWQgZnJvbSBpdC4KKyAqIEBhZGRyOiBVc2VyIHNwYWNlIHBvaW50ZXIgdG8gc3RhcnQgb2YgYmxvY2sgdG8gY2hlY2sKKyAqIEBzaXplOiBTaXplIG9mIGJsb2NrIHRvIGNoZWNrCisgKgorICogQ29udGV4dDogVXNlciBjb250ZXh0IG9ubHkuICBUaGlzIGZ1bmN0aW9uIG1heSBzbGVlcC4KKyAqCisgKiBDaGVja3MgaWYgYSBwb2ludGVyIHRvIGEgYmxvY2sgb2YgbWVtb3J5IGluIHVzZXIgc3BhY2UgaXMgdmFsaWQuCisgKgorICogUmV0dXJucyB0cnVlIChub256ZXJvKSBpZiB0aGUgbWVtb3J5IGJsb2NrIG1heSBiZSB2YWxpZCwgZmFsc2UgKHplcm8pCisgKiBpZiBpdCBpcyBkZWZpbml0ZWx5IGludmFsaWQuCisgKgorICogTm90ZSB0aGF0LCBkZXBlbmRpbmcgb24gYXJjaGl0ZWN0dXJlLCB0aGlzIGZ1bmN0aW9uIHByb2JhYmx5IGp1c3QKKyAqIGNoZWNrcyB0aGF0IHRoZSBwb2ludGVyIGlzIGluIHRoZSB1c2VyIHNwYWNlIHJhbmdlIC0gYWZ0ZXIgY2FsbGluZworICogdGhpcyBmdW5jdGlvbiwgbWVtb3J5IGFjY2VzcyBmdW5jdGlvbnMgbWF5IHN0aWxsIHJldHVybiAtRUZBVUxULgorICovCisjZGVmaW5lIGFjY2Vzc19vayh0eXBlLGFkZHIsc2l6ZSkgKGxpa2VseShfX3JhbmdlX29rKGFkZHIsc2l6ZSkgPT0gMCkpCisKKy8qKgorICogdmVyaWZ5X2FyZWE6IC0gT2Jzb2xldGUvZGVwcmVjYXRlZCBhbmQgd2lsbCBnbyBhd2F5IHNvb24sCisgKiB1c2UgYWNjZXNzX29rKCkgaW5zdGVhZC4KKyAqIEB0eXBlOiBUeXBlIG9mIGFjY2VzczogJVZFUklGWV9SRUFEIG9yICVWRVJJRllfV1JJVEUKKyAqIEBhZGRyOiBVc2VyIHNwYWNlIHBvaW50ZXIgdG8gc3RhcnQgb2YgYmxvY2sgdG8gY2hlY2sKKyAqIEBzaXplOiBTaXplIG9mIGJsb2NrIHRvIGNoZWNrCisgKgorICogQ29udGV4dDogVXNlciBjb250ZXh0IG9ubHkuICBUaGlzIGZ1bmN0aW9uIG1heSBzbGVlcC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGhhcyBiZWVuIHJlcGxhY2VkIGJ5IGFjY2Vzc19vaygpLgorICoKKyAqIENoZWNrcyBpZiBhIHBvaW50ZXIgdG8gYSBibG9jayBvZiBtZW1vcnkgaW4gdXNlciBzcGFjZSBpcyB2YWxpZC4KKyAqCisgKiBSZXR1cm5zIHplcm8gaWYgdGhlIG1lbW9yeSBibG9jayBtYXkgYmUgdmFsaWQsIC1FRkFVTFQKKyAqIGlmIGl0IGlzIGRlZmluaXRlbHkgaW52YWxpZC4KKyAqCisgKiBTZWUgYWNjZXNzX29rKCkgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworc3RhdGljIGlubGluZSBpbnQgX19kZXByZWNhdGVkIHZlcmlmeV9hcmVhKGludCB0eXBlLCBjb25zdCB2b2lkIF9fdXNlciAqIGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlyZXR1cm4gYWNjZXNzX29rKHR5cGUsYWRkcixzaXplKSA/IDAgOiAtRUZBVUxUOworfQorCisKKy8qCisgKiBUaGUgZXhjZXB0aW9uIHRhYmxlIGNvbnNpc3RzIG9mIHBhaXJzIG9mIGFkZHJlc3NlczogdGhlIGZpcnN0IGlzIHRoZQorICogYWRkcmVzcyBvZiBhbiBpbnN0cnVjdGlvbiB0aGF0IGlzIGFsbG93ZWQgdG8gZmF1bHQsIGFuZCB0aGUgc2Vjb25kIGlzCisgKiB0aGUgYWRkcmVzcyBhdCB3aGljaCB0aGUgcHJvZ3JhbSBzaG91bGQgY29udGludWUuICBObyByZWdpc3RlcnMgYXJlCisgKiBtb2RpZmllZCwgc28gaXQgaXMgZW50aXJlbHkgdXAgdG8gdGhlIGNvbnRpbnVhdGlvbiBjb2RlIHRvIGZpZ3VyZSBvdXQKKyAqIHdoYXQgdG8gZG8uCisgKgorICogQWxsIHRoZSByb3V0aW5lcyBiZWxvdyB1c2UgYml0cyBvZiBmaXh1cCBjb2RlIHRoYXQgYXJlIG91dCBvZiBsaW5lCisgKiB3aXRoIHRoZSBtYWluIGluc3RydWN0aW9uIHBhdGguICBUaGlzIG1lYW5zIHdoZW4gZXZlcnl0aGluZyBpcyB3ZWxsLAorICogd2UgZG9uJ3QgZXZlbiBoYXZlIHRvIGp1bXAgb3ZlciB0aGVtLiAgRnVydGhlciwgdGhleSBkbyBub3QgaW50cnVkZQorICogb24gb3VyIGNhY2hlIG9yIHRsYiBlbnRyaWVzLgorICovCisKK3N0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkKK3sKKwl1bnNpZ25lZCBsb25nIGluc24sIGZpeHVwOworfTsKKworZXh0ZXJuIGludCBmaXh1cF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCisvKgorICogVGhlc2UgYXJlIHRoZSBtYWluIHNpbmdsZS12YWx1ZSB0cmFuc2ZlciByb3V0aW5lcy4gIFRoZXkgYXV0b21hdGljYWxseQorICogdXNlIHRoZSByaWdodCBzaXplIGlmIHdlIGp1c3QgaGF2ZSB0aGUgcmlnaHQgcG9pbnRlciB0eXBlLgorICoKKyAqIFRoaXMgZ2V0cyBraW5kIG9mIHVnbHkuIFdlIHdhbnQgdG8gcmV0dXJuIF90d29fIHZhbHVlcyBpbiAiZ2V0X3VzZXIoKSIKKyAqIGFuZCB5ZXQgd2UgZG9uJ3Qgd2FudCB0byBkbyBhbnkgcG9pbnRlcnMsIGJlY2F1c2UgdGhhdCBpcyB0b28gbXVjaAorICogb2YgYSBwZXJmb3JtYW5jZSBpbXBhY3QuIFRodXMgd2UgaGF2ZSBhIGZldyByYXRoZXIgdWdseSBtYWNyb3MgaGVyZSwKKyAqIGFuZCBoaWRlIGFsbCB0aGUgdWdsaW5lc3MgZnJvbSB0aGUgdXNlci4KKyAqCisgKiBUaGUgIl9feHh4IiB2ZXJzaW9ucyBvZiB0aGUgdXNlciBhY2Nlc3MgZnVuY3Rpb25zIGFyZSB2ZXJzaW9ucyB0aGF0CisgKiBkbyBub3QgdmVyaWZ5IHRoZSBhZGRyZXNzIHNwYWNlLCB0aGF0IG11c3QgaGF2ZSBiZWVuIGRvbmUgcHJldmlvdXNseQorICogd2l0aCBhIHNlcGFyYXRlICJhY2Nlc3Nfb2soKSIgY2FsbCAodGhpcyBpcyB1c2VkIHdoZW4gd2UgZG8gbXVsdGlwbGUKKyAqIGFjY2Vzc2VzIHRvIHRoZSBzYW1lIGFyZWEgb2YgdXNlciBtZW1vcnkpLgorICovCisKK2V4dGVybiB2b2lkIF9fZ2V0X3VzZXJfMSh2b2lkKTsKK2V4dGVybiB2b2lkIF9fZ2V0X3VzZXJfMih2b2lkKTsKK2V4dGVybiB2b2lkIF9fZ2V0X3VzZXJfNCh2b2lkKTsKKworI2RlZmluZSBfX2dldF91c2VyX3goc2l6ZSxyZXQseCxwdHIpIFwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygiY2FsbCBfX2dldF91c2VyXyIgI3NpemUgXAorCQk6Ij1hIiAocmV0KSwiPWQiICh4KSBcCisJCToiMCIgKHB0cikpCisKKworLyogQ2FyZWZ1bDogd2UgaGF2ZSB0byBjYXN0IHRoZSByZXN1bHQgdG8gdGhlIHR5cGUgb2YgdGhlIHBvaW50ZXIgZm9yIHNpZ24gcmVhc29ucyAqLworLyoqCisgKiBnZXRfdXNlcjogLSBHZXQgYSBzaW1wbGUgdmFyaWFibGUgZnJvbSB1c2VyIHNwYWNlLgorICogQHg6ICAgVmFyaWFibGUgdG8gc3RvcmUgcmVzdWx0LgorICogQHB0cjogU291cmNlIGFkZHJlc3MsIGluIHVzZXIgc3BhY2UuCisgKgorICogQ29udGV4dDogVXNlciBjb250ZXh0IG9ubHkuICBUaGlzIGZ1bmN0aW9uIG1heSBzbGVlcC4KKyAqCisgKiBUaGlzIG1hY3JvIGNvcGllcyBhIHNpbmdsZSBzaW1wbGUgdmFyaWFibGUgZnJvbSB1c2VyIHNwYWNlIHRvIGtlcm5lbAorICogc3BhY2UuICBJdCBzdXBwb3J0cyBzaW1wbGUgdHlwZXMgbGlrZSBjaGFyIGFuZCBpbnQsIGJ1dCBub3QgbGFyZ2VyCisgKiBkYXRhIHR5cGVzIGxpa2Ugc3RydWN0dXJlcyBvciBhcnJheXMuCisgKgorICogQHB0ciBtdXN0IGhhdmUgcG9pbnRlci10by1zaW1wbGUtdmFyaWFibGUgdHlwZSwgYW5kIHRoZSByZXN1bHQgb2YKKyAqIGRlcmVmZXJlbmNpbmcgQHB0ciBtdXN0IGJlIGFzc2lnbmFibGUgdG8gQHggd2l0aG91dCBhIGNhc3QuCisgKgorICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIG9yIC1FRkFVTFQgb24gZXJyb3IuCisgKiBPbiBlcnJvciwgdGhlIHZhcmlhYmxlIEB4IGlzIHNldCB0byB6ZXJvLgorICovCisjZGVmaW5lIGdldF91c2VyKHgscHRyKQkJCQkJCQlcCisoewlpbnQgX19yZXRfZ3U7CQkJCQkJCVwKKwl1bnNpZ25lZCBsb25nIF9fdmFsX2d1OwkJCQkJCVwKKwlfX2Noa191c2VyX3B0cihwdHIpOwkJCQkJCVwKKwlzd2l0Y2goc2l6ZW9mICgqKHB0cikpKSB7CQkJCQlcCisJY2FzZSAxOiAgX19nZXRfdXNlcl94KDEsX19yZXRfZ3UsX192YWxfZ3UscHRyKTsgYnJlYWs7CQlcCisJY2FzZSAyOiAgX19nZXRfdXNlcl94KDIsX19yZXRfZ3UsX192YWxfZ3UscHRyKTsgYnJlYWs7CQlcCisJY2FzZSA0OiAgX19nZXRfdXNlcl94KDQsX19yZXRfZ3UsX192YWxfZ3UscHRyKTsgYnJlYWs7CQlcCisJZGVmYXVsdDogX19nZXRfdXNlcl94KFgsX19yZXRfZ3UsX192YWxfZ3UscHRyKTsgYnJlYWs7CQlcCisJfQkJCQkJCQkJXAorCSh4KSA9IChfX3R5cGVvZl9fKCoocHRyKSkpX192YWxfZ3U7CQkJCVwKKwlfX3JldF9ndTsJCQkJCQkJXAorfSkKKworZXh0ZXJuIHZvaWQgX19wdXRfdXNlcl9iYWQodm9pZCk7CisKKy8qCisgKiBTdHJhbmdlIG1hZ2ljIGNhbGxpbmcgY29udmVudGlvbjogcG9pbnRlciBpbiAlZWN4LAorICogdmFsdWUgaW4gJWVheCg6JWVkeCksIHJldHVybiB2YWx1ZSBpbiAlZWF4LCBubyBjbG9iYmVycy4KKyAqLworZXh0ZXJuIHZvaWQgX19wdXRfdXNlcl8xKHZvaWQpOworZXh0ZXJuIHZvaWQgX19wdXRfdXNlcl8yKHZvaWQpOworZXh0ZXJuIHZvaWQgX19wdXRfdXNlcl80KHZvaWQpOworZXh0ZXJuIHZvaWQgX19wdXRfdXNlcl84KHZvaWQpOworCisjZGVmaW5lIF9fcHV0X3VzZXJfMSh4LCBwdHIpIF9fYXNtX18gX192b2xhdGlsZV9fKCJjYWxsIF9fcHV0X3VzZXJfMSI6Ij1hIiAoX19yZXRfcHUpOiIwIiAoKHR5cGVvZigqKHB0cikpKSh4KSksICJjIiAocHRyKSkKKyNkZWZpbmUgX19wdXRfdXNlcl8yKHgsIHB0cikgX19hc21fXyBfX3ZvbGF0aWxlX18oImNhbGwgX19wdXRfdXNlcl8yIjoiPWEiIChfX3JldF9wdSk6IjAiICgodHlwZW9mKCoocHRyKSkpKHgpKSwgImMiIChwdHIpKQorI2RlZmluZSBfX3B1dF91c2VyXzQoeCwgcHRyKSBfX2FzbV9fIF9fdm9sYXRpbGVfXygiY2FsbCBfX3B1dF91c2VyXzQiOiI9YSIgKF9fcmV0X3B1KToiMCIgKCh0eXBlb2YoKihwdHIpKSkoeCkpLCAiYyIgKHB0cikpCisjZGVmaW5lIF9fcHV0X3VzZXJfOCh4LCBwdHIpIF9fYXNtX18gX192b2xhdGlsZV9fKCJjYWxsIF9fcHV0X3VzZXJfOCI6Ij1hIiAoX19yZXRfcHUpOiJBIiAoKHR5cGVvZigqKHB0cikpKSh4KSksICJjIiAocHRyKSkKKyNkZWZpbmUgX19wdXRfdXNlcl9YKHgsIHB0cikgX19hc21fXyBfX3ZvbGF0aWxlX18oImNhbGwgX19wdXRfdXNlcl9YIjoiPWEiIChfX3JldF9wdSk6ImMiIChwdHIpKQorCisvKioKKyAqIHB1dF91c2VyOiAtIFdyaXRlIGEgc2ltcGxlIHZhbHVlIGludG8gdXNlciBzcGFjZS4KKyAqIEB4OiAgIFZhbHVlIHRvIGNvcHkgdG8gdXNlciBzcGFjZS4KKyAqIEBwdHI6IERlc3RpbmF0aW9uIGFkZHJlc3MsIGluIHVzZXIgc3BhY2UuCisgKgorICogQ29udGV4dDogVXNlciBjb250ZXh0IG9ubHkuICBUaGlzIGZ1bmN0aW9uIG1heSBzbGVlcC4KKyAqCisgKiBUaGlzIG1hY3JvIGNvcGllcyBhIHNpbmdsZSBzaW1wbGUgdmFsdWUgZnJvbSBrZXJuZWwgc3BhY2UgdG8gdXNlcgorICogc3BhY2UuICBJdCBzdXBwb3J0cyBzaW1wbGUgdHlwZXMgbGlrZSBjaGFyIGFuZCBpbnQsIGJ1dCBub3QgbGFyZ2VyCisgKiBkYXRhIHR5cGVzIGxpa2Ugc3RydWN0dXJlcyBvciBhcnJheXMuCisgKgorICogQHB0ciBtdXN0IGhhdmUgcG9pbnRlci10by1zaW1wbGUtdmFyaWFibGUgdHlwZSwgYW5kIEB4IG11c3QgYmUgYXNzaWduYWJsZQorICogdG8gdGhlIHJlc3VsdCBvZiBkZXJlZmVyZW5jaW5nIEBwdHIuCisgKgorICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIG9yIC1FRkFVTFQgb24gZXJyb3IuCisgKi8KKyNpZmRlZiBDT05GSUdfWDg2X1dQX1dPUktTX09LCisKKyNkZWZpbmUgcHV0X3VzZXIoeCxwdHIpCQkJCQkJXAorKHsJaW50IF9fcmV0X3B1OwkJCQkJCVwKKwlfX2Noa191c2VyX3B0cihwdHIpOwkJCQkJXAorCXN3aXRjaChzaXplb2YoKihwdHIpKSkgewkJCQlcCisJY2FzZSAxOiBfX3B1dF91c2VyXzEoeCwgcHRyKTsgYnJlYWs7CQkJXAorCWNhc2UgMjogX19wdXRfdXNlcl8yKHgsIHB0cik7IGJyZWFrOwkJCVwKKwljYXNlIDQ6IF9fcHV0X3VzZXJfNCh4LCBwdHIpOyBicmVhazsJCQlcCisJY2FzZSA4OiBfX3B1dF91c2VyXzgoeCwgcHRyKTsgYnJlYWs7CQkJXAorCWRlZmF1bHQ6X19wdXRfdXNlcl9YKHgsIHB0cik7IGJyZWFrOwkJCVwKKwl9CQkJCQkJCVwKKwlfX3JldF9wdTsJCQkJCQlcCit9KQorCisjZWxzZQorI2RlZmluZSBwdXRfdXNlcih4LHB0cikJCQkJCQlcCisoewkJCQkJCQkJXAorIAlpbnQgX19yZXRfcHU7CQkJCQkJXAorCV9fdHlwZW9mX18oKihwdHIpKSBfX3B1c190bXAgPSB4OwkJCVwKKwlfX3JldF9wdT0wOwkJCQkJCVwKKwlpZih1bmxpa2VseShfX2NvcHlfdG9fdXNlcl9sbChwdHIsICZfX3B1c190bXAsCQlcCisJCQkJc2l6ZW9mKCoocHRyKSkpICE9IDApKQkJXAorIAkJX19yZXRfcHU9LUVGQVVMVDsJCQkJXAorIAlfX3JldF9wdTsJCQkJCQlcCisgfSkKKworCisjZW5kaWYKKworLyoqCisgKiBfX2dldF91c2VyOiAtIEdldCBhIHNpbXBsZSB2YXJpYWJsZSBmcm9tIHVzZXIgc3BhY2UsIHdpdGggbGVzcyBjaGVja2luZy4KKyAqIEB4OiAgIFZhcmlhYmxlIHRvIHN0b3JlIHJlc3VsdC4KKyAqIEBwdHI6IFNvdXJjZSBhZGRyZXNzLCBpbiB1c2VyIHNwYWNlLgorICoKKyAqIENvbnRleHQ6IFVzZXIgY29udGV4dCBvbmx5LiAgVGhpcyBmdW5jdGlvbiBtYXkgc2xlZXAuCisgKgorICogVGhpcyBtYWNybyBjb3BpZXMgYSBzaW5nbGUgc2ltcGxlIHZhcmlhYmxlIGZyb20gdXNlciBzcGFjZSB0byBrZXJuZWwKKyAqIHNwYWNlLiAgSXQgc3VwcG9ydHMgc2ltcGxlIHR5cGVzIGxpa2UgY2hhciBhbmQgaW50LCBidXQgbm90IGxhcmdlcgorICogZGF0YSB0eXBlcyBsaWtlIHN0cnVjdHVyZXMgb3IgYXJyYXlzLgorICoKKyAqIEBwdHIgbXVzdCBoYXZlIHBvaW50ZXItdG8tc2ltcGxlLXZhcmlhYmxlIHR5cGUsIGFuZCB0aGUgcmVzdWx0IG9mCisgKiBkZXJlZmVyZW5jaW5nIEBwdHIgbXVzdCBiZSBhc3NpZ25hYmxlIHRvIEB4IHdpdGhvdXQgYSBjYXN0LgorICoKKyAqIENhbGxlciBtdXN0IGNoZWNrIHRoZSBwb2ludGVyIHdpdGggYWNjZXNzX29rKCkgYmVmb3JlIGNhbGxpbmcgdGhpcworICogZnVuY3Rpb24uCisgKgorICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIG9yIC1FRkFVTFQgb24gZXJyb3IuCisgKiBPbiBlcnJvciwgdGhlIHZhcmlhYmxlIEB4IGlzIHNldCB0byB6ZXJvLgorICovCisjZGVmaW5lIF9fZ2V0X3VzZXIoeCxwdHIpIFwKKyAgX19nZXRfdXNlcl9ub2NoZWNrKCh4KSwocHRyKSxzaXplb2YoKihwdHIpKSkKKworCisvKioKKyAqIF9fcHV0X3VzZXI6IC0gV3JpdGUgYSBzaW1wbGUgdmFsdWUgaW50byB1c2VyIHNwYWNlLCB3aXRoIGxlc3MgY2hlY2tpbmcuCisgKiBAeDogICBWYWx1ZSB0byBjb3B5IHRvIHVzZXIgc3BhY2UuCisgKiBAcHRyOiBEZXN0aW5hdGlvbiBhZGRyZXNzLCBpbiB1c2VyIHNwYWNlLgorICoKKyAqIENvbnRleHQ6IFVzZXIgY29udGV4dCBvbmx5LiAgVGhpcyBmdW5jdGlvbiBtYXkgc2xlZXAuCisgKgorICogVGhpcyBtYWNybyBjb3BpZXMgYSBzaW5nbGUgc2ltcGxlIHZhbHVlIGZyb20ga2VybmVsIHNwYWNlIHRvIHVzZXIKKyAqIHNwYWNlLiAgSXQgc3VwcG9ydHMgc2ltcGxlIHR5cGVzIGxpa2UgY2hhciBhbmQgaW50LCBidXQgbm90IGxhcmdlcgorICogZGF0YSB0eXBlcyBsaWtlIHN0cnVjdHVyZXMgb3IgYXJyYXlzLgorICoKKyAqIEBwdHIgbXVzdCBoYXZlIHBvaW50ZXItdG8tc2ltcGxlLXZhcmlhYmxlIHR5cGUsIGFuZCBAeCBtdXN0IGJlIGFzc2lnbmFibGUKKyAqIHRvIHRoZSByZXN1bHQgb2YgZGVyZWZlcmVuY2luZyBAcHRyLgorICoKKyAqIENhbGxlciBtdXN0IGNoZWNrIHRoZSBwb2ludGVyIHdpdGggYWNjZXNzX29rKCkgYmVmb3JlIGNhbGxpbmcgdGhpcworICogZnVuY3Rpb24uCisgKgorICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIG9yIC1FRkFVTFQgb24gZXJyb3IuCisgKi8KKyNkZWZpbmUgX19wdXRfdXNlcih4LHB0cikgXAorICBfX3B1dF91c2VyX25vY2hlY2soKF9fdHlwZW9mX18oKihwdHIpKSkoeCksKHB0ciksc2l6ZW9mKCoocHRyKSkpCisKKyNkZWZpbmUgX19wdXRfdXNlcl9ub2NoZWNrKHgscHRyLHNpemUpCQkJCVwKKyh7CQkJCQkJCQlcCisJbG9uZyBfX3B1X2VycjsJCQkJCQlcCisJX19wdXRfdXNlcl9zaXplKCh4KSwocHRyKSwoc2l6ZSksX19wdV9lcnIsLUVGQVVMVCk7CVwKKwlfX3B1X2VycjsJCQkJCQlcCit9KQorCisKKyNkZWZpbmUgX19wdXRfdXNlcl91NjQoeCwgYWRkciwgZXJyKQkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQlcCisJCSIxOgltb3ZsICUlZWF4LDAoJTIpXG4iCQkJXAorCQkiMjoJbW92bCAlJWVkeCw0KCUyKVxuIgkJCVwKKwkJIjM6XG4iCQkJCQkJXAorCQkiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIgkJCVwKKwkJIjQ6CW1vdmwgJTMsJTBcbiIJCQkJXAorCQkiCWptcCAzYlxuIgkJCQlcCisJCSIucHJldmlvdXNcbiIJCQkJCVwKKwkJIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIJCQlcCisJCSIJLmFsaWduIDRcbiIJCQkJXAorCQkiCS5sb25nIDFiLDRiXG4iCQkJCVwKKwkJIgkubG9uZyAyYiw0YlxuIgkJCQlcCisJCSIucHJldmlvdXMiCQkJCQlcCisJCTogIj1yIihlcnIpCQkJCQlcCisJCTogIkEiICh4KSwgInIiIChhZGRyKSwgImkiKC1FRkFVTFQpLCAiMCIoZXJyKSkKKworI2lmZGVmIENPTkZJR19YODZfV1BfV09SS1NfT0sKKworI2RlZmluZSBfX3B1dF91c2VyX3NpemUoeCxwdHIsc2l6ZSxyZXR2YWwsZXJycmV0KQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJcmV0dmFsID0gMDsJCQkJCQkJXAorCV9fY2hrX3VzZXJfcHRyKHB0cik7CQkJCQkJXAorCXN3aXRjaCAoc2l6ZSkgewkJCQkJCQlcCisJY2FzZSAxOiBfX3B1dF91c2VyX2FzbSh4LHB0cixyZXR2YWwsImIiLCJiIiwiaXEiLGVycnJldCk7YnJlYWs7CVwKKwljYXNlIDI6IF9fcHV0X3VzZXJfYXNtKHgscHRyLHJldHZhbCwidyIsInciLCJpciIsZXJycmV0KTticmVhazsgXAorCWNhc2UgNDogX19wdXRfdXNlcl9hc20oeCxwdHIscmV0dmFsLCJsIiwiIiwiaXIiLGVycnJldCk7IGJyZWFrOwlcCisJY2FzZSA4OiBfX3B1dF91c2VyX3U2NCgoX190eXBlb2ZfXygqcHRyKSkoeCkscHRyLHJldHZhbCk7IGJyZWFrO1wKKwkgIGRlZmF1bHQ6IF9fcHV0X3VzZXJfYmFkKCk7CQkJCQlcCisJfQkJCQkJCQkJXAorfSB3aGlsZSAoMCkKKworI2Vsc2UKKworI2RlZmluZSBfX3B1dF91c2VyX3NpemUoeCxwdHIsc2l6ZSxyZXR2YWwsZXJycmV0KQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJX190eXBlb2ZfXygqKHB0cikpIF9fcHVzX3RtcCA9IHg7CQkJCVwKKwlyZXR2YWwgPSAwOwkJCQkJCQlcCisJCQkJCQkJCQlcCisJaWYodW5saWtlbHkoX19jb3B5X3RvX3VzZXJfbGwocHRyLCAmX19wdXNfdG1wLCBzaXplKSAhPSAwKSkJXAorCQlyZXR2YWwgPSBlcnJyZXQ7CQkJCQlcCit9IHdoaWxlICgwKQorCisjZW5kaWYKK3N0cnVjdCBfX2xhcmdlX3N0cnVjdCB7IHVuc2lnbmVkIGxvbmcgYnVmWzEwMF07IH07CisjZGVmaW5lIF9fbSh4KSAoKihzdHJ1Y3QgX19sYXJnZV9zdHJ1Y3QgX191c2VyICopKHgpKQorCisvKgorICogVGVsbCBnY2Mgd2UgcmVhZCBmcm9tIG1lbW9yeSBpbnN0ZWFkIG9mIHdyaXRpbmc6IHRoaXMgaXMgYmVjYXVzZQorICogd2UgZG8gbm90IHdyaXRlIHRvIGFueSBtZW1vcnkgZ2NjIGtub3dzIGFib3V0LCBzbyB0aGVyZSBhcmUgbm8KKyAqIGFsaWFzaW5nIGlzc3Vlcy4KKyAqLworI2RlZmluZSBfX3B1dF91c2VyX2FzbSh4LCBhZGRyLCBlcnIsIGl0eXBlLCBydHlwZSwgbHR5cGUsIGVycnJldCkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCVwKKwkJIjE6CW1vdiJpdHlwZSIgJSJydHlwZSIxLCUyXG4iCQkJXAorCQkiMjpcbiIJCQkJCQkJXAorCQkiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIgkJCQlcCisJCSIzOgltb3ZsICUzLCUwXG4iCQkJCQlcCisJCSIJam1wIDJiXG4iCQkJCQlcCisJCSIucHJldmlvdXNcbiIJCQkJCQlcCisJCSIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCQkJCVwKKwkJIgkuYWxpZ24gNFxuIgkJCQkJXAorCQkiCS5sb25nIDFiLDNiXG4iCQkJCQlcCisJCSIucHJldmlvdXMiCQkJCQkJXAorCQk6ICI9ciIoZXJyKQkJCQkJCVwKKwkJOiBsdHlwZSAoeCksICJtIihfX20oYWRkcikpLCAiaSIoZXJycmV0KSwgIjAiKGVycikpCisKKworI2RlZmluZSBfX2dldF91c2VyX25vY2hlY2soeCxwdHIsc2l6ZSkJCQkJXAorKHsJCQkJCQkJCVwKKwlsb25nIF9fZ3VfZXJyOwkJCQkJCVwKKwl1bnNpZ25lZCBsb25nIF9fZ3VfdmFsOwkJCQkJXAorCV9fZ2V0X3VzZXJfc2l6ZShfX2d1X3ZhbCwocHRyKSwoc2l6ZSksX19ndV9lcnIsLUVGQVVMVCk7XAorCSh4KSA9IChfX3R5cGVvZl9fKCoocHRyKSkpX19ndV92YWw7CQkJXAorCV9fZ3VfZXJyOwkJCQkJCVwKK30pCisKK2V4dGVybiBsb25nIF9fZ2V0X3VzZXJfYmFkKHZvaWQpOworCisjZGVmaW5lIF9fZ2V0X3VzZXJfc2l6ZSh4LHB0cixzaXplLHJldHZhbCxlcnJyZXQpCQkJXAorZG8gewkJCQkJCQkJCVwKKwlyZXR2YWwgPSAwOwkJCQkJCQlcCisJX19jaGtfdXNlcl9wdHIocHRyKTsJCQkJCQlcCisJc3dpdGNoIChzaXplKSB7CQkJCQkJCVwKKwljYXNlIDE6IF9fZ2V0X3VzZXJfYXNtKHgscHRyLHJldHZhbCwiYiIsImIiLCI9cSIsZXJycmV0KTticmVhazsJXAorCWNhc2UgMjogX19nZXRfdXNlcl9hc20oeCxwdHIscmV0dmFsLCJ3IiwidyIsIj1yIixlcnJyZXQpO2JyZWFrOwlcCisJY2FzZSA0OiBfX2dldF91c2VyX2FzbSh4LHB0cixyZXR2YWwsImwiLCIiLCI9ciIsZXJycmV0KTticmVhazsJXAorCWRlZmF1bHQ6ICh4KSA9IF9fZ2V0X3VzZXJfYmFkKCk7CQkJCVwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIF9fZ2V0X3VzZXJfYXNtKHgsIGFkZHIsIGVyciwgaXR5cGUsIHJ0eXBlLCBsdHlwZSwgZXJycmV0KQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAorCQkiMToJbW92Iml0eXBlIiAlMiwlInJ0eXBlIjFcbiIJCQlcCisJCSIyOlxuIgkJCQkJCQlcCisJCSIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iCQkJCVwKKwkJIjM6CW1vdmwgJTMsJTBcbiIJCQkJCVwKKwkJIgl4b3IiaXR5cGUiICUicnR5cGUiMSwlInJ0eXBlIjFcbiIJCVwKKwkJIglqbXAgMmJcbiIJCQkJCVwKKwkJIi5wcmV2aW91c1xuIgkJCQkJCVwKKwkJIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIJCQkJXAorCQkiCS5hbGlnbiA0XG4iCQkJCQlcCisJCSIJLmxvbmcgMWIsM2JcbiIJCQkJCVwKKwkJIi5wcmV2aW91cyIJCQkJCQlcCisJCTogIj1yIihlcnIpLCBsdHlwZSAoeCkJCQkJCVwKKwkJOiAibSIoX19tKGFkZHIpKSwgImkiKGVycnJldCksICIwIihlcnIpKQorCisKK3Vuc2lnbmVkIGxvbmcgX19tdXN0X2NoZWNrIF9fY29weV90b191c2VyX2xsKHZvaWQgX191c2VyICp0bywKKwkJCQljb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pOwordW5zaWduZWQgbG9uZyBfX211c3RfY2hlY2sgX19jb3B5X2Zyb21fdXNlcl9sbCh2b2lkICp0bywKKwkJCQljb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKTsKKworLyoKKyAqIEhlcmUgd2Ugc3BlY2lhbC1jYXNlIDEsIDIgYW5kIDQtYnl0ZSBjb3B5XypfdXNlciBpbnZvY2F0aW9ucy4gIE9uIGEgZmF1bHQKKyAqIHdlIHJldHVybiB0aGUgaW5pdGlhbCByZXF1ZXN0IHNpemUgKDEsIDIgb3IgNCksIGFzIGNvcHlfKl91c2VyIHNob3VsZCBkby4KKyAqIElmIGEgc3RvcmUgY3Jvc3NlcyBhIHBhZ2UgYm91bmRhcnkgYW5kIGdldHMgYSBmYXVsdCwgdGhlIHg4NiB3aWxsIG5vdCB3cml0ZQorICogYW55dGhpbmcsIHNvIHRoaXMgaXMgYWNjdXJhdGUuCisgKi8KKworLyoqCisgKiBfX2NvcHlfdG9fdXNlcjogLSBDb3B5IGEgYmxvY2sgb2YgZGF0YSBpbnRvIHVzZXIgc3BhY2UsIHdpdGggbGVzcyBjaGVja2luZy4KKyAqIEB0bzogICBEZXN0aW5hdGlvbiBhZGRyZXNzLCBpbiB1c2VyIHNwYWNlLgorICogQGZyb206IFNvdXJjZSBhZGRyZXNzLCBpbiBrZXJuZWwgc3BhY2UuCisgKiBAbjogICAgTnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkuCisgKgorICogQ29udGV4dDogVXNlciBjb250ZXh0IG9ubHkuICBUaGlzIGZ1bmN0aW9uIG1heSBzbGVlcC4KKyAqCisgKiBDb3B5IGRhdGEgZnJvbSBrZXJuZWwgc3BhY2UgdG8gdXNlciBzcGFjZS4gIENhbGxlciBtdXN0IGNoZWNrCisgKiB0aGUgc3BlY2lmaWVkIGJsb2NrIHdpdGggYWNjZXNzX29rKCkgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKyAqCisgKiBSZXR1cm5zIG51bWJlciBvZiBieXRlcyB0aGF0IGNvdWxkIG5vdCBiZSBjb3BpZWQuCisgKiBPbiBzdWNjZXNzLCB0aGlzIHdpbGwgYmUgemVyby4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fbXVzdF9jaGVjaworX19jb3B5X3RvX3VzZXJfaW5hdG9taWModm9pZCBfX3VzZXIgKnRvLCBjb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pCit7CisJaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKG4pKSB7CisJCXVuc2lnbmVkIGxvbmcgcmV0OworCisJCXN3aXRjaCAobikgeworCQljYXNlIDE6CisJCQlfX3B1dF91c2VyX3NpemUoKih1OCAqKWZyb20sICh1OCBfX3VzZXIgKil0bywgMSwgcmV0LCAxKTsKKwkJCXJldHVybiByZXQ7CisJCWNhc2UgMjoKKwkJCV9fcHV0X3VzZXJfc2l6ZSgqKHUxNiAqKWZyb20sICh1MTYgX191c2VyICopdG8sIDIsIHJldCwgMik7CisJCQlyZXR1cm4gcmV0OworCQljYXNlIDQ6CisJCQlfX3B1dF91c2VyX3NpemUoKih1MzIgKilmcm9tLCAodTMyIF9fdXNlciAqKXRvLCA0LCByZXQsIDQpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKwlyZXR1cm4gX19jb3B5X3RvX3VzZXJfbGwodG8sIGZyb20sIG4pOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19tdXN0X2NoZWNrCitfX2NvcHlfdG9fdXNlcih2b2lkIF9fdXNlciAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxvbmcgbikKK3sKKyAgICAgICBtaWdodF9zbGVlcCgpOworICAgICAgIHJldHVybiBfX2NvcHlfdG9fdXNlcl9pbmF0b21pYyh0bywgZnJvbSwgbik7Cit9CisKKy8qKgorICogX19jb3B5X2Zyb21fdXNlcjogLSBDb3B5IGEgYmxvY2sgb2YgZGF0YSBmcm9tIHVzZXIgc3BhY2UsIHdpdGggbGVzcyBjaGVja2luZy4KKyAqIEB0bzogICBEZXN0aW5hdGlvbiBhZGRyZXNzLCBpbiBrZXJuZWwgc3BhY2UuCisgKiBAZnJvbTogU291cmNlIGFkZHJlc3MsIGluIHVzZXIgc3BhY2UuCisgKiBAbjogICAgTnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkuCisgKgorICogQ29udGV4dDogVXNlciBjb250ZXh0IG9ubHkuICBUaGlzIGZ1bmN0aW9uIG1heSBzbGVlcC4KKyAqCisgKiBDb3B5IGRhdGEgZnJvbSB1c2VyIHNwYWNlIHRvIGtlcm5lbCBzcGFjZS4gIENhbGxlciBtdXN0IGNoZWNrCisgKiB0aGUgc3BlY2lmaWVkIGJsb2NrIHdpdGggYWNjZXNzX29rKCkgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKyAqCisgKiBSZXR1cm5zIG51bWJlciBvZiBieXRlcyB0aGF0IGNvdWxkIG5vdCBiZSBjb3BpZWQuCisgKiBPbiBzdWNjZXNzLCB0aGlzIHdpbGwgYmUgemVyby4KKyAqCisgKiBJZiBzb21lIGRhdGEgY291bGQgbm90IGJlIGNvcGllZCwgdGhpcyBmdW5jdGlvbiB3aWxsIHBhZCB0aGUgY29waWVkCisgKiBkYXRhIHRvIHRoZSByZXF1ZXN0ZWQgc2l6ZSB1c2luZyB6ZXJvIGJ5dGVzLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK19fY29weV9mcm9tX3VzZXJfaW5hdG9taWModm9pZCAqdG8sIGNvbnN0IHZvaWQgX191c2VyICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pCit7CisJaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKG4pKSB7CisJCXVuc2lnbmVkIGxvbmcgcmV0OworCisJCXN3aXRjaCAobikgeworCQljYXNlIDE6CisJCQlfX2dldF91c2VyX3NpemUoKih1OCAqKXRvLCBmcm9tLCAxLCByZXQsIDEpOworCQkJcmV0dXJuIHJldDsKKwkJY2FzZSAyOgorCQkJX19nZXRfdXNlcl9zaXplKCoodTE2ICopdG8sIGZyb20sIDIsIHJldCwgMik7CisJCQlyZXR1cm4gcmV0OworCQljYXNlIDQ6CisJCQlfX2dldF91c2VyX3NpemUoKih1MzIgKil0bywgZnJvbSwgNCwgcmV0LCA0KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisJcmV0dXJuIF9fY29weV9mcm9tX3VzZXJfbGwodG8sIGZyb20sIG4pOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK19fY29weV9mcm9tX3VzZXIodm9pZCAqdG8sIGNvbnN0IHZvaWQgX191c2VyICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pCit7CisgICAgICAgbWlnaHRfc2xlZXAoKTsKKyAgICAgICByZXR1cm4gX19jb3B5X2Zyb21fdXNlcl9pbmF0b21pYyh0bywgZnJvbSwgbik7Cit9Cit1bnNpZ25lZCBsb25nIF9fbXVzdF9jaGVjayBjb3B5X3RvX3VzZXIodm9pZCBfX3VzZXIgKnRvLAorCQkJCWNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxvbmcgbik7Cit1bnNpZ25lZCBsb25nIF9fbXVzdF9jaGVjayBjb3B5X2Zyb21fdXNlcih2b2lkICp0bywKKwkJCQljb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKTsKK2xvbmcgX19tdXN0X2NoZWNrIHN0cm5jcHlfZnJvbV91c2VyKGNoYXIgKmRzdCwgY29uc3QgY2hhciBfX3VzZXIgKnNyYywKKwkJCQlsb25nIGNvdW50KTsKK2xvbmcgX19tdXN0X2NoZWNrIF9fc3RybmNweV9mcm9tX3VzZXIoY2hhciAqZHN0LAorCQkJCWNvbnN0IGNoYXIgX191c2VyICpzcmMsIGxvbmcgY291bnQpOworCisvKioKKyAqIHN0cmxlbl91c2VyOiAtIEdldCB0aGUgc2l6ZSBvZiBhIHN0cmluZyBpbiB1c2VyIHNwYWNlLgorICogQHN0cjogVGhlIHN0cmluZyB0byBtZWFzdXJlLgorICoKKyAqIENvbnRleHQ6IFVzZXIgY29udGV4dCBvbmx5LiAgVGhpcyBmdW5jdGlvbiBtYXkgc2xlZXAuCisgKgorICogR2V0IHRoZSBzaXplIG9mIGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIGluIHVzZXIgc3BhY2UuCisgKgorICogUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgc3RyaW5nIElOQ0xVRElORyB0aGUgdGVybWluYXRpbmcgTlVMLgorICogT24gZXhjZXB0aW9uLCByZXR1cm5zIDAuCisgKgorICogSWYgdGhlcmUgaXMgYSBsaW1pdCBvbiB0aGUgbGVuZ3RoIG9mIGEgdmFsaWQgc3RyaW5nLCB5b3UgbWF5IHdpc2ggdG8KKyAqIGNvbnNpZGVyIHVzaW5nIHN0cm5sZW5fdXNlcigpIGluc3RlYWQuCisgKi8KKyNkZWZpbmUgc3RybGVuX3VzZXIoc3RyKSBzdHJubGVuX3VzZXIoc3RyLCB+MFVMID4+IDEpCisKK2xvbmcgc3Rybmxlbl91c2VyKGNvbnN0IGNoYXIgX191c2VyICpzdHIsIGxvbmcgbik7Cit1bnNpZ25lZCBsb25nIF9fbXVzdF9jaGVjayBjbGVhcl91c2VyKHZvaWQgX191c2VyICptZW0sIHVuc2lnbmVkIGxvbmcgbGVuKTsKK3Vuc2lnbmVkIGxvbmcgX19tdXN0X2NoZWNrIF9fY2xlYXJfdXNlcih2b2lkIF9fdXNlciAqbWVtLCB1bnNpZ25lZCBsb25nIGxlbik7CisKKyNlbmRpZiAvKiBfX2kzODZfVUFDQ0VTU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3Vjb250ZXh0LmggYi9pbmNsdWRlL2FzbS1pMzg2L3Vjb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBkYjM2OQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvdWNvbnRleHQuaApAQCAtMCwwICsxLDEyIEBACisjaWZuZGVmIF9BU01pMzg2X1VDT05URVhUX0gKKyNkZWZpbmUgX0FTTWkzODZfVUNPTlRFWFRfSAorCitzdHJ1Y3QgdWNvbnRleHQgeworCXVuc2lnbmVkIGxvbmcJICB1Y19mbGFnczsKKwlzdHJ1Y3QgdWNvbnRleHQgICp1Y19saW5rOworCXN0YWNrX3QJCSAgdWNfc3RhY2s7CisJc3RydWN0IHNpZ2NvbnRleHQgdWNfbWNvbnRleHQ7CisJc2lnc2V0X3QJICB1Y19zaWdtYXNrOwkvKiBtYXNrIGxhc3QgZm9yIGV4dGVuc2liaWxpdHkgKi8KK307CisKKyNlbmRpZiAvKiAhX0FTTWkzODZfVUNPTlRFWFRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni91bmFsaWduZWQuaCBiL2luY2x1ZGUvYXNtLWkzODYvdW5hbGlnbmVkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FjZDc5NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvdW5hbGlnbmVkLmgKQEAgLTAsMCArMSwzNyBAQAorI2lmbmRlZiBfX0kzODZfVU5BTElHTkVEX0gKKyNkZWZpbmUgX19JMzg2X1VOQUxJR05FRF9ICisKKy8qCisgKiBUaGUgaTM4NiBjYW4gZG8gdW5hbGlnbmVkIGFjY2Vzc2VzIGl0c2VsZi4gCisgKgorICogVGhlIHN0cmFuZ2UgbWFjcm9zIGFyZSB0aGVyZSB0byBtYWtlIHN1cmUgdGhlc2UgY2FuJ3QKKyAqIGJlIG1pc3VzZWQgaW4gYSB3YXkgdGhhdCBtYWtlcyB0aGVtIG5vdCB3b3JrIG9uIG90aGVyCisgKiBhcmNoaXRlY3R1cmVzIHdoZXJlIHVuYWxpZ25lZCBhY2Nlc3NlcyBhcmVuJ3QgYXMgc2ltcGxlLgorICovCisKKy8qKgorICogZ2V0X3VuYWxpZ25lZCAtIGdldCB2YWx1ZSBmcm9tIHBvc3NpYmx5IG1pcy1hbGlnbmVkIGxvY2F0aW9uCisgKiBAcHRyOiBwb2ludGVyIHRvIHZhbHVlCisgKgorICogVGhpcyBtYWNybyBzaG91bGQgYmUgdXNlZCBmb3IgYWNjZXNzaW5nIHZhbHVlcyBsYXJnZXIgaW4gc2l6ZSB0aGFuIAorICogc2luZ2xlIGJ5dGVzIGF0IGxvY2F0aW9ucyB0aGF0IGFyZSBleHBlY3RlZCB0byBiZSBpbXByb3Blcmx5IGFsaWduZWQsIAorICogZS5nLiByZXRyaWV2aW5nIGEgdTE2IHZhbHVlIGZyb20gYSBsb2NhdGlvbiBub3QgdTE2LWFsaWduZWQuCisgKgorICogTm90ZSB0aGF0IHVuYWxpZ25lZCBhY2Nlc3NlcyBjYW4gYmUgdmVyeSBleHBlbnNpdmUgb24gc29tZSBhcmNoaXRlY3R1cmVzLgorICovCisjZGVmaW5lIGdldF91bmFsaWduZWQocHRyKSAoKihwdHIpKQorCisvKioKKyAqIHB1dF91bmFsaWduZWQgLSBwdXQgdmFsdWUgdG8gYSBwb3NzaWJseSBtaXMtYWxpZ25lZCBsb2NhdGlvbgorICogQHZhbDogdmFsdWUgdG8gcGxhY2UKKyAqIEBwdHI6IHBvaW50ZXIgdG8gbG9jYXRpb24KKyAqCisgKiBUaGlzIG1hY3JvIHNob3VsZCBiZSB1c2VkIGZvciBwbGFjaW5nIHZhbHVlcyBsYXJnZXIgaW4gc2l6ZSB0aGFuIAorICogc2luZ2xlIGJ5dGVzIGF0IGxvY2F0aW9ucyB0aGF0IGFyZSBleHBlY3RlZCB0byBiZSBpbXByb3Blcmx5IGFsaWduZWQsIAorICogZS5nLiB3cml0aW5nIGEgdTE2IHZhbHVlIHRvIGEgbG9jYXRpb24gbm90IHUxNi1hbGlnbmVkLgorICoKKyAqIE5vdGUgdGhhdCB1bmFsaWduZWQgYWNjZXNzZXMgY2FuIGJlIHZlcnkgZXhwZW5zaXZlIG9uIHNvbWUgYXJjaGl0ZWN0dXJlcy4KKyAqLworI2RlZmluZSBwdXRfdW5hbGlnbmVkKHZhbCwgcHRyKSAoKHZvaWQpKCAqKHB0cikgPSAodmFsKSApKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1pMzg2L3VuaXN0ZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxYmNjMWIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3VuaXN0ZC5oCkBAIC0wLDAgKzEsNDY2IEBACisjaWZuZGVmIF9BU01fSTM4Nl9VTklTVERfSF8KKyNkZWZpbmUgX0FTTV9JMzg2X1VOSVNURF9IXworCisvKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBzeXN0ZW0gY2FsbCBudW1iZXJzLgorICovCisKKyNkZWZpbmUgX19OUl9yZXN0YXJ0X3N5c2NhbGwgICAgICAwCisjZGVmaW5lIF9fTlJfZXhpdAkJICAxCisjZGVmaW5lIF9fTlJfZm9yawkJICAyCisjZGVmaW5lIF9fTlJfcmVhZAkJICAzCisjZGVmaW5lIF9fTlJfd3JpdGUJCSAgNAorI2RlZmluZSBfX05SX29wZW4JCSAgNQorI2RlZmluZSBfX05SX2Nsb3NlCQkgIDYKKyNkZWZpbmUgX19OUl93YWl0cGlkCQkgIDcKKyNkZWZpbmUgX19OUl9jcmVhdAkJICA4CisjZGVmaW5lIF9fTlJfbGluawkJICA5CisjZGVmaW5lIF9fTlJfdW5saW5rCQkgMTAKKyNkZWZpbmUgX19OUl9leGVjdmUJCSAxMQorI2RlZmluZSBfX05SX2NoZGlyCQkgMTIKKyNkZWZpbmUgX19OUl90aW1lCQkgMTMKKyNkZWZpbmUgX19OUl9ta25vZAkJIDE0CisjZGVmaW5lIF9fTlJfY2htb2QJCSAxNQorI2RlZmluZSBfX05SX2xjaG93bgkJIDE2CisjZGVmaW5lIF9fTlJfYnJlYWsJCSAxNworI2RlZmluZSBfX05SX29sZHN0YXQJCSAxOAorI2RlZmluZSBfX05SX2xzZWVrCQkgMTkKKyNkZWZpbmUgX19OUl9nZXRwaWQJCSAyMAorI2RlZmluZSBfX05SX21vdW50CQkgMjEKKyNkZWZpbmUgX19OUl91bW91bnQJCSAyMgorI2RlZmluZSBfX05SX3NldHVpZAkJIDIzCisjZGVmaW5lIF9fTlJfZ2V0dWlkCQkgMjQKKyNkZWZpbmUgX19OUl9zdGltZQkJIDI1CisjZGVmaW5lIF9fTlJfcHRyYWNlCQkgMjYKKyNkZWZpbmUgX19OUl9hbGFybQkJIDI3CisjZGVmaW5lIF9fTlJfb2xkZnN0YXQJCSAyOAorI2RlZmluZSBfX05SX3BhdXNlCQkgMjkKKyNkZWZpbmUgX19OUl91dGltZQkJIDMwCisjZGVmaW5lIF9fTlJfc3R0eQkJIDMxCisjZGVmaW5lIF9fTlJfZ3R0eQkJIDMyCisjZGVmaW5lIF9fTlJfYWNjZXNzCQkgMzMKKyNkZWZpbmUgX19OUl9uaWNlCQkgMzQKKyNkZWZpbmUgX19OUl9mdGltZQkJIDM1CisjZGVmaW5lIF9fTlJfc3luYwkJIDM2CisjZGVmaW5lIF9fTlJfa2lsbAkJIDM3CisjZGVmaW5lIF9fTlJfcmVuYW1lCQkgMzgKKyNkZWZpbmUgX19OUl9ta2RpcgkJIDM5CisjZGVmaW5lIF9fTlJfcm1kaXIJCSA0MAorI2RlZmluZSBfX05SX2R1cAkJIDQxCisjZGVmaW5lIF9fTlJfcGlwZQkJIDQyCisjZGVmaW5lIF9fTlJfdGltZXMJCSA0MworI2RlZmluZSBfX05SX3Byb2YJCSA0NAorI2RlZmluZSBfX05SX2JyawkJIDQ1CisjZGVmaW5lIF9fTlJfc2V0Z2lkCQkgNDYKKyNkZWZpbmUgX19OUl9nZXRnaWQJCSA0NworI2RlZmluZSBfX05SX3NpZ25hbAkJIDQ4CisjZGVmaW5lIF9fTlJfZ2V0ZXVpZAkJIDQ5CisjZGVmaW5lIF9fTlJfZ2V0ZWdpZAkJIDUwCisjZGVmaW5lIF9fTlJfYWNjdAkJIDUxCisjZGVmaW5lIF9fTlJfdW1vdW50MgkJIDUyCisjZGVmaW5lIF9fTlJfbG9jawkJIDUzCisjZGVmaW5lIF9fTlJfaW9jdGwJCSA1NAorI2RlZmluZSBfX05SX2ZjbnRsCQkgNTUKKyNkZWZpbmUgX19OUl9tcHgJCSA1NgorI2RlZmluZSBfX05SX3NldHBnaWQJCSA1NworI2RlZmluZSBfX05SX3VsaW1pdAkJIDU4CisjZGVmaW5lIF9fTlJfb2xkb2xkdW5hbWUJIDU5CisjZGVmaW5lIF9fTlJfdW1hc2sJCSA2MAorI2RlZmluZSBfX05SX2Nocm9vdAkJIDYxCisjZGVmaW5lIF9fTlJfdXN0YXQJCSA2MgorI2RlZmluZSBfX05SX2R1cDIJCSA2MworI2RlZmluZSBfX05SX2dldHBwaWQJCSA2NAorI2RlZmluZSBfX05SX2dldHBncnAJCSA2NQorI2RlZmluZSBfX05SX3NldHNpZAkJIDY2CisjZGVmaW5lIF9fTlJfc2lnYWN0aW9uCQkgNjcKKyNkZWZpbmUgX19OUl9zZ2V0bWFzawkJIDY4CisjZGVmaW5lIF9fTlJfc3NldG1hc2sJCSA2OQorI2RlZmluZSBfX05SX3NldHJldWlkCQkgNzAKKyNkZWZpbmUgX19OUl9zZXRyZWdpZAkJIDcxCisjZGVmaW5lIF9fTlJfc2lnc3VzcGVuZAkJIDcyCisjZGVmaW5lIF9fTlJfc2lncGVuZGluZwkJIDczCisjZGVmaW5lIF9fTlJfc2V0aG9zdG5hbWUJIDc0CisjZGVmaW5lIF9fTlJfc2V0cmxpbWl0CQkgNzUKKyNkZWZpbmUgX19OUl9nZXRybGltaXQJCSA3NgkvKiBCYWNrIGNvbXBhdGlibGUgMkdpZyBsaW1pdGVkIHJsaW1pdCAqLworI2RlZmluZSBfX05SX2dldHJ1c2FnZQkJIDc3CisjZGVmaW5lIF9fTlJfZ2V0dGltZW9mZGF5CSA3OAorI2RlZmluZSBfX05SX3NldHRpbWVvZmRheQkgNzkKKyNkZWZpbmUgX19OUl9nZXRncm91cHMJCSA4MAorI2RlZmluZSBfX05SX3NldGdyb3VwcwkJIDgxCisjZGVmaW5lIF9fTlJfc2VsZWN0CQkgODIKKyNkZWZpbmUgX19OUl9zeW1saW5rCQkgODMKKyNkZWZpbmUgX19OUl9vbGRsc3RhdAkJIDg0CisjZGVmaW5lIF9fTlJfcmVhZGxpbmsJCSA4NQorI2RlZmluZSBfX05SX3VzZWxpYgkJIDg2CisjZGVmaW5lIF9fTlJfc3dhcG9uCQkgODcKKyNkZWZpbmUgX19OUl9yZWJvb3QJCSA4OAorI2RlZmluZSBfX05SX3JlYWRkaXIJCSA4OQorI2RlZmluZSBfX05SX21tYXAJCSA5MAorI2RlZmluZSBfX05SX211bm1hcAkJIDkxCisjZGVmaW5lIF9fTlJfdHJ1bmNhdGUJCSA5MgorI2RlZmluZSBfX05SX2Z0cnVuY2F0ZQkJIDkzCisjZGVmaW5lIF9fTlJfZmNobW9kCQkgOTQKKyNkZWZpbmUgX19OUl9mY2hvd24JCSA5NQorI2RlZmluZSBfX05SX2dldHByaW9yaXR5CSA5NgorI2RlZmluZSBfX05SX3NldHByaW9yaXR5CSA5NworI2RlZmluZSBfX05SX3Byb2ZpbAkJIDk4CisjZGVmaW5lIF9fTlJfc3RhdGZzCQkgOTkKKyNkZWZpbmUgX19OUl9mc3RhdGZzCQkxMDAKKyNkZWZpbmUgX19OUl9pb3Blcm0JCTEwMQorI2RlZmluZSBfX05SX3NvY2tldGNhbGwJCTEwMgorI2RlZmluZSBfX05SX3N5c2xvZwkJMTAzCisjZGVmaW5lIF9fTlJfc2V0aXRpbWVyCQkxMDQKKyNkZWZpbmUgX19OUl9nZXRpdGltZXIJCTEwNQorI2RlZmluZSBfX05SX3N0YXQJCTEwNgorI2RlZmluZSBfX05SX2xzdGF0CQkxMDcKKyNkZWZpbmUgX19OUl9mc3RhdAkJMTA4CisjZGVmaW5lIF9fTlJfb2xkdW5hbWUJCTEwOQorI2RlZmluZSBfX05SX2lvcGwJCTExMAorI2RlZmluZSBfX05SX3ZoYW5ndXAJCTExMQorI2RlZmluZSBfX05SX2lkbGUJCTExMgorI2RlZmluZSBfX05SX3ZtODZvbGQJCTExMworI2RlZmluZSBfX05SX3dhaXQ0CQkxMTQKKyNkZWZpbmUgX19OUl9zd2Fwb2ZmCQkxMTUKKyNkZWZpbmUgX19OUl9zeXNpbmZvCQkxMTYKKyNkZWZpbmUgX19OUl9pcGMJCTExNworI2RlZmluZSBfX05SX2ZzeW5jCQkxMTgKKyNkZWZpbmUgX19OUl9zaWdyZXR1cm4JCTExOQorI2RlZmluZSBfX05SX2Nsb25lCQkxMjAKKyNkZWZpbmUgX19OUl9zZXRkb21haW5uYW1lCTEyMQorI2RlZmluZSBfX05SX3VuYW1lCQkxMjIKKyNkZWZpbmUgX19OUl9tb2RpZnlfbGR0CQkxMjMKKyNkZWZpbmUgX19OUl9hZGp0aW1leAkJMTI0CisjZGVmaW5lIF9fTlJfbXByb3RlY3QJCTEyNQorI2RlZmluZSBfX05SX3NpZ3Byb2NtYXNrCTEyNgorI2RlZmluZSBfX05SX2NyZWF0ZV9tb2R1bGUJMTI3CisjZGVmaW5lIF9fTlJfaW5pdF9tb2R1bGUJMTI4CisjZGVmaW5lIF9fTlJfZGVsZXRlX21vZHVsZQkxMjkKKyNkZWZpbmUgX19OUl9nZXRfa2VybmVsX3N5bXMJMTMwCisjZGVmaW5lIF9fTlJfcXVvdGFjdGwJCTEzMQorI2RlZmluZSBfX05SX2dldHBnaWQJCTEzMgorI2RlZmluZSBfX05SX2ZjaGRpcgkJMTMzCisjZGVmaW5lIF9fTlJfYmRmbHVzaAkJMTM0CisjZGVmaW5lIF9fTlJfc3lzZnMJCTEzNQorI2RlZmluZSBfX05SX3BlcnNvbmFsaXR5CTEzNgorI2RlZmluZSBfX05SX2Fmc19zeXNjYWxsCTEzNyAvKiBTeXNjYWxsIGZvciBBbmRyZXcgRmlsZSBTeXN0ZW0gKi8KKyNkZWZpbmUgX19OUl9zZXRmc3VpZAkJMTM4CisjZGVmaW5lIF9fTlJfc2V0ZnNnaWQJCTEzOQorI2RlZmluZSBfX05SX19sbHNlZWsJCTE0MAorI2RlZmluZSBfX05SX2dldGRlbnRzCQkxNDEKKyNkZWZpbmUgX19OUl9fbmV3c2VsZWN0CQkxNDIKKyNkZWZpbmUgX19OUl9mbG9jawkJMTQzCisjZGVmaW5lIF9fTlJfbXN5bmMJCTE0NAorI2RlZmluZSBfX05SX3JlYWR2CQkxNDUKKyNkZWZpbmUgX19OUl93cml0ZXYJCTE0NgorI2RlZmluZSBfX05SX2dldHNpZAkJMTQ3CisjZGVmaW5lIF9fTlJfZmRhdGFzeW5jCQkxNDgKKyNkZWZpbmUgX19OUl9fc3lzY3RsCQkxNDkKKyNkZWZpbmUgX19OUl9tbG9jawkJMTUwCisjZGVmaW5lIF9fTlJfbXVubG9jawkJMTUxCisjZGVmaW5lIF9fTlJfbWxvY2thbGwJCTE1MgorI2RlZmluZSBfX05SX211bmxvY2thbGwJCTE1MworI2RlZmluZSBfX05SX3NjaGVkX3NldHBhcmFtCQkxNTQKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRwYXJhbQkJMTU1CisjZGVmaW5lIF9fTlJfc2NoZWRfc2V0c2NoZWR1bGVyCQkxNTYKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRzY2hlZHVsZXIJCTE1NworI2RlZmluZSBfX05SX3NjaGVkX3lpZWxkCQkxNTgKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4CTE1OQorI2RlZmluZSBfX05SX3NjaGVkX2dldF9wcmlvcml0eV9taW4JMTYwCisjZGVmaW5lIF9fTlJfc2NoZWRfcnJfZ2V0X2ludGVydmFsCTE2MQorI2RlZmluZSBfX05SX25hbm9zbGVlcAkJMTYyCisjZGVmaW5lIF9fTlJfbXJlbWFwCQkxNjMKKyNkZWZpbmUgX19OUl9zZXRyZXN1aWQJCTE2NAorI2RlZmluZSBfX05SX2dldHJlc3VpZAkJMTY1CisjZGVmaW5lIF9fTlJfdm04NgkJMTY2CisjZGVmaW5lIF9fTlJfcXVlcnlfbW9kdWxlCTE2NworI2RlZmluZSBfX05SX3BvbGwJCTE2OAorI2RlZmluZSBfX05SX25mc3NlcnZjdGwJCTE2OQorI2RlZmluZSBfX05SX3NldHJlc2dpZAkJMTcwCisjZGVmaW5lIF9fTlJfZ2V0cmVzZ2lkCQkxNzEKKyNkZWZpbmUgX19OUl9wcmN0bCAgICAgICAgICAgICAgMTcyCisjZGVmaW5lIF9fTlJfcnRfc2lncmV0dXJuCTE3MworI2RlZmluZSBfX05SX3J0X3NpZ2FjdGlvbgkxNzQKKyNkZWZpbmUgX19OUl9ydF9zaWdwcm9jbWFzawkxNzUKKyNkZWZpbmUgX19OUl9ydF9zaWdwZW5kaW5nCTE3NgorI2RlZmluZSBfX05SX3J0X3NpZ3RpbWVkd2FpdAkxNzcKKyNkZWZpbmUgX19OUl9ydF9zaWdxdWV1ZWluZm8JMTc4CisjZGVmaW5lIF9fTlJfcnRfc2lnc3VzcGVuZAkxNzkKKyNkZWZpbmUgX19OUl9wcmVhZDY0CQkxODAKKyNkZWZpbmUgX19OUl9wd3JpdGU2NAkJMTgxCisjZGVmaW5lIF9fTlJfY2hvd24JCTE4MgorI2RlZmluZSBfX05SX2dldGN3ZAkJMTgzCisjZGVmaW5lIF9fTlJfY2FwZ2V0CQkxODQKKyNkZWZpbmUgX19OUl9jYXBzZXQJCTE4NQorI2RlZmluZSBfX05SX3NpZ2FsdHN0YWNrCTE4NgorI2RlZmluZSBfX05SX3NlbmRmaWxlCQkxODcKKyNkZWZpbmUgX19OUl9nZXRwbXNnCQkxODgJLyogc29tZSBwZW9wbGUgYWN0dWFsbHkgd2FudCBzdHJlYW1zICovCisjZGVmaW5lIF9fTlJfcHV0cG1zZwkJMTg5CS8qIHNvbWUgcGVvcGxlIGFjdHVhbGx5IHdhbnQgc3RyZWFtcyAqLworI2RlZmluZSBfX05SX3Zmb3JrCQkxOTAKKyNkZWZpbmUgX19OUl91Z2V0cmxpbWl0CQkxOTEJLyogU3VTIGNvbXBsaWFudCBnZXRybGltaXQgKi8KKyNkZWZpbmUgX19OUl9tbWFwMgkJMTkyCisjZGVmaW5lIF9fTlJfdHJ1bmNhdGU2NAkJMTkzCisjZGVmaW5lIF9fTlJfZnRydW5jYXRlNjQJMTk0CisjZGVmaW5lIF9fTlJfc3RhdDY0CQkxOTUKKyNkZWZpbmUgX19OUl9sc3RhdDY0CQkxOTYKKyNkZWZpbmUgX19OUl9mc3RhdDY0CQkxOTcKKyNkZWZpbmUgX19OUl9sY2hvd24zMgkJMTk4CisjZGVmaW5lIF9fTlJfZ2V0dWlkMzIJCTE5OQorI2RlZmluZSBfX05SX2dldGdpZDMyCQkyMDAKKyNkZWZpbmUgX19OUl9nZXRldWlkMzIJCTIwMQorI2RlZmluZSBfX05SX2dldGVnaWQzMgkJMjAyCisjZGVmaW5lIF9fTlJfc2V0cmV1aWQzMgkJMjAzCisjZGVmaW5lIF9fTlJfc2V0cmVnaWQzMgkJMjA0CisjZGVmaW5lIF9fTlJfZ2V0Z3JvdXBzMzIJMjA1CisjZGVmaW5lIF9fTlJfc2V0Z3JvdXBzMzIJMjA2CisjZGVmaW5lIF9fTlJfZmNob3duMzIJCTIwNworI2RlZmluZSBfX05SX3NldHJlc3VpZDMyCTIwOAorI2RlZmluZSBfX05SX2dldHJlc3VpZDMyCTIwOQorI2RlZmluZSBfX05SX3NldHJlc2dpZDMyCTIxMAorI2RlZmluZSBfX05SX2dldHJlc2dpZDMyCTIxMQorI2RlZmluZSBfX05SX2Nob3duMzIJCTIxMgorI2RlZmluZSBfX05SX3NldHVpZDMyCQkyMTMKKyNkZWZpbmUgX19OUl9zZXRnaWQzMgkJMjE0CisjZGVmaW5lIF9fTlJfc2V0ZnN1aWQzMgkJMjE1CisjZGVmaW5lIF9fTlJfc2V0ZnNnaWQzMgkJMjE2CisjZGVmaW5lIF9fTlJfcGl2b3Rfcm9vdAkJMjE3CisjZGVmaW5lIF9fTlJfbWluY29yZQkJMjE4CisjZGVmaW5lIF9fTlJfbWFkdmlzZQkJMjE5CisjZGVmaW5lIF9fTlJfbWFkdmlzZTEJCTIxOQkvKiBkZWxldGUgd2hlbiBDIGxpYiBzdHViIGlzIHJlbW92ZWQgKi8KKyNkZWZpbmUgX19OUl9nZXRkZW50czY0CQkyMjAKKyNkZWZpbmUgX19OUl9mY250bDY0CQkyMjEKKy8qIDIyMyBpcyB1bnVzZWQgKi8KKyNkZWZpbmUgX19OUl9nZXR0aWQJCTIyNAorI2RlZmluZSBfX05SX3JlYWRhaGVhZAkJMjI1CisjZGVmaW5lIF9fTlJfc2V0eGF0dHIJCTIyNgorI2RlZmluZSBfX05SX2xzZXR4YXR0cgkJMjI3CisjZGVmaW5lIF9fTlJfZnNldHhhdHRyCQkyMjgKKyNkZWZpbmUgX19OUl9nZXR4YXR0cgkJMjI5CisjZGVmaW5lIF9fTlJfbGdldHhhdHRyCQkyMzAKKyNkZWZpbmUgX19OUl9mZ2V0eGF0dHIJCTIzMQorI2RlZmluZSBfX05SX2xpc3R4YXR0cgkJMjMyCisjZGVmaW5lIF9fTlJfbGxpc3R4YXR0cgkJMjMzCisjZGVmaW5lIF9fTlJfZmxpc3R4YXR0cgkJMjM0CisjZGVmaW5lIF9fTlJfcmVtb3ZleGF0dHIJMjM1CisjZGVmaW5lIF9fTlJfbHJlbW92ZXhhdHRyCTIzNgorI2RlZmluZSBfX05SX2ZyZW1vdmV4YXR0cgkyMzcKKyNkZWZpbmUgX19OUl90a2lsbAkJMjM4CisjZGVmaW5lIF9fTlJfc2VuZGZpbGU2NAkJMjM5CisjZGVmaW5lIF9fTlJfZnV0ZXgJCTI0MAorI2RlZmluZSBfX05SX3NjaGVkX3NldGFmZmluaXR5CTI0MQorI2RlZmluZSBfX05SX3NjaGVkX2dldGFmZmluaXR5CTI0MgorI2RlZmluZSBfX05SX3NldF90aHJlYWRfYXJlYQkyNDMKKyNkZWZpbmUgX19OUl9nZXRfdGhyZWFkX2FyZWEJMjQ0CisjZGVmaW5lIF9fTlJfaW9fc2V0dXAJCTI0NQorI2RlZmluZSBfX05SX2lvX2Rlc3Ryb3kJCTI0NgorI2RlZmluZSBfX05SX2lvX2dldGV2ZW50cwkyNDcKKyNkZWZpbmUgX19OUl9pb19zdWJtaXQJCTI0OAorI2RlZmluZSBfX05SX2lvX2NhbmNlbAkJMjQ5CisjZGVmaW5lIF9fTlJfZmFkdmlzZTY0CQkyNTAKKworI2RlZmluZSBfX05SX2V4aXRfZ3JvdXAJCTI1MgorI2RlZmluZSBfX05SX2xvb2t1cF9kY29va2llCTI1MworI2RlZmluZSBfX05SX2Vwb2xsX2NyZWF0ZQkyNTQKKyNkZWZpbmUgX19OUl9lcG9sbF9jdGwJCTI1NQorI2RlZmluZSBfX05SX2Vwb2xsX3dhaXQJCTI1NgorI2RlZmluZSBfX05SX3JlbWFwX2ZpbGVfcGFnZXMJMjU3CisjZGVmaW5lIF9fTlJfc2V0X3RpZF9hZGRyZXNzCTI1OAorI2RlZmluZSBfX05SX3RpbWVyX2NyZWF0ZQkyNTkKKyNkZWZpbmUgX19OUl90aW1lcl9zZXR0aW1lCShfX05SX3RpbWVyX2NyZWF0ZSsxKQorI2RlZmluZSBfX05SX3RpbWVyX2dldHRpbWUJKF9fTlJfdGltZXJfY3JlYXRlKzIpCisjZGVmaW5lIF9fTlJfdGltZXJfZ2V0b3ZlcnJ1bgkoX19OUl90aW1lcl9jcmVhdGUrMykKKyNkZWZpbmUgX19OUl90aW1lcl9kZWxldGUJKF9fTlJfdGltZXJfY3JlYXRlKzQpCisjZGVmaW5lIF9fTlJfY2xvY2tfc2V0dGltZQkoX19OUl90aW1lcl9jcmVhdGUrNSkKKyNkZWZpbmUgX19OUl9jbG9ja19nZXR0aW1lCShfX05SX3RpbWVyX2NyZWF0ZSs2KQorI2RlZmluZSBfX05SX2Nsb2NrX2dldHJlcwkoX19OUl90aW1lcl9jcmVhdGUrNykKKyNkZWZpbmUgX19OUl9jbG9ja19uYW5vc2xlZXAJKF9fTlJfdGltZXJfY3JlYXRlKzgpCisjZGVmaW5lIF9fTlJfc3RhdGZzNjQJCTI2OAorI2RlZmluZSBfX05SX2ZzdGF0ZnM2NAkJMjY5CisjZGVmaW5lIF9fTlJfdGdraWxsCQkyNzAKKyNkZWZpbmUgX19OUl91dGltZXMJCTI3MQorI2RlZmluZSBfX05SX2ZhZHZpc2U2NF82NAkyNzIKKyNkZWZpbmUgX19OUl92c2VydmVyCQkyNzMKKyNkZWZpbmUgX19OUl9tYmluZAkJMjc0CisjZGVmaW5lIF9fTlJfZ2V0X21lbXBvbGljeQkyNzUKKyNkZWZpbmUgX19OUl9zZXRfbWVtcG9saWN5CTI3NgorI2RlZmluZSBfX05SX21xX29wZW4gCQkyNzcKKyNkZWZpbmUgX19OUl9tcV91bmxpbmsJCShfX05SX21xX29wZW4rMSkKKyNkZWZpbmUgX19OUl9tcV90aW1lZHNlbmQJKF9fTlJfbXFfb3BlbisyKQorI2RlZmluZSBfX05SX21xX3RpbWVkcmVjZWl2ZQkoX19OUl9tcV9vcGVuKzMpCisjZGVmaW5lIF9fTlJfbXFfbm90aWZ5CQkoX19OUl9tcV9vcGVuKzQpCisjZGVmaW5lIF9fTlJfbXFfZ2V0c2V0YXR0cgkoX19OUl9tcV9vcGVuKzUpCisjZGVmaW5lIF9fTlJfc3lzX2tleGVjX2xvYWQJMjgzCisjZGVmaW5lIF9fTlJfd2FpdGlkCQkyODQKKy8qICNkZWZpbmUgX19OUl9zeXNfc2V0YWx0cm9vdAkyODUgKi8KKyNkZWZpbmUgX19OUl9hZGRfa2V5CQkyODYKKyNkZWZpbmUgX19OUl9yZXF1ZXN0X2tleQkyODcKKyNkZWZpbmUgX19OUl9rZXljdGwJCTI4OAorCisjZGVmaW5lIE5SX3N5c2NhbGxzIDI4OQorCisvKgorICogdXNlci12aXNpYmxlIGVycm9yIG51bWJlcnMgYXJlIGluIHRoZSByYW5nZSAtMSAtIC0xMjg6IHNlZQorICogPGFzbS1pMzg2L2Vycm5vLmg+CisgKi8KKyNkZWZpbmUgX19zeXNjYWxsX3JldHVybih0eXBlLCByZXMpIFwKK2RvIHsgXAorCWlmICgodW5zaWduZWQgbG9uZykocmVzKSA+PSAodW5zaWduZWQgbG9uZykoLSgxMjggKyAxKSkpIHsgXAorCQllcnJubyA9IC0ocmVzKTsgXAorCQlyZXMgPSAtMTsgXAorCX0gXAorCXJldHVybiAodHlwZSkgKHJlcyk7IFwKK30gd2hpbGUgKDApCisKKy8qIFhYWCAtIF9mb28gbmVlZHMgdG8gYmUgX19mb28sIHdoaWxlIF9fTlJfYmFyIGNvdWxkIGJlIF9OUl9iYXIuICovCisjZGVmaW5lIF9zeXNjYWxsMCh0eXBlLG5hbWUpIFwKK3R5cGUgbmFtZSh2b2lkKSBcCit7IFwKK2xvbmcgX19yZXM7IFwKK19fYXNtX18gdm9sYXRpbGUgKCJpbnQgJDB4ODAiIFwKKwk6ICI9YSIgKF9fcmVzKSBcCisJOiAiMCIgKF9fTlJfIyNuYW1lKSk7IFwKK19fc3lzY2FsbF9yZXR1cm4odHlwZSxfX3Jlcyk7IFwKK30KKworI2RlZmluZSBfc3lzY2FsbDEodHlwZSxuYW1lLHR5cGUxLGFyZzEpIFwKK3R5cGUgbmFtZSh0eXBlMSBhcmcxKSBcCit7IFwKK2xvbmcgX19yZXM7IFwKK19fYXNtX18gdm9sYXRpbGUgKCJpbnQgJDB4ODAiIFwKKwk6ICI9YSIgKF9fcmVzKSBcCisJOiAiMCIgKF9fTlJfIyNuYW1lKSwiYiIgKChsb25nKShhcmcxKSkpOyBcCitfX3N5c2NhbGxfcmV0dXJuKHR5cGUsX19yZXMpOyBcCit9CisKKyNkZWZpbmUgX3N5c2NhbGwyKHR5cGUsbmFtZSx0eXBlMSxhcmcxLHR5cGUyLGFyZzIpIFwKK3R5cGUgbmFtZSh0eXBlMSBhcmcxLHR5cGUyIGFyZzIpIFwKK3sgXAorbG9uZyBfX3JlczsgXAorX19hc21fXyB2b2xhdGlsZSAoImludCAkMHg4MCIgXAorCTogIj1hIiAoX19yZXMpIFwKKwk6ICIwIiAoX19OUl8jI25hbWUpLCJiIiAoKGxvbmcpKGFyZzEpKSwiYyIgKChsb25nKShhcmcyKSkpOyBcCitfX3N5c2NhbGxfcmV0dXJuKHR5cGUsX19yZXMpOyBcCit9CisKKyNkZWZpbmUgX3N5c2NhbGwzKHR5cGUsbmFtZSx0eXBlMSxhcmcxLHR5cGUyLGFyZzIsdHlwZTMsYXJnMykgXAordHlwZSBuYW1lKHR5cGUxIGFyZzEsdHlwZTIgYXJnMix0eXBlMyBhcmczKSBcCit7IFwKK2xvbmcgX19yZXM7IFwKK19fYXNtX18gdm9sYXRpbGUgKCJpbnQgJDB4ODAiIFwKKwk6ICI9YSIgKF9fcmVzKSBcCisJOiAiMCIgKF9fTlJfIyNuYW1lKSwiYiIgKChsb25nKShhcmcxKSksImMiICgobG9uZykoYXJnMikpLCBcCisJCSAgImQiICgobG9uZykoYXJnMykpKTsgXAorX19zeXNjYWxsX3JldHVybih0eXBlLF9fcmVzKTsgXAorfQorCisjZGVmaW5lIF9zeXNjYWxsNCh0eXBlLG5hbWUsdHlwZTEsYXJnMSx0eXBlMixhcmcyLHR5cGUzLGFyZzMsdHlwZTQsYXJnNCkgXAordHlwZSBuYW1lICh0eXBlMSBhcmcxLCB0eXBlMiBhcmcyLCB0eXBlMyBhcmczLCB0eXBlNCBhcmc0KSBcCit7IFwKK2xvbmcgX19yZXM7IFwKK19fYXNtX18gdm9sYXRpbGUgKCJpbnQgJDB4ODAiIFwKKwk6ICI9YSIgKF9fcmVzKSBcCisJOiAiMCIgKF9fTlJfIyNuYW1lKSwiYiIgKChsb25nKShhcmcxKSksImMiICgobG9uZykoYXJnMikpLCBcCisJICAiZCIgKChsb25nKShhcmczKSksIlMiICgobG9uZykoYXJnNCkpKTsgXAorX19zeXNjYWxsX3JldHVybih0eXBlLF9fcmVzKTsgXAorfSAKKworI2RlZmluZSBfc3lzY2FsbDUodHlwZSxuYW1lLHR5cGUxLGFyZzEsdHlwZTIsYXJnMix0eXBlMyxhcmczLHR5cGU0LGFyZzQsIFwKKwkgIHR5cGU1LGFyZzUpIFwKK3R5cGUgbmFtZSAodHlwZTEgYXJnMSx0eXBlMiBhcmcyLHR5cGUzIGFyZzMsdHlwZTQgYXJnNCx0eXBlNSBhcmc1KSBcCit7IFwKK2xvbmcgX19yZXM7IFwKK19fYXNtX18gdm9sYXRpbGUgKCJpbnQgJDB4ODAiIFwKKwk6ICI9YSIgKF9fcmVzKSBcCisJOiAiMCIgKF9fTlJfIyNuYW1lKSwiYiIgKChsb25nKShhcmcxKSksImMiICgobG9uZykoYXJnMikpLCBcCisJICAiZCIgKChsb25nKShhcmczKSksIlMiICgobG9uZykoYXJnNCkpLCJEIiAoKGxvbmcpKGFyZzUpKSk7IFwKK19fc3lzY2FsbF9yZXR1cm4odHlwZSxfX3Jlcyk7IFwKK30KKworI2RlZmluZSBfc3lzY2FsbDYodHlwZSxuYW1lLHR5cGUxLGFyZzEsdHlwZTIsYXJnMix0eXBlMyxhcmczLHR5cGU0LGFyZzQsIFwKKwkgIHR5cGU1LGFyZzUsdHlwZTYsYXJnNikgXAordHlwZSBuYW1lICh0eXBlMSBhcmcxLHR5cGUyIGFyZzIsdHlwZTMgYXJnMyx0eXBlNCBhcmc0LHR5cGU1IGFyZzUsdHlwZTYgYXJnNikgXAoreyBcCitsb25nIF9fcmVzOyBcCitfX2FzbV9fIHZvbGF0aWxlICgicHVzaCAlJWVicCA7IG1vdmwgJSVlYXgsJSVlYnAgOyBtb3ZsICUxLCUlZWF4IDsgaW50ICQweDgwIDsgcG9wICUlZWJwIiBcCisJOiAiPWEiIChfX3JlcykgXAorCTogImkiIChfX05SXyMjbmFtZSksImIiICgobG9uZykoYXJnMSkpLCJjIiAoKGxvbmcpKGFyZzIpKSwgXAorCSAgImQiICgobG9uZykoYXJnMykpLCJTIiAoKGxvbmcpKGFyZzQpKSwiRCIgKChsb25nKShhcmc1KSksIFwKKwkgICIwIiAoKGxvbmcpKGFyZzYpKSk7IFwKK19fc3lzY2FsbF9yZXR1cm4odHlwZSxfX3Jlcyk7IFwKK30KKworI2lmZGVmIF9fS0VSTkVMX18KKyNkZWZpbmUgX19BUkNIX1dBTlRfSVBDX1BBUlNFX1ZFUlNJT04KKyNkZWZpbmUgX19BUkNIX1dBTlRfT0xEX1JFQURESVIKKyNkZWZpbmUgX19BUkNIX1dBTlRfT0xEX1NUQVQKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1RBVDY0CisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19BTEFSTQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfR0VUSE9TVE5BTUUKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1BBVVNFCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TR0VUTUFTSworI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHTkFMCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19USU1FCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19VVElNRQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfV0FJVFBJRAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU09DS0VUQ0FMTAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfRkFEVklTRTY0CisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19HRVRQR1JQCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19MTFNFRUsKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX05JQ0UKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX09MRF9HRVRSTElNSVQKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX09MRFVNT1VOVAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUEVORElORworI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUFJPQ01BU0sKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1JUX1NJR0FDVElPTgorI2VuZGlmCisKKyNpZmRlZiBfX0tFUk5FTF9TWVNDQUxMU19fCisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKworLyoKKyAqIHdlIG5lZWQgdGhpcyBpbmxpbmUgLSBmb3JraW5nIGZyb20ga2VybmVsIHNwYWNlIHdpbGwgcmVzdWx0CisgKiBpbiBOTyBDT1BZIE9OIFdSSVRFICghISEpLCB1bnRpbCBhbiBleGVjdmUgaXMgZXhlY3V0ZWQuIFRoaXMKKyAqIGlzIG5vIHByb2JsZW0sIGJ1dCBmb3IgdGhlIHN0YWNrLiBUaGlzIGlzIGhhbmRsZWQgYnkgbm90IGxldHRpbmcKKyAqIG1haW4oKSB1c2UgdGhlIHN0YWNrIGF0IGFsbCBhZnRlciBmb3JrKCkuIFRodXMsIG5vIGZ1bmN0aW9uCisgKiBjYWxscyAtIHdoaWNoIG1lYW5zIGlubGluZSBjb2RlIGZvciBmb3JrIHRvbywgYXMgb3RoZXJ3aXNlIHdlCisgKiB3b3VsZCB1c2UgdGhlIHN0YWNrIHVwb24gZXhpdCBmcm9tICdmb3JrKCknLgorICoKKyAqIEFjdHVhbGx5IG9ubHkgcGF1c2UgYW5kIGZvcmsgYXJlIG5lZWRlZCBpbmxpbmUsIHNvIHRoYXQgdGhlcmUKKyAqIHdvbid0IGJlIGFueSBtZXNzaW5nIHdpdGggdGhlIHN0YWNrIGZyb20gbWFpbigpLCBidXQgd2UgZGVmaW5lCisgKiBzb21lIG90aGVycyB0b28uCisgKi8KK3N0YXRpYyBpbmxpbmUgX3N5c2NhbGwzKGludCxleGVjdmUsY29uc3QgY2hhciAqLGZpbGUsY2hhciAqKixhcmd2LGNoYXIgKiosZW52cCkKKworYXNtbGlua2FnZSBpbnQgc3lzX21vZGlmeV9sZHQoaW50IGZ1bmMsIHZvaWQgX191c2VyICpwdHIsIHVuc2lnbmVkIGxvbmcgYnl0ZWNvdW50KTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfbW1hcDIodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwKKwkJCXVuc2lnbmVkIGxvbmcgcHJvdCwgdW5zaWduZWQgbG9uZyBmbGFncywKKwkJCXVuc2lnbmVkIGxvbmcgZmQsIHVuc2lnbmVkIGxvbmcgcGdvZmYpOworYXNtbGlua2FnZSBpbnQgc3lzX2V4ZWN2ZShzdHJ1Y3QgcHRfcmVncyByZWdzKTsKK2FzbWxpbmthZ2UgaW50IHN5c19jbG9uZShzdHJ1Y3QgcHRfcmVncyByZWdzKTsKK2FzbWxpbmthZ2UgaW50IHN5c19mb3JrKHN0cnVjdCBwdF9yZWdzIHJlZ3MpOworYXNtbGlua2FnZSBpbnQgc3lzX3Zmb3JrKHN0cnVjdCBwdF9yZWdzIHJlZ3MpOworYXNtbGlua2FnZSBpbnQgc3lzX3BpcGUodW5zaWduZWQgbG9uZyBfX3VzZXIgKmZpbGRlcyk7Cithc21saW5rYWdlIGludCBzeXNfcHRyYWNlKGxvbmcgcmVxdWVzdCwgbG9uZyBwaWQsIGxvbmcgYWRkciwgbG9uZyBkYXRhKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfaW9wbCh1bnNpZ25lZCBsb25nIHVudXNlZCk7CitzdHJ1Y3Qgc2lnYWN0aW9uOworYXNtbGlua2FnZSBsb25nIHN5c19ydF9zaWdhY3Rpb24oaW50IHNpZywKKwkJCQljb25zdCBzdHJ1Y3Qgc2lnYWN0aW9uIF9fdXNlciAqYWN0LAorCQkJCXN0cnVjdCBzaWdhY3Rpb24gX191c2VyICpvYWN0LAorCQkJCXNpemVfdCBzaWdzZXRzaXplKTsKKworI2VuZGlmCisKKy8qCisgKiAiQ29uZGl0aW9uYWwiIHN5c2NhbGxzCisgKgorICogV2hhdCB3ZSB3YW50IGlzIF9fYXR0cmlidXRlX18oKHdlYWssYWxpYXMoInN5c19uaV9zeXNjYWxsIikpKSwKKyAqIGJ1dCBpdCBkb2Vzbid0IHdvcmsgb24gYWxsIHRvb2xjaGFpbnMsIHNvIHdlIGp1c3QgZG8gaXQgYnkgaGFuZAorICovCisjaWZuZGVmIGNvbmRfc3lzY2FsbAorI2RlZmluZSBjb25kX3N5c2NhbGwoeCkgYXNtKCIud2Vha1x0IiAjeCAiXG5cdC5zZXRcdCIgI3ggIixzeXNfbmlfc3lzY2FsbCIpCisjZW5kaWYKKworI2VuZGlmIC8qIF9BU01fSTM4Nl9VTklTVERfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvdXNlci5oIGIvaW5jbHVkZS9hc20taTM4Ni91c2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU4NWQyYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvdXNlci5oCkBAIC0wLDAgKzEsMTIxIEBACisjaWZuZGVmIF9JMzg2X1VTRVJfSAorI2RlZmluZSBfSTM4Nl9VU0VSX0gKKworI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisvKiBDb3JlIGZpbGUgZm9ybWF0OiBUaGUgY29yZSBmaWxlIGlzIHdyaXR0ZW4gaW4gc3VjaCBhIHdheSB0aGF0IGdkYgorICAgY2FuIHVuZGVyc3RhbmQgaXQgYW5kIHByb3ZpZGUgdXNlZnVsIGluZm9ybWF0aW9uIHRvIHRoZSB1c2VyICh1bmRlcgorICAgbGludXggd2UgdXNlIHRoZSAndHJhZC1jb3JlJyBiZmQpLiAgVGhlcmUgYXJlIHF1aXRlIGEgbnVtYmVyIG9mCisgICBvYnN0YWNsZXMgdG8gYmVpbmcgYWJsZSB0byB2aWV3IHRoZSBjb250ZW50cyBvZiB0aGUgZmxvYXRpbmcgcG9pbnQKKyAgIHJlZ2lzdGVycywgYW5kIHVudGlsIHRoZXNlIGFyZSBzb2x2ZWQgeW91IHdpbGwgbm90IGJlIGFibGUgdG8gdmlldyB0aGUKKyAgIGNvbnRlbnRzIG9mIHRoZW0uICBBY3R1YWxseSwgeW91IGNhbiByZWFkIGluIHRoZSBjb3JlIGZpbGUgYW5kIGxvb2sgYXQKKyAgIHRoZSBjb250ZW50cyBvZiB0aGUgdXNlciBzdHJ1Y3QgdG8gZmluZCBvdXQgd2hhdCB0aGUgZmxvYXRpbmcgcG9pbnQKKyAgIHJlZ2lzdGVycyBjb250YWluLgorICAgVGhlIGFjdHVhbCBmaWxlIGNvbnRlbnRzIGFyZSBhcyBmb2xsb3dzOgorICAgVVBBR0U6IDEgcGFnZSBjb25zaXN0aW5nIG9mIGEgdXNlciBzdHJ1Y3QgdGhhdCB0ZWxscyBnZGIgd2hhdCBpcyBwcmVzZW50CisgICBpbiB0aGUgZmlsZS4gIERpcmVjdGx5IGFmdGVyIHRoaXMgaXMgYSBjb3B5IG9mIHRoZSB0YXNrX3N0cnVjdCwgd2hpY2gKKyAgIGlzIGN1cnJlbnRseSBub3QgdXNlZCBieSBnZGIsIGJ1dCBpdCBtYXkgY29tZSBpbiB1c2VmdWwgYXQgc29tZSBwb2ludC4KKyAgIEFsbCBvZiB0aGUgcmVnaXN0ZXJzIGFyZSBzdG9yZWQgYXMgcGFydCBvZiB0aGUgdXBhZ2UuICBUaGUgdXBhZ2Ugc2hvdWxkCisgICBhbHdheXMgYmUgb25seSBvbmUgcGFnZS4KKyAgIERBVEE6IFRoZSBkYXRhIGFyZWEgaXMgc3RvcmVkLiAgV2UgdXNlIGN1cnJlbnQtPmVuZF90ZXh0IHRvCisgICBjdXJyZW50LT5icmsgdG8gcGljayB1cCBhbGwgb2YgdGhlIHVzZXIgdmFyaWFibGVzLCBwbHVzIGFueSBtZW1vcnkKKyAgIHRoYXQgbWF5IGhhdmUgYmVlbiBtYWxsb2NlZC4gIE5vIGF0dGVtcHQgaXMgbWFkZSB0byBkZXRlcm1pbmUgaWYgYSBwYWdlCisgICBpcyBkZW1hbmQtemVybyBvciBpZiBhIHBhZ2UgaXMgdG90YWxseSB1bnVzZWQsIHdlIGp1c3QgY292ZXIgdGhlIGVudGlyZQorICAgcmFuZ2UuICBBbGwgb2YgdGhlIGFkZHJlc3NlcyBhcmUgcm91bmRlZCBpbiBzdWNoIGEgd2F5IHRoYXQgYW4gaW50ZWdyYWwKKyAgIG51bWJlciBvZiBwYWdlcyBpcyB3cml0dGVuLgorICAgU1RBQ0s6IFdlIG5lZWQgdGhlIHN0YWNrIGluZm9ybWF0aW9uIGluIG9yZGVyIHRvIGdldCBhIG1lYW5pbmdmdWwKKyAgIGJhY2t0cmFjZS4gIFdlIG5lZWQgdG8gd3JpdGUgdGhlIGRhdGEgZnJvbSAoZXNwKSB0bworICAgY3VycmVudC0+c3RhcnRfc3RhY2ssIHNvIHdlIHJvdW5kIGVhY2ggb2YgdGhlc2Ugb2ZmIGluIG9yZGVyIHRvIGJlIGFibGUKKyAgIHRvIHdyaXRlIGFuIGludGVnZXIgbnVtYmVyIG9mIHBhZ2VzLgorICAgVGhlIG1pbmltdW0gY29yZSBmaWxlIHNpemUgaXMgMyBwYWdlcywgb3IgMTIyODggYnl0ZXMuCisqLworCisvKgorICogUGVudGl1bSBJSUkgRlhTUiwgU1NFIHN1cHBvcnQKKyAqCUdhcmV0aCBIdWdoZXMgPGdhcmV0aEB2YWxpbnV4LmNvbT4sIE1heSAyMDAwCisgKgorICogUHJvdmlkZSBzdXBwb3J0IGZvciB0aGUgR0RCIDUuMCsgUFRSQUNFX3tHRVR8U0VUfUZQWFJFR1MgcmVxdWVzdHMgZm9yCisgKiBpbnRlcmFjdGluZyB3aXRoIHRoZSBGWFNSLWZvcm1hdCBmbG9hdGluZyBwb2ludCBlbnZpcm9ubWVudC4gIEZsb2F0aW5nCisgKiBwb2ludCBkYXRhIGNhbiBiZSBhY2Nlc3NlZCBpbiB0aGUgcmVndWxhciBmb3JtYXQgaW4gdGhlIHVzdWFsIG1hbm5lciwKKyAqIGFuZCBib3RoIHRoZSBzdGFuZGFyZCBhbmQgU0lNRCBmbG9hdGluZyBwb2ludCBkYXRhIGNhbiBiZSBhY2Nlc3NlZCB2aWEKKyAqIHRoZSBuZXcgcHRyYWNlIHJlcXVlc3RzLiAgSW4gZWl0aGVyIGNhc2UsIGNoYW5nZXMgdG8gdGhlIEZQVSBlbnZpcm9ubWVudAorICogd2lsbCBiZSByZWZsZWN0ZWQgaW4gdGhlIHRhc2sncyBzdGF0ZSBhcyBleHBlY3RlZC4KKyAqLworCitzdHJ1Y3QgdXNlcl9pMzg3X3N0cnVjdCB7CisJbG9uZwljd2Q7CisJbG9uZwlzd2Q7CisJbG9uZwl0d2Q7CisJbG9uZwlmaXA7CisJbG9uZwlmY3M7CisJbG9uZwlmb287CisJbG9uZwlmb3M7CisJbG9uZwlzdF9zcGFjZVsyMF07CS8qIDgqMTAgYnl0ZXMgZm9yIGVhY2ggRlAtcmVnID0gODAgYnl0ZXMgKi8KK307CisKK3N0cnVjdCB1c2VyX2Z4c3Jfc3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydAljd2Q7CisJdW5zaWduZWQgc2hvcnQJc3dkOworCXVuc2lnbmVkIHNob3J0CXR3ZDsKKwl1bnNpZ25lZCBzaG9ydAlmb3A7CisJbG9uZwlmaXA7CisJbG9uZwlmY3M7CisJbG9uZwlmb287CisJbG9uZwlmb3M7CisJbG9uZwlteGNzcjsKKwlsb25nCXJlc2VydmVkOworCWxvbmcJc3Rfc3BhY2VbMzJdOwkvKiA4KjE2IGJ5dGVzIGZvciBlYWNoIEZQLXJlZyA9IDEyOCBieXRlcyAqLworCWxvbmcJeG1tX3NwYWNlWzMyXTsJLyogOCoxNiBieXRlcyBmb3IgZWFjaCBYTU0tcmVnID0gMTI4IGJ5dGVzICovCisJbG9uZwlwYWRkaW5nWzU2XTsKK307CisKKy8qCisgKiBUaGlzIGlzIHRoZSBvbGQgbGF5b3V0IG9mICJzdHJ1Y3QgcHRfcmVncyIsIGFuZAorICogaXMgc3RpbGwgdGhlIGxheW91dCB1c2VkIGJ5IHVzZXIgbW9kZSAodGhlIG5ldworICogcHRfcmVncyBkb2Vzbid0IGhhdmUgYWxsIHJlZ2lzdGVycyBhcyB0aGUga2VybmVsCisgKiBkb2Vzbid0IHVzZSB0aGUgZXh0cmEgc2VnbWVudCByZWdpc3RlcnMpCisgKi8KK3N0cnVjdCB1c2VyX3JlZ3Nfc3RydWN0IHsKKwlsb25nIGVieCwgZWN4LCBlZHgsIGVzaSwgZWRpLCBlYnAsIGVheDsKKwl1bnNpZ25lZCBzaG9ydCBkcywgX19kcywgZXMsIF9fZXM7CisJdW5zaWduZWQgc2hvcnQgZnMsIF9fZnMsIGdzLCBfX2dzOworCWxvbmcgb3JpZ19lYXgsIGVpcDsKKwl1bnNpZ25lZCBzaG9ydCBjcywgX19jczsKKwlsb25nIGVmbGFncywgZXNwOworCXVuc2lnbmVkIHNob3J0IHNzLCBfX3NzOworfTsKKworLyogV2hlbiB0aGUga2VybmVsIGR1bXBzIGNvcmUsIGl0IHN0YXJ0cyBieSBkdW1waW5nIHRoZSB1c2VyIHN0cnVjdCAtCisgICB0aGlzIHdpbGwgYmUgdXNlZCBieSBnZGIgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgZGF0YSBhbmQgc3RhY2sgc2VnbWVudHMKKyAgIGFyZSB3aXRoaW4gdGhlIGZpbGUsIGFuZCB3aGF0IHZpcnR1YWwgYWRkcmVzc2VzIHRvIHVzZS4gKi8KK3N0cnVjdCB1c2VyeworLyogV2Ugc3RhcnQgd2l0aCB0aGUgcmVnaXN0ZXJzLCB0byBtaW1pYyB0aGUgd2F5IHRoYXQgIm1lbW9yeSIgaXMgcmV0dXJuZWQKKyAgIGZyb20gdGhlIHB0cmFjZSgzLC4uLikgZnVuY3Rpb24uICAqLworICBzdHJ1Y3QgdXNlcl9yZWdzX3N0cnVjdCByZWdzOwkJLyogV2hlcmUgdGhlIHJlZ2lzdGVycyBhcmUgYWN0dWFsbHkgc3RvcmVkICovCisvKiBwdHJhY2UgZG9lcyBub3QgeWV0IHN1cHBseSB0aGVzZS4gIFNvbWVkYXkuLi4uICovCisgIGludCB1X2ZwdmFsaWQ7CQkvKiBUcnVlIGlmIG1hdGggY28tcHJvY2Vzc29yIGJlaW5nIHVzZWQuICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZvciB0aGlzIG1lc3MuIE5vdCB5ZXQgdXNlZC4gKi8KKyAgc3RydWN0IHVzZXJfaTM4N19zdHJ1Y3QgaTM4NzsJLyogTWF0aCBDby1wcm9jZXNzb3IgcmVnaXN0ZXJzLiAqLworLyogVGhlIHJlc3Qgb2YgdGhpcyBqdW5rIGlzIHRvIGhlbHAgZ2RiIGZpZ3VyZSBvdXQgd2hhdCBnb2VzIHdoZXJlICovCisgIHVuc2lnbmVkIGxvbmcgaW50IHVfdHNpemU7CS8qIFRleHQgc2VnbWVudCBzaXplIChwYWdlcykuICovCisgIHVuc2lnbmVkIGxvbmcgaW50IHVfZHNpemU7CS8qIERhdGEgc2VnbWVudCBzaXplIChwYWdlcykuICovCisgIHVuc2lnbmVkIGxvbmcgaW50IHVfc3NpemU7CS8qIFN0YWNrIHNlZ21lbnQgc2l6ZSAocGFnZXMpLiAqLworICB1bnNpZ25lZCBsb25nIHN0YXJ0X2NvZGU7ICAgICAvKiBTdGFydGluZyB2aXJ0dWFsIGFkZHJlc3Mgb2YgdGV4dC4gKi8KKyAgdW5zaWduZWQgbG9uZyBzdGFydF9zdGFjazsJLyogU3RhcnRpbmcgdmlydHVhbCBhZGRyZXNzIG9mIHN0YWNrIGFyZWEuCisJCQkJICAgVGhpcyBpcyBhY3R1YWxseSB0aGUgYm90dG9tIG9mIHRoZSBzdGFjaywKKwkJCQkgICB0aGUgdG9wIG9mIHRoZSBzdGFjayBpcyBhbHdheXMgZm91bmQgaW4gdGhlCisJCQkJICAgZXNwIHJlZ2lzdGVyLiAgKi8KKyAgbG9uZyBpbnQgc2lnbmFsOyAgICAgCQkvKiBTaWduYWwgdGhhdCBjYXVzZWQgdGhlIGNvcmUgZHVtcC4gKi8KKyAgaW50IHJlc2VydmVkOwkJCS8qIE5vIGxvbmdlciB1c2VkICovCisgIHN0cnVjdCB1c2VyX3B0X3JlZ3MgKiB1X2FyMDsJLyogVXNlZCBieSBnZGIgdG8gaGVscCBmaW5kIHRoZSB2YWx1ZXMgZm9yICovCisJCQkJLyogdGhlIHJlZ2lzdGVycy4gKi8KKyAgc3RydWN0IHVzZXJfaTM4N19zdHJ1Y3QqIHVfZnBzdGF0ZTsJLyogTWF0aCBDby1wcm9jZXNzb3IgcG9pbnRlci4gKi8KKyAgdW5zaWduZWQgbG9uZyBtYWdpYzsJCS8qIFRvIHVuaXF1ZWx5IGlkZW50aWZ5IGEgY29yZSBmaWxlICovCisgIGNoYXIgdV9jb21tWzMyXTsJCS8qIFVzZXIgY29tbWFuZCB0aGF0IHdhcyByZXNwb25zaWJsZSAqLworICBpbnQgdV9kZWJ1Z3JlZ1s4XTsKK307CisjZGVmaW5lIE5CUEcgUEFHRV9TSVpFCisjZGVmaW5lIFVQQUdFUyAxCisjZGVmaW5lIEhPU1RfVEVYVF9TVEFSVF9BRERSICh1LnN0YXJ0X2NvZGUpCisjZGVmaW5lIEhPU1RfU1RBQ0tfRU5EX0FERFIgKHUuc3RhcnRfc3RhY2sgKyB1LnVfc3NpemUgKiBOQlBHKQorCisjZW5kaWYgLyogX0kzODZfVVNFUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3ZnYS5oIGIvaW5jbHVkZS9hc20taTM4Ni92Z2EuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjBjMGU1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taTM4Ni92Z2EuaApAQCAtMCwwICsxLDIwIEBACisvKgorICoJQWNjZXNzIHRvIFZHQSB2aWRlb3JhbQorICoKKyAqCShjKSAxOTk4IE1hcnRpbiBNYXJlcyA8bWpAdWN3LmN6PgorICovCisKKyNpZm5kZWYgX0xJTlVYX0FTTV9WR0FfSF8KKyNkZWZpbmUgX0xJTlVYX0FTTV9WR0FfSF8KKworLyoKKyAqCU9uIHRoZSBQQywgd2UgY2FuIGp1c3QgcmVjYWxjdWxhdGUgYWRkcmVzc2VzIGFuZCB0aGVuCisgKglhY2Nlc3MgdGhlIHZpZGVvcmFtIGRpcmVjdGx5IHdpdGhvdXQgYW55IGJsYWNrIG1hZ2ljLgorICovCisKKyNkZWZpbmUgVkdBX01BUF9NRU0oeCkgKHVuc2lnbmVkIGxvbmcpcGh5c190b192aXJ0KHgpCisKKyNkZWZpbmUgdmdhX3JlYWRiKHgpICgqKHgpKQorI2RlZmluZSB2Z2Ffd3JpdGViKHgseSkgKCooeSkgPSAoeCkpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni92aWMuaCBiL2luY2x1ZGUvYXNtLWkzODYvdmljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFiZmNmYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvdmljLmgKQEAgLTAsMCArMSw2MSBAQAorLyogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDEKKyAqCisgKiBBdXRob3I6IEouRS5KLkJvdHRvbWxleUBIYW5zZW5QYXJ0bmVyc2hpcC5jb20KKyAqCisgKiBTdGFuZGFyZCBpbmNsdWRlIGRlZmluaXRpb25zIGZvciB0aGUgTkNSIFZveWFnZXIgSW50ZXJydXB0IENvbnRyb2xsZXIgKi8KKworLyogVGhlIGVpZ2h0IENQSSB2ZWN0b3JzLiAgVG8gYWN0aXZhdGUgYSBDUEksIHlvdSB3cml0ZSBhIGJpdCBtYXNrCisgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBwcm9jZXNzb3Igc2V0IHRvIGJlIGludGVycnVwdGVkIGludG8gdGhlCisgKiByZWxldmFudCByZWdpc3Rlci4gIFRoYXQgc2V0IG9mIENQVXMgd2lsbCB0aGVuIGJlIGludGVycnVwdGVkIHdpdGgKKyAqIHRoZSBDUEkgKi8KK3N0YXRpYyBjb25zdCBpbnQgVklDX0NQSV9SZWdpc3RlcnNbXSA9CisJezB4RkMwMCwgMHhGQzAxLCAweEZDMDgsIDB4RkMwOSwKKwkgMHhGQzEwLCAweEZDMTEsIDB4RkMxOCwgMHhGQzE5IH07CisKKyNkZWZpbmUgVklDX1BST0NfV0hPX0FNX0kJCTB4ZmMyOQorIwlkZWZpbmUJUVVBRF9JREVOVElGSUVSCQkweEMwCisjCWRlZmluZSAgRUlHSFRfU0xPVF9JREVOVElGSUVSCTB4RTAKKyNkZWZpbmUgUUlDX0VYVEVOREVEX1BST0NFU1NPUl9TRUxFQ1QJMHhGQzcyCisjZGVmaW5lIFZJQ19DUElfQkFTRV9SRUdJU1RFUgkJMHhGQzQxCisjZGVmaW5lIFZJQ19QUk9DRVNTT1JfSUQJCTB4RkMyMQorIwlkZWZpbmUgVklDX0NQVV9NQVNRVUVSQURFX0VOQUJMRSAweDgKKworI2RlZmluZSBWSUNfQ0xBSU1fUkVHSVNURVJfMAkJMHhGQzM4CisjZGVmaW5lIFZJQ19DTEFJTV9SRUdJU1RFUl8xCQkweEZDMzkKKyNkZWZpbmUgVklDX1JFRElSRUNUX1JFR0lTVEVSXzAJCTB4RkM2MAorI2RlZmluZSBWSUNfUkVESVJFQ1RfUkVHSVNURVJfMQkJMHhGQzYxCisjZGVmaW5lIFZJQ19QUklPUklUWV9SRUdJU1RFUgkJMHhGQzIwCisKKyNkZWZpbmUgVklDX1BSSU1BUllfTUNfQkFTRQkJMHhGQzQ4CisjZGVmaW5lIFZJQ19TRUNPTkRBUllfTUNfQkFTRQkJMHhGQzQ5CisKKyNkZWZpbmUgUUlDX1BST0NFU1NPUl9JRAkJMHhGQzcxCisjCWRlZmluZQlRSUNfQ1BVSURfRU5BQkxFCTB4MDgKKworI2RlZmluZSBRSUNfVklDX0NQSV9CQVNFX1JFR0lTVEVSCTB4RkM3OQorI2RlZmluZSBRSUNfQ1BJX0JBU0VfUkVHSVNURVIJCTB4RkM3QQorCisjZGVmaW5lIFFJQ19NQVNLX1JFR0lTVEVSMAkJMHhGQzgwCisvKiBOT1RFOiB0aGVzZSBhcmUgbWFza2VkIGhpZ2gsIGVuYWJsZWQgbG93ICovCisjCWRlZmluZSBRSUNfUEVSRl9USU1FUgkJMHgwMQorIwlkZWZpbmUgUUlDX0xQRQkJCTB4MDIKKyMJZGVmaW5lIFFJQ19TWVNfSU5UCQkweDA0CisjCWRlZmluZSBRSUNfQ01OX0lOVAkJMHgwOAorLyogYXQgdGhlIG1vbWVudCwganVzdCBlbmFibGUgQ01OX0lOVCwgZGlzYWJsZSBTWVNfSU5UICovCisjCWRlZmluZSBRSUNfREVGQVVMVF9NQVNLMAkofihRSUNfQ01OX0lOVCAvKiB8IFZJQ19TWVNfSU5UICovKSkKKyNkZWZpbmUgUUlDX01BU0tfUkVHSVNURVIxCQkweEZDODEKKyMJZGVmaW5lIFFJQ19CT09UX0NQSV9NQVNLCTB4RkUKKy8qIEVuYWJsZSBDUEkncyAxLTYgaW5jbHVzaXZlICovCisjCWRlZmluZSBRSUNfQ1BJX0VOQUJMRQkJMHg4MQorCisjZGVmaW5lIFFJQ19JTlRFUlJVUFRfQ0xFQVIwCQkweEZDOEEKKyNkZWZpbmUgUUlDX0lOVEVSUlVQVF9DTEVBUjEJCTB4RkM4QgorCisvKiB0aGlzIGlzIHdoZXJlIHdlIHBsYWNlIHRoZSBDUEkgdmVjdG9ycyAqLworI2RlZmluZSBWSUNfREVGQVVMVF9DUElfQkFTRQkJMHhDMAorLyogdGhpcyBpcyB3aGVyZSB3ZSBwbGFjZSB0aGUgUUlDIENQSSB2ZWN0b3JzICovCisjZGVmaW5lIFFJQ19ERUZBVUxUX0NQSV9CQVNFCQkweEQwCisKKyNkZWZpbmUgVklDX0JPT1RfSU5URVJSVVBUX01BU0sJCTB4ZmUKKworZXh0ZXJuIHZvaWQgc21wX3ZpY190aW1lcl9pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni92bTg2LmggYi9pbmNsdWRlL2FzbS1pMzg2L3ZtODYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGVjODJjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taTM4Ni92bTg2LmgKQEAgLTAsMCArMSwyMDggQEAKKyNpZm5kZWYgX0xJTlVYX1ZNODZfSAorI2RlZmluZSBfTElOVVhfVk04Nl9ICisKKy8qCisgKiBJJ20gZ3Vlc3NpbmcgYXQgdGhlIFZJRi9WSVAgZmxhZyB1c2FnZSwgYnV0IGhvcGUgdGhhdCB0aGlzIGlzIGhvdworICogdGhlIFBlbnRpdW0gdXNlcyB0aGVtLiBMaW51eCB3aWxsIHJldHVybiBmcm9tIHZtODYgbW9kZSB3aGVuIGJvdGgKKyAqIFZJRiBhbmQgVklQIGlzIHNldC4KKyAqCisgKiBPbiBhIFBlbnRpdW0sIHdlIGNvdWxkIHByb2JhYmx5IG9wdGltaXplIHRoZSB2aXJ0dWFsIGZsYWdzIGRpcmVjdGx5CisgKiBpbiB0aGUgZWZsYWdzIHJlZ2lzdGVyIGluc3RlYWQgb2YgZG9pbmcgaXQgImJ5IGhhbmQiIGluIHZmbGFncy4uLgorICoKKyAqIExpbnVzCisgKi8KKworI2RlZmluZSBURl9NQVNLCQkweDAwMDAwMTAwCisjZGVmaW5lIElGX01BU0sJCTB4MDAwMDAyMDAKKyNkZWZpbmUgSU9QTF9NQVNLCTB4MDAwMDMwMDAKKyNkZWZpbmUgTlRfTUFTSwkJMHgwMDAwNDAwMAorI2RlZmluZSBWTV9NQVNLCQkweDAwMDIwMDAwCisjZGVmaW5lIEFDX01BU0sJCTB4MDAwNDAwMDAKKyNkZWZpbmUgVklGX01BU0sJMHgwMDA4MDAwMAkvKiB2aXJ0dWFsIGludGVycnVwdCBmbGFnICovCisjZGVmaW5lIFZJUF9NQVNLCTB4MDAxMDAwMDAJLyogdmlydHVhbCBpbnRlcnJ1cHQgcGVuZGluZyAqLworI2RlZmluZSBJRF9NQVNLCQkweDAwMjAwMDAwCisKKyNkZWZpbmUgQklPU1NFRwkJMHgwZjAwMAorCisjZGVmaW5lIENQVV8wODYJCTAKKyNkZWZpbmUgQ1BVXzE4NgkJMQorI2RlZmluZSBDUFVfMjg2CQkyCisjZGVmaW5lIENQVV8zODYJCTMKKyNkZWZpbmUgQ1BVXzQ4NgkJNAorI2RlZmluZSBDUFVfNTg2CQk1CisKKy8qCisgKiBSZXR1cm4gdmFsdWVzIGZvciB0aGUgJ3ZtODYoKScgc3lzdGVtIGNhbGwKKyAqLworI2RlZmluZSBWTTg2X1RZUEUocmV0dmFsKQkoKHJldHZhbCkgJiAweGZmKQorI2RlZmluZSBWTTg2X0FSRyhyZXR2YWwpCSgocmV0dmFsKSA+PiA4KQorCisjZGVmaW5lIFZNODZfU0lHTkFMCTAJLyogcmV0dXJuIGR1ZSB0byBzaWduYWwgKi8KKyNkZWZpbmUgVk04Nl9VTktOT1dOCTEJLyogdW5oYW5kbGVkIEdQIGZhdWx0IC0gSU8taW5zdHJ1Y3Rpb24gb3Igc2ltaWxhciAqLworI2RlZmluZSBWTTg2X0lOVHgJMgkvKiBpbnQzL2ludCB4IGluc3RydWN0aW9uIChBUkcgPSB4KSAqLworI2RlZmluZSBWTTg2X1NUSQkzCS8qIHN0aS9wb3BmL2lyZXQgaW5zdHJ1Y3Rpb24gZW5hYmxlZCB2aXJ0dWFsIGludGVycnVwdHMgKi8KKworLyoKKyAqIEFkZGl0aW9uYWwgcmV0dXJuIHZhbHVlcyB3aGVuIGludm9raW5nIG5ldyB2bTg2KCkKKyAqLworI2RlZmluZSBWTTg2X1BJQ1JFVFVSTgk0CS8qIHJldHVybiBkdWUgdG8gcGVuZGluZyBQSUMgcmVxdWVzdCAqLworI2RlZmluZSBWTTg2X1RSQVAJNgkvKiByZXR1cm4gZHVlIHRvIERPUy1kZWJ1Z2dlciByZXF1ZXN0ICovCisKKy8qCisgKiBmdW5jdGlvbiBjb2RlcyB3aGVuIGludm9raW5nIG5ldyB2bTg2KCkKKyAqLworI2RlZmluZSBWTTg2X1BMVVNfSU5TVEFMTF9DSEVDSwkwCisjZGVmaW5lIFZNODZfRU5URVIJCTEKKyNkZWZpbmUgVk04Nl9FTlRFUl9OT19CWVBBU1MJMgorI2RlZmluZQlWTTg2X1JFUVVFU1RfSVJRCTMKKyNkZWZpbmUgVk04Nl9GUkVFX0lSUQkJNAorI2RlZmluZSBWTTg2X0dFVF9JUlFfQklUUwk1CisjZGVmaW5lIFZNODZfR0VUX0FORF9SRVNFVF9JUlEJNgorCisvKgorICogVGhpcyBpcyB0aGUgc3RhY2stbGF5b3V0IHNlZW4gYnkgdGhlIHVzZXIgc3BhY2UgcHJvZ3JhbSB3aGVuIHdlIGhhdmUKKyAqIGRvbmUgYSB0cmFuc2xhdGlvbiBvZiAiU0FWRV9BTEwiIGZyb20gdm04NiBtb2RlLiBUaGUgcmVhbCBrZXJuZWwgbGF5b3V0CisgKiBpcyAna2VybmVsX3ZtODZfcmVncycgKHNlZSBiZWxvdykuCisgKi8KKworc3RydWN0IHZtODZfcmVncyB7CisvKgorICogbm9ybWFsIHJlZ3MsIHdpdGggc3BlY2lhbCBtZWFuaW5nIGZvciB0aGUgc2VnbWVudCBkZXNjcmlwdG9ycy4uCisgKi8KKwlsb25nIGVieDsKKwlsb25nIGVjeDsKKwlsb25nIGVkeDsKKwlsb25nIGVzaTsKKwlsb25nIGVkaTsKKwlsb25nIGVicDsKKwlsb25nIGVheDsKKwlsb25nIF9fbnVsbF9kczsKKwlsb25nIF9fbnVsbF9lczsKKwlsb25nIF9fbnVsbF9mczsKKwlsb25nIF9fbnVsbF9nczsKKwlsb25nIG9yaWdfZWF4OworCWxvbmcgZWlwOworCXVuc2lnbmVkIHNob3J0IGNzLCBfX2NzaDsKKwlsb25nIGVmbGFnczsKKwlsb25nIGVzcDsKKwl1bnNpZ25lZCBzaG9ydCBzcywgX19zc2g7CisvKgorICogdGhlc2UgYXJlIHNwZWNpZmljIHRvIHY4NiBtb2RlOgorICovCisJdW5zaWduZWQgc2hvcnQgZXMsIF9fZXNoOworCXVuc2lnbmVkIHNob3J0IGRzLCBfX2RzaDsKKwl1bnNpZ25lZCBzaG9ydCBmcywgX19mc2g7CisJdW5zaWduZWQgc2hvcnQgZ3MsIF9fZ3NoOworfTsKKworc3RydWN0IHJldmVjdG9yZWRfc3RydWN0IHsKKwl1bnNpZ25lZCBsb25nIF9fbWFwWzhdOwkJCS8qIDI1NiBiaXRzICovCit9OworCitzdHJ1Y3Qgdm04Nl9zdHJ1Y3QgeworCXN0cnVjdCB2bTg2X3JlZ3MgcmVnczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgc2NyZWVuX2JpdG1hcDsKKwl1bnNpZ25lZCBsb25nIGNwdV90eXBlOworCXN0cnVjdCByZXZlY3RvcmVkX3N0cnVjdCBpbnRfcmV2ZWN0b3JlZDsKKwlzdHJ1Y3QgcmV2ZWN0b3JlZF9zdHJ1Y3QgaW50MjFfcmV2ZWN0b3JlZDsKK307CisKKy8qCisgKiBmbGFncyBtYXNrcworICovCisjZGVmaW5lIFZNODZfU0NSRUVOX0JJVE1BUAkweDAwMDEKKworc3RydWN0IHZtODZwbHVzX2luZm9fc3RydWN0IHsKKwl1bnNpZ25lZCBsb25nIGZvcmNlX3JldHVybl9mb3JfcGljOjE7CisJdW5zaWduZWQgbG9uZyB2bTg2ZGJnX2FjdGl2ZToxOyAgICAgICAvKiBmb3IgZGVidWdnZXIgKi8KKwl1bnNpZ25lZCBsb25nIHZtODZkYmdfVEZwZW5kaWc6MTsgICAgIC8qIGZvciBkZWJ1Z2dlciAqLworCXVuc2lnbmVkIGxvbmcgdW51c2VkOjI4OworCXVuc2lnbmVkIGxvbmcgaXNfdm04NnB1czoxOwkgICAgICAvKiBmb3Igdm04NiBpbnRlcm5hbCB1c2UgKi8KKwl1bnNpZ25lZCBjaGFyIHZtODZkYmdfaW50eHh0YWJbMzJdOyAgIC8qIGZvciBkZWJ1Z2dlciAqLworfTsKKworc3RydWN0IHZtODZwbHVzX3N0cnVjdCB7CisJc3RydWN0IHZtODZfcmVncyByZWdzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBzY3JlZW5fYml0bWFwOworCXVuc2lnbmVkIGxvbmcgY3B1X3R5cGU7CisJc3RydWN0IHJldmVjdG9yZWRfc3RydWN0IGludF9yZXZlY3RvcmVkOworCXN0cnVjdCByZXZlY3RvcmVkX3N0cnVjdCBpbnQyMV9yZXZlY3RvcmVkOworCXN0cnVjdCB2bTg2cGx1c19pbmZvX3N0cnVjdCB2bTg2cGx1czsKK307CisKKyNpZmRlZiBfX0tFUk5FTF9fCisvKgorICogVGhpcyBpcyB0aGUgKGtlcm5lbCkgc3RhY2stbGF5b3V0IHdoZW4gd2UgaGF2ZSBkb25lIGEgIlNBVkVfQUxMIiBmcm9tIHZtODYKKyAqIG1vZGUgLSB0aGUgbWFpbiBjaGFuZ2UgaXMgdGhhdCB0aGUgb2xkIHNlZ21lbnQgZGVzY3JpcHRvcnMgYXJlbid0CisgKiB1c2VmdWwgYW55IG1vcmUgYW5kIGFyZSBmb3JjZWQgdG8gYmUgemVybyBieSB0aGUga2VybmVsIChhbmQgdGhlCisgKiBoYXJkd2FyZSB3aGVuIGEgdHJhcCBvY2N1cnMpLCBhbmQgdGhlIHJlYWwgc2VnbWVudCBkZXNjcmlwdG9ycyBhcmUKKyAqIGF0IHRoZSBlbmQgb2YgdGhlIHN0cnVjdHVyZS4gTG9vayBhdCBwdHJhY2UuaCB0byBzZWUgdGhlICJub3JtYWwiCisgKiBzZXR1cC4gRm9yIHVzZXIgc3BhY2UgbGF5b3V0IHNlZSAnc3RydWN0IHZtODZfcmVncycgYWJvdmUuCisgKi8KKworc3RydWN0IGtlcm5lbF92bTg2X3JlZ3MgeworLyoKKyAqIG5vcm1hbCByZWdzLCB3aXRoIHNwZWNpYWwgbWVhbmluZyBmb3IgdGhlIHNlZ21lbnQgZGVzY3JpcHRvcnMuLgorICovCisJbG9uZyBlYng7CisJbG9uZyBlY3g7CisJbG9uZyBlZHg7CisJbG9uZyBlc2k7CisJbG9uZyBlZGk7CisJbG9uZyBlYnA7CisJbG9uZyBlYXg7CisJbG9uZyBfX251bGxfZHM7CisJbG9uZyBfX251bGxfZXM7CisJbG9uZyBvcmlnX2VheDsKKwlsb25nIGVpcDsKKwl1bnNpZ25lZCBzaG9ydCBjcywgX19jc2g7CisJbG9uZyBlZmxhZ3M7CisJbG9uZyBlc3A7CisJdW5zaWduZWQgc2hvcnQgc3MsIF9fc3NoOworLyoKKyAqIHRoZXNlIGFyZSBzcGVjaWZpYyB0byB2ODYgbW9kZToKKyAqLworCXVuc2lnbmVkIHNob3J0IGVzLCBfX2VzaDsKKwl1bnNpZ25lZCBzaG9ydCBkcywgX19kc2g7CisJdW5zaWduZWQgc2hvcnQgZnMsIF9fZnNoOworCXVuc2lnbmVkIHNob3J0IGdzLCBfX2dzaDsKK307CisKK3N0cnVjdCBrZXJuZWxfdm04Nl9zdHJ1Y3QgeworCXN0cnVjdCBrZXJuZWxfdm04Nl9yZWdzIHJlZ3M7CisvKgorICogdGhlIGJlbG93IHBhcnQgcmVtYWlucyBvbiB0aGUga2VybmVsIHN0YWNrIHdoaWxlIHdlIGFyZSBpbiBWTTg2IG1vZGUuCisgKiAndHNzLmVzcDAnIHRoZW4gY29udGFpbnMgdGhlIGFkZHJlc3Mgb2YgVk04Nl9UU1NfRVNQMCBiZWxvdywgYW5kIHdoZW4gd2UKKyAqIGdldCBmb3JjZWQgYmFjayBmcm9tIFZNODYsIHRoZSBDUFUgYW5kICJTQVZFX0FMTCIgd2lsbCByZXN0b3JlIHRoZSBhYm92ZQorICogJ3N0cnVjdCBrZXJuZWxfdm04Nl9yZWdzJyB3aXRoIHRoZSB0aGVuIGFjdHVhbCB2YWx1ZXMuCisgKiBUaGVyZWZvcmUsIHB0X3JlZ3MgaW4gZmFjdCBwb2ludHMgdG8gYSBjb21wbGV0ZSAna2VybmVsX3ZtODZfc3RydWN0JworICogaW4ga2VybmVsc3BhY2UsIGhlbmNlIHdlIG5lZWQgbm90IHJlZ2V0IHRoZSBkYXRhIGZyb20gdXNlcnNwYWNlLgorICovCisjZGVmaW5lIFZNODZfVFNTX0VTUDAgZmxhZ3MKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgc2NyZWVuX2JpdG1hcDsKKwl1bnNpZ25lZCBsb25nIGNwdV90eXBlOworCXN0cnVjdCByZXZlY3RvcmVkX3N0cnVjdCBpbnRfcmV2ZWN0b3JlZDsKKwlzdHJ1Y3QgcmV2ZWN0b3JlZF9zdHJ1Y3QgaW50MjFfcmV2ZWN0b3JlZDsKKwlzdHJ1Y3Qgdm04NnBsdXNfaW5mb19zdHJ1Y3Qgdm04NnBsdXM7CisJc3RydWN0IHB0X3JlZ3MgKnJlZ3MzMjsgICAvKiBoZXJlIHdlIHNhdmUgdGhlIHBvaW50ZXIgdG8gdGhlIG9sZCByZWdzICovCisvKgorICogVGhlIGJlbG93IGlzIG5vdCBwYXJ0IG9mIHRoZSBzdHJ1Y3R1cmUsIGJ1dCB0aGUgc3RhY2sgbGF5b3V0IGNvbnRpbnVlcworICogdGhpcyB3YXkuIEluIGZyb250IG9mICdyZXR1cm4tZWlwJyBtYXkgYmUgc29tZSBkYXRhLCBkZXBlbmRpbmcgb24KKyAqIGNvbXBpbGF0aW9uLCBzbyB3ZSBkb24ndCByZWx5IG9uIHRoaXMgYW5kIHNhdmUgdGhlIHBvaW50ZXIgdG8gJ29sZHJlZ3MnCisgKiBpbiAncmVnczMyJyBhYm92ZS4KKyAqIEhvd2V2ZXIsIHdpdGggR0NDLTIuNy4yIGFuZCB0aGUgY3VycmVudCBDRkxBR1MgeW91IHNlZSBleGFjdGx5IHRoaXM6CisKKwlsb25nIHJldHVybi1laXA7ICAgICAgICBmcm9tIGNhbGwgdG8gdm04NigpCisJc3RydWN0IHB0X3JlZ3Mgb2xkcmVnczsgIHVzZXIgc3BhY2UgcmVnaXN0ZXJzIGFzIHNhdmVkIGJ5IHN5c2NhbGwKKyAqLworfTsKKwordm9pZCBoYW5kbGVfdm04Nl9mYXVsdChzdHJ1Y3Qga2VybmVsX3ZtODZfcmVncyAqLCBsb25nKTsKK2ludCBoYW5kbGVfdm04Nl90cmFwKHN0cnVjdCBrZXJuZWxfdm04Nl9yZWdzICosIGxvbmcsIGludCk7CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni92b3lhZ2VyLmggYi9pbmNsdWRlL2FzbS1pMzg2L3ZveWFnZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWY0MzJkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taTM4Ni92b3lhZ2VyLmgKQEAgLTAsMCArMSw1MjEgQEAKKy8qIENvcHlyaWdodCAoQykgMTk5OSwyMDAxCisgKgorICogQXV0aG9yOiBKLkUuSi5Cb3R0b21sZXlASGFuc2VuUGFydG5lcnNoaXAuY29tCisgKgorICogU3RhbmRhcmQgaW5jbHVkZSBkZWZpbml0aW9ucyBmb3IgdGhlIE5DUiBWb3lhZ2VyIHN5c3RlbSAqLworCisjdW5kZWYJVk9ZQUdFUl9ERUJVRworI3VuZGVmCVZPWUFHRVJfQ0FUX0RFQlVHCisKKyNpZmRlZiBWT1lBR0VSX0RFQlVHCisjZGVmaW5lIFZERUJVRyh4KQlwcmludGsgeAorI2Vsc2UKKyNkZWZpbmUgVkRFQlVHKHgpCisjZW5kaWYKKworLyogVGhlcmUgYXJlIHRocmVlIGxldmVscyBvZiB2b3lhZ2VyIG1hY2hpbmU6IDMsNCBhbmQgNS4gVGhlIHJ1bGUgaXMKKyAqIGlmIGl0J3MgbGVzcyB0aGFuIDM0MzUgaXQncyBhIExldmVsIDMgZXhjZXB0IGZvciBhIDMzNjAgd2hpY2ggaXMKKyAqIGEgbGV2ZWwgNC4gIEEgMzQzNSBvciBhYm92ZSBpcyBhIExldmVsIDUgKi8KKyNkZWZpbmUgVk9ZQUdFUl9MRVZFTDVfQU5EX0FCT1ZFCTB4MzQzNQorI2RlZmluZSBWT1lBR0VSX0xFVkVMNAkJCTB4MzM2MAorCisvKiBUaGUgTDQgRElOTyBBU0lDICovCisjZGVmaW5lIFZPWUFHRVJfRElOTwkJCTB4NDMKKworLyogdm95YWdlciBwb3J0cyBpbiBzdGFuZGFyZCBJL08gc3BhY2UgKi8KKyNkZWZpbmUgVk9ZQUdFUl9NQ19TRVRVUAkweDk2CisKKworI2RlZmluZQlWT1lBR0VSX0NBVF9DT05GSUdfUE9SVAkJCTB4OTcKKyMJZGVmaW5lIFZPWUFHRVJfQ0FUX0RFU0VMRUNUCQkweGZmCisjZGVmaW5lIFZPWUFHRVJfU1NQQl9SRUxPQ0FUSU9OX1BPUlQJCTB4OTgKKworLyogVmFsaWQgQ0FUIGNvbnRyb2xsZXIgY29tbWFuZHMgKi8KKy8qIHN0YXJ0IGluc3RydWN0aW9uIHJlZ2lzdGVyIGN5Y2xlICovCisjZGVmaW5lIFZPWUFHRVJfQ0FUX0lSQ1lDCQkJMHgwMQorLyogc3RhcnQgZGF0YSByZWdpc3RlciBjeWNsZSAqLworI2RlZmluZSBWT1lBR0VSX0NBVF9EUkNZQwkJCTB4MDIKKy8qIG1vdmUgdG8gZXhlY3V0ZSBzdGF0ZSAqLworI2RlZmluZSBWT1lBR0VSX0NBVF9SVU4JCQkJMHgwRgorLyogZW5kIG9wZXJhdGlvbiAqLworI2RlZmluZSBWT1lBR0VSX0NBVF9FTkQJCQkJMHg4MAorLyogaG9sZCBpbiBpZGxlIHN0YXRlICovCisjZGVmaW5lIFZPWUFHRVJfQ0FUX0hPTEQJCQkweDkwCisvKiBzaW5nbGUgc3RlcCBhbiAiaW50ZXN0IiB2ZWN0b3IgKi8KKyNkZWZpbmUgVk9ZQUdFUl9DQVRfU1RFUAkJCTB4RTAKKy8qIHJldHVybiBjYXQgY29udHJvbGxlciB0byBDTEVNU09OIG1vZGUgKi8KKyNkZWZpbmUgVk9ZQUdFUl9DQVRfQ0xFTVNPTgkJCTB4RkYKKworLyogdGhlIGRlZmF1bHQgY2F0IGNvbW1hbmQgaGVhZGVyICovCisjZGVmaW5lIFZPWUFHRVJfQ0FUX0hFQURFUgkJCTB4N0YKKworLyogdGhlIHJhbmdlIG9mIHBvc3NpYmxlIENBVCBtb2R1bGUgaWRzIGluIHRoZSBzeXN0ZW0gKi8KKyNkZWZpbmUgVk9ZQUdFUl9NSU5fTU9EVUxFCQkJMHgxMAorI2RlZmluZSBWT1lBR0VSX01BWF9NT0RVTEUJCQkweDFmCisKKy8qIFRoZSB2b3lhZ2VyIHJlZ2lzdGVycyBwZXIgYXNpYyAqLworI2RlZmluZSBWT1lBR0VSX0FTSUNfSURfUkVHCQkJMHgwMAorI2RlZmluZSBWT1lBR0VSX0FTSUNfVFlQRV9SRUcJCQkweDAxCisvKiB0aGUgc3ViIGFkZHJlc3MgcmVnaXN0ZXJzIGNhbiBiZSBtYWRlIGF1dG8gaW5jcmVtZW50aW5nIG9uIHJlYWRzICovCisjZGVmaW5lIFZPWUFHRVJfQVVUT19JTkNfUkVHCQkJMHgwMgorIwlkZWZpbmUgVk9ZQUdFUl9BVVRPX0lOQwkJCTB4MDQKKyMJZGVmaW5lIFZPWUFHRVJfTk9fQVVUT19JTkMJCTB4ZmIKKyNkZWZpbmUgVk9ZQUdFUl9TVUJBRERSREFUQQkJCTB4MDMKKyNkZWZpbmUgVk9ZQUdFUl9TQ0FOUEFUSAkJCTB4MDUKKyMJZGVmaW5lIFZPWUFHRVJfQ09OTkVDVF9BU0lDCQkweDAxCisjCWRlZmluZSBWT1lBR0VSX0RJU0NPTk5FQ1RfQVNJQwkJMHhmZQorI2RlZmluZSBWT1lBR0VSX1NVQkFERFJMTwkJCTB4MDYKKyNkZWZpbmUgVk9ZQUdFUl9TVUJBRERSSEkJCQkweDA3CisjZGVmaW5lIFZPWUFHRVJfU1VCTU9EU0VMRUNUCQkJMHgwOAorI2RlZmluZSBWT1lBR0VSX1NVQk1PRFBSRVNFTlQJCQkweDA5CisKKyNkZWZpbmUgVk9ZQUdFUl9TVUJBRERSX0xPCQkJMHhmZgorI2RlZmluZSBWT1lBR0VSX1NVQkFERFJfSEkJCQkweGZmZmYKKworLyogdGhlIG1heGltdW0gc2l6ZSBvZiBhIHNjYW4gcGF0aCAtLSB1c2VkIHRvIGZvcm0gaW5zdHJ1Y3Rpb25zICovCisjZGVmaW5lIFZPWUFHRVJfTUFYX1NDQU5fUEFUSAkJCTB4MTAwCisvKiB0aGUgYmlnZ2VzdCBwb3NzaWJsZSByZWdpc3RlciBzaXplIChpbiBieXRlcykgKi8KKyNkZWZpbmUgVk9ZQUdFUl9NQVhfUkVHX1NJWkUJCQk0CisKKy8qIFRvdGFsIG51bWJlciBvZiBwb3NzaWJsZSBtb2R1bGVzIChpbmNsdWRpbmcgc3VibW9kdWxlcykgKi8KKyNkZWZpbmUgVk9ZQUdFUl9NQVhfTU9EVUxFUwkJCTE2CisvKiBMYXJnZXN0IG51bWJlciBvZiBhc2ljcyBwZXIgbW9kdWxlICovCisjZGVmaW5lIFZPWUFHRVJfTUFYX0FTSUNTX1BFUl9NT0RVTEUJCTcKKworLyogdGhlIENBVCBhc2ljIG9mIGVhY2ggbW9kdWxlIGlzIGFsd2F5cyB0aGUgZmlyc3Qgb25lICovCisjZGVmaW5lIFZPWUFHRVJfQ0FUX0lECQkJCTAKKyNkZWZpbmUgVk9ZQUdFUl9QU0kJCQkJMHgxYQorCisvKiB2b3lhZ2VyIGluc3RydWN0aW9uIG9wZXJhdGlvbnMgYW5kIHJlZ2lzdGVycyAqLworI2RlZmluZSBWT1lBR0VSX1JFQURfQ09ORklHCQkJMHgxCisjZGVmaW5lIFZPWUFHRVJfV1JJVEVfQ09ORklHCQkJMHgyCisjZGVmaW5lIFZPWUFHRVJfQllQQVNTCQkJCTB4ZmYKKwordHlwZWRlZiBzdHJ1Y3Qgdm95YWdlcl9hc2ljIAoreworCV9fdTgJYXNpY19hZGRyOwkvKiBBU0lDIGFkZHJlc3M7IExldmVsIDQgKi8KKwlfX3U4CWFzaWNfdHlwZTsgICAgICAvKiBBU0lDIHR5cGUgKi8KKwlfX3U4CWFzaWNfaWQ7CS8qIEFTSUMgaWQgKi8KKwlfX3U4CWp0YWdfaWRbNF07CS8qIEpUQUcgaWQgKi8KKwlfX3U4CWFzaWNfbG9jYXRpb247CS8qIExvY2F0aW9uIHdpdGhpbiBzY2FuIHBhdGg7IHN0YXJ0IHcvIDAgKi8KKwlfX3U4CWJpdF9sb2NhdGlvbjsJLyogTG9jYXRpb24gd2l0aGluIGJpdCBzdHJlYW07IHN0YXJ0IHcvIDAgKi8KKwlfX3U4CWlyZWdfbGVuZ3RoOwkvKiBJbnN0cnVjdGlvbiByZWdpc3RlciBsZW5ndGggKi8KKwlfX3UxNglzdWJhZGRyOwkvKiBBbW91bnQgb2Ygc3ViIGFkZHJlc3Mgc3BhY2UgKi8KKwlzdHJ1Y3Qgdm95YWdlcl9hc2ljICpuZXh0OwkvKiBOZXh0IGFzaWMgaW4gbGlua2VkIGxpc3QgKi8KK30gdm95YWdlcl9hc2ljX3Q7CisKK3R5cGVkZWYgc3RydWN0IHZveWFnZXJfbW9kdWxlIHsKKwlfX3U4CW1vZHVsZV9hZGRyOwkJLyogTW9kdWxlIGFkZHJlc3MgKi8KKwlfX3U4CXNjYW5fcGF0aF9jb25uZWN0ZWQ7CS8qIFNjYW4gcGF0aCBjb25uZWN0ZWQgKi8KKwlfX3UxNiAgIGVlX3NpemU7CQkvKiBTaXplIG9mIHRoZSBFRVBST00gKi8KKwlfX3UxNiAgIG51bV9hc2ljczsJCS8qIE51bWJlciBvZiBBc2ljcyAqLworCV9fdTE2ICAgaW5zdF9iaXRzOwkJLyogSW5zdHJ1Y3Rpb24gYml0cyBpbiB0aGUgc2NhbiBwYXRoICovCisJX191MTYgICBsYXJnZXN0X3JlZzsJCS8qIExhcmdlc3QgcmVnaXN0ZXIgaW4gdGhlIHNjYW4gcGF0aCAqLworCV9fdTE2ICAgc21hbGxlc3RfcmVnOwkJLyogU21hbGxlc3QgcmVnaXN0ZXIgaW4gdGhlIHNjYW4gcGF0aCAqLworCXZveWFnZXJfYXNpY190ICAgKmFzaWM7CQkvKiBGaXJzdCBBU0lDIGluIHNjYW4gcGF0aCAoQ0FUX0kpICovCisJc3RydWN0ICAgdm95YWdlcl9tb2R1bGUgKnN1Ym1vZHVsZTsJLyogU3VibW9kdWxlIHBvaW50ZXIgKi8gCisJc3RydWN0ICAgdm95YWdlcl9tb2R1bGUgKm5leHQ7CQkvKiBOZXh0IG1vZHVsZSBpbiBsaW5rZWQgbGlzdCAqLworfSB2b3lhZ2VyX21vZHVsZV90OworCit0eXBlZGVmIHN0cnVjdCB2b3lhZ2VyX2VlcHJvbV9oZHIgeworCSBfX3U4ICBtb2R1bGVfaWRbNF0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7IAorCSBfX3U4ICB2ZXJzaW9uX2lkIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCSBfX3U4ICBjb25maWdfaWQgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7IAorCSBfX3UxNiBib3VuZHJ5X2lkIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwkvKiBib3VuZGFyeSBzY2FuIGlkICovCisJIF9fdTE2IGVlX3NpemUgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CQkvKiBzaXplIG9mIEVFUFJPTSAqLworCSBfX3U4ICBhc3NlbWJseVsxMV0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CS8qIGFzc2VtYmx5ICMgKi8KKwkgX191OCAgYXNzZW1ibHlfcmV2IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwkvKiBhc3NlbWJseSByZXYgKi8KKwkgX191OCAgdHJhY2VyWzRdIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwkvKiB0cmFjZXIgbnVtYmVyICovCisJIF9fdTE2IGFzc2VtYmx5X2Nrc3VtIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwkvKiBhc20gY2hlY2tzdW0gKi8KKwkgX191MTYgcG93ZXJfY29uc3VtcCBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsJLyogcHdyIHJlcXVpcmVtZW50cyAqLworCSBfX3UxNiBudW1fYXNpY3MgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CS8qIG51bWJlciBvZiBhc2ljcyAqLworCSBfX3UxNiBiaXN0X3RpbWUgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CS8qIG1pbi4gYmlzdCB0aW1lICovCisJIF9fdTE2IGVycl9sb2dfb2Zmc2V0IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwkvKiBlcnJvciBsb2cgb2Zmc2V0ICovCisJIF9fdTE2IHNjYW5fcGF0aF9vZmZzZXQgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Lyogc2NhbiBwYXRoIG9mZnNldCAqLworCSBfX3UxNiBjY3Rfb2Zmc2V0IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCSBfX3UxNiBsb2dfbGVuZ3RoIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwkvKiBsZW5ndGggb2YgZXJyIGxvZyAqLworCSBfX3UxNiB4c3VtX2VuZCBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsJLyogb2Zmc2V0IHRvIGVuZCBvZgorCQkJCQkJCSAgIGNoZWNrc3VtICovCisJIF9fdTggIHJlc2VydmVkWzRdIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCSBfX3U4ICBzZmxhZyBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsJCS8qIHN0YXJ0aW5nIHNlbnRpbmFsICovCisJIF9fdTggIHBhcnRfbnVtYmVyWzEzXSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsJLyogcHJvbSBwYXJ0IG51bWJlciAqLworCSBfX3U4ICB2ZXJzaW9uWzEwXSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsJLyogdmVyc2lvbiBudW1iZXIgKi8KKwkgX191OCAgc2lnbmF0dXJlWzhdIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCSBfX3UxNiBlZXByb21fY2hrc3VtIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCSBfX3UzMiAgZGF0YV9zdGFtcF9vZmZzZXQgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisJIF9fdTggIGVmbGFnICBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsJCSAvKiBlbmRpbmcgc2VudGluYWwgKi8KK30gdm95YWdlcl9lcHJvbV9oZHJfdDsKKworCisKKyNkZWZpbmUgVk9ZQUdFUl9FUFJPTV9TSVpFX09GRlNFVCAgICgoX191MTYpKCYoKCh2b3lhZ2VyX2Vwcm9tX2hkcl90ICopMCktPmVlX3NpemUpKSkKKyNkZWZpbmUgVk9ZQUdFUl9YU1VNX0VORF9PRkZTRVQJCTB4MmEKKworLyogdGhlIGZvbGxvd2luZyB0aHJlZSBkZWZpbml0aW9ucyBhcmUgZm9yIGludGVybmFsIHRhYmxlIGxheW91dHMKKyAqIGluIHRoZSBtb2R1bGUgRVBST01zLiAgV2UgcmVhbGx5IG9ubHkgY2FyZSBhYm91dCB0aGUgSURzIGFuZAorICogb2Zmc2V0cyAqLwordHlwZWRlZiBzdHJ1Y3Qgdm95YWdlcl9zcF90YWJsZSB7CisJX191OCBhc2ljX2lkIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCV9fdTggYnlwYXNzX2ZsYWcgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisJX191MTYgYXNpY19kYXRhX29mZnNldCBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwlfX3UxNiBjb25maWdfZGF0YV9vZmZzZXQgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9IHZveWFnZXJfc3BfdGFibGVfdDsKKwordHlwZWRlZiBzdHJ1Y3Qgdm95YWdlcl9qdGFnX3RhYmxlIHsKKwlfX3U4IGljb2RlWzRdIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCV9fdTggcnVuYmlzdFs0XSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwlfX3U4IGludGVzdFs0XSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwlfX3U4IHNhbXBfcHJlbGRbNF0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisJX191OCBpcmVnX2xlbiBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK30gdm95YWdlcl9qdHRfdDsKKwordHlwZWRlZiBzdHJ1Y3Qgdm95YWdlcl9hc2ljX2RhdGFfdGFibGUgeworCV9fdTgganRhZ19pZFs0XSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwlfX3UxNiBsZW5ndGhfYnNyIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCV9fdTE2IGxlbmd0aF9iaXN0X3JlZyBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwlfX3UzMiBiaXN0X2NsayBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwlfX3UxNiBzdWJhZGRyX2JpdHMgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisJX191MTYgc2VlZF9iaXRzIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCV9fdTE2IHNpZ19iaXRzIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCV9fdTE2IGp0YWdfb2Zmc2V0IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSB2b3lhZ2VyX2F0X3Q7CisKKy8qIFZveWFnZXIgSW50ZXJydXB0IENvbnRyb2xsZXIgKFZJQykgcmVnaXN0ZXJzICovCisKKy8qIEJhc2UgdG8gYWRkIHRvIENyb3NzIFByb2Nlc3NvciBJbnRlcnJ1cHRzIChDUElzKSB3aGVuIHRyaWdnZXJpbmcKKyAqIHRoZSBDUFUgSVJRIGxpbmUgKi8KKy8qIHJlZ2lzdGVyIGRlZmluZXMgZm9yIHRoZSBXQ0JJQ3MgKG9uZSBwZXIgcHJvY2Vzc29yKSAqLworI2RlZmluZSBWT1lBR0VSX1dDQklDMAkweDQxCQkvKiBidXMgQSBub2RlIFAxIHByb2Nlc3NvciAwICovCisjZGVmaW5lIFZPWUFHRVJfV0NCSUMxCTB4NDkJCS8qIGJ1cyBBIG5vZGUgUDEgcHJvY2Vzc29yIDEgKi8KKyNkZWZpbmUgVk9ZQUdFUl9XQ0JJQzIJMHg1MQkJLyogYnVzIEEgbm9kZSBQMiBwcm9jZXNzb3IgMCAqLworI2RlZmluZSBWT1lBR0VSX1dDQklDMwkweDU5CQkvKiBidXMgQSBub2RlIFAyIHByb2Nlc3NvciAxICovCisjZGVmaW5lIFZPWUFHRVJfV0NCSUM0CTB4NjEJCS8qIGJ1cyBCIG5vZGUgUDEgcHJvY2Vzc29yIDAgKi8KKyNkZWZpbmUgVk9ZQUdFUl9XQ0JJQzUJMHg2OQkJLyogYnVzIEIgbm9kZSBQMSBwcm9jZXNzb3IgMSAqLworI2RlZmluZSBWT1lBR0VSX1dDQklDNgkweDcxCQkvKiBidXMgQiBub2RlIFAyIHByb2Nlc3NvciAwICovCisjZGVmaW5lIFZPWUFHRVJfV0NCSUM3CTB4NzkJCS8qIGJ1cyBCIG5vZGUgUDIgcHJvY2Vzc29yIDEgKi8KKworCisvKiB0b3Agb2YgbWVtb3J5IHJlZ2lzdGVycyAqLworI2RlZmluZSBWT1lBR0VSX1dDQklDX1RPTV9MCTB4NAorI2RlZmluZSBWT1lBR0VSX1dDQklDX1RPTV9ICTB4NQorCisvKiByZWdpc3RlciBkZWZpbmVzIGZvciBWb3lhZ2VyIE1lbW9yeSBDb250b2wgKFZNQykgCisgKiB0aGVzZSBhcmUgcHJlc2VudCBvbiBMNCBtYWNoaW5lcyBvbmx5ICovCisjZGVmaW5lCVZPWUFHRVJfVk1DMQkJMHg4MQorI2RlZmluZSBWT1lBR0VSX1ZNQzIJCTB4OTEKKyNkZWZpbmUgVk9ZQUdFUl9WTUMzCQkweGExCisjZGVmaW5lIFZPWUFHRVJfVk1DNAkJMHhiMQorCisvKiBWTUMgUG9ydHMgKi8KKyNkZWZpbmUgVk9ZQUdFUl9WTUNfTUVNT1JZX1NFVFVQCTB4OQorIwlkZWZpbmUgVk1DX0ludGVybGVhdmluZwkJMHgwMQorIwlkZWZpbmUgVk1DXzRXYXkJCQkweDAyCisjCWRlZmluZSBWTUNfRXZlbkNhY2hlTGluZXMJMHgwNAorIwlkZWZpbmUgVk1DX0hpZ2hMaW5lCQkweDA4CisjCWRlZmluZSBWTUNfU3RhcnQwX0VuYWJsZQkweDIwCisjCWRlZmluZSBWTUNfU3RhcnQxX0VuYWJsZQkweDQwCisjCWRlZmluZSBWTUNfVnJlbWFwCQkweDgwCisjZGVmaW5lIFZPWUFHRVJfVk1DX0JBTktfREVOU0lUWQkweGEKKyMJZGVmaW5lCVZNQ19CQU5LX0VNUFRZCQkwCisjCWRlZmluZQlWTUNfQkFOS180TUIJCTEKKyMJZGVmaW5lCVZNQ19CQU5LXzE2TUIJCTIKKyMJZGVmaW5lCVZNQ19CQU5LXzY0TUIJCTMKKyMJZGVmaW5lCVZNQ19CQU5LMF9NQVNLCQkweDAzCisjCWRlZmluZQlWTUNfQkFOSzFfTUFTSwkJMHgwQworIwlkZWZpbmUJVk1DX0JBTksyX01BU0sJCTB4MzAKKyMJZGVmaW5lCVZNQ19CQU5LM19NQVNLCQkweEMwCisKKy8qIE1hZ2VsbGFuIE1lbW9yeSBDb250cm9sbGVyIChNTUMpIGRlZmluZXMgLSBwcmVzZW50IG9uIEw1ICovCisjZGVmaW5lIFZPWUFHRVJfTU1DX0FTSUNfSUQJCTEKKy8qIHRoZSB0d28gbWVtb3J5IG1vZHVsZXMgY29ycmVzcG9uZGluZyB0byBtZW1vcnkgY2FyZHMgaW4gdGhlIHN5c3RlbSAqLworI2RlZmluZSBWT1lBR0VSX01NQ19NRU1PUlkwX01PRFVMRQkweDE0CisjZGVmaW5lIFZPWUFHRVJfTU1DX01FTU9SWTFfTU9EVUxFCTB4MTUKKy8qIHRoZSBNYWdlbGxhbiBNZW1vcnkgQWRkcmVzcyAoTU1BKSBkZWZpbmVzICovCisjZGVmaW5lIFZPWUFHRVJfTU1BX0FTSUNfSUQJCTIKKworLyogU3VibW9kdWxlIG51bWJlciBmb3IgdGhlIFF1YWQgQmFzZWJvYXJkICovCisjZGVmaW5lIFZPWUFHRVJfUVVBRF9CQVNFQk9BUkQJCTEKKworLyogQVNJQyBkZWZpbmVzIGZvciB0aGUgUXVhZCBCYXNlYm9hcmQgKi8KKyNkZWZpbmUgVk9ZQUdFUl9RVUFEX1FEQVRBMAkJMQorI2RlZmluZSBWT1lBR0VSX1FVQURfUURBVEExCQkyCisjZGVmaW5lIFZPWUFHRVJfUVVBRF9RQUJDCQkzCisKKy8qIFVzZWZ1bCBhcmVhcyBpbiBleHRlbmRlZCBDTU9TICovCisjZGVmaW5lIFZPWUFHRVJfUFJPQ0VTU09SX1BSRVNFTlRfTUFTSwkweDg4YQorI2RlZmluZSBWT1lBR0VSX01FTU9SWV9DTElDS01BUAkJMHhhMjMKKyNkZWZpbmUgVk9ZQUdFUl9EVU1QX0xPQ0FUSU9OCQkweGIxYQorCisvKiBTVVMgSW4gQ29udHJvbCBiaXQgLSB1c2VkIHRvIHRlbGwgU1VTIHRoYXQgd2UgZG9uJ3QgbmVlZCB0byBiZQorICogYmFieXNhdCBhbnltb3JlICovCisjZGVmaW5lIFZPWUFHRVJfU1VTX0lOX0NPTlRST0xfUE9SVAkweDNmZgorIwlkZWZpbmUgVk9ZQUdFUl9JTl9DT05UUk9MX0ZMQUcJMHg4MAorCisvKiBWb3lhZ2VyIFBTSSBkZWZpbmVzICovCisjZGVmaW5lIFZPWUFHRVJfUFNJX1NUQVRVU19SRUcJCTB4MDgKKyMJZGVmaW5lIFBTSV9EQ19GQUlMCQkweDAxCisjCWRlZmluZSBQU0lfTU9OCQkJMHgwMgorIwlkZWZpbmUgUFNJX0ZBVUxUCQkweDA0CisjCWRlZmluZSBQU0lfQUxBUk0JCTB4MDgKKyMJZGVmaW5lIFBTSV9DVVJSRU5UCQkweDEwCisjCWRlZmluZSBQU0lfRFZNCQkJMHgyMAorIwlkZWZpbmUgUFNJX1BTQ0ZBVUxUCQkweDQwCisjCWRlZmluZSBQU0lfU1RBVF9DSEcJCTB4ODAKKworI2RlZmluZSBWT1lBR0VSX1BTSV9TVVBQTFlfUkVHCQkweDgwMDAKKwkvKiByZWFkICovCisjCWRlZmluZSBQU0lfRkFJTF9EQwkJMHgwMQorIwlkZWZpbmUgUFNJX0ZBSUxfQUMJCTB4MDIKKyMJZGVmaW5lIFBTSV9NT05fSU5UCQkweDA0CisjCWRlZmluZSBQU0lfU1dJVENIX09GRgkJMHgwOAorIwlkZWZpbmUgUFNJX0hYX09GRgkJMHgxMAorIwlkZWZpbmUgUFNJX1NFQ1VSSVRZCQkweDIwCisjCWRlZmluZSBQU0lfQ01PU19CQVRUX0xPVwkweDQwCisjCWRlZmluZSBQU0lfQ01PU19CQVRUX0ZBSUwJMHg4MAorCS8qIHdyaXRlICovCisjCWRlZmluZSBQU0lfQ0xSX1NXSVRDSF9PRkYJMHgxMworIwlkZWZpbmUgUFNJX0NMUl9IWF9PRkYJCTB4MTQKKyMJZGVmaW5lIFBTSV9DTFJfQ01PU19CQVRUX0ZBSUwJMHgxNworCisjZGVmaW5lIFZPWUFHRVJfUFNJX01BU0sJCTB4ODAwMQorIwlkZWZpbmUgUFNJX01BU0tfTUFTSwkJMHgxMAorCisjZGVmaW5lIFZPWUFHRVJfUFNJX0FDX0ZBSUxfUkVHCQkweDgwMDQKKyNkZWZpbmUJQUNfRkFJTF9TVEFUX0NIQU5HRQkJMHg4MAorCisjZGVmaW5lIFZPWUFHRVJfUFNJX0dFTkVSQUxfUkVHCQkweDgwMDcKKwkvKiByZWFkICovCisjCWRlZmluZSBQU0lfU1dJVENIX09OCQkweDAxCisjCWRlZmluZSBQU0lfU1dJVENIX0VOQUJMRUQJMHgwMgorIwlkZWZpbmUgUFNJX0FMQVJNX0VOQUJMRUQJMHgwOAorIwlkZWZpbmUgUFNJX1NFQ1VSRV9FTkFCTEVECTB4MTAKKyMJZGVmaW5lIFBTSV9DT0xEX1JFU0VUCQkweDIwCisjCWRlZmluZSBQU0lfQ09MRF9TVEFSVAkJMHg4MAorCS8qIHdyaXRlICovCisjCWRlZmluZSBQU0lfUE9XRVJfRE9XTgkJMHgxMAorIwlkZWZpbmUgUFNJX1NXSVRDSF9ESVNBQkxFCTB4MDEKKyMJZGVmaW5lIFBTSV9TV0lUQ0hfRU5BQkxFCTB4MTEKKyMJZGVmaW5lIFBTSV9DTEVBUgkJMHgxMgorIwlkZWZpbmUgUFNJX0FMQVJNX0RJU0FCTEUJMHgwMworIwlkZWZpbmUgUFNJX0FMQVJNX0VOQUJMRQkJMHgxMworIwlkZWZpbmUgUFNJX0NMRUFSX0NPTERfUkVTRVQJMHgwNQorIwlkZWZpbmUgUFNJX1NFVF9DT0xEX1JFU0VUCTB4MTUKKyMJZGVmaW5lIFBTSV9DTEVBUl9DT0xEX1NUQVJUCTB4MDcKKyMJZGVmaW5lIFBTSV9TRVRfQ09MRF9TVEFSVAkweDE3CisKKworCitzdHJ1Y3Qgdm95YWdlcl9iaW9zX2luZm8geworCV9fdTgJbGVuOworCV9fdTgJbWFqb3I7CisJX191OAltaW5vcjsKKwlfX3U4CWRlYnVnOworCV9fdTgJbnVtX2NsYXNzZXM7CisJX191OAljbGFzc18xOworCV9fdTgJY2xhc3NfMjsKK307CisKKy8qIFRoZSBmb2xsb3dpbmcgc3RydWN0dXJlcyBhbmQgZGVmaW5pdGlvbnMgYXJlIGZvciB0aGUgS2VybmVsL1NVUworICogaW50ZXJmYWNlIHRoZXNlIGFyZSBuZWVkZWQgdG8gZmluZCBvdXQgaG93IFNVUyBpbml0aWFsaXNlZCBhbnkgUXVhZAorICogYm9hcmRzIGluIHRoZSBzeXN0ZW0gKi8KKworI2RlZmluZQlOVU1CRVJfT0ZfTUNfQlVTU0VTCTIKKyNkZWZpbmUgU0xPVFNfUEVSX01DX0JVUwk4CisjZGVmaW5lIE1BWF9DUFVTICAgICAgICAgICAgICAgIDE2ICAgICAgLyogMTYgd2F5IENQVSBzeXN0ZW0gKi8KKyNkZWZpbmUgTUFYX1BST0NFU1NPUl9CT0FSRFMJNAkvKiA0IHByb2Nlc3NvciBzbG90IHN5c3RlbSAqLworI2RlZmluZSBNQVhfQ0FDSEVfTEVWRUxTCTQJLyogIyBvZiBjYWNoZSBsZXZlbHMgc3VwcG9ydGVkICovCisjZGVmaW5lIE1BWF9TSEFSRURfQ1BVUwkJNAkvKiAjIG9mIENQVXMgdGhhdCBjYW4gc2hhcmUgYSBMQVJDICovCisjZGVmaW5lIE5VTUJFUl9PRl9QT1NfUkVHUwk4CisKK3R5cGVkZWYgc3RydWN0IHsKKwlfX3U4CU1DX1Nsb3QgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisJX191OAlQT1NfVmFsdWVzW05VTUJFUl9PRl9QT1NfUkVHU10gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9IE1DX1Nsb3RJbmZvcm1hdGlvbl90OworCitzdHJ1Y3QgUXVhZERlc2NyaXB0aW9uIHsKKwlfX3U4ICBUeXBlIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwkvKiBmb3IgdHlwZSAwIChEWUFESUMgb3IgTU9OQURJQykgYWxsIGZpZWxkcworICAgICAgICAgICAgICAgICAgICAgICAgICogd2lsbCBiZSB6ZXJvIGV4Y2VwdCBmb3Igc2xvdCAqLworCV9fdTggU3RydWN0dXJlVmVyc2lvbiBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwlfX3UzMiBDUElfQmFzZUFkZHJlc3MgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisJX191MzIgIExBUkNfQmFua1NpemUgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CQorCV9fdTMyIExvY2FsTWVtb3J5U3RhdGVCaXRzIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCV9fdTggIFNsb3QgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7IC8qIFByb2Nlc3NvciBzbG90cyAxIC0gNCAqLworfTsgCisKK3N0cnVjdCBQcm9jQm9hcmRJbmZvIHsgCisJX191OCBUeXBlIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOyAgICAKKwlfX3U4IFN0cnVjdHVyZVZlcnNpb24gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisJX191OCBOdW1iZXJPZkJvYXJkcyBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwlzdHJ1Y3QgUXVhZERlc2NyaXB0aW9uIFF1YWREYXRhW01BWF9QUk9DRVNTT1JfQk9BUkRTXSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK307CisKK3N0cnVjdCBDYWNoZURlc2NyaXB0aW9uIHsKKwlfX3U4IExldmVsIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCV9fdTMyIFRvdGFsU2l6ZSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwlfX3UxNiBMaW5lU2l6ZSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwlfX3U4ICBBc3NvY2lhdGl2aXR5IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCV9fdTggIENhY2hlVHlwZSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwlfX3U4ICBXcml0ZVR5cGUgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisJX191OCAgTnVtYmVyX0NQVXNfU2hhcmVkQnkgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisJX191OCAgU2hhcmVkX0NQVXNfSGFyZHdhcmVfSURzW01BWF9TSEFSRURfQ1BVU10gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK307CisKK3N0cnVjdCBDUFVfRGVzY3JpcHRpb24geworCV9fdTggQ1BVX0hhcmR3YXJlSWQgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisJY2hhciAqRlJVX1N0cmluZyBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwlfX3U4IE51bWJlck9mQ2FjaGVMZXZlbHMgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisJc3RydWN0IENhY2hlRGVzY3JpcHRpb24gQ2FjaGVMZXZlbERhdGFbTUFYX0NBQ0hFX0xFVkVMU10gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9OworCitzdHJ1Y3QgQ1BVX0luZm8geworCV9fdTggVHlwZSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwlfX3U4IFN0cnVjdHVyZVZlcnNpb24gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisJX191OCBOdW1iZXJPZl9DUFVzIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCXN0cnVjdCBDUFVfRGVzY3JpcHRpb24gQ1BVX0RhdGFbTUFYX0NQVVNdIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfTsKKworCisvKgorICogVGhpcyBzdHJ1Y3R1cmUgd2lsbCBiZSB1c2VkIGJ5IFNVUyBhbmQgdGhlIE9TLgorICogVGhlIGFzc3VtcHRpb24gYWJvdXQgdGhpcyBzdHJ1Y3R1cmUgaXMgdGhhdCBubyBibGFuayBzcGFjZSBpcworICogcGFja2VkIGluIGl0IGJ5IG91ciBmcmllbmQgdGhlIGNvbXBpbGVyLgorICovCit0eXBlZGVmIHN0cnVjdCB7CisJX191OAlNYWlsYm94X1NVUzsJCS8qIFdyaXR0ZW4gdG8gYnkgU1VTIHRvIGdpdmUgY29tbWFuZHMvcmVzcG9uc2UgdG8gdGhlIE9TICovCisJX191OAlNYWlsYm94X09TOwkJLyogV3JpdHRlbiB0byBieSB0aGUgT1MgdG8gZ2l2ZSBjb21tYW5kcy9yZXNwb25zZSB0byBTVVMgKi8KKwlfX3U4CVNVU19NYWlsYm94VmVyc2lvbjsJLyogVGVsbHMgdGhlIE9TIHdoaWNoIGl0ZXJhdGlvbiBvZiB0aGUgaW50ZXJmYWNlIFNVUyBzdXBwb3J0cyAqLworCV9fdTgJT1NfTWFpbGJveFZlcnNpb247CS8qIFRlbGxzIFNVUyB3aGljaCBpdGVyYXRpb24gb2YgdGhlIGludGVyZmFjZSB0aGUgT1Mgc3VwcG9ydHMgKi8KKwlfX3UzMglPU19GbGFnczsJCS8qIEZsYWdzIHNldCBieSB0aGUgT1MgYXMgaW5mbyBmb3IgU1VTICovCisJX191MzIJU1VTX0ZsYWdzOwkJLyogRmxhZ3Mgc2V0IGJ5IFNVUyBhcyBpbmZvIGZvciB0aGUgT1MgKi8KKwlfX3UzMglXYXRjaERvZ1BlcmlvZDsJCS8qIFdhdGNoZG9nIHBlcmlvZCAoaW4gc2Vjb25kcykgd2hpY2ggdGhlIERQIHVzZXMgdG8gc2VlIGlmIHRoZSBPUyBpcyBkZWFkICovCisJX191MzIJV2F0Y2hEb2dDb3VudDsJCS8qIFVwZGF0ZWQgYnkgdGhlIE9TIG9uIGV2ZXJ5IHRpYy4gKi8KKwlfX3UzMglNZW1vcnlGb3JfU1VTX0Vycm9yTG9nOwkvKiBGbGF0IDMyIGJpdCBhZGRyZXNzIHdoaWNoIHRlbGxzIFNVUyB3aGVyZSB0byBzdHVmZiB0aGUgU1VTIGVycm9yIGxvZyBvbiBhIGR1bXAgKi8KKwlNQ19TbG90SW5mb3JtYXRpb25fdCAgTUNfU2xvdEluZm9bTlVNQkVSX09GX01DX0JVU1NFUypTTE9UU19QRVJfTUNfQlVTXTsJLyogU3RvcmFnZSBmb3IgTUNBIFBPUyBkYXRhICovCisJLyogQWxsIG5ldyBTRUNPTkRfUEFTU19JTlRFUkZBQ0UgZmllbGRzIGFkZGVkIGZyb20gdGhpcyBwb2ludCAqLworICAgICAgICBzdHJ1Y3QgUHJvY0JvYXJkSW5mbyAgICAqQm9hcmREYXRhOworICAgICAgICBzdHJ1Y3QgQ1BVX0luZm8gICAgICAgICAqQ1BVX0RhdGE7CisJLyogQWxsIG5ldyBmaWVsZHMgbXVzdCBiZSBhZGRlZCBmcm9tIHRoaXMgcG9pbnQgKi8KK30gVm95YWdlcl9LZXJuZWxTVVNfTWJveF90OworCisvKiBzdHJ1Y3R1cmUgZm9yIGZpbmRpbmcgdGhlIHJpZ2h0IG1lbW9yeSBhZGRyZXNzIHRvIHNlbmQgYSBRSUMgQ1BJIHRvICovCitzdHJ1Y3Qgdm95YWdlcl9xaWNfY3BpIHsKKwkvKiBFYWNoIGNhY2hlIGxpbmUgKDMyIGJ5dGVzKSBjYW4gdHJpZ2dlciBhIGNwaS4gIFRoZSBjcGkKKwkgKiByZWFkL3dyaXRlIG1heSBvY2N1ciBhbnl3aGVyZSBpbiB0aGUgY2FjaGUgbGluZS0tLXBpY2sgdGhlCisJICogbWlkZGxlIHRvIGJlIHNhZmUgKi8KKwlzdHJ1Y3QgIHsKKwkJX191MzIgcGFkMVszXTsKKwkJX191MzIgY3BpOworCQlfX3UzMiBwYWQyWzRdOworCX0gcWljX2NwaVs4XTsKK307CisKK3N0cnVjdCB2b3lhZ2VyX3N0YXR1cyB7CisJX191MzIJcG93ZXJfZmFpbDoxOworCV9fdTMyCXN3aXRjaF9vZmY6MTsKKwlfX3UzMglyZXF1ZXN0X2Zyb21fa2VybmVsOjE7Cit9OworCitzdHJ1Y3Qgdm95YWdlcl9wc2lfcmVncyB7CisJX191OCBjYXRfaWQ7CisJX191OCBjYXRfZGV2OworCV9fdTggY2F0X2NvbnRyb2w7CisJX191OCBzdWJhZGRyOworCV9fdTggZHVtbXk0OworCV9fdTggY2hlY2tiaXQ7CisJX191OCBzdWJhZGRyX2xvdzsKKwlfX3U4IHN1YmFkZHJfaGlnaDsKKwlfX3U4IGludHN0YXR1czsKKwlfX3U4IHN0YXQxOworCV9fdTggc3RhdDM7CisJX191OCBmYXVsdDsKKwlfX3U4IHRtczsKKwlfX3U4IGdlbjsKKwlfX3U4IHN5c2NvbmY7CisJX191OCBkdW1teTE1OworfTsKKworc3RydWN0IHZveWFnZXJfcHNpX3N1YnJlZ3MgeworCV9fdTggc3VwcGx5OworCV9fdTggbWFzazsKKwlfX3U4IHByZXNlbnQ7CisJX191OCBEQ2ZhaWw7CisJX191OCBBQ2ZhaWw7CisJX191OCBmYWlsOworCV9fdTggVVBTZmFpbDsKKwlfX3U4IGdlbnN0YXR1czsKK307CisKK3N0cnVjdCB2b3lhZ2VyX3BzaSB7CisJc3RydWN0IHZveWFnZXJfcHNpX3JlZ3MgcmVnczsKKwlzdHJ1Y3Qgdm95YWdlcl9wc2lfc3VicmVncyBzdWJyZWdzOworfTsKKworc3RydWN0IHZveWFnZXJfU1VTIHsKKyNkZWZpbmUJVk9ZQUdFUl9EVU1QX0JVVFRPTl9OTUkJCTB4MQorI2RlZmluZSBWT1lBR0VSX1NVU19WQUxJRAkJMHgyCisjZGVmaW5lIFZPWUFHRVJfU1lTSU5UX0NPTVBMRVRFCQkweDMKKwlfX3U4CVNVU19tYm94OworI2RlZmluZSBWT1lBR0VSX05PX0NPTU1BTkQJCTB4MAorI2RlZmluZSBWT1lBR0VSX0lHTk9SRV9EVU1QCQkweDEKKyNkZWZpbmUgVk9ZQUdFUl9ET19EVU1QCQkJMHgyCisjZGVmaW5lIFZPWUFHRVJfU1lTSU5UX0hBTkRTSEFLRQkweDMKKyNkZWZpbmUgVk9ZQUdFUl9ET19NRU1fRFVNUAkJMHg0CisjZGVmaW5lIFZPWUFHRVJfU1lTSU5UX1dBU19SRUNPVkVSRUQJMHg1CisJX191OAlrZXJuZWxfbWJveDsKKyNkZWZpbmUJVk9ZQUdFUl9NQUlMQk9YX1ZFUlNJT04JCTB4MTAKKwlfX3U4CVNVU192ZXJzaW9uOworCV9fdTgJa2VybmVsX3ZlcnNpb247CisjZGVmaW5lIFZPWUFHRVJfT1NfSEFTX1NZU0lOVAkJMHgxCisjZGVmaW5lIFZPWUFHRVJfT1NfSU5fUFJPR1JFU1MJCTB4MgorI2RlZmluZSBWT1lBR0VSX1VQREFUSU5HX1dEUEVSSU9ECTB4NAorCV9fdTMyCWtlcm5lbF9mbGFnczsKKyNkZWZpbmUgVk9ZQUdFUl9TVVNfQk9PVElORwkJMHgxCisjZGVmaW5lIFZPWUFHRVJfU1VTX0lOX1BST0dSRVNTCQkweDIKKwlfX3UzMglTVVNfZmxhZ3M7CisJX191MzIJd2F0Y2hkb2dfcGVyaW9kOworCV9fdTMyCXdhdGNoZG9nX2NvdW50OworCV9fdTMyCVNVU19lcnJvcmxvZzsKKwkvKiBsb3RzIG9mIHN5c3RlbSBjb25maWd1cmF0aW9uIHN0dWZmIHVuZGVyIGhlcmUgKi8KK307CisJCisvKiBWYXJpYWJsZXMgZXhwb3J0ZWQgYnkgdm95YWdlcl9zbXAgKi8KK2V4dGVybiBfX3UzMiB2b3lhZ2VyX2V4dGVuZGVkX3ZpY19wcm9jZXNzb3JzOworZXh0ZXJuIF9fdTMyIHZveWFnZXJfYWxsb3dlZF9ib290X3Byb2Nlc3NvcnM7CitleHRlcm4gX191MzIgdm95YWdlcl9xdWFkX3Byb2Nlc3NvcnM7CitleHRlcm4gc3RydWN0IHZveWFnZXJfcWljX2NwaSAqdm95YWdlcl9xdWFkX2NwaV9hZGRyW05SX0NQVVNdOworZXh0ZXJuIHN0cnVjdCB2b3lhZ2VyX1NVUyAqdm95YWdlcl9TVVM7CisKKy8qIHZhcmlhYmxlcyBleHBvcnRlZCBhbHdheXMgKi8KK2V4dGVybiBpbnQgdm95YWdlcl9sZXZlbDsKK2V4dGVybiBpbnQga3ZveWFnZXJkX3J1bm5pbmc7CitleHRlcm4gc3RydWN0IHNlbWFwaG9yZSBrdm95YWdlcmRfc2VtOworZXh0ZXJuIHN0cnVjdCB2b3lhZ2VyX3N0YXR1cyB2b3lhZ2VyX3N0YXR1czsKKworCisKKy8qIGZ1bmN0aW9ucyBleHBvcnRlZCBieSB0aGUgdm95YWdlciBhbmQgdm95YWdlcl9zbXAgbW9kdWxlcyAqLworCitleHRlcm4gaW50IHZveWFnZXJfY2F0X3JlYWRiKF9fdTggbW9kdWxlLCBfX3U4IGFzaWMsIGludCByZWcpOworZXh0ZXJuIHZvaWQgdm95YWdlcl9jYXRfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIHZveWFnZXJfZGV0ZWN0KHN0cnVjdCB2b3lhZ2VyX2Jpb3NfaW5mbyAqKTsKK2V4dGVybiB2b2lkIHZveWFnZXJfdHJhcF9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgdm95YWdlcl9zZXR1cF9pcnFzKHZvaWQpOworZXh0ZXJuIGludCB2b3lhZ2VyX21lbW9yeV9kZXRlY3QoaW50IHJlZ2lvbiwgX191MzIgKmFkZHIsIF9fdTMyICpsZW5ndGgpOworZXh0ZXJuIHZvaWQgdm95YWdlcl9zbXBfaW50cl9pbml0KHZvaWQpOworZXh0ZXJuIF9fdTggdm95YWdlcl9leHRlbmRlZF9jbW9zX3JlYWQoX191MTYgY21vc19hZGRyZXNzKTsKK2V4dGVybiB2b2lkIHZveWFnZXJfc21wX2R1bXAodm9pZCk7CitleHRlcm4gdm9pZCB2b3lhZ2VyX3RpbWVyX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitleHRlcm4gdm9pZCBzbXBfbG9jYWxfdGltZXJfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICogcmVncyk7CitleHRlcm4gdm9pZCB2b3lhZ2VyX3Bvd2VyX29mZih2b2lkKTsKK2V4dGVybiB2b2lkIHNtcF92b3lhZ2VyX3Bvd2VyX29mZih2b2lkICpkdW1teSk7CitleHRlcm4gdm9pZCB2b3lhZ2VyX3Jlc3RhcnQodm9pZCk7CitleHRlcm4gdm9pZCB2b3lhZ2VyX2NhdF9wb3dlcl9vZmYodm9pZCk7CitleHRlcm4gdm9pZCB2b3lhZ2VyX2NhdF9kb19jb21tb25faW50ZXJydXB0KHZvaWQpOworZXh0ZXJuIHZvaWQgdm95YWdlcl9oYW5kbGVfbm1pKHZvaWQpOworLyogQ29tbWFuZHMgZm9yIHRoZSBmb2xsb3dpbmcgYXJlICovCisjZGVmaW5lCVZPWUFHRVJfUFNJX1JFQUQJMAorI2RlZmluZSBWT1lBR0VSX1BTSV9XUklURQkxCisjZGVmaW5lIFZPWUFHRVJfUFNJX1NVQlJFQUQJMgorI2RlZmluZSBWT1lBR0VSX1BTSV9TVUJXUklURQkzCitleHRlcm4gdm9pZCB2b3lhZ2VyX2NhdF9wc2koX191OCwgX191MTYsIF9fdTggKik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3hvci5oIGIvaW5jbHVkZS9hc20taTM4Ni94b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODBlMmRiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taTM4Ni94b3IuaApAQCAtMCwwICsxLDg4MyBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWkzODYveG9yLmgKKyAqCisgKiBPcHRpbWl6ZWQgUkFJRC01IGNoZWNrc3VtbWluZyBmdW5jdGlvbnMgZm9yIE1NWCBhbmQgU1NFLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIChmb3IgZXhhbXBsZSAvdXNyL3NyYy9saW51eC9DT1BZSU5HKTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworLyoKKyAqIEhpZ2gtc3BlZWQgUkFJRDUgY2hlY2tzdW1taW5nIGZ1bmN0aW9ucyB1dGlsaXppbmcgTU1YIGluc3RydWN0aW9ucy4KKyAqIENvcHlyaWdodCAoQykgMTk5OCBJbmdvIE1vbG5hci4KKyAqLworCisjZGVmaW5lIExEKHgseSkJCSIgICAgICAgbW92cSAgIDgqKCIjeCIpKCUxKSwgJSVtbSIjeSIgICA7XG4iCisjZGVmaW5lIFNUKHgseSkJCSIgICAgICAgbW92cSAlJW1tIiN5IiwgICA4KigiI3giKSglMSkgICA7XG4iCisjZGVmaW5lIFhPMSh4LHkpCSIgICAgICAgcHhvciAgIDgqKCIjeCIpKCUyKSwgJSVtbSIjeSIgICA7XG4iCisjZGVmaW5lIFhPMih4LHkpCSIgICAgICAgcHhvciAgIDgqKCIjeCIpKCUzKSwgJSVtbSIjeSIgICA7XG4iCisjZGVmaW5lIFhPMyh4LHkpCSIgICAgICAgcHhvciAgIDgqKCIjeCIpKCU0KSwgJSVtbSIjeSIgICA7XG4iCisjZGVmaW5lIFhPNCh4LHkpCSIgICAgICAgcHhvciAgIDgqKCIjeCIpKCU1KSwgJSVtbSIjeSIgICA7XG4iCisKKyNpbmNsdWRlIDxhc20vaTM4Ny5oPgorCitzdGF0aWMgdm9pZAoreG9yX3BJSV9tbXhfMih1bnNpZ25lZCBsb25nIGJ5dGVzLCB1bnNpZ25lZCBsb25nICpwMSwgdW5zaWduZWQgbG9uZyAqcDIpCit7CisJdW5zaWduZWQgbG9uZyBsaW5lcyA9IGJ5dGVzID4+IDc7CisKKwlrZXJuZWxfZnB1X2JlZ2luKCk7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisjdW5kZWYgQkxPQ0sKKyNkZWZpbmUgQkxPQ0soaSkgXAorCUxEKGksMCkJCQkJCVwKKwkJTEQoaSsxLDEpCQkJXAorCQkJTEQoaSsyLDIpCQlcCisJCQkJTEQoaSszLDMpCVwKKwlYTzEoaSwwKQkJCQlcCisJU1QoaSwwKQkJCQkJXAorCQlYTzEoaSsxLDEpCQkJXAorCQlTVChpKzEsMSkJCQlcCisJCQlYTzEoaSsyLDIpCQlcCisJCQlTVChpKzIsMikJCVwKKwkJCQlYTzEoaSszLDMpCVwKKwkJCQlTVChpKzMsMykKKworCSIgLmFsaWduIDMyCQkJO1xuIgorICAJIiAxOiAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG4iCisKKwlCTE9DSygwKQorCUJMT0NLKDQpCisJQkxPQ0soOCkKKwlCTE9DSygxMikKKworCSIgICAgICAgYWRkbCAkMTI4LCAlMSAgICAgICAgIDtcbiIKKwkiICAgICAgIGFkZGwgJDEyOCwgJTIgICAgICAgICA7XG4iCisJIiAgICAgICBkZWNsICUwICAgICAgICAgICAgICAgO1xuIgorCSIgICAgICAgam56IDFiICAgICAgICAgICAgICAgIDtcbiIKKwk6ICIrciIgKGxpbmVzKSwKKwkgICIrciIgKHAxKSwgIityIiAocDIpCisJOgorCTogIm1lbW9yeSIpOworCisJa2VybmVsX2ZwdV9lbmQoKTsKK30KKworc3RhdGljIHZvaWQKK3hvcl9wSUlfbW14XzModW5zaWduZWQgbG9uZyBieXRlcywgdW5zaWduZWQgbG9uZyAqcDEsIHVuc2lnbmVkIGxvbmcgKnAyLAorCSAgICAgIHVuc2lnbmVkIGxvbmcgKnAzKQoreworCXVuc2lnbmVkIGxvbmcgbGluZXMgPSBieXRlcyA+PiA3OworCisJa2VybmVsX2ZwdV9iZWdpbigpOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorI3VuZGVmIEJMT0NLCisjZGVmaW5lIEJMT0NLKGkpIFwKKwlMRChpLDApCQkJCQlcCisJCUxEKGkrMSwxKQkJCVwKKwkJCUxEKGkrMiwyKQkJXAorCQkJCUxEKGkrMywzKQlcCisJWE8xKGksMCkJCQkJXAorCQlYTzEoaSsxLDEpCQkJXAorCQkJWE8xKGkrMiwyKQkJXAorCQkJCVhPMShpKzMsMykJXAorCVhPMihpLDApCQkJCVwKKwlTVChpLDApCQkJCQlcCisJCVhPMihpKzEsMSkJCQlcCisJCVNUKGkrMSwxKQkJCVwKKwkJCVhPMihpKzIsMikJCVwKKwkJCVNUKGkrMiwyKQkJXAorCQkJCVhPMihpKzMsMykJXAorCQkJCVNUKGkrMywzKQorCisJIiAuYWxpZ24gMzIJCQk7XG4iCisJIiAxOiAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG4iCisKKwlCTE9DSygwKQorCUJMT0NLKDQpCisJQkxPQ0soOCkKKwlCTE9DSygxMikKKworCSIgICAgICAgYWRkbCAkMTI4LCAlMSAgICAgICAgIDtcbiIKKwkiICAgICAgIGFkZGwgJDEyOCwgJTIgICAgICAgICA7XG4iCisJIiAgICAgICBhZGRsICQxMjgsICUzICAgICAgICAgO1xuIgorCSIgICAgICAgZGVjbCAlMCAgICAgICAgICAgICAgIDtcbiIKKwkiICAgICAgIGpueiAxYiAgICAgICAgICAgICAgICA7XG4iCisJOiAiK3IiIChsaW5lcyksCisJICAiK3IiIChwMSksICIrciIgKHAyKSwgIityIiAocDMpCisJOgorCTogIm1lbW9yeSIpOworCisJa2VybmVsX2ZwdV9lbmQoKTsKK30KKworc3RhdGljIHZvaWQKK3hvcl9wSUlfbW14XzQodW5zaWduZWQgbG9uZyBieXRlcywgdW5zaWduZWQgbG9uZyAqcDEsIHVuc2lnbmVkIGxvbmcgKnAyLAorCSAgICAgIHVuc2lnbmVkIGxvbmcgKnAzLCB1bnNpZ25lZCBsb25nICpwNCkKK3sKKwl1bnNpZ25lZCBsb25nIGxpbmVzID0gYnl0ZXMgPj4gNzsKKworCWtlcm5lbF9mcHVfYmVnaW4oKTsKKworCV9fYXNtX18gX192b2xhdGlsZV9fICgKKyN1bmRlZiBCTE9DSworI2RlZmluZSBCTE9DSyhpKSBcCisJTEQoaSwwKQkJCQkJXAorCQlMRChpKzEsMSkJCQlcCisJCQlMRChpKzIsMikJCVwKKwkJCQlMRChpKzMsMykJXAorCVhPMShpLDApCQkJCVwKKwkJWE8xKGkrMSwxKQkJCVwKKwkJCVhPMShpKzIsMikJCVwKKwkJCQlYTzEoaSszLDMpCVwKKwlYTzIoaSwwKQkJCQlcCisJCVhPMihpKzEsMSkJCQlcCisJCQlYTzIoaSsyLDIpCQlcCisJCQkJWE8yKGkrMywzKQlcCisJWE8zKGksMCkJCQkJXAorCVNUKGksMCkJCQkJCVwKKwkJWE8zKGkrMSwxKQkJCVwKKwkJU1QoaSsxLDEpCQkJXAorCQkJWE8zKGkrMiwyKQkJXAorCQkJU1QoaSsyLDIpCQlcCisJCQkJWE8zKGkrMywzKQlcCisJCQkJU1QoaSszLDMpCisKKwkiIC5hbGlnbiAzMgkJCTtcbiIKKwkiIDE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcbiIKKworCUJMT0NLKDApCisJQkxPQ0soNCkKKwlCTE9DSyg4KQorCUJMT0NLKDEyKQorCisJIiAgICAgICBhZGRsICQxMjgsICUxICAgICAgICAgO1xuIgorCSIgICAgICAgYWRkbCAkMTI4LCAlMiAgICAgICAgIDtcbiIKKwkiICAgICAgIGFkZGwgJDEyOCwgJTMgICAgICAgICA7XG4iCisJIiAgICAgICBhZGRsICQxMjgsICU0ICAgICAgICAgO1xuIgorCSIgICAgICAgZGVjbCAlMCAgICAgICAgICAgICAgIDtcbiIKKwkiICAgICAgIGpueiAxYiAgICAgICAgICAgICAgICA7XG4iCisJOiAiK3IiIChsaW5lcyksCisJICAiK3IiIChwMSksICIrciIgKHAyKSwgIityIiAocDMpLCAiK3IiIChwNCkKKwk6CisJOiAibWVtb3J5Iik7CisKKwlrZXJuZWxfZnB1X2VuZCgpOworfQorCisKK3N0YXRpYyB2b2lkCit4b3JfcElJX21teF81KHVuc2lnbmVkIGxvbmcgYnl0ZXMsIHVuc2lnbmVkIGxvbmcgKnAxLCB1bnNpZ25lZCBsb25nICpwMiwKKwkgICAgICB1bnNpZ25lZCBsb25nICpwMywgdW5zaWduZWQgbG9uZyAqcDQsIHVuc2lnbmVkIGxvbmcgKnA1KQoreworCXVuc2lnbmVkIGxvbmcgbGluZXMgPSBieXRlcyA+PiA3OworCisJa2VybmVsX2ZwdV9iZWdpbigpOworCisJLyogTWFrZSBzdXJlIEdDQyBmb3JnZXRzIGFueXRoaW5nIGl0IGtub3dzIGFib3V0IHA0IG9yIHA1LAorCSAgIHN1Y2ggdGhhdCBpdCB3b24ndCBwYXNzIHRvIHRoZSBhc20gdm9sYXRpbGUgYmVsb3cgYQorCSAgIHJlZ2lzdGVyIHRoYXQgaXMgc2hhcmVkIHdpdGggYW55IG90aGVyIHZhcmlhYmxlLiAgVGhhdCdzCisJICAgYmVjYXVzZSB3ZSBtb2RpZnkgcDQgYW5kIHA1IHRoZXJlLCBidXQgd2UgY2FuJ3QgbWFyayB0aGVtCisJICAgYXMgcmVhZC93cml0ZSwgb3RoZXJ3aXNlIHdlJ2Qgb3ZlcmZsb3cgdGhlIDEwLWFzbS1vcGVyYW5kcworCSAgIGxpbWl0IG9mIEdDQyA8IDMuMS4gICovCisJX19hc21fXyAoIiIgOiAiK3IiIChwNCksICIrciIgKHA1KSk7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisjdW5kZWYgQkxPQ0sKKyNkZWZpbmUgQkxPQ0soaSkgXAorCUxEKGksMCkJCQkJCVwKKwkJTEQoaSsxLDEpCQkJXAorCQkJTEQoaSsyLDIpCQlcCisJCQkJTEQoaSszLDMpCVwKKwlYTzEoaSwwKQkJCQlcCisJCVhPMShpKzEsMSkJCQlcCisJCQlYTzEoaSsyLDIpCQlcCisJCQkJWE8xKGkrMywzKQlcCisJWE8yKGksMCkJCQkJXAorCQlYTzIoaSsxLDEpCQkJXAorCQkJWE8yKGkrMiwyKQkJXAorCQkJCVhPMihpKzMsMykJXAorCVhPMyhpLDApCQkJCVwKKwkJWE8zKGkrMSwxKQkJCVwKKwkJCVhPMyhpKzIsMikJCVwKKwkJCQlYTzMoaSszLDMpCVwKKwlYTzQoaSwwKQkJCQlcCisJU1QoaSwwKQkJCQkJXAorCQlYTzQoaSsxLDEpCQkJXAorCQlTVChpKzEsMSkJCQlcCisJCQlYTzQoaSsyLDIpCQlcCisJCQlTVChpKzIsMikJCVwKKwkJCQlYTzQoaSszLDMpCVwKKwkJCQlTVChpKzMsMykKKworCSIgLmFsaWduIDMyCQkJO1xuIgorCSIgMTogICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuIgorCisJQkxPQ0soMCkKKwlCTE9DSyg0KQorCUJMT0NLKDgpCisJQkxPQ0soMTIpCisKKwkiICAgICAgIGFkZGwgJDEyOCwgJTEgICAgICAgICA7XG4iCisJIiAgICAgICBhZGRsICQxMjgsICUyICAgICAgICAgO1xuIgorCSIgICAgICAgYWRkbCAkMTI4LCAlMyAgICAgICAgIDtcbiIKKwkiICAgICAgIGFkZGwgJDEyOCwgJTQgICAgICAgICA7XG4iCisJIiAgICAgICBhZGRsICQxMjgsICU1ICAgICAgICAgO1xuIgorCSIgICAgICAgZGVjbCAlMCAgICAgICAgICAgICAgIDtcbiIKKwkiICAgICAgIGpueiAxYiAgICAgICAgICAgICAgICA7XG4iCisJOiAiK3IiIChsaW5lcyksCisJICAiK3IiIChwMSksICIrciIgKHAyKSwgIityIiAocDMpCisJOiAiciIgKHA0KSwgInIiIChwNSkgCisJOiAibWVtb3J5Iik7CisKKwkvKiBwNCBhbmQgcDUgd2VyZSBtb2RpZmllZCwgYW5kIG5vdyB0aGUgdmFyaWFibGVzIGFyZSBkZWFkLgorCSAgIENsb2JiZXIgdGhlbSBqdXN0IHRvIGJlIHN1cmUgbm9ib2R5IGRvZXMgc29tZXRoaW5nIHN0dXBpZAorCSAgIGxpa2UgYXNzdW1pbmcgdGhleSBoYXZlIHNvbWUgbGVnYWwgdmFsdWUuICAqLworCV9fYXNtX18gKCIiIDogIj1yIiAocDQpLCAiPXIiIChwNSkpOworCisJa2VybmVsX2ZwdV9lbmQoKTsKK30KKworI3VuZGVmIExECisjdW5kZWYgWE8xCisjdW5kZWYgWE8yCisjdW5kZWYgWE8zCisjdW5kZWYgWE80CisjdW5kZWYgU1QKKyN1bmRlZiBCTE9DSworCitzdGF0aWMgdm9pZAoreG9yX3A1X21teF8yKHVuc2lnbmVkIGxvbmcgYnl0ZXMsIHVuc2lnbmVkIGxvbmcgKnAxLCB1bnNpZ25lZCBsb25nICpwMikKK3sKKwl1bnNpZ25lZCBsb25nIGxpbmVzID0gYnl0ZXMgPj4gNjsKKworCWtlcm5lbF9mcHVfYmVnaW4oKTsKKworCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwkiIC5hbGlnbiAzMgkgICAgICAgICAgICAgO1xuIgorCSIgMTogICAgICAgICAgICAgICAgICAgICAgICAgO1xuIgorCSIgICAgICAgbW92cSAgICglMSksICUlbW0wICAgO1xuIgorCSIgICAgICAgbW92cSAgOCglMSksICUlbW0xICAgO1xuIgorCSIgICAgICAgcHhvciAgICglMiksICUlbW0wICAgO1xuIgorCSIgICAgICAgbW92cSAxNiglMSksICUlbW0yICAgO1xuIgorCSIgICAgICAgbW92cSAlJW1tMCwgICAoJTEpICAgO1xuIgorCSIgICAgICAgcHhvciAgOCglMiksICUlbW0xICAgO1xuIgorCSIgICAgICAgbW92cSAyNCglMSksICUlbW0zICAgO1xuIgorCSIgICAgICAgbW92cSAlJW1tMSwgIDgoJTEpICAgO1xuIgorCSIgICAgICAgcHhvciAxNiglMiksICUlbW0yICAgO1xuIgorCSIgICAgICAgbW92cSAzMiglMSksICUlbW00ICAgO1xuIgorCSIgICAgICAgbW92cSAlJW1tMiwgMTYoJTEpICAgO1xuIgorCSIgICAgICAgcHhvciAyNCglMiksICUlbW0zICAgO1xuIgorCSIgICAgICAgbW92cSA0MCglMSksICUlbW01ICAgO1xuIgorCSIgICAgICAgbW92cSAlJW1tMywgMjQoJTEpICAgO1xuIgorCSIgICAgICAgcHhvciAzMiglMiksICUlbW00ICAgO1xuIgorCSIgICAgICAgbW92cSA0OCglMSksICUlbW02ICAgO1xuIgorCSIgICAgICAgbW92cSAlJW1tNCwgMzIoJTEpICAgO1xuIgorCSIgICAgICAgcHhvciA0MCglMiksICUlbW01ICAgO1xuIgorCSIgICAgICAgbW92cSA1NiglMSksICUlbW03ICAgO1xuIgorCSIgICAgICAgbW92cSAlJW1tNSwgNDAoJTEpICAgO1xuIgorCSIgICAgICAgcHhvciA0OCglMiksICUlbW02ICAgO1xuIgorCSIgICAgICAgcHhvciA1NiglMiksICUlbW03ICAgO1xuIgorCSIgICAgICAgbW92cSAlJW1tNiwgNDgoJTEpICAgO1xuIgorCSIgICAgICAgbW92cSAlJW1tNywgNTYoJTEpICAgO1xuIgorCQorCSIgICAgICAgYWRkbCAkNjQsICUxICAgICAgICAgO1xuIgorCSIgICAgICAgYWRkbCAkNjQsICUyICAgICAgICAgO1xuIgorCSIgICAgICAgZGVjbCAlMCAgICAgICAgICAgICAgO1xuIgorCSIgICAgICAgam56IDFiICAgICAgICAgICAgICAgO1xuIgorCTogIityIiAobGluZXMpLAorCSAgIityIiAocDEpLCAiK3IiIChwMikKKwk6CisJOiAibWVtb3J5Iik7CisKKwlrZXJuZWxfZnB1X2VuZCgpOworfQorCitzdGF0aWMgdm9pZAoreG9yX3A1X21teF8zKHVuc2lnbmVkIGxvbmcgYnl0ZXMsIHVuc2lnbmVkIGxvbmcgKnAxLCB1bnNpZ25lZCBsb25nICpwMiwKKwkgICAgIHVuc2lnbmVkIGxvbmcgKnAzKQoreworCXVuc2lnbmVkIGxvbmcgbGluZXMgPSBieXRlcyA+PiA2OworCisJa2VybmVsX2ZwdV9iZWdpbigpOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCSIgLmFsaWduIDMyLDB4OTAgICAgICAgICAgICAgO1xuIgorCSIgMTogICAgICAgICAgICAgICAgICAgICAgICAgO1xuIgorCSIgICAgICAgbW92cSAgICglMSksICUlbW0wICAgO1xuIgorCSIgICAgICAgbW92cSAgOCglMSksICUlbW0xICAgO1xuIgorCSIgICAgICAgcHhvciAgICglMiksICUlbW0wICAgO1xuIgorCSIgICAgICAgbW92cSAxNiglMSksICUlbW0yICAgO1xuIgorCSIgICAgICAgcHhvciAgOCglMiksICUlbW0xICAgO1xuIgorCSIgICAgICAgcHhvciAgICglMyksICUlbW0wICAgO1xuIgorCSIgICAgICAgcHhvciAxNiglMiksICUlbW0yICAgO1xuIgorCSIgICAgICAgbW92cSAlJW1tMCwgICAoJTEpICAgO1xuIgorCSIgICAgICAgcHhvciAgOCglMyksICUlbW0xICAgO1xuIgorCSIgICAgICAgcHhvciAxNiglMyksICUlbW0yICAgO1xuIgorCSIgICAgICAgbW92cSAyNCglMSksICUlbW0zICAgO1xuIgorCSIgICAgICAgbW92cSAlJW1tMSwgIDgoJTEpICAgO1xuIgorCSIgICAgICAgbW92cSAzMiglMSksICUlbW00ICAgO1xuIgorCSIgICAgICAgbW92cSA0MCglMSksICUlbW01ICAgO1xuIgorCSIgICAgICAgcHhvciAyNCglMiksICUlbW0zICAgO1xuIgorCSIgICAgICAgbW92cSAlJW1tMiwgMTYoJTEpICAgO1xuIgorCSIgICAgICAgcHhvciAzMiglMiksICUlbW00ICAgO1xuIgorCSIgICAgICAgcHhvciAyNCglMyksICUlbW0zICAgO1xuIgorCSIgICAgICAgcHhvciA0MCglMiksICUlbW01ICAgO1xuIgorCSIgICAgICAgbW92cSAlJW1tMywgMjQoJTEpICAgO1xuIgorCSIgICAgICAgcHhvciAzMiglMyksICUlbW00ICAgO1xuIgorCSIgICAgICAgcHhvciA0MCglMyksICUlbW01ICAgO1xuIgorCSIgICAgICAgbW92cSA0OCglMSksICUlbW02ICAgO1xuIgorCSIgICAgICAgbW92cSAlJW1tNCwgMzIoJTEpICAgO1xuIgorCSIgICAgICAgbW92cSA1NiglMSksICUlbW03ICAgO1xuIgorCSIgICAgICAgcHhvciA0OCglMiksICUlbW02ICAgO1xuIgorCSIgICAgICAgbW92cSAlJW1tNSwgNDAoJTEpICAgO1xuIgorCSIgICAgICAgcHhvciA1NiglMiksICUlbW03ICAgO1xuIgorCSIgICAgICAgcHhvciA0OCglMyksICUlbW02ICAgO1xuIgorCSIgICAgICAgcHhvciA1NiglMyksICUlbW03ICAgO1xuIgorCSIgICAgICAgbW92cSAlJW1tNiwgNDgoJTEpICAgO1xuIgorCSIgICAgICAgbW92cSAlJW1tNywgNTYoJTEpICAgO1xuIgorICAgICAgCisJIiAgICAgICBhZGRsICQ2NCwgJTEgICAgICAgICA7XG4iCisJIiAgICAgICBhZGRsICQ2NCwgJTIgICAgICAgICA7XG4iCisJIiAgICAgICBhZGRsICQ2NCwgJTMgICAgICAgICA7XG4iCisJIiAgICAgICBkZWNsICUwICAgICAgICAgICAgICA7XG4iCisJIiAgICAgICBqbnogMWIgICAgICAgICAgICAgICA7XG4iCisJOiAiK3IiIChsaW5lcyksCisJICAiK3IiIChwMSksICIrciIgKHAyKSwgIityIiAocDMpCisJOgorCTogIm1lbW9yeSIgKTsKKworCWtlcm5lbF9mcHVfZW5kKCk7Cit9CisKK3N0YXRpYyB2b2lkCit4b3JfcDVfbW14XzQodW5zaWduZWQgbG9uZyBieXRlcywgdW5zaWduZWQgbG9uZyAqcDEsIHVuc2lnbmVkIGxvbmcgKnAyLAorCSAgICAgdW5zaWduZWQgbG9uZyAqcDMsIHVuc2lnbmVkIGxvbmcgKnA0KQoreworCXVuc2lnbmVkIGxvbmcgbGluZXMgPSBieXRlcyA+PiA2OworCisJa2VybmVsX2ZwdV9iZWdpbigpOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCSIgLmFsaWduIDMyLDB4OTAgICAgICAgICAgICAgO1xuIgorCSIgMTogICAgICAgICAgICAgICAgICAgICAgICAgO1xuIgorCSIgICAgICAgbW92cSAgICglMSksICUlbW0wICAgO1xuIgorCSIgICAgICAgbW92cSAgOCglMSksICUlbW0xICAgO1xuIgorCSIgICAgICAgcHhvciAgICglMiksICUlbW0wICAgO1xuIgorCSIgICAgICAgbW92cSAxNiglMSksICUlbW0yICAgO1xuIgorCSIgICAgICAgcHhvciAgOCglMiksICUlbW0xICAgO1xuIgorCSIgICAgICAgcHhvciAgICglMyksICUlbW0wICAgO1xuIgorCSIgICAgICAgcHhvciAxNiglMiksICUlbW0yICAgO1xuIgorCSIgICAgICAgcHhvciAgOCglMyksICUlbW0xICAgO1xuIgorCSIgICAgICAgcHhvciAgICglNCksICUlbW0wICAgO1xuIgorCSIgICAgICAgbW92cSAyNCglMSksICUlbW0zICAgO1xuIgorCSIgICAgICAgcHhvciAxNiglMyksICUlbW0yICAgO1xuIgorCSIgICAgICAgcHhvciAgOCglNCksICUlbW0xICAgO1xuIgorCSIgICAgICAgbW92cSAlJW1tMCwgICAoJTEpICAgO1xuIgorCSIgICAgICAgbW92cSAzMiglMSksICUlbW00ICAgO1xuIgorCSIgICAgICAgcHhvciAyNCglMiksICUlbW0zICAgO1xuIgorCSIgICAgICAgcHhvciAxNiglNCksICUlbW0yICAgO1xuIgorCSIgICAgICAgbW92cSAlJW1tMSwgIDgoJTEpICAgO1xuIgorCSIgICAgICAgbW92cSA0MCglMSksICUlbW01ICAgO1xuIgorCSIgICAgICAgcHhvciAzMiglMiksICUlbW00ICAgO1xuIgorCSIgICAgICAgcHhvciAyNCglMyksICUlbW0zICAgO1xuIgorCSIgICAgICAgbW92cSAlJW1tMiwgMTYoJTEpICAgO1xuIgorCSIgICAgICAgcHhvciA0MCglMiksICUlbW01ICAgO1xuIgorCSIgICAgICAgcHhvciAzMiglMyksICUlbW00ICAgO1xuIgorCSIgICAgICAgcHhvciAyNCglNCksICUlbW0zICAgO1xuIgorCSIgICAgICAgbW92cSAlJW1tMywgMjQoJTEpICAgO1xuIgorCSIgICAgICAgbW92cSA1NiglMSksICUlbW03ICAgO1xuIgorCSIgICAgICAgbW92cSA0OCglMSksICUlbW02ICAgO1xuIgorCSIgICAgICAgcHhvciA0MCglMyksICUlbW01ICAgO1xuIgorCSIgICAgICAgcHhvciAzMiglNCksICUlbW00ICAgO1xuIgorCSIgICAgICAgcHhvciA0OCglMiksICUlbW02ICAgO1xuIgorCSIgICAgICAgbW92cSAlJW1tNCwgMzIoJTEpICAgO1xuIgorCSIgICAgICAgcHhvciA1NiglMiksICUlbW03ICAgO1xuIgorCSIgICAgICAgcHhvciA0MCglNCksICUlbW01ICAgO1xuIgorCSIgICAgICAgcHhvciA0OCglMyksICUlbW02ICAgO1xuIgorCSIgICAgICAgcHhvciA1NiglMyksICUlbW03ICAgO1xuIgorCSIgICAgICAgbW92cSAlJW1tNSwgNDAoJTEpICAgO1xuIgorCSIgICAgICAgcHhvciA0OCglNCksICUlbW02ICAgO1xuIgorCSIgICAgICAgcHhvciA1NiglNCksICUlbW03ICAgO1xuIgorCSIgICAgICAgbW92cSAlJW1tNiwgNDgoJTEpICAgO1xuIgorCSIgICAgICAgbW92cSAlJW1tNywgNTYoJTEpICAgO1xuIgorICAgICAgCisJIiAgICAgICBhZGRsICQ2NCwgJTEgICAgICAgICA7XG4iCisJIiAgICAgICBhZGRsICQ2NCwgJTIgICAgICAgICA7XG4iCisJIiAgICAgICBhZGRsICQ2NCwgJTMgICAgICAgICA7XG4iCisJIiAgICAgICBhZGRsICQ2NCwgJTQgICAgICAgICA7XG4iCisJIiAgICAgICBkZWNsICUwICAgICAgICAgICAgICA7XG4iCisJIiAgICAgICBqbnogMWIgICAgICAgICAgICAgICA7XG4iCisJOiAiK3IiIChsaW5lcyksCisJICAiK3IiIChwMSksICIrciIgKHAyKSwgIityIiAocDMpLCAiK3IiIChwNCkKKwk6CisJOiAibWVtb3J5Iik7CisKKwlrZXJuZWxfZnB1X2VuZCgpOworfQorCitzdGF0aWMgdm9pZAoreG9yX3A1X21teF81KHVuc2lnbmVkIGxvbmcgYnl0ZXMsIHVuc2lnbmVkIGxvbmcgKnAxLCB1bnNpZ25lZCBsb25nICpwMiwKKwkgICAgIHVuc2lnbmVkIGxvbmcgKnAzLCB1bnNpZ25lZCBsb25nICpwNCwgdW5zaWduZWQgbG9uZyAqcDUpCit7CisJdW5zaWduZWQgbG9uZyBsaW5lcyA9IGJ5dGVzID4+IDY7CisKKwlrZXJuZWxfZnB1X2JlZ2luKCk7CisKKwkvKiBNYWtlIHN1cmUgR0NDIGZvcmdldHMgYW55dGhpbmcgaXQga25vd3MgYWJvdXQgcDQgb3IgcDUsCisJICAgc3VjaCB0aGF0IGl0IHdvbid0IHBhc3MgdG8gdGhlIGFzbSB2b2xhdGlsZSBiZWxvdyBhCisJICAgcmVnaXN0ZXIgdGhhdCBpcyBzaGFyZWQgd2l0aCBhbnkgb3RoZXIgdmFyaWFibGUuICBUaGF0J3MKKwkgICBiZWNhdXNlIHdlIG1vZGlmeSBwNCBhbmQgcDUgdGhlcmUsIGJ1dCB3ZSBjYW4ndCBtYXJrIHRoZW0KKwkgICBhcyByZWFkL3dyaXRlLCBvdGhlcndpc2Ugd2UnZCBvdmVyZmxvdyB0aGUgMTAtYXNtLW9wZXJhbmRzCisJICAgbGltaXQgb2YgR0NDIDwgMy4xLiAgKi8KKwlfX2FzbV9fICgiIiA6ICIrciIgKHA0KSwgIityIiAocDUpKTsKKworCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwkiIC5hbGlnbiAzMiwweDkwICAgICAgICAgICAgIDtcbiIKKwkiIDE6ICAgICAgICAgICAgICAgICAgICAgICAgIDtcbiIKKwkiICAgICAgIG1vdnEgICAoJTEpLCAlJW1tMCAgIDtcbiIKKwkiICAgICAgIG1vdnEgIDgoJTEpLCAlJW1tMSAgIDtcbiIKKwkiICAgICAgIHB4b3IgICAoJTIpLCAlJW1tMCAgIDtcbiIKKwkiICAgICAgIHB4b3IgIDgoJTIpLCAlJW1tMSAgIDtcbiIKKwkiICAgICAgIG1vdnEgMTYoJTEpLCAlJW1tMiAgIDtcbiIKKwkiICAgICAgIHB4b3IgICAoJTMpLCAlJW1tMCAgIDtcbiIKKwkiICAgICAgIHB4b3IgIDgoJTMpLCAlJW1tMSAgIDtcbiIKKwkiICAgICAgIHB4b3IgMTYoJTIpLCAlJW1tMiAgIDtcbiIKKwkiICAgICAgIHB4b3IgICAoJTQpLCAlJW1tMCAgIDtcbiIKKwkiICAgICAgIHB4b3IgIDgoJTQpLCAlJW1tMSAgIDtcbiIKKwkiICAgICAgIHB4b3IgMTYoJTMpLCAlJW1tMiAgIDtcbiIKKwkiICAgICAgIG1vdnEgMjQoJTEpLCAlJW1tMyAgIDtcbiIKKwkiICAgICAgIHB4b3IgICAoJTUpLCAlJW1tMCAgIDtcbiIKKwkiICAgICAgIHB4b3IgIDgoJTUpLCAlJW1tMSAgIDtcbiIKKwkiICAgICAgIG1vdnEgJSVtbTAsICAgKCUxKSAgIDtcbiIKKwkiICAgICAgIHB4b3IgMTYoJTQpLCAlJW1tMiAgIDtcbiIKKwkiICAgICAgIHB4b3IgMjQoJTIpLCAlJW1tMyAgIDtcbiIKKwkiICAgICAgIG1vdnEgJSVtbTEsICA4KCUxKSAgIDtcbiIKKwkiICAgICAgIHB4b3IgMTYoJTUpLCAlJW1tMiAgIDtcbiIKKwkiICAgICAgIHB4b3IgMjQoJTMpLCAlJW1tMyAgIDtcbiIKKwkiICAgICAgIG1vdnEgMzIoJTEpLCAlJW1tNCAgIDtcbiIKKwkiICAgICAgIG1vdnEgJSVtbTIsIDE2KCUxKSAgIDtcbiIKKwkiICAgICAgIHB4b3IgMjQoJTQpLCAlJW1tMyAgIDtcbiIKKwkiICAgICAgIHB4b3IgMzIoJTIpLCAlJW1tNCAgIDtcbiIKKwkiICAgICAgIG1vdnEgNDAoJTEpLCAlJW1tNSAgIDtcbiIKKwkiICAgICAgIHB4b3IgMjQoJTUpLCAlJW1tMyAgIDtcbiIKKwkiICAgICAgIHB4b3IgMzIoJTMpLCAlJW1tNCAgIDtcbiIKKwkiICAgICAgIHB4b3IgNDAoJTIpLCAlJW1tNSAgIDtcbiIKKwkiICAgICAgIG1vdnEgJSVtbTMsIDI0KCUxKSAgIDtcbiIKKwkiICAgICAgIHB4b3IgMzIoJTQpLCAlJW1tNCAgIDtcbiIKKwkiICAgICAgIHB4b3IgNDAoJTMpLCAlJW1tNSAgIDtcbiIKKwkiICAgICAgIG1vdnEgNDgoJTEpLCAlJW1tNiAgIDtcbiIKKwkiICAgICAgIG1vdnEgNTYoJTEpLCAlJW1tNyAgIDtcbiIKKwkiICAgICAgIHB4b3IgMzIoJTUpLCAlJW1tNCAgIDtcbiIKKwkiICAgICAgIHB4b3IgNDAoJTQpLCAlJW1tNSAgIDtcbiIKKwkiICAgICAgIHB4b3IgNDgoJTIpLCAlJW1tNiAgIDtcbiIKKwkiICAgICAgIHB4b3IgNTYoJTIpLCAlJW1tNyAgIDtcbiIKKwkiICAgICAgIG1vdnEgJSVtbTQsIDMyKCUxKSAgIDtcbiIKKwkiICAgICAgIHB4b3IgNDgoJTMpLCAlJW1tNiAgIDtcbiIKKwkiICAgICAgIHB4b3IgNTYoJTMpLCAlJW1tNyAgIDtcbiIKKwkiICAgICAgIHB4b3IgNDAoJTUpLCAlJW1tNSAgIDtcbiIKKwkiICAgICAgIHB4b3IgNDgoJTQpLCAlJW1tNiAgIDtcbiIKKwkiICAgICAgIHB4b3IgNTYoJTQpLCAlJW1tNyAgIDtcbiIKKwkiICAgICAgIG1vdnEgJSVtbTUsIDQwKCUxKSAgIDtcbiIKKwkiICAgICAgIHB4b3IgNDgoJTUpLCAlJW1tNiAgIDtcbiIKKwkiICAgICAgIHB4b3IgNTYoJTUpLCAlJW1tNyAgIDtcbiIKKwkiICAgICAgIG1vdnEgJSVtbTYsIDQ4KCUxKSAgIDtcbiIKKwkiICAgICAgIG1vdnEgJSVtbTcsIDU2KCUxKSAgIDtcbiIKKyAgICAgIAorCSIgICAgICAgYWRkbCAkNjQsICUxICAgICAgICAgO1xuIgorCSIgICAgICAgYWRkbCAkNjQsICUyICAgICAgICAgO1xuIgorCSIgICAgICAgYWRkbCAkNjQsICUzICAgICAgICAgO1xuIgorCSIgICAgICAgYWRkbCAkNjQsICU0ICAgICAgICAgO1xuIgorCSIgICAgICAgYWRkbCAkNjQsICU1ICAgICAgICAgO1xuIgorCSIgICAgICAgZGVjbCAlMCAgICAgICAgICAgICAgO1xuIgorCSIgICAgICAgam56IDFiICAgICAgICAgICAgICAgO1xuIgorCTogIityIiAobGluZXMpLAorCSAgIityIiAocDEpLCAiK3IiIChwMiksICIrciIgKHAzKQorCTogInIiIChwNCksICJyIiAocDUpCisJOiAibWVtb3J5Iik7CisKKwkvKiBwNCBhbmQgcDUgd2VyZSBtb2RpZmllZCwgYW5kIG5vdyB0aGUgdmFyaWFibGVzIGFyZSBkZWFkLgorCSAgIENsb2JiZXIgdGhlbSBqdXN0IHRvIGJlIHN1cmUgbm9ib2R5IGRvZXMgc29tZXRoaW5nIHN0dXBpZAorCSAgIGxpa2UgYXNzdW1pbmcgdGhleSBoYXZlIHNvbWUgbGVnYWwgdmFsdWUuICAqLworCV9fYXNtX18gKCIiIDogIj1yIiAocDQpLCAiPXIiIChwNSkpOworCisJa2VybmVsX2ZwdV9lbmQoKTsKK30KKworc3RhdGljIHN0cnVjdCB4b3JfYmxvY2tfdGVtcGxhdGUgeG9yX2Jsb2NrX3BJSV9tbXggPSB7CisJLm5hbWUgPSAicElJX21teCIsCisJLmRvXzIgPSB4b3JfcElJX21teF8yLAorCS5kb18zID0geG9yX3BJSV9tbXhfMywKKwkuZG9fNCA9IHhvcl9wSUlfbW14XzQsCisJLmRvXzUgPSB4b3JfcElJX21teF81LAorfTsKKworc3RhdGljIHN0cnVjdCB4b3JfYmxvY2tfdGVtcGxhdGUgeG9yX2Jsb2NrX3A1X21teCA9IHsKKwkubmFtZSA9ICJwNV9tbXgiLAorCS5kb18yID0geG9yX3A1X21teF8yLAorCS5kb18zID0geG9yX3A1X21teF8zLAorCS5kb180ID0geG9yX3A1X21teF80LAorCS5kb181ID0geG9yX3A1X21teF81LAorfTsKKworLyoKKyAqIENhY2hlIGF2b2lkaW5nIGNoZWNrc3VtbWluZyBmdW5jdGlvbnMgdXRpbGl6aW5nIEtOSSBpbnN0cnVjdGlvbnMKKyAqIENvcHlyaWdodCAoQykgMTk5OSBaYWNoIEJyb3duICh3aXRoIG9idmlvdXMgY3JlZGl0IGR1ZSBJbmdvKQorICovCisKKyNkZWZpbmUgWE1NU19TQVZFIGRvIHsJCQkJXAorCXByZWVtcHRfZGlzYWJsZSgpOwkJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIAkJCVwKKwkJIm1vdmwgJSVjcjAsJTAJCTtcblx0IglcCisJCSJjbHRzCQkJO1xuXHQiCVwKKwkJIm1vdnVwcyAlJXhtbTAsKCUxKQk7XG5cdCIJXAorCQkibW92dXBzICUleG1tMSwweDEwKCUxKQk7XG5cdCIJXAorCQkibW92dXBzICUleG1tMiwweDIwKCUxKQk7XG5cdCIJXAorCQkibW92dXBzICUleG1tMywweDMwKCUxKQk7XG5cdCIJXAorCQk6ICI9JnIiIChjcjApCQkJXAorCQk6ICJyIiAoeG1tX3NhdmUpIAkJXAorCQk6ICJtZW1vcnkiKTsJCQlcCit9IHdoaWxlKDApCisKKyNkZWZpbmUgWE1NU19SRVNUT1JFIGRvIHsJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCAJCQlcCisJCSJzZmVuY2UJCQk7XG5cdCIJXAorCQkibW92dXBzICglMSksJSV4bW0wCTtcblx0IglcCisJCSJtb3Z1cHMgMHgxMCglMSksJSV4bW0xCTtcblx0IglcCisJCSJtb3Z1cHMgMHgyMCglMSksJSV4bW0yCTtcblx0IglcCisJCSJtb3Z1cHMgMHgzMCglMSksJSV4bW0zCTtcblx0IglcCisJCSJtb3ZsIAklMCwlJWNyMAk7XG5cdCIJXAorCQk6CQkJCVwKKwkJOiAiciIgKGNyMCksICJyIiAoeG1tX3NhdmUpCVwKKwkJOiAibWVtb3J5Iik7CQkJXAorCXByZWVtcHRfZW5hYmxlKCk7CQkJXAorfSB3aGlsZSgwKQorCisjZGVmaW5lIEFMSUdOMTYgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgxNikpKQorCisjZGVmaW5lIE9GRlMoeCkJCSIxNiooIiN4IikiCisjZGVmaW5lIFBGX09GRlMoeCkJIjI1NisxNiooIiN4IikiCisjZGVmaW5lCVBGMCh4KQkJIglwcmVmZXRjaG50YSAiUEZfT0ZGUyh4KSIoJTEpCQk7XG4iCisjZGVmaW5lIExEKHgseSkJCSIgICAgICAgbW92YXBzICAgIk9GRlMoeCkiKCUxKSwgJSV4bW0iI3kiCTtcbiIKKyNkZWZpbmUgU1QoeCx5KQkJIiAgICAgICBtb3ZhcHMgJSV4bW0iI3kiLCAgICJPRkZTKHgpIiglMSkJO1xuIgorI2RlZmluZSBQRjEoeCkJCSIJcHJlZmV0Y2hudGEgIlBGX09GRlMoeCkiKCUyKQkJO1xuIgorI2RlZmluZSBQRjIoeCkJCSIJcHJlZmV0Y2hudGEgIlBGX09GRlMoeCkiKCUzKQkJO1xuIgorI2RlZmluZSBQRjMoeCkJCSIJcHJlZmV0Y2hudGEgIlBGX09GRlMoeCkiKCU0KQkJO1xuIgorI2RlZmluZSBQRjQoeCkJCSIJcHJlZmV0Y2hudGEgIlBGX09GRlMoeCkiKCU1KQkJO1xuIgorI2RlZmluZSBQRjUoeCkJCSIJcHJlZmV0Y2hudGEgIlBGX09GRlMoeCkiKCU2KQkJO1xuIgorI2RlZmluZSBYTzEoeCx5KQkiICAgICAgIHhvcnBzICAgIk9GRlMoeCkiKCUyKSwgJSV4bW0iI3kiCTtcbiIKKyNkZWZpbmUgWE8yKHgseSkJIiAgICAgICB4b3JwcyAgICJPRkZTKHgpIiglMyksICUleG1tIiN5Igk7XG4iCisjZGVmaW5lIFhPMyh4LHkpCSIgICAgICAgeG9ycHMgICAiT0ZGUyh4KSIoJTQpLCAlJXhtbSIjeSIJO1xuIgorI2RlZmluZSBYTzQoeCx5KQkiICAgICAgIHhvcnBzICAgIk9GRlMoeCkiKCU1KSwgJSV4bW0iI3kiCTtcbiIKKyNkZWZpbmUgWE81KHgseSkJIiAgICAgICB4b3JwcyAgICJPRkZTKHgpIiglNiksICUleG1tIiN5Igk7XG4iCisKKworc3RhdGljIHZvaWQKK3hvcl9zc2VfMih1bnNpZ25lZCBsb25nIGJ5dGVzLCB1bnNpZ25lZCBsb25nICpwMSwgdW5zaWduZWQgbG9uZyAqcDIpCit7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgbGluZXMgPSBieXRlcyA+PiA4OworCWNoYXIgeG1tX3NhdmVbMTYqNF0gQUxJR04xNjsKKwlpbnQgY3IwOworCisJWE1NU19TQVZFOworCisgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKKyN1bmRlZiBCTE9DSworI2RlZmluZSBCTE9DSyhpKSBcCisJCUxEKGksMCkJCQkJCVwKKwkJCUxEKGkrMSwxKQkJCVwKKwkJUEYxKGkpCQkJCQlcCisJCQkJUEYxKGkrMikJCVwKKwkJCQlMRChpKzIsMikJCVwKKwkJCQkJTEQoaSszLDMpCVwKKwkJUEYwKGkrNCkJCQkJXAorCQkJCVBGMChpKzYpCQlcCisJCVhPMShpLDApCQkJCVwKKwkJCVhPMShpKzEsMSkJCQlcCisJCQkJWE8xKGkrMiwyKQkJXAorCQkJCQlYTzEoaSszLDMpCVwKKwkJU1QoaSwwKQkJCQkJXAorCQkJU1QoaSsxLDEpCQkJXAorCQkJCVNUKGkrMiwyKQkJXAorCQkJCQlTVChpKzMsMykJXAorCisKKwkJUEYwKDApCisJCQkJUEYwKDIpCisKKwkiIC5hbGlnbiAzMgkJCTtcbiIKKyAgICAgICAgIiAxOiAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG4iCisKKwkJQkxPQ0soMCkKKwkJQkxPQ0soNCkKKwkJQkxPQ0soOCkKKwkJQkxPQ0soMTIpCisKKyAgICAgICAgIiAgICAgICBhZGRsICQyNTYsICUxICAgICAgICAgICA7XG4iCisgICAgICAgICIgICAgICAgYWRkbCAkMjU2LCAlMiAgICAgICAgICAgO1xuIgorICAgICAgICAiICAgICAgIGRlY2wgJTAgICAgICAgICAgICAgICAgIDtcbiIKKyAgICAgICAgIiAgICAgICBqbnogMWIgICAgICAgICAgICAgICAgICA7XG4iCisJOiAiK3IiIChsaW5lcyksCisJICAiK3IiIChwMSksICIrciIgKHAyKQorCToKKyAgICAgICAgOiAibWVtb3J5Iik7CisKKwlYTU1TX1JFU1RPUkU7Cit9CisKK3N0YXRpYyB2b2lkCit4b3Jfc3NlXzModW5zaWduZWQgbG9uZyBieXRlcywgdW5zaWduZWQgbG9uZyAqcDEsIHVuc2lnbmVkIGxvbmcgKnAyLAorCSAgdW5zaWduZWQgbG9uZyAqcDMpCit7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgbGluZXMgPSBieXRlcyA+PiA4OworCWNoYXIgeG1tX3NhdmVbMTYqNF0gQUxJR04xNjsKKwlpbnQgY3IwOworCisJWE1NU19TQVZFOworCisgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKKyN1bmRlZiBCTE9DSworI2RlZmluZSBCTE9DSyhpKSBcCisJCVBGMShpKQkJCQkJXAorCQkJCVBGMShpKzIpCQlcCisJCUxEKGksMCkJCQkJCVwKKwkJCUxEKGkrMSwxKQkJCVwKKwkJCQlMRChpKzIsMikJCVwKKwkJCQkJTEQoaSszLDMpCVwKKwkJUEYyKGkpCQkJCQlcCisJCQkJUEYyKGkrMikJCVwKKwkJUEYwKGkrNCkJCQkJXAorCQkJCVBGMChpKzYpCQlcCisJCVhPMShpLDApCQkJCVwKKwkJCVhPMShpKzEsMSkJCQlcCisJCQkJWE8xKGkrMiwyKQkJXAorCQkJCQlYTzEoaSszLDMpCVwKKwkJWE8yKGksMCkJCQkJXAorCQkJWE8yKGkrMSwxKQkJCVwKKwkJCQlYTzIoaSsyLDIpCQlcCisJCQkJCVhPMihpKzMsMykJXAorCQlTVChpLDApCQkJCQlcCisJCQlTVChpKzEsMSkJCQlcCisJCQkJU1QoaSsyLDIpCQlcCisJCQkJCVNUKGkrMywzKQlcCisKKworCQlQRjAoMCkKKwkJCQlQRjAoMikKKworCSIgLmFsaWduIDMyCQkJO1xuIgorICAgICAgICAiIDE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcbiIKKworCQlCTE9DSygwKQorCQlCTE9DSyg0KQorCQlCTE9DSyg4KQorCQlCTE9DSygxMikKKworICAgICAgICAiICAgICAgIGFkZGwgJDI1NiwgJTEgICAgICAgICAgIDtcbiIKKyAgICAgICAgIiAgICAgICBhZGRsICQyNTYsICUyICAgICAgICAgICA7XG4iCisgICAgICAgICIgICAgICAgYWRkbCAkMjU2LCAlMyAgICAgICAgICAgO1xuIgorICAgICAgICAiICAgICAgIGRlY2wgJTAgICAgICAgICAgICAgICAgIDtcbiIKKyAgICAgICAgIiAgICAgICBqbnogMWIgICAgICAgICAgICAgICAgICA7XG4iCisJOiAiK3IiIChsaW5lcyksCisJICAiK3IiIChwMSksICIrciIocDIpLCAiK3IiKHAzKQorCToKKyAgICAgICAgOiAibWVtb3J5IiApOworCisJWE1NU19SRVNUT1JFOworfQorCitzdGF0aWMgdm9pZAoreG9yX3NzZV80KHVuc2lnbmVkIGxvbmcgYnl0ZXMsIHVuc2lnbmVkIGxvbmcgKnAxLCB1bnNpZ25lZCBsb25nICpwMiwKKwkgIHVuc2lnbmVkIGxvbmcgKnAzLCB1bnNpZ25lZCBsb25nICpwNCkKK3sKKyAgICAgICAgdW5zaWduZWQgbG9uZyBsaW5lcyA9IGJ5dGVzID4+IDg7CisJY2hhciB4bW1fc2F2ZVsxNio0XSBBTElHTjE2OworCWludCBjcjA7CisKKwlYTU1TX1NBVkU7CisKKyAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAorI3VuZGVmIEJMT0NLCisjZGVmaW5lIEJMT0NLKGkpIFwKKwkJUEYxKGkpCQkJCQlcCisJCQkJUEYxKGkrMikJCVwKKwkJTEQoaSwwKQkJCQkJXAorCQkJTEQoaSsxLDEpCQkJXAorCQkJCUxEKGkrMiwyKQkJXAorCQkJCQlMRChpKzMsMykJXAorCQlQRjIoaSkJCQkJCVwKKwkJCQlQRjIoaSsyKQkJXAorCQlYTzEoaSwwKQkJCQlcCisJCQlYTzEoaSsxLDEpCQkJXAorCQkJCVhPMShpKzIsMikJCVwKKwkJCQkJWE8xKGkrMywzKQlcCisJCVBGMyhpKQkJCQkJXAorCQkJCVBGMyhpKzIpCQlcCisJCVBGMChpKzQpCQkJCVwKKwkJCQlQRjAoaSs2KQkJXAorCQlYTzIoaSwwKQkJCQlcCisJCQlYTzIoaSsxLDEpCQkJXAorCQkJCVhPMihpKzIsMikJCVwKKwkJCQkJWE8yKGkrMywzKQlcCisJCVhPMyhpLDApCQkJCVwKKwkJCVhPMyhpKzEsMSkJCQlcCisJCQkJWE8zKGkrMiwyKQkJXAorCQkJCQlYTzMoaSszLDMpCVwKKwkJU1QoaSwwKQkJCQkJXAorCQkJU1QoaSsxLDEpCQkJXAorCQkJCVNUKGkrMiwyKQkJXAorCQkJCQlTVChpKzMsMykJXAorCisKKwkJUEYwKDApCisJCQkJUEYwKDIpCisKKwkiIC5hbGlnbiAzMgkJCTtcbiIKKyAgICAgICAgIiAxOiAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG4iCisKKwkJQkxPQ0soMCkKKwkJQkxPQ0soNCkKKwkJQkxPQ0soOCkKKwkJQkxPQ0soMTIpCisKKyAgICAgICAgIiAgICAgICBhZGRsICQyNTYsICUxICAgICAgICAgICA7XG4iCisgICAgICAgICIgICAgICAgYWRkbCAkMjU2LCAlMiAgICAgICAgICAgO1xuIgorICAgICAgICAiICAgICAgIGFkZGwgJDI1NiwgJTMgICAgICAgICAgIDtcbiIKKyAgICAgICAgIiAgICAgICBhZGRsICQyNTYsICU0ICAgICAgICAgICA7XG4iCisgICAgICAgICIgICAgICAgZGVjbCAlMCAgICAgICAgICAgICAgICAgO1xuIgorICAgICAgICAiICAgICAgIGpueiAxYiAgICAgICAgICAgICAgICAgIDtcbiIKKwk6ICIrciIgKGxpbmVzKSwKKwkgICIrciIgKHAxKSwgIityIiAocDIpLCAiK3IiIChwMyksICIrciIgKHA0KQorCToKKyAgICAgICAgOiAibWVtb3J5IiApOworCisJWE1NU19SRVNUT1JFOworfQorCitzdGF0aWMgdm9pZAoreG9yX3NzZV81KHVuc2lnbmVkIGxvbmcgYnl0ZXMsIHVuc2lnbmVkIGxvbmcgKnAxLCB1bnNpZ25lZCBsb25nICpwMiwKKwkgIHVuc2lnbmVkIGxvbmcgKnAzLCB1bnNpZ25lZCBsb25nICpwNCwgdW5zaWduZWQgbG9uZyAqcDUpCit7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgbGluZXMgPSBieXRlcyA+PiA4OworCWNoYXIgeG1tX3NhdmVbMTYqNF0gQUxJR04xNjsKKwlpbnQgY3IwOworCisJWE1NU19TQVZFOworCisJLyogTWFrZSBzdXJlIEdDQyBmb3JnZXRzIGFueXRoaW5nIGl0IGtub3dzIGFib3V0IHA0IG9yIHA1LAorCSAgIHN1Y2ggdGhhdCBpdCB3b24ndCBwYXNzIHRvIHRoZSBhc20gdm9sYXRpbGUgYmVsb3cgYQorCSAgIHJlZ2lzdGVyIHRoYXQgaXMgc2hhcmVkIHdpdGggYW55IG90aGVyIHZhcmlhYmxlLiAgVGhhdCdzCisJICAgYmVjYXVzZSB3ZSBtb2RpZnkgcDQgYW5kIHA1IHRoZXJlLCBidXQgd2UgY2FuJ3QgbWFyayB0aGVtCisJICAgYXMgcmVhZC93cml0ZSwgb3RoZXJ3aXNlIHdlJ2Qgb3ZlcmZsb3cgdGhlIDEwLWFzbS1vcGVyYW5kcworCSAgIGxpbWl0IG9mIEdDQyA8IDMuMS4gICovCisJX19hc21fXyAoIiIgOiAiK3IiIChwNCksICIrciIgKHA1KSk7CisKKyAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAorI3VuZGVmIEJMT0NLCisjZGVmaW5lIEJMT0NLKGkpIFwKKwkJUEYxKGkpCQkJCQlcCisJCQkJUEYxKGkrMikJCVwKKwkJTEQoaSwwKQkJCQkJXAorCQkJTEQoaSsxLDEpCQkJXAorCQkJCUxEKGkrMiwyKQkJXAorCQkJCQlMRChpKzMsMykJXAorCQlQRjIoaSkJCQkJCVwKKwkJCQlQRjIoaSsyKQkJXAorCQlYTzEoaSwwKQkJCQlcCisJCQlYTzEoaSsxLDEpCQkJXAorCQkJCVhPMShpKzIsMikJCVwKKwkJCQkJWE8xKGkrMywzKQlcCisJCVBGMyhpKQkJCQkJXAorCQkJCVBGMyhpKzIpCQlcCisJCVhPMihpLDApCQkJCVwKKwkJCVhPMihpKzEsMSkJCQlcCisJCQkJWE8yKGkrMiwyKQkJXAorCQkJCQlYTzIoaSszLDMpCVwKKwkJUEY0KGkpCQkJCQlcCisJCQkJUEY0KGkrMikJCVwKKwkJUEYwKGkrNCkJCQkJXAorCQkJCVBGMChpKzYpCQlcCisJCVhPMyhpLDApCQkJCVwKKwkJCVhPMyhpKzEsMSkJCQlcCisJCQkJWE8zKGkrMiwyKQkJXAorCQkJCQlYTzMoaSszLDMpCVwKKwkJWE80KGksMCkJCQkJXAorCQkJWE80KGkrMSwxKQkJCVwKKwkJCQlYTzQoaSsyLDIpCQlcCisJCQkJCVhPNChpKzMsMykJXAorCQlTVChpLDApCQkJCQlcCisJCQlTVChpKzEsMSkJCQlcCisJCQkJU1QoaSsyLDIpCQlcCisJCQkJCVNUKGkrMywzKQlcCisKKworCQlQRjAoMCkKKwkJCQlQRjAoMikKKworCSIgLmFsaWduIDMyCQkJO1xuIgorICAgICAgICAiIDE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcbiIKKworCQlCTE9DSygwKQorCQlCTE9DSyg0KQorCQlCTE9DSyg4KQorCQlCTE9DSygxMikKKworICAgICAgICAiICAgICAgIGFkZGwgJDI1NiwgJTEgICAgICAgICAgIDtcbiIKKyAgICAgICAgIiAgICAgICBhZGRsICQyNTYsICUyICAgICAgICAgICA7XG4iCisgICAgICAgICIgICAgICAgYWRkbCAkMjU2LCAlMyAgICAgICAgICAgO1xuIgorICAgICAgICAiICAgICAgIGFkZGwgJDI1NiwgJTQgICAgICAgICAgIDtcbiIKKyAgICAgICAgIiAgICAgICBhZGRsICQyNTYsICU1ICAgICAgICAgICA7XG4iCisgICAgICAgICIgICAgICAgZGVjbCAlMCAgICAgICAgICAgICAgICAgO1xuIgorICAgICAgICAiICAgICAgIGpueiAxYiAgICAgICAgICAgICAgICAgIDtcbiIKKwk6ICIrciIgKGxpbmVzKSwKKwkgICIrciIgKHAxKSwgIityIiAocDIpLCAiK3IiIChwMykKKwk6ICJyIiAocDQpLCAiciIgKHA1KQorCTogIm1lbW9yeSIpOworCisJLyogcDQgYW5kIHA1IHdlcmUgbW9kaWZpZWQsIGFuZCBub3cgdGhlIHZhcmlhYmxlcyBhcmUgZGVhZC4KKwkgICBDbG9iYmVyIHRoZW0ganVzdCB0byBiZSBzdXJlIG5vYm9keSBkb2VzIHNvbWV0aGluZyBzdHVwaWQKKwkgICBsaWtlIGFzc3VtaW5nIHRoZXkgaGF2ZSBzb21lIGxlZ2FsIHZhbHVlLiAgKi8KKwlfX2FzbV9fICgiIiA6ICI9ciIgKHA0KSwgIj1yIiAocDUpKTsKKworCVhNTVNfUkVTVE9SRTsKK30KKworc3RhdGljIHN0cnVjdCB4b3JfYmxvY2tfdGVtcGxhdGUgeG9yX2Jsb2NrX3BJSUlfc3NlID0geworICAgICAgICAubmFtZSA9ICJwSUlJX3NzZSIsCisgICAgICAgIC5kb18yID0gIHhvcl9zc2VfMiwKKyAgICAgICAgLmRvXzMgPSAgeG9yX3NzZV8zLAorICAgICAgICAuZG9fNCA9ICB4b3Jfc3NlXzQsCisgICAgICAgIC5kb181ID0geG9yX3NzZV81LAorfTsKKworLyogQWxzbyB0cnkgdGhlIGdlbmVyaWMgcm91dGluZXMuICAqLworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3hvci5oPgorCisjdW5kZWYgWE9SX1RSWV9URU1QTEFURVMKKyNkZWZpbmUgWE9SX1RSWV9URU1QTEFURVMJCQkJXAorCWRvIHsJCQkJCQlcCisJCXhvcl9zcGVlZCgmeG9yX2Jsb2NrXzhyZWdzKTsJCVwKKwkJeG9yX3NwZWVkKCZ4b3JfYmxvY2tfOHJlZ3NfcCk7CQlcCisJCXhvcl9zcGVlZCgmeG9yX2Jsb2NrXzMycmVncyk7CQlcCisJCXhvcl9zcGVlZCgmeG9yX2Jsb2NrXzMycmVnc19wKTsJCVwKKwkgICAgICAgIGlmIChjcHVfaGFzX3htbSkJCQlcCisJCQl4b3Jfc3BlZWQoJnhvcl9ibG9ja19wSUlJX3NzZSk7CVwKKwkgICAgICAgIGlmIChjcHVfaGFzX21teCkgewkJCVwKKwkgICAgICAgICAgICAgICAgeG9yX3NwZWVkKCZ4b3JfYmxvY2tfcElJX21teCk7CVwKKwkgICAgICAgICAgICAgICAgeG9yX3NwZWVkKCZ4b3JfYmxvY2tfcDVfbW14KTsJXAorCSAgICAgICAgfQkJCQkJXAorCX0gd2hpbGUgKDApCisKKy8qIFdlIGZvcmNlIHRoZSB1c2Ugb2YgdGhlIFNTRSB4b3IgYmxvY2sgYmVjYXVzZSBpdCBjYW4gd3JpdGUgYXJvdW5kIEwyLgorICAgV2UgbWF5IGFsc28gYmUgYWJsZSB0byBsb2FkIGludG8gdGhlIEwxIG9ubHkgZGVwZW5kaW5nIG9uIGhvdyB0aGUgY3B1CisgICBkZWFscyB3aXRoIGEgbG9hZCB0byBhIGxpbmUgdGhhdCBpcyBiZWluZyBwcmVmZXRjaGVkLiAgKi8KKyNkZWZpbmUgWE9SX1NFTEVDVF9URU1QTEFURShGQVNURVNUKSBcCisJKGNwdV9oYXNfeG1tID8gJnhvcl9ibG9ja19wSUlJX3NzZSA6IEZBU1RFU1QpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L2Eub3V0LmggYi9pbmNsdWRlL2FzbS1pYTY0L2Eub3V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI5M2FjMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvYS5vdXQuaApAQCAtMCwwICsxLDM1IEBACisjaWZuZGVmIF9BU01fSUE2NF9BX09VVF9ICisjZGVmaW5lIF9BU01fSUE2NF9BX09VVF9ICisKKy8qCisgKiBObyBhLm91dCBmb3JtYXQgaGFzIGJlZW4gKG9yIHNob3VsZCBiZSkgZGVmaW5lZCBzbyB0aGlzIGZpbGUgaXMKKyAqIGp1c3QgYSBkdW1teSB0aGF0IGFsbG93cyB1cyB0byBnZXQgYmluZm10X2VsZiBjb21waWxlZC4gIEl0CisgKiBwcm9iYWJseSB3b3VsZCBiZSBiZXR0ZXIgdG8gY2xlYW4gdXAgYmluZm10X2VsZi5jIHNvIGl0IGRvZXMgbm90CisgKiBuZWNlc3NhcmlseSBkZXBlbmQgb24gdGhlcmUgYmVpbmcgYS5vdXQgc3VwcG9ydC4KKyAqCisgKiBNb2RpZmllZCAxOTk4LTIwMDIKKyAqCURhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4sIEhld2xldHQtUGFja2FyZCBDby4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IGV4ZWMgeworCXVuc2lnbmVkIGxvbmcgYV9pbmZvOworCXVuc2lnbmVkIGxvbmcgYV90ZXh0OworCXVuc2lnbmVkIGxvbmcgYV9kYXRhOworCXVuc2lnbmVkIGxvbmcgYV9ic3M7CisJdW5zaWduZWQgbG9uZyBhX2VudHJ5OworfTsKKworI2RlZmluZSBOX1RYVEFERFIoeCkJMAorI2RlZmluZSBOX0RBVEFERFIoeCkJMAorI2RlZmluZSBOX0JTU0FERFIoeCkJMAorI2RlZmluZSBOX0RSU0laRSh4KQkwCisjZGVmaW5lIE5fVFJTSVpFKHgpCTAKKyNkZWZpbmUgTl9TWU1TSVpFKHgpCTAKKyNkZWZpbmUgTl9UWFRPRkYoeCkJMAorCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGFzbS91c3RhY2suaD4KKyNlbmRpZgorI2VuZGlmIC8qIF9BU01fSUE2NF9BX09VVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L2FjcGktZXh0LmggYi9pbmNsdWRlL2FzbS1pYTY0L2FjcGktZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI3MWQ3NAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvYWNwaS1leHQuaApAQCAtMCwwICsxLDE3IEBACisvKgorICogaWE2NC9wbGF0Zm9ybS9ocC9jb21tb24vaHBfYWNwaS5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzIEhld2xldHQtUGFja2FyZAorICogQ29weXJpZ2h0IChDKSBBbGV4IFdpbGxpYW1zb24KKyAqIENvcHlyaWdodCAoQykgQmpvcm4gSGVsZ2FhcworICoKKyAqIFZlbmRvciBzcGVjaWZpYyBleHRlbnNpb25zIHRvIEFDUEkuCisgKi8KKyNpZm5kZWYgX0FTTV9JQTY0X0FDUElfRVhUX0gKKyNkZWZpbmUgX0FTTV9JQTY0X0FDUElfRVhUX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK2V4dGVybiBhY3BpX3N0YXR1cyBocF9hY3BpX2Nzcl9zcGFjZSAoYWNwaV9oYW5kbGUsIHU2NCAqYmFzZSwgdTY0ICpsZW5ndGgpOworCisjZW5kaWYgLyogX0FTTV9JQTY0X0FDUElfRVhUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvYWNwaS5oIGIvaW5jbHVkZS9hc20taWE2NC9hY3BpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmEyNmE5NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvYWNwaS5oCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogIGFzbS1pYTY0L2FjcGkuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTkgVkEgTGludXggU3lzdGVtcworICogIENvcHlyaWdodCAoQykgMTk5OSBXYWx0IERydW1tb25kIDxkcnVtbW9uZEB2YWxpbnV4LmNvbT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDAsMjAwMSBKLkkuIExlZSA8anVuZy1pay5sZWVAaW50ZWwuY29tPgorICogIENvcHlyaWdodCAoQykgMjAwMSwyMDAyIFBhdWwgRGllZmVuYmF1Z2ggPHBhdWwucy5kaWVmZW5iYXVnaEBpbnRlbC5jb20+CisgKgorICogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorICovCisKKyNpZm5kZWYgX0FTTV9BQ1BJX0gKKyNkZWZpbmUgX0FTTV9BQ1BJX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9udW1hLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorCisjZGVmaW5lIENPTVBJTEVSX0RFUEVOREVOVF9JTlQ2NAlsb25nCisjZGVmaW5lIENPTVBJTEVSX0RFUEVOREVOVF9VSU5UNjQJdW5zaWduZWQgbG9uZworCisvKgorICogQ2FsbGluZyBjb252ZW50aW9uczoKKyAqCisgKiBBQ1BJX1NZU1RFTV9YRkFDRSAgICAgICAgLSBJbnRlcmZhY2VzIHRvIGhvc3QgT1MgKGhhbmRsZXJzLCB0aHJlYWRzKQorICogQUNQSV9FWFRFUk5BTF9YRkFDRSAgICAgIC0gRXh0ZXJuYWwgQUNQSSBpbnRlcmZhY2VzCisgKiBBQ1BJX0lOVEVSTkFMX1hGQUNFICAgICAgLSBJbnRlcm5hbCBBQ1BJIGludGVyZmFjZXMKKyAqIEFDUElfSU5URVJOQUxfVkFSX1hGQUNFICAtIEludGVybmFsIHZhcmlhYmxlLXBhcmFtZXRlciBsaXN0IGludGVyZmFjZXMKKyAqLworI2RlZmluZSBBQ1BJX1NZU1RFTV9YRkFDRQorI2RlZmluZSBBQ1BJX0VYVEVSTkFMX1hGQUNFCisjZGVmaW5lIEFDUElfSU5URVJOQUxfWEZBQ0UKKyNkZWZpbmUgQUNQSV9JTlRFUk5BTF9WQVJfWEZBQ0UKKworLyogQXNtIG1hY3JvcyAqLworCisjZGVmaW5lIEFDUElfQVNNX01BQ1JPUworI2RlZmluZSBCUkVBS1BPSU5UMworI2RlZmluZSBBQ1BJX0RJU0FCTEVfSVJRUygpIGxvY2FsX2lycV9kaXNhYmxlKCkKKyNkZWZpbmUgQUNQSV9FTkFCTEVfSVJRUygpICBsb2NhbF9pcnFfZW5hYmxlKCkKKyNkZWZpbmUgQUNQSV9GTFVTSF9DUFVfQ0FDSEUoKQorCitzdGF0aWMgaW5saW5lIGludAoraWE2NF9hY3BpX2FjcXVpcmVfZ2xvYmFsX2xvY2sgKHVuc2lnbmVkIGludCAqbG9jaykKK3sKKwl1bnNpZ25lZCBpbnQgb2xkLCBuZXcsIHZhbDsKKwlkbyB7CisJCW9sZCA9ICpsb2NrOworCQluZXcgPSAoKChvbGQgJiB+MHgzKSArIDIpICsgKChvbGQgPj4gMSkgJiAweDEpKTsKKwkJdmFsID0gaWE2NF9jbXB4Y2hnNF9hY3EobG9jaywgbmV3LCBvbGQpOworCX0gd2hpbGUgKHVubGlrZWx5ICh2YWwgIT0gb2xkKSk7CisJcmV0dXJuIChuZXcgPCAzKSA/IC0xIDogMDsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2lhNjRfYWNwaV9yZWxlYXNlX2dsb2JhbF9sb2NrICh1bnNpZ25lZCBpbnQgKmxvY2spCit7CisJdW5zaWduZWQgaW50IG9sZCwgbmV3LCB2YWw7CisJZG8geworCQlvbGQgPSAqbG9jazsKKwkJbmV3ID0gb2xkICYgfjB4MzsKKwkJdmFsID0gaWE2NF9jbXB4Y2hnNF9hY3EobG9jaywgbmV3LCBvbGQpOworCX0gd2hpbGUgKHVubGlrZWx5ICh2YWwgIT0gb2xkKSk7CisJcmV0dXJuIG9sZCAmIDB4MTsKK30KKworI2RlZmluZSBBQ1BJX0FDUVVJUkVfR0xPQkFMX0xPQ0soR0xwdHIsIEFjcSkJCQkJXAorCSgoQWNxKSA9IGlhNjRfYWNwaV9hY3F1aXJlX2dsb2JhbF9sb2NrKCh1bnNpZ25lZCBpbnQgKikgR0xwdHIpKQorCisjZGVmaW5lIEFDUElfUkVMRUFTRV9HTE9CQUxfTE9DSyhHTHB0ciwgQWNxKQkJCQlcCisJKChBY3EpID0gaWE2NF9hY3BpX3JlbGVhc2VfZ2xvYmFsX2xvY2soKHVuc2lnbmVkIGludCAqKSBHTHB0cikpCisKKyNkZWZpbmUgYWNwaV9kaXNhYmxlZCAwCS8qIEFDUEkgYWx3YXlzIGVuYWJsZWQgb24gSUE2NCAqLworI2RlZmluZSBhY3BpX25vaXJxIDAJLyogQUNQSSBhbHdheXMgZW5hYmxlZCBvbiBJQTY0ICovCisjZGVmaW5lIGFjcGlfcGNpX2Rpc2FibGVkIDAgLyogQUNQSSBQQ0kgYWx3YXlzIGVuYWJsZWQgb24gSUE2NCAqLworI2RlZmluZSBhY3BpX3N0cmljdCAxCS8qIG5vIEFDUEkgc3BlYyB3b3JrYXJvdW5kcyBvbiBJQTY0ICovCitzdGF0aWMgaW5saW5lIHZvaWQgZGlzYWJsZV9hY3BpKHZvaWQpIHsgfQorCitjb25zdCBjaGFyICphY3BpX2dldF9zeXNuYW1lICh2b2lkKTsKK2ludCBhY3BpX3JlcXVlc3RfdmVjdG9yICh1MzIgaW50X3R5cGUpOworaW50IGFjcGlfZ3NpX3RvX2lycSAodTMyIGdzaSwgdW5zaWduZWQgaW50ICppcnEpOworCisjaWZkZWYgQ09ORklHX0FDUElfTlVNQQorLyogUHJveGltaXR5IGJpdG1hcCBsZW5ndGg7IF9QWE0gaXMgYXQgbW9zdCAyNTUgKDggYml0KSovCisjZGVmaW5lIE1BWF9QWE1fRE9NQUlOUyAoMjU2KQorZXh0ZXJuIGludCBfX2RldmluaXRkYXRhIHB4bV90b19uaWRfbWFwW01BWF9QWE1fRE9NQUlOU107CitleHRlcm4gaW50IF9faW5pdGRhdGEgbmlkX3RvX3B4bV9tYXBbTUFYX05VTU5PREVTXTsKKyNlbmRpZgorCitleHRlcm4gdTE2IGlhNjRfYWNwaWlkX3RvX3NhcGljaWRbXTsKKworI2VuZGlmIC8qX19LRVJORUxfXyovCisKKyNlbmRpZiAvKl9BU01fQUNQSV9IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvYWdwLmggYi9pbmNsdWRlL2FzbS1pYTY0L2FncC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxMzE2ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L2FncC5oCkBAIC0wLDAgKzEsMjEgQEAKKyNpZm5kZWYgX0FTTV9JQTY0X0FHUF9ICisjZGVmaW5lIF9BU01fSUE2NF9BR1BfSAorCisvKgorICogSUEtNjQgc3BlY2lmaWMgQUdQIGRlZmluaXRpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMi0yMDAzIEhld2xldHQtUGFja2FyZCBDbworICoJRGF2aWQgTW9zYmVyZ2VyLVRhbmcgPGRhdmlkbUBocGwuaHAuY29tPgorICovCisKKy8qCisgKiBUbyBhdm9pZCBtZW1vcnktYXR0cmlidXRlIGFsaWFzaW5nIGlzc3Vlcywgd2UgcmVxdWlyZSB0aGF0IHRoZSBBR1BHQVJUIGVuZ2luZSBvcGVyYXRlCisgKiBpbiBjb2hlcmVudCBtb2RlLCB3aGljaCBsZXRzIHVzIG1hcCB0aGUgQUdQIG1lbW9yeSBhcyBub3JtYWwgKHdyaXRlLWJhY2spIG1lbW9yeQorICogKHVubGlrZSB4ODYsIHdoZXJlIGl0IGdldHMgbWFwcGVkICJ3cml0ZS1jb2FsZXNjaW5nIikuCisgKi8KKyNkZWZpbmUgbWFwX3BhZ2VfaW50b19hZ3AocGFnZSkJCS8qIG5vdGhpbmcgKi8KKyNkZWZpbmUgdW5tYXBfcGFnZV9mcm9tX2FncChwYWdlKQkvKiBub3RoaW5nICovCisjZGVmaW5lIGZsdXNoX2FncF9tYXBwaW5ncygpCQkvKiBub3RoaW5nICovCisjZGVmaW5lIGZsdXNoX2FncF9jYWNoZSgpCQltYigpCisKKyNlbmRpZiAvKiBfQVNNX0lBNjRfQUdQX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvYXNtbWFjcm8uaCBiL2luY2x1ZGUvYXNtLWlhNjQvYXNtbWFjcm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2FmNDU3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taWE2NC9hc21tYWNyby5oCkBAIC0wLDAgKzEsMTExIEBACisjaWZuZGVmIF9BU01fSUE2NF9BU01NQUNST19ICisjZGVmaW5lIF9BU01fSUE2NF9BU01NQUNST19ICisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMSwgMjAwMy0yMDA0IEhld2xldHQtUGFja2FyZCBDbworICoJRGF2aWQgTW9zYmVyZ2VyLVRhbmcgPGRhdmlkbUBocGwuaHAuY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2RlZmluZSBFTlRSWShuYW1lKQkJCQlcCisJLmFsaWduIDMyOwkJCQlcCisJLnByb2MgbmFtZTsJCQkJXAorbmFtZToKKworI2RlZmluZSBFTlRSWV9NSU5fQUxJR04obmFtZSkJCQlcCisJLmFsaWduIDE2OwkJCQlcCisJLnByb2MgbmFtZTsJCQkJXAorbmFtZToKKworI2RlZmluZSBHTE9CQUxfRU5UUlkobmFtZSkJCQlcCisJLmdsb2JhbCBuYW1lOwkJCQlcCisJRU5UUlkobmFtZSkKKworI2RlZmluZSBFTkQobmFtZSkJCQkJXAorCS5lbmRwIG5hbWUKKworLyoKKyAqIEhlbHBlciBtYWNyb3MgdG8gbWFrZSB1bndpbmQgZGlyZWN0aXZlcyBtb3JlIHJlYWRhYmxlOgorICovCisKKy8qIHByb2xvZ3VlX2dyOiAqLworI2RlZmluZSBBU01fVU5XX1BSTEdfUlAJCQkweDgKKyNkZWZpbmUgQVNNX1VOV19QUkxHX1BGUwkJMHg0CisjZGVmaW5lIEFTTV9VTldfUFJMR19QU1AJCTB4MgorI2RlZmluZSBBU01fVU5XX1BSTEdfUFIJCQkweDEKKyNkZWZpbmUgQVNNX1VOV19QUkxHX0dSU0FWRShuaW5wdXRzKQkoMzIrKG5pbnB1dHMpKQorCisvKgorICogSGVscGVyIG1hY3JvcyBmb3IgYWNjZXNzaW5nIHVzZXIgbWVtb3J5LgorICovCisKKwkuc2VjdGlvbiAiX19leF90YWJsZSIsICJhIgkJLy8gZGVjbGFyZSBzZWN0aW9uICYgc2VjdGlvbiBhdHRyaWJ1dGVzCisJLnByZXZpb3VzCisKKyMgZGVmaW5lIEVYKHkseC4uLikJCQkJXAorCS54ZGF0YTQgIl9fZXhfdGFibGUiLCA5OWYtLiwgeS0uOwlcCisgIFs5OTpdCXgKKyMgZGVmaW5lIEVYQ0xSKHkseC4uLikJCQkJXAorCS54ZGF0YTQgIl9fZXhfdGFibGUiLCA5OWYtLiwgeS0uKzQ7CVwKKyAgWzk5Ol0JeAorCisvKgorICogTWFyayBpbnN0cnVjdGlvbnMgdGhhdCBuZWVkIGEgbG9hZCBvZiBhIHZpcnR1YWwgYWRkcmVzcyBwYXRjaGVkIHRvIGJlCisgKiBhIGxvYWQgb2YgYSBwaHlzaWNhbCBhZGRyZXNzLiAgV2UgdXNlIHRoaXMgZWl0aGVyIGluIGNyaXRpY2FsIHBlcmZvcm1hbmNlCisgKiBwYXRoIChpdnQuUyAtIFRMQiBtaXNzIHByb2Nlc3NpbmcpIG9yIGluIHBsYWNlcyB3aGVyZSBpdCBtaWdodCBub3QgYmUKKyAqIHNhZmUgdG8gdXNlIGEgInRwYSIgaW5zdHJ1Y3Rpb24gKG1jYV9hc20uUyAtIGVycm9yIHJlY292ZXJ5KS4KKyAqLworCS5zZWN0aW9uICIuZGF0YS5wYXRjaC52dG9wIiwgImEiCS8vIGRlY2xhcmUgc2VjdGlvbiAmIHNlY3Rpb24gYXR0cmlidXRlcworCS5wcmV2aW91cworCisjZGVmaW5lCUxPQURfUEhZU0lDQUwocHIsIHJlZywgb2JqKQkJXAorWzE6XShwciltb3ZsIHJlZyA9IG9iajsJCQkJXAorCS54ZGF0YTQgIi5kYXRhLnBhdGNoLnZ0b3AiLCAxYi0uCisKKy8qCisgKiBGb3Igbm93LCB3ZSBhbHdheXMgcHV0IGluIHRoZSBNY0tpbmxleSBFOSB3b3JrYXJvdW5kLiAgT24gQ1BVcyB0aGF0IGRvbid0IG5lZWQgaXQsCisgKiB3ZSdsbCBwYXRjaCBvdXQgdGhlIHdvcmstYXJvdW5kIGJ1bmRsZXMgd2l0aCBOT1BzLCBzbyB0aGVpciBpbXBhY3QgaXMgbWluaW1hbC4KKyAqLworI2RlZmluZSBET19NQ0tJTkxFWV9FOV9XT1JLQVJPVU5ECisKKyNpZmRlZiBET19NQ0tJTkxFWV9FOV9XT1JLQVJPVU5ECisJLnNlY3Rpb24gIi5kYXRhLnBhdGNoLm1ja2lubGV5X2U5IiwgImEiCisJLnByZXZpb3VzCisvKiB3b3JrYXJvdW5kIGZvciBJdGFuaXVtIDIgRXJyYXRhIDk6ICovCisjIGRlZmluZSBGU1lTX1JFVFVSTgkJCQkJXAorCS54ZGF0YTQgIi5kYXRhLnBhdGNoLm1ja2lubGV5X2U5IiwgMWYtLjsJXAorMTp7IC5taWI7CQkJCQkJXAorCW5vcC5tIDA7CQkJCQlcCisJbW92IHIxNj1hci5wZnM7CQkJCQlcCisJYnIuY2FsbC5zcHRrLm1hbnkgYjc9MmY7OwkJCVwKKyAgfTsJCQkJCQkJXAorMjp7IC5taWI7CQkJCQkJXAorCW5vcC5tIDA7CQkJCQlcCisJbW92IGFyLnBmcz1yMTY7CQkJCQlcCisJYnIucmV0LnNwdGsubWFueSBiNjs7CQkJCVwKKyAgfQorI2Vsc2UKKyMgZGVmaW5lIEZTWVNfUkVUVVJOCWJyLnJldC5zcHRrLm1hbnkgYjYKKyNlbmRpZgorCisvKgorICogVXAgdW50aWwgZWFybHkgMjAwNCwgdXNlIG9mIC5hbGlnbiB3aXRoaW4gYSBmdW5jdGlvbiBjYXVzZWQgYmFkIHVud2luZCBpbmZvLgorICogVEVYVF9BTElHTihuKSBleHBhbmRzIGludG8gIi5hbGlnbiBuIiBpZiBhIGZpeGVkIEdBUyBpcyBhdmFpbGFibGUgb3IgaW50byBub3RoaW5nCisgKiBvdGhlcndpc2UuCisgKi8KKyNpZmRlZiBIQVZFX1dPUktJTkdfVEVYVF9BTElHTgorIyBkZWZpbmUgVEVYVF9BTElHTihuKQkuYWxpZ24gbgorI2Vsc2UKKyMgZGVmaW5lIFRFWFRfQUxJR04obikKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9TRVJJQUxJWkVfRElSRUNUSVZFCisjIGRlZmluZSBkdl9zZXJpYWxpemVfZGF0YQkJLnNlcmlhbGl6ZS5kYXRhCisjIGRlZmluZSBkdl9zZXJpYWxpemVfaW5zdHJ1Y3Rpb24JLnNlcmlhbGl6ZS5pbnN0cnVjdGlvbgorI2Vsc2UKKyMgZGVmaW5lIGR2X3NlcmlhbGl6ZV9kYXRhCisjIGRlZmluZSBkdl9zZXJpYWxpemVfaW5zdHJ1Y3Rpb24KKyNlbmRpZgorCisjZW5kaWYgLyogX0FTTV9JQTY0X0FTTU1BQ1JPX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvYXRvbWljLmggYi9pbmNsdWRlL2FzbS1pYTY0L2F0b21pYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3NGE2ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L2F0b21pYy5oCkBAIC0wLDAgKzEsMTgzIEBACisjaWZuZGVmIF9BU01fSUE2NF9BVE9NSUNfSAorI2RlZmluZSBfQVNNX0lBNjRfQVRPTUlDX0gKKworLyoKKyAqIEF0b21pYyBvcGVyYXRpb25zIHRoYXQgQyBjYW4ndCBndWFyYW50ZWUgdXMuICBVc2VmdWwgZm9yCisgKiByZXNvdXJjZSBjb3VudGluZyBldGMuLgorICoKKyAqIE5PVEU6IGRvbid0IG1lc3Mgd2l0aCB0aGUgdHlwZXMgYmVsb3chICBUaGUgInVuc2lnbmVkIGxvbmciIGFuZAorICogImludCIgdHlwZXMgd2VyZSBjYXJlZnVsbHkgcGxhY2VkIHNvIGFzIHRvIGVuc3VyZSBwcm9wZXIgb3BlcmF0aW9uCisgKiBvZiB0aGUgbWFjcm9zLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSwgMjAwMi0yMDAzIEhld2xldHQtUGFja2FyZCBDbworICoJRGF2aWQgTW9zYmVyZ2VyLVRhbmcgPGRhdmlkbUBocGwuaHAuY29tPgorICovCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2luY2x1ZGUgPGFzbS9pbnRyaW5zaWNzLmg+CisKKy8qCisgKiBPbiBJQS02NCwgY291bnRlciBtdXN0IGFsd2F5cyBiZSB2b2xhdGlsZSB0byBlbnN1cmUgdGhhdCB0aGF0IHRoZQorICogbWVtb3J5IGFjY2Vzc2VzIGFyZSBvcmRlcmVkLgorICovCit0eXBlZGVmIHN0cnVjdCB7IHZvbGF0aWxlIF9fczMyIGNvdW50ZXI7IH0gYXRvbWljX3Q7Cit0eXBlZGVmIHN0cnVjdCB7IHZvbGF0aWxlIF9fczY0IGNvdW50ZXI7IH0gYXRvbWljNjRfdDsKKworI2RlZmluZSBBVE9NSUNfSU5JVChpKQkJKChhdG9taWNfdCkgeyAoaSkgfSkKKyNkZWZpbmUgQVRPTUlDNjRfSU5JVChpKQkoKGF0b21pYzY0X3QpIHsgKGkpIH0pCisKKyNkZWZpbmUgYXRvbWljX3JlYWQodikJCSgodiktPmNvdW50ZXIpCisjZGVmaW5lIGF0b21pYzY0X3JlYWQodikJKCh2KS0+Y291bnRlcikKKworI2RlZmluZSBhdG9taWNfc2V0KHYsaSkJCSgoKHYpLT5jb3VudGVyKSA9IChpKSkKKyNkZWZpbmUgYXRvbWljNjRfc2V0KHYsaSkJKCgodiktPmNvdW50ZXIpID0gKGkpKQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQKK2lhNjRfYXRvbWljX2FkZCAoaW50IGksIGF0b21pY190ICp2KQoreworCV9fczMyIG9sZCwgbmV3OworCUNNUFhDSEdfQlVHQ0hFQ0tfREVDTAorCisJZG8geworCQlDTVBYQ0hHX0JVR0NIRUNLKHYpOworCQlvbGQgPSBhdG9taWNfcmVhZCh2KTsKKwkJbmV3ID0gb2xkICsgaTsKKwl9IHdoaWxlIChpYTY0X2NtcHhjaGcoYWNxLCB2LCBvbGQsIG5ldywgc2l6ZW9mKGF0b21pY190KSkgIT0gb2xkKTsKKwlyZXR1cm4gbmV3OworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQKK2lhNjRfYXRvbWljNjRfYWRkIChfX3M2NCBpLCBhdG9taWM2NF90ICp2KQoreworCV9fczY0IG9sZCwgbmV3OworCUNNUFhDSEdfQlVHQ0hFQ0tfREVDTAorCisJZG8geworCQlDTVBYQ0hHX0JVR0NIRUNLKHYpOworCQlvbGQgPSBhdG9taWNfcmVhZCh2KTsKKwkJbmV3ID0gb2xkICsgaTsKKwl9IHdoaWxlIChpYTY0X2NtcHhjaGcoYWNxLCB2LCBvbGQsIG5ldywgc2l6ZW9mKGF0b21pYzY0X3QpKSAhPSBvbGQpOworCXJldHVybiBuZXc7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludAoraWE2NF9hdG9taWNfc3ViIChpbnQgaSwgYXRvbWljX3QgKnYpCit7CisJX19zMzIgb2xkLCBuZXc7CisJQ01QWENIR19CVUdDSEVDS19ERUNMCisKKwlkbyB7CisJCUNNUFhDSEdfQlVHQ0hFQ0sodik7CisJCW9sZCA9IGF0b21pY19yZWFkKHYpOworCQluZXcgPSBvbGQgLSBpOworCX0gd2hpbGUgKGlhNjRfY21weGNoZyhhY3EsIHYsIG9sZCwgbmV3LCBzaXplb2YoYXRvbWljX3QpKSAhPSBvbGQpOworCXJldHVybiBuZXc7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludAoraWE2NF9hdG9taWM2NF9zdWIgKF9fczY0IGksIGF0b21pYzY0X3QgKnYpCit7CisJX19zNjQgb2xkLCBuZXc7CisJQ01QWENIR19CVUdDSEVDS19ERUNMCisKKwlkbyB7CisJCUNNUFhDSEdfQlVHQ0hFQ0sodik7CisJCW9sZCA9IGF0b21pY19yZWFkKHYpOworCQluZXcgPSBvbGQgLSBpOworCX0gd2hpbGUgKGlhNjRfY21weGNoZyhhY3EsIHYsIG9sZCwgbmV3LCBzaXplb2YoYXRvbWljNjRfdCkpICE9IG9sZCk7CisJcmV0dXJuIG5ldzsKK30KKworI2RlZmluZSBhdG9taWNfYWRkX3JldHVybihpLHYpCQkJCQkJXAorKHsJCQkJCQkJCQlcCisJaW50IF9faWE2NF9hYXJfaSA9IChpKTsJCQkJCQlcCisJKF9fYnVpbHRpbl9jb25zdGFudF9wKGkpCQkJCQlcCisJICYmICggICAoX19pYTY0X2Fhcl9pID09ICAxKSB8fCAoX19pYTY0X2Fhcl9pID09ICAgNCkJCVwKKwkgICAgIHx8IChfX2lhNjRfYWFyX2kgPT0gIDgpIHx8IChfX2lhNjRfYWFyX2kgPT0gIDE2KQkJXAorCSAgICAgfHwgKF9faWE2NF9hYXJfaSA9PSAtMSkgfHwgKF9faWE2NF9hYXJfaSA9PSAgLTQpCQlcCisJICAgICB8fCAoX19pYTY0X2Fhcl9pID09IC04KSB8fCAoX19pYTY0X2Fhcl9pID09IC0xNikpKQkJXAorCQk/IGlhNjRfZmV0Y2hfYW5kX2FkZChfX2lhNjRfYWFyX2ksICYodiktPmNvdW50ZXIpCVwKKwkJOiBpYTY0X2F0b21pY19hZGQoX19pYTY0X2Fhcl9pLCB2KTsJCQlcCit9KQorCisjZGVmaW5lIGF0b21pYzY0X2FkZF9yZXR1cm4oaSx2KQkJCQkJXAorKHsJCQkJCQkJCQlcCisJbG9uZyBfX2lhNjRfYWFyX2kgPSAoaSk7CQkJCQlcCisJKF9fYnVpbHRpbl9jb25zdGFudF9wKGkpCQkJCQlcCisJICYmICggICAoX19pYTY0X2Fhcl9pID09ICAxKSB8fCAoX19pYTY0X2Fhcl9pID09ICAgNCkJCVwKKwkgICAgIHx8IChfX2lhNjRfYWFyX2kgPT0gIDgpIHx8IChfX2lhNjRfYWFyX2kgPT0gIDE2KQkJXAorCSAgICAgfHwgKF9faWE2NF9hYXJfaSA9PSAtMSkgfHwgKF9faWE2NF9hYXJfaSA9PSAgLTQpCQlcCisJICAgICB8fCAoX19pYTY0X2Fhcl9pID09IC04KSB8fCAoX19pYTY0X2Fhcl9pID09IC0xNikpKQkJXAorCQk/IGlhNjRfZmV0Y2hfYW5kX2FkZChfX2lhNjRfYWFyX2ksICYodiktPmNvdW50ZXIpCVwKKwkJOiBpYTY0X2F0b21pYzY0X2FkZChfX2lhNjRfYWFyX2ksIHYpOwkJCVwKK30pCisKKy8qCisgKiBBdG9taWNhbGx5IGFkZCBJIHRvIFYgYW5kIHJldHVybiBUUlVFIGlmIHRoZSByZXN1bHRpbmcgdmFsdWUgaXMKKyAqIG5lZ2F0aXZlLgorICovCitzdGF0aWMgX19pbmxpbmVfXyBpbnQKK2F0b21pY19hZGRfbmVnYXRpdmUgKGludCBpLCBhdG9taWNfdCAqdikKK3sKKwlyZXR1cm4gYXRvbWljX2FkZF9yZXR1cm4oaSwgdikgPCAwOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQKK2F0b21pYzY0X2FkZF9uZWdhdGl2ZSAoX19zNjQgaSwgYXRvbWljNjRfdCAqdikKK3sKKwlyZXR1cm4gYXRvbWljNjRfYWRkX3JldHVybihpLCB2KSA8IDA7Cit9CisKKyNkZWZpbmUgYXRvbWljX3N1Yl9yZXR1cm4oaSx2KQkJCQkJCVwKKyh7CQkJCQkJCQkJXAorCWludCBfX2lhNjRfYXNyX2kgPSAoaSk7CQkJCQkJXAorCShfX2J1aWx0aW5fY29uc3RhbnRfcChpKQkJCQkJXAorCSAmJiAoICAgKF9faWE2NF9hc3JfaSA9PSAgIDEpIHx8IChfX2lhNjRfYXNyX2kgPT0gICA0KQkJXAorCSAgICAgfHwgKF9faWE2NF9hc3JfaSA9PSAgIDgpIHx8IChfX2lhNjRfYXNyX2kgPT0gIDE2KQkJXAorCSAgICAgfHwgKF9faWE2NF9hc3JfaSA9PSAgLTEpIHx8IChfX2lhNjRfYXNyX2kgPT0gIC00KQkJXAorCSAgICAgfHwgKF9faWE2NF9hc3JfaSA9PSAgLTgpIHx8IChfX2lhNjRfYXNyX2kgPT0gLTE2KSkpCVwKKwkJPyBpYTY0X2ZldGNoX2FuZF9hZGQoLV9faWE2NF9hc3JfaSwgJih2KS0+Y291bnRlcikJXAorCQk6IGlhNjRfYXRvbWljX3N1YihfX2lhNjRfYXNyX2ksIHYpOwkJCVwKK30pCisKKyNkZWZpbmUgYXRvbWljNjRfc3ViX3JldHVybihpLHYpCQkJCQlcCisoewkJCQkJCQkJCVwKKwlsb25nIF9faWE2NF9hc3JfaSA9IChpKTsJCQkJCVwKKwkoX19idWlsdGluX2NvbnN0YW50X3AoaSkJCQkJCVwKKwkgJiYgKCAgIChfX2lhNjRfYXNyX2kgPT0gICAxKSB8fCAoX19pYTY0X2Fzcl9pID09ICAgNCkJCVwKKwkgICAgIHx8IChfX2lhNjRfYXNyX2kgPT0gICA4KSB8fCAoX19pYTY0X2Fzcl9pID09ICAxNikJCVwKKwkgICAgIHx8IChfX2lhNjRfYXNyX2kgPT0gIC0xKSB8fCAoX19pYTY0X2Fzcl9pID09ICAtNCkJCVwKKwkgICAgIHx8IChfX2lhNjRfYXNyX2kgPT0gIC04KSB8fCAoX19pYTY0X2Fzcl9pID09IC0xNikpKQlcCisJCT8gaWE2NF9mZXRjaF9hbmRfYWRkKC1fX2lhNjRfYXNyX2ksICYodiktPmNvdW50ZXIpCVwKKwkJOiBpYTY0X2F0b21pYzY0X3N1YihfX2lhNjRfYXNyX2ksIHYpOwkJCVwKK30pCisKKyNkZWZpbmUgYXRvbWljX2RlY19yZXR1cm4odikJCWF0b21pY19zdWJfcmV0dXJuKDEsICh2KSkKKyNkZWZpbmUgYXRvbWljX2luY19yZXR1cm4odikJCWF0b21pY19hZGRfcmV0dXJuKDEsICh2KSkKKyNkZWZpbmUgYXRvbWljNjRfZGVjX3JldHVybih2KQkJYXRvbWljNjRfc3ViX3JldHVybigxLCAodikpCisjZGVmaW5lIGF0b21pYzY0X2luY19yZXR1cm4odikJCWF0b21pYzY0X2FkZF9yZXR1cm4oMSwgKHYpKQorCisjZGVmaW5lIGF0b21pY19zdWJfYW5kX3Rlc3QoaSx2KQkoYXRvbWljX3N1Yl9yZXR1cm4oKGkpLCAodikpID09IDApCisjZGVmaW5lIGF0b21pY19kZWNfYW5kX3Rlc3QodikJCShhdG9taWNfc3ViX3JldHVybigxLCAodikpID09IDApCisjZGVmaW5lIGF0b21pY19pbmNfYW5kX3Rlc3QodikJCShhdG9taWNfYWRkX3JldHVybigxLCAodikpID09IDApCisjZGVmaW5lIGF0b21pYzY0X3N1Yl9hbmRfdGVzdChpLHYpCShhdG9taWM2NF9zdWJfcmV0dXJuKChpKSwgKHYpKSA9PSAwKQorI2RlZmluZSBhdG9taWM2NF9kZWNfYW5kX3Rlc3QodikJKGF0b21pYzY0X3N1Yl9yZXR1cm4oMSwgKHYpKSA9PSAwKQorI2RlZmluZSBhdG9taWM2NF9pbmNfYW5kX3Rlc3QodikJKGF0b21pYzY0X2FkZF9yZXR1cm4oMSwgKHYpKSA9PSAwKQorCisjZGVmaW5lIGF0b21pY19hZGQoaSx2KQkJCWF0b21pY19hZGRfcmV0dXJuKChpKSwgKHYpKQorI2RlZmluZSBhdG9taWNfc3ViKGksdikJCQlhdG9taWNfc3ViX3JldHVybigoaSksICh2KSkKKyNkZWZpbmUgYXRvbWljX2luYyh2KQkJCWF0b21pY19hZGQoMSwgKHYpKQorI2RlZmluZSBhdG9taWNfZGVjKHYpCQkJYXRvbWljX3N1YigxLCAodikpCisKKyNkZWZpbmUgYXRvbWljNjRfYWRkKGksdikJCWF0b21pYzY0X2FkZF9yZXR1cm4oKGkpLCAodikpCisjZGVmaW5lIGF0b21pYzY0X3N1YihpLHYpCQlhdG9taWM2NF9zdWJfcmV0dXJuKChpKSwgKHYpKQorI2RlZmluZSBhdG9taWM2NF9pbmModikJCQlhdG9taWM2NF9hZGQoMSwgKHYpKQorI2RlZmluZSBhdG9taWM2NF9kZWModikJCQlhdG9taWM2NF9zdWIoMSwgKHYpKQorCisvKiBBdG9taWMgb3BlcmF0aW9ucyBhcmUgYWxyZWFkeSBzZXJpYWxpemluZyAqLworI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfZGVjKCkJYmFycmllcigpCisjZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2RlYygpCWJhcnJpZXIoKQorI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfaW5jKCkJYmFycmllcigpCisjZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpCWJhcnJpZXIoKQorCisjZW5kaWYgLyogX0FTTV9JQTY0X0FUT01JQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L2JpdG9wcy5oIGIvaW5jbHVkZS9hc20taWE2NC9iaXRvcHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjVkNTRjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taWE2NC9iaXRvcHMuaApAQCAtMCwwICsxLDQxMCBAQAorI2lmbmRlZiBfQVNNX0lBNjRfQklUT1BTX0gKKyNkZWZpbmUgX0FTTV9JQTY0X0JJVE9QU19ICisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwMyBIZXdsZXR0LVBhY2thcmQgQ28KKyAqCURhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4KKyAqCisgKiAwMi8wNi8wMiBmaW5kX25leHRfYml0KCkgYW5kIGZpbmRfZmlyc3RfYml0KCkgYWRkZWQgZnJvbSBFcmljaCBGb2NodCdzIGlhNjQgTygxKQorICoJICAgIHNjaGVkdWxlciBwYXRjaAorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgorI2luY2x1ZGUgPGFzbS9pbnRyaW5zaWNzLmg+CisKKy8qKgorICogc2V0X2JpdCAtIEF0b21pY2FsbHkgc2V0IGEgYml0IGluIG1lbW9yeQorICogQG5yOiB0aGUgYml0IHRvIHNldAorICogQGFkZHI6IHRoZSBhZGRyZXNzIHRvIHN0YXJ0IGNvdW50aW5nIGZyb20KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGF0b21pYyBhbmQgbWF5IG5vdCBiZSByZW9yZGVyZWQuICBTZWUgX19zZXRfYml0KCkKKyAqIGlmIHlvdSBkbyBub3QgcmVxdWlyZSB0aGUgYXRvbWljIGd1YXJhbnRlZXMuCisgKiBOb3RlIHRoYXQgQG5yIG1heSBiZSBhbG1vc3QgYXJiaXRyYXJpbHkgbGFyZ2U7IHRoaXMgZnVuY3Rpb24gaXMgbm90CisgKiByZXN0cmljdGVkIHRvIGFjdGluZyBvbiBhIHNpbmdsZS13b3JkIHF1YW50aXR5LgorICoKKyAqIFRoZSBhZGRyZXNzIG11c3QgYmUgKGF0IGxlYXN0KSAibG9uZyIgYWxpZ25lZC4KKyAqIE5vdGUgdGhhdCB0aGVyZSBhcmUgZHJpdmVyIChlLmcuLCBlZXBybzEwMCkgd2hpY2ggdXNlIHRoZXNlIG9wZXJhdGlvbnMgdG8gb3BlcmF0ZSBvbgorICogaHctZGVmaW5lZCBkYXRhLXN0cnVjdHVyZXMsIHNvIHdlIGNhbid0IGVhc2lseSBjaGFuZ2UgdGhlc2Ugb3BlcmF0aW9ucyB0byBmb3JjZSBhCisgKiBiaWdnZXIgYWxpZ25tZW50LgorICoKKyAqIGJpdCAwIGlzIHRoZSBMU0Igb2YgYWRkcjsgYml0IDMyIGlzIHRoZSBMU0Igb2YgKGFkZHIrMSkuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQKK3NldF9iaXQgKGludCBuciwgdm9sYXRpbGUgdm9pZCAqYWRkcikKK3sKKwlfX3UzMiBiaXQsIG9sZCwgbmV3OworCXZvbGF0aWxlIF9fdTMyICptOworCUNNUFhDSEdfQlVHQ0hFQ0tfREVDTAorCisJbSA9ICh2b2xhdGlsZSBfX3UzMiAqKSBhZGRyICsgKG5yID4+IDUpOworCWJpdCA9IDEgPDwgKG5yICYgMzEpOworCWRvIHsKKwkJQ01QWENIR19CVUdDSEVDSyhtKTsKKwkJb2xkID0gKm07CisJCW5ldyA9IG9sZCB8IGJpdDsKKwl9IHdoaWxlIChjbXB4Y2hnX2FjcShtLCBvbGQsIG5ldykgIT0gb2xkKTsKK30KKworLyoqCisgKiBfX3NldF9iaXQgLSBTZXQgYSBiaXQgaW4gbWVtb3J5CisgKiBAbnI6IHRoZSBiaXQgdG8gc2V0CisgKiBAYWRkcjogdGhlIGFkZHJlc3MgdG8gc3RhcnQgY291bnRpbmcgZnJvbQorICoKKyAqIFVubGlrZSBzZXRfYml0KCksIHRoaXMgZnVuY3Rpb24gaXMgbm9uLWF0b21pYyBhbmQgbWF5IGJlIHJlb3JkZXJlZC4KKyAqIElmIGl0J3MgY2FsbGVkIG9uIHRoZSBzYW1lIHJlZ2lvbiBvZiBtZW1vcnkgc2ltdWx0YW5lb3VzbHksIHRoZSBlZmZlY3QKKyAqIG1heSBiZSB0aGF0IG9ubHkgb25lIG9wZXJhdGlvbiBzdWNjZWVkcy4KKyAqLworc3RhdGljIF9faW5saW5lX18gdm9pZAorX19zZXRfYml0IChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKmFkZHIpCit7CisJKigoX191MzIgKikgYWRkciArIChuciA+PiA1KSkgfD0gKDEgPDwgKG5yICYgMzEpKTsKK30KKworLyoKKyAqIGNsZWFyX2JpdCgpIGhhcyAiYWNxdWlyZSIgc2VtYW50aWNzLgorICovCisjZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpCXNtcF9tYigpCisjZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCkJZG8geyAvKiBza2lwICovOyB9IHdoaWxlICgwKQorCisvKioKKyAqIGNsZWFyX2JpdCAtIENsZWFycyBhIGJpdCBpbiBtZW1vcnkKKyAqIEBucjogQml0IHRvIGNsZWFyCisgKiBAYWRkcjogQWRkcmVzcyB0byBzdGFydCBjb3VudGluZyBmcm9tCisgKgorICogY2xlYXJfYml0KCkgaXMgYXRvbWljIGFuZCBtYXkgbm90IGJlIHJlb3JkZXJlZC4gIEhvd2V2ZXIsIGl0IGRvZXMKKyAqIG5vdCBjb250YWluIGEgbWVtb3J5IGJhcnJpZXIsIHNvIGlmIGl0IGlzIHVzZWQgZm9yIGxvY2tpbmcgcHVycG9zZXMsCisgKiB5b3Ugc2hvdWxkIGNhbGwgc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCkgYW5kL29yIHNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCkKKyAqIGluIG9yZGVyIHRvIGVuc3VyZSBjaGFuZ2VzIGFyZSB2aXNpYmxlIG9uIG90aGVyIHByb2Nlc3NvcnMuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQKK2NsZWFyX2JpdCAoaW50IG5yLCB2b2xhdGlsZSB2b2lkICphZGRyKQoreworCV9fdTMyIG1hc2ssIG9sZCwgbmV3OworCXZvbGF0aWxlIF9fdTMyICptOworCUNNUFhDSEdfQlVHQ0hFQ0tfREVDTAorCisJbSA9ICh2b2xhdGlsZSBfX3UzMiAqKSBhZGRyICsgKG5yID4+IDUpOworCW1hc2sgPSB+KDEgPDwgKG5yICYgMzEpKTsKKwlkbyB7CisJCUNNUFhDSEdfQlVHQ0hFQ0sobSk7CisJCW9sZCA9ICptOworCQluZXcgPSBvbGQgJiBtYXNrOworCX0gd2hpbGUgKGNtcHhjaGdfYWNxKG0sIG9sZCwgbmV3KSAhPSBvbGQpOworfQorCisvKioKKyAqIF9fY2xlYXJfYml0IC0gQ2xlYXJzIGEgYml0IGluIG1lbW9yeSAobm9uLWF0b21pYyB2ZXJzaW9uKQorICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkCitfX2NsZWFyX2JpdCAoaW50IG5yLCB2b2xhdGlsZSB2b2lkICphZGRyKQoreworCXZvbGF0aWxlIF9fdTMyICpwID0gKF9fdTMyICopIGFkZHIgKyAobnIgPj4gNSk7CisJX191MzIgbSA9IDEgPDwgKG5yICYgMzEpOworCSpwICY9IH5tOworfQorCisvKioKKyAqIGNoYW5nZV9iaXQgLSBUb2dnbGUgYSBiaXQgaW4gbWVtb3J5CisgKiBAbnI6IEJpdCB0byBjbGVhcgorICogQGFkZHI6IEFkZHJlc3MgdG8gc3RhcnQgY291bnRpbmcgZnJvbQorICoKKyAqIGNoYW5nZV9iaXQoKSBpcyBhdG9taWMgYW5kIG1heSBub3QgYmUgcmVvcmRlcmVkLgorICogTm90ZSB0aGF0IEBuciBtYXkgYmUgYWxtb3N0IGFyYml0cmFyaWx5IGxhcmdlOyB0aGlzIGZ1bmN0aW9uIGlzIG5vdAorICogcmVzdHJpY3RlZCB0byBhY3Rpbmcgb24gYSBzaW5nbGUtd29yZCBxdWFudGl0eS4KKyAqLworc3RhdGljIF9faW5saW5lX18gdm9pZAorY2hhbmdlX2JpdCAoaW50IG5yLCB2b2xhdGlsZSB2b2lkICphZGRyKQoreworCV9fdTMyIGJpdCwgb2xkLCBuZXc7CisJdm9sYXRpbGUgX191MzIgKm07CisJQ01QWENIR19CVUdDSEVDS19ERUNMCisKKwltID0gKHZvbGF0aWxlIF9fdTMyICopIGFkZHIgKyAobnIgPj4gNSk7CisJYml0ID0gKDEgPDwgKG5yICYgMzEpKTsKKwlkbyB7CisJCUNNUFhDSEdfQlVHQ0hFQ0sobSk7CisJCW9sZCA9ICptOworCQluZXcgPSBvbGQgXiBiaXQ7CisJfSB3aGlsZSAoY21weGNoZ19hY3EobSwgb2xkLCBuZXcpICE9IG9sZCk7Cit9CisKKy8qKgorICogX19jaGFuZ2VfYml0IC0gVG9nZ2xlIGEgYml0IGluIG1lbW9yeQorICogQG5yOiB0aGUgYml0IHRvIHNldAorICogQGFkZHI6IHRoZSBhZGRyZXNzIHRvIHN0YXJ0IGNvdW50aW5nIGZyb20KKyAqCisgKiBVbmxpa2UgY2hhbmdlX2JpdCgpLCB0aGlzIGZ1bmN0aW9uIGlzIG5vbi1hdG9taWMgYW5kIG1heSBiZSByZW9yZGVyZWQuCisgKiBJZiBpdCdzIGNhbGxlZCBvbiB0aGUgc2FtZSByZWdpb24gb2YgbWVtb3J5IHNpbXVsdGFuZW91c2x5LCB0aGUgZWZmZWN0CisgKiBtYXkgYmUgdGhhdCBvbmx5IG9uZSBvcGVyYXRpb24gc3VjY2VlZHMuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQKK19fY2hhbmdlX2JpdCAoaW50IG5yLCB2b2xhdGlsZSB2b2lkICphZGRyKQoreworCSooKF9fdTMyICopIGFkZHIgKyAobnIgPj4gNSkpIF49ICgxIDw8IChuciAmIDMxKSk7Cit9CisKKy8qKgorICogdGVzdF9hbmRfc2V0X2JpdCAtIFNldCBhIGJpdCBhbmQgcmV0dXJuIGl0cyBvbGQgdmFsdWUKKyAqIEBucjogQml0IHRvIHNldAorICogQGFkZHI6IEFkZHJlc3MgdG8gY291bnQgZnJvbQorICoKKyAqIFRoaXMgb3BlcmF0aW9uIGlzIGF0b21pYyBhbmQgY2Fubm90IGJlIHJlb3JkZXJlZC4gIAorICogSXQgYWxzbyBpbXBsaWVzIGEgbWVtb3J5IGJhcnJpZXIuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIGludAordGVzdF9hbmRfc2V0X2JpdCAoaW50IG5yLCB2b2xhdGlsZSB2b2lkICphZGRyKQoreworCV9fdTMyIGJpdCwgb2xkLCBuZXc7CisJdm9sYXRpbGUgX191MzIgKm07CisJQ01QWENIR19CVUdDSEVDS19ERUNMCisKKwltID0gKHZvbGF0aWxlIF9fdTMyICopIGFkZHIgKyAobnIgPj4gNSk7CisJYml0ID0gMSA8PCAobnIgJiAzMSk7CisJZG8geworCQlDTVBYQ0hHX0JVR0NIRUNLKG0pOworCQlvbGQgPSAqbTsKKwkJbmV3ID0gb2xkIHwgYml0OworCX0gd2hpbGUgKGNtcHhjaGdfYWNxKG0sIG9sZCwgbmV3KSAhPSBvbGQpOworCXJldHVybiAob2xkICYgYml0KSAhPSAwOworfQorCisvKioKKyAqIF9fdGVzdF9hbmRfc2V0X2JpdCAtIFNldCBhIGJpdCBhbmQgcmV0dXJuIGl0cyBvbGQgdmFsdWUKKyAqIEBucjogQml0IHRvIHNldAorICogQGFkZHI6IEFkZHJlc3MgdG8gY291bnQgZnJvbQorICoKKyAqIFRoaXMgb3BlcmF0aW9uIGlzIG5vbi1hdG9taWMgYW5kIGNhbiBiZSByZW9yZGVyZWQuICAKKyAqIElmIHR3byBleGFtcGxlcyBvZiB0aGlzIG9wZXJhdGlvbiByYWNlLCBvbmUgY2FuIGFwcGVhciB0byBzdWNjZWVkCisgKiBidXQgYWN0dWFsbHkgZmFpbC4gIFlvdSBtdXN0IHByb3RlY3QgbXVsdGlwbGUgYWNjZXNzZXMgd2l0aCBhIGxvY2suCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIGludAorX190ZXN0X2FuZF9zZXRfYml0IChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKmFkZHIpCit7CisJX191MzIgKnAgPSAoX191MzIgKikgYWRkciArIChuciA+PiA1KTsKKwlfX3UzMiBtID0gMSA8PCAobnIgJiAzMSk7CisJaW50IG9sZGJpdHNldCA9ICgqcCAmIG0pICE9IDA7CisKKwkqcCB8PSBtOworCXJldHVybiBvbGRiaXRzZXQ7Cit9CisKKy8qKgorICogdGVzdF9hbmRfY2xlYXJfYml0IC0gQ2xlYXIgYSBiaXQgYW5kIHJldHVybiBpdHMgb2xkIHZhbHVlCisgKiBAbnI6IEJpdCB0byBzZXQKKyAqIEBhZGRyOiBBZGRyZXNzIHRvIGNvdW50IGZyb20KKyAqCisgKiBUaGlzIG9wZXJhdGlvbiBpcyBhdG9taWMgYW5kIGNhbm5vdCBiZSByZW9yZGVyZWQuICAKKyAqIEl0IGFsc28gaW1wbGllcyBhIG1lbW9yeSBiYXJyaWVyLgorICovCitzdGF0aWMgX19pbmxpbmVfXyBpbnQKK3Rlc3RfYW5kX2NsZWFyX2JpdCAoaW50IG5yLCB2b2xhdGlsZSB2b2lkICphZGRyKQoreworCV9fdTMyIG1hc2ssIG9sZCwgbmV3OworCXZvbGF0aWxlIF9fdTMyICptOworCUNNUFhDSEdfQlVHQ0hFQ0tfREVDTAorCisJbSA9ICh2b2xhdGlsZSBfX3UzMiAqKSBhZGRyICsgKG5yID4+IDUpOworCW1hc2sgPSB+KDEgPDwgKG5yICYgMzEpKTsKKwlkbyB7CisJCUNNUFhDSEdfQlVHQ0hFQ0sobSk7CisJCW9sZCA9ICptOworCQluZXcgPSBvbGQgJiBtYXNrOworCX0gd2hpbGUgKGNtcHhjaGdfYWNxKG0sIG9sZCwgbmV3KSAhPSBvbGQpOworCXJldHVybiAob2xkICYgfm1hc2spICE9IDA7Cit9CisKKy8qKgorICogX190ZXN0X2FuZF9jbGVhcl9iaXQgLSBDbGVhciBhIGJpdCBhbmQgcmV0dXJuIGl0cyBvbGQgdmFsdWUKKyAqIEBucjogQml0IHRvIHNldAorICogQGFkZHI6IEFkZHJlc3MgdG8gY291bnQgZnJvbQorICoKKyAqIFRoaXMgb3BlcmF0aW9uIGlzIG5vbi1hdG9taWMgYW5kIGNhbiBiZSByZW9yZGVyZWQuICAKKyAqIElmIHR3byBleGFtcGxlcyBvZiB0aGlzIG9wZXJhdGlvbiByYWNlLCBvbmUgY2FuIGFwcGVhciB0byBzdWNjZWVkCisgKiBidXQgYWN0dWFsbHkgZmFpbC4gIFlvdSBtdXN0IHByb3RlY3QgbXVsdGlwbGUgYWNjZXNzZXMgd2l0aCBhIGxvY2suCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIGludAorX190ZXN0X2FuZF9jbGVhcl9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKK3sKKwlfX3UzMiAqcCA9IChfX3UzMiAqKSBhZGRyICsgKG5yID4+IDUpOworCV9fdTMyIG0gPSAxIDw8IChuciAmIDMxKTsKKwlpbnQgb2xkYml0c2V0ID0gKnAgJiBtOworCisJKnAgJj0gfm07CisJcmV0dXJuIG9sZGJpdHNldDsKK30KKworLyoqCisgKiB0ZXN0X2FuZF9jaGFuZ2VfYml0IC0gQ2hhbmdlIGEgYml0IGFuZCByZXR1cm4gaXRzIG9sZCB2YWx1ZQorICogQG5yOiBCaXQgdG8gc2V0CisgKiBAYWRkcjogQWRkcmVzcyB0byBjb3VudCBmcm9tCisgKgorICogVGhpcyBvcGVyYXRpb24gaXMgYXRvbWljIGFuZCBjYW5ub3QgYmUgcmVvcmRlcmVkLiAgCisgKiBJdCBhbHNvIGltcGxpZXMgYSBtZW1vcnkgYmFycmllci4KKyAqLworc3RhdGljIF9faW5saW5lX18gaW50Cit0ZXN0X2FuZF9jaGFuZ2VfYml0IChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKmFkZHIpCit7CisJX191MzIgYml0LCBvbGQsIG5ldzsKKwl2b2xhdGlsZSBfX3UzMiAqbTsKKwlDTVBYQ0hHX0JVR0NIRUNLX0RFQ0wKKworCW0gPSAodm9sYXRpbGUgX191MzIgKikgYWRkciArIChuciA+PiA1KTsKKwliaXQgPSAoMSA8PCAobnIgJiAzMSkpOworCWRvIHsKKwkJQ01QWENIR19CVUdDSEVDSyhtKTsKKwkJb2xkID0gKm07CisJCW5ldyA9IG9sZCBeIGJpdDsKKwl9IHdoaWxlIChjbXB4Y2hnX2FjcShtLCBvbGQsIG5ldykgIT0gb2xkKTsKKwlyZXR1cm4gKG9sZCAmIGJpdCkgIT0gMDsKK30KKworLyoKKyAqIFdBUk5JTkc6IG5vbiBhdG9taWMgdmVyc2lvbi4KKyAqLworc3RhdGljIF9faW5saW5lX18gaW50CitfX3Rlc3RfYW5kX2NoYW5nZV9iaXQgKGludCBuciwgdm9pZCAqYWRkcikKK3sKKwlfX3UzMiBvbGQsIGJpdCA9ICgxIDw8IChuciAmIDMxKSk7CisJX191MzIgKm0gPSAoX191MzIgKikgYWRkciArIChuciA+PiA1KTsKKworCW9sZCA9ICptOworCSptID0gb2xkIF4gYml0OworCXJldHVybiAob2xkICYgYml0KSAhPSAwOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQKK3Rlc3RfYml0IChpbnQgbnIsIGNvbnN0IHZvbGF0aWxlIHZvaWQgKmFkZHIpCit7CisJcmV0dXJuIDEgJiAoKChjb25zdCB2b2xhdGlsZSBfX3UzMiAqKSBhZGRyKVtuciA+PiA1XSA+PiAobnIgJiAzMSkpOworfQorCisvKioKKyAqIGZmeiAtIGZpbmQgdGhlIGZpcnN0IHplcm8gYml0IGluIGEgbG9uZyB3b3JkCisgKiBAeDogVGhlIGxvbmcgd29yZCB0byBmaW5kIHRoZSBiaXQgaW4KKyAqCisgKiBSZXR1cm5zIHRoZSBiaXQtbnVtYmVyICgwLi42Mykgb2YgdGhlIGZpcnN0IChsZWFzdCBzaWduaWZpY2FudCkgemVybyBiaXQuICBVbmRlZmluZWQgaWYKKyAqIG5vIHplcm8gZXhpc3RzLCBzbyBjb2RlIHNob3VsZCBjaGVjayBhZ2FpbnN0IH4wVUwgZmlyc3QuLi4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCitmZnogKHVuc2lnbmVkIGxvbmcgeCkKK3sKKwl1bnNpZ25lZCBsb25nIHJlc3VsdDsKKworCXJlc3VsdCA9IGlhNjRfcG9wY250KHggJiAofnggLSAxKSk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoqCisgKiBfX2ZmcyAtIGZpbmQgZmlyc3QgYml0IGluIHdvcmQuCisgKiBAeDogVGhlIHdvcmQgdG8gc2VhcmNoCisgKgorICogVW5kZWZpbmVkIGlmIG5vIGJpdCBleGlzdHMsIHNvIGNvZGUgc2hvdWxkIGNoZWNrIGFnYWluc3QgMCBmaXJzdC4KKyAqLworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZworX19mZnMgKHVuc2lnbmVkIGxvbmcgeCkKK3sKKwl1bnNpZ25lZCBsb25nIHJlc3VsdDsKKworCXJlc3VsdCA9IGlhNjRfcG9wY250KCh4LTEpICYgfngpOworCXJldHVybiByZXN1bHQ7Cit9CisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKy8qCisgKiBmaW5kX2xhc3RfemVyb19iaXQgLSBmaW5kIHRoZSBsYXN0IHplcm8gYml0IGluIGEgNjQgYml0IHF1YW50aXR5CisgKiBAeDogVGhlIHZhbHVlIHRvIHNlYXJjaAorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK2lhNjRfZmxzICh1bnNpZ25lZCBsb25nIHgpCit7CisJbG9uZyBkb3VibGUgZCA9IHg7CisJbG9uZyBleHA7CisKKwlleHAgPSBpYTY0X2dldGZfZXhwKGQpOworCXJldHVybiBleHAgLSAweGZmZmY7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitmbHMgKGludCB4KQoreworCXJldHVybiBpYTY0X2ZscygodW5zaWduZWQgaW50KSB4KTsKK30KKworLyoKKyAqIGZmczogZmluZCBmaXJzdCBiaXQgc2V0LiBUaGlzIGlzIGRlZmluZWQgdGhlIHNhbWUgd2F5IGFzIHRoZSBsaWJjIGFuZCBjb21waWxlciBidWlsdGluCisgKiBmZnMgcm91dGluZXMsIHRoZXJlZm9yZSBkaWZmZXJzIGluIHNwaXJpdCBmcm9tIHRoZSBhYm92ZSBmZnogKG1hbiBmZnMpOiBpdCBvcGVyYXRlcyBvbgorICogImludCIgdmFsdWVzIG9ubHkgYW5kIHRoZSByZXN1bHQgdmFsdWUgaXMgdGhlIGJpdCBudW1iZXIgKyAxLiAgZmZzKDApIGlzIGRlZmluZWQgdG8KKyAqIHJldHVybiB6ZXJvLgorICovCisjZGVmaW5lIGZmcyh4KQlfX2J1aWx0aW5fZmZzKHgpCisKKy8qCisgKiBod2VpZ2h0TjogcmV0dXJucyB0aGUgaGFtbWluZyB3ZWlnaHQgKGkuZS4gdGhlIG51bWJlcgorICogb2YgYml0cyBzZXQpIG9mIGEgTi1iaXQgd29yZAorICovCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nCitod2VpZ2h0NjQgKHVuc2lnbmVkIGxvbmcgeCkKK3sKKwl1bnNpZ25lZCBsb25nIHJlc3VsdDsKKwlyZXN1bHQgPSBpYTY0X3BvcGNudCh4KTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisjZGVmaW5lIGh3ZWlnaHQzMih4KQkodW5zaWduZWQgaW50KSBod2VpZ2h0NjQoKHgpICYgMHhmZmZmZmZmZnVsKQorI2RlZmluZSBod2VpZ2h0MTYoeCkJKHVuc2lnbmVkIGludCkgaHdlaWdodDY0KCh4KSAmIDB4ZmZmZnVsKQorI2RlZmluZSBod2VpZ2h0OCh4KQkodW5zaWduZWQgaW50KSBod2VpZ2h0NjQoKHgpICYgMHhmZnVsKQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCitleHRlcm4gaW50IF9fZmluZF9uZXh0X3plcm9fYml0IChjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsCisJCQl1bnNpZ25lZCBsb25nIG9mZnNldCk7CitleHRlcm4gaW50IF9fZmluZF9uZXh0X2JpdChjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsCisJCQl1bnNpZ25lZCBsb25nIG9mZnNldCk7CisKKyNkZWZpbmUgZmluZF9uZXh0X3plcm9fYml0KGFkZHIsIHNpemUsIG9mZnNldCkgXAorCQkJX19maW5kX25leHRfemVyb19iaXQoKGFkZHIpLCAoc2l6ZSksIChvZmZzZXQpKQorI2RlZmluZSBmaW5kX25leHRfYml0KGFkZHIsIHNpemUsIG9mZnNldCkgXAorCQkJX19maW5kX25leHRfYml0KChhZGRyKSwgKHNpemUpLCAob2Zmc2V0KSkKKworLyoKKyAqIFRoZSBvcHRpbWl6ZXIgYWN0dWFsbHkgZG9lcyBnb29kIGNvZGUgZm9yIHRoaXMgY2FzZS4uCisgKi8KKyNkZWZpbmUgZmluZF9maXJzdF96ZXJvX2JpdChhZGRyLCBzaXplKSBmaW5kX25leHRfemVyb19iaXQoKGFkZHIpLCAoc2l6ZSksIDApCisKKyNkZWZpbmUgZmluZF9maXJzdF9iaXQoYWRkciwgc2l6ZSkgZmluZF9uZXh0X2JpdCgoYWRkciksIChzaXplKSwgMCkKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2RlZmluZSBfX2NsZWFyX2JpdChuciwgYWRkcikJCWNsZWFyX2JpdChuciwgYWRkcikKKworI2RlZmluZSBleHQyX3NldF9iaXQJCQl0ZXN0X2FuZF9zZXRfYml0CisjZGVmaW5lIGV4dDJfc2V0X2JpdF9hdG9taWMobCxuLGEpCXRlc3RfYW5kX3NldF9iaXQobixhKQorI2RlZmluZSBleHQyX2NsZWFyX2JpdAkJCXRlc3RfYW5kX2NsZWFyX2JpdAorI2RlZmluZSBleHQyX2NsZWFyX2JpdF9hdG9taWMobCxuLGEpCXRlc3RfYW5kX2NsZWFyX2JpdChuLGEpCisjZGVmaW5lIGV4dDJfdGVzdF9iaXQJCQl0ZXN0X2JpdAorI2RlZmluZSBleHQyX2ZpbmRfZmlyc3RfemVyb19iaXQJZmluZF9maXJzdF96ZXJvX2JpdAorI2RlZmluZSBleHQyX2ZpbmRfbmV4dF96ZXJvX2JpdAkJZmluZF9uZXh0X3plcm9fYml0CisKKy8qIEJpdG1hcCBmdW5jdGlvbnMgZm9yIHRoZSBtaW5peCBmaWxlc3lzdGVtLiAgKi8KKyNkZWZpbmUgbWluaXhfdGVzdF9hbmRfc2V0X2JpdChucixhZGRyKQkJdGVzdF9hbmRfc2V0X2JpdChucixhZGRyKQorI2RlZmluZSBtaW5peF9zZXRfYml0KG5yLGFkZHIpCQkJc2V0X2JpdChucixhZGRyKQorI2RlZmluZSBtaW5peF90ZXN0X2FuZF9jbGVhcl9iaXQobnIsYWRkcikJdGVzdF9hbmRfY2xlYXJfYml0KG5yLGFkZHIpCisjZGVmaW5lIG1pbml4X3Rlc3RfYml0KG5yLGFkZHIpCQkJdGVzdF9iaXQobnIsYWRkcikKKyNkZWZpbmUgbWluaXhfZmluZF9maXJzdF96ZXJvX2JpdChhZGRyLHNpemUpCWZpbmRfZmlyc3RfemVyb19iaXQoYWRkcixzaXplKQorCitzdGF0aWMgaW5saW5lIGludAorc2NoZWRfZmluZF9maXJzdF9iaXQgKHVuc2lnbmVkIGxvbmcgKmIpCit7CisJaWYgKHVubGlrZWx5KGJbMF0pKQorCQlyZXR1cm4gX19mZnMoYlswXSk7CisJaWYgKHVubGlrZWx5KGJbMV0pKQorCQlyZXR1cm4gNjQgKyBfX2ZmcyhiWzFdKTsKKwlyZXR1cm4gX19mZnMoYlsyXSkgKyAxMjg7Cit9CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfQVNNX0lBNjRfQklUT1BTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvYnJlYWsuaCBiL2luY2x1ZGUvYXNtLWlhNjQvYnJlYWsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2M3YjJkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taWE2NC9icmVhay5oCkBAIC0wLDAgKzEsMjEgQEAKKyNpZm5kZWYgX0FTTV9JQTY0X0JSRUFLX0gKKyNkZWZpbmUgX0FTTV9JQTY0X0JSRUFLX0gKKworLyoKKyAqIElBLTY0IExpbnV4IGJyZWFrIG51bWJlcnMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5IEhld2xldHQtUGFja2FyZCBDbworICogQ29weXJpZ2h0IChDKSAxOTk5IERhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4KKyAqLworCisvKgorICogT1Mtc3BlY2lmaWMgZGVidWcgYnJlYWsgbnVtYmVyczoKKyAqLworI2RlZmluZSBfX0lBNjRfQlJFQUtfS0RCCQkweDgwMTAwCisKKy8qCisgKiBPUy1zcGVjaWZpYyBicmVhayBudW1iZXJzOgorICovCisjZGVmaW5lIF9fSUE2NF9CUkVBS19TWVNDQUxMCQkweDEwMDAwMAorCisjZW5kaWYgLyogX0FTTV9JQTY0X0JSRUFLX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvYnVnLmggYi9pbmNsdWRlL2FzbS1pYTY0L2J1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMGNkNTEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L2J1Zy5oCkBAIC0wLDAgKzEsMTUgQEAKKyNpZm5kZWYgX0FTTV9JQTY0X0JVR19ICisjZGVmaW5lIF9BU01fSUE2NF9CVUdfSAorCisjaWYgKF9fR05VQ19fID4gMykgfHwgKF9fR05VQ19fID09IDMgJiYgX19HTlVDX01JTk9SX18gPj0gMSkKKyMgZGVmaW5lIGlhNjRfYWJvcnQoKQlfX2J1aWx0aW5fdHJhcCgpCisjZWxzZQorIyBkZWZpbmUgaWE2NF9hYm9ydCgpCSgqKHZvbGF0aWxlIGludCAqKSAwID0gMCkKKyNlbmRpZgorI2RlZmluZSBCVUcoKSBkbyB7IHByaW50aygia2VybmVsIEJVRyBhdCAlczolZCFcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyk7IGlhNjRfYWJvcnQoKTsgfSB3aGlsZSAoMCkKKworLyogc2hvdWxkIHRoaXMgQlVHIHNob3VsZCBiZSBtYWRlIGdlbmVyaWM/ICovCisjZGVmaW5lIEhBVkVfQVJDSF9CVUcKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9idWcuaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L2J1Z3MuaCBiL2luY2x1ZGUvYXNtLWlhNjQvYnVncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzMzUyM2UKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L2J1Z3MuaApAQCAtMCwwICsxLDE5IEBACisvKgorICogVGhpcyBpcyBpbmNsdWRlZCBieSBpbml0L21haW4uYyB0byBjaGVjayBmb3IgYXJjaGl0ZWN0dXJlLWRlcGVuZGVudCBidWdzLgorICoKKyAqIE5lZWRzOgorICoJdm9pZCBjaGVja19idWdzKHZvaWQpOworICoKKyAqIEJhc2VkIG9uIDxhc20tYWxwaGEvYnVncy5oPi4KKyAqCisgKiBNb2RpZmllZCAxOTk4LCAxOTk5LCAyMDAzCisgKglEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+LCAgSGV3bGV0dC1QYWNrYXJkIENvLgorICovCisjaWZuZGVmIF9BU01fSUE2NF9CVUdTX0gKKyNkZWZpbmUgX0FTTV9JQTY0X0JVR1NfSAorCisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorCitleHRlcm4gdm9pZCBjaGVja19idWdzICh2b2lkKTsKKworI2VuZGlmIC8qIF9BU01fSUE2NF9CVUdTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvYnl0ZW9yZGVyLmggYi9pbmNsdWRlL2FzbS1pYTY0L2J5dGVvcmRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5YmQ0MWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L2J5dGVvcmRlci5oCkBAIC0wLDAgKzEsNDIgQEAKKyNpZm5kZWYgX0FTTV9JQTY0X0JZVEVPUkRFUl9ICisjZGVmaW5lIF9BU01fSUE2NF9CWVRFT1JERVJfSAorCisvKgorICogTW9kaWZpZWQgMTk5OCwgMTk5OQorICoJRGF2aWQgTW9zYmVyZ2VyLVRhbmcgPGRhdmlkbUBocGwuaHAuY29tPiwgSGV3bGV0dC1QYWNrYXJkIENvLgorICovCisKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vaW50cmluc2ljcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisKK3N0YXRpYyBfX2lubGluZV9fIF9fYXR0cmlidXRlX2NvbnN0X18gX191NjQKK19faWE2NF9zd2FiNjQgKF9fdTY0IHgpCit7CisJX191NjQgcmVzdWx0OworCisJcmVzdWx0ID0gaWE2NF9tdXgxKHgsIGlhNjRfbXV4MV9yZXYpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fYXR0cmlidXRlX2NvbnN0X18gX191MzIKK19faWE2NF9zd2FiMzIgKF9fdTMyIHgpCit7CisJcmV0dXJuIF9faWE2NF9zd2FiNjQoeCkgPj4gMzI7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fYXR0cmlidXRlX2NvbnN0X18gX191MTYKK19faWE2NF9zd2FiMTYoX191MTYgeCkKK3sKKwlyZXR1cm4gX19pYTY0X3N3YWI2NCh4KSA+PiA0ODsKK30KKworI2RlZmluZSBfX2FyY2hfX3N3YWI2NCh4KSBfX2lhNjRfc3dhYjY0KHgpCisjZGVmaW5lIF9fYXJjaF9fc3dhYjMyKHgpIF9faWE2NF9zd2FiMzIoeCkKKyNkZWZpbmUgX19hcmNoX19zd2FiMTYoeCkgX19pYTY0X3N3YWIxNih4KQorCisjZGVmaW5lIF9fQllURU9SREVSX0hBU19VNjRfXworCisjaW5jbHVkZSA8bGludXgvYnl0ZW9yZGVyL2xpdHRsZV9lbmRpYW4uaD4KKworI2VuZGlmIC8qIF9BU01fSUE2NF9CWVRFT1JERVJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9jYWNoZS5oIGIvaW5jbHVkZS9hc20taWE2NC9jYWNoZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2NmQ4ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L2NhY2hlLmgKQEAgLTAsMCArMSwzMCBAQAorI2lmbmRlZiBfQVNNX0lBNjRfQ0FDSEVfSAorI2RlZmluZSBfQVNNX0lBNjRfQ0FDSEVfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwMCBIZXdsZXR0LVBhY2thcmQgQ28KKyAqCURhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4KKyAqLworCisvKiBCeXRlcyBwZXIgTDEgKGRhdGEpIGNhY2hlIGxpbmUuICAqLworI2RlZmluZSBMMV9DQUNIRV9TSElGVAkJQ09ORklHX0lBNjRfTDFfQ0FDSEVfU0hJRlQKKyNkZWZpbmUgTDFfQ0FDSEVfQllURVMJCSgxIDw8IEwxX0NBQ0hFX1NISUZUKQorCisjZGVmaW5lIEwxX0NBQ0hFX1NISUZUX01BWCA3CS8qIGxhcmdlc3QgTDEgd2hpY2ggdGhpcyBhcmNoIHN1cHBvcnRzICovCisKKyNpZmRlZiBDT05GSUdfU01QCisjIGRlZmluZSBTTVBfQ0FDSEVfU0hJRlQJTDFfQ0FDSEVfU0hJRlQKKyMgZGVmaW5lIFNNUF9DQUNIRV9CWVRFUwlMMV9DQUNIRV9CWVRFUworI2Vsc2UKKyAgLyoKKyAgICogVGhlICJhbGlnbmVkIiBkaXJlY3RpdmUgY2FuIG9ubHkgX2luY3JlYXNlXyBhbGlnbm1lbnQsIHNvIHRoaXMgaXMKKyAgICogc2FmZSBhbmQgcHJvdmlkZXMgYW4gZWFzeSB3YXkgdG8gYXZvaWQgd2FzdGluZyBzcGFjZSBvbiBhCisgICAqIHVuaS1wcm9jZXNzb3I6CisgICAqLworIyBkZWZpbmUgU01QX0NBQ0hFX1NISUZUCTMKKyMgZGVmaW5lIFNNUF9DQUNIRV9CWVRFUwkoMSA8PCAzKQorI2VuZGlmCisKKyNlbmRpZiAvKiBfQVNNX0lBNjRfQ0FDSEVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9jYWNoZWZsdXNoLmggYi9pbmNsdWRlL2FzbS1pYTY0L2NhY2hlZmx1c2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmRhY2I0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taWE2NC9jYWNoZWZsdXNoLmgKQEAgLTAsMCArMSw1MCBAQAorI2lmbmRlZiBfQVNNX0lBNjRfQ0FDSEVGTFVTSF9ICisjZGVmaW5lIF9BU01fSUE2NF9DQUNIRUZMVVNIX0gKKworLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMiBIZXdsZXR0LVBhY2thcmQgQ28KKyAqCURhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvcGFnZS1mbGFncy5oPgorCisjaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisKKy8qCisgKiBDYWNoZSBmbHVzaGluZyByb3V0aW5lcy4gIFRoaXMgaXMgdGhlIGtpbmQgb2Ygc3R1ZmYgdGhhdCBjYW4gYmUgdmVyeSBleHBlbnNpdmUsIHNvIHRyeQorICogdG8gYXZvaWQgdGhlbSB3aGVuZXZlciBwb3NzaWJsZS4KKyAqLworCisjZGVmaW5lIGZsdXNoX2NhY2hlX2FsbCgpCQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9jYWNoZV9tbShtbSkJCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2NhY2hlX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9jYWNoZV9wYWdlKHZtYSwgdm1hZGRyLCBwZm4pCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfaWNhY2hlX3BhZ2Uodm1hLHBhZ2UpCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2NhY2hlX3ZtYXAoc3RhcnQsIGVuZCkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfdnVubWFwKHN0YXJ0LCBlbmQpCQlkbyB7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSkJCQlcCitkbyB7CQkJCQkJXAorCWNsZWFyX2JpdChQR19hcmNoXzEsICYocGFnZSktPmZsYWdzKTsJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBmbHVzaF9kY2FjaGVfbW1hcF9sb2NrKG1hcHBpbmcpCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2RjYWNoZV9tbWFwX3VubG9jayhtYXBwaW5nKQlkbyB7IH0gd2hpbGUgKDApCisKK2V4dGVybiB2b2lkIGZsdXNoX2ljYWNoZV9yYW5nZSAodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpOworCisjZGVmaW5lIGZsdXNoX2ljYWNoZV91c2VyX3JhbmdlKHZtYSwgcGFnZSwgdXNlcl9hZGRyLCBsZW4pCQkJCQlcCitkbyB7CQkJCQkJCQkJCQkJXAorCXVuc2lnbmVkIGxvbmcgX2FkZHIgPSAodW5zaWduZWQgbG9uZykgcGFnZV9hZGRyZXNzKHBhZ2UpICsgKCh1c2VyX2FkZHIpICYgflBBR0VfTUFTSyk7CVwKKwlmbHVzaF9pY2FjaGVfcmFuZ2UoX2FkZHIsIF9hZGRyICsgKGxlbikpOwkJCQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgY29weV90b191c2VyX3BhZ2Uodm1hLCBwYWdlLCB2YWRkciwgZHN0LCBzcmMsIGxlbikgXAorZG8geyBtZW1jcHkoZHN0LCBzcmMsIGxlbik7IFwKKyAgICAgZmx1c2hfaWNhY2hlX3VzZXJfcmFuZ2Uodm1hLCBwYWdlLCB2YWRkciwgbGVuKTsgXAorfSB3aGlsZSAoMCkKKyNkZWZpbmUgY29weV9mcm9tX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIHZhZGRyLCBkc3QsIHNyYywgbGVuKSBcCisJbWVtY3B5KGRzdCwgc3JjLCBsZW4pCisKKyNlbmRpZiAvKiBfQVNNX0lBNjRfQ0FDSEVGTFVTSF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L2NoZWNrc3VtLmggYi9pbmNsdWRlL2FzbS1pYTY0L2NoZWNrc3VtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWYyMzBmZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvY2hlY2tzdW0uaApAQCAtMCwwICsxLDc2IEBACisjaWZuZGVmIF9BU01fSUE2NF9DSEVDS1NVTV9ICisjZGVmaW5lIF9BU01fSUE2NF9DSEVDS1NVTV9ICisKKy8qCisgKiBNb2RpZmllZCAxOTk4LCAxOTk5CisgKglEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+LCBIZXdsZXR0LVBhY2thcmQgQ28KKyAqLworCisvKgorICogVGhpcyBpcyBhIHZlcnNpb24gb2YgaXBfY29tcHV0ZV9jc3VtKCkgb3B0aW1pemVkIGZvciBJUCBoZWFkZXJzLAorICogd2hpY2ggYWx3YXlzIGNoZWNrc3VtIG9uIDQgb2N0ZXQgYm91bmRhcmllcy4KKyAqLworZXh0ZXJuIHVuc2lnbmVkIHNob3J0IGlwX2Zhc3RfY3N1bSAodW5zaWduZWQgY2hhciAqIGlwaCwgdW5zaWduZWQgaW50IGlobCk7CisKKy8qCisgKiBDb21wdXRlcyB0aGUgY2hlY2tzdW0gb2YgdGhlIFRDUC9VRFAgcHNldWRvLWhlYWRlciByZXR1cm5zIGEgMTYtYml0CisgKiBjaGVja3N1bSwgYWxyZWFkeSBjb21wbGVtZW50ZWQKKyAqLworZXh0ZXJuIHVuc2lnbmVkIHNob3J0IGludCBjc3VtX3RjcHVkcF9tYWdpYyAodW5zaWduZWQgbG9uZyBzYWRkciwKKwkJCQkJICAgICB1bnNpZ25lZCBsb25nIGRhZGRyLAorCQkJCQkgICAgIHVuc2lnbmVkIHNob3J0IGxlbiwKKwkJCQkJICAgICB1bnNpZ25lZCBzaG9ydCBwcm90bywKKwkJCQkJICAgICB1bnNpZ25lZCBpbnQgc3VtKTsKKworZXh0ZXJuIHVuc2lnbmVkIGludCBjc3VtX3RjcHVkcF9ub2ZvbGQgKHVuc2lnbmVkIGxvbmcgc2FkZHIsCisJCQkJCXVuc2lnbmVkIGxvbmcgZGFkZHIsCisJCQkJCXVuc2lnbmVkIHNob3J0IGxlbiwKKwkJCQkJdW5zaWduZWQgc2hvcnQgcHJvdG8sCisJCQkJCXVuc2lnbmVkIGludCBzdW0pOworCisvKgorICogQ29tcHV0ZXMgdGhlIGNoZWNrc3VtIG9mIGEgbWVtb3J5IGJsb2NrIGF0IGJ1ZmYsIGxlbmd0aCBsZW4sCisgKiBhbmQgYWRkcyBpbiAic3VtIiAoMzItYml0KQorICoKKyAqIHJldHVybnMgYSAzMi1iaXQgbnVtYmVyIHN1aXRhYmxlIGZvciBmZWVkaW5nIGludG8gaXRzZWxmCisgKiBvciBjc3VtX3RjcHVkcF9tYWdpYworICoKKyAqIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aCBldmVuIGxlbmd0aHMsIGV4Y2VwdAorICogZm9yIHRoZSBsYXN0IGZyYWdtZW50LCB3aGljaCBtYXkgYmUgb2RkCisgKgorICogaXQncyBiZXN0IHRvIGhhdmUgYnVmZiBhbGlnbmVkIG9uIGEgMzItYml0IGJvdW5kYXJ5CisgKi8KK2V4dGVybiB1bnNpZ25lZCBpbnQgY3N1bV9wYXJ0aWFsIChjb25zdCB1bnNpZ25lZCBjaGFyICogYnVmZiwgaW50IGxlbiwKKwkJCQkgIHVuc2lnbmVkIGludCBzdW0pOworCisvKgorICogU2FtZSBhcyBjc3VtX3BhcnRpYWwsIGJ1dCBjb3BpZXMgZnJvbSBzcmMgd2hpbGUgaXQgY2hlY2tzdW1zLgorICoKKyAqIEhlcmUgaXQgaXMgZXZlbiBtb3JlIGltcG9ydGFudCB0byBhbGlnbiBzcmMgYW5kIGRzdCBvbiBhIDMyLWJpdCAob3IKKyAqIGV2ZW4gYmV0dGVyIDY0LWJpdCkgYm91bmRhcnkuCisgKi8KK2V4dGVybiB1bnNpZ25lZCBpbnQgY3N1bV9wYXJ0aWFsX2NvcHlfZnJvbV91c2VyIChjb25zdCBjaGFyICpzcmMsIGNoYXIgKmRzdCwKKwkJCQkJCSBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgc3VtLAorCQkJCQkJIGludCAqZXJycCk7CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgY3N1bV9wYXJ0aWFsX2NvcHlfbm9jaGVjayAoY29uc3QgY2hhciAqc3JjLCBjaGFyICpkc3QsCisJCQkJCSAgICAgICBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgc3VtKTsKKworLyoKKyAqIFRoaXMgcm91dGluZSBpcyB1c2VkIGZvciBtaXNjZWxsYW5lb3VzIElQLWxpa2UgY2hlY2tzdW1zLCBtYWlubHkgaW4KKyAqIGljbXAuYworICovCitleHRlcm4gdW5zaWduZWQgc2hvcnQgaXBfY29tcHV0ZV9jc3VtICh1bnNpZ25lZCBjaGFyICpidWZmLCBpbnQgbGVuKTsKKworLyoKKyAqIEZvbGQgYSBwYXJ0aWFsIGNoZWNrc3VtIHdpdGhvdXQgYWRkaW5nIHBzZXVkbyBoZWFkZXJzLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0Citjc3VtX2ZvbGQgKHVuc2lnbmVkIGludCBzdW0pCit7CisJc3VtID0gKHN1bSAmIDB4ZmZmZikgKyAoc3VtID4+IDE2KTsKKwlzdW0gPSAoc3VtICYgMHhmZmZmKSArIChzdW0gPj4gMTYpOworCXJldHVybiB+c3VtOworfQorCisjZW5kaWYgLyogX0FTTV9JQTY0X0NIRUNLU1VNX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvY29tcGF0LmggYi9pbmNsdWRlL2FzbS1pYTY0L2NvbXBhdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjMGZmMGEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L2NvbXBhdC5oCkBAIC0wLDAgKzEsMTk4IEBACisjaWZuZGVmIF9BU01fSUE2NF9DT01QQVRfSAorI2RlZmluZSBfQVNNX0lBNjRfQ09NUEFUX0gKKy8qCisgKiBBcmNoaXRlY3R1cmUgc3BlY2lmaWMgY29tcGF0aWJpbGl0eSB0eXBlcworICovCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2RlZmluZSBDT01QQVRfVVNFUl9IWgkxMDAKKwordHlwZWRlZiB1MzIJCWNvbXBhdF9zaXplX3Q7Cit0eXBlZGVmIHMzMgkJY29tcGF0X3NzaXplX3Q7Cit0eXBlZGVmIHMzMgkJY29tcGF0X3RpbWVfdDsKK3R5cGVkZWYgczMyCQljb21wYXRfY2xvY2tfdDsKK3R5cGVkZWYgczMyCQljb21wYXRfa2V5X3Q7Cit0eXBlZGVmIHMzMgkJY29tcGF0X3BpZF90OwordHlwZWRlZiB1MTYJCWNvbXBhdF91aWRfdDsKK3R5cGVkZWYgdTE2CQljb21wYXRfZ2lkX3Q7Cit0eXBlZGVmIHUzMgkJY29tcGF0X3VpZDMyX3Q7Cit0eXBlZGVmIHUzMgkJY29tcGF0X2dpZDMyX3Q7Cit0eXBlZGVmIHUxNgkJY29tcGF0X21vZGVfdDsKK3R5cGVkZWYgdTMyCQljb21wYXRfaW5vX3Q7Cit0eXBlZGVmIHUxNgkJY29tcGF0X2Rldl90OwordHlwZWRlZiBzMzIJCWNvbXBhdF9vZmZfdDsKK3R5cGVkZWYgczY0CQljb21wYXRfbG9mZl90OwordHlwZWRlZiB1MTYJCWNvbXBhdF9ubGlua190OwordHlwZWRlZiB1MTYJCWNvbXBhdF9pcGNfcGlkX3Q7Cit0eXBlZGVmIHMzMgkJY29tcGF0X2RhZGRyX3Q7Cit0eXBlZGVmIHUzMgkJY29tcGF0X2NhZGRyX3Q7Cit0eXBlZGVmIF9fa2VybmVsX2ZzaWRfdAljb21wYXRfZnNpZF90OworCit0eXBlZGVmIHMzMgkJY29tcGF0X2ludF90OwordHlwZWRlZiBzMzIJCWNvbXBhdF9sb25nX3Q7Cit0eXBlZGVmIHUzMgkJY29tcGF0X3VpbnRfdDsKK3R5cGVkZWYgdTMyCQljb21wYXRfdWxvbmdfdDsKKworc3RydWN0IGNvbXBhdF90aW1lc3BlYyB7CisJY29tcGF0X3RpbWVfdAl0dl9zZWM7CisJczMyCQl0dl9uc2VjOworfTsKKworc3RydWN0IGNvbXBhdF90aW1ldmFsIHsKKwljb21wYXRfdGltZV90CXR2X3NlYzsKKwlzMzIJCXR2X3VzZWM7Cit9OworCitzdHJ1Y3QgY29tcGF0X3N0YXQgeworCWNvbXBhdF9kZXZfdAlzdF9kZXY7CisJdTE2CQlfX3BhZDE7CisJY29tcGF0X2lub190CXN0X2lubzsKKwljb21wYXRfbW9kZV90CXN0X21vZGU7CisJY29tcGF0X25saW5rX3QJc3Rfbmxpbms7CisJY29tcGF0X3VpZF90CXN0X3VpZDsKKwljb21wYXRfZ2lkX3QJc3RfZ2lkOworCWNvbXBhdF9kZXZfdAlzdF9yZGV2OworCXUxNgkJX19wYWQyOworCXUzMgkJc3Rfc2l6ZTsKKwl1MzIJCXN0X2Jsa3NpemU7CisJdTMyCQlzdF9ibG9ja3M7CisJdTMyCQlzdF9hdGltZTsKKwl1MzIJCXN0X2F0aW1lX25zZWM7CisJdTMyCQlzdF9tdGltZTsKKwl1MzIJCXN0X210aW1lX25zZWM7CisJdTMyCQlzdF9jdGltZTsKKwl1MzIJCXN0X2N0aW1lX25zZWM7CisJdTMyCQlfX3VudXNlZDQ7CisJdTMyCQlfX3VudXNlZDU7Cit9OworCitzdHJ1Y3QgY29tcGF0X2Zsb2NrIHsKKwlzaG9ydAkJbF90eXBlOworCXNob3J0CQlsX3doZW5jZTsKKwljb21wYXRfb2ZmX3QJbF9zdGFydDsKKwljb21wYXRfb2ZmX3QJbF9sZW47CisJY29tcGF0X3BpZF90CWxfcGlkOworfTsKKworI2RlZmluZSBGX0dFVExLNjQJMTIKKyNkZWZpbmUgRl9TRVRMSzY0CTEzCisjZGVmaW5lIEZfU0VUTEtXNjQJMTQKKworLyoKKyAqIElBMzIgdXNlcyA0IGJ5dGUgYWxpZ25tZW50IGZvciA2NCBiaXQgcXVhbnRpdGllcywKKyAqIHNvIHdlIG5lZWQgdG8gcGFjayB0aGlzIHN0cnVjdHVyZS4KKyAqLworc3RydWN0IGNvbXBhdF9mbG9jazY0IHsKKwlzaG9ydAkJbF90eXBlOworCXNob3J0CQlsX3doZW5jZTsKKwljb21wYXRfbG9mZl90CWxfc3RhcnQ7CisJY29tcGF0X2xvZmZfdAlsX2xlbjsKKwljb21wYXRfcGlkX3QJbF9waWQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgY29tcGF0X3N0YXRmcyB7CisJaW50CQlmX3R5cGU7CisJaW50CQlmX2JzaXplOworCWludAkJZl9ibG9ja3M7CisJaW50CQlmX2JmcmVlOworCWludAkJZl9iYXZhaWw7CisJaW50CQlmX2ZpbGVzOworCWludAkJZl9mZnJlZTsKKwljb21wYXRfZnNpZF90CWZfZnNpZDsKKwlpbnQJCWZfbmFtZWxlbjsJLyogU3VuT1MgaWdub3JlcyB0aGlzIGZpZWxkLiAqLworCWludAkJZl9mcnNpemU7CisJaW50CQlmX3NwYXJlWzVdOworfTsKKworI2RlZmluZSBDT01QQVRfUkxJTV9PTERfSU5GSU5JVFkgICAgICAgMHg3ZmZmZmZmZgorI2RlZmluZSBDT01QQVRfUkxJTV9JTkZJTklUWSAgICAgICAgICAgMHhmZmZmZmZmZgorCit0eXBlZGVmIHUzMgkJY29tcGF0X29sZF9zaWdzZXRfdDsJLyogYXQgbGVhc3QgMzIgYml0cyAqLworCisjZGVmaW5lIF9DT01QQVRfTlNJRwkJNjQKKyNkZWZpbmUgX0NPTVBBVF9OU0lHX0JQVwkzMgorCit0eXBlZGVmIHUzMgkJY29tcGF0X3NpZ3NldF93b3JkOworCisjZGVmaW5lIENPTVBBVF9PRkZfVF9NQVgJMHg3ZmZmZmZmZgorI2RlZmluZSBDT01QQVRfTE9GRl9UX01BWAkweDdmZmZmZmZmZmZmZmZmZmZMCisKK3N0cnVjdCBjb21wYXRfaXBjNjRfcGVybSB7CisJY29tcGF0X2tleV90IGtleTsKKwljb21wYXRfdWlkMzJfdCB1aWQ7CisJY29tcGF0X2dpZDMyX3QgZ2lkOworCWNvbXBhdF91aWQzMl90IGN1aWQ7CisJY29tcGF0X2dpZDMyX3QgY2dpZDsKKwl1bnNpZ25lZCBzaG9ydCBtb2RlOworCXVuc2lnbmVkIHNob3J0IF9fcGFkMTsKKwl1bnNpZ25lZCBzaG9ydCBzZXE7CisJdW5zaWduZWQgc2hvcnQgX19wYWQyOworCWNvbXBhdF91bG9uZ190IHVudXNlZDE7CisJY29tcGF0X3Vsb25nX3QgdW51c2VkMjsKK307CisKK3N0cnVjdCBjb21wYXRfc2VtaWQ2NF9kcyB7CisJc3RydWN0IGNvbXBhdF9pcGM2NF9wZXJtIHNlbV9wZXJtOworCWNvbXBhdF90aW1lX3QgIHNlbV9vdGltZTsKKwljb21wYXRfdWxvbmdfdCBfX3VudXNlZDE7CisJY29tcGF0X3RpbWVfdCAgc2VtX2N0aW1lOworCWNvbXBhdF91bG9uZ190IF9fdW51c2VkMjsKKwljb21wYXRfdWxvbmdfdCBzZW1fbnNlbXM7CisJY29tcGF0X3Vsb25nX3QgX191bnVzZWQzOworCWNvbXBhdF91bG9uZ190IF9fdW51c2VkNDsKK307CisKK3N0cnVjdCBjb21wYXRfbXNxaWQ2NF9kcyB7CisJc3RydWN0IGNvbXBhdF9pcGM2NF9wZXJtIG1zZ19wZXJtOworCWNvbXBhdF90aW1lX3QgIG1zZ19zdGltZTsKKwljb21wYXRfdWxvbmdfdCBfX3VudXNlZDE7CisJY29tcGF0X3RpbWVfdCAgbXNnX3J0aW1lOworCWNvbXBhdF91bG9uZ190IF9fdW51c2VkMjsKKwljb21wYXRfdGltZV90ICBtc2dfY3RpbWU7CisJY29tcGF0X3Vsb25nX3QgX191bnVzZWQzOworCWNvbXBhdF91bG9uZ190IG1zZ19jYnl0ZXM7CisJY29tcGF0X3Vsb25nX3QgbXNnX3FudW07CisJY29tcGF0X3Vsb25nX3QgbXNnX3FieXRlczsKKwljb21wYXRfcGlkX3QgICBtc2dfbHNwaWQ7CisJY29tcGF0X3BpZF90ICAgbXNnX2xycGlkOworCWNvbXBhdF91bG9uZ190IF9fdW51c2VkNDsKKwljb21wYXRfdWxvbmdfdCBfX3VudXNlZDU7Cit9OworCitzdHJ1Y3QgY29tcGF0X3NobWlkNjRfZHMgeworCXN0cnVjdCBjb21wYXRfaXBjNjRfcGVybSBzaG1fcGVybTsKKwljb21wYXRfc2l6ZV90ICBzaG1fc2Vnc3o7CisJY29tcGF0X3RpbWVfdCAgc2htX2F0aW1lOworCWNvbXBhdF91bG9uZ190IF9fdW51c2VkMTsKKwljb21wYXRfdGltZV90ICBzaG1fZHRpbWU7CisJY29tcGF0X3Vsb25nX3QgX191bnVzZWQyOworCWNvbXBhdF90aW1lX3QgIHNobV9jdGltZTsKKwljb21wYXRfdWxvbmdfdCBfX3VudXNlZDM7CisJY29tcGF0X3BpZF90ICAgc2htX2NwaWQ7CisJY29tcGF0X3BpZF90ICAgc2htX2xwaWQ7CisJY29tcGF0X3Vsb25nX3Qgc2htX25hdHRjaDsKKwljb21wYXRfdWxvbmdfdCBfX3VudXNlZDQ7CisJY29tcGF0X3Vsb25nX3QgX191bnVzZWQ1OworfTsKKworLyoKKyAqIEEgcG9pbnRlciBwYXNzZWQgaW4gZnJvbSB1c2VyIG1vZGUuIFRoaXMgc2hvdWxkIG5vdCBiZSB1c2VkIGZvciBzeXNjYWxsIHBhcmFtZXRlcnMsCisgKiBqdXN0IGRlY2xhcmUgdGhlbSBhcyBwb2ludGVycyBiZWNhdXNlIHRoZSBzeXNjYWxsIGVudHJ5IGNvZGUgd2lsbCBoYXZlIGFwcHJvcHJpYXRlbHkKKyAqIGNvbXZlcnRlZCB0aGVtIGFscmVhZHkuCisgKi8KK3R5cGVkZWYJdTMyCQljb21wYXRfdXB0cl90OworCitzdGF0aWMgaW5saW5lIHZvaWQgX191c2VyICoKK2NvbXBhdF9wdHIgKGNvbXBhdF91cHRyX3QgdXB0cikKK3sKKwlyZXR1cm4gKHZvaWQgX191c2VyICopICh1bnNpZ25lZCBsb25nKSB1cHRyOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fdXNlciAqCitjb21wYXRfYWxsb2NfdXNlcl9zcGFjZSAobG9uZyBsZW4pCit7CisJc3RydWN0IHB0X3JlZ3MgKnJlZ3MgPSBpYTY0X3Rhc2tfcmVncyhjdXJyZW50KTsKKwlyZXR1cm4gKHZvaWQgX191c2VyICopICgoKHJlZ3MtPnIxMiAmIDB4ZmZmZmZmZmYpICYgLTE2KSAtIGxlbik7Cit9CisKKyNlbmRpZiAvKiBfQVNNX0lBNjRfQ09NUEFUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvY3B1LmggYi9pbmNsdWRlL2FzbS1pYTY0L2NwdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4N2ZhMzIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L2NwdS5oCkBAIC0wLDAgKzEsMjIgQEAKKyNpZm5kZWYgX0FTTV9JQTY0X0NQVV9IXworI2RlZmluZSBfQVNNX0lBNjRfQ1BVX0hfCisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKyNpbmNsdWRlIDxsaW51eC90b3BvbG9neS5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorCitzdHJ1Y3QgaWE2NF9jcHUgeworCXN0cnVjdCBjcHUgY3B1OworfTsKKworREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCBpYTY0X2NwdSwgY3B1X2RldmljZXMpOworCitERUNMQVJFX1BFUl9DUFUoaW50LCBjcHVfc3RhdGUpOworCitleHRlcm4gaW50IGFyY2hfcmVnaXN0ZXJfY3B1KGludCBudW0pOworI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQorZXh0ZXJuIHZvaWQgYXJjaF91bnJlZ2lzdGVyX2NwdShpbnQpOworI2VuZGlmCisKKyNlbmRpZiAvKiBfQVNNX0lBNjRfQ1BVX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L2NwdXRpbWUuaCBiL2luY2x1ZGUvYXNtLWlhNjQvY3B1dGltZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyNDAwYTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L2NwdXRpbWUuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19JQTY0X0NQVVRJTUVfSAorI2RlZmluZSBfX0lBNjRfQ1BVVElNRV9ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9jcHV0aW1lLmg+CisKKyNlbmRpZiAvKiBfX0lBNjRfQ1BVVElNRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L2N1cnJlbnQuaCBiL2luY2x1ZGUvYXNtLWlhNjQvY3VycmVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2NTlmOTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L2N1cnJlbnQuaApAQCAtMCwwICsxLDE3IEBACisjaWZuZGVmIF9BU01fSUE2NF9DVVJSRU5UX0gKKyNkZWZpbmUgX0FTTV9JQTY0X0NVUlJFTlRfSAorCisvKgorICogTW9kaWZpZWQgMTk5OC0yMDAwCisgKglEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+LCBIZXdsZXR0LVBhY2thcmQgQ28KKyAqLworCisjaW5jbHVkZSA8YXNtL2ludHJpbnNpY3MuaD4KKworLyoKKyAqIEluIGtlcm5lbCBtb2RlLCB0aHJlYWQgcG9pbnRlciAocjEzKSBpcyB1c2VkIHRvIHBvaW50IHRvIHRoZSBjdXJyZW50IHRhc2sKKyAqIHN0cnVjdHVyZS4KKyAqLworI2RlZmluZSBjdXJyZW50CSgoc3RydWN0IHRhc2tfc3RydWN0ICopIGlhNjRfZ2V0cmVnKF9JQTY0X1JFR19UUCkpCisKKyNlbmRpZiAvKiBfQVNNX0lBNjRfQ1VSUkVOVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L2N5Y2xvbmUuaCBiL2luY2x1ZGUvYXNtLWlhNjQvY3ljbG9uZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4ZjY1MDAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L2N5Y2xvbmUuaApAQCAtMCwwICsxLDE1IEBACisjaWZuZGVmIEFTTV9JQTY0X0NZQ0xPTkVfSAorI2RlZmluZSBBU01fSUE2NF9DWUNMT05FX0gKKworI2lmZGVmCUNPTkZJR19JQTY0X0NZQ0xPTkUKK2V4dGVybiBpbnQgdXNlX2N5Y2xvbmU7CitleHRlcm4gdm9pZCBfX2luaXQgY3ljbG9uZV9zZXR1cCh2b2lkKTsKKyNlbHNlCS8qIENPTkZJR19JQTY0X0NZQ0xPTkUgKi8KKyNkZWZpbmUgdXNlX2N5Y2xvbmUgMAorc3RhdGljIGlubGluZSB2b2lkIGN5Y2xvbmVfc2V0dXAodm9pZCkKK3sKKwlwcmludGsoS0VSTl9FUlIgIkN5Y2xvbmUgQ291bnRlcjogU3lzdGVtIG5vdCBjb25maWd1cmVkIgorCQkJCQkiIHcvIENPTkZJR19JQTY0X0NZQ0xPTkUuXG4iKTsKK30KKyNlbmRpZgkvKiBDT05GSUdfSUE2NF9DWUNMT05FICovCisjZW5kaWYJLyogIUFTTV9JQTY0X0NZQ0xPTkVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9kZWxheS5oIGIvaW5jbHVkZS9hc20taWE2NC9kZWxheS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3MTgyZDYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L2RlbGF5LmgKQEAgLTAsMCArMSw5NyBAQAorI2lmbmRlZiBfQVNNX0lBNjRfREVMQVlfSAorI2RlZmluZSBfQVNNX0lBNjRfREVMQVlfSAorCisvKgorICogRGVsYXkgcm91dGluZXMgdXNpbmcgYSBwcmUtY29tcHV0ZWQgImN5Y2xlcy91c2VjIiB2YWx1ZS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTkgSGV3bGV0dC1QYWNrYXJkIENvCisgKglEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgVkEgTGludXggU3lzdGVtcworICogQ29weXJpZ2h0IChDKSAxOTk5IFdhbHQgRHJ1bW1vbmQgPGRydW1tb25kQHZhbGludXguY29tPgorICogQ29weXJpZ2h0IChDKSAxOTk5IEFzaXQgTWFsbGljayA8YXNpdC5rLm1hbGxpY2tAaW50ZWwuY29tPgorICogQ29weXJpZ2h0IChDKSAxOTk5IERvbiBEdWdnZXIgPGRvbi5kdWdnZXJAaW50ZWwuY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisKKyNpbmNsdWRlIDxhc20vaW50cmluc2ljcy5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKworc3RhdGljIF9faW5saW5lX18gdm9pZAoraWE2NF9zZXRfaXRtICh1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwlpYTY0X3NldHJlZyhfSUE2NF9SRUdfQ1JfSVRNLCB2YWwpOworCWlhNjRfc3Jsel9kKCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcKK2lhNjRfZ2V0X2l0bSAodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHJlc3VsdDsKKworCXJlc3VsdCA9IGlhNjRfZ2V0cmVnKF9JQTY0X1JFR19DUl9JVE0pOworCWlhNjRfc3Jsel9kKCk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZAoraWE2NF9zZXRfaXR2ICh1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwlpYTY0X3NldHJlZyhfSUE2NF9SRUdfQ1JfSVRWLCB2YWwpOworCWlhNjRfc3Jsel9kKCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcKK2lhNjRfZ2V0X2l0diAodm9pZCkKK3sKKwlyZXR1cm4gaWE2NF9nZXRyZWcoX0lBNjRfUkVHX0NSX0lUVik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQKK2lhNjRfc2V0X2l0YyAodW5zaWduZWQgbG9uZyB2YWwpCit7CisJaWE2NF9zZXRyZWcoX0lBNjRfUkVHX0FSX0lUQywgdmFsKTsKKwlpYTY0X3NybHpfZCgpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nCitpYTY0X2dldF9pdGMgKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyByZXN1bHQ7CisKKwlyZXN1bHQgPSBpYTY0X2dldHJlZyhfSUE2NF9SRUdfQVJfSVRDKTsKKwlpYTY0X2JhcnJpZXIoKTsKKyNpZmRlZiBDT05GSUdfSVRBTklVTQorCXdoaWxlICh1bmxpa2VseSgoX19zMzIpIHJlc3VsdCA9PSAtMSkpIHsKKwkJcmVzdWx0ID0gaWE2NF9nZXRyZWcoX0lBNjRfUkVHX0FSX0lUQyk7CisJCWlhNjRfYmFycmllcigpOworCX0KKyNlbmRpZgorCXJldHVybiByZXN1bHQ7Cit9CisKK2V4dGVybiB2b2lkIGlhNjRfZGVsYXlfbG9vcCAodW5zaWduZWQgbG9uZyBsb29wcyk7CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQKK19fZGVsYXkgKHVuc2lnbmVkIGxvbmcgbG9vcHMpCit7CisJaWYgKHVubGlrZWx5KGxvb3BzIDwgMSkpCisJCXJldHVybjsKKworCWlhNjRfZGVsYXlfbG9vcCAobG9vcHMgLSAxKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZAordWRlbGF5ICh1bnNpZ25lZCBsb25nIHVzZWNzKQoreworCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBpYTY0X2dldF9pdGMoKTsKKwl1bnNpZ25lZCBsb25nIGN5Y2xlcyA9IHVzZWNzKmxvY2FsX2NwdV9kYXRhLT5jeWNfcGVyX3VzZWM7CisKKwl3aGlsZSAoaWE2NF9nZXRfaXRjKCkgLSBzdGFydCA8IGN5Y2xlcykKKwkJY3B1X3JlbGF4KCk7Cit9CisKKyNlbmRpZiAvKiBfQVNNX0lBNjRfREVMQVlfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9kaXY2NC5oIGIvaW5jbHVkZS9hc20taWE2NC9kaXY2NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjZDk3OGMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L2RpdjY0LmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2RpdjY0Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L2RtYS1tYXBwaW5nLmggYi9pbmNsdWRlL2FzbS1pYTY0L2RtYS1tYXBwaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM0N2M5OAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvZG1hLW1hcHBpbmcuaApAQCAtMCwwICsxLDcwIEBACisjaWZuZGVmIF9BU01fSUE2NF9ETUFfTUFQUElOR19ICisjZGVmaW5lIF9BU01fSUE2NF9ETUFfTUFQUElOR19ICisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNCBIZXdsZXR0LVBhY2thcmQgQ28KKyAqCURhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+CisKKyNkZWZpbmUgZG1hX2FsbG9jX2NvaGVyZW50CXBsYXRmb3JtX2RtYV9hbGxvY19jb2hlcmVudAorI2RlZmluZSBkbWFfYWxsb2Nfbm9uY29oZXJlbnQJcGxhdGZvcm1fZG1hX2FsbG9jX2NvaGVyZW50CS8qIGNvaGVyZW50IG1lbS4gaXMgY2hlYXAgKi8KKyNkZWZpbmUgZG1hX2ZyZWVfY29oZXJlbnQJcGxhdGZvcm1fZG1hX2ZyZWVfY29oZXJlbnQKKyNkZWZpbmUgZG1hX2ZyZWVfbm9uY29oZXJlbnQJcGxhdGZvcm1fZG1hX2ZyZWVfY29oZXJlbnQKKyNkZWZpbmUgZG1hX21hcF9zaW5nbGUJCXBsYXRmb3JtX2RtYV9tYXBfc2luZ2xlCisjZGVmaW5lIGRtYV9tYXBfc2cJCXBsYXRmb3JtX2RtYV9tYXBfc2cKKyNkZWZpbmUgZG1hX3VubWFwX3NpbmdsZQlwbGF0Zm9ybV9kbWFfdW5tYXBfc2luZ2xlCisjZGVmaW5lIGRtYV91bm1hcF9zZwkJcGxhdGZvcm1fZG1hX3VubWFwX3NnCisjZGVmaW5lIGRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1CXBsYXRmb3JtX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1CisjZGVmaW5lIGRtYV9zeW5jX3NnX2Zvcl9jcHUJcGxhdGZvcm1fZG1hX3N5bmNfc2dfZm9yX2NwdQorI2RlZmluZSBkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZSBwbGF0Zm9ybV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZQorI2RlZmluZSBkbWFfc3luY19zZ19mb3JfZGV2aWNlCXBsYXRmb3JtX2RtYV9zeW5jX3NnX2Zvcl9kZXZpY2UKKyNkZWZpbmUgZG1hX21hcHBpbmdfZXJyb3IJcGxhdGZvcm1fZG1hX21hcHBpbmdfZXJyb3IKKworI2RlZmluZSBkbWFfbWFwX3BhZ2UoZGV2LCBwZywgb2ZmLCBzaXplLCBkaXIpCQkJCVwKKwlkbWFfbWFwX3NpbmdsZShkZXYsIHBhZ2VfYWRkcmVzcyhwZykgKyAob2ZmKSwgKHNpemUpLCAoZGlyKSkKKyNkZWZpbmUgZG1hX3VubWFwX3BhZ2UoZGV2LCBkbWFfYWRkciwgc2l6ZSwgZGlyKQkJCVwKKwlkbWFfdW5tYXBfc2luZ2xlKGRldiwgZG1hX2FkZHIsIHNpemUsIGRpcikKKworLyoKKyAqIFJlc3Qgb2YgdGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlICJBZHZhbmNlZCBETUEgQVBJIi4gIFVzZSBhdCB5b3VyIG93biByaXNrLgorICogU2VlIERvY3VtZW50YXRpb24vRE1BLUFQSS50eHQgZm9yIGRldGFpbHMuCisgKi8KKworI2RlZmluZSBkbWFfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2NwdShkZXYsIGRtYV9oYW5kbGUsIG9mZnNldCwgc2l6ZSwgZGlyKQlcCisJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoZGV2LCBkbWFfaGFuZGxlLCBzaXplLCBkaXIpCisjZGVmaW5lIGRtYV9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfZGV2aWNlKGRldiwgZG1hX2hhbmRsZSwgb2Zmc2V0LCBzaXplLCBkaXIpCVwKKwlkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShkZXYsIGRtYV9oYW5kbGUsIHNpemUsIGRpcikKKworI2RlZmluZSBkbWFfc3VwcG9ydGVkCQlwbGF0Zm9ybV9kbWFfc3VwcG9ydGVkCisKK3N0YXRpYyBpbmxpbmUgaW50CitkbWFfc2V0X21hc2sgKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IG1hc2spCit7CisJaWYgKCFkZXYtPmRtYV9tYXNrIHx8ICFkbWFfc3VwcG9ydGVkKGRldiwgbWFzaykpCisJCXJldHVybiAtRUlPOworCSpkZXYtPmRtYV9tYXNrID0gbWFzazsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2RtYV9nZXRfY2FjaGVfYWxpZ25tZW50ICh2b2lkKQoreworCWV4dGVybiBpbnQgaWE2NF9tYXhfY2FjaGVsaW5lX3NpemU7CisJcmV0dXJuIGlhNjRfbWF4X2NhY2hlbGluZV9zaXplOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2RtYV9jYWNoZV9zeW5jICh2b2lkICp2YWRkciwgc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3sKKwkvKgorCSAqIElBLTY0IGlzIGNhY2hlLWNvaGVyZW50LCBzbyB0aGlzIGlzIG1vc3RseSBhIG5vLW9wLiAgSG93ZXZlciwgd2UgZG8gbmVlZCB0bworCSAqIGVuc3VyZSB0aGF0IGRtYV9jYWNoZV9zeW5jKCkgZW5mb3JjZXMgb3JkZXIsIGhlbmNlIHRoZSBtYigpLgorCSAqLworCW1iKCk7Cit9CisKKyNkZWZpbmUgZG1hX2lzX2NvbnNpc3RlbnQoZG1hX2hhbmRsZSkJKDEpCS8qIGFsbCB3ZSBkbyBpcyBjb2hlcmVudCBtZW1vcnkuLi4gKi8KKworI2VuZGlmIC8qIF9BU01fSUE2NF9ETUFfTUFQUElOR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L2RtYS5oIGIvaW5jbHVkZS9hc20taWE2NC9kbWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmUxYjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taWE2NC9kbWEuaApAQCAtMCwwICsxLDIzIEBACisjaWZuZGVmIF9BU01fSUE2NF9ETUFfSAorI2RlZmluZSBfQVNNX0lBNjRfRE1BX0gKKworLyoKKyAqIENvcHlyaWdodCAoQykgMTk5OC0yMDAyIEhld2xldHQtUGFja2FyZCBDbworICoJRGF2aWQgTW9zYmVyZ2VyLVRhbmcgPGRhdmlkbUBocGwuaHAuY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgkJLyogbmVlZCBieXRlIElPICovCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIE1BWF9ETUFfQUREUkVTUzsKKworI2lmZGVmIENPTkZJR19QQ0kKKyAgZXh0ZXJuIGludCBpc2FfZG1hX2JyaWRnZV9idWdneTsKKyNlbHNlCisjIGRlZmluZSBpc2FfZG1hX2JyaWRnZV9idWdneSAJKDApCisjZW5kaWYKKworI2RlZmluZSBmcmVlX2RtYSh4KQorCisjZW5kaWYgLyogX0FTTV9JQTY0X0RNQV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L2VsZi5oIGIvaW5jbHVkZS9hc20taWE2NC9lbGYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDRjY2M0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taWE2NC9lbGYuaApAQCAtMCwwICsxLDI1OSBAQAorI2lmbmRlZiBfQVNNX0lBNjRfRUxGX0gKKyNkZWZpbmUgX0FTTV9JQTY0X0VMRl9ICisKKy8qCisgKiBFTEYtc3BlY2lmaWMgZGVmaW5pdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4LTE5OTksIDIwMDItMjAwNCBIZXdsZXR0LVBhY2thcmQgQ28KKyAqCURhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpbmNsdWRlIDxhc20vZnB1Lmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKworLyoKKyAqIFRoaXMgaXMgdXNlZCB0byBlbnN1cmUgd2UgZG9uJ3QgbG9hZCBzb21ldGhpbmcgZm9yIHRoZSB3cm9uZyBhcmNoaXRlY3R1cmUuCisgKi8KKyNkZWZpbmUgZWxmX2NoZWNrX2FyY2goeCkgKCh4KS0+ZV9tYWNoaW5lID09IEVNX0lBXzY0KQorCisvKgorICogVGhlc2UgYXJlIHVzZWQgdG8gc2V0IHBhcmFtZXRlcnMgaW4gdGhlIGNvcmUgZHVtcHMuCisgKi8KKyNkZWZpbmUgRUxGX0NMQVNTCUVMRkNMQVNTNjQKKyNkZWZpbmUgRUxGX0RBVEEJRUxGREFUQTJMU0IKKyNkZWZpbmUgRUxGX0FSQ0gJRU1fSUFfNjQKKworI2RlZmluZSBVU0VfRUxGX0NPUkVfRFVNUAorCisvKiBMZWFzdC1zaWduaWZpY2FudCBmb3VyIGJpdHMgb2YgRUxGIGhlYWRlcidzIGVfZmxhZ3MgYXJlIE9TLXNwZWNpZmljLiAgVGhlIGJpdHMgYXJlCisgICBpbnRlcnByZXRlZCBhcyBmb2xsb3dzIGJ5IExpbnV4OiAqLworI2RlZmluZSBFRl9JQV82NF9MSU5VWF9FWEVDVVRBQkxFX1NUQUNLCTB4MQkvKiBpcyBzdGFjayAoJiBoZWFwKSBleGVjdXRhYmxlIGJ5IGRlZmF1bHQ/ICovCisKKyNkZWZpbmUgRUxGX0VYRUNfUEFHRVNJWkUJUEFHRV9TSVpFCisKKy8qCisgKiBUaGlzIGlzIHRoZSBsb2NhdGlvbiB0aGF0IGFuIEVUX0RZTiBwcm9ncmFtIGlzIGxvYWRlZCBpZiBleGVjJ2VkLgorICogVHlwaWNhbCB1c2Ugb2YgdGhpcyBpcyB0byBpbnZva2UgIi4vbGQuc28gc29tZXByb2ciIHRvIHRlc3Qgb3V0IGEKKyAqIG5ldyB2ZXJzaW9uIG9mIHRoZSBsb2FkZXIuICBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGl0IGlzIG91dCBvZgorICogdGhlIHdheSBvZiB0aGUgcHJvZ3JhbSB0aGF0IGl0IHdpbGwgImV4ZWMiLCBhbmQgdGhhdCB0aGVyZSBpcworICogc3VmZmljaWVudCByb29tIGZvciB0aGUgYnJrLgorICovCisjZGVmaW5lIEVMRl9FVF9EWU5fQkFTRQkJKFRBU0tfVU5NQVBQRURfQkFTRSArIDB4ODAwMDAwMDAwVUwpCisKKyNkZWZpbmUgUFRfSUFfNjRfVU5XSU5ECQkweDcwMDAwMDAxCisKKy8qIElBLTY0IHJlbG9jYXRpb25zOiAqLworI2RlZmluZSBSX0lBNjRfTk9ORQkJMHgwMAkvKiBub25lICovCisjZGVmaW5lIFJfSUE2NF9JTU0xNAkJMHgyMQkvKiBzeW1ib2wgKyBhZGRlbmQsIGFkZCBpbW0xNCAqLworI2RlZmluZSBSX0lBNjRfSU1NMjIJCTB4MjIJLyogc3ltYm9sICsgYWRkZW5kLCBhZGQgaW1tMjIgKi8KKyNkZWZpbmUgUl9JQTY0X0lNTTY0CQkweDIzCS8qIHN5bWJvbCArIGFkZGVuZCwgbW92IGltbTY0ICovCisjZGVmaW5lIFJfSUE2NF9ESVIzMk1TQgkJMHgyNAkvKiBzeW1ib2wgKyBhZGRlbmQsIGRhdGE0IE1TQiAqLworI2RlZmluZSBSX0lBNjRfRElSMzJMU0IJCTB4MjUJLyogc3ltYm9sICsgYWRkZW5kLCBkYXRhNCBMU0IgKi8KKyNkZWZpbmUgUl9JQTY0X0RJUjY0TVNCCQkweDI2CS8qIHN5bWJvbCArIGFkZGVuZCwgZGF0YTggTVNCICovCisjZGVmaW5lIFJfSUE2NF9ESVI2NExTQgkJMHgyNwkvKiBzeW1ib2wgKyBhZGRlbmQsIGRhdGE4IExTQiAqLworI2RlZmluZSBSX0lBNjRfR1BSRUwyMgkJMHgyYQkvKiBAZ3ByZWwoc3ltK2FkZCksIGFkZCBpbW0yMiAqLworI2RlZmluZSBSX0lBNjRfR1BSRUw2NEkJCTB4MmIJLyogQGdwcmVsKHN5bSthZGQpLCBtb3YgaW1tNjQgKi8KKyNkZWZpbmUgUl9JQTY0X0dQUkVMMzJNU0IJMHgyYwkvKiBAZ3ByZWwoc3ltK2FkZCksIGRhdGE0IE1TQiAqLworI2RlZmluZSBSX0lBNjRfR1BSRUwzMkxTQgkweDJkCS8qIEBncHJlbChzeW0rYWRkKSwgZGF0YTQgTFNCICovCisjZGVmaW5lIFJfSUE2NF9HUFJFTDY0TVNCCTB4MmUJLyogQGdwcmVsKHN5bSthZGQpLCBkYXRhOCBNU0IgKi8KKyNkZWZpbmUgUl9JQTY0X0dQUkVMNjRMU0IJMHgyZgkvKiBAZ3ByZWwoc3ltK2FkZCksIGRhdGE4IExTQiAqLworI2RlZmluZSBSX0lBNjRfTFRPRkYyMgkJMHgzMgkvKiBAbHRvZmYoc3ltK2FkZCksIGFkZCBpbW0yMiAqLworI2RlZmluZSBSX0lBNjRfTFRPRkY2NEkJCTB4MzMJLyogQGx0b2ZmKHN5bSthZGQpLCBtb3YgaW1tNjQgKi8KKyNkZWZpbmUgUl9JQTY0X1BMVE9GRjIyCQkweDNhCS8qIEBwbHRvZmYoc3ltK2FkZCksIGFkZCBpbW0yMiAqLworI2RlZmluZSBSX0lBNjRfUExUT0ZGNjRJCTB4M2IJLyogQHBsdG9mZihzeW0rYWRkKSwgbW92IGltbTY0ICovCisjZGVmaW5lIFJfSUE2NF9QTFRPRkY2NE1TQgkweDNlCS8qIEBwbHRvZmYoc3ltK2FkZCksIGRhdGE4IE1TQiAqLworI2RlZmluZSBSX0lBNjRfUExUT0ZGNjRMU0IJMHgzZgkvKiBAcGx0b2ZmKHN5bSthZGQpLCBkYXRhOCBMU0IgKi8KKyNkZWZpbmUgUl9JQTY0X0ZQVFI2NEkJCTB4NDMJLyogQGZwdHIoc3ltK2FkZCksIG1vdiBpbW02NCAqLworI2RlZmluZSBSX0lBNjRfRlBUUjMyTVNCCTB4NDQJLyogQGZwdHIoc3ltK2FkZCksIGRhdGE0IE1TQiAqLworI2RlZmluZSBSX0lBNjRfRlBUUjMyTFNCCTB4NDUJLyogQGZwdHIoc3ltK2FkZCksIGRhdGE0IExTQiAqLworI2RlZmluZSBSX0lBNjRfRlBUUjY0TVNCCTB4NDYJLyogQGZwdHIoc3ltK2FkZCksIGRhdGE4IE1TQiAqLworI2RlZmluZSBSX0lBNjRfRlBUUjY0TFNCCTB4NDcJLyogQGZwdHIoc3ltK2FkZCksIGRhdGE4IExTQiAqLworI2RlZmluZSBSX0lBNjRfUENSRUw2MEIJCTB4NDgJLyogQHBjcmVsKHN5bSthZGQpLCBicmwgKi8KKyNkZWZpbmUgUl9JQTY0X1BDUkVMMjFCCQkweDQ5CS8qIEBwY3JlbChzeW0rYWRkKSwgcHRiLCBjYWxsICovCisjZGVmaW5lIFJfSUE2NF9QQ1JFTDIxTQkJMHg0YQkvKiBAcGNyZWwoc3ltK2FkZCksIGNoay5zICovCisjZGVmaW5lIFJfSUE2NF9QQ1JFTDIxRgkJMHg0YgkvKiBAcGNyZWwoc3ltK2FkZCksIGZjaGtmICovCisjZGVmaW5lIFJfSUE2NF9QQ1JFTDMyTVNCCTB4NGMJLyogQHBjcmVsKHN5bSthZGQpLCBkYXRhNCBNU0IgKi8KKyNkZWZpbmUgUl9JQTY0X1BDUkVMMzJMU0IJMHg0ZAkvKiBAcGNyZWwoc3ltK2FkZCksIGRhdGE0IExTQiAqLworI2RlZmluZSBSX0lBNjRfUENSRUw2NE1TQgkweDRlCS8qIEBwY3JlbChzeW0rYWRkKSwgZGF0YTggTVNCICovCisjZGVmaW5lIFJfSUE2NF9QQ1JFTDY0TFNCCTB4NGYJLyogQHBjcmVsKHN5bSthZGQpLCBkYXRhOCBMU0IgKi8KKyNkZWZpbmUgUl9JQTY0X0xUT0ZGX0ZQVFIyMgkweDUyCS8qIEBsdG9mZihAZnB0cihzK2EpKSwgaW1tMjIgKi8KKyNkZWZpbmUgUl9JQTY0X0xUT0ZGX0ZQVFI2NEkJMHg1MwkvKiBAbHRvZmYoQGZwdHIocythKSksIGltbTY0ICovCisjZGVmaW5lIFJfSUE2NF9MVE9GRl9GUFRSMzJNU0IJMHg1NAkvKiBAbHRvZmYoQGZwdHIocythKSksIDQgTVNCICovCisjZGVmaW5lIFJfSUE2NF9MVE9GRl9GUFRSMzJMU0IJMHg1NQkvKiBAbHRvZmYoQGZwdHIocythKSksIDQgTFNCICovCisjZGVmaW5lIFJfSUE2NF9MVE9GRl9GUFRSNjRNU0IJMHg1NgkvKiBAbHRvZmYoQGZwdHIocythKSksIDggTVNCICovCisjZGVmaW5lIFJfSUE2NF9MVE9GRl9GUFRSNjRMU0IJMHg1NwkvKiBAbHRvZmYoQGZwdHIocythKSksIDggTFNCICovCisjZGVmaW5lIFJfSUE2NF9TRUdSRUwzMk1TQgkweDVjCS8qIEBzZWdyZWwoc3ltK2FkZCksIGRhdGE0IE1TQiAqLworI2RlZmluZSBSX0lBNjRfU0VHUkVMMzJMU0IJMHg1ZAkvKiBAc2VncmVsKHN5bSthZGQpLCBkYXRhNCBMU0IgKi8KKyNkZWZpbmUgUl9JQTY0X1NFR1JFTDY0TVNCCTB4NWUJLyogQHNlZ3JlbChzeW0rYWRkKSwgZGF0YTggTVNCICovCisjZGVmaW5lIFJfSUE2NF9TRUdSRUw2NExTQgkweDVmCS8qIEBzZWdyZWwoc3ltK2FkZCksIGRhdGE4IExTQiAqLworI2RlZmluZSBSX0lBNjRfU0VDUkVMMzJNU0IJMHg2NAkvKiBAc2VjcmVsKHN5bSthZGQpLCBkYXRhNCBNU0IgKi8KKyNkZWZpbmUgUl9JQTY0X1NFQ1JFTDMyTFNCCTB4NjUJLyogQHNlY3JlbChzeW0rYWRkKSwgZGF0YTQgTFNCICovCisjZGVmaW5lIFJfSUE2NF9TRUNSRUw2NE1TQgkweDY2CS8qIEBzZWNyZWwoc3ltK2FkZCksIGRhdGE4IE1TQiAqLworI2RlZmluZSBSX0lBNjRfU0VDUkVMNjRMU0IJMHg2NwkvKiBAc2VjcmVsKHN5bSthZGQpLCBkYXRhOCBMU0IgKi8KKyNkZWZpbmUgUl9JQTY0X1JFTDMyTVNCCQkweDZjCS8qIGRhdGEgNCArIFJFTCAqLworI2RlZmluZSBSX0lBNjRfUkVMMzJMU0IJCTB4NmQJLyogZGF0YSA0ICsgUkVMICovCisjZGVmaW5lIFJfSUE2NF9SRUw2NE1TQgkJMHg2ZQkvKiBkYXRhIDggKyBSRUwgKi8KKyNkZWZpbmUgUl9JQTY0X1JFTDY0TFNCCQkweDZmCS8qIGRhdGEgOCArIFJFTCAqLworI2RlZmluZSBSX0lBNjRfTFRWMzJNU0IJCTB4NzQJLyogc3ltYm9sICsgYWRkZW5kLCBkYXRhNCBNU0IgKi8KKyNkZWZpbmUgUl9JQTY0X0xUVjMyTFNCCQkweDc1CS8qIHN5bWJvbCArIGFkZGVuZCwgZGF0YTQgTFNCICovCisjZGVmaW5lIFJfSUE2NF9MVFY2NE1TQgkJMHg3NgkvKiBzeW1ib2wgKyBhZGRlbmQsIGRhdGE4IE1TQiAqLworI2RlZmluZSBSX0lBNjRfTFRWNjRMU0IJCTB4NzcJLyogc3ltYm9sICsgYWRkZW5kLCBkYXRhOCBMU0IgKi8KKyNkZWZpbmUgUl9JQTY0X1BDUkVMMjFCSQkweDc5CS8qIEBwY3JlbChzeW0rYWRkKSwgcHRiLCBjYWxsICovCisjZGVmaW5lIFJfSUE2NF9QQ1JFTDIyCQkweDdhCS8qIEBwY3JlbChzeW0rYWRkKSwgaW1tMjIgKi8KKyNkZWZpbmUgUl9JQTY0X1BDUkVMNjRJCQkweDdiCS8qIEBwY3JlbChzeW0rYWRkKSwgaW1tNjQgKi8KKyNkZWZpbmUgUl9JQTY0X0lQTFRNU0IJCTB4ODAJLyogZHluYW1pYyByZWxvYywgaW1wb3J0ZWQgUExULCBNU0IgKi8KKyNkZWZpbmUgUl9JQTY0X0lQTFRMU0IJCTB4ODEJLyogZHluYW1pYyByZWxvYywgaW1wb3J0ZWQgUExULCBMU0IgKi8KKyNkZWZpbmUgUl9JQTY0X0NPUFkJCTB4ODQJLyogZHluYW1pYyByZWxvYywgZGF0YSBjb3B5ICovCisjZGVmaW5lIFJfSUE2NF9TVUIJCTB4ODUJLyogLXN5bWJvbCArIGFkZGVuZCwgYWRkIGltbTIyICovCisjZGVmaW5lIFJfSUE2NF9MVE9GRjIyWAkJMHg4NgkvKiBMVE9GRjIyLCByZWxheGFibGUuICAqLworI2RlZmluZSBSX0lBNjRfTERYTU9WCQkweDg3CS8qIFVzZSBvZiBMVE9GRjIyWC4gICovCisjZGVmaW5lIFJfSUE2NF9UUFJFTDE0CQkweDkxCS8qIEB0cHJlbChzeW0rYWRkKSwgYWRkIGltbTE0ICovCisjZGVmaW5lIFJfSUE2NF9UUFJFTDIyCQkweDkyCS8qIEB0cHJlbChzeW0rYWRkKSwgYWRkIGltbTIyICovCisjZGVmaW5lIFJfSUE2NF9UUFJFTDY0SQkJMHg5MwkvKiBAdHByZWwoc3ltK2FkZCksIGFkZCBpbW02NCAqLworI2RlZmluZSBSX0lBNjRfVFBSRUw2NE1TQgkweDk2CS8qIEB0cHJlbChzeW0rYWRkKSwgZGF0YTggTVNCICovCisjZGVmaW5lIFJfSUE2NF9UUFJFTDY0TFNCCTB4OTcJLyogQHRwcmVsKHN5bSthZGQpLCBkYXRhOCBMU0IgKi8KKyNkZWZpbmUgUl9JQTY0X0xUT0ZGX1RQUkVMMjIJMHg5YQkvKiBAbHRvZmYoQHRwcmVsKHMrYSkpLCBhZGQgaW1tMjIgKi8KKyNkZWZpbmUgUl9JQTY0X0RUUE1PRDY0TVNCCTB4YTYJLyogQGR0cG1vZChzeW0rYWRkKSwgZGF0YTggTVNCICovCisjZGVmaW5lIFJfSUE2NF9EVFBNT0Q2NExTQgkweGE3CS8qIEBkdHBtb2Qoc3ltK2FkZCksIGRhdGE4IExTQiAqLworI2RlZmluZSBSX0lBNjRfTFRPRkZfRFRQTU9EMjIJMHhhYQkvKiBAbHRvZmYoQGR0cG1vZChzK2EpKSwgaW1tMjIgKi8KKyNkZWZpbmUgUl9JQTY0X0RUUFJFTDE0CQkweGIxCS8qIEBkdHByZWwoc3ltK2FkZCksIGltbTE0ICovCisjZGVmaW5lIFJfSUE2NF9EVFBSRUwyMgkJMHhiMgkvKiBAZHRwcmVsKHN5bSthZGQpLCBpbW0yMiAqLworI2RlZmluZSBSX0lBNjRfRFRQUkVMNjRJCTB4YjMJLyogQGR0cHJlbChzeW0rYWRkKSwgaW1tNjQgKi8KKyNkZWZpbmUgUl9JQTY0X0RUUFJFTDMyTVNCCTB4YjQJLyogQGR0cHJlbChzeW0rYWRkKSwgZGF0YTQgTVNCICovCisjZGVmaW5lIFJfSUE2NF9EVFBSRUwzMkxTQgkweGI1CS8qIEBkdHByZWwoc3ltK2FkZCksIGRhdGE0IExTQiAqLworI2RlZmluZSBSX0lBNjRfRFRQUkVMNjRNU0IJMHhiNgkvKiBAZHRwcmVsKHN5bSthZGQpLCBkYXRhOCBNU0IgKi8KKyNkZWZpbmUgUl9JQTY0X0RUUFJFTDY0TFNCCTB4YjcJLyogQGR0cHJlbChzeW0rYWRkKSwgZGF0YTggTFNCICovCisjZGVmaW5lIFJfSUE2NF9MVE9GRl9EVFBSRUwyMgkweGJhCS8qIEBsdG9mZihAZHRwcmVsKHMrYSkpLCBpbW0yMiAqLworCisvKiBJQS02NCBzcGVjaWZpYyBzZWN0aW9uIGZsYWdzOiAqLworI2RlZmluZSBTSEZfSUFfNjRfU0hPUlQJCTB4MTAwMDAwMDAJLyogc2VjdGlvbiBuZWFyIGdwICovCisKKy8qCisgKiBXZSB1c2UgKGFidXNlPykgdGhpcyBtYWNybyB0byBpbnNlcnQgdGhlIChlbXB0eSkgdm1fYXJlYSB0aGF0IGlzCisgKiB1c2VkIHRvIG1hcCB0aGUgcmVnaXN0ZXIgYmFja2luZyBzdG9yZS4gIEkgZG9uJ3Qgc2VlIGFueSBiZXR0ZXIKKyAqIHBsYWNlIHRvIGRvIHRoaXMsIGJ1dCB3ZSBzaG91bGQgZGlzY3VzcyB0aGlzIHdpdGggTGludXMgb25jZSB3ZSBjYW4KKyAqIHRhbGsgdG8gaGltLi4uCisgKi8KK2V4dGVybiB2b2lkIGlhNjRfaW5pdF9hZGRyX3NwYWNlICh2b2lkKTsKKyNkZWZpbmUgRUxGX1BMQVRfSU5JVChfciwgbG9hZF9hZGRyKQlpYTY0X2luaXRfYWRkcl9zcGFjZSgpCisKKy8qIEVMRiByZWdpc3RlciBkZWZpbml0aW9ucy4gIFRoaXMgaXMgbmVlZGVkIGZvciBjb3JlIGR1bXAgc3VwcG9ydC4gICovCisKKy8qCisgKiBlbGZfZ3JlZ3NldF90IGNvbnRhaW5zIHRoZSBhcHBsaWNhdGlvbi1sZXZlbCBzdGF0ZSBpbiB0aGUgZm9sbG93aW5nIG9yZGVyOgorICoJcjAtcjMxCisgKglOYVQgYml0cyAoZm9yIHIwLXIzMTsgYml0IE4gPT0gMSBpZmYgck4gaXMgYSBOYVQpCisgKglwcmVkaWNhdGUgcmVnaXN0ZXJzIChwMC1wNjMpCisgKgliMC1iNworICoJaXAgY2ZtIHBzcgorICoJYXIucnNjIGFyLmJzcCBhci5ic3BzdG9yZSBhci5ybmF0CisgKglhci5jY3YgYXIudW5hdCBhci5mcHNyIGFyLnBmcyBhci5sYyBhci5lYyBhci5jc2QgYXIuc3NkCisgKi8KKyNkZWZpbmUgRUxGX05HUkVHCTEyOAkvKiB3ZSByZWFsbHkgbmVlZCBqdXN0IDcyIGJ1dCBsZXQncyBsZWF2ZSBzb21lIGhlYWRyb29tLi4uICovCisjZGVmaW5lIEVMRl9ORlBSRUcJMTI4CS8qIGYwIGFuZCBmMSBjb3VsZCBiZSBvbWl0dGVkLCBidXQgc28gd2hhdC4uLiAqLworCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgZWxmX2ZweHJlZ3NldF90OworCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgZWxmX2dyZWdfdDsKK3R5cGVkZWYgZWxmX2dyZWdfdCBlbGZfZ3JlZ3NldF90W0VMRl9OR1JFR107CisKK3R5cGVkZWYgc3RydWN0IGlhNjRfZnByZWcgZWxmX2ZwcmVnX3Q7Cit0eXBlZGVmIGVsZl9mcHJlZ190IGVsZl9mcHJlZ3NldF90W0VMRl9ORlBSRUddOworCisKKworc3RydWN0IHB0X3JlZ3M7CS8qIGZvcndhcmQgZGVjbGFyYXRpb24uLi4gKi8KK2V4dGVybiB2b2lkIGlhNjRfZWxmX2NvcmVfY29weV9yZWdzIChzdHJ1Y3QgcHRfcmVncyAqc3JjLCBlbGZfZ3JlZ3NldF90IGRzdCk7CisjZGVmaW5lIEVMRl9DT1JFX0NPUFlfUkVHUyhfZGVzdCxfcmVncykJaWE2NF9lbGZfY29yZV9jb3B5X3JlZ3MoX3JlZ3MsIF9kZXN0KTsKKworLyogVGhpcyBtYWNybyB5aWVsZHMgYSBiaXRtYXNrIHRoYXQgcHJvZ3JhbXMgY2FuIHVzZSB0byBmaWd1cmUgb3V0CisgICB3aGF0IGluc3RydWN0aW9uIHNldCB0aGlzIENQVSBzdXBwb3J0cy4gICovCisjZGVmaW5lIEVMRl9IV0NBUCAJMAorCisvKiBUaGlzIG1hY3JvIHlpZWxkcyBhIHN0cmluZyB0aGF0IGxkLnNvIHdpbGwgdXNlIHRvIGxvYWQKKyAgIGltcGxlbWVudGF0aW9uIHNwZWNpZmljIGxpYnJhcmllcyBmb3Igb3B0aW1pemF0aW9uLiAgTm90IHRlcnJpYmx5CisgICByZWxldmFudCB1bnRpbCB3ZSBoYXZlIHJlYWwgaGFyZHdhcmUgdG8gcGxheSB3aXRoLi4uICovCisjZGVmaW5lIEVMRl9QTEFURk9STQlOVUxMCisKKy8qCisgKiBBcmNoaXRlY3R1cmUtbmV1dHJhbCBBVF8gdmFsdWVzIGFyZSBpbiB0aGUgcmFuZ2UgMC0xNy4gIExlYXZlIHNvbWUgcm9vbSBmb3IgbW9yZSBvZgorICogdGhlbSwgc3RhcnQgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBvbmVzIGF0IDMyLgorICovCisjZGVmaW5lIEFUX1NZU0lORk8JMzIKKyNkZWZpbmUgQVRfU1lTSU5GT19FSERSCTMzCisKKyNpZmRlZiBfX0tFUk5FTF9fCisjZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCwgaWJjczIpCXNldF9wZXJzb25hbGl0eShQRVJfTElOVVgpCisjZGVmaW5lIGVsZl9yZWFkX2ltcGxpZXNfZXhlYyhleCwgZXhlY3V0YWJsZV9zdGFjaykJCQkJCVwKKwkoKGV4ZWN1dGFibGVfc3RhY2shPUVYU1RBQ0tfRElTQUJMRV9YKSAmJiAoKGV4KS5lX2ZsYWdzICYgRUZfSUFfNjRfTElOVVhfRVhFQ1VUQUJMRV9TVEFDSykgIT0gMCkKKworc3RydWN0IHRhc2tfc3RydWN0OworCitleHRlcm4gaW50IGR1bXBfdGFza19yZWdzKHN0cnVjdCB0YXNrX3N0cnVjdCAqLCBlbGZfZ3JlZ3NldF90ICopOworZXh0ZXJuIGludCBkdW1wX3Rhc2tfZnB1IChzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgZWxmX2ZwcmVnc2V0X3QgKik7CisKKyNkZWZpbmUgRUxGX0NPUkVfQ09QWV9UQVNLX1JFR1ModHNrLCBlbGZfZ3JlZ3MpIGR1bXBfdGFza19yZWdzKHRzaywgZWxmX2dyZWdzKQorI2RlZmluZSBFTEZfQ09SRV9DT1BZX0ZQUkVHUyh0c2ssIGVsZl9mcHJlZ3MpIGR1bXBfdGFza19mcHUodHNrLCBlbGZfZnByZWdzKQorCisjZGVmaW5lIEdBVEVfRUhEUgkoKGNvbnN0IHN0cnVjdCBlbGZoZHIgKikgR0FURV9BRERSKQorCisjZGVmaW5lIEFSQ0hfRExJTkZPCQkJCQkJCQlcCitkbyB7CQkJCQkJCQkJCVwKKwlleHRlcm4gY2hhciBfX2tlcm5lbF9zeXNjYWxsX3ZpYV9lcGNbXTsJCQkJCVwKKwlORVdfQVVYX0VOVChBVF9TWVNJTkZPLCAodW5zaWduZWQgbG9uZykgX19rZXJuZWxfc3lzY2FsbF92aWFfZXBjKTsJXAorCU5FV19BVVhfRU5UKEFUX1NZU0lORk9fRUhEUiwgKHVuc2lnbmVkIGxvbmcpIEdBVEVfRUhEUik7CQlcCit9IHdoaWxlICgwKQorCisKKy8qCisgKiBUaGVzZSBtYWNyb3MgcGFyYW1ldGVyaXplIGVsZl9jb3JlX2R1bXAgaW4gZnMvYmluZm10X2VsZi5jIHRvIHdyaXRlIG91dAorICogZXh0cmEgc2VnbWVudHMgY29udGFpbmluZyB0aGUgZ2F0ZSBEU08gY29udGVudHMuICBEdW1waW5nIGl0cworICogY29udGVudHMgbWFrZXMgcG9zdC1tb3J0ZW0gZnVsbHkgaW50ZXJwcmV0YWJsZSBsYXRlciB3aXRob3V0IG1hdGNoaW5nIHVwCisgKiB0aGUgc2FtZSBrZXJuZWwgYW5kIGhhcmR3YXJlIGNvbmZpZyB0byBzZWUgd2hhdCBQQyB2YWx1ZXMgbWVhbnQuCisgKiBEdW1waW5nIGl0cyBleHRyYSBFTEYgcHJvZ3JhbSBoZWFkZXJzIGluY2x1ZGVzIGFsbCB0aGUgb3RoZXIgaW5mb3JtYXRpb24KKyAqIGEgZGVidWdnZXIgbmVlZHMgdG8gZWFzaWx5IGZpbmQgaG93IHRoZSBnYXRlIERTTyB3YXMgYmVpbmcgdXNlZC4KKyAqLworI2RlZmluZSBFTEZfQ09SRV9FWFRSQV9QSERSUwkJKEdBVEVfRUhEUi0+ZV9waG51bSkKKyNkZWZpbmUgRUxGX0NPUkVfV1JJVEVfRVhUUkFfUEhEUlMJCQkJCQlcCitkbyB7CQkJCQkJCQkJCVwKKwljb25zdCBzdHJ1Y3QgZWxmX3BoZHIgKmNvbnN0IGdhdGVfcGhkcnMgPQkJCSAgICAgIFwKKwkJKGNvbnN0IHN0cnVjdCBlbGZfcGhkciAqKSAoR0FURV9BRERSICsgR0FURV9FSERSLT5lX3Bob2ZmKTsgICBcCisJaW50IGk7CQkJCQkJCQkJXAorCUVsZjY0X09mZiBvZnMgPSAwOwkJCQkJCSAgICAgIFwKKwlmb3IgKGkgPSAwOyBpIDwgR0FURV9FSERSLT5lX3BobnVtOyArK2kpIHsJCQkJXAorCQlzdHJ1Y3QgZWxmX3BoZHIgcGhkciA9IGdhdGVfcGhkcnNbaV07CQkJICAgICAgXAorCQlpZiAocGhkci5wX3R5cGUgPT0gUFRfTE9BRCkgewkJCQkJXAorCQkJcGhkci5wX21lbXN6ID0gUEFHRV9BTElHTihwaGRyLnBfbWVtc3opOwkgICAgICBcCisJCQlwaGRyLnBfZmlsZXN6ID0gcGhkci5wX21lbXN6OwkJCSAgICAgIFwKKwkJCWlmIChvZnMgPT0gMCkgewkJCQkJICAgICAgXAorCQkJCW9mcyA9IHBoZHIucF9vZmZzZXQgPSBvZmZzZXQ7CQkgICAgICBcCisJCQlvZmZzZXQgKz0gcGhkci5wX2ZpbGVzejsJCQkJXAorCQl9CQkJCQkJCSAgICAgIFwKKwkJZWxzZQkJCQkJCQkgICAgICBcCisJCQkJcGhkci5wX29mZnNldCA9IG9mczsJCQkgICAgICBcCisJCX0JCQkJCQkJICAgICAgXAorCQllbHNlCQkJCQkJCSAgICAgIFwKKwkJCXBoZHIucF9vZmZzZXQgKz0gb2ZzOwkJCQkJXAorCQlwaGRyLnBfcGFkZHIgPSAwOyAvKiBtYXRjaCBvdGhlciBjb3JlIHBoZHJzICovCQkJXAorCQlEVU1QX1dSSVRFKCZwaGRyLCBzaXplb2YocGhkcikpOwkJCQlcCisJfQkJCQkJCQkJCVwKK30gd2hpbGUgKDApCisjZGVmaW5lIEVMRl9DT1JFX1dSSVRFX0VYVFJBX0RBVEEJCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJY29uc3Qgc3RydWN0IGVsZl9waGRyICpjb25zdCBnYXRlX3BoZHJzID0JCQkgICAgICBcCisJCShjb25zdCBzdHJ1Y3QgZWxmX3BoZHIgKikgKEdBVEVfQUREUiArIEdBVEVfRUhEUi0+ZV9waG9mZik7ICAgXAorCWludCBpOwkJCQkJCQkJXAorCWZvciAoaSA9IDA7IGkgPCBHQVRFX0VIRFItPmVfcGhudW07ICsraSkgewkJCVwKKwkJaWYgKGdhdGVfcGhkcnNbaV0ucF90eXBlID09IFBUX0xPQUQpIHsJCQkgICAgICBcCisJCQlEVU1QX1dSSVRFKCh2b2lkICopIGdhdGVfcGhkcnNbaV0ucF92YWRkciwJICAgICAgXAorCQkJCSAgIFBBR0VfQUxJR04oZ2F0ZV9waGRyc1tpXS5wX21lbXN6KSk7CSAgICAgIFwKKwkJCWJyZWFrOwkJCQkJCSAgICAgIFwKKwkJfQkJCQkJCQkgICAgICBcCisJfQkJCQkJCQkJXAorfSB3aGlsZSAoMCkKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9BU01fSUE2NF9FTEZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9lcnJuby5oIGIvaW5jbHVkZS9hc20taWE2NC9lcnJuby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjODJiNTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L2Vycm5vLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2Vycm5vLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L2ZjbnRsLmggYi9pbmNsdWRlL2FzbS1pYTY0L2ZjbnRsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE5Mzk4MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvZmNudGwuaApAQCAtMCwwICsxLDg0IEBACisjaWZuZGVmIF9BU01fSUE2NF9GQ05UTF9ICisjZGVmaW5lIF9BU01fSUE2NF9GQ05UTF9ICisvKgorICogQmFzZWQgb24gPGFzbS1pMzg2L2ZjbnRsLmg+LgorICoKKyAqIE1vZGlmaWVkIDE5OTgtMjAwMAorICoJRGF2aWQgTW9zYmVyZ2VyLVRhbmcgPGRhdmlkbUBocGwuaHAuY29tPiwgSGV3bGV0dC1QYWNrYXJkIENvLgorICovCisKKy8qCisgKiBvcGVuL2ZjbnRsIC0gT19TWU5DIGlzIG9ubHkgaW1wbGVtZW50ZWQgb24gYmxvY2tzIGRldmljZXMgYW5kIG9uCisgKiBmaWxlcyBsb2NhdGVkIG9uIGFuIGV4dDIgZmlsZSBzeXN0ZW0KKyAqLworI2RlZmluZSBPX0FDQ01PREUJICAgMDAwMworI2RlZmluZSBPX1JET05MWQkgICAgIDAwCisjZGVmaW5lIE9fV1JPTkxZCSAgICAgMDEKKyNkZWZpbmUgT19SRFdSCQkgICAgIDAyCisjZGVmaW5lIE9fQ1JFQVQJCSAgIDAxMDAJLyogbm90IGZjbnRsICovCisjZGVmaW5lIE9fRVhDTAkJICAgMDIwMAkvKiBub3QgZmNudGwgKi8KKyNkZWZpbmUgT19OT0NUVFkJICAgMDQwMAkvKiBub3QgZmNudGwgKi8KKyNkZWZpbmUgT19UUlVOQwkJICAwMTAwMAkvKiBub3QgZmNudGwgKi8KKyNkZWZpbmUgT19BUFBFTkQJICAwMjAwMAorI2RlZmluZSBPX05PTkJMT0NLCSAgMDQwMDAKKyNkZWZpbmUgT19OREVMQVkJT19OT05CTE9DSworI2RlZmluZSBPX1NZTkMJCSAwMTAwMDAKKyNkZWZpbmUgRkFTWU5DCQkgMDIwMDAwCS8qIGZjbnRsLCBmb3IgQlNEIGNvbXBhdGliaWxpdHkgKi8KKyNkZWZpbmUgT19ESVJFQ1QJIDA0MDAwMAkvKiBkaXJlY3QgZGlzayBhY2Nlc3MgaGludCAtIGN1cnJlbnRseSBpZ25vcmVkICovCisjZGVmaW5lIE9fTEFSR0VGSUxFCTAxMDAwMDAKKyNkZWZpbmUgT19ESVJFQ1RPUlkJMDIwMDAwMAkvKiBtdXN0IGJlIGEgZGlyZWN0b3J5ICovCisjZGVmaW5lIE9fTk9GT0xMT1cJMDQwMDAwMCAvKiBkb24ndCBmb2xsb3cgbGlua3MgKi8KKyNkZWZpbmUgT19OT0FUSU1FCTAxMDAwMDAwCisKKyNkZWZpbmUgRl9EVVBGRAkJMAkvKiBkdXAgKi8KKyNkZWZpbmUgRl9HRVRGRAkJMQkvKiBnZXQgY2xvc2Vfb25fZXhlYyAqLworI2RlZmluZSBGX1NFVEZECQkyCS8qIHNldC9jbGVhciBjbG9zZV9vbl9leGVjICovCisjZGVmaW5lIEZfR0VURkwJCTMJLyogZ2V0IGZpbGUtPmZfZmxhZ3MgKi8KKyNkZWZpbmUgRl9TRVRGTAkJNAkvKiBzZXQgZmlsZS0+Zl9mbGFncyAqLworI2RlZmluZSBGX0dFVExLCQk1CisjZGVmaW5lIEZfU0VUTEsJCTYKKyNkZWZpbmUgRl9TRVRMS1cJNworCisjZGVmaW5lIEZfU0VUT1dOCTgJLyogIGZvciBzb2NrZXRzLiAqLworI2RlZmluZSBGX0dFVE9XTgk5CS8qICBmb3Igc29ja2V0cy4gKi8KKyNkZWZpbmUgRl9TRVRTSUcJMTAJLyogIGZvciBzb2NrZXRzLiAqLworI2RlZmluZSBGX0dFVFNJRwkxMQkvKiAgZm9yIHNvY2tldHMuICovCisKKy8qIGZvciBGX1tHRVR8U0VUXUZMICovCisjZGVmaW5lIEZEX0NMT0VYRUMJMQkvKiBhY3R1YWxseSBhbnl0aGluZyB3aXRoIGxvdyBiaXQgc2V0IGdvZXMgKi8KKworLyogZm9yIHBvc2l4IGZjbnRsKCkgYW5kIGxvY2tmKCkgKi8KKyNkZWZpbmUgRl9SRExDSwkJMAorI2RlZmluZSBGX1dSTENLCQkxCisjZGVmaW5lIEZfVU5MQ0sJCTIKKworLyogZm9yIG9sZCBpbXBsZW1lbnRhdGlvbiBvZiBic2QgZmxvY2sgKCkgKi8KKyNkZWZpbmUgRl9FWExDSwkJNAkvKiBvciAzICovCisjZGVmaW5lIEZfU0hMQ0sJCTgJLyogb3IgNCAqLworCisvKiBmb3IgbGVhc2VzICovCisjZGVmaW5lIEZfSU5QUk9HUkVTUwkxNgorCisvKiBvcGVyYXRpb25zIGZvciBic2QgZmxvY2soKSwgYWxzbyB1c2VkIGJ5IHRoZSBrZXJuZWwgaW1wbGVtZW50YXRpb24gKi8KKyNkZWZpbmUgTE9DS19TSAkJMQkvKiBzaGFyZWQgbG9jayAqLworI2RlZmluZSBMT0NLX0VYCQkyCS8qIGV4Y2x1c2l2ZSBsb2NrICovCisjZGVmaW5lIExPQ0tfTkIJCTQJLyogb3InZCB3aXRoIG9uZSBvZiB0aGUgYWJvdmUgdG8gcHJldmVudAorCQkJCSAgIGJsb2NraW5nICovCisjZGVmaW5lIExPQ0tfVU4JCTgJLyogcmVtb3ZlIGxvY2sgKi8KKworI2RlZmluZSBMT0NLX01BTkQJMzIJLyogVGhpcyBpcyBhIG1hbmRhdG9yeSBmbG9jayAqLworI2RlZmluZSBMT0NLX1JFQUQJNjQJLyogLi4uIFdoaWNoIGFsbG93cyBjb25jdXJyZW50IHJlYWQgb3BlcmF0aW9ucyAqLworI2RlZmluZSBMT0NLX1dSSVRFCTEyOAkvKiAuLi4gV2hpY2ggYWxsb3dzIGNvbmN1cnJlbnQgd3JpdGUgb3BlcmF0aW9ucyAqLworI2RlZmluZSBMT0NLX1JXCQkxOTIJLyogLi4uIFdoaWNoIGFsbG93cyBjb25jdXJyZW50IHJlYWQgJiB3cml0ZSBvcHMgKi8KKworc3RydWN0IGZsb2NrIHsKKwlzaG9ydCBsX3R5cGU7CisJc2hvcnQgbF93aGVuY2U7CisJb2ZmX3QgbF9zdGFydDsKKwlvZmZfdCBsX2xlbjsKKwlwaWRfdCBsX3BpZDsKK307CisKKyNkZWZpbmUgRl9MSU5VWF9TUEVDSUZJQ19CQVNFCTEwMjQKKworI2VuZGlmIC8qIF9BU01fSUE2NF9GQ05UTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L2Zwc3dhLmggYi9pbmNsdWRlL2FzbS1pYTY0L2Zwc3dhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJlZGZjZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvZnBzd2EuaApAQCAtMCwwICsxLDczIEBACisjaWZuZGVmIF9BU01fSUE2NF9GUFNXQV9ICisjZGVmaW5lIF9BU01fSUE2NF9GUFNXQV9ICisKKy8qCisgKiBGbG9hdGluZy1wb2ludCBTb2Z0d2FyZSBBc3Npc3QKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgSW50ZWwgQ29ycG9yYXRpb24uCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgQXNpdCBNYWxsaWNrIDxhc2l0LmsubWFsbGlja0BpbnRlbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgR291dGhhbSBSYW8gPGdvdXRoYW0ucmFvQGludGVsLmNvbT4KKyAqLworCit0eXBlZGVmIHN0cnVjdCB7CisJLyogNCAqIDEyOCBiaXRzICovCisJdW5zaWduZWQgbG9uZyBmcF9scFs0KjJdOworfSBmcF9zdGF0ZV9sb3dfcHJlc2VydmVkX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKwkvKiAxMCAqIDEyOCBiaXRzICovCisJdW5zaWduZWQgbG9uZyBmcF9sdlsxMCAqIDJdOworfSBmcF9zdGF0ZV9sb3dfdm9sYXRpbGVfdDsKKwordHlwZWRlZglzdHJ1Y3QgeworCS8qIDE2ICogMTI4IGJpdHMgKi8KKwl1bnNpZ25lZCBsb25nIGZwX2hwWzE2ICogMl07Cit9IGZwX3N0YXRlX2hpZ2hfcHJlc2VydmVkX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKwkvKiA5NiAqIDEyOCBiaXRzICovCisJdW5zaWduZWQgbG9uZyBmcF9odls5NiAqIDJdOworfSBmcF9zdGF0ZV9oaWdoX3ZvbGF0aWxlX3Q7CisKKy8qKgorICogZmxvYXRpbmcgcG9pbnQgc3RhdGUgdG8gYmUgcGFzc2VkIHRvIHRoZSBGUCBlbXVsYXRpb24gbGlicmFyeSBieQorICogdGhlIHRyYXAvZmF1bHQgaGFuZGxlcgorICovCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgbG9uZwkJCWJpdG1hc2tfbG93NjQ7CisJdW5zaWduZWQgbG9uZwkJCWJpdG1hc2tfaGlnaDY0OworCWZwX3N0YXRlX2xvd19wcmVzZXJ2ZWRfdAkqZnBfc3RhdGVfbG93X3ByZXNlcnZlZDsKKwlmcF9zdGF0ZV9sb3dfdm9sYXRpbGVfdAkJKmZwX3N0YXRlX2xvd192b2xhdGlsZTsKKwlmcF9zdGF0ZV9oaWdoX3ByZXNlcnZlZF90CSpmcF9zdGF0ZV9oaWdoX3ByZXNlcnZlZDsKKwlmcF9zdGF0ZV9oaWdoX3ZvbGF0aWxlX3QJKmZwX3N0YXRlX2hpZ2hfdm9sYXRpbGU7Cit9IGZwX3N0YXRlX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBsb25nIHN0YXR1czsKKwl1bnNpZ25lZCBsb25nIGVycjA7CisJdW5zaWduZWQgbG9uZyBlcnIxOworCXVuc2lnbmVkIGxvbmcgZXJyMjsKK30gZnBzd2FfcmV0X3Q7CisKKy8qKgorICogZnVuY3Rpb24gaGVhZGVyIGZvciB0aGUgRmxvYXRpbmcgUG9pbnQgc29mdHdhcmUgYXNzaXN0CisgKiBsaWJyYXJ5LiBUaGlzIGZ1bmN0aW9uIGlzIGludm9rZWQgYnkgdGhlIEZsb2F0aW5nIHBvaW50IHNvZnR3YXJlCisgKiBhc3Npc3QgdHJhcC9mYXVsdCBoYW5kbGVyLgorICovCit0eXBlZGVmIGZwc3dhX3JldF90ICgqZWZpX2Zwc3dhX3QpICh1bnNpZ25lZCBsb25nIHRyYXBfdHlwZSwgdm9pZCAqYnVuZGxlLCB1bnNpZ25lZCBsb25nICppcHNyLAorCQkJCSAgICB1bnNpZ25lZCBsb25nICpmc3IsIHVuc2lnbmVkIGxvbmcgKmlzciwgdW5zaWduZWQgbG9uZyAqcHJlZHMsCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgKmlmcywgZnBfc3RhdGVfdCAqZnBfc3RhdGUpOworCisvKioKKyAqIFRoaXMgaXMgdGhlIEZQU1dBIGxpYnJhcnkgaW50ZXJmYWNlIGFzIGRlZmluZWQgYnkgRUZJLiAgV2UgbmVlZCB0byBwYXNzIGEgCisgKiBwb2ludGVyIHRvIHRoZSBpbnRlcmZhY2UgaXRzZWxmIG9uIGEgY2FsbCB0byB0aGUgYXNzaXN0IGxpYnJhcnkKKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludAkgcmV2aXNpb247CisJdW5zaWduZWQgaW50CSByZXNlcnZlZDsKKwllZmlfZnBzd2FfdAkgZnBzd2E7Cit9IGZwc3dhX2ludGVyZmFjZV90OworCitleHRlcm4gZnBzd2FfaW50ZXJmYWNlX3QgKmZwc3dhX2ludGVyZmFjZTsKKworI2VuZGlmIC8qIF9BU01fSUE2NF9GUFNXQV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L2ZwdS5oIGIvaW5jbHVkZS9hc20taWE2NC9mcHUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODU5NTU4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taWE2NC9mcHUuaApAQCAtMCwwICsxLDY2IEBACisjaWZuZGVmIF9BU01fSUE2NF9GUFVfSAorI2RlZmluZSBfQVNNX0lBNjRfRlBVX0gKKworLyoKKyAqIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSwgMjAwMiwgMjAwMyBIZXdsZXR0LVBhY2thcmQgQ28KKyAqCURhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4KKyAqLworCisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisKKy8qIGZsb2F0aW5nIHBvaW50IHN0YXR1cyByZWdpc3RlcjogKi8KKyNkZWZpbmUgRlBTUl9UUkFQX1ZECSgxIDw8IDApCS8qIGludmFsaWQgb3AgdHJhcCBkaXNhYmxlZCAqLworI2RlZmluZSBGUFNSX1RSQVBfREQJKDEgPDwgMSkJLyogZGVub3JtYWwgdHJhcCBkaXNhYmxlZCAqLworI2RlZmluZSBGUFNSX1RSQVBfWkQJKDEgPDwgMikJLyogemVyby1kaXZpZGUgdHJhcCBkaXNhYmxlZCAqLworI2RlZmluZSBGUFNSX1RSQVBfT0QJKDEgPDwgMykJLyogb3ZlcmZsb3cgdHJhcCBkaXNhYmxlZCAqLworI2RlZmluZSBGUFNSX1RSQVBfVUQJKDEgPDwgNCkJLyogdW5kZXJmbG93IHRyYXAgZGlzYWJsZWQgKi8KKyNkZWZpbmUgRlBTUl9UUkFQX0lECSgxIDw8IDUpCS8qIGluZXhhY3QgdHJhcCBkaXNhYmxlZCAqLworI2RlZmluZSBGUFNSX1MwKHgpCSgoeCkgPDwgIDYpCisjZGVmaW5lIEZQU1JfUzEoeCkJKCh4KSA8PCAxOSkKKyNkZWZpbmUgRlBTUl9TMih4KQkoX19JQTY0X1VMKHgpIDw8IDMyKQorI2RlZmluZSBGUFNSX1MzKHgpCShfX0lBNjRfVUwoeCkgPDwgNDUpCisKKy8qIGZsb2F0aW5nLXBvaW50IHN0YXR1cyBmaWVsZCBjb250cm9sczogKi8KKyNkZWZpbmUgRlBTRl9GVFoJKDEgPDwgMCkJCS8qIGZsdXNoLXRvLXplcm8gKi8KKyNkZWZpbmUgRlBTRl9XUkUJKDEgPDwgMSkJCS8qIHdpZGVzdC1yYW5nZSBleHBvbmVudCAqLworI2RlZmluZSBGUFNGX1BDKHgpCSgoKHgpICYgMHgzKSA8PCAyKQkvKiBwcmVjaXNpb24gY29udHJvbCAqLworI2RlZmluZSBGUFNGX1JDKHgpCSgoKHgpICYgMHgzKSA8PCA0KQkvKiByb3VuZGluZyBjb250cm9sICovCisjZGVmaW5lIEZQU0ZfVEQJCSgxIDw8IDYpCQkvKiB0cmFwIGRpc2FibGVkICovCisKKy8qIGZsb2F0aW5nLXBvaW50IHN0YXR1cyBmaWVsZCBmbGFnczogKi8KKyNkZWZpbmUgRlBTRl9WCQkoMSA8PCAgNykJCS8qIGludmFsaWQgb3BlcmF0aW9uIGZsYWcgKi8KKyNkZWZpbmUgRlBTRl9ECQkoMSA8PCAgOCkJCS8qIGRlbm9ybWFsL3Vubm9ybWFsIG9wZXJhbmQgZmxhZyAqLworI2RlZmluZSBGUFNGX1oJCSgxIDw8ICA5KQkJLyogemVybyBkaXZpZGUgKElFRUUpIGZsYWcgKi8KKyNkZWZpbmUgRlBTRl9PCQkoMSA8PCAxMCkJCS8qIG92ZXJmbG93IChJRUVFKSBmbGFnICovCisjZGVmaW5lIEZQU0ZfVQkJKDEgPDwgMTEpCQkvKiB1bmRlcmZsb3cgKElFRUUpIGZsYWcgKi8KKyNkZWZpbmUgRlBTRl9JCQkoMSA8PCAxMikJCS8qIGluZXhhY3QgKElFRUUpIGZsYWcpICovCisKKy8qIGZsb2F0aW5nLXBvaW50IHJvdW5kaW5nIGNvbnRyb2w6ICovCisjZGVmaW5lIEZQUkNfTkVBUkVTVAkweDAKKyNkZWZpbmUgRlBSQ19ORUdJTkYJMHgxCisjZGVmaW5lIEZQUkNfUE9TSU5GCTB4MgorI2RlZmluZSBGUFJDX1RSVU5DCTB4MworCisjZGVmaW5lIEZQU0ZfREVGQVVMVAkoRlBTRl9QQyAoMHgzKSB8IEZQU0ZfUkMgKEZQUkNfTkVBUkVTVCkpCisKKy8qIFRoaXMgZGVmYXVsdCB2YWx1ZSBpcyB0aGUgc2FtZSBhcyBIUC1VWCB1c2VzLiAgRG9uJ3QgY2hhbmdlIGl0CisgICB3aXRob3V0IGEgdmVyeSBnb29kIHJlYXNvbi4gICovCisjZGVmaW5lIEZQU1JfREVGQVVMVAkoRlBTUl9UUkFQX1ZEIHwgRlBTUl9UUkFQX0REIHwgRlBTUl9UUkFQX1pECVwKKwkJCSB8IEZQU1JfVFJBUF9PRCB8IEZQU1JfVFJBUF9VRCB8IEZQU1JfVFJBUF9JRAlcCisJCQkgfCBGUFNSX1MwIChGUFNGX0RFRkFVTFQpCQkJXAorCQkJIHwgRlBTUl9TMSAoRlBTRl9ERUZBVUxUIHwgRlBTRl9URCB8IEZQU0ZfV1JFKQlcCisJCQkgfCBGUFNSX1MyIChGUFNGX0RFRkFVTFQgfCBGUFNGX1REKQkJXAorCQkJIHwgRlBTUl9TMyAoRlBTRl9ERUZBVUxUIHwgRlBTRl9URCkpCisKKyMgaWZuZGVmIF9fQVNTRU1CTFlfXworCitzdHJ1Y3QgaWE2NF9mcHJlZyB7CisJdW5pb24geworCQl1bnNpZ25lZCBsb25nIGJpdHNbMl07CisJCWxvbmcgZG91YmxlIF9fZHVtbXk7CS8qIGZvcmNlIDE2LWJ5dGUgYWxpZ25tZW50ICovCisJfSB1OworfTsKKworIyBlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworI2VuZGlmIC8qIF9BU01fSUE2NF9GUFVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9nY2NfaW50cmluLmggYi9pbmNsdWRlL2FzbS1pYTY0L2djY19pbnRyaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzM1N2RmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taWE2NC9nY2NfaW50cmluLmgKQEAgLTAsMCArMSw1OTcgQEAKKyNpZm5kZWYgX0FTTV9JQTY0X0dDQ19JTlRSSU5fSAorI2RlZmluZSBfQVNNX0lBNjRfR0NDX0lOVFJJTl9ICisvKgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMiwyMDAzIEp1biBOYWthamltYSA8anVuLm5ha2FqaW1hQGludGVsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwMiwyMDAzIFN1cmVzaCBTaWRkaGEgPHN1cmVzaC5iLnNpZGRoYUBpbnRlbC5jb20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisKKy8qIGRlZmluZSB0aGlzIG1hY3JvIHRvIGdldCBzb21lIGFzbSBzdG10cyBpbmNsdWRlZCBpbiAnYycgZmlsZXMgKi8KKyNkZWZpbmUgQVNNX1NVUFBPUlRFRAorCisvKiBPcHRpbWl6YXRpb24gYmFycmllciAqLworLyogVGhlICJ2b2xhdGlsZSIgaXMgZHVlIHRvIGdjYyBidWdzICovCisjZGVmaW5lIGlhNjRfYmFycmllcigpCWFzbSB2b2xhdGlsZSAoIiI6OjoibWVtb3J5IikKKworI2RlZmluZSBpYTY0X3N0b3AoKQlhc20gdm9sYXRpbGUgKCI7OyI6OikKKworI2RlZmluZSBpYTY0X2ludmFsYV9ncihyZWdudW0pCWFzbSB2b2xhdGlsZSAoImludmFsYS5lIHIlMCIgOjogImkiKHJlZ251bSkpCisKKyNkZWZpbmUgaWE2NF9pbnZhbGFfZnIocmVnbnVtKQlhc20gdm9sYXRpbGUgKCJpbnZhbGEuZSBmJTAiIDo6ICJpIihyZWdudW0pKQorCitleHRlcm4gdm9pZCBpYTY0X2JhZF9wYXJhbV9mb3Jfc2V0cmVnICh2b2lkKTsKK2V4dGVybiB2b2lkIGlhNjRfYmFkX3BhcmFtX2Zvcl9nZXRyZWcgKHZvaWQpOworCityZWdpc3RlciB1bnNpZ25lZCBsb25nIGlhNjRfcjEzIGFzbSAoInIxMyIpIF9fYXR0cmlidXRlX3VzZWRfXzsKKworI2RlZmluZSBpYTY0X3NldHJlZyhyZWdudW0sIHZhbCkJCQkJCQlcCisoewkJCQkJCQkJCQlcCisJc3dpdGNoIChyZWdudW0pIHsJCQkJCQkJXAorCSAgICBjYXNlIF9JQTY0X1JFR19QU1JfTDoJCQkJCQlcCisJCSAgICBhc20gdm9sYXRpbGUgKCJtb3YgcHNyLmw9JTAiIDo6ICJyIih2YWwpIDogIm1lbW9yeSIpOwlcCisJCSAgICBicmVhazsJCQkJCQkJXAorCSAgICBjYXNlIF9JQTY0X1JFR19BUl9LUjAgLi4uIF9JQTY0X1JFR19BUl9FQzoJCQkJXAorCQkgICAgYXNtIHZvbGF0aWxlICgibW92IGFyJTA9JTEiIDo6CQkJCVwKKwkJICAgIAkJCSAgImkiIChyZWdudW0gLSBfSUE2NF9SRUdfQVJfS1IwKSwJXAorCQkJCQkgICJyIih2YWwpOiAibWVtb3J5Iik7CQkJXAorCQkgICAgYnJlYWs7CQkJCQkJCVwKKwkgICAgY2FzZSBfSUE2NF9SRUdfQ1JfRENSIC4uLiBfSUE2NF9SRUdfQ1JfTFJSMToJCQlcCisJCSAgICBhc20gdm9sYXRpbGUgKCJtb3YgY3IlMD0lMSIgOjoJCQkJXAorCQkJCSAgICAgICAgICAiaSIgKHJlZ251bSAtIF9JQTY0X1JFR19DUl9EQ1IpLAlcCisJCQkJCSAgInIiKHZhbCk6ICJtZW1vcnkiICk7CQkJXAorCQkgICAgYnJlYWs7CQkJCQkJCVwKKwkgICAgY2FzZSBfSUE2NF9SRUdfU1A6CQkJCQkJCVwKKwkJICAgIGFzbSB2b2xhdGlsZSAoIm1vdiByMTI9JTAiIDo6CQkJCVwKKwkJCSAgICAJCSAgInIiKHZhbCk6ICJtZW1vcnkiKTsJCQlcCisJCSAgICBicmVhazsJCQkJCQkJXAorCSAgICBjYXNlIF9JQTY0X1JFR19HUDoJCQkJCQkJXAorCQkgICAgYXNtIHZvbGF0aWxlICgibW92IGdwPSUwIiA6OiAiciIodmFsKSA6ICJtZW1vcnkiKTsJCVwKKwkJYnJlYWs7CQkJCQkJCQlcCisJICAgIGRlZmF1bHQ6CQkJCQkJCQlcCisJCSAgICBpYTY0X2JhZF9wYXJhbV9mb3Jfc2V0cmVnKCk7CQkJCVwKKwkJICAgIGJyZWFrOwkJCQkJCQlcCisJfQkJCQkJCQkJCVwKK30pCisKKyNkZWZpbmUgaWE2NF9nZXRyZWcocmVnbnVtKQkJCQkJCQlcCisoewkJCQkJCQkJCQlcCisJX191NjQgaWE2NF9pbnRyaV9yZXM7CQkJCQkJCVwKKwkJCQkJCQkJCQlcCisJc3dpdGNoIChyZWdudW0pIHsJCQkJCQkJXAorCWNhc2UgX0lBNjRfUkVHX0dQOgkJCQkJCQlcCisJCWFzbSB2b2xhdGlsZSAoIm1vdiAlMD1ncCIgOiAiPXIiKGlhNjRfaW50cmlfcmVzKSk7CQlcCisJCWJyZWFrOwkJCQkJCQkJXAorCWNhc2UgX0lBNjRfUkVHX0lQOgkJCQkJCQlcCisJCWFzbSB2b2xhdGlsZSAoIm1vdiAlMD1pcCIgOiAiPXIiKGlhNjRfaW50cmlfcmVzKSk7CQlcCisJCWJyZWFrOwkJCQkJCQkJXAorCWNhc2UgX0lBNjRfUkVHX1BTUjoJCQkJCQkJXAorCQlhc20gdm9sYXRpbGUgKCJtb3YgJTA9cHNyIiA6ICI9ciIoaWE2NF9pbnRyaV9yZXMpKTsJCVwKKwkJYnJlYWs7CQkJCQkJCQlcCisJY2FzZSBfSUE2NF9SRUdfVFA6CS8qIGZvciBjdXJyZW50KCkgKi8JCQkJXAorCQlpYTY0X2ludHJpX3JlcyA9IGlhNjRfcjEzOwkJCQkJXAorCQlicmVhazsJCQkJCQkJCVwKKwljYXNlIF9JQTY0X1JFR19BUl9LUjAgLi4uIF9JQTY0X1JFR19BUl9FQzoJCQkJXAorCQlhc20gdm9sYXRpbGUgKCJtb3YgJTA9YXIlMSIgOiAiPXIiIChpYTY0X2ludHJpX3JlcykJCVwKKwkJCQkgICAgICA6ICJpIihyZWdudW0gLSBfSUE2NF9SRUdfQVJfS1IwKSk7CVwKKwkJYnJlYWs7CQkJCQkJCQlcCisJY2FzZSBfSUE2NF9SRUdfQ1JfRENSIC4uLiBfSUE2NF9SRUdfQ1JfTFJSMToJCQkJXAorCQlhc20gdm9sYXRpbGUgKCJtb3YgJTA9Y3IlMSIgOiAiPXIiIChpYTY0X2ludHJpX3JlcykJCVwKKwkJCQkgICAgICA6ICJpIiAocmVnbnVtIC0gX0lBNjRfUkVHX0NSX0RDUikpOwlcCisJCWJyZWFrOwkJCQkJCQkJXAorCWNhc2UgX0lBNjRfUkVHX1NQOgkJCQkJCQlcCisJCWFzbSB2b2xhdGlsZSAoIm1vdiAlMD1zcCIgOiAiPXIiIChpYTY0X2ludHJpX3JlcykpOwkJXAorCQlicmVhazsJCQkJCQkJCVwKKwlkZWZhdWx0OgkJCQkJCQkJXAorCQlpYTY0X2JhZF9wYXJhbV9mb3JfZ2V0cmVnKCk7CQkJCQlcCisJCWJyZWFrOwkJCQkJCQkJXAorCX0JCQkJCQkJCQlcCisJaWE2NF9pbnRyaV9yZXM7CQkJCQkJCQlcCit9KQorCisjZGVmaW5lIGlhNjRfaGludF9wYXVzZSAwCisKKyNkZWZpbmUgaWE2NF9oaW50KG1vZGUpCQkJCQkJXAorKHsJCQkJCQkJCVwKKwlzd2l0Y2ggKG1vZGUpIHsJCQkJCQlcCisJY2FzZSBpYTY0X2hpbnRfcGF1c2U6CQkJCQlcCisJCWFzbSB2b2xhdGlsZSAoImhpbnQgQHBhdXNlIiA6OjogIm1lbW9yeSIpOwlcCisJCWJyZWFrOwkJCQkJCVwKKwl9CQkJCQkJCVwKK30pCisKKworLyogSW50ZWdlciB2YWx1ZXMgZm9yIG11eDEgaW5zdHJ1Y3Rpb24gKi8KKyNkZWZpbmUgaWE2NF9tdXgxX2JyY3N0IDAKKyNkZWZpbmUgaWE2NF9tdXgxX21peCAgIDgKKyNkZWZpbmUgaWE2NF9tdXgxX3NodWYgIDkKKyNkZWZpbmUgaWE2NF9tdXgxX2FsdCAgMTAKKyNkZWZpbmUgaWE2NF9tdXgxX3JldiAgMTEKKworI2RlZmluZSBpYTY0X211eDEoeCwgbW9kZSkJCQkJCQkJXAorKHsJCQkJCQkJCQkJXAorCV9fdTY0IGlhNjRfaW50cmlfcmVzOwkJCQkJCQlcCisJCQkJCQkJCQkJXAorCXN3aXRjaCAobW9kZSkgewkJCQkJCQkJXAorCWNhc2UgaWE2NF9tdXgxX2JyY3N0OgkJCQkJCQlcCisJCWFzbSAoIm11eDEgJTA9JTEsQGJyY3N0IiA6ICI9ciIgKGlhNjRfaW50cmlfcmVzKSA6ICJyIiAoeCkpOwlcCisJCWJyZWFrOwkJCQkJCQkJXAorCWNhc2UgaWE2NF9tdXgxX21peDoJCQkJCQkJXAorCQlhc20gKCJtdXgxICUwPSUxLEBtaXgiIDogIj1yIiAoaWE2NF9pbnRyaV9yZXMpIDogInIiICh4KSk7CVwKKwkJYnJlYWs7CQkJCQkJCQlcCisJY2FzZSBpYTY0X211eDFfc2h1ZjoJCQkJCQkJXAorCQlhc20gKCJtdXgxICUwPSUxLEBzaHVmIiA6ICI9ciIgKGlhNjRfaW50cmlfcmVzKSA6ICJyIiAoeCkpOwlcCisJCWJyZWFrOwkJCQkJCQkJXAorCWNhc2UgaWE2NF9tdXgxX2FsdDoJCQkJCQkJXAorCQlhc20gKCJtdXgxICUwPSUxLEBhbHQiIDogIj1yIiAoaWE2NF9pbnRyaV9yZXMpIDogInIiICh4KSk7CVwKKwkJYnJlYWs7CQkJCQkJCQlcCisJY2FzZSBpYTY0X211eDFfcmV2OgkJCQkJCQlcCisJCWFzbSAoIm11eDEgJTA9JTEsQHJldiIgOiAiPXIiIChpYTY0X2ludHJpX3JlcykgOiAiciIgKHgpKTsJXAorCQlicmVhazsJCQkJCQkJCVwKKwl9CQkJCQkJCQkJXAorCWlhNjRfaW50cmlfcmVzOwkJCQkJCQkJXAorfSkKKworI2RlZmluZSBpYTY0X3BvcGNudCh4KQkJCQkJCVwKKyh7CQkJCQkJCQlcCisJX191NjQgaWE2NF9pbnRyaV9yZXM7CQkJCQlcCisJYXNtICgicG9wY250ICUwPSUxIiA6ICI9ciIgKGlhNjRfaW50cmlfcmVzKSA6ICJyIiAoeCkpOwlcCisJCQkJCQkJCVwKKwlpYTY0X2ludHJpX3JlczsJCQkJCQlcCit9KQorCisjZGVmaW5lIGlhNjRfZ2V0Zl9leHAoeCkJCQkJCVwKKyh7CQkJCQkJCQlcCisJbG9uZyBpYTY0X2ludHJpX3JlczsJCQkJCVwKKwkJCQkJCQkJXAorCWFzbSAoImdldGYuZXhwICUwPSUxIiA6ICI9ciIoaWE2NF9pbnRyaV9yZXMpIDogImYiKHgpKTsJXAorCQkJCQkJCQlcCisJaWE2NF9pbnRyaV9yZXM7CQkJCQkJXAorfSkKKworI2RlZmluZSBpYTY0X3NocnAoYSwgYiwgY291bnQpCQkJCQkJCQlcCisoewkJCQkJCQkJCQkJXAorCV9fdTY0IGlhNjRfaW50cmlfcmVzOwkJCQkJCQkJXAorCWFzbSAoInNocnAgJTA9JTEsJTIsJTMiIDogIj1yIihpYTY0X2ludHJpX3JlcykgOiAiciIoYSksICJyIihiKSwgImkiKGNvdW50KSk7CVwKKwlpYTY0X2ludHJpX3JlczsJCQkJCQkJCQlcCit9KQorCisjZGVmaW5lIGlhNjRfbGRmcyhyZWdudW0sIHgpCQkJCQlcCisoewkJCQkJCQkJXAorCXJlZ2lzdGVyIGRvdWJsZSBfX2ZfXyBhc20gKCJmIiNyZWdudW0pOwkJCVwKKwlhc20gdm9sYXRpbGUgKCJsZGZzICUwPVslMV0iIDoiPWYiKF9fZl9fKTogInIiKHgpKTsJXAorfSkKKworI2RlZmluZSBpYTY0X2xkZmQocmVnbnVtLCB4KQkJCQkJXAorKHsJCQkJCQkJCVwKKwlyZWdpc3RlciBkb3VibGUgX19mX18gYXNtICgiZiIjcmVnbnVtKTsJCQlcCisJYXNtIHZvbGF0aWxlICgibGRmZCAlMD1bJTFdIiA6Ij1mIihfX2ZfXyk6ICJyIih4KSk7CVwKK30pCisKKyNkZWZpbmUgaWE2NF9sZGZlKHJlZ251bSwgeCkJCQkJCVwKKyh7CQkJCQkJCQlcCisJcmVnaXN0ZXIgZG91YmxlIF9fZl9fIGFzbSAoImYiI3JlZ251bSk7CQkJXAorCWFzbSB2b2xhdGlsZSAoImxkZmUgJTA9WyUxXSIgOiI9ZiIoX19mX18pOiAiciIoeCkpOwlcCit9KQorCisjZGVmaW5lIGlhNjRfbGRmOChyZWdudW0sIHgpCQkJCQlcCisoewkJCQkJCQkJXAorCXJlZ2lzdGVyIGRvdWJsZSBfX2ZfXyBhc20gKCJmIiNyZWdudW0pOwkJCVwKKwlhc20gdm9sYXRpbGUgKCJsZGY4ICUwPVslMV0iIDoiPWYiKF9fZl9fKTogInIiKHgpKTsJXAorfSkKKworI2RlZmluZSBpYTY0X2xkZl9maWxsKHJlZ251bSwgeCkJCQkJXAorKHsJCQkJCQkJCVwKKwlyZWdpc3RlciBkb3VibGUgX19mX18gYXNtICgiZiIjcmVnbnVtKTsJCQlcCisJYXNtIHZvbGF0aWxlICgibGRmLmZpbGwgJTA9WyUxXSIgOiI9ZiIoX19mX18pOiAiciIoeCkpOwlcCit9KQorCisjZGVmaW5lIGlhNjRfc3Rmcyh4LCByZWdudW0pCQkJCQkJXAorKHsJCQkJCQkJCQlcCisJcmVnaXN0ZXIgZG91YmxlIF9fZl9fIGFzbSAoImYiI3JlZ251bSk7CQkJCVwKKwlhc20gdm9sYXRpbGUgKCJzdGZzIFslMF09JTEiIDo6ICJyIih4KSwgImYiKF9fZl9fKSA6ICJtZW1vcnkiKTsJXAorfSkKKworI2RlZmluZSBpYTY0X3N0ZmQoeCwgcmVnbnVtKQkJCQkJCVwKKyh7CQkJCQkJCQkJXAorCXJlZ2lzdGVyIGRvdWJsZSBfX2ZfXyBhc20gKCJmIiNyZWdudW0pOwkJCQlcCisJYXNtIHZvbGF0aWxlICgic3RmZCBbJTBdPSUxIiA6OiAiciIoeCksICJmIihfX2ZfXykgOiAibWVtb3J5Iik7CVwKK30pCisKKyNkZWZpbmUgaWE2NF9zdGZlKHgsIHJlZ251bSkJCQkJCQlcCisoewkJCQkJCQkJCVwKKwlyZWdpc3RlciBkb3VibGUgX19mX18gYXNtICgiZiIjcmVnbnVtKTsJCQkJXAorCWFzbSB2b2xhdGlsZSAoInN0ZmUgWyUwXT0lMSIgOjogInIiKHgpLCAiZiIoX19mX18pIDogIm1lbW9yeSIpOwlcCit9KQorCisjZGVmaW5lIGlhNjRfc3RmOCh4LCByZWdudW0pCQkJCQkJXAorKHsJCQkJCQkJCQlcCisJcmVnaXN0ZXIgZG91YmxlIF9fZl9fIGFzbSAoImYiI3JlZ251bSk7CQkJCVwKKwlhc20gdm9sYXRpbGUgKCJzdGY4IFslMF09JTEiIDo6ICJyIih4KSwgImYiKF9fZl9fKSA6ICJtZW1vcnkiKTsJXAorfSkKKworI2RlZmluZSBpYTY0X3N0Zl9zcGlsbCh4LCByZWdudW0pCQkJCQkJXAorKHsJCQkJCQkJCQkJXAorCXJlZ2lzdGVyIGRvdWJsZSBfX2ZfXyBhc20gKCJmIiNyZWdudW0pOwkJCQkJXAorCWFzbSB2b2xhdGlsZSAoInN0Zi5zcGlsbCBbJTBdPSUxIiA6OiAiciIoeCksICJmIihfX2ZfXykgOiAibWVtb3J5Iik7CVwKK30pCisKKyNkZWZpbmUgaWE2NF9mZXRjaGFkZDRfYWNxKHAsIGluYykJCQkJCQlcCisoewkJCQkJCQkJCQlcCisJCQkJCQkJCQkJXAorCV9fdTY0IGlhNjRfaW50cmlfcmVzOwkJCQkJCQlcCisJYXNtIHZvbGF0aWxlICgiZmV0Y2hhZGQ0LmFjcSAlMD1bJTFdLCUyIgkJCQlcCisJCQkJOiAiPXIiKGlhNjRfaW50cmlfcmVzKSA6ICJyIihwKSwgImkiIChpbmMpCVwKKwkJCQk6ICJtZW1vcnkiKTsJCQkJCVwKKwkJCQkJCQkJCQlcCisJaWE2NF9pbnRyaV9yZXM7CQkJCQkJCQlcCit9KQorCisjZGVmaW5lIGlhNjRfZmV0Y2hhZGQ0X3JlbChwLCBpbmMpCQkJCQkJXAorKHsJCQkJCQkJCQkJXAorCV9fdTY0IGlhNjRfaW50cmlfcmVzOwkJCQkJCQlcCisJYXNtIHZvbGF0aWxlICgiZmV0Y2hhZGQ0LnJlbCAlMD1bJTFdLCUyIgkJCQlcCisJCQkJOiAiPXIiKGlhNjRfaW50cmlfcmVzKSA6ICJyIihwKSwgImkiIChpbmMpCVwKKwkJCQk6ICJtZW1vcnkiKTsJCQkJCVwKKwkJCQkJCQkJCQlcCisJaWE2NF9pbnRyaV9yZXM7CQkJCQkJCQlcCit9KQorCisjZGVmaW5lIGlhNjRfZmV0Y2hhZGQ4X2FjcShwLCBpbmMpCQkJCQkJXAorKHsJCQkJCQkJCQkJXAorCQkJCQkJCQkJCVwKKwlfX3U2NCBpYTY0X2ludHJpX3JlczsJCQkJCQkJXAorCWFzbSB2b2xhdGlsZSAoImZldGNoYWRkOC5hY3EgJTA9WyUxXSwlMiIJCQkJXAorCQkJCTogIj1yIihpYTY0X2ludHJpX3JlcykgOiAiciIocCksICJpIiAoaW5jKQlcCisJCQkJOiAibWVtb3J5Iik7CQkJCQlcCisJCQkJCQkJCQkJXAorCWlhNjRfaW50cmlfcmVzOwkJCQkJCQkJXAorfSkKKworI2RlZmluZSBpYTY0X2ZldGNoYWRkOF9yZWwocCwgaW5jKQkJCQkJCVwKKyh7CQkJCQkJCQkJCVwKKwlfX3U2NCBpYTY0X2ludHJpX3JlczsJCQkJCQkJXAorCWFzbSB2b2xhdGlsZSAoImZldGNoYWRkOC5yZWwgJTA9WyUxXSwlMiIJCQkJXAorCQkJCTogIj1yIihpYTY0X2ludHJpX3JlcykgOiAiciIocCksICJpIiAoaW5jKQlcCisJCQkJOiAibWVtb3J5Iik7CQkJCQlcCisJCQkJCQkJCQkJXAorCWlhNjRfaW50cmlfcmVzOwkJCQkJCQkJXAorfSkKKworI2RlZmluZSBpYTY0X3hjaGcxKHB0cix4KQkJCQkJCQlcCisoewkJCQkJCQkJCQlcCisJX191NjQgaWE2NF9pbnRyaV9yZXM7CQkJCQkJCVwKKwlhc20gdm9sYXRpbGUgKCJ4Y2hnMSAlMD1bJTFdLCUyIgkJCQkJXAorCQkgICAgICA6ICI9ciIgKGlhNjRfaW50cmlfcmVzKSA6ICJyIiAocHRyKSwgInIiICh4KSA6ICJtZW1vcnkiKTsJXAorCWlhNjRfaW50cmlfcmVzOwkJCQkJCQkJXAorfSkKKworI2RlZmluZSBpYTY0X3hjaGcyKHB0cix4KQkJCQkJCVwKKyh7CQkJCQkJCQkJXAorCV9fdTY0IGlhNjRfaW50cmlfcmVzOwkJCQkJCVwKKwlhc20gdm9sYXRpbGUgKCJ4Y2hnMiAlMD1bJTFdLCUyIiA6ICI9ciIgKGlhNjRfaW50cmlfcmVzKQlcCisJCSAgICAgIDogInIiIChwdHIpLCAiciIgKHgpIDogIm1lbW9yeSIpOwkJCVwKKwlpYTY0X2ludHJpX3JlczsJCQkJCQkJXAorfSkKKworI2RlZmluZSBpYTY0X3hjaGc0KHB0cix4KQkJCQkJCVwKKyh7CQkJCQkJCQkJXAorCV9fdTY0IGlhNjRfaW50cmlfcmVzOwkJCQkJCVwKKwlhc20gdm9sYXRpbGUgKCJ4Y2hnNCAlMD1bJTFdLCUyIiA6ICI9ciIgKGlhNjRfaW50cmlfcmVzKQlcCisJCSAgICAgIDogInIiIChwdHIpLCAiciIgKHgpIDogIm1lbW9yeSIpOwkJCVwKKwlpYTY0X2ludHJpX3JlczsJCQkJCQkJXAorfSkKKworI2RlZmluZSBpYTY0X3hjaGc4KHB0cix4KQkJCQkJCVwKKyh7CQkJCQkJCQkJXAorCV9fdTY0IGlhNjRfaW50cmlfcmVzOwkJCQkJCVwKKwlhc20gdm9sYXRpbGUgKCJ4Y2hnOCAlMD1bJTFdLCUyIiA6ICI9ciIgKGlhNjRfaW50cmlfcmVzKQlcCisJCSAgICAgIDogInIiIChwdHIpLCAiciIgKHgpIDogIm1lbW9yeSIpOwkJCVwKKwlpYTY0X2ludHJpX3JlczsJCQkJCQkJXAorfSkKKworI2RlZmluZSBpYTY0X2NtcHhjaGcxX2FjcShwdHIsIG5ldywgb2xkKQkJCQkJCVwKKyh7CQkJCQkJCQkJCQlcCisJX191NjQgaWE2NF9pbnRyaV9yZXM7CQkJCQkJCQlcCisJYXNtIHZvbGF0aWxlICgibW92IGFyLmNjdj0lMDs7IiA6OiAick8iKG9sZCkpOwkJCQkJXAorCWFzbSB2b2xhdGlsZSAoImNtcHhjaGcxLmFjcSAlMD1bJTFdLCUyLGFyLmNjdiI6CQkJCQlcCisJCQkgICAgICAiPXIiKGlhNjRfaW50cmlfcmVzKSA6ICJyIihwdHIpLCAiciIobmV3KSA6ICJtZW1vcnkiKTsJXAorCWlhNjRfaW50cmlfcmVzOwkJCQkJCQkJCVwKK30pCisKKyNkZWZpbmUgaWE2NF9jbXB4Y2hnMV9yZWwocHRyLCBuZXcsIG9sZCkJCQkJCQlcCisoewkJCQkJCQkJCQkJXAorCV9fdTY0IGlhNjRfaW50cmlfcmVzOwkJCQkJCQkJXAorCWFzbSB2b2xhdGlsZSAoIm1vdiBhci5jY3Y9JTA7OyIgOjogInJPIihvbGQpKTsJCQkJCVwKKwlhc20gdm9sYXRpbGUgKCJjbXB4Y2hnMS5yZWwgJTA9WyUxXSwlMixhci5jY3YiOgkJCQkJXAorCQkJICAgICAgIj1yIihpYTY0X2ludHJpX3JlcykgOiAiciIocHRyKSwgInIiKG5ldykgOiAibWVtb3J5Iik7CVwKKwlpYTY0X2ludHJpX3JlczsJCQkJCQkJCQlcCit9KQorCisjZGVmaW5lIGlhNjRfY21weGNoZzJfYWNxKHB0ciwgbmV3LCBvbGQpCQkJCQkJXAorKHsJCQkJCQkJCQkJCVwKKwlfX3U2NCBpYTY0X2ludHJpX3JlczsJCQkJCQkJCVwKKwlhc20gdm9sYXRpbGUgKCJtb3YgYXIuY2N2PSUwOzsiIDo6ICJyTyIob2xkKSk7CQkJCQlcCisJYXNtIHZvbGF0aWxlICgiY21weGNoZzIuYWNxICUwPVslMV0sJTIsYXIuY2N2IjoJCQkJCVwKKwkJCSAgICAgICI9ciIoaWE2NF9pbnRyaV9yZXMpIDogInIiKHB0ciksICJyIihuZXcpIDogIm1lbW9yeSIpOwlcCisJaWE2NF9pbnRyaV9yZXM7CQkJCQkJCQkJXAorfSkKKworI2RlZmluZSBpYTY0X2NtcHhjaGcyX3JlbChwdHIsIG5ldywgb2xkKQkJCQkJCVwKKyh7CQkJCQkJCQkJCQlcCisJX191NjQgaWE2NF9pbnRyaV9yZXM7CQkJCQkJCQlcCisJYXNtIHZvbGF0aWxlICgibW92IGFyLmNjdj0lMDs7IiA6OiAick8iKG9sZCkpOwkJCQkJXAorCQkJCQkJCQkJCQlcCisJYXNtIHZvbGF0aWxlICgiY21weGNoZzIucmVsICUwPVslMV0sJTIsYXIuY2N2IjoJCQkJCVwKKwkJCSAgICAgICI9ciIoaWE2NF9pbnRyaV9yZXMpIDogInIiKHB0ciksICJyIihuZXcpIDogIm1lbW9yeSIpOwlcCisJaWE2NF9pbnRyaV9yZXM7CQkJCQkJCQkJXAorfSkKKworI2RlZmluZSBpYTY0X2NtcHhjaGc0X2FjcShwdHIsIG5ldywgb2xkKQkJCQkJCVwKKyh7CQkJCQkJCQkJCQlcCisJX191NjQgaWE2NF9pbnRyaV9yZXM7CQkJCQkJCQlcCisJYXNtIHZvbGF0aWxlICgibW92IGFyLmNjdj0lMDs7IiA6OiAick8iKG9sZCkpOwkJCQkJXAorCWFzbSB2b2xhdGlsZSAoImNtcHhjaGc0LmFjcSAlMD1bJTFdLCUyLGFyLmNjdiI6CQkJCQlcCisJCQkgICAgICAiPXIiKGlhNjRfaW50cmlfcmVzKSA6ICJyIihwdHIpLCAiciIobmV3KSA6ICJtZW1vcnkiKTsJXAorCWlhNjRfaW50cmlfcmVzOwkJCQkJCQkJCVwKK30pCisKKyNkZWZpbmUgaWE2NF9jbXB4Y2hnNF9yZWwocHRyLCBuZXcsIG9sZCkJCQkJCQlcCisoewkJCQkJCQkJCQkJXAorCV9fdTY0IGlhNjRfaW50cmlfcmVzOwkJCQkJCQkJXAorCWFzbSB2b2xhdGlsZSAoIm1vdiBhci5jY3Y9JTA7OyIgOjogInJPIihvbGQpKTsJCQkJCVwKKwlhc20gdm9sYXRpbGUgKCJjbXB4Y2hnNC5yZWwgJTA9WyUxXSwlMixhci5jY3YiOgkJCQkJXAorCQkJICAgICAgIj1yIihpYTY0X2ludHJpX3JlcykgOiAiciIocHRyKSwgInIiKG5ldykgOiAibWVtb3J5Iik7CVwKKwlpYTY0X2ludHJpX3JlczsJCQkJCQkJCQlcCit9KQorCisjZGVmaW5lIGlhNjRfY21weGNoZzhfYWNxKHB0ciwgbmV3LCBvbGQpCQkJCQkJXAorKHsJCQkJCQkJCQkJCVwKKwlfX3U2NCBpYTY0X2ludHJpX3JlczsJCQkJCQkJCVwKKwlhc20gdm9sYXRpbGUgKCJtb3YgYXIuY2N2PSUwOzsiIDo6ICJyTyIob2xkKSk7CQkJCQlcCisJYXNtIHZvbGF0aWxlICgiY21weGNoZzguYWNxICUwPVslMV0sJTIsYXIuY2N2IjoJCQkJCVwKKwkJCSAgICAgICI9ciIoaWE2NF9pbnRyaV9yZXMpIDogInIiKHB0ciksICJyIihuZXcpIDogIm1lbW9yeSIpOwlcCisJaWE2NF9pbnRyaV9yZXM7CQkJCQkJCQkJXAorfSkKKworI2RlZmluZSBpYTY0X2NtcHhjaGc4X3JlbChwdHIsIG5ldywgb2xkKQkJCQkJCVwKKyh7CQkJCQkJCQkJCQlcCisJX191NjQgaWE2NF9pbnRyaV9yZXM7CQkJCQkJCQlcCisJYXNtIHZvbGF0aWxlICgibW92IGFyLmNjdj0lMDs7IiA6OiAick8iKG9sZCkpOwkJCQkJXAorCQkJCQkJCQkJCQlcCisJYXNtIHZvbGF0aWxlICgiY21weGNoZzgucmVsICUwPVslMV0sJTIsYXIuY2N2IjoJCQkJCVwKKwkJCSAgICAgICI9ciIoaWE2NF9pbnRyaV9yZXMpIDogInIiKHB0ciksICJyIihuZXcpIDogIm1lbW9yeSIpOwlcCisJaWE2NF9pbnRyaV9yZXM7CQkJCQkJCQkJXAorfSkKKworI2RlZmluZSBpYTY0X21mKCkJYXNtIHZvbGF0aWxlICgibWYiIDo6OiAibWVtb3J5IikKKyNkZWZpbmUgaWE2NF9tZmEoKQlhc20gdm9sYXRpbGUgKCJtZi5hIiA6OjogIm1lbW9yeSIpCisKKyNkZWZpbmUgaWE2NF9pbnZhbGEoKSBhc20gdm9sYXRpbGUgKCJpbnZhbGEiIDo6OiAibWVtb3J5IikKKworI2RlZmluZSBpYTY0X3RoYXNoKGFkZHIpCQkJCQkJCVwKKyh7CQkJCQkJCQkJCVwKKwlfX3U2NCBpYTY0X2ludHJpX3JlczsJCQkJCQkJXAorCWFzbSB2b2xhdGlsZSAoInRoYXNoICUwPSUxIiA6ICI9ciIoaWE2NF9pbnRyaV9yZXMpIDogInIiIChhZGRyKSk7CVwKKwlpYTY0X2ludHJpX3JlczsJCQkJCQkJCVwKK30pCisKKyNkZWZpbmUgaWE2NF9zcmx6X2koKQlhc20gdm9sYXRpbGUgKCI7OyBzcmx6LmkgOzsiIDo6OiAibWVtb3J5IikKKyNkZWZpbmUgaWE2NF9zcmx6X2QoKQlhc20gdm9sYXRpbGUgKCI7OyBzcmx6LmQiIDo6OiAibWVtb3J5Iik7CisKKyNpZmRlZiBIQVZFX1NFUklBTElaRV9ESVJFQ1RJVkUKKyMgZGVmaW5lIGlhNjRfZHZfc2VyaWFsaXplX2RhdGEoKQkJYXNtIHZvbGF0aWxlICgiLnNlcmlhbGl6ZS5kYXRhIik7CisjIGRlZmluZSBpYTY0X2R2X3NlcmlhbGl6ZV9pbnN0cnVjdGlvbigpCWFzbSB2b2xhdGlsZSAoIi5zZXJpYWxpemUuaW5zdHJ1Y3Rpb24iKTsKKyNlbHNlCisjIGRlZmluZSBpYTY0X2R2X3NlcmlhbGl6ZV9kYXRhKCkKKyMgZGVmaW5lIGlhNjRfZHZfc2VyaWFsaXplX2luc3RydWN0aW9uKCkKKyNlbmRpZgorCisjZGVmaW5lIGlhNjRfbm9wKHgpCWFzbSB2b2xhdGlsZSAoIm5vcCAlMCI6OiJpIih4KSk7CisKKyNkZWZpbmUgaWE2NF9pdGNpKGFkZHIpCWFzbSB2b2xhdGlsZSAoIml0Yy5pICUwOzsiIDo6ICJyIihhZGRyKSA6ICJtZW1vcnkiKQorCisjZGVmaW5lIGlhNjRfaXRjZChhZGRyKQlhc20gdm9sYXRpbGUgKCJpdGMuZCAlMDs7IiA6OiAiciIoYWRkcikgOiAibWVtb3J5IikKKworCisjZGVmaW5lIGlhNjRfaXRyaSh0cm51bSwgYWRkcikgYXNtIHZvbGF0aWxlICgiaXRyLmkgaXRyWyUwXT0lMSIJCQkJXAorCQkJCQkgICAgIDo6ICJyIih0cm51bSksICJyIihhZGRyKSA6ICJtZW1vcnkiKQorCisjZGVmaW5lIGlhNjRfaXRyZCh0cm51bSwgYWRkcikgYXNtIHZvbGF0aWxlICgiaXRyLmQgZHRyWyUwXT0lMSIJCQkJXAorCQkJCQkgICAgIDo6ICJyIih0cm51bSksICJyIihhZGRyKSA6ICJtZW1vcnkiKQorCisjZGVmaW5lIGlhNjRfdHBhKGFkZHIpCQkJCQkJCQlcCisoewkJCQkJCQkJCQlcCisJX191NjQgaWE2NF9wYTsJCQkJCQkJCVwKKwlhc20gdm9sYXRpbGUgKCJ0cGEgJTAgPSAlMSIgOiAiPXIiKGlhNjRfcGEpIDogInIiKGFkZHIpIDogIm1lbW9yeSIpOwlcCisJaWE2NF9wYTsJCQkJCQkJCVwKK30pCisKKyNkZWZpbmUgX19pYTY0X3NldF9kYnIoaW5kZXgsIHZhbCkJCQkJCQlcCisJYXNtIHZvbGF0aWxlICgibW92IGRiclslMF09JTEiIDo6ICJyIihpbmRleCksICJyIih2YWwpIDogIm1lbW9yeSIpCisKKyNkZWZpbmUgaWE2NF9zZXRfaWJyKGluZGV4LCB2YWwpCQkJCQkJXAorCWFzbSB2b2xhdGlsZSAoIm1vdiBpYnJbJTBdPSUxIiA6OiAiciIoaW5kZXgpLCAiciIodmFsKSA6ICJtZW1vcnkiKQorCisjZGVmaW5lIGlhNjRfc2V0X3BrcihpbmRleCwgdmFsKQkJCQkJCVwKKwlhc20gdm9sYXRpbGUgKCJtb3YgcGtyWyUwXT0lMSIgOjogInIiKGluZGV4KSwgInIiKHZhbCkgOiAibWVtb3J5IikKKworI2RlZmluZSBpYTY0X3NldF9wbWMoaW5kZXgsIHZhbCkJCQkJCQlcCisJYXNtIHZvbGF0aWxlICgibW92IHBtY1slMF09JTEiIDo6ICJyIihpbmRleCksICJyIih2YWwpIDogIm1lbW9yeSIpCisKKyNkZWZpbmUgaWE2NF9zZXRfcG1kKGluZGV4LCB2YWwpCQkJCQkJXAorCWFzbSB2b2xhdGlsZSAoIm1vdiBwbWRbJTBdPSUxIiA6OiAiciIoaW5kZXgpLCAiciIodmFsKSA6ICJtZW1vcnkiKQorCisjZGVmaW5lIGlhNjRfc2V0X3JyKGluZGV4LCB2YWwpCQkJCQkJCVwKKwlhc20gdm9sYXRpbGUgKCJtb3YgcnJbJTBdPSUxIiA6OiAiciIoaW5kZXgpLCAiciIodmFsKSA6ICJtZW1vcnkiKTsKKworI2RlZmluZSBpYTY0X2dldF9jcHVpZChpbmRleCkJCQkJCQkJCVwKKyh7CQkJCQkJCQkJCQlcCisJX191NjQgaWE2NF9pbnRyaV9yZXM7CQkJCQkJCQlcCisJYXNtIHZvbGF0aWxlICgibW92ICUwPWNwdWlkWyVyMV0iIDogIj1yIihpYTY0X2ludHJpX3JlcykgOiAick8iKGluZGV4KSk7CVwKKwlpYTY0X2ludHJpX3JlczsJCQkJCQkJCQlcCit9KQorCisjZGVmaW5lIF9faWE2NF9nZXRfZGJyKGluZGV4KQkJCQkJCQlcCisoewkJCQkJCQkJCQlcCisJX191NjQgaWE2NF9pbnRyaV9yZXM7CQkJCQkJCVwKKwlhc20gdm9sYXRpbGUgKCJtb3YgJTA9ZGJyWyUxXSIgOiAiPXIiKGlhNjRfaW50cmlfcmVzKSA6ICJyIihpbmRleCkpOwlcCisJaWE2NF9pbnRyaV9yZXM7CQkJCQkJCQlcCit9KQorCisjZGVmaW5lIGlhNjRfZ2V0X2licihpbmRleCkJCQkJCQkJXAorKHsJCQkJCQkJCQkJXAorCV9fdTY0IGlhNjRfaW50cmlfcmVzOwkJCQkJCQlcCisJYXNtIHZvbGF0aWxlICgibW92ICUwPWliclslMV0iIDogIj1yIihpYTY0X2ludHJpX3JlcykgOiAiciIoaW5kZXgpKTsJXAorCWlhNjRfaW50cmlfcmVzOwkJCQkJCQkJXAorfSkKKworI2RlZmluZSBpYTY0X2dldF9wa3IoaW5kZXgpCQkJCQkJCVwKKyh7CQkJCQkJCQkJCVwKKwlfX3U2NCBpYTY0X2ludHJpX3JlczsJCQkJCQkJXAorCWFzbSB2b2xhdGlsZSAoIm1vdiAlMD1wa3JbJTFdIiA6ICI9ciIoaWE2NF9pbnRyaV9yZXMpIDogInIiKGluZGV4KSk7CVwKKwlpYTY0X2ludHJpX3JlczsJCQkJCQkJCVwKK30pCisKKyNkZWZpbmUgaWE2NF9nZXRfcG1jKGluZGV4KQkJCQkJCQlcCisoewkJCQkJCQkJCQlcCisJX191NjQgaWE2NF9pbnRyaV9yZXM7CQkJCQkJCVwKKwlhc20gdm9sYXRpbGUgKCJtb3YgJTA9cG1jWyUxXSIgOiAiPXIiKGlhNjRfaW50cmlfcmVzKSA6ICJyIihpbmRleCkpOwlcCisJaWE2NF9pbnRyaV9yZXM7CQkJCQkJCQlcCit9KQorCisKKyNkZWZpbmUgaWE2NF9nZXRfcG1kKGluZGV4KQkJCQkJCQlcCisoewkJCQkJCQkJCQlcCisJX191NjQgaWE2NF9pbnRyaV9yZXM7CQkJCQkJCVwKKwlhc20gdm9sYXRpbGUgKCJtb3YgJTA9cG1kWyUxXSIgOiAiPXIiKGlhNjRfaW50cmlfcmVzKSA6ICJyIihpbmRleCkpOwlcCisJaWE2NF9pbnRyaV9yZXM7CQkJCQkJCQlcCit9KQorCisjZGVmaW5lIGlhNjRfZ2V0X3JyKGluZGV4KQkJCQkJCQlcCisoewkJCQkJCQkJCQlcCisJX191NjQgaWE2NF9pbnRyaV9yZXM7CQkJCQkJCVwKKwlhc20gdm9sYXRpbGUgKCJtb3YgJTA9cnJbJTFdIiA6ICI9ciIoaWE2NF9pbnRyaV9yZXMpIDogInIiIChpbmRleCkpOwlcCisJaWE2NF9pbnRyaV9yZXM7CQkJCQkJCQlcCit9KQorCisjZGVmaW5lIGlhNjRfZmMoYWRkcikJYXNtIHZvbGF0aWxlICgiZmMgJTAiIDo6ICJyIihhZGRyKSA6ICJtZW1vcnkiKQorCisKKyNkZWZpbmUgaWE2NF9zeW5jX2koKQlhc20gdm9sYXRpbGUgKCI7OyBzeW5jLmkiIDo6OiAibWVtb3J5IikKKworI2RlZmluZSBpYTY0X3NzbShtYXNrKQlhc20gdm9sYXRpbGUgKCJzc20gJTAiOjogImkiKChtYXNrKSkgOiAibWVtb3J5IikKKyNkZWZpbmUgaWE2NF9yc20obWFzaykJYXNtIHZvbGF0aWxlICgicnNtICUwIjo6ICJpIigobWFzaykpIDogIm1lbW9yeSIpCisjZGVmaW5lIGlhNjRfc3VtKG1hc2spCWFzbSB2b2xhdGlsZSAoInN1bSAlMCI6OiAiaSIoKG1hc2spKSA6ICJtZW1vcnkiKQorI2RlZmluZSBpYTY0X3J1bShtYXNrKQlhc20gdm9sYXRpbGUgKCJydW0gJTAiOjogImkiKChtYXNrKSkgOiAibWVtb3J5IikKKworI2RlZmluZSBpYTY0X3B0Y2UoYWRkcikJYXNtIHZvbGF0aWxlICgicHRjLmUgJTAiIDo6ICJyIihhZGRyKSkKKworI2RlZmluZSBpYTY0X3B0Y2dhKGFkZHIsIHNpemUpCQkJCQkJCVwKK2RvIHsJCQkJCQkJCQkJXAorCWFzbSB2b2xhdGlsZSAoInB0Yy5nYSAlMCwlMSIgOjogInIiKGFkZHIpLCAiciIoc2l6ZSkgOiAibWVtb3J5Iik7CVwKKwlpYTY0X2R2X3NlcmlhbGl6ZV9kYXRhKCk7CQkJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBpYTY0X3B0Y2woYWRkciwgc2l6ZSkJCQkJCQkJXAorZG8gewkJCQkJCQkJCQlcCisJYXNtIHZvbGF0aWxlICgicHRjLmwgJTAsJTEiIDo6ICJyIihhZGRyKSwgInIiKHNpemUpIDogIm1lbW9yeSIpOwlcCisJaWE2NF9kdl9zZXJpYWxpemVfZGF0YSgpOwkJCQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgaWE2NF9wdHJpKGFkZHIsIHNpemUpCQkJCQkJXAorCWFzbSB2b2xhdGlsZSAoInB0ci5pICUwLCUxIiA6OiAiciIoYWRkciksICJyIihzaXplKSA6ICJtZW1vcnkiKQorCisjZGVmaW5lIGlhNjRfcHRyZChhZGRyLCBzaXplKQkJCQkJCVwKKwlhc20gdm9sYXRpbGUgKCJwdHIuZCAlMCwlMSIgOjogInIiKGFkZHIpLCAiciIoc2l6ZSkgOiAibWVtb3J5IikKKworLyogVmFsdWVzIGZvciBsZmhpbnQgaW4gaWE2NF9sZmV0Y2ggYW5kIGlhNjRfbGZldGNoX2ZhdWx0ICovCisKKyNkZWZpbmUgaWE2NF9sZmhpbnRfbm9uZSAgIDAKKyNkZWZpbmUgaWE2NF9sZmhpbnRfbnQxICAgIDEKKyNkZWZpbmUgaWE2NF9sZmhpbnRfbnQyICAgIDIKKyNkZWZpbmUgaWE2NF9sZmhpbnRfbnRhICAgIDMKKworI2RlZmluZSBpYTY0X2xmZXRjaChsZmhpbnQsIHkpCQkJCQlcCisoewkJCQkJCQkJXAorICAgICAgICBzd2l0Y2ggKGxmaGludCkgewkJCQkJXAorICAgICAgICBjYXNlIGlhNjRfbGZoaW50X25vbmU6CQkJCQlcCisgICAgICAgICAgICAgICAgYXNtIHZvbGF0aWxlICgibGZldGNoIFslMF0iIDogOiAiciIoeSkpOwlcCisgICAgICAgICAgICAgICAgYnJlYWs7CQkJCQkJXAorICAgICAgICBjYXNlIGlhNjRfbGZoaW50X250MToJCQkJCVwKKyAgICAgICAgICAgICAgICBhc20gdm9sYXRpbGUgKCJsZmV0Y2gubnQxIFslMF0iIDogOiAiciIoeSkpOwlcCisgICAgICAgICAgICAgICAgYnJlYWs7CQkJCQkJXAorICAgICAgICBjYXNlIGlhNjRfbGZoaW50X250MjoJCQkJCVwKKyAgICAgICAgICAgICAgICBhc20gdm9sYXRpbGUgKCJsZmV0Y2gubnQyIFslMF0iIDogOiAiciIoeSkpOwlcCisgICAgICAgICAgICAgICAgYnJlYWs7CQkJCQkJXAorICAgICAgICBjYXNlIGlhNjRfbGZoaW50X250YToJCQkJCVwKKyAgICAgICAgICAgICAgICBhc20gdm9sYXRpbGUgKCJsZmV0Y2gubnRhIFslMF0iIDogOiAiciIoeSkpOwlcCisgICAgICAgICAgICAgICAgYnJlYWs7CQkJCQkJXAorICAgICAgICB9CQkJCQkJCVwKK30pCisKKyNkZWZpbmUgaWE2NF9sZmV0Y2hfZXhjbChsZmhpbnQsIHkpCQkJCQlcCisoewkJCQkJCQkJCVwKKyAgICAgICAgc3dpdGNoIChsZmhpbnQpIHsJCQkJCQlcCisgICAgICAgIGNhc2UgaWE2NF9sZmhpbnRfbm9uZToJCQkJCQlcCisgICAgICAgICAgICAgICAgYXNtIHZvbGF0aWxlICgibGZldGNoLmV4Y2wgWyUwXSIgOjogInIiKHkpKTsJCVwKKyAgICAgICAgICAgICAgICBicmVhazsJCQkJCQkJXAorICAgICAgICBjYXNlIGlhNjRfbGZoaW50X250MToJCQkJCQlcCisgICAgICAgICAgICAgICAgYXNtIHZvbGF0aWxlICgibGZldGNoLmV4Y2wubnQxIFslMF0iIDo6ICJyIih5KSk7CVwKKyAgICAgICAgICAgICAgICBicmVhazsJCQkJCQkJXAorICAgICAgICBjYXNlIGlhNjRfbGZoaW50X250MjoJCQkJCQlcCisgICAgICAgICAgICAgICAgYXNtIHZvbGF0aWxlICgibGZldGNoLmV4Y2wubnQyIFslMF0iIDo6ICJyIih5KSk7CVwKKyAgICAgICAgICAgICAgICBicmVhazsJCQkJCQkJXAorICAgICAgICBjYXNlIGlhNjRfbGZoaW50X250YToJCQkJCQlcCisgICAgICAgICAgICAgICAgYXNtIHZvbGF0aWxlICgibGZldGNoLmV4Y2wubnRhIFslMF0iIDo6ICJyIih5KSk7CVwKKyAgICAgICAgICAgICAgICBicmVhazsJCQkJCQkJXAorICAgICAgICB9CQkJCQkJCQlcCit9KQorCisjZGVmaW5lIGlhNjRfbGZldGNoX2ZhdWx0KGxmaGludCwgeSkJCQkJCVwKKyh7CQkJCQkJCQkJXAorICAgICAgICBzd2l0Y2ggKGxmaGludCkgewkJCQkJCVwKKyAgICAgICAgY2FzZSBpYTY0X2xmaGludF9ub25lOgkJCQkJCVwKKyAgICAgICAgICAgICAgICBhc20gdm9sYXRpbGUgKCJsZmV0Y2guZmF1bHQgWyUwXSIgOiA6ICJyIih5KSk7CQlcCisgICAgICAgICAgICAgICAgYnJlYWs7CQkJCQkJCVwKKyAgICAgICAgY2FzZSBpYTY0X2xmaGludF9udDE6CQkJCQkJXAorICAgICAgICAgICAgICAgIGFzbSB2b2xhdGlsZSAoImxmZXRjaC5mYXVsdC5udDEgWyUwXSIgOiA6ICJyIih5KSk7CVwKKyAgICAgICAgICAgICAgICBicmVhazsJCQkJCQkJXAorICAgICAgICBjYXNlIGlhNjRfbGZoaW50X250MjoJCQkJCQlcCisgICAgICAgICAgICAgICAgYXNtIHZvbGF0aWxlICgibGZldGNoLmZhdWx0Lm50MiBbJTBdIiA6IDogInIiKHkpKTsJXAorICAgICAgICAgICAgICAgIGJyZWFrOwkJCQkJCQlcCisgICAgICAgIGNhc2UgaWE2NF9sZmhpbnRfbnRhOgkJCQkJCVwKKyAgICAgICAgICAgICAgICBhc20gdm9sYXRpbGUgKCJsZmV0Y2guZmF1bHQubnRhIFslMF0iIDogOiAiciIoeSkpOwlcCisgICAgICAgICAgICAgICAgYnJlYWs7CQkJCQkJCVwKKyAgICAgICAgfQkJCQkJCQkJXAorfSkKKworI2RlZmluZSBpYTY0X2xmZXRjaF9mYXVsdF9leGNsKGxmaGludCwgeSkJCQkJXAorKHsJCQkJCQkJCQlcCisgICAgICAgIHN3aXRjaCAobGZoaW50KSB7CQkJCQkJXAorICAgICAgICBjYXNlIGlhNjRfbGZoaW50X25vbmU6CQkJCQkJXAorICAgICAgICAgICAgICAgIGFzbSB2b2xhdGlsZSAoImxmZXRjaC5mYXVsdC5leGNsIFslMF0iIDo6ICJyIih5KSk7CVwKKyAgICAgICAgICAgICAgICBicmVhazsJCQkJCQkJXAorICAgICAgICBjYXNlIGlhNjRfbGZoaW50X250MToJCQkJCQlcCisgICAgICAgICAgICAgICAgYXNtIHZvbGF0aWxlICgibGZldGNoLmZhdWx0LmV4Y2wubnQxIFslMF0iIDo6ICJyIih5KSk7CVwKKyAgICAgICAgICAgICAgICBicmVhazsJCQkJCQkJXAorICAgICAgICBjYXNlIGlhNjRfbGZoaW50X250MjoJCQkJCQlcCisgICAgICAgICAgICAgICAgYXNtIHZvbGF0aWxlICgibGZldGNoLmZhdWx0LmV4Y2wubnQyIFslMF0iIDo6ICJyIih5KSk7CVwKKyAgICAgICAgICAgICAgICBicmVhazsJCQkJCQkJXAorICAgICAgICBjYXNlIGlhNjRfbGZoaW50X250YToJCQkJCQlcCisgICAgICAgICAgICAgICAgYXNtIHZvbGF0aWxlICgibGZldGNoLmZhdWx0LmV4Y2wubnRhIFslMF0iIDo6ICJyIih5KSk7CVwKKyAgICAgICAgICAgICAgICBicmVhazsJCQkJCQkJXAorICAgICAgICB9CQkJCQkJCQlcCit9KQorCisjZGVmaW5lIGlhNjRfaW50cmluX2xvY2FsX2lycV9yZXN0b3JlKHgpCQkJXAorZG8gewkJCQkJCQkJXAorCWFzbSB2b2xhdGlsZSAoIjs7ICAgY21wLm5lIHA2LHA3PSUwLHIwOzsiCQlcCisJCSAgICAgICIocDYpIHNzbSBwc3IuaTsiCQkJCVwKKwkJICAgICAgIihwNykgcnNtIHBzci5pOzsiCQkJXAorCQkgICAgICAiKHA2KSBzcmx6LmQiCQkJCVwKKwkJICAgICAgOjogInIiKCh4KSkgOiAicDYiLCAicDciLCAibWVtb3J5Iik7CVwKK30gd2hpbGUgKDApCisKKyNlbmRpZiAvKiBfQVNNX0lBNjRfR0NDX0lOVFJJTl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L2hhcmRpcnEuaCBiL2luY2x1ZGUvYXNtLWlhNjQvaGFyZGlycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzZWY4ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L2hhcmRpcnEuaApAQCAtMCwwICsxLDM4IEBACisjaWZuZGVmIF9BU01fSUE2NF9IQVJESVJRX0gKKyNkZWZpbmUgX0FTTV9JQTY0X0hBUkRJUlFfSAorCisvKgorICogTW9kaWZpZWQgMTk5OC0yMDAyLCAyMDA0IEhld2xldHQtUGFja2FyZCBDbworICoJRGF2aWQgTW9zYmVyZ2VyLVRhbmcgPGRhdmlkbUBocGwuaHAuY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKworI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKworLyoKKyAqIE5vIGlycV9jcHVzdGF0X3QgZm9yIElBLTY0LiAgVGhlIGRhdGEgaXMgaGVsZCBpbiB0aGUgcGVyLUNQVSBkYXRhIHN0cnVjdHVyZS4KKyAqLworCisjZGVmaW5lIF9fQVJDSF9JUlFfU1RBVAkxCisKKyNkZWZpbmUgbG9jYWxfc29mdGlycV9wZW5kaW5nKCkJCShsb2NhbF9jcHVfZGF0YS0+c29mdGlycV9wZW5kaW5nKQorCisjZGVmaW5lIEhBUkRJUlFfQklUUwkxNAorCisvKgorICogVGhlIGhhcmRpcnEgbWFzayBoYXMgdG8gYmUgbGFyZ2UgZW5vdWdoIHRvIGhhdmUgc3BhY2UgZm9yIHBvdGVudGlhbGx5IGFsbCBJUlEgc291cmNlcworICogaW4gdGhlIHN5c3RlbSBuZXN0aW5nIG9uIGEgc2luZ2xlIENQVToKKyAqLworI2lmICgxIDw8IEhBUkRJUlFfQklUUykgPCBOUl9JUlFTCisjIGVycm9yIEhBUkRJUlFfQklUUyBpcyB0b28gbG93IQorI2VuZGlmCisKK2V4dGVybiB2b2lkIF9faW9tZW0gKmlwaV9iYXNlX2FkZHI7CisKK3ZvaWQgYWNrX2JhZF9pcnEodW5zaWduZWQgaW50IGlycSk7CisKKyNlbmRpZiAvKiBfQVNNX0lBNjRfSEFSRElSUV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L2hkcmVnLmggYi9pbmNsdWRlL2FzbS1pYTY0L2hkcmVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNiNTE2MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvaGRyZWcuaApAQCAtMCwwICsxLDE0IEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWlhNjQvaGRyZWcuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTQtMTk5NiAgTGludXMgVG9ydmFsZHMgJiBhdXRob3JzCisgKi8KKworI3dhcm5pbmcgdGhpcyBmaWxlIGlzIG9ic29sZXRlLCBwbGVhc2UgZG8gbm90IHVzZSBpdAorCisjaWZuZGVmIF9fQVNNX0lBNjRfSERSRUdfSAorI2RlZmluZSBfX0FTTV9JQTY0X0hEUkVHX0gKKwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpZGVfaW9yZWdfdDsKKworI2VuZGlmIC8qIF9fQVNNX0lBNjRfSERSRUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9od19pcnEuaCBiL2luY2x1ZGUvYXNtLWlhNjQvaHdfaXJxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQxYWI4YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvaHdfaXJxLmgKQEAgLTAsMCArMSwxNDQgQEAKKyNpZm5kZWYgX0FTTV9JQTY0X0hXX0lSUV9ICisjZGVmaW5lIF9BU01fSUE2NF9IV19JUlFfSAorCisvKgorICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMDMgSGV3bGV0dC1QYWNrYXJkIENvCisgKglEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9maWxlLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vc21wLmg+CisKK3R5cGVkZWYgdTggaWE2NF92ZWN0b3I7CisKKy8qCisgKiAwIHNwZWNpYWwKKyAqCisgKiAxLDMtMTQgYXJlIHJlc2VydmVkIGZyb20gZmlybXdhcmUKKyAqCisgKiAxNi0yNTUgKHZlY3RvcmVkIGV4dGVybmFsIGludGVycnVwdHMpIGFyZSBhdmFpbGFibGUKKyAqCisgKiAxNSBzcHVyaW91cyBpbnRlcnJ1cHQgKHNlZSBJVlIpCisgKgorICogMTYgbG93ZXN0IHByaW9yaXR5LCAyNTUgaGlnaGVzdCBwcmlvcml0eQorICoKKyAqIDE1IGNsYXNzZXMgb2YgMTYgaW50ZXJydXB0cyBlYWNoLgorICovCisjZGVmaW5lIElBNjRfTUlOX1ZFQ1RPUkVEX0lSUQkJIDE2CisjZGVmaW5lIElBNjRfTUFYX1ZFQ1RPUkVEX0lSUQkJMjU1CisjZGVmaW5lIElBNjRfTlVNX1ZFQ1RPUlMJCTI1NgorCisjZGVmaW5lIEFVVE9fQVNTSUdOCQkJLTEKKworI2RlZmluZSBJQTY0X1NQVVJJT1VTX0lOVF9WRUNUT1IJMHgwZgorCisvKgorICogVmVjdG9ycyAweDEwLTB4MWYgYXJlIHVzZWQgZm9yIGxvdyBwcmlvcml0eSBpbnRlcnJ1cHRzLCBlLmcuIENNQ0kuCisgKi8KKyNkZWZpbmUgSUE2NF9DUEVQX1ZFQ1RPUgkJMHgxYwkvKiBjb3JyZWN0ZWQgcGxhdGZvcm0gZXJyb3IgcG9sbGluZyB2ZWN0b3IgKi8KKyNkZWZpbmUgSUE2NF9DTUNQX1ZFQ1RPUgkJMHgxZAkvKiBjb3JyZWN0ZWQgbWFjaGluZS1jaGVjayBwb2xsaW5nIHZlY3RvciAqLworI2RlZmluZSBJQTY0X0NQRV9WRUNUT1IJCQkweDFlCS8qIGNvcnJlY3RlZCBwbGF0Zm9ybSBlcnJvciBpbnRlcnJ1cHQgdmVjdG9yICovCisjZGVmaW5lIElBNjRfQ01DX1ZFQ1RPUgkJCTB4MWYJLyogY29ycmVjdGVkIG1hY2hpbmUtY2hlY2sgaW50ZXJydXB0IHZlY3RvciAqLworLyoKKyAqIFZlY3RvcnMgMHgyMC0weDJmIGFyZSByZXNlcnZlZCBmb3IgbGVnYWN5IElTQSBJUlFzLgorICovCisjZGVmaW5lIElBNjRfRklSU1RfREVWSUNFX1ZFQ1RPUgkweDMwCisjZGVmaW5lIElBNjRfTEFTVF9ERVZJQ0VfVkVDVE9SCQkweGU3CisjZGVmaW5lIElBNjRfTlVNX0RFVklDRV9WRUNUT1JTCQkoSUE2NF9MQVNUX0RFVklDRV9WRUNUT1IgLSBJQTY0X0ZJUlNUX0RFVklDRV9WRUNUT1IgKyAxKQorCisjZGVmaW5lIElBNjRfTUNBX1JFTkRFWl9WRUNUT1IJCTB4ZTgJLyogTUNBIHJlbmRleiBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSUE2NF9QRVJGTU9OX1ZFQ1RPUgkJMHhlZQkvKiBwZXJmb3JtYW5jIG1vbml0b3IgaW50ZXJydXB0IHZlY3RvciAqLworI2RlZmluZSBJQTY0X1RJTUVSX1ZFQ1RPUgkJMHhlZgkvKiB1c2UgaGlnaGVzdC1wcmlvIGdyb3VwIDE1IGludGVycnVwdCBmb3IgdGltZXIgKi8KKyNkZWZpbmUJSUE2NF9NQ0FfV0FLRVVQX1ZFQ1RPUgkJMHhmMAkvKiBNQ0Egd2FrZXVwIChtdXN0IGJlID5NQ0FfUkVOREVaX1ZFQ1RPUikgKi8KKyNkZWZpbmUgSUE2NF9JUElfUkVTQ0hFRFVMRQkJMHhmZAkvKiBTTVAgcmVzY2hlZHVsZSAqLworI2RlZmluZSBJQTY0X0lQSV9WRUNUT1IJCQkweGZlCS8qIGludGVyLXByb2Nlc3NvciBpbnRlcnJ1cHQgdmVjdG9yICovCisKKy8qIFVzZWQgZm9yIGVuY29kaW5nIHJlZGlyZWN0ZWQgaXJxcyAqLworCisjZGVmaW5lIElBNjRfSVJRX1JFRElSRUNURUQJCSgxIDw8IDMxKQorCisvKiBJQTY0IGludGVyLWNwdSBpbnRlcnJ1cHQgcmVsYXRlZCBkZWZpbml0aW9ucyAqLworCisjZGVmaW5lIElBNjRfSVBJX0RFRkFVTFRfQkFTRV9BRERSCTB4ZmVlMDAwMDAKKworLyogRGVsaXZlcnkgbW9kZXMgZm9yIGludGVyLWNwdSBpbnRlcnJ1cHRzICovCitlbnVtIHsKKyAgICAgICAgSUE2NF9JUElfRE1fSU5UID0gICAgICAgMHgwLCAgICAvKiBwZW5kIGFuIGV4dGVybmFsIGludGVycnVwdCAqLworICAgICAgICBJQTY0X0lQSV9ETV9QTUkgPSAgICAgICAweDIsICAgIC8qIHBlbmQgYSBQTUkgKi8KKyAgICAgICAgSUE2NF9JUElfRE1fTk1JID0gICAgICAgMHg0LCAgICAvKiBwZW5kIGFuIE5NSSAodmVjdG9yIDIpICovCisgICAgICAgIElBNjRfSVBJX0RNX0lOSVQgPSAgICAgIDB4NSwgICAgLyogcGVuZCBhbiBJTklUIGludGVycnVwdCAqLworICAgICAgICBJQTY0X0lQSV9ETV9FWFRJTlQgPSAgICAweDcsICAgIC8qIHBlbmQgYW4gODI1OS1jb21wYXRpYmxlIGludGVycnVwdC4gKi8KK307CisKK2V4dGVybiBfX3U4IGlzYV9pcnFfdG9fdmVjdG9yX21hcFsxNl07CisjZGVmaW5lIGlzYV9pcnFfdG9fdmVjdG9yKHgpCWlzYV9pcnFfdG9fdmVjdG9yX21hcFsoeCldCisKK2V4dGVybiBzdHJ1Y3QgaHdfaW50ZXJydXB0X3R5cGUgaXJxX3R5cGVfaWE2NF9sc2FwaWM7CS8qIENQVS1pbnRlcm5hbCBpbnRlcnJ1cHQgY29udHJvbGxlciAqLworCitleHRlcm4gaW50IGFzc2lnbl9pcnFfdmVjdG9yIChpbnQgaXJxKTsJLyogYWxsb2NhdGUgYSBmcmVlIHZlY3RvciAqLworZXh0ZXJuIHZvaWQgZnJlZV9pcnFfdmVjdG9yIChpbnQgdmVjdG9yKTsKK2V4dGVybiB2b2lkIGlhNjRfc2VuZF9pcGkgKGludCBjcHUsIGludCB2ZWN0b3IsIGludCBkZWxpdmVyeV9tb2RlLCBpbnQgcmVkaXJlY3QpOworZXh0ZXJuIHZvaWQgcmVnaXN0ZXJfcGVyY3B1X2lycSAoaWE2NF92ZWN0b3IgdmVjLCBzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb24pOworCitzdGF0aWMgaW5saW5lIHZvaWQKK2h3X3Jlc2VuZF9pcnEgKHN0cnVjdCBod19pbnRlcnJ1cHRfdHlwZSAqaCwgdW5zaWduZWQgaW50IHZlY3RvcikKK3sKKwlwbGF0Zm9ybV9zZW5kX2lwaShzbXBfcHJvY2Vzc29yX2lkKCksIHZlY3RvciwgSUE2NF9JUElfRE1fSU5ULCAwKTsKK30KKworLyoKKyAqIERlZmF1bHQgaW1wbGVtZW50YXRpb25zIGZvciB0aGUgaXJxLWRlc2NyaXB0b3IgQVBJOgorICovCisKK2V4dGVybiBpcnFfZGVzY190IGlycV9kZXNjW05SX0lSUVNdOworCisjaWZuZGVmIENPTkZJR19JQTY0X0dFTkVSSUMKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CitfX2lhNjRfbG9jYWxfdmVjdG9yX3RvX2lycSAoaWE2NF92ZWN0b3IgdmVjKQoreworCXJldHVybiAodW5zaWduZWQgaW50KSB2ZWM7Cit9CisjZW5kaWYKKworLyoKKyAqIE5leHQgZm9sbG93cyB0aGUgaXJxIGRlc2NyaXB0b3IgaW50ZXJmYWNlLiAgT24gSUEtNjQsIGVhY2ggQ1BVIHN1cHBvcnRzIDI1NiBpbnRlcnJ1cHQKKyAqIHZlY3RvcnMuICBPbiBzbWFsbGVyIHN5c3RlbXMsIHRoZXJlIGlzIGEgb25lLXRvLW9uZSBjb3JyZXNwb25kZW5jZSBiZXR3ZWVuIGludGVycnVwdAorICogdmVjdG9ycyBhbmQgdGhlIExpbnV4IGlycSBudW1iZXJzLiAgSG93ZXZlciwgbGFyZ2VyIHN5c3RlbXMgbWF5IGhhdmUgbXVsdGlwbGUgaW50ZXJydXB0CisgKiBkb21haW5zIG1lYW5pbmcgdGhhdCB0aGUgdHJhbnNsYXRpb24gZnJvbSB2ZWN0b3IgbnVtYmVyIHRvIGlycSBudW1iZXIgZGVwZW5kcyBvbiB0aGUKKyAqIGludGVycnVwdCBkb21haW4gdGhhdCBhIENQVSBiZWxvbmdzIHRvLiAgVGhpcyBBUEkgYWJzdHJhY3RzIHN1Y2ggcGxhdGZvcm0tZGVwZW5kZW50CisgKiBkaWZmZXJlbmNlcyBhbmQgcHJvdmlkZXMgYSB1bmlmb3JtIG1lYW5zIHRvIHRyYW5zbGF0ZSBiZXR3ZWVuIHZlY3RvciBhbmQgaXJxIG51bWJlcnMKKyAqIGFuZCB0byBvYnRhaW4gdGhlIGlycSBkZXNjcmlwdG9yIGZvciBhIGdpdmVuIGlycSBudW1iZXIuCisgKi8KKworLyogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgaXJxIGRlc2NyaXB0b3IgZm9yIElSUS4gICovCitzdGF0aWMgaW5saW5lIGlycV9kZXNjX3QgKgoraXJxX2Rlc2NwIChpbnQgaXJxKQoreworCXJldHVybiBpcnFfZGVzYyArIGlycTsKK30KKworLyogRXh0cmFjdCB0aGUgSUEtNjQgdmVjdG9yIHRoYXQgY29ycmVzcG9uZHMgdG8gSVJRLiAgKi8KK3N0YXRpYyBpbmxpbmUgaWE2NF92ZWN0b3IKK2lycV90b192ZWN0b3IgKGludCBpcnEpCit7CisJcmV0dXJuIChpYTY0X3ZlY3RvcikgaXJxOworfQorCisvKgorICogQ29udmVydCB0aGUgbG9jYWwgSUEtNjQgdmVjdG9yIHRvIHRoZSBjb3JyZXNwb25kaW5nIGlycSBudW1iZXIuICBUaGlzIHRyYW5zbGF0aW9uIGlzCisgKiBkb25lIGluIHRoZSBjb250ZXh0IG9mIHRoZSBpbnRlcnJ1cHQgZG9tYWluIHRoYXQgdGhlIGN1cnJlbnRseSBleGVjdXRpbmcgQ1BVIGJlbG9uZ3MKKyAqIHRvLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAorbG9jYWxfdmVjdG9yX3RvX2lycSAoaWE2NF92ZWN0b3IgdmVjKQoreworCXJldHVybiBwbGF0Zm9ybV9sb2NhbF92ZWN0b3JfdG9faXJxKHZlYyk7Cit9CisKKyNlbmRpZiAvKiBfQVNNX0lBNjRfSFdfSVJRX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvaWEzMi5oIGIvaW5jbHVkZS9hc20taWE2NC9pYTMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU3NDZiMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvaWEzMi5oCkBAIC0wLDAgKzEsMzggQEAKKyNpZm5kZWYgX0FTTV9JQTY0X0lBMzJfSAorI2RlZmluZSBfQVNNX0lBNjRfSUEzMl9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vc2lnbmFsLmg+CisKKyNkZWZpbmUgSUEzMl9OUl9zeXNjYWxscwkJMjg1CS8qIGxlbmd0aCBvZiBzeXNjYWxsIHRhYmxlICovCisjZGVmaW5lIElBMzJfUEFHRV9TSElGVAkJCTEyCS8qIDRLQiBwYWdlcyAqLworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjIGlmZGVmIENPTkZJR19JQTMyX1NVUFBPUlQKKworZXh0ZXJuIHZvaWQgaWEzMl9jcHVfaW5pdCAodm9pZCk7CitleHRlcm4gdm9pZCBpYTMyX21lbV9pbml0ICh2b2lkKTsKK2V4dGVybiB2b2lkIGlhMzJfZ2R0X2luaXQgKHZvaWQpOworZXh0ZXJuIGludCBpYTMyX2V4Y2VwdGlvbiAoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgaXNyKTsKK2V4dGVybiBpbnQgaWEzMl9pbnRlcmNlcHQgKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGlzcik7CitleHRlcm4gaW50IGlhMzJfY2xvbmVfdGxzIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLCBzdHJ1Y3QgcHRfcmVncyAqY2hpbGRyZWdzKTsKKworIyBlbmRpZiAvKiAhQ09ORklHX0lBMzJfU1VQUE9SVCAqLworCisvKiBEZWNsYXJlIHRoaXMgdW5jb25kaXRpb25hbGx5LCBzbyB3ZSBkb24ndCBnZXQgd2FybmluZ3MgZm9yIHVucmVhY2hhYmxlIGNvZGUuICAqLworZXh0ZXJuIGludCBpYTMyX3NldHVwX2ZyYW1lMSAoaW50IHNpZywgc3RydWN0IGtfc2lnYWN0aW9uICprYSwgc2lnaW5mb190ICppbmZvLAorCQkJICAgICAgc2lnc2V0X3QgKnNldCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworI2lmIFBBR0VfU0hJRlQgPiBJQTMyX1BBR0VfU0hJRlQKK2V4dGVybiBpbnQgaWEzMl9jb3B5X3BhcnRpYWxfcGFnZV9saXN0IChzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZyk7CitleHRlcm4gdm9pZCBpYTMyX2Ryb3BfcGFydGlhbF9wYWdlX2xpc3QgKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKKyNlbHNlCisjIGRlZmluZSBpYTMyX2NvcHlfcGFydGlhbF9wYWdlX2xpc3QoYTEsIGEyKQkwCisjIGRlZmluZSBpYTMyX2Ryb3BfcGFydGlhbF9wYWdlX2xpc3QoYTEpCWRvIHsgOyB9IHdoaWxlICgwKQorI2VuZGlmCisKKyNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiBfQVNNX0lBNjRfSUEzMl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L2lhNjRyZWdzLmggYi9pbmNsdWRlL2FzbS1pYTY0L2lhNjRyZWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc1N2YxYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvaWE2NHJlZ3MuaApAQCAtMCwwICsxLDEwMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMiwyMDAzIEludGVsIENvcnAuCisgKiAgICAgIEp1biBOYWthamltYSA8anVuLm5ha2FqaW1hQGludGVsLmNvbT4KKyAqICAgICAgU3VyZXNoIFNpZGRoYSA8c3VyZXNoLmIuc2lkZGhhQGludGVsLmNvbT4KKyAqLworCisjaWZuZGVmIF9BU01fSUE2NF9JQTY0UkVHU19ICisjZGVmaW5lIF9BU01fSUE2NF9JQTY0UkVHU19ICisKKy8qCisgKiBSZWdpc3RlciBOYW1lcyBmb3IgZ2V0cmVnKCkgYW5kIHNldHJlZygpLgorICoKKyAqIFRoZSAibWFnaWMiIG51bWJlcnMgaGFwcGVuIHRvIG1hdGNoIHRoZSB2YWx1ZXMgdXNlZCBieSB0aGUgSW50ZWwgY29tcGlsZXIncworICogZ2V0cmVnKCkvc2V0cmVnKCkgaW50cmluc2ljcy4KKyAqLworCisvKiBTcGVjaWFsIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIF9JQTY0X1JFR19JUAkJMTAxNgkvKiBnZXRyZWcgb25seSAqLworI2RlZmluZSBfSUE2NF9SRUdfUFNSCQkxMDE5CisjZGVmaW5lIF9JQTY0X1JFR19QU1JfTAkJMTAxOQorCisvKiBHZW5lcmFsIEludGVnZXIgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgX0lBNjRfUkVHX0dQCQkxMDI1CS8qIFIxICovCisjZGVmaW5lIF9JQTY0X1JFR19SOAkJMTAzMgkvKiBSOCAqLworI2RlZmluZSBfSUE2NF9SRUdfUjkJCTEwMzMJLyogUjkgKi8KKyNkZWZpbmUgX0lBNjRfUkVHX1NQCQkxMDM2CS8qIFIxMiAqLworI2RlZmluZSBfSUE2NF9SRUdfVFAJCTEwMzcJLyogUjEzICovCisKKy8qIEFwcGxpY2F0aW9uIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIF9JQTY0X1JFR19BUl9LUjAJMzA3MgorI2RlZmluZSBfSUE2NF9SRUdfQVJfS1IxCTMwNzMKKyNkZWZpbmUgX0lBNjRfUkVHX0FSX0tSMgkzMDc0CisjZGVmaW5lIF9JQTY0X1JFR19BUl9LUjMJMzA3NQorI2RlZmluZSBfSUE2NF9SRUdfQVJfS1I0CTMwNzYKKyNkZWZpbmUgX0lBNjRfUkVHX0FSX0tSNQkzMDc3CisjZGVmaW5lIF9JQTY0X1JFR19BUl9LUjYJMzA3OAorI2RlZmluZSBfSUE2NF9SRUdfQVJfS1I3CTMwNzkKKyNkZWZpbmUgX0lBNjRfUkVHX0FSX1JTQwkzMDg4CisjZGVmaW5lIF9JQTY0X1JFR19BUl9CU1AJMzA4OQorI2RlZmluZSBfSUE2NF9SRUdfQVJfQlNQU1RPUkUJMzA5MAorI2RlZmluZSBfSUE2NF9SRUdfQVJfUk5BVAkzMDkxCisjZGVmaW5lIF9JQTY0X1JFR19BUl9GQ1IJMzA5MworI2RlZmluZSBfSUE2NF9SRUdfQVJfRUZMQUcJMzA5NgorI2RlZmluZSBfSUE2NF9SRUdfQVJfQ1NECTMwOTcKKyNkZWZpbmUgX0lBNjRfUkVHX0FSX1NTRAkzMDk4CisjZGVmaW5lIF9JQTY0X1JFR19BUl9DRkxBRwkzMDk5CisjZGVmaW5lIF9JQTY0X1JFR19BUl9GU1IJMzEwMAorI2RlZmluZSBfSUE2NF9SRUdfQVJfRklSCTMxMDEKKyNkZWZpbmUgX0lBNjRfUkVHX0FSX0ZEUgkzMTAyCisjZGVmaW5lIF9JQTY0X1JFR19BUl9DQ1YJMzEwNAorI2RlZmluZSBfSUE2NF9SRUdfQVJfVU5BVAkzMTA4CisjZGVmaW5lIF9JQTY0X1JFR19BUl9GUFNSCTMxMTIKKyNkZWZpbmUgX0lBNjRfUkVHX0FSX0lUQwkzMTE2CisjZGVmaW5lIF9JQTY0X1JFR19BUl9QRlMJMzEzNgorI2RlZmluZSBfSUE2NF9SRUdfQVJfTEMJCTMxMzcKKyNkZWZpbmUgX0lBNjRfUkVHX0FSX0VDCQkzMTM4CisKKy8qIENvbnRyb2wgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgX0lBNjRfUkVHX0NSX0RDUgk0MDk2CisjZGVmaW5lIF9JQTY0X1JFR19DUl9JVE0JNDA5NworI2RlZmluZSBfSUE2NF9SRUdfQ1JfSVZBCTQwOTgKKyNkZWZpbmUgX0lBNjRfUkVHX0NSX1BUQQk0MTA0CisjZGVmaW5lIF9JQTY0X1JFR19DUl9JUFNSCTQxMTIKKyNkZWZpbmUgX0lBNjRfUkVHX0NSX0lTUgk0MTEzCisjZGVmaW5lIF9JQTY0X1JFR19DUl9JSVAJNDExNQorI2RlZmluZSBfSUE2NF9SRUdfQ1JfSUZBCTQxMTYKKyNkZWZpbmUgX0lBNjRfUkVHX0NSX0lUSVIJNDExNworI2RlZmluZSBfSUE2NF9SRUdfQ1JfSUlQQQk0MTE4CisjZGVmaW5lIF9JQTY0X1JFR19DUl9JRlMJNDExOQorI2RlZmluZSBfSUE2NF9SRUdfQ1JfSUlNCTQxMjAKKyNkZWZpbmUgX0lBNjRfUkVHX0NSX0lIQQk0MTIxCisjZGVmaW5lIF9JQTY0X1JFR19DUl9MSUQJNDE2MAorI2RlZmluZSBfSUE2NF9SRUdfQ1JfSVZSCTQxNjEJLyogZ2V0cmVnIG9ubHkgKi8KKyNkZWZpbmUgX0lBNjRfUkVHX0NSX1RQUgk0MTYyCisjZGVmaW5lIF9JQTY0X1JFR19DUl9FT0kJNDE2MworI2RlZmluZSBfSUE2NF9SRUdfQ1JfSVJSMAk0MTY0CS8qIGdldHJlZyBvbmx5ICovCisjZGVmaW5lIF9JQTY0X1JFR19DUl9JUlIxCTQxNjUJLyogZ2V0cmVnIG9ubHkgKi8KKyNkZWZpbmUgX0lBNjRfUkVHX0NSX0lSUjIJNDE2NgkvKiBnZXRyZWcgb25seSAqLworI2RlZmluZSBfSUE2NF9SRUdfQ1JfSVJSMwk0MTY3CS8qIGdldHJlZyBvbmx5ICovCisjZGVmaW5lIF9JQTY0X1JFR19DUl9JVFYJNDE2OAorI2RlZmluZSBfSUE2NF9SRUdfQ1JfUE1WCTQxNjkKKyNkZWZpbmUgX0lBNjRfUkVHX0NSX0NNQ1YJNDE3MAorI2RlZmluZSBfSUE2NF9SRUdfQ1JfTFJSMAk0MTc2CisjZGVmaW5lIF9JQTY0X1JFR19DUl9MUlIxCTQxNzcKKworLyogSW5kaXJlY3QgUmVnaXN0ZXJzIGZvciBnZXRpbmRyZWcoKSBhbmQgc2V0aW5kcmVnKCkgKi8KKworI2RlZmluZSBfSUE2NF9SRUdfSU5EUl9DUFVJRAk5MDAwCS8qIGdldGluZHJlZyBvbmx5ICovCisjZGVmaW5lIF9JQTY0X1JFR19JTkRSX0RCUgk5MDAxCisjZGVmaW5lIF9JQTY0X1JFR19JTkRSX0lCUgk5MDAyCisjZGVmaW5lIF9JQTY0X1JFR19JTkRSX1BLUgk5MDAzCisjZGVmaW5lIF9JQTY0X1JFR19JTkRSX1BNQwk5MDA0CisjZGVmaW5lIF9JQTY0X1JFR19JTkRSX1BNRAk5MDA1CisjZGVmaW5lIF9JQTY0X1JFR19JTkRSX1JSCTkwMDYKKworI2VuZGlmIC8qIF9BU01fSUE2NF9JQTY0UkVHU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L2lkZS5oIGIvaW5jbHVkZS9hc20taWE2NC9pZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjJiOTUzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taWE2NC9pZGUuaApAQCAtMCwwICsxLDcxIEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWlhNjQvaWRlLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk0LTE5OTYgIExpbnVzIFRvcnZhbGRzICYgYXV0aG9ycworICovCisKKy8qCisgKiAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBpYTY0IGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBJREUgY29kZS4KKyAqLworCisjaWZuZGVmIF9fQVNNX0lBNjRfSURFX0gKKyNkZWZpbmUgX19BU01fSUE2NF9JREVfSAorCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKworI2lmbmRlZiBNQVhfSFdJRlMKKyMgaWZkZWYgQ09ORklHX1BDSQorI2RlZmluZSBNQVhfSFdJRlMJMTAKKyMgZWxzZQorI2RlZmluZSBNQVhfSFdJRlMJNgorIyBlbmRpZgorI2VuZGlmCisKKyNkZWZpbmUgSURFX0FSQ0hfT0JTT0xFVEVfREVGQVVMVFMKKworc3RhdGljIGlubGluZSBpbnQgaWRlX2RlZmF1bHRfaXJxKHVuc2lnbmVkIGxvbmcgYmFzZSkKK3sKKwlzd2l0Y2ggKGJhc2UpIHsKKwkgICAgICBjYXNlIDB4MWYwOiByZXR1cm4gaXNhX2lycV90b192ZWN0b3IoMTQpOworCSAgICAgIGNhc2UgMHgxNzA6IHJldHVybiBpc2FfaXJxX3RvX3ZlY3RvcigxNSk7CisJICAgICAgY2FzZSAweDFlODogcmV0dXJuIGlzYV9pcnFfdG9fdmVjdG9yKDExKTsKKwkgICAgICBjYXNlIDB4MTY4OiByZXR1cm4gaXNhX2lycV90b192ZWN0b3IoMTApOworCSAgICAgIGNhc2UgMHgxZTA6IHJldHVybiBpc2FfaXJxX3RvX3ZlY3Rvcig4KTsKKwkgICAgICBjYXNlIDB4MTYwOiByZXR1cm4gaXNhX2lycV90b192ZWN0b3IoMTIpOworCSAgICAgIGRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGlkZV9kZWZhdWx0X2lvX2Jhc2UoaW50IGluZGV4KQoreworCXN3aXRjaCAoaW5kZXgpIHsKKwkgICAgICBjYXNlIDA6IHJldHVybiAweDFmMDsKKwkgICAgICBjYXNlIDE6IHJldHVybiAweDE3MDsKKwkgICAgICBjYXNlIDI6IHJldHVybiAweDFlODsKKwkgICAgICBjYXNlIDM6IHJldHVybiAweDE2ODsKKwkgICAgICBjYXNlIDQ6IHJldHVybiAweDFlMDsKKwkgICAgICBjYXNlIDU6IHJldHVybiAweDE2MDsKKwkgICAgICBkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9Cit9CisKKyNkZWZpbmUgSURFX0FSQ0hfT0JTT0xFVEVfSU5JVAorI2RlZmluZSBpZGVfZGVmYXVsdF9pb19jdGwoYmFzZSkJKChiYXNlKSArIDB4MjA2KSAvKiBvYnNvbGV0ZSAqLworCisjaWZkZWYgQ09ORklHX1BDSQorI2RlZmluZSBpZGVfaW5pdF9kZWZhdWx0X2lycShiYXNlKQkoMCkKKyNlbHNlCisjZGVmaW5lIGlkZV9pbml0X2RlZmF1bHRfaXJxKGJhc2UpCWlkZV9kZWZhdWx0X2lycShiYXNlKQorI2VuZGlmCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pZGVfaW9wcy5oPgorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX19BU01fSUE2NF9JREVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9pbnRlbF9pbnRyaW4uaCBiL2luY2x1ZGUvYXNtLWlhNjQvaW50ZWxfaW50cmluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTcxMjJkOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvaW50ZWxfaW50cmluLmgKQEAgLTAsMCArMSwyNTcgQEAKKyNpZm5kZWYgX0FTTV9JQTY0X0lOVEVMX0lOVFJJTl9ICisjZGVmaW5lIF9BU01fSUE2NF9JTlRFTF9JTlRSSU5fSAorLyoKKyAqIEludGVsIENvbXBpbGVyIEludHJpbnNpY3MKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIsMjAwMyBKdW4gTmFrYWppbWEgPGp1bi5uYWthamltYUBpbnRlbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDIsMjAwMyBTdXJlc2ggU2lkZGhhIDxzdXJlc2guYi5zaWRkaGFAaW50ZWwuY29tPgorICoKKyAqLworI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCit2b2lkICBfX2xmZXRjaChpbnQgbGZoaW50LCB2b2lkICp5KTsKK3ZvaWQgIF9fbGZldGNoX2V4Y2woaW50IGxmaGludCwgdm9pZCAqeSk7Cit2b2lkICBfX2xmZXRjaF9mYXVsdChpbnQgbGZoaW50LCB2b2lkICp5KTsKK3ZvaWQgIF9fbGZldGNoX2ZhdWx0X2V4Y2woaW50IGxmaGludCwgdm9pZCAqeSk7CisKKy8qIEluIHRoZSBmb2xsb3dpbmcsIHdoaWNoRmxvYXRSZWcgc2hvdWxkIGJlIGFuIGludGVnZXIgZnJvbSAwLTEyNyAqLwordm9pZCAgX19sZGZzKGNvbnN0IGludCB3aGljaEZsb2F0UmVnLCB2b2lkICpzcmMpOwordm9pZCAgX19sZGZkKGNvbnN0IGludCB3aGljaEZsb2F0UmVnLCB2b2lkICpzcmMpOwordm9pZCAgX19sZGZlKGNvbnN0IGludCB3aGljaEZsb2F0UmVnLCB2b2lkICpzcmMpOwordm9pZCAgX19sZGY4KGNvbnN0IGludCB3aGljaEZsb2F0UmVnLCB2b2lkICpzcmMpOwordm9pZCAgX19sZGZfZmlsbChjb25zdCBpbnQgd2hpY2hGbG9hdFJlZywgdm9pZCAqc3JjKTsKK3ZvaWQgIF9fc3Rmcyh2b2lkICpkc3QsIGNvbnN0IGludCB3aGljaEZsb2F0UmVnKTsKK3ZvaWQgIF9fc3RmZCh2b2lkICpkc3QsIGNvbnN0IGludCB3aGljaEZsb2F0UmVnKTsKK3ZvaWQgIF9fc3RmZSh2b2lkICpkc3QsIGNvbnN0IGludCB3aGljaEZsb2F0UmVnKTsKK3ZvaWQgIF9fc3RmOCh2b2lkICpkc3QsIGNvbnN0IGludCB3aGljaEZsb2F0UmVnKTsKK3ZvaWQgIF9fc3RmX3NwaWxsKHZvaWQgKmRzdCwgY29uc3QgaW50IHdoaWNoRmxvYXRSZWcpOworCit2b2lkICBfX3N0MV9yZWwodm9pZCAqZHN0LCBjb25zdCBfX3M4ICB2YWx1ZSk7Cit2b2lkICBfX3N0Ml9yZWwodm9pZCAqZHN0LCBjb25zdCBfX3MxNiB2YWx1ZSk7Cit2b2lkICBfX3N0NF9yZWwodm9pZCAqZHN0LCBjb25zdCBfX3MzMiB2YWx1ZSk7Cit2b2lkICBfX3N0OF9yZWwodm9pZCAqZHN0LCBjb25zdCBfX3M2NCB2YWx1ZSk7CitfX3U4ICBfX2xkMV9hY3Eodm9pZCAqc3JjKTsKK19fdTE2IF9fbGQyX2FjcSh2b2lkICpzcmMpOworX191MzIgX19sZDRfYWNxKHZvaWQgKnNyYyk7CitfX3U2NCBfX2xkOF9hY3Eodm9pZCAqc3JjKTsKKworX191NjQgX19mZXRjaGFkZDRfYWNxKF9fdTMyICphZGRlbmQsIGNvbnN0IGludCBpbmNyZW1lbnQpOworX191NjQgX19mZXRjaGFkZDRfcmVsKF9fdTMyICphZGRlbmQsIGNvbnN0IGludCBpbmNyZW1lbnQpOworX191NjQgX19mZXRjaGFkZDhfYWNxKF9fdTY0ICphZGRlbmQsIGNvbnN0IGludCBpbmNyZW1lbnQpOworX191NjQgX19mZXRjaGFkZDhfcmVsKF9fdTY0ICphZGRlbmQsIGNvbnN0IGludCBpbmNyZW1lbnQpOworCitfX3U2NCBfX2dldGZfZXhwKGRvdWJsZSBkKTsKKworLyogT1MgUmVsYXRlZCBJdGFuaXVtKFIpIEludHJpbnNpY3MgICovCisKKy8qIFRoZSBuYW1lcyB0byB1c2UgZm9yIHdoaWNoUmVnIGFuZCB3aGljaEluZFJlZyBiZWxvdyBjb21lIGZyb20KKyAgIHRoZSBpbmNsdWRlIGZpbGUgYXNtL2lhNjRyZWdzLmggKi8KKworX191NjQgX19nZXRJbmRSZWcoY29uc3QgaW50IHdoaWNoSW5kUmVnLCBfX3M2NCBpbmRleCk7CitfX3U2NCBfX2dldFJlZyhjb25zdCBpbnQgd2hpY2hSZWcpOworCit2b2lkICBfX3NldEluZFJlZyhjb25zdCBpbnQgd2hpY2hJbmRSZWcsIF9fczY0IGluZGV4LCBfX3U2NCB2YWx1ZSk7Cit2b2lkICBfX3NldFJlZyhjb25zdCBpbnQgd2hpY2hSZWcsIF9fdTY0IHZhbHVlKTsKKwordm9pZCAgX19tZih2b2lkKTsKK3ZvaWQgIF9fbWZhKHZvaWQpOwordm9pZCAgX19zeW5jaSh2b2lkKTsKK3ZvaWQgIF9faXRjZChfX3M2NCBwYSk7Cit2b2lkICBfX2l0Y2koX19zNjQgcGEpOwordm9pZCAgX19pdHJkKF9fczY0IHdoaWNoVHJhbnNSZWcsIF9fczY0IHBhKTsKK3ZvaWQgIF9faXRyaShfX3M2NCB3aGljaFRyYW5zUmVnLCBfX3M2NCBwYSk7Cit2b2lkICBfX3B0Y2UoX19zNjQgdmEpOwordm9pZCAgX19wdGNsKF9fczY0IHZhLCBfX3M2NCBwYWdlc3opOwordm9pZCAgX19wdGNnKF9fczY0IHZhLCBfX3M2NCBwYWdlc3opOwordm9pZCAgX19wdGNnYShfX3M2NCB2YSwgX19zNjQgcGFnZXN6KTsKK3ZvaWQgIF9fcHRyaShfX3M2NCB2YSwgX19zNjQgcGFnZXN6KTsKK3ZvaWQgIF9fcHRyZChfX3M2NCB2YSwgX19zNjQgcGFnZXN6KTsKK3ZvaWQgIF9faW52YWxhICh2b2lkKTsKK3ZvaWQgIF9faW52YWxhX2dyKGNvbnN0IGludCB3aGljaEdlbmVyYWxSZWcgLyogMC0xMjcgKi8gKTsKK3ZvaWQgIF9faW52YWxhX2ZyKGNvbnN0IGludCB3aGljaEZsb2F0UmVnIC8qIDAtMTI3ICovICk7Cit2b2lkICBfX25vcChjb25zdCBpbnQpOwordm9pZCAgX19mYyhfX3U2NCAqYWRkcik7Cit2b2lkICBfX3N1bShpbnQgbWFzayk7Cit2b2lkICBfX3J1bShpbnQgbWFzayk7Cit2b2lkICBfX3NzbShpbnQgbWFzayk7Cit2b2lkICBfX3JzbShpbnQgbWFzayk7CitfX3U2NCBfX3RoYXNoKF9fczY0KTsKK19fdTY0IF9fdHRhZyhfX3M2NCk7CitfX3M2NCBfX3RwYShfX3M2NCk7CisKKy8qIEludHJpbnNpY3MgZm9yIGltcGxlbWVudGluZyBnZXQvcHV0X3VzZXIgbWFjcm9zICovCit2b2lkIF9fc3RfdXNlcihjb25zdCBjaGFyICp0YWJsZU5hbWUsIF9fdTY0IGFkZHIsIGNoYXIgc2l6ZSwgY2hhciByZWxvY1R5cGUsIF9fdTY0IHZhbCk7Cit2b2lkIF9fbGRfdXNlcihjb25zdCBjaGFyICp0YWJsZU5hbWUsIF9fdTY0IGFkZHIsIGNoYXIgc2l6ZSwgY2hhciByZWxvY1R5cGUpOworCisvKiBUaGlzIGludHJpbnNpYyBkb2VzIG5vdCBnZW5lcmF0ZSBjb2RlLCBpdCBjcmVhdGVzIGEgYmFycmllciBhY3Jvc3Mgd2hpY2gKKyAqIHRoZSBjb21waWxlciB3aWxsIG5vdCBzY2hlZHVsZSBkYXRhIGFjY2VzcyBpbnN0cnVjdGlvbnMuCisgKi8KK3ZvaWQgX19tZW1vcnlfYmFycmllcih2b2lkKTsKKwordm9pZCBfX2lzcmx6KHZvaWQpOwordm9pZCBfX2Rzcmx6KHZvaWQpOworCitfX3U2NCAgX202NF9tdXgxKF9fdTY0IGEsIGNvbnN0IGludCBuKTsKK19fdTY0ICBfX3RoYXNoKF9fdTY0KTsKKworLyogTG9jayBhbmQgQXRvbWljIE9wZXJhdGlvbiBSZWxhdGVkIEludHJpbnNpY3MgKi8KK19fdTY0IF9JbnRlcmxvY2tlZEV4Y2hhbmdlOCh2b2xhdGlsZSBfX3U4ICp0cmd0LCBfX3U4IHZhbHVlKTsKK19fdTY0IF9JbnRlcmxvY2tlZEV4Y2hhbmdlMTYodm9sYXRpbGUgX191MTYgKnRyZ3QsIF9fdTE2IHZhbHVlKTsKK19fczY0IF9JbnRlcmxvY2tlZEV4Y2hhbmdlKHZvbGF0aWxlIF9fdTMyICp0cmd0LCBfX3UzMiB2YWx1ZSk7CitfX3M2NCBfSW50ZXJsb2NrZWRFeGNoYW5nZTY0KHZvbGF0aWxlIF9fdTY0ICp0cmd0LCBfX3U2NCB2YWx1ZSk7CisKK19fdTY0IF9JbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZThfcmVsKHZvbGF0aWxlIF9fdTggKmRlc3QsIF9fdTY0IHhjaGcsIF9fdTY0IGNvbXApOworX191NjQgX0ludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlOF9hY3Eodm9sYXRpbGUgX191OCAqZGVzdCwgX191NjQgeGNoZywgX191NjQgY29tcCk7CitfX3U2NCBfSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2UxNl9yZWwodm9sYXRpbGUgX191MTYgKmRlc3QsIF9fdTY0IHhjaGcsIF9fdTY0IGNvbXApOworX191NjQgX0ludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlMTZfYWNxKHZvbGF0aWxlIF9fdTE2ICpkZXN0LCBfX3U2NCB4Y2hnLCBfX3U2NCBjb21wKTsKK19fdTY0IF9JbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZV9yZWwodm9sYXRpbGUgX191MzIgKmRlc3QsIF9fdTY0IHhjaGcsIF9fdTY0IGNvbXApOworX191NjQgX0ludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlX2FjcSh2b2xhdGlsZSBfX3UzMiAqZGVzdCwgX191NjQgeGNoZywgX191NjQgY29tcCk7CitfX3U2NCBfSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2U2NF9yZWwodm9sYXRpbGUgX191NjQgKmRlc3QsIF9fdTY0IHhjaGcsIF9fdTY0IGNvbXApOworX191NjQgX0ludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlNjRfYWNxKHZvbGF0aWxlIF9fdTY0ICpkZXN0LCBfX3U2NCB4Y2hnLCBfX3U2NCBjb21wKTsKKworX19zNjQgX202NF9kZXBfbWkoY29uc3QgaW50IHYsIF9fczY0IHMsIGNvbnN0IGludCBwLCBjb25zdCBpbnQgbGVuKTsKK19fczY0IF9tNjRfc2hycChfX3M2NCBhLCBfX3M2NCBiLCBjb25zdCBpbnQgY291bnQpOworX19zNjQgX202NF9wb3BjbnQoX19zNjQgYSk7CisKKyNkZWZpbmUgaWE2NF9iYXJyaWVyKCkJCV9fbWVtb3J5X2JhcnJpZXIoKQorCisjZGVmaW5lIGlhNjRfc3RvcCgpCS8qIE5vdGhpbmc6IEFzIG9mIG5vdyBzdG9wIGJpdCBpcyBnZW5lcmF0ZWQgZm9yIGVhY2gKKwkJIAkgKiBpbnRyaW5zaWMKKwkJIAkgKi8KKworI2RlZmluZSBpYTY0X2dldHJlZwkJX19nZXRSZWcKKyNkZWZpbmUgaWE2NF9zZXRyZWcJCV9fc2V0UmVnCisKKyNkZWZpbmUgaWE2NF9oaW50KHgpCisKKyNkZWZpbmUgaWE2NF9tdXgxX2JyY3N0CSAwCisjZGVmaW5lIGlhNjRfbXV4MV9taXgJCSA4CisjZGVmaW5lIGlhNjRfbXV4MV9zaHVmCQkgOQorI2RlZmluZSBpYTY0X211eDFfYWx0CQkxMAorI2RlZmluZSBpYTY0X211eDFfcmV2CQkxMQorCisjZGVmaW5lIGlhNjRfbXV4MQkJX202NF9tdXgxCisjZGVmaW5lIGlhNjRfcG9wY250CQlfbTY0X3BvcGNudAorI2RlZmluZSBpYTY0X2dldGZfZXhwCQlfX2dldGZfZXhwCisjZGVmaW5lIGlhNjRfc2hycAkJX202NF9zaHJwCisKKyNkZWZpbmUgaWE2NF90cGEJCV9fdHBhCisjZGVmaW5lIGlhNjRfaW52YWxhCQlfX2ludmFsYQorI2RlZmluZSBpYTY0X2ludmFsYV9ncgkJX19pbnZhbGFfZ3IKKyNkZWZpbmUgaWE2NF9pbnZhbGFfZnIJCV9faW52YWxhX2ZyCisjZGVmaW5lIGlhNjRfbm9wCQlfX25vcAorI2RlZmluZSBpYTY0X3N1bQkJX19zdW0KKyNkZWZpbmUgaWE2NF9zc20JCV9fc3NtCisjZGVmaW5lIGlhNjRfcnVtCQlfX3J1bQorI2RlZmluZSBpYTY0X3JzbQkJX19yc20KKyNkZWZpbmUgaWE2NF9mYyAJCV9fZmMKKworI2RlZmluZSBpYTY0X2xkZnMJCV9fbGRmcworI2RlZmluZSBpYTY0X2xkZmQJCV9fbGRmZAorI2RlZmluZSBpYTY0X2xkZmUJCV9fbGRmZQorI2RlZmluZSBpYTY0X2xkZjgJCV9fbGRmOAorI2RlZmluZSBpYTY0X2xkZl9maWxsCQlfX2xkZl9maWxsCisKKyNkZWZpbmUgaWE2NF9zdGZzCQlfX3N0ZnMKKyNkZWZpbmUgaWE2NF9zdGZkCQlfX3N0ZmQKKyNkZWZpbmUgaWE2NF9zdGZlCQlfX3N0ZmUKKyNkZWZpbmUgaWE2NF9zdGY4CQlfX3N0ZjgKKyNkZWZpbmUgaWE2NF9zdGZfc3BpbGwJCV9fc3RmX3NwaWxsCisKKyNkZWZpbmUgaWE2NF9tZgkJX19tZgorI2RlZmluZSBpYTY0X21mYQkJX19tZmEKKworI2RlZmluZSBpYTY0X2ZldGNoYWRkNF9hY3EJX19mZXRjaGFkZDRfYWNxCisjZGVmaW5lIGlhNjRfZmV0Y2hhZGQ0X3JlbAlfX2ZldGNoYWRkNF9yZWwKKyNkZWZpbmUgaWE2NF9mZXRjaGFkZDhfYWNxCV9fZmV0Y2hhZGQ4X2FjcQorI2RlZmluZSBpYTY0X2ZldGNoYWRkOF9yZWwJX19mZXRjaGFkZDhfcmVsCisKKyNkZWZpbmUgaWE2NF94Y2hnMQkJX0ludGVybG9ja2VkRXhjaGFuZ2U4CisjZGVmaW5lIGlhNjRfeGNoZzIJCV9JbnRlcmxvY2tlZEV4Y2hhbmdlMTYKKyNkZWZpbmUgaWE2NF94Y2hnNAkJX0ludGVybG9ja2VkRXhjaGFuZ2UKKyNkZWZpbmUgaWE2NF94Y2hnOAkJX0ludGVybG9ja2VkRXhjaGFuZ2U2NAorCisjZGVmaW5lIGlhNjRfY21weGNoZzFfcmVsCV9JbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZThfcmVsCisjZGVmaW5lIGlhNjRfY21weGNoZzFfYWNxCV9JbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZThfYWNxCisjZGVmaW5lIGlhNjRfY21weGNoZzJfcmVsCV9JbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZTE2X3JlbAorI2RlZmluZSBpYTY0X2NtcHhjaGcyX2FjcQlfSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2UxNl9hY3EKKyNkZWZpbmUgaWE2NF9jbXB4Y2hnNF9yZWwJX0ludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlX3JlbAorI2RlZmluZSBpYTY0X2NtcHhjaGc0X2FjcQlfSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2VfYWNxCisjZGVmaW5lIGlhNjRfY21weGNoZzhfcmVsCV9JbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZTY0X3JlbAorI2RlZmluZSBpYTY0X2NtcHhjaGc4X2FjcQlfSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2U2NF9hY3EKKworI2RlZmluZSBfX2lhNjRfc2V0X2RicihpbmRleCwgdmFsKQlcCisJCV9fc2V0SW5kUmVnKF9JQTY0X1JFR19JTkRSX0RCUiwgaW5kZXgsIHZhbCkKKyNkZWZpbmUgaWE2NF9zZXRfaWJyKGluZGV4LCB2YWwpCVwKKwkJX19zZXRJbmRSZWcoX0lBNjRfUkVHX0lORFJfSUJSLCBpbmRleCwgdmFsKQorI2RlZmluZSBpYTY0X3NldF9wa3IoaW5kZXgsIHZhbCkJXAorCQlfX3NldEluZFJlZyhfSUE2NF9SRUdfSU5EUl9QS1IsIGluZGV4LCB2YWwpCisjZGVmaW5lIGlhNjRfc2V0X3BtYyhpbmRleCwgdmFsKQlcCisJCV9fc2V0SW5kUmVnKF9JQTY0X1JFR19JTkRSX1BNQywgaW5kZXgsIHZhbCkKKyNkZWZpbmUgaWE2NF9zZXRfcG1kKGluZGV4LCB2YWwpCVwKKwkJX19zZXRJbmRSZWcoX0lBNjRfUkVHX0lORFJfUE1ELCBpbmRleCwgdmFsKQorI2RlZmluZSBpYTY0X3NldF9ycihpbmRleCwgdmFsKQlcCisJCV9fc2V0SW5kUmVnKF9JQTY0X1JFR19JTkRSX1JSLCBpbmRleCwgdmFsKQorCisjZGVmaW5lIGlhNjRfZ2V0X2NwdWlkKGluZGV4KSAJX19nZXRJbmRSZWcoX0lBNjRfUkVHX0lORFJfQ1BVSUQsIGluZGV4KQorI2RlZmluZSBfX2lhNjRfZ2V0X2RicihpbmRleCkgCV9fZ2V0SW5kUmVnKF9JQTY0X1JFR19JTkRSX0RCUiwgaW5kZXgpCisjZGVmaW5lIGlhNjRfZ2V0X2licihpbmRleCkgCV9fZ2V0SW5kUmVnKF9JQTY0X1JFR19JTkRSX0lCUiwgaW5kZXgpCisjZGVmaW5lIGlhNjRfZ2V0X3BrcihpbmRleCkgCV9fZ2V0SW5kUmVnKF9JQTY0X1JFR19JTkRSX1BLUiwgaW5kZXgpCisjZGVmaW5lIGlhNjRfZ2V0X3BtYyhpbmRleCkgCV9fZ2V0SW5kUmVnKF9JQTY0X1JFR19JTkRSX1BNQywgaW5kZXgpCisjZGVmaW5lIGlhNjRfZ2V0X3BtZChpbmRleCkgIAlfX2dldEluZFJlZyhfSUE2NF9SRUdfSU5EUl9QTUQsIGluZGV4KQorI2RlZmluZSBpYTY0X2dldF9ycihpbmRleCkgCV9fZ2V0SW5kUmVnKF9JQTY0X1JFR19JTkRSX1JSLCBpbmRleCkKKworI2RlZmluZSBpYTY0X3NybHpfZAkJX19kc3JsegorI2RlZmluZSBpYTY0X3NybHpfaQkJX19pc3JsegorCisjZGVmaW5lIGlhNjRfZHZfc2VyaWFsaXplX2RhdGEoKQorI2RlZmluZSBpYTY0X2R2X3NlcmlhbGl6ZV9pbnN0cnVjdGlvbigpCisKKyNkZWZpbmUgaWE2NF9zdDFfcmVsCQlfX3N0MV9yZWwKKyNkZWZpbmUgaWE2NF9zdDJfcmVsCQlfX3N0Ml9yZWwKKyNkZWZpbmUgaWE2NF9zdDRfcmVsCQlfX3N0NF9yZWwKKyNkZWZpbmUgaWE2NF9zdDhfcmVsCQlfX3N0OF9yZWwKKworI2RlZmluZSBpYTY0X2xkMV9hY3EJCV9fbGQxX2FjcQorI2RlZmluZSBpYTY0X2xkMl9hY3EJCV9fbGQyX2FjcQorI2RlZmluZSBpYTY0X2xkNF9hY3EJCV9fbGQ0X2FjcQorI2RlZmluZSBpYTY0X2xkOF9hY3EJCV9fbGQ4X2FjcQorCisjZGVmaW5lIGlhNjRfc3luY19pCQlfX3N5bmNpCisjZGVmaW5lIGlhNjRfdGhhc2gJCV9fdGhhc2gKKyNkZWZpbmUgaWE2NF90dGFnCQlfX3R0YWcKKyNkZWZpbmUgaWE2NF9pdGNkCQlfX2l0Y2QKKyNkZWZpbmUgaWE2NF9pdGNpCQlfX2l0Y2kKKyNkZWZpbmUgaWE2NF9pdHJkCQlfX2l0cmQKKyNkZWZpbmUgaWE2NF9pdHJpCQlfX2l0cmkKKyNkZWZpbmUgaWE2NF9wdGNlCQlfX3B0Y2UKKyNkZWZpbmUgaWE2NF9wdGNsCQlfX3B0Y2wKKyNkZWZpbmUgaWE2NF9wdGNnCQlfX3B0Y2cKKyNkZWZpbmUgaWE2NF9wdGNnYQkJX19wdGNnYQorI2RlZmluZSBpYTY0X3B0cmkJCV9fcHRyaQorI2RlZmluZSBpYTY0X3B0cmQJCV9fcHRyZAorI2RlZmluZSBpYTY0X2RlcF9taQkJX202NF9kZXBfbWkKKworLyogVmFsdWVzIGZvciBsZmhpbnQgaW4gX19sZmV0Y2ggYW5kIF9fbGZldGNoX2ZhdWx0ICovCisKKyNkZWZpbmUgaWE2NF9sZmhpbnRfbm9uZSAgIAkwCisjZGVmaW5lIGlhNjRfbGZoaW50X250MSAgICAJMQorI2RlZmluZSBpYTY0X2xmaGludF9udDIgICAgCTIKKyNkZWZpbmUgaWE2NF9sZmhpbnRfbnRhICAgIAkzCisKKyNkZWZpbmUgaWE2NF9sZmV0Y2gJCV9fbGZldGNoCisjZGVmaW5lIGlhNjRfbGZldGNoX2V4Y2wJX19sZmV0Y2hfZXhjbAorI2RlZmluZSBpYTY0X2xmZXRjaF9mYXVsdAlfX2xmZXRjaF9mYXVsdAorI2RlZmluZSBpYTY0X2xmZXRjaF9mYXVsdF9leGNsCV9fbGZldGNoX2ZhdWx0X2V4Y2wKKworI2RlZmluZSBpYTY0X2ludHJpbl9sb2NhbF9pcnFfcmVzdG9yZSh4KQkJXAorZG8gewkJCQkJCQlcCisJaWYgKCh4KSAhPSAwKSB7CQkJCQlcCisJCWlhNjRfc3NtKElBNjRfUFNSX0kpOwkJCVwKKwkJaWE2NF9zcmx6X2QoKTsJCQkJXAorCX0gZWxzZSB7CQkJCQlcCisJCWlhNjRfcnNtKElBNjRfUFNSX0kpOwkJCVwKKwl9CQkJCQkJXAorfSB3aGlsZSAoMCkKKworI2VuZGlmIC8qIF9BU01fSUE2NF9JTlRFTF9JTlRSSU5fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9pbnRyaW5zaWNzLmggYi9pbmNsdWRlL2FzbS1pYTY0L2ludHJpbnNpY3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDg5Zjk1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taWE2NC9pbnRyaW5zaWNzLmgKQEAgLTAsMCArMSwxODEgQEAKKyNpZm5kZWYgX0FTTV9JQTY0X0lOVFJJTlNJQ1NfSAorI2RlZmluZSBfQVNNX0lBNjRfSU5UUklOU0lDU19ICisKKy8qCisgKiBDb21waWxlci1kZXBlbmRlbnQgaW50cmluc2ljcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAwMyBIZXdsZXR0LVBhY2thcmQgQ28KKyAqCURhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4KKyAqLworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisvKiBpbmNsdWRlIGNvbXBpbGVyIHNwZWNpZmljIGludHJpbnNpY3MgKi8KKyNpbmNsdWRlIDxhc20vaWE2NHJlZ3MuaD4KKyNpZmRlZiBfX0lOVEVMX0NPTVBJTEVSCisjIGluY2x1ZGUgPGFzbS9pbnRlbF9pbnRyaW4uaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzbS9nY2NfaW50cmluLmg+CisjZW5kaWYKKworLyoKKyAqIEZvcmNlIGFuIHVucmVzb2x2ZWQgcmVmZXJlbmNlIGlmIHNvbWVvbmUgdHJpZXMgdG8gdXNlCisgKiBpYTY0X2ZldGNoX2FuZF9hZGQoKSB3aXRoIGEgYmFkIHZhbHVlLgorICovCitleHRlcm4gdW5zaWduZWQgbG9uZyBfX2JhZF9zaXplX2Zvcl9pYTY0X2ZldGNoX2FuZF9hZGQgKHZvaWQpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19iYWRfaW5jcmVtZW50X2Zvcl9pYTY0X2ZldGNoX2FuZF9hZGQgKHZvaWQpOworCisjZGVmaW5lIElBNjRfRkVUQ0hBREQodG1wLHYsbixzeixzZW0pCQkJCQkJXAorKHsJCQkJCQkJCQkJXAorCXN3aXRjaCAoc3opIHsJCQkJCQkJCVwKKwkgICAgICBjYXNlIDQ6CQkJCQkJCQlcCisJICAgICAgICB0bXAgPSBpYTY0X2ZldGNoYWRkNF8jI3NlbSgodW5zaWduZWQgaW50ICopIHYsIG4pOwkJXAorCQlicmVhazsJCQkJCQkJCVwKKwkJCQkJCQkJCQlcCisJICAgICAgY2FzZSA4OgkJCQkJCQkJXAorCSAgICAgICAgdG1wID0gaWE2NF9mZXRjaGFkZDhfIyNzZW0oKHVuc2lnbmVkIGxvbmcgKikgdiwgbik7CQlcCisJCWJyZWFrOwkJCQkJCQkJXAorCQkJCQkJCQkJCVwKKwkgICAgICBkZWZhdWx0OgkJCQkJCQkJXAorCQlfX2JhZF9zaXplX2Zvcl9pYTY0X2ZldGNoX2FuZF9hZGQoKTsJCQkJXAorCX0JCQkJCQkJCQlcCit9KQorCisjZGVmaW5lIGlhNjRfZmV0Y2hhZGQoaSx2LHNlbSkJCQkJCQkJCVwKKyh7CQkJCQkJCQkJCQlcCisJX191NjQgX3RtcDsJCQkJCQkJCQlcCisJdm9sYXRpbGUgX190eXBlb2ZfXygqKHYpKSAqX3YgPSAodik7CQkJCQkJXAorCS8qIENhbid0IHVzZSBhIHN3aXRjaCAoKSBoZXJlOiBnY2MgaXNuJ3QgYWx3YXlzIHNtYXJ0IGVub3VnaCBmb3IgdGhhdC4uLiAqLwlcCisJaWYgKChpKSA9PSAtMTYpCQkJCQkJCQkJXAorCQlJQTY0X0ZFVENIQUREKF90bXAsIF92LCAtMTYsIHNpemVvZigqKHYpKSwgc2VtKTsJCQlcCisJZWxzZSBpZiAoKGkpID09IC04KQkJCQkJCQkJXAorCQlJQTY0X0ZFVENIQUREKF90bXAsIF92LCAtOCwgc2l6ZW9mKCoodikpLCBzZW0pOwkJCQlcCisJZWxzZSBpZiAoKGkpID09IC00KQkJCQkJCQkJXAorCQlJQTY0X0ZFVENIQUREKF90bXAsIF92LCAtNCwgc2l6ZW9mKCoodikpLCBzZW0pOwkJCQlcCisJZWxzZSBpZiAoKGkpID09IC0xKQkJCQkJCQkJXAorCQlJQTY0X0ZFVENIQUREKF90bXAsIF92LCAtMSwgc2l6ZW9mKCoodikpLCBzZW0pOwkJCQlcCisJZWxzZSBpZiAoKGkpID09IDEpCQkJCQkJCQlcCisJCUlBNjRfRkVUQ0hBREQoX3RtcCwgX3YsIDEsIHNpemVvZigqKHYpKSwgc2VtKTsJCQkJXAorCWVsc2UgaWYgKChpKSA9PSA0KQkJCQkJCQkJXAorCQlJQTY0X0ZFVENIQUREKF90bXAsIF92LCA0LCBzaXplb2YoKih2KSksIHNlbSk7CQkJCVwKKwllbHNlIGlmICgoaSkgPT0gOCkJCQkJCQkJCVwKKwkJSUE2NF9GRVRDSEFERChfdG1wLCBfdiwgOCwgc2l6ZW9mKCoodikpLCBzZW0pOwkJCQlcCisJZWxzZSBpZiAoKGkpID09IDE2KQkJCQkJCQkJXAorCQlJQTY0X0ZFVENIQUREKF90bXAsIF92LCAxNiwgc2l6ZW9mKCoodikpLCBzZW0pOwkJCQlcCisJZWxzZQkJCQkJCQkJCQlcCisJCV90bXAgPSBfX2JhZF9pbmNyZW1lbnRfZm9yX2lhNjRfZmV0Y2hfYW5kX2FkZCgpOwkJCVwKKwkoX190eXBlb2ZfXygqKHYpKSkgKF90bXApOwkvKiByZXR1cm4gb2xkIHZhbHVlICovCQkJCVwKK30pCisKKyNkZWZpbmUgaWE2NF9mZXRjaF9hbmRfYWRkKGksdikJKGlhNjRfZmV0Y2hhZGQoaSwgdiwgcmVsKSArIChpKSkgLyogcmV0dXJuIG5ldyB2YWx1ZSAqLworCisvKgorICogVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGV4aXN0LCBzbyB5b3UnbGwgZ2V0IGEgbGlua2VyIGVycm9yIGlmCisgKiBzb21ldGhpbmcgdHJpZXMgdG8gZG8gYW4gaW52YWxpZCB4Y2hnKCkuCisgKi8KK2V4dGVybiB2b2lkIGlhNjRfeGNoZ19jYWxsZWRfd2l0aF9iYWRfcG9pbnRlciAodm9pZCk7CisKKyNkZWZpbmUgX194Y2hnKHgscHRyLHNpemUpCQkJCQkJXAorKHsJCQkJCQkJCQlcCisJdW5zaWduZWQgbG9uZyBfX3hjaGdfcmVzdWx0OwkJCQkJXAorCQkJCQkJCQkJXAorCXN3aXRjaCAoc2l6ZSkgewkJCQkJCQlcCisJICAgICAgY2FzZSAxOgkJCQkJCQlcCisJCV9feGNoZ19yZXN1bHQgPSBpYTY0X3hjaGcxKChfX3U4ICopcHRyLCB4KTsJCVwKKwkJYnJlYWs7CQkJCQkJCVwKKwkJCQkJCQkJCVwKKwkgICAgICBjYXNlIDI6CQkJCQkJCVwKKwkJX194Y2hnX3Jlc3VsdCA9IGlhNjRfeGNoZzIoKF9fdTE2ICopcHRyLCB4KTsJCVwKKwkJYnJlYWs7CQkJCQkJCVwKKwkJCQkJCQkJCVwKKwkgICAgICBjYXNlIDQ6CQkJCQkJCVwKKwkJX194Y2hnX3Jlc3VsdCA9IGlhNjRfeGNoZzQoKF9fdTMyICopcHRyLCB4KTsJCVwKKwkJYnJlYWs7CQkJCQkJCVwKKwkJCQkJCQkJCVwKKwkgICAgICBjYXNlIDg6CQkJCQkJCVwKKwkJX194Y2hnX3Jlc3VsdCA9IGlhNjRfeGNoZzgoKF9fdTY0ICopcHRyLCB4KTsJCVwKKwkJYnJlYWs7CQkJCQkJCVwKKwkgICAgICBkZWZhdWx0OgkJCQkJCQlcCisJCWlhNjRfeGNoZ19jYWxsZWRfd2l0aF9iYWRfcG9pbnRlcigpOwkJCVwKKwl9CQkJCQkJCQlcCisJX194Y2hnX3Jlc3VsdDsJCQkJCQkJXAorfSkKKworI2RlZmluZSB4Y2hnKHB0cix4KQkJCQkJCQkgICAgIFwKKyAgKChfX3R5cGVvZl9fKCoocHRyKSkpIF9feGNoZyAoKHVuc2lnbmVkIGxvbmcpICh4KSwgKHB0ciksIHNpemVvZigqKHB0cikpKSkKKworLyoKKyAqIEF0b21pYyBjb21wYXJlIGFuZCBleGNoYW5nZS4gIENvbXBhcmUgT0xEIHdpdGggTUVNLCBpZiBpZGVudGljYWwsCisgKiBzdG9yZSBORVcgaW4gTUVNLiAgUmV0dXJuIHRoZSBpbml0aWFsIHZhbHVlIGluIE1FTS4gIFN1Y2Nlc3MgaXMKKyAqIGluZGljYXRlZCBieSBjb21wYXJpbmcgUkVUVVJOIHdpdGggT0xELgorICovCisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfQ01QWENIRyAxCisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgZXhpc3QsIHNvIHlvdSdsbCBnZXQgYSBsaW5rZXIgZXJyb3IKKyAqIGlmIHNvbWV0aGluZyB0cmllcyB0byBkbyBhbiBpbnZhbGlkIGNtcHhjaGcoKS4KKyAqLworZXh0ZXJuIGxvbmcgaWE2NF9jbXB4Y2hnX2NhbGxlZF93aXRoX2JhZF9wb2ludGVyICh2b2lkKTsKKworI2RlZmluZSBpYTY0X2NtcHhjaGcoc2VtLHB0cixvbGQsbmV3LHNpemUpCQkJCQkJXAorKHsJCQkJCQkJCQkJCVwKKwlfX3U2NCBfb18sIF9yXzsJCQkJCQkJCQlcCisJCQkJCQkJCQkJCVwKKwlzd2l0Y2ggKHNpemUpIHsJCQkJCQkJCQlcCisJICAgICAgY2FzZSAxOiBfb18gPSAoX191OCApIChsb25nKSAob2xkKTsgYnJlYWs7CQkJCVwKKwkgICAgICBjYXNlIDI6IF9vXyA9IChfX3UxNikgKGxvbmcpIChvbGQpOyBicmVhazsJCQkJXAorCSAgICAgIGNhc2UgNDogX29fID0gKF9fdTMyKSAobG9uZykgKG9sZCk7IGJyZWFrOwkJCQlcCisJICAgICAgY2FzZSA4OiBfb18gPSAoX191NjQpIChsb25nKSAob2xkKTsgYnJlYWs7CQkJCVwKKwkgICAgICBkZWZhdWx0OiBicmVhazsJCQkJCQkJCVwKKwl9CQkJCQkJCQkJCVwKKwlzd2l0Y2ggKHNpemUpIHsJCQkJCQkJCQlcCisJICAgICAgY2FzZSAxOgkJCQkJCQkJCVwKKwkgICAgICAJX3JfID0gaWE2NF9jbXB4Y2hnMV8jI3NlbSgoX191OCAqKSBwdHIsIG5ldywgX29fKTsJCQlcCisJCWJyZWFrOwkJCQkJCQkJCVwKKwkJCQkJCQkJCQkJXAorCSAgICAgIGNhc2UgMjoJCQkJCQkJCQlcCisJICAgICAgIF9yXyA9IGlhNjRfY21weGNoZzJfIyNzZW0oKF9fdTE2ICopIHB0ciwgbmV3LCBfb18pOwkJCVwKKwkJYnJlYWs7CQkJCQkJCQkJXAorCQkJCQkJCQkJCQlcCisJICAgICAgY2FzZSA0OgkJCQkJCQkJCVwKKwkgICAgICAJX3JfID0gaWE2NF9jbXB4Y2hnNF8jI3NlbSgoX191MzIgKikgcHRyLCBuZXcsIF9vXyk7CQkJXAorCQlicmVhazsJCQkJCQkJCQlcCisJCQkJCQkJCQkJCVwKKwkgICAgICBjYXNlIDg6CQkJCQkJCQkJXAorCQlfcl8gPSBpYTY0X2NtcHhjaGc4XyMjc2VtKChfX3U2NCAqKSBwdHIsIG5ldywgX29fKTsJCQlcCisJCWJyZWFrOwkJCQkJCQkJCVwKKwkJCQkJCQkJCQkJXAorCSAgICAgIGRlZmF1bHQ6CQkJCQkJCQkJXAorCQlfcl8gPSBpYTY0X2NtcHhjaGdfY2FsbGVkX3dpdGhfYmFkX3BvaW50ZXIoKTsJCQkJXAorCQlicmVhazsJCQkJCQkJCQlcCisJfQkJCQkJCQkJCQlcCisJKF9fdHlwZW9mX18ob2xkKSkgX3JfOwkJCQkJCQkJXAorfSkKKworI2RlZmluZSBjbXB4Y2hnX2FjcShwdHIsbyxuKQlpYTY0X2NtcHhjaGcoYWNxLCAocHRyKSwgKG8pLCAobiksIHNpemVvZigqKHB0cikpKQorI2RlZmluZSBjbXB4Y2hnX3JlbChwdHIsbyxuKQlpYTY0X2NtcHhjaGcocmVsLCAocHRyKSwgKG8pLCAobiksIHNpemVvZigqKHB0cikpKQorCisvKiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG90aGVyIHBsYXRmb3JtczogKi8KKyNkZWZpbmUgY21weGNoZyhwdHIsbyxuKQljbXB4Y2hnX2FjcShwdHIsbyxuKQorCisjaWZkZWYgQ09ORklHX0lBNjRfREVCVUdfQ01QWENIRworIyBkZWZpbmUgQ01QWENIR19CVUdDSEVDS19ERUNMCWludCBfY21weGNoZ19idWdjaGVja19jb3VudCA9IDEyODsKKyMgZGVmaW5lIENNUFhDSEdfQlVHQ0hFQ0sodikJCQkJCQkJXAorICBkbyB7CQkJCQkJCQkJCVwKKwlpZiAoX2NtcHhjaGdfYnVnY2hlY2tfY291bnQtLSA8PSAwKSB7CQkJCQlcCisJCXZvaWQgKmlwOwkJCQkJCQlcCisJCWV4dGVybiBpbnQgcHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsJCQlcCisJCWlwID0gKHZvaWQgKikgaWE2NF9nZXRyZWcoX0lBNjRfUkVHX0lQKTsJCQlcCisJCXByaW50aygiQ01QWENIR19CVUdDSEVDSzogc3R1Y2sgYXQgJXAgb24gd29yZCAlcFxuIiwgaXAsICh2KSk7CVwKKwkJYnJlYWs7CQkJCQkJCQlcCisJfQkJCQkJCQkJCVwKKyAgfSB3aGlsZSAoMCkKKyNlbHNlIC8qICFDT05GSUdfSUE2NF9ERUJVR19DTVBYQ0hHICovCisjIGRlZmluZSBDTVBYQ0hHX0JVR0NIRUNLX0RFQ0wKKyMgZGVmaW5lIENNUFhDSEdfQlVHQ0hFQ0sodikKKyNlbmRpZiAvKiAhQ09ORklHX0lBNjRfREVCVUdfQ01QWENIRyAqLworCisjZW5kaWYKKyNlbmRpZiAvKiBfQVNNX0lBNjRfSU5UUklOU0lDU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L2lvLmggYi9pbmNsdWRlL2FzbS1pYTY0L2lvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDkxZTlkMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvaW8uaApAQCAtMCwwICsxLDQ4NCBAQAorI2lmbmRlZiBfQVNNX0lBNjRfSU9fSAorI2RlZmluZSBfQVNNX0lBNjRfSU9fSAorCisvKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBkZWZpbml0aW9ucyBmb3IgdGhlIGVtdWxhdGVkIElPIGluc3RydWN0aW9ucworICogaW5iL2ludy9pbmwvb3V0Yi9vdXR3L291dGwgYW5kIHRoZSAic3RyaW5nIHZlcnNpb25zIiBvZiB0aGUgc2FtZQorICogKGluc2IvaW5zdy9pbnNsL291dHNiL291dHN3L291dHNsKS4gWW91IGNhbiBhbHNvIHVzZSAicGF1c2luZyIKKyAqIHZlcnNpb25zIG9mIHRoZSBzaW5nbGUtSU8gaW5zdHJ1Y3Rpb25zIChpbmJfcC9pbndfcC8uLikuCisgKgorICogVGhpcyBmaWxlIGlzIG5vdCBtZWFudCB0byBiZSBvYmZ1c2NhdGluZzogaXQncyBqdXN0IGNvbXBsaWNhdGVkIHRvCisgKiAoYSkgaGFuZGxlIGl0IGFsbCBpbiBhIHdheSB0aGF0IG1ha2VzIGdjYyBhYmxlIHRvIG9wdGltaXplIGl0IGFzCisgKiB3ZWxsIGFzIHBvc3NpYmxlIGFuZCAoYikgdHJ5aW5nIHRvIGF2b2lkIHdyaXRpbmcgdGhlIHNhbWUgdGhpbmcKKyAqIG92ZXIgYW5kIG92ZXIgYWdhaW4gd2l0aCBzbGlnaHQgdmFyaWF0aW9ucyBhbmQgcG9zc2libHkgbWFraW5nIGEKKyAqIG1pc3Rha2Ugc29tZXdoZXJlLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OC0yMDAzIEhld2xldHQtUGFja2FyZCBDbworICoJRGF2aWQgTW9zYmVyZ2VyLVRhbmcgPGRhdmlkbUBocGwuaHAuY29tPgorICogQ29weXJpZ2h0IChDKSAxOTk5IEFzaXQgTWFsbGljayA8YXNpdC5rLm1hbGxpY2tAaW50ZWwuY29tPgorICogQ29weXJpZ2h0IChDKSAxOTk5IERvbiBEdWdnZXIgPGRvbi5kdWdnZXJAaW50ZWwuY29tPgorICovCisKKy8qIFdlIGRvbid0IHVzZSBJTyBzbG93ZG93bnMgb24gdGhlIGlhNjQsIGJ1dC4uICovCisjZGVmaW5lIF9fU0xPV19ET1dOX0lPCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgU0xPV19ET1dOX0lPCWRvIHsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBfX0lBNjRfVU5DQUNIRURfT0ZGU0VUCTB4YzAwMDAwMDAwMDAwMDAwMFVMCS8qIHJlZ2lvbiA2ICovCisKKy8qCisgKiBUaGUgbGVnYWN5IEkvTyBzcGFjZSBkZWZpbmVkIGJ5IHRoZSBpYTY0IGFyY2hpdGVjdHVyZSBzdXBwb3J0cyBvbmx5IDY1NTM2IHBvcnRzLCBidXQKKyAqIGxhcmdlIG1hY2hpbmVzIG1heSBoYXZlIG11bHRpcGxlIG90aGVyIEkvTyBzcGFjZXMgc28gd2UgY2FuJ3QgcGxhY2UgYW55IGEgcHJpb3JpIGxpbWl0CisgKiBvbiBJT19TUEFDRV9MSU1JVC4gIFRoZXNlIGFkZGl0aW9uYWwgc3BhY2VzIGFyZSBkZXNjcmliZWQgaW4gQUNQSS4KKyAqLworI2RlZmluZSBJT19TUEFDRV9MSU1JVAkJMHhmZmZmZmZmZmZmZmZmZmZmVUwKKworI2RlZmluZSBNQVhfSU9fU1BBQ0VTX0JJVFMJCTQKKyNkZWZpbmUgTUFYX0lPX1NQQUNFUwkJCSgxVUwgPDwgTUFYX0lPX1NQQUNFU19CSVRTKQorI2RlZmluZSBJT19TUEFDRV9CSVRTCQkJMjQKKyNkZWZpbmUgSU9fU1BBQ0VfU0laRQkJCSgxVUwgPDwgSU9fU1BBQ0VfQklUUykKKworI2RlZmluZSBJT19TUEFDRV9OUihwb3J0KQkJKChwb3J0KSA+PiBJT19TUEFDRV9CSVRTKQorI2RlZmluZSBJT19TUEFDRV9CQVNFKHNwYWNlKQkJKChzcGFjZSkgPDwgSU9fU1BBQ0VfQklUUykKKyNkZWZpbmUgSU9fU1BBQ0VfUE9SVChwb3J0KQkJKChwb3J0KSAmIChJT19TUEFDRV9TSVpFIC0gMSkpCisKKyNkZWZpbmUgSU9fU1BBQ0VfU1BBUlNFX0VOQ09ESU5HKHApCSgoKChwKSA+PiAyKSA8PCAxMikgfCAocCAmIDB4ZmZmKSkKKworc3RydWN0IGlvX3NwYWNlIHsKKwl1bnNpZ25lZCBsb25nIG1taW9fYmFzZTsJLyogYmFzZSBpbiBNTUlPIHNwYWNlICovCisJaW50IHNwYXJzZTsKK307CisKK2V4dGVybiBzdHJ1Y3QgaW9fc3BhY2UgaW9fc3BhY2VbXTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgbnVtX2lvX3NwYWNlczsKKworIyBpZmRlZiBfX0tFUk5FTF9fCisKKy8qCisgKiBBbGwgTU1JTyBpb21lbSBjb29raWVzIGFyZSBpbiByZWdpb24gNjsgYW55dGhpbmcgbGVzcyBpcyBhIFBJTyBjb29raWU6CisgKgkweEN4eHh4eHh4eHh4eHh4eHgJTU1JTyBjb29raWUgKHJldHVybiBmcm9tIGlvcmVtYXApCisgKgkweDAwMDAwMDAwMVNQUFBQUFAJUElPIGNvb2tpZSAoUz1zcGFjZSBudW1iZXIsIFAuLlA9cG9ydCkKKyAqCisgKiBpb3JlYWQvd3JpdGVYKCkgdXNlcyB0aGUgbGVhZGluZyAxIGluIFBJTyBjb29raWVzIChQSU9fT0ZGU0VUKSB0byBjYXRjaAorICogY29kZSB0aGF0IHVzZXMgYmFyZSBwb3J0IG51bWJlcnMgd2l0aG91dCB0aGUgcHJlcmVxdWlzaXRlIHBjaV9pb21hcCgpLgorICovCisjZGVmaW5lIFBJT19PRkZTRVQJCSgxVUwgPDwgKE1BWF9JT19TUEFDRVNfQklUUyArIElPX1NQQUNFX0JJVFMpKQorI2RlZmluZSBQSU9fTUFTSwkJKFBJT19PRkZTRVQgLSAxKQorI2RlZmluZSBQSU9fUkVTRVJWRUQJCV9fSUE2NF9VTkNBQ0hFRF9PRkZTRVQKKyNkZWZpbmUgSEFWRV9BUkNIX1BJT19TSVpFCisKKyNpbmNsdWRlIDxhc20vaW50cmluc2ljcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvaW9tYXAuaD4KKworLyoKKyAqIENoYW5nZSB2aXJ0dWFsIGFkZHJlc3NlcyB0byBwaHlzaWNhbCBhZGRyZXNzZXMgYW5kIHZ2LgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK3ZpcnRfdG9fcGh5cyAodm9sYXRpbGUgdm9pZCAqYWRkcmVzcykKK3sKKwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpIGFkZHJlc3MgLSBQQUdFX09GRlNFVDsKK30KKworc3RhdGljIGlubGluZSB2b2lkKgorcGh5c190b192aXJ0ICh1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisJcmV0dXJuICh2b2lkICopIChhZGRyZXNzICsgUEFHRV9PRkZTRVQpOworfQorCisjZGVmaW5lIEFSQ0hfSEFTX1ZBTElEX1BIWVNfQUREUl9SQU5HRQorZXh0ZXJuIGludCB2YWxpZF9waHlzX2FkZHJfcmFuZ2UgKHVuc2lnbmVkIGxvbmcgYWRkciwgc2l6ZV90ICpjb3VudCk7IC8qIGVmaS5jICovCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIHR3byBtYWNyb3MgYXJlIGRlcHJlY2F0ZWQgYW5kIHNjaGVkdWxlZCBmb3IgcmVtb3ZhbC4KKyAqIFBsZWFzZSB1c2UgdGhlIFBDSS1ETUEgaW50ZXJmYWNlIGRlZmluZWQgaW4gPGFzbS9wY2kuaD4gaW5zdGVhZC4KKyAqLworI2RlZmluZSBidXNfdG9fdmlydAlwaHlzX3RvX3ZpcnQKKyNkZWZpbmUgdmlydF90b19idXMJdmlydF90b19waHlzCisjZGVmaW5lIHBhZ2VfdG9fYnVzCXBhZ2VfdG9fcGh5cworCisjIGVuZGlmIC8qIEtFUk5FTCAqLworCisvKgorICogTWVtb3J5IGZlbmNlIHcvYWNjZXB0LiAgVGhpcyBzaG91bGQgbmV2ZXIgYmUgdXNlZCBpbiBjb2RlIHRoYXQgaXMKKyAqIG5vdCBJQS02NCBzcGVjaWZpYy4KKyAqLworI2RlZmluZSBfX2lhNjRfbWZfYSgpCWlhNjRfbWZhKCkKKworLyoqCisgKiBfX19pYTY0X21taW93YiAtIEkvTyB3cml0ZSBiYXJyaWVyCisgKgorICogRW5zdXJlIG9yZGVyaW5nIG9mIEkvTyBzcGFjZSB3cml0ZXMuICBUaGlzIHdpbGwgbWFrZSBzdXJlIHRoYXQgd3JpdGVzCisgKiBmb2xsb3dpbmcgdGhlIGJhcnJpZXIgd2lsbCBhcnJpdmUgYWZ0ZXIgYWxsIHByZXZpb3VzIHdyaXRlcy4gIEZvciBtb3N0CisgKiBpYTY0IHBsYXRmb3JtcywgdGhpcyBpcyBhIHNpbXBsZSAnbWYuYScgaW5zdHJ1Y3Rpb24uCisgKgorICogU2VlIERvY3VtZW50YXRpb24vRG9jQm9vay9kZXZpY2Vpb2Jvb2sudG1wbCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIF9fX2lhNjRfbW1pb3diKHZvaWQpCit7CisJaWE2NF9tZmEoKTsKK30KKworc3RhdGljIGlubGluZSBjb25zdCB1bnNpZ25lZCBsb25nCitfX2lhNjRfZ2V0X2lvX3BvcnRfYmFzZSAodm9pZCkKK3sKKwlleHRlcm4gdW5zaWduZWQgbG9uZyBpYTY0X2lvYmFzZTsKKworCXJldHVybiBpYTY0X2lvYmFzZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkKgorX19pYTY0X21rX2lvX2FkZHIgKHVuc2lnbmVkIGxvbmcgcG9ydCkKK3sKKwlzdHJ1Y3QgaW9fc3BhY2UgKnNwYWNlOworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OworCisJc3BhY2UgPSAmaW9fc3BhY2VbSU9fU1BBQ0VfTlIocG9ydCldOworCXBvcnQgPSBJT19TUEFDRV9QT1JUKHBvcnQpOworCWlmIChzcGFjZS0+c3BhcnNlKQorCQlvZmZzZXQgPSBJT19TUEFDRV9TUEFSU0VfRU5DT0RJTkcocG9ydCk7CisJZWxzZQorCQlvZmZzZXQgPSBwb3J0OworCisJcmV0dXJuICh2b2lkICopIChzcGFjZS0+bW1pb19iYXNlIHwgb2Zmc2V0KTsKK30KKworI2RlZmluZSBfX2lhNjRfaW5iCV9fX2lhNjRfaW5iCisjZGVmaW5lIF9faWE2NF9pbncJX19faWE2NF9pbncKKyNkZWZpbmUgX19pYTY0X2lubAlfX19pYTY0X2lubAorI2RlZmluZSBfX2lhNjRfb3V0YglfX19pYTY0X291dGIKKyNkZWZpbmUgX19pYTY0X291dHcJX19faWE2NF9vdXR3CisjZGVmaW5lIF9faWE2NF9vdXRsCV9fX2lhNjRfb3V0bAorI2RlZmluZSBfX2lhNjRfcmVhZGIJX19faWE2NF9yZWFkYgorI2RlZmluZSBfX2lhNjRfcmVhZHcJX19faWE2NF9yZWFkdworI2RlZmluZSBfX2lhNjRfcmVhZGwJX19faWE2NF9yZWFkbAorI2RlZmluZSBfX2lhNjRfcmVhZHEJX19faWE2NF9yZWFkcQorI2RlZmluZSBfX2lhNjRfcmVhZGJfcmVsYXhlZAlfX19pYTY0X3JlYWRiCisjZGVmaW5lIF9faWE2NF9yZWFkd19yZWxheGVkCV9fX2lhNjRfcmVhZHcKKyNkZWZpbmUgX19pYTY0X3JlYWRsX3JlbGF4ZWQJX19faWE2NF9yZWFkbAorI2RlZmluZSBfX2lhNjRfcmVhZHFfcmVsYXhlZAlfX19pYTY0X3JlYWRxCisjZGVmaW5lIF9faWE2NF93cml0ZWIJX19faWE2NF93cml0ZWIKKyNkZWZpbmUgX19pYTY0X3dyaXRldwlfX19pYTY0X3dyaXRldworI2RlZmluZSBfX2lhNjRfd3JpdGVsCV9fX2lhNjRfd3JpdGVsCisjZGVmaW5lIF9faWE2NF93cml0ZXEJX19faWE2NF93cml0ZXEKKyNkZWZpbmUgX19pYTY0X21taW93YglfX19pYTY0X21taW93YgorCisvKgorICogRm9yIHRoZSBpbi9vdXQgcm91dGluZXMsIHdlIG5lZWQgdG8gZG8gIm1mLmEiIF9hZnRlcl8gZG9pbmcgdGhlIEkvTyBhY2Nlc3MgdG8gZW5zdXJlCisgKiB0aGF0IHRoZSBhY2Nlc3MgaGFzIGNvbXBsZXRlZCBiZWZvcmUgZXhlY3V0aW5nIG90aGVyIEkvTyBhY2Nlc3Nlcy4gIFNpbmNlIHdlJ3JlIGRvaW5nCisgKiB0aGUgYWNjZXNzZXMgdGhyb3VnaCBhbiB1bmNhY2hhYmxlIChVQykgdHJhbnNsYXRpb24sIHRoZSBDUFUgd2lsbCBleGVjdXRlIHRoZW0gaW4KKyAqIHByb2dyYW0gb3JkZXIuICBIb3dldmVyLCB3ZSBzdGlsbCBuZWVkIHRvIHRlbGwgdGhlIGNvbXBpbGVyIG5vdCB0byBzaHVmZmxlIHRoZW0gYXJvdW5kCisgKiBkdXJpbmcgb3B0aW1pemF0aW9uLCB3aGljaCBpcyB3aHkgd2UgdXNlICJ2b2xhdGlsZSIgcG9pbnRlcnMuCisgKi8KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKK19fX2lhNjRfaW5iICh1bnNpZ25lZCBsb25nIHBvcnQpCit7CisJdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqYWRkciA9IF9faWE2NF9ta19pb19hZGRyKHBvcnQpOworCXVuc2lnbmVkIGNoYXIgcmV0OworCisJcmV0ID0gKmFkZHI7CisJX19pYTY0X21mX2EoKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAorX19faWE2NF9pbncgKHVuc2lnbmVkIGxvbmcgcG9ydCkKK3sKKwl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqYWRkciA9IF9faWE2NF9ta19pb19hZGRyKHBvcnQpOworCXVuc2lnbmVkIHNob3J0IHJldDsKKworCXJldCA9ICphZGRyOworCV9faWE2NF9tZl9hKCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKK19fX2lhNjRfaW5sICh1bnNpZ25lZCBsb25nIHBvcnQpCit7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50ICphZGRyID0gX19pYTY0X21rX2lvX2FkZHIocG9ydCk7CisJdW5zaWduZWQgaW50IHJldDsKKworCXJldCA9ICphZGRyOworCV9faWE2NF9tZl9hKCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitfX19pYTY0X291dGIgKHVuc2lnbmVkIGNoYXIgdmFsLCB1bnNpZ25lZCBsb25nIHBvcnQpCit7CisJdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqYWRkciA9IF9faWE2NF9ta19pb19hZGRyKHBvcnQpOworCisJKmFkZHIgPSB2YWw7CisJX19pYTY0X21mX2EoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitfX19pYTY0X291dHcgKHVuc2lnbmVkIHNob3J0IHZhbCwgdW5zaWduZWQgbG9uZyBwb3J0KQoreworCXZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICphZGRyID0gX19pYTY0X21rX2lvX2FkZHIocG9ydCk7CisKKwkqYWRkciA9IHZhbDsKKwlfX2lhNjRfbWZfYSgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK19fX2lhNjRfb3V0bCAodW5zaWduZWQgaW50IHZhbCwgdW5zaWduZWQgbG9uZyBwb3J0KQoreworCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqYWRkciA9IF9faWE2NF9ta19pb19hZGRyKHBvcnQpOworCisJKmFkZHIgPSB2YWw7CisJX19pYTY0X21mX2EoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitfX2luc2IgKHVuc2lnbmVkIGxvbmcgcG9ydCwgdm9pZCAqZHN0LCB1bnNpZ25lZCBsb25nIGNvdW50KQoreworCXVuc2lnbmVkIGNoYXIgKmRwID0gZHN0OworCisJd2hpbGUgKGNvdW50LS0pCisJCSpkcCsrID0gcGxhdGZvcm1faW5iKHBvcnQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK19faW5zdyAodW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICpkc3QsIHVuc2lnbmVkIGxvbmcgY291bnQpCit7CisJdW5zaWduZWQgc2hvcnQgKmRwID0gZHN0OworCisJd2hpbGUgKGNvdW50LS0pCisJCSpkcCsrID0gcGxhdGZvcm1faW53KHBvcnQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK19faW5zbCAodW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICpkc3QsIHVuc2lnbmVkIGxvbmcgY291bnQpCit7CisJdW5zaWduZWQgaW50ICpkcCA9IGRzdDsKKworCXdoaWxlIChjb3VudC0tKQorCQkqZHArKyA9IHBsYXRmb3JtX2lubChwb3J0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitfX291dHNiICh1bnNpZ25lZCBsb25nIHBvcnQsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgbG9uZyBjb3VudCkKK3sKKwljb25zdCB1bnNpZ25lZCBjaGFyICpzcCA9IHNyYzsKKworCXdoaWxlIChjb3VudC0tKQorCQlwbGF0Zm9ybV9vdXRiKCpzcCsrLCBwb3J0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitfX291dHN3ICh1bnNpZ25lZCBsb25nIHBvcnQsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgbG9uZyBjb3VudCkKK3sKKwljb25zdCB1bnNpZ25lZCBzaG9ydCAqc3AgPSBzcmM7CisKKwl3aGlsZSAoY291bnQtLSkKKwkJcGxhdGZvcm1fb3V0dygqc3ArKywgcG9ydCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorX19vdXRzbCAodW5zaWduZWQgbG9uZyBwb3J0LCBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGxvbmcgY291bnQpCit7CisJY29uc3QgdW5zaWduZWQgaW50ICpzcCA9IHNyYzsKKworCXdoaWxlIChjb3VudC0tKQorCQlwbGF0Zm9ybV9vdXRsKCpzcCsrLCBwb3J0KTsKK30KKworLyoKKyAqIFVuZm9ydHVuYXRlbHksIHNvbWUgcGxhdGZvcm1zIGFyZSBicm9rZW4gYW5kIGRvIG5vdCBmb2xsb3cgdGhlIElBLTY0IGFyY2hpdGVjdHVyZQorICogc3BlY2lmaWNhdGlvbiByZWdhcmRpbmcgbGVnYWN5IEkvTyBzdXBwb3J0LiAgVGh1cywgd2UgaGF2ZSB0byBtYWtlIHRoZXNlIG9wZXJhdGlvbnMKKyAqIHBsYXRmb3JtIGRlcGVuZGVudC4uLgorICovCisjZGVmaW5lIF9faW5iCQlwbGF0Zm9ybV9pbmIKKyNkZWZpbmUgX19pbncJCXBsYXRmb3JtX2ludworI2RlZmluZSBfX2lubAkJcGxhdGZvcm1faW5sCisjZGVmaW5lIF9fb3V0YgkJcGxhdGZvcm1fb3V0YgorI2RlZmluZSBfX291dHcJCXBsYXRmb3JtX291dHcKKyNkZWZpbmUgX19vdXRsCQlwbGF0Zm9ybV9vdXRsCisjZGVmaW5lIF9fbW1pb3diCXBsYXRmb3JtX21taW93YgorCisjZGVmaW5lIGluYihwKQkJX19pbmIocCkKKyNkZWZpbmUgaW53KHApCQlfX2ludyhwKQorI2RlZmluZSBpbmwocCkJCV9faW5sKHApCisjZGVmaW5lIGluc2IocCxkLGMpCV9faW5zYihwLGQsYykKKyNkZWZpbmUgaW5zdyhwLGQsYykJX19pbnN3KHAsZCxjKQorI2RlZmluZSBpbnNsKHAsZCxjKQlfX2luc2wocCxkLGMpCisjZGVmaW5lIG91dGIodixwKQlfX291dGIodixwKQorI2RlZmluZSBvdXR3KHYscCkJX19vdXR3KHYscCkKKyNkZWZpbmUgb3V0bCh2LHApCV9fb3V0bCh2LHApCisjZGVmaW5lIG91dHNiKHAscyxjKQlfX291dHNiKHAscyxjKQorI2RlZmluZSBvdXRzdyhwLHMsYykJX19vdXRzdyhwLHMsYykKKyNkZWZpbmUgb3V0c2wocCxzLGMpCV9fb3V0c2wocCxzLGMpCisjZGVmaW5lIG1taW93YigpCV9fbW1pb3diKCkKKworLyoKKyAqIFRoZSBhZGRyZXNzIHBhc3NlZCB0byB0aGVzZSBmdW5jdGlvbnMgYXJlIGlvcmVtYXAoKXBlZCBhbHJlYWR5LgorICoKKyAqIFdlIG5lZWQgdGhlc2UgdG8gYmUgbWFjaGluZSB2ZWN0b3JzIHNpbmNlIHNvbWUgcGxhdGZvcm1zIGRvbid0IHByb3ZpZGUKKyAqIERNQSBjb2hlcmVuY2UgdmlhIFBJTyByZWFkcyAoUENJIGRyaXZlcnMgYW5kIHRoZSBzcGVjIGltcGx5IHRoYXQgdGhpcyBpcworICogYSBnb29kIGlkZWEpLiAgV3JpdGVzIGFyZSBvayB0aG91Z2ggZm9yIGFsbCBleGlzdGluZyBpYTY0IHBsYXRmb3JtcyAoYW5kCisgKiBob3BlZnVsbHkgaXQnbGwgc3RheSB0aGF0IHdheSkuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhcgorX19faWE2NF9yZWFkYiAoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCXJldHVybiAqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgX19mb3JjZSAqKWFkZHI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQKK19fX2lhNjRfcmVhZHcgKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlyZXR1cm4gKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBfX2ZvcmNlICopYWRkcjsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKK19fX2lhNjRfcmVhZGwgKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlyZXR1cm4gKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgX19mb3JjZSAqKSBhZGRyOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK19fX2lhNjRfcmVhZHEgKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlyZXR1cm4gKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nIF9fZm9yY2UgKikgYWRkcjsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitfX3dyaXRlYiAodW5zaWduZWQgY2hhciB2YWwsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwkqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgX19mb3JjZSAqKSBhZGRyID0gdmFsOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK19fd3JpdGV3ICh1bnNpZ25lZCBzaG9ydCB2YWwsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwkqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IF9fZm9yY2UgKikgYWRkciA9IHZhbDsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitfX3dyaXRlbCAodW5zaWduZWQgaW50IHZhbCwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCSoodm9sYXRpbGUgdW5zaWduZWQgaW50IF9fZm9yY2UgKikgYWRkciA9IHZhbDsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitfX3dyaXRlcSAodW5zaWduZWQgbG9uZyB2YWwsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwkqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgX19mb3JjZSAqKSBhZGRyID0gdmFsOworfQorCisjZGVmaW5lIF9fcmVhZGIJCXBsYXRmb3JtX3JlYWRiCisjZGVmaW5lIF9fcmVhZHcJCXBsYXRmb3JtX3JlYWR3CisjZGVmaW5lIF9fcmVhZGwJCXBsYXRmb3JtX3JlYWRsCisjZGVmaW5lIF9fcmVhZHEJCXBsYXRmb3JtX3JlYWRxCisjZGVmaW5lIF9fcmVhZGJfcmVsYXhlZAlwbGF0Zm9ybV9yZWFkYl9yZWxheGVkCisjZGVmaW5lIF9fcmVhZHdfcmVsYXhlZAlwbGF0Zm9ybV9yZWFkd19yZWxheGVkCisjZGVmaW5lIF9fcmVhZGxfcmVsYXhlZAlwbGF0Zm9ybV9yZWFkbF9yZWxheGVkCisjZGVmaW5lIF9fcmVhZHFfcmVsYXhlZAlwbGF0Zm9ybV9yZWFkcV9yZWxheGVkCisKKyNkZWZpbmUgcmVhZGIoYSkJX19yZWFkYigoYSkpCisjZGVmaW5lIHJlYWR3KGEpCV9fcmVhZHcoKGEpKQorI2RlZmluZSByZWFkbChhKQlfX3JlYWRsKChhKSkKKyNkZWZpbmUgcmVhZHEoYSkJX19yZWFkcSgoYSkpCisjZGVmaW5lIHJlYWRiX3JlbGF4ZWQoYSkJX19yZWFkYl9yZWxheGVkKChhKSkKKyNkZWZpbmUgcmVhZHdfcmVsYXhlZChhKQlfX3JlYWR3X3JlbGF4ZWQoKGEpKQorI2RlZmluZSByZWFkbF9yZWxheGVkKGEpCV9fcmVhZGxfcmVsYXhlZCgoYSkpCisjZGVmaW5lIHJlYWRxX3JlbGF4ZWQoYSkJX19yZWFkcV9yZWxheGVkKChhKSkKKyNkZWZpbmUgX19yYXdfcmVhZGIJcmVhZGIKKyNkZWZpbmUgX19yYXdfcmVhZHcJcmVhZHcKKyNkZWZpbmUgX19yYXdfcmVhZGwJcmVhZGwKKyNkZWZpbmUgX19yYXdfcmVhZHEJcmVhZHEKKyNkZWZpbmUgX19yYXdfcmVhZGJfcmVsYXhlZAlyZWFkYl9yZWxheGVkCisjZGVmaW5lIF9fcmF3X3JlYWR3X3JlbGF4ZWQJcmVhZHdfcmVsYXhlZAorI2RlZmluZSBfX3Jhd19yZWFkbF9yZWxheGVkCXJlYWRsX3JlbGF4ZWQKKyNkZWZpbmUgX19yYXdfcmVhZHFfcmVsYXhlZAlyZWFkcV9yZWxheGVkCisjZGVmaW5lIHdyaXRlYih2LGEpCV9fd3JpdGViKCh2KSwgKGEpKQorI2RlZmluZSB3cml0ZXcodixhKQlfX3dyaXRldygodiksIChhKSkKKyNkZWZpbmUgd3JpdGVsKHYsYSkJX193cml0ZWwoKHYpLCAoYSkpCisjZGVmaW5lIHdyaXRlcSh2LGEpCV9fd3JpdGVxKCh2KSwgKGEpKQorI2RlZmluZSBfX3Jhd193cml0ZWIJd3JpdGViCisjZGVmaW5lIF9fcmF3X3dyaXRldwl3cml0ZXcKKyNkZWZpbmUgX19yYXdfd3JpdGVsCXdyaXRlbAorI2RlZmluZSBfX3Jhd193cml0ZXEJd3JpdGVxCisKKyNpZm5kZWYgaW5iX3AKKyMgZGVmaW5lIGluYl9wCQlpbmIKKyNlbmRpZgorI2lmbmRlZiBpbndfcAorIyBkZWZpbmUgaW53X3AJCWludworI2VuZGlmCisjaWZuZGVmIGlubF9wCisjIGRlZmluZSBpbmxfcAkJaW5sCisjZW5kaWYKKworI2lmbmRlZiBvdXRiX3AKKyMgZGVmaW5lIG91dGJfcAkJb3V0YgorI2VuZGlmCisjaWZuZGVmIG91dHdfcAorIyBkZWZpbmUgb3V0d19wCQlvdXR3CisjZW5kaWYKKyNpZm5kZWYgb3V0bF9wCisjIGRlZmluZSBvdXRsX3AJCW91dGwKKyNlbmRpZgorCisvKgorICogQW4gImFkZHJlc3MiIGluIElPIG1lbW9yeSBzcGFjZSBpcyBub3QgY2xlYXJseSBlaXRoZXIgYW4gaW50ZWdlciBvciBhIHBvaW50ZXIuIFdlIHdpbGwKKyAqIGFjY2VwdCBib3RoLCB0aHVzIHRoZSBjYXN0cy4KKyAqCisgKiBPbiBpYS02NCwgd2UgYWNjZXNzIHRoZSBwaHlzaWNhbCBJL08gbWVtb3J5IHNwYWNlIHRocm91Z2ggdGhlIHVuY2FjaGVkIGtlcm5lbCByZWdpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbWVtICoKK2lvcmVtYXAgKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJcmV0dXJuICh2b2lkIF9faW9tZW0gKikgKF9fSUE2NF9VTkNBQ0hFRF9PRkZTRVQgfCAob2Zmc2V0KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAoraW91bm1hcCAodm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworfQorCisjZGVmaW5lIGlvcmVtYXBfbm9jYWNoZShvLHMpCWlvcmVtYXAobyxzKQorCisjIGlmZGVmIF9fS0VSTkVMX18KKworLyoKKyAqIFN0cmluZyB2ZXJzaW9uIG9mIElPIG1lbW9yeSBhY2Nlc3Mgb3BzOgorICovCitleHRlcm4gdm9pZCBtZW1jcHlfZnJvbWlvKHZvaWQgKmRzdCwgY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICpzcmMsIGxvbmcgbik7CitleHRlcm4gdm9pZCBtZW1jcHlfdG9pbyh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBsb25nIG4pOworZXh0ZXJuIHZvaWQgbWVtc2V0X2lvKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqcywgaW50IGMsIGxvbmcgbik7CisKKyNkZWZpbmUgZG1hX2NhY2hlX2ludihfc3RhcnQsX3NpemUpICAgICAgICAgICAgIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZG1hX2NhY2hlX3diYWNrKF9zdGFydCxfc2l6ZSkgICAgICAgICAgIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZG1hX2NhY2hlX3diYWNrX2ludihfc3RhcnQsX3NpemUpICAgICAgIGRvIHsgfSB3aGlsZSAoMCkKKworIyBlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKy8qCisgKiBFbmFibGluZyBCSU9fVk1FUkdFX0JPVU5EQVJZIGZvcmNlcyB1cyB0byB0dXJuIG9mZiBJL08gTU1VIGJ5cGFzc2luZy4gIEl0IGlzIHNhaWQgdGhhdAorICogQklPLWxldmVsIHZpcnR1YWwgbWVyZ2luZyBjYW4gZ2l2ZSB1cCB0byA0JSBwZXJmb3JtYW5jZSBib29zdCAobm90IHZlcmlmaWVkIGZvciBpYTY0KS4KKyAqIE9uIHRoZSBvdGhlciBoYW5kLCB3ZSBrbm93IHRoYXQgSS9PIE1NVSBieXBhc3NpbmcgZ2l2ZXMgfjglIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50IG9uCisgKiBTUEVDd2ViLWxpa2Ugd29ya2xvYWRzIG9uIHp4MS1iYXNlZCBtYWNoaW5lcy4gIFRodXMsIGZvciBub3cgd2UgZmF2b3IgSS9PIE1NVSBieXBhc3NpbmcKKyAqIG92ZXIgQklPLWxldmVsIHZpcnR1YWwgbWVyZ2luZy4KKyAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaWE2NF9tYXhfaW9tbXVfbWVyZ2VfbWFzazsKKyNpZiAxCisjZGVmaW5lIEJJT19WTUVSR0VfQk9VTkRBUlkJMAorI2Vsc2UKKy8qCisgKiBJdCBtYWtlcyBubyBzZW5zZSBhdCBhbGwgdG8gaGF2ZSB0aGlzIEJJT19WTUVSR0VfQk9VTkRBUlkgbWFjcm8gaGVyZS4gIFNob3VsZCBiZQorICogcmVwbGFjZWQgYnkgZG1hX21lcmdlX21hc2soKSBvciBzb21ldGhpbmcgb2YgdGhhdCBzb3J0LiAgTm90ZTogdGhlIG9ubHkgd2F5CisgKiBCSU9fVk1FUkdFX0JPVU5EQVJZIGlzIHVzZWQgaXMgdG8gbWFzayBvZmYgYml0cy4gIEVmZmVjdGl2ZWx5LCBvdXIgZGVmaW5pdGlvbiBnZXRzCisgKiBleHBhbmRlZCBpbnRvOgorICoKKyAqCWFkZHIgJiAoKGlhNjRfbWF4X2lvbW11X21lcmdlX21hc2sgKyAxKSAtIDEpID09IChhZGRyICYgaWE2NF9tYXhfaW9tbXVfdm1lcmdlX21hc2spCisgKgorICogd2hpY2ggaXMgcHJlY2lzZWx5IHdoYXQgd2Ugd2FudC4KKyAqLworI2RlZmluZSBCSU9fVk1FUkdFX0JPVU5EQVJZCShpYTY0X21heF9pb21tdV9tZXJnZV9tYXNrICsgMSkKKyNlbmRpZgorCisjZW5kaWYgLyogX0FTTV9JQTY0X0lPX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvaW9jdGwuaCBiL2luY2x1ZGUvYXNtLWlhNjQvaW9jdGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTljYzI0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taWE2NC9pb2N0bC5oCkBAIC0wLDAgKzEsNzcgQEAKKyNpZm5kZWYgX0FTTV9JQTY0X0lPQ1RMX0gKKyNkZWZpbmUgX0FTTV9JQTY0X0lPQ1RMX0gKKworLyoKKyAqIEJhc2VkIG9uIDxhc20taTM4Ni9pb2N0bC5oPi4KKyAqCisgKiBNb2RpZmllZCAxOTk4LCAxOTk5CisgKglEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+LCBIZXdsZXR0LVBhY2thcmQgQ28KKyAqLworCisvKiBpb2N0bCBjb21tYW5kIGVuY29kaW5nOiAzMiBiaXRzIHRvdGFsLCBjb21tYW5kIGluIGxvd2VyIDE2IGJpdHMsCisgKiBzaXplIG9mIHRoZSBwYXJhbWV0ZXIgc3RydWN0dXJlIGluIHRoZSBsb3dlciAxNCBiaXRzIG9mIHRoZQorICogdXBwZXIgMTYgYml0cy4KKyAqIEVuY29kaW5nIHRoZSBzaXplIG9mIHRoZSBwYXJhbWV0ZXIgc3RydWN0dXJlIGluIHRoZSBpb2N0bCByZXF1ZXN0CisgKiBpcyB1c2VmdWwgZm9yIGNhdGNoaW5nIHByb2dyYW1zIGNvbXBpbGVkIHdpdGggb2xkIHZlcnNpb25zCisgKiBhbmQgdG8gYXZvaWQgb3ZlcndyaXRpbmcgdXNlciBzcGFjZSBvdXRzaWRlIHRoZSB1c2VyIGJ1ZmZlciBhcmVhLgorICogVGhlIGhpZ2hlc3QgMiBiaXRzIGFyZSByZXNlcnZlZCBmb3IgaW5kaWNhdGluZyB0aGUgYGBhY2Nlc3MgbW9kZScnLgorICogTk9URTogVGhpcyBsaW1pdHMgdGhlIG1heCBwYXJhbWV0ZXIgc2l6ZSB0byAxNmtCIC0xICEKKyAqLworCisvKgorICogVGhlIGZvbGxvd2luZyBpcyBmb3IgY29tcGF0aWJpbGl0eSBhY3Jvc3MgdGhlIHZhcmlvdXMgTGludXgKKyAqIHBsYXRmb3Jtcy4gIFRoZSBpYTY0IGlvY3RsIG51bWJlcmluZyBzY2hlbWUgZG9lc24ndCByZWFsbHkgZW5mb3JjZQorICogYSB0eXBlIGZpZWxkLiAgRGUgZmFjdG8sIGhvd2V2ZXIsIHRoZSB0b3AgOCBiaXRzIG9mIHRoZSBsb3dlciAxNgorICogYml0cyBhcmUgaW5kZWVkIHVzZWQgYXMgYSB0eXBlIGZpZWxkLCBzbyB3ZSBtaWdodCBqdXN0IGFzIHdlbGwgbWFrZQorICogdGhpcyBleHBsaWNpdCBoZXJlLiAgUGxlYXNlIGJlIHN1cmUgdG8gdXNlIHRoZSBkZWNvZGluZyBtYWNyb3MKKyAqIGJlbG93IGZyb20gbm93IG9uLgorICovCisjZGVmaW5lIF9JT0NfTlJCSVRTCTgKKyNkZWZpbmUgX0lPQ19UWVBFQklUUwk4CisjZGVmaW5lIF9JT0NfU0laRUJJVFMJMTQKKyNkZWZpbmUgX0lPQ19ESVJCSVRTCTIKKworI2RlZmluZSBfSU9DX05STUFTSwkoKDEgPDwgX0lPQ19OUkJJVFMpLTEpCisjZGVmaW5lIF9JT0NfVFlQRU1BU0sJKCgxIDw8IF9JT0NfVFlQRUJJVFMpLTEpCisjZGVmaW5lIF9JT0NfU0laRU1BU0sJKCgxIDw8IF9JT0NfU0laRUJJVFMpLTEpCisjZGVmaW5lIF9JT0NfRElSTUFTSwkoKDEgPDwgX0lPQ19ESVJCSVRTKS0xKQorCisjZGVmaW5lIF9JT0NfTlJTSElGVAkwCisjZGVmaW5lIF9JT0NfVFlQRVNISUZUCShfSU9DX05SU0hJRlQrX0lPQ19OUkJJVFMpCisjZGVmaW5lIF9JT0NfU0laRVNISUZUCShfSU9DX1RZUEVTSElGVCtfSU9DX1RZUEVCSVRTKQorI2RlZmluZSBfSU9DX0RJUlNISUZUCShfSU9DX1NJWkVTSElGVCtfSU9DX1NJWkVCSVRTKQorCisvKgorICogRGlyZWN0aW9uIGJpdHMuCisgKi8KKyNkZWZpbmUgX0lPQ19OT05FCTBVCisjZGVmaW5lIF9JT0NfV1JJVEUJMVUKKyNkZWZpbmUgX0lPQ19SRUFECTJVCisKKyNkZWZpbmUgX0lPQyhkaXIsdHlwZSxucixzaXplKSBcCisJKCgoZGlyKSAgPDwgX0lPQ19ESVJTSElGVCkgfCBcCisJICgodHlwZSkgPDwgX0lPQ19UWVBFU0hJRlQpIHwgXAorCSAoKG5yKSAgIDw8IF9JT0NfTlJTSElGVCkgfCBcCisJICgoc2l6ZSkgPDwgX0lPQ19TSVpFU0hJRlQpKQorCisvKiB1c2VkIHRvIGNyZWF0ZSBudW1iZXJzICovCisjZGVmaW5lIF9JTyh0eXBlLG5yKQkJX0lPQyhfSU9DX05PTkUsKHR5cGUpLChuciksMCkKKyNkZWZpbmUgX0lPUih0eXBlLG5yLHNpemUpCV9JT0MoX0lPQ19SRUFELCh0eXBlKSwobnIpLHNpemVvZihzaXplKSkKKyNkZWZpbmUgX0lPVyh0eXBlLG5yLHNpemUpCV9JT0MoX0lPQ19XUklURSwodHlwZSksKG5yKSxzaXplb2Yoc2l6ZSkpCisjZGVmaW5lIF9JT1dSKHR5cGUsbnIsc2l6ZSkJX0lPQyhfSU9DX1JFQUR8X0lPQ19XUklURSwodHlwZSksKG5yKSxzaXplb2Yoc2l6ZSkpCisKKy8qIHVzZWQgdG8gZGVjb2RlIGlvY3RsIG51bWJlcnMuLiAqLworI2RlZmluZSBfSU9DX0RJUihucikJCSgoKG5yKSA+PiBfSU9DX0RJUlNISUZUKSAmIF9JT0NfRElSTUFTSykKKyNkZWZpbmUgX0lPQ19UWVBFKG5yKQkJKCgobnIpID4+IF9JT0NfVFlQRVNISUZUKSAmIF9JT0NfVFlQRU1BU0spCisjZGVmaW5lIF9JT0NfTlIobnIpCQkoKChucikgPj4gX0lPQ19OUlNISUZUKSAmIF9JT0NfTlJNQVNLKQorI2RlZmluZSBfSU9DX1NJWkUobnIpCQkoKChucikgPj4gX0lPQ19TSVpFU0hJRlQpICYgX0lPQ19TSVpFTUFTSykKKworLyogLi4uYW5kIGZvciB0aGUgZHJpdmVycy9zb3VuZCBmaWxlcy4uLiAqLworCisjZGVmaW5lIElPQ19JTgkJKF9JT0NfV1JJVEUgPDwgX0lPQ19ESVJTSElGVCkKKyNkZWZpbmUgSU9DX09VVAkJKF9JT0NfUkVBRCA8PCBfSU9DX0RJUlNISUZUKQorI2RlZmluZSBJT0NfSU5PVVQJKChfSU9DX1dSSVRFfF9JT0NfUkVBRCkgPDwgX0lPQ19ESVJTSElGVCkKKyNkZWZpbmUgSU9DU0laRV9NQVNLCShfSU9DX1NJWkVNQVNLIDw8IF9JT0NfU0laRVNISUZUKQorI2RlZmluZSBJT0NTSVpFX1NISUZUCShfSU9DX1NJWkVTSElGVCkKKworI2VuZGlmIC8qIF9BU01fSUE2NF9JT0NUTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L2lvY3RsMzIuaCBiL2luY2x1ZGUvYXNtLWlhNjQvaW9jdGwzMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwZDIyN2YKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L2lvY3RsMzIuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8bGludXgvaW9jdGwzMi5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9pb2N0bHMuaCBiL2luY2x1ZGUvYXNtLWlhNjQvaW9jdGxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFlZTUyMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvaW9jdGxzLmgKQEAgLTAsMCArMSw4OSBAQAorI2lmbmRlZiBfQVNNX0lBNjRfSU9DVExTX0gKKyNkZWZpbmUgX0FTTV9JQTY0X0lPQ1RMU19ICisKKy8qCisgKiBCYXNlZCBvbiA8YXNtLWkzODYvaW9jdGxzLmg+CisgKgorICogTW9kaWZpZWQgMTk5OCwgMTk5OSwgMjAwMgorICoJRGF2aWQgTW9zYmVyZ2VyLVRhbmcgPGRhdmlkbUBocGwuaHAuY29tPiwgSGV3bGV0dC1QYWNrYXJkIENvCisgKi8KKworI2luY2x1ZGUgPGFzbS9pb2N0bC5oPgorCisvKiAweDU0IGlzIGp1c3QgYSBtYWdpYyBudW1iZXIgdG8gbWFrZSB0aGVzZSByZWxhdGl2ZWx5IHVuaXF1ZSAoJ1QnKSAqLworCisjZGVmaW5lIFRDR0VUUwkJMHg1NDAxCisjZGVmaW5lIFRDU0VUUwkJMHg1NDAyCS8qIENsYXNoZXMgd2l0aCBTTkRDVExfVE1SX1NUQVJUIHNvdW5kIGlvY3RsICovCisjZGVmaW5lIFRDU0VUU1cJCTB4NTQwMworI2RlZmluZSBUQ1NFVFNGCQkweDU0MDQKKyNkZWZpbmUgVENHRVRBCQkweDU0MDUKKyNkZWZpbmUgVENTRVRBCQkweDU0MDYKKyNkZWZpbmUgVENTRVRBVwkJMHg1NDA3CisjZGVmaW5lIFRDU0VUQUYJCTB4NTQwOAorI2RlZmluZSBUQ1NCUksJCTB4NTQwOQorI2RlZmluZSBUQ1hPTkMJCTB4NTQwQQorI2RlZmluZSBUQ0ZMU0gJCTB4NTQwQgorI2RlZmluZSBUSU9DRVhDTAkweDU0MEMKKyNkZWZpbmUgVElPQ05YQ0wJMHg1NDBECisjZGVmaW5lIFRJT0NTQ1RUWQkweDU0MEUKKyNkZWZpbmUgVElPQ0dQR1JQCTB4NTQwRgorI2RlZmluZSBUSU9DU1BHUlAJMHg1NDEwCisjZGVmaW5lIFRJT0NPVVRRCTB4NTQxMQorI2RlZmluZSBUSU9DU1RJCQkweDU0MTIKKyNkZWZpbmUgVElPQ0dXSU5TWgkweDU0MTMKKyNkZWZpbmUgVElPQ1NXSU5TWgkweDU0MTQKKyNkZWZpbmUgVElPQ01HRVQJMHg1NDE1CisjZGVmaW5lIFRJT0NNQklTCTB4NTQxNgorI2RlZmluZSBUSU9DTUJJQwkweDU0MTcKKyNkZWZpbmUgVElPQ01TRVQJMHg1NDE4CisjZGVmaW5lIFRJT0NHU09GVENBUgkweDU0MTkKKyNkZWZpbmUgVElPQ1NTT0ZUQ0FSCTB4NTQxQQorI2RlZmluZSBGSU9OUkVBRAkweDU0MUIKKyNkZWZpbmUgVElPQ0lOUQkJRklPTlJFQUQKKyNkZWZpbmUgVElPQ0xJTlVYCTB4NTQxQworI2RlZmluZSBUSU9DQ09OUwkweDU0MUQKKyNkZWZpbmUgVElPQ0dTRVJJQUwJMHg1NDFFCisjZGVmaW5lIFRJT0NTU0VSSUFMCTB4NTQxRgorI2RlZmluZSBUSU9DUEtUCQkweDU0MjAKKyNkZWZpbmUgRklPTkJJTwkJMHg1NDIxCisjZGVmaW5lIFRJT0NOT1RUWQkweDU0MjIKKyNkZWZpbmUgVElPQ1NFVEQJMHg1NDIzCisjZGVmaW5lIFRJT0NHRVRECTB4NTQyNAorI2RlZmluZSBUQ1NCUktQCQkweDU0MjUJLyogTmVlZGVkIGZvciBQT1NJWCB0Y3NlbmRicmVhaygpICovCisjZGVmaW5lIFRJT0NTQlJLCTB4NTQyNyAgLyogQlNEIGNvbXBhdGliaWxpdHkgKi8KKyNkZWZpbmUgVElPQ0NCUksJMHg1NDI4ICAvKiBCU0QgY29tcGF0aWJpbGl0eSAqLworI2RlZmluZSBUSU9DR1NJRAkweDU0MjkgIC8qIFJldHVybiB0aGUgc2Vzc2lvbiBJRCBvZiBGRCAqLworI2RlZmluZSBUSU9DR1BUTglfSU9SKCdUJywweDMwLCB1bnNpZ25lZCBpbnQpIC8qIEdldCBQdHkgTnVtYmVyIChvZiBwdHktbXV4IGRldmljZSkgKi8KKyNkZWZpbmUgVElPQ1NQVExDSwlfSU9XKCdUJywweDMxLCBpbnQpICAvKiBMb2NrL3VubG9jayBQdHkgKi8KKworI2RlZmluZSBGSU9OQ0xFWAkweDU0NTAgIC8qIHRoZXNlIG51bWJlcnMgbmVlZCB0byBiZSBhZGp1c3RlZC4gKi8KKyNkZWZpbmUgRklPQ0xFWAkJMHg1NDUxCisjZGVmaW5lIEZJT0FTWU5DCTB4NTQ1MgorI2RlZmluZSBUSU9DU0VSQ09ORklHCTB4NTQ1MworI2RlZmluZSBUSU9DU0VSR1dJTEQJMHg1NDU0CisjZGVmaW5lIFRJT0NTRVJTV0lMRAkweDU0NTUKKyNkZWZpbmUgVElPQ0dMQ0tUUk1JT1MJMHg1NDU2CisjZGVmaW5lIFRJT0NTTENLVFJNSU9TCTB4NTQ1NworI2RlZmluZSBUSU9DU0VSR1NUUlVDVAkweDU0NTggLyogRm9yIGRlYnVnZ2luZyBvbmx5ICovCisjZGVmaW5lIFRJT0NTRVJHRVRMU1IgICAweDU0NTkgLyogR2V0IGxpbmUgc3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIFRJT0NTRVJHRVRNVUxUSSAweDU0NUEgLyogR2V0IG11bHRpcG9ydCBjb25maWcgICovCisjZGVmaW5lIFRJT0NTRVJTRVRNVUxUSSAweDU0NUIgLyogU2V0IG11bHRpcG9ydCBjb25maWcgKi8KKworI2RlZmluZSBUSU9DTUlXQUlUCTB4NTQ1QwkvKiB3YWl0IGZvciBhIGNoYW5nZSBvbiBzZXJpYWwgaW5wdXQgbGluZShzKSAqLworI2RlZmluZSBUSU9DR0lDT1VOVAkweDU0NUQJLyogcmVhZCBzZXJpYWwgcG9ydCBpbmxpbmUgaW50ZXJydXB0IGNvdW50cyAqLworI2RlZmluZSBUSU9DR0hBWUVTRVNQICAgMHg1NDVFICAvKiBHZXQgSGF5ZXMgRVNQIGNvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgVElPQ1NIQVlFU0VTUCAgIDB4NTQ1RiAgLyogU2V0IEhheWVzIEVTUCBjb25maWd1cmF0aW9uICovCisjZGVmaW5lIEZJT1FTSVpFCTB4NTQ2MAorCisvKiBVc2VkIGZvciBwYWNrZXQgbW9kZSAqLworI2RlZmluZSBUSU9DUEtUX0RBVEEJCSAwCisjZGVmaW5lIFRJT0NQS1RfRkxVU0hSRUFECSAxCisjZGVmaW5lIFRJT0NQS1RfRkxVU0hXUklURQkgMgorI2RlZmluZSBUSU9DUEtUX1NUT1AJCSA0CisjZGVmaW5lIFRJT0NQS1RfU1RBUlQJCSA4CisjZGVmaW5lIFRJT0NQS1RfTk9TVE9QCQkxNgorI2RlZmluZSBUSU9DUEtUX0RPU1RPUAkJMzIKKworI2RlZmluZSBUSU9DU0VSX1RFTVQgICAgMHgwMQkvKiBUcmFuc21pdHRlciBwaHlzaWNhbGx5IGVtcHR5ICovCisKKyNlbmRpZiAvKiBfQVNNX0lBNjRfSU9DVExTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvaW9zYXBpYy5oIGIvaW5jbHVkZS9hc20taWE2NC9pb3NhcGljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhhN2E3MgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvaW9zYXBpYy5oCkBAIC0wLDAgKzEsMTEwIEBACisjaWZuZGVmIF9fQVNNX0lBNjRfSU9TQVBJQ19ICisjZGVmaW5lIF9fQVNNX0lBNjRfSU9TQVBJQ19ICisKKyNkZWZpbmUJSU9TQVBJQ19SRUdfU0VMRUNUCTB4MAorI2RlZmluZQlJT1NBUElDX1dJTkRPVwkJMHgxMAorI2RlZmluZQlJT1NBUElDX0VPSQkJMHg0MAorCisjZGVmaW5lCUlPU0FQSUNfVkVSU0lPTgkJMHgxCisKKy8qCisgKiBSZWRpcmVjdGlvbiB0YWJsZSBlbnRyeQorICovCisjZGVmaW5lCUlPU0FQSUNfUlRFX0xPVyhpKQkoMHgxMCtpKjIpCisjZGVmaW5lCUlPU0FQSUNfUlRFX0hJR0goaSkJKDB4MTEraSoyKQorCisjZGVmaW5lCUlPU0FQSUNfREVTVF9TSElGVAkJMTYKKworLyoKKyAqIERlbGl2ZXJ5IG1vZGUKKyAqLworI2RlZmluZQlJT1NBUElDX0RFTElWRVJZX1NISUZUCQk4CisjZGVmaW5lCUlPU0FQSUNfRklYRUQJCQkweDAKKyNkZWZpbmUJSU9TQVBJQ19MT1dFU1RfUFJJT1JJVFkJMHgxCisjZGVmaW5lCUlPU0FQSUNfUE1JCQkJMHgyCisjZGVmaW5lCUlPU0FQSUNfTk1JCQkJMHg0CisjZGVmaW5lCUlPU0FQSUNfSU5JVAkJCTB4NQorI2RlZmluZQlJT1NBUElDX0VYVElOVAkJCTB4NworCisvKgorICogSW50ZXJydXB0IHBvbGFyaXR5CisgKi8KKyNkZWZpbmUJSU9TQVBJQ19QT0xBUklUWV9TSElGVAkJMTMKKyNkZWZpbmUJSU9TQVBJQ19QT0xfSElHSAkJMAorI2RlZmluZQlJT1NBUElDX1BPTF9MT1cJCTEKKworLyoKKyAqIFRyaWdnZXIgbW9kZQorICovCisjZGVmaW5lCUlPU0FQSUNfVFJJR0dFUl9TSElGVAkJMTUKKyNkZWZpbmUJSU9TQVBJQ19FREdFCQkJMAorI2RlZmluZQlJT1NBUElDX0xFVkVMCQkJMQorCisvKgorICogTWFzayBiaXQKKyAqLworCisjZGVmaW5lCUlPU0FQSUNfTUFTS19TSElGVAkJMTYKKyNkZWZpbmUJSU9TQVBJQ19NQVNLCQkJKDE8PElPU0FQSUNfTUFTS19TSElGVCkKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworI2lmZGVmIENPTkZJR19JT1NBUElDCisKKyNkZWZpbmUgTlJfSU9TQVBJQ1MJCQkyNTYKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaW9zYXBpY19yZWFkKGNoYXIgX19pb21lbSAqaW9zYXBpYywgdW5zaWduZWQgaW50IHJlZykKK3sKKwl3cml0ZWwocmVnLCBpb3NhcGljICsgSU9TQVBJQ19SRUdfU0VMRUNUKTsKKwlyZXR1cm4gcmVhZGwoaW9zYXBpYyArIElPU0FQSUNfV0lORE9XKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGlvc2FwaWNfd3JpdGUoY2hhciBfX2lvbWVtICppb3NhcGljLCB1bnNpZ25lZCBpbnQgcmVnLCB1MzIgdmFsKQoreworCXdyaXRlbChyZWcsIGlvc2FwaWMgKyBJT1NBUElDX1JFR19TRUxFQ1QpOworCXdyaXRlbCh2YWwsIGlvc2FwaWMgKyBJT1NBUElDX1dJTkRPVyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpb3NhcGljX2VvaShjaGFyIF9faW9tZW0gKmlvc2FwaWMsIHUzMiB2ZWN0b3IpCit7CisJd3JpdGVsKHZlY3RvciwgaW9zYXBpYyArIElPU0FQSUNfRU9JKTsKK30KKworZXh0ZXJuIHZvaWQgX19pbml0IGlvc2FwaWNfc3lzdGVtX2luaXQgKGludCBwY2F0X2NvbXBhdCk7CitleHRlcm4gdm9pZCBfX2luaXQgaW9zYXBpY19pbml0ICh1bnNpZ25lZCBsb25nIGFkZHJlc3MsCisJCQkJICAgIHVuc2lnbmVkIGludCBnc2lfYmFzZSk7CitleHRlcm4gaW50IGdzaV90b192ZWN0b3IgKHVuc2lnbmVkIGludCBnc2kpOworZXh0ZXJuIGludCBnc2lfdG9faXJxICh1bnNpZ25lZCBpbnQgZ3NpKTsKK2V4dGVybiB2b2lkIGlvc2FwaWNfZW5hYmxlX2ludHIgKHVuc2lnbmVkIGludCB2ZWN0b3IpOworZXh0ZXJuIGludCBpb3NhcGljX3JlZ2lzdGVyX2ludHIgKHVuc2lnbmVkIGludCBnc2ksIHVuc2lnbmVkIGxvbmcgcG9sYXJpdHksCisJCQkJICB1bnNpZ25lZCBsb25nIHRyaWdnZXIpOworI2lmZGVmIENPTkZJR19BQ1BJX0RFQUxMT0NBVEVfSVJRCitleHRlcm4gdm9pZCBpb3NhcGljX3VucmVnaXN0ZXJfaW50ciAodW5zaWduZWQgaW50IGlycSk7CisjZW5kaWYKK2V4dGVybiB2b2lkIF9faW5pdCBpb3NhcGljX292ZXJyaWRlX2lzYV9pcnEgKHVuc2lnbmVkIGludCBpc2FfaXJxLCB1bnNpZ25lZCBpbnQgZ3NpLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgcG9sYXJpdHksCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyB0cmlnZ2VyKTsKK2V4dGVybiBpbnQgX19pbml0IGlvc2FwaWNfcmVnaXN0ZXJfcGxhdGZvcm1faW50ciAodTMyIGludF90eXBlLAorCQkJCQkgICB1bnNpZ25lZCBpbnQgZ3NpLAorCQkJCQkgICBpbnQgcG1pX3ZlY3RvciwKKwkJCQkJICAgdTE2IGVpZCwgdTE2IGlkLAorCQkJCQkgICB1bnNpZ25lZCBsb25nIHBvbGFyaXR5LAorCQkJCQkgICB1bnNpZ25lZCBsb25nIHRyaWdnZXIpOworZXh0ZXJuIHVuc2lnbmVkIGludCBpb3NhcGljX3ZlcnNpb24gKGNoYXIgX19pb21lbSAqYWRkcik7CisKK2V4dGVybiB2b2lkIGlvc2FwaWNfcGNpX2ZpeHVwIChpbnQpOworI2lmZGVmIENPTkZJR19OVU1BCitleHRlcm4gdm9pZCBfX2luaXQgbWFwX2lvc2FwaWNfdG9fbm9kZSAodW5zaWduZWQgaW50LCBpbnQpOworI2VuZGlmCisjZWxzZQorI2RlZmluZSBpb3NhcGljX3N5c3RlbV9pbml0KHBjYXRfY29tcGF0KQkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgaW9zYXBpY19pbml0KGFkZHJlc3MsZ3NpX2Jhc2UpCQkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgaW9zYXBpY19yZWdpc3Rlcl9pbnRyKGdzaSxwb2xhcml0eSx0cmlnZ2VyKQkJKGdzaSkKKyNkZWZpbmUgaW9zYXBpY191bnJlZ2lzdGVyX2ludHIoaXJxKQkJCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGlvc2FwaWNfb3ZlcnJpZGVfaXNhX2lycShpc2FfaXJxLGdzaSxwb2xhcml0eSx0cmlnZ2VyKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGlvc2FwaWNfcmVnaXN0ZXJfcGxhdGZvcm1faW50cih0eXBlLGdzaSxwbWksZWlkLGlkLCBcCisJcG9sYXJpdHksdHJpZ2dlcikJCQkJCShnc2kpCisjZW5kaWYKKworIyBlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCisjZW5kaWYgLyogX19BU01fSUE2NF9JT1NBUElDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvaXBjYnVmLmggYi9pbmNsdWRlL2FzbS1pYTY0L2lwY2J1Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3OTg5OWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L2lwY2J1Zi5oCkBAIC0wLDAgKzEsMjggQEAKKyNpZm5kZWYgX0FTTV9JQTY0X0lQQ0JVRl9ICisjZGVmaW5lIF9BU01fSUE2NF9JUENCVUZfSAorCisvKgorICogVGhlIGlwYzY0X3Blcm0gc3RydWN0dXJlIGZvciBJQS02NCBhcmNoaXRlY3R1cmUuCisgKiBOb3RlIGV4dHJhIHBhZGRpbmcgYmVjYXVzZSB0aGlzIHN0cnVjdHVyZSBpcyBwYXNzZWQgYmFjayBhbmQgZm9ydGgKKyAqIGJldHdlZW4ga2VybmVsIGFuZCB1c2VyIHNwYWNlLgorICoKKyAqIFBhZCBzcGFjZSBpcyBsZWZ0IGZvcjoKKyAqIC0gMzItYml0IHNlcQorICogLSAyIG1pc2NlbGxhbmVvdXMgNjQtYml0IHZhbHVlcworICovCisKK3N0cnVjdCBpcGM2NF9wZXJtCit7CisJX19rZXJuZWxfa2V5X3QJa2V5OworCV9fa2VybmVsX3VpZF90CXVpZDsKKwlfX2tlcm5lbF9naWRfdAlnaWQ7CisJX19rZXJuZWxfdWlkX3QJY3VpZDsKKwlfX2tlcm5lbF9naWRfdAljZ2lkOworCV9fa2VybmVsX21vZGVfdAltb2RlOworCXVuc2lnbmVkIHNob3J0CXNlcTsKKwl1bnNpZ25lZCBzaG9ydAlfX3BhZDE7CisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDE7CisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDI7Cit9OworCisjZW5kaWYgLyogX0FTTV9JQTY0X0lQQ0JVRl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L2lycS5oIGIvaW5jbHVkZS9hc20taWE2NC9pcnEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDA3ZDExCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taWE2NC9pcnEuaApAQCAtMCwwICsxLDQzIEBACisjaWZuZGVmIF9BU01fSUE2NF9JUlFfSAorI2RlZmluZSBfQVNNX0lBNjRfSVJRX0gKKworLyoKKyAqIENvcHlyaWdodCAoQykgMTk5OS0yMDAwLCAyMDAyIEhld2xldHQtUGFja2FyZCBDbworICoJRGF2aWQgTW9zYmVyZ2VyLVRhbmcgPGRhdmlkbUBocGwuaHAuY29tPgorICoJU3RlcGhhbmUgRXJhbmlhbiA8ZXJhbmlhbkBocGwuaHAuY29tPgorICoKKyAqIDExLzI0Lzk4CVMuRXJhbmlhbiAJdXBkYXRlZCBUSU1FUl9JUlEgYW5kIGlycV9jYW5vbmljYWxpemUKKyAqIDAxLzIwLzk5CVMuRXJhbmlhbglhZGRlZCBrZXlib2FyZCBpbnRlcnJ1cHQKKyAqIDAyLzI5LzAwICAgICBELk1vc2Jlcmdlcgltb3ZlZCBtb3N0IHRoaW5ncyBpbnRvIGh3X2lycS5oCisgKi8KKworI2RlZmluZSBOUl9JUlFTCQkyNTYKKyNkZWZpbmUgTlJfSVJRX1ZFQ1RPUlMJTlJfSVJRUworCitzdGF0aWMgX19pbmxpbmVfXyBpbnQKK2lycV9jYW5vbmljYWxpemUgKGludCBpcnEpCit7CisJLyoKKwkgKiBXZSBkbyB0aGUgbGVnYWN5IHRoaW5nIGhlcmUgb2YgcHJldGVuZGluZyB0aGF0IGlycXMgPCAxNgorCSAqIGFyZSA4MjU5IGlycXMuICBUaGlzIHJlYWxseSBzaG91bGRuJ3QgYmUgbmVjZXNzYXJ5IGF0IGFsbCwKKwkgKiBidXQgd2Uga2VlcCBpdCBoZXJlIGFzIHNlcmlhbC5jIHN0aWxsIHVzZXMgaXQuLi4KKwkgKi8KKwlyZXR1cm4gKChpcnEgPT0gMikgPyA5IDogaXJxKTsKK30KKworZXh0ZXJuIHZvaWQgZGlzYWJsZV9pcnEgKHVuc2lnbmVkIGludCk7CitleHRlcm4gdm9pZCBkaXNhYmxlX2lycV9ub3N5bmMgKHVuc2lnbmVkIGludCk7CitleHRlcm4gdm9pZCBlbmFibGVfaXJxICh1bnNpZ25lZCBpbnQpOworZXh0ZXJuIHZvaWQgc2V0X2lycV9hZmZpbml0eV9pbmZvICh1bnNpZ25lZCBpbnQgaXJxLCBpbnQgZGVzdCwgaW50IHJlZGlyKTsKKworI2lmZGVmIENPTkZJR19TTVAKK2V4dGVybiB2b2lkIG1vdmVfaXJxKGludCBpcnEpOworI2Vsc2UKKyNkZWZpbmUgbW92ZV9pcnEoaXJxKQorI2VuZGlmCisKK3N0cnVjdCBpcnFhY3Rpb247CitzdHJ1Y3QgcHRfcmVnczsKK2ludCBoYW5kbGVfSVJRX2V2ZW50KHVuc2lnbmVkIGludCwgc3RydWN0IHB0X3JlZ3MgKiwgc3RydWN0IGlycWFjdGlvbiAqKTsKKworI2VuZGlmIC8qIF9BU01fSUE2NF9JUlFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9rbWFwX3R5cGVzLmggYi9pbmNsdWRlL2FzbS1pYTY0L2ttYXBfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzc3NzUyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taWE2NC9rbWFwX3R5cGVzLmgKQEAgLTAsMCArMSwzMSBAQAorI2lmbmRlZiBfQVNNX0lBNjRfS01BUF9UWVBFU19ICisjZGVmaW5lIF9BU01fSUE2NF9LTUFQX1RZUEVTX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjaWZkZWYgQ09ORklHX0RFQlVHX0hJR0hNRU0KKyMgZGVmaW5lIEQobikgX19LTV9GRU5DRV8jI24gLAorI2Vsc2UKKyMgZGVmaW5lIEQobikKKyNlbmRpZgorCitlbnVtIGttX3R5cGUgeworRCgwKQlLTV9CT1VOQ0VfUkVBRCwKK0QoMSkJS01fU0tCX1NVTlJQQ19EQVRBLAorRCgyKQlLTV9TS0JfREFUQV9TT0ZUSVJRLAorRCgzKQlLTV9VU0VSMCwKK0QoNCkJS01fVVNFUjEsCitEKDUpCUtNX0JJT19TUkNfSVJRLAorRCg2KQlLTV9CSU9fRFNUX0lSUSwKK0QoNykJS01fUFRFMCwKK0QoOCkJS01fUFRFMSwKK0QoOSkJS01fSVJRMCwKK0QoMTApCUtNX0lSUTEsCitEKDExKQlLTV9TT0ZUSVJRMCwKK0QoMTIpCUtNX1NPRlRJUlExLAorRCgxMykJS01fVFlQRV9OUgorfTsKKworI3VuZGVmIEQKKworI2VuZGlmIC8qIF9BU01fSUE2NF9LTUFQX1RZUEVTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQva3JlZ3MuaCBiL2luY2x1ZGUvYXNtLWlhNjQva3JlZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjFiNWNiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taWE2NC9rcmVncy5oCkBAIC0wLDAgKzEsMTYzIEBACisjaWZuZGVmIF9BU01fSUE2NF9LUkVHU19ICisjZGVmaW5lIF9BU01fSUE2NF9LUkVHU19ICisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiBIZXdsZXR0LVBhY2thcmQgQ28KKyAqCURhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4KKyAqLworLyoKKyAqIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSBrZXJuZWwgcmVnaXN0ZXIgdXNhZ2UgY29udmVudGlvbiB1c2VkIGJ5IExpbnV4L2lhNjQuCisgKi8KKworLyoKKyAqIEtlcm5lbCByZWdpc3RlcnM6CisgKi8KKyNkZWZpbmUgSUE2NF9LUl9JT19CQVNFCQkwCS8qIGFyLmswOiBsZWdhY3kgSS9PIGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBJQTY0X0tSX1RTU0QJCTEJLyogYXIuazE6IElWRSB1c2VzIHRoaXMgYXMgdGhlIFRTU0QgKi8KKyNkZWZpbmUgSUE2NF9LUl9QRVJfQ1BVX0RBVEEJMwkvKiBhci5rMzogcGh5c2ljYWwgcGVyLUNQVSBiYXNlICovCisjZGVmaW5lIElBNjRfS1JfQ1VSUkVOVF9TVEFDSwk0CS8qIGFyLms0OiB3aGF0J3MgbWFwcGVkIGluIElBNjRfVFJfQ1VSUkVOVF9TVEFDSyAqLworI2RlZmluZSBJQTY0X0tSX0ZQVV9PV05FUgk1CS8qIGFyLms1OiBmcHUtb3duZXIgKFVQIG9ubHksIGF0IHRoZSBtb21lbnQpICovCisjZGVmaW5lIElBNjRfS1JfQ1VSUkVOVAkJNgkvKiBhci5rNjogImN1cnJlbnQiIHRhc2sgcG9pbnRlciAqLworI2RlZmluZSBJQTY0X0tSX1BUX0JBU0UJCTcJLyogYXIuazc6IHBhZ2UgdGFibGUgYmFzZSBhZGRyZXNzIChwaHlzaWNhbCkgKi8KKworI2RlZmluZSBfSUE2NF9LUl9QQVNURSh4LHkpCXgjI3kKKyNkZWZpbmUgX0lBNjRfS1JfUFJFRklYKG4pCV9JQTY0X0tSX1BBU1RFKGFyLmssIG4pCisjZGVmaW5lIElBNjRfS1IobikJCV9JQTY0X0tSX1BSRUZJWChJQTY0X0tSXyMjbikKKworLyoKKyAqIFRyYW5zbGF0aW9uIHJlZ2lzdGVyczoKKyAqLworI2RlZmluZSBJQTY0X1RSX0tFUk5FTAkJMAkvKiBpdHIwLCBkdHIwOiBtYXBzIGtlcm5lbCBpbWFnZSAoY29kZSAmIGRhdGEpICovCisjZGVmaW5lIElBNjRfVFJfUEFMQ09ERQkJMQkvKiBpdHIxOiBtYXBzIFBBTGNvZGUgYXMgcmVxdWlyZWQgYnkgRUZJICovCisjZGVmaW5lIElBNjRfVFJfUEVSQ1BVX0RBVEEJMQkvKiBkdHIxOiBwZXJjcHUgZGF0YSAqLworI2RlZmluZSBJQTY0X1RSX0NVUlJFTlRfU1RBQ0sJMgkvKiBkdHIyOiBtYXBzIGtlcm5lbCdzIG1lbW9yeS0gJiByZWdpc3Rlci1zdGFja3MgKi8KKworLyogUHJvY2Vzc29yIHN0YXR1cyByZWdpc3RlciBiaXRzOiAqLworI2RlZmluZSBJQTY0X1BTUl9CRV9CSVQJCTEKKyNkZWZpbmUgSUE2NF9QU1JfVVBfQklUCQkyCisjZGVmaW5lIElBNjRfUFNSX0FDX0JJVAkJMworI2RlZmluZSBJQTY0X1BTUl9NRkxfQklUCTQKKyNkZWZpbmUgSUE2NF9QU1JfTUZIX0JJVAk1CisjZGVmaW5lIElBNjRfUFNSX0lDX0JJVAkJMTMKKyNkZWZpbmUgSUE2NF9QU1JfSV9CSVQJCTE0CisjZGVmaW5lIElBNjRfUFNSX1BLX0JJVAkJMTUKKyNkZWZpbmUgSUE2NF9QU1JfRFRfQklUCQkxNworI2RlZmluZSBJQTY0X1BTUl9ERkxfQklUCTE4CisjZGVmaW5lIElBNjRfUFNSX0RGSF9CSVQJMTkKKyNkZWZpbmUgSUE2NF9QU1JfU1BfQklUCQkyMAorI2RlZmluZSBJQTY0X1BTUl9QUF9CSVQJCTIxCisjZGVmaW5lIElBNjRfUFNSX0RJX0JJVAkJMjIKKyNkZWZpbmUgSUE2NF9QU1JfU0lfQklUCQkyMworI2RlZmluZSBJQTY0X1BTUl9EQl9CSVQJCTI0CisjZGVmaW5lIElBNjRfUFNSX0xQX0JJVAkJMjUKKyNkZWZpbmUgSUE2NF9QU1JfVEJfQklUCQkyNgorI2RlZmluZSBJQTY0X1BTUl9SVF9CSVQJCTI3CisvKiBUaGUgZm9sbG93aW5nIGFyZSBub3QgYWZmZWN0ZWQgYnkgc2F2ZV9mbGFncygpL3Jlc3RvcmVfZmxhZ3MoKTogKi8KKyNkZWZpbmUgSUE2NF9QU1JfQ1BMMF9CSVQJMzIKKyNkZWZpbmUgSUE2NF9QU1JfQ1BMMV9CSVQJMzMKKyNkZWZpbmUgSUE2NF9QU1JfSVNfQklUCQkzNAorI2RlZmluZSBJQTY0X1BTUl9NQ19CSVQJCTM1CisjZGVmaW5lIElBNjRfUFNSX0lUX0JJVAkJMzYKKyNkZWZpbmUgSUE2NF9QU1JfSURfQklUCQkzNworI2RlZmluZSBJQTY0X1BTUl9EQV9CSVQJCTM4CisjZGVmaW5lIElBNjRfUFNSX0REX0JJVAkJMzkKKyNkZWZpbmUgSUE2NF9QU1JfU1NfQklUCQk0MAorI2RlZmluZSBJQTY0X1BTUl9SSV9CSVQJCTQxCisjZGVmaW5lIElBNjRfUFNSX0VEX0JJVAkJNDMKKyNkZWZpbmUgSUE2NF9QU1JfQk5fQklUCQk0NAorI2RlZmluZSBJQTY0X1BTUl9JQV9CSVQJCTQ1CisKKy8qIEEgbWFzayBvZiBQU1IgYml0cyB0aGF0IHdlIGdlbmVyYWxseSBkb24ndCB3YW50IHRvIGluaGVyaXQgYWNyb3NzIGEgY2xvbmUyKCkgb3IgYW4KKyAgIGV4ZWN2ZSgpLiAgT25seSBsaXN0IGZsYWdzIGhlcmUgdGhhdCBuZWVkIHRvIGJlIGNsZWFyZWQvc2V0IGZvciBCT1RIIGNsb25lMigpIGFuZAorICAgZXhlY3ZlKCkuICAqLworI2RlZmluZSBJQTY0X1BTUl9CSVRTX1RPX0NMRUFSCShJQTY0X1BTUl9NRkwgfCBJQTY0X1BTUl9NRkggfCBJQTY0X1BTUl9EQiB8IElBNjRfUFNSX0xQIHwgXAorCQkJCSBJQTY0X1BTUl9UQiAgfCBJQTY0X1BTUl9JRCAgfCBJQTY0X1BTUl9EQSB8IElBNjRfUFNSX0REIHwgXAorCQkJCSBJQTY0X1BTUl9TUyAgfCBJQTY0X1BTUl9FRCAgfCBJQTY0X1BTUl9JQSkKKyNkZWZpbmUgSUE2NF9QU1JfQklUU19UT19TRVQJKElBNjRfUFNSX0RGSCB8IElBNjRfUFNSX1NQKQorCisjZGVmaW5lIElBNjRfUFNSX0JFCShfX0lBNjRfVUwoMSkgPDwgSUE2NF9QU1JfQkVfQklUKQorI2RlZmluZSBJQTY0X1BTUl9VUAkoX19JQTY0X1VMKDEpIDw8IElBNjRfUFNSX1VQX0JJVCkKKyNkZWZpbmUgSUE2NF9QU1JfQUMJKF9fSUE2NF9VTCgxKSA8PCBJQTY0X1BTUl9BQ19CSVQpCisjZGVmaW5lIElBNjRfUFNSX01GTAkoX19JQTY0X1VMKDEpIDw8IElBNjRfUFNSX01GTF9CSVQpCisjZGVmaW5lIElBNjRfUFNSX01GSAkoX19JQTY0X1VMKDEpIDw8IElBNjRfUFNSX01GSF9CSVQpCisjZGVmaW5lIElBNjRfUFNSX0lDCShfX0lBNjRfVUwoMSkgPDwgSUE2NF9QU1JfSUNfQklUKQorI2RlZmluZSBJQTY0X1BTUl9JCShfX0lBNjRfVUwoMSkgPDwgSUE2NF9QU1JfSV9CSVQpCisjZGVmaW5lIElBNjRfUFNSX1BLCShfX0lBNjRfVUwoMSkgPDwgSUE2NF9QU1JfUEtfQklUKQorI2RlZmluZSBJQTY0X1BTUl9EVAkoX19JQTY0X1VMKDEpIDw8IElBNjRfUFNSX0RUX0JJVCkKKyNkZWZpbmUgSUE2NF9QU1JfREZMCShfX0lBNjRfVUwoMSkgPDwgSUE2NF9QU1JfREZMX0JJVCkKKyNkZWZpbmUgSUE2NF9QU1JfREZICShfX0lBNjRfVUwoMSkgPDwgSUE2NF9QU1JfREZIX0JJVCkKKyNkZWZpbmUgSUE2NF9QU1JfU1AJKF9fSUE2NF9VTCgxKSA8PCBJQTY0X1BTUl9TUF9CSVQpCisjZGVmaW5lIElBNjRfUFNSX1BQCShfX0lBNjRfVUwoMSkgPDwgSUE2NF9QU1JfUFBfQklUKQorI2RlZmluZSBJQTY0X1BTUl9ESQkoX19JQTY0X1VMKDEpIDw8IElBNjRfUFNSX0RJX0JJVCkKKyNkZWZpbmUgSUE2NF9QU1JfU0kJKF9fSUE2NF9VTCgxKSA8PCBJQTY0X1BTUl9TSV9CSVQpCisjZGVmaW5lIElBNjRfUFNSX0RCCShfX0lBNjRfVUwoMSkgPDwgSUE2NF9QU1JfREJfQklUKQorI2RlZmluZSBJQTY0X1BTUl9MUAkoX19JQTY0X1VMKDEpIDw8IElBNjRfUFNSX0xQX0JJVCkKKyNkZWZpbmUgSUE2NF9QU1JfVEIJKF9fSUE2NF9VTCgxKSA8PCBJQTY0X1BTUl9UQl9CSVQpCisjZGVmaW5lIElBNjRfUFNSX1JUCShfX0lBNjRfVUwoMSkgPDwgSUE2NF9QU1JfUlRfQklUKQorLyogVGhlIGZvbGxvd2luZyBhcmUgbm90IGFmZmVjdGVkIGJ5IHNhdmVfZmxhZ3MoKS9yZXN0b3JlX2ZsYWdzKCk6ICovCisjZGVmaW5lIElBNjRfUFNSX0NQTAkoX19JQTY0X1VMKDMpIDw8IElBNjRfUFNSX0NQTDBfQklUKQorI2RlZmluZSBJQTY0X1BTUl9JUwkoX19JQTY0X1VMKDEpIDw8IElBNjRfUFNSX0lTX0JJVCkKKyNkZWZpbmUgSUE2NF9QU1JfTUMJKF9fSUE2NF9VTCgxKSA8PCBJQTY0X1BTUl9NQ19CSVQpCisjZGVmaW5lIElBNjRfUFNSX0lUCShfX0lBNjRfVUwoMSkgPDwgSUE2NF9QU1JfSVRfQklUKQorI2RlZmluZSBJQTY0X1BTUl9JRAkoX19JQTY0X1VMKDEpIDw8IElBNjRfUFNSX0lEX0JJVCkKKyNkZWZpbmUgSUE2NF9QU1JfREEJKF9fSUE2NF9VTCgxKSA8PCBJQTY0X1BTUl9EQV9CSVQpCisjZGVmaW5lIElBNjRfUFNSX0RECShfX0lBNjRfVUwoMSkgPDwgSUE2NF9QU1JfRERfQklUKQorI2RlZmluZSBJQTY0X1BTUl9TUwkoX19JQTY0X1VMKDEpIDw8IElBNjRfUFNSX1NTX0JJVCkKKyNkZWZpbmUgSUE2NF9QU1JfUkkJKF9fSUE2NF9VTCgzKSA8PCBJQTY0X1BTUl9SSV9CSVQpCisjZGVmaW5lIElBNjRfUFNSX0VECShfX0lBNjRfVUwoMSkgPDwgSUE2NF9QU1JfRURfQklUKQorI2RlZmluZSBJQTY0X1BTUl9CTgkoX19JQTY0X1VMKDEpIDw8IElBNjRfUFNSX0JOX0JJVCkKKyNkZWZpbmUgSUE2NF9QU1JfSUEJKF9fSUE2NF9VTCgxKSA8PCBJQTY0X1BTUl9JQV9CSVQpCisKKy8qIFVzZXIgbWFzayBiaXRzOiAqLworI2RlZmluZSBJQTY0X1BTUl9VTQkoSUE2NF9QU1JfQkUgfCBJQTY0X1BTUl9VUCB8IElBNjRfUFNSX0FDIHwgSUE2NF9QU1JfTUZMIHwgSUE2NF9QU1JfTUZIKQorCisvKiBEZWZhdWx0IENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSUE2NF9EQ1JfUFBfQklUCQkgMAkvKiBwcml2aWxlZ2VkIHBlcmZvcm1hbmNlIG1vbml0b3IgZGVmYXVsdCAqLworI2RlZmluZSBJQTY0X0RDUl9CRV9CSVQJCSAxCS8qIGJpZy1lbmRpYW4gZGVmYXVsdCAqLworI2RlZmluZSBJQTY0X0RDUl9MQ19CSVQJCSAyCS8qIGlhMzIgbG9jay1jaGVjayBlbmFibGUgKi8KKyNkZWZpbmUgSUE2NF9EQ1JfRE1fQklUCQkgOAkvKiBkZWZlciBUTEIgbWlzcyBmYXVsdHMgKi8KKyNkZWZpbmUgSUE2NF9EQ1JfRFBfQklUCQkgOQkvKiBkZWZlciBwYWdlLW5vdC1wcmVzZW50IGZhdWx0cyAqLworI2RlZmluZSBJQTY0X0RDUl9ES19CSVQJCTEwCS8qIGRlZmVyIGtleSBtaXNzIGZhdWx0cyAqLworI2RlZmluZSBJQTY0X0RDUl9EWF9CSVQJCTExCS8qIGRlZmVyIGtleSBwZXJtaXNzaW9uIGZhdWx0cyAqLworI2RlZmluZSBJQTY0X0RDUl9EUl9CSVQJCTEyCS8qIGRlZmVyIGFjY2VzcyByaWdodCBmYXVsdHMgKi8KKyNkZWZpbmUgSUE2NF9EQ1JfREFfQklUCQkxMwkvKiBkZWZlciBhY2Nlc3MgYml0IGZhdWx0cyAqLworI2RlZmluZSBJQTY0X0RDUl9ERF9CSVQJCTE0CS8qIGRlZmVyIGRlYnVnIGZhdWx0cyAqLworCisjZGVmaW5lIElBNjRfRENSX1BQCShfX0lBNjRfVUwoMSkgPDwgSUE2NF9EQ1JfUFBfQklUKQorI2RlZmluZSBJQTY0X0RDUl9CRQkoX19JQTY0X1VMKDEpIDw8IElBNjRfRENSX0JFX0JJVCkKKyNkZWZpbmUgSUE2NF9EQ1JfTEMJKF9fSUE2NF9VTCgxKSA8PCBJQTY0X0RDUl9MQ19CSVQpCisjZGVmaW5lIElBNjRfRENSX0RNCShfX0lBNjRfVUwoMSkgPDwgSUE2NF9EQ1JfRE1fQklUKQorI2RlZmluZSBJQTY0X0RDUl9EUAkoX19JQTY0X1VMKDEpIDw8IElBNjRfRENSX0RQX0JJVCkKKyNkZWZpbmUgSUE2NF9EQ1JfREsJKF9fSUE2NF9VTCgxKSA8PCBJQTY0X0RDUl9ES19CSVQpCisjZGVmaW5lIElBNjRfRENSX0RYCShfX0lBNjRfVUwoMSkgPDwgSUE2NF9EQ1JfRFhfQklUKQorI2RlZmluZSBJQTY0X0RDUl9EUgkoX19JQTY0X1VMKDEpIDw8IElBNjRfRENSX0RSX0JJVCkKKyNkZWZpbmUgSUE2NF9EQ1JfREEJKF9fSUE2NF9VTCgxKSA8PCBJQTY0X0RDUl9EQV9CSVQpCisjZGVmaW5lIElBNjRfRENSX0RECShfX0lBNjRfVUwoMSkgPDwgSUE2NF9EQ1JfRERfQklUKQorCisvKiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIElBNjRfSVNSX1hfQklUCQkzMgkvKiBleGVjdXRlIGFjY2VzcyAqLworI2RlZmluZSBJQTY0X0lTUl9XX0JJVAkJMzMJLyogd3JpdGUgYWNjZXNzICovCisjZGVmaW5lIElBNjRfSVNSX1JfQklUCQkzNAkvKiByZWFkIGFjY2VzcyAqLworI2RlZmluZSBJQTY0X0lTUl9OQV9CSVQJCTM1CS8qIG5vbi1hY2Nlc3MgKi8KKyNkZWZpbmUgSUE2NF9JU1JfU1BfQklUCQkzNgkvKiBzcGVjdWxhdGl2ZSBsb2FkIGV4Y2VwdGlvbiAqLworI2RlZmluZSBJQTY0X0lTUl9SU19CSVQJCTM3CS8qIG1hbmRhdG9yeSByZWdpc3Rlci1zdGFjayBleGNlcHRpb24gKi8KKyNkZWZpbmUgSUE2NF9JU1JfSVJfQklUCQkzOAkvKiBpbnZhbGlkIHJlZ2lzdGVyIGZyYW1lIGV4Y2VwdGlvbiAqLworI2RlZmluZSBJQTY0X0lTUl9DT0RFX01BU0sJMHhmCisKKyNkZWZpbmUgSUE2NF9JU1JfWAkoX19JQTY0X1VMKDEpIDw8IElBNjRfSVNSX1hfQklUKQorI2RlZmluZSBJQTY0X0lTUl9XCShfX0lBNjRfVUwoMSkgPDwgSUE2NF9JU1JfV19CSVQpCisjZGVmaW5lIElBNjRfSVNSX1IJKF9fSUE2NF9VTCgxKSA8PCBJQTY0X0lTUl9SX0JJVCkKKyNkZWZpbmUgSUE2NF9JU1JfTkEJKF9fSUE2NF9VTCgxKSA8PCBJQTY0X0lTUl9OQV9CSVQpCisjZGVmaW5lIElBNjRfSVNSX1NQCShfX0lBNjRfVUwoMSkgPDwgSUE2NF9JU1JfU1BfQklUKQorI2RlZmluZSBJQTY0X0lTUl9SUwkoX19JQTY0X1VMKDEpIDw8IElBNjRfSVNSX1JTX0JJVCkKKyNkZWZpbmUgSUE2NF9JU1JfSVIJKF9fSUE2NF9VTCgxKSA8PCBJQTY0X0lTUl9JUl9CSVQpCisKKy8qIElTUiBjb2RlIGZpZWxkIGZvciBub24tYWNjZXNzIGluc3RydWN0aW9ucyAqLworI2RlZmluZSBJQTY0X0lTUl9DT0RFX1RQQQkwCisjZGVmaW5lIElBNjRfSVNSX0NPREVfRkMJMQorI2RlZmluZSBJQTY0X0lTUl9DT0RFX1BST0JFCTIKKyNkZWZpbmUgSUE2NF9JU1JfQ09ERV9UQUsJMworI2RlZmluZSBJQTY0X0lTUl9DT0RFX0xGRVRDSAk0CisjZGVmaW5lIElBNjRfSVNSX0NPREVfUFJPQkVGCTUKKworI2VuZGlmIC8qIF9BU01fSUE2NF9rUkVHU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L2xpbmthZ2UuaCBiL2luY2x1ZGUvYXNtLWlhNjQvbGlua2FnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0Y2Q3MmMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L2xpbmthZ2UuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19BU01fTElOS0FHRV9ICisjZGVmaW5lIF9fQVNNX0xJTktBR0VfSAorCisjZGVmaW5lIGFzbWxpbmthZ2UgQ1BQX0FTTUxJTktBR0UgX19hdHRyaWJ1dGVfXygoc3lzY2FsbF9saW5rYWdlKSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L2xvY2FsLmggYi9pbmNsdWRlL2FzbS1pYTY0L2xvY2FsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRiZDU4NAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvbG9jYWwuaApAQCAtMCwwICsxLDUwIEBACisjaWZuZGVmIF9BU01fSUE2NF9MT0NBTF9ICisjZGVmaW5lIF9BU01fSUE2NF9MT0NBTF9ICisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgSGV3bGV0dC1QYWNrYXJkIENvCisgKglEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorCit0eXBlZGVmIHN0cnVjdCB7CisJYXRvbWljNjRfdCB2YWw7Cit9IGxvY2FsX3Q7CisKKyNkZWZpbmUgTE9DQUxfSU5JVChpKQkoKGxvY2FsX3QpIHsgeyAoaSkgfSB9KQorI2RlZmluZSBsb2NhbF9yZWFkKGwpCWF0b21pYzY0X3JlYWQoJihsKS0+dmFsKQorI2RlZmluZSBsb2NhbF9zZXQobCwgaSkJYXRvbWljNjRfc2V0KCYobCktPnZhbCwgaSkKKyNkZWZpbmUgbG9jYWxfaW5jKGwpCWF0b21pYzY0X2luYygmKGwpLT52YWwpCisjZGVmaW5lIGxvY2FsX2RlYyhsKQlhdG9taWM2NF9kZWMoJihsKS0+dmFsKQorI2RlZmluZSBsb2NhbF9hZGQobCkJYXRvbWljNjRfYWRkKCYobCktPnZhbCkKKyNkZWZpbmUgbG9jYWxfc3ViKGwpCWF0b21pYzY0X3N1YigmKGwpLT52YWwpCisKKy8qIE5vbi1hdG9taWMgdmFyaWFudHMsIGkuZS4sIHByZWVtcHRpb24gZGlzYWJsZWQgYW5kIHdvbid0IGJlIHRvdWNoZWQgaW4gaW50ZXJydXB0LCBldGMuICAqLworCisjZGVmaW5lIF9fbG9jYWxfaW5jKGwpCQkoKysobCktPnZhbC5jb3VudGVyKQorI2RlZmluZSBfX2xvY2FsX2RlYyhsKQkJKC0tKGwpLT52YWwuY291bnRlcikKKyNkZWZpbmUgX19sb2NhbF9hZGQoaSxsKQkoKGwpLT52YWwuY291bnRlciArPSAoaSkpCisjZGVmaW5lIF9fbG9jYWxfc3ViKGksbCkJKChsKS0+dmFsLmNvdW50ZXIgLT0gKGkpKQorCisvKgorICogVXNlIHRoZXNlIGZvciBwZXItY3B1IGxvY2FsX3QgdmFyaWFibGVzLiAgTm90ZSB0aGV5IHRha2UgYSB2YXJpYWJsZSAoZWcuIG15c3RydWN0LmZvbyksCisgKiBub3QgYW4gYWRkcmVzcy4KKyAqLworI2RlZmluZSBjcHVfbG9jYWxfcmVhZCh2KQlsb2NhbF9yZWFkKCZfX2lhNjRfcGVyX2NwdV92YXIodikpCisjZGVmaW5lIGNwdV9sb2NhbF9zZXQodiwgaSkJbG9jYWxfc2V0KCZfX2lhNjRfcGVyX2NwdV92YXIodiksIChpKSkKKyNkZWZpbmUgY3B1X2xvY2FsX2luYyh2KQlsb2NhbF9pbmMoJl9faWE2NF9wZXJfY3B1X3Zhcih2KSkKKyNkZWZpbmUgY3B1X2xvY2FsX2RlYyh2KQlsb2NhbF9kZWMoJl9faWE2NF9wZXJfY3B1X3Zhcih2KSkKKyNkZWZpbmUgY3B1X2xvY2FsX2FkZChpLCB2KQlsb2NhbF9hZGQoKGkpLCAmX19pYTY0X3Blcl9jcHVfdmFyKHYpKQorI2RlZmluZSBjcHVfbG9jYWxfc3ViKGksIHYpCWxvY2FsX3N1YigoaSksICZfX2lhNjRfcGVyX2NwdV92YXIodikpCisKKy8qCisgKiBOb24tYXRvbWljIGluY3JlbWVudHMsIGkuZS4sIHByZWVtcHRpb24gZGlzYWJsZWQgYW5kIHdvbid0IGJlIHRvdWNoZWQgaW4gaW50ZXJydXB0LAorICogZXRjLgorICovCisjZGVmaW5lIF9fY3B1X2xvY2FsX2luYyh2KQlfX2xvY2FsX2luYygmX19pYTY0X3Blcl9jcHVfdmFyKHYpKQorI2RlZmluZSBfX2NwdV9sb2NhbF9kZWModikJX19sb2NhbF9kZWMoJl9faWE2NF9wZXJfY3B1X3Zhcih2KSkKKyNkZWZpbmUgX19jcHVfbG9jYWxfYWRkKGksIHYpCV9fbG9jYWxfYWRkKChpKSwgJl9faWE2NF9wZXJfY3B1X3Zhcih2KSkKKyNkZWZpbmUgX19jcHVfbG9jYWxfc3ViKGksIHYpCV9fbG9jYWxfc3ViKChpKSwgJl9faWE2NF9wZXJfY3B1X3Zhcih2KSkKKworI2VuZGlmIC8qIF9BU01fSUE2NF9MT0NBTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L21hY2h2ZWMuaCBiL2luY2x1ZGUvYXNtLWlhNjQvbWFjaHZlYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5ZTg5YTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L21hY2h2ZWMuaApAQCAtMCwwICsxLDM5MCBAQAorLyoKKyAqIE1hY2hpbmUgdmVjdG9yIGZvciBJQS02NC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgU2lsaWNvbiBHcmFwaGljcywgSW5jLgorICogQ29weXJpZ2h0IChDKSBTcmluaXZhc2EgVGhpcnVtYWxhY2hhciA8c3ByYXNhZEBlbmdyLnNnaS5jb20+CisgKiBDb3B5cmlnaHQgKEMpIFZpamF5IENoYW5kZXIgPHZpamF5QGVuZ3Iuc2dpLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMTk5OS0yMDAxLCAyMDAzLTIwMDQgSGV3bGV0dC1QYWNrYXJkIENvLgorICoJRGF2aWQgTW9zYmVyZ2VyLVRhbmcgPGRhdmlkbUBocGwuaHAuY29tPgorICovCisjaWZuZGVmIF9BU01fSUE2NF9NQUNIVkVDX0gKKyNkZWZpbmUgX0FTTV9JQTY0X01BQ0hWRUNfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyogZm9yd2FyZCBkZWNsYXJhdGlvbnM6ICovCitzdHJ1Y3QgZGV2aWNlOworc3RydWN0IHB0X3JlZ3M7CitzdHJ1Y3Qgc2NhdHRlcmxpc3Q7CitzdHJ1Y3QgcGFnZTsKK3N0cnVjdCBtbV9zdHJ1Y3Q7CitzdHJ1Y3QgcGNpX2J1czsKKwordHlwZWRlZiB2b2lkIGlhNjRfbXZfc2V0dXBfdCAoY2hhciAqKik7Cit0eXBlZGVmIHZvaWQgaWE2NF9tdl9jcHVfaW5pdF90ICh2b2lkKTsKK3R5cGVkZWYgdm9pZCBpYTY0X212X2lycV9pbml0X3QgKHZvaWQpOwordHlwZWRlZiB2b2lkIGlhNjRfbXZfc2VuZF9pcGlfdCAoaW50LCBpbnQsIGludCwgaW50KTsKK3R5cGVkZWYgdm9pZCBpYTY0X212X3RpbWVyX2ludGVycnVwdF90IChpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKik7Cit0eXBlZGVmIHZvaWQgaWE2NF9tdl9nbG9iYWxfdGxiX3B1cmdlX3QgKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwordHlwZWRlZiB2b2lkIGlhNjRfbXZfdGxiX21pZ3JhdGVfZmluaXNoX3QgKHN0cnVjdCBtbV9zdHJ1Y3QgKik7Cit0eXBlZGVmIHVuc2lnbmVkIGludCBpYTY0X212X2xvY2FsX3ZlY3Rvcl90b19pcnEgKHU4KTsKK3R5cGVkZWYgY2hhciAqaWE2NF9tdl9wY2lfZ2V0X2xlZ2FjeV9tZW1fdCAoc3RydWN0IHBjaV9idXMgKik7Cit0eXBlZGVmIGludCBpYTY0X212X3BjaV9sZWdhY3lfcmVhZF90IChzdHJ1Y3QgcGNpX2J1cyAqLCB1MTYgcG9ydCwgdTMyICp2YWwsCisJCQkJICAgICAgIHU4IHNpemUpOwordHlwZWRlZiBpbnQgaWE2NF9tdl9wY2lfbGVnYWN5X3dyaXRlX3QgKHN0cnVjdCBwY2lfYnVzICosIHUxNiBwb3J0LCB1MzIgdmFsLAorCQkJCQl1OCBzaXplKTsKKworLyogRE1BLW1hcHBpbmcgaW50ZXJmYWNlOiAqLwordHlwZWRlZiB2b2lkIGlhNjRfbXZfZG1hX2luaXQgKHZvaWQpOwordHlwZWRlZiB2b2lkICppYTY0X212X2RtYV9hbGxvY19jb2hlcmVudCAoc3RydWN0IGRldmljZSAqLCBzaXplX3QsIGRtYV9hZGRyX3QgKiwgaW50KTsKK3R5cGVkZWYgdm9pZCBpYTY0X212X2RtYV9mcmVlX2NvaGVyZW50IChzdHJ1Y3QgZGV2aWNlICosIHNpemVfdCwgdm9pZCAqLCBkbWFfYWRkcl90KTsKK3R5cGVkZWYgZG1hX2FkZHJfdCBpYTY0X212X2RtYV9tYXBfc2luZ2xlIChzdHJ1Y3QgZGV2aWNlICosIHZvaWQgKiwgc2l6ZV90LCBpbnQpOwordHlwZWRlZiB2b2lkIGlhNjRfbXZfZG1hX3VubWFwX3NpbmdsZSAoc3RydWN0IGRldmljZSAqLCBkbWFfYWRkcl90LCBzaXplX3QsIGludCk7Cit0eXBlZGVmIGludCBpYTY0X212X2RtYV9tYXBfc2cgKHN0cnVjdCBkZXZpY2UgKiwgc3RydWN0IHNjYXR0ZXJsaXN0ICosIGludCwgaW50KTsKK3R5cGVkZWYgdm9pZCBpYTY0X212X2RtYV91bm1hcF9zZyAoc3RydWN0IGRldmljZSAqLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKiwgaW50LCBpbnQpOwordHlwZWRlZiB2b2lkIGlhNjRfbXZfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUgKHN0cnVjdCBkZXZpY2UgKiwgZG1hX2FkZHJfdCwgc2l6ZV90LCBpbnQpOwordHlwZWRlZiB2b2lkIGlhNjRfbXZfZG1hX3N5bmNfc2dfZm9yX2NwdSAoc3RydWN0IGRldmljZSAqLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKiwgaW50LCBpbnQpOwordHlwZWRlZiB2b2lkIGlhNjRfbXZfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UgKHN0cnVjdCBkZXZpY2UgKiwgZG1hX2FkZHJfdCwgc2l6ZV90LCBpbnQpOwordHlwZWRlZiB2b2lkIGlhNjRfbXZfZG1hX3N5bmNfc2dfZm9yX2RldmljZSAoc3RydWN0IGRldmljZSAqLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKiwgaW50LCBpbnQpOwordHlwZWRlZiBpbnQgaWE2NF9tdl9kbWFfbWFwcGluZ19lcnJvciAoZG1hX2FkZHJfdCBkbWFfYWRkcik7Cit0eXBlZGVmIGludCBpYTY0X212X2RtYV9zdXBwb3J0ZWQgKHN0cnVjdCBkZXZpY2UgKiwgdTY0KTsKKworLyoKKyAqIFdBUk5JTkc6IFRoZSBsZWdhY3kgSS9PIHNwYWNlIGlzIF9hcmNoaXRlY3RlZF8uICBQbGF0Zm9ybXMgYXJlCisgKiBleHBlY3RlZCB0byBmb2xsb3cgdGhpcyBhcmNoaXRlY3RlZCBtb2RlbCAoc2VlIFNlY3Rpb24gMTAuNyBpbiB0aGUKKyAqIElBLTY0IEFyY2hpdGVjdHVyZSBTb2Z0d2FyZSBEZXZlbG9wZXIncyBNYW51YWwpLiAgVW5mb3J0dW5hdGVseSwKKyAqIHNvbWUgYnJva2VuIG1hY2hpbmVzIGRvIG5vdCBmb2xsb3cgdGhhdCBtb2RlbCwgd2hpY2ggaXMgd2h5IHdlIGhhdmUKKyAqIHRvIG1ha2UgdGhlIGluWC9vdXRYIG9wZXJhdGlvbnMgcGFydCBvZiB0aGUgbWFjaGluZSB2ZWN0b3IuCisgKiBQbGF0Zm9ybSBkZXNpZ25lcnMgc2hvdWxkIGZvbGxvdyB0aGUgYXJjaGl0ZWN0ZWQgbW9kZWwgd2hlbmV2ZXIKKyAqIHBvc3NpYmxlLgorICovCit0eXBlZGVmIHVuc2lnbmVkIGludCBpYTY0X212X2luYl90ICh1bnNpZ25lZCBsb25nKTsKK3R5cGVkZWYgdW5zaWduZWQgaW50IGlhNjRfbXZfaW53X3QgKHVuc2lnbmVkIGxvbmcpOwordHlwZWRlZiB1bnNpZ25lZCBpbnQgaWE2NF9tdl9pbmxfdCAodW5zaWduZWQgbG9uZyk7Cit0eXBlZGVmIHZvaWQgaWE2NF9tdl9vdXRiX3QgKHVuc2lnbmVkIGNoYXIsIHVuc2lnbmVkIGxvbmcpOwordHlwZWRlZiB2b2lkIGlhNjRfbXZfb3V0d190ICh1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgbG9uZyk7Cit0eXBlZGVmIHZvaWQgaWE2NF9tdl9vdXRsX3QgKHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7Cit0eXBlZGVmIHZvaWQgaWE2NF9tdl9tbWlvd2JfdCAodm9pZCk7Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgaWE2NF9tdl9yZWFkYl90IChjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKik7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGlhNjRfbXZfcmVhZHdfdCAoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICopOwordHlwZWRlZiB1bnNpZ25lZCBpbnQgaWE2NF9tdl9yZWFkbF90IChjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKik7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaWE2NF9tdl9yZWFkcV90IChjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKik7Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgaWE2NF9tdl9yZWFkYl9yZWxheGVkX3QgKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqKTsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgaWE2NF9tdl9yZWFkd19yZWxheGVkX3QgKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqKTsKK3R5cGVkZWYgdW5zaWduZWQgaW50IGlhNjRfbXZfcmVhZGxfcmVsYXhlZF90IChjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKik7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaWE2NF9tdl9yZWFkcV9yZWxheGVkX3QgKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqKTsKKworc3RhdGljIGlubGluZSB2b2lkCittYWNodmVjX25vb3AgKHZvaWQpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorbWFjaHZlY19ub29wX21tIChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKK30KKworZXh0ZXJuIHZvaWQgbWFjaHZlY19zZXR1cCAoY2hhciAqKik7CitleHRlcm4gdm9pZCBtYWNodmVjX3RpbWVyX2ludGVycnVwdCAoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopOworZXh0ZXJuIHZvaWQgbWFjaHZlY19kbWFfc3luY19zaW5nbGUgKHN0cnVjdCBkZXZpY2UgKiwgZG1hX2FkZHJfdCwgc2l6ZV90LCBpbnQpOworZXh0ZXJuIHZvaWQgbWFjaHZlY19kbWFfc3luY19zZyAoc3RydWN0IGRldmljZSAqLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKiwgaW50LCBpbnQpOworZXh0ZXJuIHZvaWQgbWFjaHZlY190bGJfbWlncmF0ZV9maW5pc2ggKHN0cnVjdCBtbV9zdHJ1Y3QgKik7CisKKyMgaWYgZGVmaW5lZCAoQ09ORklHX0lBNjRfSFBfU0lNKQorIyAgaW5jbHVkZSA8YXNtL21hY2h2ZWNfaHBzaW0uaD4KKyMgZWxpZiBkZWZpbmVkIChDT05GSUdfSUE2NF9ESUcpCisjICBpbmNsdWRlIDxhc20vbWFjaHZlY19kaWcuaD4KKyMgZWxpZiBkZWZpbmVkIChDT05GSUdfSUE2NF9IUF9aWDEpCisjICBpbmNsdWRlIDxhc20vbWFjaHZlY19ocHp4MS5oPgorIyBlbGlmIGRlZmluZWQgKENPTkZJR19JQTY0X0hQX1pYMV9TV0lPVExCKQorIyAgaW5jbHVkZSA8YXNtL21hY2h2ZWNfaHB6eDFfc3dpb3RsYi5oPgorIyBlbGlmIGRlZmluZWQgKENPTkZJR19JQTY0X1NHSV9TTjIpCisjICBpbmNsdWRlIDxhc20vbWFjaHZlY19zbjIuaD4KKyMgZWxpZiBkZWZpbmVkIChDT05GSUdfSUE2NF9HRU5FUklDKQorCisjIGlmZGVmIE1BQ0hWRUNfUExBVEZPUk1fSEVBREVSCisjICBpbmNsdWRlIE1BQ0hWRUNfUExBVEZPUk1fSEVBREVSCisjIGVsc2UKKyMgIGRlZmluZSBwbGF0Zm9ybV9uYW1lCQlpYTY0X212Lm5hbWUKKyMgIGRlZmluZSBwbGF0Zm9ybV9zZXR1cAlpYTY0X212LnNldHVwCisjICBkZWZpbmUgcGxhdGZvcm1fY3B1X2luaXQJaWE2NF9tdi5jcHVfaW5pdAorIyAgZGVmaW5lIHBsYXRmb3JtX2lycV9pbml0CWlhNjRfbXYuaXJxX2luaXQKKyMgIGRlZmluZSBwbGF0Zm9ybV9zZW5kX2lwaQlpYTY0X212LnNlbmRfaXBpCisjICBkZWZpbmUgcGxhdGZvcm1fdGltZXJfaW50ZXJydXB0CWlhNjRfbXYudGltZXJfaW50ZXJydXB0CisjICBkZWZpbmUgcGxhdGZvcm1fZ2xvYmFsX3RsYl9wdXJnZQlpYTY0X212Lmdsb2JhbF90bGJfcHVyZ2UKKyMgIGRlZmluZSBwbGF0Zm9ybV90bGJfbWlncmF0ZV9maW5pc2gJaWE2NF9tdi50bGJfbWlncmF0ZV9maW5pc2gKKyMgIGRlZmluZSBwbGF0Zm9ybV9kbWFfaW5pdAkJaWE2NF9tdi5kbWFfaW5pdAorIyAgZGVmaW5lIHBsYXRmb3JtX2RtYV9hbGxvY19jb2hlcmVudAlpYTY0X212LmRtYV9hbGxvY19jb2hlcmVudAorIyAgZGVmaW5lIHBsYXRmb3JtX2RtYV9mcmVlX2NvaGVyZW50CWlhNjRfbXYuZG1hX2ZyZWVfY29oZXJlbnQKKyMgIGRlZmluZSBwbGF0Zm9ybV9kbWFfbWFwX3NpbmdsZQlpYTY0X212LmRtYV9tYXBfc2luZ2xlCisjICBkZWZpbmUgcGxhdGZvcm1fZG1hX3VubWFwX3NpbmdsZQlpYTY0X212LmRtYV91bm1hcF9zaW5nbGUKKyMgIGRlZmluZSBwbGF0Zm9ybV9kbWFfbWFwX3NnCQlpYTY0X212LmRtYV9tYXBfc2cKKyMgIGRlZmluZSBwbGF0Zm9ybV9kbWFfdW5tYXBfc2cJCWlhNjRfbXYuZG1hX3VubWFwX3NnCisjICBkZWZpbmUgcGxhdGZvcm1fZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUgaWE2NF9tdi5kbWFfc3luY19zaW5nbGVfZm9yX2NwdQorIyAgZGVmaW5lIHBsYXRmb3JtX2RtYV9zeW5jX3NnX2Zvcl9jcHUJaWE2NF9tdi5kbWFfc3luY19zZ19mb3JfY3B1CisjICBkZWZpbmUgcGxhdGZvcm1fZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UgaWE2NF9tdi5kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZQorIyAgZGVmaW5lIHBsYXRmb3JtX2RtYV9zeW5jX3NnX2Zvcl9kZXZpY2UgaWE2NF9tdi5kbWFfc3luY19zZ19mb3JfZGV2aWNlCisjICBkZWZpbmUgcGxhdGZvcm1fZG1hX21hcHBpbmdfZXJyb3IJCWlhNjRfbXYuZG1hX21hcHBpbmdfZXJyb3IKKyMgIGRlZmluZSBwbGF0Zm9ybV9kbWFfc3VwcG9ydGVkCWlhNjRfbXYuZG1hX3N1cHBvcnRlZAorIyAgZGVmaW5lIHBsYXRmb3JtX2xvY2FsX3ZlY3Rvcl90b19pcnEJaWE2NF9tdi5sb2NhbF92ZWN0b3JfdG9faXJxCisjICBkZWZpbmUgcGxhdGZvcm1fcGNpX2dldF9sZWdhY3lfbWVtCWlhNjRfbXYucGNpX2dldF9sZWdhY3lfbWVtCisjICBkZWZpbmUgcGxhdGZvcm1fcGNpX2xlZ2FjeV9yZWFkCWlhNjRfbXYucGNpX2xlZ2FjeV9yZWFkCisjICBkZWZpbmUgcGxhdGZvcm1fcGNpX2xlZ2FjeV93cml0ZQlpYTY0X212LnBjaV9sZWdhY3lfd3JpdGUKKyMgIGRlZmluZSBwbGF0Zm9ybV9pbmIJCWlhNjRfbXYuaW5iCisjICBkZWZpbmUgcGxhdGZvcm1faW53CQlpYTY0X212LmludworIyAgZGVmaW5lIHBsYXRmb3JtX2lubAkJaWE2NF9tdi5pbmwKKyMgIGRlZmluZSBwbGF0Zm9ybV9vdXRiCQlpYTY0X212Lm91dGIKKyMgIGRlZmluZSBwbGF0Zm9ybV9vdXR3CQlpYTY0X212Lm91dHcKKyMgIGRlZmluZSBwbGF0Zm9ybV9vdXRsCQlpYTY0X212Lm91dGwKKyMgIGRlZmluZSBwbGF0Zm9ybV9tbWlvd2IJaWE2NF9tdi5tbWlvd2IKKyMgIGRlZmluZSBwbGF0Zm9ybV9yZWFkYiAgICAgICAgaWE2NF9tdi5yZWFkYgorIyAgZGVmaW5lIHBsYXRmb3JtX3JlYWR3ICAgICAgICBpYTY0X212LnJlYWR3CisjICBkZWZpbmUgcGxhdGZvcm1fcmVhZGwgICAgICAgIGlhNjRfbXYucmVhZGwKKyMgIGRlZmluZSBwbGF0Zm9ybV9yZWFkcSAgICAgICAgaWE2NF9tdi5yZWFkcQorIyAgZGVmaW5lIHBsYXRmb3JtX3JlYWRiX3JlbGF4ZWQgICAgICAgIGlhNjRfbXYucmVhZGJfcmVsYXhlZAorIyAgZGVmaW5lIHBsYXRmb3JtX3JlYWR3X3JlbGF4ZWQgICAgICAgIGlhNjRfbXYucmVhZHdfcmVsYXhlZAorIyAgZGVmaW5lIHBsYXRmb3JtX3JlYWRsX3JlbGF4ZWQgICAgICAgIGlhNjRfbXYucmVhZGxfcmVsYXhlZAorIyAgZGVmaW5lIHBsYXRmb3JtX3JlYWRxX3JlbGF4ZWQgICAgICAgIGlhNjRfbXYucmVhZHFfcmVsYXhlZAorIyBlbmRpZgorCisvKiBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXygxNikpKSBpcyByZXF1aXJlZCB0byBtYWtlIHNpemUgb2YgdGhlCisgKiBzdHJ1Y3R1cmUgbXVsdGlwbGUgb2YgMTYgYnl0ZXMuCisgKiBUaGlzIHdpbGwgZmlsbHVwIHRoZSBob2xlcyBjcmVhdGVkIGJlY2F1c2Ugb2Ygc2VjdGlvbiAzLjMuMSBpbgorICogU29mdHdhcmUgQ29udmVudGlvbnMgZ3VpZGUuCisgKi8KK3N0cnVjdCBpYTY0X21hY2hpbmVfdmVjdG9yIHsKKwljb25zdCBjaGFyICpuYW1lOworCWlhNjRfbXZfc2V0dXBfdCAqc2V0dXA7CisJaWE2NF9tdl9jcHVfaW5pdF90ICpjcHVfaW5pdDsKKwlpYTY0X212X2lycV9pbml0X3QgKmlycV9pbml0OworCWlhNjRfbXZfc2VuZF9pcGlfdCAqc2VuZF9pcGk7CisJaWE2NF9tdl90aW1lcl9pbnRlcnJ1cHRfdCAqdGltZXJfaW50ZXJydXB0OworCWlhNjRfbXZfZ2xvYmFsX3RsYl9wdXJnZV90ICpnbG9iYWxfdGxiX3B1cmdlOworCWlhNjRfbXZfdGxiX21pZ3JhdGVfZmluaXNoX3QgKnRsYl9taWdyYXRlX2ZpbmlzaDsKKwlpYTY0X212X2RtYV9pbml0ICpkbWFfaW5pdDsKKwlpYTY0X212X2RtYV9hbGxvY19jb2hlcmVudCAqZG1hX2FsbG9jX2NvaGVyZW50OworCWlhNjRfbXZfZG1hX2ZyZWVfY29oZXJlbnQgKmRtYV9mcmVlX2NvaGVyZW50OworCWlhNjRfbXZfZG1hX21hcF9zaW5nbGUgKmRtYV9tYXBfc2luZ2xlOworCWlhNjRfbXZfZG1hX3VubWFwX3NpbmdsZSAqZG1hX3VubWFwX3NpbmdsZTsKKwlpYTY0X212X2RtYV9tYXBfc2cgKmRtYV9tYXBfc2c7CisJaWE2NF9tdl9kbWFfdW5tYXBfc2cgKmRtYV91bm1hcF9zZzsKKwlpYTY0X212X2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1ICpkbWFfc3luY19zaW5nbGVfZm9yX2NwdTsKKwlpYTY0X212X2RtYV9zeW5jX3NnX2Zvcl9jcHUgKmRtYV9zeW5jX3NnX2Zvcl9jcHU7CisJaWE2NF9tdl9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZSAqZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2U7CisJaWE2NF9tdl9kbWFfc3luY19zZ19mb3JfZGV2aWNlICpkbWFfc3luY19zZ19mb3JfZGV2aWNlOworCWlhNjRfbXZfZG1hX21hcHBpbmdfZXJyb3IgKmRtYV9tYXBwaW5nX2Vycm9yOworCWlhNjRfbXZfZG1hX3N1cHBvcnRlZCAqZG1hX3N1cHBvcnRlZDsKKwlpYTY0X212X2xvY2FsX3ZlY3Rvcl90b19pcnEgKmxvY2FsX3ZlY3Rvcl90b19pcnE7CisJaWE2NF9tdl9wY2lfZ2V0X2xlZ2FjeV9tZW1fdCAqcGNpX2dldF9sZWdhY3lfbWVtOworCWlhNjRfbXZfcGNpX2xlZ2FjeV9yZWFkX3QgKnBjaV9sZWdhY3lfcmVhZDsKKwlpYTY0X212X3BjaV9sZWdhY3lfd3JpdGVfdCAqcGNpX2xlZ2FjeV93cml0ZTsKKwlpYTY0X212X2luYl90ICppbmI7CisJaWE2NF9tdl9pbndfdCAqaW53OworCWlhNjRfbXZfaW5sX3QgKmlubDsKKwlpYTY0X212X291dGJfdCAqb3V0YjsKKwlpYTY0X212X291dHdfdCAqb3V0dzsKKwlpYTY0X212X291dGxfdCAqb3V0bDsKKwlpYTY0X212X21taW93Yl90ICptbWlvd2I7CisJaWE2NF9tdl9yZWFkYl90ICpyZWFkYjsKKwlpYTY0X212X3JlYWR3X3QgKnJlYWR3OworCWlhNjRfbXZfcmVhZGxfdCAqcmVhZGw7CisJaWE2NF9tdl9yZWFkcV90ICpyZWFkcTsKKwlpYTY0X212X3JlYWRiX3JlbGF4ZWRfdCAqcmVhZGJfcmVsYXhlZDsKKwlpYTY0X212X3JlYWR3X3JlbGF4ZWRfdCAqcmVhZHdfcmVsYXhlZDsKKwlpYTY0X212X3JlYWRsX3JlbGF4ZWRfdCAqcmVhZGxfcmVsYXhlZDsKKwlpYTY0X212X3JlYWRxX3JlbGF4ZWRfdCAqcmVhZHFfcmVsYXhlZDsKK30gX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oMTYpKSk7IC8qIGFsaWduIGF0dHJpYj8gc2VlIGFib3ZlIGNvbW1lbnQgKi8KKworI2RlZmluZSBNQUNIVkVDX0lOSVQobmFtZSkJCQlcCit7CQkJCQkJXAorCSNuYW1lLAkJCQkJXAorCXBsYXRmb3JtX3NldHVwLAkJCQlcCisJcGxhdGZvcm1fY3B1X2luaXQsCQkJXAorCXBsYXRmb3JtX2lycV9pbml0LAkJCVwKKwlwbGF0Zm9ybV9zZW5kX2lwaSwJCQlcCisJcGxhdGZvcm1fdGltZXJfaW50ZXJydXB0LAkJXAorCXBsYXRmb3JtX2dsb2JhbF90bGJfcHVyZ2UsCQlcCisJcGxhdGZvcm1fdGxiX21pZ3JhdGVfZmluaXNoLAkJXAorCXBsYXRmb3JtX2RtYV9pbml0LAkJCVwKKwlwbGF0Zm9ybV9kbWFfYWxsb2NfY29oZXJlbnQsCQlcCisJcGxhdGZvcm1fZG1hX2ZyZWVfY29oZXJlbnQsCQlcCisJcGxhdGZvcm1fZG1hX21hcF9zaW5nbGUsCQlcCisJcGxhdGZvcm1fZG1hX3VubWFwX3NpbmdsZSwJCVwKKwlwbGF0Zm9ybV9kbWFfbWFwX3NnLAkJCVwKKwlwbGF0Zm9ybV9kbWFfdW5tYXBfc2csCQkJXAorCXBsYXRmb3JtX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1LAlcCisJcGxhdGZvcm1fZG1hX3N5bmNfc2dfZm9yX2NwdSwJCVwKKwlwbGF0Zm9ybV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZSwJXAorCXBsYXRmb3JtX2RtYV9zeW5jX3NnX2Zvcl9kZXZpY2UsCVwKKwlwbGF0Zm9ybV9kbWFfbWFwcGluZ19lcnJvciwJCQlcCisJcGxhdGZvcm1fZG1hX3N1cHBvcnRlZCwJCQlcCisJcGxhdGZvcm1fbG9jYWxfdmVjdG9yX3RvX2lycSwJCVwKKwlwbGF0Zm9ybV9wY2lfZ2V0X2xlZ2FjeV9tZW0sCQlcCisJcGxhdGZvcm1fcGNpX2xlZ2FjeV9yZWFkLAkJXAorCXBsYXRmb3JtX3BjaV9sZWdhY3lfd3JpdGUsCQlcCisJcGxhdGZvcm1faW5iLAkJCQlcCisJcGxhdGZvcm1faW53LAkJCQlcCisJcGxhdGZvcm1faW5sLAkJCQlcCisJcGxhdGZvcm1fb3V0YiwJCQkJXAorCXBsYXRmb3JtX291dHcsCQkJCVwKKwlwbGF0Zm9ybV9vdXRsLAkJCQlcCisJcGxhdGZvcm1fbW1pb3diLAkJCVwKKwlwbGF0Zm9ybV9yZWFkYiwJCQkJXAorCXBsYXRmb3JtX3JlYWR3LAkJCQlcCisJcGxhdGZvcm1fcmVhZGwsCQkJCVwKKwlwbGF0Zm9ybV9yZWFkcSwJCQkJXAorCXBsYXRmb3JtX3JlYWRiX3JlbGF4ZWQsCQkJXAorCXBsYXRmb3JtX3JlYWR3X3JlbGF4ZWQsCQkJXAorCXBsYXRmb3JtX3JlYWRsX3JlbGF4ZWQsCQkJXAorCXBsYXRmb3JtX3JlYWRxX3JlbGF4ZWQsCQkJXAorfQorCitleHRlcm4gc3RydWN0IGlhNjRfbWFjaGluZV92ZWN0b3IgaWE2NF9tdjsKK2V4dGVybiB2b2lkIG1hY2h2ZWNfaW5pdCAoY29uc3QgY2hhciAqbmFtZSk7CisKKyMgZWxzZQorIyAgZXJyb3IgVW5rbm93biBjb25maWd1cmF0aW9uLiAgVXBkYXRlIGFzbS1pYTY0L21hY2h2ZWMuaC4KKyMgZW5kaWYgLyogQ09ORklHX0lBNjRfR0VORVJJQyAqLworCisvKgorICogRGVjbGFyZSBkZWZhdWx0IHJvdXRpbmVzIHdoaWNoIGFyZW4ndCBkZWNsYXJlZCBhbnl3aGVyZSBlbHNlOgorICovCitleHRlcm4gaWE2NF9tdl9kbWFfaW5pdAkJCXN3aW90bGJfaW5pdDsKK2V4dGVybiBpYTY0X212X2RtYV9hbGxvY19jb2hlcmVudAlzd2lvdGxiX2FsbG9jX2NvaGVyZW50OworZXh0ZXJuIGlhNjRfbXZfZG1hX2ZyZWVfY29oZXJlbnQJc3dpb3RsYl9mcmVlX2NvaGVyZW50OworZXh0ZXJuIGlhNjRfbXZfZG1hX21hcF9zaW5nbGUJCXN3aW90bGJfbWFwX3NpbmdsZTsKK2V4dGVybiBpYTY0X212X2RtYV91bm1hcF9zaW5nbGUJCXN3aW90bGJfdW5tYXBfc2luZ2xlOworZXh0ZXJuIGlhNjRfbXZfZG1hX21hcF9zZwkJc3dpb3RsYl9tYXBfc2c7CitleHRlcm4gaWE2NF9tdl9kbWFfdW5tYXBfc2cJCXN3aW90bGJfdW5tYXBfc2c7CitleHRlcm4gaWE2NF9tdl9kbWFfc3luY19zaW5nbGVfZm9yX2NwdQlzd2lvdGxiX3N5bmNfc2luZ2xlX2Zvcl9jcHU7CitleHRlcm4gaWE2NF9tdl9kbWFfc3luY19zZ19mb3JfY3B1CXN3aW90bGJfc3luY19zZ19mb3JfY3B1OworZXh0ZXJuIGlhNjRfbXZfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2Ugc3dpb3RsYl9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlOworZXh0ZXJuIGlhNjRfbXZfZG1hX3N5bmNfc2dfZm9yX2RldmljZQlzd2lvdGxiX3N5bmNfc2dfZm9yX2RldmljZTsKK2V4dGVybiBpYTY0X212X2RtYV9tYXBwaW5nX2Vycm9yCXN3aW90bGJfZG1hX21hcHBpbmdfZXJyb3I7CitleHRlcm4gaWE2NF9tdl9kbWFfc3VwcG9ydGVkCQlzd2lvdGxiX2RtYV9zdXBwb3J0ZWQ7CisKKy8qCisgKiBEZWZpbmUgZGVmYXVsdCB2ZXJzaW9ucyBzbyB3ZSBjYW4gZXh0ZW5kIG1hY2h2ZWMgZm9yIG5ldyBwbGF0Zm9ybXMgd2l0aG91dCBoYXZpbmcKKyAqIHRvIHVwZGF0ZSB0aGUgbWFjaHZlYyBmaWxlcyBmb3IgYWxsIGV4aXN0aW5nIHBsYXRmb3Jtcy4KKyAqLworI2lmbmRlZiBwbGF0Zm9ybV9zZXR1cAorIyBkZWZpbmUgcGxhdGZvcm1fc2V0dXAJCQltYWNodmVjX3NldHVwCisjZW5kaWYKKyNpZm5kZWYgcGxhdGZvcm1fY3B1X2luaXQKKyMgZGVmaW5lIHBsYXRmb3JtX2NwdV9pbml0CQltYWNodmVjX25vb3AKKyNlbmRpZgorI2lmbmRlZiBwbGF0Zm9ybV9pcnFfaW5pdAorIyBkZWZpbmUgcGxhdGZvcm1faXJxX2luaXQJCW1hY2h2ZWNfbm9vcAorI2VuZGlmCisKKyNpZm5kZWYgcGxhdGZvcm1fc2VuZF9pcGkKKyMgZGVmaW5lIHBsYXRmb3JtX3NlbmRfaXBpCQlpYTY0X3NlbmRfaXBpCS8qIGRlZmF1bHQgdG8gYXJjaGl0ZWN0ZWQgdmVyc2lvbiAqLworI2VuZGlmCisjaWZuZGVmIHBsYXRmb3JtX3RpbWVyX2ludGVycnVwdAorIyBkZWZpbmUgcGxhdGZvcm1fdGltZXJfaW50ZXJydXB0IAltYWNodmVjX3RpbWVyX2ludGVycnVwdAorI2VuZGlmCisjaWZuZGVmIHBsYXRmb3JtX2dsb2JhbF90bGJfcHVyZ2UKKyMgZGVmaW5lIHBsYXRmb3JtX2dsb2JhbF90bGJfcHVyZ2UJaWE2NF9nbG9iYWxfdGxiX3B1cmdlIC8qIGRlZmF1bHQgdG8gYXJjaGl0ZWN0ZWQgdmVyc2lvbiAqLworI2VuZGlmCisjaWZuZGVmIHBsYXRmb3JtX3RsYl9taWdyYXRlX2ZpbmlzaAorIyBkZWZpbmUgcGxhdGZvcm1fdGxiX21pZ3JhdGVfZmluaXNoCW1hY2h2ZWNfbm9vcF9tbQorI2VuZGlmCisjaWZuZGVmIHBsYXRmb3JtX2RtYV9pbml0CisjIGRlZmluZSBwbGF0Zm9ybV9kbWFfaW5pdAkJc3dpb3RsYl9pbml0CisjZW5kaWYKKyNpZm5kZWYgcGxhdGZvcm1fZG1hX2FsbG9jX2NvaGVyZW50CisjIGRlZmluZSBwbGF0Zm9ybV9kbWFfYWxsb2NfY29oZXJlbnQJc3dpb3RsYl9hbGxvY19jb2hlcmVudAorI2VuZGlmCisjaWZuZGVmIHBsYXRmb3JtX2RtYV9mcmVlX2NvaGVyZW50CisjIGRlZmluZSBwbGF0Zm9ybV9kbWFfZnJlZV9jb2hlcmVudAlzd2lvdGxiX2ZyZWVfY29oZXJlbnQKKyNlbmRpZgorI2lmbmRlZiBwbGF0Zm9ybV9kbWFfbWFwX3NpbmdsZQorIyBkZWZpbmUgcGxhdGZvcm1fZG1hX21hcF9zaW5nbGUJc3dpb3RsYl9tYXBfc2luZ2xlCisjZW5kaWYKKyNpZm5kZWYgcGxhdGZvcm1fZG1hX3VubWFwX3NpbmdsZQorIyBkZWZpbmUgcGxhdGZvcm1fZG1hX3VubWFwX3NpbmdsZQlzd2lvdGxiX3VubWFwX3NpbmdsZQorI2VuZGlmCisjaWZuZGVmIHBsYXRmb3JtX2RtYV9tYXBfc2cKKyMgZGVmaW5lIHBsYXRmb3JtX2RtYV9tYXBfc2cJCXN3aW90bGJfbWFwX3NnCisjZW5kaWYKKyNpZm5kZWYgcGxhdGZvcm1fZG1hX3VubWFwX3NnCisjIGRlZmluZSBwbGF0Zm9ybV9kbWFfdW5tYXBfc2cJCXN3aW90bGJfdW5tYXBfc2cKKyNlbmRpZgorI2lmbmRlZiBwbGF0Zm9ybV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdQorIyBkZWZpbmUgcGxhdGZvcm1fZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUJc3dpb3RsYl9zeW5jX3NpbmdsZV9mb3JfY3B1CisjZW5kaWYKKyNpZm5kZWYgcGxhdGZvcm1fZG1hX3N5bmNfc2dfZm9yX2NwdQorIyBkZWZpbmUgcGxhdGZvcm1fZG1hX3N5bmNfc2dfZm9yX2NwdQkJc3dpb3RsYl9zeW5jX3NnX2Zvcl9jcHUKKyNlbmRpZgorI2lmbmRlZiBwbGF0Zm9ybV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZQorIyBkZWZpbmUgcGxhdGZvcm1fZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UJc3dpb3RsYl9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlCisjZW5kaWYKKyNpZm5kZWYgcGxhdGZvcm1fZG1hX3N5bmNfc2dfZm9yX2RldmljZQorIyBkZWZpbmUgcGxhdGZvcm1fZG1hX3N5bmNfc2dfZm9yX2RldmljZQlzd2lvdGxiX3N5bmNfc2dfZm9yX2RldmljZQorI2VuZGlmCisjaWZuZGVmIHBsYXRmb3JtX2RtYV9tYXBwaW5nX2Vycm9yCisjIGRlZmluZSBwbGF0Zm9ybV9kbWFfbWFwcGluZ19lcnJvcgkJc3dpb3RsYl9kbWFfbWFwcGluZ19lcnJvcgorI2VuZGlmCisjaWZuZGVmIHBsYXRmb3JtX2RtYV9zdXBwb3J0ZWQKKyMgZGVmaW5lICBwbGF0Zm9ybV9kbWFfc3VwcG9ydGVkCXN3aW90bGJfZG1hX3N1cHBvcnRlZAorI2VuZGlmCisjaWZuZGVmIHBsYXRmb3JtX2xvY2FsX3ZlY3Rvcl90b19pcnEKKyMgZGVmaW5lIHBsYXRmb3JtX2xvY2FsX3ZlY3Rvcl90b19pcnEJX19pYTY0X2xvY2FsX3ZlY3Rvcl90b19pcnEKKyNlbmRpZgorI2lmbmRlZiBwbGF0Zm9ybV9wY2lfZ2V0X2xlZ2FjeV9tZW0KKyMgZGVmaW5lIHBsYXRmb3JtX3BjaV9nZXRfbGVnYWN5X21lbQlpYTY0X3BjaV9nZXRfbGVnYWN5X21lbQorI2VuZGlmCisjaWZuZGVmIHBsYXRmb3JtX3BjaV9sZWdhY3lfcmVhZAorIyBkZWZpbmUgcGxhdGZvcm1fcGNpX2xlZ2FjeV9yZWFkCWlhNjRfcGNpX2xlZ2FjeV9yZWFkCisjZW5kaWYKKyNpZm5kZWYgcGxhdGZvcm1fcGNpX2xlZ2FjeV93cml0ZQorIyBkZWZpbmUgcGxhdGZvcm1fcGNpX2xlZ2FjeV93cml0ZQlpYTY0X3BjaV9sZWdhY3lfd3JpdGUKKyNlbmRpZgorI2lmbmRlZiBwbGF0Zm9ybV9pbmIKKyMgZGVmaW5lIHBsYXRmb3JtX2luYgkJX19pYTY0X2luYgorI2VuZGlmCisjaWZuZGVmIHBsYXRmb3JtX2ludworIyBkZWZpbmUgcGxhdGZvcm1faW53CQlfX2lhNjRfaW53CisjZW5kaWYKKyNpZm5kZWYgcGxhdGZvcm1faW5sCisjIGRlZmluZSBwbGF0Zm9ybV9pbmwJCV9faWE2NF9pbmwKKyNlbmRpZgorI2lmbmRlZiBwbGF0Zm9ybV9vdXRiCisjIGRlZmluZSBwbGF0Zm9ybV9vdXRiCQlfX2lhNjRfb3V0YgorI2VuZGlmCisjaWZuZGVmIHBsYXRmb3JtX291dHcKKyMgZGVmaW5lIHBsYXRmb3JtX291dHcJCV9faWE2NF9vdXR3CisjZW5kaWYKKyNpZm5kZWYgcGxhdGZvcm1fb3V0bAorIyBkZWZpbmUgcGxhdGZvcm1fb3V0bAkJX19pYTY0X291dGwKKyNlbmRpZgorI2lmbmRlZiBwbGF0Zm9ybV9tbWlvd2IKKyMgZGVmaW5lIHBsYXRmb3JtX21taW93YglfX2lhNjRfbW1pb3diCisjZW5kaWYKKyNpZm5kZWYgcGxhdGZvcm1fcmVhZGIKKyMgZGVmaW5lIHBsYXRmb3JtX3JlYWRiCQlfX2lhNjRfcmVhZGIKKyNlbmRpZgorI2lmbmRlZiBwbGF0Zm9ybV9yZWFkdworIyBkZWZpbmUgcGxhdGZvcm1fcmVhZHcJCV9faWE2NF9yZWFkdworI2VuZGlmCisjaWZuZGVmIHBsYXRmb3JtX3JlYWRsCisjIGRlZmluZSBwbGF0Zm9ybV9yZWFkbAkJX19pYTY0X3JlYWRsCisjZW5kaWYKKyNpZm5kZWYgcGxhdGZvcm1fcmVhZHEKKyMgZGVmaW5lIHBsYXRmb3JtX3JlYWRxCQlfX2lhNjRfcmVhZHEKKyNlbmRpZgorI2lmbmRlZiBwbGF0Zm9ybV9yZWFkYl9yZWxheGVkCisjIGRlZmluZSBwbGF0Zm9ybV9yZWFkYl9yZWxheGVkCV9faWE2NF9yZWFkYl9yZWxheGVkCisjZW5kaWYKKyNpZm5kZWYgcGxhdGZvcm1fcmVhZHdfcmVsYXhlZAorIyBkZWZpbmUgcGxhdGZvcm1fcmVhZHdfcmVsYXhlZAlfX2lhNjRfcmVhZHdfcmVsYXhlZAorI2VuZGlmCisjaWZuZGVmIHBsYXRmb3JtX3JlYWRsX3JlbGF4ZWQKKyMgZGVmaW5lIHBsYXRmb3JtX3JlYWRsX3JlbGF4ZWQJX19pYTY0X3JlYWRsX3JlbGF4ZWQKKyNlbmRpZgorI2lmbmRlZiBwbGF0Zm9ybV9yZWFkcV9yZWxheGVkCisjIGRlZmluZSBwbGF0Zm9ybV9yZWFkcV9yZWxheGVkCV9faWE2NF9yZWFkcV9yZWxheGVkCisjZW5kaWYKKworI2VuZGlmIC8qIF9BU01fSUE2NF9NQUNIVkVDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvbWFjaHZlY19kaWcuaCBiL2luY2x1ZGUvYXNtLWlhNjQvbWFjaHZlY19kaWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGM4NTIyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taWE2NC9tYWNodmVjX2RpZy5oCkBAIC0wLDAgKzEsMTggQEAKKyNpZm5kZWYgX0FTTV9JQTY0X01BQ0hWRUNfRElHX2gKKyNkZWZpbmUgX0FTTV9JQTY0X01BQ0hWRUNfRElHX2gKKworZXh0ZXJuIGlhNjRfbXZfc2V0dXBfdCBkaWdfc2V0dXA7CitleHRlcm4gaWE2NF9tdl9pcnFfaW5pdF90IGRpZ19pcnFfaW5pdDsKKworLyoKKyAqIFRoaXMgc3R1ZmYgaGFzIGR1YWwgdXNlIQorICoKKyAqIEZvciBhIGdlbmVyaWMga2VybmVsLCB0aGUgbWFjcm9zIGFyZSB1c2VkIHRvIGluaXRpYWxpemUgdGhlCisgKiBwbGF0Zm9ybSdzIG1hY2h2ZWMgc3RydWN0dXJlLiAgV2hlbiBjb21waWxpbmcgYSBub24tZ2VuZXJpYyBrZXJuZWwsCisgKiB0aGUgbWFjcm9zIGFyZSB1c2VkIGRpcmVjdGx5LgorICovCisjZGVmaW5lIHBsYXRmb3JtX25hbWUJCSJkaWciCisjZGVmaW5lIHBsYXRmb3JtX3NldHVwCQlkaWdfc2V0dXAKKyNkZWZpbmUgcGxhdGZvcm1faXJxX2luaXQJZGlnX2lycV9pbml0CisKKyNlbmRpZiAvKiBfQVNNX0lBNjRfTUFDSFZFQ19ESUdfaCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9tYWNodmVjX2hwc2ltLmggYi9pbmNsdWRlL2FzbS1pYTY0L21hY2h2ZWNfaHBzaW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjcyZmM4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taWE2NC9tYWNodmVjX2hwc2ltLmgKQEAgLTAsMCArMSwxOCBAQAorI2lmbmRlZiBfQVNNX0lBNjRfTUFDSFZFQ19IUFNJTV9oCisjZGVmaW5lIF9BU01fSUE2NF9NQUNIVkVDX0hQU0lNX2gKKworZXh0ZXJuIGlhNjRfbXZfc2V0dXBfdCBocHNpbV9zZXR1cDsKK2V4dGVybiBpYTY0X212X2lycV9pbml0X3QgaHBzaW1faXJxX2luaXQ7CisKKy8qCisgKiBUaGlzIHN0dWZmIGhhcyBkdWFsIHVzZSEKKyAqCisgKiBGb3IgYSBnZW5lcmljIGtlcm5lbCwgdGhlIG1hY3JvcyBhcmUgdXNlZCB0byBpbml0aWFsaXplIHRoZQorICogcGxhdGZvcm0ncyBtYWNodmVjIHN0cnVjdHVyZS4gIFdoZW4gY29tcGlsaW5nIGEgbm9uLWdlbmVyaWMga2VybmVsLAorICogdGhlIG1hY3JvcyBhcmUgdXNlZCBkaXJlY3RseS4KKyAqLworI2RlZmluZSBwbGF0Zm9ybV9uYW1lCQkiaHBzaW0iCisjZGVmaW5lIHBsYXRmb3JtX3NldHVwCQlocHNpbV9zZXR1cAorI2RlZmluZSBwbGF0Zm9ybV9pcnFfaW5pdAlocHNpbV9pcnFfaW5pdAorCisjZW5kaWYgLyogX0FTTV9JQTY0X01BQ0hWRUNfSFBTSU1faCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9tYWNodmVjX2hwengxLmggYi9pbmNsdWRlL2FzbS1pYTY0L21hY2h2ZWNfaHB6eDEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWFmZTUwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taWE2NC9tYWNodmVjX2hwengxLmgKQEAgLTAsMCArMSwzOCBAQAorI2lmbmRlZiBfQVNNX0lBNjRfTUFDSFZFQ19IUFpYMV9oCisjZGVmaW5lIF9BU01fSUE2NF9NQUNIVkVDX0hQWlgxX2gKKworZXh0ZXJuIGlhNjRfbXZfc2V0dXBfdCBkaWdfc2V0dXA7CitleHRlcm4gaWE2NF9tdl9zZXR1cF90CQkJc2JhX3NldHVwOworZXh0ZXJuIGlhNjRfbXZfZG1hX2FsbG9jX2NvaGVyZW50CXNiYV9hbGxvY19jb2hlcmVudDsKK2V4dGVybiBpYTY0X212X2RtYV9mcmVlX2NvaGVyZW50CXNiYV9mcmVlX2NvaGVyZW50OworZXh0ZXJuIGlhNjRfbXZfZG1hX21hcF9zaW5nbGUJCXNiYV9tYXBfc2luZ2xlOworZXh0ZXJuIGlhNjRfbXZfZG1hX3VubWFwX3NpbmdsZQkJc2JhX3VubWFwX3NpbmdsZTsKK2V4dGVybiBpYTY0X212X2RtYV9tYXBfc2cJCXNiYV9tYXBfc2c7CitleHRlcm4gaWE2NF9tdl9kbWFfdW5tYXBfc2cJCXNiYV91bm1hcF9zZzsKK2V4dGVybiBpYTY0X212X2RtYV9zdXBwb3J0ZWQJCXNiYV9kbWFfc3VwcG9ydGVkOworZXh0ZXJuIGlhNjRfbXZfZG1hX21hcHBpbmdfZXJyb3IJc2JhX2RtYV9tYXBwaW5nX2Vycm9yOworCisvKgorICogVGhpcyBzdHVmZiBoYXMgZHVhbCB1c2UhCisgKgorICogRm9yIGEgZ2VuZXJpYyBrZXJuZWwsIHRoZSBtYWNyb3MgYXJlIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUKKyAqIHBsYXRmb3JtJ3MgbWFjaHZlYyBzdHJ1Y3R1cmUuICBXaGVuIGNvbXBpbGluZyBhIG5vbi1nZW5lcmljIGtlcm5lbCwKKyAqIHRoZSBtYWNyb3MgYXJlIHVzZWQgZGlyZWN0bHkuCisgKi8KKyNkZWZpbmUgcGxhdGZvcm1fbmFtZQkJCSJocHp4MSIKKyNkZWZpbmUgcGxhdGZvcm1fc2V0dXAJCQlzYmFfc2V0dXAKKyNkZWZpbmUgcGxhdGZvcm1fZG1hX2luaXQJCW1hY2h2ZWNfbm9vcAorI2RlZmluZSBwbGF0Zm9ybV9kbWFfYWxsb2NfY29oZXJlbnQJc2JhX2FsbG9jX2NvaGVyZW50CisjZGVmaW5lIHBsYXRmb3JtX2RtYV9mcmVlX2NvaGVyZW50CXNiYV9mcmVlX2NvaGVyZW50CisjZGVmaW5lIHBsYXRmb3JtX2RtYV9tYXBfc2luZ2xlCQlzYmFfbWFwX3NpbmdsZQorI2RlZmluZSBwbGF0Zm9ybV9kbWFfdW5tYXBfc2luZ2xlCXNiYV91bm1hcF9zaW5nbGUKKyNkZWZpbmUgcGxhdGZvcm1fZG1hX21hcF9zZwkJc2JhX21hcF9zZworI2RlZmluZSBwbGF0Zm9ybV9kbWFfdW5tYXBfc2cJCXNiYV91bm1hcF9zZworI2RlZmluZSBwbGF0Zm9ybV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdQltYWNodmVjX2RtYV9zeW5jX3NpbmdsZQorI2RlZmluZSBwbGF0Zm9ybV9kbWFfc3luY19zZ19mb3JfY3B1CQltYWNodmVjX2RtYV9zeW5jX3NnCisjZGVmaW5lIHBsYXRmb3JtX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlCW1hY2h2ZWNfZG1hX3N5bmNfc2luZ2xlCisjZGVmaW5lIHBsYXRmb3JtX2RtYV9zeW5jX3NnX2Zvcl9kZXZpY2UJCW1hY2h2ZWNfZG1hX3N5bmNfc2cKKyNkZWZpbmUgcGxhdGZvcm1fZG1hX3N1cHBvcnRlZAkJCXNiYV9kbWFfc3VwcG9ydGVkCisjZGVmaW5lIHBsYXRmb3JtX2RtYV9tYXBwaW5nX2Vycm9yCQlzYmFfZG1hX21hcHBpbmdfZXJyb3IKKworI2VuZGlmIC8qIF9BU01fSUE2NF9NQUNIVkVDX0hQWlgxX2ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvbWFjaHZlY19ocHp4MV9zd2lvdGxiLmggYi9pbmNsdWRlL2FzbS1pYTY0L21hY2h2ZWNfaHB6eDFfc3dpb3RsYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5MjRiMWIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L21hY2h2ZWNfaHB6eDFfc3dpb3RsYi5oCkBAIC0wLDAgKzEsNDMgQEAKKyNpZm5kZWYgX0FTTV9JQTY0X01BQ0hWRUNfSFBaWDFfU1dJT1RMQl9oCisjZGVmaW5lIF9BU01fSUE2NF9NQUNIVkVDX0hQWlgxX1NXSU9UTEJfaAorCitleHRlcm4gaWE2NF9tdl9zZXR1cF90CQkJCWRpZ19zZXR1cDsKK2V4dGVybiBpYTY0X212X2RtYV9pbml0CQkJCWh3c3dfaW5pdDsKK2V4dGVybiBpYTY0X212X2RtYV9hbGxvY19jb2hlcmVudAkJaHdzd19hbGxvY19jb2hlcmVudDsKK2V4dGVybiBpYTY0X212X2RtYV9mcmVlX2NvaGVyZW50CQlod3N3X2ZyZWVfY29oZXJlbnQ7CitleHRlcm4gaWE2NF9tdl9kbWFfbWFwX3NpbmdsZQkJCWh3c3dfbWFwX3NpbmdsZTsKK2V4dGVybiBpYTY0X212X2RtYV91bm1hcF9zaW5nbGUJCQlod3N3X3VubWFwX3NpbmdsZTsKK2V4dGVybiBpYTY0X212X2RtYV9tYXBfc2cJCQlod3N3X21hcF9zZzsKK2V4dGVybiBpYTY0X212X2RtYV91bm1hcF9zZwkJCWh3c3dfdW5tYXBfc2c7CitleHRlcm4gaWE2NF9tdl9kbWFfc3VwcG9ydGVkCQkJaHdzd19kbWFfc3VwcG9ydGVkOworZXh0ZXJuIGlhNjRfbXZfZG1hX21hcHBpbmdfZXJyb3IJCWh3c3dfZG1hX21hcHBpbmdfZXJyb3I7CitleHRlcm4gaWE2NF9tdl9kbWFfc3luY19zaW5nbGVfZm9yX2NwdQkJaHdzd19zeW5jX3NpbmdsZV9mb3JfY3B1OworZXh0ZXJuIGlhNjRfbXZfZG1hX3N5bmNfc2dfZm9yX2NwdQkJaHdzd19zeW5jX3NnX2Zvcl9jcHU7CitleHRlcm4gaWE2NF9tdl9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZQlod3N3X3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2U7CitleHRlcm4gaWE2NF9tdl9kbWFfc3luY19zZ19mb3JfZGV2aWNlCQlod3N3X3N5bmNfc2dfZm9yX2RldmljZTsKKworLyoKKyAqIFRoaXMgc3R1ZmYgaGFzIGR1YWwgdXNlIQorICoKKyAqIEZvciBhIGdlbmVyaWMga2VybmVsLCB0aGUgbWFjcm9zIGFyZSB1c2VkIHRvIGluaXRpYWxpemUgdGhlCisgKiBwbGF0Zm9ybSdzIG1hY2h2ZWMgc3RydWN0dXJlLiAgV2hlbiBjb21waWxpbmcgYSBub24tZ2VuZXJpYyBrZXJuZWwsCisgKiB0aGUgbWFjcm9zIGFyZSB1c2VkIGRpcmVjdGx5LgorICovCisjZGVmaW5lIHBsYXRmb3JtX25hbWUJCQkJImhwengxX3N3aW90bGIiCisKKyNkZWZpbmUgcGxhdGZvcm1fc2V0dXAJCQkJZGlnX3NldHVwCisjZGVmaW5lIHBsYXRmb3JtX2RtYV9pbml0CQkJaHdzd19pbml0CisjZGVmaW5lIHBsYXRmb3JtX2RtYV9hbGxvY19jb2hlcmVudAkJaHdzd19hbGxvY19jb2hlcmVudAorI2RlZmluZSBwbGF0Zm9ybV9kbWFfZnJlZV9jb2hlcmVudAkJaHdzd19mcmVlX2NvaGVyZW50CisjZGVmaW5lIHBsYXRmb3JtX2RtYV9tYXBfc2luZ2xlCQkJaHdzd19tYXBfc2luZ2xlCisjZGVmaW5lIHBsYXRmb3JtX2RtYV91bm1hcF9zaW5nbGUJCWh3c3dfdW5tYXBfc2luZ2xlCisjZGVmaW5lIHBsYXRmb3JtX2RtYV9tYXBfc2cJCQlod3N3X21hcF9zZworI2RlZmluZSBwbGF0Zm9ybV9kbWFfdW5tYXBfc2cJCQlod3N3X3VubWFwX3NnCisjZGVmaW5lIHBsYXRmb3JtX2RtYV9zdXBwb3J0ZWQJCQlod3N3X2RtYV9zdXBwb3J0ZWQKKyNkZWZpbmUgcGxhdGZvcm1fZG1hX21hcHBpbmdfZXJyb3IJCWh3c3dfZG1hX21hcHBpbmdfZXJyb3IKKyNkZWZpbmUgcGxhdGZvcm1fZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUJaHdzd19zeW5jX3NpbmdsZV9mb3JfY3B1CisjZGVmaW5lIHBsYXRmb3JtX2RtYV9zeW5jX3NnX2Zvcl9jcHUJCWh3c3dfc3luY19zZ19mb3JfY3B1CisjZGVmaW5lIHBsYXRmb3JtX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlCWh3c3dfc3luY19zaW5nbGVfZm9yX2RldmljZQorI2RlZmluZSBwbGF0Zm9ybV9kbWFfc3luY19zZ19mb3JfZGV2aWNlCQlod3N3X3N5bmNfc2dfZm9yX2RldmljZQorCisjZW5kaWYgLyogX0FTTV9JQTY0X01BQ0hWRUNfSFBaWDFfU1dJT1RMQl9oICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L21hY2h2ZWNfaW5pdC5oIGIvaW5jbHVkZS9hc20taWE2NC9tYWNodmVjX2luaXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDM2ZjY4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taWE2NC9tYWNodmVjX2luaXQuaApAQCAtMCwwICsxLDMyIEBACisjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KKworZXh0ZXJuIGlhNjRfbXZfc2VuZF9pcGlfdCBpYTY0X3NlbmRfaXBpOworZXh0ZXJuIGlhNjRfbXZfZ2xvYmFsX3RsYl9wdXJnZV90IGlhNjRfZ2xvYmFsX3RsYl9wdXJnZTsKK2V4dGVybiBpYTY0X212X2xvY2FsX3ZlY3Rvcl90b19pcnEgX19pYTY0X2xvY2FsX3ZlY3Rvcl90b19pcnE7CitleHRlcm4gaWE2NF9tdl9wY2lfZ2V0X2xlZ2FjeV9tZW1fdCBpYTY0X3BjaV9nZXRfbGVnYWN5X21lbTsKK2V4dGVybiBpYTY0X212X3BjaV9sZWdhY3lfcmVhZF90IGlhNjRfcGNpX2xlZ2FjeV9yZWFkOworZXh0ZXJuIGlhNjRfbXZfcGNpX2xlZ2FjeV93cml0ZV90IGlhNjRfcGNpX2xlZ2FjeV93cml0ZTsKKworZXh0ZXJuIGlhNjRfbXZfaW5iX3QgX19pYTY0X2luYjsKK2V4dGVybiBpYTY0X212X2lud190IF9faWE2NF9pbnc7CitleHRlcm4gaWE2NF9tdl9pbmxfdCBfX2lhNjRfaW5sOworZXh0ZXJuIGlhNjRfbXZfb3V0Yl90IF9faWE2NF9vdXRiOworZXh0ZXJuIGlhNjRfbXZfb3V0d190IF9faWE2NF9vdXR3OworZXh0ZXJuIGlhNjRfbXZfb3V0bF90IF9faWE2NF9vdXRsOworZXh0ZXJuIGlhNjRfbXZfbW1pb3diX3QgX19pYTY0X21taW93YjsKK2V4dGVybiBpYTY0X212X3JlYWRiX3QgX19pYTY0X3JlYWRiOworZXh0ZXJuIGlhNjRfbXZfcmVhZHdfdCBfX2lhNjRfcmVhZHc7CitleHRlcm4gaWE2NF9tdl9yZWFkbF90IF9faWE2NF9yZWFkbDsKK2V4dGVybiBpYTY0X212X3JlYWRxX3QgX19pYTY0X3JlYWRxOworZXh0ZXJuIGlhNjRfbXZfcmVhZGJfdCBfX2lhNjRfcmVhZGJfcmVsYXhlZDsKK2V4dGVybiBpYTY0X212X3JlYWR3X3QgX19pYTY0X3JlYWR3X3JlbGF4ZWQ7CitleHRlcm4gaWE2NF9tdl9yZWFkbF90IF9faWE2NF9yZWFkbF9yZWxheGVkOworZXh0ZXJuIGlhNjRfbXZfcmVhZHFfdCBfX2lhNjRfcmVhZHFfcmVsYXhlZDsKKworI2RlZmluZSBNQUNIVkVDX0hFTFBFUihuYW1lKQkJCQkJCQkJCVwKKyBzdHJ1Y3QgaWE2NF9tYWNoaW5lX3ZlY3RvciBtYWNodmVjXyMjbmFtZSBfX2F0dHJpYnV0ZV9fICgodW51c2VkLCBfX3NlY3Rpb25fXyAoIi5tYWNodmVjIikpKQlcCisJPSBNQUNIVkVDX0lOSVQobmFtZSk7CisKKyNkZWZpbmUgTUFDSFZFQ19ERUZJTkUobmFtZSkJTUFDSFZFQ19IRUxQRVIobmFtZSkKKworTUFDSFZFQ19ERUZJTkUoTUFDSFZFQ19QTEFURk9STV9OQU1FKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9tYWNodmVjX3NuMi5oIGIvaW5jbHVkZS9hc20taWE2NC9tYWNodmVjX3NuMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxYjZjZDYzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taWE2NC9tYWNodmVjX3NuMi5oCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDMgU2lsaWNvbiBHcmFwaGljcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIAorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgCisgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICogCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3b3VsZCBiZSB1c2VmdWwsIGJ1dCAKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIAorICogCisgKiBGdXJ0aGVyLCB0aGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIHdpdGhvdXQgYW55IHdhcnJhbnR5IHRoYXQgaXQgaXMgCisgKiBmcmVlIG9mIHRoZSByaWdodGZ1bCBjbGFpbSBvZiBhbnkgdGhpcmQgcGVyc29uIHJlZ2FyZGluZyBpbmZyaW5nZW1lbnQgCisgKiBvciB0aGUgbGlrZS4gIEFueSBsaWNlbnNlIHByb3ZpZGVkIGhlcmVpbiwgd2hldGhlciBpbXBsaWVkIG9yIAorICogb3RoZXJ3aXNlLCBhcHBsaWVzIG9ubHkgdG8gdGhpcyBzb2Z0d2FyZSBmaWxlLiAgUGF0ZW50IGxpY2Vuc2VzLCBpZiAKKyAqIGFueSwgcHJvdmlkZWQgaGVyZWluIGRvIG5vdCBhcHBseSB0byBjb21iaW5hdGlvbnMgb2YgdGhpcyBwcm9ncmFtIHdpdGggCisgKiBvdGhlciBzb2Z0d2FyZSwgb3IgYW55IG90aGVyIHByb2R1Y3Qgd2hhdHNvZXZlci4KKyAqIAorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIAorICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0aGUgRnJlZSBTb2Z0d2FyZSAKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIAorICogQ29udGFjdCBpbmZvcm1hdGlvbjogIFNpbGljb24gR3JhcGhpY3MsIEluYy4sIDE2MDAgQW1waGl0aGVhdHJlIFBrd3ksIAorICogTW91bnRhaW4gVmlldywgQ0EgIDk0MDQzLCBvcjoKKyAqIAorICogaHR0cDovL3d3dy5zZ2kuY29tIAorICogCisgKiBGb3IgZnVydGhlciBpbmZvcm1hdGlvbiByZWdhcmRpbmcgdGhpcyBub3RpY2UsIHNlZTogCisgKiAKKyAqIGh0dHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy9HZW5JbmZvL05vdGljZUV4cGxhbgorICovCisKKyNpZm5kZWYgX0FTTV9JQTY0X01BQ0hWRUNfU04yX0gKKyNkZWZpbmUgX0FTTV9JQTY0X01BQ0hWRUNfU04yX0gKKworZXh0ZXJuIGlhNjRfbXZfc2V0dXBfdCBzbl9zZXR1cDsKK2V4dGVybiBpYTY0X212X2NwdV9pbml0X3Qgc25fY3B1X2luaXQ7CitleHRlcm4gaWE2NF9tdl9pcnFfaW5pdF90IHNuX2lycV9pbml0OworZXh0ZXJuIGlhNjRfbXZfc2VuZF9pcGlfdCBzbjJfc2VuZF9JUEk7CitleHRlcm4gaWE2NF9tdl90aW1lcl9pbnRlcnJ1cHRfdCBzbl90aW1lcl9pbnRlcnJ1cHQ7CitleHRlcm4gaWE2NF9tdl9nbG9iYWxfdGxiX3B1cmdlX3Qgc24yX2dsb2JhbF90bGJfcHVyZ2U7CitleHRlcm4gaWE2NF9tdl90bGJfbWlncmF0ZV9maW5pc2hfdAlzbl90bGJfbWlncmF0ZV9maW5pc2g7CitleHRlcm4gaWE2NF9tdl9sb2NhbF92ZWN0b3JfdG9faXJxIHNuX2xvY2FsX3ZlY3Rvcl90b19pcnE7CitleHRlcm4gaWE2NF9tdl9wY2lfZ2V0X2xlZ2FjeV9tZW1fdCBzbl9wY2lfZ2V0X2xlZ2FjeV9tZW07CitleHRlcm4gaWE2NF9tdl9wY2lfbGVnYWN5X3JlYWRfdCBzbl9wY2lfbGVnYWN5X3JlYWQ7CitleHRlcm4gaWE2NF9tdl9wY2lfbGVnYWN5X3dyaXRlX3Qgc25fcGNpX2xlZ2FjeV93cml0ZTsKK2V4dGVybiBpYTY0X212X2luYl90IF9fc25faW5iOworZXh0ZXJuIGlhNjRfbXZfaW53X3QgX19zbl9pbnc7CitleHRlcm4gaWE2NF9tdl9pbmxfdCBfX3NuX2lubDsKK2V4dGVybiBpYTY0X212X291dGJfdCBfX3NuX291dGI7CitleHRlcm4gaWE2NF9tdl9vdXR3X3QgX19zbl9vdXR3OworZXh0ZXJuIGlhNjRfbXZfb3V0bF90IF9fc25fb3V0bDsKK2V4dGVybiBpYTY0X212X21taW93Yl90IF9fc25fbW1pb3diOworZXh0ZXJuIGlhNjRfbXZfcmVhZGJfdCBfX3NuX3JlYWRiOworZXh0ZXJuIGlhNjRfbXZfcmVhZHdfdCBfX3NuX3JlYWR3OworZXh0ZXJuIGlhNjRfbXZfcmVhZGxfdCBfX3NuX3JlYWRsOworZXh0ZXJuIGlhNjRfbXZfcmVhZHFfdCBfX3NuX3JlYWRxOworZXh0ZXJuIGlhNjRfbXZfcmVhZGJfdCBfX3NuX3JlYWRiX3JlbGF4ZWQ7CitleHRlcm4gaWE2NF9tdl9yZWFkd190IF9fc25fcmVhZHdfcmVsYXhlZDsKK2V4dGVybiBpYTY0X212X3JlYWRsX3QgX19zbl9yZWFkbF9yZWxheGVkOworZXh0ZXJuIGlhNjRfbXZfcmVhZHFfdCBfX3NuX3JlYWRxX3JlbGF4ZWQ7CitleHRlcm4gaWE2NF9tdl9kbWFfYWxsb2NfY29oZXJlbnQJc25fZG1hX2FsbG9jX2NvaGVyZW50OworZXh0ZXJuIGlhNjRfbXZfZG1hX2ZyZWVfY29oZXJlbnQJc25fZG1hX2ZyZWVfY29oZXJlbnQ7CitleHRlcm4gaWE2NF9tdl9kbWFfbWFwX3NpbmdsZQkJc25fZG1hX21hcF9zaW5nbGU7CitleHRlcm4gaWE2NF9tdl9kbWFfdW5tYXBfc2luZ2xlCQlzbl9kbWFfdW5tYXBfc2luZ2xlOworZXh0ZXJuIGlhNjRfbXZfZG1hX21hcF9zZwkJc25fZG1hX21hcF9zZzsKK2V4dGVybiBpYTY0X212X2RtYV91bm1hcF9zZwkJc25fZG1hX3VubWFwX3NnOworZXh0ZXJuIGlhNjRfbXZfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUJc25fZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHU7CitleHRlcm4gaWE2NF9tdl9kbWFfc3luY19zZ19mb3JfY3B1CXNuX2RtYV9zeW5jX3NnX2Zvcl9jcHU7CitleHRlcm4gaWE2NF9tdl9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZSBzbl9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZTsKK2V4dGVybiBpYTY0X212X2RtYV9zeW5jX3NnX2Zvcl9kZXZpY2UJc25fZG1hX3N5bmNfc2dfZm9yX2RldmljZTsKK2V4dGVybiBpYTY0X212X2RtYV9tYXBwaW5nX2Vycm9yCXNuX2RtYV9tYXBwaW5nX2Vycm9yOworZXh0ZXJuIGlhNjRfbXZfZG1hX3N1cHBvcnRlZAkJc25fZG1hX3N1cHBvcnRlZDsKKworLyoKKyAqIFRoaXMgc3R1ZmYgaGFzIGR1YWwgdXNlIQorICoKKyAqIEZvciBhIGdlbmVyaWMga2VybmVsLCB0aGUgbWFjcm9zIGFyZSB1c2VkIHRvIGluaXRpYWxpemUgdGhlCisgKiBwbGF0Zm9ybSdzIG1hY2h2ZWMgc3RydWN0dXJlLiAgV2hlbiBjb21waWxpbmcgYSBub24tZ2VuZXJpYyBrZXJuZWwsCisgKiB0aGUgbWFjcm9zIGFyZSB1c2VkIGRpcmVjdGx5LgorICovCisjZGVmaW5lIHBsYXRmb3JtX25hbWUJCQkic24yIgorI2RlZmluZSBwbGF0Zm9ybV9zZXR1cAkJCXNuX3NldHVwCisjZGVmaW5lIHBsYXRmb3JtX2NwdV9pbml0CQlzbl9jcHVfaW5pdAorI2RlZmluZSBwbGF0Zm9ybV9pcnFfaW5pdAkJc25faXJxX2luaXQKKyNkZWZpbmUgcGxhdGZvcm1fc2VuZF9pcGkJCXNuMl9zZW5kX0lQSQorI2RlZmluZSBwbGF0Zm9ybV90aW1lcl9pbnRlcnJ1cHQJc25fdGltZXJfaW50ZXJydXB0CisjZGVmaW5lIHBsYXRmb3JtX2dsb2JhbF90bGJfcHVyZ2UgICAgICAgc24yX2dsb2JhbF90bGJfcHVyZ2UKKyNkZWZpbmUgcGxhdGZvcm1fdGxiX21pZ3JhdGVfZmluaXNoCXNuX3RsYl9taWdyYXRlX2ZpbmlzaAorI2RlZmluZSBwbGF0Zm9ybV9wY2lfZml4dXAJCXNuX3BjaV9maXh1cAorI2RlZmluZSBwbGF0Zm9ybV9pbmIJCQlfX3NuX2luYgorI2RlZmluZSBwbGF0Zm9ybV9pbncJCQlfX3NuX2ludworI2RlZmluZSBwbGF0Zm9ybV9pbmwJCQlfX3NuX2lubAorI2RlZmluZSBwbGF0Zm9ybV9vdXRiCQkJX19zbl9vdXRiCisjZGVmaW5lIHBsYXRmb3JtX291dHcJCQlfX3NuX291dHcKKyNkZWZpbmUgcGxhdGZvcm1fb3V0bAkJCV9fc25fb3V0bAorI2RlZmluZSBwbGF0Zm9ybV9tbWlvd2IJCQlfX3NuX21taW93YgorI2RlZmluZSBwbGF0Zm9ybV9yZWFkYgkJCV9fc25fcmVhZGIKKyNkZWZpbmUgcGxhdGZvcm1fcmVhZHcJCQlfX3NuX3JlYWR3CisjZGVmaW5lIHBsYXRmb3JtX3JlYWRsCQkJX19zbl9yZWFkbAorI2RlZmluZSBwbGF0Zm9ybV9yZWFkcQkJCV9fc25fcmVhZHEKKyNkZWZpbmUgcGxhdGZvcm1fcmVhZGJfcmVsYXhlZAkJX19zbl9yZWFkYl9yZWxheGVkCisjZGVmaW5lIHBsYXRmb3JtX3JlYWR3X3JlbGF4ZWQJCV9fc25fcmVhZHdfcmVsYXhlZAorI2RlZmluZSBwbGF0Zm9ybV9yZWFkbF9yZWxheGVkCQlfX3NuX3JlYWRsX3JlbGF4ZWQKKyNkZWZpbmUgcGxhdGZvcm1fcmVhZHFfcmVsYXhlZAkJX19zbl9yZWFkcV9yZWxheGVkCisjZGVmaW5lIHBsYXRmb3JtX2xvY2FsX3ZlY3Rvcl90b19pcnEJc25fbG9jYWxfdmVjdG9yX3RvX2lycQorI2RlZmluZSBwbGF0Zm9ybV9wY2lfZ2V0X2xlZ2FjeV9tZW0Jc25fcGNpX2dldF9sZWdhY3lfbWVtCisjZGVmaW5lIHBsYXRmb3JtX3BjaV9sZWdhY3lfcmVhZAlzbl9wY2lfbGVnYWN5X3JlYWQKKyNkZWZpbmUgcGxhdGZvcm1fcGNpX2xlZ2FjeV93cml0ZQlzbl9wY2lfbGVnYWN5X3dyaXRlCisjZGVmaW5lIHBsYXRmb3JtX2RtYV9pbml0CQltYWNodmVjX25vb3AKKyNkZWZpbmUgcGxhdGZvcm1fZG1hX2FsbG9jX2NvaGVyZW50CXNuX2RtYV9hbGxvY19jb2hlcmVudAorI2RlZmluZSBwbGF0Zm9ybV9kbWFfZnJlZV9jb2hlcmVudAlzbl9kbWFfZnJlZV9jb2hlcmVudAorI2RlZmluZSBwbGF0Zm9ybV9kbWFfbWFwX3NpbmdsZQkJc25fZG1hX21hcF9zaW5nbGUKKyNkZWZpbmUgcGxhdGZvcm1fZG1hX3VubWFwX3NpbmdsZQlzbl9kbWFfdW5tYXBfc2luZ2xlCisjZGVmaW5lIHBsYXRmb3JtX2RtYV9tYXBfc2cJCXNuX2RtYV9tYXBfc2cKKyNkZWZpbmUgcGxhdGZvcm1fZG1hX3VubWFwX3NnCQlzbl9kbWFfdW5tYXBfc2cKKyNkZWZpbmUgcGxhdGZvcm1fZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUgc25fZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUKKyNkZWZpbmUgcGxhdGZvcm1fZG1hX3N5bmNfc2dfZm9yX2NwdQlzbl9kbWFfc3luY19zZ19mb3JfY3B1CisjZGVmaW5lIHBsYXRmb3JtX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlIHNuX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlCisjZGVmaW5lIHBsYXRmb3JtX2RtYV9zeW5jX3NnX2Zvcl9kZXZpY2UJc25fZG1hX3N5bmNfc2dfZm9yX2RldmljZQorI2RlZmluZSBwbGF0Zm9ybV9kbWFfbWFwcGluZ19lcnJvcgkJc25fZG1hX21hcHBpbmdfZXJyb3IKKyNkZWZpbmUgcGxhdGZvcm1fZG1hX3N1cHBvcnRlZAkJc25fZG1hX3N1cHBvcnRlZAorCisjaW5jbHVkZSA8YXNtL3NuL2lvLmg+CisKKyNlbmRpZiAvKiBfQVNNX0lBNjRfTUFDSFZFQ19TTjJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9tYzE0NjgxOHJ0Yy5oIGIvaW5jbHVkZS9hc20taWE2NC9tYzE0NjgxOHJ0Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwNzc4N2EyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taWE2NC9tYzE0NjgxOHJ0Yy5oCkBAIC0wLDAgKzEsMTAgQEAKKyNpZm5kZWYgX0FTTV9JQTY0X01DMTQ2ODE4UlRDX0gKKyNkZWZpbmUgX0FTTV9JQTY0X01DMTQ2ODE4UlRDX0gKKworLyoKKyAqIE1hY2hpbmUgZGVwZW5kZW50IGFjY2VzcyBmdW5jdGlvbnMgZm9yIFJUQyByZWdpc3RlcnMuCisgKi8KKworLyogZW1wdHkgaW5jbHVkZSBmaWxlIHRvIHNhdGlzZnkgdGhlIGluY2x1ZGUgaW4gZ2VucnRjLmMgKi8KKworI2VuZGlmIC8qIF9BU01fSUE2NF9NQzE0NjgxOFJUQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L21jYS5oIGIvaW5jbHVkZS9hc20taWE2NC9tY2EuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDlhZDAxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taWE2NC9tY2EuaApAQCAtMCwwICsxLDEzMiBAQAorLyoKKyAqIEZpbGU6CW1jYS5oCisgKiBQdXJwb3NlOglNYWNoaW5lIGNoZWNrIGhhbmRsaW5nIHNwZWNpZmljIGRlZmluZXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDQgU2lsaWNvbiBHcmFwaGljcywgSW5jLgorICogQ29weXJpZ2h0IChDKSBWaWpheSBDaGFuZGVyICh2aWpheUBlbmdyLnNnaS5jb20pCisgKiBDb3B5cmlnaHQgKEMpIFNyaW5pdmFzYSBUaGlydW1hbGFjaGFyIChzcHJhc2FkQGVuZ3Iuc2dpLmNvbSkKKyAqIENvcHlyaWdodCAoQykgUnVzcyBBbmRlcnNvbiAocmphQHNnaS5jb20pCisgKi8KKworI2lmbmRlZiBfQVNNX0lBNjRfTUNBX0gKKyNkZWZpbmUgX0FTTV9JQTY0X01DQV9ICisKKyNkZWZpbmUgSUE2NF9NQ0FfU1RBQ0tfU0laRQk4MTkyCisKKyNpZiAhZGVmaW5lZChfX0FTU0VNQkxZX18pCisKKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjaW5jbHVkZSA8YXNtL3BhcmFtLmg+CisjaW5jbHVkZSA8YXNtL3NhbC5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vbWNhX2FzbS5oPgorCisjZGVmaW5lIElBNjRfTUNBX1JFTkRFWl9USU1FT1VUCQkoMjAgKiAxMDAwKQkvKiB2YWx1ZSBpbiBtaWxsaXNlY29uZHMgLSAyMCBzZWNvbmRzICovCisKK3R5cGVkZWYgc3RydWN0IGlhNjRfZnB0ciB7CisJdW5zaWduZWQgbG9uZyBmcDsKKwl1bnNpZ25lZCBsb25nIGdwOworfSBpYTY0X2ZwdHJfdDsKKwordHlwZWRlZiB1bmlvbiBjbWN2X3JlZ191IHsKKwl1NjQJY21jdl9yZWd2YWw7CisJc3RydWN0CXsKKwkJdTY0CWNtY3JfdmVjdG9yCQk6IDg7CisJCXU2NAljbWNyX3Jlc2VydmVkMQkJOiA0OworCQl1NjQJY21jcl9pZ25vcmVkMQkJOiAxOworCQl1NjQJY21jcl9yZXNlcnZlZDIJCTogMzsKKwkJdTY0CWNtY3JfbWFzawkJOiAxOworCQl1NjQJY21jcl9pZ25vcmVkMgkJOiA0NzsKKwl9IGNtY3ZfcmVnX3M7CisKK30gY21jdl9yZWdfdDsKKworI2RlZmluZSBjbWN2X21hc2sJCWNtY3ZfcmVnX3MuY21jcl9tYXNrCisjZGVmaW5lIGNtY3ZfdmVjdG9yCQljbWN2X3JlZ19zLmNtY3JfdmVjdG9yCisKK2VudW0geworCUlBNjRfTUNBX1JFTkRFWl9DSEVDS0lOX05PVERPTkUJPQkweDAsCisJSUE2NF9NQ0FfUkVOREVaX0NIRUNLSU5fRE9ORQk9CTB4MQorfTsKKworLyogSW5mb3JtYXRpb24gbWFpbnRhaW5lZCBieSB0aGUgTUMgaW5mcmFzdHJ1Y3R1cmUgKi8KK3R5cGVkZWYgc3RydWN0IGlhNjRfbWNfaW5mb19zIHsKKwl1NjQJCWltaV9tY2FfaGFuZGxlcjsKKwlzaXplX3QJCWltaV9tY2FfaGFuZGxlcl9zaXplOworCXU2NAkJaW1pX21vbmFyY2hfaW5pdF9oYW5kbGVyOworCXNpemVfdAkJaW1pX21vbmFyY2hfaW5pdF9oYW5kbGVyX3NpemU7CisJdTY0CQlpbWlfc2xhdmVfaW5pdF9oYW5kbGVyOworCXNpemVfdAkJaW1pX3NsYXZlX2luaXRfaGFuZGxlcl9zaXplOworCXU4CQlpbWlfcmVuZGV6X2NoZWNraW5bTlJfQ1BVU107CisKK30gaWE2NF9tY19pbmZvX3Q7CisKK3R5cGVkZWYgc3RydWN0IGlhNjRfbWNhX3NhbF90b19vc19zdGF0ZV9zIHsKKwl1NjQJCWltc3RvX29zX2dwOwkJLyogR1Agb2YgdGhlIG9zIHJlZ2lzdGVyZWQgd2l0aCB0aGUgU0FMICovCisJdTY0CQlpbXN0b19wYWxfcHJvYzsJCS8qIFBBTF9QUk9DIGVudHJ5IHBvaW50IC0gcGh5c2ljYWwgYWRkciAqLworCXU2NAkJaW1zdG9fc2FsX3Byb2M7CQkvKiBTQUxfUFJPQyBlbnRyeSBwb2ludCAtIHBoeXNpY2FsIGFkZHIgKi8KKwl1NjQJCWltc3RvX3NhbF9ncDsJCS8qIEdQIG9mIHRoZSBTQUwgLSBwaHlzaWNhbCAqLworCXU2NAkJaW1zdG9fcmVuZGV6X3N0YXRlOwkvKiBSZW5kZXogc3RhdGUgaW5mb3JtYXRpb24gKi8KKwl1NjQJCWltc3RvX3NhbF9jaGVja19yYTsJLyogUmV0dXJuIGFkZHJlc3MgaW4gU0FMX0NIRUNLIHdoaWxlIGdvaW5nCisJCQkJCQkgKiBiYWNrIHRvIFNBTCBmcm9tIE9TIGFmdGVyIE1DQSBoYW5kbGluZy4KKwkJCQkJCSAqLworCXU2NAkJcGFsX21pbl9zdGF0ZTsJCS8qIGZyb20gUEFMIGluIHIxNyAqLworCXU2NAkJcHJvY19zdGF0ZV9wYXJhbTsJLyogZnJvbSBQQUwgaW4gcjE4LiBTZWUgU0RWIDI6MjY4IDExLjMuMi4xICovCit9IGlhNjRfbWNhX3NhbF90b19vc19zdGF0ZV90OworCitlbnVtIHsKKwlJQTY0X01DQV9DT1JSRUNURUQJPQkweDAsCS8qIEVycm9yIGhhcyBiZWVuIGNvcnJlY3RlZCBieSBPU19NQ0EgKi8KKwlJQTY0X01DQV9XQVJNX0JPT1QJPQktMSwJLyogV2FybSBib290IG9mIHRoZSBzeXN0ZW0gbmVlZCBmcm9tIFNBTCAqLworCUlBNjRfTUNBX0NPTERfQk9PVAk9CS0yLAkvKiBDb2xkIGJvb3Qgb2YgdGhlIHN5c3RlbSBuZWVkIGZyb20gU0FMICovCisJSUE2NF9NQ0FfSEFMVAkJPQktMwkvKiBTeXN0ZW0gdG8gYmUgaGFsdGVkIGJ5IFNBTCAqLworfTsKKworZW51bSB7CisJSUE2NF9NQ0FfU0FNRV9DT05URVhUCT0JMHgwLAkvKiBTQUwgdG8gcmV0dXJuIHRvIHNhbWUgY29udGV4dCAqLworCUlBNjRfTUNBX05FV19DT05URVhUCT0JLTEJLyogU0FMIHRvIHJldHVybiB0byBuZXcgY29udGV4dCAqLworfTsKKwordHlwZWRlZiBzdHJ1Y3QgaWE2NF9tY2Ffb3NfdG9fc2FsX3N0YXRlX3MgeworCXU2NAkJaW1vdHNfb3Nfc3RhdHVzOwkvKiAgIE9TIHN0YXR1cyB0byBTQUwgYXMgdG8gd2hhdCBoYXBwZW5lZAorCQkJCQkJICogICB3aXRoIHRoZSBNQ0EgaGFuZGxpbmcuCisJCQkJCQkgKi8KKwl1NjQJCWltb3RzX3NhbF9ncDsJCS8qIEdQIG9mIHRoZSBTQUwgLSBwaHlzaWNhbCAqLworCXU2NAkJaW1vdHNfY29udGV4dDsJCS8qIDAgaWYgcmV0dXJuIHRvIHNhbWUgY29udGV4dAorCQkJCQkJICAgMSBpZiByZXR1cm4gdG8gbmV3IGNvbnRleHQgKi8KKwl1NjQJCSppbW90c19uZXdfbWluX3N0YXRlOwkvKiBQb2ludGVyIHRvIHN0cnVjdHVyZSBjb250YWluaW5nCisJCQkJCQkgKiBuZXcgdmFsdWVzIG9mIHJlZ2lzdGVycyBpbiB0aGUgbWluIHN0YXRlCisJCQkJCQkgKiBzYXZlIGFyZWEuCisJCQkJCQkgKi8KKwl1NjQJCWltb3RzX3NhbF9jaGVja19yYTsJLyogUmV0dXJuIGFkZHJlc3MgaW4gU0FMX0NIRUNLIHdoaWxlIGdvaW5nCisJCQkJCQkgKiBiYWNrIHRvIFNBTCBmcm9tIE9TIGFmdGVyIE1DQSBoYW5kbGluZy4KKwkJCQkJCSAqLworfSBpYTY0X21jYV9vc190b19zYWxfc3RhdGVfdDsKKworLyogUGVyLUNQVSBNQ0Egc3RhdGUgdGhhdCBpcyB0b28gYmlnIGZvciBub3JtYWwgcGVyLUNQVSB2YXJpYWJsZXMuICAqLworCitzdHJ1Y3QgaWE2NF9tY2FfY3B1IHsKKwl1NjQgc3RhY2tbSUE2NF9NQ0FfU1RBQ0tfU0laRS84XTsJLyogTUNBIG1lbW9yeS1zdGFjayAqLworCXU2NCBwcm9jX3N0YXRlX2R1bXBbNTEyXTsKKwl1NjQgc3RhY2tmcmFtZVszMl07CisJdTY0IHJic3RvcmVbSUE2NF9NQ0FfU1RBQ0tfU0laRS84XTsJLyogTUNBIHJlZy4tYmFja2luZyBzdG9yZSAqLworCXU2NCBpbml0X3N0YWNrW0tFUk5FTF9TVEFDS19TSVpFLzhdOworfSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCgxNikpKTsKKworLyogQXJyYXkgb2YgcGh5c2ljYWwgYWRkcmVzc2VzIG9mIGVhY2ggQ1BVJ3MgTUNBIGFyZWEuICAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19wZXJfY3B1X21jYVtOUl9DUFVTXTsKKworZXh0ZXJuIHZvaWQgaWE2NF9tY2FfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIGlhNjRfbWNhX2NwdV9pbml0KHZvaWQgKik7CitleHRlcm4gdm9pZCBpYTY0X29zX21jYV9kaXNwYXRjaCh2b2lkKTsKK2V4dGVybiB2b2lkIGlhNjRfb3NfbWNhX2Rpc3BhdGNoX2VuZCh2b2lkKTsKK2V4dGVybiB2b2lkIGlhNjRfbWNhX3VjbWNfaGFuZGxlcih2b2lkKTsKK2V4dGVybiB2b2lkIGlhNjRfbW9uYXJjaF9pbml0X2hhbmRsZXIodm9pZCk7CitleHRlcm4gdm9pZCBpYTY0X3NsYXZlX2luaXRfaGFuZGxlcih2b2lkKTsKK2V4dGVybiB2b2lkIGlhNjRfbWNhX2NtY192ZWN0b3Jfc2V0dXAodm9pZCk7CitleHRlcm4gaW50ICBpYTY0X3JlZ19NQ0FfZXh0ZW5zaW9uKHZvaWQqKTsKK2V4dGVybiB2b2lkIGlhNjRfdW5yZWdfTUNBX2V4dGVuc2lvbih2b2lkKTsKKworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKyNlbmRpZiAvKiBfQVNNX0lBNjRfTUNBX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvbWNhX2FzbS5oIGIvaW5jbHVkZS9hc20taWE2NC9tY2FfYXNtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM2OTUzZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvbWNhX2FzbS5oCkBAIC0wLDAgKzEsMzEyIEBACisvKgorICogRmlsZToJbWNhX2FzbS5oCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5IFNpbGljb24gR3JhcGhpY3MsIEluYy4KKyAqIENvcHlyaWdodCAoQykgVmlqYXkgQ2hhbmRlciAodmlqYXlAZW5nci5zZ2kuY29tKQorICogQ29weXJpZ2h0IChDKSBTcmluaXZhc2EgVGhpcnVtYWxhY2hhciA8c3ByYXNhZEBlbmdyLnNnaS5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgSGV3bGV0dC1QYWNrYXJkIENvLgorICogQ29weXJpZ2h0IChDKSAyMDAwIERhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwMiBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAyIEplbm5hIEhhbGwgPGplbm5hLnMuaGFsbEBpbnRlbC5jb20+CisgKi8KKyNpZm5kZWYgX0FTTV9JQTY0X01DQV9BU01fSAorI2RlZmluZSBfQVNNX0lBNjRfTUNBX0FTTV9ICisKKyNkZWZpbmUgUFNSX0lDCQkxMworI2RlZmluZSBQU1JfSQkJMTQKKyNkZWZpbmUJUFNSX0RUCQkxNworI2RlZmluZSBQU1JfUlQJCTI3CisjZGVmaW5lIFBTUl9NQwkJMzUKKyNkZWZpbmUgUFNSX0lUCQkzNgorI2RlZmluZSBQU1JfQk4JCTQ0CisKKy8qCisgKiBUaGlzIG1hY3JvIGNvbnZlcnRzIGEgaW5zdHJ1Y3Rpb24gdmlydHVhbCBhZGRyZXNzIHRvIGEgcGh5c2ljYWwgYWRkcmVzcworICogUmlnaHQgbm93IGZvciBzaW11bGF0aW9uIHB1cnBvc2VzIHRoZSB2aXJ0dWFsIGFkZHJlc3NlcyBhcmUKKyAqIGRpcmVjdCBtYXBwZWQgdG8gcGh5c2ljYWwgYWRkcmVzc2VzLgorICoJMS4gTG9wIG9mZiBiaXRzIDYxIHRocnUgNjMgaW4gdGhlIHZpcnR1YWwgYWRkcmVzcworICovCisjZGVmaW5lIElOU1RfVkFfVE9fUEEoYWRkcikJCQkJCQkJXAorCWRlcAlhZGRyCT0gMCwgYWRkciwgNjEsIDMKKy8qCisgKiBUaGlzIG1hY3JvIGNvbnZlcnRzIGEgZGF0YSB2aXJ0dWFsIGFkZHJlc3MgdG8gYSBwaHlzaWNhbCBhZGRyZXNzCisgKiBSaWdodCBub3cgZm9yIHNpbXVsYXRpb24gcHVycG9zZXMgdGhlIHZpcnR1YWwgYWRkcmVzc2VzIGFyZQorICogZGlyZWN0IG1hcHBlZCB0byBwaHlzaWNhbCBhZGRyZXNzZXMuCisgKgkxLiBMb3Agb2ZmIGJpdHMgNjEgdGhydSA2MyBpbiB0aGUgdmlydHVhbCBhZGRyZXNzCisgKi8KKyNkZWZpbmUgREFUQV9WQV9UT19QQShhZGRyKQkJCQkJCQlcCisJdHBhCWFkZHIJPSBhZGRyCisvKgorICogVGhpcyBtYWNybyBjb252ZXJ0cyBhIGRhdGEgcGh5c2ljYWwgYWRkcmVzcyB0byBhIHZpcnR1YWwgYWRkcmVzcworICogUmlnaHQgbm93IGZvciBzaW11bGF0aW9uIHB1cnBvc2VzIHRoZSB2aXJ0dWFsIGFkZHJlc3NlcyBhcmUKKyAqIGRpcmVjdCBtYXBwZWQgdG8gcGh5c2ljYWwgYWRkcmVzc2VzLgorICoJMS4gUHV0IDB4NyBpbiBiaXRzIDYxIHRocnUgNjMuCisgKi8KKyNkZWZpbmUgREFUQV9QQV9UT19WQShhZGRyLHRlbXApCQkJCQkJCVwKKwltb3YJdGVtcAk9IDB4Nwk7OwkJCQkJCQlcCisJZGVwCWFkZHIJPSB0ZW1wLCBhZGRyLCA2MSwgMworCisjZGVmaW5lIEdFVF9USElTX1BBRERSKHJlZywgdmFyKQkJXAorCW1vdglyZWcgPSBJQTY0X0tSKFBFUl9DUFVfREFUQSk7OwlcCisgICAgICAgIGFkZGwJcmVnID0gVEhJU19DUFUodmFyKSwgcmVnCisKKy8qCisgKiBUaGlzIG1hY3JvIGp1bXBzIHRvIHRoZSBpbnN0cnVjdGlvbiBhdCB0aGUgZ2l2ZW4gdmlydHVhbCBhZGRyZXNzCisgKiBhbmQgc3RhcnRzIGV4ZWN1dGlvbiBpbiBwaHlzaWNhbCBtb2RlIHdpdGggYWxsIHRoZSBhZGRyZXNzCisgKiB0cmFuc2xhdGlvbnMgdHVybmVkIG9mZi4KKyAqCTEuCVNhdmUgdGhlIGN1cnJlbnQgcHNyCisgKgkyLglNYWtlIHN1cmUgdGhhdCBhbGwgdGhlIHVwcGVyIDMyIGJpdHMgYXJlIG9mZgorICoKKyAqCTMuCUNsZWFyIHRoZSBpbnRlcnJ1cHQgZW5hYmxlIGFuZCBpbnRlcnJ1cHQgc3RhdGUgY29sbGVjdGlvbiBiaXRzCisgKgkJaW4gdGhlIHBzciBiZWZvcmUgdXBkYXRpbmcgdGhlIGlwc3IgYW5kIGlpcC4KKyAqCisgKgk0LglUdXJuIG9mZiB0aGUgaW5zdHJ1Y3Rpb24sIGRhdGEgYW5kIHJzZSB0cmFuc2xhdGlvbiBiaXRzIG9mIHRoZSBwc3IKKyAqCQlhbmQgc3RvcmUgdGhlIG5ldyB2YWx1ZSBpbnRvIGlwc3IKKyAqCQlBbHNvIG1ha2Ugc3VyZSB0aGF0IHRoZSBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZC4KKyAqCQlFbnN1cmUgdGhhdCB3ZSBhcmUgaW4gbGl0dGxlIGVuZGlhbiBtb2RlLgorICoJCVtwc3Iue3J0LCBpdCwgZHQsIGksIGJlfSA9IDBdCisgKgorICoJNS4JR2V0IHRoZSBwaHlzaWNhbCBhZGRyZXNzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHZpcnR1YWwgYWRkcmVzcworICoJCW9mIHRoZSBuZXh0IGluc3RydWN0aW9uIGJ1bmRsZSBhbmQgcHV0IGl0IGluIGlpcC4KKyAqCQkoVXNpbmcgbWFnaWMgbnVtYmVycyAyNCBhbmQgNDAgaW4gdGhlIGRlcG9zaW50IGluc3RydWN0aW9uIHNpbmNlCisgKgkJIHRoZSBJQTY0X1NESyBjb2RlIGRpcmVjdGx5IG1hcHMgdG8gbG93ZXIgMjRiaXRzIGFzIHBoeXNpY2FsIGFkZHJlc3MKKyAqCQkgZnJvbSBhIHZpcnR1YWwgYWRkcmVzcykuCisgKgorICoJNi4JRG8gYW4gcmZpIHRvIG1vdmUgdGhlIHZhbHVlcyBmcm9tIGlwc3IgdG8gcHNyIGFuZCBpaXAgdG8gaXAuCisgKi8KKyNkZWZpbmUgIFBIWVNJQ0FMX01PREVfRU5URVIodGVtcDEsIHRlbXAyLCBzdGFydF9hZGRyLCBvbGRfcHNyKQkJCQlcCisJbW92CW9sZF9wc3IgPSBwc3I7CQkJCQkJCQlcCisJOzsJCQkJCQkJCQkJXAorCWRlcAlvbGRfcHNyID0gMCwgb2xkX3BzciwgMzIsIDMyOwkJCQkJCVwKKwkJCQkJCQkJCQkJXAorCW1vdglhci5yc2MgPSAwIDsJCQkJCQkJCVwKKwk7OwkJCQkJCQkJCQlcCisJc3Jsei5kOwkJCQkJCQkJCQlcCisJbW92CXRlbXAyID0gYXIuYnNwc3RvcmU7CQkJCQkJCVwKKwk7OwkJCQkJCQkJCQlcCisJREFUQV9WQV9UT19QQSh0ZW1wMik7CQkJCQkJCQlcCisJOzsJCQkJCQkJCQkJXAorCW1vdgl0ZW1wMSA9IGFyLnJuYXQ7CQkJCQkJCVwKKwk7OwkJCQkJCQkJCQlcCisJbW92CWFyLmJzcHN0b3JlID0gdGVtcDI7CQkJCQkJCVwKKwk7OwkJCQkJCQkJCQlcCisJbW92CWFyLnJuYXQgPSB0ZW1wMTsJCQkJCQkJXAorCW1vdgl0ZW1wMSA9IHBzcjsJCQkJCQkJCVwKKwltb3YJdGVtcDIgPSBwc3I7CQkJCQkJCQlcCisJOzsJCQkJCQkJCQkJXAorCQkJCQkJCQkJCQlcCisJZGVwCXRlbXAyID0gMCwgdGVtcDIsIFBTUl9JQywgMjsJCQkJCQlcCisJOzsJCQkJCQkJCQkJXAorCW1vdglwc3IubCA9IHRlbXAyOwkJCQkJCQkJXAorCTs7CQkJCQkJCQkJCVwKKwlzcmx6LmQ7CQkJCQkJCQkJCVwKKwlkZXAJdGVtcDEgPSAwLCB0ZW1wMSwgMzIsIDMyOwkJCQkJCVwKKwk7OwkJCQkJCQkJCQlcCisJZGVwCXRlbXAxID0gMCwgdGVtcDEsIFBTUl9JVCwgMTsJCQkJCQlcCisJOzsJCQkJCQkJCQkJXAorCWRlcAl0ZW1wMSA9IDAsIHRlbXAxLCBQU1JfRFQsIDE7CQkJCQkJXAorCTs7CQkJCQkJCQkJCVwKKwlkZXAJdGVtcDEgPSAwLCB0ZW1wMSwgUFNSX1JULCAxOwkJCQkJCVwKKwk7OwkJCQkJCQkJCQlcCisJZGVwCXRlbXAxID0gMCwgdGVtcDEsIFBTUl9JLCAxOwkJCQkJCVwKKwk7OwkJCQkJCQkJCQlcCisJZGVwCXRlbXAxID0gMCwgdGVtcDEsIFBTUl9JQywgMTsJCQkJCQlcCisJOzsJCQkJCQkJCQkJXAorCWRlcAl0ZW1wMSA9IC0xLCB0ZW1wMSwgUFNSX01DLCAxOwkJCQkJCVwKKwk7OwkJCQkJCQkJCQlcCisJbW92CWNyLmlwc3IgPSB0ZW1wMTsJCQkJCQkJXAorCTs7CQkJCQkJCQkJCVwKKwlMT0FEX1BIWVNJQ0FMKHAwLCB0ZW1wMiwgc3RhcnRfYWRkcik7CQkJCQkJXAorCTs7CQkJCQkJCQkJCVwKKwltb3YJY3IuaWlwID0gdGVtcDI7CQkJCQkJCQlcCisJbW92CWNyLmlmcyA9IHIwOwkJCQkJCQkJXAorCURBVEFfVkFfVE9fUEEoc3ApOwkJCQkJCQkJXAorCURBVEFfVkFfVE9fUEEoZ3ApOwkJCQkJCQkJXAorCTs7CQkJCQkJCQkJCVwKKwlzcmx6Lmk7CQkJCQkJCQkJCVwKKwk7OwkJCQkJCQkJCQlcCisJbm9wCTE7CQkJCQkJCQkJXAorCW5vcAkyOwkJCQkJCQkJCVwKKwlub3AJMTsJCQkJCQkJCQlcCisJbm9wCTI7CQkJCQkJCQkJXAorCXJmaTsJCQkJCQkJCQkJXAorCTs7CisKKy8qCisgKiBUaGlzIG1hY3JvIGp1bXBzIHRvIHRoZSBpbnN0cnVjdGlvbiBhdCB0aGUgZ2l2ZW4gdmlydHVhbCBhZGRyZXNzCisgKiBhbmQgc3RhcnRzIGV4ZWN1dGlvbiBpbiB2aXJ0dWFsIG1vZGUgd2l0aCBhbGwgdGhlIGFkZHJlc3MKKyAqIHRyYW5zbGF0aW9ucyB0dXJuZWQgb24uCisgKgkxLglHZXQgdGhlIG9sZCBzYXZlZCBwc3IKKyAqCisgKgkyLglDbGVhciB0aGUgaW50ZXJydXB0IHN0YXRlIGNvbGxlY3Rpb24gYml0IGluIHRoZSBjdXJyZW50IHBzci4KKyAqCisgKgkzLglTZXQgdGhlIGluc3RydWN0aW9uIHRyYW5zbGF0aW9uIGJpdCBiYWNrIGluIHRoZSBvbGQgcHNyCisgKgkJTm90ZSB3ZSBoYXZlIHRvIGRvIHRoaXMgc2luY2Ugd2UgYXJlIHJpZ2h0IG5vdyBzYXZpbmcgb25seSB0aGUKKyAqCQlsb3dlciAzMi1iaXRzIG9mIG9sZCBwc3IuKEFsc28gdGhlIG9sZCBwc3IgaGFzIHRoZSBkYXRhIGFuZAorICoJCXJzZSB0cmFuc2xhdGlvbiBiaXRzIG9uKQorICoKKyAqCTQuCVNldCBpcHNyIHRvIHRoaXMgb2xkX3BzciB3aXRoICJpdCIgYml0IHNldCBhbmQgImJuIiA9IDEuCisgKgorICoJNS4JUmVzZXQgdGhlIGN1cnJlbnQgdGhyZWFkIHBvaW50ZXIgKHIxMykuCisgKgorICoJNi4JU2V0IGlpcCB0byB0aGUgdmlydHVhbCBhZGRyZXNzIG9mIHRoZSBuZXh0IGluc3RydWN0aW9uIGJ1bmRsZS4KKyAqCisgKgk3LglEbyBhbiByZmkgdG8gbW92ZSBpcHNyIHRvIHBzciBhbmQgaWlwIHRvIGlwLgorICovCisKKyNkZWZpbmUgVklSVFVBTF9NT0RFX0VOVEVSKHRlbXAxLCB0ZW1wMiwgc3RhcnRfYWRkciwgb2xkX3BzcikJXAorCW1vdgl0ZW1wMiA9IHBzcjsJCQkJCVwKKwk7OwkJCQkJCQlcCisJbW92CW9sZF9wc3IgPSB0ZW1wMjsJCQkJXAorCTs7CQkJCQkJCVwKKwlkZXAJdGVtcDIgPSAwLCB0ZW1wMiwgUFNSX0lDLCAyOwkJCVwKKwk7OwkJCQkJCQlcCisJbW92CXBzci5sID0gdGVtcDI7CQkJCQlcCisJbW92CWFyLnJzYyA9IDA7CQkJCQlcCisJOzsJCQkJCQkJXAorCXNybHouZDsJCQkJCQkJXAorCW1vdglyMTMgPSBhci5rNjsJCQkJCVwKKwltb3YJdGVtcDIgPSBhci5ic3BzdG9yZTsJCQkJXAorCTs7CQkJCQkJCVwKKwlEQVRBX1BBX1RPX1ZBKHRlbXAyLHRlbXAxKTsJCQkJXAorCTs7CQkJCQkJCVwKKwltb3YJdGVtcDEgPSBhci5ybmF0OwkJCQlcCisJOzsJCQkJCQkJXAorCW1vdglhci5ic3BzdG9yZSA9IHRlbXAyOwkJCQlcCisJOzsJCQkJCQkJXAorCW1vdglhci5ybmF0ID0gdGVtcDE7CQkJCVwKKwk7OwkJCQkJCQlcCisJbW92CXRlbXAxID0gb2xkX3BzcjsJCQkJXAorCTs7CQkJCQkJCVwKKwltb3YJdGVtcDIgPSAxOwkJCQkJXAorCTs7CQkJCQkJCVwKKwlkZXAJdGVtcDEgPSB0ZW1wMiwgdGVtcDEsIFBTUl9JQywgMTsJCVwKKwk7OwkJCQkJCQlcCisJZGVwCXRlbXAxID0gdGVtcDIsIHRlbXAxLCBQU1JfSVQsIDE7CQlcCisJOzsJCQkJCQkJXAorCWRlcAl0ZW1wMSA9IHRlbXAyLCB0ZW1wMSwgUFNSX0RULCAxOwkJXAorCTs7CQkJCQkJCVwKKwlkZXAJdGVtcDEgPSB0ZW1wMiwgdGVtcDEsIFBTUl9SVCwgMTsJCVwKKwk7OwkJCQkJCQlcCisJZGVwCXRlbXAxID0gdGVtcDIsIHRlbXAxLCBQU1JfQk4sIDE7CQlcCisJOzsJCQkJCQkJXAorCQkJCQkJCQlcCisJbW92ICAgICBjci5pcHNyID0gdGVtcDE7CQkJCVwKKwltb3ZsCXRlbXAyID0gc3RhcnRfYWRkcjsJCQkJXAorCTs7CQkJCQkJCVwKKwltb3YJY3IuaWlwID0gdGVtcDI7CQkJCQlcCisJOzsJCQkJCQkJXAorCURBVEFfUEFfVE9fVkEoc3AsIHRlbXAxKTsJCQkJXAorCURBVEFfUEFfVE9fVkEoZ3AsIHRlbXAyKTsJCQkJXAorCXNybHouaTsJCQkJCQkJXAorCTs7CQkJCQkJCVwKKwlub3AJMTsJCQkJCQlcCisJbm9wCTI7CQkJCQkJXAorCW5vcAkxOwkJCQkJCVwKKwlyZmkJCQkJCQkJXAorCTs7CisKKy8qCisgKiBUaGUgZm9sbG93aW5nIG9mZnNldHMgY2FwdHVyZSB0aGUgb3JkZXIgaW4gd2hpY2ggdGhlCisgKiBSU0UgcmVsYXRlZCByZWdpc3RlcnMgZnJvbSB0aGUgb2xkIGNvbnRleHQgYXJlCisgKiBzYXZlZCBvbnRvIHRoZSBuZXcgc3RhY2sgZnJhbWUuCisgKgorICoJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICoJfE5ESVJUWSBbQlNQIC0gQlNQU1RPUkVdfAorICoJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICoJfAlSTkFUCQl8CisgKgkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgKgl8CUJTUFNUT1JFCXwKKyAqCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqCXwJSUZTCQl8CisgKgkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgKgl8CVBGUwkJfAorICoJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICoJfAlSU0MJCXwKKyAqCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgPC0tLS0tLS0tIEJvdHRvbSBvZiBuZXcgc3RhY2sgZnJhbWUKKyAqLworI2RlZmluZSAgcnNlX3JzY19vZmZzZXQJCTAKKyNkZWZpbmUgIHJzZV9wZnNfb2Zmc2V0CQkocnNlX3JzY19vZmZzZXQrMHgwOCkKKyNkZWZpbmUgIHJzZV9pZnNfb2Zmc2V0CQkocnNlX3Bmc19vZmZzZXQrMHgwOCkKKyNkZWZpbmUgIHJzZV9ic3BzdG9yZV9vZmZzZXQJKHJzZV9pZnNfb2Zmc2V0KzB4MDgpCisjZGVmaW5lICByc2Vfcm5hdF9vZmZzZXQJKHJzZV9ic3BzdG9yZV9vZmZzZXQrMHgwOCkKKyNkZWZpbmUgIHJzZV9uZGlydHlfb2Zmc2V0CShyc2Vfcm5hdF9vZmZzZXQrMHgwOCkKKworLyoKKyAqIHJzZV9zd2l0Y2hfY29udGV4dAorICoKKyAqCTEuIFNhdmUgb2xkIFJTQyBvbnRvIHRoZSBuZXcgc3RhY2sgZnJhbWUKKyAqCTIuIFNhdmUgUEZTIG9udG8gbmV3IHN0YWNrIGZyYW1lCisgKgkzLiBDb3ZlciB0aGUgb2xkIGZyYW1lIGFuZCBzdGFydCBhIG5ldyBmcmFtZS4KKyAqCTQuIFNhdmUgSUZTIG9udG8gbmV3IHN0YWNrIGZyYW1lCisgKgk1LiBTYXZlIHRoZSBvbGQgQlNQU1RPUkUgb24gdGhlIG5ldyBzdGFjayBmcmFtZQorICoJNi4gU2F2ZSB0aGUgb2xkIFJOQVQgb24gdGhlIG5ldyBzdGFjayBmcmFtZQorICoJNy4gV3JpdGUgQlNQU1RPUkUgd2l0aCB0aGUgbmV3IGJhY2tpbmcgc3RvcmUgcG9pbnRlcgorICoJOC4gUmVhZCBhbmQgc2F2ZSB0aGUgbmV3IEJTUCB0byBjYWxjdWxhdGUgdGhlICNkaXJ0eSByZWdpc3RlcnMKKyAqIE5PVEU6IExvb2sgYXQgcGFnZXMgMTEtMTAsIDExLTExIGluIFBSTSBWb2wgMgorICovCisjZGVmaW5lIHJzZV9zd2l0Y2hfY29udGV4dCh0ZW1wLHBfc3RhY2tmcmFtZSxwX2JzcHN0b3JlKQkJCVwKKwk7OwkJCQkJCQkJCVwKKwltb3YgICAgIHRlbXA9YXIucnNjOzsJCQkJCQkJXAorCXN0OCAgICAgW3Bfc3RhY2tmcmFtZV09dGVtcCw4OzsJCQkJCVwKKwltb3YgICAgIHRlbXA9YXIucGZzOzsJCQkJCQkJXAorCXN0OCAgICAgW3Bfc3RhY2tmcmFtZV09dGVtcCw4OwkJCQkJCVwKKwljb3ZlciA7OwkJCQkJCQkJXAorCW1vdiAgICAgdGVtcD1jci5pZnM7OwkJCQkJCQlcCisJc3Q4ICAgICBbcF9zdGFja2ZyYW1lXT10ZW1wLDg7OwkJCQkJCVwKKwltb3YgICAgIHRlbXA9YXIuYnNwc3RvcmU7OwkJCQkJCVwKKwlzdDggICAgIFtwX3N0YWNrZnJhbWVdPXRlbXAsODs7CQkJCQlcCisJbW92ICAgICB0ZW1wPWFyLnJuYXQ7OwkJCQkJCQlcCisJc3Q4ICAgICBbcF9zdGFja2ZyYW1lXT10ZW1wLDg7CQkJCQkJXAorCW1vdiAgICAgYXIuYnNwc3RvcmU9cF9ic3BzdG9yZTs7CQkJCQlcCisJbW92ICAgICB0ZW1wPWFyLmJzcDs7CQkJCQkJCVwKKwlzdWIgICAgIHRlbXA9dGVtcCxwX2JzcHN0b3JlOzsJCQkJCQlcCisJc3Q4ICAgICBbcF9zdGFja2ZyYW1lXT10ZW1wLDg7OworCisvKgorICogcnNlX3JldHVybl9jb250ZXh0CisgKgkxLiBBbGxvY2F0ZSBhIHplcm8tc2l6ZWQgZnJhbWUKKyAqCTIuIFN0b3JlIHRoZSBudW1iZXIgb2YgZGlydHkgcmVnaXN0ZXJzIFJTQy5sb2FkcnMgZmllbGQKKyAqCTMuIElzc3VlIGEgbG9hZHJzIHRvIGluc3VyZSB0aGF0IGFueSByZWdpc3RlcnMgZnJvbSB0aGUgaW50ZXJydXB0ZWQKKyAqCSAgIGNvbnRleHQgd2hpY2ggd2VyZSBzYXZlZCBvbiB0aGUgbmV3IHN0YWNrIGZyYW1lIGhhdmUgYmVlbiBsb2FkZWQKKyAqCSAgIGJhY2sgaW50byB0aGUgc3RhY2tlZCByZWdpc3RlcnMKKyAqCTQuIFJlc3RvcmUgQlNQU1RPUkUKKyAqCTUuIFJlc3RvcmUgUk5BVAorICoJNi4gUmVzdG9yZSBQRlMKKyAqCTcuIFJlc3RvcmUgSUZTCisgKgk4LiBSZXN0b3JlIFJTQworICoJOS4gSXNzdWUgYW4gUkZJCisgKi8KKyNkZWZpbmUgcnNlX3JldHVybl9jb250ZXh0KHBzcl9tYXNrX3JlZyx0ZW1wLHBfc3RhY2tmcmFtZSkJCQlcCisJOzsJCQkJCQkJCQlcCisJYWxsb2MgICB0ZW1wPWFyLnBmcywwLDAsMCwwOwkJCQkJCVwKKwlhZGQgICAgIHBfc3RhY2tmcmFtZT1yc2VfbmRpcnR5X29mZnNldCxwX3N0YWNrZnJhbWU7OwkJCVwKKwlsZDggICAgIHRlbXA9W3Bfc3RhY2tmcmFtZV07OwkJCQkJCVwKKwlzaGwgICAgIHRlbXA9dGVtcCwxNjs7CQkJCQkJCVwKKwltb3YgICAgIGFyLnJzYz10ZW1wOzsJCQkJCQkJXAorCWxvYWRyczs7CQkJCQkJCQlcCisJYWRkICAgICBwX3N0YWNrZnJhbWU9LXJzZV9uZGlydHlfb2Zmc2V0K3JzZV9ic3BzdG9yZV9vZmZzZXQscF9zdGFja2ZyYW1lOztcCisJbGQ4ICAgICB0ZW1wPVtwX3N0YWNrZnJhbWVdOzsJCQkJCQlcCisJbW92ICAgICBhci5ic3BzdG9yZT10ZW1wOzsJCQkJCQlcCisJYWRkICAgICBwX3N0YWNrZnJhbWU9LXJzZV9ic3BzdG9yZV9vZmZzZXQrcnNlX3JuYXRfb2Zmc2V0LHBfc3RhY2tmcmFtZTs7XAorCWxkOCAgICAgdGVtcD1bcF9zdGFja2ZyYW1lXTs7CQkJCQkJXAorCW1vdiAgICAgYXIucm5hdD10ZW1wOzsJCQkJCQkJXAorCWFkZCAgICAgcF9zdGFja2ZyYW1lPS1yc2Vfcm5hdF9vZmZzZXQrcnNlX3Bmc19vZmZzZXQscF9zdGFja2ZyYW1lOzsJXAorCWxkOCAgICAgdGVtcD1bcF9zdGFja2ZyYW1lXTs7CQkJCQkJXAorCW1vdiAgICAgYXIucGZzPXRlbXA7OwkJCQkJCQlcCisJYWRkICAgICBwX3N0YWNrZnJhbWU9LXJzZV9wZnNfb2Zmc2V0K3JzZV9pZnNfb2Zmc2V0LHBfc3RhY2tmcmFtZTs7CVwKKwlsZDggICAgIHRlbXA9W3Bfc3RhY2tmcmFtZV07OwkJCQkJCVwKKwltb3YgICAgIGNyLmlmcz10ZW1wOzsJCQkJCQkJXAorCWFkZCAgICAgcF9zdGFja2ZyYW1lPS1yc2VfaWZzX29mZnNldCtyc2VfcnNjX29mZnNldCxwX3N0YWNrZnJhbWU7OwlcCisJbGQ4ICAgICB0ZW1wPVtwX3N0YWNrZnJhbWVdOzsJCQkJCQlcCisJbW92ICAgICBhci5yc2M9dGVtcCA7CQkJCQkJCVwKKwltb3YgICAgIHRlbXA9cHNyOzsJCQkJCQkJXAorCW9yICAgICAgdGVtcD10ZW1wLHBzcl9tYXNrX3JlZzs7CQkJCQlcCisJbW92ICAgICBjci5pcHNyPXRlbXA7OwkJCQkJCQlcCisJbW92ICAgICB0ZW1wPWlwOzsJCQkJCQkJXAorCWFkZCAgICAgdGVtcD0weDMwLHRlbXA7OwkJCQkJCVwKKwltb3YgICAgIGNyLmlpcD10ZW1wOzsJCQkJCQkJXAorCXNybHouaTs7CQkJCQkJCQlcCisJcmZpOzsKKworI2VuZGlmIC8qIF9BU01fSUE2NF9NQ0FfQVNNX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvbWVtaW5pdC5oIGIvaW5jbHVkZS9hc20taWE2NC9tZW1pbml0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTU5MGRjNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvbWVtaW5pdC5oCkBAIC0wLDAgKzEsNjAgQEAKKyNpZm5kZWYgbWVtaW5pdF9oCisjZGVmaW5lIG1lbWluaXRfaAorCisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisvKgorICogRW50cmllcyBkZWZpbmVkIHNvIGZhcjoKKyAqIAktIGJvb3QgcGFyYW0gc3RydWN0dXJlIGl0c2VsZgorICogCS0gbWVtb3J5IG1hcAorICogCS0gaW5pdHJkIChvcHRpb25hbCkKKyAqIAktIGNvbW1hbmQgbGluZSBzdHJpbmcKKyAqIAktIGtlcm5lbCBjb2RlICYgZGF0YQorICoKKyAqIE1vcmUgY291bGQgYmUgYWRkZWQgaWYgbmVjZXNzYXJ5CisgKi8KKyNkZWZpbmUgSUE2NF9NQVhfUlNWRF9SRUdJT05TIDUKKworc3RydWN0IHJzdmRfcmVnaW9uIHsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0OwkvKiB2aXJ0dWFsIGFkZHJlc3Mgb2YgYmVnaW5uaW5nIG9mIGVsZW1lbnQgKi8KKwl1bnNpZ25lZCBsb25nIGVuZDsJLyogdmlydHVhbCBhZGRyZXNzIG9mIGVuZCBvZiBlbGVtZW50ICsgMSAqLworfTsKKworZXh0ZXJuIHN0cnVjdCByc3ZkX3JlZ2lvbiByc3ZkX3JlZ2lvbltJQTY0X01BWF9SU1ZEX1JFR0lPTlMgKyAxXTsKK2V4dGVybiBpbnQgbnVtX3JzdmRfcmVnaW9uczsKKworZXh0ZXJuIHZvaWQgZmluZF9tZW1vcnkgKHZvaWQpOworZXh0ZXJuIHZvaWQgcmVzZXJ2ZV9tZW1vcnkgKHZvaWQpOworZXh0ZXJuIHZvaWQgZmluZF9pbml0cmQgKHZvaWQpOworZXh0ZXJuIGludCBmaWx0ZXJfcnN2ZF9tZW1vcnkgKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCB2b2lkICphcmcpOworCisvKgorICogRm9yIHJvdW5kaW5nIGFuIGFkZHJlc3MgdG8gdGhlIG5leHQgSUE2NF9HUkFOVUxFX1NJWkUgb3Igb3JkZXIKKyAqLworI2RlZmluZSBHUkFOVUxFUk9VTkRET1dOKG4pCSgobikgJiB+KElBNjRfR1JBTlVMRV9TSVpFLTEpKQorI2RlZmluZSBHUkFOVUxFUk9VTkRVUChuKQkoKChuKStJQTY0X0dSQU5VTEVfU0laRS0xKSAmIH4oSUE2NF9HUkFOVUxFX1NJWkUtMSkpCisjZGVmaW5lIE9SREVSUk9VTkRET1dOKG4pCSgobikgJiB+KChQQUdFX1NJWkU8PE1BWF9PUkRFUiktMSkpCisKKyNpZmRlZiBDT05GSUdfRElTQ09OVElHTUVNCisgIGV4dGVybiB2b2lkIGNhbGxfcGVybm9kZV9tZW1vcnkgKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbGVuLCB2b2lkICpmdW5jKTsKKyNlbHNlCisjIGRlZmluZSBjYWxsX3Blcm5vZGVfbWVtb3J5KHN0YXJ0LCBsZW4sIGZ1bmMpCSgqZnVuYykoc3RhcnQsIGxlbiwgMCkKKyNlbmRpZgorCisjZGVmaW5lIElHTk9SRV9QRk4wCTEJLyogWFhYIGZpeCBtZTogaWdub3JlIHBmbiAwIHVudGlsIFRMQiBtaXNzIGhhbmRsZXIgaXMgdXBkYXRlZC4uLiAqLworCisjaWZkZWYgQ09ORklHX1ZJUlRVQUxfTUVNX01BUAorIyBkZWZpbmUgTEFSR0VfR0FQCTB4NDAwMDAwMDAgLyogVXNlIHZpcnR1YWwgbWVtIG1hcCBpZiBob2xlIGlzID4gdGhhbiB0aGlzICovCisgIGV4dGVybiB1bnNpZ25lZCBsb25nIHZtYWxsb2NfZW5kOworICBleHRlcm4gc3RydWN0IHBhZ2UgKnZtZW1fbWFwOworICBleHRlcm4gaW50IGZpbmRfbGFyZ2VzdF9ob2xlICh1NjQgc3RhcnQsIHU2NCBlbmQsIHZvaWQgKmFyZyk7CisgIGV4dGVybiBpbnQgY3JlYXRlX21lbV9tYXBfcGFnZV90YWJsZSAodTY0IHN0YXJ0LCB1NjQgZW5kLCB2b2lkICphcmcpOworI2VuZGlmCisKKyNlbmRpZiAvKiBtZW1pbml0X2ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvbW1hbi5oIGIvaW5jbHVkZS9hc20taWE2NC9tbWFuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMwYTczYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvbW1hbi5oCkBAIC0wLDAgKzEsNTEgQEAKKyNpZm5kZWYgX0FTTV9JQTY0X01NQU5fSAorI2RlZmluZSBfQVNNX0lBNjRfTU1BTl9ICisKKy8qCisgKiBCYXNlZCBvbiA8YXNtLWkzODYvbW1hbi5oPi4KKyAqCisgKiBNb2RpZmllZCAxOTk4LTIwMDAsIDIwMDIKKyAqCURhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4sIEhld2xldHQtUGFja2FyZCBDbworICovCisKKyNkZWZpbmUgUFJPVF9SRUFECTB4MQkJLyogcGFnZSBjYW4gYmUgcmVhZCAqLworI2RlZmluZSBQUk9UX1dSSVRFCTB4MgkJLyogcGFnZSBjYW4gYmUgd3JpdHRlbiAqLworI2RlZmluZSBQUk9UX0VYRUMJMHg0CQkvKiBwYWdlIGNhbiBiZSBleGVjdXRlZCAqLworI2RlZmluZSBQUk9UX1NFTQkweDgJCS8qIHBhZ2UgbWF5IGJlIHVzZWQgZm9yIGF0b21pYyBvcHMgKi8KKyNkZWZpbmUgUFJPVF9OT05FCTB4MAkJLyogcGFnZSBjYW4gbm90IGJlIGFjY2Vzc2VkICovCisjZGVmaW5lIFBST1RfR1JPV1NET1dOCTB4MDEwMDAwMDAJLyogbXByb3RlY3QgZmxhZzogZXh0ZW5kIGNoYW5nZSB0byBzdGFydCBvZiBncm93c2Rvd24gdm1hICovCisjZGVmaW5lIFBST1RfR1JPV1NVUAkweDAyMDAwMDAwCS8qIG1wcm90ZWN0IGZsYWc6IGV4dGVuZCBjaGFuZ2UgdG8gZW5kIG9mIGdyb3dzdXAgdm1hICovCisKKyNkZWZpbmUgTUFQX1NIQVJFRAkweDAxCQkvKiBTaGFyZSBjaGFuZ2VzICovCisjZGVmaW5lIE1BUF9QUklWQVRFCTB4MDIJCS8qIENoYW5nZXMgYXJlIHByaXZhdGUgKi8KKyNkZWZpbmUgTUFQX1RZUEUJMHgwZgkJLyogTWFzayBmb3IgdHlwZSBvZiBtYXBwaW5nICovCisjZGVmaW5lIE1BUF9GSVhFRAkweDEwCQkvKiBJbnRlcnByZXQgYWRkciBleGFjdGx5ICovCisjZGVmaW5lIE1BUF9BTk9OWU1PVVMJMHgyMAkJLyogZG9uJ3QgdXNlIGEgZmlsZSAqLworCisjZGVmaW5lIE1BUF9HUk9XU0RPV04JMHgwMDEwMAkJLyogc3RhY2stbGlrZSBzZWdtZW50ICovCisjZGVmaW5lIE1BUF9HUk9XU1VQCTB4MDAyMDAJCS8qIHJlZ2lzdGVyIHN0YWNrLWxpa2Ugc2VnbWVudCAqLworI2RlZmluZSBNQVBfREVOWVdSSVRFCTB4MDA4MDAJCS8qIEVUWFRCU1kgKi8KKyNkZWZpbmUgTUFQX0VYRUNVVEFCTEUJMHgwMTAwMAkJLyogbWFyayBpdCBhcyBhbiBleGVjdXRhYmxlICovCisjZGVmaW5lIE1BUF9MT0NLRUQJMHgwMjAwMAkJLyogcGFnZXMgYXJlIGxvY2tlZCAqLworI2RlZmluZSBNQVBfTk9SRVNFUlZFCTB4MDQwMDAJCS8qIGRvbid0IGNoZWNrIGZvciByZXNlcnZhdGlvbnMgKi8KKyNkZWZpbmUgTUFQX1BPUFVMQVRFCTB4MDgwMDAJCS8qIHBvcHVsYXRlIChwcmVmYXVsdCkgcGFnZXRhYmxlcyAqLworI2RlZmluZSBNQVBfTk9OQkxPQ0sJMHgxMDAwMAkJLyogZG8gbm90IGJsb2NrIG9uIElPICovCisKKyNkZWZpbmUgTVNfQVNZTkMJMQkJLyogc3luYyBtZW1vcnkgYXN5bmNocm9ub3VzbHkgKi8KKyNkZWZpbmUgTVNfSU5WQUxJREFURQkyCQkvKiBpbnZhbGlkYXRlIHRoZSBjYWNoZXMgKi8KKyNkZWZpbmUgTVNfU1lOQwkJNAkJLyogc3luY2hyb25vdXMgbWVtb3J5IHN5bmMgKi8KKworI2RlZmluZSBNQ0xfQ1VSUkVOVAkxCQkvKiBsb2NrIGFsbCBjdXJyZW50IG1hcHBpbmdzICovCisjZGVmaW5lIE1DTF9GVVRVUkUJMgkJLyogbG9jayBhbGwgZnV0dXJlIG1hcHBpbmdzICovCisKKyNkZWZpbmUgTUFEVl9OT1JNQUwJMHgwCQkvKiBkZWZhdWx0IHBhZ2UtaW4gYmVoYXZpb3IgKi8KKyNkZWZpbmUgTUFEVl9SQU5ET00JMHgxCQkvKiBwYWdlLWluIG1pbmltdW0gcmVxdWlyZWQgKi8KKyNkZWZpbmUgTUFEVl9TRVFVRU5USUFMCTB4MgkJLyogcmVhZC1haGVhZCBhZ2dyZXNzaXZlbHkgKi8KKyNkZWZpbmUgTUFEVl9XSUxMTkVFRAkweDMJCS8qIHByZS1mYXVsdCBwYWdlcyAqLworI2RlZmluZSBNQURWX0RPTlRORUVECTB4NAkJLyogZGlzY2FyZCB0aGVzZSBwYWdlcyAqLworCisvKiBjb21wYXRpYmlsaXR5IGZsYWdzICovCisjZGVmaW5lIE1BUF9BTk9OCU1BUF9BTk9OWU1PVVMKKyNkZWZpbmUgTUFQX0ZJTEUJMAorCisjZW5kaWYgLyogX0FTTV9JQTY0X01NQU5fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9tbXUuaCBiL2luY2x1ZGUvYXNtLWlhNjQvbW11LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUxNTI1MwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvbW11LmgKQEAgLTAsMCArMSwxMSBAQAorI2lmbmRlZiBfX01NVV9ICisjZGVmaW5lIF9fTU1VX0gKKworLyoKKyAqIFR5cGUgZm9yIGEgY29udGV4dCBudW1iZXIuICBXZSBkZWNsYXJlIGl0IHZvbGF0aWxlIHRvIGVuc3VyZSBwcm9wZXIgb3JkZXJpbmcgd2hlbiBpdCdzCisgKiBhY2Nlc3NlZCBvdXRzaWRlIG9mIHNwaW5sb2NrJ2QgY3JpdGljYWwgc2VjdGlvbnMgKGUuZy4sIGFzIGRvbmUgaW4gYWN0aXZhdGVfbW0oKSBhbmQKKyAqIGluaXRfbmV3X2NvbnRleHQoKSkuCisgKi8KK3R5cGVkZWYgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBtbV9jb250ZXh0X3Q7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9tbXVfY29udGV4dC5oIGIvaW5jbHVkZS9hc20taWE2NC9tbXVfY29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwOTZlN2UKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L21tdV9jb250ZXh0LmgKQEAgLTAsMCArMSwxNzAgQEAKKyNpZm5kZWYgX0FTTV9JQTY0X01NVV9DT05URVhUX0gKKyNkZWZpbmUgX0FTTV9JQTY0X01NVV9DT05URVhUX0gKKworLyoKKyAqIENvcHlyaWdodCAoQykgMTk5OC0yMDAyIEhld2xldHQtUGFja2FyZCBDbworICoJRGF2aWQgTW9zYmVyZ2VyLVRhbmcgPGRhdmlkbUBocGwuaHAuY29tPgorICovCisKKy8qCisgKiBSb3V0aW5lcyB0byBtYW5hZ2UgdGhlIGFsbG9jYXRpb24gb2YgdGFzayBjb250ZXh0IG51bWJlcnMuICBUYXNrIGNvbnRleHQgbnVtYmVycyBhcmUKKyAqIHVzZWQgdG8gcmVkdWNlIG9yIGVsaW1pbmF0ZSB0aGUgbmVlZCB0byBwZXJmb3JtIFRMQiBmbHVzaGVzIGR1ZSB0byBjb250ZXh0IHN3aXRjaGVzLgorICogQ29udGV4dCBudW1iZXJzIGFyZSBpbXBsZW1lbnRlZCB1c2luZyBpYS02NCByZWdpb24gaWRzLiAgU2luY2UgdGhlIElBLTY0IFRMQiBkb2VzIG5vdAorICogY29uc2lkZXIgdGhlIHJlZ2lvbiBudW1iZXIgd2hlbiBwZXJmb3JtaW5nIGEgVExCIGxvb2t1cCwgd2UgbmVlZCB0byBhc3NpZ24gYSB1bmlxdWUKKyAqIHJlZ2lvbiBpZCB0byBlYWNoIHJlZ2lvbiBpbiBhIHByb2Nlc3MuICBXZSB1c2UgdGhlIGxlYXN0IHNpZ25pZmljYW50IHRocmVlIGJpdHMgaW4gYQorICogcmVnaW9uIGlkIGZvciB0aGlzIHB1cnBvc2UuCisgKi8KKworI2RlZmluZSBJQTY0X1JFR0lPTl9JRF9LRVJORUwJMCAvKiB0aGUga2VybmVsJ3MgcmVnaW9uIGlkICh0bGIuYyBkZXBlbmRzIG9uIHRoaXMgYmVpbmcgMCkgKi8KKworI2RlZmluZSBpYTY0X3JpZChjdHgsYWRkcikJKCgoY3R4KSA8PCAzKSB8IChhZGRyID4+IDYxKSkKKworIyBpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKworI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKworc3RydWN0IGlhNjRfY3R4IHsKKwlzcGlubG9ja190IGxvY2s7CisJdW5zaWduZWQgaW50IG5leHQ7CS8qIG5leHQgY29udGV4dCBudW1iZXIgdG8gdXNlICovCisJdW5zaWduZWQgaW50IGxpbWl0OwkvKiBuZXh0ID49IGxpbWl0ID0+IG11c3QgY2FsbCB3cmFwX21tdV9jb250ZXh0KCkgKi8KKwl1bnNpZ25lZCBpbnQgbWF4X2N0eDsJLyogbWF4LiBjb250ZXh0IHZhbHVlIHN1cHBvcnRlZCBieSBhbGwgQ1BVcyAqLworfTsKKworZXh0ZXJuIHN0cnVjdCBpYTY0X2N0eCBpYTY0X2N0eDsKK0RFQ0xBUkVfUEVSX0NQVSh1OCwgaWE2NF9uZWVkX3RsYl9mbHVzaCk7CisKK2V4dGVybiB2b2lkIHdyYXBfbW11X2NvbnRleHQgKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKKworc3RhdGljIGlubGluZSB2b2lkCitlbnRlcl9sYXp5X3RsYiAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworfQorCisvKgorICogV2hlbiB0aGUgY29udGV4dCBjb3VudGVyIHdyYXBzIGFyb3VuZCBhbGwgVExCcyBuZWVkIHRvIGJlIGZsdXNoZWQgYmVjYXVzZSBhbiBvbGQKKyAqIGNvbnRleHQgbnVtYmVyIG1pZ2h0IGhhdmUgYmVlbiByZXVzZWQuIFRoaXMgaXMgc2lnbmFsbGVkIGJ5IHRoZSBpYTY0X25lZWRfdGxiX2ZsdXNoCisgKiBwZXItQ1BVIHZhcmlhYmxlLCB3aGljaCBpcyBjaGVja2VkIGluIHRoZSByb3V0aW5lIGJlbG93LiBDYWxsZWQgYnkgYWN0aXZhdGVfbW0oKS4KKyAqIDxlZm9jaHRAZXNzLm5lYy5kZT4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCitkZWxheWVkX3RsYl9mbHVzaCAodm9pZCkKK3sKKwlleHRlcm4gdm9pZCBsb2NhbF9mbHVzaF90bGJfYWxsICh2b2lkKTsKKworCWlmICh1bmxpa2VseShfX2lhNjRfcGVyX2NwdV92YXIoaWE2NF9uZWVkX3RsYl9mbHVzaCkpKSB7CisJCWxvY2FsX2ZsdXNoX3RsYl9hbGwoKTsKKwkJX19pYTY0X3Blcl9jcHVfdmFyKGlhNjRfbmVlZF90bGJfZmx1c2gpID0gMDsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgbW1fY29udGV4dF90CitnZXRfbW11X2NvbnRleHQgKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJbW1fY29udGV4dF90IGNvbnRleHQgPSBtbS0+Y29udGV4dDsKKworCWlmIChjb250ZXh0KQorCQlyZXR1cm4gY29udGV4dDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpYTY0X2N0eC5sb2NrLCBmbGFncyk7CisJeworCQkvKiByZS1jaGVjaywgbm93IHRoYXQgd2UndmUgZ290IHRoZSBsb2NrOiAqLworCQljb250ZXh0ID0gbW0tPmNvbnRleHQ7CisJCWlmIChjb250ZXh0ID09IDApIHsKKwkJCWNwdXNfY2xlYXIobW0tPmNwdV92bV9tYXNrKTsKKwkJCWlmIChpYTY0X2N0eC5uZXh0ID49IGlhNjRfY3R4LmxpbWl0KQorCQkJCXdyYXBfbW11X2NvbnRleHQobW0pOworCQkJbW0tPmNvbnRleHQgPSBjb250ZXh0ID0gaWE2NF9jdHgubmV4dCsrOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlhNjRfY3R4LmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gY29udGV4dDsKK30KKworLyoKKyAqIEluaXRpYWxpemUgY29udGV4dCBudW1iZXIgdG8gc29tZSBzYW5lIHZhbHVlLiAgTU0gaXMgZ3VhcmFudGVlZCB0byBiZSBhIGJyYW5kLW5ldworICogYWRkcmVzcy1zcGFjZSwgc28gbm8gVExCIGZsdXNoaW5nIGlzIG5lZWRlZCwgZXZlci4KKyAqLworc3RhdGljIGlubGluZSBpbnQKK2luaXRfbmV3X2NvbnRleHQgKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJbW0tPmNvbnRleHQgPSAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2Rlc3Ryb3lfY29udGV4dCAoc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJLyogTm90aGluZyB0byBkby4gICovCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcmVsb2FkX2NvbnRleHQgKG1tX2NvbnRleHRfdCBjb250ZXh0KQoreworCXVuc2lnbmVkIGxvbmcgcmlkOworCXVuc2lnbmVkIGxvbmcgcmlkX2luY3IgPSAwOworCXVuc2lnbmVkIGxvbmcgcnIwLCBycjEsIHJyMiwgcnIzLCBycjQsIG9sZF9ycjQ7CisKKwlvbGRfcnI0ID0gaWE2NF9nZXRfcnIoMHg4MDAwMDAwMDAwMDAwMDAwVUwpOworCXJpZCA9IGNvbnRleHQgPDwgMzsJLyogbWFrZSBzcGFjZSBmb3IgZW5jb2RpbmcgdGhlIHJlZ2lvbiBudW1iZXIgKi8KKwlyaWRfaW5jciA9IDEgPDwgODsKKworCS8qIGVuY29kZSB0aGUgcmVnaW9uIGlkLCBwcmVmZXJyZWQgcGFnZSBzaXplLCBhbmQgVkhQVCBlbmFibGUgYml0OiAqLworCXJyMCA9IChyaWQgPDwgOCkgfCAoUEFHRV9TSElGVCA8PCAyKSB8IDE7CisJcnIxID0gcnIwICsgMSpyaWRfaW5jcjsKKwlycjIgPSBycjAgKyAyKnJpZF9pbmNyOworCXJyMyA9IHJyMCArIDMqcmlkX2luY3I7CisJcnI0ID0gcnIwICsgNCpyaWRfaW5jcjsKKyNpZmRlZiAgQ09ORklHX0hVR0VUTEJfUEFHRQorCXJyNCA9IChycjQgJiAofigweGZjVUwpKSkgfCAob2xkX3JyNCAmIDB4ZmMpOworI2VuZGlmCisKKwlpYTY0X3NldF9ycigweDAwMDAwMDAwMDAwMDAwMDBVTCwgcnIwKTsKKwlpYTY0X3NldF9ycigweDIwMDAwMDAwMDAwMDAwMDBVTCwgcnIxKTsKKwlpYTY0X3NldF9ycigweDQwMDAwMDAwMDAwMDAwMDBVTCwgcnIyKTsKKwlpYTY0X3NldF9ycigweDYwMDAwMDAwMDAwMDAwMDBVTCwgcnIzKTsKKwlpYTY0X3NldF9ycigweDgwMDAwMDAwMDAwMDAwMDBVTCwgcnI0KTsKKwlpYTY0X3NybHpfaSgpOwkJCS8qIHNybHouaSBpbXBsaWVzIHNybHouZCAqLworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2FjdGl2YXRlX2NvbnRleHQgKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCW1tX2NvbnRleHRfdCBjb250ZXh0OworCisJZG8geworCQljb250ZXh0ID0gZ2V0X21tdV9jb250ZXh0KG1tKTsKKwkJaWYgKCFjcHVfaXNzZXQoc21wX3Byb2Nlc3Nvcl9pZCgpLCBtbS0+Y3B1X3ZtX21hc2spKQorCQkJY3B1X3NldChzbXBfcHJvY2Vzc29yX2lkKCksIG1tLT5jcHVfdm1fbWFzayk7CisJCXJlbG9hZF9jb250ZXh0KGNvbnRleHQpOworCQkvKiBpbiB0aGUgdW5saWtlbHkgZXZlbnQgb2YgYSBUTEItZmx1c2ggYnkgYW5vdGhlciB0aHJlYWQsIHJlZG8gdGhlIGxvYWQ6ICovCisJfSB3aGlsZSAodW5saWtlbHkoY29udGV4dCAhPSBtbS0+Y29udGV4dCkpOworfQorCisjZGVmaW5lIGRlYWN0aXZhdGVfbW0odHNrLG1tKQlkbyB7IH0gd2hpbGUgKDApCisKKy8qCisgKiBTd2l0Y2ggZnJvbSBhZGRyZXNzIHNwYWNlIFBSRVYgdG8gYWRkcmVzcyBzcGFjZSBORVhULgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2FjdGl2YXRlX21tIChzdHJ1Y3QgbW1fc3RydWN0ICpwcmV2LCBzdHJ1Y3QgbW1fc3RydWN0ICpuZXh0KQoreworCWRlbGF5ZWRfdGxiX2ZsdXNoKCk7CisKKwkvKgorCSAqIFdlIG1heSBnZXQgaW50ZXJydXB0cyBoZXJlLCBidXQgdGhhdCdzIE9LIGJlY2F1c2UgaW50ZXJydXB0IGhhbmRsZXJzIGNhbm5vdAorCSAqIHRvdWNoIHVzZXItc3BhY2UuCisJICovCisJaWE2NF9zZXRfa3IoSUE2NF9LUl9QVF9CQVNFLCBfX3BhKG5leHQtPnBnZCkpOworCWFjdGl2YXRlX2NvbnRleHQobmV4dCk7Cit9CisKKyNkZWZpbmUgc3dpdGNoX21tKHByZXZfbW0sbmV4dF9tbSxuZXh0X3Rhc2spCWFjdGl2YXRlX21tKHByZXZfbW0sIG5leHRfbW0pCisKKyMgZW5kaWYgLyogISBfX0FTU0VNQkxZX18gKi8KKyNlbmRpZiAvKiBfQVNNX0lBNjRfTU1VX0NPTlRFWFRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9tbXpvbmUuaCBiL2luY2x1ZGUvYXNtLWlhNjQvbW16b25lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ5MWRhYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvbW16b25lLmgKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMCwyMDAzIFNpbGljb24gR3JhcGhpY3MsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIgTkVDIENvcnAuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIgRXJpY2ggRm9jaHQgPGVmb2NodEBlc3MubmVjLmRlPgorICogQ29weXJpZ2h0IChjKSAyMDAyIEtpbWlvIFN1Z2FudW1hIDxrLXN1Z2FudW1hQGRhLmpwLm5lYy5jb20+CisgKi8KKyNpZm5kZWYgX0FTTV9JQTY0X01NWk9ORV9ICisjZGVmaW5lIF9BU01fSUE2NF9NTVpPTkVfSAorCisjaW5jbHVkZSA8bGludXgvbnVtYS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL21lbWluaXQuaD4KKworI2lmZGVmIENPTkZJR19ESVNDT05USUdNRU0KKworI2lmZGVmIENPTkZJR19JQTY0X0RJRyAvKiBESUcgc3lzdGVtcyBhcmUgc21hbGwgKi8KKyMgZGVmaW5lIE1BWF9QSFlTTk9ERV9JRAk4CisjIGRlZmluZSBOUl9OT0RFX01FTUJMS1MJKE1BWF9OVU1OT0RFUyAqIDgpCisjZWxzZSAvKiBzbjIgaXMgdGhlIGJpZ2dlc3QgY2FzZSwgc28gd2UgdXNlIHRoYXQgaWYgIURJRyAqLworIyBkZWZpbmUgTUFYX1BIWVNOT0RFX0lECTIwNDgKKyMgZGVmaW5lIE5SX05PREVfTUVNQkxLUwkoTUFYX05VTU5PREVTICogNCkKKyNlbmRpZgorCisjZWxzZSAvKiBDT05GSUdfRElTQ09OVElHTUVNICovCisjIGRlZmluZSBOUl9OT0RFX01FTUJMS1MJKE1BWF9OVU1OT0RFUyAqIDQpCisjZW5kaWYgLyogQ09ORklHX0RJU0NPTlRJR01FTSAqLworCisjZW5kaWYgLyogX0FTTV9JQTY0X01NWk9ORV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L21vZHVsZS5oIGIvaW5jbHVkZS9hc20taWE2NC9tb2R1bGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWM4MmJkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taWE2NC9tb2R1bGUuaApAQCAtMCwwICsxLDM1IEBACisjaWZuZGVmIF9BU01fSUE2NF9NT0RVTEVfSAorI2RlZmluZSBfQVNNX0lBNjRfTU9EVUxFX0gKKworLyoKKyAqIElBLTY0LXNwZWNpZmljIHN1cHBvcnQgZm9yIGtlcm5lbCBtb2R1bGUgbG9hZGVyLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMyBIZXdsZXR0LVBhY2thcmQgQ28KKyAqCURhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4KKyAqLworCitzdHJ1Y3QgZWxmNjRfc2hkcjsJCQkvKiBmb3J3YXJkIGRlY2xyYXRpb24gKi8KKworc3RydWN0IG1vZF9hcmNoX3NwZWNpZmljIHsKKwlzdHJ1Y3QgZWxmNjRfc2hkciAqY29yZV9wbHQ7CS8qIGNvcmUgUExUIHNlY3Rpb24gKi8KKwlzdHJ1Y3QgZWxmNjRfc2hkciAqaW5pdF9wbHQ7CS8qIGluaXQgUExUIHNlY3Rpb24gKi8KKwlzdHJ1Y3QgZWxmNjRfc2hkciAqZ290OwkJLyogZ2xvYmFsIG9mZnNldCB0YWJsZSAqLworCXN0cnVjdCBlbGY2NF9zaGRyICpvcGQ7CQkvKiBvZmZpY2lhbCBwcm9jZWR1cmUgZGVzY3JpcHRvcnMgKi8KKwlzdHJ1Y3QgZWxmNjRfc2hkciAqdW53aW5kOwkvKiB1bndpbmQtdGFibGUgc2VjdGlvbiAqLworCXVuc2lnbmVkIGxvbmcgZ3A7CQkvKiBnbG9iYWwtcG9pbnRlciBmb3IgbW9kdWxlICovCisKKwl2b2lkICpjb3JlX3Vud190YWJsZTsJCS8qIGNvcmUgdW53aW5kLXRhYmxlIGNvb2tpZSByZXR1cm5lZCBieSB1bndpbmRlciAqLworCXZvaWQgKmluaXRfdW53X3RhYmxlOwkJLyogaW5pdCB1bndpbmQtdGFibGUgY29va2llIHJldHVybmVkIGJ5IHVud2luZGVyICovCisJdW5zaWduZWQgaW50IG5leHRfZ290X2VudHJ5OwkvKiBpbmRleCBvZiBuZXh0IGF2YWlsYWJsZSBnb3QgZW50cnkgKi8KK307CisKKyNkZWZpbmUgRWxmX1NoZHIJRWxmNjRfU2hkcgorI2RlZmluZSBFbGZfU3ltCQlFbGY2NF9TeW0KKyNkZWZpbmUgRWxmX0VoZHIJRWxmNjRfRWhkcgorCisjZGVmaW5lIE1PRFVMRV9QUk9DX0ZBTUlMWQkiaWE2NCIKKyNkZWZpbmUgTU9EVUxFX0FSQ0hfVkVSTUFHSUMJTU9EVUxFX1BST0NfRkFNSUxZCisKKyNkZWZpbmUgQVJDSF9TSEZfU01BTEwJU0hGX0lBXzY0X1NIT1JUCisKKyNlbmRpZiAvKiBfQVNNX0lBNjRfTU9EVUxFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvbXNnYnVmLmggYi9pbmNsdWRlL2FzbS1pYTY0L21zZ2J1Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjNjRjMGQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L21zZ2J1Zi5oCkBAIC0wLDAgKzEsMjcgQEAKKyNpZm5kZWYgX0FTTV9JQTY0X01TR0JVRl9ICisjZGVmaW5lIF9BU01fSUE2NF9NU0dCVUZfSAorCisvKgorICogVGhlIG1zcWlkNjRfZHMgc3RydWN0dXJlIGZvciBJQS02NCBhcmNoaXRlY3R1cmUuCisgKiBOb3RlIGV4dHJhIHBhZGRpbmcgYmVjYXVzZSB0aGlzIHN0cnVjdHVyZSBpcyBwYXNzZWQgYmFjayBhbmQgZm9ydGgKKyAqIGJldHdlZW4ga2VybmVsIGFuZCB1c2VyIHNwYWNlLgorICoKKyAqIFBhZCBzcGFjZSBpcyBsZWZ0IGZvcjoKKyAqIC0gMiBtaXNjZWxsYW5lb3VzIDY0LWJpdCB2YWx1ZXMKKyAqLworCitzdHJ1Y3QgbXNxaWQ2NF9kcyB7CisJc3RydWN0IGlwYzY0X3Blcm0gbXNnX3Blcm07CisJX19rZXJuZWxfdGltZV90IG1zZ19zdGltZTsJLyogbGFzdCBtc2dzbmQgdGltZSAqLworCV9fa2VybmVsX3RpbWVfdCBtc2dfcnRpbWU7CS8qIGxhc3QgbXNncmN2IHRpbWUgKi8KKwlfX2tlcm5lbF90aW1lX3QgbXNnX2N0aW1lOwkvKiBsYXN0IGNoYW5nZSB0aW1lICovCisJdW5zaWduZWQgbG9uZyAgbXNnX2NieXRlczsJLyogY3VycmVudCBudW1iZXIgb2YgYnl0ZXMgb24gcXVldWUgKi8KKwl1bnNpZ25lZCBsb25nICBtc2dfcW51bTsJLyogbnVtYmVyIG9mIG1lc3NhZ2VzIGluIHF1ZXVlICovCisJdW5zaWduZWQgbG9uZyAgbXNnX3FieXRlczsJLyogbWF4IG51bWJlciBvZiBieXRlcyBvbiBxdWV1ZSAqLworCV9fa2VybmVsX3BpZF90IG1zZ19sc3BpZDsJLyogcGlkIG9mIGxhc3QgbXNnc25kICovCisJX19rZXJuZWxfcGlkX3QgbXNnX2xycGlkOwkvKiBsYXN0IHJlY2VpdmUgcGlkICovCisJdW5zaWduZWQgbG9uZyAgX191bnVzZWQxOworCXVuc2lnbmVkIGxvbmcgIF9fdW51c2VkMjsKK307CisKKyNlbmRpZiAvKiBfQVNNX0lBNjRfTVNHQlVGX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvbXNpLmggYi9pbmNsdWRlL2FzbS1pYTY0L21zaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwZjIxMzcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L21zaS5oCkBAIC0wLDAgKzEsMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNCBJbnRlbAorICogQ29weXJpZ2h0IChDKSBUb20gTG9uZyBOZ3V5ZW4gKHRvbS5sLm5ndXllbkBpbnRlbC5jb20pCisgKi8KKworI2lmbmRlZiBBU01fTVNJX0gKKyNkZWZpbmUgQVNNX01TSV9ICisKKyNkZWZpbmUgTlJfVkVDVE9SUwkJTlJfSVJRUworI2RlZmluZSBGSVJTVF9ERVZJQ0VfVkVDVE9SIAlJQTY0X0ZJUlNUX0RFVklDRV9WRUNUT1IKKyNkZWZpbmUgTEFTVF9ERVZJQ0VfVkVDVE9SCUlBNjRfTEFTVF9ERVZJQ0VfVkVDVE9SCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2ludHJfZ2F0ZSAoaW50IG5yLCB2b2lkICpmdW5jKSB7fQorI2RlZmluZSBJT19BUElDX1ZFQ1RPUihpcnEpCShpcnEpCisjZGVmaW5lIGFja19BUElDX2lycQkJaWE2NF9lb2kKKyNkZWZpbmUgY3B1X21hc2tfdG9fYXBpY2lkKG1hc2spIGNwdV9waHlzaWNhbF9pZChmaXJzdF9jcHUobWFzaykpCisjZGVmaW5lIE1TSV9ERVNUX01PREUJCU1TSV9QSFlTSUNBTF9NT0RFCisjZGVmaW5lIE1TSV9UQVJHRVRfQ1BVCSgoaWE2NF9nZXRyZWcoX0lBNjRfUkVHX0NSX0xJRCkgPj4gMTYpICYgMHhmZmZmKQorI2RlZmluZSBNU0lfVEFSR0VUX0NQVV9TSElGVAk0CisKKyNlbmRpZiAvKiBBU01fTVNJX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvbmFtZWkuaCBiL2luY2x1ZGUvYXNtLWlhNjQvbmFtZWkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGU3NjgwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taWE2NC9uYW1laS5oCkBAIC0wLDAgKzEsMjUgQEAKKyNpZm5kZWYgX0FTTV9JQTY0X05BTUVJX0gKKyNkZWZpbmUgX0FTTV9JQTY0X05BTUVJX0gKKworLyoKKyAqIE1vZGlmaWVkIDE5OTgsIDE5OTksIDIwMDEKKyAqCURhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4sIEhld2xldHQtUGFja2FyZCBDbworICovCisKKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorCisjZGVmaW5lIEVNVUxfUFJFRklYX0xJTlVYX0lBMzIgIi9lbXVsL2lhMzItbGludXgvIgorCitzdGF0aWMgaW5saW5lIGNoYXIgKgorX19lbXVsX3ByZWZpeCAodm9pZCkKK3sKKwlzd2l0Y2ggKGN1cnJlbnQtPnBlcnNvbmFsaXR5KSB7CisJICAgICAgY2FzZSBQRVJfTElOVVgzMjoKKwkJcmV0dXJuIEVNVUxfUFJFRklYX0xJTlVYX0lBMzI7CisJICAgICAgZGVmYXVsdDoKKwkJcmV0dXJuIE5VTEw7CisJfQorfQorCisjZW5kaWYgLyogX0FTTV9JQTY0X05BTUVJX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvbm9kZWRhdGEuaCBiL2luY2x1ZGUvYXNtLWlhNjQvbm9kZWRhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjBmM2VkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taWE2NC9ub2RlZGF0YS5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDAgU2lsaWNvbiBHcmFwaGljcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwMiBORUMgQ29ycC4KKyAqIENvcHlyaWdodCAoYykgMjAwMiBFcmljaCBGb2NodCA8ZWZvY2h0QGVzcy5uZWMuZGU+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDIgS2ltaW8gU3VnYW51bWEgPGstc3VnYW51bWFAZGEuanAubmVjLmNvbT4KKyAqLworI2lmbmRlZiBfQVNNX0lBNjRfTk9ERURBVEFfSAorI2RlZmluZSBfQVNNX0lBNjRfTk9ERURBVEFfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbnVtYS5oPgorCisjaW5jbHVkZSA8YXNtL3BlcmNwdS5oPgorI2luY2x1ZGUgPGFzbS9tbXpvbmUuaD4KKworI2lmZGVmIENPTkZJR19ESVNDT05USUdNRU0KKworLyoKKyAqIE5vZGUgRGF0YS4gT25lIG9mIHRoZXNlIHN0cnVjdHVyZXMgaXMgbG9jYXRlZCBvbiBlYWNoIG5vZGUgb2YgYSBOVU1BIHN5c3RlbS4KKyAqLworCitzdHJ1Y3QgcGdsaXN0X2RhdGE7CitzdHJ1Y3QgaWE2NF9ub2RlX2RhdGEgeworCXNob3J0CQkJYWN0aXZlX2NwdV9jb3VudDsKKwlzaG9ydAkJCW5vZGU7CisJc3RydWN0IHBnbGlzdF9kYXRhCSpwZ19kYXRhX3B0cnNbTUFYX05VTU5PREVTXTsKK307CisKKworLyoKKyAqIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIG5vZGVfZGF0YSBzdHJ1Y3R1cmUgZm9yIHRoZSBleGVjdXRpbmcgY3B1LgorICovCisjZGVmaW5lIGxvY2FsX25vZGVfZGF0YQkJKGxvY2FsX2NwdV9kYXRhLT5ub2RlX2RhdGEpCisKKy8qCisgKiBHaXZlbiBhIG5vZGUgaWQsIHJldHVybiBhIHBvaW50ZXIgdG8gdGhlIHBnX2RhdGFfdCBmb3IgdGhlIG5vZGUuCisgKgorICogTk9ERV9EQVRBIAktIHNob3VsZCBiZSB1c2VkIGluIGFsbCBjb2RlIG5vdCByZWxhdGVkIHRvIHN5c3RlbQorICoJCSAgaW5pdGlhbGl6YXRpb24uIEl0IHVzZXMgcGVybm9kZSBkYXRhIHN0cnVjdHVyZXMgdG8gbWluaW1pemUKKyAqCQkgIG9mZm5vZGUgbWVtb3J5IHJlZmVyZW5jZXMuIEhvd2V2ZXIsIHRoZXNlIHN0cnVjdHVyZSBhcmUgbm90IAorICoJCSAgcHJlc2VudCBkdXJpbmcgYm9vdC4gVGhpcyBtYWNybyBjYW4gYmUgdXNlZCBvbmNlIGNwdV9pbml0CisgKgkJICBjb21wbGV0ZXMuCisgKi8KKyNkZWZpbmUgTk9ERV9EQVRBKG5pZCkJCShsb2NhbF9ub2RlX2RhdGEtPnBnX2RhdGFfcHRyc1tuaWRdKQorCisjZW5kaWYgLyogQ09ORklHX0RJU0NPTlRJR01FTSAqLworCisjZW5kaWYgLyogX0FTTV9JQTY0X05PREVEQVRBX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvbnVtYS5oIGIvaW5jbHVkZS9hc20taWE2NC9udW1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FlMTI4ZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvbnVtYS5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgTlVNQSBzcGVjaWZpYyBwcm90b3R5cGVzIGFuZCBkZWZpbml0aW9ucy4KKyAqCisgKiAyMDAyLzA4LzA1IEVyaWNoIEZvY2h0IDxlZm9jaHRAZXNzLm5lYy5kZT4KKyAqCisgKi8KKyNpZm5kZWYgX0FTTV9JQTY0X05VTUFfSAorI2RlZmluZSBfQVNNX0lBNjRfTlVNQV9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2lmZGVmIENPTkZJR19OVU1BCisKKyNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KKyNpbmNsdWRlIDxsaW51eC9udW1hLmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorCisjaW5jbHVkZSA8YXNtL21tem9uZS5oPgorCitleHRlcm4gdTggY3B1X3RvX25vZGVfbWFwW05SX0NQVVNdIF9fY2FjaGVsaW5lX2FsaWduZWQ7CitleHRlcm4gY3B1bWFza190IG5vZGVfdG9fY3B1X21hc2tbTUFYX05VTU5PREVTXSBfX2NhY2hlbGluZV9hbGlnbmVkOworCisvKiBTdHVmZiBiZWxvdyB0aGlzIGxpbmUgY291bGQgYmUgYXJjaGl0ZWN0dXJlIGluZGVwZW5kZW50ICovCisKK2V4dGVybiBpbnQgbnVtX25vZGVfbWVtYmxrczsJCS8qIHRvdGFsIG51bWJlciBvZiBtZW1vcnkgY2h1bmtzICovCisKKy8qCisgKiBMaXN0IG9mIG5vZGUgbWVtb3J5IGNodW5rcy4gRmlsbGVkIHdoZW4gcGFyc2luZyBTUkFUIHRhYmxlIHRvCisgKiBvYnRhaW4gaW5mb3JtYXRpb24gYWJvdXQgbWVtb3J5IG5vZGVzLgorKi8KKworc3RydWN0IG5vZGVfbWVtYmxrX3MgeworCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGFkZHI7CisJdW5zaWduZWQgbG9uZyBzaXplOworCWludCBuaWQ7CQkvKiB3aGljaCBsb2dpY2FsIG5vZGUgY29udGFpbnMgdGhpcyBjaHVuaz8gKi8KKwlpbnQgYmFuazsJCS8qIHdoaWNoIG1lbSBiYW5rIG9uIHRoaXMgbm9kZSAqLworfTsKKworc3RydWN0IG5vZGVfY3B1aWRfcyB7CisJdTE2CXBoeXNfaWQ7CS8qIGlkIDw8IDggfCBlaWQgKi8KKwlpbnQJbmlkOwkJLyogbG9naWNhbCBub2RlIGNvbnRhaW5pbmcgdGhpcyBDUFUgKi8KK307CisKK2V4dGVybiBzdHJ1Y3Qgbm9kZV9tZW1ibGtfcyBub2RlX21lbWJsa1tOUl9OT0RFX01FTUJMS1NdOworZXh0ZXJuIHN0cnVjdCBub2RlX2NwdWlkX3Mgbm9kZV9jcHVpZFtOUl9DUFVTXTsKKworLyoKKyAqIEFDUEkgMi4wIFNMSVQgKFN5c3RlbSBMb2NhbGl0eSBJbmZvcm1hdGlvbiBUYWJsZSkKKyAqIGh0dHA6Ly9kZXZyZXNvdXJjZS5ocC5jb20vZGV2cmVzb3VyY2UvRG9jcy9UZWNoUGFwZXJzL0lBNjQvc2xpdC5wZGYKKyAqCisgKiBUaGlzIGlzIGEgbWF0cml4IHdpdGggImRpc3RhbmNlcyIgYmV0d2VlbiBub2RlcywgdGhleSBzaG91bGQgYmUKKyAqIHByb3BvcnRpb25hbCB0byB0aGUgbWVtb3J5IGFjY2VzcyBsYXRlbmN5IHJhdGlvcy4KKyAqLworCitleHRlcm4gdTggbnVtYV9zbGl0W01BWF9OVU1OT0RFUyAqIE1BWF9OVU1OT0RFU107CisjZGVmaW5lIG5vZGVfZGlzdGFuY2UoZnJvbSx0bykgKG51bWFfc2xpdFsoZnJvbSkgKiBudW1fb25saW5lX25vZGVzKCkgKyAodG8pXSkKKworZXh0ZXJuIGludCBwYWRkcl90b19uaWQodW5zaWduZWQgbG9uZyBwYWRkcik7CisKKyNkZWZpbmUgbG9jYWxfbm9kZWlkIChjcHVfdG9fbm9kZV9tYXBbc21wX3Byb2Nlc3Nvcl9pZCgpXSkKKworI2Vsc2UgLyogIUNPTkZJR19OVU1BICovCisKKyNkZWZpbmUgcGFkZHJfdG9fbmlkKGFkZHIpCTAKKworI2VuZGlmIC8qIENPTkZJR19OVU1BICovCisKKyNlbmRpZiAvKiBfQVNNX0lBNjRfTlVNQV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L251bW5vZGVzLmggYi9pbmNsdWRlL2FzbS1pYTY0L251bW5vZGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFjZmY0ZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvbnVtbm9kZXMuaApAQCAtMCwwICsxLDE1IEBACisjaWZuZGVmIF9BU01fTUFYX05VTU5PREVTX0gKKyNkZWZpbmUgX0FTTV9NQVhfTlVNTk9ERVNfSAorCisjaWZkZWYgQ09ORklHX0lBNjRfRElHCisvKiBNYXggOCBOb2RlcyAqLworI2RlZmluZSBOT0RFU19TSElGVAkzCisjZWxpZiBkZWZpbmVkKENPTkZJR19JQTY0X0hQX1pYMSkgfHwgZGVmaW5lZChDT05GSUdfSUE2NF9IUF9aWDFfU1dJT1RMQikKKy8qIE1heCAzMiBOb2RlcyAqLworI2RlZmluZSBOT0RFU19TSElGVAk1CisjZWxpZiBkZWZpbmVkKENPTkZJR19JQTY0X1NHSV9TTjIpIHx8IGRlZmluZWQoQ09ORklHX0lBNjRfR0VORVJJQykKKy8qIE1heCAyNTYgTm9kZXMgKi8KKyNkZWZpbmUgTk9ERVNfU0hJRlQJOAorI2VuZGlmCisKKyNlbmRpZiAvKiBfQVNNX01BWF9OVU1OT0RFU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3BhZ2UuaCBiL2luY2x1ZGUvYXNtLWlhNjQvcGFnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0YWFiODAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3BhZ2UuaApAQCAtMCwwICsxLDIwNyBAQAorI2lmbmRlZiBfQVNNX0lBNjRfUEFHRV9ICisjZGVmaW5lIF9BU01fSUE2NF9QQUdFX0gKKy8qCisgKiBQYWdldGFibGUgcmVsYXRlZCBzdHVmZi4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTksIDIwMDIgSGV3bGV0dC1QYWNrYXJkIENvCisgKglEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjaW5jbHVkZSA8YXNtL2ludHJpbnNpY3MuaD4KKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKworLyoKKyAqIFBBR0VfU0hJRlQgZGV0ZXJtaW5lcyB0aGUgYWN0dWFsIGtlcm5lbCBwYWdlIHNpemUuCisgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19JQTY0X1BBR0VfU0laRV80S0IpCisjIGRlZmluZSBQQUdFX1NISUZUCTEyCisjZWxpZiBkZWZpbmVkKENPTkZJR19JQTY0X1BBR0VfU0laRV84S0IpCisjIGRlZmluZSBQQUdFX1NISUZUCTEzCisjZWxpZiBkZWZpbmVkKENPTkZJR19JQTY0X1BBR0VfU0laRV8xNktCKQorIyBkZWZpbmUgUEFHRV9TSElGVAkxNAorI2VsaWYgZGVmaW5lZChDT05GSUdfSUE2NF9QQUdFX1NJWkVfNjRLQikKKyMgZGVmaW5lIFBBR0VfU0hJRlQJMTYKKyNlbHNlCisjIGVycm9yIFVuc3VwcG9ydGVkIHBhZ2Ugc2l6ZSEKKyNlbmRpZgorCisjZGVmaW5lIFBBR0VfU0laRQkJKF9fSUE2NF9VTF9DT05TVCgxKSA8PCBQQUdFX1NISUZUKQorI2RlZmluZSBQQUdFX01BU0sJCSh+KFBBR0VfU0laRSAtIDEpKQorI2RlZmluZSBQQUdFX0FMSUdOKGFkZHIpCSgoKGFkZHIpICsgUEFHRV9TSVpFIC0gMSkgJiBQQUdFX01BU0spCisKKyNkZWZpbmUgUEVSQ1BVX1BBR0VfU0hJRlQJMTYJLyogbG9nMigpIG9mIG1heC4gc2l6ZSBvZiBwZXItQ1BVIGFyZWEgKi8KKyNkZWZpbmUgUEVSQ1BVX1BBR0VfU0laRQkoX19JQTY0X1VMX0NPTlNUKDEpIDw8IFBFUkNQVV9QQUdFX1NISUZUKQorCisjZGVmaW5lIFJHTl9NQVBfTElNSVQJKCgxVUwgPDwgKDQqUEFHRV9TSElGVCAtIDEyKSkgLSBQQUdFX1NJWkUpCS8qIHBlciByZWdpb24gYWRkciBsaW1pdCAqLworCisjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQorIyBkZWZpbmUgUkVHSU9OX0hQQUdFCQkoNFVMKQkvKiBub3RlOiB0aGlzIGlzIGhhcmRjb2RlZCBpbiByZWxvYWRfY29udGV4dCgpISovCisjIGRlZmluZSBSRUdJT05fU0hJRlQJCTYxCisjIGRlZmluZSBIUEFHRV9SRUdJT05fQkFTRQkoUkVHSU9OX0hQQUdFIDw8IFJFR0lPTl9TSElGVCkKKyMgZGVmaW5lIEhQQUdFX1NISUZUCQlocGFnZV9zaGlmdAorIyBkZWZpbmUgSFBBR0VfU0hJRlRfREVGQVVMVAkyOAkvKiBjaGVjayBpYTY0IFNETSBmb3IgYXJjaGl0ZWN0dXJlIHN1cHBvcnRlZCBzaXplICovCisjIGRlZmluZSBIUEFHRV9TSVpFCQkoX19JQTY0X1VMX0NPTlNUKDEpIDw8IEhQQUdFX1NISUZUKQorIyBkZWZpbmUgSFBBR0VfTUFTSwkJKH4oSFBBR0VfU0laRSAtIDEpKQorCisjIGRlZmluZSBIQVZFX0FSQ0hfSFVHRVRMQl9VTk1BUFBFRF9BUkVBCisjIGRlZmluZSBBUkNIX0hBU19IVUdFUEFHRV9PTkxZX1JBTkdFCisjZW5kaWYgLyogQ09ORklHX0hVR0VUTEJfUEFHRSAqLworCisjaWZkZWYgX19BU1NFTUJMWV9fCisjIGRlZmluZSBfX3BhKHgpCQkoKHgpIC0gUEFHRV9PRkZTRVQpCisjIGRlZmluZSBfX3ZhKHgpCQkoKHgpICsgUEFHRV9PRkZTRVQpCisjZWxzZSAvKiAhX19BU1NFTUJMWSAqLworIyBpZmRlZiBfX0tFUk5FTF9fCisjICBkZWZpbmUgU1RSSUNUX01NX1RZUEVDSEVDS1MKKworZXh0ZXJuIHZvaWQgY2xlYXJfcGFnZSAodm9pZCAqcGFnZSk7CitleHRlcm4gdm9pZCBjb3B5X3BhZ2UgKHZvaWQgKnRvLCB2b2lkICpmcm9tKTsKKworLyoKKyAqIGNsZWFyX3VzZXJfcGFnZSgpIGFuZCBjb3B5X3VzZXJfcGFnZSgpIGNhbid0IGJlIGlubGluZSBmdW5jdGlvbnMgYmVjYXVzZQorICogZmx1c2hfZGNhY2hlX3BhZ2UoKSBjYW4ndCBiZSBkZWZpbmVkIHVudGlsIGxhdGVyLi4uCisgKi8KKyNkZWZpbmUgY2xlYXJfdXNlcl9wYWdlKGFkZHIsIHZhZGRyLCBwYWdlKQlcCitkbyB7CQkJCQkJXAorCWNsZWFyX3BhZ2UoYWRkcik7CQkJXAorCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOwkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBjb3B5X3VzZXJfcGFnZSh0bywgZnJvbSwgdmFkZHIsIHBhZ2UpCVwKK2RvIHsJCQkJCQlcCisJY29weV9wYWdlKCh0byksIChmcm9tKSk7CQlcCisJZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSk7CQlcCit9IHdoaWxlICgwKQorCisKKyNkZWZpbmUgYWxsb2NfemVyb2VkX3VzZXJfaGlnaHBhZ2Uodm1hLCB2YWRkcikgXAorKHsJCQkJCQlcCisJc3RydWN0IHBhZ2UgKnBhZ2UgPSBhbGxvY19wYWdlX3ZtYShHRlBfSElHSFVTRVIgfCBfX0dGUF9aRVJPLCB2bWEsIHZhZGRyKTsgXAorCWlmIChwYWdlKQkJCQlcCisgCQlmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTsJXAorCXBhZ2U7CQkJCQlcCit9KQorCisjZGVmaW5lIF9fSEFWRV9BUkNIX0FMTE9DX1pFUk9FRF9VU0VSX0hJR0hQQUdFCisKKyNkZWZpbmUgdmlydF9hZGRyX3ZhbGlkKGthZGRyKQlwZm5fdmFsaWQoX19wYShrYWRkcikgPj4gUEFHRV9TSElGVCkKKworI2lmZGVmIENPTkZJR19WSVJUVUFMX01FTV9NQVAKK2V4dGVybiBpbnQgaWE2NF9wZm5fdmFsaWQgKHVuc2lnbmVkIGxvbmcgcGZuKTsKKyNlbHNlCisjIGRlZmluZSBpYTY0X3Bmbl92YWxpZChwZm4pIDEKKyNlbmRpZgorCisjaWZuZGVmIENPTkZJR19ESVNDT05USUdNRU0KKyMgZGVmaW5lIHBmbl92YWxpZChwZm4pCQkoKChwZm4pIDwgbWF4X21hcG5yKSAmJiBpYTY0X3Bmbl92YWxpZChwZm4pKQorIyBkZWZpbmUgcGFnZV90b19wZm4ocGFnZSkJKCh1bnNpZ25lZCBsb25nKSAocGFnZSAtIG1lbV9tYXApKQorIyBkZWZpbmUgcGZuX3RvX3BhZ2UocGZuKQkobWVtX21hcCArIChwZm4pKQorI2Vsc2UKK2V4dGVybiBzdHJ1Y3QgcGFnZSAqdm1lbV9tYXA7CitleHRlcm4gdW5zaWduZWQgbG9uZyBtYXhfbG93X3BmbjsKKyMgZGVmaW5lIHBmbl92YWxpZChwZm4pCQkoKChwZm4pIDwgbWF4X2xvd19wZm4pICYmIGlhNjRfcGZuX3ZhbGlkKHBmbikpCisjIGRlZmluZSBwYWdlX3RvX3BmbihwYWdlKQkoKHVuc2lnbmVkIGxvbmcpIChwYWdlIC0gdm1lbV9tYXApKQorIyBkZWZpbmUgcGZuX3RvX3BhZ2UocGZuKQkodm1lbV9tYXAgKyAocGZuKSkKKyNlbmRpZgorCisjZGVmaW5lIHBhZ2VfdG9fcGh5cyhwYWdlKQkocGFnZV90b19wZm4ocGFnZSkgPDwgUEFHRV9TSElGVCkKKyNkZWZpbmUgdmlydF90b19wYWdlKGthZGRyKQlwZm5fdG9fcGFnZShfX3BhKGthZGRyKSA+PiBQQUdFX1NISUZUKQorCit0eXBlZGVmIHVuaW9uIGlhNjRfdmEgeworCXN0cnVjdCB7CisJCXVuc2lnbmVkIGxvbmcgb2ZmIDogNjE7CQkvKiBpbnRyYS1yZWdpb24gb2Zmc2V0ICovCisJCXVuc2lnbmVkIGxvbmcgcmVnIDogIDM7CQkvKiByZWdpb24gbnVtYmVyICovCisJfSBmOworCXVuc2lnbmVkIGxvbmcgbDsKKwl2b2lkICpwOworfSBpYTY0X3ZhOworCisvKgorICogTm90ZTogVGhlc2UgbWFjcm9zIGRlcGVuZCBvbiB0aGUgZmFjdCB0aGF0IFBBR0VfT0ZGU0VUIGhhcyBhbGwKKyAqIHJlZ2lvbiBiaXRzIHNldCB0byAxIGFuZCBhbGwgb3RoZXIgYml0cyBzZXQgdG8gemVyby4gIFRoZXkgYXJlCisgKiBleHByZXNzZWQgaW4gdGhpcyB3YXkgdG8gZW5zdXJlIHRoZXkgcmVzdWx0IGluIGEgc2luZ2xlICJkZXAiCisgKiBpbnN0cnVjdGlvbi4KKyAqLworI2RlZmluZSBfX3BhKHgpCQkoe2lhNjRfdmEgX3Y7IF92LmwgPSAobG9uZykgKHgpOyBfdi5mLnJlZyA9IDA7IF92Lmw7fSkKKyNkZWZpbmUgX192YSh4KQkJKHtpYTY0X3ZhIF92OyBfdi5sID0gKGxvbmcpICh4KTsgX3YuZi5yZWcgPSAtMTsgX3YucDt9KQorCisjZGVmaW5lIFJFR0lPTl9OVU1CRVIoeCkJKHtpYTY0X3ZhIF92OyBfdi5sID0gKGxvbmcpICh4KTsgX3YuZi5yZWc7fSkKKyNkZWZpbmUgUkVHSU9OX09GRlNFVCh4KQkoe2lhNjRfdmEgX3Y7IF92LmwgPSAobG9uZykgKHgpOyBfdi5mLm9mZjt9KQorCisjZGVmaW5lIFJFR0lPTl9TSVpFCQlSRUdJT05fTlVNQkVSKDEpCisjZGVmaW5lIFJFR0lPTl9LRVJORUwJCTcKKworI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKKyMgZGVmaW5lIGh0bGJwYWdlX3RvX3BhZ2UoeCkJKCgodW5zaWduZWQgbG9uZykgUkVHSU9OX05VTUJFUih4KSA8PCA2MSkJCQlcCisJCQkJIHwgKFJFR0lPTl9PRkZTRVQoeCkgPj4gKEhQQUdFX1NISUZULVBBR0VfU0hJRlQpKSkKKyMgZGVmaW5lIEhVR0VUTEJfUEFHRV9PUkRFUgkoSFBBR0VfU0hJRlQgLSBQQUdFX1NISUZUKQorIyBkZWZpbmUgaXNfaHVnZXBhZ2Vfb25seV9yYW5nZShtbSwgYWRkciwgbGVuKQkJXAorCSAoUkVHSU9OX05VTUJFUihhZGRyKSA9PSBSRUdJT05fSFBBR0UgJiYJXAorCSAgUkVHSU9OX05VTUJFUigoYWRkcikrKGxlbikpID09IFJFR0lPTl9IUEFHRSkKK2V4dGVybiB1bnNpZ25lZCBpbnQgaHBhZ2Vfc2hpZnQ7CisjZW5kaWYKKworc3RhdGljIF9faW5saW5lX18gaW50CitnZXRfb3JkZXIgKHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlsb25nIGRvdWJsZSBkID0gc2l6ZSAtIDE7CisJbG9uZyBvcmRlcjsKKworCW9yZGVyID0gaWE2NF9nZXRmX2V4cChkKTsKKwlvcmRlciA9IG9yZGVyIC0gUEFHRV9TSElGVCAtIDB4ZmZmZiArIDE7CisJaWYgKG9yZGVyIDwgMCkKKwkJb3JkZXIgPSAwOworCXJldHVybiBvcmRlcjsKK30KKworIyBlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisjaWZkZWYgU1RSSUNUX01NX1RZUEVDSEVDS1MKKyAgLyoKKyAgICogVGhlc2UgYXJlIHVzZWQgdG8gbWFrZSB1c2Ugb2YgQyB0eXBlLWNoZWNraW5nLi4KKyAgICovCisgIHR5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBwdGU7IH0gcHRlX3Q7CisgIHR5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBwbWQ7IH0gcG1kX3Q7CisgIHR5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBwZ2Q7IH0gcGdkX3Q7CisgIHR5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBwZ3Byb3Q7IH0gcGdwcm90X3Q7CisKKyMgZGVmaW5lIHB0ZV92YWwoeCkJKCh4KS5wdGUpCisjIGRlZmluZSBwbWRfdmFsKHgpCSgoeCkucG1kKQorIyBkZWZpbmUgcGdkX3ZhbCh4KQkoKHgpLnBnZCkKKyMgZGVmaW5lIHBncHJvdF92YWwoeCkJKCh4KS5wZ3Byb3QpCisKKyMgZGVmaW5lIF9fcHRlKHgpCSgocHRlX3QpIHsgKHgpIH0gKQorIyBkZWZpbmUgX19wZ3Byb3QoeCkJKChwZ3Byb3RfdCkgeyAoeCkgfSApCisKKyNlbHNlIC8qICFTVFJJQ1RfTU1fVFlQRUNIRUNLUyAqLworICAvKgorICAgKiAuLiB3aGlsZSB0aGVzZSBtYWtlIGl0IGVhc2llciBvbiB0aGUgY29tcGlsZXIKKyAgICovCisjIGlmbmRlZiBfX0FTU0VNQkxZX18KKyAgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgcHRlX3Q7CisgICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIHBtZF90OworICAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBwZ2RfdDsKKyAgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgcGdwcm90X3Q7CisjIGVuZGlmCisKKyMgZGVmaW5lIHB0ZV92YWwoeCkJKHgpCisjIGRlZmluZSBwbWRfdmFsKHgpCSh4KQorIyBkZWZpbmUgcGdkX3ZhbCh4KQkoeCkKKyMgZGVmaW5lIHBncHJvdF92YWwoeCkJKHgpCisKKyMgZGVmaW5lIF9fcHRlKHgpCSh4KQorIyBkZWZpbmUgX19wZ2QoeCkJKHgpCisjIGRlZmluZSBfX3BncHJvdCh4KQkoeCkKKyNlbmRpZiAvKiAhU1RSSUNUX01NX1RZUEVDSEVDS1MgKi8KKworI2RlZmluZSBQQUdFX09GRlNFVAkJCV9fSUE2NF9VTF9DT05TVCgweGUwMDAwMDAwMDAwMDAwMDApCisKKyNkZWZpbmUgVk1fREFUQV9ERUZBVUxUX0ZMQUdTCQkoVk1fUkVBRCB8IFZNX1dSSVRFIHwJCQkJCVwKKwkJCQkJIFZNX01BWVJFQUQgfCBWTV9NQVlXUklURSB8IFZNX01BWUVYRUMgfAkJXAorCQkJCQkgKCgoY3VycmVudC0+cGVyc29uYWxpdHkgJiBSRUFEX0lNUExJRVNfRVhFQykgIT0gMCkJXAorCQkJCQkgID8gVk1fRVhFQyA6IDApKQorCisjZW5kaWYgLyogX0FTTV9JQTY0X1BBR0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9wYWwuaCBiL2luY2x1ZGUvYXNtLWlhNjQvcGFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRkNDc3ZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvcGFsLmgKQEAgLTAsMCArMSwxNTY0IEBACisjaWZuZGVmIF9BU01fSUE2NF9QQUxfSAorI2RlZmluZSBfQVNNX0lBNjRfUEFMX0gKKworLyoKKyAqIFByb2Nlc3NvciBBYnN0cmFjdGlvbiBMYXllciBkZWZpbml0aW9ucy4KKyAqCisgKiBUaGlzIGlzIGJhc2VkIG9uIEludGVsIElBLTY0IEFyY2hpdGVjdHVyZSBTb2Z0d2FyZSBEZXZlbG9wZXIncyBNYW51YWwgcmV2IDEuMAorICogY2hhcHRlciAxMSBJQS02NCBQcm9jZXNzb3IgQWJzdHJhY3Rpb24gTGF5ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwMSBIZXdsZXR0LVBhY2thcmQgQ28KKyAqCURhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4KKyAqCVN0ZXBoYW5lIEVyYW5pYW4gPGVyYW5pYW5AaHBsLmhwLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMTk5OSBWQSBMaW51eCBTeXN0ZW1zCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgV2FsdCBEcnVtbW9uZCA8ZHJ1bW1vbmRAdmFsaW51eC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgU3Jpbml2YXNhIFByYXNhZCBUaGlydW1hbGFjaGFyIDxzcHJhc2FkQHNwcmFzYWQuZW5nci5zZ2kuY29tPgorICoKKyAqIDk5LzEwLzAxCWRhdmlkbQlNYWtlIHN1cmUgd2UgcGFzcyB6ZXJvIGZvciByZXNlcnZlZCBwYXJhbWV0ZXJzLgorICogMDAvMDMvMDcJZGF2aWRtCVVwZGF0ZWQgcGFsX2NhY2hlX2ZsdXNoKCkgdG8gYmUgaW4gc3luYyB3aXRoIFBBTCB2Mi42LgorICogMDAvMDMvMjMgICAgIGNmbGVjayAgTW9kaWZpZWQgcHJvY2Vzc29yIG1pbi1zdGF0ZSBzYXZlIGFyZWEgdG8gbWF0Y2ggdXBkYXRlZCBQQUwgJiBTQUwgaW5mbworICogMDAvMDUvMjQgICAgIGVyYW5pYW4gVXBkYXRlZCB0byBsYXRlc3QgUEFMIHNwZWMsIGZpeCBzdHJ1Y3R1cmVzIGJ1Z3MsIGFkZGVkCisgKiAwMC8wNS8yNQllcmFuaWFuIFN1cHBvcnQgZm9yIHN0YWNrIGNhbGxzLCBhbmQgc3RhdGljIHBoeXNpY2FsIGNhbGxzCisgKiAwMC8wNi8xOAllcmFuaWFuIFN1cHBvcnQgZm9yIHN0YWNrZWQgcGh5c2ljYWwgY2FsbHMKKyAqLworCisvKgorICogTm90ZSB0aGF0IHNvbWUgb2YgdGhlc2UgY2FsbHMgdXNlIGEgc3RhdGljLXJlZ2lzdGVyIG9ubHkgY2FsbGluZworICogY29udmVudGlvbiB3aGljaCBoYXMgbm90aGluZyB0byBkbyB3aXRoIHRoZSByZWd1bGFyIGNhbGxpbmcKKyAqIGNvbnZlbnRpb24uCisgKi8KKyNkZWZpbmUgUEFMX0NBQ0hFX0ZMVVNICQkxCS8qIGZsdXNoIGkvZCBjYWNoZSAqLworI2RlZmluZSBQQUxfQ0FDSEVfSU5GTwkJMgkvKiBnZXQgZGV0YWlsZWQgaS9kIGNhY2hlIGluZm8gKi8KKyNkZWZpbmUgUEFMX0NBQ0hFX0lOSVQJCTMJLyogaW5pdGlhbGl6ZSBpL2QgY2FjaGUgKi8KKyNkZWZpbmUgUEFMX0NBQ0hFX1NVTU1BUlkJNAkvKiBnZXQgc3VtbWFyeSBvZiBjYWNoZSBoZWlyYXJjaHkgKi8KKyNkZWZpbmUgUEFMX01FTV9BVFRSSUIJCTUJLyogbGlzdCBzdXBwb3J0ZWQgbWVtb3J5IGF0dHJpYnV0ZXMgKi8KKyNkZWZpbmUgUEFMX1BUQ0VfSU5GTwkJNgkvKiBwdXJnZSBUTEIgaW5mbyAqLworI2RlZmluZSBQQUxfVk1fSU5GTwkJNwkvKiByZXR1cm4gc3VwcG9ydGVkIHZpcnR1YWwgbWVtb3J5IGZlYXR1cmVzICovCisjZGVmaW5lIFBBTF9WTV9TVU1NQVJZCQk4CS8qIHJldHVybiBzdW1tYXJ5IG9uIHN1cHBvcnRlZCB2bSBmZWF0dXJlcyAqLworI2RlZmluZSBQQUxfQlVTX0dFVF9GRUFUVVJFUwk5CS8qIHJldHVybiBwcm9jZXNzb3IgYnVzIGludGVyZmFjZSBmZWF0dXJlcyBzZXR0aW5ncyAqLworI2RlZmluZSBQQUxfQlVTX1NFVF9GRUFUVVJFUwkxMAkvKiBzZXQgcHJvY2Vzc29yIGJ1cyBmZWF0dXJlcyAqLworI2RlZmluZSBQQUxfREVCVUdfSU5GTwkJMTEJLyogZ2V0IG51bWJlciBvZiBkZWJ1ZyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgUEFMX0ZJWEVEX0FERFIJCTEyCS8qIGdldCBmaXhlZCBjb21wb25lbnQgb2YgcHJvY2Vzc29ycydzIGRpcmVjdGVkIGFkZHJlc3MgKi8KKyNkZWZpbmUgUEFMX0ZSRVFfQkFTRQkJMTMJLyogYmFzZSBmcmVxdWVuY3kgb2YgdGhlIHBsYXRmb3JtICovCisjZGVmaW5lIFBBTF9GUkVRX1JBVElPUwkJMTQJLyogcmF0aW8gb2YgcHJvY2Vzc29yLCBidXMgYW5kIElUQyBmcmVxdWVuY3kgKi8KKyNkZWZpbmUgUEFMX1BFUkZfTU9OX0lORk8JMTUJLyogcmV0dXJuIHBlcmZvcm1hbmNlIG1vbml0b3IgaW5mbyAqLworI2RlZmluZSBQQUxfUExBVEZPUk1fQUREUgkxNgkvKiBzZXQgcHJvY2Vzc29yIGludGVycnVwdCBibG9jayBhbmQgSU8gcG9ydCBzcGFjZSBhZGRyICovCisjZGVmaW5lIFBBTF9QUk9DX0dFVF9GRUFUVVJFUwkxNwkvKiBnZXQgY29uZmlndXJhYmxlIHByb2Nlc3NvciBmZWF0dXJlcyAmIHNldHRpbmdzICovCisjZGVmaW5lIFBBTF9QUk9DX1NFVF9GRUFUVVJFUwkxOAkvKiBlbmFibGUvZGlzYWJsZSBjb25maWd1cmFibGUgcHJvY2Vzc29yIGZlYXR1cmVzICovCisjZGVmaW5lIFBBTF9SU0VfSU5GTwkJMTkJLyogcmV0dXJuIHJzZSBpbmZvcm1hdGlvbiAqLworI2RlZmluZSBQQUxfVkVSU0lPTgkJMjAJLyogcmV0dXJuIHZlcnNpb24gb2YgUEFMIGNvZGUgKi8KKyNkZWZpbmUgUEFMX01DX0NMRUFSX0xPRwkyMQkvKiBjbGVhciBhbGwgcHJvY2Vzc29yIGxvZyBpbmZvICovCisjZGVmaW5lIFBBTF9NQ19EUkFJTgkJMjIJLyogZHJhaW4gb3BlcmF0aW9ucyB3aGljaCBjb3VsZCByZXN1bHQgaW4gYW4gTUNBICovCisjZGVmaW5lIFBBTF9NQ19FWFBFQ1RFRAkJMjMJLyogc2V0L3Jlc2V0IGV4cGVjdGVkIE1DQSBpbmRpY2F0b3IgKi8KKyNkZWZpbmUgUEFMX01DX0RZTkFNSUNfU1RBVEUJMjQJLyogZ2V0IHByb2Nlc3NvciBkeW5hbWljIHN0YXRlICovCisjZGVmaW5lIFBBTF9NQ19FUlJPUl9JTkZPCTI1CS8qIGdldCBwcm9jZXNzb3IgTUNBIGluZm8gYW5kIHN0YXRpYyBzdGF0ZSAqLworI2RlZmluZSBQQUxfTUNfUkVTVU1FCQkyNgkvKiBSZXR1cm4gdG8gaW50ZXJydXB0ZWQgcHJvY2VzcyAqLworI2RlZmluZSBQQUxfTUNfUkVHSVNURVJfTUVNCTI3CS8qIFJlZ2lzdGVyIG1lbW9yeSBmb3IgUEFMIHRvIHVzZSBkdXJpbmcgTUNBcyBhbmQgaW5pdHMgKi8KKyNkZWZpbmUgUEFMX0hBTFQJCTI4CS8qIGVudGVyIHRoZSBsb3cgcG93ZXIgSEFMVCBzdGF0ZSAqLworI2RlZmluZSBQQUxfSEFMVF9MSUdIVAkJMjkJLyogZW50ZXIgdGhlIGxvdyBwb3dlciBsaWdodCBoYWx0IHN0YXRlKi8KKyNkZWZpbmUgUEFMX0NPUFlfSU5GTwkJMzAJLyogcmV0dXJucyBpbmZvIG5lZWRlZCB0byByZWxvY2F0ZSBQQUwgKi8KKyNkZWZpbmUgUEFMX0NBQ0hFX0xJTkVfSU5JVAkzMQkvKiBpbml0IHRhZ3MgJiBkYXRhIG9mIGNhY2hlIGxpbmUgKi8KKyNkZWZpbmUgUEFMX1BNSV9FTlRSWVBPSU5UCTMyCS8qIHJlZ2lzdGVyIFBNSSBtZW1vcnkgZW50cnkgcG9pbnRzIHdpdGggdGhlIHByb2Nlc3NvciAqLworI2RlZmluZSBQQUxfRU5URVJfSUFfMzJfRU5WCTMzCS8qIGVudGVyIElBLTMyIHN5c3RlbSBlbnZpcm9ubWVudCAqLworI2RlZmluZSBQQUxfVk1fUEFHRV9TSVpFCTM0CS8qIHJldHVybiB2bSBUQyBhbmQgcGFnZSB3YWxrZXIgcGFnZSBzaXplcyAqLworCisjZGVmaW5lIFBBTF9NRU1fRk9SX1RFU1QJMzcJLyogZ2V0IGFtb3VudCBvZiBtZW1vcnkgbmVlZGVkIGZvciBsYXRlIHByb2Nlc3NvciB0ZXN0ICovCisjZGVmaW5lIFBBTF9DQUNIRV9QUk9UX0lORk8JMzgJLyogZ2V0IGkvZCBjYWNoZSBwcm90ZWN0aW9uIGluZm8gKi8KKyNkZWZpbmUgUEFMX1JFR0lTVEVSX0lORk8JMzkJLyogcmV0dXJuIEFSIGFuZCBDUiByZWdpc3RlciBpbmZvcm1hdGlvbiovCisjZGVmaW5lIFBBTF9TSFVURE9XTgkJNDAJLyogZW50ZXIgcHJvY2Vzc29yIHNodXRkb3duIHN0YXRlICovCisjZGVmaW5lIFBBTF9QUkVGRVRDSF9WSVNJQklMSVRZCTQxCS8qIE1ha2UgUHJvY2Vzc29yIFByZWZldGNoZXMgVmlzaWJsZSAqLworCisjZGVmaW5lIFBBTF9DT1BZX1BBTAkJMjU2CS8qIHJlbG9jYXRlIFBBTCBwcm9jZWR1cmVzIGFuZCBQQUwgUE1JICovCisjZGVmaW5lIFBBTF9IQUxUX0lORk8JCTI1NwkvKiByZXR1cm4gdGhlIGxvdyBwb3dlciBjYXBhYmlsaXRpZXMgb2YgcHJvY2Vzc29yICovCisjZGVmaW5lIFBBTF9URVNUX1BST0MJCTI1OAkvKiBwZXJmb3JtIGxhdGUgcHJvY2Vzc29yIHNlbGYtdGVzdCAqLworI2RlZmluZSBQQUxfQ0FDSEVfUkVBRAkJMjU5CS8qIHJlYWQgdGFnICYgZGF0YSBvZiBjYWNoZWxpbmUgZm9yIGRpYWdub3N0aWMgdGVzdGluZyAqLworI2RlZmluZSBQQUxfQ0FDSEVfV1JJVEUJCTI2MAkvKiB3cml0ZSB0YWcgJiBkYXRhIG9mIGNhY2hlbGluZSBmb3IgZGlhZ25vc3RpYyB0ZXN0aW5nICovCisjZGVmaW5lIFBBTF9WTV9UUl9SRUFECQkyNjEJLyogcmVhZCBjb250ZW50cyBvZiB0cmFuc2xhdGlvbiByZWdpc3RlciAqLworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vZnB1Lmg+CisKKy8qCisgKiBEYXRhIHR5cGVzIG5lZWRlZCB0byBwYXNzIGluZm9ybWF0aW9uIGludG8gUEFMIHByb2NlZHVyZXMgYW5kCisgKiBpbnRlcnByZXQgaW5mb3JtYXRpb24gcmV0dXJuZWQgYnkgdGhlbS4KKyAqLworCisvKiBSZXR1cm4gc3RhdHVzIGZyb20gdGhlIFBBTCBwcm9jZWR1cmUgKi8KK3R5cGVkZWYgczY0CQkJCXBhbF9zdGF0dXNfdDsKKworI2RlZmluZSBQQUxfU1RBVFVTX1NVQ0NFU1MJCTAJLyogTm8gZXJyb3IgKi8KKyNkZWZpbmUgUEFMX1NUQVRVU19VTklNUExFTUVOVEVECSgtMSkJLyogVW5pbXBsZW1lbnRlZCBwcm9jZWR1cmUgKi8KKyNkZWZpbmUgUEFMX1NUQVRVU19FSU5WQUwJCSgtMikJLyogSW52YWxpZCBhcmd1bWVudCAqLworI2RlZmluZSBQQUxfU1RBVFVTX0VSUk9SCQkoLTMpCS8qIEVycm9yICovCisjZGVmaW5lIFBBTF9TVEFUVVNfQ0FDSEVfSU5JVF9GQUlMCSgtNCkJLyogQ291bGQgbm90IGluaXRpYWxpemUgdGhlCisJCQkJCQkgKiBzcGVjaWZpZWQgbGV2ZWwgYW5kIHR5cGUgb2YKKwkJCQkJCSAqIGNhY2hlIHdpdGhvdXQgc2lkZWVmZmVjdHMKKwkJCQkJCSAqIGFuZCAicmVzdHJpY3QiIHdhcyAxCisJCQkJCQkgKi8KKworLyogUHJvY2Vzc29yIGNhY2hlIGxldmVsIGluIHRoZSBoZWlyYXJjaHkgKi8KK3R5cGVkZWYgdTY0CQkJCXBhbF9jYWNoZV9sZXZlbF90OworI2RlZmluZSBQQUxfQ0FDSEVfTEVWRUxfTDAJCTAJLyogTDAgKi8KKyNkZWZpbmUgUEFMX0NBQ0hFX0xFVkVMX0wxCQkxCS8qIEwxICovCisjZGVmaW5lIFBBTF9DQUNIRV9MRVZFTF9MMgkJMgkvKiBMMiAqLworCisKKy8qIFByb2Nlc3NvciBjYWNoZSB0eXBlIGF0IGEgcGFydGljdWxhciBsZXZlbCBpbiB0aGUgaGVpcmFyY2h5ICovCisKK3R5cGVkZWYgdTY0CQkJCXBhbF9jYWNoZV90eXBlX3Q7CisjZGVmaW5lIFBBTF9DQUNIRV9UWVBFX0lOU1RSVUNUSU9OCTEJLyogSW5zdHJ1Y3Rpb24gY2FjaGUgKi8KKyNkZWZpbmUgUEFMX0NBQ0hFX1RZUEVfREFUQQkJMgkvKiBEYXRhIG9yIHVuaWZpZWQgY2FjaGUgKi8KKyNkZWZpbmUgUEFMX0NBQ0hFX1RZUEVfSU5TVFJVQ1RJT05fREFUQQkzCS8qIEJvdGggRGF0YSAmIEluc3RydWN0aW9uICovCisKKworI2RlZmluZSBQQUxfQ0FDSEVfRkxVU0hfSU5WQUxJREFURQkxCS8qIEludmFsaWRhdGUgY2xlYW4gbGluZXMgKi8KKyNkZWZpbmUgUEFMX0NBQ0hFX0ZMVVNIX0NIS19JTlRSUwkyCS8qIGNoZWNrIGZvciBpbnRlcnJ1cHRzL21jIHdoaWxlIGZsdXNoaW5nICovCisKKy8qIFByb2Nlc3NvciBjYWNoZSBsaW5lIHNpemUgaW4gYnl0ZXMgICovCit0eXBlZGVmIGludAkJCQlwYWxfY2FjaGVfbGluZV9zaXplX3Q7CisKKy8qIFByb2Nlc3NvciBjYWNoZSBsaW5lIHN0YXRlICovCit0eXBlZGVmIHU2NAkJCQlwYWxfY2FjaGVfbGluZV9zdGF0ZV90OworI2RlZmluZSBQQUxfQ0FDSEVfTElORV9TVEFURV9JTlZBTElECTAJLyogSW52YWxpZCAqLworI2RlZmluZSBQQUxfQ0FDSEVfTElORV9TVEFURV9TSEFSRUQJMQkvKiBTaGFyZWQgKi8KKyNkZWZpbmUgUEFMX0NBQ0hFX0xJTkVfU1RBVEVfRVhDTFVTSVZFCTIJLyogRXhjbHVzaXZlICovCisjZGVmaW5lIFBBTF9DQUNIRV9MSU5FX1NUQVRFX01PRElGSUVECTMJLyogTW9kaWZpZWQgKi8KKwordHlwZWRlZiBzdHJ1Y3QgcGFsX2ZyZXFfcmF0aW8geworCXU2NCBkZW4gOiAzMiwgbnVtIDogMzI7CS8qIG51bWVyYXRvciAmIGRlbm9taW5hdG9yICovCit9IGl0Y19yYXRpbywgcHJvY19yYXRpbzsKKwordHlwZWRlZgl1bmlvbiAgcGFsX2NhY2hlX2NvbmZpZ19pbmZvXzFfcyB7CisJc3RydWN0IHsKKwkJdTY0CQl1CQk6IDEsCS8qIDAgVW5pZmllZCBjYWNoZSA/ICovCisJCQkJYXQJCTogMiwJLyogMi0xIENhY2hlIG1lbSBhdHRyKi8KKwkJCQlyZXNlcnZlZAk6IDUsCS8qIDctMyBSZXNlcnZlZCAqLworCQkJCWFzc29jaWF0aXZpdHkJOiA4LAkvKiAxNi04IEFzc29jaWF0aXZpdHkqLworCQkJCWxpbmVfc2l6ZQk6IDgsCS8qIDIzLTE3IExpbmUgc2l6ZSAqLworCQkJCXN0cmlkZQkJOiA4LAkvKiAzMS0yNCBTdHJpZGUgKi8KKwkJCQlzdG9yZV9sYXRlbmN5CTogOCwJLyozOS0zMiBTdG9yZSBsYXRlbmN5Ki8KKwkJCQlsb2FkX2xhdGVuY3kJOiA4LAkvKiA0Ny00MCBMb2FkIGxhdGVuY3kqLworCQkJCXN0b3JlX2hpbnRzCTogOCwJLyogNTUtNDggU3RvcmUgaGludHMqLworCQkJCWxvYWRfaGludHMJOiA4OwkvKiA2My01NiBMb2FkIGhpbnRzICovCisJfSBwY2NpMV9iaXRzOworCXU2NAkJCXBjY2kxX2RhdGE7Cit9IHBhbF9jYWNoZV9jb25maWdfaW5mb18xX3Q7CisKK3R5cGVkZWYJdW5pb24gIHBhbF9jYWNoZV9jb25maWdfaW5mb18yX3MgeworCXN0cnVjdCB7CisJCXU2NAkJY2FjaGVfc2l6ZQk6IDMyLAkvKmNhY2hlIHNpemUgaW4gYnl0ZXMqLworCisKKwkJCQlhbGlhc19ib3VuZGFyeQk6IDgsCS8qIDM5LTMyIGFsaWFzZWQgYWRkcgorCQkJCQkJCSAqIHNlcGFyYXRpb24gZm9yIG1heAorCQkJCQkJCSAqIHBlcmZvcm1hbmNlLgorCQkJCQkJCSAqLworCQkJCXRhZ19sc19iaXQJOiA4LAkvKiA0Ny00MCBMU2Igb2YgYWRkciovCisJCQkJdGFnX21zX2JpdAk6IDgsCS8qIDU1LTQ4IE1TYiBvZiBhZGRyKi8KKwkJCQlyZXNlcnZlZAk6IDg7CS8qIDYzLTU2IFJlc2VydmVkICovCisJfSBwY2NpMl9iaXRzOworCXU2NAkJCXBjY2kyX2RhdGE7Cit9IHBhbF9jYWNoZV9jb25maWdfaW5mb18yX3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QgcGFsX2NhY2hlX2NvbmZpZ19pbmZvX3MgeworCXBhbF9zdGF0dXNfdAkJCXBjY2lfc3RhdHVzOworCXBhbF9jYWNoZV9jb25maWdfaW5mb18xX3QJcGNjaV9pbmZvXzE7CisJcGFsX2NhY2hlX2NvbmZpZ19pbmZvXzJfdAlwY2NpX2luZm9fMjsKKwl1NjQJCQkJcGNjaV9yZXNlcnZlZDsKK30gcGFsX2NhY2hlX2NvbmZpZ19pbmZvX3Q7CisKKyNkZWZpbmUgcGNjaV9sZF9oaW50cwkJcGNjaV9pbmZvXzEucGNjaTFfYml0cy5sb2FkX2hpbnRzCisjZGVmaW5lIHBjY2lfc3RfaGludHMJCXBjY2lfaW5mb18xLnBjY2kxX2JpdHMuc3RvcmVfaGludHMKKyNkZWZpbmUgcGNjaV9sZF9sYXRlbmN5CQlwY2NpX2luZm9fMS5wY2NpMV9iaXRzLmxvYWRfbGF0ZW5jeQorI2RlZmluZSBwY2NpX3N0X2xhdGVuY3kJCXBjY2lfaW5mb18xLnBjY2kxX2JpdHMuc3RvcmVfbGF0ZW5jeQorI2RlZmluZSBwY2NpX3N0cmlkZQkJcGNjaV9pbmZvXzEucGNjaTFfYml0cy5zdHJpZGUKKyNkZWZpbmUgcGNjaV9saW5lX3NpemUJCXBjY2lfaW5mb18xLnBjY2kxX2JpdHMubGluZV9zaXplCisjZGVmaW5lIHBjY2lfYXNzb2MJCXBjY2lfaW5mb18xLnBjY2kxX2JpdHMuYXNzb2NpYXRpdml0eQorI2RlZmluZSBwY2NpX2NhY2hlX2F0dHIJCXBjY2lfaW5mb18xLnBjY2kxX2JpdHMuYXQKKyNkZWZpbmUgcGNjaV91bmlmaWVkCQlwY2NpX2luZm9fMS5wY2NpMV9iaXRzLnUKKyNkZWZpbmUgcGNjaV90YWdfbXNiCQlwY2NpX2luZm9fMi5wY2NpMl9iaXRzLnRhZ19tc19iaXQKKyNkZWZpbmUgcGNjaV90YWdfbHNiCQlwY2NpX2luZm9fMi5wY2NpMl9iaXRzLnRhZ19sc19iaXQKKyNkZWZpbmUgcGNjaV9hbGlhc19ib3VuZGFyeQlwY2NpX2luZm9fMi5wY2NpMl9iaXRzLmFsaWFzX2JvdW5kYXJ5CisjZGVmaW5lIHBjY2lfY2FjaGVfc2l6ZQkJcGNjaV9pbmZvXzIucGNjaTJfYml0cy5jYWNoZV9zaXplCisKKworCisvKiBQb3NzaWJsZSB2YWx1ZXMgZm9yIGNhY2hlIGF0dHJpYnV0ZXMgKi8KKworI2RlZmluZSBQQUxfQ0FDSEVfQVRUUl9XVAkJMAkvKiBXcml0ZSB0aHJvdWdoIGNhY2hlICovCisjZGVmaW5lIFBBTF9DQUNIRV9BVFRSX1dCCQkxCS8qIFdyaXRlIGJhY2sgY2FjaGUgKi8KKyNkZWZpbmUgUEFMX0NBQ0hFX0FUVFJfV1RfT1JfV0IJCTIJLyogRWl0aGVyIHdyaXRlIHRocnUgb3Igd3JpdGUKKwkJCQkJCSAqIGJhY2sgZGVwZW5kaW5nIG9uIFRMQgorCQkJCQkJICogbWVtb3J5IGF0dHJpYnV0ZXMKKwkJCQkJCSAqLworCisKKy8qIFBvc3NpYmxlIHZhbHVlcyBmb3IgY2FjaGUgaGludHMgKi8KKworI2RlZmluZSBQQUxfQ0FDSEVfSElOVF9URU1QXzEJCTAJLyogVGVtcG9yYWwgbGV2ZWwgMSAqLworI2RlZmluZSBQQUxfQ0FDSEVfSElOVF9OVEVNUF8xCQkxCS8qIE5vbi10ZW1wb3JhbCBsZXZlbCAxICovCisjZGVmaW5lIFBBTF9DQUNIRV9ISU5UX05URU1QX0FMTAkzCS8qIE5vbi10ZW1wb3JhbCBhbGwgbGV2ZWxzICovCisKKy8qIFByb2Nlc3NvciBjYWNoZSBwcm90ZWN0aW9uICBpbmZvcm1hdGlvbiAqLwordHlwZWRlZiB1bmlvbiBwYWxfY2FjaGVfcHJvdGVjdGlvbl9lbGVtZW50X3UgeworCXUzMgkJCXBjcGlfZGF0YTsKKwlzdHJ1Y3QgeworCQl1MzIJCWRhdGFfYml0cwk6IDgsIC8qICMgZGF0YSBiaXRzIGNvdmVyZWQgYnkKKwkJCQkJCSAgICAgICogZWFjaCB1bml0IG9mIHByb3RlY3Rpb24KKwkJCQkJCSAgICAgICovCisKKwkJCQl0YWdwcm90X2xzYgk6IDYsIC8qIExlYXN0IC1kby0gKi8KKwkJCQl0YWdwcm90X21zYgk6IDYsIC8qIE1vc3QgU2lnLiB0YWcgYWRkcmVzcworCQkJCQkJICAgICAgKiBiaXQgdGhhdCB0aGlzCisJCQkJCQkgICAgICAqIHByb3RlY3Rpb24gY292ZXJzLgorCQkJCQkJICAgICAgKi8KKwkJCQlwcm90X2JpdHMJOiA2LCAvKiAjIG9mIHByb3RlY3Rpb24gYml0cyAqLworCQkJCW1ldGhvZAkJOiA0LCAvKiBQcm90ZWN0aW9uIG1ldGhvZCAqLworCQkJCXRfZAkJOiAyOyAvKiBJbmRpY2F0ZXMgd2hpY2ggcGFydAorCQkJCQkJICAgICAgKiBvZiB0aGUgY2FjaGUgdGhpcworCQkJCQkJICAgICAgKiBwcm90ZWN0aW9uIGVuY29kaW5nCisJCQkJCQkgICAgICAqIGFwcGxpZXMuCisJCQkJCQkgICAgICAqLworCX0gcGNwX2luZm87Cit9IHBhbF9jYWNoZV9wcm90ZWN0aW9uX2VsZW1lbnRfdDsKKworI2RlZmluZSBwY3BpX2NhY2hlX3Byb3RfcGFydAlwY3BfaW5mby50X2QKKyNkZWZpbmUgcGNwaV9wcm90X21ldGhvZAlwY3BfaW5mby5tZXRob2QKKyNkZWZpbmUgcGNwaV9wcm90X2JpdHMJCXBjcF9pbmZvLnByb3RfYml0cworI2RlZmluZSBwY3BpX3RhZ3Byb3RfbXNiCXBjcF9pbmZvLnRhZ3Byb3RfbXNiCisjZGVmaW5lIHBjcGlfdGFncHJvdF9sc2IJcGNwX2luZm8udGFncHJvdF9sc2IKKyNkZWZpbmUgcGNwaV9kYXRhX2JpdHMJCXBjcF9pbmZvLmRhdGFfYml0cworCisvKiBQcm9jZXNzb3IgY2FjaGUgcGFydCBlbmNvZGluZ3MgKi8KKyNkZWZpbmUgUEFMX0NBQ0hFX1BST1RfUEFSVF9EQVRBCTAJLyogRGF0YSBwcm90ZWN0aW9uICAqLworI2RlZmluZSBQQUxfQ0FDSEVfUFJPVF9QQVJUX1RBRwkJMQkvKiBUYWcgIHByb3RlY3Rpb24gKi8KKyNkZWZpbmUgUEFMX0NBQ0hFX1BST1RfUEFSVF9UQUdfREFUQQkyCS8qIFRhZytkYXRhIHByb3RlY3Rpb24gKHRhZyBpcworCQkJCQkJICogbW9yZSBzaWduaWZpY2FudCApCisJCQkJCQkgKi8KKyNkZWZpbmUgUEFMX0NBQ0hFX1BST1RfUEFSVF9EQVRBX1RBRwkzCS8qIERhdGErdGFnIHByb3RlY3Rpb24gKGRhdGEgaXMKKwkJCQkJCSAqIG1vcmUgc2lnbmlmaWNhbnQgKQorCQkJCQkJICovCisjZGVmaW5lIFBBTF9DQUNIRV9QUk9UX1BBUlRfTUFYCQk2CisKKwordHlwZWRlZiBzdHJ1Y3QgcGFsX2NhY2hlX3Byb3RlY3Rpb25faW5mb19zIHsKKwlwYWxfc3RhdHVzX3QJCQlwY3BpX3N0YXR1czsKKwlwYWxfY2FjaGVfcHJvdGVjdGlvbl9lbGVtZW50X3QJcGNwX2luZm9bUEFMX0NBQ0hFX1BST1RfUEFSVF9NQVhdOworfSBwYWxfY2FjaGVfcHJvdGVjdGlvbl9pbmZvX3Q7CisKKworLyogUHJvY2Vzc29yIGNhY2hlIHByb3RlY3Rpb24gbWV0aG9kIGVuY29kaW5ncyAqLworI2RlZmluZSBQQUxfQ0FDSEVfUFJPVF9NRVRIT0RfTk9ORQkJMAkvKiBObyBwcm90ZWN0aW9uICovCisjZGVmaW5lIFBBTF9DQUNIRV9QUk9UX01FVEhPRF9PRERfUEFSSVRZCTEJLyogT2RkIHBhcml0eSAqLworI2RlZmluZSBQQUxfQ0FDSEVfUFJPVF9NRVRIT0RfRVZFTl9QQVJJVFkJMgkvKiBFdmVuIHBhcml0eSAqLworI2RlZmluZSBQQUxfQ0FDSEVfUFJPVF9NRVRIT0RfRUNDCQkzCS8qIEVDQyBwcm90ZWN0aW9uICovCisKKworLyogUHJvY2Vzc29yIGNhY2hlIGxpbmUgaWRlbnRpZmljYXRpb24gaW4gdGhlIGhlaXJhcmNoeSAqLwordHlwZWRlZiB1bmlvbiBwYWxfY2FjaGVfbGluZV9pZF91IHsKKwl1NjQJCQlwY2xpZF9kYXRhOworCXN0cnVjdCB7CisJCXU2NAkJY2FjaGVfdHlwZQk6IDgsCS8qIDctMCBjYWNoZSB0eXBlICovCisJCQkJbGV2ZWwJCTogOCwJLyogMTUtOCBsZXZlbCBvZiB0aGUKKwkJCQkJCQkgKiBjYWNoZSBpbiB0aGUKKwkJCQkJCQkgKiBoZWlyYXJjaHkuCisJCQkJCQkJICovCisJCQkJd2F5CQk6IDgsCS8qIDIzLTE2IHdheSBpbiB0aGUgc2V0CisJCQkJCQkJICovCisJCQkJcGFydAkJOiA4LAkvKiAzMS0yNCBwYXJ0IG9mIHRoZQorCQkJCQkJCSAqIGNhY2hlCisJCQkJCQkJICovCisJCQkJcmVzZXJ2ZWQJOiAzMjsJLyogNjMtMzIgaXMgcmVzZXJ2ZWQqLworCX0gcGNsaWRfaW5mb19yZWFkOworCXN0cnVjdCB7CisJCXU2NAkJY2FjaGVfdHlwZQk6IDgsCS8qIDctMCBjYWNoZSB0eXBlICovCisJCQkJbGV2ZWwJCTogOCwJLyogMTUtOCBsZXZlbCBvZiB0aGUKKwkJCQkJCQkgKiBjYWNoZSBpbiB0aGUKKwkJCQkJCQkgKiBoZWlyYXJjaHkuCisJCQkJCQkJICovCisJCQkJd2F5CQk6IDgsCS8qIDIzLTE2IHdheSBpbiB0aGUgc2V0CisJCQkJCQkJICovCisJCQkJcGFydAkJOiA4LAkvKiAzMS0yNCBwYXJ0IG9mIHRoZQorCQkJCQkJCSAqIGNhY2hlCisJCQkJCQkJICovCisJCQkJbWVzaQkJOiA4LAkvKiAzOS0zMiBjYWNoZSBsaW5lCisJCQkJCQkJICogc3RhdGUKKwkJCQkJCQkgKi8KKwkJCQlzdGFydAkJOiA4LAkvKiA0Ny00MCBsc2Igb2YgZGF0YSB0bworCQkJCQkJCSAqIGludmVydAorCQkJCQkJCSAqLworCQkJCWxlbmd0aAkJOiA4LAkvKiA1NS00OCAjYml0cyB0bworCQkJCQkJCSAqIGludmVydAorCQkJCQkJCSAqLworCQkJCXRyaWdnZXIJCTogODsJLyogNjMtNTYgVHJpZ2dlciBlcnJvcgorCQkJCQkJCSAqIGJ5IGRvaW5nIGEgbG9hZAorCQkJCQkJCSAqIGFmdGVyIHRoZSB3cml0ZQorCQkJCQkJCSAqLworCisJfSBwY2xpZF9pbmZvX3dyaXRlOworfSBwYWxfY2FjaGVfbGluZV9pZF91X3Q7CisKKyNkZWZpbmUgcGNsaWRfcmVhZF9wYXJ0CQlwY2xpZF9pbmZvX3JlYWQucGFydAorI2RlZmluZSBwY2xpZF9yZWFkX3dheQkJcGNsaWRfaW5mb19yZWFkLndheQorI2RlZmluZSBwY2xpZF9yZWFkX2xldmVsCXBjbGlkX2luZm9fcmVhZC5sZXZlbAorI2RlZmluZSBwY2xpZF9yZWFkX2NhY2hlX3R5cGUJcGNsaWRfaW5mb19yZWFkLmNhY2hlX3R5cGUKKworI2RlZmluZSBwY2xpZF93cml0ZV90cmlnZ2VyCXBjbGlkX2luZm9fd3JpdGUudHJpZ2dlcgorI2RlZmluZSBwY2xpZF93cml0ZV9sZW5ndGgJcGNsaWRfaW5mb193cml0ZS5sZW5ndGgKKyNkZWZpbmUgcGNsaWRfd3JpdGVfc3RhcnQJcGNsaWRfaW5mb193cml0ZS5zdGFydAorI2RlZmluZSBwY2xpZF93cml0ZV9tZXNpCXBjbGlkX2luZm9fd3JpdGUubWVzaQorI2RlZmluZSBwY2xpZF93cml0ZV9wYXJ0CXBjbGlkX2luZm9fd3JpdGUucGFydAorI2RlZmluZSBwY2xpZF93cml0ZV93YXkJCXBjbGlkX2luZm9fd3JpdGUud2F5CisjZGVmaW5lIHBjbGlkX3dyaXRlX2xldmVsCXBjbGlkX2luZm9fd3JpdGUubGV2ZWwKKyNkZWZpbmUgcGNsaWRfd3JpdGVfY2FjaGVfdHlwZQlwY2xpZF9pbmZvX3dyaXRlLmNhY2hlX3R5cGUKKworLyogUHJvY2Vzc29yIGNhY2hlIGxpbmUgcGFydCBlbmNvZGluZ3MgKi8KKyNkZWZpbmUgUEFMX0NBQ0hFX0xJTkVfSURfUEFSVF9EQVRBCQkwCS8qIERhdGEgKi8KKyNkZWZpbmUgUEFMX0NBQ0hFX0xJTkVfSURfUEFSVF9UQUcJCTEJLyogVGFnICovCisjZGVmaW5lIFBBTF9DQUNIRV9MSU5FX0lEX1BBUlRfREFUQV9QUk9UCTIJLyogRGF0YSBwcm90ZWN0aW9uICovCisjZGVmaW5lIFBBTF9DQUNIRV9MSU5FX0lEX1BBUlRfVEFHX1BST1QJCTMJLyogVGFnIHByb3RlY3Rpb24gKi8KKyNkZWZpbmUgUEFMX0NBQ0hFX0xJTkVfSURfUEFSVF9EQVRBX1RBR19QUk9UCTQJLyogRGF0YSt0YWcKKwkJCQkJCQkgKiBwcm90ZWN0aW9uCisJCQkJCQkJICovCit0eXBlZGVmIHN0cnVjdCBwYWxfY2FjaGVfbGluZV9pbmZvX3MgeworCXBhbF9zdGF0dXNfdAkJcGNsaV9zdGF0dXM7CQkvKiBSZXR1cm4gc3RhdHVzIG9mIHRoZSByZWFkIGNhY2hlIGxpbmUKKwkJCQkJCQkgKiBpbmZvIGNhbGwuCisJCQkJCQkJICovCisJdTY0CQkJcGNsaV9kYXRhOwkJLyogNjQtYml0IGRhdGEsIHRhZywgcHJvdGVjdGlvbiBiaXRzIC4uICovCisJdTY0CQkJcGNsaV9kYXRhX2xlbjsJCS8qIGRhdGEgbGVuZ3RoIGluIGJpdHMgKi8KKwlwYWxfY2FjaGVfbGluZV9zdGF0ZV90CXBjbGlfY2FjaGVfbGluZV9zdGF0ZTsJLyogbWVzaSBzdGF0ZSAqLworCit9IHBhbF9jYWNoZV9saW5lX2luZm9fdDsKKworCisvKiBNYWNoaW5lIENoZWNrIHJlbGF0ZWQgY3JhcCAqLworCisvKiBQZW5kaW5nIGV2ZW50IHN0YXR1cyBiaXRzICAqLwordHlwZWRlZiB1NjQJCQkJCXBhbF9tY19wZW5kaW5nX2V2ZW50c190OworCisjZGVmaW5lIFBBTF9NQ19QRU5ESU5HX01DQQkJCSgxIDw8IDApCisjZGVmaW5lIFBBTF9NQ19QRU5ESU5HX0lOSVQJCQkoMSA8PCAxKQorCisvKiBFcnJvciBpbmZvcm1hdGlvbiB0eXBlICovCit0eXBlZGVmIHU2NAkJCQkJcGFsX21jX2luZm9faW5kZXhfdDsKKworI2RlZmluZSBQQUxfTUNfSU5GT19QUk9DRVNTT1IJCQkwCS8qIFByb2Nlc3NvciAqLworI2RlZmluZSBQQUxfTUNfSU5GT19DQUNIRV9DSEVDSwkJCTEJLyogQ2FjaGUgY2hlY2sgKi8KKyNkZWZpbmUgUEFMX01DX0lORk9fVExCX0NIRUNLCQkJMgkvKiBUbGIgY2hlY2sgKi8KKyNkZWZpbmUgUEFMX01DX0lORk9fQlVTX0NIRUNLCQkJMwkvKiBCdXMgY2hlY2sgKi8KKyNkZWZpbmUgUEFMX01DX0lORk9fUkVRX0FERFIJCQk0CS8qIFJlcXVlc3RvciBhZGRyZXNzICovCisjZGVmaW5lIFBBTF9NQ19JTkZPX1JFU1BfQUREUgkJCTUJLyogUmVzcG9uZGVyIGFkZHJlc3MgKi8KKyNkZWZpbmUgUEFMX01DX0lORk9fVEFSR0VUX0FERFIJCQk2CS8qIFRhcmdldCBhZGRyZXNzICovCisjZGVmaW5lIFBBTF9NQ19JTkZPX0lNUExfREVQCQkJNwkvKiBJbXBsZW1lbnRhdGlvbgorCQkJCQkJCSAqIGRlcGVuZGVudAorCQkJCQkJCSAqLworCisKK3R5cGVkZWYgc3RydWN0IHBhbF9wcm9jZXNzX3N0YXRlX2luZm9fcyB7CisJdTY0CQlyZXNlcnZlZDEJOiAyLAorCQkJcnoJCTogMSwJLyogUEFMX0NIRUNLIHByb2Nlc3NvcgorCQkJCQkJICogcmVuZGV6dm91cworCQkJCQkJICogc3VjY2Vzc2Z1bC4KKwkJCQkJCSAqLworCisJCQlyYQkJOiAxLAkvKiBQQUxfQ0hFQ0sgYXR0ZW1wdGVkCisJCQkJCQkgKiBhIHJlbmRlenZvdXMuCisJCQkJCQkgKi8KKwkJCW1lCQk6IDEsCS8qIERpc3RpbmN0IG11bHRpcGxlCisJCQkJCQkgKiBlcnJvcnMgb2NjdXJyZWQKKwkJCQkJCSAqLworCisJCQltbgkJOiAxLAkvKiBNaW4uIHN0YXRlIHNhdmUKKwkJCQkJCSAqIGFyZWEgaGFzIGJlZW4KKwkJCQkJCSAqIHJlZ2lzdGVyZWQgd2l0aCBQQUwKKwkJCQkJCSAqLworCisJCQlzeQkJOiAxLAkvKiBTdG9yYWdlIGludGVncml0eQorCQkJCQkJICogc3luY2hlZAorCQkJCQkJICovCisKKworCQkJY28JCTogMSwJLyogQ29udGludWFibGUgKi8KKwkJCWNpCQk6IDEsCS8qIE1DIGlzb2xhdGVkICovCisJCQl1cwkJOiAxLAkvKiBVbmNvbnRhaW5lZCBzdG9yYWdlCisJCQkJCQkgKiBkYW1hZ2UuCisJCQkJCQkgKi8KKworCisJCQloZAkJOiAxLAkvKiBOb24tZXNzZW50aWFsIGh3CisJCQkJCQkgKiBsb3N0IChubyBsb3NzIG9mCisJCQkJCQkgKiBmdW5jdGlvbmFsaXR5KQorCQkJCQkJICogY2F1c2luZyB0aGUKKwkJCQkJCSAqIHByb2Nlc3NvciB0byBydW4gaW4KKwkJCQkJCSAqIGRlZ3JhZGVkIG1vZGUuCisJCQkJCQkgKi8KKworCQkJdGwJCTogMSwJLyogMSA9PiBNQyBvY2N1cnJlZAorCQkJCQkJICogYWZ0ZXIgYW4gaW5zdHIgd2FzCisJCQkJCQkgKiBleGVjdXRlZCBidXQgYmVmb3JlCisJCQkJCQkgKiB0aGUgdHJhcCB0aGF0CisJCQkJCQkgKiByZXN1bHRlZCBmcm9tIGluc3RyCisJCQkJCQkgKiBleGVjdXRpb24gd2FzCisJCQkJCQkgKiBnZW5lcmF0ZWQuCisJCQkJCQkgKiAoVHJhcCBMb3N0ICkKKwkJCQkJCSAqLworCQkJbWkJCTogMSwJLyogTW9yZSBpbmZvcm1hdGlvbiBhdmFpbGFibGUKKwkJCQkJCSAqIGNhbGwgUEFMX01DX0VSUk9SX0lORk8KKwkJCQkJCSAqLworCQkJcGkJCTogMSwJLyogUHJlY2lzZSBpbnN0cnVjdGlvbiBwb2ludGVyICovCisJCQlwbQkJOiAxLAkvKiBQcmVjaXNlIG1pbi1zdGF0ZSBzYXZlIGFyZWEgKi8KKworCQkJZHkJCTogMSwJLyogUHJvY2Vzc29yIGR5bmFtaWMKKwkJCQkJCSAqIHN0YXRlIHZhbGlkCisJCQkJCQkgKi8KKworCisJCQlpbgkJOiAxLAkvKiAwID0gTUMsIDEgPSBJTklUICovCisJCQlycwkJOiAxLAkvKiBSU0UgdmFsaWQgKi8KKwkJCWNtCQk6IDEsCS8qIE1DIGNvcnJlY3RlZCAqLworCQkJZXgJCTogMSwJLyogTUMgaXMgZXhwZWN0ZWQgKi8KKwkJCWNyCQk6IDEsCS8qIENvbnRyb2wgcmVncyB2YWxpZCovCisJCQlwYwkJOiAxLAkvKiBQZXJmIGNudHJzIHZhbGlkICovCisJCQlkcgkJOiAxLAkvKiBEZWJ1ZyByZWdzIHZhbGlkICovCisJCQl0cgkJOiAxLAkvKiBUcmFuc2xhdGlvbiByZWdzCisJCQkJCQkgKiB2YWxpZAorCQkJCQkJICovCisJCQlycgkJOiAxLAkvKiBSZWdpb24gcmVncyB2YWxpZCAqLworCQkJYXIJCTogMSwJLyogQXBwIHJlZ3MgdmFsaWQgKi8KKwkJCWJyCQk6IDEsCS8qIEJyYW5jaCByZWdzIHZhbGlkICovCisJCQlwcgkJOiAxLAkvKiBQcmVkaWNhdGUgcmVnaXN0ZXJzCisJCQkJCQkgKiB2YWxpZAorCQkJCQkJICovCisKKwkJCWZwCQk6IDEsCS8qIGZwIHJlZ2lzdGVycyB2YWxpZCovCisJCQliMQkJOiAxLAkvKiBQcmVzZXJ2ZWQgYmFuayBvbmUKKwkJCQkJCSAqIGdlbmVyYWwgcmVnaXN0ZXJzCisJCQkJCQkgKiBhcmUgdmFsaWQKKwkJCQkJCSAqLworCQkJYjAJCTogMSwJLyogUHJlc2VydmVkIGJhbmsgemVybworCQkJCQkJICogZ2VuZXJhbCByZWdpc3RlcnMKKwkJCQkJCSAqIGFyZSB2YWxpZAorCQkJCQkJICovCisJCQlncgkJOiAxLAkvKiBHZW5lcmFsIHJlZ2lzdGVycworCQkJCQkJICogYXJlIHZhbGlkCisJCQkJCQkgKiAoZXhjbC4gYmFua2VkIHJlZ3MpCisJCQkJCQkgKi8KKwkJCWRzaXplCQk6IDE2LAkvKiBzaXplIG9mIGR5bmFtaWMKKwkJCQkJCSAqIHN0YXRlIHJldHVybmVkCisJCQkJCQkgKiBieSB0aGUgcHJvY2Vzc29yCisJCQkJCQkgKi8KKworCQkJcmVzZXJ2ZWQyCTogMTEsCisJCQljYwkJOiAxLAkvKiBDYWNoZSBjaGVjayAqLworCQkJdGMJCTogMSwJLyogVExCIGNoZWNrICovCisJCQliYwkJOiAxLAkvKiBCdXMgY2hlY2sgKi8KKwkJCXJjCQk6IDEsCS8qIFJlZ2lzdGVyIGZpbGUgY2hlY2sgKi8KKwkJCXVjCQk6IDE7CS8qIFVhcmNoIGNoZWNrICovCisKK30gcGFsX3Byb2Nlc3Nvcl9zdGF0ZV9pbmZvX3Q7CisKK3R5cGVkZWYgc3RydWN0IHBhbF9jYWNoZV9jaGVja19pbmZvX3MgeworCXU2NAkJb3AJCTogNCwJLyogVHlwZSBvZiBjYWNoZQorCQkJCQkJICogb3BlcmF0aW9uIHRoYXQKKwkJCQkJCSAqIGNhdXNlZCB0aGUgbWFjaGluZQorCQkJCQkJICogY2hlY2suCisJCQkJCQkgKi8KKwkJCWxldmVsCQk6IDIsCS8qIENhY2hlIGxldmVsICovCisJCQlyZXNlcnZlZDEJOiAyLAorCQkJZGwJCTogMSwJLyogRmFpbHVyZSBpbiBkYXRhIHBhcnQKKwkJCQkJCSAqIG9mIGNhY2hlIGxpbmUKKwkJCQkJCSAqLworCQkJdGwJCTogMSwJLyogRmFpbHVyZSBpbiB0YWcgcGFydAorCQkJCQkJICogb2YgY2FjaGUgbGluZQorCQkJCQkJICovCisJCQlkYwkJOiAxLAkvKiBGYWlsdXJlIGluIGRjYWNoZSAqLworCQkJaWMJCTogMSwJLyogRmFpbHVyZSBpbiBpY2FjaGUgKi8KKwkJCW1lc2kJCTogMywJLyogQ2FjaGUgbGluZSBzdGF0ZSAqLworCQkJbXYJCTogMSwJLyogbWVzaSB2YWxpZCAqLworCQkJd2F5CQk6IDUsCS8qIFdheSBpbiB3aGljaCB0aGUKKwkJCQkJCSAqIGVycm9yIG9jY3VycmVkCisJCQkJCQkgKi8KKwkJCXdpdgkJOiAxLAkvKiBXYXkgZmllbGQgdmFsaWQgKi8KKwkJCXJlc2VydmVkMgk6IDEwLAorCisJCQlpbmRleAkJOiAyMCwJLyogQ2FjaGUgbGluZSBpbmRleCAqLworCQkJcmVzZXJ2ZWQzCTogMiwKKworCQkJaXMJCTogMSwJLyogaW5zdHJ1Y3Rpb24gc2V0ICgxID09IGlhMzIpICovCisJCQlpdgkJOiAxLAkvKiBpbnN0cnVjdGlvbiBzZXQgZmllbGQgdmFsaWQgKi8KKwkJCXBsCQk6IDIsCS8qIHByaXZpbGVnZSBsZXZlbCAqLworCQkJcHYJCTogMSwJLyogcHJpdmlsZWdlIGxldmVsIGZpZWxkIHZhbGlkICovCisJCQltY2MJCTogMSwJLyogTWFjaGluZSBjaGVjayBjb3JyZWN0ZWQgKi8KKwkJCXR2CQk6IDEsCS8qIFRhcmdldCBhZGRyZXNzCisJCQkJCQkgKiBzdHJ1Y3R1cmUgaXMgdmFsaWQKKwkJCQkJCSAqLworCQkJcnEJCTogMSwJLyogUmVxdWVzdGVyIGlkZW50aWZpZXIKKwkJCQkJCSAqIHN0cnVjdHVyZSBpcyB2YWxpZAorCQkJCQkJICovCisJCQlycAkJOiAxLAkvKiBSZXNwb25kZXIgaWRlbnRpZmllcgorCQkJCQkJICogc3RydWN0dXJlIGlzIHZhbGlkCisJCQkJCQkgKi8KKwkJCXBpCQk6IDE7CS8qIFByZWNpc2UgaW5zdHJ1Y3Rpb24gcG9pbnRlcgorCQkJCQkJICogc3RydWN0dXJlIGlzIHZhbGlkCisJCQkJCQkgKi8KK30gcGFsX2NhY2hlX2NoZWNrX2luZm9fdDsKKwordHlwZWRlZiBzdHJ1Y3QgcGFsX3RsYl9jaGVja19pbmZvX3MgeworCisJdTY0CQl0cl9zbG90CQk6IDgsCS8qIFNsb3QjIG9mIFRSIHdoZXJlCisJCQkJCQkgKiBlcnJvciBvY2N1cnJlZAorCQkJCQkJICovCisJCQl0cnYJCTogMSwJLyogdHJfc2xvdCBmaWVsZCBpcyB2YWxpZCAqLworCQkJcmVzZXJ2ZWQxCTogMSwKKwkJCWxldmVsCQk6IDIsCS8qIFRMQiBsZXZlbCB3aGVyZSBmYWlsdXJlIG9jY3VycmVkICovCisJCQlyZXNlcnZlZDIJOiA0LAorCQkJZHRyCQk6IDEsCS8qIEZhaWwgaW4gZGF0YSBUUiAqLworCQkJaXRyCQk6IDEsCS8qIEZhaWwgaW4gaW5zdCBUUiAqLworCQkJZHRjCQk6IDEsCS8qIEZhaWwgaW4gZGF0YSBUQyAqLworCQkJaXRjCQk6IDEsCS8qIEZhaWwgaW4gaW5zdC4gVEMgKi8KKwkJCW9wCQk6IDQsCS8qIENhY2hlIG9wZXJhdGlvbiAqLworCQkJcmVzZXJ2ZWQzCTogMzAsCisKKwkJCWlzCQk6IDEsCS8qIGluc3RydWN0aW9uIHNldCAoMSA9PSBpYTMyKSAqLworCQkJaXYJCTogMSwJLyogaW5zdHJ1Y3Rpb24gc2V0IGZpZWxkIHZhbGlkICovCisJCQlwbAkJOiAyLAkvKiBwcml2aWxlZ2UgbGV2ZWwgKi8KKwkJCXB2CQk6IDEsCS8qIHByaXZpbGVnZSBsZXZlbCBmaWVsZCB2YWxpZCAqLworCQkJbWNjCQk6IDEsCS8qIE1hY2hpbmUgY2hlY2sgY29ycmVjdGVkICovCisJCQl0dgkJOiAxLAkvKiBUYXJnZXQgYWRkcmVzcworCQkJCQkJICogc3RydWN0dXJlIGlzIHZhbGlkCisJCQkJCQkgKi8KKwkJCXJxCQk6IDEsCS8qIFJlcXVlc3RlciBpZGVudGlmaWVyCisJCQkJCQkgKiBzdHJ1Y3R1cmUgaXMgdmFsaWQKKwkJCQkJCSAqLworCQkJcnAJCTogMSwJLyogUmVzcG9uZGVyIGlkZW50aWZpZXIKKwkJCQkJCSAqIHN0cnVjdHVyZSBpcyB2YWxpZAorCQkJCQkJICovCisJCQlwaQkJOiAxOwkvKiBQcmVjaXNlIGluc3RydWN0aW9uIHBvaW50ZXIKKwkJCQkJCSAqIHN0cnVjdHVyZSBpcyB2YWxpZAorCQkJCQkJICovCit9IHBhbF90bGJfY2hlY2tfaW5mb190OworCit0eXBlZGVmIHN0cnVjdCBwYWxfYnVzX2NoZWNrX2luZm9fcyB7CisJdTY0CQlzaXplCQk6IDUsCS8qIFhhY3Rpb24gc2l6ZSAqLworCQkJaWIJCTogMSwJLyogSW50ZXJuYWwgYnVzIGVycm9yICovCisJCQllYgkJOiAxLAkvKiBFeHRlcm5hbCBidXMgZXJyb3IgKi8KKwkJCWNjCQk6IDEsCS8qIEVycm9yIG9jY3VycmVkCisJCQkJCQkgKiBkdXJpbmcgY2FjaGUtY2FjaGUKKwkJCQkJCSAqIHRyYW5zZmVyLgorCQkJCQkJICovCisJCQl0eXBlCQk6IDgsCS8qIEJ1cyB4YWN0aW9uIHR5cGUqLworCQkJc2V2CQk6IDUsCS8qIEJ1cyBlcnJvciBzZXZlcml0eSovCisJCQloaWVyCQk6IDIsCS8qIEJ1cyBoaWVyYXJjaHkgbGV2ZWwgKi8KKwkJCXJlc2VydmVkMQk6IDEsCisJCQlic2kJCTogOCwJLyogQnVzIGVycm9yIHN0YXR1cworCQkJCQkJICogaW5mbworCQkJCQkJICovCisJCQlyZXNlcnZlZDIJOiAyMiwKKworCQkJaXMJCTogMSwJLyogaW5zdHJ1Y3Rpb24gc2V0ICgxID09IGlhMzIpICovCisJCQlpdgkJOiAxLAkvKiBpbnN0cnVjdGlvbiBzZXQgZmllbGQgdmFsaWQgKi8KKwkJCXBsCQk6IDIsCS8qIHByaXZpbGVnZSBsZXZlbCAqLworCQkJcHYJCTogMSwJLyogcHJpdmlsZWdlIGxldmVsIGZpZWxkIHZhbGlkICovCisJCQltY2MJCTogMSwJLyogTWFjaGluZSBjaGVjayBjb3JyZWN0ZWQgKi8KKwkJCXR2CQk6IDEsCS8qIFRhcmdldCBhZGRyZXNzCisJCQkJCQkgKiBzdHJ1Y3R1cmUgaXMgdmFsaWQKKwkJCQkJCSAqLworCQkJcnEJCTogMSwJLyogUmVxdWVzdGVyIGlkZW50aWZpZXIKKwkJCQkJCSAqIHN0cnVjdHVyZSBpcyB2YWxpZAorCQkJCQkJICovCisJCQlycAkJOiAxLAkvKiBSZXNwb25kZXIgaWRlbnRpZmllcgorCQkJCQkJICogc3RydWN0dXJlIGlzIHZhbGlkCisJCQkJCQkgKi8KKwkJCXBpCQk6IDE7CS8qIFByZWNpc2UgaW5zdHJ1Y3Rpb24gcG9pbnRlcgorCQkJCQkJICogc3RydWN0dXJlIGlzIHZhbGlkCisJCQkJCQkgKi8KK30gcGFsX2J1c19jaGVja19pbmZvX3Q7CisKK3R5cGVkZWYgc3RydWN0IHBhbF9yZWdfZmlsZV9jaGVja19pbmZvX3MgeworCXU2NAkJaWQJCTogNCwJLyogUmVnaXN0ZXIgZmlsZSBpZGVudGlmaWVyICovCisJCQlvcAkJOiA0LAkvKiBUeXBlIG9mIHJlZ2lzdGVyCisJCQkJCQkgKiBvcGVyYXRpb24gdGhhdAorCQkJCQkJICogY2F1c2VkIHRoZSBtYWNoaW5lCisJCQkJCQkgKiBjaGVjay4KKwkJCQkJCSAqLworCQkJcmVnX251bQkJOiA3LAkvKiBSZWdpc3RlciBudW1iZXIgKi8KKwkJCXJudgkJOiAxLAkvKiByZWdfbnVtIHZhbGlkICovCisJCQlyZXNlcnZlZDIJOiAzOCwKKworCQkJaXMJCTogMSwJLyogaW5zdHJ1Y3Rpb24gc2V0ICgxID09IGlhMzIpICovCisJCQlpdgkJOiAxLAkvKiBpbnN0cnVjdGlvbiBzZXQgZmllbGQgdmFsaWQgKi8KKwkJCXBsCQk6IDIsCS8qIHByaXZpbGVnZSBsZXZlbCAqLworCQkJcHYJCTogMSwJLyogcHJpdmlsZWdlIGxldmVsIGZpZWxkIHZhbGlkICovCisJCQltY2MJCTogMSwJLyogTWFjaGluZSBjaGVjayBjb3JyZWN0ZWQgKi8KKwkJCXJlc2VydmVkMwk6IDMsCisJCQlwaQkJOiAxOwkvKiBQcmVjaXNlIGluc3RydWN0aW9uIHBvaW50ZXIKKwkJCQkJCSAqIHN0cnVjdHVyZSBpcyB2YWxpZAorCQkJCQkJICovCit9IHBhbF9yZWdfZmlsZV9jaGVja19pbmZvX3Q7CisKK3R5cGVkZWYgc3RydWN0IHBhbF91YXJjaF9jaGVja19pbmZvX3MgeworCXU2NAkJc2lkCQk6IDUsCS8qIFN0cnVjdHVyZSBpZGVudGlmaWNhdGlvbiAqLworCQkJbGV2ZWwJCTogMywJLyogTGV2ZWwgb2YgZmFpbHVyZSAqLworCQkJYXJyYXlfaWQJOiA0LAkvKiBBcnJheSBpZGVudGlmaWNhdGlvbiAqLworCQkJb3AJCTogNCwJLyogVHlwZSBvZgorCQkJCQkJICogb3BlcmF0aW9uIHRoYXQKKwkJCQkJCSAqIGNhdXNlZCB0aGUgbWFjaGluZQorCQkJCQkJICogY2hlY2suCisJCQkJCQkgKi8KKwkJCXdheQkJOiA2LAkvKiBXYXkgb2Ygc3RydWN0dXJlICovCisJCQl3dgkJOiAxLAkvKiB3YXkgdmFsaWQgKi8KKwkJCXh2CQk6IDEsCS8qIGluZGV4IHZhbGlkICovCisJCQlyZXNlcnZlZDEJOiA4LAorCQkJaW5kZXgJCTogOCwJLyogSW5kZXggb3Igc2V0IG9mIHRoZSB1YXJjaAorCQkJCQkJICogc3RydWN0dXJlIHRoYXQgZmFpbGVkLgorCQkJCQkJICovCisJCQlyZXNlcnZlZDIJOiAyNCwKKworCQkJaXMJCTogMSwJLyogaW5zdHJ1Y3Rpb24gc2V0ICgxID09IGlhMzIpICovCisJCQlpdgkJOiAxLAkvKiBpbnN0cnVjdGlvbiBzZXQgZmllbGQgdmFsaWQgKi8KKwkJCXBsCQk6IDIsCS8qIHByaXZpbGVnZSBsZXZlbCAqLworCQkJcHYJCTogMSwJLyogcHJpdmlsZWdlIGxldmVsIGZpZWxkIHZhbGlkICovCisJCQltY2MJCTogMSwJLyogTWFjaGluZSBjaGVjayBjb3JyZWN0ZWQgKi8KKwkJCXR2CQk6IDEsCS8qIFRhcmdldCBhZGRyZXNzCisJCQkJCQkgKiBzdHJ1Y3R1cmUgaXMgdmFsaWQKKwkJCQkJCSAqLworCQkJcnEJCTogMSwJLyogUmVxdWVzdGVyIGlkZW50aWZpZXIKKwkJCQkJCSAqIHN0cnVjdHVyZSBpcyB2YWxpZAorCQkJCQkJICovCisJCQlycAkJOiAxLAkvKiBSZXNwb25kZXIgaWRlbnRpZmllcgorCQkJCQkJICogc3RydWN0dXJlIGlzIHZhbGlkCisJCQkJCQkgKi8KKwkJCXBpCQk6IDE7CS8qIFByZWNpc2UgaW5zdHJ1Y3Rpb24gcG9pbnRlcgorCQkJCQkJICogc3RydWN0dXJlIGlzIHZhbGlkCisJCQkJCQkgKi8KK30gcGFsX3VhcmNoX2NoZWNrX2luZm9fdDsKKwordHlwZWRlZiB1bmlvbiBwYWxfbWNfZXJyb3JfaW5mb191IHsKKwl1NjQJCQkJcG1laV9kYXRhOworCXBhbF9wcm9jZXNzb3Jfc3RhdGVfaW5mb190CXBtZV9wcm9jZXNzb3I7CisJcGFsX2NhY2hlX2NoZWNrX2luZm9fdAkJcG1lX2NhY2hlOworCXBhbF90bGJfY2hlY2tfaW5mb190CQlwbWVfdGxiOworCXBhbF9idXNfY2hlY2tfaW5mb190CQlwbWVfYnVzOworCXBhbF9yZWdfZmlsZV9jaGVja19pbmZvX3QJcG1lX3JlZ19maWxlOworCXBhbF91YXJjaF9jaGVja19pbmZvX3QJCXBtZV91YXJjaDsKK30gcGFsX21jX2Vycm9yX2luZm9fdDsKKworI2RlZmluZSBwbWNpX3Byb2NfdW5rbm93bl9jaGVjawkJCXBtZV9wcm9jZXNzb3IudWMKKyNkZWZpbmUgcG1jaV9wcm9jX2J1c19jaGVjawkJCXBtZV9wcm9jZXNzb3IuYmMKKyNkZWZpbmUgcG1jaV9wcm9jX3RsYl9jaGVjawkJCXBtZV9wcm9jZXNzb3IudGMKKyNkZWZpbmUgcG1jaV9wcm9jX2NhY2hlX2NoZWNrCQkJcG1lX3Byb2Nlc3Nvci5jYworI2RlZmluZSBwbWNpX3Byb2NfZHluYW1pY19zdGF0ZV9zaXplCQlwbWVfcHJvY2Vzc29yLmRzaXplCisjZGVmaW5lIHBtY2lfcHJvY19ncHJfdmFsaWQJCQlwbWVfcHJvY2Vzc29yLmdyCisjZGVmaW5lIHBtY2lfcHJvY19wcmVzZXJ2ZWRfYmFuazBfZ3ByX3ZhbGlkCXBtZV9wcm9jZXNzb3IuYjAKKyNkZWZpbmUgcG1jaV9wcm9jX3ByZXNlcnZlZF9iYW5rMV9ncHJfdmFsaWQJcG1lX3Byb2Nlc3Nvci5iMQorI2RlZmluZSBwbWNpX3Byb2NfZnBfdmFsaWQJCQlwbWVfcHJvY2Vzc29yLmZwCisjZGVmaW5lIHBtY2lfcHJvY19wcmVkaWNhdGVfcmVnc192YWxpZAkJcG1lX3Byb2Nlc3Nvci5wcgorI2RlZmluZSBwbWNpX3Byb2NfYnJhbmNoX3JlZ3NfdmFsaWQJCXBtZV9wcm9jZXNzb3IuYnIKKyNkZWZpbmUgcG1jaV9wcm9jX2FwcF9yZWdzX3ZhbGlkCQlwbWVfcHJvY2Vzc29yLmFyCisjZGVmaW5lIHBtY2lfcHJvY19yZWdpb25fcmVnc192YWxpZAkJcG1lX3Byb2Nlc3Nvci5ycgorI2RlZmluZSBwbWNpX3Byb2NfdHJhbnNsYXRpb25fcmVnc192YWxpZAlwbWVfcHJvY2Vzc29yLnRyCisjZGVmaW5lIHBtY2lfcHJvY19kZWJ1Z19yZWdzX3ZhbGlkCQlwbWVfcHJvY2Vzc29yLmRyCisjZGVmaW5lIHBtY2lfcHJvY19wZXJmX2NvdW50ZXJzX3ZhbGlkCQlwbWVfcHJvY2Vzc29yLnBjCisjZGVmaW5lIHBtY2lfcHJvY19jb250cm9sX3JlZ3NfdmFsaWQJCXBtZV9wcm9jZXNzb3IuY3IKKyNkZWZpbmUgcG1jaV9wcm9jX21hY2hpbmVfY2hlY2tfZXhwZWN0ZWQJcG1lX3Byb2Nlc3Nvci5leAorI2RlZmluZSBwbWNpX3Byb2NfbWFjaGluZV9jaGVja19jb3JyZWN0ZWQJcG1lX3Byb2Nlc3Nvci5jbQorI2RlZmluZSBwbWNpX3Byb2NfcnNlX3ZhbGlkCQkJcG1lX3Byb2Nlc3Nvci5ycworI2RlZmluZSBwbWNpX3Byb2NfbWFjaGluZV9jaGVja19vcl9pbml0CQlwbWVfcHJvY2Vzc29yLmluCisjZGVmaW5lIHBtY2lfcHJvY19keW5hbWljX3N0YXRlX3ZhbGlkCQlwbWVfcHJvY2Vzc29yLmR5CisjZGVmaW5lIHBtY2lfcHJvY19vcGVyYXRpb24JCQlwbWVfcHJvY2Vzc29yLm9wCisjZGVmaW5lIHBtY2lfcHJvY190cmFwX2xvc3QJCQlwbWVfcHJvY2Vzc29yLnRsCisjZGVmaW5lIHBtY2lfcHJvY19oYXJkd2FyZV9kYW1hZ2UJCXBtZV9wcm9jZXNzb3IuaGQKKyNkZWZpbmUgcG1jaV9wcm9jX3VuY29udGFpbmVkX3N0b3JhZ2VfZGFtYWdlCXBtZV9wcm9jZXNzb3IudXMKKyNkZWZpbmUgcG1jaV9wcm9jX21hY2hpbmVfY2hlY2tfaXNvbGF0ZWQJcG1lX3Byb2Nlc3Nvci5jaQorI2RlZmluZSBwbWNpX3Byb2NfY29udGludWFibGUJCQlwbWVfcHJvY2Vzc29yLmNvCisjZGVmaW5lIHBtY2lfcHJvY19zdG9yYWdlX2ludGVyZ3JpdHlfc3luY2VkCXBtZV9wcm9jZXNzb3Iuc3kKKyNkZWZpbmUgcG1jaV9wcm9jX21pbl9zdGF0ZV9zYXZlX2FyZWFfcmVnZAlwbWVfcHJvY2Vzc29yLm1uCisjZGVmaW5lCXBtY2lfcHJvY19kaXN0aW5jdF9tdWx0aXBsZV9lcnJvcnMJcG1lX3Byb2Nlc3Nvci5tZQorI2RlZmluZSBwbWNpX3Byb2NfcGFsX2F0dGVtcHRlZF9yZW5kZXp2b3VzCXBtZV9wcm9jZXNzb3IucmEKKyNkZWZpbmUgcG1jaV9wcm9jX3BhbF9yZW5kZXp2b3VzX2NvbXBsZXRlCXBtZV9wcm9jZXNzb3IucnoKKworCisjZGVmaW5lIHBtY2lfY2FjaGVfbGV2ZWwJCQlwbWVfY2FjaGUubGV2ZWwKKyNkZWZpbmUgcG1jaV9jYWNoZV9saW5lX3N0YXRlCQkJcG1lX2NhY2hlLm1lc2kKKyNkZWZpbmUgcG1jaV9jYWNoZV9saW5lX3N0YXRlX3ZhbGlkCQlwbWVfY2FjaGUubXYKKyNkZWZpbmUgcG1jaV9jYWNoZV9saW5lX2luZGV4CQkJcG1lX2NhY2hlLmluZGV4CisjZGVmaW5lIHBtY2lfY2FjaGVfaW5zdHJfY2FjaGVfZmFpbAkJcG1lX2NhY2hlLmljCisjZGVmaW5lIHBtY2lfY2FjaGVfZGF0YV9jYWNoZV9mYWlsCQlwbWVfY2FjaGUuZGMKKyNkZWZpbmUgcG1jaV9jYWNoZV9saW5lX3RhZ19mYWlsCQlwbWVfY2FjaGUudGwKKyNkZWZpbmUgcG1jaV9jYWNoZV9saW5lX2RhdGFfZmFpbAkJcG1lX2NhY2hlLmRsCisjZGVmaW5lIHBtY2lfY2FjaGVfb3BlcmF0aW9uCQkJcG1lX2NhY2hlLm9wCisjZGVmaW5lIHBtY2lfY2FjaGVfd2F5X3ZhbGlkCQkJcG1lX2NhY2hlLnd2CisjZGVmaW5lIHBtY2lfY2FjaGVfdGFyZ2V0X2FkZHJlc3NfdmFsaWQJCXBtZV9jYWNoZS50dgorI2RlZmluZSBwbWNpX2NhY2hlX3dheQkJCQlwbWVfY2FjaGUud2F5CisjZGVmaW5lIHBtY2lfY2FjaGVfbWMJCQkJcG1lX2NhY2hlLm1jCisKKyNkZWZpbmUgcG1jaV90bGJfaW5zdHJfdHJhbnNsYXRpb25fY2FjaGVfZmFpbAlwbWVfdGxiLml0YworI2RlZmluZSBwbWNpX3RsYl9kYXRhX3RyYW5zbGF0aW9uX2NhY2hlX2ZhaWwJcG1lX3RsYi5kdGMKKyNkZWZpbmUgcG1jaV90bGJfaW5zdHJfdHJhbnNsYXRpb25fcmVnX2ZhaWwJcG1lX3RsYi5pdHIKKyNkZWZpbmUgcG1jaV90bGJfZGF0YV90cmFuc2xhdGlvbl9yZWdfZmFpbAlwbWVfdGxiLmR0cgorI2RlZmluZSBwbWNpX3RsYl90cmFuc2xhdGlvbl9yZWdfc2xvdAkJcG1lX3RsYi50cl9zbG90CisjZGVmaW5lIHBtY2lfdGxiX21jCQkJCXBtZV90bGIubWMKKworI2RlZmluZSBwbWNpX2J1c19zdGF0dXNfaW5mbwkJCXBtZV9idXMuYnNpCisjZGVmaW5lIHBtY2lfYnVzX3JlcV9hZGRyZXNzX3ZhbGlkCQlwbWVfYnVzLnJxCisjZGVmaW5lIHBtY2lfYnVzX3Jlc3BfYWRkcmVzc192YWxpZAkJcG1lX2J1cy5ycAorI2RlZmluZSBwbWNpX2J1c190YXJnZXRfYWRkcmVzc192YWxpZAkJcG1lX2J1cy50dgorI2RlZmluZSBwbWNpX2J1c19lcnJvcl9zZXZlcml0eQkJCXBtZV9idXMuc2V2CisjZGVmaW5lIHBtY2lfYnVzX3RyYW5zYWN0aW9uX3R5cGUJCXBtZV9idXMudHlwZQorI2RlZmluZSBwbWNpX2J1c19jYWNoZV9jYWNoZV90cmFuc2ZlcgkJcG1lX2J1cy5jYworI2RlZmluZSBwbWNpX2J1c190cmFuc2FjdGlvbl9zaXplCQlwbWVfYnVzLnNpemUKKyNkZWZpbmUgcG1jaV9idXNfaW50ZXJuYWxfZXJyb3IJCQlwbWVfYnVzLmliCisjZGVmaW5lIHBtY2lfYnVzX2V4dGVybmFsX2Vycm9yCQkJcG1lX2J1cy5lYgorI2RlZmluZSBwbWNpX2J1c19tYwkJCQlwbWVfYnVzLm1jCisKKy8qCisgKiBOT1RFOiB0aGlzIG1pbl9zdGF0ZV9zYXZlIGFyZWEgc3RydWN0IG9ubHkgaW5jbHVkZXMgdGhlIDFLQgorICogYXJjaGl0ZWN0dXJhbCBzdGF0ZSBzYXZlIGFyZWEuICBUaGUgb3RoZXIgMyBLQiBpcyBzY3JhdGNoIHNwYWNlCisgKiBmb3IgUEFMLgorICovCisKK3R5cGVkZWYgc3RydWN0IHBhbF9taW5fc3RhdGVfYXJlYV9zIHsKKwl1NjQJcG1zYV9uYXRfYml0czsJCS8qIG5hdCBiaXRzIGZvciBzYXZlZCBHUnMgICovCisJdTY0CXBtc2FfZ3JbMTVdOwkJLyogR1IxCS0gR1IxNQkJICAgKi8KKwl1NjQJcG1zYV9iYW5rMF9nclsxNl07CS8qIEdSMTYgLSBHUjMxCQkgICAqLworCXU2NAlwbXNhX2JhbmsxX2dyWzE2XTsJLyogR1IxNiAtIEdSMzEJCSAgICovCisJdTY0CXBtc2FfcHI7CQkvKiBwcmVkaWNhdGUgcmVnaXN0ZXJzCSAgICovCisJdTY0CXBtc2FfYnIwOwkJLyogYnJhbmNoIHJlZ2lzdGVyIDAJICAgKi8KKwl1NjQJcG1zYV9yc2M7CQkvKiBhci5yc2MJCSAgICovCisJdTY0CXBtc2FfaWlwOwkJLyogY3IuaWlwCQkgICAqLworCXU2NAlwbXNhX2lwc3I7CQkvKiBjci5pcHNyCQkgICAqLworCXU2NAlwbXNhX2lmczsJCS8qIGNyLmlmcwkJICAgKi8KKwl1NjQJcG1zYV94aXA7CQkvKiBwcmV2aW91cyBpaXAJCSAgICovCisJdTY0CXBtc2FfeHBzcjsJCS8qIHByZXZpb3VzIHBzcgkJICAgKi8KKwl1NjQJcG1zYV94ZnM7CQkvKiBwcmV2aW91cyBpZnMJCSAgICovCisJdTY0CXBtc2FfYnIxOwkJLyogYnJhbmNoIHJlZ2lzdGVyIDEJICAgKi8KKwl1NjQJcG1zYV9yZXNlcnZlZFs3MF07CS8qIHBhbF9taW5fc3RhdGVfYXJlYSBzaG91bGQgdG90YWwgdG8gMUtCICovCit9IHBhbF9taW5fc3RhdGVfYXJlYV90OworCisKK3N0cnVjdCBpYTY0X3BhbF9yZXR2YWwgeworCS8qCisJICogQSB6ZXJvIHN0YXR1cyB2YWx1ZSBpbmRpY2F0ZXMgY2FsbCBjb21wbGV0ZWQgd2l0aG91dCBlcnJvci4KKwkgKiBBIG5lZ2F0aXZlIHN0YXR1cyB2YWx1ZSBpbmRpY2F0ZXMgcmVhc29uIG9mIGNhbGwgZmFpbHVyZS4KKwkgKiBBIHBvc2l0aXZlIHN0YXR1cyB2YWx1ZSBpbmRpY2F0ZXMgc3VjY2VzcyBidXQgYW4KKwkgKiBpbmZvcm1hdGlvbmFsIHZhbHVlIHNob3VsZCBiZSBwcmludGVkIChlLmcuLCAicmVib290IGZvcgorCSAqIGNoYW5nZSB0byB0YWtlIGVmZmVjdCIpLgorCSAqLworCXM2NCBzdGF0dXM7CisJdTY0IHYwOworCXU2NCB2MTsKKwl1NjQgdjI7Cit9OworCisvKgorICogTm90ZTogQ3VycmVudGx5IHVudXNlZCBQQUwgYXJndW1lbnRzIGFyZSBnZW5lcmFsbHkgbGFiZWxlZAorICogInJlc2VydmVkIiBzbyB0aGUgdmFsdWUgc3BlY2lmaWVkIGluIHRoZSBQQUwgZG9jdW1lbnRhdGlvbgorICogKGdlbmVyYWxseSAwKSBNVVNUIGJlIHBhc3NlZC4gIFJlc2VydmVkIHBhcmFtZXRlcnMgYXJlIG5vdCBvcHRpb25hbAorICogcGFyYW1ldGVycy4KKyAqLworZXh0ZXJuIHN0cnVjdCBpYTY0X3BhbF9yZXR2YWwgaWE2NF9wYWxfY2FsbF9zdGF0aWMgKHU2NCwgdTY0LCB1NjQsIHU2NCwgdTY0KTsKK2V4dGVybiBzdHJ1Y3QgaWE2NF9wYWxfcmV0dmFsIGlhNjRfcGFsX2NhbGxfc3RhY2tlZCAodTY0LCB1NjQsIHU2NCwgdTY0KTsKK2V4dGVybiBzdHJ1Y3QgaWE2NF9wYWxfcmV0dmFsIGlhNjRfcGFsX2NhbGxfcGh5c19zdGF0aWMgKHU2NCwgdTY0LCB1NjQsIHU2NCk7CitleHRlcm4gc3RydWN0IGlhNjRfcGFsX3JldHZhbCBpYTY0X3BhbF9jYWxsX3BoeXNfc3RhY2tlZCAodTY0LCB1NjQsIHU2NCwgdTY0KTsKK2V4dGVybiB2b2lkIGlhNjRfc2F2ZV9zY3JhdGNoX2ZwcmVncyAoc3RydWN0IGlhNjRfZnByZWcgKik7CitleHRlcm4gdm9pZCBpYTY0X2xvYWRfc2NyYXRjaF9mcHJlZ3MgKHN0cnVjdCBpYTY0X2ZwcmVnICopOworCisjZGVmaW5lIFBBTF9DQUxMKGlwcnYsYTAsYTEsYTIsYTMpIGRvIHsJCQlcCisJc3RydWN0IGlhNjRfZnByZWcgZnJbNl07CQkJXAorCWlhNjRfc2F2ZV9zY3JhdGNoX2ZwcmVncyhmcik7CQkJXAorCWlwcnYgPSBpYTY0X3BhbF9jYWxsX3N0YXRpYyhhMCwgYTEsIGEyLCBhMywgMCk7CVwKKwlpYTY0X2xvYWRfc2NyYXRjaF9mcHJlZ3MoZnIpOwkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgUEFMX0NBTExfSUNfT0ZGKGlwcnYsYTAsYTEsYTIsYTMpIGRvIHsJCVwKKwlzdHJ1Y3QgaWE2NF9mcHJlZyBmcls2XTsJCQlcCisJaWE2NF9zYXZlX3NjcmF0Y2hfZnByZWdzKGZyKTsJCQlcCisJaXBydiA9IGlhNjRfcGFsX2NhbGxfc3RhdGljKGEwLCBhMSwgYTIsIGEzLCAxKTsJXAorCWlhNjRfbG9hZF9zY3JhdGNoX2ZwcmVncyhmcik7CQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBQQUxfQ0FMTF9TVEsoaXBydixhMCxhMSxhMixhMykgZG8gewkJXAorCXN0cnVjdCBpYTY0X2ZwcmVnIGZyWzZdOwkJCVwKKwlpYTY0X3NhdmVfc2NyYXRjaF9mcHJlZ3MoZnIpOwkJCVwKKwlpcHJ2ID0gaWE2NF9wYWxfY2FsbF9zdGFja2VkKGEwLCBhMSwgYTIsIGEzKTsJXAorCWlhNjRfbG9hZF9zY3JhdGNoX2ZwcmVncyhmcik7CQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBQQUxfQ0FMTF9QSFlTKGlwcnYsYTAsYTEsYTIsYTMpIGRvIHsJCQlcCisJc3RydWN0IGlhNjRfZnByZWcgZnJbNl07CQkJCVwKKwlpYTY0X3NhdmVfc2NyYXRjaF9mcHJlZ3MoZnIpOwkJCQlcCisJaXBydiA9IGlhNjRfcGFsX2NhbGxfcGh5c19zdGF0aWMoYTAsIGExLCBhMiwgYTMpOwlcCisJaWE2NF9sb2FkX3NjcmF0Y2hfZnByZWdzKGZyKTsJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBQQUxfQ0FMTF9QSFlTX1NUSyhpcHJ2LGEwLGExLGEyLGEzKSBkbyB7CQlcCisJc3RydWN0IGlhNjRfZnByZWcgZnJbNl07CQkJCVwKKwlpYTY0X3NhdmVfc2NyYXRjaF9mcHJlZ3MoZnIpOwkJCQlcCisJaXBydiA9IGlhNjRfcGFsX2NhbGxfcGh5c19zdGFja2VkKGEwLCBhMSwgYTIsIGEzKTsJXAorCWlhNjRfbG9hZF9zY3JhdGNoX2ZwcmVncyhmcik7CQkJCVwKK30gd2hpbGUgKDApCisKK3R5cGVkZWYgaW50ICgqaWE2NF9wYWxfaGFuZGxlcikgKHU2NCwgLi4uKTsKK2V4dGVybiBpYTY0X3BhbF9oYW5kbGVyIGlhNjRfcGFsOworZXh0ZXJuIHZvaWQgaWE2NF9wYWxfaGFuZGxlcl9pbml0ICh2b2lkICopOworCitleHRlcm4gaWE2NF9wYWxfaGFuZGxlciBpYTY0X3BhbDsKKworZXh0ZXJuIHBhbF9jYWNoZV9jb25maWdfaW5mb190CQlsMGRfY2FjaGVfY29uZmlnX2luZm87CitleHRlcm4gcGFsX2NhY2hlX2NvbmZpZ19pbmZvX3QJCWwwaV9jYWNoZV9jb25maWdfaW5mbzsKK2V4dGVybiBwYWxfY2FjaGVfY29uZmlnX2luZm9fdAkJbDFfY2FjaGVfY29uZmlnX2luZm87CitleHRlcm4gcGFsX2NhY2hlX2NvbmZpZ19pbmZvX3QJCWwyX2NhY2hlX2NvbmZpZ19pbmZvOworCitleHRlcm4gcGFsX2NhY2hlX3Byb3RlY3Rpb25faW5mb190CWwwZF9jYWNoZV9wcm90ZWN0aW9uX2luZm87CitleHRlcm4gcGFsX2NhY2hlX3Byb3RlY3Rpb25faW5mb190CWwwaV9jYWNoZV9wcm90ZWN0aW9uX2luZm87CitleHRlcm4gcGFsX2NhY2hlX3Byb3RlY3Rpb25faW5mb190CWwxX2NhY2hlX3Byb3RlY3Rpb25faW5mbzsKK2V4dGVybiBwYWxfY2FjaGVfcHJvdGVjdGlvbl9pbmZvX3QJbDJfY2FjaGVfcHJvdGVjdGlvbl9pbmZvOworCitleHRlcm4gcGFsX2NhY2hlX2NvbmZpZ19pbmZvX3QJCXBhbF9jYWNoZV9jb25maWdfaW5mb19nZXQocGFsX2NhY2hlX2xldmVsX3QsCisJCQkJCQkJCSAgcGFsX2NhY2hlX3R5cGVfdCk7CisKK2V4dGVybiBwYWxfY2FjaGVfcHJvdGVjdGlvbl9pbmZvX3QJcGFsX2NhY2hlX3Byb3RlY3Rpb25faW5mb19nZXQocGFsX2NhY2hlX2xldmVsX3QsCisJCQkJCQkJCSAgICAgIHBhbF9jYWNoZV90eXBlX3QpOworCisKK2V4dGVybiB2b2lkCQkJCXBhbF9lcnJvcihpbnQpOworCisKKy8qIFVzZWZ1bCB3cmFwcGVycyBmb3IgdGhlIGN1cnJlbnQgbGlzdCBvZiBwYWwgcHJvY2VkdXJlcyAqLworCit0eXBlZGVmIHVuaW9uIHBhbF9idXNfZmVhdHVyZXNfdSB7CisJdTY0CXBhbF9idXNfZmVhdHVyZXNfdmFsOworCXN0cnVjdCB7CisJCXU2NAlwYmZfcmVzZXJ2ZWQxCQkJCToJMjk7CisJCXU2NAlwYmZfcmVxX2J1c19wYXJraW5nCQkJOgkxOworCQl1NjQJcGJmX2J1c19sb2NrX21hc2sJCQk6CTE7CisJCXU2NAlwYmZfZW5hYmxlX2hhbGZfeGZlcl9yYXRlCQk6CTE7CisJCXU2NAlwYmZfcmVzZXJ2ZWQyCQkJCToJMjI7CisJCXU2NAlwYmZfZGlzYWJsZV94YWN0aW9uX3F1ZXVlaW5nCQk6CTE7CisJCXU2NAlwYmZfZGlzYWJsZV9yZXNwX2Vycl9jaGVjawkJOgkxOworCQl1NjQJcGJmX2Rpc2FibGVfYmVycl9jaGVjawkJCToJMTsKKwkJdTY0CXBiZl9kaXNhYmxlX2J1c19yZXFfaW50ZXJuYWxfZXJyX3NpZ25hbAk6CTE7CisJCXU2NAlwYmZfZGlzYWJsZV9idXNfcmVxX2JlcnJfc2lnbmFsCQk6CTE7CisJCXU2NAlwYmZfZGlzYWJsZV9idXNfaW5pdF9ldmVudF9jaGVjawk6CTE7CisJCXU2NAlwYmZfZGlzYWJsZV9idXNfaW5pdF9ldmVudF9zaWduYWwJOgkxOworCQl1NjQJcGJmX2Rpc2FibGVfYnVzX2FkZHJfZXJyX2NoZWNrCQk6CTE7CisJCXU2NAlwYmZfZGlzYWJsZV9idXNfYWRkcl9lcnJfc2lnbmFsCQk6CTE7CisJCXU2NAlwYmZfZGlzYWJsZV9idXNfZGF0YV9lcnJfY2hlY2sJCToJMTsKKwl9IHBhbF9idXNfZmVhdHVyZXNfczsKK30gcGFsX2J1c19mZWF0dXJlc191X3Q7CisKK2V4dGVybiB2b2lkIHBhbF9idXNfZmVhdHVyZXNfcHJpbnQgKHU2NCk7CisKKy8qIFByb3ZpZGUgaW5mb3JtYXRpb24gYWJvdXQgY29uZmlndXJhYmxlIHByb2Nlc3NvciBidXMgZmVhdHVyZXMgKi8KK3N0YXRpYyBpbmxpbmUgczY0CitpYTY0X3BhbF9idXNfZ2V0X2ZlYXR1cmVzIChwYWxfYnVzX2ZlYXR1cmVzX3VfdCAqZmVhdHVyZXNfYXZhaWwsCisJCQkgICBwYWxfYnVzX2ZlYXR1cmVzX3VfdCAqZmVhdHVyZXNfc3RhdHVzLAorCQkJICAgcGFsX2J1c19mZWF0dXJlc191X3QgKmZlYXR1cmVzX2NvbnRyb2wpCit7CisJc3RydWN0IGlhNjRfcGFsX3JldHZhbCBpcHJ2OworCVBBTF9DQUxMX1BIWVMoaXBydiwgUEFMX0JVU19HRVRfRkVBVFVSRVMsIDAsIDAsIDApOworCWlmIChmZWF0dXJlc19hdmFpbCkKKwkJZmVhdHVyZXNfYXZhaWwtPnBhbF9idXNfZmVhdHVyZXNfdmFsID0gaXBydi52MDsKKwlpZiAoZmVhdHVyZXNfc3RhdHVzKQorCQlmZWF0dXJlc19zdGF0dXMtPnBhbF9idXNfZmVhdHVyZXNfdmFsID0gaXBydi52MTsKKwlpZiAoZmVhdHVyZXNfY29udHJvbCkKKwkJZmVhdHVyZXNfY29udHJvbC0+cGFsX2J1c19mZWF0dXJlc192YWwgPSBpcHJ2LnYyOworCXJldHVybiBpcHJ2LnN0YXR1czsKK30KKworLyogRW5hYmxlcy9kaXNhYmxlcyBzcGVjaWZpYyBwcm9jZXNzb3IgYnVzIGZlYXR1cmVzICovCitzdGF0aWMgaW5saW5lIHM2NAoraWE2NF9wYWxfYnVzX3NldF9mZWF0dXJlcyAocGFsX2J1c19mZWF0dXJlc191X3QgZmVhdHVyZV9zZWxlY3QpCit7CisJc3RydWN0IGlhNjRfcGFsX3JldHZhbCBpcHJ2OworCVBBTF9DQUxMX1BIWVMoaXBydiwgUEFMX0JVU19TRVRfRkVBVFVSRVMsIGZlYXR1cmVfc2VsZWN0LnBhbF9idXNfZmVhdHVyZXNfdmFsLCAwLCAwKTsKKwlyZXR1cm4gaXBydi5zdGF0dXM7Cit9CisKKy8qIEdldCBkZXRhaWxlZCBjYWNoZSBpbmZvcm1hdGlvbiAqLworc3RhdGljIGlubGluZSBzNjQKK2lhNjRfcGFsX2NhY2hlX2NvbmZpZ19pbmZvICh1NjQgY2FjaGVfbGV2ZWwsIHU2NCBjYWNoZV90eXBlLCBwYWxfY2FjaGVfY29uZmlnX2luZm9fdCAqY29uZikKK3sKKwlzdHJ1Y3QgaWE2NF9wYWxfcmV0dmFsIGlwcnY7CisKKwlQQUxfQ0FMTChpcHJ2LCBQQUxfQ0FDSEVfSU5GTywgY2FjaGVfbGV2ZWwsIGNhY2hlX3R5cGUsIDApOworCisJaWYgKGlwcnYuc3RhdHVzID09IDApIHsKKwkJY29uZi0+cGNjaV9zdGF0dXMgICAgICAgICAgICAgICAgID0gaXBydi5zdGF0dXM7CisJCWNvbmYtPnBjY2lfaW5mb18xLnBjY2kxX2RhdGEgICAgICA9IGlwcnYudjA7CisJCWNvbmYtPnBjY2lfaW5mb18yLnBjY2kyX2RhdGEgICAgICA9IGlwcnYudjE7CisJCWNvbmYtPnBjY2lfcmVzZXJ2ZWQgICAgICAgICAgICAgICA9IGlwcnYudjI7CisJfQorCXJldHVybiBpcHJ2LnN0YXR1czsKKworfQorCisvKiBHZXQgZGV0YWlsZWQgY2NoZSBwcm90ZWN0aW9uIGluZm9ybWF0aW9uICovCitzdGF0aWMgaW5saW5lIHM2NAoraWE2NF9wYWxfY2FjaGVfcHJvdF9pbmZvICh1NjQgY2FjaGVfbGV2ZWwsIHU2NCBjYWNoZV90eXBlLCBwYWxfY2FjaGVfcHJvdGVjdGlvbl9pbmZvX3QgKnByb3QpCit7CisJc3RydWN0IGlhNjRfcGFsX3JldHZhbCBpcHJ2OworCisJUEFMX0NBTEwoaXBydiwgUEFMX0NBQ0hFX1BST1RfSU5GTywgY2FjaGVfbGV2ZWwsIGNhY2hlX3R5cGUsIDApOworCisJaWYgKGlwcnYuc3RhdHVzID09IDApIHsKKwkJcHJvdC0+cGNwaV9zdGF0dXMgICAgICAgICAgID0gaXBydi5zdGF0dXM7CisJCXByb3QtPnBjcF9pbmZvWzBdLnBjcGlfZGF0YSA9IGlwcnYudjAgJiAweGZmZmZmZmZmOworCQlwcm90LT5wY3BfaW5mb1sxXS5wY3BpX2RhdGEgPSBpcHJ2LnYwID4+IDMyOworCQlwcm90LT5wY3BfaW5mb1syXS5wY3BpX2RhdGEgPSBpcHJ2LnYxICYgMHhmZmZmZmZmZjsKKwkJcHJvdC0+cGNwX2luZm9bM10ucGNwaV9kYXRhID0gaXBydi52MSA+PiAzMjsKKwkJcHJvdC0+cGNwX2luZm9bNF0ucGNwaV9kYXRhID0gaXBydi52MiAmIDB4ZmZmZmZmZmY7CisJCXByb3QtPnBjcF9pbmZvWzVdLnBjcGlfZGF0YSA9IGlwcnYudjIgPj4gMzI7CisJfQorCXJldHVybiBpcHJ2LnN0YXR1czsKK30KKworLyoKKyAqIEZsdXNoIHRoZSBwcm9jZXNzb3IgaW5zdHJ1Y3Rpb24gb3IgZGF0YSBjYWNoZXMuICAqUFJPR1JFU1MgbXVzdCBiZQorICogaW5pdGlhbGl6ZWQgdG8gemVybyBiZWZvcmUgY2FsbGluZyB0aGlzIGZvciB0aGUgZmlyc3QgdGltZS4uCisgKi8KK3N0YXRpYyBpbmxpbmUgczY0CitpYTY0X3BhbF9jYWNoZV9mbHVzaCAodTY0IGNhY2hlX3R5cGUsIHU2NCBpbnZhbGlkYXRlLCB1NjQgKnByb2dyZXNzLCB1NjQgKnZlY3RvcikKK3sKKwlzdHJ1Y3QgaWE2NF9wYWxfcmV0dmFsIGlwcnY7CisJUEFMX0NBTExfSUNfT0ZGKGlwcnYsIFBBTF9DQUNIRV9GTFVTSCwgY2FjaGVfdHlwZSwgaW52YWxpZGF0ZSwgKnByb2dyZXNzKTsKKwlpZiAodmVjdG9yKQorCQkqdmVjdG9yID0gaXBydi52MDsKKwkqcHJvZ3Jlc3MgPSBpcHJ2LnYxOworCXJldHVybiBpcHJ2LnN0YXR1czsKK30KKworCisvKiBJbml0aWFsaXplIHRoZSBwcm9jZXNzb3IgY29udHJvbGxlZCBjYWNoZXMgKi8KK3N0YXRpYyBpbmxpbmUgczY0CitpYTY0X3BhbF9jYWNoZV9pbml0ICh1NjQgbGV2ZWwsIHU2NCBjYWNoZV90eXBlLCB1NjQgcmVzdCkKK3sKKwlzdHJ1Y3QgaWE2NF9wYWxfcmV0dmFsIGlwcnY7CisJUEFMX0NBTEwoaXBydiwgUEFMX0NBQ0hFX0lOSVQsIGxldmVsLCBjYWNoZV90eXBlLCByZXN0KTsKKwlyZXR1cm4gaXBydi5zdGF0dXM7Cit9CisKKy8qIEluaXRpYWxpemUgdGhlIHRhZ3MgYW5kIGRhdGEgb2YgYSBkYXRhIG9yIHVuaWZpZWQgY2FjaGUgbGluZSBvZgorICogcHJvY2Vzc29yIGNvbnRyb2xsZWQgY2FjaGUgdG8ga25vd24gdmFsdWVzIHdpdGhvdXQgdGhlIGF2YWlsYWJpbGl0eQorICogb2YgYmFja2luZyBtZW1vcnkuCisgKi8KK3N0YXRpYyBpbmxpbmUgczY0CitpYTY0X3BhbF9jYWNoZV9saW5lX2luaXQgKHU2NCBwaHlzaWNhbF9hZGRyLCB1NjQgZGF0YV92YWx1ZSkKK3sKKwlzdHJ1Y3QgaWE2NF9wYWxfcmV0dmFsIGlwcnY7CisJUEFMX0NBTEwoaXBydiwgUEFMX0NBQ0hFX0xJTkVfSU5JVCwgcGh5c2ljYWxfYWRkciwgZGF0YV92YWx1ZSwgMCk7CisJcmV0dXJuIGlwcnYuc3RhdHVzOworfQorCisKKy8qIFJlYWQgdGhlIGRhdGEgYW5kIHRhZyBvZiBhIHByb2Nlc3NvciBjb250cm9sbGVkIGNhY2hlIGxpbmUgZm9yIGRpYWdzICovCitzdGF0aWMgaW5saW5lIHM2NAoraWE2NF9wYWxfY2FjaGVfcmVhZCAocGFsX2NhY2hlX2xpbmVfaWRfdV90IGxpbmVfaWQsIHU2NCBwaHlzaWNhbF9hZGRyKQoreworCXN0cnVjdCBpYTY0X3BhbF9yZXR2YWwgaXBydjsKKwlQQUxfQ0FMTChpcHJ2LCBQQUxfQ0FDSEVfUkVBRCwgbGluZV9pZC5wY2xpZF9kYXRhLCBwaHlzaWNhbF9hZGRyLCAwKTsKKwlyZXR1cm4gaXBydi5zdGF0dXM7Cit9CisKKy8qIFJldHVybiBzdW1tYXJ5IGluZm9ybWF0aW9uIGFib3V0IHRoZSBoZWlyYXJjaHkgb2YgY2FjaGVzIGNvbnRyb2xsZWQgYnkgdGhlIHByb2Nlc3NvciAqLworc3RhdGljIGlubGluZSBzNjQKK2lhNjRfcGFsX2NhY2hlX3N1bW1hcnkgKHU2NCAqY2FjaGVfbGV2ZWxzLCB1NjQgKnVuaXF1ZV9jYWNoZXMpCit7CisJc3RydWN0IGlhNjRfcGFsX3JldHZhbCBpcHJ2OworCVBBTF9DQUxMKGlwcnYsIFBBTF9DQUNIRV9TVU1NQVJZLCAwLCAwLCAwKTsKKwlpZiAoY2FjaGVfbGV2ZWxzKQorCQkqY2FjaGVfbGV2ZWxzID0gaXBydi52MDsKKwlpZiAodW5pcXVlX2NhY2hlcykKKwkJKnVuaXF1ZV9jYWNoZXMgPSBpcHJ2LnYxOworCXJldHVybiBpcHJ2LnN0YXR1czsKK30KKworLyogV3JpdGUgdGhlIGRhdGEgYW5kIHRhZyBvZiBhIHByb2Nlc3Nvci1jb250cm9sbGVkIGNhY2hlIGxpbmUgZm9yIGRpYWdzICovCitzdGF0aWMgaW5saW5lIHM2NAoraWE2NF9wYWxfY2FjaGVfd3JpdGUgKHBhbF9jYWNoZV9saW5lX2lkX3VfdCBsaW5lX2lkLCB1NjQgcGh5c2ljYWxfYWRkciwgdTY0IGRhdGEpCit7CisJc3RydWN0IGlhNjRfcGFsX3JldHZhbCBpcHJ2OworCVBBTF9DQUxMKGlwcnYsIFBBTF9DQUNIRV9XUklURSwgbGluZV9pZC5wY2xpZF9kYXRhLCBwaHlzaWNhbF9hZGRyLCBkYXRhKTsKKwlyZXR1cm4gaXBydi5zdGF0dXM7Cit9CisKKworLyogUmV0dXJuIHRoZSBwYXJhbWV0ZXJzIG5lZWRlZCB0byBjb3B5IHJlbG9jYXRhYmxlIFBBTCBwcm9jZWR1cmVzIGZyb20gUk9NIHRvIG1lbW9yeSAqLworc3RhdGljIGlubGluZSBzNjQKK2lhNjRfcGFsX2NvcHlfaW5mbyAodTY0IGNvcHlfdHlwZSwgdTY0IG51bV9wcm9jcywgdTY0IG51bV9pb3BpY3MsCisJCSAgICB1NjQgKmJ1ZmZlcl9zaXplLCB1NjQgKmJ1ZmZlcl9hbGlnbikKK3sKKwlzdHJ1Y3QgaWE2NF9wYWxfcmV0dmFsIGlwcnY7CisJUEFMX0NBTEwoaXBydiwgUEFMX0NPUFlfSU5GTywgY29weV90eXBlLCBudW1fcHJvY3MsIG51bV9pb3BpY3MpOworCWlmIChidWZmZXJfc2l6ZSkKKwkJKmJ1ZmZlcl9zaXplID0gaXBydi52MDsKKwlpZiAoYnVmZmVyX2FsaWduKQorCQkqYnVmZmVyX2FsaWduID0gaXBydi52MTsKKwlyZXR1cm4gaXBydi5zdGF0dXM7Cit9CisKKy8qIENvcHkgcmVsb2NhdGFibGUgUEFMIHByb2NlZHVyZXMgZnJvbSBST00gdG8gbWVtb3J5ICovCitzdGF0aWMgaW5saW5lIHM2NAoraWE2NF9wYWxfY29weV9wYWwgKHU2NCB0YXJnZXRfYWRkciwgdTY0IGFsbG9jX3NpemUsIHU2NCBwcm9jZXNzb3IsIHU2NCAqcGFsX3Byb2Nfb2Zmc2V0KQoreworCXN0cnVjdCBpYTY0X3BhbF9yZXR2YWwgaXBydjsKKwlQQUxfQ0FMTChpcHJ2LCBQQUxfQ09QWV9QQUwsIHRhcmdldF9hZGRyLCBhbGxvY19zaXplLCBwcm9jZXNzb3IpOworCWlmIChwYWxfcHJvY19vZmZzZXQpCisJCSpwYWxfcHJvY19vZmZzZXQgPSBpcHJ2LnYwOworCXJldHVybiBpcHJ2LnN0YXR1czsKK30KKworLyogUmV0dXJuIHRoZSBudW1iZXIgb2YgaW5zdHJ1Y3Rpb24gYW5kIGRhdGEgZGVidWcgcmVnaXN0ZXIgcGFpcnMgKi8KK3N0YXRpYyBpbmxpbmUgczY0CitpYTY0X3BhbF9kZWJ1Z19pbmZvICh1NjQgKmluc3RfcmVncywgIHU2NCAqZGF0YV9yZWdzKQoreworCXN0cnVjdCBpYTY0X3BhbF9yZXR2YWwgaXBydjsKKwlQQUxfQ0FMTChpcHJ2LCBQQUxfREVCVUdfSU5GTywgMCwgMCwgMCk7CisJaWYgKGluc3RfcmVncykKKwkJKmluc3RfcmVncyA9IGlwcnYudjA7CisJaWYgKGRhdGFfcmVncykKKwkJKmRhdGFfcmVncyA9IGlwcnYudjE7CisKKwlyZXR1cm4gaXBydi5zdGF0dXM7Cit9CisKKyNpZmRlZiBUQkQKKy8qIFN3aXRjaCBmcm9tIElBNjQtc3lzdGVtIGVudmlyb25tZW50IHRvIElBLTMyIHN5c3RlbSBlbnZpcm9ubWVudCAqLworc3RhdGljIGlubGluZSBzNjQKK2lhNjRfcGFsX2VudGVyX2lhMzJfZW52IChpYTMyX2VudjEsIGlhMzJfZW52MiwgaWEzMl9lbnYzKQoreworCXN0cnVjdCBpYTY0X3BhbF9yZXR2YWwgaXBydjsKKwlQQUxfQ0FMTChpcHJ2LCBQQUxfRU5URVJfSUFfMzJfRU5WLCBpYTMyX2VudjEsIGlhMzJfZW52MiwgaWEzMl9lbnYzKTsKKwlyZXR1cm4gaXBydi5zdGF0dXM7Cit9CisjZW5kaWYKKworLyogR2V0IHVuaXF1ZSBnZW9ncmFwaGljYWwgYWRkcmVzcyBvZiB0aGlzIHByb2Nlc3NvciBvbiBpdHMgYnVzICovCitzdGF0aWMgaW5saW5lIHM2NAoraWE2NF9wYWxfZml4ZWRfYWRkciAodTY0ICpnbG9iYWxfdW5pcXVlX2FkZHIpCit7CisJc3RydWN0IGlhNjRfcGFsX3JldHZhbCBpcHJ2OworCVBBTF9DQUxMKGlwcnYsIFBBTF9GSVhFRF9BRERSLCAwLCAwLCAwKTsKKwlpZiAoZ2xvYmFsX3VuaXF1ZV9hZGRyKQorCQkqZ2xvYmFsX3VuaXF1ZV9hZGRyID0gaXBydi52MDsKKwlyZXR1cm4gaXBydi5zdGF0dXM7Cit9CisKKy8qIEdldCBiYXNlIGZyZXF1ZW5jeSBvZiB0aGUgcGxhdGZvcm0gaWYgZ2VuZXJhdGVkIGJ5IHRoZSBwcm9jZXNzb3IgKi8KK3N0YXRpYyBpbmxpbmUgczY0CitpYTY0X3BhbF9mcmVxX2Jhc2UgKHU2NCAqcGxhdGZvcm1fYmFzZV9mcmVxKQoreworCXN0cnVjdCBpYTY0X3BhbF9yZXR2YWwgaXBydjsKKwlQQUxfQ0FMTChpcHJ2LCBQQUxfRlJFUV9CQVNFLCAwLCAwLCAwKTsKKwlpZiAocGxhdGZvcm1fYmFzZV9mcmVxKQorCQkqcGxhdGZvcm1fYmFzZV9mcmVxID0gaXBydi52MDsKKwlyZXR1cm4gaXBydi5zdGF0dXM7Cit9CisKKy8qCisgKiBHZXQgdGhlIHJhdGlvcyBmb3IgcHJvY2Vzc29yIGZyZXF1ZW5jeSwgYnVzIGZyZXF1ZW5jeSBhbmQgaW50ZXJ2YWwgdGltZXIgdG8KKyAqIHRvIGJhc2UgZnJlcXVlbmN5IG9mIHRoZSBwbGF0Zm9ybQorICovCitzdGF0aWMgaW5saW5lIHM2NAoraWE2NF9wYWxfZnJlcV9yYXRpb3MgKHN0cnVjdCBwYWxfZnJlcV9yYXRpbyAqcHJvY19yYXRpbywgc3RydWN0IHBhbF9mcmVxX3JhdGlvICpidXNfcmF0aW8sCisJCSAgICAgIHN0cnVjdCBwYWxfZnJlcV9yYXRpbyAqaXRjX3JhdGlvKQoreworCXN0cnVjdCBpYTY0X3BhbF9yZXR2YWwgaXBydjsKKwlQQUxfQ0FMTChpcHJ2LCBQQUxfRlJFUV9SQVRJT1MsIDAsIDAsIDApOworCWlmIChwcm9jX3JhdGlvKQorCQkqKHU2NCAqKXByb2NfcmF0aW8gPSBpcHJ2LnYwOworCWlmIChidXNfcmF0aW8pCisJCSoodTY0ICopYnVzX3JhdGlvID0gaXBydi52MTsKKwlpZiAoaXRjX3JhdGlvKQorCQkqKHU2NCAqKWl0Y19yYXRpbyA9IGlwcnYudjI7CisJcmV0dXJuIGlwcnYuc3RhdHVzOworfQorCisvKiBNYWtlIHRoZSBwcm9jZXNzb3IgZW50ZXIgSEFMVCBvciBvbmUgb2YgdGhlIGltcGxlbWVudGF0aW9uIGRlcGVuZGVudCBsb3cKKyAqIHBvd2VyIHN0YXRlcyB3aGVyZSBwcmVmZXRjaGluZyBhbmQgZXhlY3V0aW9uIGFyZSBzdXNwZW5kZWQgYW5kIGNhY2hlIGFuZAorICogVExCIGNvaGVyZW5jeSBpcyBub3QgbWFpbnRhaW5lZC4KKyAqLworc3RhdGljIGlubGluZSBzNjQKK2lhNjRfcGFsX2hhbHQgKHU2NCBoYWx0X3N0YXRlKQoreworCXN0cnVjdCBpYTY0X3BhbF9yZXR2YWwgaXBydjsKKwlQQUxfQ0FMTChpcHJ2LCBQQUxfSEFMVCwgaGFsdF9zdGF0ZSwgMCwgMCk7CisJcmV0dXJuIGlwcnYuc3RhdHVzOworfQorCit0eXBlZGVmIHVuaW9uIHBhbF9wb3dlcl9tZ210X2luZm9fdSB7CisJdTY0CQkJcHBtaV9kYXRhOworCXN0cnVjdCB7CisJICAgICAgIHU2NAkJZXhpdF9sYXRlbmN5CQk6IDE2LAorCQkJCWVudHJ5X2xhdGVuY3kJCTogMTYsCisJCQkJcG93ZXJfY29uc3VtcHRpb24JOiAyOCwKKwkJCQlpbQkJCTogMSwKKwkJCQljbwkJCTogMSwKKwkJCQlyZXNlcnZlZAkJOiAyOworCX0gcGFsX3Bvd2VyX21nbXRfaW5mb19zOworfSBwYWxfcG93ZXJfbWdtdF9pbmZvX3VfdDsKKworLyogUmV0dXJuIGluZm9ybWF0aW9uIGFib3V0IHByb2Nlc3NvcidzIG9wdGlvbmFsIHBvd2VyIG1hbmFnZW1lbnQgY2FwYWJpbGl0aWVzLiAqLworc3RhdGljIGlubGluZSBzNjQKK2lhNjRfcGFsX2hhbHRfaW5mbyAocGFsX3Bvd2VyX21nbXRfaW5mb191X3QgKnBvd2VyX2J1ZikKK3sKKwlzdHJ1Y3QgaWE2NF9wYWxfcmV0dmFsIGlwcnY7CisJUEFMX0NBTExfU1RLKGlwcnYsIFBBTF9IQUxUX0lORk8sICh1bnNpZ25lZCBsb25nKSBwb3dlcl9idWYsIDAsIDApOworCXJldHVybiBpcHJ2LnN0YXR1czsKK30KKworLyogQ2F1c2UgdGhlIHByb2Nlc3NvciB0byBlbnRlciBMSUdIVCBIQUxUIHN0YXRlLCB3aGVyZSBwcmVmZXRjaGluZyBhbmQgZXhlY3V0aW9uIGFyZQorICogc3VzcGVuZGVkLCBidXQgY2FjaGUgYW5kIFRMQiBjb2hlcmVuY3kgaXMgbWFpbnRhaW5lZC4KKyAqLworc3RhdGljIGlubGluZSBzNjQKK2lhNjRfcGFsX2hhbHRfbGlnaHQgKHZvaWQpCit7CisJc3RydWN0IGlhNjRfcGFsX3JldHZhbCBpcHJ2OworCVBBTF9DQUxMKGlwcnYsIFBBTF9IQUxUX0xJR0hULCAwLCAwLCAwKTsKKwlyZXR1cm4gaXBydi5zdGF0dXM7Cit9CisKKy8qIENsZWFyIGFsbCB0aGUgcHJvY2Vzc29yIGVycm9yIGxvZ2dpbmcgICByZWdpc3RlcnMgYW5kIHJlc2V0IHRoZSBpbmRpY2F0b3IgdGhhdCBhbGxvd3MKKyAqIHRoZSBlcnJvciBsb2dnaW5nIHJlZ2lzdGVycyB0byBiZSB3cml0dGVuLiBUaGlzIHByb2NlZHVyZSBhbHNvIGNoZWNrcyB0aGUgcGVuZGluZworICogbWFjaGluZSBjaGVjayBiaXQgYW5kIHBlbmRpbmcgSU5JVCBiaXQgYW5kIHJlcG9ydHMgdGhlaXIgc3RhdGVzLgorICovCitzdGF0aWMgaW5saW5lIHM2NAoraWE2NF9wYWxfbWNfY2xlYXJfbG9nICh1NjQgKnBlbmRpbmdfdmVjdG9yKQoreworCXN0cnVjdCBpYTY0X3BhbF9yZXR2YWwgaXBydjsKKwlQQUxfQ0FMTChpcHJ2LCBQQUxfTUNfQ0xFQVJfTE9HLCAwLCAwLCAwKTsKKwlpZiAocGVuZGluZ192ZWN0b3IpCisJCSpwZW5kaW5nX3ZlY3RvciA9IGlwcnYudjA7CisJcmV0dXJuIGlwcnYuc3RhdHVzOworfQorCisvKiBFbnN1cmUgdGhhdCBhbGwgb3V0c3RhbmRpbmcgdHJhbnNhY3Rpb25zIGluIGEgcHJvY2Vzc29yIGFyZSBjb21wbGV0ZWQgb3IgdGhhdCBhbnkKKyAqIE1DQSBkdWUgdG8gdGhlcyBvdXRzdGFuZGluZyB0cmFuc2FjdGlvbiBpcyB0YWtlbi4KKyAqLworc3RhdGljIGlubGluZSBzNjQKK2lhNjRfcGFsX21jX2RyYWluICh2b2lkKQoreworCXN0cnVjdCBpYTY0X3BhbF9yZXR2YWwgaXBydjsKKwlQQUxfQ0FMTChpcHJ2LCBQQUxfTUNfRFJBSU4sIDAsIDAsIDApOworCXJldHVybiBpcHJ2LnN0YXR1czsKK30KKworLyogUmV0dXJuIHRoZSBtYWNoaW5lIGNoZWNrIGR5bmFtaWMgcHJvY2Vzc29yIHN0YXRlICovCitzdGF0aWMgaW5saW5lIHM2NAoraWE2NF9wYWxfbWNfZHluYW1pY19zdGF0ZSAodTY0IG9mZnNldCwgdTY0ICpzaXplLCB1NjQgKnBkcykKK3sKKwlzdHJ1Y3QgaWE2NF9wYWxfcmV0dmFsIGlwcnY7CisJUEFMX0NBTEwoaXBydiwgUEFMX01DX0RZTkFNSUNfU1RBVEUsIG9mZnNldCwgMCwgMCk7CisJaWYgKHNpemUpCisJCSpzaXplID0gaXBydi52MDsKKwlpZiAocGRzKQorCQkqcGRzID0gaXBydi52MTsKKwlyZXR1cm4gaXBydi5zdGF0dXM7Cit9CisKKy8qIFJldHVybiBwcm9jZXNzb3IgbWFjaGluZSBjaGVjayBpbmZvcm1hdGlvbiAqLworc3RhdGljIGlubGluZSBzNjQKK2lhNjRfcGFsX21jX2Vycm9yX2luZm8gKHU2NCBpbmZvX2luZGV4LCB1NjQgdHlwZV9pbmRleCwgdTY0ICpzaXplLCB1NjQgKmVycm9yX2luZm8pCit7CisJc3RydWN0IGlhNjRfcGFsX3JldHZhbCBpcHJ2OworCVBBTF9DQUxMKGlwcnYsIFBBTF9NQ19FUlJPUl9JTkZPLCBpbmZvX2luZGV4LCB0eXBlX2luZGV4LCAwKTsKKwlpZiAoc2l6ZSkKKwkJKnNpemUgPSBpcHJ2LnYwOworCWlmIChlcnJvcl9pbmZvKQorCQkqZXJyb3JfaW5mbyA9IGlwcnYudjE7CisJcmV0dXJuIGlwcnYuc3RhdHVzOworfQorCisvKiBJbmZvcm0gUEFMRV9DSEVDSyB3aGV0aGVyIGEgbWFjaGluZSBjaGVjayBpcyBleHBlY3RlZCBzbyB0aGF0IFBBTEVfQ0hFQ0sgd2lsbG5vdAorICogYXR0ZW1wdCB0byBjb3JyZWN0IGFueSBleHBlY3RlZCBtYWNoaW5lIGNoZWNrcy4KKyAqLworc3RhdGljIGlubGluZSBzNjQKK2lhNjRfcGFsX21jX2V4cGVjdGVkICh1NjQgZXhwZWN0ZWQsIHU2NCAqcHJldmlvdXMpCit7CisJc3RydWN0IGlhNjRfcGFsX3JldHZhbCBpcHJ2OworCVBBTF9DQUxMKGlwcnYsIFBBTF9NQ19FWFBFQ1RFRCwgZXhwZWN0ZWQsIDAsIDApOworCWlmIChwcmV2aW91cykKKwkJKnByZXZpb3VzID0gaXBydi52MDsKKwlyZXR1cm4gaXBydi5zdGF0dXM7Cit9CisKKy8qIFJlZ2lzdGVyIGEgcGxhdGZvcm0gZGVwZW5kZW50IGxvY2F0aW9uIHdpdGggUEFMIHRvIHdoaWNoIGl0IGNhbiBzYXZlCisgKiBtaW5pbWFsIHByb2Nlc3NvciBzdGF0ZSBpbiB0aGUgZXZlbnQgb2YgYSBtYWNoaW5lIGNoZWNrIG9yIGluaXRpYWxpemF0aW9uCisgKiBldmVudC4KKyAqLworc3RhdGljIGlubGluZSBzNjQKK2lhNjRfcGFsX21jX3JlZ2lzdGVyX21lbSAodTY0IHBoeXNpY2FsX2FkZHIpCit7CisJc3RydWN0IGlhNjRfcGFsX3JldHZhbCBpcHJ2OworCVBBTF9DQUxMKGlwcnYsIFBBTF9NQ19SRUdJU1RFUl9NRU0sIHBoeXNpY2FsX2FkZHIsIDAsIDApOworCXJldHVybiBpcHJ2LnN0YXR1czsKK30KKworLyogUmVzdG9yZSBtaW5pbWFsIGFyY2hpdGVjdHVyYWwgcHJvY2Vzc29yIHN0YXRlLCBzZXQgQ01DIGludGVycnVwdCBpZiBuZWNlc3NhcnkKKyAqIGFuZCByZXN1bWUgZXhlY3V0aW9uCisgKi8KK3N0YXRpYyBpbmxpbmUgczY0CitpYTY0X3BhbF9tY19yZXN1bWUgKHU2NCBzZXRfY21jaSwgdTY0IHNhdmVfcHRyKQoreworCXN0cnVjdCBpYTY0X3BhbF9yZXR2YWwgaXBydjsKKwlQQUxfQ0FMTChpcHJ2LCBQQUxfTUNfUkVTVU1FLCBzZXRfY21jaSwgc2F2ZV9wdHIsIDApOworCXJldHVybiBpcHJ2LnN0YXR1czsKK30KKworLyogUmV0dXJuIHRoZSBtZW1vcnkgYXR0cmlidXRlcyBpbXBsZW1lbnRlZCBieSB0aGUgcHJvY2Vzc29yICovCitzdGF0aWMgaW5saW5lIHM2NAoraWE2NF9wYWxfbWVtX2F0dHJpYiAodTY0ICptZW1fYXR0cmliKQoreworCXN0cnVjdCBpYTY0X3BhbF9yZXR2YWwgaXBydjsKKwlQQUxfQ0FMTChpcHJ2LCBQQUxfTUVNX0FUVFJJQiwgMCwgMCwgMCk7CisJaWYgKG1lbV9hdHRyaWIpCisJCSptZW1fYXR0cmliID0gaXBydi52MCAmIDB4ZmY7CisJcmV0dXJuIGlwcnYuc3RhdHVzOworfQorCisvKiBSZXR1cm4gdGhlIGFtb3VudCBvZiBtZW1vcnkgbmVlZGVkIGZvciBzZWNvbmQgcGhhc2Ugb2YgcHJvY2Vzc29yCisgKiBzZWxmLXRlc3QgYW5kIHRoZSByZXF1aXJlZCBhbGlnbm1lbnQgb2YgbWVtb3J5LgorICovCitzdGF0aWMgaW5saW5lIHM2NAoraWE2NF9wYWxfbWVtX2Zvcl90ZXN0ICh1NjQgKmJ5dGVzX25lZWRlZCwgdTY0ICphbGlnbm1lbnQpCit7CisJc3RydWN0IGlhNjRfcGFsX3JldHZhbCBpcHJ2OworCVBBTF9DQUxMKGlwcnYsIFBBTF9NRU1fRk9SX1RFU1QsIDAsIDAsIDApOworCWlmIChieXRlc19uZWVkZWQpCisJCSpieXRlc19uZWVkZWQgPSBpcHJ2LnYwOworCWlmIChhbGlnbm1lbnQpCisJCSphbGlnbm1lbnQgPSBpcHJ2LnYxOworCXJldHVybiBpcHJ2LnN0YXR1czsKK30KKwordHlwZWRlZiB1bmlvbiBwYWxfcGVyZl9tb25faW5mb191IHsKKwl1NjQJCQkgIHBwbWlfZGF0YTsKKwlzdHJ1Y3QgeworCSAgICAgICB1NjQJCWdlbmVyaWMJCTogOCwKKwkJCQl3aWR0aAkJOiA4LAorCQkJCWN5Y2xlcwkJOiA4LAorCQkJCXJldGlyZWQJCTogOCwKKwkJCQlyZXNlcnZlZAk6IDMyOworCX0gcGFsX3BlcmZfbW9uX2luZm9fczsKK30gcGFsX3BlcmZfbW9uX2luZm9fdV90OworCisvKiBSZXR1cm4gdGhlIHBlcmZvcm1hbmNlIG1vbml0b3IgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBjYW4gYmUgY291bnRlZAorICogYW5kIGhvdyB0byBjb25maWd1cmUgdGhlIG1vbml0b3JzIHRvIGNvdW50IHRoZSBkZXNpcmVkIGV2ZW50cy4KKyAqLworc3RhdGljIGlubGluZSBzNjQKK2lhNjRfcGFsX3BlcmZfbW9uX2luZm8gKHU2NCAqcG1fYnVmZmVyLCBwYWxfcGVyZl9tb25faW5mb191X3QgKnBtX2luZm8pCit7CisJc3RydWN0IGlhNjRfcGFsX3JldHZhbCBpcHJ2OworCVBBTF9DQUxMKGlwcnYsIFBBTF9QRVJGX01PTl9JTkZPLCAodW5zaWduZWQgbG9uZykgcG1fYnVmZmVyLCAwLCAwKTsKKwlpZiAocG1faW5mbykKKwkJcG1faW5mby0+cHBtaV9kYXRhID0gaXBydi52MDsKKwlyZXR1cm4gaXBydi5zdGF0dXM7Cit9CisKKy8qIFNwZWNpZmllcyB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgcHJvY2Vzc29yIGludGVycnVwdCBibG9jaworICogYW5kIEkvTyBwb3J0IHNwYWNlLgorICovCitzdGF0aWMgaW5saW5lIHM2NAoraWE2NF9wYWxfcGxhdGZvcm1fYWRkciAodTY0IHR5cGUsIHU2NCBwaHlzaWNhbF9hZGRyKQoreworCXN0cnVjdCBpYTY0X3BhbF9yZXR2YWwgaXBydjsKKwlQQUxfQ0FMTChpcHJ2LCBQQUxfUExBVEZPUk1fQUREUiwgdHlwZSwgcGh5c2ljYWxfYWRkciwgMCk7CisJcmV0dXJuIGlwcnYuc3RhdHVzOworfQorCisvKiBTZXQgdGhlIFNBTCBQTUkgZW50cnlwb2ludCBpbiBtZW1vcnkgKi8KK3N0YXRpYyBpbmxpbmUgczY0CitpYTY0X3BhbF9wbWlfZW50cnlwb2ludCAodTY0IHNhbF9wbWlfZW50cnlfYWRkcikKK3sKKwlzdHJ1Y3QgaWE2NF9wYWxfcmV0dmFsIGlwcnY7CisJUEFMX0NBTEwoaXBydiwgUEFMX1BNSV9FTlRSWVBPSU5ULCBzYWxfcG1pX2VudHJ5X2FkZHIsIDAsIDApOworCXJldHVybiBpcHJ2LnN0YXR1czsKK30KKworc3RydWN0IHBhbF9mZWF0dXJlc19zOworLyogUHJvdmlkZSBpbmZvcm1hdGlvbiBhYm91dCBjb25maWd1cmFibGUgcHJvY2Vzc29yIGZlYXR1cmVzICovCitzdGF0aWMgaW5saW5lIHM2NAoraWE2NF9wYWxfcHJvY19nZXRfZmVhdHVyZXMgKHU2NCAqZmVhdHVyZXNfYXZhaWwsCisJCQkgICAgdTY0ICpmZWF0dXJlc19zdGF0dXMsCisJCQkgICAgdTY0ICpmZWF0dXJlc19jb250cm9sKQoreworCXN0cnVjdCBpYTY0X3BhbF9yZXR2YWwgaXBydjsKKwlQQUxfQ0FMTF9QSFlTKGlwcnYsIFBBTF9QUk9DX0dFVF9GRUFUVVJFUywgMCwgMCwgMCk7CisJaWYgKGlwcnYuc3RhdHVzID09IDApIHsKKwkJKmZlYXR1cmVzX2F2YWlsICAgPSBpcHJ2LnYwOworCQkqZmVhdHVyZXNfc3RhdHVzICA9IGlwcnYudjE7CisJCSpmZWF0dXJlc19jb250cm9sID0gaXBydi52MjsKKwl9CisJcmV0dXJuIGlwcnYuc3RhdHVzOworfQorCisvKiBFbmFibGUvZGlzYWJsZSBwcm9jZXNzb3IgZGVwZW5kZW50IGZlYXR1cmVzICovCitzdGF0aWMgaW5saW5lIHM2NAoraWE2NF9wYWxfcHJvY19zZXRfZmVhdHVyZXMgKHU2NCBmZWF0dXJlX3NlbGVjdCkKK3sKKwlzdHJ1Y3QgaWE2NF9wYWxfcmV0dmFsIGlwcnY7CisJUEFMX0NBTExfUEhZUyhpcHJ2LCBQQUxfUFJPQ19TRVRfRkVBVFVSRVMsIGZlYXR1cmVfc2VsZWN0LCAwLCAwKTsKKwlyZXR1cm4gaXBydi5zdGF0dXM7Cit9CisKKy8qCisgKiBQdXQgZXZlcnl0aGluZyBpbiBhIHN0cnVjdCBzbyB3ZSBhdm9pZCB0aGUgZ2xvYmFsIG9mZnNldCB0YWJsZSB3aGVuZXZlcgorICogcG9zc2libGUuCisgKi8KK3R5cGVkZWYgc3RydWN0IGlhNjRfcHRjZV9pbmZvX3MgeworCXU2NAkJYmFzZTsKKwl1MzIJCWNvdW50WzJdOworCXUzMgkJc3RyaWRlWzJdOworfSBpYTY0X3B0Y2VfaW5mb190OworCisvKiBSZXR1cm4gdGhlIGluZm9ybWF0aW9uIHJlcXVpcmVkIGZvciB0aGUgYXJjaGl0ZWN0ZWQgbG9vcCB1c2VkIHRvIHB1cmdlCisgKiAoaW5pdGlhbGl6ZSkgdGhlIGVudGlyZSBUQworICovCitzdGF0aWMgaW5saW5lIHM2NAoraWE2NF9nZXRfcHRjZSAoaWE2NF9wdGNlX2luZm9fdCAqcHRjZSkKK3sKKwlzdHJ1Y3QgaWE2NF9wYWxfcmV0dmFsIGlwcnY7CisKKwlpZiAoIXB0Y2UpCisJCXJldHVybiAtMTsKKworCVBBTF9DQUxMKGlwcnYsIFBBTF9QVENFX0lORk8sIDAsIDAsIDApOworCWlmIChpcHJ2LnN0YXR1cyA9PSAwKSB7CisJCXB0Y2UtPmJhc2UgPSBpcHJ2LnYwOworCQlwdGNlLT5jb3VudFswXSA9IGlwcnYudjEgPj4gMzI7CisJCXB0Y2UtPmNvdW50WzFdID0gaXBydi52MSAmIDB4ZmZmZmZmZmY7CisJCXB0Y2UtPnN0cmlkZVswXSA9IGlwcnYudjIgPj4gMzI7CisJCXB0Y2UtPnN0cmlkZVsxXSA9IGlwcnYudjIgJiAweGZmZmZmZmZmOworCX0KKwlyZXR1cm4gaXBydi5zdGF0dXM7Cit9CisKKy8qIFJldHVybiBpbmZvIGFib3V0IGltcGxlbWVudGVkIGFwcGxpY2F0aW9uIGFuZCBjb250cm9sIHJlZ2lzdGVycy4gKi8KK3N0YXRpYyBpbmxpbmUgczY0CitpYTY0X3BhbF9yZWdpc3Rlcl9pbmZvICh1NjQgaW5mb19yZXF1ZXN0LCB1NjQgKnJlZ19pbmZvXzEsIHU2NCAqcmVnX2luZm9fMikKK3sKKwlzdHJ1Y3QgaWE2NF9wYWxfcmV0dmFsIGlwcnY7CisJUEFMX0NBTEwoaXBydiwgUEFMX1JFR0lTVEVSX0lORk8sIGluZm9fcmVxdWVzdCwgMCwgMCk7CisJaWYgKHJlZ19pbmZvXzEpCisJCSpyZWdfaW5mb18xID0gaXBydi52MDsKKwlpZiAocmVnX2luZm9fMikKKwkJKnJlZ19pbmZvXzIgPSBpcHJ2LnYxOworCXJldHVybiBpcHJ2LnN0YXR1czsKK30KKwordHlwZWRlZiB1bmlvbiBwYWxfaGludHNfdSB7CisJdTY0CQkJcGhfZGF0YTsKKwlzdHJ1Y3QgeworCSAgICAgICB1NjQJCXNpCQk6IDEsCisJCQkJbGkJCTogMSwKKwkJCQlyZXNlcnZlZAk6IDYyOworCX0gcGFsX2hpbnRzX3M7Cit9IHBhbF9oaW50c191X3Q7CisKKy8qIFJldHVybiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcmVnaXN0ZXIgc3RhY2sgYW5kIFJTRSBmb3IgdGhpcyBwcm9jZXNzb3IKKyAqIGltcGxlbWVudGF0aW9uLgorICovCitzdGF0aWMgaW5saW5lIHM2NAoraWE2NF9wYWxfcnNlX2luZm8gKHU2NCAqbnVtX3BoeXNfc3RhY2tlZCwgcGFsX2hpbnRzX3VfdCAqaGludHMpCit7CisJc3RydWN0IGlhNjRfcGFsX3JldHZhbCBpcHJ2OworCVBBTF9DQUxMKGlwcnYsIFBBTF9SU0VfSU5GTywgMCwgMCwgMCk7CisJaWYgKG51bV9waHlzX3N0YWNrZWQpCisJCSpudW1fcGh5c19zdGFja2VkID0gaXBydi52MDsKKwlpZiAoaGludHMpCisJCWhpbnRzLT5waF9kYXRhID0gaXBydi52MTsKKwlyZXR1cm4gaXBydi5zdGF0dXM7Cit9CisKKy8qIENhdXNlIHRoZSBwcm9jZXNzb3IgdG8gZW50ZXIJU0hVVERPV04gc3RhdGUsIHdoZXJlIHByZWZldGNoaW5nIGFuZCBleGVjdXRpb24gYXJlCisgKiBzdXNwZW5kZWQsIGJ1dCBjYXVzZSBjYWNoZSBhbmQgVExCIGNvaGVyZW5jeSB0byBiZSBtYWludGFpbmVkLgorICogVGhpcyBpcyB1c3VhbGx5IGNhbGxlZCBpbiBJQS0zMiBtb2RlLgorICovCitzdGF0aWMgaW5saW5lIHM2NAoraWE2NF9wYWxfc2h1dGRvd24gKHZvaWQpCit7CisJc3RydWN0IGlhNjRfcGFsX3JldHZhbCBpcHJ2OworCVBBTF9DQUxMKGlwcnYsIFBBTF9TSFVURE9XTiwgMCwgMCwgMCk7CisJcmV0dXJuIGlwcnYuc3RhdHVzOworfQorCisvKiBQZXJmb3JtIHRoZSBzZWNvbmQgcGhhc2Ugb2YgcHJvY2Vzc29yIHNlbGYtdGVzdC4gKi8KK3N0YXRpYyBpbmxpbmUgczY0CitpYTY0X3BhbF90ZXN0X3Byb2MgKHU2NCB0ZXN0X2FkZHIsIHU2NCB0ZXN0X3NpemUsIHU2NCBhdHRyaWJ1dGVzLCB1NjQgKnNlbGZfdGVzdF9zdGF0ZSkKK3sKKwlzdHJ1Y3QgaWE2NF9wYWxfcmV0dmFsIGlwcnY7CisJUEFMX0NBTEwoaXBydiwgUEFMX1RFU1RfUFJPQywgdGVzdF9hZGRyLCB0ZXN0X3NpemUsIGF0dHJpYnV0ZXMpOworCWlmIChzZWxmX3Rlc3Rfc3RhdGUpCisJCSpzZWxmX3Rlc3Rfc3RhdGUgPSBpcHJ2LnYwOworCXJldHVybiBpcHJ2LnN0YXR1czsKK30KKwordHlwZWRlZiB1bmlvbiAgcGFsX3ZlcnNpb25fdSB7CisJdTY0CXBhbF92ZXJzaW9uX3ZhbDsKKwlzdHJ1Y3QgeworCQl1NjQJcHZfcGFsX2JfcmV2CQk6CTg7CisJCXU2NAlwdl9wYWxfYl9tb2RlbAkJOgk4OworCQl1NjQJcHZfcmVzZXJ2ZWQxCQk6CTg7CisJCXU2NAlwdl9wYWxfdmVuZG9yCQk6CTg7CisJCXU2NAlwdl9wYWxfYV9yZXYJCToJODsKKwkJdTY0CXB2X3BhbF9hX21vZGVsCQk6CTg7CisJCXU2NAlwdl9yZXNlcnZlZDIJCToJMTY7CisJfSBwYWxfdmVyc2lvbl9zOworfSBwYWxfdmVyc2lvbl91X3Q7CisKKworLyogUmV0dXJuIFBBTCB2ZXJzaW9uIGluZm9ybWF0aW9uICovCitzdGF0aWMgaW5saW5lIHM2NAoraWE2NF9wYWxfdmVyc2lvbiAocGFsX3ZlcnNpb25fdV90ICpwYWxfbWluX3ZlcnNpb24sIHBhbF92ZXJzaW9uX3VfdCAqcGFsX2N1cl92ZXJzaW9uKQoreworCXN0cnVjdCBpYTY0X3BhbF9yZXR2YWwgaXBydjsKKwlQQUxfQ0FMTF9QSFlTKGlwcnYsIFBBTF9WRVJTSU9OLCAwLCAwLCAwKTsKKwlpZiAocGFsX21pbl92ZXJzaW9uKQorCQlwYWxfbWluX3ZlcnNpb24tPnBhbF92ZXJzaW9uX3ZhbCA9IGlwcnYudjA7CisKKwlpZiAocGFsX2N1cl92ZXJzaW9uKQorCQlwYWxfY3VyX3ZlcnNpb24tPnBhbF92ZXJzaW9uX3ZhbCA9IGlwcnYudjE7CisKKwlyZXR1cm4gaXBydi5zdGF0dXM7Cit9CisKK3R5cGVkZWYgdW5pb24gcGFsX3RjX2luZm9fdSB7CisJdTY0CQkJcHRpX3ZhbDsKKwlzdHJ1Y3QgeworCSAgICAgICB1NjQJCW51bV9zZXRzCToJOCwKKwkJCQlhc3NvY2lhdGl2aXR5CToJOCwKKwkJCQludW1fZW50cmllcwk6CTE2LAorCQkJCXBmCQk6CTEsCisJCQkJdW5pZmllZAkJOgkxLAorCQkJCXJlZHVjZV90cgk6CTEsCisJCQkJcmVzZXJ2ZWQJOgkyOTsKKwl9IHBhbF90Y19pbmZvX3M7Cit9IHBhbF90Y19pbmZvX3VfdDsKKworI2RlZmluZSB0Y19yZWR1Y2VfdHIJCXBhbF90Y19pbmZvX3MucmVkdWNlX3RyCisjZGVmaW5lIHRjX3VuaWZpZWQJCXBhbF90Y19pbmZvX3MudW5pZmllZAorI2RlZmluZSB0Y19wZgkJCXBhbF90Y19pbmZvX3MucGYKKyNkZWZpbmUgdGNfbnVtX2VudHJpZXMJCXBhbF90Y19pbmZvX3MubnVtX2VudHJpZXMKKyNkZWZpbmUgdGNfYXNzb2NpYXRpdml0eQlwYWxfdGNfaW5mb19zLmFzc29jaWF0aXZpdHkKKyNkZWZpbmUgdGNfbnVtX3NldHMJCXBhbF90Y19pbmZvX3MubnVtX3NldHMKKworCisvKiBSZXR1cm4gaW5mb3JtYXRpb24gYWJvdXQgdGhlIHZpcnR1YWwgbWVtb3J5IGNoYXJhY3RlcmlzdGljcyBvZiB0aGUgcHJvY2Vzc29yCisgKiBpbXBsZW1lbnRhdGlvbi4KKyAqLworc3RhdGljIGlubGluZSBzNjQKK2lhNjRfcGFsX3ZtX2luZm8gKHU2NCB0Y19sZXZlbCwgdTY0IHRjX3R5cGUsICBwYWxfdGNfaW5mb191X3QgKnRjX2luZm8sIHU2NCAqdGNfcGFnZXMpCit7CisJc3RydWN0IGlhNjRfcGFsX3JldHZhbCBpcHJ2OworCVBBTF9DQUxMKGlwcnYsIFBBTF9WTV9JTkZPLCB0Y19sZXZlbCwgdGNfdHlwZSwgMCk7CisJaWYgKHRjX2luZm8pCisJCXRjX2luZm8tPnB0aV92YWwgPSBpcHJ2LnYwOworCWlmICh0Y19wYWdlcykKKwkJKnRjX3BhZ2VzID0gaXBydi52MTsKKwlyZXR1cm4gaXBydi5zdGF0dXM7Cit9CisKKy8qIEdldCBwYWdlIHNpemUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHZpcnR1YWwgbWVtb3J5IGNoYXJhY3RlcmlzdGljcyBvZiB0aGUgcHJvY2Vzc29yCisgKiBpbXBsZW1lbnRhdGlvbi4KKyAqLworc3RhdGljIGlubGluZSBzNjQKK2lhNjRfcGFsX3ZtX3BhZ2Vfc2l6ZSAodTY0ICp0cl9wYWdlcywgdTY0ICp2d19wYWdlcykKK3sKKwlzdHJ1Y3QgaWE2NF9wYWxfcmV0dmFsIGlwcnY7CisJUEFMX0NBTEwoaXBydiwgUEFMX1ZNX1BBR0VfU0laRSwgMCwgMCwgMCk7CisJaWYgKHRyX3BhZ2VzKQorCQkqdHJfcGFnZXMgPSBpcHJ2LnYwOworCWlmICh2d19wYWdlcykKKwkJKnZ3X3BhZ2VzID0gaXBydi52MTsKKwlyZXR1cm4gaXBydi5zdGF0dXM7Cit9CisKK3R5cGVkZWYgdW5pb24gcGFsX3ZtX2luZm9fMV91IHsKKwl1NjQJCQlwdmkxX3ZhbDsKKwlzdHJ1Y3QgeworCQl1NjQJCXZ3CQk6IDEsCisJCQkJcGh5c19hZGRfc2l6ZQk6IDcsCisJCQkJa2V5X3NpemUJOiA4LAorCQkJCW1heF9wa3IJCTogOCwKKwkJCQloYXNoX3RhZ19pZAk6IDgsCisJCQkJbWF4X2R0cl9lbnRyeQk6IDgsCisJCQkJbWF4X2l0cl9lbnRyeQk6IDgsCisJCQkJbWF4X3VuaXF1ZV90Y3MJOiA4LAorCQkJCW51bV90Y19sZXZlbHMJOiA4OworCX0gcGFsX3ZtX2luZm9fMV9zOworfSBwYWxfdm1faW5mb18xX3VfdDsKKwordHlwZWRlZiB1bmlvbiBwYWxfdm1faW5mb18yX3UgeworCXU2NAkJCXB2aTJfdmFsOworCXN0cnVjdCB7CisJCXU2NAkJaW1wbF92YV9tc2IJOiA4LAorCQkJCXJpZF9zaXplCTogOCwKKwkJCQlyZXNlcnZlZAk6IDQ4OworCX0gcGFsX3ZtX2luZm9fMl9zOworfSBwYWxfdm1faW5mb18yX3VfdDsKKworLyogR2V0IHN1bW1hcnkgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHZpcnR1YWwgbWVtb3J5IGNoYXJhY3RlcmlzdGljcyBvZiB0aGUgcHJvY2Vzc29yCisgKiBpbXBsZW1lbnRhdGlvbi4KKyAqLworc3RhdGljIGlubGluZSBzNjQKK2lhNjRfcGFsX3ZtX3N1bW1hcnkgKHBhbF92bV9pbmZvXzFfdV90ICp2bV9pbmZvXzEsIHBhbF92bV9pbmZvXzJfdV90ICp2bV9pbmZvXzIpCit7CisJc3RydWN0IGlhNjRfcGFsX3JldHZhbCBpcHJ2OworCVBBTF9DQUxMKGlwcnYsIFBBTF9WTV9TVU1NQVJZLCAwLCAwLCAwKTsKKwlpZiAodm1faW5mb18xKQorCQl2bV9pbmZvXzEtPnB2aTFfdmFsID0gaXBydi52MDsKKwlpZiAodm1faW5mb18yKQorCQl2bV9pbmZvXzItPnB2aTJfdmFsID0gaXBydi52MTsKKwlyZXR1cm4gaXBydi5zdGF0dXM7Cit9CisKK3R5cGVkZWYgdW5pb24gcGFsX2l0cl92YWxpZF91IHsKKwl1NjQJCQlwaXZfdmFsOworCXN0cnVjdCB7CisJICAgICAgIHU2NAkJYWNjZXNzX3JpZ2h0c192YWxpZAk6IDEsCisJCQkJcHJpdl9sZXZlbF92YWxpZAk6IDEsCisJCQkJZGlydHlfYml0X3ZhbGlkCQk6IDEsCisJCQkJbWVtX2F0dHJfdmFsaWQJCTogMSwKKwkJCQlyZXNlcnZlZAkJOiA2MDsKKwl9IHBhbF90cl92YWxpZF9zOworfSBwYWxfdHJfdmFsaWRfdV90OworCisvKiBSZWFkIGEgdHJhbnNsYXRpb24gcmVnaXN0ZXIgKi8KK3N0YXRpYyBpbmxpbmUgczY0CitpYTY0X3BhbF90cl9yZWFkICh1NjQgcmVnX251bSwgdTY0IHRyX3R5cGUsIHU2NCAqdHJfYnVmZmVyLCBwYWxfdHJfdmFsaWRfdV90ICp0cl92YWxpZCkKK3sKKwlzdHJ1Y3QgaWE2NF9wYWxfcmV0dmFsIGlwcnY7CisJUEFMX0NBTExfUEhZU19TVEsoaXBydiwgUEFMX1ZNX1RSX1JFQUQsIHJlZ19udW0sIHRyX3R5cGUsKHU2NClpYTY0X3RwYSh0cl9idWZmZXIpKTsKKwlpZiAodHJfdmFsaWQpCisJCXRyX3ZhbGlkLT5waXZfdmFsID0gaXBydi52MDsKKwlyZXR1cm4gaXBydi5zdGF0dXM7Cit9CisKKy8qCisgKiBQQUxfUFJFRkVUQ0hfVklTSUJJTElUWSB0cmFuc2FjdGlvbiB0eXBlcworICovCisjZGVmaW5lIFBBTF9WSVNJQklMSVRZX1ZJUlRVQUwJCTAKKyNkZWZpbmUgUEFMX1ZJU0lCSUxJVFlfUEhZU0lDQUwJCTEKKworLyoKKyAqIFBBTF9QUkVGRVRDSF9WSVNJQklMSVRZIHJldHVybiBjb2RlcworICovCisjZGVmaW5lIFBBTF9WSVNJQklMSVRZX09LCQkxCisjZGVmaW5lIFBBTF9WSVNJQklMSVRZX09LX1JFTU9URV9ORUVERUQJMAorI2RlZmluZSBQQUxfVklTSUJJTElUWV9JTlZBTF9BUkcJLTIKKyNkZWZpbmUgUEFMX1ZJU0lCSUxJVFlfRVJST1IJCS0zCisKK3N0YXRpYyBpbmxpbmUgczY0CitpYTY0X3BhbF9wcmVmZXRjaF92aXNpYmlsaXR5IChzNjQgdHJhbnNfdHlwZSkKK3sKKwlzdHJ1Y3QgaWE2NF9wYWxfcmV0dmFsIGlwcnY7CisJUEFMX0NBTEwoaXBydiwgUEFMX1BSRUZFVENIX1ZJU0lCSUxJVFksIHRyYW5zX3R5cGUsIDAsIDApOworCXJldHVybiBpcHJ2LnN0YXR1czsKK30KKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYgLyogX0FTTV9JQTY0X1BBTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3BhcmFtLmggYi9pbmNsdWRlL2FzbS1pYTY0L3BhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM2YjY3OQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvcGFyYW0uaApAQCAtMCwwICsxLDQyIEBACisjaWZuZGVmIF9BU01fSUE2NF9QQVJBTV9ICisjZGVmaW5lIF9BU01fSUE2NF9QQVJBTV9ICisKKy8qCisgKiBGdW5kYW1lbnRhbCBrZXJuZWwgcGFyYW1ldGVycy4KKyAqCisgKiBCYXNlZCBvbiA8YXNtLWkzODYvcGFyYW0uaD4uCisgKgorICogTW9kaWZpZWQgMTk5OCwgMTk5OSwgMjAwMi0yMDAzCisgKglEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+LCBIZXdsZXR0LVBhY2thcmQgQ28KKyAqLworCisjZGVmaW5lIEVYRUNfUEFHRVNJWkUJNjU1MzYKKworI2lmbmRlZiBOT0dST1VQCisjIGRlZmluZSBOT0dST1VQCSgtMSkKKyNlbmRpZgorCisjZGVmaW5lIE1BWEhPU1ROQU1FTEVOCTY0CS8qIG1heCBsZW5ndGggb2YgaG9zdG5hbWUgKi8KKworI2lmZGVmIF9fS0VSTkVMX18KKyMgaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CS8qIG11c3RuJ3QgaW5jbHVkZSA8bGludXgvY29uZmlnLmg+IG91dHNpZGUgb2YgI2lmZGVmIF9fS0VSTkVMX18gKi8KKyMgaWZkZWYgQ09ORklHX0lBNjRfSFBfU0lNCisgIC8qCisgICAqIFllYWgsIHNpbXVsYXRpbmcgc3R1ZmYgaXMgc2xvdywgc28gbGV0IHVzIGNhdGNoIHNvbWUgYnJlYXRoIGJldHdlZW4KKyAgICogdGltZXIgaW50ZXJydXB0cy4uLgorICAgKi8KKyMgIGRlZmluZSBIWgkgIDMyCisjIGVsc2UKKyMgIGRlZmluZSBIWgkxMDI0CisjIGVuZGlmCisjIGRlZmluZSBVU0VSX0haCUhaCisjIGRlZmluZSBDTE9DS1NfUEVSX1NFQwlIWgkvKiBmcmVxdWVuY3kgYXQgd2hpY2ggdGltZXMoKSBjb3VudHMgKi8KKyNlbHNlCisgICAvKgorICAgICogVGVjaG5pY2FsbHksIHRoaXMgaXMgd3JvbmcsIGJ1dCBzb21lIG9sZCBhcHBzIHN0aWxsIHJlZmVyIHRvIGl0LiAgVGhlIHByb3BlciB3YXkgdG8KKyAgICAqIGdldCB0aGUgSFogdmFsdWUgaXMgdmlhIHN5c2NvbmYoX1NDX0NMS19UQ0spLgorICAgICovCisjIGRlZmluZSBIWiAxMDI0CisjZW5kaWYKKworI2VuZGlmIC8qIF9BU01fSUE2NF9QQVJBTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3BhcnBvcnQuaCBiL2luY2x1ZGUvYXNtLWlhNjQvcGFycG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3ZTE2YWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3BhcnBvcnQuaApAQCAtMCwwICsxLDIwIEBACisvKgorICogcGFycG9ydC5oOiBwbGF0Zm9ybS1zcGVjaWZpYyBQQy1zdHlsZSBwYXJwb3J0IGluaXRpYWxpc2F0aW9uCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwICBUaW0gV2F1Z2ggPHRpbUBjeWJlcmVsay5kZW1vbi5jby51az4KKyAqCisgKiBUaGlzIGZpbGUgc2hvdWxkIG9ubHkgYmUgaW5jbHVkZWQgYnkgZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfcGMuYy4KKyAqLworCisjaWZuZGVmIF9BU01fSUE2NF9QQVJQT1JUX0gKKyNkZWZpbmUgX0FTTV9JQTY0X1BBUlBPUlRfSCAxCisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHBhcnBvcnRfcGNfZmluZF9pc2FfcG9ydHMgKGludCBhdXRvaXJxLCBpbnQgYXV0b2RtYSk7CisKK3N0YXRpYyBpbnQgX19kZXZpbml0CitwYXJwb3J0X3BjX2ZpbmRfbm9ucGNpX3BvcnRzIChpbnQgYXV0b2lycSwgaW50IGF1dG9kbWEpCit7CisJcmV0dXJuIHBhcnBvcnRfcGNfZmluZF9pc2FfcG9ydHMoYXV0b2lycSwgYXV0b2RtYSk7Cit9CisKKyNlbmRpZiAvKiBfQVNNX0lBNjRfUEFSUE9SVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3BhdGNoLmggYi9pbmNsdWRlL2FzbS1pYTY0L3BhdGNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc5N2YzNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvcGF0Y2guaApAQCAtMCwwICsxLDI1IEBACisjaWZuZGVmIF9BU01fSUE2NF9QQVRDSF9ICisjZGVmaW5lIF9BU01fSUE2NF9QQVRDSF9ICisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgSGV3bGV0dC1QYWNrYXJkIENvCisgKglEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+CisgKgorICogVGhlcmUgYXJlIGEgbnVtYmVyIG9mIHJlYXNvbnMgZm9yIHBhdGNoaW5nIGluc3RydWN0aW9ucy4gIFJhdGhlciB0aGFuIGR1cGxpY2F0aW5nIGNvZGUKKyAqIGFsbCBvdmVyIHRoZSBwbGFjZSwgd2UgcHV0IHRoZSBjb21tb24gc3R1ZmYgaGVyZS4gIFJlYXNvbnMgZm9yIHBhdGNoaW5nOiBpbi1rZXJuZWwKKyAqIG1vZHVsZS1sb2FkZXIsIHZpcnR1YWwtdG8tcGh5c2ljYWwgcGF0Y2gtbGlzdCwgTWNLaW5sZXkgRXJyYXRhIDkgd29ya2Fyb3VuZCwgYW5kIGdhdGUKKyAqIHNoYXJlZCBsaWJyYXJ5LiAgVW5kb3VidGVkbHksIHNvbWUgb2YgdGhlc2UgcmVhc29ucyB3aWxsIGRpc2FwcGVhciBhbmQgb3RoZXJzIHdpbGwKKyAqIGJlIGFkZGVkIG92ZXIgdGltZS4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2VsZi5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK2V4dGVybiB2b2lkIGlhNjRfcGF0Y2ggKHU2NCBpbnNuX2FkZHIsIHU2NCBtYXNrLCB1NjQgdmFsKTsJLyogcGF0Y2ggYW55IGluc24gc2xvdCAqLworZXh0ZXJuIHZvaWQgaWE2NF9wYXRjaF9pbW02NCAodTY0IGluc25fYWRkciwgdTY0IHZhbCk7CQkvKiBwYXRjaCAibW92bCIgdy9hYnMuIHZhbHVlKi8KK2V4dGVybiB2b2lkIGlhNjRfcGF0Y2hfaW1tNjAgKHU2NCBpbnNuX2FkZHIsIHU2NCB2YWwpOwkJLyogcGF0Y2ggImJybCIgdy9pcC1yZWwgdmFsdWUgKi8KKworZXh0ZXJuIHZvaWQgaWE2NF9wYXRjaF9tY2tpbmxleV9lOSAodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpOworZXh0ZXJuIHZvaWQgaWE2NF9wYXRjaF92dG9wICh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7CitleHRlcm4gdm9pZCBpYTY0X3BhdGNoX2dhdGUgKHZvaWQpOworCisjZW5kaWYgLyogX0FTTV9JQTY0X1BBVENIX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvcGNpLmggYi9pbmNsdWRlL2FzbS1pYTY0L3BjaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4MzE0ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3BjaS5oCkBAIC0wLDAgKzEsMTQxIEBACisjaWZuZGVmIF9BU01fSUE2NF9QQ0lfSAorI2RlZmluZSBfQVNNX0lBNjRfUENJX0gKKworI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9zY2F0dGVybGlzdC5oPgorCisvKgorICogQ2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIGxvZ2ljIGluIHBjaV9zY2FuX2J1cyBmb3Igc2tpcHBpbmcgYWxyZWFkeS1jb25maWd1cmVkIGJ1cworICogbnVtYmVycyAtIHRvIGJlIHVzZWQgZm9yIGJ1Z2d5IEJJT1NlcyBvciBhcmNoaXRlY3R1cmVzIHdpdGggaW5jb21wbGV0ZSBQQ0kgc2V0dXAgYnkgdGhlCisgKiBsb2FkZXIuCisgKi8KKyNkZWZpbmUgcGNpYmlvc19hc3NpZ25fYWxsX2J1c3NlcygpICAgICAwCisjZGVmaW5lIHBjaWJpb3Nfc2Nhbl9hbGxfZm5zKGEsIGIpCTAKKworI2RlZmluZSBQQ0lCSU9TX01JTl9JTwkJMHgxMDAwCisjZGVmaW5lIFBDSUJJT1NfTUlOX01FTQkJMHgxMDAwMDAwMAorCit2b2lkIHBjaWJpb3NfY29uZmlnX2luaXQodm9pZCk7CisKK3N0cnVjdCBwY2lfZGV2OworCisvKgorICogUENJX0RNQV9CVVNfSVNfUEhZUyBzaG91bGQgYmUgc2V0IHRvIDEgaWYgdGhlcmUgaXMgX25lY2Vzc2FyaWx5XyBhIGRpcmVjdCBjb3JyZXNwb25kZW5jZQorICogYmV0d2VlbiBkZXZpY2UgYnVzIGFkZHJlc3NlcyBhbmQgQ1BVIHBoeXNpY2FsIGFkZHJlc3Nlcy4gIFBsYXRmb3JtcyB3aXRoIGEgaGFyZHdhcmUgSS9PCisgKiBNTVUgX211c3RfIHR1cm4gdGhpcyBvZmYgdG8gc3VwcHJlc3MgdGhlIGJvdW5jZSBidWZmZXIgaGFuZGxpbmcgY29kZSBpbiB0aGUgYmxvY2sgYW5kCisgKiBuZXR3b3JrIGRldmljZSBsYXllcnMuICBQbGF0Zm9ybXMgd2l0aCBzZXBhcmF0ZSBidXMgYWRkcmVzcyBzcGFjZXMgX211c3RfIHR1cm4gdGhpcyBvZmYKKyAqIGFuZCBwcm92aWRlIGEgZGV2aWNlIERNQSBtYXBwaW5nIGltcGxlbWVudGF0aW9uIHRoYXQgdGFrZXMgY2FyZSBvZiB0aGUgbmVjZXNzYXJ5CisgKiBhZGRyZXNzIHRyYW5zbGF0aW9uLgorICoKKyAqIEZvciBub3csIHRoZSBpYTY0IHBsYXRmb3JtcyB3aGljaCBtYXkgaGF2ZSBzZXBhcmF0ZS9tdWx0aXBsZSBidXMgYWRkcmVzcyBzcGFjZXMgYWxsCisgKiBoYXZlIEkvTyBNTVVzIHdoaWNoIHN1cHBvcnQgdGhlIG1lcmdpbmcgb2YgcGh5c2ljYWxseSBkaXNjb250aWd1b3VzIGJ1ZmZlcnMsIHNvIHdlIGNhbgorICogdXNlIHRoYXQgYXMgdGhlIHNvbGUgZmFjdG9yIHRvIGRldGVybWluZSB0aGUgc2V0dGluZyBvZiBQQ0lfRE1BX0JVU19JU19QSFlTLgorICovCitleHRlcm4gdW5zaWduZWQgbG9uZyBpYTY0X21heF9pb21tdV9tZXJnZV9tYXNrOworI2RlZmluZSBQQ0lfRE1BX0JVU19JU19QSFlTCShpYTY0X21heF9pb21tdV9tZXJnZV9tYXNrID09IH4wVUwpCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcGNpYmlvc19zZXRfbWFzdGVyIChzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCS8qIE5vIHNwZWNpYWwgYnVzIG1hc3RlcmluZyBzZXR1cCBoYW5kbGluZyAqLworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3BjaWJpb3NfcGVuYWxpemVfaXNhX2lycSAoaW50IGlycSkKK3sKKwkvKiBXZSBkb24ndCBkbyBkeW5hbWljIFBDSSBJUlEgYWxsb2NhdGlvbiAqLworfQorCisjZGVmaW5lIEhBVkVfQVJDSF9QQ0lfTVdJIDEKK2V4dGVybiBpbnQgcGNpYmlvc19wcmVwX213aSAoc3RydWN0IHBjaV9kZXYgKik7CisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wY2ktZG1hLWNvbXBhdC5oPgorCisvKiBwY2lfdW5tYXBfe3NpbmdsZSxwYWdlfSBpcyBub3QgYSBub3AsIHRodXMuLi4gKi8KKyNkZWZpbmUgREVDTEFSRV9QQ0lfVU5NQVBfQUREUihBRERSX05BTUUpCVwKKwlkbWFfYWRkcl90IEFERFJfTkFNRTsKKyNkZWZpbmUgREVDTEFSRV9QQ0lfVU5NQVBfTEVOKExFTl9OQU1FKQkJXAorCV9fdTMyIExFTl9OQU1FOworI2RlZmluZSBwY2lfdW5tYXBfYWRkcihQVFIsIEFERFJfTkFNRSkJCQlcCisJKChQVFIpLT5BRERSX05BTUUpCisjZGVmaW5lIHBjaV91bm1hcF9hZGRyX3NldChQVFIsIEFERFJfTkFNRSwgVkFMKQkJXAorCSgoKFBUUiktPkFERFJfTkFNRSkgPSAoVkFMKSkKKyNkZWZpbmUgcGNpX3VubWFwX2xlbihQVFIsIExFTl9OQU1FKQkJCVwKKwkoKFBUUiktPkxFTl9OQU1FKQorI2RlZmluZSBwY2lfdW5tYXBfbGVuX3NldChQVFIsIExFTl9OQU1FLCBWQUwpCQlcCisJKCgoUFRSKS0+TEVOX05BTUUpID0gKFZBTCkpCisKKy8qIFRoZSBpYTY0IHBsYXRmb3JtIGFsd2F5cyBzdXBwb3J0cyA2NC1iaXQgYWRkcmVzc2luZy4gKi8KKyNkZWZpbmUgcGNpX2RhY19kbWFfc3VwcG9ydGVkKHBjaV9kZXYsIG1hc2spCQkoMSkKKyNkZWZpbmUgcGNpX2RhY19wYWdlX3RvX2RtYShkZXYscGcsb2ZmLGRpcikJCSgoZG1hX2FkZHJfdCkgcGFnZV90b19idXMocGcpICsgKG9mZikpCisjZGVmaW5lIHBjaV9kYWNfZG1hX3RvX3BhZ2UoZGV2LGRtYV9hZGRyKQkJKHZpcnRfdG9fcGFnZShidXNfdG9fdmlydChkbWFfYWRkcikpKQorI2RlZmluZSBwY2lfZGFjX2RtYV90b19vZmZzZXQoZGV2LGRtYV9hZGRyKQkJb2Zmc2V0X2luX3BhZ2UoZG1hX2FkZHIpCisjZGVmaW5lIHBjaV9kYWNfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoZGV2LGRtYV9hZGRyLGxlbixkaXIpCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgcGNpX2RhY19kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShkZXYsZG1hX2FkZHIsbGVuLGRpcikJZG8geyBtYigpOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIHNnX2RtYV9sZW4oc2cpCQkoKHNnKS0+ZG1hX2xlbmd0aCkKKyNkZWZpbmUgc2dfZG1hX2FkZHJlc3Moc2cpCSgoc2cpLT5kbWFfYWRkcmVzcykKKworI2RlZmluZSBIQVZFX1BDSV9NTUFQCitleHRlcm4gaW50IHBjaV9tbWFwX3BhZ2VfcmFuZ2UgKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJCWVudW0gcGNpX21tYXBfc3RhdGUgbW1hcF9zdGF0ZSwgaW50IHdyaXRlX2NvbWJpbmUpOworI2RlZmluZSBIQVZFX1BDSV9MRUdBQ1kKK2V4dGVybiBpbnQgcGNpX21tYXBfbGVnYWN5X3BhZ2VfcmFuZ2Uoc3RydWN0IHBjaV9idXMgKmJ1cywKKwkJCQkgICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7CitleHRlcm4gc3NpemVfdCBwY2lfcmVhZF9sZWdhY3lfaW8oc3RydWN0IGtvYmplY3QgKmtvYmosIGNoYXIgKmJ1ZiwgbG9mZl90IG9mZiwKKwkJCQkgIHNpemVfdCBjb3VudCk7CitleHRlcm4gc3NpemVfdCBwY2lfd3JpdGVfbGVnYWN5X2lvKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBjaGFyICpidWYsIGxvZmZfdCBvZmYsCisJCQkJICAgc2l6ZV90IGNvdW50KTsKK2V4dGVybiBpbnQgcGNpX21tYXBfbGVnYWN5X21lbShzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJCSAgICAgICBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7CisKKyNkZWZpbmUgcGNpX2dldF9sZWdhY3lfbWVtIHBsYXRmb3JtX3BjaV9nZXRfbGVnYWN5X21lbQorI2RlZmluZSBwY2lfbGVnYWN5X3JlYWQgcGxhdGZvcm1fcGNpX2xlZ2FjeV9yZWFkCisjZGVmaW5lIHBjaV9sZWdhY3lfd3JpdGUgcGxhdGZvcm1fcGNpX2xlZ2FjeV93cml0ZQorCitzdHJ1Y3QgcGNpX3dpbmRvdyB7CisJc3RydWN0IHJlc291cmNlIHJlc291cmNlOworCXU2NCBvZmZzZXQ7Cit9OworCitzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgeworCXZvaWQgKmFjcGlfaGFuZGxlOworCXZvaWQgKmlvbW11OworCWludCBzZWdtZW50OworCisJdW5zaWduZWQgaW50IHdpbmRvd3M7CisJc3RydWN0IHBjaV93aW5kb3cgKndpbmRvdzsKKworCXZvaWQgKnBsYXRmb3JtX2RhdGE7Cit9OworCisjZGVmaW5lIFBDSV9DT05UUk9MTEVSKGJ1c2RldikgKChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKikgYnVzZGV2LT5zeXNkYXRhKQorI2RlZmluZSBwY2lfZG9tYWluX25yKGJ1c2RldikgICAgKFBDSV9DT05UUk9MTEVSKGJ1c2RldiktPnNlZ21lbnQpCisKK2V4dGVybiBzdHJ1Y3QgcGNpX29wcyBwY2lfcm9vdF9vcHM7CisKK3N0YXRpYyBpbmxpbmUgaW50IHBjaV9wcm9jX2RvbWFpbihzdHJ1Y3QgcGNpX2J1cyAqYnVzKQoreworCXJldHVybiAocGNpX2RvbWFpbl9ucihidXMpICE9IDApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGNpYmlvc19hZGRfcGxhdGZvcm1fZW50cmllcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworfQorCitleHRlcm4gdm9pZCBwY2liaW9zX3Jlc291cmNlX3RvX2J1cyhzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQlzdHJ1Y3QgcGNpX2J1c19yZWdpb24gKnJlZ2lvbiwgc3RydWN0IHJlc291cmNlICpyZXMpOworCitleHRlcm4gdm9pZCBwY2liaW9zX2J1c190b19yZXNvdXJjZShzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQlzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgc3RydWN0IHBjaV9idXNfcmVnaW9uICpyZWdpb24pOworCisjZGVmaW5lIHBjaWJpb3Nfc2Nhbl9hbGxfZm5zKGEsIGIpCTAKKworI2VuZGlmIC8qIF9BU01fSUE2NF9QQ0lfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9wZXJjcHUuaCBiL2luY2x1ZGUvYXNtLWlhNjQvcGVyY3B1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU4N2YxOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvcGVyY3B1LmgKQEAgLTAsMCArMSw3MiBAQAorI2lmbmRlZiBfQVNNX0lBNjRfUEVSQ1BVX0gKKyNkZWZpbmUgX0FTTV9JQTY0X1BFUkNQVV9ICisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAwMyBIZXdsZXR0LVBhY2thcmQgQ28KKyAqCURhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4KKyAqLworCisjZGVmaW5lIFBFUkNQVV9FTk9VR0hfUk9PTSBQRVJDUFVfUEFHRV9TSVpFCisKKyNpZmRlZiBfX0FTU0VNQkxZX18KKyMgZGVmaW5lIFRISVNfQ1BVKHZhcikJKHBlcl9jcHVfXyMjdmFyKSAgLyogdXNlIHRoaXMgdG8gbWFyayBhY2Nlc3NlcyB0byBwZXItQ1BVIHZhcmlhYmxlcy4uLiAqLworI2Vsc2UgLyogIV9fQVNTRU1CTFlfXyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisKKyNpZmRlZiBIQVZFX01PREVMX1NNQUxMX0FUVFJJQlVURQorIyBkZWZpbmUgX19TTUFMTF9BRERSX0FSRUEJX19hdHRyaWJ1dGVfXygoX19tb2RlbF9fIChfX3NtYWxsX18pKSkKKyNlbHNlCisjIGRlZmluZSBfX1NNQUxMX0FERFJfQVJFQQorI2VuZGlmCisKKyNkZWZpbmUgREVDTEFSRV9QRVJfQ1BVKHR5cGUsIG5hbWUpCQkJCVwKKwlleHRlcm4gX19TTUFMTF9BRERSX0FSRUEgX190eXBlb2ZfXyh0eXBlKSBwZXJfY3B1X18jI25hbWUKKworLyogU2VwYXJhdGUgb3V0IHRoZSB0eXBlLCBzbyAoaW50WzNdLCBmb28pIHdvcmtzLiAqLworI2RlZmluZSBERUZJTkVfUEVSX0NQVSh0eXBlLCBuYW1lKQkJCQlcCisJX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIi5kYXRhLnBlcmNwdSIpKSkJCVwKKwlfX1NNQUxMX0FERFJfQVJFQSBfX3R5cGVvZl9fKHR5cGUpIHBlcl9jcHVfXyMjbmFtZQorCisvKgorICogUHJldHR5IG11Y2ggYSBsaXRlcmFsIGNvcHkgb2YgYXNtLWdlbmVyaWMvcGVyY3B1LmgsIGV4Y2VwdCB0aGF0IHBlcmNwdV9tb2Rjb3B5KCkgaXMgYW4KKyAqIGV4dGVybmFsIHJvdXRpbmUsIHRvIGF2b2lkIGluY2x1ZGUtaGVsbC4KKyAqLworI2lmZGVmIENPTkZJR19TTVAKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19wZXJfY3B1X29mZnNldFtOUl9DUFVTXTsKKworLyogRXF1YWwgdG8gX19wZXJfY3B1X29mZnNldFtzbXBfcHJvY2Vzc29yX2lkKCldLCBidXQgZmFzdGVyIHRvIGFjY2VzczogKi8KK0RFQ0xBUkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCBsb2NhbF9wZXJfY3B1X29mZnNldCk7CisKKyNkZWZpbmUgcGVyX2NwdSh2YXIsIGNwdSkgICgqUkVMT0NfSElERSgmcGVyX2NwdV9fIyN2YXIsIF9fcGVyX2NwdV9vZmZzZXRbY3B1XSkpCisjZGVmaW5lIF9fZ2V0X2NwdV92YXIodmFyKSAoKlJFTE9DX0hJREUoJnBlcl9jcHVfXyMjdmFyLCBfX2lhNjRfcGVyX2NwdV92YXIobG9jYWxfcGVyX2NwdV9vZmZzZXQpKSkKKworZXh0ZXJuIHZvaWQgcGVyY3B1X21vZGNvcHkodm9pZCAqcGNwdWRzdCwgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBsb25nIHNpemUpOworZXh0ZXJuIHZvaWQgc2V0dXBfcGVyX2NwdV9hcmVhcyAodm9pZCk7CitleHRlcm4gdm9pZCAqcGVyX2NwdV9pbml0KHZvaWQpOworCisjZWxzZSAvKiAhIFNNUCAqLworCisjZGVmaW5lIHBlcl9jcHUodmFyLCBjcHUpCQkJKCooKHZvaWQpY3B1LCAmcGVyX2NwdV9fIyN2YXIpKQorI2RlZmluZSBfX2dldF9jcHVfdmFyKHZhcikJCQlwZXJfY3B1X18jI3ZhcgorI2RlZmluZSBwZXJfY3B1X2luaXQoKQkJCQkoX19waHlzX3Blcl9jcHVfc3RhcnQpCisKKyNlbmRpZgkvKiBTTVAgKi8KKworI2RlZmluZSBFWFBPUlRfUEVSX0NQVV9TWU1CT0wodmFyKQkJRVhQT1JUX1NZTUJPTChwZXJfY3B1X18jI3ZhcikKKyNkZWZpbmUgRVhQT1JUX1BFUl9DUFVfU1lNQk9MX0dQTCh2YXIpCQlFWFBPUlRfU1lNQk9MX0dQTChwZXJfY3B1X18jI3ZhcikKKworLyoKKyAqIEJlIGV4dHJlbWVseSBjYXJlZnVsIHdoZW4gdGFraW5nIHRoZSBhZGRyZXNzIG9mIHRoaXMgdmFyaWFibGUhICBEdWUgdG8gdmlydHVhbAorICogcmVtYXBwaW5nLCBpdCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgY2Fub25pY2FsIGFkZHJlc3MgcmV0dXJuZWQgYnkgX19nZXRfY3B1X3Zhcih2YXIpIQorICogT24gdGhlIHBvc2l0aXZlIHNpZGUsIHVzaW5nIF9faWE2NF9wZXJfY3B1X3ZhcigpIGluc3RlYWQgb2YgX19nZXRfY3B1X3ZhcigpIGlzIHNsaWdodGx5CisgKiBtb3JlIGVmZmljaWVudC4KKyAqLworI2RlZmluZSBfX2lhNjRfcGVyX2NwdV92YXIodmFyKQkocGVyX2NwdV9fIyN2YXIpCisKKyNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiBfQVNNX0lBNjRfUEVSQ1BVX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvcGVyZm1vbi5oIGIvaW5jbHVkZS9hc20taWE2NC9wZXJmbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM2YzYwZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvcGVyZm1vbi5oCkBAIC0wLDAgKzEsMjU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMDMgSGV3bGV0dC1QYWNrYXJkIENvCisgKiAgICAgICAgICAgICAgIFN0ZXBoYW5lIEVyYW5pYW4gPGVyYW5pYW5AaHBsLmhwLmNvbT4KKyAqLworCisjaWZuZGVmIF9BU01fSUE2NF9QRVJGTU9OX0gKKyNkZWZpbmUgX0FTTV9JQTY0X1BFUkZNT05fSAorCisvKgorICogcGVyZm1vbiBjb21hbW5kcyBzdXBwb3J0ZWQgb24gYWxsIENQVSBtb2RlbHMKKyAqLworI2RlZmluZSBQRk1fV1JJVEVfUE1DUwkJMHgwMQorI2RlZmluZSBQRk1fV1JJVEVfUE1EUwkJMHgwMgorI2RlZmluZSBQRk1fUkVBRF9QTURTCQkweDAzCisjZGVmaW5lIFBGTV9TVE9QCQkweDA0CisjZGVmaW5lIFBGTV9TVEFSVAkJMHgwNQorI2RlZmluZSBQRk1fRU5BQkxFCQkweDA2IC8qIG9ic29sZXRlICovCisjZGVmaW5lIFBGTV9ESVNBQkxFCQkweDA3IC8qIG9ic29sZXRlICovCisjZGVmaW5lIFBGTV9DUkVBVEVfQ09OVEVYVAkweDA4CisjZGVmaW5lIFBGTV9ERVNUUk9ZX0NPTlRFWFQJMHgwOSAvKiBvYnNvbGV0ZSB1c2UgY2xvc2UoKSAqLworI2RlZmluZSBQRk1fUkVTVEFSVAkJMHgwYQorI2RlZmluZSBQRk1fUFJPVEVDVF9DT05URVhUCTB4MGIgLyogb2Jzb2xldGUgKi8KKyNkZWZpbmUgUEZNX0dFVF9GRUFUVVJFUwkweDBjCisjZGVmaW5lIFBGTV9ERUJVRwkJMHgwZAorI2RlZmluZSBQRk1fVU5QUk9URUNUX0NPTlRFWFQJMHgwZSAvKiBvYnNvbGV0ZSAqLworI2RlZmluZSBQRk1fR0VUX1BNQ19SRVNFVF9WQUwJMHgwZgorI2RlZmluZSBQRk1fTE9BRF9DT05URVhUCTB4MTAKKyNkZWZpbmUgUEZNX1VOTE9BRF9DT05URVhUCTB4MTEKKworLyoKKyAqIFBNVSBtb2RlbCBzcGVjaWZpYyBjb21tYW5kcyAobWF5IG5vdCBiZSBzdXBwb3J0ZWQgb24gYWxsIFBNVSBtb2RlbHMpCisgKi8KKyNkZWZpbmUgUEZNX1dSSVRFX0lCUlMJCTB4MjAKKyNkZWZpbmUgUEZNX1dSSVRFX0RCUlMJCTB4MjEKKworLyoKKyAqIGNvbnRleHQgZmxhZ3MKKyAqLworI2RlZmluZSBQRk1fRkxfTk9USUZZX0JMT0NLICAgIAkgMHgwMQkvKiBibG9jayB0YXNrIG9uIHVzZXIgbGV2ZWwgbm90aWZpY2F0aW9ucyAqLworI2RlZmluZSBQRk1fRkxfU1lTVEVNX1dJREUJIDB4MDIJLyogY3JlYXRlIGEgc3lzdGVtIHdpZGUgY29udGV4dCAqLworI2RlZmluZSBQRk1fRkxfT1ZGTF9OT19NU0cJIDB4ODAgICAvKiBkbyBub3QgcG9zdCBvdmVyZmxvdy9lbmQgbWVzc2FnZXMgZm9yIG5vdGlmaWNhdGlvbiAqLworCisvKgorICogZXZlbnQgc2V0IGZsYWdzCisgKi8KKyNkZWZpbmUgUEZNX1NFVEZMX0VYQ0xfSURMRSAgICAgIDB4MDEgICAvKiBleGNsdWRlIGlkbGUgdGFzayAoc3lzd2lkZSBvbmx5KSBYWFg6IERPIE5PVCBVU0UgWUVUICovCisKKy8qCisgKiBQTUMgZmxhZ3MKKyAqLworI2RlZmluZSBQRk1fUkVHRkxfT1ZGTF9OT1RJRlkJMHgxCS8qIHNlbmQgbm90aWZpY2F0aW9uIG9uIG92ZXJmbG93ICovCisjZGVmaW5lIFBGTV9SRUdGTF9SQU5ET00JMHgyCS8qIHJhbmRvbWl6ZSBzYW1wbGluZyBpbnRlcnZhbCAgICovCisKKy8qCisgKiBQTUQvUE1DL0lCUi9EQlIgcmV0dXJuIGZsYWdzIChpZ25vcmVkIG9uIGlucHV0KQorICoKKyAqIFRob3NlIGZsYWdzIGFyZSB1c2VkIG9uIG91dHB1dCBhbmQgbXVzdCBiZSBjaGVja2VkIGluIGNhc2UgRUFHQUlOIGlzIHJldHVybmVkCisgKiBieSBhbnkgb2YgdGhlIGNhbGxzIHVzaW5nIGEgcGZhcmdfcmVnX3Qgb3IgcGZhcmdfZGJyZWdfdCBzdHJ1Y3R1cmUuCisgKi8KKyNkZWZpbmUgUEZNX1JFR19SRVRGTF9OT1RBVkFJTAkoMVVMPDwzMSkgLyogc2V0IGlmIHJlZ2lzdGVyIGlzIGltcGxlbWVudGVkIGJ1dCBub3QgYXZhaWxhYmxlICovCisjZGVmaW5lIFBGTV9SRUdfUkVURkxfRUlOVkFMCSgxVUw8PDMwKSAvKiBzZXQgaWYgcmVnaXN0ZXIgZW50cnkgaXMgaW52YWxpZCAqLworI2RlZmluZSBQRk1fUkVHX1JFVEZMX01BU0sJKFBGTV9SRUdfUkVURkxfTk9UQVZBSUx8UEZNX1JFR19SRVRGTF9FSU5WQUwpCisKKyNkZWZpbmUgUEZNX1JFR19IQVNfRVJST1IoZmxhZykJKCgoZmxhZykgJiBQRk1fUkVHX1JFVEZMX01BU0spICE9IDApCisKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBwZm1fdXVpZF90WzE2XTsJLyogY3VzdG9tIHNhbXBsaW5nIGJ1ZmZlciBpZGVudGlmaWVyIHR5cGUgKi8KKworLyoKKyAqIFJlcXVlc3Qgc3RydWN0dXJlIHVzZWQgdG8gZGVmaW5lIGEgY29udGV4dAorICovCit0eXBlZGVmIHN0cnVjdCB7CisJcGZtX3V1aWRfdCAgICAgY3R4X3NtcGxfYnVmX2lkOwkgLyogd2hpY2ggYnVmZmVyIGZvcm1hdCB0byB1c2UgKGlmIG5lZWRlZCkgKi8KKwl1bnNpZ25lZCBsb25nICBjdHhfZmxhZ3M7CSAvKiBub2Jsb2NrL2Jsb2NrICovCisJdW5zaWduZWQgc2hvcnQgY3R4X25leHRyYV9zZXRzOwkgLyogbnVtYmVyIG9mIGV4dHJhIGV2ZW50IHNldHMgKHlvdSBhbHdheXMgZ2V0IDEpICovCisJdW5zaWduZWQgc2hvcnQgY3R4X3Jlc2VydmVkMTsJIC8qIGZvciBmdXR1cmUgdXNlICovCisJaW50CSAgICAgICBjdHhfZmQ7CQkgLyogcmV0dXJuIGFyZzogdW5pcXVlIGlkZW50aWZpY2F0aW9uIGZvciBjb250ZXh0ICovCisJdm9pZAkgICAgICAgKmN0eF9zbXBsX3ZhZGRyOwkgLyogcmV0dXJuIGFyZzogdmlydHVhbCBhZGRyZXNzIG9mIHNhbXBsaW5nIGJ1ZmZlciwgaXMgdXNlZCAqLworCXVuc2lnbmVkIGxvbmcgIGN0eF9yZXNlcnZlZDJbMTFdOy8qIGZvciBmdXR1cmUgdXNlICovCit9IHBmYXJnX2NvbnRleHRfdDsKKworLyoKKyAqIFJlcXVlc3Qgc3RydWN0dXJlIHVzZWQgdG8gd3JpdGUvcmVhZCBhIFBNQyBvciBQTUQKKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludAlyZWdfbnVtOwkgICAvKiB3aGljaCByZWdpc3RlciAqLworCXVuc2lnbmVkIHNob3J0CXJlZ19zZXQ7CSAgIC8qIGV2ZW50IHNldCBmb3IgdGhpcyByZWdpc3RlciAqLworCXVuc2lnbmVkIHNob3J0CXJlZ19yZXNlcnZlZDE7CSAgIC8qIGZvciBmdXR1cmUgdXNlICovCisKKwl1bnNpZ25lZCBsb25nCXJlZ192YWx1ZTsJICAgLyogaW5pdGlhbCBwbWMvcG1kIHZhbHVlICovCisJdW5zaWduZWQgbG9uZwlyZWdfZmxhZ3M7CSAgIC8qIGlucHV0OiBwbWMvcG1kIGZsYWdzLCByZXR1cm46IHJlZyBlcnJvciAqLworCisJdW5zaWduZWQgbG9uZwlyZWdfbG9uZ19yZXNldDsJICAgLyogcmVzZXQgYWZ0ZXIgYnVmZmVyIG92ZXJmbG93IG5vdGlmaWNhdGlvbiAqLworCXVuc2lnbmVkIGxvbmcJcmVnX3Nob3J0X3Jlc2V0OyAgIC8qIHJlc2V0IGFmdGVyIGNvdW50ZXIgb3ZlcmZsb3cgKi8KKworCXVuc2lnbmVkIGxvbmcJcmVnX3Jlc2V0X3BtZHNbNF07IC8qIHdoaWNoIG90aGVyIGNvdW50ZXJzIHRvIHJlc2V0IG9uIG92ZXJmbG93ICovCisJdW5zaWduZWQgbG9uZwlyZWdfcmFuZG9tX3NlZWQ7ICAgLyogc2VlZCB2YWx1ZSB3aGVuIHJhbmRvbWl6YXRpb24gaXMgdXNlZCAqLworCXVuc2lnbmVkIGxvbmcJcmVnX3JhbmRvbV9tYXNrOyAgIC8qIGJpdG1hc2sgdXNlZCB0byBsaW1pdCByYW5kb20gdmFsdWUgKi8KKwl1bnNpZ25lZCBsb25nICAgcmVnX2xhc3RfcmVzZXRfdmFsOy8qIHJldHVybjogUE1EIGxhc3QgcmVzZXQgdmFsdWUgKi8KKworCXVuc2lnbmVkIGxvbmcJcmVnX3NtcGxfcG1kc1s0XTsgIC8qIHdoaWNoIHBtZHMgYXJlIGFjY2Vzc2VkIHdoZW4gUE1DIG92ZXJmbG93cyAqLworCXVuc2lnbmVkIGxvbmcJcmVnX3NtcGxfZXZlbnRpZDsgIC8qIG9wYXF1ZSBzYW1wbGluZyBldmVudCBpZGVudGlmaWVyICovCisKKwl1bnNpZ25lZCBsb25nICAgcmVnX3Jlc2VydmVkMlszXTsgICAvKiBmb3IgZnV0dXJlIHVzZSAqLworfSBwZmFyZ19yZWdfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludAlkYnJlZ19udW07CQkvKiB3aGljaCBkZWJ1ZyByZWdpc3RlciAqLworCXVuc2lnbmVkIHNob3J0CWRicmVnX3NldDsJCS8qIGV2ZW50IHNldCBmb3IgdGhpcyByZWdpc3RlciAqLworCXVuc2lnbmVkIHNob3J0CWRicmVnX3Jlc2VydmVkMTsJLyogZm9yIGZ1dHVyZSB1c2UgKi8KKwl1bnNpZ25lZCBsb25nCWRicmVnX3ZhbHVlOwkJLyogdmFsdWUgZm9yIGRlYnVnIHJlZ2lzdGVyICovCisJdW5zaWduZWQgbG9uZwlkYnJlZ19mbGFnczsJCS8qIHJldHVybjogZGJyZWcgZXJyb3IgKi8KKwl1bnNpZ25lZCBsb25nCWRicmVnX3Jlc2VydmVkMlsxXTsJLyogZm9yIGZ1dHVyZSB1c2UgKi8KK30gcGZhcmdfZGJyZWdfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludAlmdF92ZXJzaW9uOwkvKiBwZXJmbW9uOiBtYWpvciBbMTYtMzFdLCBtaW5vciBbMC0xNV0gKi8KKwl1bnNpZ25lZCBpbnQJZnRfcmVzZXJ2ZWQ7CS8qIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovCisJdW5zaWduZWQgbG9uZwlyZXNlcnZlZFs0XTsJLyogZm9yIGZ1dHVyZSB1c2UgKi8KK30gcGZhcmdfZmVhdHVyZXNfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXBpZF90CQlsb2FkX3BpZDsJICAgLyogcHJvY2VzcyB0byBsb2FkIHRoZSBjb250ZXh0IGludG8gKi8KKwl1bnNpZ25lZCBzaG9ydAlsb2FkX3NldDsJICAgLyogZmlyc3QgZXZlbnQgc2V0IHRvIGxvYWQgKi8KKwl1bnNpZ25lZCBzaG9ydAlsb2FkX3Jlc2VydmVkMTsJICAgLyogZm9yIGZ1dHVyZSB1c2UgKi8KKwl1bnNpZ25lZCBsb25nCWxvYWRfcmVzZXJ2ZWQyWzNdOyAvKiBmb3IgZnV0dXJlIHVzZSAqLworfSBwZmFyZ19sb2FkX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlpbnQJCW1zZ190eXBlOwkJLyogZ2VuZXJpYyBtZXNzYWdlIGhlYWRlciAqLworCWludAkJbXNnX2N0eF9mZDsJCS8qIGdlbmVyaWMgbWVzc2FnZSBoZWFkZXIgKi8KKwl1bnNpZ25lZCBsb25nCW1zZ19vdmZsX3BtZHNbNF07CS8qIHdoaWNoIFBNRHMgb3ZlcmZsb3dlZCAqLworCXVuc2lnbmVkIHNob3J0ICBtc2dfYWN0aXZlX3NldDsJCS8qIGFjdGl2ZSBzZXQgYXQgdGhlIHRpbWUgb2Ygb3ZlcmZsb3cgKi8KKwl1bnNpZ25lZCBzaG9ydCAgbXNnX3Jlc2VydmVkMTsJCS8qIGZvciBmdXR1cmUgdXNlICovCisJdW5zaWduZWQgaW50ICAgIG1zZ19yZXNlcnZlZDI7CQkvKiBmb3IgZnV0dXJlIHVzZSAqLworCXVuc2lnbmVkIGxvbmcJbXNnX3RzdGFtcDsJCS8qIGZvciBwZXJmIHR1bmluZy9kZWJ1ZyAqLworfSBwZm1fb3ZmbF9tc2dfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCWludAkJbXNnX3R5cGU7CQkvKiBnZW5lcmljIG1lc3NhZ2UgaGVhZGVyICovCisJaW50CQltc2dfY3R4X2ZkOwkJLyogZ2VuZXJpYyBtZXNzYWdlIGhlYWRlciAqLworCXVuc2lnbmVkIGxvbmcJbXNnX3RzdGFtcDsJCS8qIGZvciBwZXJmIHR1bmluZyAqLworfSBwZm1fZW5kX21zZ190OworCit0eXBlZGVmIHN0cnVjdCB7CisJaW50CQltc2dfdHlwZTsJCS8qIHR5cGUgb2YgdGhlIG1lc3NhZ2UgKi8KKwlpbnQJCW1zZ19jdHhfZmQ7CQkvKiB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGNvbnRleHQgKi8KKwl1bnNpZ25lZCBsb25nCW1zZ190c3RhbXA7CQkvKiBmb3IgcGVyZiB0dW5pbmcgKi8KK30gcGZtX2dlbl9tc2dfdDsKKworI2RlZmluZSBQRk1fTVNHX09WRkwJMQkvKiBhbiBvdmVyZmxvdyBoYXBwZW5lZCAqLworI2RlZmluZSBQRk1fTVNHX0VORAkyCS8qIHRhc2sgdG8gd2hpY2ggY29udGV4dCB3YXMgYXR0YWNoZWQgZW5kZWQgKi8KKwordHlwZWRlZiB1bmlvbiB7CisJcGZtX292ZmxfbXNnX3QJcGZtX292ZmxfbXNnOworCXBmbV9lbmRfbXNnX3QJcGZtX2VuZF9tc2c7CisJcGZtX2dlbl9tc2dfdAlwZm1fZ2VuX21zZzsKK30gcGZtX21zZ190OworCisvKgorICogRGVmaW5lIHRoZSB2ZXJzaW9uIG51bWJlcnMgZm9yIGJvdGggcGVyZm1vbiBhcyBhIHdob2xlIGFuZCB0aGUgc2FtcGxpbmcgYnVmZmVyIGZvcm1hdC4KKyAqLworI2RlZmluZSBQRk1fVkVSU0lPTl9NQUoJCSAyVQorI2RlZmluZSBQRk1fVkVSU0lPTl9NSU4JCSAwVQorI2RlZmluZSBQRk1fVkVSU0lPTgkJICgoKFBGTV9WRVJTSU9OX01BSiYweGZmZmYpPDwxNil8KFBGTV9WRVJTSU9OX01JTiAmIDB4ZmZmZikpCisjZGVmaW5lIFBGTV9WRVJTSU9OX01BSk9SKHgpCSAoKCh4KT4+MTYpICYgMHhmZmZmKQorI2RlZmluZSBQRk1fVkVSU0lPTl9NSU5PUih4KQkgKCh4KSAmIDB4ZmZmZikKKworCisvKgorICogbWlzY2VsbGFuZW91cyBhcmNoaXRlY3RlZCBkZWZpbml0aW9ucworICovCisjZGVmaW5lIFBNVV9GSVJTVF9DT1VOVEVSCTQJLyogZmlyc3QgY291bnRpbmcgbW9uaXRvciAoUE1DL1BNRCkgKi8KKyNkZWZpbmUgUE1VX01BWF9QTUNTCQkyNTYJLyogbWF4aW11bSBhcmNoaXRlY3RlZCBudW1iZXIgb2YgUE1DIHJlZ2lzdGVycyAqLworI2RlZmluZSBQTVVfTUFYX1BNRFMJCTI1NgkvKiBtYXhpbXVtIGFyY2hpdGVjdGVkIG51bWJlciBvZiBQTUQgcmVnaXN0ZXJzICovCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKK2V4dGVybiBsb25nIHBlcmZtb25jdGwoaW50IGZkLCBpbnQgY21kLCB2b2lkICphcmcsIGludCBuYXJnKTsKKworZXh0ZXJuIHZvaWQgcGZtX3NhdmVfcmVncyAoc3RydWN0IHRhc2tfc3RydWN0ICopOworZXh0ZXJuIHZvaWQgcGZtX2xvYWRfcmVncyAoc3RydWN0IHRhc2tfc3RydWN0ICopOworCitleHRlcm4gdm9pZCBwZm1fZXhpdF90aHJlYWQoc3RydWN0IHRhc2tfc3RydWN0ICopOworZXh0ZXJuIGludCAgcGZtX3VzZV9kZWJ1Z19yZWdpc3RlcnMoc3RydWN0IHRhc2tfc3RydWN0ICopOworZXh0ZXJuIGludCAgcGZtX3JlbGVhc2VfZGVidWdfcmVnaXN0ZXJzKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKK2V4dGVybiB2b2lkIHBmbV9zeXN0X3dpZGVfdXBkYXRlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcgaW5mbywgaW50IGlzX2N0eHN3aW4pOworZXh0ZXJuIHZvaWQgcGZtX2luaGVyaXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitleHRlcm4gdm9pZCBwZm1faW5pdF9wZXJjcHUodm9pZCk7CitleHRlcm4gdm9pZCBwZm1faGFuZGxlX3dvcmsodm9pZCk7CisKKy8qCisgKiBSZXNldCBQTUQgcmVnaXN0ZXIgZmxhZ3MKKyAqLworI2RlZmluZSBQRk1fUE1EX1NIT1JUX1JFU0VUCTAKKyNkZWZpbmUgUEZNX1BNRF9MT05HX1JFU0VUCTEKKwordHlwZWRlZiB1bmlvbiB7CisJdW5zaWduZWQgaW50IHZhbDsKKwlzdHJ1Y3QgeworCQl1bnNpZ25lZCBpbnQgbm90aWZ5X3VzZXI6MTsJLyogbm90aWZ5IHVzZXIgcHJvZ3JhbSBvZiBvdmVyZmxvdyAqLworCQl1bnNpZ25lZCBpbnQgcmVzZXRfb3ZmbF9wbWRzOjE7CS8qIHJlc2V0IG92ZXJmbG93ZWQgUE1EcyAqLworCQl1bnNpZ25lZCBpbnQgYmxvY2tfdGFzazoxOwkvKiBibG9jayBtb25pdG9yZWQgdGFzayBvbiBrZXJuZWwgZXhpdCAqLworCQl1bnNpZ25lZCBpbnQgbWFza19tb25pdG9yaW5nOjE7IC8qIG1hc2sgbW9uaXRvcnMgdmlhIFBNQ3gucGxtICovCisJCXVuc2lnbmVkIGludCByZXNlcnZlZDoyODsJLyogZm9yIGZ1dHVyZSB1c2UgKi8KKwl9IGJpdHM7Cit9IHBmbV9vdmZsX2N0cmxfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGNoYXIJb3ZmbF9wbWQ7CQkJLyogaW5kZXggb2Ygb3ZlcmZsb3dlZCBQTUQgICovCisJdW5zaWduZWQgY2hhciAgIG92Zmxfbm90aWZ5OwkJCS8qID0xIGlmIG1vbml0b3IgcmVxdWVzdGVkIG92ZXJmbG93IG5vdGlmaWNhdGlvbiAqLworCXVuc2lnbmVkIHNob3J0ICBhY3RpdmVfc2V0OwkJCS8qIGV2ZW50IHNldCBhY3RpdmUgYXQgdGhlIHRpbWUgb2YgdGhlIG92ZXJmbG93ICovCisJcGZtX292ZmxfY3RybF90IG92ZmxfY3RybDsJCQkvKiByZXR1cm46IHBlcmZtb24gY29udHJvbHMgdG8gc2V0IGJ5IGhhbmRsZXIgKi8KKworCXVuc2lnbmVkIGxvbmcgICBwbWRfbGFzdF9yZXNldDsJCQkvKiBsYXN0IHJlc2V0IHZhbHVlIG9mIG9mIHRoZSBQTUQgKi8KKwl1bnNpZ25lZCBsb25nCXNtcGxfcG1kc1s0XTsJCQkvKiBiaXRtYXNrIG9mIG90aGVyIFBNRCBvZiBpbnRlcmVzdCBvbiBvdmVyZmxvdyAqLworCXVuc2lnbmVkIGxvbmcgICBzbXBsX3BtZHNfdmFsdWVzW1BNVV9NQVhfUE1EU107IC8qIHZhbHVlcyBmb3IgdGhlIG90aGVyIFBNRHMgb2YgaW50ZXJlc3QgKi8KKwl1bnNpZ25lZCBsb25nICAgcG1kX3ZhbHVlOwkJCS8qIGN1cnJlbnQgNjQtYml0IHZhbHVlIG9mIHRoZSBQTUQgKi8KKwl1bnNpZ25lZCBsb25nCXBtZF9ldmVudGlkOwkJCS8qIGV2ZW50aWQgYXNzb2NpYXRlZCB3aXRoIFBNRCAqLworfSBwZm1fb3ZmbF9hcmdfdDsKKworCit0eXBlZGVmIHN0cnVjdCB7CisJY2hhcgkJKmZtdF9uYW1lOworCXBmbV91dWlkX3QJZm10X3V1aWQ7CisJc2l6ZV90CQlmbXRfYXJnX3NpemU7CisJdW5zaWduZWQgbG9uZwlmbXRfZmxhZ3M7CisKKwlpbnQJCSgqZm10X3ZhbGlkYXRlKShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHVuc2lnbmVkIGludCBmbGFncywgaW50IGNwdSwgdm9pZCAqYXJnKTsKKwlpbnQJCSgqZm10X2dldHNpemUpKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdW5zaWduZWQgaW50IGZsYWdzLCBpbnQgY3B1LCB2b2lkICphcmcsIHVuc2lnbmVkIGxvbmcgKnNpemUpOworCWludCAJCSgqZm10X2luaXQpKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIGludCBjcHUsIHZvaWQgKmFyZyk7CisJaW50CQkoKmZtdF9oYW5kbGVyKShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHZvaWQgKmJ1ZiwgcGZtX292ZmxfYXJnX3QgKmFyZywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgc3RhbXApOworCWludAkJKCpmbXRfcmVzdGFydCkoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBwZm1fb3ZmbF9jdHJsX3QgKmN0cmwsIHZvaWQgKmJ1Ziwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCWludAkJKCpmbXRfcmVzdGFydF9hY3RpdmUpKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgcGZtX292ZmxfY3RybF90ICpjdHJsLCB2b2lkICpidWYsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKwlpbnQJCSgqZm10X2V4aXQpKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdm9pZCAqYnVmLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIGZtdF9saXN0OworfSBwZm1fYnVmZmVyX2ZtdF90OworCitleHRlcm4gaW50IHBmbV9yZWdpc3Rlcl9idWZmZXJfZm10KHBmbV9idWZmZXJfZm10X3QgKmZtdCk7CitleHRlcm4gaW50IHBmbV91bnJlZ2lzdGVyX2J1ZmZlcl9mbXQocGZtX3V1aWRfdCB1dWlkKTsKKworLyoKKyAqIHBlcmZtb24gaW50ZXJmYWNlIGV4cG9ydGVkIHRvIG1vZHVsZXMKKyAqLworZXh0ZXJuIGludCBwZm1fbW9kX3JlYWRfcG1kcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgdm9pZCAqcmVxLCB1bnNpZ25lZCBpbnQgbnJlcSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworZXh0ZXJuIGludCBwZm1fbW9kX3dyaXRlX3BtY3Moc3RydWN0IHRhc2tfc3RydWN0ICosIHZvaWQgKnJlcSwgdW5zaWduZWQgaW50IG5yZXEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2V4dGVybiBpbnQgcGZtX21vZF93cml0ZV9pYnJzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdm9pZCAqcmVxLCB1bnNpZ25lZCBpbnQgbnJlcSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworZXh0ZXJuIGludCBwZm1fbW9kX3dyaXRlX2RicnMoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB2b2lkICpyZXEsIHVuc2lnbmVkIGludCBucmVxLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKKy8qCisgKiBkZXNjcmliZSB0aGUgY29udGVudCBvZiB0aGUgbG9jYWxfY3B1X2RhdGUtPnBmbV9zeXN0X2luZm8gZmllbGQKKyAqLworI2RlZmluZSBQRk1fQ1BVSU5GT19TWVNUX1dJREUJMHgxCS8qIGlmIHNldCBhIHN5c3RlbSB3aWRlIHNlc3Npb24gZXhpc3RzICovCisjZGVmaW5lIFBGTV9DUFVJTkZPX0RDUl9QUAkweDIJLyogaWYgc2V0IHRoZSBzeXN0ZW0gd2lkZSBzZXNzaW9uIGhhcyBzdGFydGVkICovCisjZGVmaW5lIFBGTV9DUFVJTkZPX0VYQ0xfSURMRQkweDQJLyogdGhlIHN5c3RlbSB3aWRlIHNlc3Npb24gZXhjbHVkZXMgdGhlIGlkbGUgdGFzayAqLworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX0FTTV9JQTY0X1BFUkZNT05fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9wZXJmbW9uX2RlZmF1bHRfc21wbC5oIGIvaW5jbHVkZS9hc20taWE2NC9wZXJmbW9uX2RlZmF1bHRfc21wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4ODIyYzAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3BlcmZtb25fZGVmYXVsdF9zbXBsLmgKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMi0yMDAzIEhld2xldHQtUGFja2FyZCBDbworICogICAgICAgICAgICAgICBTdGVwaGFuZSBFcmFuaWFuIDxlcmFuaWFuQGhwbC5ocC5jb20+CisgKgorICogVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIGRlZmF1bHQgc2FtcGxpbmcgYnVmZmVyIGZvcm1hdAorICogZm9yIExpbnV4L2lhNjQgcGVyZm1vbiBzdWJzeXN0ZW0uCisgKi8KKyNpZm5kZWYgX19QRVJGTU9OX0RFRkFVTFRfU01QTF9IX18KKyNkZWZpbmUgX19QRVJGTU9OX0RFRkFVTFRfU01QTF9IX18gMQorCisjZGVmaW5lIFBGTV9ERUZBVUxUX1NNUExfVVVJRCB7IFwKKwkJMHg0ZCwgMHg3MiwgMHhiZSwgMHhjMCwgMHgwNiwgMHg2NCwgMHg0MSwgMHg0MywgMHg4MiwgMHhiNCwgMHhkMywgMHhmZCwgMHgyNywgMHgyNCwgMHgzYywgMHg5N30KKworLyoKKyAqIGZvcm1hdCBzcGVjaWZpYyBwYXJhbWV0ZXJzIChwYXNzZWQgYXQgY29udGV4dCBjcmVhdGlvbikKKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcgYnVmX3NpemU7CQkvKiBzaXplIG9mIHRoZSBidWZmZXIgaW4gYnl0ZXMgKi8KKwl1bnNpZ25lZCBpbnQgIGZsYWdzOwkJLyogYnVmZmVyIHNwZWNpZmljIGZsYWdzICovCisJdW5zaWduZWQgaW50ICByZXMxOwkJLyogZm9yIGZ1dHVyZSB1c2UgKi8KKwl1bnNpZ25lZCBsb25nIHJlc2VydmVkWzJdOwkvKiBmb3IgZnV0dXJlIHVzZSAqLworfSBwZm1fZGVmYXVsdF9zbXBsX2FyZ190OworCisvKgorICogY29tYmluZWQgY29udGV4dCtmb3JtYXQgc3BlY2lmaWMgc3RydWN0dXJlLiBDYW4gYmUgcGFzc2VkCisgKiB0byBQRk1fQ09OVEVYVF9DUkVBVEUKKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCXBmYXJnX2NvbnRleHRfdAkJY3R4X2FyZzsKKwlwZm1fZGVmYXVsdF9zbXBsX2FyZ190CWJ1Zl9hcmc7Cit9IHBmbV9kZWZhdWx0X3NtcGxfY3R4X2FyZ190OworCisvKgorICogVGhpcyBoZWFkZXIgaXMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc2FtcGxpbmcgYnVmZmVyIHJldHVybmVkIHRvIHRoZSB1c2VyLgorICogSXQgaXMgZGlyZWN0bHkgZm9sbG93ZWQgYnkgdGhlIGZpcnN0IHJlY29yZC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcJaGRyX2NvdW50OwkJLyogaG93IG1hbnkgdmFsaWQgZW50cmllcyAqLworCXVuc2lnbmVkIGxvbmcJaGRyX2N1cl9vZmZzOwkJLyogY3VycmVudCBvZmZzZXQgZnJvbSB0b3Agb2YgYnVmZmVyICovCisJdW5zaWduZWQgbG9uZwloZHJfcmVzZXJ2ZWQyOwkJLyogcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKi8KKworCXVuc2lnbmVkIGxvbmcJaGRyX292ZXJmbG93czsJCS8qIGhvdyBtYW55IHRpbWVzIHRoZSBidWZmZXIgb3ZlcmZsb3dlZCAqLworCXVuc2lnbmVkIGxvbmcgICBoZHJfYnVmX3NpemU7CQkvKiBob3cgbWFueSBieXRlcyBpbiB0aGUgYnVmZmVyICovCisKKwl1bnNpZ25lZCBpbnQJaGRyX3ZlcnNpb247CQkvKiBjb250YWlucyBwZXJmbW9uIHZlcnNpb24gKHNtcGwgZm9ybWF0IGRpZmZzKSAqLworCXVuc2lnbmVkIGludAloZHJfcmVzZXJ2ZWQxOwkJLyogZm9yIGZ1dHVyZSB1c2UgKi8KKwl1bnNpZ25lZCBsb25nCWhkcl9yZXNlcnZlZFsxMF07CS8qIGZvciBmdXR1cmUgdXNlICovCit9IHBmbV9kZWZhdWx0X3NtcGxfaGRyX3Q7CisKKy8qCisgKiBFbnRyeSBoZWFkZXIgaW4gdGhlIHNhbXBsaW5nIGJ1ZmZlci4gIFRoZSBoZWFkZXIgaXMgZGlyZWN0bHkgZm9sbG93ZWQKKyAqIHdpdGggdGhlIHZhbHVlcyBvZiB0aGUgUE1EIHJlZ2lzdGVycyBvZiBpbnRlcmVzdCBzYXZlZCBpbiBpbmNyZWFzaW5nIAorICogaW5kZXggb3JkZXI6IFBNRDQsIFBNRDUsIGFuZCBzbyBvbi4gSG93IG1hbnkgUE1EcyBhcmUgcHJlc2VudCBkZXBlbmRzIAorICogb24gaG93IHRoZSBzZXNzaW9uIHdhcyBwcm9ncmFtbWVkLgorICoKKyAqIEluIHRoZSBjYXNlIHdoZXJlIG11bHRpcGxlIGNvdW50ZXJzIG92ZXJmbG93IGF0IHRoZSBzYW1lIHRpbWUsIG11bHRpcGxlCisgKiBlbnRyaWVzIGFyZSB3cml0dGVuIGNvbnNlY3V0aXZlbHkuCisgKgorICogbGFzdF9yZXNldF92YWx1ZSBtZW1iZXIgaW5kaWNhdGVzIHRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSBvdmVyZmxvd2VkIFBNRC4gCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICAgICAgaW50ICAgICAgICAgICAgIHBpZDsgICAgICAgICAgICAgICAgICAgIC8qIHRocmVhZCBpZCAoZm9yIE5QVEwsIHRoaXMgaXMgZ2V0dGlkKCkpICovCisgICAgICAgIHVuc2lnbmVkIGNoYXIgICByZXNlcnZlZDFbM107ICAgICAgICAgICAvKiByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqLworICAgICAgICB1bnNpZ25lZCBjaGFyICAgb3ZmbF9wbWQ7ICAgICAgICAgICAgICAgLyogaW5kZXggb2Ygb3ZlcmZsb3dlZCBQTUQgKi8KKworICAgICAgICB1bnNpZ25lZCBsb25nICAgbGFzdF9yZXNldF92YWw7ICAgICAgICAgLyogaW5pdGlhbCB2YWx1ZSBvZiBvdmVyZmxvd2VkIFBNRCAqLworICAgICAgICB1bnNpZ25lZCBsb25nICAgaXA7ICAgICAgICAgICAgICAgICAgICAgLyogd2hlcmUgZGlkIHRoZSBvdmVyZmxvdyBpbnRlcnJ1cHQgaGFwcGVuZWQgICovCisgICAgICAgIHVuc2lnbmVkIGxvbmcgICB0c3RhbXA7ICAgICAgICAgICAgICAgICAvKiBhci5pdGMgd2hlbiBlbnRlcmluZyBwZXJmbW9uIGludHIuIGhhbmRsZXIgKi8KKworICAgICAgICB1bnNpZ25lZCBzaG9ydCAgY3B1OyAgICAgICAgICAgICAgICAgICAgLyogY3B1IG9uIHdoaWNoIHRoZSBvdmVyZm93IG9jY3VyZWQgKi8KKyAgICAgICAgdW5zaWduZWQgc2hvcnQgIHNldDsgICAgICAgICAgICAgICAgICAgIC8qIGV2ZW50IHNldCBhY3RpdmUgd2hlbiBvdmVyZmxvdyBvY3VycmVkICAgKi8KKyAgICAgICAgaW50ICAgIAkJdGdpZDsgICAgICAgICAgICAgIAkvKiB0aHJlYWQgZ3JvdXAgaWQgKGZvciBOUFRMLCB0aGlzIGlzIGdldHBpZCgpKSAqLworfSBwZm1fZGVmYXVsdF9zbXBsX2VudHJ5X3Q7CisKKyNkZWZpbmUgUEZNX0RFRkFVTFRfTUFYX1BNRFMJCTY0IC8qIGhvdyBtYW55IHBtZHMgc3VwcG9ydGVkIGJ5IGRhdGEgc3RydWN0dXJlcyAoc2l6ZW9mKHVuc2lnbmVkIGxvbmcpICovCisjZGVmaW5lIFBGTV9ERUZBVUxUX01BWF9FTlRSWV9TSVpFCShzaXplb2YocGZtX2RlZmF1bHRfc21wbF9lbnRyeV90KSsoc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKlBGTV9ERUZBVUxUX01BWF9QTURTKSkKKyNkZWZpbmUgUEZNX0RFRkFVTFRfU01QTF9NSU5fQlVGX1NJWkUJKHNpemVvZihwZm1fZGVmYXVsdF9zbXBsX2hkcl90KStQRk1fREVGQVVMVF9NQVhfRU5UUllfU0laRSkKKworI2RlZmluZSBQRk1fREVGQVVMVF9TTVBMX1ZFUlNJT05fTUFKCTJVCisjZGVmaW5lIFBGTV9ERUZBVUxUX1NNUExfVkVSU0lPTl9NSU4JMFUKKyNkZWZpbmUgUEZNX0RFRkFVTFRfU01QTF9WRVJTSU9OCSgoKFBGTV9ERUZBVUxUX1NNUExfVkVSU0lPTl9NQUomMHhmZmZmKTw8MTYpfChQRk1fREVGQVVMVF9TTVBMX1ZFUlNJT05fTUlOICYgMHhmZmZmKSkKKworI2VuZGlmIC8qIF9fUEVSRk1PTl9ERUZBVUxUX1NNUExfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3BnYWxsb2MuaCBiL2luY2x1ZGUvYXNtLWlhNjQvcGdhbGxvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmMDVkYzgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3BnYWxsb2MuaApAQCAtMCwwICsxLDE2NyBAQAorI2lmbmRlZiBfQVNNX0lBNjRfUEdBTExPQ19ICisjZGVmaW5lIF9BU01fSUE2NF9QR0FMTE9DX0gKKworLyoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZnVuY3Rpb25zIGFuZCBkZWZpbmVzIG5lY2Vzc2FyeSB0byBhbGxvY2F0ZQorICogcGFnZSB0YWJsZXMuCisgKgorICogVGhpcyBob3BlZnVsbHkgd29ya3Mgd2l0aCBhbnkgKGZpeGVkKSBpYS02NCBwYWdlLXNpemUsIGFzIGRlZmluZWQKKyAqIGluIDxhc20vcGFnZS5oPiAoY3VycmVudGx5IDgxOTIpLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OC0yMDAxIEhld2xldHQtUGFja2FyZCBDbworICoJRGF2aWQgTW9zYmVyZ2VyLVRhbmcgPGRhdmlkbUBocGwuaHAuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDAwLCBHb3V0aGFtIFJhbyA8Z291dGhhbS5yYW9AaW50ZWwuY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlLWZsYWdzLmg+CisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorCisjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CisKKy8qCisgKiBWZXJ5IHN0dXBpZGx5LCB3ZSB1c2VkIHRvIGdldCBuZXcgcGdkJ3MgYW5kIHBtZCdzLCBpbml0IHRoZWlyIGNvbnRlbnRzCisgKiB0byBwb2ludCB0byB0aGUgTlVMTCB2ZXJzaW9ucyBvZiB0aGUgbmV4dCBsZXZlbCBwYWdlIHRhYmxlLCBsYXRlciBvbgorICogY29tcGxldGVseSByZS1pbml0IHRoZW0gdGhlIHNhbWUgd2F5LCB0aGVuIGZyZWUgdGhlbSB1cC4gIFRoaXMgd2FzdGVkCisgKiBhIGxvdCBvZiB3b3JrIGFuZCBjYXVzZWQgdW5uZWNlc3NhcnkgbWVtb3J5IHRyYWZmaWMuICBIb3cgYnJva2VuLi4uCisgKiBXZSBmaXggdGhpcyBieSBjYWNoaW5nIHRoZW0uCisgKi8KKyNkZWZpbmUgcGdkX3F1aWNrbGlzdAkJKGxvY2FsX2NwdV9kYXRhLT5wZ2RfcXVpY2spCisjZGVmaW5lIHBtZF9xdWlja2xpc3QJCShsb2NhbF9jcHVfZGF0YS0+cG1kX3F1aWNrKQorI2RlZmluZSBwZ3RhYmxlX2NhY2hlX3NpemUJKGxvY2FsX2NwdV9kYXRhLT5wZ3RhYmxlX2NhY2hlX3N6KQorCitzdGF0aWMgaW5saW5lIHBnZF90KgorcGdkX2FsbG9jX29uZV9mYXN0IChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwl1bnNpZ25lZCBsb25nICpyZXQgPSBOVUxMOworCisJcHJlZW1wdF9kaXNhYmxlKCk7CisKKwlyZXQgPSBwZ2RfcXVpY2tsaXN0OworCWlmIChsaWtlbHkocmV0ICE9IE5VTEwpKSB7CisJCXBnZF9xdWlja2xpc3QgPSAodW5zaWduZWQgbG9uZyAqKSgqcmV0KTsKKwkJcmV0WzBdID0gMDsKKwkJLS1wZ3RhYmxlX2NhY2hlX3NpemU7CisJfSBlbHNlCisJCXJldCA9IE5VTEw7CisKKwlwcmVlbXB0X2VuYWJsZSgpOworCisJcmV0dXJuIChwZ2RfdCAqKSByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgcGdkX3QqCitwZ2RfYWxsb2MgKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCS8qIHRoZSBWTSBzeXN0ZW0gbmV2ZXIgY2FsbHMgcGdkX2FsbG9jX29uZV9mYXN0KCksIHNvIHdlIGRvIGl0IGhlcmUuICovCisJcGdkX3QgKnBnZCA9IHBnZF9hbGxvY19vbmVfZmFzdChtbSk7CisKKwlpZiAodW5saWtlbHkocGdkID09IE5VTEwpKSB7CisJCXBnZCA9IChwZ2RfdCAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMfF9fR0ZQX1pFUk8pOworCX0KKwlyZXR1cm4gcGdkOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3BnZF9mcmVlIChwZ2RfdCAqcGdkKQoreworCXByZWVtcHRfZGlzYWJsZSgpOworCSoodW5zaWduZWQgbG9uZyAqKXBnZCA9ICh1bnNpZ25lZCBsb25nKSBwZ2RfcXVpY2tsaXN0OworCXBnZF9xdWlja2xpc3QgPSAodW5zaWduZWQgbG9uZyAqKSBwZ2Q7CisJKytwZ3RhYmxlX2NhY2hlX3NpemU7CisJcHJlZW1wdF9lbmFibGUoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitwdWRfcG9wdWxhdGUgKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwdWRfdCAqcHVkX2VudHJ5LCBwbWRfdCAqcG1kKQoreworCXB1ZF92YWwoKnB1ZF9lbnRyeSkgPSBfX3BhKHBtZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgcG1kX3QqCitwbWRfYWxsb2Nfb25lX2Zhc3QgKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJdW5zaWduZWQgbG9uZyAqcmV0ID0gTlVMTDsKKworCXByZWVtcHRfZGlzYWJsZSgpOworCisJcmV0ID0gKHVuc2lnbmVkIGxvbmcgKilwbWRfcXVpY2tsaXN0OworCWlmIChsaWtlbHkocmV0ICE9IE5VTEwpKSB7CisJCXBtZF9xdWlja2xpc3QgPSAodW5zaWduZWQgbG9uZyAqKSgqcmV0KTsKKwkJcmV0WzBdID0gMDsKKwkJLS1wZ3RhYmxlX2NhY2hlX3NpemU7CisJfQorCisJcHJlZW1wdF9lbmFibGUoKTsKKworCXJldHVybiAocG1kX3QgKilyZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgcG1kX3QqCitwbWRfYWxsb2Nfb25lIChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCXBtZF90ICpwbWQgPSAocG1kX3QgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTHxfX0dGUF9SRVBFQVR8X19HRlBfWkVSTyk7CisKKwlyZXR1cm4gcG1kOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3BtZF9mcmVlIChwbWRfdCAqcG1kKQoreworCXByZWVtcHRfZGlzYWJsZSgpOworCSoodW5zaWduZWQgbG9uZyAqKXBtZCA9ICh1bnNpZ25lZCBsb25nKSBwbWRfcXVpY2tsaXN0OworCXBtZF9xdWlja2xpc3QgPSAodW5zaWduZWQgbG9uZyAqKSBwbWQ7CisJKytwZ3RhYmxlX2NhY2hlX3NpemU7CisJcHJlZW1wdF9lbmFibGUoKTsKK30KKworI2RlZmluZSBfX3BtZF9mcmVlX3RsYih0bGIsIHBtZCkJcG1kX2ZyZWUocG1kKQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3BtZF9wb3B1bGF0ZSAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWRfZW50cnksIHN0cnVjdCBwYWdlICpwdGUpCit7CisJcG1kX3ZhbCgqcG1kX2VudHJ5KSA9IHBhZ2VfdG9fcGh5cyhwdGUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3BtZF9wb3B1bGF0ZV9rZXJuZWwgKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kX2VudHJ5LCBwdGVfdCAqcHRlKQoreworCXBtZF92YWwoKnBtZF9lbnRyeSkgPSBfX3BhKHB0ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKgorcHRlX2FsbG9jX29uZSAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlzdHJ1Y3QgcGFnZSAqcHRlID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTHxfX0dGUF9SRVBFQVR8X19HRlBfWkVSTywgMCk7CisKKwlyZXR1cm4gcHRlOworfQorCitzdGF0aWMgaW5saW5lIHB0ZV90ICoKK3B0ZV9hbGxvY19vbmVfa2VybmVsIChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCXB0ZV90ICpwdGUgPSAocHRlX3QgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTHxfX0dGUF9SRVBFQVR8X19HRlBfWkVSTyk7CisKKwlyZXR1cm4gcHRlOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3B0ZV9mcmVlIChzdHJ1Y3QgcGFnZSAqcHRlKQoreworCV9fZnJlZV9wYWdlKHB0ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcHRlX2ZyZWVfa2VybmVsIChwdGVfdCAqcHRlKQoreworCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgcHRlKTsKK30KKworI2RlZmluZSBfX3B0ZV9mcmVlX3RsYih0bGIsIHB0ZSkJdGxiX3JlbW92ZV9wYWdlKCh0bGIpLCAocHRlKSkKKworZXh0ZXJuIHZvaWQgY2hlY2tfcGd0X2NhY2hlICh2b2lkKTsKKworI2VuZGlmIC8qIF9BU01fSUE2NF9QR0FMTE9DX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20taWE2NC9wZ3RhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc1N2E4MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvcGd0YWJsZS5oCkBAIC0wLDAgKzEsNTkzIEBACisjaWZuZGVmIF9BU01fSUE2NF9QR1RBQkxFX0gKKyNkZWZpbmUgX0FTTV9JQTY0X1BHVEFCTEVfSAorCisvKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBmdW5jdGlvbnMgYW5kIGRlZmluZXMgbmVjZXNzYXJ5IHRvIG1vZGlmeSBhbmQgdXNlCisgKiB0aGUgSUEtNjQgcGFnZSB0YWJsZSB0cmVlLgorICoKKyAqIFRoaXMgaG9wZWZ1bGx5IHdvcmtzIHdpdGggYW55IChmaXhlZCkgSUEtNjQgcGFnZS1zaXplLCBhcyBkZWZpbmVkCisgKiBpbiA8YXNtL3BhZ2UuaD4uCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4LTIwMDQgSGV3bGV0dC1QYWNrYXJkIENvCisgKglEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjaW5jbHVkZSA8YXNtL21tYW4uaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisKKyNkZWZpbmUgSUE2NF9NQVhfUEhZU19CSVRTCTUwCS8qIG1heC4gbnVtYmVyIG9mIHBoeXNpY2FsIGFkZHJlc3MgYml0cyAoYXJjaGl0ZWN0ZWQpICovCisKKy8qCisgKiBGaXJzdCwgZGVmaW5lIHRoZSB2YXJpb3VzIGJpdHMgaW4gYSBQVEUuICBOb3RlIHRoYXQgdGhlIFBURSBmb3JtYXQKKyAqIG1hdGNoZXMgdGhlIFZIUFQgc2hvcnQgZm9ybWF0LCB0aGUgZmlydCBkb3VibGV3b3JkIG9mIHRoZSBWSFBEIGxvbmcKKyAqIGZvcm1hdCwgYW5kIHRoZSBmaXJzdCBkb3VibGV3b3JkIG9mIHRoZSBUTEIgaW5zZXJ0aW9uIGZvcm1hdC4KKyAqLworI2RlZmluZSBfUEFHRV9QX0JJVAkJMAorI2RlZmluZSBfUEFHRV9BX0JJVAkJNQorI2RlZmluZSBfUEFHRV9EX0JJVAkJNgorCisjZGVmaW5lIF9QQUdFX1AJCQkoMSA8PCBfUEFHRV9QX0JJVCkJLyogcGFnZSBwcmVzZW50IGJpdCAqLworI2RlZmluZSBfUEFHRV9NQV9XQgkJKDB4MCA8PCAgMikJLyogd3JpdGUgYmFjayBtZW1vcnkgYXR0cmlidXRlICovCisjZGVmaW5lIF9QQUdFX01BX1VDCQkoMHg0IDw8ICAyKQkvKiB1bmNhY2hlYWJsZSBtZW1vcnkgYXR0cmlidXRlICovCisjZGVmaW5lIF9QQUdFX01BX1VDRQkJKDB4NSA8PCAgMikJLyogVUMgZXhwb3J0ZWQgYXR0cmlidXRlICovCisjZGVmaW5lIF9QQUdFX01BX1dDCQkoMHg2IDw8ICAyKQkvKiB3cml0ZSBjb2FsZXNjaW5nIG1lbW9yeSBhdHRyaWJ1dGUgKi8KKyNkZWZpbmUgX1BBR0VfTUFfTkFUCQkoMHg3IDw8ICAyKQkvKiBub3QtYS10aGluZyBhdHRyaWJ1dGUgKi8KKyNkZWZpbmUgX1BBR0VfTUFfTUFTSwkJKDB4NyA8PCAgMikKKyNkZWZpbmUgX1BBR0VfUExfMAkJKDAgPDwgIDcpCS8qIHByaXZpbGVnZSBsZXZlbCAwIChrZXJuZWwpICovCisjZGVmaW5lIF9QQUdFX1BMXzEJCSgxIDw8ICA3KQkvKiBwcml2aWxlZ2UgbGV2ZWwgMSAodW51c2VkKSAqLworI2RlZmluZSBfUEFHRV9QTF8yCQkoMiA8PCAgNykJLyogcHJpdmlsZWdlIGxldmVsIDIgKHVudXNlZCkgKi8KKyNkZWZpbmUgX1BBR0VfUExfMwkJKDMgPDwgIDcpCS8qIHByaXZpbGVnZSBsZXZlbCAzICh1c2VyKSAqLworI2RlZmluZSBfUEFHRV9QTF9NQVNLCQkoMyA8PCAgNykKKyNkZWZpbmUgX1BBR0VfQVJfUgkJKDAgPDwgIDkpCS8qIHJlYWQgb25seSAqLworI2RlZmluZSBfUEFHRV9BUl9SWAkJKDEgPDwgIDkpCS8qIHJlYWQgJiBleGVjdXRlICovCisjZGVmaW5lIF9QQUdFX0FSX1JXCQkoMiA8PCAgOSkJLyogcmVhZCAmIHdyaXRlICovCisjZGVmaW5lIF9QQUdFX0FSX1JXWAkJKDMgPDwgIDkpCS8qIHJlYWQsIHdyaXRlICYgZXhlY3V0ZSAqLworI2RlZmluZSBfUEFHRV9BUl9SX1JXCQkoNCA8PCAgOSkJLyogcmVhZCAvIHJlYWQgJiB3cml0ZSAqLworI2RlZmluZSBfUEFHRV9BUl9SWF9SV1gJCSg1IDw8ICA5KQkvKiByZWFkICYgZXhlYyAvIHJlYWQsIHdyaXRlICYgZXhlYyAqLworI2RlZmluZSBfUEFHRV9BUl9SV1hfUlcJCSg2IDw8ICA5KQkvKiByZWFkLCB3cml0ZSAmIGV4ZWMgLyByZWFkICYgd3JpdGUgKi8KKyNkZWZpbmUgX1BBR0VfQVJfWF9SWAkJKDcgPDwgIDkpCS8qIGV4ZWMgJiBwcm9tb3RlIC8gcmVhZCAmIGV4ZWMgKi8KKyNkZWZpbmUgX1BBR0VfQVJfTUFTSwkJKDcgPDwgIDkpCisjZGVmaW5lIF9QQUdFX0FSX1NISUZUCQk5CisjZGVmaW5lIF9QQUdFX0EJCQkoMSA8PCBfUEFHRV9BX0JJVCkJLyogcGFnZSBhY2Nlc3NlZCBiaXQgKi8KKyNkZWZpbmUgX1BBR0VfRAkJCSgxIDw8IF9QQUdFX0RfQklUKQkvKiBwYWdlIGRpcnR5IGJpdCAqLworI2RlZmluZSBfUEFHRV9QUE5fTUFTSwkJKCgoX19JQTY0X1VMKDEpIDw8IElBNjRfTUFYX1BIWVNfQklUUykgLSAxKSAmIH4weGZmZlVMKQorI2RlZmluZSBfUEFHRV9FRAkJKF9fSUE2NF9VTCgxKSA8PCA1MikJLyogZXhjZXB0aW9uIGRlZmVycmFsICovCisjZGVmaW5lIF9QQUdFX1BST1ROT05FCQkoX19JQTY0X1VMKDEpIDw8IDYzKQorCisvKiBWYWxpZCBvbmx5IGZvciBhIFBURSB3aXRoIHRoZSBwcmVzZW50IGJpdCBjbGVhcmVkOiAqLworI2RlZmluZSBfUEFHRV9GSUxFCQkoMSA8PCAxKQkJLyogc2VlIHN3YXAgJiBmaWxlIHB0ZSByZW1hcmtzIGJlbG93ICovCisKKyNkZWZpbmUgX1BGTl9NQVNLCQlfUEFHRV9QUE5fTUFTSworLyogTWFzayBvZiBiaXRzIHdoaWNoIG1heSBiZSBjaGFuZ2VkIGJ5IHB0ZV9tb2RpZnkoKTsgdGhlIG9kZCBiaXRzIGFyZSB0aGVyZSBmb3IgX1BBR0VfUFJPVE5PTkUgKi8KKyNkZWZpbmUgX1BBR0VfQ0hHX01BU0sJKF9QQUdFX1AgfCBfUEFHRV9QUk9UTk9ORSB8IF9QQUdFX1BMX01BU0sgfCBfUEFHRV9BUl9NQVNLIHwgX1BBR0VfRUQpCisKKyNkZWZpbmUgX1BBR0VfU0laRV80SwkxMgorI2RlZmluZSBfUEFHRV9TSVpFXzhLCTEzCisjZGVmaW5lIF9QQUdFX1NJWkVfMTZLCTE0CisjZGVmaW5lIF9QQUdFX1NJWkVfNjRLCTE2CisjZGVmaW5lIF9QQUdFX1NJWkVfMjU2SwkxOAorI2RlZmluZSBfUEFHRV9TSVpFXzFNCTIwCisjZGVmaW5lIF9QQUdFX1NJWkVfNE0JMjIKKyNkZWZpbmUgX1BBR0VfU0laRV8xNk0JMjQKKyNkZWZpbmUgX1BBR0VfU0laRV82NE0JMjYKKyNkZWZpbmUgX1BBR0VfU0laRV8yNTZNCTI4CisjZGVmaW5lIF9QQUdFX1NJWkVfMUcJMzAKKyNkZWZpbmUgX1BBR0VfU0laRV80RwkzMgorCisjZGVmaW5lIF9fQUNDRVNTX0JJVFMJCV9QQUdFX0VEIHwgX1BBR0VfQSB8IF9QQUdFX1AgfCBfUEFHRV9NQV9XQgorI2RlZmluZSBfX0RJUlRZX0JJVFNfTk9fRUQJX1BBR0VfQSB8IF9QQUdFX1AgfCBfUEFHRV9EIHwgX1BBR0VfTUFfV0IKKyNkZWZpbmUgX19ESVJUWV9CSVRTCQlfUEFHRV9FRCB8IF9fRElSVFlfQklUU19OT19FRAorCisvKgorICogRGVmaW5pdGlvbnMgZm9yIGZpcnN0IGxldmVsOgorICoKKyAqIFBHRElSX1NISUZUIGRldGVybWluZXMgd2hhdCBhIGZpcnN0LWxldmVsIHBhZ2UgdGFibGUgZW50cnkgY2FuIG1hcC4KKyAqLworI2RlZmluZSBQR0RJUl9TSElGVAkJKFBBR0VfU0hJRlQgKyAyKihQQUdFX1NISUZULTMpKQorI2RlZmluZSBQR0RJUl9TSVpFCQkoX19JQTY0X1VMKDEpIDw8IFBHRElSX1NISUZUKQorI2RlZmluZSBQR0RJUl9NQVNLCQkofihQR0RJUl9TSVpFLTEpKQorI2RlZmluZSBQVFJTX1BFUl9QR0QJCSgxVUwgPDwgKFBBR0VfU0hJRlQtMykpCisjZGVmaW5lIFVTRVJfUFRSU19QRVJfUEdECSg1KlBUUlNfUEVSX1BHRC84KQkvKiByZWdpb25zIDAtNCBhcmUgdXNlciByZWdpb25zICovCisjZGVmaW5lIEZJUlNUX1VTRVJfUEdEX05SCTAKKworLyoKKyAqIERlZmluaXRpb25zIGZvciBzZWNvbmQgbGV2ZWw6CisgKgorICogUE1EX1NISUZUIGRldGVybWluZXMgdGhlIHNpemUgb2YgdGhlIGFyZWEgYSBzZWNvbmQtbGV2ZWwgcGFnZSB0YWJsZQorICogY2FuIG1hcC4KKyAqLworI2RlZmluZSBQTURfU0hJRlQJKFBBR0VfU0hJRlQgKyAoUEFHRV9TSElGVC0zKSkKKyNkZWZpbmUgUE1EX1NJWkUJKDFVTCA8PCBQTURfU0hJRlQpCisjZGVmaW5lIFBNRF9NQVNLCSh+KFBNRF9TSVpFLTEpKQorI2RlZmluZSBQVFJTX1BFUl9QTUQJKDFVTCA8PCAoUEFHRV9TSElGVC0zKSkKKworLyoKKyAqIERlZmluaXRpb25zIGZvciB0aGlyZCBsZXZlbDoKKyAqLworI2RlZmluZSBQVFJTX1BFUl9QVEUJKF9fSUE2NF9VTCgxKSA8PCAoUEFHRV9TSElGVC0zKSkKKworLyoKKyAqIEFsbCB0aGUgbm9ybWFsIG1hc2tzIGhhdmUgdGhlICJwYWdlIGFjY2Vzc2VkIiBiaXRzIG9uLCBhcyBhbnkgdGltZQorICogdGhleSBhcmUgdXNlZCwgdGhlIHBhZ2UgaXMgYWNjZXNzZWQuIFRoZXkgYXJlIGNsZWFyZWQgb25seSBieSB0aGUKKyAqIHBhZ2Utb3V0IHJvdXRpbmVzLgorICovCisjZGVmaW5lIFBBR0VfTk9ORQlfX3BncHJvdChfUEFHRV9QUk9UTk9ORSB8IF9QQUdFX0EpCisjZGVmaW5lIFBBR0VfU0hBUkVECV9fcGdwcm90KF9fQUNDRVNTX0JJVFMgfCBfUEFHRV9QTF8zIHwgX1BBR0VfQVJfUlcpCisjZGVmaW5lIFBBR0VfUkVBRE9OTFkJX19wZ3Byb3QoX19BQ0NFU1NfQklUUyB8IF9QQUdFX1BMXzMgfCBfUEFHRV9BUl9SKQorI2RlZmluZSBQQUdFX0NPUFkJX19wZ3Byb3QoX19BQ0NFU1NfQklUUyB8IF9QQUdFX1BMXzMgfCBfUEFHRV9BUl9SKQorI2RlZmluZSBQQUdFX0NPUFlfRVhFQwlfX3BncHJvdChfX0FDQ0VTU19CSVRTIHwgX1BBR0VfUExfMyB8IF9QQUdFX0FSX1JYKQorI2RlZmluZSBQQUdFX0dBVEUJX19wZ3Byb3QoX19BQ0NFU1NfQklUUyB8IF9QQUdFX1BMXzAgfCBfUEFHRV9BUl9YX1JYKQorI2RlZmluZSBQQUdFX0tFUk5FTAlfX3BncHJvdChfX0RJUlRZX0JJVFMgIHwgX1BBR0VfUExfMCB8IF9QQUdFX0FSX1JXWCkKKyNkZWZpbmUgUEFHRV9LRVJORUxSWAlfX3BncHJvdChfX0FDQ0VTU19CSVRTIHwgX1BBR0VfUExfMCB8IF9QQUdFX0FSX1JYKQorCisjIGlmbmRlZiBfX0FTU0VNQkxZX18KKworI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKworLyoKKyAqIE5leHQgY29tZSB0aGUgbWFwcGluZ3MgdGhhdCBkZXRlcm1pbmUgaG93IG1tYXAoKSBwcm90ZWN0aW9uIGJpdHMKKyAqIChQUk9UX0VYRUMsIFBST1RfUkVBRCwgUFJPVF9XUklURSwgUFJPVF9OT05FKSBnZXQgaW1wbGVtZW50ZWQuICBUaGUKKyAqIF9QIHZlcnNpb24gZ2V0cyB1c2VkIGZvciBhIHByaXZhdGUgc2hhcmVkIG1lbW9yeSBzZWdtZW50LCB0aGUgX1MKKyAqIHZlcnNpb24gZ2V0cyB1c2VkIGZvciBhIHNoYXJlZCBtZW1vcnkgc2VnbWVudCB3aXRoIE1BUF9TSEFSRUQgb24uCisgKiBJbiBhIHByaXZhdGUgc2hhcmVkIG1lbW9yeSBzZWdtZW50LCB3ZSBkbyBhIGNvcHktb24td3JpdGUgaWYgYSB0YXNrCisgKiBhdHRlbXB0cyB0byB3cml0ZSB0byB0aGUgcGFnZS4KKyAqLworCS8qIHh3ciAqLworI2RlZmluZSBfX1AwMDAJUEFHRV9OT05FCisjZGVmaW5lIF9fUDAwMQlQQUdFX1JFQURPTkxZCisjZGVmaW5lIF9fUDAxMAlQQUdFX1JFQURPTkxZCS8qIHdyaXRlIHRvIHByaXYgcGcgLT4gY29weSAmIG1ha2Ugd3JpdGFibGUgKi8KKyNkZWZpbmUgX19QMDExCVBBR0VfUkVBRE9OTFkJLyogZGl0dG8gKi8KKyNkZWZpbmUgX19QMTAwCV9fcGdwcm90KF9fQUNDRVNTX0JJVFMgfCBfUEFHRV9QTF8zIHwgX1BBR0VfQVJfWF9SWCkKKyNkZWZpbmUgX19QMTAxCV9fcGdwcm90KF9fQUNDRVNTX0JJVFMgfCBfUEFHRV9QTF8zIHwgX1BBR0VfQVJfUlgpCisjZGVmaW5lIF9fUDExMAlQQUdFX0NPUFlfRVhFQworI2RlZmluZSBfX1AxMTEJUEFHRV9DT1BZX0VYRUMKKworI2RlZmluZSBfX1MwMDAJUEFHRV9OT05FCisjZGVmaW5lIF9fUzAwMQlQQUdFX1JFQURPTkxZCisjZGVmaW5lIF9fUzAxMAlQQUdFX1NIQVJFRAkvKiB3ZSBkb24ndCBoYXZlIChhbmQgZG9uJ3QgbmVlZCkgd3JpdGUtb25seSAqLworI2RlZmluZSBfX1MwMTEJUEFHRV9TSEFSRUQKKyNkZWZpbmUgX19TMTAwCV9fcGdwcm90KF9fQUNDRVNTX0JJVFMgfCBfUEFHRV9QTF8zIHwgX1BBR0VfQVJfWF9SWCkKKyNkZWZpbmUgX19TMTAxCV9fcGdwcm90KF9fQUNDRVNTX0JJVFMgfCBfUEFHRV9QTF8zIHwgX1BBR0VfQVJfUlgpCisjZGVmaW5lIF9fUzExMAlfX3BncHJvdChfX0FDQ0VTU19CSVRTIHwgX1BBR0VfUExfMyB8IF9QQUdFX0FSX1JXWCkKKyNkZWZpbmUgX19TMTExCV9fcGdwcm90KF9fQUNDRVNTX0JJVFMgfCBfUEFHRV9QTF8zIHwgX1BBR0VfQVJfUldYKQorCisjZGVmaW5lIHBnZF9FUlJPUihlKQlwcmludGsoIiVzOiVkOiBiYWQgcGdkICUwMTZseC5cbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgcGdkX3ZhbChlKSkKKyNkZWZpbmUgcG1kX0VSUk9SKGUpCXByaW50aygiJXM6JWQ6IGJhZCBwbWQgJTAxNmx4LlxuIiwgX19GSUxFX18sIF9fTElORV9fLCBwbWRfdmFsKGUpKQorI2RlZmluZSBwdGVfRVJST1IoZSkJcHJpbnRrKCIlczolZDogYmFkIHB0ZSAlMDE2bHguXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sIHB0ZV92YWwoZSkpCisKKworLyoKKyAqIFNvbWUgZGVmaW5pdGlvbnMgdG8gdHJhbnNsYXRlIGJldHdlZW4gbWVtX21hcCwgUFRFcywgYW5kIHBhZ2UgYWRkcmVzc2VzOgorICovCisKKworLyogUXVpY2sgdGVzdCB0byBzZWUgaWYgQUREUiBpcyBhIChwb3RlbnRpYWxseSkgdmFsaWQgcGh5c2ljYWwgYWRkcmVzcy4gKi8KK3N0YXRpYyBpbmxpbmUgbG9uZworaWE2NF9waHlzX2FkZHJfdmFsaWQgKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gKGFkZHIgJiAobG9jYWxfY3B1X2RhdGEtPnVuaW1wbF9wYV9tYXNrKSkgPT0gMDsKK30KKworLyoKKyAqIGtlcm5fYWRkcl92YWxpZChBRERSKSB0ZXN0cyBpZiBBRERSIGlzIHBvaW50aW5nIHRvIHZhbGlkIGtlcm5lbAorICogbWVtb3J5LiAgRm9yIHRoZSByZXR1cm4gdmFsdWUgdG8gYmUgbWVhbmluZ2Z1bCwgQUREUiBtdXN0IGJlID49CisgKiBQQUdFX09GRlNFVC4gIFRoaXMgb3BlcmF0aW9uIGNhbiBiZSByZWxhdGl2ZWx5IGV4cGVuc2l2ZSAoZS5nLiwKKyAqIHJlcXVpcmUgYSBoYXNoLSwgb3IgbXVsdGktbGV2ZWwgdHJlZS1sb29rdXAgb3Igc29tZXRoaW5nIG9mIHRoYXQKKyAqIHNvcnQpIGJ1dCBpdCBndWFyYW50ZWVzIHRvIHJldHVybiBUUlVFIG9ubHkgaWYgYWNjZXNzaW5nIHRoZSBwYWdlCisgKiBhdCB0aGF0IGFkZHJlc3MgZG9lcyBub3QgY2F1c2UgYW4gZXJyb3IuICBOb3RlIHRoYXQgdGhlcmUgbWF5IGJlCisgKiBhZGRyZXNzZXMgZm9yIHdoaWNoIGtlcm5fYWRkcl92YWxpZCgpIHJldHVybnMgRkFMU0UgZXZlbiB0aG91Z2ggYW4KKyAqIGFjY2VzcyB3b3VsZCBub3QgY2F1c2UgYW4gZXJyb3IgKGUuZy4sIHRoaXMgaXMgdHlwaWNhbGx5IHRydWUgZm9yCisgKiBtZW1vcnkgbWFwcGVkIEkvTyByZWdpb25zLgorICoKKyAqIFhYWCBOZWVkIHRvIGltcGxlbWVudCB0aGlzIGZvciBJQS02NC4KKyAqLworI2RlZmluZSBrZXJuX2FkZHJfdmFsaWQoYWRkcikJKDEpCisKKworLyoKKyAqIE5vdyBjb21lIHRoZSBkZWZpbmVzIGFuZCByb3V0aW5lcyB0byBtYW5hZ2UgYW5kIGFjY2VzcyB0aGUgdGhyZWUtbGV2ZWwKKyAqIHBhZ2UgdGFibGUuCisgKi8KKworLyoKKyAqIE9uIHNvbWUgYXJjaGl0ZWN0dXJlcywgc3BlY2lhbCB0aGluZ3MgbmVlZCB0byBiZSBkb25lIHdoZW4gc2V0dGluZworICogdGhlIFBURSBpbiBhIHBhZ2UgdGFibGUuICBOb3RoaW5nIHNwZWNpYWwgbmVlZHMgdG8gYmUgb24gSUEtNjQuCisgKi8KKyNkZWZpbmUgc2V0X3B0ZShwdGVwLCBwdGV2YWwpCSgqKHB0ZXApID0gKHB0ZXZhbCkpCisjZGVmaW5lIHNldF9wdGVfYXQobW0sYWRkcixwdGVwLHB0ZXZhbCkgc2V0X3B0ZShwdGVwLHB0ZXZhbCkKKworI2RlZmluZSBSR05fU0laRQkoMVVMIDw8IDYxKQorI2RlZmluZSBSR05fS0VSTkVMCTcKKworI2RlZmluZSBWTUFMTE9DX1NUQVJUCQkweGEwMDAwMDAyMDAwMDAwMDBVTAorI2lmZGVmIENPTkZJR19WSVJUVUFMX01FTV9NQVAKKyMgZGVmaW5lIFZNQUxMT0NfRU5EX0lOSVQJKDB4YTAwMDAwMDAwMDAwMDAwMFVMICsgKDFVTCA8PCAoNCpQQUdFX1NISUZUIC0gOSkpKQorIyBkZWZpbmUgVk1BTExPQ19FTkQJCXZtYWxsb2NfZW5kCisgIGV4dGVybiB1bnNpZ25lZCBsb25nIHZtYWxsb2NfZW5kOworI2Vsc2UKKyMgZGVmaW5lIFZNQUxMT0NfRU5ECQkoMHhhMDAwMDAwMDAwMDAwMDAwVUwgKyAoMVVMIDw8ICg0KlBBR0VfU0hJRlQgLSA5KSkpCisjZW5kaWYKKworLyogZnMvcHJvYy9rY29yZS5jICovCisjZGVmaW5lCWtjX3ZhZGRyX3RvX29mZnNldCh2KSAoKHYpIC0gMHhhMDAwMDAwMDAwMDAwMDAwVUwpCisjZGVmaW5lCWtjX29mZnNldF90b192YWRkcihvKSAoKG8pICsgMHhhMDAwMDAwMDAwMDAwMDAwVUwpCisKKy8qCisgKiBDb252ZXJzaW9uIGZ1bmN0aW9uczogY29udmVydCBwYWdlIGZyYW1lIG51bWJlciAocGZuKSBhbmQgYSBwcm90ZWN0aW9uIHZhbHVlIHRvIGEgcGFnZQorICogdGFibGUgZW50cnkgKHB0ZSkuCisgKi8KKyNkZWZpbmUgcGZuX3B0ZShwZm4sIHBncHJvdCkgXAorKHsgcHRlX3QgX19wdGU7IHB0ZV92YWwoX19wdGUpID0gKChwZm4pIDw8IFBBR0VfU0hJRlQpIHwgcGdwcm90X3ZhbChwZ3Byb3QpOyBfX3B0ZTsgfSkKKworLyogRXh0cmFjdCBwZm4gZnJvbSBwdGUuICAqLworI2RlZmluZSBwdGVfcGZuKF9wdGUpCQkoKHB0ZV92YWwoX3B0ZSkgJiBfUEZOX01BU0spID4+IFBBR0VfU0hJRlQpCisKKyNkZWZpbmUgbWtfcHRlKHBhZ2UsIHBncHJvdCkJcGZuX3B0ZShwYWdlX3RvX3BmbihwYWdlKSwgKHBncHJvdCkpCisKKy8qIFRoaXMgdGFrZXMgYSBwaHlzaWNhbCBwYWdlIGFkZHJlc3MgdGhhdCBpcyB1c2VkIGJ5IHRoZSByZW1hcHBpbmcgZnVuY3Rpb25zICovCisjZGVmaW5lIG1rX3B0ZV9waHlzKHBoeXNwYWdlLCBwZ3Byb3QpIFwKKyh7IHB0ZV90IF9fcHRlOyBwdGVfdmFsKF9fcHRlKSA9IHBoeXNwYWdlICsgcGdwcm90X3ZhbChwZ3Byb3QpOyBfX3B0ZTsgfSkKKworI2RlZmluZSBwdGVfbW9kaWZ5KF9wdGUsIG5ld3Byb3QpIFwKKwkoX19wdGUoKHB0ZV92YWwoX3B0ZSkgJiB+X1BBR0VfQ0hHX01BU0spIHwgKHBncHJvdF92YWwobmV3cHJvdCkgJiBfUEFHRV9DSEdfTUFTSykpKQorCisjZGVmaW5lIHBhZ2VfcHRlX3Byb3QocGFnZSxwcm90KQlta19wdGUocGFnZSwgcHJvdCkKKyNkZWZpbmUgcGFnZV9wdGUocGFnZSkJCQlwYWdlX3B0ZV9wcm90KHBhZ2UsIF9fcGdwcm90KDApKQorCisjZGVmaW5lIHB0ZV9ub25lKHB0ZSkgCQkJKCFwdGVfdmFsKHB0ZSkpCisjZGVmaW5lIHB0ZV9wcmVzZW50KHB0ZSkJCShwdGVfdmFsKHB0ZSkgJiAoX1BBR0VfUCB8IF9QQUdFX1BST1ROT05FKSkKKyNkZWZpbmUgcHRlX2NsZWFyKG1tLGFkZHIscHRlKQkJKHB0ZV92YWwoKihwdGUpKSA9IDBVTCkKKy8qIHB0ZV9wYWdlKCkgcmV0dXJucyB0aGUgInN0cnVjdCBwYWdlICoiIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFBURTogKi8KKyNkZWZpbmUgcHRlX3BhZ2UocHRlKQkJCXZpcnRfdG9fcGFnZSgoKHB0ZV92YWwocHRlKSAmIF9QRk5fTUFTSykgKyBQQUdFX09GRlNFVCkpCisKKyNkZWZpbmUgcG1kX25vbmUocG1kKQkJCSghcG1kX3ZhbChwbWQpKQorI2RlZmluZSBwbWRfYmFkKHBtZCkJCQkoIWlhNjRfcGh5c19hZGRyX3ZhbGlkKHBtZF92YWwocG1kKSkpCisjZGVmaW5lIHBtZF9wcmVzZW50KHBtZCkJCShwbWRfdmFsKHBtZCkgIT0gMFVMKQorI2RlZmluZSBwbWRfY2xlYXIocG1kcCkJCQkocG1kX3ZhbCgqKHBtZHApKSA9IDBVTCkKKyNkZWZpbmUgcG1kX3BhZ2Vfa2VybmVsKHBtZCkJCSgodW5zaWduZWQgbG9uZykgX192YShwbWRfdmFsKHBtZCkgJiBfUEZOX01BU0spKQorI2RlZmluZSBwbWRfcGFnZShwbWQpCQkJdmlydF90b19wYWdlKChwbWRfdmFsKHBtZCkgKyBQQUdFX09GRlNFVCkpCisKKyNkZWZpbmUgcHVkX25vbmUocHVkKQkJCSghcHVkX3ZhbChwdWQpKQorI2RlZmluZSBwdWRfYmFkKHB1ZCkJCQkoIWlhNjRfcGh5c19hZGRyX3ZhbGlkKHB1ZF92YWwocHVkKSkpCisjZGVmaW5lIHB1ZF9wcmVzZW50KHB1ZCkJCShwdWRfdmFsKHB1ZCkgIT0gMFVMKQorI2RlZmluZSBwdWRfY2xlYXIocHVkcCkJCQkocHVkX3ZhbCgqKHB1ZHApKSA9IDBVTCkKKworI2RlZmluZSBwdWRfcGFnZShwdWQpCQkJKCh1bnNpZ25lZCBsb25nKSBfX3ZhKHB1ZF92YWwocHVkKSAmIF9QRk5fTUFTSykpCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGhhdmUgZGVmaW5lZCBiZWhhdmlvciBvbmx5IHdvcmsgaWYgcHRlX3ByZXNlbnQoKSBpcyB0cnVlLgorICovCisjZGVmaW5lIHB0ZV91c2VyKHB0ZSkJCSgocHRlX3ZhbChwdGUpICYgX1BBR0VfUExfTUFTSykgPT0gX1BBR0VfUExfMykKKyNkZWZpbmUgcHRlX3JlYWQocHRlKQkJKCgocHRlX3ZhbChwdGUpICYgX1BBR0VfQVJfTUFTSykgPj4gX1BBR0VfQVJfU0hJRlQpIDwgNikKKyNkZWZpbmUgcHRlX3dyaXRlKHB0ZSkJKCh1bnNpZ25lZCkgKCgocHRlX3ZhbChwdGUpICYgX1BBR0VfQVJfTUFTSykgPj4gX1BBR0VfQVJfU0hJRlQpIC0gMikgPD0gNCkKKyNkZWZpbmUgcHRlX2V4ZWMocHRlKQkJKChwdGVfdmFsKHB0ZSkgJiBfUEFHRV9BUl9SWCkgIT0gMCkKKyNkZWZpbmUgcHRlX2RpcnR5KHB0ZSkJCSgocHRlX3ZhbChwdGUpICYgX1BBR0VfRCkgIT0gMCkKKyNkZWZpbmUgcHRlX3lvdW5nKHB0ZSkJCSgocHRlX3ZhbChwdGUpICYgX1BBR0VfQSkgIT0gMCkKKyNkZWZpbmUgcHRlX2ZpbGUocHRlKQkJKChwdGVfdmFsKHB0ZSkgJiBfUEFHRV9GSUxFKSAhPSAwKQorLyoKKyAqIE5vdGU6IHdlIGNvbnZlcnQgQVJfUldYIHRvIEFSX1JYIGFuZCBBUl9SVyB0byBBUl9SIGJ5IGNsZWFyaW5nIHRoZSAybmQgYml0IGluIHRoZQorICogYWNjZXNzIHJpZ2h0czoKKyAqLworI2RlZmluZSBwdGVfd3Jwcm90ZWN0KHB0ZSkJKF9fcHRlKHB0ZV92YWwocHRlKSAmIH5fUEFHRV9BUl9SVykpCisjZGVmaW5lIHB0ZV9ta3dyaXRlKHB0ZSkJKF9fcHRlKHB0ZV92YWwocHRlKSB8IF9QQUdFX0FSX1JXKSkKKyNkZWZpbmUgcHRlX21rZXhlYyhwdGUpCQkoX19wdGUocHRlX3ZhbChwdGUpIHwgX1BBR0VfQVJfUlgpKQorI2RlZmluZSBwdGVfbWtvbGQocHRlKQkJKF9fcHRlKHB0ZV92YWwocHRlKSAmIH5fUEFHRV9BKSkKKyNkZWZpbmUgcHRlX21reW91bmcocHRlKQkoX19wdGUocHRlX3ZhbChwdGUpIHwgX1BBR0VfQSkpCisjZGVmaW5lIHB0ZV9ta2NsZWFuKHB0ZSkJKF9fcHRlKHB0ZV92YWwocHRlKSAmIH5fUEFHRV9EKSkKKyNkZWZpbmUgcHRlX21rZGlydHkocHRlKQkoX19wdGUocHRlX3ZhbChwdGUpIHwgX1BBR0VfRCkpCisKKy8qCisgKiBNYWNybyB0byBhIHBhZ2UgcHJvdGVjdGlvbiB2YWx1ZSBhcyAidW5jYWNoZWFibGUiLiAgTm90ZSB0aGF0ICJwcm90ZWN0aW9uIiBpcyByZWFsbHkgYQorICogbWlzbm9tZXIgaGVyZSBhcyB0aGUgcHJvdGVjdGlvbiB2YWx1ZSBjb250YWlucyB0aGUgbWVtb3J5IGF0dHJpYnV0ZSBiaXRzLCBkaXJ0eSBiaXRzLAorICogYW5kIHZhcmlvdXMgb3RoZXIgYml0cyBhcyB3ZWxsLgorICovCisjZGVmaW5lIHBncHJvdF9ub25jYWNoZWQocHJvdCkJCV9fcGdwcm90KChwZ3Byb3RfdmFsKHByb3QpICYgfl9QQUdFX01BX01BU0spIHwgX1BBR0VfTUFfVUMpCisKKy8qCisgKiBNYWNybyB0byBtYWtlIG1hcmsgYSBwYWdlIHByb3RlY3Rpb24gdmFsdWUgYXMgIndyaXRlLWNvbWJpbmluZyIuCisgKiBOb3RlIHRoYXQgInByb3RlY3Rpb24iIGlzIHJlYWxseSBhIG1pc25vbWVyIGhlcmUgYXMgdGhlIHByb3RlY3Rpb24KKyAqIHZhbHVlIGNvbnRhaW5zIHRoZSBtZW1vcnkgYXR0cmlidXRlIGJpdHMsIGRpcnR5IGJpdHMsIGFuZCB2YXJpb3VzCisgKiBvdGhlciBiaXRzIGFzIHdlbGwuICBBY2Nlc3NlcyB0aHJvdWdoIGEgd3JpdGUtY29tYmluaW5nIHRyYW5zbGF0aW9uCisgKiB3b3JrcyBieXBhc3NlcyB0aGUgY2FjaGVzLCBidXQgZG9lcyBhbGxvdyBmb3IgY29uc2VjdXRpdmUgd3JpdGVzIHRvCisgKiBiZSBjb21iaW5lZCBpbnRvIHNpbmdsZSAoYnV0IGxhcmdlcikgd3JpdGUgdHJhbnNhY3Rpb25zLgorICovCisjZGVmaW5lIHBncHJvdF93cml0ZWNvbWJpbmUocHJvdCkJX19wZ3Byb3QoKHBncHJvdF92YWwocHJvdCkgJiB+X1BBR0VfTUFfTUFTSykgfCBfUEFHRV9NQV9XQykKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCitwZ2RfaW5kZXggKHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwl1bnNpZ25lZCBsb25nIHJlZ2lvbiA9IGFkZHJlc3MgPj4gNjE7CisJdW5zaWduZWQgbG9uZyBsMWluZGV4ID0gKGFkZHJlc3MgPj4gUEdESVJfU0hJRlQpICYgKChQVFJTX1BFUl9QR0QgPj4gMykgLSAxKTsKKworCXJldHVybiAocmVnaW9uIDw8IChQQUdFX1NISUZUIC0gNikpIHwgbDFpbmRleDsKK30KKworLyogVGhlIG9mZnNldCBpbiB0aGUgMS1sZXZlbCBkaXJlY3RvcnkgaXMgZ2l2ZW4gYnkgdGhlIDMgcmVnaW9uIGJpdHMKKyAgICg2MS4uNjMpIGFuZCB0aGUgbGV2ZWwtMSBiaXRzLiAgKi8KK3N0YXRpYyBpbmxpbmUgcGdkX3QqCitwZ2Rfb2Zmc2V0IChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCXJldHVybiBtbS0+cGdkICsgcGdkX2luZGV4KGFkZHJlc3MpOworfQorCisvKiBJbiB0aGUga2VybmVsJ3MgbWFwcGVkIHJlZ2lvbiB3ZSBjb21wbGV0ZWx5IGlnbm9yZSB0aGUgcmVnaW9uIG51bWJlcgorICAgKHNpbmNlIHdlIGtub3cgaXQncyBpbiByZWdpb24gbnVtYmVyIDUpLiAqLworI2RlZmluZSBwZ2Rfb2Zmc2V0X2soYWRkcikgXAorCShpbml0X21tLnBnZCArICgoKGFkZHIpID4+IFBHRElSX1NISUZUKSAmIChQVFJTX1BFUl9QR0QgLSAxKSkpCisKKy8qIExvb2sgdXAgYSBwZ2QgZW50cnkgaW4gdGhlIGdhdGUgYXJlYS4gIE9uIElBLTY0LCB0aGUgZ2F0ZS1hcmVhCisgICByZXNpZGVzIGluIHRoZSBrZXJuZWwtbWFwcGVkIHNlZ21lbnQsIGhlbmNlIHdlIHVzZSBwZ2Rfb2Zmc2V0X2soKQorICAgaGVyZS4gICovCisjZGVmaW5lIHBnZF9vZmZzZXRfZ2F0ZShtbSwgYWRkcikJcGdkX29mZnNldF9rKGFkZHIpCisKKy8qIEZpbmQgYW4gZW50cnkgaW4gdGhlIHNlY29uZC1sZXZlbCBwYWdlIHRhYmxlLi4gKi8KKyNkZWZpbmUgcG1kX29mZnNldChkaXIsYWRkcikgXAorCSgocG1kX3QgKikgcHVkX3BhZ2UoKihkaXIpKSArICgoKGFkZHIpID4+IFBNRF9TSElGVCkgJiAoUFRSU19QRVJfUE1EIC0gMSkpKQorCisvKgorICogRmluZCBhbiBlbnRyeSBpbiB0aGUgdGhpcmQtbGV2ZWwgcGFnZSB0YWJsZS4gIFRoaXMgbG9va3MgbW9yZSBjb21wbGljYXRlZCB0aGFuIGl0CisgKiBzaG91bGQgYmUgYmVjYXVzZSBzb21lIHBsYXRmb3JtcyBwbGFjZSBwYWdlIHRhYmxlcyBpbiBoaWdoIG1lbW9yeS4KKyAqLworI2RlZmluZSBwdGVfaW5kZXgoYWRkcikJIAkoKChhZGRyKSA+PiBQQUdFX1NISUZUKSAmIChQVFJTX1BFUl9QVEUgLSAxKSkKKyNkZWZpbmUgcHRlX29mZnNldF9rZXJuZWwoZGlyLGFkZHIpCSgocHRlX3QgKikgcG1kX3BhZ2Vfa2VybmVsKCooZGlyKSkgKyBwdGVfaW5kZXgoYWRkcikpCisjZGVmaW5lIHB0ZV9vZmZzZXRfbWFwKGRpcixhZGRyKQlwdGVfb2Zmc2V0X2tlcm5lbChkaXIsIGFkZHIpCisjZGVmaW5lIHB0ZV9vZmZzZXRfbWFwX25lc3RlZChkaXIsYWRkcikJcHRlX29mZnNldF9tYXAoZGlyLCBhZGRyKQorI2RlZmluZSBwdGVfdW5tYXAocHRlKQkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgcHRlX3VubWFwX25lc3RlZChwdGUpCQlkbyB7IH0gd2hpbGUgKDApCisKKy8qIGF0b21pYyB2ZXJzaW9ucyBvZiB0aGUgc29tZSBQVEUgbWFuaXB1bGF0aW9uczogKi8KKworc3RhdGljIGlubGluZSBpbnQKK3B0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcgKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKQoreworI2lmZGVmIENPTkZJR19TTVAKKwlpZiAoIXB0ZV95b3VuZygqcHRlcCkpCisJCXJldHVybiAwOworCXJldHVybiB0ZXN0X2FuZF9jbGVhcl9iaXQoX1BBR0VfQV9CSVQsIHB0ZXApOworI2Vsc2UKKwlwdGVfdCBwdGUgPSAqcHRlcDsKKwlpZiAoIXB0ZV95b3VuZyhwdGUpKQorCQlyZXR1cm4gMDsKKwlzZXRfcHRlX2F0KHZtYS0+dm1fbW0sIGFkZHIsIHB0ZXAsIHB0ZV9ta29sZChwdGUpKTsKKwlyZXR1cm4gMTsKKyNlbmRpZgorfQorCitzdGF0aWMgaW5saW5lIGludAorcHRlcF90ZXN0X2FuZF9jbGVhcl9kaXJ0eSAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApCit7CisjaWZkZWYgQ09ORklHX1NNUAorCWlmICghcHRlX2RpcnR5KCpwdGVwKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHRlc3RfYW5kX2NsZWFyX2JpdChfUEFHRV9EX0JJVCwgcHRlcCk7CisjZWxzZQorCXB0ZV90IHB0ZSA9ICpwdGVwOworCWlmICghcHRlX2RpcnR5KHB0ZSkpCisJCXJldHVybiAwOworCXNldF9wdGVfYXQodm1hLT52bV9tbSwgYWRkciwgcHRlcCwgcHRlX21rY2xlYW4ocHRlKSk7CisJcmV0dXJuIDE7CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSBwdGVfdAorcHRlcF9nZXRfYW5kX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKQoreworI2lmZGVmIENPTkZJR19TTVAKKwlyZXR1cm4gX19wdGUoeGNoZygobG9uZyAqKSBwdGVwLCAwKSk7CisjZWxzZQorCXB0ZV90IHB0ZSA9ICpwdGVwOworCXB0ZV9jbGVhcihtbSwgYWRkciwgcHRlcCk7CisJcmV0dXJuIHB0ZTsKKyNlbmRpZgorfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3B0ZXBfc2V0X3dycHJvdGVjdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCkKK3sKKyNpZmRlZiBDT05GSUdfU01QCisJdW5zaWduZWQgbG9uZyBuZXcsIG9sZDsKKworCWRvIHsKKwkJb2xkID0gcHRlX3ZhbCgqcHRlcCk7CisJCW5ldyA9IHB0ZV92YWwocHRlX3dycHJvdGVjdChfX3B0ZSAob2xkKSkpOworCX0gd2hpbGUgKGNtcHhjaGcoKHVuc2lnbmVkIGxvbmcgKikgcHRlcCwgb2xkLCBuZXcpICE9IG9sZCk7CisjZWxzZQorCXB0ZV90IG9sZF9wdGUgPSAqcHRlcDsKKwlzZXRfcHRlX2F0KG1tLCBhZGRyLCBwdGVwLCBwdGVfd3Jwcm90ZWN0KG9sZF9wdGUpKTsKKyNlbmRpZgorfQorCitzdGF0aWMgaW5saW5lIGludAorcHRlX3NhbWUgKHB0ZV90IGEsIHB0ZV90IGIpCit7CisJcmV0dXJuIHB0ZV92YWwoYSkgPT0gcHRlX3ZhbChiKTsKK30KKworI2RlZmluZSB1cGRhdGVfbW11X2NhY2hlKHZtYSwgYWRkcmVzcywgcHRlKSBkbyB7IH0gd2hpbGUgKDApCisKK2V4dGVybiBwZ2RfdCBzd2FwcGVyX3BnX2RpcltQVFJTX1BFUl9QR0RdOworZXh0ZXJuIHZvaWQgcGFnaW5nX2luaXQgKHZvaWQpOworCisvKgorICogTm90ZTogVGhlIG1hY3JvcyBiZWxvdyByZWx5IG9uIHRoZSBmYWN0IHRoYXQgTUFYX1NXQVBGSUxFU19TSElGVCA8PSBudW1iZXIgb2YKKyAqCSBiaXRzIGluIHRoZSBzd2FwLXR5cGUgZmllbGQgb2YgdGhlIHN3YXAgcHRlLiAgSXQgd291bGQgYmUgbmljZSB0bworICoJIGVuZm9yY2UgdGhhdCwgYnV0IHdlIGNhbid0IGVhc2lseSBpbmNsdWRlIDxsaW51eC9zd2FwLmg+IGhlcmUuCisgKgkgKE9mIGNvdXJzZSwgYmV0dGVyIHN0aWxsIHdvdWxkIGJlIHRvIGRlZmluZSBNQVhfU1dBUEZJTEVTX1NISUZUIGhlcmUuLi4pLgorICoKKyAqIEZvcm1hdCBvZiBzd2FwIHB0ZToKKyAqCWJpdCAgIDAgICA6IHByZXNlbnQgYml0IChtdXN0IGJlIHplcm8pCisgKgliaXQgICAxICAgOiBfUEFHRV9GSUxFIChtdXN0IGJlIHplcm8pCisgKgliaXRzICAyLSA4OiBzd2FwLXR5cGUKKyAqCWJpdHMgIDktNjI6IHN3YXAgb2Zmc2V0CisgKgliaXQgIDYzICAgOiBfUEFHRV9QUk9UTk9ORSBiaXQKKyAqCisgKiBGb3JtYXQgb2YgZmlsZSBwdGU6CisgKgliaXQgICAwICAgOiBwcmVzZW50IGJpdCAobXVzdCBiZSB6ZXJvKQorICoJYml0ICAgMSAgIDogX1BBR0VfRklMRSAobXVzdCBiZSBvbmUpCisgKgliaXRzICAyLTYyOiBmaWxlX29mZnNldC9QQUdFX1NJWkUKKyAqCWJpdCAgNjMgICA6IF9QQUdFX1BST1ROT05FIGJpdAorICovCisjZGVmaW5lIF9fc3dwX3R5cGUoZW50cnkpCQkoKChlbnRyeSkudmFsID4+IDIpICYgMHg3ZikKKyNkZWZpbmUgX19zd3Bfb2Zmc2V0KGVudHJ5KQkJKCgoZW50cnkpLnZhbCA8PCAxKSA+PiAxMCkKKyNkZWZpbmUgX19zd3BfZW50cnkodHlwZSxvZmZzZXQpCSgoc3dwX2VudHJ5X3QpIHsgKCh0eXBlKSA8PCAyKSB8ICgobG9uZykgKG9mZnNldCkgPDwgOSkgfSkKKyNkZWZpbmUgX19wdGVfdG9fc3dwX2VudHJ5KHB0ZSkJCSgoc3dwX2VudHJ5X3QpIHsgcHRlX3ZhbChwdGUpIH0pCisjZGVmaW5lIF9fc3dwX2VudHJ5X3RvX3B0ZSh4KQkJKChwdGVfdCkgeyAoeCkudmFsIH0pCisKKyNkZWZpbmUgUFRFX0ZJTEVfTUFYX0JJVFMJCTYxCisjZGVmaW5lIHB0ZV90b19wZ29mZihwdGUpCQkoKHB0ZV92YWwocHRlKSA8PCAxKSA+PiAzKQorI2RlZmluZSBwZ29mZl90b19wdGUob2ZmKQkJKChwdGVfdCkgeyAoKG9mZikgPDwgMikgfCBfUEFHRV9GSUxFIH0pCisKKy8qIFhYWCBpcyB0aGlzIHJpZ2h0PyAqLworI2RlZmluZSBpb19yZW1hcF9wYWdlX3JhbmdlKHZtYSwgdmFkZHIsIHBhZGRyLCBzaXplLCBwcm90KQkJXAorCQlyZW1hcF9wZm5fcmFuZ2Uodm1hLCB2YWRkciwgKHBhZGRyKSA+PiBQQUdFX1NISUZULCBzaXplLCBwcm90KQorCisjZGVmaW5lIGlvX3JlbWFwX3Bmbl9yYW5nZSh2bWEsIHZhZGRyLCBwZm4sIHNpemUsIHByb3QpCQlcCisJCXJlbWFwX3Bmbl9yYW5nZSh2bWEsIHZhZGRyLCBwZm4sIHNpemUsIHByb3QpCisKKyNkZWZpbmUgTUtfSU9TUEFDRV9QRk4oc3BhY2UsIHBmbikJKHBmbikKKyNkZWZpbmUgR0VUX0lPU1BBQ0UocGZuKQkJMAorI2RlZmluZSBHRVRfUEZOKHBmbikJCQkocGZuKQorCisvKgorICogWkVST19QQUdFIGlzIGEgZ2xvYmFsIHNoYXJlZCBwYWdlIHRoYXQgaXMgYWx3YXlzIHplcm86IHVzZWQKKyAqIGZvciB6ZXJvLW1hcHBlZCBtZW1vcnkgYXJlYXMgZXRjLi4KKyAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZW1wdHlfemVyb19wYWdlW1BBR0VfU0laRS9zaXplb2YodW5zaWduZWQgbG9uZyldOworZXh0ZXJuIHN0cnVjdCBwYWdlICp6ZXJvX3BhZ2VfbWVtbWFwX3B0cjsKKyNkZWZpbmUgWkVST19QQUdFKHZhZGRyKSAoemVyb19wYWdlX21lbW1hcF9wdHIpCisKKy8qIFdlIHByb3ZpZGUgb3VyIG93biBnZXRfdW5tYXBwZWRfYXJlYSB0byBjb3BlIHdpdGggVkEgaG9sZXMgZm9yIHVzZXJsYW5kICovCisjZGVmaW5lIEhBVkVfQVJDSF9VTk1BUFBFRF9BUkVBCisKKyNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCisjZGVmaW5lIEhVR0VUTEJfUEdESVJfU0hJRlQJKEhQQUdFX1NISUZUICsgMiooUEFHRV9TSElGVC0zKSkKKyNkZWZpbmUgSFVHRVRMQl9QR0RJUl9TSVpFCShfX0lBNjRfVUwoMSkgPDwgSFVHRVRMQl9QR0RJUl9TSElGVCkKKyNkZWZpbmUgSFVHRVRMQl9QR0RJUl9NQVNLCSh+KEhVR0VUTEJfUEdESVJfU0laRS0xKSkKK3N0cnVjdCBtbXVfZ2F0aGVyOworZXh0ZXJuIHZvaWQgaHVnZXRsYl9mcmVlX3BndGFibGVzKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsCisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICogcHJldiwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpOworI2VuZGlmCisKKy8qCisgKiBJQS02NCBkb2Vzbid0IGhhdmUgYW55IGV4dGVybmFsIE1NVSBpbmZvOiB0aGUgcGFnZSB0YWJsZXMgY29udGFpbiBhbGwgdGhlIG5lY2Vzc2FyeQorICogaW5mb3JtYXRpb24uICBIb3dldmVyLCB3ZSB1c2UgdGhpcyByb3V0aW5lIHRvIHRha2UgY2FyZSBvZiBhbnkgKGRlbGF5ZWQpIGktY2FjaGUKKyAqIGZsdXNoaW5nIHRoYXQgbWF5IGJlIG5lY2Vzc2FyeS4KKyAqLworZXh0ZXJuIHZvaWQgbGF6eV9tbXVfcHJvdF91cGRhdGUgKHB0ZV90IHB0ZSk7CisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFUF9TRVRfQUNDRVNTX0ZMQUdTCisvKgorICogVXBkYXRlIFBURVAgd2l0aCBFTlRSWSwgd2hpY2ggaXMgZ3VhcmFudGVlZCB0byBiZSBhIGxlc3MKKyAqIHJlc3RyaWN0aXZlIFBURS4gIFRoYXQgaXMsIEVOVFJZIG1heSBoYXZlIHRoZSBBQ0NFU1NFRCwgRElSVFksIGFuZAorICogV1JJVEFCTEUgYml0cyB0dXJuZWQgb24sIHdoZW4gdGhlIHZhbHVlIGF0IFBURVAgZGlkIG5vdC4gIFRoZQorICogV1JJVEFCTEUgYml0IG1heSBvbmx5IGJlIHR1cm5lZCBpZiBTQUZFTFlfV1JJVEFCTEUgaXMgVFJVRS4KKyAqCisgKiBTQUZFTFlfV1JJVEFCTEUgaXMgVFJVRSBpZiB3ZSBjYW4gdXBkYXRlIHRoZSB2YWx1ZSBhdCBQVEVQIHdpdGhvdXQKKyAqIGhhdmluZyB0byB3b3JyeSBhYm91dCByYWNlcy4gIE9uIFNNUCBtYWNoaW5lcywgdGhlcmUgYXJlIG9ubHkgdHdvCisgKiBjYXNlcyB3aGVyZSB0aGlzIGlzIHRydWU6CisgKgorICoJKDEpICpQVEVQIGhhcyB0aGUgUFJFU0VOVCBiaXQgdHVybmVkIE9GRgorICoJKDIpIEVOVFJZIGhhcyB0aGUgRElSVFkgYml0IHR1cm5lZCBPTgorICoKKyAqIE9uIGlhNjQsIHdlIGNvdWxkIGltcGxlbWVudCB0aGlzIHJvdXRpbmUgd2l0aCBhIGNtcHhjaGcoKS1sb29wCisgKiB3aGljaCBPUnMgaW4gdGhlIF9QQUdFX0EvX1BBR0VfRCBiaXQgaWYgdGhleSdyZSBzZXQgaW4gRU5UUlkuCisgKiBIb3dldmVyLCBsaWtlIG9uIHg4Niwgd2UgY2FuIGdldCBhIG1vcmUgc3RyZWFtbGluZWQgdmVyc2lvbiBieQorICogb2JzZXJ2aW5nIHRoYXQgaXQgaXMgT0sgdG8gZHJvcCBBQ0NFU1NFRCBiaXQgdXBkYXRlcyB3aGVuCisgKiBTQUZFTFlfV1JJVEFCTEUgaXMgRkFMU0UuICBCZXNpZGVzIGJlaW5nIHJhcmUsIGFsbCB0aGF0IHdvdWxkIGRvIGlzCisgKiByZXN1bHQgaW4gYW4gZXh0cmEgQWNjZXNzLWJpdCBmYXVsdCwgd2hpY2ggd291bGQgdGhlbiB0dXJuIG9uIHRoZQorICogQUNDRVNTRUQgYml0IGluIHRoZSBsb3ctbGV2ZWwgZmF1bHQgaGFuZGxlciAoaWFjY2Vzc19iaXQgb3IKKyAqIGRhY2Nlc3NfYml0IGluIGl2dC5TKS4KKyAqLworI2lmZGVmIENPTkZJR19TTVAKKyMgZGVmaW5lIHB0ZXBfc2V0X2FjY2Vzc19mbGFncyhfX3ZtYSwgX19hZGRyLCBfX3B0ZXAsIF9fZW50cnksIF9fc2FmZWx5X3dyaXRhYmxlKQlcCitkbyB7CQkJCQkJCQkJCQlcCisJaWYgKF9fc2FmZWx5X3dyaXRhYmxlKSB7CQkJCQkJCVwKKwkJc2V0X3B0ZShfX3B0ZXAsIF9fZW50cnkpOwkJCQkJCVwKKwkJZmx1c2hfdGxiX3BhZ2UoX192bWEsIF9fYWRkcik7CQkJCQkJXAorCX0JCQkJCQkJCQkJXAorfSB3aGlsZSAoMCkKKyNlbHNlCisjIGRlZmluZSBwdGVwX3NldF9hY2Nlc3NfZmxhZ3MoX192bWEsIF9fYWRkciwgX19wdGVwLCBfX2VudHJ5LCBfX3NhZmVseV93cml0YWJsZSkJXAorCXB0ZXBfZXN0YWJsaXNoKF9fdm1hLCBfX2FkZHIsIF9fcHRlcCwgX19lbnRyeSkKKyNlbmRpZgorCisjICBpZmRlZiBDT05GSUdfVklSVFVBTF9NRU1fTUFQCisgIC8qIGFyY2ggbWVtX21hcCBpbml0IHJvdXRpbmUgaXMgbmVlZGVkIGR1ZSB0byBob2xlcyBpbiBhIHZpcnR1YWwgbWVtX21hcCAqLworIyAgIGRlZmluZSBfX0hBVkVfQVJDSF9NRU1NQVBfSU5JVAorICAgIGV4dGVybiB2b2lkIG1lbW1hcF9pbml0ICh1bnNpZ25lZCBsb25nIHNpemUsIGludCBuaWQsIHVuc2lnbmVkIGxvbmcgem9uZSwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4pOworIyAgZW5kaWYgLyogQ09ORklHX1ZJUlRVQUxfTUVNX01BUCAqLworIyBlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCisKKy8qCisgKiBJZGVudGl0eS1tYXBwZWQgcmVnaW9ucyB1c2UgYSBsYXJnZSBwYWdlIHNpemUuICBXZSdsbCBjYWxsIHN1Y2ggbGFyZ2UgcGFnZXMKKyAqICJncmFudWxlcyIuICBJZiB5b3UgY2FuIHRoaW5rIG9mIGEgYmV0dGVyIG5hbWUgdGhhdCdzIHVuYW1iaWd1b3VzLCBsZXQgbWUKKyAqIGtub3cuLi4KKyAqLworI2lmIGRlZmluZWQoQ09ORklHX0lBNjRfR1JBTlVMRV82NE1CKQorIyBkZWZpbmUgSUE2NF9HUkFOVUxFX1NISUZUCV9QQUdFX1NJWkVfNjRNCisjZWxpZiBkZWZpbmVkKENPTkZJR19JQTY0X0dSQU5VTEVfMTZNQikKKyMgZGVmaW5lIElBNjRfR1JBTlVMRV9TSElGVAlfUEFHRV9TSVpFXzE2TQorI2VuZGlmCisjZGVmaW5lIElBNjRfR1JBTlVMRV9TSVpFCSgxIDw8IElBNjRfR1JBTlVMRV9TSElGVCkKKy8qCisgKiBsb2cyKCkgb2YgdGhlIHBhZ2Ugc2l6ZSB3ZSB1c2UgdG8gbWFwIHRoZSBrZXJuZWwgaW1hZ2UgKElBNjRfVFJfS0VSTkVMKToKKyAqLworI2RlZmluZSBLRVJORUxfVFJfUEFHRV9TSElGVAlfUEFHRV9TSVpFXzY0TQorI2RlZmluZSBLRVJORUxfVFJfUEFHRV9TSVpFCSgxIDw8IEtFUk5FTF9UUl9QQUdFX1NISUZUKQorCisvKgorICogTm8gcGFnZSB0YWJsZSBjYWNoZXMgdG8gaW5pdGlhbGlzZQorICovCisjZGVmaW5lIHBndGFibGVfY2FjaGVfaW5pdCgpCWRvIHsgfSB3aGlsZSAoMCkKKworLyogVGhlc2UgdGVsbCBnZXRfdXNlcl9wYWdlcygpIHRoYXQgdGhlIGZpcnN0IGdhdGUgcGFnZSBpcyBhY2Nlc3NpYmxlIGZyb20gdXNlci1sZXZlbC4gICovCisjZGVmaW5lIEZJWEFERFJfVVNFUl9TVEFSVAlHQVRFX0FERFIKKyNkZWZpbmUgRklYQUREUl9VU0VSX0VORAkoR0FURV9BRERSICsgMipQRVJDUFVfUEFHRV9TSVpFKQorCisjZGVmaW5lIF9fSEFWRV9BUkNIX1BURVBfVEVTVF9BTkRfQ0xFQVJfWU9VTkcKKyNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFUF9URVNUX0FORF9DTEVBUl9ESVJUWQorI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX0dFVF9BTkRfQ0xFQVIKKyNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFUF9TRVRfV1JQUk9URUNUCisjZGVmaW5lIF9fSEFWRV9BUkNIX1BURV9TQU1FCisjZGVmaW5lIF9fSEFWRV9BUkNIX1BHRF9PRkZTRVRfR0FURQorI2RlZmluZSBfX0hBVkVfQVJDSF9MQVpZX01NVV9QUk9UX1VQREFURQorCisvKgorICogT3ZlcnJpZGUgZm9yIHBnZF9hZGRyX2VuZCgpIHRvIGRlYWwgd2l0aCB0aGUgdmlydHVhbCBhZGRyZXNzIHNwYWNlIGhvbGVzCisgKiBpbiBlYWNoIHJlZ2lvbi4gIEluIHJlZ2lvbnMgMC4uNCB2aXJ0dWFsIGFkZHJlc3MgYml0cyBhcmUgdXNlZCBsaWtlIHRoaXM6CisgKiAgICAgICstLS0tLS0tLSstLS0tLS0rLS0tLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0tLS0rCisgKiAgICAgIHwgcGdkaGkzIHwgcnN2ZCB8IHBnZGxvdyB8IHBtZCB8IHB0ZSB8IG9mZnNldCB8CisgKiAgICAgICstLS0tLS0tLSstLS0tLS0rLS0tLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0tLS0rCisgKiAgJ3BnZGxvdycgb3ZlcmZsb3dzIHRvIHBnZGhpMyAoYS5rLmEuIHJlZ2lvbiBiaXRzKSBsZWF2aW5nIHJzdmQ9PTAKKyAqLworI2RlZmluZSBJQTY0X1BHRF9PVkVSRkxPVyAoUEdESVJfU0laRSA8PCAoUEFHRV9TSElGVC02KSkKKworI2RlZmluZSBwZ2RfYWRkcl9lbmQoYWRkciwgZW5kKQkJCQkJCVwKKyh7CXVuc2lnbmVkIGxvbmcgX19ib3VuZGFyeSA9ICgoYWRkcikgKyBQR0RJUl9TSVpFKSAmIFBHRElSX01BU0s7CVwKKyAJaWYgKFJFR0lPTl9OVU1CRVIoX19ib3VuZGFyeSkgPCA1ICYmIAkJCQlcCisJICAgIF9fYm91bmRhcnkgJiBJQTY0X1BHRF9PVkVSRkxPVykJCQkJXAorCQlfX2JvdW5kYXJ5ICs9IChSR05fU0laRSAtIDEpICYgfihJQTY0X1BHRF9PVkVSRkxPVyAtIDEpO1wKKwkoX19ib3VuZGFyeSAtIDEgPCAoZW5kKSAtIDEpPyBfX2JvdW5kYXJ5OiAoZW5kKTsJCVwKK30pCisKKyNkZWZpbmUgcG1kX2FkZHJfZW5kKGFkZHIsIGVuZCkJCQkJCQlcCisoewl1bnNpZ25lZCBsb25nIF9fYm91bmRhcnkgPSAoKGFkZHIpICsgUE1EX1NJWkUpICYgUE1EX01BU0s7CVwKKyAJaWYgKFJFR0lPTl9OVU1CRVIoX19ib3VuZGFyeSkgPCA1ICYmCQkJCVwKKwkgICAgX19ib3VuZGFyeSAmIElBNjRfUEdEX09WRVJGTE9XKQkJCQlcCisJCV9fYm91bmRhcnkgKz0gKFJHTl9TSVpFIC0gMSkgJiB+KElBNjRfUEdEX09WRVJGTE9XIC0gMSk7XAorCShfX2JvdW5kYXJ5IC0gMSA8IChlbmQpIC0gMSk/IF9fYm91bmRhcnk6IChlbmQpOwkJXAorfSkKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BndGFibGUtbm9wdWQuaD4KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wZ3RhYmxlLmg+CisKKyNlbmRpZiAvKiBfQVNNX0lBNjRfUEdUQUJMRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3BvbGwuaCBiL2luY2x1ZGUvYXNtLWlhNjQvcG9sbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2MDI1OGEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3BvbGwuaApAQCAtMCwwICsxLDMxIEBACisjaWZuZGVmIF9BU01fSUE2NF9QT0xMX0gKKyNkZWZpbmUgX0FTTV9JQTY0X1BPTExfSAorCisvKgorICogcG9sbCgyKSBiaXQgZGVmaW5pdGlvbnMuICBCYXNlZCBvbiA8YXNtLWkzODYvcG9sbC5oPi4KKyAqCisgKiBNb2RpZmllZCAxOTk4LCAxOTk5LCAyMDAyCisgKglEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+LCBIZXdsZXR0LVBhY2thcmQgQ28KKyAqLworCisjZGVmaW5lIFBPTExJTgkJMHgwMDAxCisjZGVmaW5lIFBPTExQUkkJCTB4MDAwMgorI2RlZmluZSBQT0xMT1VUCQkweDAwMDQKKyNkZWZpbmUgUE9MTEVSUgkJMHgwMDA4CisjZGVmaW5lIFBPTExIVVAJCTB4MDAxMAorI2RlZmluZSBQT0xMTlZBTAkweDAwMjAKKworI2RlZmluZSBQT0xMUkROT1JNCTB4MDA0MAorI2RlZmluZSBQT0xMUkRCQU5ECTB4MDA4MAorI2RlZmluZSBQT0xMV1JOT1JNCTB4MDEwMAorI2RlZmluZSBQT0xMV1JCQU5ECTB4MDIwMAorI2RlZmluZSBQT0xMTVNHCQkweDA0MDAKKyNkZWZpbmUgUE9MTFJFTU9WRQkweDEwMDAKKworc3RydWN0IHBvbGxmZCB7CisJaW50IGZkOworCXNob3J0IGV2ZW50czsKKwlzaG9ydCByZXZlbnRzOworfTsKKworI2VuZGlmIC8qIF9BU01fSUE2NF9QT0xMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvcG9zaXhfdHlwZXMuaCBiL2luY2x1ZGUvYXNtLWlhNjQvcG9zaXhfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGI2MjI3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taWE2NC9wb3NpeF90eXBlcy5oCkBAIC0wLDAgKzEsMTI2IEBACisjaWZuZGVmIF9BU01fSUE2NF9QT1NJWF9UWVBFU19ICisjZGVmaW5lIF9BU01fSUE2NF9QT1NJWF9UWVBFU19ICisKKy8qCisgKiBUaGlzIGZpbGUgaXMgZ2VuZXJhbGx5IHVzZWQgYnkgdXNlci1sZXZlbCBzb2Z0d2FyZSwgc28geW91IG5lZWQgdG8KKyAqIGJlIGEgbGl0dGxlIGNhcmVmdWwgYWJvdXQgbmFtZXNwYWNlIHBvbGx1dGlvbiBldGMuICBBbHNvLCB3ZSBjYW5ub3QKKyAqIGFzc3VtZSBHQ0MgaXMgYmVpbmcgdXNlZC4KKyAqCisgKiBCYXNlZCBvbiA8YXNtLWFscGhhL3Bvc2l4X3R5cGVzLmg+LgorICoKKyAqIE1vZGlmaWVkIDE5OTgtMjAwMCwgMjAwMworICoJRGF2aWQgTW9zYmVyZ2VyLVRhbmcgPGRhdmlkbUBocGwuaHAuY29tPiwgSGV3bGV0dC1QYWNrYXJkIENvCisgKi8KKwordHlwZWRlZiB1bnNpZ25lZCBsb25nCV9fa2VybmVsX2lub190OwordHlwZWRlZiB1bnNpZ25lZCBpbnQJX19rZXJuZWxfbW9kZV90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQJX19rZXJuZWxfbmxpbmtfdDsKK3R5cGVkZWYgbG9uZwkJX19rZXJuZWxfb2ZmX3Q7Cit0eXBlZGVmIGxvbmcgbG9uZwlfX2tlcm5lbF9sb2ZmX3Q7Cit0eXBlZGVmIGludAkJX19rZXJuZWxfcGlkX3Q7Cit0eXBlZGVmIGludAkJX19rZXJuZWxfaXBjX3BpZF90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQJX19rZXJuZWxfdWlkX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludAlfX2tlcm5lbF9naWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZwlfX2tlcm5lbF9zaXplX3Q7Cit0eXBlZGVmIGxvbmcJCV9fa2VybmVsX3NzaXplX3Q7Cit0eXBlZGVmIGxvbmcJCV9fa2VybmVsX3B0cmRpZmZfdDsKK3R5cGVkZWYgbG9uZwkJX19rZXJuZWxfdGltZV90OwordHlwZWRlZiBsb25nCQlfX2tlcm5lbF9zdXNlY29uZHNfdDsKK3R5cGVkZWYgbG9uZwkJX19rZXJuZWxfY2xvY2tfdDsKK3R5cGVkZWYgaW50CQlfX2tlcm5lbF90aW1lcl90OwordHlwZWRlZiBpbnQJCV9fa2VybmVsX2Nsb2NraWRfdDsKK3R5cGVkZWYgaW50CQlfX2tlcm5lbF9kYWRkcl90OwordHlwZWRlZiBjaGFyICoJCV9fa2VybmVsX2NhZGRyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcJX19rZXJuZWxfc2lnc2V0X3Q7CS8qIGF0IGxlYXN0IDMyIGJpdHMgKi8KK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJX19rZXJuZWxfdWlkMTZfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJX19rZXJuZWxfZ2lkMTZfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCWludAl2YWxbMl07Cit9IF9fa2VybmVsX2ZzaWRfdDsKKwordHlwZWRlZiBfX2tlcm5lbF91aWRfdCBfX2tlcm5lbF9vbGRfdWlkX3Q7Cit0eXBlZGVmIF9fa2VybmVsX2dpZF90IF9fa2VybmVsX29sZF9naWRfdDsKK3R5cGVkZWYgX19rZXJuZWxfdWlkX3QgX19rZXJuZWxfdWlkMzJfdDsKK3R5cGVkZWYgX19rZXJuZWxfZ2lkX3QgX19rZXJuZWxfZ2lkMzJfdDsKKwordHlwZWRlZiB1bnNpZ25lZCBpbnQJX19rZXJuZWxfb2xkX2Rldl90OworCisjIGlmZGVmIF9fS0VSTkVMX18KKworIyAgaWZuZGVmIF9fR05VQ19fCisKKyNkZWZpbmUJX19GRF9TRVQoZCwgc2V0KQkoKHNldCktPmZkc19iaXRzW19fRkRFTFQoZCldIHw9IF9fRkRNQVNLKGQpKQorI2RlZmluZQlfX0ZEX0NMUihkLCBzZXQpCSgoc2V0KS0+ZmRzX2JpdHNbX19GREVMVChkKV0gJj0gfl9fRkRNQVNLKGQpKQorI2RlZmluZQlfX0ZEX0lTU0VUKGQsIHNldCkJKCgoc2V0KS0+ZmRzX2JpdHNbX19GREVMVChkKV0gJiBfX0ZETUFTSyhkKSkgIT0gMCkKKyNkZWZpbmUJX19GRF9aRVJPKHNldCkJXAorICAoKHZvaWQpIG1lbXNldCAoKF9fcHRyX3QpIChzZXQpLCAwLCBzaXplb2YgKF9fa2VybmVsX2ZkX3NldCkpKQorCisjICBlbHNlIC8qICFfX0dOVUNfXyAqLworCisvKiBXaXRoIEdOVSBDLCB1c2UgaW5saW5lIGZ1bmN0aW9ucyBpbnN0ZWFkIHNvIGFyZ3MgYXJlIGV2YWx1YXRlZCBvbmx5IG9uY2U6ICovCisKKyN1bmRlZiBfX0ZEX1NFVAorc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0ZEX1NFVCh1bnNpZ25lZCBsb25nIGZkLCBfX2tlcm5lbF9mZF9zZXQgKmZkc2V0cCkKK3sKKwl1bnNpZ25lZCBsb25nIF90bXAgPSBmZCAvIF9fTkZEQklUUzsKKwl1bnNpZ25lZCBsb25nIF9yZW0gPSBmZCAlIF9fTkZEQklUUzsKKwlmZHNldHAtPmZkc19iaXRzW190bXBdIHw9ICgxVUw8PF9yZW0pOworfQorCisjdW5kZWYgX19GRF9DTFIKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19GRF9DTFIodW5zaWduZWQgbG9uZyBmZCwgX19rZXJuZWxfZmRfc2V0ICpmZHNldHApCit7CisJdW5zaWduZWQgbG9uZyBfdG1wID0gZmQgLyBfX05GREJJVFM7CisJdW5zaWduZWQgbG9uZyBfcmVtID0gZmQgJSBfX05GREJJVFM7CisJZmRzZXRwLT5mZHNfYml0c1tfdG1wXSAmPSB+KDFVTDw8X3JlbSk7Cit9CisKKyN1bmRlZiBfX0ZEX0lTU0VUCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19GRF9JU1NFVCh1bnNpZ25lZCBsb25nIGZkLCBjb25zdCBfX2tlcm5lbF9mZF9zZXQgKnApCit7IAorCXVuc2lnbmVkIGxvbmcgX3RtcCA9IGZkIC8gX19ORkRCSVRTOworCXVuc2lnbmVkIGxvbmcgX3JlbSA9IGZkICUgX19ORkRCSVRTOworCXJldHVybiAocC0+ZmRzX2JpdHNbX3RtcF0gJiAoMVVMPDxfcmVtKSkgIT0gMDsKK30KKworLyoKKyAqIFRoaXMgd2lsbCB1bnJvbGwgdGhlIGxvb3AgZm9yIHRoZSBub3JtYWwgY29uc3RhbnQgY2FzZSAoOCBpbnRzLAorICogZm9yIGEgMjU2LWJpdCBmZF9zZXQpCisgKi8KKyN1bmRlZiBfX0ZEX1pFUk8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19GRF9aRVJPKF9fa2VybmVsX2ZkX3NldCAqcCkKK3sKKwl1bnNpZ25lZCBsb25nICp0bXAgPSBwLT5mZHNfYml0czsKKwlpbnQgaTsKKworCWlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChfX0ZEU0VUX0xPTkdTKSkgeworCQlzd2l0Y2ggKF9fRkRTRVRfTE9OR1MpIHsKKwkJICAgICAgY2FzZSAxNjoKKwkJCXRtcFsgMF0gPSAwOyB0bXBbIDFdID0gMDsgdG1wWyAyXSA9IDA7IHRtcFsgM10gPSAwOworCQkJdG1wWyA0XSA9IDA7IHRtcFsgNV0gPSAwOyB0bXBbIDZdID0gMDsgdG1wWyA3XSA9IDA7CisJCQl0bXBbIDhdID0gMDsgdG1wWyA5XSA9IDA7IHRtcFsxMF0gPSAwOyB0bXBbMTFdID0gMDsKKwkJCXRtcFsxMl0gPSAwOyB0bXBbMTNdID0gMDsgdG1wWzE0XSA9IDA7IHRtcFsxNV0gPSAwOworCQkJcmV0dXJuOworCisJCSAgICAgIGNhc2UgODoKKwkJCXRtcFsgMF0gPSAwOyB0bXBbIDFdID0gMDsgdG1wWyAyXSA9IDA7IHRtcFsgM10gPSAwOworCQkJdG1wWyA0XSA9IDA7IHRtcFsgNV0gPSAwOyB0bXBbIDZdID0gMDsgdG1wWyA3XSA9IDA7CisJCQlyZXR1cm47CisKKwkJICAgICAgY2FzZSA0OgorCQkJdG1wWyAwXSA9IDA7IHRtcFsgMV0gPSAwOyB0bXBbIDJdID0gMDsgdG1wWyAzXSA9IDA7CisJCQlyZXR1cm47CisJCX0KKwl9CisJaSA9IF9fRkRTRVRfTE9OR1M7CisJd2hpbGUgKGkpIHsKKwkJaS0tOworCQkqdG1wID0gMDsKKwkJdG1wKys7CisJfQorfQorCisjICBlbmRpZiAvKiAhX19HTlVDX18gKi8KKyMgZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9BU01fSUE2NF9QT1NJWF9UWVBFU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3Byb2Nlc3Nvci5oIGIvaW5jbHVkZS9hc20taWE2NC9wcm9jZXNzb3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzY5ZGQ5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taWE2NC9wcm9jZXNzb3IuaApAQCAtMCwwICsxLDY5OCBAQAorI2lmbmRlZiBfQVNNX0lBNjRfUFJPQ0VTU09SX0gKKyNkZWZpbmUgX0FTTV9JQTY0X1BST0NFU1NPUl9ICisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwNCBIZXdsZXR0LVBhY2thcmQgQ28KKyAqCURhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4KKyAqCVN0ZXBoYW5lIEVyYW5pYW4gPGVyYW5pYW5AaHBsLmhwLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMTk5OSBBc2l0IE1hbGxpY2sgPGFzaXQuay5tYWxsaWNrQGludGVsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMTk5OSBEb24gRHVnZ2VyIDxkb24uZHVnZ2VyQGludGVsLmNvbT4KKyAqCisgKiAxMS8yNC85OAlTLkVyYW5pYW4JYWRkZWQgaWE2NF9zZXRfaXZhKCkKKyAqIDEyLzAzLzk5CUQuIE1vc2JlcmdlcglpbXBsZW1lbnQgdGhyZWFkX3NhdmVkX3BjKCkgdmlhIGtlcm5lbCB1bndpbmQgQVBJCisgKiAwNi8xNi8wMAlBLiBNYWxsaWNrCWFkZGVkIGNzZC9zc2QvdHNzZCBmb3IgaWEzMiBzdXBwb3J0CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjaW5jbHVkZSA8YXNtL2ludHJpbnNpY3MuaD4KKyNpbmNsdWRlIDxhc20va3JlZ3MuaD4KKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisjaW5jbHVkZSA8YXNtL3VzdGFjay5oPgorCisvKiBPdXIgYXJjaCBzcGVjaWZpYyBhcmNoX2luaXRfc2NoZWRfZG9tYWluIGlzIGluIGFyY2gvaWE2NC9rZXJuZWwvZG9tYWluLmMgKi8KKyNkZWZpbmUgQVJDSF9IQVNfU0NIRURfRE9NQUlOCisKKyNkZWZpbmUgSUE2NF9OVU1fREJHX1JFR1MJOAorLyoKKyAqIExpbWl0cyBmb3IgUE1DIGFuZCBQTUQgYXJlIHNldCB0byBsZXNzIHRoYW4gbWF4aW11bSBhcmNoaXRlY3RlZCB2YWx1ZXMKKyAqIGJ1dCBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgYSB3aGlsZQorICovCisjZGVmaW5lIElBNjRfTlVNX1BNQ19SRUdTCTMyCisjZGVmaW5lIElBNjRfTlVNX1BNRF9SRUdTCTMyCisKKyNkZWZpbmUgREVGQVVMVF9NQVBfQkFTRQlfX0lBNjRfVUxfQ09OU1QoMHgyMDAwMDAwMDAwMDAwMDAwKQorI2RlZmluZSBERUZBVUxUX1RBU0tfU0laRQlfX0lBNjRfVUxfQ09OU1QoMHhhMDAwMDAwMDAwMDAwMDAwKQorCisvKgorICogVEFTS19TSVpFIHJlYWxseSBpcyBhIG1pcy1uYW1lZC4gIEl0IHJlYWxseSBpcyB0aGUgbWF4aW11bSB1c2VyCisgKiBzcGFjZSBhZGRyZXNzIChwbHVzIG9uZSkuICBPbiBJQS02NCwgdGhlcmUgYXJlIGZpdmUgcmVnaW9ucyBvZiAyVEIKKyAqIGVhY2ggKGFzc3VtaW5nIDhLQiBwYWdlIHNpemUpLCBmb3IgYSB0b3RhbCBvZiA4VEIgb2YgdXNlciB2aXJ0dWFsCisgKiBhZGRyZXNzIHNwYWNlLgorICovCisjZGVmaW5lIFRBU0tfU0laRQkJKGN1cnJlbnQtPnRocmVhZC50YXNrX3NpemUpCisKKy8qCisgKiBNTV9WTV9TSVpFKG1tKSBnaXZlcyB0aGUgbWF4aW11bSBhZGRyZXNzIChwbHVzIDEpIHdoaWNoIG1heSBjb250YWluIGEgbWFwcGluZyBmb3IKKyAqIGFkZHJlc3Mtc3BhY2UgTU0uICBOb3RlIHRoYXQgd2l0aCAzMi1iaXQgdGFza3MsIHRoaXMgaXMgc3RpbGwgREVGQVVMVF9UQVNLX1NJWkUsCisgKiBiZWNhdXNlIHRoZSBrZXJuZWwgbWF5IGhhdmUgaW5zdGFsbGVkIGhlbHBlci1tYXBwaW5ncyBhYm92ZSBUQVNLX1NJWkUuICBGb3IgZXhhbXBsZSwKKyAqIGZvciB4ODYgZW11bGF0aW9uLCB0aGUgTERUIGFuZCBHRFQgYXJlIG1hcHBlZCBhYm92ZSBUQVNLX1NJWkUuCisgKi8KKyNkZWZpbmUgTU1fVk1fU0laRShtbSkJCURFRkFVTFRfVEFTS19TSVpFCisKKy8qCisgKiBUaGlzIGRlY2lkZXMgd2hlcmUgdGhlIGtlcm5lbCB3aWxsIHNlYXJjaCBmb3IgYSBmcmVlIGNodW5rIG9mIHZtCisgKiBzcGFjZSBkdXJpbmcgbW1hcCdzLgorICovCisjZGVmaW5lIFRBU0tfVU5NQVBQRURfQkFTRQkoY3VycmVudC0+dGhyZWFkLm1hcF9iYXNlKQorCisjZGVmaW5lIElBNjRfVEhSRUFEX0ZQSF9WQUxJRAkoX19JQTY0X1VMKDEpIDw8IDApCS8qIGZsb2F0aW5nLXBvaW50IGhpZ2ggc3RhdGUgdmFsaWQ/ICovCisjZGVmaW5lIElBNjRfVEhSRUFEX0RCR19WQUxJRAkoX19JQTY0X1VMKDEpIDw8IDEpCS8qIGRlYnVnIHJlZ2lzdGVycyB2YWxpZD8gKi8KKyNkZWZpbmUgSUE2NF9USFJFQURfUE1fVkFMSUQJKF9fSUE2NF9VTCgxKSA8PCAyKQkvKiBwZXJmb3JtYW5jZSByZWdpc3RlcnMgdmFsaWQ/ICovCisjZGVmaW5lIElBNjRfVEhSRUFEX1VBQ19OT1BSSU5UCShfX0lBNjRfVUwoMSkgPDwgMykJLyogZG9uJ3QgbG9nIHVuYWxpZ25lZCBhY2Nlc3NlcyAqLworI2RlZmluZSBJQTY0X1RIUkVBRF9VQUNfU0lHQlVTCShfX0lBNjRfVUwoMSkgPDwgNCkJLyogZ2VuZXJhdGUgU0lHQlVTIG9uIHVuYWxpZ25lZCBhY2MuICovCisJCQkJCQkJLyogYml0IDUgaXMgY3VycmVudGx5IHVudXNlZCAqLworI2RlZmluZSBJQTY0X1RIUkVBRF9GUEVNVV9OT1BSSU5UIChfX0lBNjRfVUwoMSkgPDwgNikJLyogZG9uJ3QgbG9nIGFueSBmcHN3YSBmYXVsdHMgKi8KKyNkZWZpbmUgSUE2NF9USFJFQURfRlBFTVVfU0lHRlBFICAoX19JQTY0X1VMKDEpIDw8IDcpCS8qIHNlbmQgYSBTSUdGUEUgZm9yIGZwc3dhIGZhdWx0cyAqLworCisjZGVmaW5lIElBNjRfVEhSRUFEX1VBQ19TSElGVAkzCisjZGVmaW5lIElBNjRfVEhSRUFEX1VBQ19NQVNLCShJQTY0X1RIUkVBRF9VQUNfTk9QUklOVCB8IElBNjRfVEhSRUFEX1VBQ19TSUdCVVMpCisjZGVmaW5lIElBNjRfVEhSRUFEX0ZQRU1VX1NISUZUCTYKKyNkZWZpbmUgSUE2NF9USFJFQURfRlBFTVVfTUFTSwkoSUE2NF9USFJFQURfRlBFTVVfTk9QUklOVCB8IElBNjRfVEhSRUFEX0ZQRU1VX1NJR0ZQRSkKKworCisvKgorICogVGhpcyBzaGlmdCBzaG91bGQgYmUgbGFyZ2UgZW5vdWdoIHRvIGJlIGFibGUgdG8gcmVwcmVzZW50IDEwMDAwMDAwMDAvaXRjX2ZyZXEgd2l0aCBnb29kCisgKiBhY2N1cmFjeSB3aGlsZSBiZWluZyBzbWFsbCBlbm91Z2ggdG8gZml0IDEwKjEwMDAwMDAwMDA8PElBNjRfTlNFQ19QRVJfQ1lDX1NISUZUIGluIDY0IGJpdHMKKyAqICh0aGlzIHdpbGwgZ2l2ZSBlbm91Z2ggc2xhY2sgdG8gcmVwcmVzZW50IDEwIHNlY29uZHMgd29ydGggb2YgdGltZSBhcyBhIHNjYWxlZCBudW1iZXIpLgorICovCisjZGVmaW5lIElBNjRfTlNFQ19QRVJfQ1lDX1NISUZUCTMwCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNpbmNsdWRlIDxhc20vZnB1Lmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vcGVyY3B1Lmg+CisjaW5jbHVkZSA8YXNtL3JzZS5oPgorI2luY2x1ZGUgPGFzbS91bndpbmQuaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaWZkZWYgQ09ORklHX05VTUEKKyNpbmNsdWRlIDxhc20vbm9kZWRhdGEuaD4KKyNlbmRpZgorCisvKiBsaWtlIGFib3ZlIGJ1dCBleHByZXNzZWQgYXMgYml0ZmllbGRzIGZvciBtb3JlIGVmZmljaWVudCBhY2Nlc3M6ICovCitzdHJ1Y3QgaWE2NF9wc3IgeworCV9fdTY0IHJlc2VydmVkMCA6IDE7CisJX191NjQgYmUgOiAxOworCV9fdTY0IHVwIDogMTsKKwlfX3U2NCBhYyA6IDE7CisJX191NjQgbWZsIDogMTsKKwlfX3U2NCBtZmggOiAxOworCV9fdTY0IHJlc2VydmVkMSA6IDc7CisJX191NjQgaWMgOiAxOworCV9fdTY0IGkgOiAxOworCV9fdTY0IHBrIDogMTsKKwlfX3U2NCByZXNlcnZlZDIgOiAxOworCV9fdTY0IGR0IDogMTsKKwlfX3U2NCBkZmwgOiAxOworCV9fdTY0IGRmaCA6IDE7CisJX191NjQgc3AgOiAxOworCV9fdTY0IHBwIDogMTsKKwlfX3U2NCBkaSA6IDE7CisJX191NjQgc2kgOiAxOworCV9fdTY0IGRiIDogMTsKKwlfX3U2NCBscCA6IDE7CisJX191NjQgdGIgOiAxOworCV9fdTY0IHJ0IDogMTsKKwlfX3U2NCByZXNlcnZlZDMgOiA0OworCV9fdTY0IGNwbCA6IDI7CisJX191NjQgaXMgOiAxOworCV9fdTY0IG1jIDogMTsKKwlfX3U2NCBpdCA6IDE7CisJX191NjQgaWQgOiAxOworCV9fdTY0IGRhIDogMTsKKwlfX3U2NCBkZCA6IDE7CisJX191NjQgc3MgOiAxOworCV9fdTY0IHJpIDogMjsKKwlfX3U2NCBlZCA6IDE7CisJX191NjQgYm4gOiAxOworCV9fdTY0IHJlc2VydmVkNCA6IDE5OworfTsKKworLyoKKyAqIENQVSB0eXBlLCBoYXJkd2FyZSBidWcgZmxhZ3MsIGFuZCBwZXItQ1BVIHN0YXRlLiAgRnJlcXVlbnRseSB1c2VkCisgKiBzdGF0ZSBjb21lcyBlYXJsaWVyOgorICovCitzdHJ1Y3QgY3B1aW5mb19pYTY0IHsKKwlfX3UzMiBzb2Z0aXJxX3BlbmRpbmc7CisJX191NjQgaXRtX2RlbHRhOwkvKiAjIG9mIGNsb2NrIGN5Y2xlcyBiZXR3ZWVuIGNsb2NrIHRpY2tzICovCisJX191NjQgaXRtX25leHQ7CQkvKiBpbnRlcnZhbCB0aW1lciBtYXNrIHZhbHVlIHRvIHVzZSBmb3IgbmV4dCBjbG9jayB0aWNrICovCisJX191NjQgbnNlY19wZXJfY3ljOwkvKiAoMTAwMDAwMDAwMDw8SUE2NF9OU0VDX1BFUl9DWUNfU0hJRlQpL2l0Y19mcmVxICovCisJX191NjQgdW5pbXBsX3ZhX21hc2s7CS8qIG1hc2sgb2YgdW5pbXBsZW1lbnRlZCB2aXJ0dWFsIGFkZHJlc3MgYml0cyAoZnJvbSBQQUwpICovCisJX191NjQgdW5pbXBsX3BhX21hc2s7CS8qIG1hc2sgb2YgdW5pbXBsZW1lbnRlZCBwaHlzaWNhbCBhZGRyZXNzIGJpdHMgKGZyb20gUEFMKSAqLworCV9fdTY0ICpwZ2RfcXVpY2s7CisJX191NjQgKnBtZF9xdWljazsKKwlfX3U2NCBwZ3RhYmxlX2NhY2hlX3N6OworCV9fdTY0IGl0Y19mcmVxOwkJLyogZnJlcXVlbmN5IG9mIElUQyBjb3VudGVyICovCisJX191NjQgcHJvY19mcmVxOwkvKiBmcmVxdWVuY3kgb2YgcHJvY2Vzc29yICovCisJX191NjQgY3ljX3Blcl91c2VjOwkvKiBpdGNfZnJlcS8xMDAwMDAwICovCisJX191NjQgcHRjZV9iYXNlOworCV9fdTMyIHB0Y2VfY291bnRbMl07CisJX191MzIgcHRjZV9zdHJpZGVbMl07CisJc3RydWN0IHRhc2tfc3RydWN0ICprc29mdGlycWQ7CS8qIGtlcm5lbCBzb2Z0aXJxIGRhZW1vbiBmb3IgdGhpcyBDUFUgKi8KKworI2lmZGVmIENPTkZJR19TTVAKKwlfX3U2NCBsb29wc19wZXJfamlmZnk7CisJaW50IGNwdTsKKyNlbmRpZgorCisJLyogQ1BVSUQtZGVyaXZlZCBpbmZvcm1hdGlvbjogKi8KKwlfX3U2NCBwcG47CisJX191NjQgZmVhdHVyZXM7CisJX191OCBudW1iZXI7CisJX191OCByZXZpc2lvbjsKKwlfX3U4IG1vZGVsOworCV9fdTggZmFtaWx5OworCV9fdTggYXJjaHJldjsKKwljaGFyIHZlbmRvclsxNl07CisKKyNpZmRlZiBDT05GSUdfTlVNQQorCXN0cnVjdCBpYTY0X25vZGVfZGF0YSAqbm9kZV9kYXRhOworI2VuZGlmCit9OworCitERUNMQVJFX1BFUl9DUFUoc3RydWN0IGNwdWluZm9faWE2NCwgY3B1X2luZm8pOworCisvKgorICogVGhlICJsb2NhbCIgZGF0YSB2YXJpYWJsZS4gIEl0IHJlZmVycyB0byB0aGUgcGVyLUNQVSBkYXRhIG9mIHRoZSBjdXJyZW50bHkgZXhlY3V0aW5nCisgKiBDUFUsIG11Y2ggbGlrZSAiY3VycmVudCIgcG9pbnRzIHRvIHRoZSBwZXItdGFzayBkYXRhIG9mIHRoZSBjdXJyZW50bHkgZXhlY3V0aW5nIHRhc2suCisgKiBEbyBub3QgdXNlIHRoZSBhZGRyZXNzIG9mIGxvY2FsX2NwdV9kYXRhLCBzaW5jZSBpdCB3aWxsIGJlIGRpZmZlcmVudCBmcm9tCisgKiBjcHVfZGF0YShzbXBfcHJvY2Vzc29yX2lkKCkpIQorICovCisjZGVmaW5lIGxvY2FsX2NwdV9kYXRhCQkoJl9faWE2NF9wZXJfY3B1X3ZhcihjcHVfaW5mbykpCisjZGVmaW5lIGNwdV9kYXRhKGNwdSkJCSgmcGVyX2NwdShjcHVfaW5mbywgY3B1KSkKKworZXh0ZXJuIHZvaWQgaWRlbnRpZnlfY3B1IChzdHJ1Y3QgY3B1aW5mb19pYTY0ICopOworZXh0ZXJuIHZvaWQgcHJpbnRfY3B1X2luZm8gKHN0cnVjdCBjcHVpbmZvX2lhNjQgKik7CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBsb25nIHNlZzsKK30gbW1fc2VnbWVudF90OworCisjZGVmaW5lIFNFVF9VTkFMSUdOX0NUTCh0YXNrLHZhbHVlKQkJCQkJCQkJXAorKHsJCQkJCQkJCQkJCQlcCisJKHRhc2spLT50aHJlYWQuZmxhZ3MgPSAoKCh0YXNrKS0+dGhyZWFkLmZsYWdzICYgfklBNjRfVEhSRUFEX1VBQ19NQVNLKQkJCVwKKwkJCQl8ICgoKHZhbHVlKSA8PCBJQTY0X1RIUkVBRF9VQUNfU0hJRlQpICYgSUE2NF9USFJFQURfVUFDX01BU0spKTsJXAorCTA7CQkJCQkJCQkJCQlcCit9KQorI2RlZmluZSBHRVRfVU5BTElHTl9DVEwodGFzayxhZGRyKQkJCQkJCQkJXAorKHsJCQkJCQkJCQkJCQlcCisJcHV0X3VzZXIoKCh0YXNrKS0+dGhyZWFkLmZsYWdzICYgSUE2NF9USFJFQURfVUFDX01BU0spID4+IElBNjRfVEhSRUFEX1VBQ19TSElGVCwJXAorCQkgKGludCBfX3VzZXIgKikgKGFkZHIpKTsJCQkJCQkJXAorfSkKKworI2RlZmluZSBTRVRfRlBFTVVfQ1RMKHRhc2ssdmFsdWUpCQkJCQkJCQlcCisoewkJCQkJCQkJCQkJCVwKKwkodGFzayktPnRocmVhZC5mbGFncyA9ICgoKHRhc2spLT50aHJlYWQuZmxhZ3MgJiB+SUE2NF9USFJFQURfRlBFTVVfTUFTSykJCVwKKwkJCSAgfCAoKCh2YWx1ZSkgPDwgSUE2NF9USFJFQURfRlBFTVVfU0hJRlQpICYgSUE2NF9USFJFQURfRlBFTVVfTUFTSykpOwlcCisJMDsJCQkJCQkJCQkJCVwKK30pCisjZGVmaW5lIEdFVF9GUEVNVV9DVEwodGFzayxhZGRyKQkJCQkJCQkJXAorKHsJCQkJCQkJCQkJCQlcCisJcHV0X3VzZXIoKCh0YXNrKS0+dGhyZWFkLmZsYWdzICYgSUE2NF9USFJFQURfRlBFTVVfTUFTSykgPj4gSUE2NF9USFJFQURfRlBFTVVfU0hJRlQsCVwKKwkJIChpbnQgX191c2VyICopIChhZGRyKSk7CQkJCQkJCVwKK30pCisKKyNpZmRlZiBDT05GSUdfSUEzMl9TVVBQT1JUCitzdHJ1Y3QgZGVzY19zdHJ1Y3QgeworCXVuc2lnbmVkIGludCBhLCBiOworfTsKKworI2RlZmluZSBkZXNjX2VtcHR5KGRlc2MpCQkoISgoZGVzYyktPmEgKyAoZGVzYyktPmIpKQorI2RlZmluZSBkZXNjX2VxdWFsKGRlc2MxLCBkZXNjMikJKCgoZGVzYzEpLT5hID09IChkZXNjMiktPmEpICYmICgoZGVzYzEpLT5iID09IChkZXNjMiktPmIpKQorCisjZGVmaW5lIEdEVF9FTlRSWV9UTFNfRU5UUklFUwkzCisjZGVmaW5lIEdEVF9FTlRSWV9UTFNfTUlOCTYKKyNkZWZpbmUgR0RUX0VOVFJZX1RMU19NQVggCShHRFRfRU5UUllfVExTX01JTiArIEdEVF9FTlRSWV9UTFNfRU5UUklFUyAtIDEpCisKKyNkZWZpbmUgVExTX1NJWkUgKEdEVF9FTlRSWV9UTFNfRU5UUklFUyAqIDgpCisKK3N0cnVjdCBwYXJ0aWFsX3BhZ2VfbGlzdDsKKyNlbmRpZgorCitzdHJ1Y3QgdGhyZWFkX3N0cnVjdCB7CisJX191MzIgZmxhZ3M7CQkJLyogdmFyaW91cyB0aHJlYWQgZmxhZ3MgKHNlZSBJQTY0X1RIUkVBRF8qKSAqLworCS8qIHdyaXRpbmcgb25fdXN0YWNrIGlzIHBlcmZvcm1hbmNlLWNyaXRpY2FsLCBzbyBpdCdzIHdvcnRoIHNwZW5kaW5nIDggYml0cyBvbiBpdC4uLiAqLworCV9fdTggb25fdXN0YWNrOwkJCS8qIGV4ZWN1dGluZyBvbiB1c2VyLXN0YWNrcz8gKi8KKwlfX3U4IHBhZFszXTsKKwlfX3U2NCBrc3A7CQkJLyoga2VybmVsIHN0YWNrIHBvaW50ZXIgKi8KKwlfX3U2NCBtYXBfYmFzZTsJCQkvKiBiYXNlIGFkZHJlc3MgZm9yIGdldF91bm1hcHBlZF9hcmVhKCkgKi8KKwlfX3U2NCB0YXNrX3NpemU7CQkvKiBsaW1pdCBmb3IgdGFzayBzaXplICovCisJX191NjQgcmJzX2JvdDsJCQkvKiB0aGUgYmFzZSBhZGRyZXNzIGZvciB0aGUgUkJTICovCisJaW50IGxhc3RfZnBoX2NwdTsJCS8qIENQVSB0aGF0IG1heSBob2xkIHRoZSBjb250ZW50cyBvZiBmMzItZjEyNyAqLworCisjaWZkZWYgQ09ORklHX0lBMzJfU1VQUE9SVAorCV9fdTY0IGVmbGFnOwkJCS8qIElBMzIgRUZMQUdTIHJlZyAqLworCV9fdTY0IGZzcjsJCQkvKiBJQTMyIGZsb2F0aW5nIHB0IHN0YXR1cyByZWcgKi8KKwlfX3U2NCBmY3I7CQkJLyogSUEzMiBmbG9hdGluZyBwdCBjb250cm9sIHJlZyAqLworCV9fdTY0IGZpcjsJCQkvKiBJQTMyIGZwIGV4Y2VwdC4gaW5zdHIuIHJlZyAqLworCV9fdTY0IGZkcjsJCQkvKiBJQTMyIGZwIGV4Y2VwdC4gZGF0YSByZWcgKi8KKwlfX3U2NCBvbGRfazE7CQkJLyogb2xkIHZhbHVlIG9mIGFyLmsxICovCisJX191NjQgb2xkX2lvYjsJCQkvKiBvbGQgSU9CYXNlIHZhbHVlICovCisJc3RydWN0IHBhcnRpYWxfcGFnZV9saXN0ICpwcGw7CS8qIHBhcnRpYWwgcGFnZSBsaXN0IGZvciA0SyBwYWdlIHNpemUgaXNzdWUgKi8KKyAgICAgICAgLyogY2FjaGVkIFRMUyBkZXNjcmlwdG9ycy4gKi8KKwlzdHJ1Y3QgZGVzY19zdHJ1Y3QgdGxzX2FycmF5W0dEVF9FTlRSWV9UTFNfRU5UUklFU107CisKKyMgZGVmaW5lIElOSVRfVEhSRUFEX0lBMzIJLmVmbGFnID0JMCwJCQlcCisJCQkJLmZzciA9CQkwLAkJCVwKKwkJCQkuZmNyID0JCTB4MTc4MDAwMDAwMzdmVUxMLAlcCisJCQkJLmZpciA9CQkwLAkJCVwKKwkJCQkuZmRyID0JCTAsCQkJXAorCQkJCS5vbGRfazEgPQkwLAkJCVwKKwkJCQkub2xkX2lvYiA9CTAsCQkJXAorCQkJCS5wcGwgPQkJTlVMTCwKKyNlbHNlCisjIGRlZmluZSBJTklUX1RIUkVBRF9JQTMyCisjZW5kaWYgLyogQ09ORklHX0lBMzJfU1VQUE9SVCAqLworI2lmZGVmIENPTkZJR19QRVJGTU9OCisJX191NjQgcG1jc1tJQTY0X05VTV9QTUNfUkVHU107CisJX191NjQgcG1kc1tJQTY0X05VTV9QTURfUkVHU107CisJdm9pZCAqcGZtX2NvbnRleHQ7CQkgICAgIC8qIHBvaW50ZXIgdG8gZGV0YWlsZWQgUE1VIGNvbnRleHQgKi8KKwl1bnNpZ25lZCBsb25nIHBmbV9uZWVkc19jaGVja2luZzsgICAgLyogd2hlbiA+MCwgcGVuZGluZyBwZXJmbW9uIHdvcmsgb24ga2VybmVsIGV4aXQgKi8KKyMgZGVmaW5lIElOSVRfVEhSRUFEX1BNCQkucG1jcyA9CQkJezBVTCwgfSwgIFwKKwkJCQkucG1kcyA9CQkJezBVTCwgfSwgIFwKKwkJCQkucGZtX2NvbnRleHQgPQkJTlVMTCwgICAgIFwKKwkJCQkucGZtX25lZWRzX2NoZWNraW5nID0JMFVMLAorI2Vsc2UKKyMgZGVmaW5lIElOSVRfVEhSRUFEX1BNCisjZW5kaWYKKwlfX3U2NCBkYnJbSUE2NF9OVU1fREJHX1JFR1NdOworCV9fdTY0IGlicltJQTY0X05VTV9EQkdfUkVHU107CisJc3RydWN0IGlhNjRfZnByZWcgZnBoWzk2XTsJLyogc2F2ZWQvbG9hZGVkIG9uIGRlbWFuZCAqLworfTsKKworI2RlZmluZSBJTklUX1RIUkVBRCB7CQkJCQkJXAorCS5mbGFncyA9CTAsCQkJCQlcCisJLm9uX3VzdGFjayA9CTAsCQkJCQlcCisJLmtzcCA9CQkwLAkJCQkJXAorCS5tYXBfYmFzZSA9CURFRkFVTFRfTUFQX0JBU0UsCQkJXAorCS5yYnNfYm90ID0JU1RBQ0tfVE9QIC0gREVGQVVMVF9VU0VSX1NUQUNLX1NJWkUsCVwKKwkudGFza19zaXplID0JREVGQVVMVF9UQVNLX1NJWkUsCQkJXAorCS5sYXN0X2ZwaF9jcHUgPSAgLTEsCQkJCQlcCisJSU5JVF9USFJFQURfSUEzMgkJCQkJXAorCUlOSVRfVEhSRUFEX1BNCQkJCQkJXAorCS5kYnIgPQkJezAsIH0sCQkJCQlcCisJLmliciA9CQl7MCwgfSwJCQkJCVwKKwkuZnBoID0JCXt7e3swfX19LCB9CQkJCVwKK30KKworI2RlZmluZSBzdGFydF90aHJlYWQocmVncyxuZXdfaXAsbmV3X3NwKSBkbyB7CQkJCQkJCVwKKwlzZXRfZnMoVVNFUl9EUyk7CQkJCQkJCQkJXAorCXJlZ3MtPmNyX2lwc3IgPSAoKHJlZ3MtPmNyX2lwc3IgfCAoSUE2NF9QU1JfQklUU19UT19TRVQgfCBJQTY0X1BTUl9DUEwpKQkJXAorCQkJICYgfihJQTY0X1BTUl9CSVRTX1RPX0NMRUFSIHwgSUE2NF9QU1JfUkkgfCBJQTY0X1BTUl9JUykpOwkJXAorCXJlZ3MtPmNyX2lpcCA9IG5ld19pcDsJCQkJCQkJCQlcCisJcmVncy0+YXJfcnNjID0gMHhmOwkJLyogZWFnZXIgbW9kZSwgcHJpdmlsZWdlIGxldmVsIDMgKi8JCQlcCisJcmVncy0+YXJfcm5hdCA9IDA7CQkJCQkJCQkJXAorCXJlZ3MtPmFyX2JzcHN0b3JlID0gY3VycmVudC0+dGhyZWFkLnJic19ib3Q7CQkJCQkJXAorCXJlZ3MtPmFyX2Zwc3IgPSBGUFNSX0RFRkFVTFQ7CQkJCQkJCQlcCisJcmVncy0+bG9hZHJzID0gMDsJCQkJCQkJCQlcCisJcmVncy0+cjggPSBjdXJyZW50LT5tbS0+ZHVtcGFibGU7CS8qIHNldCAiZG9uJ3QgemFwIHJlZ2lzdGVycyIgZmxhZyAqLwkJXAorCXJlZ3MtPnIxMiA9IG5ld19zcCAtIDE2OwkvKiBhbGxvY2F0ZSAxNiBieXRlIHNjcmF0Y2ggYXJlYSAqLwkJCVwKKwlpZiAodW5saWtlbHkoIWN1cnJlbnQtPm1tLT5kdW1wYWJsZSkpIHsJCQkJCQkJXAorCQkvKgkJCQkJCQkJCQlcCisJCSAqIFphcCBzY3JhdGNoIHJlZ3MgdG8gYXZvaWQgbGVha2luZyBiaXRzIGJldHdlZW4gcHJvY2Vzc2VzIHdpdGggZGlmZmVyZW50CVwKKwkJICogdWlkL3ByaXZpbGVnZXMuCQkJCQkJCQlcCisJCSAqLwkJCQkJCQkJCQlcCisJCXJlZ3MtPmFyX3BmcyA9IDA7IHJlZ3MtPmIwID0gMDsgcmVncy0+cHIgPSAwOwkJCQkJXAorCQlyZWdzLT5yMSA9IDA7IHJlZ3MtPnI5ICA9IDA7IHJlZ3MtPnIxMSA9IDA7IHJlZ3MtPnIxMyA9IDA7IHJlZ3MtPnIxNSA9IDA7CVwKKwl9CQkJCQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9ucywgYSBzdHJhbmdlIEMgdGhpbmcuLi4gKi8KK3N0cnVjdCBtbV9zdHJ1Y3Q7CitzdHJ1Y3QgdGFza19zdHJ1Y3Q7CisKKy8qCisgKiBGcmVlIGFsbCByZXNvdXJjZXMgaGVsZCBieSBhIHRocmVhZC4gVGhpcyBpcyBjYWxsZWQgYWZ0ZXIgdGhlCisgKiBwYXJlbnQgb2YgREVBRF9UQVNLIGhhcyBjb2xsZWN0ZWQgdGhlIGV4aXQgc3RhdHVzIG9mIHRoZSB0YXNrIHZpYQorICogd2FpdCgpLgorICovCisjZGVmaW5lIHJlbGVhc2VfdGhyZWFkKGRlYWRfdGFzaykKKworLyogUHJlcGFyZSB0byBjb3B5IHRocmVhZCBzdGF0ZSAtIHVubGF6eSBhbGwgbGF6eSBzdGF0dXMgKi8KKyNkZWZpbmUgcHJlcGFyZV90b19jb3B5KHRzaykJZG8geyB9IHdoaWxlICgwKQorCisvKgorICogVGhpcyBpcyB0aGUgbWVjaGFuaXNtIGZvciBjcmVhdGluZyBhIG5ldyBrZXJuZWwgdGhyZWFkLgorICoKKyAqIE5PVEUgMTogT25seSBhIGtlcm5lbC1vbmx5IHByb2Nlc3MgKGllIHRoZSBzd2FwcGVyIG9yIGRpcmVjdAorICogZGVzY2VuZGFudHMgd2hvIGhhdmVuJ3QgZG9uZSBhbiAiZXhlY3ZlKCkiKSBzaG91bGQgdXNlIHRoaXM6IGl0CisgKiB3aWxsIHdvcmsgd2l0aGluIGEgc3lzdGVtIGNhbGwgZnJvbSBhICJyZWFsIiBwcm9jZXNzLCBidXQgdGhlCisgKiBwcm9jZXNzIG1lbW9yeSBzcGFjZSB3aWxsIG5vdCBiZSBmcmVlJ2QgdW50aWwgYm90aCB0aGUgcGFyZW50IGFuZAorICogdGhlIGNoaWxkIGhhdmUgZXhpdGVkLgorICoKKyAqIE5PVEUgMjogVGhpcyBNVVNUIE5PVCBiZSBhbiBpbmxpbmVkIGZ1bmN0aW9uLiAgT3RoZXJ3aXNlLCB3ZSBnZXQKKyAqIGludG8gdHJvdWJsZSBpbiBpbml0L21haW4uYyB3aGVuIHRoZSBjaGlsZCB0aHJlYWQgcmV0dXJucyB0bworICogZG9fYmFzaWNfc2V0dXAoKSBhbmQgdGhlIHRpbWluZyBpcyBzdWNoIHRoYXQgZnJlZV9pbml0bWVtKCkgaGFzCisgKiBiZWVuIGNhbGxlZCBhbHJlYWR5LgorICovCitleHRlcm4gcGlkX3Qga2VybmVsX3RocmVhZCAoaW50ICgqZm4pKHZvaWQgKiksIHZvaWQgKmFyZywgdW5zaWduZWQgbG9uZyBmbGFncyk7CisKKy8qIEdldCB3YWl0IGNoYW5uZWwgZm9yIHRhc2sgUC4gICovCitleHRlcm4gdW5zaWduZWQgbG9uZyBnZXRfd2NoYW4gKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7CisKKy8qIFJldHVybiBpbnN0cnVjdGlvbiBwb2ludGVyIG9mIGJsb2NrZWQgdGFzayBUU0suICAqLworI2RlZmluZSBLU1RLX0VJUCh0c2spCQkJCQlcCisgICh7CQkJCQkJCVwKKwlzdHJ1Y3QgcHRfcmVncyAqX3JlZ3MgPSBpYTY0X3Rhc2tfcmVncyh0c2spOwlcCisJX3JlZ3MtPmNyX2lpcCArIGlhNjRfcHNyKF9yZWdzKS0+cmk7CQlcCisgIH0pCisKKy8qIFJldHVybiBzdGFjayBwb2ludGVyIG9mIGJsb2NrZWQgdGFzayBUU0suICAqLworI2RlZmluZSBLU1RLX0VTUCh0c2spICAoKHRzayktPnRocmVhZC5rc3ApCisKK2V4dGVybiB2b2lkIGlhNjRfZ2V0cmVnX3Vua25vd25fa3IgKHZvaWQpOworZXh0ZXJuIHZvaWQgaWE2NF9zZXRyZWdfdW5rbm93bl9rciAodm9pZCk7CisKKyNkZWZpbmUgaWE2NF9nZXRfa3IocmVnbnVtKQkJCQkJXAorKHsJCQkJCQkJCVwKKwl1bnNpZ25lZCBsb25nIHIgPSAwOwkJCQkJXAorCQkJCQkJCQlcCisJc3dpdGNoIChyZWdudW0pIHsJCQkJCVwKKwkgICAgY2FzZSAwOiByID0gaWE2NF9nZXRyZWcoX0lBNjRfUkVHX0FSX0tSMCk7IGJyZWFrOwlcCisJICAgIGNhc2UgMTogciA9IGlhNjRfZ2V0cmVnKF9JQTY0X1JFR19BUl9LUjEpOyBicmVhazsJXAorCSAgICBjYXNlIDI6IHIgPSBpYTY0X2dldHJlZyhfSUE2NF9SRUdfQVJfS1IyKTsgYnJlYWs7CVwKKwkgICAgY2FzZSAzOiByID0gaWE2NF9nZXRyZWcoX0lBNjRfUkVHX0FSX0tSMyk7IGJyZWFrOwlcCisJICAgIGNhc2UgNDogciA9IGlhNjRfZ2V0cmVnKF9JQTY0X1JFR19BUl9LUjQpOyBicmVhazsJXAorCSAgICBjYXNlIDU6IHIgPSBpYTY0X2dldHJlZyhfSUE2NF9SRUdfQVJfS1I1KTsgYnJlYWs7CVwKKwkgICAgY2FzZSA2OiByID0gaWE2NF9nZXRyZWcoX0lBNjRfUkVHX0FSX0tSNik7IGJyZWFrOwlcCisJICAgIGNhc2UgNzogciA9IGlhNjRfZ2V0cmVnKF9JQTY0X1JFR19BUl9LUjcpOyBicmVhazsJXAorCSAgICBkZWZhdWx0OiBpYTY0X2dldHJlZ191bmtub3duX2tyKCk7IGJyZWFrOwkJXAorCX0JCQkJCQkJXAorCXI7CQkJCQkJCVwKK30pCisKKyNkZWZpbmUgaWE2NF9zZXRfa3IocmVnbnVtLCByKSAJCQkJCVwKKyh7CQkJCQkJCQlcCisJc3dpdGNoIChyZWdudW0pIHsJCQkJCVwKKwkgICAgY2FzZSAwOiBpYTY0X3NldHJlZyhfSUE2NF9SRUdfQVJfS1IwLCByKTsgYnJlYWs7CVwKKwkgICAgY2FzZSAxOiBpYTY0X3NldHJlZyhfSUE2NF9SRUdfQVJfS1IxLCByKTsgYnJlYWs7CVwKKwkgICAgY2FzZSAyOiBpYTY0X3NldHJlZyhfSUE2NF9SRUdfQVJfS1IyLCByKTsgYnJlYWs7CVwKKwkgICAgY2FzZSAzOiBpYTY0X3NldHJlZyhfSUE2NF9SRUdfQVJfS1IzLCByKTsgYnJlYWs7CVwKKwkgICAgY2FzZSA0OiBpYTY0X3NldHJlZyhfSUE2NF9SRUdfQVJfS1I0LCByKTsgYnJlYWs7CVwKKwkgICAgY2FzZSA1OiBpYTY0X3NldHJlZyhfSUE2NF9SRUdfQVJfS1I1LCByKTsgYnJlYWs7CVwKKwkgICAgY2FzZSA2OiBpYTY0X3NldHJlZyhfSUE2NF9SRUdfQVJfS1I2LCByKTsgYnJlYWs7CVwKKwkgICAgY2FzZSA3OiBpYTY0X3NldHJlZyhfSUE2NF9SRUdfQVJfS1I3LCByKTsgYnJlYWs7CVwKKwkgICAgZGVmYXVsdDogaWE2NF9zZXRyZWdfdW5rbm93bl9rcigpOyBicmVhazsJCVwKKwl9CQkJCQkJCVwKK30pCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIHRocmVlIG1hY3JvcyBjYW4ndCBiZSBpbmxpbmUgZnVuY3Rpb25zIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBzdHJ1Y3QKKyAqIHRhc2tfc3RydWN0IGF0IHRoaXMgcG9pbnQuCisgKi8KKworLyogUmV0dXJuIFRSVUUgaWYgdGFzayBUIG93bnMgdGhlIGZwaCBwYXJ0aXRpb24gb2YgdGhlIENQVSB3ZSdyZSBydW5uaW5nIG9uLiAqLworI2RlZmluZSBpYTY0X2lzX2xvY2FsX2ZwdV9vd25lcih0KQkJCQkJCQkJXAorKHsJCQkJCQkJCQkJCQlcCisJc3RydWN0IHRhc2tfc3RydWN0ICpfX2lhNjRfaXNsZm9fdGFzayA9ICh0KTsJCQkJCQlcCisJKF9faWE2NF9pc2xmb190YXNrLT50aHJlYWQubGFzdF9mcGhfY3B1ID09IHNtcF9wcm9jZXNzb3JfaWQoKQkJCQlcCisJICYmIF9faWE2NF9pc2xmb190YXNrID09IChzdHJ1Y3QgdGFza19zdHJ1Y3QgKikgaWE2NF9nZXRfa3IoSUE2NF9LUl9GUFVfT1dORVIpKTsJXAorfSkKKworLyogTWFyayB0YXNrIFQgYXMgb3duaW5nIHRoZSBmcGggcGFydGl0aW9uIG9mIHRoZSBDUFUgd2UncmUgcnVubmluZyBvbi4gKi8KKyNkZWZpbmUgaWE2NF9zZXRfbG9jYWxfZnB1X293bmVyKHQpIGRvIHsJCQkJCQlcCisJc3RydWN0IHRhc2tfc3RydWN0ICpfX2lhNjRfc2xmb190YXNrID0gKHQpOwkJCQkJXAorCV9faWE2NF9zbGZvX3Rhc2stPnRocmVhZC5sYXN0X2ZwaF9jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CQkJXAorCWlhNjRfc2V0X2tyKElBNjRfS1JfRlBVX09XTkVSLCAodW5zaWduZWQgbG9uZykgX19pYTY0X3NsZm9fdGFzayk7CQlcCit9IHdoaWxlICgwKQorCisvKiBNYXJrIHRoZSBmcGggcGFydGl0aW9uIG9mIHRhc2sgVCBhcyBiZWluZyBpbnZhbGlkIG9uIGFsbCBDUFVzLiAgKi8KKyNkZWZpbmUgaWE2NF9kcm9wX2ZwdSh0KQkoKHQpLT50aHJlYWQubGFzdF9mcGhfY3B1ID0gLTEpCisKK2V4dGVybiB2b2lkIF9faWE2NF9pbml0X2ZwdSAodm9pZCk7CitleHRlcm4gdm9pZCBfX2lhNjRfc2F2ZV9mcHUgKHN0cnVjdCBpYTY0X2ZwcmVnICpmcGgpOworZXh0ZXJuIHZvaWQgX19pYTY0X2xvYWRfZnB1IChzdHJ1Y3QgaWE2NF9mcHJlZyAqZnBoKTsKK2V4dGVybiB2b2lkIGlhNjRfc2F2ZV9kZWJ1Z19yZWdzICh1bnNpZ25lZCBsb25nICpzYXZlX2FyZWEpOworZXh0ZXJuIHZvaWQgaWE2NF9sb2FkX2RlYnVnX3JlZ3MgKHVuc2lnbmVkIGxvbmcgKnNhdmVfYXJlYSk7CisKKyNpZmRlZiBDT05GSUdfSUEzMl9TVVBQT1JUCitleHRlcm4gdm9pZCBpYTMyX3NhdmVfc3RhdGUgKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7CitleHRlcm4gdm9pZCBpYTMyX2xvYWRfc3RhdGUgKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7CisjZW5kaWYKKworI2RlZmluZSBpYTY0X2ZwaF9lbmFibGUoKQlkbyB7IGlhNjRfcnNtKElBNjRfUFNSX0RGSCk7IGlhNjRfc3Jsel9kKCk7IH0gd2hpbGUgKDApCisjZGVmaW5lIGlhNjRfZnBoX2Rpc2FibGUoKQlkbyB7IGlhNjRfc3NtKElBNjRfUFNSX0RGSCk7IGlhNjRfc3Jsel9kKCk7IH0gd2hpbGUgKDApCisKKy8qIGxvYWQgZnAgMC4wIGludG8gZnBoICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2lhNjRfaW5pdF9mcHUgKHZvaWQpIHsKKwlpYTY0X2ZwaF9lbmFibGUoKTsKKwlfX2lhNjRfaW5pdF9mcHUoKTsKKwlpYTY0X2ZwaF9kaXNhYmxlKCk7Cit9CisKKy8qIHNhdmUgZjMyLWYxMjcgYXQgRlBIICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2lhNjRfc2F2ZV9mcHUgKHN0cnVjdCBpYTY0X2ZwcmVnICpmcGgpIHsKKwlpYTY0X2ZwaF9lbmFibGUoKTsKKwlfX2lhNjRfc2F2ZV9mcHUoZnBoKTsKKwlpYTY0X2ZwaF9kaXNhYmxlKCk7Cit9CisKKy8qIGxvYWQgZjMyLWYxMjcgZnJvbSBGUEggKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAoraWE2NF9sb2FkX2ZwdSAoc3RydWN0IGlhNjRfZnByZWcgKmZwaCkgeworCWlhNjRfZnBoX2VuYWJsZSgpOworCV9faWE2NF9sb2FkX2ZwdShmcGgpOworCWlhNjRfZnBoX2Rpc2FibGUoKTsKK30KKworc3RhdGljIGlubGluZSBfX3U2NAoraWE2NF9jbGVhcl9pYyAodm9pZCkKK3sKKwlfX3U2NCBwc3I7CisJcHNyID0gaWE2NF9nZXRyZWcoX0lBNjRfUkVHX1BTUik7CisJaWE2NF9zdG9wKCk7CisJaWE2NF9yc20oSUE2NF9QU1JfSSB8IElBNjRfUFNSX0lDKTsKKwlpYTY0X3NybHpfaSgpOworCXJldHVybiBwc3I7Cit9CisKKy8qCisgKiBSZXN0b3JlIHRoZSBwc3IuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAoraWE2NF9zZXRfcHNyIChfX3U2NCBwc3IpCit7CisJaWE2NF9zdG9wKCk7CisJaWE2NF9zZXRyZWcoX0lBNjRfUkVHX1BTUl9MLCBwc3IpOworCWlhNjRfc3Jsel9kKCk7Cit9CisKKy8qCisgKiBJbnNlcnQgYSB0cmFuc2xhdGlvbiBpbnRvIGFuIGluc3RydWN0aW9uIGFuZC9vciBkYXRhIHRyYW5zbGF0aW9uCisgKiByZWdpc3Rlci4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCitpYTY0X2l0ciAoX191NjQgdGFyZ2V0X21hc2ssIF9fdTY0IHRyX251bSwKKwkgIF9fdTY0IHZtYWRkciwgX191NjQgcHRlLAorCSAgX191NjQgbG9nX3BhZ2Vfc2l6ZSkKK3sKKwlpYTY0X3NldHJlZyhfSUE2NF9SRUdfQ1JfSVRJUiwgKGxvZ19wYWdlX3NpemUgPDwgMikpOworCWlhNjRfc2V0cmVnKF9JQTY0X1JFR19DUl9JRkEsIHZtYWRkcik7CisJaWE2NF9zdG9wKCk7CisJaWYgKHRhcmdldF9tYXNrICYgMHgxKQorCQlpYTY0X2l0cmkodHJfbnVtLCBwdGUpOworCWlmICh0YXJnZXRfbWFzayAmIDB4MikKKwkJaWE2NF9pdHJkKHRyX251bSwgcHRlKTsKK30KKworLyoKKyAqIEluc2VydCBhIHRyYW5zbGF0aW9uIGludG8gdGhlIGluc3RydWN0aW9uIGFuZC9vciBkYXRhIHRyYW5zbGF0aW9uCisgKiBjYWNoZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCitpYTY0X2l0YyAoX191NjQgdGFyZ2V0X21hc2ssIF9fdTY0IHZtYWRkciwgX191NjQgcHRlLAorCSAgX191NjQgbG9nX3BhZ2Vfc2l6ZSkKK3sKKwlpYTY0X3NldHJlZyhfSUE2NF9SRUdfQ1JfSVRJUiwgKGxvZ19wYWdlX3NpemUgPDwgMikpOworCWlhNjRfc2V0cmVnKF9JQTY0X1JFR19DUl9JRkEsIHZtYWRkcik7CisJaWE2NF9zdG9wKCk7CisJLyogYXMgcGVyIEVBUzIuNiwgaXRjIG11c3QgYmUgdGhlIGxhc3QgaW5zdHJ1Y3Rpb24gaW4gYW4gaW5zdHJ1Y3Rpb24gZ3JvdXAgKi8KKwlpZiAodGFyZ2V0X21hc2sgJiAweDEpCisJCWlhNjRfaXRjaShwdGUpOworCWlmICh0YXJnZXRfbWFzayAmIDB4MikKKwkJaWE2NF9pdGNkKHB0ZSk7Cit9CisKKy8qCisgKiBQdXJnZSBhIHJhbmdlIG9mIGFkZHJlc3NlcyBmcm9tIGluc3RydWN0aW9uIGFuZC9vciBkYXRhIHRyYW5zbGF0aW9uCisgKiByZWdpc3RlcihzKS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCitpYTY0X3B0ciAoX191NjQgdGFyZ2V0X21hc2ssIF9fdTY0IHZtYWRkciwgX191NjQgbG9nX3NpemUpCit7CisJaWYgKHRhcmdldF9tYXNrICYgMHgxKQorCQlpYTY0X3B0cmkodm1hZGRyLCAobG9nX3NpemUgPDwgMikpOworCWlmICh0YXJnZXRfbWFzayAmIDB4MikKKwkJaWE2NF9wdHJkKHZtYWRkciwgKGxvZ19zaXplIDw8IDIpKTsKK30KKworLyogU2V0IHRoZSBpbnRlcnJ1cHQgdmVjdG9yIGFkZHJlc3MuICBUaGUgYWRkcmVzcyBtdXN0IGJlIHN1aXRhYmx5IGFsaWduZWQgKDMyS0IpLiAgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAoraWE2NF9zZXRfaXZhICh2b2lkICppdnRfYWRkcikKK3sKKwlpYTY0X3NldHJlZyhfSUE2NF9SRUdfQ1JfSVZBLCAoX191NjQpIGl2dF9hZGRyKTsKKwlpYTY0X3NybHpfaSgpOworfQorCisvKiBTZXQgdGhlIHBhZ2UgdGFibGUgYWRkcmVzcyBhbmQgY29udHJvbCBiaXRzLiAgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAoraWE2NF9zZXRfcHRhIChfX3U2NCBwdGEpCit7CisJLyogTm90ZTogc3Jsei5pIGltcGxpZXMgc3Jsei5kICovCisJaWE2NF9zZXRyZWcoX0lBNjRfUkVHX0NSX1BUQSwgcHRhKTsKKwlpYTY0X3NybHpfaSgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2lhNjRfZW9pICh2b2lkKQoreworCWlhNjRfc2V0cmVnKF9JQTY0X1JFR19DUl9FT0ksIDApOworCWlhNjRfc3Jsel9kKCk7Cit9CisKKyNkZWZpbmUgY3B1X3JlbGF4KCkJaWE2NF9oaW50KGlhNjRfaGludF9wYXVzZSkKKworc3RhdGljIGlubGluZSB2b2lkCitpYTY0X3NldF9scnIwICh1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwlpYTY0X3NldHJlZyhfSUE2NF9SRUdfQ1JfTFJSMCwgdmFsKTsKKwlpYTY0X3NybHpfZCgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2lhNjRfc2V0X2xycjEgKHVuc2lnbmVkIGxvbmcgdmFsKQoreworCWlhNjRfc2V0cmVnKF9JQTY0X1JFR19DUl9MUlIxLCB2YWwpOworCWlhNjRfc3Jsel9kKCk7Cit9CisKKworLyoKKyAqIEdpdmVuIHRoZSBhZGRyZXNzIHRvIHdoaWNoIGEgc3BpbGwgb2NjdXJyZWQsIHJldHVybiB0aGUgdW5hdCBiaXQKKyAqIG51bWJlciB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoaXMgYWRkcmVzcy4KKyAqLworc3RhdGljIGlubGluZSBfX3U2NAoraWE2NF91bmF0X3BvcyAodm9pZCAqc3BpbGxfYWRkcikKK3sKKwlyZXR1cm4gKChfX3U2NCkgc3BpbGxfYWRkciA+PiAzKSAmIDB4M2Y7Cit9CisKKy8qCisgKiBTZXQgdGhlIE5hVCBiaXQgb2YgYW4gaW50ZWdlciByZWdpc3RlciB3aGljaCB3YXMgc3BpbGxlZCBhdCBhZGRyZXNzCisgKiBTUElMTF9BRERSLiAgVU5BVCBpcyB0aGUgbWFzayB0byBiZSB1cGRhdGVkLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2lhNjRfc2V0X3VuYXQgKF9fdTY0ICp1bmF0LCB2b2lkICpzcGlsbF9hZGRyLCB1bnNpZ25lZCBsb25nIG5hdCkKK3sKKwlfX3U2NCBiaXQgPSBpYTY0X3VuYXRfcG9zKHNwaWxsX2FkZHIpOworCV9fdTY0IG1hc2sgPSAxVUwgPDwgYml0OworCisJKnVuYXQgPSAoKnVuYXQgJiB+bWFzaykgfCAobmF0IDw8IGJpdCk7Cit9CisKKy8qCisgKiBSZXR1cm4gc2F2ZWQgUEMgb2YgYSBibG9ja2VkIHRocmVhZC4KKyAqIE5vdGUgdGhhdCB0aGUgb25seSB3YXkgVCBjYW4gYmxvY2sgaXMgdGhyb3VnaCBhIGNhbGwgdG8gc2NoZWR1bGUoKSAtPiBzd2l0Y2hfdG8oKS4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCit0aHJlYWRfc2F2ZWRfcGMgKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCkKK3sKKwlzdHJ1Y3QgdW53X2ZyYW1lX2luZm8gaW5mbzsKKwl1bnNpZ25lZCBsb25nIGlwOworCisJdW53X2luaXRfZnJvbV9ibG9ja2VkX3Rhc2soJmluZm8sIHQpOworCWlmICh1bndfdW53aW5kKCZpbmZvKSA8IDApCisJCXJldHVybiAwOworCXVud19nZXRfaXAoJmluZm8sICZpcCk7CisJcmV0dXJuIGlwOworfQorCisvKgorICogR2V0IHRoZSBjdXJyZW50IGluc3RydWN0aW9uL3Byb2dyYW0gY291bnRlciB2YWx1ZS4KKyAqLworI2RlZmluZSBjdXJyZW50X3RleHRfYWRkcigpIFwKKwkoeyB2b2lkICpfcGM7IF9wYyA9ICh2b2lkICopaWE2NF9nZXRyZWcoX0lBNjRfUkVHX0lQKTsgX3BjOyB9KQorCitzdGF0aWMgaW5saW5lIF9fdTY0CitpYTY0X2dldF9pdnIgKHZvaWQpCit7CisJX191NjQgcjsKKwlpYTY0X3NybHpfZCgpOworCXIgPSBpYTY0X2dldHJlZyhfSUE2NF9SRUdfQ1JfSVZSKTsKKwlpYTY0X3NybHpfZCgpOworCXJldHVybiByOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2lhNjRfc2V0X2RiciAoX191NjQgcmVnbnVtLCBfX3U2NCB2YWx1ZSkKK3sKKwlfX2lhNjRfc2V0X2RicihyZWdudW0sIHZhbHVlKTsKKyNpZmRlZiBDT05GSUdfSVRBTklVTQorCWlhNjRfc3Jsel9kKCk7CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSBfX3U2NAoraWE2NF9nZXRfZGJyIChfX3U2NCByZWdudW0pCit7CisJX191NjQgcmV0dmFsOworCisJcmV0dmFsID0gX19pYTY0X2dldF9kYnIocmVnbnVtKTsKKyNpZmRlZiBDT05GSUdfSVRBTklVTQorCWlhNjRfc3Jsel9kKCk7CisjZW5kaWYKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW5saW5lIF9fdTY0CitpYTY0X3JvdHIgKF9fdTY0IHcsIF9fdTY0IG4pCit7CisJcmV0dXJuICh3ID4+IG4pIHwgKHcgPDwgKDY0IC0gbikpOworfQorCisjZGVmaW5lIGlhNjRfcm90bCh3LG4pCWlhNjRfcm90cigodyksICg2NCkgLSAobikpCisKKy8qCisgKiBUYWtlIGEgbWFwcGVkIGtlcm5lbCBhZGRyZXNzIGFuZCByZXR1cm4gdGhlIGVxdWl2YWxlbnQgYWRkcmVzcworICogaW4gdGhlIHJlZ2lvbiA3IGlkZW50aXR5IG1hcHBlZCB2aXJ0dWFsIGFyZWEuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCAqCitpYTY0X2ltdmEgKHZvaWQgKmFkZHIpCit7CisJdm9pZCAqcmVzdWx0OworCXJlc3VsdCA9ICh2b2lkICopIGlhNjRfdHBhKGFkZHIpOworCXJldHVybiBfX3ZhKHJlc3VsdCk7Cit9CisKKyNkZWZpbmUgQVJDSF9IQVNfUFJFRkVUQ0gKKyNkZWZpbmUgQVJDSF9IQVNfUFJFRkVUQ0hXCisjZGVmaW5lIEFSQ0hfSEFTX1NQSU5MT0NLX1BSRUZFVENICisjZGVmaW5lIFBSRUZFVENIX1NUUklERQkJCUwxX0NBQ0hFX0JZVEVTCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcHJlZmV0Y2ggKGNvbnN0IHZvaWQgKngpCit7CisJIGlhNjRfbGZldGNoKGlhNjRfbGZoaW50X25vbmUsIHgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3ByZWZldGNodyAoY29uc3Qgdm9pZCAqeCkKK3sKKwlpYTY0X2xmZXRjaF9leGNsKGlhNjRfbGZoaW50X25vbmUsIHgpOworfQorCisjZGVmaW5lIHNwaW5fbG9ja19wcmVmZXRjaCh4KQlwcmVmZXRjaHcoeCkKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgYm9vdF9vcHRpb25faWRsZV9vdmVycmlkZTsKKworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKworI2VuZGlmIC8qIF9BU01fSUE2NF9QUk9DRVNTT1JfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9wdHJhY2UuaCBiL2luY2x1ZGUvYXNtLWlhNjQvcHRyYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJlZjE5NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvcHRyYWNlLmgKQEAgLTAsMCArMSwzMzcgQEAKKyNpZm5kZWYgX0FTTV9JQTY0X1BUUkFDRV9ICisjZGVmaW5lIF9BU01fSUE2NF9QVFJBQ0VfSAorCisvKgorICogQ29weXJpZ2h0IChDKSAxOTk4LTIwMDQgSGV3bGV0dC1QYWNrYXJkIENvCisgKglEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+CisgKglTdGVwaGFuZSBFcmFuaWFuIDxlcmFuaWFuQGhwbC5ocC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgSW50ZWwgQ28KKyAqCVN1cmVzaCBTaWRkaGEgPHN1cmVzaC5iLnNpZGRoYUBpbnRlbC5jb20+CisgKglGZW5naHVhIFl1IDxmZW5naHVhLnl1QGludGVsLmNvbT4KKyAqCUFydW4gU2hhcm1hIDxhcnVuLnNoYXJtYUBpbnRlbC5jb20+CisgKgorICogMTIvMDcvOTgJUy4gRXJhbmlhbglhZGRlZCBwdF9yZWdzICYgc3dpdGNoX3N0YWNrCisgKiAxMi8yMS85OAlELiBNb3NiZXJnZXIJdXBkYXRlZCB0byBtYXRjaCBsYXRlc3QgY29kZQorICogIDYvMTcvOTkJRC4gTW9zYmVyZ2VyCWFkZGVkIHNlY29uZCB1bmF0IG1lbWJlciB0byAic3RydWN0IHN3aXRjaF9zdGFjayIKKyAqCisgKi8KKy8qCisgKiBXaGVuIGEgdXNlciBwcm9jZXNzIGlzIGJsb2NrZWQsIGl0cyBzdGF0ZSBsb29rcyBhcyBmb2xsb3dzOgorICoKKyAqICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCS0tLS0tLS0JSUE2NF9TVEtfT0ZGU0VUCisgKiAgICAgCSAgICAgIHwJCQkgICAgIHwJIF4KKyAqICAgICAgICAgICAgfCBzdHJ1Y3QgcHRfcmVncyAgICAgICB8CSB8CisgKgkgICAgICB8CQkJICAgICB8CSB8CisgKiAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwkgfAorICoJICAgICAgfAkJCSAgICAgfAkgfAorICogICAgIAkgICAgICB8CSAgIG1lbW9yeSBzdGFjawkgICAgIHwJIHwKKyAqCSAgICAgIHwJKGdyb3dpbmcgZG93bndhcmRzKSAgfAkgfAorICoJICAgICAgLy8uLi4uLi4uLi4uLi4uLi4uLi4uLi4vLwkgfAorICoJCQkJCSB8CisgKgkgICAgICAvLy4uLi4uLi4uLi4uLi4uLi4uLi4uLi8vCSB8CisgKgkgICAgICB8CQkJICAgICB8CSB8CisgKiAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwkgfAorICogICAgICAgICAgICB8IHN0cnVjdCBzd2l0Y2hfc3RhY2sgIHwJIHwKKyAqCSAgICAgIHwJCQkgICAgIHwJIHwKKyAqCSAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwkgfAorICoJICAgICAgfAkJCSAgICAgfAkgfAorICoJICAgICAgLy8uLi4uLi4uLi4uLi4uLi4uLi4uLi4vLwkgfAorICoJCQkJCSB8CisgKgkgICAgICAvLy4uLi4uLi4uLi4uLi4uLi4uLi4uLi8vCSB8CisgKgkgICAgICB8CQkJICAgICB8CSB8CisgKgkgICAgICB8CSByZWdpc3RlciBzdGFjawkgICAgIHwJIHwKKyAqCSAgICAgIHwJKGdyb3dpbmcgdXB3YXJkcykgICAgfAkgfAorICogICAgICAgICAgICB8CQkJICAgICB8CSB8CisgKgkgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsJIHwgIC0tLQlJQTY0X1JCU19PRkZTRVQKKyAqICAgICAgICAgICAgfCAgc3RydWN0IHRocmVhZF9pbmZvICB8CSB8ICBeCisgKgkgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsJIHwgIHwKKyAqCSAgICAgIHwJCQkgICAgIHwJIHwgIHwKKyAqICAgICAgICAgICAgfCAgc3RydWN0IHRhc2tfc3RydWN0ICB8CSB8ICB8CisgKiBjdXJyZW50IC0+IHwJCQkgICAgIHwgICB8ICB8CisgKgkgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgLS0tLS0tLQorICoKKyAqIE5vdGUgdGhhdCBhci5lYyBpcyBub3Qgc2F2ZWQgZXhwbGljaXRseSBpbiBwdF9yZWcgb3Igc3dpdGNoX3N0YWNrLgorICogVGhpcyBpcyBiZWNhdXNlIGFyLmVjIGlzIHNhdmVkIGFzIHBhcnQgb2YgYXIucGZzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2luY2x1ZGUgPGFzbS9mcHUuaD4KKyNpbmNsdWRlIDxhc20vb2Zmc2V0cy5oPgorCisvKgorICogQmFzZS0yIGxvZ2FyaXRobSBvZiBudW1iZXIgb2YgcGFnZXMgdG8gYWxsb2NhdGUgcGVyIHRhc2sgc3RydWN0dXJlCisgKiAoaW5jbHVkaW5nIHJlZ2lzdGVyIGJhY2tpbmcgc3RvcmUgYW5kIG1lbW9yeSBzdGFjayk6CisgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19JQTY0X1BBR0VfU0laRV80S0IpCisjIGRlZmluZSBLRVJORUxfU1RBQ0tfU0laRV9PUkRFUgkJMworI2VsaWYgZGVmaW5lZChDT05GSUdfSUE2NF9QQUdFX1NJWkVfOEtCKQorIyBkZWZpbmUgS0VSTkVMX1NUQUNLX1NJWkVfT1JERVIJCTIKKyNlbGlmIGRlZmluZWQoQ09ORklHX0lBNjRfUEFHRV9TSVpFXzE2S0IpCisjIGRlZmluZSBLRVJORUxfU1RBQ0tfU0laRV9PUkRFUgkJMQorI2Vsc2UKKyMgZGVmaW5lIEtFUk5FTF9TVEFDS19TSVpFX09SREVSCQkwCisjZW5kaWYKKworI2RlZmluZSBJQTY0X1JCU19PRkZTRVQJCQkoKElBNjRfVEFTS19TSVpFICsgSUE2NF9USFJFQURfSU5GT19TSVpFICsgMTUpICYgfjE1KQorI2RlZmluZSBJQTY0X1NUS19PRkZTRVQJCQkoKDEgPDwgS0VSTkVMX1NUQUNLX1NJWkVfT1JERVIpKlBBR0VfU0laRSkKKworI2RlZmluZSBLRVJORUxfU1RBQ0tfU0laRQkJSUE2NF9TVEtfT0ZGU0VUCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNpbmNsdWRlIDxhc20vY3VycmVudC5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisKKy8qCisgKiBUaGlzIHN0cnVjdCBkZWZpbmVzIHRoZSB3YXkgdGhlIHJlZ2lzdGVycyBhcmUgc2F2ZWQgb24gc3lzdGVtCisgKiBjYWxscy4KKyAqCisgKiBXZSBkb24ndCBzYXZlIGFsbCBmbG9hdGluZyBwb2ludCByZWdpc3RlciBiZWNhdXNlIHRoZSBrZXJuZWwKKyAqIGlzIGNvbXBpbGVkIHRvIHVzZSBvbmx5IGEgdmVyeSBzbWFsbCBzdWJzZXQsIHNvIHRoZSBvdGhlciBhcmUKKyAqIHVudG91Y2hlZC4KKyAqCisgKiBUSElTIFNUUlVDVFVSRSBNVVNUIEJFIEEgTVVMVElQTEUgMTYtQllURSBJTiBTSVpFCisgKiAoYmVjYXVzZSB0aGUgbWVtb3J5IHN0YWNrIHBvaW50ZXIgTVVTVCBBTFdBWVMgYmUgYWxpZ25lZCB0aGlzIHdheSkKKyAqCisgKi8KK3N0cnVjdCBwdF9yZWdzIHsKKwkvKiBUaGUgZm9sbG93aW5nIHJlZ2lzdGVycyBhcmUgc2F2ZWQgYnkgU0FWRV9NSU46ICovCisJdW5zaWduZWQgbG9uZyBiNjsJCS8qIHNjcmF0Y2ggKi8KKwl1bnNpZ25lZCBsb25nIGI3OwkJLyogc2NyYXRjaCAqLworCisJdW5zaWduZWQgbG9uZyBhcl9jc2Q7ICAgICAgICAgICAvKiB1c2VkIGJ5IGNtcDh4Y2hnMTYgKHNjcmF0Y2gpICovCisJdW5zaWduZWQgbG9uZyBhcl9zc2Q7ICAgICAgICAgICAvKiByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAoc2NyYXRjaCkgKi8KKworCXVuc2lnbmVkIGxvbmcgcjg7CQkvKiBzY3JhdGNoIChyZXR1cm4gdmFsdWUgcmVnaXN0ZXIgMCkgKi8KKwl1bnNpZ25lZCBsb25nIHI5OwkJLyogc2NyYXRjaCAocmV0dXJuIHZhbHVlIHJlZ2lzdGVyIDEpICovCisJdW5zaWduZWQgbG9uZyByMTA7CQkvKiBzY3JhdGNoIChyZXR1cm4gdmFsdWUgcmVnaXN0ZXIgMikgKi8KKwl1bnNpZ25lZCBsb25nIHIxMTsJCS8qIHNjcmF0Y2ggKHJldHVybiB2YWx1ZSByZWdpc3RlciAzKSAqLworCisJdW5zaWduZWQgbG9uZyBjcl9pcHNyOwkJLyogaW50ZXJydXB0ZWQgdGFzaydzIHBzciAqLworCXVuc2lnbmVkIGxvbmcgY3JfaWlwOwkJLyogaW50ZXJydXB0ZWQgdGFzaydzIGluc3RydWN0aW9uIHBvaW50ZXIgKi8KKwkvKgorCSAqIGludGVycnVwdGVkIHRhc2sncyBmdW5jdGlvbiBzdGF0ZTsgaWYgYml0IDYzIGlzIGNsZWFyZWQsIGl0CisJICogY29udGFpbnMgc3lzY2FsbCdzIGFyLnBmcy5wZm06CisJICovCisJdW5zaWduZWQgbG9uZyBjcl9pZnM7CisKKwl1bnNpZ25lZCBsb25nIGFyX3VuYXQ7CQkvKiBpbnRlcnJ1cHRlZCB0YXNrJ3MgTmFUIHJlZ2lzdGVyIChwcmVzZXJ2ZWQpICovCisJdW5zaWduZWQgbG9uZyBhcl9wZnM7CQkvKiBwcmV2IGZ1bmN0aW9uIHN0YXRlICAqLworCXVuc2lnbmVkIGxvbmcgYXJfcnNjOwkJLyogUlNFIGNvbmZpZ3VyYXRpb24gKi8KKwkvKiBUaGUgZm9sbG93aW5nIHR3byBhcmUgdmFsaWQgb25seSBpZiBjcl9pcHNyLmNwbCA+IDA6ICovCisJdW5zaWduZWQgbG9uZyBhcl9ybmF0OwkJLyogUlNFIE5hVCAqLworCXVuc2lnbmVkIGxvbmcgYXJfYnNwc3RvcmU7CS8qIFJTRSBic3BzdG9yZSAqLworCisJdW5zaWduZWQgbG9uZyBwcjsJCS8qIDY0IHByZWRpY2F0ZSByZWdpc3RlcnMgKDEgYml0IGVhY2gpICovCisJdW5zaWduZWQgbG9uZyBiMDsJCS8qIHJldHVybiBwb2ludGVyIChicCkgKi8KKwl1bnNpZ25lZCBsb25nIGxvYWRyczsJCS8qIHNpemUgb2YgZGlydHkgcGFydGl0aW9uIDw8IDE2ICovCisKKwl1bnNpZ25lZCBsb25nIHIxOwkJLyogdGhlIGdwIHBvaW50ZXIgKi8KKwl1bnNpZ25lZCBsb25nIHIxMjsJCS8qIGludGVycnVwdGVkIHRhc2sncyBtZW1vcnkgc3RhY2sgcG9pbnRlciAqLworCXVuc2lnbmVkIGxvbmcgcjEzOwkJLyogdGhyZWFkIHBvaW50ZXIgKi8KKworCXVuc2lnbmVkIGxvbmcgYXJfZnBzcjsJCS8qIGZsb2F0aW5nIHBvaW50IHN0YXR1cyAocHJlc2VydmVkKSAqLworCXVuc2lnbmVkIGxvbmcgcjE1OwkJLyogc2NyYXRjaCAqLworCisJLyogVGhlIHJlbWFpbmluZyByZWdpc3RlcnMgYXJlIE5PVCBzYXZlZCBmb3Igc3lzdGVtIGNhbGxzLiAgKi8KKworCXVuc2lnbmVkIGxvbmcgcjE0OwkJLyogc2NyYXRjaCAqLworCXVuc2lnbmVkIGxvbmcgcjI7CQkvKiBzY3JhdGNoICovCisJdW5zaWduZWQgbG9uZyByMzsJCS8qIHNjcmF0Y2ggKi8KKworCS8qIFRoZSBmb2xsb3dpbmcgcmVnaXN0ZXJzIGFyZSBzYXZlZCBieSBTQVZFX1JFU1Q6ICovCisJdW5zaWduZWQgbG9uZyByMTY7CQkvKiBzY3JhdGNoICovCisJdW5zaWduZWQgbG9uZyByMTc7CQkvKiBzY3JhdGNoICovCisJdW5zaWduZWQgbG9uZyByMTg7CQkvKiBzY3JhdGNoICovCisJdW5zaWduZWQgbG9uZyByMTk7CQkvKiBzY3JhdGNoICovCisJdW5zaWduZWQgbG9uZyByMjA7CQkvKiBzY3JhdGNoICovCisJdW5zaWduZWQgbG9uZyByMjE7CQkvKiBzY3JhdGNoICovCisJdW5zaWduZWQgbG9uZyByMjI7CQkvKiBzY3JhdGNoICovCisJdW5zaWduZWQgbG9uZyByMjM7CQkvKiBzY3JhdGNoICovCisJdW5zaWduZWQgbG9uZyByMjQ7CQkvKiBzY3JhdGNoICovCisJdW5zaWduZWQgbG9uZyByMjU7CQkvKiBzY3JhdGNoICovCisJdW5zaWduZWQgbG9uZyByMjY7CQkvKiBzY3JhdGNoICovCisJdW5zaWduZWQgbG9uZyByMjc7CQkvKiBzY3JhdGNoICovCisJdW5zaWduZWQgbG9uZyByMjg7CQkvKiBzY3JhdGNoICovCisJdW5zaWduZWQgbG9uZyByMjk7CQkvKiBzY3JhdGNoICovCisJdW5zaWduZWQgbG9uZyByMzA7CQkvKiBzY3JhdGNoICovCisJdW5zaWduZWQgbG9uZyByMzE7CQkvKiBzY3JhdGNoICovCisKKwl1bnNpZ25lZCBsb25nIGFyX2NjdjsJCS8qIGNvbXBhcmUvZXhjaGFuZ2UgdmFsdWUgKHNjcmF0Y2gpICovCisKKwkvKgorCSAqIEZsb2F0aW5nIHBvaW50IHJlZ2lzdGVycyB0aGF0IHRoZSBrZXJuZWwgY29uc2lkZXJzIHNjcmF0Y2g6CisJICovCisJc3RydWN0IGlhNjRfZnByZWcgZjY7CQkvKiBzY3JhdGNoICovCisJc3RydWN0IGlhNjRfZnByZWcgZjc7CQkvKiBzY3JhdGNoICovCisJc3RydWN0IGlhNjRfZnByZWcgZjg7CQkvKiBzY3JhdGNoICovCisJc3RydWN0IGlhNjRfZnByZWcgZjk7CQkvKiBzY3JhdGNoICovCisJc3RydWN0IGlhNjRfZnByZWcgZjEwOwkJLyogc2NyYXRjaCAqLworCXN0cnVjdCBpYTY0X2ZwcmVnIGYxMTsJCS8qIHNjcmF0Y2ggKi8KK307CisKKy8qCisgKiBUaGlzIHN0cnVjdHVyZSBjb250YWlucyB0aGUgYWRkaXRpb24gcmVnaXN0ZXJzIHRoYXQgbmVlZCB0bworICogcHJlc2VydmVkIGFjcm9zcyBhIGNvbnRleHQgc3dpdGNoLiAgVGhpcyBnZW5lcmFsbHkgY29uc2lzdHMgb2YKKyAqICJwcmVzZXJ2ZWQiIHJlZ2lzdGVycy4KKyAqLworc3RydWN0IHN3aXRjaF9zdGFjayB7CisJdW5zaWduZWQgbG9uZyBjYWxsZXJfdW5hdDsJLyogdXNlciBOYVQgY29sbGVjdGlvbiByZWdpc3RlciAocHJlc2VydmVkKSAqLworCXVuc2lnbmVkIGxvbmcgYXJfZnBzcjsJCS8qIGZsb2F0aW5nLXBvaW50IHN0YXR1cyByZWdpc3RlciAqLworCisJc3RydWN0IGlhNjRfZnByZWcgZjI7CQkvKiBwcmVzZXJ2ZWQgKi8KKwlzdHJ1Y3QgaWE2NF9mcHJlZyBmMzsJCS8qIHByZXNlcnZlZCAqLworCXN0cnVjdCBpYTY0X2ZwcmVnIGY0OwkJLyogcHJlc2VydmVkICovCisJc3RydWN0IGlhNjRfZnByZWcgZjU7CQkvKiBwcmVzZXJ2ZWQgKi8KKworCXN0cnVjdCBpYTY0X2ZwcmVnIGYxMjsJCS8qIHNjcmF0Y2gsIGJ1dCB1bnRvdWNoZWQgYnkga2VybmVsICovCisJc3RydWN0IGlhNjRfZnByZWcgZjEzOwkJLyogc2NyYXRjaCwgYnV0IHVudG91Y2hlZCBieSBrZXJuZWwgKi8KKwlzdHJ1Y3QgaWE2NF9mcHJlZyBmMTQ7CQkvKiBzY3JhdGNoLCBidXQgdW50b3VjaGVkIGJ5IGtlcm5lbCAqLworCXN0cnVjdCBpYTY0X2ZwcmVnIGYxNTsJCS8qIHNjcmF0Y2gsIGJ1dCB1bnRvdWNoZWQgYnkga2VybmVsICovCisJc3RydWN0IGlhNjRfZnByZWcgZjE2OwkJLyogcHJlc2VydmVkICovCisJc3RydWN0IGlhNjRfZnByZWcgZjE3OwkJLyogcHJlc2VydmVkICovCisJc3RydWN0IGlhNjRfZnByZWcgZjE4OwkJLyogcHJlc2VydmVkICovCisJc3RydWN0IGlhNjRfZnByZWcgZjE5OwkJLyogcHJlc2VydmVkICovCisJc3RydWN0IGlhNjRfZnByZWcgZjIwOwkJLyogcHJlc2VydmVkICovCisJc3RydWN0IGlhNjRfZnByZWcgZjIxOwkJLyogcHJlc2VydmVkICovCisJc3RydWN0IGlhNjRfZnByZWcgZjIyOwkJLyogcHJlc2VydmVkICovCisJc3RydWN0IGlhNjRfZnByZWcgZjIzOwkJLyogcHJlc2VydmVkICovCisJc3RydWN0IGlhNjRfZnByZWcgZjI0OwkJLyogcHJlc2VydmVkICovCisJc3RydWN0IGlhNjRfZnByZWcgZjI1OwkJLyogcHJlc2VydmVkICovCisJc3RydWN0IGlhNjRfZnByZWcgZjI2OwkJLyogcHJlc2VydmVkICovCisJc3RydWN0IGlhNjRfZnByZWcgZjI3OwkJLyogcHJlc2VydmVkICovCisJc3RydWN0IGlhNjRfZnByZWcgZjI4OwkJLyogcHJlc2VydmVkICovCisJc3RydWN0IGlhNjRfZnByZWcgZjI5OwkJLyogcHJlc2VydmVkICovCisJc3RydWN0IGlhNjRfZnByZWcgZjMwOwkJLyogcHJlc2VydmVkICovCisJc3RydWN0IGlhNjRfZnByZWcgZjMxOwkJLyogcHJlc2VydmVkICovCisKKwl1bnNpZ25lZCBsb25nIHI0OwkJLyogcHJlc2VydmVkICovCisJdW5zaWduZWQgbG9uZyByNTsJCS8qIHByZXNlcnZlZCAqLworCXVuc2lnbmVkIGxvbmcgcjY7CQkvKiBwcmVzZXJ2ZWQgKi8KKwl1bnNpZ25lZCBsb25nIHI3OwkJLyogcHJlc2VydmVkICovCisKKwl1bnNpZ25lZCBsb25nIGIwOwkJLyogc28gd2UgY2FuIGZvcmNlIGEgZGlyZWN0IHJldHVybiBpbiBjb3B5X3RocmVhZCAqLworCXVuc2lnbmVkIGxvbmcgYjE7CisJdW5zaWduZWQgbG9uZyBiMjsKKwl1bnNpZ25lZCBsb25nIGIzOworCXVuc2lnbmVkIGxvbmcgYjQ7CisJdW5zaWduZWQgbG9uZyBiNTsKKworCXVuc2lnbmVkIGxvbmcgYXJfcGZzOwkJLyogcHJldmlvdXMgZnVuY3Rpb24gc3RhdGUgKi8KKwl1bnNpZ25lZCBsb25nIGFyX2xjOwkJLyogbG9vcCBjb3VudGVyIChwcmVzZXJ2ZWQpICovCisJdW5zaWduZWQgbG9uZyBhcl91bmF0OwkJLyogTmFUIGJpdHMgZm9yIHI0LXI3ICovCisJdW5zaWduZWQgbG9uZyBhcl9ybmF0OwkJLyogUlNFIE5hVCBjb2xsZWN0aW9uIHJlZ2lzdGVyICovCisJdW5zaWduZWQgbG9uZyBhcl9ic3BzdG9yZTsJLyogUlNFIGRpcnR5IGJhc2UgKHByZXNlcnZlZCkgKi8KKwl1bnNpZ25lZCBsb25nIHByOwkJLyogNjQgcHJlZGljYXRlIHJlZ2lzdGVycyAoMSBiaXQgZWFjaCkgKi8KK307CisKKyNpZmRlZiBfX0tFUk5FTF9fCisvKgorICogV2UgdXNlIHRoZSBpYTY0X3BzcihyZWdzKS0+cmkgdG8gZGV0ZXJtaW5lIHdoaWNoIG9mIHRoZSB0aHJlZQorICogaW5zdHJ1Y3Rpb25zIGluIGJ1bmRsZSAoMTYgYnl0ZXMpIHRvb2sgdGhlIHNhbXBsZS4gR2VuZXJhdGUKKyAqIHRoZSBjYW5vbmljYWwgcmVwcmVzZW50YXRpb24gYnkgYWRkaW5nIHRvIGluc3RydWN0aW9uIHBvaW50ZXIuCisgKi8KKyMgZGVmaW5lIGluc3RydWN0aW9uX3BvaW50ZXIocmVncykgKChyZWdzKS0+Y3JfaWlwICsgaWE2NF9wc3IocmVncyktPnJpKQorLyogQ29uc2VydmUgc3BhY2UgaW4gaGlzdG9ncmFtIGJ5IGVuY29kaW5nIHNsb3QgYml0cyBpbiBhZGRyZXNzCisgKiBiaXRzIDIgYW5kIDMgcmF0aGVyIHRoYW4gYml0cyAwIGFuZCAxLgorICovCisjZGVmaW5lIHByb2ZpbGVfcGMocmVncykJCQkJCQlcCisoewkJCQkJCQkJCVwKKwl1bnNpZ25lZCBsb25nIF9faXAgPSBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpOwkJCVwKKwkoX19pcCAmIH4zVUwpICsgKChfX2lwICYgM1VMKSA8PCAyKTsJCQkJXAorfSkKKworICAvKiBnaXZlbiBhIHBvaW50ZXIgdG8gYSB0YXNrX3N0cnVjdCwgcmV0dXJuIHRoZSB1c2VyJ3MgcHRfcmVncyAqLworIyBkZWZpbmUgaWE2NF90YXNrX3JlZ3ModCkJCSgoKHN0cnVjdCBwdF9yZWdzICopICgoY2hhciAqKSAodCkgKyBJQTY0X1NUS19PRkZTRVQpKSAtIDEpCisjIGRlZmluZSBpYTY0X3BzcihyZWdzKQkJCSgoc3RydWN0IGlhNjRfcHNyICopICYocmVncyktPmNyX2lwc3IpCisjIGRlZmluZSB1c2VyX21vZGUocmVncykJCSgoKHN0cnVjdCBpYTY0X3BzciAqKSAmKHJlZ3MpLT5jcl9pcHNyKS0+Y3BsICE9IDApCisjIGRlZmluZSB1c2VyX3N0YWNrKHRhc2sscmVncykJKChsb25nKSByZWdzIC0gKGxvbmcpIHRhc2sgPT0gSUE2NF9TVEtfT0ZGU0VUIC0gc2l6ZW9mKCpyZWdzKSkKKyMgZGVmaW5lIGZzeXNfbW9kZSh0YXNrLHJlZ3MpCQkJCQlcCisgICh7CQkJCQkJCQlcCisJICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKl90YXNrID0gKHRhc2spOwkJCVwKKwkgIHN0cnVjdCBwdF9yZWdzICpfcmVncyA9IChyZWdzKTsJCQlcCisJICAhdXNlcl9tb2RlKF9yZWdzKSAmJiB1c2VyX3N0YWNrKF90YXNrLCBfcmVncyk7CVwKKyAgfSkKKworICAvKgorICAgKiBTeXN0ZW0gY2FsbCBoYW5kbGVycyB0aGF0LCB1cG9uIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiwgbmVlZCB0byByZXR1cm4gYSBuZWdhdGl2ZSB2YWx1ZQorICAgKiBzaG91bGQgY2FsbCBmb3JjZV9zdWNjZXNzZnVsX3N5c2NhbGxfcmV0dXJuKCkgcmlnaHQgYmVmb3JlIHJldHVybmluZy4gIE9uIGFyY2hpdGVjdHVyZXMKKyAgICogd2hlcmUgdGhlIHN5c2NhbGwgY29udmVudGlvbiBwcm92aWRlcyBmb3IgYSBzZXBhcmF0ZSBlcnJvciBmbGFnIChlLmcuLCBhbHBoYSwgaWE2NCwKKyAgICogcHBjeyw2NH0sIHNwYXJjeyw2NH0sIHBvc3NpYmx5IG90aGVycyksIHRoaXMgbWFjcm8gY2FuIGJlIHVzZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGVycm9yCisgICAqIGZsYWcgd2lsbCBub3QgZ2V0IHNldC4gIE9uIGFyY2hpdGVjdHVyZXMgd2hpY2ggZG8gbm90IHN1cHBvcnQgYSBzZXBhcmF0ZSBlcnJvciBmbGFnLAorICAgKiB0aGUgbWFjcm8gaXMgYSBuby1vcCBhbmQgdGhlIHNwdXJpb3VzIGVycm9yIGNvbmRpdGlvbiBuZWVkcyB0byBiZSBmaWx0ZXJlZCBvdXQgYnkgc29tZQorICAgKiBvdGhlciBtZWFucyAoZS5nLiwgaW4gdXNlci1sZXZlbCwgYnkgcGFzc2luZyBhbiBleHRyYSBhcmd1bWVudCB0byB0aGUgc3lzY2FsbCBoYW5kbGVyLAorICAgKiBvciBzb21ldGhpbmcgYWxvbmcgdGhvc2UgbGluZXMpLgorICAgKgorICAgKiBPbiBpYTY0LCB3ZSBjYW4gY2xlYXIgdGhlIHVzZXIncyBwdF9yZWdzLT5yOCB0byBmb3JjZSBhIHN1Y2Nlc3NmdWwgc3lzY2FsbC4KKyAgICovCisjIGRlZmluZSBmb3JjZV9zdWNjZXNzZnVsX3N5c2NhbGxfcmV0dXJuKCkJKGlhNjRfdGFza19yZWdzKGN1cnJlbnQpLT5yOCA9IDApCisKKyAgc3RydWN0IHRhc2tfc3RydWN0OwkJCS8qIGZvcndhcmQgZGVjbCAqLworICBzdHJ1Y3QgdW53X2ZyYW1lX2luZm87CQkvKiBmb3J3YXJkIGRlY2wgKi8KKworICBleHRlcm4gdm9pZCBzaG93X3JlZ3MgKHN0cnVjdCBwdF9yZWdzICopOworICBleHRlcm4gdm9pZCBpYTY0X2RvX3Nob3dfc3RhY2sgKHN0cnVjdCB1bndfZnJhbWVfaW5mbyAqLCB2b2lkICopOworICBleHRlcm4gdW5zaWduZWQgbG9uZyBpYTY0X2dldF91c2VyX3Jic19lbmQgKHN0cnVjdCB0YXNrX3N0cnVjdCAqLCBzdHJ1Y3QgcHRfcmVncyAqLAorCQkJCQkgICAgICB1bnNpZ25lZCBsb25nICopOworICBleHRlcm4gbG9uZyBpYTY0X3BlZWsgKHN0cnVjdCB0YXNrX3N0cnVjdCAqLCBzdHJ1Y3Qgc3dpdGNoX3N0YWNrICosIHVuc2lnbmVkIGxvbmcsCisJCQkgdW5zaWduZWQgbG9uZywgbG9uZyAqKTsKKyAgZXh0ZXJuIGxvbmcgaWE2NF9wb2tlIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgc3RydWN0IHN3aXRjaF9zdGFjayAqLCB1bnNpZ25lZCBsb25nLAorCQkJIHVuc2lnbmVkIGxvbmcsIGxvbmcpOworICBleHRlcm4gdm9pZCBpYTY0X2ZsdXNoX2ZwaCAoc3RydWN0IHRhc2tfc3RydWN0ICopOworICBleHRlcm4gdm9pZCBpYTY0X3N5bmNfZnBoIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CisgIGV4dGVybiBsb25nIGlhNjRfc3luY191c2VyX3JicyAoc3RydWN0IHRhc2tfc3RydWN0ICosIHN0cnVjdCBzd2l0Y2hfc3RhY2sgKiwKKwkJCQkgIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOworCisgIC8qIGdldCBuYXQgYml0cyBmb3Igc2NyYXRjaCByZWdpc3RlcnMgc3VjaCB0aGF0IGJpdCBOPT0xIGlmZiBzY3JhdGNoIHJlZ2lzdGVyIHJOIGlzIGEgTmFUICovCisgIGV4dGVybiB1bnNpZ25lZCBsb25nIGlhNjRfZ2V0X3NjcmF0Y2hfbmF0X2JpdHMgKHN0cnVjdCBwdF9yZWdzICpwdCwgdW5zaWduZWQgbG9uZyBzY3JhdGNoX3VuYXQpOworICAvKiBwdXQgbmF0IGJpdHMgZm9yIHNjcmF0Y2ggcmVnaXN0ZXJzIHN1Y2ggdGhhdCBzY3JhdGNoIHJlZ2lzdGVyIHJOIGlzIGEgTmFUIGlmZiBiaXQgTj09MSAqLworICBleHRlcm4gdW5zaWduZWQgbG9uZyBpYTY0X3B1dF9zY3JhdGNoX25hdF9iaXRzIChzdHJ1Y3QgcHRfcmVncyAqcHQsIHVuc2lnbmVkIGxvbmcgbmF0KTsKKworICBleHRlcm4gdm9pZCBpYTY0X2luY3JlbWVudF9pcCAoc3RydWN0IHB0X3JlZ3MgKnB0KTsKKyAgZXh0ZXJuIHZvaWQgaWE2NF9kZWNyZW1lbnRfaXAgKHN0cnVjdCBwdF9yZWdzICpwdCk7CisKKyNlbmRpZiAvKiAhX19LRVJORUxfXyAqLworCisvKiBwdF9hbGxfdXNlcl9yZWdzIGlzIHVzZWQgZm9yIFBUUkFDRV9HRVRSRUdTIFBUUkFDRV9TRVRSRUdTICovCitzdHJ1Y3QgcHRfYWxsX3VzZXJfcmVncyB7CisJdW5zaWduZWQgbG9uZyBuYXQ7CisJdW5zaWduZWQgbG9uZyBjcl9paXA7CisJdW5zaWduZWQgbG9uZyBjZm07CisJdW5zaWduZWQgbG9uZyBjcl9pcHNyOworCXVuc2lnbmVkIGxvbmcgcHI7CisKKwl1bnNpZ25lZCBsb25nIGdyWzMyXTsKKwl1bnNpZ25lZCBsb25nIGJyWzhdOworCXVuc2lnbmVkIGxvbmcgYXJbMTI4XTsKKwlzdHJ1Y3QgaWE2NF9mcHJlZyBmclsxMjhdOworfTsKKworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKworLyogaW5kaWNlcyB0byBhcHBsaWNhdGlvbi1yZWdpc3RlcnMgYXJyYXkgaW4gcHRfYWxsX3VzZXJfcmVncyAqLworI2RlZmluZSBQVF9BVVJfUlNDCTE2CisjZGVmaW5lIFBUX0FVUl9CU1AJMTcKKyNkZWZpbmUgUFRfQVVSX0JTUFNUT1JFCTE4CisjZGVmaW5lIFBUX0FVUl9STkFUCTE5CisjZGVmaW5lIFBUX0FVUl9DQ1YJMzIKKyNkZWZpbmUgUFRfQVVSX1VOQVQJMzYKKyNkZWZpbmUgUFRfQVVSX0ZQU1IJNDAKKyNkZWZpbmUgUFRfQVVSX1BGUwk2NAorI2RlZmluZSBQVF9BVVJfTEMJNjUKKyNkZWZpbmUgUFRfQVVSX0VDCTY2CisKKy8qCisgKiBUaGUgbnVtYmVycyBjaG9zZW4gaGVyZSBhcmUgc29tZXdoYXQgYXJiaXRyYXJ5IGJ1dCBhYnNvbHV0ZWx5IE1VU1QKKyAqIG5vdCBvdmVybGFwIHdpdGggYW55IG9mIHRoZSBudW1iZXIgYXNzaWduZWQgaW4gPGxpbnV4L3B0cmFjZS5oPi4KKyAqLworI2RlZmluZSBQVFJBQ0VfU0lOR0xFQkxPQ0sJMTIJLyogcmVzdW1lIGV4ZWN1dGlvbiB1bnRpbCBuZXh0IGJyYW5jaCAqLworI2RlZmluZSBQVFJBQ0VfT0xEX0dFVFNJR0lORk8JMTMJLyogKHJlcGxhY2VkIGJ5IFBUUkFDRV9HRVRTSUdJTkZPIGluIDxsaW51eC9wdHJhY2UuaD4pICAqLworI2RlZmluZSBQVFJBQ0VfT0xEX1NFVFNJR0lORk8JMTQJLyogKHJlcGxhY2VkIGJ5IFBUUkFDRV9TRVRTSUdJTkZPIGluIDxsaW51eC9wdHJhY2UuaD4pICAqLworI2RlZmluZSBQVFJBQ0VfR0VUUkVHUwkJMTgJLyogZ2V0IGFsbCByZWdpc3RlcnMgKHB0X2FsbF91c2VyX3JlZ3MpIGluIG9uZSBzaG90ICovCisjZGVmaW5lIFBUUkFDRV9TRVRSRUdTCQkxOQkvKiBzZXQgYWxsIHJlZ2lzdGVycyAocHRfYWxsX3VzZXJfcmVncykgaW4gb25lIHNob3QgKi8KKworI2RlZmluZSBQVFJBQ0VfT0xEU0VUT1BUSU9OUwkyMQorCisjZW5kaWYgLyogX0FTTV9JQTY0X1BUUkFDRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3B0cmFjZV9vZmZzZXRzLmggYi9pbmNsdWRlL2FzbS1pYTY0L3B0cmFjZV9vZmZzZXRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjcxMjc3MwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvcHRyYWNlX29mZnNldHMuaApAQCAtMCwwICsxLDI2OCBAQAorI2lmbmRlZiBfQVNNX0lBNjRfUFRSQUNFX09GRlNFVFNfSAorI2RlZmluZSBfQVNNX0lBNjRfUFRSQUNFX09GRlNFVFNfSAorCisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAzIEhld2xldHQtUGFja2FyZCBDbworICoJRGF2aWQgTW9zYmVyZ2VyLVRhbmcgPGRhdmlkbUBocGwuaHAuY29tPgorICovCisvKgorICogVGhlICJ1YXJlYSIgdGhhdCBjYW4gYmUgYWNjZXNzZWQgdmlhIFBFRUtVU0VSIGFuZCBQT0tFVVNFUiBpcyBhCisgKiB2aXJ0dWFsIHN0cnVjdHVyZSB0aGF0IHdvdWxkIGhhdmUgdGhlIGZvbGxvd2luZyBkZWZpbml0aW9uOgorICoKKyAqCXN0cnVjdCB1YXJlYSB7CisgKgkJc3RydWN0IGlhNjRfZnByZWcgZnBoWzk2XTsJCS8vIGYzMi1mMTI3CisgKgkJdW5zaWduZWQgbG9uZyBuYXRfYml0czsKKyAqCQl1bnNpZ25lZCBsb25nIGVtcHR5MTsKKyAqCQlzdHJ1Y3QgaWE2NF9mcHJlZyBmMjsJCQkvLyBmMi1mNQorICoJCQk6CisgKgkJc3RydWN0IGlhNjRfZnByZWcgZjU7CisgKgkJc3RydWN0IGlhNjRfZnByZWcgZjEwOwkJCS8vIGYxMC1mMzEKKyAqCQkJOgorICoJCXN0cnVjdCBpYTY0X2ZwcmVnIGYzMTsKKyAqCQl1bnNpZ25lZCBsb25nIHI0OwkJCS8vIHI0LXI3CisgKgkJCToKKyAqCQl1bnNpZ25lZCBsb25nIHI3OworICoJCXVuc2lnbmVkIGxvbmcgYjE7CQkJLy8gYjEtYjUKKyAqCQkJOgorICoJCXVuc2lnbmVkIGxvbmcgYjU7CisgKgkJdW5zaWduZWQgbG9uZyBhcl9lYzsKKyAqCQl1bnNpZ25lZCBsb25nIGFyX2xjOworICoJCXVuc2lnbmVkIGxvbmcgZW1wdHkyWzVdOworICoJCXVuc2lnbmVkIGxvbmcgY3JfaXBzcjsKKyAqCQl1bnNpZ25lZCBsb25nIGNyX2lpcDsKKyAqCQl1bnNpZ25lZCBsb25nIGNmbTsKKyAqCQl1bnNpZ25lZCBsb25nIGFyX3VuYXQ7CisgKgkJdW5zaWduZWQgbG9uZyBhcl9wZnM7CisgKgkJdW5zaWduZWQgbG9uZyBhcl9yc2M7CisgKgkJdW5zaWduZWQgbG9uZyBhcl9ybmF0OworICoJCXVuc2lnbmVkIGxvbmcgYXJfYnNwc3RvcmU7CisgKgkJdW5zaWduZWQgbG9uZyBwcjsKKyAqCQl1bnNpZ25lZCBsb25nIGI2OworICoJCXVuc2lnbmVkIGxvbmcgYXJfYnNwOworICoJCXVuc2lnbmVkIGxvbmcgcjE7CisgKgkJdW5zaWduZWQgbG9uZyByMjsKKyAqCQl1bnNpZ25lZCBsb25nIHIzOworICoJCXVuc2lnbmVkIGxvbmcgcjEyOworICoJCXVuc2lnbmVkIGxvbmcgcjEzOworICoJCXVuc2lnbmVkIGxvbmcgcjE0OworICoJCXVuc2lnbmVkIGxvbmcgcjE1OworICoJCXVuc2lnbmVkIGxvbmcgcjg7CisgKgkJdW5zaWduZWQgbG9uZyByOTsKKyAqCQl1bnNpZ25lZCBsb25nIHIxMDsKKyAqCQl1bnNpZ25lZCBsb25nIHIxMTsKKyAqCQl1bnNpZ25lZCBsb25nIHIxNjsKKyAqCQkJOgorICoJCXVuc2lnbmVkIGxvbmcgcjMxOworICoJCXVuc2lnbmVkIGxvbmcgYXJfY2N2OworICoJCXVuc2lnbmVkIGxvbmcgYXJfZnBzcjsKKyAqCQl1bnNpZ25lZCBsb25nIGIwOworICoJCXVuc2lnbmVkIGxvbmcgYjc7CisgKgkJdW5zaWduZWQgbG9uZyBmNjsKKyAqCQl1bnNpZ25lZCBsb25nIGY3OworICoJCXVuc2lnbmVkIGxvbmcgZjg7CisgKgkJdW5zaWduZWQgbG9uZyBmOTsKKyAqCQl1bnNpZ25lZCBsb25nIGFyX2NzZDsKKyAqCQl1bnNpZ25lZCBsb25nIGFyX3NzZDsKKyAqCQl1bnNpZ25lZCBsb25nIHJzdmQxWzcxMF07CisgKgkJdW5zaWduZWQgbG9uZyBkYnJbOF07CisgKgkJdW5zaWduZWQgbG9uZyByc3ZkMls1MDRdOworICoJCXVuc2lnbmVkIGxvbmcgaWJyWzhdOworICoJCXVuc2lnbmVkIGxvbmcgcnN2ZDNbNTA0XTsKKyAqCQl1bnNpZ25lZCBsb25nIHBtZFs0XTsKKyAqCX0KKyAqLworCisvKiBmcGg6ICovCisjZGVmaW5lIFBUX0YzMgkJCTB4MDAwMAorI2RlZmluZSBQVF9GMzMJCQkweDAwMTAKKyNkZWZpbmUgUFRfRjM0CQkJMHgwMDIwCisjZGVmaW5lIFBUX0YzNQkJCTB4MDAzMAorI2RlZmluZSBQVF9GMzYJCQkweDAwNDAKKyNkZWZpbmUgUFRfRjM3CQkJMHgwMDUwCisjZGVmaW5lIFBUX0YzOAkJCTB4MDA2MAorI2RlZmluZSBQVF9GMzkJCQkweDAwNzAKKyNkZWZpbmUgUFRfRjQwCQkJMHgwMDgwCisjZGVmaW5lIFBUX0Y0MQkJCTB4MDA5MAorI2RlZmluZSBQVF9GNDIJCQkweDAwYTAKKyNkZWZpbmUgUFRfRjQzCQkJMHgwMGIwCisjZGVmaW5lIFBUX0Y0NAkJCTB4MDBjMAorI2RlZmluZSBQVF9GNDUJCQkweDAwZDAKKyNkZWZpbmUgUFRfRjQ2CQkJMHgwMGUwCisjZGVmaW5lIFBUX0Y0NwkJCTB4MDBmMAorI2RlZmluZSBQVF9GNDgJCQkweDAxMDAKKyNkZWZpbmUgUFRfRjQ5CQkJMHgwMTEwCisjZGVmaW5lIFBUX0Y1MAkJCTB4MDEyMAorI2RlZmluZSBQVF9GNTEJCQkweDAxMzAKKyNkZWZpbmUgUFRfRjUyCQkJMHgwMTQwCisjZGVmaW5lIFBUX0Y1MwkJCTB4MDE1MAorI2RlZmluZSBQVF9GNTQJCQkweDAxNjAKKyNkZWZpbmUgUFRfRjU1CQkJMHgwMTcwCisjZGVmaW5lIFBUX0Y1NgkJCTB4MDE4MAorI2RlZmluZSBQVF9GNTcJCQkweDAxOTAKKyNkZWZpbmUgUFRfRjU4CQkJMHgwMWEwCisjZGVmaW5lIFBUX0Y1OQkJCTB4MDFiMAorI2RlZmluZSBQVF9GNjAJCQkweDAxYzAKKyNkZWZpbmUgUFRfRjYxCQkJMHgwMWQwCisjZGVmaW5lIFBUX0Y2MgkJCTB4MDFlMAorI2RlZmluZSBQVF9GNjMJCQkweDAxZjAKKyNkZWZpbmUgUFRfRjY0CQkJMHgwMjAwCisjZGVmaW5lIFBUX0Y2NQkJCTB4MDIxMAorI2RlZmluZSBQVF9GNjYJCQkweDAyMjAKKyNkZWZpbmUgUFRfRjY3CQkJMHgwMjMwCisjZGVmaW5lIFBUX0Y2OAkJCTB4MDI0MAorI2RlZmluZSBQVF9GNjkJCQkweDAyNTAKKyNkZWZpbmUgUFRfRjcwCQkJMHgwMjYwCisjZGVmaW5lIFBUX0Y3MQkJCTB4MDI3MAorI2RlZmluZSBQVF9GNzIJCQkweDAyODAKKyNkZWZpbmUgUFRfRjczCQkJMHgwMjkwCisjZGVmaW5lIFBUX0Y3NAkJCTB4MDJhMAorI2RlZmluZSBQVF9GNzUJCQkweDAyYjAKKyNkZWZpbmUgUFRfRjc2CQkJMHgwMmMwCisjZGVmaW5lIFBUX0Y3NwkJCTB4MDJkMAorI2RlZmluZSBQVF9GNzgJCQkweDAyZTAKKyNkZWZpbmUgUFRfRjc5CQkJMHgwMmYwCisjZGVmaW5lIFBUX0Y4MAkJCTB4MDMwMAorI2RlZmluZSBQVF9GODEJCQkweDAzMTAKKyNkZWZpbmUgUFRfRjgyCQkJMHgwMzIwCisjZGVmaW5lIFBUX0Y4MwkJCTB4MDMzMAorI2RlZmluZSBQVF9GODQJCQkweDAzNDAKKyNkZWZpbmUgUFRfRjg1CQkJMHgwMzUwCisjZGVmaW5lIFBUX0Y4NgkJCTB4MDM2MAorI2RlZmluZSBQVF9GODcJCQkweDAzNzAKKyNkZWZpbmUgUFRfRjg4CQkJMHgwMzgwCisjZGVmaW5lIFBUX0Y4OQkJCTB4MDM5MAorI2RlZmluZSBQVF9GOTAJCQkweDAzYTAKKyNkZWZpbmUgUFRfRjkxCQkJMHgwM2IwCisjZGVmaW5lIFBUX0Y5MgkJCTB4MDNjMAorI2RlZmluZSBQVF9GOTMJCQkweDAzZDAKKyNkZWZpbmUgUFRfRjk0CQkJMHgwM2UwCisjZGVmaW5lIFBUX0Y5NQkJCTB4MDNmMAorI2RlZmluZSBQVF9GOTYJCQkweDA0MDAKKyNkZWZpbmUgUFRfRjk3CQkJMHgwNDEwCisjZGVmaW5lIFBUX0Y5OAkJCTB4MDQyMAorI2RlZmluZSBQVF9GOTkJCQkweDA0MzAKKyNkZWZpbmUgUFRfRjEwMAkJCTB4MDQ0MAorI2RlZmluZSBQVF9GMTAxCQkJMHgwNDUwCisjZGVmaW5lIFBUX0YxMDIJCQkweDA0NjAKKyNkZWZpbmUgUFRfRjEwMwkJCTB4MDQ3MAorI2RlZmluZSBQVF9GMTA0CQkJMHgwNDgwCisjZGVmaW5lIFBUX0YxMDUJCQkweDA0OTAKKyNkZWZpbmUgUFRfRjEwNgkJCTB4MDRhMAorI2RlZmluZSBQVF9GMTA3CQkJMHgwNGIwCisjZGVmaW5lIFBUX0YxMDgJCQkweDA0YzAKKyNkZWZpbmUgUFRfRjEwOQkJCTB4MDRkMAorI2RlZmluZSBQVF9GMTEwCQkJMHgwNGUwCisjZGVmaW5lIFBUX0YxMTEJCQkweDA0ZjAKKyNkZWZpbmUgUFRfRjExMgkJCTB4MDUwMAorI2RlZmluZSBQVF9GMTEzCQkJMHgwNTEwCisjZGVmaW5lIFBUX0YxMTQJCQkweDA1MjAKKyNkZWZpbmUgUFRfRjExNQkJCTB4MDUzMAorI2RlZmluZSBQVF9GMTE2CQkJMHgwNTQwCisjZGVmaW5lIFBUX0YxMTcJCQkweDA1NTAKKyNkZWZpbmUgUFRfRjExOAkJCTB4MDU2MAorI2RlZmluZSBQVF9GMTE5CQkJMHgwNTcwCisjZGVmaW5lIFBUX0YxMjAJCQkweDA1ODAKKyNkZWZpbmUgUFRfRjEyMQkJCTB4MDU5MAorI2RlZmluZSBQVF9GMTIyCQkJMHgwNWEwCisjZGVmaW5lIFBUX0YxMjMJCQkweDA1YjAKKyNkZWZpbmUgUFRfRjEyNAkJCTB4MDVjMAorI2RlZmluZSBQVF9GMTI1CQkJMHgwNWQwCisjZGVmaW5lIFBUX0YxMjYJCQkweDA1ZTAKKyNkZWZpbmUgUFRfRjEyNwkJCTB4MDVmMAorCisjZGVmaW5lIFBUX05BVF9CSVRTCQkweDA2MDAKKworI2RlZmluZSBQVF9GMgkJCTB4MDYxMAorI2RlZmluZSBQVF9GMwkJCTB4MDYyMAorI2RlZmluZSBQVF9GNAkJCTB4MDYzMAorI2RlZmluZSBQVF9GNQkJCTB4MDY0MAorI2RlZmluZSBQVF9GMTAJCQkweDA2NTAKKyNkZWZpbmUgUFRfRjExCQkJMHgwNjYwCisjZGVmaW5lIFBUX0YxMgkJCTB4MDY3MAorI2RlZmluZSBQVF9GMTMJCQkweDA2ODAKKyNkZWZpbmUgUFRfRjE0CQkJMHgwNjkwCisjZGVmaW5lIFBUX0YxNQkJCTB4MDZhMAorI2RlZmluZSBQVF9GMTYJCQkweDA2YjAKKyNkZWZpbmUgUFRfRjE3CQkJMHgwNmMwCisjZGVmaW5lIFBUX0YxOAkJCTB4MDZkMAorI2RlZmluZSBQVF9GMTkJCQkweDA2ZTAKKyNkZWZpbmUgUFRfRjIwCQkJMHgwNmYwCisjZGVmaW5lIFBUX0YyMQkJCTB4MDcwMAorI2RlZmluZSBQVF9GMjIJCQkweDA3MTAKKyNkZWZpbmUgUFRfRjIzCQkJMHgwNzIwCisjZGVmaW5lIFBUX0YyNAkJCTB4MDczMAorI2RlZmluZSBQVF9GMjUJCQkweDA3NDAKKyNkZWZpbmUgUFRfRjI2CQkJMHgwNzUwCisjZGVmaW5lIFBUX0YyNwkJCTB4MDc2MAorI2RlZmluZSBQVF9GMjgJCQkweDA3NzAKKyNkZWZpbmUgUFRfRjI5CQkJMHgwNzgwCisjZGVmaW5lIFBUX0YzMAkJCTB4MDc5MAorI2RlZmluZSBQVF9GMzEJCQkweDA3YTAKKyNkZWZpbmUgUFRfUjQJCQkweDA3YjAKKyNkZWZpbmUgUFRfUjUJCQkweDA3YjgKKyNkZWZpbmUgUFRfUjYJCQkweDA3YzAKKyNkZWZpbmUgUFRfUjcJCQkweDA3YzgKKworI2RlZmluZSBQVF9CMQkJCTB4MDdkOAorI2RlZmluZSBQVF9CMgkJCTB4MDdlMAorI2RlZmluZSBQVF9CMwkJCTB4MDdlOAorI2RlZmluZSBQVF9CNAkJCTB4MDdmMAorI2RlZmluZSBQVF9CNQkJCTB4MDdmOAorCisjZGVmaW5lIFBUX0FSX0VDCQkweDA4MDAKKyNkZWZpbmUgUFRfQVJfTEMJCTB4MDgwOAorCisjZGVmaW5lIFBUX0NSX0lQU1IJCTB4MDgzMAorI2RlZmluZSBQVF9DUl9JSVAJCTB4MDgzOAorI2RlZmluZSBQVF9DRk0JCQkweDA4NDAKKyNkZWZpbmUgUFRfQVJfVU5BVAkJMHgwODQ4CisjZGVmaW5lIFBUX0FSX1BGUwkJMHgwODUwCisjZGVmaW5lIFBUX0FSX1JTQwkJMHgwODU4CisjZGVmaW5lIFBUX0FSX1JOQVQJCTB4MDg2MAorI2RlZmluZSBQVF9BUl9CU1BTVE9SRQkJMHgwODY4CisjZGVmaW5lIFBUX1BSCQkJMHgwODcwCisjZGVmaW5lIFBUX0I2CQkJMHgwODc4CisjZGVmaW5lIFBUX0FSX0JTUAkJMHgwODgwCS8qIG5vdGU6IHRoaXMgcG9pbnRzIHRvIHRoZSAqZW5kKiBvZiB0aGUgYmFja2luZyBzdG9yZSEgKi8KKyNkZWZpbmUgUFRfUjEJCQkweDA4ODgKKyNkZWZpbmUgUFRfUjIJCQkweDA4OTAKKyNkZWZpbmUgUFRfUjMJCQkweDA4OTgKKyNkZWZpbmUgUFRfUjEyCQkJMHgwOGEwCisjZGVmaW5lIFBUX1IxMwkJCTB4MDhhOAorI2RlZmluZSBQVF9SMTQJCQkweDA4YjAKKyNkZWZpbmUgUFRfUjE1CQkJMHgwOGI4CisjZGVmaW5lIFBUX1I4IAkJCTB4MDhjMAorI2RlZmluZSBQVF9SOQkJCTB4MDhjOAorI2RlZmluZSBQVF9SMTAJCQkweDA4ZDAKKyNkZWZpbmUgUFRfUjExCQkJMHgwOGQ4CisjZGVmaW5lIFBUX1IxNgkJCTB4MDhlMAorI2RlZmluZSBQVF9SMTcJCQkweDA4ZTgKKyNkZWZpbmUgUFRfUjE4CQkJMHgwOGYwCisjZGVmaW5lIFBUX1IxOQkJCTB4MDhmOAorI2RlZmluZSBQVF9SMjAJCQkweDA5MDAKKyNkZWZpbmUgUFRfUjIxCQkJMHgwOTA4CisjZGVmaW5lIFBUX1IyMgkJCTB4MDkxMAorI2RlZmluZSBQVF9SMjMJCQkweDA5MTgKKyNkZWZpbmUgUFRfUjI0CQkJMHgwOTIwCisjZGVmaW5lIFBUX1IyNQkJCTB4MDkyOAorI2RlZmluZSBQVF9SMjYJCQkweDA5MzAKKyNkZWZpbmUgUFRfUjI3CQkJMHgwOTM4CisjZGVmaW5lIFBUX1IyOAkJCTB4MDk0MAorI2RlZmluZSBQVF9SMjkJCQkweDA5NDgKKyNkZWZpbmUgUFRfUjMwCQkJMHgwOTUwCisjZGVmaW5lIFBUX1IzMQkJCTB4MDk1OAorI2RlZmluZSBQVF9BUl9DQ1YJCTB4MDk2MAorI2RlZmluZSBQVF9BUl9GUFNSCQkweDA5NjgKKyNkZWZpbmUgUFRfQjAJCQkweDA5NzAKKyNkZWZpbmUgUFRfQjcJCQkweDA5NzgKKyNkZWZpbmUgUFRfRjYJCQkweDA5ODAKKyNkZWZpbmUgUFRfRjcJCQkweDA5OTAKKyNkZWZpbmUgUFRfRjgJCQkweDA5YTAKKyNkZWZpbmUgUFRfRjkJCQkweDA5YjAKKyNkZWZpbmUgUFRfQVJfQ1NECQkweDA5YzAKKyNkZWZpbmUgUFRfQVJfU1NECQkweDA5YzgKKworI2RlZmluZSBQVF9EQlIJCQkweDIwMDAJLyogZGF0YSBicmVha3BvaW50IHJlZ2lzdGVycyAqLworI2RlZmluZSBQVF9JQlIJCQkweDMwMDAJLyogaW5zdHJ1Y3Rpb24gYnJlYWtwb2ludCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgUFRfUE1ECQkJMHg0MDAwCS8qIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcgY291bnRlcnMgKi8KKworI2VuZGlmIC8qIF9BU01fSUE2NF9QVFJBQ0VfT0ZGU0VUU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3Jlc291cmNlLmggYi9pbmNsdWRlL2FzbS1pYTY0L3Jlc291cmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdiMWVlZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvcmVzb3VyY2UuaApAQCAtMCwwICsxLDggQEAKKyNpZm5kZWYgX0FTTV9JQTY0X1JFU09VUkNFX0gKKyNkZWZpbmUgX0FTTV9JQTY0X1JFU09VUkNFX0gKKworI2luY2x1ZGUgPGFzbS91c3RhY2suaD4KKyNkZWZpbmUgX1NUS19MSU1fTUFYCURFRkFVTFRfVVNFUl9TVEFDS19TSVpFCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcmVzb3VyY2UuaD4KKworI2VuZGlmIC8qIF9BU01fSUE2NF9SRVNPVVJDRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3JzZS5oIGIvaW5jbHVkZS9hc20taWE2NC9yc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjgzMGEzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taWE2NC9yc2UuaApAQCAtMCwwICsxLDY2IEBACisjaWZuZGVmIF9BU01fSUE2NF9SU0VfSAorI2RlZmluZSBfQVNNX0lBNjRfUlNFX0gKKworLyoKKyAqIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSBIZXdsZXR0LVBhY2thcmQgQ28KKyAqIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSBEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+CisgKgorICogUmVnaXN0ZXIgc3RhY2sgZW5naW5lIHJlbGF0ZWQgaGVscGVyIGZ1bmN0aW9ucy4gIFRoaXMgZmlsZSBtYXkgYmUKKyAqIHVzZWQgaW4gYXBwbGljYXRpb25zLCBzbyBiZSBjYXJlZnVsIGFib3V0IHRoZSBuYW1lLXNwYWNlIGFuZCBnaXZlCisgKiBzb21lIGNvbnNpZGVyYXRpb24gdG8gbm9uLUdOVSBDIGNvbXBpbGVycyAodGhvdWdoIF9faW5saW5lX18gaXMKKyAqIGZpbmUpLgorICovCisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcKK2lhNjRfcnNlX3Nsb3RfbnVtICh1bnNpZ25lZCBsb25nICphZGRyKQoreworCXJldHVybiAoKCh1bnNpZ25lZCBsb25nKSBhZGRyKSA+PiAzKSAmIDB4M2Y7Cit9CisKKy8qCisgKiBSZXR1cm4gVFJVRSBpZiBBRERSIGlzIHRoZSBhZGRyZXNzIG9mIGFuIFJOQVQgc2xvdC4KKyAqLworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZworaWE2NF9yc2VfaXNfcm5hdF9zbG90ICh1bnNpZ25lZCBsb25nICphZGRyKQoreworCXJldHVybiBpYTY0X3JzZV9zbG90X251bShhZGRyKSA9PSAweDNmOworfQorCisvKgorICogUmV0dXJucyB0aGUgYWRkcmVzcyBvZiB0aGUgUk5BVCBzbG90IHRoYXQgY292ZXJzIHRoZSBzbG90IGF0CisgKiBhZGRyZXNzIFNMT1RfQUREUi4KKyAqLworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyAqCitpYTY0X3JzZV9ybmF0X2FkZHIgKHVuc2lnbmVkIGxvbmcgKnNsb3RfYWRkcikKK3sKKwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcgKikgKCh1bnNpZ25lZCBsb25nKSBzbG90X2FkZHIgfCAoMHgzZiA8PCAzKSk7Cit9CisKKy8qCisgKiBDYWxjdWxhdGUgdGhlIG51bWJlciBvZiByZWdpc3RlcnMgaW4gdGhlIGRpcnR5IHBhcnRpdGlvbiBzdGFydGluZyBhdCBCU1BTVE9SRSBhbmQKKyAqIGVuZGluZyBhdCBCU1AuICBUaGlzIGlzbid0IHNpbXBseSAoQlNQLUJTUFNUT1JFKS84IGJlY2F1c2UgZXZlcnkgNjR0aCBzbG90IHN0b3JlcworICogYXIucm5hdC4KKyAqLworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZworaWE2NF9yc2VfbnVtX3JlZ3MgKHVuc2lnbmVkIGxvbmcgKmJzcHN0b3JlLCB1bnNpZ25lZCBsb25nICpic3ApCit7CisJdW5zaWduZWQgbG9uZyBzbG90cyA9IChic3AgLSBic3BzdG9yZSk7CisKKwlyZXR1cm4gc2xvdHMgLSAoaWE2NF9yc2Vfc2xvdF9udW0oYnNwc3RvcmUpICsgc2xvdHMpLzB4NDA7Cit9CisKKy8qCisgKiBUaGUgaW52ZXJzZSBvZiB0aGUgYWJvdmU6IGdpdmVuIGJzcHN0b3JlIGFuZCB0aGUgbnVtYmVyIG9mCisgKiByZWdpc3RlcnMsIGNhbGN1bGF0ZSBhci5ic3AuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgKgoraWE2NF9yc2Vfc2tpcF9yZWdzICh1bnNpZ25lZCBsb25nICphZGRyLCBsb25nIG51bV9yZWdzKQoreworCWxvbmcgZGVsdGEgPSBpYTY0X3JzZV9zbG90X251bShhZGRyKSArIG51bV9yZWdzOworCisJaWYgKG51bV9yZWdzIDwgMCkKKwkJZGVsdGEgLT0gMHgzZTsKKwlyZXR1cm4gYWRkciArIG51bV9yZWdzICsgZGVsdGEvMHgzZjsKK30KKworI2VuZGlmIC8qIF9BU01fSUE2NF9SU0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9yd3NlbS5oIGIvaW5jbHVkZS9hc20taWE2NC9yd3NlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlY2U1MDYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3J3c2VtLmgKQEAgLTAsMCArMSwxODggQEAKKy8qCisgKiBhc20taWE2NC9yd3NlbS5oOiBSL1cgc2VtYXBob3JlcyBmb3IgaWE2NAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMyBLZW4gQ2hlbiA8a2VubmV0aC53LmNoZW5AaW50ZWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDAzIEFzaXQgTWFsbGljayA8YXNpdC5rLm1hbGxpY2tAaW50ZWwuY29tPgorICoKKyAqIEJhc2VkIG9uIGFzbS1pMzg2L3J3c2VtLmggYW5kIG90aGVyIGFyY2hpdGVjdHVyZSBpbXBsZW1lbnRhdGlvbi4KKyAqCisgKiBUaGUgTVNXIG9mIHRoZSBjb3VudCBpcyB0aGUgbmVnYXRlZCBudW1iZXIgb2YgYWN0aXZlIHdyaXRlcnMgYW5kCisgKiB3YWl0aW5nIGxvY2tlcnMsIGFuZCB0aGUgTFNXIGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgYWN0aXZlIGxvY2tzLgorICoKKyAqIFRoZSBsb2NrIGNvdW50IGlzIGluaXRpYWxpemVkIHRvIDAgKG5vIGFjdGl2ZSBhbmQgbm8gd2FpdGluZyBsb2NrZXJzKS4KKyAqCisgKiBXaGVuIGEgd3JpdGVyIHN1YnRyYWN0cyBXUklURV9CSUFTLCBpdCdsbCBnZXQgMHhmZmZmMDAwMSBmb3IgdGhlIGNhc2UKKyAqIG9mIGFuIHVuY29udGVuZGVkIGxvY2suIFJlYWRlcnMgaW5jcmVtZW50IGJ5IDEgYW5kIHNlZSBhIHBvc2l0aXZlIHZhbHVlCisgKiB3aGVuIHVuY29udGVuZGVkLCBuZWdhdGl2ZSBpZiB0aGVyZSBhcmUgd3JpdGVycyAoYW5kIG1heWJlKSByZWFkZXJzCisgKiB3YWl0aW5nIChpbiB3aGljaCBjYXNlIGl0IGdvZXMgdG8gc2xlZXApLgorICovCisKKyNpZm5kZWYgX0FTTV9JQTY0X1JXU0VNX0gKKyNkZWZpbmUgX0FTTV9JQTY0X1JXU0VNX0gKKworI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorCisjaW5jbHVkZSA8YXNtL2ludHJpbnNpY3MuaD4KKworLyoKKyAqIHRoZSBzZW1hcGhvcmUgZGVmaW5pdGlvbgorICovCitzdHJ1Y3Qgcndfc2VtYXBob3JlIHsKKwlzaWduZWQgaW50CQljb3VudDsKKwlzcGlubG9ja190CQl3YWl0X2xvY2s7CisJc3RydWN0IGxpc3RfaGVhZAl3YWl0X2xpc3Q7CisjaWYgUldTRU1fREVCVUcKKwlpbnQJCQlkZWJ1ZzsKKyNlbmRpZgorfTsKKworI2RlZmluZSBSV1NFTV9VTkxPQ0tFRF9WQUxVRQkJMHgwMDAwMDAwMAorI2RlZmluZSBSV1NFTV9BQ1RJVkVfQklBUwkJMHgwMDAwMDAwMQorI2RlZmluZSBSV1NFTV9BQ1RJVkVfTUFTSwkJMHgwMDAwZmZmZgorI2RlZmluZSBSV1NFTV9XQUlUSU5HX0JJQVMJCSgtMHgwMDAxMDAwMCkKKyNkZWZpbmUgUldTRU1fQUNUSVZFX1JFQURfQklBUwkJUldTRU1fQUNUSVZFX0JJQVMKKyNkZWZpbmUgUldTRU1fQUNUSVZFX1dSSVRFX0JJQVMJCShSV1NFTV9XQUlUSU5HX0JJQVMgKyBSV1NFTV9BQ1RJVkVfQklBUykKKworLyoKKyAqIGluaXRpYWxpemF0aW9uCisgKi8KKyNpZiBSV1NFTV9ERUJVRworI2RlZmluZSBfX1JXU0VNX0RFQlVHX0lOSVQgICAgICAsIDAKKyNlbHNlCisjZGVmaW5lIF9fUldTRU1fREVCVUdfSU5JVAkvKiAqLworI2VuZGlmCisKKyNkZWZpbmUgX19SV1NFTV9JTklUSUFMSVpFUihuYW1lKSBcCisJeyBSV1NFTV9VTkxPQ0tFRF9WQUxVRSwgU1BJTl9MT0NLX1VOTE9DS0VELCBcCisJICBMSVNUX0hFQURfSU5JVCgobmFtZSkud2FpdF9saXN0KSBcCisJICBfX1JXU0VNX0RFQlVHX0lOSVQgfQorCisjZGVmaW5lIERFQ0xBUkVfUldTRU0obmFtZSkgXAorCXN0cnVjdCByd19zZW1hcGhvcmUgbmFtZSA9IF9fUldTRU1fSU5JVElBTElaRVIobmFtZSkKKworZXh0ZXJuIHN0cnVjdCByd19zZW1hcGhvcmUgKnJ3c2VtX2Rvd25fcmVhZF9mYWlsZWQoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKTsKK2V4dGVybiBzdHJ1Y3Qgcndfc2VtYXBob3JlICpyd3NlbV9kb3duX3dyaXRlX2ZhaWxlZChzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pOworZXh0ZXJuIHN0cnVjdCByd19zZW1hcGhvcmUgKnJ3c2VtX3dha2Uoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKTsKK2V4dGVybiBzdHJ1Y3Qgcndfc2VtYXBob3JlICpyd3NlbV9kb3duZ3JhZGVfd2FrZShzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pOworCitzdGF0aWMgaW5saW5lIHZvaWQKK2luaXRfcndzZW0gKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKK3sKKwlzZW0tPmNvdW50ID0gUldTRU1fVU5MT0NLRURfVkFMVUU7CisJc3Bpbl9sb2NrX2luaXQoJnNlbS0+d2FpdF9sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmc2VtLT53YWl0X2xpc3QpOworI2lmIFJXU0VNX0RFQlVHCisJc2VtLT5kZWJ1ZyA9IDA7CisjZW5kaWYKK30KKworLyoKKyAqIGxvY2sgZm9yIHJlYWRpbmcKKyAqLworc3RhdGljIGlubGluZSB2b2lkCitfX2Rvd25fcmVhZCAoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQoreworCWludCByZXN1bHQgPSBpYTY0X2ZldGNoYWRkNF9hY3EoKHVuc2lnbmVkIGludCAqKSZzZW0tPmNvdW50LCAxKTsKKworCWlmIChyZXN1bHQgPCAwKQorCQlyd3NlbV9kb3duX3JlYWRfZmFpbGVkKHNlbSk7Cit9CisKKy8qCisgKiBsb2NrIGZvciB3cml0aW5nCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorX19kb3duX3dyaXRlIChzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCit7CisJaW50IG9sZCwgbmV3OworCisJZG8geworCQlvbGQgPSBzZW0tPmNvdW50OworCQluZXcgPSBvbGQgKyBSV1NFTV9BQ1RJVkVfV1JJVEVfQklBUzsKKwl9IHdoaWxlIChjbXB4Y2hnX2FjcSgmc2VtLT5jb3VudCwgb2xkLCBuZXcpICE9IG9sZCk7CisKKwlpZiAob2xkICE9IDApCisJCXJ3c2VtX2Rvd25fd3JpdGVfZmFpbGVkKHNlbSk7Cit9CisKKy8qCisgKiB1bmxvY2sgYWZ0ZXIgcmVhZGluZworICovCitzdGF0aWMgaW5saW5lIHZvaWQKK19fdXBfcmVhZCAoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQoreworCWludCByZXN1bHQgPSBpYTY0X2ZldGNoYWRkNF9yZWwoKHVuc2lnbmVkIGludCAqKSZzZW0tPmNvdW50LCAtMSk7CisKKwlpZiAocmVzdWx0IDwgMCAmJiAoLS1yZXN1bHQgJiBSV1NFTV9BQ1RJVkVfTUFTSykgPT0gMCkKKwkJcndzZW1fd2FrZShzZW0pOworfQorCisvKgorICogdW5sb2NrIGFmdGVyIHdyaXRpbmcKKyAqLworc3RhdGljIGlubGluZSB2b2lkCitfX3VwX3dyaXRlIChzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCit7CisJaW50IG9sZCwgbmV3OworCisJZG8geworCQlvbGQgPSBzZW0tPmNvdW50OworCQluZXcgPSBvbGQgLSBSV1NFTV9BQ1RJVkVfV1JJVEVfQklBUzsKKwl9IHdoaWxlIChjbXB4Y2hnX3JlbCgmc2VtLT5jb3VudCwgb2xkLCBuZXcpICE9IG9sZCk7CisKKwlpZiAobmV3IDwgMCAmJiAobmV3ICYgUldTRU1fQUNUSVZFX01BU0spID09IDApCisJCXJ3c2VtX3dha2Uoc2VtKTsKK30KKworLyoKKyAqIHRyeWxvY2sgZm9yIHJlYWRpbmcgLS0gcmV0dXJucyAxIGlmIHN1Y2Nlc3NmdWwsIDAgaWYgY29udGVudGlvbgorICovCitzdGF0aWMgaW5saW5lIGludAorX19kb3duX3JlYWRfdHJ5bG9jayAoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQoreworCWludCB0bXA7CisJd2hpbGUgKCh0bXAgPSBzZW0tPmNvdW50KSA+PSAwKSB7CisJCWlmICh0bXAgPT0gY21weGNoZ19hY3EoJnNlbS0+Y291bnQsIHRtcCwgdG1wKzEpKSB7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHRyeWxvY2sgZm9yIHdyaXRpbmcgLS0gcmV0dXJucyAxIGlmIHN1Y2Nlc3NmdWwsIDAgaWYgY29udGVudGlvbgorICovCitzdGF0aWMgaW5saW5lIGludAorX19kb3duX3dyaXRlX3RyeWxvY2sgKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKK3sKKwlpbnQgdG1wID0gY21weGNoZ19hY3EoJnNlbS0+Y291bnQsIFJXU0VNX1VOTE9DS0VEX1ZBTFVFLAorCQkJICAgICAgUldTRU1fQUNUSVZFX1dSSVRFX0JJQVMpOworCXJldHVybiB0bXAgPT0gUldTRU1fVU5MT0NLRURfVkFMVUU7Cit9CisKKy8qCisgKiBkb3duZ3JhZGUgd3JpdGUgbG9jayB0byByZWFkIGxvY2sKKyAqLworc3RhdGljIGlubGluZSB2b2lkCitfX2Rvd25ncmFkZV93cml0ZSAoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQoreworCWludCBvbGQsIG5ldzsKKworCWRvIHsKKwkJb2xkID0gc2VtLT5jb3VudDsKKwkJbmV3ID0gb2xkIC0gUldTRU1fV0FJVElOR19CSUFTOworCX0gd2hpbGUgKGNtcHhjaGdfcmVsKCZzZW0tPmNvdW50LCBvbGQsIG5ldykgIT0gb2xkKTsKKworCWlmIChvbGQgPCAwKQorCQlyd3NlbV9kb3duZ3JhZGVfd2FrZShzZW0pOworfQorCisvKgorICogSW1wbGVtZW50IGF0b21pYyBhZGQgZnVuY3Rpb25hbGl0eS4gIFRoZXNlIHVzZWQgdG8gYmUgImlubGluZSIgZnVuY3Rpb25zLCBidXQgR0NDIHYzLjEKKyAqIGRvZXNuJ3QgcXVpdGUgb3B0aW1pemUgdGhpcyBzdHVmZiByaWdodCBhbmQgZW5kcyB1cCB3aXRoIGJhZCBjYWxscyB0byBmZXRjaGFuZGFkZC4KKyAqLworI2RlZmluZSByd3NlbV9hdG9taWNfYWRkKGRlbHRhLCBzZW0pCWF0b21pY19hZGQoZGVsdGEsIChhdG9taWNfdCAqKSgmKHNlbSktPmNvdW50KSkKKyNkZWZpbmUgcndzZW1fYXRvbWljX3VwZGF0ZShkZWx0YSwgc2VtKQlhdG9taWNfYWRkX3JldHVybihkZWx0YSwgKGF0b21pY190ICopKCYoc2VtKS0+Y291bnQpKQorCisjZW5kaWYgLyogX0FTTV9JQTY0X1JXU0VNX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvc2FsLmggYi9pbmNsdWRlL2FzbS1pYTY0L3NhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhMWVkMzcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3NhbC5oCkBAIC0wLDAgKzEsODQwIEBACisjaWZuZGVmIF9BU01fSUE2NF9TQUxfSAorI2RlZmluZSBfQVNNX0lBNjRfU0FMX0gKKworLyoKKyAqIFN5c3RlbSBBYnN0cmFjdGlvbiBMYXllciBkZWZpbml0aW9ucy4KKyAqCisgKiBUaGlzIGlzIGJhc2VkIG9uIHZlcnNpb24gMi41IG9mIHRoZSBtYW51YWwgIklBLTY0IFN5c3RlbQorICogQWJzdHJhY3Rpb24gTGF5ZXIiLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMSBJbnRlbAorICogQ29weXJpZ2h0IChDKSAyMDAyIEplbm5hIEhhbGwgPGplbm5hLnMuaGFsbEBpbnRlbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgRnJlZCBMZXdpcyA8ZnJlZGVyaWNrLnYubGV3aXNAaW50ZWwuY29tPgorICogQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAxLCAyMDAzIEhld2xldHQtUGFja2FyZCBDbworICoJRGF2aWQgTW9zYmVyZ2VyLVRhbmcgPGRhdmlkbUBocGwuaHAuY29tPgorICogQ29weXJpZ2h0IChDKSAxOTk5IFNyaW5pdmFzYSBQcmFzYWQgVGhpcnVtYWxhY2hhciA8c3ByYXNhZEBzcHJhc2FkLmVuZ3Iuc2dpLmNvbT4KKyAqCisgKiAwMi8wMS8wNCBKLiBIYWxsIFVwZGF0ZWQgRXJyb3IgUmVjb3JkIFN0cnVjdHVyZXMgdG8gY29uZm9ybSB0byBKdWx5IDIwMDEKKyAqCQkgICAgcmV2aXNpb24gb2YgdGhlIFNBTCBzcGVjLgorICogMDEvMDEvMDMgZnZsZXdpcyBVcGRhdGVkIEVycm9yIFJlY29yZCBTdHJ1Y3R1cmVzIHRvIGNvbmZvcm0gd2l0aCBOb3YuIDIwMDAKKyAqICAgICAgICAgICAgICAgICAgcmV2aXNpb24gb2YgdGhlIFNBTCBzcGVjLgorICogOTkvMDkvMjkgZGF2aWRtCVVwZGF0ZWQgZm9yIFNBTCAyLjYuCisgKiAwMC8wMy8yOSBjZmxlY2sgICAgICBVcGRhdGVkIFNBTCBFcnJvciBMb2dnaW5nIGluZm8gZm9yIHByb2Nlc3NvciAoU0FMIDIuNikKKyAqICAgICAgICAgICAgICAgICAgICAgIChwbHVzIGV4YW1wbGVzIG9mIHBsYXRmb3JtIGVycm9yIGluZm8gc3RydWN0dXJlcyBmcm9tIHNtYXJpc2V0IEAgSW50ZWwpCisgKi8KKworI2RlZmluZSBJQTY0X1NBTF9QTEFURk9STV9GRUFUVVJFX0JVU19MT0NLX0JJVAkJMAorI2RlZmluZSBJQTY0X1NBTF9QTEFURk9STV9GRUFUVVJFX0lSUV9SRURJUl9ISU5UX0JJVAkxCisjZGVmaW5lIElBNjRfU0FMX1BMQVRGT1JNX0ZFQVRVUkVfSVBJX1JFRElSX0hJTlRfQklUCTIKKyNkZWZpbmUgSUE2NF9TQUxfUExBVEZPUk1fRkVBVFVSRV9JVENfRFJJRlRfQklUCSAJMworCisjZGVmaW5lIElBNjRfU0FMX1BMQVRGT1JNX0ZFQVRVUkVfQlVTX0xPQ0sJICAoMTw8SUE2NF9TQUxfUExBVEZPUk1fRkVBVFVSRV9CVVNfTE9DS19CSVQpCisjZGVmaW5lIElBNjRfU0FMX1BMQVRGT1JNX0ZFQVRVUkVfSVJRX1JFRElSX0hJTlQgKDE8PElBNjRfU0FMX1BMQVRGT1JNX0ZFQVRVUkVfSVJRX1JFRElSX0hJTlRfQklUKQorI2RlZmluZSBJQTY0X1NBTF9QTEFURk9STV9GRUFUVVJFX0lQSV9SRURJUl9ISU5UICgxPDxJQTY0X1NBTF9QTEFURk9STV9GRUFUVVJFX0lQSV9SRURJUl9ISU5UX0JJVCkKKyNkZWZpbmUgSUE2NF9TQUxfUExBVEZPUk1fRkVBVFVSRV9JVENfRFJJRlQJICAoMTw8SUE2NF9TQUxfUExBVEZPUk1fRkVBVFVSRV9JVENfRFJJRlRfQklUKQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjaW5jbHVkZSA8bGludXgvYmNkLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9lZmkuaD4KKworI2luY2x1ZGUgPGFzbS9wYWwuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2ZwdS5oPgorCitleHRlcm4gc3BpbmxvY2tfdCBzYWxfbG9jazsKKworLyogU0FMIHNwZWMgX3JlcXVpcmVzXyBlaWdodCBhcmdzIGZvciBlYWNoIGNhbGwuICovCisjZGVmaW5lIF9fU0FMX0NBTEwocmVzdWx0LGEwLGExLGEyLGEzLGE0LGE1LGE2LGE3KQlcCisJcmVzdWx0ID0gKCppYTY0X3NhbCkoYTAsYTEsYTIsYTMsYTQsYTUsYTYsYTcpCisKKyMgZGVmaW5lIFNBTF9DQUxMKHJlc3VsdCxhcmdzLi4uKSBkbyB7CQkJCVwKKwl1bnNpZ25lZCBsb25nIF9faWE2NF9zY19mbGFnczsJCQkJXAorCXN0cnVjdCBpYTY0X2ZwcmVnIF9faWE2NF9zY19mcls2XTsJCQlcCisJaWE2NF9zYXZlX3NjcmF0Y2hfZnByZWdzKF9faWE2NF9zY19mcik7CQkJXAorCXNwaW5fbG9ja19pcnFzYXZlKCZzYWxfbG9jaywgX19pYTY0X3NjX2ZsYWdzKTsJCVwKKwlfX1NBTF9DQUxMKHJlc3VsdCwgYXJncyk7CQkJCVwKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYWxfbG9jaywgX19pYTY0X3NjX2ZsYWdzKTsJXAorCWlhNjRfbG9hZF9zY3JhdGNoX2ZwcmVncyhfX2lhNjRfc2NfZnIpOwkJCVwKK30gd2hpbGUgKDApCisKKyMgZGVmaW5lIFNBTF9DQUxMX05PTE9DSyhyZXN1bHQsYXJncy4uLikgZG8gewkJXAorCXVuc2lnbmVkIGxvbmcgX19pYTY0X3Njbl9mbGFnczsJCQlcCisJc3RydWN0IGlhNjRfZnByZWcgX19pYTY0X3Njbl9mcls2XTsJCVwKKwlpYTY0X3NhdmVfc2NyYXRjaF9mcHJlZ3MoX19pYTY0X3Njbl9mcik7CVwKKwlsb2NhbF9pcnFfc2F2ZShfX2lhNjRfc2NuX2ZsYWdzKTsJCVwKKwlfX1NBTF9DQUxMKHJlc3VsdCwgYXJncyk7CQkJXAorCWxvY2FsX2lycV9yZXN0b3JlKF9faWE2NF9zY25fZmxhZ3MpOwkJXAorCWlhNjRfbG9hZF9zY3JhdGNoX2ZwcmVncyhfX2lhNjRfc2NuX2ZyKTsJXAorfSB3aGlsZSAoMCkKKworIyBkZWZpbmUgU0FMX0NBTExfUkVFTlRSQU5UKHJlc3VsdCxhcmdzLi4uKSBkbyB7CVwKKwlzdHJ1Y3QgaWE2NF9mcHJlZyBfX2lhNjRfc2NzX2ZyWzZdOwkJXAorCWlhNjRfc2F2ZV9zY3JhdGNoX2ZwcmVncyhfX2lhNjRfc2NzX2ZyKTsJXAorCXByZWVtcHRfZGlzYWJsZSgpOwkJCQlcCisJX19TQUxfQ0FMTChyZXN1bHQsIGFyZ3MpOwkJCVwKKwlwcmVlbXB0X2VuYWJsZSgpOwkJCQlcCisJaWE2NF9sb2FkX3NjcmF0Y2hfZnByZWdzKF9faWE2NF9zY3NfZnIpOwlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIFNBTF9TRVRfVkVDVE9SUwkJCTB4MDEwMDAwMDAKKyNkZWZpbmUgU0FMX0dFVF9TVEFURV9JTkZPCQkweDAxMDAwMDAxCisjZGVmaW5lIFNBTF9HRVRfU1RBVEVfSU5GT19TSVpFCQkweDAxMDAwMDAyCisjZGVmaW5lIFNBTF9DTEVBUl9TVEFURV9JTkZPCQkweDAxMDAwMDAzCisjZGVmaW5lIFNBTF9NQ19SRU5ERVoJCQkweDAxMDAwMDA0CisjZGVmaW5lIFNBTF9NQ19TRVRfUEFSQU1TCQkweDAxMDAwMDA1CisjZGVmaW5lIFNBTF9SRUdJU1RFUl9QSFlTSUNBTF9BRERSCTB4MDEwMDAwMDYKKworI2RlZmluZSBTQUxfQ0FDSEVfRkxVU0gJCQkweDAxMDAwMDA4CisjZGVmaW5lIFNBTF9DQUNIRV9JTklUCQkJMHgwMTAwMDAwOQorI2RlZmluZSBTQUxfUENJX0NPTkZJR19SRUFECQkweDAxMDAwMDEwCisjZGVmaW5lIFNBTF9QQ0lfQ09ORklHX1dSSVRFCQkweDAxMDAwMDExCisjZGVmaW5lIFNBTF9GUkVRX0JBU0UJCQkweDAxMDAwMDEyCisKKyNkZWZpbmUgU0FMX1VQREFURV9QQUwJCQkweDAxMDAwMDIwCisKK3N0cnVjdCBpYTY0X3NhbF9yZXR2YWwgeworCS8qCisJICogQSB6ZXJvIHN0YXR1cyB2YWx1ZSBpbmRpY2F0ZXMgY2FsbCBjb21wbGV0ZWQgd2l0aG91dCBlcnJvci4KKwkgKiBBIG5lZ2F0aXZlIHN0YXR1cyB2YWx1ZSBpbmRpY2F0ZXMgcmVhc29uIG9mIGNhbGwgZmFpbHVyZS4KKwkgKiBBIHBvc2l0aXZlIHN0YXR1cyB2YWx1ZSBpbmRpY2F0ZXMgc3VjY2VzcyBidXQgYW4KKwkgKiBpbmZvcm1hdGlvbmFsIHZhbHVlIHNob3VsZCBiZSBwcmludGVkIChlLmcuLCAicmVib290IGZvcgorCSAqIGNoYW5nZSB0byB0YWtlIGVmZmVjdCIpLgorCSAqLworCXM2NCBzdGF0dXM7CisJdTY0IHYwOworCXU2NCB2MTsKKwl1NjQgdjI7Cit9OworCit0eXBlZGVmIHN0cnVjdCBpYTY0X3NhbF9yZXR2YWwgKCppYTY0X3NhbF9oYW5kbGVyKSAodTY0LCAuLi4pOworCitlbnVtIHsKKwlTQUxfRlJFUV9CQVNFX1BMQVRGT1JNID0gMCwKKwlTQUxfRlJFUV9CQVNFX0lOVEVSVkFMX1RJTUVSID0gMSwKKwlTQUxfRlJFUV9CQVNFX1JFQUxUSU1FX0NMT0NLID0gMgorfTsKKworLyoKKyAqIFRoZSBTQUwgc3lzdGVtIHRhYmxlIGlzIGZvbGxvd2VkIGJ5IGEgdmFyaWFibGUgbnVtYmVyIG9mIHZhcmlhYmxlCisgKiBsZW5ndGggZGVzY3JpcHRvcnMuICBUaGUgc3RydWN0dXJlIG9mIHRoZXNlIGRlc2NyaXB0b3JzIGZvbGxvd3MKKyAqIGJlbG93LgorICogVGhlIGRlZmluaW5pdGlvbiBmb2xsb3dzIFNBTCBzcGVjcyBmcm9tIEp1bHkgMjAwMAorICovCitzdHJ1Y3QgaWE2NF9zYWxfc3lzdGFiIHsKKwl1OCBzaWduYXR1cmVbNF07CS8qIHNob3VsZCBiZSAiU1NUXyIgKi8KKwl1MzIgc2l6ZTsJCS8qIHNpemUgb2YgdGhpcyB0YWJsZSBpbiBieXRlcyAqLworCXU4IHNhbF9yZXZfbWlub3I7CisJdTggc2FsX3Jldl9tYWpvcjsKKwl1MTYgZW50cnlfY291bnQ7CS8qICMgb2YgZW50cmllcyBpbiB2YXJpYWJsZSBwb3J0aW9uICovCisJdTggY2hlY2tzdW07CisJdTggcmVzZXJ2ZWQxWzddOworCXU4IHNhbF9hX3Jldl9taW5vcjsKKwl1OCBzYWxfYV9yZXZfbWFqb3I7CisJdTggc2FsX2JfcmV2X21pbm9yOworCXU4IHNhbF9iX3Jldl9tYWpvcjsKKwkvKiBvZW1faWQgJiBwcm9kdWN0X2lkOiB0ZXJtaW5hdGluZyBOVUwgaXMgbWlzc2luZyBpZiBzdHJpbmcgaXMgZXhhY3RseSAzMiBieXRlcyBsb25nLiAqLworCXU4IG9lbV9pZFszMl07CisJdTggcHJvZHVjdF9pZFszMl07CS8qIEFTQ0lJIHByb2R1Y3QgaWQgICovCisJdTggcmVzZXJ2ZWQyWzhdOworfTsKKworZW51bSBzYWxfc3lzdGFiX2VudHJ5X3R5cGUgeworCVNBTF9ERVNDX0VOVFJZX1BPSU5UID0gMCwKKwlTQUxfREVTQ19NRU1PUlkgPSAxLAorCVNBTF9ERVNDX1BMQVRGT1JNX0ZFQVRVUkUgPSAyLAorCVNBTF9ERVNDX1RSID0gMywKKwlTQUxfREVTQ19QVEMgPSA0LAorCVNBTF9ERVNDX0FQX1dBS0VVUCA9IDUKK307CisKKy8qCisgKiBFbnRyeSB0eXBlOglTaXplOgorICoJMAk0OAorICoJMQkzMgorICoJMgkxNgorICoJMwkzMgorICoJNAkxNgorICoJNQkxNgorICovCisjZGVmaW5lIFNBTF9ERVNDX1NJWkUodHlwZSkJIlwwNjBcMDQwXDAyMFwwNDBcMDIwXDAyMCJbKHVuc2lnbmVkKSB0eXBlXQorCit0eXBlZGVmIHN0cnVjdCBpYTY0X3NhbF9kZXNjX2VudHJ5X3BvaW50IHsKKwl1OCB0eXBlOworCXU4IHJlc2VydmVkMVs3XTsKKwl1NjQgcGFsX3Byb2M7CisJdTY0IHNhbF9wcm9jOworCXU2NCBncDsKKwl1OCByZXNlcnZlZDJbMTZdOworfWlhNjRfc2FsX2Rlc2NfZW50cnlfcG9pbnRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaWE2NF9zYWxfZGVzY19tZW1vcnkgeworCXU4IHR5cGU7CisJdTggdXNlZF9ieV9zYWw7CS8qIG5lZWRzIHRvIGJlIG1hcHBlZCBmb3IgU0FMPyAqLworCXU4IG1lbV9hdHRyOwkJLyogY3VycmVudCBtZW1vcnkgYXR0cmlidXRlIHNldHRpbmcgKi8KKwl1OCBhY2Nlc3NfcmlnaHRzOwkvKiBhY2Nlc3MgcmlnaHRzIHNldCB1cCBieSBTQUwgKi8KKwl1OCBtZW1fYXR0cl9tYXNrOwkvKiBtYXNrIG9mIHN1cHBvcnRlZCBtZW1vcnkgYXR0cmlidXRlcyAqLworCXU4IHJlc2VydmVkMTsKKwl1OCBtZW1fdHlwZTsJCS8qIG1lbW9yeSB0eXBlICovCisJdTggbWVtX3VzYWdlOwkJLyogbWVtb3J5IHVzYWdlICovCisJdTY0IGFkZHI7CQkvKiBwaHlzaWNhbCBhZGRyZXNzIG9mIG1lbW9yeSAqLworCXUzMiBsZW5ndGg7CS8qIGxlbmd0aCAobXVsdGlwbGUgb2YgNEtCIHBhZ2VzKSAqLworCXUzMiByZXNlcnZlZDI7CisJdTggb2VtX3Jlc2VydmVkWzhdOworfSBpYTY0X3NhbF9kZXNjX21lbW9yeV90OworCit0eXBlZGVmIHN0cnVjdCBpYTY0X3NhbF9kZXNjX3BsYXRmb3JtX2ZlYXR1cmUgeworCXU4IHR5cGU7CisJdTggZmVhdHVyZV9tYXNrOworCXU4IHJlc2VydmVkMVsxNF07Cit9IGlhNjRfc2FsX2Rlc2NfcGxhdGZvcm1fZmVhdHVyZV90OworCit0eXBlZGVmIHN0cnVjdCBpYTY0X3NhbF9kZXNjX3RyIHsKKwl1OCB0eXBlOworCXU4IHRyX3R5cGU7CQkvKiAwID09IGluc3RydWN0aW9uLCAxID09IGRhdGEgKi8KKwl1OCByZWdudW07CQkvKiB0cmFuc2xhdGlvbiByZWdpc3RlciBudW1iZXIgKi8KKwl1OCByZXNlcnZlZDFbNV07CisJdTY0IGFkZHI7CQkvKiB2aXJ0dWFsIGFkZHJlc3Mgb2YgYXJlYSBjb3ZlcmVkICovCisJdTY0IHBhZ2Vfc2l6ZTsJCS8qIGVuY29kZWQgcGFnZSBzaXplICovCisJdTggcmVzZXJ2ZWQyWzhdOworfSBpYTY0X3NhbF9kZXNjX3RyX3Q7CisKK3R5cGVkZWYgc3RydWN0IGlhNjRfc2FsX2Rlc2NfcHRjIHsKKwl1OCB0eXBlOworCXU4IHJlc2VydmVkMVszXTsKKwl1MzIgbnVtX2RvbWFpbnM7CS8qICMgb2YgY29oZXJlbmNlIGRvbWFpbnMgKi8KKwl1NjQgZG9tYWluX2luZm87CS8qIHBoeXNpY2FsIGFkZHJlc3Mgb2YgZG9tYWluIGluZm8gdGFibGUgKi8KK30gaWE2NF9zYWxfZGVzY19wdGNfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaWE2NF9zYWxfcHRjX2RvbWFpbl9pbmZvIHsKKwl1NjQgcHJvY19jb3VudDsJCS8qIG51bWJlciBvZiBwcm9jZXNzb3JzIGluIGRvbWFpbiAqLworCXU2NCBwcm9jX2xpc3Q7CQkvKiBwaHlzaWNhbCBhZGRyZXNzIG9mIExJRCBhcnJheSAqLworfSBpYTY0X3NhbF9wdGNfZG9tYWluX2luZm9fdDsKKwordHlwZWRlZiBzdHJ1Y3QgaWE2NF9zYWxfcHRjX2RvbWFpbl9wcm9jX2VudHJ5IHsKKwl1NjQgaWQgIDogODsJCS8qIGlkIG9mIHByb2Nlc3NvciAqLworCXU2NCBlaWQgOiA4OwkJLyogZWlkIG9mIHByb2Nlc3NvciAqLworfSBpYTY0X3NhbF9wdGNfZG9tYWluX3Byb2NfZW50cnlfdDsKKworCisjZGVmaW5lIElBNjRfU0FMX0FQX0VYVEVSTkFMX0lOVCAwCisKK3R5cGVkZWYgc3RydWN0IGlhNjRfc2FsX2Rlc2NfYXBfd2FrZXVwIHsKKwl1OCB0eXBlOworCXU4IG1lY2hhbmlzbTsJCS8qIDAgPT0gZXh0ZXJuYWwgaW50ZXJydXB0ICovCisJdTggcmVzZXJ2ZWQxWzZdOworCXU2NCB2ZWN0b3I7CQkvKiBpbnRlcnJ1cHQgdmVjdG9yIGluIHJhbmdlIDB4MTAtMHhmZiAqLworfSBpYTY0X3NhbF9kZXNjX2FwX3dha2V1cF90IDsKKworZXh0ZXJuIGlhNjRfc2FsX2hhbmRsZXIgaWE2NF9zYWw7CitleHRlcm4gc3RydWN0IGlhNjRfc2FsX2Rlc2NfcHRjICppYTY0X3B0Y19kb21haW5faW5mbzsKKworZXh0ZXJuIHVuc2lnbmVkIHNob3J0IHNhbF9yZXZpc2lvbjsJLyogc3VwcG9ydGVkIFNBTCBzcGVjIHJldmlzaW9uICovCitleHRlcm4gdW5zaWduZWQgc2hvcnQgc2FsX3ZlcnNpb247CS8qIFNBTCB2ZXJzaW9uOyBPRU0gZGVwZW5kZW50ICovCisjZGVmaW5lIFNBTF9WRVJTSU9OX0NPREUobWFqb3IsIG1pbm9yKSAoKEJJTjJCQ0QobWFqb3IpIDw8IDgpIHwgQklOMkJDRChtaW5vcikpCisKK2V4dGVybiBjb25zdCBjaGFyICppYTY0X3NhbF9zdHJlcnJvciAobG9uZyBzdGF0dXMpOworZXh0ZXJuIHZvaWQgaWE2NF9zYWxfaW5pdCAoc3RydWN0IGlhNjRfc2FsX3N5c3RhYiAqc2FsX3N5c3RhYik7CisKKy8qIFNBTCBpbmZvcm1hdGlvbiB0eXBlIGVuY29kaW5ncyAqLworZW51bSB7CisJU0FMX0lORk9fVFlQRV9NQ0EgID0gMCwJCS8qIE1hY2hpbmUgY2hlY2sgYWJvcnQgaW5mb3JtYXRpb24gKi8KKyAgICAgICAgU0FMX0lORk9fVFlQRV9JTklUID0gMSwJCS8qIEluaXQgaW5mb3JtYXRpb24gKi8KKyAgICAgICAgU0FMX0lORk9fVFlQRV9DTUMgID0gMiwJCS8qIENvcnJlY3RlZCBtYWNoaW5lIGNoZWNrIGluZm9ybWF0aW9uICovCisgICAgICAgIFNBTF9JTkZPX1RZUEVfQ1BFICA9IDMJCS8qIENvcnJlY3RlZCBwbGF0Zm9ybSBlcnJvciBpbmZvcm1hdGlvbiAqLworfTsKKworLyogRW5jb2RpbmdzIGZvciBtYWNoaW5lIGNoZWNrIHBhcmFtZXRlciB0eXBlcyAqLworZW51bSB7CisJU0FMX01DX1BBUkFNX1JFTkRFWl9JTlQgICAgPSAxLAkvKiBSZW5kZXp2b3VzIGludGVycnVwdCAqLworCVNBTF9NQ19QQVJBTV9SRU5ERVpfV0FLRVVQID0gMiwJLyogV2FrZXVwICovCisJU0FMX01DX1BBUkFNX0NQRV9JTlQJICAgPSAzCS8qIENvcnJlY3RlZCBQbGF0Zm9ybSBFcnJvciBJbnQgKi8KK307CisKKy8qIEVuY29kaW5ncyBmb3IgcmVuZGV6dm91cyBtZWNoYW5pc21zICovCitlbnVtIHsKKwlTQUxfTUNfUEFSQU1fTUVDSEFOSVNNX0lOVCA9IDEsCS8qIFVzZSBpbnRlcnJ1cHQgKi8KKwlTQUxfTUNfUEFSQU1fTUVDSEFOSVNNX01FTSA9IDIJLyogVXNlIG1lbW9yeSBzeW5jaHJvbml6YXRpb24gdmFyaWFibGUqLworfTsKKworLyogRW5jb2RpbmdzIGZvciB2ZWN0b3JzIHdoaWNoIGNhbiBiZSByZWdpc3RlcmVkIGJ5IHRoZSBPUyB3aXRoIFNBTCAqLworZW51bSB7CisJU0FMX1ZFQ1RPUl9PU19NQ0EJICA9IDAsCisJU0FMX1ZFQ1RPUl9PU19JTklUCSAgPSAxLAorCVNBTF9WRUNUT1JfT1NfQk9PVF9SRU5ERVogPSAyCit9OworCisvKiBFbmNvZGluZ3MgZm9yIG1jYV9vcHQgcGFyYW1ldGVyIHNlbnQgdG8gU0FMX01DX1NFVF9QQVJBTVMgKi8KKyNkZWZpbmUJU0FMX01DX1BBUkFNX1JaX0FMV0FZUwkJMHgxCisjZGVmaW5lCVNBTF9NQ19QQVJBTV9CSU5JVF9FU0NBTEFURQkweDEwCisKKy8qCisgKiBEZWZpbml0aW9uIG9mIHRoZSBTQUwgRXJyb3IgTG9nIGZyb20gdGhlIFNBTCBzcGVjCisgKi8KKworLyogU0FMIEVycm9yIFJlY29yZCBTZWN0aW9uIEdVSUQgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0FMX1BST0NfREVWX0VSUl9TRUNUX0dVSUQgIFwKKyAgICBFRklfR1VJRCgweGU0MjlmYWYxLCAweDNjYjcsIDB4MTFkNCwgMHhiYywgMHhhNywgMHgwLCAweDgwLCAweGM3LCAweDNjLCAweDg4LCAweDgxKQorI2RlZmluZSBTQUxfUExBVF9NRU1fREVWX0VSUl9TRUNUX0dVSUQgIFwKKyAgICBFRklfR1VJRCgweGU0MjlmYWYyLCAweDNjYjcsIDB4MTFkNCwgMHhiYywgMHhhNywgMHgwLCAweDgwLCAweGM3LCAweDNjLCAweDg4LCAweDgxKQorI2RlZmluZSBTQUxfUExBVF9TRUxfREVWX0VSUl9TRUNUX0dVSUQgIFwKKyAgICBFRklfR1VJRCgweGU0MjlmYWYzLCAweDNjYjcsIDB4MTFkNCwgMHhiYywgMHhhNywgMHgwLCAweDgwLCAweGM3LCAweDNjLCAweDg4LCAweDgxKQorI2RlZmluZSBTQUxfUExBVF9QQ0lfQlVTX0VSUl9TRUNUX0dVSUQgIFwKKyAgICBFRklfR1VJRCgweGU0MjlmYWY0LCAweDNjYjcsIDB4MTFkNCwgMHhiYywgMHhhNywgMHgwLCAweDgwLCAweGM3LCAweDNjLCAweDg4LCAweDgxKQorI2RlZmluZSBTQUxfUExBVF9TTUJJT1NfREVWX0VSUl9TRUNUX0dVSUQgIFwKKyAgICBFRklfR1VJRCgweGU0MjlmYWY1LCAweDNjYjcsIDB4MTFkNCwgMHhiYywgMHhhNywgMHgwLCAweDgwLCAweGM3LCAweDNjLCAweDg4LCAweDgxKQorI2RlZmluZSBTQUxfUExBVF9QQ0lfQ09NUF9FUlJfU0VDVF9HVUlEICBcCisgICAgRUZJX0dVSUQoMHhlNDI5ZmFmNiwgMHgzY2I3LCAweDExZDQsIDB4YmMsIDB4YTcsIDB4MCwgMHg4MCwgMHhjNywgMHgzYywgMHg4OCwgMHg4MSkKKyNkZWZpbmUgU0FMX1BMQVRfU1BFQ0lGSUNfRVJSX1NFQ1RfR1VJRCAgXAorICAgIEVGSV9HVUlEKDB4ZTQyOWZhZjcsIDB4M2NiNywgMHgxMWQ0LCAweGJjLCAweGE3LCAweDAsIDB4ODAsIDB4YzcsIDB4M2MsIDB4ODgsIDB4ODEpCisjZGVmaW5lIFNBTF9QTEFUX0hPU1RfQ1RMUl9FUlJfU0VDVF9HVUlEICBcCisgICAgRUZJX0dVSUQoMHhlNDI5ZmFmOCwgMHgzY2I3LCAweDExZDQsIDB4YmMsIDB4YTcsIDB4MCwgMHg4MCwgMHhjNywgMHgzYywgMHg4OCwgMHg4MSkKKyNkZWZpbmUgU0FMX1BMQVRfQlVTX0VSUl9TRUNUX0dVSUQgIFwKKyAgICBFRklfR1VJRCgweGU0MjlmYWY5LCAweDNjYjcsIDB4MTFkNCwgMHhiYywgMHhhNywgMHgwLCAweDgwLCAweGM3LCAweDNjLCAweDg4LCAweDgxKQorCisjZGVmaW5lIE1BWF9DQUNIRV9FUlJPUlMJNgorI2RlZmluZSBNQVhfVExCX0VSUk9SUwkJNgorI2RlZmluZSBNQVhfQlVTX0VSUk9SUwkJMQorCisvKiBEZWZpbml0aW9uIG9mIHZlcnNpb24gIGFjY29yZGluZyB0byBTQUwgc3BlYyBmb3IgbG9nZ2luZyBwdXJwb3NlcyAqLwordHlwZWRlZiBzdHJ1Y3Qgc2FsX2xvZ19yZXZpc2lvbiB7CisJdTggbWlub3I7CQkvKiBCQ0QgKDAuLjk5KSAqLworCXU4IG1ham9yOwkJLyogQkNEICgwLi45OSkgKi8KK30gc2FsX2xvZ19yZXZpc2lvbl90OworCisvKiBEZWZpbml0aW9uIG9mIHRpbWVzdGFtcCBhY2NvcmRpbmcgdG8gU0FMIHNwZWMgZm9yIGxvZ2dpbmcgcHVycG9zZXMgKi8KK3R5cGVkZWYgc3RydWN0IHNhbF9sb2dfdGltZXN0YW1wIHsKKwl1OCBzbGhfc2Vjb25kOwkJLyogU2Vjb25kICgwLi41OSkgKi8KKwl1OCBzbGhfbWludXRlOwkJLyogTWludXRlICgwLi41OSkgKi8KKwl1OCBzbGhfaG91cjsJCS8qIEhvdXIgKDAuLjIzKSAqLworCXU4IHNsaF9yZXNlcnZlZDsKKwl1OCBzbGhfZGF5OwkJLyogRGF5ICgxLi4zMSkgKi8KKwl1OCBzbGhfbW9udGg7CQkvKiBNb250aCAoMS4uMTIpICovCisJdTggc2xoX3llYXI7CQkvKiBZZWFyICgwMC4uOTkpICovCisJdTggc2xoX2NlbnR1cnk7CQkvKiBDZW50dXJ5ICgxOSwgMjAsIDIxLCAuLi4pICovCit9IHNhbF9sb2dfdGltZXN0YW1wX3Q7CisKKy8qIERlZmluaXRpb24gb2YgbG9nIHJlY29yZCAgaGVhZGVyIHN0cnVjdHVyZXMgKi8KK3R5cGVkZWYgc3RydWN0IHNhbF9sb2dfcmVjb3JkX2hlYWRlciB7CisJdTY0IGlkOwkJCQkvKiBVbmlxdWUgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nIElEICovCisJc2FsX2xvZ19yZXZpc2lvbl90IHJldmlzaW9uOwkvKiBNYWpvciBhbmQgTWlub3IgcmV2aXNpb24gb2YgaGVhZGVyICovCisJdTE2IHNldmVyaXR5OwkJCS8qIEVycm9yIFNldmVyaXR5ICovCisJdTMyIGxlbjsJCQkvKiBMZW5ndGggb2YgdGhpcyBlcnJvciBsb2cgaW4gYnl0ZXMgKi8KKwlzYWxfbG9nX3RpbWVzdGFtcF90IHRpbWVzdGFtcDsJLyogVGltZXN0YW1wICovCisJZWZpX2d1aWRfdCBwbGF0Zm9ybV9ndWlkOwkvKiBVbmlxdWUgT0VNIFBsYXRmb3JtIElEICovCit9IHNhbF9sb2dfcmVjb3JkX2hlYWRlcl90OworCisjZGVmaW5lIHNhbF9sb2dfc2V2ZXJpdHlfcmVjb3ZlcmFibGUJMAorI2RlZmluZSBzYWxfbG9nX3NldmVyaXR5X2ZhdGFsCQkxCisjZGVmaW5lIHNhbF9sb2dfc2V2ZXJpdHlfY29ycmVjdGVkCTIKKworLyogRGVmaW5pdGlvbiBvZiBsb2cgc2VjdGlvbiBoZWFkZXIgc3RydWN0dXJlcyAqLwordHlwZWRlZiBzdHJ1Y3Qgc2FsX2xvZ19zZWNfaGVhZGVyIHsKKyAgICBlZmlfZ3VpZF90IGd1aWQ7CQkJLyogVW5pcXVlIFNlY3Rpb24gSUQgKi8KKyAgICBzYWxfbG9nX3JldmlzaW9uX3QgcmV2aXNpb247CS8qIE1ham9yIGFuZCBNaW5vciByZXZpc2lvbiBvZiBTZWN0aW9uICovCisgICAgdTE2IHJlc2VydmVkOworICAgIHUzMiBsZW47CQkJCS8qIFNlY3Rpb24gbGVuZ3RoICovCit9IHNhbF9sb2dfc2VjdGlvbl9oZHJfdDsKKwordHlwZWRlZiBzdHJ1Y3Qgc2FsX2xvZ19tb2RfZXJyb3JfaW5mbyB7CisJc3RydWN0IHsKKwkJdTY0IGNoZWNrX2luZm8gICAgICAgICAgICAgIDogMSwKKwkJICAgIHJlcXVlc3Rvcl9pZGVudGlmaWVyICAgIDogMSwKKwkJICAgIHJlc3BvbmRlcl9pZGVudGlmaWVyICAgIDogMSwKKwkJICAgIHRhcmdldF9pZGVudGlmaWVyICAgICAgIDogMSwKKwkJICAgIHByZWNpc2VfaXAgICAgICAgICAgICAgIDogMSwKKwkJICAgIHJlc2VydmVkICAgICAgICAgICAgICAgIDogNTk7CisJfSB2YWxpZDsKKwl1NjQgY2hlY2tfaW5mbzsKKwl1NjQgcmVxdWVzdG9yX2lkZW50aWZpZXI7CisJdTY0IHJlc3BvbmRlcl9pZGVudGlmaWVyOworCXU2NCB0YXJnZXRfaWRlbnRpZmllcjsKKwl1NjQgcHJlY2lzZV9pcDsKK30gc2FsX2xvZ19tb2RfZXJyb3JfaW5mb190OworCit0eXBlZGVmIHN0cnVjdCBzYWxfcHJvY2Vzc29yX3N0YXRpY19pbmZvIHsKKwlzdHJ1Y3QgeworCQl1NjQgbWluc3RhdGUgICAgICAgIDogMSwKKwkJICAgIGJyICAgICAgICAgICAgICA6IDEsCisJCSAgICBjciAgICAgICAgICAgICAgOiAxLAorCQkgICAgYXIgICAgICAgICAgICAgIDogMSwKKwkJICAgIHJyICAgICAgICAgICAgICA6IDEsCisJCSAgICBmciAgICAgICAgICAgICAgOiAxLAorCQkgICAgcmVzZXJ2ZWQgICAgICAgIDogNTg7CisJfSB2YWxpZDsKKwlwYWxfbWluX3N0YXRlX2FyZWFfdCBtaW5fc3RhdGVfYXJlYTsKKwl1NjQgYnJbOF07CisJdTY0IGNyWzEyOF07CisJdTY0IGFyWzEyOF07CisJdTY0IHJyWzhdOworCXN0cnVjdCBpYTY0X2ZwcmVnIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBmclsxMjhdOworfSBzYWxfcHJvY2Vzc29yX3N0YXRpY19pbmZvX3Q7CisKK3N0cnVjdCBzYWxfY3B1aWRfaW5mbyB7CisJdTY0IHJlZ3NbNV07CisJdTY0IHJlc2VydmVkOworfTsKKwordHlwZWRlZiBzdHJ1Y3Qgc2FsX2xvZ19wcm9jZXNzb3JfaW5mbyB7CisJc2FsX2xvZ19zZWN0aW9uX2hkcl90IGhlYWRlcjsKKwlzdHJ1Y3QgeworCQl1NjQgcHJvY19lcnJvcl9tYXAgICAgICA6IDEsCisJCSAgICBwcm9jX3N0YXRlX3BhcmFtICAgIDogMSwKKwkJICAgIHByb2NfY3JfbGlkICAgICAgICAgOiAxLAorCQkgICAgcHNpX3N0YXRpY19zdHJ1Y3QgICA6IDEsCisJCSAgICBudW1fY2FjaGVfY2hlY2sgICAgIDogNCwKKwkJICAgIG51bV90bGJfY2hlY2sgICAgICAgOiA0LAorCQkgICAgbnVtX2J1c19jaGVjayAgICAgICA6IDQsCisJCSAgICBudW1fcmVnX2ZpbGVfY2hlY2sgIDogNCwKKwkJICAgIG51bV9tc19jaGVjayAgICAgICAgOiA0LAorCQkgICAgY3B1aWRfaW5mbyAgICAgICAgICA6IDEsCisJCSAgICByZXNlcnZlZDEgICAgICAgICAgIDogMzk7CisJfSB2YWxpZDsKKwl1NjQgcHJvY19lcnJvcl9tYXA7CisJdTY0IHByb2Nfc3RhdGVfcGFyYW1ldGVyOworCXU2NCBwcm9jX2NyX2xpZDsKKwkvKgorCSAqIFRoZSByZXN0IG9mIHRoaXMgc3RydWN0dXJlIGNvbnNpc3RzIG9mIHZhcmlhYmxlLWxlbmd0aCBhcnJheXMsIHdoaWNoIGNhbid0IGJlCisJICogZXhwcmVzc2VkIGluIEMuCisJICovCisJc2FsX2xvZ19tb2RfZXJyb3JfaW5mb190IGluZm9bMF07CisJLyoKKwkgKiBUaGlzIGlzIHdoYXQgdGhlIHJlc3QgbG9va2VkIGxpa2UgaWYgQyBzdXBwb3J0ZWQgdmFyaWFibGUtbGVuZ3RoIGFycmF5czoKKwkgKgorCSAqIHNhbF9sb2dfbW9kX2Vycm9yX2luZm9fdCBjYWNoZV9jaGVja19pbmZvWy52YWxpZC5udW1fY2FjaGVfY2hlY2tdOworCSAqIHNhbF9sb2dfbW9kX2Vycm9yX2luZm9fdCB0bGJfY2hlY2tfaW5mb1sudmFsaWQubnVtX3RsYl9jaGVja107CisJICogc2FsX2xvZ19tb2RfZXJyb3JfaW5mb190IGJ1c19jaGVja19pbmZvWy52YWxpZC5udW1fYnVzX2NoZWNrXTsKKwkgKiBzYWxfbG9nX21vZF9lcnJvcl9pbmZvX3QgcmVnX2ZpbGVfY2hlY2tfaW5mb1sudmFsaWQubnVtX3JlZ19maWxlX2NoZWNrXTsKKwkgKiBzYWxfbG9nX21vZF9lcnJvcl9pbmZvX3QgbXNfY2hlY2tfaW5mb1sudmFsaWQubnVtX21zX2NoZWNrXTsKKwkgKiBzdHJ1Y3Qgc2FsX2NwdWlkX2luZm8gY3B1aWRfaW5mbzsKKwkgKiBzYWxfcHJvY2Vzc29yX3N0YXRpY19pbmZvX3QgcHJvY2Vzc29yX3N0YXRpY19pbmZvOworCSAqLworfSBzYWxfbG9nX3Byb2Nlc3Nvcl9pbmZvX3Q7CisKKy8qIEdpdmVuIGEgc2FsX2xvZ19wcm9jZXNzb3JfaW5mb190IHBvaW50ZXIsIHJldHVybiBhIHBvaW50ZXIgdG8gdGhlIHByb2Nlc3Nvcl9zdGF0aWNfaW5mbzogKi8KKyNkZWZpbmUgU0FMX0xQSV9QU0lfSU5GTyhsKQkJCQkJCQkJCVwKKyh7CXNhbF9sb2dfcHJvY2Vzc29yX2luZm9fdCAqX2wgPSAobCk7CQkJCQkJCVwKKwkoKHNhbF9wcm9jZXNzb3Jfc3RhdGljX2luZm9fdCAqKQkJCQkJCQlcCisJICgoY2hhciAqKSBfbC0+aW5mbyArICgoX2wtPnZhbGlkLm51bV9jYWNoZV9jaGVjayArIF9sLT52YWxpZC5udW1fdGxiX2NoZWNrCQlcCisJCQkJKyBfbC0+dmFsaWQubnVtX2J1c19jaGVjayArIF9sLT52YWxpZC5udW1fcmVnX2ZpbGVfY2hlY2sJXAorCQkJCSsgX2wtPnZhbGlkLm51bV9tc19jaGVjaykgKiBzaXplb2Yoc2FsX2xvZ19tb2RfZXJyb3JfaW5mb190KQlcCisJCQkgICAgICAgKyBzaXplb2Yoc3RydWN0IHNhbF9jcHVpZF9pbmZvKSkpKTsJCQkJXAorfSkKKworLyogcGxhdGZvcm0gZXJyb3IgbG9nIHN0cnVjdHVyZXMgKi8KKwordHlwZWRlZiBzdHJ1Y3Qgc2FsX2xvZ19tZW1fZGV2X2Vycl9pbmZvIHsKKwlzYWxfbG9nX3NlY3Rpb25faGRyX3QgaGVhZGVyOworCXN0cnVjdCB7CisJCXU2NCBlcnJvcl9zdGF0dXMgICAgOiAxLAorCQkgICAgcGh5c2ljYWxfYWRkciAgIDogMSwKKwkJICAgIGFkZHJfbWFzayAgICAgICA6IDEsCisJCSAgICBub2RlICAgICAgICAgICAgOiAxLAorCQkgICAgY2FyZCAgICAgICAgICAgIDogMSwKKwkJICAgIG1vZHVsZSAgICAgICAgICA6IDEsCisJCSAgICBiYW5rICAgICAgICAgICAgOiAxLAorCQkgICAgZGV2aWNlICAgICAgICAgIDogMSwKKwkJICAgIHJvdyAgICAgICAgICAgICA6IDEsCisJCSAgICBjb2x1bW4gICAgICAgICAgOiAxLAorCQkgICAgYml0X3Bvc2l0aW9uICAgIDogMSwKKwkJICAgIHJlcXVlc3Rvcl9pZCAgICA6IDEsCisJCSAgICByZXNwb25kZXJfaWQgICAgOiAxLAorCQkgICAgdGFyZ2V0X2lkICAgICAgIDogMSwKKwkJICAgIGJ1c19zcGVjX2RhdGEgICA6IDEsCisJCSAgICBvZW1faWQgICAgICAgICAgOiAxLAorCQkgICAgb2VtX2RhdGEgICAgICAgIDogMSwKKwkJICAgIHJlc2VydmVkICAgICAgICA6IDQ3OworCX0gdmFsaWQ7CisJdTY0IGVycm9yX3N0YXR1czsKKwl1NjQgcGh5c2ljYWxfYWRkcjsKKwl1NjQgYWRkcl9tYXNrOworCXUxNiBub2RlOworCXUxNiBjYXJkOworCXUxNiBtb2R1bGU7CisJdTE2IGJhbms7CisJdTE2IGRldmljZTsKKwl1MTYgcm93OworCXUxNiBjb2x1bW47CisJdTE2IGJpdF9wb3NpdGlvbjsKKwl1NjQgcmVxdWVzdG9yX2lkOworCXU2NCByZXNwb25kZXJfaWQ7CisJdTY0IHRhcmdldF9pZDsKKwl1NjQgYnVzX3NwZWNfZGF0YTsKKwl1OCBvZW1faWRbMTZdOworCXU4IG9lbV9kYXRhWzFdOwkJCS8qIFZhcmlhYmxlIGxlbmd0aCBkYXRhICovCit9IHNhbF9sb2dfbWVtX2Rldl9lcnJfaW5mb190OworCit0eXBlZGVmIHN0cnVjdCBzYWxfbG9nX3NlbF9kZXZfZXJyX2luZm8geworCXNhbF9sb2dfc2VjdGlvbl9oZHJfdCBoZWFkZXI7CisJc3RydWN0IHsKKwkJdTY0IHJlY29yZF9pZCAgICAgICA6IDEsCisJCSAgICByZWNvcmRfdHlwZSAgICAgOiAxLAorCQkgICAgZ2VuZXJhdG9yX2lkICAgIDogMSwKKwkJICAgIGV2bV9yZXYgICAgICAgICA6IDEsCisJCSAgICBzZW5zb3JfdHlwZSAgICAgOiAxLAorCQkgICAgc2Vuc29yX251bSAgICAgIDogMSwKKwkJICAgIGV2ZW50X2RpciAgICAgICA6IDEsCisJCSAgICBldmVudF9kYXRhMSAgICAgOiAxLAorCQkgICAgZXZlbnRfZGF0YTIgICAgIDogMSwKKwkJICAgIGV2ZW50X2RhdGEzICAgICA6IDEsCisJCSAgICByZXNlcnZlZCAgICAgICAgOiA1NDsKKwl9IHZhbGlkOworCXUxNiByZWNvcmRfaWQ7CisJdTggcmVjb3JkX3R5cGU7CisJdTggdGltZXN0YW1wWzRdOworCXUxNiBnZW5lcmF0b3JfaWQ7CisJdTggZXZtX3JldjsKKwl1OCBzZW5zb3JfdHlwZTsKKwl1OCBzZW5zb3JfbnVtOworCXU4IGV2ZW50X2RpcjsKKwl1OCBldmVudF9kYXRhMTsKKwl1OCBldmVudF9kYXRhMjsKKwl1OCBldmVudF9kYXRhMzsKK30gc2FsX2xvZ19zZWxfZGV2X2Vycl9pbmZvX3Q7CisKK3R5cGVkZWYgc3RydWN0IHNhbF9sb2dfcGNpX2J1c19lcnJfaW5mbyB7CisJc2FsX2xvZ19zZWN0aW9uX2hkcl90IGhlYWRlcjsKKwlzdHJ1Y3QgeworCQl1NjQgZXJyX3N0YXR1cyAgICAgIDogMSwKKwkJICAgIGVycl90eXBlICAgICAgICA6IDEsCisJCSAgICBidXNfaWQgICAgICAgICAgOiAxLAorCQkgICAgYnVzX2FkZHJlc3MgICAgIDogMSwKKwkJICAgIGJ1c19kYXRhICAgICAgICA6IDEsCisJCSAgICBidXNfY21kICAgICAgICAgOiAxLAorCQkgICAgcmVxdWVzdG9yX2lkICAgIDogMSwKKwkJICAgIHJlc3BvbmRlcl9pZCAgICA6IDEsCisJCSAgICB0YXJnZXRfaWQgICAgICAgOiAxLAorCQkgICAgb2VtX2RhdGEgICAgICAgIDogMSwKKwkJICAgIHJlc2VydmVkICAgICAgICA6IDU0OworCX0gdmFsaWQ7CisJdTY0IGVycl9zdGF0dXM7CisJdTE2IGVycl90eXBlOworCXUxNiBidXNfaWQ7CisJdTMyIHJlc2VydmVkOworCXU2NCBidXNfYWRkcmVzczsKKwl1NjQgYnVzX2RhdGE7CisJdTY0IGJ1c19jbWQ7CisJdTY0IHJlcXVlc3Rvcl9pZDsKKwl1NjQgcmVzcG9uZGVyX2lkOworCXU2NCB0YXJnZXRfaWQ7CisJdTggb2VtX2RhdGFbMV07CQkJLyogVmFyaWFibGUgbGVuZ3RoIGRhdGEgKi8KK30gc2FsX2xvZ19wY2lfYnVzX2Vycl9pbmZvX3Q7CisKK3R5cGVkZWYgc3RydWN0IHNhbF9sb2dfc21iaW9zX2Rldl9lcnJfaW5mbyB7CisJc2FsX2xvZ19zZWN0aW9uX2hkcl90IGhlYWRlcjsKKwlzdHJ1Y3QgeworCQl1NjQgZXZlbnRfdHlwZSAgICAgIDogMSwKKwkJICAgIGxlbmd0aCAgICAgICAgICA6IDEsCisJCSAgICB0aW1lX3N0YW1wICAgICAgOiAxLAorCQkgICAgZGF0YSAgICAgICAgICAgIDogMSwKKwkJICAgIHJlc2VydmVkMSAgICAgICA6IDYwOworCX0gdmFsaWQ7CisJdTggZXZlbnRfdHlwZTsKKwl1OCBsZW5ndGg7CisJdTggdGltZV9zdGFtcFs2XTsKKwl1OCBkYXRhWzFdOwkJCS8qIGRhdGEgb2YgdmFyaWFibGUgbGVuZ3RoLCBsZW5ndGggPT0gc2xzbWJfbGVuZ3RoICovCit9IHNhbF9sb2dfc21iaW9zX2Rldl9lcnJfaW5mb190OworCit0eXBlZGVmIHN0cnVjdCBzYWxfbG9nX3BjaV9jb21wX2Vycl9pbmZvIHsKKwlzYWxfbG9nX3NlY3Rpb25faGRyX3QgaGVhZGVyOworCXN0cnVjdCB7CisJCXU2NCBlcnJfc3RhdHVzICAgICAgOiAxLAorCQkgICAgY29tcF9pbmZvICAgICAgIDogMSwKKwkJICAgIG51bV9tZW1fcmVncyAgICA6IDEsCisJCSAgICBudW1faW9fcmVncyAgICAgOiAxLAorCQkgICAgcmVnX2RhdGFfcGFpcnMgIDogMSwKKwkJICAgIG9lbV9kYXRhICAgICAgICA6IDEsCisJCSAgICByZXNlcnZlZCAgICAgICAgOiA1ODsKKwl9IHZhbGlkOworCXU2NCBlcnJfc3RhdHVzOworCXN0cnVjdCB7CisJCXUxNiB2ZW5kb3JfaWQ7CisJCXUxNiBkZXZpY2VfaWQ7CisJCXU4IGNsYXNzX2NvZGVbM107CisJCXU4IGZ1bmNfbnVtOworCQl1OCBkZXZfbnVtOworCQl1OCBidXNfbnVtOworCQl1OCBzZWdfbnVtOworCQl1OCByZXNlcnZlZFs1XTsKKwl9IGNvbXBfaW5mbzsKKwl1MzIgbnVtX21lbV9yZWdzOworCXUzMiBudW1faW9fcmVnczsKKwl1NjQgcmVnX2RhdGFfcGFpcnNbMV07CisJLyoKKwkgKiBhcnJheSBvZiBhZGRyZXNzL2RhdGEgcmVnaXN0ZXIgcGFpcnMgaXMgbnVtX21lbV9yZWdzICsgbnVtX2lvX3JlZ3MgZWxlbWVudHMKKwkgKiBsb25nLiAgRWFjaCBhcnJheSBlbGVtZW50IGNvbnNpc3RzIG9mIGEgdTY0IGFkZHJlc3MgZm9sbG93ZWQgYnkgYSB1NjQgZGF0YQorCSAqIHZhbHVlLiAgVGhlIG9lbV9kYXRhIGFycmF5IGltbWVkaWF0ZWx5IGZvbGxvd3MgdGhlIHJlZ19kYXRhX3BhaXJzIGFycmF5CisJICovCisJdTggb2VtX2RhdGFbMV07CQkJLyogVmFyaWFibGUgbGVuZ3RoIGRhdGEgKi8KK30gc2FsX2xvZ19wY2lfY29tcF9lcnJfaW5mb190OworCit0eXBlZGVmIHN0cnVjdCBzYWxfbG9nX3BsYXRfc3BlY2lmaWNfZXJyX2luZm8geworCXNhbF9sb2dfc2VjdGlvbl9oZHJfdCBoZWFkZXI7CisJc3RydWN0IHsKKwkJdTY0IGVycl9zdGF0dXMgICAgICA6IDEsCisJCSAgICBndWlkICAgICAgICAgICAgOiAxLAorCQkgICAgb2VtX2RhdGEgICAgICAgIDogMSwKKwkJICAgIHJlc2VydmVkICAgICAgICA6IDYxOworCX0gdmFsaWQ7CisJdTY0IGVycl9zdGF0dXM7CisJZWZpX2d1aWRfdCBndWlkOworCXU4IG9lbV9kYXRhWzFdOwkJCS8qIHBsYXRmb3JtIHNwZWNpZmljIHZhcmlhYmxlIGxlbmd0aCBkYXRhICovCit9IHNhbF9sb2dfcGxhdF9zcGVjaWZpY19lcnJfaW5mb190OworCit0eXBlZGVmIHN0cnVjdCBzYWxfbG9nX2hvc3RfY3Rscl9lcnJfaW5mbyB7CisJc2FsX2xvZ19zZWN0aW9uX2hkcl90IGhlYWRlcjsKKwlzdHJ1Y3QgeworCQl1NjQgZXJyX3N0YXR1cyAgICAgIDogMSwKKwkJICAgIHJlcXVlc3Rvcl9pZCAgICA6IDEsCisJCSAgICByZXNwb25kZXJfaWQgICAgOiAxLAorCQkgICAgdGFyZ2V0X2lkICAgICAgIDogMSwKKwkJICAgIGJ1c19zcGVjX2RhdGEgICA6IDEsCisJCSAgICBvZW1fZGF0YSAgICAgICAgOiAxLAorCQkgICAgcmVzZXJ2ZWQgICAgICAgIDogNTg7CisJfSB2YWxpZDsKKwl1NjQgZXJyX3N0YXR1czsKKwl1NjQgcmVxdWVzdG9yX2lkOworCXU2NCByZXNwb25kZXJfaWQ7CisJdTY0IHRhcmdldF9pZDsKKwl1NjQgYnVzX3NwZWNfZGF0YTsKKwl1OCBvZW1fZGF0YVsxXTsJCQkvKiBWYXJpYWJsZSBsZW5ndGggT0VNIGRhdGEgKi8KK30gc2FsX2xvZ19ob3N0X2N0bHJfZXJyX2luZm9fdDsKKwordHlwZWRlZiBzdHJ1Y3Qgc2FsX2xvZ19wbGF0X2J1c19lcnJfaW5mbyB7CisJc2FsX2xvZ19zZWN0aW9uX2hkcl90IGhlYWRlcjsKKwlzdHJ1Y3QgeworCQl1NjQgZXJyX3N0YXR1cyAgICAgIDogMSwKKwkJICAgIHJlcXVlc3Rvcl9pZCAgICA6IDEsCisJCSAgICByZXNwb25kZXJfaWQgICAgOiAxLAorCQkgICAgdGFyZ2V0X2lkICAgICAgIDogMSwKKwkJICAgIGJ1c19zcGVjX2RhdGEgICA6IDEsCisJCSAgICBvZW1fZGF0YSAgICAgICAgOiAxLAorCQkgICAgcmVzZXJ2ZWQgICAgICAgIDogNTg7CisJfSB2YWxpZDsKKwl1NjQgZXJyX3N0YXR1czsKKwl1NjQgcmVxdWVzdG9yX2lkOworCXU2NCByZXNwb25kZXJfaWQ7CisJdTY0IHRhcmdldF9pZDsKKwl1NjQgYnVzX3NwZWNfZGF0YTsKKwl1OCBvZW1fZGF0YVsxXTsJCQkvKiBWYXJpYWJsZSBsZW5ndGggT0VNIGRhdGEgKi8KK30gc2FsX2xvZ19wbGF0X2J1c19lcnJfaW5mb190OworCisvKiBPdmVyYWxsIHBsYXRmb3JtIGVycm9yIHNlY3Rpb24gc3RydWN0dXJlICovCit0eXBlZGVmIHVuaW9uIHNhbF9sb2dfcGxhdGZvcm1fZXJyX2luZm8geworCXNhbF9sb2dfbWVtX2Rldl9lcnJfaW5mb190IG1lbV9kZXZfZXJyOworCXNhbF9sb2dfc2VsX2Rldl9lcnJfaW5mb190IHNlbF9kZXZfZXJyOworCXNhbF9sb2dfcGNpX2J1c19lcnJfaW5mb190IHBjaV9idXNfZXJyOworCXNhbF9sb2dfc21iaW9zX2Rldl9lcnJfaW5mb190IHNtYmlvc19kZXZfZXJyOworCXNhbF9sb2dfcGNpX2NvbXBfZXJyX2luZm9fdCBwY2lfY29tcF9lcnI7CisJc2FsX2xvZ19wbGF0X3NwZWNpZmljX2Vycl9pbmZvX3QgcGxhdF9zcGVjaWZpY19lcnI7CisJc2FsX2xvZ19ob3N0X2N0bHJfZXJyX2luZm9fdCBob3N0X2N0bHJfZXJyOworCXNhbF9sb2dfcGxhdF9idXNfZXJyX2luZm9fdCBwbGF0X2J1c19lcnI7Cit9IHNhbF9sb2dfcGxhdGZvcm1fZXJyX2luZm9fdDsKKworLyogU0FMIGxvZyBvdmVyLWFsbCwgbXVsdGktc2VjdGlvbiBlcnJvciByZWNvcmQgc3RydWN0dXJlIChwcm9jZXNzb3IrcGxhdGZvcm0pICovCit0eXBlZGVmIHN0cnVjdCBlcnJfcmVjIHsKKwlzYWxfbG9nX3JlY29yZF9oZWFkZXJfdCBzYWxfZWxvZ19oZWFkZXI7CisJc2FsX2xvZ19wcm9jZXNzb3JfaW5mb190IHByb2NfZXJyOworCXNhbF9sb2dfcGxhdGZvcm1fZXJyX2luZm9fdCBwbGF0X2VycjsKKwl1OCBvZW1fZGF0YV9wYWRbMTAyNF07Cit9IGlhNjRfZXJyX3JlY190OworCisvKgorICogTm93IGRlZmluZSBhIGNvdXBsZSBvZiBpbmxpbmUgZnVuY3Rpb25zIGZvciBpbXByb3ZlZCB0eXBlIGNoZWNraW5nCisgKiBhbmQgY29udmVuaWVuY2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgbG9uZworaWE2NF9zYWxfZnJlcV9iYXNlICh1bnNpZ25lZCBsb25nIHdoaWNoLCB1bnNpZ25lZCBsb25nICp0aWNrc19wZXJfc2Vjb25kLAorCQkgICAgdW5zaWduZWQgbG9uZyAqZHJpZnRfaW5mbykKK3sKKwlzdHJ1Y3QgaWE2NF9zYWxfcmV0dmFsIGlzcnY7CisKKwlTQUxfQ0FMTChpc3J2LCBTQUxfRlJFUV9CQVNFLCB3aGljaCwgMCwgMCwgMCwgMCwgMCwgMCk7CisJKnRpY2tzX3Blcl9zZWNvbmQgPSBpc3J2LnYwOworCSpkcmlmdF9pbmZvID0gaXNydi52MTsKKwlyZXR1cm4gaXNydi5zdGF0dXM7Cit9CisKKy8qIEZsdXNoIGFsbCB0aGUgcHJvY2Vzc29yIGFuZCBwbGF0Zm9ybSBsZXZlbCBpbnN0cnVjdGlvbiBhbmQvb3IgZGF0YSBjYWNoZXMgKi8KK3N0YXRpYyBpbmxpbmUgczY0CitpYTY0X3NhbF9jYWNoZV9mbHVzaCAodTY0IGNhY2hlX3R5cGUpCit7CisJc3RydWN0IGlhNjRfc2FsX3JldHZhbCBpc3J2OworCVNBTF9DQUxMKGlzcnYsIFNBTF9DQUNIRV9GTFVTSCwgY2FjaGVfdHlwZSwgMCwgMCwgMCwgMCwgMCwgMCk7CisJcmV0dXJuIGlzcnYuc3RhdHVzOworfQorCisKKy8qIEluaXRpYWxpemUgYWxsIHRoZSBwcm9jZXNzb3IgYW5kIHBsYXRmb3JtIGxldmVsIGluc3RydWN0aW9uIGFuZCBkYXRhIGNhY2hlcyAqLworc3RhdGljIGlubGluZSBzNjQKK2lhNjRfc2FsX2NhY2hlX2luaXQgKHZvaWQpCit7CisJc3RydWN0IGlhNjRfc2FsX3JldHZhbCBpc3J2OworCVNBTF9DQUxMKGlzcnYsIFNBTF9DQUNIRV9JTklULCAwLCAwLCAwLCAwLCAwLCAwLCAwKTsKKwlyZXR1cm4gaXNydi5zdGF0dXM7Cit9CisKKy8qCisgKiBDbGVhciB0aGUgcHJvY2Vzc29yIGFuZCBwbGF0Zm9ybSBpbmZvcm1hdGlvbiBsb2dnZWQgYnkgU0FMIHdpdGggcmVzcGVjdCB0byB0aGUgbWFjaGluZQorICogc3RhdGUgYXQgdGhlIHRpbWUgb2YgTUNBJ3MsIElOSVRzLCBDTUNzLCBvciBDUEVzLgorICovCitzdGF0aWMgaW5saW5lIHM2NAoraWE2NF9zYWxfY2xlYXJfc3RhdGVfaW5mbyAodTY0IHNhbF9pbmZvX3R5cGUpCit7CisJc3RydWN0IGlhNjRfc2FsX3JldHZhbCBpc3J2OworCVNBTF9DQUxMX1JFRU5UUkFOVChpc3J2LCBTQUxfQ0xFQVJfU1RBVEVfSU5GTywgc2FsX2luZm9fdHlwZSwgMCwKKwkgICAgICAgICAgICAgIDAsIDAsIDAsIDAsIDApOworCXJldHVybiBpc3J2LnN0YXR1czsKK30KKworCisvKiBHZXQgdGhlIHByb2Nlc3NvciBhbmQgcGxhdGZvcm0gaW5mb3JtYXRpb24gbG9nZ2VkIGJ5IFNBTCB3aXRoIHJlc3BlY3QgdG8gdGhlIG1hY2hpbmUKKyAqIHN0YXRlIGF0IHRoZSB0aW1lIG9mIHRoZSBNQ0FzLCBJTklUcywgQ01Dcywgb3IgQ1BFcy4KKyAqLworc3RhdGljIGlubGluZSB1NjQKK2lhNjRfc2FsX2dldF9zdGF0ZV9pbmZvICh1NjQgc2FsX2luZm9fdHlwZSwgdTY0ICpzYWxfaW5mbykKK3sKKwlzdHJ1Y3QgaWE2NF9zYWxfcmV0dmFsIGlzcnY7CisJU0FMX0NBTExfUkVFTlRSQU5UKGlzcnYsIFNBTF9HRVRfU1RBVEVfSU5GTywgc2FsX2luZm9fdHlwZSwgMCwKKwkgICAgICAgICAgICAgIHNhbF9pbmZvLCAwLCAwLCAwLCAwKTsKKwlpZiAoaXNydi5zdGF0dXMpCisJCXJldHVybiAwOworCisJcmV0dXJuIGlzcnYudjA7Cit9CisKKy8qCisgKiBHZXQgdGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgaW5mb3JtYXRpb24gbG9nZ2VkIGJ5IFNBTCB3aXRoIHJlc3BlY3QgdG8gdGhlIG1hY2hpbmUgc3RhdGUKKyAqIGF0IHRoZSB0aW1lIG9mIE1DQXMsIElOSVRzLCBDTUNzLCBvciBDUEVzLgorICovCitzdGF0aWMgaW5saW5lIHU2NAoraWE2NF9zYWxfZ2V0X3N0YXRlX2luZm9fc2l6ZSAodTY0IHNhbF9pbmZvX3R5cGUpCit7CisJc3RydWN0IGlhNjRfc2FsX3JldHZhbCBpc3J2OworCVNBTF9DQUxMX1JFRU5UUkFOVChpc3J2LCBTQUxfR0VUX1NUQVRFX0lORk9fU0laRSwgc2FsX2luZm9fdHlwZSwgMCwKKwkgICAgICAgICAgICAgIDAsIDAsIDAsIDAsIDApOworCWlmIChpc3J2LnN0YXR1cykKKwkJcmV0dXJuIDA7CisJcmV0dXJuIGlzcnYudjA7Cit9CisKKy8qCisgKiBDYXVzZXMgdGhlIHByb2Nlc3NvciB0byBnbyBpbnRvIGEgc3BpbiBsb29wIHdpdGhpbiBTQUwgd2hlcmUgU0FMIGF3YWl0cyBhIHdha2V1cCBmcm9tCisgKiB0aGUgbW9uYXJjaCBwcm9jZXNzb3IuICBNdXN0IG5vdCBsb2NrLCBiZWNhdXNlIGl0IHdpbGwgbm90IHJldHVybiBvbiBhbnkgY3B1IHVudGlsIHRoZQorICogbW9uYXJjaCBwcm9jZXNzb3Igc2VuZHMgYSB3YWtlIHVwLgorICovCitzdGF0aWMgaW5saW5lIHM2NAoraWE2NF9zYWxfbWNfcmVuZGV6ICh2b2lkKQoreworCXN0cnVjdCBpYTY0X3NhbF9yZXR2YWwgaXNydjsKKwlTQUxfQ0FMTF9OT0xPQ0soaXNydiwgU0FMX01DX1JFTkRFWiwgMCwgMCwgMCwgMCwgMCwgMCwgMCk7CisJcmV0dXJuIGlzcnYuc3RhdHVzOworfQorCisvKgorICogQWxsb3cgdGhlIE9TIHRvIHNwZWNpZnkgdGhlIGludGVycnVwdCBudW1iZXIgdG8gYmUgdXNlZCBieSBTQUwgdG8gaW50ZXJydXB0IE9TIGR1cmluZworICogdGhlIG1hY2hpbmUgY2hlY2sgcmVuZGV6dm91cyBzZXF1ZW5jZSBhcyB3ZWxsIGFzIHRoZSBtZWNoYW5pc20gdG8gd2FrZSB1cCB0aGUKKyAqIG5vbi1tb25hcmNoIHByb2Nlc3NvciBhdCB0aGUgZW5kIG9mIG1hY2hpbmUgY2hlY2sgcHJvY2Vzc2luZy4KKyAqIFJldHVybnMgdGhlIGNvbXBsZXRlIGlhNjRfc2FsX3JldHZhbCBiZWNhdXNlIHNvbWUgY2FsbHMgcmV0dXJuIG1vcmUgdGhhbiBqdXN0IGEgc3RhdHVzCisgKiB2YWx1ZS4KKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgaWE2NF9zYWxfcmV0dmFsCitpYTY0X3NhbF9tY19zZXRfcGFyYW1zICh1NjQgcGFyYW1fdHlwZSwgdTY0IGlfb3JfbSwgdTY0IGlfb3JfbV92YWwsIHU2NCB0aW1lb3V0LCB1NjQgcnpfYWx3YXlzKQoreworCXN0cnVjdCBpYTY0X3NhbF9yZXR2YWwgaXNydjsKKwlTQUxfQ0FMTChpc3J2LCBTQUxfTUNfU0VUX1BBUkFNUywgcGFyYW1fdHlwZSwgaV9vcl9tLCBpX29yX21fdmFsLAorCQkgdGltZW91dCwgcnpfYWx3YXlzLCAwLCAwKTsKKwlyZXR1cm4gaXNydjsKK30KKworLyogUmVhZCBmcm9tIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlICovCitzdGF0aWMgaW5saW5lIHM2NAoraWE2NF9zYWxfcGNpX2NvbmZpZ19yZWFkICh1NjQgcGNpX2NvbmZpZ19hZGRyLCBpbnQgdHlwZSwgdTY0IHNpemUsIHU2NCAqdmFsdWUpCit7CisJc3RydWN0IGlhNjRfc2FsX3JldHZhbCBpc3J2OworCVNBTF9DQUxMKGlzcnYsIFNBTF9QQ0lfQ09ORklHX1JFQUQsIHBjaV9jb25maWdfYWRkciwgc2l6ZSwgdHlwZSwgMCwgMCwgMCwgMCk7CisJaWYgKHZhbHVlKQorCQkqdmFsdWUgPSBpc3J2LnYwOworCXJldHVybiBpc3J2LnN0YXR1czsKK30KKworLyogV3JpdGUgdG8gUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UgKi8KK3N0YXRpYyBpbmxpbmUgczY0CitpYTY0X3NhbF9wY2lfY29uZmlnX3dyaXRlICh1NjQgcGNpX2NvbmZpZ19hZGRyLCBpbnQgdHlwZSwgdTY0IHNpemUsIHU2NCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgaWE2NF9zYWxfcmV0dmFsIGlzcnY7CisJU0FMX0NBTEwoaXNydiwgU0FMX1BDSV9DT05GSUdfV1JJVEUsIHBjaV9jb25maWdfYWRkciwgc2l6ZSwgdmFsdWUsCisJICAgICAgICAgdHlwZSwgMCwgMCwgMCk7CisJcmV0dXJuIGlzcnYuc3RhdHVzOworfQorCisvKgorICogUmVnaXN0ZXIgcGh5c2ljYWwgYWRkcmVzc2VzIG9mIGxvY2F0aW9ucyBuZWVkZWQgYnkgU0FMIHdoZW4gU0FMIHByb2NlZHVyZXMgYXJlIGludm9rZWQKKyAqIGluIHZpcnR1YWwgbW9kZS4KKyAqLworc3RhdGljIGlubGluZSBzNjQKK2lhNjRfc2FsX3JlZ2lzdGVyX3BoeXNpY2FsX2FkZHIgKHU2NCBwaHlzX2VudHJ5LCB1NjQgcGh5c19hZGRyKQoreworCXN0cnVjdCBpYTY0X3NhbF9yZXR2YWwgaXNydjsKKwlTQUxfQ0FMTChpc3J2LCBTQUxfUkVHSVNURVJfUEhZU0lDQUxfQUREUiwgcGh5c19lbnRyeSwgcGh5c19hZGRyLAorCSAgICAgICAgIDAsIDAsIDAsIDAsIDApOworCXJldHVybiBpc3J2LnN0YXR1czsKK30KKworLyoKKyAqIFJlZ2lzdGVyIHNvZnR3YXJlIGRlcGVuZGVudCBjb2RlIGxvY2F0aW9ucyB3aXRoaW4gU0FMLiBUaGVzZSBsb2NhdGlvbnMgYXJlIGhhbmRsZXJzIG9yCisgKiBlbnRyeSBwb2ludHMgd2hlcmUgU0FMIHdpbGwgcGFzcyBjb250cm9sIGZvciB0aGUgc3BlY2lmaWVkIGV2ZW50LiBUaGVzZSBldmVudCBoYW5kbGVycworICogYXJlIGZvciB0aGUgYm90dCByZW5kZXp2b3VzLCBNQ0FzIGFuZCBJTklUIHNjZW5hcmlvcy4KKyAqLworc3RhdGljIGlubGluZSBzNjQKK2lhNjRfc2FsX3NldF92ZWN0b3JzICh1NjQgdmVjdG9yX3R5cGUsCisJCSAgICAgIHU2NCBoYW5kbGVyX2FkZHIxLCB1NjQgZ3AxLCB1NjQgaGFuZGxlcl9sZW4xLAorCQkgICAgICB1NjQgaGFuZGxlcl9hZGRyMiwgdTY0IGdwMiwgdTY0IGhhbmRsZXJfbGVuMikKK3sKKwlzdHJ1Y3QgaWE2NF9zYWxfcmV0dmFsIGlzcnY7CisJU0FMX0NBTEwoaXNydiwgU0FMX1NFVF9WRUNUT1JTLCB2ZWN0b3JfdHlwZSwKKwkJCWhhbmRsZXJfYWRkcjEsIGdwMSwgaGFuZGxlcl9sZW4xLAorCQkJaGFuZGxlcl9hZGRyMiwgZ3AyLCBoYW5kbGVyX2xlbjIpOworCisJcmV0dXJuIGlzcnYuc3RhdHVzOworfQorCisvKiBVcGRhdGUgdGhlIGNvbnRlbnRzIG9mIFBBTCBibG9jayBpbiB0aGUgbm9uLXZvbGF0aWxlIHN0b3JhZ2UgZGV2aWNlICovCitzdGF0aWMgaW5saW5lIHM2NAoraWE2NF9zYWxfdXBkYXRlX3BhbCAodTY0IHBhcmFtX2J1ZiwgdTY0IHNjcmF0Y2hfYnVmLCB1NjQgc2NyYXRjaF9idWZfc2l6ZSwKKwkJICAgICB1NjQgKmVycm9yX2NvZGUsIHU2NCAqc2NyYXRjaF9idWZfc2l6ZV9uZWVkZWQpCit7CisJc3RydWN0IGlhNjRfc2FsX3JldHZhbCBpc3J2OworCVNBTF9DQUxMKGlzcnYsIFNBTF9VUERBVEVfUEFMLCBwYXJhbV9idWYsIHNjcmF0Y2hfYnVmLCBzY3JhdGNoX2J1Zl9zaXplLAorCSAgICAgICAgIDAsIDAsIDAsIDApOworCWlmIChlcnJvcl9jb2RlKQorCQkqZXJyb3JfY29kZSA9IGlzcnYudjA7CisJaWYgKHNjcmF0Y2hfYnVmX3NpemVfbmVlZGVkKQorCQkqc2NyYXRjaF9idWZfc2l6ZV9uZWVkZWQgPSBpc3J2LnYxOworCXJldHVybiBpc3J2LnN0YXR1czsKK30KKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc2FsX3BsYXRmb3JtX2ZlYXR1cmVzOworCitleHRlcm4gaW50ICgqc2FsaW5mb19wbGF0Zm9ybV9vZW1kYXRhKShjb25zdCB1OCAqLCB1OCAqKiwgdTY0ICopOworCitzdHJ1Y3Qgc2FsX3JldF92YWx1ZXMgeworCWxvbmcgcjg7IGxvbmcgcjk7IGxvbmcgcjEwOyBsb25nIHIxMTsKK307CisKKyNkZWZpbmUgSUE2NF9TQUxfT0VNRlVOQ19NSU4JCTB4MDIwMDAwMDAKKyNkZWZpbmUgSUE2NF9TQUxfT0VNRlVOQ19NQVgJCTB4MDNmZmZmZmYKKworZXh0ZXJuIGludCBpYTY0X3NhbF9vZW1jYWxsKHN0cnVjdCBpYTY0X3NhbF9yZXR2YWwgKiwgdTY0LCB1NjQsIHU2NCwgdTY0LCB1NjQsCisJCQkgICAgdTY0LCB1NjQsIHU2NCk7CitleHRlcm4gaW50IGlhNjRfc2FsX29lbWNhbGxfbm9sb2NrKHN0cnVjdCBpYTY0X3NhbF9yZXR2YWwgKiwgdTY0LCB1NjQsIHU2NCwKKwkJCQkgICB1NjQsIHU2NCwgdTY0LCB1NjQsIHU2NCk7CitleHRlcm4gaW50IGlhNjRfc2FsX29lbWNhbGxfcmVlbnRyYW50KHN0cnVjdCBpYTY0X3NhbF9yZXR2YWwgKiwgdTY0LCB1NjQsIHU2NCwKKwkJCQkgICAgICB1NjQsIHU2NCwgdTY0LCB1NjQsIHU2NCk7CisKK2V4dGVybiB2b2lkIGlhNjRfc2FsX2hhbmRsZXJfaW5pdCh2b2lkICplbnRyeV9wb2ludCwgdm9pZCAqZ3B2YWwpOworCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiBfQVNNX0lBNjRfU0FMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvc2NhdHRlcmxpc3QuaCBiL2luY2x1ZGUvYXNtLWlhNjQvc2NhdHRlcmxpc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzRhMTg5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taWE2NC9zY2F0dGVybGlzdC5oCkBAIC0wLDAgKzEsMjggQEAKKyNpZm5kZWYgX0FTTV9JQTY0X1NDQVRURVJMSVNUX0gKKyNkZWZpbmUgX0FTTV9JQTY0X1NDQVRURVJMSVNUX0gKKworLyoKKyAqIE1vZGlmaWVkIDE5OTgtMTk5OSwgMjAwMS0yMDAyLCAyMDA0CisgKglEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+LCBIZXdsZXR0LVBhY2thcmQgQ28KKyAqLworCitzdHJ1Y3Qgc2NhdHRlcmxpc3QgeworCXN0cnVjdCBwYWdlICpwYWdlOworCXVuc2lnbmVkIGludCBvZmZzZXQ7CisJdW5zaWduZWQgaW50IGxlbmd0aDsJLyogYnVmZmVyIGxlbmd0aCAqLworCisJZG1hX2FkZHJfdCBkbWFfYWRkcmVzczsKKwl1bnNpZ25lZCBpbnQgZG1hX2xlbmd0aDsKK307CisKKy8qCisgKiBJdCB1c2VkIHRvIGJlIHRoYXQgSVNBX0RNQV9USFJFU0hPTEQgaGFkIHNvbWV0aGluZyB0byBkbyB3aXRoIHRoZQorICogRE1BLWxpbWl0cyBvZiBJU0EtZGV2aWNlcy4gIE5vd2FkYXlzLCBpdHMgb25seSByZW1haW5pbmcgdXNlIChhcGFydAorICogZnJvbSB0aGUgYWhhMTU0Mi5jIGRyaXZlciwgd2hpY2ggaXNuJ3QgNjQtYml0IGNsZWFuIGFueWhvdykgaXMgdG8KKyAqIHRlbGwgdGhlIGJsb2NrLWxheWVyICh2aWEgQkxLX0JPVU5DRV9JU0EpIHdoYXQgdGhlIG1heC4gcGh5c2ljYWwKKyAqIGFkZHJlc3Mgb2YgYSBwYWdlIGlzIHRoYXQgaXMgYWxsb2NhdGVkIHdpdGggR0ZQX0RNQS4gIE9uIElBLTY0LAorICogdGhhdCdzIDRHQiAtIDEuCisgKi8KKyNkZWZpbmUgSVNBX0RNQV9USFJFU0hPTEQJMHhmZmZmZmZmZgorCisjZW5kaWYgLyogX0FTTV9JQTY0X1NDQVRURVJMSVNUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvc2VjdGlvbnMuaCBiL2luY2x1ZGUvYXNtLWlhNjQvc2VjdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTNkYmRlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taWE2NC9zZWN0aW9ucy5oCkBAIC0wLDAgKzEsMjIgQEAKKyNpZm5kZWYgX0FTTV9JQTY0X1NFQ1RJT05TX0gKKyNkZWZpbmUgX0FTTV9JQTY0X1NFQ1RJT05TX0gKKworLyoKKyAqIENvcHlyaWdodCAoQykgMTk5OC0yMDAzIEhld2xldHQtUGFja2FyZCBDbworICoJRGF2aWQgTW9zYmVyZ2VyLVRhbmcgPGRhdmlkbUBocGwuaHAuY29tPgorICovCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zZWN0aW9ucy5oPgorCitleHRlcm4gY2hhciBfX3Blcl9jcHVfc3RhcnRbXSwgX19wZXJfY3B1X2VuZFtdLCBfX3BoeXNfcGVyX2NwdV9zdGFydFtdOworZXh0ZXJuIGNoYXIgX19zdGFydF9fX3Z0b3BfcGF0Y2hsaXN0W10sIF9fZW5kX19fdnRvcF9wYXRjaGxpc3RbXTsKK2V4dGVybiBjaGFyIF9fc3RhcnRfX19tY2tpbmxleV9lOV9idW5kbGVzW10sIF9fZW5kX19fbWNraW5sZXlfZTlfYnVuZGxlc1tdOworZXh0ZXJuIGNoYXIgX19zdGFydF9nYXRlX3NlY3Rpb25bXTsKK2V4dGVybiBjaGFyIF9fc3RhcnRfZ2F0ZV9tY2tpbmxleV9lOV9wYXRjaGxpc3RbXSwgX19lbmRfZ2F0ZV9tY2tpbmxleV9lOV9wYXRjaGxpc3RbXTsKK2V4dGVybiBjaGFyIF9fc3RhcnRfZ2F0ZV92dG9wX3BhdGNobGlzdFtdLCBfX2VuZF9nYXRlX3Z0b3BfcGF0Y2hsaXN0W107CitleHRlcm4gY2hhciBfX3N0YXJ0X2dhdGVfZnN5c2NhbGxfcGF0Y2hsaXN0W10sIF9fZW5kX2dhdGVfZnN5c2NhbGxfcGF0Y2hsaXN0W107CitleHRlcm4gY2hhciBfX3N0YXJ0X2dhdGVfYnJsX2ZzeXNfYnViYmxlX2Rvd25fcGF0Y2hsaXN0W10sIF9fZW5kX2dhdGVfYnJsX2ZzeXNfYnViYmxlX2Rvd25fcGF0Y2hsaXN0W107CitleHRlcm4gY2hhciBfX3N0YXJ0X3Vud2luZFtdLCBfX2VuZF91bndpbmRbXTsKKworI2VuZGlmIC8qIF9BU01fSUE2NF9TRUNUSU9OU19IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvc2VnbWVudC5oIGIvaW5jbHVkZS9hc20taWE2NC9zZWdtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg5ZTJiMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvc2VnbWVudC5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfQVNNX0lBNjRfU0VHTUVOVF9ICisjZGVmaW5lIF9BU01fSUE2NF9TRUdNRU5UX0gKKworLyogT25seSBoZXJlIGJlY2F1c2Ugd2UgaGF2ZSBzb21lIG9sZCBoZWFkZXIgZmlsZXMgdGhhdCBleHBlY3QgaXQuLiAqLworCisjZW5kaWYgLyogX0FTTV9JQTY0X1NFR01FTlRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9zZW1hcGhvcmUuaCBiL2luY2x1ZGUvYXNtLWlhNjQvc2VtYXBob3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2EyZjBmMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvc2VtYXBob3JlLmgKQEAgLTAsMCArMSwxMDIgQEAKKyNpZm5kZWYgX0FTTV9JQTY0X1NFTUFQSE9SRV9ICisjZGVmaW5lIF9BU01fSUE2NF9TRU1BUEhPUkVfSAorCisvKgorICogQ29weXJpZ2h0IChDKSAxOTk4LTIwMDAgSGV3bGV0dC1QYWNrYXJkIENvCisgKiBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwMCBEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgorCisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorCitzdHJ1Y3Qgc2VtYXBob3JlIHsKKwlhdG9taWNfdCBjb3VudDsKKwlpbnQgc2xlZXBlcnM7CisJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKK307CisKKyNkZWZpbmUgX19TRU1BUEhPUkVfSU5JVElBTElaRVIobmFtZSwgbikJCQkJXAorewkJCQkJCQkJCVwKKwkuY291bnQJCT0gQVRPTUlDX0lOSVQobiksCQkJCVwKKwkuc2xlZXBlcnMJPSAwLAkJCQkJCVwKKwkud2FpdAkJPSBfX1dBSVRfUVVFVUVfSEVBRF9JTklUSUFMSVpFUigobmFtZSkud2FpdCkJXAorfQorCisjZGVmaW5lIF9fTVVURVhfSU5JVElBTElaRVIobmFtZSkJX19TRU1BUEhPUkVfSU5JVElBTElaRVIobmFtZSwxKQorCisjZGVmaW5lIF9fREVDTEFSRV9TRU1BUEhPUkVfR0VORVJJQyhuYW1lLGNvdW50KQkJCQkJXAorCXN0cnVjdCBzZW1hcGhvcmUgbmFtZSA9IF9fU0VNQVBIT1JFX0lOSVRJQUxJWkVSKG5hbWUsIGNvdW50KQorCisjZGVmaW5lIERFQ0xBUkVfTVVURVgobmFtZSkJCV9fREVDTEFSRV9TRU1BUEhPUkVfR0VORVJJQyhuYW1lLCAxKQorI2RlZmluZSBERUNMQVJFX01VVEVYX0xPQ0tFRChuYW1lKQlfX0RFQ0xBUkVfU0VNQVBIT1JFX0dFTkVSSUMobmFtZSwgMCkKKworc3RhdGljIGlubGluZSB2b2lkCitzZW1hX2luaXQgKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSwgaW50IHZhbCkKK3sKKwkqc2VtID0gKHN0cnVjdCBzZW1hcGhvcmUpIF9fU0VNQVBIT1JFX0lOSVRJQUxJWkVSKCpzZW0sIHZhbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAoraW5pdF9NVVRFWCAoc3RydWN0IHNlbWFwaG9yZSAqc2VtKQoreworCXNlbWFfaW5pdChzZW0sIDEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2luaXRfTVVURVhfTE9DS0VEIChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCit7CisJc2VtYV9pbml0KHNlbSwgMCk7Cit9CisKK2V4dGVybiB2b2lkIF9fZG93biAoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSk7CitleHRlcm4gaW50ICBfX2Rvd25faW50ZXJydXB0aWJsZSAoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSk7CitleHRlcm4gaW50ICBfX2Rvd25fdHJ5bG9jayAoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSk7CitleHRlcm4gdm9pZCBfX3VwIChzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKTsKKworLyoKKyAqIEF0b21pY2FsbHkgZGVjcmVtZW50IHRoZSBzZW1hcGhvcmUncyBjb3VudC4gIElmIGl0IGdvZXMgbmVnYXRpdmUsCisgKiBibG9jayB0aGUgY2FsbGluZyB0aHJlYWQgaW4gdGhlIFRBU0tfVU5JTlRFUlJVUFRJQkxFIHN0YXRlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2Rvd24gKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKK3sKKwltaWdodF9zbGVlcCgpOworCWlmIChhdG9taWNfZGVjX3JldHVybigmc2VtLT5jb3VudCkgPCAwKQorCQlfX2Rvd24oc2VtKTsKK30KKworLyoKKyAqIEF0b21pY2FsbHkgZGVjcmVtZW50IHRoZSBzZW1hcGhvcmUncyBjb3VudC4gIElmIGl0IGdvZXMgbmVnYXRpdmUsCisgKiBibG9jayB0aGUgY2FsbGluZyB0aHJlYWQgaW4gdGhlIFRBU0tfSU5URVJSVVBUSUJMRSBzdGF0ZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQKK2Rvd25faW50ZXJydXB0aWJsZSAoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKK3sKKwlpbnQgcmV0ID0gMDsKKworCW1pZ2h0X3NsZWVwKCk7CisJaWYgKGF0b21pY19kZWNfcmV0dXJuKCZzZW0tPmNvdW50KSA8IDApCisJCXJldCA9IF9fZG93bl9pbnRlcnJ1cHRpYmxlKHNlbSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2Rvd25fdHJ5bG9jayAoc3RydWN0IHNlbWFwaG9yZSAqc2VtKQoreworCWludCByZXQgPSAwOworCisJaWYgKGF0b21pY19kZWNfcmV0dXJuKCZzZW0tPmNvdW50KSA8IDApCisJCXJldCA9IF9fZG93bl90cnlsb2NrKHNlbSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSB2b2lkCit1cCAoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKK3sKKwlpZiAoYXRvbWljX2luY19yZXR1cm4oJnNlbS0+Y291bnQpIDw9IDApCisJCV9fdXAoc2VtKTsKK30KKworI2VuZGlmIC8qIF9BU01fSUE2NF9TRU1BUEhPUkVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9zZW1idWYuaCBiL2luY2x1ZGUvYXNtLWlhNjQvc2VtYnVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM0MGZiYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvc2VtYnVmLmgKQEAgLTAsMCArMSwyMiBAQAorI2lmbmRlZiBfQVNNX0lBNjRfU0VNQlVGX0gKKyNkZWZpbmUgX0FTTV9JQTY0X1NFTUJVRl9ICisKKy8qCisgKiBUaGUgc2VtaWQ2NF9kcyBzdHJ1Y3R1cmUgZm9yIElBLTY0IGFyY2hpdGVjdHVyZS4KKyAqIE5vdGUgZXh0cmEgcGFkZGluZyBiZWNhdXNlIHRoaXMgc3RydWN0dXJlIGlzIHBhc3NlZCBiYWNrIGFuZCBmb3J0aAorICogYmV0d2VlbiBrZXJuZWwgYW5kIHVzZXIgc3BhY2UuCisgKgorICogUGFkIHNwYWNlIGlzIGxlZnQgZm9yOgorICogLSAyIG1pc2NlbGxhbmVvdXMgNjQtYml0IHZhbHVlcworICovCisKK3N0cnVjdCBzZW1pZDY0X2RzIHsKKwlzdHJ1Y3QgaXBjNjRfcGVybSBzZW1fcGVybTsJCS8qIHBlcm1pc3Npb25zIC4uIHNlZSBpcGMuaCAqLworCV9fa2VybmVsX3RpbWVfdAlzZW1fb3RpbWU7CQkvKiBsYXN0IHNlbW9wIHRpbWUgKi8KKwlfX2tlcm5lbF90aW1lX3QJc2VtX2N0aW1lOwkJLyogbGFzdCBjaGFuZ2UgdGltZSAqLworCXVuc2lnbmVkIGxvbmcJc2VtX25zZW1zOwkJLyogbm8uIG9mIHNlbWFwaG9yZXMgaW4gYXJyYXkgKi8KKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkMTsKKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkMjsKK307CisKKyNlbmRpZiAvKiBfQVNNX0lBNjRfU0VNQlVGX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvc2VyaWFsLmggYi9pbmNsdWRlL2FzbS1pYTY0L3NlcmlhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjN2EyZjMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3NlcmlhbC5oCkBAIC0wLDAgKzEsMTkgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1pYTY0L3NlcmlhbC5oCisgKgorICogRGVyaXZlZCBmcm9tIHRoZSBpMzg2IHZlcnNpb24uCisgKi8KKworLyoKKyAqIFRoaXMgYXNzdW1lcyB5b3UgaGF2ZSBhIDEuODQzMiBNSHogY2xvY2sgZm9yIHlvdXIgVUFSVC4KKyAqCisgKiBJdCdkIGJlIG5pY2UgaWYgc29tZW9uZSBidWlsdCBhIHNlcmlhbCBjYXJkIHdpdGggYSAyNC41NzYgTUh6CisgKiBjbG9jaywgc2luY2UgdGhlIDE2NTUwQSBpcyBjYXBhYmxlIG9mIGhhbmRsaW5nIGEgdG9wIHNwZWVkIG9mIDEuNQorICogbWVnYWJpdHMvc2Vjb25kOyBidXQgdGhpcyByZXF1aXJlcyB0aGUgZmFzdGVyIGNsb2NrLgorICovCisjZGVmaW5lIEJBU0VfQkFVRCAoIDE4NDMyMDAgLyAxNiApCisKKy8qCisgKiBBbGwgbGVnYWN5IHNlcmlhbCBwb3J0cyBzaG91bGQgYmUgZW51bWVyYXRlZCB2aWEgQUNQSSBuYW1lc3BhY2UsIHNvCisgKiB3ZSBuZWVkIG5vdCBsaXN0IHRoZW0gaGVyZS4KKyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9zZXR1cC5oIGIvaW5jbHVkZS9hc20taWE2NC9zZXR1cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhMjliNTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3NldHVwLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fSUE2NF9TRVRVUF9ICisjZGVmaW5lIF9fSUE2NF9TRVRVUF9ICisKKyNkZWZpbmUgQ09NTUFORF9MSU5FX1NJWkUJNTEyCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9zaG1idWYuaCBiL2luY2x1ZGUvYXNtLWlhNjQvc2htYnVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg1MDAyYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvc2htYnVmLmgKQEAgLTAsMCArMSwzOCBAQAorI2lmbmRlZiBfQVNNX0lBNjRfU0hNQlVGX0gKKyNkZWZpbmUgX0FTTV9JQTY0X1NITUJVRl9ICisKKy8qCisgKiBUaGUgc2htaWQ2NF9kcyBzdHJ1Y3R1cmUgZm9yIElBLTY0IGFyY2hpdGVjdHVyZS4KKyAqIE5vdGUgZXh0cmEgcGFkZGluZyBiZWNhdXNlIHRoaXMgc3RydWN0dXJlIGlzIHBhc3NlZCBiYWNrIGFuZCBmb3J0aAorICogYmV0d2VlbiBrZXJuZWwgYW5kIHVzZXIgc3BhY2UuCisgKgorICogUGFkIHNwYWNlIGlzIGxlZnQgZm9yOgorICogLSAyIG1pc2NlbGxhbmVvdXMgNjQtYml0IHZhbHVlcworICovCisKK3N0cnVjdCBzaG1pZDY0X2RzIHsKKwlzdHJ1Y3QgaXBjNjRfcGVybQlzaG1fcGVybTsJLyogb3BlcmF0aW9uIHBlcm1zICovCisJc2l6ZV90CQkJc2htX3NlZ3N6OwkvKiBzaXplIG9mIHNlZ21lbnQgKGJ5dGVzKSAqLworCV9fa2VybmVsX3RpbWVfdAkJc2htX2F0aW1lOwkvKiBsYXN0IGF0dGFjaCB0aW1lICovCisJX19rZXJuZWxfdGltZV90CQlzaG1fZHRpbWU7CS8qIGxhc3QgZGV0YWNoIHRpbWUgKi8KKwlfX2tlcm5lbF90aW1lX3QJCXNobV9jdGltZTsJLyogbGFzdCBjaGFuZ2UgdGltZSAqLworCV9fa2VybmVsX3BpZF90CQlzaG1fY3BpZDsJLyogcGlkIG9mIGNyZWF0b3IgKi8KKwlfX2tlcm5lbF9waWRfdAkJc2htX2xwaWQ7CS8qIHBpZCBvZiBsYXN0IG9wZXJhdG9yICovCisJdW5zaWduZWQgbG9uZwkJc2htX25hdHRjaDsJLyogbm8uIG9mIGN1cnJlbnQgYXR0YWNoZXMgKi8KKwl1bnNpZ25lZCBsb25nCQlfX3VudXNlZDE7CisJdW5zaWduZWQgbG9uZwkJX191bnVzZWQyOworfTsKKworc3RydWN0IHNobWluZm82NCB7CisJdW5zaWduZWQgbG9uZwlzaG1tYXg7CisJdW5zaWduZWQgbG9uZwlzaG1taW47CisJdW5zaWduZWQgbG9uZwlzaG1tbmk7CisJdW5zaWduZWQgbG9uZwlzaG1zZWc7CisJdW5zaWduZWQgbG9uZwlzaG1hbGw7CisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDE7CisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDI7CisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDM7CisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDQ7Cit9OworCisjZW5kaWYgLyogX0FTTV9JQTY0X1NITUJVRl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3NobXBhcmFtLmggYi9pbmNsdWRlL2FzbS1pYTY0L3NobXBhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA3NTA4ZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvc2htcGFyYW0uaApAQCAtMCwwICsxLDEyIEBACisjaWZuZGVmIF9BU01fSUE2NF9TSE1QQVJBTV9ICisjZGVmaW5lIF9BU01fSUE2NF9TSE1QQVJBTV9ICisKKy8qCisgKiBTSE1MQkEgY29udHJvbHMgbWluaW11bSBhbGlnbm1lbnQgYXQgd2hpY2ggc2hhcmVkIG1lbW9yeSBzZWdtZW50cworICogZ2V0IGF0dGFjaGVkLiAgVGhlIElBLTY0IGFyY2hpdGVjdHVyZSBzYXlzIHRoYXQgdGhlcmUgbWF5IGJlIGEKKyAqIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uIHdoZW4gdGhlcmUgYXJlIHZpcnR1YWwgYWxpYXNlcyB3aXRoaW4gMU1CLgorICogVG8gcmVkdWNlIHRoZSBjaGFuY2Ugb2YgdGhpcywgd2Ugc2V0IFNITUxCQSB0byAxTUIuIC0tZGF2aWRtIDAwLzEyLzIwCisgKi8KKyNkZWZpbmUJU0hNTEJBCSgxMDI0KjEwMjQpCisKKyNlbmRpZiAvKiBfQVNNX0lBNjRfU0hNUEFSQU1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9zaWdjb250ZXh0LmggYi9pbmNsdWRlL2FzbS1pYTY0L3NpZ2NvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2ZmNzc3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taWE2NC9zaWdjb250ZXh0LmgKQEAgLTAsMCArMSw3MCBAQAorI2lmbmRlZiBfQVNNX0lBNjRfU0lHQ09OVEVYVF9ICisjZGVmaW5lIF9BU01fSUE2NF9TSUdDT05URVhUX0gKKworLyoKKyAqIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSwgMjAwMSBIZXdsZXR0LVBhY2thcmQgQ28KKyAqIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSwgMjAwMSBEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+CisgKi8KKworI2luY2x1ZGUgPGFzbS9mcHUuaD4KKworI2RlZmluZSBJQTY0X1NDX0ZMQUdfT05TVEFDS19CSVQJCTAJLyogaXMgaGFuZGxlciBydW5uaW5nIG9uIHNpZ25hbCBzdGFjaz8gKi8KKyNkZWZpbmUgSUE2NF9TQ19GTEFHX0lOX1NZU0NBTExfQklUCQkxCS8qIGRpZCBzaWduYWwgaW50ZXJydXB0IGEgc3lzY2FsbD8gKi8KKyNkZWZpbmUgSUE2NF9TQ19GTEFHX0ZQSF9WQUxJRF9CSVQJCTIJLyogaXMgc3RhdGUgaW4gZlszMl0tZlsxMjddIHZhbGlkPyAqLworCisjZGVmaW5lIElBNjRfU0NfRkxBR19PTlNUQUNLCQkoMSA8PCBJQTY0X1NDX0ZMQUdfT05TVEFDS19CSVQpCisjZGVmaW5lIElBNjRfU0NfRkxBR19JTl9TWVNDQUxMCQkoMSA8PCBJQTY0X1NDX0ZMQUdfSU5fU1lTQ0FMTF9CSVQpCisjZGVmaW5lIElBNjRfU0NfRkxBR19GUEhfVkFMSUQJCSgxIDw8IElBNjRfU0NfRkxBR19GUEhfVkFMSURfQklUKQorCisjIGlmbmRlZiBfX0FTU0VNQkxZX18KKworLyoKKyAqIE5vdGUgb24gaGFuZGxpbmcgb2YgcmVnaXN0ZXIgYmFja2luZyBzdG9yZTogc2NfYXJfYnNwIGNvbnRhaW5zIHRoZSBhZGRyZXNzIHRoYXQgd291bGQKKyAqIGJlIGZvdW5kIGluIGFyLmJzcCBhZnRlciBleGVjdXRpbmcgYSAiY292ZXIiIGluc3RydWN0aW9uIHRoZSBjb250ZXh0IGluIHdoaWNoIHRoZQorICogc2lnbmFsIHdhcyByYWlzZWQuICBJZiBzaWduYWwgZGVsaXZlcnkgcmVxdWlyZWQgc3dpdGNoaW5nIHRvIGFuIGFsdGVybmF0ZSBzaWduYWwgc3RhY2sKKyAqIChzY19yYnNfYmFzZSBpcyBub3QgTlVMTCksIHRoZSAiZGlydHkiIHBhcnRpdGlvbiAoYXMgaXQgd291bGQgZXhpc3QgYWZ0ZXIgZXhlY3V0aW5nIHRoZQorICogaW1hZ2luYXJ5ICJjb3ZlciIgaW5zdHJ1Y3Rpb24pIGlzIGJhY2tlZCBieSB0aGUgKmFsdGVybmF0ZSogc2lnbmFsIHN0YWNrLCBub3QgdGhlCisgKiBvcmlnaW5hbCBvbmUuICBJbiB0aGlzIGNhc2UsIHNjX3Jic19iYXNlIGNvbnRhaW5zIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIG5ldyByZWdpc3RlcgorICogYmFja2luZyBzdG9yZS4gIFRoZSBudW1iZXIgb2YgcmVnaXN0ZXJzIGluIHRoZSBkaXJ0eSBwYXJ0aXRpb24gY2FuIGJlIGNhbGN1bGF0ZWQgYXM6CisgKgorICogICBuZGlydHkgPSBpYTY0X3JzZV9udW1fcmVncyhzY19yYnNfYmFzZSwgc2NfcmJzX2Jhc2UgKyAoc2NfbG9hZHJzID4+IDE2KSkKKyAqCisgKi8KKworc3RydWN0IHNpZ2NvbnRleHQgeworCXVuc2lnbmVkIGxvbmcJCXNjX2ZsYWdzOwkvKiBzZWUgbWFuaWZlc3QgY29uc3RhbnRzIGFib3ZlICovCisJdW5zaWduZWQgbG9uZwkJc2NfbmF0OwkJLyogYml0IGkgPT0gMSBpZmYgc2NyYXRjaCByZWcgZ3JbaV0gaXMgYSBOYVQgKi8KKwlzdGFja190CQkJc2Nfc3RhY2s7CS8qIHByZXZpb3VzbHkgYWN0aXZlIHN0YWNrICovCisKKwl1bnNpZ25lZCBsb25nCQlzY19pcDsJCS8qIGluc3RydWN0aW9uIHBvaW50ZXIgKi8KKwl1bnNpZ25lZCBsb25nCQlzY19jZm07CQkvKiBjdXJyZW50IGZyYW1lIG1hcmtlciAqLworCXVuc2lnbmVkIGxvbmcJCXNjX3VtOwkJLyogdXNlciBtYXNrIGJpdHMgKi8KKwl1bnNpZ25lZCBsb25nCQlzY19hcl9yc2M7CS8qIHJlZ2lzdGVyIHN0YWNrIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgKi8KKwl1bnNpZ25lZCBsb25nCQlzY19hcl9ic3A7CS8qIGJhY2tpbmcgc3RvcmUgcG9pbnRlciAqLworCXVuc2lnbmVkIGxvbmcJCXNjX2FyX3JuYXQ7CS8qIFJTRSBOYVQgY29sbGVjdGlvbiByZWdpc3RlciAqLworCXVuc2lnbmVkIGxvbmcJCXNjX2FyX2NjdjsJLyogY29tcGFyZSBhbmQgZXhjaGFuZ2UgY29tcGFyZSB2YWx1ZSByZWdpc3RlciAqLworCXVuc2lnbmVkIGxvbmcJCXNjX2FyX3VuYXQ7CS8qIGFyLnVuYXQgb2YgaW50ZXJydXB0ZWQgY29udGV4dCAqLworCXVuc2lnbmVkIGxvbmcJCXNjX2FyX2Zwc3I7CS8qIGZsb2F0aW5nLXBvaW50IHN0YXR1cyByZWdpc3RlciAqLworCXVuc2lnbmVkIGxvbmcJCXNjX2FyX3BmczsJLyogcHJldmlvdXMgZnVuY3Rpb24gc3RhdGUgKi8KKwl1bnNpZ25lZCBsb25nCQlzY19hcl9sYzsJLyogbG9vcCBjb3VudCByZWdpc3RlciAqLworCXVuc2lnbmVkIGxvbmcJCXNjX3ByOwkJLyogcHJlZGljYXRlIHJlZ2lzdGVycyAqLworCXVuc2lnbmVkIGxvbmcJCXNjX2JyWzhdOwkvKiBicmFuY2ggcmVnaXN0ZXJzICovCisJLyogTm90ZTogc2NfZ3JbMF0gaXMgdXNlZCBhcyB0aGUgInVjX2xpbmsiIG1lbWJlciBvZiB1Y29udGV4dF90ICovCisJdW5zaWduZWQgbG9uZwkJc2NfZ3JbMzJdOwkvKiBnZW5lcmFsIHJlZ2lzdGVycyAoc3RhdGljIHBhcnRpdGlvbikgKi8KKwlzdHJ1Y3QgaWE2NF9mcHJlZwlzY19mclsxMjhdOwkvKiBmbG9hdGluZy1wb2ludCByZWdpc3RlcnMgKi8KKworCXVuc2lnbmVkIGxvbmcJCXNjX3Jic19iYXNlOwkvKiBOVUxMIG9yIG5ldyBiYXNlIG9mIHNpZ2hhbmRsZXIncyByYnMgKi8KKwl1bnNpZ25lZCBsb25nCQlzY19sb2FkcnM7CS8qIHNlZSBkZXNjcmlwdGlvbiBhYm92ZSAqLworCisJdW5zaWduZWQgbG9uZwkJc2NfYXIyNTsJLyogY21wOHhjaGcxNiB1c2VzIHRoaXMgKi8KKwl1bnNpZ25lZCBsb25nCQlzY19hcjI2OwkvKiByc3ZkIGZvciBzY3JhdGNoIHVzZSAqLworCXVuc2lnbmVkIGxvbmcJCXNjX3JzdmRbMTJdOwkvKiByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqLworCS8qCisJICogVGhlIG1hc2sgbXVzdCBjb21lIGxhc3Qgc28gd2UgY2FuIGluY3JlYXNlIF9OU0lHX1dPUkRTCisJICogd2l0aG91dCBicmVha2luZyBiaW5hcnkgY29tcGF0aWJpbGl0eS4KKwkgKi8KKwlzaWdzZXRfdAkJc2NfbWFzazsJLyogc2lnbmFsIG1hc2sgdG8gcmVzdG9yZSBhZnRlciBoYW5kbGVyIHJldHVybnMgKi8KK307CisKKyMgZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisjZW5kaWYgLyogX0FTTV9JQTY0X1NJR0NPTlRFWFRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9zaWdpbmZvLmggYi9pbmNsdWRlL2FzbS1pYTY0L3NpZ2luZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTVmMTM5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taWE2NC9zaWdpbmZvLmgKQEAgLTAsMCArMSwxNDEgQEAKKyNpZm5kZWYgX0FTTV9JQTY0X1NJR0lORk9fSAorI2RlZmluZSBfQVNNX0lBNjRfU0lHSU5GT19ICisKKy8qCisgKiBCYXNlZCBvbiA8YXNtLWkzODYvc2lnaW5mby5oPi4KKyAqCisgKiBNb2RpZmllZCAxOTk4LTIwMDIKKyAqCURhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4sIEhld2xldHQtUGFja2FyZCBDbworICovCisKKyNkZWZpbmUgU0lfUEFEX1NJWkUJKChTSV9NQVhfU0laRS9zaXplb2YoaW50KSkgLSA0KQorCisjZGVmaW5lIFNJR0VWX1BBRF9TSVpFCSgoU0lHRVZfTUFYX1NJWkUvc2l6ZW9mKGludCkpIC0gNCkKKworI2RlZmluZSBIQVZFX0FSQ0hfU0lHSU5GT19UCisjZGVmaW5lIEhBVkVfQVJDSF9DT1BZX1NJR0lORk8KKyNkZWZpbmUgSEFWRV9BUkNIX0NPUFlfU0lHSU5GT19UT19VU0VSCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zaWdpbmZvLmg+CisKK3R5cGVkZWYgc3RydWN0IHNpZ2luZm8geworCWludCBzaV9zaWdubzsKKwlpbnQgc2lfZXJybm87CisJaW50IHNpX2NvZGU7CisJaW50IF9fcGFkMDsKKworCXVuaW9uIHsKKwkJaW50IF9wYWRbU0lfUEFEX1NJWkVdOworCisJCS8qIGtpbGwoKSAqLworCQlzdHJ1Y3QgeworCQkJcGlkX3QgX3BpZDsJCS8qIHNlbmRlcidzIHBpZCAqLworCQkJdWlkX3QgX3VpZDsJCS8qIHNlbmRlcidzIHVpZCAqLworCQl9IF9raWxsOworCisJCS8qIFBPU0lYLjFiIHRpbWVycyAqLworCQlzdHJ1Y3QgeworCQkJdGltZXJfdCBfdGlkOwkJLyogdGltZXIgaWQgKi8KKwkJCWludCBfb3ZlcnJ1bjsJCS8qIG92ZXJydW4gY291bnQgKi8KKwkJCWNoYXIgX3BhZFtzaXplb2YoX19BUkNIX1NJX1VJRF9UKSAtIHNpemVvZihpbnQpXTsKKwkJCXNpZ3ZhbF90IF9zaWd2YWw7CS8qIG11c3Qgb3ZlcmxheSAuX3J0Ll9zaWd2YWwhICovCisJCQlpbnQgX3N5c19wcml2YXRlOwkvKiBub3QgdG8gYmUgcGFzc2VkIHRvIHVzZXIgKi8KKwkJfSBfdGltZXI7CisKKwkJLyogUE9TSVguMWIgc2lnbmFscyAqLworCQlzdHJ1Y3QgeworCQkJcGlkX3QgX3BpZDsJCS8qIHNlbmRlcidzIHBpZCAqLworCQkJdWlkX3QgX3VpZDsJCS8qIHNlbmRlcidzIHVpZCAqLworCQkJc2lndmFsX3QgX3NpZ3ZhbDsKKwkJfSBfcnQ7CisKKwkJLyogU0lHQ0hMRCAqLworCQlzdHJ1Y3QgeworCQkJcGlkX3QgX3BpZDsJCS8qIHdoaWNoIGNoaWxkICovCisJCQl1aWRfdCBfdWlkOwkJLyogc2VuZGVyJ3MgdWlkICovCisJCQlpbnQgX3N0YXR1czsJCS8qIGV4aXQgY29kZSAqLworCQkJY2xvY2tfdCBfdXRpbWU7CisJCQljbG9ja190IF9zdGltZTsKKwkJfSBfc2lnY2hsZDsKKworCQkvKiBTSUdJTEwsIFNJR0ZQRSwgU0lHU0VHViwgU0lHQlVTICovCisJCXN0cnVjdCB7CisJCQl2b2lkIF9fdXNlciAqX2FkZHI7CS8qIGZhdWx0aW5nIGluc24vbWVtb3J5IHJlZi4gKi8KKwkJCWludCBfaW1tOwkJLyogaW1tZWRpYXRlIHZhbHVlIGZvciAiYnJlYWsiICovCisJCQl1bnNpZ25lZCBpbnQgX2ZsYWdzOwkvKiBzZWUgYmVsb3cgKi8KKwkJCXVuc2lnbmVkIGxvbmcgX2lzcjsJLyogaXNyICovCisJCX0gX3NpZ2ZhdWx0OworCisJCS8qIFNJR1BPTEwgKi8KKwkJc3RydWN0IHsKKwkJCWxvbmcgX2JhbmQ7CS8qIFBPTExfSU4sIFBPTExfT1VULCBQT0xMX01TRyAoWFBHIHJlcXVpcmVzIGEgImxvbmciKSAqLworCQkJaW50IF9mZDsKKwkJfSBfc2lncG9sbDsKKwl9IF9zaWZpZWxkczsKK30gc2lnaW5mb190OworCisjZGVmaW5lIHNpX2ltbQkJX3NpZmllbGRzLl9zaWdmYXVsdC5faW1tCS8qIGFzIHBlciBVTklYIFN5c1YgQUJJIHNwZWMgKi8KKyNkZWZpbmUgc2lfZmxhZ3MJX3NpZmllbGRzLl9zaWdmYXVsdC5fZmxhZ3MKKy8qCisgKiBzaV9pc3IgaXMgdmFsaWQgZm9yIFNJR0lMTCwgU0lHRlBFLCBTSUdTRUdWLCBTSUdCVVMsIGFuZCBTSUdUUkFQIHByb3ZpZGVkIHRoYXQKKyAqIHNpX2NvZGUgaXMgbm9uLXplcm8gYW5kIF9fSVNSX1ZBTElEIGlzIHNldCBpbiBzaV9mbGFncy4KKyAqLworI2RlZmluZSBzaV9pc3IJCV9zaWZpZWxkcy5fc2lnZmF1bHQuX2lzcgorCisvKgorICogRmxhZyB2YWx1ZXMgZm9yIHNpX2ZsYWdzOgorICovCisjZGVmaW5lIF9fSVNSX1ZBTElEX0JJVAkwCisjZGVmaW5lIF9fSVNSX1ZBTElECSgxIDw8IF9fSVNSX1ZBTElEX0JJVCkKKworLyoKKyAqIFNJR0lMTCBzaV9jb2RlcworICovCisjZGVmaW5lIElMTF9CQURJQUREUgkoX19TSV9GQVVMVHw5KQkvKiB1bmltcGxlbWVudGVkIGluc3RydWN0aW9uIGFkZHJlc3MgKi8KKyNkZWZpbmUgX19JTExfQlJFQUsJKF9fU0lfRkFVTFR8MTApCS8qIGlsbGVnYWwgYnJlYWsgKi8KKyNkZWZpbmUgX19JTExfQk5ETU9ECShfX1NJX0ZBVUxUfDExKQkvKiBidW5kbGUtdXBkYXRlIChtb2RpZmljYXRpb24pIGluIHByb2dyZXNzICovCisjdW5kZWYgTlNJR0lMTAorI2RlZmluZSBOU0lHSUxMCQkxMQorCisvKgorICogU0lHRlBFIHNpX2NvZGVzCisgKi8KKyNkZWZpbmUgX19GUEVfREVDT1ZGCShfX1NJX0ZBVUxUfDkpCS8qIGRlY2ltYWwgb3ZlcmZsb3cgKi8KKyNkZWZpbmUgX19GUEVfREVDRElWCShfX1NJX0ZBVUxUfDEwKQkvKiBkZWNpbWFsIGRpdmlzaW9uIGJ5IHplcm8gKi8KKyNkZWZpbmUgX19GUEVfREVDRVJSCShfX1NJX0ZBVUxUfDExKQkvKiBwYWNrZWQgZGVjaW1hbCBlcnJvciAqLworI2RlZmluZSBfX0ZQRV9JTlZBU0MJKF9fU0lfRkFVTFR8MTIpCS8qIGludmFsaWQgQVNDSUkgZGlnaXQgKi8KKyNkZWZpbmUgX19GUEVfSU5WREVDCShfX1NJX0ZBVUxUfDEzKQkvKiBpbnZhbGlkIGRlY2ltYWwgZGlnaXQgKi8KKyN1bmRlZiBOU0lHRlBFCisjZGVmaW5lIE5TSUdGUEUJCTEzCisKKy8qCisgKiBTSUdTRUdWIHNpX2NvZGVzCisgKi8KKyNkZWZpbmUgX19TRUdWX1BTVEtPVkYJKF9fU0lfRkFVTFR8MykJLyogcGFyYWdyYXBoIHN0YWNrIG92ZXJmbG93ICovCisjdW5kZWYgTlNJR1NFR1YKKyNkZWZpbmUgTlNJR1NFR1YJMworCisvKgorICogU0lHVFJBUCBzaV9jb2RlcworICovCisjZGVmaW5lIFRSQVBfQlJBTkNICShfX1NJX0ZBVUxUfDMpCS8qIHByb2Nlc3MgdGFrZW4gYnJhbmNoIHRyYXAgKi8KKyNkZWZpbmUgVFJBUF9IV0JLUFQJKF9fU0lfRkFVTFR8NCkJLyogaGFyZHdhcmUgYnJlYWtwb2ludCBvciB3YXRjaHBvaW50ICovCisjdW5kZWYgTlNJR1RSQVAKKyNkZWZpbmUgTlNJR1RSQVAJNAorCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorCitzdGF0aWMgaW5saW5lIHZvaWQKK2NvcHlfc2lnaW5mbyAoc2lnaW5mb190ICp0bywgc2lnaW5mb190ICpmcm9tKQoreworCWlmIChmcm9tLT5zaV9jb2RlIDwgMCkKKwkJbWVtY3B5KHRvLCBmcm9tLCBzaXplb2Yoc2lnaW5mb190KSk7CisJZWxzZQorCQkvKiBfc2lnY2hsZCBpcyBjdXJyZW50bHkgdGhlIGxhcmdlc3Qga25vdyB1bmlvbiBtZW1iZXIgKi8KKwkJbWVtY3B5KHRvLCBmcm9tLCA0KnNpemVvZihpbnQpICsgc2l6ZW9mKGZyb20tPl9zaWZpZWxkcy5fc2lnY2hsZCkpOworfQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX0FTTV9JQTY0X1NJR0lORk9fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9zaWduYWwuaCBiL2luY2x1ZGUvYXNtLWlhNjQvc2lnbmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjYwYTc1OQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvc2lnbmFsLmgKQEAgLTAsMCArMSwxODUgQEAKKyNpZm5kZWYgX0FTTV9JQTY0X1NJR05BTF9ICisjZGVmaW5lIF9BU01fSUE2NF9TSUdOQUxfSAorCisvKgorICogTW9kaWZpZWQgMTk5OC0yMDAxLCAyMDAzCisgKglEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+LCBIZXdsZXR0LVBhY2thcmQgQ28KKyAqCisgKiBVbmZvcnR1bmF0ZWx5LCB0aGlzIGZpbGUgaXMgYmVpbmcgaW5jbHVkZWQgYnkgYml0cy9zaWduYWwuaCBpbgorICogZ2xpYmMtMi54LiAgSGVuY2UgdGhlICNpZmRlZiBfX0tFUk5FTF9fIHVnbGluZXNzLgorICovCisKKyNkZWZpbmUgU0lHSFVQCQkgMQorI2RlZmluZSBTSUdJTlQJCSAyCisjZGVmaW5lIFNJR1FVSVQJCSAzCisjZGVmaW5lIFNJR0lMTAkJIDQKKyNkZWZpbmUgU0lHVFJBUAkJIDUKKyNkZWZpbmUgU0lHQUJSVAkJIDYKKyNkZWZpbmUgU0lHSU9UCQkgNgorI2RlZmluZSBTSUdCVVMJCSA3CisjZGVmaW5lIFNJR0ZQRQkJIDgKKyNkZWZpbmUgU0lHS0lMTAkJIDkKKyNkZWZpbmUgU0lHVVNSMQkJMTAKKyNkZWZpbmUgU0lHU0VHVgkJMTEKKyNkZWZpbmUgU0lHVVNSMgkJMTIKKyNkZWZpbmUgU0lHUElQRQkJMTMKKyNkZWZpbmUgU0lHQUxSTQkJMTQKKyNkZWZpbmUgU0lHVEVSTQkJMTUKKyNkZWZpbmUgU0lHU1RLRkxUCTE2CisjZGVmaW5lIFNJR0NITEQJCTE3CisjZGVmaW5lIFNJR0NPTlQJCTE4CisjZGVmaW5lIFNJR1NUT1AJCTE5CisjZGVmaW5lIFNJR1RTVFAJCTIwCisjZGVmaW5lIFNJR1RUSU4JCTIxCisjZGVmaW5lIFNJR1RUT1UJCTIyCisjZGVmaW5lIFNJR1VSRwkJMjMKKyNkZWZpbmUgU0lHWENQVQkJMjQKKyNkZWZpbmUgU0lHWEZTWgkJMjUKKyNkZWZpbmUgU0lHVlRBTFJNCTI2CisjZGVmaW5lIFNJR1BST0YJCTI3CisjZGVmaW5lIFNJR1dJTkNICTI4CisjZGVmaW5lIFNJR0lPCQkyOQorI2RlZmluZSBTSUdQT0xMCQlTSUdJTworLyoKKyNkZWZpbmUgU0lHTE9TVAkJMjkKKyovCisjZGVmaW5lIFNJR1BXUgkJMzAKKyNkZWZpbmUgU0lHU1lTCQkzMQorLyogc2lnbmFsIDMxIGlzIG5vIGxvbmdlciAidW51c2VkIiwgYnV0IHRoZSBTSUdVTlVTRUQgbWFjcm8gcmVtYWlucyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgKi8KKyNkZWZpbmUJU0lHVU5VU0VECTMxCisKKy8qIFRoZXNlIHNob3VsZCBub3QgYmUgY29uc2lkZXJlZCBjb25zdGFudHMgZnJvbSB1c2VybGFuZC4gICovCisjZGVmaW5lIFNJR1JUTUlOCTMyCisjZGVmaW5lIFNJR1JUTUFYCV9OU0lHCisKKy8qCisgKiBTQV9GTEFHUyB2YWx1ZXM6CisgKgorICogU0FfT05TVEFDSyBpbmRpY2F0ZXMgdGhhdCBhIHJlZ2lzdGVyZWQgc3RhY2tfdCB3aWxsIGJlIHVzZWQuCisgKiBTQV9JTlRFUlJVUFQgaXMgYSBuby1vcCwgYnV0IGxlZnQgZHVlIHRvIGhpc3RvcmljYWwgcmVhc29ucy4KKyAqIFNBX1JFU1RBUlQgZmxhZyB0byBnZXQgcmVzdGFydGluZyBzaWduYWxzICh3aGljaCB3ZXJlIHRoZSBkZWZhdWx0IGxvbmcgYWdvKQorICogU0FfTk9DTERTVE9QIGZsYWcgdG8gdHVybiBvZmYgU0lHQ0hMRCB3aGVuIGNoaWxkcmVuIHN0b3AuCisgKiBTQV9SRVNFVEhBTkQgY2xlYXJzIHRoZSBoYW5kbGVyIHdoZW4gdGhlIHNpZ25hbCBpcyBkZWxpdmVyZWQuCisgKiBTQV9OT0NMRFdBSVQgZmxhZyBvbiBTSUdDSExEIHRvIGluaGliaXQgem9tYmllcy4KKyAqIFNBX05PREVGRVIgcHJldmVudHMgdGhlIGN1cnJlbnQgc2lnbmFsIGZyb20gYmVpbmcgbWFza2VkIGluIHRoZSBoYW5kbGVyLgorICoKKyAqIFNBX09ORVNIT1QgYW5kIFNBX05PTUFTSyBhcmUgdGhlIGhpc3RvcmljYWwgTGludXggbmFtZXMgZm9yIHRoZSBTaW5nbGUKKyAqIFVuaXggbmFtZXMgUkVTRVRIQU5EIGFuZCBOT0RFRkVSIHJlc3BlY3RpdmVseS4KKyAqLworI2RlZmluZSBTQV9OT0NMRFNUT1AJMHgwMDAwMDAwMQorI2RlZmluZSBTQV9OT0NMRFdBSVQJMHgwMDAwMDAwMgorI2RlZmluZSBTQV9TSUdJTkZPCTB4MDAwMDAwMDQKKyNkZWZpbmUgU0FfT05TVEFDSwkweDA4MDAwMDAwCisjZGVmaW5lIFNBX1JFU1RBUlQJMHgxMDAwMDAwMAorI2RlZmluZSBTQV9OT0RFRkVSCTB4NDAwMDAwMDAKKyNkZWZpbmUgU0FfUkVTRVRIQU5ECTB4ODAwMDAwMDAKKworI2RlZmluZSBTQV9OT01BU0sJU0FfTk9ERUZFUgorI2RlZmluZSBTQV9PTkVTSE9UCVNBX1JFU0VUSEFORAorI2RlZmluZSBTQV9JTlRFUlJVUFQJMHgyMDAwMDAwMCAvKiBkdW1teSAtLSBpZ25vcmVkICovCisKKyNkZWZpbmUgU0FfUkVTVE9SRVIJMHgwNDAwMDAwMAorCisvKgorICogc2lnYWx0c3RhY2sgY29udHJvbHMKKyAqLworI2RlZmluZSBTU19PTlNUQUNLCTEKKyNkZWZpbmUgU1NfRElTQUJMRQkyCisKKy8qCisgKiBUaGUgbWluaW11bSBzdGFjayBzaXplIG5lZWRzIHRvIGJlIGZhaXJseSBsYXJnZSBiZWNhdXNlIHdlIHdhbnQgdG8KKyAqIGJlIHN1cmUgdGhhdCBhbiBhcHAgY29tcGlsZWQgZm9yIHRvZGF5J3MgQ1BVcyB3aWxsIGNvbnRpbnVlIHRvIHJ1bgorICogb24gYWxsIGZ1dHVyZSBDUFUgbW9kZWxzLiAgVGhlIENQVSBtb2RlbCBtYXR0ZXJzIGJlY2F1c2UgdGhlIHNpZ25hbAorICogZnJhbWUgbmVlZHMgdG8gaGF2ZSBzcGFjZSBmb3IgdGhlIGNvbXBsZXRlIG1hY2hpbmUgc3RhdGUsIGluY2x1ZGluZworICogYWxsIHBoeXNpY2FsIHN0YWNrZWQgcmVnaXN0ZXJzLiAgVGhlIG51bWJlciBvZiBwaHlzaWNhbCBzdGFja2VkCisgKiByZWdpc3RlcnMgaXMgQ1BVIG1vZGVsIGRlcGVuZGVudCwgYnV0IGdpdmVuIHRoYXQgdGhlIHdpZHRoIG9mCisgKiBhci5yc2MubG9hZHJzIGlzIDE0IGJpdHMsIHdlIGNhbiBhc3N1bWUgdGhhdCB0aGV5J2xsIG5ldmVyIHRha2UgdXAKKyAqIG1vcmUgdGhhbiAxNktCIG9mIHNwYWNlLgorICovCisjaWYgMQorICAvKgorICAgKiBUaGlzIGlzIGEgc3R1cGlkIHR5cG86IHRoZSB2YWx1ZSB3YXMgX21lYW50XyB0byBiZSAxMzEwNzIgKDB4MjAwMDApLCBidXQgSSB0eXBlZCBpdAorICAgKiBpbiB3cm9uZy4gOy0oICBUbyBwcmVzZXJ2ZSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgd2UgbGVhdmUgdGhlIGtlcm5lbCBhdCB0aGUKKyAgICogaW5jb3JyZWN0IHZhbHVlIGFuZCBmaXggbGliYyBvbmx5LgorICAgKi8KKyMgZGVmaW5lIE1JTlNJR1NUS1NaCTEzMTAyNwkvKiBtaW4uIHN0YWNrIHNpemUgZm9yIHNpZ2FsdHN0YWNrKCkgKi8KKyNlbHNlCisjIGRlZmluZSBNSU5TSUdTVEtTWgkxMzEwNzIJLyogbWluLiBzdGFjayBzaXplIGZvciBzaWdhbHRzdGFjaygpICovCisjZW5kaWYKKyNkZWZpbmUgU0lHU1RLU1oJMjYyMTQ0CS8qIGRlZmF1bHQgc3RhY2sgc2l6ZSBmb3Igc2lnYWx0c3RhY2soKSAqLworCisjaWZkZWYgX19LRVJORUxfXworCisjZGVmaW5lIF9OU0lHCQk2NAorI2RlZmluZSBfTlNJR19CUFcJNjQKKyNkZWZpbmUgX05TSUdfV09SRFMJKF9OU0lHIC8gX05TSUdfQlBXKQorCisvKgorICogVGhlc2UgdmFsdWVzIG9mIHNhX2ZsYWdzIGFyZSB1c2VkIG9ubHkgYnkgdGhlIGtlcm5lbCBhcyBwYXJ0IG9mIHRoZQorICogaXJxIGhhbmRsaW5nIHJvdXRpbmVzLgorICoKKyAqIFNBX0lOVEVSUlVQVCBpcyBhbHNvIHVzZWQgYnkgdGhlIGlycSBoYW5kbGluZyByb3V0aW5lcy4KKyAqIFNBX1NISVJRIGlzIGZvciBzaGFyZWQgaW50ZXJydXB0IHN1cHBvcnQgb24gUENJIGFuZCBFSVNBLgorICovCisjZGVmaW5lIFNBX1BST0JFCQlTQV9PTkVTSE9UCisjZGVmaW5lIFNBX1NBTVBMRV9SQU5ET00JU0FfUkVTVEFSVAorI2RlZmluZSBTQV9TSElSUQkJMHgwNDAwMDAwMAorI2RlZmluZSBTQV9QRVJDUFVfSVJRCQkweDAyMDAwMDAwCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNkZWZpbmUgU0lHX0JMT0NLICAgICAgICAgIDAJLyogZm9yIGJsb2NraW5nIHNpZ25hbHMgKi8KKyNkZWZpbmUgU0lHX1VOQkxPQ0sgICAgICAgIDEJLyogZm9yIHVuYmxvY2tpbmcgc2lnbmFscyAqLworI2RlZmluZSBTSUdfU0VUTUFTSyAgICAgICAgMgkvKiBmb3Igc2V0dGluZyB0aGUgc2lnbmFsIG1hc2sgKi8KKworI2RlZmluZSBTSUdfREZMCSgoX19zaWdoYW5kbGVyX3QpMCkJLyogZGVmYXVsdCBzaWduYWwgaGFuZGxpbmcgKi8KKyNkZWZpbmUgU0lHX0lHTgkoKF9fc2lnaGFuZGxlcl90KTEpCS8qIGlnbm9yZSBzaWduYWwgKi8KKyNkZWZpbmUgU0lHX0VSUgkoKF9fc2lnaGFuZGxlcl90KS0xKQkvKiBlcnJvciByZXR1cm4gZnJvbSBzaWduYWwgKi8KKworIyBpZm5kZWYgX19BU1NFTUJMWV9fCisKKyMgIGluY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qIEF2b2lkIHRvbyBtYW55IGhlYWRlciBvcmRlcmluZyBwcm9ibGVtcy4gICovCitzdHJ1Y3Qgc2lnaW5mbzsKKworLyogVHlwZSBvZiBhIHNpZ25hbCBoYW5kbGVyLiAgKi8KK3R5cGVkZWYgdm9pZCBfX3VzZXIgKCpfX3NpZ2hhbmRsZXJfdCkoaW50KTsKKwordHlwZWRlZiBzdHJ1Y3Qgc2lnYWx0c3RhY2sgeworCXZvaWQgX191c2VyICpzc19zcDsKKwlpbnQgc3NfZmxhZ3M7CisJc2l6ZV90IHNzX3NpemU7Cit9IHN0YWNrX3Q7CisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKy8qIE1vc3QgdGhpbmdzIHNob3VsZCBiZSBjbGVhbiBlbm91Z2ggdG8gcmVkZWZpbmUgdGhpcyBhdCB3aWxsLCBpZiBjYXJlCisgICBpcyB0YWtlbiB0byBtYWtlIGxpYmMgbWF0Y2guICAqLworCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgb2xkX3NpZ3NldF90OworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgbG9uZyBzaWdbX05TSUdfV09SRFNdOworfSBzaWdzZXRfdDsKKworc3RydWN0IHNpZ2FjdGlvbiB7CisJX19zaWdoYW5kbGVyX3Qgc2FfaGFuZGxlcjsKKwl1bnNpZ25lZCBsb25nIHNhX2ZsYWdzOworCXNpZ3NldF90IHNhX21hc2s7CQkvKiBtYXNrIGxhc3QgZm9yIGV4dGVuc2liaWxpdHkgKi8KK307CisKK3N0cnVjdCBrX3NpZ2FjdGlvbiB7CisJc3RydWN0IHNpZ2FjdGlvbiBzYTsKK307CisKKyMgIGluY2x1ZGUgPGFzbS9zaWdjb250ZXh0Lmg+CisKKyNkZWZpbmUgcHRyYWNlX3NpZ25hbF9kZWxpdmVyKHJlZ3MsIGNvb2tpZSkgZG8geyB9IHdoaWxlICgwKQorCit2b2lkIHNldF9zaWdkZWxheWVkKHBpZF90IHBpZCwgaW50IHNpZ25vLCBpbnQgY29kZSwgdm9pZCBfX3VzZXIgKmFkZHIpOworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjIGVuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKyNlbmRpZiAvKiBfQVNNX0lBNjRfU0lHTkFMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvc21wLmggYi9pbmNsdWRlL2FzbS1pYTY0L3NtcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0YTIyN2EKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3NtcC5oCkBAIC0wLDAgKzEsMTM0IEBACisvKgorICogU01QIFN1cHBvcnQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgVkEgTGludXggU3lzdGVtcworICogQ29weXJpZ2h0IChDKSAxOTk5IFdhbHQgRHJ1bW1vbmQgPGRydW1tb25kQHZhbGludXguY29tPgorICogKGMpIENvcHlyaWdodCAyMDAxLTIwMDMsIDIwMDUgSGV3bGV0dC1QYWNrYXJkIERldmVsb3BtZW50IENvbXBhbnksIEwuUC4KKyAqCURhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4KKyAqCUJqb3JuIEhlbGdhYXMgPGJqb3JuLmhlbGdhYXNAaHAuY29tPgorICovCisjaWZuZGVmIF9BU01fSUE2NF9TTVBfSAorI2RlZmluZSBfQVNNX0lBNjRfU01QX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgorCisjaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9wYXJhbS5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CitpYTY0X2dldF9saWQgKHZvaWQpCit7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJdW5zaWduZWQgbG9uZyByZXNlcnZlZCA6IDE2OworCQkJdW5zaWduZWQgbG9uZyBlaWQgOiA4OworCQkJdW5zaWduZWQgbG9uZyBpZCA6IDg7CisJCQl1bnNpZ25lZCBsb25nIGlnbm9yZWQgOiAzMjsKKwkJfSBmOworCQl1bnNpZ25lZCBsb25nIGJpdHM7CisJfSBsaWQ7CisKKwlsaWQuYml0cyA9IGlhNjRfZ2V0cmVnKF9JQTY0X1JFR19DUl9MSUQpOworCXJldHVybiBsaWQuZi5pZCA8PCA4IHwgbGlkLmYuZWlkOworfQorCisjaWZkZWYgQ09ORklHX1NNUAorCisjZGVmaW5lIFhUUF9PRkZTRVQJCTB4MWUwMDA4CisKKyNkZWZpbmUgU01QX0lSUV9SRURJUkVDVElPTgkoMSA8PCAwKQorI2RlZmluZSBTTVBfSVBJX1JFRElSRUNUSU9OCSgxIDw8IDEpCisKKyNkZWZpbmUgc21wX3Byb2Nlc3Nvcl9pZCgpCShjdXJyZW50X3RocmVhZF9pbmZvKCktPmNwdSkKKworZXh0ZXJuIHN0cnVjdCBzbXBfYm9vdF9kYXRhIHsKKwlpbnQgY3B1X2NvdW50OworCWludCBjcHVfcGh5c19pZFtOUl9DUFVTXTsKK30gc21wX2Jvb3RfZGF0YSBfX2luaXRkYXRhOworCitleHRlcm4gY2hhciBub19pbnRfcm91dGluZyBfX2RldmluaXRkYXRhOworCitleHRlcm4gY3B1bWFza190IGNwdV9vbmxpbmVfbWFwOworZXh0ZXJuIHZvaWQgX19pb21lbSAqaXBpX2Jhc2VfYWRkcjsKK2V4dGVybiB1bnNpZ25lZCBjaGFyIHNtcF9pbnRfcmVkaXJlY3Q7CisKK2V4dGVybiB2b2xhdGlsZSBpbnQgaWE2NF9jcHVfdG9fc2FwaWNpZFtdOworI2RlZmluZSBjcHVfcGh5c2ljYWxfaWQoaSkJaWE2NF9jcHVfdG9fc2FwaWNpZFtpXQorCitleHRlcm4gdW5zaWduZWQgbG9uZyBhcF93YWtldXBfdmVjdG9yOworCisvKgorICogRnVuY3Rpb24gdG8gbWFwIGhhcmQgc21wIHByb2Nlc3NvciBpZCB0byBsb2dpY2FsIGlkLiAgU2xvdywgc28gZG9uJ3QgdXNlIHRoaXMgaW4KKyAqIHBlcmZvcm1hbmNlLWNyaXRpY2FsIGNvZGUuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitjcHVfbG9naWNhbF9pZCAoaW50IGNwdWlkKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IE5SX0NQVVM7ICsraSkKKwkJaWYgKGNwdV9waHlzaWNhbF9pZChpKSA9PSBjcHVpZCkKKwkJCWJyZWFrOworCXJldHVybiBpOworfQorCisvKgorICogWFRQIGNvbnRyb2wgZnVuY3Rpb25zOgorICoJbWluX3h0cCAgIDogcm91dGUgYWxsIGludGVycnVwdHMgdG8gdGhpcyBDUFUKKyAqCW5vcm1hbF94dHA6IG5vbWluYWwgWFRQIHZhbHVlCisgKgltYXhfeHRwICAgOiBuZXZlciBkZWxpdmVyIGludGVycnVwdHMgdG8gdGhpcyBDUFUuCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkCittaW5feHRwICh2b2lkKQoreworCWlmIChzbXBfaW50X3JlZGlyZWN0ICYgU01QX0lSUV9SRURJUkVDVElPTikKKwkJd3JpdGViKDB4MDAsIGlwaV9iYXNlX2FkZHIgKyBYVFBfT0ZGU0VUKTsgLyogWFRQIHRvIG1pbiAqLworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK25vcm1hbF94dHAgKHZvaWQpCit7CisJaWYgKHNtcF9pbnRfcmVkaXJlY3QgJiBTTVBfSVJRX1JFRElSRUNUSU9OKQorCQl3cml0ZWIoMHgwOCwgaXBpX2Jhc2VfYWRkciArIFhUUF9PRkZTRVQpOyAvKiBYVFAgbm9ybWFsICovCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorbWF4X3h0cCAodm9pZCkKK3sKKwlpZiAoc21wX2ludF9yZWRpcmVjdCAmIFNNUF9JUlFfUkVESVJFQ1RJT04pCisJCXdyaXRlYigweDBmLCBpcGlfYmFzZV9hZGRyICsgWFRQX09GRlNFVCk7IC8qIFNldCBYVFAgdG8gbWF4ICovCit9CisKKyNkZWZpbmUgaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCkJCWlhNjRfZ2V0X2xpZCgpCisKKy8qIFVwcGluZyBhbmQgZG93bmluZyBvZiBDUFVzICovCitleHRlcm4gaW50IF9fY3B1X2Rpc2FibGUgKHZvaWQpOworZXh0ZXJuIHZvaWQgX19jcHVfZGllICh1bnNpZ25lZCBpbnQgY3B1KTsKK2V4dGVybiB2b2lkIGNwdV9kaWUgKHZvaWQpIF9fYXR0cmlidXRlX18gKChub3JldHVybikpOworZXh0ZXJuIGludCBfX2NwdV91cCAodW5zaWduZWQgaW50IGNwdSk7CitleHRlcm4gdm9pZCBfX2luaXQgc21wX2J1aWxkX2NwdV9tYXAodm9pZCk7CisKK2V4dGVybiB2b2lkIF9faW5pdCBpbml0X3NtcF9jb25maWcgKHZvaWQpOworZXh0ZXJuIHZvaWQgc21wX2RvX3RpbWVyIChzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKK2V4dGVybiBpbnQgc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlIChpbnQgY3B1aWQsIHZvaWQgKCpmdW5jKSAodm9pZCAqaW5mbyksIHZvaWQgKmluZm8sCisJCQkJICAgICBpbnQgcmV0cnksIGludCB3YWl0KTsKK2V4dGVybiB2b2lkIHNtcF9zZW5kX3Jlc2NoZWR1bGUgKGludCBjcHUpOworZXh0ZXJuIHZvaWQgbG9ja19pcGlfY2FsbGxvY2sodm9pZCk7CitleHRlcm4gdm9pZCB1bmxvY2tfaXBpX2NhbGxsb2NrKHZvaWQpOworCisjZWxzZQorCisjZGVmaW5lIGNwdV9sb2dpY2FsX2lkKGkpCQkwCisjZGVmaW5lIGNwdV9waHlzaWNhbF9pZChpKQkJaWE2NF9nZXRfbGlkKCkKKworI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KKyNlbmRpZiAvKiBfQVNNX0lBNjRfU01QX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvc24vYWRkcnMuaCBiL2luY2x1ZGUvYXNtLWlhNjQvc24vYWRkcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTE2YmQyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taWE2NC9zbi9hZGRycy5oCkBAIC0wLDAgKzEsMjM4IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChjKSAxOTkyLTE5OTksMjAwMS0yMDA0IFNpbGljb24gR3JhcGhpY3MsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqLworCisjaWZuZGVmIF9BU01fSUE2NF9TTl9BRERSU19ICisjZGVmaW5lIF9BU01fSUE2NF9TTl9BRERSU19ICisKKyNpbmNsdWRlIDxhc20vcGVyY3B1Lmg+CisjaW5jbHVkZSA8YXNtL3NuL3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3NuL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vc24vcGRhLmg+CisKKy8qCisgKiAgTWVtb3J5L1NIVUIgQWRkcmVzcyBGb3JtYXQ6CisgKiAgKy0rLS0tLS0tLS0tKy0tKy0tLS0tLS0tLS0tLS0tKworICogIHwwfCAgTkFTSUQgIHxBU3wgTm9kZU9mZnNldCAgIHwKKyAqICArLSstLS0tLS0tLS0rLS0rLS0tLS0tLS0tLS0tLS0rCisgKgorICogIE5BU0lEOiAobG93IE5BU0lEIGJpdCBpcyAwKSBNZW1vcnkgYW5kIFNIVUIgTU1ScworICogICBBUzogMi1iaXQgQWRkcmVzcyBTcGFjZSBJZGVudGlmaWVyLiBVc2VkIG9ubHkgaWYgbG93IE5BU0lEIGJpdCBpcyAwCisgKiAgICAgMDA6IExvY2FsIFJlc291cmNlcyBhbmQgTU1SIHNwYWNlCisgKiAgICAgICAgICAgVG9wIGJpdCBvZiBOb2RlT2Zmc2V0CisgKiAgICAgICAgICAgICAgIDA6IExvY2FsIHJlc291cmNlcyBzcGFjZQorICogICAgICAgICAgICAgICAgICBub2RlIGlkOgorICogICAgICAgICAgICAgICAgICAgICAgICAwOiBJQTY0L05UIGNvbXBhdGliaWxpdHkgc3BhY2UKKyAqICAgICAgICAgICAgICAgICAgICAgICAgMjogTG9jYWwgTU1SIFNwYWNlCisgKiAgICAgICAgICAgICAgICAgICAgICAgIDQ6IExvY2FsIG1lbW9yeSwgcmVnYXJkbGVzcyBvZiBsb2NhbCBub2RlIGlkCisgKiAgICAgICAgICAgICAgIDE6IEdsb2JhbCBNTVIgc3BhY2UKKyAqICAgICAwMTogR0VUIHNwYWNlLgorICogICAgIDEwOiBBTU8gc3BhY2UuCisgKiAgICAgMTE6IENhY2hlYWJsZSBtZW1vcnkgc3BhY2UuCisgKgorICogICBOb2RlT2Zmc2V0OiBieXRlIG9mZnNldAorICoKKyAqCisgKiAgVElPIGFkZHJlc3MgZm9ybWF0OgorICogICstKy0tLS0tLS0tLS0rLS0rLS0tLS0tLS0tLS0tLS0rCisgKiAgfDB8ICBOQVNJRCAgIHxBU3wgTm9kZW9mZnNldCAgIHwKKyAqICArLSstLS0tLS0tLS0tKy0tKy0tLS0tLS0tLS0tLS0tKworICoKKyAqICBOQVNJRDogKGxvdyBOQVNJRCBiaXQgaXMgMSkgVElPCisgKiAgIEFTOiAyLWJpdCBDaGlwbGV0IElkZW50aWZpZXIKKyAqICAgICAwMDogVElPIExCIChJbmRpY2F0ZXMgVElPIE1NUiBhY2Nlc3MuKQorICogICAgIDAxOiBUSU8gSUNFIChpbmRpY2F0ZXMgY29yZXRhbGsgc3BhY2UgYWNjZXNzLikKKyAqIAorICogICBOb2RlT2Zmc2V0OiB0b3AgYml0IG11c3QgYmUgc2V0LgorICoKKyAqCisgKiBOb3RlIHRoYXQgaW4gYm90aCBvZiB0aGUgYWJvdmUgYWRkcmVzcyBmb3JtYXRzLCB0aGUgbG93CisgKiBOQVNJRCBiaXQgaW5kaWNhdGVzIGlmIHRoZSByZWZlcmVuY2UgaXMgdG8gdGhlIFNIVUIgb3IgVElPIE1NUnMuCisgKi8KKworCisvKgorICogRGVmaW5lIGJhc2ljIHNoaWZ0ICYgbWFzayBjb25zdGFudHMgZm9yIG1hbmlwdWxhdGluZyBOQVNJRHMgYW5kIEFTIHZhbHVlcy4KKyAqLworI2RlZmluZSBOQVNJRF9CSVRNQVNLCQkoc25faHViX2luZm8tPm5hc2lkX2JpdG1hc2spCisjZGVmaW5lIE5BU0lEX1NISUZUCQkoc25faHViX2luZm8tPm5hc2lkX3NoaWZ0KQorI2RlZmluZSBBU19TSElGVAkJKHNuX2h1Yl9pbmZvLT5hc19zaGlmdCkKKyNkZWZpbmUgQVNfQklUTUFTSwkJMHgzVUwKKworI2RlZmluZSBOQVNJRF9NQVNLICAgICAgICAgICAgICAoKHU2NClOQVNJRF9CSVRNQVNLIDw8IE5BU0lEX1NISUZUKQorI2RlZmluZSBBU19NQVNLCQkJKCh1NjQpQVNfQklUTUFTSyA8PCBBU19TSElGVCkKKyNkZWZpbmUgUkVHSU9OX0JJVFMJCTB4ZTAwMDAwMDAwMDAwMDAwMFVMCisKKworLyoKKyAqIEFTIHZhbHVlcy4gVGhlc2UgYXJlIHRoZSBzYW1lIG9uIGJvdGggU0hVQjEgJiBTSFVCMi4KKyAqLworI2RlZmluZSBBU19HRVRfVkFMCQkxVUwKKyNkZWZpbmUgQVNfQU1PX1ZBTAkJMlVMCisjZGVmaW5lIEFTX0NBQ19WQUwJCTNVTAorI2RlZmluZSBBU19HRVRfU1BBQ0UJCShBU19HRVRfVkFMIDw8IEFTX1NISUZUKQorI2RlZmluZSBBU19BTU9fU1BBQ0UJCShBU19BTU9fVkFMIDw8IEFTX1NISUZUKQorI2RlZmluZSBBU19DQUNfU1BBQ0UJCShBU19DQUNfVkFMIDw8IEFTX1NISUZUKQorCisKKy8qCisgKiBCYXNlIGFkZHJlc3NlcyBmb3IgdmFyaW91cyBhZGRyZXNzIHJhbmdlcy4KKyAqLworI2RlZmluZSBDQUNIRUQJCQkweGUwMDAwMDAwMDAwMDAwMDBVTAorI2RlZmluZSBVTkNBQ0hFRCAgICAgICAgICAgICAgICAweGMwMDAwMDAwMDAwMDAwMDBVTAorI2RlZmluZSBVTkNBQ0hFRF9QSFlTICAgICAgICAgICAweDgwMDAwMDAwMDAwMDAwMDBVTAorCisKKy8qIAorICogVmlydHVhbCBNb2RlIExvY2FsICYgR2xvYmFsIE1NUiBzcGFjZS4gIAorICovCisjZGVmaW5lIFNIMV9MT0NBTF9NTVJfT0ZGU0VUCTB4ODAwMDAwMDAwMFVMCisjZGVmaW5lIFNIMl9MT0NBTF9NTVJfT0ZGU0VUCTB4MDIwMDAwMDAwMFVMCisjZGVmaW5lIExPQ0FMX01NUl9PRkZTRVQJKGlzX3NodWIyKCkgPyBTSDJfTE9DQUxfTU1SX09GRlNFVCA6IFNIMV9MT0NBTF9NTVJfT0ZGU0VUKQorI2RlZmluZSBMT0NBTF9NTVJfU1BBQ0UJCShVTkNBQ0hFRCB8IExPQ0FMX01NUl9PRkZTRVQpCisjZGVmaW5lIExPQ0FMX1BIWVNfTU1SX1NQQUNFCShVTkNBQ0hFRF9QSFlTIHwgTE9DQUxfTU1SX09GRlNFVCkKKworI2RlZmluZSBTSDFfR0xPQkFMX01NUl9PRkZTRVQJMHgwODAwMDAwMDAwVUwKKyNkZWZpbmUgU0gyX0dMT0JBTF9NTVJfT0ZGU0VUCTB4MDMwMDAwMDAwMFVMCisjZGVmaW5lIEdMT0JBTF9NTVJfT0ZGU0VUCShpc19zaHViMigpID8gU0gyX0dMT0JBTF9NTVJfT0ZGU0VUIDogU0gxX0dMT0JBTF9NTVJfT0ZGU0VUKQorI2RlZmluZSBHTE9CQUxfTU1SX1NQQUNFCShVTkNBQ0hFRCB8IEdMT0JBTF9NTVJfT0ZGU0VUKQorCisvKgorICogUGh5c2ljYWwgbW9kZSBhZGRyZXNzZXMKKyAqLworI2RlZmluZSBHTE9CQUxfUEhZU19NTVJfU1BBQ0UJKFVOQ0FDSEVEX1BIWVMgfCBHTE9CQUxfTU1SX09GRlNFVCkKKworCisvKgorICogQ2xlYXIgcmVnaW9uICYgQVMgYml0cy4KKyAqLworI2RlZmluZSBUT19QSFlTX01BU0sJCSh+KFJFR0lPTl9CSVRTIHwgQVNfTUFTSykpCisKKworLyoKKyAqIE1pc2MgTkFTSUQgbWFuaXB1bGF0aW9uLgorICovCisjZGVmaW5lIE5BU0lEX1NQQUNFKG4pCQkoKHU2NCkobikgPDwgTkFTSURfU0hJRlQpCisjZGVmaW5lIFJFTU9URV9BRERSKG4sYSkJKE5BU0lEX1NQQUNFKG4pIHwgKGEpKQorI2RlZmluZSBOT0RFX09GRlNFVCh4KQkJKCh4KSAmIChOT0RFX0FERFJTUEFDRV9TSVpFIC0gMSkpCisjZGVmaW5lIE5PREVfQUREUlNQQUNFX1NJWkUgICAgICgxVUwgPDwgQVNfU0hJRlQpCisjZGVmaW5lIE5BU0lEX0dFVCh4KQkJKGludCkgKCgodTY0KSAoeCkgPj4gTkFTSURfU0hJRlQpICYgTkFTSURfQklUTUFTSykKKyNkZWZpbmUgTE9DQUxfTU1SX0FERFIoYSkJKExPQ0FMX01NUl9TUEFDRSB8IChhKSkKKyNkZWZpbmUgR0xPQkFMX01NUl9BRERSKG4sYSkJKEdMT0JBTF9NTVJfU1BBQ0UgfCBSRU1PVEVfQUREUihuLGEpKQorI2RlZmluZSBHTE9CQUxfTU1SX1BIWVNfQUREUihuLGEpIChHTE9CQUxfUEhZU19NTVJfU1BBQ0UgfCBSRU1PVEVfQUREUihuLGEpKQorI2RlZmluZSBHTE9CQUxfQ0FDX0FERFIobixhKQkoQ0FDX0JBU0UgfCBSRU1PVEVfQUREUihuLGEpKQorI2RlZmluZSBDSEFOR0VfTkFTSUQobix4KQkoKHZvaWQgKikoKCh1NjQpKHgpICYgfk5BU0lEX01BU0spIHwgTkFTSURfU1BBQ0UobikpKQorCisKKy8qIG5vbi1JSSBtbXIncyBzdGFydCBhdCB0b3Agb2YgYmlnIHdpbmRvdyBzcGFjZSAoNEcpICovCisjZGVmaW5lIEJXSU5fVE9QCQkweDAwMDAwMDAxMDAwMDAwMDBVTAorCisvKgorICogZ2VuZXJhbCBhZGRyZXNzIGRlZmluZXMKKyAqLworI2RlZmluZSBDQUNfQkFTRQkJKENBQ0hFRCAgIHwgQVNfQ0FDX1NQQUNFKQorI2RlZmluZSBBTU9fQkFTRQkJKFVOQ0FDSEVEIHwgQVNfQU1PX1NQQUNFKQorI2RlZmluZSBHRVRfQkFTRQkJKENBQ0hFRCAgIHwgQVNfR0VUX1NQQUNFKQorCisvKgorICogQ29udmVydCBNZW1vcnkgYWRkcmVzc2VzIGJldHdlZW4gdmFyaW91cyBhZGRyZXNzaW5nIG1vZGVzLgorICovCisjZGVmaW5lIFRPX1BIWVMoeCkJCShUT19QSFlTX01BU0sgJiAoeCkpCisjZGVmaW5lIFRPX0NBQyh4KQkJKENBQ19CQVNFICAgICB8IFRPX1BIWVMoeCkpCisjZGVmaW5lIFRPX0FNTyh4KQkJKEFNT19CQVNFICAgICB8IFRPX1BIWVMoeCkpCisjZGVmaW5lIFRPX0dFVCh4KQkJKEdFVF9CQVNFICAgICB8IFRPX1BIWVMoeCkpCisKKworLyoKKyAqIENvdmVydCBmcm9tIHByb2Nlc3NvciBwaHlzaWNhbCBhZGRyZXNzIHRvIElJL1RJTyBwaHlzaWNhbCBhZGRyZXNzOgorICoJSUkgLSBzcXVlZXplIG91dCB0aGUgQVMgYml0cworICoJVElPLSByZXF1aXJlcyBhIGNoaXBsZXQgaWQgaW4gYml0cyAzOC0zOS4gIEZvciBETUEgdG8gbWVtb3J5LAorICogICAgICAgICAgIHRoZSBjaGlwbGV0IGlkIGlzIHplcm8uICBJZiB3ZSBpbXBsZW1lbnQgVElPLVRJTyBkbWEsIHdlIG1pZ2h0IG5lZWQKKyAqICAgICAgICAgICB0byBpbnNlcnQgYSBjaGlwbGV0IGlkIGludG8gdGhpcyBtYWNyby4gIEhvd2V2ZXIsIGl0IGlzIG91ciBiZWxpZWYKKyAqICAgICAgICAgICByaWdodCBub3cgdGhhdCB0aGlzIGNoaXBsZXQgaWQgd2lsbCBiZSBJQ0UsIHdoaWNoIGlzIGFsc28gemVyby4KKyAqLworI2RlZmluZSBQSFlTX1RPX1RJT0RNQSh4KQkoICgoKHU2NCkoeCkgJiBOQVNJRF9NQVNLKSA8PCAyKSB8IE5PREVfT0ZGU0VUKHgpKQorI2RlZmluZSBQSFlTX1RPX0RNQSh4KSAgICAgICAgICAoICgoKHU2NCkoeCkgJiBOQVNJRF9NQVNLKSA+PiAyKSB8IE5PREVfT0ZGU0VUKHgpKQorCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGRlZmluaXRpb25zIHBlcnRhaW4gdG8gdGhlIElPIHNwZWNpYWwgYWRkcmVzcworICogc3BhY2UuICBUaGV5IGRlZmluZSB0aGUgbG9jYXRpb24gb2YgdGhlIGJpZyBhbmQgbGl0dGxlIHdpbmRvd3MKKyAqIG9mIGFueSBnaXZlbiBub2RlLgorICovCisjZGVmaW5lIEJXSU5fU0laRV9CSVRTCQkJMjkJLyogYmlnIHdpbmRvdyBzaXplOiA1MTJNICovCisjZGVmaW5lIFRJT19CV0lOX1NJWkVfQklUUwkJMzAJLyogYmlnIHdpbmRvdyBzaXplOiAxRyAqLworI2RlZmluZSBOT0RFX1NXSU5fQkFTRShuLCB3KQkJKCh3ID09IDApID8gTk9ERV9CV0lOX0JBU0UoKG4pLCBTV0lOMF9CSUdXSU4pIFwKKwkJOiBSQVdfTk9ERV9TV0lOX0JBU0UobiwgdykpCisjZGVmaW5lIE5PREVfSU9fQkFTRShuKQkJCShHTE9CQUxfTU1SX1NQQUNFIHwgTkFTSURfU1BBQ0UobikpCisjZGVmaW5lIEJXSU5fU0laRQkJCSgxVUwgPDwgQldJTl9TSVpFX0JJVFMpCisjZGVmaW5lIE5PREVfQldJTl9CQVNFMChuKQkJKE5PREVfSU9fQkFTRShuKSArIEJXSU5fU0laRSkKKyNkZWZpbmUgTk9ERV9CV0lOX0JBU0UobiwgdykJCShOT0RFX0JXSU5fQkFTRTAobikgKyAoKHU2NCkgKHcpIDw8IEJXSU5fU0laRV9CSVRTKSkKKyNkZWZpbmUgUkFXX05PREVfU1dJTl9CQVNFKG4sIHcpCShOT0RFX0lPX0JBU0UobikgKyAoKHU2NCkgKHcpIDw8IFNXSU5fU0laRV9CSVRTKSkKKyNkZWZpbmUgQldJTl9XSURHRVRfTUFTSwkJMHg3CisjZGVmaW5lIEJXSU5fV0lORE9XTlVNKHgpCQkoKCh4KSA+PiBCV0lOX1NJWkVfQklUUykgJiBCV0lOX1dJREdFVF9NQVNLKQorCisjZGVmaW5lIFRJT19CV0lOX1dJTkRPV19TRUxFQ1RfTUFTSwkweDcKKyNkZWZpbmUgVElPX0JXSU5fV0lORE9XTlVNKHgpCQkoKCh4KSA+PiBUSU9fQldJTl9TSVpFX0JJVFMpICYgVElPX0JXSU5fV0lORE9XX1NFTEVDVF9NQVNLKQorCisKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbnMgcGVydGFpbiB0byB0aGUgSU8gc3BlY2lhbCBhZGRyZXNzCisgKiBzcGFjZS4gIFRoZXkgZGVmaW5lIHRoZSBsb2NhdGlvbiBvZiB0aGUgYmlnIGFuZCBsaXR0bGUgd2luZG93cworICogb2YgYW55IGdpdmVuIG5vZGUuCisgKi8KKworI2RlZmluZSBTV0lOX1NJWkVfQklUUwkJCTI0CisjZGVmaW5lCVNXSU5fV0lER0VUX01BU0sJCTB4RgorCisjZGVmaW5lIFRJT19TV0lOX1NJWkVfQklUUwkJMjgKKyNkZWZpbmUgVElPX1NXSU5fU0laRQkJCSgxVUwgPDwgVElPX1NXSU5fU0laRV9CSVRTKQorI2RlZmluZSBUSU9fU1dJTl9XSURHRVRfTUFTSwkJMHgzCisKKy8qCisgKiBDb252ZXJ0IHNtYWxsd2luZG93IGFkZHJlc3MgdG8geHRhbGsgYWRkcmVzcy4KKyAqCisgKiAnYWRkcicgY2FuIGJlIHBoeXNpY2FsIG9yIHZpcnR1YWwgYWRkcmVzcywgYnV0IHdpbGwgYmUgY29udmVydGVkCisgKiB0byBYdGFsayBhZGRyZXNzIGluIHRoZSByYW5nZSAwIC0+IFNXSU5aX1NJWkVNQVNLCisgKi8KKyNkZWZpbmUJU1dJTl9XSURHRVROVU0oeCkJCSgoKHgpICA+PiBTV0lOX1NJWkVfQklUUykgJiBTV0lOX1dJREdFVF9NQVNLKQorI2RlZmluZSBUSU9fU1dJTl9XSURHRVROVU0oeCkJCSgoKHgpICA+PiBUSU9fU1dJTl9TSVpFX0JJVFMpICYgVElPX1NXSU5fV0lER0VUX01BU0spCisKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgbWFjcm9zIHByb2R1Y2UgdGhlIGNvcnJlY3QgYmFzZSB2aXJ0dWFsIGFkZHJlc3MgZm9yCisgKiB0aGUgaHViIHJlZ2lzdGVycy4gVGhlIFJFTU9URV9IVUJfKiBtYWNybyBwcm9kdWNlCisgKiB0aGUgYWRkcmVzcyBmb3IgdGhlIHNwZWNpZmllZCBodWIncyByZWdpc3RlcnMuICBUaGUgaW50ZW50IGlzCisgKiB0aGF0IHRoZSBhcHByb3ByaWF0ZSBQSSwgTUQsIE5JLCBvciBJSSByZWdpc3RlciB3b3VsZCBiZSBzdWJzdGl0dXRlZAorICogZm9yIHguCisgKgorICogICBXQVJOSU5HOgorICoJV2hlbiBjZXJ0YWluIEh1YiBjaGlwIHdvcmthcm91bmQgYXJlIGRlZmluZWQsIGl0J3Mgbm90IHN1ZmZpY2llbnQKKyAqCXRvIGRlcmVmZXJlbmNlIHRoZSAqX0hVQl9BRERSKCkgbWFjcm9zLiAgWW91IHNob3VsZCBpbnN0ZWFkIHVzZQorICoJSFVCX0woKSBhbmQgSFVCX1MoKSBpZiB5b3UgbXVzdCBkZWFsIHdpdGggcG9pbnRlcnMgdG8gaHViIHJlZ2lzdGVycy4KKyAqCU90aGVyd2lzZSwgdGhlIHJlY29tbWVuZGVkIGFwcHJvYWNoIGlzIHRvIHVzZSAqX0hVQl9MKCkgYW5kICpfSFVCX1MoKS4KKyAqCVRoZXkncmUgYWx3YXlzIHNhZmUuCisgKi8KKyNkZWZpbmUgUkVNT1RFX0hVQl9BRERSKG4seCkJCQkJCQlcCisJKChuICYgMSkgPwkJCQkJCQlcCisJLyogVElPOiAqLwkJCQkJCQlcCisJKCh2b2xhdGlsZSB1NjQgKikoR0xPQkFMX01NUl9BRERSKG4seCkpKQkJCVwKKwk6IC8qIFNIVUI6ICovCQkJCQkJCVwKKwkoKCh4KSAmIEJXSU5fVE9QKSA/ICgodm9sYXRpbGUgdTY0ICopKEdMT0JBTF9NTVJfQUREUihuLHgpKSlcCisJOiAoKHZvbGF0aWxlIHU2NCAqKShOT0RFX1NXSU5fQkFTRShuLDEpICsgMHg4MDAwMDAgKyAoeCkpKSkpCisKKworCisjZGVmaW5lIEhVQl9MKHgpCQkJKCooKHZvbGF0aWxlIHR5cGVvZigqeCkgKil4KSkKKyNkZWZpbmUJSFVCX1MoeCxkKQkJCSgqKCh2b2xhdGlsZSB0eXBlb2YoKngpICopeCkgPSAoZCkpCisKKyNkZWZpbmUgUkVNT1RFX0hVQl9MKG4sIGEpCQlIVUJfTChSRU1PVEVfSFVCX0FERFIoKG4pLCAoYSkpKQorI2RlZmluZSBSRU1PVEVfSFVCX1MobiwgYSwgZCkJCUhVQl9TKFJFTU9URV9IVUJfQUREUigobiksIChhKSksIChkKSkKKworCisjZW5kaWYgLyogX0FTTV9JQTY0X1NOX0FERFJTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvc24vYXJjaC5oIGIvaW5jbHVkZS9hc20taWE2NC9zbi9hcmNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2MzNDlmMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvc24vYXJjaC5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBTR0kgc3BlY2lmaWMgc2V0dXAuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTcsMTk5OSwyMDAxLTIwMDQgU2lsaWNvbiBHcmFwaGljcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMTk5OSBSYWxmIEJhZWNobGUgKHJhbGZAZ251Lm9yZykKKyAqLworI2lmbmRlZiBfQVNNX0lBNjRfU05fQVJDSF9ICisjZGVmaW5lIF9BU01fSUE2NF9TTl9BUkNIX0gKKworI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9wZXJjcHUuaD4KKyNpbmNsdWRlIDxhc20vc24vdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vc24vc25fY3B1aWQuaD4KKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgZGVmaW5lcyBhdHRyaWJ1dGVzIG9mIHRoZSBIVUIgY2hpcC4gVGhlc2UgYXR0cmlidXRlcyBhcmUKKyAqIGZyZXF1ZW50bHkgcmVmZXJlbmNlZC4gVGhleSBhcmUga2VwdCBpbiB0aGUgcGVyLWNwdSBkYXRhIGFyZWFzIG9mIGVhY2ggY3B1LgorICogVGhleSBhcmUga2VwdCB0b2dldGhlciBpbiBhIHN0cnVjdCB0byBtaW5pbWl6ZSBjYWNoZSBtaXNzZXMuCisgKi8KK3N0cnVjdCBzbl9odWJfaW5mb19zIHsKKwl1OCBzaHViMjsKKwl1OCBuYXNpZF9zaGlmdDsKKwl1OCBhc19zaGlmdDsKKwl1OCBzaHViXzFfMV9mb3VuZDsKKwl1MTYgbmFzaWRfYml0bWFzazsKK307CitERUNMQVJFX1BFUl9DUFUoc3RydWN0IHNuX2h1Yl9pbmZvX3MsIF9fc25faHViX2luZm8pOworI2RlZmluZSBzbl9odWJfaW5mbyAJKCZfX2dldF9jcHVfdmFyKF9fc25faHViX2luZm8pKQorI2RlZmluZSBpc19zaHViMigpCShzbl9odWJfaW5mby0+c2h1YjIpCisjZGVmaW5lIGlzX3NodWIxKCkJKHNuX2h1Yl9pbmZvLT5zaHViMiA9PSAwKQorCisvKgorICogVXNlIHRoaXMgbWFjcm8gdG8gdGVzdCBpZiBzaHViIDEuMSB3YXJzIHNob3VsZCBiZSBlbmFibGVkCisgKi8KKyNkZWZpbmUgZW5hYmxlX3NodWJfd2Fyc18xXzEoKQkoc25faHViX2luZm8tPnNodWJfMV8xX2ZvdW5kKQorCisKKy8qCisgKiBUaGlzIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBub2RlcyB0aGF0IGNhbiBiZSBwYXJ0IG9mIGEga2VybmVsLgorICogRWZmZWN0aXZlbHksIGl0J3MgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNvbXBhY3Qgbm9kZSBpZHMgKGNub2RlaWRfdCkuCisgKiBUaGlzIGlzIG5vdCBuZWNlc3NhcmlseSB0aGUgc2FtZSBhcyBNQVhfTkFTSURTLgorICovCisjZGVmaW5lIE1BWF9DT01QQUNUX05PREVTCTIwNDgKKyNkZWZpbmUgQ1BVU19QRVJfTk9ERQkJNAorCitleHRlcm4gdm9pZCBzbl9mbHVzaF9hbGxfY2FjaGVzKGxvbmcgYWRkciwgbG9uZyBieXRlcyk7CisKKyNlbmRpZiAvKiBfQVNNX0lBNjRfU05fQVJDSF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3NuL2J0ZS5oIGIvaW5jbHVkZS9hc20taWE2NC9zbi9idGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWMyN2Y5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taWE2NC9zbi9idGUuaApAQCAtMCwwICsxLDE0OCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMC0yMDA0IFNpbGljb24gR3JhcGhpY3MsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKi8KKworCisjaWZuZGVmIF9BU01fSUE2NF9TTl9CVEVfSAorI2RlZmluZSBfQVNNX0lBNjRfU05fQlRFX0gKKworI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgorI2luY2x1ZGUgPGFzbS9zbi90eXBlcy5oPgorCisKKy8qICNkZWZpbmUgQlRFX0RFQlVHICovCisvKiAjZGVmaW5lIEJURV9ERUJVR19WRVJCT1NFICovCisKKyNpZmRlZiBCVEVfREVCVUcKKyMgIGRlZmluZSBCVEVfUFJJTlRLKHgpIHByaW50ayB4CS8qIFRlcnNlICovCisjICBpZmRlZiBCVEVfREVCVUdfVkVSQk9TRQorIyAgICBkZWZpbmUgQlRFX1BSSU5US1YoeCkgcHJpbnRrIHgJLyogVmVyYm9zZSAqLworIyAgZWxzZQorIyAgICBkZWZpbmUgQlRFX1BSSU5US1YoeCkKKyMgIGVuZGlmIC8qIEJURV9ERUJVR19WRVJCT1NFICovCisjZWxzZQorIyAgZGVmaW5lIEJURV9QUklOVEsoeCkKKyMgIGRlZmluZSBCVEVfUFJJTlRLVih4KQorI2VuZGlmCS8qIEJURV9ERUJVRyAqLworCisKKy8qIEJURSBzdGF0dXMgcmVnaXN0ZXIgb25seSBzdXBwb3J0cyAxNiBiaXRzIGZvciBsZW5ndGggZmllbGQgKi8KKyNkZWZpbmUgQlRFX0xFTl9CSVRTICgxNikKKyNkZWZpbmUgQlRFX0xFTl9NQVNLICgoMSA8PCBCVEVfTEVOX0JJVFMpIC0gMSkKKyNkZWZpbmUgQlRFX01BWF9YRkVSICgoMSA8PCBCVEVfTEVOX0JJVFMpICogTDFfQ0FDSEVfQllURVMpCisKKworLyogRGVmaW5lIGhhcmR3YXJlICovCisjZGVmaW5lIEJURVNfUEVSX05PREUgMgorCisKKy8qIERlZmluZSBoYXJkd2FyZSBtb2RlcyAqLworI2RlZmluZSBCVEVfTk9USUZZIChJQkNUX05PVElGWSkKKyNkZWZpbmUgQlRFX05PUk1BTCBCVEVfTk9USUZZCisjZGVmaW5lIEJURV9aRVJPX0ZJTEwgKEJURV9OT1RJRlkgfCBJQkNUX1pGSUxfTU9ERSkKKy8qIFVzZSBhIHJlc2VydmVkIGJpdCB0byBsZXQgdGhlIGNhbGxlciBzcGVjaWZ5IGEgd2FpdCBmb3IgYW55IEJURSAqLworI2RlZmluZSBCVEVfV0FDUVVJUkUgKDB4NDAwMCkKKy8qIFVzZSB0aGUgQlRFIG9uIHRoZSBub2RlIHdpdGggdGhlIGRlc3RpbmF0aW9uIG1lbW9yeSAqLworI2RlZmluZSBCVEVfVVNFX0RFU1QgKEJURV9XQUNRVUlSRSA8PCAxKQorLyogVXNlIGFueSBhdmFpbGFibGUgQlRFIGludGVyZmFjZSBvbiBhbnkgbm9kZSBmb3IgdGhlIHRyYW5zZmVyICovCisjZGVmaW5lIEJURV9VU0VfQU5ZIChCVEVfVVNFX0RFU1QgPDwgMSkKKy8qIG1hY3JvIHRvIGZvcmNlIHRoZSBJQkNUMCB2YWx1ZSB2YWxpZCAqLworI2RlZmluZSBCVEVfVkFMSURfTU9ERSh4KSAoKHgpICYgKElCQ1RfTk9USUZZIHwgSUJDVF9aRklMX01PREUpKQorCisjZGVmaW5lIEJURV9BQ1RJVkUJCShJQkxTX0JVU1kgfCBJQkxTX0VSUk9SKQorI2RlZmluZSBCVEVfV09SRF9BVkFJTEFCTEUJKElCTFNfQlVTWSA8PCAxKQorI2RlZmluZSBCVEVfV09SRF9CVVNZCQkofkJURV9XT1JEX0FWQUlMQUJMRSkKKworLyoKKyAqIFNvbWUgbWFjcm9zIHRvIHNpbXBsaWZ5IHJlYWRpbmcuCisgKiBTdGFydCB3aXRoIG1hY3JvcyB0byBsb2NhdGUgdGhlIEJURSBjb250cm9sIHJlZ2lzdGVycy4KKyAqLworI2RlZmluZSBCVEVfTE5TVEFUX0xPQUQoX2J0ZSkJCQkJCQlcCisJCQlIVUJfTChfYnRlLT5idGVfYmFzZV9hZGRyKQorI2RlZmluZSBCVEVfTE5TVEFUX1NUT1JFKF9idGUsIF94KQkJCQkJXAorCQkJSFVCX1MoX2J0ZS0+YnRlX2Jhc2VfYWRkciwgKF94KSkKKyNkZWZpbmUgQlRFX1NSQ19TVE9SRShfYnRlLCBfeCkJCQkJCQlcCisJCQlIVUJfUyhfYnRlLT5idGVfYmFzZV9hZGRyICsgKEJURU9GRl9TUkMvOCksIChfeCkpCisjZGVmaW5lIEJURV9ERVNUX1NUT1JFKF9idGUsIF94KQkJCQkJXAorCQkJSFVCX1MoX2J0ZS0+YnRlX2Jhc2VfYWRkciArIChCVEVPRkZfREVTVC84KSwgKF94KSkKKyNkZWZpbmUgQlRFX0NUUkxfU1RPUkUoX2J0ZSwgX3gpCQkJCQlcCisJCQlIVUJfUyhfYnRlLT5idGVfYmFzZV9hZGRyICsgKEJURU9GRl9DVFJMLzgpLCAoX3gpKQorI2RlZmluZSBCVEVfTk9USUZfU1RPUkUoX2J0ZSwgX3gpCQkJCQlcCisJCQlIVUJfUyhfYnRlLT5idGVfYmFzZV9hZGRyICsgKEJURU9GRl9OT1RJRlkvOCksIChfeCkpCisKKworLyogUG9zc2libGUgcmVzdWx0cyBmcm9tIGJ0ZV9jb3B5IGFuZCBidGVfdW5hbGlnbmVkX2NvcHkgKi8KKy8qIFRoZSBmb2xsb3dpbmcgZXJyb3IgY29kZXMgbWFwIGludG8gdGhlIEJURSBoYXJkd2FyZSBjb2RlcworICogSUlPX0lDUkJfRUNPREVfKiAoaW4gc2h1YmlvLmgpLiBUaGUgaGFyZHdhcmUgdXNlcworICogYW4gZXJyb3IgY29kZSBvZiAwIChJSU9fSUNSQl9FQ09ERV9ERVJSKSwgYnV0IHdlIHdhbnQgemVybworICogdG8gbWVhbiBCVEVfU1VDQ0VTUywgc28gYWRkIG9uZSAoQlRFRkFJTF9PRkZTRVQpIHRvIHRoZSBlcnJvcgorICogY29kZXMgdG8gZ2l2ZSB0aGUgZm9sbG93aW5nIGVycm9yIGNvZGVzLgorICovCisjZGVmaW5lIEJURUZBSUxfT0ZGU0VUCTEKKwordHlwZWRlZiBlbnVtIHsKKwlCVEVfU1VDQ0VTUywJCS8qIDAgaXMgc3VjY2VzcyAqLworCUJURUZBSUxfRElSLAkJLyogRGlyZWN0b3J5IGVycm9yIGR1ZSB0byBJSU8gYWNjZXNzKi8KKwlCVEVGQUlMX1BPSVNPTiwJCS8qIHBvaXNvbiBlcnJvciBvbiBJTyBhY2Nlc3MgKHdyaXRlIHRvIHBvaXNvbiBwYWdlKSAqLworCUJURUZBSUxfV0VSUiwJCS8qIFdyaXRlIGVycm9yIChpZSBXSU5WIHRvIGEgUmVhZCBvbmx5IGxpbmUpICovCisJQlRFRkFJTF9BQ0NFU1MsCQkvKiBhY2Nlc3MgZXJyb3IgKHByb3RlY3Rpb24gdmlvbGF0aW9uKSAqLworCUJURUZBSUxfUFdFUlIsCQkvKiBQYXJ0aWFsIFdyaXRlIEVycm9yICovCisJQlRFRkFJTF9QUkVSUiwJCS8qIFBhcnRpYWwgUmVhZCBFcnJvciAqLworCUJURUZBSUxfVE9VVCwJCS8qIENSQiBUaW1lIG91dCAqLworCUJURUZBSUxfWFRFUlIsCQkvKiBJbmNvbWluZyB4dGFsayBwa3QgaGFkIGVycm9yIGJpdCAqLworCUJURUZBSUxfTk9UQVZBSUwsCS8qIEJURSBub3QgYXZhaWxhYmxlICovCit9IGJ0ZV9yZXN1bHRfdDsKKworCisvKgorICogU3RydWN0dXJlIGRlZmluaW5nIGEgYnRlLiAgQW4gaW5zdGFuY2Ugb2YgdGhpcworICogc3RydWN0dXJlIGlzIGNyZWF0ZWQgaW4gdGhlIG5vZGVwZGEgZm9yIGVhY2gKKyAqIGJ0ZSBvbiB0aGF0IG5vZGUgKGFzIGRlZmluZWQgYnkgQlRFU19QRVJfTk9ERSkKKyAqIFRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIGV2ZXJ5dGhpbmcgbmVjZXNzYXJ5CisgKiB0byB3b3JrIHdpdGggYSBCVEUuCisgKi8KK3N0cnVjdCBidGVpbmZvX3MgeworCXZvbGF0aWxlIHU2NCBub3RpZnkgX19fX2NhY2hlbGluZV9hbGlnbmVkOworCXU2NCAqYnRlX2Jhc2VfYWRkciBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CisJc3BpbmxvY2tfdCBzcGlubG9jazsKKwljbm9kZWlkX3QgYnRlX2Nub2RlOwkvKiBjbm9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCWludCBidGVfZXJyb3JfY291bnQ7CS8qIE51bWJlciBvZiBlcnJvcnMgZW5jb3VudGVyZWQgICAgICovCisJaW50IGJ0ZV9udW07CQkvKiAwIC0tPiBCVEUwLCAxIC0tPiBCVEUxICAgICAgICAgICAqLworCWludCBjbGVhbnVwX2FjdGl2ZTsJLyogSW50ZXJmYWNlIGlzIGxvY2tlZCBmb3IgY2xlYW51cCAgKi8KKwl2b2xhdGlsZSBidGVfcmVzdWx0X3QgYmhfZXJyb3I7CS8qIGVycm9yIHdoaWxlIHByb2Nlc3NpbmcgICAqLworCXZvbGF0aWxlIHU2NCAqbW9zdF9yY250X25hOworfTsKKworCisvKgorICogRnVuY3Rpb24gcHJvdG90eXBlcyAoZnVuY3Rpb25zIGRlZmluZWQgaW4gYnRlLmMsIHVzZWQgZWxzZXdoZXJlKQorICovCitleHRlcm4gYnRlX3Jlc3VsdF90IGJ0ZV9jb3B5KHU2NCwgdTY0LCB1NjQsIHU2NCwgdm9pZCAqKTsKK2V4dGVybiBidGVfcmVzdWx0X3QgYnRlX3VuYWxpZ25lZF9jb3B5KHU2NCwgdTY0LCB1NjQsIHU2NCk7CitleHRlcm4gdm9pZCBidGVfZXJyb3JfaGFuZGxlcih1bnNpZ25lZCBsb25nKTsKKworI2RlZmluZSBidGVfemVybyhkZXN0LCBsZW4sIG1vZGUsIG5vdGlmaWNhdGlvbikgXAorCWJ0ZV9jb3B5KDAsIGRlc3QsIGxlbiwgKChtb2RlKSB8IEJURV9aRVJPX0ZJTEwpLCBub3RpZmljYXRpb24pCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGlzIHRoZSBwcmVmZXJlZCB3YXkgb2YgY2FsbGluZyBidGVfdW5hbGlnbmVkX2NvcHkKKyAqIElmIHRoZSBjb3B5IGlzIGZ1bGx5IGNhY2hlIGxpbmUgYWxpZ25lZCwgdGhlbiBidGVfY29weSBpcworICogdXNlZCBpbnN0ZWFkLiAgU2luY2UgYnRlX2NvcHkgaXMgaW5saW5lZCwgdGhpcyBzYXZlcyBhIGNhbGwKKyAqIHN0YWNrLiAgTk9URTogYnRlX2NvcHkgaXMgY2FsbGVkIHN5bmNocm9ub3VzbHkgYW5kIGRvZXMgYmxvY2sKKyAqIHVudGlsIHRoZSB0cmFuc2ZlciBpcyBjb21wbGV0ZS4gIEluIG9yZGVyIHRvIGdldCB0aGUgYXN5bmNoCisgKiB2ZXJzaW9uIG9mIGJ0ZV9jb3B5LCB5b3UgbXVzdCBwZXJmb3JtIHRoaXMgY2hlY2sgeW91cnNlbGYuCisgKi8KKyNkZWZpbmUgQlRFX1VOQUxJR05FRF9DT1BZKHNyYywgZGVzdCwgbGVuLCBtb2RlKSAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkoKChsZW4gJiBMMV9DQUNIRV9NQVNLKSB8fCAoc3JjICYgTDFfQ0FDSEVfTUFTSykgfHwgICAgICAgICAgICAgXAorCSAgKGRlc3QgJiBMMV9DQUNIRV9NQVNLKSkgPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJIGJ0ZV91bmFsaWduZWRfY29weShzcmMsIGRlc3QsIGxlbiwgbW9kZSkgOiAgICAgICAgICAgICAgCVwKKwkgYnRlX2NvcHkoc3JjLCBkZXN0LCBsZW4sIG1vZGUsIE5VTEwpKQorCisKKyNlbmRpZgkvKiBfQVNNX0lBNjRfU05fQlRFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvc24vY2xrc3VwcG9ydC5oIGIvaW5jbHVkZS9hc20taWE2NC9zbi9jbGtzdXBwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM0MGMzNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvc24vY2xrc3VwcG9ydC5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwNCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKi8KKworLyoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBkZWZpbml0aW9ucyBmb3IgYWNjZXNzaW5nIGEgcGxhdGZvcm0gc3VwcG9ydGVkIGhpZ2ggcmVzb2x1dGlvbgorICogY2xvY2suIFRoZSBjbG9jayBpcyBtb25pdG9uaWNhbGx5IGluY3JlYXNpbmcgYW5kIGNhbiBiZSBhY2Nlc3NlZCBmcm9tIGFueSBub2RlCisgKiBpbiB0aGUgc3lzdGVtLiBUaGUgY2xvY2sgaXMgc3luY2hyb25pemVkIGFjcm9zcyBub2RlcyAtIGFsbCBub2RlcyBzZWUgdGhlCisgKiBzYW1lIHZhbHVlLgorICogCisgKglSVENfQ09VTlRFUl9BRERSIC0gY29udGFpbnMgdGhlIGFkZHJlc3Mgb2YgdGhlIGNvdW50ZXIgCisgKgorICovCisKKyNpZm5kZWYgX0FTTV9JQTY0X1NOX0NMS1NVUFBPUlRfSAorI2RlZmluZSBfQVNNX0lBNjRfU05fQ0xLU1VQUE9SVF9ICisKK2V4dGVybiB1bnNpZ25lZCBsb25nIHNuX3J0Y19jeWNsZXNfcGVyX3NlY29uZDsKKworI2RlZmluZSBSVENfQ09VTlRFUl9BRERSCSgobG9uZyAqKUxPQ0FMX01NUl9BRERSKFNIX1JUQykpCisKKyNkZWZpbmUgcnRjX3RpbWUoKQkJKCpSVENfQ09VTlRFUl9BRERSKQorCisjZW5kaWYgLyogX0FTTV9JQTY0X1NOX0NMS1NVUFBPUlRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9zbi9mZXRjaG9wLmggYi9pbmNsdWRlL2FzbS1pYTY0L3NuL2ZldGNob3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjRhZDhmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taWE2NC9zbi9mZXRjaG9wLmgKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICovCisKKyNpZm5kZWYgX0FTTV9JQTY0X1NOX0ZFVENIT1BfSAorI2RlZmluZSBfQVNNX0lBNjRfU05fRkVUQ0hPUF9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2RlZmluZSBGRVRDSE9QX0JBU0VOQU1FCSJzZ2lfZmV0Y2hvcCIKKyNkZWZpbmUgRkVUQ0hPUF9GVUxMTkFNRQkiL2Rldi9zZ2lfZmV0Y2hvcCIKKworCisKKyNkZWZpbmUgRkVUQ0hPUF9WQVJfU0laRSA2NCAvKiA2NCBieXRlIHBlciBmZXRjaG9wIHZhcmlhYmxlICovCisKKyNkZWZpbmUgRkVUQ0hPUF9MT0FECQkwCisjZGVmaW5lIEZFVENIT1BfSU5DUkVNRU5UCTgKKyNkZWZpbmUgRkVUQ0hPUF9ERUNSRU1FTlQJMTYKKyNkZWZpbmUgRkVUQ0hPUF9DTEVBUgkJMjQKKworI2RlZmluZSBGRVRDSE9QX1NUT1JFCQkwCisjZGVmaW5lIEZFVENIT1BfQU5ECQkyNAorI2RlZmluZSBGRVRDSE9QX09SCQkzMgorCisjZGVmaW5lIEZFVENIT1BfQ0xFQVJfQ0FDSEUJNTYKKworI2RlZmluZSBGRVRDSE9QX0xPQURfT1AoYWRkciwgb3ApICggXAorICAgICAgICAgKih2b2xhdGlsZSBsb25nICopKChjaGFyKikgKGFkZHIpICsgKG9wKSkpCisKKyNkZWZpbmUgRkVUQ0hPUF9TVE9SRV9PUChhZGRyLCBvcCwgeCkgKCBcCisgICAgICAgICAqKHZvbGF0aWxlIGxvbmcgKikoKGNoYXIqKSAoYWRkcikgKyAob3ApKSA9IChsb25nKSAoeCkpCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKy8qCisgKiBDb252ZXJ0IGEgcmVnaW9uIDYgKGthZGRyKSBhZGRyZXNzIHRvIHRoZSBhZGRyZXNzIG9mIHRoZSBmZXRjaG9wIHZhcmlhYmxlCisgKi8KKyNkZWZpbmUgRkVUQ0hPUF9LQUREUl9UT19NU1BFQ19BRERSKGthZGRyKQlUT19NU1BFQyhrYWRkcikKKworCisvKgorICogRWFjaCBBdG9taWMgTWVtb3J5IE9wZXJhdGlvbiAoQU1PIGZvcm1lcmx5IGtub3duIGFzIGZldGNob3ApCisgKiB2YXJpYWJsZSBpcyA2NCBieXRlcyBsb25nLiAgVGhlIGZpcnN0IDggYnl0ZXMgYXJlIHVzZWQuICBUaGUKKyAqIHJlbWFpbmluZyA1NiBieXRlcyBhcmUgdW5hZGRyZXNzYWJsZSBkdWUgdG8gdGhlIG9wZXJhdGlvbiB0YWtpbmcKKyAqIHRoYXQgcG9ydGlvbiBvZiB0aGUgYWRkcmVzcy4KKyAqIAorICogTk9URTogVGhlIEFNT190IF9NVVNUXyBiZSBwbGFjZWQgaW4gZWl0aGVyIHRoZSBmaXJzdCBvciBzZWNvbmQgaGFsZgorICogb2YgdGhlIGNhY2hlIGxpbmUuICBUaGUgY2FjaGUgbGluZSBfTVVTVCBOT1RfIGJlIHVzZWQgZm9yIGFueXRoaW5nCisgKiBvdGhlciB0aGFuIGFkZGl0aW9uYWwgQU1PX3QgZW50cmllcy4gIFRoaXMgaXMgYmVjYXVzZSB0aGVyZSBhcmUgdHdvCisgKiBhZGRyZXNzZXMgd2hpY2ggcmVmZXJlbmNlIHRoZSBzYW1lIHBoeXNpY2FsIGNhY2hlIGxpbmUuICBPbmUgd2lsbAorICogYmUgYSBjYWNoZWQgZW50cnkgd2l0aCB0aGUgbWVtb3J5IHR5cGUgYml0cyBhbGwgc2V0LiAgVGhpcyBhZGRyZXNzCisgKiBtYXkgYmUgbG9hZGVkIGludG8gcHJvY2Vzc29yIGNhY2hlLiAgVGhlIEFNT190IHdpbGwgYmUgcmVmZXJlbmNlZAorICogdW5jYWNoZWQgdmlhIHRoZSBtZW1vcnkgc3BlY2lhbCBtZW1vcnkgdHlwZS4gIElmIGFueSBwb3J0aW9uIG9mIHRoZQorICogY2FjaGVkIGNhY2hlLWxpbmUgaXMgbW9kaWZpZWQsIHdoZW4gdGhhdCBsaW5lIGlzIGZsdXNoZWQsIGl0IHdpbGwKKyAqIG92ZXJ3cml0ZSB0aGUgdW5jYWNoZWQgdmFsdWUgaW4gcGh5c2ljYWwgbWVtb3J5IGFuZCBsZWFkIHRvCisgKiBpbmNvbnNpc3RlbmN5LgorICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAgICAgIHU2NCB2YXJpYWJsZTsKKyAgICAgICAgdTY0IHVudXNlZFs3XTsKK30gQU1PX3Q7CisKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgQVBJcyBhcmUgZXh0ZXJuYWxpemVkIHRvIHRoZSBrZXJuZWwgdG8gYWxsb2NhdGUvZnJlZSBwYWdlcyBvZgorICogZmV0Y2hvcCB2YXJpYWJsZXMuCisgKglmZXRjaG9wX2thbGxvY19wYWdlCS0gQWxsb2NhdGUvaW5pdGlhbGl6ZSAxIGZldGNob3AgcGFnZSBvbiB0aGUKKyAqCQkJCSAgc3BlY2lmaWVkIGNub2RlLiAKKyAqCWZldGNob3Bfa2ZyZWVfcGFnZQktIEZyZWUgYSBwcmV2aW91c2x5IGFsbG9jYXRlZCBmZXRjaG9wIHBhZ2UKKyAqLworCit1bnNpZ25lZCBsb25nIGZldGNob3Bfa2FsbG9jX3BhZ2UoaW50IG5pZCk7Cit2b2lkIGZldGNob3Bfa2ZyZWVfcGFnZSh1bnNpZ25lZCBsb25nIG1hZGRyKTsKKworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX0FTTV9JQTY0X1NOX0ZFVENIT1BfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3NuL2dlby5oIGIvaW5jbHVkZS9hc20taWE2NC9zbi9nZW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTY2MzQzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taWE2NC9zbi9nZW8uaApAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5MiAtIDE5OTcsIDIwMDAtMjAwNCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKi8KKworI2lmbmRlZiBfQVNNX0lBNjRfU05fR0VPX0gKKyNkZWZpbmUgX0FTTV9JQTY0X1NOX0dFT19ICisKKy8qIFRoZSBnZW9pZF90IGltcGxlbWVudGF0aW9uIGJlbG93IGlzIGJhc2VkIGxvb3NlbHkgb24gdGhlIHBjZmdfdAorICAgaW1wbGVtZW50YXRpb24gaW4gc3lzL1NOL3Byb21jZmcuaC4gKi8KKworLyogVHlwZSBkZWNsYXJhY3Rpb25zICovCisKKy8qIFNpemUgb2YgYSBnZW9pZF90IHN0cnVjdHVyZSAobXVzdCBiZSBiZWZvcmUgZGVjbC4gb2YgZ2VvaWRfdSkgKi8KKyNkZWZpbmUgR0VPSURfU0laRQk4CS8qIFdvdWxkIDE2IGJlIGJldHRlcj8gIFRoZSBzaXplIGNhbgorCQkJCSAgIGJlIGRpZmZlcmVudCBvbiBkaWZmZXJlbnQgcGxhdGZvcm1zLiAqLworCisjZGVmaW5lIE1BWF9TTEFCUwkweGUJLyogc2xhYnMgcGVyIG1vZHVsZSAqLworCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIJZ2VvX3R5cGVfdDsKKworLyogRmllbGRzIGNvbW1vbiB0byBhbGwgc3Vic3RydWN0dXJlcyAqLwordHlwZWRlZiBzdHJ1Y3QgZ2VvX2FueV9zIHsKKyAgICBtb2R1bGVpZF90CW1vZHVsZTsJCS8qIFRoZSBtb2R1bGUgKGJveCkgdGhpcyBoL3cgbGl2ZXMgaW4gKi8KKyAgICBnZW9fdHlwZV90CXR5cGU7CQkvKiBXaGF0IHR5cGUgb2YgaC93IGlzIG5hbWVkIGJ5IHRoaXMgZ2VvaWRfdCAqLworICAgIHNsYWJpZF90CXNsYWI7CQkvKiBUaGUgbG9naWNhbCBhc3NlbWJseSB3aXRoaW4gdGhlIG1vZHVsZSAqLworfSBnZW9fYW55X3Q7CisKKy8qIEFkZGl0aW9uYWwgZmllbGRzIGZvciBwYXJ0aWN1bGFyIHR5cGVzIG9mIGhhcmR3YXJlICovCit0eXBlZGVmIHN0cnVjdCBnZW9fbm9kZV9zIHsKKyAgICBnZW9fYW55X3QJYW55OwkJLyogTm8gYWRkaXRpb25hbCBmaWVsZHMgbmVlZGVkICovCit9IGdlb19ub2RlX3Q7CisKK3R5cGVkZWYgc3RydWN0IGdlb19ydHJfcyB7CisgICAgZ2VvX2FueV90CWFueTsJCS8qIE5vIGFkZGl0aW9uYWwgZmllbGRzIG5lZWRlZCAqLworfSBnZW9fcnRyX3Q7CisKK3R5cGVkZWYgc3RydWN0IGdlb19pb2NudGxfcyB7CisgICAgZ2VvX2FueV90CWFueTsJCS8qIE5vIGFkZGl0aW9uYWwgZmllbGRzIG5lZWRlZCAqLworfSBnZW9faW9jbnRsX3Q7CisKK3R5cGVkZWYgc3RydWN0IGdlb19wY2ljYXJkX3MgeworICAgIGdlb19pb2NudGxfdAlhbnk7CisgICAgY2hhcgkJYnVzOwkvKiBCdXMvd2lkZ2V0IG51bWJlciAqLworICAgIGNoYXIJCXNsb3Q7CS8qIFBDSSBzbG90IG51bWJlciAqLworfSBnZW9fcGNpY2FyZF90OworCisvKiBTdWJjb21wb25lbnRzIG9mIGEgbm9kZSAqLwordHlwZWRlZiBzdHJ1Y3QgZ2VvX2NwdV9zIHsKKyAgICBnZW9fbm9kZV90CW5vZGU7CisgICAgY2hhcglzbGljZTsJCS8qIFdoaWNoIENQVSBvbiB0aGUgbm9kZSAqLworfSBnZW9fY3B1X3Q7CisKK3R5cGVkZWYgc3RydWN0IGdlb19tZW1fcyB7CisgICAgZ2VvX25vZGVfdAlub2RlOworICAgIGNoYXIJbWVtYnVzOwkJLyogVGhlIG1lbW9yeSBidXMgb24gdGhlIG5vZGUgKi8KKyAgICBjaGFyCW1lbXNsb3Q7CS8qIFRoZSBtZW1vcnkgc2xvdCBvbiB0aGUgYnVzICovCit9IGdlb19tZW1fdDsKKworCit0eXBlZGVmIHVuaW9uIGdlb2lkX3UgeworICAgIGdlb19hbnlfdAlhbnk7CisgICAgZ2VvX25vZGVfdAlub2RlOworICAgIGdlb19pb2NudGxfdAlpb2NudGw7CisgICAgZ2VvX3BjaWNhcmRfdAlwY2ljYXJkOworICAgIGdlb19ydHJfdAlydHI7CisgICAgZ2VvX2NwdV90CWNwdTsKKyAgICBnZW9fbWVtX3QJbWVtOworICAgIGNoYXIJcGFkc2l6ZVtHRU9JRF9TSVpFXTsKK30gZ2VvaWRfdDsKKworCisvKiBQcmVwcm9jZXNzb3IgbWFjcm9zICovCisKKyNkZWZpbmUgR0VPX01BWF9MRU4JNDgJLyogbWF4LiBmb3JtYXR0ZWQgbGVuZ3RoLCBwbHVzIHNvbWUgcGFkOgorCQkJCSAgIG1vZHVsZS8wMDFjMDcvc2xhYi81L25vZGUvbWVtb3J5LzIvc2xvdC80ICovCisKKy8qIFZhbHVlcyBmb3IgZ2VvX3R5cGVfdCAqLworI2RlZmluZSBHRU9fVFlQRV9JTlZBTElECTAKKyNkZWZpbmUgR0VPX1RZUEVfTU9EVUxFCQkxCisjZGVmaW5lIEdFT19UWVBFX05PREUJCTIKKyNkZWZpbmUgR0VPX1RZUEVfUlRSCQkzCisjZGVmaW5lIEdFT19UWVBFX0lPQ05UTAkJNAorI2RlZmluZSBHRU9fVFlQRV9JT0NBUkQJCTUKKyNkZWZpbmUgR0VPX1RZUEVfQ1BVCQk2CisjZGVmaW5lIEdFT19UWVBFX01FTQkJNworI2RlZmluZSBHRU9fVFlQRV9NQVgJCShHRU9fVFlQRV9NRU0rMSkKKworLyogUGFyYW1ldGVyIGZvciBod2NmZ19mb3JtYXRfZ2VvaWRfY29tcHQoKSAqLworI2RlZmluZSBHRU9fQ09NUFRfTU9EVUxFCTEKKyNkZWZpbmUgR0VPX0NPTVBUX1NMQUIJCTIKKyNkZWZpbmUgR0VPX0NPTVBUX0lPQlVTCQkzCisjZGVmaW5lIEdFT19DT01QVF9JT1NMT1QJNAorI2RlZmluZSBHRU9fQ09NUFRfQ1BVCQk1CisjZGVmaW5lIEdFT19DT01QVF9NRU1CVVMJNgorI2RlZmluZSBHRU9fQ09NUFRfTUVNU0xPVAk3CisKKyNkZWZpbmUgR0VPX0lOVkFMSURfU1RSCQkiPGludmFsaWQ+IgorCisjZGVmaW5lIElOVkFMSURfTkFTSUQgICAgICAgICAgICgobmFzaWRfdCktMSkKKyNkZWZpbmUgSU5WQUxJRF9DTk9ERUlEICAgICAgICAgKChjbm9kZWlkX3QpLTEpCisjZGVmaW5lIElOVkFMSURfUE5PREVJRCAgICAgICAgICgocG5vZGVpZF90KS0xKQorI2RlZmluZSBJTlZBTElEX1NMQUIgICAgICAgICAgICAoc2xhYmlkX3QpLTEKKyNkZWZpbmUgSU5WQUxJRF9NT0RVTEUgICAgICAgICAgKChtb2R1bGVpZF90KS0xKQorI2RlZmluZSBJTlZBTElEX1BBUlRJRCAgICAgICAgICAoKHBhcnRpZF90KS0xKQorCitzdGF0aWMgaW5saW5lIHNsYWJpZF90IGdlb19zbGFiKGdlb2lkX3QgZykKK3sKKwlyZXR1cm4gKGcuYW55LnR5cGUgPT0gR0VPX1RZUEVfSU5WQUxJRCkgPworCQlJTlZBTElEX1NMQUIgOiBnLmFueS5zbGFiOworfQorCitzdGF0aWMgaW5saW5lIG1vZHVsZWlkX3QgZ2VvX21vZHVsZShnZW9pZF90IGcpCit7CisJcmV0dXJuIChnLmFueS50eXBlID09IEdFT19UWVBFX0lOVkFMSUQpID8KKwkJSU5WQUxJRF9NT0RVTEUgOiBnLmFueS5tb2R1bGU7Cit9CisKK2V4dGVybiBnZW9pZF90IGNub2RlaWRfZ2V0X2dlb2lkKGNub2RlaWRfdCBjbm9kZSk7CisKKyNlbmRpZiAvKiBfQVNNX0lBNjRfU05fR0VPX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvc24vaW50ci5oIGIvaW5jbHVkZS9hc20taWE2NC9zbi9pbnRyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUxNDcxZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvc24vaW50ci5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTIgLSAxOTk3LCAyMDAwLTIwMDQgU2lsaWNvbiBHcmFwaGljcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICovCisKKyNpZm5kZWYgX0FTTV9JQTY0X1NOX0lOVFJfSAorI2RlZmluZSBfQVNNX0lBNjRfU05fSU5UUl9ICisKKyNkZWZpbmUgU0dJX1VBUlRfVkVDVE9SCQkoMHhlOSkKKyNkZWZpbmUgU0dJX1BDSUJSX0VSUk9SCQkoMHgzMykKKworLyogUmVzZXJ2ZWQgSVJRcyA6IE5vdGUsIG5vdCB0byBleGNlZWQgSUE2NF9TTjJfRklSU1RfREVWSUNFX1ZFQ1RPUiAqLworI2RlZmluZSBTR0lfWFBDX0FDVElWQVRFICAgICAgICAgICAgICAgICgweDMwKQorI2RlZmluZSBTR0lfSUlfRVJST1IgICAgICAgICAgICAgICAgICAgICgweDMxKQorI2RlZmluZSBTR0lfWEJPV19FUlJPUiAgICAgICAgICAgICAgICAgICgweDMyKQorI2RlZmluZSBTR0lfUENJQlJfRVJST1IgICAgICAgICAgICAgICAgICgweDMzKQorI2RlZmluZSBTR0lfQUNQSV9TQ0lfSU5UICAgICAgICAgICAgICAgICgweDM0KQorI2RlZmluZSBTR0lfVElPQ0FfRVJST1IgICAgICAgICAgICAgICAgICgweDM1KQorI2RlZmluZSBTR0lfVElPX0VSUk9SICAgICAgICAgICAgICAgICAgICgweDM2KQorI2RlZmluZSBTR0lfVElPQ1hfRVJST1IgICAgICAgICAgICAgICAgICgweDM3KQorI2RlZmluZSBTR0lfTU1USU1FUl9WRUNUT1IgICAgICAgICAgICAgICgweDM4KQorI2RlZmluZSBTR0lfWFBDX05PVElGWSAgICAgICAgICAgICAgICAgICgweGU3KQorCisjZGVmaW5lIElBNjRfU04yX0ZJUlNUX0RFVklDRV9WRUNUT1IgICAgKDB4M2MpCisjZGVmaW5lIElBNjRfU04yX0xBU1RfREVWSUNFX1ZFQ1RPUiAgICAgKDB4ZTYpCisKKyNkZWZpbmUgU04yX0lSUV9SRVNFUlZFRCAgICAgICAgKDB4MSkKKyNkZWZpbmUgU04yX0lSUV9DT05ORUNURUQgICAgICAgKDB4MikKKyNkZWZpbmUgU04yX0lSUV9TSEFSRUQgICAgICAgICAgKDB4NCkKKworLy8gVGhlIFNOIFBST00gaXJxIHN0cnVjdAorc3RydWN0IHNuX2lycV9pbmZvIHsKKwlzdHJ1Y3Qgc25faXJxX2luZm8gKmlycV9uZXh0OwkvKiBzaGFyaW5nIGlycSBsaXN0CSAgICAgKi8KKwlzaG9ydAkJaXJxX25hc2lkOwkvKiBOYXNpZCBJUlEgaXMgYXNzaWduZWQgdG8gICovCisJaW50CQlpcnFfc2xpY2U7CS8qIHNsaWNlIElSUSBpcyBhc3NpZ25lZCB0byAgKi8KKwlpbnQJCWlycV9jcHVpZDsJLyoga2VybmVsIGxvZ2ljYWwgY3B1aWQJICAgICAqLworCWludAkJaXJxX2lycTsJLyogdGhlIElSUSBudW1iZXIgKi8KKwlpbnQJCWlycV9pbnRfYml0OwkvKiBCcmlkZ2UgaW50ZXJydXB0IHBpbiAqLworCXVpbnQ2NF90CWlycV94dGFsa2FkZHI7CS8qIHh0YWxrYWRkciBJUlEgaXMgc2VudCB0byAgKi8KKwlpbnQJCWlycV9icmlkZ2VfdHlwZTsvKiBwY2lpbyBhc2ljIHR5cGUgKHBjaWlvLmgpICovCisJdm9pZAkgICAgICAgKmlycV9icmlkZ2U7CS8qIGJyaWRnZSBnZW5lcmF0aW5nIGlycSAgICAgKi8KKwl2b2lkCSAgICAgICAqaXJxX3BjaWlvaW5mbzsJLyogYXNzb2NpYXRlZCBwY2lpb19pbmZvX3QgICAqLworCWludAkJaXJxX2xhc3RfaW50cjsJLyogRm9yIFNodWIgbGIgbG9zdCBpbnRyIFdBUiAqLworCWludAkJaXJxX2Nvb2tpZTsJLyogdW5pcXVlIGNvb2tpZSAJICAgICAqLworCWludAkJaXJxX2ZsYWdzOwkvKiBmbGFncyAqLworCWludAkJaXJxX3NoYXJlX2NudDsJLyogbnVtIGRldmljZXMgc2hhcmluZyBJUlEgICAqLworfTsKKworZXh0ZXJuIHZvaWQgc25fc2VuZF9JUElfcGh5cyhpbnQsIGxvbmcsIGludCwgaW50KTsKKworI2RlZmluZSBDUFVfVkVDVE9SX1RPX0lSUShjcHVpZCx2ZWN0b3IpICh2ZWN0b3IpCisKKyNlbmRpZiAvKiBfQVNNX0lBNjRfU05fSU5UUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3NuL2lvLmggYi9pbmNsdWRlL2FzbS1pYTY0L3NuL2lvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDIyMDk3MwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvc24vaW8uaApAQCAtMCwwICsxLDI2NSBAQAorLyogCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwNCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKi8KKworI2lmbmRlZiBfQVNNX1NOX0lPX0gKKyNkZWZpbmUgX0FTTV9TTl9JT19ICisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxhc20vaW50cmluc2ljcy5oPgorCitleHRlcm4gdm9pZCAqIHNuX2lvX2FkZHIodW5zaWduZWQgbG9uZyBwb3J0KSBfX2F0dHJpYnV0ZV9jb25zdF9fOyAvKiBGb3J3YXJkIGRlZmluaXRpb24gKi8KK2V4dGVybiB2b2lkIF9fc25fbW1pb3diKHZvaWQpOyAvKiBGb3J3YXJkIGRlZmluaXRpb24gKi8KKworZXh0ZXJuIGludCBudW1pb25vZGVzOworCisjZGVmaW5lIF9fc25fbWZfYSgpICAgaWE2NF9tZmEoKQorCitleHRlcm4gdm9pZCBzbl9kbWFfZmx1c2godW5zaWduZWQgbG9uZyk7CisKKyNkZWZpbmUgX19zbl9pbmIgX19fc25faW5iCisjZGVmaW5lIF9fc25faW53IF9fX3NuX2ludworI2RlZmluZSBfX3NuX2lubCBfX19zbl9pbmwKKyNkZWZpbmUgX19zbl9vdXRiIF9fX3NuX291dGIKKyNkZWZpbmUgX19zbl9vdXR3IF9fX3NuX291dHcKKyNkZWZpbmUgX19zbl9vdXRsIF9fX3NuX291dGwKKyNkZWZpbmUgX19zbl9yZWFkYiBfX19zbl9yZWFkYgorI2RlZmluZSBfX3NuX3JlYWR3IF9fX3NuX3JlYWR3CisjZGVmaW5lIF9fc25fcmVhZGwgX19fc25fcmVhZGwKKyNkZWZpbmUgX19zbl9yZWFkcSBfX19zbl9yZWFkcQorI2RlZmluZSBfX3NuX3JlYWRiX3JlbGF4ZWQgX19fc25fcmVhZGJfcmVsYXhlZAorI2RlZmluZSBfX3NuX3JlYWR3X3JlbGF4ZWQgX19fc25fcmVhZHdfcmVsYXhlZAorI2RlZmluZSBfX3NuX3JlYWRsX3JlbGF4ZWQgX19fc25fcmVhZGxfcmVsYXhlZAorI2RlZmluZSBfX3NuX3JlYWRxX3JlbGF4ZWQgX19fc25fcmVhZHFfcmVsYXhlZAorCisvKgorICogVGhlIGZvbGxvd2luZyByb3V0aW5lcyBhcmUgU04gUGxhdGZvcm0gc3BlY2lmaWMsIGNhbGxlZCB3aGVuCisgKiBhIHJlZmVyZW5jZSBpcyBtYWRlIHRvIGluWC9vdXRYIHNldCBtYWNyb3MuICBTTiBQbGF0Zm9ybQorICogaW5YIHNldCBvZiBtYWNyb3MgZW5zdXJlcyB0aGF0IFBvc3RlZCBETUEgd3JpdGVzIG9uIHRoZQorICogQnJpZGdlIGlzIGZsdXNoZWQuCisgKgorICogVGhlIHJvdXRpbmVzIHNob3VsZCBiZSBzZWxmIGV4cGxhaW5hdG9yeS4KKyAqLworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAorX19fc25faW5iICh1bnNpZ25lZCBsb25nIHBvcnQpCit7CisJdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqYWRkcjsKKwl1bnNpZ25lZCBjaGFyIHJldCA9IC0xOworCisJaWYgKChhZGRyID0gc25faW9fYWRkcihwb3J0KSkpIHsKKwkJcmV0ID0gKmFkZHI7CisJCV9fc25fbWZfYSgpOworCQlzbl9kbWFfZmx1c2goKHVuc2lnbmVkIGxvbmcpYWRkcik7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CitfX19zbl9pbncgKHVuc2lnbmVkIGxvbmcgcG9ydCkKK3sKKwl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqYWRkcjsKKwl1bnNpZ25lZCBzaG9ydCByZXQgPSAtMTsKKworCWlmICgoYWRkciA9IHNuX2lvX2FkZHIocG9ydCkpKSB7CisJCXJldCA9ICphZGRyOworCQlfX3NuX21mX2EoKTsKKwkJc25fZG1hX2ZsdXNoKCh1bnNpZ25lZCBsb25nKWFkZHIpOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAorX19fc25faW5sICh1bnNpZ25lZCBsb25nIHBvcnQpCit7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50ICphZGRyOworCXVuc2lnbmVkIGludCByZXQgPSAtMTsKKworCWlmICgoYWRkciA9IHNuX2lvX2FkZHIocG9ydCkpKSB7CisJCXJldCA9ICphZGRyOworCQlfX3NuX21mX2EoKTsKKwkJc25fZG1hX2ZsdXNoKCh1bnNpZ25lZCBsb25nKWFkZHIpOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK19fX3NuX291dGIgKHVuc2lnbmVkIGNoYXIgdmFsLCB1bnNpZ25lZCBsb25nIHBvcnQpCit7CisJdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqYWRkcjsKKworCWlmICgoYWRkciA9IHNuX2lvX2FkZHIocG9ydCkpKSB7CisJCSphZGRyID0gdmFsOworCQlfX3NuX21taW93YigpOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkCitfX19zbl9vdXR3ICh1bnNpZ25lZCBzaG9ydCB2YWwsIHVuc2lnbmVkIGxvbmcgcG9ydCkKK3sKKwl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqYWRkcjsKKworCWlmICgoYWRkciA9IHNuX2lvX2FkZHIocG9ydCkpKSB7CisJCSphZGRyID0gdmFsOworCQlfX3NuX21taW93YigpOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkCitfX19zbl9vdXRsICh1bnNpZ25lZCBpbnQgdmFsLCB1bnNpZ25lZCBsb25nIHBvcnQpCit7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50ICphZGRyOworCisJaWYgKChhZGRyID0gc25faW9fYWRkcihwb3J0KSkpIHsKKwkJKmFkZHIgPSB2YWw7CisJCV9fc25fbW1pb3diKCk7CisJfQorfQorCisvKgorICogVGhlIGZvbGxvd2luZyByb3V0aW5lcyBhcmUgU04gUGxhdGZvcm0gc3BlY2lmaWMsIGNhbGxlZCB3aGVuIAorICogYSByZWZlcmVuY2UgaXMgbWFkZSB0byByZWFkWC93cml0ZVggc2V0IG1hY3Jvcy4gIFNOIFBsYXRmb3JtIAorICogcmVhZFggc2V0IG9mIG1hY3JvcyBlbnN1cmVzIHRoYXQgUG9zdGVkIERNQSB3cml0ZXMgb24gdGhlIAorICogQnJpZGdlIGlzIGZsdXNoZWQuCisgKiAKKyAqIFRoZSByb3V0aW5lcyBzaG91bGQgYmUgc2VsZiBleHBsYWluYXRvcnkuCisgKi8KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyCitfX19zbl9yZWFkYiAoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCXVuc2lnbmVkIGNoYXIgdmFsOworCisJdmFsID0gKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIF9fZm9yY2UgKilhZGRyOworCV9fc25fbWZfYSgpOworCXNuX2RtYV9mbHVzaCgodW5zaWduZWQgbG9uZylhZGRyKTsKKyAgICAgICAgcmV0dXJuIHZhbDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydAorX19fc25fcmVhZHcgKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwl1bnNpZ25lZCBzaG9ydCB2YWw7CisKKwl2YWwgPSAqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IF9fZm9yY2UgKilhZGRyOworCV9fc25fbWZfYSgpOworCXNuX2RtYV9mbHVzaCgodW5zaWduZWQgbG9uZylhZGRyKTsKKyAgICAgICAgcmV0dXJuIHZhbDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKK19fX3NuX3JlYWRsIChjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJdW5zaWduZWQgaW50IHZhbDsKKworCXZhbCA9ICoodm9sYXRpbGUgdW5zaWduZWQgaW50IF9fZm9yY2UgKilhZGRyOworCV9fc25fbWZfYSgpOworCXNuX2RtYV9mbHVzaCgodW5zaWduZWQgbG9uZylhZGRyKTsKKyAgICAgICAgcmV0dXJuIHZhbDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCitfX19zbl9yZWFkcSAoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCXVuc2lnbmVkIGxvbmcgdmFsOworCisJdmFsID0gKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nIF9fZm9yY2UgKilhZGRyOworCV9fc25fbWZfYSgpOworCXNuX2RtYV9mbHVzaCgodW5zaWduZWQgbG9uZylhZGRyKTsKKyAgICAgICAgcmV0dXJuIHZhbDsKK30KKworLyoKKyAqIEZvciBnZW5lcmljIGFuZCBTTjIga2VybmVscywgd2UgaGF2ZSBhIHNldCBvZiBmYXN0IGFjY2VzcworICogUElPIG1hY3Jvcy4JVGhlc2UgbWFjcm9zIGFyZSBwcm92aWRlZCBvbiBTTiBQbGF0Zm9ybQorICogYmVjYXVzZSB0aGUgbm9ybWFsIGluWCBhbmQgcmVhZFggbWFjcm9zIHBlcmZvcm0gYW4KKyAqIGFkZGl0aW9uYWwgdGFzayBvZiBmbHVzaGluZyBQb3N0IERNQSByZXF1ZXN0IG9uIHRoZSBCcmlkZ2UuCisgKgorICogVGhlc2Ugcm91dGluZXMgc2hvdWxkIGJlIHNlbGYgZXhwbGFpbmF0b3J5LgorICovCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50Citzbl9pbmJfZmFzdCAodW5zaWduZWQgbG9uZyBwb3J0KQoreworCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKmFkZHIgPSAodW5zaWduZWQgY2hhciAqKXBvcnQ7CisJdW5zaWduZWQgY2hhciByZXQ7CisKKwlyZXQgPSAqYWRkcjsKKwlfX3NuX21mX2EoKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAorc25faW53X2Zhc3QgKHVuc2lnbmVkIGxvbmcgcG9ydCkKK3sKKwl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqYWRkciA9ICh1bnNpZ25lZCBzaG9ydCAqKXBvcnQ7CisJdW5zaWduZWQgc2hvcnQgcmV0OworCisJcmV0ID0gKmFkZHI7CisJX19zbl9tZl9hKCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKK3NuX2lubF9mYXN0ICh1bnNpZ25lZCBsb25nIHBvcnQpCit7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50ICphZGRyID0gKHVuc2lnbmVkIGludCAqKXBvcnQ7CisJdW5zaWduZWQgaW50IHJldDsKKworCXJldCA9ICphZGRyOworCV9fc25fbWZfYSgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhcgorX19fc25fcmVhZGJfcmVsYXhlZCAoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCXJldHVybiAqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgX19mb3JjZSAqKWFkZHI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQKK19fX3NuX3JlYWR3X3JlbGF4ZWQgKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlyZXR1cm4gKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBfX2ZvcmNlICopYWRkcjsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKK19fX3NuX3JlYWRsX3JlbGF4ZWQgKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlyZXR1cm4gKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgX19mb3JjZSAqKSBhZGRyOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK19fX3NuX3JlYWRxX3JlbGF4ZWQgKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlyZXR1cm4gKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nIF9fZm9yY2UgKikgYWRkcjsKK30KKworc3RydWN0IHBjaV9kZXY7CisKK3N0YXRpYyBpbmxpbmUgaW50Citzbl9wY2lfc2V0X3ZjaGFuKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2LCB1bnNpZ25lZCBsb25nICphZGRyLCBpbnQgdmNoYW4pCit7CisKKwlpZiAodmNoYW4gPiAxKSB7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoISgqYWRkciA+PiAzMikpCS8qIFVzaW5nIGEgbWFzayBoZXJlIHdvdWxkIGJlIGNsZWFuZXIgKi8KKwkJcmV0dXJuIDA7CS8qIGJ1dCB0aGlzIGdlbmVyYXRlcyBiZXR0ZXIgY29kZSAqLworCisJaWYgKHZjaGFuID09IDEpIHsKKwkJLyogU2V0IEJpdCA1NyAqLworCQkqYWRkciB8PSAoMVVMIDw8IDU3KTsKKwl9IGVsc2UgeworCQkvKiBDbGVhciBCaXQgNTcgKi8KKwkJKmFkZHIgJj0gfigxVUwgPDwgNTcpOworCX0KKworCXJldHVybiAwOworfQorCisjZW5kaWYJLyogX0FTTV9TTl9JT19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3NuL2tsY29uZmlnLmggYi9pbmNsdWRlL2FzbS1pYTY0L3NuL2tsY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY5MjBjNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvc24va2xjb25maWcuaApAQCAtMCwwICsxLDI3MiBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIERlcml2ZWQgZnJvbSBJUklYIDxzeXMvU04va2xjb25maWcuaD4uCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkyLTE5OTcsMTk5OSwyMDAxLTIwMDQgU2lsaWNvbiBHcmFwaGljcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMTk5OSBieSBSYWxmIEJhZWNobGUKKyAqLworI2lmbmRlZiBfQVNNX0lBNjRfU05fS0xDT05GSUdfSAorI2RlZmluZSBfQVNNX0lBNjRfU05fS0xDT05GSUdfSAorCisvKgorICogVGhlIEtMQ09ORklHIHN0cnVjdHVyZXMgc3RvcmUgaW5mbyBhYm91dCB0aGUgdmFyaW91cyBCT0FSRHMgZm91bmQKKyAqIGR1cmluZyBIYXJkd2FyZSBEaXNjb3ZlcnkuIEluIGFkZGl0aW9uLCBpdCBzdG9yZXMgaW5mbyBhYm91dCB0aGUKKyAqIGNvbXBvbmVudHMgZm91bmQgb24gdGhlIEJPQVJEcy4KKyAqLworCit0eXBlZGVmIHMzMiBrbGNvbmZfb2ZmX3Q7CisKKworLyogRnVuY3Rpb25zL21hY3JvcyBuZWVkZWQgdG8gdXNlIHRoaXMgc3RydWN0dXJlICovCisKK3R5cGVkZWYgc3RydWN0IGtsX2NvbmZpZ19oZHIgeworCWNoYXIJCXBhZFsyMF07CisJa2xjb25mX29mZl90CWNoX2JvYXJkX2luZm87CS8qIHRoZSBsaW5rIGxpc3Qgb2YgYm9hcmRzICovCisJY2hhcgkJcGFkMFs4OF07Cit9IGtsX2NvbmZpZ19oZHJfdDsKKworCisjZGVmaW5lIE5PREVfT0ZGU0VUX1RPX0xCT0FSRChuYXNpZCxvZmYpICAgICAgICAobGJvYXJkX3QqKShHTE9CQUxfQ0FDX0FERFIoKG5hc2lkKSwgKG9mZikpKQorCisvKgorICogVGhlIEtMQ09ORklHIGFyZWEgaXMgb3JnYW5pemVkIGFzIGEgTElOS0VEIExJU1Qgb2YgQk9BUkRzLiBBIEJPQVJECisgKiBjYW4gYmUgZWl0aGVyICdMT0NBTCcgb3IgJ1JFTU9URScuIExPQ0FMIG1lYW5zIGl0IGlzIGF0dGFjaGVkIHRvIAorICogdGhlIExPQ0FML2N1cnJlbnQgTk9ERS4gUkVNT1RFIG1lYW5zIGl0IGlzIGF0dGFjaGVkIHRvIGEgZGlmZmVyZW50CisgKiBub2RlLihUQkQgLSBOZWVkIGEgd2F5IHRvIHRyZWF0IFJPVVRFUiBib2FyZHMuKQorICoKKyAqIFRoZXJlIGFyZSAyIGRpZmZlcmVudCBzdHJ1Y3R1cmVzIHRvIHJlcHJlc2VudCB0aGVzZSBib2FyZHMgLQorICogbGJvYXJkIC0gTG9jYWwgYm9hcmQsIHJib2FyZCAtIHJlbW90ZSBib2FyZC4gVGhlc2UgMiBzdHJ1Y3R1cmVzCisgKiBjYW4gYmUgYXJiaXRyYXJpbHkgbWl4ZWQgaW4gdGhlIExJTktFRCBMSVNUIG9mIEJPQVJEcy4gKFJlZmVyCisgKiBGaWd1cmUgYmVsb3cpLiBUaGUgZmlyc3QgYnl0ZSBvZiB0aGUgcmJvYXJkIG9yIGxib2FyZCBzdHJ1Y3R1cmUKKyAqIGlzIHVzZWQgdG8gZmluZCBvdXQgaXRzIHR5cGUgLSBubyB1bmlvbnMgYXJlIHVzZWQuCisgKiBJZiBpdCBpcyBhIGxib2FyZCwgdGhlbiB0aGUgY29uZmlnIGluZm8gb2YgdGhpcyBib2FyZCB3aWxsIGJlIGZvdW5kCisgKiBvbiB0aGUgbG9jYWwgbm9kZS4gKExPQ0FMIE5PREUgQkFTRSArIG9mZnNldCB2YWx1ZSBnaXZlcyBwb2ludGVyIHRvIAorICogdGhlIHN0cnVjdHVyZS4KKyAqIElmIGl0IGlzIGEgcmJvYXJkLCB0aGUgbG9jYWwgc3RydWN0dXJlIGNvbnRhaW5zIHRoZSBub2RlIG51bWJlcgorICogYW5kIHRoZSBvZmZzZXQgb2YgdGhlIGJlZ2lubmluZyBvZiB0aGUgTElOS0VEIExJU1Qgb24gdGhlIHJlbW90ZSBub2RlLgorICogVGhlIGRldGFpbHMgb2YgdGhlIGhhcmR3YXJlIG9uIGEgcmVtb3RlIG5vZGUgY2FuIGJlIGJ1aWx0IGxvY2FsbHksCisgKiBpZiByZXF1aXJlZCwgYnkgcmVhZGluZyB0aGUgTElOS0VEIExJU1Qgb24gdGhlIHJlbW90ZSBub2RlIGFuZCAKKyAqIGlnbm9yaW5nIGFsbCB0aGUgcmJvYXJkcyBvbiB0aGF0IG5vZGUuCisgKgorICogVGhlIGxvY2FsIG5vZGUgdXNlcyB0aGUgUkVNT1RFIE5PREUgTlVNQkVSICsgT0ZGU0VUIHRvIHBvaW50IHRvIHRoZSAKKyAqIEZpcnN0IGJvYXJkIGluZm8gb24gdGhlIHJlbW90ZSBub2RlLiBUaGUgcmVtb3RlIG5vZGUgbGlzdCBpcyAKKyAqIHRyYXZlcnNlZCBhcyB0aGUgbG9jYWwgbGlzdCwgdXNpbmcgdGhlIFJFTU9URSBCQVNFIEFERFJFU1MgYW5kIG5vdAorICogdGhlIGxvY2FsIGJhc2UgYWRkcmVzcyBhbmQgaWdub3JpbmcgYWxsIHJib2FyZCB2YWx1ZXMuCisgKgorICogCisgS0xDT05GSUcKKworICstLS0tLS0tLS0tLS0rICAgICAgKy0tLS0tLS0tLS0tLSsgICAgICArLS0tLS0tLS0tLS0tKyAgICAgICstLS0tLS0tLS0tLS0rCisgfCAgbGJvYXJkICAgIHwgICstLT58ICAgbGJvYXJkICAgfCAgKy0tPnwgICByYm9hcmQgICB8ICArLS0+fCAgIGxib2FyZCAgIHwKKyArLS0tLS0tLS0tLS0tKyAgfCAgICstLS0tLS0tLS0tLS0rICB8ICAgKy0tLS0tLS0tLS0tLSsgIHwgICArLS0tLS0tLS0tLS0tKworIHwgYm9hcmQgaW5mbyB8ICB8ICAgfCBib2FyZCBpbmZvIHwgIHwgICB8ZXJyaW5mbyxicHRyfCAgfCAgIHwgYm9hcmQgaW5mbyB8CisgKy0tLS0tLS0tLS0tLSsgIHwgICArLS0tLS0tLS0tLS0tKyAgfCAgICstLS0tLS0tLS0tLS0rICB8ICAgKy0tLS0tLS0tLS0tLSsKKyB8IG9mZnNldCAgICAgfC0tKyAgIHwgIG9mZnNldCAgICB8LS0rICAgfCAgb2Zmc2V0ICAgIHwtLSsgICB8b2Zmc2V0PU5VTEwgfAorICstLS0tLS0tLS0tLS0rICAgICAgKy0tLS0tLS0tLS0tLSsgICAgICArLS0tLS0tLS0tLS0tKyAgICAgICstLS0tLS0tLS0tLS0rCisKKworICstLS0tLS0tLS0tLS0rCisgfCBib2FyZCBpbmZvIHwKKyArLS0tLS0tLS0tLS0tKyAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgfCBjb21wdCAxICAgIHwtLS0tLS0+fCB0eXBlLCByZXYsIGRpYWdpbmZvLCBzaXplIC4uLiAgfCAgKENQVSkKKyArLS0tLS0tLS0tLS0tKyAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgfCBjb21wdCAyICAgIHwtLSsKKyArLS0tLS0tLS0tLS0tKyAgfCAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgfCAgLi4uICAgICAgIHwgICstLS0+fCB0eXBlLCByZXYsIGRpYWdpbmZvLCBzaXplIC4uLiAgfCAgKE1FTV9CQU5LKQorICstLS0tLS0tLS0tLS0rICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyB8IGVycmluZm8gICAgfC0tKworICstLS0tLS0tLS0tLS0rICB8ICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgKy0tLT58ci9sIGJyZCBlcnJpbmZvLGNvbXB0IGVyciBmbGFncyB8CisgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisgKgorICogRWFjaCBCT0FSRCBjb25zaXN0cyBvZiBDT01QT05FTlRzIGFuZCB0aGUgQk9BUkQgc3RydWN0dXJlIGhhcyAKKyAqIHBvaW50ZXJzIChvZmZzZXRzKSB0byBpdHMgQ09NUE9ORU5UIHN0cnVjdHVyZS4KKyAqIFRoZSBDT01QT05FTlQgc3RydWN0dXJlIGhhcyB2ZXJzaW9uIGluZm8sIHNpemUgYW5kIHNwZWVkIGluZm8sIHJldmlzaW9uLAorICogZXJyb3IgaW5mbyBhbmQgdGhlIE5JQyBpbmZvLiBUaGlzIHN0cnVjdHVyZSBjYW4gYWNjb21tb2RhdGUgYW55CisgKiBCT0FSRCB3aXRoIGFyYml0cmFyeSBDT01QT05FTlQgY29tcG9zaXRpb24uCisgKgorICogVGhlIEVSUk9SSU5GTyBwYXJ0IG9mIGVhY2ggQk9BUkQgaGFzIGVycm9yIGluZm9ybWF0aW9uCisgKiB0aGF0IGRlc2NyaWJlcyBlcnJvcnMgYWJvdXQgdGhlIEJPQVJEIGl0c2VsZi4gSXQgYWxzbyBoYXMgZmxhZ3MgdG8KKyAqIGluZGljYXRlIHRoZSBDT01QT05FTlQocykgb24gdGhlIGJvYXJkIHRoYXQgaGF2ZSBlcnJvcnMuIFRoZSBlcnJvciAKKyAqIGluZm9ybWF0aW9uIHNwZWNpZmljIHRvIHRoZSBDT01QT05FTlQgaXMgcHJlc2VudCBpbiB0aGUgcmVzcGVjdGl2ZSAKKyAqIENPTVBPTkVOVCBzdHJ1Y3R1cmUuCisgKgorICogVGhlIEVSUk9SSU5GTyBzdHJ1Y3R1cmUgaXMgYWxzbyB0cmVhdGVkIGxpa2UgYSBDT01QT05FTlQsIGllLiB0aGUgCisgKiBCT0FSRCBoYXMgcG9pbnRlcnMob2Zmc2V0KSB0byB0aGUgRVJST1JJTkZPIHN0cnVjdHVyZS4gVGhlIHJib2FyZAorICogc3RydWN0dXJlIGFsc28gaGFzIGEgcG9pbnRlciB0byB0aGUgRVJST1JJTkZPIHN0cnVjdHVyZS4gVGhpcyBpcyAKKyAqIHRoZSBwbGFjZSB0byBzdG9yZSBFUlJPUklORk8gYWJvdXQgYSBSRU1PVEUgTk9ERSwgaWYgdGhlIEhVQiBvbgorICogdGhhdCBOT0RFIGlzIG5vdCB3b3JraW5nIG9yIGlmIHRoZSBSRU1PVEUgTUVNT1JZIGlzIEJBRC4gSW4gY2FzZXMgd2hlcmUgCisgKiBvbmx5IHRoZSBDUFUgb2YgdGhlIFJFTU9URSBOT0RFIGlzIGRpc2FibGVkLCB0aGUgRVJST1JJTkZPIHBvaW50ZXIgY2FuCisgKiBiZSBhIE5PREUgTlVNQkVSLCBSRU1PVEUgT0ZGU0VUIGNvbWJpbmF0aW9uLCBwb2ludGluZyB0byBlcnJvciBpbmZvIAorICogd2hpY2ggaXMgcHJlc2VudCBvbiB0aGUgUkVNT1RFIE5PREUuKFRCRCkKKyAqIFJFTU9URSBFUlJJTkZPIGNhbiBiZSBzdG9yZWQgb24gYW55IG9mIHRoZSBuZWFyZXN0IG5vZGVzIAorICogb3Igb24gYWxsIHRoZSBuZWFyZXN0IG5vZGVzLihUQkQpCisgKiBMaWtlIEJPQVJEIHN0cnVjdHVyZXMsIFJFTU9URSBFUlJJTkZPIHN0cnVjdHVyZXMgY2FuIGJlIGJ1aWx0IGxvY2FsbHkKKyAqIHVzaW5nIHRoZSByYm9hcmQgZXJyaW5mbyBwb2ludGVyLgorICoKKyAqIEluIG9yZGVyIHRvIGdldCB1c2VmdWwgaW5mb3JtYXRpb24gZnJvbSB0aGlzIERhdGEgb3JnYW5pemF0aW9uLCBhIHNldCBvZgorICogaW50ZXJmYWNlIHJvdXRpbmVzIGFyZSBwcm92aWRlZCAoVEJEKS4gVGhlIGltcG9ydGFudCB0aGluZyB0byByZW1lbWJlciB3aGlsZQorICogbWFuaXB1bGF0aW5nIHRoZSBzdHJ1Y3R1cmVzLCBpcyB0aGF0LCB0aGUgTk9ERSBudW1iZXIgaW5mb3JtYXRpb24gc2hvdWxkCisgKiBiZSB1c2VkLiBJZiB0aGUgTk9ERSBpcyBub24temVybyAocmVtb3RlKSB0aGVuIGVhY2ggb2Zmc2V0IHNob3VsZAorICogYmUgYWRkZWQgdG8gdGhlIFJFTU9URSBCQVNFIEFERFIgZWxzZSBpdCBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIExPQ0FMIEJBU0UgQUREUi4gCisgKiBUaGlzIGluY2x1ZGVzIG9mZnNldHMgZm9yIEJPQVJEUywgQ09NUE9ORU5UUyBhbmQgRVJST1JJTkZPLgorICogCisgKiBOb3RlIHRoYXQgdGhlc2Ugc3RydWN0dXJlcyBkbyBub3QgcHJvdmlkZSBtdWNoIGluZm8gYWJvdXQgY29ubmVjdGl2aXR5LgorICogVGhhdCBpbmZvIHdpbGwgYmUgcGFydCBvZiBIV0dSQVBILCB3aGljaCBpcyBhbiBleHRlbnNpb24gb2YgdGhlIGNmZ190CisgKiBkYXRhIHN0cnVjdHVyZS4gKHJlZiBJUDI3cHJvbS9jZmcuaCkgSXQgaGFzIHRvIGJlIGV4dGVuZGVkIHRvIGluY2x1ZGUKKyAqIHRoZSBJTyBwYXJ0IG9mIHRoZSBOZXR3b3JrKFRCRCkuCisgKgorICogVGhlIGRhdGEgc3RydWN0dXJlcyBiZWxvdyBkZWZpbmUgdGhlIGFib3ZlIGNvbmNlcHRzLgorICovCisKKworLyoKKyAqIEJPQVJEIGNsYXNzZXMKKyAqLworCisjZGVmaW5lIEtMQ0xBU1NfTUFTSwkweGYwICAgCisjZGVmaW5lIEtMQ0xBU1NfTk9ORQkweDAwCisjZGVmaW5lIEtMQ0xBU1NfTk9ERQkweDEwICAgICAgICAgICAgIC8qIENQVSwgTWVtb3J5IGFuZCBIVUIgYm9hcmQgKi8KKyNkZWZpbmUgS0xDTEFTU19DUFUJS0xDTEFTU19OT0RFCQorI2RlZmluZSBLTENMQVNTX0lPCTB4MjAgICAgICAgICAgICAgLyogQmFzZUlPLCA0IGNoIFNDU0ksIGV0aGVybmV0LCBGRERJIAorCQkJCQkgICAgYW5kIHRoZSBub24tZ3JhcGhpY3Mgd2lkZ2V0IGJvYXJkcyAqLworI2RlZmluZSBLTENMQVNTX1JPVVRFUgkweDMwICAgICAgICAgICAgIC8qIFJvdXRlciBib2FyZCAqLworI2RlZmluZSBLTENMQVNTX01JRFBMQU5FIDB4NDAgICAgICAgICAgICAvKiBXZSBuZWVkIHRvIHRyZWF0IHRoaXMgYXMgYSBib2FyZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbyB0aGF0IHdlIGNhbiByZWNvcmQgZXJyb3IgaW5mbyAqLworI2RlZmluZSBLTENMQVNTX0lPQlJJQ0sJMHg3MAkJLyogSVAzNSBpb2JyaWNrICovCisjZGVmaW5lIEtMQ0xBU1NfTUFYCTgJCS8qIEJ1bXAgdGhpcyBpZiBhIG5ldyBDTEFTUyBpcyBhZGRlZCAqLworCisjZGVmaW5lIEtMQ0xBU1MoX3gpICgoX3gpICYgS0xDTEFTU19NQVNLKQorCisKKy8qCisgKiBib2FyZCB0eXBlcworICovCisKKyNkZWZpbmUgS0xUWVBFX01BU0sJMHgwZgorI2RlZmluZSBLTFRZUEUoX3gpICAgICAgKChfeCkgJiBLTFRZUEVfTUFTSykKKworI2RlZmluZSBLTFRZUEVfU05JQQkoS0xDTEFTU19DUFUgfCAweDEpCisjZGVmaW5lIEtMVFlQRV9USU8JKEtMQ0xBU1NfQ1BVIHwgMHgyKQorCisjZGVmaW5lIEtMVFlQRV9ST1VURVIgICAgIChLTENMQVNTX1JPVVRFUiB8IDB4MSkKKyNkZWZpbmUgS0xUWVBFX01FVEFfUk9VVEVSIChLTENMQVNTX1JPVVRFUiB8IDB4MykKKyNkZWZpbmUgS0xUWVBFX1JFUEVBVEVSX1JPVVRFUiAoS0xDTEFTU19ST1VURVIgfCAweDQpCisKKyNkZWZpbmUgS0xUWVBFX0lPQlJJQ0tfWEJPVwkoS0xDTEFTU19NSURQTEFORSB8IDB4MikKKworI2RlZmluZSBLTFRZUEVfSU9CUklDSwkJKEtMQ0xBU1NfSU9CUklDSyB8IDB4MCkKKyNkZWZpbmUgS0xUWVBFX05CUklDSwkJKEtMQ0xBU1NfSU9CUklDSyB8IDB4NCkKKyNkZWZpbmUgS0xUWVBFX1BYQlJJQ0sJCShLTENMQVNTX0lPQlJJQ0sgfCAweDYpCisjZGVmaW5lIEtMVFlQRV9JWEJSSUNLCQkoS0xDTEFTU19JT0JSSUNLIHwgMHg3KQorI2RlZmluZSBLTFRZUEVfQ0dCUklDSwkJKEtMQ0xBU1NfSU9CUklDSyB8IDB4OCkKKyNkZWZpbmUgS0xUWVBFX09QVVNCUklDSwkoS0xDTEFTU19JT0JSSUNLIHwgMHg5KQorI2RlZmluZSBLTFRZUEVfU0FCUklDSyAgICAgICAgICAoS0xDTEFTU19JT0JSSUNLIHwgMHhhKQorI2RlZmluZSBLTFRZUEVfSUFCUklDSwkJKEtMQ0xBU1NfSU9CUklDSyB8IDB4YikKKyNkZWZpbmUgS0xUWVBFX1BBQlJJQ0sgICAgICAgICAgKEtMQ0xBU1NfSU9CUklDSyB8IDB4YykKKyNkZWZpbmUgS0xUWVBFX0dBQlJJQ0sJCShLTENMQVNTX0lPQlJJQ0sgfCAweGQpCisKKworLyogCisgKiBib2FyZCBzdHJ1Y3R1cmVzCisgKi8KKworI2RlZmluZSBNQVhfQ09NUFRTX1BFUl9CUkQgMjQKKwordHlwZWRlZiBzdHJ1Y3QgbGJvYXJkX3MgeworCWtsY29uZl9vZmZfdCAJYnJkX25leHRfYW55OyAgICAgLyogTmV4dCBCT0FSRCAqLworCXVuc2lnbmVkIGNoYXIgCXN0cnVjdF90eXBlOyAgICAgIC8qIHR5cGUgb2Ygc3RydWN0dXJlLCBsb2NhbCBvciByZW1vdGUgKi8KKwl1bnNpZ25lZCBjaGFyIAlicmRfdHlwZTsgICAgICAgICAvKiB0eXBlK2NsYXNzICovCisJdW5zaWduZWQgY2hhciAJYnJkX3N2ZXJzaW9uOyAgICAgLyogdmVyc2lvbiBvZiB0aGlzIHN0cnVjdHVyZSAqLworICAgICAgICB1bnNpZ25lZCBjaGFyIAlicmRfYnJldmlzaW9uOyAgICAvKiBib2FyZCByZXZpc2lvbiAqLworICAgICAgICB1bnNpZ25lZCBjaGFyIAlicmRfcHJvbXZlcjsgICAgICAvKiBib2FyZCBwcm9tIHZlcnNpb24sIGlmIGFueSAqLworIAl1bnNpZ25lZCBjaGFyIAlicmRfZmxhZ3M7ICAgICAgICAvKiBFbmFibGVkLCBEaXNhYmxlZCBldGMgKi8KKwl1bnNpZ25lZCBjaGFyIAlicmRfc2xvdDsgICAgICAgICAvKiBzbG90IG51bWJlciAqLworCXVuc2lnbmVkIHNob3J0CWJyZF9kZWJ1Z3N3OyAgICAgIC8qIERlYnVnIHN3aXRjaGVzICovCisJZ2VvaWRfdAkJYnJkX2dlb2lkOwkgIC8qIGdlbyBpZCAqLworCXBhcnRpZF90IAlicmRfcGFydGl0aW9uOyAgICAvKiBQYXJ0aXRpb24gbnVtYmVyICovCisgICAgICAgIHVuc2lnbmVkIHNob3J0IAlicmRfZGlhZ3ZhbDsgICAgICAvKiBkaWFnbm9zdGljIHZhbHVlICovCisgICAgICAgIHVuc2lnbmVkIHNob3J0IAlicmRfZGlhZ3Bhcm07ICAgICAvKiBkaWFnbm9zdGljIHBhcmFtZXRlciAqLworICAgICAgICB1bnNpZ25lZCBjaGFyIAlicmRfaW52ZW50b3J5OyAgICAvKiBpbnZlbnRvcnkgaGlzdG9yeSAqLworICAgICAgICB1bnNpZ25lZCBjaGFyIAlicmRfbnVtY29tcHRzOyAgICAvKiBOdW1iZXIgb2YgY29tcG9uZW50cyAqLworICAgICAgICBuaWNfdCAgICAgICAgIAlicmRfbmljOyAgICAgICAgICAvKiBOdW1iZXIgaW4gQ0FOICovCisJbmFzaWRfdAkJYnJkX25hc2lkOyAgICAgICAgLyogcGFzc2VkIHBhcmFtZXRlciAqLworCWtsY29uZl9vZmZfdCAJYnJkX2NvbXB0c1tNQVhfQ09NUFRTX1BFUl9CUkRdOyAvKiBwb2ludGVycyB0byBDT01QT05FTlRTICovCisJa2xjb25mX29mZl90IAlicmRfZXJyaW5mbzsgICAgICAvKiBCb2FyZCdzIGVycm9yIGluZm9ybWF0aW9uICovCisJc3RydWN0IGxib2FyZF9zICpicmRfcGFyZW50OwkgIC8qIExvZ2ljYWwgcGFyZW50IGZvciB0aGlzIGJyZCAqLworCWNoYXIgICAgICAgICAgICBwYWQwWzRdOworCXVuc2lnbmVkIGNoYXIJYnJkX2NvbmZpZGVuY2U7CSAgLyogY29uZmlkZW5jZSB0aGF0IHRoZSBib2FyZCBpcyBiYWQgKi8KKwluYXNpZF90CQlicmRfb3duZXI7ICAgICAgICAvKiB3aG8gb3ducyB0aGlzIGJvYXJkICovCisJdW5zaWduZWQgY2hhciAJYnJkX25pY19mbGFnczsgICAgLyogVG8gaGFuZGxlIDggbW9yZSBOSUNzICovCisJY2hhcgkJcGFkMVsyNF07CSAgLyogZnV0dXJlIGV4cGFuc2lvbiAqLworCWNoYXIJCWJyZF9uYW1lWzMyXTsKKwluYXNpZF90CQlicmRfbmV4dF9zYW1lX2hvc3Q7IC8qIGhvc3Qgb2YgbmV4dCBicmQgdy9zYW1lIG5hc2lkICovCisJa2xjb25mX29mZl90CWJyZF9uZXh0X3NhbWU7ICAgIC8qIE5leHQgQk9BUkQgd2l0aCBzYW1lIG5hc2lkICovCit9IGxib2FyZF90OworCisjZGVmaW5lIEtMQ0ZfTlVNX0NPTVBTKF9icmQpCSgoX2JyZCktPmJyZF9udW1jb21wdHMpCisjZGVmaW5lIE5PREVfT0ZGU0VUX1RPX0tMSU5GTyhuLG9mZikgICAgKChrbGluZm9fdCopIFRPX05PREVfQ0FDKG4sb2ZmKSkKKyNkZWZpbmUgS0xDRl9ORVhUKF9icmQpICAgICAgICAgXAorICAgICAgICAoKF9icmQpLT5icmRfbmV4dF9zYW1lID8gICAgIFwKKyAgICAgICAgIChOT0RFX09GRlNFVF9UT19MQk9BUkQoKF9icmQpLT5icmRfbmV4dF9zYW1lX2hvc3QsIChfYnJkKS0+YnJkX25leHRfc2FtZSkpOiBOVUxMKQorI2RlZmluZSBLTENGX05FWFRfQU5ZKF9icmQpICAgICAgICAgXAorICAgICAgICAoKF9icmQpLT5icmRfbmV4dF9hbnkgPyAgICAgXAorICAgICAgICAgKE5PREVfT0ZGU0VUX1RPX0xCT0FSRChOQVNJRF9HRVQoX2JyZCksIChfYnJkKS0+YnJkX25leHRfYW55KSk6IE5VTEwpCisjZGVmaW5lIEtMQ0ZfQ09NUChfYnJkLCBfbmR4KSAgIFwKKyAgICAgICAgICAgICAgICAoKCgoX2JyZCktPmJyZF9jb21wdHNbKF9uZHgpXSkgPT0gMCkgPyAwIDogXAorCQkJKE5PREVfT0ZGU0VUX1RPX0tMSU5GTyhOQVNJRF9HRVQoX2JyZCksIChfYnJkKS0+YnJkX2NvbXB0c1soX25keCldKSkpCisKKworLyoKKyAqIEdlbmVyaWMgaW5mbyBzdHJ1Y3R1cmUuIFRoaXMgc3RvcmVzIGNvbW1vbiBpbmZvIGFib3V0IGEgCisgKiBjb21wb25lbnQuCisgKi8KKyAKK3R5cGVkZWYgc3RydWN0IGtsaW5mb19zIHsgICAgICAgICAgICAgICAgICAvKiBHZW5lcmljIGluZm8gKi8KKyAgICAgICAgdW5zaWduZWQgY2hhciAgIHN0cnVjdF90eXBlOyAgICAgICAvKiB0eXBlIG9mIHRoaXMgc3RydWN0dXJlICovCisgICAgICAgIHVuc2lnbmVkIGNoYXIgICBzdHJ1Y3RfdmVyc2lvbjsgICAgLyogdmVyc2lvbiBvZiB0aGlzIHN0cnVjdHVyZSAqLworICAgICAgICB1bnNpZ25lZCBjaGFyICAgZmxhZ3M7ICAgICAgICAgICAgLyogRW5hYmxlZCwgZGlzYWJsZWQgZXRjICovCisgICAgICAgIHVuc2lnbmVkIGNoYXIgICByZXZpc2lvbjsgICAgICAgICAvKiBjb21wb25lbnQgcmV2aXNpb24gKi8KKyAgICAgICAgdW5zaWduZWQgc2hvcnQgIGRpYWd2YWw7ICAgICAgICAgIC8qIHJlc3VsdCBvZiBkaWFnbm9zdGljcyAqLworICAgICAgICB1bnNpZ25lZCBzaG9ydCAgZGlhZ3Bhcm07ICAgICAgICAgLyogZGlhZ25vc3RpYyBwYXJhbWV0ZXIgKi8KKyAgICAgICAgdW5zaWduZWQgY2hhciAgIGludmVudG9yeTsgICAgICAgIC8qIHByZXZpb3VzIGludmVudG9yeSBzdGF0dXMgKi8KKyAgICAgICAgdW5zaWduZWQgc2hvcnQgIHBhcnRpZDsJCSAgIC8qIHdpZGdldCBwYXJ0IG51bWJlciAqLworCW5pY190IAkJbmljOyAgICAgICAgICAgICAgLyogTVVzdCBiZSBhbGlnbmVkIHByb3Blcmx5ICovCisgICAgICAgIHVuc2lnbmVkIGNoYXIgICBwaHlzaWQ7ICAgICAgICAgICAvKiBwaHlzaWNhbCBpZCBvZiBjb21wb25lbnQgKi8KKyAgICAgICAgdW5zaWduZWQgaW50ICAgIHZpcnRpZDsgICAgICAgICAgIC8qIHZpcnR1YWwgaWQgYXMgc2VlbiBieSBzeXN0ZW0gKi8KKwl1bnNpZ25lZCBjaGFyCXdpZGlkOwkgICAgICAgICAgLyogV2lkZ2V0IGlkIC0gaWYgYXBwbGljYWJsZSAqLworCW5hc2lkX3QJCW5hc2lkOyAgICAgICAgICAgIC8qIG5vZGUgbnVtYmVyIC0gZnJvbSBwYXJlbnQgKi8KKwljaGFyCQlwYWQxOwkJICAvKiBwYWQgb3V0IHN0cnVjdHVyZS4gKi8KKwljaGFyCQlwYWQyOwkJICAvKiBwYWQgb3V0IHN0cnVjdHVyZS4gKi8KKwl2b2lkCQkqZGF0YTsKKyAgICAgICAga2xjb25mX29mZl90CWVycmluZm87ICAgICAgICAgIC8qIGNvbXBvbmVudCBzcGVjaWZpYyBlcnJvcnMgKi8KKyAgICAgICAgdW5zaWduZWQgc2hvcnQgIHBhZDM7ICAgICAgICAgICAgIC8qIHBjaSBmaWVsZHMgaGF2ZSBtb3ZlZCBvdmVyIHRvICovCisgICAgICAgIHVuc2lnbmVkIHNob3J0ICBwYWQ0OyAgICAgICAgICAgICAvKiBrbGJyaV90ICovCit9IGtsaW5mb190IDsKKworCitzdGF0aWMgaW5saW5lIGxib2FyZF90ICpmaW5kX2xib2FyZF9hbnkobGJvYXJkX3QgKiBzdGFydCwgdW5zaWduZWQgY2hhciBicmRfdHlwZSkKK3sKKyAgICAgICAgLyogU2VhcmNoIGFsbCBib2FyZHMgc3RvcmVkIG9uIHRoaXMgbm9kZS4gKi8KKworICAgICAgICB3aGlsZSAoc3RhcnQpIHsKKyAgICAgICAgICAgICAgICBpZiAoc3RhcnQtPmJyZF90eXBlID09IGJyZF90eXBlKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXJ0OworICAgICAgICAgICAgICAgIHN0YXJ0ID0gS0xDRl9ORVhUX0FOWShzdGFydCk7CisgICAgICAgIH0KKyAgICAgICAgLyogRGlkbid0IGZpbmQgaXQuICovCisgICAgICAgIHJldHVybiAobGJvYXJkX3QgKikgTlVMTDsKK30KKworCisvKiBleHRlcm5hbCBkZWNsYXJhdGlvbnMgb2YgTGludXgga2VybmVsIGZ1bmN0aW9ucy4gKi8KKworZXh0ZXJuIGxib2FyZF90ICpyb290X2xib2FyZFtdOworZXh0ZXJuIGtsaW5mb190ICpmaW5kX2NvbXBvbmVudChsYm9hcmRfdCAqYnJkLCBrbGluZm9fdCAqa2xpLCB1bnNpZ25lZCBjaGFyIHR5cGUpOworZXh0ZXJuIGtsaW5mb190ICpmaW5kX2ZpcnN0X2NvbXBvbmVudChsYm9hcmRfdCAqYnJkLCB1bnNpZ25lZCBjaGFyIHR5cGUpOworCisjZW5kaWYgLyogX0FTTV9JQTY0X1NOX0tMQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvc24vbDEuaCBiL2luY2x1ZGUvYXNtLWlhNjQvc24vbDEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWRiZDU1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taWE2NC9zbi9sMS5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTItMTk5NywyMDAwLTIwMDQgU2lsaWNvbiBHcmFwaGljcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqLworCisjaWZuZGVmIF9BU01fSUE2NF9TTl9MMV9ICisjZGVmaW5lIF9BU01fSUE2NF9TTl9MMV9ICisKKy8qIGJyaWNrIHR5cGUgcmVzcG9uc2UgY29kZXMgKi8KKyNkZWZpbmUgTDFfQlJJQ0tUWVBFX1BYICAgICAgICAgMHgyMyAgICAgICAgICAgIC8qICMgKi8KKyNkZWZpbmUgTDFfQlJJQ0tUWVBFX1BFICAgICAgICAgMHgyNSAgICAgICAgICAgIC8qICUgKi8KKyNkZWZpbmUgTDFfQlJJQ0tUWVBFX05fcDAgICAgICAgMHgyNiAgICAgICAgICAgIC8qICYgKi8KKyNkZWZpbmUgTDFfQlJJQ0tUWVBFX0lQNDUgICAgICAgMHgzNCAgICAgICAgICAgIC8qIDQgKi8KKyNkZWZpbmUgTDFfQlJJQ0tUWVBFX0lQNDEgICAgICAgMHgzNSAgICAgICAgICAgIC8qIDUgKi8KKyNkZWZpbmUgTDFfQlJJQ0tUWVBFX1RXSVNURVIgICAgMHgzNiAgICAgICAgICAgIC8qIDYgKi8gLyogSVA1MyAmIFJPVVRFUiAqLworI2RlZmluZSBMMV9CUklDS1RZUEVfSVggICAgICAgICAweDNkICAgICAgICAgICAgLyogPSAqLworI2RlZmluZSBMMV9CUklDS1RZUEVfSVAzNCAgICAgICAweDYxICAgICAgICAgICAgLyogYSAqLworI2RlZmluZSBMMV9CUklDS1RZUEVfR0EJCTB4NjIgICAgICAgICAgICAvKiBiICovCisjZGVmaW5lIEwxX0JSSUNLVFlQRV9DICAgICAgICAgIDB4NjMgICAgICAgICAgICAvKiBjICovCisjZGVmaW5lIEwxX0JSSUNLVFlQRV9PUFVTX1RJTwkweDY2CQkvKiBmICovCisjZGVmaW5lIEwxX0JSSUNLVFlQRV9JICAgICAgICAgIDB4NjkgICAgICAgICAgICAvKiBpICovCisjZGVmaW5lIEwxX0JSSUNLVFlQRV9OICAgICAgICAgIDB4NmUgICAgICAgICAgICAvKiBuICovCisjZGVmaW5lIEwxX0JSSUNLVFlQRV9PUFVTICAgICAgIDB4NmYJCS8qIG8gKi8KKyNkZWZpbmUgTDFfQlJJQ0tUWVBFX1AgICAgICAgICAgMHg3MCAgICAgICAgICAgIC8qIHAgKi8KKyNkZWZpbmUgTDFfQlJJQ0tUWVBFX1IgICAgICAgICAgMHg3MiAgICAgICAgICAgIC8qIHIgKi8KKyNkZWZpbmUgTDFfQlJJQ0tUWVBFX0NISV9DRyAgICAgMHg3NiAgICAgICAgICAgIC8qIHYgKi8KKyNkZWZpbmUgTDFfQlJJQ0tUWVBFX1ggICAgICAgICAgMHg3OCAgICAgICAgICAgIC8qIHggKi8KKyNkZWZpbmUgTDFfQlJJQ0tUWVBFX1gyICAgICAgICAgMHg3OSAgICAgICAgICAgIC8qIHkgKi8KKyNkZWZpbmUgTDFfQlJJQ0tUWVBFX1NBCQkweDVlICAgICAgICAgICAgLyogXiAqLyAvKiBUSU8gYnJpbmd1cCBicmljayAqLworI2RlZmluZSBMMV9CUklDS1RZUEVfUEEJCTB4NmEgICAgICAgICAgICAvKiBqICovCisjZGVmaW5lIEwxX0JSSUNLVFlQRV9JQQkJMHg2YiAgICAgICAgICAgIC8qIGsgKi8KKworI2VuZGlmIC8qIF9BU01fSUE2NF9TTl9MMV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3NuL2xlZHMuaCBiL2luY2x1ZGUvYXNtLWlhNjQvc24vbGVkcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2Y2Y4YzQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3NuL2xlZHMuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwNCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKi8KKyNpZm5kZWYgX0FTTV9JQTY0X1NOX0xFRFNfSAorI2RlZmluZSBfQVNNX0lBNjRfU05fTEVEU19ICisKKyNpbmNsdWRlIDxhc20vc24vYWRkcnMuaD4KKyNpbmNsdWRlIDxhc20vc24vcGRhLmg+CisjaW5jbHVkZSA8YXNtL3NuL3NodWJfbW1yLmg+CisKKyNkZWZpbmUgTEVEMAkJKExPQ0FMX01NUl9BRERSKFNIX1JFQUxfSlVOS19CVVNfTEVEMCkpCisjZGVmaW5lIExFRF9DUFVfU0hJRlQJMTYKKworI2RlZmluZSBMRURfQ1BVX0hFQVJUQkVBVAkweDAxCisjZGVmaW5lIExFRF9DUFVfQUNUSVZJVFkJMHgwMgorI2RlZmluZSBMRURfQUxXQVlTX1NFVAkJMHgwMAorCisvKgorICogQmFzaWMgbWFjcm9zIGZvciBmbGFzaGluZyB0aGUgTEVEUyBvbiBhbiBTR0kgU04uCisgKi8KKworc3RhdGljIF9faW5saW5lX18gdm9pZAorc2V0X2xlZF9iaXRzKHU4IHZhbHVlLCB1OCBtYXNrKQoreworCXBkYS0+bGVkX3N0YXRlID0gKHBkYS0+bGVkX3N0YXRlICYgfm1hc2spIHwgKHZhbHVlICYgbWFzayk7CisJKnBkYS0+bGVkX2FkZHJlc3MgPSAoc2hvcnQpIHBkYS0+bGVkX3N0YXRlOworfQorCisjZW5kaWYgLyogX0FTTV9JQTY0X1NOX0xFRFNfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3NuL21vZHVsZS5oIGIvaW5jbHVkZS9hc20taWE2NC9zbi9tb2R1bGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzRlOTgwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taWE2NC9zbi9tb2R1bGUuaApAQCAtMCwwICsxLDEyNyBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5MiAtIDE5OTcsIDIwMDAtMjAwNCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKi8KKyNpZm5kZWYgX0FTTV9JQTY0X1NOX01PRFVMRV9ICisjZGVmaW5lIF9BU01fSUE2NF9TTl9NT0RVTEVfSAorCisvKiBwYXJhbWV0ZXIgZm9yIGZvcm1hdF9tb2R1bGVfaWQoKSAqLworI2RlZmluZSBNT0RVTEVfRk9STUFUX0JSSUVGCTEKKyNkZWZpbmUgTU9EVUxFX0ZPUk1BVF9MT05HCTIKKyNkZWZpbmUgTU9EVUxFX0ZPUk1BVF9MQ0QJMworCisvKgorICoJTW9kdWxlIGlkIGZvcm1hdAorICoKKyAqCTMxLTE2CVJhY2sgSUQgKGVuY29kZWQgY2xhc3MsIGdyb3VwLCBudW1iZXIgLSAxNi1iaXQgdW5zaWduZWQgaW50KQorICoJIDE1LTgJQnJpY2sgdHlwZSAoOC1iaXQgYXNjaWkgY2hhcmFjdGVyKQorICoJICA3LTAJQmF5IChicmljayBwb3NpdGlvbiBpbiByYWNrICgwLTYzKSAtIDgtYml0IHVuc2lnbmVkIGludCkKKyAqCisgKi8KKworLyoKKyAqIE1hY3JvcyBmb3IgZ2V0dGluZyB0aGUgYnJpY2sgdHlwZQorICovCisjZGVmaW5lIE1PRFVMRV9CVFlQRV9NQVNLCTB4ZmYwMAorI2RlZmluZSBNT0RVTEVfQlRZUEVfU0hGVAk4CisjZGVmaW5lIE1PRFVMRV9HRVRfQlRZUEUoX20pCSgoKF9tKSAmIE1PRFVMRV9CVFlQRV9NQVNLKSA+PiBNT0RVTEVfQlRZUEVfU0hGVCkKKyNkZWZpbmUgTU9EVUxFX0JUX1RPX0NIQVIoX2IpCSgoY2hhcikoX2IpKQorI2RlZmluZSBNT0RVTEVfR0VUX0JUQ0hBUihfbSkJKE1PRFVMRV9CVF9UT19DSEFSKE1PRFVMRV9HRVRfQlRZUEUoX20pKSkKKworLyoKKyAqIE1hY3JvcyBmb3IgZ2V0dGluZyB0aGUgcmFjayBJRC4KKyAqLworI2RlZmluZSBNT0RVTEVfUkFDS19NQVNLCTB4ZmZmZjAwMDAKKyNkZWZpbmUgTU9EVUxFX1JBQ0tfU0hGVAkxNgorI2RlZmluZSBNT0RVTEVfR0VUX1JBQ0soX20pCSgoKF9tKSAmIE1PRFVMRV9SQUNLX01BU0spID4+IE1PRFVMRV9SQUNLX1NIRlQpCisKKy8qCisgKiBNYWNyb3MgZm9yIGdldHRpbmcgdGhlIGJyaWNrIHBvc2l0aW9uCisgKi8KKyNkZWZpbmUgTU9EVUxFX0JQT1NfTUFTSwkweDAwZmYKKyNkZWZpbmUgTU9EVUxFX0JQT1NfU0hGVAkwCisjZGVmaW5lIE1PRFVMRV9HRVRfQlBPUyhfbSkJKCgoX20pICYgTU9EVUxFX0JQT1NfTUFTSykgPj4gTU9EVUxFX0JQT1NfU0hGVCkKKworLyoKKyAqIE1hY3JvcyBmb3IgZW5jb2RpbmcgYW5kIGRlY29kaW5nIHJhY2sgSURzCisgKiBBIHJhY2sgbnVtYmVyIGNvbnNpc3RzIG9mIHRocmVlIHBhcnRzOgorICogICBjbGFzcyAoMD09Q1BVL21peGVkLCAxPT1JL08pLCBncm91cCwgbnVtYmVyCisgKgorICogUmFjayBudW1iZXIgaXMgc3RvcmVkIGp1c3QgYXMgaXQgaXMgZGlzcGxheWVkIG9uIHRoZSBzY3JlZW46CisgKiBhIDMtZGVjaW1hbC1kaWdpdCBudW1iZXIuCisgKi8KKyNkZWZpbmUgUkFDS19DTEFTU19EVkRSICAgICAgICAgMTAwCisjZGVmaW5lIFJBQ0tfR1JPVVBfRFZEUiAgICAgICAgIDEwCisjZGVmaW5lIFJBQ0tfTlVNX0RWRFIgICAgICAgICAgIDEKKworI2RlZmluZSBSQUNLX0NSRUFURV9SQUNLSUQoX2MsIF9nLCBfbikgICgoX2MpICogUkFDS19DTEFTU19EVkRSICsgICAgICAgXAorICAgICAgICAoX2cpICogUkFDS19HUk9VUF9EVkRSICsgKF9uKSAqIFJBQ0tfTlVNX0RWRFIpCisKKyNkZWZpbmUgUkFDS19HRVRfQ0xBU1MoX3IpICAgICAgICAgICAgICAoKF9yKSAvIFJBQ0tfQ0xBU1NfRFZEUikKKyNkZWZpbmUgUkFDS19HRVRfR1JPVVAoX3IpICAgICAgICAgICAgICAoKChfcikgLSBSQUNLX0dFVF9DTEFTUyhfcikgKiAgIFwKKyAgICAgICAgICAgIFJBQ0tfQ0xBU1NfRFZEUikgLyBSQUNLX0dST1VQX0RWRFIpCisjZGVmaW5lIFJBQ0tfR0VUX05VTShfcikgICAgICAgICAgICAgICAgKCgoX3IpIC0gUkFDS19HRVRfQ0xBU1MoX3IpICogICBcCisgICAgICAgICAgICBSQUNLX0NMQVNTX0RWRFIgLSBSQUNLX0dFVF9HUk9VUChfcikgKiAgICAgIFwKKyAgICAgICAgICAgIFJBQ0tfR1JPVVBfRFZEUikgLyBSQUNLX05VTV9EVkRSKQorCisvKgorICogTWFjcm9zIGZvciBlbmNvZGluZyBhbmQgZGVjb2RpbmcgcmFjayBJRHMKKyAqIEEgcmFjayBudW1iZXIgY29uc2lzdHMgb2YgdGhyZWUgcGFydHM6CisgKiAgIGNsYXNzICAgICAgMSBiaXQsIDA9PUNQVS9taXhlZCwgMT09SS9PCisgKiAgIGdyb3VwICAgICAgMiBiaXRzIGZvciBDUFUvbWl4ZWQsIDMgYml0cyBmb3IgSS9PCisgKiAgIG51bWJlciAgICAgMyBiaXRzIGZvciBDUFUvbWl4ZWQsIDIgYml0cyBmb3IgSS9PICgxIGJhc2VkKQorICovCisjZGVmaW5lIFJBQ0tfR1JPVVBfQklUUyhfcikgICAgIChSQUNLX0dFVF9DTEFTUyhfcikgPyAzIDogMikKKyNkZWZpbmUgUkFDS19OVU1fQklUUyhfcikgICAgICAgKFJBQ0tfR0VUX0NMQVNTKF9yKSA/IDIgOiAzKQorCisjZGVmaW5lIFJBQ0tfQ0xBU1NfTUFTSyhfcikgICAgIDB4MjAKKyNkZWZpbmUgUkFDS19DTEFTU19TSEZUKF9yKSAgICAgNQorI2RlZmluZSBSQUNLX0FERF9DTEFTUyhfciwgX2MpICBcCisgICAgICAgICgoX3IpIHw9IChfYykgPDwgUkFDS19DTEFTU19TSEZUKF9yKSAmIFJBQ0tfQ0xBU1NfTUFTSyhfcikpCisKKyNkZWZpbmUgUkFDS19HUk9VUF9TSEZUKF9yKSAgICAgUkFDS19OVU1fQklUUyhfcikKKyNkZWZpbmUgUkFDS19HUk9VUF9NQVNLKF9yKSAgICAgXAorICAgICAgICAoICgoKHVuc2lnbmVkKTE8PFJBQ0tfR1JPVVBfQklUUyhfcikpIC0gMSkgPDwgUkFDS19HUk9VUF9TSEZUKF9yKSApCisjZGVmaW5lIFJBQ0tfQUREX0dST1VQKF9yLCBfZykgIFwKKyAgICAgICAgKChfcikgfD0gKF9nKSA8PCBSQUNLX0dST1VQX1NIRlQoX3IpICYgUkFDS19HUk9VUF9NQVNLKF9yKSkKKworI2RlZmluZSBSQUNLX05VTV9TSEZUKF9yKSAgICAgICAwCisjZGVmaW5lIFJBQ0tfTlVNX01BU0soX3IpICAgICAgIFwKKyAgICAgICAgKCAoKCh1bnNpZ25lZCkxPDxSQUNLX05VTV9CSVRTKF9yKSkgLSAxKSA8PCBSQUNLX05VTV9TSEZUKF9yKSApCisjZGVmaW5lIFJBQ0tfQUREX05VTShfciwgX24pICAgIFwKKyAgICAgICAgKChfcikgfD0gKChfbikgLSAxKSA8PCBSQUNLX05VTV9TSEZUKF9yKSAmIFJBQ0tfTlVNX01BU0soX3IpKQorCisKKy8qCisgKiBCcmljayB0eXBlIGRlZmluaXRpb25zCisgKi8KKyNkZWZpbmUgTUFYX0JSSUNLX1RZUEVTICAgICAgICAgMjU2IC8qIGJyaWNrIHR5cGUgaXMgc3RvcmVkIGFzIHVjaGFyICovCisKK2V4dGVybiBjaGFyIGJyaWNrX3R5cGVzW107CisKKyNkZWZpbmUgTU9EVUxFX0NCUklDSyAgICAgICAgICAgMAorI2RlZmluZSBNT0RVTEVfUkJSSUNLICAgICAgICAgICAxCisjZGVmaW5lIE1PRFVMRV9JQlJJQ0sgICAgICAgICAgIDIKKyNkZWZpbmUgTU9EVUxFX0tCUklDSyAgICAgICAgICAgMworI2RlZmluZSBNT0RVTEVfWEJSSUNLICAgICAgICAgICA0CisjZGVmaW5lIE1PRFVMRV9EQlJJQ0sgICAgICAgICAgIDUKKyNkZWZpbmUgTU9EVUxFX1BCUklDSyAgICAgICAgICAgNgorI2RlZmluZSBNT0RVTEVfTkJSSUNLICAgICAgICAgICA3CisjZGVmaW5lIE1PRFVMRV9QRUJSSUNLICAgICAgICAgIDgKKyNkZWZpbmUgTU9EVUxFX1BYQlJJQ0sgICAgICAgICAgOQorI2RlZmluZSBNT0RVTEVfSVhCUklDSyAgICAgICAgICAxMAorI2RlZmluZSBNT0RVTEVfQ0dCUklDSwkJMTEKKyNkZWZpbmUgTU9EVUxFX09QVVNCUklDSyAgICAgICAgMTIKKyNkZWZpbmUgTU9EVUxFX1NBQlJJQ0sJCTEzCS8qIFRJTyBCcmluZ1VwIEJyaWNrICovCisjZGVmaW5lIE1PRFVMRV9JQUJSSUNLCQkxNAorI2RlZmluZSBNT0RVTEVfUEFCUklDSwkJMTUKKyNkZWZpbmUgTU9EVUxFX0dBQlJJQ0sJCTE2CisjZGVmaW5lIE1PRFVMRV9PUFVTX1RJTwkJMTcJLyogT1BVUyBUSU8gUmlzZXIgKi8KKworZXh0ZXJuIGNoYXIgYnJpY2tfdHlwZXNbXTsKK2V4dGVybiB2b2lkIGZvcm1hdF9tb2R1bGVfaWQoY2hhciAqLCBtb2R1bGVpZF90LCBpbnQpOworCisjZW5kaWYgLyogX0FTTV9JQTY0X1NOX01PRFVMRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3NuL25vZGVwZGEuaCBiL2luY2x1ZGUvYXNtLWlhNjQvc24vbm9kZXBkYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmYmRlMzMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3NuL25vZGVwZGEuaApAQCAtMCwwICsxLDg2IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkyIC0gMTk5NywgMjAwMC0yMDA0IFNpbGljb24gR3JhcGhpY3MsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqLworI2lmbmRlZiBfQVNNX0lBNjRfU05fTk9ERVBEQV9ICisjZGVmaW5lIF9BU01fSUE2NF9TTl9OT0RFUERBX0gKKworCisjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vc24vYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9zbi9pbnRyLmg+CisjaW5jbHVkZSA8YXNtL3NuL3BkYS5oPgorI2luY2x1ZGUgPGFzbS9zbi9idGUuaD4KKworLyoKKyAqIE5VTUEgTm9kZS1TcGVjaWZpYyBEYXRhIHN0cnVjdHVyZXMgYXJlIGRlZmluZWQgaW4gdGhpcyBmaWxlLgorICogSW4gcGFydGljdWxhciwgdGhpcyBpcyB0aGUgbG9jYXRpb24gb2YgdGhlIG5vZGUgUERBLgorICogQSBwb2ludGVyIHRvIHRoZSByaWdodCBub2RlIFBEQSBpcyBzYXZlZCBpbiBlYWNoIENQVSBQREEuCisgKi8KKworLyoKKyAqIE5vZGUtc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogT25lIG9mIHRoZXNlIHN0cnVjdHVyZXMgaXMgYWxsb2NhdGVkIG9uIGVhY2ggbm9kZSBvZiBhIE5VTUEgc3lzdGVtLgorICoKKyAqIFRoaXMgc3RydWN0dXJlIHByb3ZpZGVzIGEgY29udmVuaWVudCB3YXkgb2Yga2VlcGluZyB0b2dldGhlciAKKyAqIGFsbCBwZXItbm9kZSBkYXRhIHN0cnVjdHVyZXMuIAorICovCitzdHJ1Y3QgcGh5c19jcHVpZCB7CisJc2hvcnQJCQluYXNpZDsKKwljaGFyCQkJc3Vibm9kZTsKKwljaGFyCQkJc2xpY2U7Cit9OworCitzdHJ1Y3Qgbm9kZXBkYV9zIHsKKwl2b2lkIAkJKnBkaW5mbzsJLyogUGxhdGZvcm0tZGVwZW5kZW50IHBlci1ub2RlIGluZm8gKi8KKwlzcGlubG9ja190CQliaXN0X2xvY2s7CisKKwkvKgorCSAqIFRoZSBCVEVzIG9uIHRoaXMgbm9kZSBhcmUgc2hhcmVkIGJ5IHRoZSBsb2NhbCBjcHVzCisJICovCisJc3RydWN0IGJ0ZWluZm9fcwlidGVfaWZbQlRFU19QRVJfTk9ERV07CS8qIFZpcnR1YWwgSW50ZXJmYWNlICovCisJc3RydWN0IHRpbWVyX2xpc3QJYnRlX3JlY292ZXJ5X3RpbWVyOworCXNwaW5sb2NrX3QJCWJ0ZV9yZWNvdmVyeV9sb2NrOworCisJLyogCisJICogQXJyYXkgb2YgcG9pbnRlcnMgdG8gdGhlIG5vZGVwZGFzIGZvciBlYWNoIG5vZGUuCisJICovCisJc3RydWN0IG5vZGVwZGFfcwkqcGVybm9kZV9wZGFpbmRyW01BWF9DT01QQUNUX05PREVTXTsgCisKKwkvKgorCSAqIEFycmF5IG9mIHBoeXNpY2FsIGNwdSBpZGVudGlmaWVycy4gSW5kZXhlZCBieSBjcHVpZC4KKwkgKi8KKwlzdHJ1Y3QgcGh5c19jcHVpZAlwaHlzX2NwdWlkW05SX0NQVVNdOworfTsKKwordHlwZWRlZiBzdHJ1Y3Qgbm9kZXBkYV9zIG5vZGVwZGFfdDsKKworLyoKKyAqIEFjY2VzcyBGdW5jdGlvbnMgZm9yIG5vZGUgUERBLgorICogU2luY2UgdGhlcmUgaXMgb25lIG5vZGVwZGEgZm9yIGVhY2ggbm9kZSwgd2UgbmVlZCBhIGNvbnZlbmllbnQgbWVjaGFuaXNtCisgKiB0byBhY2Nlc3MgdGhlc2Ugbm9kZXBkYXMgd2l0aG91dCBjbHV0dGVyaW5nIGNvZGUgd2l0aCAjaWZkZWZzLgorICogVGhlIG5leHQgc2V0IG9mIGRlZmluaXRpb25zIHByb3ZpZGVzIHRoaXMuCisgKiBSb3V0aW5lcyBhcmUgZXhwZWN0ZWQgdG8gdXNlIAorICoKKyAqCW5vZGVwZGEJCQktPiB0byBhY2Nlc3Mgbm9kZSBQREEgZm9yIHRoZSBub2RlIG9uIHdoaWNoIGNvZGUgaXMgcnVubmluZworICoJc3Vibm9kZXBkYQkJLT4gdG8gYWNjZXNzIHN1Ym5vZGUgUERBIGZvciB0aGUgc3Vibm9kZSBvbiB3aGljaCBjb2RlIGlzIHJ1bm5pbmcKKyAqCisgKglOT0RFUERBKGNub2RlKQkJLT4gdG8gYWNjZXNzIG5vZGUgUERBIGZvciBjbm9kZWlkIAorICoJU1VCTk9ERVBEQShjbm9kZSxzbikJLT4gdG8gYWNjZXNzIHN1Ym5vZGUgUERBIGZvciBjbm9kZWlkL3N1Ym5vZGUKKyAqLworCisjZGVmaW5lCW5vZGVwZGEJCXBkYS0+cF9ub2RlcGRhCQkvKiBQdHIgdG8gdGhpcyBub2RlJ3MgUERBICovCisjZGVmaW5lCU5PREVQREEoY25vZGUpCQkobm9kZXBkYS0+cGVybm9kZV9wZGFpbmRyW2Nub2RlXSkKKworLyoKKyAqIENoZWNrIGlmIGdpdmVuIGEgY29tcGFjdCBub2RlIGlkIHRoZSBjb3JyZXNwb25kaW5nIG5vZGUgaGFzIGFsbCB0aGUKKyAqIGNwdXMgZGlzYWJsZWQuIAorICovCisjZGVmaW5lIGlzX2hlYWRsZXNzX25vZGUoY25vZGUpCQkobnJfY3B1c19ub2RlKGNub2RlKSA9PSAwKQorCisjZW5kaWYgLyogX0FTTV9JQTY0X1NOX05PREVQREFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9zbi9wZGEuaCBiL2luY2x1ZGUvYXNtLWlhNjQvc24vcGRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk0MGQzNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvc24vcGRhLmgKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5MiAtIDE5OTcsIDIwMDAtMjAwNCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKi8KKyNpZm5kZWYgX0FTTV9JQTY0X1NOX1BEQV9ICisjZGVmaW5lIF9BU01fSUE2NF9TTl9QREFfSAorCisjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KKyNpbmNsdWRlIDxhc20vcGVyY3B1Lmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9zbi9idGUuaD4KKworCisvKgorICogQ1BVLXNwZWNpZmljIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIE9uZSBvZiB0aGVzZSBzdHJ1Y3R1cmVzIGlzIGFsbG9jYXRlZCBmb3IgZWFjaCBjcHUgb2YgYSBOVU1BIHN5c3RlbS4KKyAqCisgKiBUaGlzIHN0cnVjdHVyZSBwcm92aWRlcyBhIGNvbnZlbmllbnQgd2F5IG9mIGtlZXBpbmcgdG9nZXRoZXIgCisgKiBhbGwgU04gcGVyLWNwdSBkYXRhIHN0cnVjdHVyZXMuIAorICovCisKK3R5cGVkZWYgc3RydWN0IHBkYV9zIHsKKworCS8qIEhhdmluZyBhIHBvaW50ZXIgaW4gdGhlIGJlZ2luaW5nIG9mIFBEQSB0ZW5kcyB0byBpbmNyZWFzZQorCSAqIHRoZSBjaGFuY2Ugb2YgaGF2aW5nIHRoaXMgcG9pbnRlciBpbiBjYWNoZS4gKFllcyBzb21ldGhpbmcKKwkgKiBlbHNlIGdldHMgcHVzaGVkIG91dCkuIERvaW5nIHRoaXMgcmVkdWNlcyB0aGUgbnVtYmVyIG9mIG1lbW9yeQorCSAqIGFjY2VzcyB0byBhbGwgbm9kZXBkYSB2YXJpYWJsZXMgdG8gYmUgb25lCisJICovCisJc3RydWN0IG5vZGVwZGFfcyAqcF9ub2RlcGRhOwkJLyogUG9pbnRlciB0byBQZXIgbm9kZSBQREEgKi8KKwlzdHJ1Y3Qgc3Vibm9kZXBkYV9zICpwX3N1Ym5vZGVwZGE7CS8qIFBvaW50ZXIgdG8gQ1BVICBzdWJub2RlIFBEQSAqLworCisJLyoKKwkgKiBTdXBwb3J0IGZvciBTTiBMRURzCisJICovCisJdm9sYXRpbGUgc2hvcnQJKmxlZF9hZGRyZXNzOworCXU4CQlsZWRfc3RhdGU7CisJdTgJCWhiX3N0YXRlOwkvKiBzdXBwb3J0cyBibGlua2luZyBoZWFydGJlYXQgbGVkcyAqLworCXVuc2lnbmVkIGludAloYl9jb3VudDsKKworCXVuc2lnbmVkIGludAlpZGxlX2ZsYWc7CisJCisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYmVkcm9ja19yZXZfaWQ7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqcGlvX3dyaXRlX3N0YXR1c19hZGRyOworCXVuc2lnbmVkIGxvbmcgcGlvX3dyaXRlX3N0YXR1c192YWw7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqcGlvX3NodWJfd2FyX2NhbV9hZGRyOworCisJdW5zaWduZWQgbG9uZwlzbl9zb2Z0X2lycls0XTsKKwl1bnNpZ25lZCBsb25nCXNuX2luX3NlcnZpY2VfaXZlY3NbNF07CisJc2hvcnQJCWNub2RlaWRfdG9fbmFzaWRfdGFibGVbTUFYX05VTU5PREVTXTsKKwlpbnQJCXNuX2xiX2ludF93YXJfdGlja3M7CisJaW50CQlzbl9sYXN0X2lycTsKKwlpbnQJCXNuX2ZpcnN0X2lycTsKK30gcGRhX3Q7CisKKworI2RlZmluZSBDQUNIRV9BTElHTih4KQkoKCh4KSArIFNNUF9DQUNIRV9CWVRFUy0xKSAmIH4oU01QX0NBQ0hFX0JZVEVTLTEpKQorCisvKgorICogUERBCisgKiBQZXItY3B1IHByaXZhdGUgZGF0YSBhcmVhIGZvciBlYWNoIGNwdS4gVGhlIFBEQSBpcyBsb2NhdGVkIGltbWVkaWF0ZWx5IGFmdGVyCisgKiB0aGUgSUE2NCBjcHVfZGF0YSBhcmVhLiBBIGZ1bGwgcGFnZSBpcyBhbGxvY2F0ZWQgZm9yIHRoZSBjcF9kYXRhIGFyZWEgZm9yIGVhY2gKKyAqIGNwdSBidXQgb25seSBhIHNtYWxsIGFtb3V0IG9mIHRoZSBwYWdlIGlzIGFjdHVhbGx5IHVzZWQuIFdlIHB1dCB0aGUgU05JQSBQREEKKyAqIGluIHRoZSBzYW1lIHBhZ2UgYXMgdGhlIGNwdV9kYXRhIGFyZWEuIE5vdGUgdGhhdCB0aGVyZSBpcyBhIGNoZWNrIGluIHRoZSBzZXR1cAorICogY29kZSB0byB2ZXJpZnkgdGhhdCB3ZSBkb24ndCBvdmVyZmxvdyB0aGUgcGFnZS4KKyAqCisgKiBTZWVtcyBsaWtlIHdlIHNob3VsZCBzaG91bGQgY2FjaGUtbGluZSBhbGlnbiB0aGUgcGRhIHNvIHRoYXQgYW55IGNoYW5nZXMgaW4gdGhlCisgKiBzaXplIG9mIHRoZSBjcHVfZGF0YSBhcmVhIGRvbid0IGNoYW5nZSBjYWNoZSBsYXlvdXQuIFNob3VsZCB3ZSBhbGlnbiB0byAzMiwgNjQsIDEyOAorICogb3IgNTEyIGJvdW5kYXJ5LiBFYWNoIGhhcyBtZXJpdHMuIEZvciBub3csIHBpY2sgMTI4IGJ1dCBzaG91bGQgYmUgcmV2aXNpdGVkIGxhdGVyLgorICovCitERUNMQVJFX1BFUl9DUFUoc3RydWN0IHBkYV9zLCBwZGFfcGVyY3B1KTsKKworI2RlZmluZSBwZGEJCSgmX19pYTY0X3Blcl9jcHVfdmFyKHBkYV9wZXJjcHUpKQorCisjZGVmaW5lIHBkYWNwdShjcHUpCSgmcGVyX2NwdShwZGFfcGVyY3B1LCBjcHUpKQorCisjZW5kaWYgLyogX0FTTV9JQTY0X1NOX1BEQV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3NuL3J3X21tci5oIGIvaW5jbHVkZS9hc20taWE2NC9zbi9yd19tbXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDBmZDFhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taWE2NC9zbi9yd19tbXIuaApAQCAtMCwwICsxLDc0IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMDQgU2lsaWNvbiBHcmFwaGljcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqLworI2lmbmRlZiBfQVNNX0lBNjRfU05fUldfTU1SX0gKKyNkZWZpbmUgX0FTTV9JQTY0X1NOX1JXX01NUl9ICisKKworLyoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBtYWNyb3MgdXNlZCB0byBhY2Nlc3MgTU1SIHJlZ2lzdGVycyB2aWEKKyAqIHVuY2FjaGVkIHBoeXNpY2FsIGFkZHJlc3Nlcy4KKyAqIAlwaW9fcGh5c19yZWFkX21tciAgLSByZWFkIGFuIE1NUgorICogCXBpb19waHlzX3dyaXRlX21tciAtIHdyaXRlIGFuIE1NUgorICogCXBpb19hdG9taWNfcGh5c193cml0ZV9tbXJzIC0gYXRvbWljYWxseSB3cml0ZSAxIG9yIDIgTU1ScyB3aXRoIHBzci5pYz0wCisgKgkJU2Vjb25kIE1NUiB3aWxsIGJlIHNraXBwZWQgaWYgYWRkcmVzcyBpcyBOVUxMCisgKgorICogQWRkcmVzc2VzIHBhc3NlZCB0byB0aGVzZSByb3V0aW5lcyBzaG91bGQgYmUgdW5jYWNoZWQgcGh5c2ljYWwgYWRkcmVzc2VzCisgKiBpZS4sIDB4ODAwMDAuLi4uCisgKi8KKworCitleHRlcm4gaW5saW5lIGxvbmcKK3Bpb19waHlzX3JlYWRfbW1yKHZvbGF0aWxlIGxvbmcgKm1tcikgCit7CisJbG9uZyB2YWw7CisgICAgICAgIGFzbSB2b2xhdGlsZQorICAgICAgICAgICAgKCJtb3YgcjI9cHNyOzsiCisgICAgICAgICAgICAgInJzbSBwc3IuaSB8IHBzci5kdDs7IgorICAgICAgICAgICAgICJzcmx6Lmk7OyIKKyAgICAgICAgICAgICAibGQ4LmFjcSAlMD1bJTFdOzsiCisgICAgICAgICAgICAgIm1vdiBwc3IubD1yMjs7IgorICAgICAgICAgICAgICJzcmx6Lmk7OyIKKyAgICAgICAgICAgICA6ICI9ciIodmFsKQorICAgICAgICAgICAgIDogInIiKG1tcikKKwkgICAgIDogInIyIik7CisgICAgICAgIHJldHVybiB2YWw7Cit9CisKKworCitleHRlcm4gaW5saW5lIHZvaWQKK3Bpb19waHlzX3dyaXRlX21tcih2b2xhdGlsZSBsb25nICptbXIsIGxvbmcgdmFsKSAKK3sKKyAgICAgICAgYXNtIHZvbGF0aWxlCisgICAgICAgICAgICAoIm1vdiByMj1wc3I7OyIKKyAgICAgICAgICAgICAicnNtIHBzci5pIHwgcHNyLmR0OzsiCisgICAgICAgICAgICAgInNybHouaTs7IgorICAgICAgICAgICAgICJzdDgucmVsIFslMF09JTE7OyIKKyAgICAgICAgICAgICAibW92IHBzci5sPXIyOzsiCisgICAgICAgICAgICAgInNybHouaTs7IgorCSAgICAgOjogInIiKG1tciksICJyIih2YWwpCisgICAgICAgICAgICAgOiAicjIiLCAibWVtb3J5Iik7Cit9ICAgICAgICAgICAgCisKK2V4dGVybiBpbmxpbmUgdm9pZAorcGlvX2F0b21pY19waHlzX3dyaXRlX21tcnModm9sYXRpbGUgbG9uZyAqbW1yMSwgbG9uZyB2YWwxLCB2b2xhdGlsZSBsb25nICptbXIyLCBsb25nIHZhbDIpIAoreworICAgICAgICBhc20gdm9sYXRpbGUKKyAgICAgICAgICAgICgibW92IHIyPXBzcjs7IgorICAgICAgICAgICAgICJyc20gcHNyLmkgfCBwc3IuZHQgfCBwc3IuaWM7OyIKKwkgICAgICJjbXAubmUgcDkscDA9JTIscjA7IgorICAgICAgICAgICAgICJzcmx6Lmk7OyIKKyAgICAgICAgICAgICAic3Q4LnJlbCBbJTBdPSUxOyIKKyAgICAgICAgICAgICAiKHA5KSBzdDgucmVsIFslMl09JTM7OyIKKyAgICAgICAgICAgICAibW92IHBzci5sPXIyOzsiCisgICAgICAgICAgICAgInNybHouaTs7IgorCSAgICAgOjogInIiKG1tcjEpLCAiciIodmFsMSksICJyIihtbXIyKSwgInIiKHZhbDIpCisgICAgICAgICAgICAgOiAicDkiLCAicjIiLCAibWVtb3J5Iik7Cit9ICAgICAgICAgICAgCisKKyNlbmRpZiAvKiBfQVNNX0lBNjRfU05fUldfTU1SX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvc24vc2h1Yl9tbXIuaCBiL2luY2x1ZGUvYXNtLWlhNjQvc24vc2h1Yl9tbXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzJmY2YxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taWE2NC9zbi9zaHViX21tci5oCkBAIC0wLDAgKzEsNDQxIEBACisvKgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA0IFNpbGljb24gR3JhcGhpY3MsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKi8KKworI2lmbmRlZiBfQVNNX0lBNjRfU05fU0hVQl9NTVJfSAorI2RlZmluZSBfQVNNX0lBNjRfU05fU0hVQl9NTVJfSAorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciAiU0hfSVBJX0lOVCIgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgU0h1YiBJbnRlci1Qcm9jZXNzb3IgSW50ZXJydXB0IFJlZ2lzdGVycyAgICAgICAgICAgICAgICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworI2RlZmluZSBTSDFfSVBJX0lOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxMTAwMDAzODAKKyNkZWZpbmUgU0gyX0lQSV9JTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMDEwMDAwMzgwCisKKy8qICAgU0hfSVBJX0lOVF9UWVBFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgIERlc2NyaXB0aW9uOiAgVHlwZSBvZiBJbnRlcnJ1cHQ6IDA9SU5ULCAyPVBNSSwgND1OTUksIDU9SU5JVCAgICAgICAqLworI2RlZmluZSBTSF9JUElfSU5UX1RZUEVfU0hGVCAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU0hfSVBJX0lOVF9UWVBFX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMDAwMDAwMDcKKworLyogICBTSF9JUElfSU5UX0FHVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgRGVzY3JpcHRpb246ICBBZ2VudCwgbXVzdCBiZSAwIGZvciBTSHViICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNIX0lQSV9JTlRfQUdUX1NIRlQgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBTSF9JUElfSU5UX0FHVF9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAwMDAwMDAwOAorCisvKiAgIFNIX0lQSV9JTlRfUElEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICBEZXNjcmlwdGlvbjogIFByb2Nlc3NvciBJRCwgc2FtZSBzZXR0aW5nIGFzIG9uIHRhcmdldGVkIE1jS2lubGV5ICAqLworI2RlZmluZSBTSF9JUElfSU5UX1BJRF9TSEZUICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgU0hfSVBJX0lOVF9QSURfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMDAwZmZmZjAKKworLyogICBTSF9JUElfSU5UX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgRGVzY3JpcHRpb246ICBPcHRpb25hbCBpbnRlcnJ1cHQgdmVjdG9yIGFyZWEsIDJNQiBhbGlnbmVkICAgICAgICAgICovCisjZGVmaW5lIFNIX0lQSV9JTlRfQkFTRV9TSEZUICAgICAgICAgICAgICAgICAgICAgMjEKKyNkZWZpbmUgU0hfSVBJX0lOVF9CQVNFX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMDNmZmZmZmZlMDAwMDAKKworLyogICBTSF9JUElfSU5UX0lEWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgRGVzY3JpcHRpb246ICBUYXJnZXRlZCBNY0tpbmxleSBpbnRlcnJ1cHQgdmVjdG9yICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNIX0lQSV9JTlRfSURYX1NIRlQgICAgICAgICAgICAgICAgICAgICAgNTIKKyNkZWZpbmUgU0hfSVBJX0lOVF9JRFhfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDBmZjAwMDAwMDAwMDAwMDAKKworLyogICBTSF9JUElfSU5UX1NFTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgRGVzY3JpcHRpb246ICBTZW5kIEludGVycnVwdCBNZXNzYWdlIHRvIFBJLCBUaGlzIGdlbmVyYXRlcyBhIHB1bHMgICovCisjZGVmaW5lIFNIX0lQSV9JTlRfU0VORF9TSEZUICAgICAgICAgICAgICAgICAgICAgNjMKKyNkZWZpbmUgU0hfSVBJX0lOVF9TRU5EX01BU0sgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwMDAwMDAwMDAKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgIlNIX0VWRU5UX09DQ1VSUkVEIiAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgU0h1YiBJbnRlcnJ1cHQgRXZlbnQgT2NjdXJyZWQgICAgICAgICAgICAgICAgICAgICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKyNkZWZpbmUgU0gxX0VWRU5UX09DQ1VSUkVEICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMTEwMDEwMDAwCisjZGVmaW5lIFNIMV9FVkVOVF9PQ0NVUlJFRF9BTElBUyAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDExMDAxMDAwOAorI2RlZmluZSBTSDJfRVZFTlRfT0NDVVJSRUQgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMTAwMTAwMDAKKyNkZWZpbmUgU0gyX0VWRU5UX09DQ1VSUkVEX0FMSUFTICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMDEwMDEwMDA4CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyICJTSF9QSV9DQU1fQ09OVFJPTCIgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgQ1JCIENBTSBNTVIgQWNjZXNzIENvbnRyb2wgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisjZGVmaW5lIFNIMV9QSV9DQU1fQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEyMDA1MDMwMAorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciAiU0hfU0hVQl9JRCIgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNIdWIgSUQgTnVtYmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworI2RlZmluZSBTSDFfU0hVQl9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxMTAwNjA1ODAKKyNkZWZpbmUgU0gxX1NIVUJfSURfUkVWSVNJT05fU0hGVCAgICAgICAgICAgICAgICAgMjgKKyNkZWZpbmUgU0gxX1NIVUJfSURfUkVWSVNJT05fTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMGYwMDAwMDAwCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgIlNIX1JUQyIgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFsLXRpbWUgQ2xvY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisjZGVmaW5lIFNIMV9SVEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDExMDFjMDAwMAorI2RlZmluZSBTSDJfUlRDCQkJCQkgIDB4MDAwMDAwMDIxMDFjMDAwMAorI2RlZmluZSBTSF9SVENfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwN2ZmZmZmZmZmZmZmZmYKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyICJTSF9QSU9fV1JJVEVfU1RBVFVTXzB8MSIgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICBQSU8gV3JpdGUgU3RhdHVzIGZvciBDUFUgMCAmIDEgICAgICAgICAgICAgICAgICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKyNkZWZpbmUgU0gxX1BJT19XUklURV9TVEFUVVNfMCAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMTIwMDcwMjAwCisjZGVmaW5lIFNIMV9QSU9fV1JJVEVfU1RBVFVTXzEgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEyMDA3MDI4MAorI2RlZmluZSBTSDJfUElPX1dSSVRFX1NUQVRVU18wICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMjAwNzAyMDAKKyNkZWZpbmUgU0gyX1BJT19XUklURV9TVEFUVVNfMSAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMDIwMDcwMjgwCisjZGVmaW5lIFNIMl9QSU9fV1JJVEVfU1RBVFVTXzIgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAyMDA3MDMwMAorI2RlZmluZSBTSDJfUElPX1dSSVRFX1NUQVRVU18zICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMjAwNzAzODAKKworLyogICBTSF9QSU9fV1JJVEVfU1RBVFVTXzBfV1JJVEVfREVBRExPQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgRGVzY3JpcHRpb246ICBEZWFkbG9jayByZXNwb25zZSBkZXRlY3RlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNIX1BJT19XUklURV9TVEFUVVNfV1JJVEVfREVBRExPQ0tfU0hGVCAxCisjZGVmaW5lIFNIX1BJT19XUklURV9TVEFUVVNfV1JJVEVfREVBRExPQ0tfTUFTSyAweDAwMDAwMDAwMDAwMDAwMDIKKworLyogICBTSF9QSU9fV1JJVEVfU1RBVFVTXzBfUEVORElOR19XUklURV9DT1VOVCAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgRGVzY3JpcHRpb246ICBDb3VudCBvZiBjdXJyZW50bHkgcGVuZGluZyBQSU8gd3JpdGVzICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNIX1BJT19XUklURV9TVEFUVVNfUEVORElOR19XUklURV9DT1VOVF9TSEZUIDU2CisjZGVmaW5lIFNIX1BJT19XUklURV9TVEFUVVNfUEVORElOR19XUklURV9DT1VOVF9NQVNLIDB4M2YwMDAwMDAwMDAwMDAwMAorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogICAgICAgICAgICAgICAgUmVnaXN0ZXIgIlNIX1BJT19XUklURV9TVEFUVVNfMF9BTElBUyIgICAgICAgICAgICAgICAgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisjZGVmaW5lIFNIMV9QSU9fV1JJVEVfU1RBVFVTXzBfQUxJQVMgICAgICAgICAgICAgIDB4MDAwMDAwMDEyMDA3MDIwOAorI2RlZmluZSBTSDJfUElPX1dSSVRFX1NUQVRVU18wX0FMSUFTICAgICAgICAgICAgICAweDAwMDAwMDAwMjAwNzAyMDgKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgIlNIX0VWRU5UX09DQ1VSUkVEIiAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgU0h1YiBJbnRlcnJ1cHQgRXZlbnQgT2NjdXJyZWQgICAgICAgICAgICAgICAgICAgICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qICAgU0hfRVZFTlRfT0NDVVJSRURfVUFSVF9JTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgIERlc2NyaXB0aW9uOiAgUGVuZGluZyBKdW5rIEJ1cyBVQVJUIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTSF9FVkVOVF9PQ0NVUlJFRF9VQVJUX0lOVF9TSEZUICAgICAgICAgIDIwCisjZGVmaW5lIFNIX0VWRU5UX09DQ1VSUkVEX1VBUlRfSU5UX01BU0sgICAgICAgICAgMHgwMDAwMDAwMDAwMTAwMDAwCisKKy8qICAgU0hfRVZFTlRfT0NDVVJSRURfSVBJX0lOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgIERlc2NyaXB0aW9uOiAgUGVuZGluZyBJUEkgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTSF9FVkVOVF9PQ0NVUlJFRF9JUElfSU5UX1NIRlQgICAgICAgICAgIDI4CisjZGVmaW5lIFNIX0VWRU5UX09DQ1VSUkVEX0lQSV9JTlRfTUFTSyAgICAgICAgICAgMHgwMDAwMDAwMDEwMDAwMDAwCisKKy8qICAgU0hfRVZFTlRfT0NDVVJSRURfSUlfSU5UMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgIERlc2NyaXB0aW9uOiAgUGVuZGluZyBJSSAwIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTSF9FVkVOVF9PQ0NVUlJFRF9JSV9JTlQwX1NIRlQgICAgICAgICAgIDI5CisjZGVmaW5lIFNIX0VWRU5UX09DQ1VSUkVEX0lJX0lOVDBfTUFTSyAgICAgICAgICAgMHgwMDAwMDAwMDIwMDAwMDAwCisKKy8qICAgU0hfRVZFTlRfT0NDVVJSRURfSUlfSU5UMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgIERlc2NyaXB0aW9uOiAgUGVuZGluZyBJSSAxIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTSF9FVkVOVF9PQ0NVUlJFRF9JSV9JTlQxX1NIRlQgICAgICAgICAgIDMwCisjZGVmaW5lIFNIX0VWRU5UX09DQ1VSUkVEX0lJX0lOVDFfTUFTSyAgICAgICAgICAgMHgwMDAwMDAwMDQwMDAwMDAwCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICBMRURTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKyNkZWZpbmUgU0gxX1JFQUxfSlVOS19CVVNfTEVEMAkJCSAweDdmZWQwMDAwMFVMCisjZGVmaW5lIFNIMV9SRUFMX0pVTktfQlVTX0xFRDEJCQkgMHg3ZmVkMTAwMDBVTAorI2RlZmluZSBTSDFfUkVBTF9KVU5LX0JVU19MRUQyCQkJIDB4N2ZlZDIwMDAwVUwKKyNkZWZpbmUgU0gxX1JFQUxfSlVOS19CVVNfTEVEMwkJCSAweDdmZWQzMDAwMFVMCisKKyNkZWZpbmUgU0gyX1JFQUxfSlVOS19CVVNfTEVEMAkJCSAweGYwMDAwMDAwVUwKKyNkZWZpbmUgU0gyX1JFQUxfSlVOS19CVVNfTEVEMQkJCSAweGYwMDEwMDAwVUwKKyNkZWZpbmUgU0gyX1JFQUxfSlVOS19CVVNfTEVEMgkJCSAweGYwMDIwMDAwVUwKKyNkZWZpbmUgU0gyX1JFQUxfSlVOS19CVVNfTEVEMwkJCSAweGYwMDMwMDAwVUwKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyICJTSDFfUFRDXzAiICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICBQdWdlIFRyYW5zbGF0aW9uIENhY2hlIE1lc3NhZ2UgQ29uZmlndXJhdGlvbiBJbmZvcm1hdGlvbiAgICAgICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKyNkZWZpbmUgU0gxX1BUQ18wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMTEwMWEwMDAwCisKKy8qICAgU0gxX1BUQ18wX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgIERlc2NyaXB0aW9uOiAgVHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTSDFfUFRDXzBfQV9TSEZUICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8qICAgU0gxX1BUQ18wX1BTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgIERlc2NyaXB0aW9uOiAgUGFnZSBTaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTSDFfUFRDXzBfUFNfU0hGVCAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8qICAgU0gxX1BUQ18wX1JJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgIERlc2NyaXB0aW9uOiAgUmVnaW9uIElEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTSDFfUFRDXzBfUklEX1NIRlQgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8qICAgU0gxX1BUQ18wX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgIERlc2NyaXB0aW9uOiAgU3RhcnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTSDFfUFRDXzBfU1RBUlRfU0hGVCAgICAgICAgICAgICAgICAgICAgICA2MworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgIlNIMV9QVENfMSIgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgIFB1Z2UgVHJhbnNsYXRpb24gQ2FjaGUgTWVzc2FnZSBDb25maWd1cmF0aW9uIEluZm9ybWF0aW9uICAgICAgICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworI2RlZmluZSBTSDFfUFRDXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxMTAxYTAwODAKKworLyogICBTSDFfUFRDXzFfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgRGVzY3JpcHRpb246ICBQVENfMSBTdGFydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNIMV9QVENfMV9TVEFSVF9TSEZUICAgICAgICAgICAgICAgICAgICAgIDYzCisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyICJTSDJfUFRDIiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICBQdWdlIFRyYW5zbGF0aW9uIENhY2hlIE1lc3NhZ2UgQ29uZmlndXJhdGlvbiBJbmZvcm1hdGlvbiAgICAgICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKyNkZWZpbmUgU0gyX1BUQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMTcwMDAwMDAwCisKKy8qICAgU0gyX1BUQ19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgIERlc2NyaXB0aW9uOiAgVHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTSDJfUFRDX0FfU0hGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8qICAgU0gyX1BUQ19QUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgIERlc2NyaXB0aW9uOiAgUGFnZSBTaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTSDJfUFRDX1BTX1NIRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8qICAgU0gyX1BUQ19SSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICBEZXNjcmlwdGlvbjogIFJlZ2lvbiBJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0gyX1BUQ19SSURfU0hGVCAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisvKiAgIFNIMl9QVENfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICBEZXNjcmlwdGlvbjogIFN0YXJ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0gyX1BUQ19TVEFSVF9TSEZUICAgICAgICAgICAgICAgICAgICAgICAgNjMKKworLyogICBTSDJfUFRDX0FERFJfUklEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgRGVzY3JpcHRpb246ICBSZWdpb24gSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNIMl9QVENfQUREUl9TSEZUICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgU0gyX1BUQ19BRERSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgMHgxZmZmZmZmZmZmZmZmMDAwCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgIlNIX1JUQzFfSU5UX0NPTkZJRyIgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgU0h1YiBSVEMgMSBJbnRlcnJ1cHQgQ29uZmlnIFJlZ2lzdGVycyAgICAgICAgICAgICAgICAgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKyNkZWZpbmUgU0gxX1JUQzFfSU5UX0NPTkZJRyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxMTAwMDE0ODAKKyNkZWZpbmUgU0gyX1JUQzFfSU5UX0NPTkZJRyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMTAwMDE0ODAKKyNkZWZpbmUgU0hfUlRDMV9JTlRfQ09ORklHX01BU0sgICAgICAgICAgICAgICAgICAweDBmZjNmZmZmZmZlZmZmZmYKKyNkZWZpbmUgU0hfUlRDMV9JTlRfQ09ORklHX0lOSVQgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMDAwMDAwMDAKKworLyogICBTSF9SVEMxX0lOVF9DT05GSUdfVFlQRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgRGVzY3JpcHRpb246ICBUeXBlIG9mIEludGVycnVwdDogMD1JTlQsIDI9UE1JLCA0PU5NSSwgNT1JTklUICAgICAgICovCisjZGVmaW5lIFNIX1JUQzFfSU5UX0NPTkZJR19UWVBFX1NIRlQgICAgICAgICAgICAgMAorI2RlZmluZSBTSF9SVEMxX0lOVF9DT05GSUdfVFlQRV9NQVNLICAgICAgICAgICAgIDB4MDAwMDAwMDAwMDAwMDAwNworCisvKiAgIFNIX1JUQzFfSU5UX0NPTkZJR19BR1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICBEZXNjcmlwdGlvbjogIEFnZW50LCBtdXN0IGJlIDAgZm9yIFNIdWIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0hfUlRDMV9JTlRfQ09ORklHX0FHVF9TSEZUICAgICAgICAgICAgICAzCisjZGVmaW5lIFNIX1JUQzFfSU5UX0NPTkZJR19BR1RfTUFTSyAgICAgICAgICAgICAgMHgwMDAwMDAwMDAwMDAwMDA4CisKKy8qICAgU0hfUlRDMV9JTlRfQ09ORklHX1BJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgIERlc2NyaXB0aW9uOiAgUHJvY2Vzc29yIElELCBzYW1lIHNldHRpbmcgYXMgb24gdGFyZ2V0ZWQgTWNLaW5sZXkgICovCisjZGVmaW5lIFNIX1JUQzFfSU5UX0NPTkZJR19QSURfU0hGVCAgICAgICAgICAgICAgNAorI2RlZmluZSBTSF9SVEMxX0lOVF9DT05GSUdfUElEX01BU0sgICAgICAgICAgICAgIDB4MDAwMDAwMDAwMDBmZmZmMAorCisvKiAgIFNIX1JUQzFfSU5UX0NPTkZJR19CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICBEZXNjcmlwdGlvbjogIE9wdGlvbmFsIGludGVycnVwdCB2ZWN0b3IgYXJlYSwgMk1CIGFsaWduZWQgICAgICAgICAgKi8KKyNkZWZpbmUgU0hfUlRDMV9JTlRfQ09ORklHX0JBU0VfU0hGVCAgICAgICAgICAgICAyMQorI2RlZmluZSBTSF9SVEMxX0lOVF9DT05GSUdfQkFTRV9NQVNLICAgICAgICAgICAgIDB4MDAwM2ZmZmZmZmUwMDAwMAorCisvKiAgIFNIX1JUQzFfSU5UX0NPTkZJR19JRFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICBEZXNjcmlwdGlvbjogIFRhcmdldGVkIE1jS2lubGV5IGludGVycnVwdCB2ZWN0b3IgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0hfUlRDMV9JTlRfQ09ORklHX0lEWF9TSEZUICAgICAgICAgICAgICA1MgorI2RlZmluZSBTSF9SVEMxX0lOVF9DT05GSUdfSURYX01BU0sgICAgICAgICAgICAgIDB4MGZmMDAwMDAwMDAwMDAwMAorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyICJTSF9SVEMxX0lOVF9FTkFCTEUiICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgIFNIdWIgUlRDIDEgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlcnMgICAgICAgICAgICAgICAgICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisjZGVmaW5lIFNIMV9SVEMxX0lOVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMTEwMDAxNTAwCisjZGVmaW5lIFNIMl9SVEMxX0lOVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMDEwMDAxNTAwCisjZGVmaW5lIFNIX1JUQzFfSU5UX0VOQUJMRV9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMDAwMDAwMDAxCisjZGVmaW5lIFNIX1JUQzFfSU5UX0VOQUJMRV9JTklUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMDAwMDAwMDAwCisKKy8qICAgU0hfUlRDMV9JTlRfRU5BQkxFX1JUQzFfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgIERlc2NyaXB0aW9uOiAgRW5hYmxlIFJUQyAxIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTSF9SVEMxX0lOVF9FTkFCTEVfUlRDMV9FTkFCTEVfU0hGVCAgICAgIDAKKyNkZWZpbmUgU0hfUlRDMV9JTlRfRU5BQkxFX1JUQzFfRU5BQkxFX01BU0sgICAgICAweDAwMDAwMDAwMDAwMDAwMDEKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciAiU0hfUlRDMl9JTlRfQ09ORklHIiAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICBTSHViIFJUQyAyIEludGVycnVwdCBDb25maWcgUmVnaXN0ZXJzICAgICAgICAgICAgICAgICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworI2RlZmluZSBTSDFfUlRDMl9JTlRfQ09ORklHICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDExMDAwMTU4MAorI2RlZmluZSBTSDJfUlRDMl9JTlRfQ09ORklHICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAxMDAwMTU4MAorI2RlZmluZSBTSF9SVEMyX0lOVF9DT05GSUdfTUFTSyAgICAgICAgICAgICAgICAgIDB4MGZmM2ZmZmZmZmVmZmZmZgorI2RlZmluZSBTSF9SVEMyX0lOVF9DT05GSUdfSU5JVCAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAwMDAwMDAwMAorCisvKiAgIFNIX1JUQzJfSU5UX0NPTkZJR19UWVBFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICBEZXNjcmlwdGlvbjogIFR5cGUgb2YgSW50ZXJydXB0OiAwPUlOVCwgMj1QTUksIDQ9Tk1JLCA1PUlOSVQgICAgICAgKi8KKyNkZWZpbmUgU0hfUlRDMl9JTlRfQ09ORklHX1RZUEVfU0hGVCAgICAgICAgICAgICAwCisjZGVmaW5lIFNIX1JUQzJfSU5UX0NPTkZJR19UWVBFX01BU0sgICAgICAgICAgICAgMHgwMDAwMDAwMDAwMDAwMDA3CisKKy8qICAgU0hfUlRDMl9JTlRfQ09ORklHX0FHVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgIERlc2NyaXB0aW9uOiAgQWdlbnQsIG11c3QgYmUgMCBmb3IgU0h1YiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTSF9SVEMyX0lOVF9DT05GSUdfQUdUX1NIRlQgICAgICAgICAgICAgIDMKKyNkZWZpbmUgU0hfUlRDMl9JTlRfQ09ORklHX0FHVF9NQVNLICAgICAgICAgICAgICAweDAwMDAwMDAwMDAwMDAwMDgKKworLyogICBTSF9SVEMyX0lOVF9DT05GSUdfUElEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgRGVzY3JpcHRpb246ICBQcm9jZXNzb3IgSUQsIHNhbWUgc2V0dGluZyBhcyBvbiB0YXJnZXRlZCBNY0tpbmxleSAgKi8KKyNkZWZpbmUgU0hfUlRDMl9JTlRfQ09ORklHX1BJRF9TSEZUICAgICAgICAgICAgICA0CisjZGVmaW5lIFNIX1JUQzJfSU5UX0NPTkZJR19QSURfTUFTSyAgICAgICAgICAgICAgMHgwMDAwMDAwMDAwMGZmZmYwCisKKy8qICAgU0hfUlRDMl9JTlRfQ09ORklHX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgIERlc2NyaXB0aW9uOiAgT3B0aW9uYWwgaW50ZXJydXB0IHZlY3RvciBhcmVhLCAyTUIgYWxpZ25lZCAgICAgICAgICAqLworI2RlZmluZSBTSF9SVEMyX0lOVF9DT05GSUdfQkFTRV9TSEZUICAgICAgICAgICAgIDIxCisjZGVmaW5lIFNIX1JUQzJfSU5UX0NPTkZJR19CQVNFX01BU0sgICAgICAgICAgICAgMHgwMDAzZmZmZmZmZTAwMDAwCisKKy8qICAgU0hfUlRDMl9JTlRfQ09ORklHX0lEWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgIERlc2NyaXB0aW9uOiAgVGFyZ2V0ZWQgTWNLaW5sZXkgaW50ZXJydXB0IHZlY3RvciAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTSF9SVEMyX0lOVF9DT05GSUdfSURYX1NIRlQgICAgICAgICAgICAgIDUyCisjZGVmaW5lIFNIX1JUQzJfSU5UX0NPTkZJR19JRFhfTUFTSyAgICAgICAgICAgICAgMHgwZmYwMDAwMDAwMDAwMDAwCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgIlNIX1JUQzJfSU5UX0VOQUJMRSIgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgU0h1YiBSVEMgMiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVycyAgICAgICAgICAgICAgICAgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKyNkZWZpbmUgU0gxX1JUQzJfSU5UX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxMTAwMDE2MDAKKyNkZWZpbmUgU0gyX1JUQzJfSU5UX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMTAwMDE2MDAKKyNkZWZpbmUgU0hfUlRDMl9JTlRfRU5BQkxFX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMDAwMDAwMDEKKyNkZWZpbmUgU0hfUlRDMl9JTlRfRU5BQkxFX0lOSVQgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMDAwMDAwMDAKKworLyogICBTSF9SVEMyX0lOVF9FTkFCTEVfUlRDMl9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgRGVzY3JpcHRpb246ICBFbmFibGUgUlRDIDIgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNIX1JUQzJfSU5UX0VOQUJMRV9SVEMyX0VOQUJMRV9TSEZUICAgICAgMAorI2RlZmluZSBTSF9SVEMyX0lOVF9FTkFCTEVfUlRDMl9FTkFCTEVfTUFTSyAgICAgIDB4MDAwMDAwMDAwMDAwMDAwMQorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyICJTSF9SVEMzX0lOVF9DT05GSUciICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgIFNIdWIgUlRDIDMgSW50ZXJydXB0IENvbmZpZyBSZWdpc3RlcnMgICAgICAgICAgICAgICAgICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisjZGVmaW5lIFNIMV9SVEMzX0lOVF9DT05GSUcgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMTEwMDAxNjgwCisjZGVmaW5lIFNIMl9SVEMzX0lOVF9DT05GSUcgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMDEwMDAxNjgwCisjZGVmaW5lIFNIX1JUQzNfSU5UX0NPTkZJR19NQVNLICAgICAgICAgICAgICAgICAgMHgwZmYzZmZmZmZmZWZmZmZmCisjZGVmaW5lIFNIX1JUQzNfSU5UX0NPTkZJR19JTklUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMDAwMDAwMDAwCisKKy8qICAgU0hfUlRDM19JTlRfQ09ORklHX1RZUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgIERlc2NyaXB0aW9uOiAgVHlwZSBvZiBJbnRlcnJ1cHQ6IDA9SU5ULCAyPVBNSSwgND1OTUksIDU9SU5JVCAgICAgICAqLworI2RlZmluZSBTSF9SVEMzX0lOVF9DT05GSUdfVFlQRV9TSEZUICAgICAgICAgICAgIDAKKyNkZWZpbmUgU0hfUlRDM19JTlRfQ09ORklHX1RZUEVfTUFTSyAgICAgICAgICAgICAweDAwMDAwMDAwMDAwMDAwMDcKKworLyogICBTSF9SVEMzX0lOVF9DT05GSUdfQUdUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgRGVzY3JpcHRpb246ICBBZ2VudCwgbXVzdCBiZSAwIGZvciBTSHViICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNIX1JUQzNfSU5UX0NPTkZJR19BR1RfU0hGVCAgICAgICAgICAgICAgMworI2RlZmluZSBTSF9SVEMzX0lOVF9DT05GSUdfQUdUX01BU0sgICAgICAgICAgICAgIDB4MDAwMDAwMDAwMDAwMDAwOAorCisvKiAgIFNIX1JUQzNfSU5UX0NPTkZJR19QSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICBEZXNjcmlwdGlvbjogIFByb2Nlc3NvciBJRCwgc2FtZSBzZXR0aW5nIGFzIG9uIHRhcmdldGVkIE1jS2lubGV5ICAqLworI2RlZmluZSBTSF9SVEMzX0lOVF9DT05GSUdfUElEX1NIRlQgICAgICAgICAgICAgIDQKKyNkZWZpbmUgU0hfUlRDM19JTlRfQ09ORklHX1BJRF9NQVNLICAgICAgICAgICAgICAweDAwMDAwMDAwMDAwZmZmZjAKKworLyogICBTSF9SVEMzX0lOVF9DT05GSUdfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgRGVzY3JpcHRpb246ICBPcHRpb25hbCBpbnRlcnJ1cHQgdmVjdG9yIGFyZWEsIDJNQiBhbGlnbmVkICAgICAgICAgICovCisjZGVmaW5lIFNIX1JUQzNfSU5UX0NPTkZJR19CQVNFX1NIRlQgICAgICAgICAgICAgMjEKKyNkZWZpbmUgU0hfUlRDM19JTlRfQ09ORklHX0JBU0VfTUFTSyAgICAgICAgICAgICAweDAwMDNmZmZmZmZlMDAwMDAKKworLyogICBTSF9SVEMzX0lOVF9DT05GSUdfSURYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgRGVzY3JpcHRpb246ICBUYXJnZXRlZCBNY0tpbmxleSBpbnRlcnJ1cHQgdmVjdG9yICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNIX1JUQzNfSU5UX0NPTkZJR19JRFhfU0hGVCAgICAgICAgICAgICAgNTIKKyNkZWZpbmUgU0hfUlRDM19JTlRfQ09ORklHX0lEWF9NQVNLICAgICAgICAgICAgICAweDBmZjAwMDAwMDAwMDAwMDAKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciAiU0hfUlRDM19JTlRfRU5BQkxFIiAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICBTSHViIFJUQyAzIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXJzICAgICAgICAgICAgICAgICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworI2RlZmluZSBTSDFfUlRDM19JTlRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDExMDAwMTcwMAorI2RlZmluZSBTSDJfUlRDM19JTlRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAxMDAwMTcwMAorI2RlZmluZSBTSF9SVEMzX0lOVF9FTkFCTEVfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAwMDAwMDAwMQorI2RlZmluZSBTSF9SVEMzX0lOVF9FTkFCTEVfSU5JVCAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAwMDAwMDAwMAorCisvKiAgIFNIX1JUQzNfSU5UX0VOQUJMRV9SVEMzX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICBEZXNjcmlwdGlvbjogIEVuYWJsZSBSVEMgMyBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0hfUlRDM19JTlRfRU5BQkxFX1JUQzNfRU5BQkxFX1NIRlQgICAgICAwCisjZGVmaW5lIFNIX1JUQzNfSU5UX0VOQUJMRV9SVEMzX0VOQUJMRV9NQVNLICAgICAgMHgwMDAwMDAwMDAwMDAwMDAxCisKKy8qICAgU0hfRVZFTlRfT0NDVVJSRURfUlRDMV9JTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgIERlc2NyaXB0aW9uOiAgUGVuZGluZyBSVEMgMSBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTSF9FVkVOVF9PQ0NVUlJFRF9SVEMxX0lOVF9TSEZUICAgICAgICAgIDI0CisjZGVmaW5lIFNIX0VWRU5UX09DQ1VSUkVEX1JUQzFfSU5UX01BU0sgICAgICAgICAgMHgwMDAwMDAwMDAxMDAwMDAwCisKKy8qICAgU0hfRVZFTlRfT0NDVVJSRURfUlRDMl9JTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgIERlc2NyaXB0aW9uOiAgUGVuZGluZyBSVEMgMiBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTSF9FVkVOVF9PQ0NVUlJFRF9SVEMyX0lOVF9TSEZUICAgICAgICAgIDI1CisjZGVmaW5lIFNIX0VWRU5UX09DQ1VSUkVEX1JUQzJfSU5UX01BU0sgICAgICAgICAgMHgwMDAwMDAwMDAyMDAwMDAwCisKKy8qICAgU0hfRVZFTlRfT0NDVVJSRURfUlRDM19JTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgIERlc2NyaXB0aW9uOiAgUGVuZGluZyBSVEMgMyBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTSF9FVkVOVF9PQ0NVUlJFRF9SVEMzX0lOVF9TSEZUICAgICAgICAgIDI2CisjZGVmaW5lIFNIX0VWRU5UX09DQ1VSUkVEX1JUQzNfSU5UX01BU0sgICAgICAgICAgMHgwMDAwMDAwMDA0MDAwMDAwCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyICJTSF9JTlRfQ01QQiIgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICBSVEMgQ29tcGFyZSBWYWx1ZSBmb3IgUHJvY2Vzc29yIEIgICAgICAgICAgICAgICAgICAgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKyNkZWZpbmUgU0gxX0lOVF9DTVBCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxMTAxYjAwODAKKyNkZWZpbmUgU0gyX0lOVF9DTVBCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMTAxYjAwODAKKyNkZWZpbmUgU0hfSU5UX0NNUEJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwN2ZmZmZmZmZmZmZmZmYKKyNkZWZpbmUgU0hfSU5UX0NNUEJfSU5JVCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMDAwMDAwMDAKKworLyogICBTSF9JTlRfQ01QQl9SRUFMX1RJTUVfQ01QQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgRGVzY3JpcHRpb246ICBSZWFsIFRpbWUgQ2xvY2sgQ29tcGFyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNIX0lOVF9DTVBCX1JFQUxfVElNRV9DTVBCX1NIRlQgICAgICAgICAgMAorI2RlZmluZSBTSF9JTlRfQ01QQl9SRUFMX1RJTUVfQ01QQl9NQVNLICAgICAgICAgIDB4MDA3ZmZmZmZmZmZmZmZmZgorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciAiU0hfSU5UX0NNUEMiICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgUlRDIENvbXBhcmUgVmFsdWUgZm9yIFByb2Nlc3NvciBDICAgICAgICAgICAgICAgICAgICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisjZGVmaW5lIFNIMV9JTlRfQ01QQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMTEwMWIwMTAwCisjZGVmaW5lIFNIMl9JTlRfQ01QQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMDEwMWIwMTAwCisjZGVmaW5lIFNIX0lOVF9DTVBDX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDdmZmZmZmZmZmZmZmZmCisjZGVmaW5lIFNIX0lOVF9DTVBDX0lOSVQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMDAwMDAwMDAwCisKKy8qICAgU0hfSU5UX0NNUENfUkVBTF9USU1FX0NNUEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgIERlc2NyaXB0aW9uOiAgUmVhbCBUaW1lIENsb2NrIENvbXBhcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTSF9JTlRfQ01QQ19SRUFMX1RJTUVfQ01QQ19TSEZUICAgICAgICAgIDAKKyNkZWZpbmUgU0hfSU5UX0NNUENfUkVBTF9USU1FX0NNUENfTUFTSyAgICAgICAgICAweDAwN2ZmZmZmZmZmZmZmZmYKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgIlNIX0lOVF9DTVBEIiAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgIFJUQyBDb21wYXJlIFZhbHVlIGZvciBQcm9jZXNzb3IgRCAgICAgICAgICAgICAgICAgICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworI2RlZmluZSBTSDFfSU5UX0NNUEQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDExMDFiMDE4MAorI2RlZmluZSBTSDJfSU5UX0NNUEQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAxMDFiMDE4MAorI2RlZmluZSBTSF9JTlRfQ01QRF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA3ZmZmZmZmZmZmZmZmZgorI2RlZmluZSBTSF9JTlRfQ01QRF9JTklUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAwMDAwMDAwMAorCisvKiAgIFNIX0lOVF9DTVBEX1JFQUxfVElNRV9DTVBEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICBEZXNjcmlwdGlvbjogIFJlYWwgVGltZSBDbG9jayBDb21wYXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0hfSU5UX0NNUERfUkVBTF9USU1FX0NNUERfU0hGVCAgICAgICAgICAwCisjZGVmaW5lIFNIX0lOVF9DTVBEX1JFQUxfVElNRV9DTVBEX01BU0sgICAgICAgICAgMHgwMDdmZmZmZmZmZmZmZmZmCisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qIFNvbWUgTU1ScyBhcmUgZnVuY3Rpb25hbGx5IGlkZW50aWNhbCAob3IgY2xvc2UgZW5vdWdoKSBvbiBib3RoIFNIVUIxICovCisvKiBhbmQgU0hVQjIgdGhhdCBpdCBtYWtlcyBzZW5zZSB0byBkZWZpbmUgYSBnZWJlcmljIG5hbWUgZm9yIHRoZSBNTVIuICAqLworLyogSXQgaXMgYWNjZXB0aWJsZSB0byB1c2UgKGZvciBleGFtcGxlKSBTSF9JUElfSU5UIHRvIHJlZmVyZW5jZSB0aGUgICAgKi8KKy8qIHRoZSBJUEkgTU1SLiBUaGUgdmFsdWUgb2YgU0hfSVBJX0lOVCBpcyBkZXRlcm1pbmVkIGF0IHJ1bnRpbWUgYmFzZWQgICovCisvKiBvbiB0aGUgdHlwZSBvZiB0aGUgU0hVQi4gRG8gbm90IHVzZSB0aGVzZSAjZGVmaW5lcyBpbiBwZXJmb3JtYW5jZSAgICAqLworLyogY3JpdGljYWwgY29kZSAgb3IgbG9vcHMgLSB0aGVyZSBpcyBhIHNtYWxsIHBlcmZvcm1hbmNlIHBlbmFsdHkuICAgICAgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisjZGVmaW5lIHNodWJtbXIoYSxiKSAJCShpc19zaHViMigpID8gYSMjMl8jI2IgOiBhIyMxXyMjYikKKworI2RlZmluZSBTSF9SRUFMX0pVTktfQlVTX0xFRDAJc2h1Ym1tcihTSCwgUkVBTF9KVU5LX0JVU19MRUQwKQorI2RlZmluZSBTSF9JUElfSU5UCQlzaHVibW1yKFNILCBJUElfSU5UKQorI2RlZmluZSBTSF9FVkVOVF9PQ0NVUlJFRAlzaHVibW1yKFNILCBFVkVOVF9PQ0NVUlJFRCkKKyNkZWZpbmUgU0hfRVZFTlRfT0NDVVJSRURfQUxJQVMJc2h1Ym1tcihTSCwgRVZFTlRfT0NDVVJSRURfQUxJQVMpCisjZGVmaW5lIFNIX1JUQwkJCXNodWJtbXIoU0gsIFJUQykKKyNkZWZpbmUgU0hfUlRDMV9JTlRfQ09ORklHCXNodWJtbXIoU0gsIFJUQzFfSU5UX0NPTkZJRykKKyNkZWZpbmUgU0hfUlRDMV9JTlRfRU5BQkxFCXNodWJtbXIoU0gsIFJUQzFfSU5UX0VOQUJMRSkKKyNkZWZpbmUgU0hfUlRDMl9JTlRfQ09ORklHCXNodWJtbXIoU0gsIFJUQzJfSU5UX0NPTkZJRykKKyNkZWZpbmUgU0hfUlRDMl9JTlRfRU5BQkxFCXNodWJtbXIoU0gsIFJUQzJfSU5UX0VOQUJMRSkKKyNkZWZpbmUgU0hfUlRDM19JTlRfQ09ORklHCXNodWJtbXIoU0gsIFJUQzNfSU5UX0NPTkZJRykKKyNkZWZpbmUgU0hfUlRDM19JTlRfRU5BQkxFCXNodWJtbXIoU0gsIFJUQzNfSU5UX0VOQUJMRSkKKyNkZWZpbmUgU0hfSU5UX0NNUEIJCXNodWJtbXIoU0gsIElOVF9DTVBCKQorI2RlZmluZSBTSF9JTlRfQ01QQwkJc2h1Ym1tcihTSCwgSU5UX0NNUEMpCisjZGVmaW5lIFNIX0lOVF9DTVBECQlzaHVibW1yKFNILCBJTlRfQ01QRCkKKworI2VuZGlmIC8qIF9BU01fSUE2NF9TTl9TSFVCX01NUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3NuL3NodWJpby5oIGIvaW5jbHVkZS9hc20taWE2NC9zbi9zaHViaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmQ4ODBlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taWE2NC9zbi9zaHViaW8uaApAQCAtMCwwICsxLDM0NzYgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTIgLSAxOTk3LCAyMDAwLTIwMDQgU2lsaWNvbiBHcmFwaGljcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICovCisKKyNpZm5kZWYgX0FTTV9JQTY0X1NOX1NIVUJJT19ICisjZGVmaW5lIF9BU01fSUE2NF9TTl9TSFVCSU9fSAorCisjZGVmaW5lIEhVQl9XSURHRVRfSURfTUFYIDB4ZgorI2RlZmluZSBJSU9fTlVNX0lUVEVTICAgNworI2RlZmluZSBIVUJfTlVNX0JJR19XSU5ET1cgICAgICAoSUlPX05VTV9JVFRFUyAtIDEpCisKKyNkZWZpbmUgICAgSUlPX1dJRCAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwICAgIC8qIENyb3NzdGFsayBXaWRnZXQgSWRlbnRpZmljYXRpb24gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoaXMgcmVnaXN0ZXIgaXMgYWxzbyBhY2Nlc3NpYmxlIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIENyb3NzdGFsayBhdCBhZGRyZXNzIDB4MC4gICovCisjZGVmaW5lICAgIElJT19XU1RBVCAgICAgICAgICAgICAgICAgMHgwMDQwMDAwOCAgICAvKiBDcm9zc3RhbGsgV2lkZ2V0IFN0YXR1cyAqLworI2RlZmluZSAgICBJSU9fV0NSICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMjAgICAgLyogQ3Jvc3N0YWxrIFdpZGdldCBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lICAgIElJT19JTEFQUiAgICAgICAgICAgICAgICAgMHgwMDQwMDEwMCAgICAvKiBJTyBMb2NhbCBBY2Nlc3MgUHJvdGVjdGlvbiBSZWdpc3RlciAqLworI2RlZmluZSAgICBJSU9fSUxBUE8gICAgICAgICAgICAgICAgIDB4MDA0MDAxMDggICAgLyogSU8gTG9jYWwgQWNjZXNzIFByb3RlY3Rpb24gT3ZlcnJpZGUgKi8KKyNkZWZpbmUgICAgSUlPX0lPV0EgICAgICAgICAgICAgICAgICAweDAwNDAwMTEwICAgIC8qIElPIE91dGJvdW5kIFdpZGdldCBBY2Nlc3MgKi8KKyNkZWZpbmUgICAgSUlPX0lJV0EgICAgICAgICAgICAgICAgICAweDAwNDAwMTE4ICAgIC8qIElPIEluYm91bmQgV2lkZ2V0IEFjY2VzcyAqLworI2RlZmluZSAgICBJSU9fSUlERU0gICAgICAgICAgICAgICAgIDB4MDA0MDAxMjAgICAgLyogSU8gSW5ib3VuZCBEZXZpY2UgRXJyb3IgTWFzayAqLworI2RlZmluZSAgICBJSU9fSUxDU1IgICAgICAgICAgICAgICAgIDB4MDA0MDAxMjggICAgLyogSU8gTExQIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSAgICBJSU9fSUxMUiAgICAgICAgICAgICAgICAgIDB4MDA0MDAxMzAgICAgLyogSU8gTExQIExvZyBSZWdpc3RlciAgICAqLworI2RlZmluZSAgICBJSU9fSUlEU1IgICAgICAgICAgICAgICAgIDB4MDA0MDAxMzggICAgLyogSU8gSW50ZXJydXB0IERlc3RpbmF0aW9uICovCisKKyNkZWZpbmUgICAgSUlPX0lHRlgwICAgICAgICAgICAgICAgICAweDAwNDAwMTQwICAgIC8qIElPIEdyYXBoaWNzIE5vZGUtV2lkZ2V0IE1hcCAwICovCisjZGVmaW5lICAgIElJT19JR0ZYMSAgICAgICAgICAgICAgICAgMHgwMDQwMDE0OCAgICAvKiBJTyBHcmFwaGljcyBOb2RlLVdpZGdldCBNYXAgMSAqLworCisjZGVmaW5lICAgIElJT19JU0NSMCAgICAgICAgICAgICAgICAgMHgwMDQwMDE1MCAgICAvKiBJTyBTY3JhdGNoIFJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUgICAgSUlPX0lTQ1IxICAgICAgICAgICAgICAgICAweDAwNDAwMTU4ICAgIC8qIElPIFNjcmF0Y2ggUmVnaXN0ZXIgMSAqLworCisjZGVmaW5lICAgIElJT19JVFRFMSAgICAgICAgICAgICAgICAgMHgwMDQwMDE2MCAgICAvKiBJTyBUcmFuc2xhdGlvbiBUYWJsZSBFbnRyeSAxICovCisjZGVmaW5lICAgIElJT19JVFRFMiAgICAgICAgICAgICAgICAgMHgwMDQwMDE2OCAgICAvKiBJTyBUcmFuc2xhdGlvbiBUYWJsZSBFbnRyeSAyICovCisjZGVmaW5lICAgIElJT19JVFRFMyAgICAgICAgICAgICAgICAgMHgwMDQwMDE3MCAgICAvKiBJTyBUcmFuc2xhdGlvbiBUYWJsZSBFbnRyeSAzICovCisjZGVmaW5lICAgIElJT19JVFRFNCAgICAgICAgICAgICAgICAgMHgwMDQwMDE3OCAgICAvKiBJTyBUcmFuc2xhdGlvbiBUYWJsZSBFbnRyeSA0ICovCisjZGVmaW5lICAgIElJT19JVFRFNSAgICAgICAgICAgICAgICAgMHgwMDQwMDE4MCAgICAvKiBJTyBUcmFuc2xhdGlvbiBUYWJsZSBFbnRyeSA1ICovCisjZGVmaW5lICAgIElJT19JVFRFNiAgICAgICAgICAgICAgICAgMHgwMDQwMDE4OCAgICAvKiBJTyBUcmFuc2xhdGlvbiBUYWJsZSBFbnRyeSA2ICovCisjZGVmaW5lICAgIElJT19JVFRFNyAgICAgICAgICAgICAgICAgMHgwMDQwMDE5MCAgICAvKiBJTyBUcmFuc2xhdGlvbiBUYWJsZSBFbnRyeSA3ICovCisKKyNkZWZpbmUgICAgSUlPX0lQUkIwICAgICAgICAgICAgICAgICAweDAwNDAwMTk4ICAgIC8qIElPIFBSQiBFbnRyeSAwICAgICAgICAgKi8KKyNkZWZpbmUgICAgSUlPX0lQUkI4ICAgICAgICAgICAgICAgICAweDAwNDAwMUEwICAgIC8qIElPIFBSQiBFbnRyeSA4ICAgICAgICAgKi8KKyNkZWZpbmUgICAgSUlPX0lQUkI5ICAgICAgICAgICAgICAgICAweDAwNDAwMUE4ICAgIC8qIElPIFBSQiBFbnRyeSA5ICAgICAgICAgKi8KKyNkZWZpbmUgICAgSUlPX0lQUkJBICAgICAgICAgICAgICAgICAweDAwNDAwMUIwICAgIC8qIElPIFBSQiBFbnRyeSBBICAgICAgICAgKi8KKyNkZWZpbmUgICAgSUlPX0lQUkJCICAgICAgICAgICAgICAgICAweDAwNDAwMUI4ICAgIC8qIElPIFBSQiBFbnRyeSBCICAgICAgICAgKi8KKyNkZWZpbmUgICAgSUlPX0lQUkJDICAgICAgICAgICAgICAgICAweDAwNDAwMUMwICAgIC8qIElPIFBSQiBFbnRyeSBDICAgICAgICAgKi8KKyNkZWZpbmUgICAgSUlPX0lQUkJEICAgICAgICAgICAgICAgICAweDAwNDAwMUM4ICAgIC8qIElPIFBSQiBFbnRyeSBEICAgICAgICAgKi8KKyNkZWZpbmUgICAgSUlPX0lQUkJFICAgICAgICAgICAgICAgICAweDAwNDAwMUQwICAgIC8qIElPIFBSQiBFbnRyeSBFICAgICAgICAgKi8KKyNkZWZpbmUgICAgSUlPX0lQUkJGICAgICAgICAgICAgICAgICAweDAwNDAwMUQ4ICAgIC8qIElPIFBSQiBFbnRyeSBGICAgICAgICAgKi8KKworI2RlZmluZSAgICBJSU9fSVhDQyAgICAgICAgICAgICAgICAgIDB4MDA0MDAxRTAgICAgLyogSU8gQ3Jvc3N0YWxrIENyZWRpdCBDb3VudCBUaW1lb3V0ICovCisjZGVmaW5lICAgIElJT19JTUVNICAgICAgICAgICAgICAgICAgMHgwMDQwMDFFOCAgICAvKiBJTyBNaXNjZWxsYW5lb3VzIEVycm9yIE1hc2sgKi8KKyNkZWZpbmUgICAgSUlPX0lYVFQgICAgICAgICAgICAgICAgICAweDAwNDAwMUYwICAgIC8qIElPIENyb3NzdGFsayBUaW1lb3V0IFRocmVzaG9sZCAqLworI2RlZmluZSAgICBJSU9fSUVDTFIgICAgICAgICAgICAgICAgIDB4MDA0MDAxRjggICAgLyogSU8gRXJyb3IgQ2xlYXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgSUlPX0lCQ1IgICAgICAgICAgICAgICAgICAweDAwNDAwMjAwICAgIC8qIElPIEJURSBDb250cm9sIFJlZ2lzdGVyICovCisKKyNkZWZpbmUgICAgSUlPX0lYU00gICAgICAgICAgICAgICAgICAweDAwNDAwMjA4ICAgIC8qIElPIENyb3NzdGFsayBTcHVyaW91cyBNZXNzYWdlICovCisjZGVmaW5lICAgIElJT19JWFNTICAgICAgICAgICAgICAgICAgMHgwMDQwMDIxMCAgICAvKiBJTyBDcm9zc3RhbGsgU3B1cmlvdXMgU2lkZWJhbmQgKi8KKworI2RlZmluZSAgICBJSU9fSUxDVCAgICAgICAgICAgICAgICAgIDB4MDA0MDAyMTggICAgLyogSU8gTExQIENoYW5uZWwgVGVzdCAgICAqLworCisjZGVmaW5lICAgIElJT19JSUVQSDEgICAgICAgICAgICAgICAgMHgwMDQwMDIyMCAgICAvKiBJTyBJbmNvbWluZyBFcnJvciBQYWNrZXQgSGVhZGVyLCBQYXJ0IDEgKi8KKyNkZWZpbmUgICAgSUlPX0lJRVBIMiAgICAgICAgICAgICAgICAweDAwNDAwMjI4ICAgIC8qIElPIEluY29taW5nIEVycm9yIFBhY2tldCBIZWFkZXIsIFBhcnQgMiAqLworCisKKyNkZWZpbmUgICAgSUlPX0lTTEFQUiAgICAgICAgICAgICAgICAweDAwNDAwMjMwICAgIC8qIElPIFNYQiBMb2NhbCBBY2Nlc3MgUHJvdGVjdGlvbiBSZWdzdGVyICovCisjZGVmaW5lICAgIElJT19JU0xBUE8gICAgICAgICAgICAgICAgMHgwMDQwMDIzOCAgICAvKiBJTyBTWEIgTG9jYWwgQWNjZXNzIFByb3RlY3Rpb24gT3ZlcnJpZGUgKi8KKworI2RlZmluZSAgICBJSU9fSVdJICAgICAgICAgICAgICAgICAgIDB4MDA0MDAyNDAgICAgLyogSU8gV3JhcHBlciBJbnRlcnJ1cHQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgSUlPX0lXRUwgICAgICAgICAgICAgICAgICAweDAwNDAwMjQ4ICAgIC8qIElPIFdyYXBwZXIgRXJyb3IgTG9nIFJlZ2lzdGVyICovCisjZGVmaW5lICAgIElJT19JV0MgICAgICAgICAgICAgICAgICAgMHgwMDQwMDI1MCAgICAvKiBJTyBXcmFwcGVyIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgSUlPX0lXUyAgICAgICAgICAgICAgICAgICAweDAwNDAwMjU4ICAgIC8qIElPIFdyYXBwZXIgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgIElJT19JV0VJTSAgICAgICAgICAgICAgICAgMHgwMDQwMDI2MCAgICAvKiBJTyBXcmFwcGVyIEVycm9yIEludGVycnVwdCBNYXNraW5nIFJlZ2lzdGVyICovCisKKyNkZWZpbmUgICAgSUlPX0lQQ0EgICAgICAgICAgICAgICAgICAweDAwNDAwMzAwICAgIC8qIElPIFBSQiBDb3VudGVyIEFkanVzdCAqLworCisjZGVmaW5lICAgIElJT19JUFJURTBfQSAgICAgICAgICAgICAgMHgwMDQwMDMwOCAgICAvKiBJTyBQSU8gUmVhZCBBZGRyZXNzIFRhYmxlIEVudHJ5IDAsIFBhcnQgQSAqLworI2RlZmluZSAgICBJSU9fSVBSVEUxX0EgICAgICAgICAgICAgIDB4MDA0MDAzMTAgICAgLyogSU8gUElPIFJlYWQgQWRkcmVzcyBUYWJsZSBFbnRyeSAxLCBQYXJ0IEEgKi8KKyNkZWZpbmUgICAgSUlPX0lQUlRFMl9BICAgICAgICAgICAgICAweDAwNDAwMzE4ICAgIC8qIElPIFBJTyBSZWFkIEFkZHJlc3MgVGFibGUgRW50cnkgMiwgUGFydCBBICovCisjZGVmaW5lICAgIElJT19JUFJURTNfQSAgICAgICAgICAgICAgIDB4MDA0MDAzMjAgICAgLyogSU8gUElPIFJlYWQgQWRkcmVzcyBUYWJsZSBFbnRyeSAzLCBQYXJ0IEEgKi8KKyNkZWZpbmUgICAgSUlPX0lQUlRFNF9BICAgICAgICAgICAgICAgMHgwMDQwMDMyOCAgICAvKiBJTyBQSU8gUmVhZCBBZGRyZXNzIFRhYmxlIEVudHJ5IDQsIFBhcnQgQSAqLworI2RlZmluZSAgICBJSU9fSVBSVEU1X0EgICAgICAgICAgICAgICAweDAwNDAwMzMwICAgIC8qIElPIFBJTyBSZWFkIEFkZHJlc3MgVGFibGUgRW50cnkgNSwgUGFydCBBICovCisjZGVmaW5lICAgIElJT19JUFJURTZfQSAgICAgICAgICAgICAgIDB4MDA0MDAzMzggICAgLyogSU8gUElPIFJlYWQgQWRkcmVzcyBUYWJsZSBFbnRyeSA2LCBQYXJ0IEEgKi8KKyNkZWZpbmUgICAgSUlPX0lQUlRFN19BICAgICAgICAgICAgICAgMHgwMDQwMDM0MCAgICAvKiBJTyBQSU8gUmVhZCBBZGRyZXNzIFRhYmxlIEVudHJ5IDcsIFBhcnQgQSAqLworCisjZGVmaW5lICAgIElJT19JUFJURTBfQiAgICAgICAgICAgICAgMHgwMDQwMDM0OCAgICAvKiBJTyBQSU8gUmVhZCBBZGRyZXNzIFRhYmxlIEVudHJ5IDAsIFBhcnQgQiAqLworI2RlZmluZSAgICBJSU9fSVBSVEUxX0IgICAgICAgICAgICAgIDB4MDA0MDAzNTAgICAgLyogSU8gUElPIFJlYWQgQWRkcmVzcyBUYWJsZSBFbnRyeSAxLCBQYXJ0IEIgKi8KKyNkZWZpbmUgICAgSUlPX0lQUlRFMl9CICAgICAgICAgICAgICAweDAwNDAwMzU4ICAgIC8qIElPIFBJTyBSZWFkIEFkZHJlc3MgVGFibGUgRW50cnkgMiwgUGFydCBCICovCisjZGVmaW5lICAgIElJT19JUFJURTNfQiAgICAgICAgICAgICAgIDB4MDA0MDAzNjAgICAgLyogSU8gUElPIFJlYWQgQWRkcmVzcyBUYWJsZSBFbnRyeSAzLCBQYXJ0IEIgKi8KKyNkZWZpbmUgICAgSUlPX0lQUlRFNF9CICAgICAgICAgICAgICAgMHgwMDQwMDM2OCAgICAvKiBJTyBQSU8gUmVhZCBBZGRyZXNzIFRhYmxlIEVudHJ5IDQsIFBhcnQgQiAqLworI2RlZmluZSAgICBJSU9fSVBSVEU1X0IgICAgICAgICAgICAgICAweDAwNDAwMzcwICAgIC8qIElPIFBJTyBSZWFkIEFkZHJlc3MgVGFibGUgRW50cnkgNSwgUGFydCBCICovCisjZGVmaW5lICAgIElJT19JUFJURTZfQiAgICAgICAgICAgICAgIDB4MDA0MDAzNzggICAgLyogSU8gUElPIFJlYWQgQWRkcmVzcyBUYWJsZSBFbnRyeSA2LCBQYXJ0IEIgKi8KKyNkZWZpbmUgICAgSUlPX0lQUlRFN19CICAgICAgICAgICAgICAgMHgwMDQwMDM4MCAgICAvKiBJTyBQSU8gUmVhZCBBZGRyZXNzIFRhYmxlIEVudHJ5IDcsIFBhcnQgQiAqLworCisjZGVmaW5lICAgIElJT19JUERSICAgICAgICAgICAgICAgICAgMHgwMDQwMDM4OCAgICAvKiBJTyBQSU8gRGVhbGxvY2F0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lICAgIElJT19JQ0RSICAgICAgICAgICAgICAgICAgMHgwMDQwMDM5MCAgICAvKiBJTyBDUkIgRW50cnkgRGVhbGxvY2F0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lICAgIElJT19JRkRSICAgICAgICAgICAgICAgICAgMHgwMDQwMDM5OCAgICAvKiBJTyBJT1EgRklGTyBEZXB0aCBSZWdpc3RlciAqLworI2RlZmluZSAgICBJSU9fSUlBUCAgICAgICAgICAgICAgICAgIDB4MDA0MDAzQTAgICAgLyogSU8gSUlRIEFyYml0cmF0aW9uIFBhcmFtZXRlcnMgKi8KKyNkZWZpbmUgICAgSUlPX0lDTVIgICAgICAgICAgICAgICAgICAweDAwNDAwM0E4ICAgIC8qIElPIENSQiBNYW5hZ2VtZW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgIElJT19JQ0NSICAgICAgICAgICAgICAgICAgMHgwMDQwMDNCMCAgICAvKiBJTyBDUkIgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSAgICBJSU9fSUNUTyAgICAgICAgICAgICAgICAgIDB4MDA0MDAzQjggICAgLyogSU8gQ1JCIFRpbWVvdXQgICAgICAgICAqLworI2RlZmluZSAgICBJSU9fSUNUUCAgICAgICAgICAgICAgICAgIDB4MDA0MDAzQzAgICAgLyogSU8gQ1JCIFRpbWVvdXQgUHJlc2NhbGFyICovCisKKyNkZWZpbmUgICAgSUlPX0lDUkIwX0EgICAgICAgICAgICAgICAweDAwNDAwNDAwICAgIC8qIElPIENSQiBFbnRyeSAwX0EgICAgICAgKi8KKyNkZWZpbmUgICAgSUlPX0lDUkIwX0IgICAgICAgICAgICAgICAweDAwNDAwNDA4ICAgIC8qIElPIENSQiBFbnRyeSAwX0IgICAgICAgKi8KKyNkZWZpbmUgICAgSUlPX0lDUkIwX0MgICAgICAgICAgICAgICAweDAwNDAwNDEwICAgIC8qIElPIENSQiBFbnRyeSAwX0MgICAgICAgKi8KKyNkZWZpbmUgICAgSUlPX0lDUkIwX0QgICAgICAgICAgICAgICAweDAwNDAwNDE4ICAgIC8qIElPIENSQiBFbnRyeSAwX0QgICAgICAgKi8KKyNkZWZpbmUgICAgSUlPX0lDUkIwX0UgICAgICAgICAgICAgICAweDAwNDAwNDIwICAgIC8qIElPIENSQiBFbnRyeSAwX0UgICAgICAgKi8KKworI2RlZmluZSAgICBJSU9fSUNSQjFfQSAgICAgICAgICAgICAgIDB4MDA0MDA0MzAgICAgLyogSU8gQ1JCIEVudHJ5IDFfQSAgICAgICAqLworI2RlZmluZSAgICBJSU9fSUNSQjFfQiAgICAgICAgICAgICAgIDB4MDA0MDA0MzggICAgLyogSU8gQ1JCIEVudHJ5IDFfQiAgICAgICAqLworI2RlZmluZSAgICBJSU9fSUNSQjFfQyAgICAgICAgICAgICAgIDB4MDA0MDA0NDAgICAgLyogSU8gQ1JCIEVudHJ5IDFfQyAgICAgICAqLworI2RlZmluZSAgICBJSU9fSUNSQjFfRCAgICAgICAgICAgICAgIDB4MDA0MDA0NDggICAgLyogSU8gQ1JCIEVudHJ5IDFfRCAgICAgICAqLworI2RlZmluZSAgICBJSU9fSUNSQjFfRSAgICAgICAgICAgICAgIDB4MDA0MDA0NTAgICAgLyogSU8gQ1JCIEVudHJ5IDFfRSAgICAgICAqLworCisjZGVmaW5lICAgIElJT19JQ1JCMl9BICAgICAgICAgICAgICAgMHgwMDQwMDQ2MCAgICAvKiBJTyBDUkIgRW50cnkgMl9BICAgICAgICovCisjZGVmaW5lICAgIElJT19JQ1JCMl9CICAgICAgICAgICAgICAgMHgwMDQwMDQ2OCAgICAvKiBJTyBDUkIgRW50cnkgMl9CICAgICAgICovCisjZGVmaW5lICAgIElJT19JQ1JCMl9DICAgICAgICAgICAgICAgMHgwMDQwMDQ3MCAgICAvKiBJTyBDUkIgRW50cnkgMl9DICAgICAgICovCisjZGVmaW5lICAgIElJT19JQ1JCMl9EICAgICAgICAgICAgICAgMHgwMDQwMDQ3OCAgICAvKiBJTyBDUkIgRW50cnkgMl9EICAgICAgICovCisjZGVmaW5lICAgIElJT19JQ1JCMl9FICAgICAgICAgICAgICAgMHgwMDQwMDQ4MCAgICAvKiBJTyBDUkIgRW50cnkgMl9FICAgICAgICovCisKKyNkZWZpbmUgICAgSUlPX0lDUkIzX0EgICAgICAgICAgICAgICAweDAwNDAwNDkwICAgIC8qIElPIENSQiBFbnRyeSAzX0EgICAgICAgKi8KKyNkZWZpbmUgICAgSUlPX0lDUkIzX0IgICAgICAgICAgICAgICAweDAwNDAwNDk4ICAgIC8qIElPIENSQiBFbnRyeSAzX0IgICAgICAgKi8KKyNkZWZpbmUgICAgSUlPX0lDUkIzX0MgICAgICAgICAgICAgICAweDAwNDAwNGEwICAgIC8qIElPIENSQiBFbnRyeSAzX0MgICAgICAgKi8KKyNkZWZpbmUgICAgSUlPX0lDUkIzX0QgICAgICAgICAgICAgICAweDAwNDAwNGE4ICAgIC8qIElPIENSQiBFbnRyeSAzX0QgICAgICAgKi8KKyNkZWZpbmUgICAgSUlPX0lDUkIzX0UgICAgICAgICAgICAgICAweDAwNDAwNGIwICAgIC8qIElPIENSQiBFbnRyeSAzX0UgICAgICAgKi8KKworI2RlZmluZSAgICBJSU9fSUNSQjRfQSAgICAgICAgICAgICAgIDB4MDA0MDA0YzAgICAgLyogSU8gQ1JCIEVudHJ5IDRfQSAgICAgICAqLworI2RlZmluZSAgICBJSU9fSUNSQjRfQiAgICAgICAgICAgICAgIDB4MDA0MDA0YzggICAgLyogSU8gQ1JCIEVudHJ5IDRfQiAgICAgICAqLworI2RlZmluZSAgICBJSU9fSUNSQjRfQyAgICAgICAgICAgICAgIDB4MDA0MDA0ZDAgICAgLyogSU8gQ1JCIEVudHJ5IDRfQyAgICAgICAqLworI2RlZmluZSAgICBJSU9fSUNSQjRfRCAgICAgICAgICAgICAgIDB4MDA0MDA0ZDggICAgLyogSU8gQ1JCIEVudHJ5IDRfRCAgICAgICAqLworI2RlZmluZSAgICBJSU9fSUNSQjRfRSAgICAgICAgICAgICAgIDB4MDA0MDA0ZTAgICAgLyogSU8gQ1JCIEVudHJ5IDRfRSAgICAgICAqLworCisjZGVmaW5lICAgIElJT19JQ1JCNV9BICAgICAgICAgICAgICAgMHgwMDQwMDRmMCAgICAvKiBJTyBDUkIgRW50cnkgNV9BICAgICAgICovCisjZGVmaW5lICAgIElJT19JQ1JCNV9CICAgICAgICAgICAgICAgMHgwMDQwMDRmOCAgICAvKiBJTyBDUkIgRW50cnkgNV9CICAgICAgICovCisjZGVmaW5lICAgIElJT19JQ1JCNV9DICAgICAgICAgICAgICAgMHgwMDQwMDUwMCAgICAvKiBJTyBDUkIgRW50cnkgNV9DICAgICAgICovCisjZGVmaW5lICAgIElJT19JQ1JCNV9EICAgICAgICAgICAgICAgMHgwMDQwMDUwOCAgICAvKiBJTyBDUkIgRW50cnkgNV9EICAgICAgICovCisjZGVmaW5lICAgIElJT19JQ1JCNV9FICAgICAgICAgICAgICAgMHgwMDQwMDUxMCAgICAvKiBJTyBDUkIgRW50cnkgNV9FICAgICAgICovCisKKyNkZWZpbmUgICAgSUlPX0lDUkI2X0EgICAgICAgICAgICAgICAweDAwNDAwNTIwICAgIC8qIElPIENSQiBFbnRyeSA2X0EgICAgICAgKi8KKyNkZWZpbmUgICAgSUlPX0lDUkI2X0IgICAgICAgICAgICAgICAweDAwNDAwNTI4ICAgIC8qIElPIENSQiBFbnRyeSA2X0IgICAgICAgKi8KKyNkZWZpbmUgICAgSUlPX0lDUkI2X0MgICAgICAgICAgICAgICAweDAwNDAwNTMwICAgIC8qIElPIENSQiBFbnRyeSA2X0MgICAgICAgKi8KKyNkZWZpbmUgICAgSUlPX0lDUkI2X0QgICAgICAgICAgICAgICAweDAwNDAwNTM4ICAgIC8qIElPIENSQiBFbnRyeSA2X0QgICAgICAgKi8KKyNkZWZpbmUgICAgSUlPX0lDUkI2X0UgICAgICAgICAgICAgICAweDAwNDAwNTQwICAgIC8qIElPIENSQiBFbnRyeSA2X0UgICAgICAgKi8KKworI2RlZmluZSAgICBJSU9fSUNSQjdfQSAgICAgICAgICAgICAgIDB4MDA0MDA1NTAgICAgLyogSU8gQ1JCIEVudHJ5IDdfQSAgICAgICAqLworI2RlZmluZSAgICBJSU9fSUNSQjdfQiAgICAgICAgICAgICAgIDB4MDA0MDA1NTggICAgLyogSU8gQ1JCIEVudHJ5IDdfQiAgICAgICAqLworI2RlZmluZSAgICBJSU9fSUNSQjdfQyAgICAgICAgICAgICAgIDB4MDA0MDA1NjAgICAgLyogSU8gQ1JCIEVudHJ5IDdfQyAgICAgICAqLworI2RlZmluZSAgICBJSU9fSUNSQjdfRCAgICAgICAgICAgICAgIDB4MDA0MDA1NjggICAgLyogSU8gQ1JCIEVudHJ5IDdfRCAgICAgICAqLworI2RlZmluZSAgICBJSU9fSUNSQjdfRSAgICAgICAgICAgICAgIDB4MDA0MDA1NzAgICAgLyogSU8gQ1JCIEVudHJ5IDdfRSAgICAgICAqLworCisjZGVmaW5lICAgIElJT19JQ1JCOF9BICAgICAgICAgICAgICAgMHgwMDQwMDU4MCAgICAvKiBJTyBDUkIgRW50cnkgOF9BICAgICAgICovCisjZGVmaW5lICAgIElJT19JQ1JCOF9CICAgICAgICAgICAgICAgMHgwMDQwMDU4OCAgICAvKiBJTyBDUkIgRW50cnkgOF9CICAgICAgICovCisjZGVmaW5lICAgIElJT19JQ1JCOF9DICAgICAgICAgICAgICAgMHgwMDQwMDU5MCAgICAvKiBJTyBDUkIgRW50cnkgOF9DICAgICAgICovCisjZGVmaW5lICAgIElJT19JQ1JCOF9EICAgICAgICAgICAgICAgMHgwMDQwMDU5OCAgICAvKiBJTyBDUkIgRW50cnkgOF9EICAgICAgICovCisjZGVmaW5lICAgIElJT19JQ1JCOF9FICAgICAgICAgICAgICAgMHgwMDQwMDVhMCAgICAvKiBJTyBDUkIgRW50cnkgOF9FICAgICAgICovCisKKyNkZWZpbmUgICAgSUlPX0lDUkI5X0EgICAgICAgICAgICAgICAweDAwNDAwNWIwICAgIC8qIElPIENSQiBFbnRyeSA5X0EgICAgICAgKi8KKyNkZWZpbmUgICAgSUlPX0lDUkI5X0IgICAgICAgICAgICAgICAweDAwNDAwNWI4ICAgIC8qIElPIENSQiBFbnRyeSA5X0IgICAgICAgKi8KKyNkZWZpbmUgICAgSUlPX0lDUkI5X0MgICAgICAgICAgICAgICAweDAwNDAwNWMwICAgIC8qIElPIENSQiBFbnRyeSA5X0MgICAgICAgKi8KKyNkZWZpbmUgICAgSUlPX0lDUkI5X0QgICAgICAgICAgICAgICAweDAwNDAwNWM4ICAgIC8qIElPIENSQiBFbnRyeSA5X0QgICAgICAgKi8KKyNkZWZpbmUgICAgSUlPX0lDUkI5X0UgICAgICAgICAgICAgICAweDAwNDAwNWQwICAgIC8qIElPIENSQiBFbnRyeSA5X0UgICAgICAgKi8KKworI2RlZmluZSAgICBJSU9fSUNSQkFfQSAgICAgICAgICAgICAgIDB4MDA0MDA1ZTAgICAgLyogSU8gQ1JCIEVudHJ5IEFfQSAgICAgICAqLworI2RlZmluZSAgICBJSU9fSUNSQkFfQiAgICAgICAgICAgICAgIDB4MDA0MDA1ZTggICAgLyogSU8gQ1JCIEVudHJ5IEFfQiAgICAgICAqLworI2RlZmluZSAgICBJSU9fSUNSQkFfQyAgICAgICAgICAgICAgIDB4MDA0MDA1ZjAgICAgLyogSU8gQ1JCIEVudHJ5IEFfQyAgICAgICAqLworI2RlZmluZSAgICBJSU9fSUNSQkFfRCAgICAgICAgICAgICAgIDB4MDA0MDA1ZjggICAgLyogSU8gQ1JCIEVudHJ5IEFfRCAgICAgICAqLworI2RlZmluZSAgICBJSU9fSUNSQkFfRSAgICAgICAgICAgICAgIDB4MDA0MDA2MDAgICAgLyogSU8gQ1JCIEVudHJ5IEFfRSAgICAgICAqLworCisjZGVmaW5lICAgIElJT19JQ1JCQl9BICAgICAgICAgICAgICAgMHgwMDQwMDYxMCAgICAvKiBJTyBDUkIgRW50cnkgQl9BICAgICAgICovCisjZGVmaW5lICAgIElJT19JQ1JCQl9CICAgICAgICAgICAgICAgMHgwMDQwMDYxOCAgICAvKiBJTyBDUkIgRW50cnkgQl9CICAgICAgICovCisjZGVmaW5lICAgIElJT19JQ1JCQl9DICAgICAgICAgICAgICAgMHgwMDQwMDYyMCAgICAvKiBJTyBDUkIgRW50cnkgQl9DICAgICAgICovCisjZGVmaW5lICAgIElJT19JQ1JCQl9EICAgICAgICAgICAgICAgMHgwMDQwMDYyOCAgICAvKiBJTyBDUkIgRW50cnkgQl9EICAgICAgICovCisjZGVmaW5lICAgIElJT19JQ1JCQl9FICAgICAgICAgICAgICAgMHgwMDQwMDYzMCAgICAvKiBJTyBDUkIgRW50cnkgQl9FICAgICAgICovCisKKyNkZWZpbmUgICAgSUlPX0lDUkJDX0EgICAgICAgICAgICAgICAweDAwNDAwNjQwICAgIC8qIElPIENSQiBFbnRyeSBDX0EgICAgICAgKi8KKyNkZWZpbmUgICAgSUlPX0lDUkJDX0IgICAgICAgICAgICAgICAweDAwNDAwNjQ4ICAgIC8qIElPIENSQiBFbnRyeSBDX0IgICAgICAgKi8KKyNkZWZpbmUgICAgSUlPX0lDUkJDX0MgICAgICAgICAgICAgICAweDAwNDAwNjUwICAgIC8qIElPIENSQiBFbnRyeSBDX0MgICAgICAgKi8KKyNkZWZpbmUgICAgSUlPX0lDUkJDX0QgICAgICAgICAgICAgICAweDAwNDAwNjU4ICAgIC8qIElPIENSQiBFbnRyeSBDX0QgICAgICAgKi8KKyNkZWZpbmUgICAgSUlPX0lDUkJDX0UgICAgICAgICAgICAgICAweDAwNDAwNjYwICAgIC8qIElPIENSQiBFbnRyeSBDX0UgICAgICAgKi8KKworI2RlZmluZSAgICBJSU9fSUNSQkRfQSAgICAgICAgICAgICAgIDB4MDA0MDA2NzAgICAgLyogSU8gQ1JCIEVudHJ5IERfQSAgICAgICAqLworI2RlZmluZSAgICBJSU9fSUNSQkRfQiAgICAgICAgICAgICAgIDB4MDA0MDA2NzggICAgLyogSU8gQ1JCIEVudHJ5IERfQiAgICAgICAqLworI2RlZmluZSAgICBJSU9fSUNSQkRfQyAgICAgICAgICAgICAgIDB4MDA0MDA2ODAgICAgLyogSU8gQ1JCIEVudHJ5IERfQyAgICAgICAqLworI2RlZmluZSAgICBJSU9fSUNSQkRfRCAgICAgICAgICAgICAgIDB4MDA0MDA2ODggICAgLyogSU8gQ1JCIEVudHJ5IERfRCAgICAgICAqLworI2RlZmluZSAgICBJSU9fSUNSQkRfRSAgICAgICAgICAgICAgIDB4MDA0MDA2OTAgICAgLyogSU8gQ1JCIEVudHJ5IERfRSAgICAgICAqLworCisjZGVmaW5lICAgIElJT19JQ1JCRV9BICAgICAgICAgICAgICAgMHgwMDQwMDZhMCAgICAvKiBJTyBDUkIgRW50cnkgRV9BICAgICAgICovCisjZGVmaW5lICAgIElJT19JQ1JCRV9CICAgICAgICAgICAgICAgMHgwMDQwMDZhOCAgICAvKiBJTyBDUkIgRW50cnkgRV9CICAgICAgICovCisjZGVmaW5lICAgIElJT19JQ1JCRV9DICAgICAgICAgICAgICAgMHgwMDQwMDZiMCAgICAvKiBJTyBDUkIgRW50cnkgRV9DICAgICAgICovCisjZGVmaW5lICAgIElJT19JQ1JCRV9EICAgICAgICAgICAgICAgMHgwMDQwMDZiOCAgICAvKiBJTyBDUkIgRW50cnkgRV9EICAgICAgICovCisjZGVmaW5lICAgIElJT19JQ1JCRV9FICAgICAgICAgICAgICAgMHgwMDQwMDZjMCAgICAvKiBJTyBDUkIgRW50cnkgRV9FICAgICAgICovCisKKyNkZWZpbmUgICAgSUlPX0lDU01MICAgICAgICAgICAgICAgICAweDAwNDAwNzAwICAgIC8qIElPIENSQiBTcHVyaW91cyBNZXNzYWdlIExvdyAqLworI2RlZmluZSAgICBJSU9fSUNTTU0gICAgICAgICAgICAgICAgIDB4MDA0MDA3MDggICAgLyogSU8gQ1JCIFNwdXJpb3VzIE1lc3NhZ2UgTWlkZGxlICovCisjZGVmaW5lICAgIElJT19JQ1NNSCAgICAgICAgICAgICAgICAgMHgwMDQwMDcxMCAgICAvKiBJTyBDUkIgU3B1cmlvdXMgTWVzc2FnZSBIaWdoICovCisKKyNkZWZpbmUgICAgSUlPX0lEQlNTICAgICAgICAgICAgICAgICAweDAwNDAwNzE4ICAgIC8qIElPIERlYnVnIFN1Ym1lbnUgU2VsZWN0ICovCisKKyNkZWZpbmUgICAgSUlPX0lCTFMwICAgICAgICAgICAgICAgICAweDAwNDEwMDAwICAgIC8qIElPIEJURSBMZW5ndGggU3RhdHVzIDAgKi8KKyNkZWZpbmUgICAgSUlPX0lCU0EwICAgICAgICAgICAgICAgICAweDAwNDEwMDA4ICAgIC8qIElPIEJURSBTb3VyY2UgQWRkcmVzcyAwICovCisjZGVmaW5lICAgIElJT19JQkRBMCAgICAgICAgICAgICAgICAgMHgwMDQxMDAxMCAgICAvKiBJTyBCVEUgRGVzdGluYXRpb24gQWRkcmVzcyAwICovCisjZGVmaW5lICAgIElJT19JQkNUMCAgICAgICAgICAgICAgICAgMHgwMDQxMDAxOCAgICAvKiBJTyBCVEUgQ29udHJvbCBUZXJtaW5hdGUgMCAqLworI2RlZmluZSAgICBJSU9fSUJOQTAgICAgICAgICAgICAgICAgIDB4MDA0MTAwMjAgICAgLyogSU8gQlRFIE5vdGlmaWNhdGlvbiBBZGRyZXNzIDAgKi8KKyNkZWZpbmUgICAgSUlPX0lCSUEwICAgICAgICAgICAgICAgICAweDAwNDEwMDI4ICAgIC8qIElPIEJURSBJbnRlcnJ1cHQgQWRkcmVzcyAwICovCisjZGVmaW5lICAgIElJT19JQkxTMSAgICAgICAgICAgICAgICAgMHgwMDQyMDAwMCAgICAvKiBJTyBCVEUgTGVuZ3RoIFN0YXR1cyAxICovCisjZGVmaW5lICAgIElJT19JQlNBMSAgICAgICAgICAgICAgICAgMHgwMDQyMDAwOCAgICAvKiBJTyBCVEUgU291cmNlIEFkZHJlc3MgMSAqLworI2RlZmluZSAgICBJSU9fSUJEQTEgICAgICAgICAgICAgICAgIDB4MDA0MjAwMTAgICAgLyogSU8gQlRFIERlc3RpbmF0aW9uIEFkZHJlc3MgMSAqLworI2RlZmluZSAgICBJSU9fSUJDVDEgICAgICAgICAgICAgICAgIDB4MDA0MjAwMTggICAgLyogSU8gQlRFIENvbnRyb2wgVGVybWluYXRlIDEgKi8KKyNkZWZpbmUgICAgSUlPX0lCTkExICAgICAgICAgICAgICAgICAweDAwNDIwMDIwICAgIC8qIElPIEJURSBOb3RpZmljYXRpb24gQWRkcmVzcyAxICovCisjZGVmaW5lICAgIElJT19JQklBMSAgICAgICAgICAgICAgICAgMHgwMDQyMDAyOCAgICAvKiBJTyBCVEUgSW50ZXJydXB0IEFkZHJlc3MgMSAqLworCisjZGVmaW5lICAgIElJT19JUENSICAgICAgICAgICAgICAgICAgMHgwMDQzMDAwMCAgICAvKiBJTyBQZXJmb3JtYW5jZSBDb250cm9sICovCisjZGVmaW5lICAgIElJT19JUFBSICAgICAgICAgICAgICAgICAgMHgwMDQzMDAwOCAgICAvKiBJTyBQZXJmb3JtYW5jZSBQcm9maWxpbmcgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBEZXNjcmlwdGlvbjogIFRoaXMgcmVnaXN0ZXIgZWNob2VzIHNvbWUgaW5mb3JtYXRpb24gZnJvbSB0aGUgICAgICAgICAqCisgKiBMQl9SRVZfSUQgcmVnaXN0ZXIuIEl0IGlzIGF2YWlsYWJsZSB0aHJvdWdoIENyb3NzdGFsayBhcyBkZXNjcmliZWQgICAqCisgKiBhYm92ZS4gVGhlIFJFVl9OVU0gYW5kIE1GR19OVU0gZmllbGRzIHJlY2VpdmUgdGhlaXIgdmFsdWVzIGZyb20gICAgICAqCisgKiB0aGUgUkVWSVNJT04gYW5kIE1BTlVGQUNUVVJFUiBmaWVsZHMgaW4gdGhlIExCX1JFVl9JRCByZWdpc3Rlci4gICAgICAqCisgKiBUaGUgUEFSVF9OVU0gZmllbGQncyB2YWx1ZSBpcyB0aGUgQ3Jvc3N0YWxrIGRldmljZSBJRCBudW1iZXIgdGhhdCAgICAqCisgKiBTdGV2ZSBNaWxsZXIgYXNzaWduZWQgdG8gdGhlIFNIdWIgY2hpcC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIHVuaW9uIGlpX3dpZF91IHsKKwl1aW50NjRfdAlpaV93aWRfcmVndmFsOworCXN0cnVjdAl7CisJCXVpbnQ2NF90CXdfcnN2ZF8xCQkgIDoJIDE7CisJCXVpbnQ2NF90CXdfbWZnX251bQkJICA6CTExOworCQl1aW50NjRfdAl3X3BhcnRfbnVtCQkgIDoJMTY7CisJCXVpbnQ2NF90CXdfcmV2X251bQkJICA6CSA0OworCQl1aW50NjRfdAl3X3JzdmQJCQkgIDoJMzI7CisJfSBpaV93aWRfZmxkX3M7Cit9IGlpX3dpZF91X3Q7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogIFRoZSBmaWVsZHMgaW4gdGhpcyByZWdpc3RlciBhcmUgc2V0IHVwb24gZGV0ZWN0aW9uIG9mIGFuIGVycm9yICAgICAgKgorICogYW5kIGNsZWFyZWQgYnkgdmFyaW91cyBtZWNoYW5pc21zLCBhcyBleHBsYWluZWQgaW4gdGhlICAgICAgICAgICAgICAgKgorICogZGVzY3JpcHRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordHlwZWRlZiB1bmlvbiBpaV93c3RhdF91IHsKKwl1aW50NjRfdAlpaV93c3RhdF9yZWd2YWw7CisJc3RydWN0CXsKKwkJdWludDY0X3QJd19wZW5kaW5nCQkgIDoJIDQ7CisJCXVpbnQ2NF90CXdfeHRfY3JkX3RvCQkgIDoJIDE7CisJCXVpbnQ2NF90CXdfeHRfdGFpbF90bwkJICA6CSAxOworCQl1aW50NjRfdAl3X3JzdmRfMwkJICA6CSAzOworCQl1aW50NjRfdCAgICAgICB3X3R4X214X3J0eSAgICAgICAgICAgICAgIDogICAgICAxOworCQl1aW50NjRfdAl3X3JzdmRfMgkJICA6CSA2OworCQl1aW50NjRfdAl3X2xscF90eF9jbnQJCSAgOgkgODsKKwkJdWludDY0X3QJd19yc3ZkXzEJCSAgOgkgODsKKwkJdWludDY0X3QJd19jcmF6eQkJCSAgOgkgMTsKKwkJdWludDY0X3QJd19yc3ZkCQkJICA6CTMxOworCX0gaWlfd3N0YXRfZmxkX3M7Cit9IGlpX3dzdGF0X3VfdDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBEZXNjcmlwdGlvbjogIFRoaXMgaXMgYSByZWFkLXdyaXRlIGVuYWJsZWQgcmVnaXN0ZXIuIEl0IGNvbnRyb2xzICAgICAqCisgKiB2YXJpb3VzIGFzcGVjdHMgb2YgdGhlIENyb3NzdGFsayBmbG93IGNvbnRyb2wuICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIHVuaW9uIGlpX3djcl91IHsKKwl1aW50NjRfdAlpaV93Y3JfcmVndmFsOworCXN0cnVjdAl7CisJCXVpbnQ2NF90CXdfd2lkCQkJICA6CSA0OworCQl1aW50NjRfdAl3X3RhZwkJCSAgOgkgMTsKKwkJdWludDY0X3QJd19yc3ZkXzEJCSAgOgkgODsKKwkJdWludDY0X3QJd19kc3RfY3JkCQkgIDoJIDM7CisJCXVpbnQ2NF90CXdfZl9iYWRfcGt0CQkgIDoJIDE7CisJCXVpbnQ2NF90CXdfZGlyX2NvbgkJICA6CSAxOworCQl1aW50NjRfdAl3X2VfdGhyZXNoCQkgIDoJIDU7CisJCXVpbnQ2NF90CXdfcnN2ZAkJCSAgOgk0MTsKKwl9IGlpX3djcl9mbGRfczsKK30gaWlfd2NyX3VfdDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBEZXNjcmlwdGlvbjogIFRoaXMgcmVnaXN0ZXIncyB2YWx1ZSBpcyBhIGJpdCB2ZWN0b3IgdGhhdCBndWFyZHMgICAgICAqCisgKiBhY2Nlc3MgdG8gbG9jYWwgcmVnaXN0ZXJzIHdpdGhpbiB0aGUgSUkgYXMgd2VsbCBhcyB0byBleHRlcm5hbCAgICAgICAqCisgKiBDcm9zc3RhbGsgd2lkZ2V0cy4gRWFjaCBiaXQgaW4gdGhlIHJlZ2lzdGVyIGNvcnJlc3BvbmRzIHRvIGEgICAgICAgICAqCisgKiBwYXJ0aWN1bGFyIHJlZ2lvbiBpbiB0aGUgc3lzdGVtOyBhIHJlZ2lvbiBjb25zaXN0cyBvZiBvbmUsIHR3byBvciAgICAqCisgKiBmb3VyIG5vZGVzIChkZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIHRoZSBSRUdJT05fU0laRSBmaWVsZCBpbiB0aGUgICAqCisgKiBMQl9SRVZfSUQgcmVnaXN0ZXIsIHdoaWNoIGlzIGRvY3VtZW50ZWQgaW4gU2VjdGlvbiA4LjMuMS4xKS4gVGhlICAgICAqCisgKiBwcm90ZWN0aW9uIHByb3ZpZGVkIGJ5IHRoaXMgcmVnaXN0ZXIgYXBwbGllcyB0byBQSU8gcmVhZCAgICAgICAgICAgICAqCisgKiBvcGVyYXRpb25zIGFzIHdlbGwgYXMgUElPIHdyaXRlIG9wZXJhdGlvbnMuIFRoZSBJSSB3aWxsIHBlcmZvcm0gYSAgICAqCisgKiBQSU8gcmVhZCBvciB3cml0ZSByZXF1ZXN0IG9ubHkgaWYgdGhlIGJpdCBmb3IgdGhlIHJlcXVlc3RvcidzICAgICAgICAqCisgKiByZWdpb24gaXMgc2V0OyBvdGhlcndpc2UsIHRoZSBJSSB3aWxsIG5vdCBwZXJmb3JtIHRoZSByZXF1ZXN0ZWQgICAgICAqCisgKiBvcGVyYXRpb24gYW5kIHdpbGwgcmV0dXJuIGFuIGVycm9yIHJlc3BvbnNlLiBXaGVuIGEgUElPIHJlYWQgb3IgICAgICAqCisgKiB3cml0ZSByZXF1ZXN0IHRhcmdldHMgYW4gZXh0ZXJuYWwgQ3Jvc3N0YWxrIHdpZGdldCwgdGhlbiBub3Qgb25seSAgICAqCisgKiBtdXN0IHRoZSBiaXQgZm9yIHRoZSByZXF1ZXN0b3IncyByZWdpb24gYmUgc2V0IGluIHRoZSBJTEFQUiwgYnV0ICAgICAqCisgKiBhbHNvIHRoZSB0YXJnZXQgd2lkZ2V0J3MgYml0IGluIHRoZSBJT1dBIHJlZ2lzdGVyIG11c3QgYmUgc2V0IGluICAgICAqCisgKiBvcmRlciBmb3IgdGhlIElJIHRvIHBlcmZvcm0gdGhlIHJlcXVlc3RlZCBvcGVyYXRpb247IG90aGVyd2lzZSwgICAgICAqCisgKiB0aGUgSUkgd2lsbCByZXR1cm4gYW4gZXJyb3IgcmVzcG9uc2UuIEhlbmNlLCB0aGUgcHJvdGVjdGlvbiAgICAgICAgICAqCisgKiBwcm92aWRlZCBieSB0aGUgSU9XQSByZWdpc3RlciBzdXBwbGVtZW50cyB0aGUgcHJvdGVjdGlvbiBwcm92aWRlZCAgICAqCisgKiBieSB0aGUgSUxBUFIgZm9yIHJlcXVlc3RzIHRoYXQgdGFyZ2V0IGV4dGVybmFsIENyb3NzdGFsayB3aWRnZXRzLiAgICAqCisgKiBUaGlzIHJlZ2lzdGVyIGl0c2VsZiBjYW4gYmUgYWNjZXNzZWQgb25seSBieSB0aGUgbm9kZXMgd2hvc2UgICAgICAgICAqCisgKiByZWdpb24gSUQgYml0cyBhcmUgZW5hYmxlZCBpbiB0aGlzIHNhbWUgcmVnaXN0ZXIuIEl0IGNhbiBhbHNvIGJlICAgICAqCisgKiBhY2Nlc3NlZCB0aHJvdWdoIHRoZSBJQWxpYXMgc3BhY2UgYnkgdGhlIGxvY2FsIHByb2Nlc3NvcnMuICAgICAgICAgICAqCisgKiBUaGUgcmVzZXQgdmFsdWUgb2YgdGhpcyByZWdpc3RlciBhbGxvd3MgYWNjZXNzIGJ5IGFsbCBub2Rlcy4gICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIHVuaW9uIGlpX2lsYXByX3UgeworCXVpbnQ2NF90CWlpX2lsYXByX3JlZ3ZhbDsKKwlzdHJ1Y3QgIHsKKwkJdWludDY0X3QJaV9yZWdpb24gICAgICAgICAgICAgICAgICA6CTY0OworCX0gaWlfaWxhcHJfZmxkX3M7Cit9IGlpX2lsYXByX3VfdDsKKworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRGVzY3JpcHRpb246ICBBIHdyaXRlIHRvIHRoaXMgcmVnaXN0ZXIgb2YgdGhlIDY0LWJpdCB2YWx1ZSAgICAgICAgICAgKgorICogIlNHSXJ1bGVzIiBpbiBBU0NJSSwgd2lsbCBjYXVzZSB0aGUgYml0IGluIHRoZSBJTEFQUiByZWdpc3RlciAgICAgICAgKgorICogY29ycmVzcG9uZGluZyB0byB0aGUgcmVnaW9uIG9mIHRoZSByZXF1ZXN0b3IgdG8gYmUgc2V0IChhbGxvdyAgICAgICAgKgorICogYWNjZXNzKS4gQSB3cml0ZSBvZiBhbnkgb3RoZXIgdmFsdWUgd2lsbCBiZSBpZ25vcmVkLiBBY2Nlc3MgICAgICAgICAgKgorICogcHJvdGVjdGlvbiBmb3IgdGhpcyByZWdpc3RlciBpcyAiU0dJcnVsZXMiLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyByZWdpc3RlciBjYW4gYWxzbyBiZSBhY2Nlc3NlZCB0aHJvdWdoIHRoZSBJQWxpYXMgc3BhY2UuICAgICAgICAgKgorICogSG93ZXZlciwgdGhpcyBhY2Nlc3Mgd2lsbCBub3QgY2hhbmdlIHRoZSBhY2Nlc3MgcGVybWlzc2lvbnMgaW4gdGhlICAgKgorICogSUxBUFIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordHlwZWRlZiB1bmlvbiBpaV9pbGFwb191IHsKKwl1aW50NjRfdAlpaV9pbGFwb19yZWd2YWw7CisJc3RydWN0CXsKKwkJdWludDY0X3QJaV9pb19vdnJyaWRlICAgICAgICAgICAgOgk2NDsKKwl9IGlpX2lsYXBvX2ZsZF9zOworfSBpaV9pbGFwb191X3Q7CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgVGhpcyByZWdpc3RlciBxdWFsaWZpZXMgYWxsIHRoZSBQSU8gYW5kIEdyYXBoaWNzIHdyaXRlcyBsYXVuY2hlZCAgICAqCisgKiBmcm9tIHRoZSBTSFVCIHRvd2FyZHMgYSB3aWRnZXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIHVuaW9uIGlpX2lvd2FfdSB7CisJdWludDY0X3QJaWlfaW93YV9yZWd2YWw7CisJc3RydWN0CXsKKwkJdWludDY0X3QJaV93MF9vYWMJCSAgOgkgMTsKKwkJdWludDY0X3QJaV9yc3ZkXzEJCSAgOgkgNzsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCAgICAgICBpX3d4X29hYyAgICAgICAgICAgICAgICAgIDogICAgICA4OworCQl1aW50NjRfdAlpX3JzdmQJCQkgIDoJNDg7CisJfSBpaV9pb3dhX2ZsZF9zOworfSBpaV9pb3dhX3VfdDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBEZXNjcmlwdGlvbjogIFRoaXMgcmVnaXN0ZXIgcXVhbGlmaWVzIGFsbCB0aGUgcmVxdWVzdHMgbGF1bmNoZWQgICAgICAqCisgKiBmcm9tIGEgd2lkZ2V0IHRvd2FyZHMgdGhlIFNodWIuIFRoaXMgcmVnaXN0ZXIgaXMgaW50ZW5kZWQgdG8gYmUgICAgICAqCisgKiB1c2VkIGJ5IHNvZnR3YXJlIGluIGNhc2Ugb2YgbWlzYmVoYXZpbmcgd2lkZ2V0cy4gICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIHVuaW9uIGlpX2lpd2FfdSB7CisJdWludDY0X3QJaWlfaWl3YV9yZWd2YWw7CisJc3RydWN0ICB7CisJCXVpbnQ2NF90CWlfdzBfaWFjICAgICAgICAgICAgICAgICAgOgkgMTsKKwkJdWludDY0X3QJaV9yc3ZkXzEJCSAgOgkgNzsKKwkJdWludDY0X3QJaV93eF9pYWMJCSAgOgkgODsKKwkJdWludDY0X3QJaV9yc3ZkCQkJICA6CTQ4OworCX0gaWlfaWl3YV9mbGRfczsKK30gaWlfaWl3YV91X3Q7CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBEZXNjcmlwdGlvbjogIFRoaXMgcmVnaXN0ZXIgcXVhbGlmaWVzIGFsbCB0aGUgb3BlcmF0aW9ucyBsYXVuY2hlZCAgICAqCisgKiBmcm9tIGEgd2lkZ2V0IHRvd2FyZHMgdGhlIFNIdWIuIEl0IGFsbG93cyBpbmRpdmlkdWFsIGFjY2VzcyAgICAgICAgICAqCisgKiBjb250cm9sIGZvciB1cCB0byA4IGRldmljZXMgcGVyIHdpZGdldC4gQSBkZXZpY2UgcmVmZXJzIHRvICAgICAgICAgICAqCisgKiBpbmRpdmlkdWFsIERNQSBtYXN0ZXIgaG9zdGVkIGJ5IGEgd2lkZ2V0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYml0cyBpbiBlYWNoIGZpZWxkIG9mIHRoaXMgcmVnaXN0ZXIgYXJlIGNsZWFyZWQgYnkgdGhlIFNodWIgICAgICAqCisgKiB1cG9uIGRldGVjdGlvbiBvZiBhbiBlcnJvciB3aGljaCByZXF1aXJlcyB0aGUgZGV2aWNlIHRvIGJlICAgICAgICAgICAqCisgKiBkaXNhYmxlZC4gVGhlc2UgZmllbGRzIGFzc3VtZSB0aGF0IDA9VE5VTT03IChpLmUuLCBCcmlkZ2UtY2VudHJpYyAgICAqCisgKiBDcm9zc3RhbGspLiBXaGV0aGVyIG9yIG5vdCBhIGRldmljZSBoYXMgYWNjZXNzIHJpZ2h0cyB0byB0aGlzICAgICAgICAqCisgKiBTaHViIGlzIGRldGVybWluZWQgYnkgYW4gQU5EIG9mIHRoZSBkZXZpY2UgZW5hYmxlIGJpdCBpbiB0aGUgICAgICAgICAqCisgKiBhcHByb3ByaWF0ZSBmaWVsZCBvZiB0aGlzIHJlZ2lzdGVyIGFuZCB0aGUgY29ycmVzcG9uZGluZyBiaXQgaW4gICAgICAqCisgKiB0aGUgV3hfSUFDIGZpZWxkIChmb3IgdGhlIHdpZGdldCB3aGljaCB0aGlzIGRldmljZSBiZWxvbmdzIHRvKS4gICAgICAqCisgKiBUaGUgYml0cyBpbiB0aGlzIGZpZWxkIGFyZSBzZXQgYnkgd3JpdGluZyBhIDEgdG8gdGhlbS4gSW5jb21pbmcgICAgICAqCisgKiByZXBsaWVzIGZyb20gQ3Jvc3N0YWxrIGFyZSBub3Qgc3ViamVjdCB0byB0aGlzIGFjY2VzcyBjb250cm9sICAgICAgICAqCisgKiBtZWNoYW5pc20uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIHVuaW9uIGlpX2lpZGVtX3UgeworCXVpbnQ2NF90CWlpX2lpZGVtX3JlZ3ZhbDsKKwlzdHJ1Y3QJeworCQl1aW50NjRfdAlpX3c4X2R4cwkJICA6CSA4OworCQl1aW50NjRfdAlpX3c5X2R4cwkJICA6CSA4OworCQl1aW50NjRfdAlpX3dhX2R4cwkJICA6CSA4OworCQl1aW50NjRfdAlpX3diX2R4cwkJICA6CSA4OworCQl1aW50NjRfdAlpX3djX2R4cwkJICA6CSA4OworCQl1aW50NjRfdAlpX3dkX2R4cwkJICA6CSA4OworCQl1aW50NjRfdAlpX3dlX2R4cwkJICA6CSA4OworCQl1aW50NjRfdAlpX3dmX2R4cwkJICA6CSA4OworCX0gaWlfaWlkZW1fZmxkX3M7Cit9IGlpX2lpZGVtX3VfdDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgVGhpcyByZWdpc3RlciBjb250YWlucyB0aGUgdmFyaW91cyBwcm9ncmFtbWFibGUgZmllbGRzIG5lY2Vzc2FyeSAgICAqCisgKiBmb3IgY29udHJvbGxpbmcgYW5kIG9ic2VydmluZyB0aGUgTExQIHNpZ25hbHMuICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIHVuaW9uIGlpX2lsY3NyX3UgeworCXVpbnQ2NF90CWlpX2lsY3NyX3JlZ3ZhbDsKKwlzdHJ1Y3QgIHsKKwkJdWludDY0X3QJaV9udWxsdG8gICAgICAgICAgICAgICAgICA6CSA2OworCQl1aW50NjRfdAlpX3JzdmRfNAkJICA6CSAyOworCQl1aW50NjRfdAlpX3dybXJzdAkJICA6CSAxOworCQl1aW50NjRfdAlpX3JzdmRfMwkJICA6CSAxOworCQl1aW50NjRfdAlpX2xscF9lbgkJICA6CSAxOworCQl1aW50NjRfdAlpX2JtOAkJCSAgOgkgMTsKKwkJdWludDY0X3QJaV9sbHBfc3RhdAkJICA6CSAyOworCQl1aW50NjRfdAlpX3JlbW90ZV9wb3dlcgkJICA6CSAxOworCQl1aW50NjRfdAlpX3JzdmRfMgkJICA6CSAxOworCQl1aW50NjRfdAlpX21heHJ0cnkJCSAgOgkxMDsKKwkJdWludDY0X3QJaV9kX2F2YWlsX3NlbAkJICA6CSAyOworCQl1aW50NjRfdAlpX3JzdmRfMQkJICA6CSA0OworCQl1aW50NjRfdAlpX21heGJyc3QJCSAgOgkxMDsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCAgICAgICBpX3JzdmQgICAgICAgICAgICAgICAgICAgIDogICAgIDIyOworCisJfSBpaV9pbGNzcl9mbGRfczsKK30gaWlfaWxjc3JfdV90OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICBUaGlzIGlzIHNpbXBseSBhIHN0YXR1cyByZWdpc3RlcnMgdGhhdCBtb25pdG9ycyB0aGUgTExQIGVycm9yICAgICAgICoKKyAqIHJhdGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgdW5pb24gaWlfaWxscl91IHsKKwl1aW50NjRfdAlpaV9pbGxyX3JlZ3ZhbDsKKwlzdHJ1Y3QJeworCQl1aW50NjRfdAlpX3NuX2NudAkJICA6CTE2OworCQl1aW50NjRfdAlpX2NiX2NudAkJICA6CTE2OworCQl1aW50NjRfdAlpX3JzdmQJCQkgIDoJMzI7CisJfSBpaV9pbGxyX2ZsZF9zOworfSBpaV9pbGxyX3VfdDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBEZXNjcmlwdGlvbjogIEFsbCBJSS1kZXRlY3RlZCBub24tQlRFIGVycm9yIGludGVycnVwdHMgYXJlICAgICAgICAgICAqCisgKiBzcGVjaWZpZWQgdmlhIHRoaXMgcmVnaXN0ZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBOT1RFOiBUaGUgUEkgaW50ZXJydXB0IHJlZ2lzdGVyIGFkZHJlc3MgaXMgaGFyZGNvZGVkIGluIHRoZSBJSS4gSWYgICAqCisgKiBQSV9JRD09MCwgdGhlbiB0aGUgSUkgc2VuZHMgYW4gaW50ZXJydXB0IHJlcXVlc3QgKER1cGxvbmV0IFBXUkkgICAgICAqCisgKiBwYWNrZXQpIHRvIGFkZHJlc3Mgb2Zmc2V0IDB4MDE4MF8wMDkwIHdpdGhpbiB0aGUgbG9jYWwgcmVnaXN0ZXIgICAgICAqCisgKiBhZGRyZXNzIHNwYWNlIG9mIFBJMCBvbiB0aGUgbm9kZSBzcGVjaWZpZWQgYnkgdGhlIE5PREUgZmllbGQuIElmICAgICAqCisgKiBQSV9JRD09MSwgdGhlbiB0aGUgSUkgc2VuZHMgdGhlIGludGVycnVwdCByZXF1ZXN0IHRvIGFkZHJlc3MgICAgICAgICAqCisgKiBvZmZzZXQgMHgwMUEwXzAwOTAgd2l0aGluIHRoZSBsb2NhbCByZWdpc3RlciBhZGRyZXNzIHNwYWNlIG9mIFBJMSAgICAqCisgKiBvbiB0aGUgbm9kZSBzcGVjaWZpZWQgYnkgdGhlIE5PREUgZmllbGQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIHVuaW9uIGlpX2lpZHNyX3UgeworCXVpbnQ2NF90CWlpX2lpZHNyX3JlZ3ZhbDsKKwlzdHJ1Y3QgIHsKKwkJdWludDY0X3QJaV9sZXZlbCAgICAgICAgICAgICAgICAgICA6CSA4OworCQl1aW50NjRfdAlpX3BpX2lkCQkJICA6CSAxOworCQl1aW50NjRfdAlpX25vZGUJCQkgIDoJMTE7CisJCXVpbnQ2NF90ICAgICAgIGlfcnN2ZF8zICAgICAgICAgICAgICAgICAgOiAgICAgIDQ7CisJCXVpbnQ2NF90CWlfZW5hYmxlCQkgIDoJIDE7CisJCXVpbnQ2NF90CWlfcnN2ZF8yCQkgIDoJIDM7CisJCXVpbnQ2NF90CWlfaW50X3NlbnQJCSAgOgkgMjsKKwkJdWludDY0X3QgICAgICAgaV9yc3ZkXzEgICAgICAgICAgICAgICAgICA6ICAgICAgMjsKKwkJdWludDY0X3QJaV9waTBfZm9yd2FyZF9pbnQJICA6CSAxOworCQl1aW50NjRfdAlpX3BpMV9mb3J3YXJkX2ludAkgIDoJIDE7CisJCXVpbnQ2NF90CWlfcnN2ZAkJCSAgOgkzMDsKKwl9IGlpX2lpZHNyX2ZsZF9zOworfSBpaV9paWRzcl91X3Q7CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgVGhlcmUgYXJlIHR3byBpbnN0YW5jZXMgb2YgdGhpcyByZWdpc3Rlci4gVGhpcyByZWdpc3RlciBpcyB1c2VkICAgICAqCisgKiBmb3IgbWF0Y2hpbmcgdXAgdGhlIGluY29taW5nIHJlc3BvbnNlcyBmcm9tIHRoZSBncmFwaGljcyB3aWRnZXQgdG8gICAqCisgKiB0aGUgcHJvY2Vzc29yIHRoYXQgaW5pdGlhdGVkIHRoZSBncmFwaGljcyBvcGVyYXRpb24uIFRoZSAgICAgICAgICAgICAqCisgKiB3cml0ZS1yZXNwb25zZXMgYXJlIGNvbnZlcnRlZCB0byBncmFwaGljcyBjcmVkaXRzIGFuZCByZXR1cm5lZCB0byAgICAqCisgKiB0aGUgcHJvY2Vzc29yIHNvIHRoYXQgdGhlIHByb2Nlc3NvciBpbnRlcmZhY2UgY2FuIG1hbmFnZSB0aGUgZmxvdyAgICAqCisgKiBjb250cm9sLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIHVuaW9uIGlpX2lnZngwX3UgeworCXVpbnQ2NF90CWlpX2lnZngwX3JlZ3ZhbDsKKwlzdHJ1Y3QJeworCQl1aW50NjRfdAlpX3dfbnVtCQkJICA6CSA0OworCQl1aW50NjRfdCAgICAgICBpX3BpX2lkICAgICAgICAgICAgICAgICAgIDogICAgICAxOworCQl1aW50NjRfdAlpX25fbnVtCQkJICA6CTEyOworCQl1aW50NjRfdCAgICAgICBpX3BfbnVtICAgICAgICAgICAgICAgICAgIDogICAgICAxOworCQl1aW50NjRfdCAgICAgICBpX3JzdmQgICAgICAgICAgICAgICAgICAgIDogICAgIDQ2OworCX0gaWlfaWdmeDBfZmxkX3M7Cit9IGlpX2lnZngwX3VfdDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgVGhlcmUgYXJlIHR3byBpbnN0YW5jZXMgb2YgdGhpcyByZWdpc3Rlci4gVGhpcyByZWdpc3RlciBpcyB1c2VkICAgICAqCisgKiBmb3IgbWF0Y2hpbmcgdXAgdGhlIGluY29taW5nIHJlc3BvbnNlcyBmcm9tIHRoZSBncmFwaGljcyB3aWRnZXQgdG8gICAqCisgKiB0aGUgcHJvY2Vzc29yIHRoYXQgaW5pdGlhdGVkIHRoZSBncmFwaGljcyBvcGVyYXRpb24uIFRoZSAgICAgICAgICAgICAqCisgKiB3cml0ZS1yZXNwb25zZXMgYXJlIGNvbnZlcnRlZCB0byBncmFwaGljcyBjcmVkaXRzIGFuZCByZXR1cm5lZCB0byAgICAqCisgKiB0aGUgcHJvY2Vzc29yIHNvIHRoYXQgdGhlIHByb2Nlc3NvciBpbnRlcmZhY2UgY2FuIG1hbmFnZSB0aGUgZmxvdyAgICAqCisgKiBjb250cm9sLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIHVuaW9uIGlpX2lnZngxX3UgeworCXVpbnQ2NF90CWlpX2lnZngxX3JlZ3ZhbDsKKwlzdHJ1Y3QgIHsKKwkJdWludDY0X3QJaV93X251bQkJCSAgOgkgNDsKKwkJdWludDY0X3QgICAgICAgaV9waV9pZCAgICAgICAgICAgICAgICAgICA6ICAgICAgMTsKKwkJdWludDY0X3QJaV9uX251bQkJCSAgOgkxMjsKKwkJdWludDY0X3QgICAgICAgaV9wX251bSAgICAgICAgICAgICAgICAgICA6ICAgICAgMTsKKwkJdWludDY0X3QgICAgICAgaV9yc3ZkICAgICAgICAgICAgICAgICAgICA6ICAgICA0NjsKKwl9IGlpX2lnZngxX2ZsZF9zOworfSBpaV9pZ2Z4MV91X3Q7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogIFRoZXJlIGFyZSB0d28gaW5zdGFuY2VzIG9mIHRoaXMgcmVnaXN0ZXJzLiBUaGVzZSByZWdpc3RlcnMgYXJlICAgICAgKgorICogdXNlZCBhcyBzY3JhdGNoIHJlZ2lzdGVycyBmb3Igc29mdHdhcmUgdXNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordHlwZWRlZiB1bmlvbiBpaV9pc2NyMF91IHsKKwl1aW50NjRfdAlpaV9pc2NyMF9yZWd2YWw7CisJc3RydWN0ICB7CisJCXVpbnQ2NF90CWlfc2NyYXRjaCAgICAgICAgICAgICAgICAgOgk2NDsKKwl9IGlpX2lzY3IwX2ZsZF9zOworfSBpaV9pc2NyMF91X3Q7CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgVGhlcmUgYXJlIHR3byBpbnN0YW5jZXMgb2YgdGhpcyByZWdpc3RlcnMuIFRoZXNlIHJlZ2lzdGVycyBhcmUgICAgICAqCisgKiB1c2VkIGFzIHNjcmF0Y2ggcmVnaXN0ZXJzIGZvciBzb2Z0d2FyZSB1c2UuICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIHVuaW9uIGlpX2lzY3IxX3UgeworCXVpbnQ2NF90CWlpX2lzY3IxX3JlZ3ZhbDsKKwlzdHJ1Y3QgIHsKKwkJdWludDY0X3QJaV9zY3JhdGNoICAgICAgICAgICAgICAgICA6CTY0OworCX0gaWlfaXNjcjFfZmxkX3M7Cit9IGlpX2lzY3IxX3VfdDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBEZXNjcmlwdGlvbjogIFRoZXJlIGFyZSBzZXZlbiBpbnN0YW5jZXMgb2YgdHJhbnNsYXRpb24gdGFibGUgZW50cnkgICAqCisgKiByZWdpc3RlcnMuIEVhY2ggcmVnaXN0ZXIgbWFwcyBhIFNodWIgQmlnIFdpbmRvdyB0byBhIDQ4LWJpdCAgICAgICAgICAqCisgKiBhZGRyZXNzIG9uIENyb3NzdGFsay4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBGb3IgTS1tb2RlICgxMjggbm9kZXMsIDggR0J5dGVzL25vZGUpLCBTeXNBRFszMToyOV0gKEJpZyBXaW5kb3cgICAgICAqCisgKiBudW1iZXIpIGFyZSB1c2VkIHRvIHNlbGVjdCBvbmUgb2YgdGhlc2UgNyByZWdpc3RlcnMuIFRoZSBXaWRnZXQgICAgICAqCisgKiBudW1iZXIgZmllbGQgaXMgdGhlbiBkZXJpdmVkIGZyb20gdGhlIFdfTlVNIGZpZWxkIGZvciBzeW50aGVzaXppbmcgICAqCisgKiBhIENyb3NzdGFsayBwYWNrZXQuIFRoZSA1IGJpdHMgb2YgT0ZGU0VUIGFyZSBjb25jYXRlbmF0ZWQgd2l0aCAgICAgICAqCisgKiBTeXNBRFsyODowXSB0byBmb3JtIENyb3NzdGFsa1szMzowXS4gVGhlIHVwcGVyIENyb3NzdGFsa1s0NzozNF0gICAgICAqCisgKiBhcmUgcGFkZGVkIHdpdGggemVyb3MuIEFsdGhvdWdoIHRoZSBtYXhpbXVtIENyb3NzdGFsayBzcGFjZSAgICAgICAgICAqCisgKiBhZGRyZXNzYWJsZSBieSB0aGUgU0h1YiBpcyB0aHVzIHRoZSBsb3dlciAxNiBHQnl0ZXMgcGVyIHdpZGdldCAgICAgICAqIAorICogKE0tbW9kZSksIGhvd2V2ZXIgb25seSA8U1VQID43PC9TVVA+LzxTVUIgPjMybmRzPC9TVUI+IG9mIHRoaXMgICAgICAgKgorICogc3BhY2UgY2FuIGJlIGFjY2Vzc2VkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRm9yIHRoZSBOLW1vZGUgKDI1NiBub2RlcywgNCBHQnl0ZXMvbm9kZSksIFN5c0FEWzMwOjI4XSAoQmlnICAgICAgICAgKgorICogV2luZG93IG51bWJlcikgYXJlIHVzZWQgdG8gc2VsZWN0IG9uZSBvZiB0aGVzZSA3IHJlZ2lzdGVycy4gVGhlICAgICAgKgorICogV2lkZ2V0IG51bWJlciBmaWVsZCBpcyB0aGVuIGRlcml2ZWQgZnJvbSB0aGUgV19OVU0gZmllbGQgZm9yICAgICAgICAgKgorICogc3ludGhlc2l6aW5nIGEgQ3Jvc3N0YWxrIHBhY2tldC4gVGhlIDUgYml0cyBvZiBPRkZTRVQgYXJlICAgICAgICAgICAgKgorICogY29uY2F0ZW5hdGVkIHdpdGggU3lzQURbMjc6MF0gdG8gZm9ybSBDcm9zc3RhbGtbMzM6MF0uIFRoZSBJT1NQICAgICAgKgorICogZmllbGQgaXMgdXNlZCBhcyBDcm9zc3RhbGtbNDddLCBhbmQgcmVtYWluZGVyIG9mIHRoZSBDcm9zc3RhbGsgICAgICAgKgorICogYWRkcmVzcyBiaXRzIChDcm9zc3RhbGtbNDY6MzRdKSBhcmUgYWx3YXlzIHplcm8uIFdoaWxlIHRoZSBtYXhpbXVtICAgKgorICogQ3Jvc3N0YWxrIHNwYWNlIGFkZHJlc3NhYmxlIGJ5IHRoZSBTaHViIGlzIHRodXMgdGhlIGxvd2VyICAgICAgICAgICAgKgorICogOC1HQnl0ZXMgcGVyIHdpZGdldCAoTi1tb2RlKSwgb25seSA8U1VQID43PC9TVVA+LzxTVUIgPjMybmRzPC9TVUI+ICAgKgorICogb2YgdGhpcyBzcGFjZSBjYW4gYmUgYWNjZXNzZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordHlwZWRlZiB1bmlvbiBpaV9pdHRlMV91IHsKKwl1aW50NjRfdAlpaV9pdHRlMV9yZWd2YWw7CisJc3RydWN0ICB7CisJCXVpbnQ2NF90CWlfb2Zmc2V0ICAgICAgICAgICAgICAgICAgOgkgNTsKKwkJdWludDY0X3QJaV9yc3ZkXzEJCSAgOgkgMzsKKwkJdWludDY0X3QJaV93X251bQkJCSAgOgkgNDsKKwkJdWludDY0X3QJaV9pb3NwCQkJICA6CSAxOworCQl1aW50NjRfdAlpX3JzdmQJCQkgIDoJNTE7CisJfSBpaV9pdHRlMV9mbGRfczsKK30gaWlfaXR0ZTFfdV90OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIERlc2NyaXB0aW9uOiAgVGhlcmUgYXJlIHNldmVuIGluc3RhbmNlcyBvZiB0cmFuc2xhdGlvbiB0YWJsZSBlbnRyeSAgICoKKyAqIHJlZ2lzdGVycy4gRWFjaCByZWdpc3RlciBtYXBzIGEgU2h1YiBCaWcgV2luZG93IHRvIGEgNDgtYml0ICAgICAgICAgICoKKyAqIGFkZHJlc3Mgb24gQ3Jvc3N0YWxrLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEZvciBNLW1vZGUgKDEyOCBub2RlcywgOCBHQnl0ZXMvbm9kZSksIFN5c0FEWzMxOjI5XSAoQmlnIFdpbmRvdyAgICAgICoKKyAqIG51bWJlcikgYXJlIHVzZWQgdG8gc2VsZWN0IG9uZSBvZiB0aGVzZSA3IHJlZ2lzdGVycy4gVGhlIFdpZGdldCAgICAgICoKKyAqIG51bWJlciBmaWVsZCBpcyB0aGVuIGRlcml2ZWQgZnJvbSB0aGUgV19OVU0gZmllbGQgZm9yIHN5bnRoZXNpemluZyAgICoKKyAqIGEgQ3Jvc3N0YWxrIHBhY2tldC4gVGhlIDUgYml0cyBvZiBPRkZTRVQgYXJlIGNvbmNhdGVuYXRlZCB3aXRoICAgICAgICoKKyAqIFN5c0FEWzI4OjBdIHRvIGZvcm0gQ3Jvc3N0YWxrWzMzOjBdLiBUaGUgdXBwZXIgQ3Jvc3N0YWxrWzQ3OjM0XSAgICAgICoKKyAqIGFyZSBwYWRkZWQgd2l0aCB6ZXJvcy4gQWx0aG91Z2ggdGhlIG1heGltdW0gQ3Jvc3N0YWxrIHNwYWNlICAgICAgICAgICoKKyAqIGFkZHJlc3NhYmxlIGJ5IHRoZSBTaHViIGlzIHRodXMgdGhlIGxvd2VyIDE2IEdCeXRlcyBwZXIgd2lkZ2V0ICAgICAgICoKKyAqIChNLW1vZGUpLCBob3dldmVyIG9ubHkgPFNVUCA+NzwvU1VQPi88U1VCID4zMm5kczwvU1VCPiBvZiB0aGlzICAgICAgICoKKyAqIHNwYWNlIGNhbiBiZSBhY2Nlc3NlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEZvciB0aGUgTi1tb2RlICgyNTYgbm9kZXMsIDQgR0J5dGVzL25vZGUpLCBTeXNBRFszMDoyOF0gKEJpZyAgICAgICAgICoKKyAqIFdpbmRvdyBudW1iZXIpIGFyZSB1c2VkIHRvIHNlbGVjdCBvbmUgb2YgdGhlc2UgNyByZWdpc3RlcnMuIFRoZSAgICAgICoKKyAqIFdpZGdldCBudW1iZXIgZmllbGQgaXMgdGhlbiBkZXJpdmVkIGZyb20gdGhlIFdfTlVNIGZpZWxkIGZvciAgICAgICAgICoKKyAqIHN5bnRoZXNpemluZyBhIENyb3NzdGFsayBwYWNrZXQuIFRoZSA1IGJpdHMgb2YgT0ZGU0VUIGFyZSAgICAgICAgICAgICoKKyAqIGNvbmNhdGVuYXRlZCB3aXRoIFN5c0FEWzI3OjBdIHRvIGZvcm0gQ3Jvc3N0YWxrWzMzOjBdLiBUaGUgSU9TUCAgICAgICoKKyAqIGZpZWxkIGlzIHVzZWQgYXMgQ3Jvc3N0YWxrWzQ3XSwgYW5kIHJlbWFpbmRlciBvZiB0aGUgQ3Jvc3N0YWxrICAgICAgICoKKyAqIGFkZHJlc3MgYml0cyAoQ3Jvc3N0YWxrWzQ2OjM0XSkgYXJlIGFsd2F5cyB6ZXJvLiBXaGlsZSB0aGUgbWF4aW11bSAgICoKKyAqIENyb3NzdGFsayBzcGFjZSBhZGRyZXNzYWJsZSBieSB0aGUgU2h1YiBpcyB0aHVzIHRoZSBsb3dlciAgICAgICAgICAgICoKKyAqIDgtR0J5dGVzIHBlciB3aWRnZXQgKE4tbW9kZSksIG9ubHkgPFNVUCA+NzwvU1VQPi88U1VCID4zMm5kczwvU1VCPiAgICoKKyAqIG9mIHRoaXMgc3BhY2UgY2FuIGJlIGFjY2Vzc2VkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgdW5pb24gaWlfaXR0ZTJfdSB7CisJdWludDY0X3QJaWlfaXR0ZTJfcmVndmFsOworCXN0cnVjdAl7CisJCXVpbnQ2NF90CWlfb2Zmc2V0CQkgIDoJIDU7CisJCXVpbnQ2NF90CWlfcnN2ZF8xCQkgIDoJIDM7CisJCXVpbnQ2NF90CWlfd19udW0JCQkgIDoJIDQ7CisJCXVpbnQ2NF90CWlfaW9zcAkJCSAgOgkgMTsKKwkJdWludDY0X3QgICAgICAgaV9yc3ZkICAgICAgICAgICAgICAgICAgICA6ICAgICA1MTsKKwl9IGlpX2l0dGUyX2ZsZF9zOworfSBpaV9pdHRlMl91X3Q7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRGVzY3JpcHRpb246ICBUaGVyZSBhcmUgc2V2ZW4gaW5zdGFuY2VzIG9mIHRyYW5zbGF0aW9uIHRhYmxlIGVudHJ5ICAgKgorICogcmVnaXN0ZXJzLiBFYWNoIHJlZ2lzdGVyIG1hcHMgYSBTaHViIEJpZyBXaW5kb3cgdG8gYSA0OC1iaXQgICAgICAgICAgKgorICogYWRkcmVzcyBvbiBDcm9zc3RhbGsuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRm9yIE0tbW9kZSAoMTI4IG5vZGVzLCA4IEdCeXRlcy9ub2RlKSwgU3lzQURbMzE6MjldIChCaWcgV2luZG93ICAgICAgKgorICogbnVtYmVyKSBhcmUgdXNlZCB0byBzZWxlY3Qgb25lIG9mIHRoZXNlIDcgcmVnaXN0ZXJzLiBUaGUgV2lkZ2V0ICAgICAgKgorICogbnVtYmVyIGZpZWxkIGlzIHRoZW4gZGVyaXZlZCBmcm9tIHRoZSBXX05VTSBmaWVsZCBmb3Igc3ludGhlc2l6aW5nICAgKgorICogYSBDcm9zc3RhbGsgcGFja2V0LiBUaGUgNSBiaXRzIG9mIE9GRlNFVCBhcmUgY29uY2F0ZW5hdGVkIHdpdGggICAgICAgKgorICogU3lzQURbMjg6MF0gdG8gZm9ybSBDcm9zc3RhbGtbMzM6MF0uIFRoZSB1cHBlciBDcm9zc3RhbGtbNDc6MzRdICAgICAgKgorICogYXJlIHBhZGRlZCB3aXRoIHplcm9zLiBBbHRob3VnaCB0aGUgbWF4aW11bSBDcm9zc3RhbGsgc3BhY2UgICAgICAgICAgKgorICogYWRkcmVzc2FibGUgYnkgdGhlIFNodWIgaXMgdGh1cyB0aGUgbG93ZXIgMTYgR0J5dGVzIHBlciB3aWRnZXQgICAgICAgKgorICogKE0tbW9kZSksIGhvd2V2ZXIgb25seSA8U1VQID43PC9TVVA+LzxTVUIgPjMybmRzPC9TVUI+IG9mIHRoaXMgICAgICAgKgorICogc3BhY2UgY2FuIGJlIGFjY2Vzc2VkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRm9yIHRoZSBOLW1vZGUgKDI1NiBub2RlcywgNCBHQnl0ZXMvbm9kZSksIFN5c0FEWzMwOjI4XSAoQmlnICAgICAgICAgKgorICogV2luZG93IG51bWJlcikgYXJlIHVzZWQgdG8gc2VsZWN0IG9uZSBvZiB0aGVzZSA3IHJlZ2lzdGVycy4gVGhlICAgICAgKgorICogV2lkZ2V0IG51bWJlciBmaWVsZCBpcyB0aGVuIGRlcml2ZWQgZnJvbSB0aGUgV19OVU0gZmllbGQgZm9yICAgICAgICAgKgorICogc3ludGhlc2l6aW5nIGEgQ3Jvc3N0YWxrIHBhY2tldC4gVGhlIDUgYml0cyBvZiBPRkZTRVQgYXJlICAgICAgICAgICAgKgorICogY29uY2F0ZW5hdGVkIHdpdGggU3lzQURbMjc6MF0gdG8gZm9ybSBDcm9zc3RhbGtbMzM6MF0uIFRoZSBJT1NQICAgICAgKgorICogZmllbGQgaXMgdXNlZCBhcyBDcm9zc3RhbGtbNDddLCBhbmQgcmVtYWluZGVyIG9mIHRoZSBDcm9zc3RhbGsgICAgICAgKgorICogYWRkcmVzcyBiaXRzIChDcm9zc3RhbGtbNDY6MzRdKSBhcmUgYWx3YXlzIHplcm8uIFdoaWxlIHRoZSBtYXhpbXVtICAgKgorICogQ3Jvc3N0YWxrIHNwYWNlIGFkZHJlc3NhYmxlIGJ5IHRoZSBTSHViIGlzIHRodXMgdGhlIGxvd2VyICAgICAgICAgICAgKgorICogOC1HQnl0ZXMgcGVyIHdpZGdldCAoTi1tb2RlKSwgb25seSA8U1VQID43PC9TVVA+LzxTVUIgPjMybmRzPC9TVUI+ICAgKgorICogb2YgdGhpcyBzcGFjZSBjYW4gYmUgYWNjZXNzZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordHlwZWRlZiB1bmlvbiBpaV9pdHRlM191IHsKKwl1aW50NjRfdAlpaV9pdHRlM19yZWd2YWw7CisJc3RydWN0ICB7CisJCXVpbnQ2NF90CWlfb2Zmc2V0ICAgICAgICAgICAgICAgICAgOgkgNTsKKwkJdWludDY0X3QgICAgICAgaV9yc3ZkXzEgICAgICAgICAgICAgICAgICA6ICAgICAgMzsKKwkJdWludDY0X3QgICAgICAgaV93X251bSAgICAgICAgICAgICAgICAgICA6ICAgICAgNDsKKwkJdWludDY0X3QgICAgICAgaV9pb3NwICAgICAgICAgICAgICAgICAgICA6ICAgICAgMTsKKwkJdWludDY0X3QgICAgICAgaV9yc3ZkICAgICAgICAgICAgICAgICAgICA6ICAgICA1MTsKKwl9IGlpX2l0dGUzX2ZsZF9zOworfSBpaV9pdHRlM191X3Q7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRGVzY3JpcHRpb246ICBUaGVyZSBhcmUgc2V2ZW4gaW5zdGFuY2VzIG9mIHRyYW5zbGF0aW9uIHRhYmxlIGVudHJ5ICAgKgorICogcmVnaXN0ZXJzLiBFYWNoIHJlZ2lzdGVyIG1hcHMgYSBTSHViIEJpZyBXaW5kb3cgdG8gYSA0OC1iaXQgICAgICAgICAgKgorICogYWRkcmVzcyBvbiBDcm9zc3RhbGsuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRm9yIE0tbW9kZSAoMTI4IG5vZGVzLCA4IEdCeXRlcy9ub2RlKSwgU3lzQURbMzE6MjldIChCaWcgV2luZG93ICAgICAgKgorICogbnVtYmVyKSBhcmUgdXNlZCB0byBzZWxlY3Qgb25lIG9mIHRoZXNlIDcgcmVnaXN0ZXJzLiBUaGUgV2lkZ2V0ICAgICAgKgorICogbnVtYmVyIGZpZWxkIGlzIHRoZW4gZGVyaXZlZCBmcm9tIHRoZSBXX05VTSBmaWVsZCBmb3Igc3ludGhlc2l6aW5nICAgKgorICogYSBDcm9zc3RhbGsgcGFja2V0LiBUaGUgNSBiaXRzIG9mIE9GRlNFVCBhcmUgY29uY2F0ZW5hdGVkIHdpdGggICAgICAgKgorICogU3lzQURbMjg6MF0gdG8gZm9ybSBDcm9zc3RhbGtbMzM6MF0uIFRoZSB1cHBlciBDcm9zc3RhbGtbNDc6MzRdICAgICAgKgorICogYXJlIHBhZGRlZCB3aXRoIHplcm9zLiBBbHRob3VnaCB0aGUgbWF4aW11bSBDcm9zc3RhbGsgc3BhY2UgICAgICAgICAgKgorICogYWRkcmVzc2FibGUgYnkgdGhlIFNIdWIgaXMgdGh1cyB0aGUgbG93ZXIgMTYgR0J5dGVzIHBlciB3aWRnZXQgICAgICAgKgorICogKE0tbW9kZSksIGhvd2V2ZXIgb25seSA8U1VQID43PC9TVVA+LzxTVUIgPjMybmRzPC9TVUI+IG9mIHRoaXMgICAgICAgKgorICogc3BhY2UgY2FuIGJlIGFjY2Vzc2VkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRm9yIHRoZSBOLW1vZGUgKDI1NiBub2RlcywgNCBHQnl0ZXMvbm9kZSksIFN5c0FEWzMwOjI4XSAoQmlnICAgICAgICAgKgorICogV2luZG93IG51bWJlcikgYXJlIHVzZWQgdG8gc2VsZWN0IG9uZSBvZiB0aGVzZSA3IHJlZ2lzdGVycy4gVGhlICAgICAgKgorICogV2lkZ2V0IG51bWJlciBmaWVsZCBpcyB0aGVuIGRlcml2ZWQgZnJvbSB0aGUgV19OVU0gZmllbGQgZm9yICAgICAgICAgKgorICogc3ludGhlc2l6aW5nIGEgQ3Jvc3N0YWxrIHBhY2tldC4gVGhlIDUgYml0cyBvZiBPRkZTRVQgYXJlICAgICAgICAgICAgKgorICogY29uY2F0ZW5hdGVkIHdpdGggU3lzQURbMjc6MF0gdG8gZm9ybSBDcm9zc3RhbGtbMzM6MF0uIFRoZSBJT1NQICAgICAgKgorICogZmllbGQgaXMgdXNlZCBhcyBDcm9zc3RhbGtbNDddLCBhbmQgcmVtYWluZGVyIG9mIHRoZSBDcm9zc3RhbGsgICAgICAgKgorICogYWRkcmVzcyBiaXRzIChDcm9zc3RhbGtbNDY6MzRdKSBhcmUgYWx3YXlzIHplcm8uIFdoaWxlIHRoZSBtYXhpbXVtICAgKgorICogQ3Jvc3N0YWxrIHNwYWNlIGFkZHJlc3NhYmxlIGJ5IHRoZSBTSHViIGlzIHRodXMgdGhlIGxvd2VyICAgICAgICAgICAgKgorICogOC1HQnl0ZXMgcGVyIHdpZGdldCAoTi1tb2RlKSwgb25seSA8U1VQID43PC9TVVA+LzxTVUIgPjMybmRzPC9TVUI+ICAgKgorICogb2YgdGhpcyBzcGFjZSBjYW4gYmUgYWNjZXNzZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordHlwZWRlZiB1bmlvbiBpaV9pdHRlNF91IHsKKwl1aW50NjRfdAlpaV9pdHRlNF9yZWd2YWw7CisJc3RydWN0ICB7CisJCXVpbnQ2NF90CWlfb2Zmc2V0ICAgICAgICAgICAgICAgICAgOgkgNTsKKwkJdWludDY0X3QJaV9yc3ZkXzEJCSAgOgkgMzsKKwkJdWludDY0X3QgICAgICAgaV93X251bSAgICAgICAgICAgICAgICAgICA6ICAgICAgNDsKKwkJdWludDY0X3QgICAgICAgaV9pb3NwICAgICAgICAgICAgICAgICAgICA6ICAgICAgMTsKKwkJdWludDY0X3QgICAgICAgaV9yc3ZkICAgICAgICAgICAgICAgICAgICA6ICAgICA1MTsKKwl9IGlpX2l0dGU0X2ZsZF9zOworfSBpaV9pdHRlNF91X3Q7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRGVzY3JpcHRpb246ICBUaGVyZSBhcmUgc2V2ZW4gaW5zdGFuY2VzIG9mIHRyYW5zbGF0aW9uIHRhYmxlIGVudHJ5ICAgKgorICogcmVnaXN0ZXJzLiBFYWNoIHJlZ2lzdGVyIG1hcHMgYSBTSHViIEJpZyBXaW5kb3cgdG8gYSA0OC1iaXQgICAgICAgICAgKgorICogYWRkcmVzcyBvbiBDcm9zc3RhbGsuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRm9yIE0tbW9kZSAoMTI4IG5vZGVzLCA4IEdCeXRlcy9ub2RlKSwgU3lzQURbMzE6MjldIChCaWcgV2luZG93ICAgICAgKgorICogbnVtYmVyKSBhcmUgdXNlZCB0byBzZWxlY3Qgb25lIG9mIHRoZXNlIDcgcmVnaXN0ZXJzLiBUaGUgV2lkZ2V0ICAgICAgKgorICogbnVtYmVyIGZpZWxkIGlzIHRoZW4gZGVyaXZlZCBmcm9tIHRoZSBXX05VTSBmaWVsZCBmb3Igc3ludGhlc2l6aW5nICAgKgorICogYSBDcm9zc3RhbGsgcGFja2V0LiBUaGUgNSBiaXRzIG9mIE9GRlNFVCBhcmUgY29uY2F0ZW5hdGVkIHdpdGggICAgICAgKgorICogU3lzQURbMjg6MF0gdG8gZm9ybSBDcm9zc3RhbGtbMzM6MF0uIFRoZSB1cHBlciBDcm9zc3RhbGtbNDc6MzRdICAgICAgKgorICogYXJlIHBhZGRlZCB3aXRoIHplcm9zLiBBbHRob3VnaCB0aGUgbWF4aW11bSBDcm9zc3RhbGsgc3BhY2UgICAgICAgICAgKgorICogYWRkcmVzc2FibGUgYnkgdGhlIFNodWIgaXMgdGh1cyB0aGUgbG93ZXIgMTYgR0J5dGVzIHBlciB3aWRnZXQgICAgICAgKgorICogKE0tbW9kZSksIGhvd2V2ZXIgb25seSA8U1VQID43PC9TVVA+LzxTVUIgPjMybmRzPC9TVUI+IG9mIHRoaXMgICAgICAgKgorICogc3BhY2UgY2FuIGJlIGFjY2Vzc2VkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRm9yIHRoZSBOLW1vZGUgKDI1NiBub2RlcywgNCBHQnl0ZXMvbm9kZSksIFN5c0FEWzMwOjI4XSAoQmlnICAgICAgICAgKgorICogV2luZG93IG51bWJlcikgYXJlIHVzZWQgdG8gc2VsZWN0IG9uZSBvZiB0aGVzZSA3IHJlZ2lzdGVycy4gVGhlICAgICAgKgorICogV2lkZ2V0IG51bWJlciBmaWVsZCBpcyB0aGVuIGRlcml2ZWQgZnJvbSB0aGUgV19OVU0gZmllbGQgZm9yICAgICAgICAgKgorICogc3ludGhlc2l6aW5nIGEgQ3Jvc3N0YWxrIHBhY2tldC4gVGhlIDUgYml0cyBvZiBPRkZTRVQgYXJlICAgICAgICAgICAgKgorICogY29uY2F0ZW5hdGVkIHdpdGggU3lzQURbMjc6MF0gdG8gZm9ybSBDcm9zc3RhbGtbMzM6MF0uIFRoZSBJT1NQICAgICAgKgorICogZmllbGQgaXMgdXNlZCBhcyBDcm9zc3RhbGtbNDddLCBhbmQgcmVtYWluZGVyIG9mIHRoZSBDcm9zc3RhbGsgICAgICAgKgorICogYWRkcmVzcyBiaXRzIChDcm9zc3RhbGtbNDY6MzRdKSBhcmUgYWx3YXlzIHplcm8uIFdoaWxlIHRoZSBtYXhpbXVtICAgKgorICogQ3Jvc3N0YWxrIHNwYWNlIGFkZHJlc3NhYmxlIGJ5IHRoZSBTaHViIGlzIHRodXMgdGhlIGxvd2VyICAgICAgICAgICAgKgorICogOC1HQnl0ZXMgcGVyIHdpZGdldCAoTi1tb2RlKSwgb25seSA8U1VQID43PC9TVVA+LzxTVUIgPjMybmRzPC9TVUI+ICAgKgorICogb2YgdGhpcyBzcGFjZSBjYW4gYmUgYWNjZXNzZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordHlwZWRlZiB1bmlvbiBpaV9pdHRlNV91IHsKKwl1aW50NjRfdAlpaV9pdHRlNV9yZWd2YWw7CisJc3RydWN0ICB7CisJCXVpbnQ2NF90CWlfb2Zmc2V0ICAgICAgICAgICAgICAgICAgOgkgNTsKKwkJdWludDY0X3QgICAgICAgaV9yc3ZkXzEgICAgICAgICAgICAgICAgICA6ICAgICAgMzsKKwkJdWludDY0X3QgICAgICAgaV93X251bSAgICAgICAgICAgICAgICAgICA6ICAgICAgNDsKKwkJdWludDY0X3QgICAgICAgaV9pb3NwICAgICAgICAgICAgICAgICAgICA6ICAgICAgMTsKKwkJdWludDY0X3QgICAgICAgaV9yc3ZkICAgICAgICAgICAgICAgICAgICA6ICAgICA1MTsKKwl9IGlpX2l0dGU1X2ZsZF9zOworfSBpaV9pdHRlNV91X3Q7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRGVzY3JpcHRpb246ICBUaGVyZSBhcmUgc2V2ZW4gaW5zdGFuY2VzIG9mIHRyYW5zbGF0aW9uIHRhYmxlIGVudHJ5ICAgKgorICogcmVnaXN0ZXJzLiBFYWNoIHJlZ2lzdGVyIG1hcHMgYSBTaHViIEJpZyBXaW5kb3cgdG8gYSA0OC1iaXQgICAgICAgICAgKgorICogYWRkcmVzcyBvbiBDcm9zc3RhbGsuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRm9yIE0tbW9kZSAoMTI4IG5vZGVzLCA4IEdCeXRlcy9ub2RlKSwgU3lzQURbMzE6MjldIChCaWcgV2luZG93ICAgICAgKgorICogbnVtYmVyKSBhcmUgdXNlZCB0byBzZWxlY3Qgb25lIG9mIHRoZXNlIDcgcmVnaXN0ZXJzLiBUaGUgV2lkZ2V0ICAgICAgKgorICogbnVtYmVyIGZpZWxkIGlzIHRoZW4gZGVyaXZlZCBmcm9tIHRoZSBXX05VTSBmaWVsZCBmb3Igc3ludGhlc2l6aW5nICAgKgorICogYSBDcm9zc3RhbGsgcGFja2V0LiBUaGUgNSBiaXRzIG9mIE9GRlNFVCBhcmUgY29uY2F0ZW5hdGVkIHdpdGggICAgICAgKgorICogU3lzQURbMjg6MF0gdG8gZm9ybSBDcm9zc3RhbGtbMzM6MF0uIFRoZSB1cHBlciBDcm9zc3RhbGtbNDc6MzRdICAgICAgKgorICogYXJlIHBhZGRlZCB3aXRoIHplcm9zLiBBbHRob3VnaCB0aGUgbWF4aW11bSBDcm9zc3RhbGsgc3BhY2UgICAgICAgICAgKgorICogYWRkcmVzc2FibGUgYnkgdGhlIFNodWIgaXMgdGh1cyB0aGUgbG93ZXIgMTYgR0J5dGVzIHBlciB3aWRnZXQgICAgICAgKgorICogKE0tbW9kZSksIGhvd2V2ZXIgb25seSA8U1VQID43PC9TVVA+LzxTVUIgPjMybmRzPC9TVUI+IG9mIHRoaXMgICAgICAgKgorICogc3BhY2UgY2FuIGJlIGFjY2Vzc2VkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRm9yIHRoZSBOLW1vZGUgKDI1NiBub2RlcywgNCBHQnl0ZXMvbm9kZSksIFN5c0FEWzMwOjI4XSAoQmlnICAgICAgICAgKgorICogV2luZG93IG51bWJlcikgYXJlIHVzZWQgdG8gc2VsZWN0IG9uZSBvZiB0aGVzZSA3IHJlZ2lzdGVycy4gVGhlICAgICAgKgorICogV2lkZ2V0IG51bWJlciBmaWVsZCBpcyB0aGVuIGRlcml2ZWQgZnJvbSB0aGUgV19OVU0gZmllbGQgZm9yICAgICAgICAgKgorICogc3ludGhlc2l6aW5nIGEgQ3Jvc3N0YWxrIHBhY2tldC4gVGhlIDUgYml0cyBvZiBPRkZTRVQgYXJlICAgICAgICAgICAgKgorICogY29uY2F0ZW5hdGVkIHdpdGggU3lzQURbMjc6MF0gdG8gZm9ybSBDcm9zc3RhbGtbMzM6MF0uIFRoZSBJT1NQICAgICAgKgorICogZmllbGQgaXMgdXNlZCBhcyBDcm9zc3RhbGtbNDddLCBhbmQgcmVtYWluZGVyIG9mIHRoZSBDcm9zc3RhbGsgICAgICAgKgorICogYWRkcmVzcyBiaXRzIChDcm9zc3RhbGtbNDY6MzRdKSBhcmUgYWx3YXlzIHplcm8uIFdoaWxlIHRoZSBtYXhpbXVtICAgKgorICogQ3Jvc3N0YWxrIHNwYWNlIGFkZHJlc3NhYmxlIGJ5IHRoZSBTaHViIGlzIHRodXMgdGhlIGxvd2VyICAgICAgICAgICAgKgorICogOC1HQnl0ZXMgcGVyIHdpZGdldCAoTi1tb2RlKSwgb25seSA8U1VQID43PC9TVVA+LzxTVUIgPjMybmRzPC9TVUI+ICAgKgorICogb2YgdGhpcyBzcGFjZSBjYW4gYmUgYWNjZXNzZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordHlwZWRlZiB1bmlvbiBpaV9pdHRlNl91IHsKKwl1aW50NjRfdAlpaV9pdHRlNl9yZWd2YWw7CisJc3RydWN0ICB7CisJCXVpbnQ2NF90CWlfb2Zmc2V0ICAgICAgICAgICAgICAgICAgOgkgNTsKKwkJdWludDY0X3QgICAgICAgaV9yc3ZkXzEgICAgICAgICAgICAgICAgICA6ICAgICAgMzsKKwkJdWludDY0X3QgICAgICAgaV93X251bSAgICAgICAgICAgICAgICAgICA6ICAgICAgNDsKKwkJdWludDY0X3QgICAgICAgaV9pb3NwICAgICAgICAgICAgICAgICAgICA6ICAgICAgMTsKKwkJdWludDY0X3QgICAgICAgaV9yc3ZkICAgICAgICAgICAgICAgICAgICA6ICAgICA1MTsKKwl9IGlpX2l0dGU2X2ZsZF9zOworfSBpaV9pdHRlNl91X3Q7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRGVzY3JpcHRpb246ICBUaGVyZSBhcmUgc2V2ZW4gaW5zdGFuY2VzIG9mIHRyYW5zbGF0aW9uIHRhYmxlIGVudHJ5ICAgKgorICogcmVnaXN0ZXJzLiBFYWNoIHJlZ2lzdGVyIG1hcHMgYSBTaHViIEJpZyBXaW5kb3cgdG8gYSA0OC1iaXQgICAgICAgICAgKgorICogYWRkcmVzcyBvbiBDcm9zc3RhbGsuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRm9yIE0tbW9kZSAoMTI4IG5vZGVzLCA4IEdCeXRlcy9ub2RlKSwgU3lzQURbMzE6MjldIChCaWcgV2luZG93ICAgICAgKgorICogbnVtYmVyKSBhcmUgdXNlZCB0byBzZWxlY3Qgb25lIG9mIHRoZXNlIDcgcmVnaXN0ZXJzLiBUaGUgV2lkZ2V0ICAgICAgKgorICogbnVtYmVyIGZpZWxkIGlzIHRoZW4gZGVyaXZlZCBmcm9tIHRoZSBXX05VTSBmaWVsZCBmb3Igc3ludGhlc2l6aW5nICAgKgorICogYSBDcm9zc3RhbGsgcGFja2V0LiBUaGUgNSBiaXRzIG9mIE9GRlNFVCBhcmUgY29uY2F0ZW5hdGVkIHdpdGggICAgICAgKgorICogU3lzQURbMjg6MF0gdG8gZm9ybSBDcm9zc3RhbGtbMzM6MF0uIFRoZSB1cHBlciBDcm9zc3RhbGtbNDc6MzRdICAgICAgKgorICogYXJlIHBhZGRlZCB3aXRoIHplcm9zLiBBbHRob3VnaCB0aGUgbWF4aW11bSBDcm9zc3RhbGsgc3BhY2UgICAgICAgICAgKgorICogYWRkcmVzc2FibGUgYnkgdGhlIFNodWIgaXMgdGh1cyB0aGUgbG93ZXIgMTYgR0J5dGVzIHBlciB3aWRnZXQgICAgICAgKgorICogKE0tbW9kZSksIGhvd2V2ZXIgb25seSA8U1VQID43PC9TVVA+LzxTVUIgPjMybmRzPC9TVUI+IG9mIHRoaXMgICAgICAgKgorICogc3BhY2UgY2FuIGJlIGFjY2Vzc2VkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRm9yIHRoZSBOLW1vZGUgKDI1NiBub2RlcywgNCBHQnl0ZXMvbm9kZSksIFN5c0FEWzMwOjI4XSAoQmlnICAgICAgICAgKgorICogV2luZG93IG51bWJlcikgYXJlIHVzZWQgdG8gc2VsZWN0IG9uZSBvZiB0aGVzZSA3IHJlZ2lzdGVycy4gVGhlICAgICAgKgorICogV2lkZ2V0IG51bWJlciBmaWVsZCBpcyB0aGVuIGRlcml2ZWQgZnJvbSB0aGUgV19OVU0gZmllbGQgZm9yICAgICAgICAgKgorICogc3ludGhlc2l6aW5nIGEgQ3Jvc3N0YWxrIHBhY2tldC4gVGhlIDUgYml0cyBvZiBPRkZTRVQgYXJlICAgICAgICAgICAgKgorICogY29uY2F0ZW5hdGVkIHdpdGggU3lzQURbMjc6MF0gdG8gZm9ybSBDcm9zc3RhbGtbMzM6MF0uIFRoZSBJT1NQICAgICAgKgorICogZmllbGQgaXMgdXNlZCBhcyBDcm9zc3RhbGtbNDddLCBhbmQgcmVtYWluZGVyIG9mIHRoZSBDcm9zc3RhbGsgICAgICAgKgorICogYWRkcmVzcyBiaXRzIChDcm9zc3RhbGtbNDY6MzRdKSBhcmUgYWx3YXlzIHplcm8uIFdoaWxlIHRoZSBtYXhpbXVtICAgKgorICogQ3Jvc3N0YWxrIHNwYWNlIGFkZHJlc3NhYmxlIGJ5IHRoZSBTSHViIGlzIHRodXMgdGhlIGxvd2VyICAgICAgICAgICAgKgorICogOC1HQnl0ZXMgcGVyIHdpZGdldCAoTi1tb2RlKSwgb25seSA8U1VQID43PC9TVVA+LzxTVUIgPjMybmRzPC9TVUI+ICAgKgorICogb2YgdGhpcyBzcGFjZSBjYW4gYmUgYWNjZXNzZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordHlwZWRlZiB1bmlvbiBpaV9pdHRlN191IHsKKwl1aW50NjRfdAlpaV9pdHRlN19yZWd2YWw7CisJc3RydWN0ICB7CisJCXVpbnQ2NF90CWlfb2Zmc2V0ICAgICAgICAgICAgICAgICAgOgkgNTsKKwkJdWludDY0X3QJaV9yc3ZkXzEJCSAgOgkgMzsKKwkJdWludDY0X3QgICAgICAgaV93X251bSAgICAgICAgICAgICAgICAgICA6ICAgICAgNDsKKwkJdWludDY0X3QgICAgICAgaV9pb3NwICAgICAgICAgICAgICAgICAgICA6ICAgICAgMTsKKwkJdWludDY0X3QgICAgICAgaV9yc3ZkICAgICAgICAgICAgICAgICAgICA6ICAgICA1MTsKKwl9IGlpX2l0dGU3X2ZsZF9zOworfSBpaV9pdHRlN191X3Q7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRGVzY3JpcHRpb246ICBUaGVyZSBhcmUgOSBpbnN0YW5jZXMgb2YgdGhpcyByZWdpc3Rlciwgb25lIHBlciAgICAgICAgKgorICogYWN0dWFsIHdpZGdldCBpbiB0aGlzIGltcGxlbWVudGF0aW9uIG9mIFNIdWIgYW5kIENyb3NzYm93LiAgICAgICAgICAgKgorICogTm90ZTogQ3Jvc3Nib3cgb25seSBoYXMgcG9ydHMgZm9yIFdpZGdldHMgOCB0aHJvdWdoIEYsIHdpZGdldCAwICAgICAgKgorICogcmVmZXJzIHRvIENyb3NzYm93J3MgaW50ZXJuYWwgc3BhY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyByZWdpc3RlciBjb250YWlucyB0aGUgc3RhdGUgZWxlbWVudHMgcGVyIHdpZGdldCB0aGF0IGFyZSAgICAgICAgKgorICogbmVjZXNzYXJ5IHRvIG1hbmFnZSB0aGUgUElPIGZsb3cgY29udHJvbCBvbiBDcm9zc3RhbGsgYW5kIG9uIHRoZSAgICAgKgorICogUm91dGVyIE5ldHdvcmsuIFNlZSB0aGUgUElPIEZsb3cgQ29udHJvbCBjaGFwdGVyIGZvciBhIGNvbXBsZXRlICAgICAgKgorICogZGVzY3JpcHRpb24gb2YgdGhpcyByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIFNQVVJfV1IgYml0IHJlcXVpcmVzIHNvbWUgZXhwbGFuYXRpb24uIFdoZW4gdGhpcyByZWdpc3RlciBpcyAgICAgKgorICogd3JpdHRlbiwgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgQyBmaWVsZCBpcyBjYXB0dXJlZCBpbiBhbiBpbnRlcm5hbCAgICAgKgorICogcmVnaXN0ZXIgc28gdGhlIGhhcmR3YXJlIGNhbiByZW1lbWJlciB3aGF0IHRoZSBwcm9ncmFtbWVyIHdyb3RlICAgICAgKgorICogaW50byB0aGUgY3JlZGl0IGNvdW50ZXIuIFRoZSBTUFVSX1dSIGJpdCBzZXRzIHdoZW5ldmVyIHRoZSBDIGZpZWxkICAgKgorICogaW5jcmVtZW50cyBhYm92ZSB0aGlzIHN0b3JlZCB2YWx1ZSwgd2hpY2ggaW5kaWNhdGVzIHRoYXQgdGhlcmUgICAgICAgKgorICogaGF2ZSBiZWVuIG1vcmUgcmVzcG9uc2VzIHJlY2VpdmVkIHRoYW4gcmVxdWVzdHMgc2VudC4gVGhlIFNQVVJfV1IgICAgKgorICogYml0IGNhbm5vdCBiZSBjbGVhcmVkIHVudGlsIGEgdmFsdWUgaXMgd3JpdHRlbiB0byB0aGUgSVBSQnggICAgICAgICAgKgorICogcmVnaXN0ZXI7IHRoZSB3cml0ZSB3aWxsIGNvcnJlY3QgdGhlIEMgZmllbGQgYW5kIGNhcHR1cmUgaXRzIG5ldyAgICAgKgorICogdmFsdWUgaW4gdGhlIGludGVybmFsIHJlZ2lzdGVyLiBFdmVuIGlmIElFQ0xSW0VfUFJCX3hdIGlzIHNldCwgdGhlICAgKgorICogU1BVUl9XUiBiaXQgd2lsbCBwZXJzaXN0IGlmIElQUkJ4IGhhc24ndCB5ZXQgYmVlbiB3cml0dGVuLiAgICAgICAgICAgKgorICogLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordHlwZWRlZiB1bmlvbiBpaV9pcHJiMF91IHsKKwl1aW50NjRfdAlpaV9pcHJiMF9yZWd2YWw7CisJc3RydWN0ICB7CisJCXVpbnQ2NF90CWlfYyAgICAgICAgICAgICAgICAgICAgICAgOgkgODsKKwkJdWludDY0X3QJaV9uYQkJCSAgOgkxNDsKKwkJdWludDY0X3QgICAgICAgaV9yc3ZkXzIgICAgICAgICAgICAgICAgICA6ICAgICAgMjsKKwkJdWludDY0X3QJaV9uYgkJCSAgOgkxNDsKKwkJdWludDY0X3QJaV9yc3ZkXzEJCSAgOgkgMjsKKwkJdWludDY0X3QJaV9tCQkJICA6CSAyOworCQl1aW50NjRfdAlpX2YJCQkgIDoJIDE7CisJCXVpbnQ2NF90CWlfb2ZfY250CQkgIDoJIDU7CisJCXVpbnQ2NF90CWlfZXJyb3IJCQkgIDoJIDE7CisJCXVpbnQ2NF90CWlfcmRfdG8JCQkgIDoJIDE7CisJCXVpbnQ2NF90CWlfc3B1cl93cgkJICA6CSAxOworCQl1aW50NjRfdAlpX3NwdXJfcmQJCSAgOgkgMTsKKwkJdWludDY0X3QJaV9yc3ZkCQkJICA6CTExOworCQl1aW50NjRfdAlpX211bHRfZXJyCQkgIDoJIDE7CisJfSBpaV9pcHJiMF9mbGRfczsKK30gaWlfaXByYjBfdV90OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIERlc2NyaXB0aW9uOiAgVGhlcmUgYXJlIDkgaW5zdGFuY2VzIG9mIHRoaXMgcmVnaXN0ZXIsIG9uZSBwZXIgICAgICAgICoKKyAqIGFjdHVhbCB3aWRnZXQgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbiBvZiBTSHViIGFuZCBDcm9zc2Jvdy4gICAgICAgICAgICoKKyAqIE5vdGU6IENyb3NzYm93IG9ubHkgaGFzIHBvcnRzIGZvciBXaWRnZXRzIDggdGhyb3VnaCBGLCB3aWRnZXQgMCAgICAgICoKKyAqIHJlZmVycyB0byBDcm9zc2JvdydzIGludGVybmFsIHNwYWNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcmVnaXN0ZXIgY29udGFpbnMgdGhlIHN0YXRlIGVsZW1lbnRzIHBlciB3aWRnZXQgdGhhdCBhcmUgICAgICAgICoKKyAqIG5lY2Vzc2FyeSB0byBtYW5hZ2UgdGhlIFBJTyBmbG93IGNvbnRyb2wgb24gQ3Jvc3N0YWxrIGFuZCBvbiB0aGUgICAgICoKKyAqIFJvdXRlciBOZXR3b3JrLiBTZWUgdGhlIFBJTyBGbG93IENvbnRyb2wgY2hhcHRlciBmb3IgYSBjb21wbGV0ZSAgICAgICoKKyAqIGRlc2NyaXB0aW9uIG9mIHRoaXMgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBTUFVSX1dSIGJpdCByZXF1aXJlcyBzb21lIGV4cGxhbmF0aW9uLiBXaGVuIHRoaXMgcmVnaXN0ZXIgaXMgICAgICoKKyAqIHdyaXR0ZW4sIHRoZSBuZXcgdmFsdWUgb2YgdGhlIEMgZmllbGQgaXMgY2FwdHVyZWQgaW4gYW4gaW50ZXJuYWwgICAgICoKKyAqIHJlZ2lzdGVyIHNvIHRoZSBoYXJkd2FyZSBjYW4gcmVtZW1iZXIgd2hhdCB0aGUgcHJvZ3JhbW1lciB3cm90ZSAgICAgICoKKyAqIGludG8gdGhlIGNyZWRpdCBjb3VudGVyLiBUaGUgU1BVUl9XUiBiaXQgc2V0cyB3aGVuZXZlciB0aGUgQyBmaWVsZCAgICoKKyAqIGluY3JlbWVudHMgYWJvdmUgdGhpcyBzdG9yZWQgdmFsdWUsIHdoaWNoIGluZGljYXRlcyB0aGF0IHRoZXJlICAgICAgICoKKyAqIGhhdmUgYmVlbiBtb3JlIHJlc3BvbnNlcyByZWNlaXZlZCB0aGFuIHJlcXVlc3RzIHNlbnQuIFRoZSBTUFVSX1dSICAgICoKKyAqIGJpdCBjYW5ub3QgYmUgY2xlYXJlZCB1bnRpbCBhIHZhbHVlIGlzIHdyaXR0ZW4gdG8gdGhlIElQUkJ4ICAgICAgICAgICoKKyAqIHJlZ2lzdGVyOyB0aGUgd3JpdGUgd2lsbCBjb3JyZWN0IHRoZSBDIGZpZWxkIGFuZCBjYXB0dXJlIGl0cyBuZXcgICAgICoKKyAqIHZhbHVlIGluIHRoZSBpbnRlcm5hbCByZWdpc3Rlci4gRXZlbiBpZiBJRUNMUltFX1BSQl94XSBpcyBzZXQsIHRoZSAgICoKKyAqIFNQVVJfV1IgYml0IHdpbGwgcGVyc2lzdCBpZiBJUFJCeCBoYXNuJ3QgeWV0IGJlZW4gd3JpdHRlbi4gICAgICAgICAgICoKKyAqIC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgdW5pb24gaWlfaXByYjhfdSB7CisJdWludDY0X3QJaWlfaXByYjhfcmVndmFsOworCXN0cnVjdCAgeworCQl1aW50NjRfdAlpX2MgICAgICAgICAgICAgICAgICAgICAgIDoJIDg7CisJCXVpbnQ2NF90CWlfbmEJCQkgIDoJMTQ7CisJCXVpbnQ2NF90ICAgICAgIGlfcnN2ZF8yICAgICAgICAgICAgICAgICAgOiAgICAgIDI7CisJCXVpbnQ2NF90CWlfbmIJCQkgIDoJMTQ7CisJCXVpbnQ2NF90ICAgICAgIGlfcnN2ZF8xICAgICAgICAgICAgICAgICAgOiAgICAgIDI7CisJCXVpbnQ2NF90ICAgICAgIGlfbSAgICAgICAgICAgICAgICAgICAgICAgOiAgICAgIDI7CisJCXVpbnQ2NF90ICAgICAgIGlfZiAgICAgICAgICAgICAgICAgICAgICAgOiAgICAgIDE7CisJCXVpbnQ2NF90ICAgICAgIGlfb2ZfY250ICAgICAgICAgICAgICAgICAgOiAgICAgIDU7CisJCXVpbnQ2NF90ICAgICAgIGlfZXJyb3IgICAgICAgICAgICAgICAgICAgOiAgICAgIDE7CisJCXVpbnQ2NF90ICAgICAgIGlfcmRfdG8gICAgICAgICAgICAgICAgICAgOiAgICAgIDE7CisJCXVpbnQ2NF90ICAgICAgIGlfc3B1cl93ciAgICAgICAgICAgICAgICAgOiAgICAgIDE7CisJCXVpbnQ2NF90CWlfc3B1cl9yZAkJICA6CSAxOworCQl1aW50NjRfdCAgICAgICBpX3JzdmQgICAgICAgICAgICAgICAgICAgIDogICAgIDExOworCQl1aW50NjRfdAlpX211bHRfZXJyCQkgIDoJIDE7CisJfSBpaV9pcHJiOF9mbGRfczsKK30gaWlfaXByYjhfdV90OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIERlc2NyaXB0aW9uOiAgVGhlcmUgYXJlIDkgaW5zdGFuY2VzIG9mIHRoaXMgcmVnaXN0ZXIsIG9uZSBwZXIgICAgICAgICoKKyAqIGFjdHVhbCB3aWRnZXQgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbiBvZiBTSHViIGFuZCBDcm9zc2Jvdy4gICAgICAgICAgICoKKyAqIE5vdGU6IENyb3NzYm93IG9ubHkgaGFzIHBvcnRzIGZvciBXaWRnZXRzIDggdGhyb3VnaCBGLCB3aWRnZXQgMCAgICAgICoKKyAqIHJlZmVycyB0byBDcm9zc2JvdydzIGludGVybmFsIHNwYWNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcmVnaXN0ZXIgY29udGFpbnMgdGhlIHN0YXRlIGVsZW1lbnRzIHBlciB3aWRnZXQgdGhhdCBhcmUgICAgICAgICoKKyAqIG5lY2Vzc2FyeSB0byBtYW5hZ2UgdGhlIFBJTyBmbG93IGNvbnRyb2wgb24gQ3Jvc3N0YWxrIGFuZCBvbiB0aGUgICAgICoKKyAqIFJvdXRlciBOZXR3b3JrLiBTZWUgdGhlIFBJTyBGbG93IENvbnRyb2wgY2hhcHRlciBmb3IgYSBjb21wbGV0ZSAgICAgICoKKyAqIGRlc2NyaXB0aW9uIG9mIHRoaXMgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBTUFVSX1dSIGJpdCByZXF1aXJlcyBzb21lIGV4cGxhbmF0aW9uLiBXaGVuIHRoaXMgcmVnaXN0ZXIgaXMgICAgICoKKyAqIHdyaXR0ZW4sIHRoZSBuZXcgdmFsdWUgb2YgdGhlIEMgZmllbGQgaXMgY2FwdHVyZWQgaW4gYW4gaW50ZXJuYWwgICAgICoKKyAqIHJlZ2lzdGVyIHNvIHRoZSBoYXJkd2FyZSBjYW4gcmVtZW1iZXIgd2hhdCB0aGUgcHJvZ3JhbW1lciB3cm90ZSAgICAgICoKKyAqIGludG8gdGhlIGNyZWRpdCBjb3VudGVyLiBUaGUgU1BVUl9XUiBiaXQgc2V0cyB3aGVuZXZlciB0aGUgQyBmaWVsZCAgICoKKyAqIGluY3JlbWVudHMgYWJvdmUgdGhpcyBzdG9yZWQgdmFsdWUsIHdoaWNoIGluZGljYXRlcyB0aGF0IHRoZXJlICAgICAgICoKKyAqIGhhdmUgYmVlbiBtb3JlIHJlc3BvbnNlcyByZWNlaXZlZCB0aGFuIHJlcXVlc3RzIHNlbnQuIFRoZSBTUFVSX1dSICAgICoKKyAqIGJpdCBjYW5ub3QgYmUgY2xlYXJlZCB1bnRpbCBhIHZhbHVlIGlzIHdyaXR0ZW4gdG8gdGhlIElQUkJ4ICAgICAgICAgICoKKyAqIHJlZ2lzdGVyOyB0aGUgd3JpdGUgd2lsbCBjb3JyZWN0IHRoZSBDIGZpZWxkIGFuZCBjYXB0dXJlIGl0cyBuZXcgICAgICoKKyAqIHZhbHVlIGluIHRoZSBpbnRlcm5hbCByZWdpc3Rlci4gRXZlbiBpZiBJRUNMUltFX1BSQl94XSBpcyBzZXQsIHRoZSAgICoKKyAqIFNQVVJfV1IgYml0IHdpbGwgcGVyc2lzdCBpZiBJUFJCeCBoYXNuJ3QgeWV0IGJlZW4gd3JpdHRlbi4gICAgICAgICAgICoKKyAqIC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgdW5pb24gaWlfaXByYjlfdSB7CisJdWludDY0X3QJaWlfaXByYjlfcmVndmFsOworCXN0cnVjdAl7CisJCXVpbnQ2NF90CWlfYwkJCSAgOgkgODsKKwkJdWludDY0X3QJaV9uYQkJCSAgOgkxNDsKKwkJdWludDY0X3QJaV9yc3ZkXzIJCSAgOgkgMjsKKwkJdWludDY0X3QJaV9uYgkJCSAgOgkxNDsKKwkJdWludDY0X3QJaV9yc3ZkXzEJCSAgOgkgMjsKKwkJdWludDY0X3QJaV9tCQkJICA6CSAyOworCQl1aW50NjRfdAlpX2YJCQkgIDoJIDE7CisJCXVpbnQ2NF90CWlfb2ZfY250CQkgIDoJIDU7CisJCXVpbnQ2NF90CWlfZXJyb3IJCQkgIDoJIDE7CisJCXVpbnQ2NF90CWlfcmRfdG8JCQkgIDoJIDE7CisJCXVpbnQ2NF90CWlfc3B1cl93cgkJICA6CSAxOworCQl1aW50NjRfdAlpX3NwdXJfcmQJCSAgOgkgMTsKKwkJdWludDY0X3QJaV9yc3ZkCQkJICA6CTExOworCQl1aW50NjRfdAlpX211bHRfZXJyCQkgIDoJIDE7CisJfSBpaV9pcHJiOV9mbGRfczsKK30gaWlfaXByYjlfdV90OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIERlc2NyaXB0aW9uOiAgVGhlcmUgYXJlIDkgaW5zdGFuY2VzIG9mIHRoaXMgcmVnaXN0ZXIsIG9uZSBwZXIgICAgICAgICoKKyAqIGFjdHVhbCB3aWRnZXQgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbiBvZiBTSHViIGFuZCBDcm9zc2Jvdy4gICAgICAgICoKKyAqIE5vdGU6IENyb3NzYm93IG9ubHkgaGFzIHBvcnRzIGZvciBXaWRnZXRzIDggdGhyb3VnaCBGLCB3aWRnZXQgMCAgICAgICoKKyAqIHJlZmVycyB0byBDcm9zc2JvdydzIGludGVybmFsIHNwYWNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcmVnaXN0ZXIgY29udGFpbnMgdGhlIHN0YXRlIGVsZW1lbnRzIHBlciB3aWRnZXQgdGhhdCBhcmUgICAgICAgICoKKyAqIG5lY2Vzc2FyeSB0byBtYW5hZ2UgdGhlIFBJTyBmbG93IGNvbnRyb2wgb24gQ3Jvc3N0YWxrIGFuZCBvbiB0aGUgICAgICoKKyAqIFJvdXRlciBOZXR3b3JrLiBTZWUgdGhlIFBJTyBGbG93IENvbnRyb2wgY2hhcHRlciBmb3IgYSBjb21wbGV0ZSAgICAgICoKKyAqIGRlc2NyaXB0aW9uIG9mIHRoaXMgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBTUFVSX1dSIGJpdCByZXF1aXJlcyBzb21lIGV4cGxhbmF0aW9uLiBXaGVuIHRoaXMgcmVnaXN0ZXIgaXMgICAgICoKKyAqIHdyaXR0ZW4sIHRoZSBuZXcgdmFsdWUgb2YgdGhlIEMgZmllbGQgaXMgY2FwdHVyZWQgaW4gYW4gaW50ZXJuYWwgICAgICoKKyAqIHJlZ2lzdGVyIHNvIHRoZSBoYXJkd2FyZSBjYW4gcmVtZW1iZXIgd2hhdCB0aGUgcHJvZ3JhbW1lciB3cm90ZSAgICAgICoKKyAqIGludG8gdGhlIGNyZWRpdCBjb3VudGVyLiBUaGUgU1BVUl9XUiBiaXQgc2V0cyB3aGVuZXZlciB0aGUgQyBmaWVsZCAgICoKKyAqIGluY3JlbWVudHMgYWJvdmUgdGhpcyBzdG9yZWQgdmFsdWUsIHdoaWNoIGluZGljYXRlcyB0aGF0IHRoZXJlICAgICAgICoKKyAqIGhhdmUgYmVlbiBtb3JlIHJlc3BvbnNlcyByZWNlaXZlZCB0aGFuIHJlcXVlc3RzIHNlbnQuIFRoZSBTUFVSX1dSICAgICoKKyAqIGJpdCBjYW5ub3QgYmUgY2xlYXJlZCB1bnRpbCBhIHZhbHVlIGlzIHdyaXR0ZW4gdG8gdGhlIElQUkJ4ICAgICAgICAgICoKKyAqIHJlZ2lzdGVyOyB0aGUgd3JpdGUgd2lsbCBjb3JyZWN0IHRoZSBDIGZpZWxkIGFuZCBjYXB0dXJlIGl0cyBuZXcgICAgICoKKyAqIHZhbHVlIGluIHRoZSBpbnRlcm5hbCByZWdpc3Rlci4gRXZlbiBpZiBJRUNMUltFX1BSQl94XSBpcyBzZXQsIHRoZSAgICoKKyAqIFNQVVJfV1IgYml0IHdpbGwgcGVyc2lzdCBpZiBJUFJCeCBoYXNuJ3QgeWV0IGJlZW4gd3JpdHRlbi4gICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgdW5pb24gaWlfaXByYmFfdSB7CisJdWludDY0X3QJaWlfaXByYmFfcmVndmFsOworCXN0cnVjdCAgeworCQl1aW50NjRfdAlpX2MgICAgICAgICAgICAgICAgICAgICAgIDoJIDg7CisJCXVpbnQ2NF90CWlfbmEJCQkgIDoJMTQ7CisJCXVpbnQ2NF90ICAgICAgIGlfcnN2ZF8yICAgICAgICAgICAgICAgICAgOiAgICAgIDI7CisJCXVpbnQ2NF90CWlfbmIJCQkgIDoJMTQ7CisJCXVpbnQ2NF90CWlfcnN2ZF8xCQkgIDoJIDI7CisJCXVpbnQ2NF90CWlfbQkJCSAgOgkgMjsKKwkJdWludDY0X3QJaV9mCQkJICA6CSAxOworCQl1aW50NjRfdAlpX29mX2NudAkJICA6CSA1OworCQl1aW50NjRfdAlpX2Vycm9yCQkJICA6CSAxOworCQl1aW50NjRfdAlpX3JkX3RvCQkJICA6CSAxOworCQl1aW50NjRfdAlpX3NwdXJfd3IJCSAgOgkgMTsKKwkJdWludDY0X3QJaV9zcHVyX3JkCQkgIDoJIDE7CisJCXVpbnQ2NF90CWlfcnN2ZAkJCSAgOgkxMTsKKwkJdWludDY0X3QJaV9tdWx0X2VycgkJICA6CSAxOworCX0gaWlfaXByYmFfZmxkX3M7Cit9IGlpX2lwcmJhX3VfdDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBEZXNjcmlwdGlvbjogIFRoZXJlIGFyZSA5IGluc3RhbmNlcyBvZiB0aGlzIHJlZ2lzdGVyLCBvbmUgcGVyICAgICAgICAqCisgKiBhY3R1YWwgd2lkZ2V0IGluIHRoaXMgaW1wbGVtZW50YXRpb24gb2YgU0h1YiBhbmQgQ3Jvc3Nib3cuICAgICAgICAgICAqCisgKiBOb3RlOiBDcm9zc2JvdyBvbmx5IGhhcyBwb3J0cyBmb3IgV2lkZ2V0cyA4IHRocm91Z2ggRiwgd2lkZ2V0IDAgICAgICAqCisgKiByZWZlcnMgdG8gQ3Jvc3Nib3cncyBpbnRlcm5hbCBzcGFjZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHJlZ2lzdGVyIGNvbnRhaW5zIHRoZSBzdGF0ZSBlbGVtZW50cyBwZXIgd2lkZ2V0IHRoYXQgYXJlICAgICAgICAqCisgKiBuZWNlc3NhcnkgdG8gbWFuYWdlIHRoZSBQSU8gZmxvdyBjb250cm9sIG9uIENyb3NzdGFsayBhbmQgb24gdGhlICAgICAqCisgKiBSb3V0ZXIgTmV0d29yay4gU2VlIHRoZSBQSU8gRmxvdyBDb250cm9sIGNoYXB0ZXIgZm9yIGEgY29tcGxldGUgICAgICAqCisgKiBkZXNjcmlwdGlvbiBvZiB0aGlzIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgU1BVUl9XUiBiaXQgcmVxdWlyZXMgc29tZSBleHBsYW5hdGlvbi4gV2hlbiB0aGlzIHJlZ2lzdGVyIGlzICAgICAqCisgKiB3cml0dGVuLCB0aGUgbmV3IHZhbHVlIG9mIHRoZSBDIGZpZWxkIGlzIGNhcHR1cmVkIGluIGFuIGludGVybmFsICAgICAqCisgKiByZWdpc3RlciBzbyB0aGUgaGFyZHdhcmUgY2FuIHJlbWVtYmVyIHdoYXQgdGhlIHByb2dyYW1tZXIgd3JvdGUgICAgICAqCisgKiBpbnRvIHRoZSBjcmVkaXQgY291bnRlci4gVGhlIFNQVVJfV1IgYml0IHNldHMgd2hlbmV2ZXIgdGhlIEMgZmllbGQgICAqCisgKiBpbmNyZW1lbnRzIGFib3ZlIHRoaXMgc3RvcmVkIHZhbHVlLCB3aGljaCBpbmRpY2F0ZXMgdGhhdCB0aGVyZSAgICAgICAqCisgKiBoYXZlIGJlZW4gbW9yZSByZXNwb25zZXMgcmVjZWl2ZWQgdGhhbiByZXF1ZXN0cyBzZW50LiBUaGUgU1BVUl9XUiAgICAqCisgKiBiaXQgY2Fubm90IGJlIGNsZWFyZWQgdW50aWwgYSB2YWx1ZSBpcyB3cml0dGVuIHRvIHRoZSBJUFJCeCAgICAgICAgICAqCisgKiByZWdpc3RlcjsgdGhlIHdyaXRlIHdpbGwgY29ycmVjdCB0aGUgQyBmaWVsZCBhbmQgY2FwdHVyZSBpdHMgbmV3ICAgICAqCisgKiB2YWx1ZSBpbiB0aGUgaW50ZXJuYWwgcmVnaXN0ZXIuIEV2ZW4gaWYgSUVDTFJbRV9QUkJfeF0gaXMgc2V0LCB0aGUgICAqCisgKiBTUFVSX1dSIGJpdCB3aWxsIHBlcnNpc3QgaWYgSVBSQnggaGFzbid0IHlldCBiZWVuIHdyaXR0ZW4uICAgICAgICAgICAqCisgKiAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIHVuaW9uIGlpX2lwcmJiX3UgeworCXVpbnQ2NF90CWlpX2lwcmJiX3JlZ3ZhbDsKKwlzdHJ1Y3QJeworCQl1aW50NjRfdAlpX2MJCQkgIDoJIDg7CisJCXVpbnQ2NF90CWlfbmEJCQkgIDoJMTQ7CisJCXVpbnQ2NF90CWlfcnN2ZF8yCQkgIDoJIDI7CisJCXVpbnQ2NF90CWlfbmIJCQkgIDoJMTQ7CisJCXVpbnQ2NF90CWlfcnN2ZF8xCQkgIDoJIDI7CisJCXVpbnQ2NF90CWlfbQkJCSAgOgkgMjsKKwkJdWludDY0X3QJaV9mCQkJICA6CSAxOworCQl1aW50NjRfdAlpX29mX2NudAkJICA6CSA1OworCQl1aW50NjRfdAlpX2Vycm9yCQkJICA6CSAxOworCQl1aW50NjRfdAlpX3JkX3RvCQkJICA6CSAxOworCQl1aW50NjRfdAlpX3NwdXJfd3IJCSAgOgkgMTsKKwkJdWludDY0X3QJaV9zcHVyX3JkCQkgIDoJIDE7CisJCXVpbnQ2NF90CWlfcnN2ZAkJCSAgOgkxMTsKKwkJdWludDY0X3QJaV9tdWx0X2VycgkJICA6CSAxOworCX0gaWlfaXByYmJfZmxkX3M7Cit9IGlpX2lwcmJiX3VfdDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBEZXNjcmlwdGlvbjogIFRoZXJlIGFyZSA5IGluc3RhbmNlcyBvZiB0aGlzIHJlZ2lzdGVyLCBvbmUgcGVyICAgICAgICAqCisgKiBhY3R1YWwgd2lkZ2V0IGluIHRoaXMgaW1wbGVtZW50YXRpb24gb2YgU0h1YiBhbmQgQ3Jvc3Nib3cuICAgICAgICAgICAqCisgKiBOb3RlOiBDcm9zc2JvdyBvbmx5IGhhcyBwb3J0cyBmb3IgV2lkZ2V0cyA4IHRocm91Z2ggRiwgd2lkZ2V0IDAgICAgICAqCisgKiByZWZlcnMgdG8gQ3Jvc3Nib3cncyBpbnRlcm5hbCBzcGFjZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHJlZ2lzdGVyIGNvbnRhaW5zIHRoZSBzdGF0ZSBlbGVtZW50cyBwZXIgd2lkZ2V0IHRoYXQgYXJlICAgICAgICAqCisgKiBuZWNlc3NhcnkgdG8gbWFuYWdlIHRoZSBQSU8gZmxvdyBjb250cm9sIG9uIENyb3NzdGFsayBhbmQgb24gdGhlICAgICAqCisgKiBSb3V0ZXIgTmV0d29yay4gU2VlIHRoZSBQSU8gRmxvdyBDb250cm9sIGNoYXB0ZXIgZm9yIGEgY29tcGxldGUgICAgICAqCisgKiBkZXNjcmlwdGlvbiBvZiB0aGlzIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgU1BVUl9XUiBiaXQgcmVxdWlyZXMgc29tZSBleHBsYW5hdGlvbi4gV2hlbiB0aGlzIHJlZ2lzdGVyIGlzICAgICAqCisgKiB3cml0dGVuLCB0aGUgbmV3IHZhbHVlIG9mIHRoZSBDIGZpZWxkIGlzIGNhcHR1cmVkIGluIGFuIGludGVybmFsICAgICAqCisgKiByZWdpc3RlciBzbyB0aGUgaGFyZHdhcmUgY2FuIHJlbWVtYmVyIHdoYXQgdGhlIHByb2dyYW1tZXIgd3JvdGUgICAgICAqCisgKiBpbnRvIHRoZSBjcmVkaXQgY291bnRlci4gVGhlIFNQVVJfV1IgYml0IHNldHMgd2hlbmV2ZXIgdGhlIEMgZmllbGQgICAqCisgKiBpbmNyZW1lbnRzIGFib3ZlIHRoaXMgc3RvcmVkIHZhbHVlLCB3aGljaCBpbmRpY2F0ZXMgdGhhdCB0aGVyZSAgICAgICAqCisgKiBoYXZlIGJlZW4gbW9yZSByZXNwb25zZXMgcmVjZWl2ZWQgdGhhbiByZXF1ZXN0cyBzZW50LiBUaGUgU1BVUl9XUiAgICAqCisgKiBiaXQgY2Fubm90IGJlIGNsZWFyZWQgdW50aWwgYSB2YWx1ZSBpcyB3cml0dGVuIHRvIHRoZSBJUFJCeCAgICAgICAgICAqCisgKiByZWdpc3RlcjsgdGhlIHdyaXRlIHdpbGwgY29ycmVjdCB0aGUgQyBmaWVsZCBhbmQgY2FwdHVyZSBpdHMgbmV3ICAgICAqCisgKiB2YWx1ZSBpbiB0aGUgaW50ZXJuYWwgcmVnaXN0ZXIuIEV2ZW4gaWYgSUVDTFJbRV9QUkJfeF0gaXMgc2V0LCB0aGUgICAqCisgKiBTUFVSX1dSIGJpdCB3aWxsIHBlcnNpc3QgaWYgSVBSQnggaGFzbid0IHlldCBiZWVuIHdyaXR0ZW4uICAgICAgICAgICAqCisgKiAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIHVuaW9uIGlpX2lwcmJjX3UgeworCXVpbnQ2NF90CWlpX2lwcmJjX3JlZ3ZhbDsKKwlzdHJ1Y3QJeworCQl1aW50NjRfdAlpX2MJCQkgIDoJIDg7CisJCXVpbnQ2NF90CWlfbmEJCQkgIDoJMTQ7CisJCXVpbnQ2NF90CWlfcnN2ZF8yCQkgIDoJIDI7CisJCXVpbnQ2NF90CWlfbmIJCQkgIDoJMTQ7CisJCXVpbnQ2NF90CWlfcnN2ZF8xCQkgIDoJIDI7CisJCXVpbnQ2NF90CWlfbQkJCSAgOgkgMjsKKwkJdWludDY0X3QJaV9mCQkJICA6CSAxOworCQl1aW50NjRfdAlpX29mX2NudAkJICA6CSA1OworCQl1aW50NjRfdAlpX2Vycm9yCQkJICA6CSAxOworCQl1aW50NjRfdAlpX3JkX3RvCQkJICA6CSAxOworCQl1aW50NjRfdAlpX3NwdXJfd3IJCSAgOgkgMTsKKwkJdWludDY0X3QJaV9zcHVyX3JkCQkgIDoJIDE7CisJCXVpbnQ2NF90CWlfcnN2ZAkJCSAgOgkxMTsKKwkJdWludDY0X3QJaV9tdWx0X2VycgkJICA6CSAxOworCX0gaWlfaXByYmNfZmxkX3M7Cit9IGlpX2lwcmJjX3VfdDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBEZXNjcmlwdGlvbjogIFRoZXJlIGFyZSA5IGluc3RhbmNlcyBvZiB0aGlzIHJlZ2lzdGVyLCBvbmUgcGVyICAgICAgICAqCisgKiBhY3R1YWwgd2lkZ2V0IGluIHRoaXMgaW1wbGVtZW50YXRpb24gb2YgU0h1YiBhbmQgQ3Jvc3Nib3cuICAgICAgICAgICAqCisgKiBOb3RlOiBDcm9zc2JvdyBvbmx5IGhhcyBwb3J0cyBmb3IgV2lkZ2V0cyA4IHRocm91Z2ggRiwgd2lkZ2V0IDAgICAgICAqCisgKiByZWZlcnMgdG8gQ3Jvc3Nib3cncyBpbnRlcm5hbCBzcGFjZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHJlZ2lzdGVyIGNvbnRhaW5zIHRoZSBzdGF0ZSBlbGVtZW50cyBwZXIgd2lkZ2V0IHRoYXQgYXJlICAgICAgICAqCisgKiBuZWNlc3NhcnkgdG8gbWFuYWdlIHRoZSBQSU8gZmxvdyBjb250cm9sIG9uIENyb3NzdGFsayBhbmQgb24gdGhlICAgICAqCisgKiBSb3V0ZXIgTmV0d29yay4gU2VlIHRoZSBQSU8gRmxvdyBDb250cm9sIGNoYXB0ZXIgZm9yIGEgY29tcGxldGUgICAgICAqCisgKiBkZXNjcmlwdGlvbiBvZiB0aGlzIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgU1BVUl9XUiBiaXQgcmVxdWlyZXMgc29tZSBleHBsYW5hdGlvbi4gV2hlbiB0aGlzIHJlZ2lzdGVyIGlzICAgICAqCisgKiB3cml0dGVuLCB0aGUgbmV3IHZhbHVlIG9mIHRoZSBDIGZpZWxkIGlzIGNhcHR1cmVkIGluIGFuIGludGVybmFsICAgICAqCisgKiByZWdpc3RlciBzbyB0aGUgaGFyZHdhcmUgY2FuIHJlbWVtYmVyIHdoYXQgdGhlIHByb2dyYW1tZXIgd3JvdGUgICAgICAqCisgKiBpbnRvIHRoZSBjcmVkaXQgY291bnRlci4gVGhlIFNQVVJfV1IgYml0IHNldHMgd2hlbmV2ZXIgdGhlIEMgZmllbGQgICAqCisgKiBpbmNyZW1lbnRzIGFib3ZlIHRoaXMgc3RvcmVkIHZhbHVlLCB3aGljaCBpbmRpY2F0ZXMgdGhhdCB0aGVyZSAgICAgICAqCisgKiBoYXZlIGJlZW4gbW9yZSByZXNwb25zZXMgcmVjZWl2ZWQgdGhhbiByZXF1ZXN0cyBzZW50LiBUaGUgU1BVUl9XUiAgICAqCisgKiBiaXQgY2Fubm90IGJlIGNsZWFyZWQgdW50aWwgYSB2YWx1ZSBpcyB3cml0dGVuIHRvIHRoZSBJUFJCeCAgICAgICAgICAqCisgKiByZWdpc3RlcjsgdGhlIHdyaXRlIHdpbGwgY29ycmVjdCB0aGUgQyBmaWVsZCBhbmQgY2FwdHVyZSBpdHMgbmV3ICAgICAqCisgKiB2YWx1ZSBpbiB0aGUgaW50ZXJuYWwgcmVnaXN0ZXIuIEV2ZW4gaWYgSUVDTFJbRV9QUkJfeF0gaXMgc2V0LCB0aGUgICAqCisgKiBTUFVSX1dSIGJpdCB3aWxsIHBlcnNpc3QgaWYgSVBSQnggaGFzbid0IHlldCBiZWVuIHdyaXR0ZW4uICAgICAgICAgICAqCisgKiAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIHVuaW9uIGlpX2lwcmJkX3UgeworCXVpbnQ2NF90CWlpX2lwcmJkX3JlZ3ZhbDsKKwlzdHJ1Y3QJeworCQl1aW50NjRfdAlpX2MJCQkgIDoJIDg7CisJCXVpbnQ2NF90CWlfbmEJCQkgIDoJMTQ7CisJCXVpbnQ2NF90CWlfcnN2ZF8yCQkgIDoJIDI7CisJCXVpbnQ2NF90CWlfbmIJCQkgIDoJMTQ7CisJCXVpbnQ2NF90CWlfcnN2ZF8xCQkgIDoJIDI7CisJCXVpbnQ2NF90CWlfbQkJCSAgOgkgMjsKKwkJdWludDY0X3QJaV9mCQkJICA6CSAxOworCQl1aW50NjRfdAlpX29mX2NudAkJICA6CSA1OworCQl1aW50NjRfdAlpX2Vycm9yCQkJICA6CSAxOworCQl1aW50NjRfdAlpX3JkX3RvCQkJICA6CSAxOworCQl1aW50NjRfdAlpX3NwdXJfd3IJCSAgOgkgMTsKKwkJdWludDY0X3QJaV9zcHVyX3JkCQkgIDoJIDE7CisJCXVpbnQ2NF90CWlfcnN2ZAkJCSAgOgkxMTsKKwkJdWludDY0X3QJaV9tdWx0X2VycgkJICA6CSAxOworCX0gaWlfaXByYmRfZmxkX3M7Cit9IGlpX2lwcmJkX3VfdDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBEZXNjcmlwdGlvbjogIFRoZXJlIGFyZSA5IGluc3RhbmNlcyBvZiB0aGlzIHJlZ2lzdGVyLCBvbmUgcGVyICAgICAgICAqCisgKiBhY3R1YWwgd2lkZ2V0IGluIHRoaXMgaW1wbGVtZW50YXRpb24gb2YgU0h1YiBhbmQgQ3Jvc3Nib3cuICAgICAgICAgICAqCisgKiBOb3RlOiBDcm9zc2JvdyBvbmx5IGhhcyBwb3J0cyBmb3IgV2lkZ2V0cyA4IHRocm91Z2ggRiwgd2lkZ2V0IDAgICAgICAqCisgKiByZWZlcnMgdG8gQ3Jvc3Nib3cncyBpbnRlcm5hbCBzcGFjZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHJlZ2lzdGVyIGNvbnRhaW5zIHRoZSBzdGF0ZSBlbGVtZW50cyBwZXIgd2lkZ2V0IHRoYXQgYXJlICAgICAgICAqCisgKiBuZWNlc3NhcnkgdG8gbWFuYWdlIHRoZSBQSU8gZmxvdyBjb250cm9sIG9uIENyb3NzdGFsayBhbmQgb24gdGhlICAgICAqCisgKiBSb3V0ZXIgTmV0d29yay4gU2VlIHRoZSBQSU8gRmxvdyBDb250cm9sIGNoYXB0ZXIgZm9yIGEgY29tcGxldGUgICAgICAqCisgKiBkZXNjcmlwdGlvbiBvZiB0aGlzIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgU1BVUl9XUiBiaXQgcmVxdWlyZXMgc29tZSBleHBsYW5hdGlvbi4gV2hlbiB0aGlzIHJlZ2lzdGVyIGlzICAgICAqCisgKiB3cml0dGVuLCB0aGUgbmV3IHZhbHVlIG9mIHRoZSBDIGZpZWxkIGlzIGNhcHR1cmVkIGluIGFuIGludGVybmFsICAgICAqCisgKiByZWdpc3RlciBzbyB0aGUgaGFyZHdhcmUgY2FuIHJlbWVtYmVyIHdoYXQgdGhlIHByb2dyYW1tZXIgd3JvdGUgICAgICAqCisgKiBpbnRvIHRoZSBjcmVkaXQgY291bnRlci4gVGhlIFNQVVJfV1IgYml0IHNldHMgd2hlbmV2ZXIgdGhlIEMgZmllbGQgICAqCisgKiBpbmNyZW1lbnRzIGFib3ZlIHRoaXMgc3RvcmVkIHZhbHVlLCB3aGljaCBpbmRpY2F0ZXMgdGhhdCB0aGVyZSAgICAgICAqCisgKiBoYXZlIGJlZW4gbW9yZSByZXNwb25zZXMgcmVjZWl2ZWQgdGhhbiByZXF1ZXN0cyBzZW50LiBUaGUgU1BVUl9XUiAgICAqCisgKiBiaXQgY2Fubm90IGJlIGNsZWFyZWQgdW50aWwgYSB2YWx1ZSBpcyB3cml0dGVuIHRvIHRoZSBJUFJCeCAgICAgICAgICAqCisgKiByZWdpc3RlcjsgdGhlIHdyaXRlIHdpbGwgY29ycmVjdCB0aGUgQyBmaWVsZCBhbmQgY2FwdHVyZSBpdHMgbmV3ICAgICAqCisgKiB2YWx1ZSBpbiB0aGUgaW50ZXJuYWwgcmVnaXN0ZXIuIEV2ZW4gaWYgSUVDTFJbRV9QUkJfeF0gaXMgc2V0LCB0aGUgICAqCisgKiBTUFVSX1dSIGJpdCB3aWxsIHBlcnNpc3QgaWYgSVBSQnggaGFzbid0IHlldCBiZWVuIHdyaXR0ZW4uICAgICAgICAgICAqCisgKiAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIHVuaW9uIGlpX2lwcmJlX3UgeworCXVpbnQ2NF90CWlpX2lwcmJlX3JlZ3ZhbDsKKwlzdHJ1Y3QJeworCQl1aW50NjRfdAlpX2MJCQkgIDoJIDg7CisJCXVpbnQ2NF90CWlfbmEJCQkgIDoJMTQ7CisJCXVpbnQ2NF90CWlfcnN2ZF8yCQkgIDoJIDI7CisJCXVpbnQ2NF90CWlfbmIJCQkgIDoJMTQ7CisJCXVpbnQ2NF90CWlfcnN2ZF8xCQkgIDoJIDI7CisJCXVpbnQ2NF90CWlfbQkJCSAgOgkgMjsKKwkJdWludDY0X3QJaV9mCQkJICA6CSAxOworCQl1aW50NjRfdAlpX29mX2NudAkJICA6CSA1OworCQl1aW50NjRfdAlpX2Vycm9yCQkJICA6CSAxOworCQl1aW50NjRfdAlpX3JkX3RvCQkJICA6CSAxOworCQl1aW50NjRfdAlpX3NwdXJfd3IJCSAgOgkgMTsKKwkJdWludDY0X3QJaV9zcHVyX3JkCQkgIDoJIDE7CisJCXVpbnQ2NF90CWlfcnN2ZAkJCSAgOgkxMTsKKwkJdWludDY0X3QJaV9tdWx0X2VycgkJICA6CSAxOworCX0gaWlfaXByYmVfZmxkX3M7Cit9IGlpX2lwcmJlX3VfdDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBEZXNjcmlwdGlvbjogIFRoZXJlIGFyZSA5IGluc3RhbmNlcyBvZiB0aGlzIHJlZ2lzdGVyLCBvbmUgcGVyICAgICAgICAqCisgKiBhY3R1YWwgd2lkZ2V0IGluIHRoaXMgaW1wbGVtZW50YXRpb24gb2YgU2h1YiBhbmQgQ3Jvc3Nib3cuICAgICAgICAgICAqCisgKiBOb3RlOiBDcm9zc2JvdyBvbmx5IGhhcyBwb3J0cyBmb3IgV2lkZ2V0cyA4IHRocm91Z2ggRiwgd2lkZ2V0IDAgICAgICAqCisgKiByZWZlcnMgdG8gQ3Jvc3Nib3cncyBpbnRlcm5hbCBzcGFjZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHJlZ2lzdGVyIGNvbnRhaW5zIHRoZSBzdGF0ZSBlbGVtZW50cyBwZXIgd2lkZ2V0IHRoYXQgYXJlICAgICAgICAqCisgKiBuZWNlc3NhcnkgdG8gbWFuYWdlIHRoZSBQSU8gZmxvdyBjb250cm9sIG9uIENyb3NzdGFsayBhbmQgb24gdGhlICAgICAqCisgKiBSb3V0ZXIgTmV0d29yay4gU2VlIHRoZSBQSU8gRmxvdyBDb250cm9sIGNoYXB0ZXIgZm9yIGEgY29tcGxldGUgICAgICAqCisgKiBkZXNjcmlwdGlvbiBvZiB0aGlzIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgU1BVUl9XUiBiaXQgcmVxdWlyZXMgc29tZSBleHBsYW5hdGlvbi4gV2hlbiB0aGlzIHJlZ2lzdGVyIGlzICAgICAqCisgKiB3cml0dGVuLCB0aGUgbmV3IHZhbHVlIG9mIHRoZSBDIGZpZWxkIGlzIGNhcHR1cmVkIGluIGFuIGludGVybmFsICAgICAqCisgKiByZWdpc3RlciBzbyB0aGUgaGFyZHdhcmUgY2FuIHJlbWVtYmVyIHdoYXQgdGhlIHByb2dyYW1tZXIgd3JvdGUgICAgICAqCisgKiBpbnRvIHRoZSBjcmVkaXQgY291bnRlci4gVGhlIFNQVVJfV1IgYml0IHNldHMgd2hlbmV2ZXIgdGhlIEMgZmllbGQgICAqCisgKiBpbmNyZW1lbnRzIGFib3ZlIHRoaXMgc3RvcmVkIHZhbHVlLCB3aGljaCBpbmRpY2F0ZXMgdGhhdCB0aGVyZSAgICAgICAqCisgKiBoYXZlIGJlZW4gbW9yZSByZXNwb25zZXMgcmVjZWl2ZWQgdGhhbiByZXF1ZXN0cyBzZW50LiBUaGUgU1BVUl9XUiAgICAqCisgKiBiaXQgY2Fubm90IGJlIGNsZWFyZWQgdW50aWwgYSB2YWx1ZSBpcyB3cml0dGVuIHRvIHRoZSBJUFJCeCAgICAgICAgICAqCisgKiByZWdpc3RlcjsgdGhlIHdyaXRlIHdpbGwgY29ycmVjdCB0aGUgQyBmaWVsZCBhbmQgY2FwdHVyZSBpdHMgbmV3ICAgICAqCisgKiB2YWx1ZSBpbiB0aGUgaW50ZXJuYWwgcmVnaXN0ZXIuIEV2ZW4gaWYgSUVDTFJbRV9QUkJfeF0gaXMgc2V0LCB0aGUgICAqCisgKiBTUFVSX1dSIGJpdCB3aWxsIHBlcnNpc3QgaWYgSVBSQnggaGFzbid0IHlldCBiZWVuIHdyaXR0ZW4uICAgICAgICAgICAqCisgKiAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIHVuaW9uIGlpX2lwcmJmX3UgeworICAgICAgICB1aW50NjRfdCAgICAgICBpaV9pcHJiZl9yZWd2YWw7CisgICAgICAgIHN0cnVjdCAgeworICAgICAgICAgICAgICAgIHVpbnQ2NF90ICAgICAgIGlfYyAgICAgICAgICAgICAgICAgICAgICAgOiAgICAgIDg7CisgICAgICAgICAgICAgICAgdWludDY0X3QgICAgICAgaV9uYSAgICAgICAgICAgICAgICAgICAgICA6ICAgICAxNDsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCAgICAgICBpX3JzdmRfMiAgICAgICAgICAgICAgICAgIDogICAgICAyOworICAgICAgICAgICAgICAgIHVpbnQ2NF90ICAgICAgIGlfbmIgICAgICAgICAgICAgICAgICAgICAgOiAgICAgMTQ7CisgICAgICAgICAgICAgICAgdWludDY0X3QgICAgICAgaV9yc3ZkXzEgICAgICAgICAgICAgICAgICA6ICAgICAgMjsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCAgICAgICBpX20gICAgICAgICAgICAgICAgICAgICAgIDogICAgICAyOworICAgICAgICAgICAgICAgIHVpbnQ2NF90ICAgICAgIGlfZiAgICAgICAgICAgICAgICAgICAgICAgOiAgICAgIDE7CisgICAgICAgICAgICAgICAgdWludDY0X3QgICAgICAgaV9vZl9jbnQgICAgICAgICAgICAgICAgICA6ICAgICAgNTsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCAgICAgICBpX2Vycm9yICAgICAgICAgICAgICAgICAgIDogICAgICAxOworICAgICAgICAgICAgICAgIHVpbnQ2NF90ICAgICAgIGlfcmRfdG8gICAgICAgICAgICAgICAgICAgOiAgICAgIDE7CisgICAgICAgICAgICAgICAgdWludDY0X3QgICAgICAgaV9zcHVyX3dyICAgICAgICAgICAgICAgICA6ICAgICAgMTsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCAgICAgICBpX3NwdXJfcmQgICAgICAgICAgICAgICAgIDogICAgICAxOworICAgICAgICAgICAgICAgIHVpbnQ2NF90ICAgICAgIGlfcnN2ZCAgICAgICAgICAgICAgICAgICAgOiAgICAgMTE7CisgICAgICAgICAgICAgICAgdWludDY0X3QgICAgICAgaV9tdWx0X2VyciAgICAgICAgICAgICAgICA6ICAgICAgMTsKKyAgICAgICAgfSBpaV9pcHJiZV9mbGRfczsKK30gaWlfaXByYmZfdV90OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICBUaGlzIHJlZ2lzdGVyIHNwZWNpZmllcyB0aGUgdGltZW91dCB2YWx1ZSB0byB1c2UgZm9yIG1vbml0b3JpbmcgICAgICoKKyAqIENyb3NzdGFsayBjcmVkaXRzIHdoaWNoIGFyZSB1c2VkIG91dGJvdW5kIHRvIENyb3NzdGFsay4gQW4gICAgICAgICAgICoKKyAqIGludGVybmFsIGNvdW50ZXIgY2FsbGVkIHRoZSBDcm9zc3RhbGsgQ3JlZGl0IFRpbWVvdXQgQ291bnRlciAgICAgICAgICoKKyAqIGluY3JlbWVudHMgZXZlcnkgMTI4IElJIGNsb2Nrcy4gVGhlIGNvdW50ZXIgc3RhcnRzIGNvdW50aW5nICAgICAgICAgICoKKyAqIGFueXRpbWUgdGhlIGNyZWRpdCBjb3VudCBkcm9wcyBiZWxvdyBhIHRocmVzaG9sZCwgYW5kIHJlc2V0cyB0byAgICAgICoKKyAqIHplcm8gKHN0b3BzIGNvdW50aW5nKSBhbnl0aW1lIHRoZSBjcmVkaXQgY291bnQgaXMgYXQgb3IgYWJvdmUgdGhlICAgICoKKyAqIHRocmVzaG9sZC4gVGhlIHRocmVzaG9sZCBpcyAxIGNyZWRpdCBpbiBkaXJlY3QgY29ubmVjdCBtb2RlIGFuZCAyICAgICoKKyAqIGluIENyb3NzYm93IGNvbm5lY3QgbW9kZS4gV2hlbiB0aGUgaW50ZXJuYWwgQ3Jvc3N0YWxrIENyZWRpdCAgICAgICAgICoKKyAqIFRpbWVvdXQgQ291bnRlciByZWFjaGVzIHRoZSB2YWx1ZSBwcm9ncmFtbWVkIGluIHRoaXMgcmVnaXN0ZXIsIGEgICAgICoKKyAqIENyb3NzdGFsayBDcmVkaXQgVGltZW91dCBoYXMgb2NjdXJyZWQuIFRoZSBpbnRlcm5hbCBjb3VudGVyIGlzIG5vdCAgICoKKyAqIHJlYWRhYmxlIGZyb20gc29mdHdhcmUsIGFuZCBzdG9wcyBjb3VudGluZyBhdCBpdHMgbWF4aW11bSB2YWx1ZSwgICAgICoKKyAqIHNvIGl0IGNhbm5vdCBjYXVzZSBtb3JlIHRoYW4gb25lIGludGVycnVwdC4gICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgdW5pb24gaWlfaXhjY191IHsKKwl1aW50NjRfdAlpaV9peGNjX3JlZ3ZhbDsKKwlzdHJ1Y3QgIHsKKwkJdWludDY0X3QJaV90aW1lX291dCAgICAgICAgICAgICAgICA6CTI2OworCQl1aW50NjRfdAlpX3JzdmQJCQkgIDoJMzg7CisJfSBpaV9peGNjX2ZsZF9zOworfSBpaV9peGNjX3VfdDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBEZXNjcmlwdGlvbjogIFRoaXMgcmVnaXN0ZXIgcXVhbGlmaWVzIGFsbCB0aGUgUElPIGFuZCBETUEgICAgICAgICAgICAqCisgKiBvcGVyYXRpb25zIGxhdW5jaGVkIGZyb20gd2lkZ2V0IDAgdG93YXJkcyB0aGUgU0h1Yi4gSW4gICAgICAgICAgICAgICAqCisgKiBhZGRpdGlvbiwgaXQgYWxzbyBxdWFsaWZpZXMgYWNjZXNzZXMgYnkgdGhlIEJURSBzdHJlYW1zLiAgICAgICAgICAgICAqCisgKiBUaGUgYml0cyBpbiBlYWNoIGZpZWxkIG9mIHRoaXMgcmVnaXN0ZXIgYXJlIGNsZWFyZWQgYnkgdGhlIFNIdWIgICAgICAqCisgKiB1cG9uIGRldGVjdGlvbiBvZiBhbiBlcnJvciB3aGljaCByZXF1aXJlcyB3aWRnZXQgMCBvciB0aGUgQlRFICAgICAgICAqCisgKiBzdHJlYW1zIHRvIGJlIHRlcm1pbmF0ZWQuIFdoZXRoZXIgb3Igbm90IHdpZGdldCB4IGhhcyBhY2Nlc3MgICAgICAgICAqCisgKiByaWdodHMgdG8gdGhpcyBTSHViIGlzIGRldGVybWluZWQgYnkgYW4gQU5EIG9mIHRoZSBkZXZpY2UgICAgICAgICAgICAqCisgKiBlbmFibGUgYml0IGluIHRoZSBhcHByb3ByaWF0ZSBmaWVsZCBvZiB0aGlzIHJlZ2lzdGVyIGFuZCBiaXQgMCBpbiAgICAqCisgKiB0aGUgV3hfSUFDIGZpZWxkLiBUaGUgYml0cyBpbiB0aGlzIGZpZWxkIGFyZSBzZXQgYnkgd3JpdGluZyBhIDEgdG8gICAqCisgKiB0aGVtLiBJbmNvbWluZyByZXBsaWVzIGZyb20gQ3Jvc3N0YWxrIGFyZSBub3Qgc3ViamVjdCB0byB0aGlzICAgICAgICAqCisgKiBhY2Nlc3MgY29udHJvbCBtZWNoYW5pc20uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIHVuaW9uIGlpX2ltZW1fdSB7CisJdWludDY0X3QJaWlfaW1lbV9yZWd2YWw7CisJc3RydWN0ICB7CisJCXVpbnQ2NF90CWlfdzBfZXNkICAgICAgICAgICAgICAgICAgOgkgMTsKKwkJdWludDY0X3QJaV9yc3ZkXzMJCSAgOgkgMzsKKwkJdWludDY0X3QJaV9iMF9lc2QJCSAgOgkgMTsKKwkJdWludDY0X3QJaV9yc3ZkXzIJCSAgOgkgMzsKKwkJdWludDY0X3QJaV9iMV9lc2QJCSAgOgkgMTsKKwkJdWludDY0X3QJaV9yc3ZkXzEJCSAgOgkgMzsKKwkJdWludDY0X3QJaV9jbHJfcHJlY2lzZQkJICA6CSAxOworCQl1aW50NjRfdCAgICAgICBpX3JzdmQgICAgICAgICAgICAgICAgICAgIDogICAgIDUxOworCX0gaWlfaW1lbV9mbGRfczsKK30gaWlfaW1lbV91X3Q7CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBEZXNjcmlwdGlvbjogIFRoaXMgcmVnaXN0ZXIgc3BlY2lmaWVzIHRoZSB0aW1lb3V0IHZhbHVlIHRvIHVzZSBmb3IgICAqCisgKiBtb25pdG9yaW5nIENyb3NzdGFsayB0YWlsIGZsaXRzIGNvbWluZyBpbnRvIHRoZSBTaHViIGluIHRoZSAgICAgICAgICAqCisgKiBUQUlMX1RPIGZpZWxkLiBBbiBpbnRlcm5hbCBjb3VudGVyIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJlZ2lzdGVyICAgICAqCisgKiBpcyBpbmNyZW1lbnRlZCBldmVyeSAxMjggSUkgaW50ZXJuYWwgY2xvY2tzICg3IGJpdHMpLiBUaGUgY291bnRlciAgICAqCisgKiBzdGFydHMgY291bnRpbmcgYW55dGltZSBhIGhlYWRlciBtaWNyb3BhY2tldCBpcyByZWNlaXZlZCBhbmQgc3RvcHMgICAqCisgKiBjb3VudGluZyAoYW5kIHJlc2V0cyB0byB6ZXJvKSBhbnkgdGltZSBhIG1pY3JvcGFja2V0IHdpdGggYSBUYWlsICAgICAqCisgKiBiaXQgaXMgcmVjZWl2ZWQuIE9uY2UgdGhlIGNvdW50ZXIgcmVhY2hlcyB0aGUgdGhyZXNob2xkIHZhbHVlICAgICAgICAqCisgKiBwcm9ncmFtbWVkIGluIHRoaXMgcmVnaXN0ZXIsIGl0IGdlbmVyYXRlcyBhbiBpbnRlcnJ1cHQgdG8gdGhlICAgICAgICAqCisgKiBwcm9jZXNzb3IgdGhhdCBpcyBwcm9ncmFtbWVkIGludG8gdGhlIElJRFNSLiBUaGUgY291bnRlciBzYXR1cmF0ZXMgICAqCisgKiAoZG9lcyBub3Qgcm9sbCBvdmVyKSBhdCBpdHMgbWF4aW11bSB2YWx1ZSwgc28gaXQgY2Fubm90IGNhdXNlICAgICAgICAqCisgKiBhbm90aGVyIGludGVycnVwdCB1bnRpbCBhZnRlciBpdCBpcyBjbGVhcmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgcmVnaXN0ZXIgYWxzbyBjb250YWlucyB0aGUgUmVhZCBSZXNwb25zZSBUaW1lb3V0IHZhbHVlcy4gVGhlICAgICAqCisgKiBQcmVzY2FsYXIgaXMgMjMgYml0cywgYW5kIGNvdW50cyBJSSBjbG9ja3MuIEFuIGludGVybmFsIGNvdW50ZXIgICAgICAqCisgKiBpbmNyZW1lbnRzIG9uIGV2ZXJ5IElJIGNsb2NrIGFuZCB3aGVuIGl0IHJlYWNoZXMgdGhlIHZhbHVlIGluIHRoZSAgICAqCisgKiBQcmVzY2FsYXIgZmllbGQsIGFsbCBJUFJURSByZWdpc3RlcnMgd2l0aCB0aGVpciB2YWxpZCBiaXRzIHNldCAgICAgICAqCisgKiBoYXZlIHRoZWlyIFJlYWQgUmVzcG9uc2UgdGltZXJzIGJ1bXBlZC4gV2hlbmV2ZXIgYW55IG9mIHRoZW0gbWF0Y2ggICAqCisgKiB0aGUgdmFsdWUgaW4gdGhlIFJSU1BfVE8gZmllbGQsIGEgUmVhZCBSZXNwb25zZSBUaW1lb3V0IGhhcyAgICAgICAgICAqCisgKiBvY2N1cnJlZCwgYW5kIGVycm9yIGhhbmRsaW5nIG9jY3VycyBhcyBkZXNjcmliZWQgaW4gdGhlIEVycm9yICAgICAgICAqCisgKiBIYW5kbGluZyBzZWN0aW9uIG9mIHRoaXMgZG9jdW1lbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIHVuaW9uIGlpX2l4dHRfdSB7CisJdWludDY0X3QJaWlfaXh0dF9yZWd2YWw7CisJc3RydWN0ICB7CisJCXVpbnQ2NF90CWlfdGFpbF90byAgICAgICAgICAgICAgICAgOgkyNjsKKwkJdWludDY0X3QJaV9yc3ZkXzEJCSAgOgkgNjsKKwkJdWludDY0X3QJaV9ycnNwX3BzCQkgIDoJMjM7CisJCXVpbnQ2NF90CWlfcnJzcF90bwkJICA6CSA1OworCQl1aW50NjRfdAlpX3JzdmQJCQkgIDoJIDQ7CisJfSBpaV9peHR0X2ZsZF9zOworfSBpaV9peHR0X3VfdDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgV3JpdGluZyBhIDEgdG8gdGhlIGZpZWxkcyBvZiB0aGlzIHJlZ2lzdGVyIGNsZWFycyB0aGUgYXBwcm9wcmlhdGUgICAqCisgKiBlcnJvciBiaXRzIGluIG90aGVyIGFyZWFzIG9mIFNIdWIuIE5vdGUgdGhhdCB3aGVuIHRoZSAgICAgICAgICAgICAgICAqCisgKiBFX1BSQl94IGJpdHMgYXJlIHVzZWQgdG8gY2xlYXIgZXJyb3IgYml0cyBpbiBQUkIgcmVnaXN0ZXJzLCAgICAgICAgICAqCisgKiBTUFVSX1JEIGFuZCBTUFVSX1dSIG1heSBwZXJzaXN0LCBiZWNhdXNlIHRoZXkgcmVxdWlyZSBhZGRpdGlvbmFsICAgICAqCisgKiBhY3Rpb24gdG8gY2xlYXIgdGhlbS4gU2VlIHRoZSBJUFJCeCBhbmQgSVhTUyBSZWdpc3RlciAgICAgICAgICAgICAgICAqCisgKiBzcGVjaWZpY2F0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIHVuaW9uIGlpX2llY2xyX3UgeworCXVpbnQ2NF90CWlpX2llY2xyX3JlZ3ZhbDsKKwlzdHJ1Y3QgIHsKKwkJdWludDY0X3QJaV9lX3ByYl8wICAgICAgICAgICAgICAgICA6CSAxOworCQl1aW50NjRfdAlpX3JzdmQJCQkgIDoJIDc7CisJCXVpbnQ2NF90CWlfZV9wcmJfOAkJICA6CSAxOworCQl1aW50NjRfdAlpX2VfcHJiXzkJCSAgOgkgMTsKKwkJdWludDY0X3QJaV9lX3ByYl9hCQkgIDoJIDE7CisJCXVpbnQ2NF90CWlfZV9wcmJfYgkJICA6CSAxOworCQl1aW50NjRfdAlpX2VfcHJiX2MJCSAgOgkgMTsKKwkJdWludDY0X3QJaV9lX3ByYl9kCQkgIDoJIDE7CisJCXVpbnQ2NF90CWlfZV9wcmJfZQkJICA6CSAxOworCQl1aW50NjRfdAlpX2VfcHJiX2YJCSAgOgkgMTsKKwkJdWludDY0X3QJaV9lX2NyYXp5CQkgIDoJIDE7CisJCXVpbnQ2NF90CWlfZV9idGVfMAkJICA6CSAxOworCQl1aW50NjRfdAlpX2VfYnRlXzEJCSAgOgkgMTsKKwkJdWludDY0X3QJaV9yZXNlcnZlZF8xCQkgIDoJMTA7CisJCXVpbnQ2NF90CWlfc3B1cl9yZF9oZHIJCSAgOgkgMTsKKwkJdWludDY0X3QJaV9jYW1faW50cl90bwkJICA6CSAxOworCQl1aW50NjRfdAlpX2NhbV9vdmVyZmxvdwkJICA6CSAxOworCQl1aW50NjRfdAlpX2NhbV9yZWFkX21pc3MJCSAgOgkgMTsKKwkJdWludDY0X3QJaV9pb3FfcmVwX3VuZGVyZmxvdwkgIDoJIDE7CisJCXVpbnQ2NF90CWlfaW9xX3JlcV91bmRlcmZsb3cJICA6CSAxOworCQl1aW50NjRfdAlpX2lvcV9yZXBfb3ZlcmZsb3cJICA6CSAxOworCQl1aW50NjRfdAlpX2lvcV9yZXFfb3ZlcmZsb3cJICA6CSAxOworCQl1aW50NjRfdAlpX2lpcV9yZXBfb3ZlcmZsb3cJICA6CSAxOworCQl1aW50NjRfdAlpX2lpcV9yZXFfb3ZlcmZsb3cJICA6CSAxOworCQl1aW50NjRfdAlpX2lpX3huX3JlcF9jcmVkX292ZXJmbG93IDoJIDE7CisJCXVpbnQ2NF90CWlfaWlfeG5fcmVxX2NyZWRfb3ZlcmZsb3cgOgkgMTsKKwkJdWludDY0X3QJaV9paV94bl9pbnZhbGlkX2NtZAkgIDoJIDE7CisJCXVpbnQ2NF90CWlfeG5faWlfaW52YWxpZF9jbWQJICA6CSAxOworCQl1aW50NjRfdAlpX3Jlc2VydmVkXzIJCSAgOgkyMTsKKwl9IGlpX2llY2xyX2ZsZF9zOworfSBpaV9pZWNscl91X3Q7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogIFRoaXMgcmVnaXN0ZXIgY29udHJvbHMgYm90aCBCVEVzLiBTT0ZUX1JFU0VUIGlzIGludGVuZGVkIGZvciAgICAgICAgKgorICogcmVjb3ZlcnkgYWZ0ZXIgYW4gZXJyb3IuIENPVU5UIGNvbnRyb2xzIHRoZSB0b3RhbCBudW1iZXIgb2YgQ1JCcyAgICAgKgorICogdGhhdCBib3RoIEJURXMgKGNvbWJpbmVkKSBjYW4gdXNlLCB3aGljaCBhZmZlY3RzIHRvdGFsIEJURSAgICAgICAgICAgKgorICogYmFuZHdpZHRoLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordHlwZWRlZiB1bmlvbiBpaV9pYmNyX3UgeworCXVpbnQ2NF90CWlpX2liY3JfcmVndmFsOworCXN0cnVjdCAgeworCQl1aW50NjRfdAlpX2NvdW50ICAgICAgICAgICAgICAgICAgIDoJIDQ7CisJCXVpbnQ2NF90CWlfcnN2ZF8xCQkgIDoJIDQ7CisJCXVpbnQ2NF90CWlfc29mdF9yZXNldAkJICA6CSAxOworCQl1aW50NjRfdAlpX3JzdmQJCQkgIDoJNTU7CisJfSBpaV9pYmNyX2ZsZF9zOworfSBpaV9pYmNyX3VfdDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgVGhpcyByZWdpc3RlciBjb250YWlucyB0aGUgaGVhZGVyIG9mIGEgc3B1cmlvdXMgcmVhZCByZXNwb25zZSAgICAgICAqCisgKiByZWNlaXZlZCBmcm9tIENyb3NzdGFsay4gQSBzcHVyaW91cyByZWFkIHJlc3BvbnNlIGlzIGRlZmluZWQgYXMgYSAgICAqCisgKiByZWFkIHJlc3BvbnNlIHJlY2VpdmVkIGJ5IElJIGZyb20gYSB3aWRnZXQgZm9yIHdoaWNoICgxKSB0aGUgU0lETiAgICAqCisgKiBoYXMgYSB2YWx1ZSBiZXR3ZWVuIDEgYW5kIDcsIGluY2x1c2l2ZSAoSUkgbmV2ZXIgc2VuZHMgcmVxdWVzdHMgdG8gICAqCisgKiB0aGVzZSB3aWRnZXRzICgyKSB0aGVyZSBpcyBubyB2YWxpZCBJUFJURSByZWdpc3RlciB3aGljaCAgICAgICAgICAgICAqCisgKiBjb3JyZXNwb25kcyB0byB0aGUgVE5VTSwgb3IgKDMpIHRoZSB3aWRnZXQgaW5kaWNhdGVkIGluIFNJRE4gaXMgICAgICAqCisgKiBub3QgdGhlIHNhbWUgYXMgdGhlIHdpZGdldCByZWNvcmRlZCBpbiB0aGUgSVBSVEUgcmVnaXN0ZXIgICAgICAgICAgICAqCisgKiByZWZlcmVuY2VkIGJ5IHRoZSBUTlVNLiBJZiB0aGlzIGNvbmRpdGlvbiBpcyB0cnVlLCBhbmQgaWYgdGhlICAgICAgICAqCisgKiBJWFNTW1ZBTElEXSBiaXQgaXMgY2xlYXIsIHRoZW4gdGhlIGhlYWRlciBvZiB0aGUgc3B1cmlvdXMgcmVhZCAgICAgICAqCisgKiByZXNwb25zZSBpcyBjYXB0dXJlIGluIElYU00gYW5kIElYU1MsIGFuZCBJWFNTW1ZBTElEXSBpcyBzZXQuIFRoZSAgICAqCisgKiBlcnJhbnQgaGVhZGVyIGlzIHRoZXJlYnkgY2FwdHVyZWQsIGFuZCBubyBmdXJ0aGVyIHNwdXJpb3VzIHJlYWQgICAgICAqCisgKiByZXNwb25lcyBhcmUgY2FwdHVyZWQgdW50aWwgSVhTU1tWQUxJRF0gaXMgY2xlYXJlZCBieSBzZXR0aW5nIHRoZSAgICAqCisgKiBhcHByb3ByaWF0ZSBiaXQgaW4gSUVDTFIuRXZlcnl0aW1lIGEgc3B1cmlvdXMgcmVhZCByZXNwb25zZSBpcyAgICAgICAqCisgKiBkZXRlY3RlZCwgdGhlIFNQVVJfUkQgYml0IG9mIHRoZSBQUkIgY29ycmVzcG9uZGluZyB0byB0aGUgaW5jb21pbmcgICAqCisgKiBtZXNzYWdlJ3MgU0lETiBmaWVsZCBpcyBzZXQuIFRoaXMgYWx3YXlzIGhhcHBlbnMsIHJlZ2FybGVzcyBvZiAgICAgICAqCisgKiB3aGV0aGVyIGEgaGVhZGVyIGlzIGNhcHR1cmVkLiBUaGUgcHJvZ3JhbW1lciBzaG91bGQgY2hlY2sgICAgICAgICAgICAqCisgKiBJWFNNW1NJRE5dIHRvIGRldGVybWluZSB3aGljaCB3aWRnZXQgc2VudCB0aGUgc3B1cmlvdXMgcmVzcG9uc2UsICAgICAqCisgKiBiZWNhdXNlIHRoZXJlIG1heSBiZSBtb3JlIHRoYW4gb25lIFNQVVJfUkQgYml0IHNldCBpbiB0aGUgUFJCICAgICAgICAqCisgKiByZWdpc3RlcnMuIFRoZSB3aWRnZXQgaW5kaWNhdGVkIGJ5IElYU01bU0lETl0gd2FzIHRoZSBmaXJzdCAgICAgICAgICAqCisgKiBzcHVyaW91cyByZWFkIHJlc3BvbnNlIHRvIGJlIHJlY2VpdmVkIHNpbmNlIHRoZSBsYXN0IHRpbWUgICAgICAgICAgICAqCisgKiBJWFNTW1ZBTElEXSB3YXMgY2xlYXIuIFRoZSBTUFVSX1JEIGJpdCBvZiB0aGUgY29ycmVzcG9uZGluZyBQUkIgICAgICAqCisgKiB3aWxsIGJlIHNldC4gQW55IFNQVVJfUkQgYml0cyBpbiBhbnkgb3RoZXIgUFJCIHJlZ2lzdGVycyBpbmRpY2F0ZSAgICAqCisgKiBzcHVyaW91cyBtZXNzYWdlcyBmcm9tIG90aGVyIHdpZGV0cyB3aGljaCB3ZXJlIGRldGVjdGVkIGFmdGVyIHRoZSAgICAqCisgKiBoZWFkZXIgd2FzIGNhcHR1cmVkLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIHVuaW9uIGlpX2l4c21fdSB7CisJdWludDY0X3QJaWlfaXhzbV9yZWd2YWw7CisJc3RydWN0ICB7CisJCXVpbnQ2NF90CWlfYnl0ZV9lbiAgICAgICAgICAgICAgICAgOgkzMjsKKwkJdWludDY0X3QJaV9yZXNlcnZlZAkJICA6CSAxOworCQl1aW50NjRfdAlpX3RhZwkJCSAgOgkgMzsKKwkJdWludDY0X3QJaV9hbHRfcGFjdHlwCQkgIDoJIDQ7CisJCXVpbnQ2NF90CWlfYm8JCQkgIDoJIDE7CisJCXVpbnQ2NF90CWlfZXJyb3IJCQkgIDoJIDE7CisJCXVpbnQ2NF90CWlfdmJwbQkJCSAgOgkgMTsKKwkJdWludDY0X3QJaV9nYnIJCQkgIDoJIDE7CisJCXVpbnQ2NF90CWlfZHMJCQkgIDoJIDI7CisJCXVpbnQ2NF90CWlfY3QJCQkgIDoJIDE7CisJCXVpbnQ2NF90CWlfdG51bQkJCSAgOgkgNTsKKwkJdWludDY0X3QJaV9wYWN0eXAJCSAgOgkgNDsKKwkJdWludDY0X3QJaV9zaWRuCQkJICA6CSA0OworCQl1aW50NjRfdAlpX2RpZG4JCQkgIDoJIDQ7CisJfSBpaV9peHNtX2ZsZF9zOworfSBpaV9peHNtX3VfdDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgVGhpcyByZWdpc3RlciBjb250YWlucyB0aGUgc2lkZWJhbmQgYml0cyBvZiBhIHNwdXJpb3VzIHJlYWQgICAgICAgICAqCisgKiByZXNwb25zZSByZWNlaXZlZCBmcm9tIENyb3NzdGFsay4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIHVuaW9uIGlpX2l4c3NfdSB7CisJdWludDY0X3QJaWlfaXhzc19yZWd2YWw7CisJc3RydWN0ICB7CisJCXVpbnQ2NF90CWlfc2lkZWJhbmQgICAgICAgICAgICAgICAgOgkgODsKKwkJdWludDY0X3QJaV9yc3ZkCQkJICA6CTU1OworCQl1aW50NjRfdAlpX3ZhbGlkCQkJICA6CSAxOworCX0gaWlfaXhzc19mbGRfczsKK30gaWlfaXhzc191X3Q7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogIFRoaXMgcmVnaXN0ZXIgZW5hYmxlcyBzb2Z0d2FyZSB0byBhY2Nlc3MgdGhlIElJIExMUCdzIHRlc3QgcG9ydC4gICAgKgorICogUmVmZXIgdG8gdGhlIExMUCAyLjUgZG9jdW1lbnRhdGlvbiBmb3IgYW4gZXhwbGFuYXRpb24gb2YgdGhlIHRlc3QgICAgKgorICogcG9ydC4gU29mdHdhcmUgY2FuIHdyaXRlIHRvIHRoaXMgcmVnaXN0ZXIgdG8gcHJvZ3JhbSB0aGUgdmFsdWVzICAgICAgKgorICogZm9yIHRoZSBjb250cm9sIGZpZWxkcyAoVGVzdEVyckNhcHR1cmUsIFRlc3RDbGVhciwgVGVzdEZsaXQsICAgICAgICAgKgorICogVGVzdE1hc2sgYW5kIFRlc3RTZWVkKS4gU2ltaWxhcmx5LCBzb2Z0d2FyZSBjYW4gcmVhZCBmcm9tIHRoaXMgICAgICAgKgorICogcmVnaXN0ZXIgdG8gb2J0YWluIHRoZSB2YWx1ZXMgb2YgdGhlIHRlc3QgcG9ydCdzIHN0YXR1cyBvdXRwdXRzICAgICAgKgorICogKFRlc3RDQmVyciwgVGVzdFZhbGlkIGFuZCBUZXN0RGF0YSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordHlwZWRlZiB1bmlvbiBpaV9pbGN0X3UgeworCXVpbnQ2NF90CWlpX2lsY3RfcmVndmFsOworCXN0cnVjdCAgeworCQl1aW50NjRfdAlpX3Rlc3Rfc2VlZCAgICAgICAgICAgICAgIDoJMjA7CisJCXVpbnQ2NF90CWlfdGVzdF9tYXNrICAgICAgICAgICAgICAgOgkgODsKKwkJdWludDY0X3QJaV90ZXN0X2RhdGEgICAgICAgICAgICAgICA6CTIwOworCQl1aW50NjRfdAlpX3Rlc3RfdmFsaWQgICAgICAgICAgICAgIDoJIDE7CisJCXVpbnQ2NF90CWlfdGVzdF9jYmVyciAgICAgICAgICAgICAgOgkgMTsKKwkJdWludDY0X3QJaV90ZXN0X2ZsaXQgICAgICAgICAgICAgICA6CSAzOworCQl1aW50NjRfdAlpX3Rlc3RfY2xlYXIgICAgICAgICAgICAgIDoJIDE7CisJCXVpbnQ2NF90CWlfdGVzdF9lcnJfY2FwdHVyZSAgICAgICAgOgkgMTsKKwkJdWludDY0X3QJaV9yc3ZkICAgICAgICAgICAgICAgICAgICA6CSA5OworCX0gaWlfaWxjdF9mbGRfczsKK30gaWlfaWxjdF91X3Q7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogIElmIHRoZSBJSSBkZXRlY3RzIGFuIGlsbGVnYWwgaW5jb21pbmcgRHVwbG9uZXQgcGFja2V0IChyZXF1ZXN0IG9yICAgKgorICogcmVwbHkpIHdoZW4gVkFMSUQ9PTAgaW4gdGhlIElJRVBIMSByZWdpc3RlciwgdGhlbiBpdCBzYXZlcyB0aGUgICAgICAgKgorICogY29udGVudHMgb2YgdGhlIHBhY2tldCdzIGhlYWRlciBmbGl0IGluIHRoZSBJSUVQSDEgYW5kIElJRVBIMiAgICAgICAgKgorICogcmVnaXN0ZXJzLCBzZXRzIHRoZSBWQUxJRCBiaXQgaW4gSUlFUEgxLCBjbGVhcnMgdGhlIE9WRVJSVU4gYml0LCAgICAgKgorICogYW5kIGFzc2lnbnMgYSB2YWx1ZSB0byB0aGUgRVJSX1RZUEUgZmllbGQgd2hpY2ggaW5kaWNhdGVzIHRoZSAgICAgICAgKgorICogc3BlY2lmaWMgbmF0dXJlIG9mIHRoZSBlcnJvci4gVGhlIElJIHJlY29nbml6ZXMgZm91ciBkaWZmZXJlbnQgICAgICAgKgorICogdHlwZXMgb2YgZXJyb3JzOiBzaG9ydCByZXF1ZXN0IHBhY2tldHMgKEVSUl9UWVBFPT0yKSwgc2hvcnQgcmVwbHkgICAgKgorICogcGFja2V0cyAoRVJSX1RZUEU9PTMpLCBsb25nIHJlcXVlc3QgcGFja2V0cyAoRVJSX1RZUEU9PTQpIGFuZCBsb25nICAgKgorICogcmVwbHkgcGFja2V0cyAoRVJSX1RZUEU9PTUpLiBUaGUgZW5jb2RpbmdzIGZvciB0aGVzZSB0eXBlcyBvZiAgICAgICAgKgorICogZXJyb3JzIHdlcmUgY2hvc2VuIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgc2FtZSB0eXBlcyBvZiBlcnJvcnMgICAgKgorICogaW5kaWNhdGVkIGJ5IHRoZSBFUlJfVFlQRSBmaWVsZCBpbiB0aGUgTEJfRVJST1JfSERSMSByZWdpc3RlciAoaW4gICAgKgorICogdGhlIExCIHVuaXQpLiBJZiB0aGUgSUkgZGV0ZWN0cyBhbiBpbGxlZ2FsIGluY29taW5nIER1cGxvbmV0ICAgICAgICAgKgorICogcGFja2V0IHdoZW4gVkFMSUQ9PTEgaW4gdGhlIElJRVBIMSByZWdpc3RlciwgdGhlbiBpdCBtZXJlbHkgc2V0cyAgICAgKgorICogdGhlIE9WRVJSVU4gYml0IHRvIGluZGljYXRlIHRoYXQgYSBzdWJzZXF1ZW50IGVycm9yIGhhcyBoYXBwZW5lZCwgICAgKgorICogYW5kIGRvZXMgbm90aGluZyBmdXJ0aGVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordHlwZWRlZiB1bmlvbiBpaV9paWVwaDFfdSB7CisJdWludDY0X3QJaWlfaWllcGgxX3JlZ3ZhbDsKKwlzdHJ1Y3QJeworCQl1aW50NjRfdAlpX2NvbW1hbmQJCSAgOgkgNzsKKwkJdWludDY0X3QJaV9yc3ZkXzUJCSAgOgkgMTsKKwkJdWludDY0X3QJaV9zdXBwbAkJCSAgOgkxNDsKKwkJdWludDY0X3QJaV9yc3ZkXzQJCSAgOgkgMTsKKwkJdWludDY0X3QJaV9zb3VyY2UJCSAgOgkxNDsKKwkJdWludDY0X3QJaV9yc3ZkXzMJCSAgOgkgMTsKKwkJdWludDY0X3QJaV9lcnJfdHlwZQkJICA6CSA0OworCQl1aW50NjRfdAlpX3JzdmRfMgkJICA6CSA0OworCQl1aW50NjRfdAlpX292ZXJydW4JCSAgOgkgMTsKKwkJdWludDY0X3QJaV9yc3ZkXzEJCSAgOgkgMzsKKwkJdWludDY0X3QJaV92YWxpZAkJCSAgOgkgMTsKKwkJdWludDY0X3QJaV9yc3ZkCQkJICA6CTEzOworCX0gaWlfaWllcGgxX2ZsZF9zOworfSBpaV9paWVwaDFfdV90OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICBUaGlzIHJlZ2lzdGVyIGhvbGRzIHRoZSBBZGRyZXNzIGZpZWxkIGZyb20gdGhlIGhlYWRlciBmbGl0IG9mIGFuICAgICoKKyAqIGluY29taW5nIGVycm9uZW91cyBEdXBsb25ldCBwYWNrZXQsIGFsb25nIHdpdGggdGhlIHRhaWwgYml0IHdoaWNoICAgICoKKyAqIGFjY29tcGFuaWVkIHRoaXMgaGVhZGVyIGZsaXQuIFRoaXMgcmVnaXN0ZXIgaXMgZXNzZW50aWFsbHkgYW4gICAgICAgICoKKyAqIGV4dGVuc2lvbiBvZiBJSUVQSDEuIFR3byByZWdpc3RlcnMgd2VyZSBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgNjQgICAgICoKKyAqIGJpdHMgYXZhaWxhYmxlIGluIG9ubHkgYSBzaW5nbGUgcmVnaXN0ZXIgd2VyZSBpbnN1ZmZpY2llbnQgdG8gICAgICAgICoKKyAqIGNhcHR1cmUgdGhlIGVudGlyZSBoZWFkZXIgZmxpdCBvZiBhbiBlcnJvbmVvdXMgcGFja2V0LiAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgdW5pb24gaWlfaWllcGgyX3UgeworCXVpbnQ2NF90CWlpX2lpZXBoMl9yZWd2YWw7CisJc3RydWN0ICB7CisJCXVpbnQ2NF90CWlfcnN2ZF8wCQkgIDoJIDM7CisJCXVpbnQ2NF90CWlfYWRkcmVzcyAgICAgICAgICAgICAgICAgOgk0NzsKKwkJdWludDY0X3QJaV9yc3ZkXzEJCSAgOgkxMDsKKwkJdWludDY0X3QJaV90YWlsCQkJICA6CSAxOworCQl1aW50NjRfdAlpX3JzdmQJCQkgIDoJIDM7CisJfSBpaV9paWVwaDJfZmxkX3M7Cit9IGlpX2lpZXBoMl91X3Q7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICBUaGlzIHJlZ2lzdGVyJ3MgdmFsdWUgaXMgYSBiaXQgdmVjdG9yIHRoYXQgZ3VhcmRzIGFjY2VzcyBmcm9tIFNYQnMgICoKKyAqIHRvIGxvY2FsIHJlZ2lzdGVycyB3aXRoaW4gdGhlIElJIGFzIHdlbGwgYXMgdG8gZXh0ZXJuYWwgQ3Jvc3N0YWxrICAgICoKKyAqIHdpZGdldHMJCQkJCQkJCSoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgdW5pb24gaWlfaXNsYXByX3UgeworCXVpbnQ2NF90CWlpX2lzbGFwcl9yZWd2YWw7CisJc3RydWN0ICB7CisJCXVpbnQ2NF90CWlfcmVnaW9uCQkgIDoJNjQ7CisJfSBpaV9pc2xhcHJfZmxkX3M7Cit9IGlpX2lzbGFwcl91X3Q7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogIEEgd3JpdGUgdG8gdGhpcyByZWdpc3RlciBvZiB0aGUgNTYtYml0IHZhbHVlICJQdXArQnVuIiB3aWxsIGNhdXNlCSoKKyAqIHRoZSBiaXQgaW4gdGhlIElTTEFQUiByZWdpc3RlciBjb3JyZXNwb25kaW5nIHRvIHRoZSByZWdpb24gb2YgdGhlCSoKKyAqIHJlcXVlc3RvciB0byBiZSBzZXQgKGFjY2VzcyBhbGxvd2VkKS4JCQkJKAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordHlwZWRlZiB1bmlvbiBpaV9pc2xhcG9fdSB7CisJdWludDY0X3QJaWlfaXNsYXBvX3JlZ3ZhbDsKKwlzdHJ1Y3QgIHsKKwkJdWludDY0X3QJaV9pb19zYnhfb3ZycmlkZQkgIDoJNTY7CisJCXVpbnQ2NF90CWlfcnN2ZAkJCSAgOgkgODsKKwl9IGlpX2lzbGFwb19mbGRfczsKK30gaWlfaXNsYXBvX3VfdDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogIERldGVybWluZXMgaG93IGxvbmcgdGhlIHdyYXBwZXIgd2lsbCB3YWl0IGFmdHIgYW4gaW50ZXJydXB0IGlzCSoKKyAqIGluaXRpYWxseSBpc3N1ZWQgZnJvbSB0aGUgSUkgYmVmb3JlIGl0IHRpbWVzIG91dCB0aGUgb3V0c3RhbmRpbmcJKgorICogaW50ZXJydXB0IGFuZCBkcm9wcyBpdCBmcm9tIHRoZSBpbnRlcnJ1cHQgcXVldWUuCQkJKiAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgdW5pb24gaWlfaXdpX3UgeworCXVpbnQ2NF90CWlpX2l3aV9yZWd2YWw7CisJc3RydWN0ICB7CisJCXVpbnQ2NF90CWlfcHJlc2NhbGUJCSAgOgkyNDsKKwkJdWludDY0X3QJaV9yc3ZkCQkJICA6CSA4OworCQl1aW50NjRfdAlpX3RpbWVvdXQJCSAgOgkgODsKKwkJdWludDY0X3QJaV9yc3ZkMQkJCSAgOgkgODsKKwkJdWludDY0X3QJaV9pbnRycHRfcmV0cnlfcGVyaW9kCSAgOgkgODsKKwkJdWludDY0X3QJaV9yc3ZkMgkJCSAgOgkgODsKKwl9IGlpX2l3aV9mbGRfczsKK30gaWlfaXdpX3VfdDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogIExvZyBlcnJvcnMgd2hpY2ggaGF2ZSBvY2N1cnJlZCBpbiB0aGUgSUkgd3JhcHBlci4gVGhlIGVycm9ycyBhcmUJKgorICogY2xlYXJlZCBieSB3cml0aW5nIHRvIHRoZSBJRUNMUiByZWdpc3Rlci4JCQkJKiAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgdW5pb24gaWlfaXdlbF91IHsKKwl1aW50NjRfdAlpaV9pd2VsX3JlZ3ZhbDsKKwlzdHJ1Y3QgIHsKKwkJdWludDY0X3QJaV9pbnRyX3RpbWVkX291dAkgIDoJIDE7CisJCXVpbnQ2NF90CWlfcnN2ZAkJCSAgOgkgNzsKKwkJdWludDY0X3QJaV9jYW1fb3ZlcmZsb3cJCSAgOgkgMTsKKwkJdWludDY0X3QJaV9jYW1fcmVhZF9taXNzCQkgIDoJIDE7CisJCXVpbnQ2NF90CWlfcnN2ZDEJCQkgIDoJIDI7CisJCXVpbnQ2NF90CWlfaW9xX3JlcF91bmRlcmZsb3cJICA6CSAxOworCQl1aW50NjRfdAlpX2lvcV9yZXFfdW5kZXJmbG93CSAgOgkgMTsKKwkJdWludDY0X3QJaV9pb3FfcmVwX292ZXJmbG93CSAgOgkgMTsKKwkJdWludDY0X3QJaV9pb3FfcmVxX292ZXJmbG93CSAgOgkgMTsKKwkJdWludDY0X3QJaV9paXFfcmVwX292ZXJmbG93CSAgOgkgMTsKKwkJdWludDY0X3QJaV9paXFfcmVxX292ZXJmbG93CSAgOgkgMTsKKwkJdWludDY0X3QJaV9yc3ZkMgkJCSAgOgkgNjsKKwkJdWludDY0X3QJaV9paV94bl9yZXBfY3JlZF9vdmVyX3VuZGVyOgkgMTsKKwkJdWludDY0X3QJaV9paV94bl9yZXFfY3JlZF9vdmVyX3VuZGVyOgkgMTsKKwkJdWludDY0X3QJaV9yc3ZkMwkJCSAgOgkgNjsKKwkJdWludDY0X3QJaV9paV94bl9pbnZhbGlkX2NtZAkgIDoJIDE7CisJCXVpbnQ2NF90CWlfeG5faWlfaW52YWxpZF9jbWQJICA6CSAxOworCQl1aW50NjRfdAlpX3JzdmQ0CQkJICA6CTMwOworCX0gaWlfaXdlbF9mbGRfczsKK30gaWlfaXdlbF91X3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICBDb250cm9scyB0aGUgSUkgd3JhcHBlci4JCQkJCQkqIAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordHlwZWRlZiB1bmlvbiBpaV9pd2NfdSB7CisJdWludDY0X3QJaWlfaXdjX3JlZ3ZhbDsKKwlzdHJ1Y3QgIHsKKwkJdWludDY0X3QJaV9kbWFfYnl0ZV9zd2FwCQkgIDoJIDE7CisJCXVpbnQ2NF90CWlfcnN2ZAkJCSAgOgkgMzsKKwkJdWludDY0X3QJaV9jYW1fcmVhZF9saW5lc19yZXNldAkgIDoJIDE7CisJCXVpbnQ2NF90CWlfcnN2ZDEJCQkgIDoJIDM7CisJCXVpbnQ2NF90CWlfaWlfeG5fY3JlZF9vdmVyX3VuZGVyX2xvZzoJIDE7CisJCXVpbnQ2NF90CWlfcnN2ZDIJCQkgIDoJMTk7CisJCXVpbnQ2NF90CWlfeG5fcmVwX2lxX2RlcHRoCSAgOgkgNTsKKwkJdWludDY0X3QJaV9yc3ZkMwkJCSAgOgkgMzsKKwkJdWludDY0X3QJaV94bl9yZXFfaXFfZGVwdGgJICA6CSA1OworCQl1aW50NjRfdAlpX3JzdmQ0CQkJICA6CSAzOworCQl1aW50NjRfdAlpX2lpcV9kZXB0aAkJICA6CSA2OworCQl1aW50NjRfdAlpX3JzdmQ1CQkJICA6CTEyOworCQl1aW50NjRfdAlpX2ZvcmNlX3JlcF9jcmVkCSAgOgkgMTsKKwkJdWludDY0X3QJaV9mb3JjZV9yZXFfY3JlZAkgIDoJIDE7CisJfSBpaV9pd2NfZmxkX3M7Cit9IGlpX2l3Y191X3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICBTdGF0dXMgaW4gdGhlIElJIHdyYXBwZXIuCQkJCQkJKiAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgdW5pb24gaWlfaXdzX3UgeworCXVpbnQ2NF90CWlpX2l3c19yZWd2YWw7CisJc3RydWN0ICB7CisJCXVpbnQ2NF90CWlfeG5fcmVwX2lxX2NyZWRpdHMJICA6CSA1OworCQl1aW50NjRfdAlpX3JzdmQJCQkgIDoJIDM7CisJCXVpbnQ2NF90CWlfeG5fcmVxX2lxX2NyZWRpdHMJICA6CSA1OworCQl1aW50NjRfdAlpX3JzdmQxCQkJICA6CTUxOworCX0gaWlfaXdzX2ZsZF9zOworfSBpaV9pd3NfdV90OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgTWFza3MgZXJyb3JzIGluIHRoZSBJV0VMIHJlZ2lzdGVyLgkJCQkJKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordHlwZWRlZiB1bmlvbiBpaV9pd2VpbV91IHsKKwl1aW50NjRfdAlpaV9pd2VpbV9yZWd2YWw7CisJc3RydWN0ICB7CisJCXVpbnQ2NF90CWlfaW50cl90aW1lZF9vdXQJICA6CSAxOworCQl1aW50NjRfdAlpX3JzdmQJCQkgIDoJIDc7CisJCXVpbnQ2NF90CWlfY2FtX292ZXJmbG93CQkgIDoJIDE7CisJCXVpbnQ2NF90CWlfY2FtX3JlYWRfbWlzcwkJICA6CSAxOworCQl1aW50NjRfdAlpX3JzdmQxCQkJICA6CSAyOworCQl1aW50NjRfdAlpX2lvcV9yZXBfdW5kZXJmbG93CSAgOgkgMTsKKwkJdWludDY0X3QJaV9pb3FfcmVxX3VuZGVyZmxvdwkgIDoJIDE7CisJCXVpbnQ2NF90CWlfaW9xX3JlcF9vdmVyZmxvdwkgIDoJIDE7CisJCXVpbnQ2NF90CWlfaW9xX3JlcV9vdmVyZmxvdwkgIDoJIDE7CisJCXVpbnQ2NF90CWlfaWlxX3JlcF9vdmVyZmxvdwkgIDoJIDE7CisJCXVpbnQ2NF90CWlfaWlxX3JlcV9vdmVyZmxvdwkgIDoJIDE7CisJCXVpbnQ2NF90CWlfcnN2ZDIJCQkgIDoJIDY7CisJCXVpbnQ2NF90CWlfaWlfeG5fcmVwX2NyZWRfb3ZlcmZsb3cgOgkgMTsKKwkJdWludDY0X3QJaV9paV94bl9yZXFfY3JlZF9vdmVyZmxvdyA6CSAxOworCQl1aW50NjRfdAlpX3JzdmQzCQkJICA6CSA2OworCQl1aW50NjRfdAlpX2lpX3huX2ludmFsaWRfY21kCSAgOgkgMTsKKwkJdWludDY0X3QJaV94bl9paV9pbnZhbGlkX2NtZAkgIDoJIDE7CisJCXVpbnQ2NF90CWlfcnN2ZDQJCQkgIDoJMzA7CisJfSBpaV9pd2VpbV9mbGRfczsKK30gaWlfaXdlaW1fdV90OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICBBIHdyaXRlIHRvIHRoaXMgcmVnaXN0ZXIgY2F1c2VzIGEgcGFydGljdWxhciBmaWVsZCBpbiB0aGUgICAgICAgICAgICoKKyAqIGNvcnJlc3BvbmRpbmcgd2lkZ2V0J3MgUFJCIGVudHJ5IHRvIGJlIGFkanVzdGVkIHVwIG9yIGRvd24gYnkgMS4gICAgICoKKyAqIFRoaXMgY291bnRlciBzaG91bGQgYmUgdXNlZCB3aGVuIHJlY292ZXJpbmcgZnJvbSBlcnJvciBhbmQgcmVzZXQgICAgICoKKyAqIGNvbmRpdGlvbnMuIE5vdGUgdGhhdCBzb2Z0d2FyZSB3b3VsZCBiZSBjYXBhYmxlIG9mIGNhdXNpbmcgICAgICAgICAgICoKKyAqIGluYWR2ZXJ0ZW50IG92ZXJmbG93IG9yIHVuZGVyZmxvdyBvZiB0aGVzZSBjb3VudGVycy4gICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgdW5pb24gaWlfaXBjYV91IHsKKwl1aW50NjRfdAlpaV9pcGNhX3JlZ3ZhbDsKKwlzdHJ1Y3QgIHsKKwkJdWludDY0X3QJaV93aWQgICAgICAgICAgICAgICAgICAgICA6CSA0OworCQl1aW50NjRfdAlpX2FkanVzdAkJICA6CSAxOworCQl1aW50NjRfdAlpX3JzdmRfMQkJICA6CSAzOworCQl1aW50NjRfdAlpX2ZpZWxkCQkJICA6CSAyOworCQl1aW50NjRfdAlpX3JzdmQJCQkgIDoJNTQ7CisJfSBpaV9pcGNhX2ZsZF9zOworfSBpaV9pcGNhX3VfdDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgVGhlcmUgYXJlIDggaW5zdGFuY2VzIG9mIHRoaXMgcmVnaXN0ZXIuIFRoaXMgcmVnaXN0ZXIgY29udGFpbnMgICAgICAqCisgKiB0aGUgaW5mb3JtYXRpb24gdGhhdCB0aGUgSUkgaGFzIHRvIHJlbWVtYmVyIG9uY2UgaXQgaGFzIGxhdW5jaGVkIGEgICAqCisgKiBQSU8gUmVhZCBvcGVyYXRpb24uIFRoZSBjb250ZW50cyBhcmUgdXNlZCB0byBmb3JtIHRoZSBjb3JyZWN0ICAgICAgICAqCisgKiBSb3V0ZXIgTmV0d29yayBwYWNrZXQgYW5kIGRpcmVjdCB0aGUgQ3Jvc3N0YWxrIHJlcGx5IHRvIHRoZSAgICAgICAgICAqCisgKiBhcHByb3ByaWF0ZSBwcm9jZXNzb3IuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK3R5cGVkZWYgdW5pb24gaWlfaXBydGUwYV91IHsKKwl1aW50NjRfdAlpaV9pcHJ0ZTBhX3JlZ3ZhbDsKKwlzdHJ1Y3QgIHsKKwkJdWludDY0X3QJaV9yc3ZkXzEgICAgICAgICAgICAgICAgICA6CTU0OworCQl1aW50NjRfdAlpX3dpZGdldAkJICA6CSA0OworCQl1aW50NjRfdAlpX3RvX2NudAkJICA6CSA1OworCQl1aW50NjRfdCAgICAgICBpX3ZsZCAgICAgICAgICAgICAgICAgICAgIDogICAgICAxOworCX0gaWlfaXBydGUwYV9mbGRfczsKK30gaWlfaXBydGUwYV91X3Q7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogIFRoZXJlIGFyZSA4IGluc3RhbmNlcyBvZiB0aGlzIHJlZ2lzdGVyLiBUaGlzIHJlZ2lzdGVyIGNvbnRhaW5zICAgICAgKgorICogdGhlIGluZm9ybWF0aW9uIHRoYXQgdGhlIElJIGhhcyB0byByZW1lbWJlciBvbmNlIGl0IGhhcyBsYXVuY2hlZCBhICAgKgorICogUElPIFJlYWQgb3BlcmF0aW9uLiBUaGUgY29udGVudHMgYXJlIHVzZWQgdG8gZm9ybSB0aGUgY29ycmVjdCAgICAgICAgKgorICogUm91dGVyIE5ldHdvcmsgcGFja2V0IGFuZCBkaXJlY3QgdGhlIENyb3NzdGFsayByZXBseSB0byB0aGUgICAgICAgICAgKgorICogYXBwcm9wcmlhdGUgcHJvY2Vzc29yLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordHlwZWRlZiB1bmlvbiBpaV9pcHJ0ZTFhX3UgeworCXVpbnQ2NF90CWlpX2lwcnRlMWFfcmVndmFsOworCXN0cnVjdCAgeworCQl1aW50NjRfdAlpX3JzdmRfMSAgICAgICAgICAgICAgICAgIDoJNTQ7CisJCXVpbnQ2NF90CWlfd2lkZ2V0CQkgIDoJIDQ7CisJCXVpbnQ2NF90CWlfdG9fY250CQkgIDoJIDU7CisJCXVpbnQ2NF90ICAgICAgIGlfdmxkICAgICAgICAgICAgICAgICAgICAgOiAgICAgIDE7CisJfSBpaV9pcHJ0ZTFhX2ZsZF9zOworfSBpaV9pcHJ0ZTFhX3VfdDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgVGhlcmUgYXJlIDggaW5zdGFuY2VzIG9mIHRoaXMgcmVnaXN0ZXIuIFRoaXMgcmVnaXN0ZXIgY29udGFpbnMgICAgICAqCisgKiB0aGUgaW5mb3JtYXRpb24gdGhhdCB0aGUgSUkgaGFzIHRvIHJlbWVtYmVyIG9uY2UgaXQgaGFzIGxhdW5jaGVkIGEgICAqCisgKiBQSU8gUmVhZCBvcGVyYXRpb24uIFRoZSBjb250ZW50cyBhcmUgdXNlZCB0byBmb3JtIHRoZSBjb3JyZWN0ICAgICAgICAqCisgKiBSb3V0ZXIgTmV0d29yayBwYWNrZXQgYW5kIGRpcmVjdCB0aGUgQ3Jvc3N0YWxrIHJlcGx5IHRvIHRoZSAgICAgICAgICAqCisgKiBhcHByb3ByaWF0ZSBwcm9jZXNzb3IuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIHVuaW9uIGlpX2lwcnRlMmFfdSB7CisJdWludDY0X3QJaWlfaXBydGUyYV9yZWd2YWw7CisJc3RydWN0ICB7CisJCXVpbnQ2NF90CWlfcnN2ZF8xICAgICAgICAgICAgICAgICAgOgk1NDsKKwkJdWludDY0X3QJaV93aWRnZXQJCSAgOgkgNDsKKwkJdWludDY0X3QJaV90b19jbnQJCSAgOgkgNTsKKwkJdWludDY0X3QgICAgICAgaV92bGQgICAgICAgICAgICAgICAgICAgICA6ICAgICAgMTsKKwl9IGlpX2lwcnRlMmFfZmxkX3M7Cit9IGlpX2lwcnRlMmFfdV90OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICBUaGVyZSBhcmUgOCBpbnN0YW5jZXMgb2YgdGhpcyByZWdpc3Rlci4gVGhpcyByZWdpc3RlciBjb250YWlucyAgICAgICoKKyAqIHRoZSBpbmZvcm1hdGlvbiB0aGF0IHRoZSBJSSBoYXMgdG8gcmVtZW1iZXIgb25jZSBpdCBoYXMgbGF1bmNoZWQgYSAgICoKKyAqIFBJTyBSZWFkIG9wZXJhdGlvbi4gVGhlIGNvbnRlbnRzIGFyZSB1c2VkIHRvIGZvcm0gdGhlIGNvcnJlY3QgICAgICAgICoKKyAqIFJvdXRlciBOZXR3b3JrIHBhY2tldCBhbmQgZGlyZWN0IHRoZSBDcm9zc3RhbGsgcmVwbHkgdG8gdGhlICAgICAgICAgICoKKyAqIGFwcHJvcHJpYXRlIHByb2Nlc3Nvci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgdW5pb24gaWlfaXBydGUzYV91IHsKKwl1aW50NjRfdAlpaV9pcHJ0ZTNhX3JlZ3ZhbDsKKwlzdHJ1Y3QgIHsKKwkJdWludDY0X3QJaV9yc3ZkXzEgICAgICAgICAgICAgICAgICA6CTU0OworCQl1aW50NjRfdAlpX3dpZGdldAkJICA6CSA0OworCQl1aW50NjRfdAlpX3RvX2NudAkJICA6CSA1OworCQl1aW50NjRfdAlpX3ZsZAkJCSAgOgkgMTsKKwl9IGlpX2lwcnRlM2FfZmxkX3M7Cit9IGlpX2lwcnRlM2FfdV90OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICBUaGVyZSBhcmUgOCBpbnN0YW5jZXMgb2YgdGhpcyByZWdpc3Rlci4gVGhpcyByZWdpc3RlciBjb250YWlucyAgICAgICoKKyAqIHRoZSBpbmZvcm1hdGlvbiB0aGF0IHRoZSBJSSBoYXMgdG8gcmVtZW1iZXIgb25jZSBpdCBoYXMgbGF1bmNoZWQgYSAgICoKKyAqIFBJTyBSZWFkIG9wZXJhdGlvbi4gVGhlIGNvbnRlbnRzIGFyZSB1c2VkIHRvIGZvcm0gdGhlIGNvcnJlY3QgICAgICAgICoKKyAqIFJvdXRlciBOZXR3b3JrIHBhY2tldCBhbmQgZGlyZWN0IHRoZSBDcm9zc3RhbGsgcmVwbHkgdG8gdGhlICAgICAgICAgICoKKyAqIGFwcHJvcHJpYXRlIHByb2Nlc3Nvci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgdW5pb24gaWlfaXBydGU0YV91IHsKKwl1aW50NjRfdAlpaV9pcHJ0ZTRhX3JlZ3ZhbDsKKwlzdHJ1Y3QJeworCQl1aW50NjRfdAlpX3JzdmRfMQkJICA6CTU0OworCQl1aW50NjRfdAlpX3dpZGdldAkJICA6CSA0OworCQl1aW50NjRfdAlpX3RvX2NudAkJICA6CSA1OworCQl1aW50NjRfdAlpX3ZsZAkJCSAgOgkgMTsKKwl9IGlpX2lwcnRlNGFfZmxkX3M7Cit9IGlpX2lwcnRlNGFfdV90OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICBUaGVyZSBhcmUgOCBpbnN0YW5jZXMgb2YgdGhpcyByZWdpc3Rlci4gVGhpcyByZWdpc3RlciBjb250YWlucyAgICAgICoKKyAqIHRoZSBpbmZvcm1hdGlvbiB0aGF0IHRoZSBJSSBoYXMgdG8gcmVtZW1iZXIgb25jZSBpdCBoYXMgbGF1bmNoZWQgYSAgICoKKyAqIFBJTyBSZWFkIG9wZXJhdGlvbi4gVGhlIGNvbnRlbnRzIGFyZSB1c2VkIHRvIGZvcm0gdGhlIGNvcnJlY3QgICAgICAgICoKKyAqIFJvdXRlciBOZXR3b3JrIHBhY2tldCBhbmQgZGlyZWN0IHRoZSBDcm9zc3RhbGsgcmVwbHkgdG8gdGhlICAgICAgICAgICoKKyAqIGFwcHJvcHJpYXRlIHByb2Nlc3Nvci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgdW5pb24gaWlfaXBydGU1YV91IHsKKwl1aW50NjRfdAlpaV9pcHJ0ZTVhX3JlZ3ZhbDsKKwlzdHJ1Y3QJeworCQl1aW50NjRfdAlpX3JzdmRfMQkJICA6CTU0OworCQl1aW50NjRfdAlpX3dpZGdldAkJICA6CSA0OworCQl1aW50NjRfdAlpX3RvX2NudAkJICA6CSA1OworCQl1aW50NjRfdAlpX3ZsZAkJCSAgOgkgMTsKKwl9IGlpX2lwcnRlNWFfZmxkX3M7Cit9IGlpX2lwcnRlNWFfdV90OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICBUaGVyZSBhcmUgOCBpbnN0YW5jZXMgb2YgdGhpcyByZWdpc3Rlci4gVGhpcyByZWdpc3RlciBjb250YWlucyAgICAgICoKKyAqIHRoZSBpbmZvcm1hdGlvbiB0aGF0IHRoZSBJSSBoYXMgdG8gcmVtZW1iZXIgb25jZSBpdCBoYXMgbGF1bmNoZWQgYSAgICoKKyAqIFBJTyBSZWFkIG9wZXJhdGlvbi4gVGhlIGNvbnRlbnRzIGFyZSB1c2VkIHRvIGZvcm0gdGhlIGNvcnJlY3QgICAgICAgICoKKyAqIFJvdXRlciBOZXR3b3JrIHBhY2tldCBhbmQgZGlyZWN0IHRoZSBDcm9zc3RhbGsgcmVwbHkgdG8gdGhlICAgICAgICAgICoKKyAqIGFwcHJvcHJpYXRlIHByb2Nlc3Nvci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgdW5pb24gaWlfaXBydGU2YV91IHsKKwl1aW50NjRfdAlpaV9pcHJ0ZTZhX3JlZ3ZhbDsKKwlzdHJ1Y3QJeworCQl1aW50NjRfdAlpX3JzdmRfMQkJICA6CTU0OworCQl1aW50NjRfdAlpX3dpZGdldAkJICA6CSA0OworCQl1aW50NjRfdAlpX3RvX2NudAkJICA6CSA1OworCQl1aW50NjRfdAlpX3ZsZAkJCSAgOgkgMTsKKwl9IGlpX2lwcnRlNmFfZmxkX3M7Cit9IGlpX2lwcnRlNmFfdV90OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICBUaGVyZSBhcmUgOCBpbnN0YW5jZXMgb2YgdGhpcyByZWdpc3Rlci4gVGhpcyByZWdpc3RlciBjb250YWlucyAgICAgICoKKyAqIHRoZSBpbmZvcm1hdGlvbiB0aGF0IHRoZSBJSSBoYXMgdG8gcmVtZW1iZXIgb25jZSBpdCBoYXMgbGF1bmNoZWQgYSAgICoKKyAqIFBJTyBSZWFkIG9wZXJhdGlvbi4gVGhlIGNvbnRlbnRzIGFyZSB1c2VkIHRvIGZvcm0gdGhlIGNvcnJlY3QgICAgICAgICoKKyAqIFJvdXRlciBOZXR3b3JrIHBhY2tldCBhbmQgZGlyZWN0IHRoZSBDcm9zc3RhbGsgcmVwbHkgdG8gdGhlICAgICAgICAgICoKKyAqIGFwcHJvcHJpYXRlIHByb2Nlc3Nvci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgdW5pb24gaWlfaXBydGU3YV91IHsKKyAgICAgICAgdWludDY0X3QgICAgICAgaWlfaXBydGU3YV9yZWd2YWw7CisgICAgICAgIHN0cnVjdCAgeworICAgICAgICAgICAgICAgIHVpbnQ2NF90ICAgICAgIGlfcnN2ZF8xICAgICAgICAgICAgICAgICAgOiAgICAgNTQ7CisgICAgICAgICAgICAgICAgdWludDY0X3QgICAgICAgaV93aWRnZXQgICAgICAgICAgICAgICAgICA6ICAgICAgNDsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCAgICAgICBpX3RvX2NudCAgICAgICAgICAgICAgICAgIDogICAgICA1OworICAgICAgICAgICAgICAgIHVpbnQ2NF90ICAgICAgIGlfdmxkICAgICAgICAgICAgICAgICAgICAgOiAgICAgIDE7CisgICAgICAgIH0gaWlfaXBydGVhN19mbGRfczsKK30gaWlfaXBydGU3YV91X3Q7CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgVGhlcmUgYXJlIDggaW5zdGFuY2VzIG9mIHRoaXMgcmVnaXN0ZXIuIFRoaXMgcmVnaXN0ZXIgY29udGFpbnMgICAgICAqCisgKiB0aGUgaW5mb3JtYXRpb24gdGhhdCB0aGUgSUkgaGFzIHRvIHJlbWVtYmVyIG9uY2UgaXQgaGFzIGxhdW5jaGVkIGEgICAqCisgKiBQSU8gUmVhZCBvcGVyYXRpb24uIFRoZSBjb250ZW50cyBhcmUgdXNlZCB0byBmb3JtIHRoZSBjb3JyZWN0ICAgICAgICAqCisgKiBSb3V0ZXIgTmV0d29yayBwYWNrZXQgYW5kIGRpcmVjdCB0aGUgQ3Jvc3N0YWxrIHJlcGx5IHRvIHRoZSAgICAgICAgICAqCisgKiBhcHByb3ByaWF0ZSBwcm9jZXNzb3IuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK3R5cGVkZWYgdW5pb24gaWlfaXBydGUwYl91IHsKKwl1aW50NjRfdAlpaV9pcHJ0ZTBiX3JlZ3ZhbDsKKwlzdHJ1Y3QgIHsKKwkJdWludDY0X3QJaV9yc3ZkXzEgICAgICAgICAgICAgICAgICA6CSAzOworCQl1aW50NjRfdAlpX2FkZHJlc3MJCSAgOgk0NzsKKwkJdWludDY0X3QJaV9pbml0CQkJICA6CSAzOworCQl1aW50NjRfdCAgICAgICBpX3NvdXJjZSAgICAgICAgICAgICAgICAgIDogICAgIDExOworCX0gaWlfaXBydGUwYl9mbGRfczsKK30gaWlfaXBydGUwYl91X3Q7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogIFRoZXJlIGFyZSA4IGluc3RhbmNlcyBvZiB0aGlzIHJlZ2lzdGVyLiBUaGlzIHJlZ2lzdGVyIGNvbnRhaW5zICAgICAgKgorICogdGhlIGluZm9ybWF0aW9uIHRoYXQgdGhlIElJIGhhcyB0byByZW1lbWJlciBvbmNlIGl0IGhhcyBsYXVuY2hlZCBhICAgKgorICogUElPIFJlYWQgb3BlcmF0aW9uLiBUaGUgY29udGVudHMgYXJlIHVzZWQgdG8gZm9ybSB0aGUgY29ycmVjdCAgICAgICAgKgorICogUm91dGVyIE5ldHdvcmsgcGFja2V0IGFuZCBkaXJlY3QgdGhlIENyb3NzdGFsayByZXBseSB0byB0aGUgICAgICAgICAgKgorICogYXBwcm9wcmlhdGUgcHJvY2Vzc29yLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordHlwZWRlZiB1bmlvbiBpaV9pcHJ0ZTFiX3UgeworCXVpbnQ2NF90CWlpX2lwcnRlMWJfcmVndmFsOworCXN0cnVjdCAgeworCQl1aW50NjRfdAlpX3JzdmRfMSAgICAgICAgICAgICAgICAgIDoJIDM7CisJCXVpbnQ2NF90CWlfYWRkcmVzcwkJICA6CTQ3OworCQl1aW50NjRfdAlpX2luaXQJCQkgIDoJIDM7CisJCXVpbnQ2NF90ICAgICAgIGlfc291cmNlICAgICAgICAgICAgICAgICAgOiAgICAgMTE7CisJfSBpaV9pcHJ0ZTFiX2ZsZF9zOworfSBpaV9pcHJ0ZTFiX3VfdDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgVGhlcmUgYXJlIDggaW5zdGFuY2VzIG9mIHRoaXMgcmVnaXN0ZXIuIFRoaXMgcmVnaXN0ZXIgY29udGFpbnMgICAgICAqCisgKiB0aGUgaW5mb3JtYXRpb24gdGhhdCB0aGUgSUkgaGFzIHRvIHJlbWVtYmVyIG9uY2UgaXQgaGFzIGxhdW5jaGVkIGEgICAqCisgKiBQSU8gUmVhZCBvcGVyYXRpb24uIFRoZSBjb250ZW50cyBhcmUgdXNlZCB0byBmb3JtIHRoZSBjb3JyZWN0ICAgICAgICAqCisgKiBSb3V0ZXIgTmV0d29yayBwYWNrZXQgYW5kIGRpcmVjdCB0aGUgQ3Jvc3N0YWxrIHJlcGx5IHRvIHRoZSAgICAgICAgICAqCisgKiBhcHByb3ByaWF0ZSBwcm9jZXNzb3IuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIHVuaW9uIGlpX2lwcnRlMmJfdSB7CisJdWludDY0X3QJaWlfaXBydGUyYl9yZWd2YWw7CisJc3RydWN0ICB7CisJCXVpbnQ2NF90CWlfcnN2ZF8xICAgICAgICAgICAgICAgICAgOgkgMzsKKwkJdWludDY0X3QJaV9hZGRyZXNzCQkgIDoJNDc7CisJCXVpbnQ2NF90CWlfaW5pdAkJCSAgOgkgMzsKKwkJdWludDY0X3QgICAgICAgaV9zb3VyY2UgICAgICAgICAgICAgICAgICA6ICAgICAxMTsKKwl9IGlpX2lwcnRlMmJfZmxkX3M7Cit9IGlpX2lwcnRlMmJfdV90OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICBUaGVyZSBhcmUgOCBpbnN0YW5jZXMgb2YgdGhpcyByZWdpc3Rlci4gVGhpcyByZWdpc3RlciBjb250YWlucyAgICAgICoKKyAqIHRoZSBpbmZvcm1hdGlvbiB0aGF0IHRoZSBJSSBoYXMgdG8gcmVtZW1iZXIgb25jZSBpdCBoYXMgbGF1bmNoZWQgYSAgICoKKyAqIFBJTyBSZWFkIG9wZXJhdGlvbi4gVGhlIGNvbnRlbnRzIGFyZSB1c2VkIHRvIGZvcm0gdGhlIGNvcnJlY3QgICAgICAgICoKKyAqIFJvdXRlciBOZXR3b3JrIHBhY2tldCBhbmQgZGlyZWN0IHRoZSBDcm9zc3RhbGsgcmVwbHkgdG8gdGhlICAgICAgICAgICoKKyAqIGFwcHJvcHJpYXRlIHByb2Nlc3Nvci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgdW5pb24gaWlfaXBydGUzYl91IHsKKwl1aW50NjRfdAlpaV9pcHJ0ZTNiX3JlZ3ZhbDsKKwlzdHJ1Y3QgIHsKKwkJdWludDY0X3QJaV9yc3ZkXzEgICAgICAgICAgICAgICAgICA6CSAzOworCQl1aW50NjRfdAlpX2FkZHJlc3MJCSAgOgk0NzsKKwkJdWludDY0X3QJaV9pbml0CQkJICA6CSAzOworCQl1aW50NjRfdCAgICAgICBpX3NvdXJjZSAgICAgICAgICAgICAgICAgIDogICAgIDExOworCX0gaWlfaXBydGUzYl9mbGRfczsKK30gaWlfaXBydGUzYl91X3Q7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogIFRoZXJlIGFyZSA4IGluc3RhbmNlcyBvZiB0aGlzIHJlZ2lzdGVyLiBUaGlzIHJlZ2lzdGVyIGNvbnRhaW5zICAgICAgKgorICogdGhlIGluZm9ybWF0aW9uIHRoYXQgdGhlIElJIGhhcyB0byByZW1lbWJlciBvbmNlIGl0IGhhcyBsYXVuY2hlZCBhICAgKgorICogUElPIFJlYWQgb3BlcmF0aW9uLiBUaGUgY29udGVudHMgYXJlIHVzZWQgdG8gZm9ybSB0aGUgY29ycmVjdCAgICAgICAgKgorICogUm91dGVyIE5ldHdvcmsgcGFja2V0IGFuZCBkaXJlY3QgdGhlIENyb3NzdGFsayByZXBseSB0byB0aGUgICAgICAgICAgKgorICogYXBwcm9wcmlhdGUgcHJvY2Vzc29yLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordHlwZWRlZiB1bmlvbiBpaV9pcHJ0ZTRiX3UgeworCXVpbnQ2NF90CWlpX2lwcnRlNGJfcmVndmFsOworCXN0cnVjdAl7CisJCXVpbnQ2NF90CWlfcnN2ZF8xICAgICAgICAgICAgICAgICAgOgkgMzsKKwkJdWludDY0X3QJaV9hZGRyZXNzCQkgIDoJNDc7CisJCXVpbnQ2NF90CWlfaW5pdAkJCSAgOgkgMzsKKwkJdWludDY0X3QgICAgICAgaV9zb3VyY2UgICAgICAgICAgICAgICAgICA6ICAgICAxMTsKKwl9IGlpX2lwcnRlNGJfZmxkX3M7Cit9IGlpX2lwcnRlNGJfdV90OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICBUaGVyZSBhcmUgOCBpbnN0YW5jZXMgb2YgdGhpcyByZWdpc3Rlci4gVGhpcyByZWdpc3RlciBjb250YWlucyAgICAgICoKKyAqIHRoZSBpbmZvcm1hdGlvbiB0aGF0IHRoZSBJSSBoYXMgdG8gcmVtZW1iZXIgb25jZSBpdCBoYXMgbGF1bmNoZWQgYSAgICoKKyAqIFBJTyBSZWFkIG9wZXJhdGlvbi4gVGhlIGNvbnRlbnRzIGFyZSB1c2VkIHRvIGZvcm0gdGhlIGNvcnJlY3QgICAgICAgICoKKyAqIFJvdXRlciBOZXR3b3JrIHBhY2tldCBhbmQgZGlyZWN0IHRoZSBDcm9zc3RhbGsgcmVwbHkgdG8gdGhlICAgICAgICAgICoKKyAqIGFwcHJvcHJpYXRlIHByb2Nlc3Nvci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgdW5pb24gaWlfaXBydGU1Yl91IHsKKwl1aW50NjRfdAlpaV9pcHJ0ZTViX3JlZ3ZhbDsKKwlzdHJ1Y3QJeworCQl1aW50NjRfdAlpX3JzdmRfMSAgICAgICAgICAgICAgICAgIDoJIDM7CisJCXVpbnQ2NF90CWlfYWRkcmVzcwkJICA6CTQ3OworCQl1aW50NjRfdAlpX2luaXQJCQkgIDoJIDM7CisJCXVpbnQ2NF90ICAgICAgIGlfc291cmNlICAgICAgICAgICAgICAgICAgOiAgICAgMTE7CisJfSBpaV9pcHJ0ZTViX2ZsZF9zOworfSBpaV9pcHJ0ZTViX3VfdDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgVGhlcmUgYXJlIDggaW5zdGFuY2VzIG9mIHRoaXMgcmVnaXN0ZXIuIFRoaXMgcmVnaXN0ZXIgY29udGFpbnMgICAgICAqCisgKiB0aGUgaW5mb3JtYXRpb24gdGhhdCB0aGUgSUkgaGFzIHRvIHJlbWVtYmVyIG9uY2UgaXQgaGFzIGxhdW5jaGVkIGEgICAqCisgKiBQSU8gUmVhZCBvcGVyYXRpb24uIFRoZSBjb250ZW50cyBhcmUgdXNlZCB0byBmb3JtIHRoZSBjb3JyZWN0ICAgICAgICAqCisgKiBSb3V0ZXIgTmV0d29yayBwYWNrZXQgYW5kIGRpcmVjdCB0aGUgQ3Jvc3N0YWxrIHJlcGx5IHRvIHRoZSAgICAgICAgICAqCisgKiBhcHByb3ByaWF0ZSBwcm9jZXNzb3IuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIHVuaW9uIGlpX2lwcnRlNmJfdSB7CisJdWludDY0X3QJaWlfaXBydGU2Yl9yZWd2YWw7CisJc3RydWN0CXsKKwkJdWludDY0X3QJaV9yc3ZkXzEgICAgICAgICAgICAgICAgICA6CSAzOworCQl1aW50NjRfdAlpX2FkZHJlc3MJCSAgOgk0NzsKKwkJdWludDY0X3QJaV9pbml0CQkJICA6CSAzOworCQl1aW50NjRfdCAgICAgICBpX3NvdXJjZSAgICAgICAgICAgICAgICAgIDogICAgIDExOworCisJfSBpaV9pcHJ0ZTZiX2ZsZF9zOworfSBpaV9pcHJ0ZTZiX3VfdDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgVGhlcmUgYXJlIDggaW5zdGFuY2VzIG9mIHRoaXMgcmVnaXN0ZXIuIFRoaXMgcmVnaXN0ZXIgY29udGFpbnMgICAgICAqCisgKiB0aGUgaW5mb3JtYXRpb24gdGhhdCB0aGUgSUkgaGFzIHRvIHJlbWVtYmVyIG9uY2UgaXQgaGFzIGxhdW5jaGVkIGEgICAqCisgKiBQSU8gUmVhZCBvcGVyYXRpb24uIFRoZSBjb250ZW50cyBhcmUgdXNlZCB0byBmb3JtIHRoZSBjb3JyZWN0ICAgICAgICAqCisgKiBSb3V0ZXIgTmV0d29yayBwYWNrZXQgYW5kIGRpcmVjdCB0aGUgQ3Jvc3N0YWxrIHJlcGx5IHRvIHRoZSAgICAgICAgICAqCisgKiBhcHByb3ByaWF0ZSBwcm9jZXNzb3IuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIHVuaW9uIGlpX2lwcnRlN2JfdSB7CisgICAgICAgIHVpbnQ2NF90ICAgICAgIGlpX2lwcnRlN2JfcmVndmFsOworICAgICAgICBzdHJ1Y3QgIHsKKwkJdWludDY0X3QJaV9yc3ZkXzEgICAgICAgICAgICAgICAgICA6CSAzOworCQl1aW50NjRfdAlpX2FkZHJlc3MJCSAgOgk0NzsKKwkJdWludDY0X3QJaV9pbml0CQkJICA6CSAzOworCQl1aW50NjRfdCAgICAgICBpX3NvdXJjZSAgICAgICAgICAgICAgICAgIDogICAgIDExOworICAgICAgICB9IGlpX2lwcnRlN2JfZmxkX3M7Cit9IGlpX2lwcnRlN2JfdV90OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIERlc2NyaXB0aW9uOiAgU0h1YiBJSSBjb250YWlucyBhIGZlYXR1cmUgd2hpY2ggZGlkIG5vdCBleGlzdCBpbiAgICAgICoKKyAqIHRoZSBIdWIgd2hpY2ggYXV0b21hdGljYWxseSBjbGVhbnMgdXAgYWZ0ZXIgYSBSZWFkIFJlc3BvbnNlICAgICAgICAgICoKKyAqIHRpbWVvdXQsIGluY2x1ZGluZyBkZWFsbG9jYXRpb24gb2YgdGhlIElQUlRFIGFuZCByZWNvdmVyeSBvZiBJQnVmICAgICoKKyAqIHNwYWNlLiBUaGUgaW5jbHVzaW9uIG9mIHRoaXMgcmVnaXN0ZXIgaW4gU0h1YiBpcyBmb3IgYmFja3dhcmQgICAgICAgICoKKyAqIGNvbXBhdGliaWxpdHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEEgd3JpdGUgdG8gdGhpcyByZWdpc3RlciBjYXVzZXMgYW4gZW50cnkgZnJvbSB0aGUgdGFibGUgb2YgICAgICAgICAgICoKKyAqIG91dHN0YW5kaW5nIFBJTyBSZWFkIFJlcXVlc3RzIHRvIGJlIGZyZWVkIGFuZCByZXR1cm5lZCB0byB0aGUgICAgICAgICoKKyAqIHN0YWNrIG9mIGZyZWUgZW50cmllcy4gVGhpcyByZWdpc3RlciBpcyB1c2VkIGluIGhhbmRsaW5nIHRoZSAgICAgICAgICoKKyAqIHRpbWVvdXQgZXJyb3JzIHRoYXQgcmVzdWx0IGluIGEgUElPIFJlcGx5IG5ldmVyIHJldHVybmluZyBmcm9tICAgICAgICoKKyAqIENyb3NzdGFsay4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIE5vdGUgdGhhdCB0aGlzIHJlZ2lzdGVyIGRvZXMgbm90IGFmZmVjdCB0aGUgY29udGVudHMgb2YgdGhlIElQUlRFICAgICoKKyAqIHJlZ2lzdGVycy4gVGhlIFZhbGlkIGJpdHMgaW4gdGhvc2UgcmVnaXN0ZXJzIGhhdmUgdG8gYmUgICAgICAgICAgICAgICoKKyAqIHNwZWNpZmljYWxseSB0dXJuZWQgb2ZmIGJ5IHNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgdW5pb24gaWlfaXBkcl91IHsKKwl1aW50NjRfdAlpaV9pcGRyX3JlZ3ZhbDsKKwlzdHJ1Y3QgIHsKKwkJdWludDY0X3QJaV90ZSAgICAgICAgICAgICAgICAgICAgICA6CSAzOworCQl1aW50NjRfdAlpX3JzdmRfMQkJICA6CSAxOworCQl1aW50NjRfdAlpX3BuZAkJCSAgOgkgMTsKKwkJdWludDY0X3QJaV9pbml0X3JwY250CQkgIDoJIDE7CisJCXVpbnQ2NF90CWlfcnN2ZAkJCSAgOgk1ODsKKwl9IGlpX2lwZHJfZmxkX3M7Cit9IGlpX2lwZHJfdV90OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICBBIHdyaXRlIHRvIHRoaXMgcmVnaXN0ZXIgY2F1c2VzIGEgQ1JCIGVudHJ5IHRvIGJlIHJldHVybmVkIHRvIHRoZSAgICoKKyAqIHF1ZXVlIG9mIGZyZWUgQ1JCcy4gVGhlIGVudHJ5IHNob3VsZCBoYXZlIHByZXZpb3VzbHkgYmVlbiBjbGVhcmVkICAgICoKKyAqIChtYXJrIGJpdCkgdmlhIGJhY2tkb29yIGFjY2VzcyB0byB0aGUgcGVydGluZW50IENSQiBlbnRyeS4gVGhpcyAgICAgICoKKyAqIHJlZ2lzdGVyIGlzIHVzZWQgaW4gdGhlIGxhc3Qgc3RlcCBvZiBoYW5kbGluZyB0aGUgZXJyb3JzIHRoYXQgYXJlICAgICoKKyAqIGNhcHR1cmVkIGFuZCBtYXJrZWQgaW4gQ1JCIGVudHJpZXMuICBCcmllZmx5OiAxKSBmaXJzdCBlcnJvciBmb3IgICAgICoKKyAqIERNQSB3cml0ZSBmcm9tIGEgcGFydGljdWxhciBkZXZpY2UsIGFuZCBmaXJzdCBlcnJvciBmb3IgYSAgICAgICAgICAgICoKKyAqIHBhcnRpY3VsYXIgQlRFIHN0cmVhbSwgbGVhZCB0byBhIG1hcmtlZCBDUkIgZW50cnksIGFuZCBwcm9jZXNzb3IgICAgICoKKyAqIGludGVycnVwdCwgMikgc29mdHdhcmUgcmVhZHMgdGhlIGVycm9yIGluZm9ybWF0aW9uIGNhcHR1cmVkIGluIHRoZSAgICoKKyAqIENSQiBlbnRyeSwgYW5kIHByZXN1bWFibHkgdGFrZXMgc29tZSBjb3JyZWN0aXZlIGFjdGlvbiwgMykgICAgICAgICAgICoKKyAqIHNvZnR3YXJlIGNsZWFycyB0aGUgbWFyayBiaXQsIGFuZCBmaW5hbGx5IDQpIHNvZnR3YXJlIHdyaXRlcyB0byAgICAgICoKKyAqIHRoZSBJQ0RSIHJlZ2lzdGVyIHRvIHJldHVybiB0aGUgQ1JCIGVudHJ5IHRvIHRoZSBsaXN0IG9mIGZyZWUgQ1JCICAgICoKKyAqIGVudHJpZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgdW5pb24gaWlfaWNkcl91IHsKKwl1aW50NjRfdAlpaV9pY2RyX3JlZ3ZhbDsKKwlzdHJ1Y3QgIHsKKwkJdWludDY0X3QJaV9jcmJfbnVtICAgICAgICAgICAgICAgICA6CSA0OworCQl1aW50NjRfdAlpX3BuZAkJCSAgOgkgMTsKKwkJdWludDY0X3QgICAgICAgaV9yc3ZkICAgICAgICAgICAgICAgICAgICA6ICAgICA1OTsKKwl9IGlpX2ljZHJfZmxkX3M7Cit9IGlpX2ljZHJfdV90OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICBUaGlzIHJlZ2lzdGVyIHByb3ZpZGVzIGRlYnVnIGFjY2VzcyB0byB0d28gRklGT3MgaW5zaWRlIG9mIElJLiAgICAgICoKKyAqIEJvdGggSU9RX01BWCogZmllbGRzIG9mIHRoaXMgcmVnaXN0ZXIgY29udGFpbiB0aGUgaW5zdGFudGFuZW91cyAgICAgICoKKyAqIGRlcHRoIChpbiB1bml0cyBvZiB0aGUgbnVtYmVyIG9mIGF2YWlsYWJsZSBlbnRyaWVzKSBvZiB0aGUgICAgICAgICAgICoKKyAqIGFzc29jaWF0ZWQgSU9RIEZJRk8uICBBIHJlYWQgb2YgdGhpcyByZWdpc3RlciB3aWxsIHJldHVybiB0aGUgICAgICAgICoKKyAqIG51bWJlciBvZiBmcmVlIGVudHJpZXMgb24gZWFjaCBGSUZPIGF0IHRoZSB0aW1lIG9mIHRoZSByZWFkLiAgU28gICAgICoKKyAqIHdoZW4gYSBGSUZPIGlzIGlkbGUsIHRoZSBhc3NvY2lhdGVkIGZpZWxkIGNvbnRhaW5zIHRoZSBtYXhpbXVtICAgICAgICoKKyAqIGRlcHRoIG9mIHRoZSBGSUZPLiAgVGhpcyByZWdpc3RlciBpcyB3cml0YWJsZSBmb3IgZGVidWcgcmVhc29ucyAgICAgICoKKyAqIGFuZCBpcyBpbnRlbmRlZCB0byBiZSB3cml0dGVuIHdpdGggdGhlIG1heGltdW0gZGVzaXJlZCBGSUZPIGRlcHRoICAgICoKKyAqIHdoaWxlIHRoZSBGSUZPIGlzIGlkbGUuIFNvZnR3YXJlIG11c3QgYXNzdXJlIHRoYXQgSUkgaXMgaWRsZSB3aGVuICAgICoKKyAqIHRoaXMgcmVnaXN0ZXIgaXMgd3JpdHRlbi4gSWYgdGhlcmUgYXJlIGFueSBhY3RpdmUgZW50cmllcyBpbiBhbnkgICAgICoKKyAqIG9mIHRoZXNlIEZJRk9zIHdoZW4gdGhpcyByZWdpc3RlciBpcyB3cml0dGVuLCB0aGUgcmVzdWx0cyBhcmUgICAgICAgICoKKyAqIHVuZGVmaW5lZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgdW5pb24gaWlfaWZkcl91IHsKKwl1aW50NjRfdAlpaV9pZmRyX3JlZ3ZhbDsKKwlzdHJ1Y3QgIHsKKwkJdWludDY0X3QJaV9pb3FfbWF4X3JxICAgICAgICAgICAgICA6CSA3OworCQl1aW50NjRfdAlpX3NldF9pb3FfcnEJCSAgOgkgMTsKKwkJdWludDY0X3QJaV9pb3FfbWF4X3JwCQkgIDoJIDc7CisJCXVpbnQ2NF90CWlfc2V0X2lvcV9ycAkJICA6CSAxOworCQl1aW50NjRfdAlpX3JzdmQJCQkgIDoJNDg7CisJfSBpaV9pZmRyX2ZsZF9zOworfSBpaV9pZmRyX3VfdDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgVGhpcyByZWdpc3RlciBhbGxvd3MgdGhlIElJIHRvIGJlY29tZSBzbHVnZ2lzaCBpbiByZW1vdmluZyAgICAgICAgICAqCisgKiBtZXNzYWdlcyBmcm9tIGl0cyBpbmJvdW5kIHF1ZXVlIChJSVEpLiBUaGlzIHdpbGwgY2F1c2UgbWVzc2FnZXMgdG8gICAqCisgKiBiYWNrIHVwIGluIGVpdGhlciB2aXJ0dWFsIGNoYW5uZWwuIERpc2FibGluZyB0aGUgIm1vbGFzc2VzIiBtb2RlICAgICAqCisgKiBzdWJzZXF1ZW50bHkgYWxsb3dzIHRoZSBJSSB0byBiZSB0ZXN0ZWQgdW5kZXIgc3RyZXNzLiBJbiB0aGUgICAgICAgICAqCisgKiBzbHVnZ2lzaCAoIk1vbGFzc2VzIikgbW9kZSwgdGhlIGxvY2FsaXplZCBlZmZlY3RzIG9mIGNvbmdlc3Rpb24gICAgICAqCisgKiBjYW4gYmUgb2JzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIHVuaW9uIGlpX2lpYXBfdSB7CisgICAgICAgIHVpbnQ2NF90ICAgICAgIGlpX2lpYXBfcmVndmFsOworICAgICAgICBzdHJ1Y3QgIHsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCAgICAgICBpX3JxX21scyAgICAgICAgICAgICAgICAgIDogICAgICA2OworCQl1aW50NjRfdAlpX3JzdmRfMQkJICA6CSAyOworCQl1aW50NjRfdAlpX3JwX21scwkJICA6CSA2OworCQl1aW50NjRfdCAgICAgICBpX3JzdmQgICAgICAgICAgICAgICAgICAgIDogICAgIDUwOworICAgICAgICB9IGlpX2lpYXBfZmxkX3M7Cit9IGlpX2lpYXBfdV90OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICBUaGlzIHJlZ2lzdGVyIGFsbG93cyBzZXZlcmFsIHBhcmFtZXRlcnMgb2YgQ1JCIG9wZXJhdGlvbiB0byBiZSAgICAgICoKKyAqIHNldC4gTm90ZSB0aGF0IHdyaXRpbmcgdG8gdGhpcyByZWdpc3RlciBjYW4gaGF2ZSBjYXRhc3Ryb3BoaWMgc2lkZSAgICoKKyAqIGVmZmVjdHMsIGlmIHRoZSBDUkIgaXMgbm90IHF1aWVzY2VudCwgaS5lLiBpZiB0aGUgQ1JCIGlzICAgICAgICAgICAgICoKKyAqIHByb2Nlc3NpbmcgcHJvdG9jb2wgbWVzc2FnZXMgd2hlbiB0aGUgd3JpdGUgb2NjdXJzLiAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgdW5pb24gaWlfaWNtcl91IHsKKwl1aW50NjRfdAlpaV9pY21yX3JlZ3ZhbDsKKwlzdHJ1Y3QgIHsKKwkJdWludDY0X3QJaV9zcF9tc2cgICAgICAgICAgICAgICAgICA6CSAxOworCQl1aW50NjRfdAlpX3JkX2hkcgkJICA6CSAxOworCQl1aW50NjRfdAlpX3JzdmRfNAkJICA6CSAyOworCQl1aW50NjRfdAlpX2NfY250CQkJICA6CSA0OworCQl1aW50NjRfdAlpX3JzdmRfMwkJICA6CSA0OworCQl1aW50NjRfdAlpX2Nscl9ycXBkCQkgIDoJIDE7CisJCXVpbnQ2NF90CWlfY2xyX3JwcGQJCSAgOgkgMTsKKwkJdWludDY0X3QJaV9yc3ZkXzIJCSAgOgkgMjsKKwkJdWludDY0X3QJaV9mY19jbnQJCSAgOgkgNDsKKwkJdWludDY0X3QJaV9jcmJfdmxkCQkgIDoJMTU7CisJCXVpbnQ2NF90CWlfY3JiX21hcmsJCSAgOgkxNTsKKwkJdWludDY0X3QJaV9yc3ZkXzEJCSAgOgkgMjsKKwkJdWludDY0X3QJaV9wcmVjaXNlCQkgIDoJIDE7CisJCXVpbnQ2NF90CWlfcnN2ZAkJCSAgOgkxMTsKKwl9IGlpX2ljbXJfZmxkX3M7Cit9IGlpX2ljbXJfdV90OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICBUaGlzIHJlZ2lzdGVyIGFsbG93cyBjb250cm9sIG9mIHRoZSB0YWJsZSBwb3J0aW9uIG9mIHRoZSBDUkIgICAgICAgICoKKyAqIGxvZ2ljIHZpYSBzb2Z0d2FyZS4gQ29udHJvbCBvcGVyYXRpb25zIGZyb20gdGhpcyByZWdpc3RlciBoYXZlICAgICAgICoKKyAqIHByaW9yaXR5IG92ZXIgYWxsIGluY29taW5nIENyb3NzdGFsayBvciBCVEUgcmVxdWVzdHMuICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgdW5pb24gaWlfaWNjcl91IHsKKwl1aW50NjRfdAlpaV9pY2NyX3JlZ3ZhbDsKKwlzdHJ1Y3QgIHsKKwkJdWludDY0X3QJaV9jcmJfbnVtICAgICAgICAgICAgICAgICA6CSA0OworCQl1aW50NjRfdAlpX3JzdmRfMQkJICA6CSA0OworCQl1aW50NjRfdAlpX2NtZAkJCSAgOgkgODsKKwkJdWludDY0X3QJaV9wZW5kaW5nCQkgIDoJIDE7CisJCXVpbnQ2NF90CWlfcnN2ZAkJCSAgOgk0NzsKKwl9IGlpX2ljY3JfZmxkX3M7Cit9IGlpX2ljY3JfdV90OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICBUaGlzIHJlZ2lzdGVyIGFsbG93cyB0aGUgbWF4aW11bSB0aW1lb3V0IHZhbHVlIHRvIGJlIHByb2dyYW1tZWQuICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgdW5pb24gaWlfaWN0b191IHsKKwl1aW50NjRfdAlpaV9pY3RvX3JlZ3ZhbDsKKwlzdHJ1Y3QgIHsKKwkJdWludDY0X3QJaV90aW1lb3V0ICAgICAgICAgICAgICAgICA6CSA4OworCQl1aW50NjRfdAlpX3JzdmQJCQkgIDoJNTY7CisJfSBpaV9pY3RvX2ZsZF9zOworfSBpaV9pY3RvX3VfdDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgVGhpcyByZWdpc3RlciBhbGxvd3MgdGhlIHRpbWVvdXQgcHJlc2NhbGFyIHRvIGJlIHByb2dyYW1tZWQuIEFuICAgICAqCisgKiBpbnRlcm5hbCBjb3VudGVyIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJlZ2lzdGVyLiBXaGVuIHRoZSAgICAgICAgICAqCisgKiBpbnRlcm5hbCBjb3VudGVyIHJlYWNoZXMgdGhlIHZhbHVlIG9mIHRoZSBQUkVTQ0FMRSBmaWVsZCwgdGhlICAgICAgICAqCisgKiB0aW1lciByZWdpc3RlcnMgaW4gYWxsIHZhbGlkIENSQnMgYXJlIGluY3JlbWVudGVkIChDUkJ4X0RbVElNRU9VVF0gICAqCisgKiBmaWVsZCkuIFRoZSBpbnRlcm5hbCBjb3VudGVyIHJlc2V0cyB0byB6ZXJvLCBhbmQgdGhlbiBjb250aW51ZXMgICAgICAqCisgKiBjb3VudGluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIHVuaW9uIGlpX2ljdHBfdSB7CisJdWludDY0X3QJaWlfaWN0cF9yZWd2YWw7CisJc3RydWN0ICB7CisJCXVpbnQ2NF90CWlfcHJlc2NhbGUgICAgICAgICAgICAgICAgOgkyNDsKKwkJdWludDY0X3QJaV9yc3ZkCQkJICA6CTQwOworCX0gaWlfaWN0cF9mbGRfczsKK30gaWlfaWN0cF91X3Q7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRGVzY3JpcHRpb246ICBUaGVyZSBhcmUgMTUgQ1JCIEVudHJpZXMgKElDUkIwIHRvIElDUkJFKSB0aGF0IGFyZSAgICAgKgorICogdXNlZCBmb3IgQ3Jvc3N0YWxrIG9wZXJhdGlvbnMgKGJvdGggY2FjaGVsaW5lIGFuZCBwYXJ0aWFsICAgICAgICAgICAgKgorICogb3BlcmF0aW9ucykgb3IgQlRFL0lPLiBCZWNhdXNlIHRoZSBDUkIgZW50cmllcyBhcmUgdmVyeSB3aWRlLCBmaXZlICAgKgorICogcmVnaXN0ZXJzIChfQSB0byBfRSkgYXJlIHJlcXVpcmVkIHRvIHJlYWQgYW5kIHdyaXRlIGVhY2ggZW50cnkuICAgICAgKgorICogVGhlIENSQiBFbnRyeSByZWdpc3RlcnMgY2FuIGJlIGNvbmNlcHR1YWxpemVkIGFzIHJvd3MgYW5kIGNvbHVtbnMgICAgKgorICogKGlsbHVzdHJhdGVkIGluIHRoZSB0YWJsZSBhYm92ZSkuIEVhY2ggcm93IGNvbnRhaW5zIHRoZSA0ICAgICAgICAgICAgKgorICogcmVnaXN0ZXJzIHJlcXVpcmVkIGZvciBhIHNpbmdsZSBDUkIgRW50cnkuIFRoZSBmaXJzdCBkb3VibGV3b3JkICAgICAgKgorICogKGNvbHVtbikgZm9yIGVhY2ggZW50cnkgaXMgbGFiZWxlZCBBLCBhbmQgdGhlIHNlY29uZCBkb3VibGV3b3JkICAgICAgKgorICogKGhpZ2hlciBhZGRyZXNzKSBpcyBsYWJlbGVkIEIsIHRoZSB0aGlyZCBkb3VibGV3b3JkIGlzIGxhYmVsZWQgQywgICAgKgorICogdGhlIGZvdXJ0aCBkb3VibGV3b3JkIGlzIGxhYmVsZWQgRCBhbmQgdGhlIGZpZnRoIGRvdWJsZXdvcmQgaXMgICAgICAgKgorICogbGFiZWxlZCBFLiBBbGwgQ1JCIGVudHJpZXMgaGF2ZSB0aGVpciBhZGRyZXNzZXMgb24gYSBxdWFydGVyICAgICAgICAgKgorICogY2FjaGVsaW5lIGFsaWduZWQgYm91bmRhcnkuICAgICAgICAgICAgICAgICAgICoKKyAqIFVwb24gcmVzZXQsIG9ubHkgdGhlIGZvbGxvd2luZyBmaWVsZHMgYXJlIGluaXRpYWxpemVkOiB2YWxpZCAgICAgICAgICoKKyAqIChWTEQpLCBwcmlvcml0eSBjb3VudCwgdGltZW91dCwgdGltZW91dCB2YWxpZCwgYW5kIGNvbnRleHQgdmFsaWQuICAgICoKKyAqIEFsbCBvdGhlciBiaXRzIHNob3VsZCBiZSBjbGVhcmVkIGJ5IHNvZnR3YXJlIGJlZm9yZSB1c2UgKGFmdGVyICAgICAgICoKKyAqIHJlY292ZXJpbmcgYW55IHBvdGVudGlhbCBlcnJvciBzdGF0ZSBmcm9tIGJlZm9yZSB0aGUgcmVzZXQpLiAgICAgICAgICoKKyAqIFRoZSBmb2xsb3dpbmcgZm91ciB0YWJsZXMgc3VtbWFyaXplIHRoZSBmb3JtYXQgZm9yIHRoZSBmb3VyICAgICAgICAgICoKKyAqIHJlZ2lzdGVycyB0aGF0IGFyZSB1c2VkIGZvciBlYWNoIElDUkIjIEVudHJ5LiAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgdW5pb24gaWlfaWNyYjBfYV91IHsKKwl1aW50NjRfdAlpaV9pY3JiMF9hX3JlZ3ZhbDsKKwlzdHJ1Y3QgIHsKKwkJdWludDY0X3QJaWFfaW93ICAgICAgICAgICAgICAgICAgICA6CSAxOworCQl1aW50NjRfdAlpYV92bGQJCQkgIDoJIDE7CisJCXVpbnQ2NF90CWlhX2FkZHIJCQkgIDoJNDc7CisJCXVpbnQ2NF90CWlhX3RudW0JCQkgIDoJIDU7CisJCXVpbnQ2NF90CWlhX3NpZG4JCQkgIDoJIDQ7CisJCXVpbnQ2NF90ICAgICAgIGlhX3JzdmQgICAgICAgICAgICAgICAgICAgOiAgICAgIDY7CisJfSBpaV9pY3JiMF9hX2ZsZF9zOworfSBpaV9pY3JiMF9hX3VfdDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBEZXNjcmlwdGlvbjogIFRoZXJlIGFyZSAxNSBDUkIgRW50cmllcyAoSUNSQjAgdG8gSUNSQkUpIHRoYXQgYXJlICAgICAqCisgKiB1c2VkIGZvciBDcm9zc3RhbGsgb3BlcmF0aW9ucyAoYm90aCBjYWNoZWxpbmUgYW5kIHBhcnRpYWwgICAgICAgICAgICAqCisgKiBvcGVyYXRpb25zKSBvciBCVEUvSU8uIEJlY2F1c2UgdGhlIENSQiBlbnRyaWVzIGFyZSB2ZXJ5IHdpZGUsIGZpdmUgICAqCisgKiByZWdpc3RlcnMgKF9BIHRvIF9FKSBhcmUgcmVxdWlyZWQgdG8gcmVhZCBhbmQgd3JpdGUgZWFjaCBlbnRyeS4gICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIHVuaW9uIGlpX2ljcmIwX2JfdSB7CisJdWludDY0X3QJaWlfaWNyYjBfYl9yZWd2YWw7CisJc3RydWN0CXsKKwkJdWludDY0X3QJaWJfeHRfZXJyCQkgIDoJIDE7CisJCXVpbnQ2NF90CWliX21hcmsJCQkgIDoJIDE7CisJCXVpbnQ2NF90CWliX2xuX3VjZQkJICA6CSAxOworCQl1aW50NjRfdAlpYl9lcnJjb2RlCQkgIDoJIDM7CisJCXVpbnQ2NF90CWliX2Vycm9yCQkgIDoJIDE7CisJCXVpbnQ2NF90CWliX3N0YWxsX19idGVfMQkJICA6CSAxOworCQl1aW50NjRfdAlpYl9zdGFsbF9fYnRlXzAJCSAgOgkgMTsKKwkJdWludDY0X3QJaWJfc3RhbGxfX2ludHIJCSAgOgkgMTsKKwkJdWludDY0X3QJaWJfc3RhbGxfaWIJCSAgOgkgMTsKKwkJdWludDY0X3QJaWJfaW50dm4JCSAgOgkgMTsKKwkJdWludDY0X3QJaWJfd2IJCQkgIDoJIDE7CisJCXVpbnQ2NF90CWliX2hvbGQJCQkgIDoJIDE7CisJCXVpbnQ2NF90CWliX2FjawkJCSAgOgkgMTsKKwkJdWludDY0X3QJaWJfcmVzcAkJCSAgOgkgMTsKKwkJdWludDY0X3QJaWJfYWNrX2NudAkJICA6CTExOworCQl1aW50NjRfdAlpYl9yc3ZkCQkJICA6CSA3OworCQl1aW50NjRfdAlpYl9leGMJCQkgIDoJIDU7CisJCXVpbnQ2NF90CWliX2luaXQJCQkgIDoJIDM7CisJCXVpbnQ2NF90CWliX2ltc2cJCQkgIDoJIDg7CisJCXVpbnQ2NF90CWliX2ltc2d0eXBlCQkgIDoJIDI7CisJCXVpbnQ2NF90CWliX3VzZV9vbGQJCSAgOgkgMTsKKwkJdWludDY0X3QJaWJfcnN2ZF8xCQkgIDoJMTE7CisJfSBpaV9pY3JiMF9iX2ZsZF9zOworfSBpaV9pY3JiMF9iX3VfdDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBEZXNjcmlwdGlvbjogIFRoZXJlIGFyZSAxNSBDUkIgRW50cmllcyAoSUNSQjAgdG8gSUNSQkUpIHRoYXQgYXJlICAgICAqCisgKiB1c2VkIGZvciBDcm9zc3RhbGsgb3BlcmF0aW9ucyAoYm90aCBjYWNoZWxpbmUgYW5kIHBhcnRpYWwgICAgICAgICAgICAqCisgKiBvcGVyYXRpb25zKSBvciBCVEUvSU8uIEJlY2F1c2UgdGhlIENSQiBlbnRyaWVzIGFyZSB2ZXJ5IHdpZGUsIGZpdmUgICAqCisgKiByZWdpc3RlcnMgKF9BIHRvIF9FKSBhcmUgcmVxdWlyZWQgdG8gcmVhZCBhbmQgd3JpdGUgZWFjaCBlbnRyeS4gICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIHVuaW9uIGlpX2ljcmIwX2NfdSB7CisJdWludDY0X3QJaWlfaWNyYjBfY19yZWd2YWw7CisJc3RydWN0CXsKKwkJdWludDY0X3QJaWNfc291cmNlCQkgIDoJMTU7CisJCXVpbnQ2NF90CWljX3NpemUJCQkgIDoJIDI7CisJCXVpbnQ2NF90CWljX2N0CQkJICA6CSAxOworCQl1aW50NjRfdAlpY19idGVfbnVtCQkgIDoJIDE7CisJCXVpbnQ2NF90CWljX2dicgkJCSAgOgkgMTsKKwkJdWludDY0X3QJaWNfcmVzcHJxZAkJICA6CSAxOworCQl1aW50NjRfdAlpY19ibwkJCSAgOgkgMTsKKwkJdWludDY0X3QJaWNfc3VwcGwJCSAgOgkxNTsKKwkJdWludDY0X3QJaWNfcnN2ZAkJCSAgOgkyNzsKKwl9IGlpX2ljcmIwX2NfZmxkX3M7Cit9IGlpX2ljcmIwX2NfdV90OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIERlc2NyaXB0aW9uOiAgVGhlcmUgYXJlIDE1IENSQiBFbnRyaWVzIChJQ1JCMCB0byBJQ1JCRSkgdGhhdCBhcmUgICAgICoKKyAqIHVzZWQgZm9yIENyb3NzdGFsayBvcGVyYXRpb25zIChib3RoIGNhY2hlbGluZSBhbmQgcGFydGlhbCAgICAgICAgICAgICoKKyAqIG9wZXJhdGlvbnMpIG9yIEJURS9JTy4gQmVjYXVzZSB0aGUgQ1JCIGVudHJpZXMgYXJlIHZlcnkgd2lkZSwgZml2ZSAgICoKKyAqIHJlZ2lzdGVycyAoX0EgdG8gX0UpIGFyZSByZXF1aXJlZCB0byByZWFkIGFuZCB3cml0ZSBlYWNoIGVudHJ5LiAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgdW5pb24gaWlfaWNyYjBfZF91IHsKKwl1aW50NjRfdAlpaV9pY3JiMF9kX3JlZ3ZhbDsKKwlzdHJ1Y3QgIHsKKwkJdWludDY0X3QJaWRfcGFfYmUgICAgICAgICAgICAgICAgICA6CTQzOworCQl1aW50NjRfdAlpZF9idGVfb3AJCSAgOgkgMTsKKwkJdWludDY0X3QJaWRfcHJfcHNjCQkgIDoJIDQ7CisJCXVpbnQ2NF90CWlkX3ByX2NudAkJICA6CSA0OworCQl1aW50NjRfdAlpZF9zbGVlcAkJICA6CSAxOworCQl1aW50NjRfdAlpZF9yc3ZkCQkJICA6CTExOworCX0gaWlfaWNyYjBfZF9mbGRfczsKK30gaWlfaWNyYjBfZF91X3Q7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRGVzY3JpcHRpb246ICBUaGVyZSBhcmUgMTUgQ1JCIEVudHJpZXMgKElDUkIwIHRvIElDUkJFKSB0aGF0IGFyZSAgICAgKgorICogdXNlZCBmb3IgQ3Jvc3N0YWxrIG9wZXJhdGlvbnMgKGJvdGggY2FjaGVsaW5lIGFuZCBwYXJ0aWFsICAgICAgICAgICAgKgorICogb3BlcmF0aW9ucykgb3IgQlRFL0lPLiBCZWNhdXNlIHRoZSBDUkIgZW50cmllcyBhcmUgdmVyeSB3aWRlLCBmaXZlICAgKgorICogcmVnaXN0ZXJzIChfQSB0byBfRSkgYXJlIHJlcXVpcmVkIHRvIHJlYWQgYW5kIHdyaXRlIGVhY2ggZW50cnkuICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordHlwZWRlZiB1bmlvbiBpaV9pY3JiMF9lX3UgeworCXVpbnQ2NF90CWlpX2ljcmIwX2VfcmVndmFsOworCXN0cnVjdCAgeworCQl1aW50NjRfdAlpZV90aW1lb3V0ICAgICAgICAgICAgICAgIDoJIDg7CisJCXVpbnQ2NF90CWllX2NvbnRleHQJCSAgOgkxNTsKKwkJdWludDY0X3QJaWVfcnN2ZAkJCSAgOgkgMTsKKwkJdWludDY0X3QJaWVfdHZsZAkJCSAgOgkgMTsKKwkJdWludDY0X3QJaWVfY3ZsZAkJCSAgOgkgMTsKKwkJdWludDY0X3QJaWVfcnN2ZF8wCQkgIDoJMzg7CisJfSBpaV9pY3JiMF9lX2ZsZF9zOworfSBpaV9pY3JiMF9lX3VfdDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgVGhpcyByZWdpc3RlciBjb250YWlucyB0aGUgbG93ZXIgNjQgYml0cyBvZiB0aGUgaGVhZGVyIG9mIHRoZSAgICAgICAqCisgKiBzcHVyaW91cyBtZXNzYWdlIGNhcHR1cmVkIGJ5IElJLiBWYWxpZCB3aGVuIHRoZSBTUF9NU0cgYml0IGluIElDTVIgICAqCisgKiByZWdpc3RlciBpcyBzZXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIHVuaW9uIGlpX2ljc21sX3UgeworCXVpbnQ2NF90CWlpX2ljc21sX3JlZ3ZhbDsKKwlzdHJ1Y3QgIHsKKwkJdWludDY0X3QJaV90dF9hZGRyICAgICAgICAgICAgICAgICA6CTQ3OworCQl1aW50NjRfdAlpX25ld3N1cHBsX2V4CQkgIDoJMTQ7CisJCXVpbnQ2NF90CWlfcmVzZXJ2ZWQJCSAgOgkgMjsKKwkJdWludDY0X3QgICAgICAgaV9vdmVyZmxvdyAgICAgICAgICAgICAgICA6ICAgICAgMTsKKwl9IGlpX2ljc21sX2ZsZF9zOworfSBpaV9pY3NtbF91X3Q7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogIFRoaXMgcmVnaXN0ZXIgY29udGFpbnMgdGhlIG1pZGRsZSA2NCBiaXRzIG9mIHRoZSBoZWFkZXIgb2YgdGhlICAgICAgKgorICogc3B1cmlvdXMgbWVzc2FnZSBjYXB0dXJlZCBieSBJSS4gVmFsaWQgd2hlbiB0aGUgU1BfTVNHIGJpdCBpbiBJQ01SICAgKgorICogcmVnaXN0ZXIgaXMgc2V0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordHlwZWRlZiB1bmlvbiBpaV9pY3NtbV91IHsKKwl1aW50NjRfdAlpaV9pY3NtbV9yZWd2YWw7CisJc3RydWN0ICB7CisJCXVpbnQ2NF90CWlfdHRfYWNrX2NudCAgICAgICAgICAgICAgOgkxMTsKKwkJdWludDY0X3QJaV9yZXNlcnZlZAkJICA6CTUzOworCX0gaWlfaWNzbW1fZmxkX3M7Cit9IGlpX2ljc21tX3VfdDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgVGhpcyByZWdpc3RlciBjb250YWlucyB0aGUgbWljcm9zY29waWMgc3RhdGUsIGFsbCB0aGUgaW5wdXRzIHRvICAgICAqCisgKiB0aGUgcHJvdG9jb2wgdGFibGUsIGNhcHR1cmVkIHdpdGggdGhlIHNwdXJpb3VzIG1lc3NhZ2UuIFZhbGlkIHdoZW4gICAqCisgKiB0aGUgU1BfTVNHIGJpdCBpbiB0aGUgSUNNUiByZWdpc3RlciBpcyBzZXQuICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIHVuaW9uIGlpX2ljc21oX3UgeworCXVpbnQ2NF90CWlpX2ljc21oX3JlZ3ZhbDsKKwlzdHJ1Y3QgIHsKKwkJdWludDY0X3QJaV90dF92bGQgICAgICAgICAgICAgICAgICA6CSAxOworCQl1aW50NjRfdAlpX3hlcnIJCQkgIDoJIDE7CisJCXVpbnQ2NF90CWlfZnRfY3dhY3RfbwkJICA6CSAxOworCQl1aW50NjRfdAlpX2Z0X3dhY3RfbwkJICA6CSAxOworCQl1aW50NjRfdCAgICAgICBpX2Z0X2FjdGl2ZV9vICAgICAgICAgICAgIDogICAgICAxOworCQl1aW50NjRfdAlpX3N5bmMJCQkgIDoJIDE7CisJCXVpbnQ2NF90CWlfbW51c2cJCQkgIDoJIDE7CisJCXVpbnQ2NF90CWlfbW51c3oJCQkgIDoJIDE7CisJCXVpbnQ2NF90CWlfcGx1c3oJCQkgIDoJIDE7CisJCXVpbnQ2NF90CWlfcGx1c2cJCQkgIDoJIDE7CisJCXVpbnQ2NF90CWlfdHRfZXhjCQkgIDoJIDU7CisJCXVpbnQ2NF90CWlfdHRfd2IJCQkgIDoJIDE7CisJCXVpbnQ2NF90CWlfdHRfaG9sZAkJICA6CSAxOworCQl1aW50NjRfdAlpX3R0X2FjawkJICA6CSAxOworCQl1aW50NjRfdAlpX3R0X3Jlc3AJCSAgOgkgMTsKKwkJdWludDY0X3QJaV90dF9pbnR2bgkJICA6CSAxOworCQl1aW50NjRfdAlpX2dfc3RhbGxfYnRlMQkJICA6CSAxOworCQl1aW50NjRfdAlpX2dfc3RhbGxfYnRlMAkJICA6CSAxOworCQl1aW50NjRfdAlpX2dfc3RhbGxfaWwJCSAgOgkgMTsKKwkJdWludDY0X3QJaV9nX3N0YWxsX2liCQkgIDoJIDE7CisJCXVpbnQ2NF90CWlfdHRfaW1zZwkJICA6CSA4OworCQl1aW50NjRfdAlpX3R0X2ltc2d0eXBlCQkgIDoJIDI7CisJCXVpbnQ2NF90CWlfdHRfdXNlX29sZAkJICA6CSAxOworCQl1aW50NjRfdAlpX3R0X3Jlc3ByZXFkCQkgIDoJIDE7CisJCXVpbnQ2NF90CWlfdHRfYnRlX251bQkJICA6CSAxOworCQl1aW50NjRfdAlpX2NibgkJCSAgOgkgMTsKKwkJdWludDY0X3QJaV9tYXRjaAkJCSAgOgkgMTsKKwkJdWludDY0X3QJaV9ycGNudF9sdF8zNAkJICA6CSAxOworCQl1aW50NjRfdAlpX3JwY250X2dlXzM0CQkgIDoJIDE7CisJCXVpbnQ2NF90CWlfcnBjbnRfbHRfMTgJCSAgOgkgMTsKKwkJdWludDY0X3QJaV9ycGNudF9nZV8xOAkJICA6CSAxOworCQl1aW50NjRfdCAgICAgICBpX3JwY250X2x0XzIgICAgICAgICAgICAgIDogICAgICAxOworCQl1aW50NjRfdAlpX3JwY250X2dlXzIJCSAgOgkgMTsKKwkJdWludDY0X3QJaV9ycWNudF9sdF8xOAkJICA6CSAxOworCQl1aW50NjRfdAlpX3JxY250X2dlXzE4CQkgIDoJIDE7CisJCXVpbnQ2NF90CWlfcnFjbnRfbHRfMgkJICA6CSAxOworCQl1aW50NjRfdAlpX3JxY250X2dlXzIJCSAgOgkgMTsKKwkJdWludDY0X3QJaV90dF9kZXZpY2UJCSAgOgkgNzsKKwkJdWludDY0X3QJaV90dF9pbml0CQkgIDoJIDM7CisJCXVpbnQ2NF90CWlfcmVzZXJ2ZWQJCSAgOgkgNTsKKwl9IGlpX2ljc21oX2ZsZF9zOworfSBpaV9pY3NtaF91X3Q7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogIFRoZSBTaHViIERFQlVHIHVuaXQgcHJvdmlkZXMgYSAzLWJpdCBzZWxlY3Rpb24gc2lnbmFsIHRvIHRoZSAgICAgICAgKgorICogSUkgY29yZSBhbmQgYSAzLWJpdCBzZWxlY3Rpb24gc2lnbmFsIHRvIHRoZSBmc2JjbGsgZG9tYWluIGluIHRoZSBJSSAgKgorICogd3JhcHBlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordHlwZWRlZiB1bmlvbiBpaV9pZGJzc191IHsKKwl1aW50NjRfdAlpaV9pZGJzc19yZWd2YWw7CisJc3RydWN0ICB7CisJCXVpbnQ2NF90CWlfaWlvY2xrX2NvcmVfc3VibWVudSAgICAgOgkgMzsKKwkJdWludDY0X3QJaV9yc3ZkCQkJICA6CSA1OworCQl1aW50NjRfdAlpX2ZzYmNsa193cmFwcGVyX3N1Ym1lbnUgIDoJIDM7CisJCXVpbnQ2NF90CWlfcnN2ZF8xCQkgIDoJIDU7CisJCXVpbnQ2NF90CWlfaWlvY2xrX21lbnUJCSAgOgkgNTsKKwkJdWludDY0X3QJaV9yc3ZkXzIJCSAgOgk0MzsKKwl9IGlpX2lkYnNzX2ZsZF9zOworfSBpaV9pZGJzc191X3Q7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRGVzY3JpcHRpb246ICBUaGlzIHJlZ2lzdGVyIGlzIHVzZWQgdG8gc2V0IHVwIHRoZSBsZW5ndGggZm9yIGEgICAgICAgKgorICogdHJhbnNmZXIgYW5kIHRoZW4gdG8gbW9uaXRvciB0aGUgcHJvZ3Jlc3Mgb2YgdGhhdCB0cmFuc2Zlci4gVGhpcyAgICAgKgorICogcmVnaXN0ZXIgbmVlZHMgdG8gYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGEgdHJhbnNmZXIgaXMgc3RhcnRlZC4gQSAgICAgKgorICogbGVnaXRpbWF0ZSB3cml0ZSB0byB0aGlzIHJlZ2lzdGVyIHdpbGwgc2V0IHRoZSBCdXN5IGJpdCwgY2xlYXIgdGhlICAgKgorICogRXJyb3IgYml0LCBhbmQgaW5pdGlhbGl6ZSB0aGUgbGVuZ3RoIHRvIHRoZSB2YWx1ZSBkZXNpcmVkLiAgICAgICAgICAgKgorICogV2hpbGUgdGhlIHRyYW5zZmVyIGlzIGluIHByb2dyZXNzLCBoYXJkd2FyZSB3aWxsIGRlY3JlbWVudCB0aGUgICAgICAgKgorICogbGVuZ3RoIGZpZWxkIHdpdGggZWFjaCBzdWNjZXNzZnVsIGJsb2NrIHRoYXQgaXMgY29waWVkLiBPbmNlIHRoZSAgICAgKgorICogdHJhbnNmZXIgY29tcGxldGVzLCBoYXJkd2FyZSB3aWxsIGNsZWFyIHRoZSBCdXN5IGJpdC4gVGhlIGxlbmd0aCAgICAgKgorICogZmllbGQgd2lsbCBhbHNvIGNvbnRhaW4gdGhlIG51bWJlciBvZiBjYWNoZSBsaW5lcyBsZWZ0IHRvIGJlICAgICAgICAgKgorICogdHJhbnNmZXJyZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordHlwZWRlZiB1bmlvbiBpaV9pYmxzMF91IHsKKwl1aW50NjRfdAlpaV9pYmxzMF9yZWd2YWw7CisJc3RydWN0CXsKKwkJdWludDY0X3QJaV9sZW5ndGgJCSAgOgkxNjsKKwkJdWludDY0X3QJaV9lcnJvcgkJCSAgOgkgMTsKKwkJdWludDY0X3QJaV9yc3ZkXzEJCSAgOgkgMzsKKwkJdWludDY0X3QJaV9idXN5CQkJICA6CSAxOworCQl1aW50NjRfdCAgICAgICBpX3JzdmQgICAgICAgICAgICAgICAgICAgIDogICAgIDQzOworCX0gaWlfaWJsczBfZmxkX3M7Cit9IGlpX2libHMwX3VfdDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgVGhpcyByZWdpc3RlciBzaG91bGQgYmUgbG9hZGVkIGJlZm9yZSBhIHRyYW5zZmVyIGlzIHN0YXJ0ZWQuIFRoZSAgICAqCisgKiBhZGRyZXNzIHRvIGJlIGxvYWRlZCBpbiBiaXRzIDM5OjAgaXMgdGhlIDQwLWJpdCBUUmV4KyBwaHlzaWNhbCAgICAgICAqCisgKiBhZGRyZXNzIGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDEuMywgRmlndXJlMiBhbmQgRmlndXJlMy4gU2luY2UgICAgICAqCisgKiB0aGUgYm90dG9tIDcgYml0cyBvZiB0aGUgYWRkcmVzcyBhcmUgYWx3YXlzIHRha2VuIHRvIGJlIHplcm8sIEJURSAgICAqCisgKiB0cmFuc2ZlcnMgYXJlIGFsd2F5cyBjYWNoZWxpbmUtYWxpZ25lZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIHVuaW9uIGlpX2lic2EwX3UgeworCXVpbnQ2NF90CWlpX2lic2EwX3JlZ3ZhbDsKKwlzdHJ1Y3QgIHsKKwkJdWludDY0X3QJaV9yc3ZkXzEgICAgICAgICAgICAgICAgICA6CSA3OworCQl1aW50NjRfdAlpX2FkZHIJCQkgIDoJNDI7CisJCXVpbnQ2NF90ICAgICAgIGlfcnN2ZCAgICAgICAgICAgICAgICAgICAgOiAgICAgMTU7CisJfSBpaV9pYnNhMF9mbGRfczsKK30gaWlfaWJzYTBfdV90OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICBUaGlzIHJlZ2lzdGVyIHNob3VsZCBiZSBsb2FkZWQgYmVmb3JlIGEgdHJhbnNmZXIgaXMgc3RhcnRlZC4gVGhlICAgICoKKyAqIGFkZHJlc3MgdG8gYmUgbG9hZGVkIGluIGJpdHMgMzk6MCBpcyB0aGUgNDAtYml0IFRSZXgrIHBoeXNpY2FsICAgICAgICoKKyAqIGFkZHJlc3MgYXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMS4zLCBGaWd1cmUyIGFuZCBGaWd1cmUzLiBTaW5jZSAgICAgICoKKyAqIHRoZSBib3R0b20gNyBiaXRzIG9mIHRoZSBhZGRyZXNzIGFyZSBhbHdheXMgdGFrZW4gdG8gYmUgemVybywgQlRFICAgICoKKyAqIHRyYW5zZmVycyBhcmUgYWx3YXlzIGNhY2hlbGluZS1hbGlnbmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgdW5pb24gaWlfaWJkYTBfdSB7CisJdWludDY0X3QJaWlfaWJkYTBfcmVndmFsOworCXN0cnVjdCAgeworCQl1aW50NjRfdAlpX3JzdmRfMSAgICAgICAgICAgICAgICAgIDoJIDc7CisJCXVpbnQ2NF90CWlfYWRkcgkJCSAgOgk0MjsKKwkJdWludDY0X3QJaV9yc3ZkCQkJICA6CTE1OworCX0gaWlfaWJkYTBfZmxkX3M7Cit9IGlpX2liZGEwX3VfdDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgV3JpdGluZyB0byB0aGlzIHJlZ2lzdGVyIHNldHMgdXAgdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIHRyYW5zZmVyICAgICAqCisgKiBhbmQgaW5pdGlhdGVzIHRoZSB0cmFuc2ZlciBvcGVyYXRpb24uIFJlYWRpbmcgdGhpcyByZWdpc3RlciBoYXMgICAgICAqCisgKiB0aGUgc2lkZSBlZmZlY3Qgb2YgdGVybWluYXRpbmcgYW55IHRyYW5zZmVyIGluIHByb2dyZXNzLiBOb3RlOiAgICAgICAqCisgKiBzdG9wcGluZyBhIHRyYW5zZmVyIG1pZHN0cmVhbSBjb3VsZCBoYXZlIGFuIGFkdmVyc2UgaW1wYWN0IG9uIHRoZSAgICAqCisgKiBvdGhlciBCVEUuIElmIGEgQlRFIHN0cmVhbSBoYXMgdG8gYmUgc3RvcHBlZCAoZHVlIHRvIGVycm9yICAgICAgICAgICAqCisgKiBoYW5kbGluZyBmb3IgZXhhbXBsZSksIGJvdGggQlRFIHN0cmVhbXMgc2hvdWxkIGJlIHN0b3BwZWQgYW5kICAgICAgICAqCisgKiB0aGVpciB0cmFuc2ZlcnMgZGlzY2FyZGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIHVuaW9uIGlpX2liY3QwX3UgeworCXVpbnQ2NF90CWlpX2liY3QwX3JlZ3ZhbDsKKwlzdHJ1Y3QgIHsKKwkJdWludDY0X3QJaV96ZXJvZmlsbCAgICAgICAgICAgICAgICA6CSAxOworCQl1aW50NjRfdAlpX3JzdmRfMgkJICA6CSAzOworCQl1aW50NjRfdAlpX25vdGlmeQkJICA6CSAxOworCQl1aW50NjRfdAlpX3JzdmRfMQkJICA6CSAzOworCQl1aW50NjRfdCAgICAgICBpX3BvaXNvbiAgICAgICAgICAgICAgICAgIDogICAgICAxOworCQl1aW50NjRfdCAgICAgICBpX3JzdmQgICAgICAgICAgICAgICAgICAgIDogICAgIDU1OworCX0gaWlfaWJjdDBfZmxkX3M7Cit9IGlpX2liY3QwX3VfdDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgVGhpcyByZWdpc3RlciBjb250YWlucyB0aGUgYWRkcmVzcyB0byB3aGljaCB0aGUgV0lOViBpcyBzZW50LiAgICAgICAqCisgKiBUaGlzIGFkZHJlc3MgaGFzIHRvIGJlIGNhY2hlIGxpbmUgYWxpZ25lZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIHVuaW9uIGlpX2libmEwX3UgeworCXVpbnQ2NF90CWlpX2libmEwX3JlZ3ZhbDsKKwlzdHJ1Y3QgIHsKKwkJdWludDY0X3QJaV9yc3ZkXzEgICAgICAgICAgICAgICAgICA6CSA3OworCQl1aW50NjRfdAlpX2FkZHIJCQkgIDoJNDI7CisJCXVpbnQ2NF90CWlfcnN2ZAkJCSAgOgkxNTsKKwl9IGlpX2libmEwX2ZsZF9zOworfSBpaV9pYm5hMF91X3Q7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogIFRoaXMgcmVnaXN0ZXIgY29udGFpbnMgdGhlIHByb2dyYW1tYWJsZSBsZXZlbCBhcyB3ZWxsIGFzIHRoZSBub2RlICAgKgorICogSUQgYW5kIFBJIHVuaXQgb2YgdGhlIHByb2Nlc3NvciB0byB3aGljaCB0aGUgaW50ZXJydXB0IHdpbGwgYmUgICAgICAgKgorICogc2VudC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordHlwZWRlZiB1bmlvbiBpaV9pYmlhMF91IHsKKwl1aW50NjRfdAlpaV9pYmlhMF9yZWd2YWw7CisJc3RydWN0ICB7CisJCXVpbnQ2NF90CWlfcnN2ZF8yICAgICAgICAgICAgICAgICAgIDoJIDE7CisJCXVpbnQ2NF90CWlfbm9kZV9pZAkJICA6CTExOworCQl1aW50NjRfdAlpX3JzdmRfMQkJICA6CSA0OworCQl1aW50NjRfdAlpX2xldmVsCQkJICA6CSA3OworCQl1aW50NjRfdCAgICAgICBpX3JzdmQgICAgICAgICAgICAgICAgICAgIDogICAgIDQxOworCX0gaWlfaWJpYTBfZmxkX3M7Cit9IGlpX2liaWEwX3VfdDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBEZXNjcmlwdGlvbjogIFRoaXMgcmVnaXN0ZXIgaXMgdXNlZCB0byBzZXQgdXAgdGhlIGxlbmd0aCBmb3IgYSAgICAgICAqCisgKiB0cmFuc2ZlciBhbmQgdGhlbiB0byBtb25pdG9yIHRoZSBwcm9ncmVzcyBvZiB0aGF0IHRyYW5zZmVyLiBUaGlzICAgICAqCisgKiByZWdpc3RlciBuZWVkcyB0byBiZSBpbml0aWFsaXplZCBiZWZvcmUgYSB0cmFuc2ZlciBpcyBzdGFydGVkLiBBICAgICAqCisgKiBsZWdpdGltYXRlIHdyaXRlIHRvIHRoaXMgcmVnaXN0ZXIgd2lsbCBzZXQgdGhlIEJ1c3kgYml0LCBjbGVhciB0aGUgICAqCisgKiBFcnJvciBiaXQsIGFuZCBpbml0aWFsaXplIHRoZSBsZW5ndGggdG8gdGhlIHZhbHVlIGRlc2lyZWQuICAgICAgICAgICAqCisgKiBXaGlsZSB0aGUgdHJhbnNmZXIgaXMgaW4gcHJvZ3Jlc3MsIGhhcmR3YXJlIHdpbGwgZGVjcmVtZW50IHRoZSAgICAgICAqCisgKiBsZW5ndGggZmllbGQgd2l0aCBlYWNoIHN1Y2Nlc3NmdWwgYmxvY2sgdGhhdCBpcyBjb3BpZWQuIE9uY2UgdGhlICAgICAqCisgKiB0cmFuc2ZlciBjb21wbGV0ZXMsIGhhcmR3YXJlIHdpbGwgY2xlYXIgdGhlIEJ1c3kgYml0LiBUaGUgbGVuZ3RoICAgICAqCisgKiBmaWVsZCB3aWxsIGFsc28gY29udGFpbiB0aGUgbnVtYmVyIG9mIGNhY2hlIGxpbmVzIGxlZnQgdG8gYmUgICAgICAgICAqCisgKiB0cmFuc2ZlcnJlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIHVuaW9uIGlpX2libHMxX3UgeworCXVpbnQ2NF90CWlpX2libHMxX3JlZ3ZhbDsKKwlzdHJ1Y3QgIHsKKwkJdWludDY0X3QJaV9sZW5ndGggICAgICAgICAgICAgICAgICA6CTE2OworCQl1aW50NjRfdAlpX2Vycm9yCQkJICA6CSAxOworCQl1aW50NjRfdAlpX3JzdmRfMQkJICA6CSAzOworCQl1aW50NjRfdAlpX2J1c3kJCQkgIDoJIDE7CisJCXVpbnQ2NF90ICAgICAgIGlfcnN2ZCAgICAgICAgICAgICAgICAgICAgOiAgICAgNDM7CisJfSBpaV9pYmxzMV9mbGRfczsKK30gaWlfaWJsczFfdV90OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICBUaGlzIHJlZ2lzdGVyIHNob3VsZCBiZSBsb2FkZWQgYmVmb3JlIGEgdHJhbnNmZXIgaXMgc3RhcnRlZC4gVGhlICAgICoKKyAqIGFkZHJlc3MgdG8gYmUgbG9hZGVkIGluIGJpdHMgMzk6MCBpcyB0aGUgNDAtYml0IFRSZXgrIHBoeXNpY2FsICAgICAgICoKKyAqIGFkZHJlc3MgYXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMS4zLCBGaWd1cmUyIGFuZCBGaWd1cmUzLiBTaW5jZSAgICAgICoKKyAqIHRoZSBib3R0b20gNyBiaXRzIG9mIHRoZSBhZGRyZXNzIGFyZSBhbHdheXMgdGFrZW4gdG8gYmUgemVybywgQlRFICAgICoKKyAqIHRyYW5zZmVycyBhcmUgYWx3YXlzIGNhY2hlbGluZS1hbGlnbmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgdW5pb24gaWlfaWJzYTFfdSB7CisJdWludDY0X3QJaWlfaWJzYTFfcmVndmFsOworCXN0cnVjdCAgeworCQl1aW50NjRfdAlpX3JzdmRfMSAgICAgICAgICAgICAgICAgIDoJIDc7CisJCXVpbnQ2NF90CWlfYWRkcgkJCSAgOgkzMzsKKwkJdWludDY0X3QJaV9yc3ZkCQkJICA6CTI0OworCX0gaWlfaWJzYTFfZmxkX3M7Cit9IGlpX2lic2ExX3VfdDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgVGhpcyByZWdpc3RlciBzaG91bGQgYmUgbG9hZGVkIGJlZm9yZSBhIHRyYW5zZmVyIGlzIHN0YXJ0ZWQuIFRoZSAgICAqCisgKiBhZGRyZXNzIHRvIGJlIGxvYWRlZCBpbiBiaXRzIDM5OjAgaXMgdGhlIDQwLWJpdCBUUmV4KyBwaHlzaWNhbCAgICAgICAqCisgKiBhZGRyZXNzIGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDEuMywgRmlndXJlMiBhbmQgRmlndXJlMy4gU2luY2UgICAgICAqCisgKiB0aGUgYm90dG9tIDcgYml0cyBvZiB0aGUgYWRkcmVzcyBhcmUgYWx3YXlzIHRha2VuIHRvIGJlIHplcm8sIEJURSAgICAqCisgKiB0cmFuc2ZlcnMgYXJlIGFsd2F5cyBjYWNoZWxpbmUtYWxpZ25lZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIHVuaW9uIGlpX2liZGExX3UgeworCXVpbnQ2NF90CWlpX2liZGExX3JlZ3ZhbDsKKwlzdHJ1Y3QgIHsKKwkJdWludDY0X3QJaV9yc3ZkXzEgICAgICAgICAgICAgICAgICA6CSA3OworCQl1aW50NjRfdAlpX2FkZHIJCQkgIDoJMzM7CisJCXVpbnQ2NF90CWlfcnN2ZAkJCSAgOgkyNDsKKwl9IGlpX2liZGExX2ZsZF9zOworfSBpaV9pYmRhMV91X3Q7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogIFdyaXRpbmcgdG8gdGhpcyByZWdpc3RlciBzZXRzIHVwIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSB0cmFuc2ZlciAgICAgKgorICogYW5kIGluaXRpYXRlcyB0aGUgdHJhbnNmZXIgb3BlcmF0aW9uLiBSZWFkaW5nIHRoaXMgcmVnaXN0ZXIgaGFzICAgICAgKgorICogdGhlIHNpZGUgZWZmZWN0IG9mIHRlcm1pbmF0aW5nIGFueSB0cmFuc2ZlciBpbiBwcm9ncmVzcy4gTm90ZTogICAgICAgKgorICogc3RvcHBpbmcgYSB0cmFuc2ZlciBtaWRzdHJlYW0gY291bGQgaGF2ZSBhbiBhZHZlcnNlIGltcGFjdCBvbiB0aGUgICAgKgorICogb3RoZXIgQlRFLiBJZiBhIEJURSBzdHJlYW0gaGFzIHRvIGJlIHN0b3BwZWQgKGR1ZSB0byBlcnJvciAgICAgICAgICAgKgorICogaGFuZGxpbmcgZm9yIGV4YW1wbGUpLCBib3RoIEJURSBzdHJlYW1zIHNob3VsZCBiZSBzdG9wcGVkIGFuZCAgICAgICAgKgorICogdGhlaXIgdHJhbnNmZXJzIGRpc2NhcmRlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordHlwZWRlZiB1bmlvbiBpaV9pYmN0MV91IHsKKwl1aW50NjRfdAlpaV9pYmN0MV9yZWd2YWw7CisJc3RydWN0ICB7CisJCXVpbnQ2NF90CWlfemVyb2ZpbGwgICAgICAgICAgICAgICAgOgkgMTsKKwkJdWludDY0X3QJaV9yc3ZkXzIJCSAgOgkgMzsKKwkJdWludDY0X3QJaV9ub3RpZnkJCSAgOgkgMTsKKwkJdWludDY0X3QJaV9yc3ZkXzEJCSAgOgkgMzsKKwkJdWludDY0X3QJaV9wb2lzb24JCSAgOgkgMTsKKwkJdWludDY0X3QJaV9yc3ZkCQkJICA6CTU1OworCX0gaWlfaWJjdDFfZmxkX3M7Cit9IGlpX2liY3QxX3VfdDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgVGhpcyByZWdpc3RlciBjb250YWlucyB0aGUgYWRkcmVzcyB0byB3aGljaCB0aGUgV0lOViBpcyBzZW50LiAgICAgICAqCisgKiBUaGlzIGFkZHJlc3MgaGFzIHRvIGJlIGNhY2hlIGxpbmUgYWxpZ25lZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIHVuaW9uIGlpX2libmExX3UgeworCXVpbnQ2NF90CWlpX2libmExX3JlZ3ZhbDsKKwlzdHJ1Y3QgIHsKKwkJdWludDY0X3QJaV9yc3ZkXzEgICAgICAgICAgICAgICAgICA6CSA3OworCQl1aW50NjRfdAlpX2FkZHIJCQkgIDoJMzM7CisJCXVpbnQ2NF90ICAgICAgIGlfcnN2ZCAgICAgICAgICAgICAgICAgICAgOiAgICAgMjQ7CisJfSBpaV9pYm5hMV9mbGRfczsKK30gaWlfaWJuYTFfdV90OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICBUaGlzIHJlZ2lzdGVyIGNvbnRhaW5zIHRoZSBwcm9ncmFtbWFibGUgbGV2ZWwgYXMgd2VsbCBhcyB0aGUgbm9kZSAgICoKKyAqIElEIGFuZCBQSSB1bml0IG9mIHRoZSBwcm9jZXNzb3IgdG8gd2hpY2ggdGhlIGludGVycnVwdCB3aWxsIGJlICAgICAgICoKKyAqIHNlbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgdW5pb24gaWlfaWJpYTFfdSB7CisJdWludDY0X3QJaWlfaWJpYTFfcmVndmFsOworCXN0cnVjdCAgeworCQl1aW50NjRfdAlpX3BpX2lkICAgICAgICAgICAgICAgICAgIDoJIDE7CisJCXVpbnQ2NF90CWlfbm9kZV9pZAkJICA6CSA4OworCQl1aW50NjRfdAlpX3JzdmRfMQkJICA6CSA3OworCQl1aW50NjRfdAlpX2xldmVsCQkJICA6CSA3OworCQl1aW50NjRfdAlpX3JzdmQJCQkgIDoJNDE7CisJfSBpaV9pYmlhMV9mbGRfczsKK30gaWlfaWJpYTFfdV90OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICBUaGlzIHJlZ2lzdGVyIGRlZmluZXMgdGhlIHJlc291cmNlcyB0aGF0IGZlZWQgaW5mb3JtYXRpb24gaW50byAgICAgICoKKyAqIHRoZSB0d28gcGVyZm9ybWFuY2UgY291bnRlcnMgbG9jYXRlZCBpbiB0aGUgSU8gUGVyZm9ybWFuY2UgICAgICAgICAgICoKKyAqIFByb2ZpbGluZyBSZWdpc3Rlci4gVGhlcmUgYXJlIDE3IGRpZmZlcmVudCBxdWFudGl0aWVzIHRoYXQgY2FuIGJlICAgICoKKyAqIG1lYXN1cmVkLiBHaXZlbiB0aGVzZSAxNyBkaWZmZXJlbnQgb3B0aW9ucywgdGhlIHR3byBwZXJmb3JtYW5jZSAgICAgICoKKyAqIGNvdW50ZXJzIGhhdmUgMTUgb2YgdGhlbSBpbiBjb21tb247IG1lbnUgc2VsZWN0aW9ucyAwIHRocm91Z2ggMHhFICAgICoKKyAqIGFyZSBpZGVudGljYWwgZm9yIGVhY2ggcGVyZm9ybWFuY2UgY291bnRlci4gQXMgZm9yIHRoZSBvdGhlciB0d28gICAgICoKKyAqIG9wdGlvbnMsIG9uZSBpcyBhdmFpbGFibGUgZnJvbSBvbmUgcGVyZm9ybWFuY2UgY291bnRlciBhbmQgdGhlICAgICAgICoKKyAqIG90aGVyIGlzIGF2YWlsYWJsZSBmcm9tIHRoZSBvdGhlciBwZXJmb3JtYW5jZSBjb3VudGVyLiBIZW5jZSwgdGhlICAgICoKKyAqIElJIHN1cHBvcnRzIGFsbCAxNyoxNj0yNzIgcG9zc2libGUgY29tYmluYXRpb25zIG9mIHF1YW50aXRpZXMgdG8gICAgICoKKyAqIG1lYXN1cmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgdW5pb24gaWlfaXBjcl91IHsKKwl1aW50NjRfdAlpaV9pcGNyX3JlZ3ZhbDsKKwlzdHJ1Y3QgIHsKKwkJdWludDY0X3QJaV9pcHByMF9jICAgICAgICAgICAgICAgICA6CSA0OworCQl1aW50NjRfdAlpX2lwcHIxX2MJCSAgOgkgNDsKKwkJdWludDY0X3QJaV9pY2N0CQkJICA6CSA4OworCQl1aW50NjRfdCAgICAgICBpX3JzdmQgICAgICAgICAgICAgICAgICAgIDogICAgIDQ4OworCX0gaWlfaXBjcl9mbGRfczsKK30gaWlfaXBjcl91X3Q7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordHlwZWRlZiB1bmlvbiBpaV9pcHByX3UgeworCXVpbnQ2NF90CWlpX2lwcHJfcmVndmFsOworCXN0cnVjdCAgeworCQl1aW50NjRfdAlpX2lwcHIwICAgICAgICAgICAgICAgICAgIDoJMzI7CisJCXVpbnQ2NF90CWlfaXBwcjEJCQkgIDoJMzI7CisJfSBpaV9pcHByX2ZsZF9zOworfSBpaV9pcHByX3VfdDsKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgZm9sbG93aW5nIGRlZmluZXMgd2hpY2ggd2VyZSBub3QgZm9ybWVkIGludG8gc3RydWN0dXJlcyBhcmUgICAgICAgICoKKyAqIHByb2JhYmx5IGluZGVudGljYWwgdG8gYW5vdGhlciByZWdpc3RlciwgYW5kIHRoZSBuYW1lIG9mIHRoZSAgICAgICAgICAgKgorICogcmVnaXN0ZXIgaXMgcHJvdmlkZWQgYWdhaW5zdCBlYWNoIG9mIHRoZXNlIHJlZ2lzdGVycy4gVGhpcyAgICAgICAgICAgICAqCisgKiBpbmZvcm1hdGlvbiBuZWVkcyB0byBiZSBjaGVja2VkIGNhcmVmdWxseSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgIElJT19JQ1JCMV9BICAgICAgICAgICAgICAgIElJT19JQ1JCMF9BICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgSUlPX0lDUkIxX0IgICAgICAgICAgICAgICAgSUlPX0lDUkIwX0IgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICBJSU9fSUNSQjFfQyAgICAgICAgICAgICAgICBJSU9fSUNSQjBfQyAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgIElJT19JQ1JCMV9EICAgICAgICAgICAgICAgIElJT19JQ1JCMF9EICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgSUlPX0lDUkIxX0UgICAgICAgICAgICAgICAgSUlPX0lDUkIwX0UgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICBJSU9fSUNSQjJfQSAgICAgICAgICAgICAgICBJSU9fSUNSQjBfQSAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgIElJT19JQ1JCMl9CICAgICAgICAgICAgICAgIElJT19JQ1JCMF9CICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgSUlPX0lDUkIyX0MgICAgICAgICAgICAgICAgSUlPX0lDUkIwX0MgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICBJSU9fSUNSQjJfRCAgICAgICAgICAgICAgICBJSU9fSUNSQjBfRCAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgIElJT19JQ1JCMl9FICAgICAgICAgICAgICAgIElJT19JQ1JCMF9FICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgSUlPX0lDUkIzX0EgICAgICAgICAgICAgICAgSUlPX0lDUkIwX0EgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICBJSU9fSUNSQjNfQiAgICAgICAgICAgICAgICBJSU9fSUNSQjBfQiAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgIElJT19JQ1JCM19DICAgICAgICAgICAgICAgIElJT19JQ1JCMF9DICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgSUlPX0lDUkIzX0QgICAgICAgICAgICAgICAgSUlPX0lDUkIwX0QgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICBJSU9fSUNSQjNfRSAgICAgICAgICAgICAgICBJSU9fSUNSQjBfRSAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgIElJT19JQ1JCNF9BICAgICAgICAgICAgICAgIElJT19JQ1JCMF9BICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgSUlPX0lDUkI0X0IgICAgICAgICAgICAgICAgSUlPX0lDUkIwX0IgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICBJSU9fSUNSQjRfQyAgICAgICAgICAgICAgICBJSU9fSUNSQjBfQyAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgIElJT19JQ1JCNF9EICAgICAgICAgICAgICAgIElJT19JQ1JCMF9EICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgSUlPX0lDUkI0X0UgICAgICAgICAgICAgICAgSUlPX0lDUkIwX0UgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICBJSU9fSUNSQjVfQSAgICAgICAgICAgICAgICBJSU9fSUNSQjBfQSAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgIElJT19JQ1JCNV9CICAgICAgICAgICAgICAgIElJT19JQ1JCMF9CICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgSUlPX0lDUkI1X0MgICAgICAgICAgICAgICAgSUlPX0lDUkIwX0MgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICBJSU9fSUNSQjVfRCAgICAgICAgICAgICAgICBJSU9fSUNSQjBfRCAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgIElJT19JQ1JCNV9FICAgICAgICAgICAgICAgIElJT19JQ1JCMF9FICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgSUlPX0lDUkI2X0EgICAgICAgICAgICAgICAgSUlPX0lDUkIwX0EgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICBJSU9fSUNSQjZfQiAgICAgICAgICAgICAgICBJSU9fSUNSQjBfQiAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgIElJT19JQ1JCNl9DICAgICAgICAgICAgICAgIElJT19JQ1JCMF9DICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgSUlPX0lDUkI2X0QgICAgICAgICAgICAgICAgSUlPX0lDUkIwX0QgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICBJSU9fSUNSQjZfRSAgICAgICAgICAgICAgICBJSU9fSUNSQjBfRSAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgIElJT19JQ1JCN19BICAgICAgICAgICAgICAgIElJT19JQ1JCMF9BICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgSUlPX0lDUkI3X0IgICAgICAgICAgICAgICAgSUlPX0lDUkIwX0IgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICBJSU9fSUNSQjdfQyAgICAgICAgICAgICAgICBJSU9fSUNSQjBfQyAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgIElJT19JQ1JCN19EICAgICAgICAgICAgICAgIElJT19JQ1JCMF9EICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgSUlPX0lDUkI3X0UgICAgICAgICAgICAgICAgSUlPX0lDUkIwX0UgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICBJSU9fSUNSQjhfQSAgICAgICAgICAgICAgICBJSU9fSUNSQjBfQSAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgIElJT19JQ1JCOF9CICAgICAgICAgICAgICAgIElJT19JQ1JCMF9CICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgSUlPX0lDUkI4X0MgICAgICAgICAgICAgICAgSUlPX0lDUkIwX0MgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICBJSU9fSUNSQjhfRCAgICAgICAgICAgICAgICBJSU9fSUNSQjBfRCAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgIElJT19JQ1JCOF9FICAgICAgICAgICAgICAgIElJT19JQ1JCMF9FICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgSUlPX0lDUkI5X0EgICAgICAgICAgICAgICAgSUlPX0lDUkIwX0EgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICBJSU9fSUNSQjlfQiAgICAgICAgICAgICAgICBJSU9fSUNSQjBfQiAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgIElJT19JQ1JCOV9DICAgICAgICAgICAgICAgIElJT19JQ1JCMF9DICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgSUlPX0lDUkI5X0QgICAgICAgICAgICAgICAgSUlPX0lDUkIwX0QgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICBJSU9fSUNSQjlfRSAgICAgICAgICAgICAgICBJSU9fSUNSQjBfRSAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgIElJT19JQ1JCQV9BICAgICAgICAgICAgICAgIElJT19JQ1JCMF9BICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgSUlPX0lDUkJBX0IgICAgICAgICAgICAgICAgSUlPX0lDUkIwX0IgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICBJSU9fSUNSQkFfQyAgICAgICAgICAgICAgICBJSU9fSUNSQjBfQyAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgIElJT19JQ1JCQV9EICAgICAgICAgICAgICAgIElJT19JQ1JCMF9EICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgSUlPX0lDUkJBX0UgICAgICAgICAgICAgICAgSUlPX0lDUkIwX0UgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICBJSU9fSUNSQkJfQSAgICAgICAgICAgICAgICBJSU9fSUNSQjBfQSAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgIElJT19JQ1JCQl9CICAgICAgICAgICAgICAgIElJT19JQ1JCMF9CICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgSUlPX0lDUkJCX0MgICAgICAgICAgICAgICAgSUlPX0lDUkIwX0MgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICBJSU9fSUNSQkJfRCAgICAgICAgICAgICAgICBJSU9fSUNSQjBfRCAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgIElJT19JQ1JCQl9FICAgICAgICAgICAgICAgIElJT19JQ1JCMF9FICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgSUlPX0lDUkJDX0EgICAgICAgICAgICAgICAgSUlPX0lDUkIwX0EgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICBJSU9fSUNSQkNfQiAgICAgICAgICAgICAgICBJSU9fSUNSQjBfQiAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgIElJT19JQ1JCQ19DICAgICAgICAgICAgICAgIElJT19JQ1JCMF9DICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgSUlPX0lDUkJDX0QgICAgICAgICAgICAgICAgSUlPX0lDUkIwX0QgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICBJSU9fSUNSQkNfRSAgICAgICAgICAgICAgICBJSU9fSUNSQjBfRSAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgIElJT19JQ1JCRF9BICAgICAgICAgICAgICAgIElJT19JQ1JCMF9BICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgSUlPX0lDUkJEX0IgICAgICAgICAgICAgICAgSUlPX0lDUkIwX0IgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICBJSU9fSUNSQkRfQyAgICAgICAgICAgICAgICBJSU9fSUNSQjBfQyAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgIElJT19JQ1JCRF9EICAgICAgICAgICAgICAgIElJT19JQ1JCMF9EICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgSUlPX0lDUkJEX0UgICAgICAgICAgICAgICAgSUlPX0lDUkIwX0UgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICBJSU9fSUNSQkVfQSAgICAgICAgICAgICAgICBJSU9fSUNSQjBfQSAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgIElJT19JQ1JCRV9CICAgICAgICAgICAgICAgIElJT19JQ1JCMF9CICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgSUlPX0lDUkJFX0MgICAgICAgICAgICAgICAgSUlPX0lDUkIwX0MgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICBJSU9fSUNSQkVfRCAgICAgICAgICAgICAgICBJSU9fSUNSQjBfRCAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgIElJT19JQ1JCRV9FICAgICAgICAgICAgICAgIElJT19JQ1JCMF9FICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKgorICogU2xpZ2h0bHkgZnJpZW5kbGllciBuYW1lcyBmb3Igc29tZSBjb21tb24gcmVnaXN0ZXJzLgorICovCisjZGVmaW5lIElJT19XSURHRVQgICAgICAgICAgICAgIElJT19XSUQgICAgICAvKiBXaWRnZXQgaWRlbnRpZmljYXRpb24gKi8KKyNkZWZpbmUgSUlPX1dJREdFVF9TVEFUICAgICAgICAgSUlPX1dTVEFUICAgIC8qIFdpZGdldCBzdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgSUlPX1dJREdFVF9DVFJMICAgICAgICAgSUlPX1dDUiAgICAgIC8qIFdpZGdldCBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIElJT19QUk9URUNUICAgICAgICAgICAgIElJT19JTEFQUiAgICAvKiBJTyBpbnRlcmZhY2UgcHJvdGVjdGlvbiAqLworI2RlZmluZSBJSU9fUFJPVEVDVF9PVlJSRCAgICAgICBJSU9fSUxBUE8gICAgLyogSU8gcHJvdGVjdCBvdmVycmlkZSAqLworI2RlZmluZSBJSU9fT1VUV0lER0VUX0FDQ0VTUyAgICBJSU9fSU9XQSAgICAgLyogT3V0Ym91bmQgd2lkZ2V0IGFjY2VzcyAqLworI2RlZmluZSBJSU9fSU5XSURHRVRfQUNDRVNTICAgICBJSU9fSUlXQSAgICAgLyogSW5ib3VuZCB3aWRnZXQgYWNjZXNzICovCisjZGVmaW5lIElJT19JTkRFVl9FUlJfTUFTSyAgICAgIElJT19JSURFTSAgICAvKiBJbmJvdW5kIGRldmljZSBlcnJvciBtYXNrICovCisjZGVmaW5lIElJT19MTFBfQ1NSICAgICAgICAgICAgIElJT19JTENTUiAgICAvKiBMTFAgY29udHJvbCBhbmQgc3RhdHVzICovCisjZGVmaW5lIElJT19MTFBfTE9HICAgICAgICAgICAgIElJT19JTExSICAgICAvKiBMTFAgbG9nICovCisjZGVmaW5lIElJT19YVEFMS0NDX1RPVVQgICAgICAgIElJT19JWENDICAgICAvKiBYdGFsayBjcmVkaXQgY291bnQgdGltZW91dCovCisjZGVmaW5lIElJT19YVEFMS1RUX1RPVVQgICAgICAgIElJT19JWFRUICAgICAvKiBYdGFsayB0YWlsIHRpbWVvdXQgKi8KKyNkZWZpbmUgSUlPX0lPX0VSUl9DTFIgICAgICAgICAgSUlPX0lFQ0xSICAgIC8qIElPIGVycm9yIGNsZWFyICovCisjZGVmaW5lIElJT19JR0ZYXzAgCQlJSU9fSUdGWDAKKyNkZWZpbmUgSUlPX0lHRlhfMSAJCUlJT19JR0ZYMQorI2RlZmluZSBJSU9fSUJDVF8wCQlJSU9fSUJDVDAKKyNkZWZpbmUgSUlPX0lCQ1RfMQkJSUlPX0lCQ1QxCisjZGVmaW5lIElJT19JQkxTXzAJCUlJT19JQkxTMAorI2RlZmluZSBJSU9fSUJMU18xCQlJSU9fSUJMUzEKKyNkZWZpbmUgSUlPX0lCU0FfMAkJSUlPX0lCU0EwCisjZGVmaW5lIElJT19JQlNBXzEJCUlJT19JQlNBMQorI2RlZmluZSBJSU9fSUJEQV8wCQlJSU9fSUJEQTAKKyNkZWZpbmUgSUlPX0lCREFfMQkJSUlPX0lCREExCisjZGVmaW5lIElJT19JQk5BXzAJCUlJT19JQk5BMAorI2RlZmluZSBJSU9fSUJOQV8xCQlJSU9fSUJOQTEKKyNkZWZpbmUgSUlPX0lCSUFfMAkJSUlPX0lCSUEwCisjZGVmaW5lIElJT19JQklBXzEJCUlJT19JQklBMQorI2RlZmluZSBJSU9fSU9QUkJfMAkJSUlPX0lQUkIwCisKKyNkZWZpbmUgSUlPX1BSVEVfQShfeCkJCShJSU9fSVBSVEUwX0EgKyAoOCAqIChfeCkpKQorI2RlZmluZSBJSU9fUFJURV9CKF94KQkJKElJT19JUFJURTBfQiArICg4ICogKF94KSkpCisjZGVmaW5lIElJT19OVU1fUFJURVMJCTgJLyogVG90YWwgbnVtYmVyIG9mIFBSQiB0YWJsZSBlbnRyaWVzICovCisjZGVmaW5lIElJT19XSURQUlRFX0EoeCkJSUlPX1BSVEVfQSgoKHgpIC0gOCkpIC8qIHdpZGdldCBJRCB0byBpdHMgUFJURSBudW0gKi8KKyNkZWZpbmUgSUlPX1dJRFBSVEVfQih4KQlJSU9fUFJURV9CKCgoeCkgLSA4KSkgLyogd2lkZ2V0IElEIHRvIGl0cyBQUlRFIG51bSAqLworCisjZGVmaW5lIElJT19OVU1fSVBSQlMgCQkoOSkgCisKKyNkZWZpbmUgSUlPX0xMUF9DU1JfSVNfVVAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIElJT19MTFBfQ1NSX0xMUF9TVEFUX01BU0sgICAgICAgMHgwMDAwMzAwMAorI2RlZmluZSBJSU9fTExQX0NTUl9MTFBfU1RBVF9TSEZUICAgICAgIDEyCisKKyNkZWZpbmUgSUlPX0xMUF9DQl9NQVggIDB4ZmZmZgkvKiBpbiBJTExSIENCX0NOVCwgTWF4IENoZWNrIEJpdCBlcnJvcnMgKi8KKyNkZWZpbmUgSUlPX0xMUF9TTl9NQVggIDB4ZmZmZgkvKiBpbiBJTExSIFNOX0NOVCwgTWF4IFNlcXVlbmNlIE51bWJlciBlcnJvcnMgKi8KKworLyoga2V5IHRvIElJT19QUk9URUNUX09WUlJEICovCisjZGVmaW5lIElJT19QUk9URUNUX09WUlJEX0tFWSAgIDB4NTM0NzQ5NzI3NTZjNjU3M3VsbCAgIC8qICJTR0lydWxlcyIgKi8KKworLyogQlRFIHJlZ2lzdGVyIG5hbWVzICovCisjZGVmaW5lIElJT19CVEVfU1RBVF8wICAgICAgICAgIElJT19JQkxTXzAgICAvKiBBbHNvIEJURSBsZW5ndGgvc3RhdHVzIDAgKi8KKyNkZWZpbmUgSUlPX0JURV9TUkNfMCAgICAgICAgICAgSUlPX0lCU0FfMCAgIC8qIEFsc28gQlRFIHNvdXJjZSBhZGRyZXNzICAwICovCisjZGVmaW5lIElJT19CVEVfREVTVF8wICAgICAgICAgIElJT19JQkRBXzAgICAvKiBBbHNvIEJURSBkZXN0LiBhZGRyZXNzIDAgKi8KKyNkZWZpbmUgSUlPX0JURV9DVFJMXzAgICAgICAgICAgSUlPX0lCQ1RfMCAgIC8qIEFsc28gQlRFIGNvbnRyb2wvdGVybWluYXRlIDAgKi8KKyNkZWZpbmUgSUlPX0JURV9OT1RJRllfMCAgICAgICAgSUlPX0lCTkFfMCAgIC8qIEFsc28gQlRFIG5vdGlmaWNhdGlvbiAwICovCisjZGVmaW5lIElJT19CVEVfSU5UXzAgICAgICAgICAgIElJT19JQklBXzAgICAvKiBBbHNvIEJURSBpbnRlcnJ1cHQgMCAqLworI2RlZmluZSBJSU9fQlRFX09GRl8wICAgICAgICAgICAwICAgICAgICAgICAgLyogQmFzZSBvZmZzZXQgZnJvbSBCVEUgMCByZWdzLiAqLworI2RlZmluZSBJSU9fQlRFX09GRl8xICAgCShJSU9fSUJMU18xIC0gSUlPX0lCTFNfMCkgLyogT2Zmc2V0IGZyb20gYmFzZSB0byBCVEUgMSAqLworCisvKiBCVEUgcmVnaXN0ZXIgb2Zmc2V0cyBmcm9tIGJhc2UgKi8KKyNkZWZpbmUgQlRFT0ZGX1NUQVQgICAgICAgICAgICAgMAorI2RlZmluZSBCVEVPRkZfU1JDICAgICAgICAgICAgICAoSUlPX0JURV9TUkNfMCAtIElJT19CVEVfU1RBVF8wKQorI2RlZmluZSBCVEVPRkZfREVTVCAgICAgICAgICAgICAoSUlPX0JURV9ERVNUXzAgLSBJSU9fQlRFX1NUQVRfMCkKKyNkZWZpbmUgQlRFT0ZGX0NUUkwgICAgICAgICAgICAgKElJT19CVEVfQ1RSTF8wIC0gSUlPX0JURV9TVEFUXzApCisjZGVmaW5lIEJURU9GRl9OT1RJRlkgICAgICAgICAgIChJSU9fQlRFX05PVElGWV8wIC0gSUlPX0JURV9TVEFUXzApCisjZGVmaW5lIEJURU9GRl9JTlQgICAgICAgICAgICAgIChJSU9fQlRFX0lOVF8wIC0gSUlPX0JURV9TVEFUXzApCisKKworLyogbmFtZXMgdXNlZCBpbiBzaHViIGRpYWdzICovCisjZGVmaW5lIElJT19CQVNFX0JURTAgICBJSU9fSUJMU18wCQkKKyNkZWZpbmUgSUlPX0JBU0VfQlRFMSAgIElJT19JQkxTXzEJCQorCisvKgorICogTWFjcm8gd2hpY2ggdGFrZXMgdGhlIHdpZGdldCBudW1iZXIsIGFuZCByZXR1cm5zIHRoZQorICogSU8gUFJCIGFkZHJlc3Mgb2YgdGhhdCB3aWRnZXQuCisgKiB2YWx1ZSBfeCBpcyBleHBlY3RlZCB0byBiZSBhIHdpZGdldCBudW1iZXIgaW4gdGhlIHJhbmdlCisgKiAwLCA4IC0gMHhGCisgKi8KKyNkZWZpbmUgSUlPX0lPUFJCKF94KSAgIChJSU9fSU9QUkJfMCArICggKCAoX3gpIDwgSFVCX1dJREdFVF9JRF9NSU4gPyBcCisgICAgICAgICAgICAgICAgICAgICAgICAoX3gpIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgKF94KSAtIChIVUJfV0lER0VUX0lEX01JTi0xKSkgPDwgMykgKQorCisKKy8qIEdGWCBGbG93IENvbnRyb2wgTm9kZS9XaWRnZXQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSUlPX0lHRlhfV19OVU1fQklUUwk0CS8qIHNpemUgb2Ygd2lkZ2V0IG51bSBmaWVsZCAqLworI2RlZmluZSBJSU9fSUdGWF9XX05VTV9NQVNLCSgoMTw8SUlPX0lHRlhfV19OVU1fQklUUyktMSkKKyNkZWZpbmUgSUlPX0lHRlhfV19OVU1fU0hJRlQJMAorI2RlZmluZSBJSU9fSUdGWF9QSV9OVU1fQklUUwkxCS8qIHNpemUgb2YgUEkgbnVtIGZpZWxkICovCisjZGVmaW5lIElJT19JR0ZYX1BJX05VTV9NQVNLCSgoMTw8SUlPX0lHRlhfUElfTlVNX0JJVFMpLTEpCisjZGVmaW5lIElJT19JR0ZYX1BJX05VTV9TSElGVAk0CisjZGVmaW5lIElJT19JR0ZYX05fTlVNX0JJVFMJOAkvKiBzaXplIG9mIG5vZGUgbnVtIGZpZWxkICovCisjZGVmaW5lIElJT19JR0ZYX05fTlVNX01BU0sJKCgxPDxJSU9fSUdGWF9OX05VTV9CSVRTKS0xKQorI2RlZmluZSBJSU9fSUdGWF9OX05VTV9TSElGVAk1CisjZGVmaW5lIElJT19JR0ZYX1BfTlVNX0JJVFMJMQkvKiBzaXplIG9mIHByb2Nlc3NvciBudW0gZmllbGQgKi8KKyNkZWZpbmUgSUlPX0lHRlhfUF9OVU1fTUFTSwkoKDE8PElJT19JR0ZYX1BfTlVNX0JJVFMpLTEpCisjZGVmaW5lIElJT19JR0ZYX1BfTlVNX1NISUZUCTE2CisjZGVmaW5lIElJT19JR0ZYX0lOSVQod2lkZ2V0LCBwaSwgbm9kZSwgY3B1KQkJCQkoXAorCSgoKHdpZGdldCkgJiBJSU9fSUdGWF9XX05VTV9NQVNLKSA8PCBJSU9fSUdGWF9XX05VTV9TSElGVCkgfAkgXAorCSgoKHBpKSAgICAgJiBJSU9fSUdGWF9QSV9OVU1fTUFTSyk8PCBJSU9fSUdGWF9QSV9OVU1fU0hJRlQpfAkgXAorCSgoKG5vZGUpICAgJiBJSU9fSUdGWF9OX05VTV9NQVNLKSA8PCBJSU9fSUdGWF9OX05VTV9TSElGVCkgfAkgXAorCSgoKGNwdSkgICAgJiBJSU9fSUdGWF9QX05VTV9NQVNLKSA8PCBJSU9fSUdGWF9QX05VTV9TSElGVCkpCisKKworLyogU2NyYXRjaCByZWdpc3RlcnMgKGFsbCBiaXRzIGF2YWlsYWJsZSkgKi8KKyNkZWZpbmUgSUlPX1NDUkFUQ0hfUkVHMCAgICAgICAgSUlPX0lTQ1IwCisjZGVmaW5lIElJT19TQ1JBVENIX1JFRzEgICAgICAgIElJT19JU0NSMQorI2RlZmluZSBJSU9fU0NSQVRDSF9NQVNLICAgICAgICAweGZmZmZmZmZmZmZmZmZmZmZVTAorCisjZGVmaW5lIElJT19TQ1JBVENIX0JJVDBfMCAgICAgIDB4MDAwMDAwMDAwMDAwMDAwMVVMCisjZGVmaW5lIElJT19TQ1JBVENIX0JJVDBfMSAgICAgIDB4MDAwMDAwMDAwMDAwMDAwMlVMCisjZGVmaW5lIElJT19TQ1JBVENIX0JJVDBfMiAgICAgIDB4MDAwMDAwMDAwMDAwMDAwNFVMCisjZGVmaW5lIElJT19TQ1JBVENIX0JJVDBfMyAgICAgIDB4MDAwMDAwMDAwMDAwMDAwOFVMCisjZGVmaW5lIElJT19TQ1JBVENIX0JJVDBfNCAgICAgIDB4MDAwMDAwMDAwMDAwMDAxMFVMCisjZGVmaW5lIElJT19TQ1JBVENIX0JJVDBfNSAgICAgIDB4MDAwMDAwMDAwMDAwMDAyMFVMCisjZGVmaW5lIElJT19TQ1JBVENIX0JJVDBfNiAgICAgIDB4MDAwMDAwMDAwMDAwMDA0MFVMCisjZGVmaW5lIElJT19TQ1JBVENIX0JJVDBfNyAgICAgIDB4MDAwMDAwMDAwMDAwMDA4MFVMCisjZGVmaW5lIElJT19TQ1JBVENIX0JJVDBfOCAgICAgIDB4MDAwMDAwMDAwMDAwMDEwMFVMCisjZGVmaW5lIElJT19TQ1JBVENIX0JJVDBfOSAgICAgIDB4MDAwMDAwMDAwMDAwMDIwMFVMCisjZGVmaW5lIElJT19TQ1JBVENIX0JJVDBfQSAgICAgIDB4MDAwMDAwMDAwMDAwMDQwMFVMCisKKyNkZWZpbmUgSUlPX1NDUkFUQ0hfQklUMV8wICAgICAgMHgwMDAwMDAwMDAwMDAwMDAxVUwKKyNkZWZpbmUgSUlPX1NDUkFUQ0hfQklUMV8xICAgICAgMHgwMDAwMDAwMDAwMDAwMDAyVUwKKy8qIElPIFRyYW5zbGF0aW9uIFRhYmxlIEVudHJpZXMgKi8KKyNkZWZpbmUgSUlPX05VTV9JVFRFUyAgIDcgICAgICAgICAgICAgICAvKiBJVFRFcyBudW1iZXJlZCAwLi42ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSHcgbWFudWFscyBudW1iZXIgdGhlbSAxLi43ISAqLworLyoKKyAqIElJT19JTUVNIFJlZ2lzdGVyIGZpZWxkcy4KKyAqLworI2RlZmluZSBJSU9fSU1FTV9XMEVTRCAgMHgxVUwgICAgICAgICAgICAgLyogV2lkZ2V0IDAgc2h1dCBkb3duIGR1ZSB0byBlcnJvciAqLworI2RlZmluZSBJSU9fSU1FTV9CMEVTRCAgKDFVTCA8PCA0KSAgICAgICAgLyogQlRFIDAgc2h1dCBkb3duIGR1ZSB0byBlcnJvciAqLworI2RlZmluZSBJSU9fSU1FTV9CMUVTRCAgKDFVTCA8PCA4KSAgICAgICAgLyogQlRFIDEgU2h1dCBkb3duIGR1ZSB0byBlcnJvciAqLworCisvKgorICogQXMgYSBwZXJtYW5lbnQgd29ya2Fyb3VuZCBmb3IgYSBidWcgaW4gdGhlIFBJIHNpZGUgb2YgdGhlIHNodWIsIHdlJ3ZlCisgKiByZWRlZmluZWQgYmlnIHdpbmRvdyA3IGFzIHNtYWxsIHdpbmRvdyAwLgorIFhYWCBkb2VzIHRoaXMgc3RpbGwgYXBwbHkgZm9yIFNOMT8/CisgKi8KKyNkZWZpbmUgSFVCX05VTV9CSUdfV0lORE9XICAgICAgKElJT19OVU1fSVRURVMgLSAxKQorCisvKgorICogVXNlIHRoZSB0b3AgYmlnIHdpbmRvdyBhcyBhIHN1cnJvZ2F0ZSBmb3IgdGhlIGZpcnN0IHNtYWxsIHdpbmRvdworICovCisjZGVmaW5lIFNXSU4wX0JJR1dJTiAgICAgICAgICAgIEhVQl9OVU1fQklHX1dJTkRPVworCisjZGVmaW5lIElMQ1NSX1dBUk1fUkVTRVQgICAgICAgIDB4MTAwCisKKy8qCisgKiBDUkIgbWFuaXB1bGF0aW9uIG1hY3JvcworICogICAgICBUaGUgQ1JCIG1hY3JvcyBhcmUgc2xpZ2h0bHkgY29tcGxpY2F0ZWQsIHNpbmNlIHRoZXJlIGFyZSB1cCB0bworICogICAgICBmb3VyIHJlZ2lzdGVycyBhc3NvY2lhdGVkIHdpdGggZWFjaCBDUkIgZW50cnkuCisgKi8KKyNkZWZpbmUgSUlPX05VTV9DUkJTICAgICAgICAgICAgMTUgICAgICAvKiBOdW1iZXIgb2YgQ1JCcyAqLworI2RlZmluZSBJSU9fTlVNX1BDX0NSQlMgICAgICAgICA0ICAgICAgIC8qIE51bWJlciBvZiBwYXJ0aWFsIGNhY2hlIENSQnMgKi8KKyNkZWZpbmUgSUlPX0lDUkJfT0ZGU0VUICAgICAgICAgOAorI2RlZmluZSBJSU9fSUNSQl8wICAgICAgICAgICAgICBJSU9fSUNSQjBfQQorI2RlZmluZSBJSU9fSUNSQl9BRERSX1NIRlQJMgkvKiBTaGlmdCB0byBnZXQgcHJvcGVyIGFkZHJlc3MgKi8KKy8qIFhYWCAtIFRoaXMgaXMgbm93IHR1bmVhYmxlOgorICAgICAgICAjZGVmaW5lIElJT19GSVJTVF9QQ19FTlRSWSAxMgorICovCisKKyNkZWZpbmUgSUlPX0lDUkJfQShfeCkgICgodTY0KShJSU9fSUNSQl8wICsgKDYgKiBJSU9fSUNSQl9PRkZTRVQgKiAoX3gpKSkpCisjZGVmaW5lIElJT19JQ1JCX0IoX3gpICAoKHU2NCkoKGNoYXIgKilJSU9fSUNSQl9BKF94KSArIDEqSUlPX0lDUkJfT0ZGU0VUKSkKKyNkZWZpbmUgSUlPX0lDUkJfQyhfeCkgICgodTY0KSgoY2hhciAqKUlJT19JQ1JCX0EoX3gpICsgMipJSU9fSUNSQl9PRkZTRVQpKQorI2RlZmluZSBJSU9fSUNSQl9EKF94KSAgKCh1NjQpKChjaGFyICopSUlPX0lDUkJfQShfeCkgKyAzKklJT19JQ1JCX09GRlNFVCkpCisjZGVmaW5lIElJT19JQ1JCX0UoX3gpICAoKHU2NCkoKGNoYXIgKilJSU9fSUNSQl9BKF94KSArIDQqSUlPX0lDUkJfT0ZGU0VUKSkKKworI2RlZmluZSBUTlVNX1RPX1dJREdFVF9ERVYoX3RudW0pCShfdG51bSAmIDB4NykKKworLyoKKyAqIHZhbHVlcyBmb3IgImVjb2RlIiBmaWVsZAorICovCisjZGVmaW5lIElJT19JQ1JCX0VDT0RFX0RFUlIgICAgIDAgICAgICAgLyogRGlyZWN0b3J5IGVycm9yIGR1ZSB0byBJSU8gYWNjZXNzICovCisjZGVmaW5lIElJT19JQ1JCX0VDT0RFX1BFUlIgICAgIDEgICAgICAgLyogUG9pc29uIGVycm9yIG9uIElPIGFjY2VzcyAqLworI2RlZmluZSBJSU9fSUNSQl9FQ09ERV9XRVJSICAgICAyICAgICAgIC8qIFdyaXRlIGVycm9yIGJ5IElJTyBhY2Nlc3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBlLmcuIFdJTlYgdG8gYSBSZWFkIG9ubHkgbGluZS4gKi8KKyNkZWZpbmUgSUlPX0lDUkJfRUNPREVfQUVSUiAgICAgMyAgICAgICAvKiBBY2Nlc3MgZXJyb3IgY2F1c2VkIGJ5IElJTyBhY2Nlc3MgKi8KKyNkZWZpbmUgSUlPX0lDUkJfRUNPREVfUFdFUlIgICAgNCAgICAgICAvKiBFcnJvciBvbiBwYXJ0aWFsIHdyaXRlICAgICAgICovCisjZGVmaW5lIElJT19JQ1JCX0VDT0RFX1BSRVJSICAgIDUgICAgICAgLyogRXJyb3Igb24gcGFydGlhbCByZWFkICAgICAgICAqLworI2RlZmluZSBJSU9fSUNSQl9FQ09ERV9UT1VUICAgICA2ICAgICAgIC8qIENSQiB0aW1lb3V0IGJlZm9yZSBkZWFsbG9jYXRpbmcgKi8KKyNkZWZpbmUgSUlPX0lDUkJfRUNPREVfWFRFUlIgICAgNyAgICAgICAvKiBJbmNvbWluZyB4dGFsayBwa3QgaGFkIGVycm9yIGJpdCAqLworCisvKgorICogVmFsdWVzIGZvciBmaWVsZCBpbXNndHlwZQorICovCisjZGVmaW5lIElJT19JQ1JCX0lNU0dUX1hUQUxLICAgIDAgICAgICAgLyogSW5jb21pbmcgTWVlc3NhZ2UgZnJvbSBYdGFsayAqLworI2RlZmluZSBJSU9fSUNSQl9JTVNHVF9CVEUgICAgICAxICAgICAgIC8qIEluY29taW5nIG1lc3NhZ2UgZnJvbSBCVEUgICAgKi8KKyNkZWZpbmUgSUlPX0lDUkJfSU1TR1RfU04xTkVUICAgMiAgICAgICAvKiBJbmNvbWluZyBtZXNzYWdlIGZyb20gU04xIG5ldCAqLworI2RlZmluZSBJSU9fSUNSQl9JTVNHVF9DUkIgICAgICAzICAgICAgIC8qIEluY29taW5nIG1lc3NhZ2UgZnJvbSBDUkIgPz8/ICAqLworCisvKgorICogdmFsdWVzIGZvciBmaWVsZCBpbml0aWF0b3IuCisgKi8KKyNkZWZpbmUgSUlPX0lDUkJfSU5JVF9YVEFMSyAgICAgMCAgICAgICAvKiBNZXNzYWdlIG9yaWdpbmF0ZWQgaW4geHRhbGsgICovCisjZGVmaW5lIElJT19JQ1JCX0lOSVRfQlRFMCAgICAgIDB4MSAgICAgLyogTWVzc2FnZSBvcmlnaW5hdGVkIGluIEJURSAwICAqLworI2RlZmluZSBJSU9fSUNSQl9JTklUX1NOMU5FVCAgICAweDIgICAgIC8qIE1lc3NhZ2Ugb3JpZ2luYXRlZCBpbiBTTjFuZXQgKi8KKyNkZWZpbmUgSUlPX0lDUkJfSU5JVF9DUkIgICAgICAgMHgzICAgICAvKiBNZXNzYWdlIG9yaWdpbmF0ZWQgaW4gQ1JCID8gICovCisjZGVmaW5lIElJT19JQ1JCX0lOSVRfQlRFMSAgICAgIDB4NSAgICAgLyogTUVzc2FnZSBvcmlnaW5hdGVkIGluIEJURSAxICAqLworCisvKgorICogTnVtYmVyIG9mIGNyZWRpdHMgSHViIHdpZGdldCBoYXMgd2hpbGUgc2VuZGluZyByZXEvcmVzcG9uc2UgdG8KKyAqIHhib3cuCisgKiBWYWx1ZSBvZiAzIGlzIHJlcXVpcmVkIGJ5IFhib3cgMS4xCisgKiBXZSBtYXkgYmUgYWJsZSB0byBpbmNyZWFzZSB0aGlzIHRvIDQgd2l0aCBYYm93IDEuMi4KKyAqLworI2RlZmluZSAgICAgICBIVUJJSV9YQk9XX0NSRURJVCAgICAgICAzCisjZGVmaW5lICAgICAgIEhVQklJX1hCT1dfUkVWMl9DUkVESVQgIDQKKworLyoKKyAqIE51bWJlciBvZiBjcmVkaXRzIHRoYXQgeHRhbGsgZGV2aWNlcyBzaG91bGQgdXNlIHdoZW4gY29tbXVuaWNhdGluZworICogd2l0aCBhIFNIdWIgKGRlcHRoIG9mIFNIdWIncyBxdWV1ZSkuCisgKi8KKyNkZWZpbmUgSFVCX0NSRURJVCA0CisKKy8qCisgKiBTb21lIElJT19QUkIgZmllbGRzCisgKi8KKyNkZWZpbmUgSUlPX1BSQl9NVUxUSV9FUlIJKDFMTCA8PCA2MykKKyNkZWZpbmUgSUlPX1BSQl9TUFVSX1JECQkoMUxMIDw8IDUxKQorI2RlZmluZSBJSU9fUFJCX1NQVVJfV1IJCSgxTEwgPDwgNTApCisjZGVmaW5lIElJT19QUkJfUkRfVE8JCSgxTEwgPDwgNDkpCisjZGVmaW5lIElJT19QUkJfRVJST1IJCSgxTEwgPDwgNDgpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyBTb21lIG9mIHRoZSBJSU8gZmllbGQgbWFza3MgYW5kIHNoaWZ0cyBhcmUgZGVmaW5lZCBoZXJlLgorIFRoaXMgaXMgaW4gb3JkZXIgdG8gbWFpbnRhaW4gY29tcGF0aWJpbGl0eSBpbiBTTjAgYW5kIFNOMSBjb2RlCisgCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIElDTVIgcmVnaXN0ZXIgZmllbGRzCisgKiAoTm90ZTogdGhlIElJT19JQ01SX1BfQ05UIGFuZCBJSU9fSUNNUl9QQ19WTEQgZnJvbSBIdWIgYXJlIG5vdAorICogcHJlc2VudCBpbiBTSHViKQorICovCisKKyNkZWZpbmUgSUlPX0lDTVJfQ1JCX1ZMRF9TSEZUICAgMjAKKyNkZWZpbmUgSUlPX0lDTVJfQ1JCX1ZMRF9NQVNLICAgKDB4N2ZmZlVMIDw8IElJT19JQ01SX0NSQl9WTERfU0hGVCkKKworI2RlZmluZSBJSU9fSUNNUl9GQ19DTlRfU0hGVCAgICAxNgorI2RlZmluZSBJSU9fSUNNUl9GQ19DTlRfTUFTSyAgICAoMHhmIDw8IElJT19JQ01SX0ZDX0NOVF9TSEZUKQorCisjZGVmaW5lIElJT19JQ01SX0NfQ05UX1NIRlQgICAgIDQKKyNkZWZpbmUgSUlPX0lDTVJfQ19DTlRfTUFTSyAgICAgKDB4ZiA8PCBJSU9fSUNNUl9DX0NOVF9TSEZUKQorCisjZGVmaW5lIElJT19JQ01SX1BSRUNJU0UgICAgICAgICgxVUwgPDwgNTIpCisjZGVmaW5lIElJT19JQ01SX0NMUl9SUFBEICAgICAgICgxVUwgPDwgMTMpCisjZGVmaW5lIElJT19JQ01SX0NMUl9SUVBEICAgICAgICgxVUwgPDwgMTIpCisKKy8qCisgKiBJSU8gUElPIERlYWxsb2NhdGlvbiByZWdpc3RlciBmaWVsZCBtYXNrcyA6IChJSU9fSVBEUikKKyBYWFggcHJlc2VudCBidXQgbm90IG5lZWRlZCBpbiBiZWRyb2NrPyAgU2VlIHRoZSBtYW51YWwuCisgKi8KKyNkZWZpbmUgSUlPX0lQRFJfUE5EICAgICgxIDw8IDQpCisKKy8qCisgKiBJSU8gQ1JCIGRlYWxsb2NhdGlvbiByZWdpc3RlciBmaWVsZCBtYXNrczogKElJT19JQ0RSKQorICovCisjZGVmaW5lIElJT19JQ0RSX1BORCAgICAoMSA8PCA0KQorCisvKiAKKyAqIElPIEJURSBMZW5ndGgvU3RhdHVzIChJSU9fSUJMUykgcmVnaXN0ZXIgYml0IGZpZWxkIGRlZmluaXRpb25zCisgKi8KKyNkZWZpbmUgSUJMU19CVVNZCQkoMHgxVUwgPDwgMjApCisjZGVmaW5lIElCTFNfRVJST1JfU0hGVAkJMTYKKyNkZWZpbmUgSUJMU19FUlJPUgkJKDB4MVVMIDw8IElCTFNfRVJST1JfU0hGVCkKKyNkZWZpbmUgSUJMU19MRU5HVEhfTUFTSwkweGZmZmYKKworLyoKKyAqIElPIEJURSBDb250cm9sL1Rlcm1pbmF0ZSByZWdpc3RlciAoSUJDVCkgcmVnaXN0ZXIgYml0IGZpZWxkIGRlZmluaXRpb25zCisgKi8KKyNkZWZpbmUgSUJDVF9QT0lTT04JCSgweDFVTCA8PCA4KQorI2RlZmluZSBJQkNUX05PVElGWQkJKDB4MVVMIDw8IDQpCisjZGVmaW5lIElCQ1RfWkZJTF9NT0RFCQkoMHgxVUwgPDwgMCkKKworLyoKKyAqIElJTyBJbmNvbWluZyBFcnJvciBQYWNrZXQgSGVhZGVyIChJSU9fSUlFUEgxL0lJT19JSUVQSDIpCisgKi8KKyNkZWZpbmUgSUlFUEgxX1ZBTElECQkoMVVMIDw8IDQ0KQorI2RlZmluZSBJSUVQSDFfT1ZFUlJVTgkJKDFVTCA8PCA0MCkKKyNkZWZpbmUgSUlFUEgxX0VSUl9UWVBFX1NIRlQJMzIKKyNkZWZpbmUgSUlFUEgxX0VSUl9UWVBFX01BU0sJMHhmCisjZGVmaW5lIElJRVBIMV9TT1VSQ0VfU0hGVAkyMAorI2RlZmluZSBJSUVQSDFfU09VUkNFX01BU0sJMTEKKyNkZWZpbmUgSUlFUEgxX1NVUFBMX1NIRlQJOAorI2RlZmluZSBJSUVQSDFfU1VQUExfTUFTSwkxMQorI2RlZmluZSBJSUVQSDFfQ01EX1NIRlQJCTAKKyNkZWZpbmUgSUlFUEgxX0NNRF9NQVNLCQk3CisKKyNkZWZpbmUgSUlFUEgyX1RBSUwJCSgxVUwgPDwgNDApCisjZGVmaW5lIElJRVBIMl9BRERSRVNTX1NIRlQJMAorI2RlZmluZSBJSUVQSDJfQUREUkVTU19NQVNLCTM4CisKKyNkZWZpbmUgSUlFUEgxX0VSUl9TSE9SVF9SRVEJMgorI2RlZmluZSBJSUVQSDFfRVJSX1NIT1JUX1JFUExZCTMKKyNkZWZpbmUgSUlFUEgxX0VSUl9MT05HX1JFUQk0CisjZGVmaW5lIElJRVBIMV9FUlJfTE9OR19SRVBMWQk1CisKKy8qCisgKiBJTyBFcnJvciBDbGVhciByZWdpc3RlciBiaXQgZmllbGQgZGVmaW5pdGlvbnMKKyAqLworI2RlZmluZSBJRUNMUl9QSTFfRldEX0lOVAkoMVVMIDw8IDMxKSAgLyogY2xlYXIgUEkxX0ZPUldBUkRfSU5UIGluIGlpZHNyICovCisjZGVmaW5lIElFQ0xSX1BJMF9GV0RfSU5UCSgxVUwgPDwgMzApICAvKiBjbGVhciBQSTBfRk9SV0FSRF9JTlQgaW4gaWlkc3IgKi8KKyNkZWZpbmUgSUVDTFJfU1BVUl9SRF9IRFIJKDFVTCA8PCAyOSkgIC8qIGNsZWFyIHZhbGlkIGJpdCBpbiBpeHNzIHJlZyAqLworI2RlZmluZSBJRUNMUl9CVEUxCQkoMVVMIDw8IDE4KSAgLyogY2xlYXIgYnRlIGVycm9yIDEgKi8KKyNkZWZpbmUgSUVDTFJfQlRFMAkJKDFVTCA8PCAxNykgIC8qIGNsZWFyIGJ0ZSBlcnJvciAwICovCisjZGVmaW5lIElFQ0xSX0NSQVpZCQkoMVVMIDw8IDE2KSAgLyogY2xlYXIgY3JhenkgYml0IGluIHdzdGF0IHJlZyAqLworI2RlZmluZSBJRUNMUl9QUkJfRgkJKDFVTCA8PCAxNSkgIC8qIGNsZWFyIGVyciBiaXQgaW4gUFJCX0YgcmVnICovCisjZGVmaW5lIElFQ0xSX1BSQl9FCQkoMVVMIDw8IDE0KSAgLyogY2xlYXIgZXJyIGJpdCBpbiBQUkJfRSByZWcgKi8KKyNkZWZpbmUgSUVDTFJfUFJCX0QJCSgxVUwgPDwgMTMpICAvKiBjbGVhciBlcnIgYml0IGluIFBSQl9EIHJlZyAqLworI2RlZmluZSBJRUNMUl9QUkJfQwkJKDFVTCA8PCAxMikgIC8qIGNsZWFyIGVyciBiaXQgaW4gUFJCX0MgcmVnICovCisjZGVmaW5lIElFQ0xSX1BSQl9CCQkoMVVMIDw8IDExKSAgLyogY2xlYXIgZXJyIGJpdCBpbiBQUkJfQiByZWcgKi8KKyNkZWZpbmUgSUVDTFJfUFJCX0EJCSgxVUwgPDwgMTApICAvKiBjbGVhciBlcnIgYml0IGluIFBSQl9BIHJlZyAqLworI2RlZmluZSBJRUNMUl9QUkJfOQkJKDFVTCA8PCA5KSAgIC8qIGNsZWFyIGVyciBiaXQgaW4gUFJCXzkgcmVnICovCisjZGVmaW5lIElFQ0xSX1BSQl84CQkoMVVMIDw8IDgpICAgLyogY2xlYXIgZXJyIGJpdCBpbiBQUkJfOCByZWcgKi8KKyNkZWZpbmUgSUVDTFJfUFJCXzAJCSgxVUwgPDwgMCkgICAvKiBjbGVhciBlcnIgYml0IGluIFBSQl8wIHJlZyAqLworCisvKgorICogSUlPIENSQiBjb250cm9sIHJlZ2lzdGVyIEZpZWxkczogSUlPX0lDQ1IgCisgKi8KKyNkZWZpbmUJSUlPX0lDQ1JfUEVORElORwkoMHgxMDAwMCkKKyNkZWZpbmUJSUlPX0lDQ1JfQ01EX01BU0sJKDB4RkYpCisjZGVmaW5lCUlJT19JQ0NSX0NNRF9TSEZUCSg3KQorI2RlZmluZQlJSU9fSUNDUl9DTURfTk9QCSgweDApCS8qIE5vIE9wICovCisjZGVmaW5lCUlJT19JQ0NSX0NNRF9XQUtFCSgweDEwMCkgLyogUmVhY3RpdmF0ZSBDUkIgZW50cnkgYW5kIHByb2Nlc3MgKi8KKyNkZWZpbmUJSUlPX0lDQ1JfQ01EX1RJTUVPVVQJKDB4MjAwKQkvKiBNYWtlIENSQiB0aW1lb3V0ICYgbWFyayBpbnZhbGlkICovCisjZGVmaW5lCUlJT19JQ0NSX0NNRF9FSkVDVAkoMHg0MDApCS8qIENvbnRlbnRzIG9mIGVudHJ5IHdyaXR0ZW4gdG8gbWVtb3J5IAorCQkJCQkgKiB2aWEgYSBXQgorCQkJCQkgKi8KKyNkZWZpbmUJSUlPX0lDQ1JfQ01EX0ZMVVNICSgweDgwMCkKKworLyoKKyAqCisgKiBDUkIgUmVnaXN0ZXIgZGVzY3JpcHRpb24uCisgKgorICogV0FSTklORyAqIFdBUk5JTkcgKiBXQVJOSU5HICogV0FSTklORyAqIFdBUk5JTkcgKiBXQVJOSU5HICogV0FSTklORworICogV0FSTklORyAqIFdBUk5JTkcgKiBXQVJOSU5HICogV0FSTklORyAqIFdBUk5JTkcgKiBXQVJOSU5HICogV0FSTklORworICogV0FSTklORyAqIFdBUk5JTkcgKiBXQVJOSU5HICogV0FSTklORyAqIFdBUk5JTkcgKiBXQVJOSU5HICogV0FSTklORworICogV0FSTklORyAqIFdBUk5JTkcgKiBXQVJOSU5HICogV0FSTklORyAqIFdBUk5JTkcgKiBXQVJOSU5HICogV0FSTklORworICogV0FSTklORyAqIFdBUk5JTkcgKiBXQVJOSU5HICogV0FSTklORyAqIFdBUk5JTkcgKiBXQVJOSU5HICogV0FSTklORworICoKKyAqIE1hbnkgb2YgdGhlIGZpZWxkcyBpbiBDUkIgYXJlIHN0YXR1cyBiaXRzIHVzZWQgYnkgaGFyZHdhcmUKKyAqIGZvciBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgcHJvdG9jb2wuIEl0J3MgdmVyeSBkYW5nZXJvdXMgdG8KKyAqIG1lc3MgYXJvdW5kIHdpdGggdGhlIENSQiByZWdpc3RlcnMuCisgKgorICogSXQncyBPSyB0byByZWFkIHRoZSBDUkIgcmVnaXN0ZXJzIGFuZCB0cnkgdG8gbWFrZSBzZW5zZSBvdXQgb2YgdGhlCisgKiBmaWVsZHMgaW4gQ1JCLgorICoKKyAqIFVwZGF0aW5nIENSQiByZXF1aXJlcyBhbGwgYWN0aXZpdGllcyBpbiBIdWIgSUlPIHRvIGJlIHF1aWVzY2VkLgorICogb3RoZXJ3aXNlLCBhIHdyaXRlIHRvIENSQiBjb3VsZCBjb3JydXB0IG90aGVyIENSQiBlbnRyaWVzLgorICogQ1JCcyBhcmUgaGVyZSBvbmx5IGFzIGEgYmFjayBkb29yIHBlZWsgdG8gc2h1YiBJSU8ncyBzdGF0dXMuCisgKiBRdWllc2NpbmcgaW1wbGllcyAgbm8gZG1hcyBubyBQSU9zCisgKiBlaXRoZXIgZGlyZWN0bHkgZnJvbSB0aGUgY3B1IG9yIGZyb20gc24wbmV0LgorICogdGhpcyBpcyBub3Qgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGRvbmUgZWFzaWx5LiBTbywgQVZPSUQgdXBkYXRpbmcKKyAqIENSQnMuCisgKi8KKworLyoKKyAqIEVhc3kgYWNjZXNzIG1hY3JvcyBmb3IgQ1JCcywgYWxsIDUgcmVnaXN0ZXJzIChBLUUpCisgKi8KK3R5cGVkZWYgaWlfaWNyYjBfYV91X3QgaWNyYmFfdDsKKyNkZWZpbmUgYV9zaWRuICAgICAgICAgIGlpX2ljcmIwX2FfZmxkX3MuaWFfc2lkbgorI2RlZmluZSBhX3RudW0gICAgICAgICAgaWlfaWNyYjBfYV9mbGRfcy5pYV90bnVtCisjZGVmaW5lIGFfYWRkciAgICAgICAgICBpaV9pY3JiMF9hX2ZsZF9zLmlhX2FkZHIKKyNkZWZpbmUgYV92YWxpZCAgICAgICAgIGlpX2ljcmIwX2FfZmxkX3MuaWFfdmxkCisjZGVmaW5lIGFfaW93ICAgICAgICAgICBpaV9pY3JiMF9hX2ZsZF9zLmlhX2lvdworI2RlZmluZSBhX3JlZ3ZhbHVlCWlpX2ljcmIwX2FfcmVndmFsCisKK3R5cGVkZWYgaWlfaWNyYjBfYl91X3QgaWNyYmJfdDsKKyNkZWZpbmUgYl91c2Vfb2xkICAgICAgIGlpX2ljcmIwX2JfZmxkX3MuaWJfdXNlX29sZAorI2RlZmluZSBiX2ltc2d0eXBlICAgICAgaWlfaWNyYjBfYl9mbGRfcy5pYl9pbXNndHlwZQorI2RlZmluZSBiX2ltc2cgICAgICAgICAgaWlfaWNyYjBfYl9mbGRfcy5pYl9pbXNnCisjZGVmaW5lIGJfaW5pdGlhdG9yICAgICBpaV9pY3JiMF9iX2ZsZF9zLmliX2luaXQKKyNkZWZpbmUgYl9leGMgICAgICAgICAgIGlpX2ljcmIwX2JfZmxkX3MuaWJfZXhjCisjZGVmaW5lIGJfYWNrY250ICAgICAgICBpaV9pY3JiMF9iX2ZsZF9zLmliX2Fja19jbnQKKyNkZWZpbmUgYl9yZXNwICAgICAgICAgIGlpX2ljcmIwX2JfZmxkX3MuaWJfcmVzcAorI2RlZmluZSBiX2FjayAgICAgICAgICAgaWlfaWNyYjBfYl9mbGRfcy5pYl9hY2sKKyNkZWZpbmUgYl9ob2xkICAgICAgICAgIGlpX2ljcmIwX2JfZmxkX3MuaWJfaG9sZAorI2RlZmluZSBiX3diICAgICAgICAgICAgaWlfaWNyYjBfYl9mbGRfcy5pYl93YgorI2RlZmluZSBiX2ludHZuICAgICAgICAgaWlfaWNyYjBfYl9mbGRfcy5pYl9pbnR2bgorI2RlZmluZSBiX3N0YWxsX2liICAgICAgaWlfaWNyYjBfYl9mbGRfcy5pYl9zdGFsbF9pYgorI2RlZmluZSBiX3N0YWxsX2ludCAgICAgaWlfaWNyYjBfYl9mbGRfcy5pYl9zdGFsbF9faW50cgorI2RlZmluZSBiX3N0YWxsX2J0ZV8wICAgaWlfaWNyYjBfYl9mbGRfcy5pYl9zdGFsbF9fYnRlXzAKKyNkZWZpbmUgYl9zdGFsbF9idGVfMSAgIGlpX2ljcmIwX2JfZmxkX3MuaWJfc3RhbGxfX2J0ZV8xCisjZGVmaW5lIGJfZXJyb3IgICAgICAgICBpaV9pY3JiMF9iX2ZsZF9zLmliX2Vycm9yCisjZGVmaW5lIGJfZWNvZGUgICAgICAgICBpaV9pY3JiMF9iX2ZsZF9zLmliX2VycmNvZGUKKyNkZWZpbmUgYl9sbmV0dWNlICAgICAgIGlpX2ljcmIwX2JfZmxkX3MuaWJfbG5fdWNlCisjZGVmaW5lIGJfbWFyayAgICAgICAgICBpaV9pY3JiMF9iX2ZsZF9zLmliX21hcmsKKyNkZWZpbmUgYl94ZXJyICAgICAgICAgIGlpX2ljcmIwX2JfZmxkX3MuaWJfeHRfZXJyCisjZGVmaW5lIGJfcmVndmFsdWUJaWlfaWNyYjBfYl9yZWd2YWwKKwordHlwZWRlZiBpaV9pY3JiMF9jX3VfdCBpY3JiY190OworI2RlZmluZSBjX3N1cHBsICAgICAgICAgaWlfaWNyYjBfY19mbGRfcy5pY19zdXBwbAorI2RlZmluZSBjX2JhcnJvcCAgICAgICAgaWlfaWNyYjBfY19mbGRfcy5pY19ibworI2RlZmluZSBjX2RvcmVzcCAgICAgICAgaWlfaWNyYjBfY19mbGRfcy5pY19yZXNwcnFkCisjZGVmaW5lIGNfZ2JyICAgICAgICAgICBpaV9pY3JiMF9jX2ZsZF9zLmljX2dicgorI2RlZmluZSBjX2J0ZW51bSAgICAgICAgaWlfaWNyYjBfY19mbGRfcy5pY19idGVfbnVtCisjZGVmaW5lIGNfY29odHJhbnMgICAgICBpaV9pY3JiMF9jX2ZsZF9zLmljX2N0CisjZGVmaW5lIGNfeHRzaXplICAgICAgICBpaV9pY3JiMF9jX2ZsZF9zLmljX3NpemUKKyNkZWZpbmUgY19zb3VyY2UgICAgICAgIGlpX2ljcmIwX2NfZmxkX3MuaWNfc291cmNlCisjZGVmaW5lIGNfcmVndmFsdWUJaWlfaWNyYjBfY19yZWd2YWwKKworCit0eXBlZGVmIGlpX2ljcmIwX2RfdV90IGljcmJkX3Q7CisjZGVmaW5lIGRfc2xlZXAgICAgICAgICBpaV9pY3JiMF9kX2ZsZF9zLmlkX3NsZWVwCisjZGVmaW5lIGRfcHJpY250ICAgICAgICBpaV9pY3JiMF9kX2ZsZF9zLmlkX3ByX2NudAorI2RlZmluZSBkX3ByaXBzYyAgICAgICAgaWlfaWNyYjBfZF9mbGRfcy5pZF9wcl9wc2MKKyNkZWZpbmUgZF9idGVvcCAgICAgICAgIGlpX2ljcmIwX2RfZmxkX3MuaWRfYnRlX29wCisjZGVmaW5lIGRfYnRlYWRkciAgICAgICBpaV9pY3JiMF9kX2ZsZF9zLmlkX3BhX2JlIC8qIGljX3BhX2JlIGZsZCBoYXMgMiBuYW1lcyovCisjZGVmaW5lIGRfYmVuYWJsZSAgICAgICBpaV9pY3JiMF9kX2ZsZF9zLmlkX3BhX2JlIC8qIGljX3BhX2JlIGZsZCBoYXMgMiBuYW1lcyovCisjZGVmaW5lIGRfcmVndmFsdWUJaWlfaWNyYjBfZF9yZWd2YWwKKwordHlwZWRlZiBpaV9pY3JiMF9lX3VfdCBpY3JiZV90OworI2RlZmluZSBpY3JiZV9jdHh0dmxkICAgaWlfaWNyYjBfZV9mbGRfcy5pZV9jdmxkCisjZGVmaW5lIGljcmJlX3RvdXR2bGQgICBpaV9pY3JiMF9lX2ZsZF9zLmllX3R2bGQKKyNkZWZpbmUgaWNyYmVfY29udGV4dCAgIGlpX2ljcmIwX2VfZmxkX3MuaWVfY29udGV4dAorI2RlZmluZSBpY3JiZV90aW1lb3V0ICAgaWlfaWNyYjBfZV9mbGRfcy5pZV90aW1lb3V0CisjZGVmaW5lIGVfcmVndmFsdWUJaWlfaWNyYjBfZV9yZWd2YWwKKworCisvKiBOdW1iZXIgb2Ygd2lkZ2V0cyBzdXBwb3J0ZWQgYnkgc2h1YiAqLworI2RlZmluZSBIVUJfTlVNX1dJREdFVCAgICAgICAgICA5CisjZGVmaW5lIEhVQl9XSURHRVRfSURfTUlOICAgICAgIDB4OAorI2RlZmluZSBIVUJfV0lER0VUX0lEX01BWCAgICAgICAweGYKKworI2RlZmluZSBIVUJfV0lER0VUX1BBUlRfTlVNICAgICAweGMxMjAKKyNkZWZpbmUgTUFYX0hVQlNfUEVSX1hCT1cgICAgICAgMgorCisvKiBBIGZldyBtb3JlICNkZWZpbmVzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSAqLworI2RlZmluZSBpcHJiX3QgICAgICAgICAgaWlfaXByYjBfdV90CisjZGVmaW5lIGlwcmJfcmVndmFsICAgICBpaV9pcHJiMF9yZWd2YWwKKyNkZWZpbmUgaXByYl9tdWx0X2VycglpaV9pcHJiMF9mbGRfcy5pX211bHRfZXJyCisjZGVmaW5lIGlwcmJfc3B1cl9yZAlpaV9pcHJiMF9mbGRfcy5pX3NwdXJfcmQKKyNkZWZpbmUgaXByYl9zcHVyX3dyCWlpX2lwcmIwX2ZsZF9zLmlfc3B1cl93cgorI2RlZmluZSBpcHJiX3JkX3RvCWlpX2lwcmIwX2ZsZF9zLmlfcmRfdG8KKyNkZWZpbmUgaXByYl9vdmZsb3cgICAgIGlpX2lwcmIwX2ZsZF9zLmlfb2ZfY250CisjZGVmaW5lIGlwcmJfZXJyb3IgICAgICBpaV9pcHJiMF9mbGRfcy5pX2Vycm9yCisjZGVmaW5lIGlwcmJfZmYgICAgICAgICBpaV9pcHJiMF9mbGRfcy5pX2YKKyNkZWZpbmUgaXByYl9tb2RlICAgICAgIGlpX2lwcmIwX2ZsZF9zLmlfbQorI2RlZmluZSBpcHJiX2JuYWtjdHIgICAgaWlfaXByYjBfZmxkX3MuaV9uYgorI2RlZmluZSBpcHJiX2FuYWtjdHIgICAgaWlfaXByYjBfZmxkX3MuaV9uYQorI2RlZmluZSBpcHJiX3h0YWxrY3RyICAgaWlfaXByYjBfZmxkX3MuaV9jCisKKyNkZWZpbmUgTE5LX1NUQVRfV09SS0lORyAgICAgICAgMHgyCQkvKiBMTFAgaXMgd29ya2luZyAqLworCisjZGVmaW5lIElJT19XU1RBVF9FQ1JBWlkgICAgICAgICgxVUxMIDw8IDMyKSAgICAvKiBIdWIgZ29uZSBjcmF6eSAqLworI2RlZmluZSBJSU9fV1NUQVRfVFhSRVRSWSAgICAgICAoMVVMTCA8PCA5KSAgICAgLyogSHViIFR4IFJldHJ5IHRpbWVvdXQgKi8KKyNkZWZpbmUgSUlPX1dTVEFUX1RYUkVUUllfTUFTSyAgKDB4N0YpICAgLyogc2hvdWxkIGJlIDB4RkY/PyAqLworI2RlZmluZSBJSU9fV1NUQVRfVFhSRVRSWV9TSEZUICAoMTYpCisjZGVmaW5lIElJT19XU1RBVF9UWFJFVFJZX0NOVCh3KSAgICAgICAgKCgodykgPj4gSUlPX1dTVEFUX1RYUkVUUllfU0hGVCkgJiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJSU9fV1NUQVRfVFhSRVRSWV9NQVNLKQorCisvKiBOdW1iZXIgb2YgSUkgcGVyZi4gY291bnRlcnMgd2UgY2FuIG11bHRpcGxleCBhdCBvbmNlICovCisKKyNkZWZpbmUgSU9fUEVSRl9TRVRTCTMyCisKKy8qIEJpdCBmb3IgdGhlIHdpZGdldCBpbiBpbmJvdW5kIGFjY2VzcyByZWdpc3RlciAqLworI2RlZmluZSBJSU9fSUlXQV9XSURHRVQoX3cpICAgICAoKHVpbnQ2NF90KSgxVUxMIDw8IF93KSkKKy8qIEJpdCBmb3IgdGhlIHdpZGdldCBpbiBvdXRib3VuZCBhY2Nlc3MgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgSUlPX0lPV0FfV0lER0VUKF93KSAgICAgKCh1aW50NjRfdCkoMVVMTCA8PCBfdykpCisKKy8qIE5PVEU6IFRoZSBmb2xsb3dpbmcgZGVmaW5lIGFzc3VtZXMgdGhhdCB3ZSBhcmUgZ29pbmcgdG8gZ2V0CisgKiB3aWRnZXQgbnVtYmVycyBmcm9tIDggdGhydSBGIGFuZCB0aGUgZGV2aWNlIG51bWJlcnMgd2l0aGluCisgKiB3aWRnZXQgZnJvbSAwIHRocnUgNy4KKyAqLworI2RlZmluZSBJSU9fSUlERU1fV0lER0VUREVWX01BU0sodywgZCkgICgodWludDY0X3QpKDFVTEwgPDwgKDggKiAoKHcpIC0gOCkgKyAoZCkpKSkKKworLyogSU8gSW50ZXJydXB0IERlc3RpbmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lIElJT19JSURTUl9TRU5UX1NISUZUICAgIDI4CisjZGVmaW5lIElJT19JSURTUl9TRU5UX01BU0sgICAgIDB4MzAwMDAwMDAKKyNkZWZpbmUgSUlPX0lJRFNSX0VOQl9TSElGVCAgICAgMjQKKyNkZWZpbmUgSUlPX0lJRFNSX0VOQl9NQVNLICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBJSU9fSUlEU1JfTk9ERV9TSElGVCAgICA5CisjZGVmaW5lIElJT19JSURTUl9OT0RFX01BU0sgICAgIDB4MDAwZmY3MDAKKyNkZWZpbmUgSUlPX0lJRFNSX1BJX0lEX1NISUZUICAgOAorI2RlZmluZSBJSU9fSUlEU1JfUElfSURfTUFTSyAgICAweDAwMDAwMTAwCisjZGVmaW5lIElJT19JSURTUl9MVkxfU0hJRlQgICAgIDAKKyNkZWZpbmUgSUlPX0lJRFNSX0xWTF9NQVNLICAgICAgMHgwMDAwMDBmZgorCisvKiBYdGFsayB0aW1lb3V0IHRocmVzaGhvbGQgcmVnaXN0ZXIgKElJT19JWFRUKSAqLworI2RlZmluZSBJWFRUX1JSU1BfVE9fU0hGVAk1NQkgICAvKiByZWFkIHJlc3BvbnNlIHRpbWVvdXQgKi8KKyNkZWZpbmUgSVhUVF9SUlNQX1RPX01BU0sJKDB4MUZVTEwgPDwgSVhUVF9SUlNQX1RPX1NIRlQpCisjZGVmaW5lIElYVFRfUlJTUF9QU19TSEZUCTMyCSAgIC8qIHJlYWQgcmVzcG9uc2VkIFRPIHByZXNjYWxhciAqLworI2RlZmluZSBJWFRUX1JSU1BfUFNfTUFTSwkoMHg3RkZGRkZVTEwgPDwgSVhUVF9SUlNQX1BTX1NIRlQpCisjZGVmaW5lIElYVFRfVEFJTF9UT19TSEZUCTAJICAgLyogdGFpbCB0aW1lb3V0IGNvdW50ZXIgdGhyZXNob2xkICovCisjZGVmaW5lIElYVFRfVEFJTF9UT19NQVNLCSgweDNGRkZGRkZVTEwgPDwgSVhUVF9UQUlMX1RPX1NIRlQpCisKKy8qCisgKiBUaGUgSU8gTExQIGNvbnRyb2wgc3RhdHVzIHJlZ2lzdGVyIGFuZCB3aWRnZXQgY29udHJvbCByZWdpc3RlcgorICovCisKK3R5cGVkZWYgdW5pb24gaHViaWlfd2NyX3UgeworICAgICAgICB1aW50NjRfdCAgICAgIHdjcl9yZWdfdmFsdWU7CisgICAgICAgIHN0cnVjdCB7CisJICB1aW50NjRfdAl3Y3Jfd2lkZ2V0X2lkOiAgIDQsICAgICAvKiBMTFAgY3Jvc3NiYXIgY3JlZGl0ICovCisJCQl3Y3JfdGFnX21vZGU6CSAxLAkvKiBUYWcgbW9kZSAqLworCQkJd2NyX3JzdmQxOgkgOCwJLyogUmVzZXJ2ZWQgKi8KKwkJCXdjcl94YmFyX2NyZDoJIDMsCS8qIExMUCBjcm9zc2JhciBjcmVkaXQgKi8KKwkJCXdjcl9mX2JhZF9wa3Q6CSAxLAkvKiBGb3JjZSBiYWQgbGxwIHBrdCBlbmFibGUgKi8KKwkJCXdjcl9kaXJfY29uOgkgMSwJLyogd2lkZ2V0IGRpcmVjdCBjb25uZWN0ICovCisJCQl3Y3JfZV90aHJlc2g6CSA1LAkvKiBlbGFzdGljaXR5IHRocmVzaG9sZCAqLworCQkJd2NyX3JzdmQ6CTQxOwkvKiB1bnVzZWQgKi8KKyAgICAgICAgfSB3Y3JfZmllbGRzX3M7Cit9IGh1YmlpX3djcl90OworCisjZGVmaW5lIGl3Y3JfZGlyX2NvbiAgICB3Y3JfZmllbGRzX3Mud2NyX2Rpcl9jb24KKworLyogVGhlIHN0cnVjdHVyZXMgYmVsb3cgYXJlIGRlZmluZWQgdG8gZXh0cmFjdCBhbmQgbW9kaWZ5IHRoZSBpaQorcGVyZm9ybWFuY2UgcmVnaXN0ZXJzICovCisKKy8qIGlvX3BlcmZfc2VsIGFsbG93cyB0aGUgY2FsbGVyIHRvIHNwZWNpZnkgd2hhdCB0ZXN0cyB3aWxsIGJlCisgICBwZXJmb3JtZWQgKi8KKwordHlwZWRlZiB1bmlvbiBpb19wZXJmX3NlbCB7CisgICAgICAgIHVpbnQ2NF90IHBlcmZfc2VsX3JlZzsKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgICAgIHVpbnQ2NF90CXBlcmZfaXBwcjAgOiAgNCwKKwkJCQlwZXJmX2lwcHIxIDogIDQsCisJCQkJcGVyZl9pY2N0ICA6ICA4LAorCQkJCXBlcmZfcnN2ZCAgOiA0ODsKKyAgICAgICAgfSBwZXJmX3NlbF9iaXRzOworfSBpb19wZXJmX3NlbF90OworCisvKiBpb19wZXJmX2NudCBpcyB0byBleHRyYWN0IHRoZSBjb3VudCBmcm9tIHRoZSBzaHViIHJlZ2lzdGVycy4gRHVlIHRvCisgICBoYXJkd2FyZSBwcm9ibGVtcyB0aGVyZSBpcyBvbmx5IG9uZSBjb3VudGVyLCBub3QgdHdvLiAqLworCit0eXBlZGVmIHVuaW9uIGlvX3BlcmZfY250IHsKKyAgICAgICAgdWludDY0X3QgICAgICBwZXJmX2NudDsKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgICAgIHVpbnQ2NF90CXBlcmZfY250ICAgOiAyMCwKKwkJCQlwZXJmX3JzdmQyIDogMTIsCisJCQkJcGVyZl9yc3ZkMSA6IDMyOworICAgICAgICB9IHBlcmZfY250X2JpdHM7CisKK30gaW9fcGVyZl9jbnRfdDsKKwordHlwZWRlZiB1bmlvbiBpcHJ0ZV9hIHsKKwl1aW50NjRfdAllbnRyeTsKKwlzdHJ1Y3QgeworCQl1aW50NjRfdAlpX3JzdmRfMSAgICAgICAgICAgICAgICAgIDoJIDM7CisJCXVpbnQ2NF90CWlfYWRkcgkJCSAgOgkzODsKKwkJdWludDY0X3QJaV9pbml0CQkJICA6CSAzOworCQl1aW50NjRfdAlpX3NvdXJjZQkJICA6CSA4OworCQl1aW50NjRfdAlpX3JzdmQJCQkgIDoJIDI7CisJCXVpbnQ2NF90CWlfd2lkZ2V0CQkgIDoJIDQ7CisJCXVpbnQ2NF90CWlfdG9fY250CQkgIDoJIDU7CisJCXVpbnQ2NF90ICAgICAgIGlfdmxkICAgICAgICAgICAgICAgICAgICAgOiAgICAgIDE7CisJfSBpcHJ0ZV9maWVsZHM7Cit9IGlwcnRlX2FfdDsKKworI2VuZGlmIC8qIF9BU01fSUE2NF9TTl9TSFVCSU9fSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3NuL3NpbXVsYXRvci5oIGIvaW5jbHVkZS9hc20taWE2NC9zbi9zaW11bGF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGViNGY4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taWE2NC9zbi9zaW11bGF0b3IuaApAQCAtMCwwICsxLDI3IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwNCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKi8KKworI2lmbmRlZiBfQVNNX0lBNjRfU05fU0lNVUxBVE9SX0gKKyNkZWZpbmUgX0FTTV9JQTY0X1NOX1NJTVVMQVRPUl9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2lmZGVmIENPTkZJR19JQTY0X1NHSV9TTl9TSU0KKworI2RlZmluZSBTTk1BR0lDIDB4YWVlZWVlZWU4YmFkYmVlZkwKKyNkZWZpbmUgSVNfUlVOTklOR19PTl9TSU1VTEFUT1IoKSAoe2xvbmcgc247IGFzbSgibW92ICUwPWNwdWlkWyUxXSIgOiAiPXIiKHNuKSA6ICJyIigyKSk7IHNuID09IFNOTUFHSUM7fSkKKworI2RlZmluZSBTSU1VTEFUT1JfU0xFRVAoKQlhc20oIm5vcC5pIDB4OGJlZWYiKQorCisjZWxzZQorCisjZGVmaW5lIElTX1JVTk5JTkdfT05fU0lNVUxBVE9SKCkJKDApCisjZGVmaW5lIFNJTVVMQVRPUl9TTEVFUCgpCisKKyNlbmRpZgorCisjZW5kaWYgLyogX0FTTV9JQTY0X1NOX1NJTVVMQVRPUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3NuL3NuMi9zbl9od3BlcmYuaCBiL2luY2x1ZGUvYXNtLWlhNjQvc24vc24yL3NuX2h3cGVyZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwYzRkNmQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3NuL3NuMi9zbl9od3BlcmYuaApAQCAtMCwwICsxLDIyNiBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogRGF0YSB0eXBlcyB1c2VkIGJ5IHRoZSBTTl9TQUxfSFdQRVJGX09QIFNBTCBjYWxsIGZvciBtb25pdG9yaW5nCisgKiBTR0kgQWx0aXggbm9kZSBhbmQgcm91dGVyIGhhcmR3YXJlCisgKgorICogTWFyayBHb29kd2luIDxtYXJrZ3dAc2dpLmNvbT4gTW9uIEF1ZyAzMCAxMjoyMzo0NiBFU1QgMjAwNAorICovCisKKyNpZm5kZWYgU05fSFdQRVJGX0gKKyNkZWZpbmUgU05fSFdQRVJGX0gKKworLyoKKyAqIG9iamVjdCBzdHJ1Y3R1cmUuIFNOX0hXUEVSRl9FTlVNX09CSkVDVFMgYW5kIFNOX0hXUEVSRl9HRVRfQ1BVX0lORk8KKyAqIHJldHVybiBhbiBhcnJheSBvZiB0aGVzZS4gRG8gbm90IGNoYW5nZSB0aGlzIHdpdGhvdXQgYWxzbworICogY2hhbmdpbmcgdGhlIGNvcnJlc3BvbmRpbmcgU0FMIGNvZGUuCisgKi8KKyNkZWZpbmUgU05fSFdQRVJGX01BWFNUUklORwkJMTI4CitzdHJ1Y3Qgc25faHdwZXJmX29iamVjdF9pbmZvIHsKKwl1MzIgaWQ7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJdTY0IHRoaXNfcGFydDoxOworCQkJdTY0IGlzX3NoYXJlZDoxOworCQl9IGZpZWxkczsKKwkJc3RydWN0IHsKKwkJCXU2NCBmbGFnczsKKwkJCXU2NCByZXNlcnZlZDsKKwkJfSBiOworCX0gZjsKKwljaGFyIG5hbWVbU05fSFdQRVJGX01BWFNUUklOR107CisJY2hhciBsb2NhdGlvbltTTl9IV1BFUkZfTUFYU1RSSU5HXTsKKwl1MzIgcG9ydHM7Cit9OworCisjZGVmaW5lIHNuX2h3cF90aGlzX3BhcnQJZi5maWVsZHMudGhpc19wYXJ0CisjZGVmaW5lIHNuX2h3cF9pc19zaGFyZWQJZi5maWVsZHMuaXNfc2hhcmVkCisjZGVmaW5lIHNuX2h3cF9mbGFncwkJZi5iLmZsYWdzCisKKy8qIG1hY3JvcyBmb3Igb2JqZWN0IGNsYXNzaWZpY2F0aW9uICovCisjZGVmaW5lIFNOX0hXUEVSRl9JU19OT0RFKHgpCQkoKHgpICYmIHN0cnN0cigoeCktPm5hbWUsICJTSHViIikpCisjZGVmaW5lIFNOX0hXUEVSRl9JU19JT05PREUoeCkJCSgoeCkgJiYgc3Ryc3RyKCh4KS0+bmFtZSwgIlRJTyIpKQorI2RlZmluZSBTTl9IV1BFUkZfSVNfUk9VVEVSKHgpCQkoKHgpICYmIHN0cnN0cigoeCktPm5hbWUsICJSb3V0ZXIiKSkKKyNkZWZpbmUgU05fSFdQRVJGX0lTX05MM1JPVVRFUih4KQkoKHgpICYmIHN0cnN0cigoeCktPm5hbWUsICJOTDNSb3V0ZXIiKSkKKyNkZWZpbmUgU05fSFdQRVJGX0ZPUkVJR04oeCkJCSgoeCkgJiYgISh4KS0+c25faHdwX3RoaXNfcGFydCAmJiAhKHgpLT5zbl9od3BfaXNfc2hhcmVkKQorI2RlZmluZSBTTl9IV1BFUkZfU0FNRV9PQkpUWVBFKHgseSkJKChTTl9IV1BFUkZfSVNfTk9ERSh4KSAmJiBTTl9IV1BFUkZfSVNfTk9ERSh5KSkgfHxcCisJCQkJCShTTl9IV1BFUkZfSVNfSU9OT0RFKHgpICYmIFNOX0hXUEVSRl9JU19JT05PREUoeSkpIHx8XAorCQkJCQkoU05fSFdQRVJGX0lTX1JPVVRFUih4KSAmJiBTTl9IV1BFUkZfSVNfUk9VVEVSKHkpKSkKKworLyogbnVtYSBwb3J0IHN0cnVjdHVyZSwgU05fSFdQRVJGX0VOVU1fUE9SVFMgcmV0dXJucyBhbiBhcnJheSBvZiB0aGVzZSAqLworc3RydWN0IHNuX2h3cGVyZl9wb3J0X2luZm8geworCXUzMiBwb3J0OworCXUzMiBjb25uX2lkOworCXUzMiBjb25uX3BvcnQ7Cit9OworCisvKiBmb3IgSFdQRVJGX3tHRVQsU0VUfV9NTVJTICovCitzdHJ1Y3Qgc25faHdwZXJmX2RhdGEgeworCXU2NCBhZGRyOworCXU2NCBkYXRhOworfTsKKworLyogdXNlciBpb2N0bCgpIGFyZ3VtZW50LCBzZWUgYmVsb3cgKi8KK3N0cnVjdCBzbl9od3BlcmZfaW9jdGxfYXJncyB7CisgICAgICAgIHU2NCBhcmc7CQkvKiBhcmd1bWVudCwgdXN1YWxseSBhbiBvYmplY3QgaWQgKi8KKyAgICAgICAgdTY0IHN6OyAgICAgICAgICAgICAgICAgLyogc2l6ZSBvZiB0cmFuc2ZlciAqLworICAgICAgICB2b2lkICpwdHI7ICAgICAgICAgICAgICAvKiBwb2ludGVyIHRvIHNvdXJjZS90YXJnZXQgKi8KKyAgICAgICAgdTMyIHYwOwkJCS8qIHNlY29uZCByZXR1cm4gdmFsdWUgKi8KK307CisKKy8qCisgKiBGb3IgU05fSFdQRVJGX3tHRVQsU0VUfV9NTVJTIGFuZCBTTl9IV1BFUkZfT0JKRUNUX0RJU1RBTkNFLAorICogc25faHdwZXJmX2lvY3RsX2FyZ3MuYXJnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBDUFUgb24gd2hpY2gKKyAqIHRvIGNhbGwgU0FMLCBhbmQgd2hldGhlciB0byB1c2UgYW4gaW50ZXJwcm9jZXNzb3IgaW50ZXJydXB0CisgKiBvciB0YXNrIG1pZ3JhdGlvbiBpbiBvcmRlciB0byBkbyBzby4gSWYgdGhlIENQVSBzcGVjaWZpZWQgaXMKKyAqIFNOX0hXUEVSRl9BUkdfQU5ZX0NQVSwgdGhlbiB0aGUgY3VycmVudCBDUFUgd2lsbCBiZSB1c2VkLgorICovCisjZGVmaW5lIFNOX0hXUEVSRl9BUkdfQU5ZX0NQVQkJMHg3ZmZmZmZmZlVMCisjZGVmaW5lIFNOX0hXUEVSRl9BUkdfQ1BVX01BU0sJCTB4N2ZmZmZmZmYwMDAwMDAwMFVMTAorI2RlZmluZSBTTl9IV1BFUkZfQVJHX1VTRV9JUElfTUFTSwkweDgwMDAwMDAwMDAwMDAwMDBVTEwKKyNkZWZpbmUgU05fSFdQRVJGX0FSR19PQkpJRF9NQVNLCTB4MDAwMDAwMDBmZmZmZmZmZlVMTAorCisvKiAKKyAqIGlvY3RsIHJlcXVlc3RzIG9uIHRoZSAic25faHdwZXJmIiBtaXNjIGRldmljZSB0aGF0IGNhbGwgU0FMLgorICovCisjZGVmaW5lIFNOX0hXUEVSRl9PUF9NRU1fQ09QWUlOCQkweDEwMDAKKyNkZWZpbmUgU05fSFdQRVJGX09QX01FTV9DT1BZT1VUCTB4MjAwMAorI2RlZmluZSBTTl9IV1BFUkZfT1BfTUFTSwkJMHgwZmZmCisKKy8qCisgKiBEZXRlcm1pbmUgbWVtIHJlcXVpcmVtZW50LgorICogYXJnCWRvbid0IGNhcmUKKyAqIHN6CTgKKyAqIHAJcG9pbnRlciB0byB1NjQgaW50ZWdlcgorICovCisjZGVmaW5lCVNOX0hXUEVSRl9HRVRfSEVBUFNJWkUJCTEKKworLyoKKyAqIEluc3RhbGwgbWVtIGZvciBTQUwgZHJ2cgorICogYXJnCWRvbid0IGNhcmUKKyAqIHN6CXNpemVvZiBidWZmZXIgcG9pbnRlZCB0byBieSBwCisgKiBwCXBvaW50ZXIgdG8gYnVmZmVyIGZvciBzY3JhdGNoIGFyZWEKKyAqLworI2RlZmluZSBTTl9IV1BFUkZfSU5TVEFMTF9IRUFQCQkyCisKKy8qCisgKiBEZXRlcm1pbmUgbnVtYmVyIG9mIG9iamVjdHMKKyAqIGFyZwlkb24ndCBjYXJlCisgKiBzegk4CisgKiBwCXBvaW50ZXIgdG8gdTY0IGludGVnZXIKKyAqLworI2RlZmluZSBTTl9IV1BFUkZfT0JKRUNUX0NPVU5UCQkoMTB8U05fSFdQRVJGX09QX01FTV9DT1BZT1VUKQorCisvKgorICogRGV0ZXJtaW5lIG9iamVjdCAiZGlzdGFuY2UiLCByZWxhdGl2ZSB0byBhIGNwdS4gVGhpcyBvcGVyYXRpb24gY2FuCisgKiBleGVjdXRlIG9uIGEgZGVzaWduYXRlZCBsb2dpY2FsIGNwdSBudW1iZXIsIHVzaW5nIGVpdGhlciBhbiBJUEkgb3IKKyAqIHZpYSB0YXNrIG1pZ3JhdGlvbi4gSWYgdGhlIGNwdSBudW1iZXIgaXMgU05fSFdQRVJGX0FOWV9DUFUsIHRoZW4KKyAqIHRoZSBjdXJyZW50IENQVSBpcyB1c2VkLiBTZWUgdGhlIFNOX0hXUEVSRl9BUkdfKiBtYWNyb3MgYWJvdmUuCisgKgorICogYXJnCWJpdG1hcCBvZiBJUEkgZmxhZywgY3B1IG51bWJlciBhbmQgb2JqZWN0IGlkCisgKiBzegk4CisgKiBwCXBvaW50ZXIgdG8gdTY0IGludGVnZXIKKyAqLworI2RlZmluZSBTTl9IV1BFUkZfT0JKRUNUX0RJU1RBTkNFCSgxMXxTTl9IV1BFUkZfT1BfTUVNX0NPUFlPVVQpCisKKy8qCisgKiBFbnVtZXJhdGUgb2JqZWN0cy4gU3BlY2lhbCBjYXNlIGlmIHN6ID09IDgsIHJldHVybnMgdGhlIHJlcXVpcmVkCisgKiBidWZmZXIgc2l6ZS4KKyAqIGFyZwlkb24ndCBjYXJlCisgKiBzeglzaXplb2YgYnVmZmVyIHBvaW50ZWQgdG8gYnkgcAorICogcAlwb2ludGVyIHRvIGFycmF5IG9mIHN0cnVjdCBzbl9od3BlcmZfb2JqZWN0X2luZm8KKyAqLworI2RlZmluZSBTTl9IV1BFUkZfRU5VTV9PQkpFQ1RTCQkoMTJ8U05fSFdQRVJGX09QX01FTV9DT1BZT1VUKQorCisvKgorICogRW51bWVyYXRlIE51bWFMaW5rIHBvcnRzIGZvciBhbiBvYmplY3QuIFNwZWNpYWwgY2FzZSBpZiBzeiA9PSA4LAorICogcmV0dXJucyB0aGUgcmVxdWlyZWQgYnVmZmVyIHNpemUuCisgKiBhcmcJb2JqZWN0IGlkCisgKiBzeglzaXplb2YgYnVmZmVyIHBvaW50ZWQgdG8gYnkgcAorICogcAlwb2ludGVyIHRvIGFycmF5IG9mIHN0cnVjdCBzbl9od3BlcmZfcG9ydF9pbmZvCisgKi8KKyNkZWZpbmUgU05fSFdQRVJGX0VOVU1fUE9SVFMJCSgxM3xTTl9IV1BFUkZfT1BfTUVNX0NPUFlPVVQpCisKKy8qCisgKiBTRVQvR0VUIG1lbW9yeSBtYXBwZWQgcmVnaXN0ZXJzLiBUaGVzZSBvcGVyYXRpb25zIGNhbiBleGVjdXRlCisgKiBvbiBhIGRlc2lnbmF0ZWQgbG9naWNhbCBjcHUgbnVtYmVyLCB1c2luZyBlaXRoZXIgYW4gSVBJIG9yIHZpYQorICogdGFzayBtaWdyYXRpb24uIElmIHRoZSBjcHUgbnVtYmVyIGlzIFNOX0hXUEVSRl9BTllfQ1BVLCB0aGVuCisgKiB0aGUgY3VycmVudCBDUFUgaXMgdXNlZC4gU2VlIHRoZSBTTl9IV1BFUkZfQVJHXyogbWFjcm9zIGFib3ZlLgorICoKKyAqIGFyZwliaXRtYXAgb2YgaXBpIGZsYWcsIGNwdSBudW1iZXIgYW5kIG9iamVjdCBpZAorICogc3oJc2l6ZW9mIGJ1ZmZlciBwb2ludGVkIHRvIGJ5IHAKKyAqIHAJcG9pbnRlciB0byBhcnJheSBvZiBzdHJ1Y3Qgc25faHdwZXJmX2RhdGEKKyAqLworI2RlZmluZSBTTl9IV1BFUkZfU0VUX01NUlMJCSgxNHxTTl9IV1BFUkZfT1BfTUVNX0NPUFlJTikKKyNkZWZpbmUgU05fSFdQRVJGX0dFVF9NTVJTCQkoMTV8U05fSFdQRVJGX09QX01FTV9DT1BZT1VUfCBcCisJCQkJCSAgICBTTl9IV1BFUkZfT1BfTUVNX0NPUFlJTikKKy8qCisgKiBMb2NrIGEgc2hhcmVkIG9iamVjdAorICogYXJnCW9iamVjdCBpZAorICogc3oJZG9uJ3QgY2FyZQorICogcAlkb24ndCBjYXJlCisgKi8KKyNkZWZpbmUgU05fSFdQRVJGX0FDUVVJUkUJCTE2CisKKy8qCisgKiBVbmxvY2sgYSBzaGFyZWQgb2JqZWN0CisgKiBhcmcJb2JqZWN0IGlkCisgKiBzeglkb24ndCBjYXJlCisgKiBwCWRvbid0IGNhcmUKKyAqLworI2RlZmluZSBTTl9IV1BFUkZfUkVMRUFTRQkJMTcKKworLyoKKyAqIEJyZWFrIGEgbG9jayBvbiBhIHNoYXJlZCBvYmplY3QKKyAqIGFyZwlvYmplY3QgaWQKKyAqIHN6CWRvbid0IGNhcmUKKyAqIHAJZG9uJ3QgY2FyZQorICovCisjZGVmaW5lIFNOX0hXUEVSRl9GT1JDRV9SRUxFQVNFCQkxOAorCisvKgorICogaW9jdGwgcmVxdWVzdHMgb24gInNuX2h3cGVyZiIgdGhhdCBkbyBub3QgY2FsbCBTQUwKKyAqLworCisvKgorICogZ2V0IGNwdSBpbmZvIGFzIGFuIGFycmF5IG9mIGh3cGVyZl9vYmplY3RfaW5mb190LiAKKyAqIGlkIGlzIGxvZ2ljYWwgQ1BVIG51bWJlciwgbmFtZSBpcyBkZXNjcmlwdGlvbiwgbG9jYXRpb24KKyAqIGlzIGdlb2lkIChlLmcuIDAwMWMwNCMxYykuIFNwZWNpYWwgY2FzZSBpZiBzeiA9PSA4LAorICogcmV0dXJucyB0aGUgcmVxdWlyZWQgYnVmZmVyIHNpemUuCisgKgorICogYXJnCWRvbid0IGNhcmUKKyAqIHN6CXNpemVvZiBidWZmZXIgcG9pbnRlZCB0byBieSBwCisgKiBwCXBvaW50ZXIgdG8gYXJyYXkgb2Ygc3RydWN0IHNuX2h3cGVyZl9vYmplY3RfaW5mbworICovCisjZGVmaW5lIFNOX0hXUEVSRl9HRVRfQ1BVX0lORk8JCSgxMDB8U05fSFdQRVJGX09QX01FTV9DT1BZT1VUKQorCisvKgorICogR2l2ZW4gYW4gb2JqZWN0IGlkLCByZXR1cm4gaXQncyBub2RlIG51bWJlciAoYWthIGNub2RlKS4KKyAqIGFyZwlvYmplY3QgaWQKKyAqIHN6CTgKKyAqIHAJcG9pbnRlciB0byB1NjQgaW50ZWdlcgorICovCisjZGVmaW5lIFNOX0hXUEVSRl9HRVRfT0JKX05PREUJCSgxMDF8U05fSFdQRVJGX09QX01FTV9DT1BZT1VUKQorCisvKgorICogR2l2ZW4gYSBub2RlIG51bWJlciAoY25vZGUpLCByZXR1cm4gaXQncyBuYXNpZC4KKyAqIGFyZwlvcmRpbmFsIG5vZGUgbnVtYmVyIChha2EgY25vZGVpZCkKKyAqIHN6CTgKKyAqIHAJcG9pbnRlciB0byB1NjQgaW50ZWdlcgorICovCisjZGVmaW5lIFNOX0hXUEVSRl9HRVRfTk9ERV9OQVNJRAkoMTAyfFNOX0hXUEVSRl9PUF9NRU1fQ09QWU9VVCkKKworLyogcmV0dXJuIGNvZGVzICovCisjZGVmaW5lIFNOX0hXUEVSRl9PUF9PSwkJCTAKKyNkZWZpbmUgU05fSFdQRVJGX09QX05PTUVNCQkxCisjZGVmaW5lIFNOX0hXUEVSRl9PUF9OT19QRVJNCQkyCisjZGVmaW5lIFNOX0hXUEVSRl9PUF9JT19FUlJPUgkJMworI2RlZmluZSBTTl9IV1BFUkZfT1BfQlVTWQkJNAorI2RlZmluZSBTTl9IV1BFUkZfT1BfUkVDT05GSUdVUkUJMjUzCisjZGVmaW5lIFNOX0hXUEVSRl9PUF9JTlZBTAkJMjU0CisKKyNlbmRpZgkJCQkvKiBTTl9IV1BFUkZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9zbi9zbl9jcHVpZC5oIGIvaW5jbHVkZS9hc20taWE2NC9zbi9zbl9jcHVpZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4NTQzNWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3NuL3NuX2NwdWlkLmgKQEAgLTAsMCArMSwxNDQgQEAKKy8qIAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMC0yMDA0IFNpbGljb24gR3JhcGhpY3MsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqLworCisKKyNpZm5kZWYgX0FTTV9JQTY0X1NOX1NOX0NQVUlEX0gKKyNkZWZpbmUgX0FTTV9JQTY0X1NOX1NOX0NQVUlEX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGFzbS9zbi9hZGRycy5oPgorI2luY2x1ZGUgPGFzbS9zbi9wZGEuaD4KKyNpbmNsdWRlIDxhc20vaW50cmluc2ljcy5oPgorCisKKy8qCisgKiBGdW5jdGlvbnMgZm9yIGNvbnZlcnRpbmcgYmV0d2VlbiBjcHVpZHMsIG5vZGVpZHMgYW5kIE5BU0lEcy4KKyAqIAorICogVGhlc2UgYXJlIGZvciBTR0kgcGxhdGZvcm1zIG9ubHkuCisgKgorICovCisKKworCisKKy8qCisgKiAgRGVmaW5pdGlvbnMgb2YgdGVybXMgKHRoZXNlIGRlZmluaXRpb25zIGFyZSBmb3IgSUE2NCBPTkxZLiBPdGhlciBhcmNoaXRlY3R1cmVzCisgKiAgdXNlIGNwdWlkL2NwdW51bSBxdWl0ZSBkZWZmZXJlbnRseSk6CisgKgorICoJICAgQ1BVSUQgLSBhIG51bWJlciBpbiByYW5nZSBvZiAwLi5OUl9DUFVTLTEgdGhhdCB1bmlxdWVseSBpZGVudGlmaWVzCisgKgkJdGhlIGNwdS4gVGhlIHZhbHVlIGNwdWlkIGhhcyBubyBzaWduaWZpY2FuY2Ugb24gSUE2NCBvdGhlciB0aGFuCisgKgkJdGhlIGJvb3QgY3B1IGlzIDAuCisgKgkJCXNtcF9wcm9jZXNzb3JfaWQoKSByZXR1cm5zIHRoZSBjcHVpZCBvZiB0aGUgY3VycmVudCBjcHUuCisgKgorICogCSAgIENQVV9QSFlTSUNBTF9JRCAoYWxzbyBrbm93biBhcyBIQVJEX1BST0NFU1NPUl9JRCkKKyAqCQlUaGlzIGlzIHRoZSBzYW1lIGFzIDMxOjI0IG9mIHRoZSBwcm9jZXNzb3IgTElEIHJlZ2lzdGVyCisgKgkJCWhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpLSBjcHVfcGh5c2ljYWxfaWQgb2YgY3VycmVudCBwcm9jZXNzb3IKKyAqCQkJY3B1X3BoeXNpY2FsX2lkKGNwdWlkKSAtIGNvbnZlcnQgYSA8Y3B1aWQ+IHRvIGEgPHBoeXNpY2FsX2NwdWlkPgorICoJCQljcHVfbG9naWNhbF9pZChwaHlfaWQpIC0gY29udmVydCBhIDxwaHlzaWNhbF9jcHVpZD4gdG8gYSA8Y3B1aWQ+IAorICoJCQkJKiBub3QgcmVhbCBlZmZpY2llbnQgLSBkb24ndCB1c2UgaW4gcGVyZiBjcml0aWNhbCBjb2RlCisgKgorICogICAgICAgICBTTElDRSAtIGEgbnVtYmVyIGluIHRoZSByYW5nZSBvZiAwIC0gMyAodHlwaWNhbGx5KSB0aGF0IHJlcHJlc2VudHMgdGhlCisgKgkJY3B1IG51bWJlciBvbiBhIGJyaWNrLgorICoKKyAqCSAgIFNVQk5PREUgLSAoYWxtb3N0IG9ic29sZXRlKSB0aGUgbnVtYmVyIG9mIHRoZSBGU0IgdGhhdCBhIGNwdSBpcworICoJCWNvbm5lY3RlZCB0by4gVGhpcyBpcyBhbHNvIHRoZSBzYW1lIGFzIHRoZSBQSSBudW1iZXIuIFVzdWFsbHkgMCBvciAxLgorICoKKyAqCU5PVEUhISE6IHRoZSB2YWx1ZSBvZiB0aGUgYml0cyBpbiB0aGUgY3B1IHBoeXNpY2FsIGlkIChTQVBJQ2lkIG9yIExJRCkgb2YgYSBjcHUgaGFzIG5vIAorICoJc2lnbmlmaWNhbmNlLiBUaGUgU0FQSUMgaWQgKExJRCkgaXMgYSAxNi1iaXQgY29va2llIHRoYXQgaGFzIG1lYW5pbmcgb25seSB0byB0aGUgUFJPTS4KKyAqCisgKgorICogVGhlIG1hY3JvcyBjb252ZXJ0IGJldHdlZW4gY3B1IHBoeXNpY2FsIGlkcyAmIHNsaWNlL25hc2lkL2Nub2RlaWQuCisgKiBUaGVzZSB0ZXJtcyBhcmUgZGVzY3JpYmVkIGJlbG93OgorICoKKyAqCisgKiBCcmljaworICogICAgICAgICAgLS0tLS0gICAtLS0tLSAgICAgICAgICAgLS0tLS0gICAtLS0tLSAgICAgICBDUFUKKyAqICAgICAgICAgIHwgMCB8ICAgfCAxIHwgICAgICAgICAgIHwgMCB8ICAgfCAxIHwgICAgICAgU0xJQ0UKKyAqICAgICAgICAgIC0tLS0tICAgLS0tLS0gICAgICAgICAgIC0tLS0tICAgLS0tLS0KKyAqICAgICAgICAgICAgfCAgICAgICB8ICAgICAgICAgICAgICAgfCAgICAgICB8CisgKiAgICAgICAgICAgIHwgICAgICAgfCAgICAgICAgICAgICAgIHwgICAgICAgfAorICogICAgICAgICAgMCB8ICAgICAgIHwgMiAgICAgICAgICAgMCB8ICAgICAgIHwgMiAgICAgICBGU0IgU0xPVAorICogICAgICAgICAgICAgLS0tLS0tLSAgICAgICAgICAgICAgICAgLS0tLS0tLSAgCisgKiAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8CisgKiAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8CisgKiAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8CisgKiAgICAgICAgICAgICAtLS0tLS0tLS0tLS0gICAgICAtLS0tLS0tLS0tLS0tCisgKiAgICAgICAgICAgICB8ICAgICAgICAgIHwgICAgICB8ICAgICAgICAgICB8CisgKiAgICAgICAgICAgICB8ICAgIFNIVUIgIHwgICAgICB8ICAgU0hVQiAgICB8ICAgICAgICBOQVNJRCAgICgwLi5NQVhfTkFTSURTKQorICogICAgICAgICAgICAgfCAgICAgICAgICB8LS0tLS0gfCAgICAgICAgICAgfCAgICAgICAgQ05PREVJRCAoMC4ubnVtX2NvbXBhY3Rfbm9kZXMtMSkKKyAqICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgIHwgICAgICAgICAgIHwKKyAqICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgIHwgICAgICAgICAgIHwKKyAqICAgICAgICAgICAgIC0tLS0tLS0tLS0tLSAgICAgIC0tLS0tLS0tLS0tLS0KKyAqICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgKgorICovCisKKyNpZm5kZWYgQ09ORklHX1NNUAorI2RlZmluZSBjcHVfcGh5c2ljYWxfaWQoY3B1aWQpCQkJKChpYTY0X2dldHJlZyhfSUE2NF9SRUdfQ1JfTElEKSA+PiAxNikgJiAweGZmZmYpCisjZW5kaWYKKworCisjZGVmaW5lIGdldF9ub2RlX251bWJlcihhZGRyKQkJCU5BU0lEX0dFVChhZGRyKQorCisvKgorICogTk9URTogb24gbm9uLU1QIHN5c3RlbXMsIG9ubHkgY3B1aWQgMCBleGlzdHMKKyAqLworCitleHRlcm4gc2hvcnQgcGh5c2ljYWxfbm9kZV9tYXBbXTsJCQkvKiBpbmRleGVkIGJ5IG5hc2lkIHRvIGdldCBjbm9kZSAqLworCisvKgorICogTWFjcm9zIGZvciByZXRyaWV2aW5nIGluZm8gYWJvdXQgY3VycmVudCBjcHUKKyAqLworI2RlZmluZSBnZXRfbmFzaWQoKQkJCShub2RlcGRhLT5waHlzX2NwdWlkW3NtcF9wcm9jZXNzb3JfaWQoKV0ubmFzaWQpCisjZGVmaW5lIGdldF9zdWJub2RlKCkJCQkobm9kZXBkYS0+cGh5c19jcHVpZFtzbXBfcHJvY2Vzc29yX2lkKCldLnN1Ym5vZGUpCisjZGVmaW5lIGdldF9zbGljZSgpCQkJKG5vZGVwZGEtPnBoeXNfY3B1aWRbc21wX3Byb2Nlc3Nvcl9pZCgpXS5zbGljZSkKKyNkZWZpbmUgZ2V0X2Nub2RlKCkJCQkobm9kZXBkYS0+cGh5c19jcHVpZFtzbXBfcHJvY2Vzc29yX2lkKCldLmNub2RlKQorI2RlZmluZSBnZXRfc2FwaWNpZCgpCQkJKChpYTY0X2dldHJlZyhfSUE2NF9SRUdfQ1JfTElEKSA+PiAxNikgJiAweGZmZmYpCisKKy8qCisgKiBNYWNyb3MgZm9yIHJldHJpZXZpbmcgaW5mbyBhYm91dCBhbiBhcmJpdHJhcnkgY3B1CisgKgljcHVpZCAtIGxvZ2ljYWwgY3B1IGlkCisgKi8KKyNkZWZpbmUgY3B1aWRfdG9fbmFzaWQoY3B1aWQpCQkobm9kZXBkYS0+cGh5c19jcHVpZFtjcHVpZF0ubmFzaWQpCisjZGVmaW5lIGNwdWlkX3RvX3N1Ym5vZGUoY3B1aWQpCQkobm9kZXBkYS0+cGh5c19jcHVpZFtjcHVpZF0uc3Vibm9kZSkKKyNkZWZpbmUgY3B1aWRfdG9fc2xpY2UoY3B1aWQpCQkobm9kZXBkYS0+cGh5c19jcHVpZFtjcHVpZF0uc2xpY2UpCisjZGVmaW5lIGNwdWlkX3RvX2Nub2RlaWQoY3B1aWQpCQkocGh5c2ljYWxfbm9kZV9tYXBbY3B1aWRfdG9fbmFzaWQoY3B1aWQpXSkKKworCisvKgorICogRG9udCB1c2UgdGhlIGZvbGxvd2luZyBpbiBwZXJmb3JtYW5jZSBjcml0aWNhbCBjb2RlLiBUaGV5IHJlcXVpcmUgc2NhbnMKKyAqIG9mIHBvdGVudGlhbGx5IGxhcmdlIHRhYmxlcy4KKyAqLworZXh0ZXJuIGludCBuYXNpZF9zbGljZV90b19jcHVpZChpbnQsIGludCk7CisjZGVmaW5lIG5hc2lkX3NsaWNlX3RvX2NwdV9waHlzaWNhbF9pZChuYXNpZCwgc2xpY2UpCQkJXAorCWNwdV9waHlzaWNhbF9pZChuYXNpZF9zbGljZV90b19jcHVpZChuYXNpZCwgc2xpY2UpKQorCisvKgorICogY25vZGVpZF90b19uYXNpZCAtIGNvbnZlcnQgYSBjbm9kZWlkIHRvIGEgTkFTSUQKKyAqCU1hY3JvIHJlbGllcyBvbiBwZ19kYXRhIGZvciBhIG5vZGUgYmVpbmcgb24gdGhlIG5vZGUgaXRzZWxmLgorICoJSnVzdCBleHRyYWN0IHRoZSBOQVNJRCBmcm9tIHRoZSBwb2ludGVyLgorICoKKyAqLworI2RlZmluZSBjbm9kZWlkX3RvX25hc2lkKGNub2RlaWQpCXBkYS0+Y25vZGVpZF90b19uYXNpZF90YWJsZVtjbm9kZWlkXQorIAorLyoKKyAqIG5hc2lkX3RvX2Nub2RlaWQgLSBjb252ZXJ0IGEgTkFTSUQgdG8gYSBjbm9kZWlkCisgKi8KKyNkZWZpbmUgbmFzaWRfdG9fY25vZGVpZChuYXNpZCkJCShwaHlzaWNhbF9ub2RlX21hcFtuYXNpZF0pCisKKy8qCisgKiBwYXJ0aXRpb25fY29oZXJlbmNlX2lkIC0gZ2V0IHRoZSBjb2hlcmVuY2UgSUQgb2YgdGhlIGN1cnJlbnQgcGFydGl0aW9uCisgKi8KK2V4dGVybiB1OCBzbl9jb2hlcmVuY3lfaWQ7CisjZGVmaW5lIHBhcnRpdGlvbl9jb2hlcmVuY2VfaWQoKQkoc25fY29oZXJlbmN5X2lkKQorCisjZW5kaWYgLyogX0FTTV9JQTY0X1NOX1NOX0NQVUlEX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9zbi9zbl9mcnUuaCBiL2luY2x1ZGUvYXNtLWlhNjQvc24vc25fZnJ1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGMyMWFjMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvc24vc25fZnJ1LmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5Mi0xOTk3LDE5OTktMjAwNCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKi8KKyNpZm5kZWYgX0FTTV9JQTY0X1NOX1NOX0ZSVV9ICisjZGVmaW5lIF9BU01fSUE2NF9TTl9TTl9GUlVfSAorCisjZGVmaW5lIE1BWF9ESU1NUwkJCTgJIC8qIG1heCAjIG9mIGRpbW0gYmFua3MgKi8KKyNkZWZpbmUgTUFYX1BDSURFVgkJCTgJIC8qIG1heCAjIG9mIHBjaSBkZXZpY2VzIG9uIGEgcGNpIGJ1cyAqLworCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgY29uZmlkZW5jZV90OworCit0eXBlZGVmIHN0cnVjdCBrZl9tZW1fcyB7CisJY29uZmlkZW5jZV90IGttX2NvbmZpZGVuY2U7IC8qIGNvbmZpZGVuY2UgbGV2ZWwgdGhhdCB0aGUgbWVtb3J5IGlzIGJhZAorCQkJCSAgICAgKiBpcyB0aGlzIG5lY2Vzc2FyeSA/CisJCQkJICAgICAqLworCWNvbmZpZGVuY2VfdCBrbV9kaW1tW01BWF9ESU1NU107CisJCQkJICAgIC8qIGNvbmZpZGVuY2UgbGV2ZWwgdGhhdCBkaW1tW2ldIGlzIGJhZAorCQkJCSAgICAgKkkgdGhpbmsgdGhpcyBpcyB0aGUgcmlnaHQgbnVtYmVyCisJCQkJICAgICAqLworCit9IGtmX21lbV90OworCit0eXBlZGVmIHN0cnVjdCBrZl9jcHVfcyB7CisJY29uZmlkZW5jZV90CWtjX2NvbmZpZGVuY2U7IC8qIGNvbmZpZGVuY2UgbGV2ZWwgdGhhdCBjcHUgaXMgYmFkICovCisJY29uZmlkZW5jZV90CWtjX2ljYWNoZTsgLyogY29uZmlkZW5jZSBsZXZlbCB0aGF0IGluc3RyLiBjYWNoZSBpcyBiYWQgKi8KKwljb25maWRlbmNlX3QJa2NfZGNhY2hlOyAvKiBjb25maWRlbmNlIGxldmVsIHRoYXQgZGF0YSAgIGNhY2hlIGlzIGJhZCAqLworCWNvbmZpZGVuY2VfdAlrY19zY2FjaGU7IC8qIGNvbmZpZGVuY2UgbGV2ZWwgdGhhdCBzZWMuICAgY2FjaGUgaXMgYmFkICovCisJY29uZmlkZW5jZV90CWtjX3N5c2J1czsgLyogY29uZmlkZW5jZSBsZXZlbCB0aGF0IHN5c2FkL2NtZC9zdGF0ZSBidXMgaXMgYmFkICovCit9IGtmX2NwdV90OworCisKK3R5cGVkZWYgc3RydWN0IGtmX3BjaV9idXNfcyB7CisJY29uZmlkZW5jZV90CWtwYl9iZWxpZWY7CS8qIGNvbmZpZGVuY2UgbGV2ZWwgIHRoYXQgdGhlICBwY2kgYnVzIGlzIGJhZCAqLworCWNvbmZpZGVuY2VfdAlrcGJfcGNpZGV2X2JlbGllZltNQVhfUENJREVWXTsKKwkJCQkJLyogY29uZmlkZW5jZSBsZXZlbCB0aGF0IHRoZSBwY2kgZGV2IGlzIGJhZCAqLworfSBrZl9wY2lfYnVzX3Q7CisKKworI2VuZGlmIC8qIF9BU01fSUE2NF9TTl9TTl9GUlVfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3NuL3NuX3NhbC5oIGIvaW5jbHVkZS9hc20taWE2NC9zbi9zbl9zYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGMzMWI1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taWE2NC9zbi9zbl9zYWwuaApAQCAtMCwwICsxLDEwMTUgQEAKKyNpZm5kZWYgX0FTTV9JQTY0X1NOX1NOX1NBTF9ICisjZGVmaW5lIF9BU01fSUE2NF9TTl9TTl9TQUxfSAorCisvKgorICogU3lzdGVtIEFic3RyYWN0aW9uIExheWVyIGRlZmluaXRpb25zIGZvciBJQTY0CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDQgU2lsaWNvbiBHcmFwaGljcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqLworCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxhc20vc2FsLmg+CisjaW5jbHVkZSA8YXNtL3NuL3NuX2NwdWlkLmg+CisjaW5jbHVkZSA8YXNtL3NuL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vc24vZ2VvLmg+CisjaW5jbHVkZSA8YXNtL3NuL25vZGVwZGEuaD4KKyNpbmNsdWRlIDxhc20vc24vc2h1Yl9tbXIuaD4KKworLy8gU0dJIFNwZWNpZmljIENhbGxzCisjZGVmaW5lICBTTl9TQUxfUE9EX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAxCisjZGVmaW5lICBTTl9TQUxfU1lTVEVNX1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAyCisjZGVmaW5lICBTTl9TQUxfUFJPQkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAzCisjZGVmaW5lICBTTl9TQUxfR0VUX01BU1RFUl9OQVNJRCAgICAgICAgICAgICAgICAgICAweDAyMDAwMDA0CisjZGVmaW5lCSBTTl9TQUxfR0VUX0tMQ09ORklHX0FERFIJCSAgIDB4MDIwMDAwMDUKKyNkZWZpbmUgIFNOX1NBTF9MT0dfQ0UJCQkJICAgMHgwMjAwMDAwNgorI2RlZmluZSAgU05fU0FMX1JFR0lTVEVSX0NFCQkJICAgMHgwMjAwMDAwNworI2RlZmluZSAgU05fU0FMX0dFVF9QQVJUSVRJT05fQUREUgkJICAgMHgwMjAwMDAwOQorI2RlZmluZSAgU05fU0FMX1hQX0FERFJfUkVHSU9OCQkJICAgMHgwMjAwMDAwZgorI2RlZmluZSAgU05fU0FMX05PX0ZBVUxUX1pPTkVfVklSVFVBTAkJICAgMHgwMjAwMDAxMAorI2RlZmluZSAgU05fU0FMX05PX0ZBVUxUX1pPTkVfUEhZU0lDQUwJCSAgIDB4MDIwMDAwMTEKKyNkZWZpbmUgIFNOX1NBTF9QUklOVF9FUlJPUgkJCSAgIDB4MDIwMDAwMTIKKyNkZWZpbmUgIFNOX1NBTF9TRVRfRVJST1JfSEFORExJTkdfRkVBVFVSRVMJICAgMHgwMjAwMDAxYQkvLyByZWVudHJhbnQKKyNkZWZpbmUgIFNOX1NBTF9HRVRfRklUX0NPTVBUCQkJICAgMHgwMjAwMDAxYgkvLyByZWVudHJhbnQKKyNkZWZpbmUgIFNOX1NBTF9HRVRfU05fSU5GTyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMWMKKyNkZWZpbmUgIFNOX1NBTF9HRVRfU0FQSUNfSU5GTyAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMWQKKyNkZWZpbmUgIFNOX1NBTF9DT05TT0xFX1BVVEMgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMjEKKyNkZWZpbmUgIFNOX1NBTF9DT05TT0xFX0dFVEMgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMjIKKyNkZWZpbmUgIFNOX1NBTF9DT05TT0xFX1BVVFMgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMjMKKyNkZWZpbmUgIFNOX1NBTF9DT05TT0xFX0dFVFMgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMjQKKyNkZWZpbmUgIFNOX1NBTF9DT05TT0xFX0dFVFNfVElNRU9VVCAgICAgICAgICAgICAgIDB4MDIwMDAwMjUKKyNkZWZpbmUgIFNOX1NBTF9DT05TT0xFX1BPTEwgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMjYKKyNkZWZpbmUgIFNOX1NBTF9DT05TT0xFX0lOVFIgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMjcKKyNkZWZpbmUgIFNOX1NBTF9DT05TT0xFX1BVVEIJCQkgICAweDAyMDAwMDI4CisjZGVmaW5lICBTTl9TQUxfQ09OU09MRV9YTUlUX0NIQVJTCQkgICAweDAyMDAwMDJhCisjZGVmaW5lICBTTl9TQUxfQ09OU09MRV9SRUFEQwkJCSAgIDB4MDIwMDAwMmIKKyNkZWZpbmUgIFNOX1NBTF9TWVNDVExfTU9ESURfR0VUCSAgICAgICAgICAgMHgwMjAwMDAzMQorI2RlZmluZSAgU05fU0FMX1NZU0NUTF9HRVQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAzMgorI2RlZmluZSAgU05fU0FMX1NZU0NUTF9JT0JSSUNLX01PRFVMRV9HRVQgICAgICAgICAgMHgwMjAwMDAzMworI2RlZmluZSAgU05fU0FMX1NZU0NUTF9JT19QT1JUU1BFRURfR0VUICAgICAgICAgICAgMHgwMjAwMDAzNQorI2RlZmluZSAgU05fU0FMX1NZU0NUTF9TTEFCX0dFVCAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAzNgorI2RlZmluZSAgU05fU0FMX0JVU19DT05GSUcJCSAgIAkgICAweDAyMDAwMDM3CisjZGVmaW5lICBTTl9TQUxfU1lTX1NFUklBTF9HRVQJCQkgICAweDAyMDAwMDM4CisjZGVmaW5lICBTTl9TQUxfUEFSVElUSU9OX1NFUklBTF9HRVQJCSAgIDB4MDIwMDAwMzkKKyNkZWZpbmUgIFNOX1NBTF9TWVNDVExfUEFSVElUSU9OX0dFVAkJICAgMHgwMjAwMDAzYQorI2RlZmluZSAgU05fU0FMX1NZU1RFTV9QT1dFUl9ET1dOCQkgICAweDAyMDAwMDNiCisjZGVmaW5lICBTTl9TQUxfR0VUX01BU1RFUl9CQVNFSU9fTkFTSUQJCSAgIDB4MDIwMDAwM2MKKyNkZWZpbmUgIFNOX1NBTF9DT0hFUkVOQ0UgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwM2QKKyNkZWZpbmUgIFNOX1NBTF9NRU1QUk9URUNUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwM2UKKyNkZWZpbmUgIFNOX1NBTF9TWVNDVExfRlJVX0NBUFRVUkUJCSAgIDB4MDIwMDAwM2YKKworI2RlZmluZSAgU05fU0FMX1NZU0NUTF9JT0JSSUNLX1BDSV9PUAkJICAgMHgwMjAwMDA0MgkvLyByZWVudHJhbnQKKyNkZWZpbmUJIFNOX1NBTF9JUk9VVEVSX09QCQkJICAgMHgwMjAwMDA0MworI2RlZmluZSAgU05fU0FMX0lPSUZfSU5URVJSVVBUCQkJICAgMHgwMjAwMDA0YQorI2RlZmluZSAgU05fU0FMX0hXUEVSRl9PUAkJCSAgIDB4MDIwMDAwNTAgICAvLyBsb2NrCisjZGVmaW5lICBTTl9TQUxfSU9JRl9FUlJPUl9JTlRFUlJVUFQJCSAgIDB4MDIwMDAwNTEKKworI2RlZmluZSAgU05fU0FMX0lPSUZfU0xPVF9FTkFCTEUJCSAgIDB4MDIwMDAwNTMKKyNkZWZpbmUgIFNOX1NBTF9JT0lGX1NMT1RfRElTQUJMRQkJICAgMHgwMjAwMDA1NAorI2RlZmluZSAgU05fU0FMX0lPSUZfR0VUX0hVQkRFVl9JTkZPCQkgICAweDAyMDAwMDU1CisjZGVmaW5lICBTTl9TQUxfSU9JRl9HRVRfUENJQlVTX0lORk8JCSAgIDB4MDIwMDAwNTYKKyNkZWZpbmUgIFNOX1NBTF9JT0lGX0dFVF9QQ0lERVZfSU5GTwkJICAgMHgwMjAwMDA1NworI2RlZmluZSAgU05fU0FMX0lPSUZfR0VUX1dJREdFVF9ETUFGTFVTSF9MSVNUCSAgIDB4MDIwMDAwNTgKKworI2RlZmluZSBTTl9TQUxfSFVCX0VSUk9SX0lOVEVSUlVQVAkJICAgMHgwMjAwMDA2MAorCisKKy8qCisgKiBTZXJ2aWNlLXNwZWNpZmljIGNvbnN0YW50cworICovCisKKy8qIENvbnNvbGUgaW50ZXJydXB0IG1hbmlwdWxhdGlvbiAqLworCS8qIGFjdGlvbiBjb2RlcyAqLworI2RlZmluZSBTQUxfQ09OU09MRV9JTlRSX09GRiAgICAwICAgICAgIC8qIHR1cm4gdGhlIGludGVycnVwdCBvZmYgKi8KKyNkZWZpbmUgU0FMX0NPTlNPTEVfSU5UUl9PTiAgICAgMSAgICAgICAvKiB0dXJuIHRoZSBpbnRlcnJ1cHQgb24gKi8KKyNkZWZpbmUgU0FMX0NPTlNPTEVfSU5UUl9TVEFUVVMgMgkvKiByZXRyaWV2ZSB0aGUgaW50ZXJydXB0IHN0YXR1cyAqLworCS8qIGludGVycnVwdCBzcGVjaWZpY2F0aW9uICYgc3RhdHVzIHJldHVybiBjb2RlcyAqLworI2RlZmluZSBTQUxfQ09OU09MRV9JTlRSX1hNSVQJMQkvKiBvdXRwdXQgaW50ZXJydXB0ICovCisjZGVmaW5lIFNBTF9DT05TT0xFX0lOVFJfUkVDVgkyCS8qIGlucHV0IGludGVycnVwdCAqLworCisvKiBpbnRlcnJ1cHQgaGFuZGxpbmcgKi8KKyNkZWZpbmUgU0FMX0lOVFJfQUxMT0MJCTEKKyNkZWZpbmUgU0FMX0lOVFJfRlJFRQkJMgorCisvKgorICogSVJvdXRlciAoaS5lLiBnZW5lcmFsaXplZCBzeXN0ZW0gY29udHJvbGxlcikgb3BlcmF0aW9ucworICovCisjZGVmaW5lIFNBTF9JUk9VVEVSX09QRU4JMAkvKiBvcGVuIGEgc3ViY2hhbm5lbCAqLworI2RlZmluZSBTQUxfSVJPVVRFUl9DTE9TRQkxCS8qIGNsb3NlIGEgc3ViY2hhbm5lbCAqLworI2RlZmluZSBTQUxfSVJPVVRFUl9TRU5ECTIJLyogc2VuZCBwYXJ0IG9mIGFuIElSb3V0ZXIgcGFja2V0ICovCisjZGVmaW5lIFNBTF9JUk9VVEVSX1JFQ1YJMwkvKiByZWNlaXZlIHBhcnQgb2YgYW4gSVJvdXRlciBwYWNrZXQgKi8KKyNkZWZpbmUgU0FMX0lST1VURVJfSU5UUl9TVEFUVVMJNAkvKiBjaGVjayB0aGUgaW50ZXJydXB0IHN0YXR1cyBmb3IKKwkJCQkJICogYW4gb3BlbiBzdWJjaGFubmVsCisJCQkJCSAqLworI2RlZmluZSBTQUxfSVJPVVRFUl9JTlRSX09OCTUJLyogZW5hYmxlIGFuIGludGVycnVwdCAqLworI2RlZmluZSBTQUxfSVJPVVRFUl9JTlRSX09GRgk2CS8qIGRpc2FibGUgYW4gaW50ZXJydXB0ICovCisjZGVmaW5lIFNBTF9JUk9VVEVSX0lOSVQJNwkvKiBpbml0aWFsaXplIElSb3V0ZXIgZHJpdmVyICovCisKKy8qIElSb3V0ZXIgaW50ZXJydXB0IG1hc2sgYml0cyAqLworI2RlZmluZSBTQUxfSVJPVVRFUl9JTlRSX1hNSVQJU0FMX0NPTlNPTEVfSU5UUl9YTUlUCisjZGVmaW5lIFNBTF9JUk9VVEVSX0lOVFJfUkVDVglTQUxfQ09OU09MRV9JTlRSX1JFQ1YKKworCisvKgorICogU0FMIEVycm9yIENvZGVzCisgKi8KKyNkZWZpbmUgU0FMUkVUX01PUkVfUEFTU0VTCTEKKyNkZWZpbmUgU0FMUkVUX09LCQkwCisjZGVmaW5lIFNBTFJFVF9OT1RfSU1QTEVNRU5URUQJKC0xKQorI2RlZmluZSBTQUxSRVRfSU5WQUxJRF9BUkcJKC0yKQorI2RlZmluZSBTQUxSRVRfRVJST1IJCSgtMykKKworCisvKioKKyAqIHNuX3NhbF9yZXZfbWFqb3IgLSBnZXQgdGhlIG1ham9yIFNHSSBTQUwgcmV2aXNpb24gbnVtYmVyCisgKgorICogVGhlIFNHSSBQUk9NIHN0b3JlcyBpdHMgdmVyc2lvbiBpbiBzYWxfW2FiXV9yZXZfKG1ham9yfG1pbm9yKS4KKyAqIFRoaXMgcm91dGluZSBzaW1wbHkgZXh0cmFjdHMgdGhlIG1ham9yIHZhbHVlIGZyb20gdGhlCisgKiBAaWE2NF9zYWxfc3lzdGFiIHN0cnVjdHVyZSBjb25zdHJ1Y3RlZCBieSBpYTY0X3NhbF9pbml0KCkuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50Citzbl9zYWxfcmV2X21ham9yKHZvaWQpCit7CisJc3RydWN0IGlhNjRfc2FsX3N5c3RhYiAqc3lzdGFiID0gZWZpLnNhbF9zeXN0YWI7CisKKwlyZXR1cm4gKGludClzeXN0YWItPnNhbF9iX3Jldl9tYWpvcjsKK30KKworLyoqCisgKiBzbl9zYWxfcmV2X21pbm9yIC0gZ2V0IHRoZSBtaW5vciBTR0kgU0FMIHJldmlzaW9uIG51bWJlcgorICoKKyAqIFRoZSBTR0kgUFJPTSBzdG9yZXMgaXRzIHZlcnNpb24gaW4gc2FsX1thYl1fcmV2XyhtYWpvcnxtaW5vcikuCisgKiBUaGlzIHJvdXRpbmUgc2ltcGx5IGV4dHJhY3RzIHRoZSBtaW5vciB2YWx1ZSBmcm9tIHRoZQorICogQGlhNjRfc2FsX3N5c3RhYiBzdHJ1Y3R1cmUgY29uc3RydWN0ZWQgYnkgaWE2NF9zYWxfaW5pdCgpLgorICovCitzdGF0aWMgaW5saW5lIGludAorc25fc2FsX3Jldl9taW5vcih2b2lkKQoreworCXN0cnVjdCBpYTY0X3NhbF9zeXN0YWIgKnN5c3RhYiA9IGVmaS5zYWxfc3lzdGFiOworCQorCXJldHVybiAoaW50KXN5c3RhYi0+c2FsX2JfcmV2X21pbm9yOworfQorCisvKgorICogU3BlY2lmeSB0aGUgbWluaW11bSBQUk9NIHJldnNpb24gcmVxdWlyZWQgZm9yIHRoaXMga2VybmVsLgorICogTm90ZSB0aGF0IHRoZXkncmUgc3RvcmVkIGluIGhleCBmb3JtYXQuLi4KKyAqLworI2RlZmluZSBTTl9TQUxfTUlOX01BSk9SCTB4NCAgLyogU04yIGtlcm5lbHMgbmVlZCBhdCBsZWFzdCBQUk9NIDQuMCAqLworI2RlZmluZSBTTl9TQUxfTUlOX01JTk9SCTB4MAorCisvKgorICogUmV0dXJucyB0aGUgbWFzdGVyIGNvbnNvbGUgbmFzaWQsIGlmIHRoZSBjYWxsIGZhaWxzLCByZXR1cm4gYW4gaWxsZWdhbAorICogdmFsdWUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdTY0CitpYTY0X3NuX2dldF9jb25zb2xlX25hc2lkKHZvaWQpCit7CisJc3RydWN0IGlhNjRfc2FsX3JldHZhbCByZXRfc3R1ZmY7CisKKwlyZXRfc3R1ZmYuc3RhdHVzID0gMDsKKwlyZXRfc3R1ZmYudjAgPSAwOworCXJldF9zdHVmZi52MSA9IDA7CisJcmV0X3N0dWZmLnYyID0gMDsKKwlTQUxfQ0FMTChyZXRfc3R1ZmYsIFNOX1NBTF9HRVRfTUFTVEVSX05BU0lELCAwLCAwLCAwLCAwLCAwLCAwLCAwKTsKKworCWlmIChyZXRfc3R1ZmYuc3RhdHVzIDwgMCkKKwkJcmV0dXJuIHJldF9zdHVmZi5zdGF0dXM7CisKKwkvKiBNYXN0ZXIgY29uc29sZSBuYXNpZCBpcyBpbiAndjAnICovCisJcmV0dXJuIHJldF9zdHVmZi52MDsKK30KKworLyoKKyAqIFJldHVybnMgdGhlIG1hc3RlciBiYXNlaW8gbmFzaWQsIGlmIHRoZSBjYWxsIGZhaWxzLCByZXR1cm4gYW4gaWxsZWdhbAorICogdmFsdWUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdTY0CitpYTY0X3NuX2dldF9tYXN0ZXJfYmFzZWlvX25hc2lkKHZvaWQpCit7CisJc3RydWN0IGlhNjRfc2FsX3JldHZhbCByZXRfc3R1ZmY7CisKKwlyZXRfc3R1ZmYuc3RhdHVzID0gMDsKKwlyZXRfc3R1ZmYudjAgPSAwOworCXJldF9zdHVmZi52MSA9IDA7CisJcmV0X3N0dWZmLnYyID0gMDsKKwlTQUxfQ0FMTChyZXRfc3R1ZmYsIFNOX1NBTF9HRVRfTUFTVEVSX0JBU0VJT19OQVNJRCwgMCwgMCwgMCwgMCwgMCwgMCwgMCk7CisKKwlpZiAocmV0X3N0dWZmLnN0YXR1cyA8IDApCisJCXJldHVybiByZXRfc3R1ZmYuc3RhdHVzOworCisJLyogTWFzdGVyIGJhc2VpbyBuYXNpZCBpcyBpbiAndjAnICovCisJcmV0dXJuIHJldF9zdHVmZi52MDsKK30KKworc3RhdGljIGlubGluZSBjaGFyICoKK2lhNjRfc25fZ2V0X2tsY29uZmlnX2FkZHIobmFzaWRfdCBuYXNpZCkKK3sKKwlzdHJ1Y3QgaWE2NF9zYWxfcmV0dmFsIHJldF9zdHVmZjsKKwlpbnQgY25vZGVpZDsKKworCWNub2RlaWQgPSBuYXNpZF90b19jbm9kZWlkKG5hc2lkKTsKKwlyZXRfc3R1ZmYuc3RhdHVzID0gMDsKKwlyZXRfc3R1ZmYudjAgPSAwOworCXJldF9zdHVmZi52MSA9IDA7CisJcmV0X3N0dWZmLnYyID0gMDsKKwlTQUxfQ0FMTChyZXRfc3R1ZmYsIFNOX1NBTF9HRVRfS0xDT05GSUdfQUREUiwgKHU2NCluYXNpZCwgMCwgMCwgMCwgMCwgMCwgMCk7CisKKwkvKgorCSAqIFdlIHNob3VsZCBwYW5pYyBpZiBhIHZhbGlkIGNub2RlIG5hc2lkIGRvZXMgbm90IHByb2R1Y2UKKwkgKiBhIGtsY29uZmlnIGFkZHJlc3MuCisJICovCisJaWYgKHJldF9zdHVmZi5zdGF0dXMgIT0gMCkgeworCQlwYW5pYygiaWE2NF9zbl9nZXRfa2xjb25maWdfYWRkcjogUmV0dXJuZWQgZXJyb3IgJWx4XG4iLCByZXRfc3R1ZmYuc3RhdHVzKTsKKwl9CisJcmV0dXJuIHJldF9zdHVmZi52MCA/IF9fdmEocmV0X3N0dWZmLnYwKSA6IE5VTEw7Cit9CisKKy8qCisgKiBSZXR1cm5zIHRoZSBuZXh0IGNvbnNvbGUgY2hhcmFjdGVyLgorICovCitzdGF0aWMgaW5saW5lIHU2NAoraWE2NF9zbl9jb25zb2xlX2dldGMoaW50ICpjaCkKK3sKKwlzdHJ1Y3QgaWE2NF9zYWxfcmV0dmFsIHJldF9zdHVmZjsKKworCXJldF9zdHVmZi5zdGF0dXMgPSAwOworCXJldF9zdHVmZi52MCA9IDA7CisJcmV0X3N0dWZmLnYxID0gMDsKKwlyZXRfc3R1ZmYudjIgPSAwOworCVNBTF9DQUxMX05PTE9DSyhyZXRfc3R1ZmYsIFNOX1NBTF9DT05TT0xFX0dFVEMsIDAsIDAsIDAsIDAsIDAsIDAsIDApOworCisJLyogY2hhcmFjdGVyIGlzIGluICd2MCcgKi8KKwkqY2ggPSAoaW50KXJldF9zdHVmZi52MDsKKworCXJldHVybiByZXRfc3R1ZmYuc3RhdHVzOworfQorCisvKgorICogUmVhZCBhIGNoYXJhY3RlciBmcm9tIHRoZSBTQUwgY29uc29sZSBkZXZpY2UsIGFmdGVyIGEgcHJldmlvdXMgaW50ZXJydXB0CisgKiBvciBwb2xsIG9wZXJhdGlvbiBoYXMgZ2l2ZW4gdXMgdG8ga25vdyB0aGF0IGEgY2hhcmFjdGVyIGlzIGF2YWlsYWJsZQorICogdG8gYmUgcmVhZC4KKyAqLworc3RhdGljIGlubGluZSB1NjQKK2lhNjRfc25fY29uc29sZV9yZWFkYyh2b2lkKQoreworCXN0cnVjdCBpYTY0X3NhbF9yZXR2YWwgcmV0X3N0dWZmOworCisJcmV0X3N0dWZmLnN0YXR1cyA9IDA7CisJcmV0X3N0dWZmLnYwID0gMDsKKwlyZXRfc3R1ZmYudjEgPSAwOworCXJldF9zdHVmZi52MiA9IDA7CisJU0FMX0NBTExfTk9MT0NLKHJldF9zdHVmZiwgU05fU0FMX0NPTlNPTEVfUkVBREMsIDAsIDAsIDAsIDAsIDAsIDAsIDApOworCisJLyogY2hhcmFjdGVyIGlzIGluICd2MCcgKi8KKwlyZXR1cm4gcmV0X3N0dWZmLnYwOworfQorCisvKgorICogU2VuZHMgdGhlIGdpdmVuIGNoYXJhY3RlciB0byB0aGUgY29uc29sZS4KKyAqLworc3RhdGljIGlubGluZSB1NjQKK2lhNjRfc25fY29uc29sZV9wdXRjKGNoYXIgY2gpCit7CisJc3RydWN0IGlhNjRfc2FsX3JldHZhbCByZXRfc3R1ZmY7CisKKwlyZXRfc3R1ZmYuc3RhdHVzID0gMDsKKwlyZXRfc3R1ZmYudjAgPSAwOworCXJldF9zdHVmZi52MSA9IDA7CisJcmV0X3N0dWZmLnYyID0gMDsKKwlTQUxfQ0FMTF9OT0xPQ0socmV0X3N0dWZmLCBTTl9TQUxfQ09OU09MRV9QVVRDLCAodWludDY0X3QpY2gsIDAsIDAsIDAsIDAsIDAsIDApOworCisJcmV0dXJuIHJldF9zdHVmZi5zdGF0dXM7Cit9CisKKy8qCisgKiBTZW5kcyB0aGUgZ2l2ZW4gYnVmZmVyIHRvIHRoZSBjb25zb2xlLgorICovCitzdGF0aWMgaW5saW5lIHU2NAoraWE2NF9zbl9jb25zb2xlX3B1dGIoY29uc3QgY2hhciAqYnVmLCBpbnQgbGVuKQoreworCXN0cnVjdCBpYTY0X3NhbF9yZXR2YWwgcmV0X3N0dWZmOworCisJcmV0X3N0dWZmLnN0YXR1cyA9IDA7CisJcmV0X3N0dWZmLnYwID0gMDsgCisJcmV0X3N0dWZmLnYxID0gMDsKKwlyZXRfc3R1ZmYudjIgPSAwOworCVNBTF9DQUxMX05PTE9DSyhyZXRfc3R1ZmYsIFNOX1NBTF9DT05TT0xFX1BVVEIsICh1aW50NjRfdClidWYsICh1aW50NjRfdClsZW4sIDAsIDAsIDAsIDAsIDApOworCisJaWYgKCByZXRfc3R1ZmYuc3RhdHVzID09IDAgKSB7CisJCXJldHVybiByZXRfc3R1ZmYudjA7CisJfQorCXJldHVybiAodTY0KTA7Cit9CisKKy8qCisgKiBQcmludCBhIHBsYXRmb3JtIGVycm9yIHJlY29yZAorICovCitzdGF0aWMgaW5saW5lIHU2NAoraWE2NF9zbl9wbGF0X3NwZWNpZmljX2Vycl9wcmludChpbnQgKCpob29rKShjb25zdCBjaGFyKiwgLi4uKSwgY2hhciAqcmVjKQoreworCXN0cnVjdCBpYTY0X3NhbF9yZXR2YWwgcmV0X3N0dWZmOworCisJcmV0X3N0dWZmLnN0YXR1cyA9IDA7CisJcmV0X3N0dWZmLnYwID0gMDsKKwlyZXRfc3R1ZmYudjEgPSAwOworCXJldF9zdHVmZi52MiA9IDA7CisJU0FMX0NBTExfUkVFTlRSQU5UKHJldF9zdHVmZiwgU05fU0FMX1BSSU5UX0VSUk9SLCAodWludDY0X3QpaG9vaywgKHVpbnQ2NF90KXJlYywgMCwgMCwgMCwgMCwgMCk7CisKKwlyZXR1cm4gcmV0X3N0dWZmLnN0YXR1czsKK30KKworLyoKKyAqIENoZWNrIGZvciBQbGF0Zm9ybSBlcnJvcnMKKyAqLworc3RhdGljIGlubGluZSB1NjQKK2lhNjRfc25fcGxhdF9jcGVpX2hhbmRsZXIodm9pZCkKK3sKKwlzdHJ1Y3QgaWE2NF9zYWxfcmV0dmFsIHJldF9zdHVmZjsKKworCXJldF9zdHVmZi5zdGF0dXMgPSAwOworCXJldF9zdHVmZi52MCA9IDA7CisJcmV0X3N0dWZmLnYxID0gMDsKKwlyZXRfc3R1ZmYudjIgPSAwOworCVNBTF9DQUxMX05PTE9DSyhyZXRfc3R1ZmYsIFNOX1NBTF9MT0dfQ0UsIDAsIDAsIDAsIDAsIDAsIDAsIDApOworCisJcmV0dXJuIHJldF9zdHVmZi5zdGF0dXM7Cit9CisKKy8qCisgKiBDaGVja3MgZm9yIGNvbnNvbGUgaW5wdXQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdTY0CitpYTY0X3NuX2NvbnNvbGVfY2hlY2soaW50ICpyZXN1bHQpCit7CisJc3RydWN0IGlhNjRfc2FsX3JldHZhbCByZXRfc3R1ZmY7CisKKwlyZXRfc3R1ZmYuc3RhdHVzID0gMDsKKwlyZXRfc3R1ZmYudjAgPSAwOworCXJldF9zdHVmZi52MSA9IDA7CisJcmV0X3N0dWZmLnYyID0gMDsKKwlTQUxfQ0FMTF9OT0xPQ0socmV0X3N0dWZmLCBTTl9TQUxfQ09OU09MRV9QT0xMLCAwLCAwLCAwLCAwLCAwLCAwLCAwKTsKKworCS8qIHJlc3VsdCBpcyBpbiAndjAnICovCisJKnJlc3VsdCA9IChpbnQpcmV0X3N0dWZmLnYwOworCisJcmV0dXJuIHJldF9zdHVmZi5zdGF0dXM7Cit9CisKKy8qCisgKiBDaGVja3MgY29uc29sZSBpbnRlcnJ1cHQgc3RhdHVzCisgKi8KK3N0YXRpYyBpbmxpbmUgdTY0CitpYTY0X3NuX2NvbnNvbGVfaW50cl9zdGF0dXModm9pZCkKK3sKKwlzdHJ1Y3QgaWE2NF9zYWxfcmV0dmFsIHJldF9zdHVmZjsKKworCXJldF9zdHVmZi5zdGF0dXMgPSAwOworCXJldF9zdHVmZi52MCA9IDA7CisJcmV0X3N0dWZmLnYxID0gMDsKKwlyZXRfc3R1ZmYudjIgPSAwOworCVNBTF9DQUxMX05PTE9DSyhyZXRfc3R1ZmYsIFNOX1NBTF9DT05TT0xFX0lOVFIsIAorCQkgMCwgU0FMX0NPTlNPTEVfSU5UUl9TVEFUVVMsCisJCSAwLCAwLCAwLCAwLCAwKTsKKworCWlmIChyZXRfc3R1ZmYuc3RhdHVzID09IDApIHsKKwkgICAgcmV0dXJuIHJldF9zdHVmZi52MDsKKwl9CisJCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBFbmFibGUgYW4gaW50ZXJydXB0IG9uIHRoZSBTQUwgY29uc29sZSBkZXZpY2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAoraWE2NF9zbl9jb25zb2xlX2ludHJfZW5hYmxlKHVpbnQ2NF90IGludHIpCit7CisJc3RydWN0IGlhNjRfc2FsX3JldHZhbCByZXRfc3R1ZmY7CisKKwlyZXRfc3R1ZmYuc3RhdHVzID0gMDsKKwlyZXRfc3R1ZmYudjAgPSAwOworCXJldF9zdHVmZi52MSA9IDA7CisJcmV0X3N0dWZmLnYyID0gMDsKKwlTQUxfQ0FMTF9OT0xPQ0socmV0X3N0dWZmLCBTTl9TQUxfQ09OU09MRV9JTlRSLCAKKwkJIGludHIsIFNBTF9DT05TT0xFX0lOVFJfT04sCisJCSAwLCAwLCAwLCAwLCAwKTsKK30KKworLyoKKyAqIERpc2FibGUgYW4gaW50ZXJydXB0IG9uIHRoZSBTQUwgY29uc29sZSBkZXZpY2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAoraWE2NF9zbl9jb25zb2xlX2ludHJfZGlzYWJsZSh1aW50NjRfdCBpbnRyKQoreworCXN0cnVjdCBpYTY0X3NhbF9yZXR2YWwgcmV0X3N0dWZmOworCisJcmV0X3N0dWZmLnN0YXR1cyA9IDA7CisJcmV0X3N0dWZmLnYwID0gMDsKKwlyZXRfc3R1ZmYudjEgPSAwOworCXJldF9zdHVmZi52MiA9IDA7CisJU0FMX0NBTExfTk9MT0NLKHJldF9zdHVmZiwgU05fU0FMX0NPTlNPTEVfSU5UUiwgCisJCSBpbnRyLCBTQUxfQ09OU09MRV9JTlRSX09GRiwKKwkJIDAsIDAsIDAsIDAsIDApOworfQorCisvKgorICogU2VuZHMgYSBjaGFyYWN0ZXIgYnVmZmVyIHRvIHRoZSBjb25zb2xlIGFzeW5jaHJvbm91c2x5LgorICovCitzdGF0aWMgaW5saW5lIHU2NAoraWE2NF9zbl9jb25zb2xlX3htaXRfY2hhcnMoY2hhciAqYnVmLCBpbnQgbGVuKQoreworCXN0cnVjdCBpYTY0X3NhbF9yZXR2YWwgcmV0X3N0dWZmOworCisJcmV0X3N0dWZmLnN0YXR1cyA9IDA7CisJcmV0X3N0dWZmLnYwID0gMDsKKwlyZXRfc3R1ZmYudjEgPSAwOworCXJldF9zdHVmZi52MiA9IDA7CisJU0FMX0NBTExfTk9MT0NLKHJldF9zdHVmZiwgU05fU0FMX0NPTlNPTEVfWE1JVF9DSEFSUywKKwkJICh1aW50NjRfdClidWYsICh1aW50NjRfdClsZW4sCisJCSAwLCAwLCAwLCAwLCAwKTsKKworCWlmIChyZXRfc3R1ZmYuc3RhdHVzID09IDApIHsKKwkgICAgcmV0dXJuIHJldF9zdHVmZi52MDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJldHVybnMgdGhlIGlvYnJpY2sgbW9kdWxlIElkCisgKi8KK3N0YXRpYyBpbmxpbmUgdTY0CitpYTY0X3NuX3N5c2N0bF9pb2JyaWNrX21vZHVsZV9nZXQobmFzaWRfdCBuYXNpZCwgaW50ICpyZXN1bHQpCit7CisJc3RydWN0IGlhNjRfc2FsX3JldHZhbCByZXRfc3R1ZmY7CisKKwlyZXRfc3R1ZmYuc3RhdHVzID0gMDsKKwlyZXRfc3R1ZmYudjAgPSAwOworCXJldF9zdHVmZi52MSA9IDA7CisJcmV0X3N0dWZmLnYyID0gMDsKKwlTQUxfQ0FMTF9OT0xPQ0socmV0X3N0dWZmLCBTTl9TQUxfU1lTQ1RMX0lPQlJJQ0tfTU9EVUxFX0dFVCwgbmFzaWQsIDAsIDAsIDAsIDAsIDAsIDApOworCisJLyogcmVzdWx0IGlzIGluICd2MCcgKi8KKwkqcmVzdWx0ID0gKGludClyZXRfc3R1ZmYudjA7CisKKwlyZXR1cm4gcmV0X3N0dWZmLnN0YXR1czsKK30KKworLyoqCisgKiBpYTY0X3NuX3BvZF9tb2RlIC0gY2FsbCB0aGUgU05fU0FMX1BPRF9NT0RFIGZ1bmN0aW9uCisgKgorICogU05fU0FMX1BPRF9NT0RFIGFjdHVhbGx5IHRha2VzIGFuIGFyZ3VtZW50LCBidXQgaXQncyBhbHdheXMKKyAqIDAgd2hlbiB3ZSBjYWxsIGl0IGZyb20gdGhlIGtlcm5lbCwgc28gd2UgZG9uJ3QgaGF2ZSB0byBleHBvc2UKKyAqIGl0IHRvIHRoZSBjYWxsZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgdTY0CitpYTY0X3NuX3BvZF9tb2RlKHZvaWQpCit7CisJc3RydWN0IGlhNjRfc2FsX3JldHZhbCBpc3J2OworCVNBTF9DQUxMKGlzcnYsIFNOX1NBTF9QT0RfTU9ERSwgMCwgMCwgMCwgMCwgMCwgMCwgMCk7CisJaWYgKGlzcnYuc3RhdHVzKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gaXNydi52MDsKK30KKworLyoqCisgKiBpYTY0X3NuX3Byb2JlX21lbSAtIHJlYWQgZnJvbSBtZW1vcnkgc2FmZWx5CisgKiBAYWRkcjogYWRkcmVzcyB0byBwcm9iZQorICogQHNpemU6IG51bWJlciBieXRlcyB0byByZWFkICgxLDIsNCw4KQorICogQGRhdGFfcHRyOiBhZGRyZXNzIHRvIHN0b3JlIHZhbHVlIHJlYWQgYnkgcHJvYmUgKC0xIHJldHVybmVkIGlmIHByb2JlIGZhaWxzKQorICoKKyAqIENhbGwgaW50byB0aGUgU0FMIHRvIGRvIGEgbWVtb3J5IHJlYWQuICBJZiB0aGUgcmVhZCBnZW5lcmF0ZXMgYSBtYWNoaW5lCisgKiBjaGVjaywgdGhpcyByb3V0aW5lIHdpbGwgcmVjb3ZlciBncmFjZWZ1bGx5IGFuZCByZXR1cm4gLTEgdG8gdGhlIGNhbGxlci4KKyAqIEBhZGRyIGlzIHVzdWFsbHkgYSBrZXJuZWwgdmlydHVhbCBhZGRyZXNzIGluIHVuY2FjaGVkIHNwYWNlIChpLmUuIHRoZQorICogYWRkcmVzcyBzdGFydHMgd2l0aCAweGMpLCBidXQgaWYgY2FsbGVkIGluIHBoeXNpY2FsIG1vZGUsIEBhZGRyIHNob3VsZAorICogYmUgYSBwaHlzaWNhbCBhZGRyZXNzLgorICoKKyAqIFJldHVybiB2YWx1ZXM6CisgKiAgMCAtIHByb2JlIHN1Y2Nlc3NmdWwKKyAqICAxIC0gcHJvYmUgZmFpbGVkIChnZW5lcmF0ZWQgTUNBKQorICogIDIgLSBCYWQgYXJnCisgKiA8MCAtIFBBTCBlcnJvcgorICovCitzdGF0aWMgaW5saW5lIHU2NAoraWE2NF9zbl9wcm9iZV9tZW0obG9uZyBhZGRyLCBsb25nIHNpemUsIHZvaWQgKmRhdGFfcHRyKQoreworCXN0cnVjdCBpYTY0X3NhbF9yZXR2YWwgaXNydjsKKworCVNBTF9DQUxMKGlzcnYsIFNOX1NBTF9QUk9CRSwgYWRkciwgc2l6ZSwgMCwgMCwgMCwgMCwgMCk7CisKKwlpZiAoZGF0YV9wdHIpIHsKKwkJc3dpdGNoIChzaXplKSB7CisJCWNhc2UgMToKKwkJCSooKHU4KilkYXRhX3B0cikgPSAodTgpaXNydi52MDsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQkqKCh1MTYqKWRhdGFfcHRyKSA9ICh1MTYpaXNydi52MDsKKwkJCWJyZWFrOworCQljYXNlIDQ6CisJCQkqKCh1MzIqKWRhdGFfcHRyKSA9ICh1MzIpaXNydi52MDsKKwkJCWJyZWFrOworCQljYXNlIDg6CisJCQkqKCh1NjQqKWRhdGFfcHRyKSA9ICh1NjQpaXNydi52MDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJaXNydi5zdGF0dXMgPSAyOworCQl9CisJfQorCXJldHVybiBpc3J2LnN0YXR1czsKK30KKworLyoKKyAqIFJldHJpZXZlIHRoZSBzeXN0ZW0gc2VyaWFsIG51bWJlciBhcyBhbiBBU0NJSSBzdHJpbmcuCisgKi8KK3N0YXRpYyBpbmxpbmUgdTY0CitpYTY0X3NuX3N5c19zZXJpYWxfZ2V0KGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaWE2NF9zYWxfcmV0dmFsIHJldF9zdHVmZjsKKwlTQUxfQ0FMTF9OT0xPQ0socmV0X3N0dWZmLCBTTl9TQUxfU1lTX1NFUklBTF9HRVQsIGJ1ZiwgMCwgMCwgMCwgMCwgMCwgMCk7CisJcmV0dXJuIHJldF9zdHVmZi5zdGF0dXM7Cit9CisKK2V4dGVybiBjaGFyIHNuX3N5c3RlbV9zZXJpYWxfbnVtYmVyX3N0cmluZ1tdOworZXh0ZXJuIHU2NCBzbl9wYXJ0aXRpb25fc2VyaWFsX251bWJlcjsKKworc3RhdGljIGlubGluZSBjaGFyICoKK3NuX3N5c3RlbV9zZXJpYWxfbnVtYmVyKHZvaWQpIHsKKwlpZiAoc25fc3lzdGVtX3NlcmlhbF9udW1iZXJfc3RyaW5nWzBdKSB7CisJCXJldHVybihzbl9zeXN0ZW1fc2VyaWFsX251bWJlcl9zdHJpbmcpOworCX0gZWxzZSB7CisJCWlhNjRfc25fc3lzX3NlcmlhbF9nZXQoc25fc3lzdGVtX3NlcmlhbF9udW1iZXJfc3RyaW5nKTsKKwkJcmV0dXJuKHNuX3N5c3RlbV9zZXJpYWxfbnVtYmVyX3N0cmluZyk7CisJfQorfQorCQorCisvKgorICogUmV0dXJucyBhIHVuaXF1ZSBpZCBudW1iZXIgZm9yIHRoaXMgc3lzdGVtIGFuZCBwYXJ0aXRpb24gKHN1aXRhYmxlIGZvcgorICogdXNlIHdpdGggbGljZW5zZSBtYW5hZ2VycyksIGJhc2VkIGluIHBhcnQgb24gdGhlIHN5c3RlbSBzZXJpYWwgbnVtYmVyLgorICovCitzdGF0aWMgaW5saW5lIHU2NAoraWE2NF9zbl9wYXJ0aXRpb25fc2VyaWFsX2dldCh2b2lkKQoreworCXN0cnVjdCBpYTY0X3NhbF9yZXR2YWwgcmV0X3N0dWZmOworCVNBTF9DQUxMKHJldF9zdHVmZiwgU05fU0FMX1BBUlRJVElPTl9TRVJJQUxfR0VULCAwLCAwLCAwLCAwLCAwLCAwLCAwKTsKKwlpZiAocmV0X3N0dWZmLnN0YXR1cyAhPSAwKQorCSAgICByZXR1cm4gMDsKKwlyZXR1cm4gcmV0X3N0dWZmLnYwOworfQorCitzdGF0aWMgaW5saW5lIHU2NAorc25fcGFydGl0aW9uX3NlcmlhbF9udW1iZXJfdmFsKHZvaWQpIHsKKwlpZiAoc25fcGFydGl0aW9uX3NlcmlhbF9udW1iZXIpIHsKKwkJcmV0dXJuKHNuX3BhcnRpdGlvbl9zZXJpYWxfbnVtYmVyKTsKKwl9IGVsc2UgeworCQlyZXR1cm4oc25fcGFydGl0aW9uX3NlcmlhbF9udW1iZXIgPSBpYTY0X3NuX3BhcnRpdGlvbl9zZXJpYWxfZ2V0KCkpOworCX0KK30KKworLyoKKyAqIFJldHVybnMgdGhlIHBhcnRpdGlvbiBpZCBvZiB0aGUgbmFzaWQgcGFzc2VkIGluIGFzIGFuIGFyZ3VtZW50LAorICogb3IgSU5WQUxJRF9QQVJUSUQgaWYgdGhlIHBhcnRpdGlvbiBpZCBjYW5ub3QgYmUgcmV0cmlldmVkLgorICovCitzdGF0aWMgaW5saW5lIHBhcnRpZF90CitpYTY0X3NuX3N5c2N0bF9wYXJ0aXRpb25fZ2V0KG5hc2lkX3QgbmFzaWQpCit7CisJc3RydWN0IGlhNjRfc2FsX3JldHZhbCByZXRfc3R1ZmY7CisJU0FMX0NBTEwocmV0X3N0dWZmLCBTTl9TQUxfU1lTQ1RMX1BBUlRJVElPTl9HRVQsIG5hc2lkLAorCQkgMCwgMCwgMCwgMCwgMCwgMCk7CisJaWYgKHJldF9zdHVmZi5zdGF0dXMgIT0gMCkKKwkgICAgcmV0dXJuIElOVkFMSURfUEFSVElEOworCXJldHVybiAoKHBhcnRpZF90KXJldF9zdHVmZi52MCk7Cit9CisKKy8qCisgKiBSZXR1cm5zIHRoZSBwYXJ0aXRpb24gaWQgb2YgdGhlIGN1cnJlbnQgcHJvY2Vzc29yLgorICovCisKK2V4dGVybiBwYXJ0aWRfdCBzbl9wYXJ0aWQ7CisKK3N0YXRpYyBpbmxpbmUgcGFydGlkX3QKK3NuX2xvY2FsX3BhcnRpZCh2b2lkKSB7CisJaWYgKHNuX3BhcnRpZCA8IDApIHsKKwkJcmV0dXJuIChzbl9wYXJ0aWQgPSBpYTY0X3NuX3N5c2N0bF9wYXJ0aXRpb25fZ2V0KGNwdWlkX3RvX25hc2lkKHNtcF9wcm9jZXNzb3JfaWQoKSkpKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gc25fcGFydGlkOworCX0KK30KKworLyoKKyAqIFJlZ2lzdGVyIG9yIHVucmVnaXN0ZXIgYSBwaHlzaWNhbCBhZGRyZXNzIHJhbmdlIGJlaW5nIHJlZmVyZW5jZWQgYWNyb3NzCisgKiBhIHBhcnRpdGlvbiBib3VuZGFyeSBmb3Igd2hpY2ggY2VydGFpbiBTQUwgZXJyb3JzIHNob3VsZCBiZSBzY2FubmVkIGZvciwKKyAqIGNsZWFuZWQgdXAgYW5kIGlnbm9yZWQuICBUaGlzIGlzIG9mIHZhbHVlIGZvciBrZXJuZWwgcGFydGl0aW9uaW5nIGNvZGUgb25seS4KKyAqIFZhbHVlcyBmb3IgdGhlIG9wZXJhdGlvbiBhcmd1bWVudDoKKyAqCTEgPSByZWdpc3RlciB0aGlzIGFkZHJlc3MgcmFuZ2Ugd2l0aCBTQUwKKyAqCTAgPSB1bnJlZ2lzdGVyIHRoaXMgYWRkcmVzcyByYW5nZSB3aXRoIFNBTAorICogCisgKiBTQUwgbWFpbnRhaW5zIGEgcmVmZXJlbmNlIGNvdW50IG9uIGFuIGFkZHJlc3MgcmFuZ2UgaW4gY2FzZSBpdCBpcyByZWdpc3RlcmVkCisgKiBtdWx0aXBsZSB0aW1lcy4KKyAqIAorICogT24gc3VjY2VzcywgcmV0dXJucyB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSBhZGRyZXNzIHJhbmdlIGFmdGVyIHRoZSBTQUwKKyAqIGNhbGwgaGFzIHBlcmZvcm1lZCB0aGUgY3VycmVudCByZWdpc3RyYXRpb24vdW5yZWdpc3RyYXRpb24uICBSZXR1cm5zIGEKKyAqIG5lZ2F0aXZlIHZhbHVlIGlmIGFuIGVycm9yIG9jY3VycmVkLgorICovCitzdGF0aWMgaW5saW5lIGludAorc25fcmVnaXN0ZXJfeHBfYWRkcl9yZWdpb24odTY0IHBhZGRyLCB1NjQgbGVuLCBpbnQgb3BlcmF0aW9uKQoreworCXN0cnVjdCBpYTY0X3NhbF9yZXR2YWwgcmV0X3N0dWZmOworCVNBTF9DQUxMKHJldF9zdHVmZiwgU05fU0FMX1hQX0FERFJfUkVHSU9OLCBwYWRkciwgbGVuLCAodTY0KW9wZXJhdGlvbiwKKwkJIDAsIDAsIDAsIDApOworCXJldHVybiByZXRfc3R1ZmYuc3RhdHVzOworfQorCisvKgorICogUmVnaXN0ZXIgb3IgdW5yZWdpc3RlciBhbiBpbnN0cnVjdGlvbiByYW5nZSBmb3Igd2hpY2ggU0FMIGVycm9ycyBzaG91bGQKKyAqIGJlIGlnbm9yZWQuICBJZiBhbiBlcnJvciBvY2N1cnMgd2hpbGUgaW4gdGhlIHJlZ2lzdGVyZWQgcmFuZ2UsIFNBTCBqdW1wcworICogdG8gcmV0dXJuX2FkZHIgYWZ0ZXIgaWdub3JpbmcgdGhlIGVycm9yLiAgVmFsdWVzIGZvciB0aGUgb3BlcmF0aW9uIGFyZ3VtZW50OgorICoJMSA9IHJlZ2lzdGVyIHRoaXMgaW5zdHJ1Y3Rpb24gcmFuZ2Ugd2l0aCBTQUwKKyAqCTAgPSB1bnJlZ2lzdGVyIHRoaXMgaW5zdHJ1Y3Rpb24gcmFuZ2Ugd2l0aCBTQUwKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSB2YWx1ZSBpZiBhbiBlcnJvciBvY2N1cnJlZC4KKyAqLworc3RhdGljIGlubGluZSBpbnQKK3NuX3JlZ2lzdGVyX25vZmF1bHRfY29kZSh1NjQgc3RhcnRfYWRkciwgdTY0IGVuZF9hZGRyLCB1NjQgcmV0dXJuX2FkZHIsCisJCQkgaW50IHZpcnR1YWwsIGludCBvcGVyYXRpb24pCit7CisJc3RydWN0IGlhNjRfc2FsX3JldHZhbCByZXRfc3R1ZmY7CisJdTY0IGNhbGw7CisJaWYgKHZpcnR1YWwpIHsKKwkJY2FsbCA9IFNOX1NBTF9OT19GQVVMVF9aT05FX1ZJUlRVQUw7CisJfSBlbHNlIHsKKwkJY2FsbCA9IFNOX1NBTF9OT19GQVVMVF9aT05FX1BIWVNJQ0FMOworCX0KKwlTQUxfQ0FMTChyZXRfc3R1ZmYsIGNhbGwsIHN0YXJ0X2FkZHIsIGVuZF9hZGRyLCByZXR1cm5fYWRkciwgKHU2NCkxLAorCQkgMCwgMCwgMCk7CisJcmV0dXJuIHJldF9zdHVmZi5zdGF0dXM7Cit9CisKKy8qCisgKiBDaGFuZ2Ugb3IgcXVlcnkgdGhlIGNvaGVyZW5jZSBkb21haW4gZm9yIHRoaXMgcGFydGl0aW9uLiBFYWNoIGNwdS1iYXNlZAorICogbmFzaWQgaXMgcmVwcmVzZW50ZWQgYnkgYSBiaXQgaW4gYW4gYXJyYXkgb2YgNjQtYml0IHdvcmRzOgorICogICAgICAwID0gbm90IGluIHRoaXMgcGFydGl0aW9uJ3MgY29oZXJlbmN5IGRvbWFpbgorICogICAgICAxID0gaW4gdGhpcyBwYXJ0aXRpb24ncyBjb2hlcmVuY3kgZG9tYWluCisgKgorICogSXQgaXMgbm90IHBvc3NpYmxlIGZvciB0aGUgbG9jYWwgc3lzdGVtJ3MgbmFzaWRzIHRvIGJlIHJlbW92ZWQgZnJvbQorICogdGhlIGNvaGVyZW5jeSBkb21haW4uICBQdXJwb3NlIG9mIHRoZSBkb21haW4gYXJndW1lbnRzOgorICogICAgICBuZXdfZG9tYWluID0gc2V0IHRoZSBjb2hlcmVuY2UgZG9tYWluIHRvIHRoZSBnaXZlbiBuYXNpZHMKKyAqICAgICAgb2xkX2RvbWFpbiA9IHJldHVybiB0aGUgY3VycmVudCBjb2hlcmVuY2UgZG9tYWluCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgdmFsdWUgaWYgYW4gZXJyb3Igb2NjdXJyZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50Citzbl9jaGFuZ2VfY29oZXJlbmNlKHU2NCAqbmV3X2RvbWFpbiwgdTY0ICpvbGRfZG9tYWluKQoreworCXN0cnVjdCBpYTY0X3NhbF9yZXR2YWwgcmV0X3N0dWZmOworCVNBTF9DQUxMKHJldF9zdHVmZiwgU05fU0FMX0NPSEVSRU5DRSwgbmV3X2RvbWFpbiwgb2xkX2RvbWFpbiwgMCwgMCwKKwkJIDAsIDAsIDApOworCXJldHVybiByZXRfc3R1ZmYuc3RhdHVzOworfQorCisvKgorICogQ2hhbmdlIG1lbW9yeSBhY2Nlc3MgcHJvdGVjdGlvbnMgZm9yIGEgcGh5c2ljYWwgYWRkcmVzcyByYW5nZS4KKyAqIG5hc2lkX2FycmF5IGlzIG5vdCB1c2VkIG9uIEFsdGl4LCBidXQgbWF5IGJlIGluIGZ1dHVyZSBhcmNoaXRlY3R1cmVzLgorICogQXZhaWxhYmxlIG1lbW9yeSBwcm90ZWN0aW9uIGFjY2VzcyBjbGFzc2VzIGFyZSBkZWZpbmVkIGFmdGVyIHRoZSBmdW5jdGlvbi4KKyAqLworc3RhdGljIGlubGluZSBpbnQKK3NuX2NoYW5nZV9tZW1wcm90ZWN0KHU2NCBwYWRkciwgdTY0IGxlbiwgdTY0IHBlcm1zLCB1NjQgKm5hc2lkX2FycmF5KQoreworCXN0cnVjdCBpYTY0X3NhbF9yZXR2YWwgcmV0X3N0dWZmOworCWludCBjbm9kZWlkOworCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOworCisJY25vZGVpZCA9IG5hc2lkX3RvX2Nub2RlaWQoZ2V0X25vZGVfbnVtYmVyKHBhZGRyKSk7CisJLy8gc3Bpbl9sb2NrKCZOT0RFUERBKGNub2RlaWQpLT5iaXN0X2xvY2spOworCWxvY2FsX2lycV9zYXZlKGlycV9mbGFncyk7CisJU0FMX0NBTExfTk9MT0NLKHJldF9zdHVmZiwgU05fU0FMX01FTVBST1RFQ1QsIHBhZGRyLCBsZW4sIG5hc2lkX2FycmF5LAorCQkgcGVybXMsIDAsIDAsIDApOworCWxvY2FsX2lycV9yZXN0b3JlKGlycV9mbGFncyk7CisJLy8gc3Bpbl91bmxvY2soJk5PREVQREEoY25vZGVpZCktPmJpc3RfbG9jayk7CisJcmV0dXJuIHJldF9zdHVmZi5zdGF0dXM7Cit9CisjZGVmaW5lIFNOX01FTVBST1RfQUNDRVNTX0NMQVNTXzAJCTB4MTRhMDgwCisjZGVmaW5lIFNOX01FTVBST1RfQUNDRVNTX0NMQVNTXzEJCTB4MjUyMGMyCisjZGVmaW5lIFNOX01FTVBST1RfQUNDRVNTX0NMQVNTXzIJCTB4MTRhMWNhCisjZGVmaW5lIFNOX01FTVBST1RfQUNDRVNTX0NMQVNTXzMJCTB4MTRhMjkwCisjZGVmaW5lIFNOX01FTVBST1RfQUNDRVNTX0NMQVNTXzYJCTB4MDg0MDgwCisjZGVmaW5lIFNOX01FTVBST1RfQUNDRVNTX0NMQVNTXzcJCTB4MDIxMDgwCisKKy8qCisgKiBUdXJucyBvZmYgc3lzdGVtIHBvd2VyLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2lhNjRfc25fcG93ZXJfZG93bih2b2lkKQoreworCXN0cnVjdCBpYTY0X3NhbF9yZXR2YWwgcmV0X3N0dWZmOworCVNBTF9DQUxMKHJldF9zdHVmZiwgU05fU0FMX1NZU1RFTV9QT1dFUl9ET1dOLCAwLCAwLCAwLCAwLCAwLCAwLCAwKTsKKwl3aGlsZSgxKTsKKwkvKiBuZXZlciByZXR1cm5zICovCit9CisKKy8qKgorICogaWE2NF9zbl9mcnVfY2FwdHVyZSAtIHRlbGwgdGhlIHN5c3RlbSBjb250cm9sbGVyIHRvIGNhcHR1cmUgaHcgc3RhdGUKKyAqCisgKiBUaGlzIHJvdXRpbmUgd2lsbCBjYWxsIHRoZSBTQUwgd2hpY2ggd2lsbCB0ZWxsIHRoZSBzeXN0ZW0gY29udHJvbGxlcihzKQorICogdG8gY2FwdHVyZSBodyBtbXIgaW5mb3JtYXRpb24gZnJvbSBlYWNoIFNIdWIgaW4gdGhlIHN5c3RlbS4KKyAqLworc3RhdGljIGlubGluZSB1NjQKK2lhNjRfc25fZnJ1X2NhcHR1cmUodm9pZCkKK3sKKyAgICAgICAgc3RydWN0IGlhNjRfc2FsX3JldHZhbCBpc3J2OworICAgICAgICBTQUxfQ0FMTChpc3J2LCBTTl9TQUxfU1lTQ1RMX0ZSVV9DQVBUVVJFLCAwLCAwLCAwLCAwLCAwLCAwLCAwKTsKKyAgICAgICAgaWYgKGlzcnYuc3RhdHVzKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gaXNydi52MDsKK30KKworLyoKKyAqIFBlcmZvcm1zIGFuIG9wZXJhdGlvbiBvbiBhIFBDSSBidXMgb3Igc2xvdCAtLSBwb3dlciB1cCwgcG93ZXIgZG93bgorICogb3IgcmVzZXQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdTY0CitpYTY0X3NuX3N5c2N0bF9pb2JyaWNrX3BjaV9vcChuYXNpZF90IG4sIHU2NCBjb25uZWN0aW9uX3R5cGUsIAorCQkJICAgICAgdTY0IGJ1cywgY2hhciBzbG90LCAKKwkJCSAgICAgIHU2NCBhY3Rpb24pCit7CisJc3RydWN0IGlhNjRfc2FsX3JldHZhbCBydiA9IHswLCAwLCAwLCAwfTsKKworCVNBTF9DQUxMX05PTE9DSyhydiwgU05fU0FMX1NZU0NUTF9JT0JSSUNLX1BDSV9PUCwgY29ubmVjdGlvbl90eXBlLCBuLCBhY3Rpb24sCisJCSBidXMsICh1NjQpIHNsb3QsIDAsIDApOworCWlmIChydi5zdGF0dXMpCisJICAgIAlyZXR1cm4gcnYudjA7CisJcmV0dXJuIDA7Cit9CisKKworLyoKKyAqIE9wZW4gYSBzdWJjaGFubmVsIGZvciBzZW5kaW5nIGFyYml0cmFyeSBkYXRhIHRvIHRoZSBzeXN0ZW0KKyAqIGNvbnRyb2xsZXIgbmV0d29yayB2aWEgdGhlIHN5c3RlbSBjb250cm9sbGVyIGRldmljZSBhc3NvY2lhdGVkIHdpdGgKKyAqICduYXNpZCcuICBSZXR1cm4gdGhlIHN1YmNoYW5uZWwgbnVtYmVyIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQKK2lhNjRfc25faXJ0cl9vcGVuKG5hc2lkX3QgbmFzaWQpCit7CisJc3RydWN0IGlhNjRfc2FsX3JldHZhbCBydjsKKwlTQUxfQ0FMTF9SRUVOVFJBTlQocnYsIFNOX1NBTF9JUk9VVEVSX09QLCBTQUxfSVJPVVRFUl9PUEVOLCBuYXNpZCwKKwkJCSAgIDAsIDAsIDAsIDAsIDApOworCXJldHVybiAoaW50KSBydi52MDsKK30KKworLyoKKyAqIENsb3NlIHN5c3RlbSBjb250cm9sbGVyIHN1YmNoYW5uZWwgJ3N1YmNoJyBwcmV2aW91c2x5IG9wZW5lZCBvbiAnbmFzaWQnLgorICovCitzdGF0aWMgaW5saW5lIGludAoraWE2NF9zbl9pcnRyX2Nsb3NlKG5hc2lkX3QgbmFzaWQsIGludCBzdWJjaCkKK3sKKwlzdHJ1Y3QgaWE2NF9zYWxfcmV0dmFsIHJ2OworCVNBTF9DQUxMX1JFRU5UUkFOVChydiwgU05fU0FMX0lST1VURVJfT1AsIFNBTF9JUk9VVEVSX0NMT1NFLAorCQkJICAgKHU2NCkgbmFzaWQsICh1NjQpIHN1YmNoLCAwLCAwLCAwLCAwKTsKKwlyZXR1cm4gKGludCkgcnYuc3RhdHVzOworfQorCisvKgorICogUmVhZCBkYXRhIGZyb20gc3lzdGVtIGNvbnRyb2xsZXIgYXNzb2NpYXRlZCB3aXRoICduYXNpZCcgb24KKyAqIHN1YmNoYW5uZWwgJ3N1YmNoJy4gIFRoZSBidWZmZXIgdG8gYmUgZmlsbGVkIGlzIHBvaW50ZWQgdG8gYnkKKyAqICdidWYnLCBhbmQgaXRzIGNhcGFjaXR5IGlzIGluIHRoZSBpbnRlZ2VyIHBvaW50ZWQgdG8gYnkgJ2xlbicuICBUaGUKKyAqIHJlZmVyZW50IG9mICdsZW4nIGlzIHNldCB0byB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQgYnkgdGhlIFNBTAorICogY2FsbC4gIFRoZSByZXR1cm4gdmFsdWUgaXMgZWl0aGVyIFNBTFJFVF9PSyAoZm9yIGJ5dGVzIHJlYWQpIG9yCisgKiBTQUxSRVRfRVJST1IgKGZvciBlcnJvciBvciAibm8gZGF0YSBhdmFpbGFibGUiKS4KKyAqLworc3RhdGljIGlubGluZSBpbnQKK2lhNjRfc25faXJ0cl9yZWN2KG5hc2lkX3QgbmFzaWQsIGludCBzdWJjaCwgY2hhciAqYnVmLCBpbnQgKmxlbikKK3sKKwlzdHJ1Y3QgaWE2NF9zYWxfcmV0dmFsIHJ2OworCVNBTF9DQUxMX1JFRU5UUkFOVChydiwgU05fU0FMX0lST1VURVJfT1AsIFNBTF9JUk9VVEVSX1JFQ1YsCisJCQkgICAodTY0KSBuYXNpZCwgKHU2NCkgc3ViY2gsICh1NjQpIGJ1ZiwgKHU2NCkgbGVuLAorCQkJICAgMCwgMCk7CisJcmV0dXJuIChpbnQpIHJ2LnN0YXR1czsKK30KKworLyoKKyAqIFdyaXRlIGRhdGEgdG8gdGhlIHN5c3RlbSBjb250cm9sbGVyIG5ldHdvcmsgdmlhIHRoZSBzeXN0ZW0KKyAqIGNvbnRyb2xsZXIgYXNzb2NpYXRlZCB3aXRoICduYXNpZCcgb24gc3VjaGFubmVsICdzdWJjaCcuICBUaGUKKyAqIGJ1ZmZlciB0byBiZSB3cml0dGVuIG91dCBpcyBwb2ludGVkIHRvIGJ5ICdidWYnLCBhbmQgJ2xlbicgaXMgdGhlCisgKiBudW1iZXIgb2YgYnl0ZXMgdG8gYmUgd3JpdHRlbi4gIFRoZSByZXR1cm4gdmFsdWUgaXMgZWl0aGVyIHRoZQorICogbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4gKHdoaWNoIGNvdWxkIGJlIHplcm8pIG9yIGEgbmVnYXRpdmUgZXJyb3IKKyAqIGNvZGUuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitpYTY0X3NuX2lydHJfc2VuZChuYXNpZF90IG5hc2lkLCBpbnQgc3ViY2gsIGNoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgaWE2NF9zYWxfcmV0dmFsIHJ2OworCVNBTF9DQUxMX1JFRU5UUkFOVChydiwgU05fU0FMX0lST1VURVJfT1AsIFNBTF9JUk9VVEVSX1NFTkQsCisJCQkgICAodTY0KSBuYXNpZCwgKHU2NCkgc3ViY2gsICh1NjQpIGJ1ZiwgKHU2NCkgbGVuLAorCQkJICAgMCwgMCk7CisJcmV0dXJuIChpbnQpIHJ2LnYwOworfQorCisvKgorICogQ2hlY2sgd2hldGhlciBhbnkgaW50ZXJydXB0cyBhcmUgcGVuZGluZyBmb3IgdGhlIHN5c3RlbSBjb250cm9sbGVyCisgKiBhc3NvY2lhdGVkIHdpdGggJ25hc2lkJyBhbmQgaXRzIHN1YmNoYW5uZWwgJ3N1YmNoJy4gIFRoZSByZXR1cm4KKyAqIHZhbHVlIGlzIGEgbWFzayBvZiBwZW5kaW5nIGludGVycnVwdHMgKFNBTF9JUk9VVEVSX0lOVFJfWE1JVCBhbmQvb3IKKyAqIFNBTF9JUk9VVEVSX0lOVFJfUkVDVikuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitpYTY0X3NuX2lydHJfaW50cihuYXNpZF90IG5hc2lkLCBpbnQgc3ViY2gpCit7CisJc3RydWN0IGlhNjRfc2FsX3JldHZhbCBydjsKKwlTQUxfQ0FMTF9SRUVOVFJBTlQocnYsIFNOX1NBTF9JUk9VVEVSX09QLCBTQUxfSVJPVVRFUl9JTlRSX1NUQVRVUywKKwkJCSAgICh1NjQpIG5hc2lkLCAodTY0KSBzdWJjaCwgMCwgMCwgMCwgMCk7CisJcmV0dXJuIChpbnQpIHJ2LnYwOworfQorCisvKgorICogRW5hYmxlIHRoZSBpbnRlcnJ1cHQgaW5kaWNhdGVkIGJ5IHRoZSBpbnRyIHBhcmFtZXRlciAoZWl0aGVyCisgKiBTQUxfSVJPVVRFUl9JTlRSX1hNSVQgb3IgU0FMX0lST1VURVJfSU5UUl9SRUNWKS4KKyAqLworc3RhdGljIGlubGluZSBpbnQKK2lhNjRfc25faXJ0cl9pbnRyX2VuYWJsZShuYXNpZF90IG5hc2lkLCBpbnQgc3ViY2gsIHU2NCBpbnRyKQoreworCXN0cnVjdCBpYTY0X3NhbF9yZXR2YWwgcnY7CisJU0FMX0NBTExfUkVFTlRSQU5UKHJ2LCBTTl9TQUxfSVJPVVRFUl9PUCwgU0FMX0lST1VURVJfSU5UUl9PTiwKKwkJCSAgICh1NjQpIG5hc2lkLCAodTY0KSBzdWJjaCwgaW50ciwgMCwgMCwgMCk7CisJcmV0dXJuIChpbnQpIHJ2LnYwOworfQorCisvKgorICogRGlzYWJsZSB0aGUgaW50ZXJydXB0IGluZGljYXRlZCBieSB0aGUgaW50ciBwYXJhbWV0ZXIgKGVpdGhlcgorICogU0FMX0lST1VURVJfSU5UUl9YTUlUIG9yIFNBTF9JUk9VVEVSX0lOVFJfUkVDVikuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitpYTY0X3NuX2lydHJfaW50cl9kaXNhYmxlKG5hc2lkX3QgbmFzaWQsIGludCBzdWJjaCwgdTY0IGludHIpCit7CisJc3RydWN0IGlhNjRfc2FsX3JldHZhbCBydjsKKwlTQUxfQ0FMTF9SRUVOVFJBTlQocnYsIFNOX1NBTF9JUk9VVEVSX09QLCBTQUxfSVJPVVRFUl9JTlRSX09GRiwKKwkJCSAgICh1NjQpIG5hc2lkLCAodTY0KSBzdWJjaCwgaW50ciwgMCwgMCwgMCk7CisJcmV0dXJuIChpbnQpIHJ2LnYwOworfQorCisvKioKKyAqIGlhNjRfc25fZ2V0X2ZpdF9jb21wdCAtIHJlYWQgYSBGSVQgZW50cnkgZnJvbSB0aGUgUFJPTSBoZWFkZXIKKyAqIEBuYXNpZDogTkFTSUQgb2Ygbm9kZSB0byByZWFkCisgKiBAaW5kZXg6IEZJVCBlbnRyeSBpbmRleCB0byBiZSByZXRyaWV2ZWQgKDAuLm4pCisgKiBAZml0ZW50cnk6IDE2IGJ5dGUgYnVmZmVyIHdoZXJlIEZJVCBlbnRyeSB3aWxsIGJlIHN0b3JlZC4KKyAqIEBiYW5idWY6IG9wdGlvbmFsIGJ1ZmZlciBmb3IgcmV0cmlldmluZyBiYW5uZXIKKyAqIEBiYW5sZW46IGxlbmd0aCBvZiBiYW5uZXIgYnVmZmVyCisgKgorICogQWNjZXNzIHRvIHRoZSBwaHlzaWNhbCBQUk9NIGNoaXBzIG5lZWRzIHRvIGJlIHNlcmlhbGl6ZWQgc2luY2UgcmVhZHMgYW5kCisgKiB3cml0ZXMgY2FuJ3Qgb2NjdXIgYXQgdGhlIHNhbWUgdGltZSwgc28gd2UgbmVlZCB0byBjYWxsIGludG8gdGhlIFNBTCB3aGVuCisgKiB3ZSB3YW50IHRvIGxvb2sgYXQgdGhlIEZJVCBlbnRyaWVzIG9uIHRoZSBjaGlwcy4KKyAqCisgKiBSZXR1cm5zOgorICoJJVNBTFJFVF9PSyBpZiBvaworICoJJVNBTFJFVF9JTlZBTElEX0FSRyBpZiBpbmRleCB0b28gYmlnCisgKgklU0FMUkVUX05PVF9JTVBMRU1FTlRFRCBpZiBydW5uaW5nIG9uIG9sZGVyIFBST00KKyAqCT8/PyBpZiBuYXNpZCBpbnZhbGlkIE9SIGJhbm5lciBidWZmZXIgbm90IGxhcmdlIGVub3VnaAorICovCitzdGF0aWMgaW5saW5lIGludAoraWE2NF9zbl9nZXRfZml0X2NvbXB0KHU2NCBuYXNpZCwgdTY0IGluZGV4LCB2b2lkICpmaXRlbnRyeSwgdm9pZCAqYmFuYnVmLAorCQkgICAgICB1NjQgYmFubGVuKQoreworCXN0cnVjdCBpYTY0X3NhbF9yZXR2YWwgcnY7CisJU0FMX0NBTExfTk9MT0NLKHJ2LCBTTl9TQUxfR0VUX0ZJVF9DT01QVCwgbmFzaWQsIGluZGV4LCBmaXRlbnRyeSwKKwkJCWJhbmJ1ZiwgYmFubGVuLCAwLCAwKTsKKwlyZXR1cm4gKGludCkgcnYuc3RhdHVzOworfQorCisvKgorICogSW5pdGlhbGl6ZSB0aGUgU0FMIGNvbXBvbmVudHMgb2YgdGhlIHN5c3RlbSBjb250cm9sbGVyCisgKiBjb21tdW5pY2F0aW9uIGRyaXZlcjsgc3BlY2lmaWNhbGx5IHBhc3MgaW4gYSBzaXphYmxlIGJ1ZmZlciB0aGF0CisgKiBjYW4gYmUgdXNlZCBmb3IgYWxsb2NhdGlvbiBvZiBzdWJjaGFubmVsIHF1ZXVlcyBhcyBuZXcgc3ViY2hhbm5lbHMKKyAqIGFyZSBvcGVuZWQuICAiYnVmIiBwb2ludHMgdG8gdGhlIGJ1ZmZlciwgYW5kICJsZW4iIHNwZWNpZmllcyBpdHMKKyAqIGxlbmd0aC4KKyAqLworc3RhdGljIGlubGluZSBpbnQKK2lhNjRfc25faXJ0cl9pbml0KG5hc2lkX3QgbmFzaWQsIHZvaWQgKmJ1ZiwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgaWE2NF9zYWxfcmV0dmFsIHJ2OworCVNBTF9DQUxMX1JFRU5UUkFOVChydiwgU05fU0FMX0lST1VURVJfT1AsIFNBTF9JUk9VVEVSX0lOSVQsCisJCQkgICAodTY0KSBuYXNpZCwgKHU2NCkgYnVmLCAodTY0KSBsZW4sIDAsIDAsIDApOworCXJldHVybiAoaW50KSBydi5zdGF0dXM7Cit9CisKKy8qCisgKiBSZXR1cm5zIHRoZSBuYXNpZCwgc3Vibm9kZSAmIHNsaWNlIGNvcnJlc3BvbmRpbmcgdG8gYSBTQVBJQyBJRAorICoKKyAqICBJbjoKKyAqCWFyZzAgLSBTTl9TQUxfR0VUX1NBUElDX0lORk8KKyAqCWFyZzEgLSBzYXBpY2lkIChsaWQgPj4gMTYpIAorICogIE91dDoKKyAqCXYwIC0gbmFzaWQKKyAqCXYxIC0gc3Vibm9kZQorICoJdjIgLSBzbGljZQorICovCitzdGF0aWMgaW5saW5lIHU2NAoraWE2NF9zbl9nZXRfc2FwaWNfaW5mbyhpbnQgc2FwaWNpZCwgaW50ICpuYXNpZCwgaW50ICpzdWJub2RlLCBpbnQgKnNsaWNlKQoreworCXN0cnVjdCBpYTY0X3NhbF9yZXR2YWwgcmV0X3N0dWZmOworCisJcmV0X3N0dWZmLnN0YXR1cyA9IDA7CisJcmV0X3N0dWZmLnYwID0gMDsKKwlyZXRfc3R1ZmYudjEgPSAwOworCXJldF9zdHVmZi52MiA9IDA7CisJU0FMX0NBTExfTk9MT0NLKHJldF9zdHVmZiwgU05fU0FMX0dFVF9TQVBJQ19JTkZPLCBzYXBpY2lkLCAwLCAwLCAwLCAwLCAwLCAwKTsKKworLyoqKioqIEJFR0lOIEhBQ0sgLSB0ZW1wIHRpbCBvbGQgcHJvbXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCAqKioqKioqKi8KKwlpZiAocmV0X3N0dWZmLnN0YXR1cyA9PSBTQUxSRVRfTk9UX0lNUExFTUVOVEVEKSB7CisJCWlmIChuYXNpZCkgKm5hc2lkID0gc2FwaWNpZCAmIDB4ZmZmOworCQlpZiAoc3Vibm9kZSkgKnN1Ym5vZGUgPSAoc2FwaWNpZCA+PiAxMykgJiAxOworCQlpZiAoc2xpY2UpICpzbGljZSA9IChzYXBpY2lkID4+IDEyKSAmIDM7CisJCXJldHVybiAwOworCX0KKy8qKioqKiBFTkQgSEFDSyAqKioqKioqLworCisJaWYgKHJldF9zdHVmZi5zdGF0dXMgPCAwKQorCQlyZXR1cm4gcmV0X3N0dWZmLnN0YXR1czsKKworCWlmIChuYXNpZCkgKm5hc2lkID0gKGludCkgcmV0X3N0dWZmLnYwOworCWlmIChzdWJub2RlKSAqc3Vibm9kZSA9IChpbnQpIHJldF9zdHVmZi52MTsKKwlpZiAoc2xpY2UpICpzbGljZSA9IChpbnQpIHJldF9zdHVmZi52MjsKKwlyZXR1cm4gMDsKK30KKyAKKy8qCisgKiBSZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBIVUIvU0hVQi4KKyAqICBJbjoKKyAqCWFyZzAgLSBTTl9TQUxfR0VUX1NOX0lORk8KKyAqIAlhcmcxIC0gMCAob3RoZXIgdmFsdWVzIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlKQorICogIE91dDoKKyAqCXYwIAorICoJCVs3OjBdICAgLSBzaHViIHR5cGUgKDA9c2h1YjEsIDE9c2h1YjIpCisgKgkJWzE1OjhdICAtIExvZzIgbWF4IG51bWJlciBvZiBub2RlcyBpbiBlbnRpcmUgc3lzdGVtIChpbmNsdWRlcworICoJCQkgIEMtYnJpY2tzLCBJLWJyaWNrcywgZXRjKQorICoJCVsyMzoxNl0gLSBMb2cyIG9mIG5vZGVzIHBlciBzaGFyaW5nIGRvbWFpbgkJCSAKKyAqIAkJWzMxOjI0XSAtIHBhcnRpdGlvbiBJRAorICogCQlbMzk6MzJdIC0gY29oZXJlbmN5X2lkCisgKiAJCVs0Nzo0MF0gLSByZWdpb25zaXplCisgKgl2MSAKKyAqCQlbMTU6MF0gIC0gbmFzaWQgbWFzayAoZXguLCAweDdmZiBmb3IgMTEgYml0IG5hc2lkKQorICoJIAlbMjM6MTVdIC0gYml0IHBvc2l0aW9uIG9mIGxvdyBuYXNpZCBiaXQKKyAqLworc3RhdGljIGlubGluZSB1NjQKK2lhNjRfc25fZ2V0X3NuX2luZm8oaW50IGZjLCB1OCAqc2h1YnR5cGUsIHUxNiAqbmFzaWRfYml0bWFzaywgdTggKm5hc2lkX3NoaWZ0LCAKKwkJdTggKnN5c3RlbXNpemUsIHU4ICpzaGFyaW5nX2RvbWFpbl9zaXplLCB1OCAqcGFydGlkLCB1OCAqY29oZXIsIHU4ICpyZWcpCit7CisJc3RydWN0IGlhNjRfc2FsX3JldHZhbCByZXRfc3R1ZmY7CisKKwlyZXRfc3R1ZmYuc3RhdHVzID0gMDsKKwlyZXRfc3R1ZmYudjAgPSAwOworCXJldF9zdHVmZi52MSA9IDA7CisJcmV0X3N0dWZmLnYyID0gMDsKKwlTQUxfQ0FMTF9OT0xPQ0socmV0X3N0dWZmLCBTTl9TQUxfR0VUX1NOX0lORk8sIGZjLCAwLCAwLCAwLCAwLCAwLCAwKTsKKworLyoqKioqIEJFR0lOIEhBQ0sgLSB0ZW1wIHRpbCBvbGQgcHJvbXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCAqKioqKioqKi8KKwlpZiAocmV0X3N0dWZmLnN0YXR1cyA9PSBTQUxSRVRfTk9UX0lNUExFTUVOVEVEKSB7CisJCWludCBuYXNpZCA9IGdldF9zYXBpY2lkKCkgJiAweGZmZjs7CisjZGVmaW5lIFNIX1NIVUJfSURfTk9ERVNfUEVSX0JJVF9NQVNLIDB4MDAxZjAwMDAwMDAwMDAwMFVMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyNkZWZpbmUgU0hfU0hVQl9JRF9OT0RFU19QRVJfQklUX1NIRlQgNDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwkJaWYgKHNodWJ0eXBlKSAqc2h1YnR5cGUgPSAwOworCQlpZiAobmFzaWRfYml0bWFzaykgKm5hc2lkX2JpdG1hc2sgPSAweDdmZjsKKwkJaWYgKG5hc2lkX3NoaWZ0KSAqbmFzaWRfc2hpZnQgPSAzODsKKwkJaWYgKHN5c3RlbXNpemUpICpzeXN0ZW1zaXplID0gMTE7CisJCWlmIChzaGFyaW5nX2RvbWFpbl9zaXplKSAqc2hhcmluZ19kb21haW5fc2l6ZSA9IDk7CisJCWlmIChwYXJ0aWQpICpwYXJ0aWQgPSBpYTY0X3NuX3N5c2N0bF9wYXJ0aXRpb25fZ2V0KG5hc2lkKTsKKwkJaWYgKGNvaGVyKSAqY29oZXIgPSBuYXNpZCA+PiA5OworCQlpZiAocmVnKSAqcmVnID0gKEhVQl9MKCh1NjQgKikgTE9DQUxfTU1SX0FERFIoU0gxX1NIVUJfSUQpKSAmIFNIX1NIVUJfSURfTk9ERVNfUEVSX0JJVF9NQVNLKSA+PgorCQkJU0hfU0hVQl9JRF9OT0RFU19QRVJfQklUX1NIRlQ7CisJCXJldHVybiAwOworCX0KKy8qKioqKiBFTkQgSEFDSyAqKioqKioqLworCisJaWYgKHJldF9zdHVmZi5zdGF0dXMgPCAwKQorCQlyZXR1cm4gcmV0X3N0dWZmLnN0YXR1czsKKworCWlmIChzaHVidHlwZSkgKnNodWJ0eXBlID0gcmV0X3N0dWZmLnYwICYgMHhmZjsKKwlpZiAoc3lzdGVtc2l6ZSkgKnN5c3RlbXNpemUgPSAocmV0X3N0dWZmLnYwID4+IDgpICYgMHhmZjsKKwlpZiAoc2hhcmluZ19kb21haW5fc2l6ZSkgKnNoYXJpbmdfZG9tYWluX3NpemUgPSAocmV0X3N0dWZmLnYwID4+IDE2KSAmIDB4ZmY7CisJaWYgKHBhcnRpZCkgKnBhcnRpZCA9IChyZXRfc3R1ZmYudjAgPj4gMjQpICYgMHhmZjsKKwlpZiAoY29oZXIpICpjb2hlciA9IChyZXRfc3R1ZmYudjAgPj4gMzIpICYgMHhmZjsKKwlpZiAocmVnKSAqcmVnID0gKHJldF9zdHVmZi52MCA+PiA0MCkgJiAweGZmOworCWlmIChuYXNpZF9iaXRtYXNrKSAqbmFzaWRfYml0bWFzayA9IChyZXRfc3R1ZmYudjEgJiAweGZmZmYpOworCWlmIChuYXNpZF9zaGlmdCkgKm5hc2lkX3NoaWZ0ID0gKHJldF9zdHVmZi52MSA+PiAxNikgJiAweGZmOworCXJldHVybiAwOworfQorIAorLyoKKyAqIFRoaXMgaXMgdGhlIGFjY2VzcyBwb2ludCB0byB0aGUgQWx0aXggUFJPTSBoYXJkd2FyZSBwZXJmb3JtYW5jZQorICogYW5kIHN0YXR1cyBtb25pdG9yaW5nIGludGVyZmFjZS4gRm9yIGluZm8gb24gdXNpbmcgdGhpcywgc2VlCisgKiBpbmNsdWRlL2FzbS1pYTY0L3NuL3NuMi9zbl9od3BlcmYuaAorICovCitzdGF0aWMgaW5saW5lIGludAoraWE2NF9zbl9od3BlcmZfb3AobmFzaWRfdCBuYXNpZCwgdTY0IG9wY29kZSwgdTY0IGEwLCB1NjQgYTEsIHU2NCBhMiwKKyAgICAgICAgICAgICAgICAgIHU2NCBhMywgdTY0IGE0LCBpbnQgKnYwKQoreworCXN0cnVjdCBpYTY0X3NhbF9yZXR2YWwgcnY7CisJU0FMX0NBTExfTk9MT0NLKHJ2LCBTTl9TQUxfSFdQRVJGX09QLCAodTY0KW5hc2lkLAorCQlvcGNvZGUsIGEwLCBhMSwgYTIsIGEzLCBhNCk7CisJaWYgKHYwKQorCQkqdjAgPSAoaW50KSBydi52MDsKKwlyZXR1cm4gKGludCkgcnYuc3RhdHVzOworfQorCisjZW5kaWYgLyogX0FTTV9JQTY0X1NOX1NOX1NBTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3NuL3NuZHJ2LmggYi9pbmNsdWRlL2FzbS1pYTY0L3NuL3NuZHJ2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWEwMGQ0MgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvc24vc25kcnYuaApAQCAtMCwwICsxLDQ3IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDQgU2lsaWNvbiBHcmFwaGljcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqLworCisjaWZuZGVmIF9BU01fSUE2NF9TTl9TTkRSVl9ICisjZGVmaW5lIF9BU01fSUE2NF9TTl9TTkRSVl9ICisKKy8qIGlvY3RsIGNvbW1hbmRzICovCisjZGVmaW5lIFNORFJWX0dFVF9ST1VURVJJTkZPCQkxCisjZGVmaW5lIFNORFJWX0dFVF9JTkZPU0laRQkJMgorI2RlZmluZSBTTkRSVl9HRVRfSFVCSU5GTwkJMworI2RlZmluZSBTTkRSVl9HRVRfRkxBU0hMT0dTSVpFCQk0CisjZGVmaW5lIFNORFJWX1NFVF9GTEFTSFNZTkMJCTUKKyNkZWZpbmUgU05EUlZfR0VUX0ZMQVNITE9HREFUQQkJNgorI2RlZmluZSBTTkRSVl9HRVRfRkxBU0hMT0dBTEwJCTcKKworI2RlZmluZSBTTkRSVl9TRVRfSElTVE9HUkFNX1RZUEUJMTQKKworI2RlZmluZSBTTkRSVl9FTFNDX0NPTU1BTkQJCTE5CisjZGVmaW5lCVNORFJWX0NMRUFSX0xPRwkJCTIwCisjZGVmaW5lCVNORFJWX0lOSVRfTE9HCQkJMjEKKyNkZWZpbmUJU05EUlZfR0VUX1BJTU1fUFNDCQkyMgorI2RlZmluZSBTTkRSVl9TRVRfUEFSVElUSU9OCQkyMworI2RlZmluZSBTTkRSVl9HRVRfUEFSVElUSU9OCQkyNAorCisvKiBzZWUgc3luZXJneV9wZXJmX2lvY3RsKCkgKi8KKyNkZWZpbmUgU05EUlZfR0VUX1NZTkVSR1lfVkVSU0lPTgkzMAorI2RlZmluZSBTTkRSVl9HRVRfU1lORVJHWV9TVEFUVVMJMzEKKyNkZWZpbmUgU05EUlZfR0VUX1NZTkVSR1lJTkZPCQkzMgorI2RlZmluZSBTTkRSVl9TWU5FUkdZX0FQUEVORAkJMzMKKyNkZWZpbmUgU05EUlZfU1lORVJHWV9FTkFCTEUJCTM0CisjZGVmaW5lIFNORFJWX1NZTkVSR1lfRlJFUQkJMzUKKworLyogRGV2aWNlcyAqLworI2RlZmluZSBTTkRSVl9VS05PV05fREVWSUNFCQktMQorI2RlZmluZSBTTkRSVl9ST1VURVJfREVWSUNFCQkxCisjZGVmaW5lIFNORFJWX0hVQl9ERVZJQ0UJCTIKKyNkZWZpbmUgU05EUlZfRUxTQ19OVlJBTV9ERVZJQ0UJCTMKKyNkZWZpbmUgU05EUlZfRUxTQ19DT05UUk9MTEVSX0RFVklDRQk0CisjZGVmaW5lIFNORFJWX1NZU0NUTF9TVUJDSAkJNQorI2RlZmluZSBTTkRSVl9TWU5FUkdZX0RFVklDRQkJNgorCisjZW5kaWYgLyogX0FTTV9JQTY0X1NOX1NORFJWX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvc24vdHlwZXMuaCBiL2luY2x1ZGUvYXNtLWlhNjQvc24vdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODZlZDQ3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taWE2NC9zbi90eXBlcy5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMS0yMDAzIFNpbGljb24gR3JhcGhpY3MsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgYnkgUmFsZiBCYWVjaGxlCisgKi8KKyNpZm5kZWYgX0FTTV9JQTY0X1NOX1RZUEVTX0gKKyNkZWZpbmUgX0FTTV9JQTY0X1NOX1RZUEVTX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyAJY3B1aWRfdDsKK3R5cGVkZWYgc2lnbmVkIHNob3J0CW5hc2lkX3Q7CS8qIG5vZGUgaWQgaW4gbnVtYS1hcy1pZCBzcGFjZSAqLwordHlwZWRlZiBzaWduZWQgY2hhcglwYXJ0aWRfdDsJLyogcGFydGl0aW9uIElEIHR5cGUgKi8KK3R5cGVkZWYgdW5zaWduZWQgaW50ICAgIG1vZHVsZWlkX3Q7ICAgICAvKiB1c2VyLXZpc2libGUgbW9kdWxlIG51bWJlciB0eXBlICovCit0eXBlZGVmIHVuc2lnbmVkIGludCAgICBjbW9kdWxlaWRfdDsgICAgLyoga2VybmVsIGNvbXBhY3QgbW9kdWxlIGlkIHR5cGUgKi8KK3R5cGVkZWYgc2lnbmVkIGNoYXIgICAgIHNsYWJpZF90OwordHlwZWRlZiB1NjQgbmljX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW9wYWRkcl90OwordHlwZWRlZiB1bnNpZ25lZCBsb25nIHBhZGRyX3Q7Cit0eXBlZGVmIHNob3J0IGNub2RlaWRfdDsKKworI2VuZGlmIC8qIF9BU01fSUE2NF9TTl9UWVBFU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3NvY2tldC5oIGIvaW5jbHVkZS9hc20taWE2NC9zb2NrZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWE5ZjEwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taWE2NC9zb2NrZXQuaApAQCAtMCwwICsxLDU5IEBACisjaWZuZGVmIF9BU01fSUE2NF9TT0NLRVRfSAorI2RlZmluZSBfQVNNX0lBNjRfU09DS0VUX0gKKworLyoKKyAqIFNvY2tldCByZWxhdGVkIGRlZmluZXMuCisgKgorICogQmFzZWQgb24gPGFzbS1pMzg2L3NvY2tldC5oPi4KKyAqCisgKiBNb2RpZmllZCAxOTk4LTIwMDAKKyAqCURhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4sIEhld2xldHQtUGFja2FyZCBDbworICovCisKKyNpbmNsdWRlIDxhc20vc29ja2lvcy5oPgorCisvKiBGb3Igc2V0c29ja29wdCgyKSAqLworI2RlZmluZSBTT0xfU09DS0VUCTEKKworI2RlZmluZSBTT19ERUJVRwkxCisjZGVmaW5lIFNPX1JFVVNFQUREUgkyCisjZGVmaW5lIFNPX1RZUEUJCTMKKyNkZWZpbmUgU09fRVJST1IJNAorI2RlZmluZSBTT19ET05UUk9VVEUJNQorI2RlZmluZSBTT19CUk9BRENBU1QJNgorI2RlZmluZSBTT19TTkRCVUYJNworI2RlZmluZSBTT19SQ1ZCVUYJOAorI2RlZmluZSBTT19LRUVQQUxJVkUJOQorI2RlZmluZSBTT19PT0JJTkxJTkUJMTAKKyNkZWZpbmUgU09fTk9fQ0hFQ0sJMTEKKyNkZWZpbmUgU09fUFJJT1JJVFkJMTIKKyNkZWZpbmUgU09fTElOR0VSCTEzCisjZGVmaW5lIFNPX0JTRENPTVBBVAkxNAorLyogVG8gYWRkIDojZGVmaW5lIFNPX1JFVVNFUE9SVCAxNSAqLworI2RlZmluZSBTT19QQVNTQ1JFRAkxNgorI2RlZmluZSBTT19QRUVSQ1JFRAkxNworI2RlZmluZSBTT19SQ1ZMT1dBVAkxOAorI2RlZmluZSBTT19TTkRMT1dBVAkxOQorI2RlZmluZSBTT19SQ1ZUSU1FTwkyMAorI2RlZmluZSBTT19TTkRUSU1FTwkyMQorCisvKiBTZWN1cml0eSBsZXZlbHMgLSBhcyBwZXIgTlJMIElQdjYgLSBkb24ndCBhY3R1YWxseSBkbyBhbnl0aGluZyAqLworI2RlZmluZSBTT19TRUNVUklUWV9BVVRIRU5USUNBVElPTgkJMjIKKyNkZWZpbmUgU09fU0VDVVJJVFlfRU5DUllQVElPTl9UUkFOU1BPUlQJMjMKKyNkZWZpbmUgU09fU0VDVVJJVFlfRU5DUllQVElPTl9ORVRXT1JLCQkyNAorCisjZGVmaW5lIFNPX0JJTkRUT0RFVklDRQkJMjUKKworLyogU29ja2V0IGZpbHRlcmluZyAqLworI2RlZmluZSBTT19BVFRBQ0hfRklMVEVSCTI2CisjZGVmaW5lIFNPX0RFVEFDSF9GSUxURVIJMjcKKworI2RlZmluZSBTT19QRUVSTkFNRQkJMjgKKyNkZWZpbmUgU09fVElNRVNUQU1QCQkyOQorI2RlZmluZSBTQ01fVElNRVNUQU1QCQlTT19USU1FU1RBTVAKKworI2RlZmluZSBTT19BQ0NFUFRDT05OCQkzMAorCisjZGVmaW5lIFNPX1BFRVJTRUMgICAgICAgICAgICAgMzEKKworI2VuZGlmIC8qIF9BU01fSUE2NF9TT0NLRVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9zb2NraW9zLmggYi9pbmNsdWRlL2FzbS1pYTY0L3NvY2tpb3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjk0ODU3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taWE2NC9zb2NraW9zLmgKQEAgLTAsMCArMSwxOSBAQAorI2lmbmRlZiBfQVNNX0lBNjRfU09DS0lPU19ICisjZGVmaW5lIF9BU01fSUE2NF9TT0NLSU9TX0gKKworLyoKKyAqIFNvY2tldC1sZXZlbCBJL08gY29udHJvbCBjYWxscy4KKyAqCisgKiBCYXNlZCBvbiA8YXNtLWkzODYvc29ja2lvcy5oPi4KKyAqCisgKiBNb2RpZmllZCAxOTk4LCAxOTk5CisgKglEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+LCBIZXdsZXR0LVBhY2thcmQgQ28KKyAqLworI2RlZmluZSBGSU9TRVRPV04gCTB4ODkwMQorI2RlZmluZSBTSU9DU1BHUlAJMHg4OTAyCisjZGVmaW5lIEZJT0dFVE9XTgkweDg5MDMKKyNkZWZpbmUgU0lPQ0dQR1JQCTB4ODkwNAorI2RlZmluZSBTSU9DQVRNQVJLCTB4ODkwNQorI2RlZmluZSBTSU9DR1NUQU1QCTB4ODkwNgkJLyogR2V0IHN0YW1wICovCisKKyNlbmRpZiAvKiBfQVNNX0lBNjRfU09DS0lPU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3NwaW5sb2NrLmggYi9pbmNsdWRlL2FzbS1pYTY0L3NwaW5sb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA5OTM2ZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvc3BpbmxvY2suaApAQCAtMCwwICsxLDIwOCBAQAorI2lmbmRlZiBfQVNNX0lBNjRfU1BJTkxPQ0tfSAorI2RlZmluZSBfQVNNX0lBNjRfU1BJTkxPQ0tfSAorCisvKgorICogQ29weXJpZ2h0IChDKSAxOTk4LTIwMDMgSGV3bGV0dC1QYWNrYXJkIENvCisgKglEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgV2FsdCBEcnVtbW9uZCA8ZHJ1bW1vbmRAdmFsaW51eC5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIHVzZWQgZm9yIFNNUCBjb25maWd1cmF0aW9ucyBvbmx5LgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KKyNpbmNsdWRlIDxhc20vaW50cmluc2ljcy5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKwordHlwZWRlZiBzdHJ1Y3QgeworCXZvbGF0aWxlIHVuc2lnbmVkIGludCBsb2NrOworI2lmZGVmIENPTkZJR19QUkVFTVBUCisJdW5zaWduZWQgaW50IGJyZWFrX2xvY2s7CisjZW5kaWYKK30gc3BpbmxvY2tfdDsKKworI2RlZmluZSBTUElOX0xPQ0tfVU5MT0NLRUQJCQkoc3BpbmxvY2tfdCkgeyAwIH0KKyNkZWZpbmUgc3Bpbl9sb2NrX2luaXQoeCkJCQkoKHgpLT5sb2NrID0gMCkKKworI2lmZGVmIEFTTV9TVVBQT1JURUQKKy8qCisgKiBUcnkgdG8gZ2V0IHRoZSBsb2NrLiAgSWYgd2UgZmFpbCB0byBnZXQgdGhlIGxvY2ssIG1ha2UgYSBub24tc3RhbmRhcmQgY2FsbCB0bworICogaWE2NF9zcGlubG9ja19jb250ZW50aW9uKCkuICBXZSBkbyBub3QgdXNlIGEgbm9ybWFsIGNhbGwgYmVjYXVzZSB0aGF0IHdvdWxkIGZvcmNlIGFsbAorICogY2FsbGVycyBvZiBzcGluX2xvY2soKSB0byBiZSBub24tbGVhZiByb3V0aW5lcy4gIEluc3RlYWQsIGlhNjRfc3BpbmxvY2tfY29udGVudGlvbigpIGlzCisgKiBjYXJlZnVsbHkgY29kZWQgdG8gdG91Y2ggb25seSB0aG9zZSByZWdpc3RlcnMgdGhhdCBzcGluX2xvY2soKSBtYXJrcyAiY2xvYmJlcmVkIi4KKyAqLworCisjZGVmaW5lIElBNjRfU1BJTkxPQ0tfQ0xPQkJFUlMgImFyLmNjdiIsICJhci5wZnMiLCAicDE0IiwgInAxNSIsICJyMjciLCAicjI4IiwgInIyOSIsICJyMzAiLCAiYjYiLCAibWVtb3J5IgorCitzdGF0aWMgaW5saW5lIHZvaWQKK19yYXdfc3Bpbl9sb2NrX2ZsYWdzIChzcGlubG9ja190ICpsb2NrLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXJlZ2lzdGVyIHZvbGF0aWxlIHVuc2lnbmVkIGludCAqcHRyIGFzbSAoInIzMSIpID0gJmxvY2stPmxvY2s7CisKKyNpZiBfX0dOVUNfXyA8IDMgfHwgKF9fR05VQ19fID09IDMgJiYgX19HTlVDX01JTk9SX18gPCAzKQorIyBpZmRlZiBDT05GSUdfSVRBTklVTQorCS8qIGRvbid0IHVzZSBicmwgb24gSXRhbml1bS4uLiAqLworCWFzbSB2b2xhdGlsZSAoIntcblx0IgorCQkgICAgICAiICBtb3YgYXIuY2N2ID0gcjBcblx0IgorCQkgICAgICAiICBtb3YgcjI4ID0gaXBcblx0IgorCQkgICAgICAiICBtb3YgcjMwID0gMTs7XG5cdCIKKwkJICAgICAgIn1cblx0IgorCQkgICAgICAiY21weGNoZzQuYWNxIHIzMCA9IFslMV0sIHIzMCwgYXIuY2N2XG5cdCIKKwkJICAgICAgIm1vdmwgcjI5ID0gaWE2NF9zcGlubG9ja19jb250ZW50aW9uX3ByZTNfNDs7XG5cdCIKKwkJICAgICAgImNtcDQubmUgcDE0LCBwMCA9IHIzMCwgcjBcblx0IgorCQkgICAgICAibW92IGI2ID0gcjI5Oztcblx0IgorCQkgICAgICAibW92IHIyNz0lMlxuXHQiCisJCSAgICAgICIocDE0KSBici5jb25kLnNwbnQubWFueSBiNiIKKwkJICAgICAgOiAiPXIiKHB0cikgOiAiciIocHRyKSwgInIiIChmbGFncykgOiBJQTY0X1NQSU5MT0NLX0NMT0JCRVJTKTsKKyMgZWxzZQorCWFzbSB2b2xhdGlsZSAoIntcblx0IgorCQkgICAgICAiICBtb3YgYXIuY2N2ID0gcjBcblx0IgorCQkgICAgICAiICBtb3YgcjI4ID0gaXBcblx0IgorCQkgICAgICAiICBtb3YgcjMwID0gMTs7XG5cdCIKKwkJICAgICAgIn1cblx0IgorCQkgICAgICAiY21weGNoZzQuYWNxIHIzMCA9IFslMV0sIHIzMCwgYXIuY2N2Oztcblx0IgorCQkgICAgICAiY21wNC5uZSBwMTQsIHAwID0gcjMwLCByMFxuXHQiCisJCSAgICAgICJtb3YgcjI3PSUyXG5cdCIKKwkJICAgICAgIihwMTQpIGJybC5jb25kLnNwbnQubWFueSBpYTY0X3NwaW5sb2NrX2NvbnRlbnRpb25fcHJlM180OzsiCisJCSAgICAgIDogIj1yIihwdHIpIDogInIiKHB0ciksICJyIiAoZmxhZ3MpIDogSUE2NF9TUElOTE9DS19DTE9CQkVSUyk7CisjIGVuZGlmIC8qIENPTkZJR19NQ0tJTkxFWSAqLworI2Vsc2UKKyMgaWZkZWYgQ09ORklHX0lUQU5JVU0KKwkvKiBkb24ndCB1c2UgYnJsIG9uIEl0YW5pdW0uLi4gKi8KKwkvKiBtaXMtZGVjbGFyZSwgc28gd2UgZ2V0IHRoZSBlbnRyeS1wb2ludCwgbm90IGl0J3MgZnVuY3Rpb24gZGVzY3JpcHRvcjogKi8KKwlhc20gdm9sYXRpbGUgKCJtb3YgcjMwID0gMVxuXHQiCisJCSAgICAgICJtb3YgcjI3PSUyXG5cdCIKKwkJICAgICAgIm1vdiBhci5jY3YgPSByMDs7XG5cdCIKKwkJICAgICAgImNtcHhjaGc0LmFjcSByMzAgPSBbJTBdLCByMzAsIGFyLmNjdlxuXHQiCisJCSAgICAgICJtb3ZsIHIyOSA9IGlhNjRfc3BpbmxvY2tfY29udGVudGlvbjs7XG5cdCIKKwkJICAgICAgImNtcDQubmUgcDE0LCBwMCA9IHIzMCwgcjBcblx0IgorCQkgICAgICAibW92IGI2ID0gcjI5Oztcblx0IgorCQkgICAgICAiKHAxNCkgYnIuY2FsbC5zcG50Lm1hbnkgYjYgPSBiNiIKKwkJICAgICAgOiAiPXIiKHB0cikgOiAiciIocHRyKSwgInIiIChmbGFncykgOiBJQTY0X1NQSU5MT0NLX0NMT0JCRVJTKTsKKyMgZWxzZQorCWFzbSB2b2xhdGlsZSAoIm1vdiByMzAgPSAxXG5cdCIKKwkJICAgICAgIm1vdiByMjc9JTJcblx0IgorCQkgICAgICAibW92IGFyLmNjdiA9IHIwOztcblx0IgorCQkgICAgICAiY21weGNoZzQuYWNxIHIzMCA9IFslMF0sIHIzMCwgYXIuY2N2Oztcblx0IgorCQkgICAgICAiY21wNC5uZSBwMTQsIHAwID0gcjMwLCByMFxuXHQiCisJCSAgICAgICIocDE0KSBicmwuY2FsbC5zcG50Lm1hbnkgYjY9aWE2NF9zcGlubG9ja19jb250ZW50aW9uOzsiCisJCSAgICAgIDogIj1yIihwdHIpIDogInIiKHB0ciksICJyIiAoZmxhZ3MpIDogSUE2NF9TUElOTE9DS19DTE9CQkVSUyk7CisjIGVuZGlmIC8qIENPTkZJR19NQ0tJTkxFWSAqLworI2VuZGlmCit9CisjZGVmaW5lIF9yYXdfc3Bpbl9sb2NrKGxvY2spIF9yYXdfc3Bpbl9sb2NrX2ZsYWdzKGxvY2ssIDApCisjZWxzZSAvKiAhQVNNX1NVUFBPUlRFRCAqLworI2RlZmluZSBfcmF3X3NwaW5fbG9ja19mbGFncyhsb2NrLCBmbGFncykgX3Jhd19zcGluX2xvY2sobG9jaykKKyMgZGVmaW5lIF9yYXdfc3Bpbl9sb2NrKHgpCQkJCQkJCQlcCitkbyB7CQkJCQkJCQkJCQlcCisJX191MzIgKmlhNjRfc3BpbmxvY2tfcHRyID0gKF9fdTMyICopICh4KTsJCQkJCVwKKwlfX3U2NCBpYTY0X3NwaW5sb2NrX3ZhbDsJCQkJCQkJXAorCWlhNjRfc3BpbmxvY2tfdmFsID0gaWE2NF9jbXB4Y2hnNF9hY3EoaWE2NF9zcGlubG9ja19wdHIsIDEsIDApOwkJCVwKKwlpZiAodW5saWtlbHkoaWE2NF9zcGlubG9ja192YWwpKSB7CQkJCQkJXAorCQlkbyB7CQkJCQkJCQkJXAorCQkJd2hpbGUgKCppYTY0X3NwaW5sb2NrX3B0cikJCQkJCVwKKwkJCQlpYTY0X2JhcnJpZXIoKTsJCQkJCQlcCisJCQlpYTY0X3NwaW5sb2NrX3ZhbCA9IGlhNjRfY21weGNoZzRfYWNxKGlhNjRfc3BpbmxvY2tfcHRyLCAxLCAwKTsJXAorCQl9IHdoaWxlIChpYTY0X3NwaW5sb2NrX3ZhbCk7CQkJCQkJXAorCX0JCQkJCQkJCQkJXAorfSB3aGlsZSAoMCkKKyNlbmRpZiAvKiAhQVNNX1NVUFBPUlRFRCAqLworCisjZGVmaW5lIHNwaW5faXNfbG9ja2VkKHgpCSgoeCktPmxvY2sgIT0gMCkKKyNkZWZpbmUgX3Jhd19zcGluX3VubG9jayh4KQlkbyB7IGJhcnJpZXIoKTsgKChzcGlubG9ja190ICopIHgpLT5sb2NrID0gMDsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgX3Jhd19zcGluX3RyeWxvY2soeCkJKGNtcHhjaGdfYWNxKCYoeCktPmxvY2ssIDAsIDEpID09IDApCisjZGVmaW5lIHNwaW5fdW5sb2NrX3dhaXQoeCkJZG8geyBiYXJyaWVyKCk7IH0gd2hpbGUgKCh4KS0+bG9jaykKKwordHlwZWRlZiBzdHJ1Y3QgeworCXZvbGF0aWxlIHVuc2lnbmVkIGludCByZWFkX2NvdW50ZXIJOiAzMTsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgd3JpdGVfbG9jawk6ICAxOworI2lmZGVmIENPTkZJR19QUkVFTVBUCisJdW5zaWduZWQgaW50IGJyZWFrX2xvY2s7CisjZW5kaWYKK30gcndsb2NrX3Q7CisjZGVmaW5lIFJXX0xPQ0tfVU5MT0NLRUQgKHJ3bG9ja190KSB7IDAsIDAgfQorCisjZGVmaW5lIHJ3bG9ja19pbml0KHgpCQlkbyB7ICooeCkgPSBSV19MT0NLX1VOTE9DS0VEOyB9IHdoaWxlKDApCisjZGVmaW5lIHJlYWRfY2FuX2xvY2socncpCSgqKHZvbGF0aWxlIGludCAqKShydykgPj0gMCkKKyNkZWZpbmUgd3JpdGVfY2FuX2xvY2socncpCSgqKHZvbGF0aWxlIGludCAqKShydykgPT0gMCkKKworI2RlZmluZSBfcmF3X3JlYWRfbG9jayhydykJCQkJCQkJCVwKK2RvIHsJCQkJCQkJCQkJCVwKKwlyd2xvY2tfdCAqX19yZWFkX2xvY2tfcHRyID0gKHJ3KTsJCQkJCQlcCisJCQkJCQkJCQkJCVwKKwl3aGlsZSAodW5saWtlbHkoaWE2NF9mZXRjaGFkZCgxLCAoaW50ICopIF9fcmVhZF9sb2NrX3B0ciwgYWNxKSA8IDApKSB7CQlcCisJCWlhNjRfZmV0Y2hhZGQoLTEsIChpbnQgKikgX19yZWFkX2xvY2tfcHRyLCByZWwpOwkJCVwKKwkJd2hpbGUgKCoodm9sYXRpbGUgaW50ICopX19yZWFkX2xvY2tfcHRyIDwgMCkJCQkJXAorCQkJY3B1X3JlbGF4KCk7CQkJCQkJCVwKKwl9CQkJCQkJCQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgX3Jhd19yZWFkX3VubG9jayhydykJCQkJCVwKK2RvIHsJCQkJCQkJCVwKKwlyd2xvY2tfdCAqX19yZWFkX2xvY2tfcHRyID0gKHJ3KTsJCQlcCisJaWE2NF9mZXRjaGFkZCgtMSwgKGludCAqKSBfX3JlYWRfbG9ja19wdHIsIHJlbCk7CVwKK30gd2hpbGUgKDApCisKKyNpZmRlZiBBU01fU1VQUE9SVEVECisjZGVmaW5lIF9yYXdfd3JpdGVfbG9jayhydykJCQkJCQkJXAorZG8gewkJCQkJCQkJCQlcCisgCV9fYXNtX18gX192b2xhdGlsZV9fICgJCQkJCQkJXAorCQkibW92IGFyLmNjdiA9IHIwXG4iCQkJCQkJXAorCQkiZGVwIHIyOSA9IC0xLCByMCwgMzEsIDE7O1xuIgkJCQkJXAorCQkiMTpcbiIJCQkJCQkJCVwKKwkJImxkNCByMiA9IFslMF07O1xuIgkJCQkJCVwKKwkJImNtcDQuZXEgcDAscDcgPSByMCxyMlxuIgkJCQkJXAorCQkiKHA3KSBici5jb25kLnNwbnQuZmV3IDFiIFxuIgkJCQkJXAorCQkiY21weGNoZzQuYWNxIHIyID0gWyUwXSwgcjI5LCBhci5jY3Y7O1xuIgkJCVwKKwkJImNtcDQuZXEgcDAscDcgPSByMCwgcjJcbiIJCQkJCVwKKwkJIihwNykgYnIuY29uZC5zcG50LmZldyAxYjs7XG4iCQkJCQlcCisJCTo6ICJyIihydykgOiAiYXIuY2N2IiwgInA3IiwgInIyIiwgInIyOSIsICJtZW1vcnkiKTsJCVwKK30gd2hpbGUoMCkKKworI2RlZmluZSBfcmF3X3dyaXRlX3RyeWxvY2socncpCQkJCQkJCVwKKyh7CQkJCQkJCQkJCVwKKwlyZWdpc3RlciBsb25nIHJlc3VsdDsJCQkJCQkJXAorCQkJCQkJCQkJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCQkJCVwKKwkJIm1vdiBhci5jY3YgPSByMFxuIgkJCQkJCVwKKwkJImRlcCByMjkgPSAtMSwgcjAsIDMxLCAxOztcbiIJCQkJCVwKKwkJImNtcHhjaGc0LmFjcSAlMCA9IFslMV0sIHIyOSwgYXIuY2N2XG4iCQkJCVwKKwkJOiAiPXIiKHJlc3VsdCkgOiAiciIocncpIDogImFyLmNjdiIsICJyMjkiLCAibWVtb3J5Iik7CQlcCisJKHJlc3VsdCA9PSAwKTsJCQkJCQkJCVwKK30pCisKKyNlbHNlIC8qICFBU01fU1VQUE9SVEVEICovCisKKyNkZWZpbmUgX3Jhd193cml0ZV9sb2NrKGwpCQkJCQkJCQlcCisoewkJCQkJCQkJCQkJXAorCV9fdTY0IGlhNjRfdmFsLCBpYTY0X3NldF92YWwgPSBpYTY0X2RlcF9taSgtMSwgMCwgMzEsIDEpOwkJCVwKKwlfX3UzMiAqaWE2NF93cml0ZV9sb2NrX3B0ciA9IChfX3UzMiAqKSAobCk7CQkJCQlcCisJZG8gewkJCQkJCQkJCQlcCisJCXdoaWxlICgqaWE2NF93cml0ZV9sb2NrX3B0cikJCQkJCQlcCisJCQlpYTY0X2JhcnJpZXIoKTsJCQkJCQkJXAorCQlpYTY0X3ZhbCA9IGlhNjRfY21weGNoZzRfYWNxKGlhNjRfd3JpdGVfbG9ja19wdHIsIGlhNjRfc2V0X3ZhbCwgMCk7CVwKKwl9IHdoaWxlIChpYTY0X3ZhbCk7CQkJCQkJCQlcCit9KQorCisjZGVmaW5lIF9yYXdfd3JpdGVfdHJ5bG9jayhydykJCQkJCQlcCisoewkJCQkJCQkJCVwKKwlfX3U2NCBpYTY0X3ZhbDsJCQkJCQkJXAorCV9fdTY0IGlhNjRfc2V0X3ZhbCA9IGlhNjRfZGVwX21pKC0xLCAwLCAzMSwxKTsJCQlcCisJaWE2NF92YWwgPSBpYTY0X2NtcHhjaGc0X2FjcSgoX191MzIgKikocncpLCBpYTY0X3NldF92YWwsIDApOwlcCisJKGlhNjRfdmFsID09IDApOwkJCQkJCVwKK30pCisKKyNlbmRpZiAvKiAhQVNNX1NVUFBPUlRFRCAqLworCisjZGVmaW5lIF9yYXdfcmVhZF90cnlsb2NrKGxvY2spIGdlbmVyaWNfcmF3X3JlYWRfdHJ5bG9jayhsb2NrKQorCisjZGVmaW5lIF9yYXdfd3JpdGVfdW5sb2NrKHgpCQkJCQkJCQlcCisoewkJCQkJCQkJCQkJXAorCXNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpOwkvKiBuZWVkIGJhcnJpZXIgYmVmb3JlIHJlbGVhc2luZyBsb2NrLi4uICovCVwKKwljbGVhcl9iaXQoMzEsICh4KSk7CQkJCQkJCQlcCit9KQorCisjZW5kaWYgLyogIF9BU01fSUE2NF9TUElOTE9DS19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3N0YXQuaCBiL2luY2x1ZGUvYXNtLWlhNjQvc3RhdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2N2JiOTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3N0YXQuaApAQCAtMCwwICsxLDUxIEBACisjaWZuZGVmIF9BU01fSUE2NF9TVEFUX0gKKyNkZWZpbmUgX0FTTV9JQTY0X1NUQVRfSAorCisvKgorICogTW9kaWZpZWQgMTk5OCwgMTk5OQorICoJRGF2aWQgTW9zYmVyZ2VyLVRhbmcgPGRhdmlkbUBocGwuaHAuY29tPiwgSGV3bGV0dC1QYWNrYXJkIENvCisgKi8KKworc3RydWN0IHN0YXQgeworCXVuc2lnbmVkIGxvbmcJc3RfZGV2OworCXVuc2lnbmVkIGxvbmcJc3RfaW5vOworCXVuc2lnbmVkIGxvbmcJc3Rfbmxpbms7CisJdW5zaWduZWQgaW50CXN0X21vZGU7CisJdW5zaWduZWQgaW50CXN0X3VpZDsKKwl1bnNpZ25lZCBpbnQJc3RfZ2lkOworCXVuc2lnbmVkIGludAlfX3BhZDA7CisJdW5zaWduZWQgbG9uZwlzdF9yZGV2OworCXVuc2lnbmVkIGxvbmcJc3Rfc2l6ZTsKKwl1bnNpZ25lZCBsb25nCXN0X2F0aW1lOworCXVuc2lnbmVkIGxvbmcJc3RfYXRpbWVfbnNlYzsKKwl1bnNpZ25lZCBsb25nCXN0X210aW1lOworCXVuc2lnbmVkIGxvbmcJc3RfbXRpbWVfbnNlYzsKKwl1bnNpZ25lZCBsb25nCXN0X2N0aW1lOworCXVuc2lnbmVkIGxvbmcJc3RfY3RpbWVfbnNlYzsKKwl1bnNpZ25lZCBsb25nCXN0X2Jsa3NpemU7CisJbG9uZwkJc3RfYmxvY2tzOworCXVuc2lnbmVkIGxvbmcJX191bnVzZWRbM107Cit9OworCisjZGVmaW5lIFNUQVRfSEFWRV9OU0VDIDEKKworc3RydWN0IGlhNjRfb2xkc3RhdCB7CisJdW5zaWduZWQgaW50CXN0X2RldjsKKwl1bnNpZ25lZCBpbnQJc3RfaW5vOworCXVuc2lnbmVkIGludAlzdF9tb2RlOworCXVuc2lnbmVkIGludAlzdF9ubGluazsKKwl1bnNpZ25lZCBpbnQJc3RfdWlkOworCXVuc2lnbmVkIGludAlzdF9naWQ7CisJdW5zaWduZWQgaW50CXN0X3JkZXY7CisJdW5zaWduZWQgaW50CV9fcGFkMTsKKwl1bnNpZ25lZCBsb25nCXN0X3NpemU7CisJdW5zaWduZWQgbG9uZwlzdF9hdGltZTsKKwl1bnNpZ25lZCBsb25nCXN0X210aW1lOworCXVuc2lnbmVkIGxvbmcJc3RfY3RpbWU7CisJdW5zaWduZWQgaW50CXN0X2Jsa3NpemU7CisJaW50CQlzdF9ibG9ja3M7CisJdW5zaWduZWQgaW50CV9fdW51c2VkMTsKKwl1bnNpZ25lZCBpbnQJX191bnVzZWQyOworfTsKKworI2VuZGlmIC8qIF9BU01fSUE2NF9TVEFUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvc3RhdGZzLmggYi9pbmNsdWRlL2FzbS1pYTY0L3N0YXRmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxMTA5NzkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3N0YXRmcy5oCkBAIC0wLDAgKzEsNjIgQEAKKyNpZm5kZWYgX0FTTV9JQTY0X1NUQVRGU19ICisjZGVmaW5lIF9BU01fSUE2NF9TVEFURlNfSAorCisvKgorICogQmFzZWQgb24gPGFzbS1pMzg2L3N0YXRmcy5oPi4KKyAqCisgKiBNb2RpZmllZCAxOTk4LCAxOTk5LCAyMDAzCisgKglEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+LCBIZXdsZXR0LVBhY2thcmQgQ28KKyAqLworCisjaWZuZGVmIF9fS0VSTkVMX1NUUklDVF9OQU1FUworIyBpbmNsdWRlIDxsaW51eC90eXBlcy5oPgordHlwZWRlZiBfX2tlcm5lbF9mc2lkX3QJZnNpZF90OworI2VuZGlmCisKKy8qCisgKiBUaGlzIGlzIHVnbHkgLS0tIHdlJ3JlIGFscmVhZHkgNjQtYml0LCBzbyBqdXN0IGR1cGxpY2F0ZSB0aGUgZGVmaW5pdGlvbnMKKyAqLworc3RydWN0IHN0YXRmcyB7CisJbG9uZyBmX3R5cGU7CisJbG9uZyBmX2JzaXplOworCWxvbmcgZl9ibG9ja3M7CisJbG9uZyBmX2JmcmVlOworCWxvbmcgZl9iYXZhaWw7CisJbG9uZyBmX2ZpbGVzOworCWxvbmcgZl9mZnJlZTsKKwlfX2tlcm5lbF9mc2lkX3QgZl9mc2lkOworCWxvbmcgZl9uYW1lbGVuOworCWxvbmcgZl9mcnNpemU7CisJbG9uZyBmX3NwYXJlWzVdOworfTsKKworCitzdHJ1Y3Qgc3RhdGZzNjQgeworCWxvbmcgZl90eXBlOworCWxvbmcgZl9ic2l6ZTsKKwlsb25nIGZfYmxvY2tzOworCWxvbmcgZl9iZnJlZTsKKwlsb25nIGZfYmF2YWlsOworCWxvbmcgZl9maWxlczsKKwlsb25nIGZfZmZyZWU7CisJX19rZXJuZWxfZnNpZF90IGZfZnNpZDsKKwlsb25nIGZfbmFtZWxlbjsKKwlsb25nIGZfZnJzaXplOworCWxvbmcgZl9zcGFyZVs1XTsKK307CisKK3N0cnVjdCBjb21wYXRfc3RhdGZzNjQgeworCV9fdTMyIGZfdHlwZTsKKwlfX3UzMiBmX2JzaXplOworCV9fdTY0IGZfYmxvY2tzOworCV9fdTY0IGZfYmZyZWU7CisJX191NjQgZl9iYXZhaWw7CisJX191NjQgZl9maWxlczsKKwlfX3U2NCBmX2ZmcmVlOworCV9fa2VybmVsX2ZzaWRfdCBmX2ZzaWQ7CisJX191MzIgZl9uYW1lbGVuOworCV9fdTMyIGZfZnJzaXplOworCV9fdTMyIGZfc3BhcmVbNV07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZW5kaWYgLyogX0FTTV9JQTY0X1NUQVRGU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3N0cmluZy5oIGIvaW5jbHVkZS9hc20taWE2NC9zdHJpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzUwMmQzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taWE2NC9zdHJpbmcuaApAQCAtMCwwICsxLDIyIEBACisjaWZuZGVmIF9BU01fSUE2NF9TVFJJTkdfSAorI2RlZmluZSBfQVNNX0lBNjRfU1RSSU5HX0gKKworLyoKKyAqIEhlcmUgaXMgd2hlcmUgd2Ugd2FudCB0byBwdXQgb3B0aW1pemVkIHZlcnNpb25zIG9mIHRoZSBzdHJpbmcKKyAqIHJvdXRpbmVzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OC0yMDAwLCAyMDAyIEhld2xldHQtUGFja2FyZCBDbworICoJRGF2aWQgTW9zYmVyZ2VyLVRhbmcgPGRhdmlkbUBocGwuaHAuY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4JLyogcmVtb3ZlIHRoaXMgb25jZSB3ZSByZW1vdmUgdGhlIEEtc3RlcCB3b3JrYXJvdW5kLi4uICovCisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSTEVOCTEgLyogc2VlIGFyY2gvaWE2NC9saWIvc3RybGVuLlMgKi8KKyNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNU0VUCTEgLyogc2VlIGFyY2gvaWE2NC9saWIvbWVtc2V0LlMgKi8KKyNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNQ1BZCTEgLyogc2VlIGFyY2gvaWE2NC9saWIvbWVtY3B5LlMgKi8KKworZXh0ZXJuIF9fa2VybmVsX3NpemVfdCBzdHJsZW4gKGNvbnN0IGNoYXIgKik7CitleHRlcm4gdm9pZCAqbWVtY3B5ICh2b2lkICosIGNvbnN0IHZvaWQgKiwgX19rZXJuZWxfc2l6ZV90KTsKK2V4dGVybiB2b2lkICptZW1zZXQgKHZvaWQgKiwgaW50LCBfX2tlcm5lbF9zaXplX3QpOworCisjZW5kaWYgLyogX0FTTV9JQTY0X1NUUklOR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3N1c3BlbmQuaCBiL2luY2x1ZGUvYXNtLWlhNjQvc3VzcGVuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwNWJiYjYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3N1c3BlbmQuaApAQCAtMCwwICsxIEBACisvKiBkdW1teSAobXVzdCBiZSBub24tZW1wdHkgdG8gcHJldmVudCBwcmVqdWRpY2lhbCByZW1vdmFsLi4uKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLWlhNjQvc3lzdGVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY1MTZlNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvc3lzdGVtLmgKQEAgLTAsMCArMSwyOTUgQEAKKyNpZm5kZWYgX0FTTV9JQTY0X1NZU1RFTV9ICisjZGVmaW5lIF9BU01fSUE2NF9TWVNURU1fSAorCisvKgorICogU3lzdGVtIGRlZmluZXMuIE5vdGUgdGhhdCB0aGlzIGlzIGluY2x1ZGVkIGJvdGggZnJvbSAuYyBhbmQgLlMKKyAqIGZpbGVzLCBzbyBpdCBkb2VzIG9ubHkgZGVmaW5lcywgbm90IGFueSBDIGNvZGUuICBUaGlzIGlzIGJhc2VkCisgKiBvbiBpbmZvcm1hdGlvbiBwdWJsaXNoZWQgaW4gdGhlIFByb2Nlc3NvciBBYnN0cmFjdGlvbiBMYXllcgorICogYW5kIHRoZSBTeXN0ZW0gQWJzdHJhY3Rpb24gTGF5ZXIgbWFudWFsLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OC0yMDAzIEhld2xldHQtUGFja2FyZCBDbworICoJRGF2aWQgTW9zYmVyZ2VyLVRhbmcgPGRhdmlkbUBocGwuaHAuY29tPgorICogQ29weXJpZ2h0IChDKSAxOTk5IEFzaXQgTWFsbGljayA8YXNpdC5rLm1hbGxpY2tAaW50ZWwuY29tPgorICogQ29weXJpZ2h0IChDKSAxOTk5IERvbiBEdWdnZXIgPGRvbi5kdWdnZXJAaW50ZWwuY29tPgorICovCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpbmNsdWRlIDxhc20va3JlZ3MuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9wYWwuaD4KKyNpbmNsdWRlIDxhc20vcGVyY3B1Lmg+CisKKyNkZWZpbmUgR0FURV9BRERSCQlfX0lBNjRfVUxfQ09OU1QoMHhhMDAwMDAwMDAwMDAwMDAwKQorLyoKKyAqIDB4YTAwMDAwMDAwMDAwMDAwMCsyKlBFUkNQVV9QQUdFX1NJWkUKKyAqIC0gMHhhMDAwMDAwMDAwMDAwMDAwKzMqUEVSQ1BVX1BBR0VfU0laRSByZW1haW4gdW5tYXBwZWQgKGd1YXJkIHBhZ2UpCisgKi8KKyNkZWZpbmUgS0VSTkVMX1NUQVJUCQkgX19JQTY0X1VMX0NPTlNUKDB4YTAwMDAwMDEwMDAwMDAwMCkKKyNkZWZpbmUgUEVSQ1BVX0FERFIJCSgtUEVSQ1BVX1BBR0VfU0laRSkKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3N0cnVjdCBwY2lfdmVjdG9yX3N0cnVjdCB7CisJX191MTYgc2VnbWVudDsJLyogUENJIFNlZ21lbnQgbnVtYmVyICovCisJX191MTYgYnVzOwkvKiBQQ0kgQnVzIG51bWJlciAqLworCV9fdTMyIHBjaV9pZDsJLyogQUNQSSBzcGxpdCAxNiBiaXRzIGRldmljZSwgMTYgYml0cyBmdW5jdGlvbiAoc2VlIHNlY3Rpb24gNi4xLjEpICovCisJX191OCBwaW47CS8qIFBDSSBQSU4gKDAgPSBBLCAxID0gQiwgMiA9IEMsIDMgPSBEKSAqLworCV9fdTMyIGlycTsJLyogSVJRIGFzc2lnbmVkICovCit9OworCitleHRlcm4gc3RydWN0IGlhNjRfYm9vdF9wYXJhbSB7CisJX191NjQgY29tbWFuZF9saW5lOwkJLyogcGh5c2ljYWwgYWRkcmVzcyBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzICovCisJX191NjQgZWZpX3N5c3RhYjsJCS8qIHBoeXNpY2FsIGFkZHJlc3Mgb2YgRUZJIHN5c3RlbSB0YWJsZSAqLworCV9fdTY0IGVmaV9tZW1tYXA7CQkvKiBwaHlzaWNhbCBhZGRyZXNzIG9mIEVGSSBtZW1vcnkgbWFwICovCisJX191NjQgZWZpX21lbW1hcF9zaXplOwkJLyogc2l6ZSBvZiBFRkkgbWVtb3J5IG1hcCAqLworCV9fdTY0IGVmaV9tZW1kZXNjX3NpemU7CQkvKiBzaXplIG9mIGFuIEVGSSBtZW1vcnkgbWFwIGRlc2NyaXB0b3IgKi8KKwlfX3UzMiBlZmlfbWVtZGVzY192ZXJzaW9uOwkvKiBtZW1vcnkgZGVzY3JpcHRvciB2ZXJzaW9uICovCisJc3RydWN0IHsKKwkJX191MTYgbnVtX2NvbHM7CS8qIG51bWJlciBvZiBjb2x1bW5zIG9uIGNvbnNvbGUgb3V0cHV0IGRldmljZSAqLworCQlfX3UxNiBudW1fcm93czsJLyogbnVtYmVyIG9mIHJvd3Mgb24gY29uc29sZSBvdXRwdXQgZGV2aWNlICovCisJCV9fdTE2IG9yaWdfeDsJLyogY3Vyc29yJ3MgeCBwb3NpdGlvbiAqLworCQlfX3UxNiBvcmlnX3k7CS8qIGN1cnNvcidzIHkgcG9zaXRpb24gKi8KKwl9IGNvbnNvbGVfaW5mbzsKKwlfX3U2NCBmcHN3YTsJCS8qIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIGZwc3dhIGludGVyZmFjZSAqLworCV9fdTY0IGluaXRyZF9zdGFydDsKKwlfX3U2NCBpbml0cmRfc2l6ZTsKK30gKmlhNjRfYm9vdF9wYXJhbTsKKworLyoKKyAqIE1hY3JvcyB0byBmb3JjZSBtZW1vcnkgb3JkZXJpbmcuICBJbiB0aGVzZSBkZXNjcmlwdGlvbnMsICJwcmV2aW91cyIKKyAqIGFuZCAic3Vic2VxdWVudCIgcmVmZXIgdG8gcHJvZ3JhbSBvcmRlcjsgInZpc2libGUiIG1lYW5zIHRoYXQgYWxsCisgKiBhcmNoaXRlY3R1cmFsbHkgdmlzaWJsZSBlZmZlY3RzIG9mIGEgbWVtb3J5IGFjY2VzcyBoYXZlIG9jY3VycmVkCisgKiAoYXQgYSBtaW5pbXVtLCB0aGlzIG1lYW5zIHRoZSBtZW1vcnkgaGFzIGJlZW4gcmVhZCBvciB3cml0dGVuKS4KKyAqCisgKiAgIHdtYigpOglHdWFyYW50ZWVzIHRoYXQgYWxsIHByZWNlZGluZyBzdG9yZXMgdG8gbWVtb3J5LQorICoJCWxpa2UgcmVnaW9ucyBhcmUgdmlzaWJsZSBiZWZvcmUgYW55IHN1YnNlcXVlbnQKKyAqCQlzdG9yZXMgYW5kIHRoYXQgYWxsIGZvbGxvd2luZyBzdG9yZXMgd2lsbCBiZQorICoJCXZpc2libGUgb25seSBhZnRlciBhbGwgcHJldmlvdXMgc3RvcmVzLgorICogICBybWIoKToJTGlrZSB3bWIoKSwgYnV0IGZvciByZWFkcy4KKyAqICAgbWIoKToJd21iKCkvcm1iKCkgY29tYm8sIGkuZS4sIGFsbCBwcmV2aW91cyBtZW1vcnkKKyAqCQlhY2Nlc3NlcyBhcmUgdmlzaWJsZSBiZWZvcmUgYWxsIHN1YnNlcXVlbnQKKyAqCQlhY2Nlc3NlcyBhbmQgdmljZSB2ZXJzYS4gIFRoaXMgaXMgYWxzbyBrbm93biBhcworICoJCWEgImZlbmNlLiIKKyAqCisgKiBOb3RlOiAibWIoKSIgYW5kIGl0cyB2YXJpYW50cyBjYW5ub3QgYmUgdXNlZCBhcyBhIGZlbmNlIHRvIG9yZGVyCisgKiBhY2Nlc3NlcyB0byBtZW1vcnkgbWFwcGVkIEkvTyByZWdpc3RlcnMuICBGb3IgdGhhdCwgbWYuYSBuZWVkcyB0bworICogYmUgdXNlZC4gIEhvd2V2ZXIsIHdlIGRvbid0IHdhbnQgdG8gYWx3YXlzIHVzZSBtZi5hIGJlY2F1c2UgKGEpCisgKiBpdCdzIChwcmVzdW1hYmx5KSBtdWNoIHNsb3dlciB0aGFuIG1mIGFuZCAoYikgbWYuYSBpcyBzdXBwb3J0ZWQgZm9yCisgKiBzZXF1ZW50aWFsIG1lbW9yeSBwYWdlcyBvbmx5LgorICovCisjZGVmaW5lIG1iKCkJaWE2NF9tZigpCisjZGVmaW5lIHJtYigpCW1iKCkKKyNkZWZpbmUgd21iKCkJbWIoKQorI2RlZmluZSByZWFkX2JhcnJpZXJfZGVwZW5kcygpCWRvIHsgfSB3aGlsZSgwKQorCisjaWZkZWYgQ09ORklHX1NNUAorIyBkZWZpbmUgc21wX21iKCkJbWIoKQorIyBkZWZpbmUgc21wX3JtYigpCXJtYigpCisjIGRlZmluZSBzbXBfd21iKCkJd21iKCkKKyMgZGVmaW5lIHNtcF9yZWFkX2JhcnJpZXJfZGVwZW5kcygpCXJlYWRfYmFycmllcl9kZXBlbmRzKCkKKyNlbHNlCisjIGRlZmluZSBzbXBfbWIoKQliYXJyaWVyKCkKKyMgZGVmaW5lIHNtcF9ybWIoKQliYXJyaWVyKCkKKyMgZGVmaW5lIHNtcF93bWIoKQliYXJyaWVyKCkKKyMgZGVmaW5lIHNtcF9yZWFkX2JhcnJpZXJfZGVwZW5kcygpCWRvIHsgfSB3aGlsZSgwKQorI2VuZGlmCisKKy8qCisgKiBYWFggY2hlY2sgb24gdGhlc2UtLS1JIHN1c3BlY3Qgd2hhdCBMaW51cyByZWFsbHkgd2FudHMgaGVyZSBpcworICogYWNxdWlyZSB2cyByZWxlYXNlIHNlbWFudGljcyBidXQgd2UgY2FuJ3QgZGlzY3VzcyB0aGlzIHN0dWZmIHdpdGgKKyAqIExpbnVzIGp1c3QgeWV0LiAgR3Jyci4uLgorICovCisjZGVmaW5lIHNldF9tYih2YXIsIHZhbHVlKQlkbyB7ICh2YXIpID0gKHZhbHVlKTsgbWIoKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgc2V0X3dtYih2YXIsIHZhbHVlKQlkbyB7ICh2YXIpID0gKHZhbHVlKTsgbWIoKTsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBzYWZlX2hhbHQoKSAgICAgICAgIGlhNjRfcGFsX2hhbHRfbGlnaHQoKSAgICAvKiBQQUxfSEFMVF9MSUdIVCAqLworCisvKgorICogVGhlIGdyb3VwIGJhcnJpZXIgaW4gZnJvbnQgb2YgdGhlIHJzbSAmIHNzbSBhcmUgbmVjZXNzYXJ5IHRvIGVuc3VyZQorICogdGhhdCBub25lIG9mIHRoZSBwcmV2aW91cyBpbnN0cnVjdGlvbnMgaW4gdGhlIHNhbWUgZ3JvdXAgYXJlCisgKiBhZmZlY3RlZCBieSB0aGUgcnNtL3NzbS4KKyAqLworLyogRm9yIHNwaW5sb2NrcyBldGMgKi8KKworLyoKKyAqIC0gY2xlYXJpbmcgcHNyLmkgaXMgaW1wbGljaXRseSBzZXJpYWxpemVkICh2aXNpYmxlIGJ5IG5leHQgaW5zbikKKyAqIC0gc2V0dGluZyBwc3IuaSByZXF1aXJlcyBkYXRhIHNlcmlhbGl6YXRpb24KKyAqIC0gd2UgbmVlZCBhIHN0b3AtYml0IGJlZm9yZSByZWFkaW5nIFBTUiBiZWNhdXNlIHdlIHNvbWV0aW1lcworICogICB3cml0ZSBhIGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVyIHJpZ2h0IGJlZm9yZSByZWFkaW5nIHRoZSBQU1IKKyAqICAgYW5kIHRoYXQgd3JpdGVzIHRvIFBTUi5tZmwKKyAqLworI2RlZmluZSBfX2xvY2FsX2lycV9zYXZlKHgpCQkJXAorZG8gewkJCQkJCVwKKwlpYTY0X3N0b3AoKTsJCQkJXAorCSh4KSA9IGlhNjRfZ2V0cmVnKF9JQTY0X1JFR19QU1IpOwlcCisJaWE2NF9zdG9wKCk7CQkJCVwKKwlpYTY0X3JzbShJQTY0X1BTUl9JKTsJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIF9fbG9jYWxfaXJxX2Rpc2FibGUoKQkJCVwKK2RvIHsJCQkJCQlcCisJaWE2NF9zdG9wKCk7CQkJCVwKKwlpYTY0X3JzbShJQTY0X1BTUl9JKTsJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIF9fbG9jYWxfaXJxX3Jlc3RvcmUoeCkJaWE2NF9pbnRyaW5fbG9jYWxfaXJxX3Jlc3RvcmUoKHgpICYgSUE2NF9QU1JfSSkKKworI2lmZGVmIENPTkZJR19JQTY0X0RFQlVHX0lSUQorCisgIGV4dGVybiB1bnNpZ25lZCBsb25nIGxhc3RfY2xpX2lwOworCisjIGRlZmluZSBfX3NhdmVfaXAoKQkJbGFzdF9jbGlfaXAgPSBpYTY0X2dldHJlZyhfSUE2NF9SRUdfSVApCisKKyMgZGVmaW5lIGxvY2FsX2lycV9zYXZlKHgpCQkJCQlcCitkbyB7CQkJCQkJCQlcCisJdW5zaWduZWQgbG9uZyBwc3I7CQkJCQlcCisJCQkJCQkJCVwKKwlfX2xvY2FsX2lycV9zYXZlKHBzcik7CQkJCQlcCisJaWYgKHBzciAmIElBNjRfUFNSX0kpCQkJCQlcCisJCV9fc2F2ZV9pcCgpOwkJCQkJXAorCSh4KSA9IHBzcjsJCQkJCQlcCit9IHdoaWxlICgwKQorCisjIGRlZmluZSBsb2NhbF9pcnFfZGlzYWJsZSgpCWRvIHsgdW5zaWduZWQgbG9uZyB4OyBsb2NhbF9pcnFfc2F2ZSh4KTsgfSB3aGlsZSAoMCkKKworIyBkZWZpbmUgbG9jYWxfaXJxX3Jlc3RvcmUoeCkJCQkJCVwKK2RvIHsJCQkJCQkJCVwKKwl1bnNpZ25lZCBsb25nIG9sZF9wc3IsIHBzciA9ICh4KTsJCQlcCisJCQkJCQkJCVwKKwlsb2NhbF9zYXZlX2ZsYWdzKG9sZF9wc3IpOwkJCQlcCisJX19sb2NhbF9pcnFfcmVzdG9yZShwc3IpOwkJCQlcCisJaWYgKChvbGRfcHNyICYgSUE2NF9QU1JfSSkgJiYgIShwc3IgJiBJQTY0X1BTUl9JKSkJXAorCQlfX3NhdmVfaXAoKTsJCQkJCVwKK30gd2hpbGUgKDApCisKKyNlbHNlIC8qICFDT05GSUdfSUE2NF9ERUJVR19JUlEgKi8KKyMgZGVmaW5lIGxvY2FsX2lycV9zYXZlKHgpCV9fbG9jYWxfaXJxX3NhdmUoeCkKKyMgZGVmaW5lIGxvY2FsX2lycV9kaXNhYmxlKCkJX19sb2NhbF9pcnFfZGlzYWJsZSgpCisjIGRlZmluZSBsb2NhbF9pcnFfcmVzdG9yZSh4KQlfX2xvY2FsX2lycV9yZXN0b3JlKHgpCisjZW5kaWYgLyogIUNPTkZJR19JQTY0X0RFQlVHX0lSUSAqLworCisjZGVmaW5lIGxvY2FsX2lycV9lbmFibGUoKQkoeyBpYTY0X3N0b3AoKTsgaWE2NF9zc20oSUE2NF9QU1JfSSk7IGlhNjRfc3Jsel9kKCk7IH0pCisjZGVmaW5lIGxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpCSh7IGlhNjRfc3RvcCgpOyAoZmxhZ3MpID0gaWE2NF9nZXRyZWcoX0lBNjRfUkVHX1BTUik7IH0pCisKKyNkZWZpbmUgaXJxc19kaXNhYmxlZCgpCQkJCVwKKyh7CQkJCQkJXAorCXVuc2lnbmVkIGxvbmcgX19pYTY0X2lkX2ZsYWdzOwkJXAorCWxvY2FsX3NhdmVfZmxhZ3MoX19pYTY0X2lkX2ZsYWdzKTsJXAorCShfX2lhNjRfaWRfZmxhZ3MgJiBJQTY0X1BTUl9JKSA9PSAwOwlcCit9KQorCisjaWZkZWYgX19LRVJORUxfXworCisjZGVmaW5lIHByZXBhcmVfdG9fc3dpdGNoKCkgICAgZG8geyB9IHdoaWxlKDApCisKKyNpZmRlZiBDT05GSUdfSUEzMl9TVVBQT1JUCisjIGRlZmluZSBJU19JQTMyX1BST0NFU1MocmVncykJKGlhNjRfcHNyKHJlZ3MpLT5pcyAhPSAwKQorI2Vsc2UKKyMgZGVmaW5lIElTX0lBMzJfUFJPQ0VTUyhyZWdzKQkJMAorc3RydWN0IHRhc2tfc3RydWN0Oworc3RhdGljIGlubGluZSB2b2lkIGlhMzJfc2F2ZV9zdGF0ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkpe30KK3N0YXRpYyBpbmxpbmUgdm9pZCBpYTMyX2xvYWRfc3RhdGUoc3RydWN0IHRhc2tfc3RydWN0ICp0IF9fYXR0cmlidXRlX18oKHVudXNlZCkpKXt9CisjZW5kaWYKKworLyoKKyAqIENvbnRleHQgc3dpdGNoIGZyb20gb25lIHRocmVhZCB0byBhbm90aGVyLiAgSWYgdGhlIHR3byB0aHJlYWRzIGhhdmUKKyAqIGRpZmZlcmVudCBhZGRyZXNzIHNwYWNlcywgc2NoZWR1bGUoKSBoYXMgYWxyZWFkeSB0YWtlbiBjYXJlIG9mCisgKiBzd2l0Y2hpbmcgdG8gdGhlIG5ldyBhZGRyZXNzIHNwYWNlIGJ5IGNhbGxpbmcgc3dpdGNoX21tKCkuCisgKgorICogRGlzYWJsaW5nIGFjY2VzcyB0byB0aGUgZnBoIHBhcnRpdGlvbiBhbmQgdGhlIGRlYnVnLXJlZ2lzdGVyCisgKiBjb250ZXh0IHN3aXRjaCBNVVNUIGJlIGRvbmUgYmVmb3JlIGNhbGxpbmcgaWE2NF9zd2l0Y2hfdG8oKSBzaW5jZSBhCisgKiBuZXdseSBjcmVhdGVkIHRocmVhZCByZXR1cm5zIGRpcmVjdGx5IHRvCisgKiBpYTY0X3JldF9mcm9tX3N5c2NhbGxfY2xlYXJfcjguCisgKi8KK2V4dGVybiBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmlhNjRfc3dpdGNoX3RvICh2b2lkICpuZXh0X3Rhc2spOworCitzdHJ1Y3QgdGFza19zdHJ1Y3Q7CisKK2V4dGVybiB2b2lkIGlhNjRfc2F2ZV9leHRyYSAoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTsKK2V4dGVybiB2b2lkIGlhNjRfbG9hZF9leHRyYSAoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTsKKworI2lmZGVmIENPTkZJR19QRVJGTU9OCisgIERFQ0xBUkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCBwZm1fc3lzdF9pbmZvKTsKKyMgZGVmaW5lIFBFUkZNT05fSVNfU1lTV0lERSgpIChfX2dldF9jcHVfdmFyKHBmbV9zeXN0X2luZm8pICYgMHgxKQorI2Vsc2UKKyMgZGVmaW5lIFBFUkZNT05fSVNfU1lTV0lERSgpICgwKQorI2VuZGlmCisKKyNkZWZpbmUgSUE2NF9IQVNfRVhUUkFfU1RBVEUodCkJCQkJCQkJXAorCSgodCktPnRocmVhZC5mbGFncyAmIChJQTY0X1RIUkVBRF9EQkdfVkFMSUR8SUE2NF9USFJFQURfUE1fVkFMSUQpCVwKKwkgfHwgSVNfSUEzMl9QUk9DRVNTKGlhNjRfdGFza19yZWdzKHQpKSB8fCBQRVJGTU9OX0lTX1NZU1dJREUoKSkKKworI2RlZmluZSBfX3N3aXRjaF90byhwcmV2LG5leHQsbGFzdCkgZG8gewkJCQkJCQkgXAorCWlmIChJQTY0X0hBU19FWFRSQV9TVEFURShwcmV2KSkJCQkJCQkJCSBcCisJCWlhNjRfc2F2ZV9leHRyYShwcmV2KTsJCQkJCQkJCSBcCisJaWYgKElBNjRfSEFTX0VYVFJBX1NUQVRFKG5leHQpKQkJCQkJCQkJIFwKKwkJaWE2NF9sb2FkX2V4dHJhKG5leHQpOwkJCQkJCQkJIFwKKwlpYTY0X3BzcihpYTY0X3Rhc2tfcmVncyhuZXh0KSktPmRmaCA9ICFpYTY0X2lzX2xvY2FsX2ZwdV9vd25lcihuZXh0KTsJCQkgXAorCShsYXN0KSA9IGlhNjRfc3dpdGNoX3RvKChuZXh0KSk7CQkJCQkJCSBcCit9IHdoaWxlICgwKQorCisjaWZkZWYgQ09ORklHX1NNUAorLyoKKyAqIEluIHRoZSBTTVAgY2FzZSwgd2Ugc2F2ZSB0aGUgZnBoIHN0YXRlIHdoZW4gY29udGV4dC1zd2l0Y2hpbmcgYXdheSBmcm9tIGEgdGhyZWFkIHRoYXQKKyAqIG1vZGlmaWVkIGZwaC4gIFRoaXMgd2F5LCB3aGVuIHRoZSB0aHJlYWQgZ2V0cyBzY2hlZHVsZWQgb24gYW5vdGhlciBDUFUsIHRoZSBDUFUgY2FuCisgKiBwaWNrIHVwIHRoZSBzdGF0ZSBmcm9tIHRhc2stPnRocmVhZC5mcGgsIGF2b2lkaW5nIHRoZSBjb21wbGljYXRpb24gb2YgaGF2aW5nIHRvIGZldGNoCisgKiB0aGUgbGF0ZXN0IGZwaCBzdGF0ZSBmcm9tIGFub3RoZXIgQ1BVLiAgSW4gb3RoZXIgd29yZHM6IGVhZ2VyIHNhdmUsIGxhenkgcmVzdG9yZS4KKyAqLworIyBkZWZpbmUgc3dpdGNoX3RvKHByZXYsbmV4dCxsYXN0KSBkbyB7CQkJCQkJXAorCWlmIChpYTY0X3BzcihpYTY0X3Rhc2tfcmVncyhwcmV2KSktPm1maCAmJiBpYTY0X2lzX2xvY2FsX2ZwdV9vd25lcihwcmV2KSkgewkJCQlcCisJCWlhNjRfcHNyKGlhNjRfdGFza19yZWdzKHByZXYpKS0+bWZoID0gMDsJCQlcCisJCShwcmV2KS0+dGhyZWFkLmZsYWdzIHw9IElBNjRfVEhSRUFEX0ZQSF9WQUxJRDsJCQlcCisJCV9faWE2NF9zYXZlX2ZwdSgocHJldiktPnRocmVhZC5mcGgpOwkJCQlcCisJfQkJCQkJCQkJCVwKKwlfX3N3aXRjaF90byhwcmV2LCBuZXh0LCBsYXN0KTsJCQkJCQlcCit9IHdoaWxlICgwKQorI2Vsc2UKKyMgZGVmaW5lIHN3aXRjaF90byhwcmV2LG5leHQsbGFzdCkJX19zd2l0Y2hfdG8ocHJldiwgbmV4dCwgbGFzdCkKKyNlbmRpZgorCisvKgorICogT24gSUEtNjQsIHdlIGRvbid0IHdhbnQgdG8gaG9sZCB0aGUgcnVucXVldWUncyBsb2NrIGR1cmluZyB0aGUgbG93LWxldmVsIGNvbnRleHQtc3dpdGNoLAorICogYmVjYXVzZSB0aGF0IGNvdWxkIGNhdXNlIGEgZGVhZGxvY2suICBIZXJlIGlzIGFuIGV4YW1wbGUgYnkgRXJpY2ggRm9jaHQ6CisgKgorICogRXhhbXBsZToKKyAqIENQVSMwOgorICogc2NoZWR1bGUoKQorICogICAgLT4gc3Bpbl9sb2NrX2lycSgmcnEtPmxvY2spCisgKiAgICAtPiBjb250ZXh0X3N3aXRjaCgpCisgKiAgICAgICAtPiB3cmFwX21tdV9jb250ZXh0KCkKKyAqICAgICAgICAgIC0+IHJlYWRfbG9jaygmdGFza2xpc3RfbG9jaykKKyAqCisgKiBDUFUjMToKKyAqIHN5c193YWl0NCgpIG9yIHJlbGVhc2VfdGFzaygpIG9yIGZvcmdldF9vcmlnaW5hbF9wYXJlbnQoKQorICogICAgLT4gd3JpdGVfbG9jaygmdGFza2xpc3RfbG9jaykKKyAqICAgIC0+IGRvX25vdGlmeV9wYXJlbnQoKQorICogICAgICAgLT4gd2FrZV91cF9wYXJlbnQoKQorICogICAgICAgICAgLT4gdHJ5X3RvX3dha2VfdXAoKQorICogICAgICAgICAgICAgLT4gc3Bpbl9sb2NrX2lycSgmcGFyZW50X3JxLT5sb2NrKQorICoKKyAqIElmIHRoZSBwYXJlbnQncyBycSBoYXBwZW5zIHRvIGJlIG9uIENQVSMwLCB3ZSdsbCB3YWl0IGZvciB0aGUgcnEtPmxvY2sKKyAqIG9mIHRoYXQgQ1BVIHdoaWNoIHdpbGwgbm90IGJlIHJlbGVhc2VkLCBiZWNhdXNlIHRoZXJlIHdlIHdhaXQgZm9yIHRoZQorICogdGFza2xpc3RfbG9jayB0byBiZWNvbWUgYXZhaWxhYmxlLgorICovCisjZGVmaW5lIHByZXBhcmVfYXJjaF9zd2l0Y2gocnEsIG5leHQpCQlcCitkbyB7CQkJCQkJXAorCXNwaW5fbG9jaygmKG5leHQpLT5zd2l0Y2hfbG9jayk7CVwKKwlzcGluX3VubG9jaygmKHJxKS0+bG9jayk7CQlcCit9IHdoaWxlICgwKQorI2RlZmluZSBmaW5pc2hfYXJjaF9zd2l0Y2gocnEsIHByZXYpCXNwaW5fdW5sb2NrX2lycSgmKHByZXYpLT5zd2l0Y2hfbG9jaykKKyNkZWZpbmUgdGFza19ydW5uaW5nKHJxLCBwKSAJCSgocnEpLT5jdXJyID09IChwKSB8fCBzcGluX2lzX2xvY2tlZCgmKHApLT5zd2l0Y2hfbG9jaykpCisKKyNkZWZpbmUgaWE2NF9wbGF0Zm9ybV9pcyh4KSAoc3RyY21wKHgsIHBsYXRmb3JtX25hbWUpID09IDApCisKK3ZvaWQgY3B1X2lkbGVfd2FpdCh2b2lkKTsKKworI2RlZmluZSBhcmNoX2FsaWduX3N0YWNrKHgpICh4KQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiBfQVNNX0lBNjRfU1lTVEVNX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvdGVybWJpdHMuaCBiL2luY2x1ZGUvYXNtLWlhNjQvdGVybWJpdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWU4NDNmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taWE2NC90ZXJtYml0cy5oCkBAIC0wLDAgKzEsMTgyIEBACisjaWZuZGVmIF9BU01fSUE2NF9URVJNQklUU19ICisjZGVmaW5lIF9BU01fSUE2NF9URVJNQklUU19ICisKKy8qCisgKiBCYXNlZCBvbiA8YXNtLWkzODYvdGVybWJpdHMuaD4uCisgKgorICogTW9kaWZpZWQgMTk5OQorICoJRGF2aWQgTW9zYmVyZ2VyLVRhbmcgPGRhdmlkbUBocGwuaHAuY29tPiwgSGV3bGV0dC1QYWNrYXJkIENvCisgKgorICogOTkvMDEvMjgJQWRkZWQgbmV3IGJhdWRyYXRlcworICovCisKKyNpbmNsdWRlIDxsaW51eC9wb3NpeF90eXBlcy5oPgorCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIJY2NfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50CXNwZWVkX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludAl0Y2ZsYWdfdDsKKworI2RlZmluZSBOQ0NTIDE5CitzdHJ1Y3QgdGVybWlvcyB7CisJdGNmbGFnX3QgY19pZmxhZzsJCS8qIGlucHV0IG1vZGUgZmxhZ3MgKi8KKwl0Y2ZsYWdfdCBjX29mbGFnOwkJLyogb3V0cHV0IG1vZGUgZmxhZ3MgKi8KKwl0Y2ZsYWdfdCBjX2NmbGFnOwkJLyogY29udHJvbCBtb2RlIGZsYWdzICovCisJdGNmbGFnX3QgY19sZmxhZzsJCS8qIGxvY2FsIG1vZGUgZmxhZ3MgKi8KKwljY190IGNfbGluZTsJCQkvKiBsaW5lIGRpc2NpcGxpbmUgKi8KKwljY190IGNfY2NbTkNDU107CQkvKiBjb250cm9sIGNoYXJhY3RlcnMgKi8KK307CisKKy8qIGNfY2MgY2hhcmFjdGVycyAqLworI2RlZmluZSBWSU5UUiAwCisjZGVmaW5lIFZRVUlUIDEKKyNkZWZpbmUgVkVSQVNFIDIKKyNkZWZpbmUgVktJTEwgMworI2RlZmluZSBWRU9GIDQKKyNkZWZpbmUgVlRJTUUgNQorI2RlZmluZSBWTUlOIDYKKyNkZWZpbmUgVlNXVEMgNworI2RlZmluZSBWU1RBUlQgOAorI2RlZmluZSBWU1RPUCA5CisjZGVmaW5lIFZTVVNQIDEwCisjZGVmaW5lIFZFT0wgMTEKKyNkZWZpbmUgVlJFUFJJTlQgMTIKKyNkZWZpbmUgVkRJU0NBUkQgMTMKKyNkZWZpbmUgVldFUkFTRSAxNAorI2RlZmluZSBWTE5FWFQgMTUKKyNkZWZpbmUgVkVPTDIgMTYKKworLyogY19pZmxhZyBiaXRzICovCisjZGVmaW5lIElHTkJSSwkwMDAwMDAxCisjZGVmaW5lIEJSS0lOVAkwMDAwMDAyCisjZGVmaW5lIElHTlBBUgkwMDAwMDA0CisjZGVmaW5lIFBBUk1SSwkwMDAwMDEwCisjZGVmaW5lIElOUENLCTAwMDAwMjAKKyNkZWZpbmUgSVNUUklQCTAwMDAwNDAKKyNkZWZpbmUgSU5MQ1IJMDAwMDEwMAorI2RlZmluZSBJR05DUgkwMDAwMjAwCisjZGVmaW5lIElDUk5MCTAwMDA0MDAKKyNkZWZpbmUgSVVDTEMJMDAwMTAwMAorI2RlZmluZSBJWE9OCTAwMDIwMDAKKyNkZWZpbmUgSVhBTlkJMDAwNDAwMAorI2RlZmluZSBJWE9GRgkwMDEwMDAwCisjZGVmaW5lIElNQVhCRUwJMDAyMDAwMAorI2RlZmluZSBJVVRGOAkwMDQwMDAwCisKKy8qIGNfb2ZsYWcgYml0cyAqLworI2RlZmluZSBPUE9TVAkwMDAwMDAxCisjZGVmaW5lIE9MQ1VDCTAwMDAwMDIKKyNkZWZpbmUgT05MQ1IJMDAwMDAwNAorI2RlZmluZSBPQ1JOTAkwMDAwMDEwCisjZGVmaW5lIE9OT0NSCTAwMDAwMjAKKyNkZWZpbmUgT05MUkVUCTAwMDAwNDAKKyNkZWZpbmUgT0ZJTEwJMDAwMDEwMAorI2RlZmluZSBPRkRFTAkwMDAwMjAwCisjZGVmaW5lIE5MRExZCTAwMDA0MDAKKyNkZWZpbmUgICBOTDAJMDAwMDAwMAorI2RlZmluZSAgIE5MMQkwMDAwNDAwCisjZGVmaW5lIENSRExZCTAwMDMwMDAKKyNkZWZpbmUgICBDUjAJMDAwMDAwMAorI2RlZmluZSAgIENSMQkwMDAxMDAwCisjZGVmaW5lICAgQ1IyCTAwMDIwMDAKKyNkZWZpbmUgICBDUjMJMDAwMzAwMAorI2RlZmluZSBUQUJETFkJMDAxNDAwMAorI2RlZmluZSAgIFRBQjAJMDAwMDAwMAorI2RlZmluZSAgIFRBQjEJMDAwNDAwMAorI2RlZmluZSAgIFRBQjIJMDAxMDAwMAorI2RlZmluZSAgIFRBQjMJMDAxNDAwMAorI2RlZmluZSAgIFhUQUJTCTAwMTQwMDAKKyNkZWZpbmUgQlNETFkJMDAyMDAwMAorI2RlZmluZSAgIEJTMAkwMDAwMDAwCisjZGVmaW5lICAgQlMxCTAwMjAwMDAKKyNkZWZpbmUgVlRETFkJMDA0MDAwMAorI2RlZmluZSAgIFZUMAkwMDAwMDAwCisjZGVmaW5lICAgVlQxCTAwNDAwMDAKKyNkZWZpbmUgRkZETFkJMDEwMDAwMAorI2RlZmluZSAgIEZGMAkwMDAwMDAwCisjZGVmaW5lICAgRkYxCTAxMDAwMDAKKworLyogY19jZmxhZyBiaXQgbWVhbmluZyAqLworI2RlZmluZSBDQkFVRAkwMDEwMDE3CisjZGVmaW5lICBCMAkwMDAwMDAwCQkvKiBoYW5nIHVwICovCisjZGVmaW5lICBCNTAJMDAwMDAwMQorI2RlZmluZSAgQjc1CTAwMDAwMDIKKyNkZWZpbmUgIEIxMTAJMDAwMDAwMworI2RlZmluZSAgQjEzNAkwMDAwMDA0CisjZGVmaW5lICBCMTUwCTAwMDAwMDUKKyNkZWZpbmUgIEIyMDAJMDAwMDAwNgorI2RlZmluZSAgQjMwMAkwMDAwMDA3CisjZGVmaW5lICBCNjAwCTAwMDAwMTAKKyNkZWZpbmUgIEIxMjAwCTAwMDAwMTEKKyNkZWZpbmUgIEIxODAwCTAwMDAwMTIKKyNkZWZpbmUgIEIyNDAwCTAwMDAwMTMKKyNkZWZpbmUgIEI0ODAwCTAwMDAwMTQKKyNkZWZpbmUgIEI5NjAwCTAwMDAwMTUKKyNkZWZpbmUgIEIxOTIwMAkwMDAwMDE2CisjZGVmaW5lICBCMzg0MDAJMDAwMDAxNworI2RlZmluZSBFWFRBIEIxOTIwMAorI2RlZmluZSBFWFRCIEIzODQwMAorI2RlZmluZSBDU0laRQkwMDAwMDYwCisjZGVmaW5lICAgQ1M1CTAwMDAwMDAKKyNkZWZpbmUgICBDUzYJMDAwMDAyMAorI2RlZmluZSAgIENTNwkwMDAwMDQwCisjZGVmaW5lICAgQ1M4CTAwMDAwNjAKKyNkZWZpbmUgQ1NUT1BCCTAwMDAxMDAKKyNkZWZpbmUgQ1JFQUQJMDAwMDIwMAorI2RlZmluZSBQQVJFTkIJMDAwMDQwMAorI2RlZmluZSBQQVJPREQJMDAwMTAwMAorI2RlZmluZSBIVVBDTAkwMDAyMDAwCisjZGVmaW5lIENMT0NBTAkwMDA0MDAwCisjZGVmaW5lIENCQVVERVggMDAxMDAwMAorI2RlZmluZSAgICBCNTc2MDAgMDAxMDAwMQorI2RlZmluZSAgIEIxMTUyMDAgMDAxMDAwMgorI2RlZmluZSAgIEIyMzA0MDAgMDAxMDAwMworI2RlZmluZSAgIEI0NjA4MDAgMDAxMDAwNAorI2RlZmluZSAgIEI1MDAwMDAgMDAxMDAwNQorI2RlZmluZSAgIEI1NzYwMDAgMDAxMDAwNgorI2RlZmluZSAgIEI5MjE2MDAgMDAxMDAwNworI2RlZmluZSAgQjEwMDAwMDAgMDAxMDAxMAorI2RlZmluZSAgQjExNTIwMDAgMDAxMDAxMQorI2RlZmluZSAgQjE1MDAwMDAgMDAxMDAxMgorI2RlZmluZSAgQjIwMDAwMDAgMDAxMDAxMworI2RlZmluZSAgQjI1MDAwMDAgMDAxMDAxNAorI2RlZmluZSAgQjMwMDAwMDAgMDAxMDAxNQorI2RlZmluZSAgQjM1MDAwMDAgMDAxMDAxNgorI2RlZmluZSAgQjQwMDAwMDAgMDAxMDAxNworI2RlZmluZSBDSUJBVUQJICAwMDIwMDM2MDAwMDAJLyogaW5wdXQgYmF1ZCByYXRlIChub3QgdXNlZCkgKi8KKyNkZWZpbmUgQ01TUEFSCSAgMDEwMDAwMDAwMDAwCQkvKiBtYXJrIG9yIHNwYWNlIChzdGljaykgcGFyaXR5ICovCisjZGVmaW5lIENSVFNDVFMJICAwMjAwMDAwMDAwMDAJCS8qIGZsb3cgY29udHJvbCAqLworCisvKiBjX2xmbGFnIGJpdHMgKi8KKyNkZWZpbmUgSVNJRwkwMDAwMDAxCisjZGVmaW5lIElDQU5PTgkwMDAwMDAyCisjZGVmaW5lIFhDQVNFCTAwMDAwMDQKKyNkZWZpbmUgRUNITwkwMDAwMDEwCisjZGVmaW5lIEVDSE9FCTAwMDAwMjAKKyNkZWZpbmUgRUNIT0sJMDAwMDA0MAorI2RlZmluZSBFQ0hPTkwJMDAwMDEwMAorI2RlZmluZSBOT0ZMU0gJMDAwMDIwMAorI2RlZmluZSBUT1NUT1AJMDAwMDQwMAorI2RlZmluZSBFQ0hPQ1RMCTAwMDEwMDAKKyNkZWZpbmUgRUNIT1BSVAkwMDAyMDAwCisjZGVmaW5lIEVDSE9LRQkwMDA0MDAwCisjZGVmaW5lIEZMVVNITwkwMDEwMDAwCisjZGVmaW5lIFBFTkRJTgkwMDQwMDAwCisjZGVmaW5lIElFWFRFTgkwMTAwMDAwCisKKy8qIHRjZmxvdygpIGFuZCBUQ1hPTkMgdXNlIHRoZXNlICovCisjZGVmaW5lCVRDT09GRgkJMAorI2RlZmluZQlUQ09PTgkJMQorI2RlZmluZQlUQ0lPRkYJCTIKKyNkZWZpbmUJVENJT04JCTMKKworLyogdGNmbHVzaCgpIGFuZCBUQ0ZMU0ggdXNlIHRoZXNlICovCisjZGVmaW5lCVRDSUZMVVNICTAKKyNkZWZpbmUJVENPRkxVU0gJMQorI2RlZmluZQlUQ0lPRkxVU0gJMgorCisvKiB0Y3NldGF0dHIgdXNlcyB0aGVzZSAqLworI2RlZmluZQlUQ1NBTk9XCQkwCisjZGVmaW5lCVRDU0FEUkFJTgkxCisjZGVmaW5lCVRDU0FGTFVTSAkyCisKKyNlbmRpZiAvKiBfQVNNX0lBNjRfVEVSTUJJVFNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC90ZXJtaW9zLmggYi9pbmNsdWRlL2FzbS1pYTY0L3Rlcm1pb3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmM5NTY5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taWE2NC90ZXJtaW9zLmgKQEAgLTAsMCArMSwxMTMgQEAKKyNpZm5kZWYgX0FTTV9JQTY0X1RFUk1JT1NfSAorI2RlZmluZSBfQVNNX0lBNjRfVEVSTUlPU19ICisKKy8qCisgKiBNb2RpZmllZCAxOTk5CisgKglEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+LCBIZXdsZXR0LVBhY2thcmQgQ28KKyAqCisgKiA5OS8wMS8yOAlBZGRlZCBOX0lSREEgYW5kIE5fU01TQkxPQ0sKKyAqLworCisjaW5jbHVkZSA8YXNtL3Rlcm1iaXRzLmg+CisjaW5jbHVkZSA8YXNtL2lvY3Rscy5oPgorCitzdHJ1Y3Qgd2luc2l6ZSB7CisJdW5zaWduZWQgc2hvcnQgd3Nfcm93OworCXVuc2lnbmVkIHNob3J0IHdzX2NvbDsKKwl1bnNpZ25lZCBzaG9ydCB3c194cGl4ZWw7CisJdW5zaWduZWQgc2hvcnQgd3NfeXBpeGVsOworfTsKKworI2RlZmluZSBOQ0MgOAorc3RydWN0IHRlcm1pbyB7CisJdW5zaWduZWQgc2hvcnQgY19pZmxhZzsJCS8qIGlucHV0IG1vZGUgZmxhZ3MgKi8KKwl1bnNpZ25lZCBzaG9ydCBjX29mbGFnOwkJLyogb3V0cHV0IG1vZGUgZmxhZ3MgKi8KKwl1bnNpZ25lZCBzaG9ydCBjX2NmbGFnOwkJLyogY29udHJvbCBtb2RlIGZsYWdzICovCisJdW5zaWduZWQgc2hvcnQgY19sZmxhZzsJCS8qIGxvY2FsIG1vZGUgZmxhZ3MgKi8KKwl1bnNpZ25lZCBjaGFyIGNfbGluZTsJCS8qIGxpbmUgZGlzY2lwbGluZSAqLworCXVuc2lnbmVkIGNoYXIgY19jY1tOQ0NdOwkvKiBjb250cm9sIGNoYXJhY3RlcnMgKi8KK307CisKKy8qIG1vZGVtIGxpbmVzICovCisjZGVmaW5lIFRJT0NNX0xFCTB4MDAxCisjZGVmaW5lIFRJT0NNX0RUUgkweDAwMgorI2RlZmluZSBUSU9DTV9SVFMJMHgwMDQKKyNkZWZpbmUgVElPQ01fU1QJMHgwMDgKKyNkZWZpbmUgVElPQ01fU1IJMHgwMTAKKyNkZWZpbmUgVElPQ01fQ1RTCTB4MDIwCisjZGVmaW5lIFRJT0NNX0NBUgkweDA0MAorI2RlZmluZSBUSU9DTV9STkcJMHgwODAKKyNkZWZpbmUgVElPQ01fRFNSCTB4MTAwCisjZGVmaW5lIFRJT0NNX0NECVRJT0NNX0NBUgorI2RlZmluZSBUSU9DTV9SSQlUSU9DTV9STkcKKyNkZWZpbmUgVElPQ01fT1VUMQkweDIwMDAKKyNkZWZpbmUgVElPQ01fT1VUMgkweDQwMDAKKyNkZWZpbmUgVElPQ01fTE9PUAkweDgwMDAKKworLyogaW9jdGwgKGZkLCBUSU9DU0VSR0VUTFNSLCAmcmVzdWx0KSB3aGVyZSByZXN1bHQgbWF5IGJlIGFzIGJlbG93ICovCisKKy8qIGxpbmUgZGlzY2lwbGluZXMgKi8KKyNkZWZpbmUgTl9UVFkJCTAKKyNkZWZpbmUgTl9TTElQCQkxCisjZGVmaW5lIE5fTU9VU0UJCTIKKyNkZWZpbmUgTl9QUFAJCTMKKyNkZWZpbmUgTl9TVFJJUAkJNAorI2RlZmluZSBOX0FYMjUJCTUKKyNkZWZpbmUgTl9YMjUJCTYJLyogWC4yNSBhc3luYyAqLworI2RlZmluZSBOXzZQQUNLCQk3CisjZGVmaW5lIE5fTUFTQwkJOAkvKiBSZXNlcnZlZCBmb3IgTW9iaXRleCBtb2R1bGUgPGthekBjYWZlLm5ldD4gKi8KKyNkZWZpbmUgTl9SMzk2NAkJOQkvKiBSZXNlcnZlZCBmb3IgU2ltYXRpYyBSMzk2NCBtb2R1bGUgKi8KKyNkZWZpbmUgTl9QUk9GSUJVU19GREwJMTAJLyogUmVzZXJ2ZWQgZm9yIFByb2ZpYnVzIDxEYXZlQG12aGkuY29tPiAqLworI2RlZmluZSBOX0lSREEJCTExCS8qIExpbnV4IElSIC0gaHR0cDovL2lyZGEuc291cmNlZm9yZ2UubmV0LyAqLworI2RlZmluZSBOX1NNU0JMT0NLCTEyCS8qIFNNUyBibG9jayBtb2RlIC0gZm9yIHRhbGtpbmcgdG8gR1NNIGRhdGEgY2FyZHMgYWJvdXQgU01TIG1zZ3MgKi8KKyNkZWZpbmUgTl9IRExDCQkxMwkvKiBzeW5jaHJvbm91cyBIRExDICovCisjZGVmaW5lIE5fU1lOQ19QUFAJMTQJLyogc3luY2hyb25vdXMgUFBQICovCisjZGVmaW5lIE5fSENJCQkxNSAgLyogQmx1ZXRvb3RoIEhDSSBVQVJUICovCisKKyMgaWZkZWYgX19LRVJORUxfXworCisvKglpbnRyPV5DCQlxdWl0PV5cCQllcmFzZT1kZWwJa2lsbD1eVQorCWVvZj1eRAkJdnRpbWU9XDAJdm1pbj1cMQkJc3h0Yz1cMAorCXN0YXJ0PV5RCXN0b3A9XlMJCXN1c3A9XloJCWVvbD1cMAorCXJlcHJpbnQ9XlIJZGlzY2FyZD1eVQl3ZXJhc2U9XlcJbG5leHQ9XlYKKwllb2wyPVwwCisqLworI2RlZmluZSBJTklUX0NfQ0MgIlwwMDNcMDM0XDE3N1wwMjVcMDA0XDBcMVwwXDAyMVwwMjNcMDMyXDBcMDIyXDAxN1wwMjdcMDI2XDAiCisKKy8qCisgKiBUcmFuc2xhdGUgYSAidGVybWlvIiBzdHJ1Y3R1cmUgaW50byBhICJ0ZXJtaW9zIi4gVWdoLgorICovCisjZGVmaW5lIFNFVF9MT1dfVEVSTUlPU19CSVRTKHRlcm1pb3MsIHRlcm1pbywgeCkgewlcCisJdW5zaWduZWQgc2hvcnQgX190bXA7CQkJCVwKKwlnZXRfdXNlcihfX3RtcCwmKHRlcm1pbyktPngpOwkJCVwKKwkqKHVuc2lnbmVkIHNob3J0ICopICYodGVybWlvcyktPnggPSBfX3RtcDsJXAorfQorCisjZGVmaW5lIHVzZXJfdGVybWlvX3RvX2tlcm5lbF90ZXJtaW9zKHRlcm1pb3MsIHRlcm1pbykJCVwKKyh7CQkJCQkJCQlcCisJU0VUX0xPV19URVJNSU9TX0JJVFModGVybWlvcywgdGVybWlvLCBjX2lmbGFnKTsJCVwKKwlTRVRfTE9XX1RFUk1JT1NfQklUUyh0ZXJtaW9zLCB0ZXJtaW8sIGNfb2ZsYWcpOwkJXAorCVNFVF9MT1dfVEVSTUlPU19CSVRTKHRlcm1pb3MsIHRlcm1pbywgY19jZmxhZyk7CQlcCisJU0VUX0xPV19URVJNSU9TX0JJVFModGVybWlvcywgdGVybWlvLCBjX2xmbGFnKTsJCVwKKwljb3B5X2Zyb21fdXNlcigodGVybWlvcyktPmNfY2MsICh0ZXJtaW8pLT5jX2NjLCBOQ0MpOwlcCit9KQorCisvKgorICogVHJhbnNsYXRlIGEgInRlcm1pb3MiIHN0cnVjdHVyZSBpbnRvIGEgInRlcm1pbyIuIFVnaC4KKyAqLworI2RlZmluZSBrZXJuZWxfdGVybWlvc190b191c2VyX3Rlcm1pbyh0ZXJtaW8sIHRlcm1pb3MpCQlcCisoewkJCQkJCQkJXAorCXB1dF91c2VyKCh0ZXJtaW9zKS0+Y19pZmxhZywgJih0ZXJtaW8pLT5jX2lmbGFnKTsJXAorCXB1dF91c2VyKCh0ZXJtaW9zKS0+Y19vZmxhZywgJih0ZXJtaW8pLT5jX29mbGFnKTsJXAorCXB1dF91c2VyKCh0ZXJtaW9zKS0+Y19jZmxhZywgJih0ZXJtaW8pLT5jX2NmbGFnKTsJXAorCXB1dF91c2VyKCh0ZXJtaW9zKS0+Y19sZmxhZywgJih0ZXJtaW8pLT5jX2xmbGFnKTsJXAorCXB1dF91c2VyKCh0ZXJtaW9zKS0+Y19saW5lLCAgJih0ZXJtaW8pLT5jX2xpbmUpOwlcCisJY29weV90b191c2VyKCh0ZXJtaW8pLT5jX2NjLCAodGVybWlvcyktPmNfY2MsIE5DQyk7CVwKK30pCisKKyNkZWZpbmUgdXNlcl90ZXJtaW9zX3RvX2tlcm5lbF90ZXJtaW9zKGssIHUpIGNvcHlfZnJvbV91c2VyKGssIHUsIHNpemVvZihzdHJ1Y3QgdGVybWlvcykpCisjZGVmaW5lIGtlcm5lbF90ZXJtaW9zX3RvX3VzZXJfdGVybWlvcyh1LCBrKSBjb3B5X3RvX3VzZXIodSwgaywgc2l6ZW9mKHN0cnVjdCB0ZXJtaW9zKSkKKworIyBlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfQVNNX0lBNjRfVEVSTUlPU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3RocmVhZF9pbmZvLmggYi9pbmNsdWRlL2FzbS1pYTY0L3RocmVhZF9pbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ1YjdlNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvdGhyZWFkX2luZm8uaApAQCAtMCwwICsxLDk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMDMgSGV3bGV0dC1QYWNrYXJkIENvCisgKglEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+CisgKi8KKyNpZm5kZWYgX0FTTV9JQTY0X1RIUkVBRF9JTkZPX0gKKyNkZWZpbmUgX0FTTV9JQTY0X1RIUkVBRF9JTkZPX0gKKworI2luY2x1ZGUgPGFzbS9vZmZzZXRzLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKworI2RlZmluZSBQUkVFTVBUX0FDVElWRV9CSVQgMzAKKyNkZWZpbmUgUFJFRU1QVF9BQ1RJVkUJKDEgPDwgUFJFRU1QVF9BQ1RJVkVfQklUKQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisvKgorICogT24gSUEtNjQsIHdlIHdhbnQgdG8ga2VlcCB0aGUgdGFzayBzdHJ1Y3R1cmUgYW5kIGtlcm5lbCBzdGFjayB0b2dldGhlciwgc28gdGhleSBjYW4gYmUKKyAqIG1hcHBlZCBieSBhIHNpbmdsZSBUTEIgZW50cnkgYW5kIHNvIHRoZXkgY2FuIGJlIGFkZHJlc3NlZCBieSB0aGUgImN1cnJlbnQiIHBvaW50ZXIKKyAqIHdpdGhvdXQgaGF2aW5nIHRvIGRvIHBvaW50ZXIgbWFza2luZy4KKyAqLworc3RydWN0IHRocmVhZF9pbmZvIHsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CS8qIFhYWCBub3QgcmVhbGx5IG5lZWRlZCwgZXhjZXB0IGZvciBkdXBfdGFza19zdHJ1Y3QoKSAqLworCXN0cnVjdCBleGVjX2RvbWFpbiAqZXhlY19kb21haW47LyogZXhlY3V0aW9uIGRvbWFpbiAqLworCV9fdTMyIGZsYWdzOwkJCS8qIHRocmVhZF9pbmZvIGZsYWdzIChzZWUgVElGXyopICovCisJX191MzIgY3B1OwkJCS8qIGN1cnJlbnQgQ1BVICovCisJbW1fc2VnbWVudF90IGFkZHJfbGltaXQ7CS8qIHVzZXItbGV2ZWwgYWRkcmVzcyBzcGFjZSBsaW1pdCAqLworCV9fczMyIHByZWVtcHRfY291bnQ7CQkvKiAwPXByZW1wdGFibGUsIDwwPUJVRzsgd2lsbCBhbHNvIHNlcnZlIGFzIGJoLWNvdW50ZXIgKi8KKwlzdHJ1Y3QgcmVzdGFydF9ibG9jayByZXN0YXJ0X2Jsb2NrOworCXN0cnVjdCB7CisJCWludCBzaWdubzsKKwkJaW50IGNvZGU7CisJCXZvaWQgX191c2VyICphZGRyOworCQl1bnNpZ25lZCBsb25nIHN0YXJ0X3RpbWU7CisJCXBpZF90IHBpZDsKKwl9IHNpZ2RlbGF5ZWQ7CQkJLyogU2F2ZWQgaW5mb3JtYXRpb24gZm9yIFRJRl9TSUdERUxBWUVEICovCit9OworCisjZGVmaW5lIFRIUkVBRF9TSVpFCQkJS0VSTkVMX1NUQUNLX1NJWkUKKworI2RlZmluZSBJTklUX1RIUkVBRF9JTkZPKHRzaykJCQlcCit7CQkJCQkJXAorCS50YXNrCQk9ICZ0c2ssCQkJXAorCS5leGVjX2RvbWFpbgk9ICZkZWZhdWx0X2V4ZWNfZG9tYWluLAlcCisJLmZsYWdzCQk9IDAsCQkJXAorCS5jcHUJCT0gMCwJCQlcCisJLmFkZHJfbGltaXQJPSBLRVJORUxfRFMsCQlcCisJLnByZWVtcHRfY291bnQJPSAwLAkJCVwKKwkucmVzdGFydF9ibG9jayA9IHsJCQlcCisJCS5mbiA9IGRvX25vX3Jlc3RhcnRfc3lzY2FsbCwJXAorCX0sCQkJCQlcCit9CisKKy8qIGhvdyB0byBnZXQgdGhlIHRocmVhZCBpbmZvcm1hdGlvbiBzdHJ1Y3QgZnJvbSBDICovCisjZGVmaW5lIGN1cnJlbnRfdGhyZWFkX2luZm8oKQkoKHN0cnVjdCB0aHJlYWRfaW5mbyAqKSAoKGNoYXIgKikgY3VycmVudCArIElBNjRfVEFTS19TSVpFKSkKKyNkZWZpbmUgYWxsb2NfdGhyZWFkX2luZm8odHNrKQkoKHN0cnVjdCB0aHJlYWRfaW5mbyAqKSAoKGNoYXIgKikgKHRzaykgKyBJQTY0X1RBU0tfU0laRSkpCisjZGVmaW5lIGZyZWVfdGhyZWFkX2luZm8odGkpCS8qIG5vdGhpbmcgKi8KKworI2RlZmluZSBfX0hBVkVfQVJDSF9UQVNLX1NUUlVDVF9BTExPQ0FUT1IKKyNkZWZpbmUgYWxsb2NfdGFza19zdHJ1Y3QoKQkoKHRhc2tfdCAqKV9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwgS0VSTkVMX1NUQUNLX1NJWkVfT1JERVIpKQorI2RlZmluZSBmcmVlX3Rhc2tfc3RydWN0KHRzaykJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZykgKHRzayksIEtFUk5FTF9TVEFDS19TSVpFX09SREVSKQorCisjZW5kaWYgLyogIV9fQVNTRU1CTFkgKi8KKworLyoKKyAqIHRocmVhZCBpbmZvcm1hdGlvbiBmbGFncworICogLSB0aGVzZSBhcmUgcHJvY2VzcyBzdGF0ZSBmbGFncyB0aGF0IHZhcmlvdXMgYXNzZW1ibHkgZmlsZXMgbWF5IG5lZWQgdG8gYWNjZXNzCisgKiAtIHBlbmRpbmcgd29yay10by1iZS1kb25lIGZsYWdzIGFyZSBpbiBsZWFzdC1zaWduaWZpY2FudCAxNiBiaXRzLCBvdGhlciBmbGFncworICogICBpbiB0b3AgMTYgYml0cworICovCisjZGVmaW5lIFRJRl9OT1RJRllfUkVTVU1FCTAJLyogcmVzdW1wdGlvbiBub3RpZmljYXRpb24gcmVxdWVzdGVkICovCisjZGVmaW5lIFRJRl9TSUdQRU5ESU5HCQkxCS8qIHNpZ25hbCBwZW5kaW5nICovCisjZGVmaW5lIFRJRl9ORUVEX1JFU0NIRUQJMgkvKiByZXNjaGVkdWxpbmcgbmVjZXNzYXJ5ICovCisjZGVmaW5lIFRJRl9TWVNDQUxMX1RSQUNFCTMJLyogc3lzY2FsbCB0cmFjZSBhY3RpdmUgKi8KKyNkZWZpbmUgVElGX1NZU0NBTExfQVVESVQJNAkvKiBzeXNjYWxsIGF1ZGl0aW5nIGFjdGl2ZSAqLworI2RlZmluZSBUSUZfU0lHREVMQVlFRAkJNQkvKiBzaWduYWwgZGVsYXllZCBmcm9tIE1DQS9JTklUL05NSS9QTUkgY29udGV4dCAqLworI2RlZmluZSBUSUZfUE9MTElOR19OUkZMQUcJMTYJLyogdHJ1ZSBpZiBwb2xsX2lkbGUoKSBpcyBwb2xsaW5nIFRJRl9ORUVEX1JFU0NIRUQgKi8KKyNkZWZpbmUgVElGX01FTURJRQkJMTcKKworI2RlZmluZSBfVElGX1NZU0NBTExfVFJBQ0UJKDEgPDwgVElGX1NZU0NBTExfVFJBQ0UpCisjZGVmaW5lIF9USUZfU1lTQ0FMTF9BVURJVAkoMSA8PCBUSUZfU1lTQ0FMTF9BVURJVCkKKyNkZWZpbmUgX1RJRl9TWVNDQUxMX1RSQUNFQVVESVQJKF9USUZfU1lTQ0FMTF9UUkFDRXxfVElGX1NZU0NBTExfQVVESVQpCisjZGVmaW5lIF9USUZfTk9USUZZX1JFU1VNRQkoMSA8PCBUSUZfTk9USUZZX1JFU1VNRSkKKyNkZWZpbmUgX1RJRl9TSUdQRU5ESU5HCQkoMSA8PCBUSUZfU0lHUEVORElORykKKyNkZWZpbmUgX1RJRl9ORUVEX1JFU0NIRUQJKDEgPDwgVElGX05FRURfUkVTQ0hFRCkKKyNkZWZpbmUgX1RJRl9TSUdERUxBWUVECSgxIDw8IFRJRl9TSUdERUxBWUVEKQorI2RlZmluZSBfVElGX1BPTExJTkdfTlJGTEFHCSgxIDw8IFRJRl9QT0xMSU5HX05SRkxBRykKKworLyogIndvcmsgdG8gZG8gb24gdXNlci1yZXR1cm4iIGJpdHMgKi8KKyNkZWZpbmUgVElGX0FMTFdPUktfTUFTSwkoX1RJRl9OT1RJRllfUkVTVU1FfF9USUZfU0lHUEVORElOR3xfVElGX05FRURfUkVTQ0hFRHxfVElGX1NZU0NBTExfVFJBQ0V8X1RJRl9TWVNDQUxMX0FVRElUfF9USUZfU0lHREVMQVlFRCkKKy8qIGxpa2UgVElGX0FMTFdPUktfQklUUyBidXQgc2FucyBUSUZfU1lTQ0FMTF9UUkFDRSBvciBUSUZfU1lTQ0FMTF9BVURJVCAqLworI2RlZmluZSBUSUZfV09SS19NQVNLCQkoVElGX0FMTFdPUktfTUFTSyZ+KF9USUZfU1lTQ0FMTF9UUkFDRXxfVElGX1NZU0NBTExfQVVESVQpKQorCisjZW5kaWYgLyogX0FTTV9JQTY0X1RIUkVBRF9JTkZPX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvdGltZXguaCBiL2luY2x1ZGUvYXNtLWlhNjQvdGltZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTRhYWUwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taWE2NC90aW1leC5oCkBAIC0wLDAgKzEsNDAgQEAKKyNpZm5kZWYgX0FTTV9JQTY0X1RJTUVYX0gKKyNkZWZpbmUgX0FTTV9JQTY0X1RJTUVYX0gKKworLyoKKyAqIENvcHlyaWdodCAoQykgMTk5OC0yMDAxLCAyMDAzIEhld2xldHQtUGFja2FyZCBDbworICoJRGF2aWQgTW9zYmVyZ2VyLVRhbmcgPGRhdmlkbUBocGwuaHAuY29tPgorICovCisvKgorICogMjAwMS8wMS8xOCBkYXZpZG0JUmVtb3ZlZCBDTE9DS19USUNLX1JBVEUuICBJdCBtYWtlcyBubyBzZW5zZSBvbiBJQS02NC4KKyAqCQkJQWxzbyByZW1vdmVkIGNhY2hlZmx1c2hfdGltZSBhcyBpdCdzIGVudGlyZWx5IHVudXNlZC4KKyAqLworCisjaW5jbHVkZSA8YXNtL2ludHJpbnNpY3MuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBjeWNsZXNfdDsKKworLyoKKyAqIEZvciBwZXJmb3JtYW5jZSByZWFzb25zLCB3ZSBkb24ndCB3YW50IHRvIGRlZmluZSBDTE9DS19USUNLX1RSQVRFIGFzCisgKiBsb2NhbF9jcHVfZGF0YS0+aXRjX3JhdGUuICBGb3J0dW5hdGVseSwgd2UgZG9uJ3QgaGF2ZSB0bywgZWl0aGVyOiBhY2NvcmRpbmcgdG8gR2VvcmdlCisgKiBBbnppbmdlciwgMS9DTE9DS19USUNLX1JBVEUgaXMgdGFrZW4gYXMgdGhlIHJlc29sdXRpb24gb2YgdGhlIHRpbWVyIGNsb2NrLiAgVGhlIHRpbWUKKyAqIGNhbGN1bGF0aW9uIGFzc3VtZXMgdGhhdCB5b3Ugd2lsbCB1c2UgZW5vdWdoIG9mIHRoZXNlIHNvIHRoYXQgeW91ciB0aWNrIHNpemUgPD0gMS9IWi4KKyAqIElmIHRoZSBjYWxjdWxhdGlvbiBzaG93cyB0aGF0IHlvdXIgQ0xPQ0tfVElDS19SQVRFIGNhbiBub3Qgc3VwcGx5IGV4YWN0bHkgMS9IWiB0aWNrcywKKyAqIHRoZSBhY3R1YWwgdmFsdWUgaXMgY2FsY3VsYXRlZCBhbmQgdXNlZCB0byB1cGRhdGUgdGhlIHdhbGwgY2xvY2sgZWFjaCBqaWZmaWUuICBTZXR0aW5nCisgKiB0aGUgQ0xPQ0tfVElDS19SQVRFIHRvIHgqSFogaW5zdXJlcyB0aGF0IHRoZSBjYWxjdWxhdGlvbiB3aWxsIGZpbmQgbm8gZXJyb3JzLiAgSGVuY2Ugd2UKKyAqIHBpY2sgYSBtdWx0aXBsZSBvZiBIWiB3aGljaCBnaXZlcyB1cyBhICh0b3RhbGx5IHZpcnR1YWwpIENMT0NLX1RJQ0tfUkFURSBvZiBhYm91dAorICogMTAwTUh6LgorICovCisjZGVmaW5lIENMT0NLX1RJQ0tfUkFURQkJKEhaICogMTAwMDAwVUwpCisKK3N0YXRpYyBpbmxpbmUgY3ljbGVzX3QKK2dldF9jeWNsZXMgKHZvaWQpCit7CisJY3ljbGVzX3QgcmV0OworCisJcmV0ID0gaWE2NF9nZXRyZWcoX0lBNjRfUkVHX0FSX0lUQyk7CisJcmV0dXJuIHJldDsKK30KKworI2VuZGlmIC8qIF9BU01fSUE2NF9USU1FWF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3RsYi5oIGIvaW5jbHVkZS9hc20taWE2NC90bGIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTlhNmQxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taWE2NC90bGIuaApAQCAtMCwwICsxLDI0NSBAQAorI2lmbmRlZiBfQVNNX0lBNjRfVExCX0gKKyNkZWZpbmUgX0FTTV9JQTY0X1RMQl9ICisvKgorICogQmFzZWQgb24gPGFzbS1nZW5lcmljL3RsYi5oPi4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAwMyBIZXdsZXR0LVBhY2thcmQgQ28KKyAqCURhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4KKyAqLworLyoKKyAqIFJlbW92aW5nIGEgdHJhbnNsYXRpb24gZnJvbSBhIHBhZ2UgdGFibGUgKGluY2x1ZGluZyBUTEItc2hvb3Rkb3duKSBpcyBhIGZvdXItc3RlcAorICogcHJvY2VkdXJlOgorICoKKyAqCSgxKSBGbHVzaCAodmlydHVhbCkgY2FjaGVzIC0tLSBlbnN1cmVzIHZpcnR1YWwgbWVtb3J5IGlzIGNvaGVyZW50IHdpdGgga2VybmVsIG1lbW9yeQorICoJICAgICh0aGlzIGlzIGEgbm8tb3Agb24gaWE2NCkuCisgKgkoMikgQ2xlYXIgdGhlIHJlbGV2YW50IHBvcnRpb25zIG9mIHRoZSBwYWdlLXRhYmxlCisgKgkoMykgRmx1c2ggdGhlIFRMQnMgLS0tIGVuc3VyZXMgdGhhdCBzdGFsZSBjb250ZW50IGlzIGdvbmUgZnJvbSBDUFUgVExCcworICoJKDQpIFJlbGVhc2UgdGhlIHBhZ2VzIHRoYXQgd2VyZSBmcmVlZCB1cCBpbiBzdGVwICgyKS4KKyAqCisgKiBOb3RlIHRoYXQgdGhlIG9yZGVyaW5nIG9mIHRoZXNlIHN0ZXBzIGlzIGNydWNpYWwgdG8gYXZvaWQgcmFjZXMgb24gTVAgbWFjaGluZXMuCisgKgorICogVGhlIExpbnV4IGtlcm5lbCBkZWZpbmVzIHNldmVyYWwgcGxhdGZvcm0tc3BlY2lmaWMgaG9va3MgZm9yIFRMQi1zaG9vdGRvd24uICBXaGVuCisgKiB1bm1hcHBpbmcgYSBwb3J0aW9uIG9mIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UsIHRoZXNlIGhvb2tzIGFyZSBjYWxsZWQgYWNjb3JkaW5nIHRvCisgKiB0aGUgZm9sbG93aW5nIHRlbXBsYXRlOgorICoKKyAqCXRsYiA8LSB0bGJfZ2F0aGVyX21tdShtbSwgZnVsbF9tbV9mbHVzaCk7CS8vIHN0YXJ0IHVubWFwIGZvciBhZGRyZXNzIHNwYWNlIE1NCisgKgl7CisgKgkgIGZvciBlYWNoIHZtYSB0aGF0IG5lZWRzIGEgc2hvb3Rkb3duIGRvIHsKKyAqCSAgICB0bGJfc3RhcnRfdm1hKHRsYiwgdm1hKTsKKyAqCSAgICAgIGZvciBlYWNoIHBhZ2UtdGFibGUtZW50cnkgUFRFIHRoYXQgbmVlZHMgdG8gYmUgcmVtb3ZlZCBkbyB7CisgKgkJdGxiX3JlbW92ZV90bGJfZW50cnkodGxiLCBwdGUsIGFkZHJlc3MpOworICoJCWlmIChwdGUgcmVmZXJzIHRvIGEgbm9ybWFsIHBhZ2UpIHsKKyAqCQkgIHRsYl9yZW1vdmVfcGFnZSh0bGIsIHBhZ2UpOworICoJCX0KKyAqCSAgICAgIH0KKyAqCSAgICB0bGJfZW5kX3ZtYSh0bGIsIHZtYSk7CisgKgkgIH0KKyAqCX0KKyAqCXRsYl9maW5pc2hfbW11KHRsYiwgc3RhcnQsIGVuZCk7CS8vIGZpbmlzaCB1bm1hcCBmb3IgYWRkcmVzcyBzcGFjZSBNTQorICovCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisjaW5jbHVkZSA8bGludXgvc3dhcC5oPgorCisjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KKworI2lmZGVmIENPTkZJR19TTVAKKyMgZGVmaW5lIEZSRUVfUFRFX05SCQkyMDQ4CisjIGRlZmluZSB0bGJfZmFzdF9tb2RlKHRsYikJKCh0bGIpLT5uciA9PSB+MFUpCisjZWxzZQorIyBkZWZpbmUgRlJFRV9QVEVfTlIJCTAKKyMgZGVmaW5lIHRsYl9mYXN0X21vZGUodGxiKQkoMSkKKyNlbmRpZgorCitzdHJ1Y3QgbW11X2dhdGhlciB7CisJc3RydWN0IG1tX3N0cnVjdAkqbW07CisJdW5zaWduZWQgaW50CQlucjsJCS8qID09IH4wVSA9PiBmYXN0IG1vZGUgKi8KKwl1bnNpZ25lZCBjaGFyCQlmdWxsbW07CQkvKiBub24temVybyBtZWFucyBmdWxsIG1tIGZsdXNoICovCisJdW5zaWduZWQgY2hhcgkJbmVlZF9mbHVzaDsJLyogcmVhbGx5IHVubWFwcGVkIHNvbWUgUFRFcz8gKi8KKwl1bnNpZ25lZCBsb25nCQlmcmVlZDsJCS8qIG51bWJlciBvZiBwYWdlcyBmcmVlZCAqLworCXVuc2lnbmVkIGxvbmcJCXN0YXJ0X2FkZHI7CisJdW5zaWduZWQgbG9uZwkJZW5kX2FkZHI7CisJc3RydWN0IHBhZ2UgCQkqcGFnZXNbRlJFRV9QVEVfTlJdOworfTsKKworLyogVXNlcnMgb2YgdGhlIGdlbmVyaWMgVExCIHNob290ZG93biBjb2RlIG11c3QgZGVjbGFyZSB0aGlzIHN0b3JhZ2Ugc3BhY2UuICovCitERUNMQVJFX1BFUl9DUFUoc3RydWN0IG1tdV9nYXRoZXIsIG1tdV9nYXRoZXJzKTsKKworLyoKKyAqIEZsdXNoIHRoZSBUTEIgZm9yIGFkZHJlc3MgcmFuZ2UgU1RBUlQgdG8gRU5EIGFuZCwgaWYgbm90IGluIGZhc3QgbW9kZSwgcmVsZWFzZSB0aGUKKyAqIGZyZWVkIHBhZ2VzIHRoYXQgd2hlcmUgZ2F0aGVyZWQgdXAgdG8gdGhpcyBwb2ludC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCitpYTY0X3RsYl9mbHVzaF9tbXUgKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCXVuc2lnbmVkIGludCBucjsKKworCWlmICghdGxiLT5uZWVkX2ZsdXNoKQorCQlyZXR1cm47CisJdGxiLT5uZWVkX2ZsdXNoID0gMDsKKworCWlmICh0bGItPmZ1bGxtbSkgeworCQkvKgorCQkgKiBUZWFyaW5nIGRvd24gdGhlIGVudGlyZSBhZGRyZXNzIHNwYWNlLiAgVGhpcyBoYXBwZW5zIGJvdGggYXMgYSByZXN1bHQKKwkJICogb2YgZXhpdCgpIGFuZCBleGVjdmUoKS4gIFRoZSBsYXR0ZXIgY2FzZSBuZWNlc3NpdGF0ZXMgdGhlIGNhbGwgdG8KKwkJICogZmx1c2hfdGxiX21tKCkgaGVyZS4KKwkJICovCisJCWZsdXNoX3RsYl9tbSh0bGItPm1tKTsKKwl9IGVsc2UgaWYgKHVubGlrZWx5IChlbmQgLSBzdGFydCA+PSAxMDI0KjEwMjQqMTAyNCoxMDI0VUwKKwkJCSAgICAgfHwgUkVHSU9OX05VTUJFUihzdGFydCkgIT0gUkVHSU9OX05VTUJFUihlbmQgLSAxKSkpCisJeworCQkvKgorCQkgKiBJZiB3ZSBmbHVzaCBtb3JlIHRoYW4gYSB0ZXJhLWJ5dGUgb3IgYWNyb3NzIHJlZ2lvbnMsIHdlJ3JlIHByb2JhYmx5CisJCSAqIGJldHRlciBvZmYganVzdCBmbHVzaGluZyB0aGUgZW50aXJlIFRMQihzKS4gIFRoaXMgc2hvdWxkIGJlIHZlcnkgcmFyZQorCQkgKiBhbmQgaXMgbm90IHdvcnRoIG9wdGltaXppbmcgZm9yLgorCQkgKi8KKwkJZmx1c2hfdGxiX2FsbCgpOworCX0gZWxzZSB7CisJCS8qCisJCSAqIFhYWCBmaXggbWU6IGZsdXNoX3RsYl9yYW5nZSgpIHNob3VsZCB0YWtlIGFuIG1tIHBvaW50ZXIgaW5zdGVhZCBvZiBhCisJCSAqIHZtYSBwb2ludGVyLgorCQkgKi8KKwkJc3RydWN0IHZtX2FyZWFfc3RydWN0IHZtYTsKKworCQl2bWEudm1fbW0gPSB0bGItPm1tOworCQkvKiBmbHVzaCB0aGUgYWRkcmVzcyByYW5nZSBmcm9tIHRoZSB0bGI6ICovCisJCWZsdXNoX3RsYl9yYW5nZSgmdm1hLCBzdGFydCwgZW5kKTsKKwkJLyogbm93IGZsdXNoIHRoZSB2aXJ0LiBwYWdlLXRhYmxlIGFyZWEgbWFwcGluZyB0aGUgYWRkcmVzcyByYW5nZTogKi8KKwkJZmx1c2hfdGxiX3JhbmdlKCZ2bWEsIGlhNjRfdGhhc2goc3RhcnQpLCBpYTY0X3RoYXNoKGVuZCkpOworCX0KKworCS8qIGxhc3RseSwgcmVsZWFzZSB0aGUgZnJlZWQgcGFnZXMgKi8KKwluciA9IHRsYi0+bnI7CisJaWYgKCF0bGJfZmFzdF9tb2RlKHRsYikpIHsKKwkJdW5zaWduZWQgbG9uZyBpOworCQl0bGItPm5yID0gMDsKKwkJdGxiLT5zdGFydF9hZGRyID0gfjBVTDsKKwkJZm9yIChpID0gMDsgaSA8IG5yOyArK2kpCisJCQlmcmVlX3BhZ2VfYW5kX3N3YXBfY2FjaGUodGxiLT5wYWdlc1tpXSk7CisJfQorfQorCisvKgorICogUmV0dXJuIGEgcG9pbnRlciB0byBhbiBpbml0aWFsaXplZCBzdHJ1Y3QgbW11X2dhdGhlci4KKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgbW11X2dhdGhlciAqCit0bGJfZ2F0aGVyX21tdSAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGludCBmdWxsX21tX2ZsdXNoKQoreworCXN0cnVjdCBtbXVfZ2F0aGVyICp0bGIgPSAmX19nZXRfY3B1X3ZhcihtbXVfZ2F0aGVycyk7CisKKwl0bGItPm1tID0gbW07CisJLyoKKwkgKiBVc2UgZmFzdCBtb2RlIGlmIG9ubHkgMSBDUFUgaXMgb25saW5lLgorCSAqCisJICogSXQgd291bGQgYmUgdGVtcHRpbmcgdG8gdHVybiBvbiBmYXN0LW1vZGUgZm9yIGZ1bGxfbW1fZmx1c2ggYXMgd2VsbC4gIEJ1dCB0aGlzCisJICogZG9lc24ndCB3b3JrIGJlY2F1c2Ugb2Ygc3BlY3VsYXRpdmUgYWNjZXNzZXMgYW5kIHNvZnR3YXJlIHByZWZldGNoaW5nOiB0aGUgcGFnZQorCSAqIHRhYmxlIG9mICJtbSIgbWF5IChhbmQgdXN1YWxseSBpcykgdGhlIGN1cnJlbnRseSBhY3RpdmUgcGFnZSB0YWJsZSBhbmQgZXZlbgorCSAqIHRob3VnaCB0aGUga2VybmVsIHdvbid0IGRvIGFueSB1c2VyLXNwYWNlIGFjY2Vzc2VzIGR1cmluZyB0aGUgVExCIHNob290IGRvd24sIGEKKwkgKiBjb21waWxlciBtaWdodCB1c2Ugc3BlY3VsYXRpb24gb3IgbGZldGNoLmZhdWx0IG9uIHdoYXQgaGFwcGVucyB0byBiZSBhIHZhbGlkCisJICogdXNlci1zcGFjZSBhZGRyZXNzLiAgVGhpcyBpbiB0dXJuIGNvdWxkIHRyaWdnZXIgYSBUTEIgbWlzcyBmYXVsdCAob3IgYSBWSFBUCisJICogd2FsaykgYW5kIHJlLWluc2VydCBhIFRMQiBlbnRyeSB3ZSBqdXN0IHJlbW92ZWQuICBTbG93IG1vZGUgYXZvaWRzIHN1Y2gKKwkgKiBwcm9ibGVtcy4gIChXZSBjb3VsZCBtYWtlIGZhc3QtbW9kZSB3b3JrIGJ5IHN3aXRjaGluZyB0aGUgY3VycmVudCB0YXNrIHRvIGEKKwkgKiBkaWZmZXJlbnQgIm1tIiBkdXJpbmcgdGhlIHNob290ZG93bi4pIC0tZGF2aWRtIDA4LzAyLzIwMDIKKwkgKi8KKwl0bGItPm5yID0gKG51bV9vbmxpbmVfY3B1cygpID09IDEpID8gfjBVIDogMDsKKwl0bGItPmZ1bGxtbSA9IGZ1bGxfbW1fZmx1c2g7CisJdGxiLT5mcmVlZCA9IDA7CisJdGxiLT5zdGFydF9hZGRyID0gfjBVTDsKKwlyZXR1cm4gdGxiOworfQorCisvKgorICogQ2FsbGVkIGF0IHRoZSBlbmQgb2YgdGhlIHNob290ZG93biBvcGVyYXRpb24gdG8gZnJlZSB1cCBhbnkgcmVzb3VyY2VzIHRoYXQgd2VyZQorICogY29sbGVjdGVkLiAgVGhlIHBhZ2UgdGFibGUgbG9jayBpcyBzdGlsbCBoZWxkIGF0IHRoaXMgcG9pbnQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAordGxiX2ZpbmlzaF9tbXUgKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCXVuc2lnbmVkIGxvbmcgZnJlZWQgPSB0bGItPmZyZWVkOworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdGxiLT5tbTsKKwl1bnNpZ25lZCBsb25nIHJzcyA9IGdldF9tbV9jb3VudGVyKG1tLCByc3MpOworCisJaWYgKHJzcyA8IGZyZWVkKQorCQlmcmVlZCA9IHJzczsKKwlhZGRfbW1fY291bnRlcihtbSwgcnNzLCAtZnJlZWQpOworCS8qCisJICogTm90ZTogdGxiLT5uciBtYXkgYmUgMCBhdCB0aGlzIHBvaW50LCBzbyB3ZSBjYW4ndCByZWx5IG9uIHRsYi0+c3RhcnRfYWRkciBhbmQKKwkgKiB0bGItPmVuZF9hZGRyLgorCSAqLworCWlhNjRfdGxiX2ZsdXNoX21tdSh0bGIsIHN0YXJ0LCBlbmQpOworCisJLyoga2VlcCB0aGUgcGFnZSB0YWJsZSBjYWNoZSB3aXRoaW4gYm91bmRzICovCisJY2hlY2tfcGd0X2NhY2hlKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50Cit0bGJfaXNfZnVsbF9tbShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiKQoreworICAgICByZXR1cm4gdGxiLT5mdWxsbW07Cit9CisKKy8qCisgKiBMb2dpY2FsbHksIHRoaXMgcm91dGluZSBmcmVlcyBQQUdFLiAgT24gTVAgbWFjaGluZXMsIHRoZSBhY3R1YWwgZnJlZWluZyBvZiB0aGUgcGFnZQorICogbXVzdCBiZSBkZWxheWVkIHVudGlsIGFmdGVyIHRoZSBUTEIgaGFzIGJlZW4gZmx1c2hlZCAoc2VlIGNvbW1lbnRzIGF0IHRoZSBiZWdpbm5pbmcgb2YKKyAqIHRoaXMgZmlsZSkuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAordGxiX3JlbW92ZV9wYWdlIChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwl0bGItPm5lZWRfZmx1c2ggPSAxOworCisJaWYgKHRsYl9mYXN0X21vZGUodGxiKSkgeworCQlmcmVlX3BhZ2VfYW5kX3N3YXBfY2FjaGUocGFnZSk7CisJCXJldHVybjsKKwl9CisJdGxiLT5wYWdlc1t0bGItPm5yKytdID0gcGFnZTsKKwlpZiAodGxiLT5uciA+PSBGUkVFX1BURV9OUikKKwkJaWE2NF90bGJfZmx1c2hfbW11KHRsYiwgdGxiLT5zdGFydF9hZGRyLCB0bGItPmVuZF9hZGRyKTsKK30KKworLyoKKyAqIFJlbW92ZSBUTEIgZW50cnkgZm9yIFBURSBtYXBwZWQgYXQgdmlydHVhbCBhZGRyZXNzIEFERFJFU1MuICBUaGlzIGlzIGNhbGxlZCBmb3IgYW55CisgKiBQVEUsIG5vdCBqdXN0IHRob3NlIHBvaW50aW5nIHRvIChub3JtYWwpIHBoeXNpY2FsIG1lbW9yeS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCitfX3RsYl9yZW1vdmVfdGxiX2VudHJ5IChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBwdGVfdCAqcHRlcCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCWlmICh0bGItPnN0YXJ0X2FkZHIgPT0gfjBVTCkKKwkJdGxiLT5zdGFydF9hZGRyID0gYWRkcmVzczsKKwl0bGItPmVuZF9hZGRyID0gYWRkcmVzcyArIFBBR0VfU0laRTsKK30KKworI2RlZmluZSB0bGJfbWlncmF0ZV9maW5pc2gobW0pCXBsYXRmb3JtX3RsYl9taWdyYXRlX2ZpbmlzaChtbSkKKworI2RlZmluZSB0bGJfc3RhcnRfdm1hKHRsYiwgdm1hKQkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgdGxiX2VuZF92bWEodGxiLCB2bWEpCQkJZG8geyB9IHdoaWxlICgwKQorCisjZGVmaW5lIHRsYl9yZW1vdmVfdGxiX2VudHJ5KHRsYiwgcHRlcCwgYWRkcikJCVwKK2RvIHsJCQkJCQkJXAorCXRsYi0+bmVlZF9mbHVzaCA9IDE7CQkJCVwKKwlfX3RsYl9yZW1vdmVfdGxiX2VudHJ5KHRsYiwgcHRlcCwgYWRkcik7CVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgcHRlX2ZyZWVfdGxiKHRsYiwgcHRlcCkJCQkJXAorZG8gewkJCQkJCQlcCisJdGxiLT5uZWVkX2ZsdXNoID0gMTsJCQkJXAorCV9fcHRlX2ZyZWVfdGxiKHRsYiwgcHRlcCk7CQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBwbWRfZnJlZV90bGIodGxiLCBwdGVwKQkJCQlcCitkbyB7CQkJCQkJCVwKKwl0bGItPm5lZWRfZmx1c2ggPSAxOwkJCQlcCisJX19wbWRfZnJlZV90bGIodGxiLCBwdGVwKTsJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIHB1ZF9mcmVlX3RsYih0bGIsIHB1ZHApCQkJCVwKK2RvIHsJCQkJCQkJXAorCXRsYi0+bmVlZF9mbHVzaCA9IDE7CQkJCVwKKwlfX3B1ZF9mcmVlX3RsYih0bGIsIHB1ZHApOwkJCVwKK30gd2hpbGUgKDApCisKKyNlbmRpZiAvKiBfQVNNX0lBNjRfVExCX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvdGxiZmx1c2guaCBiL2luY2x1ZGUvYXNtLWlhNjQvdGxiZmx1c2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjVjNjI3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taWE2NC90bGJmbHVzaC5oCkBAIC0wLDAgKzEsOTkgQEAKKyNpZm5kZWYgX0FTTV9JQTY0X1RMQkZMVVNIX0gKKyNkZWZpbmUgX0FTTV9JQTY0X1RMQkZMVVNIX0gKKworLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMiBIZXdsZXR0LVBhY2thcmQgQ28KKyAqCURhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorCisjaW5jbHVkZSA8YXNtL2ludHJpbnNpY3MuaD4KKyNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorCisvKgorICogTm93IGZvciBzb21lIFRMQiBmbHVzaGluZyByb3V0aW5lcy4gIFRoaXMgaXMgdGhlIGtpbmQgb2Ygc3R1ZmYgdGhhdAorICogY2FuIGJlIHZlcnkgZXhwZW5zaXZlLCBzbyB0cnkgdG8gYXZvaWQgdGhlbSB3aGVuZXZlciBwb3NzaWJsZS4KKyAqLworCisvKgorICogRmx1c2ggZXZlcnl0aGluZyAoa2VybmVsIG1hcHBpbmcgbWF5IGFsc28gaGF2ZSBjaGFuZ2VkIGR1ZSB0bworICogdm1hbGxvYy92ZnJlZSkuCisgKi8KK2V4dGVybiB2b2lkIGxvY2FsX2ZsdXNoX3RsYl9hbGwgKHZvaWQpOworCisjaWZkZWYgQ09ORklHX1NNUAorICBleHRlcm4gdm9pZCBzbXBfZmx1c2hfdGxiX2FsbCAodm9pZCk7CisgIGV4dGVybiB2b2lkIHNtcF9mbHVzaF90bGJfbW0gKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKKyMgZGVmaW5lIGZsdXNoX3RsYl9hbGwoKQlzbXBfZmx1c2hfdGxiX2FsbCgpCisjZWxzZQorIyBkZWZpbmUgZmx1c2hfdGxiX2FsbCgpCWxvY2FsX2ZsdXNoX3RsYl9hbGwoKQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorbG9jYWxfZmluaXNoX2ZsdXNoX3RsYl9tbSAoc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJaWYgKG1tID09IGN1cnJlbnQtPmFjdGl2ZV9tbSkKKwkJYWN0aXZhdGVfY29udGV4dChtbSk7Cit9CisKKy8qCisgKiBGbHVzaCBhIHNwZWNpZmllZCB1c2VyIG1hcHBpbmcuICBUaGlzIGlzIGNhbGxlZCwgZS5nLiwgYXMgYSByZXN1bHQgb2YgZm9yaygpIGFuZAorICogZXhpdCgpLiAgZm9yaygpIGVuZHMgdXAgaGVyZSBiZWNhdXNlIHRoZSBjb3B5LW9uLXdyaXRlIG1lY2hhbmlzbSBuZWVkcyB0byB3cml0ZS1wcm90ZWN0CisgKiB0aGUgUFRFcyBvZiB0aGUgcGFyZW50IHRhc2suCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorZmx1c2hfdGxiX21tIChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlpZiAoIW1tKQorCQlyZXR1cm47CisKKwltbS0+Y29udGV4dCA9IDA7CisKKwlpZiAoYXRvbWljX3JlYWQoJm1tLT5tbV91c2VycykgPT0gMCkKKwkJcmV0dXJuOwkJLyogaGFwcGVucyBhcyBhIHJlc3VsdCBvZiBleGl0X21tYXAoKSAqLworCisjaWZkZWYgQ09ORklHX1NNUAorCXNtcF9mbHVzaF90bGJfbW0obW0pOworI2Vsc2UKKwlsb2NhbF9maW5pc2hfZmx1c2hfdGxiX21tKG1tKTsKKyNlbmRpZgorfQorCitleHRlcm4gdm9pZCBmbHVzaF90bGJfcmFuZ2UgKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7CisKKy8qCisgKiBQYWdlLWdyYW51bGFyIHRsYiBmbHVzaC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCitmbHVzaF90bGJfcGFnZSAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKyNpZmRlZiBDT05GSUdfU01QCisJZmx1c2hfdGxiX3JhbmdlKHZtYSwgKGFkZHIgJiBQQUdFX01BU0spLCAoYWRkciAmIFBBR0VfTUFTSykgKyBQQUdFX1NJWkUpOworI2Vsc2UKKwlpZiAodm1hLT52bV9tbSA9PSBjdXJyZW50LT5hY3RpdmVfbW0pCisJCWlhNjRfcHRjbChhZGRyLCAoUEFHRV9TSElGVCA8PCAyKSk7CisJZWxzZQorCQl2bWEtPnZtX21tLT5jb250ZXh0ID0gMDsKKyNlbmRpZgorfQorCisvKgorICogRmx1c2ggdGhlIFRMQiBlbnRyaWVzIG1hcHBpbmcgdGhlIHZpcnR1YWxseSBtYXBwZWQgbGluZWFyIHBhZ2UKKyAqIHRhYmxlIGNvcnJlc3BvbmRpbmcgdG8gYWRkcmVzcyByYW5nZSBbU1RBUlQtRU5EKS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCitmbHVzaF90bGJfcGd0YWJsZXMgKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwkvKgorCSAqIERlcHJlY2F0ZWQuICBUaGUgdmlydHVhbCBwYWdlIHRhYmxlIGlzIG5vdyBmbHVzaGVkIHZpYSB0aGUgbm9ybWFsIGdhdGhlci9mbHVzaAorCSAqIGludGVyZmFjZSAoc2VlIHRsYi5oKS4KKwkgKi8KK30KKworI2RlZmluZSBmbHVzaF90bGJfa2VybmVsX3JhbmdlKHN0YXJ0LCBlbmQpCWZsdXNoX3RsYl9hbGwoKQkvKiBYWFggZml4IG1lICovCisKKyNlbmRpZiAvKiBfQVNNX0lBNjRfVExCRkxVU0hfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC90b3BvbG9neS5oIGIvaW5jbHVkZS9hc20taWE2NC90b3BvbG9neS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxY2YzNTEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3RvcG9sb2d5LmgKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLWlhNjQvdG9wb2xvZ3kuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMiwgRXJpY2ggRm9jaHQsIE5FQworICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2lmbmRlZiBfQVNNX0lBNjRfVE9QT0xPR1lfSAorI2RlZmluZSBfQVNNX0lBNjRfVE9QT0xPR1lfSAorCisjaW5jbHVkZSA8YXNtL2FjcGkuaD4KKyNpbmNsdWRlIDxhc20vbnVtYS5oPgorI2luY2x1ZGUgPGFzbS9zbXAuaD4KKworI2lmZGVmIENPTkZJR19OVU1BCisvKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHRoZSBub2RlIGNvbnRhaW5pbmcgQ1BVICdjcHUnCisgKi8KKyNkZWZpbmUgY3B1X3RvX25vZGUoY3B1KSAoaW50KShjcHVfdG9fbm9kZV9tYXBbY3B1XSkKKworLyoKKyAqIFJldHVybnMgYSBiaXRtYXNrIG9mIENQVXMgb24gTm9kZSAnbm9kZScuCisgKi8KKyNkZWZpbmUgbm9kZV90b19jcHVtYXNrKG5vZGUpIChub2RlX3RvX2NwdV9tYXNrW25vZGVdKQorCisvKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHRoZSBub2RlIGNvbnRhaW5pbmcgTm9kZSAnbmlkJy4KKyAqIE5vdCBpbXBsZW1lbnRlZCBoZXJlLiBNdWx0aS1sZXZlbCBoaWVyYXJjaGllcyBkZXRlY3RlZCB3aXRoCisgKiB0aGUgaGVscCBvZiBub2RlX2Rpc3RhbmNlKCkuCisgKi8KKyNkZWZpbmUgcGFyZW50X25vZGUobmlkKSAobmlkKQorCisvKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHRoZSBmaXJzdCBDUFUgb24gTm9kZSAnbm9kZScuCisgKi8KKyNkZWZpbmUgbm9kZV90b19maXJzdF9jcHUobm9kZSkgKF9fZmZzKG5vZGVfdG9fY3B1bWFzayhub2RlKSkpCisKK3ZvaWQgYnVpbGRfY3B1X3RvX25vZGVfbWFwKHZvaWQpOworCisvKiBzY2hlZF9kb21haW5zIFNEX05PREVfSU5JVCBmb3IgSUE2NCBOVU1BIG1hY2hpbmVzICovCisjZGVmaW5lIFNEX05PREVfSU5JVCAoc3RydWN0IHNjaGVkX2RvbWFpbikgewkJXAorCS5zcGFuCQkJPSBDUFVfTUFTS19OT05FLAlcCisJLnBhcmVudAkJCT0gTlVMTCwJCQlcCisJLmdyb3VwcwkJCT0gTlVMTCwJCQlcCisJLm1pbl9pbnRlcnZhbAkJPSA4MCwJCQlcCisJLm1heF9pbnRlcnZhbAkJPSAzMjAsCQkJXAorCS5idXN5X2ZhY3RvcgkJPSAzMjAsCQkJXAorCS5pbWJhbGFuY2VfcGN0CQk9IDEyNSwJCQlcCisJLmNhY2hlX2hvdF90aW1lCQk9ICgxMCoxMDAwMDAwKSwJCVwKKwkuY2FjaGVfbmljZV90cmllcwk9IDEsCQkJXAorCS5wZXJfY3B1X2dhaW4JCT0gMTAwLAkJCVwKKwkuZmxhZ3MJCQk9IFNEX0xPQURfQkFMQU5DRQlcCisJCQkJfCBTRF9CQUxBTkNFX0VYRUMJXAorCQkJCXwgU0RfQkFMQU5DRV9ORVdJRExFCVwKKwkJCQl8IFNEX1dBS0VfSURMRQkJXAorCQkJCXwgU0RfV0FLRV9CQUxBTkNFLAlcCisJLmxhc3RfYmFsYW5jZQkJPSBqaWZmaWVzLAkJXAorCS5iYWxhbmNlX2ludGVydmFsCT0gMSwJCQlcCisJLm5yX2JhbGFuY2VfZmFpbGVkCT0gMCwJCQlcCit9CisKKy8qIHNjaGVkX2RvbWFpbnMgU0RfQUxMTk9ERVNfSU5JVCBmb3IgSUE2NCBOVU1BIG1hY2hpbmVzICovCisjZGVmaW5lIFNEX0FMTE5PREVTX0lOSVQgKHN0cnVjdCBzY2hlZF9kb21haW4pIHsJXAorCS5zcGFuCQkJPSBDUFVfTUFTS19OT05FLAlcCisJLnBhcmVudAkJCT0gTlVMTCwJCQlcCisJLmdyb3VwcwkJCT0gTlVMTCwJCQlcCisJLm1pbl9pbnRlcnZhbAkJPSA4MCwJCQlcCisJLm1heF9pbnRlcnZhbAkJPSAzMjAsCQkJXAorCS5idXN5X2ZhY3RvcgkJPSAzMjAsCQkJXAorCS5pbWJhbGFuY2VfcGN0CQk9IDEyNSwJCQlcCisJLmNhY2hlX2hvdF90aW1lCQk9ICgxMCoxMDAwMDAwKSwJCVwKKwkuY2FjaGVfbmljZV90cmllcwk9IDEsCQkJXAorCS5wZXJfY3B1X2dhaW4JCT0gMTAwLAkJCVwKKwkuZmxhZ3MJCQk9IFNEX0xPQURfQkFMQU5DRQlcCisJCQkJfCBTRF9CQUxBTkNFX0VYRUMsCVwKKwkubGFzdF9iYWxhbmNlCQk9IGppZmZpZXMsCQlcCisJLmJhbGFuY2VfaW50ZXJ2YWwJPSAxMDAqKDYzK251bV9vbmxpbmVfY3B1cygpKS82NCwgICBcCisJLm5yX2JhbGFuY2VfZmFpbGVkCT0gMCwJCQlcCit9CisKKyNlbmRpZiAvKiBDT05GSUdfTlVNQSAqLworCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdG9wb2xvZ3kuaD4KKworI2VuZGlmIC8qIF9BU01fSUE2NF9UT1BPTE9HWV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3R5cGVzLmggYi9pbmNsdWRlL2FzbS1pYTY0L3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY3NzU2NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvdHlwZXMuaApAQCAtMCwwICsxLDc1IEBACisjaWZuZGVmIF9BU01fSUE2NF9UWVBFU19ICisjZGVmaW5lIF9BU01fSUE2NF9UWVBFU19ICisKKy8qCisgKiBUaGlzIGZpbGUgaXMgbmV2ZXIgaW5jbHVkZWQgYnkgYXBwbGljYXRpb24gc29mdHdhcmUgdW5sZXNzIGV4cGxpY2l0bHkgcmVxdWVzdGVkIChlLmcuLAorICogdmlhIGxpbnV4L3R5cGVzLmgpIGluIHdoaWNoIGNhc2UgdGhlIGFwcGxpY2F0aW9uIGlzIExpbnV4IHNwZWNpZmljIHNvICh1c2VyLSkgbmFtZQorICogc3BhY2UgcG9sbHV0aW9uIGlzIG5vdCBhIG1ham9yIGlzc3VlLiAgSG93ZXZlciwgZm9yIGludGVyb3BlcmFiaWxpdHksIGxpYnJhcmllcyBzdGlsbAorICogbmVlZCB0byBiZSBjYXJlZnVsIHRvIGF2b2lkIGEgbmFtZSBjbGFzaGVzLgorICoKKyAqIEJhc2VkIG9uIDxhc20tYWxwaGEvdHlwZXMuaD4uCisgKgorICogTW9kaWZpZWQgMTk5OC0yMDAwLCAyMDAyCisgKglEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+LCBIZXdsZXR0LVBhY2thcmQgQ28KKyAqLworCisjaWZkZWYgX19BU1NFTUJMWV9fCisjIGRlZmluZSBfX0lBNjRfVUwoeCkJCSh4KQorIyBkZWZpbmUgX19JQTY0X1VMX0NPTlNUKHgpCXgKKworIyBpZmRlZiBfX0tFUk5FTF9fCisjICBkZWZpbmUgQklUU19QRVJfTE9ORyA2NAorIyBlbmRpZgorCisjZWxzZQorIyBkZWZpbmUgX19JQTY0X1VMKHgpCQkoKHVuc2lnbmVkIGxvbmcpKHgpKQorIyBkZWZpbmUgX19JQTY0X1VMX0NPTlNUKHgpCXgjI1VMCisKK3R5cGVkZWYgdW5zaWduZWQgaW50IHVtb2RlX3Q7CisKKy8qCisgKiBfX3h4IGlzIG9rOiBpdCBkb2Vzbid0IHBvbGx1dGUgdGhlIFBPU0lYIG5hbWVzcGFjZS4gVXNlIHRoZXNlIGluIHRoZQorICogaGVhZGVyIGZpbGVzIGV4cG9ydGVkIHRvIHVzZXIgc3BhY2UKKyAqLworCit0eXBlZGVmIF9fc2lnbmVkX18gY2hhciBfX3M4OwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdTg7CisKK3R5cGVkZWYgX19zaWduZWRfXyBzaG9ydCBfX3MxNjsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgX191MTY7CisKK3R5cGVkZWYgX19zaWduZWRfXyBpbnQgX19zMzI7Cit0eXBlZGVmIHVuc2lnbmVkIGludCBfX3UzMjsKKwordHlwZWRlZiBfX3NpZ25lZF9fIGxvbmcgX19zNjQ7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX191NjQ7CisKKy8qCisgKiBUaGVzZSBhcmVuJ3QgZXhwb3J0ZWQgb3V0c2lkZSB0aGUga2VybmVsIHRvIGF2b2lkIG5hbWUgc3BhY2UgY2xhc2hlcworICovCisjIGlmZGVmIF9fS0VSTkVMX18KKwordHlwZWRlZiBfX3M4IHM4OwordHlwZWRlZiBfX3U4IHU4OworCit0eXBlZGVmIF9fczE2IHMxNjsKK3R5cGVkZWYgX191MTYgdTE2OworCit0eXBlZGVmIF9fczMyIHMzMjsKK3R5cGVkZWYgX191MzIgdTMyOworCit0eXBlZGVmIF9fczY0IHM2NDsKK3R5cGVkZWYgX191NjQgdTY0OworCisjZGVmaW5lIEJJVFNfUEVSX0xPTkcgNjQKKworLyogRE1BIGFkZHJlc3NlcyBhcmUgNjQtYml0cyB3aWRlLCBpbiBnZW5lcmFsLiAgKi8KKwordHlwZWRlZiB1NjQgZG1hX2FkZHJfdDsKKwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBrbWVtX2J1ZmN0bF90OworCisjIGVuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiBfQVNNX0lBNjRfVFlQRVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC91YWNjZXNzLmggYi9pbmNsdWRlL2FzbS1pYTY0L3VhY2Nlc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWRkOWE5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taWE2NC91YWNjZXNzLmgKQEAgLTAsMCArMSw0MDggQEAKKyNpZm5kZWYgX0FTTV9JQTY0X1VBQ0NFU1NfSAorI2RlZmluZSBfQVNNX0lBNjRfVUFDQ0VTU19ICisKKy8qCisgKiBUaGlzIGZpbGUgZGVmaW5lcyB2YXJpb3VzIG1hY3JvcyB0byB0cmFuc2ZlciBtZW1vcnkgYXJlYXMgYWNyb3NzCisgKiB0aGUgdXNlci9rZXJuZWwgYm91bmRhcnkuICBUaGlzIG5lZWRzIHRvIGJlIGRvbmUgY2FyZWZ1bGx5IGJlY2F1c2UKKyAqIHRoaXMgY29kZSBpcyBleGVjdXRlZCBpbiBrZXJuZWwgbW9kZSBhbmQgdXNlcyB1c2VyLXNwZWNpZmllZAorICogYWRkcmVzc2VzLiAgVGh1cywgd2UgbmVlZCB0byBiZSBjYXJlZnVsIG5vdCB0byBsZXQgdGhlIHVzZXIgdG8KKyAqIHRyaWNrIHVzIGludG8gYWNjZXNzaW5nIGtlcm5lbCBtZW1vcnkgdGhhdCB3b3VsZCBub3JtYWxseSBiZQorICogaW5hY2Nlc3NpYmxlLiAgVGhpcyBjb2RlIGlzIGFsc28gZmFpcmx5IHBlcmZvcm1hbmNlIHNlbnNpdGl2ZSwKKyAqIHNvIHdlIHdhbnQgdG8gc3BlbmQgYXMgbGl0dGxlIHRpbWUgZG9pbmcgc2FmZXR5IGNoZWNrcyBhcworICogcG9zc2libGUuCisgKgorICogVG8gbWFrZSBtYXR0ZXJzIGEgYml0IG1vcmUgaW50ZXJlc3RpbmcsIHRoZXNlIG1hY3JvcyBzb21ldGltZXMgYWxzbworICogY2FsbGVkIGZyb20gd2l0aGluIHRoZSBrZXJuZWwgaXRzZWxmLCBpbiB3aGljaCBjYXNlIHRoZSBhZGRyZXNzCisgKiB2YWxpZGl0eSBjaGVjayBtdXN0IGJlIHNraXBwZWQuICBUaGUgZ2V0X2ZzKCkgbWFjcm8gdGVsbHMgdXMgd2hhdAorICogdG8gZG86IGlmIGdldF9mcygpPT1VU0VSX0RTLCBjaGVja2luZyBpcyBwZXJmb3JtZWQsIGlmCisgKiBnZXRfZnMoKT09S0VSTkVMX0RTLCBjaGVja2luZyBpcyBieXBhc3NlZC4KKyAqCisgKiBOb3RlIHRoYXQgZXZlbiBpZiB0aGUgbWVtb3J5IGFyZWEgc3BlY2lmaWVkIGJ5IHRoZSB1c2VyIGlzIGluIGEKKyAqIHZhbGlkIGFkZHJlc3MgcmFuZ2UsIGl0IGlzIHN0aWxsIHBvc3NpYmxlIHRoYXQgd2UnbGwgZ2V0IGEgcGFnZQorICogZmF1bHQgd2hpbGUgYWNjZXNzaW5nIGl0LiAgVGhpcyBpcyBoYW5kbGVkIGJ5IGZpbGxpbmcgb3V0IGFuCisgKiBleGNlcHRpb24gaGFuZGxlciBmaXh1cCBlbnRyeSBmb3IgZWFjaCBpbnN0cnVjdGlvbiB0aGF0IGhhcyB0aGUKKyAqIHBvdGVudGlhbCB0byBmYXVsdC4gIFdoZW4gc3VjaCBhIGZhdWx0IG9jY3VycywgdGhlIHBhZ2UgZmF1bHQKKyAqIGhhbmRsZXIgY2hlY2tzIHRvIHNlZSB3aGV0aGVyIHRoZSBmYXVsdGluZyBpbnN0cnVjdGlvbiBoYXMgYSBmaXh1cAorICogYXNzb2NpYXRlZCBhbmQsIGlmIHNvLCBzZXRzIHI4IHRvIC1FRkFVTFQgYW5kIGNsZWFycyByOSB0byAwIGFuZAorICogdGhlbiByZXN1bWVzIGV4ZWN1dGlvbiBhdCB0aGUgY29udGludWF0aW9uIHBvaW50LgorICoKKyAqIEJhc2VkIG9uIDxhc20tYWxwaGEvdWFjY2Vzcy5oPi4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTksIDIwMDEtMjAwNCBIZXdsZXR0LVBhY2thcmQgQ28KKyAqCURhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvcGFnZS1mbGFncy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisKKyNpbmNsdWRlIDxhc20vaW50cmluc2ljcy5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKy8qCisgKiBGb3IgaGlzdG9yaWNhbCByZWFzb25zLCB0aGUgZm9sbG93aW5nIG1hY3JvcyBhcmUgZ3Jvc3NseSBtaXNuYW1lZDoKKyAqLworI2RlZmluZSBLRVJORUxfRFMJKChtbV9zZWdtZW50X3QpIHsgfjBVTCB9KQkJLyogY2YuIGFjY2Vzc19vaygpICovCisjZGVmaW5lIFVTRVJfRFMJCSgobW1fc2VnbWVudF90KSB7IFRBU0tfU0laRS0xIH0pCS8qIGNmLiBhY2Nlc3Nfb2soKSAqLworCisjZGVmaW5lIFZFUklGWV9SRUFECTAKKyNkZWZpbmUgVkVSSUZZX1dSSVRFCTEKKworI2RlZmluZSBnZXRfZHMoKSAgKEtFUk5FTF9EUykKKyNkZWZpbmUgZ2V0X2ZzKCkgIChjdXJyZW50X3RocmVhZF9pbmZvKCktPmFkZHJfbGltaXQpCisjZGVmaW5lIHNldF9mcyh4KSAoY3VycmVudF90aHJlYWRfaW5mbygpLT5hZGRyX2xpbWl0ID0gKHgpKQorCisjZGVmaW5lIHNlZ21lbnRfZXEoYSwgYikJKChhKS5zZWcgPT0gKGIpLnNlZykKKworLyoKKyAqIFdoZW4gYWNjZXNzaW5nIHVzZXIgbWVtb3J5LCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgZW50aXJlIGFyZWEgcmVhbGx5IGlzIGluCisgKiB1c2VyLWxldmVsIHNwYWNlLiAgSW4gb3JkZXIgdG8gZG8gdGhpcyBlZmZpY2llbnRseSwgd2UgbWFrZSBzdXJlIHRoYXQgdGhlIHBhZ2UgYXQKKyAqIGFkZHJlc3MgVEFTS19TSVpFIGlzIG5ldmVyIHZhbGlkLiAgV2UgYWxzbyBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBhZGRyZXNzIGRvZXNuJ3QKKyAqIHBvaW50IGluc2lkZSB0aGUgdmlydHVhbGx5IG1hcHBlZCBsaW5lYXIgcGFnZSB0YWJsZS4KKyAqLworI2RlZmluZSBfX2FjY2Vzc19vayhhZGRyLCBzaXplLCBzZWdtZW50KQkJCQkJCVwKKyh7CQkJCQkJCQkJCQlcCisJX19jaGtfdXNlcl9wdHIoYWRkcik7CQkJCQkJCQlcCisJKGxpa2VseSgodW5zaWduZWQgbG9uZykgKGFkZHIpIDw9IChzZWdtZW50KS5zZWcpCQkJCVwKKwkgJiYgKChzZWdtZW50KS5zZWcgPT0gS0VSTkVMX0RTLnNlZwkJCQkJCVwKKwkgICAgIHx8IGxpa2VseShSRUdJT05fT0ZGU0VUKCh1bnNpZ25lZCBsb25nKSAoYWRkcikpIDwgUkdOX01BUF9MSU1JVCkpKTsJXAorfSkKKyNkZWZpbmUgYWNjZXNzX29rKHR5cGUsIGFkZHIsIHNpemUpCV9fYWNjZXNzX29rKChhZGRyKSwgKHNpemUpLCBnZXRfZnMoKSkKKworLyogdGhpcyBmdW5jdGlvbiB3aWxsIGdvIGF3YXkgc29vbiAtIHVzZSBhY2Nlc3Nfb2soKSBpbnN0ZWFkICovCitzdGF0aWMgaW5saW5lIGludCBfX2RlcHJlY2F0ZWQKK3ZlcmlmeV9hcmVhIChpbnQgdHlwZSwgY29uc3Qgdm9pZCBfX3VzZXIgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlyZXR1cm4gYWNjZXNzX29rKHR5cGUsIGFkZHIsIHNpemUpID8gMCA6IC1FRkFVTFQ7Cit9CisKKy8qCisgKiBUaGVzZSBhcmUgdGhlIG1haW4gc2luZ2xlLXZhbHVlIHRyYW5zZmVyIHJvdXRpbmVzLiAgVGhleSBhdXRvbWF0aWNhbGx5CisgKiB1c2UgdGhlIHJpZ2h0IHNpemUgaWYgd2UganVzdCBoYXZlIHRoZSByaWdodCBwb2ludGVyIHR5cGUuCisgKgorICogQ2FyZWZ1bCB0byBub3QKKyAqIChhKSByZS11c2UgdGhlIGFyZ3VtZW50cyBmb3Igc2lkZSBlZmZlY3RzIChzaXplb2YvdHlwZW9mIGlzIG9rKQorICogKGIpIHJlcXVpcmUgYW55IGtub3dsZWRnZSBvZiBwcm9jZXNzZXMgYXQgdGhpcyBzdGFnZQorICovCisjZGVmaW5lIHB1dF91c2VyKHgsIHB0cikJX19wdXRfdXNlcl9jaGVjaygoX190eXBlb2ZfXygqKHB0cikpKSAoeCksIChwdHIpLCBzaXplb2YoKihwdHIpKSwgZ2V0X2ZzKCkpCisjZGVmaW5lIGdldF91c2VyKHgsIHB0cikJX19nZXRfdXNlcl9jaGVjaygoeCksIChwdHIpLCBzaXplb2YoKihwdHIpKSwgZ2V0X2ZzKCkpCisKKy8qCisgKiBUaGUgIl9feHh4IiB2ZXJzaW9ucyBkbyBub3QgZG8gYWRkcmVzcyBzcGFjZSBjaGVja2luZywgdXNlZnVsIHdoZW4KKyAqIGRvaW5nIG11bHRpcGxlIGFjY2Vzc2VzIHRvIHRoZSBzYW1lIGFyZWEgKHRoZSBwcm9ncmFtbWVyIGhhcyB0byBkbyB0aGUKKyAqIGNoZWNrcyBieSBoYW5kIHdpdGggImFjY2Vzc19vaygpIikKKyAqLworI2RlZmluZSBfX3B1dF91c2VyKHgsIHB0cikJX19wdXRfdXNlcl9ub2NoZWNrKChfX3R5cGVvZl9fKCoocHRyKSkpICh4KSwgKHB0ciksIHNpemVvZigqKHB0cikpKQorI2RlZmluZSBfX2dldF91c2VyKHgsIHB0cikJX19nZXRfdXNlcl9ub2NoZWNrKCh4KSwgKHB0ciksIHNpemVvZigqKHB0cikpKQorCitleHRlcm4gbG9uZyBfX3B1dF91c2VyX3VuYWxpZ25lZF91bmtub3duICh2b2lkKTsKKworI2RlZmluZSBfX3B1dF91c2VyX3VuYWxpZ25lZCh4LCBwdHIpCQkJCQkJCQlcCisoewkJCQkJCQkJCQkJCVwKKwlsb25nIF9fcmV0OwkJCQkJCQkJCQlcCisJc3dpdGNoIChzaXplb2YoKihwdHIpKSkgewkJCQkJCQkJXAorCQljYXNlIDE6IF9fcmV0ID0gX19wdXRfdXNlcigoeCksIChwdHIpKTsgYnJlYWs7CQkJCQlcCisJCWNhc2UgMjogX19yZXQgPSAoX19wdXRfdXNlcigoeCksICh1OCBfX3VzZXIgKikocHRyKSkpCQkJCVwKKwkJCXwgKF9fcHV0X3VzZXIoKHgpID4+IDgsICgodTggX191c2VyICopKHB0cikgKyAxKSkpOyBicmVhazsJCVwKKwkJY2FzZSA0OiBfX3JldCA9IChfX3B1dF91c2VyKCh4KSwgKHUxNiBfX3VzZXIgKikocHRyKSkpCQkJCVwKKwkJCXwgKF9fcHV0X3VzZXIoKHgpID4+IDE2LCAoKHUxNiBfX3VzZXIgKikocHRyKSArIDEpKSk7IGJyZWFrOwkJXAorCQljYXNlIDg6IF9fcmV0ID0gKF9fcHV0X3VzZXIoKHgpLCAodTMyIF9fdXNlciAqKShwdHIpKSkJCQkJXAorCQkJfCAoX19wdXRfdXNlcigoeCkgPj4gMzIsICgodTMyIF9fdXNlciAqKShwdHIpICsgMSkpKTsgYnJlYWs7CQlcCisJCWRlZmF1bHQ6IF9fcmV0ID0gX19wdXRfdXNlcl91bmFsaWduZWRfdW5rbm93bigpOwkJCQlcCisJfQkJCQkJCQkJCQkJXAorCV9fcmV0OwkJCQkJCQkJCQkJXAorfSkKKworZXh0ZXJuIGxvbmcgX19nZXRfdXNlcl91bmFsaWduZWRfdW5rbm93biAodm9pZCk7CisKKyNkZWZpbmUgX19nZXRfdXNlcl91bmFsaWduZWQoeCwgcHRyKQkJCQkJCQkJXAorKHsJCQkJCQkJCQkJCQlcCisJbG9uZyBfX3JldDsJCQkJCQkJCQkJXAorCXN3aXRjaCAoc2l6ZW9mKCoocHRyKSkpIHsJCQkJCQkJCVwKKwkJY2FzZSAxOiBfX3JldCA9IF9fZ2V0X3VzZXIoKHgpLCAocHRyKSk7IGJyZWFrOwkJCQkJXAorCQljYXNlIDI6IF9fcmV0ID0gKF9fZ2V0X3VzZXIoKHgpLCAodTggX191c2VyICopKHB0cikpKQkJCQlcCisJCQl8IChfX2dldF91c2VyKCh4KSA+PiA4LCAoKHU4IF9fdXNlciAqKShwdHIpICsgMSkpKTsgYnJlYWs7CQlcCisJCWNhc2UgNDogX19yZXQgPSAoX19nZXRfdXNlcigoeCksICh1MTYgX191c2VyICopKHB0cikpKQkJCQlcCisJCQl8IChfX2dldF91c2VyKCh4KSA+PiAxNiwgKCh1MTYgX191c2VyICopKHB0cikgKyAxKSkpOyBicmVhazsJCVwKKwkJY2FzZSA4OiBfX3JldCA9IChfX2dldF91c2VyKCh4KSwgKHUzMiBfX3VzZXIgKikocHRyKSkpCQkJCVwKKwkJCXwgKF9fZ2V0X3VzZXIoKHgpID4+IDMyLCAoKHUzMiBfX3VzZXIgKikocHRyKSArIDEpKSk7IGJyZWFrOwkJXAorCQlkZWZhdWx0OiBfX3JldCA9IF9fZ2V0X3VzZXJfdW5hbGlnbmVkX3Vua25vd24oKTsJCQkJXAorCX0JCQkJCQkJCQkJCVwKKwlfX3JldDsJCQkJCQkJCQkJCVwKK30pCisKKyNpZmRlZiBBU01fU1VQUE9SVEVECisgIHN0cnVjdCBfX2xhcmdlX3N0cnVjdCB7IHVuc2lnbmVkIGxvbmcgYnVmWzEwMF07IH07CisjIGRlZmluZSBfX20oeCkgKCooc3RydWN0IF9fbGFyZ2Vfc3RydWN0IF9fdXNlciAqKSh4KSkKKworLyogV2UgbmVlZCB0byBkZWNsYXJlIHRoZSBfX2V4X3RhYmxlIHNlY3Rpb24gYmVmb3JlIHdlIGNhbiB1c2UgaXQgaW4gLnhkYXRhLiAgKi8KK2FzbSAoIi5zZWN0aW9uIFwiX19leF90YWJsZVwiLCBcImFcIlxuXHQucHJldmlvdXMiKTsKKworIyBkZWZpbmUgX19nZXRfdXNlcl9zaXplKHZhbCwgYWRkciwgbiwgZXJyKQkJCQkJCQlcCitkbyB7CQkJCQkJCQkJCQkJXAorCXJlZ2lzdGVyIGxvbmcgX19ndV9yOCBhc20gKCJyOCIpID0gMDsJCQkJCQkJXAorCXJlZ2lzdGVyIGxvbmcgX19ndV9yOSBhc20gKCJyOSIpOwkJCQkJCQlcCisJYXNtICgiXG5bMTpdXHRsZCIjbiIgJTA9JTIlUDJcdC8vICUwIGFuZCAlMSBnZXQgb3ZlcndyaXR0ZW4gYnkgZXhjZXB0aW9uIGhhbmRsZXJcbiIJXAorCSAgICAgIlx0LnhkYXRhNCBcIl9fZXhfdGFibGVcIiwgMWItLiwgMWYtLis0XG4iCQkJCQkJXAorCSAgICAgIlsxOl0iCQkJCQkJCQkJCVwKKwkgICAgIDogIj1yIihfX2d1X3I5KSwgIj1yIihfX2d1X3I4KSA6ICJtIihfX20oYWRkcikpLCAiMSIoX19ndV9yOCkpOwkJCVwKKwkoZXJyKSA9IF9fZ3Vfcjg7CQkJCQkJCQkJXAorCSh2YWwpID0gX19ndV9yOTsJCQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisvKgorICogVGhlICJfX3B1dF91c2VyX3NpemUoKSIgbWFjcm8gdGVsbHMgZ2NjIGl0IHJlYWRzIGZyb20gbWVtb3J5IGluc3RlYWQgb2Ygd3JpdGluZyBpdC4gIFRoaXMKKyAqIGlzIGJlY2F1c2UgdGhleSBkbyBub3Qgd3JpdGUgdG8gYW55IG1lbW9yeSBnY2Mga25vd3MgYWJvdXQsIHNvIHRoZXJlIGFyZSBubyBhbGlhc2luZworICogaXNzdWVzLgorICovCisjIGRlZmluZSBfX3B1dF91c2VyX3NpemUodmFsLCBhZGRyLCBuLCBlcnIpCQkJCQkJCVwKK2RvIHsJCQkJCQkJCQkJCQlcCisJcmVnaXN0ZXIgbG9uZyBfX3B1X3I4IGFzbSAoInI4IikgPSAwOwkJCQkJCQlcCisJYXNtIHZvbGF0aWxlICgiXG5bMTpdXHRzdCIjbiIgJTE9JXIyJVAxXHQvLyAlMCBnZXRzIG92ZXJ3cml0dGVuIGJ5IGV4Y2VwdGlvbiBoYW5kbGVyXG4iCVwKKwkJICAgICAgIlx0LnhkYXRhNCBcIl9fZXhfdGFibGVcIiwgMWItLiwgMWYtLlxuIgkJCQkJXAorCQkgICAgICAiWzE6XSIJCQkJCQkJCQlcCisJCSAgICAgIDogIj1yIihfX3B1X3I4KSA6ICJtIihfX20oYWRkcikpLCAick8iKHZhbCksICIwIihfX3B1X3I4KSk7CQlcCisJKGVycikgPSBfX3B1X3I4OwkJCQkJCQkJCVwKK30gd2hpbGUgKDApCisKKyNlbHNlIC8qICFBU01fU1VQUE9SVEVEICovCisjIGRlZmluZSBSRUxPQ19UWVBFCTIJLyogaXAtcmVsICovCisjIGRlZmluZSBfX2dldF91c2VyX3NpemUodmFsLCBhZGRyLCBuLCBlcnIpCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJX19sZF91c2VyKCJfX2V4X3RhYmxlIiwgKHVuc2lnbmVkIGxvbmcpIGFkZHIsIG4sIFJFTE9DX1RZUEUpOwlcCisJKGVycikgPSBpYTY0X2dldHJlZyhfSUE2NF9SRUdfUjgpOwkJCQlcCisJKHZhbCkgPSBpYTY0X2dldHJlZyhfSUE2NF9SRUdfUjkpOwkJCQlcCit9IHdoaWxlICgwKQorIyBkZWZpbmUgX19wdXRfdXNlcl9zaXplKHZhbCwgYWRkciwgbiwgZXJyKQkJCQkJCQlcCitkbyB7CQkJCQkJCQkJCQkJXAorCV9fc3RfdXNlcigiX19leF90YWJsZSIsICh1bnNpZ25lZCBsb25nKSBhZGRyLCBuLCBSRUxPQ19UWVBFLCAodW5zaWduZWQgbG9uZykgKHZhbCkpOwlcCisJKGVycikgPSBpYTY0X2dldHJlZyhfSUE2NF9SRUdfUjgpOwkJCQkJCQlcCit9IHdoaWxlICgwKQorI2VuZGlmIC8qICFBU01fU1VQUE9SVEVEICovCisKK2V4dGVybiB2b2lkIF9fZ2V0X3VzZXJfdW5rbm93biAodm9pZCk7CisKKy8qCisgKiBFdmFsdWF0aW5nIGFyZ3VtZW50cyBYLCBQVFIsIFNJWkUsIGFuZCBTRUdNRU5UIG1heSBpbnZvbHZlIHN1YnJvdXRpbmUtY2FsbHMsIHdoaWNoCisgKiBjb3VsZCBjbG9iYmVyIHI4IGFuZCByOSAoYW1vbmcgb3RoZXJzKS4gIFRodXMsIGJlIGNhcmVmdWwgbm90IHRvIGV2YWx1YXRlIGl0IHdoaWxlCisgKiB1c2luZyByOC9yOS4KKyAqLworI2RlZmluZSBfX2RvX2dldF91c2VyKGNoZWNrLCB4LCBwdHIsIHNpemUsIHNlZ21lbnQpCQkJCQlcCisoewkJCQkJCQkJCQkJXAorCWNvbnN0IF9fdHlwZW9mX18oKihwdHIpKSBfX3VzZXIgKl9fZ3VfcHRyID0gKHB0cik7CQkJCVwKKwlfX3R5cGVvZl9fIChzaXplKSBfX2d1X3NpemUgPSAoc2l6ZSk7CQkJCQkJXAorCWxvbmcgX19ndV9lcnIgPSAtRUZBVUxULCBfX2d1X3ZhbCA9IDA7CQkJCQkJXAorCQkJCQkJCQkJCQlcCisJaWYgKCFjaGVjayB8fCBfX2FjY2Vzc19vayhfX2d1X3B0ciwgc2l6ZSwgc2VnbWVudCkpCQkJCVwKKwkJc3dpdGNoIChfX2d1X3NpemUpIHsJCQkJCQkJXAorCQkgICAgICBjYXNlIDE6IF9fZ2V0X3VzZXJfc2l6ZShfX2d1X3ZhbCwgX19ndV9wdHIsIDEsIF9fZ3VfZXJyKTsgYnJlYWs7CVwKKwkJICAgICAgY2FzZSAyOiBfX2dldF91c2VyX3NpemUoX19ndV92YWwsIF9fZ3VfcHRyLCAyLCBfX2d1X2Vycik7IGJyZWFrOwlcCisJCSAgICAgIGNhc2UgNDogX19nZXRfdXNlcl9zaXplKF9fZ3VfdmFsLCBfX2d1X3B0ciwgNCwgX19ndV9lcnIpOyBicmVhazsJXAorCQkgICAgICBjYXNlIDg6IF9fZ2V0X3VzZXJfc2l6ZShfX2d1X3ZhbCwgX19ndV9wdHIsIDgsIF9fZ3VfZXJyKTsgYnJlYWs7CVwKKwkJICAgICAgZGVmYXVsdDogX19nZXRfdXNlcl91bmtub3duKCk7IGJyZWFrOwkJCQlcCisJCX0JCQkJCQkJCQlcCisJKHgpID0gKF9fdHlwZW9mX18oKihfX2d1X3B0cikpKSBfX2d1X3ZhbDsJCQkJCVwKKwlfX2d1X2VycjsJCQkJCQkJCQlcCit9KQorCisjZGVmaW5lIF9fZ2V0X3VzZXJfbm9jaGVjayh4LCBwdHIsIHNpemUpCV9fZG9fZ2V0X3VzZXIoMCwgeCwgcHRyLCBzaXplLCBLRVJORUxfRFMpCisjZGVmaW5lIF9fZ2V0X3VzZXJfY2hlY2soeCwgcHRyLCBzaXplLCBzZWdtZW50KQlfX2RvX2dldF91c2VyKDEsIHgsIHB0ciwgc2l6ZSwgc2VnbWVudCkKKworZXh0ZXJuIHZvaWQgX19wdXRfdXNlcl91bmtub3duICh2b2lkKTsKKworLyoKKyAqIEV2YWx1YXRpbmcgYXJndW1lbnRzIFgsIFBUUiwgU0laRSwgYW5kIFNFR01FTlQgbWF5IGludm9sdmUgc3Vicm91dGluZS1jYWxscywgd2hpY2gKKyAqIGNvdWxkIGNsb2JiZXIgcjggKGFtb25nIG90aGVycykuICBUaHVzLCBiZSBjYXJlZnVsIG5vdCB0byBldmFsdWF0ZSB0aGVtIHdoaWxlIHVzaW5nIHI4LgorICovCisjZGVmaW5lIF9fZG9fcHV0X3VzZXIoY2hlY2ssIHgsIHB0ciwgc2l6ZSwgc2VnbWVudCkJCQkJCVwKKyh7CQkJCQkJCQkJCQlcCisJX190eXBlb2ZfXyAoeCkgX19wdV94ID0gKHgpOwkJCQkJCQlcCisJX190eXBlb2ZfXyAoKihwdHIpKSBfX3VzZXIgKl9fcHVfcHRyID0gKHB0cik7CQkJCQlcCisJX190eXBlb2ZfXyAoc2l6ZSkgX19wdV9zaXplID0gKHNpemUpOwkJCQkJCVwKKwlsb25nIF9fcHVfZXJyID0gLUVGQVVMVDsJCQkJCQkJXAorCQkJCQkJCQkJCQlcCisJaWYgKCFjaGVjayB8fCBfX2FjY2Vzc19vayhfX3B1X3B0ciwgX19wdV9zaXplLCBzZWdtZW50KSkJCQlcCisJCXN3aXRjaCAoX19wdV9zaXplKSB7CQkJCQkJCVwKKwkJICAgICAgY2FzZSAxOiBfX3B1dF91c2VyX3NpemUoX19wdV94LCBfX3B1X3B0ciwgMSwgX19wdV9lcnIpOyBicmVhazsJXAorCQkgICAgICBjYXNlIDI6IF9fcHV0X3VzZXJfc2l6ZShfX3B1X3gsIF9fcHVfcHRyLCAyLCBfX3B1X2Vycik7IGJyZWFrOwlcCisJCSAgICAgIGNhc2UgNDogX19wdXRfdXNlcl9zaXplKF9fcHVfeCwgX19wdV9wdHIsIDQsIF9fcHVfZXJyKTsgYnJlYWs7CVwKKwkJICAgICAgY2FzZSA4OiBfX3B1dF91c2VyX3NpemUoX19wdV94LCBfX3B1X3B0ciwgOCwgX19wdV9lcnIpOyBicmVhazsJXAorCQkgICAgICBkZWZhdWx0OiBfX3B1dF91c2VyX3Vua25vd24oKTsgYnJlYWs7CQkJCVwKKwkJfQkJCQkJCQkJCVwKKwlfX3B1X2VycjsJCQkJCQkJCQlcCit9KQorCisjZGVmaW5lIF9fcHV0X3VzZXJfbm9jaGVjayh4LCBwdHIsIHNpemUpCV9fZG9fcHV0X3VzZXIoMCwgeCwgcHRyLCBzaXplLCBLRVJORUxfRFMpCisjZGVmaW5lIF9fcHV0X3VzZXJfY2hlY2soeCwgcHRyLCBzaXplLCBzZWdtZW50KQlfX2RvX3B1dF91c2VyKDEsIHgsIHB0ciwgc2l6ZSwgc2VnbWVudCkKKworLyoKKyAqIENvbXBsZXggYWNjZXNzIHJvdXRpbmVzCisgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fbXVzdF9jaGVjayBfX2NvcHlfdXNlciAodm9pZCBfX3VzZXIgKnRvLCBjb25zdCB2b2lkIF9fdXNlciAqZnJvbSwKKwkJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgY291bnQpOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK19fY29weV90b191c2VyICh2b2lkIF9fdXNlciAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxvbmcgY291bnQpCit7CisJcmV0dXJuIF9fY29weV91c2VyKHRvLCAodm9pZCBfX3VzZXIgKikgZnJvbSwgY291bnQpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK19fY29weV9mcm9tX3VzZXIgKHZvaWQgKnRvLCBjb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgbG9uZyBjb3VudCkKK3sKKwlyZXR1cm4gX19jb3B5X3VzZXIoKHZvaWQgX191c2VyICopIHRvLCBmcm9tLCBjb3VudCk7Cit9CisKKyNkZWZpbmUgX19jb3B5X3RvX3VzZXJfaW5hdG9taWMJCV9fY29weV90b191c2VyCisjZGVmaW5lIF9fY29weV9mcm9tX3VzZXJfaW5hdG9taWMJX19jb3B5X2Zyb21fdXNlcgorI2RlZmluZSBjb3B5X3RvX3VzZXIodG8sIGZyb20sIG4pCQkJCQkJCVwKKyh7CQkJCQkJCQkJCQlcCisJdm9pZCBfX3VzZXIgKl9fY3VfdG8gPSAodG8pOwkJCQkJCQlcCisJY29uc3Qgdm9pZCAqX19jdV9mcm9tID0gKGZyb20pOwkJCQkJCQlcCisJbG9uZyBfX2N1X2xlbiA9IChuKTsJCQkJCQkJCVwKKwkJCQkJCQkJCQkJXAorCWlmIChfX2FjY2Vzc19vayhfX2N1X3RvLCBfX2N1X2xlbiwgZ2V0X2ZzKCkpKQkJCQkJXAorCQlfX2N1X2xlbiA9IF9fY29weV91c2VyKF9fY3VfdG8sICh2b2lkIF9fdXNlciAqKSBfX2N1X2Zyb20sIF9fY3VfbGVuKTsJXAorCV9fY3VfbGVuOwkJCQkJCQkJCVwKK30pCisKKyNkZWZpbmUgY29weV9mcm9tX3VzZXIodG8sIGZyb20sIG4pCQkJCQkJCVwKKyh7CQkJCQkJCQkJCQlcCisJdm9pZCAqX19jdV90byA9ICh0byk7CQkJCQkJCQlcCisJY29uc3Qgdm9pZCBfX3VzZXIgKl9fY3VfZnJvbSA9IChmcm9tKTsJCQkJCQlcCisJbG9uZyBfX2N1X2xlbiA9IChuKTsJCQkJCQkJCVwKKwkJCQkJCQkJCQkJXAorCV9fY2hrX3VzZXJfcHRyKF9fY3VfZnJvbSk7CQkJCQkJCVwKKwlpZiAoX19hY2Nlc3Nfb2soX19jdV9mcm9tLCBfX2N1X2xlbiwgZ2V0X2ZzKCkpKQkJCQkJXAorCQlfX2N1X2xlbiA9IF9fY29weV91c2VyKCh2b2lkIF9fdXNlciAqKSBfX2N1X3RvLCBfX2N1X2Zyb20sIF9fY3VfbGVuKTsJXAorCV9fY3VfbGVuOwkJCQkJCQkJCVwKK30pCisKKyNkZWZpbmUgX19jb3B5X2luX3VzZXIodG8sIGZyb20sIHNpemUpCV9fY29weV91c2VyKCh0byksIChmcm9tKSwgKHNpemUpKQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK2NvcHlfaW5fdXNlciAodm9pZCBfX3VzZXIgKnRvLCBjb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKQoreworCWlmIChsaWtlbHkoYWNjZXNzX29rKFZFUklGWV9SRUFELCBmcm9tLCBuKSAmJiBhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCB0bywgbikpKQorCQluID0gX19jb3B5X3VzZXIodG8sIGZyb20sIG4pOworCXJldHVybiBuOworfQorCitleHRlcm4gdW5zaWduZWQgbG9uZyBfX2RvX2NsZWFyX3VzZXIgKHZvaWQgX191c2VyICosIHVuc2lnbmVkIGxvbmcpOworCisjZGVmaW5lIF9fY2xlYXJfdXNlcih0bywgbikJCV9fZG9fY2xlYXJfdXNlcih0bywgbikKKworI2RlZmluZSBjbGVhcl91c2VyKHRvLCBuKQkJCQkJXAorKHsJCQkJCQkJCVwKKwl1bnNpZ25lZCBsb25nIF9fY3VfbGVuID0gKG4pOwkJCQlcCisJaWYgKF9fYWNjZXNzX29rKHRvLCBfX2N1X2xlbiwgZ2V0X2ZzKCkpKQkJXAorCQlfX2N1X2xlbiA9IF9fZG9fY2xlYXJfdXNlcih0bywgX19jdV9sZW4pOwlcCisJX19jdV9sZW47CQkJCQkJXAorfSkKKworCisvKgorICogUmV0dXJuczogLUVGQVVMVCBpZiBleGNlcHRpb24gYmVmb3JlIHRlcm1pbmF0b3IsIE4gaWYgdGhlIGVudGlyZSBidWZmZXIgZmlsbGVkLCBlbHNlCisgKiBzdHJsZW4uCisgKi8KK2V4dGVybiBsb25nIF9fbXVzdF9jaGVjayBfX3N0cm5jcHlfZnJvbV91c2VyIChjaGFyICp0bywgY29uc3QgY2hhciBfX3VzZXIgKmZyb20sIGxvbmcgdG9fbGVuKTsKKworI2RlZmluZSBzdHJuY3B5X2Zyb21fdXNlcih0bywgZnJvbSwgbikJCQkJCVwKKyh7CQkJCQkJCQkJXAorCWNvbnN0IGNoYXIgX191c2VyICogX19zZnVfZnJvbSA9IChmcm9tKTsJCQlcCisJbG9uZyBfX3NmdV9yZXQgPSAtRUZBVUxUOwkJCQkJXAorCWlmIChfX2FjY2Vzc19vayhfX3NmdV9mcm9tLCAwLCBnZXRfZnMoKSkpCQkJXAorCQlfX3NmdV9yZXQgPSBfX3N0cm5jcHlfZnJvbV91c2VyKCh0byksIF9fc2Z1X2Zyb20sIChuKSk7CVwKKwlfX3NmdV9yZXQ7CQkJCQkJCVwKK30pCisKKy8qIFJldHVybnM6IDAgaWYgYmFkLCBzdHJpbmcgbGVuZ3RoKzEgKG1lbW9yeSBzaXplKSBvZiBzdHJpbmcgaWYgb2sgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fc3RybGVuX3VzZXIgKGNvbnN0IGNoYXIgX191c2VyICopOworCisjZGVmaW5lIHN0cmxlbl91c2VyKHN0cikJCQkJXAorKHsJCQkJCQkJXAorCWNvbnN0IGNoYXIgX191c2VyICpfX3N1X3N0ciA9IChzdHIpOwkJXAorCXVuc2lnbmVkIGxvbmcgX19zdV9yZXQgPSAwOwkJCVwKKwlpZiAoX19hY2Nlc3Nfb2soX19zdV9zdHIsIDAsIGdldF9mcygpKSkJCVwKKwkJX19zdV9yZXQgPSBfX3N0cmxlbl91c2VyKF9fc3Vfc3RyKTsJXAorCV9fc3VfcmV0OwkJCQkJXAorfSkKKworLyoKKyAqIFJldHVybnM6IDAgaWYgZXhjZXB0aW9uIGJlZm9yZSBOVUwgb3IgcmVhY2hpbmcgdGhlIHN1cHBsaWVkIGxpbWl0CisgKiAoTiksIGEgdmFsdWUgZ3JlYXRlciB0aGFuIE4gaWYgdGhlIGxpbWl0IHdvdWxkIGJlIGV4Y2VlZGVkLCBlbHNlCisgKiBzdHJsZW4uCisgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fc3Rybmxlbl91c2VyIChjb25zdCBjaGFyIF9fdXNlciAqLCBsb25nKTsKKworI2RlZmluZSBzdHJubGVuX3VzZXIoc3RyLCBsZW4pCQkJCQlcCisoewkJCQkJCQkJXAorCWNvbnN0IGNoYXIgX191c2VyICpfX3N1X3N0ciA9IChzdHIpOwkJCVwKKwl1bnNpZ25lZCBsb25nIF9fc3VfcmV0ID0gMDsJCQkJXAorCWlmIChfX2FjY2Vzc19vayhfX3N1X3N0ciwgMCwgZ2V0X2ZzKCkpKQkJCVwKKwkJX19zdV9yZXQgPSBfX3N0cm5sZW5fdXNlcihfX3N1X3N0ciwgbGVuKTsJXAorCV9fc3VfcmV0OwkJCQkJCVwKK30pCisKKy8qIEdlbmVyaWMgY29kZSBjYW4ndCBkZWFsIHdpdGggdGhlIGxvY2F0aW9uLXJlbGF0aXZlIGZvcm1hdCB0aGF0IHdlIHVzZSBmb3IgY29tcGFjdG5lc3MuICAqLworI2RlZmluZSBBUkNIX0hBU19TT1JUX0VYVEFCTEUKKyNkZWZpbmUgQVJDSF9IQVNfU0VBUkNIX0VYVEFCTEUKKworc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSB7CisJaW50IGFkZHI7CS8qIGxvY2F0aW9uLXJlbGF0aXZlIGFkZHJlc3Mgb2YgaW5zbiB0aGlzIGZpeHVwIGlzIGZvciAqLworCWludCBjb250OwkvKiBsb2NhdGlvbi1yZWxhdGl2ZSBjb250aW51YXRpb24gYWRkci47IGlmIGJpdCAyIGlzIHNldCwgcjkgaXMgc2V0IHRvIDAgKi8KK307CisKK2V4dGVybiB2b2lkIGlhNjRfaGFuZGxlX2V4Y2VwdGlvbiAoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmUpOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKnNlYXJjaF9leGNlcHRpb25fdGFibGVzICh1bnNpZ25lZCBsb25nIGFkZHIpOworCitzdGF0aWMgaW5saW5lIGludAoraWE2NF9kb25lX3dpdGhfZXhjZXB0aW9uIChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwljb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICplOworCWUgPSBzZWFyY2hfZXhjZXB0aW9uX3RhYmxlcyhyZWdzLT5jcl9paXAgKyBpYTY0X3BzcihyZWdzKS0+cmkpOworCWlmIChlKSB7CisJCWlhNjRfaGFuZGxlX2V4Y2VwdGlvbihyZWdzLCBlKTsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCisjZGVmaW5lIEFSQ0hfSEFTX1RSQU5TTEFURV9NRU1fUFRSCTEKK3N0YXRpYyBfX2lubGluZV9fIGNoYXIgKgoreGxhdGVfZGV2X21lbV9wdHIgKHVuc2lnbmVkIGxvbmcgcCkKK3sKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwljaGFyICogcHRyOworCisJcGFnZSA9IHBmbl90b19wYWdlKHAgPj4gUEFHRV9TSElGVCk7CisJaWYgKFBhZ2VVbmNhY2hlZChwYWdlKSkKKwkJcHRyID0gKGNoYXIgKilwICsgX19JQTY0X1VOQ0FDSEVEX09GRlNFVDsKKwllbHNlCisJCXB0ciA9IF9fdmEocCk7CisKKwlyZXR1cm4gcHRyOworfQorCisvKgorICogQ29udmVydCBhIHZpcnR1YWwgY2FjaGVkIGtlcm5lbCBtZW1vcnkgcG9pbnRlciB0byBhbiB1bmNhY2hlZCBwb2ludGVyCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIGNoYXIgKgoreGxhdGVfZGV2X2ttZW1fcHRyIChjaGFyICogcCkKK3sKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwljaGFyICogcHRyOworCisJcGFnZSA9IHZpcnRfdG9fcGFnZSgodW5zaWduZWQgbG9uZylwID4+IFBBR0VfU0hJRlQpOworCWlmIChQYWdlVW5jYWNoZWQocGFnZSkpCisJCXB0ciA9IChjaGFyICopX19wYShwKSArIF9fSUE2NF9VTkNBQ0hFRF9PRkZTRVQ7CisJZWxzZQorCQlwdHIgPSBwOworCisJcmV0dXJuIHB0cjsKK30KKworI2VuZGlmIC8qIF9BU01fSUE2NF9VQUNDRVNTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvdWNvbnRleHQuaCBiL2luY2x1ZGUvYXNtLWlhNjQvdWNvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjU3M2RjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taWE2NC91Y29udGV4dC5oCkBAIC0wLDAgKzEsMTIgQEAKKyNpZm5kZWYgX0FTTV9JQTY0X1VDT05URVhUX0gKKyNkZWZpbmUgX0FTTV9JQTY0X1VDT05URVhUX0gKKworc3RydWN0IHVjb250ZXh0IHsKKwlzdHJ1Y3Qgc2lnY29udGV4dCB1Y19tY29udGV4dDsKK307CisKKyNkZWZpbmUgdWNfbGluawkJdWNfbWNvbnRleHQuc2NfZ3JbMF0JLyogd3JvbmcgdHlwZTsgbm9ib2R5IGNhcmVzICovCisjZGVmaW5lIHVjX3NpZ21hc2sJdWNfbWNvbnRleHQuc2Nfc2lnbWFzaworI2RlZmluZSB1Y19zdGFjawl1Y19tY29udGV4dC5zY19zdGFjaworCisjZW5kaWYgLyogX0FTTV9JQTY0X1VDT05URVhUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvdW5hbGlnbmVkLmggYi9pbmNsdWRlL2FzbS1pYTY0L3VuYWxpZ25lZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiODU1OTgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3VuYWxpZ25lZC5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfQVNNX0lBNjRfVU5BTElHTkVEX0gKKyNkZWZpbmUgX0FTTV9JQTY0X1VOQUxJR05FRF9ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy91bmFsaWduZWQuaD4KKworI2VuZGlmIC8qIF9BU01fSUE2NF9VTkFMSUdORURfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLWlhNjQvdW5pc3RkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNlMjZjNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvdW5pc3RkLmgKQEAgLTAsMCArMSwzOTkgQEAKKyNpZm5kZWYgX0FTTV9JQTY0X1VOSVNURF9ICisjZGVmaW5lIF9BU01fSUE2NF9VTklTVERfSAorCisvKgorICogSUEtNjQgTGludXggc3lzY2FsbCBudW1iZXJzIGFuZCBpbmxpbmUtZnVuY3Rpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OC0yMDA1IEhld2xldHQtUGFja2FyZCBDbworICoJRGF2aWQgTW9zYmVyZ2VyLVRhbmcgPGRhdmlkbUBocGwuaHAuY29tPgorICovCisKKyNpbmNsdWRlIDxhc20vYnJlYWsuaD4KKworI2RlZmluZSBfX0JSRUFLX1NZU0NBTEwJCQlfX0lBNjRfQlJFQUtfU1lTQ0FMTAorCisjZGVmaW5lIF9fTlJfbmlfc3lzY2FsbAkJCTEwMjQKKyNkZWZpbmUgX19OUl9leGl0CQkJMTAyNQorI2RlZmluZSBfX05SX3JlYWQJCQkxMDI2CisjZGVmaW5lIF9fTlJfd3JpdGUJCQkxMDI3CisjZGVmaW5lIF9fTlJfb3BlbgkJCTEwMjgKKyNkZWZpbmUgX19OUl9jbG9zZQkJCTEwMjkKKyNkZWZpbmUgX19OUl9jcmVhdAkJCTEwMzAKKyNkZWZpbmUgX19OUl9saW5rCQkJMTAzMQorI2RlZmluZSBfX05SX3VubGluawkJCTEwMzIKKyNkZWZpbmUgX19OUl9leGVjdmUJCQkxMDMzCisjZGVmaW5lIF9fTlJfY2hkaXIJCQkxMDM0CisjZGVmaW5lIF9fTlJfZmNoZGlyCQkJMTAzNQorI2RlZmluZSBfX05SX3V0aW1lcwkJCTEwMzYKKyNkZWZpbmUgX19OUl9ta25vZAkJCTEwMzcKKyNkZWZpbmUgX19OUl9jaG1vZAkJCTEwMzgKKyNkZWZpbmUgX19OUl9jaG93bgkJCTEwMzkKKyNkZWZpbmUgX19OUl9sc2VlawkJCTEwNDAKKyNkZWZpbmUgX19OUl9nZXRwaWQJCQkxMDQxCisjZGVmaW5lIF9fTlJfZ2V0cHBpZAkJCTEwNDIKKyNkZWZpbmUgX19OUl9tb3VudAkJCTEwNDMKKyNkZWZpbmUgX19OUl91bW91bnQJCQkxMDQ0CisjZGVmaW5lIF9fTlJfc2V0dWlkCQkJMTA0NQorI2RlZmluZSBfX05SX2dldHVpZAkJCTEwNDYKKyNkZWZpbmUgX19OUl9nZXRldWlkCQkJMTA0NworI2RlZmluZSBfX05SX3B0cmFjZQkJCTEwNDgKKyNkZWZpbmUgX19OUl9hY2Nlc3MJCQkxMDQ5CisjZGVmaW5lIF9fTlJfc3luYwkJCTEwNTAKKyNkZWZpbmUgX19OUl9mc3luYwkJCTEwNTEKKyNkZWZpbmUgX19OUl9mZGF0YXN5bmMJCQkxMDUyCisjZGVmaW5lIF9fTlJfa2lsbAkJCTEwNTMKKyNkZWZpbmUgX19OUl9yZW5hbWUJCQkxMDU0CisjZGVmaW5lIF9fTlJfbWtkaXIJCQkxMDU1CisjZGVmaW5lIF9fTlJfcm1kaXIJCQkxMDU2CisjZGVmaW5lIF9fTlJfZHVwCQkJMTA1NworI2RlZmluZSBfX05SX3BpcGUJCQkxMDU4CisjZGVmaW5lIF9fTlJfdGltZXMJCQkxMDU5CisjZGVmaW5lIF9fTlJfYnJrCQkJMTA2MAorI2RlZmluZSBfX05SX3NldGdpZAkJCTEwNjEKKyNkZWZpbmUgX19OUl9nZXRnaWQJCQkxMDYyCisjZGVmaW5lIF9fTlJfZ2V0ZWdpZAkJCTEwNjMKKyNkZWZpbmUgX19OUl9hY2N0CQkJMTA2NAorI2RlZmluZSBfX05SX2lvY3RsCQkJMTA2NQorI2RlZmluZSBfX05SX2ZjbnRsCQkJMTA2NgorI2RlZmluZSBfX05SX3VtYXNrCQkJMTA2NworI2RlZmluZSBfX05SX2Nocm9vdAkJCTEwNjgKKyNkZWZpbmUgX19OUl91c3RhdAkJCTEwNjkKKyNkZWZpbmUgX19OUl9kdXAyCQkJMTA3MAorI2RlZmluZSBfX05SX3NldHJldWlkCQkJMTA3MQorI2RlZmluZSBfX05SX3NldHJlZ2lkCQkJMTA3MgorI2RlZmluZSBfX05SX2dldHJlc3VpZAkJCTEwNzMKKyNkZWZpbmUgX19OUl9zZXRyZXN1aWQJCQkxMDc0CisjZGVmaW5lIF9fTlJfZ2V0cmVzZ2lkCQkJMTA3NQorI2RlZmluZSBfX05SX3NldHJlc2dpZAkJCTEwNzYKKyNkZWZpbmUgX19OUl9nZXRncm91cHMJCQkxMDc3CisjZGVmaW5lIF9fTlJfc2V0Z3JvdXBzCQkJMTA3OAorI2RlZmluZSBfX05SX2dldHBnaWQJCQkxMDc5CisjZGVmaW5lIF9fTlJfc2V0cGdpZAkJCTEwODAKKyNkZWZpbmUgX19OUl9zZXRzaWQJCQkxMDgxCisjZGVmaW5lIF9fTlJfZ2V0c2lkCQkJMTA4MgorI2RlZmluZSBfX05SX3NldGhvc3RuYW1lCQkxMDgzCisjZGVmaW5lIF9fTlJfc2V0cmxpbWl0CQkJMTA4NAorI2RlZmluZSBfX05SX2dldHJsaW1pdAkJCTEwODUKKyNkZWZpbmUgX19OUl9nZXRydXNhZ2UJCQkxMDg2CisjZGVmaW5lIF9fTlJfZ2V0dGltZW9mZGF5CQkxMDg3CisjZGVmaW5lIF9fTlJfc2V0dGltZW9mZGF5CQkxMDg4CisjZGVmaW5lIF9fTlJfc2VsZWN0CQkJMTA4OQorI2RlZmluZSBfX05SX3BvbGwJCQkxMDkwCisjZGVmaW5lIF9fTlJfc3ltbGluawkJCTEwOTEKKyNkZWZpbmUgX19OUl9yZWFkbGluawkJCTEwOTIKKyNkZWZpbmUgX19OUl91c2VsaWIJCQkxMDkzCisjZGVmaW5lIF9fTlJfc3dhcG9uCQkJMTA5NAorI2RlZmluZSBfX05SX3N3YXBvZmYJCQkxMDk1CisjZGVmaW5lIF9fTlJfcmVib290CQkJMTA5NgorI2RlZmluZSBfX05SX3RydW5jYXRlCQkJMTA5NworI2RlZmluZSBfX05SX2Z0cnVuY2F0ZQkJCTEwOTgKKyNkZWZpbmUgX19OUl9mY2htb2QJCQkxMDk5CisjZGVmaW5lIF9fTlJfZmNob3duCQkJMTEwMAorI2RlZmluZSBfX05SX2dldHByaW9yaXR5CQkxMTAxCisjZGVmaW5lIF9fTlJfc2V0cHJpb3JpdHkJCTExMDIKKyNkZWZpbmUgX19OUl9zdGF0ZnMJCQkxMTAzCisjZGVmaW5lIF9fTlJfZnN0YXRmcwkJCTExMDQKKyNkZWZpbmUgX19OUl9nZXR0aWQJCQkxMTA1CisjZGVmaW5lIF9fTlJfc2VtZ2V0CQkJMTEwNgorI2RlZmluZSBfX05SX3NlbW9wCQkJMTEwNworI2RlZmluZSBfX05SX3NlbWN0bAkJCTExMDgKKyNkZWZpbmUgX19OUl9tc2dnZXQJCQkxMTA5CisjZGVmaW5lIF9fTlJfbXNnc25kCQkJMTExMAorI2RlZmluZSBfX05SX21zZ3JjdgkJCTExMTEKKyNkZWZpbmUgX19OUl9tc2djdGwJCQkxMTEyCisjZGVmaW5lIF9fTlJfc2htZ2V0CQkJMTExMworI2RlZmluZSBfX05SX3NobWF0CQkJMTExNAorI2RlZmluZSBfX05SX3NobWR0CQkJMTExNQorI2RlZmluZSBfX05SX3NobWN0bAkJCTExMTYKKy8qIGFsc28ga25vd24gYXMga2xvZ2N0bCgpIGluIEdOVSBsaWJjOiAqLworI2RlZmluZSBfX05SX3N5c2xvZwkJCTExMTcKKyNkZWZpbmUgX19OUl9zZXRpdGltZXIJCQkxMTE4CisjZGVmaW5lIF9fTlJfZ2V0aXRpbWVyCQkJMTExOQorLyogMTEyMCB3YXMgX19OUl9vbGRfc3RhdCAqLworLyogMTEyMSB3YXMgX19OUl9vbGRfbHN0YXQgKi8KKy8qIDExMjIgd2FzIF9fTlJfb2xkX2ZzdGF0ICovCisjZGVmaW5lIF9fTlJfdmhhbmd1cAkJCTExMjMKKyNkZWZpbmUgX19OUl9sY2hvd24JCQkxMTI0CisjZGVmaW5lIF9fTlJfcmVtYXBfZmlsZV9wYWdlcwkJMTEyNQorI2RlZmluZSBfX05SX3dhaXQ0CQkJMTEyNgorI2RlZmluZSBfX05SX3N5c2luZm8JCQkxMTI3CisjZGVmaW5lIF9fTlJfY2xvbmUJCQkxMTI4CisjZGVmaW5lIF9fTlJfc2V0ZG9tYWlubmFtZQkJMTEyOQorI2RlZmluZSBfX05SX3VuYW1lCQkJMTEzMAorI2RlZmluZSBfX05SX2FkanRpbWV4CQkJMTEzMQorLyogMTEzMiB3YXMgX19OUl9jcmVhdGVfbW9kdWxlICovCisjZGVmaW5lIF9fTlJfaW5pdF9tb2R1bGUJCTExMzMKKyNkZWZpbmUgX19OUl9kZWxldGVfbW9kdWxlCQkxMTM0CisvKiAxMTM1IHdhcyBfX05SX2dldF9rZXJuZWxfc3ltcyAqLworLyogMTEzNiB3YXMgX19OUl9xdWVyeV9tb2R1bGUgKi8KKyNkZWZpbmUgX19OUl9xdW90YWN0bAkJCTExMzcKKyNkZWZpbmUgX19OUl9iZGZsdXNoCQkJMTEzOAorI2RlZmluZSBfX05SX3N5c2ZzCQkJMTEzOQorI2RlZmluZSBfX05SX3BlcnNvbmFsaXR5CQkxMTQwCisjZGVmaW5lIF9fTlJfYWZzX3N5c2NhbGwJCTExNDEKKyNkZWZpbmUgX19OUl9zZXRmc3VpZAkJCTExNDIKKyNkZWZpbmUgX19OUl9zZXRmc2dpZAkJCTExNDMKKyNkZWZpbmUgX19OUl9nZXRkZW50cwkJCTExNDQKKyNkZWZpbmUgX19OUl9mbG9jawkJCTExNDUKKyNkZWZpbmUgX19OUl9yZWFkdgkJCTExNDYKKyNkZWZpbmUgX19OUl93cml0ZXYJCQkxMTQ3CisjZGVmaW5lIF9fTlJfcHJlYWQ2NAkJCTExNDgKKyNkZWZpbmUgX19OUl9wd3JpdGU2NAkJCTExNDkKKyNkZWZpbmUgX19OUl9fc3lzY3RsCQkJMTE1MAorI2RlZmluZSBfX05SX21tYXAJCQkxMTUxCisjZGVmaW5lIF9fTlJfbXVubWFwCQkJMTE1MgorI2RlZmluZSBfX05SX21sb2NrCQkJMTE1MworI2RlZmluZSBfX05SX21sb2NrYWxsCQkJMTE1NAorI2RlZmluZSBfX05SX21wcm90ZWN0CQkJMTE1NQorI2RlZmluZSBfX05SX21yZW1hcAkJCTExNTYKKyNkZWZpbmUgX19OUl9tc3luYwkJCTExNTcKKyNkZWZpbmUgX19OUl9tdW5sb2NrCQkJMTE1OAorI2RlZmluZSBfX05SX211bmxvY2thbGwJCQkxMTU5CisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0cGFyYW0JCTExNjAKKyNkZWZpbmUgX19OUl9zY2hlZF9zZXRwYXJhbQkJMTE2MQorI2RlZmluZSBfX05SX3NjaGVkX2dldHNjaGVkdWxlcgkJMTE2MgorI2RlZmluZSBfX05SX3NjaGVkX3NldHNjaGVkdWxlcgkJMTE2MworI2RlZmluZSBfX05SX3NjaGVkX3lpZWxkCQkxMTY0CisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21heAkxMTY1CisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbgkxMTY2CisjZGVmaW5lIF9fTlJfc2NoZWRfcnJfZ2V0X2ludGVydmFsCTExNjcKKyNkZWZpbmUgX19OUl9uYW5vc2xlZXAJCQkxMTY4CisjZGVmaW5lIF9fTlJfbmZzc2VydmN0bAkJCTExNjkKKyNkZWZpbmUgX19OUl9wcmN0bAkJCTExNzAKKy8qIDExNzEgaXMgcmVzZXJ2ZWQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggb2xkIF9fTlJfZ2V0cGFnZXNpemUgKi8KKyNkZWZpbmUgX19OUl9tbWFwMgkJCTExNzIKKyNkZWZpbmUgX19OUl9wY2ljb25maWdfcmVhZAkJMTE3MworI2RlZmluZSBfX05SX3BjaWNvbmZpZ193cml0ZQkJMTE3NAorI2RlZmluZSBfX05SX3BlcmZtb25jdGwJCQkxMTc1CisjZGVmaW5lIF9fTlJfc2lnYWx0c3RhY2sJCTExNzYKKyNkZWZpbmUgX19OUl9ydF9zaWdhY3Rpb24JCTExNzcKKyNkZWZpbmUgX19OUl9ydF9zaWdwZW5kaW5nCQkxMTc4CisjZGVmaW5lIF9fTlJfcnRfc2lncHJvY21hc2sJCTExNzkKKyNkZWZpbmUgX19OUl9ydF9zaWdxdWV1ZWluZm8JCTExODAKKyNkZWZpbmUgX19OUl9ydF9zaWdyZXR1cm4JCTExODEKKyNkZWZpbmUgX19OUl9ydF9zaWdzdXNwZW5kCQkxMTgyCisjZGVmaW5lIF9fTlJfcnRfc2lndGltZWR3YWl0CQkxMTgzCisjZGVmaW5lIF9fTlJfZ2V0Y3dkCQkJMTE4NAorI2RlZmluZSBfX05SX2NhcGdldAkJCTExODUKKyNkZWZpbmUgX19OUl9jYXBzZXQJCQkxMTg2CisjZGVmaW5lIF9fTlJfc2VuZGZpbGUJCQkxMTg3CisjZGVmaW5lIF9fTlJfZ2V0cG1zZwkJCTExODgKKyNkZWZpbmUgX19OUl9wdXRwbXNnCQkJMTE4OQorI2RlZmluZSBfX05SX3NvY2tldAkJCTExOTAKKyNkZWZpbmUgX19OUl9iaW5kCQkJMTE5MQorI2RlZmluZSBfX05SX2Nvbm5lY3QJCQkxMTkyCisjZGVmaW5lIF9fTlJfbGlzdGVuCQkJMTE5MworI2RlZmluZSBfX05SX2FjY2VwdAkJCTExOTQKKyNkZWZpbmUgX19OUl9nZXRzb2NrbmFtZQkJMTE5NQorI2RlZmluZSBfX05SX2dldHBlZXJuYW1lCQkxMTk2CisjZGVmaW5lIF9fTlJfc29ja2V0cGFpcgkJCTExOTcKKyNkZWZpbmUgX19OUl9zZW5kCQkJMTE5OAorI2RlZmluZSBfX05SX3NlbmR0bwkJCTExOTkKKyNkZWZpbmUgX19OUl9yZWN2CQkJMTIwMAorI2RlZmluZSBfX05SX3JlY3Zmcm9tCQkJMTIwMQorI2RlZmluZSBfX05SX3NodXRkb3duCQkJMTIwMgorI2RlZmluZSBfX05SX3NldHNvY2tvcHQJCQkxMjAzCisjZGVmaW5lIF9fTlJfZ2V0c29ja29wdAkJCTEyMDQKKyNkZWZpbmUgX19OUl9zZW5kbXNnCQkJMTIwNQorI2RlZmluZSBfX05SX3JlY3Ztc2cJCQkxMjA2CisjZGVmaW5lIF9fTlJfcGl2b3Rfcm9vdAkJCTEyMDcKKyNkZWZpbmUgX19OUl9taW5jb3JlCQkJMTIwOAorI2RlZmluZSBfX05SX21hZHZpc2UJCQkxMjA5CisjZGVmaW5lIF9fTlJfc3RhdAkJCTEyMTAKKyNkZWZpbmUgX19OUl9sc3RhdAkJCTEyMTEKKyNkZWZpbmUgX19OUl9mc3RhdAkJCTEyMTIKKyNkZWZpbmUgX19OUl9jbG9uZTIJCQkxMjEzCisjZGVmaW5lIF9fTlJfZ2V0ZGVudHM2NAkJCTEyMTQKKyNkZWZpbmUgX19OUl9nZXR1bndpbmQJCQkxMjE1CisjZGVmaW5lIF9fTlJfcmVhZGFoZWFkCQkJMTIxNgorI2RlZmluZSBfX05SX3NldHhhdHRyCQkJMTIxNworI2RlZmluZSBfX05SX2xzZXR4YXR0cgkJCTEyMTgKKyNkZWZpbmUgX19OUl9mc2V0eGF0dHIJCQkxMjE5CisjZGVmaW5lIF9fTlJfZ2V0eGF0dHIJCQkxMjIwCisjZGVmaW5lIF9fTlJfbGdldHhhdHRyCQkJMTIyMQorI2RlZmluZSBfX05SX2ZnZXR4YXR0cgkJCTEyMjIKKyNkZWZpbmUgX19OUl9saXN0eGF0dHIJCQkxMjIzCisjZGVmaW5lIF9fTlJfbGxpc3R4YXR0cgkJCTEyMjQKKyNkZWZpbmUgX19OUl9mbGlzdHhhdHRyCQkJMTIyNQorI2RlZmluZSBfX05SX3JlbW92ZXhhdHRyCQkxMjI2CisjZGVmaW5lIF9fTlJfbHJlbW92ZXhhdHRyCQkxMjI3CisjZGVmaW5lIF9fTlJfZnJlbW92ZXhhdHRyCQkxMjI4CisjZGVmaW5lIF9fTlJfdGtpbGwJCQkxMjI5CisjZGVmaW5lIF9fTlJfZnV0ZXgJCQkxMjMwCisjZGVmaW5lIF9fTlJfc2NoZWRfc2V0YWZmaW5pdHkJCTEyMzEKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRhZmZpbml0eQkJMTIzMgorI2RlZmluZSBfX05SX3NldF90aWRfYWRkcmVzcwkJMTIzMworI2RlZmluZSBfX05SX2ZhZHZpc2U2NAkJCTEyMzQKKyNkZWZpbmUgX19OUl90Z2tpbGwJCQkxMjM1CisjZGVmaW5lIF9fTlJfZXhpdF9ncm91cAkJCTEyMzYKKyNkZWZpbmUgX19OUl9sb29rdXBfZGNvb2tpZQkJMTIzNworI2RlZmluZSBfX05SX2lvX3NldHVwCQkJMTIzOAorI2RlZmluZSBfX05SX2lvX2Rlc3Ryb3kJCQkxMjM5CisjZGVmaW5lIF9fTlJfaW9fZ2V0ZXZlbnRzCQkxMjQwCisjZGVmaW5lIF9fTlJfaW9fc3VibWl0CQkJMTI0MQorI2RlZmluZSBfX05SX2lvX2NhbmNlbAkJCTEyNDIKKyNkZWZpbmUgX19OUl9lcG9sbF9jcmVhdGUJCTEyNDMKKyNkZWZpbmUgX19OUl9lcG9sbF9jdGwJCQkxMjQ0CisjZGVmaW5lIF9fTlJfZXBvbGxfd2FpdAkJCTEyNDUKKyNkZWZpbmUgX19OUl9yZXN0YXJ0X3N5c2NhbGwJCTEyNDYKKyNkZWZpbmUgX19OUl9zZW10aW1lZG9wCQkJMTI0NworI2RlZmluZSBfX05SX3RpbWVyX2NyZWF0ZQkJMTI0OAorI2RlZmluZSBfX05SX3RpbWVyX3NldHRpbWUJCTEyNDkKKyNkZWZpbmUgX19OUl90aW1lcl9nZXR0aW1lCQkxMjUwCisjZGVmaW5lIF9fTlJfdGltZXJfZ2V0b3ZlcnJ1bgkJMTI1MQorI2RlZmluZSBfX05SX3RpbWVyX2RlbGV0ZQkJMTI1MgorI2RlZmluZSBfX05SX2Nsb2NrX3NldHRpbWUJCTEyNTMKKyNkZWZpbmUgX19OUl9jbG9ja19nZXR0aW1lCQkxMjU0CisjZGVmaW5lIF9fTlJfY2xvY2tfZ2V0cmVzCQkxMjU1CisjZGVmaW5lIF9fTlJfY2xvY2tfbmFub3NsZWVwCQkxMjU2CisjZGVmaW5lIF9fTlJfZnN0YXRmczY0CQkJMTI1NworI2RlZmluZSBfX05SX3N0YXRmczY0CQkJMTI1OAorI2RlZmluZSBfX05SX21iaW5kCQkJMTI1OQorI2RlZmluZSBfX05SX2dldF9tZW1wb2xpY3kJCTEyNjAKKyNkZWZpbmUgX19OUl9zZXRfbWVtcG9saWN5CQkxMjYxCisjZGVmaW5lIF9fTlJfbXFfb3BlbgkJCTEyNjIKKyNkZWZpbmUgX19OUl9tcV91bmxpbmsJCQkxMjYzCisjZGVmaW5lIF9fTlJfbXFfdGltZWRzZW5kCQkxMjY0CisjZGVmaW5lIF9fTlJfbXFfdGltZWRyZWNlaXZlCQkxMjY1CisjZGVmaW5lIF9fTlJfbXFfbm90aWZ5CQkJMTI2NgorI2RlZmluZSBfX05SX21xX2dldHNldGF0dHIJCTEyNjcKKyNkZWZpbmUgX19OUl9rZXhlY19sb2FkCQkJMTI2OAorI2RlZmluZSBfX05SX3ZzZXJ2ZXIJCQkxMjY5CisjZGVmaW5lIF9fTlJfd2FpdGlkCQkJMTI3MAorI2RlZmluZSBfX05SX2FkZF9rZXkJCQkxMjcxCisjZGVmaW5lIF9fTlJfcmVxdWVzdF9rZXkJCTEyNzIKKyNkZWZpbmUgX19OUl9rZXljdGwJCQkxMjczCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2RlZmluZSBOUl9zeXNjYWxscwkJCTI1NiAvKiBsZW5ndGggb2Ygc3lzY2FsbCB0YWJsZSAqLworCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19SVF9TSUdBQ1RJT04KKworI2lmZGVmIENPTkZJR19JQTMyX1NVUFBPUlQKKyMgZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19GQURWSVNFNjQKKyMgZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19HRVRQR1JQCisjIGRlZmluZSBfX0FSQ0hfV0FOVF9TWVNfTExTRUVLCisjIGRlZmluZSBfX0FSQ0hfV0FOVF9TWVNfTklDRQorIyBkZWZpbmUgX19BUkNIX1dBTlRfU1lTX09MRF9HRVRSTElNSVQKKyMgZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19PTERVTU9VTlQKKyMgZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdQRU5ESU5HCisjIGRlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUFJPQ01BU0sKKyMgZGVmaW5lIF9fQVJDSF9XQU5UX0NPTVBBVF9TWVNfVElNRQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfX0FTU0VNQkxZX18pICYmICFkZWZpbmVkKEFTU0VNQkxFUikKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisKK2V4dGVybiBsb25nIF9faWE2NF9zeXNjYWxsIChsb25nIGEwLCBsb25nIGExLCBsb25nIGEyLCBsb25nIGEzLCBsb25nIGE0LCBsb25nIG5yKTsKKworI2lmZGVmIF9fS0VSTkVMX1NZU0NBTExTX18KKworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZ2lmeS5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CisKK3N0YXRpYyBpbmxpbmUgbG9uZworb3BlbiAoY29uc3QgY2hhciAqIG5hbWUsIGludCBtb2RlLCBpbnQgZmxhZ3MpCit7CisJcmV0dXJuIHN5c19vcGVuKG5hbWUsIG1vZGUsIGZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSBsb25nCitkdXAgKGludCBmZCkKK3sKKwlyZXR1cm4gc3lzX2R1cChmZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgbG9uZworY2xvc2UgKGludCBmZCkKK3sKKwlyZXR1cm4gc3lzX2Nsb3NlKGZkKTsKK30KKworc3RhdGljIGlubGluZSBvZmZfdAorbHNlZWsgKGludCBmZCwgb2ZmX3Qgb2ZmLCBpbnQgd2hlbmNlKQoreworCXJldHVybiBzeXNfbHNlZWsoZmQsIG9mZiwgd2hlbmNlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitfZXhpdCAoaW50IHZhbHVlKQoreworCXN5c19leGl0KHZhbHVlKTsKK30KKworI2RlZmluZSBleGl0KHgpIF9leGl0KHgpCisKK3N0YXRpYyBpbmxpbmUgbG9uZword3JpdGUgKGludCBmZCwgY29uc3QgY2hhciAqIGJ1Ziwgc2l6ZV90IG5yKQoreworCXJldHVybiBzeXNfd3JpdGUoZmQsIGJ1ZiwgbnIpOworfQorCitzdGF0aWMgaW5saW5lIGxvbmcKK3JlYWQgKGludCBmZCwgY2hhciAqIGJ1Ziwgc2l6ZV90IG5yKQoreworCXJldHVybiBzeXNfcmVhZChmZCwgYnVmLCBucik7Cit9CisKKworc3RhdGljIGlubGluZSBsb25nCitzZXRzaWQgKHZvaWQpCit7CisJcmV0dXJuIHN5c19zZXRzaWQoKTsKK30KKworc3RhdGljIGlubGluZSBwaWRfdAord2FpdHBpZCAoaW50IHBpZCwgaW50ICogd2FpdF9zdGF0LCBpbnQgZmxhZ3MpCit7CisJcmV0dXJuIHN5c193YWl0NChwaWQsIHdhaXRfc3RhdCwgZmxhZ3MsIE5VTEwpOworfQorCisKK2V4dGVybiBpbnQgZXhlY3ZlIChjb25zdCBjaGFyICpmaWxlbmFtZSwgY2hhciAqY29uc3QgYXZbXSwgY2hhciAqY29uc3QgZXBbXSk7CitleHRlcm4gcGlkX3QgY2xvbmUgKHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZvaWQgKnNwKTsKKworI2VuZGlmIC8qIF9fS0VSTkVMX1NZU0NBTExTX18gKi8KKworYXNtbGlua2FnZSB1bnNpZ25lZCBsb25nIHN5c19tbWFwKAorCQkJCXVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sCisJCQkJaW50IHByb3QsIGludCBmbGFncywKKwkJCQlpbnQgZmQsIGxvbmcgb2ZmKTsKK2FzbWxpbmthZ2UgdW5zaWduZWQgbG9uZyBzeXNfbW1hcDIoCisJCQkJdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwKKwkJCQlpbnQgcHJvdCwgaW50IGZsYWdzLAorCQkJCWludCBmZCwgbG9uZyBwZ29mZik7CitzdHJ1Y3QgcHRfcmVnczsKK3N0cnVjdCBzaWdhY3Rpb247Citsb25nIHN5c19leGVjdmUoY2hhciBfX3VzZXIgKmZpbGVuYW1lLCBjaGFyIF9fdXNlciAqIF9fdXNlciAqYXJndiwKKwkJCSAgIGNoYXIgX191c2VyICogX191c2VyICplbnZwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Cithc21saW5rYWdlIGxvbmcgc3lzX3BpcGUodm9pZCk7Cithc21saW5rYWdlIGxvbmcgc3lzX3B0cmFjZShsb25nIHJlcXVlc3QsIHBpZF90IHBpZCwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBkYXRhKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfcnRfc2lnYWN0aW9uKGludCBzaWcsCisJCQkJIGNvbnN0IHN0cnVjdCBzaWdhY3Rpb24gX191c2VyICphY3QsCisJCQkJIHN0cnVjdCBzaWdhY3Rpb24gX191c2VyICpvYWN0LAorCQkJCSBzaXplX3Qgc2lnc2V0c2l6ZSk7CisKKy8qCisgKiAiQ29uZGl0aW9uYWwiIHN5c2NhbGxzCisgKgorICogTm90ZSwgdGhpcyBtYWNybyBjYW4gb25seSBiZSB1c2VkIGluIHRoZSBmaWxlIHdoaWNoIGRlZmluZXMgc3lzX25pX3N5c2NhbGwsIGkuZS4sIGluCisgKiBrZXJuZWwvc3lzX25pLmMuICBUaGlzIHZlcnNpb24gY2F1c2VzIHdhcm5pbmdzIGJlY2F1c2UgdGhlIGRlY2xhcmF0aW9uIGlzbid0IGEKKyAqIHByb3BlciBwcm90b3R5cGUsIGJ1dCB3ZSBjYW4ndCB1c2UgX190eXBlb2ZfXyBlaXRoZXIsIGJlY2F1c2Ugbm90IGFsbCBjb25kX3N5c2NhbGwoKQorICogZGVjbGFyYXRpb25zIGhhdmUgcHJvdG90eXBlcyBhdCB0aGUgbW9tZW50LgorICovCisjZGVmaW5lIGNvbmRfc3lzY2FsbCh4KSBhc21saW5rYWdlIGxvbmcgeCAodm9pZCkgX19hdHRyaWJ1dGVfXygod2VhayxhbGlhcygic3lzX25pX3N5c2NhbGwiKSkpCisKKyNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9BU01fSUE2NF9VTklTVERfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC91bndpbmQuaCBiL2luY2x1ZGUvYXNtLWlhNjQvdW53aW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE0MjZhZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvdW53aW5kLmgKQEAgLTAsMCArMSwyNDAgQEAKKyNpZm5kZWYgX0FTTV9JQTY0X1VOV0lORF9ICisjZGVmaW5lIF9BU01fSUE2NF9VTldJTkRfSAorCisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAsIDIwMDMgSGV3bGV0dC1QYWNrYXJkIENvCisgKglEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+CisgKgorICogQSBzaW1wbGUgQVBJIGZvciB1bndpbmRpbmcga2VybmVsIHN0YWNrcy4gIFRoaXMgaXMgdXNlZCBmb3IKKyAqIGRlYnVnZ2luZyBhbmQgZXJyb3IgcmVwb3J0aW5nIHB1cnBvc2VzLiAgVGhlIGtlcm5lbCBkb2Vzbid0IG5lZWQKKyAqIGZ1bGwtYmxvd24gc3RhY2sgdW53aW5kaW5nIHdpdGggYWxsIHRoZSBiZWxscyBhbmQgd2hpdGxlcywgc28gdGhlcmUKKyAqIGlzIG5vdCBtdWNoIHBvaW50IGluIGltcGxlbWVudGluZyB0aGUgZnVsbCBJQS02NCB1bndpbmQgQVBJICh0aG91Z2gKKyAqIGl0IHdvdWxkIG9mIGNvdXJzZSBiZSBwb3NzaWJsZSB0byBpbXBsZW1lbnQgdGhlIGtlcm5lbCBBUEkgb24gdG9wCisgKiBvZiBpdCkuCisgKi8KKworc3RydWN0IHRhc2tfc3RydWN0OwkvKiBmb3J3YXJkIGRlY2xhcmF0aW9uICovCitzdHJ1Y3Qgc3dpdGNoX3N0YWNrOwkvKiBmb3J3YXJkIGRlY2xhcmF0aW9uICovCisKK2VudW0gdW53X2FwcGxpY2F0aW9uX3JlZ2lzdGVyIHsKKwlVTldfQVJfQlNQLAorCVVOV19BUl9CU1BTVE9SRSwKKwlVTldfQVJfUEZTLAorCVVOV19BUl9STkFULAorCVVOV19BUl9VTkFULAorCVVOV19BUl9MQywKKwlVTldfQVJfRUMsCisJVU5XX0FSX0ZQU1IsCisJVU5XX0FSX1JTQywKKwlVTldfQVJfQ0NWLAorCVVOV19BUl9DU0QsCisJVU5XX0FSX1NTRAorfTsKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgZGVjbGFyYXRpb25zIGFyZSBwcml2YXRlIHRvIHRoZSB1bndpbmQKKyAqIGltcGxlbWVudGF0aW9uOgorICovCisKK3N0cnVjdCB1bndfc3RhY2sgeworCXVuc2lnbmVkIGxvbmcgbGltaXQ7CisJdW5zaWduZWQgbG9uZyB0b3A7Cit9OworCisjZGVmaW5lIFVOV19GTEFHX0lOVEVSUlVQVF9GUkFNRQkoMVVMIDw8IDApCisKKy8qCisgKiBObyB1c2VyIG9mIHRoaXMgbW9kdWxlIHNob3VsZCBldmVyeSBhY2Nlc3MgdGhpcyBzdHJ1Y3R1cmUgZGlyZWN0bHkKKyAqIGFzIGl0IGlzIHN1YmplY3QgdG8gY2hhbmdlLiAgSXQgaXMgZGVjbGFyZWQgaGVyZSBzb2xlbHkgc28gd2UgY2FuCisgKiB1c2UgYXV0b21hdGljIHZhcmlhYmxlcy4KKyAqLworc3RydWN0IHVud19mcmFtZV9pbmZvIHsKKwlzdHJ1Y3QgdW53X3N0YWNrIHJlZ3N0azsKKwlzdHJ1Y3QgdW53X3N0YWNrIG1lbXN0azsKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CisJc2hvcnQgaGludDsKKwlzaG9ydCBwcmV2X3NjcmlwdDsKKworCS8qIGN1cnJlbnQgZnJhbWUgaW5mbzogKi8KKwl1bnNpZ25lZCBsb25nIGJzcDsJCS8qIGJhY2tpbmcgc3RvcmUgcG9pbnRlciB2YWx1ZSAqLworCXVuc2lnbmVkIGxvbmcgc3A7CQkvKiBzdGFjayBwb2ludGVyIHZhbHVlICovCisJdW5zaWduZWQgbG9uZyBwc3A7CQkvKiBwcmV2aW91cyBzcCB2YWx1ZSAqLworCXVuc2lnbmVkIGxvbmcgaXA7CQkvKiBpbnN0cnVjdGlvbiBwb2ludGVyIHZhbHVlICovCisJdW5zaWduZWQgbG9uZyBwcjsJCS8qIGN1cnJlbnQgcHJlZGljYXRlIHZhbHVlcyAqLworCXVuc2lnbmVkIGxvbmcgKmNmbV9sb2M7CQkvKiBjZm0gc2F2ZSBsb2NhdGlvbiAob3IgTlVMTCkgKi8KKwl1bnNpZ25lZCBsb25nIHB0OwkJLyogc3RydWN0IHB0X3JlZ3MgbG9jYXRpb24gKi8KKworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKKwlzdHJ1Y3Qgc3dpdGNoX3N0YWNrICpzdzsKKworCS8qIHByZXNlcnZlZCBzdGF0ZTogKi8KKwl1bnNpZ25lZCBsb25nICpic3BfbG9jOwkJLyogcHJldmlvdXMgYnNwIHNhdmUgbG9jYXRpb24gKi8KKwl1bnNpZ25lZCBsb25nICpic3BzdG9yZV9sb2M7CisJdW5zaWduZWQgbG9uZyAqcGZzX2xvYzsKKwl1bnNpZ25lZCBsb25nICpybmF0X2xvYzsKKwl1bnNpZ25lZCBsb25nICpycF9sb2M7CisJdW5zaWduZWQgbG9uZyAqcHJpX3VuYXRfbG9jOworCXVuc2lnbmVkIGxvbmcgKnVuYXRfbG9jOworCXVuc2lnbmVkIGxvbmcgKnByX2xvYzsKKwl1bnNpZ25lZCBsb25nICpsY19sb2M7CisJdW5zaWduZWQgbG9uZyAqZnBzcl9sb2M7CisJc3RydWN0IHVud19pcmVnIHsKKwkJdW5zaWduZWQgbG9uZyAqbG9jOworCQlzdHJ1Y3QgdW53X2lyZWdfbmF0IHsKKwkJCWxvbmcgdHlwZSA6IDM7CQkJLyogZW51bSB1bndfbmF0X3R5cGUgKi8KKwkJCXNpZ25lZCBsb25nIG9mZiA6IDYxOwkJLyogTmFUIHdvcmQgaXMgYXQgbG9jK25hdC5vZmYgKi8KKwkJfSBuYXQ7CisJfSByNCwgcjUsIHI2LCByNzsKKwl1bnNpZ25lZCBsb25nICpiMV9sb2MsICpiMl9sb2MsICpiM19sb2MsICpiNF9sb2MsICpiNV9sb2M7CisJc3RydWN0IGlhNjRfZnByZWcgKmYyX2xvYywgKmYzX2xvYywgKmY0X2xvYywgKmY1X2xvYywgKmZyX2xvY1sxNl07Cit9OworCisvKgorICogVGhlIG9mZmljaWFsIEFQSSBmb2xsb3dzIGJlbG93OgorICovCisKK3N0cnVjdCB1bndfdGFibGVfZW50cnkgeworCXU2NCBzdGFydF9vZmZzZXQ7CisJdTY0IGVuZF9vZmZzZXQ7CisJdTY0IGluZm9fb2Zmc2V0OworfTsKKworLyoKKyAqIEluaXRpYWxpemUgdW53aW5kIHN1cHBvcnQuCisgKi8KK2V4dGVybiB2b2lkIHVud19pbml0ICh2b2lkKTsKKworZXh0ZXJuIHZvaWQgKnVud19hZGRfdW53aW5kX3RhYmxlIChjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBsb25nIHNlZ21lbnRfYmFzZSwgdW5zaWduZWQgbG9uZyBncCwKKwkJCQkgICBjb25zdCB2b2lkICp0YWJsZV9zdGFydCwgY29uc3Qgdm9pZCAqdGFibGVfZW5kKTsKKworZXh0ZXJuIHZvaWQgdW53X3JlbW92ZV91bndpbmRfdGFibGUgKHZvaWQgKmhhbmRsZSk7CisKKy8qCisgKiBQcmVwYXJlIHRvIHVud2luZCBibG9ja2VkIHRhc2sgdC4KKyAqLworZXh0ZXJuIHZvaWQgdW53X2luaXRfZnJvbV9ibG9ja2VkX3Rhc2sgKHN0cnVjdCB1bndfZnJhbWVfaW5mbyAqaW5mbywgc3RydWN0IHRhc2tfc3RydWN0ICp0KTsKKworLyoKKyAqIFByZXBhcmUgdG8gdW53aW5kIGZyb20gaW50ZXJydXB0aW9uLiAgVGhlIHB0LXJlZ3MgYW5kIHN3aXRjaC1zdGFjayBzdHJ1Y3R1cmVzIG11c3QgaGF2ZQorICogYmUgImFkamFjZW50IiAobm8gc3RhdGUgbW9kaWZpY2F0aW9ucyBiZXR3ZWVuIHB0LXJlZ3MgYW5kIHN3aXRjaC1zdGFjaykuCisgKi8KK2V4dGVybiB2b2lkIHVud19pbml0X2Zyb21faW50ZXJydXB0aW9uIChzdHJ1Y3QgdW53X2ZyYW1lX2luZm8gKmluZm8sIHN0cnVjdCB0YXNrX3N0cnVjdCAqdCwKKwkJCQkJc3RydWN0IHB0X3JlZ3MgKnB0LCBzdHJ1Y3Qgc3dpdGNoX3N0YWNrICpzdyk7CisKK2V4dGVybiB2b2lkIHVud19pbml0X2ZyYW1lX2luZm8gKHN0cnVjdCB1bndfZnJhbWVfaW5mbyAqaW5mbywgc3RydWN0IHRhc2tfc3RydWN0ICp0LAorCQkJCSBzdHJ1Y3Qgc3dpdGNoX3N0YWNrICpzdyk7CisKKy8qCisgKiBQcmVwYXJlIHRvIHVud2luZCB0aGUgY3VycmVudGx5IHJ1bm5pbmcgdGhyZWFkLgorICovCitleHRlcm4gdm9pZCB1bndfaW5pdF9ydW5uaW5nICh2b2lkICgqY2FsbGJhY2spKHN0cnVjdCB1bndfZnJhbWVfaW5mbyAqaW5mbywgdm9pZCAqYXJnKSwgdm9pZCAqYXJnKTsKKworLyoKKyAqIFVud2luZCB0byBwcmV2aW91cyB0byBmcmFtZS4gIFJldHVybnMgMCBpZiBzdWNjZXNzZnVsLCBuZWdhdGl2ZQorICogbnVtYmVyIGluIGNhc2Ugb2YgYW4gZXJyb3IuCisgKi8KK2V4dGVybiBpbnQgdW53X3Vud2luZCAoc3RydWN0IHVud19mcmFtZV9pbmZvICppbmZvKTsKKworLyoKKyAqIFVud2luZCB1bnRpbCB0aGUgcmV0dXJuIHBvaW50ZXIgaXMgaW4gdXNlci1sYW5kIChvciB1bnRpbCBhbiBlcnJvcgorICogb2NjdXJzKS4gIFJldHVybnMgMCBpZiBzdWNjZXNzZnVsLCBuZWdhdGl2ZSBudW1iZXIgaW4gY2FzZSBvZgorICogZXJyb3IuCisgKi8KK2V4dGVybiBpbnQgdW53X3Vud2luZF90b191c2VyIChzdHJ1Y3QgdW53X2ZyYW1lX2luZm8gKmluZm8pOworCisjZGVmaW5lIHVud19pc19pbnRyX2ZyYW1lKGluZm8pCSgoKGluZm8pLT5mbGFncyAmIFVOV19GTEFHX0lOVEVSUlVQVF9GUkFNRSkgIT0gMCkKKworc3RhdGljIGlubGluZSBpbnQKK3Vud19nZXRfaXAgKHN0cnVjdCB1bndfZnJhbWVfaW5mbyAqaW5mbywgdW5zaWduZWQgbG9uZyAqdmFscCkKK3sKKwkqdmFscCA9IChpbmZvKS0+aXA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50Cit1bndfZ2V0X3NwIChzdHJ1Y3QgdW53X2ZyYW1lX2luZm8gKmluZm8sIHVuc2lnbmVkIGxvbmcgKnZhbHApCit7CisJKnZhbHAgPSAoaW5mbyktPnNwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludAordW53X2dldF9wc3AgKHN0cnVjdCB1bndfZnJhbWVfaW5mbyAqaW5mbywgdW5zaWduZWQgbG9uZyAqdmFscCkKK3sKKwkqdmFscCA9IChpbmZvKS0+cHNwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludAordW53X2dldF9ic3AgKHN0cnVjdCB1bndfZnJhbWVfaW5mbyAqaW5mbywgdW5zaWduZWQgbG9uZyAqdmFscCkKK3sKKwkqdmFscCA9IChpbmZvKS0+YnNwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludAordW53X2dldF9jZm0gKHN0cnVjdCB1bndfZnJhbWVfaW5mbyAqaW5mbywgdW5zaWduZWQgbG9uZyAqdmFscCkKK3sKKwkqdmFscCA9ICooaW5mbyktPmNmbV9sb2M7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50Cit1bndfc2V0X2NmbSAoc3RydWN0IHVud19mcmFtZV9pbmZvICppbmZvLCB1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwkqKGluZm8pLT5jZm1fbG9jID0gdmFsOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludAordW53X2dldF9ycCAoc3RydWN0IHVud19mcmFtZV9pbmZvICppbmZvLCB1bnNpZ25lZCBsb25nICp2YWwpCit7CisJaWYgKCFpbmZvLT5ycF9sb2MpCisJCXJldHVybiAtMTsKKwkqdmFsID0gKmluZm8tPnJwX2xvYzsKKwlyZXR1cm4gMDsKK30KKworZXh0ZXJuIGludCB1bndfYWNjZXNzX2dyIChzdHJ1Y3QgdW53X2ZyYW1lX2luZm8gKiwgaW50LCB1bnNpZ25lZCBsb25nICosIGNoYXIgKiwgaW50KTsKK2V4dGVybiBpbnQgdW53X2FjY2Vzc19iciAoc3RydWN0IHVud19mcmFtZV9pbmZvICosIGludCwgdW5zaWduZWQgbG9uZyAqLCBpbnQpOworZXh0ZXJuIGludCB1bndfYWNjZXNzX2ZyIChzdHJ1Y3QgdW53X2ZyYW1lX2luZm8gKiwgaW50LCBzdHJ1Y3QgaWE2NF9mcHJlZyAqLCBpbnQpOworZXh0ZXJuIGludCB1bndfYWNjZXNzX2FyIChzdHJ1Y3QgdW53X2ZyYW1lX2luZm8gKiwgaW50LCB1bnNpZ25lZCBsb25nICosIGludCk7CitleHRlcm4gaW50IHVud19hY2Nlc3NfcHIgKHN0cnVjdCB1bndfZnJhbWVfaW5mbyAqLCB1bnNpZ25lZCBsb25nICosIGludCk7CisKK3N0YXRpYyBpbmxpbmUgaW50Cit1bndfc2V0X2dyIChzdHJ1Y3QgdW53X2ZyYW1lX2luZm8gKmksIGludCBuLCB1bnNpZ25lZCBsb25nIHYsIGNoYXIgbmF0KQoreworCXJldHVybiB1bndfYWNjZXNzX2dyKGksIG4sICZ2LCAmbmF0LCAxKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3Vud19zZXRfYnIgKHN0cnVjdCB1bndfZnJhbWVfaW5mbyAqaSwgaW50IG4sIHVuc2lnbmVkIGxvbmcgdikKK3sKKwlyZXR1cm4gdW53X2FjY2Vzc19icihpLCBuLCAmdiwgMSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50Cit1bndfc2V0X2ZyIChzdHJ1Y3QgdW53X2ZyYW1lX2luZm8gKmksIGludCBuLCBzdHJ1Y3QgaWE2NF9mcHJlZyB2KQoreworCXJldHVybiB1bndfYWNjZXNzX2ZyKGksIG4sICZ2LCAxKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3Vud19zZXRfYXIgKHN0cnVjdCB1bndfZnJhbWVfaW5mbyAqaSwgaW50IG4sIHVuc2lnbmVkIGxvbmcgdikKK3sKKwlyZXR1cm4gdW53X2FjY2Vzc19hcihpLCBuLCAmdiwgMSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50Cit1bndfc2V0X3ByIChzdHJ1Y3QgdW53X2ZyYW1lX2luZm8gKmksIHVuc2lnbmVkIGxvbmcgdikKK3sKKwlyZXR1cm4gdW53X2FjY2Vzc19wcihpLCAmdiwgMSk7Cit9CisKKyNkZWZpbmUgdW53X2dldF9ncihpLG4sdixuYXQpCXVud19hY2Nlc3NfZ3IoaSxuLHYsbmF0LDApCisjZGVmaW5lIHVud19nZXRfYnIoaSxuLHYpCXVud19hY2Nlc3NfYnIoaSxuLHYsMCkKKyNkZWZpbmUgdW53X2dldF9mcihpLG4sdikJdW53X2FjY2Vzc19mcihpLG4sdiwwKQorI2RlZmluZSB1bndfZ2V0X2FyKGksbix2KQl1bndfYWNjZXNzX2FyKGksbix2LDApCisjZGVmaW5lIHVud19nZXRfcHIoaSx2KQkJdW53X2FjY2Vzc19wcihpLHYsMCkKKworI2VuZGlmIC8qIF9BU01fVU5XSU5EX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvdXNlci5oIGIvaW5jbHVkZS9hc20taWE2NC91c2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhlNWEyMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvdXNlci5oCkBAIC0wLDAgKzEsNTggQEAKKyNpZm5kZWYgX0FTTV9JQTY0X1VTRVJfSAorI2RlZmluZSBfQVNNX0lBNjRfVVNFUl9ICisKKy8qCisgKiBDb3JlIGZpbGUgZm9ybWF0OiBUaGUgY29yZSBmaWxlIGlzIHdyaXR0ZW4gaW4gc3VjaCBhIHdheSB0aGF0IGdkYgorICogY2FuIHVuZGVyc3RhbmQgaXQgYW5kIHByb3ZpZGUgdXNlZnVsIGluZm9ybWF0aW9uIHRvIHRoZSB1c2VyICh1bmRlcgorICogbGludXggd2UgdXNlIHRoZSBgdHJhZC1jb3JlJyBiZmQpLiAgVGhlIGZpbGUgY29udGVudHMgYXJlIGFzCisgKiBmb2xsb3dzOgorICoKKyAqICB1cGFnZTogMSBwYWdlIGNvbnNpc3Rpbmcgb2YgYSB1c2VyIHN0cnVjdCB0aGF0IHRlbGxzIGdkYgorICoJd2hhdCBpcyBwcmVzZW50IGluIHRoZSBmaWxlLiAgRGlyZWN0bHkgYWZ0ZXIgdGhpcyBpcyBhCisgKgljb3B5IG9mIHRoZSB0YXNrX3N0cnVjdCwgd2hpY2ggaXMgY3VycmVudGx5IG5vdCB1c2VkIGJ5IGdkYiwKKyAqCWJ1dCBpdCBtYXkgY29tZSBpbiBoYW5keSBhdCBzb21lIHBvaW50LiAgQWxsIG9mIHRoZSByZWdpc3RlcnMKKyAqCWFyZSBzdG9yZWQgYXMgcGFydCBvZiB0aGUgdXBhZ2UuICBUaGUgdXBhZ2Ugc2hvdWxkIGFsd2F5cyBiZQorICoJb25seSBvbmUgcGFnZSBsb25nLgorICogIGRhdGE6IFRoZSBkYXRhIHNlZ21lbnQgZm9sbG93cyBuZXh0LiAgV2UgdXNlIGN1cnJlbnQtPmVuZF90ZXh0IHRvCisgKgljdXJyZW50LT5icmsgdG8gcGljayB1cCBhbGwgb2YgdGhlIHVzZXIgdmFyaWFibGVzLCBwbHVzIGFueSBtZW1vcnkKKyAqCXRoYXQgbWF5IGhhdmUgYmVlbiBzYnJrJ2VkLiAgTm8gYXR0ZW1wdCBpcyBtYWRlIHRvIGRldGVybWluZSBpZiBhCisgKglwYWdlIGlzIGRlbWFuZC16ZXJvIG9yIGlmIGEgcGFnZSBpcyB0b3RhbGx5IHVudXNlZCwgd2UganVzdCBjb3ZlcgorICoJdGhlIGVudGlyZSByYW5nZS4gIEFsbCBvZiB0aGUgYWRkcmVzc2VzIGFyZSByb3VuZGVkIGluIHN1Y2ggYSB3YXkKKyAqCXRoYXQgYW4gaW50ZWdyYWwgbnVtYmVyIG9mIHBhZ2VzIGlzIHdyaXR0ZW4uCisgKiAgc3RhY2s6IFdlIG5lZWQgdGhlIHN0YWNrIGluZm9ybWF0aW9uIGluIG9yZGVyIHRvIGdldCBhIG1lYW5pbmdmdWwKKyAqCWJhY2t0cmFjZS4gIFdlIG5lZWQgdG8gd3JpdGUgdGhlIGRhdGEgZnJvbSB1c3AgdG8KKyAqCWN1cnJlbnQtPnN0YXJ0X3N0YWNrLCBzbyB3ZSByb3VuZCBlYWNoIG9mIHRoZXNlIGluIG9yZGVyIHRvIGJlIGFibGUKKyAqCXRvIHdyaXRlIGFuIGludGVnZXIgbnVtYmVyIG9mIHBhZ2VzLgorICoKKyAqIE1vZGlmaWVkIDE5OTgsIDE5OTksIDIwMDEKKyAqCURhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4sIEhld2xldHQtUGFja2FyZCBDbworICovCisKKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKworI2RlZmluZSBFRl9TSVpFCQkzMDcyCS8qIFhYWCBmaXggbWUgKi8KKworc3RydWN0IHVzZXIgeworCXVuc2lnbmVkIGxvbmcJcmVnc1tFRl9TSVpFLzgrMzJdOwkvKiBpbnRlZ2VyIGFuZCBmcCByZWdzICovCisJc2l6ZV90CQl1X3RzaXplOwkJLyogdGV4dCBzaXplIChwYWdlcykgKi8KKwlzaXplX3QJCXVfZHNpemU7CQkvKiBkYXRhIHNpemUgKHBhZ2VzKSAqLworCXNpemVfdAkJdV9zc2l6ZTsJCS8qIHN0YWNrIHNpemUgKHBhZ2VzKSAqLworCXVuc2lnbmVkIGxvbmcJc3RhcnRfY29kZTsJCS8qIHRleHQgc3RhcnRpbmcgYWRkcmVzcyAqLworCXVuc2lnbmVkIGxvbmcJc3RhcnRfZGF0YTsJCS8qIGRhdGEgc3RhcnRpbmcgYWRkcmVzcyAqLworCXVuc2lnbmVkIGxvbmcJc3RhcnRfc3RhY2s7CQkvKiBzdGFjayBzdGFydGluZyBhZGRyZXNzICovCisJbG9uZyBpbnQJc2lnbmFsOwkJCS8qIHNpZ25hbCBjYXVzaW5nIGNvcmUgZHVtcCAqLworCXN0cnVjdCByZWdzICoJdV9hcjA7CQkJLyogaGVscCBnZGIgZmluZCByZWdpc3RlcnMgKi8KKwl1bnNpZ25lZCBsb25nCW1hZ2ljOwkJCS8qIGlkZW50aWZpZXMgYSBjb3JlIGZpbGUgKi8KKwljaGFyCQl1X2NvbW1bMzJdOwkJLyogdXNlciBjb21tYW5kIG5hbWUgKi8KK307CisKKyNkZWZpbmUgTkJQRwkJCVBBR0VfU0laRQorI2RlZmluZSBVUEFHRVMJCQkxCisjZGVmaW5lIEhPU1RfVEVYVF9TVEFSVF9BRERSCSh1LnN0YXJ0X2NvZGUpCisjZGVmaW5lIEhPU1RfREFUQV9TVEFSVF9BRERSCSh1LnN0YXJ0X2RhdGEpCisjZGVmaW5lIEhPU1RfU1RBQ0tfRU5EX0FERFIJKHUuc3RhcnRfc3RhY2sgKyB1LnVfc3NpemUgKiBOQlBHKQorCisjZW5kaWYgLyogX0FTTV9JQTY0X1VTRVJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC91c3RhY2suaCBiL2luY2x1ZGUvYXNtLWlhNjQvdXN0YWNrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE1NWM5MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvdXN0YWNrLmgKQEAgLTAsMCArMSwxNiBAQAorI2lmbmRlZiBfQVNNX0lBNjRfVVNUQUNLX0gKKyNkZWZpbmUgX0FTTV9JQTY0X1VTVEFDS19ICisKKy8qCisgKiBDb25zdGFudHMgZm9yIHRoZSB1c2VyIHN0YWNrIHNpemUKKyAqLworCisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKworLyogVGhlIGFic29sdXRlIGhhcmQgbGltaXQgZm9yIHN0YWNrIHNpemUgaXMgMS8yIG9mIHRoZSBtYXBwYWJsZSBzcGFjZSBpbiB0aGUgcmVnaW9uICovCisjZGVmaW5lIE1BWF9VU0VSX1NUQUNLX1NJWkUJKFJHTl9NQVBfTElNSVQvMikKKy8qIE1ha2UgYSBkZWZhdWx0IHN0YWNrIHNpemUgb2YgMkdCICovCisjZGVmaW5lIERFRkFVTFRfVVNFUl9TVEFDS19TSVpFCSgxVUwgPDwgMzEpCisjZGVmaW5lIFNUQUNLX1RPUAkJKDB4NjAwMDAwMDAwMDAwMDAwMFVMICsgUkdOX01BUF9MSU1JVCkKKworI2VuZGlmIC8qIF9BU01fSUE2NF9VU1RBQ0tfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC92Z2EuaCBiL2luY2x1ZGUvYXNtLWlhNjQvdmdhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY0NDZkNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvdmdhLmgKQEAgLTAsMCArMSwyMiBAQAorLyoKKyAqCUFjY2VzcyB0byBWR0EgdmlkZW9yYW0KKyAqCisgKgkoYykgMTk5OCBNYXJ0aW4gTWFyZXMgPG1qQHVjdy5jej4KKyAqCShjKSAxOTk5IEFzaXQgTWFsbGljayA8YXNpdC5rLm1hbGxpY2tAaW50ZWwuY29tPgorICoJKGMpIDE5OTkgRG9uIER1Z2dlciA8ZG9uLmR1Z2dlckBpbnRlbC5jb20+CisgKi8KKworI2lmbmRlZiBfX0FTTV9JQTY0X1ZHQV9IXworI2RlZmluZSBfX0FTTV9JQTY0X1ZHQV9IXworCisvKgorICogT24gdGhlIFBDLCB3ZSBjYW4ganVzdCByZWNhbGN1bGF0ZSBhZGRyZXNzZXMgYW5kIHRoZW4gYWNjZXNzIHRoZQorICogdmlkZW9yYW0gZGlyZWN0bHkgd2l0aG91dCBhbnkgYmxhY2sgbWFnaWMuCisgKi8KKworI2RlZmluZSBWR0FfTUFQX01FTSh4KQkoKHVuc2lnbmVkIGxvbmcpIGlvcmVtYXAoKHgpLCAwKSkKKworI2RlZmluZSB2Z2FfcmVhZGIoeCkJKCooeCkpCisjZGVmaW5lIHZnYV93cml0ZWIoeCx5KQkoKih5KSA9ICh4KSkKKworI2VuZGlmIC8qIF9fQVNNX0lBNjRfVkdBX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3hvci5oIGIvaW5jbHVkZS9hc20taWE2NC94b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWZiODc0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taWE2NC94b3IuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogaW5jbHVkZS9hc20taWE2NC94b3IuaAorICoKKyAqIE9wdGltaXplZCBSQUlELTUgY2hlY2tzdW1taW5nIGZ1bmN0aW9ucyBmb3IgSUEtNjQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogKGZvciBleGFtcGxlIC91c3Ivc3JjL2xpbnV4L0NPUFlJTkcpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisKK2V4dGVybiB2b2lkIHhvcl9pYTY0XzIodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyAqLCB1bnNpZ25lZCBsb25nICopOworZXh0ZXJuIHZvaWQgeG9yX2lhNjRfMyh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nICosIHVuc2lnbmVkIGxvbmcgKiwKKwkJICAgICAgIHVuc2lnbmVkIGxvbmcgKik7CitleHRlcm4gdm9pZCB4b3JfaWE2NF80KHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcgKiwgdW5zaWduZWQgbG9uZyAqLAorCQkgICAgICAgdW5zaWduZWQgbG9uZyAqLCB1bnNpZ25lZCBsb25nICopOworZXh0ZXJuIHZvaWQgeG9yX2lhNjRfNSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nICosIHVuc2lnbmVkIGxvbmcgKiwKKwkJICAgICAgIHVuc2lnbmVkIGxvbmcgKiwgdW5zaWduZWQgbG9uZyAqLCB1bnNpZ25lZCBsb25nICopOworCitzdGF0aWMgc3RydWN0IHhvcl9ibG9ja190ZW1wbGF0ZSB4b3JfYmxvY2tfaWE2NCA9IHsKKwkubmFtZSA9CSJpYTY0IiwKKwkuZG9fMiA9CXhvcl9pYTY0XzIsCisJLmRvXzMgPQl4b3JfaWE2NF8zLAorCS5kb180ID0JeG9yX2lhNjRfNCwKKwkuZG9fNSA9CXhvcl9pYTY0XzUsCit9OworCisjZGVmaW5lIFhPUl9UUllfVEVNUExBVEVTCXhvcl9zcGVlZCgmeG9yX2Jsb2NrX2lhNjQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL2Eub3V0LmggYi9pbmNsdWRlL2FzbS1tMzJyL2Eub3V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDYxOWJhNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvYS5vdXQuaApAQCAtMCwwICsxLDI4IEBACisjaWZuZGVmIF9BU01fTTMyUl9BX09VVF9ICisjZGVmaW5lIF9BU01fTTMyUl9BX09VVF9ICisKKy8qIG9yaWcgOiBpMzg2IDIuNC4xOCAqLworCitzdHJ1Y3QgZXhlYworeworICB1bnNpZ25lZCBsb25nIGFfaW5mbzsJCS8qIFVzZSBtYWNyb3MgTl9NQUdJQywgZXRjIGZvciBhY2Nlc3MgKi8KKyAgdW5zaWduZWQgYV90ZXh0OwkJLyogbGVuZ3RoIG9mIHRleHQsIGluIGJ5dGVzICovCisgIHVuc2lnbmVkIGFfZGF0YTsJCS8qIGxlbmd0aCBvZiBkYXRhLCBpbiBieXRlcyAqLworICB1bnNpZ25lZCBhX2JzczsJCS8qIGxlbmd0aCBvZiB1bmluaXRpYWxpemVkIGRhdGEgYXJlYSBmb3IgZmlsZSwgaW4gYnl0ZXMgKi8KKyAgdW5zaWduZWQgYV9zeW1zOwkJLyogbGVuZ3RoIG9mIHN5bWJvbCB0YWJsZSBkYXRhIGluIGZpbGUsIGluIGJ5dGVzICovCisgIHVuc2lnbmVkIGFfZW50cnk7CQkvKiBzdGFydCBhZGRyZXNzICovCisgIHVuc2lnbmVkIGFfdHJzaXplOwkJLyogbGVuZ3RoIG9mIHJlbG9jYXRpb24gaW5mbyBmb3IgdGV4dCwgaW4gYnl0ZXMgKi8KKyAgdW5zaWduZWQgYV9kcnNpemU7CQkvKiBsZW5ndGggb2YgcmVsb2NhdGlvbiBpbmZvIGZvciBkYXRhLCBpbiBieXRlcyAqLworfTsKKworI2RlZmluZSBOX1RSU0laRShhKQkoKGEpLmFfdHJzaXplKQorI2RlZmluZSBOX0RSU0laRShhKQkoKGEpLmFfZHJzaXplKQorI2RlZmluZSBOX1NZTVNJWkUoYSkJKChhKS5hX3N5bXMpCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNkZWZpbmUgU1RBQ0tfVE9QCVRBU0tfU0laRQorCisjZW5kaWYKKworI2VuZGlmIC8qIF9BU01fTTMyUl9BX09VVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL2FkZHJzcGFjZS5oIGIvaW5jbHVkZS9hc20tbTMyci9hZGRyc3BhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmE4M2RjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTMyci9hZGRyc3BhY2UuaApAQCAtMCwwICsxLDU4IEBACisvKiAkSWQkICovCisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAxIGJ5IEhpcm95dWtpIEtvbmRvCisgKgorICogRGVmaXRpb25zIGZvciB0aGUgYWRkcmVzcyBzcGFjZXMgb2YgdGhlIE0zMlIgQ1BVcy4KKyAqLworI2lmbmRlZiBfX0FTTV9NMzJSX0FERFJTUEFDRV9ICisjZGVmaW5lIF9fQVNNX00zMlJfQUREUlNQQUNFX0gKKworLyoKKyAqIE1lbW9yeSBzZWdtZW50cyAoMzJiaXQga2VybmVsIG1vZGUgYWRkcmVzc2VzKQorICovCisjZGVmaW5lIEtVU0VHICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgS1NFRzAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBLU0VHMSAgICAgICAgICAgICAgICAgICAweGEwMDAwMDAwCisjZGVmaW5lIEtTRUcyICAgICAgICAgICAgICAgICAgIDB4YzAwMDAwMDAKKyNkZWZpbmUgS1NFRzMgICAgICAgICAgICAgICAgICAgMHhlMDAwMDAwMAorCisjZGVmaW5lIEswQkFTRSAgS1NFRzAKKworLyoKKyAqIFJldHVybnMgdGhlIGtlcm5lbCBzZWdtZW50IGJhc2Ugb2YgYSBnaXZlbiBhZGRyZXNzCisgKi8KKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjZGVmaW5lIEtTRUdYKGEpICAgICAgICAgICAgICAgICgoKHVuc2lnbmVkIGxvbmcpKGEpKSAmIDB4ZTAwMDAwMDApCisjZWxzZQorI2RlZmluZSBLU0VHWChhKSAgICAgICAgICAgICAgICAoKGEpICYgMHhlMDAwMDAwMCkKKyNlbmRpZgorCisvKgorICogUmV0dXJucyB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiBhIEtTRUcwL0tTRUcxIGFkZHJlc3MKKyAqLworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNkZWZpbmUgUEhZU0FERFIoYSkJCSgoKHVuc2lnbmVkIGxvbmcpKGEpKSAmIDB4MWZmZmZmZmYpCisjZWxzZQorI2RlZmluZSBQSFlTQUREUihhKQkJKChhKSAmIDB4MWZmZmZmZmYpCisjZW5kaWYKKworLyoKKyAqIE1hcCBhbiBhZGRyZXNzIHRvIGEgY2VydGFpbiBrZXJuZWwgc2VnbWVudAorICovCisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2RlZmluZSBLU0VHMEFERFIoYSkJCSgoX190eXBlb2ZfXyhhKSkoKCh1bnNpZ25lZCBsb25nKShhKSAmIDB4MWZmZmZmZmYpIHwgS1NFRzApKQorI2RlZmluZSBLU0VHMUFERFIoYSkJCSgoX190eXBlb2ZfXyhhKSkoKCh1bnNpZ25lZCBsb25nKShhKSAmIDB4MWZmZmZmZmYpIHwgS1NFRzEpKQorI2RlZmluZSBLU0VHMkFERFIoYSkJCSgoX190eXBlb2ZfXyhhKSkoKCh1bnNpZ25lZCBsb25nKShhKSAmIDB4MWZmZmZmZmYpIHwgS1NFRzIpKQorI2RlZmluZSBLU0VHM0FERFIoYSkJCSgoX190eXBlb2ZfXyhhKSkoKCh1bnNpZ25lZCBsb25nKShhKSAmIDB4MWZmZmZmZmYpIHwgS1NFRzMpKQorI2Vsc2UKKyNkZWZpbmUgS1NFRzBBRERSKGEpCQkoKChhKSAmIDB4MWZmZmZmZmYpIHwgS1NFRzApCisjZGVmaW5lIEtTRUcxQUREUihhKQkJKCgoYSkgJiAweDFmZmZmZmZmKSB8IEtTRUcxKQorI2RlZmluZSBLU0VHMkFERFIoYSkJCSgoKGEpICYgMHgxZmZmZmZmZikgfCBLU0VHMikKKyNkZWZpbmUgS1NFRzNBRERSKGEpCQkoKChhKSAmIDB4MWZmZmZmZmYpIHwgS1NFRzMpCisjZW5kaWYKKworI2VuZGlmIC8qIF9fQVNNX00zMlJfQUREUlNQQUNFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvYXNzZW1ibGVyLmggYi9pbmNsdWRlL2FzbS1tMzJyL2Fzc2VtYmxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxZGZmOWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL2Fzc2VtYmxlci5oCkBAIC0wLDAgKzEsMjI1IEBACisjaWZuZGVmIF9BU01fTTMyUl9BU1NFTUJMRVJfSAorI2RlZmluZSBfQVNNX00zMlJfQVNTRU1CTEVSX0gKKworLyoKKyAqIGxpbnV4L2FzbS1tMzJyL2Fzc2VtYmxlci5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0ICBIaXJva2F6dSBUYWthdGEgPHRha2F0YSBhdCBsaW51eC1tMzJyLm9yZz4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgTTMyUiBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgbWFjcm8gZGVmaW5pdGlvbnMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjaWZuZGVmIF9fU1RSCisjaWZkZWYgX19BU1NFTUJMWV9fCisjZGVmaW5lIF9fU1RSKHgpIHgKKyNlbHNlCisjZGVmaW5lIF9fU1RSKHgpICN4CisjZW5kaWYKKyNlbmRpZiAvKiBfX1NUUiAqLworCisjaWZkZWYgQ09ORklHX1NNUAorI2RlZmluZSBNMzJSX0xPQ0sJX19TVFIobG9jaykKKyNkZWZpbmUgTTMyUl9VTkxPQ0sJX19TVFIodW5sb2NrKQorI2Vsc2UKKyNkZWZpbmUgTTMyUl9MT0NLCV9fU1RSKGxkKQorI2RlZmluZSBNMzJSX1VOTE9DSwlfX1NUUihzdCkKKyNlbmRpZgorCisjaWZkZWYgX19BU1NFTUJMWV9fCisjdW5kZWYgRU5UUlkKKyNkZWZpbmUgRU5UUlkobmFtZSkgRU5UUllfTSBuYW1lCisJLm1hY3JvICBFTlRSWV9NIG5hbWUKKwkuZ2xvYmFsIFxuYW1lCisJQUxJR04KK1xuYW1lOgorCS5lbmRtCisjZW5kaWYKKworCisvKioKKyAqIExESU1NIC0gbG9hZCBpbW1lZGlhdGUgdmFsdWUKKyAqIFNUSSAtIGVuYWJsZSBpbnRlcnJ1cHRpb24KKyAqIENMSSAtIGRpc2FibGUgaW50ZXJydXB0aW9uCisgKi8KKworI2lmZGVmIF9fQVNTRU1CTFlfXworCisjZGVmaW5lIExESU1NKHJlZyx4KSBMRElNTSByZWcgeAorCS5tYWNybyBMRElNTSByZWcgeAorCXNldGgJXHJlZywgI2hpZ2goXHgpCisJb3IzCVxyZWcsIFxyZWcsICNsb3coXHgpCisJLmVuZG0KKworI2lmICFkZWZpbmVkKENPTkZJR19DSElQX00zMjEwMikKKyNkZWZpbmUgU1RJKHJlZykgU1RJX00gcmVnCisJLm1hY3JvIFNUSV9NIHJlZworCXNldHBzdyAgIzB4NDAJICAgIC0+CW5vcAorCTsgV09SS0FST1VORDogIi0+IG5vcCIgaXMgYSB3b3JrYXJvdW5kIGZvciB0aGUgTTMyNzAwKFRTMSkuCisJLmVuZG0KKworI2RlZmluZSBDTEkocmVnKSBDTElfTSByZWcKKwkubWFjcm8gQ0xJX00gcmVnCisJY2xycHN3ICAjMHg0MAkgICAgLT4Jbm9wCisJOyBXT1JLQVJPVU5EOiAiLT4gbm9wIiBpcyBhIHdvcmthcm91bmQgZm9yIHRoZSBNMzI3MDAoVFMxKS4KKwkuZW5kbQorI2Vsc2UJLyogQ09ORklHX0NISVBfTTMyMTAyICovCisjZGVmaW5lIFNUSShyZWcpIFNUSV9NIHJlZworCS5tYWNybyBTVElfTSByZWcKKwltdmZjCVxyZWcsIHBzdworCW9yMwlccmVnLCBccmVnLCAjMHgwMDQwCisJbXZ0YwlccmVnLCBwc3cKKwkuZW5kbQorCisjZGVmaW5lIENMSShyZWcpIENMSV9NIHJlZworCS5tYWNybyBDTElfTSByZWcKKwltdmZjCVxyZWcsIHBzdworCWFuZDMJXHJlZywgXHJlZywgIzB4ZmZiZgorCW12dGMJXHJlZywgcHN3CisJLmVuZG0KKyNlbmRpZgkvKiBDT05GSUdfQ0hJUF9NMzIxMDIgKi8KKworCS5tYWNybwlTQVZFX0FMTAorCXB1c2gJcjAJCTsgb3JpZ19yMAorCXB1c2gJc3AJCTsgc3BpIChyMTUpCisJcHVzaAlscgkJOyByMTQKKwlwdXNoCXIxMworCW12ZmMJcjEzLCBjcjMJOyBzcHUKKwlwdXNoCXIxMworCW12ZmMJcjEzLCBiYnBjCisJcHVzaAlyMTMKKwltdmZjCXIxMywgYmJwc3cKKwlwdXNoCXIxMworCW12ZmMJcjEzLCBicGMKKwlwdXNoCXIxMworCW12ZmMJcjEzLCBwc3cKKwlwdXNoCXIxMworI2lmIGRlZmluZWQoQ09ORklHX0lTQV9NMzJSMikgJiYgZGVmaW5lZChDT05GSUdfSVNBX0RTUF9MRVZFTDIpCisJbXZmYWNsbwlyMTMsIGExCisJcHVzaAlyMTMKKwltdmZhY2hpIHIxMywgYTEKKwlwdXNoCXIxMworCW12ZmFjbG8JcjEzLCBhMAorCXB1c2gJcjEzCisJbXZmYWNoaQlyMTMsIGEwCisJcHVzaAlyMTMKKyNlbGlmIGRlZmluZWQoQ09ORklHX0lTQV9NMzJSMikgfHwgZGVmaW5lZChDT05GSUdfSVNBX00zMlIpCisJbXZmYWNsbwlyMTMKKwlwdXNoCXIxMworCW12ZmFjaGkJcjEzCisJcHVzaAlyMTMKKyNlbHNlCisjZXJyb3IgdW5rbm93biBpc2EgY29uZmlndXJhdGlvbgorI2VuZGlmCisJbGRpCXIxMywgIy0xCisJcHVzaAlyMTMJCTsgc3lzY2FsbF9uciAoZGVmYXVsdDogLTEpCisJcHVzaAlyMTIKKwlwdXNoCXIxMQorCXB1c2gJcjEwCisJcHVzaAlyOQorCXB1c2gJcjgKKwlwdXNoCXI3CisJcHVzaAlyMworCXB1c2gJcjIKKwlwdXNoCXIxCisJcHVzaAlyMAorCWFkZGkJc3AsICMtNAkJOyByb29tIGZvciBpbXBsaWNpdCBwdF9yZWdzIHBhcmFtZXRlcgorCXB1c2gJcjYKKwlwdXNoCXI1CisJcHVzaAlyNAorCS5lbmRtCisKKwkubWFjcm8JUkVTVE9SRV9BTEwKKwlwb3AJcjQKKwlwb3AJcjUKKwlwb3AJcjYKKwlhZGRpCXNwLCAjNAorCXBvcAlyMAorCXBvcAlyMQorCXBvcAlyMgorCXBvcAlyMworCXBvcAlyNworCXBvcAlyOAorCXBvcAlyOQorCXBvcAlyMTAKKwlwb3AJcjExCisJcG9wCXIxMgorCWFkZGkJcjE1LCAjNAkJOyBTa2lwIHN5c2NhbGwgbnVtYmVyCisjaWYgZGVmaW5lZChDT05GSUdfSVNBX00zMlIyKSAmJiBkZWZpbmVkKENPTkZJR19JU0FfRFNQX0xFVkVMMikKKwlwb3AJcjEzCisJbXZ0YWNoaQlyMTMsIGEwCisJcG9wCXIxMworCW12dGFjbG8JcjEzLCBhMAorCXBvcAlyMTMKKwltdnRhY2hpCXIxMywgYTEKKwlwb3AJcjEzCisJbXZ0YWNsbwlyMTMsIGExCisjZWxpZiBkZWZpbmVkKENPTkZJR19JU0FfTTMyUjIpIHx8IGRlZmluZWQoQ09ORklHX0lTQV9NMzJSKQorCXBvcAlyMTMKKwltdnRhY2hpCXIxMworCXBvcAlyMTMKKwltdnRhY2xvCXIxMworI2Vsc2UKKyNlcnJvciB1bmtub3duIGlzYSBjb25maWd1cmF0aW9uCisjZW5kaWYKKwlwb3AJcjE0CisJbXZ0YwlyMTQsIHBzdworCXBvcAlyMTQKKwltdnRjCXIxNCwgYnBjCisJYWRkaQlzcCwgIzgJCTsgU2tpcCBiYnBzdywgYmJwYworCXBvcAlyMTQKKwltdnRjCXIxNCwgY3IzCTsgc3B1CisJcG9wCXIxMworCXBvcAlscgkJOyByMTQKKwlwb3AJc3AJCTsgc3BpIChyMTUpCisJYWRkaQlzcCwgIzQJCTsgU2tpcCBvcmlnX3IwCisJLmZpbGxpbnNuCisxOglydGUKKwkuc2VjdGlvbiAuZml4dXAsImF4IgorMjoJYmwJZG9fZXhpdAorCS5wcmV2aW91cworCS5zZWN0aW9uIF9fZXhfdGFibGUsImEiCisJQUxJR04KKwkubG9uZwkxYiwgMmIKKwkucHJldmlvdXMKKwkuZW5kbQorCisjZGVmaW5lIEdFVF9DVVJSRU5UKHJlZykgIGdldF9jdXJyZW50IHJlZworCS5tYWNybyBnZXRfY3VycmVudCByZWcKKwlsZGkgIFxyZWcsICMtODE5MgorCWFuZCAgXHJlZywgc3AKKwkuZW5kbQorCisjaWYgIWRlZmluZWQoQ09ORklHX0NISVBfTTMyMTAyKQorCS5tYWNybwlTV0lUQ0hfVE9fS0VSTkVMX1NUQUNLCisJOyBzd2l0Y2ggdG8ga2VybmVsIHN0YWNrIChzcGkpCisJY2xycHN3CSMweDgwCSAgICAtPglub3AKKwkuZW5kbQorI2Vsc2UJLyogQ09ORklHX0NISVBfTTMyMTAyICovCisJLm1hY3JvCVNXSVRDSF9UT19LRVJORUxfU1RBQ0sKKwlwdXNoCXIwCQk7IHNhdmUgcjAgZm9yIHdvcmtpbmcKKwltdmZjCXIwLCBwc3cKKwlhbmQzCXIwLCByMCwgIzB4MDBmZjdmCisJbXZ0YwlyMCwgcHN3CisJc2xsaQlyMCwgIzE2CisJYmx0eglyMCwgMWYJCTsgY2hlY2sgQlNNLWJpdAorOworCTs7IGNhbGxlZCBmcm9tIGtlcm5lbCBjb250ZXh0OiBwcmV2aW91cyBzdGFjayA9IHNwaQorCXBvcAlyMAkJOyByZXRyaWV2ZSByMAorCWJyYQkyZgorCS5maWxsaW5zbgorMToKKwk7OyBjYWxsZWQgZnJvbSB1c2VyIGNvbnRleHQ6IHByZXZpb3VzIHN0YWNrID0gc3B1CisJbXZmYwlyMCwgY3IzCQk7IHNwdQorCWFkZGkJcjAsICM0CisJbXZ0YwlyMCwgY3IzCQk7IHNwdQorCWxkCXIwLCBAKC00LHIwKQk7IHJldHJpZXZlIHIwCisJLmZpbGxpbnNuCisyOgorCS5lbmRtCisjZW5kaWYJLyogQ09ORklHX0NISVBfTTMyMTAyICovCisKKyNlbmRpZgkvKiBfX0FTU0VNQkxZX18gKi8KKworI2VuZGlmCS8qIF9BU01fTTMyUl9BU1NFTUJMRVJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9hdG9taWMuaCBiL2luY2x1ZGUvYXNtLW0zMnIvYXRvbWljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZmZjY5YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvYXRvbWljLmgKQEAgLTAsMCArMSwyOTUgQEAKKyNpZm5kZWYgX0FTTV9NMzJSX0FUT01JQ19ICisjZGVmaW5lIF9BU01fTTMyUl9BVE9NSUNfSAorCisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLW0zMnIvYXRvbWljLmgKKyAqCisgKiAgTTMyUiB2ZXJzaW9uOgorICogICAgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyICBIaXRvc2hpIFlhbWFtb3RvCisgKiAgICBDb3B5cmlnaHQgKEMpIDIwMDQgIEhpcm9rYXp1IFRha2F0YSA8dGFrYXRhIGF0IGxpbnV4LW0zMnIub3JnPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorCisvKgorICogQXRvbWljIG9wZXJhdGlvbnMgdGhhdCBDIGNhbid0IGd1YXJhbnRlZSB1cy4gIFVzZWZ1bCBmb3IKKyAqIHJlc291cmNlIGNvdW50aW5nIGV0Yy4uCisgKi8KKworLyoKKyAqIE1ha2Ugc3VyZSBnY2MgZG9lc24ndCB0cnkgdG8gYmUgY2xldmVyIGFuZCBtb3ZlIHRoaW5ncyBhcm91bmQKKyAqIG9uIHVzLiBXZSBuZWVkIHRvIHVzZSBfZXhhY3RseV8gdGhlIGFkZHJlc3MgdGhlIHVzZXIgZ2F2ZSB1cywKKyAqIG5vdCBzb21lIGFsaWFzIHRoYXQgY29udGFpbnMgdGhlIHNhbWUgaW5mb3JtYXRpb24uCisgKi8KK3R5cGVkZWYgc3RydWN0IHsgdm9sYXRpbGUgaW50IGNvdW50ZXI7IH0gYXRvbWljX3Q7CisKKyNkZWZpbmUgQVRPTUlDX0lOSVQoaSkJeyAoaSkgfQorCisvKioKKyAqIGF0b21pY19yZWFkIC0gcmVhZCBhdG9taWMgdmFyaWFibGUKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqCisgKiBBdG9taWNhbGx5IHJlYWRzIHRoZSB2YWx1ZSBvZiBAdi4KKyAqLworI2RlZmluZSBhdG9taWNfcmVhZCh2KQkoKHYpLT5jb3VudGVyKQorCisvKioKKyAqIGF0b21pY19zZXQgLSBzZXQgYXRvbWljIHZhcmlhYmxlCisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CisgKiBAaTogcmVxdWlyZWQgdmFsdWUKKyAqCisgKiBBdG9taWNhbGx5IHNldHMgdGhlIHZhbHVlIG9mIEB2IHRvIEBpLgorICovCisjZGVmaW5lIGF0b21pY19zZXQodixpKQkoKCh2KS0+Y291bnRlcikgPSAoaSkpCisKKy8qKgorICogYXRvbWljX2FkZF9yZXR1cm4gLSBhZGQgaW50ZWdlciB0byBhdG9taWMgdmFyaWFibGUgYW5kIHJldHVybiBpdAorICogQGk6IGludGVnZXIgdmFsdWUgdG8gYWRkCisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CisgKgorICogQXRvbWljYWxseSBhZGRzIEBpIHRvIEB2IGFuZCByZXR1cm4gKEBpICsgQHYpLgorICovCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgYXRvbWljX2FkZF9yZXR1cm4oaW50IGksIGF0b21pY190ICp2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJlc3VsdDsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCSIjIGF0b21pY19hZGRfcmV0dXJuCQlcblx0IgorCQlEQ0FDSEVfQ0xFQVIoIiUwIiwgInI0IiwgIiUxIikKKwkJTTMyUl9MT0NLIiAlMCwgQCUxOwkJXG5cdCIKKwkJImFkZAklMCwgJTI7CQkJXG5cdCIKKwkJTTMyUl9VTkxPQ0siICUwLCBAJTE7CQlcblx0IgorCQk6ICI9JnIiIChyZXN1bHQpCisJCTogInIiICgmdi0+Y291bnRlciksICJyIiAoaSkKKwkJOiAibWVtb3J5IgorI2lmZGVmIENPTkZJR19DSElQX00zMjcwMF9UUzEKKwkJLCAicjQiCisjZW5kaWYJLyogQ09ORklHX0NISVBfTTMyNzAwX1RTMSAqLworCSk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoqCisgKiBhdG9taWNfc3ViX3JldHVybiAtIHN1YnRyYWN0IGludGVnZXIgZnJvbSBhdG9taWMgdmFyaWFibGUgYW5kIHJldHVybiBpdAorICogQGk6IGludGVnZXIgdmFsdWUgdG8gc3VidHJhY3QKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqCisgKiBBdG9taWNhbGx5IHN1YnRyYWN0cyBAaSBmcm9tIEB2IGFuZCByZXR1cm4gKEB2IC0gQGkpLgorICovCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgYXRvbWljX3N1Yl9yZXR1cm4oaW50IGksIGF0b21pY190ICp2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJlc3VsdDsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCSIjIGF0b21pY19zdWJfcmV0dXJuCQlcblx0IgorCQlEQ0FDSEVfQ0xFQVIoIiUwIiwgInI0IiwgIiUxIikKKwkJTTMyUl9MT0NLIiAlMCwgQCUxOwkJXG5cdCIKKwkJInN1YgklMCwgJTI7CQkJXG5cdCIKKwkJTTMyUl9VTkxPQ0siICUwLCBAJTE7CQlcblx0IgorCQk6ICI9JnIiIChyZXN1bHQpCisJCTogInIiICgmdi0+Y291bnRlciksICJyIiAoaSkKKwkJOiAibWVtb3J5IgorI2lmZGVmIENPTkZJR19DSElQX00zMjcwMF9UUzEKKwkJLCAicjQiCisjZW5kaWYJLyogQ09ORklHX0NISVBfTTMyNzAwX1RTMSAqLworCSk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoqCisgKiBhdG9taWNfYWRkIC0gYWRkIGludGVnZXIgdG8gYXRvbWljIHZhcmlhYmxlCisgKiBAaTogaW50ZWdlciB2YWx1ZSB0byBhZGQKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqCisgKiBBdG9taWNhbGx5IGFkZHMgQGkgdG8gQHYuCisgKi8KKyNkZWZpbmUgYXRvbWljX2FkZChpLHYpICgodm9pZCkgYXRvbWljX2FkZF9yZXR1cm4oKGkpLCAodikpKQorCisvKioKKyAqIGF0b21pY19zdWIgLSBzdWJ0cmFjdCB0aGUgYXRvbWljIHZhcmlhYmxlCisgKiBAaTogaW50ZWdlciB2YWx1ZSB0byBzdWJ0cmFjdAorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICoKKyAqIEF0b21pY2FsbHkgc3VidHJhY3RzIEBpIGZyb20gQHYuCisgKi8KKyNkZWZpbmUgYXRvbWljX3N1YihpLHYpICgodm9pZCkgYXRvbWljX3N1Yl9yZXR1cm4oKGkpLCAodikpKQorCisvKioKKyAqIGF0b21pY19zdWJfYW5kX3Rlc3QgLSBzdWJ0cmFjdCB2YWx1ZSBmcm9tIHZhcmlhYmxlIGFuZCB0ZXN0IHJlc3VsdAorICogQGk6IGludGVnZXIgdmFsdWUgdG8gc3VidHJhY3QKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqCisgKiBBdG9taWNhbGx5IHN1YnRyYWN0cyBAaSBmcm9tIEB2IGFuZCByZXR1cm5zCisgKiB0cnVlIGlmIHRoZSByZXN1bHQgaXMgemVybywgb3IgZmFsc2UgZm9yIGFsbAorICogb3RoZXIgY2FzZXMuCisgKi8KKyNkZWZpbmUgYXRvbWljX3N1Yl9hbmRfdGVzdChpLHYpIChhdG9taWNfc3ViX3JldHVybigoaSksICh2KSkgPT0gMCkKKworLyoqCisgKiBhdG9taWNfaW5jX3JldHVybiAtIGluY3JlbWVudCBhdG9taWMgdmFyaWFibGUgYW5kIHJldHVybiBpdAorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICoKKyAqIEF0b21pY2FsbHkgaW5jcmVtZW50cyBAdiBieSAxIGFuZCByZXR1cm5zIHRoZSByZXN1bHQuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIGludCBhdG9taWNfaW5jX3JldHVybihhdG9taWNfdCAqdikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXN1bHQ7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCQkiIyBhdG9taWNfaW5jX3JldHVybgkJXG5cdCIKKwkJRENBQ0hFX0NMRUFSKCIlMCIsICJyNCIsICIlMSIpCisJCU0zMlJfTE9DSyIgJTAsIEAlMTsJCVxuXHQiCisJCSJhZGRpCSUwLCAjMTsJCQlcblx0IgorCQlNMzJSX1VOTE9DSyIgJTAsIEAlMTsJCVxuXHQiCisJCTogIj0mciIgKHJlc3VsdCkKKwkJOiAiciIgKCZ2LT5jb3VudGVyKQorCQk6ICJtZW1vcnkiCisjaWZkZWYgQ09ORklHX0NISVBfTTMyNzAwX1RTMQorCQksICJyNCIKKyNlbmRpZgkvKiBDT05GSUdfQ0hJUF9NMzI3MDBfVFMxICovCisJKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKioKKyAqIGF0b21pY19kZWNfcmV0dXJuIC0gZGVjcmVtZW50IGF0b21pYyB2YXJpYWJsZSBhbmQgcmV0dXJuIGl0CisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CisgKgorICogQXRvbWljYWxseSBkZWNyZW1lbnRzIEB2IGJ5IDEgYW5kIHJldHVybnMgdGhlIHJlc3VsdC4KKyAqLworc3RhdGljIF9faW5saW5lX18gaW50IGF0b21pY19kZWNfcmV0dXJuKGF0b21pY190ICp2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJlc3VsdDsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCSIjIGF0b21pY19kZWNfcmV0dXJuCQlcblx0IgorCQlEQ0FDSEVfQ0xFQVIoIiUwIiwgInI0IiwgIiUxIikKKwkJTTMyUl9MT0NLIiAlMCwgQCUxOwkJXG5cdCIKKwkJImFkZGkJJTAsICMtMTsJCVxuXHQiCisJCU0zMlJfVU5MT0NLIiAlMCwgQCUxOwkJXG5cdCIKKwkJOiAiPSZyIiAocmVzdWx0KQorCQk6ICJyIiAoJnYtPmNvdW50ZXIpCisJCTogIm1lbW9yeSIKKyNpZmRlZiBDT05GSUdfQ0hJUF9NMzI3MDBfVFMxCisJCSwgInI0IgorI2VuZGlmCS8qIENPTkZJR19DSElQX00zMjcwMF9UUzEgKi8KKwkpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogYXRvbWljX2luYyAtIGluY3JlbWVudCBhdG9taWMgdmFyaWFibGUKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqCisgKiBBdG9taWNhbGx5IGluY3JlbWVudHMgQHYgYnkgMS4KKyAqLworI2RlZmluZSBhdG9taWNfaW5jKHYpICgodm9pZClhdG9taWNfaW5jX3JldHVybih2KSkKKworLyoqCisgKiBhdG9taWNfZGVjIC0gZGVjcmVtZW50IGF0b21pYyB2YXJpYWJsZQorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICoKKyAqIEF0b21pY2FsbHkgZGVjcmVtZW50cyBAdiBieSAxLgorICovCisjZGVmaW5lIGF0b21pY19kZWModikgKCh2b2lkKWF0b21pY19kZWNfcmV0dXJuKHYpKQorCisvKioKKyAqIGF0b21pY19pbmNfYW5kX3Rlc3QgLSBpbmNyZW1lbnQgYW5kIHRlc3QKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqCisgKiBBdG9taWNhbGx5IGluY3JlbWVudHMgQHYgYnkgMQorICogYW5kIHJldHVybnMgdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIHplcm8sIG9yIGZhbHNlIGZvciBhbGwKKyAqIG90aGVyIGNhc2VzLgorICovCisjZGVmaW5lIGF0b21pY19pbmNfYW5kX3Rlc3QodikgKGF0b21pY19pbmNfcmV0dXJuKHYpID09IDApCisKKy8qKgorICogYXRvbWljX2RlY19hbmRfdGVzdCAtIGRlY3JlbWVudCBhbmQgdGVzdAorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICoKKyAqIEF0b21pY2FsbHkgZGVjcmVtZW50cyBAdiBieSAxIGFuZAorICogcmV0dXJucyB0cnVlIGlmIHRoZSByZXN1bHQgaXMgMCwgb3IgZmFsc2UgZm9yIGFsbAorICogb3RoZXIgY2FzZXMuCisgKi8KKyNkZWZpbmUgYXRvbWljX2RlY19hbmRfdGVzdCh2KSAoYXRvbWljX2RlY19yZXR1cm4odikgPT0gMCkKKworLyoqCisgKiBhdG9taWNfYWRkX25lZ2F0aXZlIC0gYWRkIGFuZCB0ZXN0IGlmIG5lZ2F0aXZlCisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CisgKiBAaTogaW50ZWdlciB2YWx1ZSB0byBhZGQKKyAqCisgKiBBdG9taWNhbGx5IGFkZHMgQGkgdG8gQHYgYW5kIHJldHVybnMgdHJ1ZQorICogaWYgdGhlIHJlc3VsdCBpcyBuZWdhdGl2ZSwgb3IgZmFsc2Ugd2hlbgorICogcmVzdWx0IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB6ZXJvLgorICovCisjZGVmaW5lIGF0b21pY19hZGRfbmVnYXRpdmUoaSx2KSAoYXRvbWljX2FkZF9yZXR1cm4oKGkpLCAodikpIDwgMCkKKworc3RhdGljIF9faW5saW5lX18gdm9pZCBhdG9taWNfY2xlYXJfbWFzayh1bnNpZ25lZCBsb25nICBtYXNrLCBhdG9taWNfdCAqYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwkJIiMgYXRvbWljX2NsZWFyX21hc2sJCVxuXHQiCisJCURDQUNIRV9DTEVBUigiJTAiLCAicjUiLCAiJTEiKQorCQlNMzJSX0xPQ0siICUwLCBAJTE7CQlcblx0IgorCQkiYW5kCSUwLCAlMjsJCQlcblx0IgorCQlNMzJSX1VOTE9DSyIgJTAsIEAlMTsJCVxuXHQiCisJCTogIj0mciIgKHRtcCkKKwkJOiAiciIgKGFkZHIpLCAiciIgKH5tYXNrKQorCQk6ICJtZW1vcnkiCisjaWZkZWYgQ09ORklHX0NISVBfTTMyNzAwX1RTMQorCQksICJyNSIKKyNlbmRpZgkvKiBDT05GSUdfQ0hJUF9NMzI3MDBfVFMxICovCisJKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgYXRvbWljX3NldF9tYXNrKHVuc2lnbmVkIGxvbmcgIG1hc2ssIGF0b21pY190ICphZGRyKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCQkiIyBhdG9taWNfc2V0X21hc2sJCVxuXHQiCisJCURDQUNIRV9DTEVBUigiJTAiLCAicjUiLCAiJTEiKQorCQlNMzJSX0xPQ0siICUwLCBAJTE7CQlcblx0IgorCQkib3IJJTAsICUyOwkJCVxuXHQiCisJCU0zMlJfVU5MT0NLIiAlMCwgQCUxOwkJXG5cdCIKKwkJOiAiPSZyIiAodG1wKQorCQk6ICJyIiAoYWRkciksICJyIiAobWFzaykKKwkJOiAibWVtb3J5IgorI2lmZGVmIENPTkZJR19DSElQX00zMjcwMF9UUzEKKwkJLCAicjUiCisjZW5kaWYJLyogQ09ORklHX0NISVBfTTMyNzAwX1RTMSAqLworCSk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCisvKiBBdG9taWMgb3BlcmF0aW9ucyBhcmUgYWxyZWFkeSBzZXJpYWxpemluZyBvbiBtMzJyICovCisjZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19kZWMoKQliYXJyaWVyKCkKKyNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWNfZGVjKCkJYmFycmllcigpCisjZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19pbmMoKQliYXJyaWVyKCkKKyNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWNfaW5jKCkJYmFycmllcigpCisKKyNlbmRpZgkvKiBfQVNNX00zMlJfQVRPTUlDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvYml0b3BzLmggYi9pbmNsdWRlL2FzbS1tMzJyL2JpdG9wcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3ODQ0MzkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL2JpdG9wcy5oCkBAIC0wLDAgKzEsNzAyIEBACisjaWZuZGVmIF9BU01fTTMyUl9CSVRPUFNfSAorI2RlZmluZSBfQVNNX00zMlJfQklUT1BTX0gKKworLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1tMzJyL2JpdG9wcy5oCisgKgorICogIENvcHlyaWdodCAxOTkyLCBMaW51cyBUb3J2YWxkcy4KKyAqCisgKiAgTTMyUiB2ZXJzaW9uOgorICogICAgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyICBIaXRvc2hpIFlhbWFtb3RvCisgKiAgICBDb3B5cmlnaHQgKEMpIDIwMDQgIEhpcm9rYXp1IFRha2F0YSA8dGFrYXRhIGF0IGxpbnV4LW0zMnIub3JnPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCisvKgorICogVGhlc2UgaGF2ZSB0byBiZSBkb25lIHdpdGggaW5saW5lIGFzc2VtYmx5OiB0aGF0IHdheSB0aGUgYml0LXNldHRpbmcKKyAqIGlzIGd1YXJhbnRlZWQgdG8gYmUgYXRvbWljLiBBbGwgYml0IG9wZXJhdGlvbnMgcmV0dXJuIDAgaWYgdGhlIGJpdAorICogd2FzIGNsZWFyZWQgYmVmb3JlIHRoZSBvcGVyYXRpb24gYW5kICE9IDAgaWYgaXQgd2FzIG5vdC4KKyAqCisgKiBiaXQgMCBpcyB0aGUgTFNCIG9mIGFkZHI7IGJpdCAzMiBpcyB0aGUgTFNCIG9mIChhZGRyKzEpLgorICovCisKKy8qKgorICogc2V0X2JpdCAtIEF0b21pY2FsbHkgc2V0IGEgYml0IGluIG1lbW9yeQorICogQG5yOiB0aGUgYml0IHRvIHNldAorICogQGFkZHI6IHRoZSBhZGRyZXNzIHRvIHN0YXJ0IGNvdW50aW5nIGZyb20KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGF0b21pYyBhbmQgbWF5IG5vdCBiZSByZW9yZGVyZWQuICBTZWUgX19zZXRfYml0KCkKKyAqIGlmIHlvdSBkbyBub3QgcmVxdWlyZSB0aGUgYXRvbWljIGd1YXJhbnRlZXMuCisgKiBOb3RlIHRoYXQgQG5yIG1heSBiZSBhbG1vc3QgYXJiaXRyYXJpbHkgbGFyZ2U7IHRoaXMgZnVuY3Rpb24gaXMgbm90CisgKiByZXN0cmljdGVkIHRvIGFjdGluZyBvbiBhIHNpbmdsZS13b3JkIHF1YW50aXR5LgorICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHNldF9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKK3sKKwlfX3UzMiBtYXNrOworCXZvbGF0aWxlIF9fdTMyICphID0gYWRkcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJYSArPSAobnIgPj4gNSk7CisJbWFzayA9ICgxIDw8IChuciAmIDB4MUYpKTsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCURDQUNIRV9DTEVBUigiJTAiLCAicjYiLCAiJTEiKQorCQlNMzJSX0xPQ0siICUwLCBAJTE7CQlcblx0IgorCQkib3IJJTAsICUyOwkJCVxuXHQiCisJCU0zMlJfVU5MT0NLIiAlMCwgQCUxOwkJXG5cdCIKKwkJOiAiPSZyIiAodG1wKQorCQk6ICJyIiAoYSksICJyIiAobWFzaykKKwkJOiAibWVtb3J5IgorI2lmZGVmIENPTkZJR19DSElQX00zMjcwMF9UUzEKKwkJLCAicjYiCisjZW5kaWYJLyogQ09ORklHX0NISVBfTTMyNzAwX1RTMSAqLworCSk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCisvKioKKyAqIF9fc2V0X2JpdCAtIFNldCBhIGJpdCBpbiBtZW1vcnkKKyAqIEBucjogdGhlIGJpdCB0byBzZXQKKyAqIEBhZGRyOiB0aGUgYWRkcmVzcyB0byBzdGFydCBjb3VudGluZyBmcm9tCisgKgorICogVW5saWtlIHNldF9iaXQoKSwgdGhpcyBmdW5jdGlvbiBpcyBub24tYXRvbWljIGFuZCBtYXkgYmUgcmVvcmRlcmVkLgorICogSWYgaXQncyBjYWxsZWQgb24gdGhlIHNhbWUgcmVnaW9uIG9mIG1lbW9yeSBzaW11bHRhbmVvdXNseSwgdGhlIGVmZmVjdAorICogbWF5IGJlIHRoYXQgb25seSBvbmUgb3BlcmF0aW9uIHN1Y2NlZWRzLgorICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fc2V0X2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQoreworCV9fdTMyIG1hc2s7CisJdm9sYXRpbGUgX191MzIgKmEgPSBhZGRyOworCisJYSArPSAobnIgPj4gNSk7CisJbWFzayA9ICgxIDw8IChuciAmIDB4MUYpKTsKKwkqYSB8PSBtYXNrOworfQorCisvKioKKyAqIGNsZWFyX2JpdCAtIENsZWFycyBhIGJpdCBpbiBtZW1vcnkKKyAqIEBucjogQml0IHRvIGNsZWFyCisgKiBAYWRkcjogQWRkcmVzcyB0byBzdGFydCBjb3VudGluZyBmcm9tCisgKgorICogY2xlYXJfYml0KCkgaXMgYXRvbWljIGFuZCBtYXkgbm90IGJlIHJlb3JkZXJlZC4gIEhvd2V2ZXIsIGl0IGRvZXMKKyAqIG5vdCBjb250YWluIGEgbWVtb3J5IGJhcnJpZXIsIHNvIGlmIGl0IGlzIHVzZWQgZm9yIGxvY2tpbmcgcHVycG9zZXMsCisgKiB5b3Ugc2hvdWxkIGNhbGwgc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCkgYW5kL29yIHNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCkKKyAqIGluIG9yZGVyIHRvIGVuc3VyZSBjaGFuZ2VzIGFyZSB2aXNpYmxlIG9uIG90aGVyIHByb2Nlc3NvcnMuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgY2xlYXJfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCit7CisJX191MzIgbWFzazsKKwl2b2xhdGlsZSBfX3UzMiAqYSA9IGFkZHI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCWEgKz0gKG5yID4+IDUpOworCW1hc2sgPSAoMSA8PCAobnIgJiAweDFGKSk7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCURDQUNIRV9DTEVBUigiJTAiLCAicjYiLCAiJTEiKQorCQlNMzJSX0xPQ0siICUwLCBAJTE7CQlcblx0IgorCQkiYW5kCSUwLCAlMjsJCQlcblx0IgorCQlNMzJSX1VOTE9DSyIgJTAsIEAlMTsJCVxuXHQiCisJCTogIj0mciIgKHRtcCkKKwkJOiAiciIgKGEpLCAiciIgKH5tYXNrKQorCQk6ICJtZW1vcnkiCisjaWZkZWYgQ09ORklHX0NISVBfTTMyNzAwX1RTMQorCQksICJyNiIKKyNlbmRpZgkvKiBDT05GSUdfQ0hJUF9NMzI3MDBfVFMxICovCisJKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19jbGVhcl9iaXQoaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICogYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIG1hc2s7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYSA9IGFkZHI7CisKKwlhICs9IChuciA+PiA1KTsKKwltYXNrID0gKDEgPDwgKG5yICYgMHgxRikpOworCSphICY9IH5tYXNrOworfQorCisjZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpCWJhcnJpZXIoKQorI2RlZmluZSBzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpCWJhcnJpZXIoKQorCisvKioKKyAqIF9fY2hhbmdlX2JpdCAtIFRvZ2dsZSBhIGJpdCBpbiBtZW1vcnkKKyAqIEBucjogdGhlIGJpdCB0byBzZXQKKyAqIEBhZGRyOiB0aGUgYWRkcmVzcyB0byBzdGFydCBjb3VudGluZyBmcm9tCisgKgorICogVW5saWtlIGNoYW5nZV9iaXQoKSwgdGhpcyBmdW5jdGlvbiBpcyBub24tYXRvbWljIGFuZCBtYXkgYmUgcmVvcmRlcmVkLgorICogSWYgaXQncyBjYWxsZWQgb24gdGhlIHNhbWUgcmVnaW9uIG9mIG1lbW9yeSBzaW11bHRhbmVvdXNseSwgdGhlIGVmZmVjdAorICogbWF5IGJlIHRoYXQgb25seSBvbmUgb3BlcmF0aW9uIHN1Y2NlZWRzLgorICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fY2hhbmdlX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQoreworCV9fdTMyIG1hc2s7CisJdm9sYXRpbGUgX191MzIgKmEgPSBhZGRyOworCisJYSArPSAobnIgPj4gNSk7CisJbWFzayA9ICgxIDw8IChuciAmIDB4MUYpKTsKKwkqYSBePSBtYXNrOworfQorCisvKioKKyAqIGNoYW5nZV9iaXQgLSBUb2dnbGUgYSBiaXQgaW4gbWVtb3J5CisgKiBAbnI6IEJpdCB0byBjbGVhcgorICogQGFkZHI6IEFkZHJlc3MgdG8gc3RhcnQgY291bnRpbmcgZnJvbQorICoKKyAqIGNoYW5nZV9iaXQoKSBpcyBhdG9taWMgYW5kIG1heSBub3QgYmUgcmVvcmRlcmVkLgorICogTm90ZSB0aGF0IEBuciBtYXkgYmUgYWxtb3N0IGFyYml0cmFyaWx5IGxhcmdlOyB0aGlzIGZ1bmN0aW9uIGlzIG5vdAorICogcmVzdHJpY3RlZCB0byBhY3Rpbmcgb24gYSBzaW5nbGUtd29yZCBxdWFudGl0eS4KKyAqLworc3RhdGljIF9faW5saW5lX18gdm9pZCBjaGFuZ2VfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCit7CisJX191MzIgIG1hc2s7CisJdm9sYXRpbGUgX191MzIgICphID0gYWRkcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJYSArPSAobnIgPj4gNSk7CisJbWFzayA9ICgxIDw8IChuciAmIDB4MUYpKTsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCURDQUNIRV9DTEVBUigiJTAiLCAicjYiLCAiJTEiKQorCQlNMzJSX0xPQ0siICUwLCBAJTE7CQlcblx0IgorCQkieG9yCSUwLCAlMjsJCQlcblx0IgorCQlNMzJSX1VOTE9DSyIgJTAsIEAlMTsJCVxuXHQiCisJCTogIj0mciIgKHRtcCkKKwkJOiAiciIgKGEpLCAiciIgKG1hc2spCisJCTogIm1lbW9yeSIKKyNpZmRlZiBDT05GSUdfQ0hJUF9NMzI3MDBfVFMxCisJCSwgInI2IgorI2VuZGlmCS8qIENPTkZJR19DSElQX00zMjcwMF9UUzEgKi8KKwkpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworLyoqCisgKiB0ZXN0X2FuZF9zZXRfYml0IC0gU2V0IGEgYml0IGFuZCByZXR1cm4gaXRzIG9sZCB2YWx1ZQorICogQG5yOiBCaXQgdG8gc2V0CisgKiBAYWRkcjogQWRkcmVzcyB0byBjb3VudCBmcm9tCisgKgorICogVGhpcyBvcGVyYXRpb24gaXMgYXRvbWljIGFuZCBjYW5ub3QgYmUgcmVvcmRlcmVkLgorICogSXQgYWxzbyBpbXBsaWVzIGEgbWVtb3J5IGJhcnJpZXIuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIGludCB0ZXN0X2FuZF9zZXRfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCit7CisJX191MzIgbWFzaywgb2xkYml0OworCXZvbGF0aWxlIF9fdTMyICphID0gYWRkcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJYSArPSAobnIgPj4gNSk7CisJbWFzayA9ICgxIDw8IChuciAmIDB4MUYpKTsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCURDQUNIRV9DTEVBUigiJTAiLCAiJTEiLCAiJTIiKQorCQlNMzJSX0xPQ0siICUwLCBAJTI7CQlcblx0IgorCQkibXYJJTEsICUwOwkJCVxuXHQiCisJCSJhbmQJJTAsICUzOwkJCVxuXHQiCisJCSJvcgklMSwgJTM7CQkJXG5cdCIKKwkJTTMyUl9VTkxPQ0siICUxLCBAJTI7CQlcblx0IgorCQk6ICI9JnIiIChvbGRiaXQpLCAiPSZyIiAodG1wKQorCQk6ICJyIiAoYSksICJyIiAobWFzaykKKwkJOiAibWVtb3J5IgorCSk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJcmV0dXJuIChvbGRiaXQgIT0gMCk7Cit9CisKKy8qKgorICogX190ZXN0X2FuZF9zZXRfYml0IC0gU2V0IGEgYml0IGFuZCByZXR1cm4gaXRzIG9sZCB2YWx1ZQorICogQG5yOiBCaXQgdG8gc2V0CisgKiBAYWRkcjogQWRkcmVzcyB0byBjb3VudCBmcm9tCisgKgorICogVGhpcyBvcGVyYXRpb24gaXMgbm9uLWF0b21pYyBhbmQgY2FuIGJlIHJlb3JkZXJlZC4KKyAqIElmIHR3byBleGFtcGxlcyBvZiB0aGlzIG9wZXJhdGlvbiByYWNlLCBvbmUgY2FuIGFwcGVhciB0byBzdWNjZWVkCisgKiBidXQgYWN0dWFsbHkgZmFpbC4gIFlvdSBtdXN0IHByb3RlY3QgbXVsdGlwbGUgYWNjZXNzZXMgd2l0aCBhIGxvY2suCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIGludCBfX3Rlc3RfYW5kX3NldF9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKK3sKKwlfX3UzMiBtYXNrLCBvbGRiaXQ7CisJdm9sYXRpbGUgX191MzIgKmEgPSBhZGRyOworCisJYSArPSAobnIgPj4gNSk7CisJbWFzayA9ICgxIDw8IChuciAmIDB4MUYpKTsKKwlvbGRiaXQgPSAoKmEgJiBtYXNrKTsKKwkqYSB8PSBtYXNrOworCisJcmV0dXJuIChvbGRiaXQgIT0gMCk7Cit9CisKKy8qKgorICogdGVzdF9hbmRfY2xlYXJfYml0IC0gQ2xlYXIgYSBiaXQgYW5kIHJldHVybiBpdHMgb2xkIHZhbHVlCisgKiBAbnI6IEJpdCB0byBzZXQKKyAqIEBhZGRyOiBBZGRyZXNzIHRvIGNvdW50IGZyb20KKyAqCisgKiBUaGlzIG9wZXJhdGlvbiBpcyBhdG9taWMgYW5kIGNhbm5vdCBiZSByZW9yZGVyZWQuCisgKiBJdCBhbHNvIGltcGxpZXMgYSBtZW1vcnkgYmFycmllci4KKyAqLworc3RhdGljIF9faW5saW5lX18gaW50IHRlc3RfYW5kX2NsZWFyX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQoreworCV9fdTMyIG1hc2ssIG9sZGJpdDsKKwl2b2xhdGlsZSBfX3UzMiAqYSA9IGFkZHI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCWEgKz0gKG5yID4+IDUpOworCW1hc2sgPSAoMSA8PCAobnIgJiAweDFGKSk7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCURDQUNIRV9DTEVBUigiJTAiLCAiJTEiLCAiJTMiKQorCQlNMzJSX0xPQ0siICUwLCBAJTM7CQlcblx0IgorCQkibXYJJTEsICUwOwkJCVxuXHQiCisJCSJhbmQJJTAsICUyOwkJCVxuXHQiCisJCSJub3QJJTIsICUyOwkJCVxuXHQiCisJCSJhbmQJJTEsICUyOwkJCVxuXHQiCisJCU0zMlJfVU5MT0NLIiAlMSwgQCUzOwkJXG5cdCIKKwkJOiAiPSZyIiAob2xkYml0KSwgIj0mciIgKHRtcCksICIrciIgKG1hc2spCisJCTogInIiIChhKQorCQk6ICJtZW1vcnkiCisJKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlyZXR1cm4gKG9sZGJpdCAhPSAwKTsKK30KKworLyoqCisgKiBfX3Rlc3RfYW5kX2NsZWFyX2JpdCAtIENsZWFyIGEgYml0IGFuZCByZXR1cm4gaXRzIG9sZCB2YWx1ZQorICogQG5yOiBCaXQgdG8gc2V0CisgKiBAYWRkcjogQWRkcmVzcyB0byBjb3VudCBmcm9tCisgKgorICogVGhpcyBvcGVyYXRpb24gaXMgbm9uLWF0b21pYyBhbmQgY2FuIGJlIHJlb3JkZXJlZC4KKyAqIElmIHR3byBleGFtcGxlcyBvZiB0aGlzIG9wZXJhdGlvbiByYWNlLCBvbmUgY2FuIGFwcGVhciB0byBzdWNjZWVkCisgKiBidXQgYWN0dWFsbHkgZmFpbC4gIFlvdSBtdXN0IHByb3RlY3QgbXVsdGlwbGUgYWNjZXNzZXMgd2l0aCBhIGxvY2suCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIGludCBfX3Rlc3RfYW5kX2NsZWFyX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQoreworCV9fdTMyIG1hc2ssIG9sZGJpdDsKKwl2b2xhdGlsZSBfX3UzMiAqYSA9IGFkZHI7CisKKwlhICs9IChuciA+PiA1KTsKKwltYXNrID0gKDEgPDwgKG5yICYgMHgxRikpOworCW9sZGJpdCA9ICgqYSAmIG1hc2spOworCSphICY9IH5tYXNrOworCisJcmV0dXJuIChvbGRiaXQgIT0gMCk7Cit9CisKKy8qIFdBUk5JTkc6IG5vbiBhdG9taWMgYW5kIGl0IGNhbiBiZSByZW9yZGVyZWQhICovCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX190ZXN0X2FuZF9jaGFuZ2VfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCit7CisJX191MzIgbWFzaywgb2xkYml0OworCXZvbGF0aWxlIF9fdTMyICphID0gYWRkcjsKKworCWEgKz0gKG5yID4+IDUpOworCW1hc2sgPSAoMSA8PCAobnIgJiAweDFGKSk7CisJb2xkYml0ID0gKCphICYgbWFzayk7CisJKmEgXj0gbWFzazsKKworCXJldHVybiAob2xkYml0ICE9IDApOworfQorCisvKioKKyAqIHRlc3RfYW5kX2NoYW5nZV9iaXQgLSBDaGFuZ2UgYSBiaXQgYW5kIHJldHVybiBpdHMgb2xkIHZhbHVlCisgKiBAbnI6IEJpdCB0byBzZXQKKyAqIEBhZGRyOiBBZGRyZXNzIHRvIGNvdW50IGZyb20KKyAqCisgKiBUaGlzIG9wZXJhdGlvbiBpcyBhdG9taWMgYW5kIGNhbm5vdCBiZSByZW9yZGVyZWQuCisgKiBJdCBhbHNvIGltcGxpZXMgYSBtZW1vcnkgYmFycmllci4KKyAqLworc3RhdGljIF9faW5saW5lX18gaW50IHRlc3RfYW5kX2NoYW5nZV9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKK3sKKwlfX3UzMiBtYXNrLCBvbGRiaXQ7CisJdm9sYXRpbGUgX191MzIgKmEgPSBhZGRyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlhICs9IChuciA+PiA1KTsKKwltYXNrID0gKDEgPDwgKG5yICYgMHgxRikpOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwkJRENBQ0hFX0NMRUFSKCIlMCIsICIlMSIsICIlMiIpCisJCU0zMlJfTE9DSyIgJTAsIEAlMjsJCVxuXHQiCisJCSJtdgklMSwgJTA7CQkJXG5cdCIKKwkJImFuZAklMCwgJTM7CQkJXG5cdCIKKwkJInhvcgklMSwgJTM7CQkJXG5cdCIKKwkJTTMyUl9VTkxPQ0siICUxLCBAJTI7CQlcblx0IgorCQk6ICI9JnIiIChvbGRiaXQpLCAiPSZyIiAodG1wKQorCQk6ICJyIiAoYSksICJyIiAobWFzaykKKwkJOiAibWVtb3J5IgorCSk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJcmV0dXJuIChvbGRiaXQgIT0gMCk7Cit9CisKKy8qKgorICogdGVzdF9iaXQgLSBEZXRlcm1pbmUgd2hldGhlciBhIGJpdCBpcyBzZXQKKyAqIEBucjogYml0IG51bWJlciB0byB0ZXN0CisgKiBAYWRkcjogQWRkcmVzcyB0byBzdGFydCBjb3VudGluZyBmcm9tCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIGludCB0ZXN0X2JpdChpbnQgbnIsIGNvbnN0IHZvbGF0aWxlIHZvaWQgKiBhZGRyKQoreworCV9fdTMyIG1hc2s7CisJY29uc3Qgdm9sYXRpbGUgX191MzIgKmEgPSBhZGRyOworCisJYSArPSAobnIgPj4gNSk7CisJbWFzayA9ICgxIDw8IChuciAmIDB4MUYpKTsKKworCXJldHVybiAoKCphICYgbWFzaykgIT0gMCk7Cit9CisKKy8qKgorICogZmZ6IC0gZmluZCBmaXJzdCB6ZXJvIGluIHdvcmQuCisgKiBAd29yZDogVGhlIHdvcmQgdG8gc2VhcmNoCisgKgorICogVW5kZWZpbmVkIGlmIG5vIHplcm8gZXhpc3RzLCBzbyBjb2RlIHNob3VsZCBjaGVjayBhZ2FpbnN0IH4wVUwgZmlyc3QuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgZmZ6KHVuc2lnbmVkIGxvbmcgd29yZCkKK3sKKwlpbnQgazsKKworCXdvcmQgPSB+d29yZDsKKwlrID0gMDsKKwlpZiAoISh3b3JkICYgMHgwMDAwZmZmZikpIHsgayArPSAxNjsgd29yZCA+Pj0gMTY7IH0KKwlpZiAoISh3b3JkICYgMHgwMDAwMDBmZikpIHsgayArPSA4OyB3b3JkID4+PSA4OyB9CisJaWYgKCEod29yZCAmIDB4MDAwMDAwMGYpKSB7IGsgKz0gNDsgd29yZCA+Pj0gNDsgfQorCWlmICghKHdvcmQgJiAweDAwMDAwMDAzKSkgeyBrICs9IDI7IHdvcmQgPj49IDI7IH0KKwlpZiAoISh3b3JkICYgMHgwMDAwMDAwMSkpIHsgayArPSAxOyB9CisKKwlyZXR1cm4gazsKK30KKworLyoqCisgKiBmaW5kX2ZpcnN0X3plcm9fYml0IC0gZmluZCB0aGUgZmlyc3QgemVybyBiaXQgaW4gYSBtZW1vcnkgcmVnaW9uCisgKiBAYWRkcjogVGhlIGFkZHJlc3MgdG8gc3RhcnQgdGhlIHNlYXJjaCBhdAorICogQHNpemU6IFRoZSBtYXhpbXVtIHNpemUgdG8gc2VhcmNoCisgKgorICogUmV0dXJucyB0aGUgYml0LW51bWJlciBvZiB0aGUgZmlyc3QgemVybyBiaXQsIG5vdCB0aGUgbnVtYmVyIG9mIHRoZSBieXRlCisgKiBjb250YWluaW5nIGEgYml0LgorICovCisKKyNkZWZpbmUgZmluZF9maXJzdF96ZXJvX2JpdChhZGRyLCBzaXplKSBcCisJZmluZF9uZXh0X3plcm9fYml0KChhZGRyKSwgKHNpemUpLCAwKQorCisvKioKKyAqIGZpbmRfbmV4dF96ZXJvX2JpdCAtIGZpbmQgdGhlIGZpcnN0IHplcm8gYml0IGluIGEgbWVtb3J5IHJlZ2lvbgorICogQGFkZHI6IFRoZSBhZGRyZXNzIHRvIGJhc2UgdGhlIHNlYXJjaCBvbgorICogQG9mZnNldDogVGhlIGJpdG51bWJlciB0byBzdGFydCBzZWFyY2hpbmcgYXQKKyAqIEBzaXplOiBUaGUgbWF4aW11bSBzaXplIHRvIHNlYXJjaAorICovCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgZmluZF9uZXh0X3plcm9fYml0KGNvbnN0IHVuc2lnbmVkIGxvbmcgKmFkZHIsCisJCQkJCSBpbnQgc2l6ZSwgaW50IG9mZnNldCkKK3sKKwljb25zdCB1bnNpZ25lZCBsb25nICpwID0gYWRkciArIChvZmZzZXQgPj4gNSk7CisJdW5zaWduZWQgbG9uZyByZXN1bHQgPSBvZmZzZXQgJiB+MzFVTDsKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCWlmIChvZmZzZXQgPj0gc2l6ZSkKKwkJcmV0dXJuIHNpemU7CisJc2l6ZSAtPSByZXN1bHQ7CisJb2Zmc2V0ICY9IDMxVUw7CisJaWYgKG9mZnNldCkgeworCQl0bXAgPSAqKHArKyk7CisJCXRtcCB8PSB+MFVMID4+ICgzMi1vZmZzZXQpOworCQlpZiAoc2l6ZSA8IDMyKQorCQkJZ290byBmb3VuZF9maXJzdDsKKwkJaWYgKH50bXApCisJCQlnb3RvIGZvdW5kX21pZGRsZTsKKwkJc2l6ZSAtPSAzMjsKKwkJcmVzdWx0ICs9IDMyOworCX0KKwl3aGlsZSAoc2l6ZSAmIH4zMVVMKSB7CisJCWlmICh+KHRtcCA9ICoocCsrKSkpCisJCQlnb3RvIGZvdW5kX21pZGRsZTsKKwkJcmVzdWx0ICs9IDMyOworCQlzaXplIC09IDMyOworCX0KKwlpZiAoIXNpemUpCisJCXJldHVybiByZXN1bHQ7CisJdG1wID0gKnA7CisKK2ZvdW5kX2ZpcnN0OgorCXRtcCB8PSB+MFVMIDw8IHNpemU7Citmb3VuZF9taWRkbGU6CisJcmV0dXJuIHJlc3VsdCArIGZmeih0bXApOworfQorCisvKioKKyAqIF9fZmZzIC0gZmluZCBmaXJzdCBiaXQgaW4gd29yZC4KKyAqIEB3b3JkOiBUaGUgd29yZCB0byBzZWFyY2gKKyAqCisgKiBVbmRlZmluZWQgaWYgbm8gYml0IGV4aXN0cywgc28gY29kZSBzaG91bGQgY2hlY2sgYWdhaW5zdCAwIGZpcnN0LgorICovCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIF9fZmZzKHVuc2lnbmVkIGxvbmcgd29yZCkKK3sKKwlpbnQgayA9IDA7CisKKwlpZiAoISh3b3JkICYgMHgwMDAwZmZmZikpIHsgayArPSAxNjsgd29yZCA+Pj0gMTY7IH0KKwlpZiAoISh3b3JkICYgMHgwMDAwMDBmZikpIHsgayArPSA4OyB3b3JkID4+PSA4OyB9CisJaWYgKCEod29yZCAmIDB4MDAwMDAwMGYpKSB7IGsgKz0gNDsgd29yZCA+Pj0gNDsgfQorCWlmICghKHdvcmQgJiAweDAwMDAwMDAzKSkgeyBrICs9IDI7IHdvcmQgPj49IDI7IH0KKwlpZiAoISh3b3JkICYgMHgwMDAwMDAwMSkpIHsgayArPSAxO30KKworCXJldHVybiBrOworfQorCisvKgorICogZmxzOiBmaW5kIGxhc3QgYml0IHNldC4KKyAqLworI2RlZmluZSBmbHMoeCkgZ2VuZXJpY19mbHMoeCkKKworI2lmZGVmIF9fS0VSTkVMX18KKworLyoKKyAqIEV2ZXJ5IGFyY2hpdGVjdHVyZSBtdXN0IGRlZmluZSB0aGlzIGZ1bmN0aW9uLiBJdCdzIHRoZSBmYXN0ZXN0CisgKiB3YXkgb2Ygc2VhcmNoaW5nIGEgMTQwLWJpdCBiaXRtYXAgd2hlcmUgdGhlIGZpcnN0IDEwMCBiaXRzIGFyZQorICogdW5saWtlbHkgdG8gYmUgc2V0LiBJdCdzIGd1YXJhbnRlZWQgdGhhdCBhdCBsZWFzdCBvbmUgb2YgdGhlIDE0MAorICogYml0cyBpcyBjbGVhcmVkLgorICovCitzdGF0aWMgaW5saW5lIGludCBzY2hlZF9maW5kX2ZpcnN0X2JpdCh1bnNpZ25lZCBsb25nICpiKQoreworCWlmICh1bmxpa2VseShiWzBdKSkKKwkJcmV0dXJuIF9fZmZzKGJbMF0pOworCWlmICh1bmxpa2VseShiWzFdKSkKKwkJcmV0dXJuIF9fZmZzKGJbMV0pICsgMzI7CisJaWYgKHVubGlrZWx5KGJbMl0pKQorCQlyZXR1cm4gX19mZnMoYlsyXSkgKyA2NDsKKwlpZiAoYlszXSkKKwkJcmV0dXJuIF9fZmZzKGJbM10pICsgOTY7CisJcmV0dXJuIF9fZmZzKGJbNF0pICsgMTI4OworfQorCisvKioKKyAqIGZpbmRfbmV4dF9iaXQgLSBmaW5kIHRoZSBmaXJzdCBzZXQgYml0IGluIGEgbWVtb3J5IHJlZ2lvbgorICogQGFkZHI6IFRoZSBhZGRyZXNzIHRvIGJhc2UgdGhlIHNlYXJjaCBvbgorICogQG9mZnNldDogVGhlIGJpdG51bWJlciB0byBzdGFydCBzZWFyY2hpbmcgYXQKKyAqIEBzaXplOiBUaGUgbWF4aW11bSBzaXplIHRvIHNlYXJjaAorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZmluZF9uZXh0X2JpdChjb25zdCB1bnNpZ25lZCBsb25nICphZGRyLAorCXVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpCit7CisJdW5zaWduZWQgaW50ICpwID0gKCh1bnNpZ25lZCBpbnQgKikgYWRkcikgKyAob2Zmc2V0ID4+IDUpOworCXVuc2lnbmVkIGludCByZXN1bHQgPSBvZmZzZXQgJiB+MzFVTDsKKwl1bnNpZ25lZCBpbnQgdG1wOworCisJaWYgKG9mZnNldCA+PSBzaXplKQorCQlyZXR1cm4gc2l6ZTsKKwlzaXplIC09IHJlc3VsdDsKKwlvZmZzZXQgJj0gMzFVTDsKKwlpZiAob2Zmc2V0KSB7CisJCXRtcCA9ICpwKys7CisJCXRtcCAmPSB+MFVMIDw8IG9mZnNldDsKKwkJaWYgKHNpemUgPCAzMikKKwkJCWdvdG8gZm91bmRfZmlyc3Q7CisJCWlmICh0bXApCisJCQlnb3RvIGZvdW5kX21pZGRsZTsKKwkJc2l6ZSAtPSAzMjsKKwkJcmVzdWx0ICs9IDMyOworCX0KKwl3aGlsZSAoc2l6ZSA+PSAzMikgeworCQlpZiAoKHRtcCA9ICpwKyspICE9IDApCisJCQlnb3RvIGZvdW5kX21pZGRsZTsKKwkJcmVzdWx0ICs9IDMyOworCQlzaXplIC09IDMyOworCX0KKwlpZiAoIXNpemUpCisJCXJldHVybiByZXN1bHQ7CisJdG1wID0gKnA7CisKK2ZvdW5kX2ZpcnN0OgorCXRtcCAmPSB+MFVMID4+ICgzMiAtIHNpemUpOworCWlmICh0bXAgPT0gMFVMKSAgICAgICAgLyogQXJlIGFueSBiaXRzIHNldD8gKi8KKwkJcmV0dXJuIHJlc3VsdCArIHNpemU7IC8qIE5vcGUuICovCitmb3VuZF9taWRkbGU6CisJcmV0dXJuIHJlc3VsdCArIF9fZmZzKHRtcCk7Cit9CisKKy8qKgorICogZmluZF9maXJzdF9iaXQgLSBmaW5kIHRoZSBmaXJzdCBzZXQgYml0IGluIGEgbWVtb3J5IHJlZ2lvbgorICogQGFkZHI6IFRoZSBhZGRyZXNzIHRvIHN0YXJ0IHRoZSBzZWFyY2ggYXQKKyAqIEBzaXplOiBUaGUgbWF4aW11bSBzaXplIHRvIHNlYXJjaAorICoKKyAqIFJldHVybnMgdGhlIGJpdC1udW1iZXIgb2YgdGhlIGZpcnN0IHNldCBiaXQsIG5vdCB0aGUgbnVtYmVyIG9mIHRoZSBieXRlCisgKiBjb250YWluaW5nIGEgYml0LgorICovCisjZGVmaW5lIGZpbmRfZmlyc3RfYml0KGFkZHIsIHNpemUpIFwKKwlmaW5kX25leHRfYml0KChhZGRyKSwgKHNpemUpLCAwKQorCisvKioKKyAqIGZmcyAtIGZpbmQgZmlyc3QgYml0IHNldAorICogQHg6IHRoZSB3b3JkIHRvIHNlYXJjaAorICoKKyAqIFRoaXMgaXMgZGVmaW5lZCB0aGUgc2FtZSB3YXkgYXMKKyAqIHRoZSBsaWJjIGFuZCBjb21waWxlciBidWlsdGluIGZmcyByb3V0aW5lcywgdGhlcmVmb3JlCisgKiBkaWZmZXJzIGluIHNwaXJpdCBmcm9tIHRoZSBhYm92ZSBmZnogKG1hbiBmZnMpLgorICovCisjZGVmaW5lIGZmcyh4KQlnZW5lcmljX2Zmcyh4KQorCisvKioKKyAqIGh3ZWlnaHROIC0gcmV0dXJucyB0aGUgaGFtbWluZyB3ZWlnaHQgb2YgYSBOLWJpdCB3b3JkCisgKiBAeDogdGhlIHdvcmQgdG8gd2VpZ2gKKyAqCisgKiBUaGUgSGFtbWluZyBXZWlnaHQgb2YgYSBudW1iZXIgaXMgdGhlIHRvdGFsIG51bWJlciBvZiBiaXRzIHNldCBpbiBpdC4KKyAqLworCisjZGVmaW5lIGh3ZWlnaHQzMih4KQlnZW5lcmljX2h3ZWlnaHQzMih4KQorI2RlZmluZSBod2VpZ2h0MTYoeCkJZ2VuZXJpY19od2VpZ2h0MTYoeCkKKyNkZWZpbmUgaHdlaWdodDgoeCkJZ2VuZXJpY19od2VpZ2h0OCh4KQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjaWZkZWYgX19LRVJORUxfXworCisvKgorICogZXh0Ml9YWFhYIGZ1bmN0aW9uCisgKiBvcmlnOiBpbmNsdWRlL2FzbS1zaC9iaXRvcHMuaAorICovCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSBleHQyX3NldF9iaXQJCQl0ZXN0X2FuZF9zZXRfYml0CisjZGVmaW5lIGV4dDJfY2xlYXJfYml0CQkJX190ZXN0X2FuZF9jbGVhcl9iaXQKKyNkZWZpbmUgZXh0Ml90ZXN0X2JpdAkJCXRlc3RfYml0CisjZGVmaW5lIGV4dDJfZmluZF9maXJzdF96ZXJvX2JpdAlmaW5kX2ZpcnN0X3plcm9fYml0CisjZGVmaW5lIGV4dDJfZmluZF9uZXh0X3plcm9fYml0CQlmaW5kX25leHRfemVyb19iaXQKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBleHQyX3NldF9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKK3sKKwlfX3U4IG1hc2ssIG9sZGJpdDsKKwl2b2xhdGlsZSBfX3U4ICphID0gYWRkcjsKKworCWEgKz0gKG5yID4+IDMpOworCW1hc2sgPSAoMSA8PCAobnIgJiAweDA3KSk7CisJb2xkYml0ID0gKCphICYgbWFzayk7CisJKmEgfD0gbWFzazsKKworCXJldHVybiAob2xkYml0ICE9IDApOworfQorCitzdGF0aWMgaW5saW5lIGludCBleHQyX2NsZWFyX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQoreworCV9fdTggbWFzaywgb2xkYml0OworCXZvbGF0aWxlIF9fdTggKmEgPSBhZGRyOworCisJYSArPSAobnIgPj4gMyk7CisJbWFzayA9ICgxIDw8IChuciAmIDB4MDcpKTsKKwlvbGRiaXQgPSAoKmEgJiBtYXNrKTsKKwkqYSAmPSB+bWFzazsKKworCXJldHVybiAob2xkYml0ICE9IDApOworfQorCitzdGF0aWMgaW5saW5lIGludCBleHQyX3Rlc3RfYml0KGludCBuciwgY29uc3Qgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCit7CisJX191MzIgbWFzazsKKwljb25zdCB2b2xhdGlsZSBfX3U4ICphID0gYWRkcjsKKworCWEgKz0gKG5yID4+IDMpOworCW1hc2sgPSAoMSA8PCAobnIgJiAweDA3KSk7CisKKwlyZXR1cm4gKChtYXNrICYgKmEpICE9IDApOworfQorCisjZGVmaW5lIGV4dDJfZmluZF9maXJzdF96ZXJvX2JpdChhZGRyLCBzaXplKSBcCisJZXh0Ml9maW5kX25leHRfemVyb19iaXQoKGFkZHIpLCAoc2l6ZSksIDApCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBleHQyX2ZpbmRfbmV4dF96ZXJvX2JpdCh2b2lkICphZGRyLAorCXVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpCit7CisJdW5zaWduZWQgbG9uZyAqcCA9ICgodW5zaWduZWQgbG9uZyAqKSBhZGRyKSArIChvZmZzZXQgPj4gNSk7CisJdW5zaWduZWQgbG9uZyByZXN1bHQgPSBvZmZzZXQgJiB+MzFVTDsKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCWlmIChvZmZzZXQgPj0gc2l6ZSkKKwkJcmV0dXJuIHNpemU7CisJc2l6ZSAtPSByZXN1bHQ7CisJb2Zmc2V0ICY9IDMxVUw7CisJaWYob2Zmc2V0KSB7CisJCS8qIFdlIGhvbGQgdGhlIGxpdHRsZSBlbmRpYW4gdmFsdWUgaW4gdG1wLCBidXQgdGhlbiB0aGUKKwkJICogc2hpZnQgaXMgaWxsZWdhbC4gU28gd2UgY291bGQga2VlcCBhIGJpZyBlbmRpYW4gdmFsdWUKKwkJICogaW4gdG1wLCBsaWtlIHRoaXM6CisJCSAqCisJCSAqIHRtcCA9IF9fc3dhYjMyKCoocCsrKSk7CisJCSAqIHRtcCB8PSB+MFVMID4+ICgzMi1vZmZzZXQpOworCQkgKgorCQkgKiBidXQgdGhpcyB3b3VsZCBkZWNyZWFzZSBwcmVmb3JtYW5jZSwgc28gd2UgY2hhbmdlIHRoZQorCQkgKiBzaGlmdDoKKwkJICovCisJCXRtcCA9ICoocCsrKTsKKwkJdG1wIHw9IF9fc3dhYjMyKH4wVUwgPj4gKDMyLW9mZnNldCkpOworCQlpZihzaXplIDwgMzIpCisJCQlnb3RvIGZvdW5kX2ZpcnN0OworCQlpZih+dG1wKQorCQkJZ290byBmb3VuZF9taWRkbGU7CisJCXNpemUgLT0gMzI7CisJCXJlc3VsdCArPSAzMjsKKwl9CisJd2hpbGUoc2l6ZSAmIH4zMVVMKSB7CisJCWlmKH4odG1wID0gKihwKyspKSkKKwkJCWdvdG8gZm91bmRfbWlkZGxlOworCQlyZXN1bHQgKz0gMzI7CisJCXNpemUgLT0gMzI7CisJfQorCWlmKCFzaXplKQorCQlyZXR1cm4gcmVzdWx0OworCXRtcCA9ICpwOworCitmb3VuZF9maXJzdDoKKwkvKiB0bXAgaXMgbGl0dGxlIGVuZGlhbiwgc28gd2Ugd291bGQgaGF2ZSB0byBzd2FiIHRoZSBzaGlmdCwKKwkgKiBzZWUgYWJvdmUuIEJ1dCB0aGVuIHdlIGhhdmUgdG8gc3dhYiB0bXAgYmVsb3cgZm9yIGZmeiwgc28KKwkgKiB3ZSBtaWdodCBhcyB3ZWxsIGRvIHRoaXMgaGVyZS4KKwkgKi8KKwlyZXR1cm4gcmVzdWx0ICsgZmZ6KF9fc3dhYjMyKHRtcCkgfCAofjBVTCA8PCBzaXplKSk7Citmb3VuZF9taWRkbGU6CisJcmV0dXJuIHJlc3VsdCArIGZmeihfX3N3YWIzMih0bXApKTsKK30KKyNlbmRpZgorCisjZGVmaW5lIGV4dDJfc2V0X2JpdF9hdG9taWMobG9jaywgbnIsIGFkZHIpCQlcCisJKHsJCQkJCQlcCisJCWludCByZXQ7CQkJCVwKKwkJc3Bpbl9sb2NrKGxvY2spOwkJCVwKKwkJcmV0ID0gZXh0Ml9zZXRfYml0KChuciksIChhZGRyKSk7CVwKKwkJc3Bpbl91bmxvY2sobG9jayk7CQkJXAorCQlyZXQ7CQkJCQlcCisJfSkKKworI2RlZmluZSBleHQyX2NsZWFyX2JpdF9hdG9taWMobG9jaywgbnIsIGFkZHIpCQlcCisJKHsJCQkJCQlcCisJCWludCByZXQ7CQkJCVwKKwkJc3Bpbl9sb2NrKGxvY2spOwkJCVwKKwkJcmV0ID0gZXh0Ml9jbGVhcl9iaXQoKG5yKSwgKGFkZHIpKTsJXAorCQlzcGluX3VubG9jayhsb2NrKTsJCQlcCisJCXJldDsJCQkJCVwKKwl9KQorCisvKiBCaXRtYXAgZnVuY3Rpb25zIGZvciB0aGUgbWluaXggZmlsZXN5c3RlbS4gICovCisjZGVmaW5lIG1pbml4X3Rlc3RfYW5kX3NldF9iaXQobnIsYWRkcikJCV9fdGVzdF9hbmRfc2V0X2JpdChucixhZGRyKQorI2RlZmluZSBtaW5peF9zZXRfYml0KG5yLGFkZHIpCQkJX19zZXRfYml0KG5yLGFkZHIpCisjZGVmaW5lIG1pbml4X3Rlc3RfYW5kX2NsZWFyX2JpdChucixhZGRyKQlfX3Rlc3RfYW5kX2NsZWFyX2JpdChucixhZGRyKQorI2RlZmluZSBtaW5peF90ZXN0X2JpdChucixhZGRyKSB0ZXN0X2JpdChucixhZGRyKQorI2RlZmluZSBtaW5peF9maW5kX2ZpcnN0X3plcm9fYml0KGFkZHIsc2l6ZSkJZmluZF9maXJzdF96ZXJvX2JpdChhZGRyLHNpemUpCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfQVNNX00zMlJfQklUT1BTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvYnVnLmggYi9pbmNsdWRlL2FzbS1tMzJyL2J1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjYzA0NjIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL2J1Zy5oCkBAIC0wLDAgKzEsNCBAQAorI2lmbmRlZiBfTTMyUl9CVUdfSAorI2RlZmluZSBfTTMyUl9CVUdfSAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2J1Zy5oPgorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL2J1Z3MuaCBiL2luY2x1ZGUvYXNtLW0zMnIvYnVncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhNTZmNjYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL2J1Z3MuaApAQCAtMCwwICsxLDIxIEBACisjaWZuZGVmIF9BU01fTTMyUl9CVUdTX0gKKyNkZWZpbmUgX0FTTV9NMzJSX0JVR1NfSAorCisvKiAkSWQkICovCisKKy8qCisgKiBUaGlzIGlzIGluY2x1ZGVkIGJ5IGluaXQvbWFpbi5jIHRvIGNoZWNrIGZvciBhcmNoaXRlY3R1cmUtZGVwZW5kZW50IGJ1Z3MuCisgKgorICogTmVlZHM6CisgKiAgICAgdm9pZCBjaGVja19idWdzKHZvaWQpOworICovCisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorCitzdGF0aWMgdm9pZCBfX2luaXQgY2hlY2tfYnVncyh2b2lkKQoreworCWV4dGVybiB1bnNpZ25lZCBsb25nIGxvb3BzX3Blcl9qaWZmeTsKKworCWN1cnJlbnRfY3B1X2RhdGEubG9vcHNfcGVyX2ppZmZ5ID0gbG9vcHNfcGVyX2ppZmZ5OworfQorCisjZW5kaWYgIC8qIF9BU01fTTMyUl9CVUdTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvYnl0ZW9yZGVyLmggYi9pbmNsdWRlL2FzbS1tMzJyL2J5dGVvcmRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjMGI5YTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL2J5dGVvcmRlci5oCkBAIC0wLDAgKzEsMTkgQEAKKyNpZm5kZWYgX0FTTV9NMzJSX0JZVEVPUkRFUl9ICisjZGVmaW5lIF9BU01fTTMyUl9CWVRFT1JERVJfSAorCisvKiAkSWQkICovCisKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKworI2lmICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykgfHwgZGVmaW5lZChfX0tFUk5FTF9fKQorIyAgZGVmaW5lIF9fQllURU9SREVSX0hBU19VNjRfXworIyAgZGVmaW5lIF9fU1dBQl82NF9USFJVXzMyX18KKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fXykKKyMgIGluY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9saXR0bGVfZW5kaWFuLmg+CisjZWxzZQorIyAgaW5jbHVkZSA8bGludXgvYnl0ZW9yZGVyL2JpZ19lbmRpYW4uaD4KKyNlbmRpZgorCisjZW5kaWYgLyogX0FTTV9NMzJSX0JZVEVPUkRFUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL2NhY2hlLmggYi9pbmNsdWRlL2FzbS1tMzJyL2NhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI0ODIwNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvY2FjaGUuaApAQCAtMCwwICsxLDEyIEBACisjaWZuZGVmIF9BU01fTTMyUl9DQUNIRV9ICisjZGVmaW5lIF9BU01fTTMyUl9DQUNIRV9ICisKKy8qICRJZCQgKi8KKworLyogTDEgY2FjaGUgbGluZSBzaXplICovCisjZGVmaW5lIEwxX0NBQ0hFX1NISUZUCQk0CisjZGVmaW5lIEwxX0NBQ0hFX0JZVEVTCQkoMSA8PCBMMV9DQUNIRV9TSElGVCkKKworI2RlZmluZSBMMV9DQUNIRV9TSElGVF9NQVgJNAorCisjZW5kaWYgIC8qIF9BU01fTTMyUl9DQUNIRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL2NhY2hlY3RsLmggYi9pbmNsdWRlL2FzbS1tMzJyL2NhY2hlY3RsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFhYjhmNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvY2FjaGVjdGwuaApAQCAtMCwwICsxLDI2IEBACisvKgorICogY2FjaGVjdGwuaCAtLSBkZWZpbmVzIGZvciBNMzJSIGNhY2hlIGNvbnRyb2wgc3lzdGVtIGNhbGxzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzIGJ5IEthenVoaXJvIEluYW9rYQorICovCisjaWZuZGVmCV9fQVNNX00zMlJfQ0FDSEVDVEwKKyNkZWZpbmUJX19BU01fTTMyUl9DQUNIRUNUTAorCisvKgorICogT3B0aW9ucyBmb3IgY2FjaGVmbHVzaCBzeXN0ZW0gY2FsbAorICoKKyAqIGNhY2hlZmx1c2goKSBpcyBjdXJyZW50bHkgZmx1Y2hfY2FjaGVfYWxsKCkuCisgKi8KKyNkZWZpbmUJSUNBQ0hFCSgxPDwwKQkJLyogZmx1c2ggaW5zdHJ1Y3Rpb24gY2FjaGUgICAgICAgICovCisjZGVmaW5lCURDQUNIRQkoMTw8MSkJCS8qIHdyaXRlYmFjayBhbmQgZmx1c2ggZGF0YSBjYWNoZSAqLworI2RlZmluZQlCQ0FDSEUJKElDQUNIRXxEQ0FDSEUpCS8qIGZsdXNoIGJvdGggY2FjaGVzICAgICAgICAgICAgICAqLworCisvKgorICogQ2FjaGluZyBtb2RlcyBmb3IgdGhlIGNhY2hlY3RsKDIpIGNhbGwKKyAqCisgKiBjYWNoZWN0bCgyKSBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZCBhbmQgcmV0dXJucyBFTk9TWVMuCisgKi8KKyNkZWZpbmUgQ0FDSEVBQkxFCTAJLyogbWFrZSBwYWdlcyBjYWNoZWFibGUgKi8KKyNkZWZpbmUgVU5DQUNIRUFCTEUJMQkvKiBtYWtlIHBhZ2VzIHVuY2FjaGVhYmxlICovCisKKyNlbmRpZgkvKiBfX0FTTV9NMzJSX0NBQ0hFQ1RMICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL2NhY2hlZmx1c2guaCBiL2luY2x1ZGUvYXNtLW0zMnIvY2FjaGVmbHVzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2ZmM0YzMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL2NhY2hlZmx1c2guaApAQCAtMCwwICsxLDY4IEBACisjaWZuZGVmIF9BU01fTTMyUl9DQUNIRUZMVVNIX0gKKyNkZWZpbmUgX0FTTV9NMzJSX0NBQ0hFRkxVU0hfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKworZXh0ZXJuIHZvaWQgX2ZsdXNoX2NhY2hlX2FsbCh2b2lkKTsKK2V4dGVybiB2b2lkIF9mbHVzaF9jYWNoZV9jb3B5YmFja19hbGwodm9pZCk7CisKKyNpZiBkZWZpbmVkKENPTkZJR19DSElQX00zMjcwMCkgfHwgZGVmaW5lZChDT05GSUdfQ0hJUF9PUFNQKQorI2RlZmluZSBmbHVzaF9jYWNoZV9hbGwoKQkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfbW0obW0pCQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9jYWNoZV9yYW5nZSh2bWEsIHN0YXJ0LCBlbmQpCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfcGFnZSh2bWEsIHZtYWRkciwgcGZuKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpCQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9kY2FjaGVfbW1hcF9sb2NrKG1hcHBpbmcpCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2RjYWNoZV9tbWFwX3VubG9jayhtYXBwaW5nKQlkbyB7IH0gd2hpbGUgKDApCisjaWZuZGVmIENPTkZJR19TTVAKKyNkZWZpbmUgZmx1c2hfaWNhY2hlX3JhbmdlKHN0YXJ0LCBlbmQpCQlfZmx1c2hfY2FjaGVfY29weWJhY2tfYWxsKCkKKyNkZWZpbmUgZmx1c2hfaWNhY2hlX3BhZ2Uodm1hLHBnKQkJX2ZsdXNoX2NhY2hlX2NvcHliYWNrX2FsbCgpCisjZGVmaW5lIGZsdXNoX2ljYWNoZV91c2VyX3JhbmdlKHZtYSxwZyxhZHIsbGVuKQlfZmx1c2hfY2FjaGVfY29weWJhY2tfYWxsKCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfc2lndHJhbXAoYWRkcikJCV9mbHVzaF9jYWNoZV9jb3B5YmFja19hbGwoKQorI2Vsc2UJLyogQ09ORklHX1NNUCAqLworZXh0ZXJuIHZvaWQgc21wX2ZsdXNoX2NhY2hlX2FsbCh2b2lkKTsKKyNkZWZpbmUgZmx1c2hfaWNhY2hlX3JhbmdlKHN0YXJ0LCBlbmQpCQlzbXBfZmx1c2hfY2FjaGVfYWxsKCkKKyNkZWZpbmUgZmx1c2hfaWNhY2hlX3BhZ2Uodm1hLHBnKQkJc21wX2ZsdXNoX2NhY2hlX2FsbCgpCisjZGVmaW5lIGZsdXNoX2ljYWNoZV91c2VyX3JhbmdlKHZtYSxwZyxhZHIsbGVuKQlzbXBfZmx1c2hfY2FjaGVfYWxsKCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfc2lndHJhbXAoYWRkcikJCV9mbHVzaF9jYWNoZV9jb3B5YmFja19hbGwoKQorI2VuZGlmCS8qIENPTkZJR19TTVAgKi8KKyNlbGlmIGRlZmluZWQoQ09ORklHX0NISVBfTTMyMTAyKQorI2RlZmluZSBmbHVzaF9jYWNoZV9hbGwoKQkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfbW0obW0pCQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9jYWNoZV9yYW5nZSh2bWEsIHN0YXJ0LCBlbmQpCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfcGFnZSh2bWEsIHZtYWRkciwgcGZuKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpCQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9kY2FjaGVfbW1hcF9sb2NrKG1hcHBpbmcpCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2RjYWNoZV9tbWFwX3VubG9jayhtYXBwaW5nKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2ljYWNoZV9yYW5nZShzdGFydCwgZW5kKQkJX2ZsdXNoX2NhY2hlX2FsbCgpCisjZGVmaW5lIGZsdXNoX2ljYWNoZV9wYWdlKHZtYSxwZykJCV9mbHVzaF9jYWNoZV9hbGwoKQorI2RlZmluZSBmbHVzaF9pY2FjaGVfdXNlcl9yYW5nZSh2bWEscGcsYWRyLGxlbikJX2ZsdXNoX2NhY2hlX2FsbCgpCisjZGVmaW5lIGZsdXNoX2NhY2hlX3NpZ3RyYW1wKGFkZHIpCQlfZmx1c2hfY2FjaGVfYWxsKCkKKyNlbHNlCisjZGVmaW5lIGZsdXNoX2NhY2hlX2FsbCgpCQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9jYWNoZV9tbShtbSkJCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2NhY2hlX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9jYWNoZV9wYWdlKHZtYSwgdm1hZGRyLCBwZm4pCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSkJCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2RjYWNoZV9tbWFwX2xvY2sobWFwcGluZykJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfZGNhY2hlX21tYXBfdW5sb2NrKG1hcHBpbmcpCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfaWNhY2hlX3JhbmdlKHN0YXJ0LCBlbmQpCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2ljYWNoZV9wYWdlKHZtYSxwZykJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfaWNhY2hlX3VzZXJfcmFuZ2Uodm1hLHBnLGFkcixsZW4pCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfc2lndHJhbXAoYWRkcikJCWRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgkvKiBDT05GSUdfQ0hJUF8qICovCisKKyNkZWZpbmUgZmx1c2hfY2FjaGVfdm1hcChzdGFydCwgZW5kKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2NhY2hlX3Z1bm1hcChzdGFydCwgZW5kKQlkbyB7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgY29weV90b191c2VyX3BhZ2Uodm1hLCBwYWdlLCB2YWRkciwgZHN0LCBzcmMsIGxlbikJXAorZG8gewkJCQkJCQkJXAorCW1lbWNweShkc3QsIHNyYywgbGVuKTsJCQkJCVwKKwlmbHVzaF9pY2FjaGVfdXNlcl9yYW5nZSh2bWEsIHBhZ2UsIHZhZGRyLCBsZW4pOwkJXAorfSB3aGlsZSAoMCkKKyNkZWZpbmUgY29weV9mcm9tX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIHZhZGRyLCBkc3QsIHNyYywgbGVuKQlcCisJbWVtY3B5KGRzdCwgc3JjLCBsZW4pCisKKyNlbmRpZiAvKiBfQVNNX00zMlJfQ0FDSEVGTFVTSF9IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvY2hlY2tzdW0uaCBiL2luY2x1ZGUvYXNtLW0zMnIvY2hlY2tzdW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWYzN2RiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTMyci9jaGVja3N1bS5oCkBAIC0wLDAgKzEsMjA4IEBACisjaWZkZWYgX19LRVJORUxfXworI2lmbmRlZiBfQVNNX00zMlJfQ0hFQ0tTVU1fSAorI2RlZmluZSBfQVNNX00zMlJfQ0hFQ0tTVU1fSAorCisvKgorICogaW5jbHVkZS9hc20tbTMyci9jaGVja3N1bS5oCisgKgorICogSVAvVENQL1VEUCBjaGVja3N1bSByb3V0aW5lcworICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFNvbWUgY29kZSB0YWtlbiBmcm9tIG1pcHMgYW5kIHBhcmlzYyBhcmNoaXRlY3R1cmUuCisgKgorICogICAgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyICBIaXJveXVraSBLb25kbywgSGlyb2thenUgVGFrYXRhCisgKiAgICBDb3B5cmlnaHQgKEMpIDIwMDQgIEhpcm9rYXp1IFRha2F0YSA8dGFrYXRhIGF0IGxpbnV4LW0zMnIub3JnPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbjYuaD4KKworLyoKKyAqIGNvbXB1dGVzIHRoZSBjaGVja3N1bSBvZiBhIG1lbW9yeSBibG9jayBhdCBidWZmLCBsZW5ndGggbGVuLAorICogYW5kIGFkZHMgaW4gInN1bSIgKDMyLWJpdCkKKyAqCisgKiByZXR1cm5zIGEgMzItYml0IG51bWJlciBzdWl0YWJsZSBmb3IgZmVlZGluZyBpbnRvIGl0c2VsZgorICogb3IgY3N1bV90Y3B1ZHBfbWFnaWMKKyAqCisgKiB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGggZXZlbiBsZW5ndGhzLCBleGNlcHQKKyAqIGZvciB0aGUgbGFzdCBmcmFnbWVudCwgd2hpY2ggbWF5IGJlIG9kZAorICoKKyAqIGl0J3MgYmVzdCB0byBoYXZlIGJ1ZmYgYWxpZ25lZCBvbiBhIDMyLWJpdCBib3VuZGFyeQorICovCithc21saW5rYWdlIHVuc2lnbmVkIGludCBjc3VtX3BhcnRpYWwoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmZiwKKwkJCQkgICAgIGludCBsZW4sIHVuc2lnbmVkIGludCBzdW0pOworCisvKgorICogVGhlIHNhbWUgYXMgY3N1bV9wYXJ0aWFsLCBidXQgY29waWVzIGZyb20gc3JjIHdoaWxlIGl0IGNoZWNrc3Vtcy4KKyAqCisgKiBIZXJlIGV2ZW4gbW9yZSBpbXBvcnRhbnQgdG8gYWxpZ24gc3JjIGFuZCBkc3Qgb24gYSAzMi1iaXQgKG9yIGV2ZW4KKyAqIGJldHRlciA2NC1iaXQpIGJvdW5kYXJ5CisgKi8KK2V4dGVybiB1bnNpZ25lZCBpbnQgY3N1bV9wYXJ0aWFsX2NvcHlfbm9jaGVjayhjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMsCisJCQkJCSAgICAgIHVuc2lnbmVkIGNoYXIgKmRzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgc3VtKTsKKworLyoKKyAqIFRoaXMgaXMgYSBuZXcgdmVyc2lvbiBvZiB0aGUgYWJvdmUgdGhhdCByZWNvcmRzIGVycm9ycyBpdCBmaW5kcyBpbiAqZXJycCwKKyAqIGJ1dCBjb250aW51ZXMgYW5kIHplcm9zIHRocmUgcmVzdCBvZiB0aGUgYnVmZmVyLgorICovCitleHRlcm4gdW5zaWduZWQgaW50IGNzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlcihjb25zdCB1bnNpZ25lZCBjaGFyIF9fdXNlciAqc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZHN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbiwgdW5zaWduZWQgaW50IHN1bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqZXJyX3B0cik7CisKKy8qCisgKglGb2xkIGEgcGFydGlhbCBjaGVja3N1bQorICovCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNzdW1fZm9sZCh1bnNpZ25lZCBpbnQgc3VtKQoreworCXVuc2lnbmVkIGxvbmcgdG1wcmVnOworCV9fYXNtX18oCisJCSIJc2xsMwklMSwgJTAsICMxNiBcbiIKKwkJIgljbXAJJTAsICUwIFxuIgorCQkiCWFkZHgJJTAsICUxIFxuIgorCQkiCWxkaQklMSwgIzAgXG4iCisJCSIJc3JsaQklMCwgIzE2IFxuIgorCQkiCWFkZHgJJTAsICUxIFxuIgorCQkiCXhvcjMJJTAsICUwLCAjMHgwMDAwZmZmZiBcbiIKKwkJOiAiPXIiIChzdW0pLCAiPSZyIiAodG1wcmVnKQorCQk6ICIwIiAgKHN1bSkKKwkJOiAiY2JpdCIKKwkpOworCXJldHVybiBzdW07Cit9CisKKy8qCisgKiBUaGlzIGlzIGEgdmVyc2lvbiBvZiBpcF9jb21wdXRlX2NzdW0oKSBvcHRpbWl6ZWQgZm9yIElQIGhlYWRlcnMsCisgKiB3aGljaCBhbHdheXMgY2hlY2tzdW0gb24gNCBvY3RldCBib3VuZGFyaWVzLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IGlwX2Zhc3RfY3N1bSh1bnNpZ25lZCBjaGFyICogaXBoLAorCQkJCQkgIHVuc2lnbmVkIGludCBpaGwpIHsKKwl1bnNpZ25lZCBsb25nIHN1bSwgdG1wcmVnMCwgdG1wcmVnMTsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkiCWxkCSUwLCBAJTErIFxuIgorCQkiCWFkZGkJJTIsICMtNCBcbiIKKwkJIiMJYmdlegklMiwgMmYgXG4iCisJCSIJY21wCSUwLCAlMCBcbiIKKwkJIglsZAklMywgQCUxKyBcbiIKKwkJIglsZAklNCwgQCUxKyBcbiIKKwkJIglhZGR4CSUwLCAlMyBcbiIKKwkJIglsZAklMywgQCUxKyBcbiIKKwkJIglhZGR4CSUwLCAlNCBcbiIKKwkJIglhZGR4CSUwLCAlMyBcbiIKKwkJIgkuZmlsbGluc25cbiIKKwkJIjE6IFxuIgorCQkiCWxkCSU0LCBAJTErIFxuIgorCQkiCWFkZGkJJTIsICMtMSBcbiIKKwkJIglhZGR4CSUwLCAlNCBcbiIKKwkJIgliZ3R6CSUyLCAxYiBcbiIKKwkJIlxuIgorCQkiCWxkaQklMywgIzAgXG4iCisJCSIJYWRkeAklMCwgJTMgXG4iCisJCSIJLmZpbGxpbnNuXG4iCisJCSIyOiBcbiIKKwkvKiBTaW5jZSB0aGUgaW5wdXQgcmVnaXN0ZXJzIHdoaWNoIGFyZSBsb2FkZWQgd2l0aCBpcGggYW5kIGlwbAorCSAgIGFyZSBtb2RpZmllZCwgd2UgbXVzdCBhbHNvIHNwZWNpZnkgdGhlbSBhcyBvdXRwdXRzLCBvciBnY2MKKwkgICB3aWxsIGFzc3VtZSB0aGV5IGNvbnRhaW4gdGhlaXIgb3JpZ2luYWwgdmFsdWVzLiAqLworCTogIj0mciIgKHN1bSksICI9ciIgKGlwaCksICI9ciIgKGlobCksICI9JnIiICh0bXByZWcwKSwgIj0mciIgKHRtcHJlZzEpCisJOiAiMSIgKGlwaCksICIyIiAoaWhsKQorCTogImNiaXQiLCAibWVtb3J5Iik7CisKKwlyZXR1cm4gY3N1bV9mb2xkKHN1bSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjc3VtX3RjcHVkcF9ub2ZvbGQodW5zaWduZWQgbG9uZyBzYWRkciwKKwkJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgZGFkZHIsCisJCQkJCSAgICAgICB1bnNpZ25lZCBzaG9ydCBsZW4sCisJCQkJCSAgICAgICB1bnNpZ25lZCBzaG9ydCBwcm90bywKKwkJCQkJICAgICAgIHVuc2lnbmVkIGludCBzdW0pCit7CisjaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCisJdW5zaWduZWQgbG9uZyBsZW5fcHJvdG8gPSAobnRvaHMobGVuKTw8MTYpK3Byb3RvKjI1NjsKKyNlbHNlCisJdW5zaWduZWQgbG9uZyBsZW5fcHJvdG8gPSAocHJvdG88PDE2KStsZW47CisjZW5kaWYKKwl1bnNpZ25lZCBsb25nIHRtcHJlZzsKKworCV9fYXNtX18oCisJCSIJY21wCSUwLCAlMCBcbiIKKwkJIglhZGR4CSUwLCAlMiBcbiIKKwkJIglhZGR4CSUwLCAlMyBcbiIKKwkJIglhZGR4CSUwLCAlNCBcbiIKKwkJIglsZGkJJTEsICMwIFxuIgorCQkiCWFkZHgJJTAsICUxIFxuIgorCQk6ICI9ciIgKHN1bSksICI9JnIiICh0bXByZWcpCisJCTogInIiIChkYWRkciksICJyIiAoc2FkZHIpLCAiciIgKGxlbl9wcm90byksICIwIiAoc3VtKQorCQk6ICJjYml0IgorCSk7CisKKwlyZXR1cm4gc3VtOworfQorCisvKgorICogY29tcHV0ZXMgdGhlIGNoZWNrc3VtIG9mIHRoZSBUQ1AvVURQIHBzZXVkby1oZWFkZXIKKyAqIHJldHVybnMgYSAxNi1iaXQgY2hlY2tzdW0sIGFscmVhZHkgY29tcGxlbWVudGVkCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgaW50IGNzdW1fdGNwdWRwX21hZ2ljKHVuc2lnbmVkIGxvbmcgc2FkZHIsCisJCQkJCQkgICB1bnNpZ25lZCBsb25nIGRhZGRyLAorCQkJCQkJICAgdW5zaWduZWQgc2hvcnQgbGVuLAorCQkJCQkJICAgdW5zaWduZWQgc2hvcnQgcHJvdG8sCisJCQkJCQkgICB1bnNpZ25lZCBpbnQgc3VtKQoreworCXJldHVybiBjc3VtX2ZvbGQoY3N1bV90Y3B1ZHBfbm9mb2xkKHNhZGRyLGRhZGRyLGxlbixwcm90byxzdW0pKTsKK30KKworLyoKKyAqIHRoaXMgcm91dGluZSBpcyB1c2VkIGZvciBtaXNjZWxsYW5lb3VzIElQLWxpa2UgY2hlY2tzdW1zLCBtYWlubHkKKyAqIGluIGljbXAuYworICovCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgaXBfY29tcHV0ZV9jc3VtKHVuc2lnbmVkIGNoYXIgKiBidWZmLCBpbnQgbGVuKSB7CisJcmV0dXJuIGNzdW1fZm9sZCAoY3N1bV9wYXJ0aWFsKGJ1ZmYsIGxlbiwgMCkpOworfQorCisjZGVmaW5lIF9IQVZFX0FSQ0hfSVBWNl9DU1VNCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IGludCBjc3VtX2lwdjZfbWFnaWMoc3RydWN0IGluNl9hZGRyICpzYWRkciwKKwkJCQkJCSBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAorCQkJCQkJIF9fdTE2IGxlbiwKKwkJCQkJCSB1bnNpZ25lZCBzaG9ydCBwcm90bywKKwkJCQkJCSB1bnNpZ25lZCBpbnQgc3VtKQoreworCXVuc2lnbmVkIGxvbmcgdG1wcmVnMCwgdG1wcmVnMSwgdG1wcmVnMiwgdG1wcmVnMzsKKwlfX2FzbV9fKAorCQkiCWxkCSUxLCBAKCU1KSBcbiIKKwkJIglsZAklMiwgQCg0LCU1KSBcbiIKKwkJIglsZAklMywgQCg4LCU1KSBcbiIKKwkJIglsZAklNCwgQCgxMiwlNSkgXG4iCisJCSIJYWRkCSUwLCAlMSBcbiIKKwkJIglhZGR4CSUwLCAlMiBcbiIKKwkJIglhZGR4CSUwLCAlMyBcbiIKKwkJIglhZGR4CSUwLCAlNCBcbiIKKwkJIglsZAklMSwgQCglNikgXG4iCisJCSIJbGQJJTIsIEAoNCwlNikgXG4iCisJCSIJbGQJJTMsIEAoOCwlNikgXG4iCisJCSIJbGQJJTQsIEAoMTIsJTYpIFxuIgorCQkiCWFkZHgJJTAsICUxIFxuIgorCQkiCWFkZHgJJTAsICUyIFxuIgorCQkiCWFkZHgJJTAsICUzIFxuIgorCQkiCWFkZHgJJTAsICU0IFxuIgorCQkiCWFkZHgJJTAsICU3IFxuIgorCQkiCWFkZHgJJTAsICU4IFxuIgorCQkiCWxkaQklMSwgIzAgXG4iCisJCSIJYWRkeAklMCwgJTEgXG4iCisJCTogIj0mciIgKHN1bSksICI9JnIiICh0bXByZWcwKSwgIj0mciIgKHRtcHJlZzEpLAorCQkgICI9JnIiICh0bXByZWcyKSwgIj0mciIgKHRtcHJlZzMpCisJCTogInIiIChzYWRkciksICJyIiAoZGFkZHIpLAorCQkgICJyIiAoaHRvbmwoKF9fdTMyKSAobGVuKSkpLCAiciIgKGh0b25sKHByb3RvKSksICIwIiAoc3VtKQorCQk6ICJjYml0IgorCSk7CisKKwlyZXR1cm4gY3N1bV9mb2xkKHN1bSk7Cit9CisKKyNlbmRpZiAvKiBfQVNNX00zMlJfQ0hFQ0tTVU1fSCAqLworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvY3B1dGltZS5oIGIvaW5jbHVkZS9hc20tbTMyci9jcHV0aW1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE0NzU1MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvY3B1dGltZS5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfX00zMlJfQ1BVVElNRV9ICisjZGVmaW5lIF9fTTMyUl9DUFVUSU1FX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2NwdXRpbWUuaD4KKworI2VuZGlmIC8qIF9fTTMyUl9DUFVUSU1FX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvY3VycmVudC5oIGIvaW5jbHVkZS9hc20tbTMyci9jdXJyZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE5ZDkyN2YKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL2N1cnJlbnQuaApAQCAtMCwwICsxLDE4IEBACisjaWZuZGVmIF9BU01fTTMyUl9DVVJSRU5UX0gKKyNkZWZpbmUgX0FTTV9NMzJSX0NVUlJFTlRfSAorCisvKiAkSWQkICovCisKKyNpbmNsdWRlIDxsaW51eC90aHJlYWRfaW5mby5oPgorCitzdHJ1Y3QgdGFza19zdHJ1Y3Q7CisKK3N0YXRpYyBfX2lubGluZV9fIHN0cnVjdCB0YXNrX3N0cnVjdCAqZ2V0X2N1cnJlbnQodm9pZCkKK3sKKwlyZXR1cm4gY3VycmVudF90aHJlYWRfaW5mbygpLT50YXNrOworfQorCisjZGVmaW5lIGN1cnJlbnQJKGdldF9jdXJyZW50KCkpCisKKyNlbmRpZgkvKiBfQVNNX00zMlJfQ1VSUkVOVF9IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvZGVsYXkuaCBiL2luY2x1ZGUvYXNtLW0zMnIvZGVsYXkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjg1ZWFlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTMyci9kZWxheS5oCkBAIC0wLDAgKzEsMjggQEAKKyNpZm5kZWYgX0FTTV9NMzJSX0RFTEFZX0gKKyNkZWZpbmUgX0FTTV9NMzJSX0RFTEFZX0gKKworLyogJElkJCAqLworCisvKgorICogQ29weXJpZ2h0IChDKSAxOTkzIExpbnVzIFRvcnZhbGRzCisgKgorICogRGVsYXkgcm91dGluZXMgY2FsbGluZyBmdW5jdGlvbnMgaW4gYXJjaC9tMzJyL2xpYi9kZWxheS5jCisgKi8KKworZXh0ZXJuIHZvaWQgX19iYWRfdWRlbGF5KHZvaWQpOworZXh0ZXJuIHZvaWQgX19iYWRfbmRlbGF5KHZvaWQpOworCitleHRlcm4gdm9pZCBfX3VkZWxheSh1bnNpZ25lZCBsb25nIHVzZWNzKTsKK2V4dGVybiB2b2lkIF9fbmRlbGF5KHVuc2lnbmVkIGxvbmcgbnNlY3MpOworZXh0ZXJuIHZvaWQgX19jb25zdF91ZGVsYXkodW5zaWduZWQgbG9uZyB1c2Vjcyk7CitleHRlcm4gdm9pZCBfX2RlbGF5KHVuc2lnbmVkIGxvbmcgbG9vcHMpOworCisjZGVmaW5lIHVkZWxheShuKSAoX19idWlsdGluX2NvbnN0YW50X3AobikgPyBcCisJKChuKSA+IDIwMDAwID8gX19iYWRfdWRlbGF5KCkgOiBfX2NvbnN0X3VkZWxheSgobikgKiAweDEwYzd1bCkpIDogXAorCV9fdWRlbGF5KG4pKQorCisjZGVmaW5lIG5kZWxheShuKSAoX19idWlsdGluX2NvbnN0YW50X3AobikgPyBcCisJKChuKSA+IDIwMDAwID8gX19iYWRfbmRlbGF5KCkgOiBfX2NvbnN0X3VkZWxheSgobikgKiA1dWwpKSA6IFwKKwlfX25kZWxheShuKSkKKworI2VuZGlmIC8qIF9BU01fTTMyUl9ERUxBWV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL2RpdjY0LmggYi9pbmNsdWRlL2FzbS1tMzJyL2RpdjY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE3YTUxYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvZGl2NjQuaApAQCAtMCwwICsxLDM4IEBACisjaWZuZGVmIF9BU01fTTMyUl9ESVY2NAorI2RlZmluZSBfQVNNX00zMlJfRElWNjQKKworLyogJElkJCAqLworCisvKiB1bnNpZ25lZCBsb25nIGxvbmcgZGl2aXNpb24uCisgKiBJbnB1dDoKKyAqICB1bnNpZ25lZCBsb25nIGxvbmcgIG4KKyAqICB1bnNpZ25lZCBsb25nICBiYXNlCisgKiBPdXRwdXQ6CisgKiAgbiA9IG4gLyBiYXNlOworICogIHJldHVybiB2YWx1ZSA9IG4gJSBiYXNlOworICovCisjZGVmaW5lIGRvX2RpdihuLCBiYXNlKQkJCQkJCVwKKyh7CQkJCQkJCQlcCisJdW5zaWduZWQgbG9uZyBfcmVzLCBfaGlnaCwgX21pZCwgX2xvdzsJCQlcCisJCQkJCQkJCVwKKwlfbG93ID0gKG4pICYgMHhmZmZmZmZmZlVMOwkJCQlcCisJX2hpZ2ggPSAobikgPj4gMzI7CQkJCQlcCisJaWYgKF9oaWdoKSB7CQkJCQkJXAorCQlfbWlkID0gKF9oaWdoICUgKHVuc2lnbmVkIGxvbmcpKGJhc2UpKSA8PCAxNjsJXAorCQlfaGlnaCA9IF9oaWdoIC8gKHVuc2lnbmVkIGxvbmcpKGJhc2UpOwkJXAorCQlfbWlkICs9IF9sb3cgPj4gMTY7CQkJCVwKKwkJX2xvdyAmPSAweDAwMDBmZmZmVUw7CQkJCVwKKwkJX2xvdyArPSAoX21pZCAlICh1bnNpZ25lZCBsb25nKShiYXNlKSkgPDwgMTY7CVwKKwkJX21pZCA9IF9taWQgLyAodW5zaWduZWQgbG9uZykoYmFzZSk7CQlcCisJCV9yZXMgPSBfbG93ICUgKHVuc2lnbmVkIGxvbmcpKGJhc2UpOwkJXAorCQlfbG93ID0gX2xvdyAvICh1bnNpZ25lZCBsb25nKShiYXNlKTsJCVwKKwkJbiA9IF9sb3cgKyAoKGxvbmcgbG9uZylfbWlkIDw8IDE2KSArCQlcCisJCQkoKGxvbmcgbG9uZylfaGlnaCA8PCAzMik7CQlcCisJfSBlbHNlIHsJCQkJCQlcCisJCV9yZXMgPSBfbG93ICUgKHVuc2lnbmVkIGxvbmcpKGJhc2UpOwkJXAorCQluID0gKF9sb3cgLyAodW5zaWduZWQgbG9uZykoYmFzZSkpOwkJXAorCX0JCQkJCQkJXAorCV9yZXM7CQkJCQkJCVwKK30pCisKKyNlbmRpZiAgLyogX0FTTV9NMzJSX0RJVjY0ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL2RtYS1tYXBwaW5nLmggYi9pbmNsdWRlL2FzbS1tMzJyL2RtYS1tYXBwaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2EyZGIyOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvZG1hLW1hcHBpbmcuaApAQCAtMCwwICsxLDIzIEBACisjaWZuZGVmIF9BU01fTTMyUl9ETUFfTUFQUElOR19ICisjZGVmaW5lIF9BU01fTTMyUl9ETUFfTUFQUElOR19ICisKKy8qCisgKiBOT1RFOiBEbyBub3QgaW5jbHVkZSA8YXNtLWdlbmVyaWMvZG1hLW1hcHBpbmcuaD4KKyAqIEJlY2F1c2UgaXQgcmVxdWlyZXMgUENJIHN0dWZmcywgYnV0IGN1cnJlbnQgTTMyUiBkb24ndCBwcm92aWRlIHRoZXNlLgorICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqCitkbWFfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwKKwkJICAgaW50IGZsYWcpCit7CisJcmV0dXJuICh2b2lkICopTlVMTDsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitkbWFfZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCB2b2lkICpjcHVfYWRkciwKKwkJICAgIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSkKK3sKKwlyZXR1cm47Cit9CisKKyNlbmRpZiAvKiBfQVNNX00zMlJfRE1BX01BUFBJTkdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9kbWEuaCBiL2luY2x1ZGUvYXNtLW0zMnIvZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI2M2IwMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvZG1hLmgKQEAgLTAsMCArMSwxNCBAQAorI2lmbmRlZiBfQVNNX00zMlJfRE1BX0gKKyNkZWZpbmUgX0FTTV9NMzJSX0RNQV9ICisKKy8qICRJZCQgKi8KKworI2luY2x1ZGUgPGFzbS9pby5oPgorCisvKgorICogVGhlIG1heGltdW0gYWRkcmVzcyB0aGF0IHdlIGNhbiBwZXJmb3JtIGEgRE1BIHRyYW5zZmVyCisgKiB0byBvbiB0aGlzIHBsYXRmb3JtCisgKi8KKyNkZWZpbmUgTUFYX0RNQV9BRERSRVNTICAgICAgKFBBR0VfT0ZGU0VUKzB4MjAwMDAwMDApCisKKyNlbmRpZiAvKiBfQVNNX00zMlJfRE1BX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvZWxmLmggYi9pbmNsdWRlL2FzbS1tMzJyL2VsZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiZWU4YjIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL2VsZi5oCkBAIC0wLDAgKzEsMTM2IEBACisjaWZuZGVmIF9BU01fTTMyUl9fRUxGX0gKKyNkZWZpbmUgX0FTTV9NMzJSX19FTEZfSAorCisvKgorICogRUxGLXNwZWNpZmljIGRlZmluaXRpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OS0yMDA0LCBSZW5lc2FzIFRlY2hub2xvZ3kgQ29ycC4KKyAqICAgICAgSGlyb2thenUgVGFrYXRhIDx0YWthdGEgYXQgbGludXgtbTMyci5vcmc+CisgKi8KKworI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vdXNlci5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisKKy8qIE0zMlIgcmVsb2NhdGlvbiB0eXBlcyAgKi8KKyNkZWZpbmUJUl9NMzJSX05PTkUJCTAKKyNkZWZpbmUJUl9NMzJSXzE2CQkxCisjZGVmaW5lCVJfTTMyUl8zMgkJMgorI2RlZmluZQlSX00zMlJfMjQJCTMKKyNkZWZpbmUJUl9NMzJSXzEwX1BDUkVMCQk0CisjZGVmaW5lCVJfTTMyUl8xOF9QQ1JFTAkJNQorI2RlZmluZQlSX00zMlJfMjZfUENSRUwJCTYKKyNkZWZpbmUJUl9NMzJSX0hJMTZfVUxPCQk3CisjZGVmaW5lCVJfTTMyUl9ISTE2X1NMTwkJOAorI2RlZmluZQlSX00zMlJfTE8xNgkJOQorI2RlZmluZQlSX00zMlJfU0RBMTYJCTEwCisjZGVmaW5lCVJfTTMyUl9HTlVfVlRJTkhFUklUCTExCisjZGVmaW5lCVJfTTMyUl9HTlVfVlRFTlRSWQkxMgorCisjZGVmaW5lIFJfTTMyUl8xNl9SRUxBCQkzMworI2RlZmluZSBSX00zMlJfMzJfUkVMQQkJMzQKKyNkZWZpbmUgUl9NMzJSXzI0X1JFTEEJCTM1CisjZGVmaW5lIFJfTTMyUl8xMF9QQ1JFTF9SRUxBCTM2CisjZGVmaW5lIFJfTTMyUl8xOF9QQ1JFTF9SRUxBCTM3CisjZGVmaW5lIFJfTTMyUl8yNl9QQ1JFTF9SRUxBCTM4CisjZGVmaW5lIFJfTTMyUl9ISTE2X1VMT19SRUxBCTM5CisjZGVmaW5lIFJfTTMyUl9ISTE2X1NMT19SRUxBCTQwCisjZGVmaW5lIFJfTTMyUl9MTzE2X1JFTEEJNDEKKyNkZWZpbmUgUl9NMzJSX1NEQTE2X1JFTEEJNDIKKyNkZWZpbmUJUl9NMzJSX1JFTEFfR05VX1ZUSU5IRVJJVAk0MworI2RlZmluZQlSX00zMlJfUkVMQV9HTlVfVlRFTlRSWQk0NAorCisjZGVmaW5lIFJfTTMyUl9HT1QyNAkJNDgKKyNkZWZpbmUgUl9NMzJSXzI2X1BMVFJFTAk0OQorI2RlZmluZSBSX00zMlJfQ09QWQkJNTAKKyNkZWZpbmUgUl9NMzJSX0dMT0JfREFUCQk1MQorI2RlZmluZSBSX00zMlJfSk1QX1NMT1QJCTUyCisjZGVmaW5lIFJfTTMyUl9SRUxBVElWRQkJNTMKKyNkZWZpbmUgUl9NMzJSX0dPVE9GRgkJNTQKKyNkZWZpbmUgUl9NMzJSX0dPVFBDMjQJCTU1CisjZGVmaW5lIFJfTTMyUl9HT1QxNl9ISV9VTE8JNTYKKyNkZWZpbmUgUl9NMzJSX0dPVDE2X0hJX1NMTwk1NworI2RlZmluZSBSX00zMlJfR09UMTZfTE8JCTU4CisjZGVmaW5lIFJfTTMyUl9HT1RQQ19ISV9VTE8JNTkKKyNkZWZpbmUgUl9NMzJSX0dPVFBDX0hJX1NMTwk2MAorI2RlZmluZSBSX00zMlJfR09UUENfTE8JCTYxCisjZGVmaW5lIFJfTTMyUl9HT1RPRkZfSElfVUxPCTYyCisjZGVmaW5lIFJfTTMyUl9HT1RPRkZfSElfU0xPCTYzCisjZGVmaW5lIFJfTTMyUl9HT1RPRkZfTE8JNjQKKworI2RlZmluZSBSX00zMlJfTlVNCQkyNTYKKworLyoKKyAqIEVMRiByZWdpc3RlciBkZWZpbml0aW9ucy4uCisgKi8KKyNkZWZpbmUgRUxGX05HUkVHIChzaXplb2YgKHN0cnVjdCBwdF9yZWdzKSAvIHNpemVvZihlbGZfZ3JlZ190KSkKKwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGVsZl9ncmVnX3Q7Cit0eXBlZGVmIGVsZl9ncmVnX3QgZWxmX2dyZWdzZXRfdFtFTEZfTkdSRUddOworCisvKiBXZSBoYXZlIG5vIEZQIG11bXVtdS4gICovCit0eXBlZGVmIGRvdWJsZSBlbGZfZnByZWdfdDsKK3R5cGVkZWYgZWxmX2ZwcmVnX3QgZWxmX2ZwcmVnc2V0X3Q7CisKKy8qCisgKiBUaGlzIGlzIHVzZWQgdG8gZW5zdXJlIHdlIGRvbid0IGxvYWQgc29tZXRoaW5nIGZvciB0aGUgd3JvbmcgYXJjaGl0ZWN0dXJlLgorICovCisjZGVmaW5lIGVsZl9jaGVja19hcmNoKHgpIFwKKwkoKCh4KS0+ZV9tYWNoaW5lID09IEVNX00zMlIpIHx8ICgoeCktPmVfbWFjaGluZSA9PSBFTV9DWUdOVVNfTTMyUikpCisKKy8qCisgKiBUaGVzZSBhcmUgdXNlZCB0byBzZXQgcGFyYW1ldGVycyBpbiB0aGUgY29yZSBkdW1wcy4KKyAqLworI2RlZmluZSBFTEZfQ0xBU1MJRUxGQ0xBU1MzMgorI2lmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorI2RlZmluZSBFTEZfREFUQQlFTEZEQVRBMkxTQgorI2VsaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisjZGVmaW5lIEVMRl9EQVRBCUVMRkRBVEEyTVNCCisjZWxzZQorI2Vycm9yIG5vIGVuZGlhbiBkZWZpbmVkCisjZW5kaWYKKyNkZWZpbmUgRUxGX0FSQ0gJRU1fTTMyUgorCisvKiByMCBpcyBzZXQgYnkgbGQuc28gdG8gYSBwb2ludGVyIHRvIGEgZnVuY3Rpb24gd2hpY2ggbWlnaHQgYmUKKyAqIHJlZ2lzdGVyZWQgdXNpbmcgJ2F0ZXhpdCcuICBUaGlzIHByb3ZpZGVzIGEgbWVhbiBmb3IgdGhlIGR5bmFtaWMKKyAqIGxpbmtlciB0byBjYWxsIERUX0ZJTkkgZnVuY3Rpb25zIGZvciBzaGFyZWQgbGlicmFyaWVzIHRoYXQgaGF2ZQorICogYmVlbiBsb2FkZWQgYmVmb3JlIHRoZSBjb2RlIHJ1bnMuCisgKgorICogU28gdGhhdCB3ZSBjYW4gdXNlIHRoZSBzYW1lIHN0YXJ0dXAgZmlsZSB3aXRoIHN0YXRpYyBleGVjdXRhYmxlcywKKyAqIHdlIHN0YXJ0IHByb2dyYW1zIHdpdGggYSB2YWx1ZSBvZiAwIHRvIGluZGljYXRlIHRoYXQgdGhlcmUgaXMgbm8KKyAqIHN1Y2ggZnVuY3Rpb24uCisgKi8KKyNkZWZpbmUgRUxGX1BMQVRfSU5JVChfciwgbG9hZF9hZGRyKQkoX3IpLT5yMCA9IDAKKworI2RlZmluZSBVU0VfRUxGX0NPUkVfRFVNUAorI2RlZmluZSBFTEZfRVhFQ19QQUdFU0laRQlQQUdFX1NJWkUKKworLyoKKyAqIFRoaXMgaXMgdGhlIGxvY2F0aW9uIHRoYXQgYW4gRVRfRFlOIHByb2dyYW0gaXMgbG9hZGVkIGlmIGV4ZWMnZWQuCisgKiBUeXBpY2FsIHVzZSBvZiB0aGlzIGlzIHRvIGludm9rZSAiLi9sZC5zbyBzb21lcHJvZyIgdG8gdGVzdCBvdXQgYQorICogbmV3IHZlcnNpb24gb2YgdGhlIGxvYWRlci4gIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgaXQgaXMgb3V0IG9mCisgKiB0aGUgd2F5IG9mIHRoZSBwcm9ncmFtIHRoYXQgaXQgd2lsbCAiZXhlYyIsIGFuZCB0aGF0IHRoZXJlIGlzCisgKiBzdWZmaWNpZW50IHJvb20gZm9yIHRoZSBicmsuCisgKi8KKyNkZWZpbmUgRUxGX0VUX0RZTl9CQVNFICAgICAgICAgKFRBU0tfU0laRSAvIDMgKiAyKQorCisvKiByZWdzIGlzIHN0cnVjdCBwdF9yZWdzLCBwcl9yZWcgaXMgZWxmX2dyZWdzZXRfdCAod2hpY2ggaXMKKyAgIG5vdyBzdHJ1Y3RfdXNlcl9yZWdzLCB0aGV5IGFyZSBkaWZmZXJlbnQpICovCisKKyNkZWZpbmUgRUxGX0NPUkVfQ09QWV9SRUdTKHByX3JlZywgcmVncykgIFwKKwltZW1jcHkoKGNoYXIgKilwcl9yZWcsIChjaGFyICopcmVncywgc2l6ZW9mIChzdHJ1Y3QgcHRfcmVncykpOworCisvKiBUaGlzIHlpZWxkcyBhIG1hc2sgdGhhdCB1c2VyIHByb2dyYW1zIGNhbiB1c2UgdG8gZmlndXJlIG91dCB3aGF0CisgICBpbnN0cnVjdGlvbiBzZXQgdGhpcyBDUFUgc3VwcG9ydHMuICAqLworI2RlZmluZSBFTEZfSFdDQVAJKDApCisKKy8qIFRoaXMgeWllbGRzIGEgc3RyaW5nIHRoYXQgbGQuc28gd2lsbCB1c2UgdG8gbG9hZCBpbXBsZW1lbnRhdGlvbgorICAgc3BlY2lmaWMgbGlicmFyaWVzIGZvciBvcHRpbWl6YXRpb24uICBUaGlzIGlzIG1vcmUgc3BlY2lmaWMgaW4KKyAgIGludGVudCB0aGFuIHBva2luZyBhdCB1bmFtZSBvciAvcHJvYy9jcHVpbmZvLiAgKi8KKyNkZWZpbmUgRUxGX1BMQVRGT1JNCShOVUxMKQorCisjaWZkZWYgX19LRVJORUxfXworI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgsIGliY3MyKSBzZXRfcGVyc29uYWxpdHkoUEVSX0xJTlVYKQorI2VuZGlmCisKKyNlbmRpZiAgLyogX0FTTV9NMzJSX19FTEZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9lcnJuby5oIGIvaW5jbHVkZS9hc20tbTMyci9lcnJuby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhOTg1MjAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL2Vycm5vLmgKQEAgLTAsMCArMSw5IEBACisjaWZuZGVmIF9BU01fTTMyUl9FUlJOT19ICisjZGVmaW5lIF9BU01fTTMyUl9FUlJOT19ICisKKy8qICRJZCQgKi8KKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2Vycm5vLmg+CisKKyNlbmRpZiAvKiBfQVNNX00zMlJfRVJSTk9fSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL2ZjbnRsLmggYi9pbmNsdWRlL2FzbS1tMzJyL2ZjbnRsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2UzMDg5NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvZmNudGwuaApAQCAtMCwwICsxLDkyIEBACisjaWZuZGVmIF9BU01fTTMyUl9GQ05UTF9ICisjZGVmaW5lIF9BU01fTTMyUl9GQ05UTF9ICisKKy8qICRJZCQgKi8KKworLyogb3JpZyA6IGkzODYgMi40LjE4ICovCisKKy8qIG9wZW4vZmNudGwgLSBPX1NZTkMgaXMgb25seSBpbXBsZW1lbnRlZCBvbiBibG9ja3MgZGV2aWNlcyBhbmQgb24gZmlsZXMKKyAgIGxvY2F0ZWQgb24gYW4gZXh0MiBmaWxlIHN5c3RlbSAqLworI2RlZmluZSBPX0FDQ01PREUJICAgMDAwMworI2RlZmluZSBPX1JET05MWQkgICAgIDAwCisjZGVmaW5lIE9fV1JPTkxZCSAgICAgMDEKKyNkZWZpbmUgT19SRFdSCQkgICAgIDAyCisjZGVmaW5lIE9fQ1JFQVQJCSAgIDAxMDAJLyogbm90IGZjbnRsICovCisjZGVmaW5lIE9fRVhDTAkJICAgMDIwMAkvKiBub3QgZmNudGwgKi8KKyNkZWZpbmUgT19OT0NUVFkJICAgMDQwMAkvKiBub3QgZmNudGwgKi8KKyNkZWZpbmUgT19UUlVOQwkJICAwMTAwMAkvKiBub3QgZmNudGwgKi8KKyNkZWZpbmUgT19BUFBFTkQJICAwMjAwMAorI2RlZmluZSBPX05PTkJMT0NLCSAgMDQwMDAKKyNkZWZpbmUgT19OREVMQVkJT19OT05CTE9DSworI2RlZmluZSBPX1NZTkMJCSAwMTAwMDAKKyNkZWZpbmUgRkFTWU5DCQkgMDIwMDAwCS8qIGZjbnRsLCBmb3IgQlNEIGNvbXBhdGliaWxpdHkgKi8KKyNkZWZpbmUgT19ESVJFQ1QJIDA0MDAwMAkvKiBkaXJlY3QgZGlzayBhY2Nlc3MgaGludCAqLworI2RlZmluZSBPX0xBUkdFRklMRQkwMTAwMDAwCisjZGVmaW5lIE9fRElSRUNUT1JZCTAyMDAwMDAJLyogbXVzdCBiZSBhIGRpcmVjdG9yeSAqLworI2RlZmluZSBPX05PRk9MTE9XCTA0MDAwMDAgLyogZG9uJ3QgZm9sbG93IGxpbmtzICovCisjZGVmaW5lIE9fTk9BVElNRQkwMTAwMDAwMAorCisjZGVmaW5lIEZfRFVQRkQJCTAJLyogZHVwICovCisjZGVmaW5lIEZfR0VURkQJCTEJLyogZ2V0IGNsb3NlX29uX2V4ZWMgKi8KKyNkZWZpbmUgRl9TRVRGRAkJMgkvKiBzZXQvY2xlYXIgY2xvc2Vfb25fZXhlYyAqLworI2RlZmluZSBGX0dFVEZMCQkzCS8qIGdldCBmaWxlLT5mX2ZsYWdzICovCisjZGVmaW5lIEZfU0VURkwJCTQJLyogc2V0IGZpbGUtPmZfZmxhZ3MgKi8KKyNkZWZpbmUgRl9HRVRMSwkJNQorI2RlZmluZSBGX1NFVExLCQk2CisjZGVmaW5lIEZfU0VUTEtXCTcKKworI2RlZmluZSBGX1NFVE9XTgk4CS8qICBmb3Igc29ja2V0cy4gKi8KKyNkZWZpbmUgRl9HRVRPV04JOQkvKiAgZm9yIHNvY2tldHMuICovCisjZGVmaW5lIEZfU0VUU0lHCTEwCS8qICBmb3Igc29ja2V0cy4gKi8KKyNkZWZpbmUgRl9HRVRTSUcJMTEJLyogIGZvciBzb2NrZXRzLiAqLworCisjZGVmaW5lIEZfR0VUTEs2NAkxMgkvKiAgdXNpbmcgJ3N0cnVjdCBmbG9jazY0JyAqLworI2RlZmluZSBGX1NFVExLNjQJMTMKKyNkZWZpbmUgRl9TRVRMS1c2NAkxNAorCisvKiBmb3IgRl9bR0VUfFNFVF1GTCAqLworI2RlZmluZSBGRF9DTE9FWEVDCTEJLyogYWN0dWFsbHkgYW55dGhpbmcgd2l0aCBsb3cgYml0IHNldCBnb2VzICovCisKKy8qIGZvciBwb3NpeCBmY250bCgpIGFuZCBsb2NrZigpICovCisjZGVmaW5lIEZfUkRMQ0sJCTAKKyNkZWZpbmUgRl9XUkxDSwkJMQorI2RlZmluZSBGX1VOTENLCQkyCisKKy8qIGZvciBvbGQgaW1wbGVtZW50YXRpb24gb2YgYnNkIGZsb2NrICgpICovCisjZGVmaW5lIEZfRVhMQ0sJCTQJLyogb3IgMyAqLworI2RlZmluZSBGX1NITENLCQk4CS8qIG9yIDQgKi8KKworLyogZm9yIGxlYXNlcyAqLworI2RlZmluZSBGX0lOUFJPR1JFU1MJMTYKKworLyogb3BlcmF0aW9ucyBmb3IgYnNkIGZsb2NrKCksIGFsc28gdXNlZCBieSB0aGUga2VybmVsIGltcGxlbWVudGF0aW9uICovCisjZGVmaW5lIExPQ0tfU0gJCTEJLyogc2hhcmVkIGxvY2sgKi8KKyNkZWZpbmUgTE9DS19FWAkJMgkvKiBleGNsdXNpdmUgbG9jayAqLworI2RlZmluZSBMT0NLX05CCQk0CS8qIG9yJ2Qgd2l0aCBvbmUgb2YgdGhlIGFib3ZlIHRvIHByZXZlbnQKKwkJCQkgICBibG9ja2luZyAqLworI2RlZmluZSBMT0NLX1VOCQk4CS8qIHJlbW92ZSBsb2NrICovCisKKyNkZWZpbmUgTE9DS19NQU5ECTMyCS8qIFRoaXMgaXMgYSBtYW5kYXRvcnkgZmxvY2sgKi8KKyNkZWZpbmUgTE9DS19SRUFECTY0CS8qIC4uLiBXaGljaCBhbGxvd3MgY29uY3VycmVudCByZWFkIG9wZXJhdGlvbnMgKi8KKyNkZWZpbmUgTE9DS19XUklURQkxMjgJLyogLi4uIFdoaWNoIGFsbG93cyBjb25jdXJyZW50IHdyaXRlIG9wZXJhdGlvbnMgKi8KKyNkZWZpbmUgTE9DS19SVwkJMTkyCS8qIC4uLiBXaGljaCBhbGxvd3MgY29uY3VycmVudCByZWFkICYgd3JpdGUgb3BzICovCisKK3N0cnVjdCBmbG9jayB7CisJc2hvcnQgbF90eXBlOworCXNob3J0IGxfd2hlbmNlOworCW9mZl90IGxfc3RhcnQ7CisJb2ZmX3QgbF9sZW47CisJcGlkX3QgbF9waWQ7Cit9OworCitzdHJ1Y3QgZmxvY2s2NCB7CisJc2hvcnQgIGxfdHlwZTsKKwlzaG9ydCAgbF93aGVuY2U7CisJbG9mZl90IGxfc3RhcnQ7CisJbG9mZl90IGxfbGVuOworCXBpZF90ICBsX3BpZDsKK307CisKKyNkZWZpbmUgRl9MSU5VWF9TUEVDSUZJQ19CQVNFCTEwMjQKKworI2VuZGlmICAvKiBfQVNNX00zMlJfRkNOVExfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9mbGF0LmggYi9pbmNsdWRlL2FzbS1tMzJyL2ZsYXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjI4NWY2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTMyci9mbGF0LmgKQEAgLTAsMCArMSwxNDUgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1tMzJyL2ZsYXQuaAorICoKKyAqIHVDbGludXggZmxhdC1mb3JtYXQgZXhlY3V0YWJsZXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgIEthenVoaXJvIEluYW9rYQorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9fQVNNX00zMlJfRkxBVF9ICisjZGVmaW5lIF9fQVNNX00zMlJfRkxBVF9ICisKKyNkZWZpbmUJZmxhdF9zdGFja19hbGlnbihzcCkJCSgqc3AgKz0gKCpzcCAmIDMgPyAoNCAtICgqc3AgJiAzKSk6IDApKQorI2RlZmluZQlmbGF0X2FyZ3ZwX2VudnBfb25fc3RhY2soKQkJMAorI2RlZmluZQlmbGF0X29sZF9yYW1fZmxhZyhmbGFncykJCShmbGFncykKKyNkZWZpbmUJZmxhdF9yZWxvY192YWxpZChyZWxvYywgc2l6ZSkJCVwKKwkoKChyZWxvYykgLSB0ZXh0bGVuX2Zvcl9tMzJyX2xvMTZfZGF0YSkgPD0gKHNpemUpKQorI2RlZmluZSBmbGF0X2dldF9hZGRyX2Zyb21fcnAocnAsIHJlbHZhbCwgZmxhZ3MpIFwKKwltMzJyX2ZsYXRfZ2V0X2FkZHJfZnJvbV9ycChycCwgcmVsdmFsLCAodGV4dF9sZW4pICkKKworI2RlZmluZSBmbGF0X3B1dF9hZGRyX2F0X3JwKHJwLCBhZGRyLCByZWx2YWwpIFwKKwltMzJyX2ZsYXRfcHV0X2FkZHJfYXRfcnAocnAsIGFkZHIsIHJlbHZhbCkKKworLyogQ29udmVydCBhIHJlbG9jYXRpb24gZW50cnkgaW50byBhbiBhZGRyZXNzLiAgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZworZmxhdF9nZXRfcmVsb2NhdGVfYWRkciAodW5zaWduZWQgbG9uZyByZWx2YWwpCit7CisgICAgICAgIHJldHVybiByZWx2YWwgJiAweDAwZmZmZmZmOyAvKiBNYXNrIG91dCB0b3AgOC1iaXRzICovCit9CisKKyNkZWZpbmUJZmxhdF9tMzJyX2dldF9yZWxvY190eXBlKHJlbHZhbCkJKChyZWx2YWwpID4+IDI0KQorCisjZGVmaW5lIE0zMlJfU0VUSF9PUENPREUJMHhkMGMwMDAwMCAvKiBTRVRIIGluc3RydWN0aW9uIGNvZGUgKi8KKworI2RlZmluZSBGTEFUX00zMlJfMzIJCTB4MDAJLyogMzJiaXRzIHJlbG9jICovCisjZGVmaW5lIEZMQVRfTTMyUl8yNAkJMHgwMQkvKiB1bnNpZ25lZCAyNGJpdHMgcmVsb2MgKi8KKyNkZWZpbmUgRkxBVF9NMzJSXzE2CQkweDAyCS8qIDE2Yml0cyByZWxvYyAqLworI2RlZmluZSBGTEFUX00zMlJfTE8xNgkJMHgwMwkvKiBzaWduZWQgbG93IDE2Yml0cyByZWxvYyAobG93KCkpICovCisjZGVmaW5lIEZMQVRfTTMyUl9MTzE2X0RBVEEJMHgwNAkvKiBzaWduZWQgbG93IDE2Yml0cyByZWxvYyAobG93KCkpCisJCQkJCSAgIGZvciBhIHN5bWJvbCBpbiAuZGF0YSBzZWN0aW9uICovCisJCQkJCS8qIEhpZ2ggMTZiaXRzIG9mIGFuIGFkZHJlc3MgdXNlZAorCQkJCQkgICB3aGVuIHRoZSBsb3dlciAxNmJiaXRzIGFyZSB0cmVhdGVkCisJCQkJCSAgIGFzIHVuc2lnbmVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvIGNyZWF0ZSBTRVRIIGluc3RydWN0aW9uIG9ubHkuCisJCQkJCSAgIDB4MVg6IFggbWVhbnMgYSBudW1iZXIgb2YgcmVnaXN0ZXIuCisJCQkJCSAgIDB4MTAgLSAweDNGIGFyZSByZXNlcnZlZC4gKi8KKyNkZWZpbmUgRkxBVF9NMzJSX0hJMTZfVUxPCTB4MTAJLyogcmVsb2MgZm9yIFNFVEggUm4sI2hpZ2goaW1tMTYpICovCisJCQkJCS8qIEhpZ2ggMTZiaXRzIG9mIGFuIGFkZHJlc3MgdXNlZAorCQkJCQkgICB3aGVuIHRoZSBsb3dlciAxNmJiaXRzIGFyZSB0cmVhdGVkCisJCQkJCSAgIGFzIHNpZ25lZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUbyBjcmVhdGUgU0VUSCBpbnN0cnVjdGlvbiBvbmx5LgorCQkJCQkgICAweDJYOiBYIG1lYW5zIGEgbnVtYmVyIG9mIHJlZ2lzdGVyLgorCQkJCQkgICAweDIwIC0gMHg0RiBhcmUgcmVzZXJ2ZWQuICovCisjZGVmaW5lIEZMQVRfTTMyUl9ISTE2X1NMTwkweDIwCS8qIHJlbG9jIGZvciBTRVRIIFJuLCNzaGlnaChpbW0xNikgKi8KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgdGV4dGxlbl9mb3JfbTMycl9sbzE2X2RhdGEgPSAwOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbTMycl9mbGF0X2dldF9hZGRyX2Zyb21fcnAgKHVuc2lnbmVkIGxvbmcgKnJwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHJlbHZhbCwKKwkJCQkJCSAgICAgICAgdW5zaWduZWQgbG9uZyB0ZXh0bGVuKQoreworICAgICAgICB1bnNpZ25lZCBpbnQgcmVsb2MgPSBmbGF0X20zMnJfZ2V0X3JlbG9jX3R5cGUgKHJlbHZhbCk7CisJdGV4dGxlbl9mb3JfbTMycl9sbzE2X2RhdGEgPSAwOworCWlmIChyZWxvYyAmIDB4ZjApIHsKKwkJdW5zaWduZWQgbG9uZyBhZGRyID0gaHRvbmwoKnJwKTsKKwkJc3dpdGNoIChyZWxvYyAmIDB4ZjApCisJCXsKKwkJY2FzZSBGTEFUX00zMlJfSEkxNl9VTE86CisJCWNhc2UgRkxBVF9NMzJSX0hJMTZfU0xPOgorCQkJaWYgKGFkZHIgPT0gMCkgeworCQkJCS8qIHB1dCAic2V0aCBSbiwjMHgwIiBpbnN0ZWFkIG9mIDAgKGFkZHIpLiAqLworCQkJCSpycCA9IChNMzJSX1NFVEhfT1BDT0RFIHwgKChyZWxvYyAmIDB4MGYpPDwyNCkpOworCQkJfQorCQkJcmV0dXJuIGFkZHI7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0gZWxzZSB7CisJCXN3aXRjaCAocmVsb2MpCisJCXsKKwkJY2FzZSBGTEFUX00zMlJfTE8xNjoKKwkJCXJldHVybiBodG9ubCgqcnApICYgMHhGRkZGOworCQljYXNlIEZMQVRfTTMyUl9MTzE2X0RBVEE6CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBGSVhNRTogVGhlIHJldHVybiB2YWx1ZSB3aWxsIGRlY3JlYXNlIGJ5IHRleHRsZW4KKwkJCSAgIGF0IG0zMnJfZmxhdF9wdXRfYWRkcl9hdF9ycCAoKSAqLworCQkJdGV4dGxlbl9mb3JfbTMycl9sbzE2X2RhdGEgPSB0ZXh0bGVuOworCQkJcmV0dXJuIChodG9ubCgqcnApICYgMHhGRkZGKSArIHRleHRsZW47CisJCWNhc2UgRkxBVF9NMzJSXzE2OgorCQkJcmV0dXJuIGh0b25zKCoodW5zaWduZWQgc2hvcnQgKilycCkgJiAweEZGRkY7CisJCWNhc2UgRkxBVF9NMzJSXzI0OgorCQkJcmV0dXJuIGh0b25sKCpycCkgJiAweEZGRkZGRjsKKwkJY2FzZSBGTEFUX00zMlJfMzI6CisJCQlyZXR1cm4gaHRvbmwoKnJwKTsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJfQorCXJldHVybiB+MDsgICAgICAvKiBib2d1cyB2YWx1ZSAqLworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbTMycl9mbGF0X3B1dF9hZGRyX2F0X3JwICh1bnNpZ25lZCBsb25nICpycCwKKwkJCQkJICAgICB1bnNpZ25lZCBsb25nIGFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHJlbHZhbCkKK3sKKyAgICAgICAgdW5zaWduZWQgaW50IHJlbG9jID0gZmxhdF9tMzJyX2dldF9yZWxvY190eXBlIChyZWx2YWwpOworCWlmIChyZWxvYyAmIDB4ZjApIHsKKwkJdW5zaWduZWQgbG9uZyBSbiA9IHJlbG9jICYgMHgwZjsgLyogZ2V0IGEgbnVtYmVyIG9mIHJlZ2lzdGVyICovCisJCVJuIDw8PSAyNDsgLyogMHgwUjAwMDAwMCAqLworCQlyZWxvYyAmPSAweGYwOworCQlzd2l0Y2ggKHJlbG9jKQorCQl7CisJCWNhc2UgRkxBVF9NMzJSX0hJMTZfVUxPOiAvKiBUbyBjcmVhdGUgU0VUSCBSbiwjaGlnaChpbW0xNikgKi8KKwkJCSpycCA9IChNMzJSX1NFVEhfT1BDT0RFIHwgUm4KKwkJCSAgICAgICB8ICgoYWRkciA+PiAxNikgJiAweEZGRkYpKTsKKwkJCWJyZWFrOworCQljYXNlIEZMQVRfTTMyUl9ISTE2X1NMTzogLyogVG8gY3JlYXRlIFNFVEggUm4sI3NoaWdoKGltbTE2KSAqLworCQkJKnJwID0gKE0zMlJfU0VUSF9PUENPREUgfCBSbgorCQkJICAgICAgIHwgKCgoYWRkciA+PiAxNikgKyAoKGFkZHIgJiAweDgwMDApID8gMSA6IDApKQorCQkJCSAgJiAweEZGRkYpKTsKKwkJCWJyZWFrOworCQl9CisJfSBlbHNlIHsKKwkJc3dpdGNoIChyZWxvYykgeworCQljYXNlIEZMQVRfTTMyUl9MTzE2X0RBVEE6CisJCQlhZGRyIC09IHRleHRsZW5fZm9yX20zMnJfbG8xNl9kYXRhOworCQkJdGV4dGxlbl9mb3JfbTMycl9sbzE2X2RhdGEgPSAwOworCQljYXNlIEZMQVRfTTMyUl9MTzE2OgorCQkJKnJwID0gKGh0b25sKCpycCkgJiAweEZGRkYwMDAwKSB8IChhZGRyICYgMHhGRkZGKTsKKwkJCWJyZWFrOworCQljYXNlIEZMQVRfTTMyUl8xNjoKKwkJCSoodW5zaWduZWQgc2hvcnQgKilycCA9IGFkZHIgJiAweEZGRkY7CisJCQlicmVhazsKKwkJY2FzZSBGTEFUX00zMlJfMjQ6CisJCQkqcnAgPSAoaHRvbmwoKnJwKSAmIDB4RkYwMDAwMDApIHwgKGFkZHIgJiAweEZGRkZGRik7CisJCQlicmVhazsKKwkJY2FzZSBGTEFUX00zMlJfMzI6CisJCQkqcnAgPSBhZGRyOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKKyNlbmRpZiAvKiBfX0FTTV9NMzJSX0ZMQVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9oYXJkaXJxLmggYi9pbmNsdWRlL2FzbS1tMzJyL2hhcmRpcnEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGE4MzBlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTMyci9oYXJkaXJxLmgKQEAgLTAsMCArMSwzNyBAQAorI2lmZGVmIF9fS0VSTkVMX18KKyNpZm5kZWYgX19BU01fSEFSRElSUV9ICisjZGVmaW5lIF9fQVNNX0hBUkRJUlFfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgaW50IF9fc29mdGlycV9wZW5kaW5nOworfSBfX19fY2FjaGVsaW5lX2FsaWduZWQgaXJxX2NwdXN0YXRfdDsKKworI2luY2x1ZGUgPGxpbnV4L2lycV9jcHVzdGF0Lmg+CS8qIFN0YW5kYXJkIG1hcHBpbmdzIGZvciBpcnFfY3B1c3RhdF90IGFib3ZlICovCisKKyNpZiBOUl9JUlFTID4gMjU2CisjZGVmaW5lIEhBUkRJUlFfQklUUwk5CisjZWxzZQorI2RlZmluZSBIQVJESVJRX0JJVFMJOAorI2VuZGlmCisKKy8qCisgKiBUaGUgaGFyZGlycSBtYXNrIGhhcyB0byBiZSBsYXJnZSBlbm91Z2ggdG8gaGF2ZQorICogc3BhY2UgZm9yIHBvdGVudGlhbGx5IGFsbCBJUlEgc291cmNlcyBpbiB0aGUgc3lzdGVtCisgKiBuZXN0aW5nIG9uIGEgc2luZ2xlIENQVToKKyAqLworI2lmICgxIDw8IEhBUkRJUlFfQklUUykgPCBOUl9JUlFTCisjIGVycm9yIEhBUkRJUlFfQklUUyBpcyB0b28gbG93IQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhY2tfYmFkX2lycShpbnQgaXJxKQoreworCXByaW50ayhLRVJOX0NSSVQgInVuZXhwZWN0ZWQgSVJRIHRyYXAgYXQgdmVjdG9yICUwMnhcbiIsIGlycSk7CisJQlVHKCk7Cit9CisKKyNlbmRpZiAvKiBfX0FTTV9IQVJESVJRX0ggKi8KKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL2hkcmVnLmggYi9pbmNsdWRlL2FzbS1tMzJyL2hkcmVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y3ZmQxYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvaGRyZWcuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvaGRyZWcuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvaHdfaXJxLmggYi9pbmNsdWRlL2FzbS1tMzJyL2h3X2lycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkN2U5ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL2h3X2lycS5oCkBAIC0wLDAgKzEsOSBAQAorI2lmbmRlZiBfQVNNX00zMlJfSFdfSVJRX0gKKyNkZWZpbmUgX0FTTV9NMzJSX0hXX0lSUV9ICisKK3N0YXRpYyBpbmxpbmUgdm9pZCBod19yZXNlbmRfaXJxKHN0cnVjdCBod19pbnRlcnJ1cHRfdHlwZSAqaCwgdW5zaWduZWQgaW50IGkpCit7CisJLyogTm90aGluZyB0byBkbyAqLworfQorCisjZW5kaWYgLyogX0FTTV9NMzJSX0hXX0lSUV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL2lkZS5oIGIvaW5jbHVkZS9hc20tbTMyci9pZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTY0ZjI0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTMyci9pZGUuaApAQCAtMCwwICsxLDgyIEBACisjaWZuZGVmIF9BU01fTTMyUl9JREVfSAorI2RlZmluZSBfQVNNX00zMlJfSURFX0gKKworLyogJElkJCAqLworCisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLW0zMnIvaWRlLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk0LTE5OTYgIExpbnVzIFRvcnZhbGRzICYgYXV0aG9ycworICovCisKKy8qCisgKiAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBpMzg2IGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBJREUgY29kZS4KKyAqLworCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpZm5kZWYgTUFYX0hXSUZTCisjIGlmZGVmIENPTkZJR19CTEtfREVWX0lERVBDSQorI2RlZmluZSBNQVhfSFdJRlMJMTAKKyMgZWxzZQorI2RlZmluZSBNQVhfSFdJRlMJMgorIyBlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19QTEFUX00zMjcwMFVUKQorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbTMyNzAwdXQvbTMyNzAwdXRfcGxkLmg+CisjZW5kaWYKKworI2RlZmluZSBJREVfQVJDSF9PQlNPTEVURV9ERUZBVUxUUworCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgaWRlX2RlZmF1bHRfaXJxKHVuc2lnbmVkIGxvbmcgYmFzZSkKK3sKKwlzd2l0Y2ggKGJhc2UpIHsKKyNpZiBkZWZpbmVkKENPTkZJR19QTEFUX00zMjcwMFVUKSB8fCBkZWZpbmVkKENPTkZJR19QTEFUX01BUFBJMikKKwkJY2FzZSAweDFmMDogcmV0dXJuIFBMRF9JUlFfQ0ZJUkVROworCQlkZWZhdWx0OgorCQkJcmV0dXJuIDA7CisjZWxzZQorCQljYXNlIDB4MWYwOiByZXR1cm4gMTQ7CisJCWNhc2UgMHgxNzA6IHJldHVybiAxNTsKKwkJY2FzZSAweDFlODogcmV0dXJuIDExOworCQljYXNlIDB4MTY4OiByZXR1cm4gMTA7CisJCWNhc2UgMHgxZTA6IHJldHVybiA4OworCQljYXNlIDB4MTYwOiByZXR1cm4gMTI7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gMDsKKyNlbmRpZgorCX0KK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBpZGVfZGVmYXVsdF9pb19iYXNlKGludCBpbmRleCkKK3sKKwlzd2l0Y2ggKGluZGV4KSB7CisJCWNhc2UgMDoJcmV0dXJuIDB4MWYwOworCQljYXNlIDE6CXJldHVybiAweDE3MDsKKwkJY2FzZSAyOiByZXR1cm4gMHgxZTg7CisJCWNhc2UgMzogcmV0dXJuIDB4MTY4OworCQljYXNlIDQ6IHJldHVybiAweDFlMDsKKwkJY2FzZSA1OiByZXR1cm4gMHgxNjA7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gMDsKKwl9Cit9CisKKyNkZWZpbmUgSURFX0FSQ0hfT0JTT0xFVEVfSU5JVAorI2RlZmluZSBpZGVfZGVmYXVsdF9pb19jdGwoYmFzZSkJKChiYXNlKSArIDB4MjA2KSAvKiBvYnNvbGV0ZSAqLworCisjaWZkZWYgQ09ORklHX0JMS19ERVZfSURFUENJCisjZGVmaW5lIGlkZV9pbml0X2RlZmF1bHRfaXJxKGJhc2UpICAgICAoMCkKKyNlbHNlCisjZGVmaW5lIGlkZV9pbml0X2RlZmF1bHRfaXJxKGJhc2UpICAgICBpZGVfZGVmYXVsdF9pcnEoYmFzZSkKKyNlbmRpZgorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvaWRlX2lvcHMuaD4KKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9BU01fTTMyUl9JREVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9pby5oIGIvaW5jbHVkZS9hc20tbTMyci9pby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlOWU0ODEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL2lvLmgKQEAgLTAsMCArMSwyMzIgQEAKKyNpZm5kZWYgX0FTTV9NMzJSX0lPX0gKKyNkZWZpbmUgX0FTTV9NMzJSX0lPX0gKKworI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4gIC8qIF9fdmEgKi8KKworI2lmZGVmIF9fS0VSTkVMX18KKworI2RlZmluZSBJT19TUEFDRV9MSU1JVCAgMHhGRkZGRkZGRgorCisvKioKKyAqCXZpcnRfdG9fcGh5cwktCW1hcCB2aXJ0dWFsIGFkZHJlc3NlcyB0byBwaHlzaWNhbAorICoJQGFkZHJlc3M6IGFkZHJlc3MgdG8gcmVtYXAKKyAqCisgKglUaGUgcmV0dXJuZWQgcGh5c2ljYWwgYWRkcmVzcyBpcyB0aGUgcGh5c2ljYWwgKENQVSkgbWFwcGluZyBmb3IKKyAqCXRoZSBtZW1vcnkgYWRkcmVzcyBnaXZlbi4gSXQgaXMgb25seSB2YWxpZCB0byB1c2UgdGhpcyBmdW5jdGlvbiBvbgorICoJYWRkcmVzc2VzIGRpcmVjdGx5IG1hcHBlZCBvciBhbGxvY2F0ZWQgdmlhIGttYWxsb2MuCisgKgorICoJVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBnaXZlIGJ1cyBtYXBwaW5ncyBmb3IgRE1BIHRyYW5zZmVycy4gSW4KKyAqCWFsbW9zdCBhbGwgY29uY2VpdmFibGUgY2FzZXMgYSBkZXZpY2UgZHJpdmVyIHNob3VsZCBub3QgYmUgdXNpbmcKKyAqCXRoaXMgZnVuY3Rpb24KKyAqLworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdmlydF90b19waHlzKHZvbGF0aWxlIHZvaWQgKiBhZGRyZXNzKQoreworCXJldHVybiBfX3BhKGFkZHJlc3MpOworfQorCisvKioKKyAqCXBoeXNfdG9fdmlydAktCW1hcCBwaHlzaWNhbCBhZGRyZXNzIHRvIHZpcnR1YWwKKyAqCUBhZGRyZXNzOiBhZGRyZXNzIHRvIHJlbWFwCisgKgorICoJVGhlIHJldHVybmVkIHZpcnR1YWwgYWRkcmVzcyBpcyBhIGN1cnJlbnQgQ1BVIG1hcHBpbmcgZm9yCisgKgl0aGUgbWVtb3J5IGFkZHJlc3MgZ2l2ZW4uIEl0IGlzIG9ubHkgdmFsaWQgdG8gdXNlIHRoaXMgZnVuY3Rpb24gb24KKyAqCWFkZHJlc3NlcyB0aGF0IGhhdmUgYSBrZXJuZWwgbWFwcGluZworICoKKyAqCVRoaXMgZnVuY3Rpb24gZG9lcyBub3QgaGFuZGxlIGJ1cyBtYXBwaW5ncyBmb3IgRE1BIHRyYW5zZmVycy4gSW4KKyAqCWFsbW9zdCBhbGwgY29uY2VpdmFibGUgY2FzZXMgYSBkZXZpY2UgZHJpdmVyIHNob3VsZCBub3QgYmUgdXNpbmcKKyAqCXRoaXMgZnVuY3Rpb24KKyAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgKnBoeXNfdG9fdmlydCh1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisJcmV0dXJuIF9fdmEoYWRkcmVzcyk7Cit9CisKK2V4dGVybiB2b2lkIF9faW9tZW0gKgorX19pb3JlbWFwKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOworCisvKioKKyAqCWlvcmVtYXAJCS0JbWFwIGJ1cyBtZW1vcnkgaW50byBDUFUgc3BhY2UKKyAqCUBvZmZzZXQ6CWJ1cyBhZGRyZXNzIG9mIHRoZSBtZW1vcnkKKyAqCUBzaXplOgkJc2l6ZSBvZiB0aGUgcmVzb3VyY2UgdG8gbWFwCisgKgorICoJaW9yZW1hcCBwZXJmb3JtcyBhIHBsYXRmb3JtIHNwZWNpZmljIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgdG8KKyAqCW1ha2UgYnVzIG1lbW9yeSBDUFUgYWNjZXNzaWJsZSB2aWEgdGhlIHJlYWRiL3JlYWR3L3JlYWRsL3dyaXRlYi8KKyAqCXdyaXRldy93cml0ZWwgZnVuY3Rpb25zIGFuZCB0aGUgb3RoZXIgbW1pbyBoZWxwZXJzLiBUaGUgcmV0dXJuZWQKKyAqCWFkZHJlc3MgaXMgbm90IGd1YXJhbnRlZWQgdG8gYmUgdXNhYmxlIGRpcmVjdGx5IGFzIGEgdmlydHVhbAorICoJYWRkcmVzcy4KKyAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgKiBpb3JlbWFwKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJcmV0dXJuIF9faW9yZW1hcChvZmZzZXQsIHNpemUsIDApOworfQorCitleHRlcm4gdm9pZCBpb3VubWFwKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcik7CisjZGVmaW5lIGlvcmVtYXBfbm9jYWNoZShvZmYsc2l6ZSkgaW9yZW1hcChvZmYsc2l6ZSkKKworLyoKKyAqIElPIGJ1cyBtZW1vcnkgYWRkcmVzc2VzIGFyZSBhbHNvIDE6MSB3aXRoIHRoZSBwaHlzaWNhbCBhZGRyZXNzCisgKi8KKyNkZWZpbmUgcGFnZV90b19waHlzKHBhZ2UpCShwYWdlX3RvX3BmbihwYWdlKSA8PCBQQUdFX1NISUZUKQorI2RlZmluZSBwYWdlX3RvX2J1cwlwYWdlX3RvX3BoeXMKKyNkZWZpbmUgdmlydF90b19idXMJdmlydF90b19waHlzCisKK2V4dGVybiB1bnNpZ25lZCBjaGFyIF9pbmIodW5zaWduZWQgbG9uZyk7CitleHRlcm4gdW5zaWduZWQgc2hvcnQgX2ludyh1bnNpZ25lZCBsb25nKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9pbmwodW5zaWduZWQgbG9uZyk7CitleHRlcm4gdW5zaWduZWQgY2hhciBfaW5iX3AodW5zaWduZWQgbG9uZyk7CitleHRlcm4gdW5zaWduZWQgc2hvcnQgX2lud19wKHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX2lubF9wKHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuIHZvaWQgX291dGIodW5zaWduZWQgY2hhciwgdW5zaWduZWQgbG9uZyk7CitleHRlcm4gdm9pZCBfb3V0dyh1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgbG9uZyk7CitleHRlcm4gdm9pZCBfb3V0bCh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKK2V4dGVybiB2b2lkIF9vdXRiX3AodW5zaWduZWQgY2hhciwgdW5zaWduZWQgbG9uZyk7CitleHRlcm4gdm9pZCBfb3V0d19wKHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBsb25nKTsKK2V4dGVybiB2b2lkIF9vdXRsX3AodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CitleHRlcm4gdm9pZCBfaW5zYih1bnNpZ25lZCBpbnQsIHZvaWQgKiwgdW5zaWduZWQgbG9uZyk7CitleHRlcm4gdm9pZCBfaW5zdyh1bnNpZ25lZCBpbnQsIHZvaWQgKiwgdW5zaWduZWQgbG9uZyk7CitleHRlcm4gdm9pZCBfaW5zbCh1bnNpZ25lZCBpbnQsIHZvaWQgKiwgdW5zaWduZWQgbG9uZyk7CitleHRlcm4gdm9pZCBfb3V0c2IodW5zaWduZWQgaW50LCBjb25zdCB2b2lkICosIHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuIHZvaWQgX291dHN3KHVuc2lnbmVkIGludCwgY29uc3Qgdm9pZCAqLCB1bnNpZ25lZCBsb25nKTsKK2V4dGVybiB2b2lkIF9vdXRzbCh1bnNpZ25lZCBpbnQsIGNvbnN0IHZvaWQgKiwgdW5zaWduZWQgbG9uZyk7CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciBfcmVhZGIodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXJldHVybiAqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgX19mb3JjZSAqKWFkZHI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgX3JlYWR3KHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBfX2ZvcmNlICopYWRkcjsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9yZWFkbCh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcmV0dXJuICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyBfX2ZvcmNlICopYWRkcjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF93cml0ZWIodW5zaWduZWQgY2hhciBiLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIF9fZm9yY2UgKilhZGRyID0gYjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF93cml0ZXcodW5zaWduZWQgc2hvcnQgdywgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCSoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgX19mb3JjZSAqKWFkZHIgPSB3OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX3dyaXRlbCh1bnNpZ25lZCBsb25nIGwsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwkqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgX19mb3JjZSAqKWFkZHIgPSBsOworfQorCisjZGVmaW5lIGluYiAgICAgX2luYgorI2RlZmluZSBpbncgICAgIF9pbncKKyNkZWZpbmUgaW5sICAgICBfaW5sCisjZGVmaW5lIG91dGIgICAgX291dGIKKyNkZWZpbmUgb3V0dyAgICBfb3V0dworI2RlZmluZSBvdXRsICAgIF9vdXRsCisKKyNkZWZpbmUgaW5iX3AgICBfaW5iX3AKKyNkZWZpbmUgaW53X3AgICBfaW53X3AKKyNkZWZpbmUgaW5sX3AgICBfaW5sX3AKKyNkZWZpbmUgb3V0Yl9wICBfb3V0Yl9wCisjZGVmaW5lIG91dHdfcCAgX291dHdfcAorI2RlZmluZSBvdXRsX3AgIF9vdXRsX3AKKworI2RlZmluZSBpbnNiICAgIF9pbnNiCisjZGVmaW5lIGluc3cgICAgX2luc3cKKyNkZWZpbmUgaW5zbCAgICBfaW5zbAorI2RlZmluZSBvdXRzYiAgIF9vdXRzYgorI2RlZmluZSBvdXRzdyAgIF9vdXRzdworI2RlZmluZSBvdXRzbCAgIF9vdXRzbAorCisjZGVmaW5lIHJlYWRiKGFkZHIpICAgX3JlYWRiKCh1bnNpZ25lZCBsb25nKShhZGRyKSkKKyNkZWZpbmUgcmVhZHcoYWRkcikgICBfcmVhZHcoKHVuc2lnbmVkIGxvbmcpKGFkZHIpKQorI2RlZmluZSByZWFkbChhZGRyKSAgIF9yZWFkbCgodW5zaWduZWQgbG9uZykoYWRkcikpCisjZGVmaW5lIF9fcmF3X3JlYWRiIHJlYWRiCisjZGVmaW5lIF9fcmF3X3JlYWR3IHJlYWR3CisjZGVmaW5lIF9fcmF3X3JlYWRsIHJlYWRsCisjZGVmaW5lIHJlYWRiX3JlbGF4ZWQgcmVhZGIKKyNkZWZpbmUgcmVhZHdfcmVsYXhlZCByZWFkdworI2RlZmluZSByZWFkbF9yZWxheGVkIHJlYWRsCisKKyNkZWZpbmUgd3JpdGViKHZhbCwgYWRkcikgIF93cml0ZWIoKHZhbCksICh1bnNpZ25lZCBsb25nKShhZGRyKSkKKyNkZWZpbmUgd3JpdGV3KHZhbCwgYWRkcikgIF93cml0ZXcoKHZhbCksICh1bnNpZ25lZCBsb25nKShhZGRyKSkKKyNkZWZpbmUgd3JpdGVsKHZhbCwgYWRkcikgIF93cml0ZWwoKHZhbCksICh1bnNpZ25lZCBsb25nKShhZGRyKSkKKyNkZWZpbmUgX19yYXdfd3JpdGViIHdyaXRlYgorI2RlZmluZSBfX3Jhd193cml0ZXcgd3JpdGV3CisjZGVmaW5lIF9fcmF3X3dyaXRlbCB3cml0ZWwKKworI2RlZmluZSBtbWlvd2IoKQorCisjZGVmaW5lIGZsdXNoX3dyaXRlX2J1ZmZlcnMoKSBkbyB7IH0gd2hpbGUgKDApICAvKiBNMzJSX0ZJWE1FICovCisKKy8qKgorICoJY2hlY2tfc2lnbmF0dXJlCQktCWZpbmQgQklPUyBzaWduYXR1cmVzCisgKglAaW9fYWRkcjogbW1pbyBhZGRyZXNzIHRvIGNoZWNrCisgKglAc2lnbmF0dXJlOiAgc2lnbmF0dXJlIGJsb2NrCisgKglAbGVuZ3RoOiBsZW5ndGggb2Ygc2lnbmF0dXJlCisgKgorICoJUGVyZm9ybSBhIHNpZ25hdHVyZSBjb21wYXJpc29uIHdpdGggdGhlIElTQSBtbWlvIGFkZHJlc3MgaW9fYWRkci4KKyAqCVJldHVybnMgMSBvbiBhIG1hdGNoLgorICoKKyAqCVRoaXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZC4gTmV3IGRyaXZlcnMgc2hvdWxkIHVzZSBpb3JlbWFwIGFuZAorICoJY2hlY2tfc2lnbmF0dXJlLgorICovCisKK3N0YXRpYyBpbmxpbmUgaW50IGNoZWNrX3NpZ25hdHVyZSh2b2lkIF9faW9tZW0gKmlvX2FkZHIsCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNpZ25hdHVyZSwgaW50IGxlbmd0aCkKK3sKKyAgICAgICAgaW50IHJldHZhbCA9IDA7CisjaWYgMAorcHJpbnRrKCJjaGVja19zaWduYXR1cmVcbiIpOworICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgaWYgKHJlYWRiKGlvX2FkZHIpICE9ICpzaWduYXR1cmUpCisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgICAgICAgICBpb19hZGRyKys7CisgICAgICAgICAgICAgICAgc2lnbmF0dXJlKys7CisgICAgICAgICAgICAgICAgbGVuZ3RoLS07CisgICAgICAgIH0gd2hpbGUgKGxlbmd0aCk7CisgICAgICAgIHJldHZhbCA9IDE7CitvdXQ6CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGlubGluZSB2b2lkCittZW1zZXRfaW8odm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyLCB1bnNpZ25lZCBjaGFyIHZhbCwgaW50IGNvdW50KQoreworCW1lbXNldCgodm9pZCBfX2ZvcmNlICopIGFkZHIsIHZhbCwgY291bnQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK21lbWNweV9mcm9taW8odm9pZCAqZHN0LCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKnNyYywgaW50IGNvdW50KQoreworCW1lbWNweShkc3QsICh2b2lkIF9fZm9yY2UgKikgc3JjLCBjb3VudCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorbWVtY3B5X3RvaW8odm9sYXRpbGUgdm9pZCBfX2lvbWVtICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgaW50IGNvdW50KQoreworCW1lbWNweSgodm9pZCBfX2ZvcmNlICopIGRzdCwgc3JjLCBjb3VudCk7Cit9CisKKy8qCisgKiBDb252ZXJ0IGEgcGh5c2ljYWwgcG9pbnRlciB0byBhIHZpcnR1YWwga2VybmVsIHBvaW50ZXIgZm9yIC9kZXYvbWVtCisgKiBhY2Nlc3MKKyAqLworI2RlZmluZSB4bGF0ZV9kZXZfbWVtX3B0cihwKQlfX3ZhKHApCisKKy8qCisgKiBDb252ZXJ0IGEgdmlydHVhbCBjYWNoZWQgcG9pbnRlciB0byBhbiB1bmNhY2hlZCBwb2ludGVyCisgKi8KKyNkZWZpbmUgeGxhdGVfZGV2X2ttZW1fcHRyKHApCXAKKworI2VuZGlmICAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAgLyogX0FTTV9NMzJSX0lPX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvaW9jdGwuaCBiL2luY2x1ZGUvYXNtLW0zMnIvaW9jdGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2Q4ZjdkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTMyci9pb2N0bC5oCkBAIC0wLDAgKzEsNzggQEAKKyNpZm5kZWYgX0FTTV9NMzJSX0lPQ1RMX0gKKyNkZWZpbmUgX0FTTV9NMzJSX0lPQ1RMX0gKKworLyogJElkJCAqLworCisvKiBvcmlnIDogaTM4NiAyLjQuMTggKi8KKworLyoKKyAqIGxpbnV4L2lvY3RsLmggZm9yIExpbnV4IGJ5IEguSC4gQmVyZ21hbi4KKyAqLworCisvKiBpb2N0bCBjb21tYW5kIGVuY29kaW5nOiAzMiBiaXRzIHRvdGFsLCBjb21tYW5kIGluIGxvd2VyIDE2IGJpdHMsCisgKiBzaXplIG9mIHRoZSBwYXJhbWV0ZXIgc3RydWN0dXJlIGluIHRoZSBsb3dlciAxNCBiaXRzIG9mIHRoZQorICogdXBwZXIgMTYgYml0cy4KKyAqIEVuY29kaW5nIHRoZSBzaXplIG9mIHRoZSBwYXJhbWV0ZXIgc3RydWN0dXJlIGluIHRoZSBpb2N0bCByZXF1ZXN0CisgKiBpcyB1c2VmdWwgZm9yIGNhdGNoaW5nIHByb2dyYW1zIGNvbXBpbGVkIHdpdGggb2xkIHZlcnNpb25zCisgKiBhbmQgdG8gYXZvaWQgb3ZlcndyaXRpbmcgdXNlciBzcGFjZSBvdXRzaWRlIHRoZSB1c2VyIGJ1ZmZlciBhcmVhLgorICogVGhlIGhpZ2hlc3QgMiBiaXRzIGFyZSByZXNlcnZlZCBmb3IgaW5kaWNhdGluZyB0aGUgYGBhY2Nlc3MgbW9kZScnLgorICogTk9URTogVGhpcyBsaW1pdHMgdGhlIG1heCBwYXJhbWV0ZXIgc2l6ZSB0byAxNmtCIC0xICEKKyAqLworCisvKgorICogVGhlIGZvbGxvd2luZyBpcyBmb3IgY29tcGF0aWJpbGl0eSBhY3Jvc3MgdGhlIHZhcmlvdXMgTGludXgKKyAqIHBsYXRmb3Jtcy4gIFRoZSBpMzg2IGlvY3RsIG51bWJlcmluZyBzY2hlbWUgZG9lc24ndCByZWFsbHkgZW5mb3JjZQorICogYSB0eXBlIGZpZWxkLiAgRGUgZmFjdG8sIGhvd2V2ZXIsIHRoZSB0b3AgOCBiaXRzIG9mIHRoZSBsb3dlciAxNgorICogYml0cyBhcmUgaW5kZWVkIHVzZWQgYXMgYSB0eXBlIGZpZWxkLCBzbyB3ZSBtaWdodCBqdXN0IGFzIHdlbGwgbWFrZQorICogdGhpcyBleHBsaWNpdCBoZXJlLiAgUGxlYXNlIGJlIHN1cmUgdG8gdXNlIHRoZSBkZWNvZGluZyBtYWNyb3MKKyAqIGJlbG93IGZyb20gbm93IG9uLgorICovCisjZGVmaW5lIF9JT0NfTlJCSVRTCTgKKyNkZWZpbmUgX0lPQ19UWVBFQklUUwk4CisjZGVmaW5lIF9JT0NfU0laRUJJVFMJMTQKKyNkZWZpbmUgX0lPQ19ESVJCSVRTCTIKKworI2RlZmluZSBfSU9DX05STUFTSwkoKDEgPDwgX0lPQ19OUkJJVFMpLTEpCisjZGVmaW5lIF9JT0NfVFlQRU1BU0sJKCgxIDw8IF9JT0NfVFlQRUJJVFMpLTEpCisjZGVmaW5lIF9JT0NfU0laRU1BU0sJKCgxIDw8IF9JT0NfU0laRUJJVFMpLTEpCisjZGVmaW5lIF9JT0NfRElSTUFTSwkoKDEgPDwgX0lPQ19ESVJCSVRTKS0xKQorCisjZGVmaW5lIF9JT0NfTlJTSElGVAkwCisjZGVmaW5lIF9JT0NfVFlQRVNISUZUCShfSU9DX05SU0hJRlQrX0lPQ19OUkJJVFMpCisjZGVmaW5lIF9JT0NfU0laRVNISUZUCShfSU9DX1RZUEVTSElGVCtfSU9DX1RZUEVCSVRTKQorI2RlZmluZSBfSU9DX0RJUlNISUZUCShfSU9DX1NJWkVTSElGVCtfSU9DX1NJWkVCSVRTKQorCisvKgorICogRGlyZWN0aW9uIGJpdHMuCisgKi8KKyNkZWZpbmUgX0lPQ19OT05FCTBVCisjZGVmaW5lIF9JT0NfV1JJVEUJMVUKKyNkZWZpbmUgX0lPQ19SRUFECTJVCisKKyNkZWZpbmUgX0lPQyhkaXIsdHlwZSxucixzaXplKSBcCisJKCgoZGlyKSAgPDwgX0lPQ19ESVJTSElGVCkgfCBcCisJICgodHlwZSkgPDwgX0lPQ19UWVBFU0hJRlQpIHwgXAorCSAoKG5yKSAgIDw8IF9JT0NfTlJTSElGVCkgfCBcCisJICgoc2l6ZSkgPDwgX0lPQ19TSVpFU0hJRlQpKQorCisvKiB1c2VkIHRvIGNyZWF0ZSBudW1iZXJzICovCisjZGVmaW5lIF9JTyh0eXBlLG5yKQkJX0lPQyhfSU9DX05PTkUsKHR5cGUpLChuciksMCkKKyNkZWZpbmUgX0lPUih0eXBlLG5yLHNpemUpCV9JT0MoX0lPQ19SRUFELCh0eXBlKSwobnIpLHNpemVvZihzaXplKSkKKyNkZWZpbmUgX0lPVyh0eXBlLG5yLHNpemUpCV9JT0MoX0lPQ19XUklURSwodHlwZSksKG5yKSxzaXplb2Yoc2l6ZSkpCisjZGVmaW5lIF9JT1dSKHR5cGUsbnIsc2l6ZSkJX0lPQyhfSU9DX1JFQUR8X0lPQ19XUklURSwodHlwZSksKG5yKSxzaXplb2Yoc2l6ZSkpCisKKy8qIHVzZWQgdG8gZGVjb2RlIGlvY3RsIG51bWJlcnMuLiAqLworI2RlZmluZSBfSU9DX0RJUihucikJCSgoKG5yKSA+PiBfSU9DX0RJUlNISUZUKSAmIF9JT0NfRElSTUFTSykKKyNkZWZpbmUgX0lPQ19UWVBFKG5yKQkJKCgobnIpID4+IF9JT0NfVFlQRVNISUZUKSAmIF9JT0NfVFlQRU1BU0spCisjZGVmaW5lIF9JT0NfTlIobnIpCQkoKChucikgPj4gX0lPQ19OUlNISUZUKSAmIF9JT0NfTlJNQVNLKQorI2RlZmluZSBfSU9DX1NJWkUobnIpCQkoKChucikgPj4gX0lPQ19TSVpFU0hJRlQpICYgX0lPQ19TSVpFTUFTSykKKworLyogLi4uYW5kIGZvciB0aGUgZHJpdmVycy9zb3VuZCBmaWxlcy4uLiAqLworCisjZGVmaW5lIElPQ19JTgkJKF9JT0NfV1JJVEUgPDwgX0lPQ19ESVJTSElGVCkKKyNkZWZpbmUgSU9DX09VVAkJKF9JT0NfUkVBRCA8PCBfSU9DX0RJUlNISUZUKQorI2RlZmluZSBJT0NfSU5PVVQJKChfSU9DX1dSSVRFfF9JT0NfUkVBRCkgPDwgX0lPQ19ESVJTSElGVCkKKyNkZWZpbmUgSU9DU0laRV9NQVNLCShfSU9DX1NJWkVNQVNLIDw8IF9JT0NfU0laRVNISUZUKQorI2RlZmluZSBJT0NTSVpFX1NISUZUCShfSU9DX1NJWkVTSElGVCkKKworI2VuZGlmIC8qIF9BU01fTTMyUl9JT0NUTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL2lvY3Rscy5oIGIvaW5jbHVkZS9hc20tbTMyci9pb2N0bHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzUwODI5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTMyci9pb2N0bHMuaApAQCAtMCwwICsxLDg4IEBACisjaWZuZGVmIF9fQVJDSF9NMzJSX0lPQ1RMU19IX18KKyNkZWZpbmUgX19BUkNIX00zMlJfSU9DVExTX0hfXworCisvKiAkSWQkICovCisKKy8qIG9yaWcgOiBpMzg2IDIuNS42NyAqLworCisjaW5jbHVkZSA8YXNtL2lvY3RsLmg+CisKKy8qIDB4NTQgaXMganVzdCBhIG1hZ2ljIG51bWJlciB0byBtYWtlIHRoZXNlIHJlbGF0aXZlbHkgdW5pcXVlICgnVCcpICovCisKKyNkZWZpbmUgVENHRVRTCQkweDU0MDEKKyNkZWZpbmUgVENTRVRTCQkweDU0MDIgLyogQ2xhc2hlcyB3aXRoIFNORENUTF9UTVJfU1RBUlQgc291bmQgaW9jdGwgKi8KKyNkZWZpbmUgVENTRVRTVwkJMHg1NDAzCisjZGVmaW5lIFRDU0VUU0YJCTB4NTQwNAorI2RlZmluZSBUQ0dFVEEJCTB4NTQwNQorI2RlZmluZSBUQ1NFVEEJCTB4NTQwNgorI2RlZmluZSBUQ1NFVEFXCQkweDU0MDcKKyNkZWZpbmUgVENTRVRBRgkJMHg1NDA4CisjZGVmaW5lIFRDU0JSSwkJMHg1NDA5CisjZGVmaW5lIFRDWE9OQwkJMHg1NDBBCisjZGVmaW5lIFRDRkxTSAkJMHg1NDBCCisjZGVmaW5lIFRJT0NFWENMCTB4NTQwQworI2RlZmluZSBUSU9DTlhDTAkweDU0MEQKKyNkZWZpbmUgVElPQ1NDVFRZCTB4NTQwRQorI2RlZmluZSBUSU9DR1BHUlAJMHg1NDBGCisjZGVmaW5lIFRJT0NTUEdSUAkweDU0MTAKKyNkZWZpbmUgVElPQ09VVFEJMHg1NDExCisjZGVmaW5lIFRJT0NTVEkJCTB4NTQxMgorI2RlZmluZSBUSU9DR1dJTlNaCTB4NTQxMworI2RlZmluZSBUSU9DU1dJTlNaCTB4NTQxNAorI2RlZmluZSBUSU9DTUdFVAkweDU0MTUKKyNkZWZpbmUgVElPQ01CSVMJMHg1NDE2CisjZGVmaW5lIFRJT0NNQklDCTB4NTQxNworI2RlZmluZSBUSU9DTVNFVAkweDU0MTgKKyNkZWZpbmUgVElPQ0dTT0ZUQ0FSCTB4NTQxOQorI2RlZmluZSBUSU9DU1NPRlRDQVIJMHg1NDFBCisjZGVmaW5lIEZJT05SRUFECTB4NTQxQgorI2RlZmluZSBUSU9DSU5RCQlGSU9OUkVBRAorI2RlZmluZSBUSU9DTElOVVgJMHg1NDFDCisjZGVmaW5lIFRJT0NDT05TCTB4NTQxRAorI2RlZmluZSBUSU9DR1NFUklBTAkweDU0MUUKKyNkZWZpbmUgVElPQ1NTRVJJQUwJMHg1NDFGCisjZGVmaW5lIFRJT0NQS1QJCTB4NTQyMAorI2RlZmluZSBGSU9OQklPCQkweDU0MjEKKyNkZWZpbmUgVElPQ05PVFRZCTB4NTQyMgorI2RlZmluZSBUSU9DU0VURAkweDU0MjMKKyNkZWZpbmUgVElPQ0dFVEQJMHg1NDI0CisjZGVmaW5lIFRDU0JSS1AJCTB4NTQyNQkvKiBOZWVkZWQgZm9yIFBPU0lYIHRjc2VuZGJyZWFrKCkgKi8KKy8qICNkZWZpbmUgVElPQ1RUWUdTVFJVQ1QgMHg1NDI2IC0gRm9ybWVyIGRlYnVnZ2luZy1vbmx5IGlvY3RsICovCisjZGVmaW5lIFRJT0NTQlJLCTB4NTQyNyAgLyogQlNEIGNvbXBhdGliaWxpdHkgKi8KKyNkZWZpbmUgVElPQ0NCUksJMHg1NDI4ICAvKiBCU0QgY29tcGF0aWJpbGl0eSAqLworI2RlZmluZSBUSU9DR1NJRAkweDU0MjkgIC8qIFJldHVybiB0aGUgc2Vzc2lvbiBJRCBvZiBGRCAqLworI2RlZmluZSBUSU9DR1BUTglfSU9SKCdUJywweDMwLCB1bnNpZ25lZCBpbnQpIC8qIEdldCBQdHkgTnVtYmVyIChvZiBwdHktbXV4IGRldmljZSkgKi8KKyNkZWZpbmUgVElPQ1NQVExDSwlfSU9XKCdUJywweDMxLCBpbnQpICAvKiBMb2NrL3VubG9jayBQdHkgKi8KKworI2RlZmluZSBGSU9OQ0xFWAkweDU0NTAKKyNkZWZpbmUgRklPQ0xFWAkJMHg1NDUxCisjZGVmaW5lIEZJT0FTWU5DCTB4NTQ1MgorI2RlZmluZSBUSU9DU0VSQ09ORklHCTB4NTQ1MworI2RlZmluZSBUSU9DU0VSR1dJTEQJMHg1NDU0CisjZGVmaW5lIFRJT0NTRVJTV0lMRAkweDU0NTUKKyNkZWZpbmUgVElPQ0dMQ0tUUk1JT1MJMHg1NDU2CisjZGVmaW5lIFRJT0NTTENLVFJNSU9TCTB4NTQ1NworI2RlZmluZSBUSU9DU0VSR1NUUlVDVAkweDU0NTggLyogRm9yIGRlYnVnZ2luZyBvbmx5ICovCisjZGVmaW5lIFRJT0NTRVJHRVRMU1IgICAweDU0NTkgLyogR2V0IGxpbmUgc3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIFRJT0NTRVJHRVRNVUxUSSAweDU0NUEgLyogR2V0IG11bHRpcG9ydCBjb25maWcgICovCisjZGVmaW5lIFRJT0NTRVJTRVRNVUxUSSAweDU0NUIgLyogU2V0IG11bHRpcG9ydCBjb25maWcgKi8KKworI2RlZmluZSBUSU9DTUlXQUlUCTB4NTQ1QwkvKiB3YWl0IGZvciBhIGNoYW5nZSBvbiBzZXJpYWwgaW5wdXQgbGluZShzKSAqLworI2RlZmluZSBUSU9DR0lDT1VOVAkweDU0NUQJLyogcmVhZCBzZXJpYWwgcG9ydCBpbmxpbmUgaW50ZXJydXB0IGNvdW50cyAqLworI2RlZmluZSBUSU9DR0hBWUVTRVNQICAgMHg1NDVFICAvKiBHZXQgSGF5ZXMgRVNQIGNvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgVElPQ1NIQVlFU0VTUCAgIDB4NTQ1RiAgLyogU2V0IEhheWVzIEVTUCBjb25maWd1cmF0aW9uICovCisjZGVmaW5lIEZJT1FTSVpFCTB4NTQ2MAorCisvKiBVc2VkIGZvciBwYWNrZXQgbW9kZSAqLworI2RlZmluZSBUSU9DUEtUX0RBVEEJCSAwCisjZGVmaW5lIFRJT0NQS1RfRkxVU0hSRUFECSAxCisjZGVmaW5lIFRJT0NQS1RfRkxVU0hXUklURQkgMgorI2RlZmluZSBUSU9DUEtUX1NUT1AJCSA0CisjZGVmaW5lIFRJT0NQS1RfU1RBUlQJCSA4CisjZGVmaW5lIFRJT0NQS1RfTk9TVE9QCQkxNgorI2RlZmluZSBUSU9DUEtUX0RPU1RPUAkJMzIKKworI2RlZmluZSBUSU9DU0VSX1RFTVQgICAgMHgwMQkvKiBUcmFuc21pdHRlciBwaHlzaWNhbGx5IGVtcHR5ICovCisKKyNlbmRpZiAvKiBfX0FSQ0hfTTMyUl9JT0NUTFNfSF9fICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvaXBjLmggYi9pbmNsdWRlL2FzbS1tMzJyL2lwYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0NmUzZDkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL2lwYy5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pcGMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvaXBjYnVmLmggYi9pbmNsdWRlL2FzbS1tMzJyL2lwY2J1Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjNzdmYjAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL2lwY2J1Zi5oCkBAIC0wLDAgKzEsMzMgQEAKKyNpZm5kZWYgX0FTTV9NMzJSX0lQQ0JVRl9ICisjZGVmaW5lIF9BU01fTTMyUl9JUENCVUZfSAorCisvKiAkSWQkICovCisKKy8qIG9yaWcgOiBpMzg2IDIuNC4xOCAqLworCisvKgorICogVGhlIGlwYzY0X3Blcm0gc3RydWN0dXJlIGZvciBtMzJyIGFyY2hpdGVjdHVyZS4KKyAqIE5vdGUgZXh0cmEgcGFkZGluZyBiZWNhdXNlIHRoaXMgc3RydWN0dXJlIGlzIHBhc3NlZCBiYWNrIGFuZCBmb3J0aAorICogYmV0d2VlbiBrZXJuZWwgYW5kIHVzZXIgc3BhY2UuCisgKgorICogUGFkIHNwYWNlIGlzIGxlZnQgZm9yOgorICogLSAzMi1iaXQgbW9kZV90IGFuZCBzZXEKKyAqIC0gMiBtaXNjZWxsYW5lb3VzIDMyLWJpdCB2YWx1ZXMKKyAqLworCitzdHJ1Y3QgaXBjNjRfcGVybQoreworCV9fa2VybmVsX2tleV90CQlrZXk7CisJX19rZXJuZWxfdWlkMzJfdAl1aWQ7CisJX19rZXJuZWxfZ2lkMzJfdAlnaWQ7CisJX19rZXJuZWxfdWlkMzJfdAljdWlkOworCV9fa2VybmVsX2dpZDMyX3QJY2dpZDsKKwlfX2tlcm5lbF9tb2RlX3QJCW1vZGU7CisJdW5zaWduZWQgc2hvcnQJCV9fcGFkMTsKKwl1bnNpZ25lZCBzaG9ydAkJc2VxOworCXVuc2lnbmVkIHNob3J0CQlfX3BhZDI7CisJdW5zaWduZWQgbG9uZwkJX191bnVzZWQxOworCXVuc2lnbmVkIGxvbmcJCV9fdW51c2VkMjsKK307CisKKyNlbmRpZiAvKiBfQVNNX00zMlJfSVBDQlVGX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvaXJxLmggYi9pbmNsdWRlL2FzbS1tMzJyL2lycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlZDc3OTYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL2lycS5oCkBAIC0wLDAgKzEsNzUgQEAKKyNpZmRlZiBfX0tFUk5FTF9fCisjaWZuZGVmIF9BU01fTTMyUl9JUlFfSAorI2RlZmluZSBfQVNNX00zMlJfSVJRX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjaWYgZGVmaW5lZChDT05GSUdfUExBVF9NMzI3MDBVVF9BbHBoYSkgfHwgZGVmaW5lZChDT05GSUdfUExBVF9VU1JWKQorLyoKKyAqIElSUSBkZWZpbml0aW9ucyBmb3IgTTMyNzAwVVQKKyAqICBNMzI3MDAgQ2hpcDogNjQgaW50ZXJydXB0cworICogIElDVSBvZiBNMzI3MDBVVC1vbi1ib2FyZCBQTEQ6IDMyIGludGVycnVwdHMgY2FzY2FkZWQgdG8gSU5UMSMgY2hpcCBwaW4KKyAqLworI2RlZmluZQlNMzI3MDBVVF9OVU1fQ1BVX0lSUQkoNjQpCisjZGVmaW5lIE0zMjcwMFVUX05VTV9QTERfSVJRCSgzMikKKyNkZWZpbmUgTTMyNzAwVVRfSVJRX0JBU0UJMAorI2RlZmluZSBNMzI3MDBVVF9DUFVfSVJRX0JBU0UJTTMyNzAwVVRfSVJRX0JBU0UKKyNkZWZpbmUgTTMyNzAwVVRfUExEX0lSUV9CQVNFCShNMzI3MDBVVF9DUFVfSVJRX0JBU0UgKyBNMzI3MDBVVF9OVU1fQ1BVX0lSUSkKKworI2RlZmluZSBOUl9JUlFTCShNMzI3MDBVVF9OVU1fQ1BVX0lSUSArIE0zMjcwMFVUX05VTV9QTERfSVJRKQorI2VsaWYgZGVmaW5lZChDT05GSUdfUExBVF9NMzI3MDBVVCkKKy8qCisgKiBJUlEgZGVmaW5pdGlvbnMgZm9yIE0zMjcwMFVUKFJldi5DKSArIE0zMlItTEFOCisgKiAgTTMyNzAwIENoaXA6IDY0IGludGVycnVwdHMKKyAqICBJQ1Ugb2YgTTMyNzAwVVQtb24tYm9hcmQgUExEOiAzMiBpbnRlcnJ1cHRzIGNhc2NhZGVkIHRvIElOVDEjIGNoaXAgcGluCisgKiAgSUNVIG9mIE0zMlItTENELW9uLWJvYXJkIFBMRDogMzIgaW50ZXJydXB0cyBjYXNjYWRlZCB0byBJTlQyIyBjaGlwIHBpbgorICogIElDVSBvZiBNMzJSLUxBTi1vbi1ib2FyZCBQTEQ6IDMyIGludGVycnVwdHMgY2FzY2FkZWQgdG8gSU5UMCMgY2hpcCBwaW4KKyAqLworI2RlZmluZSBNMzI3MDBVVF9OVU1fQ1BVX0lSUQkJKDY0KQorI2RlZmluZSBNMzI3MDBVVF9OVU1fUExEX0lSUQkJKDMyKQorI2RlZmluZSBNMzI3MDBVVF9OVU1fTENEX1BMRF9JUlEJKDMyKQorI2RlZmluZSBNMzI3MDBVVF9OVU1fTEFOX1BMRF9JUlEJKDMyKQorI2RlZmluZSBNMzI3MDBVVF9JUlFfQkFTRQkJMAorI2RlZmluZSBNMzI3MDBVVF9DUFVfSVJRX0JBU0UJCShNMzI3MDBVVF9JUlFfQkFTRSkKKyNkZWZpbmUgTTMyNzAwVVRfUExEX0lSUV9CQVNFIFwKKwkoTTMyNzAwVVRfQ1BVX0lSUV9CQVNFICsgTTMyNzAwVVRfTlVNX0NQVV9JUlEpCisjZGVmaW5lIE0zMjcwMFVUX0xDRF9QTERfSVJRX0JBU0UgXAorCShNMzI3MDBVVF9QTERfSVJRX0JBU0UgKyBNMzI3MDBVVF9OVU1fUExEX0lSUSkKKyNkZWZpbmUgTTMyNzAwVVRfTEFOX1BMRF9JUlFfQkFTRSBcCisJKE0zMjcwMFVUX0xDRF9QTERfSVJRX0JBU0UgKyBNMzI3MDBVVF9OVU1fTENEX1BMRF9JUlEpCisKKyNkZWZpbmUgTlJfSVJRUyBcCisJKE0zMjcwMFVUX05VTV9DUFVfSVJRICsgTTMyNzAwVVRfTlVNX1BMRF9JUlEgXAorCSsgTTMyNzAwVVRfTlVNX0xDRF9QTERfSVJRICsgTTMyNzAwVVRfTlVNX0xBTl9QTERfSVJRKQorI2VsaWYgZGVmaW5lZChDT05GSUdfUExBVF9PUFNQVVQpCisvKgorICogSVJRIGRlZmluaXRpb25zIGZvciBPUFNQVVQgKyBNMzJSLUxBTgorICogIE9QU1AgQ2hpcDogNjQgaW50ZXJydXB0cworICogIElDVSBvZiBPUFNQVVQtb24tYm9hcmQgUExEOiAzMiBpbnRlcnJ1cHRzIGNhc2NhZGVkIHRvIElOVDEjIGNoaXAgcGluCisgKiAgSUNVIG9mIE0zMlItTENELW9uLWJvYXJkIFBMRDogMzIgaW50ZXJydXB0cyBjYXNjYWRlZCB0byBJTlQyIyBjaGlwIHBpbgorICogIElDVSBvZiBNMzJSLUxBTi1vbi1ib2FyZCBQTEQ6IDMyIGludGVycnVwdHMgY2FzY2FkZWQgdG8gSU5UMCMgY2hpcCBwaW4KKyAqLworI2RlZmluZSBPUFNQVVRfTlVNX0NQVV9JUlEJCSg2NCkKKyNkZWZpbmUgT1BTUFVUX05VTV9QTERfSVJRCQkoMzIpCisjZGVmaW5lIE9QU1BVVF9OVU1fTENEX1BMRF9JUlEJKDMyKQorI2RlZmluZSBPUFNQVVRfTlVNX0xBTl9QTERfSVJRCSgzMikKKyNkZWZpbmUgT1BTUFVUX0lSUV9CQVNFCQkwCisjZGVmaW5lIE9QU1BVVF9DUFVfSVJRX0JBU0UJCShPUFNQVVRfSVJRX0JBU0UpCisjZGVmaW5lIE9QU1BVVF9QTERfSVJRX0JBU0UgXAorCShPUFNQVVRfQ1BVX0lSUV9CQVNFICsgT1BTUFVUX05VTV9DUFVfSVJRKQorI2RlZmluZSBPUFNQVVRfTENEX1BMRF9JUlFfQkFTRSBcCisJKE9QU1BVVF9QTERfSVJRX0JBU0UgKyBPUFNQVVRfTlVNX1BMRF9JUlEpCisjZGVmaW5lIE9QU1BVVF9MQU5fUExEX0lSUV9CQVNFIFwKKwkoT1BTUFVUX0xDRF9QTERfSVJRX0JBU0UgKyBPUFNQVVRfTlVNX0xDRF9QTERfSVJRKQorCisjZGVmaW5lIE5SX0lSUVMgXAorCShPUFNQVVRfTlVNX0NQVV9JUlEgKyBPUFNQVVRfTlVNX1BMRF9JUlEgXAorCSsgT1BTUFVUX05VTV9MQ0RfUExEX0lSUSArIE9QU1BVVF9OVU1fTEFOX1BMRF9JUlEpCisjZWxzZQorI2RlZmluZSBOUl9JUlFTCTY0CisjZW5kaWYKKworI2RlZmluZSBpcnFfY2Fub25pY2FsaXplKGlycSkJKGlycSkKKworI2VuZGlmIC8qIF9BU01fTTMyUl9JUlFfSCAqLworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIva21hcF90eXBlcy5oIGIvaW5jbHVkZS9hc20tbTMyci9rbWFwX3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQyOTU5MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIva21hcF90eXBlcy5oCkBAIC0wLDAgKzEsMzQgQEAKKyNpZm5kZWYgX19NMzJSX0tNQVBfVFlQRVNfSAorI2RlZmluZSBfX00zMlJfS01BUF9UWVBFU19ICisKKy8qIER1bW15IGhlYWRlciBqdXN0IHRvIGRlZmluZSBrbV90eXBlLiAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpZmRlZiBDT05GSUdfREVCVUdfSElHSE1FTQorIyBkZWZpbmUgRChuKSBfX0tNX0ZFTkNFXyMjbiAsCisjZWxzZQorIyBkZWZpbmUgRChuKQorI2VuZGlmCisKK2VudW0ga21fdHlwZSB7CitEKDApCUtNX0JPVU5DRV9SRUFELAorRCgxKQlLTV9TS0JfU1VOUlBDX0RBVEEsCitEKDIpCUtNX1NLQl9EQVRBX1NPRlRJUlEsCitEKDMpCUtNX1VTRVIwLAorRCg0KQlLTV9VU0VSMSwKK0QoNSkJS01fQklPX1NSQ19JUlEsCitEKDYpCUtNX0JJT19EU1RfSVJRLAorRCg3KQlLTV9QVEUwLAorRCg4KQlLTV9QVEUxLAorRCg5KQlLTV9JUlEwLAorRCgxMCkJS01fSVJRMSwKK0QoMTEpCUtNX1NPRlRJUlEwLAorRCgxMikJS01fU09GVElSUTEsCitEKDEzKQlLTV9UWVBFX05SCit9OworCisjdW5kZWYgRAorCisjZW5kaWYgLyogX19NMzJSX0tNQVBfVFlQRVNfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL2xpbmthZ2UuaCBiL2luY2x1ZGUvYXNtLW0zMnIvbGlua2FnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5ZmIxNTEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL2xpbmthZ2UuaApAQCAtMCwwICsxLDcgQEAKKyNpZm5kZWYgX19BU01fTElOS0FHRV9ICisjZGVmaW5lIF9fQVNNX0xJTktBR0VfSAorCisjZGVmaW5lIF9fQUxJR04JCS5iYWxpZ24gNAorI2RlZmluZSBfX0FMSUdOX1NUUgkiLmJhbGlnbiA0IgorCisjZW5kaWYgLyogX19BU01fTElOS0FHRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL2xvY2FsLmggYi9pbmNsdWRlL2FzbS1tMzJyL2xvY2FsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVmMjlkMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvbG9jYWwuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19NMzJSX0xPQ0FMX0gKKyNkZWZpbmUgX19NMzJSX0xPQ0FMX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2xvY2FsLmg+CisKKyNlbmRpZiAvKiBfX00zMlJfTE9DQUxfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9tMzIxMDIuaCBiL2luY2x1ZGUvYXNtLW0zMnIvbTMyMTAyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU2MDM0MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvbTMyMTAyLmgKQEAgLTAsMCArMSwyOTQgQEAKKyNpZm5kZWYgX00zMjEwMl9IXworI2RlZmluZSBfTTMyMTAyX0hfCisKKy8qCisgKiBSZW5lc2FzIE0zMlIgMzIxMDIgZ3JvdXAKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEgIEhpdG9zaGkgWWFtYW1vdG8KKyAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNCAgUmVuZXNhcyBUZWNobm9sb2d5IENvcnAuCisgKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KgorICogU3BlY2lhbCBGdW5jdGlvbiBSZWdpc3RlcgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKyNkZWZpbmUgTTMyUl9TRlJfT0ZGU0VUICAoMHgwMEUwMDAwMCkgIC8qIDB4MDBFMDAwMDAtMHgwMEVGRkZGRiAxW01CXSAqLworCisvKgorICogQ2xvY2sgYW5kIFBvd2VyIE1hbmFnZW1lbnQgcmVnaXN0ZXJzLgorICovCisjZGVmaW5lIE0zMlJfQ1BNX09GRlNFVCAgICAgICAgICAoMHgwMDBGNDAwMCtNMzJSX1NGUl9PRkZTRVQpCisKKyNkZWZpbmUgTTMyUl9DUE1fQ1BVQ0xLQ1JfUE9SVEwgICgweDAwK00zMlJfQ1BNX09GRlNFVCkKKyNkZWZpbmUgTTMyUl9DUE1fQ0xLTU9EX1BPUlRMICAgICgweDA0K00zMlJfQ1BNX09GRlNFVCkKKyNkZWZpbmUgTTMyUl9DUE1fUExMQ1JfUE9SVEwgICAgICgweDA4K00zMlJfQ1BNX09GRlNFVCkKKworLyoKKyAqIERNQSBDb250cm9sbGVyIHJlZ2lzdGVycy4KKyAqLworI2RlZmluZSBNMzJSX0RNQV9PRkZTRVQJCSgweDAwMEY4MDAwK00zMlJfU0ZSX09GRlNFVCkKKworI2RlZmluZSBNMzJSX0RNQUVOX1BPUlRMCSgweDAwMCtNMzJSX0RNQV9PRkZTRVQpCisjZGVmaW5lIE0zMlJfRE1BSVNUU19QT1JUTAkoMHgwMDQrTTMyUl9ETUFfT0ZGU0VUKQorI2RlZmluZSBNMzJSX0RNQUVERVRfUE9SVEwJKDB4MDA4K00zMlJfRE1BX09GRlNFVCkKKyNkZWZpbmUgTTMyUl9ETUFBU1RTX1BPUlRMCSgweDAwYytNMzJSX0RNQV9PRkZTRVQpCisKKyNkZWZpbmUgTTMyUl9ETUEwQ1IwX1BPUlRMCSgweDEwMCtNMzJSX0RNQV9PRkZTRVQpCisjZGVmaW5lIE0zMlJfRE1BMENSMV9QT1JUTAkoMHgxMDQrTTMyUl9ETUFfT0ZGU0VUKQorI2RlZmluZSBNMzJSX0RNQTBDU0FfUE9SVEwJKDB4MTA4K00zMlJfRE1BX09GRlNFVCkKKyNkZWZpbmUgTTMyUl9ETUEwUlNBX1BPUlRMCSgweDEwYytNMzJSX0RNQV9PRkZTRVQpCisjZGVmaW5lIE0zMlJfRE1BMENEQV9QT1JUTAkoMHgxMTArTTMyUl9ETUFfT0ZGU0VUKQorI2RlZmluZSBNMzJSX0RNQTBSREFfUE9SVEwJKDB4MTE0K00zMlJfRE1BX09GRlNFVCkKKyNkZWZpbmUgTTMyUl9ETUEwQ0JDVVRfUE9SVEwJKDB4MTE4K00zMlJfRE1BX09GRlNFVCkKKyNkZWZpbmUgTTMyUl9ETUEwUkJDVVRfUE9SVEwJKDB4MTFjK00zMlJfRE1BX09GRlNFVCkKKworI2RlZmluZSBNMzJSX0RNQTFDUjBfUE9SVEwJKDB4MjAwK00zMlJfRE1BX09GRlNFVCkKKyNkZWZpbmUgTTMyUl9ETUExQ1IxX1BPUlRMCSgweDIwNCtNMzJSX0RNQV9PRkZTRVQpCisjZGVmaW5lIE0zMlJfRE1BMUNTQV9QT1JUTAkoMHgyMDgrTTMyUl9ETUFfT0ZGU0VUKQorI2RlZmluZSBNMzJSX0RNQTFSU0FfUE9SVEwJKDB4MjBjK00zMlJfRE1BX09GRlNFVCkKKyNkZWZpbmUgTTMyUl9ETUExQ0RBX1BPUlRMCSgweDIxMCtNMzJSX0RNQV9PRkZTRVQpCisjZGVmaW5lIE0zMlJfRE1BMVJEQV9QT1JUTAkoMHgyMTQrTTMyUl9ETUFfT0ZGU0VUKQorI2RlZmluZSBNMzJSX0RNQTFDQkNVVF9QT1JUTAkoMHgyMTgrTTMyUl9ETUFfT0ZGU0VUKQorI2RlZmluZSBNMzJSX0RNQTFSQkNVVF9QT1JUTAkoMHgyMWMrTTMyUl9ETUFfT0ZGU0VUKQorCisvKgorICogTXVsdGkgRnVuY3Rpb24gVGltZXIgcmVnaXN0ZXJzLgorICovCisjZGVmaW5lIE0zMlJfTUZUX09GRlNFVCAgICAgICAgKDB4MDAwRkMwMDArTTMyUl9TRlJfT0ZGU0VUKQorCisjZGVmaW5lIE0zMlJfTUZUQ1JfUE9SVEwgICAgICAgKDB4MDAwK00zMlJfTUZUX09GRlNFVCkgIC8qIE1GVCBjb250cm9sICovCisjZGVmaW5lIE0zMlJfTUZUUlBSX1BPUlRMICAgICAgKDB4MDA0K00zMlJfTUZUX09GRlNFVCkgIC8qIE1GVCByZWFsIHBvcnQgKi8KKworI2RlZmluZSBNMzJSX01GVDBfT0ZGU0VUICAgICAgICgweDEwMCtNMzJSX01GVF9PRkZTRVQpCisjZGVmaW5lIE0zMlJfTUZUME1PRF9QT1JUTCAgICAgKDB4MDArTTMyUl9NRlQwX09GRlNFVCkgIC8qIE1GVDAgbW9kZSAqLworI2RlZmluZSBNMzJSX01GVDBCT1NfUE9SVEwgICAgICgweDA0K00zMlJfTUZUMF9PRkZTRVQpICAvKiBNRlQwIGItcG9ydCBvdXRwdXQgc3RhdHVzICovCisjZGVmaW5lIE0zMlJfTUZUMENVVF9QT1JUTCAgICAgKDB4MDgrTTMyUl9NRlQwX09GRlNFVCkgIC8qIE1GVDAgY291bnQgKi8KKyNkZWZpbmUgTTMyUl9NRlQwUkxEX1BPUlRMICAgICAoMHgwQytNMzJSX01GVDBfT0ZGU0VUKSAgLyogTUZUMCByZWxvYWQgKi8KKyNkZWZpbmUgTTMyUl9NRlQwQ01QUkxEX1BPUlRMICAoMHgxMCtNMzJSX01GVDBfT0ZGU0VUKSAgLyogTUZUMCBjb21wYXJlIHJlbG9hZCAqLworCisjZGVmaW5lIE0zMlJfTUZUMV9PRkZTRVQgICAgICAgKDB4MjAwK00zMlJfTUZUX09GRlNFVCkKKyNkZWZpbmUgTTMyUl9NRlQxTU9EX1BPUlRMICAgICAoMHgwMCtNMzJSX01GVDFfT0ZGU0VUKSAgLyogTUZUMSBtb2RlICovCisjZGVmaW5lIE0zMlJfTUZUMUJPU19QT1JUTCAgICAgKDB4MDQrTTMyUl9NRlQxX09GRlNFVCkgIC8qIE1GVDEgYi1wb3J0IG91dHB1dCBzdGF0dXMgKi8KKyNkZWZpbmUgTTMyUl9NRlQxQ1VUX1BPUlRMICAgICAoMHgwOCtNMzJSX01GVDFfT0ZGU0VUKSAgLyogTUZUMSBjb3VudCAqLworI2RlZmluZSBNMzJSX01GVDFSTERfUE9SVEwgICAgICgweDBDK00zMlJfTUZUMV9PRkZTRVQpICAvKiBNRlQxIHJlbG9hZCAqLworI2RlZmluZSBNMzJSX01GVDFDTVBSTERfUE9SVEwgICgweDEwK00zMlJfTUZUMV9PRkZTRVQpICAvKiBNRlQxIGNvbXBhcmUgcmVsb2FkICovCisKKyNkZWZpbmUgTTMyUl9NRlQyX09GRlNFVCAgICAgICAoMHgzMDArTTMyUl9NRlRfT0ZGU0VUKQorI2RlZmluZSBNMzJSX01GVDJNT0RfUE9SVEwgICAgICgweDAwK00zMlJfTUZUMl9PRkZTRVQpICAvKiBNRlQyIG1vZGUgKi8KKyNkZWZpbmUgTTMyUl9NRlQyQk9TX1BPUlRMICAgICAoMHgwNCtNMzJSX01GVDJfT0ZGU0VUKSAgLyogTUZUMiBiLXBvcnQgb3V0cHV0IHN0YXR1cyAqLworI2RlZmluZSBNMzJSX01GVDJDVVRfUE9SVEwgICAgICgweDA4K00zMlJfTUZUMl9PRkZTRVQpICAvKiBNRlQyIGNvdW50ICovCisjZGVmaW5lIE0zMlJfTUZUMlJMRF9QT1JUTCAgICAgKDB4MEMrTTMyUl9NRlQyX09GRlNFVCkgIC8qIE1GVDIgcmVsb2FkICovCisjZGVmaW5lIE0zMlJfTUZUMkNNUFJMRF9QT1JUTCAgKDB4MTArTTMyUl9NRlQyX09GRlNFVCkgIC8qIE1GVDIgY29tcGFyZSByZWxvYWQgKi8KKworI2RlZmluZSBNMzJSX01GVDNfT0ZGU0VUICAgICAgICgweDQwMCtNMzJSX01GVF9PRkZTRVQpCisjZGVmaW5lIE0zMlJfTUZUM01PRF9QT1JUTCAgICAgKDB4MDArTTMyUl9NRlQzX09GRlNFVCkgIC8qIE1GVDMgbW9kZSAqLworI2RlZmluZSBNMzJSX01GVDNCT1NfUE9SVEwgICAgICgweDA0K00zMlJfTUZUM19PRkZTRVQpICAvKiBNRlQzIGItcG9ydCBvdXRwdXQgc3RhdHVzICovCisjZGVmaW5lIE0zMlJfTUZUM0NVVF9QT1JUTCAgICAgKDB4MDgrTTMyUl9NRlQzX09GRlNFVCkgIC8qIE1GVDMgY291bnQgKi8KKyNkZWZpbmUgTTMyUl9NRlQzUkxEX1BPUlRMICAgICAoMHgwQytNMzJSX01GVDNfT0ZGU0VUKSAgLyogTUZUMyByZWxvYWQgKi8KKyNkZWZpbmUgTTMyUl9NRlQzQ01QUkxEX1BPUlRMICAoMHgxMCtNMzJSX01GVDNfT0ZGU0VUKSAgLyogTUZUMyBjb21wYXJlIHJlbG9hZCAqLworCisjZGVmaW5lIE0zMlJfTUZUNF9PRkZTRVQgICAgICAgKDB4NTAwK00zMlJfTUZUX09GRlNFVCkKKyNkZWZpbmUgTTMyUl9NRlQ0TU9EX1BPUlRMICAgICAoMHgwMCtNMzJSX01GVDRfT0ZGU0VUKSAgLyogTUZUNCBtb2RlICovCisjZGVmaW5lIE0zMlJfTUZUNEJPU19QT1JUTCAgICAgKDB4MDQrTTMyUl9NRlQ0X09GRlNFVCkgIC8qIE1GVDQgYi1wb3J0IG91dHB1dCBzdGF0dXMgKi8KKyNkZWZpbmUgTTMyUl9NRlQ0Q1VUX1BPUlRMICAgICAoMHgwOCtNMzJSX01GVDRfT0ZGU0VUKSAgLyogTUZUNCBjb3VudCAqLworI2RlZmluZSBNMzJSX01GVDRSTERfUE9SVEwgICAgICgweDBDK00zMlJfTUZUNF9PRkZTRVQpICAvKiBNRlQ0IHJlbG9hZCAqLworI2RlZmluZSBNMzJSX01GVDRDTVBSTERfUE9SVEwgICgweDEwK00zMlJfTUZUNF9PRkZTRVQpICAvKiBNRlQ0IGNvbXBhcmUgcmVsb2FkICovCisKKyNkZWZpbmUgTTMyUl9NRlQ1X09GRlNFVCAgICAgICAoMHg2MDArTTMyUl9NRlRfT0ZGU0VUKQorI2RlZmluZSBNMzJSX01GVDVNT0RfUE9SVEwgICAgICgweDAwK00zMlJfTUZUNV9PRkZTRVQpICAvKiBNRlQ0IG1vZGUgKi8KKyNkZWZpbmUgTTMyUl9NRlQ1Qk9TX1BPUlRMICAgICAoMHgwNCtNMzJSX01GVDVfT0ZGU0VUKSAgLyogTUZUNCBiLXBvcnQgb3V0cHV0IHN0YXR1cyAqLworI2RlZmluZSBNMzJSX01GVDVDVVRfUE9SVEwgICAgICgweDA4K00zMlJfTUZUNV9PRkZTRVQpICAvKiBNRlQ0IGNvdW50ICovCisjZGVmaW5lIE0zMlJfTUZUNVJMRF9QT1JUTCAgICAgKDB4MEMrTTMyUl9NRlQ1X09GRlNFVCkgIC8qIE1GVDQgcmVsb2FkICovCisjZGVmaW5lIE0zMlJfTUZUNUNNUFJMRF9QT1JUTCAgKDB4MTArTTMyUl9NRlQ1X09GRlNFVCkgIC8qIE1GVDQgY29tcGFyZSByZWxvYWQgKi8KKworI2lmZGVmIENPTkZJR19DSElQX00zMjcwMAorI2RlZmluZSBNMzJSX01GVENSX01GVDBNU0sgICgxVUw8PDMxKSAgLyogYjAgKi8KKyNkZWZpbmUgTTMyUl9NRlRDUl9NRlQxTVNLICAoMVVMPDwzMCkgIC8qIGIxICovCisjZGVmaW5lIE0zMlJfTUZUQ1JfTUZUMk1TSyAgKDFVTDw8MjkpICAvKiBiMiAqLworI2RlZmluZSBNMzJSX01GVENSX01GVDNNU0sgICgxVUw8PDI4KSAgLyogYjMgKi8KKyNkZWZpbmUgTTMyUl9NRlRDUl9NRlQ0TVNLICAoMVVMPDwyNykgIC8qIGI0ICovCisjZGVmaW5lIE0zMlJfTUZUQ1JfTUZUNU1TSyAgKDFVTDw8MjYpICAvKiBiNSAqLworI2RlZmluZSBNMzJSX01GVENSX01GVDBFTiAgICgxVUw8PDIzKSAgLyogYjggKi8KKyNkZWZpbmUgTTMyUl9NRlRDUl9NRlQxRU4gICAoMVVMPDwyMikgIC8qIGI5ICovCisjZGVmaW5lIE0zMlJfTUZUQ1JfTUZUMkVOICAgKDFVTDw8MjEpICAvKiBiMTAgKi8KKyNkZWZpbmUgTTMyUl9NRlRDUl9NRlQzRU4gICAoMVVMPDwyMCkgIC8qIGIxMSAqLworI2RlZmluZSBNMzJSX01GVENSX01GVDRFTiAgICgxVUw8PDE5KSAgLyogYjEyICovCisjZGVmaW5lIE0zMlJfTUZUQ1JfTUZUNUVOICAgKDFVTDw8MTgpICAvKiBiMTMgKi8KKyNlbHNlCS8qIG5vdCBDT05GSUdfQ0hJUF9NMzI3MDAgKi8KKyNkZWZpbmUgTTMyUl9NRlRDUl9NRlQwTVNLICAoMVVMPDwxNSkgIC8qIGIxNiAqLworI2RlZmluZSBNMzJSX01GVENSX01GVDFNU0sgICgxVUw8PDE0KSAgLyogYjE3ICovCisjZGVmaW5lIE0zMlJfTUZUQ1JfTUZUMk1TSyAgKDFVTDw8MTMpICAvKiBiMTggKi8KKyNkZWZpbmUgTTMyUl9NRlRDUl9NRlQzTVNLICAoMVVMPDwxMikgIC8qIGIxOSAqLworI2RlZmluZSBNMzJSX01GVENSX01GVDRNU0sgICgxVUw8PDExKSAgLyogYjIwICovCisjZGVmaW5lIE0zMlJfTUZUQ1JfTUZUNU1TSyAgKDFVTDw8MTApICAvKiBiMjEgKi8KKyNkZWZpbmUgTTMyUl9NRlRDUl9NRlQwRU4gICAoMVVMPDw3KSAgIC8qIGIyNCAqLworI2RlZmluZSBNMzJSX01GVENSX01GVDFFTiAgICgxVUw8PDYpICAgLyogYjI1ICovCisjZGVmaW5lIE0zMlJfTUZUQ1JfTUZUMkVOICAgKDFVTDw8NSkgICAvKiBiMjYgKi8KKyNkZWZpbmUgTTMyUl9NRlRDUl9NRlQzRU4gICAoMVVMPDw0KSAgIC8qIGIyNyAqLworI2RlZmluZSBNMzJSX01GVENSX01GVDRFTiAgICgxVUw8PDMpICAgLyogYjI4ICovCisjZGVmaW5lIE0zMlJfTUZUQ1JfTUZUNUVOICAgKDFVTDw8MikgICAvKiBiMjkgKi8KKyNlbmRpZgkvKiBub3QgQ09ORklHX0NISVBfTTMyNzAwICovCisKKyNkZWZpbmUgTTMyUl9NRlRNT0RfQ0NfTUFTSyAgICAoMVVMPDwxNSkgIC8qIGIxNiAqLworI2RlZmluZSBNMzJSX01GVE1PRF9UQ0NSICAgICAgICgxVUw8PDEzKSAgLyogYjE4ICovCisjZGVmaW5lIE0zMlJfTUZUTU9EX0dUU0VMMDAwICAgKDBVTDw8OCkgICAvKiBiMjEtMjMgOiAwMDAgKi8KKyNkZWZpbmUgTTMyUl9NRlRNT0RfR1RTRUwwMDEgICAoMVVMPDw4KSAgIC8qIGIyMS0yMyA6IDAwMSAqLworI2RlZmluZSBNMzJSX01GVE1PRF9HVFNFTDAxMCAgICgyVUw8PDgpICAgLyogYjIxLTIzIDogMDEwICovCisjZGVmaW5lIE0zMlJfTUZUTU9EX0dUU0VMMDExICAgKDNVTDw8OCkgICAvKiBiMjEtMjMgOiAwMTEgKi8KKyNkZWZpbmUgTTMyUl9NRlRNT0RfR1RTRUwxMTAgICAoNlVMPDw4KSAgIC8qIGIyMS0yMyA6IDExMCAqLworI2RlZmluZSBNMzJSX01GVE1PRF9HVFNFTDExMSAgICg3VUw8PDgpICAgLyogYjIxLTIzIDogMTExICovCisjZGVmaW5lIE0zMlJfTUZUTU9EX0NNU0VMICAgICAgKDFVTDw8MykgICAvKiBiMjggKi8KKyNkZWZpbmUgTTMyUl9NRlRNT0RfQ1NTRUwwMDAgICAoMFVMPDwwKSAgIC8qIGIyOS1iMzEgOiAwMDAgKi8KKyNkZWZpbmUgTTMyUl9NRlRNT0RfQ1NTRUwwMDEgICAoMVVMPDwwKSAgIC8qIGIyOS1iMzEgOiAwMDEgKi8KKyNkZWZpbmUgTTMyUl9NRlRNT0RfQ1NTRUwwMTAgICAoMlVMPDwwKSAgIC8qIGIyOS1iMzEgOiAwMTAgKi8KKyNkZWZpbmUgTTMyUl9NRlRNT0RfQ1NTRUwwMTEgICAoM1VMPDwwKSAgIC8qIGIyOS1iMzEgOiAwMTEgKi8KKyNkZWZpbmUgTTMyUl9NRlRNT0RfQ1NTRUwxMDAgICAoNFVMPDwwKSAgIC8qIGIyOS1iMzEgOiAxMDAgKi8KKyNkZWZpbmUgTTMyUl9NRlRNT0RfQ1NTRUwxMTAgICAoNlVMPDwwKSAgIC8qIGIyOS1iMzEgOiAxMTAgKi8KKworLyoKKyAqIFNlcmlhbCBJL08gcmVnaXN0ZXJzLgorICovCisjZGVmaW5lIE0zMlJfU0lPX09GRlNFVCAgKDB4MDAwRkQwMDArTTMyUl9TRlJfT0ZGU0VUKQorCisjZGVmaW5lIE0zMlJfU0lPMF9DUl9QT1JUTCAgICAoMHgwMDArTTMyUl9TSU9fT0ZGU0VUKQorI2RlZmluZSBNMzJSX1NJTzBfTU9EMF9QT1JUTCAgKDB4MDA0K00zMlJfU0lPX09GRlNFVCkKKyNkZWZpbmUgTTMyUl9TSU8wX01PRDFfUE9SVEwgICgweDAwOCtNMzJSX1NJT19PRkZTRVQpCisjZGVmaW5lIE0zMlJfU0lPMF9TVFNfUE9SVEwgICAoMHgwMEMrTTMyUl9TSU9fT0ZGU0VUKQorI2RlZmluZSBNMzJSX1NJTzBfVFJDUl9QT1JUTCAgKDB4MDEwK00zMlJfU0lPX09GRlNFVCkKKyNkZWZpbmUgTTMyUl9TSU8wX0JBVVJfUE9SVEwgICgweDAxNCtNMzJSX1NJT19PRkZTRVQpCisjZGVmaW5lIE0zMlJfU0lPMF9SQkFVUl9QT1JUTCAoMHgwMTgrTTMyUl9TSU9fT0ZGU0VUKQorI2RlZmluZSBNMzJSX1NJTzBfVFhCX1BPUlRMICAgKDB4MDFDK00zMlJfU0lPX09GRlNFVCkKKyNkZWZpbmUgTTMyUl9TSU8wX1JYQl9QT1JUTCAgICgweDAyMCtNMzJSX1NJT19PRkZTRVQpCisKKy8qCisgKiBJbnRlcnJ1cHQgQ29udHJvbCBVbml0IHJlZ2lzdGVycy4KKyAqLworI2RlZmluZSBNMzJSX0lDVV9PRkZTRVQgICAgICAgKDB4MDAwRkYwMDArTTMyUl9TRlJfT0ZGU0VUKQorI2RlZmluZSBNMzJSX0lDVV9JU1RTX1BPUlRMICAgKDB4MDA0K00zMlJfSUNVX09GRlNFVCkKKyNkZWZpbmUgTTMyUl9JQ1VfSVJFUTBfUE9SVEwgICgweDAwOCtNMzJSX0lDVV9PRkZTRVQpCisjZGVmaW5lIE0zMlJfSUNVX0lSRVExX1BPUlRMICAoMHgwMEMrTTMyUl9JQ1VfT0ZGU0VUKQorI2RlZmluZSBNMzJSX0lDVV9TQklDUl9QT1JUTCAgKDB4MDE4K00zMlJfSUNVX09GRlNFVCkKKyNkZWZpbmUgTTMyUl9JQ1VfSU1BU0tfUE9SVEwgICgweDAxQytNMzJSX0lDVV9PRkZTRVQpCisjZGVmaW5lIE0zMlJfSUNVX0NSMV9QT1JUTCAgICAoMHgyMDArTTMyUl9JQ1VfT0ZGU0VUKSAgLyogSU5UMCAqLworI2RlZmluZSBNMzJSX0lDVV9DUjJfUE9SVEwgICAgKDB4MjA0K00zMlJfSUNVX09GRlNFVCkgIC8qIElOVDEgKi8KKyNkZWZpbmUgTTMyUl9JQ1VfQ1IzX1BPUlRMICAgICgweDIwOCtNMzJSX0lDVV9PRkZTRVQpICAvKiBJTlQyICovCisjZGVmaW5lIE0zMlJfSUNVX0NSNF9QT1JUTCAgICAoMHgyMEMrTTMyUl9JQ1VfT0ZGU0VUKSAgLyogSU5UMyAqLworI2RlZmluZSBNMzJSX0lDVV9DUjVfUE9SVEwgICAgKDB4MjEwK00zMlJfSUNVX09GRlNFVCkgIC8qIElOVDQgKi8KKyNkZWZpbmUgTTMyUl9JQ1VfQ1I2X1BPUlRMICAgICgweDIxNCtNMzJSX0lDVV9PRkZTRVQpICAvKiBJTlQ1ICovCisjZGVmaW5lIE0zMlJfSUNVX0NSN19QT1JUTCAgICAoMHgyMTgrTTMyUl9JQ1VfT0ZGU0VUKSAgLyogSU5UNiAqLworI2RlZmluZSBNMzJSX0lDVV9DUjE2X1BPUlRMICAgKDB4MjNDK00zMlJfSUNVX09GRlNFVCkgIC8qIE1GVDAgKi8KKyNkZWZpbmUgTTMyUl9JQ1VfQ1IxN19QT1JUTCAgICgweDI0MCtNMzJSX0lDVV9PRkZTRVQpICAvKiBNRlQxICovCisjZGVmaW5lIE0zMlJfSUNVX0NSMThfUE9SVEwgICAoMHgyNDQrTTMyUl9JQ1VfT0ZGU0VUKSAgLyogTUZUMiAqLworI2RlZmluZSBNMzJSX0lDVV9DUjE5X1BPUlRMICAgKDB4MjQ4K00zMlJfSUNVX09GRlNFVCkgIC8qIE1GVDMgKi8KKyNkZWZpbmUgTTMyUl9JQ1VfQ1IyMF9QT1JUTCAgICgweDI0QytNMzJSX0lDVV9PRkZTRVQpICAvKiBNRlQ0ICovCisjZGVmaW5lIE0zMlJfSUNVX0NSMjFfUE9SVEwgICAoMHgyNTArTTMyUl9JQ1VfT0ZGU0VUKSAgLyogTUZUNSAqLworI2RlZmluZSBNMzJSX0lDVV9DUjMyX1BPUlRMICAgKDB4MjdDK00zMlJfSUNVX09GRlNFVCkgIC8qIERNQTAgKi8KKyNkZWZpbmUgTTMyUl9JQ1VfQ1IzM19QT1JUTCAgICgweDI4MCtNMzJSX0lDVV9PRkZTRVQpICAvKiBETUExICovCisjZGVmaW5lIE0zMlJfSUNVX0NSNDhfUE9SVEwgICAoMHgyQkMrTTMyUl9JQ1VfT0ZGU0VUKSAgLyogU0lPMCAqLworI2RlZmluZSBNMzJSX0lDVV9DUjQ5X1BPUlRMICAgKDB4MkMwK00zMlJfSUNVX09GRlNFVCkgIC8qIFNJTzAgKi8KKyNkZWZpbmUgTTMyUl9JQ1VfQ1I1MF9QT1JUTCAgICgweDJDNCtNMzJSX0lDVV9PRkZTRVQpICAvKiBTSU8xICovCisjZGVmaW5lIE0zMlJfSUNVX0NSNTFfUE9SVEwgICAoMHgyQzgrTTMyUl9JQ1VfT0ZGU0VUKSAgLyogU0lPMSAqLworI2RlZmluZSBNMzJSX0lDVV9DUjUyX1BPUlRMICAgKDB4MkNDK00zMlJfSUNVX09GRlNFVCkgIC8qIFNJTzIgKi8KKyNkZWZpbmUgTTMyUl9JQ1VfQ1I1M19QT1JUTCAgICgweDJEMCtNMzJSX0lDVV9PRkZTRVQpICAvKiBTSU8yICovCisjZGVmaW5lIE0zMlJfSUNVX0NSNTRfUE9SVEwgICAoMHgyRDQrTTMyUl9JQ1VfT0ZGU0VUKSAgLyogU0lPMyAqLworI2RlZmluZSBNMzJSX0lDVV9DUjU1X1BPUlRMICAgKDB4MkQ4K00zMlJfSUNVX09GRlNFVCkgIC8qIFNJTzMgKi8KKyNkZWZpbmUgTTMyUl9JQ1VfQ1I1Nl9QT1JUTCAgICgweDJEQytNMzJSX0lDVV9PRkZTRVQpICAvKiBTSU80ICovCisjZGVmaW5lIE0zMlJfSUNVX0NSNTdfUE9SVEwgICAoMHgyRTArTTMyUl9JQ1VfT0ZGU0VUKSAgLyogU0lPNCAqLworCisjaWZkZWYgQ09ORklHX1NNUAorI2RlZmluZSBNMzJSX0lDVV9JUElDUjBfUE9SVEwgKDB4MmRjK00zMlJfSUNVX09GRlNFVCkgIC8qIElQSTAgKi8KKyNkZWZpbmUgTTMyUl9JQ1VfSVBJQ1IxX1BPUlRMICgweDJlMCtNMzJSX0lDVV9PRkZTRVQpICAvKiBJUEkxICovCisjZGVmaW5lIE0zMlJfSUNVX0lQSUNSMl9QT1JUTCAoMHgyZTQrTTMyUl9JQ1VfT0ZGU0VUKSAgLyogSVBJMiAqLworI2RlZmluZSBNMzJSX0lDVV9JUElDUjNfUE9SVEwgKDB4MmU4K00zMlJfSUNVX09GRlNFVCkgIC8qIElQSTMgKi8KKyNkZWZpbmUgTTMyUl9JQ1VfSVBJQ1I0X1BPUlRMICgweDJlYytNMzJSX0lDVV9PRkZTRVQpICAvKiBJUEk0ICovCisjZGVmaW5lIE0zMlJfSUNVX0lQSUNSNV9QT1JUTCAoMHgyZjArTTMyUl9JQ1VfT0ZGU0VUKSAgLyogSVBJNSAqLworI2RlZmluZSBNMzJSX0lDVV9JUElDUjZfUE9SVEwgKDB4MmY0K00zMlJfSUNVX09GRlNFVCkgIC8qIElQSTYgKi8KKyNkZWZpbmUgTTMyUl9JQ1VfSVBJQ1I3X1BPUlRMICgweDJmOCtNMzJSX0lDVV9PRkZTRVQpICAvKiBJUEk3ICovCisjZW5kaWYgLyogQ09ORklHX1NNUCAqLworCisjZGVmaW5lIE0zMlJfSUNVSU1BU0tfSU1TSzAgICgwVUw8PDE2KSAgLyogYjEzLWIxNTogRGlzYWJsZSBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgTTMyUl9JQ1VJTUFTS19JTVNLMSAgKDFVTDw8MTYpICAvKiBiMTMtYjE1OiBFbmFibGUgbGV2ZWwgMCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgTTMyUl9JQ1VJTUFTS19JTVNLMiAgKDJVTDw8MTYpICAvKiBiMTMtYjE1OiBFbmFibGUgbGV2ZWwgMCwxIGludGVycnVwdCAqLworI2RlZmluZSBNMzJSX0lDVUlNQVNLX0lNU0szICAoM1VMPDwxNikgIC8qIGIxMy1iMTU6IEVuYWJsZSBsZXZlbCAwLTIgaW50ZXJydXB0ICovCisjZGVmaW5lIE0zMlJfSUNVSU1BU0tfSU1TSzQgICg0VUw8PDE2KSAgLyogYjEzLWIxNTogRW5hYmxlIGxldmVsIDAtMyBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgTTMyUl9JQ1VJTUFTS19JTVNLNSAgKDVVTDw8MTYpICAvKiBiMTMtYjE1OiBFbmFibGUgbGV2ZWwgMC00IGludGVycnVwdCAqLworI2RlZmluZSBNMzJSX0lDVUlNQVNLX0lNU0s2ICAoNlVMPDwxNikgIC8qIGIxMy1iMTU6IEVuYWJsZSBsZXZlbCAwLTUgaW50ZXJydXB0ICovCisjZGVmaW5lIE0zMlJfSUNVSU1BU0tfSU1TSzcgICg3VUw8PDE2KSAgLyogYjEzLWIxNTogRW5hYmxlIGxldmVsIDAtNiBpbnRlcnJ1cHQgKi8KKworI2RlZmluZSBNMzJSX0lDVUNSX0lFTiAgICAgICgxVUw8PDEyKSAgLyogYjE5OiBJbnRlcnJ1cHQgZW5hYmxlICovCisjZGVmaW5lIE0zMlJfSUNVQ1JfSVJRICAgICAgKDFVTDw8OCkgICAvKiBiMjM6IEludGVycnVwdCByZXF1ZXN0ICovCisjZGVmaW5lIE0zMlJfSUNVQ1JfSVNNT0QwMCAgKDBVTDw8NCkgICAvKiBiMjYtYjI3OiBJbnRlcnJ1cHQgc2Vuc2UgbW9kZSBFZGdlIEh0b0wgKi8KKyNkZWZpbmUgTTMyUl9JQ1VDUl9JU01PRDAxICAoMVVMPDw0KSAgIC8qIGIyNi1iMjc6IEludGVycnVwdCBzZW5zZSBtb2RlIExldmVsIEwgKi8KKyNkZWZpbmUgTTMyUl9JQ1VDUl9JU01PRDEwICAoMlVMPDw0KSAgIC8qIGIyNi1iMjc6IEludGVycnVwdCBzZW5zZSBtb2RlIEVkZ2UgTHRvSCovCisjZGVmaW5lIE0zMlJfSUNVQ1JfSVNNT0QxMSAgKDNVTDw8NCkgICAvKiBiMjYtYjI3OiBJbnRlcnJ1cHQgc2Vuc2UgbW9kZSBMZXZlbCBIICovCisjZGVmaW5lIE0zMlJfSUNVQ1JfSUxFVkVMMCAgKDBVTDw8MCkgICAvKiBiMjktYjMxOiBJbnRlcnJ1cHQgcHJpb3JpdHkgbGV2ZWwgMCAqLworI2RlZmluZSBNMzJSX0lDVUNSX0lMRVZFTDEgICgxVUw8PDApICAgLyogYjI5LWIzMTogSW50ZXJydXB0IHByaW9yaXR5IGxldmVsIDEgKi8KKyNkZWZpbmUgTTMyUl9JQ1VDUl9JTEVWRUwyICAoMlVMPDwwKSAgIC8qIGIyOS1iMzE6IEludGVycnVwdCBwcmlvcml0eSBsZXZlbCAyICovCisjZGVmaW5lIE0zMlJfSUNVQ1JfSUxFVkVMMyAgKDNVTDw8MCkgICAvKiBiMjktYjMxOiBJbnRlcnJ1cHQgcHJpb3JpdHkgbGV2ZWwgMyAqLworI2RlZmluZSBNMzJSX0lDVUNSX0lMRVZFTDQgICg0VUw8PDApICAgLyogYjI5LWIzMTogSW50ZXJydXB0IHByaW9yaXR5IGxldmVsIDQgKi8KKyNkZWZpbmUgTTMyUl9JQ1VDUl9JTEVWRUw1ICAoNVVMPDwwKSAgIC8qIGIyOS1iMzE6IEludGVycnVwdCBwcmlvcml0eSBsZXZlbCA1ICovCisjZGVmaW5lIE0zMlJfSUNVQ1JfSUxFVkVMNiAgKDZVTDw8MCkgICAvKiBiMjktYjMxOiBJbnRlcnJ1cHQgcHJpb3JpdHkgbGV2ZWwgNiAqLworI2RlZmluZSBNMzJSX0lDVUNSX0lMRVZFTDcgICg3VUw8PDApICAgLyogYjI5LWIzMTogRGlzYWJsZSBpbnRlcnJ1cHQgKi8KKworI2RlZmluZSBNMzJSX0lSUV9JTlQwICAgICgxKSAgIC8qIElOVDAgKi8KKyNkZWZpbmUgTTMyUl9JUlFfSU5UMSAgICAoMikgICAvKiBJTlQxICovCisjZGVmaW5lIE0zMlJfSVJRX0lOVDIgICAgKDMpICAgLyogSU5UMiAqLworI2RlZmluZSBNMzJSX0lSUV9JTlQzICAgICg0KSAgIC8qIElOVDMgKi8KKyNkZWZpbmUgTTMyUl9JUlFfSU5UNCAgICAoNSkgICAvKiBJTlQ0ICovCisjZGVmaW5lIE0zMlJfSVJRX0lOVDUgICAgKDYpICAgLyogSU5UNSAqLworI2RlZmluZSBNMzJSX0lSUV9JTlQ2ICAgICg3KSAgIC8qIElOVDYgKi8KKyNkZWZpbmUgTTMyUl9JUlFfTUZUMCAgICAoMTYpICAvKiBNRlQwICovCisjZGVmaW5lIE0zMlJfSVJRX01GVDEgICAgKDE3KSAgLyogTUZUMSAqLworI2RlZmluZSBNMzJSX0lSUV9NRlQyICAgICgxOCkgIC8qIE1GVDIgKi8KKyNkZWZpbmUgTTMyUl9JUlFfTUZUMyAgICAoMTkpICAvKiBNRlQzICovCisjZGVmaW5lIE0zMlJfSVJRX01GVDQgICAgKDIwKSAgLyogTUZUNCAqLworI2RlZmluZSBNMzJSX0lSUV9NRlQ1ICAgICgyMSkgIC8qIE1GVDUgKi8KKyNkZWZpbmUgTTMyUl9JUlFfRE1BMCAgICAoMzIpICAvKiBETUEwICovCisjZGVmaW5lIE0zMlJfSVJRX0RNQTEgICAgKDMzKSAgLyogRE1BMSAqLworI2RlZmluZSBNMzJSX0lSUV9TSU8wX1IgICg0OCkgIC8qIFNJTzAgc2VuZCAgICAqLworI2RlZmluZSBNMzJSX0lSUV9TSU8wX1MgICg0OSkgIC8qIFNJTzAgcmVjZWl2ZSAqLworI2RlZmluZSBNMzJSX0lSUV9TSU8xX1IgICg1MCkgIC8qIFNJTzEgc2VuZCAgICAqLworI2RlZmluZSBNMzJSX0lSUV9TSU8xX1MgICg1MSkgIC8qIFNJTzEgcmVjZWl2ZSAqLworI2RlZmluZSBNMzJSX0lSUV9TSU8yX1IgICg1MikgIC8qIFNJTzIgc2VuZCAgICAqLworI2RlZmluZSBNMzJSX0lSUV9TSU8yX1MgICg1MykgIC8qIFNJTzIgcmVjZWl2ZSAqLworI2RlZmluZSBNMzJSX0lSUV9TSU8zX1IgICg1NCkgIC8qIFNJTzMgc2VuZCAgICAqLworI2RlZmluZSBNMzJSX0lSUV9TSU8zX1MgICg1NSkgIC8qIFNJTzMgcmVjZWl2ZSAqLworI2RlZmluZSBNMzJSX0lSUV9TSU80X1IgICg1NikgIC8qIFNJTzQgc2VuZCAgICAqLworI2RlZmluZSBNMzJSX0lSUV9TSU80X1MgICg1NykgIC8qIFNJTzQgcmVjZWl2ZSAqLworCisjaWZkZWYgQ09ORklHX1NNUAorI2RlZmluZSBNMzJSX0lSUV9JUEkwICAgICg1NikKKyNkZWZpbmUgTTMyUl9JUlFfSVBJMSAgICAoNTcpCisjZGVmaW5lIE0zMlJfSVJRX0lQSTIgICAgKDU4KQorI2RlZmluZSBNMzJSX0lSUV9JUEkzICAgICg1OSkKKyNkZWZpbmUgTTMyUl9JUlFfSVBJNCAgICAoNjApCisjZGVmaW5lIE0zMlJfSVJRX0lQSTUgICAgKDYxKQorI2RlZmluZSBNMzJSX0lSUV9JUEk2ICAgICg2MikKKyNkZWZpbmUgTTMyUl9JUlFfSVBJNyAgICAoNjMpCisjZGVmaW5lIE0zMlJfQ1BVSURfUE9SVEwgKDB4ZmZmZmZmZTApCisKKyNkZWZpbmUgTTMyUl9GUEdBX1RPUCAoMHgwMDBGMDAwMCtNMzJSX1NGUl9PRkZTRVQpCisKKyNkZWZpbmUgTTMyUl9GUEdBX05VTV9PRl9DUFVTX1BPUlRMICgweDAwK00zMlJfRlBHQV9UT1ApCisjZGVmaW5lIE0zMlJfRlBHQV9DUFVfTkFNRTBfUE9SVEwgICAoMHgxMCtNMzJSX0ZQR0FfVE9QKQorI2RlZmluZSBNMzJSX0ZQR0FfQ1BVX05BTUUxX1BPUlRMICAgKDB4MTQrTTMyUl9GUEdBX1RPUCkKKyNkZWZpbmUgTTMyUl9GUEdBX0NQVV9OQU1FMl9QT1JUTCAgICgweDE4K00zMlJfRlBHQV9UT1ApCisjZGVmaW5lIE0zMlJfRlBHQV9DUFVfTkFNRTNfUE9SVEwgICAoMHgxYytNMzJSX0ZQR0FfVE9QKQorI2RlZmluZSBNMzJSX0ZQR0FfTU9ERUxfSUQwX1BPUlRMICAgKDB4MjArTTMyUl9GUEdBX1RPUCkKKyNkZWZpbmUgTTMyUl9GUEdBX01PREVMX0lEMV9QT1JUTCAgICgweDI0K00zMlJfRlBHQV9UT1ApCisjZGVmaW5lIE0zMlJfRlBHQV9NT0RFTF9JRDJfUE9SVEwgICAoMHgyOCtNMzJSX0ZQR0FfVE9QKQorI2RlZmluZSBNMzJSX0ZQR0FfTU9ERUxfSUQzX1BPUlRMICAgKDB4MmMrTTMyUl9GUEdBX1RPUCkKKyNkZWZpbmUgTTMyUl9GUEdBX1ZFUlNJT04wX1BPUlRMICAgICgweDMwK00zMlJfRlBHQV9UT1ApCisjZGVmaW5lIE0zMlJfRlBHQV9WRVJTSU9OMV9QT1JUTCAgICAoMHgzNCtNMzJSX0ZQR0FfVE9QKQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworLyogRm9yIE5FVERFViBXQVRDSERPRyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcgaWN1Y3I7CS8qIElDVSBDb250cm9sIFJlZ2lzdGVyICovCit9IGljdV9kYXRhX3Q7CisKK2V4dGVybiBpY3VfZGF0YV90IGljdV9kYXRhW107CisjZW5kaWYKKworI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KKworI2VuZGlmIC8qIF9NMzIxMDJfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvbTMyMTAycGVyaS5oIGIvaW5jbHVkZS9hc20tbTMyci9tMzIxMDJwZXJpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2MxMjk1NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvbTMyMTAycGVyaS5oCkBAIC0wLDAgKzEsNDY4IEBACisvKiAkSWQkCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwLDIwMDEgYnkgSGlyb3l1a2kgS29uZG8KKyAqLworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCit0eXBlZGVmCXZvaWQJVjsKK3R5cGVkZWYJY2hhcglCOwordHlwZWRlZglzaG9ydAlTOwordHlwZWRlZglpbnQJCVc7Cit0eXBlZGVmCWxvbmcJTDsKK3R5cGVkZWYJZmxvYXQJRjsKK3R5cGVkZWYJZG91YmxlCUQ7Cit0eXBlZGVmCXVuc2lnbmVkIGNoYXIJVUI7Cit0eXBlZGVmCXVuc2lnbmVkIHNob3J0CVVTOwordHlwZWRlZgl1bnNpZ25lZCBpbnQJVVc7Cit0eXBlZGVmCXVuc2lnbmVkIGxvbmcJVUw7Cit0eXBlZGVmCWNvbnN0IHVuc2lnbmVkIGludAlDVVc7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworTTMyMTAyIElDVQorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lCQlJQ1VJU1RTCQkoVVcgKikweGEwRUZGMDA0CisjZGVmaW5lCQlJQ1VJUkVRMAkoVVcgKikweGEwRUZGMDA4CisjZGVmaW5lCQlJQ1VJUkVRMQkoVVcgKikweGEwRUZGMDBDCisKKyNkZWZpbmUJCUlDVVNCSUNSCShVVyAqKTB4YTBFRkYwMTgKKyNkZWZpbmUJCUlDVUlNQVNLCShVVyAqKTB4YTBFRkYwMUMKKworI2RlZmluZQkJSUNVQ1IxCQkoVVcgKikweGEwRUZGMjAwCS8qIElOVDAgKi8KKyNkZWZpbmUJCUlDVUNSMgkJKFVXICopMHhhMEVGRjIwNAkvKiBJTlQxICovCisjZGVmaW5lCQlJQ1VDUjMJCShVVyAqKTB4YTBFRkYyMDgJLyogSU5UMiAqLworI2RlZmluZQkJSUNVQ1I0CQkoVVcgKikweGEwRUZGMjBDCS8qIElOVDMgKi8KKyNkZWZpbmUJCUlDVUNSNQkJKFVXICopMHhhMEVGRjIxMAkvKiBJTlQ0ICovCisjZGVmaW5lCQlJQ1VDUjYJCShVVyAqKTB4YTBFRkYyMTQJLyogSU5UNSAqLworI2RlZmluZQkJSUNVQ1I3CQkoVVcgKikweGEwRUZGMjE4CS8qIElOVDYgKi8KKworI2RlZmluZQkJSUNVQ1IxNgkJKFVXICopMHhhMEVGRjIzQwkvKiBNRlQwICovCisjZGVmaW5lCQlJQ1VDUjE3CQkoVVcgKikweGEwRUZGMjQwCS8qIE1GVDEgKi8KKyNkZWZpbmUJCUlDVUNSMTgJCShVVyAqKTB4YTBFRkYyNDQJLyogTUZUMiAqLworI2RlZmluZQkJSUNVQ1IxOQkJKFVXICopMHhhMEVGRjI0OAkvKiBNRlQzICovCisjZGVmaW5lCQlJQ1VDUjIwCQkoVVcgKikweGEwRUZGMjRDCS8qIE1GVDQgKi8KKyNkZWZpbmUJCUlDVUNSMjEJCShVVyAqKTB4YTBFRkYyNTAJLyogTUZUNSAqLworCisjZGVmaW5lCQlJQ1VDUjMyCQkoVVcgKikweGEwRUZGMjdDCS8qIERNQTAgKi8KKyNkZWZpbmUJCUlDVUNSMzMJCShVVyAqKTB4YTBFRkYyODAJLyogRE1BMSAqLworCisjZGVmaW5lCQlJQ1VDUjQ4CQkoVVcgKikweGEwRUZGMkJDCS8qIFNJTzBSICovCisjZGVmaW5lCQlJQ1VDUjQ5CQkoVVcgKikweGEwRUZGMkMwCS8qIFNJTzBTICovCisjZGVmaW5lCQlJQ1VDUjUwCQkoVVcgKikweGEwRUZGMkM0CS8qIFNJTzFSICovCisjZGVmaW5lCQlJQ1VDUjUxCQkoVVcgKikweGEwRUZGMkM4CS8qIFNJTzFTICovCisjZGVmaW5lCQlJQ1VDUjUyCQkoVVcgKikweGEwRUZGMkNDCS8qIFNJTzJSICovCisjZGVmaW5lCQlJQ1VDUjUzCQkoVVcgKikweGEwRUZGMkQwCS8qIFNJTzJTICovCisjZGVmaW5lCQlJQ1VDUjU0CQkoVVcgKikweGEwRUZGMkQ0CS8qIFNJTzNSICovCisjZGVmaW5lCQlJQ1VDUjU1CQkoVVcgKikweGEwRUZGMkQ4CS8qIFNJTzNTICovCisjZGVmaW5lCQlJQ1VDUjU2CQkoVVcgKikweGEwRUZGMkRDCS8qIFNJTzRSICovCisjZGVmaW5lCQlJQ1VDUjU3CQkoVVcgKikweGEwRUZGMkUwCS8qIFNJTzRTICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworTTMyMTAyIE1GVAorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lCQlNRlRDUgkJKFVTICopMHhhMEVGQzAwMgorI2RlZmluZQkJTUZUUlBSCQkoVUIgKikweGEwRUZDMDA2CisKKyNkZWZpbmUJCU1GVDBNT0QJCShVUyAqKTB4YTBFRkMxMDIKKyNkZWZpbmUJCU1GVDBCT1MJCShVUyAqKTB4YTBFRkMxMDYKKyNkZWZpbmUJCU1GVDBDVVQJCShVUyAqKTB4YTBFRkMxMEEKKyNkZWZpbmUJCU1GVDBSTEQJCShVUyAqKTB4YTBFRkMxMEUKKyNkZWZpbmUJCU1GVDBDUkxECShVUyAqKTB4YTBFRkMxMTIKKworI2RlZmluZQkJTUZUMU1PRAkJKFVTICopMHhhMEVGQzIwMgorI2RlZmluZQkJTUZUMUJPUwkJKFVTICopMHhhMEVGQzIwNgorI2RlZmluZQkJTUZUMUNVVAkJKFVTICopMHhhMEVGQzIwQQorI2RlZmluZQkJTUZUMVJMRAkJKFVTICopMHhhMEVGQzIwRQorI2RlZmluZQkJTUZUMUNSTEQJKFVTICopMHhhMEVGQzIxMgorCisjZGVmaW5lCQlNRlQyTU9ECQkoVVMgKikweGEwRUZDMzAyCisjZGVmaW5lCQlNRlQyQk9TCQkoVVMgKikweGEwRUZDMzA2CisjZGVmaW5lCQlNRlQyQ1VUCQkoVVMgKikweGEwRUZDMzBBCisjZGVmaW5lCQlNRlQyUkxECQkoVVMgKikweGEwRUZDMzBFCisjZGVmaW5lCQlNRlQyQ1JMRAkoVVMgKikweGEwRUZDMzEyCisKKyNkZWZpbmUJCU1GVDNNT0QJCShVUyAqKTB4YTBFRkM0MDIKKyNkZWZpbmUJCU1GVDNDVVQJCShVUyAqKTB4YTBFRkM0MEEKKyNkZWZpbmUJCU1GVDNSTEQJCShVUyAqKTB4YTBFRkM0MEUKKyNkZWZpbmUJCU1GVDNDUkxECShVUyAqKTB4YTBFRkM0MTIKKworI2RlZmluZQkJTUZUNE1PRAkJKFVTICopMHhhMEVGQzUwMgorI2RlZmluZQkJTUZUNENVVAkJKFVTICopMHhhMEVGQzUwQQorI2RlZmluZQkJTUZUNFJMRAkJKFVTICopMHhhMEVGQzUwRQorI2RlZmluZQkJTUZUNENSTEQJKFVTICopMHhhMEVGQzUxMgorCisjZGVmaW5lCQlNRlQ1TU9ECQkoVVMgKikweGEwRUZDNjAyCisjZGVmaW5lCQlNRlQ1Q1VUCQkoVVMgKikweGEwRUZDNjBBCisjZGVmaW5lCQlNRlQ1UkxECQkoVVMgKikweGEwRUZDNjBFCisjZGVmaW5lCQlNRlQ1Q1JMRAkoVVMgKikweGEwRUZDNjEyCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworTTMyMTAyIFNJTworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgU0lPMENSICAgICAodm9sYXRpbGUgaW50ICopMHhhMGVmZDAwMAorI2RlZmluZSBTSU8wTU9EMCAgICh2b2xhdGlsZSBpbnQgKikweGEwZWZkMDA0CisjZGVmaW5lIFNJTzBNT0QxICAgKHZvbGF0aWxlIGludCAqKTB4YTBlZmQwMDgKKyNkZWZpbmUgU0lPMFNUUyAgICAodm9sYXRpbGUgaW50ICopMHhhMGVmZDAwYworI2RlZmluZSBTSU8wSU1BU0sgICh2b2xhdGlsZSBpbnQgKikweGEwZWZkMDEwCisjZGVmaW5lIFNJTzBCQVVSICAgKHZvbGF0aWxlIGludCAqKTB4YTBlZmQwMTQKKyNkZWZpbmUgU0lPMFJCQVVSICAodm9sYXRpbGUgaW50ICopMHhhMGVmZDAxOAorI2RlZmluZSBTSU8wVFhCICAgICh2b2xhdGlsZSBpbnQgKikweGEwZWZkMDFjCisjZGVmaW5lIFNJTzBSWEIgICAgKHZvbGF0aWxlIGludCAqKTB4YTBlZmQwMjAKKworI2RlZmluZSBTSU8xQ1IgICAgICh2b2xhdGlsZSBpbnQgKikweGEwZWZkMTAwCisjZGVmaW5lIFNJTzFNT0QwICAgKHZvbGF0aWxlIGludCAqKTB4YTBlZmQxMDQKKyNkZWZpbmUgU0lPMU1PRDEgICAodm9sYXRpbGUgaW50ICopMHhhMGVmZDEwOAorI2RlZmluZSBTSU8xU1RTICAgICh2b2xhdGlsZSBpbnQgKikweGEwZWZkMTBjCisjZGVmaW5lIFNJTzFJTUFTSyAgKHZvbGF0aWxlIGludCAqKTB4YTBlZmQxMTAKKyNkZWZpbmUgU0lPMUJBVVIgICAodm9sYXRpbGUgaW50ICopMHhhMGVmZDExNAorI2RlZmluZSBTSU8xUkJBVVIgICh2b2xhdGlsZSBpbnQgKikweGEwZWZkMTE4CisjZGVmaW5lIFNJTzFUWEIgICAgKHZvbGF0aWxlIGludCAqKTB4YTBlZmQxMWMKKyNkZWZpbmUgU0lPMVJYQiAgICAodm9sYXRpbGUgaW50ICopMHhhMGVmZDEyMAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitNMzIxMDIgUE9SVAorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lCQlQSUVOCQkoVUIgKikweGEwRUYxMDAzCS8qIGlucHV0IGVuYWJsZSAqLworCisjZGVmaW5lCQlQMERBVEEJCShVQiAqKTB4YTBFRjEwMjAJLyogZGF0YSAqLworI2RlZmluZQkJUDFEQVRBCQkoVUIgKikweGEwRUYxMDIxCisjZGVmaW5lCQlQMkRBVEEJCShVQiAqKTB4YTBFRjEwMjIKKyNkZWZpbmUJCVAzREFUQQkJKFVCICopMHhhMEVGMTAyMworI2RlZmluZQkJUDREQVRBCQkoVUIgKikweGEwRUYxMDI0CisjZGVmaW5lCQlQNURBVEEJCShVQiAqKTB4YTBFRjEwMjUKKyNkZWZpbmUJCVA2REFUQQkJKFVCICopMHhhMEVGMTAyNgorI2RlZmluZQkJUDdEQVRBCQkoVUIgKikweGEwRUYxMDI3CisKKyNkZWZpbmUJCVAwRElSCQkoVUIgKikweGEwRUYxMDQwCS8qIGRpcmVjdGlvbiAqLworI2RlZmluZQkJUDFESVIJCShVQiAqKTB4YTBFRjEwNDEKKyNkZWZpbmUJCVAyRElSCQkoVUIgKikweGEwRUYxMDQyCisjZGVmaW5lCQlQM0RJUgkJKFVCICopMHhhMEVGMTA0MworI2RlZmluZQkJUDRESVIJCShVQiAqKTB4YTBFRjEwNDQKKyNkZWZpbmUJCVA1RElSCQkoVUIgKikweGEwRUYxMDQ1CisjZGVmaW5lCQlQNkRJUgkJKFVCICopMHhhMEVGMTA0NgorI2RlZmluZQkJUDdESVIJCShVQiAqKTB4YTBFRjEwNDcKKworI2RlZmluZQkJUDBNT0QJCShVUyAqKTB4YTBFRjEwNjAJLyogbW9kZSBjb250cm9sICovCisjZGVmaW5lCQlQMU1PRAkJKFVTICopMHhhMEVGMTA2MgorI2RlZmluZQkJUDJNT0QJCShVUyAqKTB4YTBFRjEwNjQKKyNkZWZpbmUJCVAzTU9ECQkoVVMgKikweGEwRUYxMDY2CisjZGVmaW5lCQlQNE1PRAkJKFVTICopMHhhMEVGMTA2OAorI2RlZmluZQkJUDVNT0QJCShVUyAqKTB4YTBFRjEwNkEKKyNkZWZpbmUJCVA2TU9ECQkoVVMgKikweGEwRUYxMDZDCisjZGVmaW5lCQlQN01PRAkJKFVTICopMHhhMEVGMTA2RQorCisjZGVmaW5lCQlQME9EQ1IJCShVQiAqKTB4YTBFRjEwODAJLyogb3Blbi1kcmFpbiBjb250cm9sICovCisjZGVmaW5lCQlQMU9EQ1IJCShVQiAqKTB4YTBFRjEwODEKKyNkZWZpbmUJCVAyT0RDUgkJKFVCICopMHhhMEVGMTA4MgorI2RlZmluZQkJUDNPRENSCQkoVUIgKikweGEwRUYxMDgzCisjZGVmaW5lCQlQNE9EQ1IJCShVQiAqKTB4YTBFRjEwODQKKyNkZWZpbmUJCVA1T0RDUgkJKFVCICopMHhhMEVGMTA4NQorI2RlZmluZQkJUDZPRENSCQkoVUIgKikweGEwRUYxMDg2CisjZGVmaW5lCQlQN09EQ1IJCShVQiAqKTB4YTBFRjEwODcKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitNMzIxMDIgQ2FjaGUKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUJCU1DQ1IJKFVTICopMHhGRkZGRkZGRQorCisKKyNlbHNlICAvKiBfX0FTU0VNQkxZX18gKi8KKworOzsKKzs7IFBJTyAgICAgMHg4MGVmMTAwMAorOzsKKworI2RlZmluZSBQSUVOICAgICAgICAgIDB4YTBlZjEwMDAKKworI2RlZmluZSBQMERBVEEgICAgICAgIDB4YTBlZjEwMjAKKyNkZWZpbmUgUDFEQVRBICAgICAgICAweGEwZWYxMDIxCisjZGVmaW5lIFAyREFUQSAgICAgICAgMHhhMGVmMTAyMgorI2RlZmluZSBQM0RBVEEgICAgICAgIDB4YTBlZjEwMjMKKyNkZWZpbmUgUDREQVRBICAgICAgICAweGEwZWYxMDI0CisjZGVmaW5lIFA1REFUQSAgICAgICAgMHhhMGVmMTAyNQorI2RlZmluZSBQNkRBVEEgICAgICAgIDB4YTBlZjEwMjYKKyNkZWZpbmUgUDdEQVRBICAgICAgICAweGEwZWYxMDI3CisKKyNkZWZpbmUgUDBESVIgICAgICAgICAweGEwZWYxMDQwCisjZGVmaW5lIFAxRElSICAgICAgICAgMHhhMGVmMTA0MQorI2RlZmluZSBQMkRJUiAgICAgICAgIDB4YTBlZjEwNDIKKyNkZWZpbmUgUDNESVIgICAgICAgICAweGEwZWYxMDQzCisjZGVmaW5lIFA0RElSICAgICAgICAgMHhhMGVmMTA0NAorI2RlZmluZSBQNURJUiAgICAgICAgIDB4YTBlZjEwNDUKKyNkZWZpbmUgUDZESVIgICAgICAgICAweGEwZWYxMDQ2CisjZGVmaW5lIFA3RElSICAgICAgICAgMHhhMGVmMTA0NworCisjZGVmaW5lIFAwTU9EICAgICAgICAgMHhhMGVmMTA2MAorI2RlZmluZSBQMU1PRCAgICAgICAgIDB4YTBlZjEwNjIKKyNkZWZpbmUgUDJNT0QgICAgICAgICAweGEwZWYxMDY0CisjZGVmaW5lIFAzTU9EICAgICAgICAgMHhhMGVmMTA2NgorI2RlZmluZSBQNE1PRCAgICAgICAgIDB4YTBlZjEwNjgKKyNkZWZpbmUgUDVNT0QgICAgICAgICAweGEwZWYxMDZhCisjZGVmaW5lIFA2TU9EICAgICAgICAgMHhhMGVmMTA2YworI2RlZmluZSBQN01PRCAgICAgICAgIDB4YTBlZjEwNmUKKzsKKyNkZWZpbmUgUDBPRENSICAgICAgICAweGEwZWYxMDgwCisjZGVmaW5lIFAxT0RDUiAgICAgICAgMHhhMGVmMTA4MQorI2RlZmluZSBQMk9EQ1IgICAgICAgIDB4YTBlZjEwODIKKyNkZWZpbmUgUDNPRENSICAgICAgICAweGEwZWYxMDgzCisjZGVmaW5lIFA0T0RDUiAgICAgICAgMHhhMGVmMTA4NAorI2RlZmluZSBQNU9EQ1IgICAgICAgIDB4YTBlZjEwODUKKyNkZWZpbmUgUDZPRENSICAgICAgICAweGEwZWYxMDg2CisjZGVmaW5lIFA3T0RDUiAgICAgICAgMHhhMGVmMTA4NworCis7OworOzsgV0RUICAgICAweGEwZWYyMDAwCis7OworCisjZGVmaW5lIFdEVENSICAgICAgICAgMHhhMGVmMjAwMAorCisKKzs7Cis7OyBDTEsgICAgIDB4YTBlZjQwMDAKKzs7CisKKyNkZWZpbmUgQ1BVQ0xLQ1IgICAgICAweGEwZWY0MDAwCisjZGVmaW5lIENMS01PRCAgICAgICAgMHhhMGVmNDAwNAorI2RlZmluZSBQTExDUiAgICAgICAgIDB4YTBlZjQwMDgKKworCis7OworOzsgQlNFTCAgICAweGEwZWY1MDAwCis7OworCisjZGVmaW5lIEJTRUwwQ1IgICAgICAgMHhhMGVmNTAwMAorI2RlZmluZSBCU0VMMUNSICAgICAgIDB4YTBlZjUwMDQKKyNkZWZpbmUgQlNFTDJDUiAgICAgICAweGEwZWY1MDA4CisjZGVmaW5lIEJTRUwzQ1IgICAgICAgMHhhMGVmNTAwYworI2RlZmluZSBCU0VMNENSICAgICAgIDB4YTBlZjUwMTAKKyNkZWZpbmUgQlNFTDVDUiAgICAgICAweGEwZWY1MDE0CisKKworOzsKKzs7IFNEUkFNQyAgMHhhMGVmNjAwMAorOzsKKworI2RlZmluZSBTRFJGMCAgICAgICAgIDB4YTBlZjYwMDAKKyNkZWZpbmUgU0RSRjEgICAgICAgICAweGEwZWY2MDA0CisjZGVmaW5lIFNESVIwICAgICAgICAgMHhhMGVmNjAwOAorI2RlZmluZSBTRElSMSAgICAgICAgIDB4YTBlZjYwMGMKKyNkZWZpbmUgU0RCUiAgICAgICAgICAweGEwZWY2MDEwCisKKzs7IENIMAorI2RlZmluZSBTRDBBRFIgICAgICAgIDB4YTBlZjYwMjAKKyNkZWZpbmUgU0QwU1ogICAgICAgICAweGEwZWY2MDIyCisjZGVmaW5lIFNEMEVSICAgICAgICAgMHhhMGVmNjAyNAorI2RlZmluZSBTRDBUUiAgICAgICAgIDB4YTBlZjYwMjgKKyNkZWZpbmUgU0QwTU9EICAgICAgICAweGEwZWY2MDJjCisKKzs7IENIMQorI2RlZmluZSBTRDFBRFIgICAgICAgIDB4YTBlZjYwNDAKKyNkZWZpbmUgU0QxU1ogICAgICAgICAweGEwZWY2MDQyCisjZGVmaW5lIFNEMUVSICAgICAgICAgMHhhMGVmNjA0NAorI2RlZmluZSBTRDFUUiAgICAgICAgIDB4YTBlZjYwNDgKKyNkZWZpbmUgU0QxTU9EICAgICAgICAweGEwZWY2MDRjCisKKworOzsKKzs7IERNQUMgICAgMHhhMGVmODAwMAorOzsKKworI2RlZmluZSBETUFFTiAgICAgICAgIDB4YTBlZjgwMDAKKyNkZWZpbmUgRE1BSVNUUyAgICAgICAweGEwZWY4MDA0CisjZGVmaW5lIERNQUVERVQgICAgICAgMHhhMGVmODAwOAorI2RlZmluZSBETUFBU1RTICAgICAgIDB4YTBlZjgwMGMKKworOzsgQ0gwCisjZGVmaW5lIERNQTBDUjAgICAgICAgMHhhMGVmODEwMAorI2RlZmluZSBETUEwQ1IxICAgICAgIDB4YTBlZjgxMDQKKyNkZWZpbmUgRE1BMENTQSAgICAgICAweGEwZWY4MTA4CisjZGVmaW5lIERNQTBSU0EgICAgICAgMHhhMGVmODEwYworI2RlZmluZSBETUEwQ0RBICAgICAgIDB4YTBlZjgxMTAKKyNkZWZpbmUgRE1BMFJEQSAgICAgICAweGEwZWY4MTE0CisjZGVmaW5lIERNQTBDQkNVVCAgICAgMHhhMGVmODExOAorI2RlZmluZSBETUEwUkJDVVQgICAgIDB4YTBlZjgxMWMKKworOzsgQ0gxCisjZGVmaW5lIERNQTFDUjAgICAgICAgMHhhMGVmODIwMAorI2RlZmluZSBETUExQ1IxICAgICAgIDB4YTBlZjgyMDQKKyNkZWZpbmUgRE1BMUNTQSAgICAgICAweGEwZWY4MjA4CisjZGVmaW5lIERNQTFSU0EgICAgICAgMHhhMGVmODIwYworI2RlZmluZSBETUExQ0RBICAgICAgIDB4YTBlZjgyMTAKKyNkZWZpbmUgRE1BMVJEQSAgICAgICAweGEwZWY4MjE0CisjZGVmaW5lIERNQTFDQkNVVCAgICAgMHhhMGVmODIxOAorI2RlZmluZSBETUExUkJDVVQgICAgIDB4YTBlZjgyMWMKKworCis7OworOzsgTUZUICAgICAweGEwZWZjMDAwCis7OworCisjZGVmaW5lIE1GVENSICAgICAgICAweGEwZWZjMDAwCisjZGVmaW5lIE1GVFJQUiAgICAgICAweGEwZWZjMDA0CisKKzs7IENIMAorI2RlZmluZSBNRlQwTU9EICAgICAgMHhhMGVmYzEwMAorI2RlZmluZSBNRlQwQk9TICAgICAgMHhhMGVmYzEwNAorI2RlZmluZSBNRlQwQ1VUICAgICAgMHhhMGVmYzEwOAorI2RlZmluZSBNRlQwUkxEICAgICAgMHhhMGVmYzEwYworI2RlZmluZSBNRlQwQ01QUkxEICAgMHhhMGVmYzExMAorCis7OyBDSDEKKyNkZWZpbmUgTUZUMU1PRCAgICAgIDB4YTBlZmMyMDAKKyNkZWZpbmUgTUZUMUJPUyAgICAgIDB4YTBlZmMyMDQKKyNkZWZpbmUgTUZUMUNVVCAgICAgIDB4YTBlZmMyMDgKKyNkZWZpbmUgTUZUMVJMRCAgICAgIDB4YTBlZmMyMGMKKyNkZWZpbmUgTUZUMUNNUFJMRCAgIDB4YTBlZmMyMTAKKworOzsgQ0gyCisjZGVmaW5lIE1GVDJNT0QgICAgICAweGEwZWZjMzAwCisjZGVmaW5lIE1GVDJCT1MgICAgICAweGEwZWZjMzA0CisjZGVmaW5lIE1GVDJDVVQgICAgICAweGEwZWZjMzA4CisjZGVmaW5lIE1GVDJSTEQgICAgICAweGEwZWZjMzBjCisjZGVmaW5lIE1GVDJDTVBSTEQgICAweGEwZWZjMzEwCisKKzs7IENIMworI2RlZmluZSBNRlQzTU9EICAgICAgMHhhMGVmYzQwMAorI2RlZmluZSBNRlQzQk9TICAgICAgMHhhMGVmYzQwNAorI2RlZmluZSBNRlQzQ1VUICAgICAgMHhhMGVmYzQwOAorI2RlZmluZSBNRlQzUkxEICAgICAgMHhhMGVmYzQwYworI2RlZmluZSBNRlQzQ01QUkxEICAgMHhhMGVmYzQxMAorCis7OyBDSDQKKyNkZWZpbmUgTUZUNE1PRCAgICAgIDB4YTBlZmM1MDAKKyNkZWZpbmUgTUZUNEJPUyAgICAgIDB4YTBlZmM1MDQKKyNkZWZpbmUgTUZUNENVVCAgICAgIDB4YTBlZmM1MDgKKyNkZWZpbmUgTUZUNFJMRCAgICAgIDB4YTBlZmM1MGMKKyNkZWZpbmUgTUZUNENNUFJMRCAgIDB4YTBlZmM1MTAKKworOzsgQ0g1CisjZGVmaW5lIE1GVDVNT0QgICAgICAweGEwZWZjNjAwCisjZGVmaW5lIE1GVDVCT1MgICAgICAweGEwZWZjNjA0CisjZGVmaW5lIE1GVDVDVVQgICAgICAweGEwZWZjNjA4CisjZGVmaW5lIE1GVDVSTEQgICAgICAweGEwZWZjNjBjCisjZGVmaW5lIE1GVDVDTVBSTEQgICAweGEwZWZjNjEwCisKKworOzsKKzs7IFNJTyAgICAgMHhhMGVmZDAwMAorOzsKKworOzsgQ0gwCisjZGVmaW5lIFNJTzBDUiAgICAgICAgMHhhMGVmZDAwMAorI2RlZmluZSBTSU8wTU9EMCAgICAgIDB4YTBlZmQwMDQKKyNkZWZpbmUgU0lPME1PRDEgICAgICAweGEwZWZkMDA4CisjZGVmaW5lIFNJTzBTVFMgICAgICAgMHhhMGVmZDAwYworI2RlZmluZSBTSU8wSU1BU0sgICAgIDB4YTBlZmQwMTAKKyNkZWZpbmUgU0lPMEJBVVIgICAgICAweGEwZWZkMDE0CisjZGVmaW5lIFNJTzBSQkFVUiAgICAgMHhhMGVmZDAxOAorI2RlZmluZSBTSU8wVFhCICAgICAgIDB4YTBlZmQwMWMKKyNkZWZpbmUgU0lPMFJYQiAgICAgICAweGEwZWZkMDIwCisKKzs7IENIMQorI2RlZmluZSBTSU8xQ1IgICAgICAgIDB4YTBlZmQxMDAKKyNkZWZpbmUgU0lPMU1PRDAgICAgICAweGEwZWZkMTA0CisjZGVmaW5lIFNJTzFNT0QxICAgICAgMHhhMGVmZDEwOAorI2RlZmluZSBTSU8xU1RTICAgICAgIDB4YTBlZmQxMGMKKyNkZWZpbmUgU0lPMUlNQVNLICAgICAweGEwZWZkMTEwCisjZGVmaW5lIFNJTzFCQVVSICAgICAgMHhhMGVmZDExNAorI2RlZmluZSBTSU8xUkJBVVIgICAgIDB4YTBlZmQxMTgKKyNkZWZpbmUgU0lPMVRYQiAgICAgICAweGEwZWZkMTFjCisjZGVmaW5lIFNJTzFSWEIgICAgICAgMHhhMGVmZDEyMAorCis7OyBDSDIKKyNkZWZpbmUgU0lPMkNSICAgICAgICAweGEwZWZkMjAwCisjZGVmaW5lIFNJTzJNT0QwICAgICAgMHhhMGVmZDIwNAorI2RlZmluZSBTSU8yTU9EMSAgICAgIDB4YTBlZmQyMDgKKyNkZWZpbmUgU0lPMlNUUyAgICAgICAweGEwZWZkMjBjCisjZGVmaW5lIFNJTzJJTUFTSyAgICAgMHhhMGVmZDIxMAorI2RlZmluZSBTSU8yQkFVUiAgICAgIDB4YTBlZmQyMTQKKyNkZWZpbmUgU0lPMlJCQVVSICAgICAweGEwZWZkMjE4CisjZGVmaW5lIFNJTzJUWEIgICAgICAgMHhhMGVmZDIxYworI2RlZmluZSBTSU8yUlhCICAgICAgIDB4YTBlZmQyMjAKKworOzsgQ0gzCisjZGVmaW5lIFNJTzNDUiAgICAgICAgMHhhMGVmZDMwMAorI2RlZmluZSBTSU8zTU9EMCAgICAgIDB4YTBlZmQzMDQKKyNkZWZpbmUgU0lPM01PRDEgICAgICAweGEwZWZkMzA4CisjZGVmaW5lIFNJTzNTVFMgICAgICAgMHhhMGVmZDMwYworI2RlZmluZSBTSU8zSU1BU0sgICAgIDB4YTBlZmQzMTAKKyNkZWZpbmUgU0lPM0JBVVIgICAgICAweGEwZWZkMzE0CisjZGVmaW5lIFNJTzNSQkFVUiAgICAgMHhhMGVmZDMxOAorI2RlZmluZSBTSU8zVFhCICAgICAgIDB4YTBlZmQzMWMKKyNkZWZpbmUgU0lPM1JYQiAgICAgICAweGEwZWZkMzIwCisKKzs7IENINAorI2RlZmluZSBTSU80Q1IgICAgICAgIDB4YTBlZmQ0MDAKKyNkZWZpbmUgU0lPNE1PRDAgICAgICAweGEwZWZkNDA0CisjZGVmaW5lIFNJTzRNT0QxICAgICAgMHhhMGVmZDQwOAorI2RlZmluZSBTSU80U1RTICAgICAgIDB4YTBlZmQ0MGMKKyNkZWZpbmUgU0lPNElNQVNLICAgICAweGEwZWZkNDEwCisjZGVmaW5lIFNJTzRCQVVSICAgICAgMHhhMGVmZDQxNAorI2RlZmluZSBTSU80UkJBVVIgICAgIDB4YTBlZmQ0MTgKKyNkZWZpbmUgU0lPNFRYQiAgICAgICAweGEwZWZkNDFjCisjZGVmaW5lIFNJTzRSWEIgICAgICAgMHhhMGVmZDQyMAorCisKKzs7Cis7OyBJQ1UgICAgIDB4YTBlZmYwMDAKKzs7CisKKyNkZWZpbmUgSUNVSVNUUyAgICAgICAweGEwZWZmMDA0CisjZGVmaW5lIElDVUlSRVEwICAgICAgMHhhMGVmZjAwOAorI2RlZmluZSBJQ1VJUkVRMSAgICAgIDB4YTBlZmYwMGMKKworI2RlZmluZSBJQ1VTQklDUiAgICAgIDB4YTBlZmYwMTgKKyNkZWZpbmUgSUNVSU1BU0sgICAgICAweGEwZWZmMDFjCisKKyNkZWZpbmUgSUNVQ1IxICAgICAgICAweGEwZWZmMjAwCisjZGVmaW5lIElDVUNSMiAgICAgICAgMHhhMGVmZjIwNAorI2RlZmluZSBJQ1VDUjMgICAgICAgIDB4YTBlZmYyMDgKKyNkZWZpbmUgSUNVQ1I0ICAgICAgICAweGEwZWZmMjBjCisjZGVmaW5lIElDVUNSNSAgICAgICAgMHhhMGVmZjIxMAorI2RlZmluZSBJQ1VDUjYgICAgICAgIDB4YTBlZmYyMTQKKyNkZWZpbmUgSUNVQ1I3ICAgICAgICAweGEwZWZmMjE4CisKKyNkZWZpbmUgSUNVQ1IxNiAgICAgICAweGEwZWZmMjNjCisjZGVmaW5lIElDVUNSMTcgICAgICAgMHhhMGVmZjI0MAorI2RlZmluZSBJQ1VDUjE4ICAgICAgIDB4YTBlZmYyNDQKKyNkZWZpbmUgSUNVQ1IxOSAgICAgICAweGEwZWZmMjQ4CisjZGVmaW5lIElDVUNSMjAgICAgICAgMHhhMGVmZjI0YworI2RlZmluZSBJQ1VDUjIxICAgICAgIDB4YTBlZmYyNTAKKworI2RlZmluZSBJQ1VDUjMyICAgICAgIDB4YTBlZmYyN2MKKyNkZWZpbmUgSUNVQ1IzMyAgICAgICAweGEwZWZmMjgwCisKKyNkZWZpbmUgSUNVQ1I0OCAgICAgICAweGEwZWZmMmJjCisjZGVmaW5lIElDVUNSNDkgICAgICAgMHhhMGVmZjJjMAorI2RlZmluZSBJQ1VDUjUwICAgICAgIDB4YTBlZmYyYzQKKyNkZWZpbmUgSUNVQ1I1MSAgICAgICAweGEwZWZmMmM4CisjZGVmaW5lIElDVUNSNTIgICAgICAgMHhhMGVmZjJjYworI2RlZmluZSBJQ1VDUjUzICAgICAgIDB4YTBlZmYyZDAKKyNkZWZpbmUgSUNVQ1I1NCAgICAgICAweGEwZWZmMmQ0CisjZGVmaW5lIElDVUNSNTUgICAgICAgMHhhMGVmZjJkOAorI2RlZmluZSBJQ1VDUjU2ICAgICAgIDB4YTBlZmYyZGMKKyNkZWZpbmUgSUNVQ1I1NyAgICAgICAweGEwZWZmMmUwCisKKzs7Cis7OyBDQUNIRQorOzsKKworI2RlZmluZSBNQ0NSCQkgIDB4ZmZmZmZmZmMKKworCisjZW5kaWYgIC8qIF9fQVNTRU1CTFlfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9tMzI3MDB1dC9tMzI3MDB1dF9sYW4uaCBiL2luY2x1ZGUvYXNtLW0zMnIvbTMyNzAwdXQvbTMyNzAwdXRfbGFuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA1NDVlYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvbTMyNzAwdXQvbTMyNzAwdXRfbGFuLmgKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS9tMzI3MDB1dF9sYW4uaAorICoKKyAqIE0zMjcwMFVULUxBTiBib2FyZAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMglUYWtlbyBUYWthaGFzaGkKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mCisgKiB0aGlzIGFyY2hpdmUgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAkSWQkCisgKi8KKworI2lmbmRlZiBfTTMyNzAwVVRfTTMyNzAwVVRfTEFOX0gKKyNkZWZpbmUgX00zMjcwMFVUX00zMjcwMFVUX0xBTl9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKy8qCisgKiBDIGZ1bmN0aW9ucyB1c2Ugbm9uLWNhY2hlIGFkZHJlc3MuCisgKi8KKyNkZWZpbmUgTTMyNzAwVVRfTEFOX0JBU0UJKDB4MTAwMDAwMDAgLyogKyBOT05DQUNIRV9PRkZTRVQgKi8pCisjZWxzZQorI2RlZmluZSBNMzI3MDBVVF9MQU5fQkFTRQkoMHgxMDAwMDAwMCArIE5PTkNBQ0hFX09GRlNFVCkKKyNlbmRpZgkvKiBfX0FTU0VNQkxZX18gKi8KKworLyogSUNVCisgKiAgSUNVSVNUUzoJc3RhdHVzIHJlZ2lzdGVyCisgKiAgSUNVSVJFUTA6IAlyZXF1ZXN0IHJlZ2lzdGVyCisgKiAgSUNVSVJFUTE6IAlyZXF1ZXN0IHJlZ2lzdGVyCisgKiAgSUNVQ1IzOgljb250cm9sIHJlZ2lzdGVyIGZvciBDRklSRVEjIGludGVycnVwdAorICogIElDVUNSNDoJY29udHJvbCByZWdpc3RlciBmb3IgQ0ZDIENhcmQgaW5zZXJ0IGludGVycnVwdAorICogIElDVUNSNToJY29udHJvbCByZWdpc3RlciBmb3IgQ0ZDIENhcmQgZWplY3QgaW50ZXJydXB0CisgKiAgSUNVQ1I2Ogljb250cm9sIHJlZ2lzdGVyIGZvciBleHRlcm5hbCBpbnRlcnJ1cHQKKyAqICBJQ1VDUjExOgljb250cm9sIHJlZ2lzdGVyIGZvciBNTUMgQ2FyZCBpbnNlcnQvZWplY3QgaW50ZXJydXB0CisgKiAgSUNVQ1IxMzoJY29udHJvbCByZWdpc3RlciBmb3IgU0MgZXJyb3IgaW50ZXJydXB0CisgKiAgSUNVQ1IxNDoJY29udHJvbCByZWdpc3RlciBmb3IgU0MgcmVjZWl2ZSBpbnRlcnJ1cHQKKyAqICBJQ1VDUjE1Ogljb250cm9sIHJlZ2lzdGVyIGZvciBTQyBzZW5kIGludGVycnVwdAorICogIElDVUNSMTY6CWNvbnRyb2wgcmVnaXN0ZXIgZm9yIFNJTzAgcmVjZWl2ZSBpbnRlcnJ1cHQKKyAqICBJQ1VDUjE3Ogljb250cm9sIHJlZ2lzdGVyIGZvciBTSU8wIHNlbmQgaW50ZXJydXB0CisgKi8KKyNkZWZpbmUgTTMyNzAwVVRfTEFOX0lSUV9MQU4JKE0zMjcwMFVUX0xBTl9QTERfSVJRX0JBU0UgKyAxKQkvKiBMQU4gKi8KKyNkZWZpbmUgTTMyNzAwVVRfTEFOX0lSUV9JMkMJKE0zMjcwMFVUX0xBTl9QTERfSVJRX0JBU0UgKyAzKQkvKiBJMkMgKi8KKworI2RlZmluZSBNMzI3MDBVVF9MQU5fSUNVSVNUUwlfX3JlZzE2KE0zMjcwMFVUX0xBTl9CQVNFICsgMHhjMDAwMikKKyNkZWZpbmUgTTMyNzAwVVRfTEFOX0lDVUlTVFNfVkVDQl9NQVNLCSgweGYwMDApCisjZGVmaW5lIE0zMjcwMFVUX0xBTl9WRUNCKHgpCSgoeCkgJiBNMzI3MDBVVF9MQU5fSUNVSVNUU19WRUNCX01BU0spCisjZGVmaW5lIE0zMjcwMFVUX0xBTl9JQ1VJU1RTX0lTTl9NQVNLCSgweDA3YzApCisjZGVmaW5lIE0zMjcwMFVUX0xBTl9JQ1VJU1RTX0lTTih4KQkoKHgpICYgTTMyNzAwVVRfTEFOX0lDVUlTVFNfSVNOX01BU0spCisjZGVmaW5lIE0zMjcwMFVUX0xBTl9JQ1VJUkVRMAlfX3JlZzE2KE0zMjcwMFVUX0xBTl9CQVNFICsgMHhjMDAwNCkKKyNkZWZpbmUgTTMyNzAwVVRfTEFOX0lDVUNSMQlfX3JlZzE2KE0zMjcwMFVUX0xBTl9CQVNFICsgMHhjMDAxMCkKKyNkZWZpbmUgTTMyNzAwVVRfTEFOX0lDVUNSMwlfX3JlZzE2KE0zMjcwMFVUX0xBTl9CQVNFICsgMHhjMDAxNCkKKworLyoKKyAqIEFSIHJlZ2lzdGVyIG9uIFBMRAorICovCisjZGVmaW5lIEFSVkNSMAkJX19yZWczMihNMzI3MDBVVF9MQU5fQkFTRSArIDB4NDAwMDApCisjZGVmaW5lIEFSVkNSMF9WRFMJCTB4MDAwODAwMDAKKyNkZWZpbmUgQVJWQ1IwX1JTVAkJMHgwMDAxMDAwMAorI2RlZmluZSBBUlZDUjEJCV9fcmVnMzIoTTMyNzAwVVRfTEFOX0JBU0UgKyAweDQwMDA0KQorI2RlZmluZSBBUlZDUjFfUVZHQQkJMHgwMjAwMDAwMAorI2RlZmluZSBBUlZDUjFfTk9STUFMCQkweDAxMDAwMDAwCisjZGVmaW5lIEFSVkNSMV9ISUVOCQkweDAwMDEwMDAwCisjZGVmaW5lIEFSVkhDT1VOVAlfX3JlZzMyKE0zMjcwMFVUX0xBTl9CQVNFICsgMHg0MDAwOCkKKyNkZWZpbmUgQVJEQVRBCQlfX3JlZzMyKE0zMjcwMFVUX0xBTl9CQVNFICsgMHg0MDAxMCkKKyNkZWZpbmUgQVJJTlRTRUwJX19yZWczMihNMzI3MDBVVF9MQU5fQkFTRSArIDB4NDAwMTQpCisjZGVmaW5lIEFSSU5UU0VMX0lOVDMJCTB4MTAwMDAwMDAJLyogQ1BVIElOVDMgKi8KKyNkZWZpbmUgQVJEQVRBMzIJX19yZWczMihNMzI3MDBVVF9MQU5fQkFTRSArIDB4MDQwNDAwMTApCS8vIEJsb2NrIDUKKy8qCisjZGVmaW5lIEFSSU5UU0VMX1NFTDIJCTB4MDAwMDIwMDAKKyNkZWZpbmUgQVJJTlRTRUxfU0VMMwkJMHgwMDAwMTAwMAorI2RlZmluZSBBUklOVFNFTF9TRUw2CQkweDAwMDAwMjAwCisjZGVmaW5lIEFSSU5UU0VMX1NFTDcJCTB4MDAwMDAxMDAKKyNkZWZpbmUgQVJJTlRTRUxfU0VMOQkJMHgwMDAwMDA0MAorI2RlZmluZSBBUklOVFNFTF9TRUwxMAkJMHgwMDAwMDAyMAorI2RlZmluZSBBUklOVFNFTF9TRUwxMQkJMHgwMDAwMDAxMAorI2RlZmluZSBBUklOVFNFTF9TRUwxMgkJMHgwMDAwMDAwOAorKi8KKworLyoKKyAqIEkyQyByZWdpc3RlciBvbiBQTEQKKyAqLworI2RlZmluZSBQTERJMkNDUglfX3JlZzMyKE0zMjcwMFVUX0xBTl9CQVNFICsgMHg0MDA0MCkKKyNkZWZpbmUJUExESTJDQ1JfRVMwCQkweDAwMDAwMDAxCS8qIGVuYWJsZSBJMkMgaW50ZXJmYWNlICovCisjZGVmaW5lIFBMREkyQ01PRAlfX3JlZzMyKE0zMjcwMFVUX0xBTl9CQVNFICsgMHg0MDA0NCkKKyNkZWZpbmUgUExESTJDTU9EX0FDS0NMSwkweDAwMDAwMjAwCisjZGVmaW5lIFBMREkyQ01PRF9EVFdECQkweDAwMDAwMTAwCisjZGVmaW5lIFBMREkyQ01PRF8xMEJUCQkweDAwMDAwMDA0CisjZGVmaW5lIFBMREkyQ01PRF9BVE1fTk9STUFMCTB4MDAwMDAwMDAKKyNkZWZpbmUgUExESTJDTU9EX0FUTV9BVVRPCTB4MDAwMDAwMDMKKyNkZWZpbmUgUExESTJDQUNLCV9fcmVnMzIoTTMyNzAwVVRfTEFOX0JBU0UgKyAweDQwMDQ4KQorI2RlZmluZSBQTERJMkNBQ0tfQUNLCQkweDAwMDAwMDAxCisjZGVmaW5lIFBMREkyQ0ZSRVEJX19yZWczMihNMzI3MDBVVF9MQU5fQkFTRSArIDB4NDAwNGMpCisjZGVmaW5lIFBMREkyQ0NORAlfX3JlZzMyKE0zMjcwMFVUX0xBTl9CQVNFICsgMHg0MDA1MCkKKyNkZWZpbmUgUExESTJDQ05EX1NUQVJUCQkweDAwMDAwMDAxCisjZGVmaW5lIFBMREkyQ0NORF9TVE9QCQkweDAwMDAwMDAyCisjZGVmaW5lIFBMREkyQ1NURU4JX19yZWczMihNMzI3MDBVVF9MQU5fQkFTRSArIDB4NDAwNTQpCisjZGVmaW5lIFBMREkyQ1NURU5fU1RFTgkJMHgwMDAwMDAwMQorI2RlZmluZSBQTERJMkNEQVRBCV9fcmVnMzIoTTMyNzAwVVRfTEFOX0JBU0UgKyAweDQwMDYwKQorI2RlZmluZSBQTERJMkNTVFMJX19yZWczMihNMzI3MDBVVF9MQU5fQkFTRSArIDB4NDAwNjQpCisjZGVmaW5lIFBMREkyQ1NUU19UUlgJCTB4MDAwMDAwMjAKKyNkZWZpbmUgUExESTJDU1RTX0JCCQkweDAwMDAwMDEwCisjZGVmaW5lIFBMREkyQ1NUU19OT0FDSwkJMHgwMDAwMDAwMQkvKiAwOmFjaywgMTpub2FjayAqLworCisjZW5kaWYJLyogX00zMjcwMFVUX00zMjcwMFVUX0xBTl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL20zMjcwMHV0L20zMjcwMHV0X2xjZC5oIGIvaW5jbHVkZS9hc20tbTMyci9tMzI3MDB1dC9tMzI3MDB1dF9sY2QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGU2Yzc3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTMyci9tMzI3MDB1dC9tMzI3MDB1dF9sY2QuaApAQCAtMCwwICsxLDU5IEBACisvKgorICogaW5jbHVkZS9hc20vbTMyNzAwdXRfbGNkLmgKKyAqCisgKiBNMzI3MDBVVC1MQ0QgYm9hcmQKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIJVGFrZW8gVGFrYWhhc2hpCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZgorICogdGhpcyBhcmNoaXZlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogJElkJAorICovCisKKyNpZm5kZWYgX00zMjcwMFVUX00zMjcwMFVUX0xDRF9ICisjZGVmaW5lIF9NMzI3MDBVVF9NMzI3MDBVVF9MQ0RfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisvKgorICogQyBmdW5jdGlvbnMgdXNlIG5vbi1jYWNoZSBhZGRyZXNzLgorICovCisjZGVmaW5lIE0zMjcwMFVUX0xDRF9CQVNFCSgweDEwMDAwMDAwIC8qICsgTk9OQ0FDSEVfT0ZGU0VUICovKQorI2Vsc2UKKyNkZWZpbmUgTTMyNzAwVVRfTENEX0JBU0UJKDB4MTAwMDAwMDAgKyBOT05DQUNIRV9PRkZTRVQpCisjZW5kaWYJLyogX19BU1NFTUJMWV9fICovCisKKy8qCisgKiBJQ1UKKyAqLworI2RlZmluZSBNMzI3MDBVVF9MQ0RfSVJRX0JBVF9JTlQJKE0zMjcwMFVUX0xDRF9QTERfSVJRX0JBU0UgKyAxKQorI2RlZmluZSBNMzI3MDBVVF9MQ0RfSVJRX1VTQl9JTlQxCShNMzI3MDBVVF9MQ0RfUExEX0lSUV9CQVNFICsgMikKKyNkZWZpbmUgTTMyNzAwVVRfTENEX0lSUV9BVURUMAkJKE0zMjcwMFVUX0xDRF9QTERfSVJRX0JBU0UgKyAzKQorI2RlZmluZSBNMzI3MDBVVF9MQ0RfSVJRX0FVRFQyCQkoTTMyNzAwVVRfTENEX1BMRF9JUlFfQkFTRSArIDQpCisjZGVmaW5lIE0zMjcwMFVUX0xDRF9JUlFfQkFUU0lPX1JDVgkoTTMyNzAwVVRfTENEX1BMRF9JUlFfQkFTRSArIDE2KQorI2RlZmluZSBNMzI3MDBVVF9MQ0RfSVJRX0JBVFNJT19TTkQJKE0zMjcwMFVUX0xDRF9QTERfSVJRX0JBU0UgKyAxNykKKyNkZWZpbmUgTTMyNzAwVVRfTENEX0lSUV9BU05EU0lPX1JDVgkoTTMyNzAwVVRfTENEX1BMRF9JUlFfQkFTRSArIDE4KQorI2RlZmluZSBNMzI3MDBVVF9MQ0RfSVJRX0FTTkRTSU9fU05ECShNMzI3MDBVVF9MQ0RfUExEX0lSUV9CQVNFICsgMTkpCisjZGVmaW5lIE0zMjcwMFVUX0xDRF9JUlFfQUNOTFNJT19TTkQJKE0zMjcwMFVUX0xDRF9QTERfSVJRX0JBU0UgKyAyMSkKKworI2RlZmluZSBNMzI3MDBVVF9MQ0RfSUNVSVNUUwlfX3JlZzE2KE0zMjcwMFVUX0xDRF9CQVNFICsgMHgzMDAwMDIpCisjZGVmaW5lIE0zMjcwMFVUX0xDRF9JQ1VJU1RTX1ZFQ0JfTUFTSwkoMHhmMDAwKQorI2RlZmluZSBNMzI3MDBVVF9MQ0RfVkVDQih4KQkoKHgpICYgTTMyNzAwVVRfTENEX0lDVUlTVFNfVkVDQl9NQVNLKQorI2RlZmluZSBNMzI3MDBVVF9MQ0RfSUNVSVNUU19JU05fTUFTSwkoMHgwN2MwKQorI2RlZmluZSBNMzI3MDBVVF9MQ0RfSUNVSVNUU19JU04oeCkJKCh4KSAmIE0zMjcwMFVUX0xDRF9JQ1VJU1RTX0lTTl9NQVNLKQorI2RlZmluZSBNMzI3MDBVVF9MQ0RfSUNVSVJFUTAJX19yZWcxNihNMzI3MDBVVF9MQ0RfQkFTRSArIDB4MzAwMDA0KQorI2RlZmluZSBNMzI3MDBVVF9MQ0RfSUNVSVJFUTEJX19yZWcxNihNMzI3MDBVVF9MQ0RfQkFTRSArIDB4MzAwMDA2KQorI2RlZmluZSBNMzI3MDBVVF9MQ0RfSUNVQ1IxCV9fcmVnMTYoTTMyNzAwVVRfTENEX0JBU0UgKyAweDMwMDAyMCkKKyNkZWZpbmUgTTMyNzAwVVRfTENEX0lDVUNSMglfX3JlZzE2KE0zMjcwMFVUX0xDRF9CQVNFICsgMHgzMDAwMjIpCisjZGVmaW5lIE0zMjcwMFVUX0xDRF9JQ1VDUjMJX19yZWcxNihNMzI3MDBVVF9MQ0RfQkFTRSArIDB4MzAwMDI0KQorI2RlZmluZSBNMzI3MDBVVF9MQ0RfSUNVQ1I0CV9fcmVnMTYoTTMyNzAwVVRfTENEX0JBU0UgKyAweDMwMDAyNikKKyNkZWZpbmUgTTMyNzAwVVRfTENEX0lDVUNSMTYJX19yZWcxNihNMzI3MDBVVF9MQ0RfQkFTRSArIDB4MzAwMDMwKQorI2RlZmluZSBNMzI3MDBVVF9MQ0RfSUNVQ1IxNwlfX3JlZzE2KE0zMjcwMFVUX0xDRF9CQVNFICsgMHgzMDAwMzIpCisjZGVmaW5lIE0zMjcwMFVUX0xDRF9JQ1VDUjE4CV9fcmVnMTYoTTMyNzAwVVRfTENEX0JBU0UgKyAweDMwMDAzNCkKKyNkZWZpbmUgTTMyNzAwVVRfTENEX0lDVUNSMTkJX19yZWcxNihNMzI3MDBVVF9MQ0RfQkFTRSArIDB4MzAwMDM2KQorI2RlZmluZSBNMzI3MDBVVF9MQ0RfSUNVQ1IyMQlfX3JlZzE2KE0zMjcwMFVUX0xDRF9CQVNFICsgMHgzMDAwM2EpCisKKyNlbmRpZgkvKiBfTTMyNzAwVVRfTTMyNzAwVVRfTENEX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvbTMyNzAwdXQvbTMyNzAwdXRfcGxkLmggYi9pbmNsdWRlL2FzbS1tMzJyL20zMjcwMHV0L20zMjcwMHV0X3BsZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1ZTQ3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL20zMjcwMHV0L20zMjcwMHV0X3BsZC5oCkBAIC0wLDAgKzEsMjY1IEBACisvKgorICogaW5jbHVkZS9hc20vbTMyNzAwdXQvbTMyNzAwdXRfcGxkLmgKKyAqCisgKiBEZWZpbml0aW9ucyBmb3IgUHJvZ3JhbWFibGUgTG9naWMgRGV2aWNlKFBMRCkgb24gTTMyNzAwVVQgYm9hcmQuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAyCVRha2VvIFRha2FoYXNoaQorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YKKyAqIHRoaXMgYXJjaGl2ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICRJZCQKKyAqLworCisjaWZuZGVmIF9NMzI3MDBVVF9NMzI3MDBVVF9QTERfSAorI2RlZmluZSBfTTMyNzAwVVRfTTMyNzAwVVRfUExEX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjaWYgZGVmaW5lZChDT05GSUdfUExBVF9NMzI3MDBVVF9BbHBoYSkKKyNkZWZpbmUgUExEX1BMQVRfQkFTRQkJMHgwOGMwMDAwMAorI2VsaWYgZGVmaW5lZChDT05GSUdfUExBVF9NMzI3MDBVVCkgfHwgZGVmaW5lZChDT05GSUdfUExBVF9VU1JWKQorI2RlZmluZSBQTERfUExBVF9CQVNFCQkweDA0YzAwMDAwCisjZWxzZQorI2Vycm9yICJubyBwbGF0Zm9ybSBjb25maWd1cmF0aW9uIgorI2VuZGlmCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisvKgorICogQyBmdW5jdGlvbnMgdXNlIG5vbi1jYWNoZSBhZGRyZXNzLgorICovCisjZGVmaW5lIFBMRF9CQVNFCQkoUExEX1BMQVRfQkFTRSAvKiArIE5PTkNBQ0hFX09GRlNFVCAqLykKKyNkZWZpbmUgX19yZWc4CQkJKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikKKyNkZWZpbmUgX19yZWcxNgkJCSh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKQorI2RlZmluZSBfX3JlZzMyCQkJKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKQorI2Vsc2UKKyNkZWZpbmUgUExEX0JBU0UJCShQTERfUExBVF9CQVNFICsgTk9OQ0FDSEVfT0ZGU0VUKQorI2RlZmluZSBfX3JlZzgKKyNkZWZpbmUgX19yZWcxNgorI2RlZmluZSBfX3JlZzMyCisjZW5kaWYJLyogX19BU1NFTUJMWV9fICovCisKKy8qIENGQyAqLworI2RlZmluZQlQTERfQ0ZSU1RDUgkJX19yZWcxNihQTERfQkFTRSArIDB4MDAwMCkKKyNkZWZpbmUgUExEX0NGU1RTCQlfX3JlZzE2KFBMRF9CQVNFICsgMHgwMDAyKQorI2RlZmluZSBQTERfQ0ZJTUFTSwkJX19yZWcxNihQTERfQkFTRSArIDB4MDAwNCkKKyNkZWZpbmUgUExEX0NGQlVGQ1IJCV9fcmVnMTYoUExEX0JBU0UgKyAweDAwMDYpCisjZGVmaW5lIFBMRF9DRlZFTkNSCQlfX3JlZzE2KFBMRF9CQVNFICsgMHgwMDA4KQorI2RlZmluZSBQTERfQ0ZDUjAJCV9fcmVnMTYoUExEX0JBU0UgKyAweDAwMGEpCisjZGVmaW5lIFBMRF9DRkNSMQkJX19yZWcxNihQTERfQkFTRSArIDB4MDAwYykKKyNkZWZpbmUgUExEX0lERVJTVENSCQlfX3JlZzE2KFBMRF9CQVNFICsgMHgwMDEwKQorCisvKiBNTUMgKi8KKyNkZWZpbmUgUExEX01NQ0NSCQlfX3JlZzE2KFBMRF9CQVNFICsgMHg0MDAwKQorI2RlZmluZSBQTERfTU1DTU9ECQlfX3JlZzE2KFBMRF9CQVNFICsgMHg0MDAyKQorI2RlZmluZSBQTERfTU1DU1RTCQlfX3JlZzE2KFBMRF9CQVNFICsgMHg0MDA2KQorI2RlZmluZSBQTERfTU1DQkFVUgkJX19yZWcxNihQTERfQkFTRSArIDB4NDAwYSkKKyNkZWZpbmUgUExEX01NQ0NNREJDVVQJCV9fcmVnMTYoUExEX0JBU0UgKyAweDQwMGMpCisjZGVmaW5lIFBMRF9NTUNDRFRCQ1VUCQlfX3JlZzE2KFBMRF9CQVNFICsgMHg0MDBlKQorI2RlZmluZSBQTERfTU1DREVUCQlfX3JlZzE2KFBMRF9CQVNFICsgMHg0MDEwKQorI2RlZmluZSBQTERfTU1DV1AJCV9fcmVnMTYoUExEX0JBU0UgKyAweDQwMTIpCisjZGVmaW5lIFBMRF9NTUNXREFUQQkJX19yZWcxNihQTERfQkFTRSArIDB4NTAwMCkKKyNkZWZpbmUgUExEX01NQ1JEQVRBCQlfX3JlZzE2KFBMRF9CQVNFICsgMHg2MDAwKQorI2RlZmluZSBQTERfTU1DQ01EREFUQQkJX19yZWcxNihQTERfQkFTRSArIDB4NzAwMCkKKyNkZWZpbmUgUExEX01NQ1JTUERBVEEJCV9fcmVnMTYoUExEX0JBU0UgKyAweDcwMDYpCisKKy8qIElDVQorICogIElDVUlTVFM6CXN0YXR1cyByZWdpc3RlcgorICogIElDVUlSRVEwOiAJcmVxdWVzdCByZWdpc3RlcgorICogIElDVUlSRVExOiAJcmVxdWVzdCByZWdpc3RlcgorICogIElDVUNSMzoJY29udHJvbCByZWdpc3RlciBmb3IgQ0ZJUkVRIyBpbnRlcnJ1cHQKKyAqICBJQ1VDUjQ6CWNvbnRyb2wgcmVnaXN0ZXIgZm9yIENGQyBDYXJkIGluc2VydCBpbnRlcnJ1cHQKKyAqICBJQ1VDUjU6CWNvbnRyb2wgcmVnaXN0ZXIgZm9yIENGQyBDYXJkIGVqZWN0IGludGVycnVwdAorICogIElDVUNSNjoJY29udHJvbCByZWdpc3RlciBmb3IgZXh0ZXJuYWwgaW50ZXJydXB0CisgKiAgSUNVQ1IxMToJY29udHJvbCByZWdpc3RlciBmb3IgTU1DIENhcmQgaW5zZXJ0L2VqZWN0IGludGVycnVwdAorICogIElDVUNSMTM6CWNvbnRyb2wgcmVnaXN0ZXIgZm9yIFNDIGVycm9yIGludGVycnVwdAorICogIElDVUNSMTQ6CWNvbnRyb2wgcmVnaXN0ZXIgZm9yIFNDIHJlY2VpdmUgaW50ZXJydXB0CisgKiAgSUNVQ1IxNToJY29udHJvbCByZWdpc3RlciBmb3IgU0Mgc2VuZCBpbnRlcnJ1cHQKKyAqICBJQ1VDUjE2Ogljb250cm9sIHJlZ2lzdGVyIGZvciBTSU8wIHJlY2VpdmUgaW50ZXJydXB0CisgKiAgSUNVQ1IxNzoJY29udHJvbCByZWdpc3RlciBmb3IgU0lPMCBzZW5kIGludGVycnVwdAorICovCisjaWYgIWRlZmluZWQoQ09ORklHX1BMQVRfVVNSVikKKyNkZWZpbmUgUExEX0lSUV9JTlQwCQkoTTMyNzAwVVRfUExEX0lSUV9CQVNFICsgMCkJLyogTm9uZSAqLworI2RlZmluZSBQTERfSVJRX0lOVDEJCShNMzI3MDBVVF9QTERfSVJRX0JBU0UgKyAxKQkvKiByZXNlcnZlZCAqLworI2RlZmluZSBQTERfSVJRX0lOVDIJCShNMzI3MDBVVF9QTERfSVJRX0JBU0UgKyAyKQkvKiByZXNlcnZlZCAqLworI2RlZmluZSBQTERfSVJRX0NGSVJFUQkJKE0zMjcwMFVUX1BMRF9JUlFfQkFTRSArIDMpCS8qIENGIElSRVEgKi8KKyNkZWZpbmUgUExEX0lSUV9DRkNfSU5TRVJUCShNMzI3MDBVVF9QTERfSVJRX0JBU0UgKyA0KQkvKiBDRiBJbnNlcnQgKi8KKyNkZWZpbmUgUExEX0lSUV9DRkNfRUpFQ1QJKE0zMjcwMFVUX1BMRF9JUlFfQkFTRSArIDUpCS8qIENGIEVqZWN0ICovCisjZGVmaW5lIFBMRF9JUlFfRVhJTlQJCShNMzI3MDBVVF9QTERfSVJRX0JBU0UgKyA2KQkvKiBFWElOVCAqLworI2RlZmluZSBQTERfSVJRX0lOVDcJCShNMzI3MDBVVF9QTERfSVJRX0JBU0UgKyA3KQkvKiByZXNlcnZlZCAqLworI2RlZmluZSBQTERfSVJRX0lOVDgJCShNMzI3MDBVVF9QTERfSVJRX0JBU0UgKyA4KQkvKiByZXNlcnZlZCAqLworI2RlZmluZSBQTERfSVJRX0lOVDkJCShNMzI3MDBVVF9QTERfSVJRX0JBU0UgKyA5KQkvKiByZXNlcnZlZCAqLworI2RlZmluZSBQTERfSVJRX0lOVDEwCQkoTTMyNzAwVVRfUExEX0lSUV9CQVNFICsgMTApCS8qIHJlc2VydmVkICovCisjZGVmaW5lIFBMRF9JUlFfTU1DQ0FSRAkJKE0zMjcwMFVUX1BMRF9JUlFfQkFTRSArIDExKQkvKiBNTUMgSW5zZXJ0L0VqZWN0ICovCisjZGVmaW5lIFBMRF9JUlFfSU5UMTIJCShNMzI3MDBVVF9QTERfSVJRX0JBU0UgKyAxMikJLyogcmVzZXJ2ZWQgKi8KKyNkZWZpbmUgUExEX0lSUV9TQ19FUlJPUgkoTTMyNzAwVVRfUExEX0lSUV9CQVNFICsgMTMpCS8qIFNDIGVycm9yICovCisjZGVmaW5lIFBMRF9JUlFfU0NfUkNWCQkoTTMyNzAwVVRfUExEX0lSUV9CQVNFICsgMTQpCS8qIFNDIHJlY2VpdmUgKi8KKyNkZWZpbmUgUExEX0lSUV9TQ19TTkQJCShNMzI3MDBVVF9QTERfSVJRX0JBU0UgKyAxNSkJLyogU0Mgc2VuZCAqLworI2RlZmluZSBQTERfSVJRX1NJTzBfUkNWCShNMzI3MDBVVF9QTERfSVJRX0JBU0UgKyAxNikJLyogU0lPIHJlY2VpdmUgKi8KKyNkZWZpbmUgUExEX0lSUV9TSU8wX1NORAkoTTMyNzAwVVRfUExEX0lSUV9CQVNFICsgMTcpCS8qIFNJTyBzZW5kICovCisjZGVmaW5lIFBMRF9JUlFfSU5UMTgJCShNMzI3MDBVVF9QTERfSVJRX0JBU0UgKyAxOCkJLyogcmVzZXJ2ZWQgKi8KKyNkZWZpbmUgUExEX0lSUV9JTlQxOQkJKE0zMjcwMFVUX1BMRF9JUlFfQkFTRSArIDE5KQkvKiByZXNlcnZlZCAqLworI2RlZmluZSBQTERfSVJRX0lOVDIwCQkoTTMyNzAwVVRfUExEX0lSUV9CQVNFICsgMjApCS8qIHJlc2VydmVkICovCisjZGVmaW5lIFBMRF9JUlFfSU5UMjEJCShNMzI3MDBVVF9QTERfSVJRX0JBU0UgKyAyMSkJLyogcmVzZXJ2ZWQgKi8KKyNkZWZpbmUgUExEX0lSUV9JTlQyMgkJKE0zMjcwMFVUX1BMRF9JUlFfQkFTRSArIDIyKQkvKiByZXNlcnZlZCAqLworI2RlZmluZSBQTERfSVJRX0lOVDIzCQkoTTMyNzAwVVRfUExEX0lSUV9CQVNFICsgMjMpCS8qIHJlc2VydmVkICovCisjZGVmaW5lIFBMRF9JUlFfSU5UMjQJCShNMzI3MDBVVF9QTERfSVJRX0JBU0UgKyAyNCkJLyogcmVzZXJ2ZWQgKi8KKyNkZWZpbmUgUExEX0lSUV9JTlQyNQkJKE0zMjcwMFVUX1BMRF9JUlFfQkFTRSArIDI1KQkvKiByZXNlcnZlZCAqLworI2RlZmluZSBQTERfSVJRX0lOVDI2CQkoTTMyNzAwVVRfUExEX0lSUV9CQVNFICsgMjYpCS8qIHJlc2VydmVkICovCisjZGVmaW5lIFBMRF9JUlFfSU5UMjcJCShNMzI3MDBVVF9QTERfSVJRX0JBU0UgKyAyNykJLyogcmVzZXJ2ZWQgKi8KKyNkZWZpbmUgUExEX0lSUV9JTlQyOAkJKE0zMjcwMFVUX1BMRF9JUlFfQkFTRSArIDI4KQkvKiByZXNlcnZlZCAqLworI2RlZmluZSBQTERfSVJRX0lOVDI5CQkoTTMyNzAwVVRfUExEX0lSUV9CQVNFICsgMjkpCS8qIHJlc2VydmVkICovCisjZGVmaW5lIFBMRF9JUlFfSU5UMzAJCShNMzI3MDBVVF9QTERfSVJRX0JBU0UgKyAzMCkJLyogcmVzZXJ2ZWQgKi8KKyNkZWZpbmUgUExEX0lSUV9JTlQzMQkJKE0zMjcwMFVUX1BMRF9JUlFfQkFTRSArIDMxKQkvKiByZXNlcnZlZCAqLworCisjZWxzZQkvKiBDT05GSUdfUExBVF9VU1JWICovCisKKyNkZWZpbmUgUExEX0lSUV9JTlQwCQkoTTMyNzAwVVRfUExEX0lSUV9CQVNFICsgMCkJLyogTm9uZSAqLworI2RlZmluZSBQTERfSVJRX0lOVDEJCShNMzI3MDBVVF9QTERfSVJRX0JBU0UgKyAxKQkvKiByZXNlcnZlZCAqLworI2RlZmluZSBQTERfSVJRX0lOVDIJCShNMzI3MDBVVF9QTERfSVJRX0JBU0UgKyAyKQkvKiByZXNlcnZlZCAqLworI2RlZmluZSBQTERfSVJRX0NGMAkJKE0zMjcwMFVUX1BMRF9JUlFfQkFTRSArIDMpCS8qIENGMCMgKi8KKyNkZWZpbmUgUExEX0lSUV9DRjEJCShNMzI3MDBVVF9QTERfSVJRX0JBU0UgKyA0KQkvKiBDRjEjICovCisjZGVmaW5lIFBMRF9JUlFfQ0YyCQkoTTMyNzAwVVRfUExEX0lSUV9CQVNFICsgNSkJLyogQ0YyIyAqLworI2RlZmluZSBQTERfSVJRX0NGMwkJKE0zMjcwMFVUX1BMRF9JUlFfQkFTRSArIDYpCS8qIENGMyMgKi8KKyNkZWZpbmUgUExEX0lSUV9DRjQJCShNMzI3MDBVVF9QTERfSVJRX0JBU0UgKyA3KQkvKiBDRjQjICovCisjZGVmaW5lIFBMRF9JUlFfSU5UOAkJKE0zMjcwMFVUX1BMRF9JUlFfQkFTRSArIDgpCS8qIHJlc2VydmVkICovCisjZGVmaW5lIFBMRF9JUlFfSU5UOQkJKE0zMjcwMFVUX1BMRF9JUlFfQkFTRSArIDkpCS8qIHJlc2VydmVkICovCisjZGVmaW5lIFBMRF9JUlFfSU5UMTAJCShNMzI3MDBVVF9QTERfSVJRX0JBU0UgKyAxMCkJLyogcmVzZXJ2ZWQgKi8KKyNkZWZpbmUgUExEX0lSUV9JTlQxMQkJKE0zMjcwMFVUX1BMRF9JUlFfQkFTRSArIDExKQkvKiByZXNlcnZlZCAqLworI2RlZmluZSBQTERfSVJRX1VBUlQwCQkoTTMyNzAwVVRfUExEX0lSUV9CQVNFICsgMTIpCS8qIFVBUlRJUlEwICovCisjZGVmaW5lIFBMRF9JUlFfVUFSVDEJCShNMzI3MDBVVF9QTERfSVJRX0JBU0UgKyAxMykJLyogVUFSVElSUTEgKi8KKyNkZWZpbmUgUExEX0lSUV9JTlQxNAkJKE0zMjcwMFVUX1BMRF9JUlFfQkFTRSArIDE0KQkvKiByZXNlcnZlZCAqLworI2RlZmluZSBQTERfSVJRX0lOVDE1CQkoTTMyNzAwVVRfUExEX0lSUV9CQVNFICsgMTUpCS8qIHJlc2VydmVkICovCisjZGVmaW5lIFBMRF9JUlFfU05ESU5UCQkoTTMyNzAwVVRfUExEX0lSUV9CQVNFICsgMTYpCS8qIFNORElOVCMgKi8KKyNkZWZpbmUgUExEX0lSUV9JTlQxNwkJKE0zMjcwMFVUX1BMRF9JUlFfQkFTRSArIDE3KQkvKiByZXNlcnZlZCAqLworI2RlZmluZSBQTERfSVJRX0lOVDE4CQkoTTMyNzAwVVRfUExEX0lSUV9CQVNFICsgMTgpCS8qIHJlc2VydmVkICovCisjZGVmaW5lIFBMRF9JUlFfSU5UMTkJCShNMzI3MDBVVF9QTERfSVJRX0JBU0UgKyAxOSkJLyogcmVzZXJ2ZWQgKi8KKyNkZWZpbmUgUExEX0lSUV9JTlQyMAkJKE0zMjcwMFVUX1BMRF9JUlFfQkFTRSArIDIwKQkvKiByZXNlcnZlZCAqLworI2RlZmluZSBQTERfSVJRX0lOVDIxCQkoTTMyNzAwVVRfUExEX0lSUV9CQVNFICsgMjEpCS8qIHJlc2VydmVkICovCisjZGVmaW5lIFBMRF9JUlFfSU5UMjIJCShNMzI3MDBVVF9QTERfSVJRX0JBU0UgKyAyMikJLyogcmVzZXJ2ZWQgKi8KKyNkZWZpbmUgUExEX0lSUV9JTlQyMwkJKE0zMjcwMFVUX1BMRF9JUlFfQkFTRSArIDIzKQkvKiByZXNlcnZlZCAqLworI2RlZmluZSBQTERfSVJRX0lOVDI0CQkoTTMyNzAwVVRfUExEX0lSUV9CQVNFICsgMjQpCS8qIHJlc2VydmVkICovCisjZGVmaW5lIFBMRF9JUlFfSU5UMjUJCShNMzI3MDBVVF9QTERfSVJRX0JBU0UgKyAyNSkJLyogcmVzZXJ2ZWQgKi8KKyNkZWZpbmUgUExEX0lSUV9JTlQyNgkJKE0zMjcwMFVUX1BMRF9JUlFfQkFTRSArIDI2KQkvKiByZXNlcnZlZCAqLworI2RlZmluZSBQTERfSVJRX0lOVDI3CQkoTTMyNzAwVVRfUExEX0lSUV9CQVNFICsgMjcpCS8qIHJlc2VydmVkICovCisjZGVmaW5lIFBMRF9JUlFfSU5UMjgJCShNMzI3MDBVVF9QTERfSVJRX0JBU0UgKyAyOCkJLyogcmVzZXJ2ZWQgKi8KKyNkZWZpbmUgUExEX0lSUV9JTlQyOQkJKE0zMjcwMFVUX1BMRF9JUlFfQkFTRSArIDI5KQkvKiByZXNlcnZlZCAqLworI2RlZmluZSBQTERfSVJRX0lOVDMwCQkoTTMyNzAwVVRfUExEX0lSUV9CQVNFICsgMzApCS8qIHJlc2VydmVkICovCisKKyNlbmRpZgkvKiBDT05GSUdfUExBVF9VU1JWICovCisKKyNkZWZpbmUgUExEX0lDVUlTVFMJCV9fcmVnMTYoUExEX0JBU0UgKyAweDgwMDIpCisjZGVmaW5lIFBMRF9JQ1VJU1RTX1ZFQ0JfTUFTSwkoMHhmMDAwKQorI2RlZmluZSBQTERfSUNVSVNUU19WRUNCKHgpCSgoeCkgJiBQTERfSUNVSVNUU19WRUNCX01BU0spCisjZGVmaW5lIFBMRF9JQ1VJU1RTX0lTTl9NQVNLCSgweDA3YzApCisjZGVmaW5lIFBMRF9JQ1VJU1RTX0lTTih4KQkoKHgpICYgUExEX0lDVUlTVFNfSVNOX01BU0spCisjZGVmaW5lIFBMRF9JQ1VJUkVRMAkJX19yZWcxNihQTERfQkFTRSArIDB4ODAwNCkKKyNkZWZpbmUgUExEX0lDVUlSRVExCQlfX3JlZzE2KFBMRF9CQVNFICsgMHg4MDA2KQorI2RlZmluZSBQTERfSUNVQ1IxCQlfX3JlZzE2KFBMRF9CQVNFICsgMHg4MTAwKQorI2RlZmluZSBQTERfSUNVQ1IyCQlfX3JlZzE2KFBMRF9CQVNFICsgMHg4MTAyKQorI2RlZmluZSBQTERfSUNVQ1IzCQlfX3JlZzE2KFBMRF9CQVNFICsgMHg4MTA0KQorI2RlZmluZSBQTERfSUNVQ1I0CQlfX3JlZzE2KFBMRF9CQVNFICsgMHg4MTA2KQorI2RlZmluZSBQTERfSUNVQ1I1CQlfX3JlZzE2KFBMRF9CQVNFICsgMHg4MTA4KQorI2RlZmluZSBQTERfSUNVQ1I2CQlfX3JlZzE2KFBMRF9CQVNFICsgMHg4MTBhKQorI2RlZmluZSBQTERfSUNVQ1I3CQlfX3JlZzE2KFBMRF9CQVNFICsgMHg4MTBjKQorI2RlZmluZSBQTERfSUNVQ1I4CQlfX3JlZzE2KFBMRF9CQVNFICsgMHg4MTBlKQorI2RlZmluZSBQTERfSUNVQ1I5CQlfX3JlZzE2KFBMRF9CQVNFICsgMHg4MTEwKQorI2RlZmluZSBQTERfSUNVQ1IxMAkJX19yZWcxNihQTERfQkFTRSArIDB4ODExMikKKyNkZWZpbmUgUExEX0lDVUNSMTEJCV9fcmVnMTYoUExEX0JBU0UgKyAweDgxMTQpCisjZGVmaW5lIFBMRF9JQ1VDUjEyCQlfX3JlZzE2KFBMRF9CQVNFICsgMHg4MTE2KQorI2RlZmluZSBQTERfSUNVQ1IxMwkJX19yZWcxNihQTERfQkFTRSArIDB4ODExOCkKKyNkZWZpbmUgUExEX0lDVUNSMTQJCV9fcmVnMTYoUExEX0JBU0UgKyAweDgxMWEpCisjZGVmaW5lIFBMRF9JQ1VDUjE1CQlfX3JlZzE2KFBMRF9CQVNFICsgMHg4MTFjKQorI2RlZmluZSBQTERfSUNVQ1IxNgkJX19yZWcxNihQTERfQkFTRSArIDB4ODExZSkKKyNkZWZpbmUgUExEX0lDVUNSMTcJCV9fcmVnMTYoUExEX0JBU0UgKyAweDgxMjApCisjZGVmaW5lIFBMRF9JQ1VDUl9JRU4JCSgweDEwMDApCisjZGVmaW5lIFBMRF9JQ1VDUl9JUkVRCQkoMHgwMTAwKQorI2RlZmluZSBQTERfSUNVQ1JfSVNNT0QwMAkoMHgwMDAwKQkvKiBMb3cgZWRnZSAqLworI2RlZmluZSBQTERfSUNVQ1JfSVNNT0QwMQkoMHgwMDEwKQkvKiBMb3cgbGV2ZWwgKi8KKyNkZWZpbmUgUExEX0lDVUNSX0lTTU9EMDIJKDB4MDAyMCkJLyogSGlnaCBlZGdlICovCisjZGVmaW5lIFBMRF9JQ1VDUl9JU01PRDAzCSgweDAwMzApCS8qIEhpZ2ggbGV2ZWwgKi8KKyNkZWZpbmUgUExEX0lDVUNSX0lMRVZFTDAJKDB4MDAwMCkKKyNkZWZpbmUgUExEX0lDVUNSX0lMRVZFTDEJKDB4MDAwMSkKKyNkZWZpbmUgUExEX0lDVUNSX0lMRVZFTDIJKDB4MDAwMikKKyNkZWZpbmUgUExEX0lDVUNSX0lMRVZFTDMJKDB4MDAwMykKKyNkZWZpbmUgUExEX0lDVUNSX0lMRVZFTDQJKDB4MDAwNCkKKyNkZWZpbmUgUExEX0lDVUNSX0lMRVZFTDUJKDB4MDAwNSkKKyNkZWZpbmUgUExEX0lDVUNSX0lMRVZFTDYJKDB4MDAwNikKKyNkZWZpbmUgUExEX0lDVUNSX0lMRVZFTDcJKDB4MDAwNykKKworLyogUG93ZXIgQ29udHJvbCBvZiBNTUMgYW5kIENGICovCisjZGVmaW5lIFBMRF9DUENSCQlfX3JlZzE2KFBMRF9CQVNFICsgMHgxNDAwMCkKKyNkZWZpbmUgUExEX0NQQ1JfQ0YJCTB4MDAwMQorI2RlZmluZSBQTERfQ1BDUl9NTUMJCTB4MDAwMgorCisvKiBMRUQgQ29udHJvbAorICoKKyAqIDE6IERJUCBzd2ljaCBzaWRlCisgKiAyOiBSZXNldCBzd2l0Y2ggc2lkZQorICovCisjZGVmaW5lIFBMRF9JT0xFRENSCQlfX3JlZzE2KFBMRF9CQVNFICsgMHgxNDAwMikKKyNkZWZpbmUgUExEX0lPTEVEXzFfT04JCTB4MDAxCisjZGVmaW5lIFBMRF9JT0xFRF8xX09GRgkJMHgwMDAKKyNkZWZpbmUgUExEX0lPTEVEXzJfT04JCTB4MDAyCisjZGVmaW5lIFBMRF9JT0xFRF8yX09GRgkJMHgwMDAKKworLyogRElQIFN3aXRjaAorICogIDA6IFdyaXRlLXByb3RlY3Qgb2YgRmxhc2ggTWVtb3J5ICgwOnByb3RlY3RlZCwgMTpub24tcHJvdGVjdGVkKQorICogIDE6IC0KKyAqICAyOiAtCisgKiAgMzogLQorICovCisjZGVmaW5lIFBMRF9JT1NXU1RTCQlfX3JlZzE2KFBMRF9CQVNFICsgMHgxNDAwNCkKKyNkZWZpbmUJUExEX0lPU1dTVFNfSU9TVzIJMHgwMjAwCisjZGVmaW5lCVBMRF9JT1NXU1RTX0lPU1cxCTB4MDEwMAorI2RlZmluZQlQTERfSU9TV1NUU19JT1dQMAkweDAwMDEKKworLyogQ1JDICovCisjZGVmaW5lIFBMRF9DUkM3REFUQQkJX19yZWcxNihQTERfQkFTRSArIDB4MTgwMDApCisjZGVmaW5lIFBMRF9DUkM3SU5EQVRBCQlfX3JlZzE2KFBMRF9CQVNFICsgMHgxODAwMikKKyNkZWZpbmUgUExEX0NSQzE2REFUQQkJX19yZWcxNihQTERfQkFTRSArIDB4MTgwMDQpCisjZGVmaW5lIFBMRF9DUkMxNklOREFUQQkJX19yZWcxNihQTERfQkFTRSArIDB4MTgwMDYpCisjZGVmaW5lIFBMRF9DUkMxNkFEQVRBCQlfX3JlZzE2KFBMRF9CQVNFICsgMHgxODAwOCkKKyNkZWZpbmUgUExEX0NSQzE2QUlOREFUQQlfX3JlZzE2KFBMRF9CQVNFICsgMHgxODAwYSkKKworLyogUlRDICovCisjZGVmaW5lIFBMRF9SVENDUgkJX19yZWcxNihQTERfQkFTRSArIDB4MWMwMDApCisjZGVmaW5lIFBMRF9SVENCQVVSCQlfX3JlZzE2KFBMRF9CQVNFICsgMHgxYzAwMikKKyNkZWZpbmUgUExEX1JUQ1dSREFUQQkJX19yZWcxNihQTERfQkFTRSArIDB4MWMwMDQpCisjZGVmaW5lIFBMRF9SVENSRERBVEEJCV9fcmVnMTYoUExEX0JBU0UgKyAweDFjMDA2KQorI2RlZmluZSBQTERfUlRDUlNUT0RUCQlfX3JlZzE2KFBMRF9CQVNFICsgMHgxYzAwOCkKKworLyogU0lPMCAqLworI2RlZmluZSBQTERfRVNJTzBDUgkJX19yZWcxNihQTERfQkFTRSArIDB4MjAwMDApCisjZGVmaW5lCVBMRF9FU0lPMENSX1RYRU4JMHgwMDAxCisjZGVmaW5lCVBMRF9FU0lPMENSX1JYRU4JMHgwMDAyCisjZGVmaW5lIFBMRF9FU0lPME1PRDAJCV9fcmVnMTYoUExEX0JBU0UgKyAweDIwMDAyKQorI2RlZmluZQlQTERfRVNJTzBNT0QwX0NUU1MJMHgwMDQwCisjZGVmaW5lCVBMRF9FU0lPME1PRDBfUlRTUwkweDAwODAKKyNkZWZpbmUgUExEX0VTSU8wTU9EMQkJX19yZWcxNihQTERfQkFTRSArIDB4MjAwMDQpCisjZGVmaW5lCVBMRF9FU0lPME1PRDFfTE1GUwkweDAwMTAKKyNkZWZpbmUgUExEX0VTSU8wU1RTCQlfX3JlZzE2KFBMRF9CQVNFICsgMHgyMDAwNikKKyNkZWZpbmUJUExEX0VTSU8wU1RTX1RFTVAJMHgwMDAxCisjZGVmaW5lCVBMRF9FU0lPMFNUU19UWENQCTB4MDAwMgorI2RlZmluZQlQTERfRVNJTzBTVFNfUlhDUAkweDAwMDQKKyNkZWZpbmUJUExEX0VTSU8wU1RTX1RYU0MJMHgwMTAwCisjZGVmaW5lCVBMRF9FU0lPMFNUU19SWFNDCTB4MDIwMAorI2RlZmluZSBQTERfRVNJTzBTVFNfVFhSRUFEWQkoUExEX0VTSU8wU1RTX1RYQ1AgfCBQTERfRVNJTzBTVFNfVEVNUCkKKyNkZWZpbmUgUExEX0VTSU8wSU5UQ1IJCV9fcmVnMTYoUExEX0JBU0UgKyAweDIwMDA4KQorI2RlZmluZQlQTERfRVNJTzBJTlRDUl9UWElFTgkweDAwMDIKKyNkZWZpbmUJUExEX0VTSU8wSU5UQ1JfUlhDRU4JMHgwMDA0CisjZGVmaW5lIFBMRF9FU0lPMEJBVVIJCV9fcmVnMTYoUExEX0JBU0UgKyAweDIwMDBhKQorI2RlZmluZSBQTERfRVNJTzBUWEIJCV9fcmVnMTYoUExEX0JBU0UgKyAweDIwMDBjKQorI2RlZmluZSBQTERfRVNJTzBSWEIJCV9fcmVnMTYoUExEX0JBU0UgKyAweDIwMDBlKQorCisvKiBTSU0gQ2FyZCAqLworI2RlZmluZSBQTERfU0NDUgkJX19yZWcxNihQTERfQkFTRSArIDB4MzgwMDApCisjZGVmaW5lIFBMRF9TQ01PRAkJX19yZWcxNihQTERfQkFTRSArIDB4MzgwMDQpCisjZGVmaW5lIFBMRF9TQ1NUUwkJX19yZWcxNihQTERfQkFTRSArIDB4MzgwMDYpCisjZGVmaW5lIFBMRF9TQ0lOVENSCQlfX3JlZzE2KFBMRF9CQVNFICsgMHgzODAwOCkKKyNkZWZpbmUgUExEX1NDQkFVUgkJX19yZWcxNihQTERfQkFTRSArIDB4MzgwMGEpCisjZGVmaW5lIFBMRF9TQ1RYQgkJX19yZWcxNihQTERfQkFTRSArIDB4MzgwMGMpCisjZGVmaW5lIFBMRF9TQ1JYQgkJX19yZWcxNihQTERfQkFTRSArIDB4MzgwMGUpCisKKyNlbmRpZgkvKiBfTTMyNzAwVVRfTTMyNzAwVVRfUExELkggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvbTMyci5oIGIvaW5jbHVkZS9hc20tbTMyci9tMzJyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjExNjY0OQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvbTMyci5oCkBAIC0wLDAgKzEsMTM0IEBACisjaWZuZGVmIF9BU01fTTMyUl9NMzJSX0hfCisjZGVmaW5lIF9BU01fTTMyUl9NMzJSX0hfCisKKy8qCisgKiBSZW5lc2FzIE0zMlIgcHJvY2Vzc29yCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0ICBSZW5lc2FzIFRlY2hub2xvZ3kgQ29ycC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKy8qIENoaXAgdHlwZSAqLworI2lmIGRlZmluZWQoQ09ORklHX0NISVBfWE5VWF9NUCkgfHwgZGVmaW5lZChDT05GSUdfQ0hJUF9YTlVYMl9NUCkKKyNpbmNsdWRlIDxhc20vbTMycl9tcF9mcGdhLmg+CisjZWxpZiBkZWZpbmVkKENPTkZJR19DSElQX1ZERUMyKSB8fCBkZWZpbmVkKENPTkZJR19DSElQX1hOVVgyKSBcCisJfHwgZGVmaW5lZChDT05GSUdfQ0hJUF9NMzI3MDApIHx8IGRlZmluZWQoQ09ORklHX0NISVBfTTMyMTAyKSBcCisgICAgICAgIHx8IGRlZmluZWQoQ09ORklHX0NISVBfT1BTUCkKKyNpbmNsdWRlIDxhc20vbTMyMTAyLmg+CisjaW5jbHVkZSA8YXNtL20zMjEwMnBlcmkuaD4KKyNlbmRpZgorCisvKiBQbGF0Zm9ybSB0eXBlICovCisjaWYgZGVmaW5lZChDT05GSUdfUExBVF9NMzI3MDBVVCkKKyNpbmNsdWRlIDxhc20vbTMyNzAwdXQvbTMyNzAwdXRfcGxkLmg+CisjaW5jbHVkZSA8YXNtL20zMjcwMHV0L20zMjcwMHV0X2xhbi5oPgorI2luY2x1ZGUgPGFzbS9tMzI3MDB1dC9tMzI3MDB1dF9sY2QuaD4KKyNlbmRpZiAgLyogQ09ORklHX1BMQVRfTTMyNzAwVVQgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1BMQVRfT1BTUFVUKQorI2luY2x1ZGUgPGFzbS9vcHNwdXQvb3BzcHV0X3BsZC5oPgorI2luY2x1ZGUgPGFzbS9vcHNwdXQvb3BzcHV0X2xhbi5oPgorI2luY2x1ZGUgPGFzbS9vcHNwdXQvb3BzcHV0X2xjZC5oPgorI2VuZGlmICAvKiBDT05GSUdfUExBVF9PUFNQVVQgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1BMQVRfTUFQUEkyKQorI2luY2x1ZGUgPGFzbS9tYXBwaTIvbWFwcGkyX3BsZC5oPgorI2VuZGlmCS8qIENPTkZJR19QTEFUX01BUFBJMiAqLworCisjaWYgZGVmaW5lZChDT05GSUdfUExBVF9VU1JWKQorI2luY2x1ZGUgPGFzbS9tMzI3MDB1dC9tMzI3MDB1dF9wbGQuaD4KKyNlbmRpZgorCisvKgorICogTTMyUiBSZWdpc3RlcgorICovCisKKy8qCisgKiBNTVUgUmVnaXN0ZXIKKyAqLworCisjZGVmaW5lIE1NVV9SRUdfQkFTRQkoMHhmZmZmMDAwMCkKKyNkZWZpbmUgSVRMQl9CQVNFCSgweGZlMDAwMDAwKQorI2RlZmluZSBEVExCX0JBU0UJKDB4ZmUwMDA4MDApCisKKyNkZWZpbmUgTlJfVExCX0VOVFJJRVMJQ09ORklHX1RMQl9FTlRSSUVTCisKKyNkZWZpbmUgTUFUTQlNTVVfUkVHX0JBU0UJCS8qIE1NVSBBZGRyZXNzIFRyYW5zbGF0aW9uIE1vZGUKKwkJCQkJICAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTVBTWgkoMHgwNCArIE1NVV9SRUdfQkFTRSkJLyogTU1VIFBhZ2UgU2l6ZSBEZXNpZ25hdGlvbiBSZWdpc3RlciAqLworI2RlZmluZSBNQVNJRAkoMHgwOCArIE1NVV9SRUdfQkFTRSkJLyogTU1VIEFkZHJlc3MgU3BhY2UgSUQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTUVTVFMJKDB4MGMgKyBNTVVfUkVHX0JBU0UpCS8qIE1NVSBFeGNlcHRpb24gU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIE1ERVZBCSgweDEwICsgTU1VX1JFR19CQVNFKQkvKiBNTVUgT3BlcmFuZCBFeGNlcHRpb24gVmlydHVhbAorCQkJCQkgICBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lIE1ERVZQCSgweDE0ICsgTU1VX1JFR19CQVNFKQkvKiBNTVUgT3BlcmFuZCBFeGNlcHRpb24gVmlydHVhbCBQYWdlCisJCQkJCSAgIE51bWJlciBSZWdpc3RlciAqLworI2RlZmluZSBNUFRCCSgweDE4ICsgTU1VX1JFR19CQVNFKQkvKiBNTVUgUGFnZSBUYWJsZSBCYXNlIFJlZ2lzdGVyICovCisjZGVmaW5lIE1TVkEJKDB4MjAgKyBNTVVfUkVHX0JBU0UpCS8qIE1NVSBTZWFyY2ggVmlydHVhbCBBZGRyZXNzCisJCQkJCSAgIFJlZ2lzdGVyICovCisjZGVmaW5lIE1UT1AJKDB4MjQgKyBNTVVfUkVHX0JBU0UpCS8qIE1NVSBUTEIgT3BlcmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lIE1JRFhJCSgweDI4ICsgTU1VX1JFR19CQVNFKQkvKiBNTVUgSW5kZXggUmVnaXN0ZXIgZm9yCisJCQkJCSAgIEluc3RydWNpdG9uICovCisjZGVmaW5lIE1JRFhECSgweDJjICsgTU1VX1JFR19CQVNFKQkvKiBNTVUgSW5kZXggUmVnaXN0ZXIgZm9yIE9wZXJhbmQgKi8KKworI2RlZmluZSBNQVRNX29mZnNldAkoTUFUTSAtIE1NVV9SRUdfQkFTRSkKKyNkZWZpbmUgTVBTWl9vZmZzZXQJKE1QU1ogLSBNTVVfUkVHX0JBU0UpCisjZGVmaW5lIE1BU0lEX29mZnNldAkoTUFTSUQgLSBNTVVfUkVHX0JBU0UpCisjZGVmaW5lIE1FU1RTX29mZnNldAkoTUVTVFMgLSBNTVVfUkVHX0JBU0UpCisjZGVmaW5lIE1ERVZBX29mZnNldAkoTURFVkEgLSBNTVVfUkVHX0JBU0UpCisjZGVmaW5lIE1ERVZQX29mZnNldAkoTURFVlAgLSBNTVVfUkVHX0JBU0UpCisjZGVmaW5lIE1QVEJfb2Zmc2V0CShNUFRCIC0gTU1VX1JFR19CQVNFKQorI2RlZmluZSBNU1ZBX29mZnNldAkoTVNWQSAtIE1NVV9SRUdfQkFTRSkKKyNkZWZpbmUgTVRPUF9vZmZzZXQJKE1UT1AgLSBNTVVfUkVHX0JBU0UpCisjZGVmaW5lIE1JRFhJX29mZnNldAkoTUlEWEkgLSBNTVVfUkVHX0JBU0UpCisjZGVmaW5lIE1JRFhEX29mZnNldAkoTUlEWEQgLSBNTVVfUkVHX0JBU0UpCisKKyNkZWZpbmUgTUVTVFNfSVQJKDEgPDwgMCkJLyogSW5zdHJ1Y3Rpb24gVExCIG1pc3MgKi8KKyNkZWZpbmUgTUVTVFNfSUEJKDEgPDwgMSkJLyogSW5zdHJ1Y3Rpb24gQWNjZXNzIEV4Y2VwdGlvbiAqLworI2RlZmluZSBNRVNUU19EVAkoMSA8PCA0KQkvKiBPcGVyYW5kIFRMQiBtaXNzICovCisjZGVmaW5lIE1FU1RTX0RBCSgxIDw8IDUpCS8qIE9wZXJhbmQgQWNjZXNzIEV4Y2VwdGlvbiAqLworI2RlZmluZSBNRVNUU19EUlcJKDEgPDwgNikJLyogT3BlcmFuZCBXcml0ZSBFeGNlcHRpb24gRmxhZyAqLworCisvKgorICogUFNXIChQcm9jZXNzb3IgU3RhdHVzIFdvcmQpCisgKi8KKworLyogUFNXIGJpdCAqLworI2RlZmluZSBNMzJSX1BTV19CSVRfU00gICAoNykgICAgLyogU3RhY2sgTW9kZSAqLworI2RlZmluZSBNMzJSX1BTV19CSVRfSUUgICAoNikgICAgLyogSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBNMzJSX1BTV19CSVRfUE0gICAoMykgICAgLyogUHJvY2Vzc29yIE1vZGUgWzA6U3VwZXJ2aXNvciwxOlVzZXJdICovCisjZGVmaW5lIE0zMlJfUFNXX0JJVF9DICAgICgwKSAgICAvKiBDb25kaXRpb24gKi8KKyNkZWZpbmUgTTMyUl9QU1dfQklUX0JTTSAgKDcrOCkgIC8qIEJhY2t1cCBTdGFjayBNb2RlICovCisjZGVmaW5lIE0zMlJfUFNXX0JJVF9CSUUgICg2KzgpICAvKiBCYWNrdXAgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBNMzJSX1BTV19CSVRfQlBNICAoMys4KSAgLyogQmFja3VwIFByb2Nlc3NvciBNb2RlICovCisjZGVmaW5lIE0zMlJfUFNXX0JJVF9CQyAgICgwKzgpICAvKiBCYWNrdXAgQ29uZGl0aW9uICovCisKKy8qIFBTVyBiaXQgbWFwICovCisjZGVmaW5lIE0zMlJfUFNXX1NNICAgKDFVTDw8IE0zMlJfUFNXX0JJVF9TTSkgICAvKiBTdGFjayBNb2RlICovCisjZGVmaW5lIE0zMlJfUFNXX0lFICAgKDFVTDw8IE0zMlJfUFNXX0JJVF9JRSkgICAvKiBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIE0zMlJfUFNXX1BNICAgKDFVTDw8IE0zMlJfUFNXX0JJVF9QTSkgICAvKiBQcm9jZXNzb3IgTW9kZSAqLworI2RlZmluZSBNMzJSX1BTV19DICAgICgxVUw8PCBNMzJSX1BTV19CSVRfQykgICAgLyogQ29uZGl0aW9uICovCisjZGVmaW5lIE0zMlJfUFNXX0JTTSAgKDFVTDw8IE0zMlJfUFNXX0JJVF9CU00pICAvKiBCYWNrdXAgU3RhY2sgTW9kZSAqLworI2RlZmluZSBNMzJSX1BTV19CSUUgICgxVUw8PCBNMzJSX1BTV19CSVRfQklFKSAgLyogQmFja3VwIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgTTMyUl9QU1dfQlBNICAoMVVMPDwgTTMyUl9QU1dfQklUX0JQTSkgIC8qIEJhY2t1cCBQcm9jZXNzb3IgTW9kZSAqLworI2RlZmluZSBNMzJSX1BTV19CQyAgICgxVUw8PCBNMzJSX1BTV19CSVRfQkMpICAgLyogQmFja3VwIENvbmRpdGlvbiAqLworCisvKgorICogRGlyZWN0IGFkZHJlc3MgdG8gU0ZSCisgKi8KKworI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaWZkZWYgQ09ORklHX01NVQorI2RlZmluZSBOT05DQUNIRV9PRkZTRVQgIF9fUEFHRV9PRkZTRVQrMHgyMDAwMDAwMAorI2Vsc2UKKyNkZWZpbmUgTk9OQ0FDSEVfT0ZGU0VUICBfX1BBR0VfT0ZGU0VUCisjZW5kaWYgLyogQ09ORklHX01NVSAqLworCisjZGVmaW5lIE0zMlJfSUNVX0lTVFNfQUREUiAgTTMyUl9JQ1VfSVNUU19QT1JUTCtOT05DQUNIRV9PRkZTRVQKKyNkZWZpbmUgTTMyUl9JQ1VfSVBJQ1JfQUREUiAgTTMyUl9JQ1VfSVBJQ1IwX1BPUlRMK05PTkNBQ0hFX09GRlNFVAorI2RlZmluZSBNMzJSX0lDVV9JTUFTS19BRERSICBNMzJSX0lDVV9JTUFTS19QT1JUTCtOT05DQUNIRV9PRkZTRVQKKyNkZWZpbmUgTTMyUl9GUEdBX0NQVV9OQU1FX0FERFIgIE0zMlJfRlBHQV9DUFVfTkFNRTBfUE9SVEwrTk9OQ0FDSEVfT0ZGU0VUCisjZGVmaW5lIE0zMlJfRlBHQV9NT0RFTF9JRF9BRERSICBNMzJSX0ZQR0FfTU9ERUxfSUQwX1BPUlRMK05PTkNBQ0hFX09GRlNFVAorI2RlZmluZSBNMzJSX0ZQR0FfVkVSU0lPTl9BRERSICAgTTMyUl9GUEdBX1ZFUlNJT04wX1BPUlRMK05PTkNBQ0hFX09GRlNFVAorCisjZW5kaWYgLyogX0FTTV9NMzJSX00zMlJfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvbTMycl9tcF9mcGdhLmggYi9pbmNsdWRlL2FzbS1tMzJyL20zMnJfbXBfZnBnYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3NmQyYjkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL20zMnJfbXBfZnBnYS5oCkBAIC0wLDAgKzEsMzEzIEBACisjaWZuZGVmIF9BU01fTTMyUl9NMzJSX01QX0ZQR0FfCisjZGVmaW5lIF9BU01fTTMyUl9NMzJSX01QX0ZQR0FfCisKKy8qCisgKiBSZW5lc2FzIE0zMlItTVAtRlBHQQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMiAgSGl0b3NoaSBZYW1hbW90bworICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA0ICBSZW5lc2FzIFRlY2hub2xvZ3kgQ29ycC4KKyAqLworCisvKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIE0zMlItTVAtRlBHQSBNZW1vcnkgTWFwCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogMHgwMDAwMDAwMCA6IEJsb2NrIzAgOiA2NFtNQl0KKyAqICAgICAgICAgICAgICAweDAzRTAwMDAwIDogU0ZSCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDNFMDAwMDAgOiByZXNlcnZlZAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAweDAzRUYwMDAwIDogRlBHQQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAweDAzRUYxMDAwIDogcmVzZXJ2ZWQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwM0VGNDAwMCA6IENLTQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAweDAzRUY0MDAwIDogQlNFTEMKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwM0VGNTAwMCA6IHJlc2VydmVkCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDNFRkMwMDAgOiBNRlQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwM0VGRDAwMCA6IFNJTworICogICAgICAgICAgICAgICAgICAgICAgICAgICAweDAzRUZFMDAwIDogcmVzZXJ2ZWQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwM0VGRjAwMCA6IElDVQorICogICAgICAgICAgICAgIDB4MDNGMDAwMDAgOiBJbnRlcm5hbCBTUkFNIDY0W0tCXQorICogICAgICAgICAgICAgIDB4MDNGMTAwMDAgOiByZXNlcnZlZAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIDB4MDQwMDAwMDAgOiBCbG9jayMxIDogNjRbTUJdCisgKiAgICAgICAgICAgICAgMHgwNDAwMDAwMCA6IERlYnVnIGJvYXJkIFNSQU0gNFtNQl0KKyAqICAgICAgICAgICAgICAweDA0NDAwMDAwIDogcmVzZXJ2ZWQKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAweDA4MDAwMDAwIDogQmxvY2sjMiA6IDY0W01CXQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIDB4MEMwMDAwMDAgOiBCbG9jayMzIDogNjRbTUJdCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogMHgxMDAwMDAwMCA6IEJsb2NrIzQgOiA2NFtNQl0KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAweDE0MDAwMDAwIDogQmxvY2sjNSA6IDY0W01CXQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIDB4MTgwMDAwMDAgOiBCbG9jayM2IDogNjRbTUJdCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogMHgxQzAwMDAwMCA6IEJsb2NrIzcgOiA2NFtNQl0KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAweEZFMDAwMDAwIDogVExCCisgKiAgICAgICAgICAgICAgMHhGRTAwMDAwMCA6IElUTEIKKyAqICAgICAgICAgICAgICAweEZFMDAwMDgwIDogcmVzZXJ2ZWQKKyAqICAgICAgICAgICAgICAweEZFMDAwODAwIDogRFRMQgorICogICAgICAgICAgICAgIDB4RkUwMDA4ODAgOiByZXNlcnZlZAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIDB4RkYwMDAwMDAgOiBTeXN0ZW0gYXJlYQorICogICAgICAgICAgICAgIDB4RkZGRjAwMDAgOiBNTVUKKyAqICAgICAgICAgICAgICAweEZGRkYwMDMwIDogcmVzZXJ2ZWQKKyAqICAgICAgICAgICAgICAweEZGRkY4MDAwIDogRGVidWcgZnVuY3Rpb24KKyAqICAgICAgICAgICAgICAweEZGRkZBMDAwIDogcmVzZXJ2ZWQKKyAqICAgICAgICAgICAgICAweEZGRkZDMDAwIDogQ1BVIGNvbnRyb2wKKyAqIDB4RkZGRkZGRkYKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KgorICogU3BlY2lhbCBGdW5jdGlvbiBSZWdpc3RlcgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKyNkZWZpbmUgTTMyUl9TRlJfT0ZGU0VUICAoMHgwMEUwMDAwMCkgIC8qIDB4MDNFMDAwMDAtMHgwM0VGRkZGRiAxW01CXSAqLworCisvKgorICogRlBHQSByZWdpc3RlcnMuCisgKi8KKyNkZWZpbmUgTTMyUl9GUEdBX1RPUCAgKDB4MDAwRjAwMDArTTMyUl9TRlJfT0ZGU0VUKQorCisjZGVmaW5lIE0zMlJfRlBHQV9OVU1fT0ZfQ1BVU19QT1JUTCAgKDB4MDArTTMyUl9GUEdBX1RPUCkKKyNkZWZpbmUgTTMyUl9GUEdBX0NQVV9OQU1FMF9QT1JUTCAgICAoMHgxMCtNMzJSX0ZQR0FfVE9QKQorI2RlZmluZSBNMzJSX0ZQR0FfQ1BVX05BTUUxX1BPUlRMICAgICgweDE0K00zMlJfRlBHQV9UT1ApCisjZGVmaW5lIE0zMlJfRlBHQV9DUFVfTkFNRTJfUE9SVEwgICAgKDB4MTgrTTMyUl9GUEdBX1RPUCkKKyNkZWZpbmUgTTMyUl9GUEdBX0NQVV9OQU1FM19QT1JUTCAgICAoMHgxQytNMzJSX0ZQR0FfVE9QKQorI2RlZmluZSBNMzJSX0ZQR0FfTU9ERUxfSUQwX1BPUlRMICAgICgweDIwK00zMlJfRlBHQV9UT1ApCisjZGVmaW5lIE0zMlJfRlBHQV9NT0RFTF9JRDFfUE9SVEwgICAgKDB4MjQrTTMyUl9GUEdBX1RPUCkKKyNkZWZpbmUgTTMyUl9GUEdBX01PREVMX0lEMl9QT1JUTCAgICAoMHgyOCtNMzJSX0ZQR0FfVE9QKQorI2RlZmluZSBNMzJSX0ZQR0FfTU9ERUxfSUQzX1BPUlRMICAgICgweDJDK00zMlJfRlBHQV9UT1ApCisjZGVmaW5lIE0zMlJfRlBHQV9WRVJTSU9OMF9QT1JUTCAgICAgKDB4MzArTTMyUl9GUEdBX1RPUCkKKyNkZWZpbmUgTTMyUl9GUEdBX1ZFUlNJT04xX1BPUlRMICAgICAoMHgzNCtNMzJSX0ZQR0FfVE9QKQorCisvKgorICogQ2xvY2sgYW5kIFBvd2VyIE1hbmFnZXIgcmVnaXN0ZXJzLgorICovCisjZGVmaW5lIE0zMlJfQ1BNX09GRlNFVCAgKDB4MDAwRjQwMDArTTMyUl9TRlJfT0ZGU0VUKQorCisjZGVmaW5lIE0zMlJfQ1BNX0NQVUNMS0NSX1BPUlRMICAoMHgwMCtNMzJSX0NQTV9PRkZTRVQpCisjZGVmaW5lIE0zMlJfQ1BNX0NMS01PRF9QT1JUTCAgICAoMHgwNCtNMzJSX0NQTV9PRkZTRVQpCisjZGVmaW5lIE0zMlJfQ1BNX1BMTENSX1BPUlRMICAgICAoMHgwOCtNMzJSX0NQTV9PRkZTRVQpCisKKy8qCisgKiBCbG9jayBTRUxlY3QgQ29udHJvbGxlciByZWdpc3RlcnMuCisgKi8KKyNkZWZpbmUgTTMyUl9CU0VMQ19PRkZTRVQgICgweDAwMEY1MDAwK00zMlJfU0ZSX09GRlNFVCkKKworI2RlZmluZSBNMzJSX0JTRUwwX0NSMF9QT1JUTCAgKDB4MDAwK00zMlJfQlNFTENfT0ZGU0VUKQorI2RlZmluZSBNMzJSX0JTRUwwX0NSMV9QT1JUTCAgKDB4MDA0K00zMlJfQlNFTENfT0ZGU0VUKQorI2RlZmluZSBNMzJSX0JTRUwxX0NSMF9QT1JUTCAgKDB4MTAwK00zMlJfQlNFTENfT0ZGU0VUKQorI2RlZmluZSBNMzJSX0JTRUwxX0NSMV9QT1JUTCAgKDB4MTA0K00zMlJfQlNFTENfT0ZGU0VUKQorI2RlZmluZSBNMzJSX0JTRUwyX0NSMF9QT1JUTCAgKDB4MjAwK00zMlJfQlNFTENfT0ZGU0VUKQorI2RlZmluZSBNMzJSX0JTRUwyX0NSMV9QT1JUTCAgKDB4MjA0K00zMlJfQlNFTENfT0ZGU0VUKQorI2RlZmluZSBNMzJSX0JTRUwzX0NSMF9QT1JUTCAgKDB4MzAwK00zMlJfQlNFTENfT0ZGU0VUKQorI2RlZmluZSBNMzJSX0JTRUwzX0NSMV9QT1JUTCAgKDB4MzA0K00zMlJfQlNFTENfT0ZGU0VUKQorI2RlZmluZSBNMzJSX0JTRUw0X0NSMF9QT1JUTCAgKDB4NDAwK00zMlJfQlNFTENfT0ZGU0VUKQorI2RlZmluZSBNMzJSX0JTRUw0X0NSMV9QT1JUTCAgKDB4NDA0K00zMlJfQlNFTENfT0ZGU0VUKQorI2RlZmluZSBNMzJSX0JTRUw1X0NSMF9QT1JUTCAgKDB4NTAwK00zMlJfQlNFTENfT0ZGU0VUKQorI2RlZmluZSBNMzJSX0JTRUw1X0NSMV9QT1JUTCAgKDB4NTA0K00zMlJfQlNFTENfT0ZGU0VUKQorI2RlZmluZSBNMzJSX0JTRUw2X0NSMF9QT1JUTCAgKDB4NjAwK00zMlJfQlNFTENfT0ZGU0VUKQorI2RlZmluZSBNMzJSX0JTRUw2X0NSMV9QT1JUTCAgKDB4NjA0K00zMlJfQlNFTENfT0ZGU0VUKQorI2RlZmluZSBNMzJSX0JTRUw3X0NSMF9QT1JUTCAgKDB4NzAwK00zMlJfQlNFTENfT0ZGU0VUKQorI2RlZmluZSBNMzJSX0JTRUw3X0NSMV9QT1JUTCAgKDB4NzA0K00zMlJfQlNFTENfT0ZGU0VUKQorCisvKgorICogTXVsdGkgRnVuY3Rpb24gVGltZXIgcmVnaXN0ZXJzLgorICovCisjZGVmaW5lIE0zMlJfTUZUX09GRlNFVCAgICAgICAgKDB4MDAwRkMwMDArTTMyUl9TRlJfT0ZGU0VUKQorCisjZGVmaW5lIE0zMlJfTUZUQ1JfUE9SVEwgICAgICAgKDB4MDAwK00zMlJfTUZUX09GRlNFVCkgIC8qIE1GVCBjb250cm9sICovCisjZGVmaW5lIE0zMlJfTUZUUlBSX1BPUlRMICAgICAgKDB4MDA0K00zMlJfTUZUX09GRlNFVCkgIC8qIE1GVCByZWFsIHBvcnQgKi8KKworI2RlZmluZSBNMzJSX01GVDBfT0ZGU0VUICAgICAgICgweDEwMCtNMzJSX01GVF9PRkZTRVQpCisjZGVmaW5lIE0zMlJfTUZUME1PRF9QT1JUTCAgICAgKDB4MDArTTMyUl9NRlQwX09GRlNFVCkgIC8qIE1GVDAgbW9kZSAqLworI2RlZmluZSBNMzJSX01GVDBCT1NfUE9SVEwgICAgICgweDA0K00zMlJfTUZUMF9PRkZTRVQpICAvKiBNRlQwIGItcG9ydCBvdXRwdXQgc3RhdHVzICovCisjZGVmaW5lIE0zMlJfTUZUMENVVF9QT1JUTCAgICAgKDB4MDgrTTMyUl9NRlQwX09GRlNFVCkgIC8qIE1GVDAgY291bnQgKi8KKyNkZWZpbmUgTTMyUl9NRlQwUkxEX1BPUlRMICAgICAoMHgwQytNMzJSX01GVDBfT0ZGU0VUKSAgLyogTUZUMCByZWxvYWQgKi8KKyNkZWZpbmUgTTMyUl9NRlQwQ01QUkxEX1BPUlRMICAoMHgxMCtNMzJSX01GVDBfT0ZGU0VUKSAgLyogTUZUMCBjb21wYXJlIHJlbG9hZCAqLworCisjZGVmaW5lIE0zMlJfTUZUMV9PRkZTRVQgICAgICAgKDB4MjAwK00zMlJfTUZUX09GRlNFVCkKKyNkZWZpbmUgTTMyUl9NRlQxTU9EX1BPUlRMICAgICAoMHgwMCtNMzJSX01GVDFfT0ZGU0VUKSAgLyogTUZUMSBtb2RlICovCisjZGVmaW5lIE0zMlJfTUZUMUJPU19QT1JUTCAgICAgKDB4MDQrTTMyUl9NRlQxX09GRlNFVCkgIC8qIE1GVDEgYi1wb3J0IG91dHB1dCBzdGF0dXMgKi8KKyNkZWZpbmUgTTMyUl9NRlQxQ1VUX1BPUlRMICAgICAoMHgwOCtNMzJSX01GVDFfT0ZGU0VUKSAgLyogTUZUMSBjb3VudCAqLworI2RlZmluZSBNMzJSX01GVDFSTERfUE9SVEwgICAgICgweDBDK00zMlJfTUZUMV9PRkZTRVQpICAvKiBNRlQxIHJlbG9hZCAqLworI2RlZmluZSBNMzJSX01GVDFDTVBSTERfUE9SVEwgICgweDEwK00zMlJfTUZUMV9PRkZTRVQpICAvKiBNRlQxIGNvbXBhcmUgcmVsb2FkICovCisKKyNkZWZpbmUgTTMyUl9NRlQyX09GRlNFVCAgICAgICAoMHgzMDArTTMyUl9NRlRfT0ZGU0VUKQorI2RlZmluZSBNMzJSX01GVDJNT0RfUE9SVEwgICAgICgweDAwK00zMlJfTUZUMl9PRkZTRVQpICAvKiBNRlQyIG1vZGUgKi8KKyNkZWZpbmUgTTMyUl9NRlQyQk9TX1BPUlRMICAgICAoMHgwNCtNMzJSX01GVDJfT0ZGU0VUKSAgLyogTUZUMiBiLXBvcnQgb3V0cHV0IHN0YXR1cyAqLworI2RlZmluZSBNMzJSX01GVDJDVVRfUE9SVEwgICAgICgweDA4K00zMlJfTUZUMl9PRkZTRVQpICAvKiBNRlQyIGNvdW50ICovCisjZGVmaW5lIE0zMlJfTUZUMlJMRF9QT1JUTCAgICAgKDB4MEMrTTMyUl9NRlQyX09GRlNFVCkgIC8qIE1GVDIgcmVsb2FkICovCisjZGVmaW5lIE0zMlJfTUZUMkNNUFJMRF9QT1JUTCAgKDB4MTArTTMyUl9NRlQyX09GRlNFVCkgIC8qIE1GVDIgY29tcGFyZSByZWxvYWQgKi8KKworI2RlZmluZSBNMzJSX01GVDNfT0ZGU0VUICAgICAgICgweDQwMCtNMzJSX01GVF9PRkZTRVQpCisjZGVmaW5lIE0zMlJfTUZUM01PRF9QT1JUTCAgICAgKDB4MDArTTMyUl9NRlQzX09GRlNFVCkgIC8qIE1GVDMgbW9kZSAqLworI2RlZmluZSBNMzJSX01GVDNCT1NfUE9SVEwgICAgICgweDA0K00zMlJfTUZUM19PRkZTRVQpICAvKiBNRlQzIGItcG9ydCBvdXRwdXQgc3RhdHVzICovCisjZGVmaW5lIE0zMlJfTUZUM0NVVF9QT1JUTCAgICAgKDB4MDgrTTMyUl9NRlQzX09GRlNFVCkgIC8qIE1GVDMgY291bnQgKi8KKyNkZWZpbmUgTTMyUl9NRlQzUkxEX1BPUlRMICAgICAoMHgwQytNMzJSX01GVDNfT0ZGU0VUKSAgLyogTUZUMyByZWxvYWQgKi8KKyNkZWZpbmUgTTMyUl9NRlQzQ01QUkxEX1BPUlRMICAoMHgxMCtNMzJSX01GVDNfT0ZGU0VUKSAgLyogTUZUMyBjb21wYXJlIHJlbG9hZCAqLworCisjZGVmaW5lIE0zMlJfTUZUNF9PRkZTRVQgICAgICAgKDB4NTAwK00zMlJfTUZUX09GRlNFVCkKKyNkZWZpbmUgTTMyUl9NRlQ0TU9EX1BPUlRMICAgICAoMHgwMCtNMzJSX01GVDRfT0ZGU0VUKSAgLyogTUZUNCBtb2RlICovCisjZGVmaW5lIE0zMlJfTUZUNEJPU19QT1JUTCAgICAgKDB4MDQrTTMyUl9NRlQ0X09GRlNFVCkgIC8qIE1GVDQgYi1wb3J0IG91dHB1dCBzdGF0dXMgKi8KKyNkZWZpbmUgTTMyUl9NRlQ0Q1VUX1BPUlRMICAgICAoMHgwOCtNMzJSX01GVDRfT0ZGU0VUKSAgLyogTUZUNCBjb3VudCAqLworI2RlZmluZSBNMzJSX01GVDRSTERfUE9SVEwgICAgICgweDBDK00zMlJfTUZUNF9PRkZTRVQpICAvKiBNRlQ0IHJlbG9hZCAqLworI2RlZmluZSBNMzJSX01GVDRDTVBSTERfUE9SVEwgICgweDEwK00zMlJfTUZUNF9PRkZTRVQpICAvKiBNRlQ0IGNvbXBhcmUgcmVsb2FkICovCisKKyNkZWZpbmUgTTMyUl9NRlQ1X09GRlNFVCAgICAgICAoMHg2MDArTTMyUl9NRlRfT0ZGU0VUKQorI2RlZmluZSBNMzJSX01GVDVNT0RfUE9SVEwgICAgICgweDAwK00zMlJfTUZUNV9PRkZTRVQpICAvKiBNRlQ0IG1vZGUgKi8KKyNkZWZpbmUgTTMyUl9NRlQ1Qk9TX1BPUlRMICAgICAoMHgwNCtNMzJSX01GVDVfT0ZGU0VUKSAgLyogTUZUNCBiLXBvcnQgb3V0cHV0IHN0YXR1cyAqLworI2RlZmluZSBNMzJSX01GVDVDVVRfUE9SVEwgICAgICgweDA4K00zMlJfTUZUNV9PRkZTRVQpICAvKiBNRlQ0IGNvdW50ICovCisjZGVmaW5lIE0zMlJfTUZUNVJMRF9QT1JUTCAgICAgKDB4MEMrTTMyUl9NRlQ1X09GRlNFVCkgIC8qIE1GVDQgcmVsb2FkICovCisjZGVmaW5lIE0zMlJfTUZUNUNNUFJMRF9QT1JUTCAgKDB4MTArTTMyUl9NRlQ1X09GRlNFVCkgIC8qIE1GVDQgY29tcGFyZSByZWxvYWQgKi8KKworI2RlZmluZSBNMzJSX01GVENSX01GVDBNU0sgICgxVUw8PDE1KSAgLyogYjE2ICovCisjZGVmaW5lIE0zMlJfTUZUQ1JfTUZUMU1TSyAgKDFVTDw8MTQpICAvKiBiMTcgKi8KKyNkZWZpbmUgTTMyUl9NRlRDUl9NRlQyTVNLICAoMVVMPDwxMykgIC8qIGIxOCAqLworI2RlZmluZSBNMzJSX01GVENSX01GVDNNU0sgICgxVUw8PDEyKSAgLyogYjE5ICovCisjZGVmaW5lIE0zMlJfTUZUQ1JfTUZUNE1TSyAgKDFVTDw8MTEpICAvKiBiMjAgKi8KKyNkZWZpbmUgTTMyUl9NRlRDUl9NRlQ1TVNLICAoMVVMPDwxMCkgIC8qIGIyMSAqLworI2RlZmluZSBNMzJSX01GVENSX01GVDBFTiAgICgxVUw8PDcpICAgLyogYjI0ICovCisjZGVmaW5lIE0zMlJfTUZUQ1JfTUZUMUVOICAgKDFVTDw8NikgICAvKiBiMjUgKi8KKyNkZWZpbmUgTTMyUl9NRlRDUl9NRlQyRU4gICAoMVVMPDw1KSAgIC8qIGIyNiAqLworI2RlZmluZSBNMzJSX01GVENSX01GVDNFTiAgICgxVUw8PDQpICAgLyogYjI3ICovCisjZGVmaW5lIE0zMlJfTUZUQ1JfTUZUNEVOICAgKDFVTDw8MykgICAvKiBiMjggKi8KKyNkZWZpbmUgTTMyUl9NRlRDUl9NRlQ1RU4gICAoMVVMPDwyKSAgIC8qIGIyOSAqLworCisjZGVmaW5lIE0zMlJfTUZUTU9EX0NDX01BU0sgICAgKDFVTDw8MTUpICAvKiBiMTYgKi8KKyNkZWZpbmUgTTMyUl9NRlRNT0RfVENDUiAgICAgICAoMVVMPDwxMykgIC8qIGIxOCAqLworI2RlZmluZSBNMzJSX01GVE1PRF9HVFNFTDAwMCAgICgwVUw8PDgpICAgLyogYjIxLTIzIDogMDAwICovCisjZGVmaW5lIE0zMlJfTUZUTU9EX0dUU0VMMDAxICAgKDFVTDw8OCkgICAvKiBiMjEtMjMgOiAwMDEgKi8KKyNkZWZpbmUgTTMyUl9NRlRNT0RfR1RTRUwwMTAgICAoMlVMPDw4KSAgIC8qIGIyMS0yMyA6IDAxMCAqLworI2RlZmluZSBNMzJSX01GVE1PRF9HVFNFTDAxMSAgICgzVUw8PDgpICAgLyogYjIxLTIzIDogMDExICovCisjZGVmaW5lIE0zMlJfTUZUTU9EX0dUU0VMMTEwICAgKDZVTDw8OCkgICAvKiBiMjEtMjMgOiAxMTAgKi8KKyNkZWZpbmUgTTMyUl9NRlRNT0RfR1RTRUwxMTEgICAoN1VMPDw4KSAgIC8qIGIyMS0yMyA6IDExMSAqLworI2RlZmluZSBNMzJSX01GVE1PRF9DTVNFTCAgICAgICgxVUw8PDMpICAgLyogYjI4ICovCisjZGVmaW5lIE0zMlJfTUZUTU9EX0NTU0VMMDAwICAgKDBVTDw8MCkgICAvKiBiMjktYjMxIDogMDAwICovCisjZGVmaW5lIE0zMlJfTUZUTU9EX0NTU0VMMDAxICAgKDFVTDw8MCkgICAvKiBiMjktYjMxIDogMDAxICovCisjZGVmaW5lIE0zMlJfTUZUTU9EX0NTU0VMMDEwICAgKDJVTDw8MCkgICAvKiBiMjktYjMxIDogMDEwICovCisjZGVmaW5lIE0zMlJfTUZUTU9EX0NTU0VMMDExICAgKDNVTDw8MCkgICAvKiBiMjktYjMxIDogMDExICovCisjZGVmaW5lIE0zMlJfTUZUTU9EX0NTU0VMMTAwICAgKDRVTDw8MCkgICAvKiBiMjktYjMxIDogMTAwICovCisjZGVmaW5lIE0zMlJfTUZUTU9EX0NTU0VMMTEwICAgKDZVTDw8MCkgICAvKiBiMjktYjMxIDogMTEwICovCisKKy8qCisgKiBTZXJpYWwgSS9PIHJlZ2lzdGVycy4KKyAqLworI2RlZmluZSBNMzJSX1NJT19PRkZTRVQgICgweDAwMEZEMDAwK00zMlJfU0ZSX09GRlNFVCkKKworI2RlZmluZSBNMzJSX1NJTzBfQ1JfUE9SVEwgICAgICgweDAwMCtNMzJSX1NJT19PRkZTRVQpCisjZGVmaW5lIE0zMlJfU0lPMF9NT0QwX1BPUlRMICAgKDB4MDA0K00zMlJfU0lPX09GRlNFVCkKKyNkZWZpbmUgTTMyUl9TSU8wX01PRDFfUE9SVEwgICAoMHgwMDgrTTMyUl9TSU9fT0ZGU0VUKQorI2RlZmluZSBNMzJSX1NJTzBfU1RTX1BPUlRMICAgICgweDAwQytNMzJSX1NJT19PRkZTRVQpCisjZGVmaW5lIE0zMlJfU0lPMF9UUkNSX1BPUlRMICAgKDB4MDEwK00zMlJfU0lPX09GRlNFVCkKKyNkZWZpbmUgTTMyUl9TSU8wX0JBVVJfUE9SVEwgICAoMHgwMTQrTTMyUl9TSU9fT0ZGU0VUKQorI2RlZmluZSBNMzJSX1NJTzBfUkJBVVJfUE9SVEwgICgweDAxOCtNMzJSX1NJT19PRkZTRVQpCisjZGVmaW5lIE0zMlJfU0lPMF9UWEJfUE9SVEwgICAgKDB4MDFDK00zMlJfU0lPX09GRlNFVCkKKyNkZWZpbmUgTTMyUl9TSU8wX1JYQl9QT1JUTCAgICAoMHgwMjArTTMyUl9TSU9fT0ZGU0VUKQorCisvKgorICogSW50ZXJydXB0IENvbnRyb2wgVW5pdCByZWdpc3RlcnMuCisgKi8KKyNkZWZpbmUgTTMyUl9JQ1VfT0ZGU0VUICAoMHgwMDBGRjAwMCtNMzJSX1NGUl9PRkZTRVQpCisKKyNkZWZpbmUgTTMyUl9JQ1VfSVNUU19QT1JUTCAgICAgKDB4MDA0K00zMlJfSUNVX09GRlNFVCkKKyNkZWZpbmUgTTMyUl9JQ1VfSVJFUTBfUE9SVEwgICAgKDB4MDA4K00zMlJfSUNVX09GRlNFVCkKKyNkZWZpbmUgTTMyUl9JQ1VfSVJFUTFfUE9SVEwgICAgKDB4MDBDK00zMlJfSUNVX09GRlNFVCkKKyNkZWZpbmUgTTMyUl9JQ1VfU0JJQ1JfUE9SVEwgICAgKDB4MDE4K00zMlJfSUNVX09GRlNFVCkKKyNkZWZpbmUgTTMyUl9JQ1VfSU1BU0tfUE9SVEwgICAgKDB4MDFDK00zMlJfSUNVX09GRlNFVCkKKyNkZWZpbmUgTTMyUl9JQ1VfQ1IxX1BPUlRMICAgICAgKDB4MjAwK00zMlJfSUNVX09GRlNFVCkgIC8qIElOVDAgKi8KKyNkZWZpbmUgTTMyUl9JQ1VfQ1IyX1BPUlRMICAgICAgKDB4MjA0K00zMlJfSUNVX09GRlNFVCkgIC8qIElOVDEgKi8KKyNkZWZpbmUgTTMyUl9JQ1VfQ1IzX1BPUlRMICAgICAgKDB4MjA4K00zMlJfSUNVX09GRlNFVCkgIC8qIElOVDIgKi8KKyNkZWZpbmUgTTMyUl9JQ1VfQ1I0X1BPUlRMICAgICAgKDB4MjBDK00zMlJfSUNVX09GRlNFVCkgIC8qIElOVDMgKi8KKyNkZWZpbmUgTTMyUl9JQ1VfQ1I1X1BPUlRMICAgICAgKDB4MjEwK00zMlJfSUNVX09GRlNFVCkgIC8qIElOVDQgKi8KKyNkZWZpbmUgTTMyUl9JQ1VfQ1I2X1BPUlRMICAgICAgKDB4MjE0K00zMlJfSUNVX09GRlNFVCkgIC8qIElOVDUgKi8KKyNkZWZpbmUgTTMyUl9JQ1VfQ1I3X1BPUlRMICAgICAgKDB4MjE4K00zMlJfSUNVX09GRlNFVCkgIC8qIElOVDYgKi8KKyNkZWZpbmUgTTMyUl9JQ1VfQ1I4X1BPUlRMICAgICAgKDB4MjE4K00zMlJfSUNVX09GRlNFVCkgIC8qIElOVDcgKi8KKyNkZWZpbmUgTTMyUl9JQ1VfQ1IzMl9QT1JUTCAgICAgKDB4MjdDK00zMlJfSUNVX09GRlNFVCkgIC8qIFNJTzAgUlggKi8KKyNkZWZpbmUgTTMyUl9JQ1VfQ1IzM19QT1JUTCAgICAgKDB4MjgwK00zMlJfSUNVX09GRlNFVCkgIC8qIFNJTzAgVFggKi8KKyNkZWZpbmUgTTMyUl9JQ1VfQ1I0MF9QT1JUTCAgICAgKDB4MjlDK00zMlJfSUNVX09GRlNFVCkgIC8qIERNQUMwICovCisjZGVmaW5lIE0zMlJfSUNVX0NSNDFfUE9SVEwgICAgICgweDJBMCtNMzJSX0lDVV9PRkZTRVQpICAvKiBETUFDMSAqLworI2RlZmluZSBNMzJSX0lDVV9DUjQ4X1BPUlRMICAgICAoMHgyQkMrTTMyUl9JQ1VfT0ZGU0VUKSAgLyogTUZUMCAqLworI2RlZmluZSBNMzJSX0lDVV9DUjQ5X1BPUlRMICAgICAoMHgyQzArTTMyUl9JQ1VfT0ZGU0VUKSAgLyogTUZUMSAqLworI2RlZmluZSBNMzJSX0lDVV9DUjUwX1BPUlRMICAgICAoMHgyQzQrTTMyUl9JQ1VfT0ZGU0VUKSAgLyogTUZUMiAqLworI2RlZmluZSBNMzJSX0lDVV9DUjUxX1BPUlRMICAgICAoMHgyQzgrTTMyUl9JQ1VfT0ZGU0VUKSAgLyogTUZUMyAqLworI2RlZmluZSBNMzJSX0lDVV9DUjUyX1BPUlRMICAgICAoMHgyQ0MrTTMyUl9JQ1VfT0ZGU0VUKSAgLyogTUZUNCAqLworI2RlZmluZSBNMzJSX0lDVV9DUjUzX1BPUlRMICAgICAoMHgyRDArTTMyUl9JQ1VfT0ZGU0VUKSAgLyogTUZUNSAqLworI2RlZmluZSBNMzJSX0lDVV9JUElDUjBfUE9SVEwgICAoMHgyREMrTTMyUl9JQ1VfT0ZGU0VUKSAgLyogSVBJMCAqLworI2RlZmluZSBNMzJSX0lDVV9JUElDUjFfUE9SVEwgICAoMHgyRTArTTMyUl9JQ1VfT0ZGU0VUKSAgLyogSVBJMSAqLworI2RlZmluZSBNMzJSX0lDVV9JUElDUjJfUE9SVEwgICAoMHgyRTQrTTMyUl9JQ1VfT0ZGU0VUKSAgLyogSVBJMiAqLworI2RlZmluZSBNMzJSX0lDVV9JUElDUjNfUE9SVEwgICAoMHgyRTgrTTMyUl9JQ1VfT0ZGU0VUKSAgLyogSVBJMyAqLworI2RlZmluZSBNMzJSX0lDVV9JUElDUjRfUE9SVEwgICAoMHgyRUMrTTMyUl9JQ1VfT0ZGU0VUKSAgLyogSVBJNCAqLworI2RlZmluZSBNMzJSX0lDVV9JUElDUjVfUE9SVEwgICAoMHgyRjArTTMyUl9JQ1VfT0ZGU0VUKSAgLyogSVBJNSAqLworI2RlZmluZSBNMzJSX0lDVV9JUElDUjZfUE9SVEwgICAoMHgyRjQrTTMyUl9JQ1VfT0ZGU0VUKSAgLyogSVBJNiAqLworI2RlZmluZSBNMzJSX0lDVV9JUElDUjdfUE9SVEwgICAoMHgyRkMrTTMyUl9JQ1VfT0ZGU0VUKSAgLyogSVBJNyAqLworCisjZGVmaW5lIE0zMlJfSUNVSVNUU19WRUNCKHZhbCkgICgodmFsPj4yOCkgJiAweEYpCisjZGVmaW5lIE0zMlJfSUNVSVNUU19JU04odmFsKSAgICgodmFsPj4yMikgJiAweDNGKQorI2RlZmluZSBNMzJSX0lDVUlTVFNfUElNTCh2YWwpICAoKHZhbD4+MTYpICYgMHg3KQorCisjZGVmaW5lIE0zMlJfSUNVSU1BU0tfSU1TSzAgICgwVUw8PDE2KSAgLyogYjEzLWIxNTogRGlzYWJsZSBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgTTMyUl9JQ1VJTUFTS19JTVNLMSAgKDFVTDw8MTYpICAvKiBiMTMtYjE1OiBFbmFibGUgbGV2ZWwgMCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgTTMyUl9JQ1VJTUFTS19JTVNLMiAgKDJVTDw8MTYpICAvKiBiMTMtYjE1OiBFbmFibGUgbGV2ZWwgMCwxIGludGVycnVwdCAqLworI2RlZmluZSBNMzJSX0lDVUlNQVNLX0lNU0szICAoM1VMPDwxNikgIC8qIGIxMy1iMTU6IEVuYWJsZSBsZXZlbCAwLTIgaW50ZXJydXB0ICovCisjZGVmaW5lIE0zMlJfSUNVSU1BU0tfSU1TSzQgICg0VUw8PDE2KSAgLyogYjEzLWIxNTogRW5hYmxlIGxldmVsIDAtMyBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgTTMyUl9JQ1VJTUFTS19JTVNLNSAgKDVVTDw8MTYpICAvKiBiMTMtYjE1OiBFbmFibGUgbGV2ZWwgMC00IGludGVycnVwdCAqLworI2RlZmluZSBNMzJSX0lDVUlNQVNLX0lNU0s2ICAoNlVMPDwxNikgIC8qIGIxMy1iMTU6IEVuYWJsZSBsZXZlbCAwLTUgaW50ZXJydXB0ICovCisjZGVmaW5lIE0zMlJfSUNVSU1BU0tfSU1TSzcgICg3VUw8PDE2KSAgLyogYjEzLWIxNTogRW5hYmxlIGxldmVsIDAtNiBpbnRlcnJ1cHQgKi8KKworI2RlZmluZSBNMzJSX0lDVUNSX0lFTiAgICAgICgxVUw8PDEyKSAgLyogYjE5OiBJbnRlcnJ1cHQgZW5hYmxlICovCisjZGVmaW5lIE0zMlJfSUNVQ1JfSVJRICAgICAgKDFVTDw8OCkgICAvKiBiMjM6IEludGVycnVwdCByZXF1ZXN0ICovCisjZGVmaW5lIE0zMlJfSUNVQ1JfSVNNT0QwMCAgKDBVTDw8NCkgICAvKiBiMjYtYjI3OiBJbnRlcnJ1cHQgc2Vuc2UgbW9kZSBFZGdlIEh0b0wgKi8KKyNkZWZpbmUgTTMyUl9JQ1VDUl9JU01PRDAxICAoMVVMPDw0KSAgIC8qIGIyNi1iMjc6IEludGVycnVwdCBzZW5zZSBtb2RlIExldmVsIEwgKi8KKyNkZWZpbmUgTTMyUl9JQ1VDUl9JU01PRDEwICAoMlVMPDw0KSAgIC8qIGIyNi1iMjc6IEludGVycnVwdCBzZW5zZSBtb2RlIEVkZ2UgTHRvSCovCisjZGVmaW5lIE0zMlJfSUNVQ1JfSVNNT0QxMSAgKDNVTDw8NCkgICAvKiBiMjYtYjI3OiBJbnRlcnJ1cHQgc2Vuc2UgbW9kZSBMZXZlbCBIICovCisjZGVmaW5lIE0zMlJfSUNVQ1JfSUxFVkVMMCAgKDBVTDw8MCkgICAvKiBiMjktYjMxOiBJbnRlcnJ1cHQgcHJpb3JpdHkgbGV2ZWwgMCAqLworI2RlZmluZSBNMzJSX0lDVUNSX0lMRVZFTDEgICgxVUw8PDApICAgLyogYjI5LWIzMTogSW50ZXJydXB0IHByaW9yaXR5IGxldmVsIDEgKi8KKyNkZWZpbmUgTTMyUl9JQ1VDUl9JTEVWRUwyICAoMlVMPDwwKSAgIC8qIGIyOS1iMzE6IEludGVycnVwdCBwcmlvcml0eSBsZXZlbCAyICovCisjZGVmaW5lIE0zMlJfSUNVQ1JfSUxFVkVMMyAgKDNVTDw8MCkgICAvKiBiMjktYjMxOiBJbnRlcnJ1cHQgcHJpb3JpdHkgbGV2ZWwgMyAqLworI2RlZmluZSBNMzJSX0lDVUNSX0lMRVZFTDQgICg0VUw8PDApICAgLyogYjI5LWIzMTogSW50ZXJydXB0IHByaW9yaXR5IGxldmVsIDQgKi8KKyNkZWZpbmUgTTMyUl9JQ1VDUl9JTEVWRUw1ICAoNVVMPDwwKSAgIC8qIGIyOS1iMzE6IEludGVycnVwdCBwcmlvcml0eSBsZXZlbCA1ICovCisjZGVmaW5lIE0zMlJfSUNVQ1JfSUxFVkVMNiAgKDZVTDw8MCkgICAvKiBiMjktYjMxOiBJbnRlcnJ1cHQgcHJpb3JpdHkgbGV2ZWwgNiAqLworI2RlZmluZSBNMzJSX0lDVUNSX0lMRVZFTDcgICg3VUw8PDApICAgLyogYjI5LWIzMTogRGlzYWJsZSBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgTTMyUl9JQ1VDUl9JTEVWRUxfTUFTSyAgKDdVTCkKKworI2RlZmluZSBNMzJSX0lSUV9JTlQwICAgICgxKSAgIC8qIElOVDAgKi8KKyNkZWZpbmUgTTMyUl9JUlFfSU5UMSAgICAoMikgICAvKiBJTlQxICovCisjZGVmaW5lIE0zMlJfSVJRX0lOVDIgICAgKDMpICAgLyogSU5UMiAqLworI2RlZmluZSBNMzJSX0lSUV9JTlQzICAgICg0KSAgIC8qIElOVDMgKi8KKyNkZWZpbmUgTTMyUl9JUlFfSU5UNCAgICAoNSkgICAvKiBJTlQ0ICovCisjZGVmaW5lIE0zMlJfSVJRX0lOVDUgICAgKDYpICAgLyogSU5UNSAqLworI2RlZmluZSBNMzJSX0lSUV9JTlQ2ICAgICg3KSAgIC8qIElOVDYgKi8KKyNkZWZpbmUgTTMyUl9JUlFfSU5UNyAgICAoOCkgICAvKiBJTlQ3ICovCisjZGVmaW5lIE0zMlJfSVJRX01GVDAgICAgKDE2KSAgLyogTUZUMCAqLworI2RlZmluZSBNMzJSX0lSUV9NRlQxICAgICgxNykgIC8qIE1GVDEgKi8KKyNkZWZpbmUgTTMyUl9JUlFfTUZUMiAgICAoMTgpICAvKiBNRlQyICovCisjZGVmaW5lIE0zMlJfSVJRX01GVDMgICAgKDE5KSAgLyogTUZUMyAqLworI2RlZmluZSBNMzJSX0lSUV9NRlQ0ICAgICgyMCkgIC8qIE1GVDQgKi8KKyNkZWZpbmUgTTMyUl9JUlFfTUZUNSAgICAoMjEpICAvKiBNRlQ1ICovCisjZGVmaW5lIE0zMlJfSVJRX0RNQUMwICAgKDMyKSAgLyogRE1BQzAgKi8KKyNkZWZpbmUgTTMyUl9JUlFfRE1BQzEgICAoMzMpICAvKiBETUFDMSAqLworI2RlZmluZSBNMzJSX0lSUV9TSU8wX1IgICg0OCkgIC8qIFNJTzAgcmVjZWl2ZSAqLworI2RlZmluZSBNMzJSX0lSUV9TSU8wX1MgICg0OSkgIC8qIFNJTzAgc2VuZCAgICAqLworI2RlZmluZSBNMzJSX0lSUV9TSU8xX1IgICg1MCkgIC8qIFNJTzEgc2VuZCAgICAqLworI2RlZmluZSBNMzJSX0lSUV9TSU8xX1MgICg1MSkgIC8qIFNJTzEgcmVjZWl2ZSAqLworI2RlZmluZSBNMzJSX0lSUV9JUEkwICAgICg1NikgIC8qIElQSTAgKi8KKyNkZWZpbmUgTTMyUl9JUlFfSVBJMSAgICAoNTcpICAvKiBJUEkxICovCisjZGVmaW5lIE0zMlJfSVJRX0lQSTIgICAgKDU4KSAgLyogSVBJMiAqLworI2RlZmluZSBNMzJSX0lSUV9JUEkzICAgICg1OSkgIC8qIElQSTMgKi8KKyNkZWZpbmUgTTMyUl9JUlFfSVBJNCAgICAoNjApICAvKiBJUEk0ICovCisjZGVmaW5lIE0zMlJfSVJRX0lQSTUgICAgKDYxKSAgLyogSVBJNSAqLworI2RlZmluZSBNMzJSX0lSUV9JUEk2ICAgICg2MikgIC8qIElQSTYgKi8KKyNkZWZpbmUgTTMyUl9JUlFfSVBJNyAgICAoNjMpICAvKiBJUEk3ICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSoKKyAqIENQVQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworI2RlZmluZSBNMzJSX0NQVUlEX1BPUlRMICAgKDB4RkZGRkZGRTApCisjZGVmaW5lIE0zMlJfTUNJQ0FSX1BPUlRMICAoMHhGRkZGRkZGMCkKKyNkZWZpbmUgTTMyUl9NQ0RDQVJfUE9SVEwgICgweEZGRkZGRkY0KQorI2RlZmluZSBNMzJSX01DQ1JfUE9SVEwgICAgKDB4RkZGRkZGRkMpCisKKyNlbmRpZiAgLyogX0FTTV9NMzJSX00zMlJfTVBfRlBHQV8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvbWFwcGkyL21hcHBpMl9wbGQuaCBiL2luY2x1ZGUvYXNtLW0zMnIvbWFwcGkyL21hcHBpMl9wbGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWRjZGQxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTMyci9tYXBwaTIvbWFwcGkyX3BsZC5oCkBAIC0wLDAgKzEsMTUxIEBACisvKgorICogaW5jbHVkZS9hc20vbWFwcGkyL21hcHBpMl9wbGQuaAorICoKKyAqIERlZmluaXRpb25zIGZvciBFeHRlbmRlZCBJTyBMb2dpYyBvbiBNQVBQSTIgYm9hcmQuCisgKiAgYmFzZWQgb24gbTMyNzAwdXRfcGxkLmggYnkKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mCisgKiB0aGlzIGFyY2hpdmUgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworI2lmbmRlZiBfTUFQUEkyX1BMRF9ICisjZGVmaW5lIF9NQVBQSTJfUExEX0gKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKy8qIEZJWE1FOgorICogU29tZSBDIGZ1bmN0aW9ucyB1c2Ugbm9uLWNhY2hlIGFkZHJlc3MsIHNvIGNhbid0IGRlZmluZSBub24tY2FjaGUgYWRkcmVzcy4KKyAqLworI2RlZmluZSBQTERfQkFTRQkJKDB4MTBjMDAwMDAgLyogKyBOT05DQUNIRV9PRkZTRVQgKi8pCisjZGVmaW5lIF9fcmVnOAkJCSh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopCisjZGVmaW5lIF9fcmVnMTYJCQkodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikKKyNkZWZpbmUgX19yZWczMgkJCSh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikKKyNlbHNlCisjZGVmaW5lIFBMRF9CQVNFCQkoMHgxMGMwMDAwMCArIE5PTkNBQ0hFX09GRlNFVCkKKyNkZWZpbmUgX19yZWc4CisjZGVmaW5lIF9fcmVnMTYKKyNkZWZpbmUgX19yZWczMgorI2VuZGlmCS8qIF9fQVNTRU1CTFlfXyAqLworCisvKiBDRkMgKi8KKyNkZWZpbmUJUExEX0NGUlNUQ1IJCV9fcmVnMTYoUExEX0JBU0UgKyAweDAwMDApCisjZGVmaW5lIFBMRF9DRlNUUwkJX19yZWcxNihQTERfQkFTRSArIDB4MDAwMikKKyNkZWZpbmUgUExEX0NGSU1BU0sJCV9fcmVnMTYoUExEX0JBU0UgKyAweDAwMDQpCisjZGVmaW5lIFBMRF9DRkJVRkNSCQlfX3JlZzE2KFBMRF9CQVNFICsgMHgwMDA2KQorI2RlZmluZSBQTERfQ0ZDUjAJCV9fcmVnMTYoUExEX0JBU0UgKyAweDAwMGEpCisjZGVmaW5lIFBMRF9DRkNSMQkJX19yZWcxNihQTERfQkFTRSArIDB4MDAwYykKKworLyogTU1DICovCisjZGVmaW5lIFBMRF9NTUNDUgkJX19yZWcxNihQTERfQkFTRSArIDB4NDAwMCkKKyNkZWZpbmUgUExEX01NQ01PRAkJX19yZWcxNihQTERfQkFTRSArIDB4NDAwMikKKyNkZWZpbmUgUExEX01NQ1NUUwkJX19yZWcxNihQTERfQkFTRSArIDB4NDAwNikKKyNkZWZpbmUgUExEX01NQ0JBVVIJCV9fcmVnMTYoUExEX0JBU0UgKyAweDQwMGEpCisjZGVmaW5lIFBMRF9NTUNDTURCQ1VUCQlfX3JlZzE2KFBMRF9CQVNFICsgMHg0MDBjKQorI2RlZmluZSBQTERfTU1DQ0RUQkNVVAkJX19yZWcxNihQTERfQkFTRSArIDB4NDAwZSkKKyNkZWZpbmUgUExEX01NQ0RFVAkJX19yZWcxNihQTERfQkFTRSArIDB4NDAxMCkKKyNkZWZpbmUgUExEX01NQ1dQCQlfX3JlZzE2KFBMRF9CQVNFICsgMHg0MDEyKQorI2RlZmluZSBQTERfTU1DV0RBVEEJCV9fcmVnMTYoUExEX0JBU0UgKyAweDUwMDApCisjZGVmaW5lIFBMRF9NTUNSREFUQQkJX19yZWcxNihQTERfQkFTRSArIDB4NjAwMCkKKyNkZWZpbmUgUExEX01NQ0NNRERBVEEJCV9fcmVnMTYoUExEX0JBU0UgKyAweDcwMDApCisjZGVmaW5lIFBMRF9NTUNSU1BEQVRBCQlfX3JlZzE2KFBMRF9CQVNFICsgMHg3MDA2KQorCisvKiBQb3dlciBDb250cm9sIG9mIE1NQyBhbmQgQ0YgKi8KKyNkZWZpbmUgUExEX0NQQ1IJCV9fcmVnMTYoUExEX0JBU0UgKyAweDE0MDAwKQorCisKKy8qPT09PSBJQ1UgPT09PSovCisjZGVmaW5lICBNMzJSX0lSUV9QQzEwNCAgICAgICAgKDUpICAgLyogSU5UNChQQy8xMDQpICovCisjZGVmaW5lICBNMzJSX0lSUV9JMkMgICAgICAgICAgKDI4KSAgLyogSTJDLUJVUyAgICAgKi8KKyNpZiAxCisjZGVmaW5lICBQTERfSVJRX0NGSVJFUSAgICAgICAoNDApICAvKiBDRkMgQ2FyZCBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgIFBMRF9JUlFfQ0ZDX0lOU0VSVCAgICg0MSkgIC8qIENGQyBDYXJkIEluc2VydCAqLworI2RlZmluZSAgUExEX0lSUV9DRkNfRUpFQ1QgICAgKDQyKSAgLyogQ0ZDIENhcmQgRWplY3QgKi8KKyNkZWZpbmUgIFBMRF9JUlFfTU1DQ0FSRCAgICAgICg0MykgIC8qIE1NQyBDYXJkIEluc2VydCAqLworI2RlZmluZSAgUExEX0lSUV9NTUNJUlEgICAgICAgKDQ0KSAgLyogTU1DIFRyYW5zZmVyIERvbmUgKi8KKyNlbHNlCisjZGVmaW5lICBQTERfSVJRX0NGSVJFUSAgICAgICAoMzQpICAvKiBDRkMgQ2FyZCBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgIFBMRF9JUlFfQ0ZDX0lOU0VSVCAgICgzNSkgIC8qIENGQyBDYXJkIEluc2VydCAqLworI2RlZmluZSAgUExEX0lSUV9DRkNfRUpFQ1QgICAgKDM2KSAgLyogQ0ZDIENhcmQgRWplY3QgKi8KKyNkZWZpbmUgIFBMRF9JUlFfTU1DQ0FSRCAgICAgICgzNykgIC8qIE1NQyBDYXJkIEluc2VydCAqLworI2RlZmluZSAgUExEX0lSUV9NTUNJUlEgICAgICAgKDM4KSAgLyogTU1DIFRyYW5zZmVyIERvbmUgKi8KKyNlbmRpZgorCisKKyNpZiAwCisvKiBMRUQgQ29udHJvbAorICoKKyAqIDE6IERJUCBzd2ljaCBzaWRlCisgKiAyOiBSZXNldCBzd2l0Y2ggc2lkZQorICovCisjZGVmaW5lIFBMRF9JT0xFRENSCQlfX3JlZzE2KFBMRF9CQVNFICsgMHgxNDAwMikKKyNkZWZpbmUgUExEX0lPTEVEXzFfT04JCTB4MDAxCisjZGVmaW5lIFBMRF9JT0xFRF8xX09GRgkJMHgwMDAKKyNkZWZpbmUgUExEX0lPTEVEXzJfT04JCTB4MDAyCisjZGVmaW5lIFBMRF9JT0xFRF8yX09GRgkJMHgwMDAKKworLyogRElQIFN3aXRjaAorICogIDA6IFdyaXRlLXByb3RlY3Qgb2YgRmxhc2ggTWVtb3J5ICgwOnByb3RlY3RlZCwgMTpub24tcHJvdGVjdGVkKQorICogIDE6IC0KKyAqICAyOiAtCisgKiAgMzogLQorICovCisjZGVmaW5lIFBMRF9JT1NXU1RTCQlfX3JlZzE2KFBMRF9CQVNFICsgMHgxNDAwNCkKKyNkZWZpbmUJUExEX0lPU1dTVFNfSU9TVzIJMHgwMjAwCisjZGVmaW5lCVBMRF9JT1NXU1RTX0lPU1cxCTB4MDEwMAorI2RlZmluZQlQTERfSU9TV1NUU19JT1dQMAkweDAwMDEKKworI2VuZGlmCisKKy8qIENSQyAqLworI2RlZmluZSBQTERfQ1JDN0RBVEEJCV9fcmVnMTYoUExEX0JBU0UgKyAweDE4MDAwKQorI2RlZmluZSBQTERfQ1JDN0lOREFUQQkJX19yZWcxNihQTERfQkFTRSArIDB4MTgwMDIpCisjZGVmaW5lIFBMRF9DUkMxNkRBVEEJCV9fcmVnMTYoUExEX0JBU0UgKyAweDE4MDA0KQorI2RlZmluZSBQTERfQ1JDMTZJTkRBVEEJCV9fcmVnMTYoUExEX0JBU0UgKyAweDE4MDA2KQorI2RlZmluZSBQTERfQ1JDMTZBREFUQQkJX19yZWcxNihQTERfQkFTRSArIDB4MTgwMDgpCisjZGVmaW5lIFBMRF9DUkMxNkFJTkRBVEEJX19yZWcxNihQTERfQkFTRSArIDB4MTgwMGEpCisKKworI2lmIDAKKy8qIFJUQyAqLworI2RlZmluZSBQTERfUlRDQ1IJCV9fcmVnMTYoUExEX0JBU0UgKyAweDFjMDAwKQorI2RlZmluZSBQTERfUlRDQkFVUgkJX19yZWcxNihQTERfQkFTRSArIDB4MWMwMDIpCisjZGVmaW5lIFBMRF9SVENXUkRBVEEJCV9fcmVnMTYoUExEX0JBU0UgKyAweDFjMDA0KQorI2RlZmluZSBQTERfUlRDUkREQVRBCQlfX3JlZzE2KFBMRF9CQVNFICsgMHgxYzAwNikKKyNkZWZpbmUgUExEX1JUQ1JTVE9EVAkJX19yZWcxNihQTERfQkFTRSArIDB4MWMwMDgpCisKKy8qIFNJTzAgKi8KKyNkZWZpbmUgUExEX0VTSU8wQ1IJCV9fcmVnMTYoUExEX0JBU0UgKyAweDIwMDAwKQorI2RlZmluZQlQTERfRVNJTzBDUl9UWEVOCTB4MDAwMQorI2RlZmluZQlQTERfRVNJTzBDUl9SWEVOCTB4MDAwMgorI2RlZmluZSBQTERfRVNJTzBNT0QwCQlfX3JlZzE2KFBMRF9CQVNFICsgMHgyMDAwMikKKyNkZWZpbmUJUExEX0VTSU8wTU9EMF9DVFNTCTB4MDA0MAorI2RlZmluZQlQTERfRVNJTzBNT0QwX1JUU1MJMHgwMDgwCisjZGVmaW5lIFBMRF9FU0lPME1PRDEJCV9fcmVnMTYoUExEX0JBU0UgKyAweDIwMDA0KQorI2RlZmluZQlQTERfRVNJTzBNT0QxX0xNRlMJMHgwMDEwCisjZGVmaW5lIFBMRF9FU0lPMFNUUwkJX19yZWcxNihQTERfQkFTRSArIDB4MjAwMDYpCisjZGVmaW5lCVBMRF9FU0lPMFNUU19URU1QCTB4MDAwMQorI2RlZmluZQlQTERfRVNJTzBTVFNfVFhDUAkweDAwMDIKKyNkZWZpbmUJUExEX0VTSU8wU1RTX1JYQ1AJMHgwMDA0CisjZGVmaW5lCVBMRF9FU0lPMFNUU19UWFNDCTB4MDEwMAorI2RlZmluZQlQTERfRVNJTzBTVFNfUlhTQwkweDAyMDAKKyNkZWZpbmUgUExEX0VTSU8wU1RTX1RYUkVBRFkJKFBMRF9FU0lPMFNUU19UWENQIHwgUExEX0VTSU8wU1RTX1RFTVApCisjZGVmaW5lIFBMRF9FU0lPMElOVENSCQlfX3JlZzE2KFBMRF9CQVNFICsgMHgyMDAwOCkKKyNkZWZpbmUJUExEX0VTSU8wSU5UQ1JfVFhJRU4JMHgwMDAyCisjZGVmaW5lCVBMRF9FU0lPMElOVENSX1JYQ0VOCTB4MDAwNAorI2RlZmluZSBQTERfRVNJTzBCQVVSCQlfX3JlZzE2KFBMRF9CQVNFICsgMHgyMDAwYSkKKyNkZWZpbmUgUExEX0VTSU8wVFhCCQlfX3JlZzE2KFBMRF9CQVNFICsgMHgyMDAwYykKKyNkZWZpbmUgUExEX0VTSU8wUlhCCQlfX3JlZzE2KFBMRF9CQVNFICsgMHgyMDAwZSkKKworLyogU0lNIENhcmQgKi8KKyNkZWZpbmUgUExEX1NDQ1IJCV9fcmVnMTYoUExEX0JBU0UgKyAweDM4MDAwKQorI2RlZmluZSBQTERfU0NNT0QJCV9fcmVnMTYoUExEX0JBU0UgKyAweDM4MDA0KQorI2RlZmluZSBQTERfU0NTVFMJCV9fcmVnMTYoUExEX0JBU0UgKyAweDM4MDA2KQorI2RlZmluZSBQTERfU0NJTlRDUgkJX19yZWcxNihQTERfQkFTRSArIDB4MzgwMDgpCisjZGVmaW5lIFBMRF9TQ0JBVVIJCV9fcmVnMTYoUExEX0JBU0UgKyAweDM4MDBhKQorI2RlZmluZSBQTERfU0NUWEIJCV9fcmVnMTYoUExEX0JBU0UgKyAweDM4MDBjKQorI2RlZmluZSBQTERfU0NSWEIJCV9fcmVnMTYoUExEX0JBU0UgKyAweDM4MDBlKQorCisjZW5kaWYKKworI2VuZGlmCS8qIF9NQVBQSTJfUExELkggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvbWMxNDY4MThydGMuaCBiL2luY2x1ZGUvYXNtLW0zMnIvbWMxNDY4MThydGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTU2MDFkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTMyci9tYzE0NjgxOHJ0Yy5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBNYWNoaW5lIGRlcGVuZGVudCBhY2Nlc3MgZnVuY3Rpb25zIGZvciBSVEMgcmVnaXN0ZXJzLgorICovCisjaWZuZGVmIF9BU01fTUMxNDY4MThSVENfSAorI2RlZmluZSBfQVNNX01DMTQ2ODE4UlRDX0gKKworI2luY2x1ZGUgPGFzbS9pby5oPgorCisjaWZuZGVmIFJUQ19QT1JUCisvLyAjZGVmaW5lIFJUQ19QT1JUKHgpCSgweDcwICsgKHgpKQorI2RlZmluZSBSVENfUE9SVCh4KQkoKHgpKQorI2RlZmluZSBSVENfQUxXQVlTX0JDRAkxCS8qIFJUQyBvcGVyYXRlcyBpbiBiaW5hcnkgbW9kZSAqLworI2VuZGlmCisKKy8qCisgKiBUaGUgeWV0IHN1cHBvcnRlZCBtYWNoaW5lcyBhbGwgYWNjZXNzIHRoZSBSVEMgaW5kZXggcmVnaXN0ZXIgdmlhCisgKiBhbiBJU0EgcG9ydCBhY2Nlc3MgYnV0IHRoZSB3YXkgdG8gYWNjZXNzIHRoZSBkYXRlIHJlZ2lzdGVyIGRpZmZlcnMgLi4uCisgKi8KKyNkZWZpbmUgQ01PU19SRUFEKGFkZHIpICh7IFwKK291dGJfcCgoYWRkciksUlRDX1BPUlQoMCkpOyBcCitpbmJfcChSVENfUE9SVCgxKSk7IFwKK30pCisjZGVmaW5lIENNT1NfV1JJVEUodmFsLCBhZGRyKSAoeyBcCitvdXRiX3AoKGFkZHIpLFJUQ19QT1JUKDApKTsgXAorb3V0Yl9wKCh2YWwpLFJUQ19QT1JUKDEpKTsgXAorfSkKKworI2RlZmluZSBSVENfSVJRIDgKKyNpZiAwCisjZW5kaWYKKworI2VuZGlmIC8qIF9BU01fTUMxNDY4MThSVENfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9tbWFuLmggYi9pbmNsdWRlL2FzbS1tMzJyL21tYW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTFmNmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTMyci9tbWFuLmgKQEAgLTAsMCArMSw0NSBAQAorI2lmbmRlZiBfX00zMlJfTU1BTl9IX18KKyNkZWZpbmUgX19NMzJSX01NQU5fSF9fCisKKy8qIG9yaWcgOiBpMzg2IDIuNi4wLXRlc3Q2ICovCisKKyNkZWZpbmUgUFJPVF9SRUFECTB4MQkJLyogcGFnZSBjYW4gYmUgcmVhZCAqLworI2RlZmluZSBQUk9UX1dSSVRFCTB4MgkJLyogcGFnZSBjYW4gYmUgd3JpdHRlbiAqLworI2RlZmluZSBQUk9UX0VYRUMJMHg0CQkvKiBwYWdlIGNhbiBiZSBleGVjdXRlZCAqLworI2RlZmluZSBQUk9UX1NFTQkweDgJCS8qIHBhZ2UgbWF5IGJlIHVzZWQgZm9yIGF0b21pYyBvcHMgKi8KKyNkZWZpbmUgUFJPVF9OT05FCTB4MAkJLyogcGFnZSBjYW4gbm90IGJlIGFjY2Vzc2VkICovCisjZGVmaW5lIFBST1RfR1JPV1NET1dOCTB4MDEwMDAwMDAJLyogbXByb3RlY3QgZmxhZzogZXh0ZW5kIGNoYW5nZSB0byBzdGFydCBvZiBncm93c2Rvd24gdm1hICovCisjZGVmaW5lIFBST1RfR1JPV1NVUAkweDAyMDAwMDAwCS8qIG1wcm90ZWN0IGZsYWc6IGV4dGVuZCBjaGFuZ2UgdG8gZW5kIG9mIGdyb3dzdXAgdm1hICovCisKKyNkZWZpbmUgTUFQX1NIQVJFRAkweDAxCQkvKiBTaGFyZSBjaGFuZ2VzICovCisjZGVmaW5lIE1BUF9QUklWQVRFCTB4MDIJCS8qIENoYW5nZXMgYXJlIHByaXZhdGUgKi8KKyNkZWZpbmUgTUFQX1RZUEUJMHgwZgkJLyogTWFzayBmb3IgdHlwZSBvZiBtYXBwaW5nICovCisjZGVmaW5lIE1BUF9GSVhFRAkweDEwCQkvKiBJbnRlcnByZXQgYWRkciBleGFjdGx5ICovCisjZGVmaW5lIE1BUF9BTk9OWU1PVVMJMHgyMAkJLyogZG9uJ3QgdXNlIGEgZmlsZSAqLworCisjZGVmaW5lIE1BUF9HUk9XU0RPV04JMHgwMTAwCQkvKiBzdGFjay1saWtlIHNlZ21lbnQgKi8KKyNkZWZpbmUgTUFQX0RFTllXUklURQkweDA4MDAJCS8qIEVUWFRCU1kgKi8KKyNkZWZpbmUgTUFQX0VYRUNVVEFCTEUJMHgxMDAwCQkvKiBtYXJrIGl0IGFzIGFuIGV4ZWN1dGFibGUgKi8KKyNkZWZpbmUgTUFQX0xPQ0tFRAkweDIwMDAJCS8qIHBhZ2VzIGFyZSBsb2NrZWQgKi8KKyNkZWZpbmUgTUFQX05PUkVTRVJWRQkweDQwMDAJCS8qIGRvbid0IGNoZWNrIGZvciByZXNlcnZhdGlvbnMgKi8KKyNkZWZpbmUgTUFQX1BPUFVMQVRFCTB4ODAwMAkJLyogcG9wdWxhdGUgKHByZWZhdWx0KSBwYWdldGFibGVzICovCisjZGVmaW5lIE1BUF9OT05CTE9DSwkweDEwMDAwCQkvKiBkbyBub3QgYmxvY2sgb24gSU8gKi8KKworI2RlZmluZSBNU19BU1lOQwkxCQkvKiBzeW5jIG1lbW9yeSBhc3luY2hyb25vdXNseSAqLworI2RlZmluZSBNU19JTlZBTElEQVRFCTIJCS8qIGludmFsaWRhdGUgdGhlIGNhY2hlcyAqLworI2RlZmluZSBNU19TWU5DCQk0CQkvKiBzeW5jaHJvbm91cyBtZW1vcnkgc3luYyAqLworCisjZGVmaW5lIE1DTF9DVVJSRU5UCTEJCS8qIGxvY2sgYWxsIGN1cnJlbnQgbWFwcGluZ3MgKi8KKyNkZWZpbmUgTUNMX0ZVVFVSRQkyCQkvKiBsb2NrIGFsbCBmdXR1cmUgbWFwcGluZ3MgKi8KKworI2RlZmluZSBNQURWX05PUk1BTAkweDAJCS8qIGRlZmF1bHQgcGFnZS1pbiBiZWhhdmlvciAqLworI2RlZmluZSBNQURWX1JBTkRPTQkweDEJCS8qIHBhZ2UtaW4gbWluaW11bSByZXF1aXJlZCAqLworI2RlZmluZSBNQURWX1NFUVVFTlRJQUwJMHgyCQkvKiByZWFkLWFoZWFkIGFnZ3Jlc3NpdmVseSAqLworI2RlZmluZSBNQURWX1dJTExORUVECTB4MwkJLyogcHJlLWZhdWx0IHBhZ2VzICovCisjZGVmaW5lIE1BRFZfRE9OVE5FRUQJMHg0CQkvKiBkaXNjYXJkIHRoZXNlIHBhZ2VzICovCisKKy8qIGNvbXBhdGliaWxpdHkgZmxhZ3MgKi8KKyNkZWZpbmUgTUFQX0FOT04JTUFQX0FOT05ZTU9VUworI2RlZmluZSBNQVBfRklMRQkwCisKKyNlbmRpZiAvKiBfX00zMlJfTU1BTl9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvbW11LmggYi9pbmNsdWRlL2FzbS1tMzJyL21tdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljMDBlYjcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL21tdS5oCkBAIC0wLDAgKzEsMjEgQEAKKyNpZm5kZWYgX0FTTV9NMzJSX01NVV9ICisjZGVmaW5lIF9BU01fTTMyUl9NTVVfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpZiAhZGVmaW5lZChDT05GSUdfTU1VKQordHlwZWRlZiBzdHJ1Y3QgeworCXN0cnVjdCB2bV9saXN0X3N0cnVjdAkqdm1saXN0OworCXVuc2lnbmVkIGxvbmcJCWVuZF9icms7Cit9IG1tX2NvbnRleHRfdDsKKyNlbHNlCisKKy8qIERlZmF1bHQgInVuc2lnbmVkIGxvbmciIGNvbnRleHQgKi8KKyNpZm5kZWYgQ09ORklHX1NNUAordHlwZWRlZiB1bnNpZ25lZCBsb25nIG1tX2NvbnRleHRfdDsKKyNlbHNlCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbW1fY29udGV4dF90W05SX0NQVVNdOworI2VuZGlmCisKKyNlbmRpZiAgLyogQ09ORklHX01NVSAqLworI2VuZGlmICAvKiBfQVNNX00zMlJfTU1VX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvbW11X2NvbnRleHQuaCBiL2luY2x1ZGUvYXNtLW0zMnIvbW11X2NvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjM0YzUzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTMyci9tbXVfY29udGV4dC5oCkBAIC0wLDAgKzEsMTcwIEBACisjaWZuZGVmIF9BU01fTTMyUl9NTVVfQ09OVEVYVF9ICisjZGVmaW5lIF9BU01fTTMyUl9NTVVfQ09OVEVYVF9ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2luY2x1ZGUgPGFzbS9tMzJyLmg+CisKKyNkZWZpbmUgTU1VX0NPTlRFWFRfQVNJRF9NQVNLICAgICAgKDB4MDAwMDAwRkYpCisjZGVmaW5lIE1NVV9DT05URVhUX1ZFUlNJT05fTUFTSyAgICgweEZGRkZGRjAwKQorI2RlZmluZSBNTVVfQ09OVEVYVF9GSVJTVF9WRVJTSU9OICAoMHgwMDAwMDEwMCkKKyNkZWZpbmUgTk9fQ09OVEVYVCAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDApCisKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgorI2luY2x1ZGUgPGFzbS9tbXUuaD4KKyNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KKworLyoKKyAqIENhY2hlIG9mIE1NVSBjb250ZXh0IGxhc3QgdXNlZC4KKyAqLworI2lmbmRlZiBDT05GSUdfU01QCitleHRlcm4gdW5zaWduZWQgbG9uZyBtbXVfY29udGV4dF9jYWNoZV9kYXQ7CisjZGVmaW5lIG1tdV9jb250ZXh0X2NhY2hlCW1tdV9jb250ZXh0X2NhY2hlX2RhdAorI2RlZmluZSBtbV9jb250ZXh0KG1tKQkJbW0tPmNvbnRleHQKKyNlbHNlIC8qIG5vdCBDT05GSUdfU01QICovCitleHRlcm4gdW5zaWduZWQgbG9uZyBtbXVfY29udGV4dF9jYWNoZV9kYXRbXTsKKyNkZWZpbmUgbW11X2NvbnRleHRfY2FjaGUJbW11X2NvbnRleHRfY2FjaGVfZGF0W3NtcF9wcm9jZXNzb3JfaWQoKV0KKyNkZWZpbmUgbW1fY29udGV4dChtbSkJCW1tLT5jb250ZXh0W3NtcF9wcm9jZXNzb3JfaWQoKV0KKyNlbmRpZiAvKiBub3QgQ09ORklHX1NNUCAqLworCisjZGVmaW5lIHNldF90bGJfdGFnKGVudHJ5LCB0YWcpCQkoKmVudHJ5ID0gKHRhZyAmIFBBR0VfTUFTSyl8Z2V0X2FzaWQoKSkKKyNkZWZpbmUgc2V0X3RsYl9kYXRhKGVudHJ5LCBkYXRhKQkoKmVudHJ5ID0gKGRhdGEgfCBfUEFHRV9QUkVTRU5UKSkKKworI2lmZGVmIENPTkZJR19NTVUKKyNkZWZpbmUgZW50ZXJfbGF6eV90bGIobW0sIHRzaykJZG8geyB9IHdoaWxlICgwKQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X25ld19tbXVfY29udGV4dChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwl1bnNpZ25lZCBsb25nIG1jID0gKyttbXVfY29udGV4dF9jYWNoZTsKKworCWlmICghKG1jICYgTU1VX0NPTlRFWFRfQVNJRF9NQVNLKSkgeworCQkvKiBXZSBleGhhdXN0IEFTSUQgb2YgdGhpcyB2ZXJzaW9uLgorCQkgICBGbHVzaCBhbGwgVExCIGFuZCBzdGFydCBuZXcgY3ljbGUuICovCisJCWxvY2FsX2ZsdXNoX3RsYl9hbGwoKTsKKwkJLyogRml4IHZlcnNpb24gaWYgbmVlZGVkLgorCQkgICBOb3RlIHRoYXQgd2UgYXZvaWQgdmVyc2lvbiAjMCB0byBkaXN0aW5ndXNoIE5PX0NPTlRFWFQuICovCisJCWlmICghbWMpCisJCQltbXVfY29udGV4dF9jYWNoZSA9IG1jID0gTU1VX0NPTlRFWFRfRklSU1RfVkVSU0lPTjsKKwl9CisJbW1fY29udGV4dChtbSkgPSBtYzsKK30KKworLyoKKyAqIEdldCBNTVUgY29udGV4dCBpZiBuZWVkZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBnZXRfbW11X2NvbnRleHQoc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJaWYgKG1tKSB7CisJCXVuc2lnbmVkIGxvbmcgbWMgPSBtbXVfY29udGV4dF9jYWNoZTsKKworCQkvKiBDaGVjayBpZiB3ZSBoYXZlIG9sZCB2ZXJzaW9uIG9mIGNvbnRleHQuCisJCSAgIElmIGl0J3Mgb2xkLCB3ZSBuZWVkIHRvIGdldCBuZXcgY29udGV4dCB3aXRoIG5ldyB2ZXJzaW9uLiAqLworCQlpZiAoKG1tX2NvbnRleHQobW0pIF4gbWMpICYgTU1VX0NPTlRFWFRfVkVSU0lPTl9NQVNLKQorCQkJZ2V0X25ld19tbXVfY29udGV4dChtbSk7CisJfQorfQorCisvKgorICogSW5pdGlhbGl6ZSB0aGUgY29udGV4dCByZWxhdGVkIGluZm8gZm9yIGEgbmV3IG1tX3N0cnVjdAorICogaW5zdGFuY2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGluaXRfbmV3X2NvbnRleHQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssCisJc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisjaWZuZGVmIENPTkZJR19TTVAKKwltbS0+Y29udGV4dCA9IE5PX0NPTlRFWFQ7CisjZWxzZSAvKiBDT05GSUdfU01QICovCisJaW50IG51bV9jcHVzID0gbnVtX29ubGluZV9jcHVzKCk7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwIDsgaSA8IG51bV9jcHVzIDsgaSsrKQorCQltbS0+Y29udGV4dFtpXSA9IE5PX0NPTlRFWFQ7CisjZW5kaWYgLyogQ09ORklHX1NNUCAqLworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBEZXN0cm95IGNvbnRleHQgcmVsYXRlZCBpbmZvIGZvciBhbiBtbV9zdHJ1Y3QgdGhhdCBpcyBhYm91dAorICogdG8gYmUgcHV0IHRvIHJlc3QuCisgKi8KKyNkZWZpbmUgZGVzdHJveV9jb250ZXh0KG1tKQlkbyB7IH0gd2hpbGUgKDApCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfYXNpZCh1bnNpZ25lZCBsb25nIGFzaWQpCit7CisJKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopTUFTSUQgPSAoYXNpZCAmIE1NVV9DT05URVhUX0FTSURfTUFTSyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfYXNpZCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgYXNpZDsKKworCWFzaWQgPSAqKHZvbGF0aWxlIGxvbmcgKilNQVNJRDsKKwlhc2lkICY9IE1NVV9DT05URVhUX0FTSURfTUFTSzsKKworCXJldHVybiBhc2lkOworfQorCisvKgorICogQWZ0ZXIgd2UgaGF2ZSBzZXQgY3VycmVudC0+bW0gdG8gYSBuZXcgdmFsdWUsIHRoaXMgYWN0aXZhdGVzCisgKiB0aGUgY29udGV4dCBmb3IgdGhlIG5ldyBtbSBzbyB3ZSBzZWUgdGhlIG5ldyBtYXBwaW5ncy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGFjdGl2YXRlX2NvbnRleHQoc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJZ2V0X21tdV9jb250ZXh0KG1tKTsKKwlzZXRfYXNpZChtbV9jb250ZXh0KG1tKSAmIE1NVV9DT05URVhUX0FTSURfTUFTSyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzd2l0Y2hfbW0oc3RydWN0IG1tX3N0cnVjdCAqcHJldiwKKwlzdHJ1Y3QgbW1fc3RydWN0ICpuZXh0LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKyNpZmRlZiBDT05GSUdfU01QCisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKyNlbmRpZgkvKiBDT05GSUdfU01QICovCisKKwlpZiAocHJldiAhPSBuZXh0KSB7CisjaWZkZWYgQ09ORklHX1NNUAorCQljcHVfc2V0KGNwdSwgbmV4dC0+Y3B1X3ZtX21hc2spOworI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KKwkJLyogU2V0IE1QVEIgPSBuZXh0LT5wZ2QgKi8KKwkJKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopTVBUQiA9ICh1bnNpZ25lZCBsb25nKW5leHQtPnBnZDsKKwkJYWN0aXZhdGVfY29udGV4dChuZXh0KTsKKwl9CisjaWZkZWYgQ09ORklHX1NNUAorCWVsc2UKKwkJaWYgKCFjcHVfdGVzdF9hbmRfc2V0KGNwdSwgbmV4dC0+Y3B1X3ZtX21hc2spKQorCQkJYWN0aXZhdGVfY29udGV4dChuZXh0KTsKKyNlbmRpZiAvKiBDT05GSUdfU01QICovCit9CisKKyNkZWZpbmUgZGVhY3RpdmF0ZV9tbSh0c2ssIG1tKQlkbyB7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgYWN0aXZhdGVfbW0ocHJldiwgbmV4dCkJXAorCXN3aXRjaF9tbSgocHJldiksIChuZXh0KSwgTlVMTCkKKworI2Vsc2UKKyNkZWZpbmUgZ2V0X21tdV9jb250ZXh0KG1tKSAgICAgICAgICAgICBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGluaXRfbmV3X2NvbnRleHQodHNrLG1tKSAgICAgICAgKDApCisjZGVmaW5lIGRlc3Ryb3lfY29udGV4dChtbSkgICAgICAgICAgICAgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBzZXRfYXNpZChhc2lkKSAgICAgICAgICAgICAgICAgIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZ2V0X2FzaWQoKSAgICAgICAgICAgICAgICAgICAgICAoMCkKKyNkZWZpbmUgYWN0aXZhdGVfY29udGV4dChtbSkgICAgICAgICAgICBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHN3aXRjaF9tbShwcmV2LG5leHQsdHNrKSAgICAgICAgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBkZWFjdGl2YXRlX21tKG1tLHRzaykgICAgICAgICAgIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgYWN0aXZhdGVfbW0ocHJldixuZXh0KSAgICAgICAgICBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGVudGVyX2xhenlfdGxiKG1tLHRzaykgICAgICAgICAgZG8geyB9IHdoaWxlICgwKQorI2VuZGlmIC8qIENPTkZJR19NTVUgKi8KKworCisjZW5kaWYgLyogbm90IF9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX0FTTV9NMzJSX01NVV9DT05URVhUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvbW16b25lLmggYi9pbmNsdWRlL2FzbS1tMzJyL21tem9uZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViZjAyMjgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL21tem9uZS5oCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBXcml0dGVuIGJ5IFBhdCBHYXVnaGVuIChnb25lQHVzLmlibS5jb20pIE1hciAyMDAyCisgKgorICovCisKKyNpZm5kZWYgX0FTTV9NTVpPTkVfSF8KKyNkZWZpbmUgX0FTTV9NTVpPTkVfSF8KKworI2luY2x1ZGUgPGFzbS9zbXAuaD4KKworI2lmZGVmIENPTkZJR19ESVNDT05USUdNRU0KKworZXh0ZXJuIHN0cnVjdCBwZ2xpc3RfZGF0YSAqbm9kZV9kYXRhW107CisjZGVmaW5lIE5PREVfREFUQShuaWQpCQkobm9kZV9kYXRhW25pZF0pCisKKyNkZWZpbmUgbm9kZV9sb2NhbG5yKHBmbiwgbmlkKQkoKHBmbikgLSBOT0RFX0RBVEEobmlkKS0+bm9kZV9zdGFydF9wZm4pCisjZGVmaW5lIG5vZGVfbWVtX21hcChuaWQpCShOT0RFX0RBVEEobmlkKS0+bm9kZV9tZW1fbWFwKQorI2RlZmluZSBub2RlX3N0YXJ0X3BmbihuaWQpCShOT0RFX0RBVEEobmlkKS0+bm9kZV9zdGFydF9wZm4pCisjZGVmaW5lIG5vZGVfZW5kX3BmbihuaWQpCQkJCQkJXAorKHsJCQkJCQkJCQlcCisJcGdfZGF0YV90ICpfX3BnZGF0ID0gTk9ERV9EQVRBKG5pZCk7CQkJCVwKKwlfX3BnZGF0LT5ub2RlX3N0YXJ0X3BmbiArIF9fcGdkYXQtPm5vZGVfc3Bhbm5lZF9wYWdlcyAtIDE7CVwKK30pCisKKyNkZWZpbmUgbG9jYWxfbWFwbnIoa3ZhZGRyKQkJCQkJCVwKKyh7CQkJCQkJCQkJXAorCXVuc2lnbmVkIGxvbmcgX19wZm4gPSBfX3BhKGt2YWRkcikgPj4gUEFHRV9TSElGVDsJCVwKKwkoX19wZm4gLSBub2RlX3N0YXJ0X3BmbihwZm5fdG9fbmlkKF9fcGZuKSkpOwkJCVwKK30pCisKKyNkZWZpbmUgcGZuX3RvX3BhZ2UocGZuKQkJCQkJCVwKKyh7CQkJCQkJCQkJXAorCXVuc2lnbmVkIGxvbmcgX19wZm4gPSBwZm47CQkJCQlcCisJaW50IF9fbm9kZSAgPSBwZm5fdG9fbmlkKF9fcGZuKTsJCQkJXAorCSZub2RlX21lbV9tYXAoX19ub2RlKVtub2RlX2xvY2FsbnIoX19wZm4sX19ub2RlKV07CQlcCit9KQorCisjZGVmaW5lIHBhZ2VfdG9fcGZuKHBnKQkJCQkJCQlcCisoewkJCQkJCQkJCVwKKwlzdHJ1Y3QgcGFnZSAqX19wYWdlID0gcGc7CQkJCQlcCisJc3RydWN0IHpvbmUgKl9fem9uZSA9IHBhZ2Vfem9uZShfX3BhZ2UpOwkJCVwKKwkodW5zaWduZWQgbG9uZykoX19wYWdlIC0gX196b25lLT56b25lX21lbV9tYXApCQkJXAorCQkrIF9fem9uZS0+em9uZV9zdGFydF9wZm47CQkJCVwKK30pCisjZGVmaW5lIHBtZF9wYWdlKHBtZCkJCShwZm5fdG9fcGFnZShwbWRfdmFsKHBtZCkgPj4gUEFHRV9TSElGVCkpCisvKgorICogcGZuX3ZhbGlkIHNob3VsZCBiZSBtYWRlIGFzIGZhc3QgYXMgcG9zc2libGUsIGFuZCB0aGUgY3VycmVudCBkZWZpbml0aW9uCisgKiBpcyB2YWxpZCBmb3IgbWFjaGluZXMgdGhhdCBhcmUgTlVNQSwgYnV0IHN0aWxsIGNvbnRpZ3VvdXMsIHdoaWNoIGlzIHdoYXQKKyAqIGlzIGN1cnJlbnRseSBzdXBwb3J0ZWQuIEEgbW9yZSBnZW5lcmFsaXNlZCwgYnV0IHNsb3dlciBkZWZpbml0aW9uIHdvdWxkCisgKiBiZSBzb21ldGhpbmcgbGlrZSB0aGlzIC0gbWJsaWdoOgorICogKCBwZm5fdG9fcGdkYXQocGZuKSAmJiAoKHBmbikgPCBub2RlX2VuZF9wZm4ocGZuX3RvX25pZChwZm4pKSkgKQorICovCisjaWYgMQkvKiBNMzJSX0ZJWE1FICovCisjZGVmaW5lIHBmbl92YWxpZChwZm4pCSgxKQorI2Vsc2UKKyNkZWZpbmUgcGZuX3ZhbGlkKHBmbikJKChwZm4pIDwgbnVtX3BoeXNwYWdlcykKKyNlbmRpZgorCisvKgorICogZ2VuZXJpYyBub2RlIG1lbW9yeSBzdXBwb3J0LCB0aGUgZm9sbG93aW5nIGFzc3VtcHRpb25zIGFwcGx5OgorICovCisKK3N0YXRpYyBfX2lubGluZV9fIGludCBwZm5fdG9fbmlkKHVuc2lnbmVkIGxvbmcgcGZuKQoreworCWludCBub2RlOworCisJZm9yIChub2RlID0gMCA7IG5vZGUgPCBNQVhfTlVNTk9ERVMgOyBub2RlKyspCisJCWlmIChwZm4gPj0gbm9kZV9zdGFydF9wZm4obm9kZSkgJiYgcGZuIDw9IG5vZGVfZW5kX3Bmbihub2RlKSkKKwkJCWJyZWFrOworCisJcmV0dXJuIG5vZGU7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGZuX3RvX3BnZGF0KHVuc2lnbmVkIGxvbmcgcGZuKQoreworCXJldHVybihOT0RFX0RBVEEocGZuX3RvX25pZChwZm4pKSk7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfRElTQ09OVElHTUVNICovCisjZW5kaWYgLyogX0FTTV9NTVpPTkVfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvbW9kdWxlLmggYi9pbmNsdWRlL2FzbS1tMzJyL21vZHVsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmMjU0MWMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL21vZHVsZS5oCkBAIC0wLDAgKzEsMTMgQEAKKyNpZm5kZWYgX0FTTV9NMzJSX01PRFVMRV9ICisjZGVmaW5lIF9BU01fTTMyUl9NT0RVTEVfSAorCisvKiAkSWQkICovCisKK3N0cnVjdCBtb2RfYXJjaF9zcGVjaWZpYyB7IH07CisKKyNkZWZpbmUgRWxmX1NoZHIJRWxmMzJfU2hkcgorI2RlZmluZSBFbGZfU3ltCQlFbGYzMl9TeW0KKyNkZWZpbmUgRWxmX0VoZHIJRWxmMzJfRWhkcgorCisjZW5kaWYgLyogX0FTTV9NMzJSX01PRFVMRV9IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvbXNnYnVmLmggYi9pbmNsdWRlL2FzbS1tMzJyL21zZ2J1Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1MmZmNTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL21zZ2J1Zi5oCkBAIC0wLDAgKzEsMzUgQEAKKyNpZm5kZWYgX0FTTV9NMzJSX01TR0JVRl9ICisjZGVmaW5lIF9BU01fTTMyUl9NU0dCVUZfSAorCisvKiAkSWQkICovCisKKy8qIG9yaWcgOiBpMzg2IDIuNC4xOCAqLworCisvKgorICogVGhlIG1zcWlkNjRfZHMgc3RydWN0dXJlIGZvciBtMzJyIGFyY2hpdGVjdHVyZS4KKyAqIE5vdGUgZXh0cmEgcGFkZGluZyBiZWNhdXNlIHRoaXMgc3RydWN0dXJlIGlzIHBhc3NlZCBiYWNrIGFuZCBmb3J0aAorICogYmV0d2VlbiBrZXJuZWwgYW5kIHVzZXIgc3BhY2UuCisgKgorICogUGFkIHNwYWNlIGlzIGxlZnQgZm9yOgorICogLSA2NC1iaXQgdGltZV90IHRvIHNvbHZlIHkyMDM4IHByb2JsZW0KKyAqIC0gMiBtaXNjZWxsYW5lb3VzIDMyLWJpdCB2YWx1ZXMKKyAqLworCitzdHJ1Y3QgbXNxaWQ2NF9kcyB7CisJc3RydWN0IGlwYzY0X3Blcm0gbXNnX3Blcm07CisJX19rZXJuZWxfdGltZV90IG1zZ19zdGltZTsJLyogbGFzdCBtc2dzbmQgdGltZSAqLworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQxOworCV9fa2VybmVsX3RpbWVfdCBtc2dfcnRpbWU7CS8qIGxhc3QgbXNncmN2IHRpbWUgKi8KKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkMjsKKwlfX2tlcm5lbF90aW1lX3QgbXNnX2N0aW1lOwkvKiBsYXN0IGNoYW5nZSB0aW1lICovCisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDM7CisJdW5zaWduZWQgbG9uZyAgbXNnX2NieXRlczsJLyogY3VycmVudCBudW1iZXIgb2YgYnl0ZXMgb24gcXVldWUgKi8KKwl1bnNpZ25lZCBsb25nICBtc2dfcW51bTsJLyogbnVtYmVyIG9mIG1lc3NhZ2VzIGluIHF1ZXVlICovCisJdW5zaWduZWQgbG9uZyAgbXNnX3FieXRlczsJLyogbWF4IG51bWJlciBvZiBieXRlcyBvbiBxdWV1ZSAqLworCV9fa2VybmVsX3BpZF90IG1zZ19sc3BpZDsJLyogcGlkIG9mIGxhc3QgbXNnc25kICovCisJX19rZXJuZWxfcGlkX3QgbXNnX2xycGlkOwkvKiBsYXN0IHJlY2VpdmUgcGlkICovCisJdW5zaWduZWQgbG9uZyAgX191bnVzZWQ0OworCXVuc2lnbmVkIGxvbmcgIF9fdW51c2VkNTsKK307CisKKyNlbmRpZiAvKiBfQVNNX00zMlJfTVNHQlVGX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvbmFtZWkuaCBiL2luY2x1ZGUvYXNtLW0zMnIvbmFtZWkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTcyZDNkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTMyci9uYW1laS5oCkBAIC0wLDAgKzEsMjEgQEAKKyNpZm5kZWYgX0FTTV9NMzJSX05BTUVJX0gKKyNkZWZpbmUgX0FTTV9NMzJSX05BTUVJX0gKKworLyogJElkJCAqLworCisvKiBvcmlnIDogaTM4NiAyLjQuMTggKi8KKworLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLW0zMnIvbmFtZWkuaAorICoKKyAqIEluY2x1ZGVkIGZyb20gbGludXgvZnMvbmFtZWkuYworICovCisKKy8qIFRoaXMgZHVtbXkgcm91dGluZSBtYXliZSBjaGFuZ2VkIHRvIHNvbWV0aGluZyB1c2VmdWwKKyAqIGZvciAvdXNyL2duZW11bC8gZW11bGF0aW9uIHN0dWZmLgorICogTG9vayBhdCBhc20tc3BhcmMvbmFtZWkuaCBmb3IgZGV0YWlscy4KKyAqLworCisjZGVmaW5lIF9fZW11bF9wcmVmaXgoKSBOVUxMCisKKyNlbmRpZiAvKiBfQVNNX00zMlJfTkFNRUlfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9udW1ub2Rlcy5oIGIvaW5jbHVkZS9hc20tbTMyci9udW1ub2Rlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3OWEzOWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTMyci9udW1ub2Rlcy5oCkBAIC0wLDAgKzEsMTUgQEAKKyNpZm5kZWYgX0FTTV9OVU1OT0RFU19IXworI2RlZmluZSBfQVNNX05VTU5PREVTX0hfCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2lmZGVmIENPTkZJR19ESVNDT05USUdNRU0KKworI2lmIGRlZmluZWQoQ09ORklHX0NISVBfTTMyNzAwKQorI2RlZmluZQlOT0RFU19TSElGVAkxCS8qIE1heCAyIE5vZGVzICovCisjZW5kaWYJLyogQ09ORklHX0NISVBfTTMyNzAwICovCisKKyNlbmRpZgkvKiBDT05GSUdfRElTQ09OVElHTUVNICovCisKKyNlbmRpZgkvKiBfQVNNX05VTU5PREVTX0hfICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvb3BzcHV0L29wc3B1dF9sYW4uaCBiL2luY2x1ZGUvYXNtLW0zMnIvb3BzcHV0L29wc3B1dF9sYW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTJhODM5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTMyci9vcHNwdXQvb3BzcHV0X2xhbi5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS9vcHNwdXRfbGFuLmgKKyAqCisgKiBPUFNQVVQtTEFOIGJvYXJkCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDQJVGFrZW8gVGFrYWhhc2hpLCBNYW1vcnUgU2FrdWdhd2EKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mCisgKiB0aGlzIGFyY2hpdmUgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAkSWQ6IG9wc3B1dF9sYW4uaCx2IDEuMSAyMDA0LzA3LzI3IDA2OjU0OjIwIHNha3VnYXdhIEV4cCAkCisgKi8KKworI2lmbmRlZiBfT1BTUFVUX09QU1BVVF9MQU5fSAorI2RlZmluZSBfT1BTUFVUX09QU1BVVF9MQU5fSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisvKgorICogQyBmdW5jdGlvbnMgdXNlIG5vbi1jYWNoZSBhZGRyZXNzLgorICovCisjZGVmaW5lIE9QU1BVVF9MQU5fQkFTRQkoMHgxMDAwMDAwMCAvKiArIE5PTkNBQ0hFX09GRlNFVCAqLykKKyNlbHNlCisjZGVmaW5lIE9QU1BVVF9MQU5fQkFTRQkoMHgxMDAwMDAwMCArIE5PTkNBQ0hFX09GRlNFVCkKKyNlbmRpZgkvKiBfX0FTU0VNQkxZX18gKi8KKworLyogSUNVCisgKiAgSUNVSVNUUzoJc3RhdHVzIHJlZ2lzdGVyCisgKiAgSUNVSVJFUTA6IAlyZXF1ZXN0IHJlZ2lzdGVyCisgKiAgSUNVSVJFUTE6IAlyZXF1ZXN0IHJlZ2lzdGVyCisgKiAgSUNVQ1IzOgljb250cm9sIHJlZ2lzdGVyIGZvciBDRklSRVEjIGludGVycnVwdAorICogIElDVUNSNDoJY29udHJvbCByZWdpc3RlciBmb3IgQ0ZDIENhcmQgaW5zZXJ0IGludGVycnVwdAorICogIElDVUNSNToJY29udHJvbCByZWdpc3RlciBmb3IgQ0ZDIENhcmQgZWplY3QgaW50ZXJydXB0CisgKiAgSUNVQ1I2Ogljb250cm9sIHJlZ2lzdGVyIGZvciBleHRlcm5hbCBpbnRlcnJ1cHQKKyAqICBJQ1VDUjExOgljb250cm9sIHJlZ2lzdGVyIGZvciBNTUMgQ2FyZCBpbnNlcnQvZWplY3QgaW50ZXJydXB0CisgKiAgSUNVQ1IxMzoJY29udHJvbCByZWdpc3RlciBmb3IgU0MgZXJyb3IgaW50ZXJydXB0CisgKiAgSUNVQ1IxNDoJY29udHJvbCByZWdpc3RlciBmb3IgU0MgcmVjZWl2ZSBpbnRlcnJ1cHQKKyAqICBJQ1VDUjE1Ogljb250cm9sIHJlZ2lzdGVyIGZvciBTQyBzZW5kIGludGVycnVwdAorICogIElDVUNSMTY6CWNvbnRyb2wgcmVnaXN0ZXIgZm9yIFNJTzAgcmVjZWl2ZSBpbnRlcnJ1cHQKKyAqICBJQ1VDUjE3Ogljb250cm9sIHJlZ2lzdGVyIGZvciBTSU8wIHNlbmQgaW50ZXJydXB0CisgKi8KKyNkZWZpbmUgT1BTUFVUX0xBTl9JUlFfTEFOCShPUFNQVVRfTEFOX1BMRF9JUlFfQkFTRSArIDEpCS8qIExBTiAqLworI2RlZmluZSBPUFNQVVRfTEFOX0lSUV9JMkMJKE9QU1BVVF9MQU5fUExEX0lSUV9CQVNFICsgMykJLyogSTJDICovCisKKyNkZWZpbmUgT1BTUFVUX0xBTl9JQ1VJU1RTCV9fcmVnMTYoT1BTUFVUX0xBTl9CQVNFICsgMHhjMDAwMikKKyNkZWZpbmUgT1BTUFVUX0xBTl9JQ1VJU1RTX1ZFQ0JfTUFTSwkoMHhmMDAwKQorI2RlZmluZSBPUFNQVVRfTEFOX1ZFQ0IoeCkJKCh4KSAmIE9QU1BVVF9MQU5fSUNVSVNUU19WRUNCX01BU0spCisjZGVmaW5lIE9QU1BVVF9MQU5fSUNVSVNUU19JU05fTUFTSwkoMHgwN2MwKQorI2RlZmluZSBPUFNQVVRfTEFOX0lDVUlTVFNfSVNOKHgpCSgoeCkgJiBPUFNQVVRfTEFOX0lDVUlTVFNfSVNOX01BU0spCisjZGVmaW5lIE9QU1BVVF9MQU5fSUNVSVJFUTAJX19yZWcxNihPUFNQVVRfTEFOX0JBU0UgKyAweGMwMDA0KQorI2RlZmluZSBPUFNQVVRfTEFOX0lDVUNSMQlfX3JlZzE2KE9QU1BVVF9MQU5fQkFTRSArIDB4YzAwMTApCisjZGVmaW5lIE9QU1BVVF9MQU5fSUNVQ1IzCV9fcmVnMTYoT1BTUFVUX0xBTl9CQVNFICsgMHhjMDAxNCkKKworI2VuZGlmCS8qIF9PUFNQVVRfT1BTUFVUX0xBTl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL29wc3B1dC9vcHNwdXRfbGNkLmggYi9pbmNsdWRlL2FzbS1tMzJyL29wc3B1dC9vcHNwdXRfbGNkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2E4ODNlMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvb3BzcHV0L29wc3B1dF9sY2QuaApAQCAtMCwwICsxLDU5IEBACisvKgorICogaW5jbHVkZS9hc20vb3BzcHV0X2xjZC5oCisgKgorICogT1BTUFVULUxDRCBib2FyZAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMglUYWtlbyBUYWthaGFzaGkKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mCisgKiB0aGlzIGFyY2hpdmUgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAkSWQ6IG9wc3B1dF9sY2QuaCx2IDEuMSAyMDA0LzA3LzI3IDA2OjU0OjIwIHNha3VnYXdhIEV4cCAkCisgKi8KKworI2lmbmRlZiBfT1BTUFVUX09QU1BVVF9MQ0RfSAorI2RlZmluZSBfT1BTUFVUX09QU1BVVF9MQ0RfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisvKgorICogQyBmdW5jdGlvbnMgdXNlIG5vbi1jYWNoZSBhZGRyZXNzLgorICovCisjZGVmaW5lIE9QU1BVVF9MQ0RfQkFTRQkoMHgxMDAwMDAwMCAvKiArIE5PTkNBQ0hFX09GRlNFVCAqLykKKyNlbHNlCisjZGVmaW5lIE9QU1BVVF9MQ0RfQkFTRQkoMHgxMDAwMDAwMCArIE5PTkNBQ0hFX09GRlNFVCkKKyNlbmRpZgkvKiBfX0FTU0VNQkxZX18gKi8KKworLyoKKyAqIElDVQorICovCisjZGVmaW5lIE9QU1BVVF9MQ0RfSVJRX0JBVF9JTlQJKE9QU1BVVF9MQ0RfUExEX0lSUV9CQVNFICsgMSkKKyNkZWZpbmUgT1BTUFVUX0xDRF9JUlFfVVNCX0lOVDEJKE9QU1BVVF9MQ0RfUExEX0lSUV9CQVNFICsgMikKKyNkZWZpbmUgT1BTUFVUX0xDRF9JUlFfQVVEVDAJCShPUFNQVVRfTENEX1BMRF9JUlFfQkFTRSArIDMpCisjZGVmaW5lIE9QU1BVVF9MQ0RfSVJRX0FVRFQyCQkoT1BTUFVUX0xDRF9QTERfSVJRX0JBU0UgKyA0KQorI2RlZmluZSBPUFNQVVRfTENEX0lSUV9CQVRTSU9fUkNWCShPUFNQVVRfTENEX1BMRF9JUlFfQkFTRSArIDE2KQorI2RlZmluZSBPUFNQVVRfTENEX0lSUV9CQVRTSU9fU05ECShPUFNQVVRfTENEX1BMRF9JUlFfQkFTRSArIDE3KQorI2RlZmluZSBPUFNQVVRfTENEX0lSUV9BU05EU0lPX1JDVgkoT1BTUFVUX0xDRF9QTERfSVJRX0JBU0UgKyAxOCkKKyNkZWZpbmUgT1BTUFVUX0xDRF9JUlFfQVNORFNJT19TTkQJKE9QU1BVVF9MQ0RfUExEX0lSUV9CQVNFICsgMTkpCisjZGVmaW5lIE9QU1BVVF9MQ0RfSVJRX0FDTkxTSU9fU05ECShPUFNQVVRfTENEX1BMRF9JUlFfQkFTRSArIDIxKQorCisjZGVmaW5lIE9QU1BVVF9MQ0RfSUNVSVNUUwlfX3JlZzE2KE9QU1BVVF9MQ0RfQkFTRSArIDB4MzAwMDAyKQorI2RlZmluZSBPUFNQVVRfTENEX0lDVUlTVFNfVkVDQl9NQVNLCSgweGYwMDApCisjZGVmaW5lIE9QU1BVVF9MQ0RfVkVDQih4KQkoKHgpICYgT1BTUFVUX0xDRF9JQ1VJU1RTX1ZFQ0JfTUFTSykKKyNkZWZpbmUgT1BTUFVUX0xDRF9JQ1VJU1RTX0lTTl9NQVNLCSgweDA3YzApCisjZGVmaW5lIE9QU1BVVF9MQ0RfSUNVSVNUU19JU04oeCkJKCh4KSAmIE9QU1BVVF9MQ0RfSUNVSVNUU19JU05fTUFTSykKKyNkZWZpbmUgT1BTUFVUX0xDRF9JQ1VJUkVRMAlfX3JlZzE2KE9QU1BVVF9MQ0RfQkFTRSArIDB4MzAwMDA0KQorI2RlZmluZSBPUFNQVVRfTENEX0lDVUlSRVExCV9fcmVnMTYoT1BTUFVUX0xDRF9CQVNFICsgMHgzMDAwMDYpCisjZGVmaW5lIE9QU1BVVF9MQ0RfSUNVQ1IxCV9fcmVnMTYoT1BTUFVUX0xDRF9CQVNFICsgMHgzMDAwMjApCisjZGVmaW5lIE9QU1BVVF9MQ0RfSUNVQ1IyCV9fcmVnMTYoT1BTUFVUX0xDRF9CQVNFICsgMHgzMDAwMjIpCisjZGVmaW5lIE9QU1BVVF9MQ0RfSUNVQ1IzCV9fcmVnMTYoT1BTUFVUX0xDRF9CQVNFICsgMHgzMDAwMjQpCisjZGVmaW5lIE9QU1BVVF9MQ0RfSUNVQ1I0CV9fcmVnMTYoT1BTUFVUX0xDRF9CQVNFICsgMHgzMDAwMjYpCisjZGVmaW5lIE9QU1BVVF9MQ0RfSUNVQ1IxNglfX3JlZzE2KE9QU1BVVF9MQ0RfQkFTRSArIDB4MzAwMDMwKQorI2RlZmluZSBPUFNQVVRfTENEX0lDVUNSMTcJX19yZWcxNihPUFNQVVRfTENEX0JBU0UgKyAweDMwMDAzMikKKyNkZWZpbmUgT1BTUFVUX0xDRF9JQ1VDUjE4CV9fcmVnMTYoT1BTUFVUX0xDRF9CQVNFICsgMHgzMDAwMzQpCisjZGVmaW5lIE9QU1BVVF9MQ0RfSUNVQ1IxOQlfX3JlZzE2KE9QU1BVVF9MQ0RfQkFTRSArIDB4MzAwMDM2KQorI2RlZmluZSBPUFNQVVRfTENEX0lDVUNSMjEJX19yZWcxNihPUFNQVVRfTENEX0JBU0UgKyAweDMwMDAzYSkKKworI2VuZGlmCS8qIF9PUFNQVVRfT1BTUFVUX0xDRF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL29wc3B1dC9vcHNwdXRfcGxkLmggYi9pbmNsdWRlL2FzbS1tMzJyL29wc3B1dC9vcHNwdXRfcGxkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjAxOGU2OQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvb3BzcHV0L29wc3B1dF9wbGQuaApAQCAtMCwwICsxLDI1OSBAQAorLyoKKyAqIGluY2x1ZGUvYXNtL29wc3B1dC9vcHNwdXRfcGxkLmgKKyAqCisgKiBEZWZpbml0aW9ucyBmb3IgUHJvZ3JhbWFibGUgTG9naWMgRGV2aWNlKFBMRCkgb24gT1BTUFVUIGJvYXJkLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMglUYWtlbyBUYWthaGFzaGkKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mCisgKiB0aGlzIGFyY2hpdmUgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAkSWQ6IG9wc3B1dF9wbGQuaCx2IDEuMSAyMDA0LzA3LzI3IDA2OjU0OjIwIHNha3VnYXdhIEV4cCAkCisgKi8KKworI2lmbmRlZiBfT1BTUFVUX09QU1BVVF9QTERfSAorI2RlZmluZSBfT1BTUFVUX09QU1BVVF9QTERfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNkZWZpbmUgUExEX1BMQVRfQkFTRQkJMHgxY2MwMDAwMAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworLyoKKyAqIEMgZnVuY3Rpb25zIHVzZSBub24tY2FjaGUgYWRkcmVzcy4KKyAqLworI2RlZmluZSBQTERfQkFTRQkJKFBMRF9QTEFUX0JBU0UgLyogKyBOT05DQUNIRV9PRkZTRVQgKi8pCisjZGVmaW5lIF9fcmVnOAkJCSh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopCisjZGVmaW5lIF9fcmVnMTYJCQkodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikKKyNkZWZpbmUgX19yZWczMgkJCSh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikKKyNlbHNlCisjZGVmaW5lIFBMRF9CQVNFCQkoUExEX1BMQVRfQkFTRSArIE5PTkNBQ0hFX09GRlNFVCkKKyNkZWZpbmUgX19yZWc4CisjZGVmaW5lIF9fcmVnMTYKKyNkZWZpbmUgX19yZWczMgorI2VuZGlmCS8qIF9fQVNTRU1CTFlfXyAqLworCisvKiBDRkMgKi8KKyNkZWZpbmUJUExEX0NGUlNUQ1IJCV9fcmVnMTYoUExEX0JBU0UgKyAweDAwMDApCisjZGVmaW5lIFBMRF9DRlNUUwkJX19yZWcxNihQTERfQkFTRSArIDB4MDAwMikKKyNkZWZpbmUgUExEX0NGSU1BU0sJCV9fcmVnMTYoUExEX0JBU0UgKyAweDAwMDQpCisjZGVmaW5lIFBMRF9DRkJVRkNSCQlfX3JlZzE2KFBMRF9CQVNFICsgMHgwMDA2KQorI2RlZmluZSBQTERfQ0ZWRU5DUgkJX19yZWcxNihQTERfQkFTRSArIDB4MDAwOCkKKyNkZWZpbmUgUExEX0NGQ1IwCQlfX3JlZzE2KFBMRF9CQVNFICsgMHgwMDBhKQorI2RlZmluZSBQTERfQ0ZDUjEJCV9fcmVnMTYoUExEX0JBU0UgKyAweDAwMGMpCisjZGVmaW5lIFBMRF9JREVSU1RDUgkJX19yZWcxNihQTERfQkFTRSArIDB4MDAxMCkKKworLyogTU1DICovCisjZGVmaW5lIFBMRF9NTUNDUgkJX19yZWcxNihQTERfQkFTRSArIDB4NDAwMCkKKyNkZWZpbmUgUExEX01NQ01PRAkJX19yZWcxNihQTERfQkFTRSArIDB4NDAwMikKKyNkZWZpbmUgUExEX01NQ1NUUwkJX19yZWcxNihQTERfQkFTRSArIDB4NDAwNikKKyNkZWZpbmUgUExEX01NQ0JBVVIJCV9fcmVnMTYoUExEX0JBU0UgKyAweDQwMGEpCisjZGVmaW5lIFBMRF9NTUNDTURCQ1VUCQlfX3JlZzE2KFBMRF9CQVNFICsgMHg0MDBjKQorI2RlZmluZSBQTERfTU1DQ0RUQkNVVAkJX19yZWcxNihQTERfQkFTRSArIDB4NDAwZSkKKyNkZWZpbmUgUExEX01NQ0RFVAkJX19yZWcxNihQTERfQkFTRSArIDB4NDAxMCkKKyNkZWZpbmUgUExEX01NQ1dQCQlfX3JlZzE2KFBMRF9CQVNFICsgMHg0MDEyKQorI2RlZmluZSBQTERfTU1DV0RBVEEJCV9fcmVnMTYoUExEX0JBU0UgKyAweDUwMDApCisjZGVmaW5lIFBMRF9NTUNSREFUQQkJX19yZWcxNihQTERfQkFTRSArIDB4NjAwMCkKKyNkZWZpbmUgUExEX01NQ0NNRERBVEEJCV9fcmVnMTYoUExEX0JBU0UgKyAweDcwMDApCisjZGVmaW5lIFBMRF9NTUNSU1BEQVRBCQlfX3JlZzE2KFBMRF9CQVNFICsgMHg3MDA2KQorCisvKiBJQ1UKKyAqICBJQ1VJU1RTOglzdGF0dXMgcmVnaXN0ZXIKKyAqICBJQ1VJUkVRMDogCXJlcXVlc3QgcmVnaXN0ZXIKKyAqICBJQ1VJUkVRMTogCXJlcXVlc3QgcmVnaXN0ZXIKKyAqICBJQ1VDUjM6CWNvbnRyb2wgcmVnaXN0ZXIgZm9yIENGSVJFUSMgaW50ZXJydXB0CisgKiAgSUNVQ1I0Ogljb250cm9sIHJlZ2lzdGVyIGZvciBDRkMgQ2FyZCBpbnNlcnQgaW50ZXJydXB0CisgKiAgSUNVQ1I1Ogljb250cm9sIHJlZ2lzdGVyIGZvciBDRkMgQ2FyZCBlamVjdCBpbnRlcnJ1cHQKKyAqICBJQ1VDUjY6CWNvbnRyb2wgcmVnaXN0ZXIgZm9yIGV4dGVybmFsIGludGVycnVwdAorICogIElDVUNSMTE6CWNvbnRyb2wgcmVnaXN0ZXIgZm9yIE1NQyBDYXJkIGluc2VydC9lamVjdCBpbnRlcnJ1cHQKKyAqICBJQ1VDUjEzOgljb250cm9sIHJlZ2lzdGVyIGZvciBTQyBlcnJvciBpbnRlcnJ1cHQKKyAqICBJQ1VDUjE0Ogljb250cm9sIHJlZ2lzdGVyIGZvciBTQyByZWNlaXZlIGludGVycnVwdAorICogIElDVUNSMTU6CWNvbnRyb2wgcmVnaXN0ZXIgZm9yIFNDIHNlbmQgaW50ZXJydXB0CisgKiAgSUNVQ1IxNjoJY29udHJvbCByZWdpc3RlciBmb3IgU0lPMCByZWNlaXZlIGludGVycnVwdAorICogIElDVUNSMTc6CWNvbnRyb2wgcmVnaXN0ZXIgZm9yIFNJTzAgc2VuZCBpbnRlcnJ1cHQKKyAqLworI2lmICFkZWZpbmVkKENPTkZJR19QTEFUX1VTUlYpCisjZGVmaW5lIFBMRF9JUlFfSU5UMAkJKE9QU1BVVF9QTERfSVJRX0JBU0UgKyAwKQkvKiBOb25lICovCisjZGVmaW5lIFBMRF9JUlFfSU5UMQkJKE9QU1BVVF9QTERfSVJRX0JBU0UgKyAxKQkvKiByZXNlcnZlZCAqLworI2RlZmluZSBQTERfSVJRX0lOVDIJCShPUFNQVVRfUExEX0lSUV9CQVNFICsgMikJLyogcmVzZXJ2ZWQgKi8KKyNkZWZpbmUgUExEX0lSUV9DRklSRVEJCShPUFNQVVRfUExEX0lSUV9CQVNFICsgMykJLyogQ0YgSVJFUSAqLworI2RlZmluZSBQTERfSVJRX0NGQ19JTlNFUlQJKE9QU1BVVF9QTERfSVJRX0JBU0UgKyA0KQkvKiBDRiBJbnNlcnQgKi8KKyNkZWZpbmUgUExEX0lSUV9DRkNfRUpFQ1QJKE9QU1BVVF9QTERfSVJRX0JBU0UgKyA1KQkvKiBDRiBFamVjdCAqLworI2RlZmluZSBQTERfSVJRX0VYSU5UCQkoT1BTUFVUX1BMRF9JUlFfQkFTRSArIDYpCS8qIEVYSU5UICovCisjZGVmaW5lIFBMRF9JUlFfSU5UNwkJKE9QU1BVVF9QTERfSVJRX0JBU0UgKyA3KQkvKiByZXNlcnZlZCAqLworI2RlZmluZSBQTERfSVJRX0lOVDgJCShPUFNQVVRfUExEX0lSUV9CQVNFICsgOCkJLyogcmVzZXJ2ZWQgKi8KKyNkZWZpbmUgUExEX0lSUV9JTlQ5CQkoT1BTUFVUX1BMRF9JUlFfQkFTRSArIDkpCS8qIHJlc2VydmVkICovCisjZGVmaW5lIFBMRF9JUlFfSU5UMTAJCShPUFNQVVRfUExEX0lSUV9CQVNFICsgMTApCS8qIHJlc2VydmVkICovCisjZGVmaW5lIFBMRF9JUlFfTU1DQ0FSRAkJKE9QU1BVVF9QTERfSVJRX0JBU0UgKyAxMSkJLyogTU1DIEluc2VydC9FamVjdCAqLworI2RlZmluZSBQTERfSVJRX0lOVDEyCQkoT1BTUFVUX1BMRF9JUlFfQkFTRSArIDEyKQkvKiByZXNlcnZlZCAqLworI2RlZmluZSBQTERfSVJRX1NDX0VSUk9SCShPUFNQVVRfUExEX0lSUV9CQVNFICsgMTMpCS8qIFNDIGVycm9yICovCisjZGVmaW5lIFBMRF9JUlFfU0NfUkNWCQkoT1BTUFVUX1BMRF9JUlFfQkFTRSArIDE0KQkvKiBTQyByZWNlaXZlICovCisjZGVmaW5lIFBMRF9JUlFfU0NfU05ECQkoT1BTUFVUX1BMRF9JUlFfQkFTRSArIDE1KQkvKiBTQyBzZW5kICovCisjZGVmaW5lIFBMRF9JUlFfU0lPMF9SQ1YJKE9QU1BVVF9QTERfSVJRX0JBU0UgKyAxNikJLyogU0lPIHJlY2VpdmUgKi8KKyNkZWZpbmUgUExEX0lSUV9TSU8wX1NORAkoT1BTUFVUX1BMRF9JUlFfQkFTRSArIDE3KQkvKiBTSU8gc2VuZCAqLworI2RlZmluZSBQTERfSVJRX0lOVDE4CQkoT1BTUFVUX1BMRF9JUlFfQkFTRSArIDE4KQkvKiByZXNlcnZlZCAqLworI2RlZmluZSBQTERfSVJRX0lOVDE5CQkoT1BTUFVUX1BMRF9JUlFfQkFTRSArIDE5KQkvKiByZXNlcnZlZCAqLworI2RlZmluZSBQTERfSVJRX0lOVDIwCQkoT1BTUFVUX1BMRF9JUlFfQkFTRSArIDIwKQkvKiByZXNlcnZlZCAqLworI2RlZmluZSBQTERfSVJRX0lOVDIxCQkoT1BTUFVUX1BMRF9JUlFfQkFTRSArIDIxKQkvKiByZXNlcnZlZCAqLworI2RlZmluZSBQTERfSVJRX0lOVDIyCQkoT1BTUFVUX1BMRF9JUlFfQkFTRSArIDIyKQkvKiByZXNlcnZlZCAqLworI2RlZmluZSBQTERfSVJRX0lOVDIzCQkoT1BTUFVUX1BMRF9JUlFfQkFTRSArIDIzKQkvKiByZXNlcnZlZCAqLworI2RlZmluZSBQTERfSVJRX0lOVDI0CQkoT1BTUFVUX1BMRF9JUlFfQkFTRSArIDI0KQkvKiByZXNlcnZlZCAqLworI2RlZmluZSBQTERfSVJRX0lOVDI1CQkoT1BTUFVUX1BMRF9JUlFfQkFTRSArIDI1KQkvKiByZXNlcnZlZCAqLworI2RlZmluZSBQTERfSVJRX0lOVDI2CQkoT1BTUFVUX1BMRF9JUlFfQkFTRSArIDI2KQkvKiByZXNlcnZlZCAqLworI2RlZmluZSBQTERfSVJRX0lOVDI3CQkoT1BTUFVUX1BMRF9JUlFfQkFTRSArIDI3KQkvKiByZXNlcnZlZCAqLworI2RlZmluZSBQTERfSVJRX0lOVDI4CQkoT1BTUFVUX1BMRF9JUlFfQkFTRSArIDI4KQkvKiByZXNlcnZlZCAqLworI2RlZmluZSBQTERfSVJRX0lOVDI5CQkoT1BTUFVUX1BMRF9JUlFfQkFTRSArIDI5KQkvKiByZXNlcnZlZCAqLworI2RlZmluZSBQTERfSVJRX0lOVDMwCQkoT1BTUFVUX1BMRF9JUlFfQkFTRSArIDMwKQkvKiByZXNlcnZlZCAqLworI2RlZmluZSBQTERfSVJRX0lOVDMxCQkoT1BTUFVUX1BMRF9JUlFfQkFTRSArIDMxKQkvKiByZXNlcnZlZCAqLworCisjZWxzZQkvKiBDT05GSUdfUExBVF9VU1JWICovCisKKyNkZWZpbmUgUExEX0lSUV9JTlQwCQkoT1BTUFVUX1BMRF9JUlFfQkFTRSArIDApCS8qIE5vbmUgKi8KKyNkZWZpbmUgUExEX0lSUV9JTlQxCQkoT1BTUFVUX1BMRF9JUlFfQkFTRSArIDEpCS8qIHJlc2VydmVkICovCisjZGVmaW5lIFBMRF9JUlFfSU5UMgkJKE9QU1BVVF9QTERfSVJRX0JBU0UgKyAyKQkvKiByZXNlcnZlZCAqLworI2RlZmluZSBQTERfSVJRX0NGMAkJKE9QU1BVVF9QTERfSVJRX0JBU0UgKyAzKQkvKiBDRjAjICovCisjZGVmaW5lIFBMRF9JUlFfQ0YxCQkoT1BTUFVUX1BMRF9JUlFfQkFTRSArIDQpCS8qIENGMSMgKi8KKyNkZWZpbmUgUExEX0lSUV9DRjIJCShPUFNQVVRfUExEX0lSUV9CQVNFICsgNSkJLyogQ0YyIyAqLworI2RlZmluZSBQTERfSVJRX0NGMwkJKE9QU1BVVF9QTERfSVJRX0JBU0UgKyA2KQkvKiBDRjMjICovCisjZGVmaW5lIFBMRF9JUlFfQ0Y0CQkoT1BTUFVUX1BMRF9JUlFfQkFTRSArIDcpCS8qIENGNCMgKi8KKyNkZWZpbmUgUExEX0lSUV9JTlQ4CQkoT1BTUFVUX1BMRF9JUlFfQkFTRSArIDgpCS8qIHJlc2VydmVkICovCisjZGVmaW5lIFBMRF9JUlFfSU5UOQkJKE9QU1BVVF9QTERfSVJRX0JBU0UgKyA5KQkvKiByZXNlcnZlZCAqLworI2RlZmluZSBQTERfSVJRX0lOVDEwCQkoT1BTUFVUX1BMRF9JUlFfQkFTRSArIDEwKQkvKiByZXNlcnZlZCAqLworI2RlZmluZSBQTERfSVJRX0lOVDExCQkoT1BTUFVUX1BMRF9JUlFfQkFTRSArIDExKQkvKiByZXNlcnZlZCAqLworI2RlZmluZSBQTERfSVJRX1VBUlQwCQkoT1BTUFVUX1BMRF9JUlFfQkFTRSArIDEyKQkvKiBVQVJUSVJRMCAqLworI2RlZmluZSBQTERfSVJRX1VBUlQxCQkoT1BTUFVUX1BMRF9JUlFfQkFTRSArIDEzKQkvKiBVQVJUSVJRMSAqLworI2RlZmluZSBQTERfSVJRX0lOVDE0CQkoT1BTUFVUX1BMRF9JUlFfQkFTRSArIDE0KQkvKiByZXNlcnZlZCAqLworI2RlZmluZSBQTERfSVJRX0lOVDE1CQkoT1BTUFVUX1BMRF9JUlFfQkFTRSArIDE1KQkvKiByZXNlcnZlZCAqLworI2RlZmluZSBQTERfSVJRX1NORElOVAkJKE9QU1BVVF9QTERfSVJRX0JBU0UgKyAxNikJLyogU05ESU5UIyAqLworI2RlZmluZSBQTERfSVJRX0lOVDE3CQkoT1BTUFVUX1BMRF9JUlFfQkFTRSArIDE3KQkvKiByZXNlcnZlZCAqLworI2RlZmluZSBQTERfSVJRX0lOVDE4CQkoT1BTUFVUX1BMRF9JUlFfQkFTRSArIDE4KQkvKiByZXNlcnZlZCAqLworI2RlZmluZSBQTERfSVJRX0lOVDE5CQkoT1BTUFVUX1BMRF9JUlFfQkFTRSArIDE5KQkvKiByZXNlcnZlZCAqLworI2RlZmluZSBQTERfSVJRX0lOVDIwCQkoT1BTUFVUX1BMRF9JUlFfQkFTRSArIDIwKQkvKiByZXNlcnZlZCAqLworI2RlZmluZSBQTERfSVJRX0lOVDIxCQkoT1BTUFVUX1BMRF9JUlFfQkFTRSArIDIxKQkvKiByZXNlcnZlZCAqLworI2RlZmluZSBQTERfSVJRX0lOVDIyCQkoT1BTUFVUX1BMRF9JUlFfQkFTRSArIDIyKQkvKiByZXNlcnZlZCAqLworI2RlZmluZSBQTERfSVJRX0lOVDIzCQkoT1BTUFVUX1BMRF9JUlFfQkFTRSArIDIzKQkvKiByZXNlcnZlZCAqLworI2RlZmluZSBQTERfSVJRX0lOVDI0CQkoT1BTUFVUX1BMRF9JUlFfQkFTRSArIDI0KQkvKiByZXNlcnZlZCAqLworI2RlZmluZSBQTERfSVJRX0lOVDI1CQkoT1BTUFVUX1BMRF9JUlFfQkFTRSArIDI1KQkvKiByZXNlcnZlZCAqLworI2RlZmluZSBQTERfSVJRX0lOVDI2CQkoT1BTUFVUX1BMRF9JUlFfQkFTRSArIDI2KQkvKiByZXNlcnZlZCAqLworI2RlZmluZSBQTERfSVJRX0lOVDI3CQkoT1BTUFVUX1BMRF9JUlFfQkFTRSArIDI3KQkvKiByZXNlcnZlZCAqLworI2RlZmluZSBQTERfSVJRX0lOVDI4CQkoT1BTUFVUX1BMRF9JUlFfQkFTRSArIDI4KQkvKiByZXNlcnZlZCAqLworI2RlZmluZSBQTERfSVJRX0lOVDI5CQkoT1BTUFVUX1BMRF9JUlFfQkFTRSArIDI5KQkvKiByZXNlcnZlZCAqLworI2RlZmluZSBQTERfSVJRX0lOVDMwCQkoT1BTUFVUX1BMRF9JUlFfQkFTRSArIDMwKQkvKiByZXNlcnZlZCAqLworCisjZW5kaWYJLyogQ09ORklHX1BMQVRfVVNSViAqLworCisjZGVmaW5lIFBMRF9JQ1VJU1RTCQlfX3JlZzE2KFBMRF9CQVNFICsgMHg4MDAyKQorI2RlZmluZSBQTERfSUNVSVNUU19WRUNCX01BU0sJKDB4ZjAwMCkKKyNkZWZpbmUgUExEX0lDVUlTVFNfVkVDQih4KQkoKHgpICYgUExEX0lDVUlTVFNfVkVDQl9NQVNLKQorI2RlZmluZSBQTERfSUNVSVNUU19JU05fTUFTSwkoMHgwN2MwKQorI2RlZmluZSBQTERfSUNVSVNUU19JU04oeCkJKCh4KSAmIFBMRF9JQ1VJU1RTX0lTTl9NQVNLKQorI2RlZmluZSBQTERfSUNVSVJFUTAJCV9fcmVnMTYoUExEX0JBU0UgKyAweDgwMDQpCisjZGVmaW5lIFBMRF9JQ1VJUkVRMQkJX19yZWcxNihQTERfQkFTRSArIDB4ODAwNikKKyNkZWZpbmUgUExEX0lDVUNSMQkJX19yZWcxNihQTERfQkFTRSArIDB4ODEwMCkKKyNkZWZpbmUgUExEX0lDVUNSMgkJX19yZWcxNihQTERfQkFTRSArIDB4ODEwMikKKyNkZWZpbmUgUExEX0lDVUNSMwkJX19yZWcxNihQTERfQkFTRSArIDB4ODEwNCkKKyNkZWZpbmUgUExEX0lDVUNSNAkJX19yZWcxNihQTERfQkFTRSArIDB4ODEwNikKKyNkZWZpbmUgUExEX0lDVUNSNQkJX19yZWcxNihQTERfQkFTRSArIDB4ODEwOCkKKyNkZWZpbmUgUExEX0lDVUNSNgkJX19yZWcxNihQTERfQkFTRSArIDB4ODEwYSkKKyNkZWZpbmUgUExEX0lDVUNSNwkJX19yZWcxNihQTERfQkFTRSArIDB4ODEwYykKKyNkZWZpbmUgUExEX0lDVUNSOAkJX19yZWcxNihQTERfQkFTRSArIDB4ODEwZSkKKyNkZWZpbmUgUExEX0lDVUNSOQkJX19yZWcxNihQTERfQkFTRSArIDB4ODExMCkKKyNkZWZpbmUgUExEX0lDVUNSMTAJCV9fcmVnMTYoUExEX0JBU0UgKyAweDgxMTIpCisjZGVmaW5lIFBMRF9JQ1VDUjExCQlfX3JlZzE2KFBMRF9CQVNFICsgMHg4MTE0KQorI2RlZmluZSBQTERfSUNVQ1IxMgkJX19yZWcxNihQTERfQkFTRSArIDB4ODExNikKKyNkZWZpbmUgUExEX0lDVUNSMTMJCV9fcmVnMTYoUExEX0JBU0UgKyAweDgxMTgpCisjZGVmaW5lIFBMRF9JQ1VDUjE0CQlfX3JlZzE2KFBMRF9CQVNFICsgMHg4MTFhKQorI2RlZmluZSBQTERfSUNVQ1IxNQkJX19yZWcxNihQTERfQkFTRSArIDB4ODExYykKKyNkZWZpbmUgUExEX0lDVUNSMTYJCV9fcmVnMTYoUExEX0JBU0UgKyAweDgxMWUpCisjZGVmaW5lIFBMRF9JQ1VDUjE3CQlfX3JlZzE2KFBMRF9CQVNFICsgMHg4MTIwKQorI2RlZmluZSBQTERfSUNVQ1JfSUVOCQkoMHgxMDAwKQorI2RlZmluZSBQTERfSUNVQ1JfSVJFUQkJKDB4MDEwMCkKKyNkZWZpbmUgUExEX0lDVUNSX0lTTU9EMDAJKDB4MDAwMCkJLyogTG93IGVkZ2UgKi8KKyNkZWZpbmUgUExEX0lDVUNSX0lTTU9EMDEJKDB4MDAxMCkJLyogTG93IGxldmVsICovCisjZGVmaW5lIFBMRF9JQ1VDUl9JU01PRDAyCSgweDAwMjApCS8qIEhpZ2ggZWRnZSAqLworI2RlZmluZSBQTERfSUNVQ1JfSVNNT0QwMwkoMHgwMDMwKQkvKiBIaWdoIGxldmVsICovCisjZGVmaW5lIFBMRF9JQ1VDUl9JTEVWRUwwCSgweDAwMDApCisjZGVmaW5lIFBMRF9JQ1VDUl9JTEVWRUwxCSgweDAwMDEpCisjZGVmaW5lIFBMRF9JQ1VDUl9JTEVWRUwyCSgweDAwMDIpCisjZGVmaW5lIFBMRF9JQ1VDUl9JTEVWRUwzCSgweDAwMDMpCisjZGVmaW5lIFBMRF9JQ1VDUl9JTEVWRUw0CSgweDAwMDQpCisjZGVmaW5lIFBMRF9JQ1VDUl9JTEVWRUw1CSgweDAwMDUpCisjZGVmaW5lIFBMRF9JQ1VDUl9JTEVWRUw2CSgweDAwMDYpCisjZGVmaW5lIFBMRF9JQ1VDUl9JTEVWRUw3CSgweDAwMDcpCisKKy8qIFBvd2VyIENvbnRyb2wgb2YgTU1DIGFuZCBDRiAqLworI2RlZmluZSBQTERfQ1BDUgkJX19yZWcxNihQTERfQkFTRSArIDB4MTQwMDApCisjZGVmaW5lIFBMRF9DUENSX0NGCQkweDAwMDEKKyNkZWZpbmUgUExEX0NQQ1JfTU1DCQkweDAwMDIKKworLyogTEVEIENvbnRyb2wKKyAqCisgKiAxOiBESVAgc3dpY2ggc2lkZQorICogMjogUmVzZXQgc3dpdGNoIHNpZGUKKyAqLworI2RlZmluZSBQTERfSU9MRURDUgkJX19yZWcxNihQTERfQkFTRSArIDB4MTQwMDIpCisjZGVmaW5lIFBMRF9JT0xFRF8xX09OCQkweDAwMQorI2RlZmluZSBQTERfSU9MRURfMV9PRkYJCTB4MDAwCisjZGVmaW5lIFBMRF9JT0xFRF8yX09OCQkweDAwMgorI2RlZmluZSBQTERfSU9MRURfMl9PRkYJCTB4MDAwCisKKy8qIERJUCBTd2l0Y2gKKyAqICAwOiBXcml0ZS1wcm90ZWN0IG9mIEZsYXNoIE1lbW9yeSAoMDpwcm90ZWN0ZWQsIDE6bm9uLXByb3RlY3RlZCkKKyAqICAxOiAtCisgKiAgMjogLQorICogIDM6IC0KKyAqLworI2RlZmluZSBQTERfSU9TV1NUUwkJX19yZWcxNihQTERfQkFTRSArIDB4MTQwMDQpCisjZGVmaW5lCVBMRF9JT1NXU1RTX0lPU1cyCTB4MDIwMAorI2RlZmluZQlQTERfSU9TV1NUU19JT1NXMQkweDAxMDAKKyNkZWZpbmUJUExEX0lPU1dTVFNfSU9XUDAJMHgwMDAxCisKKy8qIENSQyAqLworI2RlZmluZSBQTERfQ1JDN0RBVEEJCV9fcmVnMTYoUExEX0JBU0UgKyAweDE4MDAwKQorI2RlZmluZSBQTERfQ1JDN0lOREFUQQkJX19yZWcxNihQTERfQkFTRSArIDB4MTgwMDIpCisjZGVmaW5lIFBMRF9DUkMxNkRBVEEJCV9fcmVnMTYoUExEX0JBU0UgKyAweDE4MDA0KQorI2RlZmluZSBQTERfQ1JDMTZJTkRBVEEJCV9fcmVnMTYoUExEX0JBU0UgKyAweDE4MDA2KQorI2RlZmluZSBQTERfQ1JDMTZBREFUQQkJX19yZWcxNihQTERfQkFTRSArIDB4MTgwMDgpCisjZGVmaW5lIFBMRF9DUkMxNkFJTkRBVEEJX19yZWcxNihQTERfQkFTRSArIDB4MTgwMGEpCisKKy8qIFJUQyAqLworI2RlZmluZSBQTERfUlRDQ1IJCV9fcmVnMTYoUExEX0JBU0UgKyAweDFjMDAwKQorI2RlZmluZSBQTERfUlRDQkFVUgkJX19yZWcxNihQTERfQkFTRSArIDB4MWMwMDIpCisjZGVmaW5lIFBMRF9SVENXUkRBVEEJCV9fcmVnMTYoUExEX0JBU0UgKyAweDFjMDA0KQorI2RlZmluZSBQTERfUlRDUkREQVRBCQlfX3JlZzE2KFBMRF9CQVNFICsgMHgxYzAwNikKKyNkZWZpbmUgUExEX1JUQ1JTVE9EVAkJX19yZWcxNihQTERfQkFTRSArIDB4MWMwMDgpCisKKy8qIFNJTzAgKi8KKyNkZWZpbmUgUExEX0VTSU8wQ1IJCV9fcmVnMTYoUExEX0JBU0UgKyAweDIwMDAwKQorI2RlZmluZQlQTERfRVNJTzBDUl9UWEVOCTB4MDAwMQorI2RlZmluZQlQTERfRVNJTzBDUl9SWEVOCTB4MDAwMgorI2RlZmluZSBQTERfRVNJTzBNT0QwCQlfX3JlZzE2KFBMRF9CQVNFICsgMHgyMDAwMikKKyNkZWZpbmUJUExEX0VTSU8wTU9EMF9DVFNTCTB4MDA0MAorI2RlZmluZQlQTERfRVNJTzBNT0QwX1JUU1MJMHgwMDgwCisjZGVmaW5lIFBMRF9FU0lPME1PRDEJCV9fcmVnMTYoUExEX0JBU0UgKyAweDIwMDA0KQorI2RlZmluZQlQTERfRVNJTzBNT0QxX0xNRlMJMHgwMDEwCisjZGVmaW5lIFBMRF9FU0lPMFNUUwkJX19yZWcxNihQTERfQkFTRSArIDB4MjAwMDYpCisjZGVmaW5lCVBMRF9FU0lPMFNUU19URU1QCTB4MDAwMQorI2RlZmluZQlQTERfRVNJTzBTVFNfVFhDUAkweDAwMDIKKyNkZWZpbmUJUExEX0VTSU8wU1RTX1JYQ1AJMHgwMDA0CisjZGVmaW5lCVBMRF9FU0lPMFNUU19UWFNDCTB4MDEwMAorI2RlZmluZQlQTERfRVNJTzBTVFNfUlhTQwkweDAyMDAKKyNkZWZpbmUgUExEX0VTSU8wU1RTX1RYUkVBRFkJKFBMRF9FU0lPMFNUU19UWENQIHwgUExEX0VTSU8wU1RTX1RFTVApCisjZGVmaW5lIFBMRF9FU0lPMElOVENSCQlfX3JlZzE2KFBMRF9CQVNFICsgMHgyMDAwOCkKKyNkZWZpbmUJUExEX0VTSU8wSU5UQ1JfVFhJRU4JMHgwMDAyCisjZGVmaW5lCVBMRF9FU0lPMElOVENSX1JYQ0VOCTB4MDAwNAorI2RlZmluZSBQTERfRVNJTzBCQVVSCQlfX3JlZzE2KFBMRF9CQVNFICsgMHgyMDAwYSkKKyNkZWZpbmUgUExEX0VTSU8wVFhCCQlfX3JlZzE2KFBMRF9CQVNFICsgMHgyMDAwYykKKyNkZWZpbmUgUExEX0VTSU8wUlhCCQlfX3JlZzE2KFBMRF9CQVNFICsgMHgyMDAwZSkKKworLyogU0lNIENhcmQgKi8KKyNkZWZpbmUgUExEX1NDQ1IJCV9fcmVnMTYoUExEX0JBU0UgKyAweDM4MDAwKQorI2RlZmluZSBQTERfU0NNT0QJCV9fcmVnMTYoUExEX0JBU0UgKyAweDM4MDA0KQorI2RlZmluZSBQTERfU0NTVFMJCV9fcmVnMTYoUExEX0JBU0UgKyAweDM4MDA2KQorI2RlZmluZSBQTERfU0NJTlRDUgkJX19yZWcxNihQTERfQkFTRSArIDB4MzgwMDgpCisjZGVmaW5lIFBMRF9TQ0JBVVIJCV9fcmVnMTYoUExEX0JBU0UgKyAweDM4MDBhKQorI2RlZmluZSBQTERfU0NUWEIJCV9fcmVnMTYoUExEX0JBU0UgKyAweDM4MDBjKQorI2RlZmluZSBQTERfU0NSWEIJCV9fcmVnMTYoUExEX0JBU0UgKyAweDM4MDBlKQorCisjZW5kaWYJLyogX09QU1BVVF9PUFNQVVRfUExELkggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvcGFnZS5oIGIvaW5jbHVkZS9hc20tbTMyci9wYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM2YWJiOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvcGFnZS5oCkBAIC0wLDAgKzEsMTE1IEBACisjaWZuZGVmIF9BU01fTTMyUl9QQUdFX0gKKyNkZWZpbmUgX0FTTV9NMzJSX1BBR0VfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKy8qIFBBR0VfU0hJRlQgZGV0ZXJtaW5lcyB0aGUgcGFnZSBzaXplICovCisjZGVmaW5lIFBBR0VfU0hJRlQJMTIKKyNkZWZpbmUgUEFHRV9TSVpFCSgxVUwgPDwgUEFHRV9TSElGVCkKKyNkZWZpbmUgUEFHRV9NQVNLCSh+KFBBR0VfU0laRS0xKSkKKworI2lmZGVmIF9fS0VSTkVMX18KKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK2V4dGVybiB2b2lkIGNsZWFyX3BhZ2Uodm9pZCAqdG8pOworZXh0ZXJuIHZvaWQgY29weV9wYWdlKHZvaWQgKnRvLCB2b2lkICpmcm9tKTsKKworI2RlZmluZSBjbGVhcl91c2VyX3BhZ2UocGFnZSwgdmFkZHIsIHBnKQljbGVhcl9wYWdlKHBhZ2UpCisjZGVmaW5lIGNvcHlfdXNlcl9wYWdlKHRvLCBmcm9tLCB2YWRkciwgcGcpCWNvcHlfcGFnZSh0bywgZnJvbSkKKworI2RlZmluZSBhbGxvY196ZXJvZWRfdXNlcl9oaWdocGFnZSh2bWEsIHZhZGRyKSBhbGxvY19wYWdlX3ZtYShHRlBfSElHSFVTRVIgfCBfX0dGUF9aRVJPLCB2bWEsIHZhZGRyKQorI2RlZmluZSBfX0hBVkVfQVJDSF9BTExPQ19aRVJPRURfVVNFUl9ISUdIUEFHRQorCisvKgorICogVGhlc2UgYXJlIHVzZWQgdG8gbWFrZSB1c2Ugb2YgQyB0eXBlLWNoZWNraW5nLi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHB0ZTsgfSBwdGVfdDsKK3R5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBwbWQ7IH0gcG1kX3Q7Cit0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgcGdkOyB9IHBnZF90OworI2RlZmluZSBwdGVfdmFsKHgpCSgoeCkucHRlKQorI2RlZmluZSBQVEVfTUFTSwlQQUdFX01BU0sKKwordHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHBncHJvdDsgfSBwZ3Byb3RfdDsKKworI2RlZmluZSBwbWRfdmFsKHgpCSgoeCkucG1kKQorI2RlZmluZSBwZ2RfdmFsKHgpCSgoeCkucGdkKQorI2RlZmluZSBwZ3Byb3RfdmFsKHgpCSgoeCkucGdwcm90KQorCisjZGVmaW5lIF9fcHRlKHgpICgocHRlX3QpIHsgKHgpIH0gKQorI2RlZmluZSBfX3BtZCh4KSAoKHBtZF90KSB7ICh4KSB9ICkKKyNkZWZpbmUgX19wZ2QoeCkgKChwZ2RfdCkgeyAoeCkgfSApCisjZGVmaW5lIF9fcGdwcm90KHgpCSgocGdwcm90X3QpIHsgKHgpIH0gKQorCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisvKiB0byBhbGlnbiB0aGUgcG9pbnRlciB0byB0aGUgKG5leHQpIHBhZ2UgYm91bmRhcnkgKi8KKyNkZWZpbmUgUEFHRV9BTElHTihhZGRyKQkoKChhZGRyKSArIFBBR0VfU0laRSAtIDEpICYgUEFHRV9NQVNLKQorCisvKgorICogVGhpcyBoYW5kbGVzIHRoZSBtZW1vcnkgbWFwLi4gV2UgY291bGQgbWFrZSB0aGlzIGEgY29uZmlnCisgKiBvcHRpb24sIGJ1dCB0b28gbWFueSBwZW9wbGUgc2NyZXcgaXQgdXAsIGFuZCB0b28gZmV3IG5lZWQKKyAqIGl0LgorICoKKyAqIEEgX19QQUdFX09GRlNFVCBvZiAweEMwMDAwMDAwIG1lYW5zIHRoYXQgdGhlIGtlcm5lbCBoYXMKKyAqIGEgdmlydHVhbCBhZGRyZXNzIHNwYWNlIG9mIG9uZSBnaWdhYnl0ZSwgd2hpY2ggbGltaXRzIHRoZQorICogYW1vdW50IG9mIHBoeXNpY2FsIG1lbW9yeSB5b3UgY2FuIHVzZSB0byBhYm91dCA5NTBNQi4KKyAqCisgKiBJZiB5b3Ugd2FudCBtb3JlIHBoeXNpY2FsIG1lbW9yeSB0aGFuIHRoaXMgdGhlbiBzZWUgdGhlIENPTkZJR19ISUdITUVNNEcKKyAqIGFuZCBDT05GSUdfSElHSE1FTTY0RyBvcHRpb25zIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4KKyAqLworCisKKy8qIFRoaXMgaGFuZGxlcyB0aGUgbWVtb3J5IG1hcC4uICovCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKy8qIFB1cmUgMl5uIHZlcnNpb24gb2YgZ2V0X29yZGVyICovCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgZ2V0X29yZGVyKHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlpbnQgb3JkZXI7CisKKwlzaXplID0gKHNpemUgLSAxKSA+PiAoUEFHRV9TSElGVCAtIDEpOworCW9yZGVyID0gLTE7CisJZG8geworCQlzaXplID4+PSAxOworCQlvcmRlcisrOworCX0gd2hpbGUgKHNpemUpOworCisJcmV0dXJuIG9yZGVyOworfQorCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKyNkZWZpbmUgX19NRU1PUllfU1RBUlQgIENPTkZJR19NRU1PUllfU1RBUlQKKyNkZWZpbmUgX19NRU1PUllfU0laRSAgIENPTkZJR19NRU1PUllfU0laRQorCisjaWZkZWYgQ09ORklHX01NVQorI2RlZmluZSBfX1BBR0VfT0ZGU0VUICAoMHg4MDAwMDAwMCkKKyNlbHNlCisjZGVmaW5lIF9fUEFHRV9PRkZTRVQgICgweDAwMDAwMDAwKQorI2VuZGlmCisKKyNkZWZpbmUgUEFHRV9PRkZTRVQJCSgodW5zaWduZWQgbG9uZylfX1BBR0VfT0ZGU0VUKQorI2RlZmluZSBfX3BhKHgpCQkJKCh1bnNpZ25lZCBsb25nKSh4KSAtIFBBR0VfT0ZGU0VUKQorI2RlZmluZSBfX3ZhKHgpCQkJKCh2b2lkICopKCh1bnNpZ25lZCBsb25nKSh4KSArIFBBR0VfT0ZGU0VUKSkKKworI2lmbmRlZiBDT05GSUdfRElTQ09OVElHTUVNCisjZGVmaW5lIFBGTl9CQVNFCQkoQ09ORklHX01FTU9SWV9TVEFSVCA+PiBQQUdFX1NISUZUKQorI2RlZmluZSBwZm5fdG9fcGFnZShwZm4pCShtZW1fbWFwICsgKChwZm4pIC0gUEZOX0JBU0UpKQorI2RlZmluZSBwYWdlX3RvX3BmbihwYWdlKQlcCisJKCh1bnNpZ25lZCBsb25nKSgocGFnZSkgLSBtZW1fbWFwKSArIFBGTl9CQVNFKQorI2RlZmluZSBwZm5fdmFsaWQocGZuKQkJKCgocGZuKSAtIFBGTl9CQVNFKSA8IG1heF9tYXBucikKKyNlbmRpZiAgLyogIUNPTkZJR19ESVNDT05USUdNRU0gKi8KKworI2RlZmluZSB2aXJ0X3RvX3BhZ2Uoa2FkZHIpCXBmbl90b19wYWdlKF9fcGEoa2FkZHIpID4+IFBBR0VfU0hJRlQpCisjZGVmaW5lIHZpcnRfYWRkcl92YWxpZChrYWRkcikJcGZuX3ZhbGlkKF9fcGEoa2FkZHIpID4+IFBBR0VfU0hJRlQpCisKKyNkZWZpbmUgVk1fREFUQV9ERUZBVUxUX0ZMQUdTCShWTV9SRUFEIHwgVk1fV1JJVEUgfCBWTV9FWEVDIHwgXAorCQkJCSBWTV9NQVlSRUFEIHwgVk1fTUFZV1JJVEUgfCBWTV9NQVlFWEVDICkKKworI2RlZmluZSBkZXZtZW1faXNfYWxsb3dlZCh4KSAxCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfQVNNX00zMlJfUEFHRV9IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvcGFyYW0uaCBiL2luY2x1ZGUvYXNtLW0zMnIvcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTBiOTM4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTMyci9wYXJhbS5oCkBAIC0wLDAgKzEsMjcgQEAKKyNpZm5kZWYgX0FTTV9NMzJSX1BBUkFNX0gKKyNkZWZpbmUgX0FTTV9NMzJSX1BBUkFNX0gKKworLyogJElkJCAqLworCisvKiBvcmlnIDogaTM4NiAyLjUuNjcgKi8KKworI2lmZGVmIF9fS0VSTkVMX18KKyMgZGVmaW5lIEhaCQkxMDAJCS8qIEludGVybmFsIGtlcm5lbCB0aW1lciBmcmVxdWVuY3kgKi8KKyMgZGVmaW5lIFVTRVJfSFoJMTAwCQkvKiAuLiBzb21lIHVzZXIgaW50ZXJmYWNlcyBhcmUgaW4gInRpY2tzIiAqLworIyBkZWZpbmUgQ0xPQ0tTX1BFUl9TRUMJKFVTRVJfSFopCS8qIGxpa2UgdGltZXMoKSAqLworI2VuZGlmCisKKyNpZm5kZWYgSFoKKyNkZWZpbmUgSFogMTAwCisjZW5kaWYKKworI2RlZmluZSBFWEVDX1BBR0VTSVpFCTQwOTYKKworI2lmbmRlZiBOT0dST1VQCisjZGVmaW5lIE5PR1JPVVAJCSgtMSkKKyNlbmRpZgorCisjZGVmaW5lIE1BWEhPU1ROQU1FTEVOCTY0CS8qIG1heCBsZW5ndGggb2YgaG9zdG5hbWUgKi8KKworI2VuZGlmIC8qIF9BU01fTTMyUl9QQVJBTV9IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvcGNpLmggYi9pbmNsdWRlL2FzbS1tMzJyL3BjaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwZDdiNmYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL3BjaS5oCkBAIC0wLDAgKzEsMTAgQEAKKyNpZm5kZWYgX0FTTV9NMzJSX1BDSV9ICisjZGVmaW5lIF9BU01fTTMyUl9QQ0lfSAorCisvKiAkSWQkICovCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wY2kuaD4KKworI2RlZmluZSBQQ0lfRE1BX0JVU19JU19QSFlTCSgxKQorCisjZW5kaWYgLyogX0FTTV9NMzJSX1BDSV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL3BlcmNwdS5oIGIvaW5jbHVkZS9hc20tbTMyci9wZXJjcHUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzE2OTMwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTMyci9wZXJjcHUuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19BUkNIX00zMlJfUEVSQ1BVX18KKyNkZWZpbmUgX19BUkNIX00zMlJfUEVSQ1BVX18KKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BlcmNwdS5oPgorCisjZW5kaWYgLyogX19BUkNIX00zMlJfUEVSQ1BVX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvcGdhbGxvYy5oIGIvaW5jbHVkZS9hc20tbTMyci9wZ2FsbG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRhMzA5YgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvcGdhbGxvYy5oCkBAIC0wLDAgKzEsNzggQEAKKyNpZm5kZWYgX0FTTV9NMzJSX1BHQUxMT0NfSAorI2RlZmluZSBfQVNNX00zMlJfUEdBTExPQ19ICisKKy8qICRJZCQgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2RlZmluZSBwbWRfcG9wdWxhdGVfa2VybmVsKG1tLCBwbWQsIHB0ZSkJXAorCXNldF9wbWQocG1kLCBfX3BtZChfUEFHRV9UQUJMRSArIF9fcGEocHRlKSkpCisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgcG1kX3BvcHVsYXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLAorCXN0cnVjdCBwYWdlICpwdGUpCit7CisJc2V0X3BtZChwbWQsIF9fcG1kKF9QQUdFX1RBQkxFICsgcGFnZV90b19waHlzKHB0ZSkpKTsKK30KKworLyoKKyAqIEFsbG9jYXRlIGFuZCBmcmVlIHBhZ2UgdGFibGVzLgorICovCitzdGF0aWMgX19pbmxpbmVfXyBwZ2RfdCAqcGdkX2FsbG9jKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCXBnZF90ICpwZ2QgPSAocGdkX3QgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTHxfX0dGUF9aRVJPKTsKKworCXJldHVybiBwZ2Q7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgcGdkX2ZyZWUocGdkX3QgKnBnZCkKK3sKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcGdkKTsKK30KKworc3RhdGljIF9faW5saW5lX18gcHRlX3QgKnB0ZV9hbGxvY19vbmVfa2VybmVsKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCXVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwlwdGVfdCAqcHRlID0gKHB0ZV90ICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUx8X19HRlBfWkVSTyk7CisKKwlyZXR1cm4gcHRlOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBzdHJ1Y3QgcGFnZSAqcHRlX2FsbG9jX29uZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwl1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisJc3RydWN0IHBhZ2UgKnB0ZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTHxfX0dGUF9aRVJPKTsKKworCisJcmV0dXJuIHB0ZTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBwdGVfZnJlZV9rZXJuZWwocHRlX3QgKnB0ZSkKK3sKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcHRlKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBwdGVfZnJlZShzdHJ1Y3QgcGFnZSAqcHRlKQoreworCV9fZnJlZV9wYWdlKHB0ZSk7Cit9CisKKyNkZWZpbmUgX19wdGVfZnJlZV90bGIodGxiLCBwdGUpCXB0ZV9mcmVlKChwdGUpKQorCisvKgorICogYWxsb2NhdGluZyBhbmQgZnJlZWluZyBhIHBtZCBpcyB0cml2aWFsOiB0aGUgMS1lbnRyeSBwbWQgaXMKKyAqIGluc2lkZSB0aGUgcGdkLCBzbyBoYXMgbm8gZXh0cmEgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCBpdC4KKyAqIChJbiB0aGUgUEFFIGNhc2Ugd2UgZnJlZSB0aGUgcG1kcyBhcyBwYXJ0IG9mIHRoZSBwZ2QuKQorICovCisKKyNkZWZpbmUgcG1kX2FsbG9jX29uZShtbSwgYWRkcikJCSh7IEJVRygpOyAoKHBtZF90ICopMik7IH0pCisjZGVmaW5lIHBtZF9mcmVlKHgpCQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBfX3BtZF9mcmVlX3RsYih0bGIsIHgpCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHBnZF9wb3B1bGF0ZShtbSwgcG1kLCBwdGUpCUJVRygpCisKKyNkZWZpbmUgY2hlY2tfcGd0X2NhY2hlKCkJZG8geyB9IHdoaWxlICgwKQorCisjZW5kaWYgLyogX0FTTV9NMzJSX1BHQUxMT0NfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL3BndGFibGUtMmxldmVsLmggYi9pbmNsdWRlL2FzbS1tMzJyL3BndGFibGUtMmxldmVsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODYxNzI3YzIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL3BndGFibGUtMmxldmVsLmgKQEAgLTAsMCArMSw3OCBAQAorI2lmbmRlZiBfQVNNX00zMlJfUEdUQUJMRV8yTEVWRUxfSAorI2RlZmluZSBfQVNNX00zMlJfUEdUQUJMRV8yTEVWRUxfSAorCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKy8qCisgKiB0cmFkaXRpb25hbCBNMzJSIHR3by1sZXZlbCBwYWdpbmcgc3RydWN0dXJlOgorICovCisKKyNkZWZpbmUgUEdESVJfU0hJRlQJMjIKKyNkZWZpbmUgUFRSU19QRVJfUEdECTEwMjQKKworLyoKKyAqIHRoZSBNMzJSIGlzIHR3by1sZXZlbCwgc28gd2UgZG9uJ3QgcmVhbGx5IGhhdmUgYW55CisgKiBQTUQgZGlyZWN0b3J5IHBoeXNpY2FsbHkuCisgKi8KKyNkZWZpbmUgUE1EX1NISUZUCTIyCisjZGVmaW5lIFBUUlNfUEVSX1BNRAkxCisKKyNkZWZpbmUgUFRSU19QRVJfUFRFCTEwMjQKKworI2RlZmluZSBwdGVfRVJST1IoZSkgXAorCXByaW50aygiJXM6JWQ6IGJhZCBwdGUgJTA4bHguXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sIHB0ZV92YWwoZSkpCisjZGVmaW5lIHBtZF9FUlJPUihlKSBcCisJcHJpbnRrKCIlczolZDogYmFkIHBtZCAlMDhseC5cbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgcG1kX3ZhbChlKSkKKyNkZWZpbmUgcGdkX0VSUk9SKGUpIFwKKwlwcmludGsoIiVzOiVkOiBiYWQgcGdkICUwOGx4LlxuIiwgX19GSUxFX18sIF9fTElORV9fLCBwZ2RfdmFsKGUpKQorCisvKgorICogVGhlICJwZ2RfeHh4KCkiIGZ1bmN0aW9ucyBoZXJlIGFyZSB0cml2aWFsIGZvciBhIGZvbGRlZCB0d28tbGV2ZWwKKyAqIHNldHVwOiB0aGUgcGdkIGlzIG5ldmVyIGJhZCwgYW5kIGEgcG1kIGFsd2F5cyBleGlzdHMgKGFzIGl0J3MgZm9sZGVkCisgKiBpbnRvIHRoZSBwZ2QgZW50cnkpCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHBnZF9ub25lKHBnZF90IHBnZCkJeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSBpbnQgcGdkX2JhZChwZ2RfdCBwZ2QpCXsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHBnZF9wcmVzZW50KHBnZF90IHBnZCkJeyByZXR1cm4gMTsgfQorI2RlZmluZSBwZ2RfY2xlYXIoeHApCQkJCWRvIHsgfSB3aGlsZSAoMCkKKworLyoKKyAqIENlcnRhaW4gYXJjaGl0ZWN0dXJlcyBuZWVkIHRvIGRvIHNwZWNpYWwgdGhpbmdzIHdoZW4gUFRFcworICogd2l0aGluIGEgcGFnZSB0YWJsZSBhcmUgZGlyZWN0bHkgbW9kaWZpZWQuICBUaHVzLCB0aGUgZm9sbG93aW5nCisgKiBob29rIGlzIG1hZGUgYXZhaWxhYmxlLgorICovCisjZGVmaW5lIHNldF9wdGUocHRlcHRyLCBwdGV2YWwpICgqKHB0ZXB0cikgPSBwdGV2YWwpCisjZGVmaW5lIHNldF9wdGVfYXQobW0sYWRkcixwdGVwLHB0ZXZhbCkgc2V0X3B0ZShwdGVwLHB0ZXZhbCkKKyNkZWZpbmUgc2V0X3B0ZV9hdG9taWMocHRlcHRyLCBwdGV2YWwpCXNldF9wdGUocHRlcHRyLCBwdGV2YWwpCisvKgorICogKHBtZHMgYXJlIGZvbGRlZCBpbnRvIHBnZHMgc28gdGhpcyBkb2VzbnQgZ2V0IGFjdHVhbGx5IGNhbGxlZCwKKyAqIGJ1dCB0aGUgZGVmaW5lIGlzIG5lZWRlZCBmb3IgYSBnZW5lcmljIGlubGluZSBmdW5jdGlvbi4pCisgKi8KKyNkZWZpbmUgc2V0X3BtZChwbWRwdHIsIHBtZHZhbCkgKCoocG1kcHRyKSA9IHBtZHZhbCkKKyNkZWZpbmUgc2V0X3BnZChwZ2RwdHIsIHBnZHZhbCkgKCoocGdkcHRyKSA9IHBnZHZhbCkKKworI2RlZmluZSBwZ2RfcGFnZShwZ2QpIFwKKygodW5zaWduZWQgbG9uZykgX192YShwZ2RfdmFsKHBnZCkgJiBQQUdFX01BU0spKQorCitzdGF0aWMgaW5saW5lIHBtZF90ICpwbWRfb2Zmc2V0KHBnZF90ICogZGlyLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisJcmV0dXJuIChwbWRfdCAqKSBkaXI7Cit9CisKKyNkZWZpbmUgcHRlcF9nZXRfYW5kX2NsZWFyKG1tLGFkZHIseHApCV9fcHRlKHhjaGcoJih4cCktPnB0ZSwgMCkpCisjZGVmaW5lIHB0ZV9zYW1lKGEsIGIpCQkocHRlX3ZhbChhKSA9PSBwdGVfdmFsKGIpKQorI2RlZmluZSBwdGVfcGFnZSh4KQkJcGZuX3RvX3BhZ2UocHRlX3Bmbih4KSkKKyNkZWZpbmUgcHRlX25vbmUoeCkJCSghcHRlX3ZhbCh4KSkKKyNkZWZpbmUgcHRlX3Bmbih4KQkJKHB0ZV92YWwoeCkgPj4gUEFHRV9TSElGVCkKKyNkZWZpbmUgcGZuX3B0ZShwZm4sIHByb3QpCV9fcHRlKCgocGZuKSA8PCBQQUdFX1NISUZUKSB8IHBncHJvdF92YWwocHJvdCkpCisjZGVmaW5lIHBmbl9wbWQocGZuLCBwcm90KQlfX3BtZCgoKHBmbikgPDwgUEFHRV9TSElGVCkgfCBwZ3Byb3RfdmFsKHByb3QpKQorCisjZGVmaW5lIFBURV9GSUxFX01BWF9CSVRTCTI5CisjZGVmaW5lIHB0ZV90b19wZ29mZihwdGUpCSgoKHB0ZV92YWwocHRlKSA+PiAyKSAmIDB4ZWYpIHwgKCgocHRlX3ZhbChwdGUpID4+IDEwKSkgPDwgNykpCisjZGVmaW5lIHBnb2ZmX3RvX3B0ZShvZmYpCSgocHRlX3QpIHsgKCgob2ZmKSAmIDB4ZWYpIDw8IDIpIHwgKCgob2ZmKSA+PiA3KSA8PCAxMCkgfCBfUEFHRV9GSUxFIH0pCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfQVNNX00zMlJfUEdUQUJMRV8yTEVWRUxfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1tMzJyL3BndGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGEwZWI2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTMyci9wZ3RhYmxlLmgKQEAgLTAsMCArMSw0MDAgQEAKKyNpZm5kZWYgX0FTTV9NMzJSX1BHVEFCTEVfSAorI2RlZmluZSBfQVNNX00zMlJfUEdUQUJMRV9ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy80bGV2ZWwtZml4dXAuaD4KKworI2lmZGVmIF9fS0VSTkVMX18KKy8qCisgKiBUaGUgTGludXggbWVtb3J5IG1hbmFnZW1lbnQgYXNzdW1lcyBhIHRocmVlLWxldmVsIHBhZ2UgdGFibGUgc2V0dXAuIE9uCisgKiB0aGUgTTMyUiwgd2UgdXNlIHRoYXQsIGJ1dCAiZm9sZCIgdGhlIG1pZCBsZXZlbCBpbnRvIHRoZSB0b3AtbGV2ZWwgcGFnZQorICogdGFibGUsIHNvIHRoYXQgd2UgcGh5c2ljYWxseSBoYXZlIHRoZSBzYW1lIHR3by1sZXZlbCBwYWdlIHRhYmxlIGFzIHRoZQorICogTTMyUiBtbXUgZXhwZWN0cy4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGZ1bmN0aW9ucyBhbmQgZGVmaW5lcyBuZWNlc3NhcnkgdG8gbW9kaWZ5IGFuZCB1c2UKKyAqIHRoZSBNMzJSIHBhZ2UgdGFibGUgdHJlZS4KKyAqLworCisvKiBDQVVUSU9OITogSWYgeW91IGNoYW5nZSBtYWNybyBkZWZpbml0aW9ucyBpbiB0aGlzIGZpbGUsIHlvdSBtaWdodCBoYXZlIHRvCisgKiBjaGFuZ2UgYXJjaC9tMzJyL21tdS5TIG1hbnVhbGx5LgorICovCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KKyNpbmNsdWRlIDxhc20vYml0b3BzLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKworZXh0ZXJuIHBnZF90IHN3YXBwZXJfcGdfZGlyWzEwMjRdOworZXh0ZXJuIHZvaWQgcGFnaW5nX2luaXQodm9pZCk7CisKKy8qCisgKiBaRVJPX1BBR0UgaXMgYSBnbG9iYWwgc2hhcmVkIHBhZ2UgdGhhdCBpcyBhbHdheXMgemVybzogdXNlZAorICogZm9yIHplcm8tbWFwcGVkIG1lbW9yeSBhcmVhcyBldGMuLgorICovCitleHRlcm4gdW5zaWduZWQgbG9uZyBlbXB0eV96ZXJvX3BhZ2VbMTAyNF07CisjZGVmaW5lIFpFUk9fUEFHRSh2YWRkcikJKHZpcnRfdG9fcGFnZShlbXB0eV96ZXJvX3BhZ2UpKQorCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLTJsZXZlbC5oPgorI2VuZGlmCisKKyNkZWZpbmUgcGd0YWJsZV9jYWNoZV9pbml0KCkJZG8geyB9IHdoaWxlICgwKQorCisjZGVmaW5lIFBNRF9TSVpFCSgxVUwgPDwgUE1EX1NISUZUKQorI2RlZmluZSBQTURfTUFTSwkofihQTURfU0laRSAtIDEpKQorI2RlZmluZSBQR0RJUl9TSVpFCSgxVUwgPDwgUEdESVJfU0hJRlQpCisjZGVmaW5lIFBHRElSX01BU0sJKH4oUEdESVJfU0laRSAtIDEpKQorCisjZGVmaW5lIFVTRVJfUFRSU19QRVJfUEdECShUQVNLX1NJWkUgLyBQR0RJUl9TSVpFKQorI2RlZmluZSBGSVJTVF9VU0VSX1BHRF9OUgkwCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisvKiBKdXN0IGFueSBhcmJpdHJhcnkgb2Zmc2V0IHRvIHRoZSBzdGFydCBvZiB0aGUgdm1hbGxvYyBWTSBhcmVhOiB0aGUKKyAqIGN1cnJlbnQgOE1CIHZhbHVlIGp1c3QgbWVhbnMgdGhhdCB0aGVyZSB3aWxsIGJlIGEgOE1CICJob2xlIiBhZnRlciB0aGUKKyAqIHBoeXNpY2FsIG1lbW9yeSB1bnRpbCB0aGUga2VybmVsIHZpcnR1YWwgbWVtb3J5IHN0YXJ0cy4gIFRoYXQgbWVhbnMgdGhhdAorICogYW55IG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIHdpbGwgaG9wZWZ1bGx5IGJlIGNhdWdodC4KKyAqIFRoZSB2bWFsbG9jKCkgcm91dGluZXMgbGVhdmVzIGEgaG9sZSBvZiA0a0IgYmV0d2VlbiBlYWNoIHZtYWxsb2NlZAorICogYXJlYSBmb3IgdGhlIHNhbWUgcmVhc29uLiA7KQorICovCisjZGVmaW5lIFZNQUxMT0NfU1RBUlQJCUtTRUcyCisjZGVmaW5lIFZNQUxMT0NfRU5ECQlLU0VHMworCisvKgorICogICAgIE0zMlIgVExCIGZvcm1hdAorICoKKyAqICAgICBbMF0gICAgWzE6MTldICAgICAgICAgICBbMjA6MjNdICAgICAgIFsyNDozMV0KKyAqICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLSstLS0tLS0tLS0tLS0tKworICogICAgIHwgICAgICAgICAgVlBOICAgICAgICAgIHwwMDAwfCAgICBBU0lEICAgICB8CisgKiAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0rLS0tLS0tLS0tLS0tLSsKKyAqICAgICArLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLSstKy0tLSstKy0rLSstKworICogICAgIHwwICAgICAgICAgUFBOICAgICAgICAgIHwwMDAwfE58QUMgfEx8R3xWfCB8CisgKiAgICAgKy0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0rLSstLS0rLSstKy0rLSsKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJXWAorICovCisKKyNkZWZpbmUgX1BBR0VfQklUX0RJUlRZCQkwCS8qIHNvZnR3YXJlOiBwYWdlIGNoYW5nZWQgKi8KKyNkZWZpbmUgX1BBR0VfQklUX0ZJTEUJCTAJLyogd2hlbiAhcHJlc2VudDogbm9ubGluZWFyIGZpbGUKKwkJCQkJICAgbWFwcGluZyAqLworI2RlZmluZSBfUEFHRV9CSVRfUFJFU0VOVAkxCS8qIFZhbGlkOiBwYWdlIGlzIHZhbGlkICovCisjZGVmaW5lIF9QQUdFX0JJVF9HTE9CQUwJMgkvKiBHbG9iYWwgKi8KKyNkZWZpbmUgX1BBR0VfQklUX0xBUkdFCQkzCS8qIExhcmdlICovCisjZGVmaW5lIF9QQUdFX0JJVF9FWEVDCQk0CS8qIEV4ZWN1dGUgKi8KKyNkZWZpbmUgX1BBR0VfQklUX1dSSVRFCQk1CS8qIFdyaXRlICovCisjZGVmaW5lIF9QQUdFX0JJVF9SRUFECQk2CS8qIFJlYWQgKi8KKyNkZWZpbmUgX1BBR0VfQklUX05PTkNBQ0hBQkxFCTcJLyogTm9uIGNhY2hhYmxlICovCisjZGVmaW5lIF9QQUdFX0JJVF9BQ0NFU1NFRAk4CS8qIHNvZnR3YXJlOiBwYWdlIHJlZmVyZW5jZWQgKi8KKyNkZWZpbmUgX1BBR0VfQklUX1BST1ROT05FCTkJLyogc29mdHdhcmU6IGlmIG5vdCBwcmVzZW50ICovCisKKyNkZWZpbmUgX1BBR0VfRElSVFkJCSgxVUwgPDwgX1BBR0VfQklUX0RJUlRZKQorI2RlZmluZSBfUEFHRV9GSUxFCQkoMVVMIDw8IF9QQUdFX0JJVF9GSUxFKQorI2RlZmluZSBfUEFHRV9QUkVTRU5UCQkoMVVMIDw8IF9QQUdFX0JJVF9QUkVTRU5UKQorI2RlZmluZSBfUEFHRV9HTE9CQUwJCSgxVUwgPDwgX1BBR0VfQklUX0dMT0JBTCkKKyNkZWZpbmUgX1BBR0VfTEFSR0UJCSgxVUwgPDwgX1BBR0VfQklUX0xBUkdFKQorI2RlZmluZSBfUEFHRV9FWEVDCQkoMVVMIDw8IF9QQUdFX0JJVF9FWEVDKQorI2RlZmluZSBfUEFHRV9XUklURQkJKDFVTCA8PCBfUEFHRV9CSVRfV1JJVEUpCisjZGVmaW5lIF9QQUdFX1JFQUQJCSgxVUwgPDwgX1BBR0VfQklUX1JFQUQpCisjZGVmaW5lIF9QQUdFX05PTkNBQ0hBQkxFCSgxVUwgPDwgX1BBR0VfQklUX05PTkNBQ0hBQkxFKQorI2RlZmluZSBfUEFHRV9BQ0NFU1NFRAkJKDFVTCA8PCBfUEFHRV9CSVRfQUNDRVNTRUQpCisjZGVmaW5lIF9QQUdFX1BST1ROT05FCQkoMVVMIDw8IF9QQUdFX0JJVF9QUk9UTk9ORSkKKworI2RlZmluZSBfUEFHRV9UQUJMRQlcCisJKCBfUEFHRV9QUkVTRU5UIHwgX1BBR0VfV1JJVEUgfCBfUEFHRV9SRUFEIHwgX1BBR0VfQUNDRVNTRUQgXAorCXwgX1BBR0VfRElSVFkgKQorI2RlZmluZSBfS0VSTlBHX1RBQkxFCVwKKwkoIF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9XUklURSB8IF9QQUdFX1JFQUQgfCBfUEFHRV9BQ0NFU1NFRCBcCisJfCBfUEFHRV9ESVJUWSApCisjZGVmaW5lIF9QQUdFX0NIR19NQVNLCVwKKwkoIFBURV9NQVNLIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9ESVJUWSApCisKKyNpZmRlZiBDT05GSUdfTU1VCisjZGVmaW5lIFBBR0VfTk9ORQlcCisJX19wZ3Byb3QoX1BBR0VfUFJPVE5PTkUgfCBfUEFHRV9BQ0NFU1NFRCkKKyNkZWZpbmUgUEFHRV9TSEFSRUQJXAorCV9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9XUklURSB8IF9QQUdFX1JFQUQgfCBfUEFHRV9BQ0NFU1NFRCkKKyNkZWZpbmUgUEFHRV9TSEFSRURfRVhFQyBcCisJX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX0VYRUMgfCBfUEFHRV9XUklURSB8IF9QQUdFX1JFQUQgXAorCQl8IF9QQUdFX0FDQ0VTU0VEKQorI2RlZmluZSBQQUdFX0NPUFkJXAorCV9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SRUFEIHwgX1BBR0VfQUNDRVNTRUQpCisjZGVmaW5lIFBBR0VfQ09QWV9FWEVDCVwKKwlfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfRVhFQyB8IF9QQUdFX1JFQUQgfCBfUEFHRV9BQ0NFU1NFRCkKKyNkZWZpbmUgUEFHRV9SRUFET05MWQlcCisJX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JFQUQgfCBfUEFHRV9BQ0NFU1NFRCkKKyNkZWZpbmUgUEFHRV9SRUFET05MWV9FWEVDIFwKKwlfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfRVhFQyB8IF9QQUdFX1JFQUQgfCBfUEFHRV9BQ0NFU1NFRCkKKworI2RlZmluZSBfX1BBR0VfS0VSTkVMCVwKKwkoIF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9FWEVDIHwgX1BBR0VfV1JJVEUgfCBfUEFHRV9SRUFEIHwgX1BBR0VfRElSVFkgXAorCXwgX1BBR0VfQUNDRVNTRUQgKQorI2RlZmluZSBfX1BBR0VfS0VSTkVMX1JPCSggX19QQUdFX0tFUk5FTCAmIH5fUEFHRV9XUklURSApCisjZGVmaW5lIF9fUEFHRV9LRVJORUxfTk9DQUNIRQkoIF9fUEFHRV9LRVJORUwgfCBfUEFHRV9OT05DQUNIQUJMRSkKKworI2RlZmluZSBNQUtFX0dMT0JBTCh4KQlfX3BncHJvdCgoeCkgfCBfUEFHRV9HTE9CQUwpCisKKyNkZWZpbmUgUEFHRV9LRVJORUwJCU1BS0VfR0xPQkFMKF9fUEFHRV9LRVJORUwpCisjZGVmaW5lIFBBR0VfS0VSTkVMX1JPCQlNQUtFX0dMT0JBTChfX1BBR0VfS0VSTkVMX1JPKQorI2RlZmluZSBQQUdFX0tFUk5FTF9OT0NBQ0hFCU1BS0VfR0xPQkFMKF9fUEFHRV9LRVJORUxfTk9DQUNIRSkKKworI2Vsc2UKKyNkZWZpbmUgUEFHRV9OT05FCQlfX3BncHJvdCgwKQorI2RlZmluZSBQQUdFX1NIQVJFRAkJX19wZ3Byb3QoMCkKKyNkZWZpbmUgUEFHRV9TSEFSRURfRVhFQwlfX3BncHJvdCgwKQorI2RlZmluZSBQQUdFX0NPUFkJCV9fcGdwcm90KDApCisjZGVmaW5lIFBBR0VfQ09QWV9FWEVDCQlfX3BncHJvdCgwKQorI2RlZmluZSBQQUdFX1JFQURPTkxZCQlfX3BncHJvdCgwKQorI2RlZmluZSBQQUdFX1JFQURPTkxZX0VYRUMJX19wZ3Byb3QoMCkKKworI2RlZmluZSBQQUdFX0tFUk5FTAkJX19wZ3Byb3QoMCkKKyNkZWZpbmUgUEFHRV9LRVJORUxfUk8JCV9fcGdwcm90KDApCisjZGVmaW5lIFBBR0VfS0VSTkVMX05PQ0FDSEUJX19wZ3Byb3QoMCkKKyNlbmRpZiAvKiBDT05GSUdfTU1VICovCisKKwkvKiB4d3IgKi8KKyNkZWZpbmUgX19QMDAwCVBBR0VfTk9ORQorI2RlZmluZSBfX1AwMDEJUEFHRV9SRUFET05MWQorI2RlZmluZSBfX1AwMTAJUEFHRV9DT1BZCisjZGVmaW5lIF9fUDAxMQlQQUdFX0NPUFkKKyNkZWZpbmUgX19QMTAwCVBBR0VfUkVBRE9OTFlfRVhFQworI2RlZmluZSBfX1AxMDEJUEFHRV9SRUFET05MWV9FWEVDCisjZGVmaW5lIF9fUDExMAlQQUdFX0NPUFlfRVhFQworI2RlZmluZSBfX1AxMTEJUEFHRV9DT1BZX0VYRUMKKworI2RlZmluZSBfX1MwMDAJUEFHRV9OT05FCisjZGVmaW5lIF9fUzAwMQlQQUdFX1JFQURPTkxZCisjZGVmaW5lIF9fUzAxMAlQQUdFX1NIQVJFRAorI2RlZmluZSBfX1MwMTEJUEFHRV9TSEFSRUQKKyNkZWZpbmUgX19TMTAwCVBBR0VfUkVBRE9OTFlfRVhFQworI2RlZmluZSBfX1MxMDEJUEFHRV9SRUFET05MWV9FWEVDCisjZGVmaW5lIF9fUzExMAlQQUdFX1NIQVJFRF9FWEVDCisjZGVmaW5lIF9fUzExMQlQQUdFX1NIQVJFRF9FWEVDCisKKy8qIHBhZ2UgdGFibGUgZm9yIDAtNE1CIGZvciBldmVyeWJvZHkgKi8KKworI2RlZmluZSBwdGVfcHJlc2VudCh4KQkocHRlX3ZhbCh4KSAmIChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUFJPVE5PTkUpKQorI2RlZmluZSBwdGVfY2xlYXIobW0sYWRkcix4cCkJZG8geyBzZXRfcHRlX2F0KG1tLCBhZGRyLCB4cCwgX19wdGUoMCkpOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIHBtZF9ub25lKHgpCSghcG1kX3ZhbCh4KSkKKyNkZWZpbmUgcG1kX3ByZXNlbnQoeCkJKHBtZF92YWwoeCkgJiBfUEFHRV9QUkVTRU5UKQorI2RlZmluZSBwbWRfY2xlYXIoeHApCWRvIHsgc2V0X3BtZCh4cCwgX19wbWQoMCkpOyB9IHdoaWxlICgwKQorI2RlZmluZQlwbWRfYmFkKHgpCSgocG1kX3ZhbCh4KSAmIH5QQUdFX01BU0spICE9IF9LRVJOUEdfVEFCTEUpCisKKyNkZWZpbmUgcGFnZXNfdG9fbWIoeCkJKCh4KSA+PiAoMjAgLSBQQUdFX1NISUZUKSkKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgb25seSB3b3JrIGlmIHB0ZV9wcmVzZW50KCkgaXMgdHJ1ZS4KKyAqIFVuZGVmaW5lZCBiZWhhdmlvdXIgaWYgbm90Li4KKyAqLworc3RhdGljIGlubGluZSBpbnQgcHRlX3JlYWQocHRlX3QgcHRlKQoreworCXJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9SRUFEOworfQorCitzdGF0aWMgaW5saW5lIGludCBwdGVfZXhlYyhwdGVfdCBwdGUpCit7CisJcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX0VYRUM7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9kaXJ0eShwdGVfdCBwdGUpCit7CisJcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX0RJUlRZOworfQorCitzdGF0aWMgaW5saW5lIGludCBwdGVfeW91bmcocHRlX3QgcHRlKQoreworCXJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9BQ0NFU1NFRDsKK30KKworc3RhdGljIGlubGluZSBpbnQgcHRlX3dyaXRlKHB0ZV90IHB0ZSkKK3sKKwlyZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfV1JJVEU7Cit9CisKKy8qCisgKiBUaGUgZm9sbG93aW5nIG9ubHkgd29ya3MgaWYgcHRlX3ByZXNlbnQoKSBpcyBub3QgdHJ1ZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgcHRlX2ZpbGUocHRlX3QgcHRlKQoreworCXJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9GSUxFOworfQorCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9yZHByb3RlY3QocHRlX3QgcHRlKQoreworCXB0ZV92YWwocHRlKSAmPSB+X1BBR0VfUkVBRDsKKwlyZXR1cm4gcHRlOworfQorCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9leHByb3RlY3QocHRlX3QgcHRlKQoreworCXB0ZV92YWwocHRlKSAmPSB+X1BBR0VfRVhFQzsKKwlyZXR1cm4gcHRlOworfQorCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta2NsZWFuKHB0ZV90IHB0ZSkKK3sKKwlwdGVfdmFsKHB0ZSkgJj0gfl9QQUdFX0RJUlRZOworCXJldHVybiBwdGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rb2xkKHB0ZV90IHB0ZSkKK3sKKwlwdGVfdmFsKHB0ZSkgJj0gfl9QQUdFX0FDQ0VTU0VEOworCXJldHVybiBwdGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX3dycHJvdGVjdChwdGVfdCBwdGUpCit7CisJcHRlX3ZhbChwdGUpICY9IH5fUEFHRV9XUklURTsKKwlyZXR1cm4gcHRlOworfQorCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3JlYWQocHRlX3QgcHRlKQoreworCXB0ZV92YWwocHRlKSB8PSBfUEFHRV9SRUFEOworCXJldHVybiBwdGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rZXhlYyhwdGVfdCBwdGUpCit7CisJcHRlX3ZhbChwdGUpIHw9IF9QQUdFX0VYRUM7CisJcmV0dXJuIHB0ZTsKK30KKworc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtkaXJ0eShwdGVfdCBwdGUpCit7CisJcHRlX3ZhbChwdGUpIHw9IF9QQUdFX0RJUlRZOworCXJldHVybiBwdGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21reW91bmcocHRlX3QgcHRlKQoreworCXB0ZV92YWwocHRlKSB8PSBfUEFHRV9BQ0NFU1NFRDsKKwlyZXR1cm4gcHRlOworfQorCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSkKK3sKKwlwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfV1JJVEU7CisJcmV0dXJuIHB0ZTsKK30KKworc3RhdGljIGlubGluZSAgaW50IHB0ZXBfdGVzdF9hbmRfY2xlYXJfZGlydHkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApCit7CisJcmV0dXJuIHRlc3RfYW5kX2NsZWFyX2JpdChfUEFHRV9CSVRfRElSVFksIHB0ZXApOworfQorCitzdGF0aWMgaW5saW5lICBpbnQgcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCkKK3sKKwlyZXR1cm4gdGVzdF9hbmRfY2xlYXJfYml0KF9QQUdFX0JJVF9BQ0NFU1NFRCwgcHRlcCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdGVwX3NldF93cnByb3RlY3Qoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApCit7CisJY2xlYXJfYml0KF9QQUdFX0JJVF9XUklURSwgcHRlcCk7Cit9CisKKy8qCisgKiBNYWNybyBhbmQgaW1wbGVtZW50YXRpb24gdG8gbWFrZSBhIHBhZ2UgcHJvdGVjdGlvbiBhcyB1bmNhY2hhYmxlLgorICovCitzdGF0aWMgaW5saW5lIHBncHJvdF90IHBncHJvdF9ub25jYWNoZWQocGdwcm90X3QgX3Byb3QpCit7CisJdW5zaWduZWQgbG9uZyBwcm90ID0gcGdwcm90X3ZhbChfcHJvdCk7CisKKwlwcm90IHw9IF9QQUdFX05PTkNBQ0hBQkxFOworCXJldHVybiBfX3BncHJvdChwcm90KTsKK30KKworI2RlZmluZSBwZ3Byb3Rfd3JpdGVjb21iaW5lKHByb3QpIHBncHJvdF9ub25jYWNoZWQocHJvdCkKKworLyoKKyAqIENvbnZlcnNpb24gZnVuY3Rpb25zOiBjb252ZXJ0IGEgcGFnZSBhbmQgcHJvdGVjdGlvbiB0byBhIHBhZ2UgZW50cnksCisgKiBhbmQgYSBwYWdlIGVudHJ5IGFuZCBwYWdlIGRpcmVjdG9yeSB0byB0aGUgcGFnZSB0aGV5IHJlZmVyIHRvLgorICovCisjZGVmaW5lIG1rX3B0ZShwYWdlLCBwZ3Byb3QpCXBmbl9wdGUocGFnZV90b19wZm4ocGFnZSksIHBncHJvdCkKKworc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbW9kaWZ5KHB0ZV90IHB0ZSwgcGdwcm90X3QgbmV3cHJvdCkKK3sKKwlzZXRfcHRlKCZwdGUsIF9fcHRlKChwdGVfdmFsKHB0ZSkgJiBfUEFHRV9DSEdfTUFTSykgXAorCQl8IHBncHJvdF92YWwobmV3cHJvdCkpKTsKKworCXJldHVybiBwdGU7Cit9CisKKyNkZWZpbmUgcGFnZV9wdGUocGFnZSkJcGFnZV9wdGVfcHJvdChwYWdlLCBfX3BncHJvdCgwKSkKKworLyoKKyAqIENvbnZlcnNpb24gZnVuY3Rpb25zOiBjb252ZXJ0IGEgcGFnZSBhbmQgcHJvdGVjdGlvbiB0byBhIHBhZ2UgZW50cnksCisgKiBhbmQgYSBwYWdlIGVudHJ5IGFuZCBwYWdlIGRpcmVjdG9yeSB0byB0aGUgcGFnZSB0aGV5IHJlZmVyIHRvLgorICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwbWRfc2V0KHBtZF90ICogcG1kcCwgcHRlX3QgKiBwdGVwKQoreworCXBtZF92YWwoKnBtZHApID0gKCgodW5zaWduZWQgbG9uZykgcHRlcCkgJiBQQUdFX01BU0spOworfQorCisjZGVmaW5lIHBtZF9wYWdlX2tlcm5lbChwbWQpCVwKKwkoKHVuc2lnbmVkIGxvbmcpIF9fdmEocG1kX3ZhbChwbWQpICYgUEFHRV9NQVNLKSkKKworI2lmbmRlZiBDT05GSUdfRElTQ09OVElHTUVNCisjZGVmaW5lIHBtZF9wYWdlKHBtZCkJKG1lbV9tYXAgKyAoKHBtZF92YWwocG1kKSA+PiBQQUdFX1NISUZUKSAtIFBGTl9CQVNFKSkKKyNlbmRpZiAvKiAhQ09ORklHX0RJU0NPTlRJR01FTSAqLworCisvKiB0byBmaW5kIGFuIGVudHJ5IGluIGEgcGFnZS10YWJsZS1kaXJlY3RvcnkuICovCisjZGVmaW5lIHBnZF9pbmRleChhZGRyZXNzKQlcCisJKCgoYWRkcmVzcykgPj4gUEdESVJfU0hJRlQpICYgKFBUUlNfUEVSX1BHRCAtIDEpKQorCisjZGVmaW5lIHBnZF9vZmZzZXQobW0sIGFkZHJlc3MpCSgobW0pLT5wZ2QgKyBwZ2RfaW5kZXgoYWRkcmVzcykpCisKKy8qIHRvIGZpbmQgYW4gZW50cnkgaW4gYSBrZXJuZWwgcGFnZS10YWJsZS1kaXJlY3RvcnkgKi8KKyNkZWZpbmUgcGdkX29mZnNldF9rKGFkZHJlc3MpCXBnZF9vZmZzZXQoJmluaXRfbW0sIGFkZHJlc3MpCisKKyNkZWZpbmUgcG1kX2luZGV4KGFkZHJlc3MpCVwKKwkoKChhZGRyZXNzKSA+PiBQTURfU0hJRlQpICYgKFBUUlNfUEVSX1BNRCAtIDEpKQorCisjZGVmaW5lIHB0ZV9pbmRleChhZGRyZXNzKQlcCisJKCgoYWRkcmVzcykgPj4gUEFHRV9TSElGVCkgJiAoUFRSU19QRVJfUFRFIC0gMSkpCisjZGVmaW5lIHB0ZV9vZmZzZXRfa2VybmVsKGRpciwgYWRkcmVzcykJXAorCSgocHRlX3QgKilwbWRfcGFnZV9rZXJuZWwoKihkaXIpKSArIHB0ZV9pbmRleChhZGRyZXNzKSkKKyNkZWZpbmUgcHRlX29mZnNldF9tYXAoZGlyLCBhZGRyZXNzKQlcCisJKChwdGVfdCAqKXBhZ2VfYWRkcmVzcyhwbWRfcGFnZSgqKGRpcikpKSArIHB0ZV9pbmRleChhZGRyZXNzKSkKKyNkZWZpbmUgcHRlX29mZnNldF9tYXBfbmVzdGVkKGRpciwgYWRkcmVzcykJcHRlX29mZnNldF9tYXAoZGlyLCBhZGRyZXNzKQorI2RlZmluZSBwdGVfdW5tYXAocHRlKQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBwdGVfdW5tYXBfbmVzdGVkKHB0ZSkJZG8geyB9IHdoaWxlICgwKQorCisvKiBFbmNvZGUgYW5kIGRlLWNvZGUgYSBzd2FwIGVudHJ5ICovCisjZGVmaW5lIF9fc3dwX3R5cGUoeCkJCQkoKCh4KS52YWwgPj4gMikgJiAweDNmKQorI2RlZmluZSBfX3N3cF9vZmZzZXQoeCkJCQkoKHgpLnZhbCA+PiAxMCkKKyNkZWZpbmUgX19zd3BfZW50cnkodHlwZSwgb2Zmc2V0KQlcCisJKChzd3BfZW50cnlfdCkgeyAoKHR5cGUpIDw8IDIpIHwgKChvZmZzZXQpIDw8IDEwKSB9KQorI2RlZmluZSBfX3B0ZV90b19zd3BfZW50cnkocHRlKQkJKChzd3BfZW50cnlfdCkgeyBwdGVfdmFsKHB0ZSkgfSkKKyNkZWZpbmUgX19zd3BfZW50cnlfdG9fcHRlKHgpCQkoKHB0ZV90KSB7ICh4KS52YWwgfSkKKworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKworLyogTmVlZHMgdG8gYmUgZGVmaW5lZCBoZXJlIGFuZCBub3QgaW4gbGludXgvbW0uaCwgYXMgaXQgaXMgYXJjaCBkZXBlbmRlbnQgKi8KKyNkZWZpbmUga2Vybl9hZGRyX3ZhbGlkKGFkZHIpCSgxKQorCisjZGVmaW5lIGlvX3JlbWFwX3BhZ2VfcmFuZ2Uodm1hLCB2YWRkciwgcGFkZHIsIHNpemUsIHByb3QpCVwKKwlyZW1hcF9wZm5fcmFuZ2Uodm1hLCB2YWRkciwgKHBhZGRyKSA+PiBQQUdFX1NISUZULCBzaXplLCBwcm90KQorCisjZGVmaW5lIGlvX3JlbWFwX3Bmbl9yYW5nZSh2bWEsIHZhZGRyLCBwZm4sIHNpemUsIHByb3QpCVwKKwkJcmVtYXBfcGZuX3JhbmdlKHZtYSwgdmFkZHIsIHBmbiwgc2l6ZSwgcHJvdCkKKworI2RlZmluZSBNS19JT1NQQUNFX1BGTihzcGFjZSwgcGZuKQkocGZuKQorI2RlZmluZSBHRVRfSU9TUEFDRShwZm4pCQkwCisjZGVmaW5lIEdFVF9QRk4ocGZuKQkJCShwZm4pCisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFUF9URVNUX0FORF9DTEVBUl9ZT1VORworI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX1RFU1RfQU5EX0NMRUFSX0RJUlRZCisjZGVmaW5lIF9fSEFWRV9BUkNIX1BURVBfR0VUX0FORF9DTEVBUgorI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX1NFVF9XUlBST1RFQ1QKKyNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFX1NBTUUKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wZ3RhYmxlLmg+CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfQVNNX00zMlJfUEdUQUJMRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL3BvbGwuaCBiL2luY2x1ZGUvYXNtLW0zMnIvcG9sbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzYjdhY2YKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL3BvbGwuaApAQCAtMCwwICsxLDMxIEBACisjaWZuZGVmIF9BU01fTTMyUl9QT0xMX0gKKyNkZWZpbmUgX0FTTV9NMzJSX1BPTExfSAorCisvKgorICogcG9sbCgyKSBiaXQgZGVmaW5pdGlvbnMuICBCYXNlZCBvbiA8YXNtLWkzODYvcG9sbC5oPi4KKyAqCisgKiBNb2RpZmllZCAyMDA0CisgKiAgICAgIEhpcm9rYXp1IFRha2F0YSA8dGFrYXRhIGF0IGxpbnV4LW0zMnIub3JnPgorICovCisKKyNkZWZpbmUgUE9MTElOCQkweDAwMDEKKyNkZWZpbmUgUE9MTFBSSQkJMHgwMDAyCisjZGVmaW5lIFBPTExPVVQJCTB4MDAwNAorI2RlZmluZSBQT0xMRVJSCQkweDAwMDgKKyNkZWZpbmUgUE9MTEhVUAkJMHgwMDEwCisjZGVmaW5lIFBPTExOVkFMCTB4MDAyMAorCisjZGVmaW5lIFBPTExSRE5PUk0JMHgwMDQwCisjZGVmaW5lIFBPTExSREJBTkQJMHgwMDgwCisjZGVmaW5lIFBPTExXUk5PUk0JMHgwMTAwCisjZGVmaW5lIFBPTExXUkJBTkQJMHgwMjAwCisjZGVmaW5lIFBPTExNU0cJCTB4MDQwMAorI2RlZmluZSBQT0xMUkVNT1ZFCTB4MTAwMAorCitzdHJ1Y3QgcG9sbGZkIHsKKwlpbnQgZmQ7CisJc2hvcnQgZXZlbnRzOworCXNob3J0IHJldmVudHM7Cit9OworCisjZW5kaWYgIC8qIF9BU01fTTMyUl9QT0xMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvcG9zaXhfdHlwZXMuaCBiL2luY2x1ZGUvYXNtLW0zMnIvcG9zaXhfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2U3ZTg1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTMyci9wb3NpeF90eXBlcy5oCkBAIC0wLDAgKzEsMTI2IEBACisjaWZuZGVmIF9BU01fTTMyUl9QT1NJWF9UWVBFU19ICisjZGVmaW5lIF9BU01fTTMyUl9QT1NJWF9UWVBFU19ICisKKy8qICRJZCQgKi8KKworLyogb3JpZyA6IGkzODYsIHNoIDIuNC4xOCAqLworCisvKgorICogVGhpcyBmaWxlIGlzIGdlbmVyYWxseSB1c2VkIGJ5IHVzZXItbGV2ZWwgc29mdHdhcmUsIHNvIHlvdSBuZWVkIHRvCisgKiBiZSBhIGxpdHRsZSBjYXJlZnVsIGFib3V0IG5hbWVzcGFjZSBwb2xsdXRpb24gZXRjLiAgQWxzbywgd2UgY2Fubm90CisgKiBhc3N1bWUgR0NDIGlzIGJlaW5nIHVzZWQuCisgKi8KKwordHlwZWRlZiB1bnNpZ25lZCBsb25nCV9fa2VybmVsX2lub190OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAlfX2tlcm5lbF9tb2RlX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CV9fa2VybmVsX25saW5rX3Q7Cit0eXBlZGVmIGxvbmcJCV9fa2VybmVsX29mZl90OwordHlwZWRlZiBpbnQJCV9fa2VybmVsX3BpZF90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAlfX2tlcm5lbF9pcGNfcGlkX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CV9fa2VybmVsX3VpZF90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAlfX2tlcm5lbF9naWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50CV9fa2VybmVsX3NpemVfdDsKK3R5cGVkZWYgaW50CQlfX2tlcm5lbF9zc2l6ZV90OwordHlwZWRlZiBpbnQJCV9fa2VybmVsX3B0cmRpZmZfdDsKK3R5cGVkZWYgbG9uZwkJX19rZXJuZWxfdGltZV90OwordHlwZWRlZiBsb25nCQlfX2tlcm5lbF9zdXNlY29uZHNfdDsKK3R5cGVkZWYgbG9uZwkJX19rZXJuZWxfY2xvY2tfdDsKK3R5cGVkZWYgaW50CQlfX2tlcm5lbF90aW1lcl90OwordHlwZWRlZiBpbnQJCV9fa2VybmVsX2Nsb2NraWRfdDsKK3R5cGVkZWYgaW50CQlfX2tlcm5lbF9kYWRkcl90OwordHlwZWRlZiBjaGFyICoJCV9fa2VybmVsX2NhZGRyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CV9fa2VybmVsX3VpZDE2X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CV9fa2VybmVsX2dpZDE2X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludAlfX2tlcm5lbF91aWQzMl90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQJX19rZXJuZWxfZ2lkMzJfdDsKKwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAlfX2tlcm5lbF9vbGRfdWlkX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CV9fa2VybmVsX29sZF9naWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJX19rZXJuZWxfb2xkX2Rldl90OworCisjaWZkZWYgX19HTlVDX18KK3R5cGVkZWYgbG9uZyBsb25nCV9fa2VybmVsX2xvZmZfdDsKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCB7CisjaWYgZGVmaW5lZChfX0tFUk5FTF9fKSB8fCBkZWZpbmVkKF9fVVNFX0FMTCkKKwlpbnQJdmFsWzJdOworI2Vsc2UgLyogIWRlZmluZWQoX19LRVJORUxfXykgJiYgIWRlZmluZWQoX19VU0VfQUxMKSAqLworCWludAlfX3ZhbFsyXTsKKyNlbmRpZiAvKiAhZGVmaW5lZChfX0tFUk5FTF9fKSAmJiAhZGVmaW5lZChfX1VTRV9BTEwpICovCit9IF9fa2VybmVsX2ZzaWRfdDsKKworI2lmIGRlZmluZWQoX19LRVJORUxfXykgfHwgIWRlZmluZWQoX19HTElCQ19fKSB8fCAoX19HTElCQ19fIDwgMikKKworI3VuZGVmCV9fRkRfU0VUCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fRkRfU0VUKHVuc2lnbmVkIGxvbmcgX19mZCwgX19rZXJuZWxfZmRfc2V0ICpfX2Zkc2V0cCkKK3sKKwl1bnNpZ25lZCBsb25nIF9fdG1wID0gX19mZCAvIF9fTkZEQklUUzsKKwl1bnNpZ25lZCBsb25nIF9fcmVtID0gX19mZCAlIF9fTkZEQklUUzsKKwlfX2Zkc2V0cC0+ZmRzX2JpdHNbX190bXBdIHw9ICgxVUw8PF9fcmVtKTsKK30KKworI3VuZGVmCV9fRkRfQ0xSCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fRkRfQ0xSKHVuc2lnbmVkIGxvbmcgX19mZCwgX19rZXJuZWxfZmRfc2V0ICpfX2Zkc2V0cCkKK3sKKwl1bnNpZ25lZCBsb25nIF9fdG1wID0gX19mZCAvIF9fTkZEQklUUzsKKwl1bnNpZ25lZCBsb25nIF9fcmVtID0gX19mZCAlIF9fTkZEQklUUzsKKwlfX2Zkc2V0cC0+ZmRzX2JpdHNbX190bXBdICY9IH4oMVVMPDxfX3JlbSk7Cit9CisKKworI3VuZGVmCV9fRkRfSVNTRVQKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0ZEX0lTU0VUKHVuc2lnbmVkIGxvbmcgX19mZCwgY29uc3QgX19rZXJuZWxfZmRfc2V0ICpfX3ApCit7CisJdW5zaWduZWQgbG9uZyBfX3RtcCA9IF9fZmQgLyBfX05GREJJVFM7CisJdW5zaWduZWQgbG9uZyBfX3JlbSA9IF9fZmQgJSBfX05GREJJVFM7CisJcmV0dXJuIChfX3AtPmZkc19iaXRzW19fdG1wXSAmICgxVUw8PF9fcmVtKSkgIT0gMDsKK30KKworLyoKKyAqIFRoaXMgd2lsbCB1bnJvbGwgdGhlIGxvb3AgZm9yIHRoZSBub3JtYWwgY29uc3RhbnQgY2FzZSAoOCBpbnRzLAorICogZm9yIGEgMjU2LWJpdCBmZF9zZXQpCisgKi8KKyN1bmRlZglfX0ZEX1pFUk8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19GRF9aRVJPKF9fa2VybmVsX2ZkX3NldCAqX19wKQoreworCXVuc2lnbmVkIGxvbmcgKl9fdG1wID0gX19wLT5mZHNfYml0czsKKwlpbnQgX19pOworCisJaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKF9fRkRTRVRfTE9OR1MpKSB7CisJCXN3aXRjaCAoX19GRFNFVF9MT05HUykgeworCQljYXNlIDE2OgorCQkJX190bXBbIDBdID0gMDsgX190bXBbIDFdID0gMDsKKwkJCV9fdG1wWyAyXSA9IDA7IF9fdG1wWyAzXSA9IDA7CisJCQlfX3RtcFsgNF0gPSAwOyBfX3RtcFsgNV0gPSAwOworCQkJX190bXBbIDZdID0gMDsgX190bXBbIDddID0gMDsKKwkJCV9fdG1wWyA4XSA9IDA7IF9fdG1wWyA5XSA9IDA7CisJCQlfX3RtcFsxMF0gPSAwOyBfX3RtcFsxMV0gPSAwOworCQkJX190bXBbMTJdID0gMDsgX190bXBbMTNdID0gMDsKKwkJCV9fdG1wWzE0XSA9IDA7IF9fdG1wWzE1XSA9IDA7CisJCQlyZXR1cm47CisKKwkJY2FzZSA4OgorCQkJX190bXBbIDBdID0gMDsgX190bXBbIDFdID0gMDsKKwkJCV9fdG1wWyAyXSA9IDA7IF9fdG1wWyAzXSA9IDA7CisJCQlfX3RtcFsgNF0gPSAwOyBfX3RtcFsgNV0gPSAwOworCQkJX190bXBbIDZdID0gMDsgX190bXBbIDddID0gMDsKKwkJCXJldHVybjsKKworCQljYXNlIDQ6CisJCQlfX3RtcFsgMF0gPSAwOyBfX3RtcFsgMV0gPSAwOworCQkJX190bXBbIDJdID0gMDsgX190bXBbIDNdID0gMDsKKwkJCXJldHVybjsKKwkJfQorCX0KKwlfX2kgPSBfX0ZEU0VUX0xPTkdTOworCXdoaWxlIChfX2kpIHsKKwkJX19pLS07CisJCSpfX3RtcCA9IDA7CisJCV9fdG1wKys7CisJfQorfQorCisjZW5kaWYgLyogZGVmaW5lZChfX0tFUk5FTF9fKSB8fCAhZGVmaW5lZChfX0dMSUJDX18pIHx8IChfX0dMSUJDX18gPCAyKSAqLworCisjZW5kaWYgIC8qIF9BU01fTTMyUl9QT1NJWF9UWVBFU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL3Byb2Nlc3Nvci5oIGIvaW5jbHVkZS9hc20tbTMyci9wcm9jZXNzb3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWZkMTgxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTMyci9wcm9jZXNzb3IuaApAQCAtMCwwICsxLDE0MyBAQAorI2lmbmRlZiBfQVNNX00zMlJfUFJPQ0VTU09SX0gKKyNkZWZpbmUgX0FTTV9NMzJSX1BST0NFU1NPUl9ICisKKy8qCisgKiBpbmNsdWRlL2FzbS1tMzJyL3Byb2Nlc3Nvci5oCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk0ICBMaW51cyBUb3J2YWxkcworICogQ29weXJpZ2h0IChDKSAyMDAxICBIaXJveXVraSBLb25kbywgSGlyb2thenUgVGFrYXRhLCBhbmQgSGl0b3NoaSBZYW1hbW90bworICogQ29weXJpZ2h0IChDKSAyMDA0ICBIaXJva2F6dSBUYWthdGEgPHRha2F0YSBhdCBsaW51eC1tMzJyLm9yZz4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPiAgLyogcHRfcmVncyAqLworCisvKgorICogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBtYWNybyB0aGF0IHJldHVybnMgY3VycmVudAorICogaW5zdHJ1Y3Rpb24gcG9pbnRlciAoInByb2dyYW0gY291bnRlciIpLgorICovCisjZGVmaW5lIGN1cnJlbnRfdGV4dF9hZGRyKCkgKHsgX19sYWJlbF9fIF9sOyBfbDogJiZfbDsgfSkKKworLyoKKyAqICBDUFUgdHlwZSBhbmQgaGFyZHdhcmUgYnVnIGZsYWdzLiBLZXB0IHNlcGFyYXRlbHkgZm9yIGVhY2ggQ1BVLgorICogIE1lbWJlcnMgb2YgdGhpcyBzdHJ1Y3R1cmUgYXJlIHJlZmVyZW5jZWQgaW4gaGVhZC5TLCBzbyB0aGluayB0d2ljZQorICogIGJlZm9yZSB0b3VjaGluZyB0aGVtLiBbbWpdCisgKi8KKworc3RydWN0IGNwdWluZm9fbTMyciB7CisJdW5zaWduZWQgbG9uZyBwZ3RhYmxlX2NhY2hlX3N6OworCXVuc2lnbmVkIGxvbmcgY3B1X2Nsb2NrOworCXVuc2lnbmVkIGxvbmcgYnVzX2Nsb2NrOworCXVuc2lnbmVkIGxvbmcgdGltZXJfZGl2aWRlOworCXVuc2lnbmVkIGxvbmcgbG9vcHNfcGVyX2ppZmZ5OworfTsKKworLyoKKyAqIGNhcGFiaWxpdGllcyBvZiBDUFVzCisgKi8KKworZXh0ZXJuIHN0cnVjdCBjcHVpbmZvX20zMnIgYm9vdF9jcHVfZGF0YTsKKworI2lmZGVmIENPTkZJR19TTVAKK2V4dGVybiBzdHJ1Y3QgY3B1aW5mb19tMzJyIGNwdV9kYXRhW107CisjZGVmaW5lIGN1cnJlbnRfY3B1X2RhdGEgY3B1X2RhdGFbc21wX3Byb2Nlc3Nvcl9pZCgpXQorI2Vsc2UKKyNkZWZpbmUgY3B1X2RhdGEgKCZib290X2NwdV9kYXRhKQorI2RlZmluZSBjdXJyZW50X2NwdV9kYXRhIGJvb3RfY3B1X2RhdGEKKyNlbmRpZgorCisvKgorICogVXNlciBzcGFjZSBwcm9jZXNzIHNpemU6IDJHQiAoZGVmYXVsdCkuCisgKi8KKyNpZmRlZiBDT05GSUdfTU1VCisjZGVmaW5lIFRBU0tfU0laRSAgKDB4ODAwMDAwMDBVTCkKKyNlbHNlCisjZGVmaW5lIFRBU0tfU0laRSAgKDB4MDA0MDAwMDBVTCkKKyNlbmRpZgorCisvKiBUaGlzIGRlY2lkZXMgd2hlcmUgdGhlIGtlcm5lbCB3aWxsIHNlYXJjaCBmb3IgYSBmcmVlIGNodW5rIG9mIHZtCisgKiBzcGFjZSBkdXJpbmcgbW1hcCdzLgorICovCisjZGVmaW5lIFRBU0tfVU5NQVBQRURfQkFTRQlQQUdFX0FMSUdOKFRBU0tfU0laRSAvIDMpCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBsb25nIHNlZzsKK30gbW1fc2VnbWVudF90OworCisjZGVmaW5lIE1BWF9UUkFQUyAxMAorCitzdHJ1Y3QgZGVidWdfdHJhcCB7CisJaW50IG5yX3RyYXA7CisJdW5zaWduZWQgbG9uZwlhZGRyW01BWF9UUkFQU107CisJdW5zaWduZWQgbG9uZwlpbnNuW01BWF9UUkFQU107Cit9OworCitzdHJ1Y3QgdGhyZWFkX3N0cnVjdCB7CisJdW5zaWduZWQgbG9uZyBhZGRyZXNzOworCXVuc2lnbmVkIGxvbmcgdHJhcF9ubzsJCS8qIFRyYXAgbnVtYmVyICAqLworCXVuc2lnbmVkIGxvbmcgZXJyb3JfY29kZTsJLyogRXJyb3IgY29kZSBvZiB0cmFwICovCisJdW5zaWduZWQgbG9uZyBscjsJCS8qIHNhdmVkIHBjICovCisJdW5zaWduZWQgbG9uZyBzcDsJCS8qIHVzZXIgc3RhY2sgcG9pbnRlciAqLworCXN0cnVjdCBkZWJ1Z190cmFwIGRlYnVnX3RyYXA7Cit9OworCisjZGVmaW5lIElOSVRfU1AJKHNpemVvZihpbml0X3N0YWNrKSArICh1bnNpZ25lZCBsb25nKSAmaW5pdF9zdGFjaykKKworI2RlZmluZSBJTklUX1RIUkVBRAl7CVwKKwkuc3AgPSBJTklUX1NQLAkJXAorfQorCisvKgorICogRG8gbmVjZXNzYXJ5IHNldHVwIHRvIHN0YXJ0IHVwIGEgbmV3bHkgZXhlY3V0ZWQgdGhyZWFkLgorICovCisKKy8qIFVzZXIgcHJvY2VzcyBCYWNrdXAgUFNXICovCisjZGVmaW5lIFVTRVJQU19CUFNXIChNMzJSX1BTV19CU018TTMyUl9QU1dfQklFfE0zMlJfUFNXX0JQTSkKKworI2RlZmluZSBzdGFydF90aHJlYWQocmVncywgbmV3X3BjLCBuZXdfc3B1KSAJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJc2V0X2ZzKFVTRVJfRFMpOyAJCQkJCVwKKwkJcmVncy0+cHN3ID0gKHJlZ3MtPnBzdyB8IFVTRVJQU19CUFNXKSAmIDB4MDAwMEZGRkZVTDsJXAorCQlyZWdzLT5icGMgPSBuZXdfcGM7CQkJCQlcCisJCXJlZ3MtPnNwdSA9IG5ld19zcHU7CQkJCQlcCisJfSB3aGlsZSAoMCkKKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbiwgYSBzdHJhbmdlIEMgdGhpbmcgKi8KK3N0cnVjdCB0YXNrX3N0cnVjdDsKK3N0cnVjdCBtbV9zdHJ1Y3Q7CisKKy8qIEZyZWUgYWxsIHJlc291cmNlcyBoZWxkIGJ5IGEgdGhyZWFkLiAqLworZXh0ZXJuIHZvaWQgcmVsZWFzZV90aHJlYWQoc3RydWN0IHRhc2tfc3RydWN0ICopOworCisjZGVmaW5lIHByZXBhcmVfdG9fY29weSh0c2spCWRvIHsgfSB3aGlsZSAoMCkKKworLyoKKyAqIGNyZWF0ZSBhIGtlcm5lbCB0aHJlYWQgd2l0aG91dCByZW1vdmluZyBpdCBmcm9tIHRhc2tsaXN0cworICovCitleHRlcm4gaW50IGtlcm5lbF90aHJlYWQoaW50ICgqZm4pKHZvaWQgKiksIHZvaWQgKiBhcmcsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOworCisvKiBDb3B5IGFuZCByZWxlYXNlIGFsbCBzZWdtZW50IGluZm8gYXNzb2NpYXRlZCB3aXRoIGEgVk0gKi8KK2V4dGVybiB2b2lkIGNvcHlfc2VnbWVudHMoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgbW1fc3RydWN0ICogbW0pOworZXh0ZXJuIHZvaWQgcmVsZWFzZV9zZWdtZW50cyhzdHJ1Y3QgbW1fc3RydWN0ICogbW0pOworCitleHRlcm4gdW5zaWduZWQgbG9uZyB0aHJlYWRfc2F2ZWRfcGMoc3RydWN0IHRhc2tfc3RydWN0ICopOworCisvKiBDb3B5IGFuZCByZWxlYXNlIGFsbCBzZWdtZW50IGluZm8gYXNzb2NpYXRlZCB3aXRoIGEgVk0gKi8KKyNkZWZpbmUgY29weV9zZWdtZW50cyhwLCBtbSkgIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgcmVsZWFzZV9zZWdtZW50cyhtbSkgIGRvIHsgfSB3aGlsZSAoMCkKKwordW5zaWduZWQgbG9uZyBnZXRfd2NoYW4oc3RydWN0IHRhc2tfc3RydWN0ICpwKTsKKyNkZWZpbmUgS1NUS19FSVAodHNrKSAgKCh0c2spLT50aHJlYWQubHIpCisjZGVmaW5lIEtTVEtfRVNQKHRzaykgICgodHNrKS0+dGhyZWFkLnNwKQorCisjZGVmaW5lIFRIUkVBRF9TSVpFICgyKlBBR0VfU0laRSkKKworI2RlZmluZSBjcHVfcmVsYXgoKQliYXJyaWVyKCkKKworI2VuZGlmIC8qIF9BU01fTTMyUl9QUk9DRVNTT1JfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9wdHJhY2UuaCBiL2luY2x1ZGUvYXNtLW0zMnIvcHRyYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc2NDE3MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvcHRyYWNlLmgKQEAgLTAsMCArMSwxNjUgQEAKKyNpZm5kZWYgX0FTTV9NMzJSX1BUUkFDRV9ICisjZGVmaW5lIF9BU01fTTMyUl9QVFJBQ0VfSAorCisvKgorICogbGludXgvaW5jbHVkZS9hc20tbTMyci9wdHJhY2UuaAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIE0zMlIgdmVyc2lvbjoKKyAqICAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIsIDIwMDQgIEhpcm9rYXp1IFRha2F0YSA8dGFrYXRhIGF0IGxpbnV4LW0zMnIub3JnPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxhc20vbTMyci5oPgkJLyogTTMyUl9QU1dfQlNNLCBNMzJSX1BTV19CUE0gKi8KKworLyogMCAtIDEzIGFyZSBpbnRlZ2VyIHJlZ2lzdGVycyAoZ2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVycykuICAqLworI2RlZmluZSBQVF9SNAkJMAorI2RlZmluZSBQVF9SNQkJMQorI2RlZmluZSBQVF9SNgkJMgorI2RlZmluZSBQVF9SRUdTIAkzCisjZGVmaW5lIFBUX1IwCQk0CisjZGVmaW5lIFBUX1IxCQk1CisjZGVmaW5lIFBUX1IyCQk2CisjZGVmaW5lIFBUX1IzCQk3CisjZGVmaW5lIFBUX1I3CQk4CisjZGVmaW5lIFBUX1I4CQk5CisjZGVmaW5lIFBUX1I5CQkxMAorI2RlZmluZSBQVF9SMTAJCTExCisjZGVmaW5lIFBUX1IxMQkJMTIKKyNkZWZpbmUgUFRfUjEyCQkxMworI2RlZmluZSBQVF9TWVNDTlIJMTQKKyNkZWZpbmUgUFRfUjEzCQlQVF9GUAorI2RlZmluZSBQVF9SMTQJCVBUX0xSCisjZGVmaW5lIFBUX1IxNQkJUFRfU1AKKworLyogcHJvY2Vzc29yIHN0YXR1cyBhbmQgbWlzY2VsbGFuZW91cyBjb250ZXh0IHJlZ2lzdGVycy4gICovCisjaWYgZGVmaW5lZChDT05GSUdfSVNBX00zMlIyKSAmJiBkZWZpbmVkKENPTkZJR19JU0FfRFNQX0xFVkVMMikKKyNkZWZpbmUgUFRfQUNDMEgJMTUKKyNkZWZpbmUgUFRfQUNDMEwJMTYKKyNkZWZpbmUgUFRfQUNDMUgJMTcKKyNkZWZpbmUgUFRfQUNDMUwJMTgKKyNkZWZpbmUgUFRfQUNDSAkJUFRfQUNDMEgKKyNkZWZpbmUgUFRfQUNDTAkJUFRfQUNDMEwKKyNkZWZpbmUgUFRfUFNXCQkxOQorI2RlZmluZSBQVF9CUEMJCTIwCisjZGVmaW5lIFBUX0JCUFNXCTIxCisjZGVmaW5lIFBUX0JCUEMJCTIyCisjZGVmaW5lIFBUX1NQVQkJMjMKKyNkZWZpbmUgUFRfRlAJCTI0CisjZGVmaW5lIFBUX0xSCQkyNQorI2RlZmluZSBQVF9TUEkJCTI2CisjZGVmaW5lIFBUX09SSUdSMAkyNworI2VsaWYgZGVmaW5lZChDT05GSUdfSVNBX00zMlIyKSB8fCBkZWZpbmVkKENPTkZJR19JU0FfTTMyUikKKyNkZWZpbmUgUFRfQUNDSAkJMTUKKyNkZWZpbmUgUFRfQUNDTAkJMTYKKyNkZWZpbmUgUFRfUFNXCQkxNworI2RlZmluZSBQVF9CUEMJCTE4CisjZGVmaW5lIFBUX0JCUFNXCTE5CisjZGVmaW5lIFBUX0JCUEMJCTIwCisjZGVmaW5lIFBUX1NQVQkJMjEKKyNkZWZpbmUgUFRfRlAJCTIyCisjZGVmaW5lIFBUX0xSCQkyMworI2RlZmluZSBQVF9TUEkJCTI0CisjZGVmaW5lIFBUX09SSUdSMAkyNQorI2Vsc2UKKyNlcnJvciB1bmtub3duIGlzYSBjb25pZmlndXJhdGlvbgorI2VuZGlmCisKKy8qIHZpcnR1YWwgcHRfcmVnIGVudHJ5IGZvciBnZGIgKi8KKyNkZWZpbmUgUFRfUEMJCTMwCisjZGVmaW5lIFBUX0NCUgkJMzEKKyNkZWZpbmUgUFRfRVZCCQkzMgorCisKKy8qIENvbnRyb2wgcmVnaXN0ZXJzLiAgKi8KKyNkZWZpbmUgU1BSX0NSMCBQVF9QU1cKKyNkZWZpbmUgU1BSX0NSMSBQVF9DQlIJCS8qIHJlYWQgb25seSAqLworI2RlZmluZSBTUFJfQ1IyIFBUX1NQSQorI2RlZmluZSBTUFJfQ1IzIFBUX1NQVQorI2RlZmluZSBTUFJfQ1I0CisjZGVmaW5lIFNQUl9DUjUgUFRfRVZCCQkvKiBwYXJ0IG9mIE0zMlIvRSwgTTMyUi9JIGNvcmUgb25seSAqLworI2RlZmluZSBTUFJfQ1I2IFBUX0JQQworI2RlZmluZSBTUFJfQ1I3CisjZGVmaW5lIFNQUl9DUjggUFRfQkJQU1cKKyNkZWZpbmUgU1BSX0NSOQorI2RlZmluZSBTUFJfQ1IxMAorI2RlZmluZSBTUFJfQ1IxMQorI2RlZmluZSBTUFJfQ1IxMgorI2RlZmluZSBTUFJfQ1IxMyBQVF9XUgorI2RlZmluZSBTUFJfQ1IxNCBQVF9CQlBDCisjZGVmaW5lIFNQUl9DUjE1CisKKy8qIHRoaXMgc3RydWN0IGRlZmluZXMgdGhlIHdheSB0aGUgcmVnaXN0ZXJzIGFyZSBzdG9yZWQgb24gdGhlCisgICBzdGFjayBkdXJpbmcgYSBzeXN0ZW0gY2FsbC4gKi8KK3N0cnVjdCBwdF9yZWdzIHsKKwkvKiBTYXZlZCBtYWluIHByb2Nlc3NvciByZWdpc3RlcnMuICovCisJdW5zaWduZWQgbG9uZyByNDsKKwl1bnNpZ25lZCBsb25nIHI1OworCXVuc2lnbmVkIGxvbmcgcjY7CisJc3RydWN0IHB0X3JlZ3MgKnB0X3JlZ3M7CisJdW5zaWduZWQgbG9uZyByMDsKKwl1bnNpZ25lZCBsb25nIHIxOworCXVuc2lnbmVkIGxvbmcgcjI7CisJdW5zaWduZWQgbG9uZyByMzsKKwl1bnNpZ25lZCBsb25nIHI3OworCXVuc2lnbmVkIGxvbmcgcjg7CisJdW5zaWduZWQgbG9uZyByOTsKKwl1bnNpZ25lZCBsb25nIHIxMDsKKwl1bnNpZ25lZCBsb25nIHIxMTsKKwl1bnNpZ25lZCBsb25nIHIxMjsKKwlsb25nIHN5c2NhbGxfbnI7CisKKwkvKiBTYXZlZCBtYWluIHByb2Nlc3NvciBzdGF0dXMgYW5kIG1pc2NlbGxhbmVvdXMgY29udGV4dCByZWdpc3RlcnMuICovCisjaWYgZGVmaW5lZChDT05GSUdfSVNBX00zMlIyKSAmJiBkZWZpbmVkKENPTkZJR19JU0FfRFNQX0xFVkVMMikKKwl1bnNpZ25lZCBsb25nIGFjYzBoOworCXVuc2lnbmVkIGxvbmcgYWNjMGw7CisJdW5zaWduZWQgbG9uZyBhY2MxaDsKKwl1bnNpZ25lZCBsb25nIGFjYzFsOworI2VsaWYgZGVmaW5lZChDT05GSUdfSVNBX00zMlIyKSB8fCBkZWZpbmVkKENPTkZJR19JU0FfTTMyUikKKwl1bnNpZ25lZCBsb25nIGFjY2g7CisJdW5zaWduZWQgbG9uZyBhY2NsOworI2Vsc2UKKyNlcnJvciB1bmtub3duIGlzYSBjb25maWd1cmF0aW9uCisjZW5kaWYKKwl1bnNpZ25lZCBsb25nIHBzdzsKKwl1bnNpZ25lZCBsb25nIGJwYzsJCS8qIHNhdmVkIFBDIGZvciBUUkFQIHN5c2NhbGxzICovCisJdW5zaWduZWQgbG9uZyBiYnBzdzsKKwl1bnNpZ25lZCBsb25nIGJicGM7CisJdW5zaWduZWQgbG9uZyBzcHU7CQkvKiBzYXZlZCB1c2VyIHN0YWNrICovCisJdW5zaWduZWQgbG9uZyBmcDsKKwl1bnNpZ25lZCBsb25nIGxyOwkJLyogc2F2ZWQgUEMgZm9yIEpMIHN5c2NhbGxzICovCisJdW5zaWduZWQgbG9uZyBzcGk7CQkvKiBzYXZlZCBrZXJuZWwgc3RhY2sgKi8KKwl1bnNpZ25lZCBsb25nIG9yaWdfcjA7Cit9OworCisvKiBBcmJpdHJhcmlseSBjaG9vc2UgdGhlIHNhbWUgcHRyYWNlIG51bWJlcnMgYXMgdXNlZCBieSB0aGUgU3BhcmMgY29kZS4gKi8KKyNkZWZpbmUgUFRSQUNFX0dFVFJFR1MJCTEyCisjZGVmaW5lIFBUUkFDRV9TRVRSRUdTCQkxMworCisjZGVmaW5lIFBUUkFDRV9PTERTRVRPUFRJT05TCTIxCisKKy8qIG9wdGlvbnMgc2V0IHVzaW5nIFBUUkFDRV9TRVRPUFRJT05TICovCisjZGVmaW5lIFBUUkFDRV9PX1RSQUNFU1lTR09PRAkweDAwMDAwMDAxCisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaWYgZGVmaW5lZChDT05GSUdfSVNBX00zMlIyKSB8fCBkZWZpbmVkKENPTkZJR19DSElQX1ZERUMyKQorI2RlZmluZSB1c2VyX21vZGUocmVncykgKChNMzJSX1BTV19CUE0gJiAocmVncyktPnBzdykgIT0gMCkKKyNlbGlmIGRlZmluZWQoQ09ORklHX0lTQV9NMzJSKQorI2RlZmluZSB1c2VyX21vZGUocmVncykgKChNMzJSX1BTV19CU00gJiAocmVncyktPnBzdykgIT0gMCkKKyNlbHNlCisjZXJyb3IgdW5rbm93biBpc2EgY29uZmlndXJhdGlvbgorI2VuZGlmCisKKyNkZWZpbmUgaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKSAoKHJlZ3MpLT5icGMpCisjZGVmaW5lIHByb2ZpbGVfcGMocmVncykgaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKQorCitleHRlcm4gdm9pZCBzaG93X3JlZ3Moc3RydWN0IHB0X3JlZ3MgKik7CisKK2V4dGVybiB2b2lkIHdpdGhkcmF3X2RlYnVnX3RyYXAoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCisjZW5kaWYgLyogX19LRVJORUwgKi8KKworI2VuZGlmIC8qIF9BU01fTTMyUl9QVFJBQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9yZXNvdXJjZS5oIGIvaW5jbHVkZS9hc20tbTMyci9yZXNvdXJjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxY2U3NjYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL3Jlc291cmNlLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9BU01fTTMyUl9SRVNPVVJDRV9ICisjZGVmaW5lIF9BU01fTTMyUl9SRVNPVVJDRV9ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9yZXNvdXJjZS5oPgorCisjZW5kaWYgIC8qIF9BU01fTTMyUl9SRVNPVVJDRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL3J0Yy5oIGIvaW5jbHVkZS9hc20tbTMyci9ydGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzNjZGY2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTMyci9ydGMuaApAQCAtMCwwICsxLDcwIEBACisvKiAkSWQ6IHJ0Yy5oLHYgMS4xLjEuMSAyMDA0LzAzLzI1IDA0OjI5OjIyIGhpdG9zaGl5IEV4cCAkICovCisKKyNpZm5kZWYgX19SVENfSF9fCisjZGVmaW5lIF9fUlRDX0hfXworCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworICAgLyogRGFsbGFzIERTMTMwMiBjbG9jay9jYWxlbmRhciByZWdpc3RlciBudW1iZXJzLiAqLworIyAgZGVmaW5lIFJUQ19TRUNPTkRTICAgICAgMAorIyAgZGVmaW5lIFJUQ19NSU5VVEVTICAgICAgMQorIyAgZGVmaW5lIFJUQ19IT1VSUyAgICAgICAgMgorIyAgZGVmaW5lIFJUQ19EQVlfT0ZfTU9OVEggMworIyAgZGVmaW5lIFJUQ19NT05USCAgICAgICAgNAorIyAgZGVmaW5lIFJUQ19XRUVLREFZICAgICAgNQorIyAgZGVmaW5lIFJUQ19ZRUFSICAgICAgICAgNgorIyAgZGVmaW5lIFJUQ19DT05UUk9MICAgICAgNworCisgICAvKiBCaXRzIGluIENPTlRST0wgcmVnaXN0ZXIuICovCisjICBkZWZpbmUgUlRDX0NPTlRST0xfV1JJVEVQUk9URUNUIAkweDgwCisjICBkZWZpbmUgUlRDX1RSSUNLTEVDSEFSR0VSIAkJOAorCisgIC8qIEJpdHMgaW4gVFJJQ0tMRUNIQVJHRVIgcmVnaXN0ZXIgVENTIFRDUyBUQ1MgVENTIERTIERTIFJTIFJTLiAqLworIyAgZGVmaW5lIFJUQ19UQ1JfUEFUVEVSTiAJMHhBMAkvKiAxMDEweHh4eCAqLworIyAgZGVmaW5lIFJUQ19UQ1JfMURJT0QgCTB4MDQJLyogeHh4eDAxeHggKi8KKyMgIGRlZmluZSBSVENfVENSXzJESU9EIAkweDA4CS8qIHh4eHgxMHh4ICovCisjICBkZWZpbmUgUlRDX1RDUl9ESVNBQkxFRCAJMHgwMAkvKiB4eHh4eHgwMCBEaXNhYmxlZCAqLworIyAgZGVmaW5lIFJUQ19UQ1JfMktPSE0gCTB4MDEJLyogeHh4eHh4MDEgMktPaG0gKi8KKyMgIGRlZmluZSBSVENfVENSXzRLT0hNIAkweDAyCS8qIHh4eHh4eDEwIDRrT2htICovCisjICBkZWZpbmUgUlRDX1RDUl84S09ITSAJMHgwMwkvKiB4eHh4eHgxMSA4a09obSAqLworCisjaWZkZWYgQ09ORklHX0RTMTMwMgorZXh0ZXJuIHVuc2lnbmVkIGNoYXIgZHMxMzAyX3JlYWRyZWcoaW50IHJlZyk7CitleHRlcm4gdm9pZCBkczEzMDJfd3JpdGVyZWcoaW50IHJlZywgdW5zaWduZWQgY2hhciB2YWwpOworZXh0ZXJuIGludCBkczEzMDJfaW5pdCh2b2lkKTsKKyMgIGRlZmluZSBDTU9TX1JFQUQoeCkgZHMxMzAyX3JlYWRyZWcoeCkKKyMgIGRlZmluZSBDTU9TX1dSSVRFKHZhbCxyZWcpIGRzMTMwMl93cml0ZXJlZyhyZWcsdmFsKQorIyAgZGVmaW5lIFJUQ19JTklUKCkgZHMxMzAyX2luaXQoKQorI2Vsc2UKKyAgLyogTm8gUlRDIGNvbmZpZ3VyZWQgc28gd2Ugc2hvdWxkbid0IHRyeSB0byBhY2Nlc3MgYW55LiAqLworIyAgZGVmaW5lIENNT1NfUkVBRCh4KSA0MgorIyAgZGVmaW5lIENNT1NfV1JJVEUoeCx5KQorIyAgZGVmaW5lIFJUQ19JTklUKCkgKC0xKQorI2VuZGlmCisKKy8qCisgKiBUaGUgc3RydWN0IHVzZWQgdG8gcGFzcyBkYXRhIHZpYSB0aGUgZm9sbG93aW5nIGlvY3RsLiBTaW1pbGFyIHRvIHRoZQorICogc3RydWN0IHRtIGluIDx0aW1lLmg+LCBidXQgaXQgbmVlZHMgdG8gYmUgaGVyZSBzbyB0aGF0IHRoZSBrZXJuZWwKKyAqIHNvdXJjZSBpcyBzZWxmIGNvbnRhaW5lZCwgYWxsb3dpbmcgY3Jvc3MtY29tcGlsZXMsIGV0Yy4gZXRjLgorICovCitzdHJ1Y3QgcnRjX3RpbWUgeworCWludCB0bV9zZWM7CisJaW50IHRtX21pbjsKKwlpbnQgdG1faG91cjsKKwlpbnQgdG1fbWRheTsKKwlpbnQgdG1fbW9uOworCWludCB0bV95ZWFyOworCWludCB0bV93ZGF5OworCWludCB0bV95ZGF5OworCWludCB0bV9pc2RzdDsKK307CisKKy8qIGlvY3RsKCkgY2FsbHMgdGhhdCBhcmUgcGVybWl0dGVkIHRvIHRoZSAvZGV2L3J0YyBpbnRlcmZhY2UuICovCisjZGVmaW5lIFJUQ19NQUdJQyAncCcKKyNkZWZpbmUgUlRDX1JEX1RJTUUJCV9JT1IoUlRDX01BR0lDLCAweDA5LCBzdHJ1Y3QgcnRjX3RpbWUpCS8qIFJlYWQgUlRDIHRpbWUuICovCisjZGVmaW5lIFJUQ19TRVRfVElNRQkJX0lPVyhSVENfTUFHSUMsIDB4MGEsIHN0cnVjdCBydGNfdGltZSkJLyogU2V0IFJUQyB0aW1lLiAqLworI2RlZmluZSBSVENfU0VUX0NIQVJHRSAgCV9JT1coUlRDX01BR0lDLCAweDBiLCBpbnQpCisjZGVmaW5lIFJUQ19NQVhfSU9DVEwgMHgwYgorCisjZW5kaWYgLyogX19SVENfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL3NjYXR0ZXJsaXN0LmggYi9pbmNsdWRlL2FzbS1tMzJyL3NjYXR0ZXJsaXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDlhMTBlNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvc2NhdHRlcmxpc3QuaApAQCAtMCwwICsxLDE4IEBACisjaWZuZGVmIF9BU01fTTMyUl9TQ0FUVEVSTElTVF9ICisjZGVmaW5lIF9BU01fTTMyUl9TQ0FUVEVSTElTVF9ICisKKy8qICRJZCQgKi8KKworc3RydWN0IHNjYXR0ZXJsaXN0IHsKKyAgICBjaGFyICogIGFkZHJlc3M7ICAgIC8qIExvY2F0aW9uIGRhdGEgaXMgdG8gYmUgdHJhbnNmZXJyZWQgdG8sIE5VTEwgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgKiBoaWdobWVtIHBhZ2UgKi8KKyAgICBzdHJ1Y3QgcGFnZSAqIHBhZ2U7IC8qIExvY2F0aW9uIGZvciBoaWdobWVtIHBhZ2UsIGlmIGFueSAqLworICAgIHVuc2lnbmVkIGludCBvZmZzZXQ7LyogZm9yIGhpZ2htZW0sIHBhZ2Ugb2Zmc2V0ICovCisKKyAgICBkbWFfYWRkcl90IGRtYV9hZGRyZXNzOworICAgIHVuc2lnbmVkIGludCBsZW5ndGg7Cit9OworCisjZGVmaW5lIElTQV9ETUFfVEhSRVNIT0xEICgweDFmZmZmZmZmKQorCisjZW5kaWYgLyogX0FTTV9NMzJSX1NDQVRURVJMSVNUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvc2VjdGlvbnMuaCBiL2luY2x1ZGUvYXNtLW0zMnIvc2VjdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Yjk2OWU1MwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvc2VjdGlvbnMuaApAQCAtMCwwICsxLDggQEAKKyNpZm5kZWYgX00zMlJfU0VDVElPTlNfSAorI2RlZmluZSBfTTMyUl9TRUNUSU9OU19ICisKKy8qIG5vdGhpbmcgdG8gc2VlLCBtb3ZlIGFsb25nICovCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2VjdGlvbnMuaD4KKworI2VuZGlmCS8qIF9NMzJSX1NFQ1RJT05TX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9zZWdtZW50LmggYi9pbmNsdWRlL2FzbS1tMzJyL3NlZ21lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDVkYjY4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTMyci9zZWdtZW50LmgKQEAgLTAsMCArMSwxNCBAQAorI2lmbmRlZiBfQVNNX00zMlJfU0VHTUVOVF9ICisjZGVmaW5lIF9BU01fTTMyUl9TRUdNRU5UX0gKKworLyogJElkJCAqLworCisvKiBvcmlnIDogaTM4NiAoMi40LjE4KSAqLworCisjZGVmaW5lIF9fS0VSTkVMX0NTCTB4MTAKKyNkZWZpbmUgX19LRVJORUxfRFMJMHgxOAorCisjZGVmaW5lIF9fVVNFUl9DUwkweDIzCisjZGVmaW5lIF9fVVNFUl9EUwkweDJCCisKKyNlbmRpZiAgLyogX0FTTV9NMzJSX1NFR01FTlRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9zZW1hcGhvcmUuaCBiL2luY2x1ZGUvYXNtLW0zMnIvc2VtYXBob3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNlM2M2MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvc2VtYXBob3JlLmgKQEAgLTAsMCArMSwyMDUgQEAKKyNpZm5kZWYgX0FTTV9NMzJSX1NFTUFQSE9SRV9ICisjZGVmaW5lIF9BU01fTTMyUl9TRU1BUEhPUkVfSAorCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorCisjaWZkZWYgX19LRVJORUxfXworCisvKgorICogU01QLSBhbmQgaW50ZXJydXB0LXNhZmUgc2VtYXBob3Jlcy4uCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk2ICBMaW51cyBUb3J2YWxkcworICogQ29weXJpZ2h0IChDKSAyMDA0ICBIaXJva2F6dSBUYWthdGEgPHRha2F0YSBhdCBsaW51eC1tMzJyLm9yZz4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L3J3c2VtLmg+CisjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisKK3N0cnVjdCBzZW1hcGhvcmUgeworCWF0b21pY190IGNvdW50OworCWludCBzbGVlcGVyczsKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OworfTsKKworI2RlZmluZSBfX1NFTUFQSE9SRV9JTklUSUFMSVpFUihuYW1lLCBuKQkJCQlcCit7CQkJCQkJCQkJXAorCS5jb3VudAkJPSBBVE9NSUNfSU5JVChuKSwJCQkJXAorCS5zbGVlcGVycwk9IDAsCQkJCQkJXAorCS53YWl0CQk9IF9fV0FJVF9RVUVVRV9IRUFEX0lOSVRJQUxJWkVSKChuYW1lKS53YWl0KQlcCit9CisKKyNkZWZpbmUgX19NVVRFWF9JTklUSUFMSVpFUihuYW1lKSBcCisJX19TRU1BUEhPUkVfSU5JVElBTElaRVIobmFtZSwxKQorCisjZGVmaW5lIF9fREVDTEFSRV9TRU1BUEhPUkVfR0VORVJJQyhuYW1lLGNvdW50KSBcCisJc3RydWN0IHNlbWFwaG9yZSBuYW1lID0gX19TRU1BUEhPUkVfSU5JVElBTElaRVIobmFtZSxjb3VudCkKKworI2RlZmluZSBERUNMQVJFX01VVEVYKG5hbWUpIF9fREVDTEFSRV9TRU1BUEhPUkVfR0VORVJJQyhuYW1lLDEpCisjZGVmaW5lIERFQ0xBUkVfTVVURVhfTE9DS0VEKG5hbWUpIF9fREVDTEFSRV9TRU1BUEhPUkVfR0VORVJJQyhuYW1lLDApCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZW1hX2luaXQgKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSwgaW50IHZhbCkKK3sKKy8qCisgKgkqc2VtID0gKHN0cnVjdCBzZW1hcGhvcmUpX19TRU1BUEhPUkVfSU5JVElBTElaRVIoKCpzZW0pLHZhbCk7CisgKgorICogaSdkIHJhdGhlciB1c2UgdGhlIG1vcmUgZmxleGlibGUgaW5pdGlhbGl6YXRpb24gYWJvdmUsIGJ1dCBzYWRseQorICogR0NDIDIuNy4yLjMgZW1pdHMgYSBib2d1cyB3YXJuaW5nLiBFR0NTIGRvZXNudC4gT2ggd2VsbC4KKyAqLworCWF0b21pY19zZXQoJnNlbS0+Y291bnQsIHZhbCk7CisJc2VtLT5zbGVlcGVycyA9IDA7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmc2VtLT53YWl0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGluaXRfTVVURVggKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKK3sKKwlzZW1hX2luaXQoc2VtLCAxKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGluaXRfTVVURVhfTE9DS0VEIChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCit7CisJc2VtYV9pbml0KHNlbSwgMCk7Cit9CisKK2FzbWxpbmthZ2Ugdm9pZCBfX2Rvd25fZmFpbGVkKHZvaWQgLyogc3BlY2lhbCByZWdpc3RlciBjYWxsaW5nIGNvbnZlbnRpb24gKi8pOworYXNtbGlua2FnZSBpbnQgIF9fZG93bl9mYWlsZWRfaW50ZXJydXB0aWJsZSh2b2lkICAvKiBwYXJhbXMgaW4gcmVnaXN0ZXJzICovKTsKK2FzbWxpbmthZ2UgaW50ICBfX2Rvd25fZmFpbGVkX3RyeWxvY2sodm9pZCAgLyogcGFyYW1zIGluIHJlZ2lzdGVycyAqLyk7Cithc21saW5rYWdlIHZvaWQgX191cF93YWtldXAodm9pZCAvKiBzcGVjaWFsIHJlZ2lzdGVyIGNhbGxpbmcgY29udmVudGlvbiAqLyk7CisKK2FzbWxpbmthZ2Ugdm9pZCBfX2Rvd24oc3RydWN0IHNlbWFwaG9yZSAqIHNlbSk7Cithc21saW5rYWdlIGludCAgX19kb3duX2ludGVycnVwdGlibGUoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSk7Cithc21saW5rYWdlIGludCAgX19kb3duX3RyeWxvY2soc3RydWN0IHNlbWFwaG9yZSAqIHNlbSk7Cithc21saW5rYWdlIHZvaWQgX191cChzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKTsKKworLyoKKyAqIEF0b21pY2FsbHkgZGVjcmVtZW50IHRoZSBzZW1hcGhvcmUncyBjb3VudC4gIElmIGl0IGdvZXMgbmVnYXRpdmUsCisgKiBibG9jayB0aGUgY2FsbGluZyB0aHJlYWQgaW4gdGhlIFRBU0tfVU5JTlRFUlJVUFRJQkxFIHN0YXRlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgZG93bihzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJbG9uZyBjb3VudDsKKworCW1pZ2h0X3NsZWVwKCk7CisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwkJIiMgZG93bgkJCQlcblx0IgorCQlEQ0FDSEVfQ0xFQVIoIiUwIiwgInI0IiwgIiUxIikKKwkJTTMyUl9MT0NLIiAlMCwgQCUxOwkJXG5cdCIKKwkJImFkZGkJJTAsICMtMTsJCVxuXHQiCisJCU0zMlJfVU5MT0NLIiAlMCwgQCUxOwkJXG5cdCIKKwkJOiAiPSZyIiAoY291bnQpCisJCTogInIiICgmc2VtLT5jb3VudCkKKwkJOiAibWVtb3J5IgorI2lmZGVmIENPTkZJR19DSElQX00zMjcwMF9UUzEKKwkJLCAicjQiCisjZW5kaWYJLyogQ09ORklHX0NISVBfTTMyNzAwX1RTMSAqLworCSk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJaWYgKHVubGlrZWx5KGNvdW50IDwgMCkpCisJCV9fZG93bihzZW0pOworfQorCisvKgorICogSW50ZXJydXB0aWJsZSB0cnkgdG8gYWNxdWlyZSBhIHNlbWFwaG9yZS4gIElmIHdlIG9idGFpbmVkCisgKiBpdCwgcmV0dXJuIHplcm8uICBJZiB3ZSB3ZXJlIGludGVycnVwdGVkLCByZXR1cm5zIC1FSU5UUgorICovCitzdGF0aWMgaW5saW5lIGludCBkb3duX2ludGVycnVwdGlibGUoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWxvbmcgY291bnQ7CisJaW50IHJlc3VsdCA9IDA7CisKKwltaWdodF9zbGVlcCgpOworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCSIjIGRvd25faW50ZXJydXB0aWJsZQkJXG5cdCIKKwkJRENBQ0hFX0NMRUFSKCIlMCIsICJyNCIsICIlMSIpCisJCU0zMlJfTE9DSyIgJTAsIEAlMTsJCVxuXHQiCisJCSJhZGRpCSUwLCAjLTE7CQlcblx0IgorCQlNMzJSX1VOTE9DSyIgJTAsIEAlMTsJCVxuXHQiCisJCTogIj0mciIgKGNvdW50KQorCQk6ICJyIiAoJnNlbS0+Y291bnQpCisJCTogIm1lbW9yeSIKKyNpZmRlZiBDT05GSUdfQ0hJUF9NMzI3MDBfVFMxCisJCSwgInI0IgorI2VuZGlmCS8qIENPTkZJR19DSElQX00zMjcwMF9UUzEgKi8KKwkpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCWlmICh1bmxpa2VseShjb3VudCA8IDApKQorCQlyZXN1bHQgPSBfX2Rvd25faW50ZXJydXB0aWJsZShzZW0pOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIE5vbi1ibG9ja2luZ2x5IGF0dGVtcHQgdG8gZG93bigpIGEgc2VtYXBob3JlLgorICogUmV0dXJucyB6ZXJvIGlmIHdlIGFjcXVpcmVkIGl0CisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGRvd25fdHJ5bG9jayhzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJbG9uZyBjb3VudDsKKwlpbnQgcmVzdWx0ID0gMDsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCSIjIGRvd25fdHJ5bG9jawkJCVxuXHQiCisJCURDQUNIRV9DTEVBUigiJTAiLCAicjQiLCAiJTEiKQorCQlNMzJSX0xPQ0siICUwLCBAJTE7CQlcblx0IgorCQkiYWRkaQklMCwgIy0xOwkJXG5cdCIKKwkJTTMyUl9VTkxPQ0siICUwLCBAJTE7CQlcblx0IgorCQk6ICI9JnIiIChjb3VudCkKKwkJOiAiciIgKCZzZW0tPmNvdW50KQorCQk6ICJtZW1vcnkiCisjaWZkZWYgQ09ORklHX0NISVBfTTMyNzAwX1RTMQorCQksICJyNCIKKyNlbmRpZgkvKiBDT05GSUdfQ0hJUF9NMzI3MDBfVFMxICovCisJKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlpZiAodW5saWtlbHkoY291bnQgPCAwKSkKKwkJcmVzdWx0ID0gX19kb3duX3RyeWxvY2soc2VtKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBOb3RlISBUaGlzIGlzIHN1YnRsZS4gV2UganVtcCB0byB3YWtlIHBlb3BsZSB1cCBvbmx5IGlmCisgKiB0aGUgc2VtYXBob3JlIHdhcyBuZWdhdGl2ZSAoPT0gc29tZWJvZHkgd2FzIHdhaXRpbmcgb24gaXQpLgorICogVGhlIGRlZmF1bHQgY2FzZSAobm8gY29udGVudGlvbikgd2lsbCByZXN1bHQgaW4gTk8KKyAqIGp1bXBzIGZvciBib3RoIGRvd24oKSBhbmQgdXAoKS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHVwKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlsb25nIGNvdW50OworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwkJIiMgdXAJCQkJXG5cdCIKKwkJRENBQ0hFX0NMRUFSKCIlMCIsICJyNCIsICIlMSIpCisJCU0zMlJfTE9DSyIgJTAsIEAlMTsJCVxuXHQiCisJCSJhZGRpCSUwLCAjMTsJCQlcblx0IgorCQlNMzJSX1VOTE9DSyIgJTAsIEAlMTsJCVxuXHQiCisJCTogIj0mciIgKGNvdW50KQorCQk6ICJyIiAoJnNlbS0+Y291bnQpCisJCTogIm1lbW9yeSIKKyNpZmRlZiBDT05GSUdfQ0hJUF9NMzI3MDBfVFMxCisJCSwgInI0IgorI2VuZGlmCS8qIENPTkZJR19DSElQX00zMjcwMF9UUzEgKi8KKwkpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCWlmICh1bmxpa2VseShjb3VudCA8PSAwKSkKKwkJX191cChzZW0pOworfQorCisjZW5kaWYgIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmICAvKiBfQVNNX00zMlJfU0VNQVBIT1JFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvc2VtYnVmLmggYi9pbmNsdWRlL2FzbS1tMzJyL3NlbWJ1Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OTAxOGUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL3NlbWJ1Zi5oCkBAIC0wLDAgKzEsMjkgQEAKKyNpZm5kZWYgX0FTTV9NMzJSX1NFTUJVRl9ICisjZGVmaW5lIF9BU01fTTMyUl9TRU1CVUZfSAorCisvKiAkSWQkICovCisKKy8qIG9yaWcgOiBpMzg2IDIuNC4xOCAqLworCisvKgorICogVGhlIHNlbWlkNjRfZHMgc3RydWN0dXJlIGZvciBtMzJyIGFyY2hpdGVjdHVyZS4KKyAqIE5vdGUgZXh0cmEgcGFkZGluZyBiZWNhdXNlIHRoaXMgc3RydWN0dXJlIGlzIHBhc3NlZCBiYWNrIGFuZCBmb3J0aAorICogYmV0d2VlbiBrZXJuZWwgYW5kIHVzZXIgc3BhY2UuCisgKgorICogUGFkIHNwYWNlIGlzIGxlZnQgZm9yOgorICogLSA2NC1iaXQgdGltZV90IHRvIHNvbHZlIHkyMDM4IHByb2JsZW0KKyAqIC0gMiBtaXNjZWxsYW5lb3VzIDMyLWJpdCB2YWx1ZXMKKyAqLworCitzdHJ1Y3Qgc2VtaWQ2NF9kcyB7CisJc3RydWN0IGlwYzY0X3Blcm0gc2VtX3Blcm07CQkvKiBwZXJtaXNzaW9ucyAuLiBzZWUgaXBjLmggKi8KKwlfX2tlcm5lbF90aW1lX3QJc2VtX290aW1lOwkJLyogbGFzdCBzZW1vcCB0aW1lICovCisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDE7CisJX19rZXJuZWxfdGltZV90CXNlbV9jdGltZTsJCS8qIGxhc3QgY2hhbmdlIHRpbWUgKi8KKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkMjsKKwl1bnNpZ25lZCBsb25nCXNlbV9uc2VtczsJCS8qIG5vLiBvZiBzZW1hcGhvcmVzIGluIGFycmF5ICovCisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDM7CisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDQ7Cit9OworCisjZW5kaWYgLyogX0FTTV9NMzJSX1NFTUJVRl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL3NlcmlhbC5oIGIvaW5jbHVkZS9hc20tbTMyci9zZXJpYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmY0ODBmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTMyci9zZXJpYWwuaApAQCAtMCwwICsxLDEwIEBACisjaWZuZGVmIF9BU01fTTMyUl9TRVJJQUxfSAorI2RlZmluZSBfQVNNX00zMlJfU0VSSUFMX0gKKworLyogaW5jbHVkZS9hc20tbTMyci9zZXJpYWwuaCAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNkZWZpbmUgQkFTRV9CQVVECTExNTIwMAorCisjZW5kaWYgIC8qIF9BU01fTTMyUl9TRVJJQUxfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9zZXR1cC5oIGIvaW5jbHVkZS9hc20tbTMyci9zZXR1cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmMDI4ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL3NldHVwLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIFRoaXMgaXMgc2V0IHVwIGJ5IHRoZSBzZXR1cC1yb3V0aW5lIGF0IGJvb3QtdGltZQorICovCisjZGVmaW5lIFBBUkFNCQkJKCh1bnNpZ25lZCBjaGFyICopZW1wdHlfemVyb19wYWdlKQorCisjZGVmaW5lIE1PVU5UX1JPT1RfUkRPTkxZCSgqKHVuc2lnbmVkIGxvbmcgKikgKFBBUkFNKzB4MDAwKSkKKyNkZWZpbmUgUkFNRElTS19GTEFHUwkJKCoodW5zaWduZWQgbG9uZyAqKSAoUEFSQU0rMHgwMDQpKQorI2RlZmluZSBPUklHX1JPT1RfREVWCQkoKih1bnNpZ25lZCBsb25nICopIChQQVJBTSsweDAwOCkpCisjZGVmaW5lIExPQURFUl9UWVBFCQkoKih1bnNpZ25lZCBsb25nICopIChQQVJBTSsweDAwYykpCisjZGVmaW5lIElOSVRSRF9TVEFSVAkJKCoodW5zaWduZWQgbG9uZyAqKSAoUEFSQU0rMHgwMTApKQorI2RlZmluZSBJTklUUkRfU0laRQkJKCoodW5zaWduZWQgbG9uZyAqKSAoUEFSQU0rMHgwMTQpKQorCisjZGVmaW5lIE0zMlJfQ1BVQ0xLCQkoKih1bnNpZ25lZCBsb25nICopIChQQVJBTSsweDAxOCkpCisjZGVmaW5lIE0zMlJfQlVTQ0xLCQkoKih1bnNpZ25lZCBsb25nICopIChQQVJBTSsweDAxYykpCisjZGVmaW5lIE0zMlJfVElNRVJfRElWSURFCSgqKHVuc2lnbmVkIGxvbmcgKikgKFBBUkFNKzB4MDIwKSkKKworI2RlZmluZSBDT01NQU5EX0xJTkUJCSgoY2hhciAqKSAoUEFSQU0rMHgxMDApKQorCisjZGVmaW5lIFNDUkVFTl9JTkZPCQkoKihzdHJ1Y3Qgc2NyZWVuX2luZm8gKikgKFBBUkFNKzB4MjAwKSkKKworI2RlZmluZSBDT01NQU5EX0xJTkVfU0laRQkoNTEyKQorCisjZGVmaW5lIFJBTURJU0tfSU1BR0VfU1RBUlRfTUFTSwkoMHgwN0ZGKQorI2RlZmluZSBSQU1ESVNLX1BST01QVF9GTEFHCQkoMHg4MDAwKQorI2RlZmluZSBSQU1ESVNLX0xPQURfRkxBRwkJKDB4NDAwMCkKKworI2RlZmluZSBQRk5fVVAoeCkJKCgoeCkgKyBQQUdFX1NJWkUtMSkgPj4gUEFHRV9TSElGVCkKKyNkZWZpbmUgUEZOX0RPV04oeCkJKCh4KSA+PiBQQUdFX1NISUZUKQorI2RlZmluZSBQRk5fUEhZUyh4KQkoKHgpIDw8IFBBR0VfU0hJRlQpCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIG1lbW9yeV9zdGFydDsKK2V4dGVybiB1bnNpZ25lZCBsb25nIG1lbW9yeV9lbmQ7CisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvc2htYnVmLmggYi9pbmNsdWRlL2FzbS1tMzJyL3NobWJ1Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4NGU4OTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL3NobWJ1Zi5oCkBAIC0wLDAgKzEsNDYgQEAKKyNpZm5kZWYgX0FTTV9NMzJSX1NITUJVRl9ICisjZGVmaW5lIF9BU01fTTMyUl9TSE1CVUZfSAorCisvKiAkSWQkICovCisKKy8qIG9yaWcgOiBpMzg2IDIuNC4xOCAqLworCisvKgorICogVGhlIHNobWlkNjRfZHMgc3RydWN0dXJlIGZvciBNMzJSIGFyY2hpdGVjdHVyZS4KKyAqIE5vdGUgZXh0cmEgcGFkZGluZyBiZWNhdXNlIHRoaXMgc3RydWN0dXJlIGlzIHBhc3NlZCBiYWNrIGFuZCBmb3J0aAorICogYmV0d2VlbiBrZXJuZWwgYW5kIHVzZXIgc3BhY2UuCisgKgorICogUGFkIHNwYWNlIGlzIGxlZnQgZm9yOgorICogLSA2NC1iaXQgdGltZV90IHRvIHNvbHZlIHkyMDM4IHByb2JsZW0KKyAqIC0gMiBtaXNjZWxsYW5lb3VzIDMyLWJpdCB2YWx1ZXMKKyAqLworCitzdHJ1Y3Qgc2htaWQ2NF9kcyB7CisJc3RydWN0IGlwYzY0X3Blcm0Jc2htX3Blcm07CS8qIG9wZXJhdGlvbiBwZXJtcyAqLworCXNpemVfdAkJCXNobV9zZWdzejsJLyogc2l6ZSBvZiBzZWdtZW50IChieXRlcykgKi8KKwlfX2tlcm5lbF90aW1lX3QJCXNobV9hdGltZTsJLyogbGFzdCBhdHRhY2ggdGltZSAqLworCXVuc2lnbmVkIGxvbmcJCV9fdW51c2VkMTsKKwlfX2tlcm5lbF90aW1lX3QJCXNobV9kdGltZTsJLyogbGFzdCBkZXRhY2ggdGltZSAqLworCXVuc2lnbmVkIGxvbmcJCV9fdW51c2VkMjsKKwlfX2tlcm5lbF90aW1lX3QJCXNobV9jdGltZTsJLyogbGFzdCBjaGFuZ2UgdGltZSAqLworCXVuc2lnbmVkIGxvbmcJCV9fdW51c2VkMzsKKwlfX2tlcm5lbF9waWRfdAkJc2htX2NwaWQ7CS8qIHBpZCBvZiBjcmVhdG9yICovCisJX19rZXJuZWxfcGlkX3QJCXNobV9scGlkOwkvKiBwaWQgb2YgbGFzdCBvcGVyYXRvciAqLworCXVuc2lnbmVkIGxvbmcJCXNobV9uYXR0Y2g7CS8qIG5vLiBvZiBjdXJyZW50IGF0dGFjaGVzICovCisJdW5zaWduZWQgbG9uZwkJX191bnVzZWQ0OworCXVuc2lnbmVkIGxvbmcJCV9fdW51c2VkNTsKK307CisKK3N0cnVjdCBzaG1pbmZvNjQgeworCXVuc2lnbmVkIGxvbmcJc2htbWF4OworCXVuc2lnbmVkIGxvbmcJc2htbWluOworCXVuc2lnbmVkIGxvbmcJc2htbW5pOworCXVuc2lnbmVkIGxvbmcJc2htc2VnOworCXVuc2lnbmVkIGxvbmcJc2htYWxsOworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQxOworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQyOworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQzOworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQ0OworfTsKKworI2VuZGlmIC8qIF9BU01fTTMyUl9TSE1CVUZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9zaG1wYXJhbS5oIGIvaW5jbHVkZS9hc20tbTMyci9zaG1wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiMDAxOWIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL3NobXBhcmFtLmgKQEAgLTAsMCArMSw4IEBACisjaWZuZGVmIF9BU01fTTMyUl9TSE1QQVJBTV9ICisjZGVmaW5lIF9BU01fTTMyUl9TSE1QQVJBTV9ICisKKy8qICRJZCQgKi8KKworI2RlZmluZQlTSE1MQkEgUEFHRV9TSVpFCQkgLyogYXR0YWNoIGFkZHIgYSBtdWx0aXBsZSBvZiB0aGlzICovCisKKyNlbmRpZiAvKiBfQVNNX00zMlJfU0hNUEFSQU1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9zaWdjb250ZXh0LmggYi9pbmNsdWRlL2FzbS1tMzJyL3NpZ2NvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjMzZTJkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTMyci9zaWdjb250ZXh0LmgKQEAgLTAsMCArMSw1MCBAQAorI2lmbmRlZiBfQVNNX00zMlJfU0lHQ09OVEVYVF9ICisjZGVmaW5lIF9BU01fTTMyUl9TSUdDT05URVhUX0gKKworLyogJElkJCAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKK3N0cnVjdCBzaWdjb250ZXh0IHsKKwkvKiBDUFUgcmVnaXN0ZXJzICovCisJLyogU2F2ZWQgbWFpbiBwcm9jZXNzb3IgcmVnaXN0ZXJzLiAqLworCXVuc2lnbmVkIGxvbmcgc2NfcjQ7CisJdW5zaWduZWQgbG9uZyBzY19yNTsKKwl1bnNpZ25lZCBsb25nIHNjX3I2OworCXN0cnVjdCBwdF9yZWdzICpzY19wdF9yZWdzOworCXVuc2lnbmVkIGxvbmcgc2NfcjA7CisJdW5zaWduZWQgbG9uZyBzY19yMTsKKwl1bnNpZ25lZCBsb25nIHNjX3IyOworCXVuc2lnbmVkIGxvbmcgc2NfcjM7CisJdW5zaWduZWQgbG9uZyBzY19yNzsKKwl1bnNpZ25lZCBsb25nIHNjX3I4OworCXVuc2lnbmVkIGxvbmcgc2Nfcjk7CisJdW5zaWduZWQgbG9uZyBzY19yMTA7CisJdW5zaWduZWQgbG9uZyBzY19yMTE7CisJdW5zaWduZWQgbG9uZyBzY19yMTI7CisKKwkvKiBTYXZlZCBtYWluIHByb2Nlc3NvciBzdGF0dXMgYW5kIG1pc2NlbGxhbmVvdXMgY29udGV4dCByZWdpc3RlcnMuICovCisjaWYgZGVmaW5lZChDT05GSUdfSVNBX00zMlIyKSAmJiBkZWZpbmVkKENPTkZJR19JU0FfRFNQX0xFVkVMMikKKwl1bnNpZ25lZCBsb25nIHNjX2FjYzBoOworCXVuc2lnbmVkIGxvbmcgc2NfYWNjMGw7CisJdW5zaWduZWQgbG9uZyBzY19hY2MxaDsKKwl1bnNpZ25lZCBsb25nIHNjX2FjYzFsOworI2VsaWYgZGVmaW5lZChDT05GSUdfSVNBX00zMlIyKSB8fCBkZWZpbmVkKENPTkZJR19JU0FfTTMyUikKKwl1bnNpZ25lZCBsb25nIHNjX2FjY2g7CisJdW5zaWduZWQgbG9uZyBzY19hY2NsOworI2Vsc2UKKyNlcnJvciB1bmtub3duIGlzYSBjb25maWd1cmF0aW9uCisjZW5kaWYKKwl1bnNpZ25lZCBsb25nIHNjX3BzdzsKKwl1bnNpZ25lZCBsb25nIHNjX2JwYzsJCS8qIHNhdmVkIFBDIGZvciBUUkFQIHN5c2NhbGxzICovCisJdW5zaWduZWQgbG9uZyBzY19iYnBzdzsKKwl1bnNpZ25lZCBsb25nIHNjX2JicGM7CisJdW5zaWduZWQgbG9uZyBzY19zcHU7CQkvKiBzYXZlZCB1c2VyIHN0YWNrICovCisJdW5zaWduZWQgbG9uZyBzY19mcDsKKwl1bnNpZ25lZCBsb25nIHNjX2xyOwkJLyogc2F2ZWQgUEMgZm9yIEpMIHN5c2NhbGxzICovCisJdW5zaWduZWQgbG9uZyBzY19zcGk7CQkvKiBzYXZlZCBrZXJuZWwgc3RhY2sgKi8KKworCXVuc2lnbmVkIGxvbmcJb2xkbWFzazsKK307CisKKyNlbmRpZiAgLyogX0FTTV9NMzJSX1NJR0NPTlRFWFRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9zaWdpbmZvLmggYi9pbmNsdWRlL2FzbS1tMzJyL3NpZ2luZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODIyMDJmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTMyci9zaWdpbmZvLmgKQEAgLTAsMCArMSw4IEBACisjaWZuZGVmIF9NMzJSX1NJR0lORk9fSAorI2RlZmluZSBfTTMyUl9TSUdJTkZPX0gKKworLyogJElkJCAqLworCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2lnaW5mby5oPgorCisjZW5kaWYgLyogX00zMlJfU0lHSU5GT19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL3NpZ25hbC5oIGIvaW5jbHVkZS9hc20tbTMyci9zaWduYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTQ2ZWFlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTMyci9zaWduYWwuaApAQCAtMCwwICsxLDIwMCBAQAorI2lmbmRlZiBfQVNNX00zMlJfU0lHTkFMX0gKKyNkZWZpbmUgX0FTTV9NMzJSX1NJR05BTF9ICisKKy8qICRJZCQgKi8KKworLyogb3JpZyA6IGkzODYgMi40LjE4ICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKworLyogQXZvaWQgdG9vIG1hbnkgaGVhZGVyIG9yZGVyaW5nIHByb2JsZW1zLiAgKi8KK3N0cnVjdCBzaWdpbmZvOworCisjaWZkZWYgX19LRVJORUxfXworLyogTW9zdCB0aGluZ3Mgc2hvdWxkIGJlIGNsZWFuIGVub3VnaCB0byByZWRlZmluZSB0aGlzIGF0IHdpbGwsIGlmIGNhcmUKKyAgIGlzIHRha2VuIHRvIG1ha2UgbGliYyBtYXRjaC4gICovCisKKyNkZWZpbmUgX05TSUcJCTY0CisjZGVmaW5lIF9OU0lHX0JQVwkzMgorI2RlZmluZSBfTlNJR19XT1JEUwkoX05TSUcgLyBfTlNJR19CUFcpCisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBvbGRfc2lnc2V0X3Q7CQkvKiBhdCBsZWFzdCAzMiBiaXRzICovCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBsb25nIHNpZ1tfTlNJR19XT1JEU107Cit9IHNpZ3NldF90OworCisjZWxzZQorLyogSGVyZSB3ZSBtdXN0IGNhdGVyIHRvIGxpYmNzIHRoYXQgcG9rZSBhYm91dCBpbiBrZXJuZWwgaGVhZGVycy4gICovCisKKyNkZWZpbmUgTlNJRwkJMzIKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBzaWdzZXRfdDsKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2RlZmluZSBTSUdIVVAJCSAxCisjZGVmaW5lIFNJR0lOVAkJIDIKKyNkZWZpbmUgU0lHUVVJVAkJIDMKKyNkZWZpbmUgU0lHSUxMCQkgNAorI2RlZmluZSBTSUdUUkFQCQkgNQorI2RlZmluZSBTSUdBQlJUCQkgNgorI2RlZmluZSBTSUdJT1QJCSA2CisjZGVmaW5lIFNJR0JVUwkJIDcKKyNkZWZpbmUgU0lHRlBFCQkgOAorI2RlZmluZSBTSUdLSUxMCQkgOQorI2RlZmluZSBTSUdVU1IxCQkxMAorI2RlZmluZSBTSUdTRUdWCQkxMQorI2RlZmluZSBTSUdVU1IyCQkxMgorI2RlZmluZSBTSUdQSVBFCQkxMworI2RlZmluZSBTSUdBTFJNCQkxNAorI2RlZmluZSBTSUdURVJNCQkxNQorI2RlZmluZSBTSUdTVEtGTFQJMTYKKyNkZWZpbmUgU0lHQ0hMRAkJMTcKKyNkZWZpbmUgU0lHQ09OVAkJMTgKKyNkZWZpbmUgU0lHU1RPUAkJMTkKKyNkZWZpbmUgU0lHVFNUUAkJMjAKKyNkZWZpbmUgU0lHVFRJTgkJMjEKKyNkZWZpbmUgU0lHVFRPVQkJMjIKKyNkZWZpbmUgU0lHVVJHCQkyMworI2RlZmluZSBTSUdYQ1BVCQkyNAorI2RlZmluZSBTSUdYRlNaCQkyNQorI2RlZmluZSBTSUdWVEFMUk0JMjYKKyNkZWZpbmUgU0lHUFJPRgkJMjcKKyNkZWZpbmUgU0lHV0lOQ0gJMjgKKyNkZWZpbmUgU0lHSU8JCTI5CisjZGVmaW5lIFNJR1BPTEwJCVNJR0lPCisvKgorI2RlZmluZSBTSUdMT1NUCQkyOQorKi8KKyNkZWZpbmUgU0lHUFdSCQkzMAorI2RlZmluZSBTSUdTWVMJCTMxCisjZGVmaW5lCVNJR1VOVVNFRAkzMQorCisvKiBUaGVzZSBzaG91bGQgbm90IGJlIGNvbnNpZGVyZWQgY29uc3RhbnRzIGZyb20gdXNlcmxhbmQuICAqLworI2RlZmluZSBTSUdSVE1JTgkzMgorI2RlZmluZSBTSUdSVE1BWAlfTlNJRworCisvKgorICogU0FfRkxBR1MgdmFsdWVzOgorICoKKyAqIFNBX09OU1RBQ0sgaW5kaWNhdGVzIHRoYXQgYSByZWdpc3RlcmVkIHN0YWNrX3Qgd2lsbCBiZSB1c2VkLgorICogU0FfSU5URVJSVVBUIGlzIGEgbm8tb3AsIGJ1dCBsZWZ0IGR1ZSB0byBoaXN0b3JpY2FsIHJlYXNvbnMuIFVzZSB0aGUKKyAqIFNBX1JFU1RBUlQgZmxhZyB0byBnZXQgcmVzdGFydGluZyBzaWduYWxzICh3aGljaCB3ZXJlIHRoZSBkZWZhdWx0IGxvbmcgYWdvKQorICogU0FfTk9DTERTVE9QIGZsYWcgdG8gdHVybiBvZmYgU0lHQ0hMRCB3aGVuIGNoaWxkcmVuIHN0b3AuCisgKiBTQV9SRVNFVEhBTkQgY2xlYXJzIHRoZSBoYW5kbGVyIHdoZW4gdGhlIHNpZ25hbCBpcyBkZWxpdmVyZWQuCisgKiBTQV9OT0NMRFdBSVQgZmxhZyBvbiBTSUdDSExEIHRvIGluaGliaXQgem9tYmllcy4KKyAqIFNBX05PREVGRVIgcHJldmVudHMgdGhlIGN1cnJlbnQgc2lnbmFsIGZyb20gYmVpbmcgbWFza2VkIGluIHRoZSBoYW5kbGVyLgorICoKKyAqIFNBX09ORVNIT1QgYW5kIFNBX05PTUFTSyBhcmUgdGhlIGhpc3RvcmljYWwgTGludXggbmFtZXMgZm9yIHRoZSBTaW5nbGUKKyAqIFVuaXggbmFtZXMgUkVTRVRIQU5EIGFuZCBOT0RFRkVSIHJlc3BlY3RpdmVseS4KKyAqLworI2RlZmluZSBTQV9OT0NMRFNUT1AJMHgwMDAwMDAwMXUKKyNkZWZpbmUgU0FfTk9DTERXQUlUCTB4MDAwMDAwMDJ1CisjZGVmaW5lIFNBX1NJR0lORk8JMHgwMDAwMDAwNHUKKyNkZWZpbmUgU0FfT05TVEFDSwkweDA4MDAwMDAwdQorI2RlZmluZSBTQV9SRVNUQVJUCTB4MTAwMDAwMDB1CisjZGVmaW5lIFNBX05PREVGRVIJMHg0MDAwMDAwMHUKKyNkZWZpbmUgU0FfUkVTRVRIQU5ECTB4ODAwMDAwMDB1CisKKyNkZWZpbmUgU0FfTk9NQVNLCVNBX05PREVGRVIKKyNkZWZpbmUgU0FfT05FU0hPVAlTQV9SRVNFVEhBTkQKKyNkZWZpbmUgU0FfSU5URVJSVVBUCTB4MjAwMDAwMDAgLyogZHVtbXkgLS0gaWdub3JlZCAqLworCisjZGVmaW5lIFNBX1JFU1RPUkVSCTB4MDQwMDAwMDAKKworLyoKKyAqIHNpZ2FsdHN0YWNrIGNvbnRyb2xzCisgKi8KKyNkZWZpbmUgU1NfT05TVEFDSwkxCisjZGVmaW5lIFNTX0RJU0FCTEUJMgorCisjZGVmaW5lIE1JTlNJR1NUS1NaCTIwNDgKKyNkZWZpbmUgU0lHU1RLU1oJODE5MgorCisjaWZkZWYgX19LRVJORUxfXworCisvKgorICogVGhlc2UgdmFsdWVzIG9mIHNhX2ZsYWdzIGFyZSB1c2VkIG9ubHkgYnkgdGhlIGtlcm5lbCBhcyBwYXJ0IG9mIHRoZQorICogaXJxIGhhbmRsaW5nIHJvdXRpbmVzLgorICoKKyAqIFNBX0lOVEVSUlVQVCBpcyBhbHNvIHVzZWQgYnkgdGhlIGlycSBoYW5kbGluZyByb3V0aW5lcy4KKyAqIFNBX1NISVJRIGlzIGZvciBzaGFyZWQgaW50ZXJydXB0IHN1cHBvcnQgb24gUENJIGFuZCBFSVNBLgorICovCisjZGVmaW5lIFNBX1BST0JFCQlTQV9PTkVTSE9UCisjZGVmaW5lIFNBX1NBTVBMRV9SQU5ET00JU0FfUkVTVEFSVAorI2RlZmluZSBTQV9TSElSUQkJMHgwNDAwMDAwMAorI2VuZGlmCisKKyNkZWZpbmUgU0lHX0JMT0NLICAgICAgICAgIDAJLyogZm9yIGJsb2NraW5nIHNpZ25hbHMgKi8KKyNkZWZpbmUgU0lHX1VOQkxPQ0sgICAgICAgIDEJLyogZm9yIHVuYmxvY2tpbmcgc2lnbmFscyAqLworI2RlZmluZSBTSUdfU0VUTUFTSyAgICAgICAgMgkvKiBmb3Igc2V0dGluZyB0aGUgc2lnbmFsIG1hc2sgKi8KKworLyogVHlwZSBvZiBhIHNpZ25hbCBoYW5kbGVyLiAgKi8KK3R5cGVkZWYgdm9pZCBfX3NpZ25hbGZuX3QoaW50KTsKK3R5cGVkZWYgX19zaWduYWxmbl90IF9fdXNlciAqX19zaWdoYW5kbGVyX3Q7CisKK3R5cGVkZWYgdm9pZCBfX3Jlc3RvcmVmbl90KHZvaWQpOwordHlwZWRlZiBfX3Jlc3RvcmVmbl90IF9fdXNlciAqX19zaWdyZXN0b3JlX3Q7CisKKyNkZWZpbmUgU0lHX0RGTAkoKF9fc2lnaGFuZGxlcl90KTApCS8qIGRlZmF1bHQgc2lnbmFsIGhhbmRsaW5nICovCisjZGVmaW5lIFNJR19JR04JKChfX3NpZ2hhbmRsZXJfdCkxKQkvKiBpZ25vcmUgc2lnbmFsICovCisjZGVmaW5lIFNJR19FUlIJKChfX3NpZ2hhbmRsZXJfdCktMSkJLyogZXJyb3IgcmV0dXJuIGZyb20gc2lnbmFsICovCisKKyNpZmRlZiBfX0tFUk5FTF9fCitzdHJ1Y3Qgb2xkX3NpZ2FjdGlvbiB7CisJX19zaWdoYW5kbGVyX3Qgc2FfaGFuZGxlcjsKKwlvbGRfc2lnc2V0X3Qgc2FfbWFzazsKKwl1bnNpZ25lZCBsb25nIHNhX2ZsYWdzOworCV9fc2lncmVzdG9yZV90IHNhX3Jlc3RvcmVyOworfTsKKworc3RydWN0IHNpZ2FjdGlvbiB7CisJX19zaWdoYW5kbGVyX3Qgc2FfaGFuZGxlcjsKKwl1bnNpZ25lZCBsb25nIHNhX2ZsYWdzOworCV9fc2lncmVzdG9yZV90IHNhX3Jlc3RvcmVyOworCXNpZ3NldF90IHNhX21hc2s7CQkvKiBtYXNrIGxhc3QgZm9yIGV4dGVuc2liaWxpdHkgKi8KK307CisKK3N0cnVjdCBrX3NpZ2FjdGlvbiB7CisJc3RydWN0IHNpZ2FjdGlvbiBzYTsKK307CisjZWxzZQorLyogSGVyZSB3ZSBtdXN0IGNhdGVyIHRvIGxpYmNzIHRoYXQgcG9rZSBhYm91dCBpbiBrZXJuZWwgaGVhZGVycy4gICovCisKK3N0cnVjdCBzaWdhY3Rpb24geworCXVuaW9uIHsKKwkgIF9fc2lnaGFuZGxlcl90IF9zYV9oYW5kbGVyOworCSAgdm9pZCAoKl9zYV9zaWdhY3Rpb24pKGludCwgc3RydWN0IHNpZ2luZm8gKiwgdm9pZCAqKTsKKwl9IF91OworCXNpZ3NldF90IHNhX21hc2s7CisJdW5zaWduZWQgbG9uZyBzYV9mbGFnczsKKwl2b2lkICgqc2FfcmVzdG9yZXIpKHZvaWQpOworfTsKKworI2RlZmluZSBzYV9oYW5kbGVyCV91Ll9zYV9oYW5kbGVyCisjZGVmaW5lIHNhX3NpZ2FjdGlvbglfdS5fc2Ffc2lnYWN0aW9uCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKK3R5cGVkZWYgc3RydWN0IHNpZ2FsdHN0YWNrIHsKKwl2b2lkIF9fdXNlciAqc3Nfc3A7CisJaW50IHNzX2ZsYWdzOworCXNpemVfdCBzc19zaXplOworfSBzdGFja190OworCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGFzbS9zaWdjb250ZXh0Lmg+CisKKyN1bmRlZiBfX0hBVkVfQVJDSF9TSUdfQklUT1BTCisKK3N0cnVjdCBwdF9yZWdzOworZXh0ZXJuIGludCBGQVNUQ0FMTChkb19zaWduYWwoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHNpZ3NldF90ICpvbGRzZXQpKTsKKworI2RlZmluZSBwdHJhY2Vfc2lnbmFsX2RlbGl2ZXIocmVncywgY29va2llKQlkbyB7IH0gd2hpbGUgKDApCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAgLyogX0FTTV9NMzJSX1NJR05BTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL3NtcC5oIGIvaW5jbHVkZS9hc20tbTMyci9zbXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2Q0ZDBkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTMyci9zbXAuaApAQCAtMCwwICsxLDExOCBAQAorI2lmbmRlZiBfQVNNX00zMlJfU01QX0gKKyNkZWZpbmUgX0FTTV9NMzJSX1NNUF9ICisKKy8qICRJZCQgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjaWZkZWYgQ09ORklHX1NNUAorI2lmbmRlZiBfX0FTU0VNQkxZX18KKworI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKyNpbmNsdWRlIDxhc20vbTMyci5oPgorCisjZGVmaW5lIFBIWVNJRF9BUlJBWV9TSVpFICAgICAgIDEKKworc3RydWN0IHBoeXNpZF9tYXNrCit7CisJdW5zaWduZWQgbG9uZyBtYXNrW1BIWVNJRF9BUlJBWV9TSVpFXTsKK307CisKK3R5cGVkZWYgc3RydWN0IHBoeXNpZF9tYXNrIHBoeXNpZF9tYXNrX3Q7CisKKyNkZWZpbmUgcGh5c2lkX3NldChwaHlzaWQsIG1hcCkgICAgICAgICAgICAgICAgIHNldF9iaXQocGh5c2lkLCAobWFwKS5tYXNrKQorI2RlZmluZSBwaHlzaWRfY2xlYXIocGh5c2lkLCBtYXApICAgICAgICAgICAgICAgY2xlYXJfYml0KHBoeXNpZCwgKG1hcCkubWFzaykKKyNkZWZpbmUgcGh5c2lkX2lzc2V0KHBoeXNpZCwgbWFwKSAgICAgICAgICAgICAgIHRlc3RfYml0KHBoeXNpZCwgKG1hcCkubWFzaykKKyNkZWZpbmUgcGh5c2lkX3Rlc3RfYW5kX3NldChwaHlzaWQsIG1hcCkgICAgICAgIHRlc3RfYW5kX3NldF9iaXQocGh5c2lkLCAobWFwKS5tYXNrKQorCisjZGVmaW5lIHBoeXNpZHNfYW5kKGRzdCwgc3JjMSwgc3JjMikgICAgICAgICAgICBiaXRtYXBfYW5kKChkc3QpLm1hc2ssIChzcmMxKS5tYXNrLCAoc3JjMikubWFzaywgTUFYX0FQSUNTKQorI2RlZmluZSBwaHlzaWRzX29yKGRzdCwgc3JjMSwgc3JjMikgICAgICAgICAgICAgYml0bWFwX29yKChkc3QpLm1hc2ssIChzcmMxKS5tYXNrLCAoc3JjMikubWFzaywgTUFYX0FQSUNTKQorI2RlZmluZSBwaHlzaWRzX2NsZWFyKG1hcCkgICAgICAgICAgICAgICAgICAgICAgYml0bWFwX3plcm8oKG1hcCkubWFzaywgTUFYX0FQSUNTKQorI2RlZmluZSBwaHlzaWRzX2NvbXBsZW1lbnQoZHN0LCBzcmMpICAgICAgICAgICAgYml0bWFwX2NvbXBsZW1lbnQoKGRzdCkubWFzaywoc3JjKS5tYXNrLCBNQVhfQVBJQ1MpCisjZGVmaW5lIHBoeXNpZHNfZW1wdHkobWFwKSAgICAgICAgICAgICAgICAgICAgICBiaXRtYXBfZW1wdHkoKG1hcCkubWFzaywgTUFYX0FQSUNTKQorI2RlZmluZSBwaHlzaWRzX2VxdWFsKG1hcDEsIG1hcDIpICAgICAgICAgICAgICAgYml0bWFwX2VxdWFsKChtYXAxKS5tYXNrLCAobWFwMikubWFzaywgTUFYX0FQSUNTKQorI2RlZmluZSBwaHlzaWRzX3dlaWdodChtYXApICAgICAgICAgICAgICAgICAgICAgYml0bWFwX3dlaWdodCgobWFwKS5tYXNrLCBNQVhfQVBJQ1MpCisjZGVmaW5lIHBoeXNpZHNfc2hpZnRfcmlnaHQoZCwgcywgbikgICAgICAgICAgICBiaXRtYXBfc2hpZnRfcmlnaHQoKGQpLm1hc2ssIChzKS5tYXNrLCBuLCBNQVhfQVBJQ1MpCisjZGVmaW5lIHBoeXNpZHNfc2hpZnRfbGVmdChkLCBzLCBuKSAgICAgICAgICAgICBiaXRtYXBfc2hpZnRfbGVmdCgoZCkubWFzaywgKHMpLm1hc2ssIG4sIE1BWF9BUElDUykKKyNkZWZpbmUgcGh5c2lkc19jb2VyY2UobWFwKSAgICAgICAgICAgICAgICAgICAgICgobWFwKS5tYXNrWzBdKQorCisjZGVmaW5lIHBoeXNpZHNfcHJvbW90ZShwaHlzaWRzKQkJCQkJXAorCSh7CQkJCQkJCQlcCisJCXBoeXNpZF9tYXNrX3QgX19waHlzaWRfbWFzayA9IFBIWVNJRF9NQVNLX05PTkU7CQlcCisJCV9fcGh5c2lkX21hc2subWFza1swXSA9IHBoeXNpZHM7CQkJXAorCQlfX3BoeXNpZF9tYXNrOwkJCQkJCVwKKwl9KQorCisjZGVmaW5lIHBoeXNpZF9tYXNrX29mX3BoeXNpZChwaHlzaWQpCQkJCQlcCisJKHsJCQkJCQkJCVwKKwkJcGh5c2lkX21hc2tfdCBfX3BoeXNpZF9tYXNrID0gUEhZU0lEX01BU0tfTk9ORTsJCVwKKwkJcGh5c2lkX3NldChwaHlzaWQsIF9fcGh5c2lkX21hc2spOwkJCVwKKwkJX19waHlzaWRfbWFzazsJCQkJCQlcCisJfSkKKworI2RlZmluZSBQSFlTSURfTUFTS19BTEwgICAgICAgICB7IHtbMCAuLi4gUEhZU0lEX0FSUkFZX1NJWkUtMV0gPSB+MFVMfSB9CisjZGVmaW5lIFBIWVNJRF9NQVNLX05PTkUgICAgICAgIHsge1swIC4uLiBQSFlTSURfQVJSQVlfU0laRS0xXSA9IDBVTH0gfQorCitleHRlcm4gcGh5c2lkX21hc2tfdCBwaHlzX2NwdV9wcmVzZW50X21hcDsKKworLyoKKyAqIFNvbWUgbG93bGV2ZWwgZnVuY3Rpb25zIG1pZ2h0IHdhbnQgdG8ga25vdyBhYm91dAorICogdGhlIHJlYWwgQ1BVIElEIDwtPiBDUFUgIyBtYXBwaW5nLgorICovCitleHRlcm4gdm9sYXRpbGUgaW50IHBoeXNpZF8yX2NwdVtOUl9DUFVTXTsKK2V4dGVybiB2b2xhdGlsZSBpbnQgY3B1XzJfcGh5c2lkW05SX0NQVVNdOworI2RlZmluZSBwaHlzaWRfdG9fY3B1KHBoeXNpZCkJcGh5c2lkXzJfY3B1W3BoeXNpZF0KKyNkZWZpbmUgY3B1X3RvX3BoeXNpZChjcHVfaWQpCWNwdV8yX3BoeXNpZFtjcHVfaWRdCisKKyNkZWZpbmUgc21wX3Byb2Nlc3Nvcl9pZCgpCShjdXJyZW50X3RocmVhZF9pbmZvKCktPmNwdSkKKworZXh0ZXJuIGNwdW1hc2tfdCBjcHVfY2FsbG91dF9tYXA7CisjZGVmaW5lIGNwdV9wb3NzaWJsZV9tYXAgY3B1X2NhbGxvdXRfbWFwCisKK3N0YXRpYyBfX2lubGluZV9fIGludCBoYXJkX3NtcF9wcm9jZXNzb3JfaWQodm9pZCkKK3sKKwlyZXR1cm4gKGludCkqKHZvbGF0aWxlIGxvbmcgKilNMzJSX0NQVUlEX1BPUlRMOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgY3B1X2xvZ2ljYWxfbWFwKGludCBjcHUpCit7CisJcmV0dXJuIGNwdTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IGNwdV9udW1iZXJfbWFwKGludCBjcHUpCit7CisJcmV0dXJuIGNwdTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IG51bV9ib290aW5nX2NwdXModm9pZCkKK3sKKwlyZXR1cm4gY3B1c193ZWlnaHQoY3B1X2NhbGxvdXRfbWFwKTsKK30KKworZXh0ZXJuIHZvaWQgc21wX3NlbmRfdGltZXIodm9pZCk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBzZW5kX0lQSV9tYXNrX3BoeXMoY3B1bWFza190LCBpbnQsIGludCk7CisKKyNlbmRpZgkvKiBub3QgX19BU1NFTUJMWV9fICovCisKKyNkZWZpbmUgTk9fUFJPQ19JRCAoMHhmZikJLyogTm8gcHJvY2Vzc29yIG1hZ2ljIG1hcmtlciAqLworCisjZGVmaW5lIFBST0NfQ0hBTkdFX1BFTkFMVFkJKDE1KQkvKiBTY2hlZHVsZSBwZW5hbHR5ICovCisKKy8qCisgKiBNMzJSLW1wIElQSQorICovCisjZGVmaW5lIFJFU0NIRURVTEVfSVBJCQkoTTMyUl9JUlFfSVBJMC1NMzJSX0lSUV9JUEkwKQorI2RlZmluZSBJTlZBTElEQVRFX1RMQl9JUEkJKE0zMlJfSVJRX0lQSTEtTTMyUl9JUlFfSVBJMCkKKyNkZWZpbmUgQ0FMTF9GVU5DVElPTl9JUEkJKE0zMlJfSVJRX0lQSTItTTMyUl9JUlFfSVBJMCkKKyNkZWZpbmUgTE9DQUxfVElNRVJfSVBJCQkoTTMyUl9JUlFfSVBJMy1NMzJSX0lSUV9JUEkwKQorI2RlZmluZSBJTlZBTElEQVRFX0NBQ0hFX0lQSQkoTTMyUl9JUlFfSVBJNC1NMzJSX0lSUV9JUEkwKQorI2RlZmluZSBDUFVfQk9PVF9JUEkJCShNMzJSX0lSUV9JUEk1LU0zMlJfSVJRX0lQSTApCisKKyNkZWZpbmUgSVBJX1NISUZUCSgwKQorI2RlZmluZSBOUl9JUElTCQkoOCkKKworI2VuZGlmCS8qIENPTkZJR19TTVAgKi8KKworI2VuZGlmCS8qIF9BU01fTTMyUl9TTVBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9zb2NrZXQuaCBiL2luY2x1ZGUvYXNtLW0zMnIvc29ja2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTU5NTE5ZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvc29ja2V0LmgKQEAgLTAsMCArMSw1MCBAQAorI2lmbmRlZiBfQVNNX00zMlJfU09DS0VUX0gKKyNkZWZpbmUgX0FTTV9NMzJSX1NPQ0tFVF9ICisKKyNpbmNsdWRlIDxhc20vc29ja2lvcy5oPgorCisvKiBGb3Igc2V0c29ja29wdGlvbnMoMikgKi8KKyNkZWZpbmUgU09MX1NPQ0tFVAkxCisKKyNkZWZpbmUgU09fREVCVUcJMQorI2RlZmluZSBTT19SRVVTRUFERFIJMgorI2RlZmluZSBTT19UWVBFCQkzCisjZGVmaW5lIFNPX0VSUk9SCTQKKyNkZWZpbmUgU09fRE9OVFJPVVRFCTUKKyNkZWZpbmUgU09fQlJPQURDQVNUCTYKKyNkZWZpbmUgU09fU05EQlVGCTcKKyNkZWZpbmUgU09fUkNWQlVGCTgKKyNkZWZpbmUgU09fS0VFUEFMSVZFCTkKKyNkZWZpbmUgU09fT09CSU5MSU5FCTEwCisjZGVmaW5lIFNPX05PX0NIRUNLCTExCisjZGVmaW5lIFNPX1BSSU9SSVRZCTEyCisjZGVmaW5lIFNPX0xJTkdFUgkxMworI2RlZmluZSBTT19CU0RDT01QQVQJMTQKKy8qIFRvIGFkZCA6I2RlZmluZSBTT19SRVVTRVBPUlQgMTUgKi8KKyNkZWZpbmUgU09fUEFTU0NSRUQJMTYKKyNkZWZpbmUgU09fUEVFUkNSRUQJMTcKKyNkZWZpbmUgU09fUkNWTE9XQVQJMTgKKyNkZWZpbmUgU09fU05ETE9XQVQJMTkKKyNkZWZpbmUgU09fUkNWVElNRU8JMjAKKyNkZWZpbmUgU09fU05EVElNRU8JMjEKKworLyogU2VjdXJpdHkgbGV2ZWxzIC0gYXMgcGVyIE5STCBJUHY2IC0gZG9uJ3QgYWN0dWFsbHkgZG8gYW55dGhpbmcgKi8KKyNkZWZpbmUgU09fU0VDVVJJVFlfQVVUSEVOVElDQVRJT04JCTIyCisjZGVmaW5lIFNPX1NFQ1VSSVRZX0VOQ1JZUFRJT05fVFJBTlNQT1JUCTIzCisjZGVmaW5lIFNPX1NFQ1VSSVRZX0VOQ1JZUFRJT05fTkVUV09SSwkJMjQKKworI2RlZmluZSBTT19CSU5EVE9ERVZJQ0UJMjUKKworLyogU29ja2V0IGZpbHRlcmluZyAqLworI2RlZmluZSBTT19BVFRBQ0hfRklMVEVSICAgICAgICAyNgorI2RlZmluZSBTT19ERVRBQ0hfRklMVEVSICAgICAgICAyNworCisjZGVmaW5lIFNPX1BFRVJOQU1FCQkyOAorI2RlZmluZSBTT19USU1FU1RBTVAJCTI5CisjZGVmaW5lIFNDTV9USU1FU1RBTVAJCVNPX1RJTUVTVEFNUAorCisjZGVmaW5lIFNPX0FDQ0VQVENPTk4JCTMwCisKKyNkZWZpbmUgU09fUEVFUlNFQwkJMzEKKworI2VuZGlmIC8qIF9BU01fTTMyUl9TT0NLRVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9zb2NraW9zLmggYi9pbmNsdWRlL2FzbS1tMzJyL3NvY2tpb3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDdhMTE4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTMyci9zb2NraW9zLmgKQEAgLTAsMCArMSwxNCBAQAorI2lmbmRlZiBfQVNNX00zMlJfU09DS0lPU19ICisjZGVmaW5lIF9BU01fTTMyUl9TT0NLSU9TX0gKKworLyogJElkJCAqLworCisvKiBTb2NrZXQtbGV2ZWwgSS9PIGNvbnRyb2wgY2FsbHMuICovCisjZGVmaW5lIEZJT1NFVE9XTiAJMHg4OTAxCisjZGVmaW5lIFNJT0NTUEdSUAkweDg5MDIKKyNkZWZpbmUgRklPR0VUT1dOCTB4ODkwMworI2RlZmluZSBTSU9DR1BHUlAJMHg4OTA0CisjZGVmaW5lIFNJT0NBVE1BUksJMHg4OTA1CisjZGVmaW5lIFNJT0NHU1RBTVAJMHg4OTA2CQkvKiBHZXQgc3RhbXAgKi8KKworI2VuZGlmICAvKiBfQVNNX00zMlJfU09DS0lPU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL3NwaW5sb2NrLmggYi9pbmNsdWRlL2FzbS1tMzJyL3NwaW5sb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjYwOGQ4MwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvc3BpbmxvY2suaApAQCAtMCwwICsxLDM4MCBAQAorI2lmbmRlZiBfQVNNX00zMlJfU1BJTkxPQ0tfSAorI2RlZmluZSBfQVNNX00zMlJfU1BJTkxPQ0tfSAorCisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLW0zMnIvc3BpbmxvY2suaAorICoKKyAqICBNMzJSIHZlcnNpb246CisgKiAgICBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIgIEhpdG9zaGkgWWFtYW1vdG8KKyAqICAgIENvcHlyaWdodCAoQykgMjAwNCAgSGlyb2thenUgVGFrYXRhIDx0YWthdGEgYXQgbGludXgtbTMyci5vcmc+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgkvKiBDT05GSUdfREVCVUdfU1BJTkxPQ0ssIENPTkZJR19TTVAgKi8KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorCitleHRlcm4gaW50IHByaW50ayhjb25zdCBjaGFyICogZm10LCAuLi4pCisJX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpOworCisjZGVmaW5lIFJXX0xPQ0tfQklBUwkJIDB4MDEwMDAwMDAKKyNkZWZpbmUgUldfTE9DS19CSUFTX1NUUgkiMHgwMTAwMDAwMCIKKworLyoKKyAqIFlvdXIgYmFzaWMgU01QIHNwaW5sb2NrcywgYWxsb3dpbmcgb25seSBhIHNpbmdsZSBDUFUgYW55d2hlcmUKKyAqLworCit0eXBlZGVmIHN0cnVjdCB7CisJdm9sYXRpbGUgaW50IHNsb2NrOworI2lmZGVmIENPTkZJR19ERUJVR19TUElOTE9DSworCXVuc2lnbmVkIG1hZ2ljOworI2VuZGlmCisjaWZkZWYgQ09ORklHX1BSRUVNUFQKKwl1bnNpZ25lZCBpbnQgYnJlYWtfbG9jazsKKyNlbmRpZgorfSBzcGlubG9ja190OworCisjZGVmaW5lIFNQSU5MT0NLX01BR0lDCTB4ZGVhZDRlYWQKKworI2lmZGVmIENPTkZJR19ERUJVR19TUElOTE9DSworI2RlZmluZSBTUElOTE9DS19NQUdJQ19JTklUCSwgU1BJTkxPQ0tfTUFHSUMKKyNlbHNlCisjZGVmaW5lIFNQSU5MT0NLX01BR0lDX0lOSVQJLyogKi8KKyNlbmRpZgorCisjZGVmaW5lIFNQSU5fTE9DS19VTkxPQ0tFRCAoc3BpbmxvY2tfdCkgeyAxIFNQSU5MT0NLX01BR0lDX0lOSVQgfQorCisjZGVmaW5lIHNwaW5fbG9ja19pbml0KHgpCWRvIHsgKih4KSA9IFNQSU5fTE9DS19VTkxPQ0tFRDsgfSB3aGlsZSgwKQorCisvKgorICogU2ltcGxlIHNwaW4gbG9jayBvcGVyYXRpb25zLiAgVGhlcmUgYXJlIHR3byB2YXJpYW50cywgb25lIGNsZWFycyBJUlEncworICogb24gdGhlIGxvY2FsIHByb2Nlc3Nvciwgb25lIGRvZXMgbm90LgorICoKKyAqIFdlIG1ha2Ugbm8gZmFpcm5lc3MgYXNzdW1wdGlvbnMuIFRoZXkgaGF2ZSBhIGNvc3QuCisgKi8KKworI2RlZmluZSBzcGluX2lzX2xvY2tlZCh4KQkoKih2b2xhdGlsZSBpbnQgKikoJih4KS0+c2xvY2spIDw9IDApCisjZGVmaW5lIHNwaW5fdW5sb2NrX3dhaXQoeCkJZG8geyBiYXJyaWVyKCk7IH0gd2hpbGUoc3Bpbl9pc19sb2NrZWQoeCkpCisjZGVmaW5lIF9yYXdfc3Bpbl9sb2NrX2ZsYWdzKGxvY2ssIGZsYWdzKSBfcmF3X3NwaW5fbG9jayhsb2NrKQorCisvKioKKyAqIF9yYXdfc3Bpbl90cnlsb2NrIC0gVHJ5IHNwaW4gbG9jayBhbmQgcmV0dXJuIGEgcmVzdWx0CisgKiBAbG9jazogUG9pbnRlciB0byB0aGUgbG9jayB2YXJpYWJsZQorICoKKyAqIF9yYXdfc3Bpbl90cnlsb2NrKCkgdHJpZXMgdG8gZ2V0IHRoZSBsb2NrIGFuZCByZXR1cm5zIGEgcmVzdWx0LgorICogT24gdGhlIG0zMnIsIHRoZSByZXN1bHQgdmFsdWUgaXMgMSAoPSBTdWNjZXNzKSBvciAwICg9IEZhaWx1cmUpLgorICovCitzdGF0aWMgaW5saW5lIGludCBfcmF3X3NwaW5fdHJ5bG9jayhzcGlubG9ja190ICpsb2NrKQoreworCWludCBvbGR2YWw7CisJdW5zaWduZWQgbG9uZyB0bXAxLCB0bXAyOworCisJLyoKKwkgKiBsb2NrLT5zbG9jayA6ICA9MSA6IHVubG9jaworCSAqICAgICAgICAgICAgIDogPD0wIDogbG9jaworCSAqIHsKKwkgKiAgIG9sZHZhbCA9IGxvY2stPnNsb2NrOyA8LS0rIG5lZWQgYXRvbWljIG9wZXJhdGlvbgorCSAqICAgbG9jay0+c2xvY2sgPSAwOyAgICAgIDwtLSsKKwkgKiB9CisJICovCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCQkiIyBzcGluX3RyeWxvY2sJCQlcblx0IgorCQkibGRpCSUxLCAjMDsJCQlcblx0IgorCQkibXZmYwklMiwgcHN3OwkJXG5cdCIKKwkJImNscnBzdwkjMHg0MCAtPiBub3A7CQlcblx0IgorCQlEQ0FDSEVfQ0xFQVIoIiUwIiwgInI2IiwgIiUzIikKKwkJImxvY2sJJTAsIEAlMzsJCVxuXHQiCisJCSJ1bmxvY2sJJTEsIEAlMzsJCVxuXHQiCisJCSJtdnRjCSUyLCBwc3c7CQlcblx0IgorCQk6ICI9JnIiIChvbGR2YWwpLCAiPSZyIiAodG1wMSksICI9JnIiICh0bXAyKQorCQk6ICJyIiAoJmxvY2stPnNsb2NrKQorCQk6ICJtZW1vcnkiCisjaWZkZWYgQ09ORklHX0NISVBfTTMyNzAwX1RTMQorCQksICJyNiIKKyNlbmRpZgkvKiBDT05GSUdfQ0hJUF9NMzI3MDBfVFMxICovCisJKTsKKworCXJldHVybiAob2xkdmFsID4gMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfcmF3X3NwaW5fbG9jayhzcGlubG9ja190ICpsb2NrKQoreworCXVuc2lnbmVkIGxvbmcgdG1wMCwgdG1wMTsKKworI2lmZGVmIENPTkZJR19ERUJVR19TUElOTE9DSworCWlmICh1bmxpa2VseShsb2NrLT5tYWdpYyAhPSBTUElOTE9DS19NQUdJQykpIHsKKwkJcHJpbnRrKCJwYzogJXBcbiIsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CisJCUJVRygpOworCX0KKyNlbmRpZgorCS8qCisJICogbG9jay0+c2xvY2sgOiAgPTEgOiB1bmxvY2sKKwkgKiAgICAgICAgICAgICA6IDw9MCA6IGxvY2sKKwkgKgorCSAqIGZvciAoIDsgOyApIHsKKwkgKiAgIGxvY2stPnNsb2NrIC09IDE7ICA8LS0gbmVlZCBhdG9taWMgb3BlcmF0aW9uCisJICogICBpZiAobG9jay0+c2xvY2sgPT0gMCkgYnJlYWs7CisJICogICBmb3IgKCA7IGxvY2stPnNsb2NrIDw9IDAgOyApOworCSAqIH0KKwkgKi8KKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCSIjIHNwaW5fbG9jawkJCVxuXHQiCisJCSIuZmlsbGluc24JCQlcbiIKKwkJIjE6CQkJCVxuXHQiCisJCSJtdmZjCSUxLCBwc3c7CQlcblx0IgorCQkiY2xycHN3CSMweDQwIC0+IG5vcDsJCVxuXHQiCisJCURDQUNIRV9DTEVBUigiJTAiLCAicjYiLCAiJTIiKQorCQkibG9jawklMCwgQCUyOwkJXG5cdCIKKwkJImFkZGkJJTAsICMtMTsJCVxuXHQiCisJCSJ1bmxvY2sJJTAsIEAlMjsJCVxuXHQiCisJCSJtdnRjCSUxLCBwc3c7CQlcblx0IgorCQkiYmx0egklMCwgMmY7CQkJXG5cdCIKKwkJTE9DS19TRUNUSU9OX1NUQVJUKCIuYmFsaWduIDQgXG5cdCIpCisJCSIuZmlsbGluc24JCQlcbiIKKwkJIjI6CQkJCVxuXHQiCisJCSJsZAklMCwgQCUyOwkJXG5cdCIKKwkJImJndHoJJTAsIDFiOwkJCVxuXHQiCisJCSJicmEJMmI7CQkJXG5cdCIKKwkJTE9DS19TRUNUSU9OX0VORAorCQk6ICI9JnIiICh0bXAwKSwgIj0mciIgKHRtcDEpCisJCTogInIiICgmbG9jay0+c2xvY2spCisJCTogIm1lbW9yeSIKKyNpZmRlZiBDT05GSUdfQ0hJUF9NMzI3MDBfVFMxCisJCSwgInI2IgorI2VuZGlmCS8qIENPTkZJR19DSElQX00zMjcwMF9UUzEgKi8KKwkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX3Jhd19zcGluX3VubG9jayhzcGlubG9ja190ICpsb2NrKQoreworI2lmZGVmIENPTkZJR19ERUJVR19TUElOTE9DSworCUJVR19PTihsb2NrLT5tYWdpYyAhPSBTUElOTE9DS19NQUdJQyk7CisJQlVHX09OKCFzcGluX2lzX2xvY2tlZChsb2NrKSk7CisjZW5kaWYKKwltYigpOworCWxvY2stPnNsb2NrID0gMTsKK30KKworLyoKKyAqIFJlYWQtd3JpdGUgc3BpbmxvY2tzLCBhbGxvd2luZyBtdWx0aXBsZSByZWFkZXJzCisgKiBidXQgb25seSBvbmUgd3JpdGVyLgorICoKKyAqIE5PVEUhIGl0IGlzIHF1aXRlIGNvbW1vbiB0byBoYXZlIHJlYWRlcnMgaW4gaW50ZXJydXB0cworICogYnV0IG5vIGludGVycnVwdCB3cml0ZXJzLiBGb3IgdGhvc2UgY2lyY3Vtc3RhbmNlcyB3ZQorICogY2FuICJtaXgiIGlycS1zYWZlIGxvY2tzIC0gYW55IHdyaXRlciBuZWVkcyB0byBnZXQgYQorICogaXJxLXNhZmUgd3JpdGUtbG9jaywgYnV0IHJlYWRlcnMgY2FuIGdldCBub24taXJxc2FmZQorICogcmVhZC1sb2Nrcy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCXZvbGF0aWxlIGludCBsb2NrOworI2lmZGVmIENPTkZJR19ERUJVR19TUElOTE9DSworCXVuc2lnbmVkIG1hZ2ljOworI2VuZGlmCisjaWZkZWYgQ09ORklHX1BSRUVNUFQKKwl1bnNpZ25lZCBpbnQgYnJlYWtfbG9jazsKKyNlbmRpZgorfSByd2xvY2tfdDsKKworI2RlZmluZSBSV0xPQ0tfTUFHSUMJMHhkZWFmMWVlZAorCisjaWZkZWYgQ09ORklHX0RFQlVHX1NQSU5MT0NLCisjZGVmaW5lIFJXTE9DS19NQUdJQ19JTklUCSwgUldMT0NLX01BR0lDCisjZWxzZQorI2RlZmluZSBSV0xPQ0tfTUFHSUNfSU5JVAkvKiAqLworI2VuZGlmCisKKyNkZWZpbmUgUldfTE9DS19VTkxPQ0tFRCAocndsb2NrX3QpIHsgUldfTE9DS19CSUFTIFJXTE9DS19NQUdJQ19JTklUIH0KKworI2RlZmluZSByd2xvY2tfaW5pdCh4KQlkbyB7ICooeCkgPSBSV19MT0NLX1VOTE9DS0VEOyB9IHdoaWxlKDApCisKKy8qKgorICogcmVhZF9jYW5fbG9jayAtIHdvdWxkIHJlYWRfdHJ5bG9jaygpIHN1Y2NlZWQ/CisgKiBAbG9jazogdGhlIHJ3bG9jayBpbiBxdWVzdGlvbi4KKyAqLworI2RlZmluZSByZWFkX2Nhbl9sb2NrKHgpICgoaW50KSh4KS0+bG9jayA+IDApCisKKy8qKgorICogd3JpdGVfY2FuX2xvY2sgLSB3b3VsZCB3cml0ZV90cnlsb2NrKCkgc3VjY2VlZD8KKyAqIEBsb2NrOiB0aGUgcndsb2NrIGluIHF1ZXN0aW9uLgorICovCisjZGVmaW5lIHdyaXRlX2Nhbl9sb2NrKHgpICgoeCktPmxvY2sgPT0gUldfTE9DS19CSUFTKQorCisvKgorICogT24geDg2LCB3ZSBpbXBsZW1lbnQgcmVhZC13cml0ZSBsb2NrcyBhcyBhIDMyLWJpdCBjb3VudGVyCisgKiB3aXRoIHRoZSBoaWdoIGJpdCAoc2lnbikgYmVpbmcgdGhlICJjb250ZW5kZWQiIGJpdC4KKyAqCisgKiBUaGUgaW5saW5lIGFzc2VtYmx5IGlzIG5vbi1vYnZpb3VzLiBUaGluayBhYm91dCBpdC4KKyAqCisgKiBDaGFuZ2VkIHRvIHVzZSB0aGUgc2FtZSB0ZWNobmlxdWUgYXMgcncgc2VtYXBob3Jlcy4gIFNlZQorICogc2VtYXBob3JlLmggZm9yIGRldGFpbHMuICAtYmVuCisgKi8KKy8qIHRoZSBzcGlubG9jayBoZWxwZXJzIGFyZSBpbiBhcmNoL2kzODYva2VybmVsL3NlbWFwaG9yZS5jICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfcmF3X3JlYWRfbG9jayhyd2xvY2tfdCAqcncpCit7CisJdW5zaWduZWQgbG9uZyB0bXAwLCB0bXAxOworCisjaWZkZWYgQ09ORklHX0RFQlVHX1NQSU5MT0NLCisJQlVHX09OKHJ3LT5tYWdpYyAhPSBSV0xPQ0tfTUFHSUMpOworI2VuZGlmCisJLyoKKwkgKiBydy0+bG9jayA6ICA+MCA6IHVubG9jaworCSAqICAgICAgICAgIDogPD0wIDogbG9jaworCSAqCisJICogZm9yICggOyA7ICkgeworCSAqICAgcnctPmxvY2sgLT0gMTsgIDwtLSBuZWVkIGF0b21pYyBvcGVyYXRpb24KKwkgKiAgIGlmIChydy0+bG9jayA+PSAwKSBicmVhazsKKwkgKiAgIHJ3LT5sb2NrICs9IDE7ICA8LS0gbmVlZCBhdG9taWMgb3BlcmF0aW9uCisJICogICBmb3IgKCA7IHJ3LT5sb2NrIDw9IDAgOyApOworCSAqIH0KKwkgKi8KKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCSIjIHJlYWRfbG9jawkJCVxuXHQiCisJCSIuZmlsbGluc24JCQlcbiIKKwkJIjE6CQkJCVxuXHQiCisJCSJtdmZjCSUxLCBwc3c7CQlcblx0IgorCQkiY2xycHN3CSMweDQwIC0+IG5vcDsJCVxuXHQiCisJCURDQUNIRV9DTEVBUigiJTAiLCAicjYiLCAiJTIiKQorCQkibG9jawklMCwgQCUyOwkJXG5cdCIKKwkJImFkZGkJJTAsICMtMTsJCVxuXHQiCisJCSJ1bmxvY2sJJTAsIEAlMjsJCVxuXHQiCisJCSJtdnRjCSUxLCBwc3c7CQlcblx0IgorCQkiYmx0egklMCwgMmY7CQkJXG5cdCIKKwkJTE9DS19TRUNUSU9OX1NUQVJUKCIuYmFsaWduIDQgXG5cdCIpCisJCSIuZmlsbGluc24JCQlcbiIKKwkJIjI6CQkJCVxuXHQiCisJCSJjbHJwc3cJIzB4NDAgLT4gbm9wOwkJXG5cdCIKKwkJRENBQ0hFX0NMRUFSKCIlMCIsICJyNiIsICIlMiIpCisJCSJsb2NrCSUwLCBAJTI7CQlcblx0IgorCQkiYWRkaQklMCwgIzE7CQkJXG5cdCIKKwkJInVubG9jawklMCwgQCUyOwkJXG5cdCIKKwkJIm12dGMJJTEsIHBzdzsJCVxuXHQiCisJCSIuZmlsbGluc24JCQlcbiIKKwkJIjM6CQkJCVxuXHQiCisJCSJsZAklMCwgQCUyOwkJXG5cdCIKKwkJImJndHoJJTAsIDFiOwkJCVxuXHQiCisJCSJicmEJM2I7CQkJXG5cdCIKKwkJTE9DS19TRUNUSU9OX0VORAorCQk6ICI9JnIiICh0bXAwKSwgIj0mciIgKHRtcDEpCisJCTogInIiICgmcnctPmxvY2spCisJCTogIm1lbW9yeSIKKyNpZmRlZiBDT05GSUdfQ0hJUF9NMzI3MDBfVFMxCisJCSwgInI2IgorI2VuZGlmCS8qIENPTkZJR19DSElQX00zMjcwMF9UUzEgKi8KKwkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX3Jhd193cml0ZV9sb2NrKHJ3bG9ja190ICpydykKK3sKKwl1bnNpZ25lZCBsb25nIHRtcDAsIHRtcDEsIHRtcDI7CisKKyNpZmRlZiBDT05GSUdfREVCVUdfU1BJTkxPQ0sKKwlCVUdfT04ocnctPm1hZ2ljICE9IFJXTE9DS19NQUdJQyk7CisjZW5kaWYKKwkvKgorCSAqIHJ3LT5sb2NrIDogID1SV19MT0NLX0JJQVNfU1RSIDogdW5sb2NrCisJICogICAgICAgICAgOiAhPVJXX0xPQ0tfQklBU19TVFIgOiBsb2NrCisJICoKKwkgKiBmb3IgKCA7IDsgKSB7CisJICogICBydy0+bG9jayAtPSBSV19MT0NLX0JJQVNfU1RSOyAgPC0tIG5lZWQgYXRvbWljIG9wZXJhdGlvbgorCSAqICAgaWYgKHJ3LT5sb2NrID09IDApIGJyZWFrOworCSAqICAgcnctPmxvY2sgKz0gUldfTE9DS19CSUFTX1NUUjsgIDwtLSBuZWVkIGF0b21pYyBvcGVyYXRpb24KKwkgKiAgIGZvciAoIDsgcnctPmxvY2sgIT0gUldfTE9DS19CSUFTX1NUUiA7ICkgOworCSAqIH0KKwkgKi8KKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCSIjIHdyaXRlX2xvY2sJCQkJCVxuXHQiCisJCSJzZXRoCSUxLCAjaGlnaCgiIFJXX0xPQ0tfQklBU19TVFIgIik7CVxuXHQiCisJCSJvcjMJJTEsICUxLCAjbG93KCIgUldfTE9DS19CSUFTX1NUUiAiKTsJXG5cdCIKKwkJIi5maWxsaW5zbgkJCQkJXG4iCisJCSIxOgkJCQkJCVxuXHQiCisJCSJtdmZjCSUyLCBwc3c7CQkJCVxuXHQiCisJCSJjbHJwc3cJIzB4NDAgLT4gbm9wOwkJCQlcblx0IgorCQlEQ0FDSEVfQ0xFQVIoIiUwIiwgInI3IiwgIiUzIikKKwkJImxvY2sJJTAsIEAlMzsJCQkJXG5cdCIKKwkJInN1YgklMCwgJTE7CQkJCQlcblx0IgorCQkidW5sb2NrCSUwLCBAJTM7CQkJCVxuXHQiCisJCSJtdnRjCSUyLCBwc3c7CQkJCVxuXHQiCisJCSJibmV6CSUwLCAyZjsJCQkJCVxuXHQiCisJCUxPQ0tfU0VDVElPTl9TVEFSVCgiLmJhbGlnbiA0IFxuXHQiKQorCQkiLmZpbGxpbnNuCQkJCQlcbiIKKwkJIjI6CQkJCQkJXG5cdCIKKwkJImNscnBzdwkjMHg0MCAtPiBub3A7CQkJCVxuXHQiCisJCURDQUNIRV9DTEVBUigiJTAiLCAicjciLCAiJTMiKQorCQkibG9jawklMCwgQCUzOwkJCQlcblx0IgorCQkiYWRkCSUwLCAlMTsJCQkJCVxuXHQiCisJCSJ1bmxvY2sJJTAsIEAlMzsJCQkJXG5cdCIKKwkJIm12dGMJJTIsIHBzdzsJCQkJXG5cdCIKKwkJIi5maWxsaW5zbgkJCQkJXG4iCisJCSIzOgkJCQkJCVxuXHQiCisJCSJsZAklMCwgQCUzOwkJCQlcblx0IgorCQkiYmVxCSUwLCAlMSwgMWI7CQkJCVxuXHQiCisJCSJicmEJM2I7CQkJCQlcblx0IgorCQlMT0NLX1NFQ1RJT05fRU5ECisJCTogIj0mciIgKHRtcDApLCAiPSZyIiAodG1wMSksICI9JnIiICh0bXAyKQorCQk6ICJyIiAoJnJ3LT5sb2NrKQorCQk6ICJtZW1vcnkiCisjaWZkZWYgQ09ORklHX0NISVBfTTMyNzAwX1RTMQorCQksICJyNyIKKyNlbmRpZgkvKiBDT05GSUdfQ0hJUF9NMzI3MDBfVFMxICovCisJKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9yYXdfcmVhZF91bmxvY2socndsb2NrX3QgKnJ3KQoreworCXVuc2lnbmVkIGxvbmcgdG1wMCwgdG1wMTsKKworCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwkJIiMgcmVhZF91bmxvY2sJCQlcblx0IgorCQkibXZmYwklMSwgcHN3OwkJXG5cdCIKKwkJImNscnBzdwkjMHg0MCAtPiBub3A7CQlcblx0IgorCQlEQ0FDSEVfQ0xFQVIoIiUwIiwgInI2IiwgIiUyIikKKwkJImxvY2sJJTAsIEAlMjsJCVxuXHQiCisJCSJhZGRpCSUwLCAjMTsJCQlcblx0IgorCQkidW5sb2NrCSUwLCBAJTI7CQlcblx0IgorCQkibXZ0YwklMSwgcHN3OwkJXG5cdCIKKwkJOiAiPSZyIiAodG1wMCksICI9JnIiICh0bXAxKQorCQk6ICJyIiAoJnJ3LT5sb2NrKQorCQk6ICJtZW1vcnkiCisjaWZkZWYgQ09ORklHX0NISVBfTTMyNzAwX1RTMQorCQksICJyNiIKKyNlbmRpZgkvKiBDT05GSUdfQ0hJUF9NMzI3MDBfVFMxICovCisJKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9yYXdfd3JpdGVfdW5sb2NrKHJ3bG9ja190ICpydykKK3sKKwl1bnNpZ25lZCBsb25nIHRtcDAsIHRtcDEsIHRtcDI7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCSIjIHdyaXRlX3VubG9jawkJCQkJXG5cdCIKKwkJInNldGgJJTEsICNoaWdoKCIgUldfTE9DS19CSUFTX1NUUiAiKTsJXG5cdCIKKwkJIm9yMwklMSwgJTEsICNsb3coIiBSV19MT0NLX0JJQVNfU1RSICIpOwlcblx0IgorCQkibXZmYwklMiwgcHN3OwkJCQlcblx0IgorCQkiY2xycHN3CSMweDQwIC0+IG5vcDsJCQkJXG5cdCIKKwkJRENBQ0hFX0NMRUFSKCIlMCIsICJyNyIsICIlMyIpCisJCSJsb2NrCSUwLCBAJTM7CQkJCVxuXHQiCisJCSJhZGQJJTAsICUxOwkJCQkJXG5cdCIKKwkJInVubG9jawklMCwgQCUzOwkJCQlcblx0IgorCQkibXZ0YwklMiwgcHN3OwkJCQlcblx0IgorCQk6ICI9JnIiICh0bXAwKSwgIj0mciIgKHRtcDEpLCAiPSZyIiAodG1wMikKKwkJOiAiciIgKCZydy0+bG9jaykKKwkJOiAibWVtb3J5IgorI2lmZGVmIENPTkZJR19DSElQX00zMjcwMF9UUzEKKwkJLCAicjciCisjZW5kaWYJLyogQ09ORklHX0NISVBfTTMyNzAwX1RTMSAqLworCSk7Cit9CisKKyNkZWZpbmUgX3Jhd19yZWFkX3RyeWxvY2sobG9jaykgZ2VuZXJpY19yYXdfcmVhZF90cnlsb2NrKGxvY2spCisKK3N0YXRpYyBpbmxpbmUgaW50IF9yYXdfd3JpdGVfdHJ5bG9jayhyd2xvY2tfdCAqbG9jaykKK3sKKwlhdG9taWNfdCAqY291bnQgPSAoYXRvbWljX3QgKilsb2NrOworCWlmIChhdG9taWNfc3ViX2FuZF90ZXN0KFJXX0xPQ0tfQklBUywgY291bnQpKQorCQlyZXR1cm4gMTsKKwlhdG9taWNfYWRkKFJXX0xPQ0tfQklBUywgY291bnQpOworCXJldHVybiAwOworfQorCisjZW5kaWYJLyogX0FTTV9NMzJSX1NQSU5MT0NLX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvc3RhdC5oIGIvaW5jbHVkZS9hc20tbTMyci9zdGF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU3NDhmZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvc3RhdC5oCkBAIC0wLDAgKzEsOTEgQEAKKyNpZm5kZWYgX0FTTV9NMzJSX1NUQVRfSAorI2RlZmluZSBfQVNNX00zMlJfU1RBVF9ICisKKy8qICRJZCQgKi8KKworLyogb3JpZyA6IGkzODYgMi40LjE4ICovCisKKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisKK3N0cnVjdCBfX29sZF9rZXJuZWxfc3RhdCB7CisJdW5zaWduZWQgc2hvcnQgc3RfZGV2OworCXVuc2lnbmVkIHNob3J0IHN0X2lubzsKKwl1bnNpZ25lZCBzaG9ydCBzdF9tb2RlOworCXVuc2lnbmVkIHNob3J0IHN0X25saW5rOworCXVuc2lnbmVkIHNob3J0IHN0X3VpZDsKKwl1bnNpZ25lZCBzaG9ydCBzdF9naWQ7CisJdW5zaWduZWQgc2hvcnQgc3RfcmRldjsKKwl1bnNpZ25lZCBsb25nICBzdF9zaXplOworCXVuc2lnbmVkIGxvbmcgIHN0X2F0aW1lOworCXVuc2lnbmVkIGxvbmcgIHN0X210aW1lOworCXVuc2lnbmVkIGxvbmcgIHN0X2N0aW1lOworfTsKKworI2RlZmluZSBTVEFUX0hBVkVfTlNFQwkxCisKK3N0cnVjdCBzdGF0IHsKKwl1bnNpZ25lZCBzaG9ydCBzdF9kZXY7CisJdW5zaWduZWQgc2hvcnQgX19wYWQxOworCXVuc2lnbmVkIGxvbmcgIHN0X2lubzsKKwl1bnNpZ25lZCBzaG9ydCBzdF9tb2RlOworCXVuc2lnbmVkIHNob3J0IHN0X25saW5rOworCXVuc2lnbmVkIHNob3J0IHN0X3VpZDsKKwl1bnNpZ25lZCBzaG9ydCBzdF9naWQ7CisJdW5zaWduZWQgc2hvcnQgc3RfcmRldjsKKwl1bnNpZ25lZCBzaG9ydCBfX3BhZDI7CisJdW5zaWduZWQgbG9uZyAgc3Rfc2l6ZTsKKwl1bnNpZ25lZCBsb25nICBzdF9ibGtzaXplOworCXVuc2lnbmVkIGxvbmcgIHN0X2Jsb2NrczsKKwl1bnNpZ25lZCBsb25nICBzdF9hdGltZTsKKwl1bnNpZ25lZCBsb25nICBzdF9hdGltZV9uc2VjOworCXVuc2lnbmVkIGxvbmcgIHN0X210aW1lOworCXVuc2lnbmVkIGxvbmcgIHN0X210aW1lX25zZWM7CisJdW5zaWduZWQgbG9uZyAgc3RfY3RpbWU7CisJdW5zaWduZWQgbG9uZyAgc3RfY3RpbWVfbnNlYzsKKwl1bnNpZ25lZCBsb25nICBfX3VudXNlZDQ7CisJdW5zaWduZWQgbG9uZyAgX191bnVzZWQ1OworfTsKKworLyogVGhpcyBtYXRjaGVzIHN0cnVjdCBzdGF0NjQgaW4gZ2xpYmMyLjEsIGhlbmNlIHRoZSBhYnNvbHV0ZWx5CisgKiBpbnNhbmUgYW1vdW50cyBvZiBwYWRkaW5nIGFyb3VuZCBkZXZfdCdzLgorICovCitzdHJ1Y3Qgc3RhdDY0IHsKKwl1bnNpZ25lZCBsb25nIGxvbmcJc3RfZGV2OworCXVuc2lnbmVkIGNoYXIJX19wYWQwWzRdOworI2RlZmluZSBTVEFUNjRfSEFTX0JST0tFTl9TVF9JTk8KKwl1bnNpZ25lZCBsb25nCV9fc3RfaW5vOworCisJdW5zaWduZWQgaW50CXN0X21vZGU7CisJdW5zaWduZWQgaW50CXN0X25saW5rOworCisJdW5zaWduZWQgbG9uZwlzdF91aWQ7CisJdW5zaWduZWQgbG9uZwlzdF9naWQ7CisKKwl1bnNpZ25lZCBsb25nIGxvbmcJc3RfcmRldjsKKwl1bnNpZ25lZCBjaGFyCV9fcGFkM1s0XTsKKworCWxvbmcgbG9uZwlzdF9zaXplOworCXVuc2lnbmVkIGxvbmcJc3RfYmxrc2l6ZTsKKworI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQorCXVuc2lnbmVkIGxvbmcJX19wYWQ0OwkJLyogZnV0dXJlIHBvc3NpYmxlIHN0X2Jsb2NrcyBoaWdoIGJpdHMgKi8KKwl1bnNpZ25lZCBsb25nCXN0X2Jsb2NrczsJLyogTnVtYmVyIDUxMi1ieXRlIGJsb2NrcyBhbGxvY2F0ZWQuICovCisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKwl1bnNpZ25lZCBsb25nCXN0X2Jsb2NrczsJLyogTnVtYmVyIDUxMi1ieXRlIGJsb2NrcyBhbGxvY2F0ZWQuICovCisJdW5zaWduZWQgbG9uZwlfX3BhZDQ7CQkvKiBmdXR1cmUgcG9zc2libGUgc3RfYmxvY2tzIGhpZ2ggYml0cyAqLworI2Vsc2UKKyNlcnJvciBubyBlbmRpYW4gZGVmaW5lZAorI2VuZGlmCisJdW5zaWduZWQgbG9uZwlzdF9hdGltZTsKKwl1bnNpZ25lZCBsb25nCXN0X2F0aW1lX25zZWM7CisKKwl1bnNpZ25lZCBsb25nCXN0X210aW1lOworCXVuc2lnbmVkIGxvbmcJc3RfbXRpbWVfbnNlYzsKKworCXVuc2lnbmVkIGxvbmcJc3RfY3RpbWU7CisJdW5zaWduZWQgbG9uZwlzdF9jdGltZV9uc2VjOworCisJdW5zaWduZWQgbG9uZyBsb25nCXN0X2lubzsKK307CisKKyNlbmRpZiAgLyogX0FTTV9NMzJSX1NUQVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9zdGF0ZnMuaCBiL2luY2x1ZGUvYXNtLW0zMnIvc3RhdGZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmViNGM2MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvc3RhdGZzLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9BU01fTTMyUl9TVEFURlNfSAorI2RlZmluZSBfQVNNX00zMlJfU1RBVEZTX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3N0YXRmcy5oPgorCisjZW5kaWYgIC8qIF9BU01fTTMyUl9TVEFURlNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9zdHJpbmcuaCBiL2luY2x1ZGUvYXNtLW0zMnIvc3RyaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I1NGJjYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvc3RyaW5nLmgKQEAgLTAsMCArMSwxNSBAQAorI2lmbmRlZiBfQVNNX00zMlJfU1RSSU5HX0gKKyNkZWZpbmUgX0FTTV9NMzJSX1NUUklOR19ICisKKy8qICRJZCQgKi8KKworI2RlZmluZSAgX19IQVZFX0FSQ0hfU1RSTEVOCitleHRlcm4gc2l6ZV90IHN0cmxlbihjb25zdCBjaGFyICogcyk7CisKKyNkZWZpbmUgIF9fSEFWRV9BUkNIX01FTUNQWQorZXh0ZXJuIHZvaWQgKm1lbWNweSh2b2lkICpfX3RvLCBfX2NvbnN0X18gdm9pZCAqX19mcm9tLCBzaXplX3QgX19uKTsKKworI2RlZmluZSAgX19IQVZFX0FSQ0hfTUVNU0VUCitleHRlcm4gdm9pZCAqbWVtc2V0KHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fY291bnQpOworCisjZW5kaWYgIC8qIF9BU01fTTMyUl9TVFJJTkdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9zeXNjYWxsLmggYi9pbmNsdWRlL2FzbS1tMzJyL3N5c2NhbGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOGQ0YjJjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTMyci9zeXNjYWxsLmgKQEAgLTAsMCArMSwxMSBAQAorI2lmbmRlZiBfQVNNX00zMlJfU1lTQ0FMTF9ICisjZGVmaW5lIF9BU01fTTMyUl9TWVNDQUxMX0gKKworLyogJElkJCAqLworCisvKiBEZWZpbml0aW9ucyBmb3IgdGhlIHN5c3RlbSBjYWxsIHZlY3Rvci4gICovCisjZGVmaW5lIFNZU0NBTExfVkVDVE9SICAgICAgICAgICIyIgorI2RlZmluZSBTWVNDQUxMX1ZFQ1RPUl9BRERSRVNTICAiMHhhMCIKKworI2VuZGlmIC8qIF9BU01fTTMyUl9TWVNDQUxMX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLW0zMnIvc3lzdGVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzMzNDhjMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvc3lzdGVtLmgKQEAgLTAsMCArMSwyOTkgQEAKKyNpZm5kZWYgX0FTTV9NMzJSX1NZU1RFTV9ICisjZGVmaW5lIF9BU01fTTMyUl9TWVNURU1fSAorCisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAxICBieSBIaXJveXVraSBLb25kbywgSGlyb2thenUgVGFrYXRhLCBhbmQgSGl0b3NoaSBZYW1hbW90bworICogQ29weXJpZ2h0IChDKSAyMDA0ICBIaXJva2F6dSBUYWthdGEgPHRha2F0YSBhdCBsaW51eC1tMzJyLm9yZz4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKy8qCisgKiBzd2l0Y2hfdG8ocHJldiwgbmV4dCkgc2hvdWxkIHN3aXRjaCBmcm9tIHRhc2sgYHByZXYnIHRvIGBuZXh0JworICogYHByZXYnIHdpbGwgbmV2ZXIgYmUgdGhlIHNhbWUgYXMgYG5leHQnLgorICoKKyAqIGBuZXh0JyBhbmQgYHByZXYnIHNob3VsZCBiZSBzdHJ1Y3QgdGFza19zdHJ1Y3QsIGJ1dCBpdCBpc24ndCBhbHdheXMgZGVmaW5lZAorICovCisKKyNpZm5kZWYgQ09ORklHX1NNUAorI2RlZmluZSBwcmVwYXJlX3RvX3N3aXRjaCgpICBkbyB7IH0gd2hpbGUoMCkKKyNlbmRpZgkvKiBub3QgQ09ORklHX1NNUCAqLworCisjZGVmaW5lIHN3aXRjaF90byhwcmV2LCBuZXh0LCBsYXN0KSAgZG8geyBcCisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyAgYXJnMCBfX2FzbV9fICgicjAiKSA9ICh1bnNpZ25lZCBsb25nKXByZXY7IFwKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nICBhcmcxIF9fYXNtX18gKCJyMSIpID0gKHVuc2lnbmVkIGxvbmcpbmV4dDsgXAorCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgICpvbGRzcCBfX2FzbV9fICgicjIiKSA9ICYocHJldi0+dGhyZWFkLnNwKTsgXAorCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgICpuZXdzcCBfX2FzbV9fICgicjMiKSA9ICYobmV4dC0+dGhyZWFkLnNwKTsgXAorCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgICpvbGRsciBfX2FzbV9fICgicjQiKSA9ICYocHJldi0+dGhyZWFkLmxyKTsgXAorCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgICpuZXdsciBfX2FzbV9fICgicjUiKSA9ICYobmV4dC0+dGhyZWFkLmxyKTsgXAorCXJlZ2lzdGVyIHN0cnVjdCB0YXNrX3N0cnVjdCAgKl9fbGFzdCBfX2FzbV9fICgicjYiKTsgXAorCV9fYXNtX18gX192b2xhdGlsZV9fICggXAorCQkic3QgICAgIHI4LCBALXIxNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKKwkJInN0ICAgICByOSwgQC1yMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCisJCSJzdCAgICByMTAsIEAtcjE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAorCQkic3QgICAgcjExLCBALXIxNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKKwkJInN0ICAgIHIxMiwgQC1yMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCisJCSJzdCAgICByMTMsIEAtcjE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAorCQkic3QgICAgcjE0LCBALXIxNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKKwkJInNldGggIHIxNCwgI2hpZ2goMWYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCisJCSJvcjMgICByMTQsIHIxNCwgI2xvdygxZikgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAorCQkic3QgICAgcjE0LCBAcjQgICAgOyBzdG9yZSBvbGQgTFIgICAgICAgICAgICAgICAgIFxuXHQiIFwKKwkJInN0ICAgIHIxNSwgQHIyICAgIDsgc3RvcmUgb2xkIFNQICAgICAgICAgICAgICAgICBcblx0IiBcCisJCSJsZCAgICByMTUsIEByMyAgICA7IGxvYWQgbmV3IFNQICAgICAgICAgICAgICAgICAgXG5cdCIgXAorCQkic3QgICAgIHIwLCBALXIxNSAgOyBzdG9yZSAncHJldicgb250byBuZXcgc3RhY2sgIFxuXHQiIFwKKwkJImxkICAgIHIxNCwgQHI1ICAgIDsgbG9hZCBuZXcgTFIgICAgICAgICAgICAgICAgICBcblx0IiBcCisJCSJqbXAgICByMTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAorCQkiLmZpbGxpbnNuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAiIFwKKwkJIjE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCisJCSJsZCAgICAgcjYsIEByMTUrICA7IGxvYWQgJ3ByZXYnIGZyb20gbmV3IHN0YWNrICAgXG5cdCIgXAorCQkibGQgICAgcjE0LCBAcjE1KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKKwkJImxkICAgIHIxMywgQHIxNSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCisJCSJsZCAgICByMTIsIEByMTUrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAorCQkibGQgICAgcjExLCBAcjE1KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKKwkJImxkICAgIHIxMCwgQHIxNSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCisJCSJsZCAgICAgcjksIEByMTUrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAorCQkibGQgICAgIHI4LCBAcjE1KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKKwkJOiAiPSZyIiAoX19sYXN0KSBcCisJCTogInIiIChhcmcwKSwgInIiIChhcmcxKSwgInIiIChvbGRzcCksICJyIiAobmV3c3ApLCBcCisJCSAgInIiIChvbGRsciksICJyIiAobmV3bHIpIFwKKwkJOiAibWVtb3J5IiBcCisJKTsgXAorCWxhc3QgPSBfX2xhc3Q7IFwKK30gd2hpbGUoMCkKKworLyogSW50ZXJydXB0IENvbnRyb2wgKi8KKyNpZiAhZGVmaW5lZChDT05GSUdfQ0hJUF9NMzIxMDIpCisjZGVmaW5lIGxvY2FsX2lycV9lbmFibGUoKSBcCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzZXRwc3cgIzB4NDAgLT4gbm9wIjogOiA6Im1lbW9yeSIpCisjZGVmaW5lIGxvY2FsX2lycV9kaXNhYmxlKCkgXAorCV9fYXNtX18gX192b2xhdGlsZV9fICgiY2xycHN3ICMweDQwIC0+IG5vcCI6IDogOiJtZW1vcnkiKQorI2Vsc2UJLyogQ09ORklHX0NISVBfTTMyMTAyICovCitzdGF0aWMgaW5saW5lIHZvaWQgbG9jYWxfaXJxX2VuYWJsZSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgdG1wcmVnOworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkibXZmYwklMCwgcHN3OwkJXG5cdCIKKwkJIm9yMwklMCwgJTAsICMweDAwNDA7CVxuXHQiCisJCSJtdnRjCSUwLCBwc3c7CQlcblx0IgorCTogIj0mciIgKHRtcHJlZykgOiA6ICJjYml0IiwgIm1lbW9yeSIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbG9jYWxfaXJxX2Rpc2FibGUodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHRtcHJlZzAsIHRtcHJlZzE7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSJsZDI0CSUwLCAjMAk7IFVzZSAzMi1iaXQgaW5zbi4gXG5cdCIKKwkJIm12ZmMJJTEsIHBzdwk7IE5vIGludGVycnVwdCBjYW4gYmUgYWNjZXB0ZWQgaGVyZS4gXG5cdCIKKwkJIm12dGMJJTAsIHBzdwlcblx0IgorCQkiYW5kMwklMCwgJTEsICMweGZmYmYJXG5cdCIKKwkJIm12dGMJJTAsIHBzdwlcblx0IgorCTogIj0mciIgKHRtcHJlZzApLCAiPSZyIiAodG1wcmVnMSkgOiA6ICJjYml0IiwgIm1lbW9yeSIpOworfQorI2VuZGlmCS8qIENPTkZJR19DSElQX00zMjEwMiAqLworCisjZGVmaW5lIGxvY2FsX3NhdmVfZmxhZ3MoeCkgXAorCV9fYXNtX18gX192b2xhdGlsZV9fKCJtdmZjICUwLHBzdyIgOiAiPXIiKHgpIDogLyogbm8gaW5wdXQgKi8pCisKKyNkZWZpbmUgbG9jYWxfaXJxX3Jlc3RvcmUoeCkgXAorCV9fYXNtX18gX192b2xhdGlsZV9fKCJtdnRjICUwLHBzdyIgOiAvKiBubyBvdXRwdXRzICovIFwKKwkJOiAiciIgKHgpIDogImNiaXQiLCAibWVtb3J5IikKKworI2lmICFkZWZpbmVkKENPTkZJR19DSElQX00zMjEwMikKKyNkZWZpbmUgbG9jYWxfaXJxX3NhdmUoeCkJCQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQlcCisgIAkJIm12ZmMJJTAsIHBzdzsJCVxuXHQiCVwKKwkgIAkiY2xycHN3CSMweDQwIC0+IG5vcDsJCVxuXHQiCVwKKyAgCQk6ICI9ciIgKHgpIDogLyogbm8gaW5wdXQgKi8gOiAibWVtb3J5IikKKyNlbHNlCS8qIENPTkZJR19DSElQX00zMjEwMiAqLworI2RlZmluZSBsb2NhbF9pcnFfc2F2ZSh4KSAJCQkJXAorCSh7CQkJCQkJXAorCQl1bnNpZ25lZCBsb25nIHRtcHJlZzsJCQlcCisJCV9fYXNtX18gX192b2xhdGlsZV9fKCAJCQlcCisJCQkibGQyNAklMSwgIzAgXG5cdCIgCQlcCisJCQkibXZmYwklMCwgcHN3IFxuXHQiCQlcCisJCQkibXZ0YwklMSwgcHN3IFxuXHQiCQlcCisJCQkiYW5kMwklMSwgJTAsICMweGZmYmYgXG5cdCIJXAorCQkJIm12dGMJJTEsIHBzdyBcblx0IiAJCVwKKwkJCTogIj1yIiAoeCksICI9JnIiICh0bXByZWcpCVwKKwkJCTogOiAiY2JpdCIsICJtZW1vcnkiKTsJCVwKKwl9KQorI2VuZGlmCS8qIENPTkZJR19DSElQX00zMjEwMiAqLworCisjZGVmaW5lIGlycXNfZGlzYWJsZWQoKQkJCQkJXAorCSh7CQkJCQkJXAorCQl1bnNpZ25lZCBsb25nIGZsYWdzOwkJCVwKKwkJbG9jYWxfc2F2ZV9mbGFncyhmbGFncyk7CQlcCisJCSEoZmxhZ3MgJiAweDQwKTsJCQlcCisJfSkKKworI2VuZGlmICAvKiBfX0tFUk5FTF9fICovCisKKyNkZWZpbmUgbm9wKCkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJub3AiIDogOiApCisKKyNkZWZpbmUgeGNoZyhwdHIseCkgXAorCSgoX190eXBlb2ZfXygqKHB0cikpKV9feGNoZygodW5zaWduZWQgbG9uZykoeCksKHB0ciksc2l6ZW9mKCoocHRyKSkpKQorCisjZGVmaW5lIHRhcyhwdHIpCSh4Y2hnKChwdHIpLDEpKQorCisjaWZkZWYgQ09ORklHX1NNUAorZXh0ZXJuIHZvaWQgIF9feGNoZ19jYWxsZWRfd2l0aF9iYWRfcG9pbnRlcih2b2lkKTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NISVBfTTMyNzAwX1RTMQorI2RlZmluZSBEQ0FDSEVfQ0xFQVIocmVnMCwgcmVnMSwgYWRkcikJCQkJXAorCSJzZXRoCSJyZWcxIiwgI2hpZ2goZGNhY2hlX2R1bW15KTsJCVxuXHQiCVwKKwkib3IzCSJyZWcxIiwgInJlZzEiLCAjbG93KGRjYWNoZV9kdW1teSk7CVxuXHQiCVwKKwkibG9jawkicmVnMCIsIEAicmVnMSI7CQkJXG5cdCIJXAorCSJhZGQzCSJyZWcwIiwgImFkZHIiLCAjMHgxMDAwOwkJXG5cdCIJXAorCSJsZAkicmVnMCIsIEAicmVnMCI7CQkJXG5cdCIJXAorCSJhZGQzCSJyZWcwIiwgImFkZHIiLCAjMHgyMDAwOwkJXG5cdCIJXAorCSJsZAkicmVnMCIsIEAicmVnMCI7CQkJXG5cdCIJXAorCSJ1bmxvY2sJInJlZzAiLCBAInJlZzEiOwkJCVxuXHQiCisJLyogRklYTUU6IFRoaXMgd29ya2Fyb3VuZCBjb2RlIGNhbm5vdCBoYW5kbGUga2VucmVsIG1vZHVsZXMKKwkgKiBjb3JyZWN0bHkgdW5kZXIgU01QIGVudmlyb25tZW50LgorCSAqLworI2Vsc2UJLyogQ09ORklHX0NISVBfTTMyNzAwX1RTMSAqLworI2RlZmluZSBEQ0FDSEVfQ0xFQVIocmVnMCwgcmVnMSwgYWRkcikKKyNlbmRpZgkvKiBDT05GSUdfQ0hJUF9NMzI3MDBfVFMxICovCisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgX194Y2hnKHVuc2lnbmVkIGxvbmcgeCwgdm9sYXRpbGUgdm9pZCAqIHB0ciwKKwlpbnQgc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgdG1wID0gMDsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCXN3aXRjaCAoc2l6ZSkgeworI2lmbmRlZiBDT05GSUdfU01QCisJY2FzZSAxOgorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCQkibGRiCSUwLCBAJTIgXG5cdCIKKwkJCSJzdGIJJTEsIEAlMiBcblx0IgorCQkJOiAiPSZyIiAodG1wKSA6ICJyIiAoeCksICJyIiAocHRyKSA6ICJtZW1vcnkiKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCQkibGRoCSUwLCBAJTIgXG5cdCIKKwkJCSJzdGgJJTEsIEAlMiBcblx0IgorCQkJOiAiPSZyIiAodG1wKSA6ICJyIiAoeCksICJyIiAocHRyKSA6ICJtZW1vcnkiKTsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCQkibGQJJTAsIEAlMiBcblx0IgorCQkJInN0CSUxLCBAJTIgXG5cdCIKKwkJCTogIj0mciIgKHRtcCkgOiAiciIgKHgpLCAiciIgKHB0cikgOiAibWVtb3J5Iik7CisJCWJyZWFrOworI2Vsc2UgIC8qIENPTkZJR19TTVAgKi8KKwljYXNlIDQ6CisJCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwkJCURDQUNIRV9DTEVBUigiJTAiLCAicjQiLCAiJTIiKQorCQkJImxvY2sJJTAsIEAlMjsJXG5cdCIKKwkJCSJ1bmxvY2sJJTEsIEAlMjsJXG5cdCIKKwkJCTogIj0mciIgKHRtcCkgOiAiciIgKHgpLCAiciIgKHB0cikKKwkJCTogIm1lbW9yeSIKKyNpZmRlZiBDT05GSUdfQ0hJUF9NMzI3MDBfVFMxCisJCQksICJyNCIKKyNlbmRpZgkvKiBDT05GSUdfQ0hJUF9NMzI3MDBfVFMxICovCisJCSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCV9feGNoZ19jYWxsZWRfd2l0aF9iYWRfcG9pbnRlcigpOworI2VuZGlmICAvKiBDT05GSUdfU01QICovCisJfQorCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJcmV0dXJuICh0bXApOworfQorCisvKgorICogTWVtb3J5IGJhcnJpZXIuCisgKgorICogbWIoKSBwcmV2ZW50cyBsb2FkcyBhbmQgc3RvcmVzIGJlaW5nIHJlb3JkZXJlZCBhY3Jvc3MgdGhpcyBwb2ludC4KKyAqIHJtYigpIHByZXZlbnRzIGxvYWRzIGJlaW5nIHJlb3JkZXJlZCBhY3Jvc3MgdGhpcyBwb2ludC4KKyAqIHdtYigpIHByZXZlbnRzIHN0b3JlcyBiZWluZyByZW9yZGVyZWQgYWNyb3NzIHRoaXMgcG9pbnQuCisgKi8KKyNkZWZpbmUgbWIoKSAgIGJhcnJpZXIoKQorI2RlZmluZSBybWIoKSAgbWIoKQorI2RlZmluZSB3bWIoKSAgbWIoKQorCisvKioKKyAqIHJlYWRfYmFycmllcl9kZXBlbmRzIC0gRmx1c2ggYWxsIHBlbmRpbmcgcmVhZHMgdGhhdCBzdWJzZXF1ZW50cyByZWFkcworICogZGVwZW5kIG9uLgorICoKKyAqIE5vIGRhdGEtZGVwZW5kZW50IHJlYWRzIGZyb20gbWVtb3J5LWxpa2UgcmVnaW9ucyBhcmUgZXZlciByZW9yZGVyZWQKKyAqIG92ZXIgdGhpcyBiYXJyaWVyLiAgQWxsIHJlYWRzIHByZWNlZGluZyB0aGlzIHByaW1pdGl2ZSBhcmUgZ3VhcmFudGVlZAorICogdG8gYWNjZXNzIG1lbW9yeSAoYnV0IG5vdCBuZWNlc3NhcmlseSBvdGhlciBDUFVzJyBjYWNoZXMpIGJlZm9yZSBhbnkKKyAqIHJlYWRzIGZvbGxvd2luZyB0aGlzIHByaW1pdGl2ZSB0aGF0IGRlcGVuZCBvbiB0aGUgZGF0YSByZXR1cm4gYnkKKyAqIGFueSBvZiB0aGUgcHJlY2VkaW5nIHJlYWRzLiAgVGhpcyBwcmltaXRpdmUgaXMgbXVjaCBsaWdodGVyIHdlaWdodCB0aGFuCisgKiBybWIoKSBvbiBtb3N0IENQVXMsIGFuZCBpcyBuZXZlciBoZWF2aWVyIHdlaWdodCB0aGFuIGlzCisgKiBybWIoKS4KKyAqCisgKiBUaGVzZSBvcmRlcmluZyBjb25zdHJhaW50cyBhcmUgcmVzcGVjdGVkIGJ5IGJvdGggdGhlIGxvY2FsIENQVQorICogYW5kIHRoZSBjb21waWxlci4KKyAqCisgKiBPcmRlcmluZyBpcyBub3QgZ3VhcmFudGVlZCBieSBhbnl0aGluZyBvdGhlciB0aGFuIHRoZXNlIHByaW1pdGl2ZXMsCisgKiBub3QgZXZlbiBieSBkYXRhIGRlcGVuZGVuY2llcy4gIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IKKyAqIG1lbW9yeV9iYXJyaWVyKCkgZm9yIGV4YW1wbGVzIGFuZCBVUkxzIHRvIG1vcmUgaW5mb3JtYXRpb24uCisgKgorICogRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY29kZSB3b3VsZCBmb3JjZSBvcmRlcmluZyAodGhlIGluaXRpYWwKKyAqIHZhbHVlIG9mICJhIiBpcyB6ZXJvLCAiYiIgaXMgb25lLCBhbmQgInAiIGlzICImYSIpOgorICoKKyAqIDxwcm9ncmFtbGlzdGluZz4KKyAqICAgICAgQ1BVIDAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUFUgMQorICoKKyAqICAgICAgYiA9IDI7CisgKiAgICAgIG1lbW9yeV9iYXJyaWVyKCk7CisgKiAgICAgIHAgPSAmYjsgICAgICAgICAgICAgICAgICAgICAgICAgcSA9IHA7CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9iYXJyaWVyX2RlcGVuZHMoKTsKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkID0gKnE7CisgKiA8L3Byb2dyYW1saXN0aW5nPgorICoKKyAqCisgKiBiZWNhdXNlIHRoZSByZWFkIG9mICIqcSIgZGVwZW5kcyBvbiB0aGUgcmVhZCBvZiAicCIgYW5kIHRoZXNlCisgKiB0d28gcmVhZHMgYXJlIHNlcGFyYXRlZCBieSBhIHJlYWRfYmFycmllcl9kZXBlbmRzKCkuICBIb3dldmVyLAorICogdGhlIGZvbGxvd2luZyBjb2RlLCB3aXRoIHRoZSBzYW1lIGluaXRpYWwgdmFsdWVzIGZvciAiYSIgYW5kICJiIjoKKyAqCisgKiA8cHJvZ3JhbWxpc3Rpbmc+CisgKiAgICAgIENQVSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1BVIDEKKyAqCisgKiAgICAgIGEgPSAyOworICogICAgICBtZW1vcnlfYmFycmllcigpOworICogICAgICBiID0gMzsgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBiOworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfYmFycmllcl9kZXBlbmRzKCk7CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IGE7CisgKiA8L3Byb2dyYW1saXN0aW5nPgorICoKKyAqIGRvZXMgbm90IGVuZm9yY2Ugb3JkZXJpbmcsIHNpbmNlIHRoZXJlIGlzIG5vIGRhdGEgZGVwZW5kZW5jeSBiZXR3ZWVuCisgKiB0aGUgcmVhZCBvZiAiYSIgYW5kIHRoZSByZWFkIG9mICJiIi4gIFRoZXJlZm9yZSwgb24gc29tZSBDUFVzLCBzdWNoCisgKiBhcyBBbHBoYSwgInkiIGNvdWxkIGJlIHNldCB0byAzIGFuZCAieCIgdG8gMC4gIFVzZSBybWIoKQorICogaW4gY2FzZXMgbGlrZSB0aGlzd2hlcmUgdGhlcmUgYXJlIG5vIGRhdGEgZGVwZW5kZW5jaWVzLgorICoqLworCisjZGVmaW5lIHJlYWRfYmFycmllcl9kZXBlbmRzKCkJZG8geyB9IHdoaWxlICgwKQorCisjaWZkZWYgQ09ORklHX1NNUAorI2RlZmluZSBzbXBfbWIoKQltYigpCisjZGVmaW5lIHNtcF9ybWIoKQlybWIoKQorI2RlZmluZSBzbXBfd21iKCkJd21iKCkKKyNkZWZpbmUgc21wX3JlYWRfYmFycmllcl9kZXBlbmRzKCkJcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQorI2Vsc2UKKyNkZWZpbmUgc21wX21iKCkJYmFycmllcigpCisjZGVmaW5lIHNtcF9ybWIoKQliYXJyaWVyKCkKKyNkZWZpbmUgc21wX3dtYigpCWJhcnJpZXIoKQorI2RlZmluZSBzbXBfcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQlkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKworI2RlZmluZSBzZXRfbWIodmFyLCB2YWx1ZSkgZG8geyB4Y2hnKCZ2YXIsIHZhbHVlKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgc2V0X3dtYih2YXIsIHZhbHVlKSBkbyB7IHZhciA9IHZhbHVlOyB3bWIoKTsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBhcmNoX2FsaWduX3N0YWNrKHgpICh4KQorCisjZW5kaWYgIC8qIF9BU01fTTMyUl9TWVNURU1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci90ZXJtYml0cy5oIGIvaW5jbHVkZS9hc20tbTMyci90ZXJtYml0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhY2UzNzAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL3Rlcm1iaXRzLmgKQEAgLTAsMCArMSwxNzYgQEAKKyNpZm5kZWYgX0FTTV9NMzJSX1RFUk1CSVRTX0gKKyNkZWZpbmUgX0FTTV9NMzJSX1RFUk1CSVRTX0gKKworLyogJElkJCAqLworCisjaW5jbHVkZSA8bGludXgvcG9zaXhfdHlwZXMuaD4KKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyCWNjX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludAlzcGVlZF90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQJdGNmbGFnX3Q7CisKKyNkZWZpbmUgTkNDUyAxOQorc3RydWN0IHRlcm1pb3MgeworCXRjZmxhZ190IGNfaWZsYWc7CQkvKiBpbnB1dCBtb2RlIGZsYWdzICovCisJdGNmbGFnX3QgY19vZmxhZzsJCS8qIG91dHB1dCBtb2RlIGZsYWdzICovCisJdGNmbGFnX3QgY19jZmxhZzsJCS8qIGNvbnRyb2wgbW9kZSBmbGFncyAqLworCXRjZmxhZ190IGNfbGZsYWc7CQkvKiBsb2NhbCBtb2RlIGZsYWdzICovCisJY2NfdCBjX2xpbmU7CQkJLyogbGluZSBkaXNjaXBsaW5lICovCisJY2NfdCBjX2NjW05DQ1NdOwkJLyogY29udHJvbCBjaGFyYWN0ZXJzICovCit9OworCisvKiBjX2NjIGNoYXJhY3RlcnMgKi8KKyNkZWZpbmUgVklOVFIgMAorI2RlZmluZSBWUVVJVCAxCisjZGVmaW5lIFZFUkFTRSAyCisjZGVmaW5lIFZLSUxMIDMKKyNkZWZpbmUgVkVPRiA0CisjZGVmaW5lIFZUSU1FIDUKKyNkZWZpbmUgVk1JTiA2CisjZGVmaW5lIFZTV1RDIDcKKyNkZWZpbmUgVlNUQVJUIDgKKyNkZWZpbmUgVlNUT1AgOQorI2RlZmluZSBWU1VTUCAxMAorI2RlZmluZSBWRU9MIDExCisjZGVmaW5lIFZSRVBSSU5UIDEyCisjZGVmaW5lIFZESVNDQVJEIDEzCisjZGVmaW5lIFZXRVJBU0UgMTQKKyNkZWZpbmUgVkxORVhUIDE1CisjZGVmaW5lIFZFT0wyIDE2CisKKy8qIGNfaWZsYWcgYml0cyAqLworI2RlZmluZSBJR05CUksJMDAwMDAwMQorI2RlZmluZSBCUktJTlQJMDAwMDAwMgorI2RlZmluZSBJR05QQVIJMDAwMDAwNAorI2RlZmluZSBQQVJNUksJMDAwMDAxMAorI2RlZmluZSBJTlBDSwkwMDAwMDIwCisjZGVmaW5lIElTVFJJUAkwMDAwMDQwCisjZGVmaW5lIElOTENSCTAwMDAxMDAKKyNkZWZpbmUgSUdOQ1IJMDAwMDIwMAorI2RlZmluZSBJQ1JOTAkwMDAwNDAwCisjZGVmaW5lIElVQ0xDCTAwMDEwMDAKKyNkZWZpbmUgSVhPTgkwMDAyMDAwCisjZGVmaW5lIElYQU5ZCTAwMDQwMDAKKyNkZWZpbmUgSVhPRkYJMDAxMDAwMAorI2RlZmluZSBJTUFYQkVMCTAwMjAwMDAKKyNkZWZpbmUgSVVURjggICAwMDQwMDAwCisKKy8qIGNfb2ZsYWcgYml0cyAqLworI2RlZmluZSBPUE9TVAkwMDAwMDAxCisjZGVmaW5lIE9MQ1VDCTAwMDAwMDIKKyNkZWZpbmUgT05MQ1IJMDAwMDAwNAorI2RlZmluZSBPQ1JOTAkwMDAwMDEwCisjZGVmaW5lIE9OT0NSCTAwMDAwMjAKKyNkZWZpbmUgT05MUkVUCTAwMDAwNDAKKyNkZWZpbmUgT0ZJTEwJMDAwMDEwMAorI2RlZmluZSBPRkRFTAkwMDAwMjAwCisjZGVmaW5lIE5MRExZCTAwMDA0MDAKKyNkZWZpbmUgICBOTDAJMDAwMDAwMAorI2RlZmluZSAgIE5MMQkwMDAwNDAwCisjZGVmaW5lIENSRExZCTAwMDMwMDAKKyNkZWZpbmUgICBDUjAJMDAwMDAwMAorI2RlZmluZSAgIENSMQkwMDAxMDAwCisjZGVmaW5lICAgQ1IyCTAwMDIwMDAKKyNkZWZpbmUgICBDUjMJMDAwMzAwMAorI2RlZmluZSBUQUJETFkJMDAxNDAwMAorI2RlZmluZSAgIFRBQjAJMDAwMDAwMAorI2RlZmluZSAgIFRBQjEJMDAwNDAwMAorI2RlZmluZSAgIFRBQjIJMDAxMDAwMAorI2RlZmluZSAgIFRBQjMJMDAxNDAwMAorI2RlZmluZSAgIFhUQUJTCTAwMTQwMDAKKyNkZWZpbmUgQlNETFkJMDAyMDAwMAorI2RlZmluZSAgIEJTMAkwMDAwMDAwCisjZGVmaW5lICAgQlMxCTAwMjAwMDAKKyNkZWZpbmUgVlRETFkJMDA0MDAwMAorI2RlZmluZSAgIFZUMAkwMDAwMDAwCisjZGVmaW5lICAgVlQxCTAwNDAwMDAKKyNkZWZpbmUgRkZETFkJMDEwMDAwMAorI2RlZmluZSAgIEZGMAkwMDAwMDAwCisjZGVmaW5lICAgRkYxCTAxMDAwMDAKKworLyogY19jZmxhZyBiaXQgbWVhbmluZyAqLworI2RlZmluZSBDQkFVRAkwMDEwMDE3CisjZGVmaW5lICBCMAkwMDAwMDAwCQkvKiBoYW5nIHVwICovCisjZGVmaW5lICBCNTAJMDAwMDAwMQorI2RlZmluZSAgQjc1CTAwMDAwMDIKKyNkZWZpbmUgIEIxMTAJMDAwMDAwMworI2RlZmluZSAgQjEzNAkwMDAwMDA0CisjZGVmaW5lICBCMTUwCTAwMDAwMDUKKyNkZWZpbmUgIEIyMDAJMDAwMDAwNgorI2RlZmluZSAgQjMwMAkwMDAwMDA3CisjZGVmaW5lICBCNjAwCTAwMDAwMTAKKyNkZWZpbmUgIEIxMjAwCTAwMDAwMTEKKyNkZWZpbmUgIEIxODAwCTAwMDAwMTIKKyNkZWZpbmUgIEIyNDAwCTAwMDAwMTMKKyNkZWZpbmUgIEI0ODAwCTAwMDAwMTQKKyNkZWZpbmUgIEI5NjAwCTAwMDAwMTUKKyNkZWZpbmUgIEIxOTIwMAkwMDAwMDE2CisjZGVmaW5lICBCMzg0MDAJMDAwMDAxNworI2RlZmluZSBFWFRBIEIxOTIwMAorI2RlZmluZSBFWFRCIEIzODQwMAorI2RlZmluZSBDU0laRQkwMDAwMDYwCisjZGVmaW5lICAgQ1M1CTAwMDAwMDAKKyNkZWZpbmUgICBDUzYJMDAwMDAyMAorI2RlZmluZSAgIENTNwkwMDAwMDQwCisjZGVmaW5lICAgQ1M4CTAwMDAwNjAKKyNkZWZpbmUgQ1NUT1BCCTAwMDAxMDAKKyNkZWZpbmUgQ1JFQUQJMDAwMDIwMAorI2RlZmluZSBQQVJFTkIJMDAwMDQwMAorI2RlZmluZSBQQVJPREQJMDAwMTAwMAorI2RlZmluZSBIVVBDTAkwMDAyMDAwCisjZGVmaW5lIENMT0NBTAkwMDA0MDAwCisjZGVmaW5lIENCQVVERVggMDAxMDAwMAorI2RlZmluZSAgICBCNTc2MDAgMDAxMDAwMQorI2RlZmluZSAgIEIxMTUyMDAgMDAxMDAwMgorI2RlZmluZSAgIEIyMzA0MDAgMDAxMDAwMworI2RlZmluZSAgIEI0NjA4MDAgMDAxMDAwNAorI2RlZmluZSAgIEI1MDAwMDAgMDAxMDAwNQorI2RlZmluZSAgIEI1NzYwMDAgMDAxMDAwNgorI2RlZmluZSAgIEI5MjE2MDAgMDAxMDAwNworI2RlZmluZSAgQjEwMDAwMDAgMDAxMDAxMAorI2RlZmluZSAgQjExNTIwMDAgMDAxMDAxMQorI2RlZmluZSAgQjE1MDAwMDAgMDAxMDAxMgorI2RlZmluZSAgQjIwMDAwMDAgMDAxMDAxMworI2RlZmluZSAgQjI1MDAwMDAgMDAxMDAxNAorI2RlZmluZSAgQjMwMDAwMDAgMDAxMDAxNQorI2RlZmluZSAgQjM1MDAwMDAgMDAxMDAxNgorI2RlZmluZSAgQjQwMDAwMDAgMDAxMDAxNworI2RlZmluZSBDSUJBVUQJICAwMDIwMDM2MDAwMDAJLyogaW5wdXQgYmF1ZCByYXRlIChub3QgdXNlZCkgKi8KKyNkZWZpbmUgQ1RWQgkgIDAwNDAwMDAwMDAwMAkJLyogVmlzaW9CcmFpbGxlIFRlcm1pbmFsIGZsb3cgY29udHJvbCAqLworI2RlZmluZSBDTVNQQVIJICAwMTAwMDAwMDAwMDAJCS8qIG1hcmsgb3Igc3BhY2UgKHN0aWNrKSBwYXJpdHkgKi8KKyNkZWZpbmUgQ1JUU0NUUwkgIDAyMDAwMDAwMDAwMAkJLyogZmxvdyBjb250cm9sICovCisKKy8qIGNfbGZsYWcgYml0cyAqLworI2RlZmluZSBJU0lHCTAwMDAwMDEKKyNkZWZpbmUgSUNBTk9OCTAwMDAwMDIKKyNkZWZpbmUgWENBU0UJMDAwMDAwNAorI2RlZmluZSBFQ0hPCTAwMDAwMTAKKyNkZWZpbmUgRUNIT0UJMDAwMDAyMAorI2RlZmluZSBFQ0hPSwkwMDAwMDQwCisjZGVmaW5lIEVDSE9OTAkwMDAwMTAwCisjZGVmaW5lIE5PRkxTSAkwMDAwMjAwCisjZGVmaW5lIFRPU1RPUAkwMDAwNDAwCisjZGVmaW5lIEVDSE9DVEwJMDAwMTAwMAorI2RlZmluZSBFQ0hPUFJUCTAwMDIwMDAKKyNkZWZpbmUgRUNIT0tFCTAwMDQwMDAKKyNkZWZpbmUgRkxVU0hPCTAwMTAwMDAKKyNkZWZpbmUgUEVORElOCTAwNDAwMDAKKyNkZWZpbmUgSUVYVEVOCTAxMDAwMDAKKworLyogdGNmbG93KCkgYW5kIFRDWE9OQyB1c2UgdGhlc2UgKi8KKyNkZWZpbmUJVENPT0ZGCQkwCisjZGVmaW5lCVRDT09OCQkxCisjZGVmaW5lCVRDSU9GRgkJMgorI2RlZmluZQlUQ0lPTgkJMworCisvKiB0Y2ZsdXNoKCkgYW5kIFRDRkxTSCB1c2UgdGhlc2UgKi8KKyNkZWZpbmUJVENJRkxVU0gJMAorI2RlZmluZQlUQ09GTFVTSAkxCisjZGVmaW5lCVRDSU9GTFVTSAkyCisKKy8qIHRjc2V0YXR0ciB1c2VzIHRoZXNlICovCisjZGVmaW5lCVRDU0FOT1cJCTAKKyNkZWZpbmUJVENTQURSQUlOCTEKKyNkZWZpbmUJVENTQUZMVVNICTIKKworI2VuZGlmICAvKiBfQVNNX00zMlJfVEVSTUJJVFNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci90ZXJtaW9zLmggYi9pbmNsdWRlL2FzbS1tMzJyL3Rlcm1pb3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzk5ZDJlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTMyci90ZXJtaW9zLmgKQEAgLTAsMCArMSwxMDkgQEAKKyNpZm5kZWYgX00zMlJfVEVSTUlPU19ICisjZGVmaW5lIF9NMzJSX1RFUk1JT1NfSAorCisvKiBvcmlnIDogaTM4NiAyLjYuMC10ZXN0NSAqLworCisjaW5jbHVkZSA8YXNtL3Rlcm1iaXRzLmg+CisjaW5jbHVkZSA8YXNtL2lvY3Rscy5oPgorCitzdHJ1Y3Qgd2luc2l6ZSB7CisJdW5zaWduZWQgc2hvcnQgd3Nfcm93OworCXVuc2lnbmVkIHNob3J0IHdzX2NvbDsKKwl1bnNpZ25lZCBzaG9ydCB3c194cGl4ZWw7CisJdW5zaWduZWQgc2hvcnQgd3NfeXBpeGVsOworfTsKKworI2RlZmluZSBOQ0MgOAorc3RydWN0IHRlcm1pbyB7CisJdW5zaWduZWQgc2hvcnQgY19pZmxhZzsJCS8qIGlucHV0IG1vZGUgZmxhZ3MgKi8KKwl1bnNpZ25lZCBzaG9ydCBjX29mbGFnOwkJLyogb3V0cHV0IG1vZGUgZmxhZ3MgKi8KKwl1bnNpZ25lZCBzaG9ydCBjX2NmbGFnOwkJLyogY29udHJvbCBtb2RlIGZsYWdzICovCisJdW5zaWduZWQgc2hvcnQgY19sZmxhZzsJCS8qIGxvY2FsIG1vZGUgZmxhZ3MgKi8KKwl1bnNpZ25lZCBjaGFyIGNfbGluZTsJCS8qIGxpbmUgZGlzY2lwbGluZSAqLworCXVuc2lnbmVkIGNoYXIgY19jY1tOQ0NdOwkvKiBjb250cm9sIGNoYXJhY3RlcnMgKi8KK307CisKKy8qIG1vZGVtIGxpbmVzICovCisjZGVmaW5lIFRJT0NNX0xFCTB4MDAxCisjZGVmaW5lIFRJT0NNX0RUUgkweDAwMgorI2RlZmluZSBUSU9DTV9SVFMJMHgwMDQKKyNkZWZpbmUgVElPQ01fU1QJMHgwMDgKKyNkZWZpbmUgVElPQ01fU1IJMHgwMTAKKyNkZWZpbmUgVElPQ01fQ1RTCTB4MDIwCisjZGVmaW5lIFRJT0NNX0NBUgkweDA0MAorI2RlZmluZSBUSU9DTV9STkcJMHgwODAKKyNkZWZpbmUgVElPQ01fRFNSCTB4MTAwCisjZGVmaW5lIFRJT0NNX0NECVRJT0NNX0NBUgorI2RlZmluZSBUSU9DTV9SSQlUSU9DTV9STkcKKyNkZWZpbmUgVElPQ01fT1VUMQkweDIwMDAKKyNkZWZpbmUgVElPQ01fT1VUMgkweDQwMDAKKyNkZWZpbmUgVElPQ01fTE9PUAkweDgwMDAKKworLyogaW9jdGwgKGZkLCBUSU9DU0VSR0VUTFNSLCAmcmVzdWx0KSB3aGVyZSByZXN1bHQgbWF5IGJlIGFzIGJlbG93ICovCisKKy8qIGxpbmUgZGlzY2lwbGluZXMgKi8KKyNkZWZpbmUgTl9UVFkJCTAKKyNkZWZpbmUgTl9TTElQCQkxCisjZGVmaW5lIE5fTU9VU0UJCTIKKyNkZWZpbmUgTl9QUFAJCTMKKyNkZWZpbmUgTl9TVFJJUAkJNAorI2RlZmluZSBOX0FYMjUJCTUKKyNkZWZpbmUgTl9YMjUJCTYJLyogWC4yNSBhc3luYyAqLworI2RlZmluZSBOXzZQQUNLCQk3CisjZGVmaW5lIE5fTUFTQwkJOAkvKiBSZXNlcnZlZCBmb3IgTW9iaXRleCBtb2R1bGUgPGthekBjYWZlLm5ldD4gKi8KKyNkZWZpbmUgTl9SMzk2NAkJOQkvKiBSZXNlcnZlZCBmb3IgU2ltYXRpYyBSMzk2NCBtb2R1bGUgKi8KKyNkZWZpbmUgTl9QUk9GSUJVU19GREwJMTAJLyogUmVzZXJ2ZWQgZm9yIFByb2ZpYnVzIDxEYXZlQG12aGkuY29tPiAqLworI2RlZmluZSBOX0lSREEJCTExCS8qIExpbnV4IElSIC0gaHR0cDovL2lyZGEuc291cmNlZm9yZ2UubmV0LyAqLworI2RlZmluZSBOX1NNU0JMT0NLCTEyCS8qIFNNUyBibG9jayBtb2RlIC0gZm9yIHRhbGtpbmcgdG8gR1NNIGRhdGEgY2FyZHMgYWJvdXQgU01TIG1lc3NhZ2VzICovCisjZGVmaW5lIE5fSERMQwkJMTMJLyogc3luY2hyb25vdXMgSERMQyAqLworI2RlZmluZSBOX1NZTkNfUFBQCTE0CS8qIHN5bmNocm9ub3VzIFBQUCAqLworI2RlZmluZSBOX0hDSQkJMTUgIC8qIEJsdWV0b290aCBIQ0kgVUFSVCAqLworCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisvKglpbnRyPV5DCQlxdWl0PV5cCQllcmFzZT1kZWwJa2lsbD1eVQorCWVvZj1eRAkJdnRpbWU9XDAJdm1pbj1cMQkJc3h0Yz1cMAorCXN0YXJ0PV5RCXN0b3A9XlMJCXN1c3A9XloJCWVvbD1cMAorCXJlcHJpbnQ9XlIJZGlzY2FyZD1eVQl3ZXJhc2U9XlcJbG5leHQ9XlYKKwllb2wyPVwwCisqLworI2RlZmluZSBJTklUX0NfQ0MgIlwwMDNcMDM0XDE3N1wwMjVcMDA0XDBcMVwwXDAyMVwwMjNcMDMyXDBcMDIyXDAxN1wwMjdcMDI2XDAiCisKKy8qCisgKiBUcmFuc2xhdGUgYSAidGVybWlvIiBzdHJ1Y3R1cmUgaW50byBhICJ0ZXJtaW9zIi4gVWdoLgorICovCisjZGVmaW5lIFNFVF9MT1dfVEVSTUlPU19CSVRTKHRlcm1pb3MsIHRlcm1pbywgeCkgeyBcCisJdW5zaWduZWQgc2hvcnQgX190bXA7IFwKKwlnZXRfdXNlcihfX3RtcCwmKHRlcm1pbyktPngpOyBcCisJKih1bnNpZ25lZCBzaG9ydCAqKSAmKHRlcm1pb3MpLT54ID0gX190bXA7IFwKK30KKworI2RlZmluZSB1c2VyX3Rlcm1pb190b19rZXJuZWxfdGVybWlvcyh0ZXJtaW9zLCB0ZXJtaW8pIFwKKyh7IFwKKwlTRVRfTE9XX1RFUk1JT1NfQklUUyh0ZXJtaW9zLCB0ZXJtaW8sIGNfaWZsYWcpOyBcCisJU0VUX0xPV19URVJNSU9TX0JJVFModGVybWlvcywgdGVybWlvLCBjX29mbGFnKTsgXAorCVNFVF9MT1dfVEVSTUlPU19CSVRTKHRlcm1pb3MsIHRlcm1pbywgY19jZmxhZyk7IFwKKwlTRVRfTE9XX1RFUk1JT1NfQklUUyh0ZXJtaW9zLCB0ZXJtaW8sIGNfbGZsYWcpOyBcCisJY29weV9mcm9tX3VzZXIoKHRlcm1pb3MpLT5jX2NjLCAodGVybWlvKS0+Y19jYywgTkNDKTsgXAorfSkKKworLyoKKyAqIFRyYW5zbGF0ZSBhICJ0ZXJtaW9zIiBzdHJ1Y3R1cmUgaW50byBhICJ0ZXJtaW8iLiBVZ2guCisgKi8KKyNkZWZpbmUga2VybmVsX3Rlcm1pb3NfdG9fdXNlcl90ZXJtaW8odGVybWlvLCB0ZXJtaW9zKSBcCisoeyBcCisJcHV0X3VzZXIoKHRlcm1pb3MpLT5jX2lmbGFnLCAmKHRlcm1pbyktPmNfaWZsYWcpOyBcCisJcHV0X3VzZXIoKHRlcm1pb3MpLT5jX29mbGFnLCAmKHRlcm1pbyktPmNfb2ZsYWcpOyBcCisJcHV0X3VzZXIoKHRlcm1pb3MpLT5jX2NmbGFnLCAmKHRlcm1pbyktPmNfY2ZsYWcpOyBcCisJcHV0X3VzZXIoKHRlcm1pb3MpLT5jX2xmbGFnLCAmKHRlcm1pbyktPmNfbGZsYWcpOyBcCisJcHV0X3VzZXIoKHRlcm1pb3MpLT5jX2xpbmUsICAmKHRlcm1pbyktPmNfbGluZSk7IFwKKwljb3B5X3RvX3VzZXIoKHRlcm1pbyktPmNfY2MsICh0ZXJtaW9zKS0+Y19jYywgTkNDKTsgXAorfSkKKworI2RlZmluZSB1c2VyX3Rlcm1pb3NfdG9fa2VybmVsX3Rlcm1pb3MoaywgdSkgY29weV9mcm9tX3VzZXIoaywgdSwgc2l6ZW9mKHN0cnVjdCB0ZXJtaW9zKSkKKyNkZWZpbmUga2VybmVsX3Rlcm1pb3NfdG9fdXNlcl90ZXJtaW9zKHUsIGspIGNvcHlfdG9fdXNlcih1LCBrLCBzaXplb2Yoc3RydWN0IHRlcm1pb3MpKQorCisjZW5kaWYJLyogX19LRVJORUxfXyAqLworCisjZW5kaWYJLyogX00zMlJfVEVSTUlPU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL3RocmVhZF9pbmZvLmggYi9pbmNsdWRlL2FzbS1tMzJyL3RocmVhZF9pbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWYzYTBmYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvdGhyZWFkX2luZm8uaApAQCAtMCwwICsxLDE4MiBAQAorI2lmbmRlZiBfQVNNX00zMlJfVEhSRUFEX0lORk9fSAorI2RlZmluZSBfQVNNX00zMlJfVEhSRUFEX0lORk9fSAorCisvKiB0aHJlYWRfaW5mby5oOiBtMzJyIGxvdy1sZXZlbCB0aHJlYWQgaW5mb3JtYXRpb24KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgIERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKiAtIEluY29ycG9yYXRpbmcgc3VnZ2VzdGlvbnMgbWFkZSBieSBMaW51cyBUb3J2YWxkcyBhbmQgRGF2ZSBNaWxsZXIKKyAqIENvcHlyaWdodCAoQykgMjAwNCAgSGlyb2thenUgVGFrYXRhIDx0YWthdGEgYXQgbGludXgtbTMyci5vcmc+CisgKi8KKworI2lmZGVmIF9fS0VSTkVMX18KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjZW5kaWYKKworLyoKKyAqIGxvdyBsZXZlbCB0YXNrIGRhdGEgdGhhdCBlbnRyeS5TIG5lZWRzIGltbWVkaWF0ZSBhY2Nlc3MgdG8KKyAqIC0gdGhpcyBzdHJ1Y3Qgc2hvdWxkIGZpdCBlbnRpcmVseSBpbnNpZGUgb2Ygb25lIGNhY2hlIGxpbmUKKyAqIC0gdGhpcyBzdHJ1Y3Qgc2hhcmVzIHRoZSBzdXBlcnZpc29yIHN0YWNrIHBhZ2VzCisgKiAtIGlmIHRoZSBjb250ZW50cyBvZiB0aGlzIHN0cnVjdHVyZSBhcmUgY2hhbmdlZCwgdGhlIGFzc2VtYmx5IGNvbnN0YW50cyBtdXN0IGFsc28gYmUgY2hhbmdlZAorICovCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCitzdHJ1Y3QgdGhyZWFkX2luZm8geworCXN0cnVjdCB0YXNrX3N0cnVjdAkqdGFzazsJCS8qIG1haW4gdGFzayBzdHJ1Y3R1cmUgKi8KKwlzdHJ1Y3QgZXhlY19kb21haW4JKmV4ZWNfZG9tYWluOwkvKiBleGVjdXRpb24gZG9tYWluICovCisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CQkvKiBsb3cgbGV2ZWwgZmxhZ3MgKi8KKwl1bnNpZ25lZCBsb25nCQlzdGF0dXM7CQkvKiB0aHJlYWQtc3luY2hyb25vdXMgZmxhZ3MgKi8KKwlfX3UzMgkJCWNwdTsJCS8qIGN1cnJlbnQgQ1BVICovCisJX19zMzIJCQlwcmVlbXB0X2NvdW50OyAvKiAwID0+IHByZWVtcHRhYmxlLCA8MCA9PiBCVUcgKi8KKworCW1tX3NlZ21lbnRfdAkJYWRkcl9saW1pdDsJLyogdGhyZWFkIGFkZHJlc3Mgc3BhY2U6CisJCQkJCSAJICAgMC0weEJGRkZGRkZGIGZvciB1c2VyLXRocmVhZAorCQkJCQkJICAgMC0weEZGRkZGRkZGIGZvciBrZXJuZWwtdGhyZWFkCisJCQkJCQkqLworCXN0cnVjdCByZXN0YXJ0X2Jsb2NrICAgIHJlc3RhcnRfYmxvY2s7CisKKwlfX3U4CQkJc3VwZXJ2aXNvcl9zdGFja1swXTsKK307CisKKyNlbHNlIC8qICFfX0FTU0VNQkxZX18gKi8KKworLyogb2Zmc2V0cyBpbnRvIHRoZSB0aHJlYWRfaW5mbyBzdHJ1Y3QgZm9yIGFzc2VtYmx5IGNvZGUgYWNjZXNzICovCisjZGVmaW5lIFRJX1RBU0sJCTB4MDAwMDAwMDAKKyNkZWZpbmUgVElfRVhFQ19ET01BSU4JMHgwMDAwMDAwNAorI2RlZmluZSBUSV9GTEFHUwkweDAwMDAwMDA4CisjZGVmaW5lIFRJX1NUQVRVUwkweDAwMDAwMDBDCisjZGVmaW5lIFRJX0NQVQkJMHgwMDAwMDAxMAorI2RlZmluZSBUSV9QUkVfQ09VTlQJMHgwMDAwMDAxNAorI2RlZmluZSBUSV9BRERSX0xJTUlUCTB4MDAwMDAwMTgKKyNkZWZpbmUgVElfUkVTVEFSVF9CTE9DSyAweDAwMDAwMUMKKworI2VuZGlmCisKKyNkZWZpbmUgUFJFRU1QVF9BQ1RJVkUJCTB4MTAwMDAwMDAKKworLyoKKyAqIG1hY3Jvcy9mdW5jdGlvbnMgZm9yIGdhaW5pbmcgYWNjZXNzIHRvIHRoZSB0aHJlYWQgaW5mb3JtYXRpb24gc3RydWN0dXJlCisgKgorICogcHJlZW1wdF9jb3VudCBuZWVkcyB0byBiZSAxIGluaXRpYWxseSwgdW50aWwgdGhlIHNjaGVkdWxlciBpcyBmdW5jdGlvbmFsLgorICovCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjZGVmaW5lIElOSVRfVEhSRUFEX0lORk8odHNrKQkJCVwKK3sJCQkJCQlcCisJLnRhc2sJCT0gJnRzaywJCQlcCisJLmV4ZWNfZG9tYWluCT0gJmRlZmF1bHRfZXhlY19kb21haW4sCVwKKwkuZmxhZ3MJCT0gMCwJCQlcCisJLmNwdQkJPSAwLAkJCVwKKwkucHJlZW1wdF9jb3VudAk9IDEsCQkJXAorCS5hZGRyX2xpbWl0CT0gS0VSTkVMX0RTLAkJXAorCS5yZXN0YXJ0X2Jsb2NrID0gewkJCVwKKwkJLmZuID0gZG9fbm9fcmVzdGFydF9zeXNjYWxsLAlcCisJfSwJCQkJCVwKK30KKworI2RlZmluZSBpbml0X3RocmVhZF9pbmZvCShpbml0X3RocmVhZF91bmlvbi50aHJlYWRfaW5mbykKKyNkZWZpbmUgaW5pdF9zdGFjawkJKGluaXRfdGhyZWFkX3VuaW9uLnN0YWNrKQorCisjZGVmaW5lIFRIUkVBRF9TSVpFICgyKlBBR0VfU0laRSkKKworLyogaG93IHRvIGdldCB0aGUgdGhyZWFkIGluZm9ybWF0aW9uIHN0cnVjdCBmcm9tIEMgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRocmVhZF9pbmZvICpjdXJyZW50X3RocmVhZF9pbmZvKHZvaWQpCit7CisJc3RydWN0IHRocmVhZF9pbmZvICp0aTsKKworCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwkJImxkaQklMCwgIyUxCQkJXG5cdCIKKwkJImFuZAklMCwgc3AJCQlcblx0IgorCQk6ICI9ciIgKHRpKSA6ICJpIiAofihUSFJFQURfU0laRSAtIDEpKQorCSk7CisKKwlyZXR1cm4gdGk7Cit9CisKKy8qIHRocmVhZCBpbmZvcm1hdGlvbiBhbGxvY2F0aW9uICovCisjaWYgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFCisjZGVmaW5lIGFsbG9jX3RocmVhZF9pbmZvKHRzaykJCQkJCVwKKwkoewkJCQkJCQlcCisJCXN0cnVjdCB0aHJlYWRfaW5mbyAqcmV0OwkJCVwKKwkgCQkJCQkJCVwKKwkgCXJldCA9IGttYWxsb2MoVEhSRUFEX1NJWkUsIEdGUF9LRVJORUwpOwkJXAorCSAJaWYgKHJldCkJCQkJCVwKKwkgCQltZW1zZXQocmV0LCAwLCBUSFJFQURfU0laRSk7CQlcCisJIAlyZXQ7CQkJCQkJXAorCSB9KQorI2Vsc2UKKyNkZWZpbmUgYWxsb2NfdGhyZWFkX2luZm8odHNrKSBrbWFsbG9jKFRIUkVBRF9TSVpFLCBHRlBfS0VSTkVMKQorI2VuZGlmCisKKyNkZWZpbmUgZnJlZV90aHJlYWRfaW5mbyhpbmZvKSBrZnJlZShpbmZvKQorI2RlZmluZSBnZXRfdGhyZWFkX2luZm8odGkpIGdldF90YXNrX3N0cnVjdCgodGkpLT50YXNrKQorI2RlZmluZSBwdXRfdGhyZWFkX2luZm8odGkpIHB1dF90YXNrX3N0cnVjdCgodGkpLT50YXNrKQorCisjZGVmaW5lIFRJX0ZMQUdfRkFVTFRfQ09ERV9TSElGVAkyOAorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3RocmVhZF9mYXVsdF9jb2RlKHVuc2lnbmVkIGludCB2YWwpCit7CisJc3RydWN0IHRocmVhZF9pbmZvICp0aSA9IGN1cnJlbnRfdGhyZWFkX2luZm8oKTsKKwl0aS0+ZmxhZ3MgPSAodGktPmZsYWdzICYgKH4wID4+ICgzMiAtIFRJX0ZMQUdfRkFVTFRfQ09ERV9TSElGVCkpKQorCQl8ICh2YWwgPDwgVElfRkxBR19GQVVMVF9DT0RFX1NISUZUKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2V0X3RocmVhZF9mYXVsdF9jb2RlKHZvaWQpCit7CisJc3RydWN0IHRocmVhZF9pbmZvICp0aSA9IGN1cnJlbnRfdGhyZWFkX2luZm8oKTsKKwlyZXR1cm4gdGktPmZsYWdzID4+IFRJX0ZMQUdfRkFVTFRfQ09ERV9TSElGVDsKK30KKworI2Vsc2UgLyogIV9fQVNTRU1CTFlfXyAqLworCisjZGVmaW5lIFRIUkVBRF9TSVpFCTgxOTIKKworLyogaG93IHRvIGdldCB0aGUgdGhyZWFkIGluZm9ybWF0aW9uIHN0cnVjdCBmcm9tIEFTTSAqLworI2RlZmluZSBHRVRfVEhSRUFEX0lORk8ocmVnKQlHRVRfVEhSRUFEX0lORk8gcmVnCisJLm1hY3JvIEdFVF9USFJFQURfSU5GTyByZWcKKwlsZGkJXHJlZywgIy1USFJFQURfU0laRQorCWFuZAlccmVnLCBzcAorCS5lbmRtCisKKyNlbmRpZgorCisvKgorICogdGhyZWFkIGluZm9ybWF0aW9uIGZsYWdzCisgKiAtIHRoZXNlIGFyZSBwcm9jZXNzIHN0YXRlIGZsYWdzIHRoYXQgdmFyaW91cyBhc3NlbWJseSBmaWxlcyBtYXkgbmVlZCB0byBhY2Nlc3MKKyAqIC0gcGVuZGluZyB3b3JrLXRvLWJlLWRvbmUgZmxhZ3MgYXJlIGluIExTVworICogLSBvdGhlciBmbGFncyBpbiBNU1cKKyAqLworI2RlZmluZSBUSUZfU1lTQ0FMTF9UUkFDRQkwCS8qIHN5c2NhbGwgdHJhY2UgYWN0aXZlICovCisjZGVmaW5lIFRJRl9OT1RJRllfUkVTVU1FCTEJLyogcmVzdW1wdGlvbiBub3RpZmljYXRpb24gcmVxdWVzdGVkICovCisjZGVmaW5lIFRJRl9TSUdQRU5ESU5HCQkyCS8qIHNpZ25hbCBwZW5kaW5nICovCisjZGVmaW5lIFRJRl9ORUVEX1JFU0NIRUQJMwkvKiByZXNjaGVkdWxpbmcgbmVjZXNzYXJ5ICovCisjZGVmaW5lIFRJRl9TSU5HTEVTVEVQCQk0CS8qIHJlc3RvcmUgc2luZ2xlc3RlcCBvbiByZXR1cm4gdG8gdXNlciBtb2RlICovCisjZGVmaW5lIFRJRl9JUkVUCQk1CS8qIHJldHVybiB3aXRoIGlyZXQgKi8KKyNkZWZpbmUgVElGX1BPTExJTkdfTlJGTEFHCTE2CS8qIHRydWUgaWYgcG9sbF9pZGxlKCkgaXMgcG9sbGluZyBUSUZfTkVFRF9SRVNDSEVEICovCisJCQkJCS8qIDMxLi4yOCBmYXVsdCBjb2RlICovCisjZGVmaW5lIFRJRl9NRU1ESUUJCTE3CisKKyNkZWZpbmUgX1RJRl9TWVNDQUxMX1RSQUNFCSgxPDxUSUZfU1lTQ0FMTF9UUkFDRSkKKyNkZWZpbmUgX1RJRl9OT1RJRllfUkVTVU1FCSgxPDxUSUZfTk9USUZZX1JFU1VNRSkKKyNkZWZpbmUgX1RJRl9TSUdQRU5ESU5HCQkoMTw8VElGX1NJR1BFTkRJTkcpCisjZGVmaW5lIF9USUZfTkVFRF9SRVNDSEVECSgxPDxUSUZfTkVFRF9SRVNDSEVEKQorI2RlZmluZSBfVElGX1NJTkdMRVNURVAJCSgxPDxUSUZfU0lOR0xFU1RFUCkKKyNkZWZpbmUgX1RJRl9JUkVUCQkoMTw8VElGX0lSRVQpCisjZGVmaW5lIF9USUZfUE9MTElOR19OUkZMQUcJKDE8PFRJRl9QT0xMSU5HX05SRkxBRykKKworI2RlZmluZSBfVElGX1dPUktfTUFTSwkJMHgwMDAwRkZGRQkvKiB3b3JrIHRvIGRvIG9uIGludGVycnVwdC9leGNlcHRpb24gcmV0dXJuICovCisjZGVmaW5lIF9USUZfQUxMV09SS19NQVNLCTB4MDAwMEZGRkYJLyogd29yayB0byBkbyBvbiBhbnkgcmV0dXJuIHRvIHUtc3BhY2UgKi8KKworLyoKKyAqIFRocmVhZC1zeW5jaHJvbm91cyBzdGF0dXMuCisgKgorICogVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgZmxhZ3MgaW4gdGhhdCBub2JvZHkgZWxzZQorICogZXZlciB0b3VjaGVzIG91ciB0aHJlYWQtc3luY2hyb25vdXMgc3RhdHVzLCBzbyB3ZSBkb24ndAorICogaGF2ZSB0byB3b3JyeSBhYm91dCBhdG9taWMgYWNjZXNzZXMuCisgKi8KKyNkZWZpbmUgVFNfVVNFREZQVQkJMHgwMDAxCS8qIEZQVSB3YXMgdXNlZCBieSB0aGlzIHRhc2sgdGhpcyBxdWFudHVtIChTTVApICovCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfQVNNX00zMlJfVEhSRUFEX0lORk9fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci90aW1leC5oIGIvaW5jbHVkZS9hc20tbTMyci90aW1leC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiZjEyZTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL3RpbWV4LmgKQEAgLTAsMCArMSwzNCBAQAorI2lmbmRlZiBfQVNNX00zMlJfVElNRVhfSAorI2RlZmluZSBfQVNNX00zMlJfVElNRVhfSAorCisvKiAkSWQkICovCisKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1tMzJyL3RpbWV4LmgKKyAqCisgKiBtMzJyIGFyY2hpdGVjdHVyZSB0aW1leCBzcGVjaWZpY2F0aW9ucworICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2RlZmluZSBDTE9DS19USUNLX1JBVEUJKENPTkZJR19CVVNfQ0xPQ0sgLyBDT05GSUdfVElNRVJfRElWSURFKQorI2RlZmluZSBDTE9DS19USUNLX0ZBQ1RPUgkyMAkvKiBGYWN0b3Igb2YgYm90aCAxMDAwMDAwIGFuZCBDTE9DS19USUNLX1JBVEUgKi8KKyNkZWZpbmUgRklORVRVTkUgKCgoKCgobG9uZylMQVRDSCAqIEhaIC0gQ0xPQ0tfVElDS19SQVRFKSA8PCBTSElGVF9IWikgKiBcCisJKDEwMDAwMDAvQ0xPQ0tfVElDS19GQUNUT1IpIC8gKENMT0NLX1RJQ0tfUkFURS9DTE9DS19USUNLX0ZBQ1RPUikpIFwKKwkJPDwgKFNISUZUX1NDQUxFLVNISUZUX0haKSkgLyBIWikKKworI2lmZGVmIF9fS0VSTkVMX18KKy8qCisgKiBTdGFuZGFyZCB3YXkgdG8gYWNjZXNzIHRoZSBjeWNsZSBjb3VudGVyLgorICogQ3VycmVudGx5IG9ubHkgdXNlZCBvbiBTTVAuCisgKi8KKwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgY3ljbGVzX3Q7CisKK3N0YXRpYyBfX2lubGluZV9fIGN5Y2xlc190IGdldF9jeWNsZXMgKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYgIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmICAvKiBfQVNNX00zMlJfVElNRVhfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci90bGIuaCBiL2luY2x1ZGUvYXNtLW0zMnIvdGxiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdlYmQ4ZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvdGxiLmgKQEAgLTAsMCArMSwyMCBAQAorI2lmbmRlZiBfTTMyUl9UTEJfSAorI2RlZmluZSBfTTMyUl9UTEJfSAorCisvKgorICogeDg2IGRvZXNuJ3QgbmVlZCBhbnkgc3BlY2lhbCBwZXItcHRlIG9yCisgKiBwZXItdm1hIGhhbmRsaW5nLi4KKyAqLworI2RlZmluZSB0bGJfc3RhcnRfdm1hKHRsYiwgdm1hKSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHRsYl9lbmRfdm1hKHRsYiwgdm1hKSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIF9fdGxiX3JlbW92ZV90bGJfZW50cnkodGxiLCBwdGUsIGFkZHJlc3MpIGRvIHsgfSB3aGlsZSAoMCkKKworLyoKKyAqIC4uIGJlY2F1c2Ugd2UgZmx1c2ggdGhlIHdob2xlIG1tIHdoZW4gaXQKKyAqIGZpbGxzIHVwLgorICovCisjZGVmaW5lIHRsYl9mbHVzaCh0bGIpIGZsdXNoX3RsYl9tbSgodGxiKS0+bW0pCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy90bGIuaD4KKworI2VuZGlmIC8qIF9NMzJSX1RMQl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL3RsYmZsdXNoLmggYi9pbmNsdWRlL2FzbS1tMzJyL3RsYmZsdXNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM3YzQwNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvdGxiZmx1c2guaApAQCAtMCwwICsxLDEwMiBAQAorI2lmbmRlZiBfQVNNX00zMlJfVExCRkxVU0hfSAorI2RlZmluZSBfQVNNX00zMlJfVExCRkxVU0hfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL20zMnIuaD4KKworLyoKKyAqIFRMQiBmbHVzaGluZzoKKyAqCisgKiAgLSBmbHVzaF90bGIoKSBmbHVzaGVzIHRoZSBjdXJyZW50IG1tIHN0cnVjdCBUTEJzCisgKiAgLSBmbHVzaF90bGJfYWxsKCkgZmx1c2hlcyBhbGwgcHJvY2Vzc2VzIFRMQnMKKyAqICAtIGZsdXNoX3RsYl9tbShtbSkgZmx1c2hlcyB0aGUgc3BlY2lmaWVkIG1tIGNvbnRleHQgVExCJ3MKKyAqICAtIGZsdXNoX3RsYl9wYWdlKHZtYSwgdm1hZGRyKSBmbHVzaGVzIG9uZSBwYWdlCisgKiAgLSBmbHVzaF90bGJfcmFuZ2Uodm1hLCBzdGFydCwgZW5kKSBmbHVzaGVzIGEgcmFuZ2Ugb2YgcGFnZXMKKyAqICAtIGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2Uoc3RhcnQsIGVuZCkgZmx1c2hlcyBhIHJhbmdlIG9mIGtlcm5lbCBwYWdlcworICogIC0gZmx1c2hfdGxiX3BndGFibGVzKG1tLCBzdGFydCwgZW5kKSBmbHVzaGVzIGEgcmFuZ2Ugb2YgcGFnZSB0YWJsZXMKKyAqLworCitleHRlcm4gdm9pZCBsb2NhbF9mbHVzaF90bGJfYWxsKHZvaWQpOworZXh0ZXJuIHZvaWQgbG9jYWxfZmx1c2hfdGxiX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKik7CitleHRlcm4gdm9pZCBsb2NhbF9mbHVzaF90bGJfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZyk7CitleHRlcm4gdm9pZCBsb2NhbF9mbHVzaF90bGJfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcsCisJdW5zaWduZWQgbG9uZyk7CisKKyNpZm5kZWYgQ09ORklHX1NNUAorI2lmZGVmIENPTkZJR19NTVUKKyNkZWZpbmUgZmx1c2hfdGxiX2FsbCgpCQkJbG9jYWxfZmx1c2hfdGxiX2FsbCgpCisjZGVmaW5lIGZsdXNoX3RsYl9tbShtbSkJCWxvY2FsX2ZsdXNoX3RsYl9tbShtbSkKKyNkZWZpbmUgZmx1c2hfdGxiX3BhZ2Uodm1hLCBwYWdlKQlsb2NhbF9mbHVzaF90bGJfcGFnZSh2bWEsIHBhZ2UpCisjZGVmaW5lIGZsdXNoX3RsYl9yYW5nZSh2bWEsIHN0YXJ0LCBlbmQpCVwKKwlsb2NhbF9mbHVzaF90bGJfcmFuZ2Uodm1hLCBzdGFydCwgZW5kKQorI2RlZmluZSBmbHVzaF90bGJfa2VybmVsX3JhbmdlKHN0YXJ0LCBlbmQpCWxvY2FsX2ZsdXNoX3RsYl9hbGwoKQorI2Vsc2UJLyogQ09ORklHX01NVSAqLworI2RlZmluZSBmbHVzaF90bGJfYWxsKCkJCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX3RsYl9tbShtbSkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfdGxiX3BhZ2Uodm1hLCB2bWFkZHIpCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfdGxiX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCkJZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCS8qIENPTkZJR19NTVUgKi8KKyNlbHNlCS8qIENPTkZJR19TTVAgKi8KK2V4dGVybiB2b2lkIHNtcF9mbHVzaF90bGJfYWxsKHZvaWQpOworZXh0ZXJuIHZvaWQgc21wX2ZsdXNoX3RsYl9tbShzdHJ1Y3QgbW1fc3RydWN0ICopOworZXh0ZXJuIHZvaWQgc21wX2ZsdXNoX3RsYl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nKTsKK2V4dGVybiB2b2lkIHNtcF9mbHVzaF90bGJfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcsCisJdW5zaWduZWQgbG9uZyk7CisKKyNkZWZpbmUgZmx1c2hfdGxiX2FsbCgpCQkJc21wX2ZsdXNoX3RsYl9hbGwoKQorI2RlZmluZSBmbHVzaF90bGJfbW0obW0pCQlzbXBfZmx1c2hfdGxiX21tKG1tKQorI2RlZmluZSBmbHVzaF90bGJfcGFnZSh2bWEsIHBhZ2UpCXNtcF9mbHVzaF90bGJfcGFnZSh2bWEsIHBhZ2UpCisjZGVmaW5lIGZsdXNoX3RsYl9yYW5nZSh2bWEsIHN0YXJ0LCBlbmQpCVwKKwlzbXBfZmx1c2hfdGxiX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCkKKyNkZWZpbmUgZmx1c2hfdGxiX2tlcm5lbF9yYW5nZShzdGFydCwgZW5kKQlzbXBfZmx1c2hfdGxiX2FsbCgpCisjZW5kaWYJLyogQ09ORklHX1NNUCAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fZmx1c2hfdGxiX3BhZ2UodW5zaWduZWQgbG9uZyBwYWdlKQoreworCXVuc2lnbmVkIGludCB0bXByZWcwLCB0bXByZWcxLCB0bXByZWcyOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCQkic2V0aAklMCwgI2hpZ2goJTQpCVxuXHQiCisJCSJzdAklMywgQCglNSwgJTApCVxuXHQiCisJCSJsZGkJJTEsICMxCQlcblx0IgorCQkic3QJJTEsIEAoJTYsICUwKQlcblx0IgorCQkiYWRkMwklMSwgJTAsICU3CVxuXHQiCisJCSIuZmlsbGluc24JCVxuIgorCQkiMToJCQlcblx0IgorCQkibGQJJTIsIEAoJTYsICUwKQlcblx0IgorCQkiYm5legklMiwgMWIJCVxuXHQiCisJCSJsZAklMCwgQCUxKwlcblx0IgorCQkibGQJJTEsIEAlMQkJXG5cdCIKKwkJInN0CSUyLCBAKyUwCVxuXHQiCisJCSJzdAklMiwgQCslMQlcblx0IgorCQk6ICI9JnIiICh0bXByZWcwKSwgIj0mciIgKHRtcHJlZzEpLCAiPSZyIiAodG1wcmVnMikKKwkJOiAiciIgKHBhZ2UpLCAiaSIgKE1NVV9SRUdfQkFTRSksICJpIiAoTVNWQV9vZmZzZXQpLAorCQkiaSIgKE1UT1Bfb2Zmc2V0KSwgImkiIChNSURYSV9vZmZzZXQpCisJCTogIm1lbW9yeSIKKwkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fZmx1c2hfdGxiX2FsbCh2b2lkKQoreworCXVuc2lnbmVkIGludCB0bXByZWcwLCB0bXByZWcxOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCQkic2V0aAklMCwgI2hpZ2goJTIpCQlcblx0IgorCQkib3IzCSUwLCAlMCwgI2xvdyglMikJXG5cdCIKKwkJImxkaQklMSwgIzB4YwkJXG5cdCIKKwkJInN0CSUxLCBAJTAJCQlcblx0IgorCQkiLmZpbGxpbnNuCQkJXG4iCisJCSIxOgkJCQlcblx0IgorCQkibGQJJTEsIEAlMAkJCVxuXHQiCisJCSJibmV6CSUxLCAxYgkJCVxuXHQiCisJCTogIj0mciIgKHRtcHJlZzApLCAiPSZyIiAodG1wcmVnMSkKKwkJOiAiaSIgKE1UT1ApIDogIm1lbW9yeSIKKwkpOworfQorCisjZGVmaW5lIGZsdXNoX3RsYl9wZ3RhYmxlcyhtbSwgc3RhcnQsIGVuZCkJZG8geyB9IHdoaWxlICgwKQorCitleHRlcm4gdm9pZCB1cGRhdGVfbW11X2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nLCBwdGVfdCk7CisKKyNlbmRpZgkvKiBfQVNNX00zMlJfVExCRkxVU0hfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL3RvcG9sb2d5LmggYi9pbmNsdWRlL2FzbS1tMzJyL3RvcG9sb2d5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk5YTg5ZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvdG9wb2xvZ3kuaApAQCAtMCwwICsxLDQ4IEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tZ2VuZXJpYy90b3BvbG9neS5oCisgKgorICogV3JpdHRlbiBieTogTWF0dGhldyBEb2Jzb24sIElCTSBDb3Jwb3JhdGlvbgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMiwgSUJNIENvcnAuCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUKKyAqIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKiBTZW5kIGZlZWRiYWNrIHRvIDxjb2xwYXRjaEB1cy5pYm0uY29tPgorICovCisjaWZuZGVmIF9BU01fTTMyUl9UT1BPTE9HWV9ICisjZGVmaW5lIF9BU01fTTMyUl9UT1BPTE9HWV9ICisKKy8qIE90aGVyIGFyY2hpdGVjdHVyZXMgd2lzaGluZyB0byB1c2UgdGhpcyBzaW1wbGUgdG9wb2xvZ3kgQVBJIHNob3VsZCBmaWxsCisgICBpbiB0aGUgYmVsb3cgZnVuY3Rpb25zIGFzIGFwcHJvcHJpYXRlIGluIHRoZWlyIG93biA8YXNtL3RvcG9sb2d5Lmg+IGZpbGUuICovCisKKyNkZWZpbmUgY3B1X3RvX25vZGUoY3B1KQkoMCkKKworI2lmbmRlZiBwYXJlbnRfbm9kZQorI2RlZmluZSBwYXJlbnRfbm9kZShub2RlKQkoMCkKKyNlbmRpZgorI2lmbmRlZiBub2RlX3RvX2NwdW1hc2sKKyNkZWZpbmUgbm9kZV90b19jcHVtYXNrKG5vZGUpCShjcHVfb25saW5lX21hcCkKKyNlbmRpZgorI2lmbmRlZiBub2RlX3RvX2ZpcnN0X2NwdQorI2RlZmluZSBub2RlX3RvX2ZpcnN0X2NwdShub2RlKQkoMCkKKyNlbmRpZgorI2lmbmRlZiBwY2lidXNfdG9fY3B1bWFzaworI2RlZmluZSBwY2lidXNfdG9fY3B1bWFzayhidXMpCShjcHVfb25saW5lX21hcCkKKyNlbmRpZgorCisjZW5kaWYgLyogX0FTTV9NMzJSX1RPUE9MT0dZX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvdHlwZXMuaCBiL2luY2x1ZGUvYXNtLW0zMnIvdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTBhODg3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTMyci90eXBlcy5oCkBAIC0wLDAgKzEsNjQgQEAKKyNpZm5kZWYgX0FTTV9NMzJSX1RZUEVTX0gKKyNkZWZpbmUgX0FTTV9NMzJSX1RZUEVTX0gKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworLyogJElkJCAqLworCisvKiBvcmlnIDogaTM4NiAyLjQuMTggKi8KKwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1bW9kZV90OworCisvKgorICogX194eCBpcyBvazogaXQgZG9lc24ndCBwb2xsdXRlIHRoZSBQT1NJWCBuYW1lc3BhY2UuIFVzZSB0aGVzZSBpbiB0aGUKKyAqIGhlYWRlciBmaWxlcyBleHBvcnRlZCB0byB1c2VyIHNwYWNlCisgKi8KKwordHlwZWRlZiBfX3NpZ25lZF9fIGNoYXIgX19zODsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBfX3U4OworCit0eXBlZGVmIF9fc2lnbmVkX18gc2hvcnQgX19zMTY7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fdTE2OworCit0eXBlZGVmIF9fc2lnbmVkX18gaW50IF9fczMyOwordHlwZWRlZiB1bnNpZ25lZCBpbnQgX191MzI7CisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAhZGVmaW5lZChfX1NUUklDVF9BTlNJX18pCit0eXBlZGVmIF9fc2lnbmVkX18gbG9uZyBsb25nIF9fczY0OwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgX191NjQ7CisjZW5kaWYKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworLyoKKyAqIFRoZXNlIGFyZW4ndCBleHBvcnRlZCBvdXRzaWRlIHRoZSBrZXJuZWwgdG8gYXZvaWQgbmFtZSBzcGFjZSBjbGFzaGVzCisgKi8KKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNkZWZpbmUgQklUU19QRVJfTE9ORyAzMgorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCit0eXBlZGVmIHNpZ25lZCBjaGFyIHM4OwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIHU4OworCit0eXBlZGVmIHNpZ25lZCBzaG9ydCBzMTY7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHUxNjsKKwordHlwZWRlZiBzaWduZWQgaW50IHMzMjsKK3R5cGVkZWYgdW5zaWduZWQgaW50IHUzMjsKKwordHlwZWRlZiBzaWduZWQgbG9uZyBsb25nIHM2NDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHU2NDsKKworLyogRE1BIGFkZHJlc3NlcyBhcmUgMzItYml0cyB3aWRlLiAgKi8KKwordHlwZWRlZiB1MzIgZG1hX2FkZHJfdDsKK3R5cGVkZWYgdTY0IGRtYTY0X2FkZHJfdDsKKwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBrbWVtX2J1ZmN0bF90OworCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAgLyogX0FTTV9NMzJSX1RZUEVTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvdWFjY2Vzcy5oIGIvaW5jbHVkZS9hc20tbTMyci91YWNjZXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJiOGFjNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvdWFjY2Vzcy5oCkBAIC0wLDAgKzEsNzUzIEBACisjaWZuZGVmIF9BU01fTTMyUl9VQUNDRVNTX0gKKyNkZWZpbmUgX0FTTV9NMzJSX1VBQ0NFU1NfSAorCisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLW0zMnIvdWFjY2Vzcy5oCisgKgorICogIE0zMlIgdmVyc2lvbi4KKyAqICAgIENvcHlyaWdodCAoQykgMjAwNCAgSGlyb2thenUgVGFrYXRhIDx0YWthdGEgYXQgbGludXgtbTMyci5vcmc+CisgKi8KKworI3VuZGVmIFVBQ0NFU1NfREVCVUcKKworI2lmZGVmIFVBQ0NFU1NfREVCVUcKKyNkZWZpbmUgVUFQUklOVEsoYXJncy4uLikgcHJpbnRrKGFyZ3MpCisjZWxzZQorI2RlZmluZSBVQVBSSU5USyhhcmdzLi4uKQorI2VuZGlmIC8qIFVBQ0NFU1NfREVCVUcgKi8KKworLyoKKyAqIFVzZXIgc3BhY2UgbWVtb3J5IGFjY2VzcyBmdW5jdGlvbnMKKyAqLworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvdGhyZWFkX2luZm8uaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorCisjZGVmaW5lIFZFUklGWV9SRUFEIDAKKyNkZWZpbmUgVkVSSUZZX1dSSVRFIDEKKworLyoKKyAqIFRoZSBmcyB2YWx1ZSBkZXRlcm1pbmVzIHdoZXRoZXIgYXJndW1lbnQgdmFsaWRpdHkgY2hlY2tpbmcgc2hvdWxkIGJlCisgKiBwZXJmb3JtZWQgb3Igbm90LiAgSWYgZ2V0X2ZzKCkgPT0gVVNFUl9EUywgY2hlY2tpbmcgaXMgcGVyZm9ybWVkLCB3aXRoCisgKiBnZXRfZnMoKSA9PSBLRVJORUxfRFMsIGNoZWNraW5nIGlzIGJ5cGFzc2VkLgorICoKKyAqIEZvciBoaXN0b3JpY2FsIHJlYXNvbnMsIHRoZXNlIG1hY3JvcyBhcmUgZ3Jvc3NseSBtaXNuYW1lZC4KKyAqLworCisjZGVmaW5lIE1BS0VfTU1fU0VHKHMpCSgobW1fc2VnbWVudF90KSB7IChzKSB9KQorCisjaWZkZWYgQ09ORklHX01NVQorI2RlZmluZSBLRVJORUxfRFMJTUFLRV9NTV9TRUcoMHhGRkZGRkZGRikKKyNkZWZpbmUgVVNFUl9EUwkJTUFLRV9NTV9TRUcoUEFHRV9PRkZTRVQpCisjZWxzZQorI2RlZmluZSBLRVJORUxfRFMJTUFLRV9NTV9TRUcoMHhGRkZGRkZGRikKKyNkZWZpbmUgVVNFUl9EUwkJTUFLRV9NTV9TRUcoMHhGRkZGRkZGRikKKyNlbmRpZiAvKiBDT05GSUdfTU1VICovCisKKyNkZWZpbmUgZ2V0X2RzKCkJKEtFUk5FTF9EUykKKyNpZmRlZiBDT05GSUdfTU1VCisjZGVmaW5lIGdldF9mcygpCShjdXJyZW50X3RocmVhZF9pbmZvKCktPmFkZHJfbGltaXQpCisjZGVmaW5lIHNldF9mcyh4KQkoY3VycmVudF90aHJlYWRfaW5mbygpLT5hZGRyX2xpbWl0ID0gKHgpKQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgbW1fc2VnbWVudF90IGdldF9mcyh2b2lkKQoreworICByZXR1cm4gVVNFUl9EUzsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldF9mcyhtbV9zZWdtZW50X3QgcykKK3sKK30KKyNlbmRpZiAvKiBDT05GSUdfTU1VICovCisKKyNkZWZpbmUgc2VnbWVudF9lcShhLGIpCSgoYSkuc2VnID09IChiKS5zZWcpCisKKyNkZWZpbmUgX19hZGRyX29rKGFkZHIpIFwKKwkoKHVuc2lnbmVkIGxvbmcpKGFkZHIpIDwgKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+YWRkcl9saW1pdC5zZWcpKQorCisvKgorICogVGVzdCB3aGV0aGVyIGEgYmxvY2sgb2YgbWVtb3J5IGlzIGEgdmFsaWQgdXNlciBzcGFjZSBhZGRyZXNzLgorICogUmV0dXJucyAwIGlmIHRoZSByYW5nZSBpcyB2YWxpZCwgbm9uemVybyBvdGhlcndpc2UuCisgKgorICogVGhpcyBpcyBlcXVpdmFsZW50IHRvIHRoZSBmb2xsb3dpbmcgdGVzdDoKKyAqICh1MzMpYWRkciArICh1MzMpc2l6ZSA+PSAodTMzKWN1cnJlbnQtPmFkZHJfbGltaXQuc2VnCisgKgorICogVGhpcyBuZWVkcyAzMy1iaXQgYXJpdGhtZXRpYy4gV2UgaGF2ZSBhIGNhcnJ5Li4uCisgKi8KKyNkZWZpbmUgX19yYW5nZV9vayhhZGRyLHNpemUpICh7CQkJCQlcCisJdW5zaWduZWQgbG9uZyBmbGFnLCBzdW07IAkJCQkJXAorCV9fY2hrX3VzZXJfcHRyKGFkZHIpOwkJCQkJCVwKKwlhc20gKCAJCQkJCQkJCVwKKwkJIgljbXB1CSUxLCAlMSAgICA7IGNsZWFyIGNiaXRcbiIJCVwKKwkJIglhZGR4CSUxLCAlMyAgICA7IHNldCBjYml0IGlmIG92ZXJmbG93XG4iCVwKKwkJIglzdWJ4CSUwLCAlMFxuIgkJCQlcCisJCSIJY21wdQklNCwgJTFcbiIJCQkJXAorCQkiCXN1YngJJTAsICU1XG4iCQkJCVwKKwkJOiAiPSZyIihmbGFnKSwgIj1yIihzdW0pCQkJCVwKKwkJOiAiMSIoYWRkciksICJyIigoaW50KShzaXplKSksIAkJCQlcCisJCSAgInIiKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+YWRkcl9saW1pdC5zZWcpLCAiciIoMCkJXAorCQk6ICJjYml0IiApOwkJCQkJCVwKKwlmbGFnOyB9KQorCisvKioKKyAqIGFjY2Vzc19vazogLSBDaGVja3MgaWYgYSB1c2VyIHNwYWNlIHBvaW50ZXIgaXMgdmFsaWQKKyAqIEB0eXBlOiBUeXBlIG9mIGFjY2VzczogJVZFUklGWV9SRUFEIG9yICVWRVJJRllfV1JJVEUuICBOb3RlIHRoYXQKKyAqICAgICAgICAlVkVSSUZZX1dSSVRFIGlzIGEgc3VwZXJzZXQgb2YgJVZFUklGWV9SRUFEIC0gaWYgaXQgaXMgc2FmZQorICogICAgICAgIHRvIHdyaXRlIHRvIGEgYmxvY2ssIGl0IGlzIGFsd2F5cyBzYWZlIHRvIHJlYWQgZnJvbSBpdC4KKyAqIEBhZGRyOiBVc2VyIHNwYWNlIHBvaW50ZXIgdG8gc3RhcnQgb2YgYmxvY2sgdG8gY2hlY2sKKyAqIEBzaXplOiBTaXplIG9mIGJsb2NrIHRvIGNoZWNrCisgKgorICogQ29udGV4dDogVXNlciBjb250ZXh0IG9ubHkuICBUaGlzIGZ1bmN0aW9uIG1heSBzbGVlcC4KKyAqCisgKiBDaGVja3MgaWYgYSBwb2ludGVyIHRvIGEgYmxvY2sgb2YgbWVtb3J5IGluIHVzZXIgc3BhY2UgaXMgdmFsaWQuCisgKgorICogUmV0dXJucyB0cnVlIChub256ZXJvKSBpZiB0aGUgbWVtb3J5IGJsb2NrIG1heSBiZSB2YWxpZCwgZmFsc2UgKHplcm8pCisgKiBpZiBpdCBpcyBkZWZpbml0ZWx5IGludmFsaWQuCisgKgorICogTm90ZSB0aGF0LCBkZXBlbmRpbmcgb24gYXJjaGl0ZWN0dXJlLCB0aGlzIGZ1bmN0aW9uIHByb2JhYmx5IGp1c3QKKyAqIGNoZWNrcyB0aGF0IHRoZSBwb2ludGVyIGlzIGluIHRoZSB1c2VyIHNwYWNlIHJhbmdlIC0gYWZ0ZXIgY2FsbGluZworICogdGhpcyBmdW5jdGlvbiwgbWVtb3J5IGFjY2VzcyBmdW5jdGlvbnMgbWF5IHN0aWxsIHJldHVybiAtRUZBVUxULgorICovCisjaWZkZWYgQ09ORklHX01NVQorI2RlZmluZSBhY2Nlc3Nfb2sodHlwZSxhZGRyLHNpemUpIChsaWtlbHkoX19yYW5nZV9vayhhZGRyLHNpemUpID09IDApKQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IGFjY2Vzc19vayhpbnQgdHlwZSwgY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQoreworICBleHRlcm4gdW5zaWduZWQgbG9uZyBtZW1vcnlfc3RhcnQsIG1lbW9yeV9lbmQ7CisgIHVuc2lnbmVkIGxvbmcgdmFsID0gKHVuc2lnbmVkIGxvbmcpYWRkcjsKKworICByZXR1cm4gKCh2YWwgPj0gbWVtb3J5X3N0YXJ0KSAmJiAoKHZhbCArIHNpemUpIDwgbWVtb3J5X2VuZCkpOworfQorI2VuZGlmIC8qIENPTkZJR19NTVUgKi8KKworLyoqCisgKiB2ZXJpZnlfYXJlYTogLSBPYnNvbGV0ZS9kZXByZWNhdGVkIGFuZCB3aWxsIGdvIGF3YXkgc29vbiwKKyAqIHVzZSBhY2Nlc3Nfb2soKSBpbnN0ZWFkLgorICogQHR5cGU6IFR5cGUgb2YgYWNjZXNzOiAlVkVSSUZZX1JFQUQgb3IgJVZFUklGWV9XUklURQorICogQGFkZHI6IFVzZXIgc3BhY2UgcG9pbnRlciB0byBzdGFydCBvZiBibG9jayB0byBjaGVjaworICogQHNpemU6IFNpemUgb2YgYmxvY2sgdG8gY2hlY2sKKyAqCisgKiBDb250ZXh0OiBVc2VyIGNvbnRleHQgb25seS4gIFRoaXMgZnVuY3Rpb24gbWF5IHNsZWVwLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaGFzIGJlZW4gcmVwbGFjZWQgYnkgYWNjZXNzX29rKCkuCisgKgorICogQ2hlY2tzIGlmIGEgcG9pbnRlciB0byBhIGJsb2NrIG9mIG1lbW9yeSBpbiB1c2VyIHNwYWNlIGlzIHZhbGlkLgorICoKKyAqIFJldHVybnMgemVybyBpZiB0aGUgbWVtb3J5IGJsb2NrIG1heSBiZSB2YWxpZCwgLUVGQVVMVAorICogaWYgaXQgaXMgZGVmaW5pdGVseSBpbnZhbGlkLgorICoKKyAqIFNlZSBhY2Nlc3Nfb2soKSBmb3IgbW9yZSBkZXRhaWxzLgorICovCitzdGF0aWMgaW5saW5lIGludCBfX2RlcHJlY2F0ZWQgdmVyaWZ5X2FyZWEoaW50IHR5cGUsIGNvbnN0IHZvaWQgX191c2VyICphZGRyLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXJldHVybiBhY2Nlc3Nfb2sodHlwZSwgYWRkciwgc2l6ZSkgPyAwIDogLUVGQVVMVDsKK30KKworCisvKgorICogVGhlIGV4Y2VwdGlvbiB0YWJsZSBjb25zaXN0cyBvZiBwYWlycyBvZiBhZGRyZXNzZXM6IHRoZSBmaXJzdCBpcyB0aGUKKyAqIGFkZHJlc3Mgb2YgYW4gaW5zdHJ1Y3Rpb24gdGhhdCBpcyBhbGxvd2VkIHRvIGZhdWx0LCBhbmQgdGhlIHNlY29uZCBpcworICogdGhlIGFkZHJlc3MgYXQgd2hpY2ggdGhlIHByb2dyYW0gc2hvdWxkIGNvbnRpbnVlLiAgTm8gcmVnaXN0ZXJzIGFyZQorICogbW9kaWZpZWQsIHNvIGl0IGlzIGVudGlyZWx5IHVwIHRvIHRoZSBjb250aW51YXRpb24gY29kZSB0byBmaWd1cmUgb3V0CisgKiB3aGF0IHRvIGRvLgorICoKKyAqIEFsbCB0aGUgcm91dGluZXMgYmVsb3cgdXNlIGJpdHMgb2YgZml4dXAgY29kZSB0aGF0IGFyZSBvdXQgb2YgbGluZQorICogd2l0aCB0aGUgbWFpbiBpbnN0cnVjdGlvbiBwYXRoLiAgVGhpcyBtZWFucyB3aGVuIGV2ZXJ5dGhpbmcgaXMgd2VsbCwKKyAqIHdlIGRvbid0IGV2ZW4gaGF2ZSB0byBqdW1wIG92ZXIgdGhlbS4gIEZ1cnRoZXIsIHRoZXkgZG8gbm90IGludHJ1ZGUKKyAqIG9uIG91ciBjYWNoZSBvciB0bGIgZW50cmllcy4KKyAqLworCitzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5Cit7CisJdW5zaWduZWQgbG9uZyBpbnNuLCBmaXh1cDsKK307CisKK2V4dGVybiBpbnQgZml4dXBfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworLyoKKyAqIFRoZXNlIGFyZSB0aGUgbWFpbiBzaW5nbGUtdmFsdWUgdHJhbnNmZXIgcm91dGluZXMuICBUaGV5IGF1dG9tYXRpY2FsbHkKKyAqIHVzZSB0aGUgcmlnaHQgc2l6ZSBpZiB3ZSBqdXN0IGhhdmUgdGhlIHJpZ2h0IHBvaW50ZXIgdHlwZS4KKyAqCisgKiBUaGlzIGdldHMga2luZCBvZiB1Z2x5LiBXZSB3YW50IHRvIHJldHVybiBfdHdvXyB2YWx1ZXMgaW4gImdldF91c2VyKCkiCisgKiBhbmQgeWV0IHdlIGRvbid0IHdhbnQgdG8gZG8gYW55IHBvaW50ZXJzLCBiZWNhdXNlIHRoYXQgaXMgdG9vIG11Y2gKKyAqIG9mIGEgcGVyZm9ybWFuY2UgaW1wYWN0LiBUaHVzIHdlIGhhdmUgYSBmZXcgcmF0aGVyIHVnbHkgbWFjcm9zIGhlcmUsCisgKiBhbmQgaGlkZSBhbGwgdGhlIHVnbHluZXNzIGZyb20gdGhlIHVzZXIuCisgKgorICogVGhlICJfX3h4eCIgdmVyc2lvbnMgb2YgdGhlIHVzZXIgYWNjZXNzIGZ1bmN0aW9ucyBhcmUgdmVyc2lvbnMgdGhhdAorICogZG8gbm90IHZlcmlmeSB0aGUgYWRkcmVzcyBzcGFjZSwgdGhhdCBtdXN0IGhhdmUgYmVlbiBkb25lIHByZXZpb3VzbHkKKyAqIHdpdGggYSBzZXBhcmF0ZSAiYWNjZXNzX29rKCkiIGNhbGwgKHRoaXMgaXMgdXNlZCB3aGVuIHdlIGRvIG11bHRpcGxlCisgKiBhY2Nlc3NlcyB0byB0aGUgc2FtZSBhcmVhIG9mIHVzZXIgbWVtb3J5KS4KKyAqLworCitleHRlcm4gdm9pZCBfX2dldF91c2VyXzEodm9pZCk7CitleHRlcm4gdm9pZCBfX2dldF91c2VyXzIodm9pZCk7CitleHRlcm4gdm9pZCBfX2dldF91c2VyXzQodm9pZCk7CisKKyNpZm5kZWYgTU9EVUxFCisjZGVmaW5lIF9fZ2V0X3VzZXJfeChzaXplLHJldCx4LHB0cikgCQkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAorCQkiCW12CXIwLCAlMFxuIgkJCQlcCisJCSIJbXYJcjEsICUxXG4iIAkJCQlcCisJCSIJYmwgX19nZXRfdXNlcl8iICNzaXplICJcbiIJCQlcCisJCSIJbXYJJTAsIHIwXG4iCQkJCVwKKwkJIgltdgklMSwgcjFcbiIgCQkJCVwKKwkJOiAiPXIiKHJldCksICI9ciIoeCkgCQkJCQlcCisJCTogIjAiKHB0cikJCQkJCQlcCisJCTogInIwIiwgInIxIiwgInIxNCIgKQorI2Vsc2UgLyogTU9EVUxFICovCisvKgorICogVXNlICJqbCIgaW5zdGVhZCBvZiAiYmwiIGZvciBNT0RVTEUKKyAqLworI2RlZmluZSBfX2dldF91c2VyX3goc2l6ZSxyZXQseCxwdHIpIAkJCQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCVwKKwkJIgltdglyMCwgJTBcbiIJCQkJXAorCQkiCW12CXIxLCAlMVxuIiAJCQkJXAorCQkiCXNldGgJbHIsICNoaWdoKF9fZ2V0X3VzZXJfIiAjc2l6ZSAiKVxuIglcCisJCSIJb3IzCWxyLCBsciwgI2xvdyhfX2dldF91c2VyXyIgI3NpemUgIilcbiIJXAorCQkiCWpsIAlsclxuIgkJCQkJXAorCQkiCW12CSUwLCByMFxuIgkJCQlcCisJCSIJbXYJJTEsIHIxXG4iIAkJCQlcCisJCTogIj1yIihyZXQpLCAiPXIiKHgpIAkJCQkJXAorCQk6ICIwIihwdHIpCQkJCQkJXAorCQk6ICJyMCIsICJyMSIsICJyMTQiICkKKyNlbmRpZgorCisvKiBDYXJlZnVsOiB3ZSBoYXZlIHRvIGNhc3QgdGhlIHJlc3VsdCB0byB0aGUgdHlwZSBvZiB0aGUgcG9pbnRlciBmb3Igc2lnbgorICAgcmVhc29ucyAqLworLyoqCisgKiBnZXRfdXNlcjogLSBHZXQgYSBzaW1wbGUgdmFyaWFibGUgZnJvbSB1c2VyIHNwYWNlLgorICogQHg6ICAgVmFyaWFibGUgdG8gc3RvcmUgcmVzdWx0LgorICogQHB0cjogU291cmNlIGFkZHJlc3MsIGluIHVzZXIgc3BhY2UuCisgKgorICogQ29udGV4dDogVXNlciBjb250ZXh0IG9ubHkuICBUaGlzIGZ1bmN0aW9uIG1heSBzbGVlcC4KKyAqCisgKiBUaGlzIG1hY3JvIGNvcGllcyBhIHNpbmdsZSBzaW1wbGUgdmFyaWFibGUgZnJvbSB1c2VyIHNwYWNlIHRvIGtlcm5lbAorICogc3BhY2UuICBJdCBzdXBwb3J0cyBzaW1wbGUgdHlwZXMgbGlrZSBjaGFyIGFuZCBpbnQsIGJ1dCBub3QgbGFyZ2VyCisgKiBkYXRhIHR5cGVzIGxpa2Ugc3RydWN0dXJlcyBvciBhcnJheXMuCisgKgorICogQHB0ciBtdXN0IGhhdmUgcG9pbnRlci10by1zaW1wbGUtdmFyaWFibGUgdHlwZSwgYW5kIHRoZSByZXN1bHQgb2YKKyAqIGRlcmVmZXJlbmNpbmcgQHB0ciBtdXN0IGJlIGFzc2lnbmFibGUgdG8gQHggd2l0aG91dCBhIGNhc3QuCisgKgorICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIG9yIC1FRkFVTFQgb24gZXJyb3IuCisgKiBPbiBlcnJvciwgdGhlIHZhcmlhYmxlIEB4IGlzIHNldCB0byB6ZXJvLgorICovCisjZGVmaW5lIGdldF91c2VyKHgscHRyKQkJCQkJCQlcCisoewlpbnQgX19yZXRfZ3UsX192YWxfZ3U7CQkJCQkJXAorCV9fY2hrX3VzZXJfcHRyKHB0cik7CQkJCQkJXAorCXN3aXRjaChzaXplb2YgKCoocHRyKSkpIHsJCQkJCVwKKwljYXNlIDE6ICBfX2dldF91c2VyX3goMSxfX3JldF9ndSxfX3ZhbF9ndSxwdHIpOyBicmVhazsJCVwKKwljYXNlIDI6ICBfX2dldF91c2VyX3goMixfX3JldF9ndSxfX3ZhbF9ndSxwdHIpOyBicmVhazsJCVwKKwljYXNlIDQ6ICBfX2dldF91c2VyX3goNCxfX3JldF9ndSxfX3ZhbF9ndSxwdHIpOyBicmVhazsJCVwKKwlkZWZhdWx0OiBfX2dldF91c2VyX3goWCxfX3JldF9ndSxfX3ZhbF9ndSxwdHIpOyBicmVhazsJCVwKKwl9CQkJCQkJCQlcCisJKHgpID0gKF9fdHlwZW9mX18oKihwdHIpKSlfX3ZhbF9ndTsJCQkJXAorCV9fcmV0X2d1OwkJCQkJCQlcCit9KQorCitleHRlcm4gdm9pZCBfX3B1dF91c2VyX2JhZCh2b2lkKTsKKworLyoqCisgKiBwdXRfdXNlcjogLSBXcml0ZSBhIHNpbXBsZSB2YWx1ZSBpbnRvIHVzZXIgc3BhY2UuCisgKiBAeDogICBWYWx1ZSB0byBjb3B5IHRvIHVzZXIgc3BhY2UuCisgKiBAcHRyOiBEZXN0aW5hdGlvbiBhZGRyZXNzLCBpbiB1c2VyIHNwYWNlLgorICoKKyAqIENvbnRleHQ6IFVzZXIgY29udGV4dCBvbmx5LiAgVGhpcyBmdW5jdGlvbiBtYXkgc2xlZXAuCisgKgorICogVGhpcyBtYWNybyBjb3BpZXMgYSBzaW5nbGUgc2ltcGxlIHZhbHVlIGZyb20ga2VybmVsIHNwYWNlIHRvIHVzZXIKKyAqIHNwYWNlLiAgSXQgc3VwcG9ydHMgc2ltcGxlIHR5cGVzIGxpa2UgY2hhciBhbmQgaW50LCBidXQgbm90IGxhcmdlcgorICogZGF0YSB0eXBlcyBsaWtlIHN0cnVjdHVyZXMgb3IgYXJyYXlzLgorICoKKyAqIEBwdHIgbXVzdCBoYXZlIHBvaW50ZXItdG8tc2ltcGxlLXZhcmlhYmxlIHR5cGUsIGFuZCBAeCBtdXN0IGJlIGFzc2lnbmFibGUKKyAqIHRvIHRoZSByZXN1bHQgb2YgZGVyZWZlcmVuY2luZyBAcHRyLgorICoKKyAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzLCBvciAtRUZBVUxUIG9uIGVycm9yLgorICovCisjZGVmaW5lIHB1dF91c2VyKHgscHRyKQkJCQkJCQlcCisgIF9fcHV0X3VzZXJfY2hlY2soKF9fdHlwZW9mX18oKihwdHIpKSkoeCksKHB0ciksc2l6ZW9mKCoocHRyKSkpCisKKworLyoqCisgKiBfX2dldF91c2VyOiAtIEdldCBhIHNpbXBsZSB2YXJpYWJsZSBmcm9tIHVzZXIgc3BhY2UsIHdpdGggbGVzcyBjaGVja2luZy4KKyAqIEB4OiAgIFZhcmlhYmxlIHRvIHN0b3JlIHJlc3VsdC4KKyAqIEBwdHI6IFNvdXJjZSBhZGRyZXNzLCBpbiB1c2VyIHNwYWNlLgorICoKKyAqIENvbnRleHQ6IFVzZXIgY29udGV4dCBvbmx5LiAgVGhpcyBmdW5jdGlvbiBtYXkgc2xlZXAuCisgKgorICogVGhpcyBtYWNybyBjb3BpZXMgYSBzaW5nbGUgc2ltcGxlIHZhcmlhYmxlIGZyb20gdXNlciBzcGFjZSB0byBrZXJuZWwKKyAqIHNwYWNlLiAgSXQgc3VwcG9ydHMgc2ltcGxlIHR5cGVzIGxpa2UgY2hhciBhbmQgaW50LCBidXQgbm90IGxhcmdlcgorICogZGF0YSB0eXBlcyBsaWtlIHN0cnVjdHVyZXMgb3IgYXJyYXlzLgorICoKKyAqIEBwdHIgbXVzdCBoYXZlIHBvaW50ZXItdG8tc2ltcGxlLXZhcmlhYmxlIHR5cGUsIGFuZCB0aGUgcmVzdWx0IG9mCisgKiBkZXJlZmVyZW5jaW5nIEBwdHIgbXVzdCBiZSBhc3NpZ25hYmxlIHRvIEB4IHdpdGhvdXQgYSBjYXN0LgorICoKKyAqIENhbGxlciBtdXN0IGNoZWNrIHRoZSBwb2ludGVyIHdpdGggYWNjZXNzX29rKCkgYmVmb3JlIGNhbGxpbmcgdGhpcworICogZnVuY3Rpb24uCisgKgorICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIG9yIC1FRkFVTFQgb24gZXJyb3IuCisgKiBPbiBlcnJvciwgdGhlIHZhcmlhYmxlIEB4IGlzIHNldCB0byB6ZXJvLgorICovCisjZGVmaW5lIF9fZ2V0X3VzZXIoeCxwdHIpIFwKKyAgX19nZXRfdXNlcl9ub2NoZWNrKCh4KSwocHRyKSxzaXplb2YoKihwdHIpKSkKKworCisvKioKKyAqIF9fcHV0X3VzZXI6IC0gV3JpdGUgYSBzaW1wbGUgdmFsdWUgaW50byB1c2VyIHNwYWNlLCB3aXRoIGxlc3MgY2hlY2tpbmcuCisgKiBAeDogICBWYWx1ZSB0byBjb3B5IHRvIHVzZXIgc3BhY2UuCisgKiBAcHRyOiBEZXN0aW5hdGlvbiBhZGRyZXNzLCBpbiB1c2VyIHNwYWNlLgorICoKKyAqIENvbnRleHQ6IFVzZXIgY29udGV4dCBvbmx5LiAgVGhpcyBmdW5jdGlvbiBtYXkgc2xlZXAuCisgKgorICogVGhpcyBtYWNybyBjb3BpZXMgYSBzaW5nbGUgc2ltcGxlIHZhbHVlIGZyb20ga2VybmVsIHNwYWNlIHRvIHVzZXIKKyAqIHNwYWNlLiAgSXQgc3VwcG9ydHMgc2ltcGxlIHR5cGVzIGxpa2UgY2hhciBhbmQgaW50LCBidXQgbm90IGxhcmdlcgorICogZGF0YSB0eXBlcyBsaWtlIHN0cnVjdHVyZXMgb3IgYXJyYXlzLgorICoKKyAqIEBwdHIgbXVzdCBoYXZlIHBvaW50ZXItdG8tc2ltcGxlLXZhcmlhYmxlIHR5cGUsIGFuZCBAeCBtdXN0IGJlIGFzc2lnbmFibGUKKyAqIHRvIHRoZSByZXN1bHQgb2YgZGVyZWZlcmVuY2luZyBAcHRyLgorICoKKyAqIENhbGxlciBtdXN0IGNoZWNrIHRoZSBwb2ludGVyIHdpdGggYWNjZXNzX29rKCkgYmVmb3JlIGNhbGxpbmcgdGhpcworICogZnVuY3Rpb24uCisgKgorICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIG9yIC1FRkFVTFQgb24gZXJyb3IuCisgKi8KKyNkZWZpbmUgX19wdXRfdXNlcih4LHB0cikgXAorICBfX3B1dF91c2VyX25vY2hlY2soKF9fdHlwZW9mX18oKihwdHIpKSkoeCksKHB0ciksc2l6ZW9mKCoocHRyKSkpCisKKyNkZWZpbmUgX19wdXRfdXNlcl9ub2NoZWNrKHgscHRyLHNpemUpCQkJCQlcCisoewkJCQkJCQkJCVwKKwlsb25nIF9fcHVfZXJyOwkJCQkJCQlcCisJX19wdXRfdXNlcl9zaXplKCh4KSwocHRyKSwoc2l6ZSksX19wdV9lcnIpOwkJCVwKKwlfX3B1X2VycjsJCQkJCQkJXAorfSkKKworCisjZGVmaW5lIF9fcHV0X3VzZXJfY2hlY2soeCxwdHIsc2l6ZSkJCQkJCVwKKyh7CQkJCQkJCQkJXAorCWxvbmcgX19wdV9lcnIgPSAtRUZBVUxUOwkJCQkJXAorCV9fdHlwZW9mX18oKihwdHIpKSBfX3VzZXIgKl9fcHVfYWRkciA9IChwdHIpOwkJCVwKKwltaWdodF9zbGVlcCgpOwkJCQkJCQlcCisJaWYgKGFjY2Vzc19vayhWRVJJRllfV1JJVEUsX19wdV9hZGRyLHNpemUpKQkJCVwKKwkJX19wdXRfdXNlcl9zaXplKCh4KSxfX3B1X2FkZHIsKHNpemUpLF9fcHVfZXJyKTsJCVwKKwlfX3B1X2VycjsJCQkJCQkJXAorfSkKKworI2lmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX18pCisjZGVmaW5lIF9fcHV0X3VzZXJfdTY0KHgsIGFkZHIsIGVycikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgIiAgICAgICAuZmlsbGluc25cbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgIjE6ICAgICBzdCAlTDEsQCUyXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICIgICAgICAgLmZpbGxpbnNuXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICIyOiAgICAgc3QgJUgxLEAoNCwlMilcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAiICAgICAgIC5maWxsaW5zblxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAiMzpcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAiICAgICAgIC5iYWxpZ24gNFxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAiNDogICAgIGxkaSAlMCwlM1xuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAiICAgICAgIHNldGggcjE0LCNoaWdoKDNiKVxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAiICAgICAgIG9yMyByMTQscjE0LCNsb3coM2IpXG4iICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAiICAgICAgIGptcCByMTRcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAiLnByZXZpb3VzXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAiICAgICAgIC5iYWxpZ24gNFxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAiICAgICAgIC5sb25nIDFiLDRiXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAiICAgICAgIC5sb25nIDJiLDRiXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAiLnByZXZpb3VzIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9ciIoZXJyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJyIih4KSwgInIiKGFkZHIpLCAiaSIoLUVGQVVMVCksICIwIihlcnIpCQlcCisgICAgICAgICAgICAgICAgOiAicjE0IiwgIm1lbW9yeSIpCisKKyNlbGlmIGRlZmluZWQoX19CSUdfRU5ESUFOX18pCisjZGVmaW5lIF9fcHV0X3VzZXJfdTY0KHgsIGFkZHIsIGVycikJCQkJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQlcCisJCSIJLmZpbGxpbnNuXG4iCQkJCQlcCisJCSIxOglzdCAlSDEsQCUyXG4iCQkJCQlcCisJCSIJLmZpbGxpbnNuXG4iCQkJCQlcCisJCSIyOglzdCAlTDEsQCg0LCUyKVxuIgkJCQlcCisJCSIJLmZpbGxpbnNuXG4iCQkJCQlcCisJCSIzOlxuIgkJCQkJCQlcCisJCSIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iCQkJCVwKKwkJIgkuYmFsaWduIDRcbiIJCQkJCVwKKwkJIjQ6CWxkaSAlMCwlM1xuIgkJCQkJXAorCQkiCXNldGggcjE0LCNoaWdoKDNiKVxuIgkJCQlcCisJCSIJb3IzIHIxNCxyMTQsI2xvdygzYilcbiIJCQkJXAorCQkiCWptcCByMTRcbiIJCQkJCVwKKwkJIi5wcmV2aW91c1xuIgkJCQkJCVwKKwkJIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIJCQkJXAorCQkiCS5iYWxpZ24gNFxuIgkJCQkJXAorCQkiCS5sb25nIDFiLDRiXG4iCQkJCQlcCisJCSIJLmxvbmcgMmIsNGJcbiIJCQkJCVwKKwkJIi5wcmV2aW91cyIJCQkJCQlcCisJCTogIj1yIihlcnIpCQkJCQkJXAorCQk6ICJyIih4KSwgInIiKGFkZHIpLCAiaSIoLUVGQVVMVCksICIwIihlcnIpCQlcCisJCTogInIxNCIsICJtZW1vcnkiKQorI2Vsc2UKKyNlcnJvciBubyBlbmRpYW4gZGVmaW5lZAorI2VuZGlmCisKKyNkZWZpbmUgX19wdXRfdXNlcl9zaXplKHgscHRyLHNpemUscmV0dmFsKQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCXJldHZhbCA9IDA7CQkJCQkJCVwKKwlfX2Noa191c2VyX3B0cihwdHIpOwkJCQkJCVwKKwlzd2l0Y2ggKHNpemUpIHsJCQkJCQkJXAorCSAgY2FzZSAxOiBfX3B1dF91c2VyX2FzbSh4LHB0cixyZXR2YWwsImIiKTsgYnJlYWs7CQlcCisJICBjYXNlIDI6IF9fcHV0X3VzZXJfYXNtKHgscHRyLHJldHZhbCwiaCIpOyBicmVhazsJCVwKKwkgIGNhc2UgNDogX19wdXRfdXNlcl9hc20oeCxwdHIscmV0dmFsLCIiKTsgYnJlYWs7CQlcCisJICBjYXNlIDg6IF9fcHV0X3VzZXJfdTY0KChfX3R5cGVvZl9fKCpwdHIpKSh4KSxwdHIscmV0dmFsKTsgYnJlYWs7XAorCSAgZGVmYXVsdDogX19wdXRfdXNlcl9iYWQoKTsJCQkJCVwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCitzdHJ1Y3QgX19sYXJnZV9zdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIGJ1ZlsxMDBdOyB9OworI2RlZmluZSBfX20oeCkgKCooc3RydWN0IF9fbGFyZ2Vfc3RydWN0ICopKHgpKQorCisvKgorICogVGVsbCBnY2Mgd2UgcmVhZCBmcm9tIG1lbW9yeSBpbnN0ZWFkIG9mIHdyaXRpbmc6IHRoaXMgaXMgYmVjYXVzZQorICogd2UgZG8gbm90IHdyaXRlIHRvIGFueSBtZW1vcnkgZ2NjIGtub3dzIGFib3V0LCBzbyB0aGVyZSBhcmUgbm8KKyAqIGFsaWFzaW5nIGlzc3Vlcy4KKyAqLworI2RlZmluZSBfX3B1dF91c2VyX2FzbSh4LCBhZGRyLCBlcnIsIGl0eXBlKQkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAorCQkiCS5maWxsaW5zblxuIgkJCQkJXAorCQkiMToJc3QiaXR5cGUiICUxLEAlMlxuIgkJCQlcCisJCSIJLmZpbGxpbnNuXG4iCQkJCQlcCisJCSIyOlxuIgkJCQkJCQlcCisJCSIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iCQkJCVwKKwkJIgkuYmFsaWduIDRcbiIJCQkJCVwKKwkJIjM6CWxkaSAlMCwlM1xuIgkJCQkJXAorCQkiCXNldGggcjE0LCNoaWdoKDJiKVxuIgkJCQlcCisJCSIJb3IzIHIxNCxyMTQsI2xvdygyYilcbiIJCQkJXAorCQkiCWptcCByMTRcbiIJCQkJCVwKKwkJIi5wcmV2aW91c1xuIgkJCQkJCVwKKwkJIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIJCQkJXAorCQkiCS5iYWxpZ24gNFxuIgkJCQkJXAorCQkiCS5sb25nIDFiLDNiXG4iCQkJCQlcCisJCSIucHJldmlvdXMiCQkJCQkJXAorCQk6ICI9ciIoZXJyKQkJCQkJCVwKKwkJOiAiciIoeCksICJyIihhZGRyKSwgImkiKC1FRkFVTFQpLCAiMCIoZXJyKQkJXAorCQk6ICJyMTQiLCAibWVtb3J5IikKKworI2RlZmluZSBfX2dldF91c2VyX25vY2hlY2soeCxwdHIsc2l6ZSkJCQkJCVwKKyh7CQkJCQkJCQkJXAorCWxvbmcgX19ndV9lcnIsIF9fZ3VfdmFsOwkJCQkJXAorCV9fZ2V0X3VzZXJfc2l6ZShfX2d1X3ZhbCwocHRyKSwoc2l6ZSksX19ndV9lcnIpOwkJXAorCSh4KSA9IChfX3R5cGVvZl9fKCoocHRyKSkpX19ndV92YWw7CQkJCVwKKwlfX2d1X2VycjsJCQkJCQkJXAorfSkKKworZXh0ZXJuIGxvbmcgX19nZXRfdXNlcl9iYWQodm9pZCk7CisKKyNkZWZpbmUgX19nZXRfdXNlcl9zaXplKHgscHRyLHNpemUscmV0dmFsKQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCXJldHZhbCA9IDA7CQkJCQkJCVwKKwlfX2Noa191c2VyX3B0cihwdHIpOwkJCQkJCVwKKwlzd2l0Y2ggKHNpemUpIHsJCQkJCQkJXAorCSAgY2FzZSAxOiBfX2dldF91c2VyX2FzbSh4LHB0cixyZXR2YWwsInViIik7IGJyZWFrOwkJXAorCSAgY2FzZSAyOiBfX2dldF91c2VyX2FzbSh4LHB0cixyZXR2YWwsInVoIik7IGJyZWFrOwkJXAorCSAgY2FzZSA0OiBfX2dldF91c2VyX2FzbSh4LHB0cixyZXR2YWwsIiIpOyBicmVhazsJCVwKKwkgIGRlZmF1bHQ6ICh4KSA9IF9fZ2V0X3VzZXJfYmFkKCk7CQkJCVwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIF9fZ2V0X3VzZXJfYXNtKHgsIGFkZHIsIGVyciwgaXR5cGUpCQkJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQlcCisJCSIJLmZpbGxpbnNuXG4iCQkJCQlcCisJCSIxOglsZCJpdHlwZSIgJTEsQCUyXG4iCQkJCVwKKwkJIgkuZmlsbGluc25cbiIJCQkJCVwKKwkJIjI6XG4iCQkJCQkJCVwKKwkJIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIJCQkJXAorCQkiCS5iYWxpZ24gNFxuIgkJCQkJXAorCQkiMzoJbGRpICUwLCUzXG4iCQkJCQlcCisJCSIJc2V0aCByMTQsI2hpZ2goMmIpXG4iCQkJCVwKKwkJIglvcjMgcjE0LHIxNCwjbG93KDJiKVxuIgkJCQlcCisJCSIJam1wIHIxNFxuIgkJCQkJXAorCQkiLnByZXZpb3VzXG4iCQkJCQkJXAorCQkiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgkJCQlcCisJCSIJLmJhbGlnbiA0XG4iCQkJCQlcCisJCSIJLmxvbmcgMWIsM2JcbiIJCQkJCVwKKwkJIi5wcmV2aW91cyIJCQkJCQlcCisJCTogIj1yIihlcnIpLCAiPSZyIih4KQkJCQkJXAorCQk6ICJyIihhZGRyKSwgImkiKC1FRkFVTFQpLCAiMCIoZXJyKQkJCVwKKwkJOiAicjE0IiwgIm1lbW9yeSIpCisKKy8qCisgKiBIZXJlIHdlIHNwZWNpYWwtY2FzZSAxLCAyIGFuZCA0LWJ5dGUgY29weV8qX3VzZXIgaW52b2NhdGlvbnMuICBPbiBhIGZhdWx0CisgKiB3ZSByZXR1cm4gdGhlIGluaXRpYWwgcmVxdWVzdCBzaXplICgxLCAyIG9yIDQpLCBhcyBjb3B5XypfdXNlciBzaG91bGQgZG8uCisgKiBJZiBhIHN0b3JlIGNyb3NzZXMgYSBwYWdlIGJvdW5kYXJ5IGFuZCBnZXRzIGEgZmF1bHQsIHRoZSBtMzJyIHdpbGwgbm90IHdyaXRlCisgKiBhbnl0aGluZywgc28gdGhpcyBpcyBhY2N1cmF0ZS4KKyAqLworCisKKy8qCisgKiBDb3B5IFRvL0Zyb20gVXNlcnNwYWNlCisgKi8KKworLyogR2VuZXJpYyBhcmJpdHJhcnkgc2l6ZWQgY29weS4gICovCisvKiBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBOT1QgY29waWVkLiAgKi8KKyNkZWZpbmUgX19jb3B5X3VzZXIodG8sZnJvbSxzaXplKQkJCQkJXAorZG8gewkJCQkJCQkJCVwKKwl1bnNpZ25lZCBsb25nIF9fZHN0LCBfX3NyYywgX19jOwkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJCQkJCVwKKwkJIgltdglyMTQsICUwXG4iCQkJCVwKKwkJIglvcglyMTQsICUxXG4iCQkJCVwKKwkJIgliZXEJJTAsICUxLCA5ZlxuIgkJCQlcCisJCSIJYmVxegklMiwgOWZcbiIJCQkJXAorCQkiCWFuZDMJcjE0LCByMTQsICMzXG4iCQkJCVwKKwkJIglibmV6CXIxNCwgMmZcbiIJCQkJXAorCQkiCWFuZDMJJTIsICUyLCAjM1xuIgkJCQlcCisJCSIJYmVxegklMywgMmZcbiIJCQkJXAorCQkiCWFkZGkJJTAsICMtNAkJOyB3b3JkX2NvcHkgXG4iCQlcCisJCSIJLmZpbGxpbnNuXG4iCQkJCQlcCisJCSIwOglsZAlyMTQsIEAlMStcbiIJCQkJXAorCQkiCWFkZGkJJTMsICMtMVxuIgkJCQlcCisJCSIJLmZpbGxpbnNuXG4iCQkJCQlcCisJCSIxOglzdAlyMTQsIEArJTBcbiIJCQkJXAorCQkiCWJuZXoJJTMsIDBiXG4iCQkJCVwKKwkJIgliZXF6CSUyLCA5ZlxuIgkJCQlcCisJCSIJYWRkaQklMCwgIzRcbiIJCQkJXAorCQkiCS5maWxsaW5zblxuIgkJCQkJXAorCQkiMjoJbGRiCXIxNCwgQCUxCTsgYnl0ZV9jb3B5IFxuIgkJXAorCQkiCS5maWxsaW5zblxuIgkJCQkJXAorCQkiMzoJc3RiCXIxNCwgQCUwXG4iCQkJCVwKKwkJIglhZGRpCSUxLCAjMVxuIgkJCQlcCisJCSIJYWRkaQklMiwgIy0xXG4iCQkJCVwKKwkJIglhZGRpCSUwLCAjMVxuIgkJCQlcCisJCSIJYm5legklMiwgMmJcbiIJCQkJXAorCQkiCS5maWxsaW5zblxuIgkJCQkJXAorCQkiOTpcbiIJCQkJCQkJXAorCQkiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIgkJCQlcCisJCSIJLmJhbGlnbiA0XG4iCQkJCQlcCisJCSI1OglhZGRpCSUzLCAjMVxuIgkJCQlcCisJCSIJYWRkaQklMSwgIy00XG4iCQkJCVwKKwkJIgkuZmlsbGluc25cbiIJCQkJCVwKKwkJIjY6CXNsbGkJJTMsICMyXG4iCQkJCVwKKwkJIglhZGQJJTIsICUzXG4iCQkJCVwKKwkJIglhZGRpCSUwLCAjNFxuIgkJCQlcCisJCSIJLmZpbGxpbnNuXG4iCQkJCQlcCisJCSI3OglzZXRoCXIxNCwgI2hpZ2goOWIpXG4iCQkJXAorCQkiCW9yMwlyMTQsIHIxNCwgI2xvdyg5YilcbiIJCQlcCisJCSIJam1wCXIxNFxuIgkJCQkJXAorCQkiLnByZXZpb3VzXG4iCQkJCQkJXAorCQkiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgkJCQlcCisJCSIJLmJhbGlnbiA0XG4iCQkJCQlcCisJCSIJLmxvbmcgMGIsNmJcbiIJCQkJCVwKKwkJIgkubG9uZyAxYiw1YlxuIgkJCQkJXAorCQkiCS5sb25nIDJiLDliXG4iCQkJCQlcCisJCSIJLmxvbmcgM2IsOWJcbiIJCQkJCVwKKwkJIi5wcmV2aW91c1xuIgkJCQkJCVwKKwkJOiAiPSZyIihfX2RzdCksICI9JnIiKF9fc3JjKSwgIj0mciIoc2l6ZSksICI9JnIiKF9fYykJXAorCQk6ICIwIih0byksICIxIihmcm9tKSwgIjIiKHNpemUpLCAiMyIoc2l6ZSAvIDQpCQlcCisJCTogInIxNCIsICJtZW1vcnkiKTsJCQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgX19jb3B5X3VzZXJfemVyb2luZyh0byxmcm9tLHNpemUpCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJdW5zaWduZWQgbG9uZyBfX2RzdCwgX19zcmMsIF9fYzsJCQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fICgJCQkJCQlcCisJCSIJbXYJcjE0LCAlMFxuIgkJCQlcCisJCSIJb3IJcjE0LCAlMVxuIgkJCQlcCisJCSIJYmVxCSUwLCAlMSwgOWZcbiIJCQkJXAorCQkiCWJlcXoJJTIsIDlmXG4iCQkJCVwKKwkJIglhbmQzCXIxNCwgcjE0LCAjM1xuIgkJCQlcCisJCSIJYm5leglyMTQsIDJmXG4iCQkJCVwKKwkJIglhbmQzCSUyLCAlMiwgIzNcbiIJCQkJXAorCQkiCWJlcXoJJTMsIDJmXG4iCQkJCVwKKwkJIglhZGRpCSUwLCAjLTQJCTsgd29yZF9jb3B5IFxuIgkJXAorCQkiCS5maWxsaW5zblxuIgkJCQkJXAorCQkiMDoJbGQJcjE0LCBAJTErXG4iCQkJCVwKKwkJIglhZGRpCSUzLCAjLTFcbiIJCQkJXAorCQkiCS5maWxsaW5zblxuIgkJCQkJXAorCQkiMToJc3QJcjE0LCBAKyUwXG4iCQkJCVwKKwkJIglibmV6CSUzLCAwYlxuIgkJCQlcCisJCSIJYmVxegklMiwgOWZcbiIJCQkJXAorCQkiCWFkZGkJJTAsICM0XG4iCQkJCVwKKwkJIgkuZmlsbGluc25cbiIJCQkJCVwKKwkJIjI6CWxkYglyMTQsIEAlMQk7IGJ5dGVfY29weSBcbiIJCVwKKwkJIgkuZmlsbGluc25cbiIJCQkJCVwKKwkJIjM6CXN0YglyMTQsIEAlMFxuIgkJCQlcCisJCSIJYWRkaQklMSwgIzFcbiIJCQkJXAorCQkiCWFkZGkJJTIsICMtMVxuIgkJCQlcCisJCSIJYWRkaQklMCwgIzFcbiIJCQkJXAorCQkiCWJuZXoJJTIsIDJiXG4iCQkJCVwKKwkJIgkuZmlsbGluc25cbiIJCQkJCVwKKwkJIjk6XG4iCQkJCQkJCVwKKwkJIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIJCQkJXAorCQkiCS5iYWxpZ24gNFxuIgkJCQkJXAorCQkiNToJYWRkaQklMywgIzFcbiIJCQkJXAorCQkiCWFkZGkJJTEsICMtNFxuIgkJCQlcCisJCSIJLmZpbGxpbnNuXG4iCQkJCQlcCisJCSI2OglzbGxpCSUzLCAjMlxuIgkJCQlcCisJCSIJYWRkCSUyLCAlM1xuIgkJCQlcCisJCSIJYWRkaQklMCwgIzRcbiIJCQkJXAorCQkiCS5maWxsaW5zblxuIgkJCQkJXAorCQkiNzoJbGRpCXIxNCwgIzAJCTsgc3RvcmUgemVybyBcbiIJXAorCQkiCS5maWxsaW5zblxuIgkJCQkJXAorCQkiODoJYWRkaQklMiwgIy0xXG4iCQkJCVwKKwkJIglzdGIJcjE0LCBAJTAJOyBBQ0U/IFxuIgkJXAorCQkiCWFkZGkJJTAsICMxXG4iCQkJCVwKKwkJIglibmV6CSUyLCA4YlxuIgkJCQlcCisJCSIJc2V0aAlyMTQsICNoaWdoKDliKVxuIgkJCVwKKwkJIglvcjMJcjE0LCByMTQsICNsb3coOWIpXG4iCQkJXAorCQkiCWptcAlyMTRcbiIJCQkJCVwKKwkJIi5wcmV2aW91c1xuIgkJCQkJCVwKKwkJIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIJCQkJXAorCQkiCS5iYWxpZ24gNFxuIgkJCQkJXAorCQkiCS5sb25nIDBiLDZiXG4iCQkJCQlcCisJCSIJLmxvbmcgMWIsNWJcbiIJCQkJCVwKKwkJIgkubG9uZyAyYiw3YlxuIgkJCQkJXAorCQkiCS5sb25nIDNiLDdiXG4iCQkJCQlcCisJCSIucHJldmlvdXNcbiIJCQkJCQlcCisJCTogIj0mciIoX19kc3QpLCAiPSZyIihfX3NyYyksICI9JnIiKHNpemUpLCAiPSZyIihfX2MpCVwKKwkJOiAiMCIodG8pLCAiMSIoZnJvbSksICIyIihzaXplKSwgIjMiKHNpemUgLyA0KQkJXAorCQk6ICJyMTQiLCAibWVtb3J5Iik7CQkJCQlcCit9IHdoaWxlICgwKQorCisKKy8qIFdlIGxldCB0aGUgX18gdmVyc2lvbnMgb2YgY29weV9mcm9tL3RvX3VzZXIgaW5saW5lLCBiZWNhdXNlIHRoZXkncmUgb2Z0ZW4KKyAqIHVzZWQgaW4gZmFzdCBwYXRocyBhbmQgaGF2ZSBvbmx5IGEgc21hbGwgc3BhY2Ugb3ZlcmhlYWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX2dlbmVyaWNfY29weV9mcm9tX3VzZXJfbm9jaGVjayh2b2lkICp0bywKKwljb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKQoreworCV9fY29weV91c2VyX3plcm9pbmcodG8sZnJvbSxuKTsKKwlyZXR1cm4gbjsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fZ2VuZXJpY19jb3B5X3RvX3VzZXJfbm9jaGVjayh2b2lkIF9fdXNlciAqdG8sCisJY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKQoreworCV9fY29weV91c2VyKHRvLGZyb20sbik7CisJcmV0dXJuIG47Cit9CisKK3Vuc2lnbmVkIGxvbmcgX19nZW5lcmljX2NvcHlfdG9fdXNlcih2b2lkICosIGNvbnN0IHZvaWQgKiwgdW5zaWduZWQgbG9uZyk7Cit1bnNpZ25lZCBsb25nIF9fZ2VuZXJpY19jb3B5X2Zyb21fdXNlcih2b2lkICosIGNvbnN0IHZvaWQgKiwgdW5zaWduZWQgbG9uZyk7CisKKy8qKgorICogX19jb3B5X3RvX3VzZXI6IC0gQ29weSBhIGJsb2NrIG9mIGRhdGEgaW50byB1c2VyIHNwYWNlLCB3aXRoIGxlc3MgY2hlY2tpbmcuCisgKiBAdG86ICAgRGVzdGluYXRpb24gYWRkcmVzcywgaW4gdXNlciBzcGFjZS4KKyAqIEBmcm9tOiBTb3VyY2UgYWRkcmVzcywgaW4ga2VybmVsIHNwYWNlLgorICogQG46ICAgIE51bWJlciBvZiBieXRlcyB0byBjb3B5LgorICoKKyAqIENvbnRleHQ6IFVzZXIgY29udGV4dCBvbmx5LiAgVGhpcyBmdW5jdGlvbiBtYXkgc2xlZXAuCisgKgorICogQ29weSBkYXRhIGZyb20ga2VybmVsIHNwYWNlIHRvIHVzZXIgc3BhY2UuICBDYWxsZXIgbXVzdCBjaGVjaworICogdGhlIHNwZWNpZmllZCBibG9jayB3aXRoIGFjY2Vzc19vaygpIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisgKgorICogUmV0dXJucyBudW1iZXIgb2YgYnl0ZXMgdGhhdCBjb3VsZCBub3QgYmUgY29waWVkLgorICogT24gc3VjY2VzcywgdGhpcyB3aWxsIGJlIHplcm8uCisgKi8KKyNkZWZpbmUgX19jb3B5X3RvX3VzZXIodG8sZnJvbSxuKQkJCVwKKwlfX2dlbmVyaWNfY29weV90b191c2VyX25vY2hlY2soKHRvKSwoZnJvbSksKG4pKQorCisjZGVmaW5lIF9fY29weV90b191c2VyX2luYXRvbWljIF9fY29weV90b191c2VyCisjZGVmaW5lIF9fY29weV9mcm9tX3VzZXJfaW5hdG9taWMgX19jb3B5X2Zyb21fdXNlcgorCisvKioKKyAqIGNvcHlfdG9fdXNlcjogLSBDb3B5IGEgYmxvY2sgb2YgZGF0YSBpbnRvIHVzZXIgc3BhY2UuCisgKiBAdG86ICAgRGVzdGluYXRpb24gYWRkcmVzcywgaW4gdXNlciBzcGFjZS4KKyAqIEBmcm9tOiBTb3VyY2UgYWRkcmVzcywgaW4ga2VybmVsIHNwYWNlLgorICogQG46ICAgIE51bWJlciBvZiBieXRlcyB0byBjb3B5LgorICoKKyAqIENvbnRleHQ6IFVzZXIgY29udGV4dCBvbmx5LiAgVGhpcyBmdW5jdGlvbiBtYXkgc2xlZXAuCisgKgorICogQ29weSBkYXRhIGZyb20ga2VybmVsIHNwYWNlIHRvIHVzZXIgc3BhY2UuCisgKgorICogUmV0dXJucyBudW1iZXIgb2YgYnl0ZXMgdGhhdCBjb3VsZCBub3QgYmUgY29waWVkLgorICogT24gc3VjY2VzcywgdGhpcyB3aWxsIGJlIHplcm8uCisgKi8KKyNkZWZpbmUgY29weV90b191c2VyKHRvLGZyb20sbikJCQkJXAorKHsJCQkJCQkJXAorCW1pZ2h0X3NsZWVwKCk7CQkJCQlcCisJX19nZW5lcmljX2NvcHlfdG9fdXNlcigodG8pLChmcm9tKSwobikpOwlcCit9KQorCisvKioKKyAqIF9fY29weV9mcm9tX3VzZXI6IC0gQ29weSBhIGJsb2NrIG9mIGRhdGEgZnJvbSB1c2VyIHNwYWNlLCB3aXRoIGxlc3MgY2hlY2tpbmcuICogQHRvOiAgIERlc3RpbmF0aW9uIGFkZHJlc3MsIGluIGtlcm5lbCBzcGFjZS4KKyAqIEBmcm9tOiBTb3VyY2UgYWRkcmVzcywgaW4gdXNlciBzcGFjZS4KKyAqIEBuOiAgICBOdW1iZXIgb2YgYnl0ZXMgdG8gY29weS4KKyAqCisgKiBDb250ZXh0OiBVc2VyIGNvbnRleHQgb25seS4gIFRoaXMgZnVuY3Rpb24gbWF5IHNsZWVwLgorICoKKyAqIENvcHkgZGF0YSBmcm9tIHVzZXIgc3BhY2UgdG8ga2VybmVsIHNwYWNlLiAgQ2FsbGVyIG11c3QgY2hlY2sKKyAqIHRoZSBzcGVjaWZpZWQgYmxvY2sgd2l0aCBhY2Nlc3Nfb2soKSBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorICoKKyAqIFJldHVybnMgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgY291bGQgbm90IGJlIGNvcGllZC4KKyAqIE9uIHN1Y2Nlc3MsIHRoaXMgd2lsbCBiZSB6ZXJvLgorICoKKyAqIElmIHNvbWUgZGF0YSBjb3VsZCBub3QgYmUgY29waWVkLCB0aGlzIGZ1bmN0aW9uIHdpbGwgcGFkIHRoZSBjb3BpZWQKKyAqIGRhdGEgdG8gdGhlIHJlcXVlc3RlZCBzaXplIHVzaW5nIHplcm8gYnl0ZXMuCisgKi8KKyNkZWZpbmUgX19jb3B5X2Zyb21fdXNlcih0byxmcm9tLG4pCQkJXAorCV9fZ2VuZXJpY19jb3B5X2Zyb21fdXNlcl9ub2NoZWNrKCh0byksKGZyb20pLChuKSkKKworLyoqCisgKiBjb3B5X2Zyb21fdXNlcjogLSBDb3B5IGEgYmxvY2sgb2YgZGF0YSBmcm9tIHVzZXIgc3BhY2UuCisgKiBAdG86ICAgRGVzdGluYXRpb24gYWRkcmVzcywgaW4ga2VybmVsIHNwYWNlLgorICogQGZyb206IFNvdXJjZSBhZGRyZXNzLCBpbiB1c2VyIHNwYWNlLgorICogQG46ICAgIE51bWJlciBvZiBieXRlcyB0byBjb3B5LgorICoKKyAqIENvbnRleHQ6IFVzZXIgY29udGV4dCBvbmx5LiAgVGhpcyBmdW5jdGlvbiBtYXkgc2xlZXAuCisgKgorICogQ29weSBkYXRhIGZyb20gdXNlciBzcGFjZSB0byBrZXJuZWwgc3BhY2UuCisgKgorICogUmV0dXJucyBudW1iZXIgb2YgYnl0ZXMgdGhhdCBjb3VsZCBub3QgYmUgY29waWVkLgorICogT24gc3VjY2VzcywgdGhpcyB3aWxsIGJlIHplcm8uCisgKgorICogSWYgc29tZSBkYXRhIGNvdWxkIG5vdCBiZSBjb3BpZWQsIHRoaXMgZnVuY3Rpb24gd2lsbCBwYWQgdGhlIGNvcGllZAorICogZGF0YSB0byB0aGUgcmVxdWVzdGVkIHNpemUgdXNpbmcgemVybyBieXRlcy4KKyAqLworI2RlZmluZSBjb3B5X2Zyb21fdXNlcih0byxmcm9tLG4pCQkJXAorKHsJCQkJCQkJXAorCW1pZ2h0X3NsZWVwKCk7CQkJCQlcCitfX2dlbmVyaWNfY29weV9mcm9tX3VzZXIoKHRvKSwoZnJvbSksKG4pKTsJXAorfSkKKworbG9uZyBfX211c3RfY2hlY2sgc3RybmNweV9mcm9tX3VzZXIoY2hhciAqZHN0LCBjb25zdCBjaGFyIF9fdXNlciAqc3JjLAorCQkJCWxvbmcgY291bnQpOworbG9uZyBfX211c3RfY2hlY2sgX19zdHJuY3B5X2Zyb21fdXNlcihjaGFyICpkc3QsCisJCQkJY29uc3QgY2hhciBfX3VzZXIgKnNyYywgbG9uZyBjb3VudCk7CisKKy8qKgorICogX19jbGVhcl91c2VyOiAtIFplcm8gYSBibG9jayBvZiBtZW1vcnkgaW4gdXNlciBzcGFjZSwgd2l0aCBsZXNzIGNoZWNraW5nLgorICogQHRvOiAgIERlc3RpbmF0aW9uIGFkZHJlc3MsIGluIHVzZXIgc3BhY2UuCisgKiBAbjogICAgTnVtYmVyIG9mIGJ5dGVzIHRvIHplcm8uCisgKgorICogWmVybyBhIGJsb2NrIG9mIG1lbW9yeSBpbiB1c2VyIHNwYWNlLiAgQ2FsbGVyIG11c3QgY2hlY2sKKyAqIHRoZSBzcGVjaWZpZWQgYmxvY2sgd2l0aCBhY2Nlc3Nfb2soKSBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorICoKKyAqIFJldHVybnMgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgY291bGQgbm90IGJlIGNsZWFyZWQuCisgKiBPbiBzdWNjZXNzLCB0aGlzIHdpbGwgYmUgemVyby4KKyAqLwordW5zaWduZWQgbG9uZyBfX2NsZWFyX3VzZXIodm9pZCBfX3VzZXIgKm1lbSwgdW5zaWduZWQgbG9uZyBsZW4pOworCisvKioKKyAqIGNsZWFyX3VzZXI6IC0gWmVybyBhIGJsb2NrIG9mIG1lbW9yeSBpbiB1c2VyIHNwYWNlLgorICogQHRvOiAgIERlc3RpbmF0aW9uIGFkZHJlc3MsIGluIHVzZXIgc3BhY2UuCisgKiBAbjogICAgTnVtYmVyIG9mIGJ5dGVzIHRvIHplcm8uCisgKgorICogWmVybyBhIGJsb2NrIG9mIG1lbW9yeSBpbiB1c2VyIHNwYWNlLiAgQ2FsbGVyIG11c3QgY2hlY2sKKyAqIHRoZSBzcGVjaWZpZWQgYmxvY2sgd2l0aCBhY2Nlc3Nfb2soKSBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorICoKKyAqIFJldHVybnMgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgY291bGQgbm90IGJlIGNsZWFyZWQuCisgKiBPbiBzdWNjZXNzLCB0aGlzIHdpbGwgYmUgemVyby4KKyAqLwordW5zaWduZWQgbG9uZyBjbGVhcl91c2VyKHZvaWQgX191c2VyICptZW0sIHVuc2lnbmVkIGxvbmcgbGVuKTsKKworLyoqCisgKiBzdHJsZW5fdXNlcjogLSBHZXQgdGhlIHNpemUgb2YgYSBzdHJpbmcgaW4gdXNlciBzcGFjZS4KKyAqIEBzdHI6IFRoZSBzdHJpbmcgdG8gbWVhc3VyZS4KKyAqCisgKiBDb250ZXh0OiBVc2VyIGNvbnRleHQgb25seS4gIFRoaXMgZnVuY3Rpb24gbWF5IHNsZWVwLgorICoKKyAqIEdldCB0aGUgc2l6ZSBvZiBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZyBpbiB1c2VyIHNwYWNlLgorICoKKyAqIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIHN0cmluZyBJTkNMVURJTkcgdGhlIHRlcm1pbmF0aW5nIE5VTC4KKyAqIE9uIGV4Y2VwdGlvbiwgcmV0dXJucyAwLgorICoKKyAqIElmIHRoZXJlIGlzIGEgbGltaXQgb24gdGhlIGxlbmd0aCBvZiBhIHZhbGlkIHN0cmluZywgeW91IG1heSB3aXNoIHRvCisgKiBjb25zaWRlciB1c2luZyBzdHJubGVuX3VzZXIoKSBpbnN0ZWFkLgorICovCisjZGVmaW5lIHN0cmxlbl91c2VyKHN0cikgc3Rybmxlbl91c2VyKHN0ciwgfjBVTCA+PiAxKQorbG9uZyBzdHJubGVuX3VzZXIoY29uc3QgY2hhciBfX3VzZXIgKnN0ciwgbG9uZyBuKTsKKworI2VuZGlmIC8qIF9BU01fTTMyUl9VQUNDRVNTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvdWNvbnRleHQuaCBiL2luY2x1ZGUvYXNtLW0zMnIvdWNvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGU3MDlhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTMyci91Y29udGV4dC5oCkBAIC0wLDAgKzEsMTQgQEAKKyNpZm5kZWYgX0FTTV9NMzJSX1VDT05URVhUX0gKKyNkZWZpbmUgX0FTTV9NMzJSX1VDT05URVhUX0gKKworLyogb3JpZyA6IGkzODYgMi40LjE4ICovCisKK3N0cnVjdCB1Y29udGV4dCB7CisJdW5zaWduZWQgbG9uZwkgIHVjX2ZsYWdzOworCXN0cnVjdCB1Y29udGV4dCAgKnVjX2xpbms7CisJc3RhY2tfdAkJICB1Y19zdGFjazsKKwlzdHJ1Y3Qgc2lnY29udGV4dCB1Y19tY29udGV4dDsKKwlzaWdzZXRfdAkgIHVjX3NpZ21hc2s7CS8qIG1hc2sgbGFzdCBmb3IgZXh0ZW5zaWJpbGl0eSAqLworfTsKKworI2VuZGlmIC8qIF9BU01fTTMyUl9VQ09OVEVYVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL3VuYWxpZ25lZC5oIGIvaW5jbHVkZS9hc20tbTMyci91bmFsaWduZWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWVmOWFjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTMyci91bmFsaWduZWQuaApAQCAtMCwwICsxLDI1IEBACisjaWZuZGVmIF9BU01fTTMyUl9VTkFMSUdORURfSAorI2RlZmluZSBfQVNNX00zMlJfVU5BTElHTkVEX0gKKworLyogJElkJCAqLworCisvKiBvcmlnIDogZ2VuZXJpYyAyLjQuMTggKi8KKworLyoKKyAqIEZvciB0aGUgYmVuZWZpdCBvZiB0aG9zZSB3aG8gYXJlIHRyeWluZyB0byBwb3J0IExpbnV4IHRvIGFub3RoZXIKKyAqIGFyY2hpdGVjdHVyZSwgaGVyZSBhcmUgc29tZSBDLWxhbmd1YWdlIGVxdWl2YWxlbnRzLgorICovCisKKyNpbmNsdWRlIDxhc20vc3RyaW5nLmg+CisKKworI2RlZmluZSBnZXRfdW5hbGlnbmVkKHB0cikgXAorICAoeyBfX3R5cGVvZl9fKCoocHRyKSkgX190bXA7IG1lbW1vdmUoJl9fdG1wLCAocHRyKSwgc2l6ZW9mKCoocHRyKSkpOyBfX3RtcDsgfSkKKworI2RlZmluZSBwdXRfdW5hbGlnbmVkKHZhbCwgcHRyKQkJCQlcCisgICh7IF9fdHlwZW9mX18oKihwdHIpKSBfX3RtcCA9ICh2YWwpOwkJCVwKKyAgICAgbWVtbW92ZSgocHRyKSwgJl9fdG1wLCBzaXplb2YoKihwdHIpKSk7CQlcCisgICAgICh2b2lkKTA7IH0pCisKKworI2VuZGlmICAvKiBfQVNNX00zMlJfVU5BTElHTkVEX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1tMzJyL3VuaXN0ZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1NTJkOGYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL3VuaXN0ZC5oCkBAIC0wLDAgKzEsNDc0IEBACisjaWZuZGVmIF9BU01fTTMyUl9VTklTVERfSAorI2RlZmluZSBfQVNNX00zMlJfVU5JU1REX0gKKworLyogJElkJCAqLworCisjaW5jbHVkZSA8YXNtL3N5c2NhbGwuaD4JLyogU1lTQ0FMTF8qICovCisKKy8qCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHN5c3RlbSBjYWxsIG51bWJlcnMuCisgKi8KKworI2RlZmluZSBfX05SX3Jlc3RhcnRfc3lzY2FsbAkgIDAKKyNkZWZpbmUgX19OUl9leGl0CQkgIDEKKyNkZWZpbmUgX19OUl9mb3JrCQkgIDIKKyNkZWZpbmUgX19OUl9yZWFkCQkgIDMKKyNkZWZpbmUgX19OUl93cml0ZQkJICA0CisjZGVmaW5lIF9fTlJfb3BlbgkJICA1CisjZGVmaW5lIF9fTlJfY2xvc2UJCSAgNgorI2RlZmluZSBfX05SX3dhaXRwaWQJCSAgNworI2RlZmluZSBfX05SX2NyZWF0CQkgIDgKKyNkZWZpbmUgX19OUl9saW5rCQkgIDkKKyNkZWZpbmUgX19OUl91bmxpbmsJCSAxMAorI2RlZmluZSBfX05SX2V4ZWN2ZQkJIDExCisjZGVmaW5lIF9fTlJfY2hkaXIJCSAxMgorI2RlZmluZSBfX05SX3RpbWUJCSAxMworI2RlZmluZSBfX05SX21rbm9kCQkgMTQKKyNkZWZpbmUgX19OUl9jaG1vZAkJIDE1CisvKiAxNiBpcyB1bnVzZWQgKi8KKy8qIDE3IGlzIHVudXNlZCAqLworLyogMTggaXMgdW51c2VkICovCisjZGVmaW5lIF9fTlJfbHNlZWsJCSAxOQorI2RlZmluZSBfX05SX2dldHBpZAkJIDIwCisjZGVmaW5lIF9fTlJfbW91bnQJCSAyMQorI2RlZmluZSBfX05SX3Vtb3VudAkJIDIyCisvKiAyMyBpcyB1bnVzZWQgKi8KKy8qIDI0IGlzIHVudXNlZCAqLworI2RlZmluZSBfX05SX3N0aW1lCQkgMjUKKyNkZWZpbmUgX19OUl9wdHJhY2UJCSAyNgorI2RlZmluZSBfX05SX2FsYXJtCQkgMjcKKy8qIDI4IGlzIHVudXNlZCAqLworI2RlZmluZSBfX05SX3BhdXNlCQkgMjkKKyNkZWZpbmUgX19OUl91dGltZQkJIDMwCisvKiAzMSBpcyB1bnVzZWQgKi8KKyNkZWZpbmUgX19OUl9jYWNoZWN0bAkJIDMyIC8qIG9sZCAjZGVmaW5lIF9fTlJfZ3R0eQkJIDMyKi8KKyNkZWZpbmUgX19OUl9hY2Nlc3MJCSAzMworLyogMzQgaXMgdW51c2VkICovCisvKiAzNSBpcyB1bnVzZWQgKi8KKyNkZWZpbmUgX19OUl9zeW5jCQkgMzYKKyNkZWZpbmUgX19OUl9raWxsCQkgMzcKKyNkZWZpbmUgX19OUl9yZW5hbWUJCSAzOAorI2RlZmluZSBfX05SX21rZGlyCQkgMzkKKyNkZWZpbmUgX19OUl9ybWRpcgkJIDQwCisjZGVmaW5lIF9fTlJfZHVwCQkgNDEKKyNkZWZpbmUgX19OUl9waXBlCQkgNDIKKyNkZWZpbmUgX19OUl90aW1lcwkJIDQzCisvKiA0NCBpcyB1bnVzZWQgKi8KKyNkZWZpbmUgX19OUl9icmsJCSA0NQorLyogNDYgaXMgdW51c2VkICovCisvKiA0NyBpcyB1bnVzZWQgKGdldGdpZDE2KSAqLworLyogNDggaXMgdW51c2VkICovCisvKiA0OSBpcyB1bnVzZWQgKi8KKy8qIDUwIGlzIHVudXNlZCAqLworI2RlZmluZSBfX05SX2FjY3QJCSA1MQorI2RlZmluZSBfX05SX3Vtb3VudDIJCSA1MgorLyogNTMgaXMgdW51c2VkICovCisjZGVmaW5lIF9fTlJfaW9jdGwJCSA1NAorLyogNTUgaXMgdW51c2VkIChmY250bCkgKi8KKy8qIDU2IGlzIHVudXNlZCAqLworI2RlZmluZSBfX05SX3NldHBnaWQJCSA1NworLyogNTggaXMgdW51c2VkICovCisvKiA1OSBpcyB1bnVzZWQgKi8KKyNkZWZpbmUgX19OUl91bWFzawkJIDYwCisjZGVmaW5lIF9fTlJfY2hyb290CQkgNjEKKyNkZWZpbmUgX19OUl91c3RhdAkJIDYyCisjZGVmaW5lIF9fTlJfZHVwMgkJIDYzCisjZGVmaW5lIF9fTlJfZ2V0cHBpZAkJIDY0CisjZGVmaW5lIF9fTlJfZ2V0cGdycAkJIDY1CisjZGVmaW5lIF9fTlJfc2V0c2lkCQkgNjYKKy8qIDY3IGlzIHVudXNlZCAqLworLyogNjggaXMgdW51c2VkKi8KKy8qIDY5IGlzIHVudXNlZCovCisvKiA3MCBpcyB1bnVzZWQgKi8KKy8qIDcxIGlzIHVudXNlZCAqLworLyogNzIgaXMgdW51c2VkICovCisvKiA3MyBpcyB1bnVzZWQgKi8KKyNkZWZpbmUgX19OUl9zZXRob3N0bmFtZQkgNzQKKyNkZWZpbmUgX19OUl9zZXRybGltaXQJCSA3NQorLyogNzYgaXMgdW51c2VkIChvbGQgZ2V0cmxpbWl0KSAqLworI2RlZmluZSBfX05SX2dldHJ1c2FnZQkJIDc3CisjZGVmaW5lIF9fTlJfZ2V0dGltZW9mZGF5CSA3OAorI2RlZmluZSBfX05SX3NldHRpbWVvZmRheQkgNzkKKy8qIDgwIGlzIHVudXNlZCAqLworLyogODEgaXMgdW51c2VkICovCisvKiA4MiBpcyB1bnVzZWQgKi8KKyNkZWZpbmUgX19OUl9zeW1saW5rCQkgODMKKy8qIDg0IGlzIHVudXNlZCAqLworI2RlZmluZSBfX05SX3JlYWRsaW5rCQkgODUKKyNkZWZpbmUgX19OUl91c2VsaWIJCSA4NgorI2RlZmluZSBfX05SX3N3YXBvbgkJIDg3CisjZGVmaW5lIF9fTlJfcmVib290CQkgODgKKy8qIDg5IGlzIHVudXNlZCAqLworLyogOTAgaXMgdW51c2VkICovCisjZGVmaW5lIF9fTlJfbXVubWFwCQkgOTEKKyNkZWZpbmUgX19OUl90cnVuY2F0ZQkJIDkyCisjZGVmaW5lIF9fTlJfZnRydW5jYXRlCQkgOTMKKyNkZWZpbmUgX19OUl9mY2htb2QJCSA5NAorLyogOTUgaXMgdW51c2VkICovCisjZGVmaW5lIF9fTlJfZ2V0cHJpb3JpdHkJIDk2CisjZGVmaW5lIF9fTlJfc2V0cHJpb3JpdHkJIDk3CisvKiA5OCBpcyB1bnVzZWQgKi8KKyNkZWZpbmUgX19OUl9zdGF0ZnMJCSA5OQorI2RlZmluZSBfX05SX2ZzdGF0ZnMJCTEwMAorLyogMTAxIGlzIHVudXNlZCAqLworI2RlZmluZSBfX05SX3NvY2tldGNhbGwJCTEwMgorI2RlZmluZSBfX05SX3N5c2xvZwkJMTAzCisjZGVmaW5lIF9fTlJfc2V0aXRpbWVyCQkxMDQKKyNkZWZpbmUgX19OUl9nZXRpdGltZXIJCTEwNQorI2RlZmluZSBfX05SX3N0YXQJCTEwNgorI2RlZmluZSBfX05SX2xzdGF0CQkxMDcKKyNkZWZpbmUgX19OUl9mc3RhdAkJMTA4CisvKiAxMDkgaXMgdW51c2VkICovCisvKiAxMTAgaXMgdW51c2VkICovCisjZGVmaW5lIF9fTlJfdmhhbmd1cAkJMTExCisvKiAxMTIgaXMgdW51c2VkICovCisvKiAxMTMgaXMgdW51c2VkICovCisjZGVmaW5lIF9fTlJfd2FpdDQJCTExNAorI2RlZmluZSBfX05SX3N3YXBvZmYJCTExNQorI2RlZmluZSBfX05SX3N5c2luZm8JCTExNgorI2RlZmluZSBfX05SX2lwYwkJMTE3CisjZGVmaW5lIF9fTlJfZnN5bmMJCTExOAorLyogMTE5IGlzIHVudXNlZCAqLworI2RlZmluZSBfX05SX2Nsb25lCQkxMjAKKyNkZWZpbmUgX19OUl9zZXRkb21haW5uYW1lCTEyMQorI2RlZmluZSBfX05SX3VuYW1lCQkxMjIKKy8qIDEyMyBpcyB1bnVzZWQgKi8KKyNkZWZpbmUgX19OUl9hZGp0aW1leAkJMTI0CisjZGVmaW5lIF9fTlJfbXByb3RlY3QJCTEyNQorLyogMTI2IGlzIHVudXNlZCAqLworLyogMTI3IGlzIHVudXNlZCAqLworI2RlZmluZSBfX05SX2luaXRfbW9kdWxlCTEyOAorI2RlZmluZSBfX05SX2RlbGV0ZV9tb2R1bGUJMTI5CisvKiAxMzAgaXMgdW51c2VkICovCisjZGVmaW5lIF9fTlJfcXVvdGFjdGwJCTEzMQorI2RlZmluZSBfX05SX2dldHBnaWQJCTEzMgorI2RlZmluZSBfX05SX2ZjaGRpcgkJMTMzCisjZGVmaW5lIF9fTlJfYmRmbHVzaAkJMTM0CisjZGVmaW5lIF9fTlJfc3lzZnMJCTEzNQorI2RlZmluZSBfX05SX3BlcnNvbmFsaXR5CTEzNgorLyogMTM3IGlzIHVudXNlZCAqLworLyogMTM4IGlzIHVudXNlZCAqLworLyogMTM5IGlzIHVudXNlZCAqLworI2RlZmluZSBfX05SX19sbHNlZWsJCTE0MAorI2RlZmluZSBfX05SX2dldGRlbnRzCQkxNDEKKyNkZWZpbmUgX19OUl9fbmV3c2VsZWN0CQkxNDIKKyNkZWZpbmUgX19OUl9mbG9jawkJMTQzCisjZGVmaW5lIF9fTlJfbXN5bmMJCTE0NAorI2RlZmluZSBfX05SX3JlYWR2CQkxNDUKKyNkZWZpbmUgX19OUl93cml0ZXYJCTE0NgorI2RlZmluZSBfX05SX2dldHNpZAkJMTQ3CisjZGVmaW5lIF9fTlJfZmRhdGFzeW5jCQkxNDgKKyNkZWZpbmUgX19OUl9fc3lzY3RsCQkxNDkKKyNkZWZpbmUgX19OUl9tbG9jawkJMTUwCisjZGVmaW5lIF9fTlJfbXVubG9jawkJMTUxCisjZGVmaW5lIF9fTlJfbWxvY2thbGwJCTE1MgorI2RlZmluZSBfX05SX211bmxvY2thbGwJCTE1MworI2RlZmluZSBfX05SX3NjaGVkX3NldHBhcmFtCQkxNTQKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRwYXJhbQkJMTU1CisjZGVmaW5lIF9fTlJfc2NoZWRfc2V0c2NoZWR1bGVyCQkxNTYKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRzY2hlZHVsZXIJCTE1NworI2RlZmluZSBfX05SX3NjaGVkX3lpZWxkCQkxNTgKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4CTE1OQorI2RlZmluZSBfX05SX3NjaGVkX2dldF9wcmlvcml0eV9taW4JMTYwCisjZGVmaW5lIF9fTlJfc2NoZWRfcnJfZ2V0X2ludGVydmFsCTE2MQorI2RlZmluZSBfX05SX25hbm9zbGVlcAkJMTYyCisjZGVmaW5lIF9fTlJfbXJlbWFwCQkxNjMKKy8qIDE2NCBpcyB1bnVzZWQgKi8KKy8qIDE2NSBpcyB1bnVzZWQgKi8KKyNkZWZpbmUgX19OUl90YXMJCTE2NgorLyogMTY3IGlzIHVudXNlZCAqLworI2RlZmluZSBfX05SX3BvbGwJCTE2OAorI2RlZmluZSBfX05SX25mc3NlcnZjdGwJCTE2OQorLyogMTcwIGlzIHVudXNlZCAqLworLyogMTcxIGlzIHVudXNlZCAqLworI2RlZmluZSBfX05SX3ByY3RsICAgICAgICAgICAgICAxNzIKKyNkZWZpbmUgX19OUl9ydF9zaWdyZXR1cm4JMTczCisjZGVmaW5lIF9fTlJfcnRfc2lnYWN0aW9uCTE3NAorI2RlZmluZSBfX05SX3J0X3NpZ3Byb2NtYXNrCTE3NQorI2RlZmluZSBfX05SX3J0X3NpZ3BlbmRpbmcJMTc2CisjZGVmaW5lIF9fTlJfcnRfc2lndGltZWR3YWl0CTE3NworI2RlZmluZSBfX05SX3J0X3NpZ3F1ZXVlaW5mbwkxNzgKKyNkZWZpbmUgX19OUl9ydF9zaWdzdXNwZW5kCTE3OQorI2RlZmluZSBfX05SX3ByZWFkNjQJCTE4MAorI2RlZmluZSBfX05SX3B3cml0ZTY0CQkxODEKKy8qIDE4MiBpcyB1bnVzZWQgKi8KKyNkZWZpbmUgX19OUl9nZXRjd2QJCTE4MworI2RlZmluZSBfX05SX2NhcGdldAkJMTg0CisjZGVmaW5lIF9fTlJfY2Fwc2V0CQkxODUKKyNkZWZpbmUgX19OUl9zaWdhbHRzdGFjawkxODYKKyNkZWZpbmUgX19OUl9zZW5kZmlsZQkJMTg3CisvKiAxODggaXMgdW51c2VkICovCisvKiAxODkgaXMgdW51c2VkICovCisjZGVmaW5lIF9fTlJfdmZvcmsJCTE5MAorI2RlZmluZSBfX05SX3VnZXRybGltaXQJCTE5MQkvKiBTdVMgY29tcGxpYW50IGdldHJsaW1pdCAqLworI2RlZmluZSBfX05SX21tYXAyCQkxOTIKKyNkZWZpbmUgX19OUl90cnVuY2F0ZTY0CQkxOTMKKyNkZWZpbmUgX19OUl9mdHJ1bmNhdGU2NAkxOTQKKyNkZWZpbmUgX19OUl9zdGF0NjQJCTE5NQorI2RlZmluZSBfX05SX2xzdGF0NjQJCTE5NgorI2RlZmluZSBfX05SX2ZzdGF0NjQJCTE5NworI2RlZmluZSBfX05SX2xjaG93bjMyCQkxOTgKKyNkZWZpbmUgX19OUl9nZXR1aWQzMgkJMTk5CisjZGVmaW5lIF9fTlJfZ2V0Z2lkMzIJCTIwMAorI2RlZmluZSBfX05SX2dldGV1aWQzMgkJMjAxCisjZGVmaW5lIF9fTlJfZ2V0ZWdpZDMyCQkyMDIKKyNkZWZpbmUgX19OUl9zZXRyZXVpZDMyCQkyMDMKKyNkZWZpbmUgX19OUl9zZXRyZWdpZDMyCQkyMDQKKyNkZWZpbmUgX19OUl9nZXRncm91cHMzMgkyMDUKKyNkZWZpbmUgX19OUl9zZXRncm91cHMzMgkyMDYKKyNkZWZpbmUgX19OUl9mY2hvd24zMgkJMjA3CisjZGVmaW5lIF9fTlJfc2V0cmVzdWlkMzIJMjA4CisjZGVmaW5lIF9fTlJfZ2V0cmVzdWlkMzIJMjA5CisjZGVmaW5lIF9fTlJfc2V0cmVzZ2lkMzIJMjEwCisjZGVmaW5lIF9fTlJfZ2V0cmVzZ2lkMzIJMjExCisjZGVmaW5lIF9fTlJfY2hvd24zMgkJMjEyCisjZGVmaW5lIF9fTlJfc2V0dWlkMzIJCTIxMworI2RlZmluZSBfX05SX3NldGdpZDMyCQkyMTQKKyNkZWZpbmUgX19OUl9zZXRmc3VpZDMyCQkyMTUKKyNkZWZpbmUgX19OUl9zZXRmc2dpZDMyCQkyMTYKKyNkZWZpbmUgX19OUl9waXZvdF9yb290CQkyMTcKKyNkZWZpbmUgX19OUl9taW5jb3JlCQkyMTgKKyNkZWZpbmUgX19OUl9tYWR2aXNlCQkyMTkKKyNkZWZpbmUgX19OUl9nZXRkZW50czY0CQkyMjAKKyNkZWZpbmUgX19OUl9mY250bDY0CQkyMjEKKy8qIDIyMiBpcyB1bnVzZWQgKi8KKy8qIDIyMyBpcyB1bnVzZWQgKi8KKyNkZWZpbmUgX19OUl9nZXR0aWQJCTIyNAorI2RlZmluZSBfX05SX3JlYWRhaGVhZAkJMjI1CisjZGVmaW5lIF9fTlJfc2V0eGF0dHIJCTIyNgorI2RlZmluZSBfX05SX2xzZXR4YXR0cgkJMjI3CisjZGVmaW5lIF9fTlJfZnNldHhhdHRyCQkyMjgKKyNkZWZpbmUgX19OUl9nZXR4YXR0cgkJMjI5CisjZGVmaW5lIF9fTlJfbGdldHhhdHRyCQkyMzAKKyNkZWZpbmUgX19OUl9mZ2V0eGF0dHIJCTIzMQorI2RlZmluZSBfX05SX2xpc3R4YXR0cgkJMjMyCisjZGVmaW5lIF9fTlJfbGxpc3R4YXR0cgkJMjMzCisjZGVmaW5lIF9fTlJfZmxpc3R4YXR0cgkJMjM0CisjZGVmaW5lIF9fTlJfcmVtb3ZleGF0dHIJMjM1CisjZGVmaW5lIF9fTlJfbHJlbW92ZXhhdHRyCTIzNgorI2RlZmluZSBfX05SX2ZyZW1vdmV4YXR0cgkyMzcKKyNkZWZpbmUgX19OUl90a2lsbAkJMjM4CisjZGVmaW5lIF9fTlJfc2VuZGZpbGU2NAkJMjM5CisjZGVmaW5lIF9fTlJfZnV0ZXgJCTI0MAorI2RlZmluZSBfX05SX3NjaGVkX3NldGFmZmluaXR5CTI0MQorI2RlZmluZSBfX05SX3NjaGVkX2dldGFmZmluaXR5CTI0MgorI2RlZmluZSBfX05SX3NldF90aHJlYWRfYXJlYQkyNDMKKyNkZWZpbmUgX19OUl9nZXRfdGhyZWFkX2FyZWEJMjQ0CisjZGVmaW5lIF9fTlJfaW9fc2V0dXAJCTI0NQorI2RlZmluZSBfX05SX2lvX2Rlc3Ryb3kJCTI0NgorI2RlZmluZSBfX05SX2lvX2dldGV2ZW50cwkyNDcKKyNkZWZpbmUgX19OUl9pb19zdWJtaXQJCTI0OAorI2RlZmluZSBfX05SX2lvX2NhbmNlbAkJMjQ5CisjZGVmaW5lIF9fTlJfZmFkdmlzZTY0CQkyNTAKKy8qIDI1MSBpcyB1bnVzZWQgKi8KKyNkZWZpbmUgX19OUl9leGl0X2dyb3VwCQkyNTIKKyNkZWZpbmUgX19OUl9sb29rdXBfZGNvb2tpZQkyNTMKKyNkZWZpbmUgX19OUl9lcG9sbF9jcmVhdGUJMjU0CisjZGVmaW5lIF9fTlJfZXBvbGxfY3RsCQkyNTUKKyNkZWZpbmUgX19OUl9lcG9sbF93YWl0CQkyNTYKKyNkZWZpbmUgX19OUl9yZW1hcF9maWxlX3BhZ2VzCTI1NworI2RlZmluZSBfX05SX3NldF90aWRfYWRkcmVzcwkyNTgKKyNkZWZpbmUgX19OUl90aW1lcl9jcmVhdGUJMjU5CisjZGVmaW5lIF9fTlJfdGltZXJfc2V0dGltZQkoX19OUl90aW1lcl9jcmVhdGUrMSkKKyNkZWZpbmUgX19OUl90aW1lcl9nZXR0aW1lCShfX05SX3RpbWVyX2NyZWF0ZSsyKQorI2RlZmluZSBfX05SX3RpbWVyX2dldG92ZXJydW4JKF9fTlJfdGltZXJfY3JlYXRlKzMpCisjZGVmaW5lIF9fTlJfdGltZXJfZGVsZXRlCShfX05SX3RpbWVyX2NyZWF0ZSs0KQorI2RlZmluZSBfX05SX2Nsb2NrX3NldHRpbWUJKF9fTlJfdGltZXJfY3JlYXRlKzUpCisjZGVmaW5lIF9fTlJfY2xvY2tfZ2V0dGltZQkoX19OUl90aW1lcl9jcmVhdGUrNikKKyNkZWZpbmUgX19OUl9jbG9ja19nZXRyZXMJKF9fTlJfdGltZXJfY3JlYXRlKzcpCisjZGVmaW5lIF9fTlJfY2xvY2tfbmFub3NsZWVwCShfX05SX3RpbWVyX2NyZWF0ZSs4KQorI2RlZmluZSBfX05SX3N0YXRmczY0CQkyNjgKKyNkZWZpbmUgX19OUl9mc3RhdGZzNjQJCTI2OQorI2RlZmluZSBfX05SX3Rna2lsbAkJMjcwCisjZGVmaW5lIF9fTlJfdXRpbWVzCQkyNzEKKyNkZWZpbmUgX19OUl9mYWR2aXNlNjRfNjQJMjcyCisjZGVmaW5lIF9fTlJfdnNlcnZlcgkJMjczCisjZGVmaW5lIF9fTlJfbWJpbmQJCTI3NAorI2RlZmluZSBfX05SX2dldF9tZW1wb2xpY3kJMjc1CisjZGVmaW5lIF9fTlJfc2V0X21lbXBvbGljeQkyNzYKKyNkZWZpbmUgX19OUl9tcV9vcGVuCQkyNzcKKyNkZWZpbmUgX19OUl9tcV91bmxpbmsJCShfX05SX21xX29wZW4rMSkKKyNkZWZpbmUgX19OUl9tcV90aW1lZHNlbmQJKF9fTlJfbXFfb3BlbisyKQorI2RlZmluZSBfX05SX21xX3RpbWVkcmVjZWl2ZQkoX19OUl9tcV9vcGVuKzMpCisjZGVmaW5lIF9fTlJfbXFfbm90aWZ5CQkoX19OUl9tcV9vcGVuKzQpCisjZGVmaW5lIF9fTlJfbXFfZ2V0c2V0YXR0cgkoX19OUl9tcV9vcGVuKzUpCisjZGVmaW5lIF9fTlJfc3lzX2tleGVjX2xvYWQJMjgzCisjZGVmaW5lIF9fTlJfd2FpdGlkCQkyODQKKworI2RlZmluZSBOUl9zeXNjYWxscyAyODUKKworLyogdXNlci12aXNpYmxlIGVycm9yIG51bWJlcnMgYXJlIGluIHRoZSByYW5nZSAtMSAtIC0xMjQ6IHNlZQorICogPGFzbS1tMzJyL2Vycm5vLmg+CisgKi8KKworI2RlZmluZSBfX3N5c2NhbGxfcmV0dXJuKHR5cGUsIHJlcykgXAorZG8geyBcCisJaWYgKCh1bnNpZ25lZCBsb25nKShyZXMpID49ICh1bnNpZ25lZCBsb25nKSgtKDEyNCArIDEpKSkgeyBcCisJLyogQXZvaWQgdXNpbmcgInJlcyIgd2hpY2ggaXMgZGVjbGFyZWQgdG8gYmUgaW4gcmVnaXN0ZXIgcjA7IFwKKwkgICBlcnJubyBtaWdodCBleHBhbmQgdG8gYSBmdW5jdGlvbiBjYWxsIGFuZCBjbG9iYmVyIGl0LiAgKi8gXAorCQlpbnQgX19lcnIgPSAtKHJlcyk7IFwKKwkJZXJybm8gPSBfX2VycjsgXAorCQlyZXMgPSAtMTsgXAorCX0gXAorCXJldHVybiAodHlwZSkgKHJlcyk7IFwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgX3N5c2NhbGwwKHR5cGUsbmFtZSkgXAordHlwZSBuYW1lKHZvaWQpIFwKK3sgXAorcmVnaXN0ZXIgbG9uZyBfX3Njbm8gX19hc21fXyAoInI3IikgPSBfX05SXyMjbmFtZTsgXAorcmVnaXN0ZXIgbG9uZyBfX3JlcyBfX2FzbV9fKCJyMCIpOyBcCitfX2FzbV9fIF9fdm9sYXRpbGVfXyAoXAorCSJ0cmFwICMiIFNZU0NBTExfVkVDVE9SIFwKKwk6ICI9ciIgKF9fcmVzKSBcCisJOiAiciIgKF9fc2NubykgXAorCTogIm1lbW9yeSIpOyBcCitfX3N5c2NhbGxfcmV0dXJuKHR5cGUsX19yZXMpOyBcCit9CisKKyNkZWZpbmUgX3N5c2NhbGwxKHR5cGUsbmFtZSx0eXBlMSxhcmcxKSBcCit0eXBlIG5hbWUodHlwZTEgYXJnMSkgXAoreyBcCityZWdpc3RlciBsb25nIF9fc2NubyBfX2FzbV9fICgicjciKSA9IF9fTlJfIyNuYW1lOyBcCityZWdpc3RlciBsb25nIF9fcmVzIF9fYXNtX18gKCJyMCIpID0gKGxvbmcpKGFyZzEpOyBcCitfX2FzbV9fIF9fdm9sYXRpbGVfXyAoXAorCSJ0cmFwICMiIFNZU0NBTExfVkVDVE9SIFwKKwk6ICI9ciIgKF9fcmVzKSBcCisJOiAiciIgKF9fc2NubyksICIwIiAoX19yZXMpIFwKKwk6ICJtZW1vcnkiKTsgXAorX19zeXNjYWxsX3JldHVybih0eXBlLF9fcmVzKTsgXAorfQorCisjZGVmaW5lIF9zeXNjYWxsMih0eXBlLG5hbWUsdHlwZTEsYXJnMSx0eXBlMixhcmcyKSBcCit0eXBlIG5hbWUodHlwZTEgYXJnMSx0eXBlMiBhcmcyKSBcCit7IFwKK3JlZ2lzdGVyIGxvbmcgX19zY25vIF9fYXNtX18gKCJyNyIpID0gX19OUl8jI25hbWU7IFwKK3JlZ2lzdGVyIGxvbmcgX19hcmcyIF9fYXNtX18gKCJyMSIpID0gKGxvbmcpKGFyZzIpOyBcCityZWdpc3RlciBsb25nIF9fcmVzIF9fYXNtX18gKCJyMCIpID0gKGxvbmcpKGFyZzEpOyBcCitfX2FzbV9fIF9fdm9sYXRpbGVfXyAoXAorCSJ0cmFwICMiIFNZU0NBTExfVkVDVE9SIFwKKwk6ICI9ciIgKF9fcmVzKSBcCisJOiAiciIgKF9fc2NubyksICIwIiAoX19yZXMpLCAiciIgKF9fYXJnMikgXAorCTogIm1lbW9yeSIpOyBcCitfX3N5c2NhbGxfcmV0dXJuKHR5cGUsX19yZXMpOyBcCit9CisKKyNkZWZpbmUgX3N5c2NhbGwzKHR5cGUsbmFtZSx0eXBlMSxhcmcxLHR5cGUyLGFyZzIsdHlwZTMsYXJnMykgXAordHlwZSBuYW1lKHR5cGUxIGFyZzEsdHlwZTIgYXJnMix0eXBlMyBhcmczKSBcCit7IFwKK3JlZ2lzdGVyIGxvbmcgX19zY25vIF9fYXNtX18gKCJyNyIpID0gX19OUl8jI25hbWU7IFwKK3JlZ2lzdGVyIGxvbmcgX19hcmczIF9fYXNtX18gKCJyMiIpID0gKGxvbmcpKGFyZzMpOyBcCityZWdpc3RlciBsb25nIF9fYXJnMiBfX2FzbV9fICgicjEiKSA9IChsb25nKShhcmcyKTsgXAorcmVnaXN0ZXIgbG9uZyBfX3JlcyBfX2FzbV9fICgicjAiKSA9IChsb25nKShhcmcxKTsgXAorX19hc21fXyBfX3ZvbGF0aWxlX18gKFwKKwkidHJhcCAjIiBTWVNDQUxMX1ZFQ1RPUiBcCisJOiAiPXIiIChfX3JlcykgXAorCTogInIiIChfX3Njbm8pLCAiMCIgKF9fcmVzKSwgInIiIChfX2FyZzIpLCBcCisJCSJyIiAoX19hcmczKSBcCisJOiAibWVtb3J5Iik7IFwKK19fc3lzY2FsbF9yZXR1cm4odHlwZSxfX3Jlcyk7IFwKK30KKworI2RlZmluZSBfc3lzY2FsbDQodHlwZSxuYW1lLHR5cGUxLGFyZzEsdHlwZTIsYXJnMix0eXBlMyxhcmczLHR5cGU0LGFyZzQpIFwKK3R5cGUgbmFtZSh0eXBlMSBhcmcxLHR5cGUyIGFyZzIsdHlwZTMgYXJnMyx0eXBlNCBhcmc0KSBcCit7IFwKK3JlZ2lzdGVyIGxvbmcgX19zY25vIF9fYXNtX18gKCJyNyIpID0gX19OUl8jI25hbWU7IFwKK3JlZ2lzdGVyIGxvbmcgX19hcmc0IF9fYXNtX18gKCJyMyIpID0gKGxvbmcpKGFyZzQpOyBcCityZWdpc3RlciBsb25nIF9fYXJnMyBfX2FzbV9fICgicjIiKSA9IChsb25nKShhcmczKTsgXAorcmVnaXN0ZXIgbG9uZyBfX2FyZzIgX19hc21fXyAoInIxIikgPSAobG9uZykoYXJnMik7IFwKK3JlZ2lzdGVyIGxvbmcgX19yZXMgX19hc21fXyAoInIwIikgPSAobG9uZykoYXJnMSk7IFwKK19fYXNtX18gX192b2xhdGlsZV9fIChcCisJInRyYXAgIyIgU1lTQ0FMTF9WRUNUT1IgXAorCTogIj1yIiAoX19yZXMpIFwKKwk6ICJyIiAoX19zY25vKSwgIjAiIChfX3JlcyksICJyIiAoX19hcmcyKSwgXAorCQkiciIgKF9fYXJnMyksICJyIiAoX19hcmc0KSBcCisJOiAibWVtb3J5Iik7IFwKK19fc3lzY2FsbF9yZXR1cm4odHlwZSxfX3Jlcyk7IFwKK30KKworI2RlZmluZSBfc3lzY2FsbDUodHlwZSxuYW1lLHR5cGUxLGFyZzEsdHlwZTIsYXJnMix0eXBlMyxhcmczLHR5cGU0LGFyZzQsIFwKKwl0eXBlNSxhcmc1KSBcCit0eXBlIG5hbWUodHlwZTEgYXJnMSx0eXBlMiBhcmcyLHR5cGUzIGFyZzMsdHlwZTQgYXJnNCx0eXBlNSBhcmc1KSBcCit7IFwKK3JlZ2lzdGVyIGxvbmcgX19zY25vIF9fYXNtX18gKCJyNyIpID0gX19OUl8jI25hbWU7IFwKK3JlZ2lzdGVyIGxvbmcgX19hcmc1IF9fYXNtX18gKCJyNCIpID0gKGxvbmcpKGFyZzUpOyBcCityZWdpc3RlciBsb25nIF9fYXJnNCBfX2FzbV9fICgicjMiKSA9IChsb25nKShhcmc0KTsgXAorcmVnaXN0ZXIgbG9uZyBfX2FyZzMgX19hc21fXyAoInIyIikgPSAobG9uZykoYXJnMyk7IFwKK3JlZ2lzdGVyIGxvbmcgX19hcmcyIF9fYXNtX18gKCJyMSIpID0gKGxvbmcpKGFyZzIpOyBcCityZWdpc3RlciBsb25nIF9fcmVzIF9fYXNtX18gKCJyMCIpID0gKGxvbmcpKGFyZzEpOyBcCitfX2FzbV9fIF9fdm9sYXRpbGVfXyAoXAorCSJ0cmFwICMiIFNZU0NBTExfVkVDVE9SIFwKKwk6ICI9ciIgKF9fcmVzKSBcCisJOiAiciIgKF9fc2NubyksICIwIiAoX19yZXMpLCAiciIgKF9fYXJnMiksIFwKKwkJInIiIChfX2FyZzMpLCAiciIgKF9fYXJnNCksICJyIiAoX19hcmc1KSBcCisJOiAibWVtb3J5Iik7IFwKK19fc3lzY2FsbF9yZXR1cm4odHlwZSxfX3Jlcyk7IFwKK30KKworI2lmZGVmIF9fS0VSTkVMX18KKyNkZWZpbmUgX19BUkNIX1dBTlRfSVBDX1BBUlNFX1ZFUlNJT04KKyNkZWZpbmUgX19BUkNIX1dBTlRfU1RBVDY0CisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19BTEFSTQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfR0VUSE9TVE5BTUUKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1BBVVNFCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19USU1FCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19VVElNRQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfV0FJVFBJRAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU09DS0VUQ0FMTAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfRkFEVklTRTY0CisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19HRVRQR1JQCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19MTFNFRUsKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX09MRF9HRVRSTElNSVQgLyp3aWxsIGJlIHVudXNlZCovCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19PTERVTU9VTlQKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1JUX1NJR0FDVElPTgorI2VuZGlmCisKKyNpZmRlZiBfX0tFUk5FTF9TWVNDQUxMU19fCisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKworLyoKKyAqIHdlIG5lZWQgdGhpcyBpbmxpbmUgLSBmb3JraW5nIGZyb20ga2VybmVsIHNwYWNlIHdpbGwgcmVzdWx0CisgKiBpbiBOTyBDT1BZIE9OIFdSSVRFICghISEpLCB1bnRpbCBhbiBleGVjdmUgaXMgZXhlY3V0ZWQuIFRoaXMKKyAqIGlzIG5vIHByb2JsZW0sIGJ1dCBmb3IgdGhlIHN0YWNrLiBUaGlzIGlzIGhhbmRsZWQgYnkgbm90IGxldHRpbmcKKyAqIG1haW4oKSB1c2UgdGhlIHN0YWNrIGF0IGFsbCBhZnRlciBmb3JrKCkuIFRodXMsIG5vIGZ1bmN0aW9uCisgKiBjYWxscyAtIHdoaWNoIG1lYW5zIGlubGluZSBjb2RlIGZvciBmb3JrIHRvbywgYXMgb3RoZXJ3aXNlIHdlCisgKiB3b3VsZCB1c2UgdGhlIHN0YWNrIHVwb24gZXhpdCBmcm9tICdmb3JrKCknLgorICoKKyAqIEFjdHVhbGx5IG9ubHkgcGF1c2UgYW5kIGZvcmsgYXJlIG5lZWRlZCBpbmxpbmUsIHNvIHRoYXQgdGhlcmUKKyAqIHdvbid0IGJlIGFueSBtZXNzaW5nIHdpdGggdGhlIHN0YWNrIGZyb20gbWFpbigpLCBidXQgd2UgZGVmaW5lCisgKiBzb21lIG90aGVycyB0b28uCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIF9zeXNjYWxsMyhpbnQsZXhlY3ZlLGNvbnN0IGNoYXIgKixmaWxlLGNoYXIgKiosYXJndixjaGFyICoqLGVudnApCisKK2FzbWxpbmthZ2UgbG9uZyBzeXNfbW1hcDIodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwKKwkJCSAgdW5zaWduZWQgbG9uZyBwcm90LCB1bnNpZ25lZCBsb25nIGZsYWdzLAorCQkJICB1bnNpZ25lZCBsb25nIGZkLCB1bnNpZ25lZCBsb25nIHBnb2ZmKTsKK2FzbWxpbmthZ2UgaW50IHN5c19leGVjdmUoc3RydWN0IHB0X3JlZ3MgcmVncyk7Cithc21saW5rYWdlIGludCBzeXNfY2xvbmUoc3RydWN0IHB0X3JlZ3MgcmVncyk7Cithc21saW5rYWdlIGludCBzeXNfZm9yayhzdHJ1Y3QgcHRfcmVncyByZWdzKTsKK2FzbWxpbmthZ2UgaW50IHN5c192Zm9yayhzdHJ1Y3QgcHRfcmVncyByZWdzKTsKK2FzbWxpbmthZ2UgaW50IHN5c19waXBlKHVuc2lnbmVkIGxvbmcgX191c2VyICpmaWxkZXMpOworYXNtbGlua2FnZSBpbnQgc3lzX3B0cmFjZShsb25nIHJlcXVlc3QsIGxvbmcgcGlkLCBsb25nIGFkZHIsIGxvbmcgZGF0YSk7CitzdHJ1Y3Qgc2lnYWN0aW9uOworYXNtbGlua2FnZSBsb25nIHN5c19ydF9zaWdhY3Rpb24oaW50IHNpZywKKwkJCQkgY29uc3Qgc3RydWN0IHNpZ2FjdGlvbiBfX3VzZXIgKmFjdCwKKwkJCQkgc3RydWN0IHNpZ2FjdGlvbiBfX3VzZXIgKm9hY3QsCisJCQkJIHNpemVfdCBzaWdzZXRzaXplKTsKKworI2VuZGlmIC8qIF9fS0VSTkVMX1NZU0NBTExTX18gKi8KKworLyoKKyAqICJDb25kaXRpb25hbCIgc3lzY2FsbHMKKyAqCisgKiBXaGF0IHdlIHdhbnQgaXMgX19hdHRyaWJ1dGVfXygod2VhayxhbGlhcygic3lzX25pX3N5c2NhbGwiKSkpLAorICogYnV0IGl0IGRvZXNuJ3Qgd29yayBvbiBhbGwgdG9vbGNoYWlucywgc28gd2UganVzdCBkbyBpdCBieSBoYW5kCisgKi8KKyNpZm5kZWYgY29uZF9zeXNjYWxsCisjZGVmaW5lIGNvbmRfc3lzY2FsbCh4KSBhc20oIi53ZWFrXHQiICN4ICJcblx0LnNldFx0IiAjeCAiLHN5c19uaV9zeXNjYWxsIikKKyNlbmRpZgorCisjZW5kaWYgLyogX0FTTV9NMzJSX1VOSVNURF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL3VzZXIuaCBiL2luY2x1ZGUvYXNtLW0zMnIvdXNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmZmQwYzYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL3VzZXIuaApAQCAtMCwwICsxLDU5IEBACisjaWZuZGVmIF9BU01fTTMyUl9VU0VSX0gKKyNkZWZpbmUgX0FTTV9NMzJSX1VTRVJfSAorCisvKiAkSWQkICovCisKKy8qIG9yaWcgOiBzaCAyLjQuMTgKKyAqIG1vZCAgOiByZW1vdmUgZnB1IHJlZ2lzdGVycworICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKworLyoKKyAqIENvcmUgZmlsZSBmb3JtYXQ6IFRoZSBjb3JlIGZpbGUgaXMgd3JpdHRlbiBpbiBzdWNoIGEgd2F5IHRoYXQgZ2RiCisgKiBjYW4gdW5kZXJzdGFuZCBpdCBhbmQgcHJvdmlkZSB1c2VmdWwgaW5mb3JtYXRpb24gdG8gdGhlIHVzZXIgKHVuZGVyCisgKiBsaW51eCB3ZSB1c2UgdGhlIGB0cmFkLWNvcmUnIGJmZCkuCisgKgorICogVGhlIGFjdHVhbCBmaWxlIGNvbnRlbnRzIGFyZSBhcyBmb2xsb3dzOgorICogVVBBR0U6IDEgcGFnZSBjb25zaXN0aW5nIG9mIGEgdXNlciBzdHJ1Y3QgdGhhdCB0ZWxscyBnZGIKKyAqCXdoYXQgaXMgcHJlc2VudCBpbiB0aGUgZmlsZS4gIERpcmVjdGx5IGFmdGVyIHRoaXMgaXMgYQorICoJY29weSBvZiB0aGUgdGFza19zdHJ1Y3QsIHdoaWNoIGlzIGN1cnJlbnRseSBub3QgdXNlZCBieSBnZGIsCisgKglidXQgaXQgbWF5IGNvbWUgaW4gaGFuZHkgYXQgc29tZSBwb2ludC4gIEFsbCBvZiB0aGUgcmVnaXN0ZXJzCisgKglhcmUgc3RvcmVkIGFzIHBhcnQgb2YgdGhlIHVwYWdlLiAgVGhlIHVwYWdlIHNob3VsZCBhbHdheXMgYmUKKyAqCW9ubHkgb25lIHBhZ2UuCisgKiBEQVRBOiBUaGUgZGF0YSBhcmVhIGlzIHN0b3JlZC4gIFdlIHVzZSBjdXJyZW50LT5lbmRfdGV4dCB0bworICoJY3VycmVudC0+YnJrIHRvIHBpY2sgdXAgYWxsIG9mIHRoZSB1c2VyIHZhcmlhYmxlcywgcGx1cyBhbnkgbWVtb3J5CisgKgl0aGF0IG1heSBoYXZlIGJlZW4gc2JyaydlZC4gIE5vIGF0dGVtcHQgaXMgbWFkZSB0byBkZXRlcm1pbmUgaWYgYQorICoJcGFnZSBpcyBkZW1hbmQtemVybyBvciBpZiBhIHBhZ2UgaXMgdG90YWxseSB1bnVzZWQsIHdlIGp1c3QgY292ZXIKKyAqCXRoZSBlbnRpcmUgcmFuZ2UuICBBbGwgb2YgdGhlIGFkZHJlc3NlcyBhcmUgcm91bmRlZCBpbiBzdWNoIGEgd2F5CisgKgl0aGF0IGFuIGludGVncmFsIG51bWJlciBvZiBwYWdlcyBpcyB3cml0dGVuLgorICogU1RBQ0s6IFdlIG5lZWQgdGhlIHN0YWNrIGluZm9ybWF0aW9uIGluIG9yZGVyIHRvIGdldCBhIG1lYW5pbmdmdWwKKyAqCWJhY2t0cmFjZS4gIFdlIG5lZWQgdG8gd3JpdGUgdGhlIGRhdGEgZnJvbSB1c3AgdG8KKyAqCWN1cnJlbnQtPnN0YXJ0X3N0YWNrLCBzbyB3ZSByb3VuZCBlYWNoIG9mIHRoZXNlIG9mZiBpbiBvcmRlciB0byBiZQorICoJYWJsZSB0byB3cml0ZSBhbiBpbnRlZ2VyIG51bWJlciBvZiBwYWdlcy4KKyAqLworCitzdHJ1Y3QgdXNlciB7CisJc3RydWN0IHB0X3JlZ3MJcmVnczsJCQkvKiBlbnRpcmUgbWFjaGluZSBzdGF0ZSAqLworCXNpemVfdAkJdV90c2l6ZTsJCS8qIHRleHQgc2l6ZSAocGFnZXMpICovCisJc2l6ZV90CQl1X2RzaXplOwkJLyogZGF0YSBzaXplIChwYWdlcykgKi8KKwlzaXplX3QJCXVfc3NpemU7CQkvKiBzdGFjayBzaXplIChwYWdlcykgKi8KKwl1bnNpZ25lZCBsb25nCXN0YXJ0X2NvZGU7CQkvKiB0ZXh0IHN0YXJ0aW5nIGFkZHJlc3MgKi8KKwl1bnNpZ25lZCBsb25nCXN0YXJ0X2RhdGE7CQkvKiBkYXRhIHN0YXJ0aW5nIGFkZHJlc3MgKi8KKwl1bnNpZ25lZCBsb25nCXN0YXJ0X3N0YWNrOwkJLyogc3RhY2sgc3RhcnRpbmcgYWRkcmVzcyAqLworCWxvbmcgaW50CXNpZ25hbDsJCQkvKiBzaWduYWwgY2F1c2luZyBjb3JlIGR1bXAgKi8KKwlzdHJ1Y3QgcmVncyAqCXVfYXIwOwkJCS8qIGhlbHAgZ2RiIGZpbmQgcmVnaXN0ZXJzICovCisJdW5zaWduZWQgbG9uZwltYWdpYzsJCQkvKiBpZGVudGlmaWVzIGEgY29yZSBmaWxlICovCisJY2hhcgkJdV9jb21tWzMyXTsJCS8qIHVzZXIgY29tbWFuZCBuYW1lICovCit9OworCisjZGVmaW5lIE5CUEcJCQlQQUdFX1NJWkUKKyNkZWZpbmUgVVBBR0VTCQkJMQorI2RlZmluZSBIT1NUX1RFWFRfU1RBUlRfQUREUgkodS5zdGFydF9jb2RlKQorI2RlZmluZSBIT1NUX0RBVEFfU1RBUlRfQUREUgkodS5zdGFydF9kYXRhKQorI2RlZmluZSBIT1NUX1NUQUNLX0VORF9BRERSCSh1LnN0YXJ0X3N0YWNrICsgdS51X3NzaXplICogTkJQRykKKworI2VuZGlmIC8qIF9BU01fTTMyUl9VU0VSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvdmdhLmggYi9pbmNsdWRlL2FzbS1tMzJyL3ZnYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwZjRiNmUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL3ZnYS5oCkBAIC0wLDAgKzEsMjIgQEAKKyNpZm5kZWYgX0FTTV9NMzJSX1ZHQV9ICisjZGVmaW5lIF9BU01fTTMyUl9WR0FfSAorCisvKiAkSWQkICovCisKKy8qCisgKglBY2Nlc3MgdG8gVkdBIHZpZGVvcmFtCisgKgorICoJKGMpIDE5OTggTWFydGluIE1hcmVzIDxtakB1Y3cuY3o+CisgKi8KKworLyoKKyAqCU9uIHRoZSBQQywgd2UgY2FuIGp1c3QgcmVjYWxjdWxhdGUgYWRkcmVzc2VzIGFuZCB0aGVuCisgKglhY2Nlc3MgdGhlIHZpZGVvcmFtIGRpcmVjdGx5IHdpdGhvdXQgYW55IGJsYWNrIG1hZ2ljLgorICovCisKKyNkZWZpbmUgVkdBX01BUF9NRU0oeCkgKHVuc2lnbmVkIGxvbmcpcGh5c190b192aXJ0KHgpCisKKyNkZWZpbmUgdmdhX3JlYWRiKHgpICgqKHgpKQorI2RlZmluZSB2Z2Ffd3JpdGViKHgseSkgKCooeSkgPSAoeCkpCisKKyNlbmRpZiAgLyogX0FTTV9NMzJSX1ZHQV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL3hvci5oIGIvaW5jbHVkZS9hc20tbTMyci94b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDk2MGRjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTMyci94b3IuaApAQCAtMCwwICsxLDggQEAKKyNpZm5kZWYgX0FTTV9NMzJSX1hPUl9ICisjZGVmaW5lIF9BU01fTTMyUl9YT1JfSAorCisvKiAkSWQkICovCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy94b3IuaD4KKworI2VuZGlmICAvKiBfQVNNX00zMlJfWE9SX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvYS5vdXQuaCBiL2luY2x1ZGUvYXNtLW02OGsvYS5vdXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGExNjYyNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvYS5vdXQuaApAQCAtMCwwICsxLDI2IEBACisjaWZuZGVmIF9fTTY4S19BX09VVF9IX18KKyNkZWZpbmUgX19NNjhLX0FfT1VUX0hfXworCitzdHJ1Y3QgZXhlYworeworICB1bnNpZ25lZCBsb25nIGFfaW5mbzsJCS8qIFVzZSBtYWNyb3MgTl9NQUdJQywgZXRjIGZvciBhY2Nlc3MgKi8KKyAgdW5zaWduZWQgYV90ZXh0OwkJLyogbGVuZ3RoIG9mIHRleHQsIGluIGJ5dGVzICovCisgIHVuc2lnbmVkIGFfZGF0YTsJCS8qIGxlbmd0aCBvZiBkYXRhLCBpbiBieXRlcyAqLworICB1bnNpZ25lZCBhX2JzczsJCS8qIGxlbmd0aCBvZiB1bmluaXRpYWxpemVkIGRhdGEgYXJlYSBmb3IgZmlsZSwgaW4gYnl0ZXMgKi8KKyAgdW5zaWduZWQgYV9zeW1zOwkJLyogbGVuZ3RoIG9mIHN5bWJvbCB0YWJsZSBkYXRhIGluIGZpbGUsIGluIGJ5dGVzICovCisgIHVuc2lnbmVkIGFfZW50cnk7CQkvKiBzdGFydCBhZGRyZXNzICovCisgIHVuc2lnbmVkIGFfdHJzaXplOwkJLyogbGVuZ3RoIG9mIHJlbG9jYXRpb24gaW5mbyBmb3IgdGV4dCwgaW4gYnl0ZXMgKi8KKyAgdW5zaWduZWQgYV9kcnNpemU7CQkvKiBsZW5ndGggb2YgcmVsb2NhdGlvbiBpbmZvIGZvciBkYXRhLCBpbiBieXRlcyAqLworfTsKKworI2RlZmluZSBOX1RSU0laRShhKQkoKGEpLmFfdHJzaXplKQorI2RlZmluZSBOX0RSU0laRShhKQkoKGEpLmFfZHJzaXplKQorI2RlZmluZSBOX1NZTVNJWkUoYSkJKChhKS5hX3N5bXMpCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNkZWZpbmUgU1RBQ0tfVE9QCVRBU0tfU0laRQorCisjZW5kaWYKKworI2VuZGlmIC8qIF9fTTY4S19BX09VVF9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvYWRiLmggYi9pbmNsdWRlL2FzbS1tNjhrL2FkYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNzZiNTUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2FkYi5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBEZWZpbml0aW9ucyBmb3IgdGFsa2luZyB0byBBREIgYW5kIENVREEuICBUaGUgQ1VEQSBpcyBhIG1pY3JvY29udHJvbGxlcgorICogd2hpY2ggY29udHJvbHMgdGhlIEFEQiwgc3lzdGVtIHBvd2VyLCBSVEMsIGFuZCB2YXJpb3VzIG90aGVyIHRoaW5ncyBvbgorICogbGF0ZXIgTWFjaW50b3NoZXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYgUGF1bCBNYWNrZXJyYXMuCisgKi8KKworLyogRmlyc3QgYnl0ZSBzZW50IHRvIG9yIHJlY2VpdmVkIGZyb20gQ1VEQSAqLworI2RlZmluZSBBREJfUEFDS0VUCTAKKyNkZWZpbmUgQ1VEQV9QQUNLRVQJMQorI2RlZmluZSBFUlJPUl9QQUNLRVQJMgorI2RlZmluZSBUSU1FUl9QQUNLRVQJMworI2RlZmluZSBQT1dFUl9QQUNLRVQJNAorI2RlZmluZSBNQUNJSUNfUEFDS0VUCTUKKworLyogQURCIGNvbW1hbmRzICgybmQgYnl0ZSkgKi8KKyNkZWZpbmUgQURCX0JVU1JFU0VUCQkwCisjZGVmaW5lIEFEQl9GTFVTSChpZCkJCSgxICsgKChpZCkgPDwgNCkpCisjZGVmaW5lIEFEQl9XUklURVJFRyhpZCwgcmVnKQkoOCArIChyZWcpICsgKChpZCkgPDwgNCkpCisjZGVmaW5lIEFEQl9SRUFEUkVHKGlkLCByZWcpCSgweGMgKyAocmVnKSArICgoaWQpIDw8IDQpKQorCisvKiBBREIgZGVmYXVsdCBkZXZpY2UgSURzICh1cHBlciA0IGJpdHMgb2YgMm5kIGJ5dGUpICovCisjZGVmaW5lIEFEQl9ET05HTEUJMQkvKiAic29mdHdhcmUgZXhlY3V0aW9uIGNvbnRyb2wiIGRldmljZXMgKi8KKyNkZWZpbmUgQURCX0tFWUJPQVJECTIKKyNkZWZpbmUgQURCX01PVVNFCTMKKyNkZWZpbmUgQURCX1RBQkxFVAk0CisjZGVmaW5lIEFEQl9NT0RFTQk1CisjZGVmaW5lIEFEQl9NSVNDCTcJLyogbWF5YmUgYSBtb25pdG9yICovCisKKy8qIENVREEgY29tbWFuZHMgKDJuZCBieXRlKSAqLworI2RlZmluZSBDVURBX1dBUk1fU1RBUlQJCTAKKyNkZWZpbmUgQ1VEQV9BVVRPUE9MTAkJMQorI2RlZmluZSBDVURBX0dFVF82ODA1X0FERFIJMgorI2RlZmluZSBDVURBX0dFVF9USU1FCQkzCisjZGVmaW5lIENVREFfR0VUX1BSQU0JCTcKKyNkZWZpbmUgQ1VEQV9TRVRfNjgwNV9BRERSCTgKKyNkZWZpbmUgQ1VEQV9TRVRfVElNRQkJOQorI2RlZmluZSBDVURBX1BPV0VSRE9XTgkJMHhhCisjZGVmaW5lIENVREFfUE9XRVJVUF9USU1FCTB4YgorI2RlZmluZSBDVURBX1NFVF9QUkFNCQkweGMKKyNkZWZpbmUgQ1VEQV9NU19SRVNFVAkJMHhkCisjZGVmaW5lIENVREFfU0VORF9ERkFDCQkweGUKKyNkZWZpbmUgQ1VEQV9SRVNFVF9TWVNURU0JMHgxMQorI2RlZmluZSBDVURBX1NFVF9JUEwJCTB4MTIKKyNkZWZpbmUgQ1VEQV9TRVRfQVVUT19SQVRFCTB4MTQKKyNkZWZpbmUgQ1VEQV9HRVRfQVVUT19SQVRFCTB4MTYKKyNkZWZpbmUgQ1VEQV9TRVRfREVWSUNFX0xJU1QJMHgxOQorI2RlZmluZSBDVURBX0dFVF9ERVZJQ0VfTElTVAkweDFhCisjZGVmaW5lIENVREFfR0VUX1NFVF9JSUMJMHgyMgorCisjaWZkZWYgX19LRVJORUxfXworCitzdHJ1Y3QgYWRiX3JlcXVlc3QgeworICAgIHVuc2lnbmVkIGNoYXIgZGF0YVsxNl07CisgICAgaW50IG5ieXRlczsKKyAgICB1bnNpZ25lZCBjaGFyIHJlcGx5WzE2XTsKKyAgICBpbnQgcmVwbHlfbGVuOworICAgIHVuc2lnbmVkIGNoYXIgcmVwbHlfZXhwZWN0ZWQ7CisgICAgdW5zaWduZWQgY2hhciBzZW50OworICAgIHVuc2lnbmVkIGNoYXIgZ290X3JlcGx5OworICAgIHZvaWQgKCpkb25lKShzdHJ1Y3QgYWRiX3JlcXVlc3QgKik7CisgICAgdm9pZCAqYXJnOworICAgIHN0cnVjdCBhZGJfcmVxdWVzdCAqbmV4dDsKK307CisKK3ZvaWQgdmlhX2FkYl9pbml0KHZvaWQpOworaW50IGFkYl9yZXF1ZXN0KHN0cnVjdCBhZGJfcmVxdWVzdCAqcmVxLAorCQkgdm9pZCAoKmRvbmUpKHN0cnVjdCBhZGJfcmVxdWVzdCAqKSwgaW50IG5ieXRlcywgLi4uKTsKK2ludCBhZGJfc2VuZF9yZXF1ZXN0KHN0cnVjdCBhZGJfcmVxdWVzdCAqcmVxKTsKK3ZvaWQgYWRiX3BvbGwodm9pZCk7CitpbnQgYWRiX3JlZ2lzdGVyKGludCBkZWZhdWx0X2lkLAorCQkgdm9pZCAoKmhhbmRsZXIpKHVuc2lnbmVkIGNoYXIgKiwgaW50LCBzdHJ1Y3QgcHRfcmVncyAqKSk7CisKKyNlbmRpZgkvKiBfX0tFUk5FTCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9hZGJfaW9wLmggYi9pbmNsdWRlL2FzbS1tNjhrL2FkYl9pb3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTQ4ZTU2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9hZGJfaW9wLmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIEFEQiB0aHJvdWdoIHRoZSBJT1AKKyAqIFdyaXR0ZW4gYnkgSm9zaHVhIE0uIFRob21wc29uCisgKi8KKworLyogSU9QIG51bWJlciBhbmQgY2hhbm5lbCBudW1iZXIgZm9yIEFEQiAqLworCisjZGVmaW5lIEFEQl9JT1AJCUlPUF9OVU1fSVNNCisjZGVmaW5lIEFEQl9DSEFOCTIKKworLyogRnJvbSB0aGUgQS9VWCBoZWFkZXJzLi4ubWF5YmUgaW1wb3J0YW50LCBtYXliZSBub3QgKi8KKworI2RlZmluZSBBREJfSU9QX0xJU1RFTgkweDAxCisjZGVmaW5lIEFEQl9JT1BfVEFMSwkweDAyCisjZGVmaW5lIEFEQl9JT1BfRVhJU1RTCTB4MDQKKyNkZWZpbmUgQURCX0lPUF9GTFVTSAkweDA4CisjZGVmaW5lIEFEQl9JT1BfUkVTRVQJMHgxMAorI2RlZmluZSBBREJfSU9QX0lOVAkweDIwCisjZGVmaW5lIEFEQl9JT1BfUE9MTAkweDQwCisjZGVmaW5lIEFEQl9JT1BfVU5JTlQJMHg4MAorCisjZGVmaW5lIEFJRl9SRVNFVAkweDAwCisjZGVmaW5lIEFJRl9GTFVTSAkweDAxCisjZGVmaW5lIEFJRl9MSVNURU4JMHgwOAorI2RlZmluZSBBSUZfVEFMSwkweDBDCisKKy8qIEZsYWcgYml0cyBpbiBzdHJ1Y3QgYWRiX2lvcG1zZyAqLworCisjZGVmaW5lIEFEQl9JT1BfRVhQTElDSVQJMHg4MAkvKiBub256ZXJvIGlmIGV4cGxpY2l0IGNvbW1hbmQgKi8KKyNkZWZpbmUgQURCX0lPUF9BVVRPUE9MTAkweDQwCS8qIGF1dG8vU1JRIHBvbGxpbmcgZW5hYmxlZCAgICAqLworI2RlZmluZSBBREJfSU9QX1NSUQkJMHgwNAkvKiBTUlEgZGV0ZWN0ZWQgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQURCX0lPUF9USU1FT1VUCQkweDAyCS8qIG5vbnplcm8gaWYgdGltZW91dCAgICAgICAgICAqLworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCitzdHJ1Y3QgYWRiX2lvcG1zZyB7CisJX191OCBmbGFnczsJCS8qIEFEQiBmbGFncyAgICAgICAgICovCisJX191OCBjb3VudDsJCS8qIG5vLiBvZiBkYXRhIGJ5dGVzICovCisJX191OCBjbWQ7CQkvKiBBREIgY29tbWFuZCAgICAgICAqLworCV9fdTggZGF0YVs4XTsJCS8qIEFEQiBkYXRhICAgICAgICAgICovCisJX191OCBzcGFyZVsyMV07CQkvKiBzcGFyZSAgICAgICAgICAgICAqLworfTsKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9hbWlnYWh3LmggYi9pbmNsdWRlL2FzbS1tNjhrL2FtaWdhaHcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWU1ZDhkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9hbWlnYWh3LmgKQEAgLTAsMCArMSwzNTQgQEAKKy8qCisqKiBhc20tbTY4ay9hbWlnYWh3LmggLS0gVGhpcyBoZWFkZXIgZGVmaW5lcyBzb21lIG1hY3JvcyBhbmQgcG9pbnRlcnMgZm9yCisqKiAgICAgICAgICAgICAgICAgICAgdGhlIHZhcmlvdXMgQW1pZ2EgY3VzdG9tIGhhcmR3YXJlIHJlZ2lzdGVycy4KKyoqICAgICAgICAgICAgICAgICAgICBUaGUgbmFtaW5nIGNvbnZlbnRpb25zIHVzZWQgaGVyZSBjb25mb3JtIHRvIHRob3NlCisqKiAgICAgICAgICAgICAgICAgICAgdXNlZCBpbiB0aGUgQW1pZ2EgSGFyZHdhcmUgUmVmZXJlbmNlIE1hbnVhbCwgM3JkIEVkaXRpb24KKyoqCisqKiBDb3B5cmlnaHQgMTk5MiBieSBHcmVnIEhhcnAKKyoqCisqKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworKiogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyoqIGZvciBtb3JlIGRldGFpbHMuCisqKgorKiogQ3JlYXRlZDogOS8yNC85MiBieSBHcmVnIEhhcnAKKyovCisKKyNpZm5kZWYgX002OEtfQU1JR0FIV19ICisjZGVmaW5lIF9NNjhLX0FNSUdBSFdfSAorCisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisKKyAgICAvKgorICAgICAqICBEaWZmZXJlbnQgQW1pZ2EgbW9kZWxzCisgICAgICovCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIGFtaWdhX21vZGVsOworCisjZGVmaW5lIEFNSV9VTktOT1dOCSgwKQorI2RlZmluZSBBTUlfNTAwCQkoMSkKKyNkZWZpbmUgQU1JXzUwMFBMVVMJKDIpCisjZGVmaW5lIEFNSV82MDAJCSgzKQorI2RlZmluZSBBTUlfMTAwMAkoNCkKKyNkZWZpbmUgQU1JXzEyMDAJKDUpCisjZGVmaW5lIEFNSV8yMDAwCSg2KQorI2RlZmluZSBBTUlfMjUwMAkoNykKKyNkZWZpbmUgQU1JXzMwMDAJKDgpCisjZGVmaW5lIEFNSV8zMDAwVAkoOSkKKyNkZWZpbmUgQU1JXzMwMDBQTFVTCSgxMCkKKyNkZWZpbmUgQU1JXzQwMDAJKDExKQorI2RlZmluZSBBTUlfNDAwMFQJKDEyKQorI2RlZmluZSBBTUlfQ0RUVgkoMTMpCisjZGVmaW5lIEFNSV9DRDMyCSgxNCkKKyNkZWZpbmUgQU1JX0RSQUNPCSgxNSkKKworCisgICAgLyoKKyAgICAgKiAgQ2hpcHNldHMKKyAgICAgKi8KKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgYW1pZ2FfY2hpcHNldDsKKworI2RlZmluZSBDU19TVE9ORUFHRQkoMCkKKyNkZWZpbmUgQ1NfT0NTCQkoMSkKKyNkZWZpbmUgQ1NfRUNTCQkoMikKKyNkZWZpbmUgQ1NfQUdBCQkoMykKKworCisgICAgLyoKKyAgICAgKiAgTWlzY2VsbGFuZW91cworICAgICAqLworCitleHRlcm4gdW5zaWduZWQgbG9uZyBhbWlnYV9lY2xvY2s7CS8qIDcwMCBrSHogRSBQZXJpcGhlcmFsIENsb2NrICovCitleHRlcm4gdW5zaWduZWQgbG9uZyBhbWlnYV9tYXN0ZXJjbG9jazsJLyogMjggTUh6IE1hc3RlciBDbG9jayAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgYW1pZ2FfY29sb3JjbG9jazsJLyogMy41IE1IeiBDb2xvciBDbG9jayAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgYW1pZ2FfY2hpcF9zaXplOwkvKiBDaGlwIFJBTSBTaXplIChieXRlcykgKi8KK2V4dGVybiB1bnNpZ25lZCBjaGFyIGFtaWdhX3ZibGFuazsJLyogVkJMQU5LIEZyZXF1ZW5jeSAqLworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgYW1pZ2FfcHNmcmVxOwkvKiBQb3dlciBTdXBwbHkgRnJlcXVlbmN5ICovCisKKworI2RlZmluZSBBTUlHQUhXX0RFQ0xBUkUobmFtZSkJdW5zaWduZWQgbmFtZSA6IDEKKyNkZWZpbmUgQU1JR0FIV19TRVQobmFtZSkJKGFtaWdhX2h3X3ByZXNlbnQubmFtZSA9IDEpCisjZGVmaW5lIEFNSUdBSFdfUFJFU0VOVChuYW1lKQkoYW1pZ2FfaHdfcHJlc2VudC5uYW1lKQorCitzdHJ1Y3QgYW1pZ2FfaHdfcHJlc2VudCB7CisgICAgLyogdmlkZW8gaGFyZHdhcmUgKi8KKyAgICBBTUlHQUhXX0RFQ0xBUkUoQU1JX1ZJREVPKTsJCS8qIEFtaWdhIFZpZGVvICovCisgICAgQU1JR0FIV19ERUNMQVJFKEFNSV9CTElUVEVSKTsJLyogQW1pZ2EgQmxpdHRlciAqLworICAgIEFNSUdBSFdfREVDTEFSRShBTUJFUl9GRik7CQkvKiBBbWJlciBGbGlja2VyIEZpeGVyICovCisgICAgLyogc291bmQgaGFyZHdhcmUgKi8KKyAgICBBTUlHQUhXX0RFQ0xBUkUoQU1JX0FVRElPKTsJCS8qIEFtaWdhIEF1ZGlvICovCisgICAgLyogZGlzayBzdG9yYWdlIGludGVyZmFjZXMgKi8KKyAgICBBTUlHQUhXX0RFQ0xBUkUoQU1JX0ZMT1BQWSk7CS8qIEFtaWdhIEZsb3BweSAqLworICAgIEFNSUdBSFdfREVDTEFSRShBMzAwMF9TQ1NJKTsJLyogU0NTSSAod2QzM2M5MywgQTMwMDAgYWxpa2UpICovCisgICAgQU1JR0FIV19ERUNMQVJFKEE0MDAwX1NDU0kpOwkvKiBTQ1NJIChuY3I1M2M3MTAsIEE0MDAwVCBhbGlrZSkgKi8KKyAgICBBTUlHQUhXX0RFQ0xBUkUoQTEyMDBfSURFKTsJCS8qIElERSAoQTEyMDAgYWxpa2UpICovCisgICAgQU1JR0FIV19ERUNMQVJFKEE0MDAwX0lERSk7CQkvKiBJREUgKEE0MDAwIGFsaWtlKSAqLworICAgIEFNSUdBSFdfREVDTEFSRShDRF9ST00pOwkJLyogQ0QgUk9NIGRyaXZlICovCisgICAgLyogb3RoZXIgSS9PIGhhcmR3YXJlICovCisgICAgQU1JR0FIV19ERUNMQVJFKEFNSV9LRVlCT0FSRCk7CS8qIEFtaWdhIEtleWJvYXJkICovCisgICAgQU1JR0FIV19ERUNMQVJFKEFNSV9NT1VTRSk7CQkvKiBBbWlnYSBNb3VzZSAqLworICAgIEFNSUdBSFdfREVDTEFSRShBTUlfU0VSSUFMKTsJLyogQW1pZ2EgU2VyaWFsICovCisgICAgQU1JR0FIV19ERUNMQVJFKEFNSV9QQVJBTExFTCk7CS8qIEFtaWdhIFBhcmFsbGVsICovCisgICAgLyogcmVhbCB0aW1lIGNsb2NrcyAqLworICAgIEFNSUdBSFdfREVDTEFSRShBMjAwMF9DTEspOwkJLyogSGFyZHdhcmUgQ2xvY2sgKEEyMDAwIGFsaWtlKSAqLworICAgIEFNSUdBSFdfREVDTEFSRShBMzAwMF9DTEspOwkJLyogSGFyZHdhcmUgQ2xvY2sgKEEzMDAwIGFsaWtlKSAqLworICAgIC8qIHN1cHBvcnRpbmcgaGFyZHdhcmUgKi8KKyAgICBBTUlHQUhXX0RFQ0xBUkUoQ0hJUF9SQU0pOwkJLyogQ2hpcCBSQU0gKi8KKyAgICBBTUlHQUhXX0RFQ0xBUkUoUEFVTEEpOwkJLyogUGF1bGEgKDgzNjQpICovCisgICAgQU1JR0FIV19ERUNMQVJFKERFTklTRSk7CQkvKiBEZW5pc2UgKDgzNjIpICovCisgICAgQU1JR0FIV19ERUNMQVJFKERFTklTRV9IUik7CQkvKiBEZW5pc2UgKDgzNzMpICovCisgICAgQU1JR0FIV19ERUNMQVJFKExJU0EpOwkJLyogTGlzYSAoODM3NSkgKi8KKyAgICBBTUlHQUhXX0RFQ0xBUkUoQUdOVVNfUEFMKTsJCS8qIE5vcm1hbC9GYXQgUEFMIEFnbnVzICg4MzY3LzgzNzEpICovCisgICAgQU1JR0FIV19ERUNMQVJFKEFHTlVTX05UU0MpOwkvKiBOb3JtYWwvRmF0IE5UU0MgQWdudXMgKDgzNjEvODM3MCkgKi8KKyAgICBBTUlHQUhXX0RFQ0xBUkUoQUdOVVNfSFJfUEFMKTsJLyogRmF0IEhpcmVzIFBBTCBBZ251cyAoODM3MikgKi8KKyAgICBBTUlHQUhXX0RFQ0xBUkUoQUdOVVNfSFJfTlRTQyk7CS8qIEZhdCBIaXJlcyBOVFNDIEFnbnVzICg4MzcyKSAqLworICAgIEFNSUdBSFdfREVDTEFSRShBTElDRV9QQUwpOwkJLyogUEFMIEFsaWNlICg4Mzc0KSAqLworICAgIEFNSUdBSFdfREVDTEFSRShBTElDRV9OVFNDKTsJLyogTlRTQyBBbGljZSAoODM3NCkgKi8KKyAgICBBTUlHQUhXX0RFQ0xBUkUoTUFHSUNfUkVLSUNLKTsJLyogQTMwMDAgTWFnaWMgSGFyZCBSZWtpY2sgKi8KKyAgICBBTUlHQUhXX0RFQ0xBUkUoUENNQ0lBKTsJCS8qIFBDTUNJQSBTbG90ICovCisgICAgQU1JR0FIV19ERUNMQVJFKEdHMl9JU0EpOwkJLyogR0cyIFpvcnJvMklTQSBCcmlkZ2UgKi8KKyAgICBBTUlHQUhXX0RFQ0xBUkUoWk9SUk8pOwkJLyogWm9ycm8gQXV0b0NvbmZpZyAqLworICAgIEFNSUdBSFdfREVDTEFSRShaT1JSTzMpOwkJLyogWm9ycm8gSUlJICovCit9OworCitleHRlcm4gc3RydWN0IGFtaWdhX2h3X3ByZXNlbnQgYW1pZ2FfaHdfcHJlc2VudDsKKworc3RydWN0IENVU1RPTSB7CisgICAgdW5zaWduZWQgc2hvcnQgYmx0ZGRhdDsKKyAgICB1bnNpZ25lZCBzaG9ydCBkbWFjb25yOworICAgIHVuc2lnbmVkIHNob3J0IHZwb3NyOworICAgIHVuc2lnbmVkIHNob3J0IHZocG9zcjsKKyAgICB1bnNpZ25lZCBzaG9ydCBkc2tkYXRyOworICAgIHVuc2lnbmVkIHNob3J0IGpveTBkYXQ7CisgICAgdW5zaWduZWQgc2hvcnQgam95MWRhdDsKKyAgICB1bnNpZ25lZCBzaG9ydCBjbHhkYXQ7CisgICAgdW5zaWduZWQgc2hvcnQgYWRrY29ucjsKKyAgICB1bnNpZ25lZCBzaG9ydCBwb3QwZGF0OworICAgIHVuc2lnbmVkIHNob3J0IHBvdDFkYXQ7CisgICAgdW5zaWduZWQgc2hvcnQgcG90Z29yOworICAgIHVuc2lnbmVkIHNob3J0IHNlcmRhdHI7CisgICAgdW5zaWduZWQgc2hvcnQgZHNrYnl0cjsKKyAgICB1bnNpZ25lZCBzaG9ydCBpbnRlbmFyOworICAgIHVuc2lnbmVkIHNob3J0IGludHJlcXI7CisgICAgdW5zaWduZWQgY2hhciAgKmRza3B0cjsKKyAgICB1bnNpZ25lZCBzaG9ydCBkc2tsZW47CisgICAgdW5zaWduZWQgc2hvcnQgZHNrZGF0OworICAgIHVuc2lnbmVkIHNob3J0IHJlZnB0cjsKKyAgICB1bnNpZ25lZCBzaG9ydCB2cG9zdzsKKyAgICB1bnNpZ25lZCBzaG9ydCB2aHBvc3c7CisgICAgdW5zaWduZWQgc2hvcnQgY29wY29uOworICAgIHVuc2lnbmVkIHNob3J0IHNlcmRhdDsKKyAgICB1bnNpZ25lZCBzaG9ydCBzZXJwZXI7CisgICAgdW5zaWduZWQgc2hvcnQgcG90Z287CisgICAgdW5zaWduZWQgc2hvcnQgam95dGVzdDsKKyAgICB1bnNpZ25lZCBzaG9ydCBzdHJlcXU7CisgICAgdW5zaWduZWQgc2hvcnQgc3RydmJsOworICAgIHVuc2lnbmVkIHNob3J0IHN0cmhvcjsKKyAgICB1bnNpZ25lZCBzaG9ydCBzdHJsb25nOworICAgIHVuc2lnbmVkIHNob3J0IGJsdGNvbjA7CisgICAgdW5zaWduZWQgc2hvcnQgYmx0Y29uMTsKKyAgICB1bnNpZ25lZCBzaG9ydCBibHRhZndtOworICAgIHVuc2lnbmVkIHNob3J0IGJsdGFsd207CisgICAgdW5zaWduZWQgY2hhciAgKmJsdGNwdDsKKyAgICB1bnNpZ25lZCBjaGFyICAqYmx0YnB0OworICAgIHVuc2lnbmVkIGNoYXIgICpibHRhcHQ7CisgICAgdW5zaWduZWQgY2hhciAgKmJsdGRwdDsKKyAgICB1bnNpZ25lZCBzaG9ydCBibHRzaXplOworICAgIHVuc2lnbmVkIGNoYXIgIHBhZDJkOworICAgIHVuc2lnbmVkIGNoYXIgIGJsdGNvbjBsOworICAgIHVuc2lnbmVkIHNob3J0IGJsdHNpenY7CisgICAgdW5zaWduZWQgc2hvcnQgYmx0c2l6aDsKKyAgICB1bnNpZ25lZCBzaG9ydCBibHRjbW9kOworICAgIHVuc2lnbmVkIHNob3J0IGJsdGJtb2Q7CisgICAgdW5zaWduZWQgc2hvcnQgYmx0YW1vZDsKKyAgICB1bnNpZ25lZCBzaG9ydCBibHRkbW9kOworICAgIHVuc2lnbmVkIHNob3J0IHNwYXJlMls0XTsKKyAgICB1bnNpZ25lZCBzaG9ydCBibHRjZGF0OworICAgIHVuc2lnbmVkIHNob3J0IGJsdGJkYXQ7CisgICAgdW5zaWduZWQgc2hvcnQgYmx0YWRhdDsKKyAgICB1bnNpZ25lZCBzaG9ydCBzcGFyZTNbM107CisgICAgdW5zaWduZWQgc2hvcnQgZGVuaXNlaWQ7CisgICAgdW5zaWduZWQgc2hvcnQgZHNrc3luYzsKKyAgICB1bnNpZ25lZCBzaG9ydCAqY29wMWxjOworICAgIHVuc2lnbmVkIHNob3J0ICpjb3AybGM7CisgICAgdW5zaWduZWQgc2hvcnQgY29wam1wMTsKKyAgICB1bnNpZ25lZCBzaG9ydCBjb3BqbXAyOworICAgIHVuc2lnbmVkIHNob3J0IGNvcGluczsKKyAgICB1bnNpZ25lZCBzaG9ydCBkaXdzdHJ0OworICAgIHVuc2lnbmVkIHNob3J0IGRpd3N0b3A7CisgICAgdW5zaWduZWQgc2hvcnQgZGRmc3RydDsKKyAgICB1bnNpZ25lZCBzaG9ydCBkZGZzdG9wOworICAgIHVuc2lnbmVkIHNob3J0IGRtYWNvbjsKKyAgICB1bnNpZ25lZCBzaG9ydCBjbHhjb247CisgICAgdW5zaWduZWQgc2hvcnQgaW50ZW5hOworICAgIHVuc2lnbmVkIHNob3J0IGludHJlcTsKKyAgICB1bnNpZ25lZCBzaG9ydCBhZGtjb247CisgICAgc3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydAkqYXVkbGM7CisJdW5zaWduZWQgc2hvcnQgYXVkbGVuOworCXVuc2lnbmVkIHNob3J0IGF1ZHBlcjsKKwl1bnNpZ25lZCBzaG9ydCBhdWR2b2w7CisJdW5zaWduZWQgc2hvcnQgYXVkZGF0OworCXVuc2lnbmVkIHNob3J0IGF1ZHNwYXJlWzJdOworICAgIH0gYXVkWzRdOworICAgIHVuc2lnbmVkIGNoYXIgICpicGxwdFs4XTsKKyAgICB1bnNpZ25lZCBzaG9ydCBicGxjb24wOworICAgIHVuc2lnbmVkIHNob3J0IGJwbGNvbjE7CisgICAgdW5zaWduZWQgc2hvcnQgYnBsY29uMjsKKyAgICB1bnNpZ25lZCBzaG9ydCBicGxjb24zOworICAgIHVuc2lnbmVkIHNob3J0IGJwbDFtb2Q7CisgICAgdW5zaWduZWQgc2hvcnQgYnBsMm1vZDsKKyAgICB1bnNpZ25lZCBzaG9ydCBicGxjb240OworICAgIHVuc2lnbmVkIHNob3J0IGNseGNvbjI7CisgICAgdW5zaWduZWQgc2hvcnQgYnBsZGF0WzhdOworICAgIHVuc2lnbmVkIGNoYXIgICpzcHJwdFs4XTsKKyAgICBzdHJ1Y3QgeworCXVuc2lnbmVkIHNob3J0IHBvczsKKwl1bnNpZ25lZCBzaG9ydCBjdGw7CisJdW5zaWduZWQgc2hvcnQgZGF0YWE7CisJdW5zaWduZWQgc2hvcnQgZGF0YWI7CisgICAgfSBzcHJbOF07CisgICAgdW5zaWduZWQgc2hvcnQgY29sb3JbMzJdOworICAgIHVuc2lnbmVkIHNob3J0IGh0b3RhbDsKKyAgICB1bnNpZ25lZCBzaG9ydCBoc3N0b3A7CisgICAgdW5zaWduZWQgc2hvcnQgaGJzdHJ0OworICAgIHVuc2lnbmVkIHNob3J0IGhic3RvcDsKKyAgICB1bnNpZ25lZCBzaG9ydCB2dG90YWw7CisgICAgdW5zaWduZWQgc2hvcnQgdnNzdG9wOworICAgIHVuc2lnbmVkIHNob3J0IHZic3RydDsKKyAgICB1bnNpZ25lZCBzaG9ydCB2YnN0b3A7CisgICAgdW5zaWduZWQgc2hvcnQgc3ByaHN0cnQ7CisgICAgdW5zaWduZWQgc2hvcnQgc3ByaHN0b3A7CisgICAgdW5zaWduZWQgc2hvcnQgYnBsaHN0cnQ7CisgICAgdW5zaWduZWQgc2hvcnQgYnBsaHN0b3A7CisgICAgdW5zaWduZWQgc2hvcnQgaGhwb3N3OworICAgIHVuc2lnbmVkIHNob3J0IGhocG9zcjsKKyAgICB1bnNpZ25lZCBzaG9ydCBiZWFtY29uMDsKKyAgICB1bnNpZ25lZCBzaG9ydCBoc3N0cnQ7CisgICAgdW5zaWduZWQgc2hvcnQgdnNzdHJ0OworICAgIHVuc2lnbmVkIHNob3J0IGhjZW50ZXI7CisgICAgdW5zaWduZWQgc2hvcnQgZGl3aGlnaDsKKyAgICB1bnNpZ25lZCBzaG9ydCBzcGFyZTRbMTFdOworICAgIHVuc2lnbmVkIHNob3J0IGZtb2RlOworfTsKKworLyoKKyAqIERNQSByZWdpc3RlciBiaXRzCisgKi8KKyNkZWZpbmUgRE1BRl9TRVRDTFIJCSgweDgwMDApCisjZGVmaW5lIERNQUZfQVVEMAkJKDB4MDAwMSkKKyNkZWZpbmUgRE1BRl9BVUQxCQkoMHgwMDAyKQorI2RlZmluZSBETUFGX0FVRDIJCSgweDAwMDQpCisjZGVmaW5lIERNQUZfQVVEMwkJKDB4MDAwOCkKKyNkZWZpbmUgRE1BRl9ESVNLCQkoMHgwMDEwKQorI2RlZmluZSBETUFGX1NQUklURQkJKDB4MDAyMCkKKyNkZWZpbmUgRE1BRl9CTElUVEVSCQkoMHgwMDQwKQorI2RlZmluZSBETUFGX0NPUFBFUgkJKDB4MDA4MCkKKyNkZWZpbmUgRE1BRl9SQVNURVIJCSgweDAxMDApCisjZGVmaW5lIERNQUZfTUFTVEVSCQkoMHgwMjAwKQorI2RlZmluZSBETUFGX0JMSVRIT0cJCSgweDA0MDApCisjZGVmaW5lIERNQUZfQkxUTlpFUk8JCSgweDIwMDApCisjZGVmaW5lIERNQUZfQkxURE9ORQkJKDB4NDAwMCkKKyNkZWZpbmUgRE1BRl9BTEwJCSgweDAxRkYpCisKK3N0cnVjdCBDSUEgeworICAgIHVuc2lnbmVkIGNoYXIgcHJhOwkJY2hhciBwYWQwWzB4ZmZdOworICAgIHVuc2lnbmVkIGNoYXIgcHJiOwkJY2hhciBwYWQxWzB4ZmZdOworICAgIHVuc2lnbmVkIGNoYXIgZGRyYTsJCWNoYXIgcGFkMlsweGZmXTsKKyAgICB1bnNpZ25lZCBjaGFyIGRkcmI7CQljaGFyIHBhZDNbMHhmZl07CisgICAgdW5zaWduZWQgY2hhciB0YWxvOwkJY2hhciBwYWQ0WzB4ZmZdOworICAgIHVuc2lnbmVkIGNoYXIgdGFoaTsJCWNoYXIgcGFkNVsweGZmXTsKKyAgICB1bnNpZ25lZCBjaGFyIHRibG87CQljaGFyIHBhZDZbMHhmZl07CisgICAgdW5zaWduZWQgY2hhciB0YmhpOwkJY2hhciBwYWQ3WzB4ZmZdOworICAgIHVuc2lnbmVkIGNoYXIgdG9kbG87CWNoYXIgcGFkOFsweGZmXTsKKyAgICB1bnNpZ25lZCBjaGFyIHRvZG1pZDsJY2hhciBwYWQ5WzB4ZmZdOworICAgIHVuc2lnbmVkIGNoYXIgdG9kaGk7CWNoYXIgcGFkYVsweDFmZl07CisgICAgdW5zaWduZWQgY2hhciBzZHI7CQljaGFyIHBhZGJbMHhmZl07CisgICAgdW5zaWduZWQgY2hhciBpY3I7CQljaGFyIHBhZGNbMHhmZl07CisgICAgdW5zaWduZWQgY2hhciBjcmE7CQljaGFyIHBhZGRbMHhmZl07CisgICAgdW5zaWduZWQgY2hhciBjcmI7CQljaGFyIHBhZGVbMHhmZl07Cit9OworCisjZGVmaW5lIHpUd29CYXNlICgweDgwMDAwMDAwKQorI2RlZmluZSBaVFdPX1BBRERSKHgpICgoKHVuc2lnbmVkIGxvbmcpKHgpKS16VHdvQmFzZSkKKyNkZWZpbmUgWlRXT19WQUREUih4KSAoKCh1bnNpZ25lZCBsb25nKSh4KSkrelR3b0Jhc2UpCisKKyNkZWZpbmUgQ1VTVE9NX1BIWVNBRERSICAgICAoMHhkZmYwMDApCisjZGVmaW5lIGN1c3RvbSAoKCoodm9sYXRpbGUgc3RydWN0IENVU1RPTSAqKSh6VHdvQmFzZStDVVNUT01fUEhZU0FERFIpKSkKKworI2RlZmluZSBDSUFBX1BIWVNBRERSCSAgKDB4YmZlMDAxKQorI2RlZmluZSBDSUFCX1BIWVNBRERSCSAgKDB4YmZkMDAwKQorI2RlZmluZSBjaWFhICAgKCgqKHZvbGF0aWxlIHN0cnVjdCBDSUEgKikoelR3b0Jhc2UgKyBDSUFBX1BIWVNBRERSKSkpCisjZGVmaW5lIGNpYWIgICAoKCoodm9sYXRpbGUgc3RydWN0IENJQSAqKSh6VHdvQmFzZSArIENJQUJfUEhZU0FERFIpKSkKKworI2RlZmluZSBDSElQX1BIWVNBRERSCSAgICAoMHgwMDAwMDApCisKK3ZvaWQgYW1pZ2FfY2hpcF9pbml0ICh2b2lkKTsKK3ZvaWQgKmFtaWdhX2NoaXBfYWxsb2ModW5zaWduZWQgbG9uZyBzaXplLCBjb25zdCBjaGFyICpuYW1lKTsKK3ZvaWQgKmFtaWdhX2NoaXBfYWxsb2NfcmVzKHVuc2lnbmVkIGxvbmcgc2l6ZSwgc3RydWN0IHJlc291cmNlICpyZXMpOwordm9pZCBhbWlnYV9jaGlwX2ZyZWUodm9pZCAqcHRyKTsKK3Vuc2lnbmVkIGxvbmcgYW1pZ2FfY2hpcF9hdmFpbCggdm9pZCApOyAvKk1JTEFOKi8KK2V4dGVybiB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBhbWlnYV9hdWRpb19taW5fcGVyaW9kOworCitzdGF0aWMgaW5saW5lIHZvaWQgYW1pZmJfdmlkZW9fb2ZmKHZvaWQpCit7CisJaWYgKGFtaWdhX2NoaXBzZXQgPT0gQ1NfRUNTIHx8IGFtaWdhX2NoaXBzZXQgPT0gQ1NfQUdBKSB7CisJCS8qIHByb2dyYW0gRGVuaXNlL0xpc2EgZm9yIGEgaGlnaGVyIG1heGltdW0gcGxheSByYXRlICovCisJCWN1c3RvbS5odG90YWwgPSAxMTM7ICAgICAgICAvKiAzMSBrSHogKi8KKwkJY3VzdG9tLnZ0b3RhbCA9IDIyMzsgICAgICAgIC8qIDcwIEh6ICovCisJCWN1c3RvbS5iZWFtY29uMCA9IDB4NDM5MDsgICAvKiBIQVJERElTLCBWQVJ7QkVBTSxWU1ksSFNZLENTWX1FTiAqLworCQkvKiBzdXNwZW5kIHRoZSBtb25pdG9yICovCisJCWN1c3RvbS5oc3N0cnQgPSBjdXN0b20uaHNzdG9wID0gMTE2OworCQljdXN0b20udnNzdHJ0ID0gY3VzdG9tLnZzc3RvcCA9IDIyNjsKKwkJYW1pZ2FfYXVkaW9fbWluX3BlcmlvZCA9IDU3OworCX0KK30KKworc3RydWN0IHRvZDMwMDAgeworICB1bnNpZ25lZCBpbnQgIDoyOCwgc2Vjb25kMjo0OwkvKiBsb3dlciBkaWdpdCAqLworICB1bnNpZ25lZCBpbnQgIDoyOCwgc2Vjb25kMTo0OwkvKiB1cHBlciBkaWdpdCAqLworICB1bnNpZ25lZCBpbnQgIDoyOCwgbWludXRlMjo0OwkvKiBsb3dlciBkaWdpdCAqLworICB1bnNpZ25lZCBpbnQgIDoyOCwgbWludXRlMTo0OwkvKiB1cHBlciBkaWdpdCAqLworICB1bnNpZ25lZCBpbnQgIDoyOCwgaG91cjI6NDsJLyogbG93ZXIgZGlnaXQgKi8KKyAgdW5zaWduZWQgaW50ICA6MjgsIGhvdXIxOjQ7CS8qIHVwcGVyIGRpZ2l0ICovCisgIHVuc2lnbmVkIGludCAgOjI4LCB3ZWVrZGF5OjQ7CisgIHVuc2lnbmVkIGludCAgOjI4LCBkYXkyOjQ7CS8qIGxvd2VyIGRpZ2l0ICovCisgIHVuc2lnbmVkIGludCAgOjI4LCBkYXkxOjQ7CS8qIHVwcGVyIGRpZ2l0ICovCisgIHVuc2lnbmVkIGludCAgOjI4LCBtb250aDI6NDsJLyogbG93ZXIgZGlnaXQgKi8KKyAgdW5zaWduZWQgaW50ICA6MjgsIG1vbnRoMTo0OwkvKiB1cHBlciBkaWdpdCAqLworICB1bnNpZ25lZCBpbnQgIDoyOCwgeWVhcjI6NDsJLyogbG93ZXIgZGlnaXQgKi8KKyAgdW5zaWduZWQgaW50ICA6MjgsIHllYXIxOjQ7CS8qIHVwcGVyIGRpZ2l0ICovCisgIHVuc2lnbmVkIGludCAgOjI4LCBjbnRybDE6NDsJLyogY29udHJvbC1ieXRlIDEgKi8KKyAgdW5zaWduZWQgaW50ICA6MjgsIGNudHJsMjo0OwkvKiBjb250cm9sLWJ5dGUgMiAqLworICB1bnNpZ25lZCBpbnQgIDoyOCwgY250cmwzOjQ7CS8qIGNvbnRyb2wtYnl0ZSAzICovCit9OworI2RlZmluZSBUT0QzMDAwX0NOVFJMMV9IT0xECTAKKyNkZWZpbmUgVE9EMzAwMF9DTlRSTDFfRlJFRQk5CisjZGVmaW5lIHRvZF8zMDAwICgoKih2b2xhdGlsZSBzdHJ1Y3QgdG9kMzAwMCAqKSh6VHdvQmFzZSsweERDMDAwMCkpKQorCitzdHJ1Y3QgdG9kMjAwMCB7CisgIHVuc2lnbmVkIGludCAgOjI4LCBzZWNvbmQyOjQ7CS8qIGxvd2VyIGRpZ2l0ICovCisgIHVuc2lnbmVkIGludCAgOjI4LCBzZWNvbmQxOjQ7CS8qIHVwcGVyIGRpZ2l0ICovCisgIHVuc2lnbmVkIGludCAgOjI4LCBtaW51dGUyOjQ7CS8qIGxvd2VyIGRpZ2l0ICovCisgIHVuc2lnbmVkIGludCAgOjI4LCBtaW51dGUxOjQ7CS8qIHVwcGVyIGRpZ2l0ICovCisgIHVuc2lnbmVkIGludCAgOjI4LCBob3VyMjo0OwkvKiBsb3dlciBkaWdpdCAqLworICB1bnNpZ25lZCBpbnQgIDoyOCwgaG91cjE6NDsJLyogdXBwZXIgZGlnaXQgKi8KKyAgdW5zaWduZWQgaW50ICA6MjgsIGRheTI6NDsJLyogbG93ZXIgZGlnaXQgKi8KKyAgdW5zaWduZWQgaW50ICA6MjgsIGRheTE6NDsJLyogdXBwZXIgZGlnaXQgKi8KKyAgdW5zaWduZWQgaW50ICA6MjgsIG1vbnRoMjo0OwkvKiBsb3dlciBkaWdpdCAqLworICB1bnNpZ25lZCBpbnQgIDoyOCwgbW9udGgxOjQ7CS8qIHVwcGVyIGRpZ2l0ICovCisgIHVuc2lnbmVkIGludCAgOjI4LCB5ZWFyMjo0OwkvKiBsb3dlciBkaWdpdCAqLworICB1bnNpZ25lZCBpbnQgIDoyOCwgeWVhcjE6NDsJLyogdXBwZXIgZGlnaXQgKi8KKyAgdW5zaWduZWQgaW50ICA6MjgsIHdlZWtkYXk6NDsKKyAgdW5zaWduZWQgaW50ICA6MjgsIGNudHJsMTo0OwkvKiBjb250cm9sLWJ5dGUgMSAqLworICB1bnNpZ25lZCBpbnQgIDoyOCwgY250cmwyOjQ7CS8qIGNvbnRyb2wtYnl0ZSAyICovCisgIHVuc2lnbmVkIGludCAgOjI4LCBjbnRybDM6NDsJLyogY29udHJvbC1ieXRlIDMgKi8KK307CisKKyNkZWZpbmUgVE9EMjAwMF9DTlRSTDFfSE9MRAkoMTw8MCkKKyNkZWZpbmUgVE9EMjAwMF9DTlRSTDFfQlVTWQkoMTw8MSkKKyNkZWZpbmUgVE9EMjAwMF9DTlRSTDNfMjRITU9ERQkoMTw8MikKKyNkZWZpbmUgVE9EMjAwMF9IT1VSMV9QTQkoMTw8MikKKyNkZWZpbmUgdG9kXzIwMDAgKCgqKHZvbGF0aWxlIHN0cnVjdCB0b2QyMDAwICopKHpUd29CYXNlKzB4REMwMDAwKSkpCisKKyNlbmRpZiAvKiBfTTY4S19BTUlHQUhXX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvYW1pZ2FpbnRzLmggYi9pbmNsdWRlL2FzbS1tNjhrL2FtaWdhaW50cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhZmY0Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2FtaWdhaW50cy5oCkBAIC0wLDAgKzEsMTMzIEBACisvKgorKiogYW1pZ2FpbnRzLmggLS0gQW1pZ2EgTGludXggaW50ZXJydXB0IGhhbmRsaW5nIHN0cnVjdHMgYW5kIHByb3RvdHlwZXMKKyoqCisqKiBDb3B5cmlnaHQgMTk5MiBieSBHcmVnIEhhcnAKKyoqCisqKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworKiogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyoqIGZvciBtb3JlIGRldGFpbHMuCisqKgorKiogQ3JlYXRlZCAxMC8yLzkyIGJ5IEdyZWcgSGFycAorKi8KKworI2lmbmRlZiBfQVNNbTY4a19BTUlHQUlOVFNfSF8KKyNkZWZpbmUgX0FTTW02OGtfQU1JR0FJTlRTX0hfCisKKy8qCisqKiBBbWlnYSBJbnRlcnJ1cHQgc291cmNlcy4KKyoqCisqLworCisjZGVmaW5lIEFVVE9fSVJRUyAgICAgICAgICAgKDgpCisjZGVmaW5lIEFNSV9TVERfSVJRUyAgICAgICAgKDE0KQorI2RlZmluZSBDSUFfSVJRUyAgICAgICAgICAgICg1KQorI2RlZmluZSBBTUlfSVJRUyAgICAgICAgICAgICgzMikgLyogQVVUT19JUlFTK0FNSV9TVERfSVJRUysyKkNJQV9JUlFTICovCisKKy8qIHZlcnRpY2FsIGJsYW5raW5nIGludGVycnVwdCAqLworI2RlZmluZSBJUlFfQU1JR0FfVkVSVEIgICAgIDAKKworLyogY29wcGVyIGludGVycnVwdCAqLworI2RlZmluZSBJUlFfQU1JR0FfQ09QUEVSICAgIDEKKworLyogQXVkaW8gaW50ZXJydXB0cyAqLworI2RlZmluZSBJUlFfQU1JR0FfQVVEMAkgICAgMgorI2RlZmluZSBJUlFfQU1JR0FfQVVEMQkgICAgMworI2RlZmluZSBJUlFfQU1JR0FfQVVEMgkgICAgNAorI2RlZmluZSBJUlFfQU1JR0FfQVVEMwkgICAgNQorCisvKiBCbGl0dGVyIGRvbmUgaW50ZXJydXB0ICovCisjZGVmaW5lIElSUV9BTUlHQV9CTElUCSAgICA2CisKKy8qIGZsb3BweSBkaXNrIGludGVycnVwdHMgKi8KKyNkZWZpbmUgSVJRX0FNSUdBX0RTS1NZTiAgICA3CisjZGVmaW5lIElSUV9BTUlHQV9EU0tCTEsgICAgOAorCisvKiBidWlsdGluIHNlcmlhbCBwb3J0IGludGVycnVwdHMgKi8KKyNkZWZpbmUgSVJRX0FNSUdBX1JCRgkgICAgOQorI2RlZmluZSBJUlFfQU1JR0FfVEJFCSAgICAxMAorCisvKiBzb2Z0d2FyZSBpbnRlcnJ1cHRzICovCisjZGVmaW5lIElSUV9BTUlHQV9TT0ZUICAgICAgMTEKKworLyogaW50ZXJydXB0cyBmcm9tIGV4dGVybmFsIGhhcmR3YXJlICovCisjZGVmaW5lIElSUV9BTUlHQV9QT1JUUwkgICAgMTIKKyNkZWZpbmUgSVJRX0FNSUdBX0VYVEVSCSAgICAxMworCisvKiBDSUEgaW50ZXJydXB0IHNvdXJjZXMgKi8KKyNkZWZpbmUgSVJRX0FNSUdBX0NJQUEgICAgICAxNAorI2RlZmluZSBJUlFfQU1JR0FfQ0lBQV9UQSAgIDE0CisjZGVmaW5lIElSUV9BTUlHQV9DSUFBX1RCICAgMTUKKyNkZWZpbmUgSVJRX0FNSUdBX0NJQUFfQUxSTSAxNgorI2RlZmluZSBJUlFfQU1JR0FfQ0lBQV9TUCAgIDE3CisjZGVmaW5lIElSUV9BTUlHQV9DSUFBX0ZMRyAgMTgKKyNkZWZpbmUgSVJRX0FNSUdBX0NJQUIgICAgICAxOQorI2RlZmluZSBJUlFfQU1JR0FfQ0lBQl9UQSAgIDE5CisjZGVmaW5lIElSUV9BTUlHQV9DSUFCX1RCICAgMjAKKyNkZWZpbmUgSVJRX0FNSUdBX0NJQUJfQUxSTSAyMQorI2RlZmluZSBJUlFfQU1JR0FfQ0lBQl9TUCAgIDIyCisjZGVmaW5lIElSUV9BTUlHQV9DSUFCX0ZMRyAgMjMKKworLyogYXV0by12ZWN0b3IgaW50ZXJydXB0cyAqLworI2RlZmluZSBJUlFfQU1JR0FfQVVUTyAgICAgIDI0CisjZGVmaW5lIElSUV9BTUlHQV9BVVRPXzAgICAgMjQgLyogVGhpcyBpcyBqdXN0IGEgZHVtbXkgKi8KKyNkZWZpbmUgSVJRX0FNSUdBX0FVVE9fMSAgICAyNQorI2RlZmluZSBJUlFfQU1JR0FfQVVUT18yICAgIDI2CisjZGVmaW5lIElSUV9BTUlHQV9BVVRPXzMgICAgMjcKKyNkZWZpbmUgSVJRX0FNSUdBX0FVVE9fNCAgICAyOAorI2RlZmluZSBJUlFfQU1JR0FfQVVUT181ICAgIDI5CisjZGVmaW5lIElSUV9BTUlHQV9BVVRPXzYgICAgMzAKKyNkZWZpbmUgSVJRX0FNSUdBX0FVVE9fNyAgICAzMQorCisjZGVmaW5lIElSUV9GTE9QUFkJICAgIElSUV9BTUlHQV9EU0tCTEsKKworLyogSU5UUkVRUiBtYXNrcyAqLworI2RlZmluZSBJUlExX01BU0sgICAweDAwMDcJLyogSU5UUkVRUiBtYXNrIGZvciBJUlEgMSAqLworI2RlZmluZSBJUlEyX01BU0sgICAweDAwMDgJLyogSU5UUkVRUiBtYXNrIGZvciBJUlEgMiAqLworI2RlZmluZSBJUlEzX01BU0sgICAweDAwNzAJLyogSU5UUkVRUiBtYXNrIGZvciBJUlEgMyAqLworI2RlZmluZSBJUlE0X01BU0sgICAweDA3ODAJLyogSU5UUkVRUiBtYXNrIGZvciBJUlEgNCAqLworI2RlZmluZSBJUlE1X01BU0sgICAweDE4MDAJLyogSU5UUkVRUiBtYXNrIGZvciBJUlEgNSAqLworI2RlZmluZSBJUlE2X01BU0sgICAweDIwMDAJLyogSU5UUkVRUiBtYXNrIGZvciBJUlEgNiAqLworI2RlZmluZSBJUlE3X01BU0sgICAweDQwMDAJLyogSU5UUkVRUiBtYXNrIGZvciBJUlEgNyAqLworCisjZGVmaW5lIElGX1NFVENMUiAgIDB4ODAwMCAgICAgIC8qIHNldC9jbHIgYml0ICovCisjZGVmaW5lIElGX0lOVEVOICAgIDB4NDAwMAkvKiBtYXN0ZXIgaW50ZXJydXB0IGJpdCBpbiBJTlQqIHJlZ2lzdGVycyAqLworI2RlZmluZSBJRl9FWFRFUiAgICAweDIwMDAJLyogZXh0ZXJuYWwgbGV2ZWwgNiBhbmQgQ0lBIEIgaW50ZXJydXB0ICovCisjZGVmaW5lIElGX0RTS1NZTiAgIDB4MTAwMAkvKiBkaXNrIHN5bmMgaW50ZXJydXB0ICovCisjZGVmaW5lIElGX1JCRgkgICAgMHgwODAwCS8qIHNlcmlhbCByZWNlaXZlIGJ1ZmZlciBmdWxsIGludGVycnVwdCAqLworI2RlZmluZSBJRl9BVUQzICAgICAweDA0MDAJLyogYXVkaW8gY2hhbm5lbCAzIGRvbmUgaW50ZXJydXB0ICovCisjZGVmaW5lIElGX0FVRDIgICAgIDB4MDIwMAkvKiBhdWRpbyBjaGFubmVsIDIgZG9uZSBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSUZfQVVEMSAgICAgMHgwMTAwCS8qIGF1ZGlvIGNoYW5uZWwgMSBkb25lIGludGVycnVwdCAqLworI2RlZmluZSBJRl9BVUQwICAgICAweDAwODAJLyogYXVkaW8gY2hhbm5lbCAwIGRvbmUgaW50ZXJydXB0ICovCisjZGVmaW5lIElGX0JMSVQgICAgIDB4MDA0MAkvKiBibGl0dGVyIGRvbmUgaW50ZXJydXB0ICovCisjZGVmaW5lIElGX1ZFUlRCICAgIDB4MDAyMAkvKiB2ZXJ0aWNhbCBibGFua2luZyBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSUZfQ09QRVIgICAgMHgwMDEwCS8qIGNvcHBlciBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSUZfUE9SVFMgICAgMHgwMDA4CS8qIGV4dGVybmFsIGxldmVsIDIgYW5kIENJQSBBIGludGVycnVwdCAqLworI2RlZmluZSBJRl9TT0ZUICAgICAweDAwMDQJLyogc29mdHdhcmUgaW5pdGlhdGVkIGludGVycnVwdCAqLworI2RlZmluZSBJRl9EU0tCTEsgICAweDAwMDIJLyogZGlza2Jsb2NrIERNQSBmaW5pc2hlZCAqLworI2RlZmluZSBJRl9UQkUJICAgIDB4MDAwMQkvKiBzZXJpYWwgdHJhbnNtaXQgYnVmZmVyIGVtcHR5IGludGVycnVwdCAqLworCitleHRlcm4gdm9pZCBhbWlnYV9kb19pcnEoaW50IGlycSwgc3RydWN0IHB0X3JlZ3MgKmZwKTsKK2V4dGVybiB2b2lkIGFtaWdhX2RvX2lycV9saXN0KGludCBpcnEsIHN0cnVjdCBwdF9yZWdzICpmcCk7CisKK2V4dGVybiB1bnNpZ25lZCBzaG9ydCBhbWlnYV9pbnRlbmFfdmFsc1tdOworCisvKiBDSUEgaW50ZXJydXB0IGNvbnRyb2wgcmVnaXN0ZXIgYml0cyAqLworCisjZGVmaW5lIENJQV9JQ1JfVEEJMHgwMQorI2RlZmluZSBDSUFfSUNSX1RCCTB4MDIKKyNkZWZpbmUgQ0lBX0lDUl9BTFJNCTB4MDQKKyNkZWZpbmUgQ0lBX0lDUl9TUAkweDA4CisjZGVmaW5lIENJQV9JQ1JfRkxHCTB4MTAKKyNkZWZpbmUgQ0lBX0lDUl9BTEwJMHgxZgorI2RlZmluZSBDSUFfSUNSX1NFVENMUgkweDgwCisKKy8qIHRvIGFjY2VzcyB0aGUgaW50ZXJydXB0IGNvbnRyb2wgcmVnaXN0ZXJzIG9mIENJQSdzIHVzZSBvbmx5CisqKiB0aGVzZSBmdW5jdGlvbnMsIHRoZXkgYmVoYXZlIGV4YWN0bHkgbGlrZSB0aGUgYW1pZ2Egb3Mgcm91dGluZXMKKyovCisKK2V4dGVybiBzdHJ1Y3QgY2lhYmFzZSBjaWFhX2Jhc2UsIGNpYWJfYmFzZTsKKworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgY2lhX3NldF9pcnEoc3RydWN0IGNpYWJhc2UgKmJhc2UsIHVuc2lnbmVkIGNoYXIgbWFzayk7CitleHRlcm4gdW5zaWduZWQgY2hhciBjaWFfYWJsZV9pcnEoc3RydWN0IGNpYWJhc2UgKmJhc2UsIHVuc2lnbmVkIGNoYXIgbWFzayk7CisKKyNlbmRpZiAvKiBhc20tbTY4ay9hbWlnYWludHMuaCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9hbWlnYXlsZS5oIGIvaW5jbHVkZS9hc20tbTY4ay9hbWlnYXlsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNWE2YWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2FtaWdheWxlLmgKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisqKiBhc20tbTY4ay9hbWlnYXlsZS5oIC0tIFRoaXMgaGVhZGVyIGRlZmluZXMgdGhlIHJlZ2lzdGVycyBvZiB0aGUgZ2F5bGUgY2hpcAorKiogICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCBvbiB0aGUgQW1pZ2EgMTIwMAorKiogICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGluZm9ybWF0aW9uIHdhcyBmb3VuZCBieSBkaXNhc3NlbWJsaW5nIGNhcmQucmVzb3VyY2UsCisqKiAgICAgICAgICAgICAgICAgICAgICAgIHNvIHRoZSBkZWZpbml0aW9ucyBtYXkgbm90IGJlIDEwMCUgY29ycmVjdAorKiogICAgICAgICAgICAgICAgICAgICAgICBhbnlvbmUgaGFzIGFuIG9mZmljaWFsIGRvYyA/CisqKgorKiogQ29weXJpZ2h0IDE5OTcgYnkgQWxhaW4gTWFsZWsKKyoqCisqKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworKiogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyoqIGZvciBtb3JlIGRldGFpbHMuCisqKgorKiogQ3JlYXRlZDogMTEvMjgvOTcgYnkgQWxhaW4gTWFsZWsKKyovCisKKyNpZm5kZWYgX002OEtfQU1JR0FZTEVfSF8KKyNkZWZpbmUgX002OEtfQU1JR0FZTEVfSF8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2FtaWdhaHcuaD4KKworLyogbWVtb3J5IGxheW91dCAqLworCisjZGVmaW5lIEdBWUxFX1JBTQkJKDB4NjAwMDAwK3pUd29CYXNlKQorI2RlZmluZSBHQVlMRV9SQU1TSVpFCQkoMHg0MDAwMDApCisjZGVmaW5lIEdBWUxFX0FUVFJJQlVURQkJKDB4YTAwMDAwK3pUd29CYXNlKQorI2RlZmluZSBHQVlMRV9BVFRSSUJVVEVTSVpFCSgweDAyMDAwMCkKKyNkZWZpbmUgR0FZTEVfSU8JCSgweGEyMDAwMCt6VHdvQmFzZSkJLyogMTZiaXQgYW5kIGV2ZW4gOGJpdCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgR0FZTEVfSU9TSVpFCQkoMHgwMTAwMDApCisjZGVmaW5lIEdBWUxFX0lPXzhCSVRPREQJKDB4YTMwMDAwK3pUd29CYXNlKQkvKiBvZGQgOGJpdCByZWdpc3RlcnMgKi8KKworLyogb2Zmc2V0IGZvciBhY2Nlc3Npbmcgb2RkIElPIHJlZ2lzdGVycyAqLworI2RlZmluZSBHQVlMRV9PREQJCShHQVlMRV9JT184QklUT0RELUdBWUxFX0lPLTEpCisKKy8qIEdBWUxFIHJlZ2lzdGVycyAqLworCitzdHJ1Y3QgR0FZTEUgeworCXVfY2hhciBjYXJkc3RhdHVzOworCXVfY2hhciBwYWQwWzB4MTAwMC0xXTsKKworCXVfY2hhciBpbnRyZXE7CisJdV9jaGFyIHBhZDFbMHgxMDAwLTFdOworCisJdV9jaGFyIGludGVuOworCXVfY2hhciBwYWQyWzB4MTAwMC0xXTsKKworCXVfY2hhciBjb25maWc7CisJdV9jaGFyIHBhZDNbMHgxMDAwLTFdOworfTsKKworI2RlZmluZSBHQVlMRV9BRERSRVNTCSgweGRhODAwMCkJLyogZ2F5bGUgbWFpbiByZWdpc3RlcnMgYmFzZSBhZGRyZXNzICovCisKKyNkZWZpbmUgR0FZTEVfUkVTRVQJKDB4YTQwMDAwKQkvKiB3cml0ZSAweDAwIHRvIHN0YXJ0IHJlc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWQgMSBieXRlIHRvIHN0b3AgcmVzZXQgKi8KKworI2RlZmluZSBnYXlsZSAoKih2b2xhdGlsZSBzdHJ1Y3QgR0FZTEUgKikoelR3b0Jhc2UrR0FZTEVfQUREUkVTUykpCisjZGVmaW5lIGdheWxlX3Jlc2V0ICgqKHZvbGF0aWxlIHVfY2hhciAqKSh6VHdvQmFzZStHQVlMRV9SRVNFVCkpCisKKyNkZWZpbmUgZ2F5bGVfYXR0cmlidXRlICgodm9sYXRpbGUgdV9jaGFyICopKEdBWUxFX0FUVFJJQlVURSkpCisKKyNpZiAwCisjZGVmaW5lIGdheWxlX2luYihhKSByZWFkYiggR0FZTEVfSU8rKGEpKygoKGEpJjEpKkdBWUxFX09ERCkgKQorI2RlZmluZSBnYXlsZV9vdXRiKHYsYSkgd3JpdGViKCB2LCBHQVlMRV9JTysoYSkrKCgoYSkmMSkqR0FZTEVfT0REKSApCisKKyNkZWZpbmUgZ2F5bGVfaW53KGEpIHJlYWR3KCBHQVlMRV9JTysoYSkgKQorI2RlZmluZSBnYXlsZV9vdXR3KHYsYSkgd3JpdGV3KCB2LCBHQVlMRV9JTysoYSkgKQorI2VuZGlmCisKKy8qIEdBWUxFX0NBUkRTVEFUVVMgYml0IGRlZiAqLworCisjZGVmaW5lIEdBWUxFX0NTX0NDREVUCQkweDQwCS8qIGNyZWRpdCBjYXJkIGRldGVjdCAqLworI2RlZmluZSBHQVlMRV9DU19CVkQxCQkweDIwCS8qIGJhdHRlcnkgdm9sdGFnZSBkZXRlY3QgMSAqLworI2RlZmluZSBHQVlMRV9DU19TQwkJMHgyMAkvKiBjcmVkaXQgY2FyZCBzdGF0dXMgY2hhbmdlICovCisjZGVmaW5lIEdBWUxFX0NTX0JWRDIJCTB4MTAJLyogYmF0dGVyeSB2b2x0YWdlIGRldGVjdCAyICovCisjZGVmaW5lIEdBWUxFX0NTX0RBCQkweDEwCS8qIGRpZ2l0YWwgYXVkaW8gKi8KKyNkZWZpbmUgR0FZTEVfQ1NfV1IJCTB4MDgJLyogd3JpdGUgZW5hYmxlICgxID09IGVuYWJsZWQpICovCisjZGVmaW5lIEdBWUxFX0NTX0JTWQkJMHgwNAkvKiBjcmVkaXQgY2FyZCBidXN5ICovCisjZGVmaW5lIEdBWUxFX0NTX0lSUQkJMHgwNAkvKiBpbnRlcnJ1cHQgcmVxdWVzdCAqLworCisvKiBHQVlMRV9JUlEgYml0IGRlZiAqLworCisjZGVmaW5lIEdBWUxFX0lSUV9JREUJCTB4ODAKKyNkZWZpbmUgR0FZTEVfSVJRX0NDREVUCQkweDQwCisjZGVmaW5lIEdBWUxFX0lSUV9CVkQxCQkweDIwCisjZGVmaW5lIEdBWUxFX0lSUV9TQwkJMHgyMAorI2RlZmluZSBHQVlMRV9JUlFfQlZEMgkJMHgxMAorI2RlZmluZSBHQVlMRV9JUlFfREEJCTB4MTAKKyNkZWZpbmUgR0FZTEVfSVJRX1dSCQkweDA4CisjZGVmaW5lIEdBWUxFX0lSUV9CU1kJCTB4MDQKKyNkZWZpbmUgR0FZTEVfSVJRX0lSUQkJMHgwNAorI2RlZmluZSBHQVlMRV9JUlFfSURFQUNLMQkweDAyCisjZGVmaW5lIEdBWUxFX0lSUV9JREVBQ0swCTB4MDEKKworLyogR0FZTEVfQ09ORklHIGJpdCBkZWYKKyAgIChiaXQgMC0xIGZvciBwcm9ncmFtIHZvbHRhZ2UsIGJpdCAyLTMgZm9yIGFjY2VzcyBzcGVlZCAqLworCisjZGVmaW5lIEdBWUxFX0NGR18wVgkJMHgwMAorI2RlZmluZSBHQVlMRV9DRkdfNVYJCTB4MDEKKyNkZWZpbmUgR0FZTEVfQ0ZHXzEyVgkJMHgwMgorCisjZGVmaW5lIEdBWUxFX0NGR18xMDBOUwkJMHgwOAorI2RlZmluZSBHQVlMRV9DRkdfMTUwTlMJCTB4MDQKKyNkZWZpbmUgR0FZTEVfQ0ZHXzI1ME5TCQkweDAwCisjZGVmaW5lIEdBWUxFX0NGR183MjBOUwkJMHgwYworCisjZW5kaWYgLyogYXNtLW02OGsvYW1pZ2F5bGUuaCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9hbWlwY21jaWEuaCBiL2luY2x1ZGUvYXNtLW02OGsvYW1pcGNtY2lhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmYxZWMxOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvYW1pcGNtY2lhLmgKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisqKiBhc20tbTY4ay9wY21jaWEuaCAtLSBBbWlnYSBMaW51eCBQQ01DSUEgRGVmaW5pdGlvbnMKKyoqCisqKiBDb3B5cmlnaHQgMTk5NyBieSBBbGFpbiBNYWxlaworKioKKyoqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisqKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorKiogZm9yIG1vcmUgZGV0YWlscy4KKyoqCisqKiBDcmVhdGVkOiAxMi8xMC85NyBieSBBbGFpbiBNYWxlaworKi8KKworI2lmbmRlZiBfX0FNSUdBX1BDTUNJQV9IX18KKyNkZWZpbmUgX19BTUlHQV9QQ01DSUFfSF9fCisKKyNpbmNsdWRlIDxhc20vYW1pZ2F5bGUuaD4KKworLyogcHJvdG90eXBlcyAqLworCit2b2lkIHBjbWNpYV9yZXNldCh2b2lkKTsKK2ludCBwY21jaWFfY29weV90dXBsZSh1bnNpZ25lZCBjaGFyIHR1cGxlX2lkLCB2b2lkICp0dXBsZSwgaW50IG1heF9sZW4pOwordm9pZCBwY21jaWFfcHJvZ3JhbV92b2x0YWdlKGludCB2b2x0YWdlKTsKK3ZvaWQgcGNtY2lhX2FjY2Vzc19zcGVlZChpbnQgc3BlZWQpOwordm9pZCBwY21jaWFfd3JpdGVfZW5hYmxlKHZvaWQpOwordm9pZCBwY21jaWFfd3JpdGVfZGlzYWJsZSh2b2lkKTsKKworc3RhdGljIGlubGluZSB1X2NoYXIgcGNtY2lhX3JlYWRfc3RhdHVzKHZvaWQpCit7CisJcmV0dXJuIChnYXlsZS5jYXJkc3RhdHVzICYgMHg3Yyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdV9jaGFyIHBjbWNpYV9nZXRfaW50cmVxKHZvaWQpCit7CisJcmV0dXJuIChnYXlsZS5pbnRyZXEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGNtY2lhX2Fja19pbnQodV9jaGFyIGludHJlcSkKK3sKKwlnYXlsZS5pbnRyZXEgPSAweGY4OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGNtY2lhX2VuYWJsZV9pcnEodm9pZCkKK3sKKwlnYXlsZS5pbnRlbiB8PSBHQVlMRV9JUlFfSVJROworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGNtY2lhX2Rpc2FibGVfaXJxKHZvaWQpCit7CisJZ2F5bGUuaW50ZW4gJj0gfkdBWUxFX0lSUV9JUlE7Cit9CisKKyNkZWZpbmUgUENNQ0lBX0lOU0VSVEVECShnYXlsZS5jYXJkc3RhdHVzICYgR0FZTEVfQ1NfQ0NERVQpCisKKy8qIHZhbGlkIHZvbHRhZ2VzIGZvciBwY21jaWFfUHJvZ3JhbVZvbHRhZ2UgKi8KKworI2RlZmluZSBQQ01DSUFfMFYJMAorI2RlZmluZSBQQ01DSUFfNVYJNQorI2RlZmluZSBQQ01DSUFfMTJWCTEyCisKKy8qIHZhbGlkIHNwZWVkcyBmb3IgcGNtY2lhX0FjY2Vzc1NwZWVkICovCisKKyNkZWZpbmUgUENNQ0lBX1NQRUVEXzEwME5TCTEwMAorI2RlZmluZSBQQ01DSUFfU1BFRURfMTUwTlMJMTUwCisjZGVmaW5lIFBDTUNJQV9TUEVFRF8yNTBOUwkyNTAKKyNkZWZpbmUgUENNQ0lBX1NQRUVEXzcyME5TCTcyMAorCisvKiBQQ01DSUEgVHVwbGUgY29kZXMgKi8KKworI2RlZmluZSBDSVNUUExfTlVMTAkJMHgwMAorI2RlZmluZSBDSVNUUExfREVWSUNFCQkweDAxCisjZGVmaW5lIENJU1RQTF9MT05HTElOS19DQgkweDAyCisjZGVmaW5lIENJU1RQTF9DT05GSUdfQ0IJMHgwNAorI2RlZmluZSBDSVNUUExfQ0ZUQUJMRV9FTlRSWV9DQgkweDA1CisjZGVmaW5lIENJU1RQTF9MT05HTElOS19NRkMJMHgwNgorI2RlZmluZSBDSVNUUExfQkFSCQkweDA3CisjZGVmaW5lIENJU1RQTF9DSEVDS1NVTQkJMHgxMAorI2RlZmluZSBDSVNUUExfTE9OR0xJTktfQQkweDExCisjZGVmaW5lIENJU1RQTF9MT05HTElOS19DCTB4MTIKKyNkZWZpbmUgQ0lTVFBMX0xJTktUQVJHRVQJMHgxMworI2RlZmluZSBDSVNUUExfTk9fTElOSwkJMHgxNAorI2RlZmluZSBDSVNUUExfVkVSU18xCQkweDE1CisjZGVmaW5lIENJU1RQTF9BTFRTVFIJCTB4MTYKKyNkZWZpbmUgQ0lTVFBMX0RFVklDRV9BCQkweDE3CisjZGVmaW5lIENJU1RQTF9KRURFQ19DCQkweDE4CisjZGVmaW5lIENJU1RQTF9KRURFQ19BCQkweDE5CisjZGVmaW5lIENJU1RQTF9DT05GSUcJCTB4MWEKKyNkZWZpbmUgQ0lTVFBMX0NGVEFCTEVfRU5UUlkJMHgxYgorI2RlZmluZSBDSVNUUExfREVWSUNFX09DCTB4MWMKKyNkZWZpbmUgQ0lTVFBMX0RFVklDRV9PQQkweDFkCisjZGVmaW5lIENJU1RQTF9ERVZJQ0VfR0VPCTB4MWUKKyNkZWZpbmUgQ0lTVFBMX0RFVklDRV9HRU9fQQkweDFmCisjZGVmaW5lIENJU1RQTF9NQU5GSUQJCTB4MjAKKyNkZWZpbmUgQ0lTVFBMX0ZVTkNJRAkJMHgyMQorI2RlZmluZSBDSVNUUExfRlVOQ0UJCTB4MjIKKyNkZWZpbmUgQ0lTVFBMX1NXSUwJCTB4MjMKKyNkZWZpbmUgQ0lTVFBMX0VORAkJMHhmZgorCisvKiBGVU5DSUQgKi8KKworI2RlZmluZSBDSVNUUExfRlVOQ0lEX01VTFRJCTB4MDAKKyNkZWZpbmUgQ0lTVFBMX0ZVTkNJRF9NRU1PUlkJMHgwMQorI2RlZmluZSBDSVNUUExfRlVOQ0lEX1NFUklBTAkweDAyCisjZGVmaW5lIENJU1RQTF9GVU5DSURfUEFSQUxMRUwJMHgwMworI2RlZmluZSBDSVNUUExfRlVOQ0lEX0ZJWEVECTB4MDQKKyNkZWZpbmUgQ0lTVFBMX0ZVTkNJRF9WSURFTwkweDA1CisjZGVmaW5lIENJU1RQTF9GVU5DSURfTkVUV09SSwkweDA2CisjZGVmaW5lIENJU1RQTF9GVU5DSURfQUlNUwkweDA3CisjZGVmaW5lIENJU1RQTF9GVU5DSURfU0NTSQkweDA4CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9hcG9sbG9kbWEuaCBiL2luY2x1ZGUvYXNtLW02OGsvYXBvbGxvZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgyMWUzYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvYXBvbGxvZG1hLmgKQEAgLTAsMCArMSwyNDggQEAKKy8qICRJZDogZG1hLmgsdiAxLjcgMTk5Mi8xMi8xNCAwMDoyOTozNCByb290IEV4cCByb290ICQKKyAqIGxpbnV4L2luY2x1ZGUvYXNtL2RtYS5oOiBEZWZpbmVzIGZvciB1c2luZyBhbmQgYWxsb2NhdGluZyBkbWEgY2hhbm5lbHMuCisgKiBXcml0dGVuIGJ5IEhlbm51cyBCZXJnbWFuLCAxOTkyLgorICogSGlnaCBETUEgY2hhbm5lbCBzdXBwb3J0ICYgaW5mbyBieSBIYW5udSBTYXZvbGFpbmVuCisgKiBhbmQgSm9obiBCb3lkLCBOb3YuIDE5OTIuCisgKi8KKworI2lmbmRlZiBfQVNNX0FQT0xMT19ETUFfSAorI2RlZmluZSBfQVNNX0FQT0xMT19ETUFfSAorCisjaW5jbHVkZSA8YXNtL2Fwb2xsb2h3Lmg+CQkvKiBuZWVkIGJ5dGUgSU8gKi8KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgkJLyogQW5kIHNwaW5sb2NrcyAqLworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKworI2RlZmluZSBkbWFfb3V0Yih2YWwsYWRkcikgKCooKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoYWRkcitJT19CQVNFKSkgPSAodmFsKSkKKyNkZWZpbmUgZG1hX2luYihhZGRyKQkgICAoKigodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKShhZGRyK0lPX0JBU0UpKSkKKworLyoKKyAqIE5PVEVTIGFib3V0IERNQSB0cmFuc2ZlcnM6CisgKgorICogIGNvbnRyb2xsZXIgMTogY2hhbm5lbHMgMC0zLCBieXRlIG9wZXJhdGlvbnMsIHBvcnRzIDAwLTFGCisgKiAgY29udHJvbGxlciAyOiBjaGFubmVscyA0LTcsIHdvcmQgb3BlcmF0aW9ucywgcG9ydHMgQzAtREYKKyAqCisgKiAgLSBBTEwgcmVnaXN0ZXJzIGFyZSA4IGJpdHMgb25seSwgcmVnYXJkbGVzcyBvZiB0cmFuc2ZlciBzaXplCisgKiAgLSBjaGFubmVsIDQgaXMgbm90IHVzZWQgLSBjYXNjYWRlcyAxIGludG8gMi4KKyAqICAtIGNoYW5uZWxzIDAtMyBhcmUgYnl0ZSAtIGFkZHJlc3Nlcy9jb3VudHMgYXJlIGZvciBwaHlzaWNhbCBieXRlcworICogIC0gY2hhbm5lbHMgNS03IGFyZSB3b3JkIC0gYWRkcmVzc2VzL2NvdW50cyBhcmUgZm9yIHBoeXNpY2FsIHdvcmRzCisgKiAgLSB0cmFuc2ZlcnMgbXVzdCBub3QgY3Jvc3MgcGh5c2ljYWwgNjRLICgwLTMpIG9yIDEyOEsgKDUtNykgYm91bmRhcmllcworICogIC0gdHJhbnNmZXIgY291bnQgbG9hZGVkIHRvIHJlZ2lzdGVycyBpcyAxIGxlc3MgdGhhbiBhY3R1YWwgY291bnQKKyAqICAtIGNvbnRyb2xsZXIgMiBvZmZzZXRzIGFyZSBhbGwgZXZlbiAoMnggb2Zmc2V0cyBmb3IgY29udHJvbGxlciAxKQorICogIC0gcGFnZSByZWdpc3RlcnMgZm9yIDUtNyBkb24ndCB1c2UgZGF0YSBiaXQgMCwgcmVwcmVzZW50IDEyOEsgcGFnZXMKKyAqICAtIHBhZ2UgcmVnaXN0ZXJzIGZvciAwLTMgdXNlIGJpdCAwLCByZXByZXNlbnQgNjRLIHBhZ2VzCisgKgorICogRE1BIHRyYW5zZmVycyBhcmUgbGltaXRlZCB0byB0aGUgbG93ZXIgMTZNQiBvZiBfcGh5c2ljYWxfIG1lbW9yeS4KKyAqIE5vdGUgdGhhdCBhZGRyZXNzZXMgbG9hZGVkIGludG8gcmVnaXN0ZXJzIG11c3QgYmUgX3BoeXNpY2FsXyBhZGRyZXNzZXMsCisgKiBub3QgbG9naWNhbCBhZGRyZXNzZXMgKHdoaWNoIG1heSBkaWZmZXIgaWYgcGFnaW5nIGlzIGFjdGl2ZSkuCisgKgorICogIEFkZHJlc3MgbWFwcGluZyBmb3IgY2hhbm5lbHMgMC0zOgorICoKKyAqICAgQTIzIC4uLiBBMTYgQTE1IC4uLiBBOCAgQTcgLi4uIEEwICAgIChQaHlzaWNhbCBhZGRyZXNzZXMpCisgKiAgICB8ICAuLi4gIHwgICB8ICAuLi4gfCAgIHwgIC4uLiB8CisgKiAgICB8ICAuLi4gIHwgICB8ICAuLi4gfCAgIHwgIC4uLiB8CisgKiAgICB8ICAuLi4gIHwgICB8ICAuLi4gfCAgIHwgIC4uLiB8CisgKiAgIFA3ICAuLi4gIFAwICBBNyAuLi4gQTAgIEE3IC4uLiBBMAorICogfCAgICBQYWdlICAgIHwgQWRkciBNU0IgfCBBZGRyIExTQiB8ICAgKERNQSByZWdpc3RlcnMpCisgKgorICogIEFkZHJlc3MgbWFwcGluZyBmb3IgY2hhbm5lbHMgNS03OgorICoKKyAqICAgQTIzIC4uLiBBMTcgQTE2IEExNSAuLi4gQTkgQTggQTcgLi4uIEExIEEwICAgIChQaHlzaWNhbCBhZGRyZXNzZXMpCisgKiAgICB8ICAuLi4gIHwgICBcICAgXCAgIC4uLiBcICBcICBcICAuLi4gXCAgXAorICogICAgfCAgLi4uICB8ICAgIFwgICBcICAgLi4uIFwgIFwgIFwgIC4uLiBcICAobm90IHVzZWQpCisgKiAgICB8ICAuLi4gIHwgICAgIFwgICBcICAgLi4uIFwgIFwgIFwgIC4uLiBcCisgKiAgIFA3ICAuLi4gIFAxICgwKSBBNyBBNiAgLi4uIEEwIEE3IEE2IC4uLiBBMAorICogfCAgICAgIFBhZ2UgICAgICB8ICBBZGRyIE1TQiAgIHwgIEFkZHIgTFNCICB8ICAgKERNQSByZWdpc3RlcnMpCisgKgorICogQWdhaW4sIGNoYW5uZWxzIDUtNyB0cmFuc2ZlciBfcGh5c2ljYWxfIHdvcmRzICgxNiBiaXRzKSwgc28gYWRkcmVzc2VzCisgKiBhbmQgY291bnRzIF9tdXN0XyBiZSB3b3JkLWFsaWduZWQgKHRoZSBsb3dlc3QgYWRkcmVzcyBiaXQgaXMgX2lnbm9yZWRfIGF0CisgKiB0aGUgaGFyZHdhcmUgbGV2ZWwsIHNvIG9kZC1ieXRlIHRyYW5zZmVycyBhcmVuJ3QgcG9zc2libGUpLgorICoKKyAqIFRyYW5zZmVyIGNvdW50IChfbm90ICMgYnl0ZXNfKSBpcyBsaW1pdGVkIHRvIDY0SywgcmVwcmVzZW50ZWQgYXMgYWN0dWFsCisgKiBjb3VudCAtIDEgOiA2NEsgPT4gMHhGRkZGLCAxID0+IDB4MDAwMC4gIFRodXMsIGNvdW50IGlzIGFsd2F5cyAxIG9yIG1vcmUsCisgKiBhbmQgdXAgdG8gMTI4SyBieXRlcyBtYXkgYmUgdHJhbnNmZXJyZWQgb24gY2hhbm5lbHMgNS03IGluIG9uZSBvcGVyYXRpb24uCisgKgorICovCisKKyNkZWZpbmUgTUFYX0RNQV9DSEFOTkVMUwk4CisKKy8qIFRoZSBtYXhpbXVtIGFkZHJlc3MgdGhhdCB3ZSBjYW4gcGVyZm9ybSBhIERNQSB0cmFuc2ZlciB0byBvbiB0aGlzIHBsYXRmb3JtICovI2RlZmluZSBNQVhfRE1BX0FERFJFU1MgICAgICAoUEFHRV9PRkZTRVQrMHgxMDAwMDAwKQorCisvKiA4MjM3IERNQSBjb250cm9sbGVycyAqLworI2RlZmluZSBJT19ETUExX0JBU0UJMHgxMEMwMAkvKiA4IGJpdCBzbGF2ZSBETUEsIGNoYW5uZWxzIDAuLjMgKi8KKyNkZWZpbmUgSU9fRE1BMl9CQVNFCTB4MTBEMDAJLyogMTYgYml0IG1hc3RlciBETUEsIGNoIDQoPXNsYXZlIGlucHV0KS4uNyAqLworCisvKiBETUEgY29udHJvbGxlciByZWdpc3RlcnMgKi8KKyNkZWZpbmUgRE1BMV9DTURfUkVHCQkoSU9fRE1BMV9CQVNFKzB4MDgpIC8qIGNvbW1hbmQgcmVnaXN0ZXIgKHcpICovCisjZGVmaW5lIERNQTFfU1RBVF9SRUcJCShJT19ETUExX0JBU0UrMHgwOCkgLyogc3RhdHVzIHJlZ2lzdGVyIChyKSAqLworI2RlZmluZSBETUExX1JFUV9SRUcgICAgICAgICAgICAoSU9fRE1BMV9CQVNFKzB4MDkpIC8qIHJlcXVlc3QgcmVnaXN0ZXIgKHcpICovCisjZGVmaW5lIERNQTFfTUFTS19SRUcJCShJT19ETUExX0JBU0UrMHgwQSkgLyogc2luZ2xlLWNoYW5uZWwgbWFzayAodykgKi8KKyNkZWZpbmUgRE1BMV9NT0RFX1JFRwkJKElPX0RNQTFfQkFTRSsweDBCKSAvKiBtb2RlIHJlZ2lzdGVyICh3KSAqLworI2RlZmluZSBETUExX0NMRUFSX0ZGX1JFRwkoSU9fRE1BMV9CQVNFKzB4MEMpIC8qIGNsZWFyIHBvaW50ZXIgZmxpcC1mbG9wICh3KSAqLworI2RlZmluZSBETUExX1RFTVBfUkVHICAgICAgICAgICAoSU9fRE1BMV9CQVNFKzB4MEQpIC8qIFRlbXBvcmFyeSBSZWdpc3RlciAocikgKi8KKyNkZWZpbmUgRE1BMV9SRVNFVF9SRUcJCShJT19ETUExX0JBU0UrMHgwRCkgLyogTWFzdGVyIENsZWFyICh3KSAqLworI2RlZmluZSBETUExX0NMUl9NQVNLX1JFRyAgICAgICAoSU9fRE1BMV9CQVNFKzB4MEUpIC8qIENsZWFyIE1hc2sgKi8KKyNkZWZpbmUgRE1BMV9NQVNLX0FMTF9SRUcgICAgICAgKElPX0RNQTFfQkFTRSsweDBGKSAvKiBhbGwtY2hhbm5lbHMgbWFzayAodykgKi8KKworI2RlZmluZSBETUEyX0NNRF9SRUcJCShJT19ETUEyX0JBU0UrMHgxMCkgLyogY29tbWFuZCByZWdpc3RlciAodykgKi8KKyNkZWZpbmUgRE1BMl9TVEFUX1JFRwkJKElPX0RNQTJfQkFTRSsweDEwKSAvKiBzdGF0dXMgcmVnaXN0ZXIgKHIpICovCisjZGVmaW5lIERNQTJfUkVRX1JFRyAgICAgICAgICAgIChJT19ETUEyX0JBU0UrMHgxMikgLyogcmVxdWVzdCByZWdpc3RlciAodykgKi8KKyNkZWZpbmUgRE1BMl9NQVNLX1JFRwkJKElPX0RNQTJfQkFTRSsweDE0KSAvKiBzaW5nbGUtY2hhbm5lbCBtYXNrICh3KSAqLworI2RlZmluZSBETUEyX01PREVfUkVHCQkoSU9fRE1BMl9CQVNFKzB4MTYpIC8qIG1vZGUgcmVnaXN0ZXIgKHcpICovCisjZGVmaW5lIERNQTJfQ0xFQVJfRkZfUkVHCShJT19ETUEyX0JBU0UrMHgxOCkgLyogY2xlYXIgcG9pbnRlciBmbGlwLWZsb3AgKHcpICovCisjZGVmaW5lIERNQTJfVEVNUF9SRUcgICAgICAgICAgIChJT19ETUEyX0JBU0UrMHgxQSkgLyogVGVtcG9yYXJ5IFJlZ2lzdGVyIChyKSAqLworI2RlZmluZSBETUEyX1JFU0VUX1JFRwkJKElPX0RNQTJfQkFTRSsweDFBKSAvKiBNYXN0ZXIgQ2xlYXIgKHcpICovCisjZGVmaW5lIERNQTJfQ0xSX01BU0tfUkVHICAgICAgIChJT19ETUEyX0JBU0UrMHgxQykgLyogQ2xlYXIgTWFzayAqLworI2RlZmluZSBETUEyX01BU0tfQUxMX1JFRyAgICAgICAoSU9fRE1BMl9CQVNFKzB4MUUpIC8qIGFsbC1jaGFubmVscyBtYXNrICh3KSAqLworCisjZGVmaW5lIERNQV9BRERSXzAgICAgICAgICAgICAgIChJT19ETUExX0JBU0UrMHgwMCkgLyogRE1BIGFkZHJlc3MgcmVnaXN0ZXJzICovCisjZGVmaW5lIERNQV9BRERSXzEgICAgICAgICAgICAgIChJT19ETUExX0JBU0UrMHgwMikKKyNkZWZpbmUgRE1BX0FERFJfMiAgICAgICAgICAgICAgKElPX0RNQTFfQkFTRSsweDA0KQorI2RlZmluZSBETUFfQUREUl8zICAgICAgICAgICAgICAoSU9fRE1BMV9CQVNFKzB4MDYpCisjZGVmaW5lIERNQV9BRERSXzQgICAgICAgICAgICAgIChJT19ETUEyX0JBU0UrMHgwMCkKKyNkZWZpbmUgRE1BX0FERFJfNSAgICAgICAgICAgICAgKElPX0RNQTJfQkFTRSsweDA0KQorI2RlZmluZSBETUFfQUREUl82ICAgICAgICAgICAgICAoSU9fRE1BMl9CQVNFKzB4MDgpCisjZGVmaW5lIERNQV9BRERSXzcgICAgICAgICAgICAgIChJT19ETUEyX0JBU0UrMHgwQykKKworI2RlZmluZSBETUFfQ05UXzAgICAgICAgICAgICAgICAoSU9fRE1BMV9CQVNFKzB4MDEpICAgLyogRE1BIGNvdW50IHJlZ2lzdGVycyAqLworI2RlZmluZSBETUFfQ05UXzEgICAgICAgICAgICAgICAoSU9fRE1BMV9CQVNFKzB4MDMpCisjZGVmaW5lIERNQV9DTlRfMiAgICAgICAgICAgICAgIChJT19ETUExX0JBU0UrMHgwNSkKKyNkZWZpbmUgRE1BX0NOVF8zICAgICAgICAgICAgICAgKElPX0RNQTFfQkFTRSsweDA3KQorI2RlZmluZSBETUFfQ05UXzQgICAgICAgICAgICAgICAoSU9fRE1BMl9CQVNFKzB4MDIpCisjZGVmaW5lIERNQV9DTlRfNSAgICAgICAgICAgICAgIChJT19ETUEyX0JBU0UrMHgwNikKKyNkZWZpbmUgRE1BX0NOVF82ICAgICAgICAgICAgICAgKElPX0RNQTJfQkFTRSsweDBBKQorI2RlZmluZSBETUFfQ05UXzcgICAgICAgICAgICAgICAoSU9fRE1BMl9CQVNFKzB4MEUpCisKKyNkZWZpbmUgRE1BX01PREVfUkVBRAkweDQ0CS8qIEkvTyB0byBtZW1vcnksIG5vIGF1dG9pbml0LCBpbmNyZW1lbnQsIHNpbmdsZSBtb2RlICovCisjZGVmaW5lIERNQV9NT0RFX1dSSVRFCTB4NDgJLyogbWVtb3J5IHRvIEkvTywgbm8gYXV0b2luaXQsIGluY3JlbWVudCwgc2luZ2xlIG1vZGUgKi8KKyNkZWZpbmUgRE1BX01PREVfQ0FTQ0FERSAweEMwICAgLyogcGFzcyB0aHJ1IERSRVEtPkhSUSwgREFDSzwtSExEQSBvbmx5ICovCisKKyNkZWZpbmUgRE1BX0FVVE9JTklUCTB4MTAKKworI2RlZmluZSBETUFfOEJJVCAwCisjZGVmaW5lIERNQV8xNkJJVCAxCisjZGVmaW5lIERNQV9CVVNNQVNURVIgMgorCitleHRlcm4gc3BpbmxvY2tfdCAgZG1hX3NwaW5fbG9jazsKKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBjbGFpbV9kbWFfbG9jayh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmRtYV9zcGluX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gZmxhZ3M7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgcmVsZWFzZV9kbWFfbG9jayh1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRtYV9zcGluX2xvY2ssIGZsYWdzKTsKK30KKworLyogZW5hYmxlL2Rpc2FibGUgYSBzcGVjaWZpYyBETUEgY2hhbm5lbCAqLworc3RhdGljIF9faW5saW5lX18gdm9pZCBlbmFibGVfZG1hKHVuc2lnbmVkIGludCBkbWFucikKK3sKKwlpZiAoZG1hbnI8PTMpCisJCWRtYV9vdXRiKGRtYW5yLCAgRE1BMV9NQVNLX1JFRyk7CisJZWxzZQorCQlkbWFfb3V0YihkbWFuciAmIDMsICBETUEyX01BU0tfUkVHKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBkaXNhYmxlX2RtYSh1bnNpZ25lZCBpbnQgZG1hbnIpCit7CisJaWYgKGRtYW5yPD0zKQorCQlkbWFfb3V0YihkbWFuciB8IDQsICBETUExX01BU0tfUkVHKTsKKwllbHNlCisJCWRtYV9vdXRiKChkbWFuciAmIDMpIHwgNCwgIERNQTJfTUFTS19SRUcpOworfQorCisvKiBDbGVhciB0aGUgJ0RNQSBQb2ludGVyIEZsaXAgRmxvcCcuCisgKiBXcml0ZSAwIGZvciBMU0IvTVNCLCAxIGZvciBNU0IvTFNCIGFjY2Vzcy4KKyAqIFVzZSB0aGlzIG9uY2UgdG8gaW5pdGlhbGl6ZSB0aGUgRkYgdG8gYSBrbm93biBzdGF0ZS4KKyAqIEFmdGVyIHRoYXQsIGtlZXAgdHJhY2sgb2YgaXQuIDotKQorICogLS0tIEluIG9yZGVyIHRvIGRvIHRoYXQsIHRoZSBETUEgcm91dGluZXMgYmVsb3cgc2hvdWxkIC0tLQorICogLS0tIG9ubHkgYmUgdXNlZCB3aGlsZSBob2xkaW5nIHRoZSBETUEgbG9jayAhIC0tLQorICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGNsZWFyX2RtYV9mZih1bnNpZ25lZCBpbnQgZG1hbnIpCit7CisJaWYgKGRtYW5yPD0zKQorCQlkbWFfb3V0YigwLCAgRE1BMV9DTEVBUl9GRl9SRUcpOworCWVsc2UKKwkJZG1hX291dGIoMCwgIERNQTJfQ0xFQVJfRkZfUkVHKTsKK30KKworLyogc2V0IG1vZGUgKGFib3ZlKSBmb3IgYSBzcGVjaWZpYyBETUEgY2hhbm5lbCAqLworc3RhdGljIF9faW5saW5lX18gdm9pZCBzZXRfZG1hX21vZGUodW5zaWduZWQgaW50IGRtYW5yLCBjaGFyIG1vZGUpCit7CisJaWYgKGRtYW5yPD0zKQorCQlkbWFfb3V0Yihtb2RlIHwgZG1hbnIsICBETUExX01PREVfUkVHKTsKKwllbHNlCisJCWRtYV9vdXRiKG1vZGUgfCAoZG1hbnImMyksICBETUEyX01PREVfUkVHKTsKK30KKworLyogU2V0IHRyYW5zZmVyIGFkZHJlc3MgJiBwYWdlIGJpdHMgZm9yIHNwZWNpZmljIERNQSBjaGFubmVsLgorICogQXNzdW1lcyBkbWEgZmxpcGZsb3AgaXMgY2xlYXIuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgc2V0X2RtYV9hZGRyKHVuc2lnbmVkIGludCBkbWFuciwgdW5zaWduZWQgaW50IGEpCit7CisJaWYgKGRtYW5yIDw9IDMpICB7CisJICAgIGRtYV9vdXRiKCBhICYgMHhmZiwgKChkbWFuciYzKTw8MSkgKyBJT19ETUExX0JBU0UgKTsKKyAgICAgICAgICAgIGRtYV9vdXRiKCAoYT4+OCkgJiAweGZmLCAoKGRtYW5yJjMpPDwxKSArIElPX0RNQTFfQkFTRSApOworCX0gIGVsc2UgIHsKKwkgICAgZG1hX291dGIoIChhPj4xKSAmIDB4ZmYsICgoZG1hbnImMyk8PDIpICsgSU9fRE1BMl9CQVNFICk7CisJICAgIGRtYV9vdXRiKCAoYT4+OSkgJiAweGZmLCAoKGRtYW5yJjMpPDwyKSArIElPX0RNQTJfQkFTRSApOworCX0KK30KKworCisvKiBTZXQgdHJhbnNmZXIgc2l6ZSAobWF4IDY0ayBmb3IgRE1BMS4uMywgMTI4ayBmb3IgRE1BNS4uNykgZm9yCisgKiBhIHNwZWNpZmljIERNQSBjaGFubmVsLgorICogWW91IG11c3QgZW5zdXJlIHRoZSBwYXJhbWV0ZXJzIGFyZSB2YWxpZC4KKyAqIE5PVEU6IGZyb20gYSBtYW51YWw6ICJ0aGUgbnVtYmVyIG9mIHRyYW5zZmVycyBpcyBvbmUgbW9yZQorICogdGhhbiB0aGUgaW5pdGlhbCB3b3JkIGNvdW50IiEgVGhpcyBpcyB0YWtlbiBpbnRvIGFjY291bnQuCisgKiBBc3N1bWVzIGRtYSBmbGlwLWZsb3AgaXMgY2xlYXIuCisgKiBOT1RFIDI6ICJjb3VudCIgcmVwcmVzZW50cyBfYnl0ZXNfIGFuZCBtdXN0IGJlIGV2ZW4gZm9yIGNoYW5uZWxzIDUtNy4KKyAqLworc3RhdGljIF9faW5saW5lX18gdm9pZCBzZXRfZG1hX2NvdW50KHVuc2lnbmVkIGludCBkbWFuciwgdW5zaWduZWQgaW50IGNvdW50KQoreworICAgICAgICBjb3VudC0tOworCWlmIChkbWFuciA8PSAzKSAgeworCSAgICBkbWFfb3V0YiggY291bnQgJiAweGZmLCAoKGRtYW5yJjMpPDwxKSArIDEgKyBJT19ETUExX0JBU0UgKTsKKwkgICAgZG1hX291dGIoIChjb3VudD4+OCkgJiAweGZmLCAoKGRtYW5yJjMpPDwxKSArIDEgKyBJT19ETUExX0JBU0UgKTsKKyAgICAgICAgfSBlbHNlIHsKKwkgICAgZG1hX291dGIoIChjb3VudD4+MSkgJiAweGZmLCAoKGRtYW5yJjMpPDwyKSArIDIgKyBJT19ETUEyX0JBU0UgKTsKKwkgICAgZG1hX291dGIoIChjb3VudD4+OSkgJiAweGZmLCAoKGRtYW5yJjMpPDwyKSArIDIgKyBJT19ETUEyX0JBU0UgKTsKKyAgICAgICAgfQorfQorCisKKy8qIEdldCBETUEgcmVzaWR1ZSBjb3VudC4gQWZ0ZXIgYSBETUEgdHJhbnNmZXIsIHRoaXMKKyAqIHNob3VsZCByZXR1cm4gemVyby4gUmVhZGluZyB0aGlzIHdoaWxlIGEgRE1BIHRyYW5zZmVyIGlzCisgKiBzdGlsbCBpbiBwcm9ncmVzcyB3aWxsIHJldHVybiB1bnByZWRpY3RhYmxlIHJlc3VsdHMuCisgKiBJZiBjYWxsZWQgYmVmb3JlIHRoZSBjaGFubmVsIGhhcyBiZWVuIHVzZWQsIGl0IG1heSByZXR1cm4gMS4KKyAqIE90aGVyd2lzZSwgaXQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIF9ieXRlc18gbGVmdCB0byB0cmFuc2Zlci4KKyAqCisgKiBBc3N1bWVzIERNQSBmbGlwLWZsb3AgaXMgY2xlYXIuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIGludCBnZXRfZG1hX3Jlc2lkdWUodW5zaWduZWQgaW50IGRtYW5yKQoreworCXVuc2lnbmVkIGludCBpb19wb3J0ID0gKGRtYW5yPD0zKT8gKChkbWFuciYzKTw8MSkgKyAxICsgSU9fRE1BMV9CQVNFCisJCQkJCSA6ICgoZG1hbnImMyk8PDIpICsgMiArIElPX0RNQTJfQkFTRTsKKworCS8qIHVzaW5nIHNob3J0IHRvIGdldCAxNi1iaXQgd3JhcCBhcm91bmQgKi8KKwl1bnNpZ25lZCBzaG9ydCBjb3VudDsKKworCWNvdW50ID0gMSArIGRtYV9pbmIoaW9fcG9ydCk7CisJY291bnQgKz0gZG1hX2luYihpb19wb3J0KSA8PCA4OworCisJcmV0dXJuIChkbWFucjw9Myk/IGNvdW50IDogKGNvdW50PDwxKTsKK30KKworCisvKiBUaGVzZSBhcmUgaW4ga2VybmVsL2RtYS5jOiAqLworZXh0ZXJuIGludCByZXF1ZXN0X2RtYSh1bnNpZ25lZCBpbnQgZG1hbnIsIGNvbnN0IGNoYXIgKiBkZXZpY2VfaWQpOwkvKiByZXNlcnZlIGEgRE1BIGNoYW5uZWwgKi8KK2V4dGVybiB2b2lkIGZyZWVfZG1hKHVuc2lnbmVkIGludCBkbWFucik7CS8qIHJlbGVhc2UgaXQgYWdhaW4gKi8KKworLyogVGhlc2UgYXJlIGluIGFyY2gvbTY4ay9hcG9sbG8vZG1hLmM6ICovCitleHRlcm4gdW5zaWduZWQgc2hvcnQgZG1hX21hcF9wYWdlKHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLGludCBjb3VudCxpbnQgdHlwZSk7CitleHRlcm4gdm9pZCBkbWFfdW5tYXBfcGFnZSh1bnNpZ25lZCBzaG9ydCBkbWFfYWRkcik7CisKKyNlbmRpZiAvKiBfQVNNX0FQT0xMT19ETUFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9hcG9sbG9ody5oIGIvaW5jbHVkZS9hc20tbTY4ay9hcG9sbG9ody5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzMDRlMWMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2Fwb2xsb2h3LmgKQEAgLTAsMCArMSwxMDQgQEAKKy8qIGFwb2xsb2h3LmggOiBzb21lIHN0cnVjdHVyZXMgdG8gYWNjZXNzIGFwb2xsbyBIVyAqLworCisjaWZuZGVmIF9BU01tNjhrX0FQT0xMT0hXX0hfCisjZGVmaW5lIF9BU01tNjhrX0FQT0xMT0hXX0hfCisKKy8qCisgICBhcG9sbG8gbW9kZWxzCisqLworCitleHRlcm4gdV9sb25nIGFwb2xsb19tb2RlbDsKKworI2RlZmluZSBBUE9MTE9fVU5LTk9XTiAoMCkKKyNkZWZpbmUgQVBPTExPX0ROMzAwMCAoMSkKKyNkZWZpbmUgQVBPTExPX0ROMzAxMCAoMikKKyNkZWZpbmUgQVBPTExPX0ROMzUwMCAoMykKKyNkZWZpbmUgQVBPTExPX0RONDAwMCAoNCkKKyNkZWZpbmUgQVBPTExPX0RONDUwMCAoNSkKKworLyoKKyAgIHNlZSBzY24yNjgxIGRhdGEgc2hlZXQgZm9yIG1vcmUgaW5mby4KKyAgIG1lbWJlciBuYW1lcyBhcmUgcmVhZF93cml0ZS4KKyovCisKKyNkZWZpbmUgREVDTEFSRV8yNjgxX0ZJRUxEKHgpIHVuc2lnbmVkIGNoYXIgeDsgdW5zaWduZWQgY2hhciBkdW1teSMjeAorCitzdHJ1Y3QgU0NOMjY4MSB7CisKKwlERUNMQVJFXzI2ODFfRklFTEQobXJhKTsKKwlERUNMQVJFXzI2ODFfRklFTEQoc3JhX2NzcmEpOworCURFQ0xBUkVfMjY4MV9GSUVMRChCUkd0ZXN0X2NyYSk7CisJREVDTEFSRV8yNjgxX0ZJRUxEKHJocmFfdGhyYSk7CisJREVDTEFSRV8yNjgxX0ZJRUxEKGlwY3JfYWNyKTsKKwlERUNMQVJFXzI2ODFfRklFTEQoaXNyX2ltcik7CisJREVDTEFSRV8yNjgxX0ZJRUxEKGN0dV9jdHVyKTsKKwlERUNMQVJFXzI2ODFfRklFTEQoY3RsX2N0bHIpOworCURFQ0xBUkVfMjY4MV9GSUVMRChtcmIpOworCURFQ0xBUkVfMjY4MV9GSUVMRChzcmJfY3NyYik7CisJREVDTEFSRV8yNjgxX0ZJRUxEKHRzdF9jcmIpOworCURFQ0xBUkVfMjY4MV9GSUVMRChyaHJiX3RocmIpOworCURFQ0xBUkVfMjY4MV9GSUVMRChyZXNlcnZlZCk7CisJREVDTEFSRV8yNjgxX0ZJRUxEKGlwX29wY3IpOworCURFQ0xBUkVfMjY4MV9GSUVMRChzdGFydENudF9zZXRPdXRCaXQpOworCURFQ0xBUkVfMjY4MV9GSUVMRChzdG9wQ250X3Jlc2V0T3V0Qml0KTsKKworfTsKKworI2lmIDAKK3N0cnVjdCBtYzE0NjgxOCB7CisKKwl1bnNpZ25lZCBpbnQgc2Vjb25kMTo0LCBzZWNvbmQyOjQsIGFsYXJtX3NlY29uZDE6NCwgYWxhcm1fc2Vjb25kMjo0LAorCQkgICAgIG1pbnV0ZTE6NCwgbWludXRlMjo0LCBhbGFybV9taW51dGUxOjQsIGFsYXJtX21pbnV0ZTI6NDsKKwl1bnNpZ25lZCBpbnQgaG91cnMxOjQsIGhvdXJzMjo0LCBhbGFybV9ob3VyczE6NCwgYWxhcm1faG91cnMyOjQsCisJCSAgICAgZGF5X29mX3dlZWsxOjQsIGRheV9vZl93ZWVrMjo0LCBkYXlfb2ZfbW9udGgxOjQsIGRheV9vZl9tb250aDI6NDsKKwl1bnNpZ25lZCBpbnQgbW9udGgxOjQsIG1vbnRoMjo0LCB5ZWFyMTo0LCB5ZWFyMjo0LCA6MTY7CisKK307CisjZW5kaWYKKworc3RydWN0IG1jMTQ2ODE4IHsKKyAgICAgICAgdW5zaWduZWQgY2hhciBzZWNvbmQsIGFsYXJtX3NlY29uZDsKKyAgICAgICAgdW5zaWduZWQgY2hhciBtaW51dGUsIGFsYXJtX21pbnV0ZTsKKyAgICAgICAgdW5zaWduZWQgY2hhciBob3VycywgYWxhcm1faG91cnM7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgZGF5X29mX3dlZWssIGRheV9vZl9tb250aDsKKyAgICAgICAgdW5zaWduZWQgY2hhciBtb250aCwgeWVhcjsKK307CisKKworI2RlZmluZSBJT19CQVNFIDB4ODAwMDAwMDAKKworZXh0ZXJuIHVfbG9uZyBzaW8wMV9waHlzYWRkcjsKK2V4dGVybiB1X2xvbmcgc2lvMjNfcGh5c2FkZHI7CitleHRlcm4gdV9sb25nIHJ0Y19waHlzYWRkcjsKK2V4dGVybiB1X2xvbmcgcGljYV9waHlzYWRkcjsKK2V4dGVybiB1X2xvbmcgcGljYl9waHlzYWRkcjsKK2V4dGVybiB1X2xvbmcgY3B1Y3RybF9waHlzYWRkcjsKK2V4dGVybiB1X2xvbmcgdGltZXJfcGh5c2FkZHI7CisKKyNkZWZpbmUgU0FVN19TSU8wMV9QSFlTQUREUiAweDEwNDAwCisjZGVmaW5lIFNBVTdfU0lPMjNfUEhZU0FERFIgMHgxMDUwMAorI2RlZmluZSBTQVU3X1JUQ19QSFlTQUREUiAweDEwOTAwCisjZGVmaW5lIFNBVTdfUElDQSAweDExMDAwCisjZGVmaW5lIFNBVTdfUElDQiAweDExMTAwCisjZGVmaW5lIFNBVTdfQ1BVQ1RSTCAweDEwMTAwCisjZGVmaW5lIFNBVTdfVElNRVIgMHgwMTA4MDAKKworI2RlZmluZSBTQVU4X1NJTzAxX1BIWVNBRERSIDB4ODQwMAorI2RlZmluZSBTQVU4X1JUQ19QSFlTQUREUiAweDg5MDAKKyNkZWZpbmUgU0FVOF9QSUNBIDB4OTQwMAorI2RlZmluZSBTQVU4X1BJQ0IgMHg5NTAwCisjZGVmaW5lIFNBVThfQ1BVQ1RSTCAweDgxMDAKKyNkZWZpbmUgU0FVOF9USU1FUiAweDg4MDAKKworI2RlZmluZSBzaW8wMSAoKCoodm9sYXRpbGUgc3RydWN0IFNDTjI2ODEgKikoSU9fQkFTRSArIHNpbzAxX3BoeXNhZGRyKSkpCisjZGVmaW5lIHNpbzIzICgoKih2b2xhdGlsZSBzdHJ1Y3QgU0NOMjY4MSAqKShJT19CQVNFICsgc2lvMjNfcGh5c2FkZHIpKSkKKyNkZWZpbmUgcnRjICgoKHZvbGF0aWxlIHN0cnVjdCBtYzE0NjgxOCAqKShJT19CQVNFICsgcnRjX3BoeXNhZGRyKSkpCisjZGVmaW5lIGNwdWN0cmwgKCoodm9sYXRpbGUgdW5zaWduZWQgaW50ICopKElPX0JBU0UgKyBjcHVjdHJsX3BoeXNhZGRyKSkKKyNkZWZpbmUgcGljYSAoSU9fQkFTRSArIHBpY2FfcGh5c2FkZHIpCisjZGVmaW5lIHBpY2IgKElPX0JBU0UgKyBwaWNiX3BoeXNhZGRyKQorI2RlZmluZSB0aW1lciAoSU9fQkFTRSArIHRpbWVyX3BoeXNhZGRyKQorI2RlZmluZSBhZGRyX3hsYXRfbWFwICgodW5zaWduZWQgc2hvcnQgKikoSU9fQkFTRSArIDB4MTcwMDApKQorCisjZGVmaW5lIGlzYUlPMm1lbSh4KSAoKCgoKHgpICYgMHgzZjgpICA8PCA3KSB8ICgoKHgpICYgMHhmYzAwKSA+PiA2KSB8ICgoeCkgJiAweDcpKSArIDB4NDAwMDAgKyBJT19CQVNFKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvYXRhZmQuaCBiL2luY2x1ZGUvYXNtLW02OGsvYXRhZmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDU2ODg5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9hdGFmZC5oCkBAIC0wLDAgKzEsMTIgQEAKKyNpZm5kZWYgX0FTTV9NNjhLX0ZEX0gKKyNkZWZpbmUgX0FTTV9NNjhLX0ZEX0gKKworLyogRGVmaW5pdGlvbnMgZm9yIHRoZSBBdGFyaSBGbG9wcHkgZHJpdmVyICovCisKK3N0cnVjdCBhdGFyaV9mb3JtYXRfZGVzY3IgeworICAgIGludCB0cmFjazsJCQkvKiB0byBiZSBmb3JtYXR0ZWQgKi8KKyAgICBpbnQgaGVhZDsJCQkvKiAgICIiICAgICAiIiAgICAgKi8KKyAgICBpbnQgc2VjdF9vZmZzZXQ7CQkvKiBvZmZzZXQgb2YgZmlyc3Qgc2VjdG9yICovCit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvYXRhZmRyZWcuaCBiL2luY2x1ZGUvYXNtLW02OGsvYXRhZmRyZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmY4MDk0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9hdGFmZHJlZy5oCkBAIC0wLDAgKzEsNzkgQEAKKyNpZm5kZWYgX0xJTlVYX0ZEUkVHX0gKKyNkZWZpbmUgX0xJTlVYX0ZEUkVHX0gKKworLyoKKyoqIFdEMTc3MiBzdHVmZgorICovCisKKy8qIHJlZ2lzdGVyIGNvZGVzICovCisKKyNkZWZpbmUgRkRDU0VMUkVHX1NUUCAgICgweDgwKSAgIC8qIGNvbW1hbmQvc3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIEZEQ1NFTFJFR19UUkEgICAoMHg4MikgICAvKiB0cmFjayByZWdpc3RlciAqLworI2RlZmluZSBGRENTRUxSRUdfU0VDICAgKDB4ODQpICAgLyogc2VjdG9yIHJlZ2lzdGVyICovCisjZGVmaW5lIEZEQ1NFTFJFR19EVEEgICAoMHg4NikgICAvKiBkYXRhIHJlZ2lzdGVyICovCisKKy8qIHJlZ2lzdGVyIG5hbWVzIGZvciBGRENfUkVBRC9XUklURSBtYWNyb3MgKi8KKworI2RlZmluZSBGRENSRUdfQ01ECQkwCisjZGVmaW5lIEZEQ1JFR19TVEFUVVMJMAorI2RlZmluZSBGRENSRUdfVFJBQ0sJMgorI2RlZmluZSBGRENSRUdfU0VDVE9SCTQKKyNkZWZpbmUgRkRDUkVHX0RBVEEJCTYKKworLyogY29tbWFuZCBvcGNvZGVzICovCisKKyNkZWZpbmUgRkRDQ01EX1JFU1RPUkUgICgweDAwKSAgIC8qICAtICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZEQ0NNRF9TRUVLICAgICAoMHgxMCkgICAvKiAgIHwgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGRENDTURfU1RFUCAgICAgKDB4MjApICAgLyogICB8ICBUWVAgMSBDb21tYW5kcyAgKi8KKyNkZWZpbmUgRkRDQ01EX1NUSU4gICAgICgweDQwKSAgIC8qICAgfCAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZEQ0NNRF9TVE9UICAgICAoMHg2MCkgICAvKiAgLSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGRENDTURfUkRTRUMgICAgKDB4ODApICAgLyogIC0gICBUWVAgMiBDb21tYW5kcyAgKi8KKyNkZWZpbmUgRkRDQ01EX1dSU0VDICAgICgweGEwKSAgIC8qICAtICAgICAgICAgICIgICAgICAgICovCisjZGVmaW5lIEZEQ0NNRF9SREFEUiAgICAoMHhjMCkgICAvKiAgLSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGRENDTURfUkRUUkEgICAgKDB4ZTApICAgLyogICB8ICBUWVAgMyBDb21tYW5kcyAgKi8KKyNkZWZpbmUgRkRDQ01EX1dSVFJBICAgICgweGYwKSAgIC8qICAtICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZEQ0NNRF9GT1JDSSAgICAoMHhkMCkgICAvKiAgLSAgIFRZUCA0IENvbW1hbmQgICAqLworCisvKiBjb21tYW5kIG1vZGlmaWVyIGJpdHMgKi8KKworI2RlZmluZSBGRENDTURBRERfU1I2ICAgKDB4MDApICAgLyogc3RlcCByYXRlIHNldHRpbmdzICovCisjZGVmaW5lIEZEQ0NNREFERF9TUjEyICAoMHgwMSkKKyNkZWZpbmUgRkRDQ01EQUREX1NSMiAgICgweDAyKQorI2RlZmluZSBGRENDTURBRERfU1IzICAgKDB4MDMpCisjZGVmaW5lIEZEQ0NNREFERF9WICAgICAoMHgwNCkgICAvKiB2ZXJpZnkgKi8KKyNkZWZpbmUgRkRDQ01EQUREX0ggICAgICgweDA4KSAgIC8qIHdhaXQgZm9yIHNwaW4tdXAgKi8KKyNkZWZpbmUgRkRDQ01EQUREX1UgICAgICgweDEwKSAgIC8qIHVwZGF0ZSB0cmFjayByZWdpc3RlciAqLworI2RlZmluZSBGRENDTURBRERfTSAgICAgKDB4MTApICAgLyogbXVsdGlwbGUgc2VjdG9yIGFjY2VzcyAqLworI2RlZmluZSBGRENDTURBRERfRSAgICAgKDB4MDQpICAgLyogaGVhZCBzZXR0bGluZyBmbGFnICovCisjZGVmaW5lIEZEQ0NNREFERF9QICAgICAoMHgwMikgICAvKiBwcmVjb21wZW5zYXRpb24gb2ZmICovCisjZGVmaW5lIEZEQ0NNREFERF9BMCAgICAoMHgwMSkgICAvKiBEQU0gZmxhZyAqLworCisvKiBzdGF0dXMgcmVnaXN0ZXIgYml0cyAqLworCisjZGVmaW5lCUZEQ1NUQVRfTU9UT1JPTgkoMHg4MCkgICAvKiBtb3RvciBvbiAqLworI2RlZmluZQlGRENTVEFUX1dQUk9UCSgweDQwKSAgIC8qIHdyaXRlIHByb3RlY3RlZCAoRkRDQ01EX1dSKikgKi8KKyNkZWZpbmUJRkRDU1RBVF9TUElOVVAJKDB4MjApICAgLyogbW90b3Igc3BlZWQgc3RhYmxlIChUeXBlIEkpICovCisjZGVmaW5lCUZEQ1NUQVRfREVMREFNCSgweDIwKSAgIC8qIHNlY3RvciBoYXMgZGVsZXRlZCBEQU0gKFR5cGUgSUkrSUlJKSAqLworI2RlZmluZQlGRENTVEFUX1JFQ05GCSgweDEwKSAgIC8qIHJlY29yZCBub3QgZm91bmQgKi8KKyNkZWZpbmUJRkRDU1RBVF9DUkMJCSgweDA4KSAgIC8qIENSQyBlcnJvciAqLworI2RlZmluZQlGRENTVEFUX1RSMDAJKDB4MDQpICAgLyogVHJhY2sgMDAgZmxhZyAoVHlwZSBJKSAqLworI2RlZmluZQlGRENTVEFUX0xPU1QJKDB4MDQpICAgLyogTG9zdCBEYXRhIChUeXBlIElJK0lJSSkgKi8KKyNkZWZpbmUJRkRDU1RBVF9JRFgJCSgweDAyKSAgIC8qIEluZGV4IHN0YXR1cyAoVHlwZSBJKSAqLworI2RlZmluZQlGRENTVEFUX0RSUQkJKDB4MDIpICAgLyogRFJRIHN0YXR1cyAoVHlwZSBJSStJSUkpICovCisjZGVmaW5lCUZEQ1NUQVRfQlVTWQkoMHgwMSkgICAvKiBGREMgaXMgYnVzeSAqLworCisKKy8qIFBTRyBQb3J0IEEgQml0IE5yIDAgLi4gU2lkZSBTZWwgLi4gMCAtPiBTaWRlIDEgIDEgLT4gU2lkZSAyICovCisjZGVmaW5lIERTS1NJREUgICAgICgweDAxKQorCisjZGVmaW5lIERTS0RSVk5PTkUgICgweDA2KQorI2RlZmluZSBEU0tEUlYwICAgICAoMHgwMikKKyNkZWZpbmUgRFNLRFJWMSAgICAgKDB4MDQpCisKKy8qIHN0ZXAgcmF0ZXMgKi8KKyNkZWZpbmUJRkRDU1RFUF82CTB4MDAKKyNkZWZpbmUJRkRDU1RFUF8xMgkweDAxCisjZGVmaW5lCUZEQ1NURVBfMgkweDAyCisjZGVmaW5lCUZEQ1NURVBfMwkweDAzCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9hdGFyaV9TTE0uaCBiL2luY2x1ZGUvYXNtLW02OGsvYXRhcmlfU0xNLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJmNGZjZGQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2F0YXJpX1NMTS5oCkBAIC0wLDAgKzEsMjggQEAKKworI2lmbmRlZiBfQVRBUklfU0xNX0gKKyNkZWZpbmUgX0FUQVJJX1NMTV9ICisKKy8qIEF0YXJpIFNMTSBsYXNlciBwcmludGVyIHNwZWNpZmljIGlvY3RscyAqLworCisjZGVmaW5lCVNMTUlPR1NUQVQJMHhhMTAwCisjZGVmaW5lCVNMTUlPR1BTSVpFCTB4YTEwMQorI2RlZmluZQlTTE1JT0dNRkVFRAkweGExMDIKKworI2RlZmluZQlTTE1JT1JFU0VUCTB4YTE0MAorCisjZGVmaW5lCVNMTUlPU1BTSVpFCTB4YTE4MQorI2RlZmluZQlTTE1JT1NNRkVFRAkweGExODIKKworLyogU3RhdHVzIHJldHVybmluZyBzdHJ1Y3R1cmUgKFNMTUlPR1NUQVQpICovCitzdHJ1Y3QgU0xNX3N0YXR1cyB7CisJaW50CQlzdGF0OwkJLyogbnVtZXJpYyBzdGF0dXMgY29kZSAqLworCWNoYXIJc3RyWzQwXTsJLyogc3RhdHVzIHN0cmluZyAqLworfTsKKworLyogUGFwZXIgc2l6ZSBzdHJ1Y3R1cmUgKFNMTUlPW0dTXVBTSVpFKSAqLworc3RydWN0IFNMTV9wYXBlcl9zaXplIHsKKwlpbnQJCXdpZHRoOworCWludAkJaGVpZ2h0OworfTsKKworI2VuZGlmIC8qIF9BVEFSSV9TTE1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9hdGFyaV9hY3NpLmggYi9pbmNsdWRlL2FzbS1tNjhrL2F0YXJpX2Fjc2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGZlYTY4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9hdGFyaV9hY3NpLmgKQEAgLTAsMCArMSwzNyBAQAorI2lmbmRlZiBfQVNNX0FUQVJJX0FDU0lfSAorI2RlZmluZSBfQVNNX0FUQVJJX0FDU0lfSAorCisvKiBGdW5jdGlvbnMgZXhwb3J0ZWQgYnkgZHJpdmVycy9ibG9jay9hY3NpLmMgKi8KKwordm9pZCBhY3NpX2RlbGF5X3N0YXJ0KCB2b2lkICk7Cit2b2lkIGFjc2lfZGVsYXlfZW5kKCBsb25nIHVzZWMgKTsKK2ludCBhY3NpX3dhaXRfZm9yX0lSUSggdW5zaWduZWQgdGltZW91dCApOworaW50IGFjc2lfd2FpdF9mb3Jfbm9JUlEoIHVuc2lnbmVkIHRpbWVvdXQgKTsKK2ludCBhY3NpY21kX25vZG1hKCBjb25zdCBjaGFyICpjbWQsIGludCBlbmFibGUpOworaW50IGFjc2lfZ2V0c3RhdHVzKCB2b2lkICk7CitpbnQgYWNzaV9leHRzdGF0dXMoIGNoYXIgKmJ1ZmZlciwgaW50IGNudCApOwordm9pZCBhY3NpX2VuZF9leHRzdGF0dXMoIHZvaWQgKTsKK2ludCBhY3NpX2V4dGNtZCggdW5zaWduZWQgY2hhciAqYnVmZmVyLCBpbnQgY250ICk7CisKKy8qIFRoZSBBQ1NJIGJ1ZmZlciBpcyBndWFyYW50dWVlZCB0byByZXNpZGUgaW4gU1QtUkFNIGFuZCBtYXkgYmUgdXNlZCBieSBvdGhlcgorICogZHJpdmVycyB0aGF0IHdvcmsgb24gdGhlIEFDU0kgYnVzLCB0b28uIEl0J3MgZGF0YSBhcmUgdmFsaWQgb25seSBhcyBsb25nIGFzCisgKiB0aGUgU1QtRE1BIGlzIGxvY2tlZC4gKi8KK2V4dGVybiBjaGFyICphY3NpX2J1ZmZlcjsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHBoeXNfYWNzaV9idWZmZXI7CisKKy8qIFV0aWxpdHkgbWFjcm9zICovCisKKy8qIFNlbmQgb25lIGRhdGEgYnl0ZSBvdmVyIHRoZSBidXMgYW5kIHNldCBtb2RlIGZvciBuZXh0IG9wZXJhdGlvbgorICogd2l0aCBvbmUgbW92ZS5sIC0tIEF0YXJpIHJlY29tbWVuZHMgdGhpcy4uLgorICovCisKKyNkZWZpbmUgRE1BX0xPTkdfV1JJVEUoZGF0YSxtb2RlKQkJCQkJCQlcCisgICAgZG8gewkJCQkJCQkJCQkJCQlcCisJCSooKHVuc2lnbmVkIGxvbmcgKikmZG1hX3dkLmZkY19hY2Nlc19zZWNjb3VudCkgPQlcCisJCQkoKGRhdGEpPDwxNikgfCAobW9kZSk7CQkJCQkJCVwKKwl9IHdoaWxlKDApCisKKyNkZWZpbmUgRU5BQkxFX0lSUSgpCWF0YXJpX3R1cm5vbl9pcnEoIElSUV9NRlBfQUNTSSApCisjZGVmaW5lIERJU0FCTEVfSVJRKCkJYXRhcmlfdHVybm9mZl9pcnEoIElSUV9NRlBfQUNTSSApCisKKyNlbmRpZiAvKiBfQVNNX0FUQVJJX0FDU0lfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9hdGFyaV9qb3lzdGljay5oIGIvaW5jbHVkZS9hc20tbTY4ay9hdGFyaV9qb3lzdGljay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzYmU3ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2F0YXJpX2pveXN0aWNrLmgKQEAgLTAsMCArMSwyMiBAQAorI2lmbmRlZiBfTElOVVhfQVRBUklfSk9ZU1RJQ0tfSAorI2RlZmluZSBfTElOVVhfQVRBUklfSk9ZU1RJQ0tfSAorCisvKgorICogbGludXgvaW5jbHVkZS9saW51eC9hdGFyaV9qb3lzdGljay5oCisgKiBoZWFkZXIgZmlsZSBmb3IgQXRhcmkgSm95c3RpY2sgZHJpdmVyCisgKiBieSBSb2JlcnQgZGUgVnJpZXMgKHJvYmVydEBhbmQubmwpIG9uIDE5SnVsOTMKKyAqLworCit2b2lkIGF0YXJpX2pveXN0aWNrX2ludGVycnVwdChjaGFyKik7CitpbnQgYXRhcmlfam95c3RpY2tfaW5pdCh2b2lkKTsKK2V4dGVybiBpbnQgYXRhcmlfbW91c2VfYnV0dG9uczsKKworc3RydWN0IGpveXN0aWNrX3N0YXR1cyB7CisJY2hhcgkJZmlyZTsKKwljaGFyCQlkaXI7CisJaW50CQlyZWFkeTsKKwlpbnQJCWFjdGl2ZTsKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL2F0YXJpX3N0ZG1hLmggYi9pbmNsdWRlL2FzbS1tNjhrL2F0YXJpX3N0ZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjRmOTI4OAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvYXRhcmlfc3RkbWEuaApAQCAtMCwwICsxLDIzIEBACisKKyNpZm5kZWYgX2F0YXJpX3N0ZG1hX2gKKyNkZWZpbmUgX2F0YXJpX3N0ZG1hX2gKKworCisjaW5jbHVkZSA8YXNtL2lycS5oPgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBQcm90b3R5cGVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit2b2lkIHN0ZG1hX2xvY2soaXJxcmV0dXJuX3QgKCpoYW5kbGVyKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKiksCisJCXZvaWQgKmRhdGEpOwordm9pZCBzdGRtYV9yZWxlYXNlKCB2b2lkICk7CitpbnQgc3RkbWFfb3RoZXJzX3dhaXRpbmcoIHZvaWQgKTsKK2ludCBzdGRtYV9pc2xvY2tlZCggdm9pZCApOwordm9pZCAqc3RkbWFfbG9ja2VkX2J5KCB2b2lkICk7Cit2b2lkIHN0ZG1hX2luaXQoIHZvaWQgKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKiogRW5kIG9mIFByb3RvdHlwZXMgKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworCisjZW5kaWYgIC8qIF9hdGFyaV9zdGRtYV9oICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL2F0YXJpX3N0cmFtLmggYi9pbmNsdWRlL2FzbS1tNjhrL2F0YXJpX3N0cmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU0NmQxMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvYXRhcmlfc3RyYW0uaApAQCAtMCwwICsxLDE3IEBACisjaWZuZGVmIF9NNjhLX0FUQVJJX1NUUkFNX0gKKyNkZWZpbmUgX002OEtfQVRBUklfU1RSQU1fSAorCisvKgorICogRnVuY3Rpb25zIGZvciBBdGFyaSBTVC1SQU0gbWFuYWdlbWVudAorICovCisKKy8qIHB1YmxpYyBpbnRlcmZhY2UgKi8KK3ZvaWQgKmF0YXJpX3N0cmFtX2FsbG9jKGxvbmcgc2l6ZSwgY29uc3QgY2hhciAqb3duZXIpOwordm9pZCBhdGFyaV9zdHJhbV9mcmVlKHZvaWQgKik7CisKKy8qIGZ1bmN0aW9ucyBjYWxsZWQgaW50ZXJuYWxseSBieSBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsICovCit2b2lkIGF0YXJpX3N0cmFtX2luaXQodm9pZCk7Cit2b2lkIGF0YXJpX3N0cmFtX3Jlc2VydmVfcGFnZXModm9pZCAqc3RhcnRfbWVtKTsKK3ZvaWQgYXRhcmlfc3RyYW1fbWVtX2luaXRfaG9vayAodm9pZCk7CisKKyNlbmRpZiAvKl9NNjhLX0FUQVJJX1NUUkFNX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvYXRhcmlody5oIGIvaW5jbHVkZS9hc20tbTY4ay9hdGFyaWh3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI4YWNkMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvYXRhcmlody5oCkBAIC0wLDAgKzEsODA4IEBACisvKgorKiogbGludXgvYXRhcmlody5oIC0tIFRoaXMgaGVhZGVyIGRlZmluZXMgc29tZSBtYWNyb3MgYW5kIHBvaW50ZXJzIGZvcgorKiogICAgICAgICAgICAgICAgICAgIHRoZSB2YXJpb3VzIEF0YXJpIGN1c3RvbSBoYXJkd2FyZSByZWdpc3RlcnMuCisqKgorKiogQ29weXJpZ2h0IDE5OTQgYnkgQmqUcm4gQnJhdWVsCisqKgorKiogNS8xLzk0IFJvbWFuIEhvZGVrOgorKiogICBBZGRlZCBkZWZpbml0aW9ucyBmb3IgVFQgc3BlY2lmaWMgY2hpcHMuCisqKgorKiogMTk5Ni0wOS0xMyBsYXJzIGJyaW5raG9mZiA8ZjkzbGFickBkZC5jaGFsbWVycy5zZT46CisqKiAgIEZpbmFsbHkgYWRkZWQgZGVmaW5pdGlvbnMgZm9yIHRoZSBtYXRyaXgvY29kZWMgYW5kIHRoZSBEU1A1NjAwMSBob3N0CisqKiAgIGludGVyZmFjZS4KKyoqCisqKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworKiogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyoqIGZvciBtb3JlIGRldGFpbHMuCisqKgorKi8KKworI2lmbmRlZiBfTElOVVhfQVRBUklIV19IXworI2RlZmluZSBfTElOVVhfQVRBUklIV19IXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KKyNpbmNsdWRlIDxhc20vcmF3X2lvLmg+CisKK2V4dGVybiB1X2xvbmcgYXRhcmlfbWNoX2Nvb2tpZTsKK2V4dGVybiB1X2xvbmcgYXRhcmlfbWNoX3R5cGU7CitleHRlcm4gdV9sb25nIGF0YXJpX3N3aXRjaGVzOworZXh0ZXJuIGludCBhdGFyaV9ydGNfeWVhcl9vZmZzZXQ7CitleHRlcm4gaW50IGF0YXJpX2RvbnRfdG91Y2hfZmxvcHB5X3NlbGVjdDsKKworLyogY29udmVuaWVuY2UgbWFjcm9zIGZvciB0ZXN0aW5nIG1hY2hpbmUgdHlwZSAqLworI2RlZmluZSBNQUNIX0lTX1NUCSgoYXRhcmlfbWNoX2Nvb2tpZSA+PiAxNikgPT0gQVRBUklfTUNIX1NUKQorI2RlZmluZSBNQUNIX0lTX1NURQkoKGF0YXJpX21jaF9jb29raWUgPj4gMTYpID09IEFUQVJJX01DSF9TVEUgJiYgXAorCQkJIChhdGFyaV9tY2hfY29va2llICYgMHhmZmZmKSA9PSAwKQorI2RlZmluZSBNQUNIX0lTX01TVEUJKChhdGFyaV9tY2hfY29va2llID4+IDE2KSA9PSBBVEFSSV9NQ0hfU1RFICYmIFwKKwkJCSAoYXRhcmlfbWNoX2Nvb2tpZSAmIDB4ZmZmZikgPT0gMHgxMCkKKyNkZWZpbmUgTUFDSF9JU19UVAkoKGF0YXJpX21jaF9jb29raWUgPj4gMTYpID09IEFUQVJJX01DSF9UVCkKKyNkZWZpbmUgTUFDSF9JU19GQUxDT04JKChhdGFyaV9tY2hfY29va2llID4+IDE2KSA9PSBBVEFSSV9NQ0hfRkFMQ09OKQorI2RlZmluZSBNQUNIX0lTX01FRFVTQQkoYXRhcmlfbWNoX3R5cGUgPT0gQVRBUklfTUFDSF9NRURVU0EpCisjZGVmaW5lIE1BQ0hfSVNfSEFERVMJKGF0YXJpX21jaF90eXBlID09IEFUQVJJX01BQ0hfSEFERVMpCisjZGVmaW5lIE1BQ0hfSVNfQUI0MAkoYXRhcmlfbWNoX3R5cGUgPT0gQVRBUklfTUFDSF9BQjQwKQorCisvKiB2YWx1ZXMgZm9yIGF0YXJpX3N3aXRjaGVzICovCisjZGVmaW5lIEFUQVJJX1NXSVRDSF9JS0JECTB4MDEKKyNkZWZpbmUgQVRBUklfU1dJVENIX01JREkJMHgwMgorI2RlZmluZSBBVEFSSV9TV0lUQ0hfU05ENgkweDA0CisjZGVmaW5lIEFUQVJJX1NXSVRDSF9TTkQ3CTB4MDgKKyNkZWZpbmUgQVRBUklfU1dJVENIX09WU0NfU0hJRlQJMTYKKyNkZWZpbmUgQVRBUklfU1dJVENIX09WU0NfSUtCRAkoQVRBUklfU1dJVENIX0lLQkQgPDwgQVRBUklfU1dJVENIX09WU0NfU0hJRlQpCisjZGVmaW5lIEFUQVJJX1NXSVRDSF9PVlNDX01JREkJKEFUQVJJX1NXSVRDSF9NSURJIDw8IEFUQVJJX1NXSVRDSF9PVlNDX1NISUZUKQorI2RlZmluZSBBVEFSSV9TV0lUQ0hfT1ZTQ19TTkQ2CShBVEFSSV9TV0lUQ0hfU05ENiA8PCBBVEFSSV9TV0lUQ0hfT1ZTQ19TSElGVCkKKyNkZWZpbmUgQVRBUklfU1dJVENIX09WU0NfU05ENwkoQVRBUklfU1dJVENIX1NORDcgPDwgQVRBUklfU1dJVENIX09WU0NfU0hJRlQpCisjZGVmaW5lIEFUQVJJX1NXSVRDSF9PVlNDX01BU0sJMHhmZmZmMDAwMAorCisvKgorICogRGVmaW5lIHNldmVyYWwgSGFyZHdhcmUtQ2hpcHMgZm9yIGluZGljYXRpb24gc28gdGhhdCBmb3IgdGhlIEFUQVJJIHdlIGRvCisgKiBubyBsb25nZXIgZGVjaWRlIHdoZXRoZXIgaXQgaXMgYSBGYWxjb24gb3Igb3RoZXIgbWFjaGluZSAuIEl0J3MganVzdAorICogaW1wb3J0YW50IHdoYXQgaGFyZHdhcmUgdGhlIG1hY2hpbmUgdXNlcworICovCisKKy8qICsrcm9tYW4gMDgvMDgvOTU6IHJld3JpdHRlbiBmcm9tIE9SaW5nIGNvbnN0YW50cyB0byBhIEMgYml0ZmllbGQgKi8KKworI2RlZmluZSBBVEFSSUhXX0RFQ0xBUkUobmFtZSkJdW5zaWduZWQgbmFtZSA6IDEKKyNkZWZpbmUgQVRBUklIV19TRVQobmFtZSkJKGF0YXJpX2h3X3ByZXNlbnQubmFtZSA9IDEpCisjZGVmaW5lIEFUQVJJSFdfUFJFU0VOVChuYW1lKQkoYXRhcmlfaHdfcHJlc2VudC5uYW1lKQorCitzdHJ1Y3QgYXRhcmlfaHdfcHJlc2VudCB7CisgICAgLyogdmlkZW8gaGFyZHdhcmUgKi8KKyAgICBBVEFSSUhXX0RFQ0xBUkUoU1RORF9TSElGVEVSKTsJLyogU1QtU2hpZnRlciAtIG5vIGJhc2UgbG93ICEgKi8KKyAgICBBVEFSSUhXX0RFQ0xBUkUoRVhURF9TSElGVEVSKTsJLyogU1RlLVNoaWZ0ZXIgLSAyNCBiaXQgYWRkcmVzcyAqLworICAgIEFUQVJJSFdfREVDTEFSRShUVF9TSElGVEVSKTsJLyogVFQtU2hpZnRlciAqLworICAgIEFUQVJJSFdfREVDTEFSRShWSURFTF9TSElGVEVSKTsJLyogRmFsY29uLVNoaWZ0ZXIgKi8KKyAgICAvKiBzb3VuZCBoYXJkd2FyZSAqLworICAgIEFUQVJJSFdfREVDTEFSRShZTV8yMTQ5KTsJCS8qIFlhbWFoYSBZTSAyMTQ5ICovCisgICAgQVRBUklIV19ERUNMQVJFKFBDTV84QklUKTsJCS8qIFBDTS1Tb3VuZCBpbiBTVGUtQVRBUkkgKi8KKyAgICBBVEFSSUhXX0RFQ0xBUkUoQ09ERUMpOwkJLyogQ09ERUMgU291bmQgKEZhbGNvbikgKi8KKyAgICAvKiBkaXNrIHN0b3JhZ2UgaW50ZXJmYWNlcyAqLworICAgIEFUQVJJSFdfREVDTEFSRShUVF9TQ1NJKTsJCS8qIERpcmVjdGx5IG1hcHBlZCBOQ1I1MzgwICovCisgICAgQVRBUklIV19ERUNMQVJFKFNUX1NDU0kpOwkJLyogTkNSNTM4MCB2aWEgU1QtRE1BIChGYWxjb24pICovCisgICAgQVRBUklIV19ERUNMQVJFKEFDU0kpOwkJLyogU3RhbmRhcmQgQUNTSSBsaWtlIGluIFNUcyAqLworICAgIEFUQVJJSFdfREVDTEFSRShJREUpOwkJLyogSURFIEludGVyZmFjZSAqLworICAgIEFUQVJJSFdfREVDTEFSRShGRENTUEVFRCk7CQkvKiA4LzE2IE1IeiBzd2l0Y2ggZm9yIEZEQyAqLworICAgIC8qIG90aGVyIEkvTyBoYXJkd2FyZSAqLworICAgIEFUQVJJSFdfREVDTEFSRShTVF9NRlApOwkJLyogVGhlIFNULU1GUCAodGhlcmUgc2hvdWxkIGJlIG5vIEF0YXJpCisJCQkJCSAgIHdpdGhvdXQgaXQuLi4gYnV0IHdobyBrbm93cz8pICovCisgICAgQVRBUklIV19ERUNMQVJFKFRUX01GUCk7CQkvKiAybmQgTUZQICovCisgICAgQVRBUklIV19ERUNMQVJFKFNDQyk7CQkvKiBTZXJpYWwgQ29tbXVuaWNhdGlvbnMgQ29udHIuICovCisgICAgQVRBUklIV19ERUNMQVJFKFNUX0VTQ0MpOwkJLyogU0NDIFo4MzIzMCBpbiBhbiBTVCAqLworICAgIEFUQVJJSFdfREVDTEFSRShBTkFMT0dfSk9ZKTsJLyogUGFkZGxlIEludGVyZmFjZSBmb3IgU1RlCisJCQkJCSAgIGFuZCBGYWxjb24gKi8KKyAgICBBVEFSSUhXX0RFQ0xBUkUoTUlDUk9XSVJFKTsJCS8qIE1pY3Jvd2lyZSBJbnRlcmZhY2UgKi8KKyAgICAvKiBETUEgKi8KKyAgICBBVEFSSUhXX0RFQ0xBUkUoU1RORF9ETUEpOwkJLyogMjQgQml0IGxpbWl0ZWQgU1QtRE1BICovCisgICAgQVRBUklIV19ERUNMQVJFKEVYVERfRE1BKTsJCS8qIDMyIEJpdCBTVC1ETUEgKi8KKyAgICBBVEFSSUhXX0RFQ0xBUkUoU0NTSV9ETUEpOwkJLyogRE1BIGZvciB0aGUgTkNSNTM4MCAqLworICAgIEFUQVJJSFdfREVDTEFSRShTQ0NfRE1BKTsJCS8qIERNQSBmb3IgdGhlIFNDQyAqLworICAgIC8qIHJlYWwgdGltZSBjbG9ja3MgKi8KKyAgICBBVEFSSUhXX0RFQ0xBUkUoVFRfQ0xLKTsJCS8qIFRUIGNvbXBhdGlibGUgY2xvY2sgY2hpcCAqLworICAgIEFUQVJJSFdfREVDTEFSRShNU1RFX0NMSyk7CQkvKiBNZWdhIFNUKEUpIGNsb2NrIGNoaXAgKi8KKyAgICAvKiBzdXBwb3J0aW5nIGhhcmR3YXJlICovCisgICAgQVRBUklIV19ERUNMQVJFKFNDVSk7CQkvKiBTeXN0ZW0gQ29udHJvbCBVbml0ICovCisgICAgQVRBUklIV19ERUNMQVJFKEJMSVRURVIpOwkJLyogQmxpdHRlciAqLworICAgIEFUQVJJSFdfREVDTEFSRShWTUUpOwkJLyogVk1FIEJ1cyAqLworICAgIEFUQVJJSFdfREVDTEFSRShEU1A1NkspOwkJLyogRFNQNTZrIHByb2Nlc3NvciBpbiBGYWxjb24gKi8KK307CisKK2V4dGVybiBzdHJ1Y3QgYXRhcmlfaHdfcHJlc2VudCBhdGFyaV9od19wcmVzZW50OworCisKKy8qIFJlYWRpbmcgdGhlIE1GUCBwb3J0IHJlZ2lzdGVyIGdpdmVzIGEgbWFjaGluZSBpbmRlcGVuZGVudCBkZWxheSwgc2luY2UgdGhlCisgKiBNRlAgYWx3YXlzIGhhcyBhIDggTUh6IGNsb2NrLiBUaGlzIGF2b2lkcyBwcm9ibGVtcyB3aXRoIHRoZSB2YXJ5aW5nIGxlbmd0aAorICogb2Ygbm9wcyBvbiB2YXJpb3VzIG1hY2hpbmVzLiBTb21lYm9keSBjbGFpbWVkIHRoYXQgdGhlIHRzdGIgdGFrZXMgNjAwIG5zLgorICovCisjZGVmaW5lCU1GUERFTEFZKCkgXAorCV9fYXNtX18gX192b2xhdGlsZV9fICggInRzdGIgJTAiIDogOiAibSIgKG1mcC5wYXJfZHRfcmVnKSA6ICJjYyIgKTsKKworLyogRG8gY2FjaGUgcHVzaC9pbnZhbGlkYXRlIGZvciBETUEgcmVhZC93cml0ZS4gVGhpcyBmdW5jdGlvbiBvYmV5cyB0aGUKKyAqIHNub29waW5nIG9uIHNvbWUgbWFjaGluZXMgKE1lZHVzYSkgYW5kIHByb2Nlc3NvcnM6IFRoZSBNZWR1c2EgaXRzZWxmIGNhbgorICogc25vb3AsIGJ1dCBvbmx5IHRoZSAnMDQwIGNhbiBzb3VyY2UgZGF0YSBmcm9tIGl0cyBjYWNoZSB0byBETUEgd3JpdGVzIGkuZS4sCisgKiByZWFkcyBmcm9tIG1lbW9yeSkuIEJvdGggJzA0MCBhbmQgJzA2MCBpbnZhbGlkYXRlIGNhY2hlIGVudHJpZXMgb24gc25vb3BlZAorICogRE1BIHJlYWRzIChpLmUuLCB3cml0ZXMgdG8gbWVtb3J5KS4KKyAqLworCisKKyNkZWZpbmUgYXRhcmlfcmVhZGIgICByYXdfaW5iCisjZGVmaW5lIGF0YXJpX3dyaXRlYiAgcmF3X291dGIKKworI2RlZmluZSBhdGFyaV9pbmJfcCAgIHJhd19pbmIKKyNkZWZpbmUgYXRhcmlfb3V0Yl9wICByYXdfb3V0YgorCisKKworI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKworc3RhdGljIGlubGluZSB2b2lkIGRtYV9jYWNoZV9tYWludGVuYW5jZSggdW5zaWduZWQgbG9uZyBwYWRkciwKKwkJCQkJICB1bnNpZ25lZCBsb25nIGxlbiwKKwkJCQkJICBpbnQgd3JpdGVmbGFnICkKKworeworCWlmICh3cml0ZWZsYWcpIHsKKwkJaWYgKCFNQUNIX0lTX01FRFVTQSB8fCBDUFVfSVNfMDYwKQorCQkJY2FjaGVfcHVzaCggcGFkZHIsIGxlbiApOworCX0KKwllbHNlIHsKKwkJaWYgKCFNQUNIX0lTX01FRFVTQSkKKwkJCWNhY2hlX2NsZWFyKCBwYWRkciwgbGVuICk7CisJfQorfQorCisKKy8qCisqKiBTaGlmdGVyCisgKi8KKyNkZWZpbmUgU1RfTE9XICAwCisjZGVmaW5lIFNUX01JRCAgMQorI2RlZmluZSBTVF9ISUdIIDIKKyNkZWZpbmUgVFRfTE9XICA3CisjZGVmaW5lIFRUX01JRCAgNAorI2RlZmluZSBUVF9ISUdIIDYKKworI2RlZmluZSBTSEZfQkFTICgweGZmZmY4MjAwKQorc3RydWN0IFNISUZURVIKKyB7CisJdV9jaGFyIHBhZDE7CisJdV9jaGFyIGJhc19oaTsKKwl1X2NoYXIgcGFkMjsKKwl1X2NoYXIgYmFzX21kOworCXVfY2hhciBwYWQzOworCXVfY2hhciB2b2xhdGlsZSB2Y291bnRoaTsKKwl1X2NoYXIgcGFkNDsKKwl1X2NoYXIgdm9sYXRpbGUgdmNvdW50bWlkOworCXVfY2hhciBwYWQ1OworCXVfY2hhciB2b2xhdGlsZSB2Y291bnRsb3c7CisJdV9jaGFyIHZvbGF0aWxlIHN5bmNtb2RlOworCXVfY2hhciBwYWQ2OworCXVfY2hhciBwYWQ3OworCXVfY2hhciBiYXNfbG87CisgfTsKKyMgZGVmaW5lIHNoaWZ0ZXIgKCgqKHZvbGF0aWxlIHN0cnVjdCBTSElGVEVSICopU0hGX0JBUykpCisKKyNkZWZpbmUgU0hGX0ZCQVMgKDB4ZmZmZjgyMGUpCitzdHJ1Y3QgU0hJRlRFUl9GMDMwCisgeworICB1X3Nob3J0IG9mZl9uZXh0OworICB1X3Nob3J0IHNjbl93aWR0aDsKKyB9OworIyBkZWZpbmUgc2hpZnRlcl9mMDMwICgoKih2b2xhdGlsZSBzdHJ1Y3QgU0hJRlRFUl9GMDMwICopU0hGX0ZCQVMpKQorCisKKyNkZWZpbmUJU0hGX1RCQVMgKDB4ZmZmZjgyMDApCitzdHJ1Y3QgU0hJRlRFUl9UVCB7CisJdV9jaGFyCWNoYXJfZHVtbXkwOworCXVfY2hhcgliYXNfaGk7CQkJLyogdmlkZW8gbWVtIGJhc2UgYWRkciwgaGlnaCBhbmQgbWlkIGJ5dGUgKi8KKwl1X2NoYXIJY2hhcl9kdW1teTE7CisJdV9jaGFyCWJhc19tZDsKKwl1X2NoYXIJY2hhcl9kdW1teTI7CisJdV9jaGFyCXZjb3VudF9oaTsJCS8qIHBvaW50ZXIgdG8gY3VycmVudGx5IGRpc3BsYXllZCBieXRlICovCisJdV9jaGFyCWNoYXJfZHVtbXkzOworCXVfY2hhcgl2Y291bnRfbWQ7CisJdV9jaGFyCWNoYXJfZHVtbXk0OworCXVfY2hhcgl2Y291bnRfbG87CisJdV9zaG9ydAlzdF9zeW5jOwkJLyogU1QgY29tcGF0aWJsZSBzeW5jIG1vZGUgcmVnaXN0ZXIsIHVudXNlZCAqLworCXVfY2hhcgljaGFyX2R1bW15NTsKKwl1X2NoYXIJYmFzX2xvOwkJCS8qIHZpZGVvIG1lbSBhZGRyLCBsb3cgYnl0ZSAqLworCXVfY2hhcgljaGFyX2R1bW15NlsyKzMqMTZdOworCS8qICRmZmZmODI0MDogKi8KKwl1X3Nob3J0CWNvbG9yX3JlZ1sxNl07CS8qIDE2IGNvbG9yIHJlZ2lzdGVycyAqLworCXVfY2hhcglzdF9zaGlmdG1vZGU7CS8qIFNUIGNvbXBhdGlibGUgc2hpZnQgbW9kZSByZWdpc3RlciwgdW51c2VkICovCisJdV9jaGFyICBjaGFyX2R1bW15NzsKKwl1X3Nob3J0IHR0X3NoaWZ0bW9kZTsJLyogVFQgc2hpZnQgbW9kZSByZWdpc3RlciAqLworCisKK307CisjZGVmaW5lCXNoaWZ0ZXJfdHQJKCgqKHZvbGF0aWxlIHN0cnVjdCBTSElGVEVSX1RUICopU0hGX1RCQVMpKQorCisvKiB2YWx1ZXMgZm9yIHNoaWZ0ZXJfdHQtPnR0X3NoaWZ0bW9kZSAqLworI2RlZmluZQlUVF9TSElGVEVSX1NUTE9XCQkweDAwMDAKKyNkZWZpbmUJVFRfU0hJRlRFUl9TVE1JRAkJMHgwMTAwCisjZGVmaW5lCVRUX1NISUZURVJfU1RISUdICQkweDAyMDAKKyNkZWZpbmUJVFRfU0hJRlRFUl9UVExPVwkJMHgwNzAwCisjZGVmaW5lCVRUX1NISUZURVJfVFRNSUQJCTB4MDQwMAorI2RlZmluZQlUVF9TSElGVEVSX1RUSElHSAkJMHgwNjAwCisjZGVmaW5lCVRUX1NISUZURVJfTU9ERU1BU0sJMHgwNzAwCisjZGVmaW5lIFRUX1NISUZURVJfTlVNTU9ERQkweDAwMDgKKyNkZWZpbmUJVFRfU0hJRlRFUl9QQUxFVFRFX01BU0sJMHgwMDBmCisjZGVmaW5lCVRUX1NISUZURVJfR1JBWU1PREUJCTB4MTAwMAorCisvKiAyNTYgVFQgcGFsZXR0ZSByZWdpc3RlcnMgKi8KKyNkZWZpbmUJVFRfUEFMRVRURV9CQVNFCSgweGZmZmY4NDAwKQorI2RlZmluZQl0dF9wYWxldHRlCSgodm9sYXRpbGUgdV9zaG9ydCAqKVRUX1BBTEVUVEVfQkFTRSkKKworI2RlZmluZQlUVF9QQUxFVFRFX1JFRF9NQVNLCQkweDBmMDAKKyNkZWZpbmUJVFRfUEFMRVRURV9HUkVFTl9NQVNLCTB4MDBmMAorI2RlZmluZQlUVF9QQUxFVFRFX0JMVUVfTUFTSwkweDAwMGYKKworLyoKKyoqIEZhbGNvbjAzMCBWSURFTCBWaWRlbyBDb250cm9sbGVyCisqKiBmb3IgZGVzY3JpcHRpb24gc2VlIEZpbGUgJ2xpbnV4XHRvb2xzXGF0YXJpXGhhcmR3YXJlLnR4dAorICovCisjZGVmaW5lIGYwMzBfY29sICgodV9sb25nICopCQkweGZmZmY5ODAwKQorI2RlZmluZSBmMDMwX3hyZWcgKCh1X3Nob3J0KikJCTB4ZmZmZjgyODIpCisjZGVmaW5lIGYwMzBfeXJlZyAoKHVfc2hvcnQqKQkJMHhmZmZmODJhMikKKyNkZWZpbmUgZjAzMF9jcmVnICgodV9zaG9ydCopCQkweGZmZmY4MmMwKQorI2RlZmluZSBmMDMwX3NyZWcgKCh1X3Nob3J0KikJCTB4ZmZmZjgyNjApCisjZGVmaW5lIGYwMzBfbXJlZyAoKHVfc2hvcnQqKQkJMHhmZmZmODIwYSkKKyNkZWZpbmUgZjAzMF9saW5ld2lkdGggKCh1X3Nob3J0KikgICAgICAweGZmZmY4MjBlKQorI2RlZmluZSBmMDMwX2hzY3JvbGwgKCh1X2NoYXIqKQkJMHhmZmZmODI2NSkKKworI2RlZmluZSBWSURFTF9CQVMgKDB4ZmZmZjgyNjApCitzdHJ1Y3QgVklERUwgeworCXVfc2hvcnQgc3Rfc2hpZnQ7CisJdV9zaG9ydCBwYWQxOworCXVfY2hhciAgeG9mZnNldF9zOworCXVfY2hhciAgeG9mZnNldDsKKwl1X3Nob3J0IGZfc2hpZnQ7CisJdV9jaGFyICBwYWQyWzB4MWFdOworCXVfc2hvcnQgaGh0OworCXVfc2hvcnQgaGJiOworCXVfc2hvcnQgaGJlOworCXVfc2hvcnQgaGRiOworCXVfc2hvcnQgaGRlOworCXVfc2hvcnQgaHNzOworCXVfY2hhciAgcGFkM1sweDE0XTsKKwl1X3Nob3J0IHZmdDsKKwl1X3Nob3J0IHZiYjsKKwl1X3Nob3J0IHZiZTsKKwl1X3Nob3J0IHZkYjsKKwl1X3Nob3J0IHZkZTsKKwl1X3Nob3J0IHZzczsKKwl1X2NoYXIgIHBhZDRbMHgxMl07CisJdV9zaG9ydCBjb250cm9sOworCXVfc2hvcnQgbW9kZTsKK307CisjZGVmaW5lCXZpZGVsCSgoKih2b2xhdGlsZSBzdHJ1Y3QgVklERUwgKilWSURFTF9CQVMpKQorCisvKgorKiogRE1BL1dEMTc3MiBEaXNrIENvbnRyb2xsZXIKKyAqLworCisjZGVmaW5lIEZXRF9CQVMgKDB4ZmZmZjg2MDQpCitzdHJ1Y3QgRE1BX1dECisgeworICB1X3Nob3J0IGZkY19hY2Nlc19zZWNjb3VudDsKKyAgdV9zaG9ydCBkbWFfbW9kZV9zdGF0dXM7CisgIHVfY2hhciBkbWFfdmhpOwkvKiBTb21lIGV4dGVuZGVkIFNULURNQXMgY2FuIGhhbmRsZSAzMiBiaXQgYWRkcmVzc2VzICovCisgIHVfY2hhciBkbWFfaGk7CisgIHVfY2hhciBjaGFyX2R1bW15MjsKKyAgdV9jaGFyIGRtYV9tZDsKKyAgdV9jaGFyIGNoYXJfZHVtbXkzOworICB1X2NoYXIgZG1hX2xvOworICB1X3Nob3J0IGZkY19zcGVlZDsKKyB9OworIyBkZWZpbmUgZG1hX3dkICgoKih2b2xhdGlsZSBzdHJ1Y3QgRE1BX1dEICopRldEX0JBUykpCisvKiBhbGlhcyAqLworI2RlZmluZQlzdF9kbWEgZG1hX3dkCisvKiBUaGUgdHdvIGhpZ2hlc3QgYnl0ZXMgb2YgYW4gZXh0ZW5kZWQgRE1BIGFzIGEgc2hvcnQ7IHRoaXMgaXMgYSBtdXN0CisgKiBmb3IgdGhlIE1lZHVzYS4KKyAqLworI2RlZmluZSBzdF9kbWFfZXh0X2RtYWhpICgqKCh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKTB4ZmZmZjg2MDgpKQorCisvKgorKiogWU0yMTQ5IFNvdW5kIENoaXAKKyoqIGFjY2VzcyBpbiBieXRlcworICovCisKKyNkZWZpbmUgWU1fQkFTICgweGZmZmY4ODAwKQorc3RydWN0IFNPVU5EX1lNCisgeworICB1X2NoYXIgcmRfZGF0YV9yZWdfc2VsOworICB1X2NoYXIgY2hhcl9kdW1teTE7CisgIHVfY2hhciB3ZF9kYXRhOworIH07CisjZGVmaW5lIHNvdW5kX3ltICgoKih2b2xhdGlsZSBzdHJ1Y3QgU09VTkRfWU0gKilZTV9CQVMpKQorCisvKiBUVCBTQ1NJIERNQSAqLworCisjZGVmaW5lCVRUX1NDU0lfRE1BX0JBUwkoMHhmZmZmODcwMCkKK3N0cnVjdCBUVF9ETUEgeworCXVfY2hhcgljaGFyX2R1bW15MDsKKwl1X2NoYXIJZG1hX2FkZHJfaGk7CisJdV9jaGFyCWNoYXJfZHVtbXkxOworCXVfY2hhcglkbWFfYWRkcl9obWQ7CisJdV9jaGFyCWNoYXJfZHVtbXkyOworCXVfY2hhcglkbWFfYWRkcl9sbWQ7CisJdV9jaGFyCWNoYXJfZHVtbXkzOworCXVfY2hhcglkbWFfYWRkcl9sbzsKKwl1X2NoYXIJY2hhcl9kdW1teTQ7CisJdV9jaGFyCWRtYV9jbnRfaGk7CisJdV9jaGFyCWNoYXJfZHVtbXk1OworCXVfY2hhcglkbWFfY250X2htZDsKKwl1X2NoYXIJY2hhcl9kdW1teTY7CisJdV9jaGFyCWRtYV9jbnRfbG1kOworCXVfY2hhcgljaGFyX2R1bW15NzsKKwl1X2NoYXIJZG1hX2NudF9sbzsKKwl1X2xvbmcJZG1hX3Jlc3RkYXRhOworCXVfc2hvcnQJZG1hX2N0cmw7Cit9OworI2RlZmluZQl0dF9zY3NpX2RtYQkoKCoodm9sYXRpbGUgc3RydWN0IFRUX0RNQSAqKVRUX1NDU0lfRE1BX0JBUykpCisKKy8qIFRUIFNDU0kgQ29udHJvbGxlciA1MzgwICovCisKKyNkZWZpbmUJVFRfNTM4MF9CQVMJKDB4ZmZmZjg3ODEpCitzdHJ1Y3QgVFRfNTM4MCB7CisJdV9jaGFyCXNjc2lfZGF0YTsKKwl1X2NoYXIJY2hhcl9kdW1teTE7CisJdV9jaGFyCXNjc2lfaWNyOworCXVfY2hhcgljaGFyX2R1bW15MjsKKwl1X2NoYXIJc2NzaV9tb2RlOworCXVfY2hhcgljaGFyX2R1bW15MzsKKwl1X2NoYXIJc2NzaV90Y3I7CisJdV9jaGFyCWNoYXJfZHVtbXk0OworCXVfY2hhcglzY3NpX2lkc3RhdDsKKwl1X2NoYXIJY2hhcl9kdW1teTU7CisJdV9jaGFyCXNjc2lfZG1hc3RhdDsKKwl1X2NoYXIJY2hhcl9kdW1teTY7CisJdV9jaGFyCXNjc2lfdGFyZ3JjdjsKKwl1X2NoYXIJY2hhcl9kdW1teTc7CisJdV9jaGFyCXNjc2lfaW5pcmN2OworfTsKKyNkZWZpbmUJdHRfc2NzaQkJCSgoKih2b2xhdGlsZSBzdHJ1Y3QgVFRfNTM4MCAqKVRUXzUzODBfQkFTKSkKKyNkZWZpbmUJdHRfc2NzaV9yZWdwCSgodm9sYXRpbGUgY2hhciAqKVRUXzUzODBfQkFTKQorCisKKy8qCisqKiBGYWxjb24gRE1BIFNvdW5kIFN1YnN5c3RlbQorICovCisKKyNkZWZpbmUgTUFUUklYX0JBU0UgKDB4ZmZmZjg5MzApCitzdHJ1Y3QgTUFUUklYCit7CisgIHVfc2hvcnQgc291cmNlOworICB1X3Nob3J0IGRlc3RpbmF0aW9uOworICB1X2NoYXIgZXh0ZXJuYWxfZnJlcXVlbmN5X2RpdmlkZXI7CisgIHVfY2hhciBpbnRlcm5hbF9mcmVxdWVuY3lfZGl2aWRlcjsKK307CisjZGVmaW5lIGZhbGNvbl9tYXRyaXggKCoodm9sYXRpbGUgc3RydWN0IE1BVFJJWCAqKU1BVFJJWF9CQVNFKQorCisjZGVmaW5lIENPREVDX0JBU0UgKDB4ZmZmZjg5MzYpCitzdHJ1Y3QgQ09ERUMKK3sKKyAgdV9jaGFyIHRyYWNrczsKKyAgdV9jaGFyIGlucHV0X3NvdXJjZTsKKyNkZWZpbmUgQ09ERUNfU09VUkNFX0FEQyAgICAgICAgMQorI2RlZmluZSBDT0RFQ19TT1VSQ0VfTUFUUklYICAgICAyCisgIHVfY2hhciBhZGNfc291cmNlOworI2RlZmluZSBBRENfU09VUkNFX1JJR0hUX1BTRyAgICAxCisjZGVmaW5lIEFEQ19TT1VSQ0VfTEVGVF9QU0cgICAgIDIKKyAgdV9jaGFyIGdhaW47CisjZGVmaW5lIENPREVDX0dBSU5fUklHSFQgICAgICAgIDB4MGYKKyNkZWZpbmUgQ09ERUNfR0FJTl9MRUZUICAgICAgICAgMHhmMAorICB1X2NoYXIgYXR0ZW51YXRpb247CisjZGVmaW5lIENPREVDX0FUVEVOVUFUSU9OX1JJR0hUIDB4MGYKKyNkZWZpbmUgQ09ERUNfQVRURU5VQVRJT05fTEVGVCAgMHhmMAorICB1X2NoYXIgdW51c2VkMTsKKyAgdV9jaGFyIHN0YXR1czsKKyNkZWZpbmUgQ09ERUNfT1ZFUkZMT1dfUklHSFQgICAgMQorI2RlZmluZSBDT0RFQ19PVkVSRkxPV19MRUZUICAgICAyCisgIHVfY2hhciB1bnVzZWQyLCB1bnVzZWQzLCB1bnVzZWQ0LCB1bnVzZWQ1OworICB1X2NoYXIgZ3Bpb19kaXJlY3Rpb25zOworI2RlZmluZSBHUElPX0lOICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEdQSU9fT1VUICAgICAgICAgICAgICAgIDEKKyAgdV9jaGFyIHVudXNlZDY7CisgIHVfY2hhciBncGlvX2RhdGE7Cit9OworI2RlZmluZSBmYWxjb25fY29kZWMgKCoodm9sYXRpbGUgc3RydWN0IENPREVDICopQ09ERUNfQkFTRSkKKworLyoKKyoqIEZhbGNvbiBCbGl0dGVyCisqLworCisjZGVmaW5lIEJMVF9CQVMgKDB4ZmZmZjhhMDApCisKK3N0cnVjdCBCTElUVEVSCisgeworICB1X3Nob3J0IGhhbGZ0b25lWzE2XTsKKyAgdV9zaG9ydCBzcmNfeF9pbmM7CisgIHVfc2hvcnQgc3JjX3lfaW5jOworICB1X2xvbmcgc3JjX2FkZHJlc3M7CisgIHVfc2hvcnQgZW5kbWFzazE7CisgIHVfc2hvcnQgZW5kbWFzazI7CisgIHVfc2hvcnQgZW5kbWFzazM7CisgIHVfc2hvcnQgZHN0X3hfaW5jOworICB1X3Nob3J0IGRzdF95X2luYzsKKyAgdV9sb25nIGRzdF9hZGRyZXNzOworICB1X3Nob3J0IHdkX3Blcl9saW5lOworICB1X3Nob3J0IGxuX3Blcl9iYjsKKyAgdV9zaG9ydCBobGZfb3BfcmVnOworICB1X3Nob3J0IGxvZ19vcF9yZWc7CisgIHVfc2hvcnQgbGluX25tX3JlZzsKKyAgdV9zaG9ydCBza2V3X3JlZzsKKyB9OworIyBkZWZpbmUgYmxpdHRlciAoKCoodm9sYXRpbGUgc3RydWN0IEJMSVRURVIgKilCTFRfQkFTKSkKKworCisvKgorKiogU0NDIFo4NTMwCisgKi8KKworI2RlZmluZSBTQ0NfQkFTICgweGZmZmY4YzgxKQorc3RydWN0IFNDQworIHsKKyAgdV9jaGFyIGNoYV9hX2N0cmw7CisgIHVfY2hhciBjaGFyX2R1bW15MTsKKyAgdV9jaGFyIGNoYV9hX2RhdGE7CisgIHVfY2hhciBjaGFyX2R1bW15MjsKKyAgdV9jaGFyIGNoYV9iX2N0cmw7CisgIHVfY2hhciBjaGFyX2R1bW15MzsKKyAgdV9jaGFyIGNoYV9iX2RhdGE7CisgfTsKKyMgZGVmaW5lIHNjYyAoKCoodm9sYXRpbGUgc3RydWN0IFNDQyopU0NDX0JBUykpCisKKy8qIFRoZSBFU0NDIChaODUyMzApIGluIGFuIEF0YXJpIFNULiBUaGUgY2hhbm5lbHMgYXJlIHJldmVyc2VkISAqLworIyBkZWZpbmUgc3RfZXNjYyAoKCoodm9sYXRpbGUgc3RydWN0IFNDQyopMHhmZmZmZmEzMSkpCisjIGRlZmluZSBzdF9lc2NjX2RzciAoKCoodm9sYXRpbGUgY2hhciAqKTB4ZmZmZmZhMzkpKQorCisvKiBUVCBTQ0MgRE1BIENvbnRyb2xsZXIgKHNhbWUgY2hpcCBhcyBTQ1NJIERNQSkgKi8KKworI2RlZmluZQlUVF9TQ0NfRE1BX0JBUwkoMHhmZmZmOGMwMCkKKyNkZWZpbmUJdHRfc2NjX2RtYQkoKCoodm9sYXRpbGUgc3RydWN0IFRUX0RNQSAqKVRUX1NDQ19ETUFfQkFTKSkKKworLyoKKyoqIFZJREVMIFBhbGV0dGUgUmVnaXN0ZXIKKyAqLworCisjZGVmaW5lIEZQTF9CQVMgKDB4ZmZmZjk4MDApCitzdHJ1Y3QgVklERUxfUEFMRVRURQorIHsKKyAgdV9sb25nIHJlZ1syNTZdOworIH07CisjIGRlZmluZSB2aWRlbF9wYWxldHRlICgoKih2b2xhdGlsZSBzdHJ1Y3QgVklERUxfUEFMRVRURSopRlBMX0JBUykpCisKKworLyoKKyoqIEZhbGNvbiBEU1AgSG9zdCBJbnRlcmZhY2UKKyAqLworCisjZGVmaW5lIERTUDU2S19IT1NUX0lOVEVSRkFDRV9CQVNFICgweGZmZmZhMjAwKQorc3RydWN0IERTUDU2S19IT1NUX0lOVEVSRkFDRSB7CisgIHVfY2hhciBpY3I7CisjZGVmaW5lIERTUDU2S19JQ1JfUlJFUQkweDAxCisjZGVmaW5lIERTUDU2S19JQ1JfVFJFUQkweDAyCisjZGVmaW5lIERTUDU2S19JQ1JfSEYwCTB4MDgKKyNkZWZpbmUgRFNQNTZLX0lDUl9IRjEJMHgxMAorI2RlZmluZSBEU1A1NktfSUNSX0hNMAkweDIwCisjZGVmaW5lIERTUDU2S19JQ1JfSE0xCTB4NDAKKyNkZWZpbmUgRFNQNTZLX0lDUl9JTklUCTB4ODAKKworICB1X2NoYXIgY3ZyOworI2RlZmluZSBEU1A1NktfQ1ZSX0hWX01BU0sgMHgxZgorI2RlZmluZSBEU1A1NktfQ1ZSX0hDCTB4ODAKKworICB1X2NoYXIgaXNyOworI2RlZmluZSBEU1A1NktfSVNSX1JYREYJMHgwMQorI2RlZmluZSBEU1A1NktfSVNSX1RYREUJMHgwMgorI2RlZmluZSBEU1A1NktfSVNSX1RSRFkJMHgwNAorI2RlZmluZSBEU1A1NktfSVNSX0hGMgkweDA4CisjZGVmaW5lIERTUDU2S19JU1JfSEYzCTB4MTAKKyNkZWZpbmUgRFNQNTZLX0lTUl9ETUEJMHg0MAorI2RlZmluZSBEU1A1NktfSVNSX0hSRVEJMHg4MAorCisgIHVfY2hhciBpdnI7CisKKyAgdW5pb24geworICAgIHVfY2hhciBiWzRdOworICAgIHVfc2hvcnQgd1syXTsKKyAgICB1X2xvbmcgbDsKKyAgfSBkYXRhOworfTsKKyNkZWZpbmUgZHNwNTZrX2hvc3RfaW50ZXJmYWNlICgoKih2b2xhdGlsZSBzdHJ1Y3QgRFNQNTZLX0hPU1RfSU5URVJGQUNFICopRFNQNTZLX0hPU1RfSU5URVJGQUNFX0JBU0UpKQorCisvKgorKiogTUZQIDY4OTAxCisgKi8KKworI2RlZmluZSBNRlBfQkFTICgweGZmZmZmYTAxKQorc3RydWN0IE1GUAorIHsKKyAgdV9jaGFyIHBhcl9kdF9yZWc7CisgIHVfY2hhciBjaGFyX2R1bW15MTsKKyAgdV9jaGFyIGFjdGl2ZV9lZGdlOworICB1X2NoYXIgY2hhcl9kdW1teTI7CisgIHVfY2hhciBkYXRhX2RpcjsKKyAgdV9jaGFyIGNoYXJfZHVtbXkzOworICB1X2NoYXIgaW50X2VuX2E7CisgIHVfY2hhciBjaGFyX2R1bW15NDsKKyAgdV9jaGFyIGludF9lbl9iOworICB1X2NoYXIgY2hhcl9kdW1teTU7CisgIHVfY2hhciBpbnRfcG5fYTsKKyAgdV9jaGFyIGNoYXJfZHVtbXk2OworICB1X2NoYXIgaW50X3BuX2I7CisgIHVfY2hhciBjaGFyX2R1bW15NzsKKyAgdV9jaGFyIGludF9zdl9hOworICB1X2NoYXIgY2hhcl9kdW1teTg7CisgIHVfY2hhciBpbnRfc3ZfYjsKKyAgdV9jaGFyIGNoYXJfZHVtbXk5OworICB1X2NoYXIgaW50X21rX2E7CisgIHVfY2hhciBjaGFyX2R1bW15MTA7CisgIHVfY2hhciBpbnRfbWtfYjsKKyAgdV9jaGFyIGNoYXJfZHVtbXkxMTsKKyAgdV9jaGFyIHZlY19hZHI7CisgIHVfY2hhciBjaGFyX2R1bW15MTI7CisgIHVfY2hhciB0aW1fY3RfYTsKKyAgdV9jaGFyIGNoYXJfZHVtbXkxMzsKKyAgdV9jaGFyIHRpbV9jdF9iOworICB1X2NoYXIgY2hhcl9kdW1teTE0OworICB1X2NoYXIgdGltX2N0X2NkOworICB1X2NoYXIgY2hhcl9kdW1teTE1OworICB1X2NoYXIgdGltX2R0X2E7CisgIHVfY2hhciBjaGFyX2R1bW15MTY7CisgIHVfY2hhciB0aW1fZHRfYjsKKyAgdV9jaGFyIGNoYXJfZHVtbXkxNzsKKyAgdV9jaGFyIHRpbV9kdF9jOworICB1X2NoYXIgY2hhcl9kdW1teTE4OworICB1X2NoYXIgdGltX2R0X2Q7CisgIHVfY2hhciBjaGFyX2R1bW15MTk7CisgIHVfY2hhciBzeW5jX2NoYXI7CisgIHVfY2hhciBjaGFyX2R1bW15MjA7CisgIHVfY2hhciB1c2FydF9jdHI7CisgIHVfY2hhciBjaGFyX2R1bW15MjE7CisgIHVfY2hhciByY3Zfc3RhdDsKKyAgdV9jaGFyIGNoYXJfZHVtbXkyMjsKKyAgdV9jaGFyIHRybl9zdGF0OworICB1X2NoYXIgY2hhcl9kdW1teTIzOworICB1X2NoYXIgdXNhcnRfZHRhOworIH07CisjIGRlZmluZSBtZnAgKCgqKHZvbGF0aWxlIHN0cnVjdCBNRlAqKU1GUF9CQVMpKQorCisvKiBUVCdzIHNlY29uZCBNRlAgKi8KKworI2RlZmluZQlUVF9NRlBfQkFTCSgweGZmZmZmYTgxKQorIyBkZWZpbmUgdHRfbWZwICgoKih2b2xhdGlsZSBzdHJ1Y3QgTUZQKilUVF9NRlBfQkFTKSkKKworCisvKiBUVCBTeXN0ZW0gQ29udHJvbCBVbml0ICovCisKKyNkZWZpbmUJVFRfU0NVX0JBUwkoMHhmZmZmOGUwMSkKK3N0cnVjdCBUVF9TQ1UgeworCXVfY2hhcglzeXNfbWFzazsKKwl1X2NoYXIJY2hhcl9kdW1teTE7CisJdV9jaGFyCXN5c19zdGF0OworCXVfY2hhcgljaGFyX2R1bW15MjsKKwl1X2NoYXIJc29mdGludDsKKwl1X2NoYXIJY2hhcl9kdW1teTM7CisJdV9jaGFyCXZtZWludDsKKwl1X2NoYXIJY2hhcl9kdW1teTQ7CisJdV9jaGFyCWdwX3JlZzE7CisJdV9jaGFyCWNoYXJfZHVtbXk1OworCXVfY2hhcglncF9yZWcyOworCXVfY2hhcgljaGFyX2R1bW15NjsKKwl1X2NoYXIJdm1lX21hc2s7CisJdV9jaGFyCWNoYXJfZHVtbXk3OworCXVfY2hhcgl2bWVfc3RhdDsKK307CisjZGVmaW5lCXR0X3NjdQkoKCoodm9sYXRpbGUgc3RydWN0IFRUX1NDVSAqKVRUX1NDVV9CQVMpKQorCisvKiBUVCByZWFsIHRpbWUgY2xvY2sgKi8KKworI2RlZmluZQlUVF9SVENfQkFTCSgweGZmZmY4OTYxKQorc3RydWN0IFRUX1JUQyB7CisJdV9jaGFyCXJlZ3NlbDsKKwl1X2NoYXIJZHVtbXk7CisJdV9jaGFyCWRhdGE7Cit9OworI2RlZmluZQl0dF9ydGMJKCgqKHZvbGF0aWxlIHN0cnVjdCBUVF9SVEMgKilUVF9SVENfQkFTKSkKKworCisvKgorKiogQUNJQSA2ODUwCisgKi8KKy8qIGNvbnN0YW50cyBmb3IgdGhlIEFDSUEgcmVnaXN0ZXJzICovCisKKy8qIGJhdWRyYXRlIHNlbGVjdGlvbiBhbmQgcmVzZXQgKEJhdWRyYXRlID0gY2xvY2svZmFjdG9yKSAqLworI2RlZmluZSBBQ0lBX0RJVjEgIDAKKyNkZWZpbmUgQUNJQV9ESVYxNiAxCisjZGVmaW5lIEFDSUFfRElWNjQgMgorI2RlZmluZSBBQ0lBX1JFU0VUIDMKKworLyogY2hhcmFjdGVyIGZvcm1hdCAqLworI2RlZmluZSBBQ0lBX0Q3RTJTICgwPDwyKQkvKiA3IGRhdGEsIGV2ZW4gcGFyaXR5LCAyIHN0b3AgKi8KKyNkZWZpbmUgQUNJQV9EN08yUyAoMTw8MikJLyogNyBkYXRhLCBvZGQgcGFyaXR5LCAyIHN0b3AgKi8KKyNkZWZpbmUgQUNJQV9EN0UxUyAoMjw8MikJLyogNyBkYXRhLCBldmVuIHBhcml0eSwgMSBzdG9wICovCisjZGVmaW5lIEFDSUFfRDdPMVMgKDM8PDIpCS8qIDcgZGF0YSwgb2RkIHBhcml0eSwgMSBzdG9wICovCisjZGVmaW5lIEFDSUFfRDhOMlMgKDQ8PDIpCS8qIDggZGF0YSwgbm8gcGFyaXR5LCAyIHN0b3AgKi8KKyNkZWZpbmUgQUNJQV9EOE4xUyAoNTw8MikJLyogOCBkYXRhLCBubyBwYXJpdHksIDEgc3RvcCAqLworI2RlZmluZSBBQ0lBX0Q4RTFTICg2PDwyKQkvKiA4IGRhdGEsIGV2ZW4gcGFyaXR5LCAxIHN0b3AgKi8KKyNkZWZpbmUgQUNJQV9EOE8xUyAoNzw8MikJLyogOCBkYXRhLCBvZGQgcGFyaXR5LCAxIHN0b3AgKi8KKworLyogdHJhbnNtaXQgY29udHJvbCAqLworI2RlZmluZSBBQ0lBX1JMVElEICgwPDw1KQkvKiBSVFMgbG93LCBUeElOVCBkaXNhYmxlZCAqLworI2RlZmluZSBBQ0lBX1JMVElFICgxPDw1KQkvKiBSVFMgbG93LCBUeElOVCBlbmFibGVkICovCisjZGVmaW5lIEFDSUFfUkhUSUQgKDI8PDUpCS8qIFJUUyBoaWdoLCBUeElOVCBkaXNhYmxlZCAqLworI2RlZmluZSBBQ0lBX1JMVElEU0IgKDM8PDUpCS8qIFJUUyBsb3csIFR4SU5UIGRpc2FibGVkLCBzZW5kIGJyZWFrICovCisKKy8qIHJlY2VpdmUgY29udHJvbCAqLworI2RlZmluZSBBQ0lBX1JJRCAoMDw8NykJCS8qIFJ4SU5UIGRpc2FibGVkICovCisjZGVmaW5lIEFDSUFfUklFICgxPDw3KQkJLyogUnhJTlQgZW5hYmxlZCAqLworCisvKiBzdGF0dXMgZmllbGRzIG9mIHRoZSBBQ0lBICovCisjZGVmaW5lIEFDSUFfUkRSRiAxCQkvKiBSZWNlaXZlIERhdGEgUmVnaXN0ZXIgRnVsbCAqLworI2RlZmluZSBBQ0lBX1REUkUgKDE8PDEpCS8qIFRyYW5zbWl0IERhdGEgUmVnaXN0ZXIgRW1wdHkgKi8KKyNkZWZpbmUgQUNJQV9EQ0QgICgxPDwyKQkvKiBEYXRhIENhcnJpZXIgRGV0ZWN0ICovCisjZGVmaW5lIEFDSUFfQ1RTICAoMTw8MykJLyogQ2xlYXIgVG8gU2VuZCAqLworI2RlZmluZSBBQ0lBX0ZFICAgKDE8PDQpCS8qIEZyYW1pbmcgRXJyb3IgKi8KKyNkZWZpbmUgQUNJQV9PVlJOICgxPDw1KQkvKiBSZWNlaXZlciBPdmVycnVuICovCisjZGVmaW5lIEFDSUFfUEUgICAoMTw8NikJLyogUGFyaXR5IEVycm9yICovCisjZGVmaW5lIEFDSUFfSVJRICAoMTw8NykJLyogSW50ZXJydXB0IFJlcXVlc3QgKi8KKworI2RlZmluZSBBQ0lBX0JBUyAoMHhmZmZmZmMwMCkKK3N0cnVjdCBBQ0lBCisgeworICB1X2NoYXIga2V5X2N0cmw7CisgIHVfY2hhciBjaGFyX2R1bW15MTsKKyAgdV9jaGFyIGtleV9kYXRhOworICB1X2NoYXIgY2hhcl9kdW1teTI7CisgIHVfY2hhciBtaWRfY3RybDsKKyAgdV9jaGFyIGNoYXJfZHVtbXkzOworICB1X2NoYXIgbWlkX2RhdGE7CisgfTsKKyMgZGVmaW5lIGFjaWEgKCgqKHZvbGF0aWxlIHN0cnVjdCBBQ0lBKilBQ0lBX0JBUykpCisKKyNkZWZpbmUJVFRfRE1BU05EX0JBUyAoMHhmZmZmODkwMCkKK3N0cnVjdCBUVF9ETUFTTkQgeworCXVfY2hhcglpbnRfY3RybDsJLyogRmFsY29uOiBJbnRlcnJ1cHQgY29udHJvbCAqLworCXVfY2hhcgljdHJsOworCXVfY2hhcglwYWQyOworCXVfY2hhcgliYXNfaGk7CisJdV9jaGFyCXBhZDM7CisJdV9jaGFyCWJhc19taWQ7CisJdV9jaGFyCXBhZDQ7CisJdV9jaGFyCWJhc19sb3c7CisJdV9jaGFyCXBhZDU7CisJdV9jaGFyCWFkZHJfaGk7CisJdV9jaGFyCXBhZDY7CisJdV9jaGFyCWFkZHJfbWlkOworCXVfY2hhcglwYWQ3OworCXVfY2hhcglhZGRyX2xvdzsKKwl1X2NoYXIJcGFkODsKKwl1X2NoYXIJZW5kX2hpOworCXVfY2hhcglwYWQ5OworCXVfY2hhcgllbmRfbWlkOworCXVfY2hhcglwYWQxMDsKKwl1X2NoYXIJZW5kX2xvdzsKKwl1X2NoYXIJcGFkMTFbMTJdOworCXVfY2hhcgl0cmFja19zZWxlY3Q7CS8qIEZhbGNvbiAqLworCXVfY2hhcgltb2RlOworCXVfY2hhcglwYWQxMlsxNF07CisJLyogRmFsY29uIG9ubHk6ICovCisJdV9zaG9ydAljYmFyX3NyYzsKKwl1X3Nob3J0IGNiYXJfZHN0OworCXVfY2hhcglleHRfZGl2OworCXVfY2hhcglpbnRfZGl2OworCXVfY2hhcglyZWNfdHJhY2tfc2VsZWN0OworCXVfY2hhcglkYWNfc3JjOworCXVfY2hhcglhZGNfc3JjOworCXVfY2hhcglpbnB1dF9nYWluOworCXVfc2hvcnQJb3V0cHV0X2F0dGVuOworfTsKKyMgZGVmaW5lIHR0X2RtYXNuZCAoKCoodm9sYXRpbGUgc3RydWN0IFRUX0RNQVNORCAqKVRUX0RNQVNORF9CQVMpKQorCisjZGVmaW5lIERNQVNORF9NRlBfSU5UX1JFUExBWSAgICAgMHgwMQorI2RlZmluZSBETUFTTkRfTUZQX0lOVF9SRUNPUkQgICAgIDB4MDIKKyNkZWZpbmUgRE1BU05EX1RJTUVSQV9JTlRfUkVQTEFZICAweDA0CisjZGVmaW5lIERNQVNORF9USU1FUkFfSU5UX1JFQ09SRCAgMHgwOAorCisjZGVmaW5lCURNQVNORF9DVFJMX09GRgkJICAweDAwCisjZGVmaW5lCURNQVNORF9DVFJMX09OCQkgIDB4MDEKKyNkZWZpbmUJRE1BU05EX0NUUkxfUkVQRUFUCSAgMHgwMgorI2RlZmluZSBETUFTTkRfQ1RSTF9SRUNPUkRfT04gICAgIDB4MTAKKyNkZWZpbmUgRE1BU05EX0NUUkxfUkVDT1JEX09GRiAgICAweDAwCisjZGVmaW5lIERNQVNORF9DVFJMX1JFQ09SRF9SRVBFQVQgMHgyMAorI2RlZmluZSBETUFTTkRfQ1RSTF9TRUxFQ1RfUkVQTEFZIDB4MDAKKyNkZWZpbmUgRE1BU05EX0NUUkxfU0VMRUNUX1JFQ09SRCAweDgwCisjZGVmaW5lCURNQVNORF9NT0RFX01PTk8JICAweDgwCisjZGVmaW5lCURNQVNORF9NT0RFX1NURVJFTwkgIDB4MDAKKyNkZWZpbmUgRE1BU05EX01PREVfOEJJVAkgIDB4MDAKKyNkZWZpbmUgRE1BU05EX01PREVfMTZCSVQJICAweDQwCS8qIEZhbGNvbiBvbmx5ICovCisjZGVmaW5lCURNQVNORF9NT0RFXzZLSFoJICAweDAwCS8qIEZhbGNvbjogbXV0ZSAqLworI2RlZmluZQlETUFTTkRfTU9ERV8xMktIWgkgIDB4MDEKKyNkZWZpbmUJRE1BU05EX01PREVfMjVLSFoJICAweDAyCisjZGVmaW5lCURNQVNORF9NT0RFXzUwS0haCSAgMHgwMworCisKKyNkZWZpbmUgRE1BU05EU2V0QmFzZShidWZzdGFydCkJCQkJCQlcCisgICAgZG8gewkJCQkJCQkJXAorCXR0X2RtYXNuZC5iYXNfaGkgID0gKHVuc2lnbmVkIGNoYXIpKCgoYnVmc3RhcnQpICYgMHhmZjAwMDApID4+IDE2KTsgXAorCXR0X2RtYXNuZC5iYXNfbWlkID0gKHVuc2lnbmVkIGNoYXIpKCgoYnVmc3RhcnQpICYgMHgwMGZmMDApID4+IDgpOyBcCisJdHRfZG1hc25kLmJhc19sb3cgPSAodW5zaWduZWQgY2hhcikgKChidWZzdGFydCkgJiAweDAwMDBmZik7IFwKKyAgICB9IHdoaWxlKCAwICkKKworI2RlZmluZSBETUFTTkRHZXRBZHIoKSAoKHR0X2RtYXNuZC5hZGRyX2hpIDw8IDE2KSArCVwKKwkJCSh0dF9kbWFzbmQuYWRkcl9taWQgPDwgOCkgKwlcCisJCQkodHRfZG1hc25kLmFkZHJfbG93KSkKKworI2RlZmluZSBETUFTTkRTZXRFbmQoYnVmZW5kKQkJCQlcCisgICAgZG8gewkJCQkJCVwKKwl0dF9kbWFzbmQuZW5kX2hpICA9ICh1bnNpZ25lZCBjaGFyKSgoKGJ1ZmVuZCkgJiAweGZmMDAwMCkgPj4gMTYpOyBcCisJdHRfZG1hc25kLmVuZF9taWQgPSAodW5zaWduZWQgY2hhcikoKChidWZlbmQpICYgMHgwMGZmMDApID4+IDgpOyBcCisJdHRfZG1hc25kLmVuZF9sb3cgPSAodW5zaWduZWQgY2hhcikgKChidWZlbmQpICYgMHgwMDAwZmYpOyBcCisgICAgfSB3aGlsZSggMCApCisKKworI2RlZmluZQlUVF9NSUNST1dJUkVfQkFTCSgweGZmZmY4OTIyKQorc3RydWN0IFRUX01JQ1JPV0lSRSB7CisJdV9zaG9ydAlkYXRhOworCXVfc2hvcnQJbWFzazsKK307CisjIGRlZmluZSB0dF9taWNyb3dpcmUgKCgqKHZvbGF0aWxlIHN0cnVjdCBUVF9NSUNST1dJUkUgKilUVF9NSUNST1dJUkVfQkFTKSkKKworI2RlZmluZQlNV19MTTE5OTJfQUREUgkJMHgwNDAwCisKKyNkZWZpbmUJTVdfTE0xOTkyX1ZPTFVNRShkQikJXAorICAgICgweDBjMCB8ICgoZEIpIDwgLTgwID8gMCA6IChkQikgPiAwID8gNDAgOiAoKChkQikgKyA4MCkgLyAyKSkpCisjZGVmaW5lCU1XX0xNMTk5Ml9CQUxMRUZUKGRCKQlcCisgICAgKDB4MTQwIHwgKChkQikgPCAtNDAgPyAwIDogKGRCKSA+IDAgPyAyMCA6ICgoKGRCKSArIDQwKSAvIDIpKSkKKyNkZWZpbmUJTVdfTE0xOTkyX0JBTFJJR0hUKGRCKQlcCisgICAgKDB4MTAwIHwgKChkQikgPCAtNDAgPyAwIDogKGRCKSA+IDAgPyAyMCA6ICgoKGRCKSArIDQwKSAvIDIpKSkKKyNkZWZpbmUJTVdfTE0xOTkyX1RSRUJMRShkQikJXAorICAgICgweDA4MCB8ICgoZEIpIDwgLTEyID8gMCA6IChkQikgPiAxMiA/IDEyIDogKCgoZEIpIC8gMikgKyA2KSkpCisjZGVmaW5lCU1XX0xNMTk5Ml9CQVNTKGRCKQlcCisgICAgKDB4MDQwIHwgKChkQikgPCAtMTIgPyAwIDogKGRCKSA+IDEyID8gMTIgOiAoKChkQikgLyAyKSArIDYpKSkKKworI2RlZmluZQlNV19MTTE5OTJfUFNHX0xPVwkweDAwMAorI2RlZmluZQlNV19MTTE5OTJfUFNHX0hJR0gJMHgwMDEKKyNkZWZpbmUJTVdfTE0xOTkyX1BTR19PRkYJMHgwMDIKKworI2RlZmluZSBNU1RFX1JUQ19CQVMJKDB4ZmZmZmZjMjEpCisKK3N0cnVjdCBNU1RFX1JUQyB7CisJdV9jaGFyIHNlY19vbmVzOworCXVfY2hhciBkdW1teTE7CisJdV9jaGFyIHNlY190ZW5zOworCXVfY2hhciBkdW1teTI7CisJdV9jaGFyIG1pbl9vbmVzOworCXVfY2hhciBkdW1teTM7CisJdV9jaGFyIG1pbl90ZW5zOworCXVfY2hhciBkdW1teTQ7CisJdV9jaGFyIGhyX29uZXM7CisJdV9jaGFyIGR1bW15NTsKKwl1X2NoYXIgaHJfdGVuczsKKwl1X2NoYXIgZHVtbXk2OworCXVfY2hhciB3ZWVrZGF5OworCXVfY2hhciBkdW1teTc7CisJdV9jaGFyIGRheV9vbmVzOworCXVfY2hhciBkdW1teTg7CisJdV9jaGFyIGRheV90ZW5zOworCXVfY2hhciBkdW1teTk7CisJdV9jaGFyIG1vbl9vbmVzOworCXVfY2hhciBkdW1teTEwOworCXVfY2hhciBtb25fdGVuczsKKwl1X2NoYXIgZHVtbXkxMTsKKwl1X2NoYXIgeWVhcl9vbmVzOworCXVfY2hhciBkdW1teTEyOworCXVfY2hhciB5ZWFyX3RlbnM7CisJdV9jaGFyIGR1bW15MTM7CisJdV9jaGFyIG1vZGU7CisJdV9jaGFyIGR1bW15MTQ7CisJdV9jaGFyIHRlc3Q7CisJdV9jaGFyIGR1bW15MTU7CisJdV9jaGFyIHJlc2V0OworfTsKKworI2RlZmluZSBtc3RlX3J0YyAoKCoodm9sYXRpbGUgc3RydWN0IE1TVEVfUlRDICopTVNURV9SVENfQkFTKSkKKworI2VuZGlmIC8qIGxpbnV4L2F0YXJpaHcuaCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL2F0YXJpaW50cy5oIGIvaW5jbHVkZS9hc20tbTY4ay9hdGFyaWludHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Mjk1MmM4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9hdGFyaWludHMuaApAQCAtMCwwICsxLDIxNSBAQAorLyoKKyoqIGF0YXJpaW50cy5oIC0tIEF0YXJpIExpbnV4IGludGVycnVwdCBoYW5kbGluZyBzdHJ1Y3RzIGFuZCBwcm90b3R5cGVzCisqKgorKiogQ29weXJpZ2h0IDE5OTQgYnkgQmqUcm4gQnJhdWVsCisqKgorKiogNS8yLzk0IFJvbWFuIEhvZGVrOgorKiogICBUVCBpbnRlcnJ1cHQgZGVmaW5pdGlvbnMgYWRkZWQuCisqKgorKiogMTIvMDIvOTY6IChSb21hbikKKyoqICAgQWRhcHRlZCB0byBuZXcgaW50IGhhbmRsaW5nIHNjaGVtZSAoc2VlIGF0YWludHMuYyk7IHJldmlzZWQgbnVtYmVyaW5nCisqKgorKiogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyoqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisqKiBmb3IgbW9yZSBkZXRhaWxzLgorKioKKyovCisKKyNpZm5kZWYgX0xJTlVYX0FUQVJJSU5UU19IXworI2RlZmluZSBfTElOVVhfQVRBUklJTlRTX0hfCisKKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL2F0YXJpaHcuaD4KKworLyoKKyoqIEF0YXJpIEludGVycnVwdCBzb3VyY2VzLgorKioKKyovCisKKyNkZWZpbmUgU1RNRlBfU09VUkNFX0JBU0UgIDgKKyNkZWZpbmUgVFRNRlBfU09VUkNFX0JBU0UgIDI0CisjZGVmaW5lIFNDQ19TT1VSQ0VfQkFTRSAgICA0MAorI2RlZmluZSBWTUVfU09VUkNFX0JBU0UgICAgNTYKKyNkZWZpbmUgVk1FX01BWF9TT1VSQ0VTICAgIDE2CisKKyNkZWZpbmUgTlVNX0FUQVJJX1NPVVJDRVMgICAoVk1FX1NPVVJDRV9CQVNFK1ZNRV9NQVhfU09VUkNFUy1TVE1GUF9TT1VSQ0VfQkFTRSkKKworLyogY29udmVydCB2ZWN0b3IgbnVtYmVyIHRvIGludCBzb3VyY2UgbnVtYmVyICovCisjZGVmaW5lIElSUV9WRUNUT1JfVE9fU09VUkNFKHYpCSgodikgLSAoKHYpIDwgMHgyMCA/IDB4MTggOiAoMHg0MC04KSkpCisKKy8qIGNvbnZlcnQgaXJxX2hhbmRsZXIgaW5kZXggdG8gdmVjdG9yIG51bWJlciAqLworI2RlZmluZSBJUlFfU09VUkNFX1RPX1ZFQ1RPUihpKQkoKGkpICsgKChpKSA8IDggPyAweDE4IDogKDB4NDAtOCkpKQorCisvKiBpbnRlcnJ1cHQgc2VydmljZSB0eXBlcyAqLworI2RlZmluZSBJUlFfVFlQRV9TTE9XICAgICAwCisjZGVmaW5lIElSUV9UWVBFX0ZBU1QgICAgIDEKKyNkZWZpbmUgSVJRX1RZUEVfUFJJTyAgICAgMgorCisjZGVmaW5lCUlSUV9TUFVSSU9VUyAgICAgICgwKQorCisvKiBhdXRvLXZlY3RvciBpbnRlcnJ1cHRzICovCisjZGVmaW5lIElSUV9BVVRPXzEgICAgICAgICgxKQorI2RlZmluZSBJUlFfQVVUT18yICAgICAgICAoMikKKyNkZWZpbmUgSVJRX0FVVE9fMyAgICAgICAgKDMpCisjZGVmaW5lIElSUV9BVVRPXzQgICAgICAgICg0KQorI2RlZmluZSBJUlFfQVVUT181ICAgICAgICAoNSkKKyNkZWZpbmUgSVJRX0FVVE9fNiAgICAgICAgKDYpCisjZGVmaW5lIElSUV9BVVRPXzcgICAgICAgICg3KQorCisvKiBTVC1NRlAgaW50ZXJydXB0cyAqLworI2RlZmluZSBJUlFfTUZQX0JVU1kgICAgICAoOCkKKyNkZWZpbmUgSVJRX01GUF9EQ0QgICAgICAgKDkpCisjZGVmaW5lIElSUV9NRlBfQ1RTCSAgKDEwKQorI2RlZmluZSBJUlFfTUZQX0dQVQkgICgxMSkKKyNkZWZpbmUgSVJRX01GUF9USU1EICAgICAgKDEyKQorI2RlZmluZSBJUlFfTUZQX1RJTUMJICAoMTMpCisjZGVmaW5lIElSUV9NRlBfQUNJQQkgICgxNCkKKyNkZWZpbmUgSVJRX01GUF9GREMgICAgICAgKDE1KQorI2RlZmluZSBJUlFfTUZQX0FDU0kgICAgICBJUlFfTUZQX0ZEQworI2RlZmluZSBJUlFfTUZQX0ZTQ1NJICAgICBJUlFfTUZQX0ZEQworI2RlZmluZSBJUlFfTUZQX0lERSAgICAgICBJUlFfTUZQX0ZEQworI2RlZmluZSBJUlFfTUZQX1RJTUIgICAgICAoMTYpCisjZGVmaW5lIElSUV9NRlBfU0VSRVJSICAgICgxNykKKyNkZWZpbmUgSVJRX01GUF9TRVJFTVBUICAgKDE4KQorI2RlZmluZSBJUlFfTUZQX1JFQ0VSUiAgICAoMTkpCisjZGVmaW5lIElSUV9NRlBfUkVDRlVMTCAgICgyMCkKKyNkZWZpbmUgSVJRX01GUF9USU1BICAgICAgKDIxKQorI2RlZmluZSBJUlFfTUZQX1JJICAgICAgICAoMjIpCisjZGVmaW5lIElSUV9NRlBfTU1EICAgICAgICgyMykKKworLyogVFQtTUZQIGludGVycnVwdHMgKi8KKyNkZWZpbmUgSVJRX1RUX01GUF9JTzAgICAgICAgKDI0KQorI2RlZmluZSBJUlFfVFRfTUZQX0lPMSAgICAgICAoMjUpCisjZGVmaW5lIElSUV9UVF9NRlBfU0NDCSAgICAgKDI2KQorI2RlZmluZSBJUlFfVFRfTUZQX1JJCSAgICAgKDI3KQorI2RlZmluZSBJUlFfVFRfTUZQX1RJTUQgICAgICAoMjgpCisjZGVmaW5lIElSUV9UVF9NRlBfVElNQwkgICAgICgyOSkKKyNkZWZpbmUgSVJRX1RUX01GUF9EUlZSRFkgICAgKDMwKQorI2RlZmluZSBJUlFfVFRfTUZQX1NDU0lETUEgICAoMzEpCisjZGVmaW5lIElSUV9UVF9NRlBfVElNQiAgICAgICgzMikKKyNkZWZpbmUgSVJRX1RUX01GUF9TRVJFUlIgICAgKDMzKQorI2RlZmluZSBJUlFfVFRfTUZQX1NFUkVNUFQgICAoMzQpCisjZGVmaW5lIElSUV9UVF9NRlBfUkVDRVJSICAgICgzNSkKKyNkZWZpbmUgSVJRX1RUX01GUF9SRUNGVUxMICAgKDM2KQorI2RlZmluZSBJUlFfVFRfTUZQX1RJTUEgICAgICAoMzcpCisjZGVmaW5lIElSUV9UVF9NRlBfUlRDICAgICAgICgzOCkKKyNkZWZpbmUgSVJRX1RUX01GUF9TQ1NJICAgICAgKDM5KQorCisvKiBTQ0MgaW50ZXJydXB0cyAqLworI2RlZmluZSBJUlFfU0NDQl9UWAkgICAgICg0MCkKKyNkZWZpbmUgSVJRX1NDQ0JfU1RBVAkgICAgICg0MikKKyNkZWZpbmUgSVJRX1NDQ0JfUlgJICAgICAoNDQpCisjZGVmaW5lIElSUV9TQ0NCX1NQQ09ORAkgICAgICg0NikKKyNkZWZpbmUgSVJRX1NDQ0FfVFgJICAgICAoNDgpCisjZGVmaW5lIElSUV9TQ0NBX1NUQVQJICAgICAoNTApCisjZGVmaW5lIElSUV9TQ0NBX1JYCSAgICAgKDUyKQorI2RlZmluZSBJUlFfU0NDQV9TUENPTkQJICAgICAoNTQpCisKKworI2RlZmluZSBJTlRfQ0xLICAgMjQ1NzYJICAgIC8qIENMSyB3aGlsZSBpbnRfY2xrID0yLjQ1Nk1IeiBhbmQgZGl2aWRlID0gMTAwICovCisjZGVmaW5lIElOVF9USUNLUyAyNDYJICAgIC8qIHRvIG1ha2Ugc2NoZWRfdGltZSA9IDk5LjkwMi4uLiBIWiAqLworCisKKyNkZWZpbmUgTUZQX0VOQUJMRQkwCisjZGVmaW5lIE1GUF9QRU5ESU5HCTEKKyNkZWZpbmUgTUZQX1NFUlZJQ0UJMgorI2RlZmluZSBNRlBfTUFTSwkzCisKKy8qIFV0aWxpdHkgZnVuY3Rpb25zIGZvciBzZXR0aW5nL2NsZWFyaW5nIGJpdHMgaW4gdGhlIGludGVycnVwdCByZWdpc3RlcnMgb2YKKyAqIHRoZSBNRlAuICd0eXBlJyBzaG91bGQgYmUgY29uc3RhbnQsIGlmICdpcnEnIGlzIGNvbnN0YW50LCB0b28sIGNvZGUgc2l6ZSBpcworICogcmVkdWNlZC4gc2V0X21mcF9iaXQoKSBpcyBub25zZW5zZSBmb3IgUEVORElORyBhbmQgU0VSVklDRSByZWdpc3RlcnMuICovCisKK3N0YXRpYyBpbmxpbmUgaW50IGdldF9tZnBfYml0KCB1bnNpZ25lZCBpcnEsIGludCB0eXBlICkKKworewl1bnNpZ25lZCBjaGFyCW1hc2ssICpyZWc7CisKKwltYXNrID0gMSA8PCAoaXJxICYgNyk7CisJcmVnID0gKHVuc2lnbmVkIGNoYXIgKikmbWZwLmludF9lbl9hICsgdHlwZSo0ICsKKwkJICAoKGlycSAmIDgpID4+IDIpICsgKCgoaXJxLTgpICYgMTYpIDw8IDMpOworCXJldHVybiggKnJlZyAmIG1hc2sgKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldF9tZnBfYml0KCB1bnNpZ25lZCBpcnEsIGludCB0eXBlICkKKworewl1bnNpZ25lZCBjaGFyCW1hc2ssICpyZWc7CisKKwltYXNrID0gMSA8PCAoaXJxICYgNyk7CisJcmVnID0gKHVuc2lnbmVkIGNoYXIgKikmbWZwLmludF9lbl9hICsgdHlwZSo0ICsKKwkJICAoKGlycSAmIDgpID4+IDIpICsgKCgoaXJxLTgpICYgMTYpIDw8IDMpOworCV9fYXNtX18gX192b2xhdGlsZV9fICggIm9yYiAlMCwlMSIKKwkJCSAgICAgIDogOiAiZGkiIChtYXNrKSwgIm0iICgqcmVnKSA6ICJtZW1vcnkiICk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9tZnBfYml0KCB1bnNpZ25lZCBpcnEsIGludCB0eXBlICkKKworewl1bnNpZ25lZCBjaGFyCW1hc2ssICpyZWc7CisKKwltYXNrID0gfigxIDw8IChpcnEgJiA3KSk7CisJcmVnID0gKHVuc2lnbmVkIGNoYXIgKikmbWZwLmludF9lbl9hICsgdHlwZSo0ICsKKwkJICAoKGlycSAmIDgpID4+IDIpICsgKCgoaXJxLTgpICYgMTYpIDw8IDMpOworCWlmICh0eXBlID09IE1GUF9QRU5ESU5HIHx8IHR5cGUgPT0gTUZQX1NFUlZJQ0UpCisJCV9fYXNtX18gX192b2xhdGlsZV9fICggIm1vdmViICUwLCUxIgorCQkJCSAgICAgIDogOiAiZGkiIChtYXNrKSwgIm0iICgqcmVnKSA6ICJtZW1vcnkiICk7CisJZWxzZQorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoICJhbmRiICUwLCUxIgorCQkJCSAgICAgIDogOiAiZGkiIChtYXNrKSwgIm0iICgqcmVnKSA6ICJtZW1vcnkiICk7Cit9CisKKy8qCisgKiB7ZW4sZGlzfWFibGVfaXJxIGhhdmUgdGhlIHVzdWFsIHNlbWFudGljcyBvZiB0ZW1wb3JhcnkgYmxvY2tpbmcgdGhlCisgKiBpbnRlcnJ1cHQsIGJ1dCBub3QgbG9vc2luZyByZXF1ZXN0cyB0aGF0IGhhcHBlbiBiZXR3ZWVuIGRpc2FibGluZyBhbmQKKyAqIGVuYWJsaW5nLiBUaGlzIGlzIGRvbmUgd2l0aCB0aGUgTUZQIG1hc2sgcmVnaXN0ZXJzLgorICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdGFyaV9lbmFibGVfaXJxKCB1bnNpZ25lZCBpcnEgKQorCit7CisJaWYgKGlycSA8IFNUTUZQX1NPVVJDRV9CQVNFIHx8IGlycSA+PSBTQ0NfU09VUkNFX0JBU0UpIHJldHVybjsKKwlzZXRfbWZwX2JpdCggaXJxLCBNRlBfTUFTSyApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXRhcmlfZGlzYWJsZV9pcnEoIHVuc2lnbmVkIGlycSApCisKK3sKKwlpZiAoaXJxIDwgU1RNRlBfU09VUkNFX0JBU0UgfHwgaXJxID49IFNDQ19TT1VSQ0VfQkFTRSkgcmV0dXJuOworCWNsZWFyX21mcF9iaXQoIGlycSwgTUZQX01BU0sgKTsKK30KKworLyoKKyAqIEluIG9wcG9zaXRlIHRvIHtlbixkaXN9YWJsZV9pcnEsIHJlcXVlc3RzIGJldHdlZW4gdHVybntvZmYsb259X2lycSBhcmUgbm90CisgKiAic3RvcmVkIgorICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdGFyaV90dXJub25faXJxKCB1bnNpZ25lZCBpcnEgKQorCit7CisJaWYgKGlycSA8IFNUTUZQX1NPVVJDRV9CQVNFIHx8IGlycSA+PSBTQ0NfU09VUkNFX0JBU0UpIHJldHVybjsKKwlzZXRfbWZwX2JpdCggaXJxLCBNRlBfRU5BQkxFICk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdGFyaV90dXJub2ZmX2lycSggdW5zaWduZWQgaXJxICkKKworeworCWlmIChpcnEgPCBTVE1GUF9TT1VSQ0VfQkFTRSB8fCBpcnEgPj0gU0NDX1NPVVJDRV9CQVNFKSByZXR1cm47CisJY2xlYXJfbWZwX2JpdCggaXJxLCBNRlBfRU5BQkxFICk7CisJY2xlYXJfbWZwX2JpdCggaXJxLCBNRlBfUEVORElORyApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXRhcmlfY2xlYXJfcGVuZGluZ19pcnEoIHVuc2lnbmVkIGlycSApCisKK3sKKwlpZiAoaXJxIDwgU1RNRlBfU09VUkNFX0JBU0UgfHwgaXJxID49IFNDQ19TT1VSQ0VfQkFTRSkgcmV0dXJuOworCWNsZWFyX21mcF9iaXQoIGlycSwgTUZQX1BFTkRJTkcgKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYXRhcmlfaXJxX3BlbmRpbmcoIHVuc2lnbmVkIGlycSApCisKK3sKKwlpZiAoaXJxIDwgU1RNRlBfU09VUkNFX0JBU0UgfHwgaXJxID49IFNDQ19TT1VSQ0VfQkFTRSkgcmV0dXJuKCAwICk7CisJcmV0dXJuKCBnZXRfbWZwX2JpdCggaXJxLCBNRlBfUEVORElORyApICk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgYXRhcmlfcmVnaXN0ZXJfdm1lX2ludCggdm9pZCApOwordm9pZCBhdGFyaV91bnJlZ2lzdGVyX3ZtZV9pbnQoIHVuc2lnbmVkIGxvbmcgKTsKKworI2VuZGlmIC8qIGxpbnV4L2F0YXJpaW50cy5oICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL2F0YXJpa2IuaCBiL2luY2x1ZGUvYXNtLW02OGsvYXRhcmlrYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4OTI2MDUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2F0YXJpa2IuaApAQCAtMCwwICsxLDQwIEBACisvKgorKiogYXRhcmlrYi5oIC0tIFRoaXMgaGVhZGVyIGNvbnRhaW5zIHRoZSBwcm90b3R5cGVzIG9mIGZ1bmN0aW9ucyBvZgorKiogICAgICAgICAgICAgIHRoZSBpbnRlbGxpZ2VudCBrZXlib2FyZCBvZiB0aGUgQXRhcmkgbmVlZGVkIGJ5IHRoZQorKiogICAgICAgICAgICAgIG1vdXNlIGFuZCBqb3lzdGljayBkcml2ZXJzLgorKioKKyoqIENvcHlyaWdodCAxOTk0IGJ5IFJvYmVydCBkZSBWcmllcworKioKKyoqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisqKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorKiogZm9yIG1vcmUgZGV0YWlscy4KKyoqCisqKiBDcmVhdGVkOiAyMCBGZWIgMTk5NCBieSBSb2JlcnQgZGUgVnJpZXMKKyovCisKKyNpZm5kZWYgX0xJTlVYX0FUQVJJS0JfSAorI2RlZmluZSBfTElOVVhfQVRBUklLQl9ICisKK3ZvaWQgaWtiZF93cml0ZShjb25zdCBjaGFyICosIGludCk7Cit2b2lkIGlrYmRfbW91c2VfYnV0dG9uX2FjdGlvbihpbnQgbW9kZSk7Cit2b2lkIGlrYmRfbW91c2VfcmVsX3Bvcyh2b2lkKTsKK3ZvaWQgaWtiZF9tb3VzZV9hYnNfcG9zKGludCB4bWF4LCBpbnQgeW1heCk7Cit2b2lkIGlrYmRfbW91c2Vfa2JkX21vZGUoaW50IGR4LCBpbnQgZHkpOwordm9pZCBpa2JkX21vdXNlX3RocmVzaChpbnQgeCwgaW50IHkpOwordm9pZCBpa2JkX21vdXNlX3NjYWxlKGludCB4LCBpbnQgeSk7Cit2b2lkIGlrYmRfbW91c2VfcG9zX2dldChpbnQgKngsIGludCAqeSk7Cit2b2lkIGlrYmRfbW91c2VfcG9zX3NldChpbnQgeCwgaW50IHkpOwordm9pZCBpa2JkX21vdXNlX3kwX2JvdCh2b2lkKTsKK3ZvaWQgaWtiZF9tb3VzZV95MF90b3Aodm9pZCk7Cit2b2lkIGlrYmRfbW91c2VfZGlzYWJsZSh2b2lkKTsKK3ZvaWQgaWtiZF9qb3lzdGlja19ldmVudF9vbih2b2lkKTsKK3ZvaWQgaWtiZF9qb3lzdGlja19ldmVudF9vZmYodm9pZCk7Cit2b2lkIGlrYmRfam95c3RpY2tfZ2V0X3N0YXRlKHZvaWQpOwordm9pZCBpa2JkX2pveXN0aWNrX2Rpc2FibGUodm9pZCk7CisKKy8qIEhvb2sgZm9yIE1JREkgc2VyaWFsIGRyaXZlciAqLworZXh0ZXJuIHZvaWQgKCphdGFyaV9NSURJX2ludGVycnVwdF9ob29rKSAodm9pZCk7CisvKiBIb29rIGZvciBtb3VzZSBkcml2ZXIgKi8KK2V4dGVybiB2b2lkICgqYXRhcmlfbW91c2VfaW50ZXJydXB0X2hvb2spIChjaGFyICopOworCisjZW5kaWYgLyogX0xJTlVYX0FUQVJJS0JfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9hdG9taWMuaCBiL2luY2x1ZGUvYXNtLW02OGsvYXRvbWljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhmMzA0MwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvYXRvbWljLmgKQEAgLTAsMCArMSwxNDggQEAKKyNpZm5kZWYgX19BUkNIX002OEtfQVRPTUlDX18KKyNkZWZpbmUgX19BUkNIX002OEtfQVRPTUlDX18KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgkvKiBsb2NhbF9pcnFfWFhYKCkgKi8KKworLyoKKyAqIEF0b21pYyBvcGVyYXRpb25zIHRoYXQgQyBjYW4ndCBndWFyYW50ZWUgdXMuICBVc2VmdWwgZm9yCisgKiByZXNvdXJjZSBjb3VudGluZyBldGMuLgorICovCisKKy8qCisgKiBXZSBkbyBub3QgaGF2ZSBTTVAgbTY4ayBzeXN0ZW1zLCBzbyB3ZSBkb24ndCBoYXZlIHRvIGRlYWwgd2l0aCB0aGF0LgorICovCisKK3R5cGVkZWYgc3RydWN0IHsgaW50IGNvdW50ZXI7IH0gYXRvbWljX3Q7CisjZGVmaW5lIEFUT01JQ19JTklUKGkpCXsgKGkpIH0KKworI2RlZmluZSBhdG9taWNfcmVhZCh2KQkJKCh2KS0+Y291bnRlcikKKyNkZWZpbmUgYXRvbWljX3NldCh2LCBpKQkoKCh2KS0+Y291bnRlcikgPSBpKQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX2FkZChpbnQgaSwgYXRvbWljX3QgKnYpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oImFkZGwgJTEsJTAiIDogIittIiAoKnYpIDogImlkIiAoaSkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX3N1YihpbnQgaSwgYXRvbWljX3QgKnYpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN1YmwgJTEsJTAiIDogIittIiAoKnYpIDogImlkIiAoaSkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX2luYyhhdG9taWNfdCAqdikKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygiYWRkcWwgIzEsJTAiIDogIittIiAoKnYpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGF0b21pY19kZWMoYXRvbWljX3QgKnYpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN1YnFsICMxLCUwIiA6ICIrbSIgKCp2KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pY19kZWNfYW5kX3Rlc3QoYXRvbWljX3QgKnYpCit7CisJY2hhciBjOworCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdWJxbCAjMSwlMTsgc2VxICUwIiA6ICI9ZCIgKGMpLCAiK20iICgqdikpOworCXJldHVybiBjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pY19pbmNfYW5kX3Rlc3QoYXRvbWljX3QgKnYpCit7CisJY2hhciBjOworCV9fYXNtX18gX192b2xhdGlsZV9fKCJhZGRxbCAjMSwlMTsgc2VxICUwIiA6ICI9ZCIgKGMpLCAiK20iICgqdikpOworCXJldHVybiBjICE9IDA7Cit9CisKKyNpZmRlZiBDT05GSUdfUk1XX0lOU05TCitzdGF0aWMgaW5saW5lIGludCBhdG9taWNfYWRkX3JldHVybihpbnQgaSwgYXRvbWljX3QgKnYpCit7CisJaW50IHQsIHRtcDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkJIjE6CW1vdmVsICUyLCUxXG4iCisJCQkiCWFkZGwgJTMsJTFcbiIKKwkJCSIJY2FzbCAlMiwlMSwlMFxuIgorCQkJIglqbmUgMWIiCisJCQk6ICIrbSIgKCp2KSwgIj0mZCIgKHQpLCAiPSZkIiAodG1wKQorCQkJOiAiZyIgKGkpLCAiMiIgKGF0b21pY19yZWFkKHYpKSk7CisJcmV0dXJuIHQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pY19zdWJfcmV0dXJuKGludCBpLCBhdG9taWNfdCAqdikKK3sKKwlpbnQgdCwgdG1wOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCQkiMToJbW92ZWwgJTIsJTFcbiIKKwkJCSIJc3VibCAlMywlMVxuIgorCQkJIgljYXNsICUyLCUxLCUwXG4iCisJCQkiCWpuZSAxYiIKKwkJCTogIittIiAoKnYpLCAiPSZkIiAodCksICI9JmQiICh0bXApCisJCQk6ICJnIiAoaSksICIyIiAoYXRvbWljX3JlYWQodikpKTsKKwlyZXR1cm4gdDsKK30KKyNlbHNlIC8qICFDT05GSUdfUk1XX0lOU05TICovCitzdGF0aWMgaW5saW5lIGludCBhdG9taWNfYWRkX3JldHVybihpbnQgaSwgYXRvbWljX3QgKiB2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHQ7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJdCA9IGF0b21pY19yZWFkKHYpOworCXQgKz0gaTsKKwlhdG9taWNfc2V0KHYsIHQpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCXJldHVybiB0OworfQorCitzdGF0aWMgaW5saW5lIGludCBhdG9taWNfc3ViX3JldHVybihpbnQgaSwgYXRvbWljX3QgKiB2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHQ7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJdCA9IGF0b21pY19yZWFkKHYpOworCXQgLT0gaTsKKwlhdG9taWNfc2V0KHYsIHQpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCXJldHVybiB0OworfQorI2VuZGlmIC8qICFDT05GSUdfUk1XX0lOU05TICovCisKKyNkZWZpbmUgYXRvbWljX2RlY19yZXR1cm4odikJYXRvbWljX3N1Yl9yZXR1cm4oMSwgKHYpKQorI2RlZmluZSBhdG9taWNfaW5jX3JldHVybih2KQlhdG9taWNfYWRkX3JldHVybigxLCAodikpCisKK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pY19zdWJfYW5kX3Rlc3QoaW50IGksIGF0b21pY190ICp2KQoreworCWNoYXIgYzsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3VibCAlMiwlMTsgc2VxICUwIiA6ICI9ZCIgKGMpLCAiK20iICgqdik6ICJnIiAoaSkpOworCXJldHVybiBjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pY19hZGRfbmVnYXRpdmUoaW50IGksIGF0b21pY190ICp2KQoreworCWNoYXIgYzsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygiYWRkbCAlMiwlMTsgc21pICUwIiA6ICI9ZCIgKGMpLCAiK20iICgqdik6ICJnIiAoaSkpOworCXJldHVybiBjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfY2xlYXJfbWFzayh1bnNpZ25lZCBsb25nIG1hc2ssIHVuc2lnbmVkIGxvbmcgKnYpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oImFuZGwgJTEsJTAiIDogIittIiAoKnYpIDogImlkIiAofihtYXNrKSkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX3NldF9tYXNrKHVuc2lnbmVkIGxvbmcgbWFzaywgdW5zaWduZWQgbG9uZyAqdikKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygib3JsICUxLCUwIiA6ICIrbSIgKCp2KSA6ICJpZCIgKG1hc2spKTsKK30KKworLyogQXRvbWljIG9wZXJhdGlvbnMgYXJlIGFscmVhZHkgc2VyaWFsaXppbmcgKi8KKyNkZWZpbmUgc21wX21iX19iZWZvcmVfYXRvbWljX2RlYygpCWJhcnJpZXIoKQorI2RlZmluZSBzbXBfbWJfX2FmdGVyX2F0b21pY19kZWMoKQliYXJyaWVyKCkKKyNkZWZpbmUgc21wX21iX19iZWZvcmVfYXRvbWljX2luYygpCWJhcnJpZXIoKQorI2RlZmluZSBzbXBfbWJfX2FmdGVyX2F0b21pY19pbmMoKQliYXJyaWVyKCkKKworI2VuZGlmIC8qIF9fQVJDSF9NNjhLX0FUT01JQyBfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9iaXRvcHMuaCBiL2luY2x1ZGUvYXNtLW02OGsvYml0b3BzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFiY2Y3YzY2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9iaXRvcHMuaApAQCAtMCwwICsxLDQzNiBAQAorI2lmbmRlZiBfTTY4S19CSVRPUFNfSAorI2RlZmluZSBfTTY4S19CSVRPUFNfSAorLyoKKyAqIENvcHlyaWdodCAxOTkyLCBMaW51cyBUb3J2YWxkcy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisKKy8qCisgKiBSZXF1aXJlIDY4MDIwIG9yIGJldHRlci4KKyAqCisgKiBUaGV5IHVzZSB0aGUgc3RhbmRhcmQgYmlnLWVuZGlhbiBtNjgweDAgYml0IG9yZGVyaW5nLgorICovCisKKyNkZWZpbmUgdGVzdF9hbmRfc2V0X2JpdChucix2YWRkcikgXAorICAoX19idWlsdGluX2NvbnN0YW50X3AobnIpID8gXAorICAgX19jb25zdGFudF90ZXN0X2FuZF9zZXRfYml0KG5yLCB2YWRkcikgOiBcCisgICBfX2dlbmVyaWNfdGVzdF9hbmRfc2V0X2JpdChuciwgdmFkZHIpKQorCisjZGVmaW5lIF9fdGVzdF9hbmRfc2V0X2JpdChucix2YWRkcikgdGVzdF9hbmRfc2V0X2JpdChucix2YWRkcikKKworc3RhdGljIGlubGluZSBpbnQgX19jb25zdGFudF90ZXN0X2FuZF9zZXRfYml0KGludCBuciwgdW5zaWduZWQgbG9uZyAqdmFkZHIpCit7CisJY2hhciAqcCA9IChjaGFyICopdmFkZHIgKyAobnIgXiAzMSkgLyA4OworCWNoYXIgcmV0dmFsOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJic2V0ICUyLCUxOyBzbmUgJTAiCisJCQk6ICI9ZCIgKHJldHZhbCksICIrbSIgKCpwKQorCQkJOiAiZGkiIChuciAmIDcpKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fZ2VuZXJpY190ZXN0X2FuZF9zZXRfYml0KGludCBuciwgdW5zaWduZWQgbG9uZyAqdmFkZHIpCit7CisJY2hhciByZXR2YWw7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImJmc2V0ICUyeyUxOiMxfTsgc25lICUwIgorCQkJOiAiPWQiIChyZXR2YWwpIDogImQiIChucl4zMSksICJvIiAoKnZhZGRyKSA6ICJtZW1vcnkiKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKKyNkZWZpbmUgc2V0X2JpdChucix2YWRkcikgXAorICAoX19idWlsdGluX2NvbnN0YW50X3AobnIpID8gXAorICAgX19jb25zdGFudF9zZXRfYml0KG5yLCB2YWRkcikgOiBcCisgICBfX2dlbmVyaWNfc2V0X2JpdChuciwgdmFkZHIpKQorCisjZGVmaW5lIF9fc2V0X2JpdChucix2YWRkcikgc2V0X2JpdChucix2YWRkcikKKworc3RhdGljIGlubGluZSB2b2lkIF9fY29uc3RhbnRfc2V0X2JpdChpbnQgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKnZhZGRyKQoreworCWNoYXIgKnAgPSAoY2hhciAqKXZhZGRyICsgKG5yIF4gMzEpIC8gODsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImJzZXQgJTEsJTAiCisJCQk6ICIrbSIgKCpwKSA6ICJkaSIgKG5yICYgNykpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19nZW5lcmljX3NldF9iaXQoaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICp2YWRkcikKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImJmc2V0ICUxeyUwOiMxfSIKKwkJCTogOiAiZCIgKG5yXjMxKSwgIm8iICgqdmFkZHIpIDogIm1lbW9yeSIpOworfQorCisjZGVmaW5lIHRlc3RfYW5kX2NsZWFyX2JpdChucix2YWRkcikgXAorICAoX19idWlsdGluX2NvbnN0YW50X3AobnIpID8gXAorICAgX19jb25zdGFudF90ZXN0X2FuZF9jbGVhcl9iaXQobnIsIHZhZGRyKSA6IFwKKyAgIF9fZ2VuZXJpY190ZXN0X2FuZF9jbGVhcl9iaXQobnIsIHZhZGRyKSkKKworI2RlZmluZSBfX3Rlc3RfYW5kX2NsZWFyX2JpdChucix2YWRkcikgdGVzdF9hbmRfY2xlYXJfYml0KG5yLHZhZGRyKQorCitzdGF0aWMgaW5saW5lIGludCBfX2NvbnN0YW50X3Rlc3RfYW5kX2NsZWFyX2JpdChpbnQgbnIsIHVuc2lnbmVkIGxvbmcgKnZhZGRyKQoreworCWNoYXIgKnAgPSAoY2hhciAqKXZhZGRyICsgKG5yIF4gMzEpIC8gODsKKwljaGFyIHJldHZhbDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fICgiYmNsciAlMiwlMTsgc25lICUwIgorCQkJOiAiPWQiIChyZXR2YWwpLCAiK20iICgqcCkKKwkJCTogImRpIiAobnIgJiA3KSk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW5saW5lIGludCBfX2dlbmVyaWNfdGVzdF9hbmRfY2xlYXJfYml0KGludCBuciwgdW5zaWduZWQgbG9uZyAqdmFkZHIpCit7CisJY2hhciByZXR2YWw7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImJmY2xyICUyeyUxOiMxfTsgc25lICUwIgorCQkJOiAiPWQiIChyZXR2YWwpIDogImQiIChucl4zMSksICJvIiAoKnZhZGRyKSA6ICJtZW1vcnkiKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiBjbGVhcl9iaXQoKSBkb2Vzbid0IHByb3ZpZGUgYW55IGJhcnJpZXIgZm9yIHRoZSBjb21waWxlci4KKyAqLworI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKQliYXJyaWVyKCkKKyNkZWZpbmUgc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKQliYXJyaWVyKCkKKworI2RlZmluZSBjbGVhcl9iaXQobnIsdmFkZHIpIFwKKyAgKF9fYnVpbHRpbl9jb25zdGFudF9wKG5yKSA/IFwKKyAgIF9fY29uc3RhbnRfY2xlYXJfYml0KG5yLCB2YWRkcikgOiBcCisgICBfX2dlbmVyaWNfY2xlYXJfYml0KG5yLCB2YWRkcikpCisjZGVmaW5lIF9fY2xlYXJfYml0KG5yLHZhZGRyKSBjbGVhcl9iaXQobnIsdmFkZHIpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2NvbnN0YW50X2NsZWFyX2JpdChpbnQgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKnZhZGRyKQoreworCWNoYXIgKnAgPSAoY2hhciAqKXZhZGRyICsgKG5yIF4gMzEpIC8gODsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImJjbHIgJTEsJTAiCisJCQk6ICIrbSIgKCpwKSA6ICJkaSIgKG5yICYgNykpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19nZW5lcmljX2NsZWFyX2JpdChpbnQgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKnZhZGRyKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fICgiYmZjbHIgJTF7JTA6IzF9IgorCQkJOiA6ICJkIiAobnJeMzEpLCAibyIgKCp2YWRkcikgOiAibWVtb3J5Iik7Cit9CisKKyNkZWZpbmUgdGVzdF9hbmRfY2hhbmdlX2JpdChucix2YWRkcikgXAorICAoX19idWlsdGluX2NvbnN0YW50X3AobnIpID8gXAorICAgX19jb25zdGFudF90ZXN0X2FuZF9jaGFuZ2VfYml0KG5yLCB2YWRkcikgOiBcCisgICBfX2dlbmVyaWNfdGVzdF9hbmRfY2hhbmdlX2JpdChuciwgdmFkZHIpKQorCisjZGVmaW5lIF9fdGVzdF9hbmRfY2hhbmdlX2JpdChucix2YWRkcikgdGVzdF9hbmRfY2hhbmdlX2JpdChucix2YWRkcikKKyNkZWZpbmUgX19jaGFuZ2VfYml0KG5yLHZhZGRyKSBjaGFuZ2VfYml0KG5yLHZhZGRyKQorCitzdGF0aWMgaW5saW5lIGludCBfX2NvbnN0YW50X3Rlc3RfYW5kX2NoYW5nZV9iaXQoaW50IG5yLCB1bnNpZ25lZCBsb25nICp2YWRkcikKK3sKKwljaGFyICpwID0gKGNoYXIgKil2YWRkciArIChuciBeIDMxKSAvIDg7CisJY2hhciByZXR2YWw7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImJjaGcgJTIsJTE7IHNuZSAlMCIKKwkJCTogIj1kIiAocmV0dmFsKSwgIittIiAoKnApCisJCQk6ICJkaSIgKG5yICYgNykpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19nZW5lcmljX3Rlc3RfYW5kX2NoYW5nZV9iaXQoaW50IG5yLCB1bnNpZ25lZCBsb25nICp2YWRkcikKK3sKKwljaGFyIHJldHZhbDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fICgiYmZjaGcgJTJ7JTE6IzF9OyBzbmUgJTAiCisJCQk6ICI9ZCIgKHJldHZhbCkgOiAiZCIgKG5yXjMxKSwgIm8iICgqdmFkZHIpIDogIm1lbW9yeSIpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworI2RlZmluZSBjaGFuZ2VfYml0KG5yLHZhZGRyKSBcCisgIChfX2J1aWx0aW5fY29uc3RhbnRfcChucikgPyBcCisgICBfX2NvbnN0YW50X2NoYW5nZV9iaXQobnIsIHZhZGRyKSA6IFwKKyAgIF9fZ2VuZXJpY19jaGFuZ2VfYml0KG5yLCB2YWRkcikpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2NvbnN0YW50X2NoYW5nZV9iaXQoaW50IG5yLCB1bnNpZ25lZCBsb25nICp2YWRkcikKK3sKKwljaGFyICpwID0gKGNoYXIgKil2YWRkciArIChuciBeIDMxKSAvIDg7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJiY2hnICUxLCUwIgorCQkJOiAiK20iICgqcCkgOiAiZGkiIChuciAmIDcpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fZ2VuZXJpY19jaGFuZ2VfYml0KGludCBuciwgdW5zaWduZWQgbG9uZyAqdmFkZHIpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJiZmNoZyAlMXslMDojMX0iCisJCQk6IDogImQiIChucl4zMSksICJvIiAoKnZhZGRyKSA6ICJtZW1vcnkiKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgdGVzdF9iaXQoaW50IG5yLCBjb25zdCB1bnNpZ25lZCBsb25nICp2YWRkcikKK3sKKwlyZXR1cm4gKHZhZGRyW25yID4+IDVdICYgKDFVTCA8PCAobnIgJiAzMSkpKSAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBmaW5kX2ZpcnN0X3plcm9fYml0KGNvbnN0IHVuc2lnbmVkIGxvbmcgKnZhZGRyLAorCQkJCSAgICAgIHVuc2lnbmVkIHNpemUpCit7CisJY29uc3QgdW5zaWduZWQgbG9uZyAqcCA9IHZhZGRyOworCWludCByZXMgPSAzMjsKKwl1bnNpZ25lZCBsb25nIG51bTsKKworCWlmICghc2l6ZSkKKwkJcmV0dXJuIDA7CisKKwlzaXplID0gKHNpemUgKyAzMSkgPj4gNTsKKwl3aGlsZSAoIShudW0gPSB+KnArKykpIHsKKwkJaWYgKCEtLXNpemUpCisJCQlnb3RvIG91dDsKKwl9CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImJmZmZvICUxeyMwLCMwfSwlMCIKKwkJCSAgICAgIDogIj1kIiAocmVzKSA6ICJkIiAobnVtICYgLW51bSkpOworCXJlcyBePSAzMTsKK291dDoKKwlyZXR1cm4gKChsb25nKXAgLSAobG9uZyl2YWRkciAtIDQpICogOCArIHJlczsKK30KKworc3RhdGljIGlubGluZSBpbnQgZmluZF9uZXh0X3plcm9fYml0KGNvbnN0IHVuc2lnbmVkIGxvbmcgKnZhZGRyLCBpbnQgc2l6ZSwKKwkJCQkgICAgIGludCBvZmZzZXQpCit7CisJY29uc3QgdW5zaWduZWQgbG9uZyAqcCA9IHZhZGRyICsgKG9mZnNldCA+PiA1KTsKKwlpbnQgYml0ID0gb2Zmc2V0ICYgMzFVTCwgcmVzOworCisJaWYgKG9mZnNldCA+PSBzaXplKQorCQlyZXR1cm4gc2l6ZTsKKworCWlmIChiaXQpIHsKKwkJdW5zaWduZWQgbG9uZyBudW0gPSB+KnArKyAmICh+MFVMIDw8IGJpdCk7CisJCW9mZnNldCAtPSBiaXQ7CisKKwkJLyogTG9vayBmb3IgemVybyBpbiBmaXJzdCBsb25nd29yZCAqLworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImJmZmZvICUxeyMwLCMwfSwlMCIKKwkJCQkgICAgICA6ICI9ZCIgKHJlcykgOiAiZCIgKG51bSAmIC1udW0pKTsKKwkJaWYgKHJlcyA8IDMyKQorCQkJcmV0dXJuIG9mZnNldCArIChyZXMgXiAzMSk7CisJCW9mZnNldCArPSAzMjsKKwl9CisJLyogTm8gemVybyB5ZXQsIHNlYXJjaCByZW1haW5pbmcgZnVsbCBieXRlcyBmb3IgYSB6ZXJvICovCisJcmVzID0gZmluZF9maXJzdF96ZXJvX2JpdChwLCBzaXplIC0gKChsb25nKXAgLSAobG9uZyl2YWRkcikgKiA4KTsKKwlyZXR1cm4gb2Zmc2V0ICsgcmVzOworfQorCitzdGF0aWMgaW5saW5lIGludCBmaW5kX2ZpcnN0X2JpdChjb25zdCB1bnNpZ25lZCBsb25nICp2YWRkciwgdW5zaWduZWQgc2l6ZSkKK3sKKwljb25zdCB1bnNpZ25lZCBsb25nICpwID0gdmFkZHI7CisJaW50IHJlcyA9IDMyOworCXVuc2lnbmVkIGxvbmcgbnVtOworCisJaWYgKCFzaXplKQorCQlyZXR1cm4gMDsKKworCXNpemUgPSAoc2l6ZSArIDMxKSA+PiA1OworCXdoaWxlICghKG51bSA9ICpwKyspKSB7CisJCWlmICghLS1zaXplKQorCQkJZ290byBvdXQ7CisJfQorCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJiZmZmbyAlMXsjMCwjMH0sJTAiCisJCQkgICAgICA6ICI9ZCIgKHJlcykgOiAiZCIgKG51bSAmIC1udW0pKTsKKwlyZXMgXj0gMzE7CitvdXQ6CisJcmV0dXJuICgobG9uZylwIC0gKGxvbmcpdmFkZHIgLSA0KSAqIDggKyByZXM7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGZpbmRfbmV4dF9iaXQoY29uc3QgdW5zaWduZWQgbG9uZyAqdmFkZHIsIGludCBzaXplLAorCQkJCWludCBvZmZzZXQpCit7CisJY29uc3QgdW5zaWduZWQgbG9uZyAqcCA9IHZhZGRyICsgKG9mZnNldCA+PiA1KTsKKwlpbnQgYml0ID0gb2Zmc2V0ICYgMzFVTCwgcmVzOworCisJaWYgKG9mZnNldCA+PSBzaXplKQorCQlyZXR1cm4gc2l6ZTsKKworCWlmIChiaXQpIHsKKwkJdW5zaWduZWQgbG9uZyBudW0gPSAqcCsrICYgKH4wVUwgPDwgYml0KTsKKwkJb2Zmc2V0IC09IGJpdDsKKworCQkvKiBMb29rIGZvciBvbmUgaW4gZmlyc3QgbG9uZ3dvcmQgKi8KKwkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJiZmZmbyAlMXsjMCwjMH0sJTAiCisJCQkJICAgICAgOiAiPWQiIChyZXMpIDogImQiIChudW0gJiAtbnVtKSk7CisJCWlmIChyZXMgPCAzMikKKwkJCXJldHVybiBvZmZzZXQgKyAocmVzIF4gMzEpOworCQlvZmZzZXQgKz0gMzI7CisJfQorCS8qIE5vIG9uZSB5ZXQsIHNlYXJjaCByZW1haW5pbmcgZnVsbCBieXRlcyBmb3IgYSBvbmUgKi8KKwlyZXMgPSBmaW5kX2ZpcnN0X2JpdChwLCBzaXplIC0gKChsb25nKXAgLSAobG9uZyl2YWRkcikgKiA4KTsKKwlyZXR1cm4gb2Zmc2V0ICsgcmVzOworfQorCisvKgorICogZmZ6ID0gRmluZCBGaXJzdCBaZXJvIGluIHdvcmQuIFVuZGVmaW5lZCBpZiBubyB6ZXJvIGV4aXN0cywKKyAqIHNvIGNvZGUgc2hvdWxkIGNoZWNrIGFnYWluc3QgfjBVTCBmaXJzdC4uCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBmZnoodW5zaWduZWQgbG9uZyB3b3JkKQoreworCWludCByZXM7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImJmZmZvICUxeyMwLCMwfSwlMCIKKwkJCSAgICAgIDogIj1kIiAocmVzKSA6ICJkIiAofndvcmQgJiAtfndvcmQpKTsKKwlyZXR1cm4gcmVzIF4gMzE7Cit9CisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKy8qCisgKiBmZnM6IGZpbmQgZmlyc3QgYml0IHNldC4gVGhpcyBpcyBkZWZpbmVkIHRoZSBzYW1lIHdheSBhcworICogdGhlIGxpYmMgYW5kIGNvbXBpbGVyIGJ1aWx0aW4gZmZzIHJvdXRpbmVzLCB0aGVyZWZvcmUKKyAqIGRpZmZlcnMgaW4gc3Bpcml0IGZyb20gdGhlIGFib3ZlIGZmeiAobWFuIGZmcykuCisgKi8KKworc3RhdGljIGlubGluZSBpbnQgZmZzKGludCB4KQoreworCWludCBjbnQ7CisKKwlhc20gKCJiZmZmbyAlMXsjMDojMH0sJTAiIDogIj1kIiAoY250KSA6ICJkbSIgKHggJiAteCkpOworCisJcmV0dXJuIDMyIC0gY250OworfQorI2RlZmluZSBfX2Zmcyh4KSAoZmZzKHgpIC0gMSkKKworLyoKKyAqIGZsczogZmluZCBsYXN0IGJpdCBzZXQuCisgKi8KKworc3RhdGljIGlubGluZSBpbnQgZmxzKGludCB4KQoreworCWludCBjbnQ7CisKKwlhc20gKCJiZmZmbyAlMXsjMCwjMH0sJTAiIDogIj1kIiAoY250KSA6ICJkbSIgKHgpKTsKKworCXJldHVybiAzMiAtIGNudDsKK30KKworLyoKKyAqIEV2ZXJ5IGFyY2hpdGVjdHVyZSBtdXN0IGRlZmluZSB0aGlzIGZ1bmN0aW9uLiBJdCdzIHRoZSBmYXN0ZXN0CisgKiB3YXkgb2Ygc2VhcmNoaW5nIGEgMTQwLWJpdCBiaXRtYXAgd2hlcmUgdGhlIGZpcnN0IDEwMCBiaXRzIGFyZQorICogdW5saWtlbHkgdG8gYmUgc2V0LiBJdCdzIGd1YXJhbnRlZWQgdGhhdCBhdCBsZWFzdCBvbmUgb2YgdGhlIDE0MAorICogYml0cyBpcyBjbGVhcmVkLgorICovCitzdGF0aWMgaW5saW5lIGludCBzY2hlZF9maW5kX2ZpcnN0X2JpdChjb25zdCB1bnNpZ25lZCBsb25nICpiKQoreworCWlmICh1bmxpa2VseShiWzBdKSkKKwkJcmV0dXJuIF9fZmZzKGJbMF0pOworCWlmICh1bmxpa2VseShiWzFdKSkKKwkJcmV0dXJuIF9fZmZzKGJbMV0pICsgMzI7CisJaWYgKHVubGlrZWx5KGJbMl0pKQorCQlyZXR1cm4gX19mZnMoYlsyXSkgKyA2NDsKKwlpZiAoYlszXSkKKwkJcmV0dXJuIF9fZmZzKGJbM10pICsgOTY7CisJcmV0dXJuIF9fZmZzKGJbNF0pICsgMTI4OworfQorCisKKy8qCisgKiBod2VpZ2h0TjogcmV0dXJucyB0aGUgaGFtbWluZyB3ZWlnaHQgKGkuZS4gdGhlIG51bWJlcgorICogb2YgYml0cyBzZXQpIG9mIGEgTi1iaXQgd29yZAorICovCisKKyNkZWZpbmUgaHdlaWdodDMyKHgpIGdlbmVyaWNfaHdlaWdodDMyKHgpCisjZGVmaW5lIGh3ZWlnaHQxNih4KSBnZW5lcmljX2h3ZWlnaHQxNih4KQorI2RlZmluZSBod2VpZ2h0OCh4KSBnZW5lcmljX2h3ZWlnaHQ4KHgpCisKKy8qIEJpdG1hcCBmdW5jdGlvbnMgZm9yIHRoZSBtaW5peCBmaWxlc3lzdGVtICovCisKK3N0YXRpYyBpbmxpbmUgaW50IG1pbml4X2ZpbmRfZmlyc3RfemVyb19iaXQoY29uc3Qgdm9pZCAqdmFkZHIsIHVuc2lnbmVkIHNpemUpCit7CisJY29uc3QgdW5zaWduZWQgc2hvcnQgKnAgPSB2YWRkciwgKmFkZHIgPSB2YWRkcjsKKwlpbnQgcmVzOworCXVuc2lnbmVkIHNob3J0IG51bTsKKworCWlmICghc2l6ZSkKKwkJcmV0dXJuIDA7CisKKwlzaXplID0gKHNpemUgPj4gNCkgKyAoKHNpemUgJiAxNSkgPiAwKTsKKwl3aGlsZSAoKnArKyA9PSAweGZmZmYpCisJeworCQlpZiAoLS1zaXplID09IDApCisJCQlyZXR1cm4gKHAgLSBhZGRyKSA8PCA0OworCX0KKworCW51bSA9IH4qLS1wOworCV9fYXNtX18gX192b2xhdGlsZV9fICgiYmZmZm8gJTF7IzE2LCMxNn0sJTAiCisJCQkgICAgICA6ICI9ZCIgKHJlcykgOiAiZCIgKG51bSAmIC1udW0pKTsKKwlyZXR1cm4gKChwIC0gYWRkcikgPDwgNCkgKyAocmVzIF4gMzEpOworfQorCisjZGVmaW5lIG1pbml4X3Rlc3RfYW5kX3NldF9iaXQobnIsIGFkZHIpCXRlc3RfYW5kX3NldF9iaXQoKG5yKSBeIDE2LCAodW5zaWduZWQgbG9uZyAqKShhZGRyKSkKKyNkZWZpbmUgbWluaXhfc2V0X2JpdChucixhZGRyKQkJCXNldF9iaXQoKG5yKSBeIDE2LCAodW5zaWduZWQgbG9uZyAqKShhZGRyKSkKKyNkZWZpbmUgbWluaXhfdGVzdF9hbmRfY2xlYXJfYml0KG5yLCBhZGRyKQl0ZXN0X2FuZF9jbGVhcl9iaXQoKG5yKSBeIDE2LCAodW5zaWduZWQgbG9uZyAqKShhZGRyKSkKKworc3RhdGljIGlubGluZSBpbnQgbWluaXhfdGVzdF9iaXQoaW50IG5yLCBjb25zdCB2b2lkICp2YWRkcikKK3sKKwljb25zdCB1bnNpZ25lZCBzaG9ydCAqcCA9IHZhZGRyOworCXJldHVybiAocFtuciA+PiA0XSAmICgxVSA8PCAobnIgJiAxNSkpKSAhPSAwOworfQorCisvKiBCaXRtYXAgZnVuY3Rpb25zIGZvciB0aGUgZXh0MiBmaWxlc3lzdGVtLiAqLworCisjZGVmaW5lIGV4dDJfc2V0X2JpdChuciwgYWRkcikJCQl0ZXN0X2FuZF9zZXRfYml0KChucikgXiAyNCwgKHVuc2lnbmVkIGxvbmcgKikoYWRkcikpCisjZGVmaW5lIGV4dDJfc2V0X2JpdF9hdG9taWMobG9jaywgbnIsIGFkZHIpCXRlc3RfYW5kX3NldF9iaXQoKG5yKSBeIDI0LCAodW5zaWduZWQgbG9uZyAqKShhZGRyKSkKKyNkZWZpbmUgZXh0Ml9jbGVhcl9iaXQobnIsIGFkZHIpCQl0ZXN0X2FuZF9jbGVhcl9iaXQoKG5yKSBeIDI0LCAodW5zaWduZWQgbG9uZyAqKShhZGRyKSkKKyNkZWZpbmUgZXh0Ml9jbGVhcl9iaXRfYXRvbWljKGxvY2ssIG5yLCBhZGRyKQl0ZXN0X2FuZF9jbGVhcl9iaXQoKG5yKSBeIDI0LCAodW5zaWduZWQgbG9uZyAqKShhZGRyKSkKKworc3RhdGljIGlubGluZSBpbnQgZXh0Ml90ZXN0X2JpdChpbnQgbnIsIGNvbnN0IHZvaWQgKnZhZGRyKQoreworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnAgPSB2YWRkcjsKKwlyZXR1cm4gKHBbbnIgPj4gM10gJiAoMVUgPDwgKG5yICYgNykpKSAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBleHQyX2ZpbmRfZmlyc3RfemVyb19iaXQoY29uc3Qgdm9pZCAqdmFkZHIsIHVuc2lnbmVkIHNpemUpCit7CisJY29uc3QgdW5zaWduZWQgbG9uZyAqcCA9IHZhZGRyLCAqYWRkciA9IHZhZGRyOworCWludCByZXM7CisKKwlpZiAoIXNpemUpCisJCXJldHVybiAwOworCisJc2l6ZSA9IChzaXplID4+IDUpICsgKChzaXplICYgMzEpID4gMCk7CisJd2hpbGUgKCpwKysgPT0gfjBVTCkKKwl7CisJCWlmICgtLXNpemUgPT0gMCkKKwkJCXJldHVybiAocCAtIGFkZHIpIDw8IDU7CisJfQorCisJLS1wOworCWZvciAocmVzID0gMDsgcmVzIDwgMzI7IHJlcysrKQorCQlpZiAoIWV4dDJfdGVzdF9iaXQgKHJlcywgcCkpCisJCQlicmVhazsKKwlyZXR1cm4gKHAgLSBhZGRyKSAqIDMyICsgcmVzOworfQorCitzdGF0aWMgaW5saW5lIGludCBleHQyX2ZpbmRfbmV4dF96ZXJvX2JpdChjb25zdCB2b2lkICp2YWRkciwgdW5zaWduZWQgc2l6ZSwKKwkJCQkJICB1bnNpZ25lZCBvZmZzZXQpCit7CisJY29uc3QgdW5zaWduZWQgbG9uZyAqYWRkciA9IHZhZGRyOworCWNvbnN0IHVuc2lnbmVkIGxvbmcgKnAgPSBhZGRyICsgKG9mZnNldCA+PiA1KTsKKwlpbnQgYml0ID0gb2Zmc2V0ICYgMzFVTCwgcmVzOworCisJaWYgKG9mZnNldCA+PSBzaXplKQorCQlyZXR1cm4gc2l6ZTsKKworCWlmIChiaXQpIHsKKwkJLyogTG9vayBmb3IgemVybyBpbiBmaXJzdCBsb25nd29yZCAqLworCQlmb3IgKHJlcyA9IGJpdDsgcmVzIDwgMzI7IHJlcysrKQorCQkJaWYgKCFleHQyX3Rlc3RfYml0IChyZXMsIHApKQorCQkJCXJldHVybiAocCAtIGFkZHIpICogMzIgKyByZXM7CisJCXArKzsKKwl9CisJLyogTm8gemVybyB5ZXQsIHNlYXJjaCByZW1haW5pbmcgZnVsbCBieXRlcyBmb3IgYSB6ZXJvICovCisJcmVzID0gZXh0Ml9maW5kX2ZpcnN0X3plcm9fYml0IChwLCBzaXplIC0gMzIgKiAocCAtIGFkZHIpKTsKKwlyZXR1cm4gKHAgLSBhZGRyKSAqIDMyICsgcmVzOworfQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX002OEtfQklUT1BTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvYmxpbmtlbi5oIGIvaW5jbHVkZS9hc20tbTY4ay9ibGlua2VuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE3NDljZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvYmxpbmtlbi5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisqKiBhc20vYmxpbmtlbi5oIC0tIG02OGsgYmxpbmtlbmxpZ2h0cyBzdXBwb3J0IChjdXJyZW50bHkgaHAzMDAgb25seSkKKyoqCisqKiAoYykgMTk5OCBQaGlsIEJsdW5kZWxsIDxwaGlsYkBnbnUub3JnPgorKioKKyoqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisqKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorKiogZm9yIG1vcmUgZGV0YWlscy4KKyoqCisqLworCisjaWZuZGVmIF9NNjhLX0JMSU5LRU5fSAorI2RlZmluZSBfTTY4S19CTElOS0VOX0gKKworI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCisjZGVmaW5lIEhQMzAwX0xFRFMJCTB4ZjAwMWZmZmYKKworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgbGVkc3RhdGU7CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgYmxpbmtlbl9sZWRzKGludCBvbiwgaW50IG9mZikKK3sKKwlpZiAoTUFDSF9JU19IUDMwMCkKKwl7CisJCWxlZHN0YXRlIHw9IG9uOworCQlsZWRzdGF0ZSAmPSB+b2ZmOworCQlvdXRfOChIUDMwMF9MRURTLCB+bGVkc3RhdGUpOworCX0KK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL2Jvb3RpbmZvLmggYi9pbmNsdWRlL2FzbS1tNjhrL2Jvb3RpbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI4YTA2YgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvYm9vdGluZm8uaApAQCAtMCwwICsxLDM3OCBAQAorLyoKKyoqIGFzbS9ib290aW5mby5oIC0tIERlZmluaXRpb24gb2YgdGhlIExpbnV4L202OGsgYm9vdCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUKKyoqCisqKiBDb3B5cmlnaHQgMTk5MiBieSBHcmVnIEhhcnAKKyoqCisqKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworKiogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyoqIGZvciBtb3JlIGRldGFpbHMuCisqKgorKiogQ3JlYXRlZCAwOS8yOS85MiBieSBHcmVnIEhhcnAKKyoqCisqKiA1LzIvOTQgUm9tYW4gSG9kZWs6CisqKiAgIEFkZGVkIGJpX2F0YXJpIHBhcnQgb2YgdGhlIG1hY2hpbmUgZGVwZW5kZW50IHVuaW9uIGJpX3VuOyBmb3Igbm93IGl0CisqKiAgIGNvbnRhaW5zIGp1c3QgYSBtb2RlbCBmaWVsZCB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIFRUIGFuZCBGYWxjb24uCisqKiAyNi83Lzk2IFJvbWFuIFppcHBlbDoKKyoqICAgUmVuYW1lZCB0byBzZXR1cC5oOyBhZGRlZCBzb21lIHVzZWZ1bCBtYWNyb3MgdG8gYWxsb3cgZ2NjIHNvbWUKKyoqICAgb3B0aW1pemF0aW9ucyBpZiBwb3NzaWJsZS4KKyoqIDUvMTAvOTYgR2VlcnQgVXl0dGVyaG9ldmVuOgorKiogICBSZWRlc2lnbiBvZiB0aGUgYm9vdCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmU7IHJlbmFtZWQgdG8gYm9vdGluZm8uaCBhZ2FpbgorKiogMjcvMTEvOTYgR2VlcnQgVXl0dGVyaG9ldmVuOgorKiogICBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIGJvb3RpbmZvIGludGVyZmFjZSB2ZXJzaW9uIDEuMAorKi8KKworI2lmbmRlZiBfTTY4S19CT09USU5GT19ICisjZGVmaW5lIF9NNjhLX0JPT1RJTkZPX0gKKworCisgICAgLyoKKyAgICAgKiAgQm9vdGluZm8gZGVmaW5pdGlvbnMKKyAgICAgKgorICAgICAqICBUaGlzIGlzIGFuIGVhc2lseSBwYXJzYWJsZSBhbmQgZXh0ZW5kYWJsZSBzdHJ1Y3R1cmUgY29udGFpbmluZyBhbGwKKyAgICAgKiAgaW5mb3JtYXRpb24gdG8gYmUgcGFzc2VkIGZyb20gdGhlIGJvb3RzdHJhcCB0byB0aGUga2VybmVsLgorICAgICAqCisgICAgICogIFRoaXMgd2F5IEkgaG9wZSB0byBrZWVwIGFsbCBmdXR1cmUgY2hhbmdlcyBiYWNrL2ZvcmV3YXJkcyBjb21wYXRpYmxlLgorICAgICAqICBUaHVzLCBrZWVwIHlvdXIgZmluZ2VycyBjcm9zc2VkLi4uCisgICAgICoKKyAgICAgKiAgVGhpcyBzdHJ1Y3R1cmUgaXMgY29waWVkIHJpZ2h0IGFmdGVyIHRoZSBrZXJuZWwgYnNzIGJ5IHRoZSBib290c3RyYXAKKyAgICAgKiAgcm91dGluZS4KKyAgICAgKi8KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworc3RydWN0IGJpX3JlY29yZCB7CisgICAgdW5zaWduZWQgc2hvcnQgdGFnOwkJCS8qIHRhZyBJRCAqLworICAgIHVuc2lnbmVkIHNob3J0IHNpemU7CQkvKiBzaXplIG9mIHJlY29yZCAoaW4gYnl0ZXMpICovCisgICAgdW5zaWduZWQgbG9uZyBkYXRhWzBdOwkJLyogZGF0YSAqLworfTsKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisKKyAgICAvKgorICAgICAqICBUYWcgRGVmaW5pdGlvbnMKKyAgICAgKgorICAgICAqICBNYWNoaW5lIGluZGVwZW5kZW50IHRhZ3Mgc3RhcnQgY291bnRpbmcgZnJvbSAweDAwMDAKKyAgICAgKiAgTWFjaGluZSBkZXBlbmRlbnQgdGFncyBzdGFydCBjb3VudGluZyBmcm9tIDB4ODAwMAorICAgICAqLworCisjZGVmaW5lIEJJX0xBU1QJCQkweDAwMDAJLyogbGFzdCByZWNvcmQgKHNlbnRpbmVsKSAqLworI2RlZmluZSBCSV9NQUNIVFlQRQkJMHgwMDAxCS8qIG1hY2hpbmUgdHlwZSAodV9sb25nKSAqLworI2RlZmluZSBCSV9DUFVUWVBFCQkweDAwMDIJLyogY3B1IHR5cGUgKHVfbG9uZykgKi8KKyNkZWZpbmUgQklfRlBVVFlQRQkJMHgwMDAzCS8qIGZwdSB0eXBlICh1X2xvbmcpICovCisjZGVmaW5lIEJJX01NVVRZUEUJCTB4MDAwNAkvKiBtbXUgdHlwZSAodV9sb25nKSAqLworI2RlZmluZSBCSV9NRU1DSFVOSwkJMHgwMDA1CS8qIG1lbW9yeSBjaHVuayBhZGRyZXNzIGFuZCBzaXplICovCisJCQkJCS8qIChzdHJ1Y3QgbWVtX2luZm8pICovCisjZGVmaW5lIEJJX1JBTURJU0sJCTB4MDAwNgkvKiByYW1kaXNrIGFkZHJlc3MgYW5kIHNpemUgKi8KKwkJCQkJLyogKHN0cnVjdCBtZW1faW5mbykgKi8KKyNkZWZpbmUgQklfQ09NTUFORF9MSU5FCQkweDAwMDcJLyoga2VybmVsIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzICovCisJCQkJCS8qIChzdHJpbmcpICovCisKKyAgICAvKgorICAgICAqICBBbWlnYS1zcGVjaWZpYyB0YWdzCisgICAgICovCisKKyNkZWZpbmUgQklfQU1JR0FfTU9ERUwJCTB4ODAwMAkvKiBtb2RlbCAodV9sb25nKSAqLworI2RlZmluZSBCSV9BTUlHQV9BVVRPQ09OCTB4ODAwMQkvKiBBdXRvQ29uZmlnIGRldmljZSAqLworCQkJCQkvKiAoc3RydWN0IENvbmZpZ0RldikgKi8KKyNkZWZpbmUgQklfQU1JR0FfQ0hJUF9TSVpFCTB4ODAwMgkvKiBzaXplIG9mIENoaXAgUkFNICh1X2xvbmcpICovCisjZGVmaW5lIEJJX0FNSUdBX1ZCTEFOSwkJMHg4MDAzCS8qIFZCTEFOSyBmcmVxdWVuY3kgKHVfY2hhcikgKi8KKyNkZWZpbmUgQklfQU1JR0FfUFNGUkVRCQkweDgwMDQJLyogcG93ZXIgc3VwcGx5IGZyZXF1ZW5jeSAodV9jaGFyKSAqLworI2RlZmluZSBCSV9BTUlHQV9FQ0xPQ0sJCTB4ODAwNQkvKiBFQ2xvY2sgZnJlcXVlbmN5ICh1X2xvbmcpICovCisjZGVmaW5lIEJJX0FNSUdBX0NISVBTRVQJMHg4MDA2CS8qIG5hdGl2ZSBjaGlwc2V0IHByZXNlbnQgKHVfbG9uZykgKi8KKyNkZWZpbmUgQklfQU1JR0FfU0VSUEVSCQkweDgwMDcJLyogc2VyaWFsIHBvcnQgcGVyaW9kICh1X3Nob3J0KSAqLworCisgICAgLyoKKyAgICAgKiAgQXRhcmktc3BlY2lmaWMgdGFncworICAgICAqLworCisjZGVmaW5lIEJJX0FUQVJJX01DSF9DT09LSUUJMHg4MDAwCS8qIF9NQ0ggY29va2llIGZyb20gVE9TICh1X2xvbmcpICovCisjZGVmaW5lIEJJX0FUQVJJX01DSF9UWVBFCTB4ODAwMQkvKiBzcGVjaWFsIG1hY2hpbmUgdHlwZSAodV9sb25nKSAqLworCQkJCQkvKiAodmFsdWVzIGFyZSBBVEFSSV9NQUNIXyogZGVmaW5lcyAqLworCisvKiBtY2hfY29va2llIHZhbHVlcyAodXBwZXIgd29yZCkgKi8KKyNkZWZpbmUgQVRBUklfTUNIX1NUCQkwCisjZGVmaW5lIEFUQVJJX01DSF9TVEUJCTEKKyNkZWZpbmUgQVRBUklfTUNIX1RUCQkyCisjZGVmaW5lIEFUQVJJX01DSF9GQUxDT04JMworCisvKiBtY2hfdHlwZSB2YWx1ZXMgKi8KKyNkZWZpbmUgQVRBUklfTUFDSF9OT1JNQUwJMAkvKiBubyBzcGVjaWFsIG1hY2hpbmUgdHlwZSAqLworI2RlZmluZSBBVEFSSV9NQUNIX01FRFVTQQkxCS8qIE1lZHVzYSAwNDAgKi8KKyNkZWZpbmUgQVRBUklfTUFDSF9IQURFUwkyCS8qIEhhZGVzIDA0MCBvciAwNjAgKi8KKyNkZWZpbmUgQVRBUklfTUFDSF9BQjQwCQkzCS8qIEFmdGVyYnVybmVyMDQwIG9uIEZhbGNvbiAqLworCisgICAgLyoKKyAgICAgKiAgVk1FLXNwZWNpZmljIHRhZ3MKKyAgICAgKi8KKworI2RlZmluZSBCSV9WTUVfVFlQRQkJMHg4MDAwCS8qIFZNRSBzdWItYXJjaGl0ZWN0dXJlICh1X2xvbmcpICovCisjZGVmaW5lIEJJX1ZNRV9CUkRJTkZPCQkweDgwMDEJLyogVk1FIGJvYXJkIGluZm9ybWF0aW9uIChzdHJ1Y3QpICovCisKKy8qIEJJX1ZNRV9UWVBFIGNvZGVzICovCisjZGVmaW5lCVZNRV9UWVBFX1RQMzRWCQkweDAwMzQJLyogVGFkcG9sZSBUUDM0ViAqLworI2RlZmluZSBWTUVfVFlQRV9NVk1FMTQ3CTB4MDE0NwkvKiBNb3Rvcm9sYSBNVk1FMTQ3ICovCisjZGVmaW5lIFZNRV9UWVBFX01WTUUxNjIJMHgwMTYyCS8qIE1vdG9yb2xhIE1WTUUxNjIgKi8KKyNkZWZpbmUgVk1FX1RZUEVfTVZNRTE2NgkweDAxNjYJLyogTW90b3JvbGEgTVZNRTE2NiAqLworI2RlZmluZSBWTUVfVFlQRV9NVk1FMTY3CTB4MDE2NwkvKiBNb3Rvcm9sYSBNVk1FMTY3ICovCisjZGVmaW5lIFZNRV9UWVBFX01WTUUxNzIJMHgwMTcyCS8qIE1vdG9yb2xhIE1WTUUxNzIgKi8KKyNkZWZpbmUgVk1FX1RZUEVfTVZNRTE3NwkweDAxNzcJLyogTW90b3JvbGEgTVZNRTE3NyAqLworI2RlZmluZSBWTUVfVFlQRV9CVk1FNDAwMAkweDQwMDAJLyogQlZNIEx0ZC4gQlZNRTQwMDAgKi8KKyNkZWZpbmUgVk1FX1RZUEVfQlZNRTYwMDAJMHg2MDAwCS8qIEJWTSBMdGQuIEJWTUU2MDAwICovCisKKy8qIEJJX1ZNRV9CUkRJTkZPIGlzIGEgMzIgYnl0ZSBzdHJ1Y3QgYXMgcmV0dXJuZWQgYnkgdGhlIEJ1ZyBjb2RlIG9uCisgKiBNb3Rvcm9sYSBWTUUgYm9hcmRzLiAgQ29udGFpbnMgYm9hcmQgbnVtYmVyLCBCdWcgdmVyc2lvbiwgYm9hcmQKKyAqIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgZXRjLiAgU2VlIGluY2x1ZGUvYXNtL212bWUxNnhody5oIGZvciBkZXRhaWxzLgorICovCisKKworICAgIC8qCisgICAgICogIE1hY2ludG9zaC1zcGVjaWZpYyB0YWdzIChhbGwgdV9sb25nKQorICAgICAqLworCisjZGVmaW5lIEJJX01BQ19NT0RFTAkJMHg4MDAwCS8qIE1hYyBHZXN0YWx0IElEIChtb2RlbCB0eXBlKSAqLworI2RlZmluZSBCSV9NQUNfVkFERFIJCTB4ODAwMQkvKiBNYWMgdmlkZW8gYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIEJJX01BQ19WREVQVEgJCTB4ODAwMgkvKiBNYWMgdmlkZW8gZGVwdGggKi8KKyNkZWZpbmUgQklfTUFDX1ZST1cJCTB4ODAwMwkvKiBNYWMgdmlkZW8gcm93Ynl0ZXMgKi8KKyNkZWZpbmUgQklfTUFDX1ZESU0JCTB4ODAwNAkvKiBNYWMgdmlkZW8gZGltZW5zaW9ucyAqLworI2RlZmluZSBCSV9NQUNfVkxPR0lDQUwJCTB4ODAwNQkvKiBNYWMgdmlkZW8gbG9naWNhbCBiYXNlICovCisjZGVmaW5lIEJJX01BQ19TQ0NCQVNFCQkweDgwMDYJLyogTWFjIFNDQyBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgQklfTUFDX0JUSU1FCQkweDgwMDcJLyogTWFjIGJvb3QgdGltZSAqLworI2RlZmluZSBCSV9NQUNfR01UQklBUwkJMHg4MDA4CS8qIE1hYyBHTVQgdGltZXpvbmUgb2Zmc2V0ICovCisjZGVmaW5lIEJJX01BQ19NRU1TSVpFCQkweDgwMDkJLyogTWFjIFJBTSBzaXplIChzYW5pdHkgY2hlY2spICovCisjZGVmaW5lIEJJX01BQ19DUFVJRAkJMHg4MDBhCS8qIE1hYyBDUFUgdHlwZSAoc2FuaXR5IGNoZWNrKSAqLworI2RlZmluZSBCSV9NQUNfUk9NQkFTRQkJMHg4MDBiCS8qIE1hYyBzeXN0ZW0gUk9NIGJhc2UgYWRkcmVzcyAqLworCisgICAgLyoKKyAgICAgKiAgTWFjaW50b3NoIGhhcmR3YXJlIHByb2ZpbGUgZGF0YSAtIHVudXNlZCwgc2VlIG1hY2ludG9zaC5oIGZvcgorICAgICAqICByZXNvbmFibGUgdHlwZSB2YWx1ZXMKKyAgICAgKi8KKworI2RlZmluZSBCSV9NQUNfVklBMUJBU0UJCTB4ODAxMAkvKiBNYWMgVklBMSBiYXNlIGFkZHJlc3MgKGFsd2F5cyBwcmVzZW50KSAqLworI2RlZmluZSBCSV9NQUNfVklBMkJBU0UJCTB4ODAxMQkvKiBNYWMgVklBMiBiYXNlIGFkZHJlc3MgKHR5cGUgdmFyaWVzKSAqLworI2RlZmluZSBCSV9NQUNfVklBMlRZUEUJCTB4ODAxMgkvKiBNYWMgVklBMiB0eXBlIChWSUEsIFJCViwgT1NTKSAqLworI2RlZmluZSBCSV9NQUNfQURCVFlQRQkJMHg4MDEzCS8qIE1hYyBBREIgaW50ZXJmYWNlIHR5cGUgKi8KKyNkZWZpbmUgQklfTUFDX0FTQ0JBU0UJCTB4ODAxNAkvKiBNYWMgQXBwbGUgU291bmQgQ2hpcCBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgQklfTUFDX1NDU0k1MzgwCQkweDgwMTUJLyogTWFjIE5DUiA1MzgwIFNDU0kgKGJhc2UgYWRkcmVzcywgbXVsdGkpICovCisjZGVmaW5lIEJJX01BQ19TQ1NJRE1BCQkweDgwMTYJLyogTWFjIFNDU0kgRE1BIChiYXNlIGFkZHJlc3MpICovCisjZGVmaW5lIEJJX01BQ19TQ1NJNTM5NgkJMHg4MDE3CS8qIE1hYyBOQ1IgNTNDOTYgU0NTSSAoYmFzZSBhZGRyZXNzLCBtdWx0aSkgKi8KKyNkZWZpbmUgQklfTUFDX0lERVRZUEUJCTB4ODAxOAkvKiBNYWMgSURFIGludGVyZmFjZSB0eXBlICovCisjZGVmaW5lIEJJX01BQ19JREVCQVNFCQkweDgwMTkJLyogTWFjIElERSBpbnRlcmZhY2UgYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIEJJX01BQ19OVUJVUwkJMHg4MDFhCS8qIE1hYyBOdWJ1cyB0eXBlIChub25lLCByZWd1bGFyLCBwc2V1ZG8pICovCisjZGVmaW5lIEJJX01BQ19TTE9UTUFTSwkJMHg4MDFiCS8qIE1hYyBOdWJ1cyBzbG90cyBwcmVzZW50ICovCisjZGVmaW5lIEJJX01BQ19TQ0NUWVBFCQkweDgwMWMJLyogTWFjIFNDQyBzZXJpYWwgdHlwZSAobm9ybWFsLCBJT1ApICovCisjZGVmaW5lIEJJX01BQ19FVEhUWVBFCQkweDgwMWQJLyogTWFjIGJ1aWx0aW4gZXRoZXJuZXQgdHlwZSAoU29uaWMsIE1BQ0UgKi8KKyNkZWZpbmUgQklfTUFDX0VUSEJBU0UJCTB4ODAxZQkvKiBNYWMgYnVpbHRpbiBldGhlcm5ldCBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgQklfTUFDX1BNVQkJMHg4MDFmCS8qIE1hYyBwb3dlciBtYW5hZ2VtZW50IC8gcG93ZXJvZmYgaGFyZHdhcmUgKi8KKyNkZWZpbmUgQklfTUFDX0lPUF9TV0lNCQkweDgwMjAJLyogTWFjIFNXSU0gZmxvcHB5IElPUCAqLworI2RlZmluZSBCSV9NQUNfSU9QX0FEQgkJMHg4MDIxCS8qIE1hYyBBREIgSU9QICovCisKKyAgICAvKgorICAgICAqIE1hYzogY29tcGF0aWJpbGl0eSB3aXRoIG9sZCBib290ZXIgZGF0YSBmb3JtYXQgKHRlbXBvcmFyaWx5KQorICAgICAqIEZpZWxkcyB1bnVzZWQgd2l0aCB0aGUgbmV3IGJvb3RpbmZvIGNhbiBiZSBkZWxldGVkIG5vdzsgaW5zdGVhZCBvZgorICAgICAqIGFkZGluZyBuZXcgZmllbGRzIHRoZSBzdHJ1Y3QgbWlnaHQgYmUgc3BsaXR0ZWQgaW50byBhIGhhcmR3YXJlIGFkZHJlc3MKKyAgICAgKiBwYXJ0IGFuZCBhIGhhcmR3YXJlIHR5cGUgcGFydAorICAgICAqLworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCitzdHJ1Y3QgbWFjX2Jvb3Rlcl9kYXRhCit7CisJdW5zaWduZWQgbG9uZyB2aWRlb2FkZHI7CisJdW5zaWduZWQgbG9uZyB2aWRlb3JvdzsKKwl1bnNpZ25lZCBsb25nIHZpZGVvZGVwdGg7CisJdW5zaWduZWQgbG9uZyBkaW1lbnNpb25zOworCXVuc2lnbmVkIGxvbmcgYXJnczsKKwl1bnNpZ25lZCBsb25nIGJvb3R0aW1lOworCXVuc2lnbmVkIGxvbmcgZ210YmlhczsKKwl1bnNpZ25lZCBsb25nIGJvb3R2ZXI7CisJdW5zaWduZWQgbG9uZyB2aWRlb2xvZ2ljYWw7CisJdW5zaWduZWQgbG9uZyBzY2NiYXNlOworCXVuc2lnbmVkIGxvbmcgaWQ7CisJdW5zaWduZWQgbG9uZyBtZW1zaXplOworCXVuc2lnbmVkIGxvbmcgc2VyaWFsbWY7CisJdW5zaWduZWQgbG9uZyBzZXJpYWxoc2s7CisJdW5zaWduZWQgbG9uZyBzZXJpYWxncGk7CisJdW5zaWduZWQgbG9uZyBwcmludG1mOworCXVuc2lnbmVkIGxvbmcgcHJpbnRoc2s7CisJdW5zaWduZWQgbG9uZyBwcmludGdwaTsKKwl1bnNpZ25lZCBsb25nIGNwdWlkOworCXVuc2lnbmVkIGxvbmcgcm9tYmFzZTsKKwl1bnNpZ25lZCBsb25nIGFkYmRlbGF5OworCXVuc2lnbmVkIGxvbmcgdGltZWRicmE7Cit9OworCitleHRlcm4gc3RydWN0IG1hY19ib290ZXJfZGF0YQorCW1hY19iaV9kYXRhOworCisjZW5kaWYKKworICAgIC8qCisgICAgICogIEFwb2xsby1zcGVjaWZpYyB0YWdzCisgICAgICovCisKKyNkZWZpbmUgQklfQVBPTExPX01PREVMICAgICAgICAgMHg4MDAwICAvKiBtb2RlbCAodV9sb25nKSAqLworCisgICAgLyoKKyAgICAgKiAgSFAzMDAtc3BlY2lmaWMgdGFncworICAgICAqLworCisjZGVmaW5lIEJJX0hQMzAwX01PREVMCQkweDgwMDAJLyogbW9kZWwgKHVfbG9uZykgKi8KKyNkZWZpbmUgQklfSFAzMDBfVUFSVF9TQ09ERQkweDgwMDEJLyogVUFSVCBzZWxlY3QgY29kZSAodV9sb25nKSAqLworI2RlZmluZSBCSV9IUDMwMF9VQVJUX0FERFIJMHg4MDAyCS8qIHBoeXMuIGFkZHIgb2YgVUFSVCAodV9sb25nKSAqLworCisgICAgLyoKKyAgICAgKiBTdHVmZiBmb3IgYm9vdGluZm8gaW50ZXJmYWNlIHZlcnNpb25pbmcKKyAgICAgKgorICAgICAqIEF0IHRoZSBzdGFydCBvZiBrZXJuZWwgY29kZSwgYSAnc3RydWN0IGJvb3R2ZXJzaW9uJyBpcyBsb2NhdGVkLgorICAgICAqIGJvb3RzdHJhcCBjaGVja3MgZm9yIGEgbWF0Y2hpbmcgdmVyc2lvbiBvZiB0aGUgaW50ZXJmYWNlIGJlZm9yZSBib290aW5nCisgICAgICogYSBrZXJuZWwsIHRvIGF2b2lkIHVzZXIgY29uZnVzaW9uIGlmIGtlcm5lbCBhbmQgYm9vdHN0cmFwIGRvbid0IHdvcmsKKyAgICAgKiB0b2dldGhlciA6LSkKKyAgICAgKgorICAgICAqIElmIGluY29tcGF0aWJsZSBjaGFuZ2VzIGFyZSBtYWRlIHRvIHRoZSBib290aW5mbyBpbnRlcmZhY2UsIHRoZSBtYWpvcgorICAgICAqIG51bWJlciBiZWxvdyBzaG91bGQgYmUgc3RlcHBlZCAoYW5kIHRoZSBtaW5vciByZXNldCB0byAwKSBmb3IgdGhlCisgICAgICogYXBwcm9wcmlhdGUgbWFjaGluZS4gSWYgYSBjaGFuZ2UgaXMgYmFja3dhcmQtY29tcGF0aWJsZSwgdGhlIG1pbm9yCisgICAgICogc2hvdWxkIGJlIHN0ZXBwZWQuICJCYWNrd2FyZHMtY29tcGF0aWJsZSIgbWVhbnMgdGhhdCBib290aW5nIHdpbGwgd29yaywKKyAgICAgKiBidXQgY2VydGFpbiBmZWF0dXJlcyBtYXkgbm90LgorICAgICAqLworCisjZGVmaW5lIEJPT1RJTkZPVl9NQUdJQwkJCTB4NDI0OTU2MUEJLyogJ0JJVl5aJyAqLworI2RlZmluZSBNS19CSV9WRVJTSU9OKG1ham9yLG1pbm9yKQkoKChtYWpvcik8PDE2KSsobWlub3IpKQorI2RlZmluZSBCSV9WRVJTSU9OX01BSk9SKHYpCQkoKCh2KSA+PiAxNikgJiAweGZmZmYpCisjZGVmaW5lIEJJX1ZFUlNJT05fTUlOT1IodikJCSgodikgJiAweGZmZmYpCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK3N0cnVjdCBib290dmVyc2lvbiB7CisgICAgdW5zaWduZWQgc2hvcnQgYnJhbmNoOworICAgIHVuc2lnbmVkIGxvbmcgbWFnaWM7CisgICAgc3RydWN0IHsKKwl1bnNpZ25lZCBsb25nIG1hY2h0eXBlOworCXVuc2lnbmVkIGxvbmcgdmVyc2lvbjsKKyAgICB9IG1hY2h2ZXJzaW9uc1swXTsKK307CisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworI2RlZmluZSBBTUlHQV9CT09USV9WRVJTSU9OICAgIE1LX0JJX1ZFUlNJT04oIDIsIDAgKQorI2RlZmluZSBBVEFSSV9CT09USV9WRVJTSU9OICAgIE1LX0JJX1ZFUlNJT04oIDIsIDEgKQorI2RlZmluZSBNQUNfQk9PVElfVkVSU0lPTiAgICAgIE1LX0JJX1ZFUlNJT04oIDIsIDAgKQorI2RlZmluZSBNVk1FMTQ3X0JPT1RJX1ZFUlNJT04gIE1LX0JJX1ZFUlNJT04oIDIsIDAgKQorI2RlZmluZSBNVk1FMTZ4X0JPT1RJX1ZFUlNJT04gIE1LX0JJX1ZFUlNJT04oIDIsIDAgKQorI2RlZmluZSBCVk1FNjAwMF9CT09USV9WRVJTSU9OIE1LX0JJX1ZFUlNJT04oIDIsIDAgKQorI2RlZmluZSBRNDBfQk9PVElfVkVSU0lPTiAgICAgIE1LX0JJX1ZFUlNJT04oIDIsIDAgKQorI2RlZmluZSBIUDMwMF9CT09USV9WRVJTSU9OICAgIE1LX0JJX1ZFUlNJT04oIDIsIDAgKQorCisjaWZkZWYgQk9PVElORk9fQ09NUEFUXzFfMAorCisgICAgLyoKKyAgICAgKiAgQmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBib290aW5mbyBpbnRlcmZhY2UgdmVyc2lvbiAxLjAKKyAgICAgKi8KKworI2RlZmluZSBDT01QQVRfQU1JR0FfQk9PVElfVkVSU0lPTiAgICBNS19CSV9WRVJTSU9OKCAxLCAwICkKKyNkZWZpbmUgQ09NUEFUX0FUQVJJX0JPT1RJX1ZFUlNJT04gICAgTUtfQklfVkVSU0lPTiggMSwgMCApCisjZGVmaW5lIENPTVBBVF9NQUNfQk9PVElfVkVSU0lPTiAgICAgIE1LX0JJX1ZFUlNJT04oIDEsIDAgKQorCisjaW5jbHVkZSA8bGludXgvem9ycm8uaD4KKworI2RlZmluZSBDT01QQVRfTlVNX0FVVE8gICAgMTYKKworc3RydWN0IGNvbXBhdF9iaV9BbWlnYSB7CisgICAgaW50IG1vZGVsOworICAgIGludCBudW1fYXV0b2NvbjsKKyAgICBzdHJ1Y3QgQ29uZmlnRGV2IGF1dG9jb25bQ09NUEFUX05VTV9BVVRPXTsKKyAgICB1bnNpZ25lZCBsb25nIGNoaXBfc2l6ZTsKKyAgICB1bnNpZ25lZCBjaGFyIHZibGFuazsKKyAgICB1bnNpZ25lZCBjaGFyIHBzZnJlcTsKKyAgICB1bnNpZ25lZCBsb25nIGVjbG9jazsKKyAgICB1bnNpZ25lZCBsb25nIGNoaXBzZXQ7CisgICAgdW5zaWduZWQgbG9uZyBod19wcmVzZW50OworfTsKKworc3RydWN0IGNvbXBhdF9iaV9BdGFyaSB7CisgICAgdW5zaWduZWQgbG9uZyBod19wcmVzZW50OworICAgIHVuc2lnbmVkIGxvbmcgbWNoX2Nvb2tpZTsKK307CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK3N0cnVjdCBjb21wYXRfYmlfTWFjaW50b3NoCit7CisJdW5zaWduZWQgbG9uZyB2aWRlb2FkZHI7CisJdW5zaWduZWQgbG9uZyB2aWRlb3JvdzsKKwl1bnNpZ25lZCBsb25nIHZpZGVvZGVwdGg7CisJdW5zaWduZWQgbG9uZyBkaW1lbnNpb25zOworCXVuc2lnbmVkIGxvbmcgYXJnczsKKwl1bnNpZ25lZCBsb25nIGJvb3R0aW1lOworCXVuc2lnbmVkIGxvbmcgZ210YmlhczsKKwl1bnNpZ25lZCBsb25nIGJvb3R2ZXI7CisJdW5zaWduZWQgbG9uZyB2aWRlb2xvZ2ljYWw7CisJdW5zaWduZWQgbG9uZyBzY2NiYXNlOworCXVuc2lnbmVkIGxvbmcgaWQ7CisJdW5zaWduZWQgbG9uZyBtZW1zaXplOworCXVuc2lnbmVkIGxvbmcgc2VyaWFsbWY7CisJdW5zaWduZWQgbG9uZyBzZXJpYWxoc2s7CisJdW5zaWduZWQgbG9uZyBzZXJpYWxncGk7CisJdW5zaWduZWQgbG9uZyBwcmludG1mOworCXVuc2lnbmVkIGxvbmcgcHJpbnRoc2s7CisJdW5zaWduZWQgbG9uZyBwcmludGdwaTsKKwl1bnNpZ25lZCBsb25nIGNwdWlkOworCXVuc2lnbmVkIGxvbmcgcm9tYmFzZTsKKwl1bnNpZ25lZCBsb25nIGFkYmRlbGF5OworCXVuc2lnbmVkIGxvbmcgdGltZWRicmE7Cit9OworCisjZW5kaWYKKworc3RydWN0IGNvbXBhdF9tZW1faW5mbyB7CisgICAgdW5zaWduZWQgbG9uZyBhZGRyOworICAgIHVuc2lnbmVkIGxvbmcgc2l6ZTsKK307CisKKyNkZWZpbmUgQ09NUEFUX05VTV9NRU1JTkZPICA0CisKKyNkZWZpbmUgQ09NUEFUX0NQVUJfNjgwMjAgMAorI2RlZmluZSBDT01QQVRfQ1BVQl82ODAzMCAxCisjZGVmaW5lIENPTVBBVF9DUFVCXzY4MDQwIDIKKyNkZWZpbmUgQ09NUEFUX0NQVUJfNjgwNjAgMworI2RlZmluZSBDT01QQVRfRlBVQl82ODg4MSA1CisjZGVmaW5lIENPTVBBVF9GUFVCXzY4ODgyIDYKKyNkZWZpbmUgQ09NUEFUX0ZQVUJfNjgwNDAgNworI2RlZmluZSBDT01QQVRfRlBVQl82ODA2MCA4CisKKyNkZWZpbmUgQ09NUEFUX0NQVV82ODAyMCAgICAoMTw8Q09NUEFUX0NQVUJfNjgwMjApCisjZGVmaW5lIENPTVBBVF9DUFVfNjgwMzAgICAgKDE8PENPTVBBVF9DUFVCXzY4MDMwKQorI2RlZmluZSBDT01QQVRfQ1BVXzY4MDQwICAgICgxPDxDT01QQVRfQ1BVQl82ODA0MCkKKyNkZWZpbmUgQ09NUEFUX0NQVV82ODA2MCAgICAoMTw8Q09NUEFUX0NQVUJfNjgwNjApCisjZGVmaW5lIENPTVBBVF9DUFVfTUFTSyAgICAgKDMxKQorI2RlZmluZSBDT01QQVRfRlBVXzY4ODgxICAgICgxPDxDT01QQVRfRlBVQl82ODg4MSkKKyNkZWZpbmUgQ09NUEFUX0ZQVV82ODg4MiAgICAoMTw8Q09NUEFUX0ZQVUJfNjg4ODIpCisjZGVmaW5lIENPTVBBVF9GUFVfNjgwNDAgICAgKDE8PENPTVBBVF9GUFVCXzY4MDQwKQorI2RlZmluZSBDT01QQVRfRlBVXzY4MDYwICAgICgxPDxDT01QQVRfRlBVQl82ODA2MCkKKyNkZWZpbmUgQ09NUEFUX0ZQVV9NQVNLICAgICAoMHhmZTApCisKKyNkZWZpbmUgQ09NUEFUX0NMX1NJWkUgICAgICAoMjU2KQorCitzdHJ1Y3QgY29tcGF0X2Jvb3RpbmZvIHsKKyAgICB1bnNpZ25lZCBsb25nIG1hY2h0eXBlOworICAgIHVuc2lnbmVkIGxvbmcgY3B1dHlwZTsKKyAgICBzdHJ1Y3QgY29tcGF0X21lbV9pbmZvIG1lbW9yeVtDT01QQVRfTlVNX01FTUlORk9dOworICAgIGludCBudW1fbWVtb3J5OworICAgIHVuc2lnbmVkIGxvbmcgcmFtZGlza19zaXplOworICAgIHVuc2lnbmVkIGxvbmcgcmFtZGlza19hZGRyOworICAgIGNoYXIgY29tbWFuZF9saW5lW0NPTVBBVF9DTF9TSVpFXTsKKyAgICB1bmlvbiB7CisJc3RydWN0IGNvbXBhdF9iaV9BbWlnYSAgICAgYmlfYW1pOworCXN0cnVjdCBjb21wYXRfYmlfQXRhcmkgICAgIGJpX2F0YTsKKwlzdHJ1Y3QgY29tcGF0X2JpX01hY2ludG9zaCBiaV9tYWM7CisgICAgfSBiaV91bjsKK307CisKKyNkZWZpbmUgYmlfYW1pZ2EJYmlfdW4uYmlfYW1pCisjZGVmaW5lIGJpX2F0YXJpCWJpX3VuLmJpX2F0YQorI2RlZmluZSBiaV9tYWMJCWJpX3VuLmJpX21hYworCisjZW5kaWYgLyogQk9PVElORk9fQ09NUEFUXzFfMCAqLworCisKKyNlbmRpZiAvKiBfTTY4S19CT09USU5GT19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL2J1Zy5oIGIvaW5jbHVkZS9hc20tbTY4ay9idWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTFkMjI2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9idWcuaApAQCAtMCwwICsxLDI3IEBACisjaWZuZGVmIF9NNjhLX0JVR19ICisjZGVmaW5lIF9NNjhLX0JVR19ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2lmZGVmIENPTkZJR19ERUJVR19CVUdWRVJCT1NFCisjaWZuZGVmIENPTkZJR19TVU4zCisjZGVmaW5lIEJVRygpIGRvIHsgXAorCXByaW50aygia2VybmVsIEJVRyBhdCAlczolZCFcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyk7IFwKKwlhc20gdm9sYXRpbGUoImlsbGVnYWwiKTsgXAorfSB3aGlsZSAoMCkKKyNlbHNlCisjZGVmaW5lIEJVRygpIGRvIHsgXAorCXByaW50aygia2VybmVsIEJVRyBhdCAlczolZCFcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyk7IFwKKwlwYW5pYygiQlVHISIpOyBcCit9IHdoaWxlICgwKQorI2VuZGlmCisjZWxzZQorI2RlZmluZSBCVUcoKSBkbyB7IFwKKwlhc20gdm9sYXRpbGUoImlsbGVnYWwiKTsgXAorfSB3aGlsZSAoMCkKKyNlbmRpZgorCisjZGVmaW5lIEhBVkVfQVJDSF9CVUcKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9idWcuaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL2J1Z3MuaCBiL2luY2x1ZGUvYXNtLW02OGsvYnVncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwMTkzNTUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2J1Z3MuaApAQCAtMCwwICsxLDE0IEBACisvKgorICogIGluY2x1ZGUvYXNtLW02OGsvYnVncy5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NCAgTGludXMgVG9ydmFsZHMKKyAqLworCisvKgorICogVGhpcyBpcyBpbmNsdWRlZCBieSBpbml0L21haW4uYyB0byBjaGVjayBmb3IgYXJjaGl0ZWN0dXJlLWRlcGVuZGVudCBidWdzLgorICoKKyAqIE5lZWRzOgorICoJdm9pZCBjaGVja19idWdzKHZvaWQpOworICovCisKK2V4dGVybiB2b2lkIGNoZWNrX2J1Z3Modm9pZCk7CS8qIGluIGFyY2gvbTY4ay9rZXJuZWwvc2V0dXAuYyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9idm1lNjAwMGh3LmggYi9pbmNsdWRlL2FzbS1tNjhrL2J2bWU2MDAwaHcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGE4NTliCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9idm1lNjAwMGh3LmgKQEAgLTAsMCArMSwxNTAgQEAKKyNpZm5kZWYgX002OEtfQlZNRTYwMDBIV19IXworI2RlZmluZSBfTTY4S19CVk1FNjAwMEhXX0hfCisKKyNpbmNsdWRlIDxhc20vaXJxLmg+CisKKy8qCisgKiBQSVQgc3RydWN0dXJlCisgKi8KKworI2RlZmluZSBCVk1FX1BJVF9CQVNFCTB4ZmZhMDAwMDAKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGNoYXIKKwlwYWRfYVszXSwgcGdjciwKKwlwYWRfYlszXSwgcHNyciwKKwlwYWRfY1szXSwgcGFkZHIsCisJcGFkX2RbM10sIHBiZGRyLAorCXBhZF9lWzNdLCBwY2RkciwKKwlwYWRfZlszXSwgcGl2ciwKKwlwYWRfZ1szXSwgcGFjciwKKwlwYWRfaFszXSwgcGJjciwKKwlwYWRfaVszXSwgcGFkciwKKwlwYWRfalszXSwgcGJkciwKKwlwYWRfa1szXSwgcGFhciwKKwlwYWRfbFszXSwgcGJhciwKKwlwYWRfbVszXSwgcGNkciwKKwlwYWRfblszXSwgcHNyLAorCXBhZF9vWzNdLCByZXMxLAorCXBhZF9wWzNdLCByZXMyLAorCXBhZF9xWzNdLCB0Y3IsCisJcGFkX3JbM10sIHRpdnIsCisJcGFkX3NbM10sIHJlczMsCisJcGFkX3RbM10sIGNwcmgsCisJcGFkX3VbM10sIGNwcm0sCisJcGFkX3ZbM10sIGNwcmwsCisJcGFkX3dbM10sIHJlczQsCisJcGFkX3hbM10sIGNyaCwKKwlwYWRfeVszXSwgY3JtLAorCXBhZF96WzNdLCBjcmwsCisJcGFkX0FbM10sIHRzciwKKwlwYWRfQlszXSwgcmVzNTsKK30gUGl0UmVnc190LCAqUGl0UmVnc1B0cjsKKworI2RlZmluZSBidm1lcGl0ICAgKCgqKHZvbGF0aWxlIFBpdFJlZ3NQdHIpKEJWTUVfUElUX0JBU0UpKSkKKworI2RlZmluZSBCVk1FX1JUQ19CQVNFCTB4ZmY5MDAwMDAKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGNoYXIKKwlwYWRfYVszXSwgbXNyLAorCXBhZF9iWzNdLCB0MGNyX3J0bXIsCisJcGFkX2NbM10sIHQxY3Jfb21yLAorCXBhZF9kWzNdLCBwZnJfaWNyMCwKKwlwYWRfZVszXSwgaXJyX2ljcjEsCisJcGFkX2ZbM10sIGJjZF90ZW5tcywKKwlwYWRfZ1szXSwgYmNkX3NlYywKKwlwYWRfaFszXSwgYmNkX21pbiwKKwlwYWRfaVszXSwgYmNkX2hyLAorCXBhZF9qWzNdLCBiY2RfZG9tLAorCXBhZF9rWzNdLCBiY2RfbXRoLAorCXBhZF9sWzNdLCBiY2RfeWVhciwKKwlwYWRfbVszXSwgYmNkX3VqY2MsCisJcGFkX25bM10sIGJjZF9oamNjLAorCXBhZF9vWzNdLCBiY2RfZG93LAorCXBhZF9wWzNdLCB0MGxzYiwKKwlwYWRfcVszXSwgdDBtc2IsCisJcGFkX3JbM10sIHQxbHNiLAorCXBhZF9zWzNdLCB0MW1zYiwKKwlwYWRfdFszXSwgY21wX3NlYywKKwlwYWRfdVszXSwgY21wX21pbiwKKwlwYWRfdlszXSwgY21wX2hyLAorCXBhZF93WzNdLCBjbXBfZG9tLAorCXBhZF94WzNdLCBjbXBfbXRoLAorCXBhZF95WzNdLCBjbXBfZG93LAorCXBhZF96WzNdLCBzYXZfc2VjLAorCXBhZF9BWzNdLCBzYXZfbWluLAorCXBhZF9CWzNdLCBzYXZfaHIsCisJcGFkX0NbM10sIHNhdl9kb20sCisJcGFkX0RbM10sIHNhdl9tdGgsCisJcGFkX0VbM10sIHJhbSwKKwlwYWRfRlszXSwgdGVzdDsKK30gUnRjUmVnc190LCAqUnRjUHRyX3Q7CisKKworI2RlZmluZSBCVk1FX0k1OTZfQkFTRQkweGZmMTAwMDAwCisKKyNkZWZpbmUgQlZNRV9FVEhJUlFfUkVHCTB4ZmYyMDAwMGIKKworI2RlZmluZSBCVk1FX0xPQ0FMX0lSUV9TVEFUICAweGZmMjAwMDBmCisKKyNkZWZpbmUgQlZNRV9FVEhFUlIgICAgICAgICAgMHgwMgorI2RlZmluZSBCVk1FX0FCT1JUX1NUQVRVUyAgICAweDA4CisKKyNkZWZpbmUgQlZNRV9OQ1I1M0M3MTBfQkFTRQkweGZmMDAwMDAwCisKKyNkZWZpbmUgQlZNRV9TQ0NfQV9BRERSCTB4ZmZiMDAwMGIKKyNkZWZpbmUgQlZNRV9TQ0NfQl9BRERSCTB4ZmZiMDAwMDMKKyNkZWZpbmUgQlZNRV9TQ0NfUlR4Qwk3MzcyODAwCisKKyNkZWZpbmUgQlZNRV9DT05GSUdfUkVHCTB4ZmY1MDAwMDMKKworI2RlZmluZSBjb25maWdfcmVnX3B0cgkodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKUJWTUVfQ09ORklHX1JFRworCisjZGVmaW5lIEJWTUVfQ09ORklHX1NXMQkweDA4CisjZGVmaW5lIEJWTUVfQ09ORklHX1NXMgkweDA0CisjZGVmaW5lIEJWTUVfQ09ORklHX1NXMwkweDAyCisjZGVmaW5lIEJWTUVfQ09ORklHX1NXNAkweDAxCisKKworI2RlZmluZSBCVk1FX0lSUV9UWVBFX1BSSU8JMAorCisjZGVmaW5lIEJWTUVfSVJRX1BSTgkJMHg1NAorI2RlZmluZSBCVk1FX0lSUV9JNTk2CQkweDFhCisjZGVmaW5lIEJWTUVfSVJRX1NDU0kJCTB4MWIKKyNkZWZpbmUgQlZNRV9JUlFfVElNRVIJCTB4NTkKKyNkZWZpbmUgQlZNRV9JUlFfUlRDCQkweDFlCisjZGVmaW5lIEJWTUVfSVJRX0FCT1JUCQkweDFmCisKKy8qIFNDQyBpbnRlcnJ1cHRzICovCisjZGVmaW5lIEJWTUVfSVJRX1NDQ19CQVNFCQkweDQwCisjZGVmaW5lIEJWTUVfSVJRX1NDQ0JfVFgJCTB4NDAKKyNkZWZpbmUgQlZNRV9JUlFfU0NDQl9TVEFUCQkweDQyCisjZGVmaW5lIEJWTUVfSVJRX1NDQ0JfUlgJCTB4NDQKKyNkZWZpbmUgQlZNRV9JUlFfU0NDQl9TUENPTkQJCTB4NDYKKyNkZWZpbmUgQlZNRV9JUlFfU0NDQV9UWAkJMHg0OAorI2RlZmluZSBCVk1FX0lSUV9TQ0NBX1NUQVQJCTB4NGEKKyNkZWZpbmUgQlZNRV9JUlFfU0NDQV9SWAkJMHg0YworI2RlZmluZSBCVk1FX0lSUV9TQ0NBX1NQQ09ORAkJMHg0ZQorCisvKiBBZGRyZXNzIGNvbnRyb2wgcmVnaXN0ZXJzICovCisKKyNkZWZpbmUgQlZNRV9BQ1JfQTMyVkJBCQkweGZmNDAwMDAzCisjZGVmaW5lIEJWTUVfQUNSX0EzMk1TSwkJMHhmZjQxMDAwMworI2RlZmluZSBCVk1FX0FDUl9BMjRWQkEJCTB4ZmY0MjAwMDMKKyNkZWZpbmUgQlZNRV9BQ1JfQTI0TVNLCQkweGZmNDMwMDAzCisjZGVmaW5lIEJWTUVfQUNSX0ExNlZCQQkJMHhmZjQ0MDAwMworI2RlZmluZSBCVk1FX0FDUl9BMzJMQkEJCTB4ZmY0NTAwMDMKKyNkZWZpbmUgQlZNRV9BQ1JfQTI0TEJBCQkweGZmNDYwMDAzCisjZGVmaW5lIEJWTUVfQUNSX0FERFJDVEwJMHhmZjQ3MDAwMworCisjZGVmaW5lIGJ2bWVfYWNyX2EzMnZiYQkJKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopQlZNRV9BQ1JfQTMyVkJBCisjZGVmaW5lIGJ2bWVfYWNyX2EzMm1zawkJKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopQlZNRV9BQ1JfQTMyTVNLCisjZGVmaW5lIGJ2bWVfYWNyX2EyNHZiYQkJKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopQlZNRV9BQ1JfQTI0VkJBCisjZGVmaW5lIGJ2bWVfYWNyX2EyNG1zawkJKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopQlZNRV9BQ1JfQTI0TVNLCisjZGVmaW5lIGJ2bWVfYWNyX2ExNnZiYQkJKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopQlZNRV9BQ1JfQTE2VkJBCisjZGVmaW5lIGJ2bWVfYWNyX2EzMmxiYQkJKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopQlZNRV9BQ1JfQTMyTEJBCisjZGVmaW5lIGJ2bWVfYWNyX2EyNGxiYQkJKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopQlZNRV9BQ1JfQTI0TEJBCisjZGVmaW5lIGJ2bWVfYWNyX2FkZHJjdGwJKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopQlZNRV9BQ1JfQUREUkNUTAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvYnl0ZW9yZGVyLmggYi9pbmNsdWRlL2FzbS1tNjhrL2J5dGVvcmRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxZDQyMGIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2J5dGVvcmRlci5oCkBAIC0wLDAgKzEsMjUgQEAKKyNpZm5kZWYgX002OEtfQllURU9SREVSX0gKKyNkZWZpbmUgX002OEtfQllURU9SREVSX0gKKworI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisKKyNpZmRlZiBfX0dOVUNfXworCitzdGF0aWMgX19pbmxpbmVfXyBfX2F0dHJpYnV0ZV9jb25zdF9fIF9fdTMyIF9fX2FyY2hfX3N3YWIzMihfX3UzMiB2YWwpCit7CisJX19hc21fXygicm9sdyAjOCwlMDsgc3dhcCAlMDsgcm9sdyAjOCwlMCIgOiAiPWQiICh2YWwpIDogIjAiICh2YWwpKTsKKwlyZXR1cm4gdmFsOworfQorI2RlZmluZSBfX2FyY2hfX3N3YWIzMih4KSBfX19hcmNoX19zd2FiMzIoeCkKKworI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAhZGVmaW5lZChfX1NUUklDVF9BTlNJX18pIHx8IGRlZmluZWQoX19LRVJORUxfXykKKyMgIGRlZmluZSBfX0JZVEVPUkRFUl9IQVNfVTY0X18KKyMgIGRlZmluZSBfX1NXQUJfNjRfVEhSVV8zMl9fCisjZW5kaWYKKworI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9iaWdfZW5kaWFuLmg+CisKKyNlbmRpZiAvKiBfTTY4S19CWVRFT1JERVJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9jYWNoZS5oIGIvaW5jbHVkZS9hc20tbTY4ay9jYWNoZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxNjFmZDMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2NhY2hlLmgKQEAgLTAsMCArMSwxMyBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLW02OGsvY2FjaGUuaAorICovCisjaWZuZGVmIF9fQVJDSF9NNjhLX0NBQ0hFX0gKKyNkZWZpbmUgX19BUkNIX002OEtfQ0FDSEVfSAorCisvKiBieXRlcyBwZXIgTDEgY2FjaGUgbGluZSAqLworI2RlZmluZSAgICAgICAgTDFfQ0FDSEVfU0hJRlQgIDQKKyNkZWZpbmUgICAgICAgIEwxX0NBQ0hFX0JZVEVTICAoMTw8IEwxX0NBQ0hFX1NISUZUKQorCisjZGVmaW5lIEwxX0NBQ0hFX1NISUZUX01BWCA0CS8qIGxhcmdlc3QgTDEgd2hpY2ggdGhpcyBhcmNoIHN1cHBvcnRzICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9jYWNoZWN0bC5oIGIvaW5jbHVkZS9hc20tbTY4ay9jYWNoZWN0bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyNTk3OGUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2NhY2hlY3RsLmgKQEAgLTAsMCArMSwxNCBAQAorI2lmbmRlZiBfTTY4S19DQUNIRUNUTF9ICisjZGVmaW5lIF9NNjhLX0NBQ0hFQ1RMX0gKKworLyogRGVmaW5pdGlvbnMgZm9yIHRoZSBjYWNoZWZsdXNoIHN5c3RlbSBjYWxsLiAgKi8KKworI2RlZmluZSBGTFVTSF9TQ09QRV9MSU5FICAgIDEJLyogRmx1c2ggYSBjYWNoZSBsaW5lICovCisjZGVmaW5lIEZMVVNIX1NDT1BFX1BBR0UgICAgMgkvKiBGbHVzaCBhIHBhZ2UgKi8KKyNkZWZpbmUgRkxVU0hfU0NPUEVfQUxMICAgICAzCS8qIEZsdXNoIHRoZSB3aG9sZSBjYWNoZSAtLSBzdXBlcnVzZXIgb25seSAqLworCisjZGVmaW5lIEZMVVNIX0NBQ0hFX0RBVEEgICAgMQkvKiBXcml0ZWJhY2sgYW5kIGZsdXNoIGRhdGEgY2FjaGUgKi8KKyNkZWZpbmUgRkxVU0hfQ0FDSEVfSU5TTiAgICAyCS8qIEZsdXNoIGluc3RydWN0aW9uIGNhY2hlICovCisjZGVmaW5lIEZMVVNIX0NBQ0hFX0JPVEggICAgMwkvKiBGbHVzaCBib3RoIGNhY2hlcyAqLworCisjZW5kaWYgLyogX002OEtfQ0FDSEVDVExfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9jYWNoZWZsdXNoLmggYi9pbmNsdWRlL2FzbS1tNjhrL2NhY2hlZmx1c2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDc3Mzk0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9jYWNoZWZsdXNoLmgKQEAgLTAsMCArMSwxNDkgQEAKKyNpZm5kZWYgX002OEtfQ0FDSEVGTFVTSF9ICisjZGVmaW5lIF9NNjhLX0NBQ0hFRkxVU0hfSAorCisjaW5jbHVkZSA8bGludXgvbW0uaD4KKworLyoKKyAqIENhY2hlIGhhbmRsaW5nIGZ1bmN0aW9ucworICovCisKKyNkZWZpbmUgZmx1c2hfaWNhY2hlKCkJCQkJCQlcCisoewkJCQkJCQkJXAorCWlmIChDUFVfSVNfMDQwX09SXzA2MCkJCQkJCVwKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oIm5vcFxuXHQiCQkJXAorCQkJCSAgICAgIi5jaGlwIDY4MDQwXG5cdCIJCVwKKwkJCQkgICAgICJjaW52YSAlJWljXG5cdCIJCVwKKwkJCQkgICAgICIuY2hpcCA2OGsiIDogKTsJCVwKKwllbHNlIHsJCQkJCQkJXAorCQl1bnNpZ25lZCBsb25nIF90bXA7CQkJCVwKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oIm1vdmVjICUlY2FjciwlMFxuXHQiCVwKKwkJCQkgICAgICJvcncgJTEsJTBcblx0IgkJXAorCQkJCSAgICAgIm1vdmVjICUwLCUlY2FjciIJCVwKKwkJCQkgICAgIDogIj0mZCIgKF90bXApCQlcCisJCQkJICAgICA6ICJpZCIgKEZMVVNIX0kpKTsJXAorCX0JCQkJCQkJXAorfSkKKworLyoKKyAqIGludmFsaWRhdGUgdGhlIGNhY2hlIGZvciB0aGUgc3BlY2lmaWVkIG1lbW9yeSByYW5nZS4KKyAqIEl0IHN0YXJ0cyBhdCB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGVjaWZpZWQgZm9yCisgKiB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGJ5dGVzLgorICovCitleHRlcm4gdm9pZCBjYWNoZV9jbGVhcih1bnNpZ25lZCBsb25nIHBhZGRyLCBpbnQgbGVuKTsKKy8qCisgKiBwdXNoIGFueSBkaXJ0eSBjYWNoZSBpbiB0aGUgc3BlY2lmaWVkIG1lbW9yeSByYW5nZS4KKyAqIEl0IHN0YXJ0cyBhdCB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGVjaWZpZWQgZm9yCisgKiB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGJ5dGVzLgorICovCitleHRlcm4gdm9pZCBjYWNoZV9wdXNoKHVuc2lnbmVkIGxvbmcgcGFkZHIsIGludCBsZW4pOworCisvKgorICogcHVzaCBhbmQgaW52YWxpZGF0ZSBwYWdlcyBpbiB0aGUgc3BlY2lmaWVkIHVzZXIgdmlydHVhbAorICogbWVtb3J5IHJhbmdlLgorICovCitleHRlcm4gdm9pZCBjYWNoZV9wdXNoX3YodW5zaWduZWQgbG9uZyB2YWRkciwgaW50IGxlbik7CisKKy8qIGNhY2hlIGNvZGUgKi8KKyNkZWZpbmUgRkxVU0hfSV9BTkRfRAkoMHgwMDAwMDgwOCkKKyNkZWZpbmUgRkxVU0hfSQkJKDB4MDAwMDAwMDgpCisKKy8qIFRoaXMgaXMgbmVlZGVkIHdoZW5ldmVyIHRoZSB2aXJ0dWFsIG1hcHBpbmcgb2YgdGhlIGN1cnJlbnQKKyAgIHByb2Nlc3MgY2hhbmdlcy4gICovCisjZGVmaW5lIF9fZmx1c2hfY2FjaGVfYWxsKCkJCQkJCVwKKyh7CQkJCQkJCQlcCisJaWYgKENQVV9JU18wNDBfT1JfMDYwKQkJCQkJXAorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygibm9wXG5cdCIJCQlcCisJCQkJICAgICAiLmNoaXAgNjgwNDBcblx0IgkJXAorCQkJCSAgICAgImNwdXNoYSAlZGNcblx0IgkJXAorCQkJCSAgICAgIi5jaGlwIDY4ayIpOwkJXAorCWVsc2UgewkJCQkJCQlcCisJCXVuc2lnbmVkIGxvbmcgX3RtcDsJCQkJXAorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygibW92ZWMgJSVjYWNyLCUwXG5cdCIJXAorCQkJCSAgICAgIm9ydyAlMSwlMFxuXHQiCQlcCisJCQkJICAgICAibW92ZWMgJTAsJSVjYWNyIgkJXAorCQkJCSAgICAgOiAiPSZkIiAoX3RtcCkJCVwKKwkJCQkgICAgIDogImRpIiAoRkxVU0hfSV9BTkRfRCkpOwlcCisJfQkJCQkJCQlcCit9KQorCisjZGVmaW5lIF9fZmx1c2hfY2FjaGVfMDMwKCkJCQkJCVwKKyh7CQkJCQkJCQlcCisJaWYgKENQVV9JU18wMjBfT1JfMDMwKSB7CQkJCVwKKwkJdW5zaWduZWQgbG9uZyBfdG1wOwkJCQlcCisJCV9fYXNtX18gX192b2xhdGlsZV9fKCJtb3ZlYyAlJWNhY3IsJTBcblx0IglcCisJCQkJICAgICAib3J3ICUxLCUwXG5cdCIJCVwKKwkJCQkgICAgICJtb3ZlYyAlMCwlJWNhY3IiCQlcCisJCQkJICAgICA6ICI9JmQiIChfdG1wKQkJXAorCQkJCSAgICAgOiAiZGkiIChGTFVTSF9JX0FORF9EKSk7CVwKKwl9CQkJCQkJCVwKK30pCisKKyNkZWZpbmUgZmx1c2hfY2FjaGVfYWxsKCkgX19mbHVzaF9jYWNoZV9hbGwoKQorCisjZGVmaW5lIGZsdXNoX2NhY2hlX3ZtYXAoc3RhcnQsIGVuZCkJCWZsdXNoX2NhY2hlX2FsbCgpCisjZGVmaW5lIGZsdXNoX2NhY2hlX3Z1bm1hcChzdGFydCwgZW5kKQkJZmx1c2hfY2FjaGVfYWxsKCkKKworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2NhY2hlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCWlmIChtbSA9PSBjdXJyZW50LT5tbSkKKwkJX19mbHVzaF9jYWNoZV8wMzAoKTsKK30KKworLyogZmx1c2hfY2FjaGVfcmFuZ2UvZmx1c2hfY2FjaGVfcGFnZSBtdXN0IGJlIG1hY3JvcyB0byBhdm9pZAorICAgYSBkZXBlbmRlbmN5IG9uIGxpbnV4L21tLmgsIHdoaWNoIGluY2x1ZGVzIHRoaXMgZmlsZS4uLiAqLworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2NhY2hlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJCSAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCWlmICh2bWEtPnZtX21tID09IGN1cnJlbnQtPm1tKQorCSAgICAgICAgX19mbHVzaF9jYWNoZV8wMzAoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2NhY2hlX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgdm1hZGRyLCB1bnNpZ25lZCBsb25nIHBmbikKK3sKKwlpZiAodm1hLT52bV9tbSA9PSBjdXJyZW50LT5tbSkKKwkgICAgICAgIF9fZmx1c2hfY2FjaGVfMDMwKCk7Cit9CisKKworLyogUHVzaCB0aGUgcGFnZSBhdCBrZXJuZWwgdmlydHVhbCBhZGRyZXNzIGFuZCBjbGVhciB0aGUgaWNhY2hlICovCisvKiBSWjogdXNlIGNwdXNoICViYyBpbnN0ZWFkIG9mIGNwdXNoICVkYywgY2ludiAlaWMgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2ZsdXNoX3BhZ2VfdG9fcmFtKHZvaWQgKnZhZGRyKQoreworCWlmIChDUFVfSVNfMDQwX09SXzA2MCkgeworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygibm9wXG5cdCIKKwkJCQkgICAgICIuY2hpcCA2ODA0MFxuXHQiCisJCQkJICAgICAiY3B1c2hwICUlYmMsKCUwKVxuXHQiCisJCQkJICAgICAiLmNoaXAgNjhrIgorCQkJCSAgICAgOiA6ICJhIiAoX19wYSh2YWRkcikpKTsKKwl9IGVsc2UgeworCQl1bnNpZ25lZCBsb25nIF90bXA7CisJCV9fYXNtX18gX192b2xhdGlsZV9fKCJtb3ZlYyAlJWNhY3IsJTBcblx0IgorCQkJCSAgICAgIm9ydyAlMSwlMFxuXHQiCisJCQkJICAgICAibW92ZWMgJTAsJSVjYWNyIgorCQkJCSAgICAgOiAiPSZkIiAoX3RtcCkKKwkJCQkgICAgIDogImRpIiAoRkxVU0hfSSkpOworCX0KK30KKworI2RlZmluZSBmbHVzaF9kY2FjaGVfcGFnZShwYWdlKQkJX19mbHVzaF9wYWdlX3RvX3JhbShwYWdlX2FkZHJlc3MocGFnZSkpCisjZGVmaW5lIGZsdXNoX2RjYWNoZV9tbWFwX2xvY2sobWFwcGluZykJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfZGNhY2hlX21tYXBfdW5sb2NrKG1hcHBpbmcpCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfaWNhY2hlX3BhZ2Uodm1hLCBwYWdlKQlfX2ZsdXNoX3BhZ2VfdG9fcmFtKHBhZ2VfYWRkcmVzcyhwYWdlKSkKKyNkZWZpbmUgZmx1c2hfaWNhY2hlX3VzZXJfcmFuZ2Uodm1hLHBnLGFkcixsZW4pCWRvIHsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBjb3B5X3RvX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIHZhZGRyLCBkc3QsIHNyYywgbGVuKSBcCisJZG8gewkJCQkJCQlcCisJCWZsdXNoX2NhY2hlX3BhZ2Uodm1hLCB2YWRkciwgcGFnZV90b19wZm4ocGFnZSkpO1wKKwkJbWVtY3B5KGRzdCwgc3JjLCBsZW4pOwkJCQlcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBjb3B5X2Zyb21fdXNlcl9wYWdlKHZtYSwgcGFnZSwgdmFkZHIsIGRzdCwgc3JjLCBsZW4pIFwKKwlkbyB7CQkJCQkJCVwKKwkJZmx1c2hfY2FjaGVfcGFnZSh2bWEsIHZhZGRyLCBwYWdlX3RvX3BmbihwYWdlKSk7XAorCQltZW1jcHkoZHN0LCBzcmMsIGxlbik7CQkJCVwKKwl9IHdoaWxlICgwKQorCitleHRlcm4gdm9pZCBmbHVzaF9pY2FjaGVfcmFuZ2UodW5zaWduZWQgbG9uZyBhZGRyZXNzLCB1bnNpZ25lZCBsb25nIGVuZGFkZHIpOworCisjZW5kaWYgLyogX002OEtfQ0FDSEVGTFVTSF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL2NoZWNrc3VtLmggYi9pbmNsdWRlL2FzbS1tNjhrL2NoZWNrc3VtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg4NjBjMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvY2hlY2tzdW0uaApAQCAtMCwwICsxLDE1MCBAQAorI2lmbmRlZiBfTTY4S19DSEVDS1NVTV9ICisjZGVmaW5lIF9NNjhLX0NIRUNLU1VNX0gKKworI2luY2x1ZGUgPGxpbnV4L2luNi5oPgorCisvKgorICogY29tcHV0ZXMgdGhlIGNoZWNrc3VtIG9mIGEgbWVtb3J5IGJsb2NrIGF0IGJ1ZmYsIGxlbmd0aCBsZW4sCisgKiBhbmQgYWRkcyBpbiAic3VtIiAoMzItYml0KQorICoKKyAqIHJldHVybnMgYSAzMi1iaXQgbnVtYmVyIHN1aXRhYmxlIGZvciBmZWVkaW5nIGludG8gaXRzZWxmCisgKiBvciBjc3VtX3RjcHVkcF9tYWdpYworICoKKyAqIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aCBldmVuIGxlbmd0aHMsIGV4Y2VwdAorICogZm9yIHRoZSBsYXN0IGZyYWdtZW50LCB3aGljaCBtYXkgYmUgb2RkCisgKgorICogaXQncyBiZXN0IHRvIGhhdmUgYnVmZiBhbGlnbmVkIG9uIGEgMzItYml0IGJvdW5kYXJ5CisgKi8KK3Vuc2lnbmVkIGludCBjc3VtX3BhcnRpYWwoY29uc3QgdW5zaWduZWQgY2hhciAqIGJ1ZmYsIGludCBsZW4sIHVuc2lnbmVkIGludCBzdW0pOworCisvKgorICogdGhlIHNhbWUgYXMgY3N1bV9wYXJ0aWFsLCBidXQgY29waWVzIGZyb20gc3JjIHdoaWxlIGl0CisgKiBjaGVja3N1bXMKKyAqCisgKiBoZXJlIGV2ZW4gbW9yZSBpbXBvcnRhbnQgdG8gYWxpZ24gc3JjIGFuZCBkc3Qgb24gYSAzMi1iaXQgKG9yIGV2ZW4KKyAqIGJldHRlciA2NC1iaXQpIGJvdW5kYXJ5CisgKi8KKworZXh0ZXJuIHVuc2lnbmVkIGludCBjc3VtX3BhcnRpYWxfY29weV9mcm9tX3VzZXIoY29uc3QgdW5zaWduZWQgY2hhciAqc3JjLAorCQkJCQkJdW5zaWduZWQgY2hhciAqZHN0LAorCQkJCQkJaW50IGxlbiwgaW50IHN1bSwKKwkJCQkJCWludCAqY3N1bV9lcnIpOworCitleHRlcm4gdW5zaWduZWQgaW50IGNzdW1fcGFydGlhbF9jb3B5X25vY2hlY2soY29uc3QgdW5zaWduZWQgY2hhciAqc3JjLAorCQkJCQkgICAgICB1bnNpZ25lZCBjaGFyICpkc3QsIGludCBsZW4sCisJCQkJCSAgICAgIGludCBzdW0pOworCisvKgorICoJVGhpcyBpcyBhIHZlcnNpb24gb2YgaXBfY29tcHV0ZV9jc3VtKCkgb3B0aW1pemVkIGZvciBJUCBoZWFkZXJzLAorICoJd2hpY2ggYWx3YXlzIGNoZWNrc3VtIG9uIDQgb2N0ZXQgYm91bmRhcmllcy4KKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQKK2lwX2Zhc3RfY3N1bSh1bnNpZ25lZCBjaGFyICppcGgsIHVuc2lnbmVkIGludCBpaGwpCit7CisJdW5zaWduZWQgaW50IHN1bSA9IDA7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlfX2FzbV9fICgic3VicXcgIzEsJTJcbiIKKwkJICIxOlx0IgorCQkgIm1vdmVsICUxQCssJTNcblx0IgorCQkgImFkZHhsICUzLCUwXG5cdCIKKwkJICJkYnJhICAlMiwxYlxuXHQiCisJCSAibW92ZWwgJTAsJTNcblx0IgorCQkgInN3YXAgICUzXG5cdCIKKwkJICJhZGR4dyAlMywlMFxuXHQiCisJCSAiY2xydyAgJTNcblx0IgorCQkgImFkZHh3ICUzLCUwXG5cdCIKKwkJIDogIj1kIiAoc3VtKSwgIj0mYSIgKGlwaCksICI9JmQiIChpaGwpLCAiPSZkIiAodG1wKQorCQkgOiAiMCIgKHN1bSksICIxIiAoaXBoKSwgIjIiIChpaGwpCisJCSA6ICJtZW1vcnkiKTsKKwlyZXR1cm4gfnN1bTsKK30KKworLyoKKyAqCUZvbGQgYSBwYXJ0aWFsIGNoZWNrc3VtCisgKi8KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3N1bV9mb2xkKHVuc2lnbmVkIGludCBzdW0pCit7CisJdW5zaWduZWQgaW50IHRtcCA9IHN1bTsKKwlfX2FzbV9fKCJzd2FwICUxXG5cdCIKKwkJImFkZHcgJTEsICUwXG5cdCIKKwkJImNscncgJTFcblx0IgorCQkiYWRkeHcgJTEsICUwIgorCQk6ICI9JmQiIChzdW0pLCAiPSZkIiAodG1wKQorCQk6ICIwIiAoc3VtKSwgIjEiICh0bXApKTsKKwlyZXR1cm4gfnN1bTsKK30KKworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAorY3N1bV90Y3B1ZHBfbm9mb2xkKHVuc2lnbmVkIGxvbmcgc2FkZHIsIHVuc2lnbmVkIGxvbmcgZGFkZHIsIHVuc2lnbmVkIHNob3J0IGxlbiwKKwkJICB1bnNpZ25lZCBzaG9ydCBwcm90bywgdW5zaWduZWQgaW50IHN1bSkKK3sKKwlfX2FzbV9fICgiYWRkbCAgJTIsJTBcblx0IgorCQkgImFkZHhsICUzLCUwXG5cdCIKKwkJICJhZGR4bCAlNCwlMFxuXHQiCisJCSAiY2xybCAlMVxuXHQiCisJCSAiYWRkeGwgJTEsJTAiCisJCSA6ICI9JmQiIChzdW0pLCAiPWQiIChzYWRkcikKKwkJIDogImciIChkYWRkciksICIxIiAoc2FkZHIpLCAiZCIgKGxlbiArIHByb3RvKSwKKwkJICAgIjAiIChzdW0pKTsKKwlyZXR1cm4gc3VtOworfQorCisKKy8qCisgKiBjb21wdXRlcyB0aGUgY2hlY2tzdW0gb2YgdGhlIFRDUC9VRFAgcHNldWRvLWhlYWRlcgorICogcmV0dXJucyBhIDE2LWJpdCBjaGVja3N1bSwgYWxyZWFkeSBjb21wbGVtZW50ZWQKKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBpbnQKK2NzdW1fdGNwdWRwX21hZ2ljKHVuc2lnbmVkIGxvbmcgc2FkZHIsIHVuc2lnbmVkIGxvbmcgZGFkZHIsIHVuc2lnbmVkIHNob3J0IGxlbiwKKwkJICB1bnNpZ25lZCBzaG9ydCBwcm90bywgdW5zaWduZWQgaW50IHN1bSkKK3sKKwlyZXR1cm4gY3N1bV9mb2xkKGNzdW1fdGNwdWRwX25vZm9sZChzYWRkcixkYWRkcixsZW4scHJvdG8sc3VtKSk7Cit9CisKKy8qCisgKiB0aGlzIHJvdXRpbmUgaXMgdXNlZCBmb3IgbWlzY2VsbGFuZW91cyBJUC1saWtlIGNoZWNrc3VtcywgbWFpbmx5CisgKiBpbiBpY21wLmMKKyAqLworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0CitpcF9jb21wdXRlX2NzdW0odW5zaWduZWQgY2hhciAqIGJ1ZmYsIGludCBsZW4pCit7CisJcmV0dXJuIGNzdW1fZm9sZCAoY3N1bV9wYXJ0aWFsKGJ1ZmYsIGxlbiwgMCkpOworfQorCisjZGVmaW5lIF9IQVZFX0FSQ0hfSVBWNl9DU1VNCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBzaG9ydCBpbnQKK2NzdW1faXB2Nl9tYWdpYyhzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAorCQlfX3UzMiBsZW4sIHVuc2lnbmVkIHNob3J0IHByb3RvLCB1bnNpZ25lZCBpbnQgc3VtKQoreworCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgdG1wOworCV9fYXNtX18oImFkZGwgJTJALCUwXG5cdCIKKwkJIm1vdmVsICUyQCg0KSwlMVxuXHQiCisJCSJhZGR4bCAlMSwlMFxuXHQiCisJCSJtb3ZlbCAlMkAoOCksJTFcblx0IgorCQkiYWRkeGwgJTEsJTBcblx0IgorCQkibW92ZWwgJTJAKDEyKSwlMVxuXHQiCisJCSJhZGR4bCAlMSwlMFxuXHQiCisJCSJtb3ZlbCAlM0AsJTFcblx0IgorCQkiYWRkeGwgJTEsJTBcblx0IgorCQkibW92ZWwgJTNAKDQpLCUxXG5cdCIKKwkJImFkZHhsICUxLCUwXG5cdCIKKwkJIm1vdmVsICUzQCg4KSwlMVxuXHQiCisJCSJhZGR4bCAlMSwlMFxuXHQiCisJCSJtb3ZlbCAlM0AoMTIpLCUxXG5cdCIKKwkJImFkZHhsICUxLCUwXG5cdCIKKwkJImFkZHhsICU0LCUwXG5cdCIKKwkJImNscmwgJTFcblx0IgorCQkiYWRkeGwgJTEsJTAiCisJCTogIj0mZCIgKHN1bSksICI9JmQiICh0bXApCisJCTogImEiIChzYWRkciksICJhIiAoZGFkZHIpLCAiZCIgKGxlbiArIHByb3RvKSwKKwkJICAiMCIgKHN1bSkpOworCisJcmV0dXJuIGNzdW1fZm9sZChzdW0pOworfQorCisjZW5kaWYgLyogX002OEtfQ0hFQ0tTVU1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9jb250cmVncy5oIGIvaW5jbHVkZS9hc20tbTY4ay9jb250cmVncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMjMzZTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2NvbnRyZWdzLmgKQEAgLTAsMCArMSw0IEBACisjaWZuZGVmIF9NNjhLX0NPTlRSRUdTX0gKKyNkZWZpbmUgX002OEtfQ09OVFJFR1NfSAorI2luY2x1ZGUgPGFzbS1zcGFyYy9jb250cmVncy5oPgorI2VuZGlmIC8qIF9NNjhLX0NPTlRSRUdTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvY3B1dGltZS5oIGIvaW5jbHVkZS9hc20tbTY4ay9jcHV0aW1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc5YzVlOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvY3B1dGltZS5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfX002OEtfQ1BVVElNRV9ICisjZGVmaW5lIF9fTTY4S19DUFVUSU1FX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2NwdXRpbWUuaD4KKworI2VuZGlmIC8qIF9fTTY4S19DUFVUSU1FX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvY3VycmVudC5oIGIvaW5jbHVkZS9hc20tbTY4ay9jdXJyZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRlOGY4YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvY3VycmVudC5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfTTY4S19DVVJSRU5UX0gKKyNkZWZpbmUgX002OEtfQ1VSUkVOVF9ICisKK3JlZ2lzdGVyIHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VycmVudCBfX2FzbV9fKCIlYTIiKTsKKworI2VuZGlmIC8qICEoX002OEtfQ1VSUkVOVF9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9kZWxheS5oIGIvaW5jbHVkZS9hc20tbTY4ay9kZWxheS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlZDkyODUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2RlbGF5LmgKQEAgLTAsMCArMSw1NyBAQAorI2lmbmRlZiBfTTY4S19ERUxBWV9ICisjZGVmaW5lIF9NNjhLX0RFTEFZX0gKKworI2luY2x1ZGUgPGFzbS9wYXJhbS5oPgorCisvKgorICogQ29weXJpZ2h0IChDKSAxOTk0IEhhbWlzaCBNYWNkb25hbGQKKyAqCisgKiBEZWxheSByb3V0aW5lcywgdXNpbmcgYSBwcmUtY29tcHV0ZWQgImxvb3BzX3Blcl9qaWZmeSIgdmFsdWUuCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkIF9fZGVsYXkodW5zaWduZWQgbG9uZyBsb29wcykKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIjE6IHN1YnFsICMxLCUwOyBqY2MgMWIiCisJCTogIj1kIiAobG9vcHMpIDogIjAiIChsb29wcykpOworfQorCitleHRlcm4gdm9pZCBfX2JhZF91ZGVsYXkodm9pZCk7CisKKy8qCisgKiBVc2Ugb25seSBmb3IgdmVyeSBzbWFsbCBkZWxheXMgKCA8IDEgbXNlYykuICBTaG91bGQgcHJvYmFibHkgdXNlIGEKKyAqIGxvb2t1cCB0YWJsZSwgcmVhbGx5LCBhcyB0aGUgbXVsdGlwbGljYXRpb25zIHRha2UgbXVjaCB0b28gbG9uZyB3aXRoCisgKiBzaG9ydCBkZWxheXMuICBUaGlzIGlzIGEgInJlYXNvbmFibGUiIGltcGxlbWVudGF0aW9uLCB0aG91Z2ggKGFuZCB0aGUKKyAqIGZpcnN0IGNvbnN0YW50IG11bHRpcGxpY2F0aW9ucyBnZXRzIG9wdGltaXplZCBhd2F5IGlmIHRoZSBkZWxheSBpcworICogYSBjb25zdGFudCkKKyAqLworc3RhdGljIGlubGluZSB2b2lkIF9fY29uc3RfdWRlbGF5KHVuc2lnbmVkIGxvbmcgeGxvb3BzKQoreworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJX19hc21fXyAoIm11bHVsICUyLCUwOiUxIgorCQk6ICI9ZCIgKHhsb29wcyksICI9ZCIgKHRtcCkKKwkJOiAiZCIgKHhsb29wcyksICIxIiAobG9vcHNfcGVyX2ppZmZ5KSk7CisJX19kZWxheSh4bG9vcHMgKiBIWik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3VkZWxheSh1bnNpZ25lZCBsb25nIHVzZWNzKQoreworCV9fY29uc3RfdWRlbGF5KHVzZWNzICogNDI5NSk7CS8qIDIqKjMyIC8gMTAwMDAwMCAqLworfQorCisjZGVmaW5lIHVkZWxheShuKSAoX19idWlsdGluX2NvbnN0YW50X3AobikgPyBcCisJKChuKSA+IDIwMDAwID8gX19iYWRfdWRlbGF5KCkgOiBfX2NvbnN0X3VkZWxheSgobikgKiA0Mjk1KSkgOiBcCisJX191ZGVsYXkobikpCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtdWxkaXYodW5zaWduZWQgbG9uZyBhLCB1bnNpZ25lZCBsb25nIGIsCisJCQkJICAgdW5zaWduZWQgbG9uZyBjKQoreworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJX19hc21fXyAoIm11bHVsICUyLCUwOiUxOyBkaXZ1bCAlMywlMDolMSIKKwkJOiAiPWQiICh0bXApLCAiPWQiIChhKQorCQk6ICJkIiAoYiksICJkIiAoYyksICIxIiAoYSkpOworCXJldHVybiBhOworfQorCisjZW5kaWYgLyogZGVmaW5lZChfTTY4S19ERUxBWV9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9kaXY2NC5oIGIvaW5jbHVkZS9hc20tbTY4ay9kaXY2NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmNjVkZTEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2RpdjY0LmgKQEAgLTAsMCArMSwyNiBAQAorI2lmbmRlZiBfTTY4S19ESVY2NF9ICisjZGVmaW5lIF9NNjhLX0RJVjY0X0gKKworLyogbiA9IG4gLyBiYXNlOyByZXR1cm4gcmVtOyAqLworCisjZGVmaW5lIGRvX2RpdihuLCBiYXNlKSAoewkJCQkJXAorCXVuaW9uIHsJCQkJCQkJXAorCQl1bnNpZ25lZCBsb25nIG4zMlsyXTsJCQkJXAorCQl1bnNpZ25lZCBsb25nIGxvbmcgbjY0OwkJCQlcCisJfSBfX247CQkJCQkJCVwKKwl1bnNpZ25lZCBsb25nIF9fcmVtLCBfX3VwcGVyOwkJCQlcCisJCQkJCQkJCVwKKwlfX24ubjY0ID0gKG4pOwkJCQkJCVwKKwlpZiAoKF9fdXBwZXIgPSBfX24ubjMyWzBdKSkgewkJCQlcCisJCWFzbSAoImRpdnVsLmwgJTIsJTE6JTAiCQkJCVwKKwkJCTogIj1kIiAoX19uLm4zMlswXSksICI9ZCIgKF9fdXBwZXIpCVwKKwkJCTogImQiIChiYXNlKSwgIjAiIChfX24ubjMyWzBdKSk7CVwKKwl9CQkJCQkJCVwKKwlhc20gKCJkaXZ1LmwgJTIsJTE6JTAiCQkJCQlcCisJCTogIj1kIiAoX19uLm4zMlsxXSksICI9ZCIgKF9fcmVtKQkJXAorCQk6ICJkIiAoYmFzZSksICIxIiAoX191cHBlciksICIwIiAoX19uLm4zMlsxXSkpOwlcCisJKG4pID0gX19uLm42NDsJCQkJCQlcCisJX19yZW07CQkJCQkJCVwKK30pCisKKyNlbmRpZiAvKiBfTTY4S19ESVY2NF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL2RtYS1tYXBwaW5nLmggYi9pbmNsdWRlL2FzbS1tNjhrL2RtYS1tYXBwaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE5MjBjNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvZG1hLW1hcHBpbmcuaApAQCAtMCwwICsxLDEyIEBACisjaWZuZGVmIF9NNjhLX0RNQV9NQVBQSU5HX0gKKyNkZWZpbmUgX002OEtfRE1BX01BUFBJTkdfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpZmRlZiBDT05GSUdfUENJCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZG1hLW1hcHBpbmcuaD4KKyNlbHNlCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZG1hLW1hcHBpbmctYnJva2VuLmg+CisjZW5kaWYKKworI2VuZGlmICAvKiBfTTY4S19ETUFfTUFQUElOR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL2RtYS5oIGIvaW5jbHVkZS9hc20tbTY4ay9kbWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTI2NmE4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9kbWEuaApAQCAtMCwwICsxLDIxIEBACisjaWZuZGVmIF9NNjhLX0RNQV9ICisjZGVmaW5lIF9NNjhLX0RNQV9IIDEKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisvKiBpdCdzIHVzZWxlc3Mgb24gdGhlIG02OGssIGJ1dCB1bmZvcnR1bmF0ZWx5IG5lZWRlZCBieSB0aGUgbmV3CisgICBib290bWVtIGFsbG9jYXRvciAoYnV0IHRoaXMgc2hvdWxkIGRvIGl0IGZvciB0aGlzKSAqLworI2RlZmluZSBNQVhfRE1BX0FERFJFU1MgUEFHRV9PRkZTRVQKKworI2RlZmluZSBNQVhfRE1BX0NIQU5ORUxTIDgKKworZXh0ZXJuIGludCByZXF1ZXN0X2RtYSh1bnNpZ25lZCBpbnQgZG1hbnIsIGNvbnN0IGNoYXIgKiBkZXZpY2VfaWQpOwkvKiByZXNlcnZlIGEgRE1BIGNoYW5uZWwgKi8KK2V4dGVybiB2b2lkIGZyZWVfZG1hKHVuc2lnbmVkIGludCBkbWFucik7CS8qIHJlbGVhc2UgaXQgYWdhaW4gKi8KKworI2lmZGVmIENPTkZJR19QQ0kKK2V4dGVybiBpbnQgaXNhX2RtYV9icmlkZ2VfYnVnZ3k7CisjZWxzZQorI2RlZmluZSBpc2FfZG1hX2JyaWRnZV9idWdneSAgICAoMCkKKyNlbmRpZgorCisjZW5kaWYgLyogX002OEtfRE1BX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvZHNwNTZrLmggYi9pbmNsdWRlL2FzbS1tNjhrL2RzcDU2ay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiM2RkMzMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2RzcDU2ay5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1tNjhrL2RzcDU2ay5oIC0gZGVmaW5lcyBhbmQgZGVjbGFyYXRpb25zIGZvcgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERTUDU2ayBkZXZpY2UgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk2LDE5OTcgRnJlZHJpayBOb3JpbmcsIGxhcnMgYnJpbmtob2ZmICYgVG9tYXMgQmVybmR0c3NvbgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisKKy8qIFVzZWQgZm9yIHVwbG9hZGluZyBEU1AgYmluYXJ5IGNvZGUgKi8KK3N0cnVjdCBkc3A1NmtfdXBsb2FkIHsKKwlpbnQgbGVuOworCWNoYXIgKmJpbjsKK307CisKKy8qIEZvciB0aGUgRFNQIGhvc3QgZmxhZ3MgKi8KK3N0cnVjdCBkc3A1NmtfaG9zdF9mbGFncyB7CisJaW50IGRpcjsgICAgIC8qIEJpdCBmaWVsZC4gMSA9IHdyaXRlIG91dHB1dCBiaXQsIDAgPSBkbyBub3RoaW5nLgorCQkgICAgICAqIDB4MDAwMCBtZWFucyByZWFkaW5nIG9ubHksIDB4MDAxMSBtZWFucworCQkgICAgICAqIHdyaXRpbmcgdGhlIGJpdHMgc3RvcmVkIGluIGBvdXQnIG9uIEhGMCBhbmQgSEYxLgorCQkgICAgICAqIE5vdGUgdGhhdCBIRjIgYW5kIEhGMyBjYW4gb25seSBiZSByZWFkLgorCQkgICAgICAqLworCWludCBvdXQ7ICAgICAvKiBCaXQgZmllbGQgbGlrZSBhYm92ZS4gKi8KKwlpbnQgc3RhdHVzOyAgLyogSG9zdCByZWdpc3RlcidzIGN1cnJlbnQgc3RhdGUgaXMgcmV0dXJuZWQgKi8KK307CisKKy8qIGlvY3RsIGNvbW1hbmQgY29kZXMgKi8KKyNkZWZpbmUgRFNQNTZLX1VQTE9BRAkgICAgICAgIDEgICAgLyogVXBsb2FkIERTUCBiaW5hcnkgcHJvZ3JhbSAgICAgICAqLworI2RlZmluZSBEU1A1NktfU0VUX1RYX1dTSVpFCTIgICAgLyogSG9zdCB0cmFuc21pdCB3b3JkIHNpemUgKDEtNCkgICAqLworI2RlZmluZSBEU1A1NktfU0VUX1JYX1dTSVpFCTMgICAgLyogSG9zdCByZWNlaXZlIHdvcmQgc2l6ZSAoMS00KSAgICAqLworI2RlZmluZSBEU1A1NktfSE9TVF9GTEFHUwk0ICAgIC8qIEhvc3QgZmxhZyByZWdpc3RlcnMgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRFNQNTZLX0hPU1RfQ01EICAgICAgICAgNSAgICAvKiBUcmlnIEhvc3QgQ29tbWFuZCAoMC0zMSkgICAgICAgICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL2R2bWEuaCBiL2luY2x1ZGUvYXNtLW02OGsvZHZtYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5NzhmODcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2R2bWEuaApAQCAtMCwwICsxLDI0MyBAQAorLyogJElkOiBkdm1hLmgsdiAxLjQgMTk5OS8wMy8yNyAyMDoyMzo0MSB0c2JvZ2VuZCBFeHAgJAorICogaW5jbHVkZS9hc20tbTY4ay9kbWEuaAorICoKKyAqIENvcHlyaWdodCAxOTk1IChDKSBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCisgKgorICogSGFja2VkIHRvIGZpdCBTdW4zeCBuZWVkcyBieSBUaG9tYXMgQm9nZW5kb2VyZmVyCisgKi8KKworI2lmbmRlZiBfX002OEtfRFZNQV9ICisjZGVmaW5lIF9fTTY4S19EVk1BX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjZGVmaW5lIERWTUFfUEFHRV9TSElGVAkxMworI2RlZmluZSBEVk1BX1BBR0VfU0laRQkoMVVMIDw8IERWTUFfUEFHRV9TSElGVCkKKyNkZWZpbmUgRFZNQV9QQUdFX01BU0sJKH4oRFZNQV9QQUdFX1NJWkUtMSkpCisjZGVmaW5lIERWTUFfUEFHRV9BTElHTihhZGRyKQkoKChhZGRyKStEVk1BX1BBR0VfU0laRS0xKSZEVk1BX1BBR0VfTUFTSykKKworZXh0ZXJuIHZvaWQgZHZtYV9pbml0KHZvaWQpOworZXh0ZXJuIGludCBkdm1hX21hcF9pb21tdSh1bnNpZ25lZCBsb25nIGthZGRyLCB1bnNpZ25lZCBsb25nIGJhZGRyLAorCQkJICBpbnQgbGVuKTsKKworI2RlZmluZSBkdm1hX21hbGxvYyh4KSBkdm1hX21hbGxvY19hbGlnbih4LCAwKQorI2RlZmluZSBkdm1hX21hcCh4LCB5KSBkdm1hX21hcF9hbGlnbih4LCB5LCAwKQorI2RlZmluZSBkdm1hX21hcF92bWUoeCwgeSkgKGR2bWFfbWFwKHgsIHkpICYgMHhmZmZmZikKKyNkZWZpbmUgZHZtYV9tYXBfYWxpZ25fdm1lKHgsIHksIHopIChkdm1hX21hcF9hbGlnbiAoeCwgeSwgeikgJiAweGZmZmZmKQorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZHZtYV9tYXBfYWxpZ24odW5zaWduZWQgbG9uZyBrYWRkciwgaW50IGxlbiwKKwkJCSAgICBpbnQgYWxpZ24pOworZXh0ZXJuIHZvaWQgKmR2bWFfbWFsbG9jX2FsaWduKHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIGFsaWduKTsKKworZXh0ZXJuIHZvaWQgZHZtYV91bm1hcCh2b2lkICpiYWRkcik7CitleHRlcm4gdm9pZCBkdm1hX2ZyZWUodm9pZCAqdmFkZHIpOworCisKKyNpZmRlZiBDT05GSUdfU1VOMworLyogc3VuMyBkdm1hIHBhZ2Ugc3VwcG9ydCAqLworCisvKiBtZW1vcnkgYW5kIHBtZWdzIHBvdGVudGlhbGx5IHJlc2VydmVkIGZvciBkdm1hICovCisjZGVmaW5lIERWTUFfUE1FR19TVEFSVCAxMAorI2RlZmluZSBEVk1BX1BNRUdfRU5EIDE2CisjZGVmaW5lIERWTUFfU1RBUlQgMHhmMDAwMDAKKyNkZWZpbmUgRFZNQV9FTkQgMHhmZTAwMDAKKyNkZWZpbmUgRFZNQV9TSVpFIChEVk1BX0VORC1EVk1BX1NUQVJUKQorI2RlZmluZSBJT01NVV9UT1RBTF9FTlRSSUVTIDEyOAorI2RlZmluZSBJT01NVV9FTlRSSUVTIDEyMAorCisvKiBlbXBpcmljYWwga2x1ZGdlIC0tIGR2bWEgcmVnaW9ucyBvbmx5IHNlZW0gdG8gd29yayByaWdodCBvbiAweDEwMDAwCisgICBieXRlIGJvdW5kYXJpZXMgKi8KKyNkZWZpbmUgRFZNQV9SRUdJT05fU0laRSAweDEwMDAwCisjZGVmaW5lIERWTUFfQUxJR04oYWRkcikgKCgoYWRkcikrRFZNQV9SRUdJT05fU0laRS0xKSAmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICB+KERWTUFfUkVHSU9OX1NJWkUtMSkpCisKKy8qIHZpcnQgPC0+IHBoeXMgY29udmVyc2lvbnMgKi8KKyNkZWZpbmUgZHZtYV92dG9wKHgpICgodW5zaWduZWQgbG9uZykoeCkgJiAweGZmZmZmZikKKyNkZWZpbmUgZHZtYV9wdG92KHgpICgodW5zaWduZWQgbG9uZykoeCkgfCAweGYwMDAwMDApCisjZGVmaW5lIGR2bWFfdnRvdm1lKHgpICgodW5zaWduZWQgbG9uZykoeCkgJiAweDAwZmZmZmYpCisjZGVmaW5lIGR2bWFfdm1ldG92KHgpICgodW5zaWduZWQgbG9uZykoeCkgfCAweGZmMDAwMDApCisjZGVmaW5lIGR2bWFfdnRvYih4KSBkdm1hX3Z0b3AoeCkKKyNkZWZpbmUgZHZtYV9idG92KHgpIGR2bWFfcHRvdih4KQorCitzdGF0aWMgaW5saW5lIGludCBkdm1hX21hcF9jcHUodW5zaWduZWQgbG9uZyBrYWRkciwgdW5zaWduZWQgbG9uZyB2YWRkciwKKwkJCSAgICAgICBpbnQgbGVuKQoreworCXJldHVybiAwOworfQorCitleHRlcm4gdW5zaWduZWQgbG9uZyBkdm1hX3BhZ2UodW5zaWduZWQgbG9uZyBrYWRkciwgdW5zaWduZWQgbG9uZyB2YWRkcik7CisKKyNlbHNlIC8qIFN1bjN4ICovCisKKy8qIHN1bjN4IGR2bWEgcGFnZSBzdXBwb3J0ICovCisKKyNkZWZpbmUgRFZNQV9TVEFSVCAweDAKKyNkZWZpbmUgRFZNQV9FTkQgMHhmMDAwMDAKKyNkZWZpbmUgRFZNQV9TSVpFIChEVk1BX0VORC1EVk1BX1NUQVJUKQorI2RlZmluZSBJT01NVV9UT1RBTF9FTlRSSUVTCSAgIDIwNDgKKy8qIHRoZSBwcm9tIHRha2VzIHRoZSB0b3AgbWVnICovCisjZGVmaW5lIElPTU1VX0VOVFJJRVMgICAgICAgICAgICAgIChJT01NVV9UT1RBTF9FTlRSSUVTIC0gMHg4MCkKKworI2RlZmluZSBkdm1hX3Z0b2IoeCkgKCh1bnNpZ25lZCBsb25nKSh4KSAmIDB4MDBmZmZmZmYpCisjZGVmaW5lIGR2bWFfYnRvdih4KSAoKHVuc2lnbmVkIGxvbmcpKHgpIHwgMHhmZjAwMDAwMCkKKworZXh0ZXJuIGludCBkdm1hX21hcF9jcHUodW5zaWduZWQgbG9uZyBrYWRkciwgdW5zaWduZWQgbG9uZyB2YWRkciwgaW50IGxlbik7CisKKworCisvKiBldmVyeXRoaW5nIGJlbG93IHRoaXMgbGluZSBpcyBzcGVjaWZpYyB0byBkbWEgdXNlZCBmb3IgdGhlIG9uYm9hcmQKKyAgIEVTUCBzY3NpIG9uIHN1bjN4ICovCisKKy8qIFN0cnVjdHVyZSB0byBkZXNjcmliZSB0aGUgY3VycmVudCBzdGF0dXMgb2YgRE1BIHJlZ2lzdGVycyBvbiB0aGUgU3BhcmMgKi8KK3N0cnVjdCBzcGFyY19kbWFfcmVnaXN0ZXJzIHsKKyAgX192b2xhdGlsZV9fIHVuc2lnbmVkIGxvbmcgY29uZF9yZWc7CS8qIERNQSBjb25kaXRpb24gcmVnaXN0ZXIgKi8KKyAgX192b2xhdGlsZV9fIHVuc2lnbmVkIGxvbmcgc3RfYWRkcjsJLyogU3RhcnQgYWRkcmVzcyBvZiB0aGlzIHRyYW5zZmVyICovCisgIF9fdm9sYXRpbGVfXyB1bnNpZ25lZCBsb25nICBjbnQ7CS8qIEhvdyBtYW55IGJ5dGVzIHRvIHRyYW5zZmVyICovCisgIF9fdm9sYXRpbGVfXyB1bnNpZ25lZCBsb25nIGRtYV90ZXN0OwkvKiBETUEgdGVzdCByZWdpc3RlciAqLworfTsKKworLyogRFZNQSBjaGlwIHJldmlzaW9ucyAqLworZW51bSBkdm1hX3JldiB7CisJZHZtYXJldjAsCisJZHZtYWVzYzEsCisJZHZtYXJldjEsCisJZHZtYXJldjIsCisJZHZtYXJldjMsCisJZHZtYXJldnBsdXMsCisJZHZtYWhtZQorfTsKKworI2RlZmluZSBETUFfSEFTQ09VTlQocmV2KSAgKChyZXYpPT1kdm1hZXNjMSkKKworLyogTGludXggRE1BIGluZm9ybWF0aW9uIHN0cnVjdHVyZSwgZmlsbGVkIGR1cmluZyBwcm9iZS4gKi8KK3N0cnVjdCBMaW51eF9TQnVzX0RNQSB7CisJc3RydWN0IExpbnV4X1NCdXNfRE1BICpuZXh0OworCXN0cnVjdCBsaW51eF9zYnVzX2RldmljZSAqU0J1c19kZXY7CisJc3RydWN0IHNwYXJjX2RtYV9yZWdpc3RlcnMgKnJlZ3M7CisKKwkvKiBTdGF0dXMsIG1pc2MgaW5mbyAqLworCWludCBub2RlOyAgICAgICAgICAgICAgICAvKiBQcm9tIG5vZGUgZm9yIHRoaXMgRE1BIGRldmljZSAqLworCWludCBydW5uaW5nOyAgICAgICAgICAgICAvKiBBcmUgd2UgZG9pbmcgRE1BIG5vdz8gKi8KKwlpbnQgYWxsb2NhdGVkOyAgICAgICAgICAgLyogQXJlIHdlICJvd25lZCIgYnkgYW55b25lIHlldD8gKi8KKworCS8qIFRyYW5zZmVyIGluZm9ybWF0aW9uLiAqLworCXVuc2lnbmVkIGxvbmcgYWRkcjsgICAgICAvKiBTdGFydCBhZGRyZXNzIG9mIGN1cnJlbnQgdHJhbnNmZXIgKi8KKwlpbnQgbmJ5dGVzOyAgICAgICAgICAgICAgLyogU2l6ZSBvZiBjdXJyZW50IHRyYW5zZmVyICovCisJaW50IHJlYWxieXRlczsgICAgICAgICAgIC8qIEZvciBzcGxpdHRpbmcgdXAgbGFyZ2UgdHJhbnNmZXJzLCBldGMuICovCisKKwkvKiBETUEgcmV2aXNpb24gKi8KKwllbnVtIGR2bWFfcmV2IHJldmlzaW9uOworfTsKKworZXh0ZXJuIHN0cnVjdCBMaW51eF9TQnVzX0RNQSAqZG1hX2NoYWluOworCisvKiBCcm9rZW4gaGFyZHdhcmUuLi4gKi8KKyNkZWZpbmUgRE1BX0lTQlJPS0VOKGRtYSkgICAgKChkbWEpLT5yZXZpc2lvbiA9PSBkdm1hcmV2MSkKKyNkZWZpbmUgRE1BX0lTRVNDMShkbWEpICAgICAgKChkbWEpLT5yZXZpc2lvbiA9PSBkdm1hZXNjMSkKKworLyogRmllbGRzIGluIHRoZSBjb25kX3JlZyByZWdpc3RlciAqLworLyogRmlyc3QsIHRoZSB2ZXJzaW9uIGlkZW50aWZpY2F0aW9uIGJpdHMgKi8KKyNkZWZpbmUgRE1BX0RFVklDRV9JRCAgICAweGYwMDAwMDAwICAgICAgICAvKiBEZXZpY2UgaWRlbnRpZmljYXRpb24gYml0cyAqLworI2RlZmluZSBETUFfVkVSUzAgICAgICAgIDB4MDAwMDAwMDAgICAgICAgIC8qIFN1bnJheSBETUEgdmVyc2lvbiAqLworI2RlZmluZSBETUFfRVNDVjEgICAgICAgIDB4NDAwMDAwMDAgICAgICAgIC8qIERNQSBFU0MgVmVyc2lvbiAxICovCisjZGVmaW5lIERNQV9WRVJTMSAgICAgICAgMHg4MDAwMDAwMCAgICAgICAgLyogRE1BIHJldiAxICovCisjZGVmaW5lIERNQV9WRVJTMiAgICAgICAgMHhhMDAwMDAwMCAgICAgICAgLyogRE1BIHJldiAyICovCisjZGVmaW5lIERNQV9WRVJITUUgICAgICAgMHhiMDAwMDAwMCAgICAgICAgLyogRE1BIGhtZSBnYXRlIGFycmF5ICovCisjZGVmaW5lIERNQV9WRVJTUExVUyAgICAgMHg5MDAwMDAwMCAgICAgICAgLyogRE1BIHJldiAxIFBMVVMgKi8KKworI2RlZmluZSBETUFfSE5ETF9JTlRSICAgIDB4MDAwMDAwMDEgICAgICAgIC8qIEFuIElSUSBuZWVkcyB0byBiZSBoYW5kbGVkICovCisjZGVmaW5lIERNQV9ITkRMX0VSUk9SICAgMHgwMDAwMDAwMiAgICAgICAgLyogV2UgbmVlZCB0byB0YWtlIGFuIGVycm9yICovCisjZGVmaW5lIERNQV9GSUZPX0lTRFJBSU4gMHgwMDAwMDAwYyAgICAgICAgLyogVGhlIERNQSBGSUZPIGlzIGRyYWluaW5nICovCisjZGVmaW5lIERNQV9JTlRfRU5BQiAgICAgMHgwMDAwMDAxMCAgICAgICAgLyogVHVybiBvbiBpbnRlcnJ1cHRzICovCisjZGVmaW5lIERNQV9GSUZPX0lOViAgICAgMHgwMDAwMDAyMCAgICAgICAgLyogSW52YWxpZGF0ZSB0aGUgRklGTyAqLworI2RlZmluZSBETUFfQUNDX1NaX0VSUiAgIDB4MDAwMDAwNDAgICAgICAgIC8qIFRoZSBhY2Nlc3Mgc2l6ZSB3YXMgYmFkICovCisjZGVmaW5lIERNQV9GSUZPX1NURFJBSU4gMHgwMDAwMDA0MCAgICAgICAgLyogRE1BX1ZFUlMxIERyYWluIHRoZSBGSUZPICovCisjZGVmaW5lIERNQV9SU1RfU0NTSSAgICAgMHgwMDAwMDA4MCAgICAgICAgLyogUmVzZXQgdGhlIFNDU0kgY29udHJvbGxlciAqLworI2RlZmluZSBETUFfUlNUX0VORVQgICAgIERNQV9SU1RfU0NTSSAgICAgIC8qIFJlc2V0IHRoZSBFTkVUIGNvbnRyb2xsZXIgKi8KKyNkZWZpbmUgRE1BX1NUX1dSSVRFICAgICAweDAwMDAwMTAwICAgICAgICAvKiB3cml0ZSBmcm9tIGRldmljZSB0byBtZW1vcnkgKi8KKyNkZWZpbmUgRE1BX0VOQUJMRSAgICAgICAweDAwMDAwMjAwICAgICAgICAvKiBGaXJlIHVwIERNQSwgaGFuZGxlIHJlcXVlc3RzICovCisjZGVmaW5lIERNQV9QRU5EX1JFQUQgICAgMHgwMDAwMDQwMCAgICAgICAgLyogRE1BX1ZFUlMxLzAvUExVUyBQZW5kaW5nIFJlYWQgKi8KKyNkZWZpbmUgRE1BX0VTQ19CVVJTVCAgICAweDAwMDAwODAwICAgICAgICAvKiAxPTE2Ynl0ZSAwPTMyYnl0ZSAqLworI2RlZmluZSBETUFfUkVBRF9BSEVBRCAgIDB4MDAwMDE4MDAgICAgICAgIC8qIERNQSByZWFkIGFoZWFkIHBhcnRpYWwgbG9uZ3dvcmQgKi8KKyNkZWZpbmUgRE1BX0RTQkxfUkRfRFJOICAweDAwMDAxMDAwICAgICAgICAvKiBObyBFQyBkcmFpbiBvbiBzbGF2ZSByZWFkcyAqLworI2RlZmluZSBETUFfQkNOVF9FTkFCICAgIDB4MDAwMDIwMDAgICAgICAgIC8qIElmIG9uLCB1c2UgdGhlIGJ5dGUgY291bnRlciAqLworI2RlZmluZSBETUFfVEVSTV9DTlRSICAgIDB4MDAwMDQwMDAgICAgICAgIC8qIFRlcm1pbmFsIGNvdW50ZXIgKi8KKyNkZWZpbmUgRE1BX0NTUl9ESVNBQiAgICAweDAwMDEwMDAwICAgICAgICAvKiBObyBGSUZPIGRyYWlucyBkdXJpbmcgY3NyICovCisjZGVmaW5lIERNQV9TQ1NJX0RJU0FCICAgMHgwMDAyMDAwMCAgICAgICAgLyogTm8gRklGTyBkcmFpbnMgZHVyaW5nIHJlZyAqLworI2RlZmluZSBETUFfRFNCTF9XUl9JTlYgIDB4MDAwMjAwMDAgICAgICAgIC8qIE5vIEVDIGludmFsLiBvbiBzbGF2ZSB3cml0ZXMgKi8KKyNkZWZpbmUgRE1BX0FERF9FTkFCTEUgICAweDAwMDQwMDAwICAgICAgICAvKiBTcGVjaWFsIEVTQyBEVk1BIG9wdGltaXphdGlvbiAqLworI2RlZmluZSBETUFfRV9CVVJTVDgJIDB4MDAwNDAwMDAJICAgLyogRU5FVDogU0JVUyByL3cgYnVyc3Qgc2l6ZSAqLworI2RlZmluZSBETUFfQlJTVF9TWiAgICAgIDB4MDAwYzAwMDAgICAgICAgIC8qIFNDU0k6IFNCVVMgci93IGJ1cnN0IHNpemUgKi8KKyNkZWZpbmUgRE1BX0JSU1Q2NCAgICAgICAweDAwMDgwMDAwICAgICAgICAvKiBTQ1NJOiA2NGJ5dGUgYnVyc3RzIChITUUgb24gVWx0cmFTcGFyYyBvbmx5KSAqLworI2RlZmluZSBETUFfQlJTVDMyICAgICAgIDB4MDAwNDAwMDAgICAgICAgIC8qIFNDU0k6IDMyYnl0ZSBidXJzdHMgKi8KKyNkZWZpbmUgRE1BX0JSU1QxNiAgICAgICAweDAwMDAwMDAwICAgICAgICAvKiBTQ1NJOiAxNmJ5dGUgYnVyc3RzICovCisjZGVmaW5lIERNQV9CUlNUMCAgICAgICAgMHgwMDA4MDAwMCAgICAgICAgLyogU0NTSTogbm8gYnVyc3RzIChub24tSE1FIGdhdGUgYXJyYXlzKSAqLworI2RlZmluZSBETUFfQUREUl9ESVNBQiAgIDB4MDAxMDAwMDAgICAgICAgIC8qIE5vIEZJRk8gZHJhaW5zIGR1cmluZyBhZGRyICovCisjZGVmaW5lIERNQV8yQ0xLUyAgICAgICAgMHgwMDIwMDAwMCAgICAgICAgLyogRWFjaCB0cmFuc2ZlciA9IDIgY2xvY2sgdGlja3MgKi8KKyNkZWZpbmUgRE1BXzNDTEtTICAgICAgICAweDAwNDAwMDAwICAgICAgICAvKiBFYWNoIHRyYW5zZmVyID0gMyBjbG9jayB0aWNrcyAqLworI2RlZmluZSBETUFfRU5fRU5FVEFVSSAgIERNQV8zQ0xLUyAgICAgICAgIC8qIFB1dCBsYW5jZSBpbnRvIEFVSS1jYWJsZSBtb2RlICovCisjZGVmaW5lIERNQV9DTlRSX0RJU0FCICAgMHgwMDgwMDAwMCAgICAgICAgLyogTm8gSVJRIHdoZW4gRE1BX1RFUk1fQ05UUiBzZXQgKi8KKyNkZWZpbmUgRE1BX0FVVE9fTkFERFIgICAweDAxMDAwMDAwICAgICAgICAvKiBVc2UgImF1dG8gbnh0IGFkZHIiIGZlYXR1cmUgKi8KKyNkZWZpbmUgRE1BX1NDU0lfT04gICAgICAweDAyMDAwMDAwICAgICAgICAvKiBFbmFibGUgU0NTSSBkbWEgKi8KKyNkZWZpbmUgRE1BX1BBUklUWV9PRkYgICAweDAyMDAwMDAwICAgICAgICAvKiBITUU6IGRpc2FibGUgcGFyaXR5IGNoZWNraW5nICovCisjZGVmaW5lIERNQV9MT0FERURfQUREUiAgMHgwNDAwMDAwMCAgICAgICAgLyogQWRkcmVzcyBoYXMgYmVlbiBsb2FkZWQgKi8KKyNkZWZpbmUgRE1BX0xPQURFRF9OQUREUiAweDA4MDAwMDAwICAgICAgICAvKiBOZXh0IGFkZHJlc3MgaGFzIGJlZW4gbG9hZGVkICovCisKKy8qIFZhbHVlcyBkZXNjcmliaW5nIHRoZSBidXJzdC1zaXplIHByb3BlcnR5IGZyb20gdGhlIFBST00gKi8KKyNkZWZpbmUgRE1BX0JVUlNUMSAgICAgICAweDAxCisjZGVmaW5lIERNQV9CVVJTVDIgICAgICAgMHgwMgorI2RlZmluZSBETUFfQlVSU1Q0ICAgICAgIDB4MDQKKyNkZWZpbmUgRE1BX0JVUlNUOCAgICAgICAweDA4CisjZGVmaW5lIERNQV9CVVJTVDE2ICAgICAgMHgxMAorI2RlZmluZSBETUFfQlVSU1QzMiAgICAgIDB4MjAKKyNkZWZpbmUgRE1BX0JVUlNUNjQgICAgICAweDQwCisjZGVmaW5lIERNQV9CVVJTVEJJVFMgICAgMHg3ZgorCisvKiBEZXRlcm1pbmUgaGlnaGVzdCBwb3NzaWJsZSBmaW5hbCB0cmFuc2ZlciBhZGRyZXNzIGdpdmVuIGEgYmFzZSAqLworI2RlZmluZSBETUFfTUFYRU5EKGFkZHIpICgweDAxMDAwMDAwVUwtKCgodW5zaWduZWQgbG9uZykoYWRkcikpJjB4MDBmZmZmZmZVTCkpCisKKy8qIFllcywgSSBoYWNrIGEgbG90IG9mIGVsaXNwIGluIG15IHNwYXJlIHRpbWUuLi4gKi8KKyNkZWZpbmUgRE1BX0VSUk9SX1AocmVncykgICgoKChyZWdzKS0+Y29uZF9yZWcpICYgRE1BX0hORExfRVJST1IpKQorI2RlZmluZSBETUFfSVJRX1AocmVncykgICAgKCgoKHJlZ3MpLT5jb25kX3JlZykgJiAoRE1BX0hORExfSU5UUiB8IERNQV9ITkRMX0VSUk9SKSkpCisjZGVmaW5lIERNQV9XUklURV9QKHJlZ3MpICAoKCgocmVncyktPmNvbmRfcmVnKSAmIERNQV9TVF9XUklURSkpCisjZGVmaW5lIERNQV9PRkYocmVncykgICAgICAoKCgocmVncyktPmNvbmRfcmVnKSAmPSAofkRNQV9FTkFCTEUpKSkKKyNkZWZpbmUgRE1BX0lOVFNPRkYocmVncykgICgoKChyZWdzKS0+Y29uZF9yZWcpICY9ICh+RE1BX0lOVF9FTkFCKSkpCisjZGVmaW5lIERNQV9JTlRTT04ocmVncykgICAoKCgocmVncyktPmNvbmRfcmVnKSB8PSAoRE1BX0lOVF9FTkFCKSkpCisjZGVmaW5lIERNQV9QVU5URklGTyhyZWdzKSAoKCgocmVncyktPmNvbmRfcmVnKSB8PSBETUFfRklGT19JTlYpKQorI2RlZmluZSBETUFfU0VUU1RBUlQocmVncywgYWRkcikgICgoKChyZWdzKS0+c3RfYWRkcikgPSAoY2hhciAqKSBhZGRyKSkKKyNkZWZpbmUgRE1BX0JFR0lORE1BX1cocmVncykgXAorICAgICAgICAoKCgocmVncyktPmNvbmRfcmVnIHw9IChETUFfU1RfV1JJVEV8RE1BX0VOQUJMRXxETUFfSU5UX0VOQUIpKSkpCisjZGVmaW5lIERNQV9CRUdJTkRNQV9SKHJlZ3MpIFwKKyAgICAgICAgKCgoKHJlZ3MpLT5jb25kX3JlZyB8PSAoKERNQV9FTkFCTEV8RE1BX0lOVF9FTkFCKSYofkRNQV9TVF9XUklURSkpKSkpCisKKy8qIEZvciBjZXJ0YWluIERNQSBjaGlwcywgd2UgbmVlZCB0byBkaXNhYmxlIGludHMgdXBvbiBpcnEgZW50cnkKKyAqIGFuZCB0dXJuIHRoZW0gYmFjayBvbiB3aGVuIHdlIGFyZSBkb25lLiAgU28gaW4gYW55IEVTUCBpbnRlcnJ1cHQKKyAqIGhhbmRsZXIgeW91ICptdXN0KiBjYWxsIERNQV9JUlFfRU5UUlkgdXBvbiBlbnRyeSBhbmQgRE1BX0lSUV9FWElUCisgKiB3aGVuIGxlYXZpbmcgdGhlIGhhbmRsZXIuICBZb3UgaGF2ZSBiZWVuIHdhcm5lZC4uLgorICovCisjZGVmaW5lIERNQV9JUlFfRU5UUlkoZG1hLCBkcmVncykgZG8geyBcCisgICAgICAgIGlmKERNQV9JU0JST0tFTihkbWEpKSBETUFfSU5UU09GRihkcmVncyk7IFwKKyAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgRE1BX0lSUV9FWElUKGRtYSwgZHJlZ3MpIGRvIHsgXAorCWlmKERNQV9JU0JST0tFTihkbWEpKSBETUFfSU5UU09OKGRyZWdzKTsgXAorICAgfSB3aGlsZSgwKQorCisvKiBSZXNldCB0aGUgZnJpZ2dpbicgdGhpbmcuLi4gKi8KKyNkZWZpbmUgRE1BX1JFU0VUKGRtYSkgZG8geyBcCisJc3RydWN0IHNwYXJjX2RtYV9yZWdpc3RlcnMgKnJlZ3MgPSBkbWEtPnJlZ3M7ICAgICAgICAgICAgICAgICAgICAgIFwKKwkvKiBMZXQgdGhlIGN1cnJlbnQgRklGTyBkcmFpbiBpdHNlbGYgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXNwYXJjX2RtYV9wYXVzZShyZWdzLCAoRE1BX0ZJRk9fSVNEUkFJTikpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisJLyogUmVzZXQgdGhlIGxvZ2ljICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlyZWdzLT5jb25kX3JlZyB8PSAoRE1BX1JTVF9TQ1NJKTsgICAgIC8qIGFzc2VydCAqLyAgICAgICAgICAgICAgICAgXAorCV9fZGVsYXkoNDAwKTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGV0IHRoZSBiaXRzIHNldCA7KSAqLyAgICBcCisJcmVncy0+Y29uZF9yZWcgJj0gfihETUFfUlNUX1NDU0kpOyAgICAvKiBkZS1hc3NlcnQgKi8gICAgICAgICAgICAgIFwKKwlzcGFyY19kbWFfZW5hYmxlX2ludGVycnVwdHMocmVncyk7ICAgIC8qIFJlLWVuYWJsZSBpbnRlcnJ1cHRzICovICAgXAorCS8qIEVuYWJsZSBGQVNUIHRyYW5zZmVycyBpZiBhdmFpbGFibGUgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJaWYoZG1hLT5yZXZpc2lvbj5kdm1hcmV2MSkgcmVncy0+Y29uZF9yZWcgfD0gRE1BXzNDTEtTOyAgICAgICAgICAgIFwKKwlkbWEtPnJ1bm5pbmcgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSB3aGlsZSgwKQorCisKKyNlbmRpZiAvKiAhQ09ORklHX1NVTjMgKi8KKworI2VuZGlmIC8qICEoX19NNjhLX0RWTUFfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvZWxmLmggYi9pbmNsdWRlL2FzbS1tNjhrL2VsZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4YmY4MzQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2VsZi5oCkBAIC0wLDAgKzEsMTIyIEBACisjaWZuZGVmIF9fQVNNbTY4a19FTEZfSAorI2RlZmluZSBfX0FTTW02OGtfRUxGX0gKKworLyoKKyAqIEVMRiByZWdpc3RlciBkZWZpbml0aW9ucy4uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vdXNlci5oPgorCisvKgorICogNjhrIEVMRiByZWxvY2F0aW9uIHR5cGVzCisgKi8KKyNkZWZpbmUgUl82OEtfTk9ORQkwCisjZGVmaW5lIFJfNjhLXzMyCTEKKyNkZWZpbmUgUl82OEtfMTYJMgorI2RlZmluZSBSXzY4S184CQkzCisjZGVmaW5lIFJfNjhLX1BDMzIJNAorI2RlZmluZSBSXzY4S19QQzE2CTUKKyNkZWZpbmUgUl82OEtfUEM4CTYKKyNkZWZpbmUgUl82OEtfR09UMzIJNworI2RlZmluZSBSXzY4S19HT1QxNgk4CisjZGVmaW5lIFJfNjhLX0dPVDgJOQorI2RlZmluZSBSXzY4S19HT1QzMk8JMTAKKyNkZWZpbmUgUl82OEtfR09UMTZPCTExCisjZGVmaW5lIFJfNjhLX0dPVDhPCTEyCisjZGVmaW5lIFJfNjhLX1BMVDMyCTEzCisjZGVmaW5lIFJfNjhLX1BMVDE2CTE0CisjZGVmaW5lIFJfNjhLX1BMVDgJMTUKKyNkZWZpbmUgUl82OEtfUExUMzJPCTE2CisjZGVmaW5lIFJfNjhLX1BMVDE2TwkxNworI2RlZmluZSBSXzY4S19QTFQ4TwkxOAorI2RlZmluZSBSXzY4S19DT1BZCTE5CisjZGVmaW5lIFJfNjhLX0dMT0JfREFUCTIwCisjZGVmaW5lIFJfNjhLX0pNUF9TTE9UCTIxCisjZGVmaW5lIFJfNjhLX1JFTEFUSVZFCTIyCisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBlbGZfZ3JlZ190OworCisjZGVmaW5lIEVMRl9OR1JFRyAoc2l6ZW9mKHN0cnVjdCB1c2VyX3JlZ3Nfc3RydWN0KSAvIHNpemVvZihlbGZfZ3JlZ190KSkKK3R5cGVkZWYgZWxmX2dyZWdfdCBlbGZfZ3JlZ3NldF90W0VMRl9OR1JFR107CisKK3R5cGVkZWYgc3RydWN0IHVzZXJfbTY4a2ZwX3N0cnVjdCBlbGZfZnByZWdzZXRfdDsKKworLyoKKyAqIFRoaXMgaXMgdXNlZCB0byBlbnN1cmUgd2UgZG9uJ3QgbG9hZCBzb21ldGhpbmcgZm9yIHRoZSB3cm9uZyBhcmNoaXRlY3R1cmUuCisgKi8KKyNkZWZpbmUgZWxmX2NoZWNrX2FyY2goeCkgKCh4KS0+ZV9tYWNoaW5lID09IEVNXzY4SykKKworLyoKKyAqIFRoZXNlIGFyZSB1c2VkIHRvIHNldCBwYXJhbWV0ZXJzIGluIHRoZSBjb3JlIGR1bXBzLgorICovCisjZGVmaW5lIEVMRl9DTEFTUwlFTEZDTEFTUzMyCisjZGVmaW5lIEVMRl9EQVRBCUVMRkRBVEEyTVNCCisjZGVmaW5lIEVMRl9BUkNICUVNXzY4SworCisvKiBGb3IgU1ZSNC9tNjhrIHRoZSBmdW5jdGlvbiBwb2ludGVyIHRvIGJlIHJlZ2lzdGVyZWQgd2l0aCBgYXRleGl0JyBpcworICAgcGFzc2VkIGluICVhMS4gIEFsdGhvdWdoIG15IGNvcHkgb2YgdGhlIEFCSSBoYXMgbm8gc3VjaCBzdGF0ZW1lbnQsIGl0CisgICBpcyBhY3R1YWxseSB1c2VkIG9uIEFTVi4gICovCisjZGVmaW5lIEVMRl9QTEFUX0lOSVQoX3IsIGxvYWRfYWRkcikJX3ItPmExID0gMAorCisjZGVmaW5lIFVTRV9FTEZfQ09SRV9EVU1QCisjaWZuZGVmIENPTkZJR19TVU4zCisjZGVmaW5lIEVMRl9FWEVDX1BBR0VTSVpFCTQwOTYKKyNlbHNlCisjZGVmaW5lIEVMRl9FWEVDX1BBR0VTSVpFCTgxOTIKKyNlbmRpZgorCisvKiBUaGlzIGlzIHRoZSBsb2NhdGlvbiB0aGF0IGFuIEVUX0RZTiBwcm9ncmFtIGlzIGxvYWRlZCBpZiBleGVjJ2VkLiAgVHlwaWNhbAorICAgdXNlIG9mIHRoaXMgaXMgdG8gaW52b2tlICIuL2xkLnNvIHNvbWVwcm9nIiB0byB0ZXN0IG91dCBhIG5ldyB2ZXJzaW9uIG9mCisgICB0aGUgbG9hZGVyLiAgV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBpdCBpcyBvdXQgb2YgdGhlIHdheSBvZiB0aGUgcHJvZ3JhbQorICAgdGhhdCBpdCB3aWxsICJleGVjIiwgYW5kIHRoYXQgdGhlcmUgaXMgc3VmZmljaWVudCByb29tIGZvciB0aGUgYnJrLiAgKi8KKworI2lmbmRlZiBDT05GSUdfU1VOMworI2RlZmluZSBFTEZfRVRfRFlOX0JBU0UgICAgICAgICAweEQwMDAwMDAwVUwKKyNlbHNlCisjZGVmaW5lIEVMRl9FVF9EWU5fQkFTRSAgICAgICAgIDB4MEQ4MDAwMDBVTAorI2VuZGlmCisKKyNkZWZpbmUgRUxGX0NPUkVfQ09QWV9SRUdTKHByX3JlZywgcmVncykJCQkJXAorCS8qIEJsZWVjaC4gKi8JCQkJCQkJXAorCXByX3JlZ1swXSA9IHJlZ3MtPmQxOwkJCQkJCVwKKwlwcl9yZWdbMV0gPSByZWdzLT5kMjsJCQkJCQlcCisJcHJfcmVnWzJdID0gcmVncy0+ZDM7CQkJCQkJXAorCXByX3JlZ1szXSA9IHJlZ3MtPmQ0OwkJCQkJCVwKKwlwcl9yZWdbNF0gPSByZWdzLT5kNTsJCQkJCQlcCisJcHJfcmVnWzddID0gcmVncy0+YTA7CQkJCQkJXAorCXByX3JlZ1s4XSA9IHJlZ3MtPmExOwkJCQkJCVwKKwlwcl9yZWdbOV0gPSByZWdzLT5hMjsJCQkJCQlcCisJcHJfcmVnWzE0XSA9IHJlZ3MtPmQwOwkJCQkJCVwKKwlwcl9yZWdbMTVdID0gcmR1c3AoKTsJCQkJCQlcCisJcHJfcmVnWzE2XSA9IHJlZ3MtPm9yaWdfZDA7CQkJCQlcCisJcHJfcmVnWzE3XSA9IHJlZ3MtPnNyOwkJCQkJCVwKKwlwcl9yZWdbMThdID0gcmVncy0+cGM7CQkJCQkJXAorCXByX3JlZ1sxOV0gPSAocmVncy0+Zm9ybWF0IDw8IDEyKSB8IHJlZ3MtPnZlY3RvcjsJCVwKKwl7CQkJCQkJCQlcCisJICBzdHJ1Y3Qgc3dpdGNoX3N0YWNrICpzdyA9ICgoc3RydWN0IHN3aXRjaF9zdGFjayAqKXJlZ3MpIC0gMTsJXAorCSAgcHJfcmVnWzVdID0gc3ctPmQ2OwkJCQkJCVwKKwkgIHByX3JlZ1s2XSA9IHN3LT5kNzsJCQkJCQlcCisJICBwcl9yZWdbMTBdID0gc3ctPmEzOwkJCQkJCVwKKwkgIHByX3JlZ1sxMV0gPSBzdy0+YTQ7CQkJCQkJXAorCSAgcHJfcmVnWzEyXSA9IHN3LT5hNTsJCQkJCQlcCisJICBwcl9yZWdbMTNdID0gc3ctPmE2OwkJCQkJCVwKKwl9CisKKy8qIFRoaXMgeWllbGRzIGEgbWFzayB0aGF0IHVzZXIgcHJvZ3JhbXMgY2FuIHVzZSB0byBmaWd1cmUgb3V0IHdoYXQKKyAgIGluc3RydWN0aW9uIHNldCB0aGlzIGNwdSBzdXBwb3J0cy4gICovCisKKyNkZWZpbmUgRUxGX0hXQ0FQCSgwKQorCisvKiBUaGlzIHlpZWxkcyBhIHN0cmluZyB0aGF0IGxkLnNvIHdpbGwgdXNlIHRvIGxvYWQgaW1wbGVtZW50YXRpb24KKyAgIHNwZWNpZmljIGxpYnJhcmllcyBmb3Igb3B0aW1pemF0aW9uLiAgVGhpcyBpcyBtb3JlIHNwZWNpZmljIGluCisgICBpbnRlbnQgdGhhbiBwb2tpbmcgYXQgdW5hbWUgb3IgL3Byb2MvY3B1aW5mby4gICovCisKKyNkZWZpbmUgRUxGX1BMQVRGT1JNICAoTlVMTCkKKworI2lmZGVmIF9fS0VSTkVMX18KKyNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4LCBpYmNzMikgc2V0X3BlcnNvbmFsaXR5KChpYmNzMik/UEVSX1NWUjQ6UEVSX0xJTlVYKQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9lbnRyeS5oIGIvaW5jbHVkZS9hc20tbTY4ay9lbnRyeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzOTY0OTUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2VudHJ5LmgKQEAgLTAsMCArMSwxMzggQEAKKyNpZm5kZWYgX19NNjhLX0VOVFJZX0gKKyNkZWZpbmUgX19NNjhLX0VOVFJZX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisKKy8qCisgKiBTdGFjayBsYXlvdXQgaW4gJ3JldF9mcm9tX2V4Y2VwdGlvbic6CisgKgorICoJVGhpcyBhbGxvd3MgYWNjZXNzIHRvIHRoZSBzeXNjYWxsIGFyZ3VtZW50cyBpbiByZWdpc3RlcnMgZDEtZDUKKyAqCisgKgkgMChzcCkgLSBkMQorICoJIDQoc3ApIC0gZDIKKyAqCSA4KHNwKSAtIGQzCisgKgkgQyhzcCkgLSBkNAorICoJMTAoc3ApIC0gZDUKKyAqCTE0KHNwKSAtIGEwCisgKgkxOChzcCkgLSBhMQorICoJMUMoc3ApIC0gYTIKKyAqCTIwKHNwKSAtIGQwCisgKgkyNChzcCkgLSBvcmlnX2QwCisgKgkyOChzcCkgLSBzdGFjayBhZGp1c3RtZW50CisgKgkyQyhzcCkgLSBzcgorICoJMkUoc3ApIC0gcGMKKyAqCTMyKHNwKSAtIGZvcm1hdCAmIHZlY3RvcgorICovCisKKy8qCisgKiA5Ny8wNS8xNCBBbmRyZWFzOiBSZWdpc3RlciAlYTIgaXMgbm93IHNldCB0byB0aGUgY3VycmVudCB0YXNrIHRocm91Z2hvdXQKKyAqCQkgICAgIHRoZSB3aG9sZSBrZXJuZWwuCisgKi8KKworLyogdGhlIGZvbGxvd2luZyBtYWNybyBpcyB1c2VkIHdoZW4gZW5hYmxpbmcgaW50ZXJydXB0cyAqLworI2lmIGRlZmluZWQoTUFDSF9BVEFSSV9PTkxZKSAmJiAhZGVmaW5lZChDT05GSUdfSEFERVMpCisJLyogYmxvY2sgb3V0IEhTWU5DIG9uIHRoZSBhdGFyaSAqLworI2RlZmluZSBBTExPV0lOVAkofjB4NDAwKQorI2RlZmluZQlNQVhfTk9JTlRfSVBMCTMKKyNlbHNlCisJLyogcG9ydGFibGUgdmVyc2lvbiAqLworI2RlZmluZSBBTExPV0lOVAkofjB4NzAwKQorI2RlZmluZQlNQVhfTk9JTlRfSVBMCTAKKyNlbmRpZiAvKiBtYWNoaW5lIGNvbXBpbGF0aW9uIHR5cGVzICovCisKKyNpZmRlZiBfX0FTU0VNQkxZX18KKworI2RlZmluZSBjdXJwdHIgYTIKKworTEZMVVNIX0lfQU5EX0QgPSAweDAwMDAwODA4CitMU0lHVFJBUCA9IDUKKworLyogcHJvY2VzcyBiaXRzIGZvciB0YXNrX3N0cnVjdC5wdHJhY2UgKi8KK1BUX1RSQUNFU1lTX09GRiA9IDMKK1BUX1RSQUNFU1lTX0JJVCA9IDEKK1BUX1BUUkFDRURfT0ZGID0gMworUFRfUFRSQUNFRF9CSVQgPSAwCitQVF9EVFJBQ0VfT0ZGID0gMworUFRfRFRSQUNFX0JJVCA9IDIKKworI2RlZmluZSBTQVZFX0FMTF9JTlQgc2F2ZV9hbGxfaW50CisjZGVmaW5lIFNBVkVfQUxMX1NZUyBzYXZlX2FsbF9zeXMKKyNkZWZpbmUgUkVTVE9SRV9BTEwgcmVzdG9yZV9hbGwKKy8qCisgKiBUaGlzIGRlZmluZXMgdGhlIG5vcm1hbCBrZXJuZWwgcHQtcmVncyBsYXlvdXQuCisgKgorICogcmVncyBhMy1hNiBhbmQgZDYtZDcgYXJlIHByZXNlcnZlZCBieSBDIGNvZGUKKyAqIHRoZSBrZXJuZWwgZG9lc24ndCBtZXNzIHdpdGggdXNwIHVubGVzcyBpdCBuZWVkcyB0bworICovCisKKy8qCisgKiBhIC0xIGluIHRoZSBvcmlnX2QwIGZpZWxkIHNpZ25pZmllcworICogdGhhdCB0aGUgc3RhY2sgZnJhbWUgaXMgTk9UIGZvciBzeXNjYWxsCisgKi8KKy5tYWNybwlzYXZlX2FsbF9pbnQKKwljbHJsCSVzcEAtCQl8IHN0a19hZGoKKwlwZWEJLTE6dwkJfCBvcmlnIGQwCisJbW92ZWwJJWQwLCVzcEAtCXwgZDAKKwltb3ZlbWwJJWQxLSVkNS8lYTAtJWExLyVjdXJwdHIsJXNwQC0KKy5lbmRtCisKKy5tYWNybwlzYXZlX2FsbF9zeXMKKwljbHJsCSVzcEAtCQl8IHN0a19hZGoKKwltb3ZlbAklZDAsJXNwQC0JfCBvcmlnIGQwCisJbW92ZWwJJWQwLCVzcEAtCXwgZDAKKwltb3ZlbWwJJWQxLSVkNS8lYTAtJWExLyVjdXJwdHIsJXNwQC0KKy5lbmRtCisKKy5tYWNybwlyZXN0b3JlX2FsbAorCW1vdmVtbAklc3BAKywlYTAtJWExLyVjdXJwdHIvJWQxLSVkNQorCW1vdmVsCSVzcEArLCVkMAorCWFkZHFsCSM0LCVzcAkJfCBvcmlnIGQwCisJYWRkbAklc3BAKywlc3AJfCBzdGsgYWRqCisJcnRlCisuZW5kbQorCisjZGVmaW5lIFNXSVRDSF9TVEFDS19TSVpFICg2KjQrNCkJLyogaW5jbHVkZXMgcmV0dXJuIGFkZHJlc3MgKi8KKworI2RlZmluZSBTQVZFX1NXSVRDSF9TVEFDSyBzYXZlX3N3aXRjaF9zdGFjaworI2RlZmluZSBSRVNUT1JFX1NXSVRDSF9TVEFDSyByZXN0b3JlX3N3aXRjaF9zdGFjaworI2RlZmluZSBHRVRfQ1VSUkVOVCh0bXApIGdldF9jdXJyZW50IHRtcAorCisubWFjcm8Jc2F2ZV9zd2l0Y2hfc3RhY2sKKwltb3ZlbWwJJWEzLSVhNi8lZDYtJWQ3LCVzcEAtCisuZW5kbQorCisubWFjcm8JcmVzdG9yZV9zd2l0Y2hfc3RhY2sKKwltb3ZlbWwJJXNwQCssJWEzLSVhNi8lZDYtJWQ3CisuZW5kbQorCisubWFjcm8JZ2V0X2N1cnJlbnQgcmVnPSVkMAorCW1vdmVsCSVzcCxccmVnCisJYW5kdwkjLVRIUkVBRF9TSVpFLFxyZWcKKwltb3ZlbAlccmVnLCVjdXJwdHIKKwltb3ZlbAklY3VycHRyQCwlY3VycHRyCisuZW5kbQorCisjZWxzZSAvKiBDIHNvdXJjZSAqLworCisjZGVmaW5lIFNUUihYKSBTVFIxKFgpCisjZGVmaW5lIFNUUjEoWCkgI1gKKworI2RlZmluZSBQVF9PRkZfT1JJR19EMAkgMHgyNAorI2RlZmluZSBQVF9PRkZfRk9STUFUVkVDIDB4MzIKKyNkZWZpbmUgUFRfT0ZGX1NSCSAweDJDCisjZGVmaW5lIFNBVkVfQUxMX0lOVAkJCQlcCisJImNscmwJJSVzcEAtOyIgICAgLyogc3RrX2FkaiAqLwlcCisJInBlYQktMTp3OyIJICAgIC8qIG9yaWcgZDAgPSAtMSAqLwlcCisJIm1vdmVsCSUlZDAsJSVzcEAtOyIgLyogZDAgKi8JCVwKKwkibW92ZW1sCSUlZDEtJSVkNS8lJWEwLSUlYTIsJSVzcEAtIgorI2RlZmluZSBHRVRfQ1VSUkVOVCh0bXApIFwKKwkibW92ZWwJJSVzcCwiI3RtcCJcblx0IiBcCisJImFuZHcJIy0iU1RSKFRIUkVBRF9TSVpFKSIsIiN0bXAiXG5cdCIgXAorCSJtb3ZlbAkiI3RtcCIsJSVhMlxuXHQiIFwKKwkibW92ZWwJJSVhMkAsJSVhMiIKKworI2VuZGlmCisKKyNlbmRpZiAvKiBfX002OEtfRU5UUllfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9lcnJuby5oIGIvaW5jbHVkZS9hc20tbTY4ay9lcnJuby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkNGUxODgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2Vycm5vLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9NNjhLX0VSUk5PX0gKKyNkZWZpbmUgX002OEtfRVJSTk9fSAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZXJybm8uaD4KKworI2VuZGlmIC8qIF9NNjhLX0VSUk5PX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvZmJpby5oIGIvaW5jbHVkZS9hc20tbTY4ay9mYmlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE3ZWRmOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvZmJpby5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tc3BhcmMvZmJpby5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9mY250bC5oIGIvaW5jbHVkZS9hc20tbTY4ay9mY250bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkNDIxMjkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2ZjbnRsLmgKQEAgLTAsMCArMSw4NyBAQAorI2lmbmRlZiBfTTY4S19GQ05UTF9ICisjZGVmaW5lIF9NNjhLX0ZDTlRMX0gKKworLyogb3Blbi9mY250bCAtIE9fU1lOQyBpcyBvbmx5IGltcGxlbWVudGVkIG9uIGJsb2NrcyBkZXZpY2VzIGFuZCBvbiBmaWxlcworICAgbG9jYXRlZCBvbiBhbiBleHQyIGZpbGUgc3lzdGVtICovCisjZGVmaW5lIE9fQUNDTU9ERQkgIDAwMDMKKyNkZWZpbmUgT19SRE9OTFkJICAgIDAwCisjZGVmaW5lIE9fV1JPTkxZCSAgICAwMQorI2RlZmluZSBPX1JEV1IJCSAgICAwMgorI2RlZmluZSBPX0NSRUFUCQkgIDAxMDAJLyogbm90IGZjbnRsICovCisjZGVmaW5lIE9fRVhDTAkJICAwMjAwCS8qIG5vdCBmY250bCAqLworI2RlZmluZSBPX05PQ1RUWQkgIDA0MDAJLyogbm90IGZjbnRsICovCisjZGVmaW5lIE9fVFJVTkMJCSAwMTAwMAkvKiBub3QgZmNudGwgKi8KKyNkZWZpbmUgT19BUFBFTkQJIDAyMDAwCisjZGVmaW5lIE9fTk9OQkxPQ0sJIDA0MDAwCisjZGVmaW5lIE9fTkRFTEFZCU9fTk9OQkxPQ0sKKyNkZWZpbmUgT19TWU5DCQkwMTAwMDAKKyNkZWZpbmUgRkFTWU5DCQkwMjAwMDAJLyogZmNudGwsIGZvciBCU0QgY29tcGF0aWJpbGl0eSAqLworI2RlZmluZSBPX0RJUkVDVE9SWQkwNDAwMDAJLyogbXVzdCBiZSBhIGRpcmVjdG9yeSAqLworI2RlZmluZSBPX05PRk9MTE9XCTAxMDAwMDAJLyogZG9uJ3QgZm9sbG93IGxpbmtzICovCisjZGVmaW5lIE9fRElSRUNUCTAyMDAwMDAJLyogZGlyZWN0IGRpc2sgYWNjZXNzIGhpbnQgLSBjdXJyZW50bHkgaWdub3JlZCAqLworI2RlZmluZSBPX0xBUkdFRklMRQkwNDAwMDAwCisjZGVmaW5lIE9fTk9BVElNRQkwMTAwMDAwMAorCisjZGVmaW5lIEZfRFVQRkQJCTAJLyogZHVwICovCisjZGVmaW5lIEZfR0VURkQJCTEJLyogZ2V0IGNsb3NlX29uX2V4ZWMgKi8KKyNkZWZpbmUgRl9TRVRGRAkJMgkvKiBzZXQvY2xlYXIgY2xvc2Vfb25fZXhlYyAqLworI2RlZmluZSBGX0dFVEZMCQkzCS8qIGdldCBmaWxlLT5mX2ZsYWdzICovCisjZGVmaW5lIEZfU0VURkwJCTQJLyogc2V0IGZpbGUtPmZfZmxhZ3MgKi8KKyNkZWZpbmUgRl9HRVRMSwkJNQorI2RlZmluZSBGX1NFVExLCQk2CisjZGVmaW5lIEZfU0VUTEtXCTcKKworI2RlZmluZSBGX1NFVE9XTgk4CS8qICBmb3Igc29ja2V0cy4gKi8KKyNkZWZpbmUgRl9HRVRPV04JOQkvKiAgZm9yIHNvY2tldHMuICovCisjZGVmaW5lIEZfU0VUU0lHCTEwCS8qICBmb3Igc29ja2V0cy4gKi8KKyNkZWZpbmUgRl9HRVRTSUcJMTEJLyogIGZvciBzb2NrZXRzLiAqLworCisjZGVmaW5lIEZfR0VUTEs2NAkxMgkvKiAgdXNpbmcgJ3N0cnVjdCBmbG9jazY0JyAqLworI2RlZmluZSBGX1NFVExLNjQJMTMKKyNkZWZpbmUgRl9TRVRMS1c2NAkxNAorCisvKiBmb3IgRl9bR0VUfFNFVF1GTCAqLworI2RlZmluZSBGRF9DTE9FWEVDCTEJLyogYWN0dWFsbHkgYW55dGhpbmcgd2l0aCBsb3cgYml0IHNldCBnb2VzICovCisKKy8qIGZvciBwb3NpeCBmY250bCgpIGFuZCBsb2NrZigpICovCisjZGVmaW5lIEZfUkRMQ0sJCTAKKyNkZWZpbmUgRl9XUkxDSwkJMQorI2RlZmluZSBGX1VOTENLCQkyCisKKy8qIGZvciBvbGQgaW1wbGVtZW50YXRpb24gb2YgYnNkIGZsb2NrICgpICovCisjZGVmaW5lIEZfRVhMQ0sJCTQJLyogb3IgMyAqLworI2RlZmluZSBGX1NITENLCQk4CS8qIG9yIDQgKi8KKworLyogZm9yIGxlYXNlcyAqLworI2RlZmluZSBGX0lOUFJPR1JFU1MJMTYKKworLyogb3BlcmF0aW9ucyBmb3IgYnNkIGZsb2NrKCksIGFsc28gdXNlZCBieSB0aGUga2VybmVsIGltcGxlbWVudGF0aW9uICovCisjZGVmaW5lIExPQ0tfU0gJCTEJLyogc2hhcmVkIGxvY2sgKi8KKyNkZWZpbmUgTE9DS19FWAkJMgkvKiBleGNsdXNpdmUgbG9jayAqLworI2RlZmluZSBMT0NLX05CCQk0CS8qIG9yJ2Qgd2l0aCBvbmUgb2YgdGhlIGFib3ZlIHRvIHByZXZlbnQKKwkJCQkgICBibG9ja2luZyAqLworI2RlZmluZSBMT0NLX1VOCQk4CS8qIHJlbW92ZSBsb2NrICovCisKKyNkZWZpbmUgTE9DS19NQU5ECTMyCS8qIFRoaXMgaXMgYSBtYW5kYXRvcnkgZmxvY2sgKi8KKyNkZWZpbmUgTE9DS19SRUFECTY0CS8qIC4uLiBXaGljaCBhbGxvd3MgY29uY3VycmVudCByZWFkIG9wZXJhdGlvbnMgKi8KKyNkZWZpbmUgTE9DS19XUklURQkxMjgJLyogLi4uIFdoaWNoIGFsbG93cyBjb25jdXJyZW50IHdyaXRlIG9wZXJhdGlvbnMgKi8KKyNkZWZpbmUgTE9DS19SVwkJMTkyCS8qIC4uLiBXaGljaCBhbGxvd3MgY29uY3VycmVudCByZWFkICYgd3JpdGUgb3BzICovCisKK3N0cnVjdCBmbG9jayB7CisJc2hvcnQgbF90eXBlOworCXNob3J0IGxfd2hlbmNlOworCW9mZl90IGxfc3RhcnQ7CisJb2ZmX3QgbF9sZW47CisJcGlkX3QgbF9waWQ7Cit9OworCitzdHJ1Y3QgZmxvY2s2NCB7CisJc2hvcnQgIGxfdHlwZTsKKwlzaG9ydCAgbF93aGVuY2U7CisJbG9mZl90IGxfc3RhcnQ7CisJbG9mZl90IGxfbGVuOworCXBpZF90ICBsX3BpZDsKK307CisKKyNkZWZpbmUgRl9MSU5VWF9TUEVDSUZJQ19CQVNFCTEwMjQKKyNlbmRpZiAvKiBfTTY4S19GQ05UTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL2Zsb3BweS5oIGIvaW5jbHVkZS9hc20tbTY4ay9mbG9wcHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmU3MDhkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9mbG9wcHkuaApAQCAtMCwwICsxLDI1OSBAQAorLyoKKyAqIEltcGxlbWVudGF0aW9uIGluZGVwZW5kZW50IGJpdHMgb2YgdGhlIEZsb3BweSBkcml2ZXIuCisgKgorICogbXVjaCBvZiB0aGlzIGZpbGUgaXMgZGVyaXZlZCBmcm9tIHdoYXQgd2FzIG9yaWdpbmFsbHkgdGhlIFE0MCBmbG9wcHkgZHJpdmVyLgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMQorICoKKyAqIFN1bjN4IHN1cHBvcnQgYWRkZWQgMi80LzIwMDAgU2FtIENyZWFzZXkgKHNhbW15QHNhbW15Lm5ldCkKKyAqCisgKi8KKworI2luY2x1ZGUgPGFzbS9pby5oPgorCisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorCithc21saW5rYWdlIGlycXJldHVybl90IGZsb3BweV9oYXJkaW50KGludCBpcnEsIHZvaWQgKmRldl9pZCwKKwkJCQkgICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKKy8qIGNvbnN0YW50cy4uLiAqLworCisjdW5kZWYgTUFYX0RNQV9BRERSRVNTCisjZGVmaW5lIE1BWF9ETUFfQUREUkVTUyAgIDB4MDAgIC8qIG5vdGhpbmcgbGlrZSB0aGF0ICovCisKKworLyoKKyAqIEFnYWluLCB0aGUgQ01PUyBpbmZvcm1hdGlvbiBkb2Vzbid0IHdvcmsgb24gbTY4ay4uCisgKi8KKyNkZWZpbmUgRkxPUFBZMF9UWVBFIChNQUNIX0lTX1E0MCA/IDYgOiA0KQorI2RlZmluZSBGTE9QUFkxX1RZUEUgMAorCisjZGVmaW5lIEZMT1BQWV9NT1RPUl9NQVNLIDB4ZjAKKworCisvKiBiYXNpY2FsbHkgUEMgaW5pdCArIHNldCB1c2VfdmlydHVhbF9kbWEgKi8KKyNkZWZpbmUgIEZEQzEgbTY4a19mbG9wcHlfaW5pdCgpCisKKyNkZWZpbmUgTl9GREMgMQorI2RlZmluZSBOX0RSSVZFIDgKKworCisvKiB2ZG1hIGdsb2JhbHMgYWRhcHRlZCBmcm9tIGFzbS1pMzg2L2Zsb3BweS5oICovCisKK3N0YXRpYyBpbnQgdmlydHVhbF9kbWFfY291bnQ9MDsKK3N0YXRpYyBpbnQgdmlydHVhbF9kbWFfcmVzaWR1ZT0wOworc3RhdGljIGNoYXIgKnZpcnR1YWxfZG1hX2FkZHI9MDsKK3N0YXRpYyBpbnQgdmlydHVhbF9kbWFfbW9kZT0wOworc3RhdGljIGludCBkb2luZ19wZG1hPTA7CisKKyNpbmNsdWRlIDxhc20vc3VuM3hmbG9wLmg+CisKK2V4dGVybiBzcGlubG9ja190ICBkbWFfc3Bpbl9sb2NrOworCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGNsYWltX2RtYV9sb2NrKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZG1hX3NwaW5fbG9jaywgZmxhZ3MpOworCXJldHVybiBmbGFnczsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCByZWxlYXNlX2RtYV9sb2NrKHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZG1hX3NwaW5fbG9jaywgZmxhZ3MpOworfQorCisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGNoYXIgZmRfaW5iKGludCBwb3J0KQoreworCWlmKE1BQ0hfSVNfUTQwKQorCQlyZXR1cm4gaW5iX3AocG9ydCk7CisJZWxzZSBpZihNQUNIX0lTX1NVTjNYKQorCQlyZXR1cm4gc3VuM3hfODIwNzJfZmRfaW5iKHBvcnQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGZkX291dGIodW5zaWduZWQgY2hhciB2YWx1ZSwgaW50IHBvcnQpCit7CisJaWYoTUFDSF9JU19RNDApCisJCW91dGJfcCh2YWx1ZSwgcG9ydCk7CisJZWxzZSBpZihNQUNIX0lTX1NVTjNYKQorCQlzdW4zeF84MjA3Ml9mZF9vdXRiKHZhbHVlLCBwb3J0KTsKK30KKworCitzdGF0aWMgaW50IGZkX3JlcXVlc3RfaXJxKHZvaWQpCit7CisJaWYoTUFDSF9JU19RNDApCisJCXJldHVybiByZXF1ZXN0X2lycShGTE9QUFlfSVJRLCBmbG9wcHlfaGFyZGludCxTQV9JTlRFUlJVUFQsCisJCQkJCQkgICAiZmxvcHB5IiwgZmxvcHB5X2hhcmRpbnQpOworCWVsc2UgaWYoTUFDSF9JU19TVU4zWCkKKwkJcmV0dXJuIHN1bjN4ZmxvcF9yZXF1ZXN0X2lycSgpOworCXJldHVybiAtRU5YSU87Cit9CisKK3N0YXRpYyB2b2lkIGZkX2ZyZWVfaXJxKHZvaWQpCit7CisJaWYoTUFDSF9JU19RNDApCisJCWZyZWVfaXJxKEZMT1BQWV9JUlEsIGZsb3BweV9oYXJkaW50KTsKK30KKworI2RlZmluZSBmZF9yZXF1ZXN0X2RtYSgpICAgICAgICB2ZG1hX3JlcXVlc3RfZG1hKEZMT1BQWV9ETUEsImZsb3BweSIpCisjZGVmaW5lIGZkX2dldF9kbWFfcmVzaWR1ZSgpICAgIHZkbWFfZ2V0X2RtYV9yZXNpZHVlKEZMT1BQWV9ETUEpCisjZGVmaW5lIGZkX2RtYV9tZW1fYWxsb2Moc2l6ZSkJdmRtYV9tZW1fYWxsb2Moc2l6ZSkKKyNkZWZpbmUgZmRfZG1hX3NldHVwKGFkZHIsIHNpemUsIG1vZGUsIGlvKSB2ZG1hX2RtYV9zZXR1cChhZGRyLCBzaXplLCBtb2RlLCBpbykKKworI2RlZmluZSBmZF9lbmFibGVfaXJxKCkgICAgICAgICAgIC8qIG5vdGhpbmcuLi4gKi8KKyNkZWZpbmUgZmRfZGlzYWJsZV9pcnEoKSAgICAgICAgICAvKiBub3RoaW5nLi4uICovCisKKyNkZWZpbmUgZmRfZnJlZV9kbWEoKSAgICAgICAgICAgICAvKiBub3RoaW5nICovCisKKy8qIE5vIDY0ayBib3VuZGFyeSBjcm9zc2luZyBwcm9ibGVtcyBvbiBRNDAgLSBubyBETUEgYXQgYWxsICovCisjZGVmaW5lIENST1NTXzY0S0IoYSxzKSAoMCkKKworI2RlZmluZSBETUFfTU9ERV9SRUFEICAweDQ0ICAgIC8qIGkzODYgbG9vay1hbGlrZSAqLworI2RlZmluZSBETUFfTU9ERV9XUklURSAweDQ4CisKKworc3RhdGljIGludCBtNjhrX2Zsb3BweV9pbml0KHZvaWQpCit7CisgIHVzZV92aXJ0dWFsX2RtYSA9MTsKKyAgY2FuX3VzZV92aXJ0dWFsX2RtYSA9IDE7CisKKworICBpZiAoTUFDSF9JU19RNDApCisJICByZXR1cm4gMHgzZjA7CisgIGVsc2UgaWYoTUFDSF9JU19TVU4zWCkKKwkgIHJldHVybiBzdW4zeGZsb3BfaW5pdCgpOworICBlbHNlCisgICAgcmV0dXJuIC0xOworfQorCisKK3N0YXRpYyBpbnQgdmRtYV9yZXF1ZXN0X2RtYSh1bnNpZ25lZCBpbnQgZG1hbnIsIGNvbnN0IGNoYXIgKiBkZXZpY2VfaWQpCit7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCB2ZG1hX2dldF9kbWFfcmVzaWR1ZSh1bnNpZ25lZCBpbnQgZHVtbXkpCit7CisJcmV0dXJuIHZpcnR1YWxfZG1hX2NvdW50ICsgdmlydHVhbF9kbWFfcmVzaWR1ZTsKK30KKworCitzdGF0aWMgdW5zaWduZWQgbG9uZyB2ZG1hX21lbV9hbGxvYyh1bnNpZ25lZCBsb25nIHNpemUpCit7CisJcmV0dXJuICh1bnNpZ25lZCBsb25nKSB2bWFsbG9jKHNpemUpOworCit9CisKK3N0YXRpYyB2b2lkIF9mZF9kbWFfbWVtX2ZyZWUodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisgICAgICAgIHZmcmVlKCh2b2lkICopYWRkcik7Cit9CisjZGVmaW5lIGZkX2RtYV9tZW1fZnJlZShhZGRyLHNpemUpIF9mZF9kbWFfbWVtX2ZyZWUoYWRkciwgc2l6ZSkKKworCisvKiBjaG9vc2VfZG1hX21vZGUgPz8/Ki8KKworc3RhdGljIGludCB2ZG1hX2RtYV9zZXR1cChjaGFyICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIGludCBtb2RlLCBpbnQgaW8pCit7CisJZG9pbmdfcGRtYSA9IDE7CisJdmlydHVhbF9kbWFfcG9ydCA9IChNQUNIX0lTX1E0MCA/IGlvIDogMCk7CisJdmlydHVhbF9kbWFfbW9kZSA9IChtb2RlICA9PSBETUFfTU9ERV9XUklURSk7CisJdmlydHVhbF9kbWFfYWRkciA9IGFkZHI7CisJdmlydHVhbF9kbWFfY291bnQgPSBzaXplOworCXZpcnR1YWxfZG1hX3Jlc2lkdWUgPSAwOworCXJldHVybiAwOworfQorCisKKworc3RhdGljIHZvaWQgZmRfZGlzYWJsZV9kbWEodm9pZCkKK3sKKwlkb2luZ19wZG1hID0gMDsKKwl2aXJ0dWFsX2RtYV9yZXNpZHVlICs9IHZpcnR1YWxfZG1hX2NvdW50OworCXZpcnR1YWxfZG1hX2NvdW50PTA7Cit9CisKKworCisvKiB0aGlzIGlzIHRoZSBvbmx5IHRydWx5IFE0MCBzcGVjaWZpYyBmdW5jdGlvbiAqLworCithc21saW5rYWdlIGlycXJldHVybl90IGZsb3BweV9oYXJkaW50KGludCBpcnEsIHZvaWQgKmRldl9pZCwKKwkJCQkgICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlyZWdpc3RlciB1bnNpZ25lZCBjaGFyIHN0OworCisjdW5kZWYgVFJBQ0VfRkxQWV9JTlQKKyNkZWZpbmUgTk9fRkxPUFBZX0FTU0VNQkxFUgorCisjaWZkZWYgVFJBQ0VfRkxQWV9JTlQKKwlzdGF0aWMgaW50IGNhbGxzPTA7CisJc3RhdGljIGludCBieXRlcz0wOworCXN0YXRpYyBpbnQgZG1hX3dhaXQ9MDsKKyNlbmRpZgorCWlmKCFkb2luZ19wZG1hKSB7CisJCWZsb3BweV9pbnRlcnJ1cHQoaXJxLCBkZXZfaWQsIHJlZ3MpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCisjaWZkZWYgVFJBQ0VfRkxQWV9JTlQKKwlpZighY2FsbHMpCisJCWJ5dGVzID0gdmlydHVhbF9kbWFfY291bnQ7CisjZW5kaWYKKworCXsKKwkJcmVnaXN0ZXIgaW50IGxjb3VudDsKKwkJcmVnaXN0ZXIgY2hhciAqbHB0cjsKKworCQkvKiBzZXJ2ZSAxc3QgYnl0ZSBmYXN0OiAqLworCisJCXN0PTE7CisJCWZvcihsY291bnQ9dmlydHVhbF9kbWFfY291bnQsIGxwdHI9dmlydHVhbF9kbWFfYWRkcjsKKwkJICAgIGxjb3VudDsgbGNvdW50LS0sIGxwdHIrKykgeworCQkJc3Q9aW5iKHZpcnR1YWxfZG1hX3BvcnQrNCkgJiAweGEwIDsKKwkJCWlmKHN0ICE9IDB4YTApCisJCQkJYnJlYWs7CisJCQlpZih2aXJ0dWFsX2RtYV9tb2RlKQorCQkJCW91dGJfcCgqbHB0ciwgdmlydHVhbF9kbWFfcG9ydCs1KTsKKwkJCWVsc2UKKwkJCQkqbHB0ciA9IGluYl9wKHZpcnR1YWxfZG1hX3BvcnQrNSk7CisJCX0KKworCQl2aXJ0dWFsX2RtYV9jb3VudCA9IGxjb3VudDsKKwkJdmlydHVhbF9kbWFfYWRkciA9IGxwdHI7CisJCXN0ID0gaW5iKHZpcnR1YWxfZG1hX3BvcnQrNCk7CisJfQorCisjaWZkZWYgVFJBQ0VfRkxQWV9JTlQKKwljYWxscysrOworI2VuZGlmCisJaWYoc3QgPT0gMHgyMCkKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCWlmKCEoc3QgJiAweDIwKSkgeworCQl2aXJ0dWFsX2RtYV9yZXNpZHVlICs9IHZpcnR1YWxfZG1hX2NvdW50OworCQl2aXJ0dWFsX2RtYV9jb3VudD0wOworI2lmZGVmIFRSQUNFX0ZMUFlfSU5UCisJCXByaW50aygiY291bnQ9JXgsIHJlc2lkdWU9JXggY2FsbHM9JWQgYnl0ZXM9JWQgZG1hX3dhaXQ9JWRcbiIsCisJCSAgICAgICB2aXJ0dWFsX2RtYV9jb3VudCwgdmlydHVhbF9kbWFfcmVzaWR1ZSwgY2FsbHMsIGJ5dGVzLAorCQkgICAgICAgZG1hX3dhaXQpOworCQljYWxscyA9IDA7CisJCWRtYV93YWl0PTA7CisjZW5kaWYKKwkJZG9pbmdfcGRtYSA9IDA7CisJCWZsb3BweV9pbnRlcnJ1cHQoaXJxLCBkZXZfaWQsIHJlZ3MpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorI2lmZGVmIFRSQUNFX0ZMUFlfSU5UCisJaWYoIXZpcnR1YWxfZG1hX2NvdW50KQorCQlkbWFfd2FpdCsrOworI2VuZGlmCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisjZGVmaW5lIEVYVFJBX0ZMT1BQWV9QQVJBTVMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvZnB1LmggYi9pbmNsdWRlL2FzbS1tNjhrL2ZwdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiY2Y4NTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2ZwdS5oCkBAIC0wLDAgKzEsMjIgQEAKKyNpZm5kZWYgX19NNjhLX0ZQVV9ICisjZGVmaW5lIF9fTTY4S19GUFVfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKy8qCisgKiBNQVggZmxvYXRpbmcgcG9pbnQgdW5pdCBzdGF0ZSBzaXplIChGU0FWRS9GUkVTVE9SRSkKKyAqLworCisjaWYgZGVmaW5lZChDT05GSUdfTTY4MDIwKSB8fCBkZWZpbmVkKENPTkZJR19NNjgwMzApCisjZGVmaW5lIEZQU1RBVEVTSVpFICgyMTYvc2l6ZW9mKHVuc2lnbmVkIGNoYXIpKQorI2VsaWYgZGVmaW5lZChDT05GSUdfTTY4MDQwKQorI2RlZmluZSBGUFNUQVRFU0laRSAoOTYvc2l6ZW9mKHVuc2lnbmVkIGNoYXIpKQorI2VsaWYgZGVmaW5lZChDT05GSUdfTTY4S0ZQVV9FTVUpCisjZGVmaW5lIEZQU1RBVEVTSVpFICgyOC9zaXplb2YodW5zaWduZWQgY2hhcikpCisjZWxpZiBkZWZpbmVkKENPTkZJR19NNjgwNjApCisjZGVmaW5lIEZQU1RBVEVTSVpFICgxMi9zaXplb2YodW5zaWduZWQgY2hhcikpCisjZWxzZQorI2RlZmluZSBGUFNUQVRFU0laRSBlcnJvciBub19jcHVfdHlwZV9jb25maWd1cmVkCisjZW5kaWYKKworI2VuZGlmIC8qIF9fTTY4S19GUFVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9oYXJkaXJxLmggYi9pbmNsdWRlL2FzbS1tNjhrL2hhcmRpcnEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjgzMThiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9oYXJkaXJxLmgKQEAgLTAsMCArMSwyNiBAQAorI2lmbmRlZiBfX002OEtfSEFSRElSUV9ICisjZGVmaW5lIF9fTTY4S19IQVJESVJRX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgorCisvKiBlbnRyeS5TIGlzIHNlbnNpdGl2ZSB0byB0aGUgb2Zmc2V0cyBvZiB0aGVzZSBmaWVsZHMgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQgX19zb2Z0aXJxX3BlbmRpbmc7Cit9IF9fX19jYWNoZWxpbmVfYWxpZ25lZCBpcnFfY3B1c3RhdF90OworCisjaW5jbHVkZSA8bGludXgvaXJxX2NwdXN0YXQuaD4JLyogU3RhbmRhcmQgbWFwcGluZ3MgZm9yIGlycV9jcHVzdGF0X3QgYWJvdmUgKi8KKworI2RlZmluZSBIQVJESVJRX0JJVFMJOAorCisvKgorICogVGhlIGhhcmRpcnEgbWFzayBoYXMgdG8gYmUgbGFyZ2UgZW5vdWdoIHRvIGhhdmUKKyAqIHNwYWNlIGZvciBwb3RlbnRpYWxseSBhbGwgSVJRIHNvdXJjZXMgaW4gdGhlIHN5c3RlbQorICogbmVzdGluZyBvbiBhIHNpbmdsZSBDUFU6CisgKi8KKyNpZiAoMSA8PCBIQVJESVJRX0JJVFMpIDwgTlJfSVJRUworIyBlcnJvciBIQVJESVJRX0JJVFMgaXMgdG9vIGxvdyEKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvaGRyZWcuaCBiL2luY2x1ZGUvYXNtLW02OGsvaGRyZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTg5YmJjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9oZHJlZy5oCkBAIC0wLDAgKzEgQEAKKyN3YXJuaW5nIHRoaXMgZmlsZSBpcyBvYnNvbGV0ZSwgcGxlYXNlIGRvIG5vdCB1c2UgaXQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvaHAzMDBody5oIGIvaW5jbHVkZS9hc20tbTY4ay9ocDMwMGh3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk5OGVhNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvaHAzMDBody5oCkBAIC0wLDAgKzEsMjUgQEAKKyNpZm5kZWYgX002OEtfSFAzMDBIV19ICisjZGVmaW5lIF9NNjhLX0hQMzAwSFdfSAorCitleHRlcm4gdW5zaWduZWQgbG9uZyBocDMwMF9tb2RlbDsKKworLyogVGhpcyBpbmZvcm1hdGlvbiB3YXMgdGFrZW4gZnJvbSBOZXRCU0QgKi8KKyNkZWZpbmUJSFBfMzIwCQkoMCkJLyogMTZNSHogNjgwMjArSFAgTU1VKzE2SyBleHRlcm5hbCBjYWNoZSAqLworI2RlZmluZQlIUF8zMzAJCSgxKQkvKiAxNk1IeiA2ODAyMCs2ODg1MSBNTVUgKi8KKyNkZWZpbmUJSFBfMzQwCQkoMikJLyogMTZNSHogNjgwMzAgKi8KKyNkZWZpbmUJSFBfMzQ1CQkoMykJLyogNTBNSHogNjgwMzArMzJLIGV4dGVybmFsIGNhY2hlICovCisjZGVmaW5lCUhQXzM1MAkJKDQpCS8qIDI1TUh6IDY4MDIwK0hQIE1NVSszMksgZXh0ZXJuYWwgY2FjaGUgKi8KKyNkZWZpbmUJSFBfMzYwCQkoNSkJLyogMjVNSHogNjgwMzAgKi8KKyNkZWZpbmUJSFBfMzcwCQkoNikJLyogMzNNSHogNjgwMzArNjRLIGV4dGVybmFsIGNhY2hlICovCisjZGVmaW5lCUhQXzM3NQkJKDcpCS8qIDUwTUh6IDY4MDMwKzMySyBleHRlcm5hbCBjYWNoZSAqLworI2RlZmluZQlIUF8zODAJCSg4KQkvKiAyNU1IeiA2ODA0MCAqLworI2RlZmluZQlIUF8zODUJCSg5KQkvKiAzM01IeiA2ODA0MCAqLworCisjZGVmaW5lCUhQXzQwMAkJKDEwKQkvKiA1ME1IeiA2ODAzMCszMksgZXh0ZXJuYWwgY2FjaGUgKi8KKyNkZWZpbmUJSFBfNDI1VAkJKDExKQkvKiAyNU1IeiA2ODA0MCAtIG1vZGVsIDQyNXQgKi8KKyNkZWZpbmUJSFBfNDI1UwkJKDEyKQkvKiAyNU1IeiA2ODA0MCAtIG1vZGVsIDQyNXMgKi8KKyNkZWZpbmUgSFBfNDI1RQkJKDEzKQkvKiAyNU1IeiA2ODA0MCAtIG1vZGVsIDQyNWUgKi8KKyNkZWZpbmUgSFBfNDMzVAkJKDE0KQkvKiAzM01IeiA2ODA0MCAtIG1vZGVsIDQzM3QgKi8KKyNkZWZpbmUgSFBfNDMzUwkJKDE1KQkvKiAzM01IeiA2ODA0MCAtIG1vZGVsIDQzM3MgKi8KKworI2VuZGlmIC8qIF9NNjhLX0hQMzAwSFdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9od19pcnEuaCBiL2luY2x1ZGUvYXNtLW02OGsvaHdfaXJxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFjZWYwOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvaHdfaXJxLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fQVNNX002OEtfSFdfSVJRX0gKKyNkZWZpbmUgX19BU01fTTY4S19IV19JUlFfSAorCisvKiBEdW1teSBpbmNsdWRlLiAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvaHd0ZXN0LmggYi9pbmNsdWRlL2FzbS1tNjhrL2h3dGVzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwMmM4YTQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2h3dGVzdC5oCkBAIC0wLDAgKzEsMTUgQEAKKy8qIFJvdXRpbmVzIHRvIHRlc3QgZm9yIHByZXNlbmNlL2Fic2VuY2Ugb2YgaGFyZHdhcmUgcmVnaXN0ZXJzOgorICogc2VlIGFyY2gvbTY4ay9tbS9od3Rlc3QuYy4KKyAqICAtLSBQTU0gPHBtYXlkZWxsQGNoaWFyay5ncmVlbmVuZC5vcmcudWs+IDA1LzE5OTgKKyAqCisgKiBSZW1vdmVkIF9faW5pdCBmcm9tIGRlY2xzLiAgV2UgbWlnaHQgd2FudCB0aGVtIGluIG1vZHVsZXMsIGFuZAorICogdGhlIGNvZGUgaXMgdGlueSBhbnl3YXkuICAxNi81Lzk4IHBiCisgKi8KKworI2lmbmRlZiBfX0FTTV9IV1RFU1RfSAorI2RlZmluZSBfX0FTTV9IV1RFU1RfSAorCitleHRlcm4gaW50IGh3cmVnX3ByZXNlbnQodm9sYXRpbGUgdm9pZCAqcmVncCk7CitleHRlcm4gaW50IGh3cmVnX3dyaXRlKHZvbGF0aWxlIHZvaWQgKnJlZ3AsIHVuc2lnbmVkIHNob3J0IHZhbCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9pZGUuaCBiL2luY2x1ZGUvYXNtLW02OGsvaWRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzYxMThmZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvaWRlLmgKQEAgLTAsMCArMSwxNDQgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tbTY4ay9pZGUuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTQtMTk5NiAgTGludXMgVG9ydmFsZHMgJiBhdXRob3JzCisgKi8KKworLyogQ29weXJpZ2h0KGMpIDE5OTYgS2FycyBkZSBKb25nICovCisvKiBCYXNlZCBvbiB0aGUgaWRlIGRyaXZlciBmcm9tIDEuMi4xM3BsOCAqLworCisvKgorICogQ3JlZGl0cyAoYWxwaGFiZXRpY2FsKToKKyAqCisgKiAgLSBCam9lcm4gQnJhdWVsCisgKiAgLSBLYXJzIGRlIEpvbmcKKyAqICAtIFRvcnN0ZW4gRWJlbGluZworICogIC0gRHdpZ2h0IEVuZ2VuCisgKiAgLSBUaG9yc3RlbiBGbG9lY2sKKyAqICAtIFJvbWFuIEhvZGVrCisgKiAgLSBHdWVudGhlciBLZWxsZXRlcgorICogIC0gQ2hyaXMgTGF3cmVuY2UKKyAqICAtIE1pY2hhZWwgUmF1c2NoCisgKiAgLSBDaHJpc3RpYW4gU2F1ZXIKKyAqICAtIE1pY2hhZWwgU2NobWl0egorICogIC0gSmVzIFNvZXJlbnNlbgorICogIC0gTWljaGFlbCBUaHVybQorICogIC0gR2VlcnQgVXl0dGVyaG9ldmVuCisgKi8KKworI2lmbmRlZiBfTTY4S19JREVfSAorI2RlZmluZSBfTTY4S19JREVfSAorCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisKKyNpZmRlZiBDT05GSUdfQVRBUkkKKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxhc20vYXRhcmlfc3RkbWEuaD4KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQworI2luY2x1ZGUgPGFzbS9tYWNpbnRzLmg+CisjZW5kaWYKKworI2lmbmRlZiBNQVhfSFdJRlMKKyNkZWZpbmUgTUFYX0hXSUZTCTQJLyogc2FtZSBhcyB0aGUgb3RoZXIgYXJjaHMgKi8KKyNlbmRpZgorCisvKgorICogR2V0IHJpZCBvZiBkZWZzIGZyb20gaW8uaCAtIGlkZSBoYXMgaXRzIHByaXZhdGUgYW5kIGNvbmZsaWN0aW5nIHZlcnNpb25zCisgKiBTaW5jZSBzbyBmYXIgbm8gc2luZ2xlIG02OGsgcGxhdGZvcm0gdXNlcyBJU0EvUENJIEkvTyBzcGFjZSBmb3IgSURFLCB3ZQorICogYWx3YXlzIHVzZSB0aGUgYHJhdycgTU1JTyB2ZXJzaW9ucworICovCisjdW5kZWYgaW5iCisjdW5kZWYgaW53CisjdW5kZWYgaW5zdworI3VuZGVmIGlubAorI3VuZGVmIGluc2wKKyN1bmRlZiBvdXRiCisjdW5kZWYgb3V0dworI3VuZGVmIG91dHN3CisjdW5kZWYgb3V0bAorI3VuZGVmIG91dHNsCisjdW5kZWYgcmVhZGIKKyN1bmRlZiByZWFkdworI3VuZGVmIHJlYWRsCisjdW5kZWYgd3JpdGViCisjdW5kZWYgd3JpdGV3CisjdW5kZWYgd3JpdGVsCisKKyNkZWZpbmUgaW5iCQkJCWluXzgKKyNkZWZpbmUgaW53CQkJCWluX2JlMTYKKyNkZWZpbmUgaW5zdyhwb3J0LCBhZGRyLCBuKQkJcmF3X2luc3coKHUxNiAqKXBvcnQsIGFkZHIsIG4pCisjZGVmaW5lIGlubAkJCQlpbl9iZTMyCisjZGVmaW5lIGluc2wocG9ydCwgYWRkciwgbikJCXJhd19pbnNsKCh1MzIgKilwb3J0LCBhZGRyLCBuKQorI2RlZmluZSBvdXRiKHZhbCwgcG9ydCkJCQlvdXRfOChwb3J0LCB2YWwpCisjZGVmaW5lIG91dHcodmFsLCBwb3J0KQkJCW91dF9iZTE2KHBvcnQsIHZhbCkKKyNkZWZpbmUgb3V0c3cocG9ydCwgYWRkciwgbikJCXJhd19vdXRzdygodTE2ICopcG9ydCwgYWRkciwgbikKKyNkZWZpbmUgb3V0bCh2YWwsIHBvcnQpCQkJb3V0X2JlMzIocG9ydCwgdmFsKQorI2RlZmluZSBvdXRzbChwb3J0LCBhZGRyLCBuKQkJcmF3X291dHNsKCh1MzIgKilwb3J0LCBhZGRyLCBuKQorI2RlZmluZSByZWFkYgkJCQlpbl84CisjZGVmaW5lIHJlYWR3CQkJCWluX2JlMTYKKyNkZWZpbmUgX19pZGVfbW1faW5zdyhwb3J0LCBhZGRyLCBuKQlyYXdfaW5zdygodTE2ICopcG9ydCwgYWRkciwgbikKKyNkZWZpbmUgcmVhZGwJCQkJaW5fYmUzMgorI2RlZmluZSBfX2lkZV9tbV9pbnNsKHBvcnQsIGFkZHIsIG4pCXJhd19pbnNsKCh1MzIgKilwb3J0LCBhZGRyLCBuKQorI2RlZmluZSB3cml0ZWIodmFsLCBwb3J0KQkJb3V0XzgocG9ydCwgdmFsKQorI2RlZmluZSB3cml0ZXcodmFsLCBwb3J0KQkJb3V0X2JlMTYocG9ydCwgdmFsKQorI2RlZmluZSBfX2lkZV9tbV9vdXRzdyhwb3J0LCBhZGRyLCBuKQlyYXdfb3V0c3coKHUxNiAqKXBvcnQsIGFkZHIsIG4pCisjZGVmaW5lIHdyaXRlbCh2YWwsIHBvcnQpCQlvdXRfYmUzMihwb3J0LCB2YWwpCisjZGVmaW5lIF9faWRlX21tX291dHNsKHBvcnQsIGFkZHIsIG4pCXJhd19vdXRzbCgodTMyICopcG9ydCwgYWRkciwgbikKKyNpZiBkZWZpbmVkKENPTkZJR19BVEFSSSkgfHwgZGVmaW5lZChDT05GSUdfUTQwKQorI2RlZmluZSBpbnN3X3N3YXB3KHBvcnQsIGFkZHIsIG4pCXJhd19pbnN3X3N3YXB3KCh1MTYgKilwb3J0LCBhZGRyLCBuKQorI2RlZmluZSBvdXRzd19zd2Fwdyhwb3J0LCBhZGRyLCBuKQlyYXdfb3V0c3dfc3dhcHcoKHUxNiAqKXBvcnQsIGFkZHIsIG4pCisjZW5kaWYKKworCisvKiBRNDAgYW5kIEF0YXJpIGhhdmUgYnl0ZXN3YXBwZWQgSURFIGJ1c3NlcyBhbmQgc2luY2UgbWFueSBpbnRlcmVzdGluZworICogdmFsdWVzIGluIHRoZSBpZGVudGlmaWNhdGlvbiBzdHJpbmcgYXJlIHRleHQsIGNoYXJzIGFuZCB3b3JkcyB0aGV5CisgKiBoYXBwZW5lZCB0byBiZSBhbG1vc3QgY29ycmVjdCB3aXRob3V0IHN3YXBwaW5nLi4gSG93ZXZlciAqX2NhcGFjaXR5CisgKiBpcyBuZWVkZWQgZm9yIGRyaXZlcyBvdmVyIDggR0IuIFJaICovCisjaWYgZGVmaW5lZChDT05GSUdfUTQwKSB8fCBkZWZpbmVkKENPTkZJR19BVEFSSSkKKyNkZWZpbmUgTTY4S19JREVfU1dBUFcgIChNQUNIX0lTX1E0MCB8fCBNQUNIX0lTX0FUQVJJKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQkxLX0RFVl9GQUxDT05fSURFCisjZGVmaW5lIElERV9BUkNIX0xPQ0sKKworZXh0ZXJuIGludCBmYWxjb25pZGVfaW50cl9sb2NrOworCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGlkZV9yZWxlYXNlX2xvY2sgKHZvaWQpCit7CisJaWYgKE1BQ0hfSVNfQVRBUkkpIHsKKwkJaWYgKGZhbGNvbmlkZV9pbnRyX2xvY2sgPT0gMCkgeworCQkJcHJpbnRrKCJpZGVfcmVsZWFzZV9sb2NrOiBidWdcbiIpOworCQkJcmV0dXJuOworCQl9CisJCWZhbGNvbmlkZV9pbnRyX2xvY2sgPSAwOworCQlzdGRtYV9yZWxlYXNlKCk7CisJfQorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkCitpZGVfZ2V0X2xvY2soaXJxcmV0dXJuX3QgKCpoYW5kbGVyKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKiksIHZvaWQgKmRhdGEpCit7CisJaWYgKE1BQ0hfSVNfQVRBUkkpIHsKKwkJaWYgKGZhbGNvbmlkZV9pbnRyX2xvY2sgPT0gMCkgeworCQkJaWYgKGluX2ludGVycnVwdCgpID4gMCkKKwkJCQlwYW5pYyggIkZhbGNvbiBJREUgaGFzbid0IFNULURNQSBsb2NrIGluIGludGVycnVwdCIgKTsKKwkJCXN0ZG1hX2xvY2soaGFuZGxlciwgZGF0YSk7CisJCQlmYWxjb25pZGVfaW50cl9sb2NrID0gMTsKKwkJfQorCX0KK30KKyNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9GQUxDT05fSURFICovCisKKyNkZWZpbmUgSURFX0FSQ0hfQUNLX0lOVFIKKyNkZWZpbmUgaWRlX2Fja19pbnRyKGh3aWYpCSgoaHdpZiktPmh3LmFja19pbnRyID8gKGh3aWYpLT5ody5hY2tfaW50cihod2lmKSA6IDEpCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYgLyogX002OEtfSURFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvaWRwcm9tLmggYi9pbmNsdWRlL2FzbS1tNjhrL2lkcHJvbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzNDllYWYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2lkcHJvbS5oCkBAIC0wLDAgKzEsOCBAQAorI2lmbmRlZiBfTTY4S19JRFBST01fSAorI2RlZmluZSBfTTY4S19JRFBST01fSAorI2luY2x1ZGUgPGFzbS1zcGFyYy9pZHByb20uaD4KKworLyogU3VuMzogaW4gY29udHJvbCBzcGFjZSAqLworI2RlZmluZSBTVU4zX0lEUFJPTV9CQVNFCTB4MDAwMDAwMDAKKworI2VuZGlmIC8qICEoX002OEtfSURQUk9NX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL2ludGVyc2lsLmggYi9pbmNsdWRlL2FzbS1tNjhrL2ludGVyc2lsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ4MjkwMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvaW50ZXJzaWwuaApAQCAtMCwwICsxLDQ4IEBACisjaWZuZGVmIF9TVU4zX0lOVEVSU0lMX0gKKyNkZWZpbmUgX1NVTjNfSU5URVJTSUxfSAorLyogYml0cyAwIGFuZCAxICovCisjZGVmaW5lIElOVEVSU0lMX0ZSRVFfMzJLICAgICAgICAweDAwCisjZGVmaW5lIElOVEVSU0lMX0ZSRVFfMU0gICAgICAgICAweDAxCisjZGVmaW5lIElOVEVSU0lMX0ZSRVFfMk0gICAgICAgICAweDAyCisjZGVmaW5lIElOVEVSU0lMX0ZSRVFfNE0gICAgICAgICAweDAzCisKKy8qIGJpdCAyICovCisjZGVmaW5lIElOVEVSU0lMXzEySF9NT0RFICAgMHgwMAorI2RlZmluZSBJTlRFUlNJTF8yNEhfTU9ERSAgIDB4MDQKKworLyogYml0IDMgKi8KKyNkZWZpbmUgSU5URVJTSUxfU1RPUCAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgSU5URVJTSUxfUlVOICAgICAgICAgICAgIDB4MDgKKworLyogYml0IDQgKi8KKyNkZWZpbmUgSU5URVJTSUxfSU5UX0VOQUJMRSAgICAgMHgxMAorI2RlZmluZSBJTlRFUlNJTF9JTlRfRElTQUJMRSAgICAweDAwCisKKy8qIGJpdCA1ICovCisjZGVmaW5lIElOVEVSU0lMX01PREVfTk9STUFMICAgICAweDAwCisjZGVmaW5lIElOVEVSU0lMX01PREVfVEVTVCAgICAgICAweDIwCisKKyNkZWZpbmUgSU5URVJTSUxfSFpfMTAwX01BU0sJIDB4MDIKKworc3RydWN0IGludGVyc2lsX2R0IHsKKwl1bnNpZ25lZCBjaGFyCWNzZWM7CisJdW5zaWduZWQgY2hhcglob3VyOworCXVuc2lnbmVkIGNoYXIJbWludXRlOworCXVuc2lnbmVkIGNoYXIJc2Vjb25kOworCXVuc2lnbmVkIGNoYXIJbW9udGg7CisJdW5zaWduZWQgY2hhcglkYXk7CisJdW5zaWduZWQgY2hhcgl5ZWFyOworCXVuc2lnbmVkIGNoYXIJd2Vla2RheTsKK307CisKK3N0cnVjdCBpbnRlcnNpbF83MTcwIHsKKwlzdHJ1Y3QgaW50ZXJzaWxfZHQgY291bnRlcjsKKwlzdHJ1Y3QgaW50ZXJzaWxfZHQgYWxhcm07CisJdW5zaWduZWQgY2hhcglpbnRfcmVnOworCXVuc2lnbmVkIGNoYXIJY21kX3JlZzsKK307CisKK2V4dGVybiB2b2xhdGlsZSBjaGFyKiBjbG9ja192YTsKKyNkZWZpbmUgaW50ZXJzaWxfY2xvY2sgKCh2b2xhdGlsZSBzdHJ1Y3QgaW50ZXJzaWxfNzE3MCAqKSBjbG9ja192YSkKKyNkZWZpbmUgaW50ZXJzaWxfY2xlYXIoKSAodm9pZClpbnRlcnNpbF9jbG9jay0+aW50X3JlZworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL2lvLmggYi9pbmNsdWRlL2FzbS1tNjhrL2lvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJiOGIwZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvaW8uaApAQCAtMCwwICsxLDM3NiBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLW02OGsvaW8uaAorICoKKyAqIDQvMS8wMCBSWjogLSByZXdyaXR0ZW4gdG8gYXZvaWQgY2xhc2hlcyBiZXR3ZWVuIElTQS9QQ0kgYW5kIG90aGVyCisgKiAgICAgICAgICAgICAgSU8gYWNjZXNzCisgKiAgICAgICAgICAgIC0gYWRkZWQgUTQwIHN1cHBvcnQKKyAqICAgICAgICAgICAgLSBhZGRlZCBza2VsZXRvbiBmb3IgR0ctSUkgYW5kIEFtaWdhIFBDTUNJQQorICogMi8zLzAxIFJaOiAtIG1vdmVkIGEgZmV3IG1vcmUgZGVmcyBpbnRvIHJhd19pby5oCisgKgorICogaW5YL291dFgvcmVhZFgvd3JpdGVYIHNob3VsZCBub3QgYmUgdXNlZCBieSBhbnkgZHJpdmVyIHVubGVzcyBpdCBkb2VzCisgKiBJU0Egb3IgUENJIGFjY2Vzcy4gT3RoZXIgZHJpdmVycyBzaG91bGQgdXNlIGZ1bmN0aW9uIGRlZmluZWQgaW4gcmF3X2lvLmgKKyAqIG9yIGRlZmluZSBpdHMgb3duIG1hY3JvcyBvbiB0b3Agb2YgdGhlc2UuCisgKgorICogICAgaW5YKCksb3V0WCgpICAgICAgICAgICAgICBhcmUgZm9yIFBDSSBhbmQgSVNBIEkvTworICogICAgcmVhZFgoKSx3cml0ZVgoKSAgICAgICAgICBhcmUgZm9yIFBDSSBtZW1vcnkKKyAqICAgIGlzYV9yZWFkWCgpLGlzYV93cml0ZVgoKSAgYXJlIGZvciBJU0EgbWVtb3J5CisgKgorICogbW92ZWQgbWVte2NweSxzZXR9XyppbyBpbnNpZGUgQ09ORklHX1BDSQorICovCisKKyNpZm5kZWYgX0lPX0gKKyNkZWZpbmUgX0lPX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS9yYXdfaW8uaD4KKyNpbmNsdWRlIDxhc20vdmlydGNvbnZlcnQuaD4KKworCisjaWZkZWYgQ09ORklHX0FUQVJJCisjaW5jbHVkZSA8YXNtL2F0YXJpaHcuaD4KKyNlbmRpZgorCisKKy8qCisgKiBJTy9NRU0gZGVmaW5pdGlvbnMgZm9yIHZhcmlvdXMgSVNBIGJyaWRnZXMKKyAqLworCisKKyNpZmRlZiBDT05GSUdfUTQwCisKKyNkZWZpbmUgcTQwX2lzYV9pb19iYXNlICAweGZmNDAwMDAwCisjZGVmaW5lIHE0MF9pc2FfbWVtX2Jhc2UgMHhmZjgwMDAwMAorCisjZGVmaW5lIFE0MF9JU0FfSU9fQihpb2FkZHIpIChxNDBfaXNhX2lvX2Jhc2UrMSs0KigodW5zaWduZWQgbG9uZykoaW9hZGRyKSkpCisjZGVmaW5lIFE0MF9JU0FfSU9fVyhpb2FkZHIpIChxNDBfaXNhX2lvX2Jhc2UrICA0KigodW5zaWduZWQgbG9uZykoaW9hZGRyKSkpCisjZGVmaW5lIFE0MF9JU0FfTUVNX0IobWFkcikgIChxNDBfaXNhX21lbV9iYXNlKzErNCooKHVuc2lnbmVkIGxvbmcpKG1hZHIpKSkKKyNkZWZpbmUgUTQwX0lTQV9NRU1fVyhtYWRyKSAgKHE0MF9pc2FfbWVtX2Jhc2UrICA0KigodW5zaWduZWQgbG9uZykobWFkcikpKQorCisjZGVmaW5lIE1VTFRJX0lTQSAwCisjZW5kaWYgLyogUTQwICovCisKKy8qIEdHLUlJIFpvcnJvIHRvIElTQSBicmlkZ2UgKi8KKyNpZmRlZiBDT05GSUdfR0cyCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIGdnMl9pc2FfYmFzZTsKKyNkZWZpbmUgR0cyX0lTQV9JT19CKGlvYWRkcikgKGdnMl9pc2FfYmFzZSsxKygodW5zaWduZWQgbG9uZykoaW9hZGRyKSo0KSkKKyNkZWZpbmUgR0cyX0lTQV9JT19XKGlvYWRkcikgKGdnMl9pc2FfYmFzZSsgICgodW5zaWduZWQgbG9uZykoaW9hZGRyKSo0KSkKKyNkZWZpbmUgR0cyX0lTQV9NRU1fQihtYWRyKSAgKGdnMl9pc2FfYmFzZSsxKygoKHVuc2lnbmVkIGxvbmcpKG1hZHIpKjQpICYgMHhmZmZmZikpCisjZGVmaW5lIEdHMl9JU0FfTUVNX1cobWFkcikgIChnZzJfaXNhX2Jhc2UrICAoKCh1bnNpZ25lZCBsb25nKShtYWRyKSo0KSAmIDB4ZmZmZmYpKQorCisjaWZuZGVmIE1VTFRJX0lTQQorI2RlZmluZSBNVUxUSV9JU0EgMAorI2Vsc2UKKyN1bmRlZiBNVUxUSV9JU0EKKyNkZWZpbmUgTVVMVElfSVNBIDEKKyNlbmRpZgorI2VuZGlmIC8qIEdHMiAqLworCisjaWZkZWYgQ09ORklHX0FNSUdBX1BDTUNJQQorI2luY2x1ZGUgPGFzbS9hbWlnYXlsZS5oPgorCisjZGVmaW5lIEFHX0lTQV9JT19CKGlvYWRkcikgKCBHQVlMRV9JTysoaW9hZGRyKSsoKChpb2FkZHIpJjEpKkdBWUxFX09ERCkgKQorI2RlZmluZSBBR19JU0FfSU9fVyhpb2FkZHIpICggR0FZTEVfSU8rKGlvYWRkcikgKQorCisjaWZuZGVmIE1VTFRJX0lTQQorI2RlZmluZSBNVUxUSV9JU0EgMAorI2Vsc2UKKyN1bmRlZiBNVUxUSV9JU0EKKyNkZWZpbmUgTVVMVElfSVNBIDEKKyNlbmRpZgorI2VuZGlmIC8qIEFNSUdBX1BDTUNJQSAqLworCisKKworI2lmZGVmIENPTkZJR19JU0EKKworI2lmIE1VTFRJX0lTQSA9PSAwCisjdW5kZWYgTVVMVElfSVNBCisjZW5kaWYKKworI2RlZmluZSBRNDBfSVNBICgxKQorI2RlZmluZSBHRzJfSVNBICgyKQorI2RlZmluZSBBR19JU0EgICgzKQorCisjaWYgZGVmaW5lZChDT05GSUdfUTQwKSAmJiAhZGVmaW5lZChNVUxUSV9JU0EpCisjZGVmaW5lIElTQV9UWVBFIFE0MF9JU0EKKyNkZWZpbmUgSVNBX1NFWCAgMAorI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfQU1JR0FfUENNQ0lBKSAmJiAhZGVmaW5lZChNVUxUSV9JU0EpCisjZGVmaW5lIElTQV9UWVBFIEFHX0lTQQorI2RlZmluZSBJU0FfU0VYICAxCisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19HRzIpICYmICFkZWZpbmVkKE1VTFRJX0lTQSkKKyNkZWZpbmUgSVNBX1RZUEUgR0cyX0lTQQorI2RlZmluZSBJU0FfU0VYICAwCisjZW5kaWYKKworI2lmZGVmIE1VTFRJX0lTQQorZXh0ZXJuIGludCBpc2FfdHlwZTsKK2V4dGVybiBpbnQgaXNhX3NleDsKKworI2RlZmluZSBJU0FfVFlQRSBpc2FfdHlwZQorI2RlZmluZSBJU0FfU0VYICBpc2Ffc2V4CisjZW5kaWYKKworLyoKKyAqIGRlZmluZSBpbmxpbmUgYWRkciB0cmFuc2xhdGlvbiBmdW5jdGlvbnMuIE5vcm1hbGx5IG9ubHkgb25lIHZhcmlhbnQgd2lsbAorICogYmUgY29tcGlsZWQgaW4gc28gdGhlIGNhc2Ugc3RhdGVtZW50IHdpbGwgYmUgb3B0aW1pc2VkIGF3YXkKKyAqLworCitzdGF0aWMgaW5saW5lIHU4ICppc2FfaXRiKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKyAgc3dpdGNoKElTQV9UWVBFKQorICAgIHsKKyNpZmRlZiBDT05GSUdfUTQwCisgICAgY2FzZSBRNDBfSVNBOiByZXR1cm4gKHU4ICopUTQwX0lTQV9JT19CKGFkZHIpOworI2VuZGlmCisjaWZkZWYgQ09ORklHX0dHMgorICAgIGNhc2UgR0cyX0lTQTogcmV0dXJuICh1OCAqKUdHMl9JU0FfSU9fQihhZGRyKTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BTUlHQV9QQ01DSUEKKyAgICBjYXNlIEFHX0lTQTogcmV0dXJuICh1OCAqKUFHX0lTQV9JT19CKGFkZHIpOworI2VuZGlmCisgICAgZGVmYXVsdDogcmV0dXJuIDA7IC8qIGF2b2lkIHdhcm5pbmdzLCBqdXN0IGluIGNhc2UgKi8KKyAgICB9Cit9CitzdGF0aWMgaW5saW5lIHUxNiAqaXNhX2l0dyh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisgIHN3aXRjaChJU0FfVFlQRSkKKyAgICB7CisjaWZkZWYgQ09ORklHX1E0MAorICAgIGNhc2UgUTQwX0lTQTogcmV0dXJuICh1MTYgKilRNDBfSVNBX0lPX1coYWRkcik7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfR0cyCisgICAgY2FzZSBHRzJfSVNBOiByZXR1cm4gKHUxNiAqKUdHMl9JU0FfSU9fVyhhZGRyKTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BTUlHQV9QQ01DSUEKKyAgICBjYXNlIEFHX0lTQTogcmV0dXJuICh1MTYgKilBR19JU0FfSU9fVyhhZGRyKTsKKyNlbmRpZgorICAgIGRlZmF1bHQ6IHJldHVybiAwOyAvKiBhdm9pZCB3YXJuaW5ncywganVzdCBpbiBjYXNlICovCisgICAgfQorfQorc3RhdGljIGlubGluZSB1OCAqaXNhX210Yih1bnNpZ25lZCBsb25nIGFkZHIpCit7CisgIHN3aXRjaChJU0FfVFlQRSkKKyAgICB7CisjaWZkZWYgQ09ORklHX1E0MAorICAgIGNhc2UgUTQwX0lTQTogcmV0dXJuICh1OCAqKVE0MF9JU0FfTUVNX0IoYWRkcik7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfR0cyCisgICAgY2FzZSBHRzJfSVNBOiByZXR1cm4gKHU4ICopR0cyX0lTQV9NRU1fQihhZGRyKTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BTUlHQV9QQ01DSUEKKyAgICBjYXNlIEFHX0lTQTogcmV0dXJuICh1OCAqKWFkZHI7CisjZW5kaWYKKyAgICBkZWZhdWx0OiByZXR1cm4gMDsgLyogYXZvaWQgd2FybmluZ3MsIGp1c3QgaW4gY2FzZSAqLworICAgIH0KK30KK3N0YXRpYyBpbmxpbmUgdTE2ICppc2FfbXR3KHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKyAgc3dpdGNoKElTQV9UWVBFKQorICAgIHsKKyNpZmRlZiBDT05GSUdfUTQwCisgICAgY2FzZSBRNDBfSVNBOiByZXR1cm4gKHUxNiAqKVE0MF9JU0FfTUVNX1coYWRkcik7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfR0cyCisgICAgY2FzZSBHRzJfSVNBOiByZXR1cm4gKHUxNiAqKUdHMl9JU0FfTUVNX1coYWRkcik7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQU1JR0FfUENNQ0lBCisgICAgY2FzZSBBR19JU0E6IHJldHVybiAodTE2ICopYWRkcjsKKyNlbmRpZgorICAgIGRlZmF1bHQ6IHJldHVybiAwOyAvKiBhdm9pZCB3YXJuaW5ncywganVzdCBpbiBjYXNlICovCisgICAgfQorfQorCisKKyNkZWZpbmUgaXNhX2luYihwb3J0KSAgICAgIGluXzgoaXNhX2l0Yihwb3J0KSkKKyNkZWZpbmUgaXNhX2ludyhwb3J0KSAgICAgIChJU0FfU0VYID8gaW5fYmUxNihpc2FfaXR3KHBvcnQpKSA6IGluX2xlMTYoaXNhX2l0dyhwb3J0KSkpCisjZGVmaW5lIGlzYV9vdXRiKHZhbCxwb3J0KSBvdXRfOChpc2FfaXRiKHBvcnQpLCh2YWwpKQorI2RlZmluZSBpc2Ffb3V0dyh2YWwscG9ydCkgKElTQV9TRVggPyBvdXRfYmUxNihpc2FfaXR3KHBvcnQpLCh2YWwpKSA6IG91dF9sZTE2KGlzYV9pdHcocG9ydCksKHZhbCkpKQorCisjZGVmaW5lIGlzYV9yZWFkYihwKSAgICAgICBpbl84KGlzYV9tdGIoKHVuc2lnbmVkIGxvbmcpKHApKSkKKyNkZWZpbmUgaXNhX3JlYWR3KHApICAgICAgIFwKKwkoSVNBX1NFWCA/IGluX2JlMTYoaXNhX210dygodW5zaWduZWQgbG9uZykocCkpKQlcCisJCSA6IGluX2xlMTYoaXNhX210dygodW5zaWduZWQgbG9uZykocCkpKSkKKyNkZWZpbmUgaXNhX3dyaXRlYih2YWwscCkgIG91dF84KGlzYV9tdGIoKHVuc2lnbmVkIGxvbmcpKHApKSwodmFsKSkKKyNkZWZpbmUgaXNhX3dyaXRldyh2YWwscCkgIFwKKwkoSVNBX1NFWCA/IG91dF9iZTE2KGlzYV9tdHcoKHVuc2lnbmVkIGxvbmcpKHApKSwodmFsKSkJXAorCQkgOiBvdXRfbGUxNihpc2FfbXR3KCh1bnNpZ25lZCBsb25nKShwKSksKHZhbCkpKQorCitzdGF0aWMgaW5saW5lIHZvaWQgaXNhX2RlbGF5KHZvaWQpCit7CisgIHN3aXRjaChJU0FfVFlQRSkKKyAgICB7CisjaWZkZWYgQ09ORklHX1E0MAorICAgIGNhc2UgUTQwX0lTQTogaXNhX291dGIoMCwweDgwKTsgYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfR0cyCisgICAgY2FzZSBHRzJfSVNBOiBicmVhazsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BTUlHQV9QQ01DSUEKKyAgICBjYXNlIEFHX0lTQTogYnJlYWs7CisjZW5kaWYKKyAgICBkZWZhdWx0OiBicmVhazsgLyogYXZvaWQgd2FybmluZ3MgKi8KKyAgICB9Cit9CisKKyNkZWZpbmUgaXNhX2luYl9wKHApICAgICAgKHt1OCB2PWlzYV9pbmIocCk7aXNhX2RlbGF5KCk7djt9KQorI2RlZmluZSBpc2Ffb3V0Yl9wKHYscCkgICAoe2lzYV9vdXRiKCh2KSwocCkpO2lzYV9kZWxheSgpO30pCisjZGVmaW5lIGlzYV9pbndfcChwKSAgICAgICh7dTE2IHY9aXNhX2ludyhwKTtpc2FfZGVsYXkoKTt2O30pCisjZGVmaW5lIGlzYV9vdXR3X3AodixwKSAgICh7aXNhX291dHcoKHYpLChwKSk7aXNhX2RlbGF5KCk7fSkKKyNkZWZpbmUgaXNhX2lubF9wKHApICAgICAgKHt1MzIgdj1pc2FfaW5sKHApO2lzYV9kZWxheSgpO3Y7fSkKKyNkZWZpbmUgaXNhX291dGxfcCh2LHApICAgKHtpc2Ffb3V0bCgodiksKHApKTtpc2FfZGVsYXkoKTt9KQorCisjZGVmaW5lIGlzYV9pbnNiKHBvcnQsIGJ1ZiwgbnIpIHJhd19pbnNiKGlzYV9pdGIocG9ydCksICh1OCAqKShidWYpLCAobnIpKQorI2RlZmluZSBpc2Ffb3V0c2IocG9ydCwgYnVmLCBucikgcmF3X291dHNiKGlzYV9pdGIocG9ydCksICh1OCAqKShidWYpLCAobnIpKQorCisjZGVmaW5lIGlzYV9pbnN3KHBvcnQsIGJ1ZiwgbnIpICAgICBcCisgICAgICAgKElTQV9TRVggPyByYXdfaW5zdyhpc2FfaXR3KHBvcnQpLCAodTE2ICopKGJ1ZiksIChucikpIDogICAgXAorICAgICAgICAgICAgICAgICAgcmF3X2luc3dfc3dhcHcoaXNhX2l0dyhwb3J0KSwgKHUxNiAqKShidWYpLCAobnIpKSkKKworI2RlZmluZSBpc2Ffb3V0c3cocG9ydCwgYnVmLCBucikgICAgXAorICAgICAgIChJU0FfU0VYID8gcmF3X291dHN3KGlzYV9pdHcocG9ydCksICh1MTYgKikoYnVmKSwgKG5yKSkgOiAgXAorICAgICAgICAgICAgICAgICAgcmF3X291dHN3X3N3YXB3KGlzYV9pdHcocG9ydCksICh1MTYgKikoYnVmKSwgKG5yKSkpCisjZW5kaWYgIC8qIENPTkZJR19JU0EgKi8KKworCisjaWYgZGVmaW5lZChDT05GSUdfSVNBKSAmJiAhZGVmaW5lZChDT05GSUdfUENJKQorI2RlZmluZSBpbmIgICAgIGlzYV9pbmIKKyNkZWZpbmUgaW5iX3AgICBpc2FfaW5iX3AKKyNkZWZpbmUgb3V0YiAgICBpc2Ffb3V0YgorI2RlZmluZSBvdXRiX3AgIGlzYV9vdXRiX3AKKyNkZWZpbmUgaW53ICAgICBpc2FfaW53CisjZGVmaW5lIGlud19wICAgaXNhX2lud19wCisjZGVmaW5lIG91dHcgICAgaXNhX291dHcKKyNkZWZpbmUgb3V0d19wICBpc2Ffb3V0d19wCisjZGVmaW5lIGlubCAgICAgaXNhX2ludworI2RlZmluZSBpbmxfcCAgIGlzYV9pbndfcAorI2RlZmluZSBvdXRsICAgIGlzYV9vdXR3CisjZGVmaW5lIG91dGxfcCAgaXNhX291dHdfcAorI2RlZmluZSBpbnNiICAgIGlzYV9pbnNiCisjZGVmaW5lIGluc3cgICAgaXNhX2luc3cKKyNkZWZpbmUgb3V0c2IgICBpc2Ffb3V0c2IKKyNkZWZpbmUgb3V0c3cgICBpc2Ffb3V0c3cKKyNkZWZpbmUgcmVhZGIgICBpc2FfcmVhZGIKKyNkZWZpbmUgcmVhZHcgICBpc2FfcmVhZHcKKyNkZWZpbmUgd3JpdGViICBpc2Ffd3JpdGViCisjZGVmaW5lIHdyaXRldyAgaXNhX3dyaXRldworI2VuZGlmIC8qIENPTkZJR19JU0EgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1BDSSkKKworI2RlZmluZSBpbmwocG9ydCkgICAgICAgIGluX2xlMzIocG9ydCkKKyNkZWZpbmUgb3V0bCh2YWwscG9ydCkgICBvdXRfbGUzMigocG9ydCksKHZhbCkpCisjZGVmaW5lIHJlYWRsKGFkZHIpICAgICAgaW5fbGUzMihhZGRyKQorI2RlZmluZSB3cml0ZWwodmFsLGFkZHIpIG91dF9sZTMyKChhZGRyKSwodmFsKSkKKworLyogdGhvc2UgY2FuIGJlIGRlZmluZWQgZm9yIGJvdGggSVNBIGFuZCBQQ0kgLSBpdCB3b24ndCB3b3JrIHRob3VnaCAqLworI2RlZmluZSByZWFkYihhZGRyKSAgICAgICBpbl84KGFkZHIpCisjZGVmaW5lIHJlYWR3KGFkZHIpICAgICAgIGluX2xlMTYoYWRkcikKKyNkZWZpbmUgd3JpdGViKHZhbCxhZGRyKSAgb3V0XzgoKGFkZHIpLCh2YWwpKQorI2RlZmluZSB3cml0ZXcodmFsLGFkZHIpICBvdXRfbGUxNigoYWRkciksKHZhbCkpCisKKyNkZWZpbmUgcmVhZGJfcmVsYXhlZChhZGRyKSByZWFkYihhZGRyKQorI2RlZmluZSByZWFkd19yZWxheGVkKGFkZHIpIHJlYWR3KGFkZHIpCisjZGVmaW5lIHJlYWRsX3JlbGF4ZWQoYWRkcikgcmVhZGwoYWRkcikKKworI2lmbmRlZiBDT05GSUdfSVNBCisjZGVmaW5lIGluYihwb3J0KSAgICAgIGluXzgocG9ydCkKKyNkZWZpbmUgb3V0Yih2YWwscG9ydCkgb3V0XzgoKHBvcnQpLCh2YWwpKQorI2RlZmluZSBpbncocG9ydCkgICAgICBpbl9sZTE2KHBvcnQpCisjZGVmaW5lIG91dHcodmFsLHBvcnQpIG91dF9sZTE2KChwb3J0KSwodmFsKSkKKworI2Vsc2UKKy8qCisgKiBrZXJuZWwgd2l0aCBib3RoIElTQSBhbmQgUENJIGNvbXBpbGVkIGluLCB0aG9zZSBoYXZlCisgKiBjb25mbGljdGluZyBkZWZzIGZvciBpbi9vdXQuIFNpbXBseSBjb25zaWRlciBwb3J0IDwgMTAyNAorICogSVNBIGFuZCBldmVyeXRoaW5nIGVsc2UgUENJLiByZWFkLHdyaXRlIG5vdCBkZWZpbmVkCisgKiBpbiB0aGlzIGNhc2UKKyAqLworI2RlZmluZSBpbmIocG9ydCkgKChwb3J0KTwxMDI0ID8gaXNhX2luYihwb3J0KSA6IGluXzgocG9ydCkpCisjZGVmaW5lIGluYl9wKHBvcnQpICgocG9ydCk8MTAyNCA/IGlzYV9pbmJfcChwb3J0KSA6IGluXzgocG9ydCkpCisjZGVmaW5lIGludyhwb3J0KSAoKHBvcnQpPDEwMjQgPyBpc2FfaW53KHBvcnQpIDogaW5fbGUxNihwb3J0KSkKKyNkZWZpbmUgaW53X3AocG9ydCkgKChwb3J0KTwxMDI0ID8gaXNhX2lud19wKHBvcnQpIDogaW5fbGUxNihwb3J0KSkKKyNkZWZpbmUgaW5sKHBvcnQpICgocG9ydCk8MTAyNCA/IGlzYV9pbmwocG9ydCkgOiBpbl9sZTMyKHBvcnQpKQorI2RlZmluZSBpbmxfcChwb3J0KSAoKHBvcnQpPDEwMjQgPyBpc2FfaW5sX3AocG9ydCkgOiBpbl9sZTMyKHBvcnQpKQorCisjZGVmaW5lIG91dGIodmFsLHBvcnQpICgocG9ydCk8MTAyNCA/IGlzYV9vdXRiKCh2YWwpLChwb3J0KSkgOiBvdXRfOCgocG9ydCksKHZhbCkpKQorI2RlZmluZSBvdXRiX3AodmFsLHBvcnQpICgocG9ydCk8MTAyNCA/IGlzYV9vdXRiX3AoKHZhbCksKHBvcnQpKSA6IG91dF84KChwb3J0KSwodmFsKSkpCisjZGVmaW5lIG91dHcodmFsLHBvcnQpICgocG9ydCk8MTAyNCA/IGlzYV9vdXR3KCh2YWwpLChwb3J0KSkgOiBvdXRfbGUxNigocG9ydCksKHZhbCkpKQorI2RlZmluZSBvdXR3X3AodmFsLHBvcnQpICgocG9ydCk8MTAyNCA/IGlzYV9vdXR3X3AoKHZhbCksKHBvcnQpKSA6IG91dF9sZTE2KChwb3J0KSwodmFsKSkpCisjZGVmaW5lIG91dGwodmFsLHBvcnQpICgocG9ydCk8MTAyNCA/IGlzYV9vdXRsKCh2YWwpLChwb3J0KSkgOiBvdXRfbGUzMigocG9ydCksKHZhbCkpKQorI2RlZmluZSBvdXRsX3AodmFsLHBvcnQpICgocG9ydCk8MTAyNCA/IGlzYV9vdXRsX3AoKHZhbCksKHBvcnQpKSA6IG91dF9sZTMyKChwb3J0KSwodmFsKSkpCisjZW5kaWYKKyNlbmRpZiAvKiBDT05GSUdfUENJICovCisKKyNpZiAhZGVmaW5lZChDT05GSUdfSVNBKSAmJiAhZGVmaW5lZChDT05GSUdfUENJKSAmJiBkZWZpbmVkKENPTkZJR19IUDMwMCkKKy8qCisgKiBXZSBuZWVkIHRvIGRlZmluZSBkdW1teSBmdW5jdGlvbnMgb3RoZXJ3aXNlIGRyaXZlcnMvc2VyaWFsLzgyNTAuYyBkb2Vzbid0IGxpbmsKKyAqLworI2RlZmluZSBpbmIocG9ydCkgICAgICAgIDB4ZmYKKyNkZWZpbmUgaW5iX3AocG9ydCkgICAgICAweGZmCisjZGVmaW5lIG91dGIodmFsLHBvcnQpICAgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBvdXRiX3AodmFsLHBvcnQpIGRvIHsgfSB3aGlsZSAoMCkKKworLyoKKyAqIFRoZXNlIHNob3VsZCBiZSB2YWxpZCBvbiBhbnkgaW9yZW1hcCgpZWQgcmVnaW9uCisgKi8KKyNkZWZpbmUgcmVhZGIoYWRkcikgICAgICBpbl84KGFkZHIpCisjZGVmaW5lIHdyaXRlYih2YWwsYWRkcikgb3V0XzgoKGFkZHIpLCh2YWwpKQorI2RlZmluZSByZWFkbChhZGRyKSAgICAgIGluX2xlMzIoYWRkcikKKyNkZWZpbmUgd3JpdGVsKHZhbCxhZGRyKSBvdXRfbGUzMigoYWRkciksKHZhbCkpCisjZW5kaWYKKworI2RlZmluZSBtbWlvd2IoKQorCitzdGF0aWMgaW5saW5lIHZvaWQgKmlvcmVtYXAodW5zaWduZWQgbG9uZyBwaHlzYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXJldHVybiBfX2lvcmVtYXAocGh5c2FkZHIsIHNpemUsIElPTUFQX05PQ0FDSEVfU0VSKTsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCAqaW9yZW1hcF9ub2NhY2hlKHVuc2lnbmVkIGxvbmcgcGh5c2FkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlyZXR1cm4gX19pb3JlbWFwKHBoeXNhZGRyLCBzaXplLCBJT01BUF9OT0NBQ0hFX1NFUik7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgKmlvcmVtYXBfd3JpdGV0aHJvdWdoKHVuc2lnbmVkIGxvbmcgcGh5c2FkZHIsCisJCQkJCSB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJcmV0dXJuIF9faW9yZW1hcChwaHlzYWRkciwgc2l6ZSwgSU9NQVBfV1JJVEVUSFJPVUdIKTsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCAqaW9yZW1hcF9mdWxsY2FjaGUodW5zaWduZWQgbG9uZyBwaHlzYWRkciwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJcmV0dXJuIF9faW9yZW1hcChwaHlzYWRkciwgc2l6ZSwgSU9NQVBfRlVMTF9DQUNISU5HKTsKK30KKworCisvKiBtNjhrIGNhY2hlcyBhcmVuJ3QgRE1BIGNvaGVyZW50ICovCitleHRlcm4gdm9pZCBkbWFfY2FjaGVfd2JhY2tfaW52KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CitleHRlcm4gdm9pZCBkbWFfY2FjaGVfd2JhY2sodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKTsKK2V4dGVybiB2b2lkIGRtYV9jYWNoZV9pbnYodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKTsKKworCisjaWZuZGVmIENPTkZJR19TVU4zCisjZGVmaW5lIElPX1NQQUNFX0xJTUlUIDB4ZmZmZgorI2Vsc2UKKyNkZWZpbmUgSU9fU1BBQ0VfTElNSVQgMHgwZmZmZmZmZgorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNkZWZpbmUgX19BUkNIX0hBU19OT19QQUdFX1pFUk9fTUFQUEVECQkxCisKKy8qCisgKiBDb252ZXJ0IGEgcGh5c2ljYWwgcG9pbnRlciB0byBhIHZpcnR1YWwga2VybmVsIHBvaW50ZXIgZm9yIC9kZXYvbWVtCisgKiBhY2Nlc3MKKyAqLworI2RlZmluZSB4bGF0ZV9kZXZfbWVtX3B0cihwKQlfX3ZhKHApCisKKy8qCisgKiBDb252ZXJ0IGEgdmlydHVhbCBjYWNoZWQgcG9pbnRlciB0byBhbiB1bmNhY2hlZCBwb2ludGVyCisgKi8KKyNkZWZpbmUgeGxhdGVfZGV2X2ttZW1fcHRyKHApCXAKKworI2VuZGlmIC8qIF9JT19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL2lvY3RsLmggYi9pbmNsdWRlL2FzbS1tNjhrL2lvY3RsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ2ODkxNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvaW9jdGwuaApAQCAtMCwwICsxLDgwIEBACisvKiAkSWQ6IGlvY3RsLmgsdiAxLjMgMTk5Ny8wNC8xNiAxNToxMDowNyBqZXMgRXhwICQKKyAqCisgKiBsaW51eC9pb2N0bC5oIGZvciBMaW51eCBieSBILkguIEJlcmdtYW4uCisgKi8KKworI2lmbmRlZiBfTTY4S19JT0NUTF9ICisjZGVmaW5lIF9NNjhLX0lPQ1RMX0gKKworLyogaW9jdGwgY29tbWFuZCBlbmNvZGluZzogMzIgYml0cyB0b3RhbCwgY29tbWFuZCBpbiBsb3dlciAxNiBiaXRzLAorICogc2l6ZSBvZiB0aGUgcGFyYW1ldGVyIHN0cnVjdHVyZSBpbiB0aGUgbG93ZXIgMTQgYml0cyBvZiB0aGUKKyAqIHVwcGVyIDE2IGJpdHMuCisgKiBFbmNvZGluZyB0aGUgc2l6ZSBvZiB0aGUgcGFyYW1ldGVyIHN0cnVjdHVyZSBpbiB0aGUgaW9jdGwgcmVxdWVzdAorICogaXMgdXNlZnVsIGZvciBjYXRjaGluZyBwcm9ncmFtcyBjb21waWxlZCB3aXRoIG9sZCB2ZXJzaW9ucworICogYW5kIHRvIGF2b2lkIG92ZXJ3cml0aW5nIHVzZXIgc3BhY2Ugb3V0c2lkZSB0aGUgdXNlciBidWZmZXIgYXJlYS4KKyAqIFRoZSBoaWdoZXN0IDIgYml0cyBhcmUgcmVzZXJ2ZWQgZm9yIGluZGljYXRpbmcgdGhlIGBgYWNjZXNzIG1vZGUnJy4KKyAqIE5PVEU6IFRoaXMgbGltaXRzIHRoZSBtYXggcGFyYW1ldGVyIHNpemUgdG8gMTZrQiAtMSAhCisgKi8KKworLyoKKyAqIEkgZG9uJ3QgcmVhbGx5IGhhdmUgYW55IGlkZWEgYWJvdXQgd2hhdCB0aGlzIHNob3VsZCBsb29rIGxpa2UsIHNvCisgKiBmb3IgdGhlIHRpbWUgYmVpbmcsIHRoaXMgaXMgaGVhdmlseSBiYXNlZCBvbiB0aGUgUEMgZGVmaW5pdGlvbnMuCisgKi8KKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgaXMgZm9yIGNvbXBhdGliaWxpdHkgYWNyb3NzIHRoZSB2YXJpb3VzIExpbnV4CisgKiBwbGF0Zm9ybXMuICBUaGUgaTM4NiBpb2N0bCBudW1iZXJpbmcgc2NoZW1lIGRvZXNuJ3QgcmVhbGx5IGVuZm9yY2UKKyAqIGEgdHlwZSBmaWVsZC4gIERlIGZhY3RvLCBob3dldmVyLCB0aGUgdG9wIDggYml0cyBvZiB0aGUgbG93ZXIgMTYKKyAqIGJpdHMgYXJlIGluZGVlZCB1c2VkIGFzIGEgdHlwZSBmaWVsZCwgc28gd2UgbWlnaHQganVzdCBhcyB3ZWxsIG1ha2UKKyAqIHRoaXMgZXhwbGljaXQgaGVyZS4gIFBsZWFzZSBiZSBzdXJlIHRvIHVzZSB0aGUgZGVjb2RpbmcgbWFjcm9zCisgKiBiZWxvdyBmcm9tIG5vdyBvbi4KKyAqLworI2RlZmluZSBfSU9DX05SQklUUwk4CisjZGVmaW5lIF9JT0NfVFlQRUJJVFMJOAorI2RlZmluZSBfSU9DX1NJWkVCSVRTCTE0CisjZGVmaW5lIF9JT0NfRElSQklUUwkyCisKKyNkZWZpbmUgX0lPQ19OUk1BU0sJKCgxIDw8IF9JT0NfTlJCSVRTKS0xKQorI2RlZmluZSBfSU9DX1RZUEVNQVNLCSgoMSA8PCBfSU9DX1RZUEVCSVRTKS0xKQorI2RlZmluZSBfSU9DX1NJWkVNQVNLCSgoMSA8PCBfSU9DX1NJWkVCSVRTKS0xKQorI2RlZmluZSBfSU9DX0RJUk1BU0sJKCgxIDw8IF9JT0NfRElSQklUUyktMSkKKworI2RlZmluZSBfSU9DX05SU0hJRlQJMAorI2RlZmluZSBfSU9DX1RZUEVTSElGVAkoX0lPQ19OUlNISUZUK19JT0NfTlJCSVRTKQorI2RlZmluZSBfSU9DX1NJWkVTSElGVAkoX0lPQ19UWVBFU0hJRlQrX0lPQ19UWVBFQklUUykKKyNkZWZpbmUgX0lPQ19ESVJTSElGVAkoX0lPQ19TSVpFU0hJRlQrX0lPQ19TSVpFQklUUykKKworLyoKKyAqIERpcmVjdGlvbiBiaXRzLgorICovCisjZGVmaW5lIF9JT0NfTk9ORQkwVQorI2RlZmluZSBfSU9DX1dSSVRFCTFVCisjZGVmaW5lIF9JT0NfUkVBRAkyVQorCisjZGVmaW5lIF9JT0MoZGlyLHR5cGUsbnIsc2l6ZSkgXAorCSgoKGRpcikgIDw8IF9JT0NfRElSU0hJRlQpIHwgXAorCSAoKHR5cGUpIDw8IF9JT0NfVFlQRVNISUZUKSB8IFwKKwkgKChucikgICA8PCBfSU9DX05SU0hJRlQpIHwgXAorCSAoKHNpemUpIDw8IF9JT0NfU0laRVNISUZUKSkKKworLyogdXNlZCB0byBjcmVhdGUgbnVtYmVycyAqLworI2RlZmluZSBfSU8odHlwZSxucikJCV9JT0MoX0lPQ19OT05FLCh0eXBlKSwobnIpLDApCisjZGVmaW5lIF9JT1IodHlwZSxucixzaXplKQlfSU9DKF9JT0NfUkVBRCwodHlwZSksKG5yKSxzaXplb2Yoc2l6ZSkpCisjZGVmaW5lIF9JT1codHlwZSxucixzaXplKQlfSU9DKF9JT0NfV1JJVEUsKHR5cGUpLChuciksc2l6ZW9mKHNpemUpKQorI2RlZmluZSBfSU9XUih0eXBlLG5yLHNpemUpCV9JT0MoX0lPQ19SRUFEfF9JT0NfV1JJVEUsKHR5cGUpLChuciksc2l6ZW9mKHNpemUpKQorCisvKiB1c2VkIHRvIGRlY29kZSBpb2N0bCBudW1iZXJzLi4gKi8KKyNkZWZpbmUgX0lPQ19ESVIobnIpCQkoKChucikgPj4gX0lPQ19ESVJTSElGVCkgJiBfSU9DX0RJUk1BU0spCisjZGVmaW5lIF9JT0NfVFlQRShucikJCSgoKG5yKSA+PiBfSU9DX1RZUEVTSElGVCkgJiBfSU9DX1RZUEVNQVNLKQorI2RlZmluZSBfSU9DX05SKG5yKQkJKCgobnIpID4+IF9JT0NfTlJTSElGVCkgJiBfSU9DX05STUFTSykKKyNkZWZpbmUgX0lPQ19TSVpFKG5yKQkJKCgobnIpID4+IF9JT0NfU0laRVNISUZUKSAmIF9JT0NfU0laRU1BU0spCisKKy8qIC4uLmFuZCBmb3IgdGhlIGRyaXZlcnMvc291bmQgZmlsZXMuLi4gKi8KKworI2RlZmluZSBJT0NfSU4JCShfSU9DX1dSSVRFIDw8IF9JT0NfRElSU0hJRlQpCisjZGVmaW5lIElPQ19PVVQJCShfSU9DX1JFQUQgPDwgX0lPQ19ESVJTSElGVCkKKyNkZWZpbmUgSU9DX0lOT1VUCSgoX0lPQ19XUklURXxfSU9DX1JFQUQpIDw8IF9JT0NfRElSU0hJRlQpCisjZGVmaW5lIElPQ1NJWkVfTUFTSwkoX0lPQ19TSVpFTUFTSyA8PCBfSU9DX1NJWkVTSElGVCkKKyNkZWZpbmUgSU9DU0laRV9TSElGVAkoX0lPQ19TSVpFU0hJRlQpCisKKyNlbmRpZiAvKiBfTTY4S19JT0NUTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL2lvY3Rscy5oIGIvaW5jbHVkZS9hc20tbTY4ay9pb2N0bHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzQ4OTI5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9pb2N0bHMuaApAQCAtMCwwICsxLDgwIEBACisjaWZuZGVmIF9fQVJDSF9NNjhLX0lPQ1RMU19IX18KKyNkZWZpbmUgX19BUkNIX002OEtfSU9DVExTX0hfXworCisjaW5jbHVkZSA8YXNtL2lvY3RsLmg+CisKKy8qIDB4NTQgaXMganVzdCBhIG1hZ2ljIG51bWJlciB0byBtYWtlIHRoZXNlIHJlbGF0aXZlbHkgdW5pcXVlICgnVCcpICovCisKKyNkZWZpbmUgVENHRVRTCQkweDU0MDEKKyNkZWZpbmUgVENTRVRTCQkweDU0MDIKKyNkZWZpbmUgVENTRVRTVwkJMHg1NDAzCisjZGVmaW5lIFRDU0VUU0YJCTB4NTQwNAorI2RlZmluZSBUQ0dFVEEJCTB4NTQwNQorI2RlZmluZSBUQ1NFVEEJCTB4NTQwNgorI2RlZmluZSBUQ1NFVEFXCQkweDU0MDcKKyNkZWZpbmUgVENTRVRBRgkJMHg1NDA4CisjZGVmaW5lIFRDU0JSSwkJMHg1NDA5CisjZGVmaW5lIFRDWE9OQwkJMHg1NDBBCisjZGVmaW5lIFRDRkxTSAkJMHg1NDBCCisjZGVmaW5lIFRJT0NFWENMCTB4NTQwQworI2RlZmluZSBUSU9DTlhDTAkweDU0MEQKKyNkZWZpbmUgVElPQ1NDVFRZCTB4NTQwRQorI2RlZmluZSBUSU9DR1BHUlAJMHg1NDBGCisjZGVmaW5lIFRJT0NTUEdSUAkweDU0MTAKKyNkZWZpbmUgVElPQ09VVFEJMHg1NDExCisjZGVmaW5lIFRJT0NTVEkJCTB4NTQxMgorI2RlZmluZSBUSU9DR1dJTlNaCTB4NTQxMworI2RlZmluZSBUSU9DU1dJTlNaCTB4NTQxNAorI2RlZmluZSBUSU9DTUdFVAkweDU0MTUKKyNkZWZpbmUgVElPQ01CSVMJMHg1NDE2CisjZGVmaW5lIFRJT0NNQklDCTB4NTQxNworI2RlZmluZSBUSU9DTVNFVAkweDU0MTgKKyNkZWZpbmUgVElPQ0dTT0ZUQ0FSCTB4NTQxOQorI2RlZmluZSBUSU9DU1NPRlRDQVIJMHg1NDFBCisjZGVmaW5lIEZJT05SRUFECTB4NTQxQgorI2RlZmluZSBUSU9DSU5RCQlGSU9OUkVBRAorI2RlZmluZSBUSU9DTElOVVgJMHg1NDFDCisjZGVmaW5lIFRJT0NDT05TCTB4NTQxRAorI2RlZmluZSBUSU9DR1NFUklBTAkweDU0MUUKKyNkZWZpbmUgVElPQ1NTRVJJQUwJMHg1NDFGCisjZGVmaW5lIFRJT0NQS1QJCTB4NTQyMAorI2RlZmluZSBGSU9OQklPCQkweDU0MjEKKyNkZWZpbmUgVElPQ05PVFRZCTB4NTQyMgorI2RlZmluZSBUSU9DU0VURAkweDU0MjMKKyNkZWZpbmUgVElPQ0dFVEQJMHg1NDI0CisjZGVmaW5lIFRDU0JSS1AJCTB4NTQyNQkvKiBOZWVkZWQgZm9yIFBPU0lYIHRjc2VuZGJyZWFrKCkgKi8KKyNkZWZpbmUgVElPQ1NCUksJMHg1NDI3ICAvKiBCU0QgY29tcGF0aWJpbGl0eSAqLworI2RlZmluZSBUSU9DQ0JSSwkweDU0MjggIC8qIEJTRCBjb21wYXRpYmlsaXR5ICovCisjZGVmaW5lIFRJT0NHU0lECTB4NTQyOSAgLyogUmV0dXJuIHRoZSBzZXNzaW9uIElEIG9mIEZEICovCisjZGVmaW5lIFRJT0NHUFROCV9JT1IoJ1QnLDB4MzAsIHVuc2lnbmVkIGludCkgLyogR2V0IFB0eSBOdW1iZXIgKG9mIHB0eS1tdXggZGV2aWNlKSAqLworI2RlZmluZSBUSU9DU1BUTENLCV9JT1coJ1QnLDB4MzEsIGludCkgIC8qIExvY2svdW5sb2NrIFB0eSAqLworCisjZGVmaW5lIEZJT05DTEVYCTB4NTQ1MCAgLyogdGhlc2UgbnVtYmVycyBuZWVkIHRvIGJlIGFkanVzdGVkLiAqLworI2RlZmluZSBGSU9DTEVYCQkweDU0NTEKKyNkZWZpbmUgRklPQVNZTkMJMHg1NDUyCisjZGVmaW5lIFRJT0NTRVJDT05GSUcJMHg1NDUzCisjZGVmaW5lIFRJT0NTRVJHV0lMRAkweDU0NTQKKyNkZWZpbmUgVElPQ1NFUlNXSUxECTB4NTQ1NQorI2RlZmluZSBUSU9DR0xDS1RSTUlPUwkweDU0NTYKKyNkZWZpbmUgVElPQ1NMQ0tUUk1JT1MJMHg1NDU3CisjZGVmaW5lIFRJT0NTRVJHU1RSVUNUCTB4NTQ1OCAvKiBGb3IgZGVidWdnaW5nIG9ubHkgKi8KKyNkZWZpbmUgVElPQ1NFUkdFVExTUiAgIDB4NTQ1OSAvKiBHZXQgbGluZSBzdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgVElPQ1NFUkdFVE1VTFRJIDB4NTQ1QSAvKiBHZXQgbXVsdGlwb3J0IGNvbmZpZyAgKi8KKyNkZWZpbmUgVElPQ1NFUlNFVE1VTFRJIDB4NTQ1QiAvKiBTZXQgbXVsdGlwb3J0IGNvbmZpZyAqLworCisjZGVmaW5lIFRJT0NNSVdBSVQJMHg1NDVDCS8qIHdhaXQgZm9yIGEgY2hhbmdlIG9uIHNlcmlhbCBpbnB1dCBsaW5lKHMpICovCisjZGVmaW5lIFRJT0NHSUNPVU5UCTB4NTQ1RAkvKiByZWFkIHNlcmlhbCBwb3J0IGlubGluZSBpbnRlcnJ1cHQgY291bnRzICovCisjZGVmaW5lIEZJT1FTSVpFCTB4NTQ1RQorCisvKiBVc2VkIGZvciBwYWNrZXQgbW9kZSAqLworI2RlZmluZSBUSU9DUEtUX0RBVEEJCSAwCisjZGVmaW5lIFRJT0NQS1RfRkxVU0hSRUFECSAxCisjZGVmaW5lIFRJT0NQS1RfRkxVU0hXUklURQkgMgorI2RlZmluZSBUSU9DUEtUX1NUT1AJCSA0CisjZGVmaW5lIFRJT0NQS1RfU1RBUlQJCSA4CisjZGVmaW5lIFRJT0NQS1RfTk9TVE9QCQkxNgorI2RlZmluZSBUSU9DUEtUX0RPU1RPUAkJMzIKKworI2RlZmluZSBUSU9DU0VSX1RFTVQgICAgMHgwMQkvKiBUcmFuc21pdHRlciBwaHlzaWNhbGx5IGVtcHR5ICovCisKKyNlbmRpZiAvKiBfX0FSQ0hfTTY4S19JT0NUTFNfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL2lwYy5oIGIvaW5jbHVkZS9hc20tbTY4ay9pcGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDZlM2Q5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9pcGMuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvaXBjLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL2lwY2J1Zi5oIGIvaW5jbHVkZS9hc20tbTY4ay9pcGNidWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjIzZWEzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9pcGNidWYuaApAQCAtMCwwICsxLDI5IEBACisjaWZuZGVmIF9fbTY4a19JUENCVUZfSF9fCisjZGVmaW5lIF9fbTY4a19JUENCVUZfSF9fCisKKy8qCisgKiBUaGUgdXNlcl9pcGNfcGVybSBzdHJ1Y3R1cmUgZm9yIG02OGsgYXJjaGl0ZWN0dXJlLgorICogTm90ZSBleHRyYSBwYWRkaW5nIGJlY2F1c2UgdGhpcyBzdHJ1Y3R1cmUgaXMgcGFzc2VkIGJhY2sgYW5kIGZvcnRoCisgKiBiZXR3ZWVuIGtlcm5lbCBhbmQgdXNlciBzcGFjZS4KKyAqCisgKiBQYWQgc3BhY2UgaXMgbGVmdCBmb3I6CisgKiAtIDMyLWJpdCBtb2RlX3QgYW5kIHNlcQorICogLSAyIG1pc2NlbGxhbmVvdXMgMzItYml0IHZhbHVlcworICovCisKK3N0cnVjdCBpcGM2NF9wZXJtCit7CisJX19rZXJuZWxfa2V5X3QJCWtleTsKKwlfX2tlcm5lbF91aWQzMl90CXVpZDsKKwlfX2tlcm5lbF9naWQzMl90CWdpZDsKKwlfX2tlcm5lbF91aWQzMl90CWN1aWQ7CisJX19rZXJuZWxfZ2lkMzJfdAljZ2lkOworCV9fa2VybmVsX21vZGVfdAkJbW9kZTsKKwl1bnNpZ25lZCBzaG9ydAkJX19wYWQxOworCXVuc2lnbmVkIHNob3J0CQlzZXE7CisJdW5zaWduZWQgc2hvcnQJCV9fcGFkMjsKKwl1bnNpZ25lZCBsb25nCQlfX3VudXNlZDE7CisJdW5zaWduZWQgbG9uZwkJX191bnVzZWQyOworfTsKKworI2VuZGlmIC8qIF9fbTY4a19JUENCVUZfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL2lycS5oIGIvaW5jbHVkZS9hc20tbTY4ay9pcnEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjU2OTkwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9pcnEuaApAQCAtMCwwICsxLDEzMSBAQAorI2lmbmRlZiBfTTY4S19JUlFfSF8KKyNkZWZpbmUgX002OEtfSVJRX0hfCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKworLyoKKyAqICMgb2YgbTY4ayBpbnRlcnJ1cHRzCisgKi8KKworI2RlZmluZSBTWVNfSVJRUyA4CisKKy8qCisgKiBUaGlzIHNob3VsZCBiZSB0aGUgc2FtZSBhcyB0aGUgbWF4KE5VTV9YX1NPVVJDRVMpIGZvciBhbGwgdGhlCisgKiBkaWZmZXJlbnQgbTY4ayBob3N0cyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuCisgKiBDdXJyZW50bHkgdGhlIEF0YXJpIGhhcyA3MiBhbmQgdGhlIEFtaWdhIDI0LCBidXQgaWYgYm90aCBhcmUKKyAqIHN1cHBvcnRlZCBpbiB0aGUga2VybmVsIGl0IGlzIGJldHRlciB0byBtYWtlIHJvb20gZm9yIDcyLgorICovCisjaWYgZGVmaW5lZChDT05GSUdfQVRBUkkpIHx8IGRlZmluZWQoQ09ORklHX01BQykKKyNkZWZpbmUgTlJfSVJRUyAoNzIrU1lTX0lSUVMpCisjZWxzZQorI2RlZmluZSBOUl9JUlFTICgyNCtTWVNfSVJRUykKKyNlbmRpZgorCisvKgorICogSW50ZXJydXB0IHNvdXJjZSBkZWZpbml0aW9ucworICogR2VuZXJhbCBpbnRlcnJ1cHQgc291cmNlcyBhcmUgdGhlIGxldmVsIDEtNy4KKyAqIEFkZGluZyBhbiBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lIGZvciBvbmUgb2YgdGhlc2Ugc291cmNlcworICogcmVzdWx0cyBpbiB0aGUgYWRkaXRpb24gb2YgdGhhdCByb3V0aW5lIHRvIGEgY2hhaW4gb2Ygcm91dGluZXMuCisgKiBFYWNoIG9uZSBpcyBjYWxsZWQgaW4gc3VjY2Vzc2lvbi4gIEVhY2ggaW5kaXZpZHVhbCBpbnRlcnJ1cHQKKyAqIHNlcnZpY2Ugcm91dGluZSBzaG91bGQgZGV0ZXJtaW5lIGlmIHRoZSBkZXZpY2UgYXNzb2NpYXRlZCB3aXRoCisgKiB0aGF0IHJvdXRpbmUgcmVxdWlyZXMgc2VydmljZS4KKyAqLworCisjZGVmaW5lIElSUTEJCSgxKQkvKiBsZXZlbCAxIGludGVycnVwdCAqLworI2RlZmluZSBJUlEyCQkoMikJLyogbGV2ZWwgMiBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRMwkJKDMpCS8qIGxldmVsIDMgaW50ZXJydXB0ICovCisjZGVmaW5lIElSUTQJCSg0KQkvKiBsZXZlbCA0IGludGVycnVwdCAqLworI2RlZmluZSBJUlE1CQkoNSkJLyogbGV2ZWwgNSBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRNgkJKDYpCS8qIGxldmVsIDYgaW50ZXJydXB0ICovCisjZGVmaW5lIElSUTcJCSg3KQkvKiBsZXZlbCA3IGludGVycnVwdCAobm9uLW1hc2thYmxlKSAqLworCisvKgorICogIkdlbmVyaWMiIGludGVycnVwdCBzb3VyY2VzCisgKi8KKworI2RlZmluZSBJUlFfU0NIRURfVElNRVIJKDgpICAgIC8qIGludGVycnVwdCBzb3VyY2UgZm9yIHNjaGVkdWxpbmcgdGltZXIgKi8KKworc3RhdGljIF9faW5saW5lX18gaW50IGlycV9jYW5vbmljYWxpemUoaW50IGlycSkKK3sKKwlyZXR1cm4gaXJxOworfQorCisvKgorICogTWFjaGluZSBzcGVjaWZpYyBpbnRlcnJ1cHQgc291cmNlcy4KKyAqCisgKiBBZGRpbmcgYW4gaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSBmb3IgYSBzb3VyY2Ugd2l0aCB0aGlzIGJpdAorICogc2V0IGluZGljYXRlcyBhIHNwZWNpYWwgbWFjaGluZSBzcGVjaWZpYyBpbnRlcnJ1cHQgc291cmNlLgorICogVGhlIG1hY2hpbmUgc3BlY2lmaWMgZmlsZXMgZGVmaW5lIHRoZXNlIHNvdXJjZXMuCisgKgorICogVGhlIElSUV9NQUNIU1BFQyBiaXQgaXMgbm93IGdvbmUgLSB0aGUgb25seSB0aGluZyBpdCBkaWQgd2FzIHRvCisgKiBpbnRyb2R1Y2UgdW5uZWNlc3Nhcnkgb3ZlcmhlYWQuCisgKgorICogQWxsIGludGVycnVwdCBoYW5kbGluZyBpcyBhY3R1YWxseSBtYWNoaW5lIHNwZWNpZmljIHNvIGl0IGlzIGJldHRlcgorICogdG8gdXNlIGZ1bmN0aW9uIHBvaW50ZXJzLCBhcyB1c2VkIGJ5IHRoZSBTcGFyYyBwb3J0LCBhbmQgc2VsZWN0IHRoZQorICogaW50ZXJydXB0IGhhbmRsaW5nIGZ1bmN0aW9ucyB3aGVuIGluaXRpYWxpemluZyB0aGUga2VybmVsLiBUaGlzIHdheQorICogd2Ugc2F2ZSBzb21lIHVubmVjZXNzYXJ5IG92ZXJoZWFkIGF0IHJ1bi10aW1lLgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwMS8xMS85NyAtIEplcworICovCisKK2V4dGVybiB2b2lkICgqZW5hYmxlX2lycSkodW5zaWduZWQgaW50KTsKK2V4dGVybiB2b2lkICgqZGlzYWJsZV9pcnEpKHVuc2lnbmVkIGludCk7CisKKyNkZWZpbmUgZGlzYWJsZV9pcnFfbm9zeW5jCWRpc2FibGVfaXJxCisjZGVmaW5lIGVuYWJsZV9pcnFfbm9zeW5jCWVuYWJsZV9pcnEKKworc3RydWN0IHB0X3JlZ3M7CisKK2V4dGVybiBpbnQgY3B1X3JlcXVlc3RfaXJxKHVuc2lnbmVkIGludCwKKwkJCSAgIGlycXJldHVybl90ICgqKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKiksCisJCQkgICB1bnNpZ25lZCBsb25nLCBjb25zdCBjaGFyICosIHZvaWQgKik7CitleHRlcm4gdm9pZCBjcHVfZnJlZV9pcnEodW5zaWduZWQgaW50LCB2b2lkICopOworCisvKgorICogdmFyaW91cyBmbGFncyBmb3IgcmVxdWVzdF9pcnEoKSAtIHRoZSBBbWlnYSBub3cgdXNlcyB0aGUgc3RhbmRhcmQKKyAqIG1lY2hhbmlzbSBsaWtlIGFsbCBvdGhlciBhcmNoaXRlY3R1cmVzIC0gU0FfSU5URVJSVVBUIGFuZCBTQV9TSElSUQorICogYXJlIHlvdXIgZnJpZW5kcy4KKyAqLworI2lmbmRlZiBNQUNIX0FNSUdBX09OTFkKKyNkZWZpbmUgSVJRX0ZMR19MT0NLCSgweDAwMDEpCS8qIGhhbmRsZXIgaXMgbm90IHJlcGxhY2VhYmxlCSovCisjZGVmaW5lIElSUV9GTEdfUkVQTEFDRQkoMHgwMDAyKQkvKiByZXBsYWNlIGV4aXN0aW5nIGhhbmRsZXIJKi8KKyNkZWZpbmUgSVJRX0ZMR19GQVNUCSgweDAwMDQpCisjZGVmaW5lIElSUV9GTEdfU0xPVwkoMHgwMDA4KQorI2RlZmluZSBJUlFfRkxHX1NURAkoMHg4MDAwKQkvKiBpbnRlcm5hbGx5IHVzZWQJCSovCisjZW5kaWYKKworLyoKKyAqIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgdG8gY2hhaW4gdG9nZXRoZXIgdGhlIElTUnMgZm9yIGEgcGFydGljdWxhcgorICogaW50ZXJydXB0IHNvdXJjZSAoaWYgaXQgc3VwcG9ydHMgY2hhaW5pbmcpLgorICovCit0eXBlZGVmIHN0cnVjdCBpcnFfbm9kZSB7CisJaXJxcmV0dXJuX3QJKCpoYW5kbGVyKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKik7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKwl2b2lkCQkqZGV2X2lkOworCWNvbnN0IGNoYXIJKmRldm5hbWU7CisJc3RydWN0IGlycV9ub2RlICpuZXh0OworfSBpcnFfbm9kZV90OworCisvKgorICogVGhpcyBzdHJ1Y3R1cmUgaGFzIG9ubHkgNCBlbGVtZW50cyBmb3Igc3BlZWQgcmVhc29ucworICovCit0eXBlZGVmIHN0cnVjdCBpcnFfaGFuZGxlciB7CisJaXJxcmV0dXJuX3QJKCpoYW5kbGVyKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKik7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKwl2b2lkCQkqZGV2X2lkOworCWNvbnN0IGNoYXIJKmRldm5hbWU7Cit9IGlycV9oYW5kbGVyX3Q7CisKKy8qIGNvdW50IG9mIHNwdXJpb3VzIGludGVycnVwdHMgKi8KK2V4dGVybiB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbnVtX3NwdXJpb3VzOworCisvKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgbmV3IGlycV9ub2RlX3QKKyAqLworZXh0ZXJuIGlycV9ub2RlX3QgKm5ld19pcnFfbm9kZSh2b2lkKTsKKworc3RydWN0IGlycWFjdGlvbjsKK3N0cnVjdCBwdF9yZWdzOworaW50IGhhbmRsZV9JUlFfZXZlbnQodW5zaWduZWQgaW50LCBzdHJ1Y3QgcHRfcmVncyAqLCBzdHJ1Y3QgaXJxYWN0aW9uICopOworCisjZW5kaWYgLyogX002OEtfSVJRX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL2tiaW8uaCBiL2luY2x1ZGUvYXNtLW02OGsva2Jpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxZmJmOGYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2tiaW8uaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLXNwYXJjL2tiaW8uaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsva21hcF90eXBlcy5oIGIvaW5jbHVkZS9hc20tbTY4ay9rbWFwX3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg0M2M2MwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsva21hcF90eXBlcy5oCkBAIC0wLDAgKzEsMjEgQEAKKyNpZm5kZWYgX19BU01fTTY4S19LTUFQX1RZUEVTX0gKKyNkZWZpbmUgX19BU01fTTY4S19LTUFQX1RZUEVTX0gKKworZW51bSBrbV90eXBlIHsKKwlLTV9CT1VOQ0VfUkVBRCwKKwlLTV9TS0JfU1VOUlBDX0RBVEEsCisJS01fU0tCX0RBVEFfU09GVElSUSwKKwlLTV9VU0VSMCwKKwlLTV9VU0VSMSwKKwlLTV9CSU9fU1JDX0lSUSwKKwlLTV9CSU9fRFNUX0lSUSwKKwlLTV9QVEUwLAorCUtNX1BURTEsCisJS01fSVJRMCwKKwlLTV9JUlExLAorCUtNX1NPRlRJUlEwLAorCUtNX1NPRlRJUlExLAorCUtNX1RZUEVfTlIKK307CisKKyNlbmRpZgkvKiBfX0FTTV9NNjhLX0tNQVBfVFlQRVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9saW5rYWdlLmggYi9pbmNsdWRlL2FzbS1tNjhrL2xpbmthZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTgyMmJiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9saW5rYWdlLmgKQEAgLTAsMCArMSw3IEBACisjaWZuZGVmIF9fQVNNX0xJTktBR0VfSAorI2RlZmluZSBfX0FTTV9MSU5LQUdFX0gKKworI2RlZmluZSBfX0FMSUdOIC5hbGlnbiA0CisjZGVmaW5lIF9fQUxJR05fU1RSICIuYWxpZ24gNCIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL2xvY2FsLmggYi9pbmNsdWRlL2FzbS1tNjhrL2xvY2FsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmMyNTkyNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvbG9jYWwuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX0FTTV9NNjhLX0xPQ0FMX0gKKyNkZWZpbmUgX0FTTV9NNjhLX0xPQ0FMX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2xvY2FsLmg+CisKKyNlbmRpZiAvKiBfQVNNX002OEtfTE9DQUxfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9tYWNfYXNjLmggYi9pbmNsdWRlL2FzbS1tNjhrL21hY19hc2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzJlNTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9tYWNfYXNjLmgKQEAgLTAsMCArMSwyNyBAQAorLyoKKyAqCUFwcGxlIFNvdW5kIENoaXAKKyAqLworCisjaWZuZGVmIF9fQVNNX01BQ19BU0NfSAorI2RlZmluZSBfX0FTTV9NQUNfQVNDX0gKKworLyoKKyAqCUFTQyBvZmZzZXRzIGFuZCBjb250cm9scworICovCisKKyNkZWZpbmUgQVNDX0JVRl9CQVNFCTB4MDAJLyogUkFNIGJ1ZmZlciBvZmZzZXQgKi8KKyNkZWZpbmUgQVNDX0JVRl9TSVpFCTB4ODAwCisKKyNkZWZpbmUgQVNDX0NPTlRST0wJMHg4MDAKKyNkZWZpbmUgQVNDX0NPTlRST0xfT0ZGCQkweDAwCisjZGVmaW5lIEFTQ19GUkVRKGNoYW4sYnl0ZSkJKCgweDgxMCkrKChjaGFuKTw8MykrKGJ5dGUpKQorI2RlZmluZSBBU0NfRU5BQkxFCTB4ODAxCisjZGVmaW5lIEFTQ19FTkFCTEVfU0FNUExFCTB4MDIKKyNkZWZpbmUgQVNDX01PREUJMHg4MDIKKyNkZWZpbmUgQVNDX01PREVfU0FNUExFCQkweDAyCisKKyNkZWZpbmUgQVNDX1ZPTFVNRQkweDgwNgorI2RlZmluZSBBU0NfQ0hBTgkweDgwNwkvKiA/Pz8gKi8KKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvbWFjX2JhYm9vbi5oIGIvaW5jbHVkZS9hc20tbTY4ay9tYWNfYmFib29uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg3ODUwOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvbWFjX2JhYm9vbi5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBEZWZpbml0aW9ucyBmb3IgdGhlICJCYWJvb24iIGN1c3RvbSBJQyBvbiB0aGUgUG93ZXJCb29rIDE5MC4KKyAqLworCisjZGVmaW5lIEJBQk9PTl9CQVNFICgweDUwRjFBMDAwKQkvKiBzYW1lIGFzIElERSBjb250cm9sbGVyIGJhc2UgKi8KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworc3RydWN0IGJhYm9vbiB7CisJY2hhcglwYWQxWzIwOF07CS8qIGdlbmVyaWMgSURFIHJlZ2lzdGVycywgbm90IHVzZWQgaGVyZSAqLworCXNob3J0CW1iX2NvbnRyb2w7CS8qIENvbnRyb2wgcmVnaXN0ZXI6CisJCQkJICogYml0IDUgOiBzbG90IDIgcG93ZXIgY29udHJvbAorCQkJCSAqIGJpdCA2IDogc2xvdCAxIHBvd2VyIGNvbnRyb2wKKwkJCQkgKi8KKwljaGFyCXBhZDJbMl07CisJc2hvcnQJbWJfc3RhdHVzOwkvKiAoMHhENCkgbWVkaWEgYmF5IHN0YXR1cyByZWdpc3RlcjoKKwkJCQkgKgorCQkJCSAqIGJpdCAwOiA/Pz8/CisJCQkJICogYml0IDE6IElERSBpbnRlcnJ1cHQgYWN0aXZlPworCQkJCSAqIGJpdCAyOiBiYXkgc3RhdHVzLCAwID0gZnVsbCwgMSA9IGVtcHR5CisJCQkJICogYml0IDM6ID8/Pz8KKwkJCQkgKi8KKwljaGFyCXBhZDNbMl07CS8qICgweEQ2KSBub3QgdXNlZCAqLworCXNob3J0CW1iX2lmcjsJCS8qICgweEQ4KSBtZWRpYSBiYXkgaW50ZXJydXB0IGZsYWdzIHJlZ2lzdGVyOgorCQkJCSAqCisJCQkJICogYml0IDA6ID8/Pz8KKwkJCQkgKiBiaXQgMTogSURFIGNvbnRyb2xsZXIgaW50ZXJydXB0CisJCQkJICogYml0IDI6IG1lZGlhIGJheSBzdGF0dXMgY2hhbmdlIGludGVycnVwdAorCQkJCSAqLworfTsKKworZXh0ZXJuIHZvbGF0aWxlIHN0cnVjdCBiYWJvb24gKmJhYm9vbjsKKworI2VuZGlmIC8qIF9fQVNTRU1CTFkgKiovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL21hY19pb3AuaCBiL2luY2x1ZGUvYXNtLW02OGsvbWFjX2lvcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwZDJlMzQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL21hY19pb3AuaApAQCAtMCwwICsxLDE2MiBAQAorLyoKKyAqIEkvTyBQcm9jZXNzb3IgKElPUCkgZGVmaW5lcyBhbmQgc3RydWN0dXJlcywgbW9zdGx5IHNuYWdnZWQgZnJvbSBBL1VYCisgKiBoZWFkZXIgZmlsZXMuCisgKgorICogVGhlIG9yaWdpbmFsIGhlYWRlciBmcm9tIHdoaWNoIHRoaXMgd2FzIHRha2VuIGlzIGNvcHlyaWdodGVkLiBJJ3ZlIGRvbmUgc29tZQorICogcmV3cml0aW5nIChpbiBmYWN0IG15IGNoYW5nZXMgbWFrZSB0aGlzIGEgYml0IG1vcmUgcmVhZGFibGUsIElNSE8pIGJ1dCBzb21lCisgKiBtb3JlIHNob3VsZCBiZSBkb25lLgorICovCisKKy8qCisgKiBUaGlzIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIElPUHMuIFVzZSB0aGlzIGFzIHRoZSBhZGRyZXNzIG9mCisgKiBhICJzdHJ1Y3QgaW9wIiAoc2VlIGJlbG93KSB0byBzZWUgd2hlcmUgdGhlIGFjdHVhbCByZWdpc3RlcnMgZmFsbC4KKyAqLworCisjZGVmaW5lIFNDQ19JT1BfQkFTRV9JSUZYCSgweDUwRjA0MDAwKQorI2RlZmluZSBJU01fSU9QX0JBU0VfSUlGWAkoMHg1MEYxMjAwMCkKKworI2RlZmluZSBTQ0NfSU9QX0JBU0VfUVVBRFJBCSgweDUwRjBDMDAwKQorI2RlZmluZSBJU01fSU9QX0JBU0VfUVVBRFJBCSgweDUwRjFFMDAwKQorCisvKiBJT1Agc3RhdHVzL2NvbnRyb2wgcmVnaXN0ZXIgYml0czogKi8KKworI2RlZmluZQlJT1BfQllQQVNTCTB4MDEJLyogYnlwYXNzLW1vZGUgaGFyZHdhcmUgYWNjZXNzICovCisjZGVmaW5lCUlPUF9BVVRPSU5DCTB4MDIJLyogYWxsb3cgYXV0b2luY3JlbWVudCBvZiByYW1oaS9sbyAqLworI2RlZmluZQlJT1BfUlVOCQkweDA0CS8qIHNldCB0byAwIHRvIHJlc2V0IElPUCBjaGlwICovCisjZGVmaW5lCUlPUF9JUlEJCTB4MDgJLyogZ2VuZXJhdGUgSVJRIHRvIElPUCBpZiAxICovCisjZGVmaW5lCUlPUF9JTlQwCTB4MTAJLyogaW50ciBwcmlvcml0eSBmcm9tIElPUCB0byBob3N0ICovCisjZGVmaW5lCUlPUF9JTlQxCTB4MjAJLyogaW50ciBwcmlvcml0eSBmcm9tIElPUCB0byBob3N0ICovCisjZGVmaW5lCUlPUF9IV0lOVAkweDQwCS8qIElSUSBmcm9tIGhhcmR3YXJlOyBieXBhc3MgbW9kZSBvbmx5ICovCisjZGVmaW5lCUlPUF9ETUFJTkFDVElWRQkweDgwCS8qIG5vIERNQSByZXF1ZXN0IGFjdGl2ZTsgYnlwYXNzIG1vZGUgb25seSAqLworCisjZGVmaW5lIE5VTV9JT1BTCTIKKyNkZWZpbmUgTlVNX0lPUF9DSEFOCTcKKyNkZWZpbmUgTlVNX0lPUF9NU0dTCU5VTV9JT1BfQ0hBTio4CisjZGVmaW5lIElPUF9NU0dfTEVOCTMyCisKKy8qIElPUCByZWZlcmVuY2UgbnVtYmVycywgdXNlZCBieSB0aGUgZ2xvYmFsbHktdmlzaWJsZSBpb3BfeHh4IGZ1bmN0aW9ucyAqLworCisjZGVmaW5lIElPUF9OVU1fU0NDCTAKKyNkZWZpbmUgSU9QX05VTV9JU00JMQorCisvKiBJT1AgY2hhbm5lbCBzdGF0ZXMgKi8KKworI2RlZmluZSBJT1BfTVNHX0lETEUJCTAgICAgICAgLyogaWRsZSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJT1BfTVNHX05FVwkJMSAgICAgICAvKiBuZXcgbWVzc2FnZSBzZW50ICAgICAgICAgICAgICovCisjZGVmaW5lIElPUF9NU0dfUkNWRAkJMiAgICAgICAvKiBtZXNzYWdlIHJlY2VpdmVkOyBwcm9jZXNzaW5nICovCisjZGVmaW5lIElPUF9NU0dfQ09NUExFVEUJMyAgICAgICAvKiBtZXNzYWdlIHByb2Nlc3NpbmcgY29tcGxldGUgICovCisKKy8qIElPUCBtZXNzYWdlIHN0YXR1cyBjb2RlcyAqLworCisjZGVmaW5lIElPUF9NU0dTVEFUVVNfVU5VU0VECTAJLyogVW51c3VlZCBtZXNzYWdlIHN0cnVjdHVyZSAgICAgICAqLworI2RlZmluZSBJT1BfTVNHU1RBVFVTX1dBSVRJTkcJMQkvKiB3YWl0aW5nIGZvciBjaGFubmVsICAgICAgICAgICAgICovCisjZGVmaW5lIElPUF9NU0dTVEFUVVNfU0VOVAkyCS8qIG1lc3NhZ2Ugc2VudCwgYXdhaXRpbmcgcmVwbHkgICAgKi8KKyNkZWZpbmUgSU9QX01TR1NUQVRVU19DT01QTEVURQkzCS8qIG1lc3NhZ2UgY29tcGxldGUgYW5kIHJlcGx5IHJjdmQgKi8KKyNkZWZpbmUgSU9QX01TR1NUQVRVU19VTlNPTAk2CS8qIG1lc3NhZ2UgaXMgdW5zb2xpY2l0ZWQgICAgICAgICAgKi8KKworLyogSU9QIG1lbW9yeSBhZGRyZXNzZXMgb2YgdGhlIG1lbWJlcnMgb2YgdGhlIG1hY19pb3Bfa2VybmVsIHN0cnVjdHVyZS4gKi8KKworI2RlZmluZSBJT1BfQUREUl9NQVhfU0VORF9DSEFOCTB4MDIwMAorI2RlZmluZSBJT1BfQUREUl9TRU5EX1NUQVRFCTB4MDIwMQorI2RlZmluZSBJT1BfQUREUl9QQVRDSF9DVFJMCTB4MDIxRgorI2RlZmluZSBJT1BfQUREUl9TRU5EX01TRwkweDAyMjAKKyNkZWZpbmUgSU9QX0FERFJfTUFYX1JFQ1ZfQ0hBTgkweDAzMDAKKyNkZWZpbmUgSU9QX0FERFJfUkVDVl9TVEFURQkweDAzMDEKKyNkZWZpbmUgSU9QX0FERFJfQUxJVkUJCTB4MDMxRgorI2RlZmluZSBJT1BfQUREUl9SRUNWX01TRwkweDAzMjAKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworLyoKKyAqIElPUCBDb250cm9sIHJlZ2lzdGVycywgc3RhZ2dlcmVkIGJlY2F1c2UgaW4gdXN1YWwgQXBwbGUgc3R5bGUgdGhleSB3ZXJlCisgKiB0b28gbGF6eSB0byBkZWNvZGUgdGhlIEEwIGJpdC4gVGhpcyBzdHJ1Y3R1cmUgaXMgYXNzdW1lZCB0byBiZWdpbiBhdAorICogb25lIG9mIHRoZSB4eHhfSU9QX0JBU0UgYWRkcmVzc2VzIGdpdmVuIGFib3ZlLgorICovCisKK3N0cnVjdCBtYWNfaW9wIHsKKyAgICBfX3U4CXJhbV9hZGRyX2hpOwkvKiBzaGFyZWQgUkFNIGFkZHJlc3MgaGkgYnl0ZSAqLworICAgIF9fdTgJcGFkMDsKKyAgICBfX3U4CXJhbV9hZGRyX2xvOwkvKiBzaGFyZWQgUkFNIGFkZHJlc3MgbG8gYnl0ZSAqLworICAgIF9fdTgJcGFkMTsKKyAgICBfX3U4CXN0YXR1c19jdHJsOwkvKiBzdGF0dXMvY29udHJvbCByZWdpc3RlciAqLworICAgIF9fdTgJcGFkMlszXTsKKyAgICBfX3U4CXJhbV9kYXRhOwkvKiBSQU0gZGF0YSBieXRlIGF0IHJhbWhpL2xvICovCisKKyAgICBfX3U4CXBhZDNbMjNdOworCisgICAgLyogQnlwYXNzLW1vZGUgaGFyZHdhcmUgYWNjZXNzIHJlZ2lzdGVycyAqLworCisgICAgdW5pb24geworCXN0cnVjdCB7CQkvKiBTQ0MgcmVnaXN0ZXJzICovCisJICAgIF9fdTggc2NjYl9jbWQ7CS8qIFNDQyBCIGNvbW1hbmQgcmVnICovCisJICAgIF9fdTggcGFkNDsKKwkgICAgX191OCBzY2NhX2NtZDsJLyogU0NDIEEgY29tbWFuZCByZWcgKi8KKwkgICAgX191OCBwYWQ1OworCSAgICBfX3U4IHNjY2JfZGF0YTsJLyogU0NDIEIgZGF0YSAqLworCSAgICBfX3U4IHBhZDY7CisJICAgIF9fdTggc2NjYV9kYXRhOwkvKiBTQ0MgQSBkYXRhICovCisJfSBzY2NfcmVnczsKKworCXN0cnVjdCB7CQkvKiBJU00gcmVnaXN0ZXJzICovCisJICAgIF9fdTggd2RhdGE7CQkvKiB3cml0ZSBhIGRhdGEgYnl0ZSAqLworCSAgICBfX3U4IHBhZDc7CisJICAgIF9fdTggd21hcms7CQkvKiB3cml0ZSBhIG1hcmsgYnl0ZSAqLworCSAgICBfX3U4IHBhZDg7CisJICAgIF9fdTggd2NyYzsJCS8qIHdyaXRlIDItYnl0ZSBjcmMgdG8gZGlzayAqLworCSAgICBfX3U4IHBhZDk7CisJICAgIF9fdTggd3BhcmFtczsJLyogd3JpdGUgdGhlIHBhcmFtIHJlZ3MgKi8KKwkgICAgX191OCBwYWQxMDsKKwkgICAgX191OCB3cGhhc2U7CS8qIHdyaXRlIHRoZSBwaGFzZSBzdGF0ZXMgJiBkaXJzICovCisJICAgIF9fdTggcGFkMTE7CisJICAgIF9fdTggd3NldHVwOwkvKiB3cml0ZSB0aGUgc2V0dXAgcmVnaXN0ZXIgKi8KKwkgICAgX191OCBwYWQxMjsKKwkgICAgX191OCB3emVyb2VzOwkvKiBtb2RlIHJlZzogMSdzIGNsciBiaXRzLCAwJ3MgYXJlIHggKi8KKwkgICAgX191OCBwYWQxMzsKKwkgICAgX191OCB3b25lczsJCS8qIG1vZGUgcmVnOiAxJ3Mgc2V0IGJpdHMsIDAncyBhcmUgeCAqLworCSAgICBfX3U4IHBhZDE0OworCSAgICBfX3U4IHJkYXRhOwkJLyogcmVhZCBhIGRhdGEgYnl0ZSAqLworCSAgICBfX3U4IHBhZDE1OworCSAgICBfX3U4IHJtYXJrOwkJLyogcmVhZCBhIG1hcmsgYnl0ZSAqLworCSAgICBfX3U4IHBhZDE2OworCSAgICBfX3U4IHJlcnJvcjsJLyogcmVhZCB0aGUgZXJyb3IgcmVnaXN0ZXIgKi8KKwkgICAgX191OCBwYWQxNzsKKwkgICAgX191OCBycGFyYW1zOwkvKiByZWFkIHRoZSBwYXJhbSByZWdzICovCisJICAgIF9fdTggcGFkMTg7CisJICAgIF9fdTggcnBoYXNlOwkvKiByZWFkIHRoZSBwaGFzZSBzdGF0ZXMgJiBkaXJzICovCisJICAgIF9fdTggcGFkMTk7CisJICAgIF9fdTggcnNldHVwOwkvKiByZWFkIHRoZSBzZXR1cCByZWdpc3RlciAqLworCSAgICBfX3U4IHBhZDIwOworCSAgICBfX3U4IHJtb2RlOwkJLyogcmVhZCB0aGUgbW9kZSByZWdpc3RlciAqLworCSAgICBfX3U4IHBhZDIxOworCSAgICBfX3U4IHJoYW5kc2hha2U7CS8qIHJlYWQgdGhlIGhhbmRzaGFrZSByZWdpc3RlciAqLworCX0gaXNtX3JlZ3M7CisgICAgfSBiOworfTsKKworLyogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byB0cmFjayBJT1AgbWVzc2FnZXMgaW4gdGhlIExpbnV4IGtlcm5lbCAqLworCitzdHJ1Y3QgaW9wX21zZyB7CisJc3RydWN0IGlvcF9tc2cJKm5leHQ7CQkvKiBuZXh0IG1lc3NhZ2UgaW4gcXVldWUgb3IgTlVMTCAgICAgKi8KKwl1aW50CWlvcF9udW07CQkvKiBJT1AgbnVtYmVyICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwl1aW50CWNoYW5uZWw7CQkvKiBjaGFubmVsIG51bWJlciAgICAgICAgICAgICAgICAgICAgKi8KKwl2b2lkCSpjYWxsZXJfcHJpdjsJCS8qIGNhbGxlciBwcml2YXRlIGRhdGEgICAgICAgICAgICAgICAqLworCWludAlzdGF0dXM7CQkJLyogc3RhdHVzIG9mIHRoaXMgbWVzc2FnZSAgICAgICAgICAgICovCisJX191OAltZXNzYWdlW0lPUF9NU0dfTEVOXTsJLyogdGhlIG1lc3NhZ2UgYmVpbmcgc2VudC9yZWNlaXZlZCAgICovCisJX191OAlyZXBseVtJT1BfTVNHX0xFTl07CS8qIHRoZSByZXBseSB0byB0aGUgbWVzc2FnZSAgICAgICAgICAqLworCXZvaWQJKCpoYW5kbGVyKShzdHJ1Y3QgaW9wX21zZyAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKKwkJCQkJLyogZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHJlcGx5IHJlY3ZkICovCit9OworCitleHRlcm4gaW50IGlvcF9zY2NfcHJlc2VudCxpb3BfaXNtX3ByZXNlbnQ7CisKK2V4dGVybiBpbnQgaW9wX2xpc3Rlbih1aW50LCB1aW50LAorCQkJdm9pZCAoKmhhbmRsZXIpKHN0cnVjdCBpb3BfbXNnICosIHN0cnVjdCBwdF9yZWdzICopLAorCQkJY29uc3QgY2hhciAqKTsKK2V4dGVybiBpbnQgaW9wX3NlbmRfbWVzc2FnZSh1aW50LCB1aW50LCB2b2lkICosIHVpbnQsIF9fdTggKiwKKwkJCSAgICB2b2lkICgqKShzdHJ1Y3QgaW9wX21zZyAqLCBzdHJ1Y3QgcHRfcmVncyAqKSk7CitleHRlcm4gdm9pZCBpb3BfY29tcGxldGVfbWVzc2FnZShzdHJ1Y3QgaW9wX21zZyAqKTsKK2V4dGVybiB2b2lkIGlvcF91cGxvYWRfY29kZSh1aW50LCBfX3U4ICosIHVpbnQsIF9fdTE2KTsKK2V4dGVybiB2b2lkIGlvcF9kb3dubG9hZF9jb2RlKHVpbnQsIF9fdTggKiwgdWludCwgX191MTYpOworZXh0ZXJuIF9fdTggKmlvcF9jb21wYXJlX2NvZGUodWludCwgX191OCAqLCB1aW50LCBfX3UxNik7CisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvbWFjX21vdXNlLmggYi9pbmNsdWRlL2FzbS1tNjhrL21hY19tb3VzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5YTVjMjkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL21hY19tb3VzZS5oCkBAIC0wLDAgKzEsMjMgQEAKKyNpZm5kZWYgX0FTTV9NQUNfTU9VU0VfSAorI2RlZmluZSBfQVNNX01BQ19NT1VTRV9ICisKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1tNjhrL21hY19tb3VzZS5oCisgKiBoZWFkZXIgZmlsZSBmb3IgTWFjaW50b3NoIEFEQiBtb3VzZSBkcml2ZXIKKyAqIDI3LTEwLTk3IE1pY2hhZWwgU2NobWl0egorICogY29waWVkIGZyb206CisgKiBoZWFkZXIgZmlsZSBmb3IgQXRhcmkgTW91c2UgZHJpdmVyCisgKiBieSBSb2JlcnQgZGUgVnJpZXMgKHJvYmVydEBhbmQubmwpIG9uIDE5SnVsOTMKKyAqLworCitzdHJ1Y3QgbW91c2Vfc3RhdHVzIHsKKwljaGFyCQlidXR0b25zOworCXNob3J0CQlkeDsKKwlzaG9ydAkJZHk7CisJaW50CQlyZWFkeTsKKwlpbnQJCWFjdGl2ZTsKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OworCXN0cnVjdCBmYXN5bmNfc3RydWN0ICpmYXN5bmNwdHI7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvbWFjX29zcy5oIGIvaW5jbHVkZS9hc20tbTY4ay9tYWNfb3NzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY0NGE2MwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvbWFjX29zcy5oCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKglPU1MKKyAqCisgKglUaGlzIGlzIHVzZWQgaW4gcGxhY2Ugb2YgVklBMiBvbiB0aGUgSUlmeC4KKyAqLworCisjZGVmaW5lIE9TU19CQVNFCSgweDUwZjFhMDAwKQorCisvKgorICogSW50ZXJydXB0IGxldmVsIG9mZnNldHMgZm9yIG1hY19vc3MtPmlycV9sZXZlbAorICovCisKKyNkZWZpbmUgT1NTX05VQlVTMAkwCisjZGVmaW5lIE9TU19OVUJVUzEJMQorI2RlZmluZSBPU1NfTlVCVVMyCTIKKyNkZWZpbmUgT1NTX05VQlVTMwkzCisjZGVmaW5lIE9TU19OVUJVUzQJNAorI2RlZmluZSBPU1NfTlVCVVM1CTUKKyNkZWZpbmUgT1NTX0lPUElTTQk2CisjZGVmaW5lIE9TU19JT1BTQ0MJNworI2RlZmluZSBPU1NfU09VTkQJOAorI2RlZmluZSBPU1NfU0NTSQk5CisjZGVmaW5lIE9TU182MEhaCTEwCisjZGVmaW5lIE9TU19WSUExCTExCisjZGVmaW5lIE9TU19VTlVTRUQxCTEyCisjZGVmaW5lIE9TU19VTlVTRUQyCTEzCisjZGVmaW5lIE9TU19QQVJJVFkJMTQKKyNkZWZpbmUgT1NTX1VOVVNFRDMJMTUKKworI2RlZmluZSBPU1NfTlVNX1NPVVJDRVMJMTYKKworLyoKKyAqIFBlbmRpbmcgaW50ZXJydXB0IGJpdHMgaW4gbWFjX29zcy0+aXJxX3BlbmRpbmcKKyAqLworCisjZGVmaW5lIE9TU19JUF9OVUJVUzAJMHgwMDAxCisjZGVmaW5lIE9TU19JUF9OVUJVUzEJMHgwMDAyCisjZGVmaW5lIE9TU19JUF9OVUJVUzIJMHgwMDA0CisjZGVmaW5lIE9TU19JUF9OVUJVUzMJMHgwMDA4CisjZGVmaW5lIE9TU19JUF9OVUJVUzQJMHgwMDEwCisjZGVmaW5lIE9TU19JUF9OVUJVUzUJMHgwMDIwCisjZGVmaW5lIE9TU19JUF9JT1BJU00JMHgwMDQwCisjZGVmaW5lIE9TU19JUF9JT1BTQ0MJMHgwMDgwCisjZGVmaW5lIE9TU19JUF9TT1VORAkweDAxMDAKKyNkZWZpbmUgT1NTX0lQX1NDU0kJMHgwMjAwCisjZGVmaW5lIE9TU19JUF82MEhaCTB4MDQwMAorI2RlZmluZSBPU1NfSVBfVklBMQkweDA4MDAKKyNkZWZpbmUgT1NTX0lQX1VOVVNFRDEJMHgxMDAwCisjZGVmaW5lIE9TU19JUF9VTlVTRUQyCTB4MjAwMAorI2RlZmluZSBPU1NfSVBfUEFSSVRZCTB4NDAwMAorI2RlZmluZSBPU1NfSVBfVU5VU0VEMwkweDgwMDAKKworI2RlZmluZSBPU1NfSVBfTlVCVVMgKE9TU19JUF9OVUJVUzB8T1NTX0lQX05VQlVTMXxPU1NfSVBfTlVCVVMyfE9TU19JUF9OVUJVUzN8T1NTX0lQX05VQlVTNHxPU1NfSVBfTlVCVVM1KQorCisvKgorICogUm9tIENvbnRyb2wgUmVnaXN0ZXIKKyAqLworCisjZGVmaW5lIE9TU19QT1dFUk9GRgkweDgwCisKKy8qCisgKiBPU1MgSW50ZXJydXB0IGxldmVscyBmb3IgdmFyaW91cyBzdWItc3lzdGVtcworICoKKyAqIFRoaXMgbWFwcGluZyBpcyBsYXllZCBvdXQgd2l0aCB0d28gdGhpbmdzIGluIG1pbmQ6IGZpcnN0LCB3ZSB0cnkgdG8ga2VlcAorICogdGhpbmdzIG9uIHRoZWlyIG93biBsZXZlbHMgdG8gYXZvaWQgaGF2aW5nIHRvIGRvIGRvdWJsZS1kaXNwYXRjaGVzLiBTZWNvbmQsCisgKiB0aGUgbGV2ZWxzIG1hdGNoIGFzIGNsb3NlbHkgYXMgcG9zc2libGUgdGhlIGFsdGVybmF0ZSBJUlEgbWFwcGluZyBtb2RlIChha2EKKyAqICJBL1VYIG1vZGUiKSBhdmFpbGFibGUgb24gc29tZSBWSUEgbWFjaGluZXMuCisgKi8KKworI2RlZmluZSBPU1NfSVJRTEVWX0RJU0FCTEVECTAKKyNkZWZpbmUgT1NTX0lSUUxFVl9JT1BJU00JMQkvKiBBREI/ICovCisjZGVmaW5lIE9TU19JUlFMRVZfU0NTSQkJMgorI2RlZmluZSBPU1NfSVJRTEVWX05VQlVTCTMJLyoga2VlcCB0aGlzIG9uIGl0cyBvd24gbGV2ZWwgKi8KKyNkZWZpbmUgT1NTX0lSUUxFVl9JT1BTQ0MJNAkvKiBtYXRjaGVzIFZJQSBhbHRlcm5hdGUgbWFwcGluZyAqLworI2RlZmluZSBPU1NfSVJRTEVWX1NPVU5ECTUJLyogbWF0Y2hlcyBWSUEgYWx0ZXJuYXRlIG1hcHBpbmcgKi8KKyNkZWZpbmUgT1NTX0lSUUxFVl82MEhaCQk2CS8qIG1hdGNoZXMgVklBIGFsdGVybmF0ZSBtYXBwaW5nICovCisjZGVmaW5lIE9TU19JUlFMRVZfVklBMQkJNgkvKiBtYXRjaGVzIFZJQSBhbHRlcm5hdGUgbWFwcGluZyAqLworI2RlZmluZSBPU1NfSVJRTEVWX1BBUklUWQk3CS8qIG1hdGNoZXMgVklBIGFsdGVybmF0ZSBtYXBwaW5nICovCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK3N0cnVjdCBtYWNfb3NzIHsKKyAgICBfX3U4ICBpcnFfbGV2ZWxbMHgxMF07CS8qIFsweDAwMC0weDAwZl0gSW50ZXJydXB0IGxldmVscyAqLworICAgIF9fdTggIHBhZGRpbmcwWzB4MUYyXTsJLyogWzB4MDEwLTB4MjAxXSBJTyBzcGFjZSBmaWxsZXIgKi8KKyAgICBfX3UxNiBpcnFfcGVuZGluZzsJCS8qIFsweDIwMi0weDIwM10gcGVuZGluZyBpbnRlcnJ1cHRzIGJpdHMgKi8KKyAgICBfX3U4ICByb21fY3RybDsJCS8qIFsweDIwNC0weDIwNF0gUk9NIGNudGwgcmVnIChmb3IgcG93ZXJvZmYpICovCisgICAgX191OCAgcGFkZGluZzFbMHgyXTsJLyogWzB4MjA1LTB4MjA2XSBjdXJyZW50bHkgdW51c2VkIGJ5IEEvVVggKi8KKyAgICBfX3U4ICBhY2tfNjBoejsJCS8qIFsweDIwNy0weDIwN10gNjAgSHogYWNrLiAqLworfTsKKworZXh0ZXJuIHZvbGF0aWxlIHN0cnVjdCBtYWNfb3NzICpvc3M7CitleHRlcm4gaW50IG9zc19wcmVzZW50OworCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL21hY19wc2MuaCBiL2luY2x1ZGUvYXNtLW02OGsvbWFjX3BzYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4MDhiYjAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL21hY19wc2MuaApAQCAtMCwwICsxLDI0OCBAQAorLyoKKyAqIEFwcGxlIFBlcmlwaGVyYWwgU3lzdGVtIENvbnRyb2xsZXIgKFBTQykKKyAqCisgKiBUaGUgUFNDIGlzIHVzZWQgb24gdGhlIEFWIE1hY3MgdG8gY29udHJvbCBJTyBmdW5jdGlvbnMgbm90IGhhbmRsZWQKKyAqIGJ5IHRoZSBWSUFzIChFdGhlcm5ldCwgRFNQLCBTQ0MsIFNvdW5kKS4gVGhpcyBpbmNsdWRlcyBuaW5lIERNQQorICogY2hhbm5lbHMuCisgKgorICogVGhlIGZpcnN0IHNldmVuIERNQSBjaGFubmVscyBhcHBlYXIgdG8gYmUgIm9uZS1zaG90IiBhbmQgYXJlIGFjdHVhbGx5CisgKiBzZXRzIG9mIHR3byBjaGFubmVsczsgb25lIG1lbWJlciBpcyBhY3RpdmUgd2hpbGUgdGhlIG90aGVyIGlzIGJlaW5nCisgKiBjb25maWd1cmVkLCBhbmQgdGhlbiB5b3UgZmxpcCB0aGUgYWN0aXZlIG1lbWJlciBhbmQgc3RhcnQgYWxsIG92ZXIgYWdhaW4uCisgKiBUaGUgb25lLXNob3QgY2hhbm5lbHMgYXJlIGdyb3VwZWQgdG9nZXRoZXIgYW5kIGFyZToKKyAqCisgKiAxLiBTQ1NJCisgKiAyLiBFdGhlcm5ldCBSZWFkCisgKiAzLiBFdGhlcm5ldCBXcml0ZQorICogNC4gRmxvcHB5IERpc2sgQ29udHJvbGxlcgorICogNS4gU0NDIENoYW5uZWwgQSBSZWNlaXZlCisgKiA2LiBTQ0MgQ2hhbm5lbCBCIFJlY2VpdmUKKyAqIDcuIFNDQyBDaGFubmVsIEEgVHJhbnNtaXQKKyAqCisgKiBUaGUgcmVtYWluaW5nIHR3byBjaGFubmVscyBhcmUgaGFuZGxlZCBzb21ld2hhdCBkaWZmZXJlbnRseS4gVGhleSBhcHBlYXIKKyAqIHRvIGJlIGNsb3NlbHkgdGllZCBhbmQgc2hhcmUgb25lIHNldCBvZiByZWdpc3RlcnMuIFRoZXkgYWxzbyBzZWVtIHRvIHJ1bgorICogY29udGludW91c2x5LCBhbHRob3VnaCBob3cgeW91IGtlZXAgdGhlIGJ1ZmZlciBmaWxsZWQgaW4gdGhpcyBzY2VuYXJpbyBpcworICogbm90IHVuZGVyc3Rvb2QgYXMgdGhlcmUgc2VlbXMgdG8gYmUgb25seSBvbmUgaW5wdXQgYW5kIG9uZSBvdXRwdXQgYnVmZmVyCisgKiBwb2ludGVyLgorICoKKyAqIE11Y2ggb2YgdGhpcyB3YXMgZXh0cmFwb2xhdGVkIGZyb20gd2hhdCB3YXMga25vd24gYWJvdXQgdGhlIEV0aGVybmV0CisgKiByZWdpc3RlcnMgYW5kIHN1YnNlcXVlbnRseSBjb25maXJtZWQgdXNpbmcgTWFjc0J1ZyAoaWUgYnkgcGluZ2luZyB0aGUKKyAqIG1hY2hpbmUgd2l0aCBlYXN5LXRvLWZpbmQgcGF0dGVybnMgYW5kIGxvb2tpbmcgZm9yIHRoZW0gaW4gdGhlIERNQQorICogYnVmZmVycywgb3IgYnkgc2VuZGluZyBhIGZpbGUgb3ZlciB0aGUgc2VyaWFsIHBvcnRzIGFuZCBmaW5kaW5nIHRoZQorICogZmlsZSBpbiB0aGUgYnVmZmVycy4pCisgKgorICogMTk5OS0wNS0yNSAoam10KQorICovCisKKyNkZWZpbmUgUFNDX0JBU0UJKDB4NTBGMzEwMDApCisKKy8qCisgKiBUaGUgSUVSL0lGUiByZWdpc3RlcnMgd29yayBsaWtlIHRoZSBWSUEsIGV4Y2VwdCB0aGF0IGl0IGhhcyA0CisgKiBvZiB0aGVtIGVhY2ggb24gZGlmZmVyZW50IGludGVycnVwdCBsZXZlbHMsIGFuZCBlYWNoIHJlZ2lzdGVyCisgKiBzZXQgb25seSBzZWVtcyB0byBoYW5kbGUgZm91ciBpbnRlcnJ1cHRzIGluc3RlYWQgb2Ygc2V2ZW4uCisgKgorICogVG8gYWNjZXNzIGEgcGFydGljdWxhciBzZXQgb2YgcmVnaXN0ZXJzLCBhZGQgMHhuMCB0byB0aGUgYmFzZQorICogd2hlcmUgbiA9IDMsNCw1IG9yIDYuCisgKi8KKworI2RlZmluZSBwSUZSYmFzZQkweDEwMAorI2RlZmluZSBwSUVSYmFzZQkweDEwNAorCisvKgorICogT25lLXNob3QgRE1BIGNvbnRyb2wgcmVnaXN0ZXJzCisgKi8KKworI2RlZmluZSBQU0NfTVlTVEVSWQkweDgwNAorCisjZGVmaW5lIFBTQ19DVExfQkFTRQkweEMwMAorCisjZGVmaW5lIFBTQ19TQ1NJX0NUTAkweEMwMAorI2RlZmluZSBQU0NfRU5FVFJEX0NUTCAgMHhDMTAKKyNkZWZpbmUgUFNDX0VORVRXUl9DVEwgIDB4QzIwCisjZGVmaW5lIFBTQ19GRENfQ1RMCTB4QzMwCisjZGVmaW5lIFBTQ19TQ0NBX0NUTAkweEM0MAorI2RlZmluZSBQU0NfU0NDQl9DVEwJMHhDNTAKKyNkZWZpbmUgUFNDX1NDQ0FUWF9DVEwJMHhDNjAKKworLyoKKyAqIERNQSBjaGFubmVscy4gQWRkICsweDEwIGZvciB0aGUgc2Vjb25kIGNoYW5uZWwgaW4gdGhlIHNldC4KKyAqIFlvdSdyZSBzdXBwb3NlZCB0byB1c2Ugb25lIGNoYW5uZWwgd2hpbGUgdGhlIG90aGVyIHJ1bnMgYW5kCisgKiB0aGVuIGZsaXAgY2hhbm5lbHMgYW5kIGRvIHRoZSB3aG9sZSB0aGluZyBhZ2Fpbi4KKyAqLworCisjZGVmaW5lIFBTQ19BRERSX0JBU0UJMHgxMDAwCisjZGVmaW5lIFBTQ19MRU5fQkFTRQkweDEwMDQKKyNkZWZpbmUgUFNDX0NNRF9CQVNFCTB4MTAwOAorCisjZGVmaW5lIFBTQ19TRVQwCTB4MDAKKyNkZWZpbmUgUFNDX1NFVDEJMHgxMAorCisjZGVmaW5lIFBTQ19TQ1NJX0FERFIJMHgxMDAwCS8qIGNvbmZpcm1lZCAqLworI2RlZmluZSBQU0NfU0NTSV9MRU4JMHgxMDA0CS8qIGNvbmZpcm1lZCAqLworI2RlZmluZSBQU0NfU0NTSV9DTUQJMHgxMDA4CS8qIGNvbmZpcm1lZCAqLworI2RlZmluZSBQU0NfRU5FVFJEX0FERFIgMHgxMDIwCS8qIGNvbmZpcm1lZCAqLworI2RlZmluZSBQU0NfRU5FVFJEX0xFTiAgMHgxMDI0CS8qIGNvbmZpcm1lZCAqLworI2RlZmluZSBQU0NfRU5FVFJEX0NNRCAgMHgxMDI4CS8qIGNvbmZpcm1lZCAqLworI2RlZmluZSBQU0NfRU5FVFdSX0FERFIgMHgxMDQwCS8qIGNvbmZpcm1lZCAqLworI2RlZmluZSBQU0NfRU5FVFdSX0xFTiAgMHgxMDQ0CS8qIGNvbmZpcm1lZCAqLworI2RlZmluZSBQU0NfRU5FVFdSX0NNRCAgMHgxMDQ4CS8qIGNvbmZpcm1lZCAqLworI2RlZmluZSBQU0NfRkRDX0FERFIJMHgxMDYwCS8qIHN0cm9uZ2x5IHN1c3BlY3RlZCAqLworI2RlZmluZSBQU0NfRkRDX0xFTgkweDEwNjQJLyogc3Ryb25nbHkgc3VzcGVjdGVkICovCisjZGVmaW5lIFBTQ19GRENfQ01ECTB4MTA2OAkvKiBzdHJvbmdseSBzdXNwZWN0ZWQgKi8KKyNkZWZpbmUgUFNDX1NDQ0FfQUREUgkweDEwODAJLyogY29uZmlybWVkICovCisjZGVmaW5lIFBTQ19TQ0NBX0xFTgkweDEwODQJLyogY29uZmlybWVkICovCisjZGVmaW5lIFBTQ19TQ0NBX0NNRAkweDEwODgJLyogY29uZmlybWVkICovCisjZGVmaW5lIFBTQ19TQ0NCX0FERFIJMHgxMEEwCS8qIGNvbmZpcm1lZCAqLworI2RlZmluZSBQU0NfU0NDQl9MRU4JMHgxMEE0CS8qIGNvbmZpcm1lZCAqLworI2RlZmluZSBQU0NfU0NDQl9DTUQJMHgxMEE4CS8qIGNvbmZpcm1lZCAqLworI2RlZmluZSBQU0NfU0NDQVRYX0FERFIJMHgxMEMwCS8qIGNvbmZpcm1lZCAqLworI2RlZmluZSBQU0NfU0NDQVRYX0xFTgkweDEwQzQJLyogY29uZmlybWVkICovCisjZGVmaW5lIFBTQ19TQ0NBVFhfQ01ECTB4MTBDOAkvKiBjb25maXJtZWQgKi8KKworLyoKKyAqIEZyZWUtcnVubmluZyBETUEgcmVnaXN0ZXJzLiBUaGUgb25seSBwYXJ0IGtub3duIGZvciBzdXJlIGFyZSB0aGUgYml0cyBpbgorICogdGhlIGNvbnRyb2wgcmVnaXN0ZXIsIHRoZSBidWZmZXIgYWRkcmVzc2VzIGFuZCB0aGUgYnVmZmVyIGxlbmd0aC4gRXZlcnl0aGluZworICogZWxzZSBpcyBhbnlib2R5J3MgZ3Vlc3MuCisgKgorICogVGhlc2UgcmVnaXN0ZXJzIHNlZW0gdG8gYmUgbWlycm9yZWQgZXZlcnkgdGhpcnR5LXR3byBieXRlcyB1cCB1bnRpbCBvZmZzZXQKKyAqIDB4MzAwLiBJdCdzIHNhZmUgdG8gYXNzdW1lIHRoZW4gdGhhdCBhIG5ldyBzZXQgb2YgcmVnaXN0ZXJzIHN0YXJ0cyB0aGVyZS4KKyAqLworCisjZGVmaW5lIFBTQ19TTkRfQ1RMCTB4MjAwCS8qCisJCQkJICogWyAxNi1iaXQgXQorCQkJCSAqIFNvdW5kIChTaW5nZXI/KSBjb250cm9sIHJlZ2lzdGVyLgorCQkJCSAqCisJCQkJICogYml0IDAgIDogPz8/PworCQkJCSAqIGJpdCAxICA6ID8/Pz8KKwkJCQkgKiBiaXQgMiAgOiBTZXQgdG8gb25lIHRvIGVuYWJsZSBzb3VuZAorCQkJCSAqICAgICAgICAgIG91dHB1dC4gUG9zc2libHkgYSBtdXRlIGZsYWcuCisJCQkJICogYml0IDMgIDogPz8/PworCQkJCSAqIGJpdCA0ICA6ID8/Pz8KKwkJCQkgKiBiaXQgNSAgOiA/Pz8/CisJCQkJICogYml0IDYgIDogU2V0IHRvIG9uZSB0byBlbmFibGUgcGFzcy10aHJ1CisJCQkJICogICAgICAgICAgYXVkaW8uIEluIHRoaXMgbW9kZSB0aGUgYXVkaW8gZGF0YQorCQkJCSAqICAgICAgICAgIHNlZW1zIHRvIGFwcGVhciBpbiBib3RoIHRoZSBpbnB1dAorCQkJCSAqICAgICAgICAgIGJ1ZmZlciBhbmQgdGhlIG91dHB1dCBidWZmZXIuCisJCQkJICogYml0IDcgIDogU2V0IHRvIG9uZSB0byBhY3RpdmF0ZSB0aGUKKwkJCQkgKiAgICAgICAgICBzb3VuZCBpbnB1dCBETUEgb3IgemVybyB0bworCQkJCSAqICAgICAgICAgIGRpc2FibGUgaXQuCisJCQkJICogYml0IDggIDogU2V0IHRvIG9uZSB0byBhY3RpdmF0ZSB0aGUKKwkJCQkgKiAgICAgICAgICBzb3VuZCBvdXRwdXQgRE1BIG9yIHplcm8gdG8KKwkJCQkgKiAgICAgICAgICBkaXNhYmxlIGl0LgorCQkJCSAqIGJpdCA5ICA6IFwKKwkJCQkgKiBiaXQgMTEgOiAgfAorCQkJCSAqICAgICAgICAgIFRoZXNlIHR3byBiaXRzIGNvbnRyb2wgdGhlIHNhbXBsZQorCQkJCSAqICAgICAgICAgIHJhdGUuIFVzdWFsbHkgc2V0IHRvIGJpbmFyeSAxMCBhbmQKKwkJCQkgKgkgICAgTWFjT1MgOC4wIHNheXMgSSdtIGF0IDQ4IEtIei4gVXNpbmcKKwkJCQkgKgkgICAgYSBiaW5hcnkgdmFsdWUgb2YgMDEgbWFrZXMgdGhpbmdzCisJCQkJICoJICAgIHNvdW5kIGFib3V0IDEvMiBzcGVlZCAoMjQgS0h6PykgYW5kCisJCQkJICogICAgICAgICAgYmluYXJ5IDAwIGlzIHNsb3dlciBzdGlsbCAoMjIgS0h6PykKKwkJCQkgKgorCQkJCSAqIFNldHRpbmcgdGhpcyB0byAweDAwMDAgaXMgYSBnb29kIHdheSB0bworCQkJCSAqIGtpbGwgYWxsIERNQSBhdCBib290IHRpbWUgc28gdGhhdCB0aGUKKwkJCQkgKiBQU0Mgd29uJ3Qgb3ZlcndyaXRlIHRoZSBrZXJuZWwgaW1hZ2UKKwkJCQkgKiB3aXRoIHNvdW5kIGRhdGEuCisJCQkJICovCisKKy8qCisgKiAweDAyMDIgLSAweDAyMDMgaXMgdW51c2VkLiBXcml0aW5nIHRoZXJlCisgKiBzZWVtcyB0byBjbG9iYmVyIHRoZSBjb250cm9sIHJlZ2lzdGVyLgorICovCisKKyNkZWZpbmUgUFNDX1NORF9TT1VSQ0UJMHgyMDQJLyoKKwkJCQkgKiBbIDMyLWJpdCBdCisJCQkJICogQ29udHJvbHMgaW5wdXQgc291cmNlIGFuZCB2b2x1bWU6CisJCQkJICoKKwkJCQkgKiBiaXRzIDEyLTE1IDogaW5wdXQgc291cmNlIHZvbHVtZSwgMCAtIEYKKwkJCQkgKiBiaXRzIDE2LTE5IDogdW5rbm93biwgYWx3YXlzIDB4NQorCQkJCSAqIGJpdHMgMjAtMjMgOiBpbnB1dCBzb3VyY2Ugc2VsZWN0aW9uOgorCQkJCSAqICAgICAgICAgICAgICAgICAgMHgzID0gQ0QgQXVkaW8KKwkJCQkgKiAgICAgICAgICAgICAgICAgIDB4NCA9IEV4dGVybmFsIEF1ZGlvCisJCQkJICoKKwkJCQkgKiBUaGUgdm9sdW1lIGlzIGRlZmluaXRlbHkgbm90IHRoZSBnZW5lcmFsCisJCQkJICogb3V0cHV0IHZvbHVtZSBhcyBpdCBkb2Vzbid0IGFmZmVjdCB0aGUKKwkJCQkgKiBhbGVydCBzb3VuZCB2b2x1bWUuCisJCQkJICovCisjZGVmaW5lIFBTQ19TTkRfU1RBVFVTMQkweDIwOAkvKgorCQkJCSAqIFsgMzItYml0IF0KKwkJCQkgKiBBcHBlYXJzIHRvIGJlIGEgcmVhZC1vbmx5IHN0YXR1cyByZWdpc3Rlci4KKwkJCQkgKiBUaGUgdXN1YWwgdmFsdWUgaXMgMHgwMDQwMDAwMi4KKwkJCQkgKi8KKyNkZWZpbmUgUFNDX1NORF9IVUgzCTB4MjBDCS8qCisJCQkJICogWyAxNi1iaXQgXQorCQkJCSAqIFVua25vd24gMTYtYml0IHZhbHVlLCBhbHdheXMgMHgwMDAwLgorCQkJCSAqLworI2RlZmluZSBQU0NfU05EX0JJVFMyR08JMHgyMEUJLyoKKwkJCQkgKiBbIDE2LWJpdCBdCisJCQkJICogQ291bnRzIGRvd24gdG8gemVybyBmcm9tIHNvbWUgY29uc3RhbnQKKwkJCQkgKiB2YWx1ZS4gVGhlIHZhbHVlIGFwcGVhcnMgdG8gYmUgdGhlCisJCQkJICogbnVtYmVyIG9mIF9iaXRzXyByZW1haW5pbmcgYmVmb3JlIHRoZQorCQkJCSAqIGJ1ZmZlciBpcyBmdWxsLCB3aGljaCB3b3VsZCBtYWtlIHNlbnNlCisJCQkJICogc2luY2UgQXBwbGUncyBkb2NzIHNheSB0aGUgc291bmQgRE1BCisJCQkJICogY2hhbm5lbHMgYXJlIDEgYml0IHdpZGUuCisJCQkJICovCisjZGVmaW5lIFBTQ19TTkRfSU5BRERSCTB4MjEwCS8qCisJCQkJICogWyAzMi1iaXQgXQorCQkJCSAqIEFkZHJlc3Mgb2YgdGhlIHNvdW5kIGlucHV0IERNQSBidWZmZXIKKwkJCQkgKi8KKyNkZWZpbmUgUFNDX1NORF9PVVRBRERSCTB4MjE0CS8qCisJCQkJICogWyAzMi1iaXQgXQorCQkJCSAqIEFkZHJlc3Mgb2YgdGhlIHNvdW5kIG91dHB1dCBETUEgYnVmZmVyCisJCQkJICovCisjZGVmaW5lIFBTQ19TTkRfTEVOCTB4MjE4CS8qCisJCQkJICogWyAxNi1iaXQgXQorCQkJCSAqIExlbmd0aCBvZiBib3RoIGJ1ZmZlcnMgaW4gZWlnaHQtYnl0ZSB1bml0cy4KKwkJCQkgKi8KKyNkZWZpbmUgUFNDX1NORF9IVUg0CTB4MjFBCS8qCisJCQkJICogWyAxNi1iaXQgXQorCQkJCSAqIFVua25vd24sIGFsd2F5cyAweDAwMDAuCisJCQkJICovCisjZGVmaW5lIFBTQ19TTkRfU1RBVFVTMgkweDIxQwkvKgorCQkJCSAqIFsgMTYtYml0IF0KKwkJCQkgKiBBcHBlYXJzIHRvIGUgYSByZWFkLW9ubHkgc3RhdHVzIHJlZ2lzdGVyLgorCQkJCSAqIFRoZSB1c3VhbCB2YWx1ZSBpcyAweDAyMDAuCisJCQkJICovCisjZGVmaW5lIFBTQ19TTkRfSFVINQkweDIxRQkvKgorCQkJCSAqIFsgMTYtYml0IF0KKwkJCQkgKiBVbmtub3duLCBhbHdheXMgMHgwMDAwLgorCQkJCSAqLworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCitleHRlcm4gdm9sYXRpbGUgX191OCAqcHNjOworZXh0ZXJuIGludCBwc2NfcHJlc2VudDsKKworLyoKKyAqCUFjY2VzcyBmdW5jdGlvbnMKKyAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgcHNjX3dyaXRlX2J5dGUoaW50IG9mZnNldCwgX191OCBkYXRhKQoreworCSooKHZvbGF0aWxlIF9fdTggKikocHNjICsgb2Zmc2V0KSkgPSBkYXRhOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcHNjX3dyaXRlX3dvcmQoaW50IG9mZnNldCwgX191MTYgZGF0YSkKK3sKKwkqKCh2b2xhdGlsZSBfX3UxNiAqKShwc2MgKyBvZmZzZXQpKSA9IGRhdGE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwc2Nfd3JpdGVfbG9uZyhpbnQgb2Zmc2V0LCBfX3UzMiBkYXRhKQoreworCSooKHZvbGF0aWxlIF9fdTMyICopKHBzYyArIG9mZnNldCkpID0gZGF0YTsKK30KKworc3RhdGljIGlubGluZSB1OCBwc2NfcmVhZF9ieXRlKGludCBvZmZzZXQpCit7CisJcmV0dXJuICooKHZvbGF0aWxlIF9fdTggKikocHNjICsgb2Zmc2V0KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTE2IHBzY19yZWFkX3dvcmQoaW50IG9mZnNldCkKK3sKKwlyZXR1cm4gKigodm9sYXRpbGUgX191MTYgKikocHNjICsgb2Zmc2V0KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIHBzY19yZWFkX2xvbmcoaW50IG9mZnNldCkKK3sKKwlyZXR1cm4gKigodm9sYXRpbGUgX191MzIgKikocHNjICsgb2Zmc2V0KSk7Cit9CisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvbWFjX3ZpYS5oIGIvaW5jbHVkZS9hc20tbTY4ay9tYWNfdmlhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTliNzU4YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvbWFjX3ZpYS5oCkBAIC0wLDAgKzEsMjY4IEBACisvKgorICoJNjUyMiBWZXJzYXRpbGUgSW50ZXJmYWNlIEFkYXB0ZXIgKFZJQSkKKyAqCisgKglUaGVyZSBhcmUgdHdvIG9mIHRoZXNlIG9uIHRoZSBNYWMgSUkuIFNvbWUgSVJRJ3MgYXJlIHZlY3RvcmVkCisgKgl2aWEgdGhlbSBhcyBhcmUgYXNzb3J0ZWQgYml0cyBhbmQgYm9icyAtIGVnIHJ0YywgYWRiLiBUaGUgcGljdHVyZQorICoJaXMgYSBiaXQgaW5jb21wbGV0ZSBhcyB0aGUgTWFjIGRvY3VtZW50YXRpb24gZG9lc24ndCBjb3ZlciB0aGlzIHdlbGwKKyAqLworCisjaWZuZGVmIF9BU01fTUFDX1ZJQV9IXworI2RlZmluZSBfQVNNX01BQ19WSUFfSF8KKworLyoKKyAqIEJhc2UgYWRkcmVzc2VzIGZvciB0aGUgVklBcy4gVGhlcmUgYXJlIHR3byBpbiBldmVyeSBtYWNoaW5lLAorICogYWx0aG91Z2ggb24gc29tZSBtYWNoaW5lcyB0aGUgc2Vjb25kIGlzIGFuIFJCViBvciBhbiBPU1MuCisgKiBUaGUgT1NTIGlzIGRpZmZlcmVudCBlbm91Z2ggdGhhdCBpdCdzIGhhbmRsZWQgc2VwYXJhdGVseS4KKyAqCisgKiBEbyBub3QgdXNlIHRoZXNlIHZhbHVlcyBkaXJlY3RseTsgdXNlIHRoZSB2aWExIGFuZCB2aWEyIHZhcmlhYmxlcworICogaW5zdGVhZCAoYW5kIGRvbid0IGZvcmdldCB0byBjaGVjayByYnZfcHJlc2VudCB3aGVuIHVzaW5nIHZpYTIhKQorICovCisKKyNkZWZpbmUgVklBMV9CQVNFCSgweDUwRjAwMDAwKQorI2RlZmluZSBWSUEyX0JBU0UJKDB4NTBGMDIwMDApCisjZGVmaW5lICBSQlZfQkFTRQkoMHg1MEYyNjAwMCkKKworLyoKKyAqCU5vdCBhbGwgb2YgdGhlc2UgYXJlIHRydWUgcG9zdCBNYWNJSSBJIHRoaW5rLgorICogICAgICBDU0E6IHByb2JhYmx5IHRoZSBvbmVzIENIUlAgbWFya3MgYXMgJ3VudXNlZCcgY2hhbmdlIHB1cnBvc2VzCisgKiAgICAgIHdoZW4gdGhlIElXTSBiZWNvbWVzIHRoZSBTV0lNLgorICogICAgICBodHRwOi8vd3d3LnJzNjAwMC5pYm0uY29tL3Jlc291cmNlL3RlY2hub2xvZ3kvY2hycGlvL3ZpYTUubWFrLmh0bWwKKyAqICAgICAgZnRwOi8vZnRwLmF1c3Rpbi5pYm0uY29tL3B1Yi90ZWNobm9sb2d5L3NwZWMvY2hycC9pbndvcmsvQ0hSUF9JT1JlZl8xLjAucGRmCisgKgorICogYWxzbywgaHR0cDovL2RldmVsb3Blci5hcHBsZS5jb20vdGVjaG5vdGVzL2h3L2h3XzA5Lmh0bWwgY2xhaW1zIHRoZQorICogZm9sbG93aW5nIGNoYW5nZXMgZm9yIElJZng6CisgKiBWSUExQV92U2NjV3JSZXEgbm90IGF2YWlsYWJsZSBhbmQgdGhhdCBWSUExQV92U3luYyBoYXMgbW92ZWQgdG8gYW4gSU9QLgorICogQWxzbywgIkFsbCBvZiB0aGUgZnVuY3Rpb25hbGl0eSBvZiBWSUEyIGhhcyBiZWVuIG1vdmVkIHRvIG90aGVyIGNoaXBzIi4KKyAqLworCisjZGVmaW5lIFZJQTFBX3ZTY2NXclJlcQkweDgwCS8qIFNDQyB3cml0ZS4gKGlucHV0KQorCQkJCSAqIFtDSFJQXSBTQ0MgV1JFUTogUmVmbGVjdHMgdGhlIHN0YXRlIG9mIHRoZQorCQkJCSAqIFdhaXQvUmVxdWVzdCBwaW5zIGZyb20gdGhlIFNDQy4KKwkJCQkgKiBbTWFjaW50b3NoIEZhbWlseSBIYXJkd2FyZV0KKwkJCQkgKiBhcyBDSFJQIG9uIFNFLzMwLElJLElJeCxJSWN4LElJY2kuCisJCQkJICogb24gSUlmeCwgIjAgbWVhbnMgYW4gYWN0aXZlIHJlcXVlc3QiCisJCQkJICovCisjZGVmaW5lIFZJQTFBX3ZSZXY4CTB4NDAJLyogUmV2aXNpb24gOCBib2FyZCA/Pz8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogW0NIUlBdIEVuIFdhaXRSZXFCOiBMZXRzIHRoZSBXYWl0UmVxX0wKKwkJCQkgKiBzaWduYWwgZnJvbSBwb3J0IEIgb2YgdGhlIFNDQyBhcHBlYXIgb24KKwkJCQkgKiB0aGUgUEE3IGlucHV0IHBpbi4gT3V0cHV0LgorCQkJCSAqIFtNYWNpbnRvc2ggRmFtaWx5XSBPbiB0aGUgU0UvMzAsIHRoaXMKKwkJCQkgKiBpcyB0aGUgYml0IHRvIGZsaXAgc2NyZWVuIGJ1ZmZlcnMuCisJCQkJICogMD1hbHRlcm5hdGUsIDE9bWFpbi4KKwkJCQkgKiBvbiBJSSxJSXgsSUljeCxJSWNpLElJZnggdGhpcyBpcyBhIGJpdAorCQkJCSAqIGZvciBSZXYgSUQuIDA9SUksSUl4LCAxPUlJY3gsSUljaSxJSWZ4CisJCQkJICovCisjZGVmaW5lIFZJQTFBX3ZIZWFkU2VsCTB4MjAJLyogSGVhZCBzZWxlY3QgZm9yIElXTS4KKwkJCQkgKiBbQ0hSUF0gdW51c2VkLgorCQkJCSAqIFtNYWNpbnRvc2ggRmFtaWx5XSAiRmxvcHB5IGRpc2sKKwkJCQkgKiBzdGF0ZS1jb250cm9sIGxpbmUgU0VMIiBvbiBhbGwgYnV0IElJZngKKwkJCQkgKi8KKyNkZWZpbmUgVklBMUFfdk92ZXJsYXkJMHgxMCAgICAvKiBbTWFjaW50b3NoIEZhbWlseV0gT24gU0UvMzAsSUksSUl4LElJY3gKKwkJCQkgKiB0aGlzIGJpdCBlbmFibGVzIHRoZSAiT3ZlcmxheSIgYWRkcmVzcworCQkJCSAqIG1hcCBpbiB0aGUgYWRkcmVzcyBkZWNvZGVycyBhcyBpdCBpcyBvbgorCQkJCSAqIHJlc2V0IGZvciBtYXBwaW5nIHRoZSBST00gb3ZlciB0aGUgcmVzZXQKKwkJCQkgKiB2ZWN0b3IuIDE9dXNlIG92ZXJsYXkgbWFwLgorCQkJCSAqIE9uIHRoZSBJSWNpLElJZnggaXQgaXMgYW5vdGhlciBiaXQgb2YgdGhlCisJCQkJICogQ1BVIElEOiAwPW5vcm1hbCBJSWNpLCAxPUlJY2kgd2l0aCBwYXJpdHkKKwkJCQkgKiBmZWF0dXJlIG9yIElJZnguCisJCQkJICogW0NIUlBdIEVuIFdhaXRSZXFBOiBMZXRzIHRoZSBXYWl0UmVxX0wKKwkJCQkgKiBzaWduYWwgZnJvbSBwb3J0IEEgb2YgdGhlIFNDQyBhcHBlYXIKKwkJCQkgKiBvbiB0aGUgUEE3IGlucHV0IHBpbiAoQ0hSUCkuIE91dHB1dC4KKwkJCQkgKiBbTWtMaW51eF0gIkRyaXZlIFNlbGVjdCIKKwkJCQkgKiAgKHdpdGggMHgyMCBiZWluZyAnZGlzayBoZWFkIHNlbGVjdCcpCisJCQkJICovCisjZGVmaW5lIFZJQTFBX3ZTeW5jCTB4MDggICAgLyogW0NIUlBdIFN5bmMgTW9kZW06IG1vZGVtIGNsb2NrIHNlbGVjdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogMTogc2VsZWN0IHRoZSBleHRlcm5hbCBzZXJpYWwgY2xvY2sgdG8KKwkJCQkgKiAgICBkcml2ZSB0aGUgU0NDJ3MgL1JUeENBIHBpbi4KKwkJCQkgKiAwOiBTZWxlY3QgdGhlIDMuNjg2NE1IeiBjbG9jayB0byBkcml2ZQorCQkJCSAqICAgIHRoZSBTQ0MgY2VsbC4KKwkJCQkgKiBbTWFjaW50b3NoIEZhbWlseV0gQ29ycmVjdCBvbiBhbGwgYnV0IElJZngKKwkJCQkgKi8KKworLyogTWFjaW50b3NoIEZhbWlseSBIYXJkd2FyZSBzZXo6IGJpdHMgMC0yIG9mIFZJQTFBIGFyZSB2b2x1bWUgY29udHJvbAorICogb24gTWFjcyB3aGljaCBoYWQgdGhlIFBXTSBzb3VuZCBoYXJkd2FyZS4gIFJlc2VydmVkIG9uIG5ld2VyIG1vZGVscy4KKyAqIE9uIElJY2ksSUlmeCwgYml0cyAxLTIgYXJlIHRoZSByZXN0IG9mIHRoZSBDUFUgSUQ6CisgKiBiaXQgMjogMT1JSWNpLCAwPUlJZngKKyAqIGJpdCAxOiAxIG9uIGJvdGggSUljaSBhbmQgSUlmeC4KKyAqIE1rTGludXggc2V6IGJpdCAwIGlzICdidXJuaW4gZmxhZycgaW4gdGhpcyBjYXNlLgorICogQ0hSUCBzZXo6IFZJQTFBIGJpdHMgMC0yIGFuZCA1IGFyZSAndW51c2VkJzogaWYgcHJvZ3JhbW1lZCBhcworICogaW5wdXRzLCB0aGVzZSBiaXRzIHdpbGwgcmVhZCAwLgorICovCisjZGVmaW5lIFZJQTFBX3ZWb2x1bWUJMHgwNwkvKiBBdWRpbyB2b2x1bWUgbWFzayBmb3IgUFdNICovCisjZGVmaW5lIFZJQTFBX0NQVUlEMAkweDAyCS8qIENQVSBpZCBiaXQgMCBvbiBSQlYsIG90aGVycyAqLworI2RlZmluZSBWSUExQV9DUFVJRDEJMHgwNAkvKiBDUFUgaWQgYml0IDAgb24gUkJWLCBvdGhlcnMgKi8KKyNkZWZpbmUgVklBMUFfQ1BVSUQyCTB4MTAJLyogQ1BVIGlkIGJpdCAwIG9uIFJCViwgb3RoZXJzICovCisjZGVmaW5lIFZJQTFBX0NQVUlEMwkweDQwCS8qIENQVSBpZCBiaXQgMCBvbiBSQlYsIG90aGVycyAqLworCisvKiBJbmZvIG9uIFZJQTFCIGlzIGZyb20gTWFjaW50b3NoIEZhbWlseSBIYXJkd2FyZSAmIE1rTGludXguCisgKiBDSFJQIG9mZmVycyBubyBpbmZvLiAqLworI2RlZmluZSBWSUExQl92U291bmQJMHg4MAkvKiBTb3VuZCBlbmFibGUgKGZvciBjb21wYXRpYmlsaXR5IHdpdGgKKwkJCQkgKiBQV00gaGFyZHdhcmUpIDA9ZW5hYmxlZC4KKwkJCQkgKiBBbHNvLCBvbiBJSWNpIHcvcGFyaXR5LCBzaG93cyBwYXJpdHkgZXJyb3IKKwkJCQkgKiAwPWVycm9yLCAxPU9LLiAqLworI2RlZmluZSBWSUExQl92TXlzdGVyeQkweDQwICAgIC8qIE9uIElJY2ksIHBhcml0eSBlbmFibGUuIDA9ZW5hYmxlZCwxPWRpc2FibGVkCisJCQkJICogT24gU0UvMzAsIHZlcnRpY2FsIHN5bmMgaW50ZXJydXB0IGVuYWJsZS4KKwkJCQkgKiAwPWVuYWJsZWQuIFRoaXMgdlN5bmMgaW50ZXJydXB0IHNob3dzIHVwCisJCQkJICogYXMgYSBzbG90ICRFIGludGVycnVwdC4gKi8KKyNkZWZpbmUgVklBMUJfdkFEQlMyCTB4MjAJLyogQURCIHN0YXRlIGlucHV0IGJpdCAxICh1bnVzZWQgb24gSUlmeCkgKi8KKyNkZWZpbmUgVklBMUJfdkFEQlMxCTB4MTAJLyogQURCIHN0YXRlIGlucHV0IGJpdCAwICh1bnVzZWQgb24gSUlmeCkgKi8KKyNkZWZpbmUgVklBMUJfdkFEQkludAkweDA4CS8qIEFEQiBpbnRlcnJ1cHQgMD1pbnRlcnJ1cHQgKHVudXNlZCBvbiBJSWZ4KSovCisjZGVmaW5lIFZJQTFCX3ZSVENFbmIJMHgwNAkvKiBFbmFibGUgUmVhbCB0aW1lIGNsb2NrLiAwPWVuYWJsZWQuICovCisjZGVmaW5lIFZJQTFCX3ZSVENDbGsJMHgwMiAgICAvKiBSZWFsIHRpbWUgY2xvY2sgc2VyaWFsLWNsb2NrIGxpbmUuICovCisjZGVmaW5lIFZJQTFCX3ZSVENEYXRhCTB4MDEgICAgLyogUmVhbCB0aW1lIGNsb2NrIHNlcmlhbC1kYXRhIGxpbmUuICovCisKKy8qIE1rTGludXggZGVmaW5lcyB0aGUgZm9sbG93aW5nICJWSUExIFJlZ2lzdGVyIEIgY29udGVudHMgd2hlcmUgdGhleQorICogZGlmZmVyIGZyb20gc3RhbmRhcmQgVklBMSIuICBGcm9tIHRoZSBuYW1pbmcgc2NoZW1lLCB3ZSBhc3N1bWUgdGhleQorICogY29ycmVzcG9uZCB0byBhIFZJQSB3b3JrLWFsaWtlIG5hbWVkICdFVlInLiAqLworI2RlZmluZQlFVlJCX1hDVlIJMHgwOAkvKiBYQ1ZSX1NFU1NJT04qICovCisjZGVmaW5lCUVWUkJfRlVMTAkweDEwCS8qIFZJQV9GVUxMICovCisjZGVmaW5lCUVWUkJfU1lTRVMJMHgyMAkvKiBTWVNfU0VTU0lPTiAqLworI2RlZmluZQlFVlJCX0FVWElFCTB4MDAJLyogRW5hYmxlIEEvVVggSW50ZXJydXB0IFNjaGVtZSAqLworI2RlZmluZQlFVlJCX0FVWElECTB4NDAJLyogRGlzYWJsZSBBL1VYIEludGVycnVwdCBTY2hlbWUgKi8KKyNkZWZpbmUJRVZSQl9TRlRXUklFCTB4MDAJLyogU29mdHdhcmUgSW50ZXJydXB0IFJlUXVlc3QgKi8KKyNkZWZpbmUJRVZSQl9TRlRXUklECTB4ODAJLyogU29mdHdhcmUgSW50ZXJydXB0IFJlUXVlc3QgKi8KKworLyoKKyAqCVZJQTIgQSByZWdpc3RlciBpcyB0aGUgaW50ZXJydXB0IGxpbmVzIHJhaXNlZCBvZmYgdGhlIG51YnVzCisgKglzbG90cy4KKyAqICAgICAgVGhlIGJlbG93IGluZm8gaXMgZnJvbSAnTWFjaW50b3NoIEZhbWlseSBIYXJkd2FyZS4nCisgKiAgICAgIE1rTGludXggY2FsbHMgdGhlICdJSWNpIGludGVybmFsIHZpZGVvIElSUScgYmVsb3cgdGhlICdSQlYgc2xvdCAwIGlycS4nCisgKiAgICAgIEl0IGFsc28gbm90ZXMgdGhhdCB0aGUgc2xvdCAkOSBJUlEgaXMgdGhlICdFdGhlcm5ldCBJUlEnIGFuZAorICogICAgICBkZWZpbmVzIHRoZSAnVmlkZW8gSVJRJyBhcyAweDQwIGZvciB0aGUgJ0VWUicgVklBIHdvcmstYWxpa2UuCisgKiAgICAgIFBlcmhhcHMgT1NTIHVzZXMgdlJBTTEgYW5kIHZSQU0yIGZvciBBREIuCisgKi8KKworI2RlZmluZSBWSUEyQV92UkFNMQkweDgwCS8qIFJBTSBzaXplIGJpdCAxIChJSWNpOiByZXNlcnZlZCkgKi8KKyNkZWZpbmUgVklBMkFfdlJBTTAJMHg0MAkvKiBSQU0gc2l6ZSBiaXQgMCAoSUljaTogaW50ZXJuYWwgdmlkZW8gSVJRKSAqLworI2RlZmluZSBWSUEyQV92SVJRRQkweDIwCS8qIElSUSBmcm9tIHNsb3QgJEUgKi8KKyNkZWZpbmUgVklBMkFfdklSUUQJMHgxMAkvKiBJUlEgZnJvbSBzbG90ICREICovCisjZGVmaW5lIFZJQTJBX3ZJUlFDCTB4MDgJLyogSVJRIGZyb20gc2xvdCAkQyAqLworI2RlZmluZSBWSUEyQV92SVJRQgkweDA0CS8qIElSUSBmcm9tIHNsb3QgJEIgKi8KKyNkZWZpbmUgVklBMkFfdklSUUEJMHgwMgkvKiBJUlEgZnJvbSBzbG90ICRBICovCisjZGVmaW5lIFZJQTJBX3ZJUlE5CTB4MDEJLyogSVJRIGZyb20gc2xvdCAkOSAqLworCisvKiBSQU0gc2l6ZSBiaXRzIGRlY29kZWQgYXMgZm9sbG93czoKKyAqIGJpdDEgYml0MCAgc2l6ZSBvZiBJQ3MgaW4gYmFuayBBCisgKiAgMCAgICAwICAgIDI1NiBrYml0CisgKiAgMCAgICAxICAgIDEgTWJpdAorICogIDEgICAgMCAgICA0IE1iaXQKKyAqICAxICAgIDEgICAxNiBNYml0CisgKi8KKworLyoKKyAqCVJlZ2lzdGVyIEIgaGFzIHRoZSBmdW4gc3R1ZmYgaW4gaXQKKyAqLworCisjZGVmaW5lIFZJQTJCX3ZWQkwJMHg4MAkvKiBWQkwgb3V0cHV0IHRvIFZJQTEgKDYwLjE1SHopIGRyaXZlbiBieQorCQkJCSAqIHRpbWVyIFQxLgorCQkJCSAqIG9uIElJY2ksIHBhcml0eSB0ZXN0OiAwPXRlc3QgbW9kZS4KKwkJCQkgKiBbTWtMaW51eF0gUkJWX1BBUk9ERDogMT1vZGQsMD1ldmVuLiAqLworI2RlZmluZSBWSUEyQl92U25kSmNrCTB4NDAJLyogRXh0ZXJuYWwgc291bmQgamFjayBzdGF0dXMuCisJCQkJICogMD1wbHVnIGlzIGluc2VydGVkLiAgT24gU0UvMzAsIGFsd2F5cyAwICovCisjZGVmaW5lIFZJQTJCX3ZUZnIwCTB4MjAJLyogVHJhbnNmZXIgbW9kZSBiaXQgMCBhY2sgZnJvbSBOdUJ1cyAqLworI2RlZmluZSBWSUEyQl92VGZyMQkweDEwCS8qIFRyYW5zZmVyIG1vZGUgYml0IDEgYWNrIGZyb20gTnVCdXMgKi8KKyNkZWZpbmUgVklBMkJfdk1vZGUzMgkweDA4CS8qIDI0LzMyYml0IHN3aXRjaCAtIGRvdWJsZXMgYXMgY2FjaGUgZmx1c2gKKwkJCQkgKiBvbiBJSSwgQU1VL1BNTVUgY29udHJvbC4KKwkJCQkgKiAgIGlmIEFNVSwgMD0yNGJpdCB0byAzMmJpdCB0cmFuc2xhdGlvbgorCQkJCSAqICAgaWYgUE1NVSwgMT1QTU1VIGlzIGFjY2Vzc2luZyBwYWdlIHRhYmxlLgorCQkJCSAqIG9uIFNFLzMwIHRpZWQgbG93LgorCQkJCSAqIG9uIElJeCxJSWN4LElJZngsIHVudXNlZC4KKwkJCQkgKiBvbiBJSWNpL1JCViwgY2FjaGUgY29udHJvbC4gMD1mbHVzaCBjYWNoZS4KKwkJCQkgKi8KKyNkZWZpbmUgVklBMkJfdlBvd2VyCTB4MDQJLyogUG93ZXIgb2ZmLCAwPXNodXQgb2ZmIHBvd2VyLgorCQkJCSAqIG9uIFNFLzMwIHRoaXMgc2lnbmFsIHNlbnQgdG8gUERTIGNhcmQuICovCisjZGVmaW5lIFZJQTJCX3ZCdXNMawkweDAyCS8qIExvY2sgTnVCdXMgdHJhbnNhY3Rpb25zLCAwPWxvY2tlZC4KKwkJCQkgKiBvbiBTRS8zMCBzZW50IHRvIFBEUyBjYXJkLiAqLworI2RlZmluZSBWSUEyQl92Q0RpcwkweDAxCS8qIENhY2hlIGNvbnRyb2wuIE9uIElJY2ksIDE9ZGlzYWJsZSBjYWNoZSBjYXJkCisJCQkJICogb24gb3RoZXJzLCAwPWRpc2FibGUgcHJvY2Vzc29yJ3MgaW5zdHJ1Y3Rpb24KKwkJCQkgKiBhbmQgZGF0YSBjYWNoZXMuICovCisKKy8qIEFwcGxlIHNlejogaHR0cDovL2RldmVsb3Blci5hcHBsZS5jb20vdGVjaG5vdGVzL292L292XzA0Lmh0bWwKKyAqIEFub3RoZXIgZXhhbXBsZSBvZiBhIHZhbGlkIGZ1bmN0aW9uIHRoYXQgaGFzIG5vIFJPTSBzdXBwb3J0IGlzIHRoZSB1c2UKKyAqIG9mIHRoZSBhbHRlcm5hdGUgdmlkZW8gcGFnZSBmb3IgcGFnZS1mbGlwcGluZyBhbmltYXRpb24uIFNpbmNlIHRoZXJlCisgKiBpcyBubyBST00gY2FsbCB0byBmbGlwIHBhZ2VzLCBpdCBpcyBuZWNlc3NhcnkgdG8gZ28gcGxheSB3aXRoIHRoZQorICogcmlnaHQgYml0IGluIHRoZSBWSUEgY2hpcCAoNjUyMiBWZXJzYXRpbGUgSW50ZXJmYWNlIEFkYXB0ZXIpLgorICogW0NTQTogZG9uJ3Qga25vdyB3aGljaCBvbmUgdGhpcyBpcywgYnV0IGl0J3Mgb25lIG9mICdlbSFdCisgKi8KKworLyoKKyAqCTY1MjIgcmVnaXN0ZXJzIC0gc2VlIGRhdGFib29rLgorICogQ1NBOiBBc3NpZ25tZW50cyBmb3IgVklBMSBjb25maXJtZWQgZnJvbSBDSFJQIHNwZWMuCisgKi8KKworLyogcGFydGlhbCBhZGRyZXNzIGRlY29kZS4gIDB4WVlYWCA6IFhYIHBhcnQgZm9yIFJCViwgWVkgcGFydCBmb3IgVklBICovCisvKiBOb3RlOiAxNSBWSUEgcmVncywgOCBSQlYgcmVncyAqLworCisjZGVmaW5lIHZCdWZCCTB4MDAwMAkvKiBbVklBL1JCVl0gIFJlZ2lzdGVyIEIgKi8KKyNkZWZpbmUgdkJ1ZkFICTB4MDIwMCAgLyogW1ZJQSBvbmx5XSBCdWZmZXIgQSwgd2l0aCBoYW5kc2hha2UuIERPTidUIFVTRSEgKi8KKyNkZWZpbmUgdkRpckIJMHgwNDAwICAvKiBbVklBIG9ubHldIERhdGEgRGlyZWN0aW9uIFJlZ2lzdGVyIEIuICovCisjZGVmaW5lIHZEaXJBCTB4MDYwMCAgLyogW1ZJQSBvbmx5XSBEYXRhIERpcmVjdGlvbiBSZWdpc3RlciBBLiAqLworI2RlZmluZSB2VDFDTAkweDA4MDAgIC8qIFtWSUEgb25seV0gVGltZXIgb25lIGNvdW50ZXIgbG93LiAqLworI2RlZmluZSB2VDFDSAkweDBhMDAgIC8qIFtWSUEgb25seV0gVGltZXIgb25lIGNvdW50ZXIgaGlnaC4gKi8KKyNkZWZpbmUgdlQxTEwJMHgwYzAwICAvKiBbVklBIG9ubHldIFRpbWVyIG9uZSBsYXRjaGVzIGxvdy4gKi8KKyNkZWZpbmUgdlQxTEgJMHgwZTAwICAvKiBbVklBIG9ubHldIFRpbWVyIG9uZSBsYXRjaGVzIGhpZ2guICovCisjZGVmaW5lIHZUMkNMCTB4MTAwMCAgLyogW1ZJQSBvbmx5XSBUaW1lciB0d28gY291bnRlciBsb3cuICovCisjZGVmaW5lIHZUMkNICTB4MTIwMCAgLyogW1ZJQSBvbmx5XSBUaW1lciB0d28gY291bnRlciBoaWdoLiAqLworI2RlZmluZSB2U1IJMHgxNDAwICAvKiBbVklBIG9ubHldIFNoaWZ0IHJlZ2lzdGVyLiAqLworI2RlZmluZSB2QUNSCTB4MTYwMCAgLyogW1ZJQSBvbmx5XSBBdXhpbGFyeSBjb250cm9sIHJlZ2lzdGVyLiAqLworI2RlZmluZSB2UENSCTB4MTgwMCAgLyogW1ZJQSBvbmx5XSBQZXJpcGhlcmFsIGNvbnRyb2wgcmVnaXN0ZXIuICovCisgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAgICAgIENIUlAgc2V6IG5ldmVyIGV2ZXIgdG8gKndyaXRlKiB0aGlzLgorCQkJICogICAgICAgICAgICBNYWMgZmFtaWx5IHNheXMgbmV2ZXIgdG8gKmNoYW5nZSogdGhpcy4KKwkJCSAqIEluIGZhY3Qgd2UgbmVlZCB0byBpbml0aWFsaXplIGl0IG9uY2UgYXQgc3RhcnQuICovCisjZGVmaW5lIHZJRlIJMHgxYTAwICAvKiBbVklBL1JCVl0gIEludGVycnVwdCBmbGFnIHJlZ2lzdGVyLiAqLworI2RlZmluZSB2SUVSCTB4MWMwMCAgLyogW1ZJQS9SQlZdICBJbnRlcnJ1cHQgZW5hYmxlIHJlZ2lzdGVyLiAqLworI2RlZmluZSB2QnVmQQkweDFlMDAgIC8qIFtWSUEvUkJWXSByZWdpc3RlciBBIChubyBoYW5kc2hha2UpICovCisKKy8qIFRoZSBSQlYgb25seSBkZWNvZGVzIHRoZSBib3R0b20gZWlnaHQgYWRkcmVzcyBsaW5lczsgdGhlIFZJQSBkb2Vzbid0CisgKiBkZWNvZGUgdGhlIGJvdHRvbSBlaWdodCAtLSBzbyB2QnVmQiB8IHJCdWZCIHdpbGwgYWx3YXlzIGdldCB5b3UgQnVmQiAqLworLyogQ1NBOiBpbiBmYWN0LCBvbmx5IGJpdHMgMCwxLCBhbmQgNCBzZWVtIHRvIGJlIGRlY29kZWQuCisgKiBCVVQgbm90ZSB0aGUgdmFsdWVzIGZvciBySUVSIGFuZCBySUZSLCB3aGVyZSB0aGUgdG9wIDggYml0cyAqZG8qIHNlZW0KKyAqIHRvIG1hdHRlci4gIEluIGZhY3QgKmFsbCogb2YgdGhlIHRvcCA4IGJpdHMgc2VlbSB0byBtYXR0ZXI7CisgKiBzZXR0aW5nIHJJRVI9MHgxODEzIGFuZCBySUZSPTB4MTgwMyBkb2Vzbid0IHdvcmssIGVpdGhlci4KKyAqIFBlcmhhcHMgc29tZSBzb3J0IG9mICdjb21wYXRpYmlsaXR5IG1vZGUnIGlzIGJ1aWx0LWluPyBbMjEtTWF5LTE5OTldCisgKi8KKworI2RlZmluZSByQnVmQiAgIDB4MDAwMCAgLyogW1ZJQS9SQlZdICBSZWdpc3RlciBCICovCisjZGVmaW5lIHJFeHAJMHgwMDAxCS8qIFtSQlYgb25seV0gUkJWIGZ1dHVyZSBleHBhbnNpb24gKGFsd2F5cyAwKSAqLworI2RlZmluZSByU0lGUgkweDAwMDIgIC8qIFtSQlYgb25seV0gUkJWIHNsb3QgaW50ZXJydXB0cyByZWdpc3Rlci4gKi8KKyNkZWZpbmUgcklGUgkweDFhMDMgIC8qIFtWSUEvUkJWXSAgUkJWIGludGVycnVwdCBmbGFnIHJlZ2lzdGVyLiAqLworI2RlZmluZSByTW9uUCAgIDB4MDAxMCAgLyogW1JCViBvbmx5XSBSQlYgdmlkZW8gbW9uaXRvciB0eXBlLiAqLworI2RlZmluZSByQ2hwVCAgIDB4MDAxMSAgLyogW1JCViBvbmx5XSBSQlYgdGVzdCBtb2RlIHJlZ2lzdGVyIChyZWFkcyBhcyAwKS4gKi8KKyNkZWZpbmUgclNJRVIgICAweDAwMTIgIC8qIFtSQlYgb25seV0gUkJWIHNsb3QgaW50ZXJydXB0IGVuYWJsZXMuICovCisjZGVmaW5lIHJJRVIgICAgMHgxYzEzICAvKiBbVklBL1JCVl0gIFJCViBpbnRlcnJ1cHQgZmxhZyBlbmFibGUgcmVnaXN0ZXIuICovCisjZGVmaW5lIHJCdWZBCXJTSUZSICAgLyogdGhlICdzbG90IGludGVycnVwdHMgcmVnaXN0ZXInIGlzIEJ1ZkEgb24gYSBWSUEgKi8KKworLyoKKyAqIFZpZGVvIG1vbml0b3IgcGFyYW1ldGVycywgZm9yIHJNb25QOgorICovCisjZGVmaW5lIFJCVl9ERVBUSCAgMHgwNwkvKiBiaXRzIHBlciBwaXhlbDogMDAwPTEsMDAxPTIsMDEwPTQsMDExPTggKi8KKyNkZWZpbmUgUkJWX01PTklEICAweDM4CS8qIG1vbml0b3IgdHlwZSwgYXMgYmVsb3cuICovCisjZGVmaW5lIFJCVl9WSURPRkYgMHg0MAkvKiAxIHR1cm5zIG9mZiBvbmJvYXJkIHZpZGVvICovCisvKiBTdXBwb3J0ZWQgbW9uaXRvciB0eXBlczogKi8KKyNkZWZpbmUgTU9OXzE1QlcgICAoMTw8MykgLyogMTUiIEJXIHBvcnRyYWl0LiAqLworI2RlZmluZSBNT05fSUlHUyAgICgyPDwzKSAvKiAxMiIgY29sb3IgKG1vZGlmaWVkIElJR1MgbW9uaXRvcikuICovCisjZGVmaW5lIE1PTl8xNVJHQiAgKDU8PDMpIC8qIDE1IiBSR0IgcG9ydHJhaXQuICovCisjZGVmaW5lIE1PTl8xMk9SMTMgKDY8PDMpIC8qIDEyIiBCVyBvciAxMyIgUkdCLiAqLworI2RlZmluZSBNT05fTk9ORSAgICg3PDwzKSAvKiBObyBtb25pdG9yIGF0dGFjaGVkLiAqLworCisvKiBUbyBjbGFyaWZ5IElFUiBtYW5pcHVsYXRpb25zICovCisjZGVmaW5lIElFUl9TRVRfQklUKGIpICgweDgwIHwgKDE8PChiKSkgKQorI2RlZmluZSBJRVJfQ0xSX0JJVChiKSAoMHg3RiAmICgxPDwoYikpICkKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworZXh0ZXJuIHZvbGF0aWxlIF9fdTggKnZpYTEsKnZpYTI7CitleHRlcm4gaW50IHJidl9wcmVzZW50LHZpYV9hbHRfbWFwcGluZzsKK2V4dGVybiBfX3U4IHJidl9jbGVhcjsKKworc3RhdGljIGlubGluZSBpbnQgcmJ2X3NldF92aWRlb19icHAoaW50IGJwcCkKK3sKKwljaGFyIHZhbCA9IChicHA9PTEpPzA6KGJwcD09Mik/MTooYnBwPT00KT8yOihicHA9PTgpPzM6LTE7CisJaWYgKCFyYnZfcHJlc2VudCB8fCB2YWw8MCkgcmV0dXJuIC0xOworCXZpYTJbck1vblBdID0gKHZpYTJbck1vblBdICYgflJCVl9ERVBUSCkgfCB2YWw7CisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworI2VuZGlmIC8qIF9BU01fTUFDX1ZJQV9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9tYWNoZGVwLmggYi9pbmNsdWRlL2FzbS1tNjhrL21hY2hkZXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGRkNWM0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9tYWNoZGVwLmgKQEAgLTAsMCArMSw0MiBAQAorI2lmbmRlZiBfTTY4S19NQUNIREVQX0gKKyNkZWZpbmUgX002OEtfTUFDSERFUF9ICisKKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorCitzdHJ1Y3QgcHRfcmVnczsKK3N0cnVjdCBta3RpbWU7CitzdHJ1Y3QgcnRjX3RpbWU7CitzdHJ1Y3QgcnRjX3BsbF9pbmZvOworc3RydWN0IGJ1ZmZlcl9oZWFkOworCitleHRlcm4gdm9pZCAoKm1hY2hfc2NoZWRfaW5pdCkgKGlycXJldHVybl90ICgqaGFuZGxlcikoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopKTsKKy8qIG1hY2hpbmUgZGVwZW5kZW50IGlycSBmdW5jdGlvbnMgKi8KK2V4dGVybiB2b2lkICgqbWFjaF9pbml0X0lSUSkgKHZvaWQpOworZXh0ZXJuIGlycXJldHVybl90ICgqKCptYWNoX2RlZmF1bHRfaGFuZGxlcilbXSkgKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKK2V4dGVybiBpbnQgKCptYWNoX3JlcXVlc3RfaXJxKSAodW5zaWduZWQgaW50IGlycSwgaXJxcmV0dXJuX3QgKCpoYW5kbGVyKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGNvbnN0IGNoYXIgKmRldm5hbWUsIHZvaWQgKmRldl9pZCk7CitleHRlcm4gdm9pZCAoKm1hY2hfZnJlZV9pcnEpICh1bnNpZ25lZCBpbnQgaXJxLCB2b2lkICpkZXZfaWQpOworZXh0ZXJuIHZvaWQgKCptYWNoX2dldF9tb2RlbCkgKGNoYXIgKm1vZGVsKTsKK2V4dGVybiBpbnQgKCptYWNoX2dldF9oYXJkd2FyZV9saXN0KSAoY2hhciAqYnVmZmVyKTsKK2V4dGVybiBpbnQgKCptYWNoX2dldF9pcnFfbGlzdCkgKHN0cnVjdCBzZXFfZmlsZSAqcCwgdm9pZCAqdik7CitleHRlcm4gaXJxcmV0dXJuX3QgKCptYWNoX3Byb2Nlc3NfaW50KSAoaW50IGlycSwgc3RydWN0IHB0X3JlZ3MgKmZwKTsKKy8qIG1hY2hpbmUgZGVwZW5kZW50IHRpbWVyIGZ1bmN0aW9ucyAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgKCptYWNoX2dldHRpbWVvZmZzZXQpKHZvaWQpOworZXh0ZXJuIGludCAoKm1hY2hfaHdjbGspKGludCwgc3RydWN0IHJ0Y190aW1lKik7CitleHRlcm4gdW5zaWduZWQgaW50ICgqbWFjaF9nZXRfc3MpKHZvaWQpOworZXh0ZXJuIGludCAoKm1hY2hfZ2V0X3J0Y19wbGwpKHN0cnVjdCBydGNfcGxsX2luZm8gKik7CitleHRlcm4gaW50ICgqbWFjaF9zZXRfcnRjX3BsbCkoc3RydWN0IHJ0Y19wbGxfaW5mbyAqKTsKK2V4dGVybiBpbnQgKCptYWNoX3NldF9jbG9ja19tbXNzKSh1bnNpZ25lZCBsb25nKTsKK2V4dGVybiB2b2lkICgqbWFjaF9yZXNldCkoIHZvaWQgKTsKK2V4dGVybiB2b2lkICgqbWFjaF9oYWx0KSggdm9pZCApOworZXh0ZXJuIHZvaWQgKCptYWNoX3Bvd2VyX29mZikoIHZvaWQgKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nICgqbWFjaF9oZF9pbml0KSAodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CitleHRlcm4gdm9pZCAoKm1hY2hfaGRfc2V0dXApKGNoYXIgKiwgaW50ICopOworZXh0ZXJuIGxvbmcgbWFjaF9tYXhfZG1hX2FkZHJlc3M7CitleHRlcm4gdm9pZCAoKm1hY2hfZmxvcHB5X3NldHVwKShjaGFyICosIGludCAqKTsKK2V4dGVybiB2b2lkICgqbWFjaF9oZWFydGJlYXQpIChpbnQpOworZXh0ZXJuIHZvaWQgKCptYWNoX2wyX2ZsdXNoKSAoaW50KTsKK2V4dGVybiB2b2lkICgqbWFjaF9iZWVwKSAodW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOworCisjZW5kaWYgLyogX002OEtfTUFDSERFUF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL21hY2hpbmVzLmggYi9pbmNsdWRlL2FzbS1tNjhrL21hY2hpbmVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE2MDE1YTkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL21hY2hpbmVzLmgKQEAgLTAsMCArMSw4NyBAQAorLyogJElkOiBtYWNoaW5lcy5oLHYgMS40IDE5OTUvMTEvMjUgMDI6MzE6NTggZGF2ZW0gRXhwICQKKyAqIG1hY2hpbmVzLmg6ICBEZWZpbmVzIGZvciB0YWtpbmcgYXBhcnQgdGhlIG1hY2hpbmUgdHlwZSB2YWx1ZSBpbiB0aGUKKyAqICAgICAgICAgICAgICBpZHByb20gYW5kIGRldGVybWluaW5nIHRoZSBraW5kIG9mIG1hY2hpbmUgd2UgYXJlIG9uLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NSBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCisgKiBTdW4zLzN4IG1vZGVscyBhZGRlZCBieSBEYXZpZCBNb25ybyAoZGF2aWRtQHBzcmcuY3MudXN5ZC5lZHUuYXUpCisgKi8KKyNpZm5kZWYgX1NQQVJDX01BQ0hJTkVTX0gKKyNkZWZpbmUgX1NQQVJDX01BQ0hJTkVTX0gKKworc3RydWN0IFN1bl9NYWNoaW5lX01vZGVscyB7CisJY2hhciAqbmFtZTsKKwl1bnNpZ25lZCBjaGFyIGlkX21hY2h0eXBlOworfTsKKworLyogQ3VycmVudCBudW1iZXIgb2YgbWFjaGluZXMgd2Uga25vdyBhYm91dCB0aGF0IGhhcyBhbiBJRFBST00KKyAqIG1hY2h0eXBlIGVudHJ5IGluY2x1ZGluZyBvbmUgZW50cnkgZm9yIHRoZSAweDgwIE9CUCBtYWNoaW5lcy4KKyAqLworLy8gcmVkdWNlZCBhbG9uZyB3aXRoIHRhYmxlIGluIGFyY2gvbTY4ay9zdW4zL2lkcHJvbS5jCisvLyBzdW4zIHBvcnQgZG9lc24ndCBuZWVkIHRvIGtub3cgYWJvdXQgc3BhcmMgbWFjaGluZXMuCisvLyNkZWZpbmUgTlVNX1NVTl9NQUNISU5FUyAgIDIzCisjZGVmaW5lIE5VTV9TVU5fTUFDSElORVMgIDgKKworZXh0ZXJuIHN0cnVjdCBTdW5fTWFjaGluZV9Nb2RlbHMgU3VuX01hY2hpbmVzW05VTV9TVU5fTUFDSElORVNdOworCisvKiBUaGUgbWFjaGluZSB0eXBlIGluIHRoZSBpZHByb20gYXJlYSBsb29rcyBsaWtlIHRoaXM6CisgKgorICogLS0tLS0tLS0tLS0tLS0tCisgKiB8IEFSQ0ggfCBNQUNIIHwKKyAqIC0tLS0tLS0tLS0tLS0tLQorICogIDcgICAgNCAzICAgIDAKKyAqCisgKiBUaGUgQVJDSCBmaWVsZCBkZXRlcm1pbmVzIHRoZSBhcmNoaXRlY3R1cmUgbGluZSAoc3VuNCwgc3VuNGMsIGV0YykuCisgKiBUaGUgTUFDSCBmaWVsZCBkZXRlcm1pbmVzIHRoZSBtYWNoaW5lIG1ha2Ugd2l0aGluIHRoYXQgYXJjaGl0ZWN0dXJlLgorICovCisKKyNkZWZpbmUgU01fQVJDSF9NQVNLICAweGYwCisjZGVmaW5lIFNNX1NVTjMgICAgICAgMHgxMAorI2RlZmluZSBTTV9TVU40ICAgICAgIDB4MjAKKyNkZWZpbmUgU01fU1VOM1ggICAgICAweDQwCisjZGVmaW5lIFNNX1NVTjRDICAgICAgMHg1MAorI2RlZmluZSBTTV9TVU40TSAgICAgIDB4NzAKKyNkZWZpbmUgU01fU1VONE1fT0JQICAweDgwCisKKyNkZWZpbmUgU01fVFlQX01BU0sgICAweDBmCisvKiBTdW4zIG1hY2hpbmVzICovCisjZGVmaW5lIFNNXzNfMTYwICAgICAgMHgwMSAgICAvKiBTdW4gMy8xNjAgc2VyaWVzICovCisjZGVmaW5lIFNNXzNfNTAgICAgICAgMHgwMiAgICAvKiBTdW4gMy81MCBzZXJpZXMgKi8KKyNkZWZpbmUgU01fM18yNjAgICAgICAweDAzICAgIC8qIFN1biAzLzI2MCBzZXJpZXMgKi8KKyNkZWZpbmUgU01fM18xMTAgICAgICAweDA0ICAgIC8qIFN1biAzLzExMCBzZXJpZXMgKi8KKyNkZWZpbmUgU01fM182MCAgICAgICAweDA3ICAgIC8qIFN1biAzLzYwIHNlcmllcyAqLworI2RlZmluZSBTTV8zX0UgICAgICAgIDB4MDggICAgLyogU3VuIDMvRSBzZXJpZXMgKi8KKworLyogU3VuM3ggbWFjaGluZXMgKi8KKyNkZWZpbmUgU01fM180NjAgICAgICAweDAxICAgIC8qIFN1biAzLzQ2MCAoNDYwLDQ3MCw0ODApIHNlcmllcyAqLworI2RlZmluZSBTTV8zXzgwICAgICAgIDB4MDIgICAgLyogU3VuIDMvODAgc2VyaWVzICovCisKKy8qIFN1bjQgbWFjaGluZXMgKi8KKyNkZWZpbmUgU01fNF8yNjAgICAgICAweDAxICAgIC8qIFN1biA0LzIwMCBzZXJpZXMgKi8KKyNkZWZpbmUgU01fNF8xMTAgICAgICAweDAyICAgIC8qIFN1biA0LzEwMCBzZXJpZXMgKi8KKyNkZWZpbmUgU01fNF8zMzAgICAgICAweDAzICAgIC8qIFN1biA0LzMwMCBzZXJpZXMgKi8KKyNkZWZpbmUgU01fNF80NzAgICAgICAweDA0ICAgIC8qIFN1biA0LzQwMCBzZXJpZXMgKi8KKworLyogU3VuNGMgbWFjaGluZXMgICAgICAgICAgICAgICAgRnVsbCBOYW1lICAgICAgICAgICAgICAtIFBST00gTkFNRSAqLworI2RlZmluZSBTTV80Q19TUzEgICAgIDB4MDEgICAgLyogU3VuNGMgU3BhcmNTdGF0aW9uIDEgICAtIFN1biA0LzYwICAqLworI2RlZmluZSBTTV80Q19JUEMgICAgIDB4MDIgICAgLyogU3VuNGMgU3BhcmNTdGF0aW9uIElQQyAtIFN1biA0LzQwICAqLworI2RlZmluZSBTTV80Q19TUzFQTFVTIDB4MDMgICAgLyogU3VuNGMgU3BhcmNTdGF0aW9uIDErICAtIFN1biA0LzY1ICAqLworI2RlZmluZSBTTV80Q19TTEMgICAgIDB4MDQgICAgLyogU3VuNGMgU3BhcmNTdGF0aW9uIFNMQyAtIFN1biA0LzIwICAqLworI2RlZmluZSBTTV80Q19TUzIgICAgIDB4MDUgICAgLyogU3VuNGMgU3BhcmNTdGF0aW9uIDIgICAtIFN1biA0Lzc1ICAqLworI2RlZmluZSBTTV80Q19FTEMgICAgIDB4MDYgICAgLyogU3VuNGMgU3BhcmNTdGF0aW9uIEVMQyAtIFN1biA0LzI1ICAqLworI2RlZmluZSBTTV80Q19JUFggICAgIDB4MDcgICAgLyogU3VuNGMgU3BhcmNTdGF0aW9uIElQWCAtIFN1biA0LzUwICAqLworCisvKiBTdW40bSBtYWNoaW5lcywgdGhlc2UgcHJlZGF0ZSB0aGUgT3BlbkJvb3QuICBUaGVzZSB2YWx1ZXMgb25seSBtZWFuCisgKiBzb21ldGhpbmcgaWYgdGhlIHZhbHVlIGluIHRoZSBBUkNIIGZpZWxkIGlzIFNNX1NVTjRNLCBpZiBpdCBpcworICogU01fU1VONE1fT0JQIHRoZW4geW91IGhhdmUgdGhlIGZvbGxvd2luZyBzaXR1YXRpb246CisgKiAxKSBZb3UgZWl0aGVyIGhhdmUgYSBzdW40ZCwgYSBzdW40ZSwgb3IgYSByZWNlbnRseSBtYWRlIHN1bjRtLgorICogMikgWW91IGhhdmUgdG8gY29uc3VsdCBPcGVuQm9vdCB0byBkZXRlcm1pbmUgd2hpY2ggbWFjaGluZSB0aGlzIGlzLgorICovCisjZGVmaW5lIFNNXzRNX1NTNjAgICAgMHgwMSAgICAvKiBTdW40bSBTcGFyY1N5c3RlbSA2MDAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTTV80TV9TUzUwICAgIDB4MDIgICAgLyogU3VuNG0gU3BhcmNTdGF0aW9uIDEwICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU01fNE1fU1M0MCAgICAweDAzICAgIC8qIFN1bjRtIFNwYXJjU3RhdGlvbiA1ICAgICAgICAgICAgICAgICAgICovCisKKy8qIFN1bjRkIG1hY2hpbmVzIC0tIE4vQSAqLworLyogU3VuNGUgbWFjaGluZXMgLS0gTi9BICovCisvKiBTdW40dSBtYWNoaW5lcyAtLSBOL0EgKi8KKworI2VuZGlmIC8qICEoX1NQQVJDX01BQ0hJTkVTX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL21hY2h3LmggYi9pbmNsdWRlL2FzbS1tNjhrL21hY2h3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJlMGUyNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvbWFjaHcuaApAQCAtMCwwICsxLDEwMSBAQAorLyoKKyoqIGxpbnV4L21hY2h3LmggLS0gVGhpcyBoZWFkZXIgZGVmaW5lcyBzb21lIG1hY3JvcyBhbmQgcG9pbnRlcnMgZm9yCisqKiAgICAgICAgICAgICAgICAgICAgdGhlIHZhcmlvdXMgTWFjaW50b3NoIGN1c3RvbSBoYXJkd2FyZSByZWdpc3RlcnMuCisqKgorKiogQ29weXJpZ2h0IDE5OTcgYnkgTWljaGFlbCBTY2htaXR6CisqKgorKiogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyoqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisqKiBmb3IgbW9yZSBkZXRhaWxzLgorKioKKyovCisKKyNpZm5kZWYgX0FTTV9NQUNIV19IXworI2RlZmluZSBfQVNNX01BQ0hXX0hfCisKKy8qCisgKiBoZWFkLlMgbWFwcyB0aGUgdmlkZW9tZW0gdG8gVklERU9NRU1CQVNFCisgKi8KKworI2RlZmluZSBWSURFT01FTUJBU0UJMHhmMDAwMDAwMAorI2RlZmluZSBWSURFT01FTVNJWkUJKDQwOTYqMTAyNCkKKyNkZWZpbmUgVklERU9NRU1NQVNLCSgtNDA5NioxMDI0KQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2lmIDAKKy8qIE1hYyBTQ1NJIENvbnRyb2xsZXIgNTM4MCAqLworCisjZGVmaW5lCU1BQ181MzgwX0JBUwkoMHg1MEYxMDAwMCkgLyogVGhpcyBpcyBkZWZpbml0ZWx5IHdyb25nISEgKi8KK3N0cnVjdCBNQUNfNTM4MCB7CisJdV9jaGFyCXNjc2lfZGF0YTsKKwl1X2NoYXIJY2hhcl9kdW1teTE7CisJdV9jaGFyCXNjc2lfaWNyOworCXVfY2hhcgljaGFyX2R1bW15MjsKKwl1X2NoYXIJc2NzaV9tb2RlOworCXVfY2hhcgljaGFyX2R1bW15MzsKKwl1X2NoYXIJc2NzaV90Y3I7CisJdV9jaGFyCWNoYXJfZHVtbXk0OworCXVfY2hhcglzY3NpX2lkc3RhdDsKKwl1X2NoYXIJY2hhcl9kdW1teTU7CisJdV9jaGFyCXNjc2lfZG1hc3RhdDsKKwl1X2NoYXIJY2hhcl9kdW1teTY7CisJdV9jaGFyCXNjc2lfdGFyZ3JjdjsKKwl1X2NoYXIJY2hhcl9kdW1teTc7CisJdV9jaGFyCXNjc2lfaW5pcmN2OworfTsKKyNkZWZpbmUJbWFjX3Njc2kgICAgICAgKCgqKHZvbGF0aWxlIHN0cnVjdCBNQUNfNTM4MCAqKU1BQ181MzgwX0JBUykpCisKKy8qCisqKiBTQ0MgWjg1MzAKKyovCisKKyNkZWZpbmUgTUFDX1NDQ19CQVMgKDB4NTBGMDQwMDApCitzdHJ1Y3QgTUFDX1NDQworIHsKKyAgdV9jaGFyIGNoYV9hX2N0cmw7CisgIHVfY2hhciBjaGFyX2R1bW15MTsKKyAgdV9jaGFyIGNoYV9hX2RhdGE7CisgIHVfY2hhciBjaGFyX2R1bW15MjsKKyAgdV9jaGFyIGNoYV9iX2N0cmw7CisgIHVfY2hhciBjaGFyX2R1bW15MzsKKyAgdV9jaGFyIGNoYV9iX2RhdGE7CisgfTsKKyMgZGVmaW5lIG1hY19zY2MgKCgqKHZvbGF0aWxlIHN0cnVjdCBTQ0MqKU1BQ19TQ0NfQkFTKSkKKyNlbmRpZgorCisvKiBoYXJkd2FyZSBzdHVmZiAqLworCisjZGVmaW5lIE1BQ0hXX0RFQ0xBUkUobmFtZSkJdW5zaWduZWQgbmFtZSA6IDEKKyNkZWZpbmUgTUFDSFdfU0VUKG5hbWUpCQkobWFjX2h3X3ByZXNlbnQubmFtZSA9IDEpCisjZGVmaW5lIE1BQ0hXX1BSRVNFTlQobmFtZSkJKG1hY19od19wcmVzZW50Lm5hbWUpCisKK3N0cnVjdCBtYWNfaHdfcHJlc2VudCB7CisgIC8qIHZpZGVvIGhhcmR3YXJlICovCisgIC8qIHNvdW5kIGhhcmR3YXJlICovCisgIC8qIGRpc2sgc3RvcmFnZSBpbnRlcmZhY2VzICovCisgIE1BQ0hXX0RFQ0xBUkUoTUFDX1NDU0lfODApOyAgICAgLyogRGlyZWN0bHkgbWFwcGVkIE5DUjUzODAgKi8KKyAgTUFDSFdfREVDTEFSRShNQUNfU0NTSV85Nik7ICAgICAvKiA1M2M5WzQ2XSAqLworICBNQUNIV19ERUNMQVJFKE1BQ19TQ1NJXzk2XzIpOyAgIC8qIDJuZCA1M2M5WzQ2XSBROTAwIGFuZCBROTUwICovCisgIE1BQ0hXX0RFQ0xBUkUoSURFKTsgICAgICAgICAgICAgLyogSURFIEludGVyZmFjZSAqLworICAvKiBvdGhlciBJL08gaGFyZHdhcmUgKi8KKyAgTUFDSFdfREVDTEFSRShTQ0MpOyAgICAgICAgICAgICAvKiBTZXJpYWwgQ29tbXVuaWNhdGlvbnMgQ29udHIuICovCisgIC8qIERNQSAqLworICBNQUNIV19ERUNMQVJFKFNDU0lfRE1BKTsgICAgICAgIC8qIERNQSBmb3IgdGhlIE5DUjUzODAgKi8KKyAgLyogcmVhbCB0aW1lIGNsb2NrcyAqLworICBNQUNIV19ERUNMQVJFKFJUQ19DTEspOyAgICAgICAgIC8qIGNsb2NrIGNoaXAgKi8KKyAgLyogc3VwcG9ydGluZyBoYXJkd2FyZSAqLworICBNQUNIV19ERUNMQVJFKFZJQTEpOyAgICAgICAgICAgIC8qIFZlcnNhdGlsZSBJbnRlcmZhY2UgQWQuIDEgKi8KKyAgTUFDSFdfREVDTEFSRShWSUEyKTsgICAgICAgICAgICAvKiBWZXJzYXRpbGUgSW50ZXJmYWNlIEFkLiAyICovCisgIE1BQ0hXX0RFQ0xBUkUoUkJWKTsgICAgICAgICAgICAgLyogVmVyc2F0aWxlIEludGVyZmFjZSBBZC4gMisgKi8KKyAgLyogTlVCVVMgKi8KKyAgTUFDSFdfREVDTEFSRShOVUJVUyk7ICAgICAgICAgICAvKiBOVUJVUyAqLworfTsKKworZXh0ZXJuIHN0cnVjdCBtYWNfaHdfcHJlc2VudCBtYWNfaHdfcHJlc2VudDsKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYgLyogbGludXgvbWFjaHcuaCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9tYWNpbnRvc2guaCBiL2luY2x1ZGUvYXNtLW02OGsvbWFjaW50b3NoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZjM2QxOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvbWFjaW50b3NoLmgKQEAgLTAsMCArMSwxNTIgQEAKKyNpZm5kZWYgX19BU01fTUFDSU5UT1NIX0gKKyNkZWZpbmUgX19BU01fTUFDSU5UT1NIX0gKKworI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisKKy8qCisgKglBcHBsZSBNYWNpbnRvc2hpc21zCisgKi8KKworZXh0ZXJuIHZvaWQgbWFjX3Jlc2V0KHZvaWQpOworZXh0ZXJuIHZvaWQgbWFjX3Bvd2Vyb2ZmKHZvaWQpOworZXh0ZXJuIHZvaWQgbWFjX2luaXRfSVJRKHZvaWQpOworZXh0ZXJuIGludCBtYWNfcmVxdWVzdF9pcnEgKHVuc2lnbmVkIGludCwgaXJxcmV0dXJuX3QgKCopKGludCwgdm9pZCAqLAorCQkJCXN0cnVjdCBwdF9yZWdzICopLAorCQkJCXVuc2lnbmVkIGxvbmcsIGNvbnN0IGNoYXIgKiwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIG1hY19mcmVlX2lycSh1bnNpZ25lZCBpbnQsIHZvaWQgKik7CitleHRlcm4gdm9pZCBtYWNfZW5hYmxlX2lycSh1bnNpZ25lZCBpbnQpOworZXh0ZXJuIHZvaWQgbWFjX2Rpc2FibGVfaXJxKHVuc2lnbmVkIGludCk7CitleHRlcm4gaW50IG1hY19pcnFfcGVuZGluZyh1bnNpZ25lZCBpbnQpOworZXh0ZXJuIGludCBzaG93X21hY19pbnRlcnJ1cHRzKHN0cnVjdCBzZXFfZmlsZSAqLCB2b2lkICopOworI2lmIDAKK2V4dGVybiB2b2lkIG1hY19kZWZhdWx0X2hhbmRsZXIoaW50IGlycSk7CisjZW5kaWYKK2V4dGVybiB2b2lkIG1hY19pZGVudGlmeSh2b2lkKTsKK2V4dGVybiB2b2lkIG1hY19yZXBvcnRfaGFyZHdhcmUodm9pZCk7CitleHRlcm4gdm9pZCBtYWNfZGVidWdnaW5nX3Blbmd1aW4oaW50KTsKK2V4dGVybiB2b2lkIG1hY19ib29tKGludCk7CisKKy8qCisgKglGbG9wcHkgZHJpdmVyIG1hZ2ljIGhvb2sgLSBwcm9iYWJseSBzaG91bGRudCBiZSBoZXJlCisgKi8KKworZXh0ZXJuIHZvaWQgdmlhMV9zZXRfaGVhZChpbnQpOworCitleHRlcm4gdm9pZCBwYXJzZV9ib290ZXIoY2hhciAqcHRyKTsKK2V4dGVybiB2b2lkIHByaW50X2Jvb3RlcihjaGFyICpwdHIpOworCisvKgorICoJTWFjaW50b3NoIFRhYmxlCisgKi8KKworc3RydWN0IG1hY19tb2RlbAoreworCXNob3J0IGlkZW50OworCWNoYXIgKm5hbWU7CisJY2hhciBhZGJfdHlwZTsKKwljaGFyIHZpYV90eXBlOworCWNoYXIgc2NzaV90eXBlOworCWNoYXIgaWRlX3R5cGU7CisJY2hhciBzY2NfdHlwZTsKKwljaGFyIGV0aGVyX3R5cGU7CisJY2hhciBudWJ1c190eXBlOworfTsKKworI2RlZmluZSBNQUNfQURCX05PTkUJCTAKKyNkZWZpbmUgTUFDX0FEQl9JSQkJMQorI2RlZmluZSBNQUNfQURCX0lJU0kJCTIKKyNkZWZpbmUgTUFDX0FEQl9DVURBCQkzCisjZGVmaW5lIE1BQ19BREJfUEIxCQk0CisjZGVmaW5lIE1BQ19BREJfUEIyCQk1CisjZGVmaW5lIE1BQ19BREJfSU9QCQk2CisKKyNkZWZpbmUgTUFDX1ZJQV9JSQkJMQorI2RlZmluZSBNQUNfVklBX0lJY2kJCTIKKyNkZWZpbmUgTUFDX1ZJQV9RVUFEUkEJCTMKKworI2RlZmluZSBNQUNfU0NTSV9OT05FCQkwCisjZGVmaW5lIE1BQ19TQ1NJX09MRAkJMQorI2RlZmluZSBNQUNfU0NTSV9RVUFEUkEJCTIKKyNkZWZpbmUgTUFDX1NDU0lfUVVBRFJBMgkzCisjZGVmaW5lIE1BQ19TQ1NJX1FVQURSQTMJNAorCisjZGVmaW5lIE1BQ19JREVfTk9ORQkJMAorI2RlZmluZSBNQUNfSURFX1FVQURSQQkJMQorI2RlZmluZSBNQUNfSURFX1BCCQkyCisjZGVmaW5lIE1BQ19JREVfQkFCT09OCQkzCisKKyNkZWZpbmUgTUFDX1NDQ19JSQkJMQorI2RlZmluZSBNQUNfU0NDX0lPUAkJMgorI2RlZmluZSBNQUNfU0NDX1FVQURSQQkJMworI2RlZmluZSBNQUNfU0NDX1BTQwkJNAorCisjZGVmaW5lIE1BQ19FVEhFUl9OT05FCQkwCisjZGVmaW5lIE1BQ19FVEhFUl9TT05JQwkJMQorI2RlZmluZSBNQUNfRVRIRVJfTUFDRQkJMgorCisjZGVmaW5lIE1BQ19OT19OVUJVUwkJMAorI2RlZmluZSBNQUNfTlVCVVMJCTEKKworLyoKKyAqCUdlc3RhbHQgbnVtYmVycworICovCisKKyNkZWZpbmUgTUFDX01PREVMX0lJCQk2CisjZGVmaW5lIE1BQ19NT0RFTF9JSVgJCTcKKyNkZWZpbmUgTUFDX01PREVMX0lJQ1gJCTgKKyNkZWZpbmUgTUFDX01PREVMX1NFMzAJCTkKKyNkZWZpbmUgTUFDX01PREVMX0lJQ0kJCTExCisjZGVmaW5lIE1BQ19NT0RFTF9JSUZYCQkxMwkvKiBBbmQgd2VsbCBudW1iZXJlZCBpdCBpcyB0b28gKi8KKyNkZWZpbmUgTUFDX01PREVMX0lJU0kJCTE4CisjZGVmaW5lIE1BQ19NT0RFTF9MQwkJMTkKKyNkZWZpbmUgTUFDX01PREVMX1E5MDAJCTIwCisjZGVmaW5lIE1BQ19NT0RFTF9QQjE3MAkJMjEKKyNkZWZpbmUgTUFDX01PREVMX1E3MDAJCTIyCisjZGVmaW5lIE1BQ19NT0RFTF9DTElJCQkyMwkvKiBha2E6IFAyMDAgKi8KKyNkZWZpbmUgTUFDX01PREVMX1BCMTQwCQkyNQorI2RlZmluZSBNQUNfTU9ERUxfUTk1MAkJMjYJLyogYWthOiBXR1M5NSAqLworI2RlZmluZSBNQUNfTU9ERUxfTENJSUkJCTI3CS8qIGFrYTogUDQ1MCAqLworI2RlZmluZSBNQUNfTU9ERUxfUEIyMTAJCTI5CisjZGVmaW5lIE1BQ19NT0RFTF9DNjUwCQkzMAorI2RlZmluZSBNQUNfTU9ERUxfUEIyMzAJCTMyCisjZGVmaW5lIE1BQ19NT0RFTF9QQjE4MAkJMzMKKyNkZWZpbmUgTUFDX01PREVMX1BCMTYwCQkzNAorI2RlZmluZSBNQUNfTU9ERUxfUTgwMAkJMzUJLyogYWthOiBXR1M4MCAqLworI2RlZmluZSBNQUNfTU9ERUxfUTY1MAkJMzYKKyNkZWZpbmUgTUFDX01PREVMX0xDSUkJCTM3CS8qIGFrYTogUDQwMC80MDUvNDEwLzQzMCAqLworI2RlZmluZSBNQUNfTU9ERUxfUEIyNTAJCTM4CisjZGVmaW5lIE1BQ19NT0RFTF9JSVZJCQk0NAorI2RlZmluZSBNQUNfTU9ERUxfUDYwMAkJNDUJLyogYWthOiBQNjAwQ0QgKi8KKyNkZWZpbmUgTUFDX01PREVMX0lJVlgJCTQ4CisjZGVmaW5lIE1BQ19NT0RFTF9DQ0wJCTQ5CS8qIGFrYTogUDI1MCAqLworI2RlZmluZSBNQUNfTU9ERUxfUEIxNjVDCTUwCisjZGVmaW5lIE1BQ19NT0RFTF9DNjEwCQk1MgkvKiBha2E6IFdHUzYwICovCisjZGVmaW5lIE1BQ19NT0RFTF9RNjEwCQk1MworI2RlZmluZSBNQUNfTU9ERUxfUEIxNDUJCTU0CS8qIGFrYTogUEIxNDVCICovCisjZGVmaW5lIE1BQ19NT0RFTF9QNTIwCQk1NgkvKiBha2E6IExDNTIwICovCisjZGVmaW5lIE1BQ19NT0RFTF9DNjYwCQk2MAorI2RlZmluZSBNQUNfTU9ERUxfUDQ2MAkJNjIJLyogYWthOiBMQ0lJSSssIFA0NjYvUDQ2NyAqLworI2RlZmluZSBNQUNfTU9ERUxfUEIxODBDCTcxCisjZGVmaW5lIE1BQ19NT0RFTF9QQjUyMAkJNzIJLyogYWthOiBQQjUyMEMsIFBCNTQwLCBQQjU0MEMsIFBCNTUwQyAqLworI2RlZmluZSBNQUNfTU9ERUxfUEIyNzBDCTc3CisjZGVmaW5lIE1BQ19NT0RFTF9RODQwCQk3OAorI2RlZmluZSBNQUNfTU9ERUxfUDU1MAkJODAJLyogYWthOiBMQzU1MCwgUDU2MCAqLworI2RlZmluZSBNQUNfTU9ERUxfQ0NMSUkJCTgzCS8qIGFrYTogUDI3NSAqLworI2RlZmluZSBNQUNfTU9ERUxfUEIxNjUJCTg0CisjZGVmaW5lIE1BQ19NT0RFTF9QQjE5MAkJODUJLyogYWthOiBQQjE5MENTICovCisjZGVmaW5lIE1BQ19NT0RFTF9UVgkJODgKKyNkZWZpbmUgTUFDX01PREVMX1A0NzUJCTg5CS8qIGFrYTogTEM0NzUsIFA0NzYgKi8KKyNkZWZpbmUgTUFDX01PREVMX1A0NzVGCQk5MAkvKiBha2E6IFA0NzUgdy8gRlBVIChubyBMQzA0MCkgKi8KKyNkZWZpbmUgTUFDX01PREVMX1A1NzUJCTkyCS8qIGFrYTogTEM1NzUsIFA1NzcvUDU3OCAqLworI2RlZmluZSBNQUNfTU9ERUxfUTYwNQkJOTQKKyNkZWZpbmUgTUFDX01PREVMX1E2MDVfQUNDCTk1CS8qIFE2MDUgYWNjZWxlcmF0ZWQgdG8gMzMgTUh6ICovCisjZGVmaW5lIE1BQ19NT0RFTF9RNjMwCQk5OAkvKiBha2E6IExDNjMwLCBQNjMwLzYzMS82MzUvNjM2LzYzNy82MzgvNjQwICovCisjZGVmaW5lIE1BQ19NT0RFTF9QNTg4CQk5OQkvKiBha2E6IExDNTgwLCBQNTgwICovCisjZGVmaW5lIE1BQ19NT0RFTF9QQjI4MAkJMTAyCisjZGVmaW5lIE1BQ19NT0RFTF9QQjI4MEMJMTAzCisjZGVmaW5lIE1BQ19NT0RFTF9QQjE1MAkJMTE1CisKK2V4dGVybiBzdHJ1Y3QgbWFjX21vZGVsICptYWNpbnRvc2hfY29uZmlnOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvbWFjaW50cy5oIGIvaW5jbHVkZS9hc20tbTY4ay9tYWNpbnRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ4YzNhOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvbWFjaW50cy5oCkBAIC0wLDAgKzEsMTY5IEBACisvKgorKiogbWFjaW50cy5oIC0tIE1hY2ludG9zaCBMaW51eCBpbnRlcnJ1cHQgaGFuZGxpbmcgc3RydWN0cyBhbmQgcHJvdG90eXBlcworKioKKyoqIENvcHlyaWdodCAxOTk3IGJ5IE1pY2hhZWwgU2NobWl0egorKioKKyoqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisqKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorKiogZm9yIG1vcmUgZGV0YWlscy4KKyoqCisqLworCisjaWZuZGVmIF9BU01fTUFDSU5UU19IXworI2RlZmluZSBfQVNNX01BQ0lOVFNfSF8KKworI2luY2x1ZGUgPGFzbS9pcnEuaD4KKworLyogU2V0dGluZyB0aGlzIHByaW50cyBkZWJ1Z2dpbmcgaW5mbyBmb3IgdW5jbGFpbWVkIGludGVycnVwdHMgKi8KKworI2RlZmluZSBERUJVR19TUFVSSU9VUworCisvKiBTZXR0aW5nIHRoaXMgcHJpbnRzIGRlYnVnZ2luZyBpbmZvIG9uIGVhY2ggYXV0b3ZlY3RvciBpbnRlcnJ1cHQgKi8KKworLyogI2RlZmluZSBERUJVR19JUlFTICovCisKKy8qIFNldHRpbmcgdGhpcyBwcmludHMgZGVidWdnaW5nIGluZm8gb24gZWFjaCBOdWJ1cyBpbnRlcnJ1cHQgKi8KKworLyogI2RlZmluZSBERUJVR19OVUJVU19JTlQgKi8KKworLyogU2V0dGluZyB0aGlzIHByaW50cyBkZWJ1Z2dpbmcgaW5mbyBvbiBpcnFzIGFzIHRoZXkgZW5hYmxlZCBhbmQgZGlzYWJsZWQuICovCisKKy8qICNkZWZpbmUgREVCVUdfSVJRVVNFICovCisKKy8qCisgKiBCYXNlIElSUSBudW1iZXIgZm9yIGFsbCBNYWM2OEsgaW50ZXJydXB0IHNvdXJjZXMuIEVhY2ggc291cmNlCisgKiBoYXMgZWlnaHQgaW5kZXhlcyAoYmFzZSAtPiBiYXNlKzcpLgorICovCisKKyNkZWZpbmUgVklBMV9TT1VSQ0VfQkFTRQk4CisjZGVmaW5lIFZJQTJfU09VUkNFX0JBU0UJMTYKKyNkZWZpbmUgTUFDX1NDQ19TT1VSQ0VfQkFTRQkyNAorI2RlZmluZSBQU0MzX1NPVVJDRV9CQVNFCTI0CisjZGVmaW5lIFBTQzRfU09VUkNFX0JBU0UJMzIKKyNkZWZpbmUgUFNDNV9TT1VSQ0VfQkFTRQk0MAorI2RlZmluZSBQU0M2X1NPVVJDRV9CQVNFCTQ4CisjZGVmaW5lIE5VQlVTX1NPVVJDRV9CQVNFCTU2CisjZGVmaW5lIEJBQk9PTl9TT1VSQ0VfQkFTRQk2NAorCisvKgorICogTWF4aW11bSBJUlEgbnVtYmVyIGlzIEJBQk9PTl9TT1VSQ0VfQkFTRSArIDcsCisgKiBnaXZpbmcgdXMgSVJRcyB1cCB0aHJvdWdoIDcxCisgKi8KKworI2RlZmluZSBOVU1fTUFDX1NPVVJDRVMJCTcyCisKKy8qCisgKiBjbGVhbiB3YXkgdG8gc2VwYXJhdGUgSVJRIGludG8gaXRzIHNvdXJjZSBhbmQgaW5kZXgKKyAqLworCisjZGVmaW5lIElSUV9TUkMoaXJxKQkoaXJxID4+IDMpCisjZGVmaW5lCUlSUV9JRFgoaXJxKQkoaXJxICYgNykKKworI2RlZmluZQlJUlFfU1BVUklPVVMgICAgICAoMCkKKworLyogYXV0by12ZWN0b3IgaW50ZXJydXB0cyAqLworI2RlZmluZSBJUlFfQVVUT18xICAgICAgICAoMSkKKyNkZWZpbmUgSVJRX0FVVE9fMiAgICAgICAgKDIpCisjZGVmaW5lIElSUV9BVVRPXzMgICAgICAgICgzKQorI2RlZmluZSBJUlFfQVVUT180ICAgICAgICAoNCkKKyNkZWZpbmUgSVJRX0FVVE9fNSAgICAgICAgKDUpCisjZGVmaW5lIElSUV9BVVRPXzYgICAgICAgICg2KQorI2RlZmluZSBJUlFfQVVUT183ICAgICAgICAoNykKKworLyogVklBMSBpbnRlcnJ1cHRzICovCisjZGVmaW5lIElSUV9WSUExXzAJICAoOCkJCS8qIG9uZSBzZWNvbmQgaW50LiAqLworI2RlZmluZSBJUlFfVklBMV8xICAgICAgICAoOSkJCS8qIFZCbGFuayBpbnQuICovCisjZGVmaW5lIElSUV9NQUNfVkJMCSAgSVJRX1ZJQTFfMQorI2RlZmluZSBJUlFfVklBMV8yCSAgKDEwKQkJLyogQURCIFNSIHNoaWZ0cyBjb21wbGV0ZSAqLworI2RlZmluZSBJUlFfTUFDX0FEQgkgIElSUV9WSUExXzIKKyNkZWZpbmUgSVJRX01BQ19BREJfU1IJICBJUlFfVklBMV8yCisjZGVmaW5lIElSUV9WSUExXzMJICAoMTEpCQkvKiBBREIgU1IgQ0IyID8/ICovCisjZGVmaW5lIElSUV9NQUNfQURCX1NECSAgSVJRX1ZJQTFfMworI2RlZmluZSBJUlFfVklBMV80ICAgICAgICAoMTIpCQkvKiBBREIgU1IgZXh0LiBjbG9jayBwdWxzZSAqLworI2RlZmluZSBJUlFfTUFDX0FEQl9DTAkgIElSUV9WSUExXzQKKyNkZWZpbmUgSVJRX1ZJQTFfNQkgICgxMykKKyNkZWZpbmUgSVJRX01BQ19USU1FUl8yCSAgSVJRX1ZJQTFfNQorI2RlZmluZSBJUlFfVklBMV82CSAgKDE0KQorI2RlZmluZSBJUlFfTUFDX1RJTUVSXzEJICBJUlFfVklBMV82CisjZGVmaW5lIElSUV9WSUExXzcgICAgICAgICgxNSkKKworLyogVklBMi9SQlYgaW50ZXJydXB0cyAqLworI2RlZmluZSBJUlFfVklBMl8wCSAgKDE2KQorI2RlZmluZSBJUlFfTUFDX1NDU0lEUlEJICBJUlFfVklBMl8wCisjZGVmaW5lIElSUV9WSUEyXzEgICAgICAgICgxNykKKyNkZWZpbmUgSVJRX01BQ19OVUJVUwkgIElSUV9WSUEyXzEKKyNkZWZpbmUgSVJRX1ZJQTJfMgkgICgxOCkKKyNkZWZpbmUgSVJRX1ZJQTJfMwkgICgxOSkKKyNkZWZpbmUgSVJRX01BQ19TQ1NJCSAgSVJRX1ZJQTJfMworI2RlZmluZSBJUlFfVklBMl80ICAgICAgICAoMjApCisjZGVmaW5lIElSUV9WSUEyXzUJICAoMjEpCisjZGVmaW5lIElSUV9WSUEyXzYJICAoMjIpCisjZGVmaW5lIElSUV9WSUEyXzcgICAgICAgICgyMykKKworLyogTGV2ZWwgMyAoUFNDLCBBViBNYWNzIG9ubHkpIGludGVycnVwdHMgKi8KKyNkZWZpbmUgSVJRX1BTQzNfMAkgICgyNCkKKyNkZWZpbmUgSVJRX01BQ19NQUNFCSAgSVJRX1BTQzNfMAorI2RlZmluZSBJUlFfUFNDM18xCSAgKDI1KQorI2RlZmluZSBJUlFfUFNDM18yCSAgKDI2KQorI2RlZmluZSBJUlFfUFNDM18zCSAgKDI3KQorCisvKiBMZXZlbCA0IChTQ0MpIGludGVycnVwdHMgKi8KKyNkZWZpbmUgSVJRX1NDQwkJICAgICAoMzIpCisjZGVmaW5lIElSUV9TQ0NBCSAgICAgKDMzKQorI2RlZmluZSBJUlFfU0NDQgkgICAgICgzNCkKKyNpZiAwIC8qIEZJWE1FOiBhcmUgdGhlcmUgbXVsdGlwbGUgaW50ZXJydXB0IGNvbmRpdGlvbnMgb24gdGhlIFNDQyA/PyAqLworLyogU0NDIGludGVycnVwdHMgKi8KKyNkZWZpbmUgSVJRX1NDQ0JfVFgJICAgICAoMzIpCisjZGVmaW5lIElSUV9TQ0NCX1NUQVQJICAgICAoMzMpCisjZGVmaW5lIElSUV9TQ0NCX1JYCSAgICAgKDM0KQorI2RlZmluZSBJUlFfU0NDQl9TUENPTkQJICAgICAoMzUpCisjZGVmaW5lIElSUV9TQ0NBX1RYCSAgICAgKDM2KQorI2RlZmluZSBJUlFfU0NDQV9TVEFUCSAgICAgKDM3KQorI2RlZmluZSBJUlFfU0NDQV9SWAkgICAgICgzOCkKKyNkZWZpbmUgSVJRX1NDQ0FfU1BDT05ECSAgICAgKDM5KQorI2VuZGlmCisKKy8qIExldmVsIDQgKFBTQywgQVYgTWFjcyBvbmx5KSBpbnRlcnJ1cHRzICovCisjZGVmaW5lIElSUV9QU0M0XzAJICAoMzIpCisjZGVmaW5lIElSUV9QU0M0XzEJICAoMzMpCisjZGVmaW5lIElSUV9QU0M0XzIJICAoMzQpCisjZGVmaW5lIElSUV9QU0M0XzMJICAoMzUpCisjZGVmaW5lIElSUV9NQUNfTUFDRV9ETUEgIElSUV9QU0M0XzMKKworLyogTGV2ZWwgNSAoUFNDLCBBViBNYWNzIG9ubHkpIGludGVycnVwdHMgKi8KKyNkZWZpbmUgSVJRX1BTQzVfMAkgICg0MCkKKyNkZWZpbmUgSVJRX1BTQzVfMQkgICg0MSkKKyNkZWZpbmUgSVJRX1BTQzVfMgkgICg0MikKKyNkZWZpbmUgSVJRX1BTQzVfMwkgICg0MykKKworLyogTGV2ZWwgNiAoUFNDLCBBViBNYWNzIG9ubHkpIGludGVycnVwdHMgKi8KKyNkZWZpbmUgSVJRX1BTQzZfMAkgICg0OCkKKyNkZWZpbmUgSVJRX1BTQzZfMQkgICg0OSkKKyNkZWZpbmUgSVJRX1BTQzZfMgkgICg1MCkKKyNkZWZpbmUgSVJRX1BTQzZfMwkgICg1MSkKKworLyogTnVidXMgaW50ZXJydXB0cyAoY2FzY2FkZWQgdG8gVklBMikgKi8KKyNkZWZpbmUgSVJRX05VQlVTXzkJICAoNTYpCisjZGVmaW5lIElSUV9OVUJVU19BCSAgKDU3KQorI2RlZmluZSBJUlFfTlVCVVNfQgkgICg1OCkKKyNkZWZpbmUgSVJRX05VQlVTX0MJICAoNTkpCisjZGVmaW5lIElSUV9OVUJVU19ECSAgKDYwKQorI2RlZmluZSBJUlFfTlVCVVNfRQkgICg2MSkKKyNkZWZpbmUgSVJRX05VQlVTX0YJICAoNjIpCisKKy8qIEJhYm9vbiBpbnRlcnJ1cHRzIChjYXNjYWRlZCB0byBudWJ1cyBzbG90ICRDKSAqLworI2RlZmluZSBJUlFfQkFCT09OXzAJICAoNjQpCisjZGVmaW5lIElSUV9CQUJPT05fMQkgICg2NSkKKyNkZWZpbmUgSVJRX0JBQk9PTl8yCSAgKDY2KQorI2RlZmluZSBJUlFfQkFCT09OXzMJICAoNjcpCisKKyNkZWZpbmUgU0xPVDJJUlEoeCkJICAoeCArIDQ3KQorI2RlZmluZSBJUlEyU0xPVCh4KQkgICh4IC0gNDcpCisKKyNkZWZpbmUgSU5UX0NMSyAgIDI0NTc2CSAgICAvKiBDTEsgd2hpbGUgaW50X2NsayA9Mi40NTZNSHogYW5kIGRpdmlkZSA9IDEwMCAqLworI2RlZmluZSBJTlRfVElDS1MgMjQ2CSAgICAvKiB0byBtYWtlIHNjaGVkX3RpbWUgPSA5OS45MDIuLi4gSFogKi8KKworZXh0ZXJuIGlycV9ub2RlX3QgKm1hY19pcnFfbGlzdFtOVU1fTUFDX1NPVVJDRVNdOworZXh0ZXJuIHZvaWQgbWFjX2RvX2lycV9saXN0KGludCBpcnEsIHN0cnVjdCBwdF9yZWdzICopOworCisjZW5kaWYgLyogYXNtL21hY2ludHMuaCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9tYXRoLWVtdS5oIGIvaW5jbHVkZS9hc20tbTY4ay9tYXRoLWVtdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhYzYyNTkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL21hdGgtZW11LmgKQEAgLTAsMCArMSwzMDAgQEAKKyNpZm5kZWYgX0FTTV9NNjhLX1NFVFVQX0gKKyNkZWZpbmUgX0FTTV9NNjhLX1NFVFVQX0gKKworI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKworLyogU3RhdHVzIFJlZ2lzdGVyIGJpdHMgKi8KKworLyogYWNjcnVlZCBleGNlcHRpb24gYml0cyAqLworI2RlZmluZSBGUFNSX0FFWENfSU5FWAkzCisjZGVmaW5lIEZQU1JfQUVYQ19EWgk0CisjZGVmaW5lIEZQU1JfQUVYQ19VTkZMCTUKKyNkZWZpbmUgRlBTUl9BRVhDX09WRkwJNgorI2RlZmluZSBGUFNSX0FFWENfSU9QCTcKKworLyogZXhjZXB0aW9uIHN0YXR1cyBiaXRzICovCisjZGVmaW5lIEZQU1JfRVhDX0lORVgxCTgKKyNkZWZpbmUgRlBTUl9FWENfSU5FWDIJOQorI2RlZmluZSBGUFNSX0VYQ19EWgkxMAorI2RlZmluZSBGUFNSX0VYQ19VTkZMCTExCisjZGVmaW5lIEZQU1JfRVhDX09WRkwJMTIKKyNkZWZpbmUgRlBTUl9FWENfT1BFUlIJMTMKKyNkZWZpbmUgRlBTUl9FWENfU05BTgkxNAorI2RlZmluZSBGUFNSX0VYQ19CU1VOCTE1CisKKy8qIHF1b3RpZW50IGJ5dGUsIGFzc3VtZXMgYmlnLWVuZGlhbiwgb2YgY291cnNlICovCisjZGVmaW5lIEZQU1JfUVVPVElFTlQoZnBzcikgKCooKHNpZ25lZCBjaGFyICopICYoZnBzcikgKyAxKSkKKworLyogY29uZGl0aW9uIGNvZGUgYml0cyAqLworI2RlZmluZSBGUFNSX0NDX05BTgkyNAorI2RlZmluZSBGUFNSX0NDX0lORgkyNQorI2RlZmluZSBGUFNSX0NDX1oJMjYKKyNkZWZpbmUgRlBTUl9DQ19ORUcJMjcKKworCisvKiBDb250cm9sIHJlZ2lzdGVyIGJpdHMgKi8KKworLyogcm91bmRpbmcgbW9kZSAqLworI2RlZmluZQlGUENSX1JPVU5EX1JOCTAJCS8qIHJvdW5kIHRvIG5lYXJlc3QvZXZlbiAqLworI2RlZmluZSBGUENSX1JPVU5EX1JaCTEJCS8qIHJvdW5kIHRvIHplcm8gKi8KKyNkZWZpbmUgRlBDUl9ST1VORF9STQkyCQkvKiBtaW51cyBpbmZpbml0eSAqLworI2RlZmluZSBGUENSX1JPVU5EX1JQCTMJCS8qIHBsdXMgaW5maW5pdHkgKi8KKworLyogcm91bmRpbmcgcHJlY2lzaW9uICovCisjZGVmaW5lIEZQQ1JfUFJFQ0lTSU9OX1gJMAkvKiBsb25nIGRvdWJsZSAqLworI2RlZmluZSBGUENSX1BSRUNJU0lPTl9TCTEJLyogZG91YmxlICovCisjZGVmaW5lIEZQQ1JfUFJFQ0lTSU9OX0QJMgkvKiBmbG9hdCAqLworCisKKy8qIEZsYWdzIHRvIHNlbGVjdCB0aGUgZGVidWdnaW5nIG91dHB1dCAqLworI2RlZmluZSBQREVDT0RFCQkwCisjZGVmaW5lIFBFWEVDVVRFCTEKKyNkZWZpbmUgUENPTlYJCTIKKyNkZWZpbmUgUE5PUk0JCTMKKyNkZWZpbmUgUFJFR0lTVEVSCTQKKyNkZWZpbmUgUElOU1RSCQk1CisjZGVmaW5lIFBVTklNUEwJCTYKKyNkZWZpbmUgUE1PVkVNCQk3CisKKyNkZWZpbmUgUE1ERUNPREUJKDE8PFBERUNPREUpCisjZGVmaW5lIFBNRVhFQ1VURQkoMTw8UEVYRUNVVEUpCisjZGVmaW5lIFBNQ09OVgkJKDE8PFBDT05WKQorI2RlZmluZSBQTU5PUk0JCSgxPDxQTk9STSkKKyNkZWZpbmUgUE1SRUdJU1RFUgkoMTw8UFJFR0lTVEVSKQorI2RlZmluZSBQTUlOU1RSCQkoMTw8UElOU1RSKQorI2RlZmluZSBQTVVOSU1QTAkoMTw8UFVOSU1QTCkKKyNkZWZpbmUgUE1NT1ZFTQkJKDE8PFBNT1ZFTSkKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisKK3VuaW9uIGZwX21hbnQ2NCB7CisJdW5zaWduZWQgbG9uZyBsb25nIG02NDsKKwl1bnNpZ25lZCBsb25nIG0zMlsyXTsKK307CisKK3VuaW9uIGZwX21hbnQxMjggeworCXVuc2lnbmVkIGxvbmcgbG9uZyBtNjRbMl07CisJdW5zaWduZWQgbG9uZyBtMzJbNF07Cit9OworCisvKiBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiBleHRlbmRlZCBmcCBudW1iZXJzICovCitzdHJ1Y3QgZnBfZXh0IHsKKwl1bnNpZ25lZCBjaGFyIGxvd21hbnQ7CisJdW5zaWduZWQgY2hhciBzaWduOworCXVuc2lnbmVkIHNob3J0IGV4cDsKKwl1bmlvbiBmcF9tYW50NjQgbWFudDsKK307CisKKy8qIEMgcmVwcmVzZW50YXRpb24gb2YgRlBVIHJlZ2lzdGVycyAqLworLyogTk9URTogaWYgeW91IGNoYW5nZSB0aGlzLCB5b3UgaGF2ZSB0byBjaGFuZ2UgdGhlIGFzc2VtYmxlciBvZmZzZXRzCisgICBiZWxvdyBhbmQgdGhlIHNpemUgaW4gPGFzbS9mcHUuaD4sIHRvbyAqLworc3RydWN0IGZwX2RhdGEgeworCXN0cnVjdCBmcF9leHQgZnByZWdbOF07CisJdW5zaWduZWQgaW50IGZwY3I7CisJdW5zaWduZWQgaW50IGZwc3I7CisJdW5zaWduZWQgaW50IGZwaWFyOworCXVuc2lnbmVkIHNob3J0IHByZWM7CisJdW5zaWduZWQgc2hvcnQgcm5kOworCXN0cnVjdCBmcF9leHQgdGVtcFsyXTsKK307CisKKyNpZmRlZiBGUFVfRU1VX0RFQlVHCitleHRlcm4gdW5zaWduZWQgaW50IGZwX2RlYnVncHJpbnQ7CisKKyNkZWZpbmUgZHByaW50KGJpdCwgZm10LCBhcmdzLi4uKSAoewkJCVwKKwlpZiAoZnBfZGVidWdwcmludCAmICgxIDw8IChiaXQpKSkJCVwKKwkJcHJpbnRrKGZtdCwgIyMgYXJncyk7CQkJXAorfSkKKyNlbHNlCisjZGVmaW5lIGRwcmludChiaXQsIGZtdCwgYXJncy4uLikKKyNlbmRpZgorCisjZGVmaW5lIHVwcmludChzdHIpICh7CQkJCQlcCisJc3RhdGljIGludCBfX2NvdW50ID0gMzsJCQkJXAorCQkJCQkJCVwKKwlpZiAoX19jb3VudCA+IDApIHsJCQkJXAorCQlwcmludGsoIllvdSBqdXN0IGhpdCBhbiB1bmltcGxlbWVudGVkICIJXAorCQkgICAgICAgImZwdSBpbnN0cnVjdGlvbiAoJXMpXG4iLCBzdHIpOwlcCisJCXByaW50aygiUGxlYXNlIHJlcG9ydCB0aGlzIHRvIC4uLi5cbiIpOwlcCisJCV9fY291bnQtLTsJCQkJXAorCX0JCQkJCQlcCit9KQorCisjZGVmaW5lIEZQREFUQQkJKChzdHJ1Y3QgZnBfZGF0YSAqKWN1cnJlbnQtPnRocmVhZC5mcCkKKworI2Vsc2UJLyogX19BU1NFTUJMWV9fICovCisKKyNkZWZpbmUgRlBEQVRBCQklYTIKKworLyogb2Zmc2V0cyBmcm9tIHRoZSBiYXNlIHJlZ2lzdGVyIHRvIHRoZSBmbG9hdGluZyBwb2ludCBkYXRhIGluIHRoZSB0YXNrIHN0cnVjdCAqLworI2RlZmluZSBGUERfRlBSRUcJKFRBU0tfVEhSRUFEK1RIUkVBRF9GUFJFRyswKQorI2RlZmluZSBGUERfRlBDUgkoVEFTS19USFJFQUQrVEhSRUFEX0ZQUkVHKzk2KQorI2RlZmluZSBGUERfRlBTUgkoVEFTS19USFJFQUQrVEhSRUFEX0ZQUkVHKzEwMCkKKyNkZWZpbmUgRlBEX0ZQSUFSCShUQVNLX1RIUkVBRCtUSFJFQURfRlBSRUcrMTA0KQorI2RlZmluZSBGUERfUFJFQwkoVEFTS19USFJFQUQrVEhSRUFEX0ZQUkVHKzEwOCkKKyNkZWZpbmUgRlBEX1JORAkJKFRBU0tfVEhSRUFEK1RIUkVBRF9GUFJFRysxMTApCisjZGVmaW5lIEZQRF9URU1QRlAxCShUQVNLX1RIUkVBRCtUSFJFQURfRlBSRUcrMTEyKQorI2RlZmluZSBGUERfVEVNUEZQMgkoVEFTS19USFJFQUQrVEhSRUFEX0ZQUkVHKzEyNCkKKyNkZWZpbmUgRlBEX1NJWkVPRgkoVEFTS19USFJFQUQrVEhSRUFEX0ZQUkVHKzEzNikKKworLyogb2Zmc2V0cyBvbiB0aGUgc3RhY2sgdG8gYWNjZXNzIHNhdmVkIHJlZ2lzdGVycywKKyAqIHRoZXNlIGFyZSBvbmx5IHVzZWQgZHVyaW5nIGluc3RydWN0aW9uIGRlY29kaW5nCisgKiB3aGVyZSB3ZSBhbHdheXMga25vdyBob3cgZGVlcCB3ZSdyZSBvbiB0aGUgc3RhY2suCisgKi8KKyNkZWZpbmUgRlBTX0RPCQkoUFRfRDApCisjZGVmaW5lIEZQU19EMQkJKFBUX0QxKQorI2RlZmluZSBGUFNfRDIJCShQVF9EMikKKyNkZWZpbmUgRlBTX0EwCQkoUFRfQTApCisjZGVmaW5lIEZQU19BMQkJKFBUX0ExKQorI2RlZmluZSBGUFNfQTIJCShQVF9BMikKKyNkZWZpbmUgRlBTX1NSCQkoUFRfU1IpCisjZGVmaW5lIEZQU19QQwkJKFBUX1BDKQorI2RlZmluZSBGUFNfRUEJCShQVF9QQys2KQorI2RlZmluZSBGUFNfUEMyCQkoUFRfUEMrMTApCisKKy5tYWNybwlmcF9nZXRfZnBfcmVnCisJbGVhCShGUERfRlBSRUcsRlBEQVRBLCVkMC53KjQpLCVhMAorCWxlYQkoJWEwLCVkMC53KjgpLCVhMAorLmVuZG0KKworLyogTWFjcm9zIHVzZWQgdG8gZ2V0L3B1dCB0aGUgY3VycmVudCBwcm9ncmFtIGNvdW50ZXIuCisgKiAwMjAvMDMwIHVzZSBhIGRpZmZlcmVudCBzdGFjayBmcmFtZSB0aGVuIDA0MC8wNjAsIGZvciB0aGUKKyAqIDA0MC8wNjAgdGhlIHJldHVybiBwYyBwb2ludHMgYWxyZWFkeSB0byB0aGUgbmV4dCBsb2NhdGlvbiwKKyAqIHNvIHRoaXMgb25seSBuZWVkcyB0byBiZSBtb2RpZmllZCBmb3IganVtcCBpbnN0cnVjdGlvbnMuCisgKi8KKy5tYWNybwlmcF9nZXRfcGMgZGVzdAorCW1vdmUubAkoRlBTX1BDKzQsJXNwKSxcZGVzdAorLmVuZG0KKworLm1hY3JvCWZwX3B1dF9wYyBzcmMsanVtcD0wCisJbW92ZS5sCVxzcmMsKEZQU19QQys0LCVzcCkKKy5lbmRtCisKKy5tYWNybwlmcF9nZXRfaW5zdHJfZGF0YQlmLHMsZGVzdCxsYWJlbAorCWdldHVzZXIJXGYsJXNwQChGUFNfUEMrNClAKDApLFxkZXN0LFxsYWJlbCwlc3BAKEZQU19QQys0KQorCWFkZHEubAkjXHMsJXNwQChGUFNfUEMrNCkKKy5lbmRtCisKKy5tYWNybwlmcF9nZXRfaW5zdHJfd29yZAlkZXN0LGxhYmVsLGFkZHIKKwlmcF9nZXRfaW5zdHJfZGF0YQl3LDIsXGRlc3QsXGxhYmVsLFxhZGRyCisuZW5kbQorCisubWFjcm8JZnBfZ2V0X2luc3RyX2xvbmcJZGVzdCxsYWJlbCxhZGRyCisJZnBfZ2V0X2luc3RyX2RhdGEJbCw0LFxkZXN0LFxsYWJlbCxcYWRkcgorLmVuZG0KKworLyogVGhlc2UgbWFjcm9zIGFyZSB1c2VkIHRvIHJlYWQgZnJvbS93cml0ZSB0byB1c2VyIHNwYWNlCisgKiBvbiBlcnJvciB3ZSBqdW1wIHRvIHRoZSBmaXh1cCBzZWN0aW9uLCBsb2FkIHRoZSBmYXVsdAorICogYWRkcmVzcyBpbnRvICVhMCBhbmQganVtcCB0byB0aGUgZXhpdC4KKyAqIChkZXJpdmVkIGZyb20gPGFzbS91YWNjZXNzLmg+KQorICovCisubWFjcm8JZ2V0dXNlcglzaXplLHNyYyxkZXN0LGxhYmVsLGFkZHIKK3wJcHJpbnRmCSwiW1xzaXplPCUwOHhdIiwxLFxhZGRyCisuTHUxXEA6CW1vdmVzXHNpemUJXHNyYyxcZGVzdAorCisJLnNlY3Rpb24gLmZpeHVwLCJheCIKKwkuZXZlbgorLkx1MlxAOgltb3ZlLmwJXGFkZHIsJWEwCisJanJhCVxsYWJlbAorCS5wcmV2aW91cworCisJLnNlY3Rpb24gX19leF90YWJsZSwiYSIKKwkuYWxpZ24JNAorCS5sb25nCS5MdTFcQCwuTHUyXEAKKwkucHJldmlvdXMKKy5lbmRtCisKKy5tYWNybwlwdXR1c2VyCXNpemUsc3JjLGRlc3QsbGFiZWwsYWRkcgorfAlwcmludGYJLCJbXHNpemU+JTA4eF0iLDEsXGFkZHIKKy5MdTFcQDoJbW92ZXNcc2l6ZQlcc3JjLFxkZXN0CisuTHUyXEA6CisKKwkuc2VjdGlvbiAuZml4dXAsImF4IgorCS5ldmVuCisuTHUzXEA6CW1vdmUubAlcYWRkciwlYTAKKwlqcmEJXGxhYmVsCisJLnByZXZpb3VzCisKKwkuc2VjdGlvbiBfX2V4X3RhYmxlLCJhIgorCS5hbGlnbgk0CisJLmxvbmcJLkx1MVxALC5MdTNcQAorCS5sb25nCS5MdTJcQCwuTHUzXEAKKwkucHJldmlvdXMKKy5lbmRtCisKKworLm1hY3JvCW1vdmVzdGFjawlucixhcmcxLGFyZzIsYXJnMyxhcmc0LGFyZzUKKwkuaWYJXG5yCisJbW92ZXN0YWNrCShcbnItMSksXGFyZzIsXGFyZzMsXGFyZzQsXGFyZzUKKwltb3ZlLmwJXGFyZzEsLSglc3ApCisJLmVuZGlmCisuZW5kbQorCisubWFjcm8JcHJpbnRmCWJpdD0tMSxzdHJpbmcsbnI9MCxhcmcxLGFyZzIsYXJnMyxhcmc0LGFyZzUKKyNpZmRlZiBGUFVfRU1VX0RFQlVHCisJLmRhdGEKKy5McGRhdGFcQDoKKwkuc3RyaW5nCSJcc3RyaW5nIgorCS5wcmV2aW91cworCisJbW92ZW0ubAklZDAvJWQxLyVhMC8lYTEsLSglc3ApCisJLmlmCVxiaXQrMQorI2lmIDAKKwltb3ZlcQkjXGJpdCwlZDAKKwlhbmR3CSM3LCVkMAorCWJ0c3QJJWQwLGZwX2RlYnVncHJpbnQrKCgzMS1cYml0KS84KQorI2Vsc2UKKwlidHN0CSNcYml0LGZwX2RlYnVncHJpbnQrKCgzMS1cYml0KS84KQorI2VuZGlmCisJamVxCS5McHNraXBcQAorCS5lbmRpZgorCW1vdmVzdGFjawlcbnIsXGFyZzEsXGFyZzIsXGFyZzMsXGFyZzQsXGFyZzUKKwlwZWEJLkxwZGF0YVxACisJanNyCXByaW50aworCWxlYQkoKFxucisxKSo0LCVzcCksJXNwCisuTHBza2lwXEA6CisJbW92ZW0ubAkoJXNwKSssJWQwLyVkMS8lYTAvJWExCisjZW5kaWYKKy5lbmRtCisKKy5tYWNybwlwcmludHgJYml0LGZwCisjaWZkZWYgRlBVX0VNVV9ERUJVRworCW1vdmVtLmwJJWQwLyVhMCwtKCVzcCkKKwlsZWEJXGZwLCVhMAorI2lmIDAKKwltb3ZlcQkjJysnLCVkMAorCXRzdC53CSglYTApCisJamVxCS5MeDFcQAorCW1vdmVxCSMnLScsJWQwCisuTHgxXEA6CXByaW50ZglcYml0LCIgJWMiLDEsJWQwCisJbW92ZS5sCSg0LCVhMCksJWQwCisJYmNscgkjMzEsJWQwCisJam5lCS5MeDJcQAorCXByaW50ZglcYml0LCIwLiIKKwlqcmEJLkx4M1xACisuTHgyXEA6CXByaW50ZglcYml0LCIxLiIKKy5MeDNcQDoJcHJpbnRmCVxiaXQsIiUwOHglMDh4IiwyLCVkMCwlYTBAKDgpCisJbW92ZS53CSgyLCVhMCksJWQwCisJZXh0LmwJJWQwCisJcHJpbnRmCVxiaXQsIkUlMDR4IiwxLCVkMAorI2Vsc2UKKwlwcmludGYJXGJpdCwiICUwOHglMDh4JTA4eCIsMywlYTBALCVhMEAoNCksJWEwQCg4KQorI2VuZGlmCisJbW92ZW0ubAkoJXNwKSssJWQwLyVhMAorI2VuZGlmCisuZW5kbQorCisubWFjcm8JZGVidWcJaW5zdHIsYXJncworI2lmZGVmIEZQVV9FTVVfREVCVUcKKwlcaW5zdHIJXGFyZ3MKKyNlbmRpZgorLmVuZG0KKworCisjZW5kaWYJLyogX19BU1NFTUJMWV9fICovCisKKyNlbmRpZgkvKiBfQVNNX002OEtfU0VUVVBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9tYzE0NjgxOHJ0Yy5oIGIvaW5jbHVkZS9hc20tbTY4ay9tYzE0NjgxOHJ0Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExNDQyMDkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL21jMTQ2ODE4cnRjLmgKQEAgLTAsMCArMSwyNiBAQAorLyoKKyAqIE1hY2hpbmUgZGVwZW5kZW50IGFjY2VzcyBmdW5jdGlvbnMgZm9yIFJUQyByZWdpc3RlcnMuCisgKi8KKyNpZm5kZWYgX0FTTV9NQzE0NjgxOFJUQ19ICisjZGVmaW5lIF9BU01fTUMxNDY4MThSVENfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpZmRlZiBDT05GSUdfQVRBUkkKKy8qIFJUQyBpbiBBdGFyaSBtYWNoaW5lcyAqLworCisjaW5jbHVkZSA8YXNtL2F0YXJpaHcuaD4KKworI2RlZmluZSBSVENfUE9SVCh4KQkoVFRfUlRDX0JBUyArIDIqKHgpKQorCisjZGVmaW5lIENNT1NfUkVBRChhZGRyKSAoeyBcCithdGFyaV9vdXRiX3AoKGFkZHIpLFJUQ19QT1JUKDApKTsgXAorYXRhcmlfaW5iX3AoUlRDX1BPUlQoMSkpOyBcCit9KQorI2RlZmluZSBDTU9TX1dSSVRFKHZhbCwgYWRkcikgKHsgXAorYXRhcmlfb3V0Yl9wKChhZGRyKSxSVENfUE9SVCgwKSk7IFwKK2F0YXJpX291dGJfcCgodmFsKSxSVENfUE9SVCgxKSk7IFwKK30pCisjZW5kaWYgLyogQ09ORklHX0FUQVJJICovCisKKyNlbmRpZiAvKiBfQVNNX01DMTQ2ODE4UlRDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvbWQuaCBiL2luY2x1ZGUvYXNtLW02OGsvbWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjdlYTA4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9tZC5oCkBAIC0wLDAgKzEsMTMgQEAKKy8qICRJZDogbWQuaCx2IDEuMSAxOTk3LzEyLzE1IDE1OjEyOjA0IGpqIEV4cCAkCisgKiBtZC5oOiBIaWdoIHNwZWVkIHhvcl9ibG9jayBvcGVyYXRpb24gZm9yIFJBSUQ0LzUKKyAqCisgKi8KKworI2lmbmRlZiBfX0FTTV9NRF9ICisjZGVmaW5lIF9fQVNNX01EX0gKKworLyogI2RlZmluZSBIQVZFX0FSQ0hfWE9SQkxPQ0sgKi8KKworI2RlZmluZSBNRF9YT1JCTE9DS19BTElHTk1FTlQJc2l6ZW9mKGxvbmcpCisKKyNlbmRpZiAvKiBfX0FTTV9NRF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL21tYW4uaCBiL2luY2x1ZGUvYXNtLW02OGsvbW1hbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4MzFjNGUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL21tYW4uaApAQCAtMCwwICsxLDQzIEBACisjaWZuZGVmIF9fTTY4S19NTUFOX0hfXworI2RlZmluZSBfX002OEtfTU1BTl9IX18KKworI2RlZmluZSBQUk9UX1JFQUQJMHgxCQkvKiBwYWdlIGNhbiBiZSByZWFkICovCisjZGVmaW5lIFBST1RfV1JJVEUJMHgyCQkvKiBwYWdlIGNhbiBiZSB3cml0dGVuICovCisjZGVmaW5lIFBST1RfRVhFQwkweDQJCS8qIHBhZ2UgY2FuIGJlIGV4ZWN1dGVkICovCisjZGVmaW5lIFBST1RfU0VNCTB4OAkJLyogcGFnZSBtYXkgYmUgdXNlZCBmb3IgYXRvbWljIG9wcyAqLworI2RlZmluZSBQUk9UX05PTkUJMHgwCQkvKiBwYWdlIGNhbiBub3QgYmUgYWNjZXNzZWQgKi8KKyNkZWZpbmUgUFJPVF9HUk9XU0RPV04JMHgwMTAwMDAwMAkvKiBtcHJvdGVjdCBmbGFnOiBleHRlbmQgY2hhbmdlIHRvIHN0YXJ0IG9mIGdyb3dzZG93biB2bWEgKi8KKyNkZWZpbmUgUFJPVF9HUk9XU1VQCTB4MDIwMDAwMDAJLyogbXByb3RlY3QgZmxhZzogZXh0ZW5kIGNoYW5nZSB0byBlbmQgb2YgZ3Jvd3N1cCB2bWEgKi8KKworI2RlZmluZSBNQVBfU0hBUkVECTB4MDEJCS8qIFNoYXJlIGNoYW5nZXMgKi8KKyNkZWZpbmUgTUFQX1BSSVZBVEUJMHgwMgkJLyogQ2hhbmdlcyBhcmUgcHJpdmF0ZSAqLworI2RlZmluZSBNQVBfVFlQRQkweDBmCQkvKiBNYXNrIGZvciB0eXBlIG9mIG1hcHBpbmcgKi8KKyNkZWZpbmUgTUFQX0ZJWEVECTB4MTAJCS8qIEludGVycHJldCBhZGRyIGV4YWN0bHkgKi8KKyNkZWZpbmUgTUFQX0FOT05ZTU9VUwkweDIwCQkvKiBkb24ndCB1c2UgYSBmaWxlICovCisKKyNkZWZpbmUgTUFQX0dST1dTRE9XTgkweDAxMDAJCS8qIHN0YWNrLWxpa2Ugc2VnbWVudCAqLworI2RlZmluZSBNQVBfREVOWVdSSVRFCTB4MDgwMAkJLyogRVRYVEJTWSAqLworI2RlZmluZSBNQVBfRVhFQ1VUQUJMRQkweDEwMDAJCS8qIG1hcmsgaXQgYXMgYW4gZXhlY3V0YWJsZSAqLworI2RlZmluZSBNQVBfTE9DS0VECTB4MjAwMAkJLyogcGFnZXMgYXJlIGxvY2tlZCAqLworI2RlZmluZSBNQVBfTk9SRVNFUlZFCTB4NDAwMAkJLyogZG9uJ3QgY2hlY2sgZm9yIHJlc2VydmF0aW9ucyAqLworI2RlZmluZSBNQVBfUE9QVUxBVEUJMHg4MDAwCQkvKiBwb3B1bGF0ZSAocHJlZmF1bHQpIHBhZ2V0YWJsZXMgKi8KKyNkZWZpbmUgTUFQX05PTkJMT0NLCTB4MTAwMDAJCS8qIGRvIG5vdCBibG9jayBvbiBJTyAqLworCisjZGVmaW5lIE1TX0FTWU5DCTEJCS8qIHN5bmMgbWVtb3J5IGFzeW5jaHJvbm91c2x5ICovCisjZGVmaW5lIE1TX0lOVkFMSURBVEUJMgkJLyogaW52YWxpZGF0ZSB0aGUgY2FjaGVzICovCisjZGVmaW5lIE1TX1NZTkMJCTQJCS8qIHN5bmNocm9ub3VzIG1lbW9yeSBzeW5jICovCisKKyNkZWZpbmUgTUNMX0NVUlJFTlQJMQkJLyogbG9jayBhbGwgY3VycmVudCBtYXBwaW5ncyAqLworI2RlZmluZSBNQ0xfRlVUVVJFCTIJCS8qIGxvY2sgYWxsIGZ1dHVyZSBtYXBwaW5ncyAqLworCisjZGVmaW5lIE1BRFZfTk9STUFMCTB4MAkJLyogZGVmYXVsdCBwYWdlLWluIGJlaGF2aW9yICovCisjZGVmaW5lIE1BRFZfUkFORE9NCTB4MQkJLyogcGFnZS1pbiBtaW5pbXVtIHJlcXVpcmVkICovCisjZGVmaW5lIE1BRFZfU0VRVUVOVElBTAkweDIJCS8qIHJlYWQtYWhlYWQgYWdncmVzc2l2ZWx5ICovCisjZGVmaW5lIE1BRFZfV0lMTE5FRUQJMHgzCQkvKiBwcmUtZmF1bHQgcGFnZXMgKi8KKyNkZWZpbmUgTUFEVl9ET05UTkVFRAkweDQJCS8qIGRpc2NhcmQgdGhlc2UgcGFnZXMgKi8KKworLyogY29tcGF0aWJpbGl0eSBmbGFncyAqLworI2RlZmluZSBNQVBfQU5PTglNQVBfQU5PTllNT1VTCisjZGVmaW5lIE1BUF9GSUxFCTAKKworI2VuZGlmIC8qIF9fTTY4S19NTUFOX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9tbXUuaCBiL2luY2x1ZGUvYXNtLW02OGsvbW11LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NkMzZkMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvbW11LmgKQEAgLTAsMCArMSw3IEBACisjaWZuZGVmIF9fTU1VX0gKKyNkZWZpbmUgX19NTVVfSAorCisvKiBEZWZhdWx0ICJ1bnNpZ25lZCBsb25nIiBjb250ZXh0ICovCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbW1fY29udGV4dF90OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvbW11X2NvbnRleHQuaCBiL2luY2x1ZGUvYXNtLW02OGsvbW11X2NvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjExOTFkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9tbXVfY29udGV4dC5oCkBAIC0wLDAgKzEsMTU0IEBACisjaWZuZGVmIF9fTTY4S19NTVVfQ09OVEVYVF9ICisjZGVmaW5lIF9fTTY4S19NTVVfQ09OVEVYVF9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworc3RhdGljIGlubGluZSB2b2lkIGVudGVyX2xhenlfdGxiKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKK30KKworI2lmbmRlZiBDT05GSUdfU1VOMworCisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgorCitzdGF0aWMgaW5saW5lIGludCBpbml0X25ld19jb250ZXh0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLAorCQkJCSAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCW1tLT5jb250ZXh0ID0gdmlydF90b19waHlzKG1tLT5wZ2QpOworCXJldHVybiAwOworfQorCisjZGVmaW5lIGRlc3Ryb3lfY29udGV4dChtbSkJCWRvIHsgfSB3aGlsZSgwKQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3dpdGNoX21tXzAyMzAoc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJdW5zaWduZWQgbG9uZyBjcnBbMl0gPSB7CisJCTB4ODAwMDAwMDAgfCBfUEFHRV9UQUJMRSwgbW0tPmNvbnRleHQKKwl9OworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJYXNtIHZvbGF0aWxlICgiLmNoaXAgNjgwMzAiKTsKKworCS8qIGZsdXNoIE1DNjgwMzAvTUM2ODAyMCBjYWNoZXMgKHRoZXkgYXJlIHZpcnR1YWxseSBhZGRyZXNzZWQpICovCisJYXNtIHZvbGF0aWxlICgKKwkJIm1vdmVjICUlY2FjciwlMDsiCisJCSJvcncgJTEsJTA7ICIKKwkJIm1vdmVjICUwLCUlY2FjciIKKwkJOiAiPWQiICh0bXApIDogImRpIiAoRkxVU0hfSV9BTkRfRCkpOworCisJLyogU3dpdGNoIHRoZSByb290IHBvaW50ZXIuIEZvciBhIDAzMC1vbmx5IGtlcm5lbCwKKwkgKiBhdm9pZCBmbHVzaGluZyB0aGUgd2hvbGUgQVRDLCB3ZSBvbmx5IG5lZWQgdG8KKwkgKiBmbHVzaCB0aGUgdXNlciBlbnRyaWVzLiBUaGUgNjg4NTEgZG9lcyB0aGlzIGJ5CisJICogaXRzZWxmLiBBdm9pZCBhIHJ1bnRpbWUgY2hlY2sgaGVyZS4KKwkgKi8KKwlhc20gdm9sYXRpbGUgKAorI2lmZGVmIENQVV9NNjgwMzBfT05MWQorCQkicG1vdmVmZCAlMCwlJWNycDsgIgorCQkicGZsdXNoICMwLCM0IgorI2Vsc2UKKwkJInBtb3ZlICUwLCUlY3JwIgorI2VuZGlmCisJCTogOiAibSIgKGNycFswXSkpOworCisJYXNtIHZvbGF0aWxlICgiLmNoaXAgNjhrIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzd2l0Y2hfbW1fMDQ2MChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlhc20gdm9sYXRpbGUgKCIuY2hpcCA2ODA0MCIpOworCisJLyogZmx1c2ggYWRkcmVzcyB0cmFuc2xhdGlvbiBjYWNoZSAodXNlciBlbnRyaWVzKSAqLworCWFzbSB2b2xhdGlsZSAoInBmbHVzaGFuIik7CisKKwkvKiBzd2l0Y2ggdGhlIHJvb3QgcG9pbnRlciAqLworCWFzbSB2b2xhdGlsZSAoIm1vdmVjICUwLCUldXJwIiA6IDogInIiIChtbS0+Y29udGV4dCkpOworCisJaWYgKENQVV9JU18wNjApIHsKKwkJdW5zaWduZWQgbG9uZyB0bXA7CisKKwkJLyogY2xlYXIgdXNlciBlbnRyaWVzIGluIHRoZSBicmFuY2ggY2FjaGUgKi8KKwkJYXNtIHZvbGF0aWxlICgKKwkJCSJtb3ZlYyAlJWNhY3IsJTA7ICIKKwkJICAgICAgICAib3JsICUxLCUwOyAiCisJCSAgICAgICAgIm1vdmVjICUwLCUlY2FjciIKKwkJCTogIj1kIiAodG1wKTogImRpIiAoMHgwMDIwMDAwMCkpOworCX0KKworCWFzbSB2b2xhdGlsZSAoIi5jaGlwIDY4ayIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3dpdGNoX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKnByZXYsIHN0cnVjdCBtbV9zdHJ1Y3QgKm5leHQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCWlmIChwcmV2ICE9IG5leHQpIHsKKwkJaWYgKENQVV9JU18wMjBfT1JfMDMwKQorCQkJc3dpdGNoX21tXzAyMzAobmV4dCk7CisJCWVsc2UKKwkJCXN3aXRjaF9tbV8wNDYwKG5leHQpOworCX0KK30KKworI2RlZmluZSBkZWFjdGl2YXRlX21tKHRzayxtbSkJZG8geyB9IHdoaWxlICgwKQorCitzdGF0aWMgaW5saW5lIHZvaWQgYWN0aXZhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqcHJldl9tbSwKKwkJCSAgICAgICBzdHJ1Y3QgbW1fc3RydWN0ICpuZXh0X21tKQoreworCW5leHRfbW0tPmNvbnRleHQgPSB2aXJ0X3RvX3BoeXMobmV4dF9tbS0+cGdkKTsKKworCWlmIChDUFVfSVNfMDIwX09SXzAzMCkKKwkJc3dpdGNoX21tXzAyMzAobmV4dF9tbSk7CisJZWxzZQorCQlzd2l0Y2hfbW1fMDQ2MChuZXh0X21tKTsKK30KKworI2Vsc2UgIC8qIENPTkZJR19TVU4zICovCisjaW5jbHVkZSA8YXNtL3N1bjNtbXUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorCitleHRlcm4gdW5zaWduZWQgbG9uZyBnZXRfZnJlZV9jb250ZXh0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKK2V4dGVybiB2b2lkIGNsZWFyX2NvbnRleHQodW5zaWduZWQgbG9uZyBjb250ZXh0KTsKKworLyogc2V0IHRoZSBjb250ZXh0IGZvciBhIG5ldyB0YXNrIHRvIHVubWFwcGVkICovCitzdGF0aWMgaW5saW5lIGludCBpbml0X25ld19jb250ZXh0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwltbS0+Y29udGV4dCA9IFNVTjNfSU5WQUxJRF9DT05URVhUOworCXJldHVybiAwOworfQorCisvKiBmaW5kIHRoZSBjb250ZXh0IGdpdmVuIHRvIHRoaXMgcHJvY2VzcywgYW5kIGlmIGl0IGhhc24ndCBhbHJlYWR5CisgICBnb3Qgb25lLCBnbyBnZXQgb25lIGZvciBpdC4gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBnZXRfbW11X2NvbnRleHQoc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJaWYobW0tPmNvbnRleHQgPT0gU1VOM19JTlZBTElEX0NPTlRFWFQpCisJCW1tLT5jb250ZXh0ID0gZ2V0X2ZyZWVfY29udGV4dChtbSk7Cit9CisKKy8qIGZsdXNoIGNvbnRleHQgaWYgYWxsb2NhdGVkLi4uICovCitzdGF0aWMgaW5saW5lIHZvaWQgZGVzdHJveV9jb250ZXh0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCWlmKG1tLT5jb250ZXh0ICE9IFNVTjNfSU5WQUxJRF9DT05URVhUKQorCQljbGVhcl9jb250ZXh0KG1tLT5jb250ZXh0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFjdGl2YXRlX2NvbnRleHQoc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJZ2V0X21tdV9jb250ZXh0KG1tKTsKKwlzdW4zX3B1dF9jb250ZXh0KG1tLT5jb250ZXh0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN3aXRjaF9tbShzdHJ1Y3QgbW1fc3RydWN0ICpwcmV2LCBzdHJ1Y3QgbW1fc3RydWN0ICpuZXh0LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwlhY3RpdmF0ZV9jb250ZXh0KHRzay0+bW0pOworfQorCisjZGVmaW5lIGRlYWN0aXZhdGVfbW0odHNrLG1tKQlkbyB7IH0gd2hpbGUgKDApCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhY3RpdmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICpwcmV2X21tLAorCQkJICAgICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm5leHRfbW0pCit7CisJYWN0aXZhdGVfY29udGV4dChuZXh0X21tKTsKK30KKworI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvbW9kdWxlLmggYi9pbmNsdWRlL2FzbS1tNjhrL21vZHVsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2ZDc1YWYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL21vZHVsZS5oCkBAIC0wLDAgKzEsNyBAQAorI2lmbmRlZiBfQVNNX002OEtfTU9EVUxFX0gKKyNkZWZpbmUgX0FTTV9NNjhLX01PRFVMRV9ICitzdHJ1Y3QgbW9kX2FyY2hfc3BlY2lmaWMgeyB9OworI2RlZmluZSBFbGZfU2hkciBFbGYzMl9TaGRyCisjZGVmaW5lIEVsZl9TeW0gRWxmMzJfU3ltCisjZGVmaW5lIEVsZl9FaGRyIEVsZjMyX0VoZHIKKyNlbmRpZiAvKiBfQVNNX002OEtfTU9EVUxFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvbW90b3JvbGFfcGdhbGxvYy5oIGIvaW5jbHVkZS9hc20tbTY4ay9tb3Rvcm9sYV9wZ2FsbG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE1ODQxMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvbW90b3JvbGFfcGdhbGxvYy5oCkBAIC0wLDAgKzEsMTA3IEBACisjaWZuZGVmIF9NT1RPUk9MQV9QR0FMTE9DX0gKKyNkZWZpbmUgX01PVE9ST0xBX1BHQUxMT0NfSAorCisjaW5jbHVkZSA8YXNtL3RsYi5oPgorI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgorCitleHRlcm4gcG1kX3QgKmdldF9wb2ludGVyX3RhYmxlKHZvaWQpOworZXh0ZXJuIGludCBmcmVlX3BvaW50ZXJfdGFibGUocG1kX3QgKik7CisKKworc3RhdGljIGlubGluZSBwdGVfdCAqcHRlX2FsbG9jX29uZV9rZXJuZWwoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwlwdGVfdCAqcHRlOworCisJcHRlID0gKHB0ZV90ICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUx8X19HRlBfUkVQRUFUfF9fR0ZQX1pFUk8pOworCWlmIChwdGUpIHsKKwkJX19mbHVzaF9wYWdlX3RvX3JhbShwdGUpOworCQlmbHVzaF90bGJfa2VybmVsX3BhZ2UocHRlKTsKKwkJbm9jYWNoZV9wYWdlKHB0ZSk7CisJfQorCisJcmV0dXJuIHB0ZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHB0ZV9mcmVlX2tlcm5lbChwdGVfdCAqcHRlKQoreworCWNhY2hlX3BhZ2UocHRlKTsKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIHB0ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKnB0ZV9hbGxvY19vbmUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGFsbG9jX3BhZ2VzKEdGUF9LRVJORUx8X19HRlBfUkVQRUFUfF9fR0ZQX1pFUk8sIDApOworCXB0ZV90ICpwdGU7CisKKwlpZighcGFnZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlwdGUgPSBrbWFwKHBhZ2UpOworCWlmIChwdGUpIHsKKwkJX19mbHVzaF9wYWdlX3RvX3JhbShwdGUpOworCQlmbHVzaF90bGJfa2VybmVsX3BhZ2UocHRlKTsKKwkJbm9jYWNoZV9wYWdlKHB0ZSk7CisJfQorCWt1bm1hcChwdGUpOworCisJcmV0dXJuIHBhZ2U7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdGVfZnJlZShzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwljYWNoZV9wYWdlKGttYXAocGFnZSkpOworCWt1bm1hcChwYWdlKTsKKwlfX2ZyZWVfcGFnZShwYWdlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fcHRlX2ZyZWVfdGxiKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCBwYWdlICpwYWdlKQoreworCWNhY2hlX3BhZ2Uoa21hcChwYWdlKSk7CisJa3VubWFwKHBhZ2UpOworCV9fZnJlZV9wYWdlKHBhZ2UpOworfQorCisKK3N0YXRpYyBpbmxpbmUgcG1kX3QgKnBtZF9hbGxvY19vbmUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwlyZXR1cm4gZ2V0X3BvaW50ZXJfdGFibGUoKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcG1kX2ZyZWUocG1kX3QgKnBtZCkKK3sKKwlyZXR1cm4gZnJlZV9wb2ludGVyX3RhYmxlKHBtZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fcG1kX2ZyZWVfdGxiKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHBtZF90ICpwbWQpCit7CisJcmV0dXJuIGZyZWVfcG9pbnRlcl90YWJsZShwbWQpOworfQorCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwZ2RfZnJlZShwZ2RfdCAqcGdkKQoreworCXBtZF9mcmVlKChwbWRfdCAqKXBnZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgcGdkX3QgKnBnZF9hbGxvYyhzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlyZXR1cm4gKHBnZF90ICopZ2V0X3BvaW50ZXJfdGFibGUoKTsKK30KKworCitzdGF0aWMgaW5saW5lIHZvaWQgcG1kX3BvcHVsYXRlX2tlcm5lbChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZCwgcHRlX3QgKnB0ZSkKK3sKKwlwbWRfc2V0KHBtZCwgcHRlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBtZF9wb3B1bGF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZCwgc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJcG1kX3NldChwbWQsIHBhZ2VfYWRkcmVzcyhwYWdlKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwZ2RfcG9wdWxhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QsIHBtZF90ICpwbWQpCit7CisJcGdkX3NldChwZ2QsIHBtZCk7Cit9CisKKyNlbmRpZiAvKiBfTU9UT1JPTEFfUEdBTExPQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL21vdG9yb2xhX3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLW02OGsvbW90b3JvbGFfcGd0YWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2Mjg3MjMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL21vdG9yb2xhX3BndGFibGUuaApAQCAtMCwwICsxLDI5NCBAQAorI2lmbmRlZiBfTU9UT1JPTEFfUEdUQUJMRV9ICisjZGVmaW5lIF9NT1RPUk9MQV9QR1RBQkxFX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisvKgorICogRGVmaW5pdGlvbnMgZm9yIE1NVSBkZXNjcmlwdG9ycworICovCisjZGVmaW5lIF9QQUdFX1BSRVNFTlQJMHgwMDEKKyNkZWZpbmUgX1BBR0VfU0hPUlQJMHgwMDIKKyNkZWZpbmUgX1BBR0VfUk9OTFkJMHgwMDQKKyNkZWZpbmUgX1BBR0VfQUNDRVNTRUQJMHgwMDgKKyNkZWZpbmUgX1BBR0VfRElSVFkJMHgwMTAKKyNkZWZpbmUgX1BBR0VfU1VQRVIJMHgwODAJLyogNjgwNDAgc3VwZXJ2aXNvciBvbmx5ICovCisjZGVmaW5lIF9QQUdFX0dMT0JBTDA0MAkweDQwMAkvKiA2ODA0MCBnbG9iYWwgYml0LCB1c2VkIGZvciBrdmEgZGVzY3MgKi8KKyNkZWZpbmUgX1BBR0VfTk9DQUNIRTAzMCAweDA0MAkvKiA2ODAzMCBuby1jYWNoZSBtb2RlICovCisjZGVmaW5lIF9QQUdFX05PQ0FDSEUJMHgwNjAJLyogNjgwNDAgY2FjaGUgbW9kZSwgbm9uLXNlcmlhbGl6ZWQgKi8KKyNkZWZpbmUgX1BBR0VfTk9DQUNIRV9TCTB4MDQwCS8qIDY4MDQwIG5vLWNhY2hlIG1vZGUsIHNlcmlhbGl6ZWQgKi8KKyNkZWZpbmUgX1BBR0VfQ0FDSEUwNDAJMHgwMjAJLyogNjgwNDAgY2FjaGUgbW9kZSwgY2FjaGFibGUsIGNvcHliYWNrICovCisjZGVmaW5lIF9QQUdFX0NBQ0hFMDQwVwkweDAwMAkvKiA2ODA0MCBjYWNoZSBtb2RlLCBjYWNoYWJsZSwgd3JpdGUtdGhyb3VnaCAqLworCisjZGVmaW5lIF9ERVNDVFlQRV9NQVNLCTB4MDAzCisKKyNkZWZpbmUgX0NBQ0hFTUFTSzA0MAkofjB4MDYwKQorI2RlZmluZSBfVEFCTEVfTUFTSwkoMHhmZmZmZmUwMCkKKworI2RlZmluZSBfUEFHRV9UQUJMRQkoX1BBR0VfU0hPUlQpCisjZGVmaW5lIF9QQUdFX0NIR19NQVNLICAoUEFHRV9NQVNLIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9ESVJUWSB8IF9QQUdFX05PQ0FDSEUpCisKKyNkZWZpbmUgX1BBR0VfUFJPVE5PTkUJMHgwMDQKKyNkZWZpbmUgX1BBR0VfRklMRQkweDAwOAkvKiBwYWdlY2FjaGUgb3Igc3dhcD8gKi8KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworLyogVGhpcyBpcyB0aGUgY2FjaGUgbW9kZSB0byBiZSB1c2VkIGZvciBwYWdlcyBjb250YWluaW5nIHBhZ2UgZGVzY3JpcHRvcnMgZm9yCisgKiBwcm9jZXNzb3JzID49ICcwNDAuIEl0IGlzIGluIHB0ZV9ta25vY2FjaGUoKSwgYW5kIHRoZSB2YXJpYWJsZSBpcyBkZWZpbmVkCisgKiBhbmQgaW5pdGlhbGl6ZWQgaW4gaGVhZC5TICovCitleHRlcm4gaW50IG02OGtfcGd0YWJsZV9jYWNoZW1vZGU7CisKKy8qIFRoaXMgaXMgdGhlIGNhY2hlIG1vZGUgZm9yIG5vcm1hbCBwYWdlcywgZm9yIHN1cGVydmlzb3IgYWNjZXNzIG9uCisgKiBwcm9jZXNzb3JzID49ICcwNDAuIEl0IGlzIHVzZWQgaW4gcHRlX21rY2FjaGUoKSwgYW5kIHRoZSB2YXJpYWJsZSBpcworICogZGVmaW5lZCBhbmQgaW5pdGlhbGl6ZWQgaW4gaGVhZC5TICovCisKKyNpZiBkZWZpbmVkKENQVV9NNjgwNjBfT05MWSkgJiYgZGVmaW5lZChDT05GSUdfMDYwX1dSSVRFVEhST1VHSCkKKyNkZWZpbmUgbTY4a19zdXBlcnZpc29yX2NhY2hlbW9kZSBfUEFHRV9DQUNIRTA0MFcKKyNlbGlmIGRlZmluZWQoQ1BVX002ODA0MF9PUl9NNjgwNjBfT05MWSkKKyNkZWZpbmUgbTY4a19zdXBlcnZpc29yX2NhY2hlbW9kZSBfUEFHRV9DQUNIRTA0MAorI2VsaWYgZGVmaW5lZChDUFVfTTY4MDIwX09SX002ODAzMF9PTkxZKQorI2RlZmluZSBtNjhrX3N1cGVydmlzb3JfY2FjaGVtb2RlIDAKKyNlbHNlCitleHRlcm4gaW50IG02OGtfc3VwZXJ2aXNvcl9jYWNoZW1vZGU7CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ1BVX002ODA0MF9PUl9NNjgwNjBfT05MWSkKKyNkZWZpbmUgbW1fY2FjaGViaXRzIF9QQUdFX0NBQ0hFMDQwCisjZWxpZiBkZWZpbmVkKENQVV9NNjgwMjBfT1JfTTY4MDMwX09OTFkpCisjZGVmaW5lIG1tX2NhY2hlYml0cyAwCisjZWxzZQorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbW1fY2FjaGViaXRzOworI2VuZGlmCisKKyNkZWZpbmUgUEFHRV9OT05FCV9fcGdwcm90KF9QQUdFX1BST1ROT05FIHwgX1BBR0VfQUNDRVNTRUQgfCBtbV9jYWNoZWJpdHMpCisjZGVmaW5lIFBBR0VfU0hBUkVECV9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9BQ0NFU1NFRCB8IG1tX2NhY2hlYml0cykKKyNkZWZpbmUgUEFHRV9DT1BZCV9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9ST05MWSB8IF9QQUdFX0FDQ0VTU0VEIHwgbW1fY2FjaGViaXRzKQorI2RlZmluZSBQQUdFX1JFQURPTkxZCV9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9ST05MWSB8IF9QQUdFX0FDQ0VTU0VEIHwgbW1fY2FjaGViaXRzKQorI2RlZmluZSBQQUdFX0tFUk5FTAlfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfRElSVFkgfCBfUEFHRV9BQ0NFU1NFRCB8IG1tX2NhY2hlYml0cykKKworLyogQWx0ZXJuYXRlIGRlZmluaXRpb25zIHRoYXQgYXJlIGNvbXBpbGUgdGltZSBjb25zdGFudHMsIGZvcgorICAgaW5pdGlhbGl6aW5nIHByb3RlY3Rpb25fbWFwLiAgVGhlIGNhY2hlYml0cyBhcmUgZml4ZWQgbGF0ZXIuICAqLworI2RlZmluZSBQQUdFX05PTkVfQwlfX3BncHJvdChfUEFHRV9QUk9UTk9ORSB8IF9QQUdFX0FDQ0VTU0VEKQorI2RlZmluZSBQQUdFX1NIQVJFRF9DCV9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9BQ0NFU1NFRCkKKyNkZWZpbmUgUEFHRV9DT1BZX0MJX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JPTkxZIHwgX1BBR0VfQUNDRVNTRUQpCisjZGVmaW5lIFBBR0VfUkVBRE9OTFlfQwlfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUk9OTFkgfCBfUEFHRV9BQ0NFU1NFRCkKKworLyoKKyAqIFRoZSBtNjhrIGNhbid0IGRvIHBhZ2UgcHJvdGVjdGlvbiBmb3IgZXhlY3V0ZSwgYW5kIGNvbnNpZGVycyB0aGF0IHRoZSBzYW1lIGFyZSByZWFkLgorICogQWxzbywgd3JpdGUgcGVybWlzc2lvbnMgaW1wbHkgcmVhZCBwZXJtaXNzaW9ucy4gVGhpcyBpcyB0aGUgY2xvc2VzdCB3ZSBjYW4gZ2V0Li4KKyAqLworI2RlZmluZSBfX1AwMDAJUEFHRV9OT05FX0MKKyNkZWZpbmUgX19QMDAxCVBBR0VfUkVBRE9OTFlfQworI2RlZmluZSBfX1AwMTAJUEFHRV9DT1BZX0MKKyNkZWZpbmUgX19QMDExCVBBR0VfQ09QWV9DCisjZGVmaW5lIF9fUDEwMAlQQUdFX1JFQURPTkxZX0MKKyNkZWZpbmUgX19QMTAxCVBBR0VfUkVBRE9OTFlfQworI2RlZmluZSBfX1AxMTAJUEFHRV9DT1BZX0MKKyNkZWZpbmUgX19QMTExCVBBR0VfQ09QWV9DCisKKyNkZWZpbmUgX19TMDAwCVBBR0VfTk9ORV9DCisjZGVmaW5lIF9fUzAwMQlQQUdFX1JFQURPTkxZX0MKKyNkZWZpbmUgX19TMDEwCVBBR0VfU0hBUkVEX0MKKyNkZWZpbmUgX19TMDExCVBBR0VfU0hBUkVEX0MKKyNkZWZpbmUgX19TMTAwCVBBR0VfUkVBRE9OTFlfQworI2RlZmluZSBfX1MxMDEJUEFHRV9SRUFET05MWV9DCisjZGVmaW5lIF9fUzExMAlQQUdFX1NIQVJFRF9DCisjZGVmaW5lIF9fUzExMQlQQUdFX1NIQVJFRF9DCisKKy8qCisgKiBDb252ZXJzaW9uIGZ1bmN0aW9uczogY29udmVydCBhIHBhZ2UgYW5kIHByb3RlY3Rpb24gdG8gYSBwYWdlIGVudHJ5LAorICogYW5kIGEgcGFnZSBlbnRyeSBhbmQgcGFnZSBkaXJlY3RvcnkgdG8gdGhlIHBhZ2UgdGhleSByZWZlciB0by4KKyAqLworI2RlZmluZSBta19wdGUocGFnZSwgcGdwcm90KSBwZm5fcHRlKHBhZ2VfdG9fcGZuKHBhZ2UpLCAocGdwcm90KSkKKworc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbW9kaWZ5KHB0ZV90IHB0ZSwgcGdwcm90X3QgbmV3cHJvdCkKK3sKKwlwdGVfdmFsKHB0ZSkgPSAocHRlX3ZhbChwdGUpICYgX1BBR0VfQ0hHX01BU0spIHwgcGdwcm90X3ZhbChuZXdwcm90KTsKKwlyZXR1cm4gcHRlOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcG1kX3NldChwbWRfdCAqcG1kcCwgcHRlX3QgKnB0ZXApCit7CisJdW5zaWduZWQgbG9uZyBwdGJsID0gdmlydF90b19waHlzKHB0ZXApIHwgX1BBR0VfVEFCTEUgfCBfUEFHRV9BQ0NFU1NFRDsKKwl1bnNpZ25lZCBsb25nICpwdHIgPSBwbWRwLT5wbWQ7CisJc2hvcnQgaSA9IDE2OworCXdoaWxlICgtLWkgPj0gMCkgeworCQkqcHRyKysgPSBwdGJsOworCQlwdGJsICs9IChzaXplb2YocHRlX3QpKlBUUlNfUEVSX1BURS8xNik7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGdkX3NldChwZ2RfdCAqcGdkcCwgcG1kX3QgKnBtZHApCit7CisJcGdkX3ZhbCgqcGdkcCkgPSBfUEFHRV9UQUJMRSB8IF9QQUdFX0FDQ0VTU0VEIHwgX19wYShwbWRwKTsKK30KKworI2RlZmluZSBfX3B0ZV9wYWdlKHB0ZSkgKCh1bnNpZ25lZCBsb25nKV9fdmEocHRlX3ZhbChwdGUpICYgUEFHRV9NQVNLKSkKKyNkZWZpbmUgX19wbWRfcGFnZShwbWQpICgodW5zaWduZWQgbG9uZylfX3ZhKHBtZF92YWwocG1kKSAmIF9UQUJMRV9NQVNLKSkKKyNkZWZpbmUgX19wZ2RfcGFnZShwZ2QpICgodW5zaWduZWQgbG9uZylfX3ZhKHBnZF92YWwocGdkKSAmIF9UQUJMRV9NQVNLKSkKKworCisjZGVmaW5lIHB0ZV9ub25lKHB0ZSkJCSghcHRlX3ZhbChwdGUpKQorI2RlZmluZSBwdGVfcHJlc2VudChwdGUpCShwdGVfdmFsKHB0ZSkgJiAoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1BST1ROT05FKSkKKyNkZWZpbmUgcHRlX2NsZWFyKG1tLGFkZHIscHRlcCkJCSh7IHB0ZV92YWwoKihwdGVwKSkgPSAwOyB9KQorCisjZGVmaW5lIHB0ZV9wYWdlKHB0ZSkJCShtZW1fbWFwICsgKCh1bnNpZ25lZCBsb25nKShfX3ZhKHB0ZV92YWwocHRlKSkgLSBQQUdFX09GRlNFVCkgPj4gUEFHRV9TSElGVCkpCisjZGVmaW5lIHB0ZV9wZm4ocHRlKQkJKHB0ZV92YWwocHRlKSA+PiBQQUdFX1NISUZUKQorI2RlZmluZSBwZm5fcHRlKHBmbiwgcHJvdCkJX19wdGUoKChwZm4pIDw8IFBBR0VfU0hJRlQpIHwgcGdwcm90X3ZhbChwcm90KSkKKworI2RlZmluZSBwbWRfbm9uZShwbWQpCQkoIXBtZF92YWwocG1kKSkKKyNkZWZpbmUgcG1kX2JhZChwbWQpCQkoKHBtZF92YWwocG1kKSAmIF9ERVNDVFlQRV9NQVNLKSAhPSBfUEFHRV9UQUJMRSkKKyNkZWZpbmUgcG1kX3ByZXNlbnQocG1kKQkocG1kX3ZhbChwbWQpICYgX1BBR0VfVEFCTEUpCisjZGVmaW5lIHBtZF9jbGVhcihwbWRwKSAoewkJCVwKKwl1bnNpZ25lZCBsb25nICpfX3B0ciA9IHBtZHAtPnBtZDsJXAorCXNob3J0IF9faSA9IDE2OwkJCQlcCisJd2hpbGUgKC0tX19pID49IDApCQkJXAorCQkqX19wdHIrKyA9IDA7CQkJXAorfSkKKyNkZWZpbmUgcG1kX3BhZ2UocG1kKQkJKG1lbV9tYXAgKyAoKHVuc2lnbmVkIGxvbmcpKF9fdmEocG1kX3ZhbChwbWQpKSAtIFBBR0VfT0ZGU0VUKSA+PiBQQUdFX1NISUZUKSkKKworCisjZGVmaW5lIHBnZF9ub25lKHBnZCkJCSghcGdkX3ZhbChwZ2QpKQorI2RlZmluZSBwZ2RfYmFkKHBnZCkJCSgocGdkX3ZhbChwZ2QpICYgX0RFU0NUWVBFX01BU0spICE9IF9QQUdFX1RBQkxFKQorI2RlZmluZSBwZ2RfcHJlc2VudChwZ2QpCShwZ2RfdmFsKHBnZCkgJiBfUEFHRV9UQUJMRSkKKyNkZWZpbmUgcGdkX2NsZWFyKHBnZHApCQkoeyBwZ2RfdmFsKCpwZ2RwKSA9IDA7IH0pCisKKyNkZWZpbmUgcHRlX0VSUk9SKGUpIFwKKwlwcmludGsoIiVzOiVkOiBiYWQgcHRlICUwOGx4LlxuIiwgX19GSUxFX18sIF9fTElORV9fLCBwdGVfdmFsKGUpKQorI2RlZmluZSBwbWRfRVJST1IoZSkgXAorCXByaW50aygiJXM6JWQ6IGJhZCBwbWQgJTA4bHguXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sIHBtZF92YWwoZSkpCisjZGVmaW5lIHBnZF9FUlJPUihlKSBcCisJcHJpbnRrKCIlczolZDogYmFkIHBnZCAlMDhseC5cbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgcGdkX3ZhbChlKSkKKworCisvKgorICogVGhlIGZvbGxvd2luZyBvbmx5IHdvcmsgaWYgcHRlX3ByZXNlbnQoKSBpcyB0cnVlLgorICogVW5kZWZpbmVkIGJlaGF2aW91ciBpZiBub3QuLgorICovCitzdGF0aWMgaW5saW5lIGludCBwdGVfcmVhZChwdGVfdCBwdGUpCQl7IHJldHVybiAxOyB9CitzdGF0aWMgaW5saW5lIGludCBwdGVfd3JpdGUocHRlX3QgcHRlKQkJeyByZXR1cm4gIShwdGVfdmFsKHB0ZSkgJiBfUEFHRV9ST05MWSk7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9leGVjKHB0ZV90IHB0ZSkJCXsgcmV0dXJuIDE7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9kaXJ0eShwdGVfdCBwdGUpCQl7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9ESVJUWTsgfQorc3RhdGljIGlubGluZSBpbnQgcHRlX3lvdW5nKHB0ZV90IHB0ZSkJCXsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX0FDQ0VTU0VEOyB9CitzdGF0aWMgaW5saW5lIGludCBwdGVfZmlsZShwdGVfdCBwdGUpCQl7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9GSUxFOyB9CisKK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX3dycHJvdGVjdChwdGVfdCBwdGUpCXsgcHRlX3ZhbChwdGUpIHw9IF9QQUdFX1JPTkxZOyByZXR1cm4gcHRlOyB9CitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9yZHByb3RlY3QocHRlX3QgcHRlKQl7IHJldHVybiBwdGU7IH0KK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX2V4cHJvdGVjdChwdGVfdCBwdGUpCXsgcmV0dXJuIHB0ZTsgfQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtjbGVhbihwdGVfdCBwdGUpCXsgcHRlX3ZhbChwdGUpICY9IH5fUEFHRV9ESVJUWTsgcmV0dXJuIHB0ZTsgfQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtvbGQocHRlX3QgcHRlKQl7IHB0ZV92YWwocHRlKSAmPSB+X1BBR0VfQUNDRVNTRUQ7IHJldHVybiBwdGU7IH0KK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rd3JpdGUocHRlX3QgcHRlKQl7IHB0ZV92YWwocHRlKSAmPSB+X1BBR0VfUk9OTFk7IHJldHVybiBwdGU7IH0KK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rcmVhZChwdGVfdCBwdGUpCXsgcmV0dXJuIHB0ZTsgfQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtleGVjKHB0ZV90IHB0ZSkJeyByZXR1cm4gcHRlOyB9CitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta2RpcnR5KHB0ZV90IHB0ZSkJeyBwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfRElSVFk7IHJldHVybiBwdGU7IH0KK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21reW91bmcocHRlX3QgcHRlKQl7IHB0ZV92YWwocHRlKSB8PSBfUEFHRV9BQ0NFU1NFRDsgcmV0dXJuIHB0ZTsgfQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtub2NhY2hlKHB0ZV90IHB0ZSkKK3sKKwlwdGVfdmFsKHB0ZSkgPSAocHRlX3ZhbChwdGUpICYgX0NBQ0hFTUFTSzA0MCkgfCBtNjhrX3BndGFibGVfY2FjaGVtb2RlOworCXJldHVybiBwdGU7Cit9CitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta2NhY2hlKHB0ZV90IHB0ZSkKK3sKKwlwdGVfdmFsKHB0ZSkgPSAocHRlX3ZhbChwdGUpICYgX0NBQ0hFTUFTSzA0MCkgfCBtNjhrX3N1cGVydmlzb3JfY2FjaGVtb2RlOworCXJldHVybiBwdGU7Cit9CisKKyNkZWZpbmUgUEFHRV9ESVJfT0ZGU0VUKHRzayxhZGRyZXNzKSBwZ2Rfb2Zmc2V0KCh0c2spLChhZGRyZXNzKSkKKworI2RlZmluZSBwZ2RfaW5kZXgoYWRkcmVzcykgICAgICgoYWRkcmVzcykgPj4gUEdESVJfU0hJRlQpCisKKy8qIHRvIGZpbmQgYW4gZW50cnkgaW4gYSBwYWdlLXRhYmxlLWRpcmVjdG9yeSAqLworc3RhdGljIGlubGluZSBwZ2RfdCAqcGdkX29mZnNldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCXJldHVybiBtbS0+cGdkICsgcGdkX2luZGV4KGFkZHJlc3MpOworfQorCisjZGVmaW5lIHN3YXBwZXJfcGdfZGlyIGtlcm5lbF9wZ19kaXIKK2V4dGVybiBwZ2RfdCBrZXJuZWxfcGdfZGlyWzEyOF07CisKK3N0YXRpYyBpbmxpbmUgcGdkX3QgKnBnZF9vZmZzZXRfayh1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisJcmV0dXJuIGtlcm5lbF9wZ19kaXIgKyAoYWRkcmVzcyA+PiBQR0RJUl9TSElGVCk7Cit9CisKKworLyogRmluZCBhbiBlbnRyeSBpbiB0aGUgc2Vjb25kLWxldmVsIHBhZ2UgdGFibGUuLiAqLworc3RhdGljIGlubGluZSBwbWRfdCAqcG1kX29mZnNldChwZ2RfdCAqZGlyLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisJcmV0dXJuIChwbWRfdCAqKV9fcGdkX3BhZ2UoKmRpcikgKyAoKGFkZHJlc3MgPj4gUE1EX1NISUZUKSAmIChQVFJTX1BFUl9QTUQtMSkpOworfQorCisvKiBGaW5kIGFuIGVudHJ5IGluIHRoZSB0aGlyZC1sZXZlbCBwYWdlIHRhYmxlLi4gKi8KK3N0YXRpYyBpbmxpbmUgcHRlX3QgKnB0ZV9vZmZzZXRfa2VybmVsKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisJcmV0dXJuIChwdGVfdCAqKV9fcG1kX3BhZ2UoKnBtZHApICsgKChhZGRyZXNzID4+IFBBR0VfU0hJRlQpICYgKFBUUlNfUEVSX1BURSAtIDEpKTsKK30KKworI2RlZmluZSBwdGVfb2Zmc2V0X21hcChwbWRwLGFkZHJlc3MpICgocHRlX3QgKilrbWFwKHBtZF9wYWdlKCpwbWRwKSkgKyAoKGFkZHJlc3MgPj4gUEFHRV9TSElGVCkgJiAoUFRSU19QRVJfUFRFIC0gMSkpKQorI2RlZmluZSBwdGVfb2Zmc2V0X21hcF9uZXN0ZWQocG1kcCwgYWRkcmVzcykgcHRlX29mZnNldF9tYXAocG1kcCwgYWRkcmVzcykKKyNkZWZpbmUgcHRlX3VubWFwKHB0ZSkga3VubWFwKHB0ZSkKKyNkZWZpbmUgcHRlX3VubWFwX25lc3RlZChwdGUpIGt1bm1hcChwdGUpCisKKy8qCisgKiBBbGxvY2F0ZSBhbmQgZnJlZSBwYWdlIHRhYmxlcy4gVGhlIHh4eF9rZXJuZWwoKSB2ZXJzaW9ucyBhcmUKKyAqIHVzZWQgdG8gYWxsb2NhdGUgYSBrZXJuZWwgcGFnZSB0YWJsZSAtIHRoaXMgdHVybnMgb24gQVNOIGJpdHMKKyAqIGlmIGFueS4KKyAqLworCisvKiBQcmlvciB0byBjYWxsaW5nIHRoZXNlIHJvdXRpbmVzLCB0aGUgcGFnZSBzaG91bGQgaGF2ZSBiZWVuIGZsdXNoZWQKKyAqIGZyb20gYm90aCB0aGUgY2FjaGUgYW5kIEFUQywgb3IgdGhlIENQVSBtaWdodCBub3Qgbm90aWNlIHRoYXQgdGhlCisgKiBjYWNoZSBzZXR0aW5nIGZvciB0aGUgcGFnZSBoYXMgYmVlbiBjaGFuZ2VkLiAtanNrb3YKKyAqLworc3RhdGljIGlubGluZSB2b2lkIG5vY2FjaGVfcGFnZSh2b2lkICp2YWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZyl2YWRkcjsKKworCWlmIChDUFVfSVNfMDQwX09SXzA2MCkgeworCQlwZ2RfdCAqZGlyOworCQlwbWRfdCAqcG1kcDsKKwkJcHRlX3QgKnB0ZXA7CisKKwkJZGlyID0gcGdkX29mZnNldF9rKGFkZHIpOworCQlwbWRwID0gcG1kX29mZnNldChkaXIsIGFkZHIpOworCQlwdGVwID0gcHRlX29mZnNldF9rZXJuZWwocG1kcCwgYWRkcik7CisJCSpwdGVwID0gcHRlX21rbm9jYWNoZSgqcHRlcCk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2FjaGVfcGFnZSh2b2lkICp2YWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZyl2YWRkcjsKKworCWlmIChDUFVfSVNfMDQwX09SXzA2MCkgeworCQlwZ2RfdCAqZGlyOworCQlwbWRfdCAqcG1kcDsKKwkJcHRlX3QgKnB0ZXA7CisKKwkJZGlyID0gcGdkX29mZnNldF9rKGFkZHIpOworCQlwbWRwID0gcG1kX29mZnNldChkaXIsIGFkZHIpOworCQlwdGVwID0gcHRlX29mZnNldF9rZXJuZWwocG1kcCwgYWRkcik7CisJCSpwdGVwID0gcHRlX21rY2FjaGUoKnB0ZXApOworCX0KK30KKworI2RlZmluZSBQVEVfRklMRV9NQVhfQklUUwkyOAorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcHRlX3RvX3Bnb2ZmKHB0ZV90IHB0ZSkKK3sKKwlyZXR1cm4gcHRlLnB0ZSA+PiA0OworfQorCitzdGF0aWMgaW5saW5lIHB0ZV90IHBnb2ZmX3RvX3B0ZSh1bnNpZ25lZCBvZmYpCit7CisJcHRlX3QgcHRlID0geyAob2ZmIDw8IDQpICsgX1BBR0VfRklMRSB9OworCXJldHVybiBwdGU7Cit9CisKKy8qIEVuY29kZSBhbmQgZGUtY29kZSBhIHN3YXAgZW50cnkgKG11c3QgYmUgIXB0ZV9ub25lKGUpICYmICFwdGVfcHJlc2VudChlKSkgKi8KKyNkZWZpbmUgX19zd3BfdHlwZSh4KQkJKCgoeCkudmFsID4+IDQpICYgMHhmZikKKyNkZWZpbmUgX19zd3Bfb2Zmc2V0KHgpCQkoKHgpLnZhbCA+PiAxMikKKyNkZWZpbmUgX19zd3BfZW50cnkodHlwZSwgb2Zmc2V0KSAoKHN3cF9lbnRyeV90KSB7ICgodHlwZSkgPDwgNCkgfCAoKG9mZnNldCkgPDwgMTIpIH0pCisjZGVmaW5lIF9fcHRlX3RvX3N3cF9lbnRyeShwdGUpCSgoc3dwX2VudHJ5X3QpIHsgcHRlX3ZhbChwdGUpIH0pCisjZGVmaW5lIF9fc3dwX2VudHJ5X3RvX3B0ZSh4KQkoKHB0ZV90KSB7ICh4KS52YWwgfSkKKworI2VuZGlmCS8qICFfX0FTU0VNQkxZX18gKi8KKyNlbmRpZiAvKiBfTU9UT1JPTEFfUEdUQUJMRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL21vdnMuaCBiL2luY2x1ZGUvYXNtLW02OGsvbW92cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3ZGJlYTMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL21vdnMuaApAQCAtMCwwICsxLDU1IEBACisjaWZuZGVmICBfX01PVlNfSF9fCisjZGVmaW5lIF9fTU9WU19IX18KKworLyoKKyoqIG1vdnMuaAorKioKKyoqIElubGluZSBhc3NlbWJseSBtYWNyb3MgdG8gZ2VuZXJhdGUgbW92cyAmIHJlbGF0ZWQgaW5zdHJ1Y3Rpb25zCisqLworCisvKiBTZXQgREZDIHJlZ2lzdGVyIHZhbHVlICovCisKKyNkZWZpbmUgU0VUX0RGQyh4KSBcCisgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgiIG1vdmVjICUwLCUvZGZjIiA6IDogImQiICh4KSk7CisKKy8qIEdldCBERkMgcmVnaXN0ZXIgdmFsdWUgKi8KKworI2RlZmluZSBHRVRfREZDKHgpIFwKKyAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCIgbW92ZWMgJS9kZmMsICUwIiA6ICI9ZCIgKHgpIDogKTsKKworLyogU2V0IFNGQyByZWdpc3RlciB2YWx1ZSAqLworCisjZGVmaW5lIFNFVF9TRkMoeCkgXAorICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIiBtb3ZlYyAlMCwlL3NmYyIgOiA6ICJkIiAoeCkpOworCisvKiBHZXQgU0ZDIHJlZ2lzdGVyIHZhbHVlICovCisKKyNkZWZpbmUgR0VUX1NGQyh4KSBcCisgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgiIG1vdmVjICUvc2ZjLCAlMCIgOiAiPWQiICh4KSA6ICk7CisKKyNkZWZpbmUgU0VUX1ZCUih4KSBcCisgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgiIG1vdmVjICUwLCUvdmJyIiA6IDogInIiICh4KSk7CisKKyNkZWZpbmUgR0VUX1ZCUih4KSBcCisgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgiIG1vdmVjICUvdmJyLCAlMCIgOiAiPWciICh4KSA6ICk7CisKKy8qIFNldCBhIGJ5dGUgdXNpbmcgdGhlICJtb3ZzIiBpbnN0cnVjdGlvbiAqLworCisjZGVmaW5lIFNFVF9DT05UUk9MX0JZVEUoYWRkcix2YWx1ZSkgXAorICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIiBtb3ZzYiAlMCwgJTFAIiA6IDogImQiICh2YWx1ZSksICJhIiAoYWRkcikpOworCisvKiBHZXQgYSBieXRlIHVzaW5nIHRoZSAibW92cyIgaW5zdHJ1Y3Rpb24gKi8KKworI2RlZmluZSBHRVRfQ09OVFJPTF9CWVRFKGFkZHIsdmFsdWUpIFwKKyAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCIgbW92c2IgJTFALCAlMCIgOiAiPWQiICh2YWx1ZSkgOiAiYSIgKGFkZHIpKTsKKworLyogU2V0IGEgKGxvbmcpd29yZCB1c2luZyB0aGUgIm1vdnMiIGluc3RydWN0aW9uICovCisKKyNkZWZpbmUgU0VUX0NPTlRST0xfV09SRChhZGRyLHZhbHVlKSBcCisgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgiIG1vdnNsICUwLCAlMUAiIDogOiAiZCIgKHZhbHVlKSwgImEiIChhZGRyKSk7CisKKy8qIEdldCBhIChsb25nKXdvcmQgdXNpbmcgdGhlICJtb3ZzIiBpbnN0cnVjdGlvbiAqLworCisjZGVmaW5lIEdFVF9DT05UUk9MX1dPUkQoYWRkcix2YWx1ZSkgXAorICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIiBtb3ZzbCAlMUAsICUwIiA6ICI9ZCIgKHZhbHVlKSA6ICJhIiAoYWRkcikpOworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL21zZ2J1Zi5oIGIvaW5jbHVkZS9hc20tbTY4ay9tc2didWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDNjYjc5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9tc2didWYuaApAQCAtMCwwICsxLDMxIEBACisjaWZuZGVmIF9NNjhLX01TR0JVRl9ICisjZGVmaW5lIF9NNjhLX01TR0JVRl9ICisKKy8qCisgKiBUaGUgbXNxaWQ2NF9kcyBzdHJ1Y3R1cmUgZm9yIG02OGsgYXJjaGl0ZWN0dXJlLgorICogTm90ZSBleHRyYSBwYWRkaW5nIGJlY2F1c2UgdGhpcyBzdHJ1Y3R1cmUgaXMgcGFzc2VkIGJhY2sgYW5kIGZvcnRoCisgKiBiZXR3ZWVuIGtlcm5lbCBhbmQgdXNlciBzcGFjZS4KKyAqCisgKiBQYWQgc3BhY2UgaXMgbGVmdCBmb3I6CisgKiAtIDY0LWJpdCB0aW1lX3QgdG8gc29sdmUgeTIwMzggcHJvYmxlbQorICogLSAyIG1pc2NlbGxhbmVvdXMgMzItYml0IHZhbHVlcworICovCisKK3N0cnVjdCBtc3FpZDY0X2RzIHsKKwlzdHJ1Y3QgaXBjNjRfcGVybSBtc2dfcGVybTsKKwlfX2tlcm5lbF90aW1lX3QgbXNnX3N0aW1lOwkvKiBsYXN0IG1zZ3NuZCB0aW1lICovCisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDE7CisJX19rZXJuZWxfdGltZV90IG1zZ19ydGltZTsJLyogbGFzdCBtc2dyY3YgdGltZSAqLworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQyOworCV9fa2VybmVsX3RpbWVfdCBtc2dfY3RpbWU7CS8qIGxhc3QgY2hhbmdlIHRpbWUgKi8KKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkMzsKKwl1bnNpZ25lZCBsb25nICBtc2dfY2J5dGVzOwkvKiBjdXJyZW50IG51bWJlciBvZiBieXRlcyBvbiBxdWV1ZSAqLworCXVuc2lnbmVkIGxvbmcgIG1zZ19xbnVtOwkvKiBudW1iZXIgb2YgbWVzc2FnZXMgaW4gcXVldWUgKi8KKwl1bnNpZ25lZCBsb25nICBtc2dfcWJ5dGVzOwkvKiBtYXggbnVtYmVyIG9mIGJ5dGVzIG9uIHF1ZXVlICovCisJX19rZXJuZWxfcGlkX3QgbXNnX2xzcGlkOwkvKiBwaWQgb2YgbGFzdCBtc2dzbmQgKi8KKwlfX2tlcm5lbF9waWRfdCBtc2dfbHJwaWQ7CS8qIGxhc3QgcmVjZWl2ZSBwaWQgKi8KKwl1bnNpZ25lZCBsb25nICBfX3VudXNlZDQ7CisJdW5zaWduZWQgbG9uZyAgX191bnVzZWQ1OworfTsKKworI2VuZGlmIC8qIF9NNjhLX01TR0JVRl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL212bWUxNDdody5oIGIvaW5jbHVkZS9hc20tbTY4ay9tdm1lMTQ3aHcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjQ1MTM5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9tdm1lMTQ3aHcuaApAQCAtMCwwICsxLDExMSBAQAorI2lmbmRlZiBfTVZNRTE0N0hXX0hfCisjZGVmaW5lIF9NVk1FMTQ3SFdfSF8KKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGNoYXIKKwkJY3RybCwKKwkJYmNkX3NlYywKKwkJYmNkX21pbiwKKwkJYmNkX2hyLAorCQliY2RfZG93LAorCQliY2RfZG9tLAorCQliY2RfbXRoLAorCQliY2RfeWVhcjsKK30gTUs0OFQwMjsKKworI2RlZmluZSBSVENfV1JJVEUJMHg4MAorI2RlZmluZSBSVENfUkVBRAkweDQwCisjZGVmaW5lIFJUQ19TVE9QCTB4MjAKKworI2RlZmluZSBtMTQ3X3J0YyAoKE1LNDhUMDIgKiB2b2xhdGlsZSkweGZmZmUwN2Y4KQorCisKK3N0cnVjdCBwY2NfcmVncyB7CisgICB2b2xhdGlsZSB1X2xvbmcJZG1hX3RhZHI7CisgICB2b2xhdGlsZSB1X2xvbmcJZG1hX2RhZHI7CisgICB2b2xhdGlsZSB1X2xvbmcJZG1hX2JjcjsKKyAgIHZvbGF0aWxlIHVfbG9uZwlkbWFfaHI7CisgICB2b2xhdGlsZSB1X3Nob3J0CXQxX3ByZWxvYWQ7CisgICB2b2xhdGlsZSB1X3Nob3J0CXQxX2NvdW50OworICAgdm9sYXRpbGUgdV9zaG9ydAl0Ml9wcmVsb2FkOworICAgdm9sYXRpbGUgdV9zaG9ydAl0Ml9jb3VudDsKKyAgIHZvbGF0aWxlIHVfY2hhcgl0MV9pbnRfY250cmw7CisgICB2b2xhdGlsZSB1X2NoYXIJdDFfY250cmw7CisgICB2b2xhdGlsZSB1X2NoYXIJdDJfaW50X2NudHJsOworICAgdm9sYXRpbGUgdV9jaGFyCXQyX2NudHJsOworICAgdm9sYXRpbGUgdV9jaGFyCWFjX2ZhaWw7CisgICB2b2xhdGlsZSB1X2NoYXIJd2F0Y2hkb2c7CisgICB2b2xhdGlsZSB1X2NoYXIJbHB0X2ludHI7CisgICB2b2xhdGlsZSB1X2NoYXIJbHB0X2NudHJsOworICAgdm9sYXRpbGUgdV9jaGFyCWRtYV9pbnRyOworICAgdm9sYXRpbGUgdV9jaGFyCWRtYV9jbnRybDsKKyAgIHZvbGF0aWxlIHVfY2hhcglidXNfZXJyb3I7CisgICB2b2xhdGlsZSB1X2NoYXIJZG1hX3N0YXR1czsKKyAgIHZvbGF0aWxlIHVfY2hhcglhYm9ydDsKKyAgIHZvbGF0aWxlIHVfY2hhcgl0YV9mbmN0bDsKKyAgIHZvbGF0aWxlIHVfY2hhcglzZXJpYWxfY250cmw7CisgICB2b2xhdGlsZSB1X2NoYXIJZ2VuZXJhbF9jbnRybDsKKyAgIHZvbGF0aWxlIHVfY2hhcglsYW5fY250cmw7CisgICB2b2xhdGlsZSB1X2NoYXIJZ2VuZXJhbF9zdGF0dXM7CisgICB2b2xhdGlsZSB1X2NoYXIJc2NzaV9pbnRlcnJ1cHQ7CisgICB2b2xhdGlsZSB1X2NoYXIJc2xhdmU7CisgICB2b2xhdGlsZSB1X2NoYXIJc29mdDFfY250cmw7CisgICB2b2xhdGlsZSB1X2NoYXIJaW50X2Jhc2U7CisgICB2b2xhdGlsZSB1X2NoYXIJc29mdDJfY250cmw7CisgICB2b2xhdGlsZSB1X2NoYXIJcmV2aXNpb25fbGV2ZWw7CisgICB2b2xhdGlsZSB1X2NoYXIJbHB0X2RhdGE7CisgICB2b2xhdGlsZSB1X2NoYXIJbHB0X3N0YXR1czsKKyAgIH07CisKKyNkZWZpbmUgbTE0N19wY2MgKChzdHJ1Y3QgcGNjX3JlZ3MgKiB2b2xhdGlsZSkweGZmZmUxMDAwKQorCisKKyNkZWZpbmUgUENDX0lOVF9FTkFCCQkweDA4CisKKyNkZWZpbmUgUENDX1RJTUVSX0lOVF9DTFIJMHg4MAorI2RlZmluZSBQQ0NfVElNRVJfUFJFTE9BRAk2MzkzNmwKKworI2RlZmluZSBQQ0NfTEVWRUxfQUJPUlQJCTB4MDcKKyNkZWZpbmUgUENDX0xFVkVMX1NFUklBTAkweDA0CisjZGVmaW5lIFBDQ19MRVZFTF9FVEgJCTB4MDQKKyNkZWZpbmUgUENDX0xFVkVMX1RJTUVSMQkweDA0CisjZGVmaW5lIFBDQ19MRVZFTF9TQ1NJX1BPUlQJMHgwNAorI2RlZmluZSBQQ0NfTEVWRUxfU0NTSV9ETUEJMHgwNAorCisjZGVmaW5lIFBDQ19JUlFfQUNfRkFJTAkJMHg0MAorI2RlZmluZSBQQ0NfSVJRX0JFUlIJCTB4NDEKKyNkZWZpbmUgUENDX0lSUV9BQk9SVAkJMHg0MgorLyogI2RlZmluZSBQQ0NfSVJRX1NFUklBTAkweDQzICovCisjZGVmaW5lIFBDQ19JUlFfUFJJTlRFUgkJMHg0NworI2RlZmluZSBQQ0NfSVJRX1RJTUVSMQkJMHg0OAorI2RlZmluZSBQQ0NfSVJRX1RJTUVSMgkJMHg0OQorI2RlZmluZSBQQ0NfSVJRX1NPRlRXQVJFMQkweDRhCisjZGVmaW5lIFBDQ19JUlFfU09GVFdBUkUyCTB4NGIKKworCisjZGVmaW5lIE0xNDdfU0NDX0FfQUREUgkJMHhmZmZlMzAwMgorI2RlZmluZSBNMTQ3X1NDQ19CX0FERFIJCTB4ZmZmZTMwMDAKKyNkZWZpbmUgTTE0N19TQ0NfUENMSwkJNTAwMDAwMAorCisjZGVmaW5lIE1WTUUxNDdfSVJRX1NDU0lfUE9SVAkweDQ1CisjZGVmaW5lIE1WTUUxNDdfSVJRX1NDU0lfRE1BCTB4NDYKKworLyogU0NDIGludGVycnVwdHMsIGZvciBNVk1FMTQ3ICovCisKKyNkZWZpbmUgTVZNRTE0N19JUlFfVFlQRV9QUklPCTAKKyNkZWZpbmUgTVZNRTE0N19JUlFfU0NDX0JBU0UJCTB4NjAKKyNkZWZpbmUgTVZNRTE0N19JUlFfU0NDQl9UWAkJMHg2MAorI2RlZmluZSBNVk1FMTQ3X0lSUV9TQ0NCX1NUQVQJCTB4NjIKKyNkZWZpbmUgTVZNRTE0N19JUlFfU0NDQl9SWAkJMHg2NAorI2RlZmluZSBNVk1FMTQ3X0lSUV9TQ0NCX1NQQ09ORAkJMHg2NgorI2RlZmluZSBNVk1FMTQ3X0lSUV9TQ0NBX1RYCQkweDY4CisjZGVmaW5lIE1WTUUxNDdfSVJRX1NDQ0FfU1RBVAkJMHg2YQorI2RlZmluZSBNVk1FMTQ3X0lSUV9TQ0NBX1JYCQkweDZjCisjZGVmaW5lIE1WTUUxNDdfSVJRX1NDQ0FfU1BDT05ECQkweDZlCisKKyNkZWZpbmUgTVZNRTE0N19MQU5DRV9CQVNFCTB4ZmZmZTE4MDAKKyNkZWZpbmUgTVZNRTE0N19MQU5DRV9JUlEJMHg0NAorCisjZGVmaW5lIEVUSEVSTkVUX0FERFJFU1MgMHhmZmZlMDc3OAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvbXZtZTE2eGh3LmggYi9pbmNsdWRlL2FzbS1tNjhrL212bWUxNnhody5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkMDcyMzEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL212bWUxNnhody5oCkBAIC0wLDAgKzEsMTExIEBACisjaWZuZGVmIF9NNjhLX01WTUUxNnhIV19IXworI2RlZmluZSBfTTY4S19NVk1FMTZ4SFdfSF8KKworI2luY2x1ZGUgPGFzbS9pcnEuaD4KKworLyogQm9hcmQgSUQgZGF0YSBzdHJ1Y3R1cmUgLSBwb2ludGVyIHRvIHRoaXMgcmV0cmlldmVkIGZyb20gQnVnIGJ5IGhlYWQuUyAqLworCisvKiBOb3RlLCBieXRlcyAxMiBhbmQgMTMgYXJlIGJvYXJkIG5vIGluIEJDRCAoMDE2MiwwMTY2LDAxNjcsMDE3NyxldGMpICovCisKK2V4dGVybiBsb25nIG12bWVfYmRpZF9wdHI7CisKK3R5cGVkZWYgc3RydWN0IHsKKwljaGFyCWJkaWRbNF07CisJdV9jaGFyCXJldiwgbXRoLCBkYXksIHlyOworCXVfc2hvcnQJc2l6ZSwgcmVzZXJ2ZWQ7CisJdV9zaG9ydAlicmRubzsKKwljaGFyIGJyZHN1ZmZpeFsyXTsKKwl1X2xvbmcJb3B0aW9uczsKKwl1X3Nob3J0CWNsdW4sIGRsdW4sIGN0eXBlLCBkbnVtOworCXVfbG9uZwlvcHRpb24yOworfSB0X2JkaWQsICpwX2JkaWQ7CisKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVfY2hhcglhY2tfaWNyLAorCQlmbHRfaWNyLAorCQlzZWxfaWNyLAorCQlwZV9pY3IsCisJCWJzeV9pY3IsCisJCXNwYXJlMSwKKwkJaXNyLAorCQljciwKKwkJc3BhcmUyLAorCQlzcGFyZTMsCisJCXNwYXJlNCwKKwkJZGF0YTsKK30gTVZNRWxwLCAqTVZNRWxwUHRyOworCisjZGVmaW5lIE1WTUVfTFBSX0JBU0UJMHhmZmY0MjAzMAorCisjZGVmaW5lIG12bWVscCAgICgoKih2b2xhdGlsZSBNVk1FbHBQdHIpKE1WTUVfTFBSX0JBU0UpKSkKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGNoYXIKKwkJY3RybCwKKwkJYmNkX3NlYywKKwkJYmNkX21pbiwKKwkJYmNkX2hyLAorCQliY2RfZG93LAorCQliY2RfZG9tLAorCQliY2RfbXRoLAorCQliY2RfeWVhcjsKK30gTUs0OFQwOF90LCAqTUs0OFQwOHB0cl90OworCisjZGVmaW5lIFJUQ19XUklURQkweDgwCisjZGVmaW5lIFJUQ19SRUFECTB4NDAKKyNkZWZpbmUgUlRDX1NUT1AJMHgyMAorCisjZGVmaW5lIE1WTUVfUlRDX0JBU0UJMHhmZmZjMWZmOAorCisjZGVmaW5lIE1WTUVfSTU5Nl9CQVNFCTB4ZmZmNDYwMDAKKworI2RlZmluZSBNVk1FX1NDQ19BX0FERFIJMHhmZmY0NTAwNQorI2RlZmluZSBNVk1FX1NDQ19CX0FERFIJMHhmZmY0NTAwMQorI2RlZmluZSBNVk1FX1NDQ19QQ0xLCTEwMDAwMDAwCisKKyNkZWZpbmUgTVZNRTE2Ml9JUlFfVFlQRV9QUklPCTAKKworI2RlZmluZSBNVk1FMTY3X0lSUV9QUk4JCTB4NTQKKyNkZWZpbmUgTVZNRTE2eF9JUlFfSTU5NgkweDU3CisjZGVmaW5lIE1WTUUxNnhfSVJRX1NDU0kJMHg1NQorI2RlZmluZSBNVk1FMTZ4X0lSUV9GTFkJCTB4N2YKKyNkZWZpbmUgTVZNRTE2N19JUlFfU0VSX0VSUgkweDVjCisjZGVmaW5lIE1WTUUxNjdfSVJRX1NFUl9NT0RFTQkweDVkCisjZGVmaW5lIE1WTUUxNjdfSVJRX1NFUl9UWAkweDVlCisjZGVmaW5lIE1WTUUxNjdfSVJRX1NFUl9SWAkweDVmCisjZGVmaW5lIE1WTUUxNnhfSVJRX1RJTUVSCTB4NTkKKyNkZWZpbmUgTVZNRTE2N19JUlFfQUJPUlQJMHg2ZQorI2RlZmluZSBNVk1FMTYyX0lSUV9BQk9SVAkweDVlCisKKy8qIFNDQyBpbnRlcnJ1cHRzLCBmb3IgTVZNRTE2MiAqLworI2RlZmluZSBNVk1FMTYyX0lSUV9TQ0NfQkFTRQkJMHg0MAorI2RlZmluZSBNVk1FMTYyX0lSUV9TQ0NCX1RYCQkweDQwCisjZGVmaW5lIE1WTUUxNjJfSVJRX1NDQ0JfU1RBVAkJMHg0MgorI2RlZmluZSBNVk1FMTYyX0lSUV9TQ0NCX1JYCQkweDQ0CisjZGVmaW5lIE1WTUUxNjJfSVJRX1NDQ0JfU1BDT05ECQkweDQ2CisjZGVmaW5lIE1WTUUxNjJfSVJRX1NDQ0FfVFgJCTB4NDgKKyNkZWZpbmUgTVZNRTE2Ml9JUlFfU0NDQV9TVEFUCQkweDRhCisjZGVmaW5lIE1WTUUxNjJfSVJRX1NDQ0FfUlgJCTB4NGMKKyNkZWZpbmUgTVZNRTE2Ml9JUlFfU0NDQV9TUENPTkQJCTB4NGUKKworLyogTVZNRTE2MiB2ZXJzaW9uIHJlZ2lzdGVyICovCisKKyNkZWZpbmUgTVZNRTE2Ml9WRVJTSU9OX1JFRwkweGZmZjQyMDJlCisKK2V4dGVybiB1bnNpZ25lZCBzaG9ydCBtdm1lMTZ4X2NvbmZpZzsKKworLyogTG93ZXIgOCBiaXRzIG11c3QgbWF0Y2ggdGhlIHJldmlzaW9uIHJlZ2lzdGVyIGluIHRoZSBNQzIgY2hpcCAqLworCisjZGVmaW5lIE1WTUUxNnhfQ09ORklHX1NQRUVEXzMyCQkweDAwMDEKKyNkZWZpbmUgTVZNRTE2eF9DT05GSUdfTk9fVk1FQ0hJUDIJMHgwMDAyCisjZGVmaW5lIE1WTUUxNnhfQ09ORklHX05PX1NDU0lDSElQCTB4MDAwNAorI2RlZmluZSBNVk1FMTZ4X0NPTkZJR19OT19FVEhFUk5FVAkweDAwMDgKKyNkZWZpbmUgTVZNRTE2eF9DT05GSUdfR09UX0ZQVQkJMHgwMDEwCisKKyNkZWZpbmUgTVZNRTE2eF9DT05GSUdfR09UX0xQCQkweDAxMDAKKyNkZWZpbmUgTVZNRTE2eF9DT05GSUdfR09UX0NEMjQwMQkweDAyMDAKKyNkZWZpbmUgTVZNRTE2eF9DT05GSUdfR09UX1NDQ0EJCTB4MDQwMAorI2RlZmluZSBNVk1FMTZ4X0NPTkZJR19HT1RfU0NDQgkJMHgwODAwCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9uYW1laS5oIGIvaW5jbHVkZS9hc20tbTY4ay9uYW1laS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzM2YyNDMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL25hbWVpLmgKQEAgLTAsMCArMSwxNyBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLW02OGsvbmFtZWkuaAorICoKKyAqIEluY2x1ZGVkIGZyb20gbGludXgvZnMvbmFtZWkuYworICovCisKKyNpZm5kZWYgX19NNjhLX05BTUVJX0gKKyNkZWZpbmUgX19NNjhLX05BTUVJX0gKKworLyogVGhpcyBkdW1teSByb3V0aW5lIG1heWJlIGNoYW5nZWQgdG8gc29tZXRoaW5nIHVzZWZ1bAorICogZm9yIC91c3IvZ25lbXVsLyBlbXVsYXRpb24gc3R1ZmYuCisgKiBMb29rIGF0IGFzbS1zcGFyYy9uYW1laS5oIGZvciBkZXRhaWxzLgorICovCisKKyNkZWZpbmUgX19lbXVsX3ByZWZpeCgpIE5VTEwKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL251YnVzLmggYi9pbmNsdWRlL2FzbS1tNjhrL251YnVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZiZTk5NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvbnVidXMuaApAQCAtMCwwICsxLDQ2IEBACisjaWZuZGVmIF9BU01fTTY4S19OVUJVU19ICisjZGVmaW5lIF9BU01fTTY4S19OVUJVU19ICisKKyNpbmNsdWRlIDxhc20vcmF3X2lvLmg+CisKKyNkZWZpbmUgbnVidXNfcmVhZGIgcmF3X2luYgorI2RlZmluZSBudWJ1c19yZWFkdyByYXdfaW53CisjZGVmaW5lIG51YnVzX3JlYWRsIHJhd19pbmwKKworI2RlZmluZSBudWJ1c193cml0ZWIgcmF3X291dGIKKyNkZWZpbmUgbnVidXNfd3JpdGV3IHJhd19vdXR3CisjZGVmaW5lIG51YnVzX3dyaXRlbCByYXdfb3V0bAorCisjZGVmaW5lIG51YnVzX21lbXNldF9pbyhhLGIsYykJCW1lbXNldCgodm9pZCAqKShhKSwoYiksKGMpKQorI2RlZmluZSBudWJ1c19tZW1jcHlfZnJvbWlvKGEsYixjKQltZW1jcHkoKGEpLCh2b2lkICopKGIpLChjKSkKKyNkZWZpbmUgbnVidXNfbWVtY3B5X3RvaW8oYSxiLGMpCW1lbWNweSgodm9pZCAqKShhKSwoYiksKGMpKQorCitzdGF0aWMgaW5saW5lIHZvaWQgKm51YnVzX3JlbWFwX25vY2FjaGVfc2VyKHVuc2lnbmVkIGxvbmcgcGh5c2FkZHIsCisJCQkJCSAgICB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJcmV0dXJuIF9faW9yZW1hcChwaHlzYWRkciwgc2l6ZSwgSU9NQVBfTk9DQUNIRV9TRVIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKm51YnVzX3JlbWFwX25vY2FjaGVfbm9uc2VyKHVuc2lnbmVkIGxvbmcgcGh5c2FkZHIsCisJCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJcmV0dXJuIF9faW9yZW1hcChwaHlzYWRkciwgc2l6ZSwgSU9NQVBfTk9DQUNIRV9OT05TRVIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKm5idXNfcmVtYXBfd3JpdGV0aHJvdWdoKHVuc2lnbmVkIGxvbmcgcGh5c2FkZHIsCisJCQkJCSAgICB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJcmV0dXJuIF9faW9yZW1hcChwaHlzYWRkciwgc2l6ZSwgSU9NQVBfV1JJVEVUSFJPVUdIKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkICpudWJ1c19yZW1hcF9mdWxsY2FjaGUodW5zaWduZWQgbG9uZyBwaHlzYWRkciwKKwkJCQkJICB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJcmV0dXJuIF9faW9yZW1hcChwaHlzYWRkciwgc2l6ZSwgSU9NQVBfRlVMTF9DQUNISU5HKTsKK30KKworI2RlZmluZSBudWJ1c191bm1hcCBpb3VubWFwCisjZGVmaW5lIG51YnVzX2lvdW5tYXAgaW91bm1hcAorI2RlZmluZSBudWJ1c19pb3JlbWFwIG51YnVzX3JlbWFwX25vY2FjaGVfc2VyCisKKyNlbmRpZiAvKiBfQVNNX05VQlVTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvb3BlbnByb20uaCBiL2luY2x1ZGUvYXNtLW02OGsvb3BlbnByb20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmJmYjBiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9vcGVucHJvbS5oCkBAIC0wLDAgKzEsMzE0IEBACisvKiAkSWQ6IG9wZW5wcm9tLmgsdiAxLjE5IDE5OTYvMDkvMjUgMDM6NTE6MDggZGF2ZW0gRXhwICQgKi8KKyNpZm5kZWYgX19TUEFSQ19PUEVOUFJPTV9ICisjZGVmaW5lIF9fU1BBUkNfT1BFTlBST01fSAorCisvKiBvcGVucHJvbS5oOiAgUHJvbSBzdHJ1Y3R1cmVzIGFuZCBkZWZpbmVzIGZvciBhY2Nlc3MgdG8gdGhlIE9QRU5CT09UCisgKiAgICAgICAgICAgICAgcHJvbSByb3V0aW5lcyBhbmQgZGF0YSBhcmVhcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworLyogRW1waXJpY2FsIGNvbnN0YW50cy4uLiAqLworI2lmZGVmIENPTkZJR19TVU4zCisjZGVmaW5lIEtBREJfREVCVUdHRVJfQkVHVk0gICAgIDB4MGZlZTAwMDAgICAgLyogVGhlcmUgaXMgbm8ga2FkYiB5ZXQgYnV0Li4uKi8KKyNkZWZpbmUgTElOVVhfT1BQUk9NX0JFR1ZNICAgICAgMHgwZmVmMDAwMAorI2RlZmluZSBMSU5VWF9PUFBST01fRU5EVk0gICAgICAweDBmZjEwMDAwICAgIC8qIEkgdGhpbmsgdGhpcyBpcyByaWdodCAtIHRtICovCisjZWxzZQorI2RlZmluZSBLQURCX0RFQlVHR0VSX0JFR1ZNICAgICAweGZmYzAwMDAwICAgIC8qIFdoZXJlIGtlcm4gZGVidWdnZXIgaXMgaW4gdmlydC1tZW0gKi8KKyNkZWZpbmUJTElOVVhfT1BQUk9NX0JFR1ZNCTB4ZmZkMDAwMDAKKyNkZWZpbmUJTElOVVhfT1BQUk9NX0VORFZNCTB4ZmZmMDAwMDAKKyNkZWZpbmUJTElOVVhfT1BQUk9NX01BR0lDICAgICAgMHgxMDAxMDQwNworI2VuZGlmCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisvKiBWMCBwcm9tIGRldmljZSBvcGVyYXRpb25zLiAqLworc3RydWN0IGxpbnV4X2Rldl92MF9mdW5jcyB7CisJaW50ICgqdjBfZGV2b3BlbikoY2hhciAqZGV2aWNlX3N0cik7CisJaW50ICgqdjBfZGV2Y2xvc2UpKGludCBkZXZfZGVzYyk7CisJaW50ICgqdjBfcmRibGtkZXYpKGludCBkZXZfZGVzYywgaW50IG51bV9ibGtzLCBpbnQgYmxrX3N0LCBjaGFyICpidWYpOworCWludCAoKnYwX3dyYmxrZGV2KShpbnQgZGV2X2Rlc2MsIGludCBudW1fYmxrcywgaW50IGJsa19zdCwgY2hhciAqYnVmKTsKKwlpbnQgKCp2MF93cm5ldGRldikoaW50IGRldl9kZXNjLCBpbnQgbnVtX2J5dGVzLCBjaGFyICpidWYpOworCWludCAoKnYwX3JkbmV0ZGV2KShpbnQgZGV2X2Rlc2MsIGludCBudW1fYnl0ZXMsIGNoYXIgKmJ1Zik7CisJaW50ICgqdjBfcmRjaGFyZGV2KShpbnQgZGV2X2Rlc2MsIGludCBudW1fYnl0ZXMsIGludCBkdW1teSwgY2hhciAqYnVmKTsKKwlpbnQgKCp2MF93cmNoYXJkZXYpKGludCBkZXZfZGVzYywgaW50IG51bV9ieXRlcywgaW50IGR1bW15LCBjaGFyICpidWYpOworCWludCAoKnYwX3NlZWtkZXYpKGludCBkZXZfZGVzYywgbG9uZyBsb2dpY2FsX29mZnN0LCBpbnQgZnJvbSk7Cit9OworCisvKiBWMiBhbmQgbGF0ZXIgcHJvbSBkZXZpY2Ugb3BlcmF0aW9ucy4gKi8KK3N0cnVjdCBsaW51eF9kZXZfdjJfZnVuY3MgeworCWludCAoKnYyX2luc3QycGtnKShpbnQgZCk7CS8qIENvbnZlcnQgaWhhbmRsZSB0byBwaGFuZGxlICovCisJY2hhciAqICgqdjJfZHVtYl9tZW1fYWxsb2MpKGNoYXIgKnZhLCB1bnNpZ25lZCBzeik7CisJdm9pZCAoKnYyX2R1bWJfbWVtX2ZyZWUpKGNoYXIgKnZhLCB1bnNpZ25lZCBzeik7CisKKwkvKiBUbyBtYXAgZGV2aWNlcyBpbnRvIHZpcnR1YWwgSS9PIHNwYWNlLiAqLworCWNoYXIgKiAoKnYyX2R1bWJfbW1hcCkoY2hhciAqdmlydGEsIGludCB3aGljaF9pbywgdW5zaWduZWQgcGFkZHIsIHVuc2lnbmVkIHN6KTsKKwl2b2lkICgqdjJfZHVtYl9tdW5tYXApKGNoYXIgKnZpcnRhLCB1bnNpZ25lZCBzaXplKTsKKworCWludCAoKnYyX2Rldl9vcGVuKShjaGFyICpkZXZwYXRoKTsKKwl2b2lkICgqdjJfZGV2X2Nsb3NlKShpbnQgZCk7CisJaW50ICgqdjJfZGV2X3JlYWQpKGludCBkLCBjaGFyICpidWYsIGludCBuYnl0ZXMpOworCWludCAoKnYyX2Rldl93cml0ZSkoaW50IGQsIGNoYXIgKmJ1ZiwgaW50IG5ieXRlcyk7CisJaW50ICgqdjJfZGV2X3NlZWspKGludCBkLCBpbnQgaGksIGludCBsbyk7CisKKwkvKiBOZXZlciBpc3N1ZWQgKG11bHRpc3RhZ2UgbG9hZCBzdXBwb3J0KSAqLworCXZvaWQgKCp2Ml93aGVlZTIpKHZvaWQpOworCXZvaWQgKCp2Ml93aGVlZTMpKHZvaWQpOworfTsKKworc3RydWN0IGxpbnV4X21saXN0X3YwIHsKKwlzdHJ1Y3QgbGludXhfbWxpc3RfdjAgKnRoZXJlc19tb3JlOworCWNoYXIgKnN0YXJ0X2FkcjsKKwl1bnNpZ25lZCBudW1fYnl0ZXM7Cit9OworCitzdHJ1Y3QgbGludXhfbWVtX3YwIHsKKwlzdHJ1Y3QgbGludXhfbWxpc3RfdjAgKip2MF90b3RwaHlzOworCXN0cnVjdCBsaW51eF9tbGlzdF92MCAqKnYwX3Byb21tYXA7CisJc3RydWN0IGxpbnV4X21saXN0X3YwICoqdjBfYXZhaWxhYmxlOyAvKiBXaGF0IHdlIGNhbiB1c2UgKi8KK307CisKKy8qIEFyZ3VtZW50cyBzZW50IHRvIHRoZSBrZXJuZWwgZnJvbSB0aGUgYm9vdCBwcm9tcHQuICovCitzdHJ1Y3QgbGludXhfYXJndW1lbnRzX3YwIHsKKwljaGFyICphcmd2WzhdOworCWNoYXIgYXJnc1sxMDBdOworCWNoYXIgYm9vdF9kZXZbMl07CisJaW50IGJvb3RfZGV2X2N0cmw7CisJaW50IGJvb3RfZGV2X3VuaXQ7CisJaW50IGRldl9wYXJ0aXRpb247CisJY2hhciAqa2VybmVsX2ZpbGVfbmFtZTsKKwl2b2lkICphaWVlZTE7ICAgICAgICAgICAvKiBYWFggKi8KK307CisKKy8qIFYyIGFuZCB1cCBib290IHRoaW5ncy4gKi8KK3N0cnVjdCBsaW51eF9ib290YXJnc192MiB7CisJY2hhciAqKmJvb3RwYXRoOworCWNoYXIgKipib290YXJnczsKKwlpbnQgKmZkX3N0ZGluOworCWludCAqZmRfc3Rkb3V0OworfTsKKworI2lmIGRlZmluZWQoQ09ORklHX1NVTjMpIHx8IGRlZmluZWQoQ09ORklHX1NVTjNYKQorc3RydWN0IGxpbnV4X3JvbXZlYyB7CisJY2hhcgkJKnB2X2luaXRzcDsKKwlpbnQJCSgqcHZfc3RhcnRtb24pKHZvaWQpOworCisJaW50CQkqZGlhZ2JlcnI7CisKKwlzdHJ1Y3QgbGludXhfYXJndW1lbnRzX3YwICoqcHZfdjBib290YXJnczsKKwl1bnNpZ25lZAkqcHZfc3VuM21lbTsKKworCXVuc2lnbmVkIGNoYXIJKCpwdl9nZXRjaGFyKSh2b2lkKTsKKwlpbnQJCSgqcHZfcHV0Y2hhcikoaW50IGNoKTsKKwlpbnQJCSgqcHZfbmJnZXRjaGFyKSh2b2lkKTsKKwlpbnQJCSgqcHZfbmJwdXRjaGFyKShpbnQgY2gpOworCXVuc2lnbmVkIGNoYXIJKnB2X2VjaG87CisJdW5zaWduZWQgY2hhcgkqcHZfaW5zb3VyY2U7CisJdW5zaWduZWQgY2hhcgkqcHZfb3V0c2luazsKKworCWludAkJKCpwdl9nZXRrZXkpKHZvaWQpOworCWludAkJKCpwdl9pbml0Z2V0a2V5KSh2b2lkKTsKKwl1bnNpZ25lZCBpbnQJKnB2X3RyYW5zbGF0aW9uOworCXVuc2lnbmVkIGNoYXIJKnB2X2tleWJpZDsKKwlpbnQJCSpwdl9zY3JlZW5feDsKKwlpbnQJCSpwdl9zY3JlZW5feTsKKwlzdHJ1Y3Qga2V5YnVmCSpwdl9rZXlidWY7CisKKwljaGFyCQkqcHZfbW9uaWQ7CisKKwkvKgorCSAqIEZyYW1lIGJ1ZmZlciBvdXRwdXQgYW5kIHRlcm1pbmFsIGVtdWxhdGlvbgorCSAqLworCisJaW50CQkoKnB2X2Zid3JpdGVjaGFyKShjaGFyKTsKKwlpbnQJCSpwdl9mYmFkZHI7CisJY2hhcgkJKipwdl9mb250OworCWludAkJKCpwdl9mYndyaXRlc3RyKShjaGFyKTsKKworCXZvaWQJCSgqcHZfcmVib290KShjaGFyICpib290c3RyKTsKKworCS8qCisJICogTGluZSBpbnB1dCBhbmQgcGFyc2luZworCSAqLworCisJdW5zaWduZWQgY2hhcgkqcHZfbGluZWJ1ZjsKKwl1bnNpZ25lZCBjaGFyCSoqcHZfbGluZXB0cjsKKwlpbnQJCSpwdl9saW5lc2l6ZTsKKwlpbnQJCSgqcHZfZ2V0bGluZSkodm9pZCk7CisJdW5zaWduZWQgY2hhcgkoKnB2X2dldG5leHRjaGFyKSh2b2lkKTsKKwl1bnNpZ25lZCBjaGFyCSgqcHZfcGVla25leHRjaGFyKSh2b2lkKTsKKwlpbnQJCSpwdl9mYnRoZXJlOworCWludAkJKCpwdl9nZXRudW0pKHZvaWQpOworCisJdm9pZAkJKCpwdl9wcmludGYpKGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKKwlpbnQJCSgqcHZfcHJpbnRoZXgpKHZvaWQpOworCisJdW5zaWduZWQgY2hhcgkqcHZfbGVkczsKKwlpbnQJCSgqcHZfc2V0bGVkcykodm9pZCk7CisKKwkvKgorCSAqIE5vbi1tYXNrYWJsZSBpbnRlcnJ1cHQgIChubWkpIGluZm9ybWF0aW9uCisJICovCisKKwlpbnQJCSgqcHZfbm1pYWRkcikodm9pZCk7CisJaW50CQkoKnB2X2Fib3J0ZW50cnkpKHZvaWQpOworCWludAkJKnB2X25taWNsb2NrOworCisJaW50CQkqcHZfZmJ0eXBlOworCisJLyoKKwkgKiBBc3NvcnRlZCBvdGhlciB0aGluZ3MKKwkgKi8KKworCXVuc2lnbmVkCXB2X3JvbXZlcnM7CisJc3RydWN0IGdsb2JyYW0gICpwdl9nbG9icmFtOworCWNoYXIJCSpwdl9rYmR6c2NjOworCisJaW50CQkqcHZfa2V5cmluaXQ7CisJdW5zaWduZWQgY2hhcgkqcHZfa2V5cnRpY2s7CisJdW5zaWduZWQJKnB2X21lbW9yeWF2YWlsOworCWxvbmcJCSpwdl9yZXNldGFkZHI7CisJbG9uZwkJKnB2X3Jlc2V0bWFwOworCisJdm9pZAkJKCpwdl9oYWx0KSh2b2lkKTsKKwl1bnNpZ25lZCBjaGFyCSpwdl9tZW1vcnliaXRtYXA7CisKKyNpZmRlZiBDT05GSUdfU1VOMworCXZvaWQJCSgqcHZfc2V0Y3R4dCkoaW50IGN0eHQsIGNoYXIgKnZhLCBpbnQgcG1lZyk7CisJdm9pZAkJKCpwdl92ZWN0b3JfY21kKSh2b2lkKTsKKwlpbnQJCWR1bW15MXo7CisJaW50CQlkdW1teTJ6OworCWludAkJZHVtbXkzejsKKwlpbnQJCWR1bW15NHo7CisjZW5kaWYKK307CisjZWxzZQorLyogVGhlIHRvcCBsZXZlbCBQUk9NIHZlY3Rvci4gKi8KK3N0cnVjdCBsaW51eF9yb212ZWMgeworCS8qIFZlcnNpb24gbnVtYmVycy4gKi8KKwl1bnNpZ25lZCBpbnQgcHZfbWFnaWNfY29va2llOworCXVuc2lnbmVkIGludCBwdl9yb212ZXJzOworCXVuc2lnbmVkIGludCBwdl9wbHVnaW5fcmV2aXNpb247CisJdW5zaWduZWQgaW50IHB2X3ByaW50cmV2OworCisJLyogVmVyc2lvbiAwIG1lbW9yeSBkZXNjcmlwdG9ycy4gKi8KKwlzdHJ1Y3QgbGludXhfbWVtX3YwIHB2X3YwbWVtOworCisJLyogTm9kZSBvcGVyYXRpb25zLiAqLworCXN0cnVjdCBsaW51eF9ub2Rlb3BzICpwdl9ub2Rlb3BzOworCisJY2hhciAqKnB2X2Jvb3RzdHI7CisJc3RydWN0IGxpbnV4X2Rldl92MF9mdW5jcyBwdl92MGRldm9wczsKKworCWNoYXIgKnB2X3N0ZGluOworCWNoYXIgKnB2X3N0ZG91dDsKKyNkZWZpbmUJUFJPTURFVl9LQkQJMAkJLyogaW5wdXQgZnJvbSBrZXlib2FyZCAqLworI2RlZmluZQlQUk9NREVWX1NDUkVFTgkwCQkvKiBvdXRwdXQgdG8gc2NyZWVuICovCisjZGVmaW5lCVBST01ERVZfVFRZQQkxCQkvKiBpbi9vdXQgdG8gdHR5YSAqLworI2RlZmluZQlQUk9NREVWX1RUWUIJMgkJLyogaW4vb3V0IHRvIHR0eWIgKi8KKworCS8qIEJsb2NraW5nIGdldGNoYXIvcHV0Y2hhci4gIE5PVCBSRUVOVFJBTlQhIChncnIpICovCisJaW50ICgqcHZfZ2V0Y2hhcikodm9pZCk7CisJdm9pZCAoKnB2X3B1dGNoYXIpKGludCBjaCk7CisKKwkvKiBOb24tYmxvY2tpbmcgdmFyaWFudHMuICovCisJaW50ICgqcHZfbmJnZXRjaGFyKSh2b2lkKTsKKwlpbnQgKCpwdl9uYnB1dGNoYXIpKGludCBjaCk7CisKKwl2b2lkICgqcHZfcHV0c3RyKShjaGFyICpzdHIsIGludCBsZW4pOworCisJLyogTWlzY2VsbGFueS4gKi8KKwl2b2lkICgqcHZfcmVib290KShjaGFyICpib290c3RyKTsKKwl2b2lkICgqcHZfcHJpbnRmKShfX2NvbnN0X18gY2hhciAqZm10LCAuLi4pOworCXZvaWQgKCpwdl9hYm9ydCkodm9pZCk7CisJX192b2xhdGlsZV9fIGludCAqcHZfdGlja3M7CisJdm9pZCAoKnB2X2hhbHQpKHZvaWQpOworCXZvaWQgKCoqcHZfc3luY2hvb2spKHZvaWQpOworCisJLyogRXZhbHVhdGUgYSBmb3J0aCBzdHJpbmcsIG5vdCBkaWZmZXJlbnQgcHJvdG8gZm9yIFYwIGFuZCBWMi0+dXAuICovCisJdW5pb24geworCQl2b2lkICgqdjBfZXZhbCkoaW50IGxlbiwgY2hhciAqc3RyKTsKKwkJdm9pZCAoKnYyX2V2YWwpKGNoYXIgKnN0cik7CisJfSBwdl9mb3J0aGV2YWw7CisKKwlzdHJ1Y3QgbGludXhfYXJndW1lbnRzX3YwICoqcHZfdjBib290YXJnczsKKworCS8qIEdldCBldGhlciBhZGRyZXNzLiAqLworCXVuc2lnbmVkIGludCAoKnB2X2VuYWRkcikoaW50IGQsIGNoYXIgKmVuYWRkcik7CisKKwlzdHJ1Y3QgbGludXhfYm9vdGFyZ3NfdjIgcHZfdjJib290YXJnczsKKwlzdHJ1Y3QgbGludXhfZGV2X3YyX2Z1bmNzIHB2X3YyZGV2b3BzOworCisJaW50IGZpbGxlclsxNV07CisKKwkvKiBUaGlzIG9uZSBpcyBzdW40Yy9zdW40IG9ubHkuICovCisJdm9pZCAoKnB2X3NldGN0eHQpKGludCBjdHh0LCBjaGFyICp2YSwgaW50IHBtZWcpOworCisJLyogUHJvbSB2ZXJzaW9uIDMgTXVsdGlwcm9jZXNzb3Igcm91dGluZXMuIFRoaXMgc3R1ZmYgaXMgY3JhenkuCisJICogTm8gam9rZS4gQ2FsbGluZyB0aGVzZSB3aGVuIHRoZXJlIGlzIG9ubHkgb25lIGNwdSBwcm9iYWJseQorCSAqIGNyYXNoZXMgdGhlIG1hY2hpbmUsIGhhdmUgdG8gdGVzdCB0aGlzLiA6LSkKKwkgKi8KKworCS8qIHYzX2NwdXN0YXJ0KCkgd2lsbCBzdGFydCB0aGUgY3B1ICd3aGljaGNwdScgaW4gbW11LWNvbnRleHQKKwkgKiAndGhpc2NvbnRleHQnIGV4ZWN1dGluZyBhdCBhZGRyZXNzICdwcm9nX2NvdW50ZXInCisJICovCisJaW50ICgqdjNfY3B1c3RhcnQpKHVuc2lnbmVkIGludCB3aGljaGNwdSwgaW50IGN0eHRibF9wdHIsCisJCQkgICBpbnQgdGhpc2NvbnRleHQsIGNoYXIgKnByb2dfY291bnRlcik7CisKKwkvKiB2M19jcHVzdG9wKCkgd2lsbCBjYXVzZSBjcHUgJ3doaWNoY3B1JyB0byBzdG9wIGV4ZWN1dGluZworCSAqIHVudGlsIGEgcmVzdW1lIGNwdSBjYWxsIGlzIG1hZGUuCisJICovCisJaW50ICgqdjNfY3B1c3RvcCkodW5zaWduZWQgaW50IHdoaWNoY3B1KTsKKworCS8qIHYzX2NwdWlkbGUoKSB3aWxsIGlkbGUgY3B1ICd3aGljaGNwdScgdW50aWwgYSBzdG9wIG9yCisJICogcmVzdW1lIGNwdSBjYWxsIGlzIG1hZGUuCisJICovCisJaW50ICgqdjNfY3B1aWRsZSkodW5zaWduZWQgaW50IHdoaWNoY3B1KTsKKworCS8qIHYzX2NwdXJlc3VtZSgpIHdpbGwgcmVzdW1lIHByb2Nlc3NvciAnd2hpY2hjcHUnIGV4ZWN1dGluZworCSAqIHN0YXJ0aW5nIHdpdGggd2hhdGV2ZXIgJ3BjJyBhbmQgJ25wYycgd2VyZSBsZWZ0IGF0IHRoZQorCSAqIGxhc3QgJ2lkbGUnIG9yICdzdG9wJyBjYWxsLgorCSAqLworCWludCAoKnYzX2NwdXJlc3VtZSkodW5zaWduZWQgaW50IHdoaWNoY3B1KTsKK307CisjZW5kaWYKKworLyogUm91dGluZXMgZm9yIHRyYXZlcnNpbmcgdGhlIHByb20gZGV2aWNlIHRyZWUuICovCitzdHJ1Y3QgbGludXhfbm9kZW9wcyB7CisJaW50ICgqbm9fbmV4dG5vZGUpKGludCBub2RlKTsKKwlpbnQgKCpub19jaGlsZCkoaW50IG5vZGUpOworCWludCAoKm5vX3Byb3BsZW4pKGludCBub2RlLCBjaGFyICpuYW1lKTsKKwlpbnQgKCpub19nZXRwcm9wKShpbnQgbm9kZSwgY2hhciAqbmFtZSwgY2hhciAqdmFsKTsKKwlpbnQgKCpub19zZXRwcm9wKShpbnQgbm9kZSwgY2hhciAqbmFtZSwgY2hhciAqdmFsLCBpbnQgbGVuKTsKKwljaGFyICogKCpub19uZXh0cHJvcCkoaW50IG5vZGUsIGNoYXIgKm5hbWUpOworfTsKKworLyogTW9yZSBmdW4gUFJPTSBzdHJ1Y3R1cmVzIGZvciBkZXZpY2UgcHJvYmluZy4gKi8KKyNkZWZpbmUgUFJPTVJFR19NQVggICAgIDE2CisjZGVmaW5lIFBST01WQUREUl9NQVggICAxNgorI2RlZmluZSBQUk9NSU5UUl9NQVggICAgMTUKKworc3RydWN0IGxpbnV4X3Byb21fcmVnaXN0ZXJzIHsKKwlpbnQgd2hpY2hfaW87ICAgICAgICAgLyogaXMgdGhpcyBpbiBPQklPIHNwYWNlPyAqLworCWNoYXIgKnBoeXNfYWRkcjsgICAgICAvKiBUaGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGlzIHJlZ2lzdGVyICovCisJaW50IHJlZ19zaXplOyAgICAgICAgIC8qIEhvdyBtYW55IGJ5dGVzIGRvZXMgdGhpcyByZWdpc3RlciB0YWtlIHVwPyAqLworfTsKKworc3RydWN0IGxpbnV4X3Byb21faXJxcyB7CisJaW50IHByaTsgICAgLyogSVJRIHByaW9yaXR5ICovCisJaW50IHZlY3RvcjsgLyogVGhpcyBpcyBmb29iYXIsIHdoYXQgZG9lcyBpdCBkbz8gKi8KK307CisKKy8qIEVsZW1lbnQgb2YgdGhlICJyYW5nZXMiIHZlY3RvciAqLworc3RydWN0IGxpbnV4X3Byb21fcmFuZ2VzIHsKKwl1bnNpZ25lZCBpbnQgb3RfY2hpbGRfc3BhY2U7CisJdW5zaWduZWQgaW50IG90X2NoaWxkX2Jhc2U7CQkvKiBCdXMgZmVlbHMgdGhpcyAqLworCXVuc2lnbmVkIGludCBvdF9wYXJlbnRfc3BhY2U7CisJdW5zaWduZWQgaW50IG90X3BhcmVudF9iYXNlOwkJLyogQ1BVIGxvb2tzIGZyb20gaGVyZSAqLworCXVuc2lnbmVkIGludCBvcl9zaXplOworfTsKKworI2VuZGlmIC8qICEoX19BU1NFTUJMWV9fKSAqLworCisjZW5kaWYgLyogIShfX1NQQVJDX09QRU5QUk9NX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL29wbGliLmggYi9pbmNsdWRlL2FzbS1tNjhrL29wbGliLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM1OTRmNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvb3BsaWIuaApAQCAtMCwwICsxLDI5NyBAQAorLyogJElkOiBvcGxpYi5oLHYgMS4xMiAxOTk2LzEwLzMxIDA2OjI5OjEzIGRhdmVtIEV4cCAkCisgKiBvcGxpYi5oOiAgRGVzY3JpYmVzIHRoZSBpbnRlcmZhY2UgYW5kIGF2YWlsYWJsZSByb3V0aW5lcyBpbiB0aGUKKyAqICAgICAgICAgICBMaW51eCBQcm9tIGxpYnJhcnkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKKyAqLworCisjaWZuZGVmIF9fU1BBUkNfT1BMSUJfSAorI2RlZmluZSBfX1NQQVJDX09QTElCX0gKKworI2luY2x1ZGUgPGFzbS9vcGVucHJvbS5oPgorCisvKiBUaGUgbWFzdGVyIHJvbXZlYyBwb2ludGVyLi4uICovCitleHRlcm4gc3RydWN0IGxpbnV4X3JvbXZlYyAqcm9tdmVjOworCisvKiBFbnVtZXJhdGlvbiB0byBkZXNjcmliZSB0aGUgcHJvbSBtYWpvciB2ZXJzaW9uIHdlIGhhdmUgZGV0ZWN0ZWQuICovCitlbnVtIHByb21fbWFqb3JfdmVyc2lvbiB7CisJUFJPTV9WMCwgICAgICAvKiBPcmlnaW5hbCBzdW40YyBWMCBwcm9tICovCisJUFJPTV9WMiwgICAgICAvKiBzdW40YyBhbmQgZWFybHkgc3VuNG0gVjIgcHJvbSAqLworCVBST01fVjMsICAgICAgLyogc3VuNG0gYW5kIGxhdGVyLCB1cCB0byBzdW40ZC9zdW40ZSBtYWNoaW5lcyBWMyAqLworCVBST01fUDEyNzUsICAgLyogSUVFRSBjb21wbGlhbnQgSVNBIGJhc2VkIFN1biBQUk9NLCBvbmx5IHN1bjR1ICovCisgICAgICAgIFBST01fQVAxMDAwLCAgLyogYWN0dWFsbHkgbm8gcHJvbSBhdCBhbGwgKi8KK307CisKK2V4dGVybiBlbnVtIHByb21fbWFqb3JfdmVyc2lvbiBwcm9tX3ZlcnM7CisvKiBSZXZpc2lvbiwgYW5kIGZpcm13YXJlIHJldmlzaW9uLiAqLworZXh0ZXJuIHVuc2lnbmVkIGludCBwcm9tX3JldiwgcHJvbV9wcmV2OworCisvKiBSb290IG5vZGUgb2YgdGhlIHByb20gZGV2aWNlIHRyZWUsIHRoaXMgc3RheXMgY29uc3RhbnQgYWZ0ZXIKKyAqIGluaXRpYWxpemF0aW9uIGlzIGNvbXBsZXRlLgorICovCitleHRlcm4gaW50IHByb21fcm9vdF9ub2RlOworCisvKiBQb2ludGVyIHRvIHByb20gc3RydWN0dXJlIGNvbnRhaW5pbmcgdGhlIGRldmljZSB0cmVlIHRyYXZlcnNhbAorICogYW5kIHVzYWdlIHV0aWxpdHkgZnVuY3Rpb25zLiAgT25seSBwcm9tLWxpYiBzaG91bGQgdXNlIHRoZXNlLAorICogdXNlcnMgdXNlIHRoZSBpbnRlcmZhY2UgZGVmaW5lZCBieSB0aGUgbGlicmFyeSBvbmx5IQorICovCitleHRlcm4gc3RydWN0IGxpbnV4X25vZGVvcHMgKnByb21fbm9kZW9wczsKKworLyogVGhlIGZ1bmN0aW9ucy4uLiAqLworCisvKiBZb3UgbXVzdCBjYWxsIHByb21faW5pdCgpIGJlZm9yZSB1c2luZyBhbnkgb2YgdGhlIGxpYnJhcnkgc2VydmljZXMsCisgKiBwcmVmZXJhYmx5IGFzIGVhcmx5IGFzIHBvc3NpYmxlLiAgUGFzcyBpdCB0aGUgcm9tdmVjIHBvaW50ZXIuCisgKi8KK2V4dGVybiB2b2lkIHByb21faW5pdChzdHJ1Y3QgbGludXhfcm9tdmVjICpyb21fcHRyKTsKKworLyogQm9vdCBhcmd1bWVudCBhY3F1aXNpdGlvbiwgcmV0dXJucyB0aGUgYm9vdCBjb21tYW5kIGxpbmUgc3RyaW5nLiAqLworZXh0ZXJuIGNoYXIgKnByb21fZ2V0Ym9vdGFyZ3Modm9pZCk7CisKKy8qIERldmljZSB1dGlsaXRpZXMuICovCisKKy8qIE1hcCBhbmQgdW5tYXAgZGV2aWNlcyBpbiBJTyBzcGFjZSBhdCB2aXJ0dWFsIGFkZHJlc3Nlcy4gTm90ZSB0aGF0IHRoZQorICogdmlydHVhbCBhZGRyZXNzIHlvdSBwYXNzIGlzIGEgcmVxdWVzdCBhbmQgdGhlIHByb20gbWF5IHB1dCB5b3VyIG1hcHBpbmdzCisgKiBzb21ld2hlcmUgZWxzZSwgc28gY2hlY2sgeW91ciByZXR1cm4gdmFsdWUgYXMgdGhhdCBpcyB3aGVyZSB5b3VyIG5ldworICogbWFwcGluZ3MgcmVhbGx5IGFyZSEKKyAqCisgKiBBbm90aGVyIG5vdGUsIHRoZXNlIGFyZSBvbmx5IGF2YWlsYWJsZSBvbiBWMiBvciBoaWdoZXIgcHJvbXMhCisgKi8KK2V4dGVybiBjaGFyICpwcm9tX21hcGlvKGNoYXIgKnZpcnRfaGludCwgaW50IGlvX3NwYWNlLCB1bnNpZ25lZCBpbnQgcGh5c19hZGRyLCB1bnNpZ25lZCBpbnQgbnVtX2J5dGVzKTsKK2V4dGVybiB2b2lkIHByb21fdW5tYXBpbyhjaGFyICp2aXJ0X2FkZHIsIHVuc2lnbmVkIGludCBudW1fYnl0ZXMpOworCisvKiBEZXZpY2Ugb3BlcmF0aW9ucy4gKi8KKworLyogT3BlbiB0aGUgZGV2aWNlIGRlc2NyaWJlZCBieSB0aGUgcGFzc2VkIHN0cmluZy4gIE5vdGUsIHRoYXQgdGhlIGZvcm1hdAorICogb2YgdGhlIHN0cmluZyBpcyBkaWZmZXJlbnQgb24gVjAgdnMuIFYyLT5oaWdoZXIgcHJvbXMuICBUaGUgY2FsbGVyIG11c3QKKyAqIGtub3cgd2hhdCBoZS9zaGUgaXMgZG9pbmchICBSZXR1cm5zIHRoZSBkZXZpY2UgZGVzY3JpcHRvciwgYW4gaW50LgorICovCitleHRlcm4gaW50IHByb21fZGV2b3BlbihjaGFyICpkZXZpY2Vfc3RyaW5nKTsKKworLyogQ2xvc2UgYSBwcmV2aW91c2x5IG9wZW5lZCBkZXZpY2UgZGVzY3JpYmVkIGJ5IHRoZSBwYXNzZWQgaW50ZWdlcgorICogZGVzY3JpcHRvci4KKyAqLworZXh0ZXJuIGludCBwcm9tX2RldmNsb3NlKGludCBkZXZpY2VfaGFuZGxlKTsKKworLyogRG8gYSBzZWVrIG9wZXJhdGlvbiBvbiB0aGUgZGV2aWNlIGRlc2NyaWJlZCBieSB0aGUgcGFzc2VkIGludGVnZXIKKyAqIGRlc2NyaXB0b3IuCisgKi8KK2V4dGVybiB2b2lkIHByb21fc2VlayhpbnQgZGV2aWNlX2hhbmRsZSwgdW5zaWduZWQgaW50IHNlZWtfaGl2YWwsCisJCSAgICAgIHVuc2lnbmVkIGludCBzZWVrX2xvd3ZhbCk7CisKKy8qIE1hY2hpbmUgbWVtb3J5IGNvbmZpZ3VyYXRpb24gcm91dGluZS4gKi8KKworLyogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgVjAgZm9ybWF0IG1lbW9yeSBkZXNjcmlwdG9yIHRhYmxlLCBpdCBoYXMgdGhyZWUKKyAqIGVudHJpZXMuICBPbmUgZm9yIHRoZSB0b3RhbCBhbW91bnQgb2YgcGh5c2ljYWwgcmFtIG9uIHRoZSBtYWNoaW5lLCBvbmUKKyAqIGZvciB0aGUgYW1vdW50IG9mIHBoeXNpY2FsIHJhbSBhdmFpbGFibGUsIGFuZCBvbmUgZGVzY3JpYmluZyB0aGUgdmlydHVhbAorICogYXJlYXMgd2hpY2ggYXJlIGFsbG9jYXRlZCBieSB0aGUgcHJvbS4gIFNvLCBpbiBhIHNlbnNlIHRoZSBwaHlzaWNhbAorICogYXZhaWxhYmxlIGlzIGEgY2FsY3VsYXRpb24gb2YgdGhlIHRvdGFsIHBoeXNpY2FsIG1pbnVzIHRoZSBwaHlzaWNhbCBtYXBwZWQKKyAqIGJ5IHRoZSBwcm9tIHdpdGggdmlydHVhbCBtYXBwaW5ncy4KKyAqCisgKiBUaGVzZSBsaXN0cyBhcmUgcmV0dXJuZWQgcHJlLXNvcnRlZCwgdGhpcyBzaG91bGQgbWFrZSB5b3VyIGxpZmUgZWFzaWVyCisgKiBzaW5jZSB0aGUgcHJvbSBpdHNlbGYgaXMgd2F5IHRvbyBsYXp5IHRvIGRvIHN1Y2ggbmljZSB0aGluZ3MuCisgKi8KK2V4dGVybiBzdHJ1Y3QgbGludXhfbWVtX3YwICpwcm9tX21lbWluZm8odm9pZCk7CisKKy8qIE1pc2NlbGxhbmVvdXMgcm91dGluZXMsIGRvbid0IHJlYWxseSBmaXQgaW4gYW55IGNhdGVnb3J5IHBlciBzZS4gKi8KKworLyogUmVib290IHRoZSBtYWNoaW5lIHdpdGggdGhlIGNvbW1hbmQgbGluZSBwYXNzZWQuICovCitleHRlcm4gdm9pZCBwcm9tX3JlYm9vdChjaGFyICpib290X2NvbW1hbmQpOworCisvKiBFdmFsdWF0ZSB0aGUgZm9ydGggc3RyaW5nIHBhc3NlZC4gKi8KK2V4dGVybiB2b2lkIHByb21fZmV2YWwoY2hhciAqZm9ydGhfc3RyaW5nKTsKKworLyogRW50ZXIgdGhlIHByb20sIHdpdGggcG9zc2liaWxpdHkgb2YgY29udGludWF0aW9uIHdpdGggdGhlICdnbycKKyAqIGNvbW1hbmQgaW4gbmV3ZXIgcHJvbXMuCisgKi8KK2V4dGVybiB2b2lkIHByb21fY21kbGluZSh2b2lkKTsKKworLyogRW50ZXIgdGhlIHByb20sIHdpdGggbm8gY2hhbmNlIG9mIGNvbnRpbnVhdGlvbiBmb3IgdGhlIHN0YW5kLWFsb25lCisgKiB3aGljaCBjYWxscyB0aGlzLgorICovCitleHRlcm4gdm9pZCBwcm9tX2hhbHQodm9pZCk7CisKKy8qIFNldCB0aGUgUFJPTSAnc3luYycgY2FsbGJhY2sgZnVuY3Rpb24gdG8gdGhlIHBhc3NlZCBmdW5jdGlvbiBwb2ludGVyLgorICogV2hlbiB0aGUgdXNlciBnaXZlcyB0aGUgJ3N5bmMnIGNvbW1hbmQgYXQgdGhlIHByb20gcHJvbXB0IHdoaWxlIHRoZQorICoga2VybmVsIGlzIHN0aWxsIGFjdGl2ZSwgdGhlIHByb20gd2lsbCBjYWxsIHRoaXMgcm91dGluZS4KKyAqCisgKiBYWFggVGhlIGFyZ3VtZW50cyBhcmUgZGlmZmVyZW50IG9uIFYwIHZzLiBWMi0+aGlnaGVyIHByb21zLCBncnJyISBYWFgKKyAqLwordHlwZWRlZiB2b2lkICgqc3luY19mdW5jX3QpKHZvaWQpOworZXh0ZXJuIHZvaWQgcHJvbV9zZXRzeW5jKHN5bmNfZnVuY190IGZ1bmNfcHRyKTsKKworLyogQWNxdWlyZSB0aGUgSURQUk9NIG9mIHRoZSByb290IG5vZGUgaW4gdGhlIHByb20gZGV2aWNlIHRyZWUuICBUaGlzCisgKiBnZXRzIHBhc3NlZCBhIGJ1ZmZlciB3aGVyZSB5b3Ugd291bGQgbGlrZSBpdCBzdHVmZmVkLiAgVGhlIHJldHVybiB2YWx1ZQorICogaXMgdGhlIGZvcm1hdCB0eXBlIG9mIHRoaXMgaWRwcm9tIG9yIDB4ZmYgb24gZXJyb3IuCisgKi8KK2V4dGVybiB1bnNpZ25lZCBjaGFyIHByb21fZ2V0X2lkcHJvbShjaGFyICppZHBfYnVmZmVyLCBpbnQgaWRwYnVmX3NpemUpOworCisvKiBHZXQgdGhlIHByb20gbWFqb3IgdmVyc2lvbi4gKi8KK2V4dGVybiBpbnQgcHJvbV92ZXJzaW9uKHZvaWQpOworCisvKiBHZXQgdGhlIHByb20gcGx1Z2luIHJldmlzaW9uLiAqLworZXh0ZXJuIGludCBwcm9tX2dldHJldih2b2lkKTsKKworLyogR2V0IHRoZSBwcm9tIGZpcm13YXJlIHJldmlzaW9uLiAqLworZXh0ZXJuIGludCBwcm9tX2dldHByZXYodm9pZCk7CisKKy8qIENoYXJhY3RlciBvcGVyYXRpb25zIHRvL2Zyb20gdGhlIGNvbnNvbGUuLi4uICovCisKKy8qIE5vbi1ibG9ja2luZyBnZXQgY2hhcmFjdGVyIGZyb20gY29uc29sZS4gKi8KK2V4dGVybiBpbnQgcHJvbV9uYmdldGNoYXIodm9pZCk7CisKKy8qIE5vbi1ibG9ja2luZyBwdXQgY2hhcmFjdGVyIHRvIGNvbnNvbGUuICovCitleHRlcm4gaW50IHByb21fbmJwdXRjaGFyKGNoYXIgY2hhcmFjdGVyKTsKKworLyogQmxvY2tpbmcgZ2V0IGNoYXJhY3RlciBmcm9tIGNvbnNvbGUuICovCitleHRlcm4gY2hhciBwcm9tX2dldGNoYXIodm9pZCk7CisKKy8qIEJsb2NraW5nIHB1dCBjaGFyYWN0ZXIgdG8gY29uc29sZS4gKi8KK2V4dGVybiB2b2lkIHByb21fcHV0Y2hhcihjaGFyIGNoYXJhY3Rlcik7CisKKy8qIFByb20ncyBpbnRlcm5hbCBwcmludGYgcm91dGluZSwgZG9uJ3QgdXNlIGluIGtlcm5lbC9ib290IGNvZGUuICovCit2b2lkIHByb21fcHJpbnRmKGNoYXIgKmZtdCwgLi4uKTsKKworLyogUXVlcnkgZm9yIGlucHV0IGRldmljZSB0eXBlICovCisKK2VudW0gcHJvbV9pbnB1dF9kZXZpY2UgeworCVBST01ERVZfSUtCRCwJCQkvKiBpbnB1dCBmcm9tIGtleWJvYXJkICovCisJUFJPTURFVl9JVFRZQSwJCQkvKiBpbnB1dCBmcm9tIHR0eWEgKi8KKwlQUk9NREVWX0lUVFlCLAkJCS8qIGlucHV0IGZyb20gdHR5YiAqLworCVBST01ERVZfSV9VTkssCit9OworCitleHRlcm4gZW51bSBwcm9tX2lucHV0X2RldmljZSBwcm9tX3F1ZXJ5X2lucHV0X2RldmljZSh2b2lkKTsKKworLyogUXVlcnkgZm9yIG91dHB1dCBkZXZpY2UgdHlwZSAqLworCitlbnVtIHByb21fb3V0cHV0X2RldmljZSB7CisJUFJPTURFVl9PU0NSRUVOLAkJLyogdG8gc2NyZWVuICovCisJUFJPTURFVl9PVFRZQSwJCQkvKiB0byB0dHlhICovCisJUFJPTURFVl9PVFRZQiwJCQkvKiB0byB0dHliICovCisJUFJPTURFVl9PX1VOSywKK307CisKK2V4dGVybiBlbnVtIHByb21fb3V0cHV0X2RldmljZSBwcm9tX3F1ZXJ5X291dHB1dF9kZXZpY2Uodm9pZCk7CisKKy8qIE11bHRpcHJvY2Vzc29yIG9wZXJhdGlvbnMuLi4gKi8KKworLyogU3RhcnQgdGhlIENQVSB3aXRoIHRoZSBnaXZlbiBkZXZpY2UgdHJlZSBub2RlLCBjb250ZXh0IHRhYmxlLCBhbmQgY29udGV4dAorICogYXQgdGhlIHBhc3NlZCBwcm9ncmFtIGNvdW50ZXIuCisgKi8KK2V4dGVybiBpbnQgcHJvbV9zdGFydGNwdShpbnQgY3B1bm9kZSwgc3RydWN0IGxpbnV4X3Byb21fcmVnaXN0ZXJzICpjb250ZXh0X3RhYmxlLAorCQkJIGludCBjb250ZXh0LCBjaGFyICpwcm9ncmFtX2NvdW50ZXIpOworCisvKiBTdG9wIHRoZSBDUFUgd2l0aCB0aGUgcGFzc2VkIGRldmljZSB0cmVlIG5vZGUuICovCitleHRlcm4gaW50IHByb21fc3RvcGNwdShpbnQgY3B1bm9kZSk7CisKKy8qIElkbGUgdGhlIENQVSB3aXRoIHRoZSBwYXNzZWQgZGV2aWNlIHRyZWUgbm9kZS4gKi8KK2V4dGVybiBpbnQgcHJvbV9pZGxlY3B1KGludCBjcHVub2RlKTsKKworLyogUmUtU3RhcnQgdGhlIENQVSB3aXRoIHRoZSBwYXNzZWQgZGV2aWNlIHRyZWUgbm9kZS4gKi8KK2V4dGVybiBpbnQgcHJvbV9yZXN0YXJ0Y3B1KGludCBjcHVub2RlKTsKKworLyogUFJPTSBtZW1vcnkgYWxsb2NhdGlvbiBmYWNpbGl0aWVzLi4uICovCisKKy8qIEFsbG9jYXRlZCBhdCBwb3NzaWJseSB0aGUgZ2l2ZW4gdmlydHVhbCBhZGRyZXNzIGEgY2h1bmsgb2YgdGhlCisgKiBpbmRpY2F0ZWQgc2l6ZS4KKyAqLworZXh0ZXJuIGNoYXIgKnByb21fYWxsb2MoY2hhciAqdmlydF9oaW50LCB1bnNpZ25lZCBpbnQgc2l6ZSk7CisKKy8qIEZyZWUgYSBwcmV2aW91c2x5IGFsbG9jYXRlZCBjaHVuay4gKi8KK2V4dGVybiB2b2lkIHByb21fZnJlZShjaGFyICp2aXJ0X2FkZHIsIHVuc2lnbmVkIGludCBzaXplKTsKKworLyogU3VuNC9zdW40YyBzcGVjaWZpYyBtZW1vcnktbWFuYWdlbWVudCBzdGFydHVwIGhvb2suICovCisKKy8qIE1hcCB0aGUgcGFzc2VkIHNlZ21lbnQgaW4gdGhlIGdpdmVuIGNvbnRleHQgYXQgdGhlIHBhc3NlZAorICogdmlydHVhbCBhZGRyZXNzLgorICovCitleHRlcm4gdm9pZCBwcm9tX3B1dHNlZ21lbnQoaW50IGNvbnRleHQsIHVuc2lnbmVkIGxvbmcgdmlydF9hZGRyLAorCQkJICAgIGludCBwaHlzaWNhbF9zZWdtZW50KTsKKworLyogUFJPTSBkZXZpY2UgdHJlZSB0cmF2ZXJzYWwgZnVuY3Rpb25zLi4uICovCisKKy8qIEdldCB0aGUgY2hpbGQgbm9kZSBvZiB0aGUgZ2l2ZW4gbm9kZSwgb3IgemVybyBpZiBubyBjaGlsZCBleGlzdHMuICovCitleHRlcm4gaW50IHByb21fZ2V0Y2hpbGQoaW50IHBhcmVudF9ub2RlKTsKKworLyogR2V0IHRoZSBuZXh0IHNpYmxpbmcgbm9kZSBvZiB0aGUgZ2l2ZW4gbm9kZSwgb3IgemVybyBpZiBubyBmdXJ0aGVyCisgKiBzaWJsaW5ncyBleGlzdC4KKyAqLworZXh0ZXJuIGludCBwcm9tX2dldHNpYmxpbmcoaW50IG5vZGUpOworCisvKiBHZXQgdGhlIGxlbmd0aCwgYXQgdGhlIHBhc3NlZCBub2RlLCBvZiB0aGUgZ2l2ZW4gcHJvcGVydHkgdHlwZS4KKyAqIFJldHVybnMgLTEgb24gZXJyb3IgKGllLiBubyBzdWNoIHByb3BlcnR5IGF0IHRoaXMgbm9kZSkuCisgKi8KK2V4dGVybiBpbnQgcHJvbV9nZXRwcm9wbGVuKGludCB0aGlzbm9kZSwgY2hhciAqcHJvcGVydHkpOworCisvKiBGZXRjaCB0aGUgcmVxdWVzdGVkIHByb3BlcnR5IHVzaW5nIHRoZSBnaXZlbiBidWZmZXIuICBSZXR1cm5zCisgKiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoZSBwcm9tIHB1dCBpbnRvIHlvdXIgYnVmZmVyIG9yIC0xIG9uIGVycm9yLgorICovCitleHRlcm4gaW50IHByb21fZ2V0cHJvcGVydHkoaW50IHRoaXNub2RlLCBjaGFyICpwcm9wZXJ0eSwKKwkJCSAgICBjaGFyICpwcm9wX2J1ZmZlciwgaW50IHByb3BidWZfc2l6ZSk7CisKKy8qIEFjcXVpcmUgYW4gaW50ZWdlciBwcm9wZXJ0eS4gKi8KK2V4dGVybiBpbnQgcHJvbV9nZXRpbnQoaW50IG5vZGUsIGNoYXIgKnByb3BlcnR5KTsKKworLyogQWNxdWlyZSBhbiBpbnRlZ2VyIHByb3BlcnR5LCB3aXRoIGEgZGVmYXVsdCB2YWx1ZS4gKi8KK2V4dGVybiBpbnQgcHJvbV9nZXRpbnRkZWZhdWx0KGludCBub2RlLCBjaGFyICpwcm9wZXJ0eSwgaW50IGRlZnZhbCk7CisKKy8qIEFjcXVpcmUgYSBib29sZWFuIHByb3BlcnR5LCAwPUZBTFNFIDE9VFJVRS4gKi8KK2V4dGVybiBpbnQgcHJvbV9nZXRib29sKGludCBub2RlLCBjaGFyICpwcm9wKTsKKworLyogQWNxdWlyZSBhIHN0cmluZyBwcm9wZXJ0eSwgbnVsbCBzdHJpbmcgb24gZXJyb3IuICovCitleHRlcm4gdm9pZCBwcm9tX2dldHN0cmluZyhpbnQgbm9kZSwgY2hhciAqcHJvcCwgY2hhciAqYnVmLCBpbnQgYnVmc2l6ZSk7CisKKy8qIERvZXMgdGhlIHBhc3NlZCBub2RlIGhhdmUgdGhlIGdpdmVuICJuYW1lIj8gWUVTPTEgTk89MCAqLworZXh0ZXJuIGludCBwcm9tX25vZGVtYXRjaChpbnQgdGhpc25vZGUsIGNoYXIgKm5hbWUpOworCisvKiBQdXRzIGluIGJ1ZmZlciBhIHByb20gbmFtZSBpbiB0aGUgZm9ybSBuYW1lQHgseSBvciBuYW1lICh4IGZvciB3aGljaF9pbworICogYW5kIHkgZm9yIGZpcnN0IHJlZ3MgcGh5cyBhZGRyZXNzCisgKi8KK2V4dGVybiBpbnQgcHJvbV9nZXRuYW1lKGludCBub2RlLCBjaGFyICpidWYsIGludCBidWZsZW4pOworCisvKiBTZWFyY2ggYWxsIHNpYmxpbmdzIHN0YXJ0aW5nIGF0IHRoZSBwYXNzZWQgbm9kZSBmb3IgIm5hbWUiIG1hdGNoaW5nCisgKiB0aGUgZ2l2ZW4gc3RyaW5nLiAgUmV0dXJucyB0aGUgbm9kZSBvbiBzdWNjZXNzLCB6ZXJvIG9uIGZhaWx1cmUuCisgKi8KK2V4dGVybiBpbnQgcHJvbV9zZWFyY2hzaWJsaW5ncyhpbnQgbm9kZV9zdGFydCwgY2hhciAqbmFtZSk7CisKKy8qIFJldHVybiB0aGUgZmlyc3QgcHJvcGVydHkgdHlwZSwgYXMgYSBzdHJpbmcsIGZvciB0aGUgZ2l2ZW4gbm9kZS4KKyAqIFJldHVybnMgYSBudWxsIHN0cmluZyBvbiBlcnJvci4KKyAqLworZXh0ZXJuIGNoYXIgKnByb21fZmlyc3Rwcm9wKGludCBub2RlKTsKKworLyogUmV0dXJucyB0aGUgbmV4dCBwcm9wZXJ0eSBhZnRlciB0aGUgcGFzc2VkIHByb3BlcnR5IGZvciB0aGUgZ2l2ZW4KKyAqIG5vZGUuICBSZXR1cm5zIG51bGwgc3RyaW5nIG9uIGZhaWx1cmUuCisgKi8KK2V4dGVybiBjaGFyICpwcm9tX25leHRwcm9wKGludCBub2RlLCBjaGFyICpwcmV2X3Byb3BlcnR5KTsKKworLyogUmV0dXJucyAxIGlmIHRoZSBzcGVjaWZpZWQgbm9kZSBoYXMgZ2l2ZW4gcHJvcGVydHkuICovCitleHRlcm4gaW50IHByb21fbm9kZV9oYXNfcHJvcGVydHkoaW50IG5vZGUsIGNoYXIgKnByb3BlcnR5KTsKKworLyogU2V0IHRoZSBpbmRpY2F0ZWQgcHJvcGVydHkgYXQgdGhlIGdpdmVuIG5vZGUgd2l0aCB0aGUgcGFzc2VkIHZhbHVlLgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIG9mIHlvdXIgdmFsdWUgdGhhdCB0aGUgcHJvbSB0b29rLgorICovCitleHRlcm4gaW50IHByb21fc2V0cHJvcChpbnQgbm9kZSwgY2hhciAqcHJvcF9uYW1lLCBjaGFyICpwcm9wX3ZhbHVlLAorCQkJaW50IHZhbHVlX3NpemUpOworCitleHRlcm4gaW50IHByb21fcGF0aHRvaW5vZGUoY2hhciAqcGF0aCk7CitleHRlcm4gaW50IHByb21faW5zdDJwa2coaW50KTsKKworLyogRG9ya2luZyB3aXRoIEJ1cyByYW5nZXMuLi4gKi8KKworLyogQWRqdXN0IHJlZyB2YWx1ZXMgd2l0aCB0aGUgcGFzc2VkIHJhbmdlcy4gKi8KK2V4dGVybiB2b2lkIHByb21fYWRqdXN0X3JlZ3Moc3RydWN0IGxpbnV4X3Byb21fcmVnaXN0ZXJzICpyZWdwLCBpbnQgbnJlZ3MsCisJCQkgICAgIHN0cnVjdCBsaW51eF9wcm9tX3JhbmdlcyAqcmFuZ2VwLCBpbnQgbnJhbmdlcyk7CisKKy8qIEFkanVzdCBjaGlsZCByYW5nZXMgd2l0aCB0aGUgcGFzc2VkIHBhcmVudCByYW5nZXMuICovCitleHRlcm4gdm9pZCBwcm9tX2FkanVzdF9yYW5nZXMoc3RydWN0IGxpbnV4X3Byb21fcmFuZ2VzICpjcmFuZ2VzLCBpbnQgbmNyYW5nZXMsCisJCQkgICAgICAgc3RydWN0IGxpbnV4X3Byb21fcmFuZ2VzICpwcmFuZ2VzLCBpbnQgbnByYW5nZXMpOworCisvKiBBcHBseSBwcm9tbGliIHByb2JlZCBPQklPIHJhbmdlcyB0byByZWdpc3RlcnMuICovCitleHRlcm4gdm9pZCBwcm9tX2FwcGx5X29iaW9fcmFuZ2VzKHN0cnVjdCBsaW51eF9wcm9tX3JlZ2lzdGVycyAqb2Jpb3JlZ3MsIGludCBucmVncyk7CisKKy8qIEFwcGx5IHJhbmdlcyBvZiBhbnkgcHJvbSBub2RlIChhbmQgb3B0aW9uYWxseSBwYXJlbnQgbm9kZSBhcyB3ZWxsKSB0byByZWdpc3RlcnMuICovCitleHRlcm4gdm9pZCBwcm9tX2FwcGx5X2dlbmVyaWNfcmFuZ2VzKGludCBub2RlLCBpbnQgcGFyZW50LAorCQkJCSAgICAgIHN0cnVjdCBsaW51eF9wcm9tX3JlZ2lzdGVycyAqc2J1c3JlZ3MsIGludCBucmVncyk7CisKKworI2VuZGlmIC8qICEoX19TUEFSQ19PUExJQl9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9wYWdlLmggYi9pbmNsdWRlL2FzbS1tNjhrL3BhZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWE1MTY3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9wYWdlLmgKQEAgLTAsMCArMSwxOTUgQEAKKyNpZm5kZWYgX002OEtfUEFHRV9ICisjZGVmaW5lIF9NNjhLX1BBR0VfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKy8qIFBBR0VfU0hJRlQgZGV0ZXJtaW5lcyB0aGUgcGFnZSBzaXplICovCisjaWZuZGVmIENPTkZJR19TVU4zCisjZGVmaW5lIFBBR0VfU0hJRlQJKDEyKQorI2Vsc2UKKyNkZWZpbmUgUEFHRV9TSElGVAkoMTMpCisjZW5kaWYKKyNpZmRlZiBfX0FTU0VNQkxZX18KKyNkZWZpbmUgUEFHRV9TSVpFCSgxIDw8IFBBR0VfU0hJRlQpCisjZWxzZQorI2RlZmluZSBQQUdFX1NJWkUJKDFVTCA8PCBQQUdFX1NISUZUKQorI2VuZGlmCisjZGVmaW5lIFBBR0VfTUFTSwkofihQQUdFX1NJWkUtMSkpCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKworI2lmIFBBR0VfU0hJRlQgPCAxMworI2RlZmluZSBUSFJFQURfU0laRSAoODE5MikKKyNlbHNlCisjZGVmaW5lIFRIUkVBRF9TSVpFIFBBR0VfU0laRQorI2VuZGlmCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNkZWZpbmUgZ2V0X3VzZXJfcGFnZSh2YWRkcikJCV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKQorI2RlZmluZSBmcmVlX3VzZXJfcGFnZShwYWdlLCBhZGRyKQlmcmVlX3BhZ2UoYWRkcikKKworLyoKKyAqIFdlIGRvbid0IG5lZWQgdG8gY2hlY2sgZm9yIGFsaWdubWVudCBldGMuCisgKi8KKyNpZmRlZiBDUFVfTTY4MDQwX09SX002ODA2MF9PTkxZCitzdGF0aWMgaW5saW5lIHZvaWQgY29weV9wYWdlKHZvaWQgKnRvLCB2b2lkICpmcm9tKQoreworICB1bnNpZ25lZCBsb25nIHRtcDsKKworICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiMTpcdCIKKwkJICAgICAgICIuY2hpcCA2ODA0MFxuXHQiCisJCSAgICAgICAibW92ZTE2ICUxQCssJTBAK1xuXHQiCisJCSAgICAgICAibW92ZTE2ICUxQCssJTBAK1xuXHQiCisJCSAgICAgICAiLmNoaXAgNjhrXG5cdCIKKwkJICAgICAgICJkYnJhICAlMiwxYlxuXHQiCisJCSAgICAgICA6ICI9YSIgKHRvKSwgIj1hIiAoZnJvbSksICI9ZCIgKHRtcCkKKwkJICAgICAgIDogIjAiICh0byksICIxIiAoZnJvbSkgLCAiMiIgKFBBR0VfU0laRSAvIDMyIC0gMSkKKwkJICAgICAgICk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9wYWdlKHZvaWQgKnBhZ2UpCit7CisJdW5zaWduZWQgbG9uZyB0bXA7CisJdW5zaWduZWQgbG9uZyAqc3AgPSBwYWdlOworCisJKnNwKysgPSAwOworCSpzcCsrID0gMDsKKwkqc3ArKyA9IDA7CisJKnNwKysgPSAwOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oIjE6XHQiCisJCQkgICAgICIuY2hpcCA2ODA0MFxuXHQiCisJCQkgICAgICJtb3ZlMTYgJTJAKywlMEArXG5cdCIKKwkJCSAgICAgIi5jaGlwIDY4a1xuXHQiCisJCQkgICAgICJzdWJxdyAgIzgsJTJcblx0IgorCQkJICAgICAic3VicXcgICM4LCUyXG5cdCIKKwkJCSAgICAgImRicmEgICAlMSwxYlxuXHQiCisJCQkgICAgIDogIj1hIiAoc3ApLCAiPWQiICh0bXApCisJCQkgICAgIDogImEiIChwYWdlKSwgIjAiIChzcCksCisJCQkgICAgICAgIjEiICgoUEFHRV9TSVpFIC0gMTYpIC8gMTYgLSAxKSk7Cit9CisKKyNlbHNlCisjZGVmaW5lIGNsZWFyX3BhZ2UocGFnZSkJbWVtc2V0KChwYWdlKSwgMCwgUEFHRV9TSVpFKQorI2RlZmluZSBjb3B5X3BhZ2UodG8sZnJvbSkJbWVtY3B5KCh0byksIChmcm9tKSwgUEFHRV9TSVpFKQorI2VuZGlmCisKKyNkZWZpbmUgY2xlYXJfdXNlcl9wYWdlKGFkZHIsIHZhZGRyLCBwYWdlKQlcCisJZG8gewljbGVhcl9wYWdlKGFkZHIpOwkJXAorCQlmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTsJXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIGNvcHlfdXNlcl9wYWdlKHRvLCBmcm9tLCB2YWRkciwgcGFnZSkJXAorCWRvIHsJY29weV9wYWdlKHRvLCBmcm9tKTsJCVwKKwkJZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSk7CVwKKwl9IHdoaWxlICgwKQorCisvKgorICogVGhlc2UgYXJlIHVzZWQgdG8gbWFrZSB1c2Ugb2YgQyB0eXBlLWNoZWNraW5nLi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHB0ZTsgfSBwdGVfdDsKK3R5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBwbWRbMTZdOyB9IHBtZF90OwordHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHBnZDsgfSBwZ2RfdDsKK3R5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBwZ3Byb3Q7IH0gcGdwcm90X3Q7CisKKyNkZWZpbmUgcHRlX3ZhbCh4KQkoKHgpLnB0ZSkKKyNkZWZpbmUgcG1kX3ZhbCh4KQkoKCZ4KS0+cG1kWzBdKQorI2RlZmluZSBwZ2RfdmFsKHgpCSgoeCkucGdkKQorI2RlZmluZSBwZ3Byb3RfdmFsKHgpCSgoeCkucGdwcm90KQorCisjZGVmaW5lIF9fcHRlKHgpCSgocHRlX3QpIHsgKHgpIH0gKQorI2RlZmluZSBfX3BtZCh4KQkoKHBtZF90KSB7ICh4KSB9ICkKKyNkZWZpbmUgX19wZ2QoeCkJKChwZ2RfdCkgeyAoeCkgfSApCisjZGVmaW5lIF9fcGdwcm90KHgpCSgocGdwcm90X3QpIHsgKHgpIH0gKQorCisvKiB0byBhbGlnbiB0aGUgcG9pbnRlciB0byB0aGUgKG5leHQpIHBhZ2UgYm91bmRhcnkgKi8KKyNkZWZpbmUgUEFHRV9BTElHTihhZGRyKQkoKChhZGRyKStQQUdFX1NJWkUtMSkmUEFHRV9NQVNLKQorCisvKiBQdXJlIDJebiB2ZXJzaW9uIG9mIGdldF9vcmRlciAqLworc3RhdGljIGlubGluZSBpbnQgZ2V0X29yZGVyKHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlpbnQgb3JkZXI7CisKKwlzaXplID0gKHNpemUtMSkgPj4gKFBBR0VfU0hJRlQtMSk7CisJb3JkZXIgPSAtMTsKKwlkbyB7CisJCXNpemUgPj49IDE7CisJCW9yZGVyKys7CisJfSB3aGlsZSAoc2l6ZSk7CisJcmV0dXJuIG9yZGVyOworfQorCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisjaW5jbHVkZSA8YXNtL3BhZ2Vfb2Zmc2V0Lmg+CisKKyNkZWZpbmUgUEFHRV9PRkZTRVQJCShQQUdFX09GRlNFVF9SQVcpCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNpZm5kZWYgQ09ORklHX1NVTjMKKworI2RlZmluZSBXQU5UX1BBR0VfVklSVFVBTAorI2lmZGVmIENPTkZJR19TSU5HTEVfTUVNT1JZX0NIVU5LCitleHRlcm4gdW5zaWduZWQgbG9uZyBtNjhrX21lbW9mZnNldDsKKworI2RlZmluZSBfX3BhKHZhZGRyKQkJKCh1bnNpZ25lZCBsb25nKSh2YWRkcikrbTY4a19tZW1vZmZzZXQpCisjZGVmaW5lIF9fdmEocGFkZHIpCQkoKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKHBhZGRyKS1tNjhrX21lbW9mZnNldCkpCisjZWxzZQorI2RlZmluZSBfX3BhKHZhZGRyKQkJdmlydF90b19waHlzKCh2b2lkICopdmFkZHIpCisjZGVmaW5lIF9fdmEocGFkZHIpCQlwaHlzX3RvX3ZpcnQoKHVuc2lnbmVkIGxvbmcpcGFkZHIpCisjZW5kaWYKKworI2Vsc2UJLyogIUNPTkZJR19TVU4zICovCisvKiBUaGlzICNkZWZpbmUgaXMgYSBob3JyaWJsZSBoYWNrIHRvIHN1cHByZXNzIGxvdHMgb2Ygd2FybmluZ3MuIC0tbSAqLworI2RlZmluZSBfX3BhKHgpIF9fX3BhKCh1bnNpZ25lZCBsb25nKXgpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19fcGEodW5zaWduZWQgbG9uZyB4KQoreworICAgICBpZih4ID09IDApCisJICByZXR1cm4gMDsKKyAgICAgaWYoeCA+PSBQQUdFX09GRlNFVCkKKyAgICAgICAgcmV0dXJuICh4LVBBR0VfT0ZGU0VUKTsKKyAgICAgZWxzZQorICAgICAgICByZXR1cm4gKHgrMHgyMDAwMDAwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkICpfX3ZhKHVuc2lnbmVkIGxvbmcgeCkKK3sKKyAgICAgaWYoeCA9PSAwKQorCSAgcmV0dXJuICh2b2lkICopMDsKKworICAgICBpZih4IDwgMHgyMDAwMDAwKQorICAgICAgICByZXR1cm4gKHZvaWQgKikoeCtQQUdFX09GRlNFVCk7CisgICAgIGVsc2UKKyAgICAgICAgcmV0dXJuICh2b2lkICopKHgtMHgyMDAwMDAwKTsKK30KKyNlbmRpZgkvKiBDT05GSUdfU1VOMyAqLworCisvKgorICogTk9URTogdmlydHVhbCBpc24ndCByZWFsbHkgY29ycmVjdCwgYWN0dWFsbHkgaXQgc2hvdWxkIGJlIHRoZSBvZmZzZXQgaW50byB0aGUKKyAqIG1lbW9yeSBub2RlLCBidXQgd2UgaGF2ZSBubyBoaWdobWVtLCBzbyB0aGF0IHdvcmtzIGZvciBub3cuCisgKiBUT0RPOiBpbXBsZW1lbnQgKGZhc3QpIHBmbjwtPnBnZGF0X2lkeCBjb252ZXJzaW9uIGZ1bmN0aW9ucywgdGhpcyBtYWtlcyBsb3RzCisgKiBvZiB0aGUgc2hpZnRzIHVubmVjZXNzYXJ5LgorICovCisjZGVmaW5lIHZpcnRfdG9fcGZuKGthZGRyKQkoX19wYShrYWRkcikgPj4gUEFHRV9TSElGVCkKKyNkZWZpbmUgcGZuX3RvX3ZpcnQocGZuKQlfX3ZhKChwZm4pIDw8IFBBR0VfU0hJRlQpCisKKyNkZWZpbmUgdmlydF90b19wYWdlKGthZGRyKQkobWVtX21hcCArICgoKHVuc2lnbmVkIGxvbmcpKGthZGRyKS1QQUdFX09GRlNFVCkgPj4gUEFHRV9TSElGVCkpCisjZGVmaW5lIHBhZ2VfdG9fdmlydChwYWdlKQkoKCgocGFnZSkgLSBtZW1fbWFwKSA8PCBQQUdFX1NISUZUKSArIFBBR0VfT0ZGU0VUKQorCisjZGVmaW5lIHBmbl90b19wYWdlKHBmbikJdmlydF90b19wYWdlKHBmbl90b192aXJ0KHBmbikpCisjZGVmaW5lIHBhZ2VfdG9fcGZuKHBhZ2UpCXZpcnRfdG9fcGZuKHBhZ2VfdG9fdmlydChwYWdlKSkKKworI2RlZmluZSB2aXJ0X2FkZHJfdmFsaWQoa2FkZHIpCSgodm9pZCAqKShrYWRkcikgPj0gKHZvaWQgKilQQUdFX09GRlNFVCAmJiAodm9pZCAqKShrYWRkcikgPCBoaWdoX21lbW9yeSkKKyNkZWZpbmUgcGZuX3ZhbGlkKHBmbikJCXZpcnRfYWRkcl92YWxpZChwZm5fdG9fdmlydChwZm4pKQorCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKyNkZWZpbmUgVk1fREFUQV9ERUZBVUxUX0ZMQUdTCShWTV9SRUFEIHwgVk1fV1JJVEUgfCBWTV9FWEVDIHwgXAorCQkJCSBWTV9NQVlSRUFEIHwgVk1fTUFZV1JJVEUgfCBWTV9NQVlFWEVDKQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX002OEtfUEFHRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL3BhZ2Vfb2Zmc2V0LmggYi9pbmNsdWRlL2FzbS1tNjhrL3BhZ2Vfb2Zmc2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZkM2MyOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvcGFnZV9vZmZzZXQuaApAQCAtMCwwICsxLDkgQEAKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworLyogVGhpcyBoYW5kbGVzIHRoZSBtZW1vcnkgbWFwLi4gKi8KKyNpZm5kZWYgQ09ORklHX1NVTjMKKyNkZWZpbmUgUEFHRV9PRkZTRVRfUkFXCQkweDAwMDAwMDAwCisjZWxzZQorI2RlZmluZSBQQUdFX09GRlNFVF9SQVcJCTB4MEUwMDAwMDAKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL3BhcmFtLmggYi9pbmNsdWRlL2FzbS1tNjhrL3BhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBmNDA5ZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvcGFyYW0uaApAQCAtMCwwICsxLDIyIEBACisjaWZuZGVmIF9NNjhLX1BBUkFNX0gKKyNkZWZpbmUgX002OEtfUEFSQU1fSAorCisjaWZkZWYgX19LRVJORUxfXworIyBkZWZpbmUgSFoJCTEwMAkJLyogSW50ZXJuYWwga2VybmVsIHRpbWVyIGZyZXF1ZW5jeSAqLworIyBkZWZpbmUgVVNFUl9IWgkxMDAJCS8qIC4uIHNvbWUgdXNlciBpbnRlcmZhY2VzIGFyZSBpbiAidGlja3MiICovCisjIGRlZmluZSBDTE9DS1NfUEVSX1NFQwkoVVNFUl9IWikJLyogbGlrZSB0aW1lcygpICovCisjZW5kaWYKKworI2lmbmRlZiBIWgorI2RlZmluZSBIWiAxMDAKKyNlbmRpZgorCisjZGVmaW5lIEVYRUNfUEFHRVNJWkUJODE5MgorCisjaWZuZGVmIE5PR1JPVVAKKyNkZWZpbmUgTk9HUk9VUAkJKC0xKQorI2VuZGlmCisKKyNkZWZpbmUgTUFYSE9TVE5BTUVMRU4JNjQJLyogbWF4IGxlbmd0aCBvZiBob3N0bmFtZSAqLworCisjZW5kaWYgLyogX002OEtfUEFSQU1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9wYXJwb3J0LmggYi9pbmNsdWRlL2FzbS1tNjhrL3BhcnBvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDZiMTg3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9wYXJwb3J0LmgKQEAgLTAsMCArMSwyNiBAQAorLyoKKyAqIHBhcnBvcnQuaDogcGxhdGZvcm0tc3BlY2lmaWMgUEMtc3R5bGUgcGFycG9ydCBpbml0aWFsaXNhdGlvbgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCAgVGltIFdhdWdoIDx0aW1AY3liZXJlbGsuZGVtb24uY28udWs+CisgKgorICogVGhpcyBmaWxlIHNob3VsZCBvbmx5IGJlIGluY2x1ZGVkIGJ5IGRyaXZlcnMvcGFycG9ydC9wYXJwb3J0X3BjLmMuCisgKgorICogUlo6IGZvciB1c2Ugd2l0aCBRNDAgYW5kIG90aGVyIElTQSBtYWNoaW5lcworICovCisKKyNpZm5kZWYgX0FTTV9NNjhLX1BBUlBPUlRfSAorI2RlZmluZSBfQVNNX002OEtfUEFSUE9SVF9IIDEKKworI2RlZmluZSBpbnNsKHBvcnQsYnVmLGxlbikgICBpc2FfaW5zYihwb3J0LGJ1ZiwobGVuKTw8MikKKyNkZWZpbmUgb3V0c2wocG9ydCxidWYsbGVuKSAgaXNhX291dHNiKHBvcnQsYnVmLChsZW4pPDwyKQorCisvKiBubyBkbWEsIG9yIElSUSBhdXRvcHJvYmluZyAqLworc3RhdGljIGludCBfX2RldmluaXQgcGFycG9ydF9wY19maW5kX2lzYV9wb3J0cyAoaW50IGF1dG9pcnEsIGludCBhdXRvZG1hKTsKK3N0YXRpYyBpbnQgX19kZXZpbml0IHBhcnBvcnRfcGNfZmluZF9ub25wY2lfcG9ydHMgKGludCBhdXRvaXJxLCBpbnQgYXV0b2RtYSkKK3sKKyAgICAgICAgaWYgKCEgKE1BQ0hfSVNfUTQwKSkKKwkgIHJldHVybiAwOyAvKiBjb3VudD0wICovCisJcmV0dXJuIHBhcnBvcnRfcGNfZmluZF9pc2FfcG9ydHMgKFBBUlBPUlRfSVJRX05PTkUsIFBBUlBPUlRfRE1BX05PTkUpOworfQorCisjZW5kaWYgLyogIShfQVNNX002OEtfUEFSUE9SVF9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9wY2kuaCBiL2luY2x1ZGUvYXNtLW02OGsvcGNpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU3ZDc5YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvcGNpLmgKQEAgLTAsMCArMSw2MSBAQAorI2lmbmRlZiBfQVNNX002OEtfUENJX0gKKyNkZWZpbmUgX0FTTV9NNjhLX1BDSV9ICisKKy8qCisgKiBhc20tbTY4ay9wY2lfbTY4ay5oIC0gbTY4ayBzcGVjaWZpYyBQQ0kgZGVjbGFyYXRpb25zLgorICoKKyAqIFdyaXR0ZW4gYnkgV291dCBLbGFyZW4uCisgKi8KKworI2luY2x1ZGUgPGFzbS9zY2F0dGVybGlzdC5oPgorCitzdHJ1Y3QgcGNpX29wczsKKworLyoKKyAqIFN0cnVjdHVyZSB3aXRoIGhhcmR3YXJlIGRlcGVuZGVudCBpbmZvcm1hdGlvbiBhbmQgZnVuY3Rpb25zIG9mIHRoZQorICogUENJIGJ1cy4KKyAqLworCitzdHJ1Y3QgcGNpX2J1c19pbmZvCit7CisJLyoKKwkgKiBSZXNvdXJjZXMgb2YgdGhlIFBDSSBidXMuCisJICovCisKKwlzdHJ1Y3QgcmVzb3VyY2UgbWVtX3NwYWNlOworCXN0cnVjdCByZXNvdXJjZSBpb19zcGFjZTsKKworCS8qCisJICogU3lzdGVtIGRlcGVuZGVudCBmdW5jdGlvbnMuCisJICovCisKKwlzdHJ1Y3QgcGNpX29wcyAqbTY4a19wY2lfb3BzOworCisJdm9pZCAoKmZpeHVwKShpbnQgcGNpX21vZGlmeSk7CisJdm9pZCAoKmNvbmZfZGV2aWNlKShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKK307CisKKyNkZWZpbmUgcGNpYmlvc19hc3NpZ25fYWxsX2J1c3NlcygpCTAKKyNkZWZpbmUgcGNpYmlvc19zY2FuX2FsbF9mbnMoYSwgYikJMAorCitzdGF0aWMgaW5saW5lIHZvaWQgcGNpYmlvc19zZXRfbWFzdGVyKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJLyogTm8gc3BlY2lhbCBidXMgbWFzdGVyaW5nIHNldHVwIGhhbmRsaW5nICovCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwY2liaW9zX3BlbmFsaXplX2lzYV9pcnEoaW50IGlycSkKK3sKKwkvKiBXZSBkb24ndCBkbyBkeW5hbWljIFBDSSBJUlEgYWxsb2NhdGlvbiAqLworfQorCisvKiBUaGUgUENJIGFkZHJlc3Mgc3BhY2UgZG9lcyBlcXVhbCB0aGUgcGh5c2ljYWwgbWVtb3J5CisgKiBhZGRyZXNzIHNwYWNlLiAgVGhlIG5ldHdvcmtpbmcgYW5kIGJsb2NrIGRldmljZSBsYXllcnMgdXNlCisgKiB0aGlzIGJvb2xlYW4gZm9yIGJvdW5jZSBidWZmZXIgZGVjaXNpb25zLgorICovCisjZGVmaW5lIFBDSV9ETUFfQlVTX0lTX1BIWVMJKDEpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwY2liaW9zX2FkZF9wbGF0Zm9ybV9lbnRyaWVzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7Cit9CisKKyNlbmRpZiAvKiBfQVNNX002OEtfUENJX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvcGVyY3B1LmggYi9pbmNsdWRlL2FzbS1tNjhrL3BlcmNwdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NTlkMDQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL3BlcmNwdS5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfX0FTTV9NNjhLX1BFUkNQVV9ICisjZGVmaW5lIF9fQVNNX002OEtfUEVSQ1BVX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BlcmNwdS5oPgorCisjZW5kaWYJLyogX19BU01fTTY4S19QRVJDUFVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9wZ2FsbG9jLmggYi9pbmNsdWRlL2FzbS1tNjhrL3BnYWxsb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDY4Yjc5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9wZ2FsbG9jLmgKQEAgLTAsMCArMSwxOSBAQAorCisjaWZuZGVmIE02OEtfUEdBTExPQ19ICisjZGVmaW5lIE02OEtfUEdBTExPQ19ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vdmlydGNvbnZlcnQuaD4KKworCisKKyNpZmRlZiBDT05GSUdfU1VOMworI2luY2x1ZGUgPGFzbS9zdW4zX3BnYWxsb2MuaD4KKyNlbHNlCisjaW5jbHVkZSA8YXNtL21vdG9yb2xhX3BnYWxsb2MuaD4KKyNlbmRpZgorCisjZW5kaWYgLyogTTY4S19QR0FMTE9DX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20tbTY4ay9wZ3RhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGVlZjMyNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvcGd0YWJsZS5oCkBAIC0wLDAgKzEsMTkxIEBACisjaWZuZGVmIF9NNjhLX1BHVEFCTEVfSAorI2RlZmluZSBfTTY4S19QR1RBQkxFX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljLzRsZXZlbC1maXh1cC5oPgorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorCisvKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBmdW5jdGlvbnMgYW5kIGRlZmluZXMgbmVjZXNzYXJ5IHRvIG1vZGlmeSBhbmQgdXNlCisgKiB0aGUgbTY4ayBwYWdlIHRhYmxlIHRyZWUuCisgKi8KKworI2luY2x1ZGUgPGFzbS92aXJ0Y29udmVydC5oPgorCisvKiBDZXJ0YWluIGFyY2hpdGVjdHVyZXMgbmVlZCB0byBkbyBzcGVjaWFsIHRoaW5ncyB3aGVuIHB0ZSdzCisgKiB3aXRoaW4gYSBwYWdlIHRhYmxlIGFyZSBkaXJlY3RseSBtb2RpZmllZC4gIFRodXMsIHRoZSBmb2xsb3dpbmcKKyAqIGhvb2sgaXMgbWFkZSBhdmFpbGFibGUuCisgKi8KKyNkZWZpbmUgc2V0X3B0ZShwdGVwdHIsIHB0ZXZhbCkJCQkJCVwKKwlkb3sJCQkJCQkJXAorCQkqKHB0ZXB0cikgPSAocHRldmFsKTsJCQkJXAorCX0gd2hpbGUoMCkKKyNkZWZpbmUgc2V0X3B0ZV9hdChtbSxhZGRyLHB0ZXAscHRldmFsKSBzZXRfcHRlKHB0ZXAscHRldmFsKQorCisKKy8qIFBNRF9TSElGVCBkZXRlcm1pbmVzIHRoZSBzaXplIG9mIHRoZSBhcmVhIGEgc2Vjb25kLWxldmVsIHBhZ2UgdGFibGUgY2FuIG1hcCAqLworI2lmZGVmIENPTkZJR19TVU4zCisjZGVmaW5lIFBNRF9TSElGVCAgICAgICAxNworI2Vsc2UKKyNkZWZpbmUgUE1EX1NISUZUCTIyCisjZW5kaWYKKyNkZWZpbmUgUE1EX1NJWkUJKDFVTCA8PCBQTURfU0hJRlQpCisjZGVmaW5lIFBNRF9NQVNLCSh+KFBNRF9TSVpFLTEpKQorCisvKiBQR0RJUl9TSElGVCBkZXRlcm1pbmVzIHdoYXQgYSB0aGlyZC1sZXZlbCBwYWdlIHRhYmxlIGVudHJ5IGNhbiBtYXAgKi8KKyNpZmRlZiBDT05GSUdfU1VOMworI2RlZmluZSBQR0RJUl9TSElGVCAgICAgMTcKKyNlbHNlCisjZGVmaW5lIFBHRElSX1NISUZUCTI1CisjZW5kaWYKKyNkZWZpbmUgUEdESVJfU0laRQkoMVVMIDw8IFBHRElSX1NISUZUKQorI2RlZmluZSBQR0RJUl9NQVNLCSh+KFBHRElSX1NJWkUtMSkpCisKKy8qCisgKiBlbnRyaWVzIHBlciBwYWdlIGRpcmVjdG9yeSBsZXZlbDogdGhlIG02OGsgaXMgY29uZmlndXJlZCBhcyB0aHJlZS1sZXZlbCwKKyAqIHNvIHdlIGRvIGhhdmUgUE1EIGxldmVsIHBoeXNpY2FsbHkuCisgKi8KKyNpZmRlZiBDT05GSUdfU1VOMworI2RlZmluZSBQVFJTX1BFUl9QVEUgICAxNgorI2RlZmluZSBQVFJTX1BFUl9QTUQgICAxCisjZGVmaW5lIFBUUlNfUEVSX1BHRCAgIDIwNDgKKyNlbHNlCisjZGVmaW5lIFBUUlNfUEVSX1BURQkxMDI0CisjZGVmaW5lIFBUUlNfUEVSX1BNRAk4CisjZGVmaW5lIFBUUlNfUEVSX1BHRAkxMjgKKyNlbmRpZgorI2RlZmluZSBVU0VSX1BUUlNfUEVSX1BHRAkoVEFTS19TSVpFL1BHRElSX1NJWkUpCisjZGVmaW5lIEZJUlNUX1VTRVJfUEdEX05SCTAKKworLyogVmlydHVhbCBhZGRyZXNzIHJlZ2lvbiBmb3IgdXNlIGJ5IGtlcm5lbF9tYXAoKSAqLworI2lmZGVmIENPTkZJR19TVU4zCisjZGVmaW5lIEtNQVBfU1RBUlQgICAgIDB4MERDMDAwMDAKKyNkZWZpbmUgS01BUF9FTkQgICAgICAgMHgwRTAwMDAwMAorI2Vsc2UKKyNkZWZpbmUJS01BUF9TVEFSVAkweGQwMDAwMDAwCisjZGVmaW5lCUtNQVBfRU5ECTB4ZjAwMDAwMDAKKyNlbmRpZgorCisjaWZuZGVmIENPTkZJR19TVU4zCisvKiBKdXN0IGFueSBhcmJpdHJhcnkgb2Zmc2V0IHRvIHRoZSBzdGFydCBvZiB0aGUgdm1hbGxvYyBWTSBhcmVhOiB0aGUKKyAqIGN1cnJlbnQgOE1CIHZhbHVlIGp1c3QgbWVhbnMgdGhhdCB0aGVyZSB3aWxsIGJlIGEgOE1CICJob2xlIiBhZnRlciB0aGUKKyAqIHBoeXNpY2FsIG1lbW9yeSB1bnRpbCB0aGUga2VybmVsIHZpcnR1YWwgbWVtb3J5IHN0YXJ0cy4gIFRoYXQgbWVhbnMgdGhhdAorICogYW55IG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIHdpbGwgaG9wZWZ1bGx5IGJlIGNhdWdodC4KKyAqIFRoZSB2bWFsbG9jKCkgcm91dGluZXMgbGVhdmVzIGEgaG9sZSBvZiA0a0IgYmV0d2VlbiBlYWNoIHZtYWxsb2NlZAorICogYXJlYSBmb3IgdGhlIHNhbWUgcmVhc29uLiA7KQorICovCisjZGVmaW5lIFZNQUxMT0NfT0ZGU0VUCSg4KjEwMjQqMTAyNCkKKyNkZWZpbmUgVk1BTExPQ19TVEFSVCAoKCh1bnNpZ25lZCBsb25nKSBoaWdoX21lbW9yeSArIFZNQUxMT0NfT0ZGU0VUKSAmIH4oVk1BTExPQ19PRkZTRVQtMSkpCisjZGVmaW5lIFZNQUxMT0NfRU5EIEtNQVBfU1RBUlQKKyNlbHNlCitleHRlcm4gdW5zaWduZWQgbG9uZyB2bWFsbG9jX2VuZDsKKyNkZWZpbmUgVk1BTExPQ19TVEFSVCAweDBmODAwMDAwCisjZGVmaW5lIFZNQUxMT0NfRU5EIHZtYWxsb2NfZW5kCisjZW5kaWYgLyogQ09ORklHX1NVTjMgKi8KKworLyogemVybyBwYWdlIHVzZWQgZm9yIHVuaW5pdGlhbGl6ZWQgc3R1ZmYgKi8KK2V4dGVybiB2b2lkICplbXB0eV96ZXJvX3BhZ2U7CisKKy8qCisgKiBaRVJPX1BBR0UgaXMgYSBnbG9iYWwgc2hhcmVkIHBhZ2UgdGhhdCBpcyBhbHdheXMgemVybzogdXNlZAorICogZm9yIHplcm8tbWFwcGVkIG1lbW9yeSBhcmVhcyBldGMuLgorICovCisjZGVmaW5lIFpFUk9fUEFHRSh2YWRkcikJKHZpcnRfdG9fcGFnZShlbXB0eV96ZXJvX3BhZ2UpKQorCisvKiBudW1iZXIgb2YgYml0cyB0aGF0IGZpdCBpbnRvIGEgbWVtb3J5IHBvaW50ZXIgKi8KKyNkZWZpbmUgQklUU19QRVJfUFRSCQkJKDgqc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKQorCisvKiB0byBhbGlnbiB0aGUgcG9pbnRlciB0byBhIHBvaW50ZXIgYWRkcmVzcyAqLworI2RlZmluZSBQVFJfTUFTSwkJCSh+KHNpemVvZih2b2lkKiktMSkpCisKKy8qIHNpemVvZih2b2lkKik9PTE8PFNJWkVPRl9QVFJfTE9HMiAqLworLyogNjQtYml0IG1hY2hpbmVzLCBiZXdhcmUhICBTUkIuICovCisjZGVmaW5lIFNJWkVPRl9QVFJfTE9HMgkJCSAgICAgICAyCisKKy8qCisgKiBDaGVjayBpZiB0aGUgYWRkci9sZW4gZ29lcyB1cCB0byB0aGUgZW5kIG9mIGEgcGh5c2ljYWwKKyAqIG1lbW9yeSBjaHVuay4gIFVzZWQgZm9yIERNQSBmdW5jdGlvbnMuCisgKi8KKyNpZmRlZiBDT05GSUdfU0lOR0xFX01FTU9SWV9DSFVOSworLyoKKyAqIEl0IG1ha2VzIG5vIHNlbnNlIHRvIGNvbnNpZGVyIHdoZXRoZXIgd2UgY3Jvc3MgYSBtZW1vcnkgYm91bmRhcnkgaWYKKyAqIHdlIHN1cHBvcnQganVzdCBvbmUgcGh5c2ljYWwgY2h1bmsgb2YgbWVtb3J5LgorICovCitzdGF0aWMgaW5saW5lIGludCBtbV9lbmRfb2ZfY2h1bmsodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbGVuKQoreworCXJldHVybiAwOworfQorI2Vsc2UKK2ludCBtbV9lbmRfb2ZfY2h1bmsgKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IGxlbik7CisjZW5kaWYKKworZXh0ZXJuIHZvaWQga2VybmVsX3NldF9jYWNoZW1vZGUodm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLCBpbnQgY21vZGUpOworCisvKgorICogVGhlIG02OGsgZG9lc24ndCBoYXZlIGFueSBleHRlcm5hbCBNTVUgaW5mbzogdGhlIGtlcm5lbCBwYWdlCisgKiB0YWJsZXMgY29udGFpbiBhbGwgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbi4gIFRoZSBTdW4zIGRvZXMsIGJ1dAorICogdGhleSBhcmUgdXBkYXRlZCBvbiBkZW1hbmQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfbW11X2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJCSAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90IHB0ZSkKK3sKK30KKworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKworI2RlZmluZSBrZXJuX2FkZHJfdmFsaWQoYWRkcikJKDEpCisKKyNkZWZpbmUgaW9fcmVtYXBfcGFnZV9yYW5nZSh2bWEsIHZhZGRyLCBwYWRkciwgc2l6ZSwgcHJvdCkJCVwKKwkJcmVtYXBfcGZuX3JhbmdlKHZtYSwgdmFkZHIsIChwYWRkcikgPj4gUEFHRV9TSElGVCwgc2l6ZSwgcHJvdCkKKworI2RlZmluZSBpb19yZW1hcF9wZm5fcmFuZ2Uodm1hLCB2YWRkciwgcGZuLCBzaXplLCBwcm90KQkJXAorCQlyZW1hcF9wZm5fcmFuZ2Uodm1hLCB2YWRkciwgcGZuLCBzaXplLCBwcm90KQorCisjZGVmaW5lIE1LX0lPU1BBQ0VfUEZOKHNwYWNlLCBwZm4pCShwZm4pCisjZGVmaW5lIEdFVF9JT1NQQUNFKHBmbikJCTAKKyNkZWZpbmUgR0VUX1BGTihwZm4pCQkJKHBmbikKKworLyogTU1VLXNwZWNpZmljIGhlYWRlcnMgKi8KKworI2lmZGVmIENPTkZJR19TVU4zCisjaW5jbHVkZSA8YXNtL3N1bjNfcGd0YWJsZS5oPgorI2Vsc2UKKyNpbmNsdWRlIDxhc20vbW90b3JvbGFfcGd0YWJsZS5oPgorI2VuZGlmCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGd0YWJsZS5oPgorCisvKgorICogTWFjcm8gdG8gbWFyayBhIHBhZ2UgcHJvdGVjdGlvbiB2YWx1ZSBhcyAidW5jYWNoZWFibGUiLgorICovCisjaWZkZWYgU1VOM19QQUdFX05PQ0FDSEUKKyMgZGVmaW5lIF9fU1VOM19QQUdFX05PQ0FDSEUJU1VOM19QQUdFX05PQ0FDSEUKKyNlbHNlCisjIGRlZmluZSBfX1NVTjNfUEFHRV9OT0NBQ0hFCTAKKyNlbmRpZgorI2RlZmluZSBwZ3Byb3Rfbm9uY2FjaGVkKHByb3QpCQkJCQkJCVwKKwkoTU1VX0lTX1NVTjMJCQkJCQkJCVwKKwkgPyAoX19wZ3Byb3QocGdwcm90X3ZhbChwcm90KSB8IF9fU1VOM19QQUdFX05PQ0FDSEUpKQkJCVwKKwkgOiAoKE1NVV9JU184NTEgfHwgTU1VX0lTXzAzMCkJCQkJCQlcCisJICAgID8gKF9fcGdwcm90KHBncHJvdF92YWwocHJvdCkgfCBfUEFHRV9OT0NBQ0hFMDMwKSkJCQlcCisJICAgIDogKE1NVV9JU18wNDAgfHwgTU1VX0lTXzA2MCkJCQkJCVwKKwkgICAgPyAoX19wZ3Byb3QoKHBncHJvdF92YWwocHJvdCkgJiBfQ0FDSEVNQVNLMDQwKSB8IF9QQUdFX05PQ0FDSEVfUykpCVwKKwkgICAgOiAocHJvdCkpKQorCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisvKgorICogTm8gcGFnZSB0YWJsZSBjYWNoZXMgdG8gaW5pdGlhbGlzZQorICovCisjZGVmaW5lIHBndGFibGVfY2FjaGVfaW5pdCgpCWRvIHsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBjaGVja19wZ3RfY2FjaGUoKQlkbyB7IH0gd2hpbGUgKDApCisKKyNlbmRpZiAvKiBfTTY4S19QR1RBQkxFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvcG9sbC5oIGIvaW5jbHVkZS9hc20tbTY4ay9wb2xsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRiNjljNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvcG9sbC5oCkBAIC0wLDAgKzEsMjMgQEAKKyNpZm5kZWYgX19tNjhrX1BPTExfSAorI2RlZmluZSBfX202OGtfUE9MTF9ICisKKyNkZWZpbmUgUE9MTElOCQkgIDEKKyNkZWZpbmUgUE9MTFBSSQkJICAyCisjZGVmaW5lIFBPTExPVVQJCSAgNAorI2RlZmluZSBQT0xMRVJSCQkgIDgKKyNkZWZpbmUgUE9MTEhVUAkJIDE2CisjZGVmaW5lIFBPTExOVkFMCSAzMgorI2RlZmluZSBQT0xMUkROT1JNCSA2NAorI2RlZmluZSBQT0xMV1JOT1JNCVBPTExPVVQKKyNkZWZpbmUgUE9MTFJEQkFORAkxMjgKKyNkZWZpbmUgUE9MTFdSQkFORAkyNTYKKyNkZWZpbmUgUE9MTE1TRwkJMHgwNDAwCisjZGVmaW5lIFBPTExSRU1PVkUJMHgxMDAwCisKK3N0cnVjdCBwb2xsZmQgeworCWludCBmZDsKKwlzaG9ydCBldmVudHM7CisJc2hvcnQgcmV2ZW50czsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9wb3NpeF90eXBlcy5oIGIvaW5jbHVkZS9hc20tbTY4ay9wb3NpeF90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhMTY2ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL3Bvc2l4X3R5cGVzLmgKQEAgLTAsMCArMSw2NSBAQAorI2lmbmRlZiBfX0FSQ0hfTTY4S19QT1NJWF9UWVBFU19ICisjZGVmaW5lIF9fQVJDSF9NNjhLX1BPU0lYX1RZUEVTX0gKKworLyoKKyAqIFRoaXMgZmlsZSBpcyBnZW5lcmFsbHkgdXNlZCBieSB1c2VyLWxldmVsIHNvZnR3YXJlLCBzbyB5b3UgbmVlZCB0bworICogYmUgYSBsaXR0bGUgY2FyZWZ1bCBhYm91dCBuYW1lc3BhY2UgcG9sbHV0aW9uIGV0Yy4gIEFsc28sIHdlIGNhbm5vdAorICogYXNzdW1lIEdDQyBpcyBiZWluZyB1c2VkLgorICovCisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZwlfX2tlcm5lbF9pbm9fdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJX19rZXJuZWxfbW9kZV90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAlfX2tlcm5lbF9ubGlua190OwordHlwZWRlZiBsb25nCQlfX2tlcm5lbF9vZmZfdDsKK3R5cGVkZWYgaW50CQlfX2tlcm5lbF9waWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJX19rZXJuZWxfaXBjX3BpZF90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAlfX2tlcm5lbF91aWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJX19rZXJuZWxfZ2lkX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludAlfX2tlcm5lbF9zaXplX3Q7Cit0eXBlZGVmIGludAkJX19rZXJuZWxfc3NpemVfdDsKK3R5cGVkZWYgaW50CQlfX2tlcm5lbF9wdHJkaWZmX3Q7Cit0eXBlZGVmIGxvbmcJCV9fa2VybmVsX3RpbWVfdDsKK3R5cGVkZWYgbG9uZwkJX19rZXJuZWxfc3VzZWNvbmRzX3Q7Cit0eXBlZGVmIGxvbmcJCV9fa2VybmVsX2Nsb2NrX3Q7Cit0eXBlZGVmIGludAkJX19rZXJuZWxfdGltZXJfdDsKK3R5cGVkZWYgaW50CQlfX2tlcm5lbF9jbG9ja2lkX3Q7Cit0eXBlZGVmIGludAkJX19rZXJuZWxfZGFkZHJfdDsKK3R5cGVkZWYgY2hhciAqCQlfX2tlcm5lbF9jYWRkcl90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAlfX2tlcm5lbF91aWQxNl90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAlfX2tlcm5lbF9naWQxNl90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQJX19rZXJuZWxfdWlkMzJfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50CV9fa2VybmVsX2dpZDMyX3Q7CisKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJX19rZXJuZWxfb2xkX3VpZF90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAlfX2tlcm5lbF9vbGRfZ2lkX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CV9fa2VybmVsX29sZF9kZXZfdDsKKworI2lmZGVmIF9fR05VQ19fCit0eXBlZGVmIGxvbmcgbG9uZwlfX2tlcm5lbF9sb2ZmX3Q7CisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgeworI2lmIGRlZmluZWQoX19LRVJORUxfXykgfHwgZGVmaW5lZChfX1VTRV9BTEwpCisJaW50CXZhbFsyXTsKKyNlbHNlIC8qICFkZWZpbmVkKF9fS0VSTkVMX18pICYmICFkZWZpbmVkKF9fVVNFX0FMTCkgKi8KKwlpbnQJX192YWxbMl07CisjZW5kaWYgLyogIWRlZmluZWQoX19LRVJORUxfXykgJiYgIWRlZmluZWQoX19VU0VfQUxMKSAqLworfSBfX2tlcm5lbF9mc2lkX3Q7CisKKyNpZiBkZWZpbmVkKF9fS0VSTkVMX18pIHx8ICFkZWZpbmVkKF9fR0xJQkNfXykgfHwgKF9fR0xJQkNfXyA8IDIpCisKKyN1bmRlZglfX0ZEX1NFVAorI2RlZmluZQlfX0ZEX1NFVChkLCBzZXQpCSgoc2V0KS0+ZmRzX2JpdHNbX19GREVMVChkKV0gfD0gX19GRE1BU0soZCkpCisKKyN1bmRlZglfX0ZEX0NMUgorI2RlZmluZQlfX0ZEX0NMUihkLCBzZXQpCSgoc2V0KS0+ZmRzX2JpdHNbX19GREVMVChkKV0gJj0gfl9fRkRNQVNLKGQpKQorCisjdW5kZWYJX19GRF9JU1NFVAorI2RlZmluZQlfX0ZEX0lTU0VUKGQsIHNldCkJKChzZXQpLT5mZHNfYml0c1tfX0ZERUxUKGQpXSAmIF9fRkRNQVNLKGQpKQorCisjdW5kZWYJX19GRF9aRVJPCisjZGVmaW5lIF9fRkRfWkVSTyhmZHNldHApIChtZW1zZXQgKGZkc2V0cCwgMCwgc2l6ZW9mKCooZmRfc2V0ICopZmRzZXRwKSkpCisKKyNlbmRpZiAvKiBkZWZpbmVkKF9fS0VSTkVMX18pIHx8ICFkZWZpbmVkKF9fR0xJQkNfXykgfHwgKF9fR0xJQkNfXyA8IDIpICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9wcm9jZXNzb3IuaCBiL2luY2x1ZGUvYXNtLW02OGsvcHJvY2Vzc29yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGYxNTc1ZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvcHJvY2Vzc29yLmgKQEAgLTAsMCArMSwxNDAgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1tNjhrL3Byb2Nlc3Nvci5oCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1IEhhbWlzaCBNYWNkb25hbGQKKyAqLworCisjaWZuZGVmIF9fQVNNX002OEtfUFJPQ0VTU09SX0gKKyNkZWZpbmUgX19BU01fTTY4S19QUk9DRVNTT1JfSAorCisvKgorICogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBtYWNybyB0aGF0IHJldHVybnMgY3VycmVudAorICogaW5zdHJ1Y3Rpb24gcG9pbnRlciAoInByb2dyYW0gY291bnRlciIpLgorICovCisjZGVmaW5lIGN1cnJlbnRfdGV4dF9hZGRyKCkgKHsgX19sYWJlbF9fIF9sOyBfbDogJiZfbDt9KQorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KKyNpbmNsdWRlIDxhc20vZnB1Lmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcmR1c3Aodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHVzcDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKCJtb3ZlICUvdXNwLCUwIiA6ICI9YSIgKHVzcCkpOworCXJldHVybiB1c3A7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3cnVzcCh1bnNpZ25lZCBsb25nIHVzcCkKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibW92ZSAlMCwlL3VzcCIgOiA6ICJhIiAodXNwKSk7Cit9CisKKy8qCisgKiBVc2VyIHNwYWNlIHByb2Nlc3Mgc2l6ZTogMy43NUdCLiBUaGlzIGlzIGhhcmRjb2RlZCBpbnRvIGEgZmV3IHBsYWNlcywKKyAqIHNvIGRvbid0IGNoYW5nZSBpdCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLgorICovCisjaWZuZGVmIENPTkZJR19TVU4zCisjZGVmaW5lIFRBU0tfU0laRQkoMHhGMDAwMDAwMFVMKQorI2Vsc2UKKyNpZmRlZiBfX0FTU0VNQkxZX18KKyNkZWZpbmUgVEFTS19TSVpFCSgweDBFMDAwMDAwKQorI2Vsc2UKKyNkZWZpbmUgVEFTS19TSVpFCSgweDBFMDAwMDAwVUwpCisjZW5kaWYKKyNlbmRpZgorCisvKiBUaGlzIGRlY2lkZXMgd2hlcmUgdGhlIGtlcm5lbCB3aWxsIHNlYXJjaCBmb3IgYSBmcmVlIGNodW5rIG9mIHZtCisgKiBzcGFjZSBkdXJpbmcgbW1hcCdzLgorICovCisjaWZuZGVmIENPTkZJR19TVU4zCisjZGVmaW5lIFRBU0tfVU5NQVBQRURfQkFTRQkweEMwMDAwMDAwVUwKKyNlbHNlCisjZGVmaW5lIFRBU0tfVU5NQVBQRURfQkFTRQkweDBBMDAwMDAwVUwKKyNlbmRpZgorI2RlZmluZSBUQVNLX1VOTUFQUEVEX0FMSUdOKGFkZHIsIG9mZikJUEFHRV9BTElHTihhZGRyKQorCitzdHJ1Y3QgdGFza193b3JrIHsKKwl1bnNpZ25lZCBjaGFyIHNpZ3BlbmRpbmc7CisJdW5zaWduZWQgY2hhciBub3RpZnlfcmVzdW1lOwkvKiByZXF1ZXN0IGZvciBub3RpZmljYXRpb24gb24KKwkJCQkJICAgdXNlcnNwYWNlIGV4ZWN1dGlvbiByZXN1bXB0aW9uICovCisJY2hhciAgICAgICAgICBuZWVkX3Jlc2NoZWQ7CisJdW5zaWduZWQgY2hhciBkZWxheWVkX3RyYWNlOwkvKiBzaW5nbGUgc3RlcCBhIHN5c2NhbGwgKi8KKwl1bnNpZ25lZCBjaGFyIHN5c2NhbGxfdHJhY2U7CS8qIGNvdW50IG9mIHN5c2NhbGwgaW50ZXJjZXB0b3JzICovCisJdW5zaWduZWQgY2hhciBtZW1kaWU7CQkvKiB0YXNrIHdhcyBzZWxlY3RlZCB0byBiZSBraWxsZWQgKi8KKwl1bnNpZ25lZCBjaGFyIHBhZFsyXTsKK307CisKK3N0cnVjdCB0aHJlYWRfc3RydWN0IHsKKwl1bnNpZ25lZCBsb25nICBrc3A7CQkvKiBrZXJuZWwgc3RhY2sgcG9pbnRlciAqLworCXVuc2lnbmVkIGxvbmcgIHVzcDsJCS8qIHVzZXIgc3RhY2sgcG9pbnRlciAqLworCXVuc2lnbmVkIHNob3J0IHNyOwkJLyogc2F2ZWQgc3RhdHVzIHJlZ2lzdGVyICovCisJdW5zaWduZWQgc2hvcnQgZnM7CQkvKiBzYXZlZCBmcyAoc2ZjLCBkZmMpICovCisJdW5zaWduZWQgbG9uZyAgY3JwWzJdOwkJLyogY3B1IHJvb3QgcG9pbnRlciAqLworCXVuc2lnbmVkIGxvbmcgIGVzcDA7CQkvKiBwb2ludHMgdG8gU1Igb2Ygc3RhY2sgZnJhbWUgKi8KKwl1bnNpZ25lZCBsb25nICBmYWRkcjsJCS8qIGluZm8gYWJvdXQgbGFzdCBmYXVsdCAqLworCWludCAgICAgICAgICAgIHNpZ25vLCBjb2RlOworCXVuc2lnbmVkIGxvbmcgIGZwWzgqM107CisJdW5zaWduZWQgbG9uZyAgZnBjbnRsWzNdOwkvKiBmcCBjb250cm9sIHJlZ3MgKi8KKwl1bnNpZ25lZCBjaGFyICBmcHN0YXRlW0ZQU1RBVEVTSVpFXTsgIC8qIGZsb2F0aW5nIHBvaW50IHN0YXRlICovCisJc3RydWN0IHRhc2tfd29yayB3b3JrOworfTsKKworI2RlZmluZSBJTklUX1RIUkVBRCAgewkJCQkJCQlcCisJa3NwOglzaXplb2YoaW5pdF9zdGFjaykgKyAodW5zaWduZWQgbG9uZykgaW5pdF9zdGFjaywJXAorCXNyOglQU19TLAkJCQkJCQlcCisJZnM6CV9fS0VSTkVMX0RTLAkJCQkJCVwKKwlpbmZvOglJTklUX1RIUkVBRF9JTkZPKGluaXRfdGFzaykJCQkJXAorfQorCisvKgorICogRG8gbmVjZXNzYXJ5IHNldHVwIHRvIHN0YXJ0IHVwIGEgbmV3bHkgZXhlY3V0ZWQgdGhyZWFkLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgc3RhcnRfdGhyZWFkKHN0cnVjdCBwdF9yZWdzICogcmVncywgdW5zaWduZWQgbG9uZyBwYywKKwkJCQl1bnNpZ25lZCBsb25nIHVzcCkKK3sKKwkvKiByZWFkcyBmcm9tIHVzZXIgc3BhY2UgKi8KKwlzZXRfZnMoVVNFUl9EUyk7CisKKwlyZWdzLT5wYyA9IHBjOworCXJlZ3MtPnNyICY9IH4weDIwMDA7CisJd3J1c3AodXNwKTsKK30KKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbiwgYSBzdHJhbmdlIEMgdGhpbmcgKi8KK3N0cnVjdCB0YXNrX3N0cnVjdDsKKworLyogRnJlZSBhbGwgcmVzb3VyY2VzIGhlbGQgYnkgYSB0aHJlYWQuICovCitzdGF0aWMgaW5saW5lIHZvaWQgcmVsZWFzZV90aHJlYWQoc3RydWN0IHRhc2tfc3RydWN0ICpkZWFkX3Rhc2spCit7Cit9CisKKy8qIFByZXBhcmUgdG8gY29weSB0aHJlYWQgc3RhdGUgLSB1bmxhenkgYWxsIGxhenkgc3RhdHVzICovCisjZGVmaW5lIHByZXBhcmVfdG9fY29weSh0c2spCWRvIHsgfSB3aGlsZSAoMCkKKworZXh0ZXJuIGludCBrZXJuZWxfdGhyZWFkKGludCAoKmZuKSh2b2lkICopLCB2b2lkICogYXJnLCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKKworLyoKKyAqIEZyZWUgY3VycmVudCB0aHJlYWQgZGF0YSBzdHJ1Y3R1cmVzIGV0Yy4uCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBleGl0X3RocmVhZCh2b2lkKQoreworfQorCitleHRlcm4gdW5zaWduZWQgbG9uZyB0aHJlYWRfc2F2ZWRfcGMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spOworCit1bnNpZ25lZCBsb25nIGdldF93Y2hhbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApOworCisjZGVmaW5lCUtTVEtfRUlQKHRzaykJXAorICAgICh7CQkJXAorCXVuc2lnbmVkIGxvbmcgZWlwID0gMDsJIFwKKwlpZiAoKHRzayktPnRocmVhZC5lc3AwID4gUEFHRV9TSVpFICYmIFwKKwkgICAgKHZpcnRfYWRkcl92YWxpZCgodHNrKS0+dGhyZWFkLmVzcDApKSkgXAorCSAgICAgIGVpcCA9ICgoc3RydWN0IHB0X3JlZ3MgKikgKHRzayktPnRocmVhZC5lc3AwKS0+cGM7IFwKKwllaXA7IH0pCisjZGVmaW5lCUtTVEtfRVNQKHRzaykJKCh0c2spID09IGN1cnJlbnQgPyByZHVzcCgpIDogKHRzayktPnRocmVhZC51c3ApCisKKyNkZWZpbmUgY3B1X3JlbGF4KCkJYmFycmllcigpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9wdHJhY2UuaCBiL2luY2x1ZGUvYXNtLW02OGsvcHRyYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdlNzYzZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvcHRyYWNlLmgKQEAgLTAsMCArMSw4MCBAQAorI2lmbmRlZiBfTTY4S19QVFJBQ0VfSAorI2RlZmluZSBfTTY4S19QVFJBQ0VfSAorCisjZGVmaW5lIFBUX0QxCSAgIDAKKyNkZWZpbmUgUFRfRDIJICAgMQorI2RlZmluZSBQVF9EMwkgICAyCisjZGVmaW5lIFBUX0Q0CSAgIDMKKyNkZWZpbmUgUFRfRDUJICAgNAorI2RlZmluZSBQVF9ENgkgICA1CisjZGVmaW5lIFBUX0Q3CSAgIDYKKyNkZWZpbmUgUFRfQTAJICAgNworI2RlZmluZSBQVF9BMQkgICA4CisjZGVmaW5lIFBUX0EyCSAgIDkKKyNkZWZpbmUgUFRfQTMJICAgMTAKKyNkZWZpbmUgUFRfQTQJICAgMTEKKyNkZWZpbmUgUFRfQTUJICAgMTIKKyNkZWZpbmUgUFRfQTYJICAgMTMKKyNkZWZpbmUgUFRfRDAJICAgMTQKKyNkZWZpbmUgUFRfVVNQCSAgIDE1CisjZGVmaW5lIFBUX09SSUdfRDAgMTYKKyNkZWZpbmUgUFRfU1IJICAgMTcKKyNkZWZpbmUgUFRfUEMJICAgMTgKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworLyogdGhpcyBzdHJ1Y3QgZGVmaW5lcyB0aGUgd2F5IHRoZSByZWdpc3RlcnMgYXJlIHN0b3JlZCBvbiB0aGUKKyAgIHN0YWNrIGR1cmluZyBhIHN5c3RlbSBjYWxsLiAqLworCitzdHJ1Y3QgcHRfcmVncyB7CisgIGxvbmcgICAgIGQxOworICBsb25nICAgICBkMjsKKyAgbG9uZyAgICAgZDM7CisgIGxvbmcgICAgIGQ0OworICBsb25nICAgICBkNTsKKyAgbG9uZyAgICAgYTA7CisgIGxvbmcgICAgIGExOworICBsb25nICAgICBhMjsKKyAgbG9uZyAgICAgZDA7CisgIGxvbmcgICAgIG9yaWdfZDA7CisgIGxvbmcgICAgIHN0a2FkajsKKyAgdW5zaWduZWQgc2hvcnQgc3I7CisgIHVuc2lnbmVkIGxvbmcgIHBjOworICB1bnNpZ25lZCBmb3JtYXQgOiAgNDsgLyogZnJhbWUgZm9ybWF0IHNwZWNpZmllciAqLworICB1bnNpZ25lZCB2ZWN0b3IgOiAxMjsgLyogdmVjdG9yIG9mZnNldCAqLworfTsKKworLyoKKyAqIFRoaXMgaXMgdGhlIGV4dGVuZGVkIHN0YWNrIHVzZWQgYnkgc2lnbmFsIGhhbmRsZXJzIGFuZCB0aGUgY29udGV4dAorICogc3dpdGNoZXI6IGl0J3MgcHVzaGVkIGFmdGVyIHRoZSBub3JtYWwgInN0cnVjdCBwdF9yZWdzIi4KKyAqLworc3RydWN0IHN3aXRjaF9zdGFjayB7CisJdW5zaWduZWQgbG9uZyAgZDY7CisJdW5zaWduZWQgbG9uZyAgZDc7CisJdW5zaWduZWQgbG9uZyAgYTM7CisJdW5zaWduZWQgbG9uZyAgYTQ7CisJdW5zaWduZWQgbG9uZyAgYTU7CisJdW5zaWduZWQgbG9uZyAgYTY7CisJdW5zaWduZWQgbG9uZyAgcmV0cGM7Cit9OworCisvKiBBcmJpdHJhcmlseSBjaG9vc2UgdGhlIHNhbWUgcHRyYWNlIG51bWJlcnMgYXMgdXNlZCBieSB0aGUgU3BhcmMgY29kZS4gKi8KKyNkZWZpbmUgUFRSQUNFX0dFVFJFR1MgICAgICAgICAgICAxMgorI2RlZmluZSBQVFJBQ0VfU0VUUkVHUyAgICAgICAgICAgIDEzCisjZGVmaW5lIFBUUkFDRV9HRVRGUFJFR1MgICAgICAgICAgMTQKKyNkZWZpbmUgUFRSQUNFX1NFVEZQUkVHUyAgICAgICAgICAxNQorCisjaWZkZWYgX19LRVJORUxfXworCisjaWZuZGVmIFBTX1MKKyNkZWZpbmUgUFNfUyAgKDB4MjAwMCkKKyNkZWZpbmUgUFNfTSAgKDB4MTAwMCkKKyNlbmRpZgorCisjZGVmaW5lIHVzZXJfbW9kZShyZWdzKSAoISgocmVncyktPnNyICYgUFNfUykpCisjZGVmaW5lIGluc3RydWN0aW9uX3BvaW50ZXIocmVncykgKChyZWdzKS0+cGMpCisjZGVmaW5lIHByb2ZpbGVfcGMocmVncykgaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKQorZXh0ZXJuIHZvaWQgc2hvd19yZWdzKHN0cnVjdCBwdF9yZWdzICopOworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKyNlbmRpZiAvKiBfTTY4S19QVFJBQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9xNDBfbWFzdGVyLmggYi9pbmNsdWRlL2FzbS1tNjhrL3E0MF9tYXN0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTA3YTA5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9xNDBfbWFzdGVyLmgKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIFE0MCBtYXN0ZXIgQ2hpcCBDb250cm9sCisgKiBSVEMgc3R1ZmYgbWVyZ2VkIGZvciBjb21wYWN0bmVzLi4KKyovCisKKyNpZm5kZWYgX1E0MF9NQVNURVJfSAorI2RlZmluZSBfUTQwX01BU1RFUl9ICisKKyNpbmNsdWRlIDxhc20vcmF3X2lvLmg+CisKKworI2RlZmluZSBxNDBfbWFzdGVyX2FkZHIgMHhmZjAwMDAwMAorCisjZGVmaW5lIElJUlFfUkVHICAgICAgICAgICAgMHgwICAgICAgIC8qIGludGVybmFsIElSUSByZWcgKi8KKyNkZWZpbmUgRUlSUV9SRUcgICAgICAgICAgICAweDQgICAgICAgLyogZXh0ZXJuYWwgLi4uICovCisjZGVmaW5lIEtFWUNPREVfUkVHICAgICAgICAgMHgxYyAgICAgIC8qIHZhbHVlIG9mIHJlY2VpdmVkIHNjYW5jb2RlICAqLworI2RlZmluZSBESVNQTEFZX0NPTlRST0xfUkVHIDB4MTgKKyNkZWZpbmUgRlJBTUVfQ0xFQVJfUkVHICAgICAweDI0CisjZGVmaW5lIExFRF9SRUcgICAgICAgICAgICAgMHgzMAorCisjZGVmaW5lIFE0MF9MRURfT04oKSAgICAgICAgbWFzdGVyX291dGIoMSxMRURfUkVHKQorI2RlZmluZSBRNDBfTEVEX09GRigpICAgICAgIG1hc3Rlcl9vdXRiKDAsTEVEX1JFRykKKworI2RlZmluZSBJTlRFUlJVUFRfUkVHICAgICAgIElJUlFfUkVHICAvKiAibmF0aXZlIiBpbnRzICovCisjZGVmaW5lIEtFWV9JUlFfRU5BQkxFX1JFRyAgMHgwOCAgICAgIC8qKi8KKyNkZWZpbmUgS0VZQk9BUkRfVU5MT0NLX1JFRyAweDIwICAgICAgLyogY2xlYXIga2IgaW50ICovCisKKyNkZWZpbmUgU0FNUExFX0VOQUJMRV9SRUcgICAweDE0ICAgICAgLyogZ2VuZXJhdGUgU0FNUExFIGludHMgKi8KKyNkZWZpbmUgU0FNUExFX1JBVEVfUkVHICAgICAweDJjCisjZGVmaW5lIFNBTVBMRV9DTEVBUl9SRUcgICAgMHgyOAorI2RlZmluZSBTQU1QTEVfTE9XICAgICAgICAgIDB4MDAKKyNkZWZpbmUgU0FNUExFX0hJR0ggICAgICAgICAweDAxCisKKyNkZWZpbmUgRlJBTUVfUkFURV9SRUcgICAgICAgMHgzOCAgICAgIC8qIGdlbmVyYXRlIEZSQU1FIGludHMgYXQgMjAwIEhaIHJhdGUgKi8KKworI2lmIDAKKyNkZWZpbmUgU0VSX0VOQUJMRV9SRUcgICAgICAweDBjICAgICAgLyogYWxsb3cgc2VyaWFsIGludHMgdG8gYmUgZ2VuZXJhdGVkICovCisjZW5kaWYKKyNkZWZpbmUgRVhUX0VOQUJMRV9SRUcgICAgICAweDEwICAgICAgLyogLi4uIHJlc3Qgb2YgdGhlIElTQSBpbnRzIC4uLiAqLworCisKKyNkZWZpbmUgbWFzdGVyX2luYihfcmVnXykgICAgICBpbl84KCh1bnNpZ25lZCBjaGFyICopcTQwX21hc3Rlcl9hZGRyK19yZWdfKQorI2RlZmluZSBtYXN0ZXJfb3V0YihfYl8sX3JlZ18pICBvdXRfOCgodW5zaWduZWQgY2hhciAqKXE0MF9tYXN0ZXJfYWRkcitfcmVnXyxfYl8pCisKKy8qIFJUQyBkZWZpbmVzICovCisKKyNkZWZpbmUgUTQwX1JUQ19CQVNFCSAgICAoMHhmZjAyMWZmYykKKworI2RlZmluZSBRNDBfUlRDX1lFQVIgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoUTQwX1JUQ19CQVNFKzApKQorI2RlZmluZSBRNDBfUlRDX01OVEggICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoUTQwX1JUQ19CQVNFLTQpKQorI2RlZmluZSBRNDBfUlRDX0RBVEUgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoUTQwX1JUQ19CQVNFLTgpKQorI2RlZmluZSBRNDBfUlRDX0RPVyAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoUTQwX1JUQ19CQVNFLTEyKSkKKyNkZWZpbmUgUTQwX1JUQ19IT1VSICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKFE0MF9SVENfQkFTRS0xNikpCisjZGVmaW5lIFE0MF9SVENfTUlOUyAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKShRNDBfUlRDX0JBU0UtMjApKQorI2RlZmluZSBRNDBfUlRDX1NFQ1MgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoUTQwX1JUQ19CQVNFLTI0KSkKKyNkZWZpbmUgUTQwX1JUQ19DVFJMICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKFE0MF9SVENfQkFTRS0yOCkpCisKKy8qIHNvbWUgY29udHJvbCBiaXRzICovCisjZGVmaW5lIFE0MF9SVENfUkVBRCAgIDY0ICAvKiBwcmVwYXJlIGZvciByZWFkaW5nICovCisjZGVmaW5lIFE0MF9SVENfV1JJVEUgIDEyOAorCisvKiBkZWZpbmUgc29tZSBRNDAgc3BlY2lmaWMgaW50cyAqLworI2luY2x1ZGUgInE0MGludHMuaCIKKworLyogbWlzYyBkZWZzICovCisjZGVmaW5lIERBQ19MRUZUICAoKHVuc2lnbmVkIGNoYXIgKikweGZmMDA4MDAwKQorI2RlZmluZSBEQUNfUklHSFQgKCh1bnNpZ25lZCBjaGFyICopMHhmZjAwODAwNCkKKworI2VuZGlmIC8qIF9RNDBfTUFTVEVSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvcTQwaW50cy5oIGIvaW5jbHVkZS9hc20tbTY4ay9xNDBpbnRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q5NzBhZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvcTQwaW50cy5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiBjb250YWlucyBzb21lIFE0MCByZWxhdGVkIGludGVycnVwdCBkZWZpbml0aW9ucworICovCisKKyNkZWZpbmUgUTQwX0lSUV9NQVggICAgICAoMzQpCisKKyNkZWZpbmUgUTQwX0lSUV9TQU1QTEUgICAgKDM0KQorI2RlZmluZSBRNDBfSVJRX0tFWUJPQVJEICgzMikKKyNkZWZpbmUgUTQwX0lSUV9GUkFNRSAgICAoMzMpCisKKworLyogbWFza3MgZm9yIGludGVycnVwdCByZWdpb3N0ZXJzKi8KKy8qIGludGVybmFsLCBJSVJRX1JFRyAqLworI2RlZmluZSBRNDBfSVJRX0tFWUJfTUFTSyAgICAoMikKKyNkZWZpbmUgUTQwX0lSUV9TRVJfTUFTSyAgICAgKDE8PDIpCisjZGVmaW5lIFE0MF9JUlFfRlJBTUVfTUFTSyAgICgxPDwzKQorI2RlZmluZSBRNDBfSVJRX0VYVF9NQVNLICAgICAoMTw8NCkgICAgLyogaXMgYSBFSVJRICovCisvKiBlaXJxLCBFSVJRX1JFRyAqLworI2RlZmluZSBRNDBfSVJRM19NQVNLICAgICAgICAoMSkKKyNkZWZpbmUgUTQwX0lSUTRfTUFTSyAgICAgICAgKDE8PDEpCisjZGVmaW5lIFE0MF9JUlE1X01BU0sgICAgICAgICgxPDwyKQorI2RlZmluZSBRNDBfSVJRNl9NQVNLICAgICAgICAoMTw8MykKKyNkZWZpbmUgUTQwX0lSUTdfTUFTSyAgICAgICAgKDE8PDQpCisjZGVmaW5lIFE0MF9JUlExMF9NQVNLICAgICAgICgxPDw1KQorI2RlZmluZSBRNDBfSVJRMTRfTUFTSyAgICAgICAoMTw8NikKKyNkZWZpbmUgUTQwX0lSUTE1X01BU0sgICAgICAgKDE8PDcpCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIHE0MF9wcm9iZV9pcnFfb24gKHZvaWQpOworZXh0ZXJuIGludCBxNDBfcHJvYmVfaXJxX29mZiAodW5zaWduZWQgbG9uZyBpcnFzKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvcmF3X2lvLmggYi9pbmNsdWRlL2FzbS1tNjhrL3Jhd19pby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0MWYwYTgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL3Jhd19pby5oCkBAIC0wLDAgKzEsMzQyIEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tbTY4ay9yYXdfaW8uaAorICoKKyAqIDEwLzIwLzAwIFJaOiAtIGNyZWF0ZWQgZnJvbSBiaXRzIG9mIGlvLmggYW5kIGlkZS5oIHRvIGNsZWFudXAgbmFtZXNwYWNlCisgKgorICovCisKKyNpZm5kZWYgX1JBV19JT19ICisjZGVmaW5lIF9SQVdfSU9fSAorCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisKKworLyogVmFsdWVzIGZvciBub2NhY2hlZmxhZyBhbmQgY21vZGUgKi8KKyNkZWZpbmUgSU9NQVBfRlVMTF9DQUNISU5HCQkwCisjZGVmaW5lIElPTUFQX05PQ0FDSEVfU0VSCQkxCisjZGVmaW5lIElPTUFQX05PQ0FDSEVfTk9OU0VSCQkyCisjZGVmaW5lIElPTUFQX1dSSVRFVEhST1VHSAkJMworCitleHRlcm4gdm9pZCBpb3VubWFwKHZvaWQgKmFkZHIpOworCitleHRlcm4gdm9pZCAqX19pb3JlbWFwKHVuc2lnbmVkIGxvbmcgcGh5c2FkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJICAgICAgIGludCBjYWNoZWZsYWcpOworZXh0ZXJuIHZvaWQgX19pb3VubWFwKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CisKKworLyogKytyb21hbjogVGhlIGFzc2lnbm1lbnRzIHRvIHRlbXAuIHZhcnMgYXZvaWQgdGhhdCBnY2Mgc29tZXRpbWVzIGdlbmVyYXRlcworICogdHdvIGFjY2Vzc2VzIHRvIG1lbW9yeSwgd2hpY2ggbWF5IGJlIHVuZGVzaXJhYmxlIGZvciBzb21lIGRldmljZXMuCisgKi8KKyNkZWZpbmUgaW5fOChhZGRyKSBcCisgICAgKHsgdTggX192ID0gKCoodm9sYXRpbGUgdTggKikgKGFkZHIpKTsgX192OyB9KQorI2RlZmluZSBpbl9iZTE2KGFkZHIpIFwKKyAgICAoeyB1MTYgX192ID0gKCoodm9sYXRpbGUgdTE2ICopIChhZGRyKSk7IF9fdjsgfSkKKyNkZWZpbmUgaW5fYmUzMihhZGRyKSBcCisgICAgKHsgdTMyIF9fdiA9ICgqKHZvbGF0aWxlIHUzMiAqKSAoYWRkcikpOyBfX3Y7IH0pCisjZGVmaW5lIGluX2xlMTYoYWRkcikgXAorICAgICh7IHUxNiBfX3YgPSBsZTE2X3RvX2NwdSgqKHZvbGF0aWxlIHUxNiAqKSAoYWRkcikpOyBfX3Y7IH0pCisjZGVmaW5lIGluX2xlMzIoYWRkcikgXAorICAgICh7IHUzMiBfX3YgPSBsZTMyX3RvX2NwdSgqKHZvbGF0aWxlIHUzMiAqKSAoYWRkcikpOyBfX3Y7IH0pCisKKyNkZWZpbmUgb3V0XzgoYWRkcixiKSAodm9pZCkoKCoodm9sYXRpbGUgdTggKikgKGFkZHIpKSA9IChiKSkKKyNkZWZpbmUgb3V0X2JlMTYoYWRkcix3KSAodm9pZCkoKCoodm9sYXRpbGUgdTE2ICopIChhZGRyKSkgPSAodykpCisjZGVmaW5lIG91dF9iZTMyKGFkZHIsbCkgKHZvaWQpKCgqKHZvbGF0aWxlIHUzMiAqKSAoYWRkcikpID0gKGwpKQorI2RlZmluZSBvdXRfbGUxNihhZGRyLHcpICh2b2lkKSgoKih2b2xhdGlsZSB1MTYgKikgKGFkZHIpKSA9IGNwdV90b19sZTE2KHcpKQorI2RlZmluZSBvdXRfbGUzMihhZGRyLGwpICh2b2lkKSgoKih2b2xhdGlsZSB1MzIgKikgKGFkZHIpKSA9IGNwdV90b19sZTMyKGwpKQorCisjZGVmaW5lIHJhd19pbmIgaW5fOAorI2RlZmluZSByYXdfaW53IGluX2JlMTYKKyNkZWZpbmUgcmF3X2lubCBpbl9iZTMyCisKKyNkZWZpbmUgcmF3X291dGIodmFsLHBvcnQpIG91dF84KChwb3J0KSwodmFsKSkKKyNkZWZpbmUgcmF3X291dHcodmFsLHBvcnQpIG91dF9iZTE2KChwb3J0KSwodmFsKSkKKyNkZWZpbmUgcmF3X291dGwodmFsLHBvcnQpIG91dF9iZTMyKChwb3J0KSwodmFsKSkKKworc3RhdGljIGlubGluZSB2b2lkIHJhd19pbnNiKHZvbGF0aWxlIHU4ICpwb3J0LCB1OCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuKQoreworCXVuc2lnbmVkIGludCBpOworCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKwkJKmJ1ZisrID0gaW5fOChwb3J0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJhd19vdXRzYih2b2xhdGlsZSB1OCAqcG9ydCwgY29uc3QgdTggKmJ1ZiwKKwkJCSAgICAgdW5zaWduZWQgaW50IGxlbikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisJCW91dF84KHBvcnQsICpidWYrKyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByYXdfaW5zdyh2b2xhdGlsZSB1MTYgKnBvcnQsIHUxNiAqYnVmLCB1bnNpZ25lZCBpbnQgbnIpCit7CisJdW5zaWduZWQgaW50IHRtcDsKKworCWlmIChuciAmIDE1KSB7CisJCXRtcCA9IChuciAmIDE1KSAtIDE7CisJCWFzbSB2b2xhdGlsZSAoCisJCQkiMTogbW92ZXcgJTJALCUwQCs7IGRicmEgJTEsMWIiCisJCQk6ICI9YSIgKGJ1ZiksICI9ZCIgKHRtcCkKKwkJCTogImEiIChwb3J0KSwgIjAiIChidWYpLAorCQkJICAiMSIgKHRtcCkpOworCX0KKwlpZiAobnIgPj4gNCkgeworCQl0bXAgPSAobnIgPj4gNCkgLSAxOworCQlhc20gdm9sYXRpbGUgKAorCQkJIjE6ICIKKwkJCSJtb3ZldyAlMkAsJTBAKzsgIgorCQkJIm1vdmV3ICUyQCwlMEArOyAiCisJCQkibW92ZXcgJTJALCUwQCs7ICIKKwkJCSJtb3ZldyAlMkAsJTBAKzsgIgorCQkJIm1vdmV3ICUyQCwlMEArOyAiCisJCQkibW92ZXcgJTJALCUwQCs7ICIKKwkJCSJtb3ZldyAlMkAsJTBAKzsgIgorCQkJIm1vdmV3ICUyQCwlMEArOyAiCisJCQkibW92ZXcgJTJALCUwQCs7ICIKKwkJCSJtb3ZldyAlMkAsJTBAKzsgIgorCQkJIm1vdmV3ICUyQCwlMEArOyAiCisJCQkibW92ZXcgJTJALCUwQCs7ICIKKwkJCSJtb3ZldyAlMkAsJTBAKzsgIgorCQkJIm1vdmV3ICUyQCwlMEArOyAiCisJCQkibW92ZXcgJTJALCUwQCs7ICIKKwkJCSJtb3ZldyAlMkAsJTBAKzsgIgorCQkJImRicmEgJTEsMWIiCisJCQk6ICI9YSIgKGJ1ZiksICI9ZCIgKHRtcCkKKwkJCTogImEiIChwb3J0KSwgIjAiIChidWYpLAorCQkJICAiMSIgKHRtcCkpOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIHJhd19vdXRzdyh2b2xhdGlsZSB1MTYgKnBvcnQsIGNvbnN0IHUxNiAqYnVmLAorCQkJICAgICB1bnNpZ25lZCBpbnQgbnIpCit7CisJdW5zaWduZWQgaW50IHRtcDsKKworCWlmIChuciAmIDE1KSB7CisJCXRtcCA9IChuciAmIDE1KSAtIDE7CisJCWFzbSB2b2xhdGlsZSAoCisJCQkiMTogbW92ZXcgJTBAKywlMkA7IGRicmEgJTEsMWIiCisJCQk6ICI9YSIgKGJ1ZiksICI9ZCIgKHRtcCkKKwkJCTogImEiIChwb3J0KSwgIjAiIChidWYpLAorCQkJICAiMSIgKHRtcCkpOworCX0KKwlpZiAobnIgPj4gNCkgeworCQl0bXAgPSAobnIgPj4gNCkgLSAxOworCQlhc20gdm9sYXRpbGUgKAorCQkJIjE6ICIKKwkJCSJtb3ZldyAlMEArLCUyQDsgIgorCQkJIm1vdmV3ICUwQCssJTJAOyAiCisJCQkibW92ZXcgJTBAKywlMkA7ICIKKwkJCSJtb3ZldyAlMEArLCUyQDsgIgorCQkJIm1vdmV3ICUwQCssJTJAOyAiCisJCQkibW92ZXcgJTBAKywlMkA7ICIKKwkJCSJtb3ZldyAlMEArLCUyQDsgIgorCQkJIm1vdmV3ICUwQCssJTJAOyAiCisJCQkibW92ZXcgJTBAKywlMkA7ICIKKwkJCSJtb3ZldyAlMEArLCUyQDsgIgorCQkJIm1vdmV3ICUwQCssJTJAOyAiCisJCQkibW92ZXcgJTBAKywlMkA7ICIKKwkJCSJtb3ZldyAlMEArLCUyQDsgIgorCQkJIm1vdmV3ICUwQCssJTJAOyAiCisJCQkibW92ZXcgJTBAKywlMkA7ICIKKwkJCSJtb3ZldyAlMEArLCUyQDsgIgorCQkJImRicmEgJTEsMWIiCisJCQk6ICI9YSIgKGJ1ZiksICI9ZCIgKHRtcCkKKwkJCTogImEiIChwb3J0KSwgIjAiIChidWYpLAorCQkJICAiMSIgKHRtcCkpOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIHJhd19pbnNsKHZvbGF0aWxlIHUzMiAqcG9ydCwgdTMyICpidWYsIHVuc2lnbmVkIGludCBucikKK3sKKwl1bnNpZ25lZCBpbnQgdG1wOworCisJaWYgKG5yICYgMTUpIHsKKwkJdG1wID0gKG5yICYgMTUpIC0gMTsKKwkJYXNtIHZvbGF0aWxlICgKKwkJCSIxOiBtb3ZlbCAlMkAsJTBAKzsgZGJyYSAlMSwxYiIKKwkJCTogIj1hIiAoYnVmKSwgIj1kIiAodG1wKQorCQkJOiAiYSIgKHBvcnQpLCAiMCIgKGJ1ZiksCisJCQkgICIxIiAodG1wKSk7CisJfQorCWlmIChuciA+PiA0KSB7CisJCXRtcCA9IChuciA+PiA0KSAtIDE7CisJCWFzbSB2b2xhdGlsZSAoCisJCQkiMTogIgorCQkJIm1vdmVsICUyQCwlMEArOyAiCisJCQkibW92ZWwgJTJALCUwQCs7ICIKKwkJCSJtb3ZlbCAlMkAsJTBAKzsgIgorCQkJIm1vdmVsICUyQCwlMEArOyAiCisJCQkibW92ZWwgJTJALCUwQCs7ICIKKwkJCSJtb3ZlbCAlMkAsJTBAKzsgIgorCQkJIm1vdmVsICUyQCwlMEArOyAiCisJCQkibW92ZWwgJTJALCUwQCs7ICIKKwkJCSJtb3ZlbCAlMkAsJTBAKzsgIgorCQkJIm1vdmVsICUyQCwlMEArOyAiCisJCQkibW92ZWwgJTJALCUwQCs7ICIKKwkJCSJtb3ZlbCAlMkAsJTBAKzsgIgorCQkJIm1vdmVsICUyQCwlMEArOyAiCisJCQkibW92ZWwgJTJALCUwQCs7ICIKKwkJCSJtb3ZlbCAlMkAsJTBAKzsgIgorCQkJIm1vdmVsICUyQCwlMEArOyAiCisJCQkiZGJyYSAlMSwxYiIKKwkJCTogIj1hIiAoYnVmKSwgIj1kIiAodG1wKQorCQkJOiAiYSIgKHBvcnQpLCAiMCIgKGJ1ZiksCisJCQkgICIxIiAodG1wKSk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmF3X291dHNsKHZvbGF0aWxlIHUzMiAqcG9ydCwgY29uc3QgdTMyICpidWYsCisJCQkgICAgIHVuc2lnbmVkIGludCBucikKK3sKKwl1bnNpZ25lZCBpbnQgdG1wOworCisJaWYgKG5yICYgMTUpIHsKKwkJdG1wID0gKG5yICYgMTUpIC0gMTsKKwkJYXNtIHZvbGF0aWxlICgKKwkJCSIxOiBtb3ZlbCAlMEArLCUyQDsgZGJyYSAlMSwxYiIKKwkJCTogIj1hIiAoYnVmKSwgIj1kIiAodG1wKQorCQkJOiAiYSIgKHBvcnQpLCAiMCIgKGJ1ZiksCisJCQkgICIxIiAodG1wKSk7CisJfQorCWlmIChuciA+PiA0KSB7CisJCXRtcCA9IChuciA+PiA0KSAtIDE7CisJCWFzbSB2b2xhdGlsZSAoCisJCQkiMTogIgorCQkJIm1vdmVsICUwQCssJTJAOyAiCisJCQkibW92ZWwgJTBAKywlMkA7ICIKKwkJCSJtb3ZlbCAlMEArLCUyQDsgIgorCQkJIm1vdmVsICUwQCssJTJAOyAiCisJCQkibW92ZWwgJTBAKywlMkA7ICIKKwkJCSJtb3ZlbCAlMEArLCUyQDsgIgorCQkJIm1vdmVsICUwQCssJTJAOyAiCisJCQkibW92ZWwgJTBAKywlMkA7ICIKKwkJCSJtb3ZlbCAlMEArLCUyQDsgIgorCQkJIm1vdmVsICUwQCssJTJAOyAiCisJCQkibW92ZWwgJTBAKywlMkA7ICIKKwkJCSJtb3ZlbCAlMEArLCUyQDsgIgorCQkJIm1vdmVsICUwQCssJTJAOyAiCisJCQkibW92ZWwgJTBAKywlMkA7ICIKKwkJCSJtb3ZlbCAlMEArLCUyQDsgIgorCQkJIm1vdmVsICUwQCssJTJAOyAiCisJCQkiZGJyYSAlMSwxYiIKKwkJCTogIj1hIiAoYnVmKSwgIj1kIiAodG1wKQorCQkJOiAiYSIgKHBvcnQpLCAiMCIgKGJ1ZiksCisJCQkgICIxIiAodG1wKSk7CisJfQorfQorCisKK3N0YXRpYyBpbmxpbmUgdm9pZCByYXdfaW5zd19zd2Fwdyh2b2xhdGlsZSB1MTYgKnBvcnQsIHUxNiAqYnVmLAorCQkJCSAgdW5zaWduZWQgaW50IG5yKQoreworICAgIGlmICgobnIpICUgOCkKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXworCSAgICAgICAoIlx0bW92ZWwgJTAsJS9hMFxuXHQiCisJCSJtb3ZlbCAlMSwlL2ExXG5cdCIKKwkJIm1vdmVsICUyLCUvZDZcblx0IgorCQkic3VicWwgIzEsJS9kNlxuIgorCQkiMTpcdG1vdmV3ICUvYTBALCUvZDBcblx0IgorCQkicm9sdyAgIzgsJS9kMFxuXHQiCisJCSJtb3ZldyAlL2QwLCUvYTFAK1xuXHQiCisJCSJkYnJhICUvZDYsMWIiCisJCToKKwkJOiAiZyIgKHBvcnQpLCAiZyIgKGJ1ZiksICJnIiAobnIpCisJCTogImQwIiwgImEwIiwgImExIiwgImQ2Iik7CisgICAgZWxzZQorCV9fYXNtX18gX192b2xhdGlsZV9fCisJICAgICAgICgibW92ZWwgJTAsJS9hMFxuXHQiCisJCSJtb3ZlbCAlMSwlL2ExXG5cdCIKKwkJIm1vdmVsICUyLCUvZDZcblx0IgorCQkibHNybCAgIzMsJS9kNlxuXHQiCisJCSJzdWJxbCAjMSwlL2Q2XG4iCisJCSIxOlx0bW92ZXcgJS9hMEAsJS9kMFxuXHQiCisJCSJyb2x3ICAjOCwlL2QwXG5cdCIKKwkJIm1vdmV3ICUvZDAsJS9hMUArXG5cdCIKKwkJIm1vdmV3ICUvYTBALCUvZDBcblx0IgorCQkicm9sdyAgIzgsJS9kMFxuXHQiCisJCSJtb3ZldyAlL2QwLCUvYTFAK1xuXHQiCisJCSJtb3ZldyAlL2EwQCwlL2QwXG5cdCIKKwkJInJvbHcgICM4LCUvZDBcblx0IgorCQkibW92ZXcgJS9kMCwlL2ExQCtcblx0IgorCQkibW92ZXcgJS9hMEAsJS9kMFxuXHQiCisJCSJyb2x3ICAjOCwlL2QwXG5cdCIKKwkJIm1vdmV3ICUvZDAsJS9hMUArXG5cdCIKKwkJIm1vdmV3ICUvYTBALCUvZDBcblx0IgorCQkicm9sdyAgIzgsJS9kMFxuXHQiCisJCSJtb3ZldyAlL2QwLCUvYTFAK1xuXHQiCisJCSJtb3ZldyAlL2EwQCwlL2QwXG5cdCIKKwkJInJvbHcgICM4LCUvZDBcblx0IgorCQkibW92ZXcgJS9kMCwlL2ExQCtcblx0IgorCQkibW92ZXcgJS9hMEAsJS9kMFxuXHQiCisJCSJyb2x3ICAjOCwlL2QwXG5cdCIKKwkJIm1vdmV3ICUvZDAsJS9hMUArXG5cdCIKKwkJIm1vdmV3ICUvYTBALCUvZDBcblx0IgorCQkicm9sdyAgIzgsJS9kMFxuXHQiCisJCSJtb3ZldyAlL2QwLCUvYTFAK1xuXHQiCisJCSJkYnJhICUvZDYsMWIiCisgICAgICAgICAgICAgICAgOgorCQk6ICJnIiAocG9ydCksICJnIiAoYnVmKSwgImciIChucikKKwkJOiAiZDAiLCAiYTAiLCAiYTEiLCAiZDYiKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJhd19vdXRzd19zd2Fwdyh2b2xhdGlsZSB1MTYgKnBvcnQsIGNvbnN0IHUxNiAqYnVmLAorCQkJCSAgIHVuc2lnbmVkIGludCBucikKK3sKKyAgICBpZiAoKG5yKSAlIDgpCisJX19hc21fXyBfX3ZvbGF0aWxlX18KKwkgICAgICAgKCJtb3ZlbCAlMCwlL2EwXG5cdCIKKwkJIm1vdmVsICUxLCUvYTFcblx0IgorCQkibW92ZWwgJTIsJS9kNlxuXHQiCisJCSJzdWJxbCAjMSwlL2Q2XG4iCisJCSIxOlx0bW92ZXcgJS9hMUArLCUvZDBcblx0IgorCQkicm9sdyAgIzgsJS9kMFxuXHQiCisJCSJtb3ZldyAlL2QwLCUvYTBAXG5cdCIKKwkJImRicmEgJS9kNiwxYiIKKyAgICAgICAgICAgICAgICA6CisJCTogImciIChwb3J0KSwgImciIChidWYpLCAiZyIgKG5yKQorCQk6ICJkMCIsICJhMCIsICJhMSIsICJkNiIpOworICAgIGVsc2UKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXworCSAgICAgICAoIm1vdmVsICUwLCUvYTBcblx0IgorCQkibW92ZWwgJTEsJS9hMVxuXHQiCisJCSJtb3ZlbCAlMiwlL2Q2XG5cdCIKKwkJImxzcmwgICMzLCUvZDZcblx0IgorCQkic3VicWwgIzEsJS9kNlxuIgorCQkiMTpcdG1vdmV3ICUvYTFAKywlL2QwXG5cdCIKKwkJInJvbHcgICM4LCUvZDBcblx0IgorCQkibW92ZXcgJS9kMCwlL2EwQFxuXHQiCisJCSJtb3ZldyAlL2ExQCssJS9kMFxuXHQiCisJCSJyb2x3ICAjOCwlL2QwXG5cdCIKKwkJIm1vdmV3ICUvZDAsJS9hMEBcblx0IgorCQkibW92ZXcgJS9hMUArLCUvZDBcblx0IgorCQkicm9sdyAgIzgsJS9kMFxuXHQiCisJCSJtb3ZldyAlL2QwLCUvYTBAXG5cdCIKKwkJIm1vdmV3ICUvYTFAKywlL2QwXG5cdCIKKwkJInJvbHcgICM4LCUvZDBcblx0IgorCQkibW92ZXcgJS9kMCwlL2EwQFxuXHQiCisJCSJtb3ZldyAlL2ExQCssJS9kMFxuXHQiCisJCSJyb2x3ICAjOCwlL2QwXG5cdCIKKwkJIm1vdmV3ICUvZDAsJS9hMEBcblx0IgorCQkibW92ZXcgJS9hMUArLCUvZDBcblx0IgorCQkicm9sdyAgIzgsJS9kMFxuXHQiCisJCSJtb3ZldyAlL2QwLCUvYTBAXG5cdCIKKwkJIm1vdmV3ICUvYTFAKywlL2QwXG5cdCIKKwkJInJvbHcgICM4LCUvZDBcblx0IgorCQkibW92ZXcgJS9kMCwlL2EwQFxuXHQiCisJCSJtb3ZldyAlL2ExQCssJS9kMFxuXHQiCisJCSJyb2x3ICAjOCwlL2QwXG5cdCIKKwkJIm1vdmV3ICUvZDAsJS9hMEBcblx0IgorCQkiZGJyYSAlL2Q2LDFiIgorICAgICAgICAgICAgICAgIDoKKwkJOiAiZyIgKHBvcnQpLCAiZyIgKGJ1ZiksICJnIiAobnIpCisJCTogImQwIiwgImEwIiwgImExIiwgImQ2Iik7Cit9CisKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9SQVdfSU9fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9yZXNvdXJjZS5oIGIvaW5jbHVkZS9hc20tbTY4ay9yZXNvdXJjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3ZDM1MDEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL3Jlc291cmNlLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9NNjhLX1JFU09VUkNFX0gKKyNkZWZpbmUgX002OEtfUkVTT1VSQ0VfSAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcmVzb3VyY2UuaD4KKworI2VuZGlmIC8qIF9NNjhLX1JFU09VUkNFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvcnRjLmggYi9pbmNsdWRlL2FzbS1tNjhrL3J0Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxNDA2ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL3J0Yy5oCkBAIC0wLDAgKzEsNzYgQEAKKy8qIGFzbS1tNjhrL3J0Yy5oCisgKgorICogQ29weXJpZ2h0IFJpY2hhcmQgWmlkbGlja3kKKyAqIGltcGxlbWVudGF0aW9uIGRldGFpbHMgZm9yIGdlbnJ0Yy9xNDBydGMgZHJpdmVyCisgKi8KKy8qIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gY29weSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhpcyBjb2RlCisgKiBpbiB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgVmVyc2lvbiAyIG9yIGxhdGVyLAorICogYXQgeW91ciBvcHRpb24uCisgKi8KKworI2lmbmRlZiBfQVNNX1JUQ19ICisjZGVmaW5lIF9BU01fUlRDX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgorI2luY2x1ZGUgPGFzbS9lcnJuby5oPgorI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CisKKyNkZWZpbmUgUlRDX1BJRSAweDQwCQkvKiBwZXJpb2RpYyBpbnRlcnJ1cHQgZW5hYmxlICovCisjZGVmaW5lIFJUQ19BSUUgMHgyMAkJLyogYWxhcm0gaW50ZXJydXB0IGVuYWJsZSAqLworI2RlZmluZSBSVENfVUlFIDB4MTAJCS8qIHVwZGF0ZS1maW5pc2hlZCBpbnRlcnJ1cHQgZW5hYmxlICovCisKKy8qIHNvbWUgZHVtbXkgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgUlRDX0JBVFRfQkFEIDB4MTAwCS8qIGJhdHRlcnkgYmFkICovCisjZGVmaW5lIFJUQ19TUVdFIDB4MDgJCS8qIGVuYWJsZSBzcXVhcmUtd2F2ZSBvdXRwdXQgKi8KKyNkZWZpbmUgUlRDX0RNX0JJTkFSWSAweDA0CS8qIGFsbCB0aW1lL2RhdGUgdmFsdWVzIGFyZSBCQ0QgaWYgY2xlYXIgKi8KKyNkZWZpbmUgUlRDXzI0SCAweDAyCQkvKiAyNCBob3VyIG1vZGUgLSBlbHNlIGhvdXJzIGJpdCA3IG1lYW5zIHBtICovCisjZGVmaW5lIFJUQ19EU1RfRU4gMHgwMQkgICAgICAgIC8qIGF1dG8gc3dpdGNoIERTVCAtIHdvcmtzIGYuIFVTQSBvbmx5ICovCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldF9ydGNfdGltZShzdHJ1Y3QgcnRjX3RpbWUgKnRpbWUpCit7CisJLyoKKwkgKiBPbmx5IHRoZSB2YWx1ZXMgdGhhdCB3ZSByZWFkIGZyb20gdGhlIFJUQyBhcmUgc2V0LiBXZSBsZWF2ZQorCSAqIHRtX3dkYXksIHRtX3lkYXkgYW5kIHRtX2lzZHN0IHVudG91Y2hlZC4gRXZlbiB0aG91Z2ggdGhlCisJICogUlRDIGhhcyBSVENfREFZX09GX1dFRUssIHdlIGlnbm9yZSBpdCwgYXMgaXQgaXMgb25seSB1cGRhdGVkCisJICogYnkgdGhlIFJUQyB3aGVuIGluaXRpYWxseSBzZXQgdG8gYSBub24temVybyB2YWx1ZS4KKwkgKi8KKwltYWNoX2h3Y2xrKDAsIHRpbWUpOworCXJldHVybiBSVENfMjRIOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZXRfcnRjX3RpbWUoc3RydWN0IHJ0Y190aW1lICp0aW1lKQoreworCXJldHVybiBtYWNoX2h3Y2xrKDEsIHRpbWUpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZXRfcnRjX3NzKHZvaWQpCit7CisJaWYgKG1hY2hfZ2V0X3NzKQorCQlyZXR1cm4gbWFjaF9nZXRfc3MoKTsKKwllbHNleworCQlzdHJ1Y3QgcnRjX3RpbWUgaDsKKworCQlnZXRfcnRjX3RpbWUoJmgpOworCQlyZXR1cm4gaC50bV9zZWM7CisJfQorfQorCitzdGF0aWMgaW5saW5lIGludCBnZXRfcnRjX3BsbChzdHJ1Y3QgcnRjX3BsbF9pbmZvICpwbGwpCit7CisJaWYgKG1hY2hfZ2V0X3J0Y19wbGwpCisJCXJldHVybiBtYWNoX2dldF9ydGNfcGxsKHBsbCk7CisJZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKK30KK3N0YXRpYyBpbmxpbmUgaW50IHNldF9ydGNfcGxsKHN0cnVjdCBydGNfcGxsX2luZm8gKnBsbCkKK3sKKwlpZiAobWFjaF9zZXRfcnRjX3BsbCkKKwkJcmV0dXJuIG1hY2hfc2V0X3J0Y19wbGwocGxsKTsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOworfQorI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9BU01fX1JUQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL3NidXMuaCBiL2luY2x1ZGUvYXNtLW02OGsvc2J1cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMjVjMDAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL3NidXMuaApAQCAtMCwwICsxLDUwIEBACisvKgorICogc29tZSBzYnVzIHN0cnVjdHVyZXMgYW5kIG1hY3JvcyB0byBtYWtlIHVzYWdlIG9mIHNidXMgZHJpdmVycyBwb3NzaWJsZQorICovCisKKyNpZm5kZWYgX19NNjhLX1NCVVNfSAorI2RlZmluZSBfX002OEtfU0JVU19ICisKK3N0cnVjdCBzYnVzX2RldiB7CisJc3RydWN0IHsKKwkJdW5zaWduZWQgaW50IHdoaWNoX2lvOworCQl1bnNpZ25lZCBpbnQgcGh5c19hZGRyOworCX0gcmVnX2FkZHJzWzFdOworfTsKKworZXh0ZXJuIHZvaWQgKnNwYXJjX2FsbG9jX2lvICh1MzIsIHZvaWQgKiwgaW50LCBjaGFyICosIHUzMiwgaW50KTsKKyNkZWZpbmUgc3BhcmNfYWxsb2NfaW8oYSxiLGMsZCxlLGYpCShhKQorCisjZGVmaW5lIEFSQ0hfU1VONCAgMAorCisvKiBzYnVzIElPIGZ1bmN0aW9ucyBzdG9sZW4gZnJvbSBpbmNsdWRlL2FzbS1zcGFyYy9pby5oIGZvciB0aGUgc2VyaWFsIGRyaXZlciAqLworLyogTm8gU0JVUyBvbiB0aGUgU3VuMywga2x1ZGdlIC0tIHNhbSAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgX3NidXNfd3JpdGViKHVuc2lnbmVkIGNoYXIgdmFsLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopYWRkciA9IHZhbDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIF9zYnVzX3JlYWRiKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopYWRkcjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9zYnVzX3dyaXRlbCh1bnNpZ25lZCBsb25nIHZhbCwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCSoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKWFkZHIgPSB2YWw7CisKK30KKworZXh0ZXJuIGlubGluZSB1bnNpZ25lZCBsb25nIF9zYnVzX3JlYWRsKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopYWRkcjsKK30KKworCisjZGVmaW5lIHNidXNfcmVhZGIoYSkgX3NidXNfcmVhZGIoKHVuc2lnbmVkIGxvbmcpYSkKKyNkZWZpbmUgc2J1c193cml0ZWIodiwgYSkgX3NidXNfd3JpdGViKHYsICh1bnNpZ25lZCBsb25nKWEpCisjZGVmaW5lIHNidXNfcmVhZGwoYSkgX3NidXNfcmVhZGwoKHVuc2lnbmVkIGxvbmcpYSkKKyNkZWZpbmUgc2J1c193cml0ZWwodiwgYSkgX3NidXNfd3JpdGVsKHYsICh1bnNpZ25lZCBsb25nKWEpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9zY2F0dGVybGlzdC5oIGIvaW5jbHVkZS9hc20tbTY4ay9zY2F0dGVybGlzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3YzliNWMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL3NjYXR0ZXJsaXN0LmgKQEAgLTAsMCArMSwxOSBAQAorI2lmbmRlZiBfTTY4S19TQ0FUVEVSTElTVF9ICisjZGVmaW5lIF9NNjhLX1NDQVRURVJMSVNUX0gKKworc3RydWN0IHNjYXR0ZXJsaXN0IHsKKwkvKiBUaGVzZSB0d28gYXJlIG9ubHkgdmFsaWQgaWYgQUREUkVTUyBtZW1iZXIgb2YgdGhpcworCSAqIHN0cnVjdCBpcyBOVUxMLgorCSAqLworCXN0cnVjdCBwYWdlICpwYWdlOworCXVuc2lnbmVkIGludCBvZmZzZXQ7CisKKwl1bnNpZ25lZCBpbnQgbGVuZ3RoOworCisJX191MzIgZHZtYV9hZGRyZXNzOyAvKiBBIHBsYWNlIHRvIGhhbmcgaG9zdC1zcGVjaWZpYyBhZGRyZXNzZXMgYXQuICovCit9OworCisvKiBUaGlzIGlzIGJvZ3VzIGFuZCBzaG91bGQgZ28gYXdheS4gKi8KKyNkZWZpbmUgSVNBX0RNQV9USFJFU0hPTEQgKDB4MDBmZmZmZmYpCisKKyNlbmRpZiAvKiAhKF9NNjhLX1NDQVRURVJMSVNUX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL3NlY3Rpb25zLmggYi9pbmNsdWRlL2FzbS1tNjhrL3NlY3Rpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY0OTY3ZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvc2VjdGlvbnMuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX0FTTV9NNjhLX1NFQ1RJT05TX0gKKyNkZWZpbmUgX0FTTV9NNjhLX1NFQ1RJT05TX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NlY3Rpb25zLmg+CisKKyNlbmRpZiAvKiBfQVNNX002OEtfU0VDVElPTlNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9zZWdtZW50LmggYi9pbmNsdWRlL2FzbS1tNjhrL3NlZ21lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjBiMmQzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9zZWdtZW50LmgKQEAgLTAsMCArMSw1NyBAQAorI2lmbmRlZiBfTTY4S19TRUdNRU5UX0gKKyNkZWZpbmUgX002OEtfU0VHTUVOVF9ICisKKy8qIGRlZmluZSBjb25zdGFudHMgKi8KKy8qIEFkZHJlc3Mgc3BhY2VzIChGQzAtRkMyKSAqLworI2RlZmluZSBVU0VSX0RBVEEgICAgICgxKQorI2lmbmRlZiBfX1VTRVJfRFMKKyNkZWZpbmUgX19VU0VSX0RTICAgICAoVVNFUl9EQVRBKQorI2VuZGlmCisjZGVmaW5lIFVTRVJfUFJPR1JBTSAgKDIpCisjZGVmaW5lIFNVUEVSX0RBVEEgICAgKDUpCisjaWZuZGVmIF9fS0VSTkVMX0RTCisjZGVmaW5lIF9fS0VSTkVMX0RTICAgKFNVUEVSX0RBVEEpCisjZW5kaWYKKyNkZWZpbmUgU1VQRVJfUFJPR1JBTSAoNikKKyNkZWZpbmUgQ1BVX1NQQUNFICAgICAoNykKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcgc2VnOworfSBtbV9zZWdtZW50X3Q7CisKKyNkZWZpbmUgTUFLRV9NTV9TRUcocykJKChtbV9zZWdtZW50X3QpIHsgKHMpIH0pCisjZGVmaW5lIFVTRVJfRFMJCU1BS0VfTU1fU0VHKF9fVVNFUl9EUykKKyNkZWZpbmUgS0VSTkVMX0RTCU1BS0VfTU1fU0VHKF9fS0VSTkVMX0RTKQorCisvKgorICogR2V0L3NldCB0aGUgU0ZDL0RGQyByZWdpc3RlcnMgZm9yIE1PVkVTIGluc3RydWN0aW9ucworICovCisKK3N0YXRpYyBpbmxpbmUgbW1fc2VnbWVudF90IGdldF9mcyh2b2lkKQoreworCW1tX3NlZ21lbnRfdCBfdjsKKwlfX2FzbV9fICgibW92ZWMgJS9kZmMsJTAiOiI9ciIgKF92LnNlZyk6KTsKKworCXJldHVybiBfdjsKK30KKworc3RhdGljIGlubGluZSBtbV9zZWdtZW50X3QgZ2V0X2RzKHZvaWQpCit7CisgICAgLyogcmV0dXJuIHRoZSBzdXBlcnZpc29yIGRhdGEgc3BhY2UgY29kZSAqLworICAgIHJldHVybiBLRVJORUxfRFM7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfZnMobW1fc2VnbWVudF90IHZhbCkKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1vdmVjICUwLCUvc2ZjXG5cdCIKKwkJCSAgICAgICJtb3ZlYyAlMCwlL2RmY1xuXHQiCisJCQkgICAgICA6IC8qIG5vIG91dHB1dHMgKi8gOiAiciIgKHZhbC5zZWcpIDogIm1lbW9yeSIpOworfQorCisjZGVmaW5lIHNlZ21lbnRfZXEoYSxiKQkoKGEpLnNlZyA9PSAoYikuc2VnKQorCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiBfTTY4S19TRUdNRU5UX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvc2VtYXBob3JlLWhlbHBlci5oIGIvaW5jbHVkZS9hc20tbTY4ay9zZW1hcGhvcmUtaGVscGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTUxNmE2NDIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL3NlbWFwaG9yZS1oZWxwZXIuaApAQCAtMCwwICsxLDE0MyBAQAorI2lmbmRlZiBfTTY4S19TRU1BUEhPUkVfSEVMUEVSX0gKKyNkZWZpbmUgX002OEtfU0VNQVBIT1JFX0hFTFBFUl9ICisKKy8qCisgKiBTTVAtIGFuZCBpbnRlcnJ1cHQtc2FmZSBzZW1hcGhvcmVzIGhlbHBlciBmdW5jdGlvbnMuCisgKgorICogKEMpIENvcHlyaWdodCAxOTk2IExpbnVzIFRvcnZhbGRzCisgKgorICogbTY4ayB2ZXJzaW9uIGJ5IEFuZHJlYXMgU2Nod2FiCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisKKy8qCisgKiBUaGVzZSB0d28gX211c3RfIGV4ZWN1dGUgYXRvbWljYWxseSB3cnQgZWFjaCBvdGhlci4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHdha2Vfb25lX21vcmUoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKK3sKKwlhdG9taWNfaW5jKCZzZW0tPndha2luZyk7Cit9CisKKyNpZm5kZWYgQ09ORklHX1JNV19JTlNOUworZXh0ZXJuIHNwaW5sb2NrX3Qgc2VtYXBob3JlX3dha2VfbG9jazsKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIGludCB3YWtpbmdfbm9uX3plcm8oc3RydWN0IHNlbWFwaG9yZSAqc2VtKQoreworCWludCByZXQ7CisjaWZuZGVmIENPTkZJR19STVdfSU5TTlMKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNlbWFwaG9yZV93YWtlX2xvY2ssIGZsYWdzKTsKKwlyZXQgPSAwOworCWlmIChhdG9taWNfcmVhZCgmc2VtLT53YWtpbmcpID4gMCkgeworCQlhdG9taWNfZGVjKCZzZW0tPndha2luZyk7CisJCXJldCA9IDE7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlbWFwaG9yZV93YWtlX2xvY2ssIGZsYWdzKTsKKyNlbHNlCisJaW50IHRtcDEsIHRtcDI7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXworCSAgKCIxOgltb3ZlbAklMSwlMlxuIgorCSAgICIgICAgamxlCTJmXG4iCisJICAgIglzdWJxbAkjMSwlMlxuIgorCSAgICIJY2FzbAklMSwlMiwlM1xuIgorCSAgICIJam5lCTFiXG4iCisJICAgIgltb3ZlcQkjMSwlMFxuIgorCSAgICIyOiIKKwkgICA6ICI9ZCIgKHJldCksICI9ZCIgKHRtcDEpLCAiPWQiICh0bXAyKQorCSAgIDogIm0iIChzZW0tPndha2luZyksICIwIiAoMCksICIxIiAoc2VtLT53YWtpbmcpKTsKKyNlbmRpZgorCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIHdha2luZ19ub25femVyb19pbnRlcnJ1cHRpYmxlOgorICoJMQlnb3QgdGhlIGxvY2sKKyAqCTAJZ28gdG8gc2xlZXAKKyAqCS1FSU5UUglpbnRlcnJ1cHRlZAorICovCitzdGF0aWMgaW5saW5lIGludCB3YWtpbmdfbm9uX3plcm9faW50ZXJydXB0aWJsZShzdHJ1Y3Qgc2VtYXBob3JlICpzZW0sCisJCQkJCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwlpbnQgcmV0OworI2lmbmRlZiBDT05GSUdfUk1XX0lOU05TCisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzZW1hcGhvcmVfd2FrZV9sb2NrLCBmbGFncyk7CisJcmV0ID0gMDsKKwlpZiAoYXRvbWljX3JlYWQoJnNlbS0+d2FraW5nKSA+IDApIHsKKwkJYXRvbWljX2RlYygmc2VtLT53YWtpbmcpOworCQlyZXQgPSAxOworCX0gZWxzZSBpZiAoc2lnbmFsX3BlbmRpbmcodHNrKSkgeworCQlhdG9taWNfaW5jKCZzZW0tPmNvdW50KTsKKwkJcmV0ID0gLUVJTlRSOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZW1hcGhvcmVfd2FrZV9sb2NrLCBmbGFncyk7CisjZWxzZQorCWludCB0bXAxLCB0bXAyOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18KKwkgICgiMToJbW92ZWwJJTEsJTJcbiIKKwkgICAiCWpsZQkyZlxuIgorCSAgICIJc3VicWwJIzEsJTJcbiIKKwkgICAiCWNhc2wJJTEsJTIsJTNcbiIKKwkgICAiCWpuZQkxYlxuIgorCSAgICIJbW92ZXEJIzEsJTBcbiIKKwkgICAiCWpyYQklYTRcbiIKKwkgICAiMjoiCisJICAgOiAiPWQiIChyZXQpLCAiPWQiICh0bXAxKSwgIj1kIiAodG1wMikKKwkgICA6ICJtIiAoc2VtLT53YWtpbmcpLCAiaSIgKCYmbmV4dCksICIwIiAoMCksICIxIiAoc2VtLT53YWtpbmcpKTsKKwlpZiAoc2lnbmFsX3BlbmRpbmcodHNrKSkgeworCQlhdG9taWNfaW5jKCZzZW0tPmNvdW50KTsKKwkJcmV0ID0gLUVJTlRSOworCX0KK25leHQ6CisjZW5kaWYKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiB3YWtpbmdfbm9uX3plcm9fdHJ5bG9jazoKKyAqCTEJZmFpbGVkIHRvIGxvY2sKKyAqCTAJZ290IHRoZSBsb2NrCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHdha2luZ19ub25femVyb190cnlsb2NrKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKK3sKKwlpbnQgcmV0OworI2lmbmRlZiBDT05GSUdfUk1XX0lOU05TCisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzZW1hcGhvcmVfd2FrZV9sb2NrLCBmbGFncyk7CisJcmV0ID0gMTsKKwlpZiAoYXRvbWljX3JlYWQoJnNlbS0+d2FraW5nKSA+IDApIHsKKwkJYXRvbWljX2RlYygmc2VtLT53YWtpbmcpOworCQlyZXQgPSAwOworCX0gZWxzZQorCQlhdG9taWNfaW5jKCZzZW0tPmNvdW50KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZW1hcGhvcmVfd2FrZV9sb2NrLCBmbGFncyk7CisjZWxzZQorCWludCB0bXAxLCB0bXAyOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18KKwkgICgiMToJbW92ZWwJJTEsJTJcbiIKKwkgICAiICAgIGpsZQkyZlxuIgorCSAgICIJc3VicWwJIzEsJTJcbiIKKwkgICAiCWNhc2wJJTEsJTIsJTNcbiIKKwkgICAiCWpuZQkxYlxuIgorCSAgICIJbW92ZXEJIzAsJTBcbiIKKwkgICAiMjoiCisJICAgOiAiPWQiIChyZXQpLCAiPWQiICh0bXAxKSwgIj1kIiAodG1wMikKKwkgICA6ICJtIiAoc2VtLT53YWtpbmcpLCAiMCIgKDEpLCAiMSIgKHNlbS0+d2FraW5nKSk7CisJaWYgKHJldCkKKwkJYXRvbWljX2luYygmc2VtLT5jb3VudCk7CisjZW5kaWYKKwlyZXR1cm4gcmV0OworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvc2VtYXBob3JlLmggYi9pbmNsdWRlL2FzbS1tNjhrL3NlbWFwaG9yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiOTRjZjMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL3NlbWFwaG9yZS5oCkBAIC0wLDAgKzEsMTY3IEBACisjaWZuZGVmIF9NNjhLX1NFTUFQSE9SRV9ICisjZGVmaW5lIF9NNjhLX1NFTUFQSE9SRV9ICisKKyNkZWZpbmUgUldfTE9DS19CSUFTCQkgMHgwMTAwMDAwMAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3J3c2VtLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5naWZ5Lmg+CisKKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorCisvKgorICogSW50ZXJydXB0LXNhZmUgc2VtYXBob3Jlcy4uCisgKgorICogKEMpIENvcHlyaWdodCAxOTk2IExpbnVzIFRvcnZhbGRzCisgKgorICogbTY4ayB2ZXJzaW9uIGJ5IEFuZHJlYXMgU2Nod2FiCisgKi8KKworCitzdHJ1Y3Qgc2VtYXBob3JlIHsKKwlhdG9taWNfdCBjb3VudDsKKwlhdG9taWNfdCB3YWtpbmc7CisJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKK307CisKKyNkZWZpbmUgX19TRU1BUEhPUkVfSU5JVElBTElaRVIobmFtZSwgbikJCQkJXAorewkJCQkJCQkJCVwKKwkuY291bnQJCT0gQVRPTUlDX0lOSVQobiksCQkJCVwKKwkud2FraW5nCQk9IEFUT01JQ19JTklUKDApLAkJCQlcCisJLndhaXQJCT0gX19XQUlUX1FVRVVFX0hFQURfSU5JVElBTElaRVIoKG5hbWUpLndhaXQpCVwKK30KKworI2RlZmluZSBfX01VVEVYX0lOSVRJQUxJWkVSKG5hbWUpIFwKKwlfX1NFTUFQSE9SRV9JTklUSUFMSVpFUihuYW1lLDEpCisKKyNkZWZpbmUgX19ERUNMQVJFX1NFTUFQSE9SRV9HRU5FUklDKG5hbWUsY291bnQpIFwKKwlzdHJ1Y3Qgc2VtYXBob3JlIG5hbWUgPSBfX1NFTUFQSE9SRV9JTklUSUFMSVpFUihuYW1lLGNvdW50KQorCisjZGVmaW5lIERFQ0xBUkVfTVVURVgobmFtZSkgX19ERUNMQVJFX1NFTUFQSE9SRV9HRU5FUklDKG5hbWUsMSkKKyNkZWZpbmUgREVDTEFSRV9NVVRFWF9MT0NLRUQobmFtZSkgX19ERUNMQVJFX1NFTUFQSE9SRV9HRU5FUklDKG5hbWUsMCkKKworc3RhdGljIGlubGluZSB2b2lkIHNlbWFfaW5pdChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0sIGludCB2YWwpCit7CisJKnNlbSA9IChzdHJ1Y3Qgc2VtYXBob3JlKV9fU0VNQVBIT1JFX0lOSVRJQUxJWkVSKCpzZW0sIHZhbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbml0X01VVEVYIChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCit7CisJc2VtYV9pbml0KHNlbSwgMSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbml0X01VVEVYX0xPQ0tFRCAoc3RydWN0IHNlbWFwaG9yZSAqc2VtKQoreworCXNlbWFfaW5pdChzZW0sIDApOworfQorCithc21saW5rYWdlIHZvaWQgX19kb3duX2ZhaWxlZCh2b2lkIC8qIHNwZWNpYWwgcmVnaXN0ZXIgY2FsbGluZyBjb252ZW50aW9uICovKTsKK2FzbWxpbmthZ2UgaW50ICBfX2Rvd25fZmFpbGVkX2ludGVycnVwdGlibGUodm9pZCAgLyogcGFyYW1zIGluIHJlZ2lzdGVycyAqLyk7Cithc21saW5rYWdlIGludCAgX19kb3duX2ZhaWxlZF90cnlsb2NrKHZvaWQgIC8qIHBhcmFtcyBpbiByZWdpc3RlcnMgKi8pOworYXNtbGlua2FnZSB2b2lkIF9fdXBfd2FrZXVwKHZvaWQgLyogc3BlY2lhbCByZWdpc3RlciBjYWxsaW5nIGNvbnZlbnRpb24gKi8pOworCithc21saW5rYWdlIHZvaWQgX19kb3duKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pOworYXNtbGlua2FnZSBpbnQgIF9fZG93bl9pbnRlcnJ1cHRpYmxlKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pOworYXNtbGlua2FnZSBpbnQgIF9fZG93bl90cnlsb2NrKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pOworYXNtbGlua2FnZSB2b2lkIF9fdXAoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSk7CisKKy8qCisgKiBUaGlzIGlzIHVnbHksIGJ1dCB3ZSB3YW50IHRoZSBkZWZhdWx0IGNhc2UgdG8gZmFsbCB0aHJvdWdoLgorICogImRvd25fZmFpbGVkIiBpcyBhIHNwZWNpYWwgYXNtIGhhbmRsZXIgdGhhdCBjYWxscyB0aGUgQworICogcm91dGluZSB0aGF0IGFjdHVhbGx5IHdhaXRzLiBTZWUgYXJjaC9tNjhrL2xpYi9zZW1hcGhvcmUuUworICovCitzdGF0aWMgaW5saW5lIHZvaWQgZG93bihzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCit7CisJcmVnaXN0ZXIgc3RydWN0IHNlbWFwaG9yZSAqc2VtMSBfX2FzbV9fICgiJWExIikgPSBzZW07CisKKwltaWdodF9zbGVlcCgpOworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkifCBhdG9taWMgZG93biBvcGVyYXRpb25cblx0IgorCQkic3VicWwgIzEsJTBAXG5cdCIKKwkJImptaSAyZlxuXHQiCisJCSIxOlxuIgorCQlMT0NLX1NFQ1RJT05fU1RBUlQoIi5ldmVuXG5cdCIpCisJCSIyOlx0cGVhIDFiXG5cdCIKKwkJImpicmEgX19kb3duX2ZhaWxlZFxuIgorCQlMT0NLX1NFQ1RJT05fRU5ECisJCTogLyogbm8gb3V0cHV0cyAqLworCQk6ICJhIiAoc2VtMSkKKwkJOiAibWVtb3J5Iik7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGRvd25faW50ZXJydXB0aWJsZShzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCit7CisJcmVnaXN0ZXIgc3RydWN0IHNlbWFwaG9yZSAqc2VtMSBfX2FzbV9fICgiJWExIikgPSBzZW07CisJcmVnaXN0ZXIgaW50IHJlc3VsdCBfX2FzbV9fICgiJWQwIik7CisKKwltaWdodF9zbGVlcCgpOworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkifCBhdG9taWMgaW50ZXJydXB0aWJsZSBkb3duIG9wZXJhdGlvblxuXHQiCisJCSJzdWJxbCAjMSwlMUBcblx0IgorCQkiam1pIDJmXG5cdCIKKwkJImNscmwgJTBcbiIKKwkJIjE6XG4iCisJCUxPQ0tfU0VDVElPTl9TVEFSVCgiLmV2ZW5cblx0IikKKwkJIjI6XHRwZWEgMWJcblx0IgorCQkiamJyYSBfX2Rvd25fZmFpbGVkX2ludGVycnVwdGlibGVcbiIKKwkJTE9DS19TRUNUSU9OX0VORAorCQk6ICI9ZCIgKHJlc3VsdCkKKwkJOiAiYSIgKHNlbTEpCisJCTogIm1lbW9yeSIpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGRvd25fdHJ5bG9jayhzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCit7CisJcmVnaXN0ZXIgc3RydWN0IHNlbWFwaG9yZSAqc2VtMSBfX2FzbV9fICgiJWExIikgPSBzZW07CisJcmVnaXN0ZXIgaW50IHJlc3VsdCBfX2FzbV9fICgiJWQwIik7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJInwgYXRvbWljIGRvd24gdHJ5bG9jayBvcGVyYXRpb25cblx0IgorCQkic3VicWwgIzEsJTFAXG5cdCIKKwkJImptaSAyZlxuXHQiCisJCSJjbHJsICUwXG4iCisJCSIxOlxuIgorCQlMT0NLX1NFQ1RJT05fU1RBUlQoIi5ldmVuXG5cdCIpCisJCSIyOlx0cGVhIDFiXG5cdCIKKwkJImpicmEgX19kb3duX2ZhaWxlZF90cnlsb2NrXG4iCisJCUxPQ0tfU0VDVElPTl9FTkQKKwkJOiAiPWQiIChyZXN1bHQpCisJCTogImEiIChzZW0xKQorCQk6ICJtZW1vcnkiKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogTm90ZSEgVGhpcyBpcyBzdWJ0bGUuIFdlIGp1bXAgdG8gd2FrZSBwZW9wbGUgdXAgb25seSBpZgorICogdGhlIHNlbWFwaG9yZSB3YXMgbmVnYXRpdmUgKD09IHNvbWVib2R5IHdhcyB3YWl0aW5nIG9uIGl0KS4KKyAqIFRoZSBkZWZhdWx0IGNhc2UgKG5vIGNvbnRlbnRpb24pIHdpbGwgcmVzdWx0IGluIE5PCisgKiBqdW1wcyBmb3IgYm90aCBkb3duKCkgYW5kIHVwKCkuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB1cChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCit7CisJcmVnaXN0ZXIgc3RydWN0IHNlbWFwaG9yZSAqc2VtMSBfX2FzbV9fICgiJWExIikgPSBzZW07CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJInwgYXRvbWljIHVwIG9wZXJhdGlvblxuXHQiCisJCSJhZGRxbCAjMSwlMEBcblx0IgorCQkiamxlIDJmXG4iCisJCSIxOlxuIgorCQlMT0NLX1NFQ1RJT05fU1RBUlQoIi5ldmVuXG5cdCIpCisJCSIyOlx0IgorCQkicGVhIDFiXG5cdCIKKwkJImpicmEgX191cF93YWtldXBcbiIKKwkJTE9DS19TRUNUSU9OX0VORAorCQk6IC8qIG5vIG91dHB1dHMgKi8KKwkJOiAiYSIgKHNlbTEpCisJCTogIm1lbW9yeSIpOworfQorCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9zZW1idWYuaCBiL2luY2x1ZGUvYXNtLW02OGsvc2VtYnVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMwODA1MgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvc2VtYnVmLmgKQEAgLTAsMCArMSwyNSBAQAorI2lmbmRlZiBfTTY4S19TRU1CVUZfSAorI2RlZmluZSBfTTY4S19TRU1CVUZfSAorCisvKgorICogVGhlIHNlbWlkNjRfZHMgc3RydWN0dXJlIGZvciBtNjhrIGFyY2hpdGVjdHVyZS4KKyAqIE5vdGUgZXh0cmEgcGFkZGluZyBiZWNhdXNlIHRoaXMgc3RydWN0dXJlIGlzIHBhc3NlZCBiYWNrIGFuZCBmb3J0aAorICogYmV0d2VlbiBrZXJuZWwgYW5kIHVzZXIgc3BhY2UuCisgKgorICogUGFkIHNwYWNlIGlzIGxlZnQgZm9yOgorICogLSA2NC1iaXQgdGltZV90IHRvIHNvbHZlIHkyMDM4IHByb2JsZW0KKyAqIC0gMiBtaXNjZWxsYW5lb3VzIDMyLWJpdCB2YWx1ZXMKKyAqLworCitzdHJ1Y3Qgc2VtaWQ2NF9kcyB7CisJc3RydWN0IGlwYzY0X3Blcm0gc2VtX3Blcm07CQkvKiBwZXJtaXNzaW9ucyAuLiBzZWUgaXBjLmggKi8KKwlfX2tlcm5lbF90aW1lX3QJc2VtX290aW1lOwkJLyogbGFzdCBzZW1vcCB0aW1lICovCisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDE7CisJX19rZXJuZWxfdGltZV90CXNlbV9jdGltZTsJCS8qIGxhc3QgY2hhbmdlIHRpbWUgKi8KKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkMjsKKwl1bnNpZ25lZCBsb25nCXNlbV9uc2VtczsJCS8qIG5vLiBvZiBzZW1hcGhvcmVzIGluIGFycmF5ICovCisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDM7CisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDQ7Cit9OworCisjZW5kaWYgLyogX002OEtfU0VNQlVGX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvc2VyaWFsLmggYi9pbmNsdWRlL2FzbS1tNjhrL3NlcmlhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmNWJjZGMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL3NlcmlhbC5oCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1tNjhrL3NlcmlhbC5oCisgKgorICogY3VycmVudGx5IHRoaXMgc2VlbXMgdXNlZnVsIG9ubHkgZm9yIGEgUTQwLAorICogaXQncyBhbiBhbG1vc3QgZXhhY3QgY29weSBvZiAuLi9hc20tYWxwaGEvc2VyaWFsLmgKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisvKgorICogVGhpcyBhc3N1bWVzIHlvdSBoYXZlIGEgMS44NDMyIE1IeiBjbG9jayBmb3IgeW91ciBVQVJULgorICoKKyAqIEl0J2QgYmUgbmljZSBpZiBzb21lb25lIGJ1aWx0IGEgc2VyaWFsIGNhcmQgd2l0aCBhIDI0LjU3NiBNSHoKKyAqIGNsb2NrLCBzaW5jZSB0aGUgMTY1NTBBIGlzIGNhcGFibGUgb2YgaGFuZGxpbmcgYSB0b3Agc3BlZWQgb2YgMS41CisgKiBtZWdhYml0cy9zZWNvbmQ7IGJ1dCB0aGlzIHJlcXVpcmVzIHRoZSBmYXN0ZXIgY2xvY2suCisgKi8KKyNkZWZpbmUgQkFTRV9CQVVEICggMTg0MzIwMCAvIDE2ICkKKworLyogU3RhbmRhcmQgQ09NIGZsYWdzIChleGNlcHQgZm9yIENPTTQsIGJlY2F1c2Ugb2YgdGhlIDg1MTQgcHJvYmxlbSkgKi8KKyNpZmRlZiBDT05GSUdfU0VSSUFMX0RFVEVDVF9JUlEKKyNkZWZpbmUgU1REX0NPTV9GTEFHUyAoQVNZTkNfQk9PVF9BVVRPQ09ORiB8IEFTWU5DX1NLSVBfVEVTVCB8IEFTWU5DX0FVVE9fSVJRKQorI2RlZmluZSBTVERfQ09NNF9GTEFHUyAoQVNZTkNfQk9PVF9BVVRPQ09ORiB8IEFTWU5DX0FVVE9fSVJRKQorI2Vsc2UKKyNkZWZpbmUgU1REX0NPTV9GTEFHUyAoQVNZTkNfQk9PVF9BVVRPQ09ORiB8IEFTWU5DX1NLSVBfVEVTVCkKKyNkZWZpbmUgU1REX0NPTTRfRkxBR1MgQVNZTkNfQk9PVF9BVVRPQ09ORgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfU0VSSUFMX01BTllfUE9SVFMKKyNkZWZpbmUgRk9VUlBPUlRfRkxBR1MgQVNZTkNfRk9VUlBPUlQKKyNkZWZpbmUgQUNDRU5UX0ZMQUdTIDAKKyNkZWZpbmUgQk9DQV9GTEFHUyAwCisjZW5kaWYKKworI2RlZmluZSBTVERfU0VSSUFMX1BPUlRfREVGTlMJCQlcCisJLyogVUFSVCBDTEsgICBQT1JUIElSUSAgICAgRkxBR1MgICAgICAgICovCQkJXAorCXsgMCwgQkFTRV9CQVVELCAweDNGOCwgNCwgU1REX0NPTV9GTEFHUyB9LAkvKiB0dHlTMCAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MkY4LCAzLCBTVERfQ09NX0ZMQUdTIH0sCS8qIHR0eVMxICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgzRTgsIDQsIFNURF9DT01fRkxBR1MgfSwJLyogdHR5UzIgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDJFOCwgMywgU1REX0NPTTRfRkxBR1MgfSwJLyogdHR5UzMgKi8KKworCisjaWZkZWYgQ09ORklHX1NFUklBTF9NQU5ZX1BPUlRTCisjZGVmaW5lIEVYVFJBX1NFUklBTF9QT1JUX0RFRk5TCQkJXAorCXsgMCwgQkFTRV9CQVVELCAweDFBMCwgOSwgRk9VUlBPUlRfRkxBR1MgfSwJLyogdHR5UzQgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDFBOCwgOSwgRk9VUlBPUlRfRkxBR1MgfSwJLyogdHR5UzUgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDFCMCwgOSwgRk9VUlBPUlRfRkxBR1MgfSwJLyogdHR5UzYgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDFCOCwgOSwgRk9VUlBPUlRfRkxBR1MgfSwJLyogdHR5UzcgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDJBMCwgNSwgRk9VUlBPUlRfRkxBR1MgfSwJLyogdHR5UzggKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDJBOCwgNSwgRk9VUlBPUlRfRkxBR1MgfSwJLyogdHR5UzkgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDJCMCwgNSwgRk9VUlBPUlRfRkxBR1MgfSwJLyogdHR5UzEwICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgyQjgsIDUsIEZPVVJQT1JUX0ZMQUdTIH0sCS8qIHR0eVMxMSAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MzMwLCA0LCBBQ0NFTlRfRkxBR1MgfSwJLyogdHR5UzEyICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgzMzgsIDQsIEFDQ0VOVF9GTEFHUyB9LAkvKiB0dHlTMTMgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDAwMCwgMCwgMCB9LAkvKiB0dHlTMTQgKHNwYXJlKSAqLwkJXAorCXsgMCwgQkFTRV9CQVVELCAweDAwMCwgMCwgMCB9LAkvKiB0dHlTMTUgKHNwYXJlKSAqLwkJXAorCXsgMCwgQkFTRV9CQVVELCAweDEwMCwgMTIsIEJPQ0FfRkxBR1MgfSwJLyogdHR5UzE2ICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgxMDgsIDEyLCBCT0NBX0ZMQUdTIH0sCS8qIHR0eVMxNyAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MTEwLCAxMiwgQk9DQV9GTEFHUyB9LAkvKiB0dHlTMTggKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDExOCwgMTIsIEJPQ0FfRkxBR1MgfSwJLyogdHR5UzE5ICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgxMjAsIDEyLCBCT0NBX0ZMQUdTIH0sCS8qIHR0eVMyMCAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MTI4LCAxMiwgQk9DQV9GTEFHUyB9LAkvKiB0dHlTMjEgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDEzMCwgMTIsIEJPQ0FfRkxBR1MgfSwJLyogdHR5UzIyICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgxMzgsIDEyLCBCT0NBX0ZMQUdTIH0sCS8qIHR0eVMyMyAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MTQwLCAxMiwgQk9DQV9GTEFHUyB9LAkvKiB0dHlTMjQgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDE0OCwgMTIsIEJPQ0FfRkxBR1MgfSwJLyogdHR5UzI1ICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgxNTAsIDEyLCBCT0NBX0ZMQUdTIH0sCS8qIHR0eVMyNiAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MTU4LCAxMiwgQk9DQV9GTEFHUyB9LAkvKiB0dHlTMjcgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDE2MCwgMTIsIEJPQ0FfRkxBR1MgfSwJLyogdHR5UzI4ICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgxNjgsIDEyLCBCT0NBX0ZMQUdTIH0sCS8qIHR0eVMyOSAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MTcwLCAxMiwgQk9DQV9GTEFHUyB9LAkvKiB0dHlTMzAgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDE3OCwgMTIsIEJPQ0FfRkxBR1MgfSwJLyogdHR5UzMxICovCisjZWxzZQorI2RlZmluZSBFWFRSQV9TRVJJQUxfUE9SVF9ERUZOUworI2VuZGlmCisKKyNkZWZpbmUgU0VSSUFMX1BPUlRfREZOUwkJXAorCVNURF9TRVJJQUxfUE9SVF9ERUZOUwkJXAorCUVYVFJBX1NFUklBTF9QT1JUX0RFRk5TCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL3NldHVwLmggYi9pbmNsdWRlL2FzbS1tNjhrL3NldHVwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWUyMzQ5MgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvc2V0dXAuaApAQCAtMCwwICsxLDM3NSBAQAorLyoKKyoqIGFzbS9zZXR1cC5oIC0tIERlZmluaXRpb24gb2YgdGhlIExpbnV4L202OGsgc2V0dXAgaW5mb3JtYXRpb24KKyoqCisqKiBDb3B5cmlnaHQgMTk5MiBieSBHcmVnIEhhcnAKKyoqCisqKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworKiogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyoqIGZvciBtb3JlIGRldGFpbHMuCisqKgorKiogQ3JlYXRlZCAwOS8yOS85MiBieSBHcmVnIEhhcnAKKyoqCisqKiA1LzIvOTQgUm9tYW4gSG9kZWs6CisqKiAgIEFkZGVkIGJpX2F0YXJpIHBhcnQgb2YgdGhlIG1hY2hpbmUgZGVwZW5kZW50IHVuaW9uIGJpX3VuOyBmb3Igbm93IGl0CisqKiAgIGNvbnRhaW5zIGp1c3QgYSBtb2RlbCBmaWVsZCB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIFRUIGFuZCBGYWxjb24uCisqKiAyNi83Lzk2IFJvbWFuIFppcHBlbDoKKyoqICAgUmVuYW1lZCB0byBzZXR1cC5oOyBhZGRlZCBzb21lIHVzZWZ1bCBtYWNyb3MgdG8gYWxsb3cgZ2NjIHNvbWUKKyoqICAgb3B0aW1pemF0aW9ucyBpZiBwb3NzaWJsZS4KKyoqIDUvMTAvOTYgR2VlcnQgVXl0dGVyaG9ldmVuOgorKiogICBSZWRlc2lnbiBvZiB0aGUgYm9vdCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmU7IG1vdmVkIGJvb3QgaW5mb3JtYXRpb24KKyoqICAgc3RydWN0dXJlIHRvIGJvb3RpbmZvLmgKKyovCisKKyNpZm5kZWYgX002OEtfU0VUVVBfSAorI2RlZmluZSBfTTY4S19TRVRVUF9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworCisgICAgLyoKKyAgICAgKiAgTGludXgvbTY4ayBBcmNoaXRlY3R1cmVzCisgICAgICovCisKKyNkZWZpbmUgTUFDSF9BTUlHQSAgICAxCisjZGVmaW5lIE1BQ0hfQVRBUkkgICAgMgorI2RlZmluZSBNQUNIX01BQyAgICAgIDMKKyNkZWZpbmUgTUFDSF9BUE9MTE8gICA0CisjZGVmaW5lIE1BQ0hfU1VOMyAgICAgNQorI2RlZmluZSBNQUNIX01WTUUxNDcgIDYKKyNkZWZpbmUgTUFDSF9NVk1FMTZ4ICA3CisjZGVmaW5lIE1BQ0hfQlZNRTYwMDAgOAorI2RlZmluZSBNQUNIX0hQMzAwICAgIDkKKyNkZWZpbmUgTUFDSF9RNDAgICAgIDEwCisjZGVmaW5lIE1BQ0hfU1VOM1ggICAxMQorCisjaWZkZWYgX19LRVJORUxfXworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbTY4a19tYWNodHlwZTsKKyNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCisKKyNpZiAhZGVmaW5lZChDT05GSUdfQU1JR0EpCisjICBkZWZpbmUgTUFDSF9JU19BTUlHQSAoMCkKKyNlbGlmIGRlZmluZWQoQ09ORklHX0FUQVJJKSB8fCBkZWZpbmVkKENPTkZJR19NQUMpIHx8IGRlZmluZWQoQ09ORklHX0FQT0xMTykgXAorCXx8IGRlZmluZWQoQ09ORklHX01WTUUxNngpIHx8IGRlZmluZWQoQ09ORklHX0JWTUU2MDAwKSAgICAgICAgICAgICAgIFwKKwl8fCBkZWZpbmVkKENPTkZJR19IUDMwMCkgfHwgZGVmaW5lZChDT05GSUdfUTQwKSAgICAgICAgICAgICAgICAgICAgICBcCisJfHwgZGVmaW5lZChDT05GSUdfU1VOM1gpIHx8IGRlZmluZWQoQ09ORklHX01WTUUxNDcpCisjICBkZWZpbmUgTUFDSF9JU19BTUlHQSAobTY4a19tYWNodHlwZSA9PSBNQUNIX0FNSUdBKQorI2Vsc2UKKyMgIGRlZmluZSBNQUNIX0FNSUdBX09OTFkKKyMgIGRlZmluZSBNQUNIX0lTX0FNSUdBICgxKQorIyAgZGVmaW5lIE1BQ0hfVFlQRSAoTUFDSF9BTUlHQSkKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoQ09ORklHX0FUQVJJKQorIyAgZGVmaW5lIE1BQ0hfSVNfQVRBUkkgKDApCisjZWxpZiBkZWZpbmVkKENPTkZJR19BTUlHQSkgfHwgZGVmaW5lZChDT05GSUdfTUFDKSB8fCBkZWZpbmVkKENPTkZJR19BUE9MTE8pIFwKKwl8fCBkZWZpbmVkKENPTkZJR19NVk1FMTZ4KSB8fCBkZWZpbmVkKENPTkZJR19CVk1FNjAwMCkgICAgICAgICAgICAgICBcCisJfHwgZGVmaW5lZChDT05GSUdfSFAzMDApIHx8IGRlZmluZWQoQ09ORklHX1E0MCkgICAgICAgICAgICAgICAgICAgICAgXAorCXx8IGRlZmluZWQoQ09ORklHX1NVTjNYKSB8fCBkZWZpbmVkKENPTkZJR19NVk1FMTQ3KQorIyAgZGVmaW5lIE1BQ0hfSVNfQVRBUkkgKG02OGtfbWFjaHR5cGUgPT0gTUFDSF9BVEFSSSkKKyNlbHNlCisjICBkZWZpbmUgTUFDSF9BVEFSSV9PTkxZCisjICBkZWZpbmUgTUFDSF9JU19BVEFSSSAoMSkKKyMgIGRlZmluZSBNQUNIX1RZUEUgKE1BQ0hfQVRBUkkpCisjZW5kaWYKKworI2lmICFkZWZpbmVkKENPTkZJR19NQUMpCisjICBkZWZpbmUgTUFDSF9JU19NQUMgKDApCisjZWxpZiBkZWZpbmVkKENPTkZJR19BTUlHQSkgfHwgZGVmaW5lZChDT05GSUdfQVRBUkkpIHx8IGRlZmluZWQoQ09ORklHX0FQT0xMTykgXAorCXx8IGRlZmluZWQoQ09ORklHX01WTUUxNngpIHx8IGRlZmluZWQoQ09ORklHX0JWTUU2MDAwKSAgICAgICAgICAgICAgICAgXAorCXx8IGRlZmluZWQoQ09ORklHX0hQMzAwKSB8fCBkZWZpbmVkKENPTkZJR19RNDApICAgICAgICAgICAgICAgICAgICAgICAgXAorCXx8IGRlZmluZWQoQ09ORklHX1NVTjNYKSB8fCBkZWZpbmVkKENPTkZJR19NVk1FMTQ3KQorIyAgZGVmaW5lIE1BQ0hfSVNfTUFDIChtNjhrX21hY2h0eXBlID09IE1BQ0hfTUFDKQorI2Vsc2UKKyMgIGRlZmluZSBNQUNIX01BQ19PTkxZCisjICBkZWZpbmUgTUFDSF9JU19NQUMgKDEpCisjICBkZWZpbmUgTUFDSF9UWVBFIChNQUNIX01BQykKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfU1VOMykKKyNkZWZpbmUgTUFDSF9JU19TVU4zICgxKQorI2RlZmluZSBNQUNIX1NVTjNfT05MWSAoMSkKKyNkZWZpbmUgTUFDSF9UWVBFIChNQUNIX1NVTjMpCisjZWxzZQorI2RlZmluZSBNQUNIX0lTX1NVTjMgKDApCisjZW5kaWYKKworI2lmICFkZWZpbmVkIChDT05GSUdfQVBPTExPKQorIyAgZGVmaW5lIE1BQ0hfSVNfQVBPTExPICgwKQorI2VsaWYgZGVmaW5lZChDT05GSUdfQU1JR0EpIHx8IGRlZmluZWQoQ09ORklHX01BQykgfHwgZGVmaW5lZChDT05GSUdfQVRBUkkpIFwKKwl8fCBkZWZpbmVkKENPTkZJR19NVk1FMTZ4KSB8fCBkZWZpbmVkKENPTkZJR19CVk1FNjAwMCkgICAgICAgICAgICAgIFwKKwl8fCBkZWZpbmVkKENPTkZJR19IUDMwMCkgfHwgZGVmaW5lZChDT05GSUdfUTQwKSAgICAgICAgICAgICAgICAgICAgIFwKKwl8fCBkZWZpbmVkKENPTkZJR19TVU4zWCkgfHwgZGVmaW5lZChDT05GSUdfTVZNRTE0NykKKyMgIGRlZmluZSBNQUNIX0lTX0FQT0xMTyAobTY4a19tYWNodHlwZSA9PSBNQUNIX0FQT0xMTykKKyNlbHNlCisjICBkZWZpbmUgTUFDSF9BUE9MTE9fT05MWQorIyAgZGVmaW5lIE1BQ0hfSVNfQVBPTExPICgxKQorIyAgZGVmaW5lIE1BQ0hfVFlQRSAoTUFDSF9BUE9MTE8pCisjZW5kaWYKKworI2lmICFkZWZpbmVkIChDT05GSUdfTVZNRTE0NykKKyMgIGRlZmluZSBNQUNIX0lTX01WTUUxNDcgKDApCisjZWxpZiBkZWZpbmVkKENPTkZJR19BTUlHQSkgfHwgZGVmaW5lZChDT05GSUdfTUFDKSB8fCBkZWZpbmVkKENPTkZJR19BVEFSSSkgXAorCXx8IGRlZmluZWQoQ09ORklHX0FQT0xMTykgfHwgZGVmaW5lZChDT05GSUdfQlZNRTYwMDApICAgICAgICAgICAgICAgXAorCXx8IGRlZmluZWQoQ09ORklHX0hQMzAwKSB8fCBkZWZpbmVkKENPTkZJR19RNDApICAgICAgICAgICAgICAgICAgICAgXAorCXx8IGRlZmluZWQoQ09ORklHX1NVTjNYKSB8fCBkZWZpbmVkKENPTkZJR19NVk1FMTZ4KQorIyAgZGVmaW5lIE1BQ0hfSVNfTVZNRTE0NyAobTY4a19tYWNodHlwZSA9PSBNQUNIX01WTUUxNDcpCisjZWxzZQorIyAgZGVmaW5lIE1BQ0hfTVZNRTE0N19PTkxZCisjICBkZWZpbmUgTUFDSF9JU19NVk1FMTQ3ICgxKQorIyAgZGVmaW5lIE1BQ0hfVFlQRSAoTUFDSF9NVk1FMTQ3KQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZCAoQ09ORklHX01WTUUxNngpCisjICBkZWZpbmUgTUFDSF9JU19NVk1FMTZ4ICgwKQorI2VsaWYgZGVmaW5lZChDT05GSUdfQU1JR0EpIHx8IGRlZmluZWQoQ09ORklHX01BQykgfHwgZGVmaW5lZChDT05GSUdfQVRBUkkpIFwKKwl8fCBkZWZpbmVkKENPTkZJR19BUE9MTE8pIHx8IGRlZmluZWQoQ09ORklHX0JWTUU2MDAwKSAgICAgICAgICAgICAgIFwKKwl8fCBkZWZpbmVkKENPTkZJR19IUDMwMCkgfHwgZGVmaW5lZChDT05GSUdfUTQwKSAgICAgICAgICAgICAgICAgICAgIFwKKwl8fCBkZWZpbmVkKENPTkZJR19TVU4zWCkgfHwgZGVmaW5lZChDT05GSUdfTVZNRTE0NykKKyMgIGRlZmluZSBNQUNIX0lTX01WTUUxNnggKG02OGtfbWFjaHR5cGUgPT0gTUFDSF9NVk1FMTZ4KQorI2Vsc2UKKyMgIGRlZmluZSBNQUNIX01WTUUxNnhfT05MWQorIyAgZGVmaW5lIE1BQ0hfSVNfTVZNRTE2eCAoMSkKKyMgIGRlZmluZSBNQUNIX1RZUEUgKE1BQ0hfTVZNRTE2eCkKKyNlbmRpZgorCisjaWYgIWRlZmluZWQgKENPTkZJR19CVk1FNjAwMCkKKyMgIGRlZmluZSBNQUNIX0lTX0JWTUU2MDAwICgwKQorI2VsaWYgZGVmaW5lZChDT05GSUdfQU1JR0EpIHx8IGRlZmluZWQoQ09ORklHX01BQykgfHwgZGVmaW5lZChDT05GSUdfQVRBUkkpIFwKKwl8fCBkZWZpbmVkKENPTkZJR19BUE9MTE8pIHx8IGRlZmluZWQoQ09ORklHX01WTUUxNngpICAgICAgICAgICAgICAgIFwKKwl8fCBkZWZpbmVkKENPTkZJR19IUDMwMCkgfHwgZGVmaW5lZChDT05GSUdfUTQwKSAgICAgICAgICAgICAgICAgICAgIFwKKwl8fCBkZWZpbmVkKENPTkZJR19TVU4zWCkgfHwgZGVmaW5lZChDT05GSUdfTVZNRTE0NykKKyMgIGRlZmluZSBNQUNIX0lTX0JWTUU2MDAwIChtNjhrX21hY2h0eXBlID09IE1BQ0hfQlZNRTYwMDApCisjZWxzZQorIyAgZGVmaW5lIE1BQ0hfQlZNRTYwMDBfT05MWQorIyAgZGVmaW5lIE1BQ0hfSVNfQlZNRTYwMDAgKDEpCisjICBkZWZpbmUgTUFDSF9UWVBFIChNQUNIX0JWTUU2MDAwKQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZCAoQ09ORklHX0hQMzAwKQorIyAgZGVmaW5lIE1BQ0hfSVNfSFAzMDAgKDApCisjZWxpZiBkZWZpbmVkKENPTkZJR19BTUlHQSkgfHwgZGVmaW5lZChDT05GSUdfTUFDKSB8fCBkZWZpbmVkKENPTkZJR19BVEFSSSkgXAorCXx8IGRlZmluZWQoQ09ORklHX0FQT0xMTykgfHwgZGVmaW5lZChDT05GSUdfTVZNRTE2eCkgXAorCXx8IGRlZmluZWQoQ09ORklHX0JWTUU2MDAwKSB8fCBkZWZpbmVkKENPTkZJR19RNDApIFwKKwl8fCBkZWZpbmVkKENPTkZJR19TVU4zWCkgfHwgZGVmaW5lZChDT05GSUdfTVZNRTE0NykKKyMgIGRlZmluZSBNQUNIX0lTX0hQMzAwIChtNjhrX21hY2h0eXBlID09IE1BQ0hfSFAzMDApCisjZWxzZQorIyAgZGVmaW5lIE1BQ0hfSFAzMDBfT05MWQorIyAgZGVmaW5lIE1BQ0hfSVNfSFAzMDAgKDEpCisjICBkZWZpbmUgTUFDSF9UWVBFIChNQUNIX0hQMzAwKQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZCAoQ09ORklHX1E0MCkKKyMgIGRlZmluZSBNQUNIX0lTX1E0MCAoMCkKKyNlbGlmIGRlZmluZWQoQ09ORklHX0FNSUdBKSB8fCBkZWZpbmVkKENPTkZJR19NQUMpIHx8IGRlZmluZWQoQ09ORklHX0FUQVJJKSBcCisJfHwgZGVmaW5lZChDT05GSUdfQVBPTExPKSB8fCBkZWZpbmVkKENPTkZJR19NVk1FMTZ4KSAgICAgICAgICAgICAgICBcCisJfHwgZGVmaW5lZChDT05GSUdfQlZNRTYwMDApIHx8IGRlZmluZWQoQ09ORklHX0hQMzAwKSAgICAgICAgICAgICAgICBcCisJfHwgZGVmaW5lZChDT05GSUdfU1VOM1gpIHx8IGRlZmluZWQoQ09ORklHX01WTUUxNDcpCisjICBkZWZpbmUgTUFDSF9JU19RNDAgKG02OGtfbWFjaHR5cGUgPT0gTUFDSF9RNDApCisjZWxzZQorIyAgZGVmaW5lIE1BQ0hfUTQwX09OTFkKKyMgIGRlZmluZSBNQUNIX0lTX1E0MCAoMSkKKyMgIGRlZmluZSBNQUNIX1RZUEUgKE1BQ0hfUTQwKQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZCAoQ09ORklHX1NVTjNYKQorIyAgZGVmaW5lIE1BQ0hfSVNfU1VOM1ggKDApCisjZWxpZiBkZWZpbmVkKENPTkZJR19BTUlHQSkgfHwgZGVmaW5lZChDT05GSUdfTUFDKSB8fCBkZWZpbmVkKENPTkZJR19BVEFSSSkgXAorCXx8IGRlZmluZWQoQ09ORklHX0FQT0xMTykgfHwgZGVmaW5lZChDT05GSUdfTVZNRTE2eCkgICAgICAgICAgICAgICAgXAorCXx8IGRlZmluZWQoQ09ORklHX0JWTUU2MDAwKSB8fCBkZWZpbmVkKENPTkZJR19IUDMwMCkgICAgICAgICAgICAgICAgXAorCXx8IGRlZmluZWQoQ09ORklHX1E0MCkgfHwgZGVmaW5lZChDT05GSUdfTVZNRTE0NykKKyMgIGRlZmluZSBNQUNIX0lTX1NVTjNYIChtNjhrX21hY2h0eXBlID09IE1BQ0hfU1VOM1gpCisjZWxzZQorIyAgZGVmaW5lIENPTkZJR19TVU4zWF9PTkxZCisjICBkZWZpbmUgTUFDSF9JU19TVU4zWCAoMSkKKyMgIGRlZmluZSBNQUNIX1RZUEUgKE1BQ0hfU1VOM1gpCisjZW5kaWYKKworI2lmbmRlZiBNQUNIX1RZUEUKKyMgIGRlZmluZSBNQUNIX1RZUEUgKG02OGtfbWFjaHR5cGUpCisjZW5kaWYKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworCisgICAgLyoKKyAgICAgKiAgQ1BVLCBGUFUgYW5kIE1NVSB0eXBlcworICAgICAqCisgICAgICogIE5vdGU6IHdlIG1heSByZWx5IG9uIHRoZSBmb2xsb3dpbmcgZXF1YWxpdGllczoKKyAgICAgKgorICAgICAqICAgICAgQ1BVXzY4MDIwID09IE1NVV82ODg1MQorICAgICAqICAgICAgQ1BVXzY4MDMwID09IE1NVV82ODAzMAorICAgICAqICAgICAgQ1BVXzY4MDQwID09IEZQVV82ODA0MCA9PSBNTVVfNjgwNDAKKyAgICAgKiAgICAgIENQVV82ODA2MCA9PSBGUFVfNjgwNjAgPT0gTU1VXzY4MDYwCisgICAgICovCisKKyNkZWZpbmUgQ1BVQl82ODAyMCAgICAgMAorI2RlZmluZSBDUFVCXzY4MDMwICAgICAxCisjZGVmaW5lIENQVUJfNjgwNDAgICAgIDIKKyNkZWZpbmUgQ1BVQl82ODA2MCAgICAgMworCisjZGVmaW5lIENQVV82ODAyMCAgICAgICgxPDxDUFVCXzY4MDIwKQorI2RlZmluZSBDUFVfNjgwMzAgICAgICAoMTw8Q1BVQl82ODAzMCkKKyNkZWZpbmUgQ1BVXzY4MDQwICAgICAgKDE8PENQVUJfNjgwNDApCisjZGVmaW5lIENQVV82ODA2MCAgICAgICgxPDxDUFVCXzY4MDYwKQorCisjZGVmaW5lIEZQVUJfNjg4ODEgICAgIDAKKyNkZWZpbmUgRlBVQl82ODg4MiAgICAgMQorI2RlZmluZSBGUFVCXzY4MDQwICAgICAyICAgICAgICAgICAgICAgICAgICAgICAvKiBJbnRlcm5hbCBGUFUgKi8KKyNkZWZpbmUgRlBVQl82ODA2MCAgICAgMyAgICAgICAgICAgICAgICAgICAgICAgLyogSW50ZXJuYWwgRlBVICovCisjZGVmaW5lIEZQVUJfU1VORlBBICAgIDQgICAgICAgICAgICAgICAgICAgICAgIC8qIFN1bi0zIEZQQSAqLworCisjZGVmaW5lIEZQVV82ODg4MSAgICAgICgxPDxGUFVCXzY4ODgxKQorI2RlZmluZSBGUFVfNjg4ODIgICAgICAoMTw8RlBVQl82ODg4MikKKyNkZWZpbmUgRlBVXzY4MDQwICAgICAgKDE8PEZQVUJfNjgwNDApCisjZGVmaW5lIEZQVV82ODA2MCAgICAgICgxPDxGUFVCXzY4MDYwKQorI2RlZmluZSBGUFVfU1VORlBBICAgICAoMTw8RlBVQl9TVU5GUEEpCisKKyNkZWZpbmUgTU1VQl82ODg1MSAgICAgMAorI2RlZmluZSBNTVVCXzY4MDMwICAgICAxICAgICAgICAgICAgICAgICAgICAgICAvKiBJbnRlcm5hbCBNTVUgKi8KKyNkZWZpbmUgTU1VQl82ODA0MCAgICAgMiAgICAgICAgICAgICAgICAgICAgICAgLyogSW50ZXJuYWwgTU1VICovCisjZGVmaW5lIE1NVUJfNjgwNjAgICAgIDMgICAgICAgICAgICAgICAgICAgICAgIC8qIEludGVybmFsIE1NVSAqLworI2RlZmluZSBNTVVCX0FQT0xMTyAgICA0ICAgICAgICAgICAgICAgICAgICAgICAvKiBDdXN0b20gQXBvbGxvICovCisjZGVmaW5lIE1NVUJfU1VOMyAgICAgIDUgICAgICAgICAgICAgICAgICAgICAgIC8qIEN1c3RvbSBTdW4tMyAqLworCisjZGVmaW5lIE1NVV82ODg1MSAgICAgICgxPDxNTVVCXzY4ODUxKQorI2RlZmluZSBNTVVfNjgwMzAgICAgICAoMTw8TU1VQl82ODAzMCkKKyNkZWZpbmUgTU1VXzY4MDQwICAgICAgKDE8PE1NVUJfNjgwNDApCisjZGVmaW5lIE1NVV82ODA2MCAgICAgICgxPDxNTVVCXzY4MDYwKQorI2RlZmluZSBNTVVfU1VOMyAgICAgICAoMTw8TU1VQl9TVU4zKQorI2RlZmluZSBNTVVfQVBPTExPICAgICAoMTw8TU1VQl9BUE9MTE8pCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitleHRlcm4gdW5zaWduZWQgbG9uZyBtNjhrX2NwdXR5cGU7CitleHRlcm4gdW5zaWduZWQgbG9uZyBtNjhrX2ZwdXR5cGU7CitleHRlcm4gdW5zaWduZWQgbG9uZyBtNjhrX21tdXR5cGU7CQkvKiBOb3QgcmVhbGx5IHVzZWQgeWV0ICovCisjaWZkZWYgQ09ORklHX1ZNRQorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdm1lX2JyZHR5cGU7CisjZW5kaWYKKworICAgIC8qCisgICAgICogIG02OGtfaXMwNDBvcjA2MCBpcyAhPSAwIGZvciBhICcwNDAgb3IgaGlnaGVyOworICAgICAqICB1c2VkIG51bWJlcnMgYXJlIDQgZm9yIDY4MDQwIGFuZCA2IGZvciA2ODA2MC4KKyAgICAgKi8KKworZXh0ZXJuIGludCBtNjhrX2lzMDQwb3IwNjA7CisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisjaWYgIWRlZmluZWQoQ09ORklHX002ODAyMCkKKyMgIGRlZmluZSBDUFVfSVNfMDIwICgwKQorIyAgZGVmaW5lIE1NVV9JU184NTEgKDApCisjICBkZWZpbmUgTU1VX0lTX1NVTjMgKDApCisjZWxpZiBkZWZpbmVkKENPTkZJR19NNjgwMzApIHx8IGRlZmluZWQoQ09ORklHX002ODA0MCkgfHwgZGVmaW5lZChDT05GSUdfTTY4MDYwKQorIyAgZGVmaW5lIENQVV9JU18wMjAgKG02OGtfY3B1dHlwZSAmIENQVV82ODAyMCkKKyMgIGRlZmluZSBNTVVfSVNfODUxIChtNjhrX21tdXR5cGUgJiBNTVVfNjg4NTEpCisjICBkZWZpbmUgTU1VX0lTX1NVTjMgKDApCS8qIFN1bjMgbm90IHN1cHBvcnRlZCB3aXRoIG90aGVyIENQVSBlbmFibGVkICovCisjZWxzZQorIyAgZGVmaW5lIENQVV9NNjgwMjBfT05MWQorIyAgZGVmaW5lIENQVV9JU18wMjAgKDEpCisjaWZkZWYgTUFDSF9TVU4zX09OTFkKKyMgIGRlZmluZSBNTVVfSVNfU1VOMyAoMSkKKyMgIGRlZmluZSBNTVVfSVNfODUxICgwKQorI2Vsc2UKKyMgIGRlZmluZSBNTVVfSVNfU1VOMyAoMCkKKyMgIGRlZmluZSBNTVVfSVNfODUxICgxKQorI2VuZGlmCisjZW5kaWYKKworI2lmICFkZWZpbmVkKENPTkZJR19NNjgwMzApCisjICBkZWZpbmUgQ1BVX0lTXzAzMCAoMCkKKyMgIGRlZmluZSBNTVVfSVNfMDMwICgwKQorI2VsaWYgZGVmaW5lZChDT05GSUdfTTY4MDIwKSB8fCBkZWZpbmVkKENPTkZJR19NNjgwNDApIHx8IGRlZmluZWQoQ09ORklHX002ODA2MCkKKyMgIGRlZmluZSBDUFVfSVNfMDMwIChtNjhrX2NwdXR5cGUgJiBDUFVfNjgwMzApCisjICBkZWZpbmUgTU1VX0lTXzAzMCAobTY4a19tbXV0eXBlICYgTU1VXzY4MDMwKQorI2Vsc2UKKyMgIGRlZmluZSBDUFVfTTY4MDMwX09OTFkKKyMgIGRlZmluZSBDUFVfSVNfMDMwICgxKQorIyAgZGVmaW5lIE1NVV9JU18wMzAgKDEpCisjZW5kaWYKKworI2lmICFkZWZpbmVkKENPTkZJR19NNjgwNDApCisjICBkZWZpbmUgQ1BVX0lTXzA0MCAoMCkKKyMgIGRlZmluZSBNTVVfSVNfMDQwICgwKQorI2VsaWYgZGVmaW5lZChDT05GSUdfTTY4MDIwKSB8fCBkZWZpbmVkKENPTkZJR19NNjgwMzApIHx8IGRlZmluZWQoQ09ORklHX002ODA2MCkKKyMgIGRlZmluZSBDUFVfSVNfMDQwIChtNjhrX2NwdXR5cGUgJiBDUFVfNjgwNDApCisjICBkZWZpbmUgTU1VX0lTXzA0MCAobTY4a19tbXV0eXBlICYgTU1VXzY4MDQwKQorI2Vsc2UKKyMgIGRlZmluZSBDUFVfTTY4MDQwX09OTFkKKyMgIGRlZmluZSBDUFVfSVNfMDQwICgxKQorIyAgZGVmaW5lIE1NVV9JU18wNDAgKDEpCisjZW5kaWYKKworI2lmICFkZWZpbmVkKENPTkZJR19NNjgwNjApCisjICBkZWZpbmUgQ1BVX0lTXzA2MCAoMCkKKyMgIGRlZmluZSBNTVVfSVNfMDYwICgwKQorI2VsaWYgZGVmaW5lZChDT05GSUdfTTY4MDIwKSB8fCBkZWZpbmVkKENPTkZJR19NNjgwMzApIHx8IGRlZmluZWQoQ09ORklHX002ODA0MCkKKyMgIGRlZmluZSBDUFVfSVNfMDYwIChtNjhrX2NwdXR5cGUgJiBDUFVfNjgwNjApCisjICBkZWZpbmUgTU1VX0lTXzA2MCAobTY4a19tbXV0eXBlICYgTU1VXzY4MDYwKQorI2Vsc2UKKyMgIGRlZmluZSBDUFVfTTY4MDYwX09OTFkKKyMgIGRlZmluZSBDUFVfSVNfMDYwICgxKQorIyAgZGVmaW5lIE1NVV9JU18wNjAgKDEpCisjZW5kaWYKKworI2lmICFkZWZpbmVkKENPTkZJR19NNjgwMjApICYmICFkZWZpbmVkKENPTkZJR19NNjgwMzApCisjICBkZWZpbmUgQ1BVX0lTXzAyMF9PUl8wMzAgKDApCisjZWxzZQorIyAgZGVmaW5lIENQVV9NNjgwMjBfT1JfTTY4MDMwCisjICBpZiBkZWZpbmVkKENPTkZJR19NNjgwNDApIHx8IGRlZmluZWQoQ09ORklHX002ODA2MCkKKyMgICAgZGVmaW5lIENQVV9JU18wMjBfT1JfMDMwICghbTY4a19pczA0MG9yMDYwKQorIyAgZWxzZQorIyAgICBkZWZpbmUgQ1BVX002ODAyMF9PUl9NNjgwMzBfT05MWQorIyAgICBkZWZpbmUgQ1BVX0lTXzAyMF9PUl8wMzAgKDEpCisjICBlbmRpZgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChDT05GSUdfTTY4MDQwKSAmJiAhZGVmaW5lZChDT05GSUdfTTY4MDYwKQorIyAgZGVmaW5lIENQVV9JU18wNDBfT1JfMDYwICgwKQorI2Vsc2UKKyMgIGRlZmluZSBDUFVfTTY4MDQwX09SX002ODA2MAorIyAgaWYgZGVmaW5lZChDT05GSUdfTTY4MDIwKSB8fCBkZWZpbmVkKENPTkZJR19NNjgwMzApCisjICAgIGRlZmluZSBDUFVfSVNfMDQwX09SXzA2MCAobTY4a19pczA0MG9yMDYwKQorIyAgZWxzZQorIyAgICBkZWZpbmUgQ1BVX002ODA0MF9PUl9NNjgwNjBfT05MWQorIyAgICBkZWZpbmUgQ1BVX0lTXzA0MF9PUl8wNjAgKDEpCisjICBlbmRpZgorI2VuZGlmCisKKyNkZWZpbmUgQ1BVX1RZUEUgKG02OGtfY3B1dHlwZSkKKworI2lmZGVmIENPTkZJR19NNjhLRlBVX0VNVQorIyAgaWZkZWYgQ09ORklHX002OEtGUFVfRU1VX09OTFkKKyMgICAgZGVmaW5lIEZQVV9JU19FTVUgKDEpCisjICBlbHNlCisjICAgIGRlZmluZSBGUFVfSVNfRU1VICghbTY4a19mcHV0eXBlKQorIyAgZW5kaWYKKyNlbHNlCisjICBkZWZpbmUgRlBVX0lTX0VNVSAoMCkKKyNlbmRpZgorCisKKyAgICAvKgorICAgICAqICBNaXNjZWxsYW5lb3VzCisgICAgICovCisKKyNkZWZpbmUgTlVNX01FTUlORk8JNAorI2RlZmluZSBDTF9TSVpFCQkyNTYKKyNkZWZpbmUgQ09NTUFORF9MSU5FX1NJWkUJQ0xfU0laRQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworZXh0ZXJuIGludCBtNjhrX251bV9tZW1vcnk7CQkvKiAjIG9mIG1lbW9yeSBibG9ja3MgZm91bmQgKGFuZCB1c2VkKSAqLworZXh0ZXJuIGludCBtNjhrX3JlYWxudW1fbWVtb3J5OwkJLyogcmVhbCAjIG9mIG1lbW9yeSBibG9ja3MgZm91bmQgKi8KK2V4dGVybiBzdHJ1Y3QgbWVtX2luZm8gbTY4a19tZW1vcnlbTlVNX01FTUlORk9dOy8qIG1lbW9yeSBkZXNjcmlwdGlvbiAqLworCitzdHJ1Y3QgbWVtX2luZm8geworCXVuc2lnbmVkIGxvbmcgYWRkcjsJCS8qIHBoeXNpY2FsIGFkZHJlc3Mgb2YgbWVtb3J5IGNodW5rICovCisJdW5zaWduZWQgbG9uZyBzaXplOwkJLyogbGVuZ3RoIG9mIG1lbW9yeSBjaHVuayAoaW4gYnl0ZXMpICovCit9OworI2VuZGlmCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfTTY4S19TRVRVUF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL3NobS5oIGIvaW5jbHVkZS9hc20tbTY4ay9zaG0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmEyZjM2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9zaG0uaApAQCAtMCwwICsxLDMyIEBACisjaWZuZGVmIF9NNjhLX1NITV9ICisjZGVmaW5lIF9NNjhLX1NITV9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworLyogZm9ybWF0IG9mIHBhZ2UgdGFibGUgZW50cmllcyB0aGF0IGNvcnJlc3BvbmQgdG8gc2hhcmVkIG1lbW9yeSBwYWdlcworICAgY3VycmVudGx5IG91dCBpbiBzd2FwIHNwYWNlIChzZWUgYWxzbyBtbS9zd2FwLmMpOgorICAgYml0cyAwLTEgKFBBR0VfUFJFU0VOVCkgaXMgID0gMAorICAgYml0cyA4Li4yIChTV1BfVFlQRSkgYXJlID0gU0hNX1NXUF9UWVBFCisgICBiaXRzIDMxLi45IGFyZSB1c2VkIGxpa2UgdGhpczoKKyAgIGJpdHMgMTUuLjkgKFNITV9JRCkgdGhlIGlkIG9mIHRoZSBzaGFyZWQgbWVtb3J5IHNlZ21lbnQKKyAgIGJpdHMgMzAuLjE2IChTSE1fSURYKSB0aGUgaW5kZXggb2YgdGhlIHBhZ2Ugd2l0aGluIHRoZSBzaGFyZWQgbWVtb3J5IHNlZ21lbnQKKyAgICAgICAgICAgICAgICAgICAgKGFjdHVhbGx5IG9ubHkgYml0cyAyNS4uMTYgZ2V0IHVzZWQgc2luY2UgU0hNTUFYIGlzIHNvIGxvdykKKyAgIGJpdCAzMSAoU0hNX1JFQURfT05MWSkgZmxhZyB3aGV0aGVyIHRoZSBwYWdlIGJlbG9uZ3MgdG8gYSByZWFkLW9ubHkgYXR0YWNoCisqLworLyogb24gdGhlIG02OGsgYm90aCBiaXRzIDAgYW5kIDEgbXVzdCBiZSB6ZXJvICovCisvKiBmb3JtYXQgb24gdGhlIHN1bjMgaXMgc2ltaWxhciwgYnV0IGJpdHMgMzAsIDMxIGFyZSBzZXQgdG8gemVybyBhbmQgYWxsCisgICBvdGhlcnMgYXJlIHJlZHVjZWQgYnkgMi4gLS1tICovCisKKyNpZm5kZWYgQ09ORklHX1NVTjMKKyNkZWZpbmUgU0hNX0lEX1NISUZUCTkKKyNlbHNlCisjZGVmaW5lIFNITV9JRF9TSElGVAk3CisjZW5kaWYKKyNkZWZpbmUgX1NITV9JRF9CSVRTCTcKKyNkZWZpbmUgU0hNX0lEX01BU0sJKCgxPDxfU0hNX0lEX0JJVFMpLTEpCisKKyNkZWZpbmUgU0hNX0lEWF9TSElGVAkoU0hNX0lEX1NISUZUK19TSE1fSURfQklUUykKKyNkZWZpbmUgX1NITV9JRFhfQklUUwkxNQorI2RlZmluZSBTSE1fSURYX01BU0sJKCgxPDxfU0hNX0lEWF9CSVRTKS0xKQorCisjZW5kaWYgLyogX002OEtfU0hNX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvc2htYnVmLmggYi9pbmNsdWRlL2FzbS1tNjhrL3NobWJ1Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4OTI4ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL3NobWJ1Zi5oCkBAIC0wLDAgKzEsNDIgQEAKKyNpZm5kZWYgX002OEtfU0hNQlVGX0gKKyNkZWZpbmUgX002OEtfU0hNQlVGX0gKKworLyoKKyAqIFRoZSBzaG1pZDY0X2RzIHN0cnVjdHVyZSBmb3IgbTY4ayBhcmNoaXRlY3R1cmUuCisgKiBOb3RlIGV4dHJhIHBhZGRpbmcgYmVjYXVzZSB0aGlzIHN0cnVjdHVyZSBpcyBwYXNzZWQgYmFjayBhbmQgZm9ydGgKKyAqIGJldHdlZW4ga2VybmVsIGFuZCB1c2VyIHNwYWNlLgorICoKKyAqIFBhZCBzcGFjZSBpcyBsZWZ0IGZvcjoKKyAqIC0gNjQtYml0IHRpbWVfdCB0byBzb2x2ZSB5MjAzOCBwcm9ibGVtCisgKiAtIDIgbWlzY2VsbGFuZW91cyAzMi1iaXQgdmFsdWVzCisgKi8KKworc3RydWN0IHNobWlkNjRfZHMgeworCXN0cnVjdCBpcGM2NF9wZXJtCXNobV9wZXJtOwkvKiBvcGVyYXRpb24gcGVybXMgKi8KKwlzaXplX3QJCQlzaG1fc2Vnc3o7CS8qIHNpemUgb2Ygc2VnbWVudCAoYnl0ZXMpICovCisJX19rZXJuZWxfdGltZV90CQlzaG1fYXRpbWU7CS8qIGxhc3QgYXR0YWNoIHRpbWUgKi8KKwl1bnNpZ25lZCBsb25nCQlfX3VudXNlZDE7CisJX19rZXJuZWxfdGltZV90CQlzaG1fZHRpbWU7CS8qIGxhc3QgZGV0YWNoIHRpbWUgKi8KKwl1bnNpZ25lZCBsb25nCQlfX3VudXNlZDI7CisJX19rZXJuZWxfdGltZV90CQlzaG1fY3RpbWU7CS8qIGxhc3QgY2hhbmdlIHRpbWUgKi8KKwl1bnNpZ25lZCBsb25nCQlfX3VudXNlZDM7CisJX19rZXJuZWxfcGlkX3QJCXNobV9jcGlkOwkvKiBwaWQgb2YgY3JlYXRvciAqLworCV9fa2VybmVsX3BpZF90CQlzaG1fbHBpZDsJLyogcGlkIG9mIGxhc3Qgb3BlcmF0b3IgKi8KKwl1bnNpZ25lZCBsb25nCQlzaG1fbmF0dGNoOwkvKiBuby4gb2YgY3VycmVudCBhdHRhY2hlcyAqLworCXVuc2lnbmVkIGxvbmcJCV9fdW51c2VkNDsKKwl1bnNpZ25lZCBsb25nCQlfX3VudXNlZDU7Cit9OworCitzdHJ1Y3Qgc2htaW5mbzY0IHsKKwl1bnNpZ25lZCBsb25nCXNobW1heDsKKwl1bnNpZ25lZCBsb25nCXNobW1pbjsKKwl1bnNpZ25lZCBsb25nCXNobW1uaTsKKwl1bnNpZ25lZCBsb25nCXNobXNlZzsKKwl1bnNpZ25lZCBsb25nCXNobWFsbDsKKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkMTsKKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkMjsKKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkMzsKKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkNDsKK307CisKKyNlbmRpZiAvKiBfTTY4S19TSE1CVUZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9zaG1wYXJhbS5oIGIvaW5jbHVkZS9hc20tbTY4ay9zaG1wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1ODg5MmEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL3NobXBhcmFtLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9NNjhLX1NITVBBUkFNX0gKKyNkZWZpbmUgX002OEtfU0hNUEFSQU1fSAorCisjZGVmaW5lCVNITUxCQSBQQUdFX1NJWkUJCSAvKiBhdHRhY2ggYWRkciBhIG11bHRpcGxlIG9mIHRoaXMgKi8KKworI2VuZGlmIC8qIF9NNjhLX1NITVBBUkFNX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvc2lnY29udGV4dC5oIGIvaW5jbHVkZS9hc20tbTY4ay9zaWdjb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjRmYmUzNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvc2lnY29udGV4dC5oCkBAIC0wLDAgKzEsMTkgQEAKKyNpZm5kZWYgX0FTTV9NNjhrX1NJR0NPTlRFWFRfSAorI2RlZmluZSBfQVNNX002OGtfU0lHQ09OVEVYVF9ICisKK3N0cnVjdCBzaWdjb250ZXh0IHsKKwl1bnNpZ25lZCBsb25nICBzY19tYXNrOwkJLyogb2xkIHNpZ21hc2sgKi8KKwl1bnNpZ25lZCBsb25nICBzY191c3A7CQkvKiBvbGQgdXNlciBzdGFjayBwb2ludGVyICovCisJdW5zaWduZWQgbG9uZyAgc2NfZDA7CisJdW5zaWduZWQgbG9uZyAgc2NfZDE7CisJdW5zaWduZWQgbG9uZyAgc2NfYTA7CisJdW5zaWduZWQgbG9uZyAgc2NfYTE7CisJdW5zaWduZWQgc2hvcnQgc2Nfc3I7CisJdW5zaWduZWQgbG9uZyAgc2NfcGM7CisJdW5zaWduZWQgc2hvcnQgc2NfZm9ybWF0dmVjOworCXVuc2lnbmVkIGxvbmcgIHNjX2ZwcmVnc1syKjNdOyAgLyogcm9vbSBmb3IgdHdvIGZwIHJlZ2lzdGVycyAqLworCXVuc2lnbmVkIGxvbmcgIHNjX2ZwY250bFszXTsKKwl1bnNpZ25lZCBjaGFyICBzY19mcHN0YXRlWzIxNl07Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvc2lnaW5mby5oIGIvaW5jbHVkZS9hc20tbTY4ay9zaWdpbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVhOGQ2ZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvc2lnaW5mby5oCkBAIC0wLDAgKzEsOTIgQEAKKyNpZm5kZWYgX002OEtfU0lHSU5GT19ICisjZGVmaW5lIF9NNjhLX1NJR0lORk9fSAorCisjZGVmaW5lIEhBVkVfQVJDSF9TSUdJTkZPX1QKKyNkZWZpbmUgSEFWRV9BUkNIX0NPUFlfU0lHSU5GTworCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2lnaW5mby5oPgorCit0eXBlZGVmIHN0cnVjdCBzaWdpbmZvIHsKKwlpbnQgc2lfc2lnbm87CisJaW50IHNpX2Vycm5vOworCWludCBzaV9jb2RlOworCisJdW5pb24geworCQlpbnQgX3BhZFtTSV9QQURfU0laRV07CisKKwkJLyoga2lsbCgpICovCisJCXN0cnVjdCB7CisJCQlfX2tlcm5lbF9waWRfdCBfcGlkOwkvKiBzZW5kZXIncyBwaWQgKi8KKwkJCV9fa2VybmVsX3VpZF90IF91aWQ7CS8qIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5ICovCisJCQlfX2tlcm5lbF91aWQzMl90IF91aWQzMjsgLyogc2VuZGVyJ3MgdWlkICovCisJCX0gX2tpbGw7CisKKwkJLyogUE9TSVguMWIgdGltZXJzICovCisJCXN0cnVjdCB7CisJCQl0aW1lcl90IF90aWQ7CQkvKiB0aW1lciBpZCAqLworCQkJaW50IF9vdmVycnVuOwkJLyogb3ZlcnJ1biBjb3VudCAqLworCQkJY2hhciBfcGFkW3NpemVvZiggX19BUkNIX1NJX1VJRF9UKSAtIHNpemVvZihpbnQpXTsKKwkJCXNpZ3ZhbF90IF9zaWd2YWw7CS8qIHNhbWUgYXMgYmVsb3cgKi8KKwkJCWludCBfc3lzX3ByaXZhdGU7ICAgICAgIC8qIG5vdCB0byBiZSBwYXNzZWQgdG8gdXNlciAqLworCQl9IF90aW1lcjsKKworCQkvKiBQT1NJWC4xYiBzaWduYWxzICovCisJCXN0cnVjdCB7CisJCQlfX2tlcm5lbF9waWRfdCBfcGlkOwkvKiBzZW5kZXIncyBwaWQgKi8KKwkJCV9fa2VybmVsX3VpZF90IF91aWQ7CS8qIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5ICovCisJCQlzaWd2YWxfdCBfc2lndmFsOworCQkJX19rZXJuZWxfdWlkMzJfdCBfdWlkMzI7IC8qIHNlbmRlcidzIHVpZCAqLworCQl9IF9ydDsKKworCQkvKiBTSUdDSExEICovCisJCXN0cnVjdCB7CisJCQlfX2tlcm5lbF9waWRfdCBfcGlkOwkvKiB3aGljaCBjaGlsZCAqLworCQkJX19rZXJuZWxfdWlkX3QgX3VpZDsJLyogYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgKi8KKwkJCWludCBfc3RhdHVzOwkJLyogZXhpdCBjb2RlICovCisJCQljbG9ja190IF91dGltZTsKKwkJCWNsb2NrX3QgX3N0aW1lOworCQkJX19rZXJuZWxfdWlkMzJfdCBfdWlkMzI7IC8qIHNlbmRlcidzIHVpZCAqLworCQl9IF9zaWdjaGxkOworCisJCS8qIFNJR0lMTCwgU0lHRlBFLCBTSUdTRUdWLCBTSUdCVVMgKi8KKwkJc3RydWN0IHsKKwkJCXZvaWQgKl9hZGRyOyAvKiBmYXVsdGluZyBpbnNuL21lbW9yeSByZWYuICovCisJCX0gX3NpZ2ZhdWx0OworCisJCS8qIFNJR1BPTEwgKi8KKwkJc3RydWN0IHsKKwkJCWludCBfYmFuZDsJLyogUE9MTF9JTiwgUE9MTF9PVVQsIFBPTExfTVNHICovCisJCQlpbnQgX2ZkOworCQl9IF9zaWdwb2xsOworCX0gX3NpZmllbGRzOworfSBzaWdpbmZvX3Q7CisKKyNkZWZpbmUgVUlEMTZfU0lHSU5GT19DT01QQVRfTkVFREVECisKKy8qCisgKiBIb3cgdGhlc2UgZmllbGRzIGFyZSB0byBiZSBhY2Nlc3NlZC4KKyAqLworI3VuZGVmIHNpX3VpZAorI2lmZGVmIF9fS0VSTkVMX18KKyNkZWZpbmUgc2lfdWlkCQlfc2lmaWVsZHMuX2tpbGwuX3VpZDMyCisjZGVmaW5lIHNpX3VpZDE2CV9zaWZpZWxkcy5fa2lsbC5fdWlkCisjZWxzZQorI2RlZmluZSBzaV91aWQJCV9zaWZpZWxkcy5fa2lsbC5fdWlkCisjZW5kaWYKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorCitzdGF0aWMgaW5saW5lIHZvaWQgY29weV9zaWdpbmZvKHN0cnVjdCBzaWdpbmZvICp0bywgc3RydWN0IHNpZ2luZm8gKmZyb20pCit7CisJaWYgKGZyb20tPnNpX2NvZGUgPCAwKQorCQltZW1jcHkodG8sIGZyb20sIHNpemVvZigqdG8pKTsKKwllbHNlCisJCS8qIF9zaWdjaGxkIGlzIGN1cnJlbnRseSB0aGUgbGFyZ2VzdCBrbm93IHVuaW9uIG1lbWJlciAqLworCQltZW1jcHkodG8sIGZyb20sIDMqc2l6ZW9mKGludCkgKyBzaXplb2YoZnJvbS0+X3NpZmllbGRzLl9zaWdjaGxkKSk7Cit9CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9zaWduYWwuaCBiL2luY2x1ZGUvYXNtLW02OGsvc2lnbmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY4MWJiNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvc2lnbmFsLmgKQEAgLTAsMCArMSwyMjAgQEAKKyNpZm5kZWYgX002OEtfU0lHTkFMX0gKKyNkZWZpbmUgX002OEtfU0lHTkFMX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qIEF2b2lkIHRvbyBtYW55IGhlYWRlciBvcmRlcmluZyBwcm9ibGVtcy4gICovCitzdHJ1Y3Qgc2lnaW5mbzsKKworI2lmZGVmIF9fS0VSTkVMX18KKy8qIE1vc3QgdGhpbmdzIHNob3VsZCBiZSBjbGVhbiBlbm91Z2ggdG8gcmVkZWZpbmUgdGhpcyBhdCB3aWxsLCBpZiBjYXJlCisgICBpcyB0YWtlbiB0byBtYWtlIGxpYmMgbWF0Y2guICAqLworCisjZGVmaW5lIF9OU0lHCQk2NAorI2RlZmluZSBfTlNJR19CUFcJMzIKKyNkZWZpbmUgX05TSUdfV09SRFMJKF9OU0lHIC8gX05TSUdfQlBXKQorCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgb2xkX3NpZ3NldF90OwkJLyogYXQgbGVhc3QgMzIgYml0cyAqLworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgbG9uZyBzaWdbX05TSUdfV09SRFNdOworfSBzaWdzZXRfdDsKKworI2Vsc2UKKy8qIEhlcmUgd2UgbXVzdCBjYXRlciB0byBsaWJjcyB0aGF0IHBva2UgYWJvdXQgaW4ga2VybmVsIGhlYWRlcnMuICAqLworCisjZGVmaW5lIE5TSUcJCTMyCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgc2lnc2V0X3Q7CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNkZWZpbmUgU0lHSFVQCQkgMQorI2RlZmluZSBTSUdJTlQJCSAyCisjZGVmaW5lIFNJR1FVSVQJCSAzCisjZGVmaW5lIFNJR0lMTAkJIDQKKyNkZWZpbmUgU0lHVFJBUAkJIDUKKyNkZWZpbmUgU0lHQUJSVAkJIDYKKyNkZWZpbmUgU0lHSU9UCQkgNgorI2RlZmluZSBTSUdCVVMJCSA3CisjZGVmaW5lIFNJR0ZQRQkJIDgKKyNkZWZpbmUgU0lHS0lMTAkJIDkKKyNkZWZpbmUgU0lHVVNSMQkJMTAKKyNkZWZpbmUgU0lHU0VHVgkJMTEKKyNkZWZpbmUgU0lHVVNSMgkJMTIKKyNkZWZpbmUgU0lHUElQRQkJMTMKKyNkZWZpbmUgU0lHQUxSTQkJMTQKKyNkZWZpbmUgU0lHVEVSTQkJMTUKKyNkZWZpbmUgU0lHU1RLRkxUCTE2CisjZGVmaW5lIFNJR0NITEQJCTE3CisjZGVmaW5lIFNJR0NPTlQJCTE4CisjZGVmaW5lIFNJR1NUT1AJCTE5CisjZGVmaW5lIFNJR1RTVFAJCTIwCisjZGVmaW5lIFNJR1RUSU4JCTIxCisjZGVmaW5lIFNJR1RUT1UJCTIyCisjZGVmaW5lIFNJR1VSRwkJMjMKKyNkZWZpbmUgU0lHWENQVQkJMjQKKyNkZWZpbmUgU0lHWEZTWgkJMjUKKyNkZWZpbmUgU0lHVlRBTFJNCTI2CisjZGVmaW5lIFNJR1BST0YJCTI3CisjZGVmaW5lIFNJR1dJTkNICTI4CisjZGVmaW5lIFNJR0lPCQkyOQorI2RlZmluZSBTSUdQT0xMCQlTSUdJTworLyoKKyNkZWZpbmUgU0lHTE9TVAkJMjkKKyovCisjZGVmaW5lIFNJR1BXUgkJMzAKKyNkZWZpbmUgU0lHU1lTCQkzMQorI2RlZmluZQlTSUdVTlVTRUQJMzEKKworLyogVGhlc2Ugc2hvdWxkIG5vdCBiZSBjb25zaWRlcmVkIGNvbnN0YW50cyBmcm9tIHVzZXJsYW5kLiAgKi8KKyNkZWZpbmUgU0lHUlRNSU4JMzIKKyNkZWZpbmUgU0lHUlRNQVgJX05TSUcKKworLyoKKyAqIFNBX0ZMQUdTIHZhbHVlczoKKyAqCisgKiBTQV9PTlNUQUNLIGluZGljYXRlcyB0aGF0IGEgcmVnaXN0ZXJlZCBzdGFja190IHdpbGwgYmUgdXNlZC4KKyAqIFNBX0lOVEVSUlVQVCBpcyBhIG5vLW9wLCBidXQgbGVmdCBkdWUgdG8gaGlzdG9yaWNhbCByZWFzb25zLiBVc2UgdGhlCisgKiBTQV9SRVNUQVJUIGZsYWcgdG8gZ2V0IHJlc3RhcnRpbmcgc2lnbmFscyAod2hpY2ggd2VyZSB0aGUgZGVmYXVsdCBsb25nIGFnbykKKyAqIFNBX05PQ0xEU1RPUCBmbGFnIHRvIHR1cm4gb2ZmIFNJR0NITEQgd2hlbiBjaGlsZHJlbiBzdG9wLgorICogU0FfUkVTRVRIQU5EIGNsZWFycyB0aGUgaGFuZGxlciB3aGVuIHRoZSBzaWduYWwgaXMgZGVsaXZlcmVkLgorICogU0FfTk9DTERXQUlUIGZsYWcgb24gU0lHQ0hMRCB0byBpbmhpYml0IHpvbWJpZXMuCisgKiBTQV9OT0RFRkVSIHByZXZlbnRzIHRoZSBjdXJyZW50IHNpZ25hbCBmcm9tIGJlaW5nIG1hc2tlZCBpbiB0aGUgaGFuZGxlci4KKyAqCisgKiBTQV9PTkVTSE9UIGFuZCBTQV9OT01BU0sgYXJlIHRoZSBoaXN0b3JpY2FsIExpbnV4IG5hbWVzIGZvciB0aGUgU2luZ2xlCisgKiBVbml4IG5hbWVzIFJFU0VUSEFORCBhbmQgTk9ERUZFUiByZXNwZWN0aXZlbHkuCisgKi8KKyNkZWZpbmUgU0FfTk9DTERTVE9QCTB4MDAwMDAwMDEKKyNkZWZpbmUgU0FfTk9DTERXQUlUCTB4MDAwMDAwMDIKKyNkZWZpbmUgU0FfU0lHSU5GTwkweDAwMDAwMDA0CisjZGVmaW5lIFNBX09OU1RBQ0sJMHgwODAwMDAwMAorI2RlZmluZSBTQV9SRVNUQVJUCTB4MTAwMDAwMDAKKyNkZWZpbmUgU0FfTk9ERUZFUgkweDQwMDAwMDAwCisjZGVmaW5lIFNBX1JFU0VUSEFORAkweDgwMDAwMDAwCisKKyNkZWZpbmUgU0FfTk9NQVNLCVNBX05PREVGRVIKKyNkZWZpbmUgU0FfT05FU0hPVAlTQV9SRVNFVEhBTkQKKyNkZWZpbmUgU0FfSU5URVJSVVBUCTB4MjAwMDAwMDAgLyogZHVtbXkgLS0gaWdub3JlZCAqLworCisvKgorICogc2lnYWx0c3RhY2sgY29udHJvbHMKKyAqLworI2RlZmluZSBTU19PTlNUQUNLCTEKKyNkZWZpbmUgU1NfRElTQUJMRQkyCisKKyNkZWZpbmUgTUlOU0lHU1RLU1oJMjA0OAorI2RlZmluZSBTSUdTVEtTWgk4MTkyCisKKyNpZmRlZiBfX0tFUk5FTF9fCisvKgorICogVGhlc2UgdmFsdWVzIG9mIHNhX2ZsYWdzIGFyZSB1c2VkIG9ubHkgYnkgdGhlIGtlcm5lbCBhcyBwYXJ0IG9mIHRoZQorICogaXJxIGhhbmRsaW5nIHJvdXRpbmVzLgorICoKKyAqIFNBX0lOVEVSUlVQVCBpcyBhbHNvIHVzZWQgYnkgdGhlIGlycSBoYW5kbGluZyByb3V0aW5lcy4KKyAqIFNBX1NISVJRIGlzIGZvciBzaGFyZWQgaW50ZXJydXB0IHN1cHBvcnQgb24gUENJIGFuZCBFSVNBLgorICovCisjZGVmaW5lIFNBX1BST0JFCQlTQV9PTkVTSE9UCisjZGVmaW5lIFNBX1NBTVBMRV9SQU5ET00JU0FfUkVTVEFSVAorI2RlZmluZSBTQV9TSElSUQkJMHgwNDAwMDAwMAorI2VuZGlmCisKKyNkZWZpbmUgU0lHX0JMT0NLICAgICAgICAgIDAJLyogZm9yIGJsb2NraW5nIHNpZ25hbHMgKi8KKyNkZWZpbmUgU0lHX1VOQkxPQ0sgICAgICAgIDEJLyogZm9yIHVuYmxvY2tpbmcgc2lnbmFscyAqLworI2RlZmluZSBTSUdfU0VUTUFTSyAgICAgICAgMgkvKiBmb3Igc2V0dGluZyB0aGUgc2lnbmFsIG1hc2sgKi8KKworLyogVHlwZSBvZiBhIHNpZ25hbCBoYW5kbGVyLiAgKi8KK3R5cGVkZWYgdm9pZCAoKl9fc2lnaGFuZGxlcl90KShpbnQpOworCisjZGVmaW5lIFNJR19ERkwJKChfX3NpZ2hhbmRsZXJfdCkwKQkvKiBkZWZhdWx0IHNpZ25hbCBoYW5kbGluZyAqLworI2RlZmluZSBTSUdfSUdOCSgoX19zaWdoYW5kbGVyX3QpMSkJLyogaWdub3JlIHNpZ25hbCAqLworI2RlZmluZSBTSUdfRVJSCSgoX19zaWdoYW5kbGVyX3QpLTEpCS8qIGVycm9yIHJldHVybiBmcm9tIHNpZ25hbCAqLworCisjaWZkZWYgX19LRVJORUxfXworc3RydWN0IG9sZF9zaWdhY3Rpb24geworCV9fc2lnaGFuZGxlcl90IHNhX2hhbmRsZXI7CisJb2xkX3NpZ3NldF90IHNhX21hc2s7CisJdW5zaWduZWQgbG9uZyBzYV9mbGFnczsKKwl2b2lkICgqc2FfcmVzdG9yZXIpKHZvaWQpOworfTsKKworc3RydWN0IHNpZ2FjdGlvbiB7CisJX19zaWdoYW5kbGVyX3Qgc2FfaGFuZGxlcjsKKwl1bnNpZ25lZCBsb25nIHNhX2ZsYWdzOworCXZvaWQgKCpzYV9yZXN0b3Jlcikodm9pZCk7CisJc2lnc2V0X3Qgc2FfbWFzazsJCS8qIG1hc2sgbGFzdCBmb3IgZXh0ZW5zaWJpbGl0eSAqLworfTsKKworc3RydWN0IGtfc2lnYWN0aW9uIHsKKwlzdHJ1Y3Qgc2lnYWN0aW9uIHNhOworfTsKKyNlbHNlCisvKiBIZXJlIHdlIG11c3QgY2F0ZXIgdG8gbGliY3MgdGhhdCBwb2tlIGFib3V0IGluIGtlcm5lbCBoZWFkZXJzLiAgKi8KKworc3RydWN0IHNpZ2FjdGlvbiB7CisJdW5pb24geworCSAgX19zaWdoYW5kbGVyX3QgX3NhX2hhbmRsZXI7CisJICB2b2lkICgqX3NhX3NpZ2FjdGlvbikoaW50LCBzdHJ1Y3Qgc2lnaW5mbyAqLCB2b2lkICopOworCX0gX3U7CisJc2lnc2V0X3Qgc2FfbWFzazsKKwl1bnNpZ25lZCBsb25nIHNhX2ZsYWdzOworCXZvaWQgKCpzYV9yZXN0b3Jlcikodm9pZCk7Cit9OworCisjZGVmaW5lIHNhX2hhbmRsZXIJX3UuX3NhX2hhbmRsZXIKKyNkZWZpbmUgc2Ffc2lnYWN0aW9uCV91Ll9zYV9zaWdhY3Rpb24KKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKwordHlwZWRlZiBzdHJ1Y3Qgc2lnYWx0c3RhY2sgeworCXZvaWQgKnNzX3NwOworCWludCBzc19mbGFnczsKKwlzaXplX3Qgc3Nfc2l6ZTsKK30gc3RhY2tfdDsKKworI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxhc20vc2lnY29udGV4dC5oPgorCisjZGVmaW5lIF9fSEFWRV9BUkNIX1NJR19CSVRPUFMKKworc3RhdGljIGlubGluZSB2b2lkIHNpZ2FkZHNldChzaWdzZXRfdCAqc2V0LCBpbnQgX3NpZykKK3sKKwlfX2FzbV9fKCJiZnNldCAlMHslMSwjMX0iIDogIj1tIiAoKnNldCkgOiAiaWQiICgoX3NpZyAtIDEpIF4gMzEpCisJCTogImNjIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzaWdkZWxzZXQoc2lnc2V0X3QgKnNldCwgaW50IF9zaWcpCit7CisJX19hc21fXygiYmZjbHIgJTB7JTEsIzF9IiA6ICI9bSIoKnNldCkgOiAiaWQiKChfc2lnIC0gMSkgXiAzMSkKKwkJOiAiY2MiKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19jb25zdF9zaWdpc21lbWJlcihzaWdzZXRfdCAqc2V0LCBpbnQgX3NpZykKK3sKKwl1bnNpZ25lZCBsb25nIHNpZyA9IF9zaWcgLSAxOworCXJldHVybiAxICYgKHNldC0+c2lnW3NpZyAvIF9OU0lHX0JQV10gPj4gKHNpZyAlIF9OU0lHX0JQVykpOworfQorCitzdGF0aWMgaW5saW5lIGludCBfX2dlbl9zaWdpc21lbWJlcihzaWdzZXRfdCAqc2V0LCBpbnQgX3NpZykKK3sKKwlpbnQgcmV0OworCV9fYXNtX18oImJmZXh0dSAlMXslMiwjMX0sJTAiCisJCTogIj1kIihyZXQpIDogIm0iKCpzZXQpLCAiaWQiKChfc2lnLTEpIF4gMzEpKTsKKwlyZXR1cm4gcmV0OworfQorCisjZGVmaW5lIHNpZ2lzbWVtYmVyKHNldCxzaWcpCQkJXAorCShfX2J1aWx0aW5fY29uc3RhbnRfcChzaWcpID8JCVwKKwkgX19jb25zdF9zaWdpc21lbWJlcihzZXQsc2lnKSA6CQlcCisJIF9fZ2VuX3NpZ2lzbWVtYmVyKHNldCxzaWcpKQorCitzdGF0aWMgaW5saW5lIGludCBzaWdmaW5kaW53b3JkKHVuc2lnbmVkIGxvbmcgd29yZCkKK3sKKwlfX2FzbV9fKCJiZmZmbyAlMXsjMCwjMH0sJTAiIDogIj1kIih3b3JkKSA6ICJkIih3b3JkICYgLXdvcmQpIDogImNjIik7CisJcmV0dXJuIHdvcmQgXiAzMTsKK30KKworZXh0ZXJuIHZvaWQgcHRyYWNlX3NpZ25hbF9kZWxpdmVyKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB2b2lkICpjb29raWUpOworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX002OEtfU0lHTkFMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvc29ja2V0LmggYi9pbmNsdWRlL2FzbS1tNjhrL3NvY2tldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkMGI5ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL3NvY2tldC5oCkBAIC0wLDAgKzEsNTAgQEAKKyNpZm5kZWYgX0FTTV9TT0NLRVRfSAorI2RlZmluZSBfQVNNX1NPQ0tFVF9ICisKKyNpbmNsdWRlIDxhc20vc29ja2lvcy5oPgorCisvKiBGb3Igc2V0c29ja29wdCgyKSAqLworI2RlZmluZSBTT0xfU09DS0VUCTEKKworI2RlZmluZSBTT19ERUJVRwkxCisjZGVmaW5lIFNPX1JFVVNFQUREUgkyCisjZGVmaW5lIFNPX1RZUEUJCTMKKyNkZWZpbmUgU09fRVJST1IJNAorI2RlZmluZSBTT19ET05UUk9VVEUJNQorI2RlZmluZSBTT19CUk9BRENBU1QJNgorI2RlZmluZSBTT19TTkRCVUYJNworI2RlZmluZSBTT19SQ1ZCVUYJOAorI2RlZmluZSBTT19LRUVQQUxJVkUJOQorI2RlZmluZSBTT19PT0JJTkxJTkUJMTAKKyNkZWZpbmUgU09fTk9fQ0hFQ0sJMTEKKyNkZWZpbmUgU09fUFJJT1JJVFkJMTIKKyNkZWZpbmUgU09fTElOR0VSCTEzCisjZGVmaW5lIFNPX0JTRENPTVBBVAkxNAorLyogVG8gYWRkIDojZGVmaW5lIFNPX1JFVVNFUE9SVCAxNSAqLworI2RlZmluZSBTT19QQVNTQ1JFRAkxNgorI2RlZmluZSBTT19QRUVSQ1JFRAkxNworI2RlZmluZSBTT19SQ1ZMT1dBVAkxOAorI2RlZmluZSBTT19TTkRMT1dBVAkxOQorI2RlZmluZSBTT19SQ1ZUSU1FTwkyMAorI2RlZmluZSBTT19TTkRUSU1FTwkyMQorCisvKiBTZWN1cml0eSBsZXZlbHMgLSBhcyBwZXIgTlJMIElQdjYgLSBkb24ndCBhY3R1YWxseSBkbyBhbnl0aGluZyAqLworI2RlZmluZSBTT19TRUNVUklUWV9BVVRIRU5USUNBVElPTgkJMjIKKyNkZWZpbmUgU09fU0VDVVJJVFlfRU5DUllQVElPTl9UUkFOU1BPUlQJMjMKKyNkZWZpbmUgU09fU0VDVVJJVFlfRU5DUllQVElPTl9ORVRXT1JLCQkyNAorCisjZGVmaW5lIFNPX0JJTkRUT0RFVklDRQkyNQorCisvKiBTb2NrZXQgZmlsdGVyaW5nICovCisjZGVmaW5lIFNPX0FUVEFDSF9GSUxURVIgICAgICAgIDI2CisjZGVmaW5lIFNPX0RFVEFDSF9GSUxURVIgICAgICAgIDI3CisKKyNkZWZpbmUgU09fUEVFUk5BTUUgICAgICAgICAgICAgMjgKKyNkZWZpbmUgU09fVElNRVNUQU1QCQkyOQorI2RlZmluZSBTQ01fVElNRVNUQU1QCQlTT19USU1FU1RBTVAKKworI2RlZmluZSBTT19BQ0NFUFRDT05OCQkzMAorCisjZGVmaW5lIFNPX1BFRVJTRUMgICAgICAgICAgICAgMzEKKworI2VuZGlmIC8qIF9BU01fU09DS0VUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvc29ja2lvcy5oIGIvaW5jbHVkZS9hc20tbTY4ay9zb2NraW9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI5ZWQ5NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvc29ja2lvcy5oCkBAIC0wLDAgKzEsMTIgQEAKKyNpZm5kZWYgX19BUkNIX002OEtfU09DS0lPU19fCisjZGVmaW5lIF9fQVJDSF9NNjhLX1NPQ0tJT1NfXworCisvKiBTb2NrZXQtbGV2ZWwgSS9PIGNvbnRyb2wgY2FsbHMuICovCisjZGVmaW5lIEZJT1NFVE9XTgkweDg5MDEKKyNkZWZpbmUgU0lPQ1NQR1JQCTB4ODkwMgorI2RlZmluZSBGSU9HRVRPV04JMHg4OTAzCisjZGVmaW5lIFNJT0NHUEdSUAkweDg5MDQKKyNkZWZpbmUgU0lPQ0FUTUFSSwkweDg5MDUKKyNkZWZpbmUgU0lPQ0dTVEFNUAkweDg5MDYJCS8qIEdldCBzdGFtcCAqLworCisjZW5kaWYgLyogX19BUkNIX002OEtfU09DS0lPU19fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL3NwaW5sb2NrLmggYi9pbmNsdWRlL2FzbS1tNjhrL3NwaW5sb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBmNDZlMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvc3BpbmxvY2suaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19NNjhLX1NQSU5MT0NLX0gKKyNkZWZpbmUgX19NNjhLX1NQSU5MT0NLX0gKKworI2Vycm9yICJtNjhrIGRvZXNuJ3QgZG8gU01QIHlldCIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL3N0YXQuaCBiL2luY2x1ZGUvYXNtLW02OGsvc3RhdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0YzQwMmEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL3N0YXQuaApAQCAtMCwwICsxLDc4IEBACisjaWZuZGVmIF9NNjhLX1NUQVRfSAorI2RlZmluZSBfTTY4S19TVEFUX0gKKworc3RydWN0IF9fb2xkX2tlcm5lbF9zdGF0IHsKKwl1bnNpZ25lZCBzaG9ydCBzdF9kZXY7CisJdW5zaWduZWQgc2hvcnQgc3RfaW5vOworCXVuc2lnbmVkIHNob3J0IHN0X21vZGU7CisJdW5zaWduZWQgc2hvcnQgc3Rfbmxpbms7CisJdW5zaWduZWQgc2hvcnQgc3RfdWlkOworCXVuc2lnbmVkIHNob3J0IHN0X2dpZDsKKwl1bnNpZ25lZCBzaG9ydCBzdF9yZGV2OworCXVuc2lnbmVkIGxvbmcgIHN0X3NpemU7CisJdW5zaWduZWQgbG9uZyAgc3RfYXRpbWU7CisJdW5zaWduZWQgbG9uZyAgc3RfbXRpbWU7CisJdW5zaWduZWQgbG9uZyAgc3RfY3RpbWU7Cit9OworCitzdHJ1Y3Qgc3RhdCB7CisJdW5zaWduZWQgc2hvcnQgc3RfZGV2OworCXVuc2lnbmVkIHNob3J0IF9fcGFkMTsKKwl1bnNpZ25lZCBsb25nICBzdF9pbm87CisJdW5zaWduZWQgc2hvcnQgc3RfbW9kZTsKKwl1bnNpZ25lZCBzaG9ydCBzdF9ubGluazsKKwl1bnNpZ25lZCBzaG9ydCBzdF91aWQ7CisJdW5zaWduZWQgc2hvcnQgc3RfZ2lkOworCXVuc2lnbmVkIHNob3J0IHN0X3JkZXY7CisJdW5zaWduZWQgc2hvcnQgX19wYWQyOworCXVuc2lnbmVkIGxvbmcgIHN0X3NpemU7CisJdW5zaWduZWQgbG9uZyAgc3RfYmxrc2l6ZTsKKwl1bnNpZ25lZCBsb25nICBzdF9ibG9ja3M7CisJdW5zaWduZWQgbG9uZyAgc3RfYXRpbWU7CisJdW5zaWduZWQgbG9uZyAgX191bnVzZWQxOworCXVuc2lnbmVkIGxvbmcgIHN0X210aW1lOworCXVuc2lnbmVkIGxvbmcgIF9fdW51c2VkMjsKKwl1bnNpZ25lZCBsb25nICBzdF9jdGltZTsKKwl1bnNpZ25lZCBsb25nICBfX3VudXNlZDM7CisJdW5zaWduZWQgbG9uZyAgX191bnVzZWQ0OworCXVuc2lnbmVkIGxvbmcgIF9fdW51c2VkNTsKK307CisKKy8qIFRoaXMgbWF0Y2hlcyBzdHJ1Y3Qgc3RhdDY0IGluIGdsaWJjMi4xLCBoZW5jZSB0aGUgYWJzb2x1dGVseQorICogaW5zYW5lIGFtb3VudHMgb2YgcGFkZGluZyBhcm91bmQgZGV2X3Qncy4KKyAqLworc3RydWN0IHN0YXQ2NCB7CisJdW5zaWduZWQgbG9uZyBsb25nCXN0X2RldjsKKwl1bnNpZ25lZCBjaGFyCV9fcGFkMVsyXTsKKworI2RlZmluZSBTVEFUNjRfSEFTX0JST0tFTl9TVF9JTk8JMQorCXVuc2lnbmVkIGxvbmcJX19zdF9pbm87CisKKwl1bnNpZ25lZCBpbnQJc3RfbW9kZTsKKwl1bnNpZ25lZCBpbnQJc3Rfbmxpbms7CisKKwl1bnNpZ25lZCBsb25nCXN0X3VpZDsKKwl1bnNpZ25lZCBsb25nCXN0X2dpZDsKKworCXVuc2lnbmVkIGxvbmcgbG9uZwlzdF9yZGV2OworCXVuc2lnbmVkIGNoYXIJX19wYWQzWzJdOworCisJbG9uZyBsb25nCXN0X3NpemU7CisJdW5zaWduZWQgbG9uZwlzdF9ibGtzaXplOworCisJdW5zaWduZWQgbG9uZwlfX3BhZDQ7CQkvKiBmdXR1cmUgcG9zc2libGUgc3RfYmxvY2tzIGhpZ2ggYml0cyAqLworCXVuc2lnbmVkIGxvbmcJc3RfYmxvY2tzOwkvKiBOdW1iZXIgNTEyLWJ5dGUgYmxvY2tzIGFsbG9jYXRlZC4gKi8KKworCXVuc2lnbmVkIGxvbmcJc3RfYXRpbWU7CisJdW5zaWduZWQgbG9uZwlzdF9hdGltZV9uc2VjOworCisJdW5zaWduZWQgbG9uZwlzdF9tdGltZTsKKwl1bnNpZ25lZCBsb25nCXN0X210aW1lX25zZWM7CisKKwl1bnNpZ25lZCBsb25nCXN0X2N0aW1lOworCXVuc2lnbmVkIGxvbmcJc3RfY3RpbWVfbnNlYzsKKworCXVuc2lnbmVkIGxvbmcgbG9uZwlzdF9pbm87Cit9OworCisjZW5kaWYgLyogX002OEtfU1RBVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL3N0YXRmcy5oIGIvaW5jbHVkZS9hc20tbTY4ay9zdGF0ZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGQ5M2YxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9zdGF0ZnMuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX002OEtfU1RBVEZTX0gKKyNkZWZpbmUgX002OEtfU1RBVEZTX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3N0YXRmcy5oPgorCisjZW5kaWYgLyogX002OEtfU1RBVEZTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvc3RyaW5nLmggYi9pbmNsdWRlL2FzbS1tNjhrL3N0cmluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0ZGVmMDcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL3N0cmluZy5oCkBAIC0wLDAgKzEsNTQyIEBACisjaWZuZGVmIF9NNjhLX1NUUklOR19IXworI2RlZmluZSBfTTY4S19TVFJJTkdfSF8KKworI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSQ1BZCitzdGF0aWMgaW5saW5lIGNoYXIgKiBzdHJjcHkoY2hhciAqIGRlc3QsY29uc3QgY2hhciAqc3JjKQoreworICBjaGFyICp4ZGVzdCA9IGRlc3Q7CisKKyAgX19hc21fXyBfX3ZvbGF0aWxlX18KKyAgICAgICAoIjE6XHRtb3ZlYiAlMUArLCUwQCtcblx0IgorICAgICAgICAiam5lIDFiIgorCTogIj1hIiAoZGVzdCksICI9YSIgKHNyYykKKyAgICAgICAgOiAiMCIgKGRlc3QpLCAiMSIgKHNyYykgOiAibWVtb3J5Iik7CisgIHJldHVybiB4ZGVzdDsKK30KKworI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJOQ1BZCitzdGF0aWMgaW5saW5lIGNoYXIgKiBzdHJuY3B5KGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IG4pCit7CisgIGNoYXIgKnhkZXN0ID0gZGVzdDsKKworICBpZiAobiA9PSAwKQorICAgIHJldHVybiB4ZGVzdDsKKworICBfX2FzbV9fIF9fdm9sYXRpbGVfXworICAgICAgICgiMTpcdG1vdmViICUxQCssJTBAK1xuXHQiCisJImplcSAyZlxuXHQiCisgICAgICAgICJzdWJxbCAjMSwlMlxuXHQiCisgICAgICAgICJqbmUgMWJcblx0IgorICAgICAgICAiMjoiCisgICAgICAgIDogIj1hIiAoZGVzdCksICI9YSIgKHNyYyksICI9ZCIgKG4pCisgICAgICAgIDogIjAiIChkZXN0KSwgIjEiIChzcmMpLCAiMiIgKG4pCisgICAgICAgIDogIm1lbW9yeSIpOworICByZXR1cm4geGRlc3Q7Cit9CisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSQ0FUCitzdGF0aWMgaW5saW5lIGNoYXIgKiBzdHJjYXQoY2hhciAqIGRlc3QsIGNvbnN0IGNoYXIgKiBzcmMpCit7CisJY2hhciAqdG1wID0gZGVzdDsKKworCXdoaWxlICgqZGVzdCkKKwkJZGVzdCsrOworCXdoaWxlICgoKmRlc3QrKyA9ICpzcmMrKykpCisJCTsKKworCXJldHVybiB0bXA7Cit9CisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSTkNBVAorc3RhdGljIGlubGluZSBjaGFyICogc3RybmNhdChjaGFyICpkZXN0LCBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBjb3VudCkKK3sKKwljaGFyICp0bXAgPSBkZXN0OworCisJaWYgKGNvdW50KSB7CisJCXdoaWxlICgqZGVzdCkKKwkJCWRlc3QrKzsKKwkJd2hpbGUgKCgqZGVzdCsrID0gKnNyYysrKSkgeworCQkJaWYgKC0tY291bnQgPT0gMCkgeworCQkJCSpkZXN0Kys9J1wwJzsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiB0bXA7Cit9CisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSQ0hSCitzdGF0aWMgaW5saW5lIGNoYXIgKiBzdHJjaHIoY29uc3QgY2hhciAqIHMsIGludCBjKQoreworICBjb25zdCBjaGFyIGNoID0gYzsKKworICBmb3IoOyAqcyAhPSBjaDsgKytzKQorICAgIGlmICgqcyA9PSAnXDAnKQorICAgICAgcmV0dXJuKCBOVUxMICk7CisgIHJldHVybiggKGNoYXIgKikgcyk7Cit9CisKKyNpZiAwCisjZGVmaW5lIF9fSEFWRV9BUkNIX1NUUlBCUksKK3N0YXRpYyBpbmxpbmUgY2hhciAqc3RycGJyayhjb25zdCBjaGFyICpjcyxjb25zdCBjaGFyICpjdCkKK3sKKyAgY29uc3QgY2hhciAqc2MxLCpzYzI7CisKKyAgZm9yKCBzYzEgPSBjczsgKnNjMSAhPSAnXDAnOyArK3NjMSkKKyAgICBmb3IoIHNjMiA9IGN0OyAqc2MyICE9ICdcMCc7ICsrc2MyKQorICAgICAgaWYgKCpzYzEgPT0gKnNjMikKKwlyZXR1cm4oKGNoYXIgKikgc2MxKTsKKyAgcmV0dXJuKCBOVUxMICk7Cit9CisjZW5kaWYKKworI2lmIDAKKyNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSU1BOCitzdGF0aWMgaW5saW5lIHNpemVfdCBzdHJzcG4oY29uc3QgY2hhciAqcywgY29uc3QgY2hhciAqYWNjZXB0KQoreworICBjb25zdCBjaGFyICpwOworICBjb25zdCBjaGFyICphOworICBzaXplX3QgY291bnQgPSAwOworCisgIGZvciAocCA9IHM7ICpwICE9ICdcMCc7ICsrcCkKKyAgICB7CisgICAgICBmb3IgKGEgPSBhY2NlcHQ7ICphICE9ICdcMCc7ICsrYSkKKyAgICAgICAgaWYgKCpwID09ICphKQorICAgICAgICAgIGJyZWFrOworICAgICAgaWYgKCphID09ICdcMCcpCisgICAgICAgIHJldHVybiBjb3VudDsKKyAgICAgIGVsc2UKKyAgICAgICAgKytjb3VudDsKKyAgICB9CisKKyAgcmV0dXJuIGNvdW50OworfQorI2VuZGlmCisKKy8qIHN0cnN0ciAhISAqLworCisjZGVmaW5lIF9fSEFWRV9BUkNIX1NUUkxFTgorc3RhdGljIGlubGluZSBzaXplX3Qgc3RybGVuKGNvbnN0IGNoYXIgKiBzKQoreworICBjb25zdCBjaGFyICpzYzsKKyAgZm9yIChzYyA9IHM7ICpzYyAhPSAnXDAnOyArK3NjKSA7CisgIHJldHVybihzYyAtIHMpOworfQorCisvKiBzdHJubGVuICEhICovCisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSQ01QCitzdGF0aWMgaW5saW5lIGludCBzdHJjbXAoY29uc3QgY2hhciAqIGNzLGNvbnN0IGNoYXIgKiBjdCkKK3sKKyAgY2hhciBfX3JlczsKKworICBfX2FzbV9fCisgICAgICAgKCIxOlx0bW92ZWIgJTBAKywlMlxuXHQiIC8qIGdldCAqY3MgKi8KKyAgICAgICAgImNtcGIgJTFAKywlMlxuXHQiICAgICAgLyogY29tcGFyZSBhIGJ5dGUgKi8KKyAgICAgICAgImpuZSAgMmZcblx0IiAgICAgICAgICAgLyogbm90IGVxdWFsLCBicmVhayBvdXQgKi8KKyAgICAgICAgInRzdGIgJTJcblx0IiAgICAgICAgICAgLyogYXQgZW5kIG9mIGNzPyAqLworICAgICAgICAiam5lICAxYlxuXHQiICAgICAgICAgICAvKiBubywga2VlcCBnb2luZyAqLworICAgICAgICAianJhICAzZlxuXHQiCQkvKiBzdHJpbmdzIGFyZSBlcXVhbCAqLworICAgICAgICAiMjpcdHN1YmIgJTFALSwlMlxuXHQiICAvKiAqY3MgLSAqY3QgKi8KKyAgICAgICAgIjM6IgorICAgICAgICA6ICI9YSIgKGNzKSwgIj1hIiAoY3QpLCAiPWQiIChfX3JlcykKKyAgICAgICAgOiAiMCIgKGNzKSwgIjEiIChjdCkpOworICByZXR1cm4gX19yZXM7Cit9CisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSTkNNUAorc3RhdGljIGlubGluZSBpbnQgc3RybmNtcChjb25zdCBjaGFyICogY3MsY29uc3QgY2hhciAqIGN0LHNpemVfdCBjb3VudCkKK3sKKyAgY2hhciBfX3JlczsKKworICBpZiAoIWNvdW50KQorICAgIHJldHVybiAwOworICBfX2FzbV9fCisgICAgICAgKCIxOlx0bW92YiAlMEArLCUzXG5cdCIgICAgICAgICAgLyogZ2V0ICpjcyAqLworICAgICAgICAiY21wYiAgICUxQCssJTNcblx0IiAgICAgICAgICAgIC8qIGNvbXBhcmUgYSBieXRlICovCisgICAgICAgICJqbmUgICAgM2Zcblx0IiAgICAgICAgICAgICAgICAgLyogbm90IGVxdWFsLCBicmVhayBvdXQgKi8KKyAgICAgICAgInRzdGIgICAlM1xuXHQiICAgICAgICAgICAgICAgICAvKiBhdCBlbmQgb2YgY3M/ICovCisgICAgICAgICJqZXEgICAgNGZcblx0IiAgICAgICAgICAgICAgICAgLyogeWVzLCBhbGwgZG9uZSAqLworICAgICAgICAic3VicWwgICMxLCUyXG5cdCIgICAgICAgICAgICAgIC8qIG5vLCBhZGp1c3QgY291bnQgKi8KKyAgICAgICAgImpuZSAgICAxYlxuXHQiICAgICAgICAgICAgICAgICAvKiBtb3JlIHRvIGRvLCBrZWVwIGdvaW5nICovCisgICAgICAgICIyOlx0bW92ZXEgIzAsJTNcblx0IiAgICAgICAgICAgLyogc3RyaW5ncyBhcmUgZXF1YWwgKi8KKyAgICAgICAgImpyYSAgICA0ZlxuXHQiCisgICAgICAgICIzOlx0c3ViYiAlMUAtLCUzXG5cdCIgICAgICAgICAgLyogKmNzIC0gKmN0ICovCisgICAgICAgICI0OiIKKyAgICAgICAgOiAiPWEiIChjcyksICI9YSIgKGN0KSwgIj1kIiAoY291bnQpLCAiPWQiIChfX3JlcykKKyAgICAgICAgOiAiMCIgKGNzKSwgIjEiIChjdCksICIyIiAoY291bnQpKTsKKyAgcmV0dXJuIF9fcmVzOworfQorCisjZGVmaW5lIF9fSEFWRV9BUkNIX01FTVNFVAorLyoKKyAqIFRoaXMgaXMgcmVhbGx5IHVnbHksIGJ1dCBpdHMgaGlnaGx5IG9wdGltaXphdGlhYmxlIGJ5IHRoZQorICogY29tcGlsZXIgYW5kIGlzIG1lYW50IGFzIGNvbXBlbnNhdGlvbiBmb3IgZ2NjJ3MgbWlzc2luZworICogX19idWlsdGluX21lbXNldCgpLiBGb3IgdGhlIDY4MFsyM10wCWl0IG1pZ2h0IGJlIHdvcnRoIGNvbnNpZGVyaW5nCisgKiB0aGUgb3B0aW1hbCBudW1iZXIgb2YgbWlzYWxpZ25lZCB3cml0ZXMgY29tcGFyZWQgdG8gdGhlIG51bWJlciBvZgorICogdGVzdHMnbidicmFuY2hlcyBuZWVkZWQgdG8gYWxpZ24gdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MuIFRoZQorICogNjgwWzQ2XTAgZG9lc24ndCByZWFsbHkgY2FyZSBkdWUgdG8gdGhlaXIgY29weS1iYWNrIGNhY2hlcy4KKyAqCQkJCQkJMTAvMDkvOTYgLSBKZXMgU29yZW5zZW4KKyAqLworc3RhdGljIGlubGluZSB2b2lkICogX19tZW1zZXRfZyh2b2lkICogcywgaW50IGMsIHNpemVfdCBjb3VudCkKK3sKKyAgdm9pZCAqeHMgPSBzOworICBzaXplX3QgdGVtcDsKKworICBpZiAoIWNvdW50KQorICAgIHJldHVybiB4czsKKworICBjICY9IDB4ZmY7CisgIGMgfD0gYyA8PCA4OworICBjIHw9IGMgPDwgMTY7CisKKyAgaWYgKGNvdW50IDwgMzYpeworCSAgbG9uZyAqbHMgPSBzOworCisJICBzd2l0Y2goY291bnQpeworCSAgY2FzZSAzMjogY2FzZSAzMzogY2FzZSAzNDogY2FzZSAzNToKKwkJICAqbHMrKyA9IGM7CisJICBjYXNlIDI4OiBjYXNlIDI5OiBjYXNlIDMwOiBjYXNlIDMxOgorCQkgICpscysrID0gYzsKKwkgIGNhc2UgMjQ6IGNhc2UgMjU6IGNhc2UgMjY6IGNhc2UgMjc6CisJCSAgKmxzKysgPSBjOworCSAgY2FzZSAyMDogY2FzZSAyMTogY2FzZSAyMjogY2FzZSAyMzoKKwkJICAqbHMrKyA9IGM7CisJICBjYXNlIDE2OiBjYXNlIDE3OiBjYXNlIDE4OiBjYXNlIDE5OgorCQkgICpscysrID0gYzsKKwkgIGNhc2UgMTI6IGNhc2UgMTM6IGNhc2UgMTQ6IGNhc2UgMTU6CisJCSAgKmxzKysgPSBjOworCSAgY2FzZSA4OiBjYXNlIDk6IGNhc2UgMTA6IGNhc2UgMTE6CisJCSAgKmxzKysgPSBjOworCSAgY2FzZSA0OiBjYXNlIDU6IGNhc2UgNjogY2FzZSA3OgorCQkgICpscysrID0gYzsKKwkJICBicmVhazsKKwkgIGRlZmF1bHQ6CisJCSAgYnJlYWs7CisJICB9CisJICBzID0gbHM7CisJICBpZiAoY291bnQgJiAweDAyKXsKKwkJICBzaG9ydCAqc3MgPSBzOworCQkgICpzcysrID0gYzsKKwkJICBzID0gc3M7CisJICB9CisJICBpZiAoY291bnQgJiAweDAxKXsKKwkJICBjaGFyICpjcyA9IHM7CisJCSAgKmNzKysgPSBjOworCQkgIHMgPSBjczsKKwkgIH0KKwkgIHJldHVybiB4czsKKyAgfQorCisgIGlmICgobG9uZykgcyAmIDEpCisgICAgeworICAgICAgY2hhciAqY3MgPSBzOworICAgICAgKmNzKysgPSBjOworICAgICAgcyA9IGNzOworICAgICAgY291bnQtLTsKKyAgICB9CisgIGlmIChjb3VudCA+IDIgJiYgKGxvbmcpIHMgJiAyKQorICAgIHsKKyAgICAgIHNob3J0ICpzcyA9IHM7CisgICAgICAqc3MrKyA9IGM7CisgICAgICBzID0gc3M7CisgICAgICBjb3VudCAtPSAyOworICAgIH0KKyAgdGVtcCA9IGNvdW50ID4+IDI7CisgIGlmICh0ZW1wKQorICAgIHsKKyAgICAgIGxvbmcgKmxzID0gczsKKyAgICAgIHRlbXAtLTsKKyAgICAgIGRvCisJKmxzKysgPSBjOworICAgICAgd2hpbGUgKHRlbXAtLSk7CisgICAgICBzID0gbHM7CisgICAgfQorICBpZiAoY291bnQgJiAyKQorICAgIHsKKyAgICAgIHNob3J0ICpzcyA9IHM7CisgICAgICAqc3MrKyA9IGM7CisgICAgICBzID0gc3M7CisgICAgfQorICBpZiAoY291bnQgJiAxKQorICAgIHsKKyAgICAgIGNoYXIgKmNzID0gczsKKyAgICAgICpjcyA9IGM7CisgICAgfQorICByZXR1cm4geHM7Cit9CisKKy8qCisgKiBfX21lbXNldF9wYWdlIGFzc3VtZXMgdGhhdCBkYXRhIGlzIGxvbmd3b3JkIGFsaWduZWQuIE1vc3QsIGlmIG5vdAorICogYWxsLCBvZiB0aGVzZSBwYWdlIHNpemVkIG1lbXNldHMgYXJlIHBlcmZvcm1lZCBvbiBwYWdlIGFsaWduZWQKKyAqIGFyZWFzLCB0aHVzIHdlIGRvIG5vdCBuZWVkIHRvIGNoZWNrIGlmIHRoZSBkZXN0aW5hdGlvbiBpcyBsb25nd29yZAorICogYWxpZ25lZC4gT2YgY291cnNlIHdlIHN1ZmZlciBhIHNlcmlvdXMgcGVyZm9ybWFuY2UgbG9zcyBpZiB0aGlzIGlzCisgKiBub3QgdGhlIGNhc2UgYnV0IEkgdGhpbmsgdGhlIHJpc2sgb2YgdGhpcyBldmVyIGhhcHBlbmluZyBpcworICogZXh0cmVtZWx5IHNtYWxsLiBXZSBzcGVuZCBhIGxvdCBvZiB0aW1lIGNsZWFyaW5nIHBhZ2VzIGluCisgKiBnZXRfZW1wdHlfcGFnZSgpIHNvIEkgdGhpbmsgaXQgaXMgd29ydGggaXQgYW55d2F5LiBCZXNpZGVzLCB0aGUKKyAqIDY4MFs0Nl0wIGRvIG5vdCByZWFsbHkgY2FyZSBhYm91dCBtaXNhbGlnbmVkIHdyaXRlcyBkdWUgdG8gdGhlaXIKKyAqIGNvcHktYmFjayBjYWNoZS4KKyAqCisgKiBUaGUgb3B0aW1pemVkIGNhc2UgZm9yIHRoZSA2ODBbNDZdMCBpcyBpbXBsZW1lbnRlZCB1c2luZyB0aGUgbW92ZTE2CisgKiBpbnN0cnVjdGlvbi4gTXkgdGVzdHMgc2hvd2VkIHRoYXQgdGhpcyBpbXBsZW1lbnRhdGlvbiBpcyAzNS00NSUKKyAqIGZhc3RlciB0aGFuIHRoZSBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbiB1c2luZyBtb3ZlbCwgdGhlIG9ubHkKKyAqIGNhdmVhdCBpcyB0aGF0IHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzIG11c3QgYmUgMTYtYnl0ZSBhbGlnbmVkLgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAxLzA5Lzk2IC0gSmVzIFNvcmVuc2VuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCAqIF9fbWVtc2V0X3BhZ2Uodm9pZCAqIHMsaW50IGMsc2l6ZV90IGNvdW50KQoreworICB1bnNpZ25lZCBsb25nIGRhdGEsIHRtcDsKKyAgdm9pZCAqeHMgPSBzOworCisgIGMgPSBjICYgMjU1OworICBkYXRhID0gYyB8IChjIDw8IDgpOworICBkYXRhIHw9IGRhdGEgPDwgMTY7CisKKyNpZmRlZiBDUFVfTTY4MDQwX09SX002ODA2MF9PTkxZCisKKyAgaWYgKCgodW5zaWduZWQgbG9uZykgcykgJiAweDBmKQorCSAgX19tZW1zZXRfZyhzLCBjLCBjb3VudCk7CisgIGVsc2V7CisJICB1bnNpZ25lZCBsb25nICpzcCA9IHM7CisJICAqc3ArKyA9IGRhdGE7CisJICAqc3ArKyA9IGRhdGE7CisJICAqc3ArKyA9IGRhdGE7CisJICAqc3ArKyA9IGRhdGE7CisKKwkgIF9fYXNtX18gX192b2xhdGlsZV9fKCIxOlx0IgorCQkJICAgICAgICIuY2hpcCA2ODA0MFxuXHQiCisJCQkgICAgICAgIm1vdmUxNiAlMkArLCUwQCtcblx0IgorCQkJICAgICAgICIuY2hpcCA2OGtcblx0IgorCQkJICAgICAgICJzdWJxdyAgIzgsJTJcblx0IgorCQkJICAgICAgICJzdWJxdyAgIzgsJTJcblx0IgorCQkJICAgICAgICJkYnJhICAgJTEsMWJcblx0IgorCQkJICAgICAgIDogIj1hIiAoc3ApLCAiPWQiICh0bXApCisJCQkgICAgICAgOiAiYSIgKHMpLCAiMCIgKHNwKSwgIjEiICgoY291bnQgLSAxNikgLyAxNiAtIDEpCisJCQkgICAgICAgKTsKKyAgfQorCisjZWxzZQorICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiMTpcdCIKKwkJICAgICAgICJtb3ZlbCAlMiwlMEArXG5cdCIKKwkJICAgICAgICJtb3ZlbCAlMiwlMEArXG5cdCIKKwkJICAgICAgICJtb3ZlbCAlMiwlMEArXG5cdCIKKwkJICAgICAgICJtb3ZlbCAlMiwlMEArXG5cdCIKKwkJICAgICAgICJtb3ZlbCAlMiwlMEArXG5cdCIKKwkJICAgICAgICJtb3ZlbCAlMiwlMEArXG5cdCIKKwkJICAgICAgICJtb3ZlbCAlMiwlMEArXG5cdCIKKwkJICAgICAgICJtb3ZlbCAlMiwlMEArXG5cdCIKKwkJICAgICAgICJkYnJhICAlMSwxYlxuXHQiCisJCSAgICAgICA6ICI9YSIgKHMpLCAiPWQiICh0bXApCisJCSAgICAgICA6ICJkIiAoZGF0YSksICIwIiAocyksICIxIiAoY291bnQgLyAzMiAtIDEpCisJCSAgICAgICApOworI2VuZGlmCisKKyAgcmV0dXJuIHhzOworfQorCitleHRlcm4gdm9pZCAqbWVtc2V0KHZvaWQgKixpbnQsX19rZXJuZWxfc2l6ZV90KTsKKworI2RlZmluZSBfX21lbXNldF9jb25zdChzLGMsY291bnQpIFwKKygoY291bnQ9PVBBR0VfU0laRSkgPyBcCisgIF9fbWVtc2V0X3BhZ2UoKHMpLChjKSwoY291bnQpKSA6IFwKKyAgX19tZW1zZXRfZygocyksKGMpLChjb3VudCkpKQorCisjZGVmaW5lIG1lbXNldChzLCBjLCBjb3VudCkgXAorKF9fYnVpbHRpbl9jb25zdGFudF9wKGNvdW50KSA/IFwKKyBfX21lbXNldF9jb25zdCgocyksKGMpLChjb3VudCkpIDogXAorIF9fbWVtc2V0X2coKHMpLChjKSwoY291bnQpKSkKKworI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1DUFkKK2V4dGVybiB2b2lkICogbWVtY3B5KHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QgKTsKKy8qCisgKiBfX2J1aWx0aW5fbWVtY3B5KCkgZG9lcyBub3QgaGFuZGxlIHBhZ2Utc2l6ZWQgbWVtY3B5cyB2ZXJ5IHdlbGwsCisgKiB0aHVzIGZvbGxvd2luZyB0aGUgc2FtZSBhc3N1bXB0aW9ucyBhcyBmb3IgcGFnZS1zaXplZCBtZW1zZXRzLCB0aGlzCisgKiBmdW5jdGlvbiBjb3BpZXMgcGFnZS1zaXplZCBhcmVhcyB1c2luZyBhbiB1bnJvbGxlZCBsb29wLCB3aXRob3V0CisgKiBjb25zaWRlcmluZyBhbGlnbm1lbnQuCisgKgorICogRm9yIHRoZSA2ODBbNDZdMCBvbmx5IGtlcm5lbHMgd2UgdXNlIHRoZSBtb3ZlMTYgaW5zdHJ1Y3Rpb24gaW5zdGVhZAorICogYXMgaXQgd3JpdGVzIHRocm91Z2ggdGhlIGRhdGEtY2FjaGUsIGludmFsaWRhdGluZyB0aGUgY2FjaGUtbGluZXMKKyAqIHRvdWNoZWQuIEluIHRoaXMgd2F5IHdlIGRvIG5vdCB1c2UgdXAgdGhlIGVudGlyZSBkYXRhLWNhY2hlICh3ZWxsLAorICogaGFsZiBvZiBpdCBvbiB0aGUgNjgwNjApIGJ5IGNvcHlpbmcgYSBwYWdlLiBBbiB1bnJvbGxlZCBsb29wIG9mIHR3bworICogbW92ZTE2IGluc3RydWN0aW9ucyBzZWVtIHRvIHRoZSBmYXN0ZXN0LiBUaGUgb25seSBjYXZlYXQgaXMgdGhhdAorICogYm90aCBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIG11c3QgYmUgMTYtYnl0ZSBhbGlnbmVkLCBpZiBub3Qgd2UgZmFsbAorICogYmFjayB0byB0aGUgZ2VuZXJpYyBtZW1jcHkgZnVuY3Rpb24uICAtIEplcworICovCitzdGF0aWMgaW5saW5lIHZvaWQgKiBfX21lbWNweV9wYWdlKHZvaWQgKiB0bywgY29uc3Qgdm9pZCAqIGZyb20sIHNpemVfdCBjb3VudCkKK3sKKyAgdW5zaWduZWQgbG9uZyB0bXA7CisgIHZvaWQgKnh0byA9IHRvOworCisjaWZkZWYgQ1BVX002ODA0MF9PUl9NNjgwNjBfT05MWQorCisgIGlmICgoKHVuc2lnbmVkIGxvbmcpIHRvIHwgKHVuc2lnbmVkIGxvbmcpIGZyb20pICYgMHgwZikKKwkgIHJldHVybiBtZW1jcHkodG8sIGZyb20sIGNvdW50KTsKKworICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiMTpcdCIKKwkJICAgICAgICIuY2hpcCA2ODA0MFxuXHQiCisJCSAgICAgICAibW92ZTE2ICUxQCssJTBAK1xuXHQiCisJCSAgICAgICAibW92ZTE2ICUxQCssJTBAK1xuXHQiCisJCSAgICAgICAiLmNoaXAgNjhrXG5cdCIKKwkJICAgICAgICJkYnJhICAlMiwxYlxuXHQiCisJCSAgICAgICA6ICI9YSIgKHRvKSwgIj1hIiAoZnJvbSksICI9ZCIgKHRtcCkKKwkJICAgICAgIDogIjAiICh0byksICIxIiAoZnJvbSkgLCAiMiIgKGNvdW50IC8gMzIgLSAxKQorCQkgICAgICAgKTsKKyNlbHNlCisgIF9fYXNtX18gX192b2xhdGlsZV9fKCIxOlx0IgorCQkgICAgICAgIm1vdmVsICUxQCssJTBAK1xuXHQiCisJCSAgICAgICAibW92ZWwgJTFAKywlMEArXG5cdCIKKwkJICAgICAgICJtb3ZlbCAlMUArLCUwQCtcblx0IgorCQkgICAgICAgIm1vdmVsICUxQCssJTBAK1xuXHQiCisJCSAgICAgICAibW92ZWwgJTFAKywlMEArXG5cdCIKKwkJICAgICAgICJtb3ZlbCAlMUArLCUwQCtcblx0IgorCQkgICAgICAgIm1vdmVsICUxQCssJTBAK1xuXHQiCisJCSAgICAgICAibW92ZWwgJTFAKywlMEArXG5cdCIKKwkJICAgICAgICJkYnJhICAlMiwxYlxuXHQiCisJCSAgICAgICA6ICI9YSIgKHRvKSwgIj1hIiAoZnJvbSksICI9ZCIgKHRtcCkKKwkJICAgICAgIDogIjAiICh0byksICIxIiAoZnJvbSkgLCAiMiIgKGNvdW50IC8gMzIgLSAxKQorCQkgICAgICAgKTsKKyNlbmRpZgorICByZXR1cm4geHRvOworfQorCisjZGVmaW5lIF9fbWVtY3B5X2NvbnN0KHRvLCBmcm9tLCBuKSBcCisoKG49PVBBR0VfU0laRSkgPyBcCisgIF9fbWVtY3B5X3BhZ2UoKHRvKSwoZnJvbSksKG4pKSA6IFwKKyAgX19idWlsdGluX21lbWNweSgodG8pLChmcm9tKSwobikpKQorCisjZGVmaW5lIG1lbWNweSh0bywgZnJvbSwgbikgXAorKF9fYnVpbHRpbl9jb25zdGFudF9wKG4pID8gXAorIF9fbWVtY3B5X2NvbnN0KCh0byksKGZyb20pLChuKSkgOiBcCisgbWVtY3B5KCh0byksKGZyb20pLChuKSkpCisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNTU9WRQorc3RhdGljIGlubGluZSB2b2lkICogbWVtbW92ZSh2b2lkICogZGVzdCxjb25zdCB2b2lkICogc3JjLCBzaXplX3QgbikKK3sKKyAgdm9pZCAqeGRlc3QgPSBkZXN0OworICBzaXplX3QgdGVtcDsKKworICBpZiAoIW4pCisgICAgcmV0dXJuIHhkZXN0OworCisgIGlmIChkZXN0IDwgc3JjKQorICAgIHsKKyAgICAgIGlmICgobG9uZykgZGVzdCAmIDEpCisJeworCSAgY2hhciAqY2Rlc3QgPSBkZXN0OworCSAgY29uc3QgY2hhciAqY3NyYyA9IHNyYzsKKwkgICpjZGVzdCsrID0gKmNzcmMrKzsKKwkgIGRlc3QgPSBjZGVzdDsKKwkgIHNyYyA9IGNzcmM7CisJICBuLS07CisJfQorICAgICAgaWYgKG4gPiAyICYmIChsb25nKSBkZXN0ICYgMikKKwl7CisJICBzaG9ydCAqc2Rlc3QgPSBkZXN0OworCSAgY29uc3Qgc2hvcnQgKnNzcmMgPSBzcmM7CisJICAqc2Rlc3QrKyA9ICpzc3JjKys7CisJICBkZXN0ID0gc2Rlc3Q7CisJICBzcmMgPSBzc3JjOworCSAgbiAtPSAyOworCX0KKyAgICAgIHRlbXAgPSBuID4+IDI7CisgICAgICBpZiAodGVtcCkKKwl7CisJICBsb25nICpsZGVzdCA9IGRlc3Q7CisJICBjb25zdCBsb25nICpsc3JjID0gc3JjOworCSAgdGVtcC0tOworCSAgZG8KKwkgICAgKmxkZXN0KysgPSAqbHNyYysrOworCSAgd2hpbGUgKHRlbXAtLSk7CisJICBkZXN0ID0gbGRlc3Q7CisJICBzcmMgPSBsc3JjOworCX0KKyAgICAgIGlmIChuICYgMikKKwl7CisJICBzaG9ydCAqc2Rlc3QgPSBkZXN0OworCSAgY29uc3Qgc2hvcnQgKnNzcmMgPSBzcmM7CisJICAqc2Rlc3QrKyA9ICpzc3JjKys7CisJICBkZXN0ID0gc2Rlc3Q7CisJICBzcmMgPSBzc3JjOworCX0KKyAgICAgIGlmIChuICYgMSkKKwl7CisJICBjaGFyICpjZGVzdCA9IGRlc3Q7CisJICBjb25zdCBjaGFyICpjc3JjID0gc3JjOworCSAgKmNkZXN0ID0gKmNzcmM7CisJfQorICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGRlc3QgPSAoY2hhciAqKSBkZXN0ICsgbjsKKyAgICAgIHNyYyA9IChjb25zdCBjaGFyICopIHNyYyArIG47CisgICAgICBpZiAoKGxvbmcpIGRlc3QgJiAxKQorCXsKKwkgIGNoYXIgKmNkZXN0ID0gZGVzdDsKKwkgIGNvbnN0IGNoYXIgKmNzcmMgPSBzcmM7CisJICAqLS1jZGVzdCA9ICotLWNzcmM7CisJICBkZXN0ID0gY2Rlc3Q7CisJICBzcmMgPSBjc3JjOworCSAgbi0tOworCX0KKyAgICAgIGlmIChuID4gMiAmJiAobG9uZykgZGVzdCAmIDIpCisJeworCSAgc2hvcnQgKnNkZXN0ID0gZGVzdDsKKwkgIGNvbnN0IHNob3J0ICpzc3JjID0gc3JjOworCSAgKi0tc2Rlc3QgPSAqLS1zc3JjOworCSAgZGVzdCA9IHNkZXN0OworCSAgc3JjID0gc3NyYzsKKwkgIG4gLT0gMjsKKwl9CisgICAgICB0ZW1wID0gbiA+PiAyOworICAgICAgaWYgKHRlbXApCisJeworCSAgbG9uZyAqbGRlc3QgPSBkZXN0OworCSAgY29uc3QgbG9uZyAqbHNyYyA9IHNyYzsKKwkgIHRlbXAtLTsKKwkgIGRvCisJICAgICotLWxkZXN0ID0gKi0tbHNyYzsKKwkgIHdoaWxlICh0ZW1wLS0pOworCSAgZGVzdCA9IGxkZXN0OworCSAgc3JjID0gbHNyYzsKKwl9CisgICAgICBpZiAobiAmIDIpCisJeworCSAgc2hvcnQgKnNkZXN0ID0gZGVzdDsKKwkgIGNvbnN0IHNob3J0ICpzc3JjID0gc3JjOworCSAgKi0tc2Rlc3QgPSAqLS1zc3JjOworCSAgZGVzdCA9IHNkZXN0OworCSAgc3JjID0gc3NyYzsKKwl9CisgICAgICBpZiAobiAmIDEpCisJeworCSAgY2hhciAqY2Rlc3QgPSBkZXN0OworCSAgY29uc3QgY2hhciAqY3NyYyA9IHNyYzsKKwkgICotLWNkZXN0ID0gKi0tY3NyYzsKKwl9CisgICAgfQorICByZXR1cm4geGRlc3Q7Cit9CisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNQ01QCitleHRlcm4gaW50IG1lbWNtcChjb25zdCB2b2lkICogLGNvbnN0IHZvaWQgKiAsc2l6ZV90ICk7CisjZGVmaW5lIG1lbWNtcChjcywgY3QsIG4pIFwKKyhfX2J1aWx0aW5fY29uc3RhbnRfcChuKSA/IFwKKyBfX2J1aWx0aW5fbWVtY21wKChjcyksKGN0KSwobikpIDogXAorIG1lbWNtcCgoY3MpLChjdCksKG4pKSkKKworI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1DSFIKK3N0YXRpYyBpbmxpbmUgdm9pZCAqbWVtY2hyKGNvbnN0IHZvaWQgKmNzLCBpbnQgYywgc2l6ZV90IGNvdW50KQoreworCS8qIFNvbWVvbmUgZWxzZSBjYW4gb3B0aW1pemUgdGhpcywgSSBkb24ndCBjYXJlIC0gdG9ueW1AbWFjLmxpbnV4LW02OGsub3JnICovCisJdW5zaWduZWQgY2hhciAqcmV0ID0gKHVuc2lnbmVkIGNoYXIgKiljczsKKwlmb3IoO2NvdW50PjA7Y291bnQtLSxyZXQrKykKKwkJaWYoKnJldCA9PSBjKSByZXR1cm4gcmV0OworCisJcmV0dXJuIE5VTEw7Cit9CisKKyNlbmRpZiAvKiBfTTY4S19TVFJJTkdfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvc3VuMy1oZWFkLmggYi9pbmNsdWRlL2FzbS1tNjhrL3N1bjMtaGVhZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3OTlkOTUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL3N1bjMtaGVhZC5oCkBAIC0wLDAgKzEsMTIgQEAKKy8qICRJZDogaGVhZC5oLHYgMS4zMiAxOTk2LzEyLzA0IDAwOjEyOjQ4IGVjZCBFeHAgJCAqLworI2lmbmRlZiBfX1NVTjNfSEVBRF9ICisjZGVmaW5lIF9fU1VOM19IRUFEX0gKKworI2RlZmluZSBLRVJOQkFTRSAgICAgICAgMHhFMDAwMDAwICAvKiBGaXJzdCBhZGRyZXNzIHRoZSBrZXJuZWwgd2lsbCBldmVudHVhbGx5IGJlICovCisjZGVmaW5lIExPQURfQUREUiAgICAgICAweDQwMDAgICAgICAvKiBwcm9tIGp1bXBzIHRvIHVzIGhlcmUgdW5sZXNzIHRoaXMgaXMgZWxmIC9ib290ICovCisjZGVmaW5lIEJJX1NUQVJUIChLRVJOQkFTRSArIDB4MzAwMCkgLyogYmVnaW5uaW5nIG9mIHRoZSBib290aW5mbyByZWNvcmRzICovCisjZGVmaW5lIEZDX0NPTlRST0wgIDMKKyNkZWZpbmUgRkNfU1VQRVJEICAgIDUKKyNkZWZpbmUgRkNfQ1BVICAgICAgNworCisjZW5kaWYgLyogX19TVU4zX0hFQURfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9zdW4zX3BnYWxsb2MuaCBiL2luY2x1ZGUvYXNtLW02OGsvc3VuM19wZ2FsbG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ4MjQxMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvc3VuM19wZ2FsbG9jLmgKQEAgLTAsMCArMSw5NSBAQAorLyogc3VuM19wZ2FsbG9jLmggLS0KKyAqIHJlb3JnYW5pemF0aW9uIGFyb3VuZCAyLjMuMzksIHJvdXRpbmVzIG1vdmVkIGZyb20gc3VuM19wZ3RhYmxlLmgKKyAqCisgKgorICogMDIvMjcvMjAwMiAtLSBNb2RpZmllZCB0byBzdXBwb3J0ICJoaWdocHRlIiBpbXBsZW1lbnRhdGlvbiBpbiAyLjUuNSAoU2FtKQorICoKKyAqIG1vdmVkIDEvMjYvMjAwMCBTYW0gQ3JlYXNleQorICovCisKKyNpZm5kZWYgX1NVTjNfUEdBTExPQ19ICisjZGVmaW5lIF9TVU4zX1BHQUxMT0NfSAorCisjaW5jbHVkZSA8YXNtL3RsYi5oPgorCisvKiBGSVhNRSAtIHdoZW4gd2UgZ2V0IHRoaXMgY29tcGlsaW5nICovCisvKiBlcm0sIG5vdyB0aGF0IGl0J3MgY29tcGlsaW5nLCB3aGF0IGRvIHdlIGRvIHdpdGggaXQ/ICovCisjZGVmaW5lIF9LRVJOUEdfVEFCTEUgMAorCitleHRlcm4gY29uc3QgY2hhciBiYWRfcG1kX3N0cmluZ1tdOworCisjZGVmaW5lIHBtZF9hbGxvY19vbmUobW0sYWRkcmVzcykgICAgICAgKHsgQlVHKCk7ICgocG1kX3QgKikyKTsgfSkKKworCitzdGF0aWMgaW5saW5lIHZvaWQgcHRlX2ZyZWVfa2VybmVsKHB0ZV90ICogcHRlKQoreworICAgICAgICBmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIHB0ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdGVfZnJlZShzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKyAgICAgICAgX19mcmVlX3BhZ2UocGFnZSk7Cit9CisKKyNkZWZpbmUgX19wdGVfZnJlZV90bGIodGxiLHB0ZSkgdGxiX3JlbW92ZV9wYWdlKCh0bGIpLChwdGUpKQorCitzdGF0aWMgaW5saW5lIHB0ZV90ICpwdGVfYWxsb2Nfb25lX2tlcm5lbChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCQkJICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisJdW5zaWduZWQgbG9uZyBwYWdlID0gX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUx8X19HRlBfUkVQRUFUKTsKKworCWlmICghcGFnZSkKKwkJcmV0dXJuIE5VTEw7CisKKwltZW1zZXQoKHZvaWQgKilwYWdlLCAwLCBQQUdFX1NJWkUpOworCXJldHVybiAocHRlX3QgKikgKHBhZ2UpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpwdGVfYWxsb2Nfb25lKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJCQkgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworICAgICAgICBzdHJ1Y3QgcGFnZSAqcGFnZSA9IGFsbG9jX3BhZ2VzKEdGUF9LRVJORUx8X19HRlBfUkVQRUFULCAwKTsKKworCWlmIChwYWdlID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJY2xlYXJfaGlnaHBhZ2UocGFnZSk7CisJcmV0dXJuIHBhZ2U7CisKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBtZF9wb3B1bGF0ZV9rZXJuZWwoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQsIHB0ZV90ICpwdGUpCit7CisJcG1kX3ZhbCgqcG1kKSA9IF9fcGEoKHVuc2lnbmVkIGxvbmcpcHRlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBtZF9wb3B1bGF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZCwgc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJcG1kX3ZhbCgqcG1kKSA9IF9fcGEoKHVuc2lnbmVkIGxvbmcpcGFnZV9hZGRyZXNzKHBhZ2UpKTsKK30KKworLyoKKyAqIGFsbG9jYXRpbmcgYW5kIGZyZWVpbmcgYSBwbWQgaXMgdHJpdmlhbDogdGhlIDEtZW50cnkgcG1kIGlzCisgKiBpbnNpZGUgdGhlIHBnZCwgc28gaGFzIG5vIGV4dHJhIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggaXQuCisgKi8KKyNkZWZpbmUgcG1kX2ZyZWUoeCkJCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIF9fcG1kX2ZyZWVfdGxiKHRsYiwgeCkJCWRvIHsgfSB3aGlsZSAoMCkKKworc3RhdGljIGlubGluZSB2b2lkIHBnZF9mcmVlKHBnZF90ICogcGdkKQoreworICAgICAgICBmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIHBnZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgcGdkX3QgKiBwZ2RfYWxsb2Moc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisgICAgIHBnZF90ICpuZXdfcGdkOworCisgICAgIG5ld19wZ2QgPSAocGdkX3QgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CisgICAgIG1lbWNweShuZXdfcGdkLCBzd2FwcGVyX3BnX2RpciwgUEFHRV9TSVpFKTsKKyAgICAgbWVtc2V0KG5ld19wZ2QsIDAsIChQQUdFX09GRlNFVCA+PiBQR0RJUl9TSElGVCkpOworICAgICByZXR1cm4gbmV3X3BnZDsKK30KKworI2RlZmluZSBwZ2RfcG9wdWxhdGUobW0sIHBtZCwgcHRlKSBCVUcoKQorCisjZW5kaWYgLyogU1VOM19QR0FMTE9DX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvc3VuM19wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1tNjhrL3N1bjNfcGd0YWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5NzRiYjAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL3N1bjNfcGd0YWJsZS5oCkBAIC0wLDAgKzEsMjM4IEBACisjaWZuZGVmIF9TVU4zX1BHVEFCTEVfSAorI2RlZmluZSBfU1VOM19QR1RBQkxFX0gKKworI2luY2x1ZGUgPGFzbS9zdW4zbW11Lmg+CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjaW5jbHVkZSA8YXNtL3ZpcnRjb252ZXJ0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorCisvKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIGFsbCB0aGUgdGhpbmdzIHdoaWNoIGNoYW5nZSBkcmFzdGljYWxseSBmb3IgdGhlIHN1bjMKKyAqIHBhZ2V0YWJsZSBzdHVmZiwgdG8gYXZvaWQgbWFraW5nIHRvbyBtdWNoIG9mIGEgbWVzcyBvZiB0aGUgZ2VuZXJpYyBtNjhrCisgKiBgcGd0YWJsZS5oJzsgdGhpcyBzaG91bGQgb25seSBiZSBpbmNsdWRlZCBmcm9tIHRoZSBnZW5lcmljIGZpbGUuIC0tbQorICovCisKKy8qIEZvciB2aXJ0dWFsIGFkZHJlc3MgdG8gcGh5c2ljYWwgYWRkcmVzcyBjb252ZXJzaW9uICovCisjZGVmaW5lIFZUT1AoYWRkcikJX19wYShhZGRyKQorI2RlZmluZSBQVE9WKGFkZHIpCV9fdmEoYWRkcikKKworCisjZW5kaWYJLyogIV9fQVNTRU1CTFlfXyAqLworCisvKiBUaGVzZSBuZWVkIHRvIGJlIGRlZmluZWQgZm9yIGNvbXBhdGliaWxpdHkgYWx0aG91Z2ggdGhlIHN1bjMgZG9lc24ndCB1c2UgdGhlbSAqLworI2RlZmluZSBfUEFHRV9OT0NBQ0hFMDMwIDB4MDQwCisjZGVmaW5lIF9DQUNIRU1BU0swNDAgICAofjB4MDYwKQorI2RlZmluZSBfUEFHRV9OT0NBQ0hFX1MgMHgwNDAKKworLyogUGFnZSBwcm90ZWN0aW9uIHZhbHVlcyB3aXRoaW4gUFRFLiAqLworI2RlZmluZSBTVU4zX1BBR0VfVkFMSUQgICAgICgweDgwMDAwMDAwKQorI2RlZmluZSBTVU4zX1BBR0VfV1JJVEVBQkxFICgweDQwMDAwMDAwKQorI2RlZmluZSBTVU4zX1BBR0VfU1lTVEVNICAgICgweDIwMDAwMDAwKQorI2RlZmluZSBTVU4zX1BBR0VfTk9DQUNIRSAgICgweDEwMDAwMDAwKQorI2RlZmluZSBTVU4zX1BBR0VfQUNDRVNTRUQgICgweDAyMDAwMDAwKQorI2RlZmluZSBTVU4zX1BBR0VfTU9ESUZJRUQgICgweDAxMDAwMDAwKQorCisKKy8qIEV4dGVybmFsbHkgdXNlZCBwYWdlIHByb3RlY3Rpb24gdmFsdWVzLiAqLworI2RlZmluZSBfUEFHRV9QUkVTRU5UCShTVU4zX1BBR0VfVkFMSUQpCisjZGVmaW5lIF9QQUdFX0FDQ0VTU0VECShTVU4zX1BBR0VfQUNDRVNTRUQpCisKKyNkZWZpbmUgUFRFX0ZJTEVfTUFYX0JJVFMgMjgKKworLyogQ29tcG91bmQgcGFnZSBwcm90ZWN0aW9uIHZhbHVlcy4gKi8KKy8vdG9kbzogd29yayBvdXQgd2hpY2ggb25lcyAqc2hvdWxkKiBoYXZlIFNVTjNfUEFHRV9OT0NBQ0hFIGFuZCBmaXguLi4KKy8vIGlzIGl0IGp1c3QgUEFHRV9LRVJORUwgYW5kIFBBR0VfU0hBUkVEPworI2RlZmluZSBQQUdFX05PTkUJX19wZ3Byb3QoU1VOM19QQUdFX1ZBTElEIFwKKwkJCQkgfCBTVU4zX1BBR0VfQUNDRVNTRUQgXAorCQkJCSB8IFNVTjNfUEFHRV9OT0NBQ0hFKQorI2RlZmluZSBQQUdFX1NIQVJFRAlfX3BncHJvdChTVU4zX1BBR0VfVkFMSUQgXAorCQkJCSB8IFNVTjNfUEFHRV9XUklURUFCTEUgXAorCQkJCSB8IFNVTjNfUEFHRV9BQ0NFU1NFRCBcCisJCQkJIHwgU1VOM19QQUdFX05PQ0FDSEUpCisjZGVmaW5lIFBBR0VfQ09QWQlfX3BncHJvdChTVU4zX1BBR0VfVkFMSUQgXAorCQkJCSB8IFNVTjNfUEFHRV9BQ0NFU1NFRCBcCisJCQkJIHwgU1VOM19QQUdFX05PQ0FDSEUpCisjZGVmaW5lIFBBR0VfUkVBRE9OTFkJX19wZ3Byb3QoU1VOM19QQUdFX1ZBTElEIFwKKwkJCQkgfCBTVU4zX1BBR0VfQUNDRVNTRUQgXAorCQkJCSB8IFNVTjNfUEFHRV9OT0NBQ0hFKQorI2RlZmluZSBQQUdFX0tFUk5FTAlfX3BncHJvdChTVU4zX1BBR0VfVkFMSUQgXAorCQkJCSB8IFNVTjNfUEFHRV9XUklURUFCTEUgXAorCQkJCSB8IFNVTjNfUEFHRV9TWVNURU0gXAorCQkJCSB8IFNVTjNfUEFHRV9OT0NBQ0hFIFwKKwkJCQkgfCBTVU4zX1BBR0VfQUNDRVNTRUQgXAorCQkJCSB8IFNVTjNfUEFHRV9NT0RJRklFRCkKKyNkZWZpbmUgUEFHRV9JTklUCV9fcGdwcm90KFNVTjNfUEFHRV9WQUxJRCBcCisJCQkJIHwgU1VOM19QQUdFX1dSSVRFQUJMRSBcCisJCQkJIHwgU1VOM19QQUdFX1NZU1RFTSBcCisJCQkJIHwgU1VOM19QQUdFX05PQ0FDSEUpCisKKy8qCisgKiBQYWdlIHByb3RlY3Rpb25zIGZvciBpbml0aWFsaXNpbmcgcHJvdGVjdGlvbl9tYXAuIFRoZSBzdW4zIGhhcyBvbmx5IHR3bworICogcHJvdGVjdGlvbiBzZXR0aW5ncywgdmFsaWQgKGltcGx5aW5nIHJlYWQgYW5kIGV4ZWN1dGUpIGFuZCB3cml0ZWFibGUuIFRoZXNlCisgKiBhcmUgYXMgY2xvc2UgYXMgd2UgY2FuIGdldC4uLgorICovCisjZGVmaW5lIF9fUDAwMAlQQUdFX05PTkUKKyNkZWZpbmUgX19QMDAxCVBBR0VfUkVBRE9OTFkKKyNkZWZpbmUgX19QMDEwCVBBR0VfQ09QWQorI2RlZmluZSBfX1AwMTEJUEFHRV9DT1BZCisjZGVmaW5lIF9fUDEwMAlQQUdFX1JFQURPTkxZCisjZGVmaW5lIF9fUDEwMQlQQUdFX1JFQURPTkxZCisjZGVmaW5lIF9fUDExMAlQQUdFX0NPUFkKKyNkZWZpbmUgX19QMTExCVBBR0VfQ09QWQorCisjZGVmaW5lIF9fUzAwMAlQQUdFX05PTkUKKyNkZWZpbmUgX19TMDAxCVBBR0VfUkVBRE9OTFkKKyNkZWZpbmUgX19TMDEwCVBBR0VfU0hBUkVECisjZGVmaW5lIF9fUzAxMQlQQUdFX1NIQVJFRAorI2RlZmluZSBfX1MxMDAJUEFHRV9SRUFET05MWQorI2RlZmluZSBfX1MxMDEJUEFHRV9SRUFET05MWQorI2RlZmluZSBfX1MxMTAJUEFHRV9TSEFSRUQKKyNkZWZpbmUgX19TMTExCVBBR0VfU0hBUkVECisKKy8qIFVzZSB0aGVzZSBmYWtlIHBhZ2UtcHJvdGVjdGlvbnMgb24gUE1Ecy4gKi8KKyNkZWZpbmUgU1VOM19QTURfVkFMSUQJKDB4MDAwMDAwMDEpCisjZGVmaW5lIFNVTjNfUE1EX01BU0sJKDB4MDAwMDAwM0YpCisjZGVmaW5lIFNVTjNfUE1EX01BR0lDCSgweDAwMDAwMDJCKQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisvKgorICogQ29udmVyc2lvbiBmdW5jdGlvbnM6IGNvbnZlcnQgYSBwYWdlIGFuZCBwcm90ZWN0aW9uIHRvIGEgcGFnZSBlbnRyeSwKKyAqIGFuZCBhIHBhZ2UgZW50cnkgYW5kIHBhZ2UgZGlyZWN0b3J5IHRvIHRoZSBwYWdlIHRoZXkgcmVmZXIgdG8uCisgKi8KKyNkZWZpbmUgbWtfcHRlKHBhZ2UsIHBncHJvdCkgcGZuX3B0ZShwYWdlX3RvX3BmbihwYWdlKSwgKHBncHJvdCkpCisKK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21vZGlmeShwdGVfdCBwdGUsIHBncHJvdF90IG5ld3Byb3QpCit7CisJcHRlX3ZhbChwdGUpID0gKHB0ZV92YWwocHRlKSAmIFNVTjNfUEFHRV9DSEdfTUFTSykgfCBwZ3Byb3RfdmFsKG5ld3Byb3QpOworCXJldHVybiBwdGU7Cit9CisKKyNkZWZpbmUgcG1kX3NldChwbWRwLHB0ZXApIGRvIHt9IHdoaWxlICgwKQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGdkX3NldChwZ2RfdCAqcGdkcCwgcG1kX3QgKnBtZHApCit7CisJcGdkX3ZhbCgqcGdkcCkgPSB2aXJ0X3RvX3BoeXMocG1kcCk7Cit9CisKKyNkZWZpbmUgX19wdGVfcGFnZShwdGUpIFwKKygodW5zaWduZWQgbG9uZykgX192YSAoKHB0ZV92YWwgKHB0ZSkgJiBTVU4zX1BBR0VfUEdOVU1fTUFTSykgPDwgUEFHRV9TSElGVCkpCisjZGVmaW5lIF9fcG1kX3BhZ2UocG1kKSBcCisoKHVuc2lnbmVkIGxvbmcpIF9fdmEgKHBtZF92YWwgKHBtZCkgJiBQQUdFX01BU0spKQorCitzdGF0aWMgaW5saW5lIGludCBwdGVfbm9uZSAocHRlX3QgcHRlKSB7IHJldHVybiAhcHRlX3ZhbCAocHRlKTsgfQorc3RhdGljIGlubGluZSBpbnQgcHRlX3ByZXNlbnQgKHB0ZV90IHB0ZSkgeyByZXR1cm4gcHRlX3ZhbCAocHRlKSAmIFNVTjNfUEFHRV9WQUxJRDsgfQorc3RhdGljIGlubGluZSB2b2lkIHB0ZV9jbGVhciAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApCit7CisJcHRlX3ZhbCAoKnB0ZXApID0gMDsKK30KKworI2RlZmluZSBwdGVfcGZuKHB0ZSkgICAgICAgICAgICAocHRlX3ZhbChwdGUpICYgU1VOM19QQUdFX1BHTlVNX01BU0spCisjZGVmaW5lIHBmbl9wdGUocGZuLCBwZ3Byb3QpIFwKKyh7IHB0ZV90IF9fcHRlOyBwdGVfdmFsKF9fcHRlKSA9IHBmbiB8IHBncHJvdF92YWwocGdwcm90KTsgX19wdGU7IH0pCisKKyNkZWZpbmUgcHRlX3BhZ2UocHRlKQkJKG1lbV9tYXArKChfX3B0ZV9wYWdlKHB0ZSkgLSBQQUdFX09GRlNFVCkgPj4gUEFHRV9TSElGVCkpCisjZGVmaW5lIHBtZF9wYWdlKHBtZCkJCShtZW1fbWFwKygoX19wbWRfcGFnZShwbWQpIC0gUEFHRV9PRkZTRVQpID4+IFBBR0VfU0hJRlQpKQorCisKK3N0YXRpYyBpbmxpbmUgaW50IHBtZF9ub25lMiAocG1kX3QgKnBtZCkgeyByZXR1cm4gIXBtZF92YWwgKCpwbWQpOyB9CisjZGVmaW5lIHBtZF9ub25lKHBtZCkgcG1kX25vbmUyKCYocG1kKSkKKy8vc3RhdGljIGlubGluZSBpbnQgcG1kX2JhZCAocG1kX3QgcG1kKSB7IHJldHVybiAocG1kX3ZhbCAocG1kKSAmIFNVTjNfUE1EX01BU0spICE9IFNVTjNfUE1EX01BR0lDOyB9CitzdGF0aWMgaW5saW5lIGludCBwbWRfYmFkMiAocG1kX3QgKnBtZCkgeyByZXR1cm4gMDsgfQorI2RlZmluZSBwbWRfYmFkKHBtZCkgcG1kX2JhZDIoJihwbWQpKQorc3RhdGljIGlubGluZSBpbnQgcG1kX3ByZXNlbnQyIChwbWRfdCAqcG1kKSB7IHJldHVybiBwbWRfdmFsICgqcG1kKSAmIFNVTjNfUE1EX1ZBTElEOyB9CisvKiAjZGVmaW5lIHBtZF9wcmVzZW50KHBtZCkgcG1kX3ByZXNlbnQyKCYocG1kKSkgKi8KKyNkZWZpbmUgcG1kX3ByZXNlbnQocG1kKSAoIXBtZF9ub25lMigmKHBtZCkpKQorc3RhdGljIGlubGluZSB2b2lkIHBtZF9jbGVhciAocG1kX3QgKnBtZHApIHsgcG1kX3ZhbCAoKnBtZHApID0gMDsgfQorCitzdGF0aWMgaW5saW5lIGludCBwZ2Rfbm9uZSAocGdkX3QgcGdkKSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIGludCBwZ2RfYmFkIChwZ2RfdCBwZ2QpIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHBnZF9wcmVzZW50IChwZ2RfdCBwZ2QpIHsgcmV0dXJuIDE7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBwZ2RfY2xlYXIgKHBnZF90ICpwZ2RwKSB7fQorCisKKyNkZWZpbmUgcHRlX0VSUk9SKGUpIFwKKwlwcmludGsoIiVzOiVkOiBiYWQgcHRlICUwOGx4LlxuIiwgX19GSUxFX18sIF9fTElORV9fLCBwdGVfdmFsKGUpKQorI2RlZmluZSBwbWRfRVJST1IoZSkgXAorCXByaW50aygiJXM6JWQ6IGJhZCBwbWQgJTA4bHguXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sIHBtZF92YWwoZSkpCisjZGVmaW5lIHBnZF9FUlJPUihlKSBcCisJcHJpbnRrKCIlczolZDogYmFkIHBnZCAlMDhseC5cbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgcGdkX3ZhbChlKSkKKworCisvKgorICogVGhlIGZvbGxvd2luZyBvbmx5IHdvcmsgaWYgcHRlX3ByZXNlbnQoKSBpcyB0cnVlLgorICogVW5kZWZpbmVkIGJlaGF2aW91ciBpZiBub3QuLi4KKyAqIFt3ZSBoYXZlIHRoZSBmdWxsIHNldCBoZXJlIGV2ZW4gaWYgdGhleSBkb24ndCBjaGFuZ2UgZnJvbSBtNjhrXQorICovCitzdGF0aWMgaW5saW5lIGludCBwdGVfcmVhZChwdGVfdCBwdGUpCQl7IHJldHVybiAxOyB9CitzdGF0aWMgaW5saW5lIGludCBwdGVfd3JpdGUocHRlX3QgcHRlKQkJeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgU1VOM19QQUdFX1dSSVRFQUJMRTsgfQorc3RhdGljIGlubGluZSBpbnQgcHRlX2V4ZWMocHRlX3QgcHRlKQkJeyByZXR1cm4gMTsgfQorc3RhdGljIGlubGluZSBpbnQgcHRlX2RpcnR5KHB0ZV90IHB0ZSkJCXsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIFNVTjNfUEFHRV9NT0RJRklFRDsgfQorc3RhdGljIGlubGluZSBpbnQgcHRlX3lvdW5nKHB0ZV90IHB0ZSkJCXsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIFNVTjNfUEFHRV9BQ0NFU1NFRDsgfQorc3RhdGljIGlubGluZSBpbnQgcHRlX2ZpbGUocHRlX3QgcHRlKQkJeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgU1VOM19QQUdFX0FDQ0VTU0VEOyB9CisKK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX3dycHJvdGVjdChwdGVfdCBwdGUpCXsgcHRlX3ZhbChwdGUpICY9IH5TVU4zX1BBR0VfV1JJVEVBQkxFOyByZXR1cm4gcHRlOyB9CitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9yZHByb3RlY3QocHRlX3QgcHRlKQl7IHJldHVybiBwdGU7IH0KK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX2V4cHJvdGVjdChwdGVfdCBwdGUpCXsgcmV0dXJuIHB0ZTsgfQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtjbGVhbihwdGVfdCBwdGUpCXsgcHRlX3ZhbChwdGUpICY9IH5TVU4zX1BBR0VfTU9ESUZJRUQ7IHJldHVybiBwdGU7IH0KK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rb2xkKHB0ZV90IHB0ZSkJeyBwdGVfdmFsKHB0ZSkgJj0gflNVTjNfUEFHRV9BQ0NFU1NFRDsgcmV0dXJuIHB0ZTsgfQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUpCXsgcHRlX3ZhbChwdGUpIHw9IFNVTjNfUEFHRV9XUklURUFCTEU7IHJldHVybiBwdGU7IH0KK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rcmVhZChwdGVfdCBwdGUpCXsgcmV0dXJuIHB0ZTsgfQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtleGVjKHB0ZV90IHB0ZSkJeyByZXR1cm4gcHRlOyB9CitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta2RpcnR5KHB0ZV90IHB0ZSkJeyBwdGVfdmFsKHB0ZSkgfD0gU1VOM19QQUdFX01PRElGSUVEOyByZXR1cm4gcHRlOyB9CitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3lvdW5nKHB0ZV90IHB0ZSkJeyBwdGVfdmFsKHB0ZSkgfD0gU1VOM19QQUdFX0FDQ0VTU0VEOyByZXR1cm4gcHRlOyB9CitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta25vY2FjaGUocHRlX3QgcHRlKQl7IHB0ZV92YWwocHRlKSB8PSBTVU4zX1BBR0VfTk9DQUNIRTsgcmV0dXJuIHB0ZTsgfQorLy8gdXNlIHRoaXMgdmVyc2lvbiB3aGVuIGNhY2hlcyB3b3JrLi4uCisvL3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rY2FjaGUocHRlX3QgcHRlKQl7IHB0ZV92YWwocHRlKSAmPSBTVU4zX1BBR0VfTk9DQUNIRTsgcmV0dXJuIHB0ZTsgfQorLy8gdW50aWwgdGhlbiwgdXNlOgorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtjYWNoZShwdGVfdCBwdGUpCXsgcmV0dXJuIHB0ZTsgfQorCitleHRlcm4gcGdkX3Qgc3dhcHBlcl9wZ19kaXJbUFRSU19QRVJfUEdEXTsKK2V4dGVybiBwZ2RfdCBrZXJuZWxfcGdfZGlyW1BUUlNfUEVSX1BHRF07CisKKy8qIEZpbmQgYW4gZW50cnkgaW4gYSBwYWdldGFibGUgZGlyZWN0b3J5LiAqLworI2RlZmluZSBwZ2RfaW5kZXgoYWRkcmVzcykgICAgICgoYWRkcmVzcykgPj4gUEdESVJfU0hJRlQpCisKKyNkZWZpbmUgcGdkX29mZnNldChtbSwgYWRkcmVzcykgXAorKChtbSktPnBnZCArIHBnZF9pbmRleChhZGRyZXNzKSkKKworLyogRmluZCBhbiBlbnRyeSBpbiBhIGtlcm5lbCBwYWdldGFibGUgZGlyZWN0b3J5LiAqLworI2RlZmluZSBwZ2Rfb2Zmc2V0X2soYWRkcmVzcykgcGdkX29mZnNldCgmaW5pdF9tbSwgYWRkcmVzcykKKworLyogRmluZCBhbiBlbnRyeSBpbiB0aGUgc2Vjb25kLWxldmVsIHBhZ2V0YWJsZS4gKi8KK3N0YXRpYyBpbmxpbmUgcG1kX3QgKnBtZF9vZmZzZXQgKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwlyZXR1cm4gKHBtZF90ICopIHBnZDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHB0ZV90b19wZ29mZihwdGVfdCBwdGUpCit7CisJcmV0dXJuIHB0ZS5wdGUgJiBTVU4zX1BBR0VfUEdOVU1fTUFTSzsKK30KKworc3RhdGljIGlubGluZSBwdGVfdCBwZ29mZl90b19wdGUoaW5saW5lIHVuc2lnbmVkIG9mZikKK3sKKwlwdGVfdCBwdGUgPSB7IG9mZiArIFNVTjNfUEFHRV9BQ0NFU1NFRCB9OworCXJldHVybiBwdGU7Cit9CisKKworLyogRmluZCBhbiBlbnRyeSBpbiB0aGUgdGhpcmQtbGV2ZWwgcGFnZXRhYmxlLiAqLworI2RlZmluZSBwdGVfaW5kZXgoYWRkcmVzcykgKChhZGRyZXNzID4+IFBBR0VfU0hJRlQpICYgKFBUUlNfUEVSX1BURS0xKSkKKyNkZWZpbmUgcHRlX29mZnNldF9rZXJuZWwocG1kLCBhZGRyZXNzKSAoKHB0ZV90ICopIF9fcG1kX3BhZ2UoKnBtZCkgKyBwdGVfaW5kZXgoYWRkcmVzcykpCisvKiBGSVhNRTogc2hvdWxkIHdlIGJvdGhlciB3aXRoIGttYXAoKSBoZXJlPyAqLworI2RlZmluZSBwdGVfb2Zmc2V0X21hcChwbWQsIGFkZHJlc3MpICgocHRlX3QgKilrbWFwKHBtZF9wYWdlKCpwbWQpKSArIHB0ZV9pbmRleChhZGRyZXNzKSkKKyNkZWZpbmUgcHRlX29mZnNldF9tYXBfbmVzdGVkKHBtZCwgYWRkcmVzcykgcHRlX29mZnNldF9tYXAocG1kLCBhZGRyZXNzKQorI2RlZmluZSBwdGVfdW5tYXAocHRlKSBrdW5tYXAocHRlKQorI2RlZmluZSBwdGVfdW5tYXBfbmVzdGVkKHB0ZSkga3VubWFwKHB0ZSkKKworLyogTWFjcm9zIHRvIChkZSljb25zdHJ1Y3QgdGhlIGZha2UgUFRFcyByZXByZXNlbnRpbmcgc3dhcCBwYWdlcy4gKi8KKyNkZWZpbmUgX19zd3BfdHlwZSh4KQkJKCh4KS52YWwgJiAweDdGKQorI2RlZmluZSBfX3N3cF9vZmZzZXQoeCkJCSgoKHgpLnZhbCkgPj4gNykKKyNkZWZpbmUgX19zd3BfZW50cnkodHlwZSxvZmZzZXQpICgoc3dwX2VudHJ5X3QpIHsgKCh0eXBlKSB8ICgob2Zmc2V0KSA8PCA3KSkgfSkKKyNkZWZpbmUgX19wdGVfdG9fc3dwX2VudHJ5KHB0ZSkJKChzd3BfZW50cnlfdCkgeyBwdGVfdmFsKHB0ZSkgfSkKKyNkZWZpbmUgX19zd3BfZW50cnlfdG9fcHRlKHgpCSgocHRlX3QpIHsgKHgpLnZhbCB9KQorCisjZW5kaWYJLyogIV9fQVNTRU1CTFlfXyAqLworI2VuZGlmCS8qICFfU1VOM19QR1RBQkxFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvc3VuM2ludHMuaCBiL2luY2x1ZGUvYXNtLW02OGsvc3VuM2ludHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDgzOGViCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9zdW4zaW50cy5oCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBzdW4zaW50cy5oIC0tIExpbnV4L1N1bjMgaW50ZXJydXB0IGhhbmRsaW5nIGNvZGUgZGVmaW5pdGlvbnMKKyAqCisgKiBFcmlrIFZlcmJydWdnZW4gKGVyaWtAYmlnbWFtYS54dGRuZXQubmwpCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgU1VOM0lOVFNfSAorI2RlZmluZSBTVU4zSU5UU19ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CisjaW5jbHVkZSA8YXNtL2ludGVyc2lsLmg+CisjaW5jbHVkZSA8YXNtL29wbGliLmg+CisKKyNkZWZpbmUgU1VOM19JTlRfVkVDUyAxOTIKKwordm9pZCBzdW4zX2VuYWJsZV9pcnEodW5zaWduZWQgaW50IGlycSk7Cit2b2lkIHN1bjNfZGlzYWJsZV9pcnEodW5zaWduZWQgaW50IGlycSk7CitpbnQgc3VuM19yZXF1ZXN0X2lycSh1bnNpZ25lZCBpbnQgaXJxLAorICAgICAgICAgICAgICAgICAgICAgaXJxcmV0dXJuX3QgKCpoYW5kbGVyKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKiksCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzLCBjb25zdCBjaGFyICpkZXZuYW1lLCB2b2lkICpkZXZfaWQKKwkJICAgICk7CitleHRlcm4gdm9pZCBzdW4zX2luaXRfSVJRICh2b2lkKTsKK2V4dGVybiBpcnFyZXR1cm5fdCAoKnN1bjNfZGVmYXVsdF9oYW5kbGVyW10pIChpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKik7CitleHRlcm4gaXJxcmV0dXJuX3QgKCpzdW4zX2ludGhhbmRsZXJbXSkgKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKK2V4dGVybiB2b2lkIHN1bjNfZnJlZV9pcnEgKHVuc2lnbmVkIGludCBpcnEsIHZvaWQgKmRldl9pZCk7CitleHRlcm4gdm9pZCBzdW4zX2VuYWJsZV9pbnRlcnJ1cHRzICh2b2lkKTsKK2V4dGVybiB2b2lkIHN1bjNfZGlzYWJsZV9pbnRlcnJ1cHRzICh2b2lkKTsKK2V4dGVybiBpbnQgc2hvd19zdW4zX2ludGVycnVwdHMoc3RydWN0IHNlcV9maWxlICosIHZvaWQgKik7CitleHRlcm4gaXJxcmV0dXJuX3Qgc3VuM19wcm9jZXNzX2ludChpbnQsIHN0cnVjdCBwdF9yZWdzICopOworZXh0ZXJuIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIqIHN1bjNfaW50cmVnOworCisvKiBtYXN0ZXIgbGlzdCBvZiBWTUUgdmVjdG9ycyAtLSBkb24ndCBmdWNrIHdpdGggdGhpcyAqLworI2RlZmluZSBTVU4zX1ZFQ19GTE9QUFkgMHg0MAorI2RlZmluZSBTVU4zX1ZFQ19WTUVTQ1NJMCAweDQwCisjZGVmaW5lIFNVTjNfVkVDX1ZNRVNDU0kxIDB4NDEKKyNkZWZpbmUgU1VOM19WRUNfQ0cgMHhBOAorCisKKyNlbmRpZiAvKiBTVU4zSU5UU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL3N1bjNtbXUuaCBiL2luY2x1ZGUvYXNtLW02OGsvc3VuM21tdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjOGMxN2QKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL3N1bjNtbXUuaApAQCAtMCwwICsxLDE3MCBAQAorLyoKKyAqIERlZmluaXRpb25zIGZvciBTdW4zIGN1c3RvbSBNTVUuCisgKi8KKyNpZm5kZWYgX19TVU4zX01NVV9IX18KKyNkZWZpbmUgX19TVU4zX01NVV9IX18KKworI2luY2x1ZGUgPGFzbS9tb3ZzLmg+CisjaW5jbHVkZSA8YXNtL3N1bjMtaGVhZC5oPgorCisvKiBNTVUgY2hhcmFjdGVyaXN0aWNzLiAqLworI2RlZmluZSBTVU4zX1NFR01BUFNfUEVSX0NPTlRFWFQJMjA0OAorI2RlZmluZSBTVU4zX1BNRUdTX05VTQkJCTI1NgorI2RlZmluZSBTVU4zX0NPTlRFWFRTX05VTSAgICAgICAgICAgICAgIDgKKworI2RlZmluZSBTVU4zX1BNRUdfU0laRV9CSVRTCSAxNworI2RlZmluZSBTVU4zX1BNRUdfU0laRQkJICgxIDw8IFNVTjNfUE1FR19TSVpFX0JJVFMpCisjZGVmaW5lIFNVTjNfUE1FR19NQVNLCQkgKFNVTjNfUE1FR19TSVpFIC0gMSkKKworI2RlZmluZSBTVU4zX1BURV9TSVpFX0JJVFMgICAgICAgMTMKKyNkZWZpbmUgU1VOM19QVEVfU0laRQkJICgxIDw8IFNVTjNfUFRFX1NJWkVfQklUUykKKyNkZWZpbmUgU1VOM19QVEVfTUFTSwkJIChTVU4zX1BURV9TSVpFIC0gMSkKKworI2RlZmluZSBTVU4zX0NPTlRST0xfTUFTSyAgICAgICAoMHgwRkZGRkZGQykKKyNkZWZpbmUgU1VOM19JTlZBTElEX1BNRUcJMjU1CisjZGVmaW5lIFNVTjNfSU5WQUxJRF9DT05URVhUIDI1NQorCisjZGVmaW5lIEFDX0lEUFJPTSAgICAgMHgwMDAwMDAwMCAgICAvKiAzNCAgSUQgUFJPTSwgUi9PLCBieXRlLCAzMiBieXRlcyAgICAgICovCisjZGVmaW5lIEFDX1BBR0VNQVAgICAgMHgxMDAwMDAwMCAgICAvKiAzICAgUGFnZW1hcCBSL1csIGxvbmcgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFDX1NFR01BUCAgICAgMHgyMDAwMDAwMCAgICAvKiAzICAgU2VnbWVudCBtYXAsIGJ5dGUgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFDX0NPTlRFWFQgICAgMHgzMDAwMDAwMCAgICAvKiAzNGMgY3VycmVudCBtbXUtY29udGV4dCAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFDX1NFTkFCTEUgICAgMHg0MDAwMDAwMCAgICAvKiAzNGMgc3lzdGVtIGR2bWEvY2FjaGUvcmVzZXQgZW5hYmxlIHJlZyovCisjZGVmaW5lIEFDX1VEVk1BX0VOQiAgMHg1MDAwMDAwMCAgICAvKiAzNCAgTm90IHVzZWQgb24gU3VuIGJvYXJkcywgYnl0ZSAgICAgICovCisjZGVmaW5lIEFDX0JVU19FUlJPUiAgMHg2MDAwMDAwMCAgICAvKiAzNCAgQ2xlYXJlZCBvbiByZWFkLCBieXRlLiAgICAgICAgICAgICovCisjZGVmaW5lIEFDX1NZTkNfRVJSICAgMHg2MDAwMDAwMCAgICAvKiAgIGMgZmF1bHQgdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFDX1NZTkNfVkEgICAgMHg2MDAwMDAwNCAgICAvKiAgIGMgZmF1bHQgdmlydHVhbCBhZGRyZXNzICAgICAgICAgICAgICovCisjZGVmaW5lIEFDX0FTWU5DX0VSUiAgMHg2MDAwMDAwOCAgICAvKiAgIGMgYXN5bmNocm9ub3VzIGZhdWx0IHR5cGUgICAgICAgICAgICovCisjZGVmaW5lIEFDX0FTWU5DX1ZBICAgMHg2MDAwMDAwYyAgICAvKiAgIGMgYXN5bmMgZmF1bHQgdmlydHVhbCBhZGRyZXNzICAgICAgICovCisjZGVmaW5lIEFDX0xFRFMgICAgICAgMHg3MDAwMDAwMCAgICAvKiAzNCAgWmVybyB0dXJucyBvbiBMRURzLCBieXRlICAgICAgICAgICovCisjZGVmaW5lIEFDX0NBQ0hFVEFHUyAgMHg4MDAwMDAwMCAgICAvKiAzNGMgZGlyZWN0IGFjY2VzcyB0byB0aGUgVkFDIHRhZ3MgICAgICovCisjZGVmaW5lIEFDX0NBQ0hFRERBVEEgMHg5MDAwMDAwMCAgICAvKiAzIGMgZGlyZWN0IGFjY2VzcyB0byB0aGUgVkFDIGRhdGEgICAgICovCisjZGVmaW5lIEFDX1VEVk1BX01BUCAgMHhEMDAwMDAwMCAgICAvKiA0ICAgTm90IHVzZWQgb24gU3VuIGJvYXJkcywgYnl0ZSAgICAgICovCisjZGVmaW5lIEFDX1ZNRV9WRUNUT1IgMHhFMDAwMDAwMCAgICAvKiA0ICAgRm9yIG5vbi1BdXRvdmVjdG9yIFZNRSwgYnl0ZSAgICAgICovCisjZGVmaW5lIEFDX0JPT1RfU0NDICAgMHhGMDAwMDAwMCAgICAvKiAzNCAgYnlwYXNzIHRvIGFjY2VzcyBaaWxvZyA4NTMwLiBieXRlLiovCisKKyNkZWZpbmUgU1VOM19QQUdFX0NIR19NQVNLIChTVU4zX1BBR0VfUEdOVU1fTUFTSyBcCisJCQkgICAgfCBTVU4zX1BBR0VfQUNDRVNTRUQgfCBTVU4zX1BBR0VfTU9ESUZJRUQpCisKKy8qIEJ1cyBhY2Nlc3MgdHlwZSB3aXRoaW4gUFRFLiAqLworI2RlZmluZSBTVU4zX1BBR0VfVFlQRV9NQVNLICAgKDB4MGMwMDAwMDApCisjZGVmaW5lIFNVTjNfUEFHRV9UWVBFX01FTU9SWSAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgU1VOM19QQUdFX1RZUEVfSU8gICAgICgweDA0MDAwMDAwKQorI2RlZmluZSBTVU4zX1BBR0VfVFlQRV9WTUUxNiAgKDB4MDgwMDAwMDApCisjZGVmaW5lIFNVTjNfUEFHRV9UWVBFX1ZNRTMyICAoMHgwYzAwMDAwMCkKKworLyogTWFzayBmb3IgcGFnZSBudW1iZXIgd2l0aGluIFBURS4gKi8KKyNkZWZpbmUgU1VOM19QQUdFX1BHTlVNX01BU0sgKDB4MDAwN0ZGRkYpCisKKy8qIEJpdHMgd2l0aGluIGJ1cy1lcnJvciByZWdpc3Rlci4gKi8KKyNkZWZpbmUgU1VOM19CVVNFUlJfV0FUQ0hET0cJKDB4MDEpCisjZGVmaW5lIFNVTjNfQlVTRVJSX3VudXNlZAkoMHgwMikKKyNkZWZpbmUgU1VOM19CVVNFUlJfRlBBRU5FUlIJKDB4MDQpCisjZGVmaW5lIFNVTjNfQlVTRVJSX0ZQQUJFUlIJKDB4MDgpCisjZGVmaW5lIFNVTjNfQlVTRVJSX1ZNRUJFUlIJKDB4MTApCisjZGVmaW5lIFNVTjNfQlVTRVJSX1RJTUVPVVQJKDB4MjApCisjZGVmaW5lIFNVTjNfQlVTRVJSX1BST1RFUlIJKDB4NDApCisjZGVmaW5lIFNVTjNfQlVTRVJSX0lOVkFMSUQJKDB4ODApCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKy8qIFJlYWQgYnVzIGVycm9yIHN0YXR1cyByZWdpc3RlciAoaW1wbGljaXRseSBjbGVhcmluZyBpdCkuICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgc3VuM19nZXRfYnVzZXJyKHZvaWQpCit7CisJdW5zaWduZWQgY2hhciBzZmMsIGM7CisKKwlHRVRfU0ZDIChzZmMpOworCVNFVF9TRkMgKEZDX0NPTlRST0wpOworCUdFVF9DT05UUk9MX0JZVEUgKEFDX0JVU19FUlJPUiwgYyk7CisJU0VUX1NGQyAoc2ZjKTsKKworCXJldHVybiBjOworfQorCisvKiBSZWFkIHNlZ21hcCBmcm9tIGhhcmR3YXJlIE1NVS4gKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzdW4zX2dldF9zZWdtYXAodW5zaWduZWQgbG9uZyBhZGRyKQoreworICAgICAgICByZWdpc3RlciB1bnNpZ25lZCBsb25nIGVudHJ5OworICAgICAgICB1bnNpZ25lZCBjaGFyIGMsIHNmYzsKKworICAgICAgICBHRVRfU0ZDIChzZmMpOworICAgICAgICBTRVRfU0ZDIChGQ19DT05UUk9MKTsKKyAgICAgICAgR0VUX0NPTlRST0xfQllURSAoQUNfU0VHTUFQIHwgKGFkZHIgJiBTVU4zX0NPTlRST0xfTUFTSyksIGMpOworICAgICAgICBTRVRfU0ZDIChzZmMpOworICAgICAgICBlbnRyeSA9IGM7CisKKyAgICAgICAgcmV0dXJuIGVudHJ5OworfQorCisvKiBXcml0ZSBzZWdtYXAgdG8gaGFyZHdhcmUgTU1VLiAqLworc3RhdGljIGlubGluZSB2b2lkIHN1bjNfcHV0X3NlZ21hcCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW50cnkpCit7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgc2ZjOworCisgICAgICAgIEdFVF9ERkMgKHNmYyk7CisgICAgICAgIFNFVF9ERkMgKEZDX0NPTlRST0wpOworICAgICAgICBTRVRfQ09OVFJPTF9CWVRFIChBQ19TRUdNQVAgfCAoYWRkciAmIFNVTjNfQ09OVFJPTF9NQVNLKSwgZW50cnkpOworCVNFVF9ERkMgKHNmYyk7CisKKyAgICAgICAgcmV0dXJuOworfQorCisvKiBSZWFkIFBURSBmcm9tIGhhcmR3YXJlIE1NVS4gKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzdW4zX2dldF9wdGUodW5zaWduZWQgbG9uZyBhZGRyKQoreworICAgICAgICByZWdpc3RlciB1bnNpZ25lZCBsb25nIGVudHJ5OworICAgICAgICB1bnNpZ25lZCBjaGFyIHNmYzsKKworICAgICAgICBHRVRfU0ZDIChzZmMpOworICAgICAgICBTRVRfU0ZDIChGQ19DT05UUk9MKTsKKyAgICAgICAgR0VUX0NPTlRST0xfV09SRCAoQUNfUEFHRU1BUCB8IChhZGRyICYgU1VOM19DT05UUk9MX01BU0spLCBlbnRyeSk7CisgICAgICAgIFNFVF9TRkMgKHNmYyk7CisKKyAgICAgICAgcmV0dXJuIGVudHJ5OworfQorCisvKiBXcml0ZSBQVEUgdG8gaGFyZHdhcmUgTU1VLiAqLworc3RhdGljIGlubGluZSB2b2lkIHN1bjNfcHV0X3B0ZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW50cnkpCit7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgc2ZjOworCisgICAgICAgIEdFVF9ERkMgKHNmYyk7CisgICAgICAgIFNFVF9ERkMgKEZDX0NPTlRST0wpOworICAgICAgICBTRVRfQ09OVFJPTF9XT1JEIChBQ19QQUdFTUFQIHwgKGFkZHIgJiBTVU4zX0NPTlRST0xfTUFTSyksIGVudHJ5KTsKKwlTRVRfREZDIChzZmMpOworCisgICAgICAgIHJldHVybjsKK30KKworLyogZ2V0IGN1cnJlbnQgY29udGV4dCAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIHN1bjNfZ2V0X2NvbnRleHQodm9pZCkKK3sKKwl1bnNpZ25lZCBjaGFyIHNmYywgYzsKKworCUdFVF9TRkMoc2ZjKTsKKwlTRVRfU0ZDKEZDX0NPTlRST0wpOworCUdFVF9DT05UUk9MX0JZVEUoQUNfQ09OVEVYVCwgYyk7CisJU0VUX1NGQyhzZmMpOworCisJcmV0dXJuIGM7Cit9CisKKy8qIHNldCBhbHRlcm5hdGUgY29udGV4dCAqLworc3RhdGljIGlubGluZSB2b2lkIHN1bjNfcHV0X2NvbnRleHQodW5zaWduZWQgY2hhciBjKQoreworCXVuc2lnbmVkIGNoYXIgZGZjOworCUdFVF9ERkMoZGZjKTsKKwlTRVRfREZDKEZDX0NPTlRST0wpOworCVNFVF9DT05UUk9MX0JZVEUoQUNfQ09OVEVYVCwgYyk7CisJU0VUX0RGQyhkZmMpOworCisJcmV0dXJuOworfQorCitleHRlcm4gdm9pZCAqc3VuM19pb3JlbWFwKHVuc2lnbmVkIGxvbmcgcGh5cywgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJICB1bnNpZ25lZCBsb25nIHR5cGUpOworCitleHRlcm4gaW50IHN1bjNfbWFwX3Rlc3QodW5zaWduZWQgbG9uZyBhZGRyLCBjaGFyICp2YWwpOworCisjZW5kaWYJLyogIV9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYJLyogIV9fU1VOM19NTVVfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL3N1bjN4LmggYi9pbmNsdWRlL2FzbS1tNjhrL3N1bjN4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU2OTFhMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvc3VuM3guaApAQCAtMCwwICsxLDI3IEBACisjaWZuZGVmIFNVTjNYX0gKKyNkZWZpbmUgU1VOM1hfSAorCisvKiBoYXJkd2FyZSBhZGRyZXNzZXMgKi8KKyNkZWZpbmUgU1VOM1hfSU9NTVUgICAgICAgMHg2MDAwMDAwMAorI2RlZmluZSBTVU4zWF9FTkFSRUcgICAgICAweDYxMDAwMDAwCisjZGVmaW5lIFNVTjNYX0lOVFJFRyAgICAgIDB4NjEwMDE0MDAKKyNkZWZpbmUgU1VOM1hfRElBR1JFRyAgICAgMHg2MTAwMTgwMAorI2RlZmluZSBTVU4zWF9aUzEgICAgICAgICAweDYyMDAwMDAwCisjZGVmaW5lIFNVTjNYX1pTMiAgICAgICAgIDB4NjIwMDIwMDAKKyNkZWZpbmUgU1VOM1hfTEFOQ0UgICAgICAgMHg2NTAwMjAwMAorI2RlZmluZSBTVU4zWF9FRVBST00gICAgICAweDY0MDAwMDAwCisjZGVmaW5lIFNVTjNYX0lEUFJPTSAgICAgIDB4NjQwMDA3ZDgKKyNkZWZpbmUgU1VOM1hfVklERU9fQkFTRSAgMHg1MDAwMDAwMAorI2RlZmluZSBTVU4zWF9WSURFT19QNElEICAweDUwMzAwMDAwCisjZGVmaW5lIFNVTjNYX0VTUF9CQVNFCSAgMHg2NjAwMDAwMAorI2RlZmluZSBTVU4zWF9FU1BfRE1BCSAgMHg2NjAwMTAwMAorI2RlZmluZSBTVU4zWF9GREMgICAgICAgICAweDZlMDAwMDAwCisjZGVmaW5lIFNVTjNYX0ZEQ19GQ1IgICAgIDB4NmUwMDA0MDAKKyNkZWZpbmUgU1VOM1hfRkRDX0ZWUiAgICAgMHg2ZTAwMDgwMAorCisvKiBzb21lIE5WUkFNIGFkZHJlc3NlcyAqLworI2RlZmluZSBTVU4zWF9FRVBST01fQ09OUwkoU1VOM1hfRUVQUk9NICsgMHgxZikKKyNkZWZpbmUgU1VOM1hfRUVQUk9NX1BPUlRBCShTVU4zWF9FRVBST00gKyAweDU4KQorI2RlZmluZSBTVU4zWF9FRVBST01fUE9SVEIJKFNVTjNYX0VFUFJPTSArIDB4NjApCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9zdW4zeGZsb3AuaCBiL2luY2x1ZGUvYXNtLW02OGsvc3VuM3hmbG9wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVkM2I3OAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvc3VuM3hmbG9wLmgKQEAgLTAsMCArMSwyNjUgQEAKKy8qIHN1bjN4ZmxvcC5oOiBTdW4zLzgwIHNwZWNpZmljIHBhcnRzIG9mIHRoZSBmbG9wcHkgZHJpdmVyLgorICoKKyAqIERlcml2ZWQgcGFydGlhbGx5IGZyb20gYXNtLXNwYXJjL2Zsb3BweS5oLCB3aGljaCBpczoKKyAqICAgICBDb3B5cmlnaHQgKEMpIDE5OTUgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQorICoKKyAqIFN1bjN4IHZlcnNpb24gMi80LzIwMDAgU2FtIENyZWFzZXkgKHNhbW15QHNhbW15Lm5ldCkKKyAqLworCisjaWZuZGVmIF9fQVNNX1NVTjNYX0ZMT1BQWV9ICisjZGVmaW5lIF9fQVNNX1NVTjNYX0ZMT1BQWV9ICisKKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vc3VuM3guaD4KKworLyogZGVmYXVsdCBpbnRlcnJ1cHQgdmVjdG9yICovCisjZGVmaW5lIFNVTjNYX0ZEQ19JUlEgMHg0MAorCisvKiBzb21lIGNvbnN0YW50cyAqLworI2RlZmluZSBGQ1JfVEMgMHgxCisjZGVmaW5lIEZDUl9FSkVDVCAweDIKKyNkZWZpbmUgRkNSX01UUk9OIDB4NAorI2RlZmluZSBGQ1JfRFNFTDEgMHg4CisjZGVmaW5lIEZDUl9EU0VMMCAweDEwCisKKy8qIFdlIGRvbid0IG5lZWQgbm8gc3RpbmtpbicgSS9PIHBvcnQgYWxsb2NhdGlvbiBjcmFwLiAqLworI3VuZGVmIHJlbGVhc2VfcmVnaW9uCisjdW5kZWYgY2hlY2tfcmVnaW9uCisjdW5kZWYgcmVxdWVzdF9yZWdpb24KKyNkZWZpbmUgcmVsZWFzZV9yZWdpb24oWCwgWSkJZG8geyB9IHdoaWxlKDApCisjZGVmaW5lIGNoZWNrX3JlZ2lvbihYLCBZKQkoMCkKKyNkZWZpbmUgcmVxdWVzdF9yZWdpb24oWCwgWSwgWikJKDEpCisKK3N0cnVjdCBzdW4zeGZsb3BfcHJpdmF0ZSB7CisJdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqc3RhdHVzX3I7CisJdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqZGF0YV9yOworCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKmZjcl9yOworCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKmZ2cl9yOworCXVuc2lnbmVkIGNoYXIgZmNyOworfSBzdW4zeF9mZGM7CisKKy8qIFN1cGVyIHBhcmFub2lkLi4uICovCisjdW5kZWYgSEFWRV9ESVNBQkxFX0hMVAorCisvKiBSb3V0aW5lcyB1bmlxdWUgdG8gZWFjaCBjb250cm9sbGVyIHR5cGUgb24gYSBTdW4uICovCitzdGF0aWMgdW5zaWduZWQgY2hhciBzdW4zeF84MjA3Ml9mZF9pbmIoaW50IHBvcnQpCit7CisJc3RhdGljIGludCBvbmNlID0gMDsKKy8vCXVkZWxheSg1KTsKKwlzd2l0Y2gocG9ydCAmIDcpIHsKKwlkZWZhdWx0OgorCQlwcmludGsoImZsb3BweTogQXNrZWQgdG8gcmVhZCB1bmtub3duIHBvcnQgJWRcbiIsIHBvcnQpOworCQlwYW5pYygiZmxvcHB5OiBQb3J0IGJvbGl4ZWQuIik7CisJY2FzZSA0OiAvKiBGRF9TVEFUVVMgKi8KKwkJcmV0dXJuICgqc3VuM3hfZmRjLnN0YXR1c19yKSAmIH5TVEFUVVNfRE1BOworCWNhc2UgNTogLyogRkRfREFUQSAqLworCQlyZXR1cm4gKCpzdW4zeF9mZGMuZGF0YV9yKTsKKwljYXNlIDc6IC8qIEZEX0RJUiAqLworCQkvKiB1Z2x5IGhhY2ssIEkgY2FuJ3QgZmluZCBhIHdheSB0byBhY3R1YWxseSBkZXRlY3QgdGhlIGRpc2sgKi8KKwkJaWYoIW9uY2UpIHsKKwkJCW9uY2UgPSAxOworCQkJcmV0dXJuIDB4ODA7CisJCX0KKwkJcmV0dXJuIDA7CisJfTsKKwlwYW5pYygic3VuXzgyMDcyX2ZkX2luYjogSG93IGRpZCBJIGdldCBoZXJlPyIpOworfQorCitzdGF0aWMgdm9pZCBzdW4zeF84MjA3Ml9mZF9vdXRiKHVuc2lnbmVkIGNoYXIgdmFsdWUsIGludCBwb3J0KQoreworLy8JdWRlbGF5KDUpOworCXN3aXRjaChwb3J0ICYgNykgeworCWRlZmF1bHQ6CisJCXByaW50aygiZmxvcHB5OiBBc2tlZCB0byB3cml0ZSB0byB1bmtub3duIHBvcnQgJWRcbiIsIHBvcnQpOworCQlwYW5pYygiZmxvcHB5OiBQb3J0IGJvbGl4ZWQuIik7CisJY2FzZSAyOiAvKiBGRF9ET1IgKi8KKwkJLyogT2ggZ2Vlc2UsIDgyMDcyIG9uIHRoZSBTdW4gaGFzIG5vIERPUiByZWdpc3RlciwKKwkJICogc28gd2UgbWFrZSBkbyB3aXRoIHRhdW50aW5nIHRoZSBGQ1IuCisJCSAqCisJCSAqIEFTU1VNUFRJT05TOiAgVGhlcmUgd2lsbCBvbmx5IGV2ZXIgYmUgb25lIGZsb3BweQorCQkgKiAgICAgICAgICAgICAgIGRyaXZlIGF0dGFjaGVkIHRvIGEgU3VuIGNvbnRyb2xsZXIKKwkJICogICAgICAgICAgICAgICBhbmQgaXQgd2lsbCBiZSBhdCBkcml2ZSB6ZXJvLgorCQkgKi8KKworCXsKKwkJdW5zaWduZWQgY2hhciBmY3IgPSBzdW4zeF9mZGMuZmNyOworCisJCWlmKHZhbHVlICYgMHgxMCkgeworCQkJZmNyIHw9IChGQ1JfRFNFTDAgfCBGQ1JfTVRST04pOworCQl9IGVsc2UKKwkJCWZjciAmPSB+KEZDUl9EU0VMMCB8IEZDUl9NVFJPTik7CisKKworCQlpZihmY3IgIT0gc3VuM3hfZmRjLmZjcikgeworCQkJKihzdW4zeF9mZGMuZmNyX3IpID0gZmNyOworCQkJc3VuM3hfZmRjLmZjciA9IGZjcjsKKwkJfQorCX0KKwkJYnJlYWs7CisJY2FzZSA1OiAvKiBGRF9EQVRBICovCisJCSooc3VuM3hfZmRjLmRhdGFfcikgPSB2YWx1ZTsKKwkJYnJlYWs7CisJY2FzZSA3OiAvKiBGRF9EQ1IgKi8KKwkJKihzdW4zeF9mZGMuc3RhdHVzX3IpID0gdmFsdWU7CisJCWJyZWFrOworCWNhc2UgNDogLyogRkRfU1RBVFVTICovCisJCSooc3VuM3hfZmRjLnN0YXR1c19yKSA9IHZhbHVlOworCQlicmVhazsKKwl9OworCXJldHVybjsKK30KKworCithc21saW5rYWdlIGlycXJldHVybl90IHN1bjN4ZmxvcF9oYXJkaW50KGludCBpcnEsIHZvaWQgKmRldl9pZCwKKwkJCQkJIHN0cnVjdCBwdF9yZWdzICogcmVncykKK3sKKwlyZWdpc3RlciB1bnNpZ25lZCBjaGFyIHN0OworCisjdW5kZWYgVFJBQ0VfRkxQWV9JTlQKKyNkZWZpbmUgTk9fRkxPUFBZX0FTU0VNQkxFUgorCisjaWZkZWYgVFJBQ0VfRkxQWV9JTlQKKwlzdGF0aWMgaW50IGNhbGxzPTA7CisJc3RhdGljIGludCBieXRlcz0wOworCXN0YXRpYyBpbnQgZG1hX3dhaXQ9MDsKKyNlbmRpZgorCWlmKCFkb2luZ19wZG1hKSB7CisJCWZsb3BweV9pbnRlcnJ1cHQoaXJxLCBkZXZfaWQsIHJlZ3MpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCisvLwlwcmludGsoImRvaW5nIHBkbWFcbiIpOy8vIHN0ICV4XG4iLCBzdW5fZmRjLT5zdGF0dXNfODIwNzIpOworCisjaWZkZWYgVFJBQ0VfRkxQWV9JTlQKKwlpZighY2FsbHMpCisJCWJ5dGVzID0gdmlydHVhbF9kbWFfY291bnQ7CisjZW5kaWYKKworCXsKKwkJcmVnaXN0ZXIgaW50IGxjb3VudDsKKwkJcmVnaXN0ZXIgY2hhciAqbHB0cjsKKworCQlmb3IobGNvdW50PXZpcnR1YWxfZG1hX2NvdW50LCBscHRyPXZpcnR1YWxfZG1hX2FkZHI7CisJCSAgICBsY291bnQ7IGxjb3VudC0tLCBscHRyKyspIHsKKy8qCQkJc3Q9ZmRfaW5iKHZpcnR1YWxfZG1hX3BvcnQrNCkgJiAweDgwIDsgICovCisJCQlzdCA9ICooc3VuM3hfZmRjLnN0YXR1c19yKTsKKy8qCQkJaWYoc3QgIT0gMHhhMCkgICAgICAgICAgICAgICAgICAqLworLyoJCQkJYnJlYWs7ICAgICAgICAgICAgICAgICAgKi8KKworCQkJaWYoKHN0ICYgMHg4MCkgPT0gMCkgeworCQkJCXZpcnR1YWxfZG1hX2NvdW50ID0gbGNvdW50OworCQkJCXZpcnR1YWxfZG1hX2FkZHIgPSBscHRyOworCQkJCXJldHVybiBJUlFfSEFORExFRDsKKwkJCX0KKworCQkJaWYoKHN0ICYgMHgyMCkgPT0gMCkKKwkJCQlicmVhazsKKworCQkJaWYodmlydHVhbF9kbWFfbW9kZSkKKy8qCQkJCWZkX291dGIoKmxwdHIsIHZpcnR1YWxfZG1hX3BvcnQrNSk7ICovCisJCQkJKihzdW4zeF9mZGMuZGF0YV9yKSA9ICpscHRyOworCQkJZWxzZQorLyoJCQkJKmxwdHIgPSBmZF9pbmIodmlydHVhbF9kbWFfcG9ydCs1KTsgKi8KKwkJCQkqbHB0ciA9ICooc3VuM3hfZmRjLmRhdGFfcik7CisJCX0KKworCQl2aXJ0dWFsX2RtYV9jb3VudCA9IGxjb3VudDsKKwkJdmlydHVhbF9kbWFfYWRkciA9IGxwdHI7CisvKgkJc3QgPSBmZF9pbmIodmlydHVhbF9kbWFfcG9ydCs0KTsgICAqLworCQlzdCA9ICooc3VuM3hfZmRjLnN0YXR1c19yKTsKKwl9CisKKyNpZmRlZiBUUkFDRV9GTFBZX0lOVAorCWNhbGxzKys7CisjZW5kaWYKKy8vCXByaW50aygic3Q9JTAyeFxuIiwgc3QpOworCWlmKHN0ID09IDB4MjApCisJCXJldHVybiBJUlFfSEFORExFRDsKKwlpZighKHN0ICYgMHgyMCkpIHsKKwkJdmlydHVhbF9kbWFfcmVzaWR1ZSArPSB2aXJ0dWFsX2RtYV9jb3VudDsKKwkJdmlydHVhbF9kbWFfY291bnQ9MDsKKwkJZG9pbmdfcGRtYSA9IDA7CisKKyNpZmRlZiBUUkFDRV9GTFBZX0lOVAorCQlwcmludGsoImNvdW50PSV4LCByZXNpZHVlPSV4IGNhbGxzPSVkIGJ5dGVzPSV4IGRtYV93YWl0PSVkXG4iLAorCQkgICAgICAgdmlydHVhbF9kbWFfY291bnQsIHZpcnR1YWxfZG1hX3Jlc2lkdWUsIGNhbGxzLCBieXRlcywKKwkJICAgICAgIGRtYV93YWl0KTsKKwkJY2FsbHMgPSAwOworCQlkbWFfd2FpdD0wOworI2VuZGlmCisKKwkJZmxvcHB5X2ludGVycnVwdChpcnEsIGRldl9pZCwgcmVncyk7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisKKworI2lmZGVmIFRSQUNFX0ZMUFlfSU5UCisJaWYoIXZpcnR1YWxfZG1hX2NvdW50KQorCQlkbWFfd2FpdCsrOworI2VuZGlmCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IHN1bjN4ZmxvcF9yZXF1ZXN0X2lycSh2b2lkKQoreworCXN0YXRpYyBpbnQgb25jZSA9IDA7CisJaW50IGVycm9yOworCisJaWYoIW9uY2UpIHsKKwkJb25jZSA9IDE7CisJCWVycm9yID0gcmVxdWVzdF9pcnEoRkxPUFBZX0lSUSwgc3VuM3hmbG9wX2hhcmRpbnQsIFNBX0lOVEVSUlVQVCwgImZsb3BweSIsIDApOworCQlyZXR1cm4gKChlcnJvciA9PSAwKSA/IDAgOiAtMSk7CisJfSBlbHNlIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgZmxvcHB5X3NldF9mbGFncyhpbnQgKmludHMsaW50IHBhcmFtLCBpbnQgcGFyYW0yKTsKKworc3RhdGljIGludCBzdW4zeGZsb3BfaW5pdCh2b2lkKQoreworCWlmKEZMT1BQWV9JUlEgPCAweDQwKQorCQlGTE9QUFlfSVJRID0gU1VOM1hfRkRDX0lSUTsKKworCXN1bjN4X2ZkYy5zdGF0dXNfciA9ICh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopU1VOM1hfRkRDOworCXN1bjN4X2ZkYy5kYXRhX3IgID0gKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoU1VOM1hfRkRDKzEpOworCXN1bjN4X2ZkYy5mY3JfciA9ICh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopU1VOM1hfRkRDX0ZDUjsKKwlzdW4zeF9mZGMuZnZyX3IgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKVNVTjNYX0ZEQ19GVlI7CisJc3VuM3hfZmRjLmZjciA9IDA7CisKKwkvKiBMYXN0IG1pbnV0ZSBzYW5pdHkgY2hlY2suLi4gKi8KKwlpZigqc3VuM3hfZmRjLnN0YXR1c19yID09IDB4ZmYpIHsKKwkJcmV0dXJuIC0xOworCX0KKworCSpzdW4zeF9mZGMuZnZyX3IgPSBGTE9QUFlfSVJROworCisJKnN1bjN4X2ZkYy5mY3JfciA9IEZDUl9UQzsKKwl1ZGVsYXkoMTApOworCSpzdW4zeF9mZGMuZmNyX3IgPSAwOworCisJLyogU3VjY2Vzcy4uLiAqLworCWZsb3BweV9zZXRfZmxhZ3MoMCwgMSwgRkRfQlJPS0VOX0RDTCk7IC8vIEkgZG9uJ3Qga25vdyBob3cgdG8gZGV0ZWN0IHRoaXMuCisJYWxsb3dlZF9kcml2ZV9tYXNrID0gMHgwMTsKKwlyZXR1cm4gKGludCkgU1VOM1hfRkRDOworfQorCisvKiBJJ20gbm90IHByZWNpc2VseSBzdXJlIHRoaXMgZWplY3Qgcm91dGluZSB3b3JrcyAqLworc3RhdGljIGludCBzdW4zeF9lamVjdCh2b2lkKQoreworCWlmKE1BQ0hfSVNfU1VOM1gpIHsKKworCQlzdW4zeF9mZGMuZmNyIHw9IChGQ1JfRFNFTDAgfCBGQ1JfRUpFQ1QpOworCQkqKHN1bjN4X2ZkYy5mY3JfcikgPSBzdW4zeF9mZGMuZmNyOworCQl1ZGVsYXkoMTApOworCQlzdW4zeF9mZGMuZmNyICY9IH4oRkNSX0RTRUwwIHwgRkNSX0VKRUNUKTsKKwkJKihzdW4zeF9mZGMuZmNyX3IpID0gc3VuM3hfZmRjLmZjcjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBmZF9lamVjdChkcml2ZSkgc3VuM3hfZWplY3QoKQorCisjZW5kaWYgLyogIShfX0FTTV9TVU4zWF9GTE9QUFlfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvc3VuM3hwcm9tLmggYi9pbmNsdWRlL2FzbS1tNjhrL3N1bjN4cHJvbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3MzVlZmMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL3N1bjN4cHJvbS5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qIFVzZWZ1bCBQUk9NIGxvY2F0aW9ucyAqLworCisjaWZuZGVmIFNVTjNYX1BST01fSAorI2RlZmluZSBTVU4zWF9QUk9NX0gKKworZXh0ZXJuIHZvaWQgKCpzdW4zeF9wdXRjaGFyKShpbnQpOworZXh0ZXJuIGludCAoKnN1bjN4X2dldGNoYXIpKHZvaWQpOworZXh0ZXJuIGludCAoKnN1bjN4X21heWdldCkodm9pZCk7CitleHRlcm4gaW50ICgqc3VuM3hfbWF5cHV0KShpbnQpOworCit2b2lkIHN1bjN4X3JlYm9vdCh2b2lkKTsKK3ZvaWQgc3VuM3hfYWJvcnQodm9pZCk7Cit2b2lkIHN1bjN4X3Byb21faW5pdCh2b2lkKTsKK3Vuc2lnbmVkIGxvbmcgc3VuM3hfcHJvbV9wdG92KHVuc2lnbmVkIGxvbmcgcGEsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CisKKy8qIGludGVyZXN0aW5nIGhhcmR3YXJlIGxvY2F0aW9ucyAqLworI2RlZmluZSBTVU4zWF9JT01NVSAgICAgICAweDYwMDAwMDAwCisjZGVmaW5lIFNVTjNYX0VOQVJFRyAgICAgIDB4NjEwMDAwMDAKKyNkZWZpbmUgU1VOM1hfSU5UUkVHICAgICAgMHg2MTAwMTQwMAorI2RlZmluZSBTVU4zWF9ESUFHUkVHICAgICAweDYxMDAxODAwCisjZGVmaW5lIFNVTjNYX1pTMSAgICAgICAgIDB4NjIwMDAwMDAKKyNkZWZpbmUgU1VOM1hfWlMyICAgICAgICAgMHg2MjAwMjAwMAorI2RlZmluZSBTVU4zWF9MQU5DRSAgICAgICAweDY1MDAyMDAwCisjZGVmaW5lIFNVTjNYX0VFUFJPTSAgICAgIDB4NjQwMDAwMDAKKyNkZWZpbmUgU1VOM1hfSURQUk9NICAgICAgMHg2NDAwMDdkOAorI2RlZmluZSBTVU4zWF9WSURFT19CQVNFICAweDUwNDAwMDAwCisjZGVmaW5lIFNVTjNYX1ZJREVPX1JFR1MgIDB4NTAzMDAwMDAKKworLyogdmVjdG9yIHRhYmxlICovCisjZGVmaW5lIFNVTjNYX1BST01fQkFTRSAgIDB4ZmVmZTAwMDAKKyNkZWZpbmUgU1VOM1hfUF9HRVRDSEFSICAgKFNVTjNYX1BST01fQkFTRSArIDIwKQorI2RlZmluZSBTVU4zWF9QX1BVVENIQVIgICAoU1VOM1hfUFJPTV9CQVNFICsgMjQpCisjZGVmaW5lIFNVTjNYX1BfTUFZR0VUICAgIChTVU4zWF9QUk9NX0JBU0UgKyAyOCkKKyNkZWZpbmUgU1VOM1hfUF9NQVlQVVQgICAgKFNVTjNYX1BST01fQkFTRSArIDMyKQorI2RlZmluZSBTVU4zWF9QX1JFQk9PVCAgICAoU1VOM1hfUFJPTV9CQVNFICsgOTYpCisjZGVmaW5lIFNVTjNYX1BfU0VUTEVEUyAgIChTVU4zWF9QUk9NX0JBU0UgKyAxNDQpCisjZGVmaW5lIFNVTjNYX1BfQUJPUlQgICAgIChTVU4zWF9QUk9NX0JBU0UgKyAxNTIpCisKKy8qIG1hcHBlZCBhcmVhICovCisjZGVmaW5lIFNVTjNYX01BUF9TVEFSVCAgIDB4ZmVlMDAwMDAKKyNkZWZpbmUgU1VOM1hfTUFQX0VORCAgICAgMHhmZjAwMDAwMAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvc3VzcGVuZC5oIGIvaW5jbHVkZS9hc20tbTY4ay9zdXNwZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdiM2RkYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvc3VzcGVuZC5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfTTY4S19TVVNQRU5EX0gKKyNkZWZpbmUgX002OEtfU1VTUEVORF9ICisKKy8qIER1bW15IGluY2x1ZGUuICovCisKKyNlbmRpZiAgLyogX002OEtfU1VTUEVORF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL3N3aW1faW9wLmggYi9pbmNsdWRlL2FzbS1tNjhrL3N3aW1faW9wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI5YjY3OAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvc3dpbV9pb3AuaApAQCAtMCwwICsxLDIyMSBAQAorLyoKKyAqIFNXSU0gYWNjZXNzIHRocm91Z2ggdGhlIElPUAorICogV3JpdHRlbiBieSBKb3NodWEgTS4gVGhvbXBzb24KKyAqLworCisvKiBJT1AgbnVtYmVyIGFuZCBjaGFubmVsIG51bWJlciBmb3IgdGhlIFNXSU0gKi8KKworI2RlZmluZSBTV0lNX0lPUAlJT1BfTlVNX0lTTQorI2RlZmluZSBTV0lNX0NIQU4JMQorCisvKiBDb21tYW5kIGNvZGU6ICovCisKKyNkZWZpbmUgQ01EX0lOSVQJCTB4MDEJLyogSW5pdGlhbGl6ZSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENNRF9TSFVURE9XTgkJMHgwMgkvKiBTaHV0ZG93biAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ01EX1NUQVJUX1BPTEwJCTB4MDMJLyogU3RhcnQgaW5zZXJ0L2VqZWN0IHBvbGxpbmcgICovCisjZGVmaW5lIENNRF9TVE9QX1BPTEwJCTB4MDQJLyogU3RvcCBpbnNlcnQvZWplY3QgcG9sbGluZyAgICovCisjZGVmaW5lIENNRF9TRVRIRlNUQUcJCTB4MDUJLyogU2V0IEhGUyB0YWcgYnVmZmVyIGFkZHJlc3MgICovCisjZGVmaW5lIENNRF9TVEFUVVMJCTB4MDYJLyogU3RhdHVzICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENNRF9FSkVDVAkJMHgwNwkvKiBFamVjdCAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ01EX0ZPUk1BVAkJMHgwOAkvKiBGb3JtYXQgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ01EX0ZPUk1BVF9WRVJJRlkJMHgwOQkvKiBGb3JtYXQgYW5kIFZlcmlmeSAgICAgICAgICAgKi8KKyNkZWZpbmUgQ01EX1dSSVRFCQkweDBBCS8qIFdyaXRlICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDTURfUkVBRAkJMHgwQgkvKiBSZWFkICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ01EX1JFQURfVkVSSUZZCQkweDBDCS8qIFJlYWQgYW5kIFZlcmlmeSAgICAgICAgICAgICAqLworI2RlZmluZSBDTURfQ0FDSEVfQ1RSTAkJMHgwRAkvKiBDYWNoZSBjb250cm9sICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ01EX1RBR0JVRkZfQ1RSTAkweDBFCS8qIFRhZyBidWZmZXIgY29udHJvbCAgICAgICAgICAqLworI2RlZmluZSBDTURfR0VUX0lDT04JCTB4MEYJLyogR2V0IEljb24gICAgICAgICAgICAgICAgICAgICovCisKKy8qIERyaXZlIHR5cGVzOiAqLworCisvKiBub3RlOiBhcHBsZSBzZXogRFJWX0ZESEQgaXMgNCwgYnV0IEkgZ2V0IGJhY2sgYSB0eXBlICovCisvKiAgICAgICBvZiA1IHdoZW4gSSBkbyBhIGRyaXZlIHN0YXR1cyBjaGVjayBvbiBteSBGREhEICovCisKKyNkZWZpbmUJRFJWX05PTkUJMAkvKiBObyBkcml2ZSAgICAgICAgICAgICAqLworI2RlZmluZQlEUlZfVU5LTk9XTgkxCS8qIFVuc3BlY2lmaWVkIGRyaXZlICAgICovCisjZGVmaW5lCURSVl80MDBLCTIJLyogNDAwSyAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJRFJWXzgwMEsJMwkvKiA0MDBLLzgwMEsgICAgICAgICAgICAqLworI2RlZmluZQlEUlZfRkRIRAk1CS8qIDQwMEsvODAwSy83MjBLLzE0NDBLICovCisjZGVmaW5lCURSVl9IRDIwCTcJLyogQXBwbGUgSEQyMCAgICAgICAgICAgKi8KKworLyogRm9ybWF0IHR5cGVzOiAqLworCisjZGVmaW5lCUZNVF9IRDIwCTB4MDAwMQkvKiAgQXBwbGUgSEQyMCAqLworI2RlZmluZQlGTVRfNDAwSwkweDAwMDIJLyogIDQwMEsgKEdDUikgKi8KKyNkZWZpbmUJRk1UXzgwMEsJMHgwMDA0CS8qICA4MDBLIChHQ1IpICovCisjZGVmaW5lCUZNVF83MjBLCTB4MDAwOAkvKiAgNzIwSyAoTUZNKSAqLworI2RlZmluZQlGTVRfMTQ0MEsJMHgwMDEwCS8qIDEuNDRNIChNRk0pICovCisKKyNkZWZpbmUJRk1EX0tJTkRfNDAwSwkxCisjZGVmaW5lCUZNRF9LSU5EXzgwMEsJMgorI2RlZmluZQlGTURfS0lORF83MjBLCTMKKyNkZWZpbmUJRk1EX0tJTkRfMTQ0MEsJMQorCisvKiBJY29uIEZsYWdzOiAqLworCisjZGVmaW5lCUlDT05fTUVESUEJMHgwMQkvKiBIYXZlIElPUCBzdXBwbHkgbWVkaWEgaWNvbiAqLworI2RlZmluZQlJQ09OX0RSSVZFCTB4MDEJLyogSGF2ZSBJT1Agc3VwcGx5IGRyaXZlIGljb24gKi8KKworLyogRXJyb3IgY29kZXM6ICovCisKKyNkZWZpbmUJZ2NyT25NRk1FcnIJLTQwMAkvKiBHQ1IgKDQwMC84MDBLKSBvbiBIRCBtZWRpYSAqLworI2RlZmluZQl2ZXJFcnIJCS04NAkvKiB2ZXJpZnkgZmFpbGVkICovCisjZGVmaW5lCWZtdDJFcnIJCS04MwkvKiBjYW4ndCBnZXQgZW5vdWdoIHN5bmMgZHVyaW5nIGZvcm1hdCAqLworI2RlZmluZQlmbXQxRXJyCQktODIJLyogY2FuJ3QgZmluZCBzZWN0b3IgMCBhZnRlciB0cmFjayBmb3JtYXQgKi8KKyNkZWZpbmUJc2VjdE5GRXJyCS04MQkvKiBjYW4ndCBmaW5kIHNlY3RvciAqLworI2RlZmluZQlzZWVrRXJyCQktODAJLyogZHJpdmUgZXJyb3IgZHVyaW5nIHNlZWsgKi8KKyNkZWZpbmUJc3BkQWRqRXJyCS03OQkvKiBjYW4ndCBzZXQgZHJpdmUgc3BlZWQgKi8KKyNkZWZpbmUJdHdvU2lkZUVycgktNzgJLyogZHJpdmUgaXMgc2luZ2xlLXNpZGVkICovCisjZGVmaW5lCWluaXRJV01FcnIJLTc3CS8qIGVycm9yIGR1cmluZyBpbml0aWFsaXphdGlvbiAqLworI2RlZmluZQl0azBiYWRFcnIJLTc2CS8qIHRyYWNrIHplcm8gaXMgYmFkICovCisjZGVmaW5lCWNhbnRTdGVwRXJyCS03NQkvKiBkcml2ZSBlcnJvciBkdXJpbmcgc3RlcCAqLworI2RlZmluZQl3clVuZGVycnVuCS03NAkvKiB3cml0ZSB1bmRlcnJ1biBvY2N1cnJlZCAqLworI2RlZmluZQliYWREQnRTbHAJLTczCS8qIGJhZCBkYXRhIGJpdHNsaXAgbWFya3MgKi8KKyNkZWZpbmUJYmFkRENrc3VtCS03MgkvKiBiYWQgZGF0YSBjaGVja3N1bSAqLworI2RlZmluZQlub0R0YU1rRXJyCS03MQkvKiBjYW4ndCBmaW5kIGRhdGEgbWFyayAqLworI2RlZmluZQliYWRCdFNscEVycgktNzAJLyogYmFkIGFkZHJlc3MgYml0c2xpcCBtYXJrcyAqLworI2RlZmluZQliYWRDa3NtRXJyCS02OQkvKiBiYWQgYWRkcmVzcy1tYXJrIGNoZWNrc3VtICovCisjZGVmaW5lCWRhdGFWZXJFcnIJLTY4CS8qIHJlYWQtdmVyaWZ5IGZhaWxlZCAqLworI2RlZmluZQlub0Fkck1rRXJyCS02NwkvKiBjYW4ndCBmaW5kIGFuIGFkZHJlc3MgbWFyayAqLworI2RlZmluZQlub055YkVycgktNjYJLyogbm8gbnliYmxlcz8gZGlzayBpcyBwcm9iYWJseSBkZWdhdXNzZWQgKi8KKyNkZWZpbmUJb2ZmTGluRXJyCS02NQkvKiBubyBkaXNrIGluIGRyaXZlICovCisjZGVmaW5lCW5vRHJpdmVFcnIJLTY0CS8qIGRyaXZlIGlzbid0IGNvbm5lY3RlZCAqLworI2RlZmluZQluc0RydkVycgktNTYJLyogbm8gc3VjaCBkcml2ZSAqLworI2RlZmluZQlwYXJhbUVycgktNTAJLyogYmFkIHBvc2l0aW9uaW5nIGluZm9ybWF0aW9uICovCisjZGVmaW5lCXdQckVycgkJLTQ0CS8qIHdyaXRlIHByb3RlY3RlZCAqLworI2RlZmluZQlvcGVuRXJyCQktMjMJLyogYWxyZWFkeSBpbml0aWFsaXplZCAqLworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCitzdHJ1Y3Qgc3dpbV9kcnZzdGF0dXMgeworCV9fdTE2CWN1cnJfdHJhY2s7CS8qIEN1cnJlbnQgdHJhY2sgbnVtYmVyICAgICAgICAgICAgICAgICAgICovCisJX191OAl3cml0ZV9wcm90OwkvKiAweDgwIGlmIGRpc2sgaXMgd3JpdGUgcHJvdGVjdGVkICAgICAgICAqLworCV9fdTgJZGlza19pbl9kcml2ZTsJLyogMHgwMSBvciAweDAyIGlmIGEgZGlzayBpcyBpbiB0aGUgZHJpdmUgKi8KKwlfX3U4CWluc3RhbGxlZDsJLyogMHgwMSBpZiBkcml2ZSBpbnN0YWxsZWQsIDB4RkYgaWYgbm90ICAgKi8KKwlfX3U4CW51bV9zaWRlczsJLyogMHg4MCBpZiB0d28tc2lkZWQgZm9ybWF0IHN1cHBvcnRlZCAgICAgKi8KKwlfX3U4CXR3b19zaWRlZDsJLyogMHhmZiBpZiB0d28tc2lkZWQgZm9ybWF0IGRpc2tldHRlICAgICAgKi8KKwlfX3U4CW5ld19pbnRlcmZhY2U7CS8qIDB4MDAgaWYgb2xkIDQwMEsgZHJpdmUsIDB4RkYgaWYgbmV3ZXIgICovCisJX191MTYJZXJyb3JzOwkJLyogRGlzayBlcnJvciBjb3VudCAgICAgICAgICAgICAgICAgICAgICAgKi8KKwlzdHJ1Y3QgewkJLyogMzIgYml0cyAqLworCQlfX3UxNglyZXNlcnZlZDsKKwkJX191MTYJOjQ7CisJCV9fdTE2CWV4dGVybmFsOjE7CS8qIERyaXZlIGlzIGV4dGVybmFsICAgICAgICAqLworCQlfX3UxNglzY3NpOjE7CQkvKiBEcml2ZSBpcyBhIFNDU0kgZHJpdmUgICAgKi8KKwkJX191MTYJZml4ZWQ6MTsJLyogRHJpdmUgaGFzIGZpeGVkIG1lZGlhICAgICovCisJCV9fdTE2CXNlY29uZGFyeToxOwkvKiBEcml2ZSBpcyBzZWNvbmRhcnkgZHJpdmUgKi8KKwkJX191OAl0eXBlOwkJLyogRHJpdmUgdHlwZSAgICAgICAgICAgICAgICovCisJfSBpbmZvOworCV9fdTgJbWZtX2RyaXZlOwkvKiAweEZGIGlmIHRoaXMgaXMgYW4gRkRIRCBkcml2ZSAgICAqLworCV9fdTgJbWZtX2Rpc2s7CS8qIDB4RkYgaWYgNzIwSy8xNDQwSyAoTUZNKSBkaXNrICAgICovCisJX191OAltZm1fZm9ybWF0OwkvKiAweDAwIGlmIDcyMEssIDB4RkYgaWYgMTQ0MEsgICAgICAqLworCV9fdTgJY3Rscl90eXBlOwkvKiAweDAwIGlmIElXTSwgMHhGRiBpZiBTV0lNICAgICAgICAqLworCV9fdTE2CWN1cnJfZm9ybWF0OwkvKiBDdXJyZW50IGZvcm1hdCB0eXBlICAgICAgICAgICAgICAqLworCV9fdTE2CWFsbG93ZWRfZm10OwkvKiBBbGxvd2VkIGZvcm1hdCB0eXBlcyAgICAgICAgICAgICAqLworCV9fdTMyCW51bV9ibG9ja3M7CS8qIE51bWJlciBvZiBibG9ja3Mgb24gZGlzayAgICAgICAgICovCisJX191OAlpY29uX2ZsYWdzOwkvKiBJY29uIGZsYWdzICAgICAgICAgICAgICAgICAgICAgICAqLworCV9fdTgJdW51c3VlZDsKK307CisKKy8qIENvbW1hbmRzIGlzc3VlZCBmcm9tIHRoZSBob3N0IHRvIHRoZSBJT1A6ICovCisKK3N0cnVjdCBzd2ltY21kX2luaXQgeworCV9fdTgJY29kZTsJCS8qIENNRF9JTklUICovCisJX191OAl1bnVzdWVkOworCV9fdTE2CWVycm9yOworCV9fdTgJZHJpdmVzWzI4XTsJLyogZHJpdmUgdHlwZSBsaXN0ICovCit9OworCitzdHJ1Y3Qgc3dpbWNtZF9zdGFydHBvbGwgeworCV9fdTgJY29kZTsJCS8qIENNRF9TVEFSVF9QT0xMICovCisJX191OAl1bnVzdWVkOworCV9fdTE2CWVycm9yOworfTsKKworc3RydWN0IHN3aW1jbWRfc2V0aGZzdGFnIHsKKwlfX3U4CWNvZGU7CQkvKiBDTURfU0VUSEZTVEFHICovCisJX191OAl1bnVzdWVkOworCV9fdTE2CWVycm9yOworCWNhZGRyX3QJdGFnYnVmOwkJLyogSEZTIHRhZyBidWZmZXIgYWRkcmVzcyAqLworfTsKKworc3RydWN0IHN3aW1jbWRfc3RhdHVzIHsKKwlfX3U4CWNvZGU7CQkvKiBDTURfU1RBVFVTICovCisJX191OAlkcml2ZV9udW07CisJX191MTYJZXJyb3I7CisJc3RydWN0IHN3aW1fZHJ2c3RhdHVzIHN0YXR1czsKK307CisKK3N0cnVjdCBzd2ltY21kX2VqZWN0IHsKKwlfX3U4CWNvZGU7CQkvKiBDTURfRUpFQ1QgKi8KKwlfX3U4CWRyaXZlX251bTsKKwlfX3UxNgllcnJvcjsKKwlzdHJ1Y3Qgc3dpbV9kcnZzdGF0dXMgc3RhdHVzOworfTsKKworc3RydWN0IHN3aW1jbWRfZm9ybWF0IHsKKwlfX3U4CWNvZGU7CQkvKiBDTURfRk9STUFUICovCisJX191OAlkcml2ZV9udW07CisJX191MTYJZXJyb3I7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJX191MTYgZm10OwkgICAvKiBmb3JtYXQga2luZCAgICAgICAgICAgICAgICAgICovCisJCQlfX3U4ICBoZHJieXRlOwkgICAvKiBmbXQgYnl0ZSBmb3IgaGRyICgwPWRlZmF1bHQpICovCisJCQlfX3U4ICBpbnRlcmxlYXZlOyAgLyogaW50ZXJsZWF2ZSAoMCA9IGRlZmF1bHQpICAgICAqLworCQkJY2FkZHJfdAlkYXRhYnVmOyAgIC8qIHNlY3RvciBkYXRhIGJ1ZmYgKDA9ZGVmYXVsdCAgKi8KKwkJCWNhZGRyX3QJdGFnYnVmOwkgICAvKiB0YWcgZGF0YSBidWZmZXIgKDA9ZGVmYXVsdCkgICovCisJCX0gZjsKKwkJc3RydWN0IHN3aW1fZHJ2c3RhdHVzIHN0YXR1czsKKwl9IHA7Cit9OworCitzdHJ1Y3Qgc3dpbWNtZF9mbXR2ZXJpZnkgeworCV9fdTgJY29kZTsJCS8qIENNRF9GT1JNQVRfVkVSSUZZICovCisJX191OAlkcml2ZV9udW07CisJX191MTYJZXJyb3I7Cit9OworCitzdHJ1Y3Qgc3dpbWNtZF9ydyB7CisJX191OAljb2RlOwkJLyogQ01EX1JFQUQsIENNRF9XUklURSBvciBDTURfUkVBRF9WRVJJRlkgKi8KKwlfX3U4CWRyaXZlX251bTsKKwlfX3UxNgllcnJvcjsKKwljYWRkcl90CWJ1ZmZlcjsJCS8qIFIvVyBidWZmZXIgYWRkcmVzcyAqLworCV9fdTMyCWZpcnN0X2Jsb2NrOwkvKiBTdGFydGluZyBibG9jayAgICAgKi8KKwlfX3UzMgludW1fYmxvY2tzOwkvKiBOdW1iZXIgb2YgYmxvY2tzICAgKi8KKwlfX3U4CXRhZ1sxMl07CS8qIHRhZyBkYXRhICAgICAgICAgICAqLworfTsKKworc3RydWN0IHN3aW1jbWRfY2FjaGVjdGwgeworCV9fdTgJY29kZTsJCS8qIENNRF9DQUNIRV9DVFJMICovCisJX191OAl1bnVzZWQ7CisJX191MTYJZXJyb3I7CisJX191OAllbmFibGU7CQkvKiBOb256ZXJvIHRvIGVuYWJsZSBjYWNoZSAgICAgICAgICAgICAgICAqLworCV9fdTgJaW5zdGFsbDsJLyogKzEgPSBpbnN0YWxsLCAtMSA9IHJlbW92ZSwgMCA9IG5laXRoZXIgKi8KK307CisKK3N0cnVjdCBzd2ltY21kX3RhZ2J1ZmN0bCB7CisJX191OAljb2RlOwkJLyogQ01EX1RBR0JVRkZfQ1RSTCAqLworCV9fdTgJdW51c2VkOworCV9fdTE2CWVycm9yOworCWNhZGRyX3QJYnVmOwkJLyogYnVmZmVyIGFkZHJlc3Mgb3IgMCB0byBkaXNhYmxlICovCit9OworCitzdHJ1Y3Qgc3dpbWNtZF9nZXRpY29uIHsKKwlfX3U4CWNvZGU7CQkvKiBDTURfR0VUX0lDT04gKi8KKwlfX3U4CWRyaXZlX251bTsKKwlfX3UxNgllcnJvcjsKKwljYWRkcl90CWJ1ZmZlcjsJCS8qIE51ZmZlciBhZGRyZXNzICovCisJX191MTYJa2luZDsJCS8qIDAgPSBtZWRpYSBpY29uLCAxID0gZHJpdmUgaWNvbiAqLworCV9fdTE2CXVudXNlZDsKKwlfX3UxNgltYXhfYnl0ZXM7CS8qIG1heGltdW0gIGJ5dGUgY291bnQgKi8KK307CisKKy8qIE1lc3NhZ2VzIGZyb20gdGhlIFNXSU0gSU9QIHRvIHRoZSBob3N0IENQVTogKi8KKworc3RydWN0IHN3aW1tc2dfc3RhdHVzIHsKKwlfX3U4CWNvZGU7CQkvKiAxID0gaW5zZXJ0LCAyID0gZWplY3QsIDMgPSBzdGF0dXMgY2hhbmdlZCAqLworCV9fdTgJZHJpdmVfbnVtOworCV9fdTE2CWVycm9yOworCXN0cnVjdCBzd2ltX2RydnN0YXR1cyBzdGF0dXM7Cit9OworCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tbTY4ay9zeXN0ZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGQzNDgxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9zeXN0ZW0uaApAQCAtMCwwICsxLDIwMSBAQAorI2lmbmRlZiBfTTY4S19TWVNURU1fSAorI2RlZmluZSBfTTY4S19TWVNURU1fSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+IC8qIGdldCBjb25maWd1cmF0aW9uIG1hY3JvcyAqLworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgorI2luY2x1ZGUgPGFzbS9lbnRyeS5oPgorCisjaWZkZWYgX19LRVJORUxfXworCisvKgorICogc3dpdGNoX3RvKG4pIHNob3VsZCBzd2l0Y2ggdGFza3MgdG8gdGFzayBwdHIsIGZpcnN0IGNoZWNraW5nIHRoYXQKKyAqIHB0ciBpc24ndCB0aGUgY3VycmVudCB0YXNrLCBpbiB3aGljaCBjYXNlIGl0IGRvZXMgbm90aGluZy4gIFRoaXMKKyAqIGFsc28gY2xlYXJzIHRoZSBUUy1mbGFnIGlmIHRoZSB0YXNrIHdlIHN3aXRjaGVkIHRvIGhhcyB1c2VkIHRoZQorICogbWF0aCBjby1wcm9jZXNzb3IgbGF0ZXN0LgorICovCisvKgorICogc3dpdGNoX3RvKCkgc2F2ZXMgdGhlIGV4dHJhIHJlZ2lzdGVycywgdGhhdCBhcmUgbm90IHNhdmVkCisgKiBhdXRvbWF0aWNhbGx5IGJ5IFNBVkVfU1dJVENIX1NUQUNLIGluIHJlc3VtZSgpLCBpZS4gZDAtZDUgYW5kCisgKiBhMC1hMS4gU29tZSBvZiB0aGVzZSBhcmUgdXNlZCBieSBzY2hlZHVsZSgpIGFuZCBpdHMgcHJlZGVjZXNzb3JzCisgKiBhbmQgc28gd2UgbWlnaHQgZ2V0IHNlZSB1bmV4cGVjdGVkIGJlaGF2aW9ycyB3aGVuIGEgdGFzayByZXR1cm5zCisgKiB3aXRoIHVuZXhwZWN0ZWQgcmVnaXN0ZXIgdmFsdWVzLgorICoKKyAqIHN5c2NhbGwgc3RvcmVzIHRoZXNlIHJlZ2lzdGVycyBpdHNlbGYgYW5kIG5vbmUgb2YgdGhlbSBhcmUgdXNlZAorICogYnkgc3lzY2FsbCBhZnRlciB0aGUgZnVuY3Rpb24gaW4gdGhlIHN5c2NhbGwgaGFzIGJlZW4gY2FsbGVkLgorICoKKyAqIEJld2FyZSB0aGF0IHJlc3VtZSBub3cgZXhwZWN0cyAqbmV4dCB0byBiZSBpbiBkMSBhbmQgdGhlIG9mZnNldCBvZgorICogdHNzIHRvIGJlIGluIGExLiBUaGlzIHNhdmVzIGEgZmV3IGluc3RydWN0aW9ucyBhcyB3ZSBubyBsb25nZXIgaGF2ZQorICogdG8gcHVzaCB0aGVtIG9udG8gdGhlIHN0YWNrIGFuZCByZWFkIHRoZW0gYmFjayByaWdodCBhZnRlci4KKyAqCisgKiAwMi8xNy85NiAtIEplcyBTb3JlbnNlbiAoamRzQGtvbS5hdWMuZGspCisgKgorICogQ2hhbmdlZCA5Ni8wOS8xOSBieSBBbmRyZWFzIFNjaHdhYgorICogcGFzcyBwcmV2IGluIGEwLCBuZXh0IGluIGExCisgKi8KK2FzbWxpbmthZ2Ugdm9pZCByZXN1bWUodm9pZCk7CisjZGVmaW5lIHN3aXRjaF90byhwcmV2LG5leHQsbGFzdCkgZG8geyBcCisgIHJlZ2lzdGVyIHZvaWQgKl9wcmV2IF9fYXNtX18gKCJhMCIpID0gKHByZXYpOyBcCisgIHJlZ2lzdGVyIHZvaWQgKl9uZXh0IF9fYXNtX18gKCJhMSIpID0gKG5leHQpOyBcCisgIHJlZ2lzdGVyIHZvaWQgKl9sYXN0IF9fYXNtX18gKCJkMSIpOyBcCisgIF9fYXNtX18gX192b2xhdGlsZV9fKCJqYnNyIHJlc3VtZSIgXAorCQkgICAgICAgOiAiPWEiIChfcHJldiksICI9YSIgKF9uZXh0KSwgIj1kIiAoX2xhc3QpIFwKKwkJICAgICAgIDogIjAiIChfcHJldiksICIxIiAoX25leHQpIFwKKwkJICAgICAgIDogImQwIiwgImQyIiwgImQzIiwgImQ0IiwgImQ1Iik7IFwKKyAgKGxhc3QpID0gX2xhc3Q7IFwKK30gd2hpbGUgKDApCisKKworLyogaW50ZXJydXB0IGNvbnRyb2wuLiAqLworI2lmIDAKKyNkZWZpbmUgbG9jYWxfaXJxX2VuYWJsZSgpIGFzbSB2b2xhdGlsZSAoImFuZGl3ICUwLCUlc3IiOiA6ICJpIiAoQUxMT1dJTlQpIDogIm1lbW9yeSIpCisjZWxzZQorI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KKyNkZWZpbmUgbG9jYWxfaXJxX2VuYWJsZSgpICh7CQkJCQkJCVwKKwlpZiAoTUFDSF9JU19RNDAgfHwgIWhhcmRpcnFfY291bnQoKSkJCQkJCVwKKwkJYXNtIHZvbGF0aWxlICgiYW5kaXcgJTAsJSVzciI6IDogImkiIChBTExPV0lOVCkgOiAibWVtb3J5Iik7CVwKK30pCisjZW5kaWYKKyNkZWZpbmUgbG9jYWxfaXJxX2Rpc2FibGUoKSBhc20gdm9sYXRpbGUgKCJvcml3ICAjMHgwNzAwLCUlc3IiOiA6IDogIm1lbW9yeSIpCisjZGVmaW5lIGxvY2FsX3NhdmVfZmxhZ3MoeCkgYXNtIHZvbGF0aWxlICgibW92ZXcgJSVzciwlMCI6Ij1kIiAoeCkgOiA6ICJtZW1vcnkiKQorI2RlZmluZSBsb2NhbF9pcnFfcmVzdG9yZSh4KSBhc20gdm9sYXRpbGUgKCJtb3ZldyAlMCwlJXNyIjogOiJkIiAoeCkgOiAibWVtb3J5IikKKworc3RhdGljIGlubGluZSBpbnQgaXJxc19kaXNhYmxlZCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJbG9jYWxfc2F2ZV9mbGFncyhmbGFncyk7CisJcmV0dXJuIGZsYWdzICYgfkFMTE9XSU5UOworfQorCisvKiBGb3Igc3BpbmxvY2tzIGV0YyAqLworI2RlZmluZSBsb2NhbF9pcnFfc2F2ZSh4KQkoeyBsb2NhbF9zYXZlX2ZsYWdzKHgpOyBsb2NhbF9pcnFfZGlzYWJsZSgpOyB9KQorCisvKgorICogRm9yY2Ugc3RyaWN0IENQVSBvcmRlcmluZy4KKyAqIE5vdCByZWFsbHkgcmVxdWlyZWQgb24gbTY4ay4uLgorICovCisjZGVmaW5lIG5vcCgpCQlkbyB7IGFzbSB2b2xhdGlsZSAoIm5vcCIpOyBiYXJyaWVyKCk7IH0gd2hpbGUgKDApCisjZGVmaW5lIG1iKCkJCWJhcnJpZXIoKQorI2RlZmluZSBybWIoKQkJYmFycmllcigpCisjZGVmaW5lIHdtYigpCQliYXJyaWVyKCkKKyNkZWZpbmUgcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQlkbyB7IH0gd2hpbGUoMCkKKyNkZWZpbmUgc2V0X21iKHZhciwgdmFsdWUpICAgIGRvIHsgeGNoZygmdmFyLCB2YWx1ZSk7IH0gd2hpbGUgKDApCisjZGVmaW5lIHNldF93bWIodmFyLCB2YWx1ZSkgICAgZG8geyB2YXIgPSB2YWx1ZTsgd21iKCk7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgc21wX21iKCkJYmFycmllcigpCisjZGVmaW5lIHNtcF9ybWIoKQliYXJyaWVyKCkKKyNkZWZpbmUgc21wX3dtYigpCWJhcnJpZXIoKQorI2RlZmluZSBzbXBfcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQlkbyB7IH0gd2hpbGUoMCkKKworCisjZGVmaW5lIHhjaGcocHRyLHgpICgoX190eXBlb2ZfXygqKHB0cikpKV9feGNoZygodW5zaWduZWQgbG9uZykoeCksKHB0ciksc2l6ZW9mKCoocHRyKSkpKQorI2RlZmluZSB0YXMocHRyKSAoeGNoZygocHRyKSwxKSkKKworc3RydWN0IF9feGNoZ19kdW1teSB7IHVuc2lnbmVkIGxvbmcgYVsxMDBdOyB9OworI2RlZmluZSBfX3hnKHgpICgodm9sYXRpbGUgc3RydWN0IF9feGNoZ19kdW1teSAqKSh4KSkKKworI2lmbmRlZiBDT05GSUdfUk1XX0lOU05TCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX194Y2hnKHVuc2lnbmVkIGxvbmcgeCwgdm9sYXRpbGUgdm9pZCAqIHB0ciwgaW50IHNpemUpCit7CisJdW5zaWduZWQgbG9uZyBmbGFncywgdG1wOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJc3dpdGNoIChzaXplKSB7CisJY2FzZSAxOgorCQl0bXAgPSAqKHU4ICopcHRyOworCQkqKHU4ICopcHRyID0geDsKKwkJeCA9IHRtcDsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQl0bXAgPSAqKHUxNiAqKXB0cjsKKwkJKih1MTYgKilwdHIgPSB4OworCQl4ID0gdG1wOworCQlicmVhazsKKwljYXNlIDQ6CisJCXRtcCA9ICoodTMyICopcHRyOworCQkqKHUzMiAqKXB0ciA9IHg7CisJCXggPSB0bXA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlyZXR1cm4geDsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX194Y2hnKHVuc2lnbmVkIGxvbmcgeCwgdm9sYXRpbGUgdm9pZCAqIHB0ciwgaW50IHNpemUpCit7CisJc3dpdGNoIChzaXplKSB7CisJICAgIGNhc2UgMToKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18KKwkJCSgibW92ZWIgJTIsJTBcblx0IgorCQkJICIxOlxuXHQiCisJCQkgImNhc2IgJTAsJTEsJTJcblx0IgorCQkJICJqbmUgMWIiCisJCQkgOiAiPSZkIiAoeCkgOiAiZCIgKHgpLCAibSIgKCpfX3hnKHB0cikpIDogIm1lbW9yeSIpOworCQlicmVhazsKKwkgICAgY2FzZSAyOgorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXworCQkJKCJtb3ZldyAlMiwlMFxuXHQiCisJCQkgIjE6XG5cdCIKKwkJCSAiY2FzdyAlMCwlMSwlMlxuXHQiCisJCQkgImpuZSAxYiIKKwkJCSA6ICI9JmQiICh4KSA6ICJkIiAoeCksICJtIiAoKl9feGcocHRyKSkgOiAibWVtb3J5Iik7CisJCWJyZWFrOworCSAgICBjYXNlIDQ6CisJCV9fYXNtX18gX192b2xhdGlsZV9fCisJCQkoIm1vdmVsICUyLCUwXG5cdCIKKwkJCSAiMTpcblx0IgorCQkJICJjYXNsICUwLCUxLCUyXG5cdCIKKwkJCSAiam5lIDFiIgorCQkJIDogIj0mZCIgKHgpIDogImQiICh4KSwgIm0iICgqX194ZyhwdHIpKSA6ICJtZW1vcnkiKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiB4OworfQorI2VuZGlmCisKKy8qCisgKiBBdG9taWMgY29tcGFyZSBhbmQgZXhjaGFuZ2UuICBDb21wYXJlIE9MRCB3aXRoIE1FTSwgaWYgaWRlbnRpY2FsLAorICogc3RvcmUgTkVXIGluIE1FTS4gIFJldHVybiB0aGUgaW5pdGlhbCB2YWx1ZSBpbiBNRU0uICBTdWNjZXNzIGlzCisgKiBpbmRpY2F0ZWQgYnkgY29tcGFyaW5nIFJFVFVSTiB3aXRoIE9MRC4KKyAqLworI2lmZGVmIENPTkZJR19STVdfSU5TTlMKKyNkZWZpbmUgX19IQVZFX0FSQ0hfQ01QWENIRwkxCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX2NtcHhjaGcodm9sYXRpbGUgdm9pZCAqcCwgdW5zaWduZWQgbG9uZyBvbGQsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBuZXcsIGludCBzaXplKQoreworCXN3aXRjaCAoc2l6ZSkgeworCWNhc2UgMToKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJjYXNiICUwLCUyLCUxIgorCQkJCSAgICAgIDogIj1kIiAob2xkKSwgIj1tIiAoKihjaGFyICopcCkKKwkJCQkgICAgICA6ICJkIiAobmV3KSwgIjAiIChvbGQpLCAibSIgKCooY2hhciAqKXApKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImNhc3cgJTAsJTIsJTEiCisJCQkJICAgICAgOiAiPWQiIChvbGQpLCAiPW0iICgqKHNob3J0ICopcCkKKwkJCQkgICAgICA6ICJkIiAobmV3KSwgIjAiIChvbGQpLCAibSIgKCooc2hvcnQgKilwKSk7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJjYXNsICUwLCUyLCUxIgorCQkJCSAgICAgIDogIj1kIiAob2xkKSwgIj1tIiAoKihpbnQgKilwKQorCQkJCSAgICAgIDogImQiIChuZXcpLCAiMCIgKG9sZCksICJtIiAoKihpbnQgKilwKSk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gb2xkOworfQorCisjZGVmaW5lIGNtcHhjaGcocHRyLG8sbilcCisJKChfX3R5cGVvZl9fKCoocHRyKSkpX19jbXB4Y2hnKChwdHIpLCh1bnNpZ25lZCBsb25nKShvKSxcCisJCQkJCSh1bnNpZ25lZCBsb25nKShuKSxzaXplb2YoKihwdHIpKSkpCisjZW5kaWYKKworI2RlZmluZSBhcmNoX2FsaWduX3N0YWNrKHgpICh4KQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX002OEtfU1lTVEVNX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvdGVybWJpdHMuaCBiL2luY2x1ZGUvYXNtLW02OGsvdGVybWJpdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWVlYzNlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay90ZXJtYml0cy5oCkBAIC0wLDAgKzEsMTc1IEBACisjaWZuZGVmIF9fQVJDSF9NNjhLX1RFUk1CSVRTX0hfXworI2RlZmluZSBfX0FSQ0hfTTY4S19URVJNQklUU19IX18KKworI2luY2x1ZGUgPGxpbnV4L3Bvc2l4X3R5cGVzLmg+CisKK3R5cGVkZWYgdW5zaWduZWQgY2hhcgljY190OwordHlwZWRlZiB1bnNpZ25lZCBpbnQJc3BlZWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50CXRjZmxhZ190OworCisjZGVmaW5lIE5DQ1MgMTkKK3N0cnVjdCB0ZXJtaW9zIHsKKwl0Y2ZsYWdfdCBjX2lmbGFnOwkJLyogaW5wdXQgbW9kZSBmbGFncyAqLworCXRjZmxhZ190IGNfb2ZsYWc7CQkvKiBvdXRwdXQgbW9kZSBmbGFncyAqLworCXRjZmxhZ190IGNfY2ZsYWc7CQkvKiBjb250cm9sIG1vZGUgZmxhZ3MgKi8KKwl0Y2ZsYWdfdCBjX2xmbGFnOwkJLyogbG9jYWwgbW9kZSBmbGFncyAqLworCWNjX3QgY19saW5lOwkJCS8qIGxpbmUgZGlzY2lwbGluZSAqLworCWNjX3QgY19jY1tOQ0NTXTsJCS8qIGNvbnRyb2wgY2hhcmFjdGVycyAqLworfTsKKworLyogY19jYyBjaGFyYWN0ZXJzICovCisjZGVmaW5lIFZJTlRSIDAKKyNkZWZpbmUgVlFVSVQgMQorI2RlZmluZSBWRVJBU0UgMgorI2RlZmluZSBWS0lMTCAzCisjZGVmaW5lIFZFT0YgNAorI2RlZmluZSBWVElNRSA1CisjZGVmaW5lIFZNSU4gNgorI2RlZmluZSBWU1dUQyA3CisjZGVmaW5lIFZTVEFSVCA4CisjZGVmaW5lIFZTVE9QIDkKKyNkZWZpbmUgVlNVU1AgMTAKKyNkZWZpbmUgVkVPTCAxMQorI2RlZmluZSBWUkVQUklOVCAxMgorI2RlZmluZSBWRElTQ0FSRCAxMworI2RlZmluZSBWV0VSQVNFIDE0CisjZGVmaW5lIFZMTkVYVCAxNQorI2RlZmluZSBWRU9MMiAxNgorCisKKy8qIGNfaWZsYWcgYml0cyAqLworI2RlZmluZSBJR05CUksJMDAwMDAwMQorI2RlZmluZSBCUktJTlQJMDAwMDAwMgorI2RlZmluZSBJR05QQVIJMDAwMDAwNAorI2RlZmluZSBQQVJNUksJMDAwMDAxMAorI2RlZmluZSBJTlBDSwkwMDAwMDIwCisjZGVmaW5lIElTVFJJUAkwMDAwMDQwCisjZGVmaW5lIElOTENSCTAwMDAxMDAKKyNkZWZpbmUgSUdOQ1IJMDAwMDIwMAorI2RlZmluZSBJQ1JOTAkwMDAwNDAwCisjZGVmaW5lIElVQ0xDCTAwMDEwMDAKKyNkZWZpbmUgSVhPTgkwMDAyMDAwCisjZGVmaW5lIElYQU5ZCTAwMDQwMDAKKyNkZWZpbmUgSVhPRkYJMDAxMDAwMAorI2RlZmluZSBJTUFYQkVMCTAwMjAwMDAKKyNkZWZpbmUgSVVURjgJMDA0MDAwMAorCisvKiBjX29mbGFnIGJpdHMgKi8KKyNkZWZpbmUgT1BPU1QJMDAwMDAwMQorI2RlZmluZSBPTENVQwkwMDAwMDAyCisjZGVmaW5lIE9OTENSCTAwMDAwMDQKKyNkZWZpbmUgT0NSTkwJMDAwMDAxMAorI2RlZmluZSBPTk9DUgkwMDAwMDIwCisjZGVmaW5lIE9OTFJFVAkwMDAwMDQwCisjZGVmaW5lIE9GSUxMCTAwMDAxMDAKKyNkZWZpbmUgT0ZERUwJMDAwMDIwMAorI2RlZmluZSBOTERMWQkwMDAwNDAwCisjZGVmaW5lICAgTkwwCTAwMDAwMDAKKyNkZWZpbmUgICBOTDEJMDAwMDQwMAorI2RlZmluZSBDUkRMWQkwMDAzMDAwCisjZGVmaW5lICAgQ1IwCTAwMDAwMDAKKyNkZWZpbmUgICBDUjEJMDAwMTAwMAorI2RlZmluZSAgIENSMgkwMDAyMDAwCisjZGVmaW5lICAgQ1IzCTAwMDMwMDAKKyNkZWZpbmUgVEFCRExZCTAwMTQwMDAKKyNkZWZpbmUgICBUQUIwCTAwMDAwMDAKKyNkZWZpbmUgICBUQUIxCTAwMDQwMDAKKyNkZWZpbmUgICBUQUIyCTAwMTAwMDAKKyNkZWZpbmUgICBUQUIzCTAwMTQwMDAKKyNkZWZpbmUgICBYVEFCUwkwMDE0MDAwCisjZGVmaW5lIEJTRExZCTAwMjAwMDAKKyNkZWZpbmUgICBCUzAJMDAwMDAwMAorI2RlZmluZSAgIEJTMQkwMDIwMDAwCisjZGVmaW5lIFZURExZCTAwNDAwMDAKKyNkZWZpbmUgICBWVDAJMDAwMDAwMAorI2RlZmluZSAgIFZUMQkwMDQwMDAwCisjZGVmaW5lIEZGRExZCTAxMDAwMDAKKyNkZWZpbmUgICBGRjAJMDAwMDAwMAorI2RlZmluZSAgIEZGMQkwMTAwMDAwCisKKy8qIGNfY2ZsYWcgYml0IG1lYW5pbmcgKi8KKyNkZWZpbmUgQ0JBVUQJMDAxMDAxNworI2RlZmluZSAgQjAJMDAwMDAwMAkJLyogaGFuZyB1cCAqLworI2RlZmluZSAgQjUwCTAwMDAwMDEKKyNkZWZpbmUgIEI3NQkwMDAwMDAyCisjZGVmaW5lICBCMTEwCTAwMDAwMDMKKyNkZWZpbmUgIEIxMzQJMDAwMDAwNAorI2RlZmluZSAgQjE1MAkwMDAwMDA1CisjZGVmaW5lICBCMjAwCTAwMDAwMDYKKyNkZWZpbmUgIEIzMDAJMDAwMDAwNworI2RlZmluZSAgQjYwMAkwMDAwMDEwCisjZGVmaW5lICBCMTIwMAkwMDAwMDExCisjZGVmaW5lICBCMTgwMAkwMDAwMDEyCisjZGVmaW5lICBCMjQwMAkwMDAwMDEzCisjZGVmaW5lICBCNDgwMAkwMDAwMDE0CisjZGVmaW5lICBCOTYwMAkwMDAwMDE1CisjZGVmaW5lICBCMTkyMDAJMDAwMDAxNgorI2RlZmluZSAgQjM4NDAwCTAwMDAwMTcKKyNkZWZpbmUgRVhUQSBCMTkyMDAKKyNkZWZpbmUgRVhUQiBCMzg0MDAKKyNkZWZpbmUgQ1NJWkUJMDAwMDA2MAorI2RlZmluZSAgIENTNQkwMDAwMDAwCisjZGVmaW5lICAgQ1M2CTAwMDAwMjAKKyNkZWZpbmUgICBDUzcJMDAwMDA0MAorI2RlZmluZSAgIENTOAkwMDAwMDYwCisjZGVmaW5lIENTVE9QQgkwMDAwMTAwCisjZGVmaW5lIENSRUFECTAwMDAyMDAKKyNkZWZpbmUgUEFSRU5CCTAwMDA0MDAKKyNkZWZpbmUgUEFST0RECTAwMDEwMDAKKyNkZWZpbmUgSFVQQ0wJMDAwMjAwMAorI2RlZmluZSBDTE9DQUwJMDAwNDAwMAorI2RlZmluZSBDQkFVREVYIDAwMTAwMDAKKyNkZWZpbmUgICAgQjU3NjAwIDAwMTAwMDEKKyNkZWZpbmUgICBCMTE1MjAwIDAwMTAwMDIKKyNkZWZpbmUgICBCMjMwNDAwIDAwMTAwMDMKKyNkZWZpbmUgICBCNDYwODAwIDAwMTAwMDQKKyNkZWZpbmUgICBCNTAwMDAwIDAwMTAwMDUKKyNkZWZpbmUgICBCNTc2MDAwIDAwMTAwMDYKKyNkZWZpbmUgICBCOTIxNjAwIDAwMTAwMDcKKyNkZWZpbmUgIEIxMDAwMDAwIDAwMTAwMTAKKyNkZWZpbmUgIEIxMTUyMDAwIDAwMTAwMTEKKyNkZWZpbmUgIEIxNTAwMDAwIDAwMTAwMTIKKyNkZWZpbmUgIEIyMDAwMDAwIDAwMTAwMTMKKyNkZWZpbmUgIEIyNTAwMDAwIDAwMTAwMTQKKyNkZWZpbmUgIEIzMDAwMDAwIDAwMTAwMTUKKyNkZWZpbmUgIEIzNTAwMDAwIDAwMTAwMTYKKyNkZWZpbmUgIEI0MDAwMDAwIDAwMTAwMTcKKyNkZWZpbmUgQ0lCQVVECSAgMDAyMDAzNjAwMDAwCS8qIGlucHV0IGJhdWQgcmF0ZSAobm90IHVzZWQpICovCisjZGVmaW5lIENNU1BBUgkgIDAxMDAwMDAwMDAwMAkJLyogbWFyayBvciBzcGFjZSAoc3RpY2spIHBhcml0eSAqLworI2RlZmluZSBDUlRTQ1RTCSAgMDIwMDAwMDAwMDAwCQkvKiBmbG93IGNvbnRyb2wgKi8KKworLyogY19sZmxhZyBiaXRzICovCisjZGVmaW5lIElTSUcJMDAwMDAwMQorI2RlZmluZSBJQ0FOT04JMDAwMDAwMgorI2RlZmluZSBYQ0FTRQkwMDAwMDA0CisjZGVmaW5lIEVDSE8JMDAwMDAxMAorI2RlZmluZSBFQ0hPRQkwMDAwMDIwCisjZGVmaW5lIEVDSE9LCTAwMDAwNDAKKyNkZWZpbmUgRUNIT05MCTAwMDAxMDAKKyNkZWZpbmUgTk9GTFNICTAwMDAyMDAKKyNkZWZpbmUgVE9TVE9QCTAwMDA0MDAKKyNkZWZpbmUgRUNIT0NUTAkwMDAxMDAwCisjZGVmaW5lIEVDSE9QUlQJMDAwMjAwMAorI2RlZmluZSBFQ0hPS0UJMDAwNDAwMAorI2RlZmluZSBGTFVTSE8JMDAxMDAwMAorI2RlZmluZSBQRU5ESU4JMDA0MDAwMAorI2RlZmluZSBJRVhURU4JMDEwMDAwMAorCisKKy8qIHRjZmxvdygpIGFuZCBUQ1hPTkMgdXNlIHRoZXNlICovCisjZGVmaW5lCVRDT09GRgkJMAorI2RlZmluZQlUQ09PTgkJMQorI2RlZmluZQlUQ0lPRkYJCTIKKyNkZWZpbmUJVENJT04JCTMKKworLyogdGNmbHVzaCgpIGFuZCBUQ0ZMU0ggdXNlIHRoZXNlICovCisjZGVmaW5lCVRDSUZMVVNICTAKKyNkZWZpbmUJVENPRkxVU0gJMQorI2RlZmluZQlUQ0lPRkxVU0gJMgorCisvKiB0Y3NldGF0dHIgdXNlcyB0aGVzZSAqLworI2RlZmluZQlUQ1NBTk9XCQkwCisjZGVmaW5lCVRDU0FEUkFJTgkxCisjZGVmaW5lCVRDU0FGTFVTSAkyCisKKyNlbmRpZiAvKiBfX0FSQ0hfTTY4S19URVJNQklUU19IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvdGVybWlvcy5oIGIvaW5jbHVkZS9hc20tbTY4ay90ZXJtaW9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU3ZjBjOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvdGVybWlvcy5oCkBAIC0wLDAgKzEsMTA4IEBACisjaWZuZGVmIF9NNjhLX1RFUk1JT1NfSAorI2RlZmluZSBfTTY4S19URVJNSU9TX0gKKworI2luY2x1ZGUgPGFzbS90ZXJtYml0cy5oPgorI2luY2x1ZGUgPGFzbS9pb2N0bHMuaD4KKworc3RydWN0IHdpbnNpemUgeworCXVuc2lnbmVkIHNob3J0IHdzX3JvdzsKKwl1bnNpZ25lZCBzaG9ydCB3c19jb2w7CisJdW5zaWduZWQgc2hvcnQgd3NfeHBpeGVsOworCXVuc2lnbmVkIHNob3J0IHdzX3lwaXhlbDsKK307CisKKyNkZWZpbmUgTkNDIDgKK3N0cnVjdCB0ZXJtaW8geworCXVuc2lnbmVkIHNob3J0IGNfaWZsYWc7CQkvKiBpbnB1dCBtb2RlIGZsYWdzICovCisJdW5zaWduZWQgc2hvcnQgY19vZmxhZzsJCS8qIG91dHB1dCBtb2RlIGZsYWdzICovCisJdW5zaWduZWQgc2hvcnQgY19jZmxhZzsJCS8qIGNvbnRyb2wgbW9kZSBmbGFncyAqLworCXVuc2lnbmVkIHNob3J0IGNfbGZsYWc7CQkvKiBsb2NhbCBtb2RlIGZsYWdzICovCisJdW5zaWduZWQgY2hhciBjX2xpbmU7CQkvKiBsaW5lIGRpc2NpcGxpbmUgKi8KKwl1bnNpZ25lZCBjaGFyIGNfY2NbTkNDXTsJLyogY29udHJvbCBjaGFyYWN0ZXJzICovCit9OworCisjaWZkZWYgX19LRVJORUxfXworLyoJaW50cj1eQwkJcXVpdD1efAkJZXJhc2U9ZGVsCWtpbGw9XlUKKwllb2Y9XkQJCXZ0aW1lPVwwCXZtaW49XDEJCXN4dGM9XDAKKwlzdGFydD1eUQlzdG9wPV5TCQlzdXNwPV5aCQllb2w9XDAKKwlyZXByaW50PV5SCWRpc2NhcmQ9XlUJd2VyYXNlPV5XCWxuZXh0PV5WCisJZW9sMj1cMAorKi8KKyNkZWZpbmUgSU5JVF9DX0NDICJcMDAzXDAzNFwxNzdcMDI1XDAwNFwwXDFcMFwwMjFcMDIzXDAzMlwwXDAyMlwwMTdcMDI3XDAyNlwwIgorI2VuZGlmCisKKy8qIG1vZGVtIGxpbmVzICovCisjZGVmaW5lIFRJT0NNX0xFCTB4MDAxCisjZGVmaW5lIFRJT0NNX0RUUgkweDAwMgorI2RlZmluZSBUSU9DTV9SVFMJMHgwMDQKKyNkZWZpbmUgVElPQ01fU1QJMHgwMDgKKyNkZWZpbmUgVElPQ01fU1IJMHgwMTAKKyNkZWZpbmUgVElPQ01fQ1RTCTB4MDIwCisjZGVmaW5lIFRJT0NNX0NBUgkweDA0MAorI2RlZmluZSBUSU9DTV9STkcJMHgwODAKKyNkZWZpbmUgVElPQ01fRFNSCTB4MTAwCisjZGVmaW5lIFRJT0NNX0NECVRJT0NNX0NBUgorI2RlZmluZSBUSU9DTV9SSQlUSU9DTV9STkcKKyNkZWZpbmUgVElPQ01fT1VUMQkweDIwMDAKKyNkZWZpbmUgVElPQ01fT1VUMgkweDQwMDAKKyNkZWZpbmUgVElPQ01fTE9PUAkweDgwMDAKKworLyogaW9jdGwgKGZkLCBUSU9DU0VSR0VUTFNSLCAmcmVzdWx0KSB3aGVyZSByZXN1bHQgbWF5IGJlIGFzIGJlbG93ICovCisKKy8qIGxpbmUgZGlzY2lwbGluZXMgKi8KKyNkZWZpbmUgTl9UVFkJCTAKKyNkZWZpbmUgTl9TTElQCQkxCisjZGVmaW5lIE5fTU9VU0UJCTIKKyNkZWZpbmUgTl9QUFAJCTMKKyNkZWZpbmUgTl9TVFJJUAkJNAorI2RlZmluZSBOX0FYMjUJCTUKKyNkZWZpbmUgTl9YMjUJCTYJLyogWC4yNSBhc3luYyAqLworI2RlZmluZSBOXzZQQUNLCQk3CisjZGVmaW5lIE5fTUFTQwkJOAkvKiBSZXNlcnZlZCBmb3IgTW9iaXRleCBtb2R1bGUgPGthekBjYWZlLm5ldD4gKi8KKyNkZWZpbmUgTl9SMzk2NAkJOQkvKiBSZXNlcnZlZCBmb3IgU2ltYXRpYyBSMzk2NCBtb2R1bGUgKi8KKyNkZWZpbmUgTl9QUk9GSUJVU19GREwJMTAJLyogUmVzZXJ2ZWQgZm9yIFByb2ZpYnVzIDxEYXZlQG12aGkuY29tPiAqLworI2RlZmluZSBOX0lSREEJCTExCS8qIExpbnV4IElyRGEgLSBodHRwOi8vaXJkYS5zb3VyY2Vmb3JnZS5uZXQvICovCisjZGVmaW5lIE5fU01TQkxPQ0sJMTIJLyogU01TIGJsb2NrIG1vZGUgLSBmb3IgdGFsa2luZyB0byBHU00gZGF0YSBjYXJkcyBhYm91dCBTTVMgbWVzc2FnZXMgKi8KKyNkZWZpbmUgTl9IRExDCQkxMwkvKiBzeW5jaHJvbm91cyBIRExDICovCisjZGVmaW5lIE5fU1lOQ19QUFAJMTQKKyNkZWZpbmUgTl9IQ0kJCTE1ICAvKiBCbHVldG9vdGggSENJIFVBUlQgKi8KKworI2lmZGVmIF9fS0VSTkVMX18KKworLyoKKyAqIFRyYW5zbGF0ZSBhICJ0ZXJtaW8iIHN0cnVjdHVyZSBpbnRvIGEgInRlcm1pb3MiLiBVZ2guCisgKi8KKyNkZWZpbmUgdXNlcl90ZXJtaW9fdG9fa2VybmVsX3Rlcm1pb3ModGVybWlvcywgdGVybWlvKSBcCisoeyBcCisJdW5zaWduZWQgc2hvcnQgdG1wOyBcCisJZ2V0X3VzZXIodG1wLCAmKHRlcm1pbyktPmNfaWZsYWcpOyBcCisJKHRlcm1pb3MpLT5jX2lmbGFnID0gKDB4ZmZmZjAwMDAgJiAoKHRlcm1pb3MpLT5jX2lmbGFnKSkgfCB0bXA7IFwKKwlnZXRfdXNlcih0bXAsICYodGVybWlvKS0+Y19vZmxhZyk7IFwKKwkodGVybWlvcyktPmNfb2ZsYWcgPSAoMHhmZmZmMDAwMCAmICgodGVybWlvcyktPmNfb2ZsYWcpKSB8IHRtcDsgXAorCWdldF91c2VyKHRtcCwgJih0ZXJtaW8pLT5jX2NmbGFnKTsgXAorCSh0ZXJtaW9zKS0+Y19jZmxhZyA9ICgweGZmZmYwMDAwICYgKCh0ZXJtaW9zKS0+Y19jZmxhZykpIHwgdG1wOyBcCisJZ2V0X3VzZXIodG1wLCAmKHRlcm1pbyktPmNfbGZsYWcpOyBcCisJKHRlcm1pb3MpLT5jX2xmbGFnID0gKDB4ZmZmZjAwMDAgJiAoKHRlcm1pb3MpLT5jX2xmbGFnKSkgfCB0bXA7IFwKKwlnZXRfdXNlcigodGVybWlvcyktPmNfbGluZSwgJih0ZXJtaW8pLT5jX2xpbmUpOyBcCisJY29weV9mcm9tX3VzZXIoKHRlcm1pb3MpLT5jX2NjLCAodGVybWlvKS0+Y19jYywgTkNDKTsgXAorfSkKKworLyoKKyAqIFRyYW5zbGF0ZSBhICJ0ZXJtaW9zIiBzdHJ1Y3R1cmUgaW50byBhICJ0ZXJtaW8iLiBVZ2guCisgKi8KKyNkZWZpbmUga2VybmVsX3Rlcm1pb3NfdG9fdXNlcl90ZXJtaW8odGVybWlvLCB0ZXJtaW9zKSBcCisoeyBcCisJcHV0X3VzZXIoKHRlcm1pb3MpLT5jX2lmbGFnLCAmKHRlcm1pbyktPmNfaWZsYWcpOyBcCisJcHV0X3VzZXIoKHRlcm1pb3MpLT5jX29mbGFnLCAmKHRlcm1pbyktPmNfb2ZsYWcpOyBcCisJcHV0X3VzZXIoKHRlcm1pb3MpLT5jX2NmbGFnLCAmKHRlcm1pbyktPmNfY2ZsYWcpOyBcCisJcHV0X3VzZXIoKHRlcm1pb3MpLT5jX2xmbGFnLCAmKHRlcm1pbyktPmNfbGZsYWcpOyBcCisJcHV0X3VzZXIoKHRlcm1pb3MpLT5jX2xpbmUsICAmKHRlcm1pbyktPmNfbGluZSk7IFwKKwljb3B5X3RvX3VzZXIoKHRlcm1pbyktPmNfY2MsICh0ZXJtaW9zKS0+Y19jYywgTkNDKTsgXAorfSkKKworI2RlZmluZSB1c2VyX3Rlcm1pb3NfdG9fa2VybmVsX3Rlcm1pb3MoaywgdSkgY29weV9mcm9tX3VzZXIoaywgdSwgc2l6ZW9mKHN0cnVjdCB0ZXJtaW9zKSkKKyNkZWZpbmUga2VybmVsX3Rlcm1pb3NfdG9fdXNlcl90ZXJtaW9zKHUsIGspIGNvcHlfdG9fdXNlcih1LCBrLCBzaXplb2Yoc3RydWN0IHRlcm1pb3MpKQorCisjZW5kaWYJLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX002OEtfVEVSTUlPU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL3RocmVhZF9pbmZvLmggYi9pbmNsdWRlL2FzbS1tNjhrL3RocmVhZF9pbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY1ODkzOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvdGhyZWFkX2luZm8uaApAQCAtMCwwICsxLDExOCBAQAorI2lmbmRlZiBfQVNNX002OEtfVEhSRUFEX0lORk9fSAorI2RlZmluZSBfQVNNX002OEtfVEhSRUFEX0lORk9fSAorCisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisKK3N0cnVjdCB0aHJlYWRfaW5mbyB7CisJc3RydWN0IHRhc2tfc3RydWN0CSp0YXNrOwkJLyogbWFpbiB0YXNrIHN0cnVjdHVyZSAqLworCXN0cnVjdCBleGVjX2RvbWFpbgkqZXhlY19kb21haW47CS8qIGV4ZWN1dGlvbiBkb21haW4gKi8KKwlfX3MzMgkJCXByZWVtcHRfY291bnQ7IC8qIDAgPT4gcHJlZW1wdGFibGUsIDwwID0+IEJVRyAqLworCV9fdTMyIGNwdTsgLyogc2hvdWxkIGFsd2F5cyBiZSAwIG9uIG02OGsgKi8KKwlzdHJ1Y3QgcmVzdGFydF9ibG9jayAgICByZXN0YXJ0X2Jsb2NrOworCisJX191OAkJCXN1cGVydmlzb3Jfc3RhY2tbMF07Cit9OworCisjZGVmaW5lIFBSRUVNUFRfQUNUSVZFCQkweDQwMDAwMDAKKworI2RlZmluZSBJTklUX1RIUkVBRF9JTkZPKHRzaykJCQlcCit7CQkJCQkJXAorCS50YXNrCQk9ICZ0c2ssCQkJXAorCS5leGVjX2RvbWFpbgk9ICZkZWZhdWx0X2V4ZWNfZG9tYWluLAlcCisJLnJlc3RhcnRfYmxvY2sgPSB7CQkJXAorCQkuZm4gPSBkb19ub19yZXN0YXJ0X3N5c2NhbGwsCVwKKwl9LAkJCQkJXAorfQorCisvKiBUSFJFQURfU0laRSBzaG91bGQgYmUgOGssIHNvIGhhbmRsZSBkaWZmZXJlbnRseSBmb3IgNGsgYW5kIDhrIG1hY2hpbmVzICovCisjaWYgUEFHRV9TSElGVCA9PSAxMyAvKiA4ayBtYWNoaW5lcyAqLworI2RlZmluZSBhbGxvY190aHJlYWRfaW5mbyh0c2spICAgKChzdHJ1Y3QgdGhyZWFkX2luZm8gKilfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwsMCkpCisjZGVmaW5lIGZyZWVfdGhyZWFkX2luZm8odGkpICBmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKSh0aSksMCkKKyNlbHNlIC8qIG90aGVyd2lzZSBhc3N1bWUgNGsgcGFnZXMgKi8KKyNkZWZpbmUgYWxsb2NfdGhyZWFkX2luZm8odHNrKSAgICgoc3RydWN0IHRocmVhZF9pbmZvICopX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMLDEpKQorI2RlZmluZSBmcmVlX3RocmVhZF9pbmZvKHRpKSAgZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZykodGkpLDEpCisjZW5kaWYgLyogUEFHRV9TSElGVCA9PSAxMyAqLworCisvLyNkZWZpbmUgaW5pdF90aHJlYWRfaW5mbwkoaW5pdF90YXNrLnRocmVhZC5pbmZvKQorI2RlZmluZSBpbml0X3N0YWNrCQkoaW5pdF90aHJlYWRfdW5pb24uc3RhY2spCisKKyNkZWZpbmUgY3VycmVudF90aHJlYWRfaW5mbygpCShjdXJyZW50LT50aHJlYWRfaW5mbykKKworCisjZGVmaW5lIF9fSEFWRV9USFJFQURfRlVOQ1RJT05TCisKKyNkZWZpbmUgVElGX1NZU0NBTExfVFJBQ0UJMAkvKiBzeXNjYWxsIHRyYWNlIGFjdGl2ZSAqLworI2RlZmluZSBUSUZfREVMQVlFRF9UUkFDRQkxCS8qIHNpbmdsZSBzdGVwIGEgc3lzY2FsbCAqLworI2RlZmluZSBUSUZfTk9USUZZX1JFU1VNRQkyCS8qIHJlc3VtcHRpb24gbm90aWZpY2F0aW9uIHJlcXVlc3RlZCAqLworI2RlZmluZSBUSUZfU0lHUEVORElORwkJMwkvKiBzaWduYWwgcGVuZGluZyAqLworI2RlZmluZSBUSUZfTkVFRF9SRVNDSEVECTQJLyogcmVzY2hlZHVsaW5nIG5lY2Vzc2FyeSAqLworI2RlZmluZSBUSUZfTUVNRElFCQk1CisKK2V4dGVybiBpbnQgdGhyZWFkX2ZsYWdfZml4bWUodm9pZCk7CisKKy8qCisgKiBmbGFnIHNldC9jbGVhci90ZXN0IHdyYXBwZXJzCisgKiAtIHBhc3MgVElGX3h4eHggY29uc3RhbnRzIHRvIHRoZXNlIGZ1bmN0aW9ucworICovCisKKyNkZWZpbmUgX19zZXRfdHNrX3RocmVhZF9mbGFnKHRzaywgZmxhZywgdmFsKSAoewlcCisJc3dpdGNoIChmbGFnKSB7CQkJCQlcCisJY2FzZSBUSUZfU0lHUEVORElORzoJCQkJXAorCQl0c2stPnRocmVhZC53b3JrLnNpZ3BlbmRpbmcgPSB2YWw7CVwKKwkJYnJlYWs7CQkJCQlcCisJY2FzZSBUSUZfTkVFRF9SRVNDSEVEOgkJCQlcCisJCXRzay0+dGhyZWFkLndvcmsubmVlZF9yZXNjaGVkID0gdmFsOwlcCisJCWJyZWFrOwkJCQkJXAorCWNhc2UgVElGX1NZU0NBTExfVFJBQ0U6CQkJCVwKKwkJdHNrLT50aHJlYWQud29yay5zeXNjYWxsX3RyYWNlID0gdmFsOwlcCisJCWJyZWFrOwkJCQkJXAorCWNhc2UgVElGX01FTURJRToJCQkJXAorCQl0c2stPnRocmVhZC53b3JrLm1lbWRpZSA9IHZhbDsJCVwKKwkJYnJlYWs7CQkJCQlcCisJZGVmYXVsdDoJCQkJCVwKKwkJdGhyZWFkX2ZsYWdfZml4bWUoKTsJCQlcCisJfQkJCQkJCVwKK30pCisKKyNkZWZpbmUgX19nZXRfdHNrX3RocmVhZF9mbGFnKHRzaywgZmxhZykgKHsJCVwKKwlpbnQgX19fcmVzOwkJCQkJXAorCXN3aXRjaCAoZmxhZykgewkJCQkJXAorCWNhc2UgVElGX1NJR1BFTkRJTkc6CQkJCVwKKwkJX19fcmVzID0gdHNrLT50aHJlYWQud29yay5zaWdwZW5kaW5nOwlcCisJCWJyZWFrOwkJCQkJXAorCWNhc2UgVElGX05FRURfUkVTQ0hFRDoJCQkJXAorCQlfX19yZXMgPSB0c2stPnRocmVhZC53b3JrLm5lZWRfcmVzY2hlZDsJXAorCQlicmVhazsJCQkJCVwKKwljYXNlIFRJRl9TWVNDQUxMX1RSQUNFOgkJCQlcCisJCV9fX3JlcyA9IHRzay0+dGhyZWFkLndvcmsuc3lzY2FsbF90cmFjZTtcCisJCWJyZWFrOwkJCQkJXAorCWNhc2UgVElGX01FTURJRToJCQkJXAorCQlfX19yZXMgPSB0c2stPnRocmVhZC53b3JrLm1lbWRpZTtcCisJCWJyZWFrOwkJCQkJXAorCWRlZmF1bHQ6CQkJCQlcCisJCV9fX3JlcyA9IHRocmVhZF9mbGFnX2ZpeG1lKCk7CQlcCisJfQkJCQkJCVwKKwlfX19yZXM7CQkJCQkJXAorfSkKKworI2RlZmluZSBfX2dldF9zZXRfdHNrX3RocmVhZF9mbGFnKHRzaywgZmxhZywgdmFsKSAoewlcCisJaW50IF9fcmVzID0gX19nZXRfdHNrX3RocmVhZF9mbGFnKHRzaywgZmxhZyk7CVwKKwlfX3NldF90c2tfdGhyZWFkX2ZsYWcodHNrLCBmbGFnLCB2YWwpOwkJXAorCV9fcmVzOwkJCQkJCVwKK30pCisKKyNkZWZpbmUgc2V0X3Rza190aHJlYWRfZmxhZyh0c2ssIGZsYWcpIF9fc2V0X3Rza190aHJlYWRfZmxhZyh0c2ssIGZsYWcsIH4wKQorI2RlZmluZSBjbGVhcl90c2tfdGhyZWFkX2ZsYWcodHNrLCBmbGFnKSBfX3NldF90c2tfdGhyZWFkX2ZsYWcodHNrLCBmbGFnLCAwKQorI2RlZmluZSB0ZXN0X2FuZF9zZXRfdHNrX3RocmVhZF9mbGFnKHRzaywgZmxhZykgX19nZXRfc2V0X3Rza190aHJlYWRfZmxhZyh0c2ssIGZsYWcsIH4wKQorI2RlZmluZSB0ZXN0X3Rza190aHJlYWRfZmxhZyh0c2ssIGZsYWcpIF9fZ2V0X3Rza190aHJlYWRfZmxhZyh0c2ssIGZsYWcpCisKKyNkZWZpbmUgc2V0X3RocmVhZF9mbGFnKGZsYWcpIHNldF90c2tfdGhyZWFkX2ZsYWcoY3VycmVudCwgZmxhZykKKyNkZWZpbmUgY2xlYXJfdGhyZWFkX2ZsYWcoZmxhZykgY2xlYXJfdHNrX3RocmVhZF9mbGFnKGN1cnJlbnQsIGZsYWcpCisjZGVmaW5lIHRlc3RfdGhyZWFkX2ZsYWcoZmxhZykgdGVzdF90c2tfdGhyZWFkX2ZsYWcoY3VycmVudCwgZmxhZykKKworI2RlZmluZSBzZXRfbmVlZF9yZXNjaGVkKCkgc2V0X3RocmVhZF9mbGFnKFRJRl9ORUVEX1JFU0NIRUQpCisjZGVmaW5lIGNsZWFyX25lZWRfcmVzY2hlZCgpIGNsZWFyX3RocmVhZF9mbGFnKFRJRl9ORUVEX1JFU0NIRUQpCisKKyNlbmRpZgkvKiBfQVNNX002OEtfVEhSRUFEX0lORk9fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay90aW1leC5oIGIvaW5jbHVkZS9hc20tbTY4ay90aW1leC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4N2YyZjIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL3RpbWV4LmgKQEAgLTAsMCArMSwxOCBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLW02OGsvdGltZXguaAorICoKKyAqIG02OGsgYXJjaGl0ZWN0dXJlIHRpbWV4IHNwZWNpZmljYXRpb25zCisgKi8KKyNpZm5kZWYgX0FTTW02OGtfVElNRVhfSAorI2RlZmluZSBfQVNNbTY4a19USU1FWF9ICisKKyNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFCTExOTMxODAgLyogVW5kZXJseWluZyBIWiAqLworCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgY3ljbGVzX3Q7CisKK3N0YXRpYyBpbmxpbmUgY3ljbGVzX3QgZ2V0X2N5Y2xlcyh2b2lkKQoreworCXJldHVybiAwOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvdGxiLmggYi9pbmNsdWRlL2FzbS1tNjhrL3RsYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3ODVjZmYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL3RsYi5oCkBAIC0wLDAgKzEsMjAgQEAKKyNpZm5kZWYgX002OEtfVExCX0gKKyNkZWZpbmUgX002OEtfVExCX0gKKworLyoKKyAqIG02OGsgZG9lc24ndCBuZWVkIGFueSBzcGVjaWFsIHBlci1wdGUgb3IKKyAqIHBlci12bWEgaGFuZGxpbmcuLgorICovCisjZGVmaW5lIHRsYl9zdGFydF92bWEodGxiLCB2bWEpCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgdGxiX2VuZF92bWEodGxiLCB2bWEpCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgX190bGJfcmVtb3ZlX3RsYl9lbnRyeSh0bGIsIHB0ZXAsIGFkZHJlc3MpCWRvIHsgfSB3aGlsZSAoMCkKKworLyoKKyAqIC4uIGJlY2F1c2Ugd2UgZmx1c2ggdGhlIHdob2xlIG1tIHdoZW4gaXQKKyAqIGZpbGxzIHVwLgorICovCisjZGVmaW5lIHRsYl9mbHVzaCh0bGIpCQlmbHVzaF90bGJfbW0oKHRsYiktPm1tKQorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdGxiLmg+CisKKyNlbmRpZiAvKiBfTTY4S19UTEJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay90bGJmbHVzaC5oIGIvaW5jbHVkZS9hc20tbTY4ay90bGJmbHVzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlNjFjY2YKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL3RsYmZsdXNoLmgKQEAgLTAsMCArMSwyMzAgQEAKKyNpZm5kZWYgX002OEtfVExCRkxVU0hfSAorI2RlZmluZSBfTTY4S19UTEJGTFVTSF9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2lmbmRlZiBDT05GSUdfU1VOMworCisjaW5jbHVkZSA8YXNtL2N1cnJlbnQuaD4KKworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9rZXJuZWxfcGFnZSh2b2lkICphZGRyKQoreworCWlmIChDUFVfSVNfMDQwX09SXzA2MCkgeworCQltbV9zZWdtZW50X3Qgb2xkX2ZzID0gZ2V0X2ZzKCk7CisJCXNldF9mcyhLRVJORUxfRFMpOworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiLmNoaXAgNjgwNDBcblx0IgorCQkJCSAgICAgInBmbHVzaCAoJTApXG5cdCIKKwkJCQkgICAgICIuY2hpcCA2OGsiCisJCQkJICAgICA6IDogImEiIChhZGRyKSk7CisJCXNldF9mcyhvbGRfZnMpOworCX0gZWxzZQorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygicGZsdXNoICM0LCM0LCglMCkiIDogOiAiYSIgKGFkZHIpKTsKK30KKworLyoKKyAqIGZsdXNoIGFsbCB1c2VyLXNwYWNlIGF0YyBlbnRyaWVzLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19mbHVzaF90bGIodm9pZCkKK3sKKwlpZiAoQ1BVX0lTXzA0MF9PUl8wNjApCisJCV9fYXNtX18gX192b2xhdGlsZV9fKCIuY2hpcCA2ODA0MFxuXHQiCisJCQkJICAgICAicGZsdXNoYW5cblx0IgorCQkJCSAgICAgIi5jaGlwIDY4ayIpOworCWVsc2UKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oInBmbHVzaCAjMCwjNCIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19mbHVzaF90bGIwNDBfb25lKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygiLmNoaXAgNjgwNDBcblx0IgorCQkJICAgICAicGZsdXNoICglMClcblx0IgorCQkJICAgICAiLmNoaXAgNjhrIgorCQkJICAgICA6IDogImEiIChhZGRyKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2ZsdXNoX3RsYl9vbmUodW5zaWduZWQgbG9uZyBhZGRyKQoreworCWlmIChDUFVfSVNfMDQwX09SXzA2MCkKKwkJX19mbHVzaF90bGIwNDBfb25lKGFkZHIpOworCWVsc2UKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oInBmbHVzaCAjMCwjNCwoJTApIiA6IDogImEiIChhZGRyKSk7Cit9CisKKyNkZWZpbmUgZmx1c2hfdGxiKCkgX19mbHVzaF90bGIoKQorCisvKgorICogZmx1c2ggYWxsIGF0YyBlbnRyaWVzIChib3RoIGtlcm5lbCBhbmQgdXNlci1zcGFjZSBlbnRyaWVzKS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9hbGwodm9pZCkKK3sKKwlpZiAoQ1BVX0lTXzA0MF9PUl8wNjApCisJCV9fYXNtX18gX192b2xhdGlsZV9fKCIuY2hpcCA2ODA0MFxuXHQiCisJCQkJICAgICAicGZsdXNoYVxuXHQiCisJCQkJICAgICAiLmNoaXAgNjhrIik7CisJZWxzZQorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygicGZsdXNoYSIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCWlmIChtbSA9PSBjdXJyZW50LT5hY3RpdmVfbW0pCisJCV9fZmx1c2hfdGxiKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCWlmICh2bWEtPnZtX21tID09IGN1cnJlbnQtPmFjdGl2ZV9tbSkgeworCQltbV9zZWdtZW50X3Qgb2xkX2ZzID0gZ2V0X2ZzKCk7CisJCXNldF9mcyhVU0VSX0RTKTsKKwkJX19mbHVzaF90bGJfb25lKGFkZHIpOworCQlzZXRfZnMob2xkX2ZzKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQkJICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJaWYgKHZtYS0+dm1fbW0gPT0gY3VycmVudC0+YWN0aXZlX21tKQorCQlfX2ZsdXNoX3RsYigpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX2tlcm5lbF9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwlmbHVzaF90bGJfYWxsKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfcGd0YWJsZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7Cit9CisKKyNlbHNlCisKKworLyogUmVzZXJ2ZWQgUE1FR3MuICovCitleHRlcm4gY2hhciBzdW4zX3Jlc2VydmVkX3BtZWdbU1VOM19QTUVHU19OVU1dOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcG1lZ192YWRkcltTVU4zX1BNRUdTX05VTV07CitleHRlcm4gdW5zaWduZWQgY2hhciBwbWVnX2FsbG9jW1NVTjNfUE1FR1NfTlVNXTsKK2V4dGVybiB1bnNpZ25lZCBjaGFyIHBtZWdfY3R4W1NVTjNfUE1FR1NfTlVNXTsKKworLyogRmx1c2ggYWxsIHVzZXJzcGFjZSBtYXBwaW5ncyBvbmUgYnkgb25lLi4uICAod2h5IG5vIGZsdXNoIGNvbW1hbmQsCisgICBzdW4/KSAqLworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9hbGwodm9pZCkKK3sKKyAgICAgICB1bnNpZ25lZCBsb25nIGFkZHI7CisgICAgICAgdW5zaWduZWQgY2hhciBjdHgsIG9sZGN0eDsKKworICAgICAgIG9sZGN0eCA9IHN1bjNfZ2V0X2NvbnRleHQoKTsKKyAgICAgICBmb3IoYWRkciA9IDB4MDAwMDAwMDA7IGFkZHIgPCBUQVNLX1NJWkU7IGFkZHIgKz0gU1VOM19QTUVHX1NJWkUpIHsKKwkgICAgICAgZm9yKGN0eCA9IDA7IGN0eCA8IDg7IGN0eCsrKSB7CisJCSAgICAgICBzdW4zX3B1dF9jb250ZXh0KGN0eCk7CisJCSAgICAgICBzdW4zX3B1dF9zZWdtYXAoYWRkciwgU1VOM19JTlZBTElEX1BNRUcpOworCSAgICAgICB9CisgICAgICAgfQorCisgICAgICAgc3VuM19wdXRfY29udGV4dChvbGRjdHgpOworICAgICAgIC8qIGVyYXNlIGFsbCBvZiB0aGUgdXNlcnNwYWNlIHBtZWcgbWFwcywgd2UndmUgY2xvYmJlcmVkIHRoZW0KKwkgIGFsbCBhbnl3YXkgKi8KKyAgICAgICBmb3IoYWRkciA9IDA7IGFkZHIgPCBTVU4zX0lOVkFMSURfUE1FRzsgYWRkcisrKSB7CisJICAgICAgIGlmKHBtZWdfYWxsb2NbYWRkcl0gPT0gMSkgeworCQkgICAgICAgcG1lZ19hbGxvY1thZGRyXSA9IDA7CisJCSAgICAgICBwbWVnX2N0eFthZGRyXSA9IDA7CisJCSAgICAgICBwbWVnX3ZhZGRyW2FkZHJdID0gMDsKKwkgICAgICAgfQorICAgICAgIH0KKworfQorCisvKiBDbGVhciB1c2VyIFRMQiBlbnRyaWVzIHdpdGhpbiB0aGUgY29udGV4dCBuYW1lZCBpbiBtbSAqLworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9tbSAoc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisgICAgIHVuc2lnbmVkIGNoYXIgb2xkY3R4OworICAgICB1bnNpZ25lZCBjaGFyIHNlZzsKKyAgICAgdW5zaWduZWQgbG9uZyBpOworCisgICAgIG9sZGN0eCA9IHN1bjNfZ2V0X2NvbnRleHQoKTsKKyAgICAgc3VuM19wdXRfY29udGV4dChtbS0+Y29udGV4dCk7CisKKyAgICAgZm9yKGkgPSAwOyBpIDwgVEFTS19TSVpFOyBpICs9IFNVTjNfUE1FR19TSVpFKSB7CisJICAgICBzZWcgPSBzdW4zX2dldF9zZWdtYXAoaSk7CisJICAgICBpZihzZWcgPT0gU1VOM19JTlZBTElEX1BNRUcpCisJCSAgICAgY29udGludWU7CisKKwkgICAgIHN1bjNfcHV0X3NlZ21hcChpLCBTVU4zX0lOVkFMSURfUE1FRyk7CisJICAgICBwbWVnX2FsbG9jW3NlZ10gPSAwOworCSAgICAgcG1lZ19jdHhbc2VnXSA9IDA7CisJICAgICBwbWVnX3ZhZGRyW3NlZ10gPSAwOworICAgICB9CisKKyAgICAgc3VuM19wdXRfY29udGV4dChvbGRjdHgpOworCit9CisKKy8qIEZsdXNoIGEgc2luZ2xlIFRMQiBwYWdlLiBJbiB0aGlzIGNhc2UsIHdlJ3JlIGxpbWl0ZWQgdG8gZmx1c2hpbmcgYQorICAgc2luZ2xlIFBNRUcgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfcGFnZSAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQkJICAgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCXVuc2lnbmVkIGNoYXIgb2xkY3R4OworCXVuc2lnbmVkIGNoYXIgaTsKKworCW9sZGN0eCA9IHN1bjNfZ2V0X2NvbnRleHQoKTsKKwlzdW4zX3B1dF9jb250ZXh0KHZtYS0+dm1fbW0tPmNvbnRleHQpOworCWFkZHIgJj0gflNVTjNfUE1FR19NQVNLOworCWlmKChpID0gc3VuM19nZXRfc2VnbWFwKGFkZHIpKSAhPSBTVU4zX0lOVkFMSURfUE1FRykKKwl7CisJCXBtZWdfYWxsb2NbaV0gPSAwOworCQlwbWVnX2N0eFtpXSA9IDA7CisJCXBtZWdfdmFkZHJbaV0gPSAwOworCQlzdW4zX3B1dF9zZWdtYXAgKGFkZHIsICBTVU4zX0lOVkFMSURfUE1FRyk7CisJfQorCXN1bjNfcHV0X2NvbnRleHQob2xkY3R4KTsKKworfQorLyogRmx1c2ggYSByYW5nZSBvZiBwYWdlcyBmcm9tIFRMQi4gKi8KKworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9yYW5nZSAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCSAgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdm1hLT52bV9tbTsKKwl1bnNpZ25lZCBjaGFyIHNlZywgb2xkY3R4OworCisJc3RhcnQgJj0gflNVTjNfUE1FR19NQVNLOworCisJb2xkY3R4ID0gc3VuM19nZXRfY29udGV4dCgpOworCXN1bjNfcHV0X2NvbnRleHQobW0tPmNvbnRleHQpOworCisJd2hpbGUoc3RhcnQgPCBlbmQpCisJeworCQlpZigoc2VnID0gc3VuM19nZXRfc2VnbWFwKHN0YXJ0KSkgPT0gU1VOM19JTlZBTElEX1BNRUcpCisJCSAgICAgZ290byBuZXh0OworCQlpZihwbWVnX2N0eFtzZWddID09IG1tLT5jb250ZXh0KSB7CisJCQlwbWVnX2FsbG9jW3NlZ10gPSAwOworCQkJcG1lZ19jdHhbc2VnXSA9IDA7CisJCQlwbWVnX3ZhZGRyW3NlZ10gPSAwOworCQl9CisJCXN1bjNfcHV0X3NlZ21hcChzdGFydCwgU1VOM19JTlZBTElEX1BNRUcpOworCW5leHQ6CisJCXN0YXJ0ICs9IFNVTjNfUE1FR19TSVpFOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJZmx1c2hfdGxiX2FsbCgpOworfQorCisvKiBGbHVzaCBrZXJuZWwgcGFnZSBmcm9tIFRMQi4gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfa2VybmVsX3BhZ2UgKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlzdW4zX3B1dF9zZWdtYXAgKGFkZHIgJiB+KFNVTjNfUE1FR19TSVpFIC0gMSksIFNVTjNfSU5WQUxJRF9QTUVHKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9wZ3RhYmxlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKK30KKworI2VuZGlmCisKKyNlbmRpZiAvKiBfTTY4S19UTEJGTFVTSF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL3RvcG9sb2d5LmggYi9pbmNsdWRlL2FzbS1tNjhrL3RvcG9sb2d5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ExNzNlOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvdG9wb2xvZ3kuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX0FTTV9NNjhLX1RPUE9MT0dZX0gKKyNkZWZpbmUgX0FTTV9NNjhLX1RPUE9MT0dZX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3RvcG9sb2d5Lmg+CisKKyNlbmRpZiAvKiBfQVNNX002OEtfVE9QT0xPR1lfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay90cmFwcy5oIGIvaW5jbHVkZS9hc20tbTY4ay90cmFwcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3NTA1NjEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL3RyYXBzLmgKQEAgLTAsMCArMSwyNjUgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20vdHJhcHMuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTMgICAgICAgIEhhbWlzaCBNYWNkb25hbGQKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfTTY4S19UUkFQU19ICisjZGVmaW5lIF9NNjhLX1RSQVBTX0gKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKwordHlwZWRlZiB2b2lkICgqZV92ZWN0b3IpKHZvaWQpOworCitleHRlcm4gZV92ZWN0b3IgdmVjdG9yc1tdOworCisjZW5kaWYKKworI2RlZmluZSBWRUNfUkVTRVRTUCAoMCkKKyNkZWZpbmUgVkVDX1JFU0VUUEMgKDEpCisjZGVmaW5lIFZFQ19CVVNFUlIgICgyKQorI2RlZmluZSBWRUNfQUREUkVSUiAoMykKKyNkZWZpbmUgVkVDX0lMTEVHQUwgKDQpCisjZGVmaW5lIFZFQ19aRVJPRElWICg1KQorI2RlZmluZSBWRUNfQ0hLICAgICAoNikKKyNkZWZpbmUgVkVDX1RSQVAgICAgKDcpCisjZGVmaW5lIFZFQ19QUklWICAgICg4KQorI2RlZmluZSBWRUNfVFJBQ0UgICAoOSkKKyNkZWZpbmUgVkVDX0xJTkUxMCAgKDEwKQorI2RlZmluZSBWRUNfTElORTExICAoMTEpCisjZGVmaW5lIFZFQ19SRVNWMTIgICgxMikKKyNkZWZpbmUgVkVDX0NPUFJPQyAgKDEzKQorI2RlZmluZSBWRUNfRk9STUFUICAoMTQpCisjZGVmaW5lIFZFQ19VTklOVCAgICgxNSkKKyNkZWZpbmUgVkVDX1JFU1YxNiAgKDE2KQorI2RlZmluZSBWRUNfUkVTVjE3ICAoMTcpCisjZGVmaW5lIFZFQ19SRVNWMTggICgxOCkKKyNkZWZpbmUgVkVDX1JFU1YxOSAgKDE5KQorI2RlZmluZSBWRUNfUkVTVjIwICAoMjApCisjZGVmaW5lIFZFQ19SRVNWMjEgICgyMSkKKyNkZWZpbmUgVkVDX1JFU1YyMiAgKDIyKQorI2RlZmluZSBWRUNfUkVTVjIzICAoMjMpCisjZGVmaW5lIFZFQ19TUFVSICAgICgyNCkKKyNkZWZpbmUgVkVDX0lOVDEgICAgKDI1KQorI2RlZmluZSBWRUNfSU5UMiAgICAoMjYpCisjZGVmaW5lIFZFQ19JTlQzICAgICgyNykKKyNkZWZpbmUgVkVDX0lOVDQgICAgKDI4KQorI2RlZmluZSBWRUNfSU5UNSAgICAoMjkpCisjZGVmaW5lIFZFQ19JTlQ2ICAgICgzMCkKKyNkZWZpbmUgVkVDX0lOVDcgICAgKDMxKQorI2RlZmluZSBWRUNfU1lTICAgICAoMzIpCisjZGVmaW5lIFZFQ19UUkFQMSAgICgzMykKKyNkZWZpbmUgVkVDX1RSQVAyICAgKDM0KQorI2RlZmluZSBWRUNfVFJBUDMgICAoMzUpCisjZGVmaW5lIFZFQ19UUkFQNCAgICgzNikKKyNkZWZpbmUgVkVDX1RSQVA1ICAgKDM3KQorI2RlZmluZSBWRUNfVFJBUDYgICAoMzgpCisjZGVmaW5lIFZFQ19UUkFQNyAgICgzOSkKKyNkZWZpbmUgVkVDX1RSQVA4ICAgKDQwKQorI2RlZmluZSBWRUNfVFJBUDkgICAoNDEpCisjZGVmaW5lIFZFQ19UUkFQMTAgICg0MikKKyNkZWZpbmUgVkVDX1RSQVAxMSAgKDQzKQorI2RlZmluZSBWRUNfVFJBUDEyICAoNDQpCisjZGVmaW5lIFZFQ19UUkFQMTMgICg0NSkKKyNkZWZpbmUgVkVDX1RSQVAxNCAgKDQ2KQorI2RlZmluZSBWRUNfVFJBUDE1ICAoNDcpCisjZGVmaW5lIFZFQ19GUEJSVUMgICg0OCkKKyNkZWZpbmUgVkVDX0ZQSVIgICAgKDQ5KQorI2RlZmluZSBWRUNfRlBESVZaICAoNTApCisjZGVmaW5lIFZFQ19GUFVOREVSICg1MSkKKyNkZWZpbmUgVkVDX0ZQT0UgICAgKDUyKQorI2RlZmluZSBWRUNfRlBPVkVSICAoNTMpCisjZGVmaW5lIFZFQ19GUE5BTiAgICg1NCkKKyNkZWZpbmUgVkVDX0ZQVU5TVVAgKDU1KQorI2RlZmluZSBWRUNfTU1VQ0ZHICAoNTYpCisjZGVmaW5lIFZFQ19NTVVJTEwgICg1NykKKyNkZWZpbmUgVkVDX01NVUFDQyAgKDU4KQorI2RlZmluZSBWRUNfUkVTVjU5ICAoNTkpCisjZGVmaW5lCVZFQ19VTklNUEVBICg2MCkKKyNkZWZpbmUJVkVDX1VOSU1QSUkgKDYxKQorI2RlZmluZSBWRUNfUkVTVjYyICAoNjIpCisjZGVmaW5lIFZFQ19SRVNWNjMgICg2MykKKyNkZWZpbmUgVkVDX1VTRVIgICAgKDY0KQorCisjZGVmaW5lIFZFQ09GRih2ZWMpICgodmVjKTw8MikKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworLyogU3RhdHVzIHJlZ2lzdGVyIGJpdHMgKi8KKyNkZWZpbmUgUFNfVCAgKDB4ODAwMCkKKyNkZWZpbmUgUFNfUyAgKDB4MjAwMCkKKyNkZWZpbmUgUFNfTSAgKDB4MTAwMCkKKyNkZWZpbmUgUFNfQyAgKDB4MDAwMSkKKworLyogYml0cyBmb3IgNjgwMjAvNjgwMzAgc3BlY2lhbCBzdGF0dXMgd29yZCAqLworCisjZGVmaW5lIEZDICAgICgweDgwMDApCisjZGVmaW5lIEZCICAgICgweDQwMDApCisjZGVmaW5lIFJDICAgICgweDIwMDApCisjZGVmaW5lIFJCICAgICgweDEwMDApCisjZGVmaW5lIERGICAgICgweDAxMDApCisjZGVmaW5lIFJNICAgICgweDAwODApCisjZGVmaW5lIFJXICAgICgweDAwNDApCisjZGVmaW5lIFNaICAgICgweDAwMzApCisjZGVmaW5lIERGQyAgICgweDAwMDcpCisKKy8qIGJpdHMgZm9yIDY4MDMwIE1NVSBzdGF0dXMgcmVnaXN0ZXIgKG1tdXNyLHBzcikgKi8KKworI2RlZmluZSBNTVVfQgkgICAgICgweDgwMDApICAgIC8qIGJ1cyBlcnJvciAqLworI2RlZmluZSBNTVVfTAkgICAgICgweDQwMDApICAgIC8qIGxpbWl0IHZpb2xhdGlvbiAqLworI2RlZmluZSBNTVVfUwkgICAgICgweDIwMDApICAgIC8qIHN1cGVydmlzb3IgdmlvbGF0aW9uICovCisjZGVmaW5lIE1NVV9XUAkgICAgICgweDA4MDApICAgIC8qIHdyaXRlLXByb3RlY3RlZCAqLworI2RlZmluZSBNTVVfSQkgICAgICgweDA0MDApICAgIC8qIGludmFsaWQgZGVzY3JpcHRvciAqLworI2RlZmluZSBNTVVfTQkgICAgICgweDAyMDApICAgIC8qIEFUQyBlbnRyeSBtb2RpZmllZCAqLworI2RlZmluZSBNTVVfVAkgICAgICgweDAwNDApICAgIC8qIHRyYW5zcGFyZW50IHRyYW5zbGF0aW9uICovCisjZGVmaW5lIE1NVV9OVU0gICAgICAoMHgwMDA3KSAgICAvKiBudW1iZXIgb2YgbGV2ZWxzIHRyYXZlcnNlZCAqLworCisKKy8qIGJpdHMgZm9yIDY4MDQwIHNwZWNpYWwgc3RhdHVzIHdvcmQgKi8KKyNkZWZpbmUgQ1BfMDQwCSgweDgwMDApCisjZGVmaW5lIENVXzA0MAkoMHg0MDAwKQorI2RlZmluZSBDVF8wNDAJKDB4MjAwMCkKKyNkZWZpbmUgQ01fMDQwCSgweDEwMDApCisjZGVmaW5lIE1BXzA0MAkoMHgwODAwKQorI2RlZmluZSBBVENfMDQwICgweDA0MDApCisjZGVmaW5lIExLXzA0MAkoMHgwMjAwKQorI2RlZmluZSBSV18wNDAJKDB4MDEwMCkKKyNkZWZpbmUgU0laXzA0MCAoMHgwMDYwKQorI2RlZmluZSBUVF8wNDAJKDB4MDAxOCkKKyNkZWZpbmUgVE1fMDQwCSgweDAwMDcpCisKKy8qIGJpdHMgZm9yIDY4MDQwIHdyaXRlIGJhY2sgc3RhdHVzIHdvcmQgKi8KKyNkZWZpbmUgV0JWXzA0MCAgICgweDgwKQorI2RlZmluZSBXQlNJWl8wNDAgKDB4NjApCisjZGVmaW5lIFdCQllUXzA0MCAoMHgyMCkKKyNkZWZpbmUgV0JXUkRfMDQwICgweDQwKQorI2RlZmluZSBXQkxOR18wNDAgKDB4MDApCisjZGVmaW5lIFdCVFRfMDQwICAoMHgxOCkKKyNkZWZpbmUgV0JUTV8wNDAgICgweDA3KQorCisvKiBidXMgYWNjZXNzIHNpemUgY29kZXMgKi8KKyNkZWZpbmUgQkFfU0laRV9CWVRFICAgICgweDIwKQorI2RlZmluZSBCQV9TSVpFX1dPUkQgICAgKDB4NDApCisjZGVmaW5lIEJBX1NJWkVfTE9ORyAgICAoMHgwMCkKKyNkZWZpbmUgQkFfU0laRV9MSU5FICAgICgweDYwKQorCisvKiBidXMgYWNjZXNzIHRyYW5zZmVyIHR5cGUgY29kZXMgKi8KKyNkZWZpbmUgQkFfVFRfTU9WRTE2ICAgICgweDA4KQorCisvKiBiaXRzIGZvciA2ODA0MCBNTVUgc3RhdHVzIHJlZ2lzdGVyIChtbXVzcikgKi8KKyNkZWZpbmUgTU1VX0JfMDQwICAgKDB4MDgwMCkKKyNkZWZpbmUgTU1VX0dfMDQwICAgKDB4MDQwMCkKKyNkZWZpbmUgTU1VX1NfMDQwICAgKDB4MDA4MCkKKyNkZWZpbmUgTU1VX0NNXzA0MCAgKDB4MDA2MCkKKyNkZWZpbmUgTU1VX01fMDQwICAgKDB4MDAxMCkKKyNkZWZpbmUgTU1VX1dQXzA0MCAgKDB4MDAwNCkKKyNkZWZpbmUgTU1VX1RfMDQwICAgKDB4MDAwMikKKyNkZWZpbmUgTU1VX1JfMDQwICAgKDB4MDAwMSkKKworLyogYml0cyBpbiB0aGUgNjgwNjAgZmF1bHQgc3RhdHVzIGxvbmcgd29yZCAoRlNMVykgKi8KKyNkZWZpbmUJTU1VMDYwX01BCSgweDA4MDAwMDAwKQkvKiBtaXNhbGlnbmVkICovCisjZGVmaW5lCU1NVTA2MF9MSwkoMHgwMjAwMDAwMCkJLyogbG9ja2VkIHRyYW5zZmVyICovCisjZGVmaW5lCU1NVTA2MF9SVwkoMHgwMTgwMDAwMCkJLyogcmVhZC93cml0ZSAqLworIyBkZWZpbmUgTU1VMDYwX1JXX1cJKDB4MDA4MDAwMDApCS8qIHdyaXRlICovCisjIGRlZmluZSBNTVUwNjBfUldfUgkoMHgwMTAwMDAwMCkJLyogcmVhZCAqLworIyBkZWZpbmUgTU1VMDYwX1JXX1JNVwkoMHgwMTgwMDAwMCkJLyogcmVhZC9tb2RpZnkvd3JpdGUgKi8KKyMgZGVmaW5lIE1NVTA2MF9XCSgweDAwODAwMDAwKQkvKiBnZW5lcmFsIHdyaXRlLCBpbmNsdWRlcyBybXcgKi8KKyNkZWZpbmUJTU1VMDYwX1NJWgkoMHgwMDYwMDAwMCkJLyogdHJhbnNmZXIgc2l6ZSAqLworI2RlZmluZQlNTVUwNjBfVFQJKDB4MDAxODAwMDApCS8qIHRyYW5zZmVyIHR5cGUgKFRUKSBiaXRzICovCisjZGVmaW5lCU1NVTA2MF9UTQkoMHgwMDA3MDAwMCkJLyogdHJhbnNmZXIgbW9kaWZpZXIgKFRNKSBiaXRzICovCisjZGVmaW5lCU1NVTA2MF9JTwkoMHgwMDAwODAwMCkJLyogaW5zdHJ1Y3Rpb24gb3Igb3BlcmFuZCAqLworI2RlZmluZQlNTVUwNjBfUEJFCSgweDAwMDA0MDAwKQkvKiBwdXNoIGJ1ZmZlciBidXMgZXJyb3IgKi8KKyNkZWZpbmUJTU1VMDYwX1NCRQkoMHgwMDAwMjAwMCkJLyogc3RvcmUgYnVmZmVyIGJ1cyBlcnJvciAqLworI2RlZmluZQlNTVUwNjBfUFRBCSgweDAwMDAxMDAwKQkvKiBwb2ludGVyIEEgZmF1bHQgKi8KKyNkZWZpbmUJTU1VMDYwX1BUQgkoMHgwMDAwMDgwMCkJLyogcG9pbnRlciBCIGZhdWx0ICovCisjZGVmaW5lCU1NVTA2MF9JTAkoMHgwMDAwMDQwMCkJLyogZG91YmxlIGluZGlyZWN0IGRlc2NyIGZhdWx0ICovCisjZGVmaW5lCU1NVTA2MF9QRgkoMHgwMDAwMDIwMCkJLyogcGFnZSBmYXVsdCAoaW52YWxpZCBkZXNjcikgKi8KKyNkZWZpbmUJTU1VMDYwX1NQCSgweDAwMDAwMTAwKQkvKiBzdXBlcnZpc29yIHByb3RlY3Rpb24gKi8KKyNkZWZpbmUJTU1VMDYwX1dQCSgweDAwMDAwMDgwKQkvKiB3cml0ZSBwcm90ZWN0aW9uICovCisjZGVmaW5lCU1NVTA2MF9UV0UJKDB4MDAwMDAwNDApCS8qIGJ1cyBlcnJvciBvbiB0YWJsZSBzZWFyY2ggKi8KKyNkZWZpbmUJTU1VMDYwX1JFCSgweDAwMDAwMDIwKQkvKiBidXMgZXJyb3Igb24gcmVhZCAqLworI2RlZmluZQlNTVUwNjBfV0UJKDB4MDAwMDAwMTApCS8qIGJ1cyBlcnJvciBvbiB3cml0ZSAqLworI2RlZmluZQlNTVUwNjBfVFRSCSgweDAwMDAwMDA4KQkvKiBlcnJvciBjYXVzZWQgYnkgVFRSIHRyYW5zbGF0aW9uICovCisjZGVmaW5lCU1NVTA2MF9CUEUJKDB4MDAwMDAwMDQpCS8qIGJyYW5jaCBwcmVkaWN0aW9uIGVycm9yICovCisjZGVmaW5lCU1NVTA2MF9TRUUJKDB4MDAwMDAwMDEpCS8qIHNvZnR3YXJlIGVtdWxhdGVkIGVycm9yICovCisKKy8qIGNhc2VzIG9mIG1pc3Npbmcgb3IgaW52YWxpZCBkZXNjcmlwdG9ycyAqLworI2RlZmluZSBNTVUwNjBfREVTQ19FUlIgKE1NVTA2MF9QVEEgfCBNTVUwNjBfUFRCIHwgXAorCQkJIE1NVTA2MF9JTCAgfCBNTVUwNjBfUEYpCisvKiBiaXRzIHRoYXQgaW5kaWNhdGUgcmVhbCBlcnJvcnMgKi8KKyNkZWZpbmUgTU1VMDYwX0VSUl9CSVRTIChNTVUwNjBfUEJFIHwgTU1VMDYwX1NCRSB8IE1NVTA2MF9ERVNDX0VSUiB8IE1NVTA2MF9TUCB8IFwKKwkJCSBNTVUwNjBfV1AgIHwgTU1VMDYwX1RXRSB8IE1NVTA2MF9SRSAgICAgICB8IE1NVTA2MF9XRSkKKworLyogc3RydWN0dXJlIGZvciBzdGFjayBmcmFtZXMgKi8KKworc3RydWN0IGZyYW1lIHsKKyAgICBzdHJ1Y3QgcHRfcmVncyBwdHJlZ3M7CisgICAgdW5pb24geworCSAgICBzdHJ1Y3QgeworCQkgICAgdW5zaWduZWQgbG9uZyAgaWFkZHI7ICAgIC8qIGluc3RydWN0aW9uIGFkZHJlc3MgKi8KKwkgICAgfSBmbXQyOworCSAgICBzdHJ1Y3QgeworCQkgICAgdW5zaWduZWQgbG9uZyAgZWZmYWRkcjsgIC8qIGVmZmVjdGl2ZSBhZGRyZXNzICovCisJICAgIH0gZm10MzsKKwkgICAgc3RydWN0IHsKKwkJICAgIHVuc2lnbmVkIGxvbmcgIGVmZmFkZHI7ICAvKiBlZmZlY3RpdmUgYWRkcmVzcyAqLworCQkgICAgdW5zaWduZWQgbG9uZyAgcGM7CSAgICAgLyogcGMgb2YgZmF1bHRlZCBpbnN0ciAqLworCSAgICB9IGZtdDQ7CisJICAgIHN0cnVjdCB7CisJCSAgICB1bnNpZ25lZCBsb25nICBlZmZhZGRyOyAgLyogZWZmZWN0aXZlIGFkZHJlc3MgKi8KKwkJICAgIHVuc2lnbmVkIHNob3J0IHNzdzsgICAgICAvKiBzcGVjaWFsIHN0YXR1cyB3b3JkICovCisJCSAgICB1bnNpZ25lZCBzaG9ydCB3YjNzOyAgICAgLyogd3JpdGUgYmFjayAzIHN0YXR1cyAqLworCQkgICAgdW5zaWduZWQgc2hvcnQgd2IyczsgICAgIC8qIHdyaXRlIGJhY2sgMiBzdGF0dXMgKi8KKwkJICAgIHVuc2lnbmVkIHNob3J0IHdiMXM7ICAgICAvKiB3cml0ZSBiYWNrIDEgc3RhdHVzICovCisJCSAgICB1bnNpZ25lZCBsb25nICBmYWRkcjsgICAgLyogZmF1bHQgYWRkcmVzcyAqLworCQkgICAgdW5zaWduZWQgbG9uZyAgd2IzYTsgICAgIC8qIHdyaXRlIGJhY2sgMyBhZGRyZXNzICovCisJCSAgICB1bnNpZ25lZCBsb25nICB3YjNkOyAgICAgLyogd3JpdGUgYmFjayAzIGRhdGEgKi8KKwkJICAgIHVuc2lnbmVkIGxvbmcgIHdiMmE7ICAgICAvKiB3cml0ZSBiYWNrIDIgYWRkcmVzcyAqLworCQkgICAgdW5zaWduZWQgbG9uZyAgd2IyZDsgICAgIC8qIHdyaXRlIGJhY2sgMiBkYXRhICovCisJCSAgICB1bnNpZ25lZCBsb25nICB3YjFhOyAgICAgLyogd3JpdGUgYmFjayAxIGFkZHJlc3MgKi8KKwkJICAgIHVuc2lnbmVkIGxvbmcgIHdiMWRwZDA7ICAvKiB3cml0ZSBiYWNrIDEgZGF0YS9wdXNoIGRhdGEgMCovCisJCSAgICB1bnNpZ25lZCBsb25nICBwZDE7ICAgICAgLyogcHVzaCBkYXRhIDEqLworCQkgICAgdW5zaWduZWQgbG9uZyAgcGQyOyAgICAgIC8qIHB1c2ggZGF0YSAyKi8KKwkJICAgIHVuc2lnbmVkIGxvbmcgIHBkMzsgICAgICAvKiBwdXNoIGRhdGEgMyovCisJICAgIH0gZm10NzsKKwkgICAgc3RydWN0IHsKKwkJICAgIHVuc2lnbmVkIGxvbmcgIGlhZGRyOyAgICAvKiBpbnN0cnVjdGlvbiBhZGRyZXNzICovCisJCSAgICB1bnNpZ25lZCBzaG9ydCBpbnQxWzRdOyAgLyogaW50ZXJuYWwgcmVnaXN0ZXJzICovCisJICAgIH0gZm10OTsKKwkgICAgc3RydWN0IHsKKwkJICAgIHVuc2lnbmVkIHNob3J0IGludDE7CisJCSAgICB1bnNpZ25lZCBzaG9ydCBzc3c7ICAgICAgLyogc3BlY2lhbCBzdGF0dXMgd29yZCAqLworCQkgICAgdW5zaWduZWQgc2hvcnQgaXNjOyAgICAgIC8qIGluc3RydWN0aW9uIHN0YWdlIGMgKi8KKwkJICAgIHVuc2lnbmVkIHNob3J0IGlzYjsgICAgICAvKiBpbnN0cnVjdGlvbiBzdGFnZSBiICovCisJCSAgICB1bnNpZ25lZCBsb25nICBkYWRkcjsgICAgLyogZGF0YSBjeWNsZSBmYXVsdCBhZGRyZXNzICovCisJCSAgICB1bnNpZ25lZCBzaG9ydCBpbnQyWzJdOworCQkgICAgdW5zaWduZWQgbG9uZyAgZG9idWY7ICAgIC8qIGRhdGEgY3ljbGUgb3V0cHV0IGJ1ZmZlciAqLworCQkgICAgdW5zaWduZWQgc2hvcnQgaW50M1syXTsKKwkgICAgfSBmbXRhOworCSAgICBzdHJ1Y3QgeworCQkgICAgdW5zaWduZWQgc2hvcnQgaW50MTsKKwkJICAgIHVuc2lnbmVkIHNob3J0IHNzdzsgICAgIC8qIHNwZWNpYWwgc3RhdHVzIHdvcmQgKi8KKwkJICAgIHVuc2lnbmVkIHNob3J0IGlzYzsgICAgIC8qIGluc3RydWN0aW9uIHN0YWdlIGMgKi8KKwkJICAgIHVuc2lnbmVkIHNob3J0IGlzYjsgICAgIC8qIGluc3RydWN0aW9uIHN0YWdlIGIgKi8KKwkJICAgIHVuc2lnbmVkIGxvbmcgIGRhZGRyOyAgIC8qIGRhdGEgY3ljbGUgZmF1bHQgYWRkcmVzcyAqLworCQkgICAgdW5zaWduZWQgc2hvcnQgaW50MlsyXTsKKwkJICAgIHVuc2lnbmVkIGxvbmcgIGRvYnVmOyAgIC8qIGRhdGEgY3ljbGUgb3V0cHV0IGJ1ZmZlciAqLworCQkgICAgdW5zaWduZWQgc2hvcnQgaW50M1s0XTsKKwkJICAgIHVuc2lnbmVkIGxvbmcgIGJhZGRyOyAgIC8qIHN0YWdlIEIgYWRkcmVzcyAqLworCQkgICAgdW5zaWduZWQgc2hvcnQgaW50NFsyXTsKKwkJICAgIHVuc2lnbmVkIGxvbmcgIGRpYnVmOyAgIC8qIGRhdGEgY3ljbGUgaW5wdXQgYnVmZmVyICovCisJCSAgICB1bnNpZ25lZCBzaG9ydCBpbnQ1WzNdOworCQkgICAgdW5zaWduZWQJICAgdmVyIDogNDsgLyogc3RhY2sgZnJhbWUgdmVyc2lvbiAjICovCisJCSAgICB1bnNpZ25lZAkgICBpbnQ2OjEyOworCQkgICAgdW5zaWduZWQgc2hvcnQgaW50N1sxOF07CisJICAgIH0gZm10YjsKKyAgICB9IHVuOworfTsKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYgLyogX002OEtfVFJBUFNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay90eXBlcy5oIGIvaW5jbHVkZS9hc20tbTY4ay90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzOTFjYmUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL3R5cGVzLmgKQEAgLTAsMCArMSw2OSBAQAorI2lmbmRlZiBfTTY4S19UWVBFU19ICisjZGVmaW5lIF9NNjhLX1RZUEVTX0gKKworLyoKKyAqIFRoaXMgZmlsZSBpcyBuZXZlciBpbmNsdWRlZCBieSBhcHBsaWNhdGlvbiBzb2Z0d2FyZSB1bmxlc3MKKyAqIGV4cGxpY2l0bHkgcmVxdWVzdGVkIChlLmcuLCB2aWEgbGludXgvdHlwZXMuaCkgaW4gd2hpY2ggY2FzZSB0aGUKKyAqIGFwcGxpY2F0aW9uIGlzIExpbnV4IHNwZWNpZmljIHNvICh1c2VyLSkgbmFtZSBzcGFjZSBwb2xsdXRpb24gaXMKKyAqIG5vdCBhIG1ham9yIGlzc3VlLiAgSG93ZXZlciwgZm9yIGludGVyb3BlcmFiaWxpdHksIGxpYnJhcmllcyBzdGlsbAorICogbmVlZCB0byBiZSBjYXJlZnVsIHRvIGF2b2lkIGEgbmFtZSBjbGFzaGVzLgorICovCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgdW1vZGVfdDsKKworLyoKKyAqIF9feHggaXMgb2s6IGl0IGRvZXNuJ3QgcG9sbHV0ZSB0aGUgUE9TSVggbmFtZXNwYWNlLiBVc2UgdGhlc2UgaW4gdGhlCisgKiBoZWFkZXIgZmlsZXMgZXhwb3J0ZWQgdG8gdXNlciBzcGFjZQorICovCisKK3R5cGVkZWYgX19zaWduZWRfXyBjaGFyIF9fczg7Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191ODsKKwordHlwZWRlZiBfX3NpZ25lZF9fIHNob3J0IF9fczE2OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX3UxNjsKKwordHlwZWRlZiBfX3NpZ25lZF9fIGludCBfX3MzMjsKK3R5cGVkZWYgdW5zaWduZWQgaW50IF9fdTMyOworCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoX19TVFJJQ1RfQU5TSV9fKQordHlwZWRlZiBfX3NpZ25lZF9fIGxvbmcgbG9uZyBfX3M2NDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIF9fdTY0OworI2VuZGlmCisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworLyoKKyAqIFRoZXNlIGFyZW4ndCBleHBvcnRlZCBvdXRzaWRlIHRoZSBrZXJuZWwgdG8gYXZvaWQgbmFtZSBzcGFjZSBjbGFzaGVzCisgKi8KKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNkZWZpbmUgQklUU19QRVJfTE9ORyAzMgorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCit0eXBlZGVmIHNpZ25lZCBjaGFyIHM4OwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIHU4OworCit0eXBlZGVmIHNpZ25lZCBzaG9ydCBzMTY7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHUxNjsKKwordHlwZWRlZiBzaWduZWQgaW50IHMzMjsKK3R5cGVkZWYgdW5zaWduZWQgaW50IHUzMjsKKwordHlwZWRlZiBzaWduZWQgbG9uZyBsb25nIHM2NDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHU2NDsKKworLyogRE1BIGFkZHJlc3NlcyBhcmUgYWx3YXlzIDMyLWJpdHMgd2lkZSAqLworCit0eXBlZGVmIHUzMiBkbWFfYWRkcl90OwordHlwZWRlZiB1MzIgZG1hNjRfYWRkcl90OworCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGttZW1fYnVmY3RsX3Q7CisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9NNjhLX1RZUEVTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvdWFjY2Vzcy5oIGIvaW5jbHVkZS9hc20tbTY4ay91YWNjZXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA1ZTZjYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvdWFjY2Vzcy5oCkBAIC0wLDAgKzEsODkzIEBACisjaWZuZGVmIF9fTTY4S19VQUNDRVNTX0gKKyNkZWZpbmUgX19NNjhLX1VBQ0NFU1NfSAorCisvKgorICogVXNlciBzcGFjZSBtZW1vcnkgYWNjZXNzIGZ1bmN0aW9ucworICovCisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CisKKyNkZWZpbmUgVkVSSUZZX1JFQUQJMAorI2RlZmluZSBWRVJJRllfV1JJVEUJMQorCisvKiBXZSBsZXQgdGhlIE1NVSBkbyBhbGwgY2hlY2tpbmcgKi8KKyNkZWZpbmUgYWNjZXNzX29rKHR5cGUsYWRkcixzaXplKSAxCisKKy8qIHRoaXMgZnVuY3Rpb24gd2lsbCBnbyBhd2F5IHNvb24gLSB1c2UgYWNjZXNzX29rKCkgaW5zdGVhZCAqLworc3RhdGljIGlubGluZSBpbnQgX19kZXByZWNhdGVkIHZlcmlmeV9hcmVhKGludCB0eXBlLCBjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJcmV0dXJuIGFjY2Vzc19vayh0eXBlLGFkZHIsc2l6ZSkgPyAwIDogLUVGQVVMVDsKK30KKworLyoKKyAqIFRoZSBleGNlcHRpb24gdGFibGUgY29uc2lzdHMgb2YgcGFpcnMgb2YgYWRkcmVzc2VzOiB0aGUgZmlyc3QgaXMgdGhlCisgKiBhZGRyZXNzIG9mIGFuIGluc3RydWN0aW9uIHRoYXQgaXMgYWxsb3dlZCB0byBmYXVsdCwgYW5kIHRoZSBzZWNvbmQgaXMKKyAqIHRoZSBhZGRyZXNzIGF0IHdoaWNoIHRoZSBwcm9ncmFtIHNob3VsZCBjb250aW51ZS4gIE5vIHJlZ2lzdGVycyBhcmUKKyAqIG1vZGlmaWVkLCBzbyBpdCBpcyBlbnRpcmVseSB1cCB0byB0aGUgY29udGludWF0aW9uIGNvZGUgdG8gZmlndXJlIG91dAorICogd2hhdCB0byBkby4KKyAqCisgKiBBbGwgdGhlIHJvdXRpbmVzIGJlbG93IHVzZSBiaXRzIG9mIGZpeHVwIGNvZGUgdGhhdCBhcmUgb3V0IG9mIGxpbmUKKyAqIHdpdGggdGhlIG1haW4gaW5zdHJ1Y3Rpb24gcGF0aC4gIFRoaXMgbWVhbnMgd2hlbiBldmVyeXRoaW5nIGlzIHdlbGwsCisgKiB3ZSBkb24ndCBldmVuIGhhdmUgdG8ganVtcCBvdmVyIHRoZW0uICBGdXJ0aGVyLCB0aGV5IGRvIG5vdCBpbnRydWRlCisgKiBvbiBvdXIgY2FjaGUgb3IgdGxiIGVudHJpZXMuCisgKi8KKworc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeQoreworCXVuc2lnbmVkIGxvbmcgaW5zbiwgZml4dXA7Cit9OworCisKKy8qCisgKiBUaGVzZSBhcmUgdGhlIG1haW4gc2luZ2xlLXZhbHVlIHRyYW5zZmVyIHJvdXRpbmVzLiAgVGhleSBhdXRvbWF0aWNhbGx5CisgKiB1c2UgdGhlIHJpZ2h0IHNpemUgaWYgd2UganVzdCBoYXZlIHRoZSByaWdodCBwb2ludGVyIHR5cGUuCisgKi8KKworI2RlZmluZSBwdXRfdXNlcih4LCBwdHIpCQkJCVwKKyh7CQkJCQkJCVwKKyAgICBpbnQgX19wdV9lcnI7CQkJCQlcCisgICAgdHlwZW9mKCoocHRyKSkgX19wdV92YWwgPSAoeCk7CQkJXAorICAgIHN3aXRjaCAoc2l6ZW9mICgqKHB0cikpKSB7CQkJCVwKKyAgICBjYXNlIDE6CQkJCQkJXAorCV9fcHV0X3VzZXJfYXNtKF9fcHVfZXJyLCBfX3B1X3ZhbCwgcHRyLCBiKTsJXAorCWJyZWFrOwkJCQkJCVwKKyAgICBjYXNlIDI6CQkJCQkJXAorCV9fcHV0X3VzZXJfYXNtKF9fcHVfZXJyLCBfX3B1X3ZhbCwgcHRyLCB3KTsJXAorCWJyZWFrOwkJCQkJCVwKKyAgICBjYXNlIDQ6CQkJCQkJXAorCV9fcHV0X3VzZXJfYXNtKF9fcHVfZXJyLCBfX3B1X3ZhbCwgcHRyLCBsKTsJXAorCWJyZWFrOwkJCQkJCVwKKyAgICBjYXNlIDg6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fcHVfZXJyID0gX19jb25zdGFudF9jb3B5X3RvX3VzZXIocHRyLCAmX19wdV92YWwsIDgpOyAgICAgICAgXAorICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZGVmYXVsdDoJCQkJCQlcCisJX19wdV9lcnIgPSBfX3B1dF91c2VyX2JhZCgpOwkJCVwKKwlicmVhazsJCQkJCQlcCisgICAgfQkJCQkJCQlcCisgICAgX19wdV9lcnI7CQkJCQkJXAorfSkKKyNkZWZpbmUgX19wdXRfdXNlcih4LCBwdHIpIHB1dF91c2VyKHgsIHB0cikKKworZXh0ZXJuIGludCBfX3B1dF91c2VyX2JhZCh2b2lkKTsKKworLyoKKyAqIFRlbGwgZ2NjIHdlIHJlYWQgZnJvbSBtZW1vcnkgaW5zdGVhZCBvZiB3cml0aW5nOiB0aGlzIGlzIGJlY2F1c2UKKyAqIHdlIGRvIG5vdCB3cml0ZSB0byBhbnkgbWVtb3J5IGdjYyBrbm93cyBhYm91dCwgc28gdGhlcmUgYXJlIG5vCisgKiBhbGlhc2luZyBpc3N1ZXMuCisgKi8KKyNkZWZpbmUgX19wdXRfdXNlcl9hc20oZXJyLHgscHRyLGJ3bCkJCQlcCitfX2FzbV9fIF9fdm9sYXRpbGVfXwkJCQkJXAorICAgICgiMjE6bW92ZXMiICNid2wgIiAlMiwlMVxuIgkJCQlcCisgICAgICIxOlxuIgkJCQkJCVwKKyAgICAgIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIJCQkJXAorICAgICAiICAgLmV2ZW5cbiIJCQkJCVwKKyAgICAgIjI6IG1vdmVsICUzLCUwXG4iCQkJCQlcCisgICAgICIgICBqcmEgMWJcbiIJCQkJCVwKKyAgICAgIi5wcmV2aW91c1xuIgkJCQkJXAorICAgICAiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgkJCVwKKyAgICAgIiAgIC5hbGlnbiA0XG4iCQkJCQlcCisgICAgICIgICAubG9uZyAyMWIsMmJcbiIJCQkJXAorICAgICAiICAgLmxvbmcgMWIsMmJcbiIJCQkJCVwKKyAgICAgIi5wcmV2aW91cyIJCQkJCVwKKyAgICAgOiAiPWQiKGVycikJCQkJCVwKKyAgICAgOiAibSIoKihwdHIpKSwgInIiKHgpLCAiaSIoLUVGQVVMVCksICIwIigwKSkKKworI2RlZmluZSBnZXRfdXNlcih4LCBwdHIpCQkJCQlcCisoewkJCQkJCQkJXAorICAgIGludCBfX2d1X2VycjsJCQkJCQlcCisgICAgdHlwZW9mKCoocHRyKSkgX19ndV92YWw7CQkJCQlcCisgICAgc3dpdGNoIChzaXplb2YoKihwdHIpKSkgewkJCQkJXAorICAgIGNhc2UgMToJCQkJCQkJXAorCV9fZ2V0X3VzZXJfYXNtKF9fZ3VfZXJyLCBfX2d1X3ZhbCwgcHRyLCBiLCAiPWQiKTsJXAorCWJyZWFrOwkJCQkJCQlcCisgICAgY2FzZSAyOgkJCQkJCQlcCisJX19nZXRfdXNlcl9hc20oX19ndV9lcnIsIF9fZ3VfdmFsLCBwdHIsIHcsICI9ciIpOwlcCisJYnJlYWs7CQkJCQkJCVwKKyAgICBjYXNlIDQ6CQkJCQkJCVwKKwlfX2dldF91c2VyX2FzbShfX2d1X2VyciwgX19ndV92YWwsIHB0ciwgbCwgIj1yIik7CVwKKwlicmVhazsJCQkJCQkJXAorICAgIGNhc2UgODogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgX19ndV9lcnIgPSBfX2NvbnN0YW50X2NvcHlfZnJvbV91c2VyKCZfX2d1X3ZhbCwgcHRyLCA4KTsgIFwKKyAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZGVmYXVsdDoJCQkJCQkJXAorCV9fZ3VfdmFsID0gMDsJCQkJCQlcCisJX19ndV9lcnIgPSBfX2dldF91c2VyX2JhZCgpOwkJCQlcCisJYnJlYWs7CQkJCQkJCVwKKyAgICB9CQkJCQkJCQlcCisgICAgKHgpID0gX19ndV92YWw7CQkJCQkJXAorICAgIF9fZ3VfZXJyOwkJCQkJCQlcCit9KQorI2RlZmluZSBfX2dldF91c2VyKHgsIHB0cikgZ2V0X3VzZXIoeCwgcHRyKQorCitleHRlcm4gaW50IF9fZ2V0X3VzZXJfYmFkKHZvaWQpOworCisjZGVmaW5lIF9fZ2V0X3VzZXJfYXNtKGVycix4LHB0cixid2wscmVnKQlcCitfX2FzbV9fIF9fdm9sYXRpbGVfXwkJCQlcCisgICAgKCIxOiBtb3ZlcyIgI2J3bCAiICUyLCUxXG4iCQkJXAorICAgICAiMjpcbiIJCQkJCVwKKyAgICAgIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIJCQlcCisgICAgICIgICAuZXZlblxuIgkJCQlcCisgICAgICIzOiBtb3ZlbCAlMywlMFxuIgkJCQlcCisgICAgICIgICBzdWIiICNid2wgIiAlMSwlMVxuIgkJCVwKKyAgICAgIiAgIGpyYSAyYlxuIgkJCQlcCisgICAgICIucHJldmlvdXNcbiIJCQkJXAorICAgICAiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgkJXAorICAgICAiICAgLmFsaWduIDRcbiIJCQkJXAorICAgICAiICAgLmxvbmcgMWIsM2JcbiIJCQkJXAorICAgICAiLnByZXZpb3VzIgkJCQlcCisgICAgIDogIj1kIihlcnIpLCByZWcoeCkJCQlcCisgICAgIDogIm0iKCoocHRyKSksICJpIiAoLUVGQVVMVCksICIwIigwKSkKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCitfX2dlbmVyaWNfY29weV9mcm9tX3VzZXIodm9pZCAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxvbmcgbikKK3sKKyAgICB1bnNpZ25lZCBsb25nIHRtcDsKKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXworCSgiICAgdHN0bCAlMlxuIgorCSAiICAgamVxIDJmXG4iCisJICIxOiBtb3Zlc2wgKCUxKSssJTNcbiIKKwkgIiAgIG1vdmVsICUzLCglMCkrXG4iCisJICIgICBzdWJxbCAjMSwlMlxuIgorCSAiICAgam5lIDFiXG4iCisJICIyOiBtb3ZlbCAlNCwlMlxuIgorCSAiICAgYmNsciAjMSwlMlxuIgorCSAiICAgamVxIDRmXG4iCisJICIzOiBtb3Zlc3cgKCUxKSssJTNcbiIKKwkgIiAgIG1vdmV3ICUzLCglMCkrXG4iCisJICI0OiBiY2xyICMwLCUyXG4iCisJICIgICBqZXEgNmZcbiIKKwkgIjU6IG1vdmVzYiAoJTEpKywlM1xuIgorCSAiICAgbW92ZWIgJTMsKCUwKStcbiIKKwkgIjY6XG4iCisJICIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iCisJICIgICAuZXZlblxuIgorCSAiNzogbW92ZWwgJTIsJSVkMFxuIgorCSAiNzE6Y2xybCAoJTApK1xuIgorCSAiICAgc3VicWwgIzEsJSVkMFxuIgorCSAiICAgam5lIDcxYlxuIgorCSAiICAgbHNsbCAjMiwlMlxuIgorCSAiICAgYWRkbCAlNCwlMlxuIgorCSAiICAgYnRzdCAjMSwlNFxuIgorCSAiICAgam5lIDgxZlxuIgorCSAiICAgYnRzdCAjMCwlNFxuIgorCSAiICAgam5lIDkxZlxuIgorCSAiICAganJhIDZiXG4iCisJICI4OiBhZGRxbCAjMiwlMlxuIgorCSAiODE6Y2xydyAoJTApK1xuIgorCSAiICAgYnRzdCAjMCwlNFxuIgorCSAiICAgam5lIDkxZlxuIgorCSAiICAganJhIDZiXG4iCisJICI5OiBhZGRxbCAjMSwlMlxuIgorCSAiOTE6Y2xyYiAoJTApK1xuIgorCSAiICAganJhIDZiXG4iCisgICAgICAgICAiLnByZXZpb3VzXG4iCisJICIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCisJICIgICAuYWxpZ24gNFxuIgorCSAiICAgLmxvbmcgMWIsN2JcbiIKKwkgIiAgIC5sb25nIDNiLDhiXG4iCisJICIgICAubG9uZyA1Yiw5YlxuIgorCSAiLnByZXZpb3VzIgorCSA6ICI9YSIodG8pLCAiPWEiKGZyb20pLCAiPWQiKG4pLCAiPSZkIih0bXApCisJIDogImQiKG4gJiAzKSwgIjAiKHRvKSwgIjEiKGZyb20pLCAiMiIobi80KQorCSA6ICJkMCIsICJtZW1vcnkiKTsKKyAgICByZXR1cm4gbjsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCitfX2dlbmVyaWNfY29weV90b191c2VyKHZvaWQgKnRvLCBjb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pCit7CisgICAgdW5zaWduZWQgbG9uZyB0bXA7CisgICAgX19hc21fXyBfX3ZvbGF0aWxlX18KKwkoIiAgIHRzdGwgJTJcbiIKKwkgIiAgIGplcSAzZlxuIgorCSAiMTogbW92ZWwgKCUxKSssJTNcbiIKKwkgIjIyOm1vdmVzbCAlMywoJTApK1xuIgorCSAiMjogc3VicWwgIzEsJTJcbiIKKwkgIiAgIGpuZSAxYlxuIgorCSAiMzogbW92ZWwgJTQsJTJcbiIKKwkgIiAgIGJjbHIgIzEsJTJcbiIKKwkgIiAgIGplcSA0ZlxuIgorCSAiICAgbW92ZXcgKCUxKSssJTNcbiIKKwkgIjI0Om1vdmVzdyAlMywoJTApK1xuIgorCSAiNDogYmNsciAjMCwlMlxuIgorCSAiICAgamVxIDVmXG4iCisJICIgICBtb3ZlYiAoJTEpKywlM1xuIgorCSAiMjU6bW92ZXNiICUzLCglMCkrXG4iCisJICI1OlxuIgorCSAiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIgorCSAiICAgLmV2ZW5cbiIKKwkgIjYwOmFkZHFsICMxLCUyXG4iCisJICI2OiBsc2xsICMyLCUyXG4iCisJICIgICBhZGRsICU0LCUyXG4iCisJICIgICBqcmEgNWJcbiIKKwkgIjc6IGFkZHFsICMyLCUyXG4iCisJICIgICBqcmEgNWJcbiIKKwkgIjg6IGFkZHFsICMxLCUyXG4iCisJICIgICBqcmEgNWJcbiIKKwkgIi5wcmV2aW91c1xuIgorCSAiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgorCSAiICAgLmFsaWduIDRcbiIKKwkgIiAgIC5sb25nIDFiLDYwYlxuIgorCSAiICAgLmxvbmcgMjJiLDZiXG4iCisJICIgICAubG9uZyAyYiw2YlxuIgorCSAiICAgLmxvbmcgMjRiLDdiXG4iCisJICIgICAubG9uZyAzYiw2MGJcbiIKKwkgIiAgIC5sb25nIDRiLDdiXG4iCisJICIgICAubG9uZyAyNWIsOGJcbiIKKwkgIiAgIC5sb25nIDViLDhiXG4iCisJICIucHJldmlvdXMiCisJIDogIj1hIih0byksICI9YSIoZnJvbSksICI9ZCIobiksICI9JmQiKHRtcCkKKwkgOiAiciIobiAmIDMpLCAiMCIodG8pLCAiMSIoZnJvbSksICIyIihuIC8gNCkKKwkgOiAibWVtb3J5Iik7CisgICAgcmV0dXJuIG47Cit9CisKKyNkZWZpbmUgX19jb3B5X2Zyb21fdXNlcl9iaWcodG8sIGZyb20sIG4sIGZpeHVwLCBjb3B5KQlcCisgICAgX19hc21fXyBfX3ZvbGF0aWxlX18JCQkJXAorCSgiMTA6IG1vdmVzbCAoJTEpKywlJWQwXG4iCQkJXAorCSAiICAgIG1vdmVsICUlZDAsKCUwKStcbiIJCQlcCisJICIgICAgc3VicWwgIzEsJTJcbiIJCQkJXAorCSAiICAgIGpuZSAxMGJcbiIJCQkJXAorCSAiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIgkJCVwKKwkgIiAgICAuZXZlblxuIgkJCQkJXAorCSAiMTE6IG1vdmVsICUyLCUlZDBcbiIJCQkJXAorCSAiMTM6IGNscmwgKCUwKStcbiIJCQkJXAorCSAiICAgIHN1YnFsICMxLCUlZDBcbiIJCQkJXAorCSAiICAgIGpuZSAxM2JcbiIJCQkJXAorCSAiICAgIGxzbGwgIzIsJTJcbiIJCQkJXAorCSBmaXh1cCAiXG4iCQkJCQlcCisJICIgICAganJhIDEyZlxuIgkJCQlcCisJICIucHJldmlvdXNcbiIJCQkJCVwKKwkgIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIJCQlcCisJICIgICAgLmFsaWduIDRcbiIJCQkJXAorCSAiICAgIC5sb25nIDEwYiwxMWJcbiIJCQkJXAorCSAiLnByZXZpb3VzXG4iCQkJCQlcCisJIGNvcHkgIlxuIgkJCQkJXAorCSAiMTI6IgkJCQkJCVwKKwkgOiAiPWEiKHRvKSwgIj1hIihmcm9tKSwgIj1kIihuKQkJXAorCSA6ICIwIih0byksICIxIihmcm9tKSwgIjIiKG4vNCkJCQlcCisJIDogImQwIiwgIm1lbW9yeSIpCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZworX19jb25zdGFudF9jb3B5X2Zyb21fdXNlcih2b2lkICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKQoreworICAgIHN3aXRjaCAobikgeworICAgIGNhc2UgMDoKKwlicmVhazsKKyAgICBjYXNlIDE6CisJX19hc21fXyBfX3ZvbGF0aWxlX18KKwkgICAgKCIxOiBtb3Zlc2IgKCUxKSssJSVkMFxuIgorCSAgICAgIiAgIG1vdmViICUlZDAsKCUwKStcbiIKKwkgICAgICIyOlxuIgorCSAgICAgIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIKKwkgICAgICIgICAuZXZlblxuIgorCSAgICAgIjM6IGFkZHFsICMxLCUyXG4iCisJICAgICAiICAgY2xyYiAoJTApK1xuIgorCSAgICAgIiAgIGpyYSAyYlxuIgorCSAgICAgIi5wcmV2aW91c1xuIgorCSAgICAgIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIKKwkgICAgICIgICAuYWxpZ24gNFxuIgorCSAgICAgIiAgIC5sb25nIDFiLDNiXG4iCisJICAgICAiLnByZXZpb3VzIgorCSAgICAgOiAiPWEiKHRvKSwgIj1hIihmcm9tKSwgIj1kIihuKQorCSAgICAgOiAiMCIodG8pLCAiMSIoZnJvbSksICIyIigwKQorCSAgICAgOiAiZDAiLCAibWVtb3J5Iik7CisJYnJlYWs7CisgICAgY2FzZSAyOgorCV9fYXNtX18gX192b2xhdGlsZV9fCisJICAgICgiMTogbW92ZXN3ICglMSkrLCUlZDBcbiIKKwkgICAgICIgICBtb3ZldyAlJWQwLCglMCkrXG4iCisJICAgICAiMjpcbiIKKwkgICAgICIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iCisJICAgICAiICAgLmV2ZW5cbiIKKwkgICAgICIzOiBhZGRxbCAjMiwlMlxuIgorCSAgICAgIiAgIGNscncgKCUwKStcbiIKKwkgICAgICIgICBqcmEgMmJcbiIKKwkgICAgICIucHJldmlvdXNcbiIKKwkgICAgICIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCisJICAgICAiICAgLmFsaWduIDRcbiIKKwkgICAgICIgICAubG9uZyAxYiwzYlxuIgorCSAgICAgIi5wcmV2aW91cyIKKwkgICAgIDogIj1hIih0byksICI9YSIoZnJvbSksICI9ZCIobikKKwkgICAgIDogIjAiKHRvKSwgIjEiKGZyb20pLCAiMiIoMCkKKwkgICAgIDogImQwIiwgIm1lbW9yeSIpOworCWJyZWFrOworICAgIGNhc2UgMzoKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXworCSAgICAoIjE6IG1vdmVzdyAoJTEpKywlJWQwXG4iCisJICAgICAiICAgbW92ZXcgJSVkMCwoJTApK1xuIgorCSAgICAgIjI6IG1vdmVzYiAoJTEpKywlJWQwXG4iCisJICAgICAiICAgbW92ZWIgJSVkMCwoJTApK1xuIgorCSAgICAgIjM6IgorCSAgICAgIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIKKwkgICAgICIgICAuZXZlblxuIgorCSAgICAgIjQ6IGFkZHFsICMyLCUyXG4iCisJICAgICAiICAgY2xydyAoJTApK1xuIgorCSAgICAgIjU6IGFkZHFsICMxLCUyXG4iCisJICAgICAiICAgY2xyYiAoJTApK1xuIgorCSAgICAgIiAgIGpyYSAzYlxuIgorCSAgICAgIi5wcmV2aW91c1xuIgorCSAgICAgIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIKKwkgICAgICIgICAuYWxpZ24gNFxuIgorCSAgICAgIiAgIC5sb25nIDFiLDRiXG4iCisJICAgICAiICAgLmxvbmcgMmIsNWJcbiIKKwkgICAgICIucHJldmlvdXMiCisJICAgICA6ICI9YSIodG8pLCAiPWEiKGZyb20pLCAiPWQiKG4pCisJICAgICA6ICIwIih0byksICIxIihmcm9tKSwgIjIiKDApCisJICAgICA6ICJkMCIsICJtZW1vcnkiKTsKKwlicmVhazsKKyAgICBjYXNlIDQ6CisJX19hc21fXyBfX3ZvbGF0aWxlX18KKwkgICAgKCIxOiBtb3Zlc2wgKCUxKSssJSVkMFxuIgorCSAgICAgIiAgIG1vdmVsICUlZDAsKCUwKStcbiIKKwkgICAgICIyOiIKKwkgICAgICIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iCisJICAgICAiICAgLmV2ZW5cbiIKKwkgICAgICIzOiBhZGRxbCAjNCwlMlxuIgorCSAgICAgIiAgIGNscmwgKCUwKStcbiIKKwkgICAgICIgICBqcmEgMmJcbiIKKwkgICAgICIucHJldmlvdXNcbiIKKwkgICAgICIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCisJICAgICAiICAgLmFsaWduIDRcbiIKKwkgICAgICIgICAubG9uZyAxYiwzYlxuIgorCSAgICAgIi5wcmV2aW91cyIKKwkgICAgIDogIj1hIih0byksICI9YSIoZnJvbSksICI9ZCIobikKKwkgICAgIDogIjAiKHRvKSwgIjEiKGZyb20pLCAiMiIoMCkKKwkgICAgIDogImQwIiwgIm1lbW9yeSIpOworCWJyZWFrOworICAgIGNhc2UgODoKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXworCSAgICAoIjE6IG1vdmVzbCAoJTEpKywlJWQwXG4iCisJICAgICAiICAgbW92ZWwgJSVkMCwoJTApK1xuIgorCSAgICAgIjI6IG1vdmVzbCAoJTEpKywlJWQwXG4iCisJICAgICAiICAgbW92ZWwgJSVkMCwoJTApK1xuIgorCSAgICAgIjM6IgorCSAgICAgIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIKKwkgICAgICIgICAuZXZlblxuIgorCSAgICAgIjQ6IGFkZHFsICM0LCUyXG4iCisJICAgICAiICAgY2xybCAoJTApK1xuIgorCSAgICAgIjU6IGFkZHFsICM0LCUyXG4iCisJICAgICAiICAgY2xybCAoJTApK1xuIgorCSAgICAgIiAgIGpyYSAzYlxuIgorCSAgICAgIi5wcmV2aW91c1xuIgorCSAgICAgIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIKKwkgICAgICIgICAuYWxpZ24gNFxuIgorCSAgICAgIiAgIC5sb25nIDFiLDRiXG4iCisJICAgICAiICAgLmxvbmcgMmIsNWJcbiIKKwkgICAgICIucHJldmlvdXMiCisJICAgICA6ICI9YSIodG8pLCAiPWEiKGZyb20pLCAiPWQiKG4pCisJICAgICA6ICIwIih0byksICIxIihmcm9tKSwgIjIiKDApCisJICAgICA6ICJkMCIsICJtZW1vcnkiKTsKKwlicmVhazsKKyAgICBjYXNlIDEyOgorCV9fYXNtX18gX192b2xhdGlsZV9fCisJICAgICgiMTogbW92ZXNsICglMSkrLCUlZDBcbiIKKwkgICAgICIgICBtb3ZlbCAlJWQwLCglMCkrXG4iCisJICAgICAiMjogbW92ZXNsICglMSkrLCUlZDBcbiIKKwkgICAgICIgICBtb3ZlbCAlJWQwLCglMCkrXG4iCisJICAgICAiMzogbW92ZXNsICglMSkrLCUlZDBcbiIKKwkgICAgICIgICBtb3ZlbCAlJWQwLCglMCkrXG4iCisJICAgICAiNDoiCisJICAgICAiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIgorCSAgICAgIiAgIC5ldmVuXG4iCisJICAgICAiNTogYWRkcWwgIzQsJTJcbiIKKwkgICAgICIgICBjbHJsICglMCkrXG4iCisJICAgICAiNjogYWRkcWwgIzQsJTJcbiIKKwkgICAgICIgICBjbHJsICglMCkrXG4iCisJICAgICAiNzogYWRkcWwgIzQsJTJcbiIKKwkgICAgICIgICBjbHJsICglMCkrXG4iCisJICAgICAiICAganJhIDRiXG4iCisJICAgICAiLnByZXZpb3VzXG4iCisJICAgICAiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgorCSAgICAgIiAgIC5hbGlnbiA0XG4iCisJICAgICAiICAgLmxvbmcgMWIsNWJcbiIKKwkgICAgICIgICAubG9uZyAyYiw2YlxuIgorCSAgICAgIiAgIC5sb25nIDNiLDdiXG4iCisJICAgICAiLnByZXZpb3VzIgorCSAgICAgOiAiPWEiKHRvKSwgIj1hIihmcm9tKSwgIj1kIihuKQorCSAgICAgOiAiMCIodG8pLCAiMSIoZnJvbSksICIyIigwKQorCSAgICAgOiAiZDAiLCAibWVtb3J5Iik7CisJYnJlYWs7CisgICAgY2FzZSAxNjoKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXworCSAgICAoIjE6IG1vdmVzbCAoJTEpKywlJWQwXG4iCisJICAgICAiICAgbW92ZWwgJSVkMCwoJTApK1xuIgorCSAgICAgIjI6IG1vdmVzbCAoJTEpKywlJWQwXG4iCisJICAgICAiICAgbW92ZWwgJSVkMCwoJTApK1xuIgorCSAgICAgIjM6IG1vdmVzbCAoJTEpKywlJWQwXG4iCisJICAgICAiICAgbW92ZWwgJSVkMCwoJTApK1xuIgorCSAgICAgIjQ6IG1vdmVzbCAoJTEpKywlJWQwXG4iCisJICAgICAiICAgbW92ZWwgJSVkMCwoJTApK1xuIgorCSAgICAgIjU6IgorCSAgICAgIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIKKwkgICAgICIgICAuZXZlblxuIgorCSAgICAgIjY6IGFkZHFsICM0LCUyXG4iCisJICAgICAiICAgY2xybCAoJTApK1xuIgorCSAgICAgIjc6IGFkZHFsICM0LCUyXG4iCisJICAgICAiICAgY2xybCAoJTApK1xuIgorCSAgICAgIjg6IGFkZHFsICM0LCUyXG4iCisJICAgICAiICAgY2xybCAoJTApK1xuIgorCSAgICAgIjk6IGFkZHFsICM0LCUyXG4iCisJICAgICAiICAgY2xybCAoJTApK1xuIgorCSAgICAgIiAgIGpyYSA1YlxuIgorCSAgICAgIi5wcmV2aW91c1xuIgorCSAgICAgIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIKKwkgICAgICIgICAuYWxpZ24gNFxuIgorCSAgICAgIiAgIC5sb25nIDFiLDZiXG4iCisJICAgICAiICAgLmxvbmcgMmIsN2JcbiIKKwkgICAgICIgICAubG9uZyAzYiw4YlxuIgorCSAgICAgIiAgIC5sb25nIDRiLDliXG4iCisJICAgICAiLnByZXZpb3VzIgorCSAgICAgOiAiPWEiKHRvKSwgIj1hIihmcm9tKSwgIj1kIihuKQorCSAgICAgOiAiMCIodG8pLCAiMSIoZnJvbSksICIyIigwKQorCSAgICAgOiAiZDAiLCAibWVtb3J5Iik7CisJYnJlYWs7CisgICAgZGVmYXVsdDoKKwlzd2l0Y2ggKG4gJiAzKSB7CisJY2FzZSAwOgorCSAgICBfX2NvcHlfZnJvbV91c2VyX2JpZyh0bywgZnJvbSwgbiwgIiIsICIiKTsKKwkgICAgYnJlYWs7CisJY2FzZSAxOgorCSAgICBfX2NvcHlfZnJvbV91c2VyX2JpZyh0bywgZnJvbSwgbiwKKwkJCQkgLyogZml4dXAgKi8KKwkJCQkgIjE6IGFkZHFsICMxLCUyXG4iCisJCQkJICIgICBjbHJiICglMCkrIiwKKwkJCQkgLyogY29weSAqLworCQkJCSAiMjogbW92ZXNiICglMSkrLCUlZDBcbiIKKwkJCQkgIiAgIG1vdmViICUlZDAsKCUwKStcbiIKKwkJCQkgIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIKKwkJCQkgIiAgIC5sb25nIDJiLDFiXG4iCisJCQkJICIucHJldmlvdXMiKTsKKwkgICAgYnJlYWs7CisJY2FzZSAyOgorCSAgICBfX2NvcHlfZnJvbV91c2VyX2JpZyh0bywgZnJvbSwgbiwKKwkJCQkgLyogZml4dXAgKi8KKwkJCQkgIjE6IGFkZHFsICMyLCUyXG4iCisJCQkJICIgICBjbHJ3ICglMCkrIiwKKwkJCQkgLyogY29weSAqLworCQkJCSAiMjogbW92ZXN3ICglMSkrLCUlZDBcbiIKKwkJCQkgIiAgIG1vdmV3ICUlZDAsKCUwKStcbiIKKwkJCQkgIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIKKwkJCQkgIiAgIC5sb25nIDJiLDFiXG4iCisJCQkJICIucHJldmlvdXMiKTsKKwkgICAgYnJlYWs7CisJY2FzZSAzOgorCSAgICBfX2NvcHlfZnJvbV91c2VyX2JpZyh0bywgZnJvbSwgbiwKKwkJCQkgLyogZml4dXAgKi8KKwkJCQkgIjE6IGFkZHFsICMyLCUyXG4iCisJCQkJICIgICBjbHJ3ICglMCkrXG4iCisJCQkJICIyOiBhZGRxbCAjMSwlMlxuIgorCQkJCSAiICAgY2xyYiAoJTApKyIsCisJCQkJIC8qIGNvcHkgKi8KKwkJCQkgIjM6IG1vdmVzdyAoJTEpKywlJWQwXG4iCisJCQkJICIgICBtb3ZldyAlJWQwLCglMCkrXG4iCisJCQkJICI0OiBtb3Zlc2IgKCUxKSssJSVkMFxuIgorCQkJCSAiICAgbW92ZWIgJSVkMCwoJTApK1xuIgorCQkJCSAiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgorCQkJCSAiICAgLmxvbmcgM2IsMWJcbiIKKwkJCQkgIiAgIC5sb25nIDRiLDJiXG4iCisJCQkJICIucHJldmlvdXMiKTsKKwkgICAgYnJlYWs7CisJfQorCWJyZWFrOworICAgIH0KKyAgICByZXR1cm4gbjsKK30KKworI2RlZmluZSBfX2NvcHlfdG9fdXNlcl9iaWcodG8sIGZyb20sIG4sIGZpeHVwLCBjb3B5KQlcCisgICAgX19hc21fXyBfX3ZvbGF0aWxlX18JCQkJXAorCSgiMTA6IG1vdmVsICglMSkrLCUlZDBcbiIJCQlcCisJICIzMTogbW92ZXNsICUlZDAsKCUwKStcbiIJCQlcCisJICIxMTogc3VicWwgIzEsJTJcbiIJCQkJXAorCSAiICAgIGpuZSAxMGJcbiIJCQkJXAorCSAiNDE6XG4iCQkJCQlcCisJICIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iCQkJXAorCSAiICAgLmV2ZW5cbiIJCQkJCVwKKwkgIjIyOiBhZGRxbCAjMSwlMlxuIgkJCQlcCisJICIxMjogbHNsbCAjMiwlMlxuIgkJCQlcCisJIGZpeHVwICJcbiIJCQkJCVwKKwkgIiAgICBqcmEgMTNmXG4iCQkJCVwKKwkgIi5wcmV2aW91c1xuIgkJCQkJXAorCSAiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgkJCVwKKwkgIiAgICAuYWxpZ24gNFxuIgkJCQlcCisJICIgICAgLmxvbmcgMTBiLDIyYlxuIgkJCQlcCisJICIgICAgLmxvbmcgMzFiLDEyYlxuIgkJCQlcCisJICIgICAgLmxvbmcgMTFiLDEyYlxuIgkJCQlcCisJICIgICAgLmxvbmcgNDFiLDIyYlxuIgkJCQlcCisJICIucHJldmlvdXNcbiIJCQkJCVwKKwkgY29weSAiXG4iCQkJCQlcCisJICIxMzoiCQkJCQkJXAorCSA6ICI9YSIodG8pLCAiPWEiKGZyb20pLCAiPWQiKG4pCQlcCisJIDogIjAiKHRvKSwgIjEiKGZyb20pLCAiMiIobi80KQkJCVwKKwkgOiAiZDAiLCAibWVtb3J5IikKKworI2RlZmluZSBfX2NvcHlfdG9fdXNlcl9pbmF0b21pYyBfX2NvcHlfdG9fdXNlcgorI2RlZmluZSBfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljIF9fY29weV9mcm9tX3VzZXIKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCitfX2NvbnN0YW50X2NvcHlfdG9fdXNlcih2b2lkICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKQoreworICAgIHN3aXRjaCAobikgeworICAgIGNhc2UgMDoKKwlicmVhazsKKyAgICBjYXNlIDE6CisJX19hc21fXyBfX3ZvbGF0aWxlX18KKwkgICAgKCIgICBtb3ZlYiAoJTEpKywlJWQwXG4iCisJICAgICAiMjE6bW92ZXNiICUlZDAsKCUwKStcbiIKKwkgICAgICIxOlxuIgorCSAgICAgIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIKKwkgICAgICIgICAuZXZlblxuIgorCSAgICAgIjI6IGFkZHFsICMxLCUyXG4iCisJICAgICAiICAganJhIDFiXG4iCisJICAgICAiLnByZXZpb3VzXG4iCisJICAgICAiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgorCSAgICAgIiAgIC5hbGlnbiA0XG4gICIKKwkgICAgICIgICAubG9uZyAyMWIsMmJcbiIKKwkgICAgICIgICAubG9uZyAxYiwyYlxuIgorCSAgICAgIi5wcmV2aW91cyIKKwkgICAgIDogIj1hIih0byksICI9YSIoZnJvbSksICI9ZCIobikKKwkgICAgIDogIjAiKHRvKSwgIjEiKGZyb20pLCAiMiIoMCkKKwkgICAgIDogImQwIiwgIm1lbW9yeSIpOworCWJyZWFrOworICAgIGNhc2UgMjoKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXworCSAgICAoIiAgIG1vdmV3ICglMSkrLCUlZDBcbiIKKwkgICAgICIyMTptb3Zlc3cgJSVkMCwoJTApK1xuIgorCSAgICAgIjE6XG4iCisJICAgICAiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIgorCSAgICAgIiAgIC5ldmVuXG4iCisJICAgICAiMjogYWRkcWwgIzIsJTJcbiIKKwkgICAgICIgICBqcmEgMWJcbiIKKwkgICAgICIucHJldmlvdXNcbiIKKwkgICAgICIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCisJICAgICAiICAgLmFsaWduIDRcbiIKKwkgICAgICIgICAubG9uZyAyMWIsMmJcbiIKKwkgICAgICIgICAubG9uZyAxYiwyYlxuIgorCSAgICAgIi5wcmV2aW91cyIKKwkgICAgIDogIj1hIih0byksICI9YSIoZnJvbSksICI9ZCIobikKKwkgICAgIDogIjAiKHRvKSwgIjEiKGZyb20pLCAiMiIoMCkKKwkgICAgIDogImQwIiwgIm1lbW9yeSIpOworCWJyZWFrOworICAgIGNhc2UgMzoKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXworCSAgICAoIiAgIG1vdmV3ICglMSkrLCUlZDBcbiIKKwkgICAgICIyMTptb3Zlc3cgJSVkMCwoJTApK1xuIgorCSAgICAgIjE6IG1vdmViICglMSkrLCUlZDBcbiIKKwkgICAgICIyMjptb3Zlc2IgJSVkMCwoJTApK1xuIgorCSAgICAgIjI6XG4iCisJICAgICAiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIgorCSAgICAgIiAgIC5ldmVuXG4iCisJICAgICAiMzogYWRkcWwgIzIsJTJcbiIKKwkgICAgICI0OiBhZGRxbCAjMSwlMlxuIgorCSAgICAgIiAgIGpyYSAyYlxuIgorCSAgICAgIi5wcmV2aW91c1xuIgorCSAgICAgIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIKKwkgICAgICIgICAuYWxpZ24gNFxuIgorCSAgICAgIiAgIC5sb25nIDIxYiwzYlxuIgorCSAgICAgIiAgIC5sb25nIDFiLDNiXG4iCisJICAgICAiICAgLmxvbmcgMjJiLDRiXG4iCisJICAgICAiICAgLmxvbmcgMmIsNGJcbiIKKwkgICAgICIucHJldmlvdXMiCisJICAgICA6ICI9YSIodG8pLCAiPWEiKGZyb20pLCAiPWQiKG4pCisJICAgICA6ICIwIih0byksICIxIihmcm9tKSwgIjIiKDApCisJICAgICA6ICJkMCIsICJtZW1vcnkiKTsKKwlicmVhazsKKyAgICBjYXNlIDQ6CisJX19hc21fXyBfX3ZvbGF0aWxlX18KKwkgICAgKCIgICBtb3ZlbCAoJTEpKywlJWQwXG4iCisJICAgICAiMjE6bW92ZXNsICUlZDAsKCUwKStcbiIKKwkgICAgICIxOlxuIgorCSAgICAgIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIKKwkgICAgICIgICAuZXZlblxuIgorCSAgICAgIjI6IGFkZHFsICM0LCUyXG4iCisJICAgICAiICAganJhIDFiXG4iCisJICAgICAiLnByZXZpb3VzXG4iCisJICAgICAiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgorCSAgICAgIiAgIC5hbGlnbiA0XG4iCisJICAgICAiICAgLmxvbmcgMjFiLDJiXG4iCisJICAgICAiICAgLmxvbmcgMWIsMmJcbiIKKwkgICAgICIucHJldmlvdXMiCisJICAgICA6ICI9YSIodG8pLCAiPWEiKGZyb20pLCAiPWQiKG4pCisJICAgICA6ICIwIih0byksICIxIihmcm9tKSwgIjIiKDApCisJICAgICA6ICJkMCIsICJtZW1vcnkiKTsKKwlicmVhazsKKyAgICBjYXNlIDg6CisJX19hc21fXyBfX3ZvbGF0aWxlX18KKwkgICAgKCIgICBtb3ZlbCAoJTEpKywlJWQwXG4iCisJICAgICAiMjE6bW92ZXNsICUlZDAsKCUwKStcbiIKKwkgICAgICIxOiBtb3ZlbCAoJTEpKywlJWQwXG4iCisJICAgICAiMjI6bW92ZXNsICUlZDAsKCUwKStcbiIKKwkgICAgICIyOlxuIgorCSAgICAgIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIKKwkgICAgICIgICAuZXZlblxuIgorCSAgICAgIjM6IGFkZHFsICM0LCUyXG4iCisJICAgICAiNDogYWRkcWwgIzQsJTJcbiIKKwkgICAgICIgICBqcmEgMmJcbiIKKwkgICAgICIucHJldmlvdXNcbiIKKwkgICAgICIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCisJICAgICAiICAgLmFsaWduIDRcbiIKKwkgICAgICIgICAubG9uZyAyMWIsM2JcbiIKKwkgICAgICIgICAubG9uZyAxYiwzYlxuIgorCSAgICAgIiAgIC5sb25nIDIyYiw0YlxuIgorCSAgICAgIiAgIC5sb25nIDJiLDRiXG4iCisJICAgICAiLnByZXZpb3VzIgorCSAgICAgOiAiPWEiKHRvKSwgIj1hIihmcm9tKSwgIj1kIihuKQorCSAgICAgOiAiMCIodG8pLCAiMSIoZnJvbSksICIyIigwKQorCSAgICAgOiAiZDAiLCAibWVtb3J5Iik7CisJYnJlYWs7CisgICAgY2FzZSAxMjoKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXworCSAgICAoIiAgIG1vdmVsICglMSkrLCUlZDBcbiIKKwkgICAgICIyMTptb3Zlc2wgJSVkMCwoJTApK1xuIgorCSAgICAgIjE6IG1vdmVsICglMSkrLCUlZDBcbiIKKwkgICAgICIyMjptb3Zlc2wgJSVkMCwoJTApK1xuIgorCSAgICAgIjI6IG1vdmVsICglMSkrLCUlZDBcbiIKKwkgICAgICIyMzptb3Zlc2wgJSVkMCwoJTApK1xuIgorCSAgICAgIjM6XG4iCisJICAgICAiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIgorCSAgICAgIiAgIC5ldmVuXG4iCisJICAgICAiNDogYWRkcWwgIzQsJTJcbiIKKwkgICAgICI1OiBhZGRxbCAjNCwlMlxuIgorCSAgICAgIjY6IGFkZHFsICM0LCUyXG4iCisJICAgICAiICAganJhIDNiXG4iCisJICAgICAiLnByZXZpb3VzXG4iCisJICAgICAiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgorCSAgICAgIiAgIC5hbGlnbiA0XG4iCisJICAgICAiICAgLmxvbmcgMjFiLDRiXG4iCisJICAgICAiICAgLmxvbmcgMWIsNGJcbiIKKwkgICAgICIgICAubG9uZyAyMmIsNWJcbiIKKwkgICAgICIgICAubG9uZyAyYiw1YlxuIgorCSAgICAgIiAgIC5sb25nIDIzYiw2YlxuIgorCSAgICAgIiAgIC5sb25nIDNiLDZiXG4iCisJICAgICAiLnByZXZpb3VzIgorCSAgICAgOiAiPWEiKHRvKSwgIj1hIihmcm9tKSwgIj1kIihuKQorCSAgICAgOiAiMCIodG8pLCAiMSIoZnJvbSksICIyIigwKQorCSAgICAgOiAiZDAiLCAibWVtb3J5Iik7CisJYnJlYWs7CisgICAgY2FzZSAxNjoKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXworCSAgICAoIiAgIG1vdmVsICglMSkrLCUlZDBcbiIKKwkgICAgICIyMTptb3Zlc2wgJSVkMCwoJTApK1xuIgorCSAgICAgIjE6IG1vdmVsICglMSkrLCUlZDBcbiIKKwkgICAgICIyMjptb3Zlc2wgJSVkMCwoJTApK1xuIgorCSAgICAgIjI6IG1vdmVsICglMSkrLCUlZDBcbiIKKwkgICAgICIyMzptb3Zlc2wgJSVkMCwoJTApK1xuIgorCSAgICAgIjM6IG1vdmVsICglMSkrLCUlZDBcbiIKKwkgICAgICIyNDptb3Zlc2wgJSVkMCwoJTApK1xuIgorCSAgICAgIjQ6IgorCSAgICAgIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIKKwkgICAgICIgICAuZXZlblxuIgorCSAgICAgIjU6IGFkZHFsICM0LCUyXG4iCisJICAgICAiNjogYWRkcWwgIzQsJTJcbiIKKwkgICAgICI3OiBhZGRxbCAjNCwlMlxuIgorCSAgICAgIjg6IGFkZHFsICM0LCUyXG4iCisJICAgICAiICAganJhIDRiXG4iCisJICAgICAiLnByZXZpb3VzXG4iCisJICAgICAiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgorCSAgICAgIiAgIC5hbGlnbiA0XG4iCisJICAgICAiICAgLmxvbmcgMjFiLDViXG4iCisJICAgICAiICAgLmxvbmcgMWIsNWJcbiIKKwkgICAgICIgICAubG9uZyAyMmIsNmJcbiIKKwkgICAgICIgICAubG9uZyAyYiw2YlxuIgorCSAgICAgIiAgIC5sb25nIDIzYiw3YlxuIgorCSAgICAgIiAgIC5sb25nIDNiLDdiXG4iCisJICAgICAiICAgLmxvbmcgMjRiLDhiXG4iCisJICAgICAiICAgLmxvbmcgNGIsOGJcbiIKKwkgICAgICIucHJldmlvdXMiCisJICAgICA6ICI9YSIodG8pLCAiPWEiKGZyb20pLCAiPWQiKG4pCisJICAgICA6ICIwIih0byksICIxIihmcm9tKSwgIjIiKDApCisJICAgICA6ICJkMCIsICJtZW1vcnkiKTsKKwlicmVhazsKKyAgICBkZWZhdWx0OgorCXN3aXRjaCAobiAmIDMpIHsKKwljYXNlIDA6CisJICAgIF9fY29weV90b191c2VyX2JpZyh0bywgZnJvbSwgbiwgIiIsICIiKTsKKwkgICAgYnJlYWs7CisJY2FzZSAxOgorCSAgICBfX2NvcHlfdG9fdXNlcl9iaWcodG8sIGZyb20sIG4sCisJCQkgICAgICAgLyogZml4dXAgKi8KKwkJCSAgICAgICAiMTogYWRkcWwgIzEsJTIiLAorCQkJICAgICAgIC8qIGNvcHkgKi8KKwkJCSAgICAgICAiICAgbW92ZWIgKCUxKSssJSVkMFxuIgorCQkJICAgICAgICIyMjptb3Zlc2IgJSVkMCwoJTApK1xuIgorCQkJICAgICAgICIyOiIKKwkJCSAgICAgICAiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgorCQkJICAgICAgICIgICAubG9uZyAyMmIsMWJcbiIKKwkJCSAgICAgICAiICAgLmxvbmcgMmIsMWJcbiIKKwkJCSAgICAgICAiLnByZXZpb3VzIik7CisJICAgIGJyZWFrOworCWNhc2UgMjoKKwkgICAgX19jb3B5X3RvX3VzZXJfYmlnKHRvLCBmcm9tLCBuLAorCQkJICAgICAgIC8qIGZpeHVwICovCisJCQkgICAgICAgIjE6IGFkZHFsICMyLCUyIiwKKwkJCSAgICAgICAvKiBjb3B5ICovCisJCQkgICAgICAgIiAgIG1vdmV3ICglMSkrLCUlZDBcbiIKKwkJCSAgICAgICAiMjI6bW92ZXN3ICUlZDAsKCUwKStcbiIKKwkJCSAgICAgICAiMjoiCisJCQkgICAgICAgIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIKKwkJCSAgICAgICAiICAgLmxvbmcgMjJiLDFiXG4iCisJCQkgICAgICAgIiAgIC5sb25nIDJiLDFiXG4iCisJCQkgICAgICAgIi5wcmV2aW91cyIpOworCSAgICBicmVhazsKKwljYXNlIDM6CisJICAgIF9fY29weV90b191c2VyX2JpZyh0bywgZnJvbSwgbiwKKwkJCSAgICAgICAvKiBmaXh1cCAqLworCQkJICAgICAgICIxOiBhZGRxbCAjMiwlMlxuIgorCQkJICAgICAgICIyOiBhZGRxbCAjMSwlMiIsCisJCQkgICAgICAgLyogY29weSAqLworCQkJICAgICAgICIgICBtb3ZldyAoJTEpKywlJWQwXG4iCisJCQkgICAgICAgIjIzOm1vdmVzdyAlJWQwLCglMCkrXG4iCisJCQkgICAgICAgIjM6IG1vdmViICglMSkrLCUlZDBcbiIKKwkJCSAgICAgICAiMjQ6bW92ZXNiICUlZDAsKCUwKStcbiIKKwkJCSAgICAgICAiNDoiCisJCQkgICAgICAgIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIKKwkJCSAgICAgICAiICAgLmxvbmcgMjNiLDFiXG4iCisJCQkgICAgICAgIiAgIC5sb25nIDNiLDFiXG4iCisJCQkgICAgICAgIiAgIC5sb25nIDI0YiwyYlxuIgorCQkJICAgICAgICIgICAubG9uZyA0YiwyYlxuIgorCQkJICAgICAgICIucHJldmlvdXMiKTsKKwkgICAgYnJlYWs7CisJfQorCWJyZWFrOworICAgIH0KKyAgICByZXR1cm4gbjsKK30KKworI2RlZmluZSBjb3B5X2Zyb21fdXNlcih0bywgZnJvbSwgbikJCVwKKyhfX2J1aWx0aW5fY29uc3RhbnRfcChuKSA/CQkJXAorIF9fY29uc3RhbnRfY29weV9mcm9tX3VzZXIodG8sIGZyb20sIG4pIDoJXAorIF9fZ2VuZXJpY19jb3B5X2Zyb21fdXNlcih0bywgZnJvbSwgbikpCisKKyNkZWZpbmUgY29weV90b191c2VyKHRvLCBmcm9tLCBuKQkJXAorKF9fYnVpbHRpbl9jb25zdGFudF9wKG4pID8JCQlcCisgX19jb25zdGFudF9jb3B5X3RvX3VzZXIodG8sIGZyb20sIG4pIDoJCVwKKyBfX2dlbmVyaWNfY29weV90b191c2VyKHRvLCBmcm9tLCBuKSkKKworI2RlZmluZSBfX2NvcHlfZnJvbV91c2VyKHRvLCBmcm9tLCBuKSBjb3B5X2Zyb21fdXNlcih0bywgZnJvbSwgbikKKyNkZWZpbmUgX19jb3B5X3RvX3VzZXIodG8sIGZyb20sIG4pIGNvcHlfdG9fdXNlcih0bywgZnJvbSwgbikKKworLyoKKyAqIENvcHkgYSBudWxsIHRlcm1pbmF0ZWQgc3RyaW5nIGZyb20gdXNlcnNwYWNlLgorICovCisKK3N0YXRpYyBpbmxpbmUgbG9uZworc3RybmNweV9mcm9tX3VzZXIoY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMsIGxvbmcgY291bnQpCit7CisgICAgbG9uZyByZXM7CisgICAgaWYgKGNvdW50ID09IDApIHJldHVybiBjb3VudDsKKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXworCSgiMTogbW92ZXNiICglMikrLCUlZDBcbiIKKwkgIjEyOm1vdmViICUlZDAsKCUxKStcbiIKKwkgIiAgIGplcSAyZlxuIgorCSAiICAgc3VicWwgIzEsJTNcbiIKKwkgIiAgIGpuZSAxYlxuIgorCSAiMjogc3VibCAlMywlMFxuIgorCSAiMzpcbiIKKwkgIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIKKwkgIiAgIC5ldmVuXG4iCisJICI0OiBtb3ZlbCAlNCwlMFxuIgorCSAiICAganJhIDNiXG4iCisJICIucHJldmlvdXNcbiIKKwkgIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIKKwkgIiAgIC5hbGlnbiA0XG4iCisJICIgICAubG9uZyAxYiw0YlxuIgorCSAiICAgLmxvbmcgMTJiLDRiXG4iCisJICIucHJldmlvdXMiCisJIDogIj1kIihyZXMpLCAiPWEiKGRzdCksICI9YSIoc3JjKSwgIj1kIihjb3VudCkKKwkgOiAiaSIoLUVGQVVMVCksICIwIihjb3VudCksICIxIihkc3QpLCAiMiIoc3JjKSwgIjMiKGNvdW50KQorCSA6ICJkMCIsICJtZW1vcnkiKTsKKyAgICByZXR1cm4gcmVzOworfQorCisvKgorICogUmV0dXJuIHRoZSBzaXplIG9mIGEgc3RyaW5nIChpbmNsdWRpbmcgdGhlIGVuZGluZyAwKQorICoKKyAqIFJldHVybiAwIG9uIGV4Y2VwdGlvbiwgYSB2YWx1ZSBncmVhdGVyIHRoYW4gTiBpZiB0b28gbG9uZworICovCitzdGF0aWMgaW5saW5lIGxvbmcgc3Rybmxlbl91c2VyKGNvbnN0IGNoYXIgKnNyYywgbG9uZyBuKQoreworCWxvbmcgcmVzOworCisJcmVzID0gLShsb25nKXNyYzsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXworCQkoIjE6XG4iCisJCSAiICAgdHN0bCAlMlxuIgorCQkgIiAgIGplcSAzZlxuIgorCQkgIjI6IG1vdmVzYiAoJTEpKywlJWQwXG4iCisJCSAiMjI6XG4iCisJCSAiICAgc3VicWwgIzEsJTJcbiIKKwkJICIgICB0c3RiICUlZDBcbiIKKwkJICIgICBqbmUgMWJcbiIKKwkJICIgICBqcmEgNGZcbiIKKwkJICIzOlxuIgorCQkgIiAgIGFkZHFsICMxLCUwXG4iCisJCSAiNDpcbiIKKwkJICIgICBhZGRsICUxLCUwXG4iCisJCSAiNTpcbiIKKwkJICIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iCisJCSAiICAgLmV2ZW5cbiIKKwkJICI2OiBtb3ZlcSAlMywlMFxuIgorCQkgIiAgIGpyYSA1YlxuIgorCQkgIi5wcmV2aW91c1xuIgorCQkgIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIKKwkJICIgICAuYWxpZ24gNFxuIgorCQkgIiAgIC5sb25nIDJiLDZiXG4iCisJCSAiICAgLmxvbmcgMjJiLDZiXG4iCisJCSAiLnByZXZpb3VzIgorCQkgOiAiPWQiKHJlcyksICI9YSIoc3JjKSwgIj1kIihuKQorCQkgOiAiaSIoMCksICIwIihyZXMpLCAiMSIoc3JjKSwgIjIiKG4pCisJCSA6ICJkMCIpOworCXJldHVybiByZXM7Cit9CisKKyNkZWZpbmUgc3RybGVuX3VzZXIoc3RyKSBzdHJubGVuX3VzZXIoc3RyLCAzMjc2NykKKworLyoKKyAqIFplcm8gVXNlcnNwYWNlCisgKi8KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCitjbGVhcl91c2VyKHZvaWQgKnRvLCB1bnNpZ25lZCBsb25nIG4pCit7CisgICAgX19hc21fXyBfX3ZvbGF0aWxlX18KKwkoIiAgIHRzdGwgJTFcbiIKKwkgIiAgIGplcSAzZlxuIgorCSAiMTogbW92ZXNsICUzLCglMCkrXG4iCisJICIyOiBzdWJxbCAjMSwlMVxuIgorCSAiICAgam5lIDFiXG4iCisJICIzOiBtb3ZlbCAlMiwlMVxuIgorCSAiICAgYmNsciAjMSwlMVxuIgorCSAiICAgamVxIDRmXG4iCisJICIyNDptb3Zlc3cgJTMsKCUwKStcbiIKKwkgIjQ6IGJjbHIgIzAsJTFcbiIKKwkgIiAgIGplcSA1ZlxuIgorCSAiMjU6bW92ZXNiICUzLCglMCkrXG4iCisJICI1OlxuIgorCSAiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIgorCSAiICAgLmV2ZW5cbiIKKwkgIjYxOmFkZHFsICMxLCUxXG4iCisJICI2OiBsc2xsICMyLCUxXG4iCisJICIgICBhZGRsICUyLCUxXG4iCisJICIgICBqcmEgNWJcbiIKKwkgIjc6IGFkZHFsICMyLCUxXG4iCisJICIgICBqcmEgNWJcbiIKKwkgIjg6IGFkZHFsICMxLCUxXG4iCisJICIgICBqcmEgNWJcbiIKKwkgIi5wcmV2aW91c1xuIgorCSAiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgorCSAiICAgLmFsaWduIDRcbiIKKwkgIiAgIC5sb25nIDFiLDYxYlxuIgorCSAiICAgLmxvbmcgMmIsNmJcbiIKKwkgIiAgIC5sb25nIDNiLDYxYlxuIgorCSAiICAgLmxvbmcgMjRiLDdiXG4iCisJICIgICAubG9uZyA0Yiw3YlxuIgorCSAiICAgLmxvbmcgMjViLDhiXG4iCisJICIgICAubG9uZyA1Yiw4YlxuIgorCSAiLnByZXZpb3VzIgorCSA6ICI9YSIodG8pLCAiPWQiKG4pCisJIDogInIiKG4gJiAzKSwgInIiKDApLCAiMCIodG8pLCAiMSIobi80KSk7CisgICAgcmV0dXJuIG47Cit9CisKKyNlbmRpZiAvKiBfTTY4S19VQUNDRVNTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvdWNvbnRleHQuaCBiL2luY2x1ZGUvYXNtLW02OGsvdWNvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGUyMjY2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay91Y29udGV4dC5oCkBAIC0wLDAgKzEsMzAgQEAKKyNpZm5kZWYgX002OEtfVUNPTlRFWFRfSAorI2RlZmluZSBfTTY4S19VQ09OVEVYVF9ICisKK3R5cGVkZWYgaW50IGdyZWdfdDsKKyNkZWZpbmUgTkdSRUcgMTgKK3R5cGVkZWYgZ3JlZ190IGdyZWdzZXRfdFtOR1JFR107CisKK3R5cGVkZWYgc3RydWN0IGZwcmVnc2V0IHsKKwlpbnQgZl9mcGNudGxbM107CisJaW50IGZfZnByZWdzWzgqM107Cit9IGZwcmVnc2V0X3Q7CisKK3N0cnVjdCBtY29udGV4dCB7CisJaW50IHZlcnNpb247CisJZ3JlZ3NldF90IGdyZWdzOworCWZwcmVnc2V0X3QgZnByZWdzOworfTsKKworI2RlZmluZSBNQ09OVEVYVF9WRVJTSU9OIDIKKworc3RydWN0IHVjb250ZXh0IHsKKwl1bnNpZ25lZCBsb25nCSAgdWNfZmxhZ3M7CisJc3RydWN0IHVjb250ZXh0ICAqdWNfbGluazsKKwlzdGFja190CQkgIHVjX3N0YWNrOworCXN0cnVjdCBtY29udGV4dAkgIHVjX21jb250ZXh0OworCXVuc2lnbmVkIGxvbmcJICB1Y19maWxsZXJbODBdOworCXNpZ3NldF90CSAgdWNfc2lnbWFzazsJLyogbWFzayBsYXN0IGZvciBleHRlbnNpYmlsaXR5ICovCit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvdW5hbGlnbmVkLmggYi9pbmNsdWRlL2FzbS1tNjhrL3VuYWxpZ25lZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwNGNiM2YKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL3VuYWxpZ25lZC5oCkBAIC0wLDAgKzEsMTYgQEAKKyNpZm5kZWYgX19NNjhLX1VOQUxJR05FRF9ICisjZGVmaW5lIF9fTTY4S19VTkFMSUdORURfSAorCisvKgorICogVGhlIG02OGsgY2FuIGRvIHVuYWxpZ25lZCBhY2Nlc3NlcyBpdHNlbGYuCisgKgorICogVGhlIHN0cmFuZ2UgbWFjcm9zIGFyZSB0aGVyZSB0byBtYWtlIHN1cmUgdGhlc2UgY2FuJ3QKKyAqIGJlIG1pc3VzZWQgaW4gYSB3YXkgdGhhdCBtYWtlcyB0aGVtIG5vdCB3b3JrIG9uIG90aGVyCisgKiBhcmNoaXRlY3R1cmVzIHdoZXJlIHVuYWxpZ25lZCBhY2Nlc3NlcyBhcmVuJ3QgYXMgc2ltcGxlLgorICovCisKKyNkZWZpbmUgZ2V0X3VuYWxpZ25lZChwdHIpICgqKHB0cikpCisKKyNkZWZpbmUgcHV0X3VuYWxpZ25lZCh2YWwsIHB0cikgKCh2b2lkKSggKihwdHIpID0gKHZhbCkgKSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20tbTY4ay91bmlzdGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmFiZGU0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay91bmlzdGQuaApAQCAtMCwwICsxLDQ2NSBAQAorI2lmbmRlZiBfQVNNX002OEtfVU5JU1REX0hfCisjZGVmaW5lIF9BU01fTTY4S19VTklTVERfSF8KKworLyoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgc3lzdGVtIGNhbGwgbnVtYmVycy4KKyAqLworCisjZGVmaW5lIF9fTlJfZXhpdAkJICAxCisjZGVmaW5lIF9fTlJfZm9yawkJICAyCisjZGVmaW5lIF9fTlJfcmVhZAkJICAzCisjZGVmaW5lIF9fTlJfd3JpdGUJCSAgNAorI2RlZmluZSBfX05SX29wZW4JCSAgNQorI2RlZmluZSBfX05SX2Nsb3NlCQkgIDYKKyNkZWZpbmUgX19OUl93YWl0cGlkCQkgIDcKKyNkZWZpbmUgX19OUl9jcmVhdAkJICA4CisjZGVmaW5lIF9fTlJfbGluawkJICA5CisjZGVmaW5lIF9fTlJfdW5saW5rCQkgMTAKKyNkZWZpbmUgX19OUl9leGVjdmUJCSAxMQorI2RlZmluZSBfX05SX2NoZGlyCQkgMTIKKyNkZWZpbmUgX19OUl90aW1lCQkgMTMKKyNkZWZpbmUgX19OUl9ta25vZAkJIDE0CisjZGVmaW5lIF9fTlJfY2htb2QJCSAxNQorI2RlZmluZSBfX05SX2Nob3duCQkgMTYKKyNkZWZpbmUgX19OUl9icmVhawkJIDE3CisjZGVmaW5lIF9fTlJfb2xkc3RhdAkJIDE4CisjZGVmaW5lIF9fTlJfbHNlZWsJCSAxOQorI2RlZmluZSBfX05SX2dldHBpZAkJIDIwCisjZGVmaW5lIF9fTlJfbW91bnQJCSAyMQorI2RlZmluZSBfX05SX3Vtb3VudAkJIDIyCisjZGVmaW5lIF9fTlJfc2V0dWlkCQkgMjMKKyNkZWZpbmUgX19OUl9nZXR1aWQJCSAyNAorI2RlZmluZSBfX05SX3N0aW1lCQkgMjUKKyNkZWZpbmUgX19OUl9wdHJhY2UJCSAyNgorI2RlZmluZSBfX05SX2FsYXJtCQkgMjcKKyNkZWZpbmUgX19OUl9vbGRmc3RhdAkJIDI4CisjZGVmaW5lIF9fTlJfcGF1c2UJCSAyOQorI2RlZmluZSBfX05SX3V0aW1lCQkgMzAKKyNkZWZpbmUgX19OUl9zdHR5CQkgMzEKKyNkZWZpbmUgX19OUl9ndHR5CQkgMzIKKyNkZWZpbmUgX19OUl9hY2Nlc3MJCSAzMworI2RlZmluZSBfX05SX25pY2UJCSAzNAorI2RlZmluZSBfX05SX2Z0aW1lCQkgMzUKKyNkZWZpbmUgX19OUl9zeW5jCQkgMzYKKyNkZWZpbmUgX19OUl9raWxsCQkgMzcKKyNkZWZpbmUgX19OUl9yZW5hbWUJCSAzOAorI2RlZmluZSBfX05SX21rZGlyCQkgMzkKKyNkZWZpbmUgX19OUl9ybWRpcgkJIDQwCisjZGVmaW5lIF9fTlJfZHVwCQkgNDEKKyNkZWZpbmUgX19OUl9waXBlCQkgNDIKKyNkZWZpbmUgX19OUl90aW1lcwkJIDQzCisjZGVmaW5lIF9fTlJfcHJvZgkJIDQ0CisjZGVmaW5lIF9fTlJfYnJrCQkgNDUKKyNkZWZpbmUgX19OUl9zZXRnaWQJCSA0NgorI2RlZmluZSBfX05SX2dldGdpZAkJIDQ3CisjZGVmaW5lIF9fTlJfc2lnbmFsCQkgNDgKKyNkZWZpbmUgX19OUl9nZXRldWlkCQkgNDkKKyNkZWZpbmUgX19OUl9nZXRlZ2lkCQkgNTAKKyNkZWZpbmUgX19OUl9hY2N0CQkgNTEKKyNkZWZpbmUgX19OUl91bW91bnQyCQkgNTIKKyNkZWZpbmUgX19OUl9sb2NrCQkgNTMKKyNkZWZpbmUgX19OUl9pb2N0bAkJIDU0CisjZGVmaW5lIF9fTlJfZmNudGwJCSA1NQorI2RlZmluZSBfX05SX21weAkJIDU2CisjZGVmaW5lIF9fTlJfc2V0cGdpZAkJIDU3CisjZGVmaW5lIF9fTlJfdWxpbWl0CQkgNTgKKyNkZWZpbmUgX19OUl9vbGRvbGR1bmFtZQkgNTkKKyNkZWZpbmUgX19OUl91bWFzawkJIDYwCisjZGVmaW5lIF9fTlJfY2hyb290CQkgNjEKKyNkZWZpbmUgX19OUl91c3RhdAkJIDYyCisjZGVmaW5lIF9fTlJfZHVwMgkJIDYzCisjZGVmaW5lIF9fTlJfZ2V0cHBpZAkJIDY0CisjZGVmaW5lIF9fTlJfZ2V0cGdycAkJIDY1CisjZGVmaW5lIF9fTlJfc2V0c2lkCQkgNjYKKyNkZWZpbmUgX19OUl9zaWdhY3Rpb24JCSA2NworI2RlZmluZSBfX05SX3NnZXRtYXNrCQkgNjgKKyNkZWZpbmUgX19OUl9zc2V0bWFzawkJIDY5CisjZGVmaW5lIF9fTlJfc2V0cmV1aWQJCSA3MAorI2RlZmluZSBfX05SX3NldHJlZ2lkCQkgNzEKKyNkZWZpbmUgX19OUl9zaWdzdXNwZW5kCQkgNzIKKyNkZWZpbmUgX19OUl9zaWdwZW5kaW5nCQkgNzMKKyNkZWZpbmUgX19OUl9zZXRob3N0bmFtZQkgNzQKKyNkZWZpbmUgX19OUl9zZXRybGltaXQJCSA3NQorI2RlZmluZSBfX05SX2dldHJsaW1pdAkJIDc2CisjZGVmaW5lIF9fTlJfZ2V0cnVzYWdlCQkgNzcKKyNkZWZpbmUgX19OUl9nZXR0aW1lb2ZkYXkJIDc4CisjZGVmaW5lIF9fTlJfc2V0dGltZW9mZGF5CSA3OQorI2RlZmluZSBfX05SX2dldGdyb3VwcwkJIDgwCisjZGVmaW5lIF9fTlJfc2V0Z3JvdXBzCQkgODEKKyNkZWZpbmUgX19OUl9zZWxlY3QJCSA4MgorI2RlZmluZSBfX05SX3N5bWxpbmsJCSA4MworI2RlZmluZSBfX05SX29sZGxzdGF0CQkgODQKKyNkZWZpbmUgX19OUl9yZWFkbGluawkJIDg1CisjZGVmaW5lIF9fTlJfdXNlbGliCQkgODYKKyNkZWZpbmUgX19OUl9zd2Fwb24JCSA4NworI2RlZmluZSBfX05SX3JlYm9vdAkJIDg4CisjZGVmaW5lIF9fTlJfcmVhZGRpcgkJIDg5CisjZGVmaW5lIF9fTlJfbW1hcAkJIDkwCisjZGVmaW5lIF9fTlJfbXVubWFwCQkgOTEKKyNkZWZpbmUgX19OUl90cnVuY2F0ZQkJIDkyCisjZGVmaW5lIF9fTlJfZnRydW5jYXRlCQkgOTMKKyNkZWZpbmUgX19OUl9mY2htb2QJCSA5NAorI2RlZmluZSBfX05SX2ZjaG93bgkJIDk1CisjZGVmaW5lIF9fTlJfZ2V0cHJpb3JpdHkJIDk2CisjZGVmaW5lIF9fTlJfc2V0cHJpb3JpdHkJIDk3CisjZGVmaW5lIF9fTlJfcHJvZmlsCQkgOTgKKyNkZWZpbmUgX19OUl9zdGF0ZnMJCSA5OQorI2RlZmluZSBfX05SX2ZzdGF0ZnMJCTEwMAorI2RlZmluZSBfX05SX2lvcGVybQkJMTAxCisjZGVmaW5lIF9fTlJfc29ja2V0Y2FsbAkJMTAyCisjZGVmaW5lIF9fTlJfc3lzbG9nCQkxMDMKKyNkZWZpbmUgX19OUl9zZXRpdGltZXIJCTEwNAorI2RlZmluZSBfX05SX2dldGl0aW1lcgkJMTA1CisjZGVmaW5lIF9fTlJfc3RhdAkJMTA2CisjZGVmaW5lIF9fTlJfbHN0YXQJCTEwNworI2RlZmluZSBfX05SX2ZzdGF0CQkxMDgKKyNkZWZpbmUgX19OUl9vbGR1bmFtZQkJMTA5CisjZGVmaW5lIF9fTlJfaW9wbAkJLyogMTEwICovIG5vdCBzdXBwb3J0ZWQKKyNkZWZpbmUgX19OUl92aGFuZ3VwCQkxMTEKKyNkZWZpbmUgX19OUl9pZGxlCQkvKiAxMTIgKi8gT2Jzb2xldGUKKyNkZWZpbmUgX19OUl92bTg2CQkvKiAxMTMgKi8gbm90IHN1cHBvcnRlZAorI2RlZmluZSBfX05SX3dhaXQ0CQkxMTQKKyNkZWZpbmUgX19OUl9zd2Fwb2ZmCQkxMTUKKyNkZWZpbmUgX19OUl9zeXNpbmZvCQkxMTYKKyNkZWZpbmUgX19OUl9pcGMJCTExNworI2RlZmluZSBfX05SX2ZzeW5jCQkxMTgKKyNkZWZpbmUgX19OUl9zaWdyZXR1cm4JCTExOQorI2RlZmluZSBfX05SX2Nsb25lCQkxMjAKKyNkZWZpbmUgX19OUl9zZXRkb21haW5uYW1lCTEyMQorI2RlZmluZSBfX05SX3VuYW1lCQkxMjIKKyNkZWZpbmUgX19OUl9jYWNoZWZsdXNoCQkxMjMKKyNkZWZpbmUgX19OUl9hZGp0aW1leAkJMTI0CisjZGVmaW5lIF9fTlJfbXByb3RlY3QJCTEyNQorI2RlZmluZSBfX05SX3NpZ3Byb2NtYXNrCTEyNgorI2RlZmluZSBfX05SX2NyZWF0ZV9tb2R1bGUJMTI3CisjZGVmaW5lIF9fTlJfaW5pdF9tb2R1bGUJMTI4CisjZGVmaW5lIF9fTlJfZGVsZXRlX21vZHVsZQkxMjkKKyNkZWZpbmUgX19OUl9nZXRfa2VybmVsX3N5bXMJMTMwCisjZGVmaW5lIF9fTlJfcXVvdGFjdGwJCTEzMQorI2RlZmluZSBfX05SX2dldHBnaWQJCTEzMgorI2RlZmluZSBfX05SX2ZjaGRpcgkJMTMzCisjZGVmaW5lIF9fTlJfYmRmbHVzaAkJMTM0CisjZGVmaW5lIF9fTlJfc3lzZnMJCTEzNQorI2RlZmluZSBfX05SX3BlcnNvbmFsaXR5CTEzNgorI2RlZmluZSBfX05SX2Fmc19zeXNjYWxsCTEzNyAvKiBTeXNjYWxsIGZvciBBbmRyZXcgRmlsZSBTeXN0ZW0gKi8KKyNkZWZpbmUgX19OUl9zZXRmc3VpZAkJMTM4CisjZGVmaW5lIF9fTlJfc2V0ZnNnaWQJCTEzOQorI2RlZmluZSBfX05SX19sbHNlZWsJCTE0MAorI2RlZmluZSBfX05SX2dldGRlbnRzCQkxNDEKKyNkZWZpbmUgX19OUl9fbmV3c2VsZWN0CQkxNDIKKyNkZWZpbmUgX19OUl9mbG9jawkJMTQzCisjZGVmaW5lIF9fTlJfbXN5bmMJCTE0NAorI2RlZmluZSBfX05SX3JlYWR2CQkxNDUKKyNkZWZpbmUgX19OUl93cml0ZXYJCTE0NgorI2RlZmluZSBfX05SX2dldHNpZAkJMTQ3CisjZGVmaW5lIF9fTlJfZmRhdGFzeW5jCQkxNDgKKyNkZWZpbmUgX19OUl9fc3lzY3RsCQkxNDkKKyNkZWZpbmUgX19OUl9tbG9jawkJMTUwCisjZGVmaW5lIF9fTlJfbXVubG9jawkJMTUxCisjZGVmaW5lIF9fTlJfbWxvY2thbGwJCTE1MgorI2RlZmluZSBfX05SX211bmxvY2thbGwJCTE1MworI2RlZmluZSBfX05SX3NjaGVkX3NldHBhcmFtCQkxNTQKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRwYXJhbQkJMTU1CisjZGVmaW5lIF9fTlJfc2NoZWRfc2V0c2NoZWR1bGVyCQkxNTYKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRzY2hlZHVsZXIJCTE1NworI2RlZmluZSBfX05SX3NjaGVkX3lpZWxkCQkxNTgKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4CTE1OQorI2RlZmluZSBfX05SX3NjaGVkX2dldF9wcmlvcml0eV9taW4JMTYwCisjZGVmaW5lIF9fTlJfc2NoZWRfcnJfZ2V0X2ludGVydmFsCTE2MQorI2RlZmluZSBfX05SX25hbm9zbGVlcAkJMTYyCisjZGVmaW5lIF9fTlJfbXJlbWFwCQkxNjMKKyNkZWZpbmUgX19OUl9zZXRyZXN1aWQJCTE2NAorI2RlZmluZSBfX05SX2dldHJlc3VpZAkJMTY1CisjZGVmaW5lIF9fTlJfZ2V0cGFnZXNpemUJMTY2CisjZGVmaW5lIF9fTlJfcXVlcnlfbW9kdWxlCTE2NworI2RlZmluZSBfX05SX3BvbGwJCTE2OAorI2RlZmluZSBfX05SX25mc3NlcnZjdGwJCTE2OQorI2RlZmluZSBfX05SX3NldHJlc2dpZAkJMTcwCisjZGVmaW5lIF9fTlJfZ2V0cmVzZ2lkCQkxNzEKKyNkZWZpbmUgX19OUl9wcmN0bAkJMTcyCisjZGVmaW5lIF9fTlJfcnRfc2lncmV0dXJuCTE3MworI2RlZmluZSBfX05SX3J0X3NpZ2FjdGlvbgkxNzQKKyNkZWZpbmUgX19OUl9ydF9zaWdwcm9jbWFzawkxNzUKKyNkZWZpbmUgX19OUl9ydF9zaWdwZW5kaW5nCTE3NgorI2RlZmluZSBfX05SX3J0X3NpZ3RpbWVkd2FpdAkxNzcKKyNkZWZpbmUgX19OUl9ydF9zaWdxdWV1ZWluZm8JMTc4CisjZGVmaW5lIF9fTlJfcnRfc2lnc3VzcGVuZAkxNzkKKyNkZWZpbmUgX19OUl9wcmVhZDY0CQkxODAKKyNkZWZpbmUgX19OUl9wd3JpdGU2NAkJMTgxCisjZGVmaW5lIF9fTlJfbGNob3duCQkxODIKKyNkZWZpbmUgX19OUl9nZXRjd2QJCTE4MworI2RlZmluZSBfX05SX2NhcGdldAkJMTg0CisjZGVmaW5lIF9fTlJfY2Fwc2V0CQkxODUKKyNkZWZpbmUgX19OUl9zaWdhbHRzdGFjawkxODYKKyNkZWZpbmUgX19OUl9zZW5kZmlsZQkJMTg3CisjZGVmaW5lIF9fTlJfZ2V0cG1zZwkJMTg4CS8qIHNvbWUgcGVvcGxlIGFjdHVhbGx5IHdhbnQgc3RyZWFtcyAqLworI2RlZmluZSBfX05SX3B1dHBtc2cJCTE4OQkvKiBzb21lIHBlb3BsZSBhY3R1YWxseSB3YW50IHN0cmVhbXMgKi8KKyNkZWZpbmUgX19OUl92Zm9yawkJMTkwCisjZGVmaW5lIF9fTlJfdWdldHJsaW1pdAkJMTkxCisjZGVmaW5lIF9fTlJfbW1hcDIJCTE5MgorI2RlZmluZSBfX05SX3RydW5jYXRlNjQJCTE5MworI2RlZmluZSBfX05SX2Z0cnVuY2F0ZTY0CTE5NAorI2RlZmluZSBfX05SX3N0YXQ2NAkJMTk1CisjZGVmaW5lIF9fTlJfbHN0YXQ2NAkJMTk2CisjZGVmaW5lIF9fTlJfZnN0YXQ2NAkJMTk3CisjZGVmaW5lIF9fTlJfY2hvd24zMgkJMTk4CisjZGVmaW5lIF9fTlJfZ2V0dWlkMzIJCTE5OQorI2RlZmluZSBfX05SX2dldGdpZDMyCQkyMDAKKyNkZWZpbmUgX19OUl9nZXRldWlkMzIJCTIwMQorI2RlZmluZSBfX05SX2dldGVnaWQzMgkJMjAyCisjZGVmaW5lIF9fTlJfc2V0cmV1aWQzMgkJMjAzCisjZGVmaW5lIF9fTlJfc2V0cmVnaWQzMgkJMjA0CisjZGVmaW5lIF9fTlJfZ2V0Z3JvdXBzMzIJMjA1CisjZGVmaW5lIF9fTlJfc2V0Z3JvdXBzMzIJMjA2CisjZGVmaW5lIF9fTlJfZmNob3duMzIJCTIwNworI2RlZmluZSBfX05SX3NldHJlc3VpZDMyCTIwOAorI2RlZmluZSBfX05SX2dldHJlc3VpZDMyCTIwOQorI2RlZmluZSBfX05SX3NldHJlc2dpZDMyCTIxMAorI2RlZmluZSBfX05SX2dldHJlc2dpZDMyCTIxMQorI2RlZmluZSBfX05SX2xjaG93bjMyCQkyMTIKKyNkZWZpbmUgX19OUl9zZXR1aWQzMgkJMjEzCisjZGVmaW5lIF9fTlJfc2V0Z2lkMzIJCTIxNAorI2RlZmluZSBfX05SX3NldGZzdWlkMzIJCTIxNQorI2RlZmluZSBfX05SX3NldGZzZ2lkMzIJCTIxNgorI2RlZmluZSBfX05SX3Bpdm90X3Jvb3QJCTIxNworI2RlZmluZSBfX05SX2dldGRlbnRzNjQJCTIyMAorI2RlZmluZSBfX05SX2dldHRpZAkJMjIxCisjZGVmaW5lIF9fTlJfdGtpbGwJCTIyMgorI2RlZmluZSBfX05SX3NldHhhdHRyCQkyMjMKKyNkZWZpbmUgX19OUl9sc2V0eGF0dHIJCTIyNAorI2RlZmluZSBfX05SX2ZzZXR4YXR0cgkJMjI1CisjZGVmaW5lIF9fTlJfZ2V0eGF0dHIJCTIyNgorI2RlZmluZSBfX05SX2xnZXR4YXR0cgkJMjI3CisjZGVmaW5lIF9fTlJfZmdldHhhdHRyCQkyMjgKKyNkZWZpbmUgX19OUl9saXN0eGF0dHIJCTIyOQorI2RlZmluZSBfX05SX2xsaXN0eGF0dHIJCTIzMAorI2RlZmluZSBfX05SX2ZsaXN0eGF0dHIJCTIzMQorI2RlZmluZSBfX05SX3JlbW92ZXhhdHRyCTIzMgorI2RlZmluZSBfX05SX2xyZW1vdmV4YXR0cgkyMzMKKyNkZWZpbmUgX19OUl9mcmVtb3ZleGF0dHIJMjM0CisjZGVmaW5lIF9fTlJfZnV0ZXgJCTIzNQorI2RlZmluZSBfX05SX3NlbmRmaWxlNjQJCTIzNgorI2RlZmluZSBfX05SX21pbmNvcmUJCTIzNworI2RlZmluZSBfX05SX21hZHZpc2UJCTIzOAorI2RlZmluZSBfX05SX2ZjbnRsNjQJCTIzOQorI2RlZmluZSBfX05SX3JlYWRhaGVhZAkJMjQwCisjZGVmaW5lIF9fTlJfaW9fc2V0dXAJCTI0MQorI2RlZmluZSBfX05SX2lvX2Rlc3Ryb3kJCTI0MgorI2RlZmluZSBfX05SX2lvX2dldGV2ZW50cwkyNDMKKyNkZWZpbmUgX19OUl9pb19zdWJtaXQJCTI0NAorI2RlZmluZSBfX05SX2lvX2NhbmNlbAkJMjQ1CisjZGVmaW5lIF9fTlJfZmFkdmlzZTY0CQkyNDYKKyNkZWZpbmUgX19OUl9leGl0X2dyb3VwCQkyNDcKKyNkZWZpbmUgX19OUl9sb29rdXBfZGNvb2tpZQkyNDgKKyNkZWZpbmUgX19OUl9lcG9sbF9jcmVhdGUJMjQ5CisjZGVmaW5lIF9fTlJfZXBvbGxfY3RsCQkyNTAKKyNkZWZpbmUgX19OUl9lcG9sbF93YWl0CQkyNTEKKyNkZWZpbmUgX19OUl9yZW1hcF9maWxlX3BhZ2VzCTI1MgorI2RlZmluZSBfX05SX3NldF90aWRfYWRkcmVzcwkyNTMKKyNkZWZpbmUgX19OUl90aW1lcl9jcmVhdGUJMjU0CisjZGVmaW5lIF9fTlJfdGltZXJfc2V0dGltZQkyNTUKKyNkZWZpbmUgX19OUl90aW1lcl9nZXR0aW1lCTI1NgorI2RlZmluZSBfX05SX3RpbWVyX2dldG92ZXJydW4JMjU3CisjZGVmaW5lIF9fTlJfdGltZXJfZGVsZXRlCTI1OAorI2RlZmluZSBfX05SX2Nsb2NrX3NldHRpbWUJMjU5CisjZGVmaW5lIF9fTlJfY2xvY2tfZ2V0dGltZQkyNjAKKyNkZWZpbmUgX19OUl9jbG9ja19nZXRyZXMJMjYxCisjZGVmaW5lIF9fTlJfY2xvY2tfbmFub3NsZWVwCTI2MgorI2RlZmluZSBfX05SX3N0YXRmczY0CQkyNjMKKyNkZWZpbmUgX19OUl9mc3RhdGZzNjQJCTI2NAorI2RlZmluZSBfX05SX3Rna2lsbAkJMjY1CisjZGVmaW5lIF9fTlJfdXRpbWVzCQkyNjYKKyNkZWZpbmUgX19OUl9mYWR2aXNlNjRfNjQJMjY3CisjZGVmaW5lIF9fTlJfbWJpbmQJCTI2OAorI2RlZmluZSBfX05SX2dldF9tZW1wb2xpY3kJMjY5CisjZGVmaW5lIF9fTlJfc2V0X21lbXBvbGljeQkyNzAKKyNkZWZpbmUgX19OUl9tcV9vcGVuCQkyNzEKKyNkZWZpbmUgX19OUl9tcV91bmxpbmsJCTI3MgorI2RlZmluZSBfX05SX21xX3RpbWVkc2VuZAkyNzMKKyNkZWZpbmUgX19OUl9tcV90aW1lZHJlY2VpdmUJMjc0CisjZGVmaW5lIF9fTlJfbXFfbm90aWZ5CQkyNzUKKyNkZWZpbmUgX19OUl9tcV9nZXRzZXRhdHRyCTI3NgorI2RlZmluZSBfX05SX3dhaXRpZAkJMjc3CisjZGVmaW5lIF9fTlJfdnNlcnZlcgkJMjc4CisjZGVmaW5lIF9fTlJfYWRkX2tleQkJMjc5CisjZGVmaW5lIF9fTlJfcmVxdWVzdF9rZXkJMjgwCisjZGVmaW5lIF9fTlJfa2V5Y3RsCQkyODEKKworI2RlZmluZSBOUl9zeXNjYWxscwkJMjgyCisKKy8qIHVzZXItdmlzaWJsZSBlcnJvciBudW1iZXJzIGFyZSBpbiB0aGUgcmFuZ2UgLTEgLSAtMTI0OiBzZWUKKyAgIDxhc20tbTY4ay9lcnJuby5oPiAqLworCisjZGVmaW5lIF9fc3lzY2FsbF9yZXR1cm4odHlwZSwgcmVzKSBcCitkbyB7IFwKKwlpZiAoKHVuc2lnbmVkIGxvbmcpKHJlcykgPj0gKHVuc2lnbmVkIGxvbmcpKC0xMjUpKSB7IFwKKwkvKiBhdm9pZCB1c2luZyByZXMgd2hpY2ggaXMgZGVjbGFyZWQgdG8gYmUgaW4gcmVnaXN0ZXIgZDA7IFwKKwkgICBlcnJubyBtaWdodCBleHBhbmQgdG8gYSBmdW5jdGlvbiBjYWxsIGFuZCBjbG9iYmVyIGl0LiAgKi8gXAorCQlpbnQgX19lcnIgPSAtKHJlcyk7IFwKKwkJZXJybm8gPSBfX2VycjsgXAorCQlyZXMgPSAtMTsgXAorCX0gXAorCXJldHVybiAodHlwZSkgKHJlcyk7IFwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgX3N5c2NhbGwwKHR5cGUsbmFtZSkgXAordHlwZSBuYW1lKHZvaWQpIFwKK3sgXAorcmVnaXN0ZXIgbG9uZyBfX3JlcyBfX2FzbV9fICgiJWQwIikgPSBfX05SXyMjbmFtZTsgXAorX19hc21fXyBfX3ZvbGF0aWxlX18gKCJ0cmFwICAjMCIgXAorICAgICAgICAgICAgICAgICAgICAgIDogIitkIiAoX19yZXMpICk7IFwKK19fc3lzY2FsbF9yZXR1cm4odHlwZSxfX3Jlcyk7IFwKK30KKworI2RlZmluZSBfc3lzY2FsbDEodHlwZSxuYW1lLGF0eXBlLGEpIFwKK3R5cGUgbmFtZShhdHlwZSBhKSBcCit7IFwKK3JlZ2lzdGVyIGxvbmcgX19yZXMgX19hc21fXyAoIiVkMCIpID0gX19OUl8jI25hbWU7IFwKK3JlZ2lzdGVyIGxvbmcgX19hIF9fYXNtX18gKCIlZDEiKSA9IChsb25nKShhKTsgXAorX19hc21fXyBfX3ZvbGF0aWxlX18gKCJ0cmFwICAjMCIgXAorCQkgICAgICA6ICIrZCIgKF9fcmVzKSBcCisJCSAgICAgIDogImQiIChfX2EpICApOyBcCitfX3N5c2NhbGxfcmV0dXJuKHR5cGUsX19yZXMpOyBcCit9CisKKyNkZWZpbmUgX3N5c2NhbGwyKHR5cGUsbmFtZSxhdHlwZSxhLGJ0eXBlLGIpIFwKK3R5cGUgbmFtZShhdHlwZSBhLGJ0eXBlIGIpIFwKK3sgXAorcmVnaXN0ZXIgbG9uZyBfX3JlcyBfX2FzbV9fICgiJWQwIikgPSBfX05SXyMjbmFtZTsgXAorcmVnaXN0ZXIgbG9uZyBfX2EgX19hc21fXyAoIiVkMSIpID0gKGxvbmcpKGEpOyBcCityZWdpc3RlciBsb25nIF9fYiBfX2FzbV9fICgiJWQyIikgPSAobG9uZykoYik7IFwKK19fYXNtX18gX192b2xhdGlsZV9fICgidHJhcCAgIzAiIFwKKwkJICAgICAgOiAiK2QiIChfX3JlcykgXAorICAgICAgICAgICAgICAgICAgICAgIDogImQiIChfX2EpLCAiZCIgKF9fYikgXAorCQkgICAgICk7IFwKK19fc3lzY2FsbF9yZXR1cm4odHlwZSxfX3Jlcyk7IFwKK30KKworI2RlZmluZSBfc3lzY2FsbDModHlwZSxuYW1lLGF0eXBlLGEsYnR5cGUsYixjdHlwZSxjKSBcCit0eXBlIG5hbWUoYXR5cGUgYSxidHlwZSBiLGN0eXBlIGMpIFwKK3sgXAorcmVnaXN0ZXIgbG9uZyBfX3JlcyBfX2FzbV9fICgiJWQwIikgPSBfX05SXyMjbmFtZTsgXAorcmVnaXN0ZXIgbG9uZyBfX2EgX19hc21fXyAoIiVkMSIpID0gKGxvbmcpKGEpOyBcCityZWdpc3RlciBsb25nIF9fYiBfX2FzbV9fICgiJWQyIikgPSAobG9uZykoYik7IFwKK3JlZ2lzdGVyIGxvbmcgX19jIF9fYXNtX18gKCIlZDMiKSA9IChsb25nKShjKTsgXAorX19hc21fXyBfX3ZvbGF0aWxlX18gKCJ0cmFwICAjMCIgXAorCQkgICAgICA6ICIrZCIgKF9fcmVzKSBcCisgICAgICAgICAgICAgICAgICAgICAgOiAiZCIgKF9fYSksICJkIiAoX19iKSwgXAorCQkJImQiIChfX2MpIFwKKwkJICAgICApOyBcCitfX3N5c2NhbGxfcmV0dXJuKHR5cGUsX19yZXMpOyBcCit9CisKKyNkZWZpbmUgX3N5c2NhbGw0KHR5cGUsbmFtZSxhdHlwZSxhLGJ0eXBlLGIsY3R5cGUsYyxkdHlwZSxkKSBcCit0eXBlIG5hbWUgKGF0eXBlIGEsIGJ0eXBlIGIsIGN0eXBlIGMsIGR0eXBlIGQpIFwKK3sgXAorcmVnaXN0ZXIgbG9uZyBfX3JlcyBfX2FzbV9fICgiJWQwIikgPSBfX05SXyMjbmFtZTsgXAorcmVnaXN0ZXIgbG9uZyBfX2EgX19hc21fXyAoIiVkMSIpID0gKGxvbmcpKGEpOyBcCityZWdpc3RlciBsb25nIF9fYiBfX2FzbV9fICgiJWQyIikgPSAobG9uZykoYik7IFwKK3JlZ2lzdGVyIGxvbmcgX19jIF9fYXNtX18gKCIlZDMiKSA9IChsb25nKShjKTsgXAorcmVnaXN0ZXIgbG9uZyBfX2QgX19hc21fXyAoIiVkNCIpID0gKGxvbmcpKGQpOyBcCitfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInRyYXAgICMwIiBcCisgICAgICAgICAgICAgICAgICAgICAgOiAiK2QiIChfX3JlcykgXAorICAgICAgICAgICAgICAgICAgICAgIDogImQiIChfX2EpLCAiZCIgKF9fYiksIFwKKwkJCSJkIiAoX19jKSwgImQiIChfX2QpICBcCisJCSAgICAgKTsgXAorX19zeXNjYWxsX3JldHVybih0eXBlLF9fcmVzKTsgXAorfQorCisjZGVmaW5lIF9zeXNjYWxsNSh0eXBlLG5hbWUsYXR5cGUsYSxidHlwZSxiLGN0eXBlLGMsZHR5cGUsZCxldHlwZSxlKSBcCit0eXBlIG5hbWUgKGF0eXBlIGEsYnR5cGUgYixjdHlwZSBjLGR0eXBlIGQsZXR5cGUgZSkgXAoreyBcCityZWdpc3RlciBsb25nIF9fcmVzIF9fYXNtX18gKCIlZDAiKSA9IF9fTlJfIyNuYW1lOyBcCityZWdpc3RlciBsb25nIF9fYSBfX2FzbV9fICgiJWQxIikgPSAobG9uZykoYSk7IFwKK3JlZ2lzdGVyIGxvbmcgX19iIF9fYXNtX18gKCIlZDIiKSA9IChsb25nKShiKTsgXAorcmVnaXN0ZXIgbG9uZyBfX2MgX19hc21fXyAoIiVkMyIpID0gKGxvbmcpKGMpOyBcCityZWdpc3RlciBsb25nIF9fZCBfX2FzbV9fICgiJWQ0IikgPSAobG9uZykoZCk7IFwKK3JlZ2lzdGVyIGxvbmcgX19lIF9fYXNtX18gKCIlZDUiKSA9IChsb25nKShlKTsgXAorX19hc21fXyBfX3ZvbGF0aWxlX18gKCJ0cmFwICAjMCIgXAorCQkgICAgICA6ICIrZCIgKF9fcmVzKSBcCisJCSAgICAgIDogImQiIChfX2EpLCAiZCIgKF9fYiksIFwKKwkJCSJkIiAoX19jKSwgImQiIChfX2QpLCAiZCIgKF9fZSkgIFwKKyAgICAgICAgICAgICAgICAgICAgICk7IFwKK19fc3lzY2FsbF9yZXR1cm4odHlwZSxfX3Jlcyk7IFwKK30KKworI2lmZGVmIF9fS0VSTkVMX18KKyNkZWZpbmUgX19BUkNIX1dBTlRfSVBDX1BBUlNFX1ZFUlNJT04KKyNkZWZpbmUgX19BUkNIX1dBTlRfT0xEX1JFQURESVIKKyNkZWZpbmUgX19BUkNIX1dBTlRfT0xEX1NUQVQKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1RBVDY0CisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19BTEFSTQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfR0VUSE9TVE5BTUUKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1BBVVNFCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TR0VUTUFTSworI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHTkFMCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19USU1FCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19VVElNRQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfV0FJVFBJRAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU09DS0VUQ0FMTAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfRkFEVklTRTY0CisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19HRVRQR1JQCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19MTFNFRUsKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX05JQ0UKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX09MRF9HRVRSTElNSVQKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX09MRFVNT1VOVAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUEVORElORworI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUFJPQ01BU0sKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1JUX1NJR0FDVElPTgorI2VuZGlmCisKKyNpZmRlZiBfX0tFUk5FTF9TWVNDQUxMU19fCisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qCisgKiB3ZSBuZWVkIHRoaXMgaW5saW5lIC0gZm9ya2luZyBmcm9tIGtlcm5lbCBzcGFjZSB3aWxsIHJlc3VsdAorICogaW4gTk8gQ09QWSBPTiBXUklURSAoISEhKSwgdW50aWwgYW4gZXhlY3ZlIGlzIGV4ZWN1dGVkLiBUaGlzCisgKiBpcyBubyBwcm9ibGVtLCBidXQgZm9yIHRoZSBzdGFjay4gVGhpcyBpcyBoYW5kbGVkIGJ5IG5vdCBsZXR0aW5nCisgKiBtYWluKCkgdXNlIHRoZSBzdGFjayBhdCBhbGwgYWZ0ZXIgZm9yaygpLiBUaHVzLCBubyBmdW5jdGlvbgorICogY2FsbHMgLSB3aGljaCBtZWFucyBpbmxpbmUgY29kZSBmb3IgZm9yayB0b28sIGFzIG90aGVyd2lzZSB3ZQorICogd291bGQgdXNlIHRoZSBzdGFjayB1cG9uIGV4aXQgZnJvbSAnZm9yaygpJy4KKyAqCisgKiBBY3R1YWxseSBvbmx5IHBhdXNlIGFuZCBmb3JrIGFyZSBuZWVkZWQgaW5saW5lLCBzbyB0aGF0IHRoZXJlCisgKiB3b24ndCBiZSBhbnkgbWVzc2luZyB3aXRoIHRoZSBzdGFjayBmcm9tIG1haW4oKSwgYnV0IHdlIGRlZmluZQorICogc29tZSBvdGhlcnMgdG9vLgorICovCisjZGVmaW5lIF9fTlJfX2V4aXQgX19OUl9leGl0CitzdGF0aWMgaW5saW5lIF9zeXNjYWxsMChwaWRfdCxzZXRzaWQpCitzdGF0aWMgaW5saW5lIF9zeXNjYWxsMyhpbnQsd3JpdGUsaW50LGZkLGNvbnN0IGNoYXIgKixidWYsb2ZmX3QsY291bnQpCitzdGF0aWMgaW5saW5lIF9zeXNjYWxsMyhpbnQscmVhZCxpbnQsZmQsY2hhciAqLGJ1ZixvZmZfdCxjb3VudCkKK3N0YXRpYyBpbmxpbmUgX3N5c2NhbGwzKG9mZl90LGxzZWVrLGludCxmZCxvZmZfdCxvZmZzZXQsaW50LGNvdW50KQorc3RhdGljIGlubGluZSBfc3lzY2FsbDEoaW50LGR1cCxpbnQsZmQpCitzdGF0aWMgaW5saW5lIF9zeXNjYWxsMyhpbnQsZXhlY3ZlLGNvbnN0IGNoYXIgKixmaWxlLGNoYXIgKiosYXJndixjaGFyICoqLGVudnApCitzdGF0aWMgaW5saW5lIF9zeXNjYWxsMyhpbnQsb3Blbixjb25zdCBjaGFyICosZmlsZSxpbnQsZmxhZyxpbnQsbW9kZSkKK3N0YXRpYyBpbmxpbmUgX3N5c2NhbGwxKGludCxjbG9zZSxpbnQsZmQpCitzdGF0aWMgaW5saW5lIF9zeXNjYWxsMShpbnQsX2V4aXQsaW50LGV4aXRjb2RlKQorc3RhdGljIGlubGluZSBfc3lzY2FsbDMocGlkX3Qsd2FpdHBpZCxwaWRfdCxwaWQsaW50ICosd2FpdF9zdGF0LGludCxvcHRpb25zKQorCithc21saW5rYWdlIGxvbmcgc3lzX21tYXAyKAorCQkJdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwKKwkJCXVuc2lnbmVkIGxvbmcgcHJvdCwgdW5zaWduZWQgbG9uZyBmbGFncywKKwkJCXVuc2lnbmVkIGxvbmcgZmQsIHVuc2lnbmVkIGxvbmcgcGdvZmYpOworYXNtbGlua2FnZSBpbnQgc3lzX2V4ZWN2ZShjaGFyICpuYW1lLCBjaGFyICoqYXJndiwgY2hhciAqKmVudnApOworYXNtbGlua2FnZSBpbnQgc3lzX3BpcGUodW5zaWduZWQgbG9uZyAqZmlsZGVzKTsKK2FzbWxpbmthZ2UgaW50IHN5c19wdHJhY2UobG9uZyByZXF1ZXN0LCBsb25nIHBpZCwgbG9uZyBhZGRyLCBsb25nIGRhdGEpOworc3RydWN0IHB0X3JlZ3M7CitzdHJ1Y3Qgc2lnYWN0aW9uOworYXNtbGlua2FnZSBsb25nIHN5c19ydF9zaWdhY3Rpb24oaW50IHNpZywKKwkJCQljb25zdCBzdHJ1Y3Qgc2lnYWN0aW9uIF9fdXNlciAqYWN0LAorCQkJCXN0cnVjdCBzaWdhY3Rpb24gX191c2VyICpvYWN0LAorCQkJCXNpemVfdCBzaWdzZXRzaXplKTsKKworI2VuZGlmCisKKy8qCisgKiAiQ29uZGl0aW9uYWwiIHN5c2NhbGxzCisgKgorICogV2hhdCB3ZSB3YW50IGlzIF9fYXR0cmlidXRlX18oKHdlYWssYWxpYXMoInN5c19uaV9zeXNjYWxsIikpKSwKKyAqIGJ1dCBpdCBkb2Vzbid0IHdvcmsgb24gYWxsIHRvb2xjaGFpbnMsIHNvIHdlIGp1c3QgZG8gaXQgYnkgaGFuZAorICovCisjZGVmaW5lIGNvbmRfc3lzY2FsbCh4KSBhc20oIi53ZWFrXHQiICN4ICJcblx0LnNldFx0IiAjeCAiLHN5c19uaV9zeXNjYWxsIikKKworI2VuZGlmIC8qIF9BU01fTTY4S19VTklTVERfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvdXNlci5oIGIvaW5jbHVkZS9hc20tbTY4ay91c2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThkNWE2NAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvdXNlci5oCkBAIC0wLDAgKzEsODkgQEAKKyNpZm5kZWYgX002OEtfVVNFUl9ICisjZGVmaW5lIF9NNjhLX1VTRVJfSAorCisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKworLyogQ29yZSBmaWxlIGZvcm1hdDogVGhlIGNvcmUgZmlsZSBpcyB3cml0dGVuIGluIHN1Y2ggYSB3YXkgdGhhdCBnZGIKKyAgIGNhbiB1bmRlcnN0YW5kIGl0IGFuZCBwcm92aWRlIHVzZWZ1bCBpbmZvcm1hdGlvbiB0byB0aGUgdXNlciAodW5kZXIKKyAgIGxpbnV4IHdlIHVzZSB0aGUgJ3RyYWQtY29yZScgYmZkKS4gIFRoZXJlIGFyZSBxdWl0ZSBhIG51bWJlciBvZgorICAgb2JzdGFjbGVzIHRvIGJlaW5nIGFibGUgdG8gdmlldyB0aGUgY29udGVudHMgb2YgdGhlIGZsb2F0aW5nIHBvaW50CisgICByZWdpc3RlcnMsIGFuZCB1bnRpbCB0aGVzZSBhcmUgc29sdmVkIHlvdSB3aWxsIG5vdCBiZSBhYmxlIHRvIHZpZXcgdGhlCisgICBjb250ZW50cyBvZiB0aGVtLiAgQWN0dWFsbHksIHlvdSBjYW4gcmVhZCBpbiB0aGUgY29yZSBmaWxlIGFuZCBsb29rIGF0CisgICB0aGUgY29udGVudHMgb2YgdGhlIHVzZXIgc3RydWN0IHRvIGZpbmQgb3V0IHdoYXQgdGhlIGZsb2F0aW5nIHBvaW50CisgICByZWdpc3RlcnMgY29udGFpbi4KKyAgIFRoZSBhY3R1YWwgZmlsZSBjb250ZW50cyBhcmUgYXMgZm9sbG93czoKKyAgIFVQQUdFOiAxIHBhZ2UgY29uc2lzdGluZyBvZiBhIHVzZXIgc3RydWN0IHRoYXQgdGVsbHMgZ2RiIHdoYXQgaXMgcHJlc2VudAorICAgaW4gdGhlIGZpbGUuICBEaXJlY3RseSBhZnRlciB0aGlzIGlzIGEgY29weSBvZiB0aGUgdGFza19zdHJ1Y3QsIHdoaWNoCisgICBpcyBjdXJyZW50bHkgbm90IHVzZWQgYnkgZ2RiLCBidXQgaXQgbWF5IGNvbWUgaW4gdXNlZnVsIGF0IHNvbWUgcG9pbnQuCisgICBBbGwgb2YgdGhlIHJlZ2lzdGVycyBhcmUgc3RvcmVkIGFzIHBhcnQgb2YgdGhlIHVwYWdlLiAgVGhlIHVwYWdlIHNob3VsZAorICAgYWx3YXlzIGJlIG9ubHkgb25lIHBhZ2UuCisgICBEQVRBOiBUaGUgZGF0YSBhcmVhIGlzIHN0b3JlZC4gIFdlIHVzZSBjdXJyZW50LT5lbmRfdGV4dCB0bworICAgY3VycmVudC0+YnJrIHRvIHBpY2sgdXAgYWxsIG9mIHRoZSB1c2VyIHZhcmlhYmxlcywgcGx1cyBhbnkgbWVtb3J5CisgICB0aGF0IG1heSBoYXZlIGJlZW4gbWFsbG9jZWQuICBObyBhdHRlbXB0IGlzIG1hZGUgdG8gZGV0ZXJtaW5lIGlmIGEgcGFnZQorICAgaXMgZGVtYW5kLXplcm8gb3IgaWYgYSBwYWdlIGlzIHRvdGFsbHkgdW51c2VkLCB3ZSBqdXN0IGNvdmVyIHRoZSBlbnRpcmUKKyAgIHJhbmdlLiAgQWxsIG9mIHRoZSBhZGRyZXNzZXMgYXJlIHJvdW5kZWQgaW4gc3VjaCBhIHdheSB0aGF0IGFuIGludGVncmFsCisgICBudW1iZXIgb2YgcGFnZXMgaXMgd3JpdHRlbi4KKyAgIFNUQUNLOiBXZSBuZWVkIHRoZSBzdGFjayBpbmZvcm1hdGlvbiBpbiBvcmRlciB0byBnZXQgYSBtZWFuaW5nZnVsCisgICBiYWNrdHJhY2UuICBXZSBuZWVkIHRvIHdyaXRlIHRoZSBkYXRhIGZyb20gKGVzcCkgdG8KKyAgIGN1cnJlbnQtPnN0YXJ0X3N0YWNrLCBzbyB3ZSByb3VuZCBlYWNoIG9mIHRoZXNlIG9mZiBpbiBvcmRlciB0byBiZSBhYmxlCisgICB0byB3cml0ZSBhbiBpbnRlZ2VyIG51bWJlciBvZiBwYWdlcy4KKyAgIFRoZSBtaW5pbXVtIGNvcmUgZmlsZSBzaXplIGlzIDMgcGFnZXMsIG9yIDEyMjg4IGJ5dGVzLgorKi8KKworc3RydWN0IHVzZXJfbTY4a2ZwX3N0cnVjdCB7CisJdW5zaWduZWQgbG9uZyAgZnByZWdzWzgqM107CS8qIGZwMC1mcDcgcmVnaXN0ZXJzICovCisJdW5zaWduZWQgbG9uZyAgZnBjbnRsWzNdOwkvKiBmcCBjb250cm9sIHJlZ3MgKi8KK307CisKKy8qIFRoaXMgaXMgdGhlIG9sZCBsYXlvdXQgb2YgInN0cnVjdCBwdF9yZWdzIiBhcyBvZiBMaW51eCAxLngsIGFuZAorICAgaXMgc3RpbGwgdGhlIGxheW91dCB1c2VkIGJ5IHVzZXIgKHRoZSBuZXcgcHRfcmVncyBkb2Vzbid0IGhhdmUKKyAgIGFsbCByZWdpc3RlcnMpLiAqLworc3RydWN0IHVzZXJfcmVnc19zdHJ1Y3QgeworCWxvbmcgZDEsZDIsZDMsZDQsZDUsZDYsZDc7CisJbG9uZyBhMCxhMSxhMixhMyxhNCxhNSxhNjsKKwlsb25nIGQwOworCWxvbmcgdXNwOworCWxvbmcgb3JpZ19kMDsKKwlzaG9ydCBzdGthZGo7CisJc2hvcnQgc3I7CisJbG9uZyBwYzsKKwlzaG9ydCBmbXR2ZWM7CisJc2hvcnQgX19maWxsOworfTsKKworCisvKiBXaGVuIHRoZSBrZXJuZWwgZHVtcHMgY29yZSwgaXQgc3RhcnRzIGJ5IGR1bXBpbmcgdGhlIHVzZXIgc3RydWN0IC0KKyAgIHRoaXMgd2lsbCBiZSB1c2VkIGJ5IGdkYiB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBkYXRhIGFuZCBzdGFjayBzZWdtZW50cworICAgYXJlIHdpdGhpbiB0aGUgZmlsZSwgYW5kIHdoYXQgdmlydHVhbCBhZGRyZXNzZXMgdG8gdXNlLiAqLworc3RydWN0IHVzZXJ7CisvKiBXZSBzdGFydCB3aXRoIHRoZSByZWdpc3RlcnMsIHRvIG1pbWljIHRoZSB3YXkgdGhhdCAibWVtb3J5IiBpcyByZXR1cm5lZAorICAgZnJvbSB0aGUgcHRyYWNlKDMsLi4uKSBmdW5jdGlvbi4gICovCisgIHN0cnVjdCB1c2VyX3JlZ3Nfc3RydWN0IHJlZ3M7CS8qIFdoZXJlIHRoZSByZWdpc3RlcnMgYXJlIGFjdHVhbGx5IHN0b3JlZCAqLworLyogcHRyYWNlIGRvZXMgbm90IHlldCBzdXBwbHkgdGhlc2UuICBTb21lZGF5Li4uLiAqLworICBpbnQgdV9mcHZhbGlkOwkJLyogVHJ1ZSBpZiBtYXRoIGNvLXByb2Nlc3NvciBiZWluZyB1c2VkLiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmb3IgdGhpcyBtZXNzLiBOb3QgeWV0IHVzZWQuICovCisgIHN0cnVjdCB1c2VyX202OGtmcF9zdHJ1Y3QgbTY4a2ZwOyAvKiBNYXRoIENvLXByb2Nlc3NvciByZWdpc3RlcnMuICovCisvKiBUaGUgcmVzdCBvZiB0aGlzIGp1bmsgaXMgdG8gaGVscCBnZGIgZmlndXJlIG91dCB3aGF0IGdvZXMgd2hlcmUgKi8KKyAgdW5zaWduZWQgbG9uZyBpbnQgdV90c2l6ZTsJLyogVGV4dCBzZWdtZW50IHNpemUgKHBhZ2VzKS4gKi8KKyAgdW5zaWduZWQgbG9uZyBpbnQgdV9kc2l6ZTsJLyogRGF0YSBzZWdtZW50IHNpemUgKHBhZ2VzKS4gKi8KKyAgdW5zaWduZWQgbG9uZyBpbnQgdV9zc2l6ZTsJLyogU3RhY2sgc2VnbWVudCBzaXplIChwYWdlcykuICovCisgIHVuc2lnbmVkIGxvbmcgc3RhcnRfY29kZTsgICAgIC8qIFN0YXJ0aW5nIHZpcnR1YWwgYWRkcmVzcyBvZiB0ZXh0LiAqLworICB1bnNpZ25lZCBsb25nIHN0YXJ0X3N0YWNrOwkvKiBTdGFydGluZyB2aXJ0dWFsIGFkZHJlc3Mgb2Ygc3RhY2sgYXJlYS4KKwkJCQkgICBUaGlzIGlzIGFjdHVhbGx5IHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLAorCQkJCSAgIHRoZSB0b3Agb2YgdGhlIHN0YWNrIGlzIGFsd2F5cyBmb3VuZCBpbiB0aGUKKwkJCQkgICBlc3AgcmVnaXN0ZXIuICAqLworICBsb25nIGludCBzaWduYWw7CQkvKiBTaWduYWwgdGhhdCBjYXVzZWQgdGhlIGNvcmUgZHVtcC4gKi8KKyAgaW50IHJlc2VydmVkOwkJCS8qIE5vIGxvbmdlciB1c2VkICovCisgIHN0cnVjdCB1c2VyX3JlZ3Nfc3RydWN0ICp1X2FyMDsKKwkJCQkvKiBVc2VkIGJ5IGdkYiB0byBoZWxwIGZpbmQgdGhlIHZhbHVlcyBmb3IgKi8KKwkJCQkvKiB0aGUgcmVnaXN0ZXJzLiAqLworICBzdHJ1Y3QgdXNlcl9tNjhrZnBfc3RydWN0KiB1X2Zwc3RhdGU7CS8qIE1hdGggQ28tcHJvY2Vzc29yIHBvaW50ZXIuICovCisgIHVuc2lnbmVkIGxvbmcgbWFnaWM7CQkvKiBUbyB1bmlxdWVseSBpZGVudGlmeSBhIGNvcmUgZmlsZSAqLworICBjaGFyIHVfY29tbVszMl07CQkvKiBVc2VyIGNvbW1hbmQgdGhhdCB3YXMgcmVzcG9uc2libGUgKi8KK307CisjZGVmaW5lIE5CUEcgUEFHRV9TSVpFCisjZGVmaW5lIFVQQUdFUyAxCisjZGVmaW5lIEhPU1RfVEVYVF9TVEFSVF9BRERSICh1LnN0YXJ0X2NvZGUpCisjZGVmaW5lIEhPU1RfU1RBQ0tfRU5EX0FERFIgKHUuc3RhcnRfc3RhY2sgKyB1LnVfc3NpemUgKiBOQlBHKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvdmlydGNvbnZlcnQuaCBiL2luY2x1ZGUvYXNtLW02OGsvdmlydGNvbnZlcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzRlODAzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay92aXJ0Y29udmVydC5oCkBAIC0wLDAgKzEsNzYgQEAKKyNpZm5kZWYgX19WSVJUX0NPTlZFUlRfXworI2RlZmluZSBfX1ZJUlRfQ09OVkVSVF9fCisKKy8qCisgKiBNYWNyb3MgdXNlZCBmb3IgY29udmVydGluZyBiZXR3ZWVuIHZpcnR1YWwgYW5kIHBoeXNpY2FsIG1hcHBpbmdzLgorICovCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisKKyNpZmRlZiBDT05GSUdfQU1JR0EKKyNpbmNsdWRlIDxhc20vYW1pZ2Fody5oPgorI2VuZGlmCisKKy8qCisgKiBDaGFuZ2UgdmlydHVhbCBhZGRyZXNzZXMgdG8gcGh5c2ljYWwgYWRkcmVzc2VzIGFuZCB2di4KKyAqLworI2lmbmRlZiBDT05GSUdfU1VOMworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbW1fdnRvcCh1bnNpZ25lZCBsb25nIGFkZHIpIF9fYXR0cmlidXRlX2NvbnN0X187CitleHRlcm4gdW5zaWduZWQgbG9uZyBtbV9wdG92KHVuc2lnbmVkIGxvbmcgYWRkcikgX19hdHRyaWJ1dGVfY29uc3RfXzsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbW1fdnRvcCh1bnNpZ25lZCBsb25nIHZhZGRyKQoreworCXJldHVybiBfX3BhKHZhZGRyKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1tX3B0b3YodW5zaWduZWQgbG9uZyBwYWRkcikKK3sKKwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpX192YShwYWRkcik7Cit9CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19TSU5HTEVfTUVNT1JZX0NIVU5LCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdmlydF90b19waHlzKHZvaWQgKnZhZGRyKQoreworCXJldHVybiAodW5zaWduZWQgbG9uZyl2YWRkciAtIFBBR0VfT0ZGU0VUICsgbTY4a19tZW1vcnlbMF0uYWRkcjsKK30KKworc3RhdGljIGlubGluZSB2b2lkICogcGh5c190b192aXJ0KHVuc2lnbmVkIGxvbmcgcGFkZHIpCit7CisJcmV0dXJuICh2b2lkICopKHBhZGRyIC0gbTY4a19tZW1vcnlbMF0uYWRkciArIFBBR0VfT0ZGU0VUKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdmlydF90b19waHlzKHZvaWQgKmFkZHJlc3MpCit7CisJcmV0dXJuIG1tX3Z0b3AoKHVuc2lnbmVkIGxvbmcpYWRkcmVzcyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqcGh5c190b192aXJ0KHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwlyZXR1cm4gKHZvaWQgKikgbW1fcHRvdihhZGRyZXNzKTsKK30KKyNlbmRpZgorCisvKiBQZXJtYW5lbnQgYWRkcmVzcyBvZiBhIHBhZ2UuICovCisjZGVmaW5lIF9fcGFnZV9hZGRyZXNzKHBhZ2UpCShQQUdFX09GRlNFVCArICgoKHBhZ2UpIC0gbWVtX21hcCkgPDwgUEFHRV9TSElGVCkpCisjZGVmaW5lIHBhZ2VfdG9fcGh5cyhwYWdlKQl2aXJ0X3RvX3BoeXMoKHZvaWQgKilfX3BhZ2VfYWRkcmVzcyhwYWdlKSkKKworLyoKKyAqIElPIGJ1cyBtZW1vcnkgYWRkcmVzc2VzIGFyZSAxOjEgd2l0aCB0aGUgcGh5c2ljYWwgYWRkcmVzcywKKyAqIGV4Y2VwdCBvbiB0aGUgUENJIGJ1cyBvZiB0aGUgSGFkZXMuCisgKi8KKyNpZmRlZiBDT05GSUdfSEFERVMKKyNkZWZpbmUgdmlydF90b19idXMoYSkgKHZpcnRfdG9fcGh5cyhhKSArIChNQUNIX0lTX0hBREVTID8gMHg4MDAwMDAwMCA6IDApKQorI2RlZmluZSBidXNfdG9fdmlydChhKSAocGh5c190b192aXJ0KChhKSAtIChNQUNIX0lTX0hBREVTID8gMHg4MDAwMDAwMCA6IDApKSkKKyNlbHNlCisjZGVmaW5lIHZpcnRfdG9fYnVzIHZpcnRfdG9fcGh5cworI2RlZmluZSBidXNfdG9fdmlydCBwaHlzX3RvX3ZpcnQKKyNlbmRpZgorCisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay92dWlkX2V2ZW50LmggYi9pbmNsdWRlL2FzbS1tNjhrL3Z1aWRfZXZlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmVjYjUyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay92dWlkX2V2ZW50LmgKQEAgLTAsMCArMSw0IEBACisjaWZuZGVmIF9NNjhLX1ZVSURfRVZFTlRfSAorI2RlZmluZSBfTTY4S19WVUlEX0VWRU5UX0gKKyNpbmNsdWRlIDxhc20tc3BhcmMvdnVpZF9ldmVudC5oPgorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL3hvci5oIGIvaW5jbHVkZS9hc20tbTY4ay94b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODJlYjEyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay94b3IuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLWdlbmVyaWMveG9yLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL3pvcnJvLmggYi9pbmNsdWRlL2FzbS1tNjhrL3pvcnJvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y4MTY1OAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvem9ycm8uaApAQCAtMCwwICsxLDQ1IEBACisjaWZuZGVmIF9BU01fTTY4S19aT1JST19ICisjZGVmaW5lIF9BU01fTTY4S19aT1JST19ICisKKyNpbmNsdWRlIDxhc20vcmF3X2lvLmg+CisKKyNkZWZpbmUgel9yZWFkYiByYXdfaW5iCisjZGVmaW5lIHpfcmVhZHcgcmF3X2ludworI2RlZmluZSB6X3JlYWRsIHJhd19pbmwKKworI2RlZmluZSB6X3dyaXRlYiByYXdfb3V0YgorI2RlZmluZSB6X3dyaXRldyByYXdfb3V0dworI2RlZmluZSB6X3dyaXRlbCByYXdfb3V0bAorCisjZGVmaW5lIHpfbWVtc2V0X2lvKGEsYixjKQltZW1zZXQoKHZvaWQgKikoYSksKGIpLChjKSkKKyNkZWZpbmUgel9tZW1jcHlfZnJvbWlvKGEsYixjKQltZW1jcHkoKGEpLCh2b2lkICopKGIpLChjKSkKKyNkZWZpbmUgel9tZW1jcHlfdG9pbyhhLGIsYykJbWVtY3B5KCh2b2lkICopKGEpLChiKSwoYykpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqel9yZW1hcF9ub2NhY2hlX3Nlcih1bnNpZ25lZCBsb25nIHBoeXNhZGRyLAorCQkJCQl1bnNpZ25lZCBsb25nIHNpemUpCit7CisJcmV0dXJuIF9faW9yZW1hcChwaHlzYWRkciwgc2l6ZSwgSU9NQVBfTk9DQUNIRV9TRVIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKnpfcmVtYXBfbm9jYWNoZV9ub25zZXIodW5zaWduZWQgbG9uZyBwaHlzYWRkciwKKwkJCQkJICAgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXJldHVybiBfX2lvcmVtYXAocGh5c2FkZHIsIHNpemUsIElPTUFQX05PQ0FDSEVfTk9OU0VSKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkICp6X3JlbWFwX3dyaXRldGhyb3VnaCh1bnNpZ25lZCBsb25nIHBoeXNhZGRyLAorCQkJCQkgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXJldHVybiBfX2lvcmVtYXAocGh5c2FkZHIsIHNpemUsIElPTUFQX1dSSVRFVEhST1VHSCk7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgKnpfcmVtYXBfZnVsbGNhY2hlKHVuc2lnbmVkIGxvbmcgcGh5c2FkZHIsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXJldHVybiBfX2lvcmVtYXAocGh5c2FkZHIsIHNpemUsIElPTUFQX0ZVTExfQ0FDSElORyk7Cit9CisKKyNkZWZpbmUgel91bm1hcCBpb3VubWFwCisjZGVmaW5lIHpfaW91bm1hcCBpb3VubWFwCisjZGVmaW5lIHpfaW9yZW1hcCB6X3JlbWFwX25vY2FjaGVfc2VyCisKKyNlbmRpZiAvKiBfQVNNX002OEtfWk9SUk9fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L01DNjgzMjguaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9NQzY4MzI4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY1YTk4NDUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvTUM2ODMyOC5oCkBAIC0wLDAgKzEsMTI2NiBAQAorCisvKiBpbmNsdWRlL2FzbS1tNjhrbm9tbXUvTUM2ODMyOC5oOiAnMzI4IGNvbnRyb2wgcmVnaXN0ZXJzCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5ICBWbGFkaW1pciBHdXJldmljaCA8dmd1cmV2aWNAY2lzY28uY29tPgorICogICAgICAgICAgICAgICAgICAgICBCZWFyICYgSGFyZSBTb2Z0d2FyZSwgSW5jLgorICoKKyAqIEJhc2VkIG9uIGluY2x1ZGUvYXNtLW02OGtub21tdS9NQzY4MzMyLmgKKyAqIENvcHlyaWdodCAoQykgMTk5OCAgS2VubmV0aCBBbGJhbm93c2tpIDxramFoZHNAa2phaGRzLmNvbT4sCisgKgorICovCisKKyNpZm5kZWYgX01DNjgzMjhfSF8KKyNkZWZpbmUgX01DNjgzMjhfSF8KKworI2RlZmluZSBCWVRFX1JFRihhZGRyKSAoKigodm9sYXRpbGUgdW5zaWduZWQgY2hhciopYWRkcikpCisjZGVmaW5lIFdPUkRfUkVGKGFkZHIpICgqKCh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCopYWRkcikpCisjZGVmaW5lIExPTkdfUkVGKGFkZHIpICgqKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nKilhZGRyKSkKKworI2RlZmluZSBQVVRfRklFTEQoZmllbGQsIHZhbCkgKCgodmFsKSA8PCBmaWVsZCMjX1NISUZUKSAmIGZpZWxkIyNfTUFTSykKKyNkZWZpbmUgR0VUX0ZJRUxEKHJlZywgZmllbGQpICgoKHJlZykgJiBmaWVsZCMjX01BU0spID4+IGZpZWxkIyNfU0hJRlQpCisKKy8qKioqKioqKioqIAorICoKKyAqIDB4RkZGRkYweHggLS0gU3lzdGVtIENvbnRyb2wKKyAqCisgKioqKioqKioqKi8KKyAKKy8qCisgKiBTeXN0ZW0gQ29udHJvbCBSZWdpc3RlciAoU0NSKQorICovCisjZGVmaW5lIFNDUl9BRERSCTB4ZmZmZmYwMDAKKyNkZWZpbmUgU0NSCQlCWVRFX1JFRihTQ1JfQUREUikKKworI2RlZmluZSBTQ1JfV0RUSDgJMHgwMQkvKiA4LUJpdCBXaWR0aCBTZWxlY3QgKi8KKyNkZWZpbmUgU0NSX0RNQVAJMHgwNAkvKiBEb3VibGUgTWFwICovCisjZGVmaW5lIFNDUl9TTwkJMHgwOAkvKiBTdXBlcnZpc29yIE9ubHkgKi8KKyNkZWZpbmUgU0NSX0JFVEVOCTB4MTAJLyogQnVzLUVycm9yIFRpbWUtT3V0IEVuYWJsZSAqLworI2RlZmluZSBTQ1JfUFJWCQkweDIwCS8qIFByaXZpbGVnZSBWaW9sYXRpb24gKi8KKyNkZWZpbmUgU0NSX1dQVgkJMHg0MAkvKiBXcml0ZSBQcm90ZWN0IFZpb2xhdGlvbiAqLworI2RlZmluZSBTQ1JfQkVUTwkweDgwCS8qIEJ1cy1FcnJvciBUaW1lT3V0ICovCisKKy8qCisgKiBNYXNrIFJldmlzaW9uIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgTVJSX0FERFIgMHhmZmZmZjAwNAorI2RlZmluZSBNUlIgICAgICBMT05HX1JFRihNUlJfQUREUikKKyAKKy8qKioqKioqKioqIAorICoKKyAqIDB4RkZGRkYxeHggLS0gQ2hpcC1TZWxlY3QgbG9naWMKKyAqCisgKioqKioqKioqKi8KKworLyoqKioqKioqKiogCisgKgorICogMHhGRkZGRjJ4eCAtLSBQaGFzZSBMb2NrZWQgTG9vcCAoUExMKSAmIFBvd2VyIENvbnRyb2wKKyAqCisgKioqKioqKioqKi8KKworLyoKKyAqIEdyb3VwIEJhc2UgQWRkcmVzcyBSZWdpc3RlcnMKKyAqLworI2RlZmluZSBHUlBCQVNFQV9BRERSCTB4ZmZmZmYxMDAKKyNkZWZpbmUgR1JQQkFTRUJfQUREUgkweGZmZmZmMTAyCisjZGVmaW5lIEdSUEJBU0VDX0FERFIJMHhmZmZmZjEwNAorI2RlZmluZSBHUlBCQVNFRF9BRERSCTB4ZmZmZmYxMDYKKworI2RlZmluZSBHUlBCQVNFQQlXT1JEX1JFRihHUlBCQVNFQV9BRERSKQorI2RlZmluZSBHUlBCQVNFQglXT1JEX1JFRihHUlBCQVNFQl9BRERSKQorI2RlZmluZSBHUlBCQVNFQwlXT1JEX1JFRihHUlBCQVNFQ19BRERSKQorI2RlZmluZSBHUlBCQVNFRAlXT1JEX1JFRihHUlBCQVNFRF9BRERSKQorCisjZGVmaW5lIEdSUEJBU0VfVgkgIDB4MDAwMQkvKiBWYWxpZCAqLworI2RlZmluZSBHUlBCQVNFX0dCQV9NQVNLICAweGZmZjAJLyogR3JvdXAgQmFzZSBBZGRyZXNzIChiaXRzIDMxLTIwKSAqLworCisvKgorICogR3JvdXAgQmFzZSBBZGRyZXNzIE1hc2sgUmVnaXN0ZXJzIAorICovCisjZGVmaW5lIEdSUE1BU0tBX0FERFIJMHhmZmZmZjEwOAorI2RlZmluZSBHUlBNQVNLQl9BRERSCTB4ZmZmZmYxMGEKKyNkZWZpbmUgR1JQTUFTS0NfQUREUgkweGZmZmZmMTBjCisjZGVmaW5lIEdSUE1BU0tEX0FERFIJMHhmZmZmZjEwZQorCisjZGVmaW5lIEdSUE1BU0tBCVdPUkRfUkVGKEdSUE1BU0tBX0FERFIpCisjZGVmaW5lIEdSUE1BU0tCCVdPUkRfUkVGKEdSUE1BU0tCX0FERFIpCisjZGVmaW5lIEdSUE1BU0tDCVdPUkRfUkVGKEdSUE1BU0tDX0FERFIpCisjZGVmaW5lIEdSUE1BU0tECVdPUkRfUkVGKEdSUE1BU0tEX0FERFIpCisKKyNkZWZpbmUgR1JNTUFTS19HTUFfTUFTSyAweGZmZmZmMAkvKiBHcm91cCBCYXNlIE1hc2sgKGJpdHMgMzEtMjApICovCisKKy8qCisgKiBDaGlwLVNlbGVjdCBPcHRpb24gUmVnaXN0ZXJzIChncm91cCBBKQorICovCisjZGVmaW5lIENTQTBfQUREUgkweGZmZmZmMTEwCisjZGVmaW5lIENTQTFfQUREUgkweGZmZmZmMTE0CisjZGVmaW5lIENTQTJfQUREUgkweGZmZmZmMTE4CisjZGVmaW5lIENTQTNfQUREUgkweGZmZmZmMTFjCisKKyNkZWZpbmUgQ1NBMAkJTE9OR19SRUYoQ1NBMF9BRERSKQorI2RlZmluZSBDU0ExCQlMT05HX1JFRihDU0ExX0FERFIpCisjZGVmaW5lIENTQTIJCUxPTkdfUkVGKENTQTJfQUREUikKKyNkZWZpbmUgQ1NBMwkJTE9OR19SRUYoQ1NBM19BRERSKQorCisjZGVmaW5lIENTQV9XQUlUX01BU0sJMHgwMDAwMDAwNwkvKiBXYWl0IFN0YXRlIFNlbGVjdGlvbiAqLworI2RlZmluZSBDU0FfV0FJVF9TSElGVAkwCisjZGVmaW5lIENTQV9STwkJMHgwMDAwMDAwOAkvKiBSZWFkLU9ubHkgKi8KKyNkZWZpbmUgQ1NBX0FNX01BU0sJMHgwMDAwZmYwMAkvKiBBZGRyZXNzIE1hc2sgKGJpdHMgMjMtMTYpICovCisjZGVmaW5lIENTQV9BTV9TSElGVAk4CisjZGVmaW5lIENTQV9CVVNXCTB4MDAwMTAwMDAJLyogQnVzIFdpZHRoIFNlbGVjdCAqLworI2RlZmluZSBDU0FfQUNfTUFTSwkweGZmMDAwMDAwCS8qIEFkZHJlc3MgQ29tcGFyZSAoYml0cyAyMy0xNikgKi8KKyNkZWZpbmUgQ1NBX0FDX1NISUZUCTI0CisKKy8qCisgKiBDaGlwLVNlbGVjdCBPcHRpb24gUmVnaXN0ZXJzIChncm91cCBCKQorICovCisjZGVmaW5lIENTQjBfQUREUgkweGZmZmZmMTIwCisjZGVmaW5lIENTQjFfQUREUgkweGZmZmZmMTI0CisjZGVmaW5lIENTQjJfQUREUgkweGZmZmZmMTI4CisjZGVmaW5lIENTQjNfQUREUgkweGZmZmZmMTJjCisKKyNkZWZpbmUgQ1NCMAkJTE9OR19SRUYoQ1NCMF9BRERSKQorI2RlZmluZSBDU0IxCQlMT05HX1JFRihDU0IxX0FERFIpCisjZGVmaW5lIENTQjIJCUxPTkdfUkVGKENTQjJfQUREUikKKyNkZWZpbmUgQ1NCMwkJTE9OR19SRUYoQ1NCM19BRERSKQorCisjZGVmaW5lIENTQl9XQUlUX01BU0sJMHgwMDAwMDAwNwkvKiBXYWl0IFN0YXRlIFNlbGVjdGlvbiAqLworI2RlZmluZSBDU0JfV0FJVF9TSElGVAkwCisjZGVmaW5lIENTQl9STwkJMHgwMDAwMDAwOAkvKiBSZWFkLU9ubHkgKi8KKyNkZWZpbmUgQ1NCX0FNX01BU0sJMHgwMDAwZmYwMAkvKiBBZGRyZXNzIE1hc2sgKGJpdHMgMjMtMTYpICovCisjZGVmaW5lIENTQl9BTV9TSElGVAk4CisjZGVmaW5lIENTQl9CVVNXCTB4MDAwMTAwMDAJLyogQnVzIFdpZHRoIFNlbGVjdCAqLworI2RlZmluZSBDU0JfQUNfTUFTSwkweGZmMDAwMDAwCS8qIEFkZHJlc3MgQ29tcGFyZSAoYml0cyAyMy0xNikgKi8KKyNkZWZpbmUgQ1NCX0FDX1NISUZUCTI0CisKKy8qCisgKiBDaGlwLVNlbGVjdCBPcHRpb24gUmVnaXN0ZXJzIChncm91cCBDKQorICovCisjZGVmaW5lIENTQzBfQUREUgkweGZmZmZmMTMwCisjZGVmaW5lIENTQzFfQUREUgkweGZmZmZmMTM0CisjZGVmaW5lIENTQzJfQUREUgkweGZmZmZmMTM4CisjZGVmaW5lIENTQzNfQUREUgkweGZmZmZmMTNjCisKKyNkZWZpbmUgQ1NDMAkJTE9OR19SRUYoQ1NDMF9BRERSKQorI2RlZmluZSBDU0MxCQlMT05HX1JFRihDU0MxX0FERFIpCisjZGVmaW5lIENTQzIJCUxPTkdfUkVGKENTQzJfQUREUikKKyNkZWZpbmUgQ1NDMwkJTE9OR19SRUYoQ1NDM19BRERSKQorCisjZGVmaW5lIENTQ19XQUlUX01BU0sJMHgwMDAwMDAwNwkvKiBXYWl0IFN0YXRlIFNlbGVjdGlvbiAqLworI2RlZmluZSBDU0NfV0FJVF9TSElGVAkwCisjZGVmaW5lIENTQ19STwkJMHgwMDAwMDAwOAkvKiBSZWFkLU9ubHkgKi8KKyNkZWZpbmUgQ1NDX0FNX01BU0sJMHgwMDAwZmZmMAkvKiBBZGRyZXNzIE1hc2sgKGJpdHMgMjMtMTIpICovCisjZGVmaW5lIENTQ19BTV9TSElGVAk0CisjZGVmaW5lIENTQ19CVVNXCTB4MDAwMTAwMDAJLyogQnVzIFdpZHRoIFNlbGVjdCAqLworI2RlZmluZSBDU0NfQUNfTUFTSwkweGZmZjAwMDAwCS8qIEFkZHJlc3MgQ29tcGFyZSAoYml0cyAyMy0xMikgKi8KKyNkZWZpbmUgQ1NDX0FDX1NISUZUCTIwCisKKy8qCisgKiBDaGlwLVNlbGVjdCBPcHRpb24gUmVnaXN0ZXJzIChncm91cCBEKQorICovCisjZGVmaW5lIENTRDBfQUREUgkweGZmZmZmMTQwCisjZGVmaW5lIENTRDFfQUREUgkweGZmZmZmMTQ0CisjZGVmaW5lIENTRDJfQUREUgkweGZmZmZmMTQ4CisjZGVmaW5lIENTRDNfQUREUgkweGZmZmZmMTRjCisKKyNkZWZpbmUgQ1NEMAkJTE9OR19SRUYoQ1NEMF9BRERSKQorI2RlZmluZSBDU0QxCQlMT05HX1JFRihDU0QxX0FERFIpCisjZGVmaW5lIENTRDIJCUxPTkdfUkVGKENTRDJfQUREUikKKyNkZWZpbmUgQ1NEMwkJTE9OR19SRUYoQ1NEM19BRERSKQorCisjZGVmaW5lIENTRF9XQUlUX01BU0sJMHgwMDAwMDAwNwkvKiBXYWl0IFN0YXRlIFNlbGVjdGlvbiAqLworI2RlZmluZSBDU0RfV0FJVF9TSElGVAkwCisjZGVmaW5lIENTRF9STwkJMHgwMDAwMDAwOAkvKiBSZWFkLU9ubHkgKi8KKyNkZWZpbmUgQ1NEX0FNX01BU0sJMHgwMDAwZmZmMAkvKiBBZGRyZXNzIE1hc2sgKGJpdHMgMjMtMTIpICovCisjZGVmaW5lIENTRF9BTV9TSElGVAk0CisjZGVmaW5lIENTRF9CVVNXCTB4MDAwMTAwMDAJLyogQnVzIFdpZHRoIFNlbGVjdCAqLworI2RlZmluZSBDU0RfQUNfTUFTSwkweGZmZjAwMDAwCS8qIEFkZHJlc3MgQ29tcGFyZSAoYml0cyAyMy0xMikgKi8KKyNkZWZpbmUgQ1NEX0FDX1NISUZUCTIwCisKKy8qKioqKioqKioqCisgKgorICogMHhGRkZGRjJ4eCAtLSBQaGFzZSBMb2NrZWQgTG9vcCAoUExMKSAmIFBvd2VyIENvbnRyb2wKKyAqCisgKioqKioqKioqKi8KKyAKKy8qCisgKiBQTEwgQ29udHJvbCBSZWdpc3RlciAKKyAqLworI2RlZmluZSBQTExDUl9BRERSCTB4ZmZmZmYyMDAKKyNkZWZpbmUgUExMQ1IJCVdPUkRfUkVGKFBMTENSX0FERFIpCisKKyNkZWZpbmUgUExMQ1JfRElTUExMCSAgICAgICAweDAwMDgJLyogRGlzYWJsZSBQTEwgKi8KKyNkZWZpbmUgUExMQ1JfQ0xLRU4JICAgICAgIDB4MDAxMAkvKiBDbG9jayAoQ0xLTyBwaW4pIGVuYWJsZSAqLworI2RlZmluZSBQTExDUl9TWVNDTEtfU0VMX01BU0sgIDB4MDcwMAkvKiBTeXN0ZW0gQ2xvY2sgU2VsZWN0aW9uICovCisjZGVmaW5lIFBMTENSX1NZU0NMS19TRUxfU0hJRlQgOAorI2RlZmluZSBQTExDUl9QSVhDTEtfU0VMX01BU0sgIDB4MzgwMAkvKiBMQ0QgQ2xvY2sgU2VsZWN0aW9uICovCisjZGVmaW5lIFBMTENSX1BJWENMS19TRUxfU0hJRlQgMTEKKworLyogJ0VaMzI4LWNvbXBhdGlibGUgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgUExMQ1JfTENEQ0xLX1NFTF9NQVNLCVBMTENSX1BJWENMS19TRUxfTUFTSworI2RlZmluZSBQTExDUl9MQ0RDTEtfU0VMX1NISUZUCVBMTENSX1BJWENMS19TRUxfU0hJRlQKKworLyoKKyAqIFBMTCBGcmVxdWVuY3kgU2VsZWN0IFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgUExMRlNSX0FERFIJMHhmZmZmZjIwMgorI2RlZmluZSBQTExGU1IJCVdPUkRfUkVGKFBMTEZTUl9BRERSKQorCisjZGVmaW5lIFBMTEZTUl9QQ19NQVNLCTB4MDBmZgkJLyogUCBDb3VudCAqLworI2RlZmluZSBQTExGU1JfUENfU0hJRlQgMAorI2RlZmluZSBQTExGU1JfUUNfTUFTSwkweDBmMDAJCS8qIFEgQ291bnQgKi8KKyNkZWZpbmUgUExMRlNSX1FDX1NISUZUIDgKKyNkZWZpbmUgUExMRlNSX1BST1QJMHg0MDAwCQkvKiBQcm90ZWN0IFAgJiBRICovCisjZGVmaW5lIFBMTEZTUl9DTEszMgkweDgwMDAJCS8qIENsb2NrIDMyIChrSHopICovCisKKy8qCisgKiBQb3dlciBDb250cm9sIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgUENUUkxfQUREUgkweGZmZmZmMjA3CisjZGVmaW5lIFBDVFJMCQlCWVRFX1JFRihQQ1RSTF9BRERSKQorCisjZGVmaW5lIFBDVFJMX1dJRFRIX01BU0sJMHgxZgkvKiBDUFUgQ2xvY2sgYnVyc3RzIHdpZHRoICovCisjZGVmaW5lIFBDVFJMX1dJRFRIX1NISUZUCTAKKyNkZWZpbmUgUENUUkxfU1RPUAkJMHg0MAkvKiBFbnRlciBwb3dlci1zYXZlIG1vZGUgaW1tZWRpYXRlbHkgKi8gCisjZGVmaW5lIFBDVFJMX1BDRU4JCTB4ODAJLyogUG93ZXIgQ29udHJvbCBFbmFibGUgKi8KKworLyoqKioqKioqKioKKyAqCisgKiAweEZGRkZGM3h4IC0tIEludGVycnVwdCBDb250cm9sbGVyCisgKgorICoqKioqKioqKiovCisKKy8qIAorICogSW50ZXJydXB0IFZlY3RvciBSZWdpc3RlcgorICovCisjZGVmaW5lIElWUl9BRERSCTB4ZmZmZmYzMDAKKyNkZWZpbmUgSVZSCQlCWVRFX1JFRihJVlJfQUREUikKKworI2RlZmluZSBJVlJfVkVDVE9SX01BU0sgMHhGOAorCisvKgorICogSW50ZXJydXB0IGNvbnRyb2wgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBJQ1JfQURSUgkweGZmZmZmMzAyCisjZGVmaW5lIElDUgkJV09SRF9SRUYoSUNSX0FERFIpCisKKyNkZWZpbmUgSUNSX0VUNgkJMHgwMTAwCS8qIEVkZ2UgVHJpZ2dlciBTZWxlY3QgZm9yIElSUTYgKi8KKyNkZWZpbmUgSUNSX0VUMwkJMHgwMjAwCS8qIEVkZ2UgVHJpZ2dlciBTZWxlY3QgZm9yIElSUTMgKi8KKyNkZWZpbmUgSUNSX0VUMgkJMHgwNDAwCS8qIEVkZ2UgVHJpZ2dlciBTZWxlY3QgZm9yIElSUTIgKi8KKyNkZWZpbmUgSUNSX0VUMQkJMHgwODAwCS8qIEVkZ2UgVHJpZ2dlciBTZWxlY3QgZm9yIElSUTEgKi8KKyNkZWZpbmUgSUNSX1BPTDYJMHgxMDAwCS8qIFBvbGFyaXR5IENvbnRyb2wgZm9yIElSUTYgKi8KKyNkZWZpbmUgSUNSX1BPTDMJMHgyMDAwCS8qIFBvbGFyaXR5IENvbnRyb2wgZm9yIElSUTMgKi8KKyNkZWZpbmUgSUNSX1BPTDIJMHg0MDAwCS8qIFBvbGFyaXR5IENvbnRyb2wgZm9yIElSUTIgKi8KKyNkZWZpbmUgSUNSX1BPTDEJMHg4MDAwCS8qIFBvbGFyaXR5IENvbnRyb2wgZm9yIElSUTEgKi8KKworLyoKKyAqIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgSU1SX0FERFIJMHhmZmZmZjMwNAorI2RlZmluZSBJTVIJCUxPTkdfUkVGKElNUl9BRERSKQorIAorLyoKKyAqIERlZmluZSB0aGUgbmFtZXMgZm9yIGJpdCBwb3NpdGlvbnMgZmlyc3QuIFRoaXMgaXMgdXNlZnVsIGZvcgorICogcmVxdWVzdF9pcnEKKyAqLworI2RlZmluZSBTUElNX0lSUV9OVU0JMAkvKiBTUEkgTWFzdGVyIGludGVycnVwdCAqLworI2RlZmluZQlUTVIyX0lSUV9OVU0JMQkvKiBUaW1lciAyIGludGVycnVwdCAqLworI2RlZmluZSBVQVJUX0lSUV9OVU0JMgkvKiBVQVJUIGludGVycnVwdCAqLwkKKyNkZWZpbmUJV0RUX0lSUV9OVU0JMwkvKiBXYXRjaGRvZyBUaW1lciBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgUlRDX0lSUV9OVU0JNAkvKiBSVEMgaW50ZXJydXB0ICovCisjZGVmaW5lCUtCX0lSUV9OVU0JNgkvKiBLZXlib2FyZCBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgUFdNX0lSUV9OVU0JNwkvKiBQdWxzZS1XaWR0aCBNb2R1bGF0b3IgaW50LiAqLworI2RlZmluZQlJTlQwX0lSUV9OVU0JOAkvKiBFeHRlcm5hbCBJTlQwICovCisjZGVmaW5lCUlOVDFfSVJRX05VTQk5CS8qIEV4dGVybmFsIElOVDEgKi8KKyNkZWZpbmUJSU5UMl9JUlFfTlVNCTEwCS8qIEV4dGVybmFsIElOVDIgKi8KKyNkZWZpbmUJSU5UM19JUlFfTlVNCTExCS8qIEV4dGVybmFsIElOVDMgKi8KKyNkZWZpbmUJSU5UNF9JUlFfTlVNCTEyCS8qIEV4dGVybmFsIElOVDQgKi8KKyNkZWZpbmUJSU5UNV9JUlFfTlVNCTEzCS8qIEV4dGVybmFsIElOVDUgKi8KKyNkZWZpbmUJSU5UNl9JUlFfTlVNCTE0CS8qIEV4dGVybmFsIElOVDYgKi8KKyNkZWZpbmUJSU5UN19JUlFfTlVNCTE1CS8qIEV4dGVybmFsIElOVDcgKi8KKyNkZWZpbmUgSVJRMV9JUlFfTlVNCTE2CS8qIElSUTEgKi8KKyNkZWZpbmUgSVJRMl9JUlFfTlVNCTE3CS8qIElSUTIgKi8KKyNkZWZpbmUgSVJRM19JUlFfTlVNCTE4CS8qIElSUTMgKi8KKyNkZWZpbmUgSVJRNl9JUlFfTlVNCTE5CS8qIElSUTYgKi8KKyNkZWZpbmUgUEVOX0lSUV9OVU0JMjAJLyogUGVuIEludGVycnVwdCAqLworI2RlZmluZSBTUElTX0lSUV9OVU0JMjEJLyogU1BJIFNsYXZlIEludGVycnVwdCAqLworI2RlZmluZSBUTVIxX0lSUV9OVU0JMjIJLyogVGltZXIgMSBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRN19JUlFfTlVNCTIzCS8qIElSUTcgKi8KKworLyogJzMyOC1jb21wYXRpYmxlIGRlZmluaXRpb25zICovCisjZGVmaW5lIFNQSV9JUlFfTlVNCVNQSU1fSVJRX05VTQorI2RlZmluZSBUTVJfSVJRX05VTQlUTVIxX0lSUV9OVU0KKyAKKy8qCisgKiBIZXJlIGdvIHRoZSBiaXRtYXNrcyB0aGVtc2VsdmVzCisgKi8KKyNkZWZpbmUgSU1SX01TUElNIAkoMSA8PCBTUElNIF9JUlFfTlVNKQkvKiBNYXNrIFNQSSBNYXN0ZXIgaW50ZXJydXB0ICovCisjZGVmaW5lCUlNUl9NVE1SMgkoMSA8PCBUTVIyX0lSUV9OVU0pCS8qIE1hc2sgVGltZXIgMiBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU1SX01VQVJUCSgxIDw8IFVBUlRfSVJRX05VTSkJLyogTWFzayBVQVJUIGludGVycnVwdCAqLwkKKyNkZWZpbmUJSU1SX01XRFQJKDEgPDwgV0RUX0lSUV9OVU0pCS8qIE1hc2sgV2F0Y2hkb2cgVGltZXIgaW50ZXJydXB0ICovCisjZGVmaW5lIElNUl9NUlRDCSgxIDw8IFJUQ19JUlFfTlVNKQkvKiBNYXNrIFJUQyBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUJSU1SX01LQgkJKDEgPDwgS0JfSVJRX05VTSkJLyogTWFzayBLZXlib2FyZCBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU1SX01QV00JKDEgPDwgUFdNX0lSUV9OVU0pCS8qIE1hc2sgUHVsc2UtV2lkdGggTW9kdWxhdG9yIGludC4gKi8KKyNkZWZpbmUJSU1SX01JTlQwCSgxIDw8IElOVDBfSVJRX05VTSkJLyogTWFzayBFeHRlcm5hbCBJTlQwICovCisjZGVmaW5lCUlNUl9NSU5UMQkoMSA8PCBJTlQxX0lSUV9OVU0pCS8qIE1hc2sgRXh0ZXJuYWwgSU5UMSAqLworI2RlZmluZQlJTVJfTUlOVDIJKDEgPDwgSU5UMl9JUlFfTlVNKQkvKiBNYXNrIEV4dGVybmFsIElOVDIgKi8KKyNkZWZpbmUJSU1SX01JTlQzCSgxIDw8IElOVDNfSVJRX05VTSkJLyogTWFzayBFeHRlcm5hbCBJTlQzICovCisjZGVmaW5lCUlNUl9NSU5UNAkoMSA8PCBJTlQ0X0lSUV9OVU0pCS8qIE1hc2sgRXh0ZXJuYWwgSU5UNCAqLworI2RlZmluZQlJTVJfTUlOVDUJKDEgPDwgSU5UNV9JUlFfTlVNKQkvKiBNYXNrIEV4dGVybmFsIElOVDUgKi8KKyNkZWZpbmUJSU1SX01JTlQ2CSgxIDw8IElOVDZfSVJRX05VTSkJLyogTWFzayBFeHRlcm5hbCBJTlQ2ICovCisjZGVmaW5lCUlNUl9NSU5UNwkoMSA8PCBJTlQ3X0lSUV9OVU0pCS8qIE1hc2sgRXh0ZXJuYWwgSU5UNyAqLworI2RlZmluZSBJTVJfTUlSUTEJKDEgPDwgSVJRMV9JUlFfTlVNKQkvKiBNYXNrIElSUTEgKi8KKyNkZWZpbmUgSU1SX01JUlEyCSgxIDw8IElSUTJfSVJRX05VTSkJLyogTWFzayBJUlEyICovCisjZGVmaW5lIElNUl9NSVJRMwkoMSA8PCBJUlEzX0lSUV9OVU0pCS8qIE1hc2sgSVJRMyAqLworI2RlZmluZSBJTVJfTUlSUTYJKDEgPDwgSVJRNl9JUlFfTlVNKQkvKiBNYXNrIElSUTYgKi8KKyNkZWZpbmUgSU1SX01QRU4JKDEgPDwgUEVOX0lSUV9OVU0pCS8qIE1hc2sgUGVuIEludGVycnVwdCAqLworI2RlZmluZSBJTVJfTVNQSVMJKDEgPDwgU1BJU19JUlFfTlVNKQkvKiBNYXNrIFNQSSBTbGF2ZSBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU1SX01UTVIxCSgxIDw8IFRNUjFfSVJRX05VTSkJLyogTWFzayBUaW1lciAxIGludGVycnVwdCAqLworI2RlZmluZSBJTVJfTUlSUTcJKDEgPDwgSVJRN19JUlFfTlVNKQkvKiBNYXNrIElSUTcgKi8KKworLyogJ0VaMzI4LWNvbXBhdGlibGUgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgSU1SX01TUEkJSU1SX01TUElNCisjZGVmaW5lIElNUl9NVE1SCUlNUl9NVE1SMQorCisvKiAKKyAqIEludGVycnVwdCBXYWtlLVVwIEVuYWJsZSBSZWdpc3RlcgorICovCisjZGVmaW5lIElXUl9BRERSCTB4ZmZmZmYzMDgKKyNkZWZpbmUgSVdSCQlMT05HX1JFRihJV1JfQUREUikKKworI2RlZmluZSBJV1JfU1BJTSAJKDEgPDwgU1BJTSBfSVJRX05VTSkJLyogU1BJIE1hc3RlciBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUJSVdSX1RNUjIJKDEgPDwgVE1SMl9JUlFfTlVNKQkvKiBUaW1lciAyIGludGVycnVwdCAqLworI2RlZmluZSBJV1JfVUFSVAkoMSA8PCBVQVJUX0lSUV9OVU0pCS8qIFVBUlQgaW50ZXJydXB0ICovCQorI2RlZmluZQlJV1JfV0RUCQkoMSA8PCBXRFRfSVJRX05VTSkJLyogV2F0Y2hkb2cgVGltZXIgaW50ZXJydXB0ICovCisjZGVmaW5lIElXUl9SVEMJCSgxIDw8IFJUQ19JUlFfTlVNKQkvKiBSVEMgaW50ZXJydXB0ICovCisjZGVmaW5lCUlXUl9LQgkJKDEgPDwgS0JfSVJRX05VTSkJLyogS2V5Ym9hcmQgSW50ZXJydXB0ICovCisjZGVmaW5lIElXUl9QV00JCSgxIDw8IFBXTV9JUlFfTlVNKQkvKiBQdWxzZS1XaWR0aCBNb2R1bGF0b3IgaW50LiAqLworI2RlZmluZQlJV1JfSU5UMAkoMSA8PCBJTlQwX0lSUV9OVU0pCS8qIEV4dGVybmFsIElOVDAgKi8KKyNkZWZpbmUJSVdSX0lOVDEJKDEgPDwgSU5UMV9JUlFfTlVNKQkvKiBFeHRlcm5hbCBJTlQxICovCisjZGVmaW5lCUlXUl9JTlQyCSgxIDw8IElOVDJfSVJRX05VTSkJLyogRXh0ZXJuYWwgSU5UMiAqLworI2RlZmluZQlJV1JfSU5UMwkoMSA8PCBJTlQzX0lSUV9OVU0pCS8qIEV4dGVybmFsIElOVDMgKi8KKyNkZWZpbmUJSVdSX0lOVDQJKDEgPDwgSU5UNF9JUlFfTlVNKQkvKiBFeHRlcm5hbCBJTlQ0ICovCisjZGVmaW5lCUlXUl9JTlQ1CSgxIDw8IElOVDVfSVJRX05VTSkJLyogRXh0ZXJuYWwgSU5UNSAqLworI2RlZmluZQlJV1JfSU5UNgkoMSA8PCBJTlQ2X0lSUV9OVU0pCS8qIEV4dGVybmFsIElOVDYgKi8KKyNkZWZpbmUJSVdSX0lOVDcJKDEgPDwgSU5UN19JUlFfTlVNKQkvKiBFeHRlcm5hbCBJTlQ3ICovCisjZGVmaW5lIElXUl9JUlExCSgxIDw8IElSUTFfSVJRX05VTSkJLyogSVJRMSAqLworI2RlZmluZSBJV1JfSVJRMgkoMSA8PCBJUlEyX0lSUV9OVU0pCS8qIElSUTIgKi8KKyNkZWZpbmUgSVdSX0lSUTMJKDEgPDwgSVJRM19JUlFfTlVNKQkvKiBJUlEzICovCisjZGVmaW5lIElXUl9JUlE2CSgxIDw8IElSUTZfSVJRX05VTSkJLyogSVJRNiAqLworI2RlZmluZSBJV1JfUEVOCQkoMSA8PCBQRU5fSVJRX05VTSkJLyogUGVuIEludGVycnVwdCAqLworI2RlZmluZSBJV1JfU1BJUwkoMSA8PCBTUElTX0lSUV9OVU0pCS8qIFNQSSBTbGF2ZSBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVdSX1RNUjEJKDEgPDwgVE1SMV9JUlFfTlVNKQkvKiBUaW1lciAxIGludGVycnVwdCAqLworI2RlZmluZSBJV1JfSVJRNwkoMSA8PCBJUlE3X0lSUV9OVU0pCS8qIElSUTcgKi8KKworLyogCisgKiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIAorICovCisjZGVmaW5lIElTUl9BRERSCTB4ZmZmZmYzMGMKKyNkZWZpbmUgSVNSCQlMT05HX1JFRihJU1JfQUREUikKKworI2RlZmluZSBJU1JfU1BJTSAJKDEgPDwgU1BJTSBfSVJRX05VTSkJLyogU1BJIE1hc3RlciBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUJSVNSX1RNUjIJKDEgPDwgVE1SMl9JUlFfTlVNKQkvKiBUaW1lciAyIGludGVycnVwdCAqLworI2RlZmluZSBJU1JfVUFSVAkoMSA8PCBVQVJUX0lSUV9OVU0pCS8qIFVBUlQgaW50ZXJydXB0ICovCQorI2RlZmluZQlJU1JfV0RUCQkoMSA8PCBXRFRfSVJRX05VTSkJLyogV2F0Y2hkb2cgVGltZXIgaW50ZXJydXB0ICovCisjZGVmaW5lIElTUl9SVEMJCSgxIDw8IFJUQ19JUlFfTlVNKQkvKiBSVEMgaW50ZXJydXB0ICovCisjZGVmaW5lCUlTUl9LQgkJKDEgPDwgS0JfSVJRX05VTSkJLyogS2V5Ym9hcmQgSW50ZXJydXB0ICovCisjZGVmaW5lIElTUl9QV00JCSgxIDw8IFBXTV9JUlFfTlVNKQkvKiBQdWxzZS1XaWR0aCBNb2R1bGF0b3IgaW50LiAqLworI2RlZmluZQlJU1JfSU5UMAkoMSA8PCBJTlQwX0lSUV9OVU0pCS8qIEV4dGVybmFsIElOVDAgKi8KKyNkZWZpbmUJSVNSX0lOVDEJKDEgPDwgSU5UMV9JUlFfTlVNKQkvKiBFeHRlcm5hbCBJTlQxICovCisjZGVmaW5lCUlTUl9JTlQyCSgxIDw8IElOVDJfSVJRX05VTSkJLyogRXh0ZXJuYWwgSU5UMiAqLworI2RlZmluZQlJU1JfSU5UMwkoMSA8PCBJTlQzX0lSUV9OVU0pCS8qIEV4dGVybmFsIElOVDMgKi8KKyNkZWZpbmUJSVNSX0lOVDQJKDEgPDwgSU5UNF9JUlFfTlVNKQkvKiBFeHRlcm5hbCBJTlQ0ICovCisjZGVmaW5lCUlTUl9JTlQ1CSgxIDw8IElOVDVfSVJRX05VTSkJLyogRXh0ZXJuYWwgSU5UNSAqLworI2RlZmluZQlJU1JfSU5UNgkoMSA8PCBJTlQ2X0lSUV9OVU0pCS8qIEV4dGVybmFsIElOVDYgKi8KKyNkZWZpbmUJSVNSX0lOVDcJKDEgPDwgSU5UN19JUlFfTlVNKQkvKiBFeHRlcm5hbCBJTlQ3ICovCisjZGVmaW5lIElTUl9JUlExCSgxIDw8IElSUTFfSVJRX05VTSkJLyogSVJRMSAqLworI2RlZmluZSBJU1JfSVJRMgkoMSA8PCBJUlEyX0lSUV9OVU0pCS8qIElSUTIgKi8KKyNkZWZpbmUgSVNSX0lSUTMJKDEgPDwgSVJRM19JUlFfTlVNKQkvKiBJUlEzICovCisjZGVmaW5lIElTUl9JUlE2CSgxIDw8IElSUTZfSVJRX05VTSkJLyogSVJRNiAqLworI2RlZmluZSBJU1JfUEVOCQkoMSA8PCBQRU5fSVJRX05VTSkJLyogUGVuIEludGVycnVwdCAqLworI2RlZmluZSBJU1JfU1BJUwkoMSA8PCBTUElTX0lSUV9OVU0pCS8qIFNQSSBTbGF2ZSBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVNSX1RNUjEJKDEgPDwgVE1SMV9JUlFfTlVNKQkvKiBUaW1lciAxIGludGVycnVwdCAqLworI2RlZmluZSBJU1JfSVJRNwkoMSA8PCBJUlE3X0lSUV9OVU0pCS8qIElSUTcgKi8KKworLyogJ0VaMzI4LWNvbXBhdGlibGUgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgSVNSX1NQSQlJU1JfU1BJTQorI2RlZmluZSBJU1JfVE1SCUlTUl9UTVIxCisKKy8qIAorICogSW50ZXJydXB0IFBlbmRpbmcgUmVnaXN0ZXIgCisgKi8KKyNkZWZpbmUgSVBSX0FERFIJMHhmZmZmZjMxMAorI2RlZmluZSBJUFIJCUxPTkdfUkVGKElQUl9BRERSKQorCisjZGVmaW5lIElQUl9TUElNIAkoMSA8PCBTUElNIF9JUlFfTlVNKQkvKiBTUEkgTWFzdGVyIGludGVycnVwdCAqLworI2RlZmluZQlJUFJfVE1SMgkoMSA8PCBUTVIyX0lSUV9OVU0pCS8qIFRpbWVyIDIgaW50ZXJydXB0ICovCisjZGVmaW5lIElQUl9VQVJUCSgxIDw8IFVBUlRfSVJRX05VTSkJLyogVUFSVCBpbnRlcnJ1cHQgKi8JCisjZGVmaW5lCUlQUl9XRFQJCSgxIDw8IFdEVF9JUlFfTlVNKQkvKiBXYXRjaGRvZyBUaW1lciBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVBSX1JUQwkJKDEgPDwgUlRDX0lSUV9OVU0pCS8qIFJUQyBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUJSVBSX0tCCQkoMSA8PCBLQl9JUlFfTlVNKQkvKiBLZXlib2FyZCBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVBSX1BXTQkJKDEgPDwgUFdNX0lSUV9OVU0pCS8qIFB1bHNlLVdpZHRoIE1vZHVsYXRvciBpbnQuICovCisjZGVmaW5lCUlQUl9JTlQwCSgxIDw8IElOVDBfSVJRX05VTSkJLyogRXh0ZXJuYWwgSU5UMCAqLworI2RlZmluZQlJUFJfSU5UMQkoMSA8PCBJTlQxX0lSUV9OVU0pCS8qIEV4dGVybmFsIElOVDEgKi8KKyNkZWZpbmUJSVBSX0lOVDIJKDEgPDwgSU5UMl9JUlFfTlVNKQkvKiBFeHRlcm5hbCBJTlQyICovCisjZGVmaW5lCUlQUl9JTlQzCSgxIDw8IElOVDNfSVJRX05VTSkJLyogRXh0ZXJuYWwgSU5UMyAqLworI2RlZmluZQlJUFJfSU5UNAkoMSA8PCBJTlQ0X0lSUV9OVU0pCS8qIEV4dGVybmFsIElOVDQgKi8KKyNkZWZpbmUJSVBSX0lOVDUJKDEgPDwgSU5UNV9JUlFfTlVNKQkvKiBFeHRlcm5hbCBJTlQ1ICovCisjZGVmaW5lCUlQUl9JTlQ2CSgxIDw8IElOVDZfSVJRX05VTSkJLyogRXh0ZXJuYWwgSU5UNiAqLworI2RlZmluZQlJUFJfSU5UNwkoMSA8PCBJTlQ3X0lSUV9OVU0pCS8qIEV4dGVybmFsIElOVDcgKi8KKyNkZWZpbmUgSVBSX0lSUTEJKDEgPDwgSVJRMV9JUlFfTlVNKQkvKiBJUlExICovCisjZGVmaW5lIElQUl9JUlEyCSgxIDw8IElSUTJfSVJRX05VTSkJLyogSVJRMiAqLworI2RlZmluZSBJUFJfSVJRMwkoMSA8PCBJUlEzX0lSUV9OVU0pCS8qIElSUTMgKi8KKyNkZWZpbmUgSVBSX0lSUTYJKDEgPDwgSVJRNl9JUlFfTlVNKQkvKiBJUlE2ICovCisjZGVmaW5lIElQUl9QRU4JCSgxIDw8IFBFTl9JUlFfTlVNKQkvKiBQZW4gSW50ZXJydXB0ICovCisjZGVmaW5lIElQUl9TUElTCSgxIDw8IFNQSVNfSVJRX05VTSkJLyogU1BJIFNsYXZlIEludGVycnVwdCAqLworI2RlZmluZSBJUFJfVE1SMQkoMSA8PCBUTVIxX0lSUV9OVU0pCS8qIFRpbWVyIDEgaW50ZXJydXB0ICovCisjZGVmaW5lIElQUl9JUlE3CSgxIDw8IElSUTdfSVJRX05VTSkJLyogSVJRNyAqLworCisvKiAnRVozMjgtY29tcGF0aWJsZSBkZWZpbml0aW9ucyAqLworI2RlZmluZSBJUFJfU1BJCUlQUl9TUElNCisjZGVmaW5lIElQUl9UTVIJSVBSX1RNUjEKKworLyoqKioqKioqKioKKyAqCisgKiAweEZGRkZGNHh4IC0tIFBhcmFsbGVsIFBvcnRzCisgKgorICoqKioqKioqKiovCisKKy8qCisgKiBQb3J0IEEKKyAqLworI2RlZmluZSBQQURJUl9BRERSCTB4ZmZmZmY0MDAJCS8qIFBvcnQgQSBkaXJlY3Rpb24gcmVnICovCisjZGVmaW5lIFBBREFUQV9BRERSCTB4ZmZmZmY0MDEJCS8qIFBvcnQgQSBkYXRhIHJlZ2lzdGVyICovCisjZGVmaW5lIFBBU0VMX0FERFIJMHhmZmZmZjQwMwkJLyogUG9ydCBBIFNlbGVjdCByZWdpc3RlciAqLworCisjZGVmaW5lIFBBRElSCQlCWVRFX1JFRihQQURJUl9BRERSKQorI2RlZmluZSBQQURBVEEJCUJZVEVfUkVGKFBBREFUQV9BRERSKQorI2RlZmluZSBQQVNFTAkJQllURV9SRUYoUEFTRUxfQUREUikKKworI2RlZmluZSBQQSh4KSAgICAgICAgICAgKDEgPDwgKHgpKQorI2RlZmluZSBQQV9BKHgpCQlQQSgoeCkgLSAxNikJLyogVGhpcyBpcyBzcGVjaWZpYyB0byBQQSBvbmx5ISAqLworCisjZGVmaW5lIFBBX0ExNgkJUEEoMCkJCS8qIFVzZSBBMTYgYXMgUEEoMCkgKi8KKyNkZWZpbmUgUEFfQTE3CQlQQSgxKQkJLyogVXNlIEExNyBhcyBQQSgxKSAqLworI2RlZmluZSBQQV9BMTgJCVBBKDIpCQkvKiBVc2UgQTE4IGFzIFBBKDIpICovCisjZGVmaW5lIFBBX0ExOQkJUEEoMykJCS8qIFVzZSBBMTkgYXMgUEEoMykgKi8KKyNkZWZpbmUgUEFfQTIwCQlQQSg0KQkJLyogVXNlIEEyMCBhcyBQQSg0KSAqLworI2RlZmluZSBQQV9BMjEJCVBBKDUpCQkvKiBVc2UgQTIxIGFzIFBBKDUpICovCisjZGVmaW5lIFBBX0EyMgkJUEEoNikJCS8qIFVzZSBBMjIgYXMgUEEoNikgKi8KKyNkZWZpbmUgUEFfQTIzCQlQQSg3KQkJLyogVXNlIEEyMyBhcyBQQSg3KSAqLworCisvKiAKKyAqIFBvcnQgQgorICovCisjZGVmaW5lIFBCRElSX0FERFIJMHhmZmZmZjQwOAkJLyogUG9ydCBCIGRpcmVjdGlvbiByZWcgKi8KKyNkZWZpbmUgUEJEQVRBX0FERFIJMHhmZmZmZjQwOQkJLyogUG9ydCBCIGRhdGEgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUEJTRUxfQUREUgkweGZmZmZmNDBiCQkvKiBQb3J0IEIgU2VsZWN0IFJlZ2lzdGVyICovCisKKyNkZWZpbmUgUEJESVIJCUJZVEVfUkVGKFBCRElSX0FERFIpCisjZGVmaW5lIFBCREFUQQkJQllURV9SRUYoUEJEQVRBX0FERFIpCisjZGVmaW5lIFBCU0VMCQlCWVRFX1JFRihQQlNFTF9BRERSKQorCisjZGVmaW5lIFBCKHgpICAgICAgICAgICAoMSA8PCAoeCkpCisjZGVmaW5lIFBCX0QoeCkJCVBCKHgpCQkvKiBUaGlzIGlzIHNwZWNpZmljIHRvIHBvcnQgQiBvbmx5ICovCisKKyNkZWZpbmUgUEJfRDAJCVBCKDApCQkvKiBVc2UgRDAgYXMgUEIoMCkgKi8KKyNkZWZpbmUgUEJfRDEJCVBCKDEpCQkvKiBVc2UgRDEgYXMgUEIoMSkgKi8KKyNkZWZpbmUgUEJfRDIJCVBCKDIpCQkvKiBVc2UgRDIgYXMgUEIoMikgKi8KKyNkZWZpbmUgUEJfRDMJCVBCKDMpCQkvKiBVc2UgRDMgYXMgUEIoMykgKi8KKyNkZWZpbmUgUEJfRDQJCVBCKDQpCQkvKiBVc2UgRDQgYXMgUEIoNCkgKi8KKyNkZWZpbmUgUEJfRDUJCVBCKDUpCQkvKiBVc2UgRDUgYXMgUEIoNSkgKi8KKyNkZWZpbmUgUEJfRDYJCVBCKDYpCQkvKiBVc2UgRDYgYXMgUEIoNikgKi8KKyNkZWZpbmUgUEJfRDcJCVBCKDcpCQkvKiBVc2UgRDcgYXMgUEIoNykgKi8KKworLyogCisgKiBQb3J0IEMKKyAqLworI2RlZmluZSBQQ0RJUl9BRERSCTB4ZmZmZmY0MTAJCS8qIFBvcnQgQyBkaXJlY3Rpb24gcmVnICovCisjZGVmaW5lIFBDREFUQV9BRERSCTB4ZmZmZmY0MTEJCS8qIFBvcnQgQyBkYXRhIHJlZ2lzdGVyICovCisjZGVmaW5lIFBDU0VMX0FERFIJMHhmZmZmZjQxMwkJLyogUG9ydCBDIFNlbGVjdCBSZWdpc3RlciAqLworCisjZGVmaW5lIFBDRElSCQlCWVRFX1JFRihQQ0RJUl9BRERSKQorI2RlZmluZSBQQ0RBVEEJCUJZVEVfUkVGKFBDREFUQV9BRERSKQorI2RlZmluZSBQQ1NFTAkJQllURV9SRUYoUENTRUxfQUREUikKKworI2RlZmluZSBQQyh4KSAgICAgICAgICAgKDEgPDwgKHgpKQorCisjZGVmaW5lIFBDX1dFCQlQQyg2KQkJLyogVXNlIFdFICAgIGFzIFBDKDYpICovCisjZGVmaW5lIFBDX0RUQUNLCVBDKDUpCQkvKiBVc2UgRFRBQ0sgYXMgUEMoNSkgKi8KKyNkZWZpbmUgUENfSVJRNwkJUEMoNCkJCS8qIFVzZSBJUlE3ICBhcyBQQyg0KSAqLworI2RlZmluZSBQQ19MRFMJCVBDKDIpCQkvKiBVc2UgTERTICAgYXMgUEMoMikgKi8KKyNkZWZpbmUgUENfVURTCQlQQygxKQkJLyogVXNlIFVEUyAgIGFzIFBDKDEpICovCisjZGVmaW5lIFBDX01PQ0xLCVBDKDApCQkvKiBVc2UgTU9DTEsgYXMgUEMoMCkgKi8KKworLyogCisgKiBQb3J0IEQKKyAqLworI2RlZmluZSBQRERJUl9BRERSCTB4ZmZmZmY0MTgJCS8qIFBvcnQgRCBkaXJlY3Rpb24gcmVnICovCisjZGVmaW5lIFBEREFUQV9BRERSCTB4ZmZmZmY0MTkJCS8qIFBvcnQgRCBkYXRhIHJlZ2lzdGVyICovCisjZGVmaW5lIFBEUFVFTl9BRERSCTB4ZmZmZmY0MWEJCS8qIFBvcnQgRCBQdWxsLVVwIGVuYWJsZSByZWcgKi8KKyNkZWZpbmUgUERQT0xfQUREUgkweGZmZmZmNDFjCQkvKiBQb3J0IEQgUG9sYXJpdHkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUERJUlFFTl9BRERSCTB4ZmZmZmY0MWQJCS8qIFBvcnQgRCBJUlEgZW5hYmxlIHJlZ2lzdGVyICovCisjZGVmaW5lCVBESVFFR19BRERSCTB4ZmZmZmY0MWYJCS8qIFBvcnQgRCBJUlEgRWRnZSBSZWdpc3RlciAqLworCisjZGVmaW5lIFBERElSCQlCWVRFX1JFRihQRERJUl9BRERSKQorI2RlZmluZSBQRERBVEEJCUJZVEVfUkVGKFBEREFUQV9BRERSKQorI2RlZmluZSBQRFBVRU4JCUJZVEVfUkVGKFBEUFVFTl9BRERSKQorI2RlZmluZQlQRFBPTAkJQllURV9SRUYoUERQT0xfQUREUikKKyNkZWZpbmUgUERJUlFFTgkJQllURV9SRUYoUERJUlFFTl9BRERSKQorI2RlZmluZSBQRElRRUcJCUJZVEVfUkVGKFBESVFFR19BRERSKQorCisjZGVmaW5lIFBEKHgpICAgICAgICAgICAoMSA8PCAoeCkpCisjZGVmaW5lIFBEX0tCKHgpCVBEKHgpCQkvKiBUaGlzIGlzIHNwZWNpZmljIGZvciBQb3J0IEQgb25seSAqLworCisjZGVmaW5lIFBEX0tCMAkJUEQoMCkJLyogVXNlIEtCMCBhcyBQRCgwKSAqLworI2RlZmluZSBQRF9LQjEJCVBEKDEpCS8qIFVzZSBLQjEgYXMgUEQoMSkgKi8KKyNkZWZpbmUgUERfS0IyCQlQRCgyKQkvKiBVc2UgS0IyIGFzIFBEKDIpICovCisjZGVmaW5lIFBEX0tCMwkJUEQoMykJLyogVXNlIEtCMyBhcyBQRCgzKSAqLworI2RlZmluZSBQRF9LQjQJCVBEKDQpCS8qIFVzZSBLQjQgYXMgUEQoNCkgKi8KKyNkZWZpbmUgUERfS0I1CQlQRCg1KQkvKiBVc2UgS0I1IGFzIFBEKDUpICovCisjZGVmaW5lIFBEX0tCNgkJUEQoNikJLyogVXNlIEtCNiBhcyBQRCg2KSAqLworI2RlZmluZSBQRF9LQjcJCVBEKDcpCS8qIFVzZSBLQjcgYXMgUEQoNykgKi8KKworLyogCisgKiBQb3J0IEUKKyAqLworI2RlZmluZSBQRURJUl9BRERSCTB4ZmZmZmY0MjAJCS8qIFBvcnQgRSBkaXJlY3Rpb24gcmVnICovCisjZGVmaW5lIFBFREFUQV9BRERSCTB4ZmZmZmY0MjEJCS8qIFBvcnQgRSBkYXRhIHJlZ2lzdGVyICovCisjZGVmaW5lIFBFUFVFTl9BRERSCTB4ZmZmZmY0MjIJCS8qIFBvcnQgRSBQdWxsLVVwIGVuYWJsZSByZWcgKi8KKyNkZWZpbmUgUEVTRUxfQUREUgkweGZmZmZmNDIzCQkvKiBQb3J0IEUgU2VsZWN0IFJlZ2lzdGVyICovCisKKyNkZWZpbmUgUEVESVIJCUJZVEVfUkVGKFBFRElSX0FERFIpCisjZGVmaW5lIFBFREFUQQkJQllURV9SRUYoUEVEQVRBX0FERFIpCisjZGVmaW5lIFBFUFVFTgkJQllURV9SRUYoUEVQVUVOX0FERFIpCisjZGVmaW5lIFBFU0VMCQlCWVRFX1JFRihQRVNFTF9BRERSKQorCisjZGVmaW5lIFBFKHgpICAgICAgICAgICAoMSA8PCAoeCkpCisKKyNkZWZpbmUgUEVfQ1NBMQkJUEUoMSkJLyogVXNlIENTQTEgYXMgUEUoMSkgKi8KKyNkZWZpbmUgUEVfQ1NBMgkJUEUoMikJLyogVXNlIENTQTIgYXMgUEUoMikgKi8KKyNkZWZpbmUgUEVfQ1NBMwkJUEUoMykJLyogVXNlIENTQTMgYXMgUEUoMykgKi8KKyNkZWZpbmUgUEVfQ1NCMAkJUEUoNCkJLyogVXNlIENTQjAgYXMgUEUoNCkgKi8KKyNkZWZpbmUgUEVfQ1NCMQkJUEUoNSkJLyogVXNlIENTQjEgYXMgUEUoNSkgKi8KKyNkZWZpbmUgUEVfQ1NCMgkJUEUoNikJLyogVXNlIENTQjIgYXMgUEUoNikgKi8KKyNkZWZpbmUgUEVfQ1NCMwkJUEUoNykJLyogVXNlIENTQjMgYXMgUEUoNykgKi8KKworLyogCisgKiBQb3J0IEYKKyAqLworI2RlZmluZSBQRkRJUl9BRERSCTB4ZmZmZmY0MjgJCS8qIFBvcnQgRiBkaXJlY3Rpb24gcmVnICovCisjZGVmaW5lIFBGREFUQV9BRERSCTB4ZmZmZmY0MjkJCS8qIFBvcnQgRiBkYXRhIHJlZ2lzdGVyICovCisjZGVmaW5lIFBGUFVFTl9BRERSCTB4ZmZmZmY0MmEJCS8qIFBvcnQgRiBQdWxsLVVwIGVuYWJsZSByZWcgKi8KKyNkZWZpbmUgUEZTRUxfQUREUgkweGZmZmZmNDJiCQkvKiBQb3J0IEYgU2VsZWN0IFJlZ2lzdGVyICovCisKKyNkZWZpbmUgUEZESVIJCUJZVEVfUkVGKFBGRElSX0FERFIpCisjZGVmaW5lIFBGREFUQQkJQllURV9SRUYoUEZEQVRBX0FERFIpCisjZGVmaW5lIFBGUFVFTgkJQllURV9SRUYoUEZQVUVOX0FERFIpCisjZGVmaW5lIFBGU0VMCQlCWVRFX1JFRihQRlNFTF9BRERSKQorCisjZGVmaW5lIFBGKHgpICAgICAgICAgICAoMSA8PCAoeCkpCisjZGVmaW5lIFBGX0EoeCkJCVBGKCh4KSAtIDI0KQkvKiBUaGlzIGlzIFBvcnQgRiBzcGVjaWZpYyBvbmx5ICovCisKKyNkZWZpbmUgUEZfQTI0CQlQRigwKQkvKiBVc2UgQTI0IGFzIFBGKDApICovCisjZGVmaW5lIFBGX0EyNQkJUEYoMSkJLyogVXNlIEEyNSBhcyBQRigxKSAqLworI2RlZmluZSBQRl9BMjYJCVBGKDIpCS8qIFVzZSBBMjYgYXMgUEYoMikgKi8KKyNkZWZpbmUgUEZfQTI3CQlQRigzKQkvKiBVc2UgQTI3IGFzIFBGKDMpICovCisjZGVmaW5lIFBGX0EyOAkJUEYoNCkJLyogVXNlIEEyOCBhcyBQRig0KSAqLworI2RlZmluZSBQRl9BMjkJCVBGKDUpCS8qIFVzZSBBMjkgYXMgUEYoNSkgKi8KKyNkZWZpbmUgUEZfQTMwCQlQRig2KQkvKiBVc2UgQTMwIGFzIFBGKDYpICovCisjZGVmaW5lIFBGX0EzMQkJUEYoNykJLyogVXNlIEEzMSBhcyBQRig3KSAqLworCisvKiAKKyAqIFBvcnQgRworICovCisjZGVmaW5lIFBHRElSX0FERFIJMHhmZmZmZjQzMAkJLyogUG9ydCBHIGRpcmVjdGlvbiByZWcgKi8KKyNkZWZpbmUgUEdEQVRBX0FERFIJMHhmZmZmZjQzMQkJLyogUG9ydCBHIGRhdGEgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUEdQVUVOX0FERFIJMHhmZmZmZjQzMgkJLyogUG9ydCBHIFB1bGwtVXAgZW5hYmxlIHJlZyAqLworI2RlZmluZSBQR1NFTF9BRERSCTB4ZmZmZmY0MzMJCS8qIFBvcnQgRyBTZWxlY3QgUmVnaXN0ZXIgKi8KKworI2RlZmluZSBQR0RJUgkJQllURV9SRUYoUEdESVJfQUREUikKKyNkZWZpbmUgUEdEQVRBCQlCWVRFX1JFRihQR0RBVEFfQUREUikKKyNkZWZpbmUgUEdQVUVOCQlCWVRFX1JFRihQR1BVRU5fQUREUikKKyNkZWZpbmUgUEdTRUwJCUJZVEVfUkVGKFBHU0VMX0FERFIpCisKKyNkZWZpbmUgUEcoeCkgICAgICAgICAgICgxIDw8ICh4KSkKKworI2RlZmluZSBQR19VQVJUX1RYRAlQRygwKQkvKiBVc2UgVUFSVF9UWEQgYXMgUEcoMCkgKi8KKyNkZWZpbmUgUEdfVUFSVF9SWEQJUEcoMSkJLyogVXNlIFVBUlRfUlhEIGFzIFBHKDEpICovCisjZGVmaW5lIFBHX1BXTU9VVAlQRygyKQkvKiBVc2UgUFdNT1VUICAgYXMgUEcoMikgKi8KKyNkZWZpbmUgUEdfVE9VVDIJUEcoMykgICAvKiBVc2UgVE9VVDIgICAgYXMgUEcoMykgKi8KKyNkZWZpbmUgUEdfVElOMgkJUEcoNCkJLyogVXNlIFRJTjIgICAgIGFzIFBHKDQpICovCisjZGVmaW5lIFBHX1RPVVQxCVBHKDUpICAgLyogVXNlIFRPVVQxICAgIGFzIFBHKDUpICovCisjZGVmaW5lIFBHX1RJTjEJCVBHKDYpCS8qIFVzZSBUSU4xICAgICBhcyBQRyg2KSAqLworI2RlZmluZSBQR19SVENPVVQJUEcoNykJLyogVXNlIFJUQ09VVCAgIGFzIFBHKDcpICovCisKKy8qIAorICogUG9ydCBKCisgKi8KKyNkZWZpbmUgUEpESVJfQUREUgkweGZmZmZmNDM4CQkvKiBQb3J0IEogZGlyZWN0aW9uIHJlZyAqLworI2RlZmluZSBQSkRBVEFfQUREUgkweGZmZmZmNDM5CQkvKiBQb3J0IEogZGF0YSByZWdpc3RlciAqLworI2RlZmluZSBQSlNFTF9BRERSCTB4ZmZmZmY0M2IJCS8qIFBvcnQgSiBTZWxlY3QgUmVnaXN0ZXIgKi8KKworI2RlZmluZSBQSkRJUgkJQllURV9SRUYoUEpESVJfQUREUikKKyNkZWZpbmUgUEpEQVRBCQlCWVRFX1JFRihQSkRBVEFfQUREUikKKyNkZWZpbmUgUEpTRUwJCUJZVEVfUkVGKFBKU0VMX0FERFIpCisKKyNkZWZpbmUgUEooeCkgICAgICAgICAgICgxIDw8ICh4KSkgCisKKyNkZWZpbmUgUEpfQ1NEMwkJUEooNykJLyogVXNlIENTRDMgYXMgUEooNykgKi8KKworLyogCisgKiBQb3J0IEsKKyAqLworI2RlZmluZSBQS0RJUl9BRERSCTB4ZmZmZmY0NDAJCS8qIFBvcnQgSyBkaXJlY3Rpb24gcmVnICovCisjZGVmaW5lIFBLREFUQV9BRERSCTB4ZmZmZmY0NDEJCS8qIFBvcnQgSyBkYXRhIHJlZ2lzdGVyICovCisjZGVmaW5lIFBLUFVFTl9BRERSCTB4ZmZmZmY0NDIJCS8qIFBvcnQgSyBQdWxsLVVwIGVuYWJsZSByZWcgKi8KKyNkZWZpbmUgUEtTRUxfQUREUgkweGZmZmZmNDQzCQkvKiBQb3J0IEsgU2VsZWN0IFJlZ2lzdGVyICovCisKKyNkZWZpbmUgUEtESVIJCUJZVEVfUkVGKFBLRElSX0FERFIpCisjZGVmaW5lIFBLREFUQQkJQllURV9SRUYoUEtEQVRBX0FERFIpCisjZGVmaW5lIFBLUFVFTgkJQllURV9SRUYoUEtQVUVOX0FERFIpCisjZGVmaW5lIFBLU0VMCQlCWVRFX1JFRihQS1NFTF9BRERSKQorCisjZGVmaW5lIFBLKHgpICAgICAgICAgICAoMSA8PCAoeCkpCisKKy8qIAorICogUG9ydCBNCisgKi8KKyNkZWZpbmUgUE1ESVJfQUREUgkweGZmZmZmNDM4CQkvKiBQb3J0IE0gZGlyZWN0aW9uIHJlZyAqLworI2RlZmluZSBQTURBVEFfQUREUgkweGZmZmZmNDM5CQkvKiBQb3J0IE0gZGF0YSByZWdpc3RlciAqLworI2RlZmluZSBQTVBVRU5fQUREUgkweGZmZmZmNDNhCQkvKiBQb3J0IE0gUHVsbC1VcCBlbmFibGUgcmVnICovCisjZGVmaW5lIFBNU0VMX0FERFIJMHhmZmZmZjQzYgkJLyogUG9ydCBNIFNlbGVjdCBSZWdpc3RlciAqLworCisjZGVmaW5lIFBNRElSCQlCWVRFX1JFRihQTURJUl9BRERSKQorI2RlZmluZSBQTURBVEEJCUJZVEVfUkVGKFBNREFUQV9BRERSKQorI2RlZmluZSBQTVBVRU4JCUJZVEVfUkVGKFBNUFVFTl9BRERSKQorI2RlZmluZSBQTVNFTAkJQllURV9SRUYoUE1TRUxfQUREUikKKworI2RlZmluZSBQTSh4KSAgICAgICAgICAgKDEgPDwgKHgpKQorCisvKioqKioqKioqKgorICoKKyAqIDB4RkZGRkY1eHggLS0gUHVsc2UtV2lkdGggTW9kdWxhdG9yIChQV00pCisgKgorICoqKioqKioqKiovCisKKy8qCisgKiBQV00gQ29udHJvbCBSZWdpc3RlciAKKyAqLworI2RlZmluZSBQV01DX0FERFIJMHhmZmZmZjUwMAorI2RlZmluZSBQV01DCQlXT1JEX1JFRihQV01DX0FERFIpCisKKyNkZWZpbmUgUFdNQ19DTEtTRUxfTUFTSwkweDAwMDcJLyogQ2xvY2sgU2VsZWN0aW9uICovCisjZGVmaW5lIFBXTUNfQ0xLU0VMX1NISUZUCTAKKyNkZWZpbmUgUFdNQ19QV01FTgkJMHgwMDEwCS8qIEVuYWJsZSBQV00gKi8KKyNkZWZpbmUgUE1OQ19QT0wJCTB4MDAyMAkvKiBQV00gT3V0cHV0IEJpdCBQb2xhcml0eSAqLworI2RlZmluZSBQV01DX1BJTgkJMHgwMDgwCS8qIEN1cnJlbnQgUFdNIG91dHB1dCBwaW4gc3RhdHVzICovCisjZGVmaW5lIFBXTUNfTE9BRAkJMHgwMTAwCS8qIEZvcmNlIGEgbmV3IHBlcmlvZCAqLworI2RlZmluZSBQV01DX0lSUUVOCQkweDQwMDAJLyogSW50ZXJydXB0IFJlcXVlc3QgRW5hYmxlICovCisjZGVmaW5lIFBXTUNfQ0xLU1JDCQkweDgwMDAJLyogQ2xvY2sgU291cmNlIFNlbGVjdCAqLworCisvKiAnRVozMjgtY29tcGF0aWJsZSBkZWZpbml0aW9ucyAqLworI2RlZmluZSBQV01DX0VOCVBXTUNfUFdNRU4KKworLyoKKyAqIFBXTSBQZXJpb2QgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBQV01QX0FERFIJMHhmZmZmZjUwMgorI2RlZmluZSBQV01QCQlXT1JEX1JFRihQV01QX0FERFIpCisKKy8qIAorICogUFdNIFdpZHRoIFJlZ2lzdGVyIAorICovCisjZGVmaW5lIFBXTVdfQUREUgkweGZmZmZmNTA0CisjZGVmaW5lIFBXTVcJCVdPUkRfUkVGKFBXTVdfQUREUikKKworLyoKKyAqIFBXTSBDb3VudGVyIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgUFdNQ05UX0FERFIJMHhmZmZmZjUwNgorI2RlZmluZSBQV01DTlQJCVdPUkRfUkVGKFBXTUNOVF9BRERSKQorCisvKioqKioqKioqKgorICoKKyAqIDB4RkZGRkY2eHggLS0gR2VuZXJhbC1QdXJwb3NlIFRpbWVycworICoKKyAqKioqKioqKioqLworCisvKiAKKyAqIFRpbWVyIFVuaXQgMSBhbmQgMiBDb250cm9sIFJlZ2lzdGVycworICovCisjZGVmaW5lIFRDVEwxX0FERFIJMHhmZmZmZjYwMAorI2RlZmluZSBUQ1RMMQkJV09SRF9SRUYoVENUTDFfQUREUikKKyNkZWZpbmUgVENUTDJfQUREUgkweGZmZmZmNjBjCisjZGVmaW5lIFRDVEwyCQlXT1JEX1JFRihUQ1RMMl9BRERSKQorCisjZGVmaW5lCVRDVExfVEVOCQkweDAwMDEJLyogVGltZXIgRW5hYmxlICAqLworI2RlZmluZSBUQ1RMX0NMS1NPVVJDRV9NQVNLIAkweDAwMGUJLyogQ2xvY2sgU291cmNlOiAqLworI2RlZmluZSAgIFRDVExfQ0xLU09VUkNFX1NUT1AJICAgMHgwMDAwCS8qIFN0b3AgY291bnQgKGRpc2FibGVkKSAgICAqLworI2RlZmluZSAgIFRDVExfQ0xLU09VUkNFX1NZU0NMSwkgICAweDAwMDIJLyogU1lTQ0xLIHRvIHByZXNjYWxlciAgICAgICovCisjZGVmaW5lICAgVENUTF9DTEtTT1VSQ0VfU1lTQ0xLXzE2IDB4MDAwNAkvKiBTWVNDTEsvMTYgdG8gcHJlc2NhbGVyICAgKi8KKyNkZWZpbmUgICBUQ1RMX0NMS1NPVVJDRV9USU4JICAgMHgwMDA2CS8qIFRJTiB0byBwcmVzY2FsZXIgICAgICAgICAqLworI2RlZmluZSAgIFRDVExfQ0xLU09VUkNFXzMyS0haCSAgIDB4MDAwOAkvKiAzMmtIeiBjbG9jayB0byBwcmVzY2FsZXIgKi8KKyNkZWZpbmUgVENUTF9JUlFFTgkJMHgwMDEwCS8qIElSUSBFbmFibGUgICAgKi8KKyNkZWZpbmUgVENUTF9PTQkJCTB4MDAyMAkvKiBPdXRwdXQgTW9kZSAgICovCisjZGVmaW5lIFRDVExfQ0FQX01BU0sJCTB4MDBjMAkvKiBDYXB0dXJlIEVkZ2U6ICovCisjZGVmaW5lCSAgVENUTF9DQVBfUkUJCTB4MDA0MAkJLyogQ2FwdHVyZSBvbiByaXppbmcgZWRnZSAgICovCisjZGVmaW5lICAgVENUTF9DQVBfRkUJCTB4MDA4MAkJLyogQ2FwdHVyZSBvbiBmYWxsaW5nIGVkZ2UgICovCisjZGVmaW5lIFRDVExfRlJSCQkweDAwMTAJLyogRnJlZS1SdW4gTW9kZSAqLworCisvKiAnRVozMjgtY29tcGF0aWJsZSBkZWZpbml0aW9ucyAqLworI2RlZmluZSBUQ1RMX0FERFIJVENUTDFfQUREUgorI2RlZmluZSBUQ1RMCQlUQ1RMMQorCisvKgorICogVGltZXIgVW5pdCAxIGFuZCAyIFByZXNjYWxlciBSZWdpc3RlcnMKKyAqLworI2RlZmluZSBUUFJFUjFfQUREUgkweGZmZmZmNjAyCisjZGVmaW5lIFRQUkVSMQkJV09SRF9SRUYoVFBSRVIxX0FERFIpCisjZGVmaW5lIFRQUkVSMl9BRERSCTB4ZmZmZmY2MGUKKyNkZWZpbmUgVFBSRVIyCQlXT1JEX1JFRihUUFJFUjJfQUREUikKKworLyogJ0VaMzI4LWNvbXBhdGlibGUgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgVFBSRVJfQUREUglUUFJFUjFfQUREUgorI2RlZmluZSBUUFJFUgkJVFBSRVIxCisKKy8qCisgKiBUaW1lciBVbml0IDEgYW5kIDIgQ29tcGFyZSBSZWdpc3RlcnMKKyAqLworI2RlZmluZSBUQ01QMV9BRERSCTB4ZmZmZmY2MDQKKyNkZWZpbmUgVENNUDEJCVdPUkRfUkVGKFRDTVAxX0FERFIpCisjZGVmaW5lIFRDTVAyX0FERFIJMHhmZmZmZjYxMAorI2RlZmluZSBUQ01QMgkJV09SRF9SRUYoVENNUDJfQUREUikKKworLyogJ0VaMzI4LWNvbXBhdGlibGUgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgVENNUF9BRERSCVRDTVAxX0FERFIKKyNkZWZpbmUgVENNUAkJVENNUDEKKworLyoKKyAqIFRpbWVyIFVuaXQgMSBhbmQgMiBDYXB0dXJlIFJlZ2lzdGVycworICovCisjZGVmaW5lIFRDUjFfQUREUgkweGZmZmZmNjA2CisjZGVmaW5lIFRDUjEJCVdPUkRfUkVGKFRDUjFfQUREUikKKyNkZWZpbmUgVENSMl9BRERSCTB4ZmZmZmY2MTIKKyNkZWZpbmUgVENSMgkJV09SRF9SRUYoVENSMl9BRERSKQorCisvKiAnRVozMjgtY29tcGF0aWJsZSBkZWZpbml0aW9ucyAqLworI2RlZmluZSBUQ1JfQUREUglUQ1IxX0FERFIKKyNkZWZpbmUgVENSCQlUQ1IxCisKKy8qCisgKiBUaW1lciBVbml0IDEgYW5kIDIgQ291bnRlciBSZWdpc3RlcnMKKyAqLworI2RlZmluZSBUQ04xX0FERFIJMHhmZmZmZjYwOAorI2RlZmluZSBUQ04xCQlXT1JEX1JFRihUQ04xX0FERFIpCisjZGVmaW5lIFRDTjJfQUREUgkweGZmZmZmNjE0CisjZGVmaW5lIFRDTjIJCVdPUkRfUkVGKFRDTjJfQUREUikKKworLyogJ0VaMzI4LWNvbXBhdGlibGUgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgVENOX0FERFIJVENOMV9BRERSCisjZGVmaW5lIFRDTgkJVENOCisKKy8qCisgKiBUaW1lciBVbml0IDEgYW5kIDIgU3RhdHVzIFJlZ2lzdGVycworICovCisjZGVmaW5lIFRTVEFUMV9BRERSCTB4ZmZmZmY2MGEKKyNkZWZpbmUgVFNUQVQxCQlXT1JEX1JFRihUU1RBVDFfQUREUikKKyNkZWZpbmUgVFNUQVQyX0FERFIJMHhmZmZmZjYxNgorI2RlZmluZSBUU1RBVDIJCVdPUkRfUkVGKFRTVEFUMl9BRERSKQorCisjZGVmaW5lIFRTVEFUX0NPTVAJMHgwMDAxCQkvKiBDb21wYXJlIEV2ZW50IG9jY3VycmVkICovCisjZGVmaW5lIFRTVEFUX0NBUFQJMHgwMDAxCQkvKiBDYXB0dXJlIEV2ZW50IG9jY3VycmVkICovCisKKy8qICdFWjMyOC1jb21wYXRpYmxlIGRlZmluaXRpb25zICovCisjZGVmaW5lIFRTVEFUX0FERFIJVFNUQVQxX0FERFIKKyNkZWZpbmUgVFNUQVQJCVRTVEFUMQorCisvKgorICogV2F0Y2hkb2cgQ29tcGFyZSBSZWdpc3RlciAKKyAqLworI2RlZmluZSBXUlJfQUREUgkweGZmZmZmNjFhCisjZGVmaW5lIFdSUgkJV09SRF9SRUYoV1JSX0FERFIpCisKKy8qCisgKiBXYXRjaGRvZyBDb3VudGVyIFJlZ2lzdGVyIAorICovCisjZGVmaW5lIFdDTl9BRERSCTB4ZmZmZmY2MWMKKyNkZWZpbmUgV0NOCQlXT1JEX1JFRihXQ05fQUREUikKKworLyoKKyAqIFdhdGNoZG9nIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlcgorICovCisjZGVmaW5lIFdDU1JfQUREUgkweGZmZmZmNjE4CisjZGVmaW5lIFdDU1IJCVdPUkRfUkVGKFdDU1JfQUREUikKKworI2RlZmluZSBXQ1NSX1dERU4JMHgwMDAxCS8qIFdhdGNoZG9nIEVuYWJsZSAqLworI2RlZmluZSBXQ1NSX0ZJCQkweDAwMDIJLyogRm9yY2VkIEludGVycnVwdCAoaW5zdGVhZCBvZiBTVyByZXNldCkqLworI2RlZmluZSBXQ1NSX1dSU1QJMHgwMDA0CS8qIFdhdGNoZG9nIFJlc2V0ICovCisKKy8qKioqKioqKioqCisgKgorICogMHhGRkZGRjd4eCAtLSBTZXJpYWwgUGVyaWZlcmlhbCBJbnRlcmZhY2UgU2xhdmUgKFNQSVMpCisgKgorICoqKioqKioqKiovCisKKy8qCisgKiBTUEkgU2xhdmUgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBTUElTUl9BRERSCTB4ZmZmZmY3MDAKKyNkZWZpbmUgU1BJU1IJCVdPUkRfUkVGKFNQSVNSX0FERFIpCisKKyNkZWZpbmUgU1BJU1JfREFUQV9BRERSCTB4ZmZmZmY3MDEKKyNkZWZpbmUgU1BJU1JfREFUQQlCWVRFX1JFRihTUElTUl9EQVRBX0FERFIpCisKKyNkZWZpbmUgU1BJU1JfREFUQV9NQVNLCSAweDAwZmYJLyogU2hpZnRlZCBkYXRhIGZyb20gdGhlIGV4dGVybmFsIGRldmljZSAqLworI2RlZmluZSBTUElTUl9EQVRBX1NISUZUIDAKKyNkZWZpbmUgU1BJU1JfU1BJU0VOCSAweDAxMDAJLyogU1BJUyBtb2R1bGUgZW5hYmxlICovCisjZGVmaW5lIFNQSVNSX1BPTAkgMHgwMjAwCS8qIFNQU0NMSyBwb2xhcml0eSBjb250cm9sICovCisjZGVmaW5lIFNQSVNSX1BIQQkgMHgwNDAwCS8qIFBoYXNlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIFNQU0NMSyAmIFNQU1J4RCAqLworI2RlZmluZSBTUElTUl9PVldSCSAweDA4MDAJLyogRGF0YSBidWZmZXIgaGFzIGJlZW4gb3ZlcndyaXR0ZW4gKi8KKyNkZWZpbmUgU1BJU1JfREFUQVJEWQkgMHgxMDAwCS8qIERhdGEgcmVhZHkgKi8KKyNkZWZpbmUgU1BJU1JfRU5QT0wJIDB4MjAwMAkvKiBFbmFibGUgUG9sYXJpdHkgKi8KKyNkZWZpbmUgU1BJU1JfSVJRRU4JIDB4NDAwMAkvKiBTUElTIElSUSBFbmFibGUgKi8KKyNkZWZpbmUgU1BJU1JfU1BJU0lSUQkgMHg4MDAwCS8qIFNQSVMgSVJRIHBvc3RlZCAqLworCisvKioqKioqKioqKgorICoKKyAqIDB4RkZGRkY4eHggLS0gU2VyaWFsIFBlcmlmZXJpYWwgSW50ZXJmYWNlIE1hc3RlciAoU1BJTSkKKyAqCisgKioqKioqKioqKi8KKworLyoKKyAqIFNQSU0gRGF0YSBSZWdpc3RlcgorICovCisjZGVmaW5lIFNQSU1EQVRBX0FERFIJMHhmZmZmZjgwMAorI2RlZmluZSBTUElNREFUQQlXT1JEX1JFRihTUElNREFUQV9BRERSKQorCisvKgorICogU1BJTSBDb250cm9sL1N0YXR1cyBSZWdpc3RlcgorICovCisjZGVmaW5lIFNQSU1DT05UX0FERFIJMHhmZmZmZjgwMgorI2RlZmluZSBTUElNQ09OVAlXT1JEX1JFRihTUElNQ09OVF9BRERSKQorCisjZGVmaW5lIFNQSU1DT05UX0JJVF9DT1VOVF9NQVNLCSAweDAwMGYJLyogVHJhbnNmZXIgTGVuZ3RoIGluIEJ5dGVzICovCisjZGVmaW5lIFNQSU1DT05UX0JJVF9DT1VOVF9TSElGVCAwCisjZGVmaW5lIFNQSU1DT05UX1BPTAkJIDB4MDAxMAkvKiBTUE1DTEsgU2lnbmVsIFBvbGFyaXR5ICovCisjZGVmaW5lCVNQSU1DT05UX1BIQQkJIDB4MDAyMAkvKiBDbG9jay9EYXRhIHBoYXNlIHJlbGF0aW9uc2hpcCAqLworI2RlZmluZSBTUElNQ09OVF9JUlFFTgkJIDB4MDA0MCAvKiBJUlEgRW5hYmxlICovCisjZGVmaW5lIFNQSU1DT05UX1NQSU1JUlEJIDB4MDA4MAkvKiBJbnRlcnJ1cHQgUmVxdWVzdCAqLworI2RlZmluZSBTUElNQ09OVF9YQ0gJCSAweDAxMDAJLyogRXhjaGFuZ2UgKi8KKyNkZWZpbmUgU1BJTUNPTlRfUlNQSU1FTgkgMHgwMjAwCS8qIEVuYWJsZSBTUElNICovCisjZGVmaW5lIFNQSU1DT05UX0RBVEFfUkFURV9NQVNLCSAweGUwMDAJLyogU1BJTSBEYXRhIFJhdGUgKi8KKyNkZWZpbmUgU1BJTUNPTlRfREFUQV9SQVRFX1NISUZUIDEzCisKKy8qICdFWjMyOC1jb21wYXRpYmxlIGRlZmluaXRpb25zICovCisjZGVmaW5lIFNQSU1DT05UX0lSUQlTUElNQ09OVF9TUElNSVJRCisjZGVmaW5lIFNQSU1DT05UX0VOQUJMRQlTUElNQ09OVF9TUElNRU4KKy8qKioqKioqKioqCisgKgorICogMHhGRkZGRjl4eCAtLSBVQVJUCisgKgorICoqKioqKioqKiovCisKKy8qCisgKiBVQVJUIFN0YXR1cy9Db250cm9sIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgVVNUQ05UX0FERFIJMHhmZmZmZjkwMAorI2RlZmluZSBVU1RDTlQJCVdPUkRfUkVGKFVTVENOVF9BRERSKQorCisjZGVmaW5lIFVTVENOVF9UWEFWQUlMRU4JMHgwMDAxCS8qIFRyYW5zbWl0dGVyIEF2YWlsYWJsZSBJbnQgRW5hYmxlICovCisjZGVmaW5lIFVTVENOVF9UWEhBTEZFTgkJMHgwMDAyCS8qIFRyYW5zbWl0dGVyIEhhbGYgRW1wdHkgSW50IEVuYWJsZSAqLworI2RlZmluZSBVU1RDTlRfVFhFTVBUWUVOCTB4MDAwNAkvKiBUcmFuc21pdHRlciBFbXB0eSBJbnQgRW5hYmxlICovCisjZGVmaW5lIFVTVENOVF9SWFJFQURZRU4JMHgwMDA4CS8qIFJlY2VpdmVyIFJlYWR5IEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgVVNUQ05UX1JYSEFMRkVOCQkweDAwMTAJLyogUmVjZWl2ZXIgSGFsZi1GdWxsIEludCBFbmFibGUgKi8KKyNkZWZpbmUgVVNUQ05UX1JYRlVMTEVOCQkweDAwMjAJLyogUmVjZWl2ZXIgRnVsbCBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIFVTVENOVF9DVFNERUxUQUVOCTB4MDA0MAkvKiBDVFMgRGVsdGEgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBVU1RDTlRfR1BJT0RFTFRBRU4JMHgwMDgwCS8qIE9sZCBEYXRhIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgVVNUQ05UXzhfNwkJMHgwMTAwCS8qIEVpZ2h0IG9yIHNldmVuLWJpdCB0cmFuc21pc3Npb24gKi8KKyNkZWZpbmUgVVNUQ05UX1NUT1AJCTB4MDIwMAkvKiBTdG9wIGJpdCB0cmFuc21pc3Npb24gKi8KKyNkZWZpbmUgVVNUQ05UX09ERF9FVkVOCQkweDA0MDAJLyogT2RkIFBhcml0eSAqLworI2RlZmluZQlVU1RDTlRfUEFSSVRZRU4JCTB4MDgwMAkvKiBQYXJpdHkgRW5hYmxlICovCisjZGVmaW5lIFVTVENOVF9DTEtNT0RFCQkweDEwMDAJLyogQ2xvY2sgTW9kZSBTZWxlY3QgKi8KKyNkZWZpbmUJVVNUQ05UX1RYRU4JCTB4MjAwMAkvKiBUcmFuc21pdHRlciBFbmFibGUgKi8KKyNkZWZpbmUgVVNUQ05UX1JYRU4JCTB4NDAwMAkvKiBSZWNlaXZlciBFbmFibGUgKi8KKyNkZWZpbmUgVVNUQ05UX1VBUlRFTgkJMHg4MDAwCS8qIFVBUlQgRW5hYmxlICovCisKKy8qICdFWjMyOC1jb21wYXRpYmxlIGRlZmluaXRpb25zICovCisjZGVmaW5lIFVTVENOVF9UWEFFCVVTVENOVF9UWEFWQUlMRU4gCisjZGVmaW5lIFVTVENOVF9UWEhFCVVTVENOVF9UWEhBTEZFTgorI2RlZmluZSBVU1RDTlRfVFhFRQlVU1RDTlRfVFhFTVBUWUVOCisjZGVmaW5lIFVTVENOVF9SWFJFCVVTVENOVF9SWFJFQURZRU4KKyNkZWZpbmUgVVNUQ05UX1JYSEUJVVNUQ05UX1JYSEFMRkVOCisjZGVmaW5lIFVTVENOVF9SWEZFCVVTVENOVF9SWEZVTExFTgorI2RlZmluZSBVU1RDTlRfQ1RTRAlVU1RDTlRfQ1RTREVMVEFFTgorI2RlZmluZSBVU1RDTlRfT0RECVVTVENOVF9PRERfRVZFTgorI2RlZmluZSBVU1RDTlRfUEVOCVVTVENOVF9QQVJJVFlFTgorI2RlZmluZSBVU1RDTlRfQ0xLTQlVU1RDTlRfQ0xLTU9ERQorI2RlZmluZSBVU1RDTlRfVUVOCVVTVENOVF9VQVJURU4KKworLyoKKyAqIFVBUlQgQmF1ZCBDb250cm9sIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgVUJBVURfQUREUgkweGZmZmZmOTAyCisjZGVmaW5lIFVCQVVECQlXT1JEX1JFRihVQkFVRF9BRERSKQorCisjZGVmaW5lIFVCQVVEX1BSRVNDQUxFUl9NQVNLCTB4MDAzZgkvKiBBY3R1YWwgZGl2aXNvciBpcyA2NSAtIFBSRVNDQUxFUiAqLworI2RlZmluZSBVQkFVRF9QUkVTQ0FMRVJfU0hJRlQJMAorI2RlZmluZSBVQkFVRF9ESVZJREVfTUFTSwkweDA3MDAJLyogQmF1ZCBSYXRlIGZyZXEuIGRpdml6b3IgKi8KKyNkZWZpbmUgVUJBVURfRElWSURFX1NISUZUCTgKKyNkZWZpbmUgVUJBVURfQkFVRF9TUkMJCTB4MDgwMAkvKiBCYXVkIFJhdGUgU291cmNlICovCisjZGVmaW5lIFVCQVVEX0dQSU9TUkMJCTB4MTAwMAkvKiBHUElPIHNvdXJjZSAqLworI2RlZmluZSBVQkFVRF9HUElPRElSCQkweDIwMDAJLyogR1BJTyBEaXJlY3Rpb24gKi8KKyNkZWZpbmUgVUJBVURfR1BJTwkJMHg0MDAwCS8qIEN1cnJlbnQgR1BJTyBwaW4gc3RhdHVzICovCisjZGVmaW5lIFVCQVVEX0dQSU9ERUxUQQkJMHg4MDAwCS8qIEdQSU8gcGluIHZhbHVlIGNoYW5nZWQgKi8KKworLyoKKyAqIFVBUlQgUmVjZWl2ZXIgUmVnaXN0ZXIgCisgKi8KKyNkZWZpbmUgVVJYX0FERFIJMHhmZmZmZjkwNAorI2RlZmluZSBVUlgJCVdPUkRfUkVGKFVSWF9BRERSKQorCisjZGVmaW5lIFVSWF9SWERBVEFfQUREUgkweGZmZmZmOTA1CisjZGVmaW5lIFVSWF9SWERBVEEJQllURV9SRUYoVVJYX1JYREFUQV9BRERSKQorCisjZGVmaW5lIFVSWF9SWERBVEFfTUFTSwkgMHgwMGZmCS8qIFJlY2VpdmVkIGRhdGEgKi8KKyNkZWZpbmUgVVJYX1JYREFUQV9TSElGVCAwCisjZGVmaW5lIFVSWF9QQVJJVFlfRVJST1IgMHgwMTAwCS8qIFBhcml0eSBFcnJvciAqLworI2RlZmluZSBVUlhfQlJFQUsJIDB4MDIwMAkvKiBCcmVhayBEZXRlY3RlZCAqLworI2RlZmluZSBVUlhfRlJBTUVfRVJST1IJIDB4MDQwMAkvKiBGcmFtaW5nIEVycm9yICovCisjZGVmaW5lIFVSWF9PVlJVTgkgMHgwODAwCS8qIFNlcmlhbCBPdmVycnVuICovCisjZGVmaW5lIFVSWF9EQVRBX1JFQURZCSAweDIwMDAJLyogRGF0YSBSZWFkeSAoRklGTyBub3QgZW1wdHkpICovCisjZGVmaW5lIFVSWF9GSUZPX0hBTEYJIDB4NDAwMCAvKiBGSUZPIGlzIEhhbGYtRnVsbCAqLworI2RlZmluZSBVUlhfRklGT19GVUxMCSAweDgwMDAJLyogRklGTyBpcyBGdWxsICovCisKKy8qCisgKiBVQVJUIFRyYW5zbWl0dGVyIFJlZ2lzdGVyIAorICovCisjZGVmaW5lIFVUWF9BRERSCTB4ZmZmZmY5MDYKKyNkZWZpbmUgVVRYCQlXT1JEX1JFRihVVFhfQUREUikKKworI2RlZmluZSBVVFhfVFhEQVRBX0FERFIJMHhmZmZmZjkwNworI2RlZmluZSBVVFhfVFhEQVRBCUJZVEVfUkVGKFVUWF9UWERBVEFfQUREUikKKworI2RlZmluZSBVVFhfVFhEQVRBX01BU0sJIDB4MDBmZgkvKiBEYXRhIHRvIGJlIHRyYW5zbWl0dGVkICovCisjZGVmaW5lIFVUWF9UWERBVEFfU0hJRlQgMAorI2RlZmluZSBVVFhfQ1RTX0RFTFRBCSAweDAxMDAJLyogQ1RTIGNoYW5nZWQgKi8KKyNkZWZpbmUgVVRYX0NUU19TVEFUVVMJIDB4MDIwMAkvKiBDVFMgU3RhdGUgKi8KKyNkZWZpbmUJVVRYX0lHTk9SRV9DVFMJIDB4MDgwMAkvKiBJZ25vcmUgQ1RTICovCisjZGVmaW5lIFVUWF9TRU5EX0JSRUFLCSAweDEwMDAJLyogU2VuZCBhIEJSRUFLICovCisjZGVmaW5lIFVUWF9UWF9BVkFJTAkgMHgyMDAwCS8qIFRyYW5zbWl0IEZJRk8gaGFzIGEgc2xvdCBhdmFpbGFibGUgKi8KKyNkZWZpbmUgVVRYX0ZJRk9fSEFMRgkgMHg0MDAwCS8qIFRyYW5zbWl0IEZJRk8gaXMgaGFsZiBlbXB0eSAqLworI2RlZmluZSBVVFhfRklGT19FTVBUWQkgMHg4MDAwCS8qIFRyYW5zbWl0IEZJRk8gaXMgZW1wdHkgKi8KKworLyogJ0VaMzI4LWNvbXBhdGlibGUgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgVVRYX0NUU19TVEFUCVVUWF9DVFNfU1RBVFVTCisjZGVmaW5lIFVUWF9OT0NUUwlVVFhfSUdOT1JFX0NUUworCisvKgorICogVUFSVCBNaXNjZWxsYW5lb3VzIFJlZ2lzdGVyIAorICovCisjZGVmaW5lIFVNSVNDX0FERFIJMHhmZmZmZjkwOAorI2RlZmluZSBVTUlTQwkJV09SRF9SRUYoVU1JU0NfQUREUikKKworI2RlZmluZSBVTUlTQ19UWF9QT0wJIDB4MDAwNAkvKiBUcmFuc21pdCBQb2xhcml0eSAqLworI2RlZmluZSBVTUlTQ19SWF9QT0wJIDB4MDAwOAkvKiBSZWNlaXZlIFBvbGFyaXR5ICovCisjZGVmaW5lIFVNSVNDX0lSREFfTE9PUAkgMHgwMDEwCS8qIElyREEgTG9vcGJhY2sgRW5hYmxlICovCisjZGVmaW5lIFVNSVNDX0lSREFfRU4JIDB4MDAyMAkvKiBJbmZyYS1SZWQgRW5hYmxlICovCisjZGVmaW5lIFVNSVNDX1JUUwkgMHgwMDQwCS8qIFNldCBSVFMgc3RhdHVzICovCisjZGVmaW5lIFVNSVNDX1JUU0NPTlQJIDB4MDA4MAkvKiBDaG9vc2UgUlRTIGNvbnRyb2wgKi8KKyNkZWZpbmUgVU1JU0NfTE9PUAkgMHgxMDAwCS8qIFNlcmlhbCBMb29wYmFjayBFbmFibGUgKi8KKyNkZWZpbmUgVU1JU0NfRk9SQ0VfUEVSUiAweDIwMDAJLyogRm9yY2UgUGFyaXR5IEVycm9yICovCisjZGVmaW5lIFVNSVNDX0NMS1NSQwkgMHg0MDAwCS8qIENsb2NrIFNvdXJjZSAqLworCisKKy8qIGdlbmVyYWxpemF0aW9uIG9mIHVhcnQgY29udHJvbCByZWdpc3RlcnMgdG8gc3VwcG9ydCBtdWx0aXBsZSBwb3J0czogKi8KK3R5cGVkZWYgdm9sYXRpbGUgc3RydWN0IHsKKyAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IHVzdGNudDsKKyAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IHViYXVkOworICB1bmlvbiB7CisgICAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IHc7CisgICAgc3RydWN0IHsKKyAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgc3RhdHVzOworICAgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciByeGRhdGE7CisgICAgfSBiOworICB9IHVyeDsKKyAgdW5pb24geworICAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCB3OworICAgIHN0cnVjdCB7CisgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIHN0YXR1czsKKyAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgdHhkYXRhOworICAgIH0gYjsKKyAgfSB1dHg7CisgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCB1bWlzYzsKKyAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IHBhZDE7CisgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBwYWQyOworICB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgcGFkMzsKK30gbTY4MzI4X3VhcnQgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKworLyoqKioqKioqKioKKyAqCisgKiAweEZGRkZGQXh4IC0tIExDRCBDb250cm9sbGVyCisgKgorICoqKioqKioqKiovCisKKy8qCisgKiBMQ0QgU2NyZWVuIFN0YXJ0aW5nIEFkZHJlc3MgUmVnaXN0ZXIgCisgKi8KKyNkZWZpbmUgTFNTQV9BRERSCTB4ZmZmZmZhMDAKKyNkZWZpbmUgTFNTQQkJTE9OR19SRUYoTFNTQV9BRERSKQorCisjZGVmaW5lIExTU0FfU1NBX01BU0sJMHhmZmZmZmZmZQkvKiBCaXQgMCBpcyByZXNlcnZlZCAqLworCisvKgorICogTENEIFZpcnR1YWwgUGFnZSBXaWR0aCBSZWdpc3RlciAKKyAqLworI2RlZmluZSBMVlBXX0FERFIJMHhmZmZmZmEwNQorI2RlZmluZSBMVlBXCQlCWVRFX1JFRihMVlBXX0FERFIpCisKKy8qCisgKiBMQ0QgU2NyZWVuIFdpZHRoIFJlZ2lzdGVyIChub3QgY29tcGF0aWJsZSB3aXRoICdFWjMyOCAhISEpCisgKi8KKyNkZWZpbmUgTFhNQVhfQUREUgkweGZmZmZmYTA4CisjZGVmaW5lIExYTUFYCQlXT1JEX1JFRihMWE1BWF9BRERSKQorCisjZGVmaW5lIExYTUFYX1hNX01BU0sJMHgwMmZmCQkvKiBCaXRzIDAtMyBhcmUgcmVzZXJ2ZWQgKi8KKworLyoKKyAqIExDRCBTY3JlZW4gSGVpZ2h0IFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgTFlNQVhfQUREUgkweGZmZmZmYTBhCisjZGVmaW5lIExZTUFYCQlXT1JEX1JFRihMWU1BWF9BRERSKQorCisjZGVmaW5lIExZTUFYX1lNX01BU0sJMHgwMmZmCQkvKiBCaXRzIDEwLTE1IGFyZSByZXNlcnZlZCAqLworCisvKgorICogTENEIEN1cnNvciBYIFBvc2l0aW9uIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgTENYUF9BRERSCTB4ZmZmZmZhMTgKKyNkZWZpbmUgTENYUAkJV09SRF9SRUYoTENYUF9BRERSKQorCisjZGVmaW5lIExDWFBfQ0NfTUFTSwkweGMwMDAJCS8qIEN1cnNvciBDb250cm9sICovCisjZGVmaW5lICAgTENYUF9DQ19UUkFNU1BBUkVOVAkweDAwMDAKKyNkZWZpbmUgICBMQ1hQX0NDX0JMQUNLCQkweDQwMDAKKyNkZWZpbmUgICBMQ1hQX0NDX1JFVkVSU0VECTB4ODAwMAorI2RlZmluZSAgIExDWFBfQ0NfV0hJVEUJCTB4YzAwMAorI2RlZmluZSBMQ1hQX0NYUF9NQVNLCTB4MDJmZgkJLyogQ3Vyc29yIFggcG9zaXRpb24gKi8KKworLyoKKyAqIExDRCBDdXJzb3IgWSBQb3NpdGlvbiBSZWdpc3RlcgorICovCisjZGVmaW5lIExDWVBfQUREUgkweGZmZmZmYTFhCisjZGVmaW5lIExDWVAJCVdPUkRfUkVGKExDWVBfQUREUikKKworI2RlZmluZSBMQ1lQX0NZUF9NQVNLCTB4MDFmZgkJLyogQ3Vyc29yIFkgUG9zaXRpb24gKi8KKworLyoKKyAqIExDRCBDdXJzb3IgV2lkdGggYW5kIEhlaWd0aCBSZWdpc3RlcgorICovCisjZGVmaW5lIExDV0NIX0FERFIJMHhmZmZmZmExYworI2RlZmluZSBMQ1dDSAkJV09SRF9SRUYoTENXQ0hfQUREUikKKworI2RlZmluZSBMQ1dDSF9DSF9NQVNLCTB4MDAxZgkJLyogQ3Vyc29yIEhlaWdodCAqLworI2RlZmluZSBMQ1dDSF9DSF9TSElGVAkwCisjZGVmaW5lIExDV0NIX0NXX01BU0sJMHgxZjAwCQkvKiBDdXJzb3IgV2lkdGggKi8KKyNkZWZpbmUgTENXQ0hfQ1dfU0hJRlQJOAorCisvKgorICogTENEIEJsaW5rIENvbnRyb2wgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBMQkxLQ19BRERSCTB4ZmZmZmZhMWYKKyNkZWZpbmUgTEJMS0MJCUJZVEVfUkVGKExCTEtDX0FERFIpCisKKyNkZWZpbmUgTEJMS0NfQkRfTUFTSwkweDdmCS8qIEJsaW5rIERpdmlzb3IgKi8KKyNkZWZpbmUgTEJMS0NfQkRfU0hJRlQJMAorI2RlZmluZSBMQkxLQ19CS0VOCTB4ODAJLyogQmxpbmsgRW5hYmxlZCAqLworCisvKgorICogTENEIFBhbmVsIEludGVyZmFjZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIAorICovCisjZGVmaW5lIExQSUNGX0FERFIJMHhmZmZmZmEyMAorI2RlZmluZSBMUElDRgkJQllURV9SRUYoTFBJQ0ZfQUREUikKKworI2RlZmluZSBMUElDRl9HU19NQVNLCSAweDAxCSAvKiBHcmF5LVNjYWxlIE1vZGUgKi8KKyNkZWZpbmUJICBMUElDRl9HU19CVwkgICAweDAwCisjZGVmaW5lICAgTFBJQ0ZfR1NfR1JBWV80ICAweDAxCisjZGVmaW5lIExQSUNGX1BCU0laX01BU0sgMHgwNgkvKiBQYW5lbCBCdXMgV2lkdGggKi8KKyNkZWZpbmUgICBMUElDRl9QQlNJWl8xCSAgIDB4MDAKKyNkZWZpbmUgICBMUElDRl9QQlNJWl8yICAgIDB4MDIKKyNkZWZpbmUgICBMUElDRl9QQlNJWl80ICAgIDB4MDQKKworLyoKKyAqIExDRCBQb2xhcml0eSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIAorICovCisjZGVmaW5lIExQT0xDRl9BRERSCTB4ZmZmZmZhMjEKKyNkZWZpbmUgTFBPTENGCQlCWVRFX1JFRihMUE9MQ0ZfQUREUikKKworI2RlZmluZSBMUE9MQ0ZfUElYUE9MCTB4MDEJLyogUGl4ZWwgUG9sYXJpdHkgKi8KKyNkZWZpbmUgTFBPTENGX0xQUE9MCTB4MDIJLyogTGluZSBQdWxzZSBQb2xhcml0eSAqLworI2RlZmluZSBMUE9MQ0ZfRkxNUE9MCTB4MDQJLyogRnJhbWUgTWFya2VyIFBvbGFyaXR5ICovCisjZGVmaW5lIExQT0xDRl9MQ0tQT0wJMHgwOAkvKiBMQ0QgU2hpZnQgTG9jayBQb2xhcml0eSAqLworCisvKgorICogTEFDRCAoTENEIEFsdGVybmF0ZSBDcnlzdGFsIERpcmVjdGlvbikgUmF0ZSBDb250cm9sIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgTEFDRFJDX0FERFIJMHhmZmZmZmEyMworI2RlZmluZSBMQUNEUkMJCUJZVEVfUkVGKExBQ0RSQ19BRERSKQorCisjZGVmaW5lIExBQ0RSQ19BQ0RfTUFTSwkgMHgwZgkvKiBBbHRlcm5hdGUgQ3J5c3RhbCBEaXJlY3Rpb24gQ29udHJvbCAqLworI2RlZmluZSBMQUNEUkNfQUNEX1NISUZUIDAKKworLyoKKyAqIExDRCBQaXhlbCBDbG9jayBEaXZpZGVyIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgTFBYQ0RfQUREUgkweGZmZmZmYTI1CisjZGVmaW5lIExQWENECQlCWVRFX1JFRihMUFhDRF9BRERSKQorCisjZGVmaW5lCUxQWENEX1BDRF9NQVNLCTB4M2YgCS8qIFBpeGVsIENsb2NrIERpdmlkZXIgKi8KKyNkZWZpbmUgTFBYQ0RfUENEX1NISUZUCTAKKworLyoKKyAqIExDRCBDbG9ja2luZyBDb250cm9sIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgTENLQ09OX0FERFIJMHhmZmZmZmEyNworI2RlZmluZSBMQ0tDT04JCUJZVEVfUkVGKExDS0NPTl9BRERSKQorCisjZGVmaW5lIExDS0NPTl9QQ0RTCSAweDAxCS8qIFBpeGVsIENsb2NrIERpdmlkZXIgU291cmNlIFNlbGVjdCAqLworI2RlZmluZSBMQ0tDT05fRFdJRFRICSAweDAyCS8qIERpc3BsYXkgTWVtb3J5IFdpZHRoICAqLworI2RlZmluZSBMQ0tDT05fRFdTX01BU0sJIDB4M2MJLyogRGlzcGxheSBXYWl0LVN0YXRlICovCisjZGVmaW5lIExDS0NPTl9EV1NfU0hJRlQgMgorI2RlZmluZSBMQ0tDT05fRE1BMTYJIDB4NDAJLyogRE1BIGJ1cnN0IGxlbmd0aCAqLworI2RlZmluZSBMQ0tDT05fTENET04JIDB4ODAJLyogRW5hYmxlIExDRCBDb250cm9sbGVyICovCisKKy8qICdFWjMyOC1jb21wYXRpYmxlIGRlZmluaXRpb25zICovCisjZGVmaW5lIExDS0NPTl9EV19NQVNLCUxDS0NPTl9EV1NfTUFTSworI2RlZmluZSBMQ0tDT05fRFdfU0hJRlQJTENLQ09OX0RXU19TSElGVAorCisvKgorICogTENEIExhc3QgQnVmZmVyIEFkZHJlc3MgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBMTEJBUl9BRERSCTB4ZmZmZmZhMjkKKyNkZWZpbmUgTExCQVIJCUJZVEVfUkVGKExMQkFSX0FERFIpCisKKyNkZWZpbmUgTExCQVJfTEJBUl9NQVNLCSAweDdmCS8qIE51bWJlciBvZiBtZW1vcnkgd29yZHMgdG8gZmlsbCAxIGxpbmUgKi8KKyNkZWZpbmUgTExCQVJfTEJBUl9TSElGVCAwCisKKy8qCisgKiBMQ0QgT2N0ZXQgVGVybWluYWwgQ291bnQgUmVnaXN0ZXIgCisgKi8KKyNkZWZpbmUgTE9UQ1JfQUREUgkweGZmZmZmYTJiCisjZGVmaW5lIExPVENSCQlCWVRFX1JFRihMT1RDUl9BRERSKQorCisvKgorICogTENEIFBhbm5pbmcgT2Zmc2V0IFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgTFBPU1JfQUREUgkweGZmZmZmYTJkCisjZGVmaW5lIExQT1NSCQlCWVRFX1JFRihMUE9TUl9BRERSKQorCisjZGVmaW5lIExQT1NSX0JPUwkweDA4CS8qIEJ5dGUgb2Zmc2V0IChmb3IgQi9XIG1vZGUgb25seSAqLworI2RlZmluZSBMUE9TUl9QT1NfTUFTSwkweDA3CS8qIFBpeGVsIE9mZnNldCBDb2RlICovCisjZGVmaW5lIExQT1NSX1BPU19TSElGVAkwCisKKy8qCisgKiBMQ0QgRnJhbWUgUmF0ZSBDb250cm9sIE1vZHVsYXRpb24gUmVnaXN0ZXIKKyAqLworI2RlZmluZSBMRlJDTV9BRERSCTB4ZmZmZmZhMzEKKyNkZWZpbmUgTEZSQ00JCUJZVEVfUkVGKExGUkNNX0FERFIpCisKKyNkZWZpbmUgTEZSQ01fWU1PRF9NQVNLCSAweDBmCS8qIFZlcnRpY2FsIE1vZHVsYXRpb24gKi8KKyNkZWZpbmUgTEZSQ01fWU1PRF9TSElGVCAwCisjZGVmaW5lIExGUkNNX1hNT0RfTUFTSwkgMHhmMAkvKiBIb3Jpem9udGFsIE1vZHVsYXRpb24gKi8KKyNkZWZpbmUgTEZSQ01fWE1PRF9TSElGVCA0CisKKy8qCisgKiBMQ0QgR3JheSBQYWxldHRlIE1hcHBpbmcgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBMR1BNUl9BRERSCTB4ZmZmZmZhMzIKKyNkZWZpbmUgTEdQTVIJCVdPUkRfUkVGKExHUE1SX0FERFIpCisKKyNkZWZpbmUgTEdQTVJfR0xFVkVMM19NQVNLCTB4MDAwZgorI2RlZmluZSBMR1BNUl9HTEVWRUwzX1NISUZUCTAgCisjZGVmaW5lIExHUE1SX0dMRVZFTDJfTUFTSwkweDAwZjAKKyNkZWZpbmUgTEdQTVJfR0xFVkVMMl9TSElGVAk0IAorI2RlZmluZSBMR1BNUl9HTEVWRUwwX01BU0sJMHgwZjAwCisjZGVmaW5lIExHUE1SX0dMRVZFTDBfU0hJRlQJOCAKKyNkZWZpbmUgTEdQTVJfR0xFVkVMMV9NQVNLCTB4ZjAwMAorI2RlZmluZSBMR1BNUl9HTEVWRUwxX1NISUZUCTEyCisKKy8qKioqKioqKioqCisgKgorICogMHhGRkZGRkJ4eCAtLSBSZWFsLVRpbWUgQ2xvY2sgKFJUQykKKyAqCisgKioqKioqKioqKi8KKworLyoKKyAqIFJUQyBIb3VycyBNaW51dGVzIGFuZCBTZWNvbmRzIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgUlRDVElNRV9BRERSCTB4ZmZmZmZiMDAKKyNkZWZpbmUgUlRDVElNRQkJTE9OR19SRUYoUlRDVElNRV9BRERSKQorCisjZGVmaW5lIFJUQ1RJTUVfU0VDT05EU19NQVNLCTB4MDAwMDAwM2YJLyogU2Vjb25kcyAqLworI2RlZmluZSBSVENUSU1FX1NFQ09ORFNfU0hJRlQJMAorI2RlZmluZSBSVENUSU1FX01JTlVURVNfTUFTSwkweDAwM2YwMDAwCS8qIE1pbnV0ZXMgKi8KKyNkZWZpbmUgUlRDVElNRV9NSU5VVEVTX1NISUZUCTE2CisjZGVmaW5lIFJUQ1RJTUVfSE9VUlNfTUFTSwkweDFmMDAwMDAwCS8qIEhvdXJzICovCisjZGVmaW5lIFJUQ1RJTUVfSE9VUlNfU0hJRlQJMjQKKworLyoKKyAqICBSVEMgQWxhcm0gUmVnaXN0ZXIgCisgKi8KKyNkZWZpbmUgUlRDQUxSTV9BRERSICAgIDB4ZmZmZmZiMDQKKyNkZWZpbmUgUlRDQUxSTSAgICAgICAgIExPTkdfUkVGKFJUQ0FMUk1fQUREUikKKworI2RlZmluZSBSVENBTFJNX1NFQ09ORFNfTUFTSyAgICAweDAwMDAwMDNmICAgICAgLyogU2Vjb25kcyAqLworI2RlZmluZSBSVENBTFJNX1NFQ09ORFNfU0hJRlQgICAwCisjZGVmaW5lIFJUQ0FMUk1fTUlOVVRFU19NQVNLICAgIDB4MDAzZjAwMDAgICAgICAvKiBNaW51dGVzICovCisjZGVmaW5lIFJUQ0FMUk1fTUlOVVRFU19TSElGVCAgIDE2CisjZGVmaW5lIFJUQ0FMUk1fSE9VUlNfTUFTSyAgICAgIDB4MWYwMDAwMDAgICAgICAvKiBIb3VycyAqLworI2RlZmluZSBSVENBTFJNX0hPVVJTX1NISUZUICAgICAyNAorCisvKgorICogUlRDIENvbnRyb2wgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBSVENDVExfQUREUgkweGZmZmZmYjBjCisjZGVmaW5lIFJUQ0NUTAkJV09SRF9SRUYoUlRDQ1RMX0FERFIpCisKKyNkZWZpbmUgUlRDQ1RMXzM4NAkweDAwMjAJLyogQ3J5c3RhbCBTZWxlY3Rpb24gKi8KKyNkZWZpbmUgUlRDQ1RMX0VOQUJMRQkweDAwODAJLyogUlRDIEVuYWJsZSAqLworCisvKiAnRVozMjgtY29tcGF0aWJsZSBkZWZpbml0aW9ucyAqLworI2RlZmluZSBSVENDVExfWFRMCVJUQ0NUTF8zODQKKyNkZWZpbmUgUlRDQ1RMX0VOCVJUQ0NUTF9FTkFCTEUKKworLyoKKyAqIFJUQyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIAorICovCisjZGVmaW5lIFJUQ0lTUl9BRERSCTB4ZmZmZmZiMGUKKyNkZWZpbmUgUlRDSVNSCQlXT1JEX1JFRihSVENJU1JfQUREUikKKworI2RlZmluZSBSVENJU1JfU1cJMHgwMDAxCS8qIFN0b3B3YXRjaCB0aW1lZCBvdXQgKi8KKyNkZWZpbmUgUlRDSVNSX01JTgkweDAwMDIJLyogMS1taW51dGUgaW50ZXJydXB0IGhhcyBvY2N1cnJlZCAqLworI2RlZmluZSBSVENJU1JfQUxNCTB4MDAwNAkvKiBBbGFybSBpbnRlcnJ1cHQgaGFzIG9jY3VycmVkICovCisjZGVmaW5lIFJUQ0lTUl9EQVkJMHgwMDA4CS8qIDI0LWhvdXIgcm9sbG92ZXIgaW50ZXJydXB0IGhhcyBvY2N1cnJlZCAqLworI2RlZmluZSBSVENJU1JfMUhaCTB4MDAxMAkvKiAxSHogaW50ZXJydXB0IGhhcyBvY2N1cnJlZCAqLworCisvKgorICogUlRDIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBSVENJRU5SX0FERFIJMHhmZmZmZmIxMAorI2RlZmluZSBSVENJRU5SCQlXT1JEX1JFRihSVENJRU5SX0FERFIpCisKKyNkZWZpbmUgUlRDSUVOUl9TVwkweDAwMDEJLyogU3RvcHdhdGNoIGludGVycnVwdCBlbmFibGUgKi8KKyNkZWZpbmUgUlRDSUVOUl9NSU4JMHgwMDAyCS8qIDEtbWludXRlIGludGVycnVwdCBlbmFibGUgKi8KKyNkZWZpbmUgUlRDSUVOUl9BTE0JMHgwMDA0CS8qIEFsYXJtIGludGVycnVwdCBlbmFibGUgKi8KKyNkZWZpbmUgUlRDSUVOUl9EQVkJMHgwMDA4CS8qIDI0LWhvdXIgcm9sbG92ZXIgaW50ZXJydXB0IGVuYWJsZSAqLworI2RlZmluZSBSVENJRU5SXzFIWgkweDAwMTAJLyogMUh6IGludGVycnVwdCBlbmFibGUgKi8KKworLyogCisgKiBTdG9wd2F0Y2ggTWludXRlcyBSZWdpc3RlcgorICovCisjZGVmaW5lIFNUUFdDSF9BRERSCTB4ZmZmZmZiMTIKKyNkZWZpbmUgU1RQV0NICQlXT1JEX1JFRihTVFBXQ0gpCisKKyNkZWZpbmUgU1RQV0NIX0NOVF9NQVNLCSAweDAwZmYJLyogU3RvcHdhdGNoIGNvdW50ZG93biB2YWx1ZSAqLworI2RlZmluZSBTUFRXQ0hfQ05UX1NISUZUIDAKKworI2VuZGlmIC8qIF9NQzY4MzI4X0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvTUM2ODMzMi5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L01DNjgzMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmI4ZjAyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L01DNjgzMzIuaApAQCAtMCwwICsxLDE1MiBAQAorCisvKiBpbmNsdWRlL2FzbS1tNjhrbm9tbXUvTUM2ODMzMi5oOiAnMzMyIGNvbnRyb2wgcmVnaXN0ZXJzCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4ICBLZW5uZXRoIEFsYmFub3dza2kgPGtqYWhkc0BramFoZHMuY29tPiwKKyAqCisgKi8KKworI2lmbmRlZiBfTUM2ODMzMl9IXworI2RlZmluZSBfTUM2ODMzMl9IXworCisjZGVmaW5lIEJZVEVfUkVGKGFkZHIpICgqKCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyKilhZGRyKSkKKyNkZWZpbmUgV09SRF9SRUYoYWRkcikgKCooKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0KilhZGRyKSkKKworI2RlZmluZSBQT1JURV9BRERSCTB4ZmZmYTExCisjZGVmaW5lIFBPUlRFCUJZVEVfUkVGKFBPUlRFX0FERFIpCisjZGVmaW5lIEREUkVfQUREUgkweGZmZmExNQorI2RlZmluZSBERFJFCUJZVEVfUkVGKEREUkVfQUREUikKKyNkZWZpbmUgUEVQQVJfQUREUgkweGZmZmExNworI2RlZmluZSBQRVBBUglCWVRFX1JFRihQRVBBUl9BRERSKQorCisjZGVmaW5lIFBPUlRGX0FERFIJMHhmZmZhMTkKKyNkZWZpbmUgUE9SVEYJQllURV9SRUYoUE9SVEZfQUREUikKKyNkZWZpbmUgRERSRl9BRERSCTB4ZmZmYTFkCisjZGVmaW5lIEREUkYJQllURV9SRUYoRERSRl9BRERSKQorI2RlZmluZSBQRlBBUl9BRERSCTB4ZmZmYTFmCisjZGVmaW5lIFBGUEFSCUJZVEVfUkVGKFBGUEFSX0FERFIpCisKKyNkZWZpbmUgUE9SVFFTX0FERFIJMHhmZmZjMTUKKyNkZWZpbmUgUE9SVFFTCUJZVEVfUkVGKFBPUlRRU19BRERSKQorI2RlZmluZSBERFJRU19BRERSCTB4ZmZmYzE3CisjZGVmaW5lIEREUlFTCUJZVEVfUkVGKEREUlFTX0FERFIpCisjZGVmaW5lIFBRU1BBUl9BRERSCTB4ZmZmYzE2CisjZGVmaW5lIFBRU1BBUglCWVRFX1JFRihQUVNQQVJfQUREUikKKworI2RlZmluZSBDU1BBUjBfQUREUiAweEZGRkE0NAorI2RlZmluZSBDU1BBUjAgV09SRF9SRUYoQ1NQQVIwX0FERFIpCisjZGVmaW5lIENTUEFSMV9BRERSIDB4RkZGQTQ2CisjZGVmaW5lIENTUEFSMSBXT1JEX1JFRihDU1BBUjFfQUREUikKKyNkZWZpbmUgQ1NBUkJUX0FERFIgMHhGRkZBNDgKKyNkZWZpbmUgQ1NBUkJUIFdPUkRfUkVGKENTQVJCVF9BRERSKQorI2RlZmluZSBDU09QQlRfQUREUiAweEZGRkE0QQorI2RlZmluZSBDU09QQlQgV09SRF9SRUYoQ1NPUEJUX0FERFIpCisjZGVmaW5lIENTQkFSMF9BRERSIDB4RkZGQTRDCisjZGVmaW5lIENTQkFSMCBXT1JEX1JFRihDU0JBUjBfQUREUikKKyNkZWZpbmUgQ1NPUjBfQUREUiAweEZGRkE0RQorI2RlZmluZSBDU09SMCBXT1JEX1JFRihDU09SMF9BRERSKQorI2RlZmluZSBDU0JBUjFfQUREUiAweEZGRkE1MAorI2RlZmluZSBDU0JBUjEgV09SRF9SRUYoQ1NCQVIxX0FERFIpCisjZGVmaW5lIENTT1IxX0FERFIgMHhGRkZBNTIKKyNkZWZpbmUgQ1NPUjEgV09SRF9SRUYoQ1NPUjFfQUREUikKKyNkZWZpbmUgQ1NCQVIyX0FERFIgMHhGRkZBNTQKKyNkZWZpbmUgQ1NCQVIyIFdPUkRfUkVGKENTQkFSMl9BRERSKQorI2RlZmluZSBDU09SMl9BRERSIDB4RkZGQTU2CisjZGVmaW5lIENTT1IyIFdPUkRfUkVGKENTT1IyX0FERFIpCisjZGVmaW5lIENTQkFSM19BRERSIDB4RkZGQTU4CisjZGVmaW5lIENTQkFSMyBXT1JEX1JFRihDU0JBUjNfQUREUikKKyNkZWZpbmUgQ1NPUjNfQUREUiAweEZGRkE1QQorI2RlZmluZSBDU09SMyBXT1JEX1JFRihDU09SM19BRERSKQorI2RlZmluZSBDU0JBUjRfQUREUiAweEZGRkE1QworI2RlZmluZSBDU0JBUjQgV09SRF9SRUYoQ1NCQVI0X0FERFIpCisjZGVmaW5lIENTT1I0X0FERFIgMHhGRkZBNUUKKyNkZWZpbmUgQ1NPUjQgV09SRF9SRUYoQ1NPUjRfQUREUikKKyNkZWZpbmUgQ1NCQVI1X0FERFIgMHhGRkZBNjAKKyNkZWZpbmUgQ1NCQVI1IFdPUkRfUkVGKENTQkFSNV9BRERSKQorI2RlZmluZSBDU09SNV9BRERSIDB4RkZGQTYyCisjZGVmaW5lIENTT1I1IFdPUkRfUkVGKENTT1I1X0FERFIpCisjZGVmaW5lIENTQkFSNl9BRERSIDB4RkZGQTY0CisjZGVmaW5lIENTQkFSNiBXT1JEX1JFRihDU0JBUjZfQUREUikKKyNkZWZpbmUgQ1NPUjZfQUREUiAweEZGRkE2NgorI2RlZmluZSBDU09SNiBXT1JEX1JFRihDU09SNl9BRERSKQorI2RlZmluZSBDU0JBUjdfQUREUiAweEZGRkE2OAorI2RlZmluZSBDU0JBUjcgV09SRF9SRUYoQ1NCQVI3X0FERFIpCisjZGVmaW5lIENTT1I3X0FERFIgMHhGRkZBNkEKKyNkZWZpbmUgQ1NPUjcgV09SRF9SRUYoQ1NPUjdfQUREUikKKyNkZWZpbmUgQ1NCQVI4X0FERFIgMHhGRkZBNkMKKyNkZWZpbmUgQ1NCQVI4IFdPUkRfUkVGKENTQkFSOF9BRERSKQorI2RlZmluZSBDU09SOF9BRERSIDB4RkZGQTZFCisjZGVmaW5lIENTT1I4IFdPUkRfUkVGKENTT1I4X0FERFIpCisjZGVmaW5lIENTQkFSOV9BRERSIDB4RkZGQTcwCisjZGVmaW5lIENTQkFSOSBXT1JEX1JFRihDU0JBUjlfQUREUikKKyNkZWZpbmUgQ1NPUjlfQUREUiAweEZGRkE3MgorI2RlZmluZSBDU09SOSBXT1JEX1JFRihDU09SOV9BRERSKQorI2RlZmluZSBDU0JBUjEwX0FERFIgMHhGRkZBNzQKKyNkZWZpbmUgQ1NCQVIxMCBXT1JEX1JFRihDU0JBUjEwX0FERFIpCisjZGVmaW5lIENTT1IxMF9BRERSIDB4RkZGQTc2CisjZGVmaW5lIENTT1IxMCBXT1JEX1JFRihDU09SMTBfQUREUikKKworI2RlZmluZSBDU09SX01PREVfQVNZTkMJMHgwMDAwCisjZGVmaW5lIENTT1JfTU9ERV9TWU5DCTB4ODAwMAorI2RlZmluZSBDU09SX01PREVfTUFTSwkweDgwMDAKKyNkZWZpbmUgQ1NPUl9CWVRFX0RJU0FCTEUJMHgwMDAwCisjZGVmaW5lIENTT1JfQllURV9VUFBFUgkJMHg0MDAwCisjZGVmaW5lIENTT1JfQllURV9MT1dFUgkJMHgyMDAwCisjZGVmaW5lIENTT1JfQllURV9CT1RICQkweDYwMDAKKyNkZWZpbmUgQ1NPUl9CWVRFX01BU0sJCTB4NjAwMAorI2RlZmluZSBDU09SX1JXX1JTVkQJCTB4MDAwMAorI2RlZmluZSBDU09SX1JXX1JFQUQJCTB4MDgwMAorI2RlZmluZSBDU09SX1JXX1dSSVRFCQkweDEwMDAKKyNkZWZpbmUgQ1NPUl9SV19CT1RICQkweDE4MDAKKyNkZWZpbmUgQ1NPUl9SV19NQVNLCQkweDE4MDAKKyNkZWZpbmUgQ1NPUl9TVFJPQkVfRFMJCTB4MDQwMAorI2RlZmluZSBDU09SX1NUUk9CRV9BUwkJMHgwMDAwCisjZGVmaW5lIENTT1JfU1RST0JFX01BU0sJMHgwNDAwCisjZGVmaW5lIENTT1JfRFNBQ0tfV0FJVCh4KQkod2FpdCA8PCA2KQorI2RlZmluZSBDU09SX0RTQUNLX0ZURVJNCSgxNCA8PCA2KQorI2RlZmluZSBDU09SX0RTQUNLX0VYVEVSTkFMCSgxNSA8PCA2KQorI2RlZmluZSBDU09SX0RTQUNLX01BU0sJCTB4MDNjMAorI2RlZmluZSBDU09SX1NQQUNFX0NQVQkJMHgwMDAwCisjZGVmaW5lIENTT1JfU1BBQ0VfVVNFUgkJMHgwMDEwCisjZGVmaW5lIENTT1JfU1BBQ0VfU1UJCTB4MDAyMAorI2RlZmluZSBDU09SX1NQQUNFX0JPVEgJCTB4MDAzMAorI2RlZmluZSBDU09SX1NQQUNFX01BU0sJCTB4MDAzMAorI2RlZmluZSBDU09SX0lQTF9BTEwJCTB4MDAwMAorI2RlZmluZSBDU09SX0lQTF9QUklPUklUWSh4KQkoeCA8PCAxKQorI2RlZmluZSBDU09SX0lQTF9NQVNLCQkweDAwMGUKKyNkZWZpbmUgQ1NPUl9BVkVDX09OCQkweDAwMDEKKyNkZWZpbmUgQ1NPUl9BVkVDX09GRgkJMHgwMDAwCisjZGVmaW5lIENTT1JfQVZFQ19NQVNLCQkweDAwMDEKKworI2RlZmluZSBDU0JBUl9BRERSKHgpCQkoKGFkZHIgPj4gMTEpIDw8IDMpIAorI2RlZmluZSBDU0JBUl9BRERSX01BU0sJCTB4ZmZmOAorI2RlZmluZSBDU0JBUl9CTEtTSVpFXzJLCTB4MDAwMAorI2RlZmluZSBDU0JBUl9CTEtTSVpFXzhLCTB4MDAwMQorI2RlZmluZSBDU0JBUl9CTEtTSVpFXzE2SwkweDAwMDIKKyNkZWZpbmUgQ1NCQVJfQkxLU0laRV82NEsJMHgwMDAzCisjZGVmaW5lIENTQkFSX0JMS1NJWkVfMTI4SwkweDAwMDQKKyNkZWZpbmUgQ1NCQVJfQkxLU0laRV8yNTZLCTB4MDAwNQorI2RlZmluZSBDU0JBUl9CTEtTSVpFXzUxMksJMHgwMDA2CisjZGVmaW5lIENTQkFSX0JMS1NJWkVfMU0JMHgwMDA3CisjZGVmaW5lIENTQkFSX0JMS1NJWkVfTUFTSwkweDAwMDcKKworI2RlZmluZSBDU1BBUl9ESVNDCTAKKyNkZWZpbmUgQ1NQQVJfQUxUCTEKKyNkZWZpbmUgQ1NQQVJfQ1M4CTIKKyNkZWZpbmUgQ1NQQVJfQ1MxNgkzCisjZGVmaW5lIENTUEFSX01BU0sJMworCisjZGVmaW5lIENTUEFSMF9DU0JPT1QoeCkgKHggPDwgMCkKKyNkZWZpbmUgQ1NQQVIwX0NTMCh4KQkoeCA8PCAyKQorI2RlZmluZSBDU1BBUjBfQ1MxKHgpCSh4IDw8IDQpCisjZGVmaW5lIENTUEFSMF9DUzIoeCkJKHggPDwgNikKKyNkZWZpbmUgQ1NQQVIwX0NTMyh4KQkoeCA8PCA4KQorI2RlZmluZSBDU1BBUjBfQ1M0KHgpCSh4IDw8IDEwKQorI2RlZmluZSBDU1BBUjBfQ1M1KHgpCSh4IDw8IDEyKQorCisjZGVmaW5lIENTUEFSMV9DUzYoeCkJKHggPDwgMCkKKyNkZWZpbmUgQ1NQQVIxX0NTNyh4KQkoeCA8PCAyKQorI2RlZmluZSBDU1BBUjFfQ1M4KHgpCSh4IDw8IDQpCisjZGVmaW5lIENTUEFSMV9DUzkoeCkJKHggPDwgNikKKyNkZWZpbmUgQ1NQQVIxX0NTMTAoeCkJKHggPDwgOCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvTUM2OEVaMzI4LmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvTUM2OEVaMzI4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAxOTMzZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9NQzY4RVozMjguaApAQCAtMCwwICsxLDEyNTMgQEAKKworLyogaW5jbHVkZS9hc20tbTY4a25vbW11L01DNjhFWjMyOC5oOiAnRVozMjggY29udHJvbCByZWdpc3RlcnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgIFZsYWRpbWlyIEd1cmV2aWNoIDx2Z3VyZXZpY0BjaXNjby5jb20+CisgKiAgICAgICAgICAgICAgICAgICAgIEJlYXIgJiBIYXJlIFNvZnR3YXJlLCBJbmMuCisgKgorICogQmFzZWQgb24gaW5jbHVkZS9hc20tbTY4a25vbW11L01DNjgzMzIuaAorICogQ29weXJpZ2h0IChDKSAxOTk4ICBLZW5uZXRoIEFsYmFub3dza2kgPGtqYWhkc0BramFoZHMuY29tPiwKKyAqICAgICAgICAgICAgICAgICAgICAgVGhlIFNpbHZlciBIYW1tZXIgR3JvdXAsIEx0ZC4KKyAqCisgKi8KKworI2lmbmRlZiBfTUM2OEVaMzI4X0hfCisjZGVmaW5lIF9NQzY4RVozMjhfSF8KKworI2RlZmluZSBCWVRFX1JFRihhZGRyKSAoKigodm9sYXRpbGUgdW5zaWduZWQgY2hhciopYWRkcikpCisjZGVmaW5lIFdPUkRfUkVGKGFkZHIpICgqKCh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCopYWRkcikpCisjZGVmaW5lIExPTkdfUkVGKGFkZHIpICgqKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nKilhZGRyKSkKKworI2RlZmluZSBQVVRfRklFTEQoZmllbGQsIHZhbCkgKCgodmFsKSA8PCBmaWVsZCMjX1NISUZUKSAmIGZpZWxkIyNfTUFTSykKKyNkZWZpbmUgR0VUX0ZJRUxEKHJlZywgZmllbGQpICgoKHJlZykgJiBmaWVsZCMjX01BU0spID4+IGZpZWxkIyNfU0hJRlQpCisKKy8qKioqKioqKioqIAorICoKKyAqIDB4RkZGRkYweHggLS0gU3lzdGVtIENvbnRyb2wKKyAqCisgKioqKioqKioqKi8KKyAKKy8qCisgKiBTeXN0ZW0gQ29udHJvbCBSZWdpc3RlciAoU0NSKQorICovCisjZGVmaW5lIFNDUl9BRERSCTB4ZmZmZmYwMDAKKyNkZWZpbmUgU0NSCQlCWVRFX1JFRihTQ1JfQUREUikKKworI2RlZmluZSBTQ1JfV0RUSDgJMHgwMQkvKiA4LUJpdCBXaWR0aCBTZWxlY3QgKi8KKyNkZWZpbmUgU0NSX0RNQVAJMHgwNAkvKiBEb3VibGUgTWFwICovCisjZGVmaW5lIFNDUl9TTwkJMHgwOAkvKiBTdXBlcnZpc29yIE9ubHkgKi8KKyNkZWZpbmUgU0NSX0JFVEVOCTB4MTAJLyogQnVzLUVycm9yIFRpbWUtT3V0IEVuYWJsZSAqLworI2RlZmluZSBTQ1JfUFJWCQkweDIwCS8qIFByaXZpbGVnZSBWaW9sYXRpb24gKi8KKyNkZWZpbmUgU0NSX1dQVgkJMHg0MAkvKiBXcml0ZSBQcm90ZWN0IFZpb2xhdGlvbiAqLworI2RlZmluZSBTQ1JfQkVUTwkweDgwCS8qIEJ1cy1FcnJvciBUaW1lT3V0ICovCisKKy8qCisgKiBTaWxpY29uIElEIFJlZ2lzdGVyIChNYXNrIFJldmlzaW9uIFJlZ2lzdGVyIChNUlIpIGZvciAnMzI4IENvbXBhdGliaWxpdHkpCisgKi8KKyNkZWZpbmUgTVJSX0FERFIgMHhmZmZmZjAwNAorI2RlZmluZSBNUlIJIExPTkdfUkVGKE1SUl9BRERSKQorCisvKioqKioqKioqKiAKKyAqCisgKiAweEZGRkZGMXh4IC0tIENoaXAtU2VsZWN0IGxvZ2ljCisgKgorICoqKioqKioqKiovCisgCisvKgorICogQ2hpcCBTZWxlY3QgR3JvdXAgQmFzZSBSZWdpc3RlcnMgCisgKi8KKyNkZWZpbmUgQ1NHQkFfQUREUgkweGZmZmZmMTAwCisjZGVmaW5lIENTR0JCX0FERFIJMHhmZmZmZjEwMgorCisjZGVmaW5lIENTR0JDX0FERFIJMHhmZmZmZjEwNAorI2RlZmluZSBDU0dCRF9BRERSCTB4ZmZmZmYxMDYKKworI2RlZmluZSBDU0dCQQkJV09SRF9SRUYoQ1NHQkFfQUREUikKKyNkZWZpbmUgQ1NHQkIJCVdPUkRfUkVGKENTR0JCX0FERFIpCisjZGVmaW5lIENTR0JDCQlXT1JEX1JFRihDU0dCQ19BRERSKQorI2RlZmluZSBDU0dCRAkJV09SRF9SRUYoQ1NHQkRfQUREUikKKworLyoKKyAqIENoaXAgU2VsZWN0IFJlZ2lzdGVycyAKKyAqLworI2RlZmluZSBDU0FfQUREUgkweGZmZmZmMTEwCisjZGVmaW5lIENTQl9BRERSCTB4ZmZmZmYxMTIKKyNkZWZpbmUgQ1NDX0FERFIJMHhmZmZmZjExNAorI2RlZmluZSBDU0RfQUREUgkweGZmZmZmMTE2CisKKyNkZWZpbmUgQ1NBCQlXT1JEX1JFRihDU0FfQUREUikKKyNkZWZpbmUgQ1NCCQlXT1JEX1JFRihDU0JfQUREUikKKyNkZWZpbmUgQ1NDCQlXT1JEX1JFRihDU0NfQUREUikKKyNkZWZpbmUgQ1NECQlXT1JEX1JFRihDU0RfQUREUikKKworI2RlZmluZSBDU0FfRU4JCTB4MDAwMQkJLyogQ2hpcC1TZWxlY3QgRW5hYmxlICovCisjZGVmaW5lIENTQV9TSVpfTUFTSwkweDAwMGUJCS8qIENoaXAtU2VsZWN0IFNpemUgKi8KKyNkZWZpbmUgQ1NBX1NJWl9TSElGVCAgIDEKKyNkZWZpbmUgQ1NBX1dTX01BU0sJMHgwMDcwCQkvKiBXYWl0IFN0YXRlICovCisjZGVmaW5lIENTQV9XU19TSElGVCAgICA0CisjZGVmaW5lIENTQV9CU1cJCTB4MDA4MAkJLyogRGF0YSBCdXMgV2lkdGggKi8KKyNkZWZpbmUgQ1NBX0ZMQVNICTB4MDEwMAkJLyogRkxBU0ggTWVtb3J5IFN1cHBvcnQgKi8KKyNkZWZpbmUgQ1NBX1JPCQkweDgwMDAJCS8qIFJlYWQtT25seSAqLworCisjZGVmaW5lIENTQl9FTgkJMHgwMDAxCQkvKiBDaGlwLVNlbGVjdCBFbmFibGUgKi8KKyNkZWZpbmUgQ1NCX1NJWl9NQVNLCTB4MDAwZQkJLyogQ2hpcC1TZWxlY3QgU2l6ZSAqLworI2RlZmluZSBDU0JfU0laX1NISUZUICAgMQorI2RlZmluZSBDU0JfV1NfTUFTSwkweDAwNzAJCS8qIFdhaXQgU3RhdGUgKi8KKyNkZWZpbmUgQ1NCX1dTX1NISUZUICAgIDQKKyNkZWZpbmUgQ1NCX0JTVwkJMHgwMDgwCQkvKiBEYXRhIEJ1cyBXaWR0aCAqLworI2RlZmluZSBDU0JfRkxBU0gJMHgwMTAwCQkvKiBGTEFTSCBNZW1vcnkgU3VwcG9ydCAqLworI2RlZmluZSBDU0JfVVBTSVpfTUFTSwkweDE4MDAJCS8qIFVucHJvdGVjdGVkIG1lbW9yeSBibG9jayBzaXplICovCisjZGVmaW5lIENTQl9VUFNJWl9TSElGVCAxMQorI2RlZmluZSBDU0JfUk9QCQkweDIwMDAJCS8qIFJlYWRvbmx5IGlmIHByb3RlY3RlZCAqLworI2RlZmluZSBDU0JfU09QCQkweDQwMDAJCS8qIFN1cGVydmlzb3Igb25seSBpZiBwcm90ZWN0ZWQgKi8KKyNkZWZpbmUgQ1NCX1JPCQkweDgwMDAJCS8qIFJlYWQtT25seSAqLworCisjZGVmaW5lIENTQ19FTgkJMHgwMDAxCQkvKiBDaGlwLVNlbGVjdCBFbmFibGUgKi8KKyNkZWZpbmUgQ1NDX1NJWl9NQVNLCTB4MDAwZQkJLyogQ2hpcC1TZWxlY3QgU2l6ZSAqLworI2RlZmluZSBDU0NfU0laX1NISUZUICAgMQorI2RlZmluZSBDU0NfV1NfTUFTSwkweDAwNzAJCS8qIFdhaXQgU3RhdGUgKi8KKyNkZWZpbmUgQ1NDX1dTX1NISUZUICAgIDQKKyNkZWZpbmUgQ1NDX0JTVwkJMHgwMDgwCQkvKiBEYXRhIEJ1cyBXaWR0aCAqLworI2RlZmluZSBDU0NfRkxBU0gJMHgwMTAwCQkvKiBGTEFTSCBNZW1vcnkgU3VwcG9ydCAqLworI2RlZmluZSBDU0NfVVBTSVpfTUFTSwkweDE4MDAJCS8qIFVucHJvdGVjdGVkIG1lbW9yeSBibG9jayBzaXplICovCisjZGVmaW5lIENTQ19VUFNJWl9TSElGVCAxMQorI2RlZmluZSBDU0NfUk9QCQkweDIwMDAJCS8qIFJlYWRvbmx5IGlmIHByb3RlY3RlZCAqLworI2RlZmluZSBDU0NfU09QCQkweDQwMDAJCS8qIFN1cGVydmlzb3Igb25seSBpZiBwcm90ZWN0ZWQgKi8KKyNkZWZpbmUgQ1NDX1JPCQkweDgwMDAJCS8qIFJlYWQtT25seSAqLworCisjZGVmaW5lIENTRF9FTgkJMHgwMDAxCQkvKiBDaGlwLVNlbGVjdCBFbmFibGUgKi8KKyNkZWZpbmUgQ1NEX1NJWl9NQVNLCTB4MDAwZQkJLyogQ2hpcC1TZWxlY3QgU2l6ZSAqLworI2RlZmluZSBDU0RfU0laX1NISUZUICAgMQorI2RlZmluZSBDU0RfV1NfTUFTSwkweDAwNzAJCS8qIFdhaXQgU3RhdGUgKi8KKyNkZWZpbmUgQ1NEX1dTX1NISUZUICAgIDQKKyNkZWZpbmUgQ1NEX0JTVwkJMHgwMDgwCQkvKiBEYXRhIEJ1cyBXaWR0aCAqLworI2RlZmluZSBDU0RfRkxBU0gJMHgwMTAwCQkvKiBGTEFTSCBNZW1vcnkgU3VwcG9ydCAqLworI2RlZmluZSBDU0RfRFJBTQkweDAyMDAJCS8qIERyYW0gU2VsZWN0aW9uICovCisjZGVmaW5lCUNTRF9DT01CCTB4MDQwMAkJLyogQ29tYmluaW5nICovCisjZGVmaW5lIENTRF9VUFNJWl9NQVNLCTB4MTgwMAkJLyogVW5wcm90ZWN0ZWQgbWVtb3J5IGJsb2NrIHNpemUgKi8KKyNkZWZpbmUgQ1NEX1VQU0laX1NISUZUIDExCisjZGVmaW5lIENTRF9ST1AJCTB4MjAwMAkJLyogUmVhZG9ubHkgaWYgcHJvdGVjdGVkICovCisjZGVmaW5lIENTRF9TT1AJCTB4NDAwMAkJLyogU3VwZXJ2aXNvciBvbmx5IGlmIHByb3RlY3RlZCAqLworI2RlZmluZSBDU0RfUk8JCTB4ODAwMAkJLyogUmVhZC1Pbmx5ICovCisKKy8qCisgKiBFbXVsYXRpb24gQ2hpcC1TZWxlY3QgUmVnaXN0ZXIgCisgKi8KKyNkZWZpbmUgRU1VQ1NfQUREUgkweGZmZmZmMTE4CisjZGVmaW5lIEVNVUNTCQlXT1JEX1JFRihFTVVDU19BRERSKQorCisjZGVmaW5lIEVNVUNTX1dTX01BU0sJMHgwMDcwCisjZGVmaW5lIEVNVUNTX1dTX1NISUZUCTQKKworLyoqKioqKioqKiogCisgKgorICogMHhGRkZGRjJ4eCAtLSBQaGFzZSBMb2NrZWQgTG9vcCAoUExMKSAmIFBvd2VyIENvbnRyb2wKKyAqCisgKioqKioqKioqKi8KKworLyoKKyAqIFBMTCBDb250cm9sIFJlZ2lzdGVyIAorICovCisjZGVmaW5lIFBMTENSX0FERFIJMHhmZmZmZjIwMAorI2RlZmluZSBQTExDUgkJV09SRF9SRUYoUExMQ1JfQUREUikKKworI2RlZmluZSBQTExDUl9ESVNQTEwJICAgICAgIDB4MDAwOAkvKiBEaXNhYmxlIFBMTCAqLworI2RlZmluZSBQTExDUl9DTEtFTgkgICAgICAgMHgwMDEwCS8qIENsb2NrIChDTEtPIHBpbikgZW5hYmxlICovCisjZGVmaW5lIFBMTENSX1BSRVNDCSAgICAgICAweDAwMjAJLyogVkNPIHByZXNjYWxlciAqLworI2RlZmluZSBQTExDUl9TWVNDTEtfU0VMX01BU0sgIDB4MDcwMAkvKiBTeXN0ZW0gQ2xvY2sgU2VsZWN0aW9uICovCisjZGVmaW5lIFBMTENSX1NZU0NMS19TRUxfU0hJRlQgOAorI2RlZmluZSBQTExDUl9MQ0RDTEtfU0VMX01BU0sgIDB4MzgwMAkvKiBMQ0QgQ2xvY2sgU2VsZWN0aW9uICovCisjZGVmaW5lIFBMTENSX0xDRENMS19TRUxfU0hJRlQgMTEKKworLyogJzMyOC1jb21wYXRpYmxlIGRlZmluaXRpb25zICovCisjZGVmaW5lIFBMTENSX1BJWENMS19TRUxfTUFTSwlQTExDUl9MQ0RDTEtfU0VMX01BU0sKKyNkZWZpbmUgUExMQ1JfUElYQ0xLX1NFTF9TSElGVAlQTExDUl9MQ0RDTEtfU0VMX1NISUZUCisKKy8qCisgKiBQTEwgRnJlcXVlbmN5IFNlbGVjdCBSZWdpc3RlcgorICovCisjZGVmaW5lIFBMTEZTUl9BRERSCTB4ZmZmZmYyMDIKKyNkZWZpbmUgUExMRlNSCQlXT1JEX1JFRihQTExGU1JfQUREUikKKworI2RlZmluZSBQTExGU1JfUENfTUFTSwkweDAwZmYJCS8qIFAgQ291bnQgKi8KKyNkZWZpbmUgUExMRlNSX1BDX1NISUZUIDAKKyNkZWZpbmUgUExMRlNSX1FDX01BU0sJMHgwZjAwCQkvKiBRIENvdW50ICovCisjZGVmaW5lIFBMTEZTUl9RQ19TSElGVCA4CisjZGVmaW5lIFBMTEZTUl9QUk9UCTB4NDAwMAkJLyogUHJvdGVjdCBQICYgUSAqLworI2RlZmluZSBQTExGU1JfQ0xLMzIJMHg4MDAwCQkvKiBDbG9jayAzMiAoa0h6KSAqLworCisvKgorICogUG93ZXIgQ29udHJvbCBSZWdpc3RlcgorICovCisjZGVmaW5lIFBDVFJMX0FERFIJMHhmZmZmZjIwNworI2RlZmluZSBQQ1RSTAkJQllURV9SRUYoUENUUkxfQUREUikKKworI2RlZmluZSBQQ1RSTF9XSURUSF9NQVNLCTB4MWYJLyogQ1BVIENsb2NrIGJ1cnN0cyB3aWR0aCAqLworI2RlZmluZSBQQ1RSTF9XSURUSF9TSElGVAkwCisjZGVmaW5lIFBDVFJMX1BDRU4JCTB4ODAJLyogUG93ZXIgQ29udHJvbCBFbmFibGUgKi8KKworLyoqKioqKioqKioKKyAqCisgKiAweEZGRkZGM3h4IC0tIEludGVycnVwdCBDb250cm9sbGVyCisgKgorICoqKioqKioqKiovCisKKy8qIAorICogSW50ZXJydXB0IFZlY3RvciBSZWdpc3RlcgorICovCisjZGVmaW5lIElWUl9BRERSCTB4ZmZmZmYzMDAKKyNkZWZpbmUgSVZSCQlCWVRFX1JFRihJVlJfQUREUikKKworI2RlZmluZSBJVlJfVkVDVE9SX01BU0sgMHhGOAorCisvKgorICogSW50ZXJydXB0IGNvbnRyb2wgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBJQ1JfQUREUgkweGZmZmZmMzAyCisjZGVmaW5lIElDUgkJV09SRF9SRUYoSUNSX0FERFIpCisKKyNkZWZpbmUgSUNSX1BPTDUJMHgwMDgwCS8qIFBvbGFyaXR5IENvbnRyb2wgZm9yIElSUTUgKi8KKyNkZWZpbmUgSUNSX0VUNgkJMHgwMTAwCS8qIEVkZ2UgVHJpZ2dlciBTZWxlY3QgZm9yIElSUTYgKi8KKyNkZWZpbmUgSUNSX0VUMwkJMHgwMjAwCS8qIEVkZ2UgVHJpZ2dlciBTZWxlY3QgZm9yIElSUTMgKi8KKyNkZWZpbmUgSUNSX0VUMgkJMHgwNDAwCS8qIEVkZ2UgVHJpZ2dlciBTZWxlY3QgZm9yIElSUTIgKi8KKyNkZWZpbmUgSUNSX0VUMQkJMHgwODAwCS8qIEVkZ2UgVHJpZ2dlciBTZWxlY3QgZm9yIElSUTEgKi8KKyNkZWZpbmUgSUNSX1BPTDYJMHgxMDAwCS8qIFBvbGFyaXR5IENvbnRyb2wgZm9yIElSUTYgKi8KKyNkZWZpbmUgSUNSX1BPTDMJMHgyMDAwCS8qIFBvbGFyaXR5IENvbnRyb2wgZm9yIElSUTMgKi8KKyNkZWZpbmUgSUNSX1BPTDIJMHg0MDAwCS8qIFBvbGFyaXR5IENvbnRyb2wgZm9yIElSUTIgKi8KKyNkZWZpbmUgSUNSX1BPTDEJMHg4MDAwCS8qIFBvbGFyaXR5IENvbnRyb2wgZm9yIElSUTEgKi8KKworLyoKKyAqIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgSU1SX0FERFIJMHhmZmZmZjMwNAorI2RlZmluZSBJTVIJCUxPTkdfUkVGKElNUl9BRERSKQorCisvKgorICogRGVmaW5lIHRoZSBuYW1lcyBmb3IgYml0IHBvc2l0aW9ucyBmaXJzdC4gVGhpcyBpcyB1c2VmdWwgZm9yIAorICogcmVxdWVzdF9pcnEKKyAqLworI2RlZmluZSBTUElfSVJRX05VTQkwCS8qIFNQSSBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgVE1SX0lSUV9OVU0JMQkvKiBUaW1lciBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgVUFSVF9JUlFfTlVNCTIJLyogVUFSVCBpbnRlcnJ1cHQgKi8JCisjZGVmaW5lCVdEVF9JUlFfTlVNCTMJLyogV2F0Y2hkb2cgVGltZXIgaW50ZXJydXB0ICovCisjZGVmaW5lIFJUQ19JUlFfTlVNCTQJLyogUlRDIGludGVycnVwdCAqLworI2RlZmluZQlLQl9JUlFfTlVNCTYJLyogS2V5Ym9hcmQgSW50ZXJydXB0ICovCisjZGVmaW5lIFBXTV9JUlFfTlVNCTcJLyogUHVsc2UtV2lkdGggTW9kdWxhdG9yIGludC4gKi8KKyNkZWZpbmUJSU5UMF9JUlFfTlVNCTgJLyogRXh0ZXJuYWwgSU5UMCAqLworI2RlZmluZQlJTlQxX0lSUV9OVU0JOQkvKiBFeHRlcm5hbCBJTlQxICovCisjZGVmaW5lCUlOVDJfSVJRX05VTQkxMAkvKiBFeHRlcm5hbCBJTlQyICovCisjZGVmaW5lCUlOVDNfSVJRX05VTQkxMQkvKiBFeHRlcm5hbCBJTlQzICovCisjZGVmaW5lIElSUTFfSVJRX05VTQkxNgkvKiBJUlExICovCisjZGVmaW5lIElSUTJfSVJRX05VTQkxNwkvKiBJUlEyICovCisjZGVmaW5lIElSUTNfSVJRX05VTQkxOAkvKiBJUlEzICovCisjZGVmaW5lIElSUTZfSVJRX05VTQkxOQkvKiBJUlE2ICovCisjZGVmaW5lIElSUTVfSVJRX05VTQkyMAkvKiBJUlE1ICovCisjZGVmaW5lIFNBTV9JUlFfTlVNCTIyCS8qIFNhbXBsaW5nIFRpbWVyIGZvciBSVEMgKi8KKyNkZWZpbmUgRU1JUV9JUlFfTlVNCTIzCS8qIEVtdWxhdG9yIEludGVycnVwdCAqLworCisvKiAnMzI4LWNvbXBhdGlibGUgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU1BJTV9JUlFfTlVNCVNQSV9JUlFfTlVNCisjZGVmaW5lIFRNUjFfSVJRX05VTQlUTVJfSVJRX05VTQorCisvKiAKKyAqIEhlcmUgZ28gdGhlIGJpdG1hc2tzIHRoZW1zZWx2ZXMKKyAqLworI2RlZmluZSBJTVJfTVNQSSAJKDEgPDwgU1BJX0lSUV9OVU0pCS8qIE1hc2sgU1BJIGludGVycnVwdCAqLworI2RlZmluZQlJTVJfTVRNUgkoMSA8PCBUTVJfSVJRX05VTSkJLyogTWFzayBUaW1lciBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU1SX01VQVJUCSgxIDw8IFVBUlRfSVJRX05VTSkJLyogTWFzayBVQVJUIGludGVycnVwdCAqLwkKKyNkZWZpbmUJSU1SX01XRFQJKDEgPDwgV0RUX0lSUV9OVU0pCS8qIE1hc2sgV2F0Y2hkb2cgVGltZXIgaW50ZXJydXB0ICovCisjZGVmaW5lIElNUl9NUlRDCSgxIDw8IFJUQ19JUlFfTlVNKQkvKiBNYXNrIFJUQyBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUJSU1SX01LQgkJKDEgPDwgS0JfSVJRX05VTSkJLyogTWFzayBLZXlib2FyZCBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU1SX01QV00JKDEgPDwgUFdNX0lSUV9OVU0pCS8qIE1hc2sgUHVsc2UtV2lkdGggTW9kdWxhdG9yIGludC4gKi8KKyNkZWZpbmUJSU1SX01JTlQwCSgxIDw8IElOVDBfSVJRX05VTSkJLyogTWFzayBFeHRlcm5hbCBJTlQwICovCisjZGVmaW5lCUlNUl9NSU5UMQkoMSA8PCBJTlQxX0lSUV9OVU0pCS8qIE1hc2sgRXh0ZXJuYWwgSU5UMSAqLworI2RlZmluZQlJTVJfTUlOVDIJKDEgPDwgSU5UMl9JUlFfTlVNKQkvKiBNYXNrIEV4dGVybmFsIElOVDIgKi8KKyNkZWZpbmUJSU1SX01JTlQzCSgxIDw8IElOVDNfSVJRX05VTSkJLyogTWFzayBFeHRlcm5hbCBJTlQzICovCisjZGVmaW5lIElNUl9NSVJRMQkoMSA8PCBJUlExX0lSUV9OVU0pCS8qIE1hc2sgSVJRMSAqLworI2RlZmluZSBJTVJfTUlSUTIJKDEgPDwgSVJRMl9JUlFfTlVNKQkvKiBNYXNrIElSUTIgKi8KKyNkZWZpbmUgSU1SX01JUlEzCSgxIDw8IElSUTNfSVJRX05VTSkJLyogTWFzayBJUlEzICovCisjZGVmaW5lIElNUl9NSVJRNgkoMSA8PCBJUlE2X0lSUV9OVU0pCS8qIE1hc2sgSVJRNiAqLworI2RlZmluZSBJTVJfTUlSUTUJKDEgPDwgSVJRNV9JUlFfTlVNKQkvKiBNYXNrIElSUTUgKi8KKyNkZWZpbmUgSU1SX01TQU0JKDEgPDwgU0FNX0lSUV9OVU0pCS8qIE1hc2sgU2FtcGxpbmcgVGltZXIgZm9yIFJUQyAqLworI2RlZmluZSBJTVJfTUVNSVEJKDEgPDwgRU1JUV9JUlFfTlVNKQkvKiBNYXNrIEVtdWxhdG9yIEludGVycnVwdCAqLworCisvKiAnMzI4LWNvbXBhdGlibGUgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgSU1SX01TUElNCUlNUl9NU1BJCisjZGVmaW5lIElNUl9NVE1SMQlJTVJfTVRNUgorCisvKiAKKyAqIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgCisgKi8KKyNkZWZpbmUgSVNSX0FERFIJMHhmZmZmZjMwYworI2RlZmluZSBJU1IJCUxPTkdfUkVGKElTUl9BRERSKQorCisjZGVmaW5lIElTUl9TUEkgCSgxIDw8IFNQSV9JUlFfTlVNKQkvKiBTUEkgaW50ZXJydXB0ICovCisjZGVmaW5lCUlTUl9UTVIJCSgxIDw8IFRNUl9JUlFfTlVNKQkvKiBUaW1lciBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVNSX1VBUlQJKDEgPDwgVUFSVF9JUlFfTlVNKQkvKiBVQVJUIGludGVycnVwdCAqLwkKKyNkZWZpbmUJSVNSX1dEVAkJKDEgPDwgV0RUX0lSUV9OVU0pCS8qIFdhdGNoZG9nIFRpbWVyIGludGVycnVwdCAqLworI2RlZmluZSBJU1JfUlRDCQkoMSA8PCBSVENfSVJRX05VTSkJLyogUlRDIGludGVycnVwdCAqLworI2RlZmluZQlJU1JfS0IJCSgxIDw8IEtCX0lSUV9OVU0pCS8qIEtleWJvYXJkIEludGVycnVwdCAqLworI2RlZmluZSBJU1JfUFdNCQkoMSA8PCBQV01fSVJRX05VTSkJLyogUHVsc2UtV2lkdGggTW9kdWxhdG9yIGludGVycnVwdCAqLworI2RlZmluZQlJU1JfSU5UMAkoMSA8PCBJTlQwX0lSUV9OVU0pCS8qIEV4dGVybmFsIElOVDAgKi8KKyNkZWZpbmUJSVNSX0lOVDEJKDEgPDwgSU5UMV9JUlFfTlVNKQkvKiBFeHRlcm5hbCBJTlQxICovCisjZGVmaW5lCUlTUl9JTlQyCSgxIDw8IElOVDJfSVJRX05VTSkJLyogRXh0ZXJuYWwgSU5UMiAqLworI2RlZmluZQlJU1JfSU5UMwkoMSA8PCBJTlQzX0lSUV9OVU0pCS8qIEV4dGVybmFsIElOVDMgKi8KKyNkZWZpbmUgSVNSX0lSUTEJKDEgPDwgSVJRMV9JUlFfTlVNKQkvKiBJUlExICovCisjZGVmaW5lIElTUl9JUlEyCSgxIDw8IElSUTJfSVJRX05VTSkJLyogSVJRMiAqLworI2RlZmluZSBJU1JfSVJRMwkoMSA8PCBJUlEzX0lSUV9OVU0pCS8qIElSUTMgKi8KKyNkZWZpbmUgSVNSX0lSUTYJKDEgPDwgSVJRNl9JUlFfTlVNKQkvKiBJUlE2ICovCisjZGVmaW5lIElTUl9JUlE1CSgxIDw8IElSUTVfSVJRX05VTSkJLyogSVJRNSAqLworI2RlZmluZSBJU1JfU0FNCQkoMSA8PCBTQU1fSVJRX05VTSkJLyogU2FtcGxpbmcgVGltZXIgZm9yIFJUQyAqLworI2RlZmluZSBJU1JfRU1JUQkoMSA8PCBFTUlRX0lSUV9OVU0pCS8qIEVtdWxhdG9yIEludGVycnVwdCAqLworCisvKiAnMzI4LWNvbXBhdGlibGUgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgSVNSX1NQSU0JSVNSX1NQSQorI2RlZmluZSBJU1JfVE1SMQlJU1JfVE1SCisKKy8qIAorICogSW50ZXJydXB0IFBlbmRpbmcgUmVnaXN0ZXIgCisgKi8KKyNkZWZpbmUgSVBSX0FERFIJMHhmZmZmZjMwYworI2RlZmluZSBJUFIJCUxPTkdfUkVGKElQUl9BRERSKQorCisjZGVmaW5lIElQUl9TUEkgCSgxIDw8IFNQSV9JUlFfTlVNKQkvKiBTUEkgaW50ZXJydXB0ICovCisjZGVmaW5lCUlQUl9UTVIJCSgxIDw8IFRNUl9JUlFfTlVNKQkvKiBUaW1lciBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVBSX1VBUlQJKDEgPDwgVUFSVF9JUlFfTlVNKQkvKiBVQVJUIGludGVycnVwdCAqLwkKKyNkZWZpbmUJSVBSX1dEVAkJKDEgPDwgV0RUX0lSUV9OVU0pCS8qIFdhdGNoZG9nIFRpbWVyIGludGVycnVwdCAqLworI2RlZmluZSBJUFJfUlRDCQkoMSA8PCBSVENfSVJRX05VTSkJLyogUlRDIGludGVycnVwdCAqLworI2RlZmluZQlJUFJfS0IJCSgxIDw8IEtCX0lSUV9OVU0pCS8qIEtleWJvYXJkIEludGVycnVwdCAqLworI2RlZmluZSBJUFJfUFdNCQkoMSA8PCBQV01fSVJRX05VTSkJLyogUHVsc2UtV2lkdGggTW9kdWxhdG9yIGludGVycnVwdCAqLworI2RlZmluZQlJUFJfSU5UMAkoMSA8PCBJTlQwX0lSUV9OVU0pCS8qIEV4dGVybmFsIElOVDAgKi8KKyNkZWZpbmUJSVBSX0lOVDEJKDEgPDwgSU5UMV9JUlFfTlVNKQkvKiBFeHRlcm5hbCBJTlQxICovCisjZGVmaW5lCUlQUl9JTlQyCSgxIDw8IElOVDJfSVJRX05VTSkJLyogRXh0ZXJuYWwgSU5UMiAqLworI2RlZmluZQlJUFJfSU5UMwkoMSA8PCBJTlQzX0lSUV9OVU0pCS8qIEV4dGVybmFsIElOVDMgKi8KKyNkZWZpbmUgSVBSX0lSUTEJKDEgPDwgSVJRMV9JUlFfTlVNKQkvKiBJUlExICovCisjZGVmaW5lIElQUl9JUlEyCSgxIDw8IElSUTJfSVJRX05VTSkJLyogSVJRMiAqLworI2RlZmluZSBJUFJfSVJRMwkoMSA8PCBJUlEzX0lSUV9OVU0pCS8qIElSUTMgKi8KKyNkZWZpbmUgSVBSX0lSUTYJKDEgPDwgSVJRNl9JUlFfTlVNKQkvKiBJUlE2ICovCisjZGVmaW5lIElQUl9JUlE1CSgxIDw8IElSUTVfSVJRX05VTSkJLyogSVJRNSAqLworI2RlZmluZSBJUFJfU0FNCQkoMSA8PCBTQU1fSVJRX05VTSkJLyogU2FtcGxpbmcgVGltZXIgZm9yIFJUQyAqLworI2RlZmluZSBJUFJfRU1JUQkoMSA8PCBFTUlRX0lSUV9OVU0pCS8qIEVtdWxhdG9yIEludGVycnVwdCAqLworCisvKiAnMzI4LWNvbXBhdGlibGUgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgSVBSX1NQSU0JSVBSX1NQSQorI2RlZmluZSBJUFJfVE1SMQlJUFJfVE1SCisKKy8qKioqKioqKioqCisgKgorICogMHhGRkZGRjR4eCAtLSBQYXJhbGxlbCBQb3J0cworICoKKyAqKioqKioqKioqLworCisvKgorICogUG9ydCBBCisgKi8KKyNkZWZpbmUgUEFESVJfQUREUgkweGZmZmZmNDAwCQkvKiBQb3J0IEEgZGlyZWN0aW9uIHJlZyAqLworI2RlZmluZSBQQURBVEFfQUREUgkweGZmZmZmNDAxCQkvKiBQb3J0IEEgZGF0YSByZWdpc3RlciAqLworI2RlZmluZSBQQVBVRU5fQUREUgkweGZmZmZmNDAyCQkvKiBQb3J0IEEgUHVsbC1VcCBlbmFibGUgcmVnICovCisKKyNkZWZpbmUgUEFESVIJCUJZVEVfUkVGKFBBRElSX0FERFIpCisjZGVmaW5lIFBBREFUQQkJQllURV9SRUYoUEFEQVRBX0FERFIpCisjZGVmaW5lIFBBUFVFTgkJQllURV9SRUYoUEFQVUVOX0FERFIpCisKKyNkZWZpbmUgUEEoeCkJCSgxIDw8ICh4KSkKKworLyogCisgKiBQb3J0IEIKKyAqLworI2RlZmluZSBQQkRJUl9BRERSCTB4ZmZmZmY0MDgJCS8qIFBvcnQgQiBkaXJlY3Rpb24gcmVnICovCisjZGVmaW5lIFBCREFUQV9BRERSCTB4ZmZmZmY0MDkJCS8qIFBvcnQgQiBkYXRhIHJlZ2lzdGVyICovCisjZGVmaW5lIFBCUFVFTl9BRERSCTB4ZmZmZmY0MGEJCS8qIFBvcnQgQiBQdWxsLVVwIGVuYWJsZSByZWcgKi8KKyNkZWZpbmUgUEJTRUxfQUREUgkweGZmZmZmNDBiCQkvKiBQb3J0IEIgU2VsZWN0IFJlZ2lzdGVyICovCisKKyNkZWZpbmUgUEJESVIJCUJZVEVfUkVGKFBCRElSX0FERFIpCisjZGVmaW5lIFBCREFUQQkJQllURV9SRUYoUEJEQVRBX0FERFIpCisjZGVmaW5lIFBCUFVFTgkJQllURV9SRUYoUEJQVUVOX0FERFIpCisjZGVmaW5lIFBCU0VMCQlCWVRFX1JFRihQQlNFTF9BRERSKQorCisjZGVmaW5lIFBCKHgpCQkoMSA8PCAoeCkpCisKKyNkZWZpbmUgUEJfQ1NCMAkJMHgwMQkvKiBVc2UgQ1NCMCAgICAgIGFzIFBCWzBdICovCisjZGVmaW5lIFBCX0NTQjEJCTB4MDIJLyogVXNlIENTQjEgICAgICBhcyBQQlsxXSAqLworI2RlZmluZSBQQl9DU0MwX1JBUzAJMHgwNCAgICAvKiBVc2UgQ1NDMC9SQVMwIGFzIFBCWzJdICovCQorI2RlZmluZSBQQl9DU0MxX1JBUzEJMHgwOCAgICAvKiBVc2UgQ1NDMS9SQVMxIGFzIFBCWzNdICovCQorI2RlZmluZSBQQl9DU0QwX0NBUzAJMHgxMCAgICAvKiBVc2UgQ1NEMC9DQVMwIGFzIFBCWzRdICovCQorI2RlZmluZSBQQl9DU0QxX0NBUzEJMHgyMCAgICAvKiBVc2UgQ1NEMS9DQVMxIGFzIFBCWzVdICovCisjZGVmaW5lIFBCX1RJTl9UT1VUCTB4NDAJLyogVXNlIFRJTi9UT1VUICBhcyBQQls2XSAqLworI2RlZmluZSBQQl9QV01PCQkweDgwCS8qIFVzZSBQV01PICAgICAgYXMgUEJbN10gKi8KKworLyogCisgKiBQb3J0IEMKKyAqLworI2RlZmluZSBQQ0RJUl9BRERSCTB4ZmZmZmY0MTAJCS8qIFBvcnQgQyBkaXJlY3Rpb24gcmVnICovCisjZGVmaW5lIFBDREFUQV9BRERSCTB4ZmZmZmY0MTEJCS8qIFBvcnQgQyBkYXRhIHJlZ2lzdGVyICovCisjZGVmaW5lIFBDUERFTl9BRERSCTB4ZmZmZmY0MTIJCS8qIFBvcnQgQyBQdWxsLURvd24gZW5iLiByZWcgKi8KKyNkZWZpbmUgUENTRUxfQUREUgkweGZmZmZmNDEzCQkvKiBQb3J0IEMgU2VsZWN0IFJlZ2lzdGVyICovCisKKyNkZWZpbmUgUENESVIJCUJZVEVfUkVGKFBDRElSX0FERFIpCisjZGVmaW5lIFBDREFUQQkJQllURV9SRUYoUENEQVRBX0FERFIpCisjZGVmaW5lIFBDUERFTgkJQllURV9SRUYoUENQREVOX0FERFIpCisjZGVmaW5lIFBDU0VMCQlCWVRFX1JFRihQQ1NFTF9BRERSKQorCisjZGVmaW5lIFBDKHgpCQkoMSA8PCAoeCkpCisKKyNkZWZpbmUgUENfTEQwCQkweDAxCS8qIFVzZSBMRDAgIGFzIFBDWzBdICovCisjZGVmaW5lIFBDX0xEMQkJMHgwMgkvKiBVc2UgTEQxICBhcyBQQ1sxXSAqLworI2RlZmluZSBQQ19MRDIJCTB4MDQJLyogVXNlIExEMiAgYXMgUENbMl0gKi8KKyNkZWZpbmUgUENfTEQzCQkweDA4CS8qIFVzZSBMRDMgIGFzIFBDWzNdICovCisjZGVmaW5lIFBDX0xGTE0JCTB4MTAJLyogVXNlIExGTE0gYXMgUENbNF0gKi8KKyNkZWZpbmUgUENfTExQIAkJMHgyMAkvKiBVc2UgTExQICBhcyBQQ1s1XSAqLworI2RlZmluZSBQQ19MQ0xLCQkweDQwCS8qIFVzZSBMQ0xLIGFzIFBDWzZdICovCisjZGVmaW5lIFBDX0xBQ0QJCTB4ODAJLyogVXNlIExBQ0QgYXMgUENbN10gKi8KKworLyogCisgKiBQb3J0IEQKKyAqLworI2RlZmluZSBQRERJUl9BRERSCTB4ZmZmZmY0MTgJCS8qIFBvcnQgRCBkaXJlY3Rpb24gcmVnICovCisjZGVmaW5lIFBEREFUQV9BRERSCTB4ZmZmZmY0MTkJCS8qIFBvcnQgRCBkYXRhIHJlZ2lzdGVyICovCisjZGVmaW5lIFBEUFVFTl9BRERSCTB4ZmZmZmY0MWEJCS8qIFBvcnQgRCBQdWxsLVVwIGVuYWJsZSByZWcgKi8KKyNkZWZpbmUgUERTRUxfQUREUgkweGZmZmZmNDFiCQkvKiBQb3J0IEQgU2VsZWN0IFJlZ2lzdGVyICovCisjZGVmaW5lIFBEUE9MX0FERFIJMHhmZmZmZjQxYwkJLyogUG9ydCBEIFBvbGFyaXR5IFJlZ2lzdGVyICovCisjZGVmaW5lIFBESVJRRU5fQUREUgkweGZmZmZmNDFkCQkvKiBQb3J0IEQgSVJRIGVuYWJsZSByZWdpc3RlciAqLworI2RlZmluZSBQREtCRU5fQUREUgkweGZmZmZmNDFlCQkvKiBQb3J0IEQgS2V5Ym9hcmQgRW5hYmxlIHJlZyAqLworI2RlZmluZQlQRElRRUdfQUREUgkweGZmZmZmNDFmCQkvKiBQb3J0IEQgSVJRIEVkZ2UgUmVnaXN0ZXIgKi8KKworI2RlZmluZSBQRERJUgkJQllURV9SRUYoUERESVJfQUREUikKKyNkZWZpbmUgUEREQVRBCQlCWVRFX1JFRihQRERBVEFfQUREUikKKyNkZWZpbmUgUERQVUVOCQlCWVRFX1JFRihQRFBVRU5fQUREUikKKyNkZWZpbmUgUERTRUwJCUJZVEVfUkVGKFBEU0VMX0FERFIpCisjZGVmaW5lCVBEUE9MCQlCWVRFX1JFRihQRFBPTF9BRERSKQorI2RlZmluZSBQRElSUUVOCQlCWVRFX1JFRihQRElSUUVOX0FERFIpCisjZGVmaW5lIFBES0JFTgkJQllURV9SRUYoUERLQkVOX0FERFIpCisjZGVmaW5lIFBESVFFRwkJQllURV9SRUYoUERJUUVHX0FERFIpCisKKyNkZWZpbmUgUEQoeCkJCSgxIDw8ICh4KSkKKworI2RlZmluZSBQRF9JTlQwCQkweDAxCS8qIFVzZSBJTlQwIGFzIFBEWzBdICovCisjZGVmaW5lIFBEX0lOVDEJCTB4MDIJLyogVXNlIElOVDEgYXMgUERbMV0gKi8KKyNkZWZpbmUgUERfSU5UMgkJMHgwNAkvKiBVc2UgSU5UMiBhcyBQRFsyXSAqLworI2RlZmluZSBQRF9JTlQzCQkweDA4CS8qIFVzZSBJTlQzIGFzIFBEWzNdICovCisjZGVmaW5lIFBEX0lSUTEJCTB4MTAJLyogVXNlIElSUTEgYXMgUERbNF0gKi8KKyNkZWZpbmUgUERfSVJRMgkJMHgyMAkvKiBVc2UgSVJRMiBhcyBQRFs1XSAqLworI2RlZmluZSBQRF9JUlEzCQkweDQwCS8qIFVzZSBJUlEzIGFzIFBEWzZdICovCisjZGVmaW5lIFBEX0lSUTYJCTB4ODAJLyogVXNlIElSUTYgYXMgUERbN10gKi8KKworLyogCisgKiBQb3J0IEUKKyAqLworI2RlZmluZSBQRURJUl9BRERSCTB4ZmZmZmY0MjAJCS8qIFBvcnQgRSBkaXJlY3Rpb24gcmVnICovCisjZGVmaW5lIFBFREFUQV9BRERSCTB4ZmZmZmY0MjEJCS8qIFBvcnQgRSBkYXRhIHJlZ2lzdGVyICovCisjZGVmaW5lIFBFUFVFTl9BRERSCTB4ZmZmZmY0MjIJCS8qIFBvcnQgRSBQdWxsLVVwIGVuYWJsZSByZWcgKi8KKyNkZWZpbmUgUEVTRUxfQUREUgkweGZmZmZmNDIzCQkvKiBQb3J0IEUgU2VsZWN0IFJlZ2lzdGVyICovCisKKyNkZWZpbmUgUEVESVIJCUJZVEVfUkVGKFBFRElSX0FERFIpCisjZGVmaW5lIFBFREFUQQkJQllURV9SRUYoUEVEQVRBX0FERFIpCisjZGVmaW5lIFBFUFVFTgkJQllURV9SRUYoUEVQVUVOX0FERFIpCisjZGVmaW5lIFBFU0VMCQlCWVRFX1JFRihQRVNFTF9BRERSKQorCisjZGVmaW5lIFBFKHgpCQkoMSA8PCAoeCkpCisKKyNkZWZpbmUgUEVfU1BNVFhECTB4MDEJLyogVXNlIFNQTVRYRCBhcyBQRVswXSAqLworI2RlZmluZSBQRV9TUE1SWEQJMHgwMgkvKiBVc2UgU1BNUlhEIGFzIFBFWzFdICovCisjZGVmaW5lIFBFX1NQTUNMSwkweDA0CS8qIFVzZSBTUE1DTEsgYXMgUEVbMl0gKi8KKyNkZWZpbmUgUEVfRFdFCQkweDA4CS8qIFVzZSBEV0UgICAgYXMgUEVbM10gKi8KKyNkZWZpbmUgUEVfUlhECQkweDEwCS8qIFVzZSBSWEQgICAgYXMgUEVbNF0gKi8KKyNkZWZpbmUgUEVfVFhECQkweDIwCS8qIFVzZSBUWEQgICAgYXMgUEVbNV0gKi8KKyNkZWZpbmUgUEVfUlRTCQkweDQwCS8qIFVzZSBSVFMgICAgYXMgUEVbNl0gKi8KKyNkZWZpbmUgUEVfQ1RTCQkweDgwCS8qIFVzZSBDVFMgICAgYXMgUEVbN10gKi8KKworLyogCisgKiBQb3J0IEYKKyAqLworI2RlZmluZSBQRkRJUl9BRERSCTB4ZmZmZmY0MjgJCS8qIFBvcnQgRiBkaXJlY3Rpb24gcmVnICovCisjZGVmaW5lIFBGREFUQV9BRERSCTB4ZmZmZmY0MjkJCS8qIFBvcnQgRiBkYXRhIHJlZ2lzdGVyICovCisjZGVmaW5lIFBGUFVFTl9BRERSCTB4ZmZmZmY0MmEJCS8qIFBvcnQgRiBQdWxsLVVwIGVuYWJsZSByZWcgKi8KKyNkZWZpbmUgUEZTRUxfQUREUgkweGZmZmZmNDJiCQkvKiBQb3J0IEYgU2VsZWN0IFJlZ2lzdGVyICovCisKKyNkZWZpbmUgUEZESVIJCUJZVEVfUkVGKFBGRElSX0FERFIpCisjZGVmaW5lIFBGREFUQQkJQllURV9SRUYoUEZEQVRBX0FERFIpCisjZGVmaW5lIFBGUFVFTgkJQllURV9SRUYoUEZQVUVOX0FERFIpCisjZGVmaW5lIFBGU0VMCQlCWVRFX1JFRihQRlNFTF9BRERSKQorCisjZGVmaW5lIFBGKHgpCQkoMSA8PCAoeCkpCisKKyNkZWZpbmUgUEZfTENPTlRSQVNUCTB4MDEJLyogVXNlIExDT05UUkFTVCBhcyBQRlswXSAqLworI2RlZmluZSBQRl9JUlE1ICAgICAgICAgMHgwMiAgICAvKiBVc2UgSVJRNSAgICAgIGFzIFBGWzFdICovCisjZGVmaW5lIFBGX0NMS08gICAgICAgICAweDA0ICAgIC8qIFVzZSBDTEtPICAgICAgYXMgUEZbMl0gKi8KKyNkZWZpbmUgUEZfQTIwICAgICAgICAgIDB4MDggICAgLyogVXNlIEEyMCAgICAgICBhcyBQRlszXSAqLworI2RlZmluZSBQRl9BMjEgICAgICAgICAgMHgxMCAgICAvKiBVc2UgQTIxICAgICAgIGFzIFBGWzRdICovCisjZGVmaW5lIFBGX0EyMiAgICAgICAgICAweDIwICAgIC8qIFVzZSBBMjIgICAgICAgYXMgUEZbNV0gKi8KKyNkZWZpbmUgUEZfQTIzICAgICAgICAgIDB4NDAgICAgLyogVXNlIEEyMyAgICAgICBhcyBQRls2XSAqLworI2RlZmluZSBQRl9DU0ExCQkweDgwICAgIC8qIFVzZSBDU0ExICAgICAgYXMgUEZbN10gKi8KKworLyogCisgKiBQb3J0IEcKKyAqLworI2RlZmluZSBQR0RJUl9BRERSCTB4ZmZmZmY0MzAJCS8qIFBvcnQgRyBkaXJlY3Rpb24gcmVnICovCisjZGVmaW5lIFBHREFUQV9BRERSCTB4ZmZmZmY0MzEJCS8qIFBvcnQgRyBkYXRhIHJlZ2lzdGVyICovCisjZGVmaW5lIFBHUFVFTl9BRERSCTB4ZmZmZmY0MzIJCS8qIFBvcnQgRyBQdWxsLVVwIGVuYWJsZSByZWcgKi8KKyNkZWZpbmUgUEdTRUxfQUREUgkweGZmZmZmNDMzCQkvKiBQb3J0IEcgU2VsZWN0IFJlZ2lzdGVyICovCisKKyNkZWZpbmUgUEdESVIJCUJZVEVfUkVGKFBHRElSX0FERFIpCisjZGVmaW5lIFBHREFUQQkJQllURV9SRUYoUEdEQVRBX0FERFIpCisjZGVmaW5lIFBHUFVFTgkJQllURV9SRUYoUEdQVUVOX0FERFIpCisjZGVmaW5lIFBHU0VMCQlCWVRFX1JFRihQR1NFTF9BRERSKQorCisjZGVmaW5lIFBHKHgpCQkoMSA8PCAoeCkpCisKKyNkZWZpbmUgUEdfQlVTV19EVEFDSwkweDAxCS8qIFVzZSBCVVNXL0RUQUNLIGFzIFBHWzBdICovCisjZGVmaW5lIFBHX0EwCQkweDAyCS8qIFVzZSBBMCAgICAgICAgIGFzIFBHWzFdICovCisjZGVmaW5lIFBHX0VNVUlSUQkweDA0CS8qIFVzZSBFTVVJUlEgICAgIGFzIFBHWzJdICovCisjZGVmaW5lIFBHX0hJWl9QX0QJMHgwOAkvKiBVc2UgSElaL1AvRCAgICBhcyBQR1szXSAqLworI2RlZmluZSBQR19FTVVDUyAgICAgICAgMHgxMAkvKiBVc2UgRU1VQ1MgICAgICBhcyBQR1s0XSAqLworI2RlZmluZSBQR19FTVVCUksJMHgyMAkvKiBVc2UgRU1VQlJLICAgICBhcyBQR1s1XSAqLworCisvKioqKioqKioqKgorICoKKyAqIDB4RkZGRkY1eHggLS0gUHVsc2UtV2lkdGggTW9kdWxhdG9yIChQV00pCisgKgorICoqKioqKioqKiovCisKKy8qCisgKiBQV00gQ29udHJvbCBSZWdpc3RlciAKKyAqLworI2RlZmluZSBQV01DX0FERFIJMHhmZmZmZjUwMAorI2RlZmluZSBQV01DCQlXT1JEX1JFRihQV01DX0FERFIpCisKKyNkZWZpbmUgUFdNQ19DTEtTRUxfTUFTSwkweDAwMDMJLyogQ2xvY2sgU2VsZWN0aW9uICovCisjZGVmaW5lIFBXTUNfQ0xLU0VMX1NISUZUCTAKKyNkZWZpbmUgUFdNQ19SRVBFQVRfTUFTSwkweDAwMGMJLyogU2FtcGxlIFJlcGVhdHMgKi8KKyNkZWZpbmUgUFdNQ19SRVBFQVRfU0hJRlQJMgorI2RlZmluZSBQV01DX0VOCQkJMHgwMDEwCS8qIEVuYWJsZSBQV00gKi8KKyNkZWZpbmUgUE1OQ19GSUZPQVYJCTB4MDAyMAkvKiBGSUZPIEF2YWlsYWJsZSAqLworI2RlZmluZSBQV01DX0lSUUVOCQkweDAwNDAJLyogSW50ZXJydXB0IFJlcXVlc3QgRW5hYmxlICovCisjZGVmaW5lIFBXTUNfSVJRCQkweDAwODAJLyogSW50ZXJydXB0IFJlcXVlc3QgKEZJRk8gZW1wdHkpICovCisjZGVmaW5lIFBXTUNfUFJFU0NBTEVSX01BU0sJMHg3ZjAwCS8qIEluY29taW5nIENsb2NrIHByZXNjYWxlciAqLworI2RlZmluZSBQV01DX1BSRVNDQUxFUl9TSElGVAk4CisjZGVmaW5lIFBXTUNfQ0xLU1JDCQkweDgwMDAJLyogQ2xvY2sgU291cmNlIFNlbGVjdCAqLworCisvKiAnMzI4LWNvbXBhdGlibGUgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgUFdNQ19QV01FTglQV01DX0VOCisKKy8qCisgKiBQV00gU2FtcGxlIFJlZ2lzdGVyIAorICovCisjZGVmaW5lIFBXTVNfQUREUgkweGZmZmZmNTAyCisjZGVmaW5lIFBXTVMJCVdPUkRfUkVGKFBXTVNfQUREUikKKworLyoKKyAqIFBXTSBQZXJpb2QgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBQV01QX0FERFIJMHhmZmZmZjUwNAorI2RlZmluZSBQV01QCQlCWVRFX1JFRihQV01QX0FERFIpCisKKy8qCisgKiBQV00gQ291bnRlciBSZWdpc3RlcgorICovCisjZGVmaW5lIFBXTUNOVF9BRERSCTB4ZmZmZmY1MDUKKyNkZWZpbmUgUFdNQ05UCQlCWVRFX1JFRihQV01DTlRfQUREUikKKworLyoqKioqKioqKioKKyAqCisgKiAweEZGRkZGNnh4IC0tIEdlbmVyYWwtUHVycG9zZSBUaW1lcgorICoKKyAqKioqKioqKioqLworCisvKiAKKyAqIFRpbWVyIENvbnRyb2wgcmVnaXN0ZXIKKyAqLworI2RlZmluZSBUQ1RMX0FERFIJMHhmZmZmZjYwMAorI2RlZmluZSBUQ1RMCQlXT1JEX1JFRihUQ1RMX0FERFIpCisKKyNkZWZpbmUJVENUTF9URU4JCTB4MDAwMQkvKiBUaW1lciBFbmFibGUgICovCisjZGVmaW5lIFRDVExfQ0xLU09VUkNFX01BU0sgCTB4MDAwZQkvKiBDbG9jayBTb3VyY2U6ICovCisjZGVmaW5lICAgVENUTF9DTEtTT1VSQ0VfU1RPUAkgICAweDAwMDAJLyogU3RvcCBjb3VudCAoZGlzYWJsZWQpICAgICovCisjZGVmaW5lICAgVENUTF9DTEtTT1VSQ0VfU1lTQ0xLCSAgIDB4MDAwMgkvKiBTWVNDTEsgdG8gcHJlc2NhbGVyICAgICAgKi8KKyNkZWZpbmUgICBUQ1RMX0NMS1NPVVJDRV9TWVNDTEtfMTYgMHgwMDA0CS8qIFNZU0NMSy8xNiB0byBwcmVzY2FsZXIgICAqLworI2RlZmluZSAgIFRDVExfQ0xLU09VUkNFX1RJTgkgICAweDAwMDYJLyogVElOIHRvIHByZXNjYWxlciAgICAgICAgICovCisjZGVmaW5lICAgVENUTF9DTEtTT1VSQ0VfMzJLSFoJICAgMHgwMDA4CS8qIDMya0h6IGNsb2NrIHRvIHByZXNjYWxlciAqLworI2RlZmluZSBUQ1RMX0lSUUVOCQkweDAwMTAJLyogSVJRIEVuYWJsZSAgICAqLworI2RlZmluZSBUQ1RMX09NCQkJMHgwMDIwCS8qIE91dHB1dCBNb2RlICAgKi8KKyNkZWZpbmUgVENUTF9DQVBfTUFTSwkJMHgwMGMwCS8qIENhcHR1cmUgRWRnZTogKi8KKyNkZWZpbmUJICBUQ1RMX0NBUF9SRQkJMHgwMDQwCQkvKiBDYXB0dXJlIG9uIHJpemluZyBlZGdlICAgKi8KKyNkZWZpbmUgICBUQ1RMX0NBUF9GRQkJMHgwMDgwCQkvKiBDYXB0dXJlIG9uIGZhbGxpbmcgZWRnZSAgKi8KKyNkZWZpbmUgVENUTF9GUlIJCTB4MDAxMAkvKiBGcmVlLVJ1biBNb2RlICovCisKKy8qICczMjgtY29tcGF0aWJsZSBkZWZpbml0aW9ucyAqLworI2RlZmluZSBUQ1RMMV9BRERSCVRDVExfQUREUgorI2RlZmluZSBUQ1RMMQkJVENUTAorCisvKgorICogVGltZXIgUHJlc2NhbGVyIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgVFBSRVJfQUREUgkweGZmZmZmNjAyCisjZGVmaW5lIFRQUkVSCQlXT1JEX1JFRihUUFJFUl9BRERSKQorCisvKiAnMzI4LWNvbXBhdGlibGUgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgVFBSRVIxX0FERFIJVFBSRVJfQUREUgorI2RlZmluZSBUUFJFUjEJCVRQUkVSCisKKy8qCisgKiBUaW1lciBDb21wYXJlIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgVENNUF9BRERSCTB4ZmZmZmY2MDQKKyNkZWZpbmUgVENNUAkJV09SRF9SRUYoVENNUF9BRERSKQorCisvKiAnMzI4LWNvbXBhdGlibGUgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgVENNUDFfQUREUglUQ01QX0FERFIKKyNkZWZpbmUgVENNUDEJCVRDTVAKKworLyoKKyAqIFRpbWVyIENhcHR1cmUgcmVnaXN0ZXIKKyAqLworI2RlZmluZSBUQ1JfQUREUgkweGZmZmZmNjA2CisjZGVmaW5lIFRDUgkJV09SRF9SRUYoVENSX0FERFIpCisKKy8qICczMjgtY29tcGF0aWJsZSBkZWZpbml0aW9ucyAqLworI2RlZmluZSBUQ1IxX0FERFIJVENSX0FERFIKKyNkZWZpbmUgVENSMQkJVENSCisKKy8qCisgKiBUaW1lciBDb3VudGVyIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgVENOX0FERFIJMHhmZmZmZjYwOAorI2RlZmluZSBUQ04JCVdPUkRfUkVGKFRDTl9BRERSKQorCisvKiAnMzI4LWNvbXBhdGlibGUgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgVENOMV9BRERSCVRDTl9BRERSCisjZGVmaW5lIFRDTjEJCVRDTgorCisvKgorICogVGltZXIgU3RhdHVzIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgVFNUQVRfQUREUgkweGZmZmZmNjBhCisjZGVmaW5lIFRTVEFUCQlXT1JEX1JFRihUU1RBVF9BRERSKQorCisjZGVmaW5lIFRTVEFUX0NPTVAJMHgwMDAxCQkvKiBDb21wYXJlIEV2ZW50IG9jY3VycmVkICovCisjZGVmaW5lIFRTVEFUX0NBUFQJMHgwMDAxCQkvKiBDYXB0dXJlIEV2ZW50IG9jY3VycmVkICovCisKKy8qICczMjgtY29tcGF0aWJsZSBkZWZpbml0aW9ucyAqLworI2RlZmluZSBUU1RBVDFfQUREUglUU1RBVF9BRERSCisjZGVmaW5lIFRTVEFUMQkJVFNUQVQKKworLyoqKioqKioqKioKKyAqCisgKiAweEZGRkZGOHh4IC0tIFNlcmlhbCBQZXJpZmVyaWFsIEludGVyZmFjZSBNYXN0ZXIgKFNQSU0pCisgKgorICoqKioqKioqKiovCisKKy8qCisgKiBTUElNIERhdGEgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBTUElNREFUQV9BRERSCTB4ZmZmZmY4MDAKKyNkZWZpbmUgU1BJTURBVEEJV09SRF9SRUYoU1BJTURBVEFfQUREUikKKworLyoKKyAqIFNQSU0gQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBTUElNQ09OVF9BRERSCTB4ZmZmZmY4MDIKKyNkZWZpbmUgU1BJTUNPTlQJV09SRF9SRUYoU1BJTUNPTlRfQUREUikKKworI2RlZmluZSBTUElNQ09OVF9CSVRfQ09VTlRfTUFTSwkgMHgwMDBmCS8qIFRyYW5zZmVyIExlbmd0aCBpbiBCeXRlcyAqLworI2RlZmluZSBTUElNQ09OVF9CSVRfQ09VTlRfU0hJRlQgMAorI2RlZmluZSBTUElNQ09OVF9QT0wJCSAweDAwMTAJLyogU1BNQ0xLIFNpZ25lbCBQb2xhcml0eSAqLworI2RlZmluZQlTUElNQ09OVF9QSEEJCSAweDAwMjAJLyogQ2xvY2svRGF0YSBwaGFzZSByZWxhdGlvbnNoaXAgKi8KKyNkZWZpbmUgU1BJTUNPTlRfSVJRRU4JCSAweDAwNDAgLyogSVJRIEVuYWJsZSAqLworI2RlZmluZSBTUElNQ09OVF9JUlEJCSAweDAwODAJLyogSW50ZXJydXB0IFJlcXVlc3QgKi8KKyNkZWZpbmUgU1BJTUNPTlRfWENICQkgMHgwMTAwCS8qIEV4Y2hhbmdlICovCisjZGVmaW5lIFNQSU1DT05UX0VOQUJMRQkJIDB4MDIwMAkvKiBFbmFibGUgU1BJTSAqLworI2RlZmluZSBTUElNQ09OVF9EQVRBX1JBVEVfTUFTSwkgMHhlMDAwCS8qIFNQSU0gRGF0YSBSYXRlICovCisjZGVmaW5lIFNQSU1DT05UX0RBVEFfUkFURV9TSElGVCAxMworCisvKiAnMzI4LWNvbXBhdGlibGUgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU1BJTUNPTlRfU1BJTUlSUQlTUElNQ09OVF9JUlEKKyNkZWZpbmUgU1BJTUNPTlRfU1BJTUVOCQlTUElNQ09OVF9FTkFCTEUKKworLyoqKioqKioqKioKKyAqCisgKiAweEZGRkZGOXh4IC0tIFVBUlQKKyAqCisgKioqKioqKioqKi8KKworLyoKKyAqIFVBUlQgU3RhdHVzL0NvbnRyb2wgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBVU1RDTlRfQUREUgkweGZmZmZmOTAwCisjZGVmaW5lIFVTVENOVAkJV09SRF9SRUYoVVNUQ05UX0FERFIpCisKKyNkZWZpbmUgVVNUQ05UX1RYQUUJMHgwMDAxCS8qIFRyYW5zbWl0dGVyIEF2YWlsYWJsZSBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIFVTVENOVF9UWEhFCTB4MDAwMgkvKiBUcmFuc21pdHRlciBIYWxmIEVtcHR5IEVuYWJsZSAqLworI2RlZmluZSBVU1RDTlRfVFhFRQkweDAwMDQJLyogVHJhbnNtaXR0ZXIgRW1wdHkgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBVU1RDTlRfUlhSRQkweDAwMDgJLyogUmVjZWl2ZXIgUmVhZHkgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBVU1RDTlRfUlhIRQkweDAwMTAJLyogUmVjZWl2ZXIgSGFsZi1GdWxsIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgVVNUQ05UX1JYRkUJMHgwMDIwCS8qIFJlY2VpdmVyIEZ1bGwgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBVU1RDTlRfQ1RTRAkweDAwNDAJLyogQ1RTIERlbHRhIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgVVNUQ05UX09ERU4JMHgwMDgwCS8qIE9sZCBEYXRhIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgVVNUQ05UXzhfNwkweDAxMDAJLyogRWlnaHQgb3Igc2V2ZW4tYml0IHRyYW5zbWlzc2lvbiAqLworI2RlZmluZSBVU1RDTlRfU1RPUAkweDAyMDAJLyogU3RvcCBiaXQgdHJhbnNtaXNzaW9uICovCisjZGVmaW5lIFVTVENOVF9PREQJMHgwNDAwCS8qIE9kZCBQYXJpdHkgKi8KKyNkZWZpbmUJVVNUQ05UX1BFTgkweDA4MDAJLyogUGFyaXR5IEVuYWJsZSAqLworI2RlZmluZSBVU1RDTlRfQ0xLTQkweDEwMDAJLyogQ2xvY2sgTW9kZSBTZWxlY3QgKi8KKyNkZWZpbmUJVVNUQ05UX1RYRU4JMHgyMDAwCS8qIFRyYW5zbWl0dGVyIEVuYWJsZSAqLworI2RlZmluZSBVU1RDTlRfUlhFTgkweDQwMDAJLyogUmVjZWl2ZXIgRW5hYmxlICovCisjZGVmaW5lIFVTVENOVF9VRU4JMHg4MDAwCS8qIFVBUlQgRW5hYmxlICovCisKKy8qICczMjgtY29tcGF0aWJsZSBkZWZpbml0aW9ucyAqLworI2RlZmluZSBVU1RDTlRfVFhBVkFJTEVOCVVTVENOVF9UWEFFCisjZGVmaW5lIFVTVENOVF9UWEhBTEZFTgkJVVNUQ05UX1RYSEUKKyNkZWZpbmUgVVNUQ05UX1RYRU1QVFlFTglVU1RDTlRfVFhFRQorI2RlZmluZSBVU1RDTlRfUlhSRUFEWUVOCVVTVENOVF9SWFJFCisjZGVmaW5lIFVTVENOVF9SWEhBTEZFTgkJVVNUQ05UX1JYSEUKKyNkZWZpbmUgVVNUQ05UX1JYRlVMTEVOCQlVU1RDTlRfUlhGRQorI2RlZmluZSBVU1RDTlRfQ1RTREVMVEFFTglVU1RDTlRfQ1RTRAorI2RlZmluZSBVU1RDTlRfT0REX0VWRU4JCVVTVENOVF9PREQKKyNkZWZpbmUgVVNUQ05UX1BBUklUWUVOCQlVU1RDTlRfUEVOCisjZGVmaW5lIFVTVENOVF9DTEtNT0RFCQlVU1RDTlRfQ0xLTQorI2RlZmluZSBVU1RDTlRfVUFSVEVOCQlVU1RDTlRfVUVOCisKKy8qCisgKiBVQVJUIEJhdWQgQ29udHJvbCBSZWdpc3RlcgorICovCisjZGVmaW5lIFVCQVVEX0FERFIJMHhmZmZmZjkwMgorI2RlZmluZSBVQkFVRAkJV09SRF9SRUYoVUJBVURfQUREUikKKworI2RlZmluZSBVQkFVRF9QUkVTQ0FMRVJfTUFTSwkweDAwM2YJLyogQWN0dWFsIGRpdmlzb3IgaXMgNjUgLSBQUkVTQ0FMRVIgKi8KKyNkZWZpbmUgVUJBVURfUFJFU0NBTEVSX1NISUZUCTAKKyNkZWZpbmUgVUJBVURfRElWSURFX01BU0sJMHgwNzAwCS8qIEJhdWQgUmF0ZSBmcmVxLiBkaXZpem9yICovCisjZGVmaW5lIFVCQVVEX0RJVklERV9TSElGVAk4CisjZGVmaW5lIFVCQVVEX0JBVURfU1JDCQkweDA4MDAJLyogQmF1ZCBSYXRlIFNvdXJjZSAqLworI2RlZmluZSBVQkFVRF9VQ0xLRElSCQkweDIwMDAJLyogVUNMSyBEaXJlY3Rpb24gKi8KKworLyoKKyAqIFVBUlQgUmVjZWl2ZXIgUmVnaXN0ZXIgCisgKi8KKyNkZWZpbmUgVVJYX0FERFIJMHhmZmZmZjkwNAorI2RlZmluZSBVUlgJCVdPUkRfUkVGKFVSWF9BRERSKQorCisjZGVmaW5lIFVSWF9SWERBVEFfQUREUgkweGZmZmZmOTA1CisjZGVmaW5lIFVSWF9SWERBVEEJQllURV9SRUYoVVJYX1JYREFUQV9BRERSKQorCisjZGVmaW5lIFVSWF9SWERBVEFfTUFTSwkgMHgwMGZmCS8qIFJlY2VpdmVkIGRhdGEgKi8KKyNkZWZpbmUgVVJYX1JYREFUQV9TSElGVCAwCisjZGVmaW5lIFVSWF9QQVJJVFlfRVJST1IgMHgwMTAwCS8qIFBhcml0eSBFcnJvciAqLworI2RlZmluZSBVUlhfQlJFQUsJIDB4MDIwMAkvKiBCcmVhayBEZXRlY3RlZCAqLworI2RlZmluZSBVUlhfRlJBTUVfRVJST1IJIDB4MDQwMAkvKiBGcmFtaW5nIEVycm9yICovCisjZGVmaW5lIFVSWF9PVlJVTgkgMHgwODAwCS8qIFNlcmlhbCBPdmVycnVuICovCisjZGVmaW5lIFVSWF9PTERfREFUQQkgMHgxMDAwCS8qIE9sZCBkYXRhIGluIEZJRk8gKi8KKyNkZWZpbmUgVVJYX0RBVEFfUkVBRFkJIDB4MjAwMAkvKiBEYXRhIFJlYWR5IChGSUZPIG5vdCBlbXB0eSkgKi8KKyNkZWZpbmUgVVJYX0ZJRk9fSEFMRgkgMHg0MDAwIC8qIEZJRk8gaXMgSGFsZi1GdWxsICovCisjZGVmaW5lIFVSWF9GSUZPX0ZVTEwJIDB4ODAwMAkvKiBGSUZPIGlzIEZ1bGwgKi8KKworLyoKKyAqIFVBUlQgVHJhbnNtaXR0ZXIgUmVnaXN0ZXIgCisgKi8KKyNkZWZpbmUgVVRYX0FERFIJMHhmZmZmZjkwNgorI2RlZmluZSBVVFgJCVdPUkRfUkVGKFVUWF9BRERSKQorCisjZGVmaW5lIFVUWF9UWERBVEFfQUREUgkweGZmZmZmOTA3CisjZGVmaW5lIFVUWF9UWERBVEEJQllURV9SRUYoVVRYX1RYREFUQV9BRERSKQorCisjZGVmaW5lIFVUWF9UWERBVEFfTUFTSwkgMHgwMGZmCS8qIERhdGEgdG8gYmUgdHJhbnNtaXR0ZWQgKi8KKyNkZWZpbmUgVVRYX1RYREFUQV9TSElGVCAwCisjZGVmaW5lIFVUWF9DVFNfREVMVEEJIDB4MDEwMAkvKiBDVFMgY2hhbmdlZCAqLworI2RlZmluZSBVVFhfQ1RTX1NUQVQJIDB4MDIwMAkvKiBDVFMgU3RhdGUgKi8KKyNkZWZpbmUJVVRYX0JVU1kJIDB4MDQwMAkvKiBGSUZPIGlzIGJ1c3ksIHNlbmRpbmcgYSBjaGFyYWN0ZXIgKi8KKyNkZWZpbmUJVVRYX05PQ1RTCSAweDA4MDAJLyogSWdub3JlIENUUyAqLworI2RlZmluZSBVVFhfU0VORF9CUkVBSwkgMHgxMDAwCS8qIFNlbmQgYSBCUkVBSyAqLworI2RlZmluZSBVVFhfVFhfQVZBSUwJIDB4MjAwMAkvKiBUcmFuc21pdCBGSUZPIGhhcyBhIHNsb3QgYXZhaWxhYmxlICovCisjZGVmaW5lIFVUWF9GSUZPX0hBTEYJIDB4NDAwMAkvKiBUcmFuc21pdCBGSUZPIGlzIGhhbGYgZW1wdHkgKi8KKyNkZWZpbmUgVVRYX0ZJRk9fRU1QVFkJIDB4ODAwMAkvKiBUcmFuc21pdCBGSUZPIGlzIGVtcHR5ICovCisKKy8qICczMjgtY29tcGF0aWJsZSBkZWZpbml0aW9ucyAqLworI2RlZmluZSBVVFhfQ1RTX1NUQVRVUwlVVFhfQ1RTX1NUQVQKKyNkZWZpbmUgVVRYX0lHTk9SRV9DVFMJVVRYX05PQ1RTCisKKy8qCisgKiBVQVJUIE1pc2NlbGxhbmVvdXMgUmVnaXN0ZXIgCisgKi8KKyNkZWZpbmUgVU1JU0NfQUREUgkweGZmZmZmOTA4CisjZGVmaW5lIFVNSVNDCQlXT1JEX1JFRihVTUlTQ19BRERSKQorCisjZGVmaW5lIFVNSVNDX1RYX1BPTAkgMHgwMDA0CS8qIFRyYW5zbWl0IFBvbGFyaXR5ICovCisjZGVmaW5lIFVNSVNDX1JYX1BPTAkgMHgwMDA4CS8qIFJlY2VpdmUgUG9sYXJpdHkgKi8KKyNkZWZpbmUgVU1JU0NfSVJEQV9MT09QCSAweDAwMTAJLyogSXJEQSBMb29wYmFjayBFbmFibGUgKi8KKyNkZWZpbmUgVU1JU0NfSVJEQV9FTgkgMHgwMDIwCS8qIEluZnJhLVJlZCBFbmFibGUgKi8KKyNkZWZpbmUgVU1JU0NfUlRTCSAweDAwNDAJLyogU2V0IFJUUyBzdGF0dXMgKi8KKyNkZWZpbmUgVU1JU0NfUlRTQ09OVAkgMHgwMDgwCS8qIENob29zZSBSVFMgY29udHJvbCAqLworI2RlZmluZSBVTUlTQ19JUl9URVNUCSAweDA0MDAJLyogSVJEQSBUZXN0IEVuYWJsZSAqLworI2RlZmluZSBVTUlTQ19CQVVEX1JFU0VUIDB4MDgwMAkvKiBSZXNldCBCYXVkIFJhdGUgR2VuZXJhdGlvbiBDb3VudGVycyAqLworI2RlZmluZSBVTUlTQ19MT09QCSAweDEwMDAJLyogU2VyaWFsIExvb3BiYWNrIEVuYWJsZSAqLworI2RlZmluZSBVTUlTQ19GT1JDRV9QRVJSIDB4MjAwMAkvKiBGb3JjZSBQYXJpdHkgRXJyb3IgKi8KKyNkZWZpbmUgVU1JU0NfQ0xLU1JDCSAweDQwMDAJLyogQ2xvY2sgU291cmNlICovCisjZGVmaW5lIFVNSVNDX0JBVURfVEVTVAkgMHg4MDAwCS8qIEVuYWJsZSBCYXVkIFRlc3QgTW9kZSAqLworCisvKiAKKyAqIFVBUlQgTm9uLWludGVnZXIgUHJlc2NhbGVyIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgTklQUl9BRERSCTB4ZmZmZmY5MGEKKyNkZWZpbmUgTklQUgkJV09SRF9SRUYoTklQUl9BRERSKQorCisjZGVmaW5lIE5JUFJfU1RFUF9WQUxVRV9NQVNLCTB4MDBmZgkvKiBOSSBwcmVzY2FsZXIgc3RlcCB2YWx1ZSAqLworI2RlZmluZSBOSVBSX1NURVBfVkFMVUVfU0hJRlQJMAorI2RlZmluZSBOSVBSX1NFTEVDVF9NQVNLCTB4MDcwMAkvKiBUYXAgU2VsZWN0aW9uICovCisjZGVmaW5lIE5JUFJfU0VMRUNUX1NISUZUCTgKKyNkZWZpbmUgTklQUl9QUkVfU0VMCQkweDgwMDAJLyogTm9uLWludGVnZXIgcHJlc2NhbGVyIHNlbGVjdCAqLworCisKKy8qIGdlbmVyYWxpemF0aW9uIG9mIHVhcnQgY29udHJvbCByZWdpc3RlcnMgdG8gc3VwcG9ydCBtdWx0aXBsZSBwb3J0czogKi8KK3R5cGVkZWYgdm9sYXRpbGUgc3RydWN0IHsKKyAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IHVzdGNudDsKKyAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IHViYXVkOworICB1bmlvbiB7CisgICAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IHc7CisgICAgc3RydWN0IHsKKyAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgc3RhdHVzOworICAgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciByeGRhdGE7CisgICAgfSBiOworICB9IHVyeDsKKyAgdW5pb24geworICAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCB3OworICAgIHN0cnVjdCB7CisgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIHN0YXR1czsKKyAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgdHhkYXRhOworICAgIH0gYjsKKyAgfSB1dHg7CisgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCB1bWlzYzsKKyAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IG5pcHI7CisgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBwYWQxOworICB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgcGFkMjsKK30gbTY4MzI4X3VhcnQgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKworLyoqKioqKioqKioKKyAqCisgKiAweEZGRkZGQXh4IC0tIExDRCBDb250cm9sbGVyCisgKgorICoqKioqKioqKiovCisKKy8qCisgKiBMQ0QgU2NyZWVuIFN0YXJ0aW5nIEFkZHJlc3MgUmVnaXN0ZXIgCisgKi8KKyNkZWZpbmUgTFNTQV9BRERSCTB4ZmZmZmZhMDAKKyNkZWZpbmUgTFNTQQkJTE9OR19SRUYoTFNTQV9BRERSKQorCisjZGVmaW5lIExTU0FfU1NBX01BU0sJMHgxZmZmZmZmZQkvKiBCaXRzIDAgYW5kIDI5LTMxIGFyZSByZXNlcnZlZCAqLworCisvKgorICogTENEIFZpcnR1YWwgUGFnZSBXaWR0aCBSZWdpc3RlciAKKyAqLworI2RlZmluZSBMVlBXX0FERFIJMHhmZmZmZmEwNQorI2RlZmluZSBMVlBXCQlCWVRFX1JFRihMVlBXX0FERFIpCisKKy8qCisgKiBMQ0QgU2NyZWVuIFdpZHRoIFJlZ2lzdGVyIChub3QgY29tcGF0aWJsZSB3aXRoICczMjggISEhKSAKKyAqLworI2RlZmluZSBMWE1BWF9BRERSCTB4ZmZmZmZhMDgKKyNkZWZpbmUgTFhNQVgJCVdPUkRfUkVGKExYTUFYX0FERFIpCisKKyNkZWZpbmUgTFhNQVhfWE1fTUFTSwkweDAyZjAJCS8qIEJpdHMgMC0zIGFuZCAxMC0xNSBhcmUgcmVzZXJ2ZWQgKi8KKworLyoKKyAqIExDRCBTY3JlZW4gSGVpZ2h0IFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgTFlNQVhfQUREUgkweGZmZmZmYTBhCisjZGVmaW5lIExZTUFYCQlXT1JEX1JFRihMWU1BWF9BRERSKQorCisjZGVmaW5lIExZTUFYX1lNX01BU0sJMHgwMWZmCQkvKiBCaXRzIDktMTUgYXJlIHJlc2VydmVkICovCisKKy8qCisgKiBMQ0QgQ3Vyc29yIFggUG9zaXRpb24gUmVnaXN0ZXIKKyAqLworI2RlZmluZSBMQ1hQX0FERFIJMHhmZmZmZmExOAorI2RlZmluZSBMQ1hQCQlXT1JEX1JFRihMQ1hQX0FERFIpCisKKyNkZWZpbmUgTENYUF9DQ19NQVNLCTB4YzAwMAkJLyogQ3Vyc29yIENvbnRyb2wgKi8KKyNkZWZpbmUgICBMQ1hQX0NDX1RSQU1TUEFSRU5UCTB4MDAwMAorI2RlZmluZSAgIExDWFBfQ0NfQkxBQ0sJCTB4NDAwMAorI2RlZmluZSAgIExDWFBfQ0NfUkVWRVJTRUQJMHg4MDAwCisjZGVmaW5lICAgTENYUF9DQ19XSElURQkJMHhjMDAwCisjZGVmaW5lIExDWFBfQ1hQX01BU0sJMHgwMmZmCQkvKiBDdXJzb3IgWCBwb3NpdGlvbiAqLworCisvKgorICogTENEIEN1cnNvciBZIFBvc2l0aW9uIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgTENZUF9BRERSCTB4ZmZmZmZhMWEKKyNkZWZpbmUgTENZUAkJV09SRF9SRUYoTENZUF9BRERSKQorCisjZGVmaW5lIExDWVBfQ1lQX01BU0sJMHgwMWZmCQkvKiBDdXJzb3IgWSBQb3NpdGlvbiAqLworCisvKgorICogTENEIEN1cnNvciBXaWR0aCBhbmQgSGVpZ3RoIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgTENXQ0hfQUREUgkweGZmZmZmYTFjCisjZGVmaW5lIExDV0NICQlXT1JEX1JFRihMQ1dDSF9BRERSKQorCisjZGVmaW5lIExDV0NIX0NIX01BU0sJMHgwMDFmCQkvKiBDdXJzb3IgSGVpZ2h0ICovCisjZGVmaW5lIExDV0NIX0NIX1NISUZUCTAKKyNkZWZpbmUgTENXQ0hfQ1dfTUFTSwkweDFmMDAJCS8qIEN1cnNvciBXaWR0aCAqLworI2RlZmluZSBMQ1dDSF9DV19TSElGVAk4CisKKy8qCisgKiBMQ0QgQmxpbmsgQ29udHJvbCBSZWdpc3RlcgorICovCisjZGVmaW5lIExCTEtDX0FERFIJMHhmZmZmZmExZgorI2RlZmluZSBMQkxLQwkJQllURV9SRUYoTEJMS0NfQUREUikKKworI2RlZmluZSBMQkxLQ19CRF9NQVNLCTB4N2YJLyogQmxpbmsgRGl2aXNvciAqLworI2RlZmluZSBMQkxLQ19CRF9TSElGVAkwCisjZGVmaW5lIExCTEtDX0JLRU4JMHg4MAkvKiBCbGluayBFbmFibGVkICovCisKKy8qCisgKiBMQ0QgUGFuZWwgSW50ZXJmYWNlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgCisgKi8KKyNkZWZpbmUgTFBJQ0ZfQUREUgkweGZmZmZmYTIwCisjZGVmaW5lIExQSUNGCQlCWVRFX1JFRihMUElDRl9BRERSKQorCisjZGVmaW5lIExQSUNGX0dTX01BU0sJIDB4MDMJIC8qIEdyYXktU2NhbGUgTW9kZSAqLworI2RlZmluZQkgIExQSUNGX0dTX0JXCSAgIDB4MDAKKyNkZWZpbmUgICBMUElDRl9HU19HUkFZXzQgIDB4MDEKKyNkZWZpbmUgICBMUElDRl9HU19HUkFZXzE2IDB4MDIKKyNkZWZpbmUgTFBJQ0ZfUEJTSVpfTUFTSyAweDBjCS8qIFBhbmVsIEJ1cyBXaWR0aCAqLworI2RlZmluZSAgIExQSUNGX1BCU0laXzEJICAgMHgwMAorI2RlZmluZSAgIExQSUNGX1BCU0laXzIgICAgMHgwNAorI2RlZmluZSAgIExQSUNGX1BCU0laXzQgICAgMHgwOAorCisvKgorICogTENEIFBvbGFyaXR5IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgCisgKi8KKyNkZWZpbmUgTFBPTENGX0FERFIJMHhmZmZmZmEyMQorI2RlZmluZSBMUE9MQ0YJCUJZVEVfUkVGKExQT0xDRl9BRERSKQorCisjZGVmaW5lIExQT0xDRl9QSVhQT0wJMHgwMQkvKiBQaXhlbCBQb2xhcml0eSAqLworI2RlZmluZSBMUE9MQ0ZfTFBQT0wJMHgwMgkvKiBMaW5lIFB1bHNlIFBvbGFyaXR5ICovCisjZGVmaW5lIExQT0xDRl9GTE1QT0wJMHgwNAkvKiBGcmFtZSBNYXJrZXIgUG9sYXJpdHkgKi8KKyNkZWZpbmUgTFBPTENGX0xDS1BPTAkweDA4CS8qIExDRCBTaGlmdCBMb2NrIFBvbGFyaXR5ICovCisKKy8qCisgKiBMQUNEIChMQ0QgQWx0ZXJuYXRlIENyeXN0YWwgRGlyZWN0aW9uKSBSYXRlIENvbnRyb2wgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBMQUNEUkNfQUREUgkweGZmZmZmYTIzCisjZGVmaW5lIExBQ0RSQwkJQllURV9SRUYoTEFDRFJDX0FERFIpCisKKyNkZWZpbmUgTEFDRFJDX0FDRFNMVAkgMHg4MAkvKiBTaWduYWwgU291cmNlIFNlbGVjdCAqLworI2RlZmluZSBMQUNEUkNfQUNEX01BU0sJIDB4MGYJLyogQWx0ZXJuYXRlIENyeXN0YWwgRGlyZWN0aW9uIENvbnRyb2wgKi8KKyNkZWZpbmUgTEFDRFJDX0FDRF9TSElGVCAwCisKKy8qCisgKiBMQ0QgUGl4ZWwgQ2xvY2sgRGl2aWRlciBSZWdpc3RlcgorICovCisjZGVmaW5lIExQWENEX0FERFIJMHhmZmZmZmEyNQorI2RlZmluZSBMUFhDRAkJQllURV9SRUYoTFBYQ0RfQUREUikKKworI2RlZmluZQlMUFhDRF9QQ0RfTUFTSwkweDNmIAkvKiBQaXhlbCBDbG9jayBEaXZpZGVyICovCisjZGVmaW5lIExQWENEX1BDRF9TSElGVAkwCisKKy8qCisgKiBMQ0QgQ2xvY2tpbmcgQ29udHJvbCBSZWdpc3RlcgorICovCisjZGVmaW5lIExDS0NPTl9BRERSCTB4ZmZmZmZhMjcKKyNkZWZpbmUgTENLQ09OCQlCWVRFX1JFRihMQ0tDT05fQUREUikKKworI2RlZmluZSBMQ0tDT05fRFdTX01BU0sJIDB4MGYJLyogRGlzcGxheSBXYWl0LVN0YXRlICovCisjZGVmaW5lIExDS0NPTl9EV1NfU0hJRlQgMAorI2RlZmluZSBMQ0tDT05fRFdJRFRICSAweDQwCS8qIERpc3BsYXkgTWVtb3J5IFdpZHRoICAqLworI2RlZmluZSBMQ0tDT05fTENET04JIDB4ODAJLyogRW5hYmxlIExDRCBDb250cm9sbGVyICovCisKKy8qICczMjgtY29tcGF0aWJsZSBkZWZpbml0aW9ucyAqLworI2RlZmluZSBMQ0tDT05fRFdfTUFTSyAgTENLQ09OX0RXU19NQVNLCisjZGVmaW5lIExDS0NPTl9EV19TSElGVCBMQ0tDT05fRFdTX1NISUZUCisgCisvKgorICogTENEIFJlZnJlc2ggUmF0ZSBBZGp1c3RtZW50IFJlZ2lzdGVyIAorICovCisjZGVmaW5lIExSUkFfQUREUgkweGZmZmZmYTI5CisjZGVmaW5lIExSUkEJCUJZVEVfUkVGKExSUkFfQUREUikKKworLyoKKyAqIExDRCBQYW5uaW5nIE9mZnNldCBSZWdpc3RlcgorICovCisjZGVmaW5lIExQT1NSX0FERFIJMHhmZmZmZmEyZAorI2RlZmluZSBMUE9TUgkJQllURV9SRUYoTFBPU1JfQUREUikKKworI2RlZmluZSBMUE9TUl9QT1NfTUFTSwkweDBmCS8qIFBpeGVsIE9mZnNldCBDb2RlICovCisjZGVmaW5lIExQT1NSX1BPU19TSElGVAkwCisKKy8qCisgKiBMQ0QgRnJhbWUgUmF0ZSBDb250cm9sIE1vZHVsYXRpb24gUmVnaXN0ZXIKKyAqLworI2RlZmluZSBMRlJDTV9BRERSCTB4ZmZmZmZhMzEKKyNkZWZpbmUgTEZSQ00JCUJZVEVfUkVGKExGUkNNX0FERFIpCisKKyNkZWZpbmUgTEZSQ01fWU1PRF9NQVNLCSAweDBmCS8qIFZlcnRpY2FsIE1vZHVsYXRpb24gKi8KKyNkZWZpbmUgTEZSQ01fWU1PRF9TSElGVCAwCisjZGVmaW5lIExGUkNNX1hNT0RfTUFTSwkgMHhmMAkvKiBIb3Jpem9udGFsIE1vZHVsYXRpb24gKi8KKyNkZWZpbmUgTEZSQ01fWE1PRF9TSElGVCA0CisKKy8qCisgKiBMQ0QgR3JheSBQYWxldHRlIE1hcHBpbmcgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBMR1BNUl9BRERSCTB4ZmZmZmZhMzMKKyNkZWZpbmUgTEdQTVIJCUJZVEVfUkVGKExHUE1SX0FERFIpCisKKyNkZWZpbmUgTEdQTVJfRzFfTUFTSwkweDBmCisjZGVmaW5lIExHUE1SX0cxX1NISUZUCTAKKyNkZWZpbmUgTEdQTVJfRzJfTUFTSwkweGYwCisjZGVmaW5lIExHUE1SX0cyX1NISUZUCTQKKworLyogCisgKiBQV00gQ29udHJhc3QgQ29udHJvbCBSZWdpc3RlcgorICovCisjZGVmaW5lIFBXTVJfQUREUgkweGZmZmZmYTM2CisjZGVmaW5lIFBXTVIJCVdPUkRfUkVGKFBXTVJfQUREUikKKworI2RlZmluZSBQV01SX1BXX01BU0sJMHgwMGZmCS8qIFB1bHNlIFdpZHRoICovCisjZGVmaW5lIFBXTVJfUFdfU0hJRlQJMAorI2RlZmluZSBQV01SX0NDUEVOCTB4MDEwMAkvKiBDb250cmFzdCBDb250cm9sIEVuYWJsZSAqLworI2RlZmluZSBQV01SX1NSQ19NQVNLCTB4MDYwMAkvKiBJbnB1dCBDbG9jayBTb3VyY2UgKi8KKyNkZWZpbmUgICBQV01SX1NSQ19MSU5FCSAgMHgwMDAwCS8qIExpbmUgUHVsc2UgICovCisjZGVmaW5lICAgUFdNUl9TUkNfUElYRUwgIDB4MDIwMAkvKiBQaXhlbCBDbG9jayAqLworI2RlZmluZSAgIFBXTVJfU1JDX0xDRCAgICAweDQwMDAJLyogTENEIGNsb2NrICAgKi8KKworLyoqKioqKioqKioKKyAqCisgKiAweEZGRkZGQnh4IC0tIFJlYWwtVGltZSBDbG9jayAoUlRDKQorICoKKyAqKioqKioqKioqLworCisvKgorICogUlRDIEhvdXJzIE1pbnV0ZXMgYW5kIFNlY29uZHMgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBSVENUSU1FX0FERFIJMHhmZmZmZmIwMAorI2RlZmluZSBSVENUSU1FCQlMT05HX1JFRihSVENUSU1FX0FERFIpCisKKyNkZWZpbmUgUlRDVElNRV9TRUNPTkRTX01BU0sJMHgwMDAwMDAzZgkvKiBTZWNvbmRzICovCisjZGVmaW5lIFJUQ1RJTUVfU0VDT05EU19TSElGVAkwCisjZGVmaW5lIFJUQ1RJTUVfTUlOVVRFU19NQVNLCTB4MDAzZjAwMDAJLyogTWludXRlcyAqLworI2RlZmluZSBSVENUSU1FX01JTlVURVNfU0hJRlQJMTYKKyNkZWZpbmUgUlRDVElNRV9IT1VSU19NQVNLCTB4MWYwMDAwMDAJLyogSG91cnMgKi8KKyNkZWZpbmUgUlRDVElNRV9IT1VSU19TSElGVAkyNAorCisvKgorICogIFJUQyBBbGFybSBSZWdpc3RlciAKKyAqLworI2RlZmluZSBSVENBTFJNX0FERFIgICAgMHhmZmZmZmIwNAorI2RlZmluZSBSVENBTFJNICAgICAgICAgTE9OR19SRUYoUlRDQUxSTV9BRERSKQorCisjZGVmaW5lIFJUQ0FMUk1fU0VDT05EU19NQVNLICAgIDB4MDAwMDAwM2YgICAgICAvKiBTZWNvbmRzICovCisjZGVmaW5lIFJUQ0FMUk1fU0VDT05EU19TSElGVCAgIDAKKyNkZWZpbmUgUlRDQUxSTV9NSU5VVEVTX01BU0sgICAgMHgwMDNmMDAwMCAgICAgIC8qIE1pbnV0ZXMgKi8KKyNkZWZpbmUgUlRDQUxSTV9NSU5VVEVTX1NISUZUICAgMTYKKyNkZWZpbmUgUlRDQUxSTV9IT1VSU19NQVNLICAgICAgMHgxZjAwMDAwMCAgICAgIC8qIEhvdXJzICovCisjZGVmaW5lIFJUQ0FMUk1fSE9VUlNfU0hJRlQgICAgIDI0CisKKy8qCisgKiBXYXRjaGRvZyBUaW1lciBSZWdpc3RlciAKKyAqLworI2RlZmluZSBXQVRDSERPR19BRERSCTB4ZmZmZmZiMGEKKyNkZWZpbmUgV0FUQ0hET0cJV09SRF9SRUYoV0FUQ0hET0dfQUREUikKKworI2RlZmluZSBXQVRDSERPR19FTgkweDAwMDEJLyogV2F0Y2hkb2cgRW5hYmxlZCAqLworI2RlZmluZSBXQVRDSERPR19JU0VMCTB4MDAwMgkvKiBTZWxlY3QgdGhlIHdhdGNoZG9nIGludGVycnVwdCAqLworI2RlZmluZSBXQVRDSERPR19JTlRGCTB4MDA4MAkvKiBXYXRjaGRvZyBpbnRlcnJ1cHQgb2NjY3VyZWQgKi8KKyNkZWZpbmUgV0FUQ0hET0dfQ05UX01BU0sgIDB4MDMwMAkvKiBXYXRjaGRvZyBDb3VudGVyICovCisjZGVmaW5lIFdBVENIRE9HX0NOVF9TSElGVCA4CisKKy8qCisgKiBSVEMgQ29udHJvbCBSZWdpc3RlcgorICovCisjZGVmaW5lIFJUQ0NUTF9BRERSCTB4ZmZmZmZiMGMKKyNkZWZpbmUgUlRDQ1RMCQlXT1JEX1JFRihSVENDVExfQUREUikKKworI2RlZmluZSBSVENDVExfWFRMCTB4MDAyMAkvKiBDcnlzdGFsIFNlbGVjdGlvbiAqLworI2RlZmluZSBSVENDVExfRU4JMHgwMDgwCS8qIFJUQyBFbmFibGUgKi8KKworLyogJzMyOC1jb21wYXRpYmxlIGRlZmluaXRpb25zICovCisjZGVmaW5lIFJUQ0NUTF8zODQJUlRDQ1RMX1hUTAorI2RlZmluZSBSVENDVExfRU5BQkxFCVJUQ0NUTF9FTgorCisvKgorICogUlRDIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgCisgKi8KKyNkZWZpbmUgUlRDSVNSX0FERFIJMHhmZmZmZmIwZQorI2RlZmluZSBSVENJU1IJCVdPUkRfUkVGKFJUQ0lTUl9BRERSKQorCisjZGVmaW5lIFJUQ0lTUl9TVwkweDAwMDEJLyogU3RvcHdhdGNoIHRpbWVkIG91dCAqLworI2RlZmluZSBSVENJU1JfTUlOCTB4MDAwMgkvKiAxLW1pbnV0ZSBpbnRlcnJ1cHQgaGFzIG9jY3VycmVkICovCisjZGVmaW5lIFJUQ0lTUl9BTE0JMHgwMDA0CS8qIEFsYXJtIGludGVycnVwdCBoYXMgb2NjdXJyZWQgKi8KKyNkZWZpbmUgUlRDSVNSX0RBWQkweDAwMDgJLyogMjQtaG91ciByb2xsb3ZlciBpbnRlcnJ1cHQgaGFzIG9jY3VycmVkICovCisjZGVmaW5lIFJUQ0lTUl8xSFoJMHgwMDEwCS8qIDFIeiBpbnRlcnJ1cHQgaGFzIG9jY3VycmVkICovCisjZGVmaW5lIFJUQ0lTUl9IUgkweDAwMjAJLyogMS1ob3VyIGludGVycnVwdCBoYXMgb2NjdXJyZWQgKi8KKyNkZWZpbmUgUlRDSVNSX1NBTTAJMHgwMTAwCS8qICAgNEh6IC8gICA0LjY4NzVIeiBpbnRlcnJ1cHQgaGFzIG9jY3VycmVkICovIAorI2RlZmluZSBSVENJU1JfU0FNMQkweDAyMDAJLyogICA4SHogLyAgIDkuMzc1MEh6IGludGVycnVwdCBoYXMgb2NjdXJyZWQgKi8gCisjZGVmaW5lIFJUQ0lTUl9TQU0yCTB4MDQwMAkvKiAgMTZIeiAvICAxOC43NTAwSHogaW50ZXJydXB0IGhhcyBvY2N1cnJlZCAqLyAKKyNkZWZpbmUgUlRDSVNSX1NBTTMJMHgwODAwCS8qICAzMkh6IC8gIDM3LjUwMDBIeiBpbnRlcnJ1cHQgaGFzIG9jY3VycmVkICovIAorI2RlZmluZSBSVENJU1JfU0FNNAkweDEwMDAJLyogIDY0SHogLyAgNzUuMDAwMEh6IGludGVycnVwdCBoYXMgb2NjdXJyZWQgKi8gCisjZGVmaW5lIFJUQ0lTUl9TQU01CTB4MjAwMAkvKiAxMjhIeiAvIDE1MC4wMDAwSHogaW50ZXJydXB0IGhhcyBvY2N1cnJlZCAqLyAKKyNkZWZpbmUgUlRDSVNSX1NBTTYJMHg0MDAwCS8qIDI1Nkh6IC8gMzAwLjAwMDBIeiBpbnRlcnJ1cHQgaGFzIG9jY3VycmVkICovIAorI2RlZmluZSBSVENJU1JfU0FNNwkweDgwMDAJLyogNTEySHogLyA2MDAuMDAwMEh6IGludGVycnVwdCBoYXMgb2NjdXJyZWQgKi8gCisKKy8qCisgKiBSVEMgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlcgorICovCisjZGVmaW5lIFJUQ0lFTlJfQUREUgkweGZmZmZmYjEwCisjZGVmaW5lIFJUQ0lFTlIJCVdPUkRfUkVGKFJUQ0lFTlJfQUREUikKKworI2RlZmluZSBSVENJRU5SX1NXCTB4MDAwMQkvKiBTdG9wd2F0Y2ggaW50ZXJydXB0IGVuYWJsZSAqLworI2RlZmluZSBSVENJRU5SX01JTgkweDAwMDIJLyogMS1taW51dGUgaW50ZXJydXB0IGVuYWJsZSAqLworI2RlZmluZSBSVENJRU5SX0FMTQkweDAwMDQJLyogQWxhcm0gaW50ZXJydXB0IGVuYWJsZSAqLworI2RlZmluZSBSVENJRU5SX0RBWQkweDAwMDgJLyogMjQtaG91ciByb2xsb3ZlciBpbnRlcnJ1cHQgZW5hYmxlICovCisjZGVmaW5lIFJUQ0lFTlJfMUhaCTB4MDAxMAkvKiAxSHogaW50ZXJydXB0IGVuYWJsZSAqLworI2RlZmluZSBSVENJRU5SX0hSCTB4MDAyMAkvKiAxLWhvdXIgaW50ZXJydXB0IGVuYWJsZSAqLworI2RlZmluZSBSVENJRU5SX1NBTTAJMHgwMTAwCS8qICAgNEh6IC8gICA0LjY4NzVIeiBpbnRlcnJ1cHQgZW5hYmxlICovIAorI2RlZmluZSBSVENJRU5SX1NBTTEJMHgwMjAwCS8qICAgOEh6IC8gICA5LjM3NTBIeiBpbnRlcnJ1cHQgZW5hYmxlICovIAorI2RlZmluZSBSVENJRU5SX1NBTTIJMHgwNDAwCS8qICAxNkh6IC8gIDE4Ljc1MDBIeiBpbnRlcnJ1cHQgZW5hYmxlICovIAorI2RlZmluZSBSVENJRU5SX1NBTTMJMHgwODAwCS8qICAzMkh6IC8gIDM3LjUwMDBIeiBpbnRlcnJ1cHQgZW5hYmxlICovIAorI2RlZmluZSBSVENJRU5SX1NBTTQJMHgxMDAwCS8qICA2NEh6IC8gIDc1LjAwMDBIeiBpbnRlcnJ1cHQgZW5hYmxlICovIAorI2RlZmluZSBSVENJRU5SX1NBTTUJMHgyMDAwCS8qIDEyOEh6IC8gMTUwLjAwMDBIeiBpbnRlcnJ1cHQgZW5hYmxlICovIAorI2RlZmluZSBSVENJRU5SX1NBTTYJMHg0MDAwCS8qIDI1Nkh6IC8gMzAwLjAwMDBIeiBpbnRlcnJ1cHQgZW5hYmxlICovIAorI2RlZmluZSBSVENJRU5SX1NBTTcJMHg4MDAwCS8qIDUxMkh6IC8gNjAwLjAwMDBIeiBpbnRlcnJ1cHQgZW5hYmxlICovIAorCisvKiAKKyAqIFN0b3B3YXRjaCBNaW51dGVzIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgU1RQV0NIX0FERFIJMHhmZmZmZmIxMgorI2RlZmluZSBTVFBXQ0gJCVdPUkRfUkVGKFNUUFdDSCkKKworI2RlZmluZSBTVFBXQ0hfQ05UX01BU0sJIDB4MDAzZgkvKiBTdG9wd2F0Y2ggY291bnRkb3duIHZhbHVlICovCisjZGVmaW5lIFNQVFdDSF9DTlRfU0hJRlQgMAorCisvKgorICogUlRDIERheSBDb3VudCBSZWdpc3RlciAKKyAqLworI2RlZmluZSBEQVlSX0FERFIJMHhmZmZmZmIxYQorI2RlZmluZSBEQVlSCQlXT1JEX1JFRihEQVlSX0FERFIpCisKKyNkZWZpbmUgREFZUl9EQVlTX01BU0sJMHgxZmYJLyogRGF5IFNldHRpbmcgKi8KKyNkZWZpbmUgREFZUl9EQVlTX1NISUZUIDAKKworLyoKKyAqIFJUQyBEYXkgQWxhcm0gUmVnaXN0ZXIgCisgKi8KKyNkZWZpbmUgREFZQUxBUk1fQUREUgkweGZmZmZmYjFjCisjZGVmaW5lIERBWUFMQVJNCVdPUkRfUkVGKERBWUFMQVJNX0FERFIpCisKKyNkZWZpbmUgREFZQUxBUk1fREFZU0FMX01BU0sJMHgwMWZmCS8qIERheSBTZXR0aW5nIG9mIHRoZSBBbGFybSAqLworI2RlZmluZSBEQVlBTEFSTV9EQVlTQUxfU0hJRlQgCTAKKworLyoqKioqKioqKioKKyAqCisgKiAweEZGRkZGQ3h4IC0tIERSQU0gQ29udHJvbGxlcgorICoKKyAqKioqKioqKioqLworCisvKgorICogRFJBTSBNZW1vcnkgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAKKyAqLworI2RlZmluZSBEUkFNTUNfQUREUgkweGZmZmZmYzAwCisjZGVmaW5lIERSQU1NQwkJV09SRF9SRUYoRFJBTU1DX0FERFIpCisKKyNkZWZpbmUgRFJBTU1DX1JPVzEyX01BU0sJMHhjMDAwCS8qIFJvdyBhZGRyZXNzIGJpdCBmb3IgTUQxMiAqLworI2RlZmluZSAgIERSQU1NQ19ST1cxMl9QQTEwCTB4MDAwMAorI2RlZmluZSAgIERSQU1NQ19ST1cxMl9QQTIxCTB4NDAwMAkKKyNkZWZpbmUgICBEUkFNTUNfUk9XMTJfUEEyMwkweDgwMDAKKyNkZWZpbmUJRFJBTU1DX1JPVzBfTUFTSwkweDMwMDAJLyogUm93IGFkZHJlc3MgYml0IGZvciBNRDAgKi8KKyNkZWZpbmUJICBEUkFNTUNfUk9XMF9QQTExCTB4MDAwMAorI2RlZmluZSAgIERSQU1NQ19ST1cwX1BBMjIJMHgxMDAwCisjZGVmaW5lICAgRFJBTU1DX1JPVzBfUEEyMwkweDIwMDAKKyNkZWZpbmUgRFJBTU1DX1JPVzExCQkweDA4MDAJLyogUm93IGFkZHJlc3MgYml0IGZvciBNRDExIFBBMjAvUEEyMiAqLworI2RlZmluZSBEUkFNTUNfUk9XMTAJCTB4MDQwMAkvKiBSb3cgYWRkcmVzcyBiaXQgZm9yIE1EMTAgUEExOS9QQTIxICovCisjZGVmaW5lCURSQU1NQ19ST1c5CQkweDAyMDAJLyogUm93IGFkZHJlc3MgYml0IGZvciBNRDkgIFBBOS9QQTE5ICAqLworI2RlZmluZSBEUkFNTUNfUk9XOAkJMHgwMTAwCS8qIFJvdyBhZGRyZXNzIGJpdCBmb3IgTUQ4ICBQQTEwL1BBMjAgKi8KKyNkZWZpbmUgRFJBTU1DX0NPTDEwCQkweDAwODAJLyogQ29sIGFkZHJlc3MgYml0IGZvciBNRDEwIFBBMTEvUEEwICAqLworI2RlZmluZSBEUkFNTUNfQ09MOQkJMHgwMDQwCS8qIENvbCBhZGRyZXNzIGJpdCBmb3IgTUQ5ICBQQTEwL1BBMCAgKi8KKyNkZWZpbmUgRFJBTU1DX0NPTDgJCTB4MDAyMAkvKiBDb2wgYWRkcmVzcyBiaXQgZm9yIE1EOCAgUEE5L1BBMCAgICovCisjZGVmaW5lIERSQU1NQ19SRUZfTUFTSwkJMHgwMDFmCS8qIFJlcmVzaCBDeWNsZSAqLworI2RlZmluZSBEUkFNTUNfUkVGX1NISUZUCTAKKworLyoKKyAqIERSQU0gQ29udHJvbCBSZWdpc3RlcgorICovCisjZGVmaW5lIERSQU1DX0FERFIJMHhmZmZmZmMwMgorI2RlZmluZSBEUkFNQwkJV09SRF9SRUYoRFJBTUNfQUREUikKKworI2RlZmluZSBEUkFNQ19EV0UJICAgMHgwMDAxCS8qIERSQU0gV3JpdGUgRW5hYmxlICovCisjZGVmaW5lIERSQU1DX1JTVAkgICAweDAwMDIJLyogUmVzZXQgQnVyc3QgUmVmcmVzaCBFbmFibGUgKi8KKyNkZWZpbmUgRFJBTUNfTFBSCSAgIDB4MDAwNAkvKiBMb3ctUG93ZXIgUmVmcmVzaCBFbmFibGUgKi8KKyNkZWZpbmUgRFJBTUNfU0xXCSAgIDB4MDAwOAkvKiBTbG93IFJBTSAqLworI2RlZmluZSBEUkFNQ19MU1AJICAgMHgwMDEwCS8qIExpZ2h0IFNsZWVwICovCisjZGVmaW5lIERSQU1DX01TVwkgICAweDAwMjAJLyogU2xvdyBNdWx0aXBsZXhpbmcgKi8KKyNkZWZpbmUgRFJBTUNfV1NfTUFTSwkgICAweDAwYzAJLyogV2FpdC1zdGF0ZXMgKi8KKyNkZWZpbmUgRFJBTUNfV1NfU0hJRlQJICAgNgorI2RlZmluZSBEUkFNQ19QR1NaX01BU0sgICAgMHgwMzAwCS8qIFBhZ2UgU2l6ZSBmb3IgZmFzdCBwYWdlIG1vZGUgKi8KKyNkZWZpbmUgRFJBTUNfUEdTWl9TSElGVCAgIDgKKyNkZWZpbmUgICBEUkFNQ19QR1NaXzI1NksgIDB4MDAwMAkKKyNkZWZpbmUgICBEUkFNQ19QR1NaXzUxMksgIDB4MDEwMAorI2RlZmluZSAgIERSQU1DX1BHU1pfMTAyNEsgMHgwMjAwCisjZGVmaW5lCSAgRFJBTUNfUEdTWl8yMDQ4SyAweDAzMDAKKyNkZWZpbmUgRFJBTUNfRURPCSAgIDB4MDQwMAkvKiBFRE8gRFJBTSAqLworI2RlZmluZSBEUkFNQ19DTEsJICAgMHgwODAwCS8qIFJlZnJlc2ggVGltZXIgQ2xvY2sgc291cmNlIHNlbGVjdCAqLworI2RlZmluZSBEUkFNQ19CQ19NQVNLCSAgIDB4MzAwMAkvKiBQYWdlIEFjY2VzcyBDbG9jayBDeWNsZSAoRlAgbW9kZSkgKi8KKyNkZWZpbmUgRFJBTUNfQkNfU0hJRlQJICAgMTIKKyNkZWZpbmUgRFJBTUNfUk0JICAgMHg0MDAwCS8qIFJlZnJlc2ggTW9kZSAqLworI2RlZmluZSBEUkFNQ19FTgkgICAweDgwMDAJLyogRFJBTSBDb250cm9sbGVyIGVuYWJsZSAqLworCisKKy8qKioqKioqKioqCisgKgorICogMHhGRkZGRkR4eCAtLSBJbi1DaXJjdWl0IEVtdWxhdGlvbiAoSUNFKQorICoKKyAqKioqKioqKioqLworCisvKgorICogSUNFIE1vZHVsZSBBZGRyZXNzIENvbXBhcmUgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBJQ0VNQUNSX0FERFIJMHhmZmZmZmQwMAorI2RlZmluZSBJQ0VNQUNSCQlMT05HX1JFRihJQ0VNQUNSX0FERFIpCisKKy8qCisgKiBJQ0UgTW9kdWxlIEFkZHJlc3MgTWFzayBSZWdpc3RlcgorICovCisjZGVmaW5lIElDRU1BTVJfQUREUgkweGZmZmZmZDA0CisjZGVmaW5lIElDRU1BTVIJCUxPTkdfUkVGKElDRU1BTVJfQUREUikKKworLyoKKyAqIElDRSBNb2R1bGUgQ29udHJvbCBDb21wYXJlIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgSUNFTUNDUl9BRERSCTB4ZmZmZmZkMDgKKyNkZWZpbmUgSUNFTUNDUgkJV09SRF9SRUYoSUNFTUNDUl9BRERSKQorCisjZGVmaW5lIElDRU1DQ1JfUEQJMHgwMDAxCS8qIFByb2dyYW0vRGF0YSBDeWNsZSBTZWxlY3Rpb24gKi8KKyNkZWZpbmUgSUNFTUNDUl9SVwkweDAwMDIJLyogUmVhZC9Xcml0ZSBDeWNsZSBTZWxlY3Rpb24gKi8KKworLyoKKyAqIElDRSBNb2R1bGUgQ29udHJvbCBNYXNrIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgSUNFTUNNUl9BRERSCTB4ZmZmZmZkMGEKKyNkZWZpbmUgSUNFTUNNUgkJV09SRF9SRUYoSUNFTUNNUl9BRERSKQorCisjZGVmaW5lIElDRU1DTVJfUERNCTB4MDAwMQkvKiBQcm9ncmFtL0RhdGEgQ3ljbGUgTWFzayAqLworI2RlZmluZSBJQ0VNQ01SX1JXTQkweDAwMDIJLyogUmVhZC9Xcml0ZSBDeWNsZSBNYXNrICovCisKKy8qCisgKiBJQ0UgTW9kdWxlIENvbnRyb2wgUmVnaXN0ZXIgCisgKi8KKyNkZWZpbmUgSUNFTUNSX0FERFIJMHhmZmZmZmQwYworI2RlZmluZSBJQ0VNQ1IJCVdPUkRfUkVGKElDRU1DUl9BRERSKQorCisjZGVmaW5lIElDRU1DUl9DRU4JMHgwMDAxCS8qIENvbXBhcmUgRW5hYmxlICovCisjZGVmaW5lIElDRU1DUl9QQkVOCTB4MDAwMgkvKiBQcm9ncmFtIEJyZWFrIEVuYWJsZSAqLworI2RlZmluZSBJQ0VNQ1JfU0IJMHgwMDA0CS8qIFNpbmdsZSBCcmVha3BvaW50ICovCisjZGVmaW5lIElDRU1DUl9ITURJUwkweDAwMDgJLyogSGFyZE1hcCBkaXNhYmxlICovCisjZGVmaW5lIElDRU1DUl9CQklFTgkweDAwMTAJLyogQnVzIEJyZWFrIEludGVycnVwdCBFbmFibGUgKi8KKworLyoKKyAqIElDRSBNb2R1bGUgU3RhdHVzIFJlZ2lzdGVyIAorICovCisjZGVmaW5lIElDRU1TUl9BRERSCTB4ZmZmZmZkMGUKKyNkZWZpbmUgSUNFTVNSCQlXT1JEX1JFRihJQ0VNU1JfQUREUikKKworI2RlZmluZSBJQ0VNU1JfRU1VRU4JMHgwMDAxCS8qIEVtdWxhdGlvbiBFbmFibGUgKi8KKyNkZWZpbmUgSUNFTVNSX0JSS0lSUQkweDAwMDIJLyogQS1MaW5lIFZlY3RvciBGZXRjaCBEZXRlY3RlZCAqLworI2RlZmluZSBJQ0VNU1JfQkJJUlEJMHgwMDA0CS8qIEJ1cyBCcmVhayBJbnRlcnJ1cHQgRGV0ZWN0ZWQgKi8KKyNkZWZpbmUgSUNFTVNSX0VNSVJRCTB4MDAwOAkvKiBFTVVJUlEgRmFsbGluZyBFZGdlIERldGVjdGVkICovCisKKyNlbmRpZiAvKiBfTUM2OEVaMzI4X0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvTUM2OFZaMzI4LmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvTUM2OFZaMzI4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY3NDMyMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9NQzY4VlozMjguaApAQCAtMCwwICsxLDEzNDkgQEAKKworLyogaW5jbHVkZS9hc20tbTY4a25vbW11L01DNjhWWjMyOC5oOiAnVlozMjggY29udHJvbCByZWdpc3RlcnMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwMQlMaW5lbyBJbmMuIDx3d3cubGluZW8uY29tPgorICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDEJTGluZW8gQ2FuYWRhIENvcnAuIDx3d3cubGluZW8uY2E+CisgKiBDb3B5cmlnaHQgKEMpIDE5OTkJCVZsYWRpbWlyIEd1cmV2aWNoIDx2Z3VyZXZpY0BjaXNjby5jb20+CisgKiAJCQkJQmFyZSAmIEhhcmUgU29mdHdhcmUsIEluYy4KKyAqIEJhc2VkIG9uIGluY2x1ZGUvYXNtLW02OGtub21tdS9NQzY4MzMyLmgKKyAqIENvcHlyaWdodCAoQykgMTk5OCAgS2VubmV0aCBBbGJhbm93c2tpIDxramFoZHNAa2phaGRzLmNvbT4sCisgKiAgICAgICAgICAgICAgICAgICAgIFRoZSBTaWx2ZXIgSGFtbWVyIEdyb3VwLCBMdGQuCisgKgorICogTTY4VlozMjggZml4ZXMgYnkgRXZhbiBTdGF3bnljenkgPGV2YW5AbGluZW8uY29tPgorICogdnogbXVsdGlwb3J0IGZpeGVzIGJ5IE1pY2hhZWwgTGVzbGllIDxtbGVzbGllQGxpbmVvLmNvbT4KKyAqLworCisjaWZuZGVmIF9NQzY4VlozMjhfSF8KKyNkZWZpbmUgX01DNjhWWjMyOF9IXworCisjZGVmaW5lIEJZVEVfUkVGKGFkZHIpICgqKCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyKilhZGRyKSkKKyNkZWZpbmUgV09SRF9SRUYoYWRkcikgKCooKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0KilhZGRyKSkKKyNkZWZpbmUgTE9OR19SRUYoYWRkcikgKCooKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcqKWFkZHIpKQorCisjZGVmaW5lIFBVVF9GSUVMRChmaWVsZCwgdmFsKSAoKCh2YWwpIDw8IGZpZWxkIyNfU0hJRlQpICYgZmllbGQjI19NQVNLKQorI2RlZmluZSBHRVRfRklFTEQocmVnLCBmaWVsZCkgKCgocmVnKSAmIGZpZWxkIyNfTUFTSykgPj4gZmllbGQjI19TSElGVCkKKworLyoqKioqKioqKiogCisgKgorICogMHhGRkZGRjB4eCAtLSBTeXN0ZW0gQ29udHJvbAorICoKKyAqKioqKioqKioqLworIAorLyoKKyAqIFN5c3RlbSBDb250cm9sIFJlZ2lzdGVyIChTQ1IpCisgKi8KKyNkZWZpbmUgU0NSX0FERFIJMHhmZmZmZjAwMAorI2RlZmluZSBTQ1IJCUJZVEVfUkVGKFNDUl9BRERSKQorCisjZGVmaW5lIFNDUl9XRFRIOAkweDAxCS8qIDgtQml0IFdpZHRoIFNlbGVjdCAqLworI2RlZmluZSBTQ1JfRE1BUAkweDA0CS8qIERvdWJsZSBNYXAgKi8KKyNkZWZpbmUgU0NSX1NPCQkweDA4CS8qIFN1cGVydmlzb3IgT25seSAqLworI2RlZmluZSBTQ1JfQkVURU4JMHgxMAkvKiBCdXMtRXJyb3IgVGltZS1PdXQgRW5hYmxlICovCisjZGVmaW5lIFNDUl9QUlYJCTB4MjAJLyogUHJpdmlsZWdlIFZpb2xhdGlvbiAqLworI2RlZmluZSBTQ1JfV1BWCQkweDQwCS8qIFdyaXRlIFByb3RlY3QgVmlvbGF0aW9uICovCisjZGVmaW5lIFNDUl9CRVRPCTB4ODAJLyogQnVzLUVycm9yIFRpbWVPdXQgKi8KKworLyoKKyAqIFNpbGljb24gSUQgUmVnaXN0ZXIgKE1hc2sgUmV2aXNpb24gUmVnaXN0ZXIgKE1SUikgZm9yICczMjggQ29tcGF0aWJpbGl0eSkKKyAqLworI2RlZmluZSBNUlJfQUREUiAweGZmZmZmMDA0CisjZGVmaW5lIE1SUgkgTE9OR19SRUYoTVJSX0FERFIpCisKKy8qKioqKioqKioqIAorICoKKyAqIDB4RkZGRkYxeHggLS0gQ2hpcC1TZWxlY3QgbG9naWMKKyAqCisgKioqKioqKioqKi8KKyAKKy8qCisgKiBDaGlwIFNlbGVjdCBHcm91cCBCYXNlIFJlZ2lzdGVycyAKKyAqLworI2RlZmluZSBDU0dCQV9BRERSCTB4ZmZmZmYxMDAKKyNkZWZpbmUgQ1NHQkJfQUREUgkweGZmZmZmMTAyCisKKyNkZWZpbmUgQ1NHQkNfQUREUgkweGZmZmZmMTA0CisjZGVmaW5lIENTR0JEX0FERFIJMHhmZmZmZjEwNgorCisjZGVmaW5lIENTR0JBCQlXT1JEX1JFRihDU0dCQV9BRERSKQorI2RlZmluZSBDU0dCQgkJV09SRF9SRUYoQ1NHQkJfQUREUikKKyNkZWZpbmUgQ1NHQkMJCVdPUkRfUkVGKENTR0JDX0FERFIpCisjZGVmaW5lIENTR0JECQlXT1JEX1JFRihDU0dCRF9BRERSKQorCisvKgorICogQ2hpcCBTZWxlY3QgUmVnaXN0ZXJzIAorICovCisjZGVmaW5lIENTQV9BRERSCTB4ZmZmZmYxMTAKKyNkZWZpbmUgQ1NCX0FERFIJMHhmZmZmZjExMgorI2RlZmluZSBDU0NfQUREUgkweGZmZmZmMTE0CisjZGVmaW5lIENTRF9BRERSCTB4ZmZmZmYxMTYKKworI2RlZmluZSBDU0EJCVdPUkRfUkVGKENTQV9BRERSKQorI2RlZmluZSBDU0IJCVdPUkRfUkVGKENTQl9BRERSKQorI2RlZmluZSBDU0MJCVdPUkRfUkVGKENTQ19BRERSKQorI2RlZmluZSBDU0QJCVdPUkRfUkVGKENTRF9BRERSKQorCisjZGVmaW5lIENTQV9FTgkJMHgwMDAxCQkvKiBDaGlwLVNlbGVjdCBFbmFibGUgKi8KKyNkZWZpbmUgQ1NBX1NJWl9NQVNLCTB4MDAwZQkJLyogQ2hpcC1TZWxlY3QgU2l6ZSAqLworI2RlZmluZSBDU0FfU0laX1NISUZUICAgMQorI2RlZmluZSBDU0FfV1NfTUFTSwkweDAwNzAJCS8qIFdhaXQgU3RhdGUgKi8KKyNkZWZpbmUgQ1NBX1dTX1NISUZUICAgIDQKKyNkZWZpbmUgQ1NBX0JTVwkJMHgwMDgwCQkvKiBEYXRhIEJ1cyBXaWR0aCAqLworI2RlZmluZSBDU0FfRkxBU0gJMHgwMTAwCQkvKiBGTEFTSCBNZW1vcnkgU3VwcG9ydCAqLworI2RlZmluZSBDU0FfUk8JCTB4ODAwMAkJLyogUmVhZC1Pbmx5ICovCisKKyNkZWZpbmUgQ1NCX0VOCQkweDAwMDEJCS8qIENoaXAtU2VsZWN0IEVuYWJsZSAqLworI2RlZmluZSBDU0JfU0laX01BU0sJMHgwMDBlCQkvKiBDaGlwLVNlbGVjdCBTaXplICovCisjZGVmaW5lIENTQl9TSVpfU0hJRlQgICAxCisjZGVmaW5lIENTQl9XU19NQVNLCTB4MDA3MAkJLyogV2FpdCBTdGF0ZSAqLworI2RlZmluZSBDU0JfV1NfU0hJRlQgICAgNAorI2RlZmluZSBDU0JfQlNXCQkweDAwODAJCS8qIERhdGEgQnVzIFdpZHRoICovCisjZGVmaW5lIENTQl9GTEFTSAkweDAxMDAJCS8qIEZMQVNIIE1lbW9yeSBTdXBwb3J0ICovCisjZGVmaW5lIENTQl9VUFNJWl9NQVNLCTB4MTgwMAkJLyogVW5wcm90ZWN0ZWQgbWVtb3J5IGJsb2NrIHNpemUgKi8KKyNkZWZpbmUgQ1NCX1VQU0laX1NISUZUIDExCisjZGVmaW5lIENTQl9ST1AJCTB4MjAwMAkJLyogUmVhZG9ubHkgaWYgcHJvdGVjdGVkICovCisjZGVmaW5lIENTQl9TT1AJCTB4NDAwMAkJLyogU3VwZXJ2aXNvciBvbmx5IGlmIHByb3RlY3RlZCAqLworI2RlZmluZSBDU0JfUk8JCTB4ODAwMAkJLyogUmVhZC1Pbmx5ICovCisKKyNkZWZpbmUgQ1NDX0VOCQkweDAwMDEJCS8qIENoaXAtU2VsZWN0IEVuYWJsZSAqLworI2RlZmluZSBDU0NfU0laX01BU0sJMHgwMDBlCQkvKiBDaGlwLVNlbGVjdCBTaXplICovCisjZGVmaW5lIENTQ19TSVpfU0hJRlQgICAxCisjZGVmaW5lIENTQ19XU19NQVNLCTB4MDA3MAkJLyogV2FpdCBTdGF0ZSAqLworI2RlZmluZSBDU0NfV1NfU0hJRlQgICAgNAorI2RlZmluZSBDU0NfQlNXCQkweDAwODAJCS8qIERhdGEgQnVzIFdpZHRoICovCisjZGVmaW5lIENTQ19GTEFTSAkweDAxMDAJCS8qIEZMQVNIIE1lbW9yeSBTdXBwb3J0ICovCisjZGVmaW5lIENTQ19VUFNJWl9NQVNLCTB4MTgwMAkJLyogVW5wcm90ZWN0ZWQgbWVtb3J5IGJsb2NrIHNpemUgKi8KKyNkZWZpbmUgQ1NDX1VQU0laX1NISUZUIDExCisjZGVmaW5lIENTQ19ST1AJCTB4MjAwMAkJLyogUmVhZG9ubHkgaWYgcHJvdGVjdGVkICovCisjZGVmaW5lIENTQ19TT1AJCTB4NDAwMAkJLyogU3VwZXJ2aXNvciBvbmx5IGlmIHByb3RlY3RlZCAqLworI2RlZmluZSBDU0NfUk8JCTB4ODAwMAkJLyogUmVhZC1Pbmx5ICovCisKKyNkZWZpbmUgQ1NEX0VOCQkweDAwMDEJCS8qIENoaXAtU2VsZWN0IEVuYWJsZSAqLworI2RlZmluZSBDU0RfU0laX01BU0sJMHgwMDBlCQkvKiBDaGlwLVNlbGVjdCBTaXplICovCisjZGVmaW5lIENTRF9TSVpfU0hJRlQgICAxCisjZGVmaW5lIENTRF9XU19NQVNLCTB4MDA3MAkJLyogV2FpdCBTdGF0ZSAqLworI2RlZmluZSBDU0RfV1NfU0hJRlQgICAgNAorI2RlZmluZSBDU0RfQlNXCQkweDAwODAJCS8qIERhdGEgQnVzIFdpZHRoICovCisjZGVmaW5lIENTRF9GTEFTSAkweDAxMDAJCS8qIEZMQVNIIE1lbW9yeSBTdXBwb3J0ICovCisjZGVmaW5lIENTRF9EUkFNCTB4MDIwMAkJLyogRHJhbSBTZWxlY3Rpb24gKi8KKyNkZWZpbmUJQ1NEX0NPTUIJMHgwNDAwCQkvKiBDb21iaW5pbmcgKi8KKyNkZWZpbmUgQ1NEX1VQU0laX01BU0sJMHgxODAwCQkvKiBVbnByb3RlY3RlZCBtZW1vcnkgYmxvY2sgc2l6ZSAqLworI2RlZmluZSBDU0RfVVBTSVpfU0hJRlQgMTEKKyNkZWZpbmUgQ1NEX1JPUAkJMHgyMDAwCQkvKiBSZWFkb25seSBpZiBwcm90ZWN0ZWQgKi8KKyNkZWZpbmUgQ1NEX1NPUAkJMHg0MDAwCQkvKiBTdXBlcnZpc29yIG9ubHkgaWYgcHJvdGVjdGVkICovCisjZGVmaW5lIENTRF9STwkJMHg4MDAwCQkvKiBSZWFkLU9ubHkgKi8KKworLyoKKyAqIEVtdWxhdGlvbiBDaGlwLVNlbGVjdCBSZWdpc3RlciAKKyAqLworI2RlZmluZSBFTVVDU19BRERSCTB4ZmZmZmYxMTgKKyNkZWZpbmUgRU1VQ1MJCVdPUkRfUkVGKEVNVUNTX0FERFIpCisKKyNkZWZpbmUgRU1VQ1NfV1NfTUFTSwkweDAwNzAKKyNkZWZpbmUgRU1VQ1NfV1NfU0hJRlQJNAorCisvKioqKioqKioqKiAKKyAqCisgKiAweEZGRkZGMnh4IC0tIFBoYXNlIExvY2tlZCBMb29wIChQTEwpICYgUG93ZXIgQ29udHJvbAorICoKKyAqKioqKioqKioqLworCisvKgorICogUExMIENvbnRyb2wgUmVnaXN0ZXIgCisgKi8KKyNkZWZpbmUgUExMQ1JfQUREUgkweGZmZmZmMjAwCisjZGVmaW5lIFBMTENSCQlXT1JEX1JFRihQTExDUl9BRERSKQorCisjZGVmaW5lIFBMTENSX0RJU1BMTAkgICAgICAgMHgwMDA4CS8qIERpc2FibGUgUExMICovCisjZGVmaW5lIFBMTENSX0NMS0VOCSAgICAgICAweDAwMTAJLyogQ2xvY2sgKENMS08gcGluKSBlbmFibGUgKi8KKyNkZWZpbmUgUExMQ1JfUFJFU0MJICAgICAgIDB4MDAyMAkvKiBWQ08gcHJlc2NhbGVyICovCisjZGVmaW5lIFBMTENSX1NZU0NMS19TRUxfTUFTSyAgMHgwNzAwCS8qIFN5c3RlbSBDbG9jayBTZWxlY3Rpb24gKi8KKyNkZWZpbmUgUExMQ1JfU1lTQ0xLX1NFTF9TSElGVCA4CisjZGVmaW5lIFBMTENSX0xDRENMS19TRUxfTUFTSyAgMHgzODAwCS8qIExDRCBDbG9jayBTZWxlY3Rpb24gKi8KKyNkZWZpbmUgUExMQ1JfTENEQ0xLX1NFTF9TSElGVCAxMQorCisvKiAnMzI4LWNvbXBhdGlibGUgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgUExMQ1JfUElYQ0xLX1NFTF9NQVNLCVBMTENSX0xDRENMS19TRUxfTUFTSworI2RlZmluZSBQTExDUl9QSVhDTEtfU0VMX1NISUZUCVBMTENSX0xDRENMS19TRUxfU0hJRlQKKworLyoKKyAqIFBMTCBGcmVxdWVuY3kgU2VsZWN0IFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgUExMRlNSX0FERFIJMHhmZmZmZjIwMgorI2RlZmluZSBQTExGU1IJCVdPUkRfUkVGKFBMTEZTUl9BRERSKQorCisjZGVmaW5lIFBMTEZTUl9QQ19NQVNLCTB4MDBmZgkJLyogUCBDb3VudCAqLworI2RlZmluZSBQTExGU1JfUENfU0hJRlQgMAorI2RlZmluZSBQTExGU1JfUUNfTUFTSwkweDBmMDAJCS8qIFEgQ291bnQgKi8KKyNkZWZpbmUgUExMRlNSX1FDX1NISUZUIDgKKyNkZWZpbmUgUExMRlNSX1BST1QJMHg0MDAwCQkvKiBQcm90ZWN0IFAgJiBRICovCisjZGVmaW5lIFBMTEZTUl9DTEszMgkweDgwMDAJCS8qIENsb2NrIDMyIChrSHopICovCisKKy8qCisgKiBQb3dlciBDb250cm9sIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgUENUUkxfQUREUgkweGZmZmZmMjA3CisjZGVmaW5lIFBDVFJMCQlCWVRFX1JFRihQQ1RSTF9BRERSKQorCisjZGVmaW5lIFBDVFJMX1dJRFRIX01BU0sJMHgxZgkvKiBDUFUgQ2xvY2sgYnVyc3RzIHdpZHRoICovCisjZGVmaW5lIFBDVFJMX1dJRFRIX1NISUZUCTAKKyNkZWZpbmUgUENUUkxfUENFTgkJMHg4MAkvKiBQb3dlciBDb250cm9sIEVuYWJsZSAqLworCisvKioqKioqKioqKgorICoKKyAqIDB4RkZGRkYzeHggLS0gSW50ZXJydXB0IENvbnRyb2xsZXIKKyAqCisgKioqKioqKioqKi8KKworLyogCisgKiBJbnRlcnJ1cHQgVmVjdG9yIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgSVZSX0FERFIJMHhmZmZmZjMwMAorI2RlZmluZSBJVlIJCUJZVEVfUkVGKElWUl9BRERSKQorCisjZGVmaW5lIElWUl9WRUNUT1JfTUFTSyAweEY4CisKKy8qCisgKiBJbnRlcnJ1cHQgY29udHJvbCBSZWdpc3RlcgorICovCisjZGVmaW5lIElDUl9BRERSCTB4ZmZmZmYzMDIKKyNkZWZpbmUgSUNSCQlXT1JEX1JFRihJQ1JfQUREUikKKworI2RlZmluZSBJQ1JfUE9MNQkweDAwODAJLyogUG9sYXJpdHkgQ29udHJvbCBmb3IgSVJRNSAqLworI2RlZmluZSBJQ1JfRVQ2CQkweDAxMDAJLyogRWRnZSBUcmlnZ2VyIFNlbGVjdCBmb3IgSVJRNiAqLworI2RlZmluZSBJQ1JfRVQzCQkweDAyMDAJLyogRWRnZSBUcmlnZ2VyIFNlbGVjdCBmb3IgSVJRMyAqLworI2RlZmluZSBJQ1JfRVQyCQkweDA0MDAJLyogRWRnZSBUcmlnZ2VyIFNlbGVjdCBmb3IgSVJRMiAqLworI2RlZmluZSBJQ1JfRVQxCQkweDA4MDAJLyogRWRnZSBUcmlnZ2VyIFNlbGVjdCBmb3IgSVJRMSAqLworI2RlZmluZSBJQ1JfUE9MNgkweDEwMDAJLyogUG9sYXJpdHkgQ29udHJvbCBmb3IgSVJRNiAqLworI2RlZmluZSBJQ1JfUE9MMwkweDIwMDAJLyogUG9sYXJpdHkgQ29udHJvbCBmb3IgSVJRMyAqLworI2RlZmluZSBJQ1JfUE9MMgkweDQwMDAJLyogUG9sYXJpdHkgQ29udHJvbCBmb3IgSVJRMiAqLworI2RlZmluZSBJQ1JfUE9MMQkweDgwMDAJLyogUG9sYXJpdHkgQ29udHJvbCBmb3IgSVJRMSAqLworCisvKgorICogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBJTVJfQUREUgkweGZmZmZmMzA0CisjZGVmaW5lIElNUgkJTE9OR19SRUYoSU1SX0FERFIpCisKKy8qCisgKiBEZWZpbmUgdGhlIG5hbWVzIGZvciBiaXQgcG9zaXRpb25zIGZpcnN0LiBUaGlzIGlzIHVzZWZ1bCBmb3IgCisgKiByZXF1ZXN0X2lycQorICovCisjZGVmaW5lIFNQSTJfSVJRX05VTQkwCS8qIFNQSSAyIGludGVycnVwdCAqLworI2RlZmluZSBUTVJfSVJRX05VTQkxCS8qIFRpbWVyIDEgaW50ZXJydXB0ICovCisjZGVmaW5lIFVBUlQxX0lSUV9OVU0JMgkvKiBVQVJUIDEgaW50ZXJydXB0ICovCQorI2RlZmluZQlXRFRfSVJRX05VTQkzCS8qIFdhdGNoZG9nIFRpbWVyIGludGVycnVwdCAqLworI2RlZmluZSBSVENfSVJRX05VTQk0CS8qIFJUQyBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgVE1SMl9JUlFfTlVNCTUJLyogVGltZXIgMiBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUJS0JfSVJRX05VTQk2CS8qIEtleWJvYXJkIEludGVycnVwdCAqLworI2RlZmluZSBQV00xX0lSUV9OVU0JNwkvKiBQdWxzZS1XaWR0aCBNb2R1bGF0b3IgMSBpbnQuICovCisjZGVmaW5lCUlOVDBfSVJRX05VTQk4CS8qIEV4dGVybmFsIElOVDAgKi8KKyNkZWZpbmUJSU5UMV9JUlFfTlVNCTkJLyogRXh0ZXJuYWwgSU5UMSAqLworI2RlZmluZQlJTlQyX0lSUV9OVU0JMTAJLyogRXh0ZXJuYWwgSU5UMiAqLworI2RlZmluZQlJTlQzX0lSUV9OVU0JMTEJLyogRXh0ZXJuYWwgSU5UMyAqLworI2RlZmluZSBVQVJUMl9JUlFfTlVNCTEyCS8qIFVBUlQgMiBpbnRlcnJ1cHQgKi8JCisjZGVmaW5lIFBXTTJfSVJRX05VTQkxMwkvKiBQdWxzZS1XaWR0aCBNb2R1bGF0b3IgMSBpbnQuICovCisjZGVmaW5lIElSUTFfSVJRX05VTQkxNgkvKiBJUlExICovCisjZGVmaW5lIElSUTJfSVJRX05VTQkxNwkvKiBJUlEyICovCisjZGVmaW5lIElSUTNfSVJRX05VTQkxOAkvKiBJUlEzICovCisjZGVmaW5lIElSUTZfSVJRX05VTQkxOQkvKiBJUlE2ICovCisjZGVmaW5lIElSUTVfSVJRX05VTQkyMAkvKiBJUlE1ICovCisjZGVmaW5lIFNQSTFfSVJRX05VTQkyMQkvKiBTUEkgMSBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgU0FNX0lSUV9OVU0JMjIJLyogU2FtcGxpbmcgVGltZXIgZm9yIFJUQyAqLworI2RlZmluZSBFTUlRX0lSUV9OVU0JMjMJLyogRW11bGF0b3IgSW50ZXJydXB0ICovCisKKyNkZWZpbmUgU1BJX0lSUV9OVU0JU1BJMl9JUlFfTlVNCisKKy8qICczMjgtY29tcGF0aWJsZSBkZWZpbml0aW9ucyAqLworI2RlZmluZSBTUElNX0lSUV9OVU0JU1BJX0lSUV9OVU0KKyNkZWZpbmUgVE1SMV9JUlFfTlVNCVRNUl9JUlFfTlVNCisjZGVmaW5lIFVBUlRfSVJRX05VTQlVQVJUMV9JUlFfTlVNCisKKy8qIAorICogSGVyZSBnbyB0aGUgYml0bWFza3MgdGhlbXNlbHZlcworICovCisjZGVmaW5lIElNUl9NU1BJIAkoMSA8PCBTUElfSVJRX05VTSkJLyogTWFzayBTUEkgaW50ZXJydXB0ICovCisjZGVmaW5lCUlNUl9NVE1SCSgxIDw8IFRNUl9JUlFfTlVNKQkvKiBNYXNrIFRpbWVyIGludGVycnVwdCAqLworI2RlZmluZSBJTVJfTVVBUlQJKDEgPDwgVUFSVF9JUlFfTlVNKQkvKiBNYXNrIFVBUlQgaW50ZXJydXB0ICovCQorI2RlZmluZQlJTVJfTVdEVAkoMSA8PCBXRFRfSVJRX05VTSkJLyogTWFzayBXYXRjaGRvZyBUaW1lciBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU1SX01SVEMJKDEgPDwgUlRDX0lSUV9OVU0pCS8qIE1hc2sgUlRDIGludGVycnVwdCAqLworI2RlZmluZQlJTVJfTUtCCQkoMSA8PCBLQl9JUlFfTlVNKQkvKiBNYXNrIEtleWJvYXJkIEludGVycnVwdCAqLworI2RlZmluZSBJTVJfTVBXTQkoMSA8PCBQV01fSVJRX05VTSkJLyogTWFzayBQdWxzZS1XaWR0aCBNb2R1bGF0b3IgaW50LiAqLworI2RlZmluZQlJTVJfTUlOVDAJKDEgPDwgSU5UMF9JUlFfTlVNKQkvKiBNYXNrIEV4dGVybmFsIElOVDAgKi8KKyNkZWZpbmUJSU1SX01JTlQxCSgxIDw8IElOVDFfSVJRX05VTSkJLyogTWFzayBFeHRlcm5hbCBJTlQxICovCisjZGVmaW5lCUlNUl9NSU5UMgkoMSA8PCBJTlQyX0lSUV9OVU0pCS8qIE1hc2sgRXh0ZXJuYWwgSU5UMiAqLworI2RlZmluZQlJTVJfTUlOVDMJKDEgPDwgSU5UM19JUlFfTlVNKQkvKiBNYXNrIEV4dGVybmFsIElOVDMgKi8KKyNkZWZpbmUgSU1SX01JUlExCSgxIDw8IElSUTFfSVJRX05VTSkJLyogTWFzayBJUlExICovCisjZGVmaW5lIElNUl9NSVJRMgkoMSA8PCBJUlEyX0lSUV9OVU0pCS8qIE1hc2sgSVJRMiAqLworI2RlZmluZSBJTVJfTUlSUTMJKDEgPDwgSVJRM19JUlFfTlVNKQkvKiBNYXNrIElSUTMgKi8KKyNkZWZpbmUgSU1SX01JUlE2CSgxIDw8IElSUTZfSVJRX05VTSkJLyogTWFzayBJUlE2ICovCisjZGVmaW5lIElNUl9NSVJRNQkoMSA8PCBJUlE1X0lSUV9OVU0pCS8qIE1hc2sgSVJRNSAqLworI2RlZmluZSBJTVJfTVNBTQkoMSA8PCBTQU1fSVJRX05VTSkJLyogTWFzayBTYW1wbGluZyBUaW1lciBmb3IgUlRDICovCisjZGVmaW5lIElNUl9NRU1JUQkoMSA8PCBFTUlRX0lSUV9OVU0pCS8qIE1hc2sgRW11bGF0b3IgSW50ZXJydXB0ICovCisKKy8qICczMjgtY29tcGF0aWJsZSBkZWZpbml0aW9ucyAqLworI2RlZmluZSBJTVJfTVNQSU0JSU1SX01TUEkKKyNkZWZpbmUgSU1SX01UTVIxCUlNUl9NVE1SCisKKy8qIAorICogSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAKKyAqLworI2RlZmluZSBJU1JfQUREUgkweGZmZmZmMzBjCisjZGVmaW5lIElTUgkJTE9OR19SRUYoSVNSX0FERFIpCisKKyNkZWZpbmUgSVNSX1NQSSAJKDEgPDwgU1BJX0lSUV9OVU0pCS8qIFNQSSBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUJSVNSX1RNUgkJKDEgPDwgVE1SX0lSUV9OVU0pCS8qIFRpbWVyIGludGVycnVwdCAqLworI2RlZmluZSBJU1JfVUFSVAkoMSA8PCBVQVJUX0lSUV9OVU0pCS8qIFVBUlQgaW50ZXJydXB0ICovCQorI2RlZmluZQlJU1JfV0RUCQkoMSA8PCBXRFRfSVJRX05VTSkJLyogV2F0Y2hkb2cgVGltZXIgaW50ZXJydXB0ICovCisjZGVmaW5lIElTUl9SVEMJCSgxIDw8IFJUQ19JUlFfTlVNKQkvKiBSVEMgaW50ZXJydXB0ICovCisjZGVmaW5lCUlTUl9LQgkJKDEgPDwgS0JfSVJRX05VTSkJLyogS2V5Ym9hcmQgSW50ZXJydXB0ICovCisjZGVmaW5lIElTUl9QV00JCSgxIDw8IFBXTV9JUlFfTlVNKQkvKiBQdWxzZS1XaWR0aCBNb2R1bGF0b3IgaW50ZXJydXB0ICovCisjZGVmaW5lCUlTUl9JTlQwCSgxIDw8IElOVDBfSVJRX05VTSkJLyogRXh0ZXJuYWwgSU5UMCAqLworI2RlZmluZQlJU1JfSU5UMQkoMSA8PCBJTlQxX0lSUV9OVU0pCS8qIEV4dGVybmFsIElOVDEgKi8KKyNkZWZpbmUJSVNSX0lOVDIJKDEgPDwgSU5UMl9JUlFfTlVNKQkvKiBFeHRlcm5hbCBJTlQyICovCisjZGVmaW5lCUlTUl9JTlQzCSgxIDw8IElOVDNfSVJRX05VTSkJLyogRXh0ZXJuYWwgSU5UMyAqLworI2RlZmluZSBJU1JfSVJRMQkoMSA8PCBJUlExX0lSUV9OVU0pCS8qIElSUTEgKi8KKyNkZWZpbmUgSVNSX0lSUTIJKDEgPDwgSVJRMl9JUlFfTlVNKQkvKiBJUlEyICovCisjZGVmaW5lIElTUl9JUlEzCSgxIDw8IElSUTNfSVJRX05VTSkJLyogSVJRMyAqLworI2RlZmluZSBJU1JfSVJRNgkoMSA8PCBJUlE2X0lSUV9OVU0pCS8qIElSUTYgKi8KKyNkZWZpbmUgSVNSX0lSUTUJKDEgPDwgSVJRNV9JUlFfTlVNKQkvKiBJUlE1ICovCisjZGVmaW5lIElTUl9TQU0JCSgxIDw8IFNBTV9JUlFfTlVNKQkvKiBTYW1wbGluZyBUaW1lciBmb3IgUlRDICovCisjZGVmaW5lIElTUl9FTUlRCSgxIDw8IEVNSVFfSVJRX05VTSkJLyogRW11bGF0b3IgSW50ZXJydXB0ICovCisKKy8qICczMjgtY29tcGF0aWJsZSBkZWZpbml0aW9ucyAqLworI2RlZmluZSBJU1JfU1BJTQlJU1JfU1BJCisjZGVmaW5lIElTUl9UTVIxCUlTUl9UTVIKKworLyogCisgKiBJbnRlcnJ1cHQgUGVuZGluZyBSZWdpc3RlciAKKyAqLworI2RlZmluZSBJUFJfQUREUgkweGZmZmZmMzBjCisjZGVmaW5lIElQUgkJTE9OR19SRUYoSVBSX0FERFIpCisKKyNkZWZpbmUgSVBSX1NQSSAJKDEgPDwgU1BJX0lSUV9OVU0pCS8qIFNQSSBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUJSVBSX1RNUgkJKDEgPDwgVE1SX0lSUV9OVU0pCS8qIFRpbWVyIGludGVycnVwdCAqLworI2RlZmluZSBJUFJfVUFSVAkoMSA8PCBVQVJUX0lSUV9OVU0pCS8qIFVBUlQgaW50ZXJydXB0ICovCQorI2RlZmluZQlJUFJfV0RUCQkoMSA8PCBXRFRfSVJRX05VTSkJLyogV2F0Y2hkb2cgVGltZXIgaW50ZXJydXB0ICovCisjZGVmaW5lIElQUl9SVEMJCSgxIDw8IFJUQ19JUlFfTlVNKQkvKiBSVEMgaW50ZXJydXB0ICovCisjZGVmaW5lCUlQUl9LQgkJKDEgPDwgS0JfSVJRX05VTSkJLyogS2V5Ym9hcmQgSW50ZXJydXB0ICovCisjZGVmaW5lIElQUl9QV00JCSgxIDw8IFBXTV9JUlFfTlVNKQkvKiBQdWxzZS1XaWR0aCBNb2R1bGF0b3IgaW50ZXJydXB0ICovCisjZGVmaW5lCUlQUl9JTlQwCSgxIDw8IElOVDBfSVJRX05VTSkJLyogRXh0ZXJuYWwgSU5UMCAqLworI2RlZmluZQlJUFJfSU5UMQkoMSA8PCBJTlQxX0lSUV9OVU0pCS8qIEV4dGVybmFsIElOVDEgKi8KKyNkZWZpbmUJSVBSX0lOVDIJKDEgPDwgSU5UMl9JUlFfTlVNKQkvKiBFeHRlcm5hbCBJTlQyICovCisjZGVmaW5lCUlQUl9JTlQzCSgxIDw8IElOVDNfSVJRX05VTSkJLyogRXh0ZXJuYWwgSU5UMyAqLworI2RlZmluZSBJUFJfSVJRMQkoMSA8PCBJUlExX0lSUV9OVU0pCS8qIElSUTEgKi8KKyNkZWZpbmUgSVBSX0lSUTIJKDEgPDwgSVJRMl9JUlFfTlVNKQkvKiBJUlEyICovCisjZGVmaW5lIElQUl9JUlEzCSgxIDw8IElSUTNfSVJRX05VTSkJLyogSVJRMyAqLworI2RlZmluZSBJUFJfSVJRNgkoMSA8PCBJUlE2X0lSUV9OVU0pCS8qIElSUTYgKi8KKyNkZWZpbmUgSVBSX0lSUTUJKDEgPDwgSVJRNV9JUlFfTlVNKQkvKiBJUlE1ICovCisjZGVmaW5lIElQUl9TQU0JCSgxIDw8IFNBTV9JUlFfTlVNKQkvKiBTYW1wbGluZyBUaW1lciBmb3IgUlRDICovCisjZGVmaW5lIElQUl9FTUlRCSgxIDw8IEVNSVFfSVJRX05VTSkJLyogRW11bGF0b3IgSW50ZXJydXB0ICovCisKKy8qICczMjgtY29tcGF0aWJsZSBkZWZpbml0aW9ucyAqLworI2RlZmluZSBJUFJfU1BJTQlJUFJfU1BJCisjZGVmaW5lIElQUl9UTVIxCUlQUl9UTVIKKworLyoqKioqKioqKioKKyAqCisgKiAweEZGRkZGNHh4IC0tIFBhcmFsbGVsIFBvcnRzCisgKgorICoqKioqKioqKiovCisKKy8qCisgKiBQb3J0IEEKKyAqLworI2RlZmluZSBQQURJUl9BRERSCTB4ZmZmZmY0MDAJCS8qIFBvcnQgQSBkaXJlY3Rpb24gcmVnICovCisjZGVmaW5lIFBBREFUQV9BRERSCTB4ZmZmZmY0MDEJCS8qIFBvcnQgQSBkYXRhIHJlZ2lzdGVyICovCisjZGVmaW5lIFBBUFVFTl9BRERSCTB4ZmZmZmY0MDIJCS8qIFBvcnQgQSBQdWxsLVVwIGVuYWJsZSByZWcgKi8KKworI2RlZmluZSBQQURJUgkJQllURV9SRUYoUEFESVJfQUREUikKKyNkZWZpbmUgUEFEQVRBCQlCWVRFX1JFRihQQURBVEFfQUREUikKKyNkZWZpbmUgUEFQVUVOCQlCWVRFX1JFRihQQVBVRU5fQUREUikKKworI2RlZmluZSBQQSh4KQkJKDEgPDwgKHgpKQorCisvKiAKKyAqIFBvcnQgQgorICovCisjZGVmaW5lIFBCRElSX0FERFIJMHhmZmZmZjQwOAkJLyogUG9ydCBCIGRpcmVjdGlvbiByZWcgKi8KKyNkZWZpbmUgUEJEQVRBX0FERFIJMHhmZmZmZjQwOQkJLyogUG9ydCBCIGRhdGEgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUEJQVUVOX0FERFIJMHhmZmZmZjQwYQkJLyogUG9ydCBCIFB1bGwtVXAgZW5hYmxlIHJlZyAqLworI2RlZmluZSBQQlNFTF9BRERSCTB4ZmZmZmY0MGIJCS8qIFBvcnQgQiBTZWxlY3QgUmVnaXN0ZXIgKi8KKworI2RlZmluZSBQQkRJUgkJQllURV9SRUYoUEJESVJfQUREUikKKyNkZWZpbmUgUEJEQVRBCQlCWVRFX1JFRihQQkRBVEFfQUREUikKKyNkZWZpbmUgUEJQVUVOCQlCWVRFX1JFRihQQlBVRU5fQUREUikKKyNkZWZpbmUgUEJTRUwJCUJZVEVfUkVGKFBCU0VMX0FERFIpCisKKyNkZWZpbmUgUEIoeCkJCSgxIDw8ICh4KSkKKworI2RlZmluZSBQQl9DU0IwCQkweDAxCS8qIFVzZSBDU0IwICAgICAgYXMgUEJbMF0gKi8KKyNkZWZpbmUgUEJfQ1NCMQkJMHgwMgkvKiBVc2UgQ1NCMSAgICAgIGFzIFBCWzFdICovCisjZGVmaW5lIFBCX0NTQzBfUkFTMAkweDA0ICAgIC8qIFVzZSBDU0MwL1JBUzAgYXMgUEJbMl0gKi8JCisjZGVmaW5lIFBCX0NTQzFfUkFTMQkweDA4ICAgIC8qIFVzZSBDU0MxL1JBUzEgYXMgUEJbM10gKi8JCisjZGVmaW5lIFBCX0NTRDBfQ0FTMAkweDEwICAgIC8qIFVzZSBDU0QwL0NBUzAgYXMgUEJbNF0gKi8JCisjZGVmaW5lIFBCX0NTRDFfQ0FTMQkweDIwICAgIC8qIFVzZSBDU0QxL0NBUzEgYXMgUEJbNV0gKi8KKyNkZWZpbmUgUEJfVElOX1RPVVQJMHg0MAkvKiBVc2UgVElOL1RPVVQgIGFzIFBCWzZdICovCisjZGVmaW5lIFBCX1BXTU8JCTB4ODAJLyogVXNlIFBXTU8gICAgICBhcyBQQls3XSAqLworCisvKiAKKyAqIFBvcnQgQworICovCisjZGVmaW5lIFBDRElSX0FERFIJMHhmZmZmZjQxMAkJLyogUG9ydCBDIGRpcmVjdGlvbiByZWcgKi8KKyNkZWZpbmUgUENEQVRBX0FERFIJMHhmZmZmZjQxMQkJLyogUG9ydCBDIGRhdGEgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENQREVOX0FERFIJMHhmZmZmZjQxMgkJLyogUG9ydCBDIFB1bGwtRG93biBlbmIuIHJlZyAqLworI2RlZmluZSBQQ1NFTF9BRERSCTB4ZmZmZmY0MTMJCS8qIFBvcnQgQyBTZWxlY3QgUmVnaXN0ZXIgKi8KKworI2RlZmluZSBQQ0RJUgkJQllURV9SRUYoUENESVJfQUREUikKKyNkZWZpbmUgUENEQVRBCQlCWVRFX1JFRihQQ0RBVEFfQUREUikKKyNkZWZpbmUgUENQREVOCQlCWVRFX1JFRihQQ1BERU5fQUREUikKKyNkZWZpbmUgUENTRUwJCUJZVEVfUkVGKFBDU0VMX0FERFIpCisKKyNkZWZpbmUgUEMoeCkJCSgxIDw8ICh4KSkKKworI2RlZmluZSBQQ19MRDAJCTB4MDEJLyogVXNlIExEMCAgYXMgUENbMF0gKi8KKyNkZWZpbmUgUENfTEQxCQkweDAyCS8qIFVzZSBMRDEgIGFzIFBDWzFdICovCisjZGVmaW5lIFBDX0xEMgkJMHgwNAkvKiBVc2UgTEQyICBhcyBQQ1syXSAqLworI2RlZmluZSBQQ19MRDMJCTB4MDgJLyogVXNlIExEMyAgYXMgUENbM10gKi8KKyNkZWZpbmUgUENfTEZMTQkJMHgxMAkvKiBVc2UgTEZMTSBhcyBQQ1s0XSAqLworI2RlZmluZSBQQ19MTFAgCQkweDIwCS8qIFVzZSBMTFAgIGFzIFBDWzVdICovCisjZGVmaW5lIFBDX0xDTEsJCTB4NDAJLyogVXNlIExDTEsgYXMgUENbNl0gKi8KKyNkZWZpbmUgUENfTEFDRAkJMHg4MAkvKiBVc2UgTEFDRCBhcyBQQ1s3XSAqLworCisvKiAKKyAqIFBvcnQgRAorICovCisjZGVmaW5lIFBERElSX0FERFIJMHhmZmZmZjQxOAkJLyogUG9ydCBEIGRpcmVjdGlvbiByZWcgKi8KKyNkZWZpbmUgUEREQVRBX0FERFIJMHhmZmZmZjQxOQkJLyogUG9ydCBEIGRhdGEgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUERQVUVOX0FERFIJMHhmZmZmZjQxYQkJLyogUG9ydCBEIFB1bGwtVXAgZW5hYmxlIHJlZyAqLworI2RlZmluZSBQRFNFTF9BRERSCTB4ZmZmZmY0MWIJCS8qIFBvcnQgRCBTZWxlY3QgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUERQT0xfQUREUgkweGZmZmZmNDFjCQkvKiBQb3J0IEQgUG9sYXJpdHkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUERJUlFFTl9BRERSCTB4ZmZmZmY0MWQJCS8qIFBvcnQgRCBJUlEgZW5hYmxlIHJlZ2lzdGVyICovCisjZGVmaW5lIFBES0JFTl9BRERSCTB4ZmZmZmY0MWUJCS8qIFBvcnQgRCBLZXlib2FyZCBFbmFibGUgcmVnICovCisjZGVmaW5lCVBESVFFR19BRERSCTB4ZmZmZmY0MWYJCS8qIFBvcnQgRCBJUlEgRWRnZSBSZWdpc3RlciAqLworCisjZGVmaW5lIFBERElSCQlCWVRFX1JFRihQRERJUl9BRERSKQorI2RlZmluZSBQRERBVEEJCUJZVEVfUkVGKFBEREFUQV9BRERSKQorI2RlZmluZSBQRFBVRU4JCUJZVEVfUkVGKFBEUFVFTl9BRERSKQorI2RlZmluZSBQRFNFTAkJQllURV9SRUYoUERTRUxfQUREUikKKyNkZWZpbmUJUERQT0wJCUJZVEVfUkVGKFBEUE9MX0FERFIpCisjZGVmaW5lIFBESVJRRU4JCUJZVEVfUkVGKFBESVJRRU5fQUREUikKKyNkZWZpbmUgUERLQkVOCQlCWVRFX1JFRihQREtCRU5fQUREUikKKyNkZWZpbmUgUERJUUVHCQlCWVRFX1JFRihQRElRRUdfQUREUikKKworI2RlZmluZSBQRCh4KQkJKDEgPDwgKHgpKQorCisjZGVmaW5lIFBEX0lOVDAJCTB4MDEJLyogVXNlIElOVDAgYXMgUERbMF0gKi8KKyNkZWZpbmUgUERfSU5UMQkJMHgwMgkvKiBVc2UgSU5UMSBhcyBQRFsxXSAqLworI2RlZmluZSBQRF9JTlQyCQkweDA0CS8qIFVzZSBJTlQyIGFzIFBEWzJdICovCisjZGVmaW5lIFBEX0lOVDMJCTB4MDgJLyogVXNlIElOVDMgYXMgUERbM10gKi8KKyNkZWZpbmUgUERfSVJRMQkJMHgxMAkvKiBVc2UgSVJRMSBhcyBQRFs0XSAqLworI2RlZmluZSBQRF9JUlEyCQkweDIwCS8qIFVzZSBJUlEyIGFzIFBEWzVdICovCisjZGVmaW5lIFBEX0lSUTMJCTB4NDAJLyogVXNlIElSUTMgYXMgUERbNl0gKi8KKyNkZWZpbmUgUERfSVJRNgkJMHg4MAkvKiBVc2UgSVJRNiBhcyBQRFs3XSAqLworCisvKiAKKyAqIFBvcnQgRQorICovCisjZGVmaW5lIFBFRElSX0FERFIJMHhmZmZmZjQyMAkJLyogUG9ydCBFIGRpcmVjdGlvbiByZWcgKi8KKyNkZWZpbmUgUEVEQVRBX0FERFIJMHhmZmZmZjQyMQkJLyogUG9ydCBFIGRhdGEgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUEVQVUVOX0FERFIJMHhmZmZmZjQyMgkJLyogUG9ydCBFIFB1bGwtVXAgZW5hYmxlIHJlZyAqLworI2RlZmluZSBQRVNFTF9BRERSCTB4ZmZmZmY0MjMJCS8qIFBvcnQgRSBTZWxlY3QgUmVnaXN0ZXIgKi8KKworI2RlZmluZSBQRURJUgkJQllURV9SRUYoUEVESVJfQUREUikKKyNkZWZpbmUgUEVEQVRBCQlCWVRFX1JFRihQRURBVEFfQUREUikKKyNkZWZpbmUgUEVQVUVOCQlCWVRFX1JFRihQRVBVRU5fQUREUikKKyNkZWZpbmUgUEVTRUwJCUJZVEVfUkVGKFBFU0VMX0FERFIpCisKKyNkZWZpbmUgUEUoeCkJCSgxIDw8ICh4KSkKKworI2RlZmluZSBQRV9TUE1UWEQJMHgwMQkvKiBVc2UgU1BNVFhEIGFzIFBFWzBdICovCisjZGVmaW5lIFBFX1NQTVJYRAkweDAyCS8qIFVzZSBTUE1SWEQgYXMgUEVbMV0gKi8KKyNkZWZpbmUgUEVfU1BNQ0xLCTB4MDQJLyogVXNlIFNQTUNMSyBhcyBQRVsyXSAqLworI2RlZmluZSBQRV9EV0UJCTB4MDgJLyogVXNlIERXRSAgICBhcyBQRVszXSAqLworI2RlZmluZSBQRV9SWEQJCTB4MTAJLyogVXNlIFJYRCAgICBhcyBQRVs0XSAqLworI2RlZmluZSBQRV9UWEQJCTB4MjAJLyogVXNlIFRYRCAgICBhcyBQRVs1XSAqLworI2RlZmluZSBQRV9SVFMJCTB4NDAJLyogVXNlIFJUUyAgICBhcyBQRVs2XSAqLworI2RlZmluZSBQRV9DVFMJCTB4ODAJLyogVXNlIENUUyAgICBhcyBQRVs3XSAqLworCisvKiAKKyAqIFBvcnQgRgorICovCisjZGVmaW5lIFBGRElSX0FERFIJMHhmZmZmZjQyOAkJLyogUG9ydCBGIGRpcmVjdGlvbiByZWcgKi8KKyNkZWZpbmUgUEZEQVRBX0FERFIJMHhmZmZmZjQyOQkJLyogUG9ydCBGIGRhdGEgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUEZQVUVOX0FERFIJMHhmZmZmZjQyYQkJLyogUG9ydCBGIFB1bGwtVXAgZW5hYmxlIHJlZyAqLworI2RlZmluZSBQRlNFTF9BRERSCTB4ZmZmZmY0MmIJCS8qIFBvcnQgRiBTZWxlY3QgUmVnaXN0ZXIgKi8KKworI2RlZmluZSBQRkRJUgkJQllURV9SRUYoUEZESVJfQUREUikKKyNkZWZpbmUgUEZEQVRBCQlCWVRFX1JFRihQRkRBVEFfQUREUikKKyNkZWZpbmUgUEZQVUVOCQlCWVRFX1JFRihQRlBVRU5fQUREUikKKyNkZWZpbmUgUEZTRUwJCUJZVEVfUkVGKFBGU0VMX0FERFIpCisKKyNkZWZpbmUgUEYoeCkJCSgxIDw8ICh4KSkKKworI2RlZmluZSBQRl9MQ09OVFJBU1QJMHgwMQkvKiBVc2UgTENPTlRSQVNUIGFzIFBGWzBdICovCisjZGVmaW5lIFBGX0lSUTUgICAgICAgICAweDAyICAgIC8qIFVzZSBJUlE1ICAgICAgYXMgUEZbMV0gKi8KKyNkZWZpbmUgUEZfQ0xLTyAgICAgICAgIDB4MDQgICAgLyogVXNlIENMS08gICAgICBhcyBQRlsyXSAqLworI2RlZmluZSBQRl9BMjAgICAgICAgICAgMHgwOCAgICAvKiBVc2UgQTIwICAgICAgIGFzIFBGWzNdICovCisjZGVmaW5lIFBGX0EyMSAgICAgICAgICAweDEwICAgIC8qIFVzZSBBMjEgICAgICAgYXMgUEZbNF0gKi8KKyNkZWZpbmUgUEZfQTIyICAgICAgICAgIDB4MjAgICAgLyogVXNlIEEyMiAgICAgICBhcyBQRls1XSAqLworI2RlZmluZSBQRl9BMjMgICAgICAgICAgMHg0MCAgICAvKiBVc2UgQTIzICAgICAgIGFzIFBGWzZdICovCisjZGVmaW5lIFBGX0NTQTEJCTB4ODAgICAgLyogVXNlIENTQTEgICAgICBhcyBQRls3XSAqLworCisvKiAKKyAqIFBvcnQgRworICovCisjZGVmaW5lIFBHRElSX0FERFIJMHhmZmZmZjQzMAkJLyogUG9ydCBHIGRpcmVjdGlvbiByZWcgKi8KKyNkZWZpbmUgUEdEQVRBX0FERFIJMHhmZmZmZjQzMQkJLyogUG9ydCBHIGRhdGEgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUEdQVUVOX0FERFIJMHhmZmZmZjQzMgkJLyogUG9ydCBHIFB1bGwtVXAgZW5hYmxlIHJlZyAqLworI2RlZmluZSBQR1NFTF9BRERSCTB4ZmZmZmY0MzMJCS8qIFBvcnQgRyBTZWxlY3QgUmVnaXN0ZXIgKi8KKworI2RlZmluZSBQR0RJUgkJQllURV9SRUYoUEdESVJfQUREUikKKyNkZWZpbmUgUEdEQVRBCQlCWVRFX1JFRihQR0RBVEFfQUREUikKKyNkZWZpbmUgUEdQVUVOCQlCWVRFX1JFRihQR1BVRU5fQUREUikKKyNkZWZpbmUgUEdTRUwJCUJZVEVfUkVGKFBHU0VMX0FERFIpCisKKyNkZWZpbmUgUEcoeCkJCSgxIDw8ICh4KSkKKworI2RlZmluZSBQR19CVVNXX0RUQUNLCTB4MDEJLyogVXNlIEJVU1cvRFRBQ0sgYXMgUEdbMF0gKi8KKyNkZWZpbmUgUEdfQTAJCTB4MDIJLyogVXNlIEEwICAgICAgICAgYXMgUEdbMV0gKi8KKyNkZWZpbmUgUEdfRU1VSVJRCTB4MDQJLyogVXNlIEVNVUlSUSAgICAgYXMgUEdbMl0gKi8KKyNkZWZpbmUgUEdfSElaX1BfRAkweDA4CS8qIFVzZSBISVovUC9EICAgIGFzIFBHWzNdICovCisjZGVmaW5lIFBHX0VNVUNTICAgICAgICAweDEwCS8qIFVzZSBFTVVDUyAgICAgIGFzIFBHWzRdICovCisjZGVmaW5lIFBHX0VNVUJSSwkweDIwCS8qIFVzZSBFTVVCUksgICAgIGFzIFBHWzVdICovCisKKy8qIAorICogUG9ydCBKCisgKi8KKyNkZWZpbmUgUEpESVJfQUREUgkweGZmZmZmNDM4CQkvKiBQb3J0IEogZGlyZWN0aW9uIHJlZyAqLworI2RlZmluZSBQSkRBVEFfQUREUgkweGZmZmZmNDM5CQkvKiBQb3J0IEogZGF0YSByZWdpc3RlciAqLworI2RlZmluZSBQSlBVRU5fQUREUgkweGZmZmZmNDNBCQkvKiBQb3J0IEogUHVsbC1VcCBlbmIuIHJlZyAqLworI2RlZmluZSBQSlNFTF9BRERSCTB4ZmZmZmY0M0IJCS8qIFBvcnQgSiBTZWxlY3QgUmVnaXN0ZXIgKi8KKworI2RlZmluZSBQSkRJUgkJQllURV9SRUYoUEpESVJfQUREUikKKyNkZWZpbmUgUEpEQVRBCQlCWVRFX1JFRihQSkRBVEFfQUREUikKKyNkZWZpbmUgUEpQVUVOCQlCWVRFX1JFRihQSlBVRU5fQUREUikKKyNkZWZpbmUgUEpTRUwJCUJZVEVfUkVGKFBKU0VMX0FERFIpCisKKyNkZWZpbmUgUEooeCkJCSgxIDw8ICh4KSkKKworLyoKKyAqIFBvcnQgSworICovCisjZGVmaW5lIFBLRElSX0FERFIJMHhmZmZmZjQ0MAkJLyogUG9ydCBLIGRpcmVjdGlvbiByZWcgKi8KKyNkZWZpbmUgUEtEQVRBX0FERFIJMHhmZmZmZjQ0MQkJLyogUG9ydCBLIGRhdGEgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUEtQVUVOX0FERFIJMHhmZmZmZjQ0MgkJLyogUG9ydCBLIFB1bGwtVXAgZW5iLiByZWcgKi8KKyNkZWZpbmUgUEtTRUxfQUREUgkweGZmZmZmNDQzCQkvKiBQb3J0IEsgU2VsZWN0IFJlZ2lzdGVyICovCisKKyNkZWZpbmUgUEtESVIJCUJZVEVfUkVGKFBLRElSX0FERFIpCisjZGVmaW5lIFBLREFUQQkJQllURV9SRUYoUEtEQVRBX0FERFIpCisjZGVmaW5lIFBLUFVFTgkJQllURV9SRUYoUEtQVUVOX0FERFIpCisjZGVmaW5lIFBLU0VMCQlCWVRFX1JFRihQS1NFTF9BRERSKQorCisjZGVmaW5lIFBLKHgpCQkoMSA8PCAoeCkpCisKKyNkZWZpbmUgUEtfREFUQVJFQURZCQkweDAxCS8qIFVzZSB+REFUQV9SRUFEWSAgYXMgUEtbMF0gKi8KKyNkZWZpbmUgUEtfUFdNMgkJMHgwMQkvKiBVc2UgUFdNMiAgYXMgUEtbMF0gKi8KKyNkZWZpbmUgUEtfUl9XCQkweDAyCS8qIFVzZSBSL1cgIGFzIFBLWzFdICovCisjZGVmaW5lIFBLX0xEUwkJMHgwNAkvKiBVc2UgL0xEUyAgYXMgUEtbMl0gKi8KKyNkZWZpbmUgUEtfVURTCQkweDA4CS8qIFVzZSAvVURTICBhcyBQS1szXSAqLworI2RlZmluZSBQS19MRDQJCTB4MTAJLyogVXNlIExENCBhcyBQS1s0XSAqLworI2RlZmluZSBQS19MRDUgCQkweDIwCS8qIFVzZSBMRDUgIGFzIFBLWzVdICovCisjZGVmaW5lIFBLX0xENgkJMHg0MAkvKiBVc2UgTEQ2IGFzIFBLWzZdICovCisjZGVmaW5lIFBLX0xENwkJMHg4MAkvKiBVc2UgTEQ3IGFzIFBLWzddICovCisKKyNkZWZpbmUgUEpESVJfQUREUgkweGZmZmZmNDM4CQkvKiBQb3J0IEogZGlyZWN0aW9uIHJlZyAqLworI2RlZmluZSBQSkRBVEFfQUREUgkweGZmZmZmNDM5CQkvKiBQb3J0IEogZGF0YSByZWdpc3RlciAqLworI2RlZmluZSBQSlBVRU5fQUREUgkweGZmZmZmNDNBCQkvKiBQb3J0IEogUHVsbC1VcCBlbmFibGUgcmVnICovCisjZGVmaW5lIFBKU0VMX0FERFIJMHhmZmZmZjQzQgkJLyogUG9ydCBKIFNlbGVjdCBSZWdpc3RlciAqLworCisjZGVmaW5lIFBKRElSCQlCWVRFX1JFRihQSkRJUl9BRERSKQorI2RlZmluZSBQSkRBVEEJCUJZVEVfUkVGKFBKREFUQV9BRERSKQorI2RlZmluZSBQSlBVRU4JCUJZVEVfUkVGKFBKUFVFTl9BRERSKQorI2RlZmluZSBQSlNFTAkJQllURV9SRUYoUEpTRUxfQUREUikKKworI2RlZmluZSBQSih4KQkJKDEgPDwgKHgpKQorCisjZGVmaW5lIFBKX01PU0kgCTB4MDEJLyogVXNlIE1PU0kgICAgICAgYXMgUEpbMF0gKi8KKyNkZWZpbmUgUEpfTUlTTwkJMHgwMgkvKiBVc2UgTUlTTyAgICAgICBhcyBQSlsxXSAqLworI2RlZmluZSBQSl9TUElDTEsxICAJMHgwNAkvKiBVc2UgU1BJQ0xLMSAgICBhcyBQSlsyXSAqLworI2RlZmluZSBQSl9TUyAgIAkweDA4CS8qIFVzZSBTUyAgICAgICAgIGFzIFBKWzNdICovCisjZGVmaW5lIFBKX1JYRDIgICAgICAgICAweDEwCS8qIFVzZSBSWEQyICAgICAgIGFzIFBKWzRdICovCisjZGVmaW5lIFBKX1RYRDIgIAkweDIwCS8qIFVzZSBUWEQyICAgICAgIGFzIFBKWzVdICovCisjZGVmaW5lIFBKX1JUUzIgIAkweDQwCS8qIFVzZSBSVFMyICAgICAgIGFzIFBKWzVdICovCisjZGVmaW5lIFBKX0NUUzIgIAkweDgwCS8qIFVzZSBDVFMyICAgICAgIGFzIFBKWzVdICovCisKKy8qCisgKiBQb3J0IE0KKyAqLworI2RlZmluZSBQTURJUl9BRERSCTB4ZmZmZmY0NDgJCS8qIFBvcnQgTSBkaXJlY3Rpb24gcmVnICovCisjZGVmaW5lIFBNREFUQV9BRERSCTB4ZmZmZmY0NDkJCS8qIFBvcnQgTSBkYXRhIHJlZ2lzdGVyICovCisjZGVmaW5lIFBNUFVFTl9BRERSCTB4ZmZmZmY0NGEJCS8qIFBvcnQgTSBQdWxsLVVwIGVuYWJsZSByZWcgKi8KKyNkZWZpbmUgUE1TRUxfQUREUgkweGZmZmZmNDRiCQkvKiBQb3J0IE0gU2VsZWN0IFJlZ2lzdGVyICovCisKKyNkZWZpbmUgUE1ESVIJCUJZVEVfUkVGKFBNRElSX0FERFIpCisjZGVmaW5lIFBNREFUQQkJQllURV9SRUYoUE1EQVRBX0FERFIpCisjZGVmaW5lIFBNUFVFTgkJQllURV9SRUYoUE1QVUVOX0FERFIpCisjZGVmaW5lIFBNU0VMCQlCWVRFX1JFRihQTVNFTF9BRERSKQorCisjZGVmaW5lIFBNKHgpCQkoMSA8PCAoeCkpCisKKyNkZWZpbmUgUE1fU0RDTEsJMHgwMQkvKiBVc2UgU0RDTEsgICAgICBhcyBQTVswXSAqLworI2RlZmluZSBQTV9TRENFCQkweDAyCS8qIFVzZSBTRENFICAgICAgIGFzIFBNWzFdICovCisjZGVmaW5lIFBNX0RRTUggCTB4MDQJLyogVXNlIERRTUggICAgICAgYXMgUE1bMl0gKi8KKyNkZWZpbmUgUE1fRFFNTCAJMHgwOAkvKiBVc2UgRFFNTCAgICAgICBhcyBQTVszXSAqLworI2RlZmluZSBQTV9TREExMCAgICAgICAgMHgxMAkvKiBVc2UgU0RBMTAgICAgICBhcyBQTVs0XSAqLworI2RlZmluZSBQTV9ETU9FIAkweDIwCS8qIFVzZSBETU9FICAgICAgIGFzIFBNWzVdICovCisKKy8qKioqKioqKioqCisgKgorICogMHhGRkZGRjV4eCAtLSBQdWxzZS1XaWR0aCBNb2R1bGF0b3IgKFBXTSkKKyAqCisgKioqKioqKioqKi8KKworLyoKKyAqIFBXTSBDb250cm9sIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgUFdNQ19BRERSCTB4ZmZmZmY1MDAKKyNkZWZpbmUgUFdNQwkJV09SRF9SRUYoUFdNQ19BRERSKQorCisjZGVmaW5lIFBXTUNfQ0xLU0VMX01BU0sJMHgwMDAzCS8qIENsb2NrIFNlbGVjdGlvbiAqLworI2RlZmluZSBQV01DX0NMS1NFTF9TSElGVAkwCisjZGVmaW5lIFBXTUNfUkVQRUFUX01BU0sJMHgwMDBjCS8qIFNhbXBsZSBSZXBlYXRzICovCisjZGVmaW5lIFBXTUNfUkVQRUFUX1NISUZUCTIKKyNkZWZpbmUgUFdNQ19FTgkJCTB4MDAxMAkvKiBFbmFibGUgUFdNICovCisjZGVmaW5lIFBNTkNfRklGT0FWCQkweDAwMjAJLyogRklGTyBBdmFpbGFibGUgKi8KKyNkZWZpbmUgUFdNQ19JUlFFTgkJMHgwMDQwCS8qIEludGVycnVwdCBSZXF1ZXN0IEVuYWJsZSAqLworI2RlZmluZSBQV01DX0lSUQkJMHgwMDgwCS8qIEludGVycnVwdCBSZXF1ZXN0IChGSUZPIGVtcHR5KSAqLworI2RlZmluZSBQV01DX1BSRVNDQUxFUl9NQVNLCTB4N2YwMAkvKiBJbmNvbWluZyBDbG9jayBwcmVzY2FsZXIgKi8KKyNkZWZpbmUgUFdNQ19QUkVTQ0FMRVJfU0hJRlQJOAorI2RlZmluZSBQV01DX0NMS1NSQwkJMHg4MDAwCS8qIENsb2NrIFNvdXJjZSBTZWxlY3QgKi8KKworLyogJzMyOC1jb21wYXRpYmxlIGRlZmluaXRpb25zICovCisjZGVmaW5lIFBXTUNfUFdNRU4JUFdNQ19FTgorCisvKgorICogUFdNIFNhbXBsZSBSZWdpc3RlciAKKyAqLworI2RlZmluZSBQV01TX0FERFIJMHhmZmZmZjUwMgorI2RlZmluZSBQV01TCQlXT1JEX1JFRihQV01TX0FERFIpCisKKy8qCisgKiBQV00gUGVyaW9kIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgUFdNUF9BRERSCTB4ZmZmZmY1MDQKKyNkZWZpbmUgUFdNUAkJQllURV9SRUYoUFdNUF9BRERSKQorCisvKgorICogUFdNIENvdW50ZXIgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBQV01DTlRfQUREUgkweGZmZmZmNTA1CisjZGVmaW5lIFBXTUNOVAkJQllURV9SRUYoUFdNQ05UX0FERFIpCisKKy8qKioqKioqKioqCisgKgorICogMHhGRkZGRjZ4eCAtLSBHZW5lcmFsLVB1cnBvc2UgVGltZXIKKyAqCisgKioqKioqKioqKi8KKworLyogCisgKiBUaW1lciBDb250cm9sIHJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgVENUTF9BRERSCTB4ZmZmZmY2MDAKKyNkZWZpbmUgVENUTAkJV09SRF9SRUYoVENUTF9BRERSKQorCisjZGVmaW5lCVRDVExfVEVOCQkweDAwMDEJLyogVGltZXIgRW5hYmxlICAqLworI2RlZmluZSBUQ1RMX0NMS1NPVVJDRV9NQVNLIAkweDAwMGUJLyogQ2xvY2sgU291cmNlOiAqLworI2RlZmluZSAgIFRDVExfQ0xLU09VUkNFX1NUT1AJICAgMHgwMDAwCS8qIFN0b3AgY291bnQgKGRpc2FibGVkKSAgICAqLworI2RlZmluZSAgIFRDVExfQ0xLU09VUkNFX1NZU0NMSwkgICAweDAwMDIJLyogU1lTQ0xLIHRvIHByZXNjYWxlciAgICAgICovCisjZGVmaW5lICAgVENUTF9DTEtTT1VSQ0VfU1lTQ0xLXzE2IDB4MDAwNAkvKiBTWVNDTEsvMTYgdG8gcHJlc2NhbGVyICAgKi8KKyNkZWZpbmUgICBUQ1RMX0NMS1NPVVJDRV9USU4JICAgMHgwMDA2CS8qIFRJTiB0byBwcmVzY2FsZXIgICAgICAgICAqLworI2RlZmluZSAgIFRDVExfQ0xLU09VUkNFXzMyS0haCSAgIDB4MDAwOAkvKiAzMmtIeiBjbG9jayB0byBwcmVzY2FsZXIgKi8KKyNkZWZpbmUgVENUTF9JUlFFTgkJMHgwMDEwCS8qIElSUSBFbmFibGUgICAgKi8KKyNkZWZpbmUgVENUTF9PTQkJCTB4MDAyMAkvKiBPdXRwdXQgTW9kZSAgICovCisjZGVmaW5lIFRDVExfQ0FQX01BU0sJCTB4MDBjMAkvKiBDYXB0dXJlIEVkZ2U6ICovCisjZGVmaW5lCSAgVENUTF9DQVBfUkUJCTB4MDA0MAkJLyogQ2FwdHVyZSBvbiByaXppbmcgZWRnZSAgICovCisjZGVmaW5lICAgVENUTF9DQVBfRkUJCTB4MDA4MAkJLyogQ2FwdHVyZSBvbiBmYWxsaW5nIGVkZ2UgICovCisjZGVmaW5lIFRDVExfRlJSCQkweDAwMTAJLyogRnJlZS1SdW4gTW9kZSAqLworCisvKiAnMzI4LWNvbXBhdGlibGUgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgVENUTDFfQUREUglUQ1RMX0FERFIKKyNkZWZpbmUgVENUTDEJCVRDVEwKKworLyoKKyAqIFRpbWVyIFByZXNjYWxlciBSZWdpc3RlcgorICovCisjZGVmaW5lIFRQUkVSX0FERFIJMHhmZmZmZjYwMgorI2RlZmluZSBUUFJFUgkJV09SRF9SRUYoVFBSRVJfQUREUikKKworLyogJzMyOC1jb21wYXRpYmxlIGRlZmluaXRpb25zICovCisjZGVmaW5lIFRQUkVSMV9BRERSCVRQUkVSX0FERFIKKyNkZWZpbmUgVFBSRVIxCQlUUFJFUgorCisvKgorICogVGltZXIgQ29tcGFyZSBSZWdpc3RlcgorICovCisjZGVmaW5lIFRDTVBfQUREUgkweGZmZmZmNjA0CisjZGVmaW5lIFRDTVAJCVdPUkRfUkVGKFRDTVBfQUREUikKKworLyogJzMyOC1jb21wYXRpYmxlIGRlZmluaXRpb25zICovCisjZGVmaW5lIFRDTVAxX0FERFIJVENNUF9BRERSCisjZGVmaW5lIFRDTVAxCQlUQ01QCisKKy8qCisgKiBUaW1lciBDYXB0dXJlIHJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgVENSX0FERFIJMHhmZmZmZjYwNgorI2RlZmluZSBUQ1IJCVdPUkRfUkVGKFRDUl9BRERSKQorCisvKiAnMzI4LWNvbXBhdGlibGUgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgVENSMV9BRERSCVRDUl9BRERSCisjZGVmaW5lIFRDUjEJCVRDUgorCisvKgorICogVGltZXIgQ291bnRlciBSZWdpc3RlcgorICovCisjZGVmaW5lIFRDTl9BRERSCTB4ZmZmZmY2MDgKKyNkZWZpbmUgVENOCQlXT1JEX1JFRihUQ05fQUREUikKKworLyogJzMyOC1jb21wYXRpYmxlIGRlZmluaXRpb25zICovCisjZGVmaW5lIFRDTjFfQUREUglUQ05fQUREUgorI2RlZmluZSBUQ04xCQlUQ04KKworLyoKKyAqIFRpbWVyIFN0YXR1cyBSZWdpc3RlcgorICovCisjZGVmaW5lIFRTVEFUX0FERFIJMHhmZmZmZjYwYQorI2RlZmluZSBUU1RBVAkJV09SRF9SRUYoVFNUQVRfQUREUikKKworI2RlZmluZSBUU1RBVF9DT01QCTB4MDAwMQkJLyogQ29tcGFyZSBFdmVudCBvY2N1cnJlZCAqLworI2RlZmluZSBUU1RBVF9DQVBUCTB4MDAwMQkJLyogQ2FwdHVyZSBFdmVudCBvY2N1cnJlZCAqLworCisvKiAnMzI4LWNvbXBhdGlibGUgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgVFNUQVQxX0FERFIJVFNUQVRfQUREUgorI2RlZmluZSBUU1RBVDEJCVRTVEFUCisKKy8qKioqKioqKioqCisgKgorICogMHhGRkZGRjh4eCAtLSBTZXJpYWwgUGVyaWZlcmlhbCBJbnRlcmZhY2UgTWFzdGVyIChTUElNKQorICoKKyAqKioqKioqKioqLworCisvKgorICogU1BJTSBEYXRhIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgU1BJTURBVEFfQUREUgkweGZmZmZmODAwCisjZGVmaW5lIFNQSU1EQVRBCVdPUkRfUkVGKFNQSU1EQVRBX0FERFIpCisKKy8qCisgKiBTUElNIENvbnRyb2wvU3RhdHVzIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgU1BJTUNPTlRfQUREUgkweGZmZmZmODAyCisjZGVmaW5lIFNQSU1DT05UCVdPUkRfUkVGKFNQSU1DT05UX0FERFIpCisKKyNkZWZpbmUgU1BJTUNPTlRfQklUX0NPVU5UX01BU0sJIDB4MDAwZgkvKiBUcmFuc2ZlciBMZW5ndGggaW4gQnl0ZXMgKi8KKyNkZWZpbmUgU1BJTUNPTlRfQklUX0NPVU5UX1NISUZUIDAKKyNkZWZpbmUgU1BJTUNPTlRfUE9MCQkgMHgwMDEwCS8qIFNQTUNMSyBTaWduZWwgUG9sYXJpdHkgKi8KKyNkZWZpbmUJU1BJTUNPTlRfUEhBCQkgMHgwMDIwCS8qIENsb2NrL0RhdGEgcGhhc2UgcmVsYXRpb25zaGlwICovCisjZGVmaW5lIFNQSU1DT05UX0lSUUVOCQkgMHgwMDQwIC8qIElSUSBFbmFibGUgKi8KKyNkZWZpbmUgU1BJTUNPTlRfSVJRCQkgMHgwMDgwCS8qIEludGVycnVwdCBSZXF1ZXN0ICovCisjZGVmaW5lIFNQSU1DT05UX1hDSAkJIDB4MDEwMAkvKiBFeGNoYW5nZSAqLworI2RlZmluZSBTUElNQ09OVF9FTkFCTEUJCSAweDAyMDAJLyogRW5hYmxlIFNQSU0gKi8KKyNkZWZpbmUgU1BJTUNPTlRfREFUQV9SQVRFX01BU0sJIDB4ZTAwMAkvKiBTUElNIERhdGEgUmF0ZSAqLworI2RlZmluZSBTUElNQ09OVF9EQVRBX1JBVEVfU0hJRlQgMTMKKworLyogJzMyOC1jb21wYXRpYmxlIGRlZmluaXRpb25zICovCisjZGVmaW5lIFNQSU1DT05UX1NQSU1JUlEJU1BJTUNPTlRfSVJRCisjZGVmaW5lIFNQSU1DT05UX1NQSU1FTgkJU1BJTUNPTlRfRU5BQkxFCisKKy8qKioqKioqKioqCisgKgorICogMHhGRkZGRjl4eCAtLSBVQVJUCisgKgorICoqKioqKioqKiovCisKKy8qCisgKiBVQVJUIFN0YXR1cy9Db250cm9sIFJlZ2lzdGVyCisgKi8KKworI2RlZmluZSBVU1RDTlRfQUREUgkweGZmZmZmOTAwCisjZGVmaW5lIFVTVENOVAkJV09SRF9SRUYoVVNUQ05UX0FERFIpCisKKyNkZWZpbmUgVVNUQ05UX1RYQUUJMHgwMDAxCS8qIFRyYW5zbWl0dGVyIEF2YWlsYWJsZSBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIFVTVENOVF9UWEhFCTB4MDAwMgkvKiBUcmFuc21pdHRlciBIYWxmIEVtcHR5IEVuYWJsZSAqLworI2RlZmluZSBVU1RDTlRfVFhFRQkweDAwMDQJLyogVHJhbnNtaXR0ZXIgRW1wdHkgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBVU1RDTlRfUlhSRQkweDAwMDgJLyogUmVjZWl2ZXIgUmVhZHkgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBVU1RDTlRfUlhIRQkweDAwMTAJLyogUmVjZWl2ZXIgSGFsZi1GdWxsIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgVVNUQ05UX1JYRkUJMHgwMDIwCS8qIFJlY2VpdmVyIEZ1bGwgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBVU1RDTlRfQ1RTRAkweDAwNDAJLyogQ1RTIERlbHRhIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgVVNUQ05UX09ERU4JMHgwMDgwCS8qIE9sZCBEYXRhIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgVVNUQ05UXzhfNwkweDAxMDAJLyogRWlnaHQgb3Igc2V2ZW4tYml0IHRyYW5zbWlzc2lvbiAqLworI2RlZmluZSBVU1RDTlRfU1RPUAkweDAyMDAJLyogU3RvcCBiaXQgdHJhbnNtaXNzaW9uICovCisjZGVmaW5lIFVTVENOVF9PREQJMHgwNDAwCS8qIE9kZCBQYXJpdHkgKi8KKyNkZWZpbmUJVVNUQ05UX1BFTgkweDA4MDAJLyogUGFyaXR5IEVuYWJsZSAqLworI2RlZmluZSBVU1RDTlRfQ0xLTQkweDEwMDAJLyogQ2xvY2sgTW9kZSBTZWxlY3QgKi8KKyNkZWZpbmUJVVNUQ05UX1RYRU4JMHgyMDAwCS8qIFRyYW5zbWl0dGVyIEVuYWJsZSAqLworI2RlZmluZSBVU1RDTlRfUlhFTgkweDQwMDAJLyogUmVjZWl2ZXIgRW5hYmxlICovCisjZGVmaW5lIFVTVENOVF9VRU4JMHg4MDAwCS8qIFVBUlQgRW5hYmxlICovCisKKy8qICczMjgtY29tcGF0aWJsZSBkZWZpbml0aW9ucyAqLworI2RlZmluZSBVU1RDTlRfVFhBVkFJTEVOCVVTVENOVF9UWEFFCisjZGVmaW5lIFVTVENOVF9UWEhBTEZFTgkJVVNUQ05UX1RYSEUKKyNkZWZpbmUgVVNUQ05UX1RYRU1QVFlFTglVU1RDTlRfVFhFRQorI2RlZmluZSBVU1RDTlRfUlhSRUFEWUVOCVVTVENOVF9SWFJFCisjZGVmaW5lIFVTVENOVF9SWEhBTEZFTgkJVVNUQ05UX1JYSEUKKyNkZWZpbmUgVVNUQ05UX1JYRlVMTEVOCQlVU1RDTlRfUlhGRQorI2RlZmluZSBVU1RDTlRfQ1RTREVMVEFFTglVU1RDTlRfQ1RTRAorI2RlZmluZSBVU1RDTlRfT0REX0VWRU4JCVVTVENOVF9PREQKKyNkZWZpbmUgVVNUQ05UX1BBUklUWUVOCQlVU1RDTlRfUEVOCisjZGVmaW5lIFVTVENOVF9DTEtNT0RFCQlVU1RDTlRfQ0xLTQorI2RlZmluZSBVU1RDTlRfVUFSVEVOCQlVU1RDTlRfVUVOCisKKy8qCisgKiBVQVJUIEJhdWQgQ29udHJvbCBSZWdpc3RlcgorICovCisjZGVmaW5lIFVCQVVEX0FERFIJMHhmZmZmZjkwMgorI2RlZmluZSBVQkFVRAkJV09SRF9SRUYoVUJBVURfQUREUikKKworI2RlZmluZSBVQkFVRF9QUkVTQ0FMRVJfTUFTSwkweDAwM2YJLyogQWN0dWFsIGRpdmlzb3IgaXMgNjUgLSBQUkVTQ0FMRVIgKi8KKyNkZWZpbmUgVUJBVURfUFJFU0NBTEVSX1NISUZUCTAKKyNkZWZpbmUgVUJBVURfRElWSURFX01BU0sJMHgwNzAwCS8qIEJhdWQgUmF0ZSBmcmVxLiBkaXZpem9yICovCisjZGVmaW5lIFVCQVVEX0RJVklERV9TSElGVAk4CisjZGVmaW5lIFVCQVVEX0JBVURfU1JDCQkweDA4MDAJLyogQmF1ZCBSYXRlIFNvdXJjZSAqLworI2RlZmluZSBVQkFVRF9VQ0xLRElSCQkweDIwMDAJLyogVUNMSyBEaXJlY3Rpb24gKi8KKworLyoKKyAqIFVBUlQgUmVjZWl2ZXIgUmVnaXN0ZXIgCisgKi8KKyNkZWZpbmUgVVJYX0FERFIJMHhmZmZmZjkwNAorI2RlZmluZSBVUlgJCVdPUkRfUkVGKFVSWF9BRERSKQorCisjZGVmaW5lIFVSWF9SWERBVEFfQUREUgkweGZmZmZmOTA1CisjZGVmaW5lIFVSWF9SWERBVEEJQllURV9SRUYoVVJYX1JYREFUQV9BRERSKQorCisjZGVmaW5lIFVSWF9SWERBVEFfTUFTSwkgMHgwMGZmCS8qIFJlY2VpdmVkIGRhdGEgKi8KKyNkZWZpbmUgVVJYX1JYREFUQV9TSElGVCAwCisjZGVmaW5lIFVSWF9QQVJJVFlfRVJST1IgMHgwMTAwCS8qIFBhcml0eSBFcnJvciAqLworI2RlZmluZSBVUlhfQlJFQUsJIDB4MDIwMAkvKiBCcmVhayBEZXRlY3RlZCAqLworI2RlZmluZSBVUlhfRlJBTUVfRVJST1IJIDB4MDQwMAkvKiBGcmFtaW5nIEVycm9yICovCisjZGVmaW5lIFVSWF9PVlJVTgkgMHgwODAwCS8qIFNlcmlhbCBPdmVycnVuICovCisjZGVmaW5lIFVSWF9PTERfREFUQQkgMHgxMDAwCS8qIE9sZCBkYXRhIGluIEZJRk8gKi8KKyNkZWZpbmUgVVJYX0RBVEFfUkVBRFkJIDB4MjAwMAkvKiBEYXRhIFJlYWR5IChGSUZPIG5vdCBlbXB0eSkgKi8KKyNkZWZpbmUgVVJYX0ZJRk9fSEFMRgkgMHg0MDAwIC8qIEZJRk8gaXMgSGFsZi1GdWxsICovCisjZGVmaW5lIFVSWF9GSUZPX0ZVTEwJIDB4ODAwMAkvKiBGSUZPIGlzIEZ1bGwgKi8KKworLyoKKyAqIFVBUlQgVHJhbnNtaXR0ZXIgUmVnaXN0ZXIgCisgKi8KKyNkZWZpbmUgVVRYX0FERFIJMHhmZmZmZjkwNgorI2RlZmluZSBVVFgJCVdPUkRfUkVGKFVUWF9BRERSKQorCisjZGVmaW5lIFVUWF9UWERBVEFfQUREUgkweGZmZmZmOTA3CisjZGVmaW5lIFVUWF9UWERBVEEJQllURV9SRUYoVVRYX1RYREFUQV9BRERSKQorCisjZGVmaW5lIFVUWF9UWERBVEFfTUFTSwkgMHgwMGZmCS8qIERhdGEgdG8gYmUgdHJhbnNtaXR0ZWQgKi8KKyNkZWZpbmUgVVRYX1RYREFUQV9TSElGVCAwCisjZGVmaW5lIFVUWF9DVFNfREVMVEEJIDB4MDEwMAkvKiBDVFMgY2hhbmdlZCAqLworI2RlZmluZSBVVFhfQ1RTX1NUQVQJIDB4MDIwMAkvKiBDVFMgU3RhdGUgKi8KKyNkZWZpbmUJVVRYX0JVU1kJIDB4MDQwMAkvKiBGSUZPIGlzIGJ1c3ksIHNlbmRpbmcgYSBjaGFyYWN0ZXIgKi8KKyNkZWZpbmUJVVRYX05PQ1RTCSAweDA4MDAJLyogSWdub3JlIENUUyAqLworI2RlZmluZSBVVFhfU0VORF9CUkVBSwkgMHgxMDAwCS8qIFNlbmQgYSBCUkVBSyAqLworI2RlZmluZSBVVFhfVFhfQVZBSUwJIDB4MjAwMAkvKiBUcmFuc21pdCBGSUZPIGhhcyBhIHNsb3QgYXZhaWxhYmxlICovCisjZGVmaW5lIFVUWF9GSUZPX0hBTEYJIDB4NDAwMAkvKiBUcmFuc21pdCBGSUZPIGlzIGhhbGYgZW1wdHkgKi8KKyNkZWZpbmUgVVRYX0ZJRk9fRU1QVFkJIDB4ODAwMAkvKiBUcmFuc21pdCBGSUZPIGlzIGVtcHR5ICovCisKKy8qICczMjgtY29tcGF0aWJsZSBkZWZpbml0aW9ucyAqLworI2RlZmluZSBVVFhfQ1RTX1NUQVRVUwlVVFhfQ1RTX1NUQVQKKyNkZWZpbmUgVVRYX0lHTk9SRV9DVFMJVVRYX05PQ1RTCisKKy8qCisgKiBVQVJUIE1pc2NlbGxhbmVvdXMgUmVnaXN0ZXIgCisgKi8KKyNkZWZpbmUgVU1JU0NfQUREUgkweGZmZmZmOTA4CisjZGVmaW5lIFVNSVNDCQlXT1JEX1JFRihVTUlTQ19BRERSKQorCisjZGVmaW5lIFVNSVNDX1RYX1BPTAkgMHgwMDA0CS8qIFRyYW5zbWl0IFBvbGFyaXR5ICovCisjZGVmaW5lIFVNSVNDX1JYX1BPTAkgMHgwMDA4CS8qIFJlY2VpdmUgUG9sYXJpdHkgKi8KKyNkZWZpbmUgVU1JU0NfSVJEQV9MT09QCSAweDAwMTAJLyogSXJEQSBMb29wYmFjayBFbmFibGUgKi8KKyNkZWZpbmUgVU1JU0NfSVJEQV9FTgkgMHgwMDIwCS8qIEluZnJhLVJlZCBFbmFibGUgKi8KKyNkZWZpbmUgVU1JU0NfUlRTCSAweDAwNDAJLyogU2V0IFJUUyBzdGF0dXMgKi8KKyNkZWZpbmUgVU1JU0NfUlRTQ09OVAkgMHgwMDgwCS8qIENob29zZSBSVFMgY29udHJvbCAqLworI2RlZmluZSBVTUlTQ19JUl9URVNUCSAweDA0MDAJLyogSVJEQSBUZXN0IEVuYWJsZSAqLworI2RlZmluZSBVTUlTQ19CQVVEX1JFU0VUIDB4MDgwMAkvKiBSZXNldCBCYXVkIFJhdGUgR2VuZXJhdGlvbiBDb3VudGVycyAqLworI2RlZmluZSBVTUlTQ19MT09QCSAweDEwMDAJLyogU2VyaWFsIExvb3BiYWNrIEVuYWJsZSAqLworI2RlZmluZSBVTUlTQ19GT1JDRV9QRVJSIDB4MjAwMAkvKiBGb3JjZSBQYXJpdHkgRXJyb3IgKi8KKyNkZWZpbmUgVU1JU0NfQ0xLU1JDCSAweDQwMDAJLyogQ2xvY2sgU291cmNlICovCisjZGVmaW5lIFVNSVNDX0JBVURfVEVTVAkgMHg4MDAwCS8qIEVuYWJsZSBCYXVkIFRlc3QgTW9kZSAqLworCisvKiAKKyAqIFVBUlQgTm9uLWludGVnZXIgUHJlc2NhbGVyIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgTklQUl9BRERSCTB4ZmZmZmY5MGEKKyNkZWZpbmUgTklQUgkJV09SRF9SRUYoTklQUl9BRERSKQorCisjZGVmaW5lIE5JUFJfU1RFUF9WQUxVRV9NQVNLCTB4MDBmZgkvKiBOSSBwcmVzY2FsZXIgc3RlcCB2YWx1ZSAqLworI2RlZmluZSBOSVBSX1NURVBfVkFMVUVfU0hJRlQJMAorI2RlZmluZSBOSVBSX1NFTEVDVF9NQVNLCTB4MDcwMAkvKiBUYXAgU2VsZWN0aW9uICovCisjZGVmaW5lIE5JUFJfU0VMRUNUX1NISUZUCTgKKyNkZWZpbmUgTklQUl9QUkVfU0VMCQkweDgwMDAJLyogTm9uLWludGVnZXIgcHJlc2NhbGVyIHNlbGVjdCAqLworCisKKy8qIGdlbmVyYWxpemF0aW9uIG9mIHVhcnQgY29udHJvbCByZWdpc3RlcnMgdG8gc3VwcG9ydCBtdWx0aXBsZSBwb3J0czogKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IHVzdGNudDsKKyAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IHViYXVkOworICB1bmlvbiB7CisgICAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IHc7CisgICAgc3RydWN0IHsKKyAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgc3RhdHVzOworICAgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciByeGRhdGE7CisgICAgfSBiOworICB9IHVyeDsKKyAgdW5pb24geworICAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCB3OworICAgIHN0cnVjdCB7CisgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIHN0YXR1czsKKyAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgdHhkYXRhOworICAgIH0gYjsKKyAgfSB1dHg7CisgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCB1bWlzYzsKKyAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IG5pcHI7CisgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBobWFyazsKKyAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IHVudXNlZDsKK30gbTY4MzI4X3VhcnQgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKworCisKKy8qKioqKioqKioqCisgKgorICogMHhGRkZGRkF4eCAtLSBMQ0QgQ29udHJvbGxlcgorICoKKyAqKioqKioqKioqLworCisvKgorICogTENEIFNjcmVlbiBTdGFydGluZyBBZGRyZXNzIFJlZ2lzdGVyIAorICovCisjZGVmaW5lIExTU0FfQUREUgkweGZmZmZmYTAwCisjZGVmaW5lIExTU0EJCUxPTkdfUkVGKExTU0FfQUREUikKKworI2RlZmluZSBMU1NBX1NTQV9NQVNLCTB4MWZmZmZmZmUJLyogQml0cyAwIGFuZCAyOS0zMSBhcmUgcmVzZXJ2ZWQgKi8KKworLyoKKyAqIExDRCBWaXJ0dWFsIFBhZ2UgV2lkdGggUmVnaXN0ZXIgCisgKi8KKyNkZWZpbmUgTFZQV19BRERSCTB4ZmZmZmZhMDUKKyNkZWZpbmUgTFZQVwkJQllURV9SRUYoTFZQV19BRERSKQorCisvKgorICogTENEIFNjcmVlbiBXaWR0aCBSZWdpc3RlciAobm90IGNvbXBhdGlibGUgd2l0aCAnMzI4ICEhISkgCisgKi8KKyNkZWZpbmUgTFhNQVhfQUREUgkweGZmZmZmYTA4CisjZGVmaW5lIExYTUFYCQlXT1JEX1JFRihMWE1BWF9BRERSKQorCisjZGVmaW5lIExYTUFYX1hNX01BU0sJMHgwMmYwCQkvKiBCaXRzIDAtMyBhbmQgMTAtMTUgYXJlIHJlc2VydmVkICovCisKKy8qCisgKiBMQ0QgU2NyZWVuIEhlaWdodCBSZWdpc3RlcgorICovCisjZGVmaW5lIExZTUFYX0FERFIJMHhmZmZmZmEwYQorI2RlZmluZSBMWU1BWAkJV09SRF9SRUYoTFlNQVhfQUREUikKKworI2RlZmluZSBMWU1BWF9ZTV9NQVNLCTB4MDFmZgkJLyogQml0cyA5LTE1IGFyZSByZXNlcnZlZCAqLworCisvKgorICogTENEIEN1cnNvciBYIFBvc2l0aW9uIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgTENYUF9BRERSCTB4ZmZmZmZhMTgKKyNkZWZpbmUgTENYUAkJV09SRF9SRUYoTENYUF9BRERSKQorCisjZGVmaW5lIExDWFBfQ0NfTUFTSwkweGMwMDAJCS8qIEN1cnNvciBDb250cm9sICovCisjZGVmaW5lICAgTENYUF9DQ19UUkFNU1BBUkVOVAkweDAwMDAKKyNkZWZpbmUgICBMQ1hQX0NDX0JMQUNLCQkweDQwMDAKKyNkZWZpbmUgICBMQ1hQX0NDX1JFVkVSU0VECTB4ODAwMAorI2RlZmluZSAgIExDWFBfQ0NfV0hJVEUJCTB4YzAwMAorI2RlZmluZSBMQ1hQX0NYUF9NQVNLCTB4MDJmZgkJLyogQ3Vyc29yIFggcG9zaXRpb24gKi8KKworLyoKKyAqIExDRCBDdXJzb3IgWSBQb3NpdGlvbiBSZWdpc3RlcgorICovCisjZGVmaW5lIExDWVBfQUREUgkweGZmZmZmYTFhCisjZGVmaW5lIExDWVAJCVdPUkRfUkVGKExDWVBfQUREUikKKworI2RlZmluZSBMQ1lQX0NZUF9NQVNLCTB4MDFmZgkJLyogQ3Vyc29yIFkgUG9zaXRpb24gKi8KKworLyoKKyAqIExDRCBDdXJzb3IgV2lkdGggYW5kIEhlaWd0aCBSZWdpc3RlcgorICovCisjZGVmaW5lIExDV0NIX0FERFIJMHhmZmZmZmExYworI2RlZmluZSBMQ1dDSAkJV09SRF9SRUYoTENXQ0hfQUREUikKKworI2RlZmluZSBMQ1dDSF9DSF9NQVNLCTB4MDAxZgkJLyogQ3Vyc29yIEhlaWdodCAqLworI2RlZmluZSBMQ1dDSF9DSF9TSElGVAkwCisjZGVmaW5lIExDV0NIX0NXX01BU0sJMHgxZjAwCQkvKiBDdXJzb3IgV2lkdGggKi8KKyNkZWZpbmUgTENXQ0hfQ1dfU0hJRlQJOAorCisvKgorICogTENEIEJsaW5rIENvbnRyb2wgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBMQkxLQ19BRERSCTB4ZmZmZmZhMWYKKyNkZWZpbmUgTEJMS0MJCUJZVEVfUkVGKExCTEtDX0FERFIpCisKKyNkZWZpbmUgTEJMS0NfQkRfTUFTSwkweDdmCS8qIEJsaW5rIERpdmlzb3IgKi8KKyNkZWZpbmUgTEJMS0NfQkRfU0hJRlQJMAorI2RlZmluZSBMQkxLQ19CS0VOCTB4ODAJLyogQmxpbmsgRW5hYmxlZCAqLworCisvKgorICogTENEIFBhbmVsIEludGVyZmFjZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIAorICovCisjZGVmaW5lIExQSUNGX0FERFIJMHhmZmZmZmEyMAorI2RlZmluZSBMUElDRgkJQllURV9SRUYoTFBJQ0ZfQUREUikKKworI2RlZmluZSBMUElDRl9HU19NQVNLCSAweDAzCSAvKiBHcmF5LVNjYWxlIE1vZGUgKi8KKyNkZWZpbmUJICBMUElDRl9HU19CVwkgICAweDAwCisjZGVmaW5lICAgTFBJQ0ZfR1NfR1JBWV80ICAweDAxCisjZGVmaW5lICAgTFBJQ0ZfR1NfR1JBWV8xNiAweDAyCisjZGVmaW5lIExQSUNGX1BCU0laX01BU0sgMHgwYwkvKiBQYW5lbCBCdXMgV2lkdGggKi8KKyNkZWZpbmUgICBMUElDRl9QQlNJWl8xCSAgIDB4MDAKKyNkZWZpbmUgICBMUElDRl9QQlNJWl8yICAgIDB4MDQKKyNkZWZpbmUgICBMUElDRl9QQlNJWl80ICAgIDB4MDgKKworLyoKKyAqIExDRCBQb2xhcml0eSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIAorICovCisjZGVmaW5lIExQT0xDRl9BRERSCTB4ZmZmZmZhMjEKKyNkZWZpbmUgTFBPTENGCQlCWVRFX1JFRihMUE9MQ0ZfQUREUikKKworI2RlZmluZSBMUE9MQ0ZfUElYUE9MCTB4MDEJLyogUGl4ZWwgUG9sYXJpdHkgKi8KKyNkZWZpbmUgTFBPTENGX0xQUE9MCTB4MDIJLyogTGluZSBQdWxzZSBQb2xhcml0eSAqLworI2RlZmluZSBMUE9MQ0ZfRkxNUE9MCTB4MDQJLyogRnJhbWUgTWFya2VyIFBvbGFyaXR5ICovCisjZGVmaW5lIExQT0xDRl9MQ0tQT0wJMHgwOAkvKiBMQ0QgU2hpZnQgTG9jayBQb2xhcml0eSAqLworCisvKgorICogTEFDRCAoTENEIEFsdGVybmF0ZSBDcnlzdGFsIERpcmVjdGlvbikgUmF0ZSBDb250cm9sIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgTEFDRFJDX0FERFIJMHhmZmZmZmEyMworI2RlZmluZSBMQUNEUkMJCUJZVEVfUkVGKExBQ0RSQ19BRERSKQorCisjZGVmaW5lIExBQ0RSQ19BQ0RTTFQJIDB4ODAJLyogU2lnbmFsIFNvdXJjZSBTZWxlY3QgKi8KKyNkZWZpbmUgTEFDRFJDX0FDRF9NQVNLCSAweDBmCS8qIEFsdGVybmF0ZSBDcnlzdGFsIERpcmVjdGlvbiBDb250cm9sICovCisjZGVmaW5lIExBQ0RSQ19BQ0RfU0hJRlQgMAorCisvKgorICogTENEIFBpeGVsIENsb2NrIERpdmlkZXIgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBMUFhDRF9BRERSCTB4ZmZmZmZhMjUKKyNkZWZpbmUgTFBYQ0QJCUJZVEVfUkVGKExQWENEX0FERFIpCisKKyNkZWZpbmUJTFBYQ0RfUENEX01BU0sJMHgzZiAJLyogUGl4ZWwgQ2xvY2sgRGl2aWRlciAqLworI2RlZmluZSBMUFhDRF9QQ0RfU0hJRlQJMAorCisvKgorICogTENEIENsb2NraW5nIENvbnRyb2wgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBMQ0tDT05fQUREUgkweGZmZmZmYTI3CisjZGVmaW5lIExDS0NPTgkJQllURV9SRUYoTENLQ09OX0FERFIpCisKKyNkZWZpbmUgTENLQ09OX0RXU19NQVNLCSAweDBmCS8qIERpc3BsYXkgV2FpdC1TdGF0ZSAqLworI2RlZmluZSBMQ0tDT05fRFdTX1NISUZUIDAKKyNkZWZpbmUgTENLQ09OX0RXSURUSAkgMHg0MAkvKiBEaXNwbGF5IE1lbW9yeSBXaWR0aCAgKi8KKyNkZWZpbmUgTENLQ09OX0xDRE9OCSAweDgwCS8qIEVuYWJsZSBMQ0QgQ29udHJvbGxlciAqLworCisvKiAnMzI4LWNvbXBhdGlibGUgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgTENLQ09OX0RXX01BU0sgIExDS0NPTl9EV1NfTUFTSworI2RlZmluZSBMQ0tDT05fRFdfU0hJRlQgTENLQ09OX0RXU19TSElGVAorIAorLyoKKyAqIExDRCBSZWZyZXNoIFJhdGUgQWRqdXN0bWVudCBSZWdpc3RlciAKKyAqLworI2RlZmluZSBMUlJBX0FERFIJMHhmZmZmZmEyOQorI2RlZmluZSBMUlJBCQlCWVRFX1JFRihMUlJBX0FERFIpCisKKy8qCisgKiBMQ0QgUGFubmluZyBPZmZzZXQgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBMUE9TUl9BRERSCTB4ZmZmZmZhMmQKKyNkZWZpbmUgTFBPU1IJCUJZVEVfUkVGKExQT1NSX0FERFIpCisKKyNkZWZpbmUgTFBPU1JfUE9TX01BU0sJMHgwZgkvKiBQaXhlbCBPZmZzZXQgQ29kZSAqLworI2RlZmluZSBMUE9TUl9QT1NfU0hJRlQJMAorCisvKgorICogTENEIEZyYW1lIFJhdGUgQ29udHJvbCBNb2R1bGF0aW9uIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgTEZSQ01fQUREUgkweGZmZmZmYTMxCisjZGVmaW5lIExGUkNNCQlCWVRFX1JFRihMRlJDTV9BRERSKQorCisjZGVmaW5lIExGUkNNX1lNT0RfTUFTSwkgMHgwZgkvKiBWZXJ0aWNhbCBNb2R1bGF0aW9uICovCisjZGVmaW5lIExGUkNNX1lNT0RfU0hJRlQgMAorI2RlZmluZSBMRlJDTV9YTU9EX01BU0sJIDB4ZjAJLyogSG9yaXpvbnRhbCBNb2R1bGF0aW9uICovCisjZGVmaW5lIExGUkNNX1hNT0RfU0hJRlQgNAorCisvKgorICogTENEIEdyYXkgUGFsZXR0ZSBNYXBwaW5nIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgTEdQTVJfQUREUgkweGZmZmZmYTMzCisjZGVmaW5lIExHUE1SCQlCWVRFX1JFRihMR1BNUl9BRERSKQorCisjZGVmaW5lIExHUE1SX0cxX01BU0sJMHgwZgorI2RlZmluZSBMR1BNUl9HMV9TSElGVAkwCisjZGVmaW5lIExHUE1SX0cyX01BU0sJMHhmMAorI2RlZmluZSBMR1BNUl9HMl9TSElGVAk0CisKKy8qIAorICogUFdNIENvbnRyYXN0IENvbnRyb2wgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBQV01SX0FERFIJMHhmZmZmZmEzNgorI2RlZmluZSBQV01SCQlXT1JEX1JFRihQV01SX0FERFIpCisKKyNkZWZpbmUgUFdNUl9QV19NQVNLCTB4MDBmZgkvKiBQdWxzZSBXaWR0aCAqLworI2RlZmluZSBQV01SX1BXX1NISUZUCTAKKyNkZWZpbmUgUFdNUl9DQ1BFTgkweDAxMDAJLyogQ29udHJhc3QgQ29udHJvbCBFbmFibGUgKi8KKyNkZWZpbmUgUFdNUl9TUkNfTUFTSwkweDA2MDAJLyogSW5wdXQgQ2xvY2sgU291cmNlICovCisjZGVmaW5lICAgUFdNUl9TUkNfTElORQkgIDB4MDAwMAkvKiBMaW5lIFB1bHNlICAqLworI2RlZmluZSAgIFBXTVJfU1JDX1BJWEVMICAweDAyMDAJLyogUGl4ZWwgQ2xvY2sgKi8KKyNkZWZpbmUgICBQV01SX1NSQ19MQ0QgICAgMHg0MDAwCS8qIExDRCBjbG9jayAgICovCisKKy8qKioqKioqKioqCisgKgorICogMHhGRkZGRkJ4eCAtLSBSZWFsLVRpbWUgQ2xvY2sgKFJUQykKKyAqCisgKioqKioqKioqKi8KKworLyoKKyAqIFJUQyBIb3VycyBNaW51dGVzIGFuZCBTZWNvbmRzIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgUlRDVElNRV9BRERSCTB4ZmZmZmZiMDAKKyNkZWZpbmUgUlRDVElNRQkJTE9OR19SRUYoUlRDVElNRV9BRERSKQorCisjZGVmaW5lIFJUQ1RJTUVfU0VDT05EU19NQVNLCTB4MDAwMDAwM2YJLyogU2Vjb25kcyAqLworI2RlZmluZSBSVENUSU1FX1NFQ09ORFNfU0hJRlQJMAorI2RlZmluZSBSVENUSU1FX01JTlVURVNfTUFTSwkweDAwM2YwMDAwCS8qIE1pbnV0ZXMgKi8KKyNkZWZpbmUgUlRDVElNRV9NSU5VVEVTX1NISUZUCTE2CisjZGVmaW5lIFJUQ1RJTUVfSE9VUlNfTUFTSwkweDFmMDAwMDAwCS8qIEhvdXJzICovCisjZGVmaW5lIFJUQ1RJTUVfSE9VUlNfU0hJRlQJMjQKKworLyoKKyAqICBSVEMgQWxhcm0gUmVnaXN0ZXIgCisgKi8KKyNkZWZpbmUgUlRDQUxSTV9BRERSICAgIDB4ZmZmZmZiMDQKKyNkZWZpbmUgUlRDQUxSTSAgICAgICAgIExPTkdfUkVGKFJUQ0FMUk1fQUREUikKKworI2RlZmluZSBSVENBTFJNX1NFQ09ORFNfTUFTSyAgICAweDAwMDAwMDNmICAgICAgLyogU2Vjb25kcyAqLworI2RlZmluZSBSVENBTFJNX1NFQ09ORFNfU0hJRlQgICAwCisjZGVmaW5lIFJUQ0FMUk1fTUlOVVRFU19NQVNLICAgIDB4MDAzZjAwMDAgICAgICAvKiBNaW51dGVzICovCisjZGVmaW5lIFJUQ0FMUk1fTUlOVVRFU19TSElGVCAgIDE2CisjZGVmaW5lIFJUQ0FMUk1fSE9VUlNfTUFTSyAgICAgIDB4MWYwMDAwMDAgICAgICAvKiBIb3VycyAqLworI2RlZmluZSBSVENBTFJNX0hPVVJTX1NISUZUICAgICAyNAorCisvKgorICogV2F0Y2hkb2cgVGltZXIgUmVnaXN0ZXIgCisgKi8KKyNkZWZpbmUgV0FUQ0hET0dfQUREUgkweGZmZmZmYjBhCisjZGVmaW5lIFdBVENIRE9HCVdPUkRfUkVGKFdBVENIRE9HX0FERFIpCisKKyNkZWZpbmUgV0FUQ0hET0dfRU4JMHgwMDAxCS8qIFdhdGNoZG9nIEVuYWJsZWQgKi8KKyNkZWZpbmUgV0FUQ0hET0dfSVNFTAkweDAwMDIJLyogU2VsZWN0IHRoZSB3YXRjaGRvZyBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgV0FUQ0hET0dfSU5URgkweDAwODAJLyogV2F0Y2hkb2cgaW50ZXJydXB0IG9jY2N1cmVkICovCisjZGVmaW5lIFdBVENIRE9HX0NOVF9NQVNLICAweDAzMDAJLyogV2F0Y2hkb2cgQ291bnRlciAqLworI2RlZmluZSBXQVRDSERPR19DTlRfU0hJRlQgOAorCisvKgorICogUlRDIENvbnRyb2wgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBSVENDVExfQUREUgkweGZmZmZmYjBjCisjZGVmaW5lIFJUQ0NUTAkJV09SRF9SRUYoUlRDQ1RMX0FERFIpCisKKyNkZWZpbmUgUlRDQ1RMX1hUTAkweDAwMjAJLyogQ3J5c3RhbCBTZWxlY3Rpb24gKi8KKyNkZWZpbmUgUlRDQ1RMX0VOCTB4MDA4MAkvKiBSVEMgRW5hYmxlICovCisKKy8qICczMjgtY29tcGF0aWJsZSBkZWZpbml0aW9ucyAqLworI2RlZmluZSBSVENDVExfMzg0CVJUQ0NUTF9YVEwKKyNkZWZpbmUgUlRDQ1RMX0VOQUJMRQlSVENDVExfRU4KKworLyoKKyAqIFJUQyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIAorICovCisjZGVmaW5lIFJUQ0lTUl9BRERSCTB4ZmZmZmZiMGUKKyNkZWZpbmUgUlRDSVNSCQlXT1JEX1JFRihSVENJU1JfQUREUikKKworI2RlZmluZSBSVENJU1JfU1cJMHgwMDAxCS8qIFN0b3B3YXRjaCB0aW1lZCBvdXQgKi8KKyNkZWZpbmUgUlRDSVNSX01JTgkweDAwMDIJLyogMS1taW51dGUgaW50ZXJydXB0IGhhcyBvY2N1cnJlZCAqLworI2RlZmluZSBSVENJU1JfQUxNCTB4MDAwNAkvKiBBbGFybSBpbnRlcnJ1cHQgaGFzIG9jY3VycmVkICovCisjZGVmaW5lIFJUQ0lTUl9EQVkJMHgwMDA4CS8qIDI0LWhvdXIgcm9sbG92ZXIgaW50ZXJydXB0IGhhcyBvY2N1cnJlZCAqLworI2RlZmluZSBSVENJU1JfMUhaCTB4MDAxMAkvKiAxSHogaW50ZXJydXB0IGhhcyBvY2N1cnJlZCAqLworI2RlZmluZSBSVENJU1JfSFIJMHgwMDIwCS8qIDEtaG91ciBpbnRlcnJ1cHQgaGFzIG9jY3VycmVkICovCisjZGVmaW5lIFJUQ0lTUl9TQU0wCTB4MDEwMAkvKiAgIDRIeiAvICAgNC42ODc1SHogaW50ZXJydXB0IGhhcyBvY2N1cnJlZCAqLyAKKyNkZWZpbmUgUlRDSVNSX1NBTTEJMHgwMjAwCS8qICAgOEh6IC8gICA5LjM3NTBIeiBpbnRlcnJ1cHQgaGFzIG9jY3VycmVkICovIAorI2RlZmluZSBSVENJU1JfU0FNMgkweDA0MDAJLyogIDE2SHogLyAgMTguNzUwMEh6IGludGVycnVwdCBoYXMgb2NjdXJyZWQgKi8gCisjZGVmaW5lIFJUQ0lTUl9TQU0zCTB4MDgwMAkvKiAgMzJIeiAvICAzNy41MDAwSHogaW50ZXJydXB0IGhhcyBvY2N1cnJlZCAqLyAKKyNkZWZpbmUgUlRDSVNSX1NBTTQJMHgxMDAwCS8qICA2NEh6IC8gIDc1LjAwMDBIeiBpbnRlcnJ1cHQgaGFzIG9jY3VycmVkICovIAorI2RlZmluZSBSVENJU1JfU0FNNQkweDIwMDAJLyogMTI4SHogLyAxNTAuMDAwMEh6IGludGVycnVwdCBoYXMgb2NjdXJyZWQgKi8gCisjZGVmaW5lIFJUQ0lTUl9TQU02CTB4NDAwMAkvKiAyNTZIeiAvIDMwMC4wMDAwSHogaW50ZXJydXB0IGhhcyBvY2N1cnJlZCAqLyAKKyNkZWZpbmUgUlRDSVNSX1NBTTcJMHg4MDAwCS8qIDUxMkh6IC8gNjAwLjAwMDBIeiBpbnRlcnJ1cHQgaGFzIG9jY3VycmVkICovIAorCisvKgorICogUlRDIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBSVENJRU5SX0FERFIJMHhmZmZmZmIxMAorI2RlZmluZSBSVENJRU5SCQlXT1JEX1JFRihSVENJRU5SX0FERFIpCisKKyNkZWZpbmUgUlRDSUVOUl9TVwkweDAwMDEJLyogU3RvcHdhdGNoIGludGVycnVwdCBlbmFibGUgKi8KKyNkZWZpbmUgUlRDSUVOUl9NSU4JMHgwMDAyCS8qIDEtbWludXRlIGludGVycnVwdCBlbmFibGUgKi8KKyNkZWZpbmUgUlRDSUVOUl9BTE0JMHgwMDA0CS8qIEFsYXJtIGludGVycnVwdCBlbmFibGUgKi8KKyNkZWZpbmUgUlRDSUVOUl9EQVkJMHgwMDA4CS8qIDI0LWhvdXIgcm9sbG92ZXIgaW50ZXJydXB0IGVuYWJsZSAqLworI2RlZmluZSBSVENJRU5SXzFIWgkweDAwMTAJLyogMUh6IGludGVycnVwdCBlbmFibGUgKi8KKyNkZWZpbmUgUlRDSUVOUl9IUgkweDAwMjAJLyogMS1ob3VyIGludGVycnVwdCBlbmFibGUgKi8KKyNkZWZpbmUgUlRDSUVOUl9TQU0wCTB4MDEwMAkvKiAgIDRIeiAvICAgNC42ODc1SHogaW50ZXJydXB0IGVuYWJsZSAqLyAKKyNkZWZpbmUgUlRDSUVOUl9TQU0xCTB4MDIwMAkvKiAgIDhIeiAvICAgOS4zNzUwSHogaW50ZXJydXB0IGVuYWJsZSAqLyAKKyNkZWZpbmUgUlRDSUVOUl9TQU0yCTB4MDQwMAkvKiAgMTZIeiAvICAxOC43NTAwSHogaW50ZXJydXB0IGVuYWJsZSAqLyAKKyNkZWZpbmUgUlRDSUVOUl9TQU0zCTB4MDgwMAkvKiAgMzJIeiAvICAzNy41MDAwSHogaW50ZXJydXB0IGVuYWJsZSAqLyAKKyNkZWZpbmUgUlRDSUVOUl9TQU00CTB4MTAwMAkvKiAgNjRIeiAvICA3NS4wMDAwSHogaW50ZXJydXB0IGVuYWJsZSAqLyAKKyNkZWZpbmUgUlRDSUVOUl9TQU01CTB4MjAwMAkvKiAxMjhIeiAvIDE1MC4wMDAwSHogaW50ZXJydXB0IGVuYWJsZSAqLyAKKyNkZWZpbmUgUlRDSUVOUl9TQU02CTB4NDAwMAkvKiAyNTZIeiAvIDMwMC4wMDAwSHogaW50ZXJydXB0IGVuYWJsZSAqLyAKKyNkZWZpbmUgUlRDSUVOUl9TQU03CTB4ODAwMAkvKiA1MTJIeiAvIDYwMC4wMDAwSHogaW50ZXJydXB0IGVuYWJsZSAqLyAKKworLyogCisgKiBTdG9wd2F0Y2ggTWludXRlcyBSZWdpc3RlcgorICovCisjZGVmaW5lIFNUUFdDSF9BRERSCTB4ZmZmZmZiMTIKKyNkZWZpbmUgU1RQV0NICQlXT1JEX1JFRihTVFBXQ0hfQUREUikKKworI2RlZmluZSBTVFBXQ0hfQ05UX01BU0sJIDB4MDAzZgkvKiBTdG9wd2F0Y2ggY291bnRkb3duIHZhbHVlICovCisjZGVmaW5lIFNQVFdDSF9DTlRfU0hJRlQgMAorCisvKgorICogUlRDIERheSBDb3VudCBSZWdpc3RlciAKKyAqLworI2RlZmluZSBEQVlSX0FERFIJMHhmZmZmZmIxYQorI2RlZmluZSBEQVlSCQlXT1JEX1JFRihEQVlSX0FERFIpCisKKyNkZWZpbmUgREFZUl9EQVlTX01BU0sJMHgxZmYJLyogRGF5IFNldHRpbmcgKi8KKyNkZWZpbmUgREFZUl9EQVlTX1NISUZUIDAKKworLyoKKyAqIFJUQyBEYXkgQWxhcm0gUmVnaXN0ZXIgCisgKi8KKyNkZWZpbmUgREFZQUxBUk1fQUREUgkweGZmZmZmYjFjCisjZGVmaW5lIERBWUFMQVJNCVdPUkRfUkVGKERBWUFMQVJNX0FERFIpCisKKyNkZWZpbmUgREFZQUxBUk1fREFZU0FMX01BU0sJMHgwMWZmCS8qIERheSBTZXR0aW5nIG9mIHRoZSBBbGFybSAqLworI2RlZmluZSBEQVlBTEFSTV9EQVlTQUxfU0hJRlQgCTAKKworLyoqKioqKioqKioKKyAqCisgKiAweEZGRkZGQ3h4IC0tIERSQU0gQ29udHJvbGxlcgorICoKKyAqKioqKioqKioqLworCisvKgorICogRFJBTSBNZW1vcnkgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAKKyAqLworI2RlZmluZSBEUkFNTUNfQUREUgkweGZmZmZmYzAwCisjZGVmaW5lIERSQU1NQwkJV09SRF9SRUYoRFJBTU1DX0FERFIpCisKKyNkZWZpbmUgRFJBTU1DX1JPVzEyX01BU0sJMHhjMDAwCS8qIFJvdyBhZGRyZXNzIGJpdCBmb3IgTUQxMiAqLworI2RlZmluZSAgIERSQU1NQ19ST1cxMl9QQTEwCTB4MDAwMAorI2RlZmluZSAgIERSQU1NQ19ST1cxMl9QQTIxCTB4NDAwMAkKKyNkZWZpbmUgICBEUkFNTUNfUk9XMTJfUEEyMwkweDgwMDAKKyNkZWZpbmUJRFJBTU1DX1JPVzBfTUFTSwkweDMwMDAJLyogUm93IGFkZHJlc3MgYml0IGZvciBNRDAgKi8KKyNkZWZpbmUJICBEUkFNTUNfUk9XMF9QQTExCTB4MDAwMAorI2RlZmluZSAgIERSQU1NQ19ST1cwX1BBMjIJMHgxMDAwCisjZGVmaW5lICAgRFJBTU1DX1JPVzBfUEEyMwkweDIwMDAKKyNkZWZpbmUgRFJBTU1DX1JPVzExCQkweDA4MDAJLyogUm93IGFkZHJlc3MgYml0IGZvciBNRDExIFBBMjAvUEEyMiAqLworI2RlZmluZSBEUkFNTUNfUk9XMTAJCTB4MDQwMAkvKiBSb3cgYWRkcmVzcyBiaXQgZm9yIE1EMTAgUEExOS9QQTIxICovCisjZGVmaW5lCURSQU1NQ19ST1c5CQkweDAyMDAJLyogUm93IGFkZHJlc3MgYml0IGZvciBNRDkgIFBBOS9QQTE5ICAqLworI2RlZmluZSBEUkFNTUNfUk9XOAkJMHgwMTAwCS8qIFJvdyBhZGRyZXNzIGJpdCBmb3IgTUQ4ICBQQTEwL1BBMjAgKi8KKyNkZWZpbmUgRFJBTU1DX0NPTDEwCQkweDAwODAJLyogQ29sIGFkZHJlc3MgYml0IGZvciBNRDEwIFBBMTEvUEEwICAqLworI2RlZmluZSBEUkFNTUNfQ09MOQkJMHgwMDQwCS8qIENvbCBhZGRyZXNzIGJpdCBmb3IgTUQ5ICBQQTEwL1BBMCAgKi8KKyNkZWZpbmUgRFJBTU1DX0NPTDgJCTB4MDAyMAkvKiBDb2wgYWRkcmVzcyBiaXQgZm9yIE1EOCAgUEE5L1BBMCAgICovCisjZGVmaW5lIERSQU1NQ19SRUZfTUFTSwkJMHgwMDFmCS8qIFJlcmVzaCBDeWNsZSAqLworI2RlZmluZSBEUkFNTUNfUkVGX1NISUZUCTAKKworLyoKKyAqIERSQU0gQ29udHJvbCBSZWdpc3RlcgorICovCisjZGVmaW5lIERSQU1DX0FERFIJMHhmZmZmZmMwMgorI2RlZmluZSBEUkFNQwkJV09SRF9SRUYoRFJBTUNfQUREUikKKworI2RlZmluZSBEUkFNQ19EV0UJICAgMHgwMDAxCS8qIERSQU0gV3JpdGUgRW5hYmxlICovCisjZGVmaW5lIERSQU1DX1JTVAkgICAweDAwMDIJLyogUmVzZXQgQnVyc3QgUmVmcmVzaCBFbmFibGUgKi8KKyNkZWZpbmUgRFJBTUNfTFBSCSAgIDB4MDAwNAkvKiBMb3ctUG93ZXIgUmVmcmVzaCBFbmFibGUgKi8KKyNkZWZpbmUgRFJBTUNfU0xXCSAgIDB4MDAwOAkvKiBTbG93IFJBTSAqLworI2RlZmluZSBEUkFNQ19MU1AJICAgMHgwMDEwCS8qIExpZ2h0IFNsZWVwICovCisjZGVmaW5lIERSQU1DX01TVwkgICAweDAwMjAJLyogU2xvdyBNdWx0aXBsZXhpbmcgKi8KKyNkZWZpbmUgRFJBTUNfV1NfTUFTSwkgICAweDAwYzAJLyogV2FpdC1zdGF0ZXMgKi8KKyNkZWZpbmUgRFJBTUNfV1NfU0hJRlQJICAgNgorI2RlZmluZSBEUkFNQ19QR1NaX01BU0sgICAgMHgwMzAwCS8qIFBhZ2UgU2l6ZSBmb3IgZmFzdCBwYWdlIG1vZGUgKi8KKyNkZWZpbmUgRFJBTUNfUEdTWl9TSElGVCAgIDgKKyNkZWZpbmUgICBEUkFNQ19QR1NaXzI1NksgIDB4MDAwMAkKKyNkZWZpbmUgICBEUkFNQ19QR1NaXzUxMksgIDB4MDEwMAorI2RlZmluZSAgIERSQU1DX1BHU1pfMTAyNEsgMHgwMjAwCisjZGVmaW5lCSAgRFJBTUNfUEdTWl8yMDQ4SyAweDAzMDAKKyNkZWZpbmUgRFJBTUNfRURPCSAgIDB4MDQwMAkvKiBFRE8gRFJBTSAqLworI2RlZmluZSBEUkFNQ19DTEsJICAgMHgwODAwCS8qIFJlZnJlc2ggVGltZXIgQ2xvY2sgc291cmNlIHNlbGVjdCAqLworI2RlZmluZSBEUkFNQ19CQ19NQVNLCSAgIDB4MzAwMAkvKiBQYWdlIEFjY2VzcyBDbG9jayBDeWNsZSAoRlAgbW9kZSkgKi8KKyNkZWZpbmUgRFJBTUNfQkNfU0hJRlQJICAgMTIKKyNkZWZpbmUgRFJBTUNfUk0JICAgMHg0MDAwCS8qIFJlZnJlc2ggTW9kZSAqLworI2RlZmluZSBEUkFNQ19FTgkgICAweDgwMDAJLyogRFJBTSBDb250cm9sbGVyIGVuYWJsZSAqLworCisKKy8qKioqKioqKioqCisgKgorICogMHhGRkZGRkR4eCAtLSBJbi1DaXJjdWl0IEVtdWxhdGlvbiAoSUNFKQorICoKKyAqKioqKioqKioqLworCisvKgorICogSUNFIE1vZHVsZSBBZGRyZXNzIENvbXBhcmUgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBJQ0VNQUNSX0FERFIJMHhmZmZmZmQwMAorI2RlZmluZSBJQ0VNQUNSCQlMT05HX1JFRihJQ0VNQUNSX0FERFIpCisKKy8qCisgKiBJQ0UgTW9kdWxlIEFkZHJlc3MgTWFzayBSZWdpc3RlcgorICovCisjZGVmaW5lIElDRU1BTVJfQUREUgkweGZmZmZmZDA0CisjZGVmaW5lIElDRU1BTVIJCUxPTkdfUkVGKElDRU1BTVJfQUREUikKKworLyoKKyAqIElDRSBNb2R1bGUgQ29udHJvbCBDb21wYXJlIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgSUNFTUNDUl9BRERSCTB4ZmZmZmZkMDgKKyNkZWZpbmUgSUNFTUNDUgkJV09SRF9SRUYoSUNFTUNDUl9BRERSKQorCisjZGVmaW5lIElDRU1DQ1JfUEQJMHgwMDAxCS8qIFByb2dyYW0vRGF0YSBDeWNsZSBTZWxlY3Rpb24gKi8KKyNkZWZpbmUgSUNFTUNDUl9SVwkweDAwMDIJLyogUmVhZC9Xcml0ZSBDeWNsZSBTZWxlY3Rpb24gKi8KKworLyoKKyAqIElDRSBNb2R1bGUgQ29udHJvbCBNYXNrIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgSUNFTUNNUl9BRERSCTB4ZmZmZmZkMGEKKyNkZWZpbmUgSUNFTUNNUgkJV09SRF9SRUYoSUNFTUNNUl9BRERSKQorCisjZGVmaW5lIElDRU1DTVJfUERNCTB4MDAwMQkvKiBQcm9ncmFtL0RhdGEgQ3ljbGUgTWFzayAqLworI2RlZmluZSBJQ0VNQ01SX1JXTQkweDAwMDIJLyogUmVhZC9Xcml0ZSBDeWNsZSBNYXNrICovCisKKy8qCisgKiBJQ0UgTW9kdWxlIENvbnRyb2wgUmVnaXN0ZXIgCisgKi8KKyNkZWZpbmUgSUNFTUNSX0FERFIJMHhmZmZmZmQwYworI2RlZmluZSBJQ0VNQ1IJCVdPUkRfUkVGKElDRU1DUl9BRERSKQorCisjZGVmaW5lIElDRU1DUl9DRU4JMHgwMDAxCS8qIENvbXBhcmUgRW5hYmxlICovCisjZGVmaW5lIElDRU1DUl9QQkVOCTB4MDAwMgkvKiBQcm9ncmFtIEJyZWFrIEVuYWJsZSAqLworI2RlZmluZSBJQ0VNQ1JfU0IJMHgwMDA0CS8qIFNpbmdsZSBCcmVha3BvaW50ICovCisjZGVmaW5lIElDRU1DUl9ITURJUwkweDAwMDgJLyogSGFyZE1hcCBkaXNhYmxlICovCisjZGVmaW5lIElDRU1DUl9CQklFTgkweDAwMTAJLyogQnVzIEJyZWFrIEludGVycnVwdCBFbmFibGUgKi8KKworLyoKKyAqIElDRSBNb2R1bGUgU3RhdHVzIFJlZ2lzdGVyIAorICovCisjZGVmaW5lIElDRU1TUl9BRERSCTB4ZmZmZmZkMGUKKyNkZWZpbmUgSUNFTVNSCQlXT1JEX1JFRihJQ0VNU1JfQUREUikKKworI2RlZmluZSBJQ0VNU1JfRU1VRU4JMHgwMDAxCS8qIEVtdWxhdGlvbiBFbmFibGUgKi8KKyNkZWZpbmUgSUNFTVNSX0JSS0lSUQkweDAwMDIJLyogQS1MaW5lIFZlY3RvciBGZXRjaCBEZXRlY3RlZCAqLworI2RlZmluZSBJQ0VNU1JfQkJJUlEJMHgwMDA0CS8qIEJ1cyBCcmVhayBJbnRlcnJ1cHQgRGV0ZWN0ZWQgKi8KKyNkZWZpbmUgSUNFTVNSX0VNSVJRCTB4MDAwOAkvKiBFTVVJUlEgRmFsbGluZyBFZGdlIERldGVjdGVkICovCisKKyNlbmRpZiAvKiBfTUM2OFZaMzI4X0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvYS5vdXQuaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9hLm91dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlMThlZjkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvYS5vdXQuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLW02OGsvYS5vdXQuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9hbmNob3IuaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9hbmNob3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTM5MGUwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L2FuY2hvci5oCkBAIC0wLDAgKzEsMTEyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCWFuY2hvci5oIC0tIEFuY2hvciBDTy1NRU0gTGl0ZSBQQ0kgaG9zdCBicmlkZ2UgcGFydC4KKyAqCisgKgkoQykgQ29weXJpZ2h0IDIwMDAsIE1vcmV0b24gQmF5ICh3d3cubW9yZXRvbi5jb20uYXUpCisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmCWFuY2hvcl9oCisjZGVmaW5lCWFuY2hvcl9oCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCURlZmluZSBiYXNpYyBhZGRyZXNzaW5nIGluZm8uCisgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19NT1RPUk9MQSkgJiYgZGVmaW5lZChDT05GSUdfTTU0MDcpCisjZGVmaW5lCUNPTUVNX0JBU0UJMHhGRkZGMDAwMAkvKiBCYXNlIG9mIENPLU1FTSBhZGRyZXNzIHNwYWNlICovCisjZGVmaW5lCUNPTUVNX0lSUQkyNQkJLyogSVJRIG9mIGFuY2hvciBwYXJ0ICovCisjZWxzZQorI2RlZmluZQlDT01FTV9CQVNFCTB4ODAwMDAwMDAJLyogQmFzZSBvZiBDTy1NRU0gYWRkcmVzcyBzcGFjZSAqLworI2RlZmluZQlDT01FTV9JUlEJMjUJCS8qIElSUSBvZiBhbmNob3IgcGFydCAqLworI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICoJNC1ieXRlIHJlZ2lzdGVycyBvZiBDTy1NRU0sIHNvIGFkanVzdCByZWdpc3RlciBhZGRyZXNzZXMgZm9yCisgKgllYXN5IGFjY2Vzcy4gSGFuZHkgbWFjcm8gZm9yIHdvcmQgYWNjZXNzIHRvby4KKyAqLworI2RlZmluZQlMUkVHKGEpCQkoKGEpID4+IDIpCisjZGVmaW5lCVdSRUcoYSkJCSgoYSkgPj4gMSkKKworCisvKgorICoJRGVmaW5lIGJhc2UgYWRkcmVzc2VzIHdpdGhpbiBDTy1NRU0gTGl0ZSByZWdpc3RlciBhZGRyZXNzIHNwYWNlLgorICovCisjZGVmaW5lCUNPTUVNX0kyTwkweDAwMDAJCS8qIEkyTyByZWdpc3RlcnMgKi8KKyNkZWZpbmUJQ09NRU1fT1BSRUdTCTB4MDQwMAkJLyogT3BlcmF0aW9uIHJlZ2lzdGVycyAqLworI2RlZmluZQlDT01FTV9QQ0lCVVMJMHgyMDAwCQkvKiBEaXJlY3QgYWNjZXNzIHRvIFBDSSBidXMgKi8KKyNkZWZpbmUJQ09NRU1fU0hNRU0JMHg0MDAwCQkvKiBTaGFyZWQgbWVtb3J5IHJlZ2lvbiAqLworCisjZGVmaW5lCUNPTUVNX1NITUVNU0laRQkweDQwMDAJCS8qIFNpemUgb2Ygc2hhcmVkIG1lbW9yeSAqLworCisKKy8qCisgKglEZWZpbmUgQ08tTUVNIFJlZ2lzdGVycy4KKyAqLworI2RlZmluZQlDT01FTV9JMk9ISVNSCTB4MDAzMAkJLyogSTJPIGhvc3QgaW50ZXJydXB0IHN0YXR1cyAqLworI2RlZmluZQlDT01FTV9JMk9ISU1SCTB4MDAzNAkJLyogSTJPIGhvc3QgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUJQ09NRU1fSTJPTElTUgkweDAwMzgJCS8qIEkyTyBsb2NhbCBpbnRlcnJ1cHQgc3RhdHVzICovCisjZGVmaW5lCUNPTUVNX0kyT0xJTVIJMHgwMDNjCQkvKiBJMk8gbG9jYWwgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUJQ09NRU1fSUJGUEZJRk8JMHgwMDQwCQkvKiBJMk8gaW5ib3VuZCBmcmVlL3Bvc3QgRklGTyAqLworI2RlZmluZQlDT01FTV9PQlBGRklGTwkweDAwNDQJCS8qIEkyTyBvdXRib3VuZCBwb3N0L2ZyZWUgRklGTyAqLworI2RlZmluZQlDT01FTV9JQlBGRklGTwkweDAwNDgJCS8qIEkyTyBpbmJvdW5kIHBvc3QvZnJlZSBGSUZPICovCisjZGVmaW5lCUNPTUVNX09CRlBGSUZPCTB4MDA0YwkJLyogSTJPIG91dGJvdW5kIGZyZWUvcG9zdCBGSUZPICovCisKKyNkZWZpbmUJQ09NRU1fREFIQkFTRQkweDA0NjAJCS8qIERpcmVjdCBhY2Nlc3MgYmFzZSBhZGRyZXNzICovCisKKyNkZWZpbmUJQ09NRU1fTlZDTUQJMHgwNGEwCQkvKiBJMkMgc2VyaWFsIGNvbW1hbmQgKi8KKyNkZWZpbmUJQ09NRU1fTlZSRUFECTB4MDRhNAkJLyogSTJDIHNlcmlhbCByZWFkICovCisjZGVmaW5lCUNPTUVNX05WU1RBVAkweDA0YTgJCS8qIEkyQyBzdGF0dXMgKi8KKworI2RlZmluZQlDT01FTV9ETUFMQkFTRQkweDA0YjAJCS8qIERNQSBsb2NhbCBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUJQ09NRU1fRE1BSEJBU0UJMHgwNGI0CQkvKiBETUEgaG9zdCBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUJQ09NRU1fRE1BU0laRQkweDA0YjgJCS8qIERNQSBzaXplICovCisjZGVmaW5lCUNPTUVNX0RNQUNUTAkweDA0YmMJCS8qIERNQSBjb250cm9sICovCisKKyNkZWZpbmUJQ09NRU1fSENUTAkweDA0ZTAJCS8qIEhvc3QgY29udHJvbCAqLworI2RlZmluZQlDT01FTV9ISU5UCTB4MDRlNAkJLyogSG9zdCBpbnRlcnJ1cHQgY29udHJvbC9zdGF0dXMgKi8KKyNkZWZpbmUJQ09NRU1fSExEQVRBCTB4MDRlOAkJLyogSG9zdCB0byBsb2NhbCBkYXRhIG1haWxib3ggKi8KKyNkZWZpbmUJQ09NRU1fTElOVAkweDA0ZjQJCS8qIExvY2FsIGludGVycnVwdCBjb250b2xlIHN0YXR1cyAqLworI2RlZmluZQlDT01FTV9MSERBVEEJMHgwNGY4CQkvKiBMb2NhbCB0byBob3N0IGRhdGEgbWFpbGJveCAqLworCisjZGVmaW5lCUNPTUVNX0xCVVNDRkcJMHgwNGZjCQkvKiBMb2NhbCBidXMgY29uZmlndXJhdGlvbiAqLworCisKKy8qCisgKglDb21tYW5kcyBhbmQgZmxhZ3MgZm9yIHVzZSB3aXRoIERpcmVjdCBBY2Nlc3MgUmVnaXN0ZXIuCisgKi8KKyNkZWZpbmUJQ09NRU1fREFfSUFDSwkweDAwMDAwMDAwCS8qIEludGVycnVwdCBhY2tub3dsZWRnZSAocmVhZCkgKi8KKyNkZWZpbmUJQ09NRU1fREFfU1BDTAkweDAwMDAwMDEwCS8qIFNwZWNpYWwgY3ljbGUgKHdyaXRlKSAqLworI2RlZmluZQlDT01FTV9EQV9NRU1SRAkweDAwMDAwMDA0CS8qIE1lbW9yeSByZWFkIGN5Y2xlICovCisjZGVmaW5lCUNPTUVNX0RBX01FTVdSCTB4MDAwMDAwMDQJLyogTWVtb3J5IHdyaXRlIGN5Y2xlICovCisjZGVmaW5lCUNPTUVNX0RBX0lPUkQJMHgwMDAwMDAwMgkvKiBJL08gcmVhZCBjeWNsZSAqLworI2RlZmluZQlDT01FTV9EQV9JT1dSCTB4MDAwMDAwMDIJLyogSS9PIHdyaXRlIGN5Y2xlICovCisjZGVmaW5lCUNPTUVNX0RBX0NGR1JECTB4MDAwMDAwMDYJLyogQ29uZmlndXJhdGlvbiByZWFkIGN5Y2xlICovCisjZGVmaW5lCUNPTUVNX0RBX0NGR1dSCTB4MDAwMDAwMDYJLyogQ29uZmlndXJhdGlvbiB3cml0ZSBjeWNsZSAqLworCisjZGVmaW5lCUNPTUVNX0RBX0FERFIoYSkJKChhKSAmIDB4ZmZmZmUwMDApCisKKyNkZWZpbmUJQ09NRU1fREFfT0ZGU0VUKGEpCSgoYSkgJiAweDAwMDAxZmZmKQorCisKKy8qCisgKglUaGUgUENJIGJ1cyB3aWxsIGJlIGxpbWl0ZWQgaW4gd2hhdCBzbG90cyB3aWxsIGFjdHVhbGx5IGJlIHVzZWQuCisgKglEZWZpbmUgdmFsaWQgZGV2aWNlIG51bWJlcnMgZm9yIGRpZmZlcmVudCBib2FyZHMuCisgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19NT1RPUk9MQSkgJiYgZGVmaW5lZChDT05GSUdfTTU0MDcpCisjZGVmaW5lCUNPTUVNX01JTkRFVgkxNAkJLyogTWluaW11bSB2YWxpZCBERVZJQ0UgKi8KKyNkZWZpbmUJQ09NRU1fTUFYREVWCTE0CQkvKiBNYXhpbXVtIHZhbGlkIERFVklDRSAqLworI2RlZmluZQlDT01FTV9CUklER0VERVYJMTUJCS8qIFNsb3QgYnJpZGdlIGlzIGluICovCisjZWxzZQorI2RlZmluZQlDT01FTV9NSU5ERVYJMAkJLyogTWluaW11bSB2YWxpZCBERVZJQ0UgKi8KKyNkZWZpbmUJQ09NRU1fTUFYREVWCTMJCS8qIE1heGltdW0gdmFsaWQgREVWSUNFICovCisjZW5kaWYKKworI2RlZmluZQlDT01FTV9NQVhQQ0kJKENPTUVNX01BWERFVisxKQkvKiBNYXhpbXVtIFBDSSBkZXZpY2VzICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZW5kaWYJLyogYW5jaG9yX2ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9hc20tb2Zmc2V0cy5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L2FzbS1vZmZzZXRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI1ZjZlMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9hc20tb2Zmc2V0cy5oCkBAIC0wLDAgKzEsNDkgQEAKKyNpZm5kZWYgX19BU01fT0ZGU0VUU19IX18KKyNkZWZpbmUgX19BU01fT0ZGU0VUU19IX18KKy8qCisgKiBETyBOT1QgTU9ESUZZLgorICoKKyAqIFRoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGJ5IGFyY2gvbTY4a25vbW11L01ha2VmaWxlCisgKgorICovCisKKyNkZWZpbmUgVEFTS19TVEFURSAwIC8qIG9mZnNldG9mKHN0cnVjdCB0YXNrX3N0cnVjdCwgc3RhdGUpICovCisjZGVmaW5lIFRBU0tfRkxBR1MgMTIgLyogb2Zmc2V0b2Yoc3RydWN0IHRhc2tfc3RydWN0LCBmbGFncykgKi8KKyNkZWZpbmUgVEFTS19QVFJBQ0UgMTYgLyogb2Zmc2V0b2Yoc3RydWN0IHRhc2tfc3RydWN0LCBwdHJhY2UpICovCisjZGVmaW5lIFRBU0tfQkxPQ0tFRCA5MjIgLyogb2Zmc2V0b2Yoc3RydWN0IHRhc2tfc3RydWN0LCBibG9ja2VkKSAqLworI2RlZmluZSBUQVNLX1RIUkVBRCA3NzIgLyogb2Zmc2V0b2Yoc3RydWN0IHRhc2tfc3RydWN0LCB0aHJlYWQpICovCisjZGVmaW5lIFRBU0tfVEhSRUFEX0lORk8gNCAvKiBvZmZzZXRvZihzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRocmVhZF9pbmZvKSAqLworI2RlZmluZSBUQVNLX01NIDkyIC8qIG9mZnNldG9mKHN0cnVjdCB0YXNrX3N0cnVjdCwgbW0pICovCisjZGVmaW5lIFRBU0tfQUNUSVZFX01NIDk2IC8qIG9mZnNldG9mKHN0cnVjdCB0YXNrX3N0cnVjdCwgYWN0aXZlX21tKSAqLworI2RlZmluZSBDUFVTVEFUX1NPRlRJUlFfUEVORElORyAwIC8qIG9mZnNldG9mKGlycV9jcHVzdGF0X3QsIF9fc29mdGlycV9wZW5kaW5nKSAqLworI2RlZmluZSBUSFJFQURfS1NQIDAgLyogb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9zdHJ1Y3QsIGtzcCkgKi8KKyNkZWZpbmUgVEhSRUFEX1VTUCA0IC8qIG9mZnNldG9mKHN0cnVjdCB0aHJlYWRfc3RydWN0LCB1c3ApICovCisjZGVmaW5lIFRIUkVBRF9TUiA4IC8qIG9mZnNldG9mKHN0cnVjdCB0aHJlYWRfc3RydWN0LCBzcikgKi8KKyNkZWZpbmUgVEhSRUFEX0ZTIDEwIC8qIG9mZnNldG9mKHN0cnVjdCB0aHJlYWRfc3RydWN0LCBmcykgKi8KKyNkZWZpbmUgVEhSRUFEX0NSUCAxMiAvKiBvZmZzZXRvZihzdHJ1Y3QgdGhyZWFkX3N0cnVjdCwgY3JwKSAqLworI2RlZmluZSBUSFJFQURfRVNQMCAyMCAvKiBvZmZzZXRvZihzdHJ1Y3QgdGhyZWFkX3N0cnVjdCwgZXNwMCkgKi8KKyNkZWZpbmUgVEhSRUFEX0ZQUkVHIDI0IC8qIG9mZnNldG9mKHN0cnVjdCB0aHJlYWRfc3RydWN0LCBmcCkgKi8KKyNkZWZpbmUgVEhSRUFEX0ZQQ05UTCAxMjAgLyogb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9zdHJ1Y3QsIGZwY250bCkgKi8KKyNkZWZpbmUgVEhSRUFEX0ZQU1RBVEUgMTMyIC8qIG9mZnNldG9mKHN0cnVjdCB0aHJlYWRfc3RydWN0LCBmcHN0YXRlKSAqLworI2RlZmluZSBQVF9EMCAzMiAvKiBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgZDApICovCisjZGVmaW5lIFBUX09SSUdfRDAgMzYgLyogb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIG9yaWdfZDApICovCisjZGVmaW5lIFBUX0QxIDAgLyogb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGQxKSAqLworI2RlZmluZSBQVF9EMiA0IC8qIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBkMikgKi8KKyNkZWZpbmUgUFRfRDMgOCAvKiBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgZDMpICovCisjZGVmaW5lIFBUX0Q0IDEyIC8qIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBkNCkgKi8KKyNkZWZpbmUgUFRfRDUgMTYgLyogb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGQ1KSAqLworI2RlZmluZSBQVF9BMCAyMCAvKiBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgYTApICovCisjZGVmaW5lIFBUX0ExIDI0IC8qIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBhMSkgKi8KKyNkZWZpbmUgUFRfQTIgMjggLyogb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGEyKSAqLworI2RlZmluZSBQVF9QQyA0OCAvKiBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgcGMpICovCisjZGVmaW5lIFBUX1NSIDQ2IC8qIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBzcikgKi8KKyNkZWZpbmUgUFRfVkVDVE9SIDUyIC8qIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBwYykgKyA0ICovCisjZGVmaW5lIFNUQVRfSVJRIDUxNDAgLyogb2Zmc2V0b2Yoc3RydWN0IGtlcm5lbF9zdGF0LCBpcnFzKSAqLworI2RlZmluZSBTSUdTRUdWIDExIC8qIFNJR1NFR1YgKi8KKyNkZWZpbmUgU0VHVl9NQVBFUlIgMTk2NjA5IC8qIFNFR1ZfTUFQRVJSICovCisjZGVmaW5lIFNJR1RSQVAgNSAvKiBTSUdUUkFQICovCisjZGVmaW5lIFRSQVBfVFJBQ0UgMTk2NjEwIC8qIFRSQVBfVFJBQ0UgKi8KKyNkZWZpbmUgUFRfUFRSQUNFRCAxIC8qIFBUX1BUUkFDRUQgKi8KKyNkZWZpbmUgUFRfRFRSQUNFIDIgLyogUFRfRFRSQUNFICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L2F0b21pYy5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L2F0b21pYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxOTU3ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvYXRvbWljLmgKQEAgLTAsMCArMSwxMzQgQEAKKyNpZm5kZWYgX19BUkNIX002OEtOT01NVV9BVE9NSUNfXworI2RlZmluZSBfX0FSQ0hfTTY4S05PTU1VX0FUT01JQ19fCisKKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CS8qIGxvY2FsX2lycV9YWFgoKSAqLworCisvKgorICogQXRvbWljIG9wZXJhdGlvbnMgdGhhdCBDIGNhbid0IGd1YXJhbnRlZSB1cy4gIFVzZWZ1bCBmb3IKKyAqIHJlc291cmNlIGNvdW50aW5nIGV0Yy4uCisgKi8KKworLyoKKyAqIFdlIGRvIG5vdCBoYXZlIFNNUCBtNjhrIHN5c3RlbXMsIHNvIHdlIGRvbid0IGhhdmUgdG8gZGVhbCB3aXRoIHRoYXQuCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeyBpbnQgY291bnRlcjsgfSBhdG9taWNfdDsKKyNkZWZpbmUgQVRPTUlDX0lOSVQoaSkJeyAoaSkgfQorCisjZGVmaW5lIGF0b21pY19yZWFkKHYpCQkoKHYpLT5jb3VudGVyKQorI2RlZmluZSBhdG9taWNfc2V0KHYsIGkpCSgoKHYpLT5jb3VudGVyKSA9IGkpCisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgYXRvbWljX2FkZChpbnQgaSwgYXRvbWljX3QgKnYpCit7CisjaWZkZWYgQ09ORklHX0NPTERGSVJFCisJX19hc21fXyBfX3ZvbGF0aWxlX18oImFkZGwgJTEsJTAiIDogIittIiAoKnYpIDogImQiIChpKSk7CisjZWxzZQorCV9fYXNtX18gX192b2xhdGlsZV9fKCJhZGRsICUxLCUwIiA6ICIrbSIgKCp2KSA6ICJkaSIgKGkpKTsKKyNlbmRpZgorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGF0b21pY19zdWIoaW50IGksIGF0b21pY190ICp2KQoreworI2lmZGVmIENPTkZJR19DT0xERklSRQorCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdWJsICUxLCUwIiA6ICIrbSIgKCp2KSA6ICJkIiAoaSkpOworI2Vsc2UKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3VibCAlMSwlMCIgOiAiK20iICgqdikgOiAiZGkiIChpKSk7CisjZW5kaWYKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IGF0b21pY19zdWJfYW5kX3Rlc3QoaW50IGksIGF0b21pY190ICogdikKK3sKKwljaGFyIGM7CisjaWZkZWYgQ09ORklHX0NPTERGSVJFCisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN1YmwgJTIsJTE7IHNlcSAlMCIKKwkJCSAgICAgOiAiPWQiIChjKSwgIittIiAoKnYpCisJCQkgICAgIDogImQiIChpKSk7CisjZWxzZQorCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdWJsICUyLCUxOyBzZXEgJTAiCisJCQkgICAgIDogIj1kIiAoYyksICIrbSIgKCp2KQorCQkJICAgICA6ICJkaSIgKGkpKTsKKyNlbmRpZgorCXJldHVybiBjICE9IDA7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgYXRvbWljX2luYyh2b2xhdGlsZSBhdG9taWNfdCAqdikKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygiYWRkcWwgIzEsJTAiIDogIittIiAoKnYpKTsKK30KKworLyoKKyAqIGF0b21pY19pbmNfYW5kX3Rlc3QgLSBpbmNyZW1lbnQgYW5kIHRlc3QKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqCisgKiBBdG9taWNhbGx5IGluY3JlbWVudHMgQHYgYnkgMQorICogYW5kIHJldHVybnMgdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIHplcm8sIG9yIGZhbHNlIGZvciBhbGwKKyAqIG90aGVyIGNhc2VzLgorICovCisKK3N0YXRpYyBfX2lubGluZV9fIGludCBhdG9taWNfaW5jX2FuZF90ZXN0KHZvbGF0aWxlIGF0b21pY190ICp2KQoreworCWNoYXIgYzsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygiYWRkcWwgIzEsJTE7IHNlcSAlMCIgOiAiPWQiIChjKSwgIittIiAoKnYpKTsKKwlyZXR1cm4gYyAhPSAwOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGF0b21pY19kZWModm9sYXRpbGUgYXRvbWljX3QgKnYpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN1YnFsICMxLCUwIiA6ICIrbSIgKCp2KSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBhdG9taWNfZGVjX2FuZF90ZXN0KHZvbGF0aWxlIGF0b21pY190ICp2KQoreworCWNoYXIgYzsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3VicWwgIzEsJTE7IHNlcSAlMCIgOiAiPWQiIChjKSwgIittIiAoKnYpKTsKKwlyZXR1cm4gYyAhPSAwOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGF0b21pY19jbGVhcl9tYXNrKHVuc2lnbmVkIGxvbmcgbWFzaywgdW5zaWduZWQgbG9uZyAqdikKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygiYW5kbCAlMSwlMCIgOiAiK20iICgqdikgOiAiaWQiICh+KG1hc2spKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgYXRvbWljX3NldF9tYXNrKHVuc2lnbmVkIGxvbmcgbWFzaywgdW5zaWduZWQgbG9uZyAqdikKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygib3JsICUxLCUwIiA6ICIrbSIgKCp2KSA6ICJpZCIgKG1hc2spKTsKK30KKworLyogQXRvbWljIG9wZXJhdGlvbnMgYXJlIGFscmVhZHkgc2VyaWFsaXppbmcgKi8KKyNkZWZpbmUgc21wX21iX19iZWZvcmVfYXRvbWljX2RlYygpICAgIGJhcnJpZXIoKQorI2RlZmluZSBzbXBfbWJfX2FmdGVyX2F0b21pY19kZWMoKSBiYXJyaWVyKCkKKyNkZWZpbmUgc21wX21iX19iZWZvcmVfYXRvbWljX2luYygpICAgIGJhcnJpZXIoKQorI2RlZmluZSBzbXBfbWJfX2FmdGVyX2F0b21pY19pbmMoKSBiYXJyaWVyKCkKKworZXh0ZXJuIF9faW5saW5lX18gaW50IGF0b21pY19hZGRfcmV0dXJuKGludCBpLCBhdG9taWNfdCAqIHYpCit7CisJdW5zaWduZWQgbG9uZyB0ZW1wLCBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwl0ZW1wID0gKihsb25nICopdjsKKwl0ZW1wICs9IGk7CisJKihsb25nICopdiA9IHRlbXA7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJcmV0dXJuIHRlbXA7Cit9CisKKyNkZWZpbmUgYXRvbWljX2FkZF9uZWdhdGl2ZShhLCB2KQkoYXRvbWljX2FkZF9yZXR1cm4oKGEpLCAodikpIDwgMCkKKworZXh0ZXJuIF9faW5saW5lX18gaW50IGF0b21pY19zdWJfcmV0dXJuKGludCBpLCBhdG9taWNfdCAqIHYpCit7CisJdW5zaWduZWQgbG9uZyB0ZW1wLCBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwl0ZW1wID0gKihsb25nICopdjsKKwl0ZW1wIC09IGk7CisJKihsb25nICopdiA9IHRlbXA7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJcmV0dXJuIHRlbXA7Cit9CisKKyNkZWZpbmUgYXRvbWljX2RlY19yZXR1cm4odikgYXRvbWljX3N1Yl9yZXR1cm4oMSwodikpCisjZGVmaW5lIGF0b21pY19pbmNfcmV0dXJuKHYpIGF0b21pY19hZGRfcmV0dXJuKDEsKHYpKQorCisjZW5kaWYgLyogX19BUkNIX002OEtOT01NVV9BVE9NSUMgX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9iaXRvcHMuaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9iaXRvcHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTVlMzJiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L2JpdG9wcy5oCkBAIC0wLDAgKzEsNTAzIEBACisjaWZuZGVmIF9NNjhLTk9NTVVfQklUT1BTX0gKKyNkZWZpbmUgX002OEtOT01NVV9CSVRPUFNfSAorCisvKgorICogQ29weXJpZ2h0IDE5OTIsIExpbnVzIFRvcnZhbGRzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4JLyogc3dhYjMyICovCisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgkJLyogc2F2ZV9mbGFncyAqLworCisjaWZkZWYgX19LRVJORUxfXworCisvKgorICoJR2VuZXJpYyBmZnMoKS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgZmZzKGludCB4KQoreworCWludCByID0gMTsKKworCWlmICgheCkKKwkJcmV0dXJuIDA7CisJaWYgKCEoeCAmIDB4ZmZmZikpIHsKKwkJeCA+Pj0gMTY7CisJCXIgKz0gMTY7CisJfQorCWlmICghKHggJiAweGZmKSkgeworCQl4ID4+PSA4OworCQlyICs9IDg7CisJfQorCWlmICghKHggJiAweGYpKSB7CisJCXggPj49IDQ7CisJCXIgKz0gNDsKKwl9CisJaWYgKCEoeCAmIDMpKSB7CisJCXggPj49IDI7CisJCXIgKz0gMjsKKwl9CisJaWYgKCEoeCAmIDEpKSB7CisJCXggPj49IDE7CisJCXIgKz0gMTsKKwl9CisJcmV0dXJuIHI7Cit9CisKKy8qCisgKglHZW5lcmljIF9fZmZzKCkuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IF9fZmZzKGludCB4KQoreworCWludCByID0gMDsKKworCWlmICgheCkKKwkJcmV0dXJuIDA7CisJaWYgKCEoeCAmIDB4ZmZmZikpIHsKKwkJeCA+Pj0gMTY7CisJCXIgKz0gMTY7CisJfQorCWlmICghKHggJiAweGZmKSkgeworCQl4ID4+PSA4OworCQlyICs9IDg7CisJfQorCWlmICghKHggJiAweGYpKSB7CisJCXggPj49IDQ7CisJCXIgKz0gNDsKKwl9CisJaWYgKCEoeCAmIDMpKSB7CisJCXggPj49IDI7CisJCXIgKz0gMjsKKwl9CisJaWYgKCEoeCAmIDEpKSB7CisJCXggPj49IDE7CisJCXIgKz0gMTsKKwl9CisJcmV0dXJuIHI7Cit9CisKKy8qCisgKiBFdmVyeSBhcmNoaXRlY3R1cmUgbXVzdCBkZWZpbmUgdGhpcyBmdW5jdGlvbi4gSXQncyB0aGUgZmFzdGVzdAorICogd2F5IG9mIHNlYXJjaGluZyBhIDE0MC1iaXQgYml0bWFwIHdoZXJlIHRoZSBmaXJzdCAxMDAgYml0cyBhcmUKKyAqIHVubGlrZWx5IHRvIGJlIHNldC4gSXQncyBndWFyYW50ZWVkIHRoYXQgYXQgbGVhc3Qgb25lIG9mIHRoZSAxNDAKKyAqIGJpdHMgaXMgY2xlYXJlZC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgc2NoZWRfZmluZF9maXJzdF9iaXQodW5zaWduZWQgbG9uZyAqYikKK3sKKwlpZiAodW5saWtlbHkoYlswXSkpCisJCXJldHVybiBfX2ZmcyhiWzBdKTsKKwlpZiAodW5saWtlbHkoYlsxXSkpCisJCXJldHVybiBfX2ZmcyhiWzFdKSArIDMyOworCWlmICh1bmxpa2VseShiWzJdKSkKKwkJcmV0dXJuIF9fZmZzKGJbMl0pICsgNjQ7CisJaWYgKGJbM10pCisJCXJldHVybiBfX2ZmcyhiWzNdKSArIDk2OworCXJldHVybiBfX2ZmcyhiWzRdKSArIDEyODsKK30KKworLyoKKyAqIGZmeiA9IEZpbmQgRmlyc3QgWmVybyBpbiB3b3JkLiBVbmRlZmluZWQgaWYgbm8gemVybyBleGlzdHMsCisgKiBzbyBjb2RlIHNob3VsZCBjaGVjayBhZ2FpbnN0IH4wVUwgZmlyc3QuLgorICovCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGZmeih1bnNpZ25lZCBsb25nIHdvcmQpCit7CisJdW5zaWduZWQgbG9uZyByZXN1bHQgPSAwOworCisJd2hpbGUod29yZCAmIDEpIHsKKwkJcmVzdWx0Kys7CisJCXdvcmQgPj49IDE7CisJfQorCXJldHVybiByZXN1bHQ7Cit9CisKKworc3RhdGljIF9faW5saW5lX18gdm9pZCBzZXRfYml0KGludCBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqIGFkZHIpCit7CisjaWZkZWYgQ09ORklHX0NPTERGSVJFCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJsZWEgJTAsJSVhMDsgYnNldCAlMSwoJSVhMCkiCisJICAgICA6ICIrbSIgKCgodm9sYXRpbGUgY2hhciAqKWFkZHIpWyhucl4zMSkgPj4gM10pCisJICAgICA6ICJkIiAobnIpCisJICAgICA6ICIlYTAiLCAiY2MiKTsKKyNlbHNlCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJic2V0ICUxLCUwIgorCSAgICAgOiAiK20iICgoKHZvbGF0aWxlIGNoYXIgKilhZGRyKVsobnJeMzEpID4+IDNdKQorCSAgICAgOiAiZGkiIChucikKKwkgICAgIDogImNjIik7CisjZW5kaWYKK30KKworI2RlZmluZSBfX3NldF9iaXQobnIsIGFkZHIpIHNldF9iaXQobnIsIGFkZHIpCisKKy8qCisgKiBjbGVhcl9iaXQoKSBkb2Vzbid0IHByb3ZpZGUgYW55IGJhcnJpZXIgZm9yIHRoZSBjb21waWxlci4KKyAqLworI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKQliYXJyaWVyKCkKKyNkZWZpbmUgc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKQliYXJyaWVyKCkKKworc3RhdGljIF9faW5saW5lX18gdm9pZCBjbGVhcl9iaXQoaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICogYWRkcikKK3sKKyNpZmRlZiBDT05GSUdfQ09MREZJUkUKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImxlYSAlMCwlJWEwOyBiY2xyICUxLCglJWEwKSIKKwkgICAgIDogIittIiAoKCh2b2xhdGlsZSBjaGFyICopYWRkcilbKG5yXjMxKSA+PiAzXSkKKwkgICAgIDogImQiIChucikKKwkgICAgIDogIiVhMCIsICJjYyIpOworI2Vsc2UKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImJjbHIgJTEsJTAiCisJICAgICA6ICIrbSIgKCgodm9sYXRpbGUgY2hhciAqKWFkZHIpWyhucl4zMSkgPj4gM10pCisJICAgICA6ICJkaSIgKG5yKQorCSAgICAgOiAiY2MiKTsKKyNlbmRpZgorfQorCisjZGVmaW5lIF9fY2xlYXJfYml0KG5yLCBhZGRyKSBjbGVhcl9iaXQobnIsIGFkZHIpCisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgY2hhbmdlX2JpdChpbnQgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKiBhZGRyKQoreworI2lmZGVmIENPTkZJR19DT0xERklSRQorCV9fYXNtX18gX192b2xhdGlsZV9fICgibGVhICUwLCUlYTA7IGJjaGcgJTEsKCUlYTApIgorCSAgICAgOiAiK20iICgoKHZvbGF0aWxlIGNoYXIgKilhZGRyKVsobnJeMzEpID4+IDNdKQorCSAgICAgOiAiZCIgKG5yKQorCSAgICAgOiAiJWEwIiwgImNjIik7CisjZWxzZQorCV9fYXNtX18gX192b2xhdGlsZV9fICgiYmNoZyAlMSwlMCIKKwkgICAgIDogIittIiAoKCh2b2xhdGlsZSBjaGFyICopYWRkcilbKG5yXjMxKSA+PiAzXSkKKwkgICAgIDogImRpIiAobnIpCisJICAgICA6ICJjYyIpOworI2VuZGlmCit9CisKKyNkZWZpbmUgX19jaGFuZ2VfYml0KG5yLCBhZGRyKSBjaGFuZ2VfYml0KG5yLCBhZGRyKQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgdGVzdF9hbmRfc2V0X2JpdChpbnQgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKiBhZGRyKQoreworCWNoYXIgcmV0dmFsOworCisjaWZkZWYgQ09ORklHX0NPTERGSVJFCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJsZWEgJTEsJSVhMDsgYnNldCAlMiwoJSVhMCk7IHNuZSAlMCIKKwkgICAgIDogIj1kIiAocmV0dmFsKSwgIittIiAoKCh2b2xhdGlsZSBjaGFyICopYWRkcilbKG5yXjMxKSA+PiAzXSkKKwkgICAgIDogImQiIChucikKKwkgICAgIDogIiVhMCIpOworI2Vsc2UKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImJzZXQgJTIsJTE7IHNuZSAlMCIKKwkgICAgIDogIj1kIiAocmV0dmFsKSwgIittIiAoKCh2b2xhdGlsZSBjaGFyICopYWRkcilbKG5yXjMxKSA+PiAzXSkKKwkgICAgIDogImRpIiAobnIpCisJICAgICAvKiBObyBjbG9iYmVyICovKTsKKyNlbmRpZgorCisJcmV0dXJuIHJldHZhbDsKK30KKworI2RlZmluZSBfX3Rlc3RfYW5kX3NldF9iaXQobnIsIGFkZHIpIHRlc3RfYW5kX3NldF9iaXQobnIsIGFkZHIpCisKK3N0YXRpYyBfX2lubGluZV9fIGludCB0ZXN0X2FuZF9jbGVhcl9iaXQoaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICogYWRkcikKK3sKKwljaGFyIHJldHZhbDsKKworI2lmZGVmIENPTkZJR19DT0xERklSRQorCV9fYXNtX18gX192b2xhdGlsZV9fICgibGVhICUxLCUlYTA7IGJjbHIgJTIsKCUlYTApOyBzbmUgJTAiCisJICAgICA6ICI9ZCIgKHJldHZhbCksICIrbSIgKCgodm9sYXRpbGUgY2hhciAqKWFkZHIpWyhucl4zMSkgPj4gM10pCisJICAgICA6ICJkIiAobnIpCisJICAgICA6ICIlYTAiKTsKKyNlbHNlCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJiY2xyICUyLCUxOyBzbmUgJTAiCisJICAgICA6ICI9ZCIgKHJldHZhbCksICIrbSIgKCgodm9sYXRpbGUgY2hhciAqKWFkZHIpWyhucl4zMSkgPj4gM10pCisJICAgICA6ICJkaSIgKG5yKQorCSAgICAgLyogTm8gY2xvYmJlciAqLyk7CisjZW5kaWYKKworCXJldHVybiByZXR2YWw7Cit9CisKKyNkZWZpbmUgX190ZXN0X2FuZF9jbGVhcl9iaXQobnIsIGFkZHIpIHRlc3RfYW5kX2NsZWFyX2JpdChuciwgYWRkcikKKworc3RhdGljIF9faW5saW5lX18gaW50IHRlc3RfYW5kX2NoYW5nZV9iaXQoaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICogYWRkcikKK3sKKwljaGFyIHJldHZhbDsKKworI2lmZGVmIENPTkZJR19DT0xERklSRQorCV9fYXNtX18gX192b2xhdGlsZV9fICgibGVhICUxLCUlYTBcblx0YmNoZyAlMiwoJSVhMClcblx0c25lICUwIgorCSAgICAgOiAiPWQiIChyZXR2YWwpLCAiK20iICgoKHZvbGF0aWxlIGNoYXIgKilhZGRyKVsobnJeMzEpID4+IDNdKQorCSAgICAgOiAiZCIgKG5yKQorCSAgICAgOiAiJWEwIik7CisjZWxzZQorCV9fYXNtX18gX192b2xhdGlsZV9fICgiYmNoZyAlMiwlMTsgc25lICUwIgorCSAgICAgOiAiPWQiIChyZXR2YWwpLCAiK20iICgoKHZvbGF0aWxlIGNoYXIgKilhZGRyKVsobnJeMzEpID4+IDNdKQorCSAgICAgOiAiZGkiIChucikKKwkgICAgIC8qIE5vIGNsb2JiZXIgKi8pOworI2VuZGlmCisKKwlyZXR1cm4gcmV0dmFsOworfQorCisjZGVmaW5lIF9fdGVzdF9hbmRfY2hhbmdlX2JpdChuciwgYWRkcikgdGVzdF9hbmRfY2hhbmdlX2JpdChuciwgYWRkcikKKworLyoKKyAqIFRoaXMgcm91dGluZSBkb2Vzbid0IG5lZWQgdG8gYmUgYXRvbWljLgorICovCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19jb25zdGFudF90ZXN0X2JpdChpbnQgbnIsIGNvbnN0IHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKiBhZGRyKQoreworCXJldHVybiAoKDFVTCA8PCAobnIgJiAzMSkpICYgKCgoY29uc3Qgdm9sYXRpbGUgdW5zaWduZWQgaW50ICopIGFkZHIpW25yID4+IDVdKSkgIT0gMDsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fdGVzdF9iaXQoaW50IG5yLCBjb25zdCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICogYWRkcikKK3sKKwlpbnQgCSogYSA9IChpbnQgKikgYWRkcjsKKwlpbnQJbWFzazsKKworCWEgKz0gbnIgPj4gNTsKKwltYXNrID0gMSA8PCAobnIgJiAweDFmKTsKKwlyZXR1cm4gKChtYXNrICYgKmEpICE9IDApOworfQorCisjZGVmaW5lIHRlc3RfYml0KG5yLGFkZHIpIFwKKyhfX2J1aWx0aW5fY29uc3RhbnRfcChucikgPyBcCisgX19jb25zdGFudF90ZXN0X2JpdCgobnIpLChhZGRyKSkgOiBcCisgX190ZXN0X2JpdCgobnIpLChhZGRyKSkpCisKKyNkZWZpbmUgZmluZF9maXJzdF96ZXJvX2JpdChhZGRyLCBzaXplKSBcCisgICAgICAgIGZpbmRfbmV4dF96ZXJvX2JpdCgoYWRkciksIChzaXplKSwgMCkKKyNkZWZpbmUgZmluZF9maXJzdF9iaXQoYWRkciwgc2l6ZSkgXAorICAgICAgICBmaW5kX25leHRfYml0KChhZGRyKSwgKHNpemUpLCAwKQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgZmluZF9uZXh0X3plcm9fYml0ICh2b2lkICogYWRkciwgaW50IHNpemUsIGludCBvZmZzZXQpCit7CisJdW5zaWduZWQgbG9uZyAqcCA9ICgodW5zaWduZWQgbG9uZyAqKSBhZGRyKSArIChvZmZzZXQgPj4gNSk7CisJdW5zaWduZWQgbG9uZyByZXN1bHQgPSBvZmZzZXQgJiB+MzFVTDsKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCWlmIChvZmZzZXQgPj0gc2l6ZSkKKwkJcmV0dXJuIHNpemU7CisJc2l6ZSAtPSByZXN1bHQ7CisJb2Zmc2V0ICY9IDMxVUw7CisJaWYgKG9mZnNldCkgeworCQl0bXAgPSAqKHArKyk7CisJCXRtcCB8PSB+MFVMID4+ICgzMi1vZmZzZXQpOworCQlpZiAoc2l6ZSA8IDMyKQorCQkJZ290byBmb3VuZF9maXJzdDsKKwkJaWYgKH50bXApCisJCQlnb3RvIGZvdW5kX21pZGRsZTsKKwkJc2l6ZSAtPSAzMjsKKwkJcmVzdWx0ICs9IDMyOworCX0KKwl3aGlsZSAoc2l6ZSAmIH4zMVVMKSB7CisJCWlmICh+KHRtcCA9ICoocCsrKSkpCisJCQlnb3RvIGZvdW5kX21pZGRsZTsKKwkJcmVzdWx0ICs9IDMyOworCQlzaXplIC09IDMyOworCX0KKwlpZiAoIXNpemUpCisJCXJldHVybiByZXN1bHQ7CisJdG1wID0gKnA7CisKK2ZvdW5kX2ZpcnN0OgorCXRtcCB8PSB+MFVMID4+IHNpemU7Citmb3VuZF9taWRkbGU6CisJcmV0dXJuIHJlc3VsdCArIGZmeih0bXApOworfQorCisvKgorICogRmluZCBuZXh0IG9uZSBiaXQgaW4gYSBiaXRtYXAgcmVhc29uYWJseSBlZmZpY2llbnRseS4KKyAqLworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBmaW5kX25leHRfYml0KGNvbnN0IHVuc2lnbmVkIGxvbmcgKmFkZHIsCisJdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIG9mZnNldCkKK3sKKwl1bnNpZ25lZCBpbnQgKnAgPSAoKHVuc2lnbmVkIGludCAqKSBhZGRyKSArIChvZmZzZXQgPj4gNSk7CisJdW5zaWduZWQgaW50IHJlc3VsdCA9IG9mZnNldCAmIH4zMVVMOworCXVuc2lnbmVkIGludCB0bXA7CisKKwlpZiAob2Zmc2V0ID49IHNpemUpCisJCXJldHVybiBzaXplOworCXNpemUgLT0gcmVzdWx0OworCW9mZnNldCAmPSAzMVVMOworCWlmIChvZmZzZXQpIHsKKwkJdG1wID0gKnArKzsKKwkJdG1wICY9IH4wVUwgPDwgb2Zmc2V0OworCQlpZiAoc2l6ZSA8IDMyKQorCQkJZ290byBmb3VuZF9maXJzdDsKKwkJaWYgKHRtcCkKKwkJCWdvdG8gZm91bmRfbWlkZGxlOworCQlzaXplIC09IDMyOworCQlyZXN1bHQgKz0gMzI7CisJfQorCXdoaWxlIChzaXplID49IDMyKSB7CisJCWlmICgodG1wID0gKnArKykgIT0gMCkKKwkJCWdvdG8gZm91bmRfbWlkZGxlOworCQlyZXN1bHQgKz0gMzI7CisJCXNpemUgLT0gMzI7CisJfQorCWlmICghc2l6ZSkKKwkJcmV0dXJuIHJlc3VsdDsKKwl0bXAgPSAqcDsKKworZm91bmRfZmlyc3Q6CisJdG1wICY9IH4wVUwgPj4gKDMyIC0gc2l6ZSk7CisJaWYgKHRtcCA9PSAwVUwpICAgICAgICAvKiBBcmUgYW55IGJpdHMgc2V0PyAqLworCQlyZXR1cm4gcmVzdWx0ICsgc2l6ZTsgLyogTm9wZS4gKi8KK2ZvdW5kX21pZGRsZToKKwlyZXR1cm4gcmVzdWx0ICsgX19mZnModG1wKTsKK30KKworLyoKKyAqIGh3ZWlnaHROOiByZXR1cm5zIHRoZSBoYW1taW5nIHdlaWdodCAoaS5lLiB0aGUgbnVtYmVyCisgKiBvZiBiaXRzIHNldCkgb2YgYSBOLWJpdCB3b3JkCisgKi8KKworI2RlZmluZSBod2VpZ2h0MzIoeCkgZ2VuZXJpY19od2VpZ2h0MzIoeCkKKyNkZWZpbmUgaHdlaWdodDE2KHgpIGdlbmVyaWNfaHdlaWdodDE2KHgpCisjZGVmaW5lIGh3ZWlnaHQ4KHgpIGdlbmVyaWNfaHdlaWdodDgoeCkKKworCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgZXh0Ml9zZXRfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCit7CisJY2hhciByZXR2YWw7CisKKyNpZmRlZiBDT05GSUdfQ09MREZJUkUKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImxlYSAlMSwlJWEwOyBic2V0ICUyLCglJWEwKTsgc25lICUwIgorCSAgICAgOiAiPWQiIChyZXR2YWwpLCAiK20iICgoKHZvbGF0aWxlIGNoYXIgKilhZGRyKVtuciA+PiAzXSkKKwkgICAgIDogImQiIChucikKKwkgICAgIDogIiVhMCIpOworI2Vsc2UKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImJzZXQgJTIsJTE7IHNuZSAlMCIKKwkgICAgIDogIj1kIiAocmV0dmFsKSwgIittIiAoKCh2b2xhdGlsZSBjaGFyICopYWRkcilbbnIgPj4gM10pCisJICAgICA6ICJkaSIgKG5yKQorCSAgICAgLyogTm8gY2xvYmJlciAqLyk7CisjZW5kaWYKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBleHQyX2NsZWFyX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQoreworCWNoYXIgcmV0dmFsOworCisjaWZkZWYgQ09ORklHX0NPTERGSVJFCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJsZWEgJTEsJSVhMDsgYmNsciAlMiwoJSVhMCk7IHNuZSAlMCIKKwkgICAgIDogIj1kIiAocmV0dmFsKSwgIittIiAoKCh2b2xhdGlsZSBjaGFyICopYWRkcilbbnIgPj4gM10pCisJICAgICA6ICJkIiAobnIpCisJICAgICA6ICIlYTAiKTsKKyNlbHNlCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJiY2xyICUyLCUxOyBzbmUgJTAiCisJICAgICA6ICI9ZCIgKHJldHZhbCksICIrbSIgKCgodm9sYXRpbGUgY2hhciAqKWFkZHIpW25yID4+IDNdKQorCSAgICAgOiAiZGkiIChucikKKwkgICAgIC8qIE5vIGNsb2JiZXIgKi8pOworI2VuZGlmCisKKwlyZXR1cm4gcmV0dmFsOworfQorCisjZGVmaW5lIGV4dDJfc2V0X2JpdF9hdG9taWMobG9jaywgbnIsIGFkZHIpCQlcCisJKHsJCQkJCQlcCisJCWludCByZXQ7CQkJCVwKKwkJc3Bpbl9sb2NrKGxvY2spOwkJCVwKKwkJcmV0ID0gZXh0Ml9zZXRfYml0KChuciksIChhZGRyKSk7CVwKKwkJc3Bpbl91bmxvY2sobG9jayk7CQkJXAorCQlyZXQ7CQkJCQlcCisJfSkKKworI2RlZmluZSBleHQyX2NsZWFyX2JpdF9hdG9taWMobG9jaywgbnIsIGFkZHIpCQlcCisJKHsJCQkJCQlcCisJCWludCByZXQ7CQkJCVwKKwkJc3Bpbl9sb2NrKGxvY2spOwkJCVwKKwkJcmV0ID0gZXh0Ml9jbGVhcl9iaXQoKG5yKSwgKGFkZHIpKTsJXAorCQlzcGluX3VubG9jayhsb2NrKTsJCQlcCisJCXJldDsJCQkJCVwKKwl9KQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgZXh0Ml90ZXN0X2JpdChpbnQgbnIsIGNvbnN0IHZvbGF0aWxlIHZvaWQgKiBhZGRyKQoreworCWNoYXIgcmV0dmFsOworCisjaWZkZWYgQ09ORklHX0NPTERGSVJFCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJsZWEgJTEsJSVhMDsgYnRzdCAlMiwoJSVhMCk7IHNuZSAlMCIKKwkgICAgIDogIj1kIiAocmV0dmFsKQorCSAgICAgOiAibSIgKCgoY29uc3Qgdm9sYXRpbGUgY2hhciAqKWFkZHIpW25yID4+IDNdKSwgImQiIChucikKKwkgICAgIDogIiVhMCIpOworI2Vsc2UKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImJ0c3QgJTIsJTE7IHNuZSAlMCIKKwkgICAgIDogIj1kIiAocmV0dmFsKQorCSAgICAgOiAibSIgKCgoY29uc3Qgdm9sYXRpbGUgY2hhciAqKWFkZHIpW25yID4+IDNdKSwgImRpIiAobnIpCisJICAgICAvKiBObyBjbG9iYmVyICovKTsKKyNlbmRpZgorCisJcmV0dXJuIHJldHZhbDsKK30KKworI2RlZmluZSBleHQyX2ZpbmRfZmlyc3RfemVyb19iaXQoYWRkciwgc2l6ZSkgXAorICAgICAgICBleHQyX2ZpbmRfbmV4dF96ZXJvX2JpdCgoYWRkciksIChzaXplKSwgMCkKKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBleHQyX2ZpbmRfbmV4dF96ZXJvX2JpdCh2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQoreworCXVuc2lnbmVkIGxvbmcgKnAgPSAoKHVuc2lnbmVkIGxvbmcgKikgYWRkcikgKyAob2Zmc2V0ID4+IDUpOworCXVuc2lnbmVkIGxvbmcgcmVzdWx0ID0gb2Zmc2V0ICYgfjMxVUw7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlpZiAob2Zmc2V0ID49IHNpemUpCisJCXJldHVybiBzaXplOworCXNpemUgLT0gcmVzdWx0OworCW9mZnNldCAmPSAzMVVMOworCWlmKG9mZnNldCkgeworCQkvKiBXZSBob2xkIHRoZSBsaXR0bGUgZW5kaWFuIHZhbHVlIGluIHRtcCwgYnV0IHRoZW4gdGhlCisJCSAqIHNoaWZ0IGlzIGlsbGVnYWwuIFNvIHdlIGNvdWxkIGtlZXAgYSBiaWcgZW5kaWFuIHZhbHVlCisJCSAqIGluIHRtcCwgbGlrZSB0aGlzOgorCQkgKgorCQkgKiB0bXAgPSBfX3N3YWIzMigqKHArKykpOworCQkgKiB0bXAgfD0gfjBVTCA+PiAoMzItb2Zmc2V0KTsKKwkJICoKKwkJICogYnV0IHRoaXMgd291bGQgZGVjcmVhc2UgcHJlZm9ybWFuY2UsIHNvIHdlIGNoYW5nZSB0aGUKKwkJICogc2hpZnQ6CisJCSAqLworCQl0bXAgPSAqKHArKyk7CisJCXRtcCB8PSBfX3N3YWIzMih+MFVMID4+ICgzMi1vZmZzZXQpKTsKKwkJaWYoc2l6ZSA8IDMyKQorCQkJZ290byBmb3VuZF9maXJzdDsKKwkJaWYofnRtcCkKKwkJCWdvdG8gZm91bmRfbWlkZGxlOworCQlzaXplIC09IDMyOworCQlyZXN1bHQgKz0gMzI7CisJfQorCXdoaWxlKHNpemUgJiB+MzFVTCkgeworCQlpZih+KHRtcCA9ICoocCsrKSkpCisJCQlnb3RvIGZvdW5kX21pZGRsZTsKKwkJcmVzdWx0ICs9IDMyOworCQlzaXplIC09IDMyOworCX0KKwlpZighc2l6ZSkKKwkJcmV0dXJuIHJlc3VsdDsKKwl0bXAgPSAqcDsKKworZm91bmRfZmlyc3Q6CisJLyogdG1wIGlzIGxpdHRsZSBlbmRpYW4sIHNvIHdlIHdvdWxkIGhhdmUgdG8gc3dhYiB0aGUgc2hpZnQsCisJICogc2VlIGFib3ZlLiBCdXQgdGhlbiB3ZSBoYXZlIHRvIHN3YWIgdG1wIGJlbG93IGZvciBmZnosIHNvCisJICogd2UgbWlnaHQgYXMgd2VsbCBkbyB0aGlzIGhlcmUuCisJICovCisJcmV0dXJuIHJlc3VsdCArIGZmeihfX3N3YWIzMih0bXApIHwgKH4wVUwgPDwgc2l6ZSkpOworZm91bmRfbWlkZGxlOgorCXJldHVybiByZXN1bHQgKyBmZnooX19zd2FiMzIodG1wKSk7Cit9CisKKy8qIEJpdG1hcCBmdW5jdGlvbnMgZm9yIHRoZSBtaW5peCBmaWxlc3lzdGVtLiAgKi8KKyNkZWZpbmUgbWluaXhfdGVzdF9hbmRfc2V0X2JpdChucixhZGRyKSB0ZXN0X2FuZF9zZXRfYml0KG5yLGFkZHIpCisjZGVmaW5lIG1pbml4X3NldF9iaXQobnIsYWRkcikgc2V0X2JpdChucixhZGRyKQorI2RlZmluZSBtaW5peF90ZXN0X2FuZF9jbGVhcl9iaXQobnIsYWRkcikgdGVzdF9hbmRfY2xlYXJfYml0KG5yLGFkZHIpCisjZGVmaW5lIG1pbml4X3Rlc3RfYml0KG5yLGFkZHIpIHRlc3RfYml0KG5yLGFkZHIpCisjZGVmaW5lIG1pbml4X2ZpbmRfZmlyc3RfemVyb19iaXQoYWRkcixzaXplKSBmaW5kX2ZpcnN0X3plcm9fYml0KGFkZHIsc2l6ZSkKKworLyoqCisgKiBod2VpZ2h0TiAtIHJldHVybnMgdGhlIGhhbW1pbmcgd2VpZ2h0IG9mIGEgTi1iaXQgd29yZAorICogQHg6IHRoZSB3b3JkIHRvIHdlaWdoCisgKgorICogVGhlIEhhbW1pbmcgV2VpZ2h0IG9mIGEgbnVtYmVyIGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgYml0cyBzZXQgaW4gaXQuCisgKi8KKworI2RlZmluZSBod2VpZ2h0MzIoeCkgZ2VuZXJpY19od2VpZ2h0MzIoeCkKKyNkZWZpbmUgaHdlaWdodDE2KHgpIGdlbmVyaWNfaHdlaWdodDE2KHgpCisjZGVmaW5lIGh3ZWlnaHQ4KHgpIGdlbmVyaWNfaHdlaWdodDgoeCkKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworLyoKKyAqIGZsczogZmluZCBsYXN0IGJpdCBzZXQuCisgKi8KKyNkZWZpbmUgZmxzKHgpIGdlbmVyaWNfZmxzKHgpCisKKyNlbmRpZiAvKiBfTTY4S05PTU1VX0JJVE9QU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvYm9vdGluZm8uaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9ib290aW5mby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxMmU1MjYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvYm9vdGluZm8uaApAQCAtMCwwICsxLDIgQEAKKworLyogTm90aGluZyBmb3IgbTY4a25vbW11ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvYm9vdHN0ZC5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L2Jvb3RzdGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmRjNzlmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L2Jvb3RzdGQuaApAQCAtMCwwICsxLDEzMiBAQAorLyogYm9vdHN0ZC5oOiAgQm9vdGxvYWRlciBzeXN0ZW0gY2FsbCBpbnRlcmZhY2UKKyAqCisgKiAoYykgMTk5OSwgUnQtQ29udHJvbCwgSW5jLgorICovCisKKyNpZm5kZWYgX19CT09UU1REX0hfXworI2RlZmluZSBfX0JPT1RTVERfSF9fCisKKyNkZWZpbmUgTlJfQlNDIDIxICAgICAgICAgICAgLyogbGFzdCB1c2VkIGJvb3Rsb2FkZXIgc3lzdGVtIGNhbGwgKi8KKworI2RlZmluZSBfX0JOX3Jlc2V0ICAgICAgICAwICAvKiByZXNldCBhbmQgc3RhcnQgdGhlIGJvb3Rsb2FkZXIgKi8KKyNkZWZpbmUgX19CTl90ZXN0ICAgICAgICAgMSAgLyogdGVzdHMgdGhlIHN5c3RlbSBjYWxsIGludGVyZmFjZSAqLworI2RlZmluZSBfX0JOX2V4ZWMgICAgICAgICAyICAvKiBleGVjdXRlcyBhIGJvb3Rsb2FkZXIgaW1hZ2UgKi8KKyNkZWZpbmUgX19CTl9leGl0ICAgICAgICAgMyAgLyogdGVybWluYXRlcyBhIGJvb3Rsb2FkZXIgaW1hZ2UgKi8KKyNkZWZpbmUgX19CTl9wcm9ncmFtICAgICAgNCAgLyogcHJvZ3JhbSBGTEFTSCBmcm9tIGEgY2hhaW4gKi8KKyNkZWZpbmUgX19CTl9lcmFzZSAgICAgICAgNSAgLyogZXJhc2Ugc2VjdG9yKHMpIG9mIEZMQVNIICovCisjZGVmaW5lIF9fQk5fb3BlbiAgICAgICAgIDYKKyNkZWZpbmUgX19CTl93cml0ZSAgICAgICAgNworI2RlZmluZSBfX0JOX3JlYWQgICAgICAgICA4CisjZGVmaW5lIF9fQk5fY2xvc2UgICAgICAgIDkKKyNkZWZpbmUgX19CTl9tbWFwICAgICAgICAgMTAgLyogbWFwIGEgZmlsZSBkZXNjcmlwdG9yIGludG8gbWVtb3J5ICovCisjZGVmaW5lIF9fQk5fbXVubWFwICAgICAgIDExIC8qIHJlbW92ZSBhIGZpbGUgdG8gbWVtb3J5IG1hcHBpbmcgKi8KKyNkZWZpbmUgX19CTl9nZXRod2FkZHIgICAgMTIgLyogZ2V0IHRoZSBoYXJkd2FyZSBhZGRyZXNzIG9mIG15IGludGVyZmFjZXMgKi8KKyNkZWZpbmUgX19CTl9nZXRzZXJpYWxudW0gMTMgLyogZ2V0IHRoZSBzZXJpYWwgbnVtYmVyIG9mIHRoaXMgYm9hcmQgKi8KKyNkZWZpbmUgX19CTl9nZXRiZW52ICAgICAgMTQgLyogZ2V0IGEgYm9vdGxvYWRlciBlbnZ2YXIgKi8KKyNkZWZpbmUgX19CTl9zZXRiZW52ICAgICAgMTUgLyogZ2V0IGEgYm9vdGxvYWRlciBlbnZ2YXIgKi8KKyNkZWZpbmUgX19CTl9zZXRwbWFzayAgICAgMTYgLyogc2V0IHRoZSBwcm90ZWN0aW9uIG1hc2sgKi8KKyNkZWZpbmUgX19CTl9yZWFkZW52ICAgICAgMTcgLyogcmVhZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgKi8KKyNkZWZpbmUgX19CTl9mbGFzaF9jaGF0dHJfcmFuZ2UJCTE4CisjZGVmaW5lIF9fQk5fZmxhc2hfZXJhc2VfcmFuZ2UJCTE5CisjZGVmaW5lIF9fQk5fZmxhc2hfd3JpdGVfcmFuZ2UJCTIwCisKKy8qIENhbGxpbmcgY29udmVudGlvbnMgY29tcGF0aWJsZSB0byAodUMpbGludXgvNjhrCisgKiBXZSB1c2Ugc2ltbWlsYXIgbWFjcm9zIHRvIGNhbGwgaW50byB0aGUgYm9vdGxvYWRlciBhcyBmb3IgdUNsaW51eAorICovCisKKyNkZWZpbmUgX19ic2NfcmV0dXJuKHR5cGUsIHJlcykgXAorZG8geyBcCisgICBpZiAoKHVuc2lnbmVkIGxvbmcpKHJlcykgPj0gKHVuc2lnbmVkIGxvbmcpKC02NCkpIHsgXAorICAgICAgLyogbGV0IGVycm5vIGJlIGEgZnVuY3Rpb24sIHByZXNlcnZlIHJlcyBpbiAlZDAgKi8gXAorICAgICAgaW50IF9fZXJyID0gLShyZXMpOyBcCisgICAgICBlcnJubyA9IF9fZXJyOyBcCisgICAgICByZXMgPSAtMTsgXAorICAgfSBcCisgICByZXR1cm4gKHR5cGUpKHJlcyk7IFwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgX2JzYzAodHlwZSxuYW1lKSBcCit0eXBlIG5hbWUodm9pZCkgXAoreyBcCisgICByZWdpc3RlciBsb25nIF9fcmVzIF9fYXNtX18gKCIlZDAiKSA9IF9fQk5fIyNuYW1lOyBcCisgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInRyYXAgIzIiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICA6ICI9ZyIgKF9fcmVzKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgOiAiMCIgKF9fcmVzKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgOiAiJWQwIik7IFwKKyAgIF9fYnNjX3JldHVybih0eXBlLF9fcmVzKTsgXAorfQorCisjZGVmaW5lIF9ic2MxKHR5cGUsbmFtZSxhdHlwZSxhKSBcCit0eXBlIG5hbWUoYXR5cGUgYSkgXAoreyBcCisgICByZWdpc3RlciBsb25nIF9fcmVzIF9fYXNtX18gKCIlZDAiKSA9IF9fQk5fIyNuYW1lOyBcCisgICByZWdpc3RlciBsb25nIF9fYSBfX2FzbV9fICgiJWQxIikgPSAobG9uZylhOyBcCisgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInRyYXAgIzIiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICA6ICI9ZyIgKF9fcmVzKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgOiAiMCIgKF9fcmVzKSwgImQiIChfX2EpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICA6ICIlZDAiKTsgXAorICAgX19ic2NfcmV0dXJuKHR5cGUsX19yZXMpOyBcCit9CisKKyNkZWZpbmUgX2JzYzIodHlwZSxuYW1lLGF0eXBlLGEsYnR5cGUsYikgXAordHlwZSBuYW1lKGF0eXBlIGEsIGJ0eXBlIGIpIFwKK3sgXAorICAgcmVnaXN0ZXIgbG9uZyBfX3JlcyBfX2FzbV9fICgiJWQwIikgPSBfX0JOXyMjbmFtZTsgXAorICAgcmVnaXN0ZXIgbG9uZyBfX2EgX19hc21fXyAoIiVkMSIpID0gKGxvbmcpYTsgXAorICAgcmVnaXN0ZXIgbG9uZyBfX2IgX19hc21fXyAoIiVkMiIpID0gKGxvbmcpYjsgXAorICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJ0cmFwICMyIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgOiAiPWciIChfX3JlcykgXAorICAgICAgICAgICAgICAgICAgICAgICAgIDogIjAiIChfX3JlcyksICJkIiAoX19hKSwgImQiIChfX2IpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICA6ICIlZDAiKTsgXAorICAgX19ic2NfcmV0dXJuKHR5cGUsX19yZXMpOyBcCit9CisKKyNkZWZpbmUgX2JzYzModHlwZSxuYW1lLGF0eXBlLGEsYnR5cGUsYixjdHlwZSxjKSBcCit0eXBlIG5hbWUoYXR5cGUgYSwgYnR5cGUgYiwgY3R5cGUgYykgXAoreyBcCisgICByZWdpc3RlciBsb25nIF9fcmVzIF9fYXNtX18gKCIlZDAiKSA9IF9fQk5fIyNuYW1lOyBcCisgICByZWdpc3RlciBsb25nIF9fYSBfX2FzbV9fICgiJWQxIikgPSAobG9uZylhOyBcCisgICByZWdpc3RlciBsb25nIF9fYiBfX2FzbV9fICgiJWQyIikgPSAobG9uZyliOyBcCisgICByZWdpc3RlciBsb25nIF9fYyBfX2FzbV9fICgiJWQzIikgPSAobG9uZyljOyBcCisgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInRyYXAgIzIiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICA6ICI9ZyIgKF9fcmVzKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgOiAiMCIgKF9fcmVzKSwgImQiIChfX2EpLCAiZCIgKF9fYiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJkIiAoX19jKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgOiAiJWQwIik7IFwKKyAgIF9fYnNjX3JldHVybih0eXBlLF9fcmVzKTsgXAorfQorCisjZGVmaW5lIF9ic2M0KHR5cGUsbmFtZSxhdHlwZSxhLGJ0eXBlLGIsY3R5cGUsYyxkdHlwZSxkKSBcCit0eXBlIG5hbWUoYXR5cGUgYSwgYnR5cGUgYiwgY3R5cGUgYywgZHR5cGUgZCkgXAoreyBcCisgICByZWdpc3RlciBsb25nIF9fcmVzIF9fYXNtX18gKCIlZDAiKSA9IF9fQk5fIyNuYW1lOyBcCisgICByZWdpc3RlciBsb25nIF9fYSBfX2FzbV9fICgiJWQxIikgPSAobG9uZylhOyBcCisgICByZWdpc3RlciBsb25nIF9fYiBfX2FzbV9fICgiJWQyIikgPSAobG9uZyliOyBcCisgICByZWdpc3RlciBsb25nIF9fYyBfX2FzbV9fICgiJWQzIikgPSAobG9uZyljOyBcCisgICByZWdpc3RlciBsb25nIF9fZCBfX2FzbV9fICgiJWQ0IikgPSAobG9uZylkOyBcCisgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInRyYXAgIzIiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICA6ICI9ZyIgKF9fcmVzKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgOiAiMCIgKF9fcmVzKSwgImQiIChfX2EpLCAiZCIgKF9fYiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJkIiAoX19jKSwgImQiIChfX2QpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICA6ICIlZDAiKTsgXAorICAgX19ic2NfcmV0dXJuKHR5cGUsX19yZXMpOyBcCit9CisKKyNkZWZpbmUgX2JzYzUodHlwZSxuYW1lLGF0eXBlLGEsYnR5cGUsYixjdHlwZSxjLGR0eXBlLGQsZXR5cGUsZSkgXAordHlwZSBuYW1lKGF0eXBlIGEsIGJ0eXBlIGIsIGN0eXBlIGMsIGR0eXBlIGQsIGV0eXBlIGUpIFwKK3sgXAorICAgcmVnaXN0ZXIgbG9uZyBfX3JlcyBfX2FzbV9fICgiJWQwIikgPSBfX0JOXyMjbmFtZTsgXAorICAgcmVnaXN0ZXIgbG9uZyBfX2EgX19hc21fXyAoIiVkMSIpID0gKGxvbmcpYTsgXAorICAgcmVnaXN0ZXIgbG9uZyBfX2IgX19hc21fXyAoIiVkMiIpID0gKGxvbmcpYjsgXAorICAgcmVnaXN0ZXIgbG9uZyBfX2MgX19hc21fXyAoIiVkMyIpID0gKGxvbmcpYzsgXAorICAgcmVnaXN0ZXIgbG9uZyBfX2QgX19hc21fXyAoIiVkNCIpID0gKGxvbmcpZDsgXAorICAgcmVnaXN0ZXIgbG9uZyBfX2UgX19hc21fXyAoIiVkNSIpID0gKGxvbmcpZTsgXAorICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJ0cmFwICMyIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgOiAiPWciIChfX3JlcykgXAorICAgICAgICAgICAgICAgICAgICAgICAgIDogIjAiIChfX3JlcyksICJkIiAoX19hKSwgImQiIChfX2IpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZCIgKF9fYyksICJkIiAoX19kKSwgImQiIChfX2UpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICA6ICIlZDAiKTsgXAorICAgX19ic2NfcmV0dXJuKHR5cGUsX19yZXMpOyBcCit9CisKKyNlbmRpZiAvKiBfX0JPT1RTVERfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvYnVnLmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvYnVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBlN2RjMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9idWcuaApAQCAtMCwwICsxLDQgQEAKKyNpZm5kZWYgX002OEtOT01NVV9CVUdfSAorI2RlZmluZSBfTTY4S05PTU1VX0JVR19ICisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYnVnLmg+CisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9idWdzLmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvYnVncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmMzgyZGEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvYnVncy5oCkBAIC0wLDAgKzEsMTYgQEAKKy8qCisgKiAgaW5jbHVkZS9hc20tbTY4ay9idWdzLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk0ICBMaW51cyBUb3J2YWxkcworICovCisKKy8qCisgKiBUaGlzIGlzIGluY2x1ZGVkIGJ5IGluaXQvbWFpbi5jIHRvIGNoZWNrIGZvciBhcmNoaXRlY3R1cmUtZGVwZW5kZW50IGJ1Z3MuCisgKgorICogTmVlZHM6CisgKgl2b2lkIGNoZWNrX2J1Z3Modm9pZCk7CisgKi8KKworc3RhdGljIHZvaWQgY2hlY2tfYnVncyh2b2lkKQoreworfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L2J5dGVvcmRlci5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L2J5dGVvcmRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmY2RlOTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvYnl0ZW9yZGVyLmgKQEAgLTAsMCArMSwxMyBAQAorI2lmbmRlZiBfTTY4S05PTU1VX0JZVEVPUkRFUl9ICisjZGVmaW5lIF9NNjhLTk9NTVVfQllURU9SREVSX0gKKworI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoX19TVFJJQ1RfQU5TSV9fKSB8fCBkZWZpbmVkKF9fS0VSTkVMX18pCisjICBkZWZpbmUgX19CWVRFT1JERVJfSEFTX1U2NF9fCisjICBkZWZpbmUgX19TV0FCXzY0X1RIUlVfMzJfXworI2VuZGlmCisKKyNpbmNsdWRlIDxsaW51eC9ieXRlb3JkZXIvYmlnX2VuZGlhbi5oPgorCisjZW5kaWYgLyogX002OEtOT01NVV9CWVRFT1JERVJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L2NhY2hlLmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvY2FjaGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGU5ZWFjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L2NhY2hlLmgKQEAgLTAsMCArMSwxMiBAQAorI2lmbmRlZiBfX0FSQ0hfTTY4S05PTU1VX0NBQ0hFX0gKKyNkZWZpbmUgX19BUkNIX002OEtOT01NVV9DQUNIRV9ICisKKy8qIGJ5dGVzIHBlciBMMSBjYWNoZSBsaW5lICovCisjZGVmaW5lICAgICAgICBMMV9DQUNIRV9CWVRFUyAgMTYJLyogdGhpcyBuZWVkIHRvIGJlIGF0IGxlYXN0IDEgKi8KKworLyogbTY4ay1lbGYtZ2NjICAyLjk1LjIgZG9lc24ndCBsaWtlIHRoZXNlICovCisKKyNkZWZpbmUgX19jYWNoZWxpbmVfYWxpZ25lZAorI2RlZmluZSBfX19fY2FjaGVsaW5lX2FsaWduZWQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvY2FjaGVjdGwuaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9jYWNoZWN0bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjZjVhNmEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvY2FjaGVjdGwuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLW02OGsvY2FjaGVjdGwuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9jYWNoZWZsdXNoLmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvY2FjaGVmbHVzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhN2EyZmYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvY2FjaGVmbHVzaC5oCkBAIC0wLDAgKzEsNzUgQEAKKyNpZm5kZWYgX002OEtOT01NVV9DQUNIRUZMVVNIX0gKKyNkZWZpbmUgX002OEtOT01NVV9DQUNIRUZMVVNIX0gKKworLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMC0yMDAyLCBHcmVnIFVuZ2VyZXIgPGdlcmdAc25hcGdlYXIuY29tPgorICovCisjaW5jbHVkZSA8bGludXgvbW0uaD4KKworI2RlZmluZSBmbHVzaF9jYWNoZV9hbGwoKQkJCV9fZmx1c2hfY2FjaGVfYWxsKCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfbW0obW0pCQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9jYWNoZV9yYW5nZSh2bWEsIHN0YXJ0LCBlbmQpCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfcGFnZSh2bWEsIHZtYWRkciwgcGZuKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2RjYWNoZV9yYW5nZShzdGFydCxsZW4pCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpCQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9kY2FjaGVfbW1hcF9sb2NrKG1hcHBpbmcpCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2RjYWNoZV9tbWFwX3VubG9jayhtYXBwaW5nKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2ljYWNoZV9yYW5nZShzdGFydCxsZW4pCQlfX2ZsdXNoX2NhY2hlX2FsbCgpCisjZGVmaW5lIGZsdXNoX2ljYWNoZV9wYWdlKHZtYSxwZykJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfaWNhY2hlX3VzZXJfcmFuZ2Uodm1hLHBnLGFkcixsZW4pCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfdm1hcChzdGFydCwgZW5kKQkJZmx1c2hfY2FjaGVfYWxsKCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfdnVubWFwKHN0YXJ0LCBlbmQpCQlmbHVzaF9jYWNoZV9hbGwoKQorCisjZGVmaW5lIGNvcHlfdG9fdXNlcl9wYWdlKHZtYSwgcGFnZSwgdmFkZHIsIGRzdCwgc3JjLCBsZW4pIFwKKwltZW1jcHkoZHN0LCBzcmMsIGxlbikKKyNkZWZpbmUgY29weV9mcm9tX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIHZhZGRyLCBkc3QsIHNyYywgbGVuKSBcCisJbWVtY3B5KGRzdCwgc3JjLCBsZW4pCisKK2V4dGVybiBpbmxpbmUgdm9pZCBfX2ZsdXNoX2NhY2hlX2FsbCh2b2lkKQoreworI2lmZGVmIENPTkZJR19NNTQwNworCS8qCisJICoJVXNlIGNwdXNobCB0byBwdXNoIGFuZCBpbnZhbGlkYXRlIGFsbCBjYWNoZSBsaW5lcy4KKwkgKglHYXMgZG9lc24ndCBzZWVtIHRvIGtub3cgaG93IHRvIGdlbmVyYXRlIHRoZSBDb2xkRmlyZQorCSAqCWNwdXNobCBpbnN0cnVjdGlvbi4uLiBPaCB3ZWxsLCBiaXQgc3R1ZmYgaXQgZm9yIG5vdy4KKwkgKi8KKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCSJub3Bcblx0IgorCQkiY2xybAklJWQwXG5cdCIKKwkJIjE6XG5cdCIKKwkJIm1vdmVsCSUlZDAsJSVhMFxuXHQiCisJCSIyOlxuXHQiCisJCSIud29yZAkweGY0Njhcblx0IgorCQkiYWRkbAkjMHgxMCwlJWEwXG5cdCIKKwkJImNtcGwJIzB4MDAwMDA4MDAsJSVhMFxuXHQiCisJCSJibHQJMmJcblx0IgorCQkiYWRkcWwJIzEsJSVkMFxuXHQiCisJCSJjbXBpbAkjNCwlJWQwXG5cdCIKKwkJImJuZQkxYlxuXHQiCisJCSJtb3ZlbAkjMHhiNjA4ODUwMCwlJWQwXG5cdCIKKwkJIm1vdmVjCSUlZDAsJSVDQUNSXG5cdCIKKwkJOiA6IDogImQwIiwgImEwIiApOworI2VuZGlmIC8qIENPTkZJR19NNTQwNyAqLworI2lmZGVmIENPTkZJR19NNTI3MgorCV9fYXNtX18gX192b2xhdGlsZV9fICgKKyAgICAgICAgCSJtb3ZlbAkjMHgwMTAwMDAwMCwgJSVkMFxuXHQiCisgICAgICAgIAkibW92ZWMJJSVkMCwgJSVDQUNSXG5cdCIKKwkJIm5vcFxuXHQiCisgICAgICAgIAkibW92ZWwJIzB4ODAwMDAxMDAsICUlZDBcblx0IgorICAgICAgICAJIm1vdmVjCSUlZDAsICUlQ0FDUlxuXHQiCisJCSJub3Bcblx0IgorCQk6IDogOiAiZDAiICk7CisjZW5kaWYgLyogQ09ORklHX001MjcyICovCisjaWYgMCAvKiBDT05GSUdfTTUyNDkgKi8KKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisgICAgICAgIAkibW92ZWwJIzB4MDEwMDAwMDAsICUlZDBcblx0IgorICAgICAgICAJIm1vdmVjCSUlZDAsICUlQ0FDUlxuXHQiCisJCSJub3Bcblx0IgorICAgICAgICAJIm1vdmVsCSMweGEwMDAwMjAwLCAlJWQwXG5cdCIKKyAgICAgICAgCSJtb3ZlYwklJWQwLCAlJUNBQ1Jcblx0IgorCQkibm9wXG5cdCIKKwkJOiA6IDogImQwIiApOworI2VuZGlmIC8qIENPTkZJR19NNTI0OSAqLworfQorCisjZW5kaWYgLyogX002OEtOT01NVV9DQUNIRUZMVVNIX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9jaGVja3N1bS5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L2NoZWNrc3VtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJjZjEwMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9jaGVja3N1bS5oCkBAIC0wLDAgKzEsMTMzIEBACisjaWZuZGVmIF9NNjhLX0NIRUNLU1VNX0gKKyNkZWZpbmUgX002OEtfQ0hFQ0tTVU1fSAorCisjaW5jbHVkZSA8bGludXgvaW42Lmg+CisKKy8qCisgKiBjb21wdXRlcyB0aGUgY2hlY2tzdW0gb2YgYSBtZW1vcnkgYmxvY2sgYXQgYnVmZiwgbGVuZ3RoIGxlbiwKKyAqIGFuZCBhZGRzIGluICJzdW0iICgzMi1iaXQpCisgKgorICogcmV0dXJucyBhIDMyLWJpdCBudW1iZXIgc3VpdGFibGUgZm9yIGZlZWRpbmcgaW50byBpdHNlbGYKKyAqIG9yIGNzdW1fdGNwdWRwX21hZ2ljCisgKgorICogdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIGV2ZW4gbGVuZ3RocywgZXhjZXB0CisgKiBmb3IgdGhlIGxhc3QgZnJhZ21lbnQsIHdoaWNoIG1heSBiZSBvZGQKKyAqCisgKiBpdCdzIGJlc3QgdG8gaGF2ZSBidWZmIGFsaWduZWQgb24gYSAzMi1iaXQgYm91bmRhcnkKKyAqLwordW5zaWduZWQgaW50IGNzdW1fcGFydGlhbChjb25zdCB1bnNpZ25lZCBjaGFyICogYnVmZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IHN1bSk7CisKKy8qCisgKiB0aGUgc2FtZSBhcyBjc3VtX3BhcnRpYWwsIGJ1dCBjb3BpZXMgZnJvbSBzcmMgd2hpbGUgaXQKKyAqIGNoZWNrc3VtcworICoKKyAqIGhlcmUgZXZlbiBtb3JlIGltcG9ydGFudCB0byBhbGlnbiBzcmMgYW5kIGRzdCBvbiBhIDMyLWJpdCAob3IgZXZlbgorICogYmV0dGVyIDY0LWJpdCkgYm91bmRhcnkKKyAqLworCit1bnNpZ25lZCBpbnQgY3N1bV9wYXJ0aWFsX2NvcHkoY29uc3QgY2hhciAqc3JjLCBjaGFyICpkc3QsIGludCBsZW4sIGludCBzdW0pOworCisKKy8qCisgKiB0aGUgc2FtZSBhcyBjc3VtX3BhcnRpYWxfY29weSwgYnV0IGNvcGllcyBmcm9tIHVzZXIgc3BhY2UuCisgKgorICogaGVyZSBldmVuIG1vcmUgaW1wb3J0YW50IHRvIGFsaWduIHNyYyBhbmQgZHN0IG9uIGEgMzItYml0IChvciBldmVuCisgKiBiZXR0ZXIgNjQtYml0KSBib3VuZGFyeQorICovCisKK2V4dGVybiB1bnNpZ25lZCBpbnQgY3N1bV9wYXJ0aWFsX2NvcHlfZnJvbV91c2VyKGNvbnN0IGNoYXIgKnNyYywgY2hhciAqZHN0LAorCQkJCQkJaW50IGxlbiwgaW50IHN1bSwgaW50ICpjc3VtX2Vycik7CisKKyNkZWZpbmUgY3N1bV9wYXJ0aWFsX2NvcHlfbm9jaGVjayhzcmMsIGRzdCwgbGVuLCBzdW0pCVwKKwljc3VtX3BhcnRpYWxfY29weSgoc3JjKSwgKGRzdCksIChsZW4pLCAoc3VtKSkKKwordW5zaWduZWQgc2hvcnQgaXBfZmFzdF9jc3VtKHVuc2lnbmVkIGNoYXIgKmlwaCwgdW5zaWduZWQgaW50IGlobCk7CisKKy8qCisgKglGb2xkIGEgcGFydGlhbCBjaGVja3N1bQorICovCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNzdW1fZm9sZCh1bnNpZ25lZCBpbnQgc3VtKQoreworI2lmZGVmIENPTkZJR19DT0xERklSRQorCXN1bSA9IChzdW0gJiAweGZmZmYpICsgKHN1bSA+PiAxNik7CisJc3VtID0gKHN1bSAmIDB4ZmZmZikgKyAoc3VtID4+IDE2KTsKKyNlbHNlCisJdW5zaWduZWQgaW50IHRtcCA9IHN1bTsKKwlfX2FzbV9fKCJzd2FwICUxXG5cdCIKKwkJImFkZHcgJTEsICUwXG5cdCIKKwkJImNscncgJTFcblx0IgorCQkiYWRkeHcgJTEsICUwIgorCQk6ICI9JmQiIChzdW0pLCAiPSZkIiAodG1wKQorCQk6ICIwIiAoc3VtKSwgIjEiIChzdW0pKTsKKyNlbmRpZgorCXJldHVybiB+c3VtOworfQorCisKKy8qCisgKiBjb21wdXRlcyB0aGUgY2hlY2tzdW0gb2YgdGhlIFRDUC9VRFAgcHNldWRvLWhlYWRlcgorICogcmV0dXJucyBhIDE2LWJpdCBjaGVja3N1bSwgYWxyZWFkeSBjb21wbGVtZW50ZWQKKyAqLworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAorY3N1bV90Y3B1ZHBfbm9mb2xkKHVuc2lnbmVkIGxvbmcgc2FkZHIsIHVuc2lnbmVkIGxvbmcgZGFkZHIsIHVuc2lnbmVkIHNob3J0IGxlbiwKKwkJICB1bnNpZ25lZCBzaG9ydCBwcm90bywgdW5zaWduZWQgaW50IHN1bSkKK3sKKwlfX2FzbV9fICgiYWRkbCAgJTEsJTBcblx0IgorCQkgImFkZHhsICU0LCUwXG5cdCIKKwkJICJhZGR4bCAlNSwlMFxuXHQiCisJCSAiY2xybCAlMVxuXHQiCisJCSAiYWRkeGwgJTEsJTAiCisJCSA6ICI9JmQiIChzdW0pLCAiPSZkIiAoc2FkZHIpCisJCSA6ICIwIiAoZGFkZHIpLCAiMSIgKHNhZGRyKSwgImQiIChsZW4gKyBwcm90byksCisJCSAgICJkIihzdW0pKTsKKwlyZXR1cm4gc3VtOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IGludAorY3N1bV90Y3B1ZHBfbWFnaWModW5zaWduZWQgbG9uZyBzYWRkciwgdW5zaWduZWQgbG9uZyBkYWRkciwgdW5zaWduZWQgc2hvcnQgbGVuLAorCQkgIHVuc2lnbmVkIHNob3J0IHByb3RvLCB1bnNpZ25lZCBpbnQgc3VtKQoreworCXJldHVybiBjc3VtX2ZvbGQoY3N1bV90Y3B1ZHBfbm9mb2xkKHNhZGRyLGRhZGRyLGxlbixwcm90byxzdW0pKTsKK30KKworLyoKKyAqIHRoaXMgcm91dGluZSBpcyB1c2VkIGZvciBtaXNjZWxsYW5lb3VzIElQLWxpa2UgY2hlY2tzdW1zLCBtYWlubHkKKyAqIGluIGljbXAuYworICovCisKK2V4dGVybiB1bnNpZ25lZCBzaG9ydCBpcF9jb21wdXRlX2NzdW0oY29uc3QgdW5zaWduZWQgY2hhciAqIGJ1ZmYsIGludCBsZW4pOworCisjZGVmaW5lIF9IQVZFX0FSQ0hfSVBWNl9DU1VNCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBzaG9ydCBpbnQKK2NzdW1faXB2Nl9tYWdpYyhzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAorCQlfX3UzMiBsZW4sIHVuc2lnbmVkIHNob3J0IHByb3RvLCB1bnNpZ25lZCBpbnQgc3VtKSAKK3sKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIHRtcDsKKwlfX2FzbV9fKCJhZGRsICUyQCwlMFxuXHQiCisJCSJtb3ZlbCAlMkAoNCksJTFcblx0IgorCQkiYWRkeGwgJTEsJTBcblx0IgorCQkibW92ZWwgJTJAKDgpLCUxXG5cdCIKKwkJImFkZHhsICUxLCUwXG5cdCIKKwkJIm1vdmVsICUyQCgxMiksJTFcblx0IgorCQkiYWRkeGwgJTEsJTBcblx0IgorCQkibW92ZWwgJTNALCUxXG5cdCIKKwkJImFkZHhsICUxLCUwXG5cdCIKKwkJIm1vdmVsICUzQCg0KSwlMVxuXHQiCisJCSJhZGR4bCAlMSwlMFxuXHQiCisJCSJtb3ZlbCAlM0AoOCksJTFcblx0IgorCQkiYWRkeGwgJTEsJTBcblx0IgorCQkibW92ZWwgJTNAKDEyKSwlMVxuXHQiCisJCSJhZGR4bCAlMSwlMFxuXHQiCisJCSJhZGR4bCAlNCwlMFxuXHQiCisJCSJjbHJsICUxXG5cdCIKKwkJImFkZHhsICUxLCUwIgorCQk6ICI9JmQiIChzdW0pLCAiPSZkIiAodG1wKQorCQk6ICJhIiAoc2FkZHIpLCAiYSIgKGRhZGRyKSwgImQiIChsZW4gKyBwcm90byksCisJCSAgIjAiIChzdW0pKTsKKworCXJldHVybiBjc3VtX2ZvbGQoc3VtKTsKK30KKworI2VuZGlmIC8qIF9NNjhLX0NIRUNLU1VNX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9jb2xkZmlyZS5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L2NvbGRmaXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZmMzJjYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9jb2xkZmlyZS5oCkBAIC0wLDAgKzEsODYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICoJY29sZGZpcmUuaCAtLSBNb3Rvcm9sYSBDb2xkRmlyZSBDUFUgc2VwZWNpZmljIGRlZmluZXMKKyAqCisgKgkoQykgQ29weXJpZ2h0IDE5OTktMjAwMiwgR3JlZyBVbmdlcmVyIChnZXJnQHNuYXBnZWFyLmNvbSkKKyAqCShDKSBDb3B5cmlnaHQgMjAwMCwgTGluZW8gKHd3dy5saW5lby5jb20pCisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmCWNvbGRmaXJlX2gKKyNkZWZpbmUJY29sZGZpcmVfaAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworLyoKKyAqCURlZmluZSB0aGUgcHJvY2Vzc29yIHN1cHBvcnQgcGVyaXBoZXJhbHMgYmFzZSBhZGRyZXNzLgorICoJVGhpcyBpcyBnZW5lcmFsbHkgc2V0dXAgYnkgdGhlIGJvYXJkcyBzdGFydCB1cCBjb2RlLgorICovCisjZGVmaW5lCU1DRl9NQkFSCTB4MTAwMDAwMDAKKyNkZWZpbmUJTUNGX01CQVIyCTB4ODAwMDAwMDAKKyNkZWZpbmUJTUNGX0lQU0JBUgkweDQwMDAwMDAwCisKKyNpZiBkZWZpbmVkKENPTkZJR19NNTI3eCkgfHwgZGVmaW5lZChDT05GSUdfTTUyOHgpCisjdW5kZWYgTUNGX01CQVIKKyNkZWZpbmUJTUNGX01CQVIJTUNGX0lQU0JBUgorI2VuZGlmCisKKy8qCisgKglEZWZpbmUgbWFzdGVyIGNsb2NrIGZyZXF1ZW5jeS4KKyAqLworI2lmIGRlZmluZWQoQ09ORklHX0NMT0NLXzExTUh6KQorI2RlZmluZQlNQ0ZfQ0xLCQkxMTI4OTYwMAorI2VsaWYgZGVmaW5lZChDT05GSUdfQ0xPQ0tfMTZNSHopCisjZGVmaW5lCU1DRl9DTEsJCTE2MDAwMDAwCisjZWxpZiBkZWZpbmVkKENPTkZJR19DTE9DS18yME1IeikKKyNkZWZpbmUJTUNGX0NMSwkJMjAwMDAwMDAKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NMT0NLXzI0TUh6KQorI2RlZmluZQlNQ0ZfQ0xLCQkyNDAwMDAwMAorI2VsaWYgZGVmaW5lZChDT05GSUdfQ0xPQ0tfMjVNSHopCisjZGVmaW5lCU1DRl9DTEsJCTI1MDAwMDAwCisjZWxpZiBkZWZpbmVkKENPTkZJR19DTE9DS18zM01IeikKKyNkZWZpbmUJTUNGX0NMSwkJMzMwMDAwMDAKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NMT0NLXzQwTUh6KQorI2RlZmluZQlNQ0ZfQ0xLCQk0MDAwMDAwMAorI2VsaWYgZGVmaW5lZChDT05GSUdfQ0xPQ0tfNDVNSHopCisjZGVmaW5lCU1DRl9DTEsJCTQ1MDAwMDAwCisjZWxpZiBkZWZpbmVkKENPTkZJR19DTE9DS180OE1IeikKKyNkZWZpbmUJTUNGX0NMSwkJNDgwMDAwMDAKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NMT0NLXzUwTUh6KQorI2RlZmluZQlNQ0ZfQ0xLCQk1MDAwMDAwMAorI2VsaWYgZGVmaW5lZChDT05GSUdfQ0xPQ0tfNTRNSHopCisjZGVmaW5lCU1DRl9DTEsJCTU0MDAwMDAwCisjZWxpZiBkZWZpbmVkKENPTkZJR19DTE9DS182ME1IeikKKyNkZWZpbmUJTUNGX0NMSwkJNjAwMDAwMDAKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NMT0NLXzY0TUh6KQorI2RlZmluZQlNQ0ZfQ0xLCQk2NDAwMDAwMAorI2VsaWYgZGVmaW5lZChDT05GSUdfQ0xPQ0tfNjZNSHopCisjZGVmaW5lCU1DRl9DTEsJCTY2MDAwMDAwCisjZWxpZiBkZWZpbmVkKENPTkZJR19DTE9DS183ME1IeikKKyNkZWZpbmUJTUNGX0NMSwkJNzAwMDAwMDAKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NMT0NLXzEwME1IeikKKyNkZWZpbmUJTUNGX0NMSwkJMTAwMDAwMDAwCisjZWxpZiBkZWZpbmVkKENPTkZJR19DTE9DS18xNDBNSHopCisjZGVmaW5lCU1DRl9DTEsJCTE0MDAwMDAwMAorI2VsaWYgZGVmaW5lZChDT05GSUdfQ0xPQ0tfMTUwTUh6KQorI2RlZmluZQlNQ0ZfQ0xLCQkxNTAwMDAwMDAKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NMT0NLXzE2Nk1IeikKKyNkZWZpbmUJTUNGX0NMSwkJMTY2MDAwMDAwCisjZWxzZQorI2Vycm9yICJEb24ndCBrbm93IHdoYXQgeW91ciBDb2xkRmlyZSBDUFUgY2xvY2sgZnJlcXVlbmN5IGlzPz8iCisjZW5kaWYKKworLyoKKyAqCU9uZSBzb21lIENvbGRGaXJlIGZhbWlseSBtZW1iZXJzIHRoZSBidXMgY2xvY2sgKHVzZWQgYnkgaW50ZXJuYWwKKyAqCXBlcmlwaGVyYWxzKSBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIENQVSBjbG9jay4KKyAqLworI2lmIGRlZmluZWQoQ09ORklHX001MjQ5KSB8fCBkZWZpbmVkKENPTkZJR19NNTI3eCkKKyNkZWZpbmUJTUNGX0JVU0NMSwkoTUNGX0NMSyAvIDIpCisjZWxzZQorI2RlZmluZQlNQ0ZfQlVTQ0xLCU1DRl9DTEsKKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNlbmRpZgkvKiBjb2xkZmlyZV9oICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvY29tbXByb2MuaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9jb21tcHJvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1MjJjYTgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvY29tbXByb2MuaApAQCAtMCwwICsxLDcyMyBAQAorCisvKgorICogNjgzNjAgQ29tbXVuaWNhdGlvbiBQcm9jZXNzb3IgTW9kdWxlLgorICogQ29weXJpZ2h0IChjKSAyMDAwIE1pY2hhZWwgTGVzbGllIDxtbGVzbGllQGxpbmVvLmNvbT4gKG1jNjgzNjApIGFmdGVyOgorICogQ29weXJpZ2h0IChjKSAxOTk3IERhbiBNYWxlayA8ZG1hbGVrQGpsYy5uZXQ+IChtcGM4eHgpCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHN0cnVjdHVyZXMgYW5kIGluZm9ybWF0aW9uIGZvciB0aGUgY29tbXVuaWNhdGlvbgorICogcHJvY2Vzc29yIGNoYW5uZWxzLiAgU29tZSBDUE0gY29udHJvbCBhbmQgc3RhdHVzIGlzIGF2YWlsYWJsZQorICogdGhyb3VnaCB0aGUgNjgzNjAgaW50ZXJuYWwgbWVtb3J5IG1hcC4gIFNlZSBpbmNsdWRlL2FzbS8zNjBfaW1tYXAuaCBmb3IgZGV0YWlscy4KKyAqIFRoaXMgZmlsZSBpcyBub3QgYSBjb21wbGV0ZSBtYXAgb2YgYWxsIG9mIHRoZSAzNjAgUVVJQ0MncyBjYXBhYmlsaXRpZXMKKyAqCisgKiBPbiB0aGUgTUJYIGJvYXJkLCBFUFBDLUJ1ZyBsb2FkcyBDUE0gbWljcm9jb2RlIGludG8gdGhlIGZpcnN0IDUxMgorICogYnl0ZXMgb2YgdGhlIERQIFJBTSBhbmQgcmVsb2NhdGVzIHRoZSBJMkMgcGFyYW1ldGVyIGFyZWEgdG8gdGhlCisgKiBJRE1BMSBzcGFjZS4gIFRoZSByZW1haW5pbmcgRFAgUkFNIGlzIGF2YWlsYWJsZSBmb3IgYnVmZmVyIGRlc2NyaXB0b3JzCisgKiBvciBvdGhlciB1c2UuCisgKi8KKyNpZm5kZWYgX19DUE1fMzYwX18KKyNkZWZpbmUgX19DUE1fMzYwX18KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisvKiBDUE0gQ29tbWFuZCByZWdpc3RlciBtYXNrczogKi8KKyNkZWZpbmUgQ1BNX0NSX1JTVAkoKHVzaG9ydCkweDgwMDApCisjZGVmaW5lIENQTV9DUl9PUENPREUJKCh1c2hvcnQpMHgwZjAwKQorI2RlZmluZSBDUE1fQ1JfQ0hBTgkoKHVzaG9ydCkweDAwZjApCisjZGVmaW5lIENQTV9DUl9GTEcJKCh1c2hvcnQpMHgwMDAxKQorCisvKiBDUE0gQ29tbWFuZCBzZXQgKG9wY29kZXMpOiAqLworI2RlZmluZSBDUE1fQ1JfSU5JVF9UUlgJCSgodXNob3J0KTB4MDAwMCkKKyNkZWZpbmUgQ1BNX0NSX0lOSVRfUlgJCSgodXNob3J0KTB4MDAwMSkKKyNkZWZpbmUgQ1BNX0NSX0lOSVRfVFgJCSgodXNob3J0KTB4MDAwMikKKyNkZWZpbmUgQ1BNX0NSX0hVTlRfTU9ERQkoKHVzaG9ydCkweDAwMDMpCisjZGVmaW5lIENQTV9DUl9TVE9QX1RYCQkoKHVzaG9ydCkweDAwMDQpCisjZGVmaW5lIENQTV9DUl9HUlNUT1BfVFgJKCh1c2hvcnQpMHgwMDA1KQorI2RlZmluZSBDUE1fQ1JfUkVTVEFSVF9UWAkoKHVzaG9ydCkweDAwMDYpCisjZGVmaW5lIENQTV9DUl9DTE9TRV9SWEJECSgodXNob3J0KTB4MDAwNykKKyNkZWZpbmUgQ1BNX0NSX1NFVF9HQUREUgkoKHVzaG9ydCkweDAwMDgpCisjZGVmaW5lIENQTV9DUl9HQ0lfVElNRU9VVAkoKHVzaG9ydCkweDAwMDkpCisjZGVmaW5lIENQTV9DUl9HQ0lfQUJPUlQJKCh1c2hvcnQpMHgwMDBhKQorI2RlZmluZSBDUE1fQ1JfUkVTRVRfQkNTCSgodXNob3J0KTB4MDAwYSkKKworLyogQ1BNIENoYW5uZWwgbnVtYmVycy4gKi8KKyNkZWZpbmUgQ1BNX0NSX0NIX1NDQzEJKCh1c2hvcnQpMHgwMDAwKQorI2RlZmluZSBDUE1fQ1JfQ0hfU0NDMgkoKHVzaG9ydCkweDAwMDQpCisjZGVmaW5lIENQTV9DUl9DSF9TUEkJKCh1c2hvcnQpMHgwMDA1KQkvKiBTUEkgLyBUaW1lcnMgKi8KKyNkZWZpbmUgQ1BNX0NSX0NIX1RNUgkoKHVzaG9ydCkweDAwMDUpCisjZGVmaW5lIENQTV9DUl9DSF9TQ0MzCSgodXNob3J0KTB4MDAwOCkKKyNkZWZpbmUgQ1BNX0NSX0NIX1NNQzEJKCh1c2hvcnQpMHgwMDA5KQkvKiBTTUMxIC8gSURNQTEgKi8KKyNkZWZpbmUgQ1BNX0NSX0NIX0lETUExCSgodXNob3J0KTB4MDAwOSkKKyNkZWZpbmUgQ1BNX0NSX0NIX1NDQzQJKCh1c2hvcnQpMHgwMDBjKQorI2RlZmluZSBDUE1fQ1JfQ0hfU01DMgkoKHVzaG9ydCkweDAwMGQpCS8qIFNNQzIgLyBJRE1BMiAqLworI2RlZmluZSBDUE1fQ1JfQ0hfSURNQTIJKCh1c2hvcnQpMHgwMDBkKQorCisKKyNkZWZpbmUgbWtfY3JfY21kKENILCBDTUQpCSgoQ01EIDw8IDgpIHwgKENIIDw8IDQpKQorCisjaWYgMSAvKiBtbGVzbGllOiBJIGRpbm5hIHRoaW5rIHdlIGhhdmUgYW55IHN1Y2ggcmVzdHJpY3Rpb25zIG9uCisgICAgICAgKiBEUCBSQU0gYWJvYXJkIHRoZSAzNjAgYm9hcmQgLSBzZWUgdGhlIE1DNjgzNjBVTSBwLjMtMyAqLworCisvKiBUaGUgZHVhbCBwb3J0ZWQgUkFNIGlzIG11bHRpLWZ1bmN0aW9uYWwuICBTb21lIGFyZWFzIGNhbiBiZSAoYW5kIGFyZQorICogYmVpbmcpIHVzZWQgZm9yIG1pY3JvY29kZS4gIFRoZXJlIGlzIGFuIGFyZWEgdGhhdCBjYW4gb25seSBiZSB1c2VkCisgKiBhcyBkYXRhIHJhbSBmb3IgYnVmZmVyIGRlc2NyaXB0b3JzLCB3aGljaCBpcyBhbGwgd2UgdXNlIHJpZ2h0IG5vdy4KKyAqIEN1cnJlbnRseSB0aGUgZmlyc3QgNTEyIGFuZCBsYXN0IDI1NiBieXRlcyBhcmUgdXNlZCBmb3IgbWljcm9jb2RlLgorICovCisvKiBtbGVzbGllOiBUaGUgdUNxdWljYyBib2FyZCBpcyB1c2luZyBubyBleHRyYSBtaWNyb2NvZGUgaW4gRFBSQU0gKi8KKyNkZWZpbmUgQ1BNX0RBVEFPTkxZX0JBU0UJKCh1aW50KTB4MDAwMCkKKyNkZWZpbmUgQ1BNX0RBVEFPTkxZX1NJWkUJKCh1aW50KTB4MDgwMCkKKyNkZWZpbmUgQ1BNX0RQX05PU1BBQ0UJCSgodWludCkweDdmZmZmZmZmKQorCisjZW5kaWYKKworCisvKiBFeHBvcnQgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgY29tbXVuaWNhdGlvbiBwcm9jZXNzb3IgcmVnaXN0ZXJzCisgKiBhbmQgZHVhbCBwb3J0IHJhbS4gKi8KKy8qIGV4dGVybgljcG0zNjBfdAkqY3BtcDsgKi8JCS8qIFBvaW50ZXIgdG8gY29tbSBwcm9jZXNzb3IgKi8KK2V4dGVybiBRVUlDQyAqcHF1aWNjOwordWludCAgICAgICAgIG0zNjBfY3BtX2RwYWxsb2ModWludCBzaXplKTsKKy8qIHZvaWQgICAgICAgICAqbTM2MF9jcG1faG9zdGFsbG9jKHVpbnQgc2l6ZSk7ICovCit2b2lkCSAgICAgIG0zNjBfY3BtX3NldGJyZyh1aW50IGJyZywgdWludCByYXRlKTsKKworI2lmIDAgLyogdXNlIFFVSUNDX0JEIGRlY2xhcmVkIGluIGluY2x1ZGUvYXNtL202ODM2MF9xdWljYy5oICAqLworLyogQnVmZmVyIGRlc2NyaXB0b3JzIHVzZWQgYnkgbWFueSBvZiB0aGUgQ1BNIHByb3RvY29scy4gKi8KK3R5cGVkZWYgc3RydWN0IGNwbV9idWZfZGVzYyB7CisJdXNob3J0CWNiZF9zYzsJCS8qIFN0YXR1cyBhbmQgQ29udHJvbCAqLworCXVzaG9ydAljYmRfZGF0bGVuOwkvKiBEYXRhIGxlbmd0aCBpbiBidWZmZXIgKi8KKwl1aW50CWNiZF9idWZhZGRyOwkvKiBCdWZmZXIgYWRkcmVzcyBpbiBob3N0IG1lbW9yeSAqLworfSBjYmRfdDsKKyNlbmRpZgorCisKKy8qIHJ4IGJkIHN0YXR1cy9jb250cm9sIGJpdHMgKi8KKyNkZWZpbmUgQkRfU0NfRU1QVFkJKCh1c2hvcnQpMHg4MDAwKQkvKiBSZWNpZXZlIGlzIGVtcHR5ICovCisjZGVmaW5lIEJEX1NDX1dSQVAJKCh1c2hvcnQpMHgyMDAwKQkvKiBMYXN0IGJ1ZmZlciBkZXNjcmlwdG9yIGluIHRhYmxlICovCisjZGVmaW5lIEJEX1NDX0lOVFJQVAkoKHVzaG9ydCkweDEwMDApCS8qIEludGVycnVwdCBvbiBjaGFuZ2UgKi8KKyNkZWZpbmUgQkRfU0NfTEFTVAkoKHVzaG9ydCkweDA4MDApCS8qIExhc3QgYnVmZmVyIGluIGZyYW1lIE9SIGNvbnRyb2wgY2hhciAqLworCisjZGVmaW5lIEJEX1NDX0ZJUlNUCSgodXNob3J0KTB4MDQwMCkJLyogMXN0IGJ1ZmZlciBpbiBhbiBIRExDIGZyYW1lICovCisjZGVmaW5lIEJEX1NDX0FERFIJKCh1c2hvcnQpMHgwNDAwKQkvKiAxc3QgYnl0ZSBpcyBhIG11bHRpZHJvcCBhZGRyZXNzICovCisKKyNkZWZpbmUgQkRfU0NfQ00JKCh1c2hvcnQpMHgwMjAwKQkvKiBDb250aW5vdXMgbW9kZSAqLworI2RlZmluZSBCRF9TQ19JRAkoKHVzaG9ydCkweDAxMDApCS8qIFJlY2VpdmVkIHRvbyBtYW55IGlkbGVzICovCisKKyNkZWZpbmUgQkRfU0NfQU0JKCh1c2hvcnQpMHgwMDgwKQkvKiBNdWx0aWRyb3AgYWRkcmVzcyBtYXRjaCAqLworI2RlZmluZSBCRF9TQ19ERQkoKHVzaG9ydCkweDAwODApCS8qIERQTEwgRXJyb3IgKEhETEMpICovCisKKyNkZWZpbmUgQkRfU0NfQlIJKCh1c2hvcnQpMHgwMDIwKQkvKiBCcmVhayByZWNlaXZlZCAqLworI2RlZmluZSBCRF9TQ19MRwkoKHVzaG9ydCkweDAwMjApCS8qIEZyYW1lIGxlbmd0aCB2aW9sYXRpb24gKEhETEMpICovCisKKyNkZWZpbmUgQkRfU0NfRlIJKCh1c2hvcnQpMHgwMDEwKQkvKiBGcmFtaW5nIGVycm9yICovCisjZGVmaW5lIEJEX1NDX05PCSgodXNob3J0KTB4MDAxMCkJLyogTm9ub2N0ZXQgYWxpZ25lZCBmcmFtZSAoSERMQykgKi8KKworI2RlZmluZSBCRF9TQ19QUgkoKHVzaG9ydCkweDAwMDgpCS8qIFBhcml0eSBlcnJvciAqLworI2RlZmluZSBCRF9TQ19BQgkoKHVzaG9ydCkweDAwMDgpCS8qIFJlY2VpdmVkIGFib3J0IFNlcXVlbmNlIChIRExDKSAqLworCisjZGVmaW5lIEJEX1NDX09WCSgodXNob3J0KTB4MDAwMikJLyogT3ZlcnJ1biAqLworI2RlZmluZSBCRF9TQ19DRAkoKHVzaG9ydCkweDAwMDEpCS8qIENhcnJpZXIgRGV0ZWN0IGxvc3QgKi8KKworLyogdHggYmQgc3RhdHVzL2NvbnRyb2wgYml0cyAoYXMgZGlmZmVyIGZyb20gcnggYmQpICovCisjZGVmaW5lIEJEX1NDX1JFQURZCSgodXNob3J0KTB4ODAwMCkJLyogVHJhbnNtaXQgaXMgcmVhZHkgKi8KKyNkZWZpbmUgQkRfU0NfVEMJKCh1c2hvcnQpMHgwNDAwKQkvKiBUcmFuc21pdCBDUkMgKi8KKyNkZWZpbmUgQkRfU0NfUAkJKCh1c2hvcnQpMHgwMTAwKQkvKiB4bXQgcHJlYW1ibGUgKi8KKyNkZWZpbmUgQkRfU0NfVU4JKCh1c2hvcnQpMHgwMDAyKQkvKiBVbmRlcnJ1biAqLworCisKKworCisvKiBQYXJhbWV0ZXIgUkFNIG9mZnNldHMuICovCisKKworCisvKiBJbiAyLjQgcHBjLCB0aGUgUFJPRkZfUz9DPyBhcmUgdXNlZCBhcyBieXRlIG9mZnNldHMgaW50byBEUFJBTS4KKyAqIEluIDIuMCwgd2UgdXNlIGEgbW9yZSBzdHJ1Y3R1cmVkIEMgc3RydWN0IG1hcCBvZiBEUFJBTSwgYW5kIHNvIAorICogaW5zdGVhZCwgd2UgbmVlZCBvbmx5IGEgcGFyYW1ldGVyIHJhbSBgc2xvdCcgICovCisKKyNkZWZpbmUgUFJTTE9UX1NDQzEJMAorI2RlZmluZSBQUlNMT1RfU0NDMgkxCisjZGVmaW5lIFBSU0xPVF9TQ0MzCTIKKyNkZWZpbmUgUFJTTE9UX1NNQzEJMgorI2RlZmluZSBQUlNMT1RfU0NDNAkzCisjZGVmaW5lIFBSU0xPVF9TTUMyCTMKKworCisvKiAjZGVmaW5lIFBST0ZGX1NDQzEJKCh1aW50KTB4MDAwMCkgKi8KKy8qICNkZWZpbmUgUFJPRkZfU0NDMgkoKHVpbnQpMHgwMTAwKSAqLworLyogI2RlZmluZSBQUk9GRl9TQ0MzCSgodWludCkweDAyMDApICovCisvKiAjZGVmaW5lIFBST0ZGX1NNQzEJKCh1aW50KTB4MDI4MCkgKi8KKy8qICNkZWZpbmUgUFJPRkZfU0NDNAkoKHVpbnQpMHgwMzAwKSAqLworLyogI2RlZmluZSBQUk9GRl9TTUMyCSgodWludCkweDAzODApICovCisKKworLyogRGVmaW5lIGVub3VnaCBzbyBJIGNhbiBhdCBsZWFzdCB1c2UgdGhlIHNlcmlhbCBwb3J0IGFzIGEgVUFSVC4KKyAqIFRoZSBNQlggdXNlcyBTTUMxIGFzIHRoZSBob3N0IHNlcmlhbCBwb3J0LgorICovCit0eXBlZGVmIHN0cnVjdCBzbWNfdWFydCB7CisJdXNob3J0CXNtY19yYmFzZTsJLyogUnggQnVmZmVyIGRlc2NyaXB0b3IgYmFzZSBhZGRyZXNzICovCisJdXNob3J0CXNtY190YmFzZTsJLyogVHggQnVmZmVyIGRlc2NyaXB0b3IgYmFzZSBhZGRyZXNzICovCisJdV9jaGFyCXNtY19yZmNyOwkvKiBSeCBmdW5jdGlvbiBjb2RlICovCisJdV9jaGFyCXNtY190ZmNyOwkvKiBUeCBmdW5jdGlvbiBjb2RlICovCisJdXNob3J0CXNtY19tcmJscjsJLyogTWF4IHJlY2VpdmUgYnVmZmVyIGxlbmd0aCAqLworCXVpbnQJc21jX3JzdGF0ZTsJLyogSW50ZXJuYWwgKi8KKwl1aW50CXNtY19pZHA7CS8qIEludGVybmFsICovCisJdXNob3J0CXNtY19yYnB0cjsJLyogSW50ZXJuYWwgKi8KKwl1c2hvcnQJc21jX2liYzsJLyogSW50ZXJuYWwgKi8KKwl1aW50CXNtY19yeHRtcDsJLyogSW50ZXJuYWwgKi8KKwl1aW50CXNtY190c3RhdGU7CS8qIEludGVybmFsICovCisJdWludAlzbWNfdGRwOwkvKiBJbnRlcm5hbCAqLworCXVzaG9ydAlzbWNfdGJwdHI7CS8qIEludGVybmFsICovCisJdXNob3J0CXNtY190YmM7CS8qIEludGVybmFsICovCisJdWludAlzbWNfdHh0bXA7CS8qIEludGVybmFsICovCisJdXNob3J0CXNtY19tYXhpZGw7CS8qIE1heGltdW0gaWRsZSBjaGFyYWN0ZXJzICovCisJdXNob3J0CXNtY190bXBpZGw7CS8qIFRlbXBvcmFyeSBpZGxlIGNvdW50ZXIgKi8KKwl1c2hvcnQJc21jX2Jya2xlbjsJLyogTGFzdCByZWNlaXZlZCBicmVhayBsZW5ndGggKi8KKwl1c2hvcnQJc21jX2Jya2VjOwkvKiByY3YnZCBicmVhayBjb25kaXRpb24gY291bnRlciAqLworCXVzaG9ydAlzbWNfYnJrY3I7CS8qIHhtdCBicmVhayBjb3VudCByZWdpc3RlciAqLworCXVzaG9ydAlzbWNfcm1hc2s7CS8qIFRlbXBvcmFyeSBiaXQgbWFzayAqLworfSBzbWNfdWFydF90OworCisvKiBGdW5jdGlvbiBjb2RlIGJpdHMuCisqLworI2RlZmluZSBTTUNfRUIJKCh1X2NoYXIpMHgxMCkJLyogU2V0IGJpZyBlbmRpYW4gYnl0ZSBvcmRlciAqLworCisvKiBTTUMgdWFydCBtb2RlIHJlZ2lzdGVyLgorKi8KKyNkZWZpbmUJU01DTVJfUkVOCSgodXNob3J0KTB4MDAwMSkKKyNkZWZpbmUgU01DTVJfVEVOCSgodXNob3J0KTB4MDAwMikKKyNkZWZpbmUgU01DTVJfRE0JKCh1c2hvcnQpMHgwMDBjKQorI2RlZmluZSBTTUNNUl9TTV9HQ0kJKCh1c2hvcnQpMHgwMDAwKQorI2RlZmluZSBTTUNNUl9TTV9VQVJUCSgodXNob3J0KTB4MDAyMCkKKyNkZWZpbmUgU01DTVJfU01fVFJBTlMJKCh1c2hvcnQpMHgwMDMwKQorI2RlZmluZSBTTUNNUl9TTV9NQVNLCSgodXNob3J0KTB4MDAzMCkKKyNkZWZpbmUgU01DTVJfUE1fRVZFTgkoKHVzaG9ydCkweDAxMDApCS8qIEV2ZW4gcGFyaXR5LCBlbHNlIG9kZCAqLworI2RlZmluZSBTTUNNUl9SRVZECVNNQ01SX1BNX0VWRU4KKyNkZWZpbmUgU01DTVJfUEVOCSgodXNob3J0KTB4MDIwMCkJLyogUGFyaXR5IGVuYWJsZSAqLworI2RlZmluZSBTTUNNUl9CUwlTTUNNUl9QRU4KKyNkZWZpbmUgU01DTVJfU0wJKCh1c2hvcnQpMHgwNDAwKQkvKiBUd28gc3RvcHMsIGVsc2Ugb25lICovCisjZGVmaW5lIFNNQ1JfQ0xFTl9NQVNLCSgodXNob3J0KTB4NzgwMCkJLyogQ2hhcmFjdGVyIGxlbmd0aCAqLworI2RlZmluZSBzbWNyX21rX2NsZW4oQykJKCgoQykgPDwgMTEpICYgU01DUl9DTEVOX01BU0spCisKKy8qIFNNQzIgYXMgQ2VudHJvbmljcyBwYXJhbGxlbCBwcmludGVyLiAgSXQgaXMgaGFsZiBkdXBsZXgsIGluIHRoYXQKKyAqIGl0IGNhbiBvbmx5IHJlY2VpdmUgb3IgdHJhbnNtaXQuICBUaGUgcGFyYW1ldGVyIHJhbSB2YWx1ZXMgZm9yCisgKiBlYWNoIGRpcmVjdGlvbiBhcmUgZWl0aGVyIHVuaXF1ZSBvciBwcm9wZXJseSBvdmVybGFwLCBzbyB3ZSBjYW4KKyAqIGluY2x1ZGUgdGhlbSBpbiBvbmUgc3RydWN0dXJlLgorICovCit0eXBlZGVmIHN0cnVjdCBzbWNfY2VudHJvbmljcyB7CisJdXNob3J0CXNjZW50X3JiYXNlOworCXVzaG9ydAlzY2VudF90YmFzZTsKKwl1X2NoYXIJc2NlbnRfY2ZjcjsKKwl1X2NoYXIJc2NlbnRfc21hc2s7CisJdXNob3J0CXNjZW50X21yYmxyOworCXVpbnQJc2NlbnRfcnN0YXRlOworCXVpbnQJc2NlbnRfcl9wdHI7CisJdXNob3J0CXNjZW50X3JicHRyOworCXVzaG9ydAlzY2VudF9yX2NudDsKKwl1aW50CXNjZW50X3J0ZW1wOworCXVpbnQJc2NlbnRfdHN0YXRlOworCXVpbnQJc2NlbnRfdF9wdHI7CisJdXNob3J0CXNjZW50X3RicHRyOworCXVzaG9ydAlzY2VudF90X2NudDsKKwl1aW50CXNjZW50X3R0ZW1wOworCXVzaG9ydAlzY2VudF9tYXhfc2w7CisJdXNob3J0CXNjZW50X3NsX2NudDsKKwl1c2hvcnQJc2NlbnRfY2hhcmFjdGVyMTsKKwl1c2hvcnQJc2NlbnRfY2hhcmFjdGVyMjsKKwl1c2hvcnQJc2NlbnRfY2hhcmFjdGVyMzsKKwl1c2hvcnQJc2NlbnRfY2hhcmFjdGVyNDsKKwl1c2hvcnQJc2NlbnRfY2hhcmFjdGVyNTsKKwl1c2hvcnQJc2NlbnRfY2hhcmFjdGVyNjsKKwl1c2hvcnQJc2NlbnRfY2hhcmFjdGVyNzsKKwl1c2hvcnQJc2NlbnRfY2hhcmFjdGVyODsKKwl1c2hvcnQJc2NlbnRfcmNjbTsKKwl1c2hvcnQJc2NlbnRfcmNjcjsKK30gc21jX2NlbnRfdDsKKworLyogQ2VudHJvbmljcyBTdGF0dXMgTWFzayBSZWdpc3Rlci4KKyovCisjZGVmaW5lIFNNQ19DRU5UX0YJKCh1X2NoYXIpMHgwOCkKKyNkZWZpbmUgU01DX0NFTlRfUEUJKCh1X2NoYXIpMHgwNCkKKyNkZWZpbmUgU01DX0NFTlRfUwkoKHVfY2hhcikweDAyKQorCisvKiBTTUMgRXZlbnQgYW5kIE1hc2sgcmVnaXN0ZXIuCisqLworI2RlZmluZQlTTUNNX0JSS0UJKCh1bnNpZ25lZCBjaGFyKTB4NDApCS8qIFdoZW4gaW4gVUFSVCBNb2RlICovCisjZGVmaW5lCVNNQ01fQlJLCSgodW5zaWduZWQgY2hhcikweDEwKQkvKiBXaGVuIGluIFVBUlQgTW9kZSAqLworI2RlZmluZQlTTUNNX1RYRQkoKHVuc2lnbmVkIGNoYXIpMHgxMCkJLyogV2hlbiBpbiBUcmFuc3BhcmVudCBNb2RlICovCisjZGVmaW5lCVNNQ01fQlNZCSgodW5zaWduZWQgY2hhcikweDA0KQorI2RlZmluZQlTTUNNX1RYCQkoKHVuc2lnbmVkIGNoYXIpMHgwMikKKyNkZWZpbmUJU01DTV9SWAkJKCh1bnNpZ25lZCBjaGFyKTB4MDEpCisKKy8qIEJhdWQgcmF0ZSBnZW5lcmF0b3JzLgorKi8KKyNkZWZpbmUgQ1BNX0JSR19SU1QJCSgodWludCkweDAwMDIwMDAwKQorI2RlZmluZSBDUE1fQlJHX0VOCQkoKHVpbnQpMHgwMDAxMDAwMCkKKyNkZWZpbmUgQ1BNX0JSR19FWFRDX0lOVAkoKHVpbnQpMHgwMDAwMDAwMCkKKyNkZWZpbmUgQ1BNX0JSR19FWFRDX0NMSzIJKCh1aW50KTB4MDAwMDQwMDApCisjZGVmaW5lIENQTV9CUkdfRVhUQ19DTEs2CSgodWludCkweDAwMDA4MDAwKQorI2RlZmluZSBDUE1fQlJHX0FUQgkJKCh1aW50KTB4MDAwMDIwMDApCisjZGVmaW5lIENQTV9CUkdfQ0RfTUFTSwkJKCh1aW50KTB4MDAwMDFmZmUpCisjZGVmaW5lIENQTV9CUkdfRElWMTYJCSgodWludCkweDAwMDAwMDAxKQorCisvKiBTQ0NzLgorKi8KKyNkZWZpbmUgU0NDX0dTTVJIX0lSUAkJKCh1aW50KTB4MDAwNDAwMDApCisjZGVmaW5lIFNDQ19HU01SSF9HREUJCSgodWludCkweDAwMDEwMDAwKQorI2RlZmluZSBTQ0NfR1NNUkhfVENSQ19DQ0lUVAkoKHVpbnQpMHgwMDAwODAwMCkKKyNkZWZpbmUgU0NDX0dTTVJIX1RDUkNfQklTWU5DCSgodWludCkweDAwMDA0MDAwKQorI2RlZmluZSBTQ0NfR1NNUkhfVENSQ19IRExDCSgodWludCkweDAwMDAwMDAwKQorI2RlZmluZSBTQ0NfR1NNUkhfUkVWRAkJKCh1aW50KTB4MDAwMDIwMDApCisjZGVmaW5lIFNDQ19HU01SSF9UUlgJCSgodWludCkweDAwMDAxMDAwKQorI2RlZmluZSBTQ0NfR1NNUkhfVFRYCQkoKHVpbnQpMHgwMDAwMDgwMCkKKyNkZWZpbmUgU0NDX0dTTVJIX0NEUAkJKCh1aW50KTB4MDAwMDA0MDApCisjZGVmaW5lIFNDQ19HU01SSF9DVFNQCQkoKHVpbnQpMHgwMDAwMDIwMCkKKyNkZWZpbmUgU0NDX0dTTVJIX0NEUwkJKCh1aW50KTB4MDAwMDAxMDApCisjZGVmaW5lIFNDQ19HU01SSF9DVFNTCQkoKHVpbnQpMHgwMDAwMDA4MCkKKyNkZWZpbmUgU0NDX0dTTVJIX1RGTAkJKCh1aW50KTB4MDAwMDAwNDApCisjZGVmaW5lIFNDQ19HU01SSF9SRlcJCSgodWludCkweDAwMDAwMDIwKQorI2RlZmluZSBTQ0NfR1NNUkhfVFhTWQkJKCh1aW50KTB4MDAwMDAwMTApCisjZGVmaW5lIFNDQ19HU01SSF9TWU5MMTYJKCh1aW50KTB4MDAwMDAwMGMpCisjZGVmaW5lIFNDQ19HU01SSF9TWU5MOAkJKCh1aW50KTB4MDAwMDAwMDgpCisjZGVmaW5lIFNDQ19HU01SSF9TWU5MNAkJKCh1aW50KTB4MDAwMDAwMDQpCisjZGVmaW5lIFNDQ19HU01SSF9SVFNNCQkoKHVpbnQpMHgwMDAwMDAwMikKKyNkZWZpbmUgU0NDX0dTTVJIX1JTWU4JCSgodWludCkweDAwMDAwMDAxKQorCisjZGVmaW5lIFNDQ19HU01STF9TSVIJCSgodWludCkweDgwMDAwMDAwKQkvKiBTQ0MyIG9ubHkgKi8KKyNkZWZpbmUgU0NDX0dTTVJMX0VER0VfTk9ORQkoKHVpbnQpMHg2MDAwMDAwMCkKKyNkZWZpbmUgU0NDX0dTTVJMX0VER0VfTkVHCSgodWludCkweDQwMDAwMDAwKQorI2RlZmluZSBTQ0NfR1NNUkxfRURHRV9QT1MJKCh1aW50KTB4MjAwMDAwMDApCisjZGVmaW5lIFNDQ19HU01STF9FREdFX0JPVEgJKCh1aW50KTB4MDAwMDAwMDApCisjZGVmaW5lIFNDQ19HU01STF9UQ0kJCSgodWludCkweDEwMDAwMDAwKQorI2RlZmluZSBTQ0NfR1NNUkxfVFNOQ18zCSgodWludCkweDBjMDAwMDAwKQorI2RlZmluZSBTQ0NfR1NNUkxfVFNOQ180CSgodWludCkweDA4MDAwMDAwKQorI2RlZmluZSBTQ0NfR1NNUkxfVFNOQ18xNAkoKHVpbnQpMHgwNDAwMDAwMCkKKyNkZWZpbmUgU0NDX0dTTVJMX1RTTkNfSU5GCSgodWludCkweDAwMDAwMDAwKQorI2RlZmluZSBTQ0NfR1NNUkxfUklOVgkJKCh1aW50KTB4MDIwMDAwMDApCisjZGVmaW5lIFNDQ19HU01STF9USU5WCQkoKHVpbnQpMHgwMTAwMDAwMCkKKyNkZWZpbmUgU0NDX0dTTVJMX1RQTF8xMjgJKCh1aW50KTB4MDBjMDAwMDApCisjZGVmaW5lIFNDQ19HU01STF9UUExfNjQJKCh1aW50KTB4MDBhMDAwMDApCisjZGVmaW5lIFNDQ19HU01STF9UUExfNDgJKCh1aW50KTB4MDA4MDAwMDApCisjZGVmaW5lIFNDQ19HU01STF9UUExfMzIJKCh1aW50KTB4MDA2MDAwMDApCisjZGVmaW5lIFNDQ19HU01STF9UUExfMTYJKCh1aW50KTB4MDA0MDAwMDApCisjZGVmaW5lIFNDQ19HU01STF9UUExfOAkJKCh1aW50KTB4MDAyMDAwMDApCisjZGVmaW5lIFNDQ19HU01STF9UUExfTk9ORQkoKHVpbnQpMHgwMDAwMDAwMCkKKyNkZWZpbmUgU0NDX0dTTVJMX1RQUF9BTEwxCSgodWludCkweDAwMTgwMDAwKQorI2RlZmluZSBTQ0NfR1NNUkxfVFBQXzAxCSgodWludCkweDAwMTAwMDAwKQorI2RlZmluZSBTQ0NfR1NNUkxfVFBQXzEwCSgodWludCkweDAwMDgwMDAwKQorI2RlZmluZSBTQ0NfR1NNUkxfVFBQX1pFUk9TCSgodWludCkweDAwMDAwMDAwKQorI2RlZmluZSBTQ0NfR1NNUkxfVEVORAkJKCh1aW50KTB4MDAwNDAwMDApCisjZGVmaW5lIFNDQ19HU01STF9URENSXzMyCSgodWludCkweDAwMDMwMDAwKQorI2RlZmluZSBTQ0NfR1NNUkxfVERDUl8xNgkoKHVpbnQpMHgwMDAyMDAwMCkKKyNkZWZpbmUgU0NDX0dTTVJMX1REQ1JfOAkoKHVpbnQpMHgwMDAxMDAwMCkKKyNkZWZpbmUgU0NDX0dTTVJMX1REQ1JfMQkoKHVpbnQpMHgwMDAwMDAwMCkKKyNkZWZpbmUgU0NDX0dTTVJMX1JEQ1JfMzIJKCh1aW50KTB4MDAwMGMwMDApCisjZGVmaW5lIFNDQ19HU01STF9SRENSXzE2CSgodWludCkweDAwMDA4MDAwKQorI2RlZmluZSBTQ0NfR1NNUkxfUkRDUl84CSgodWludCkweDAwMDA0MDAwKQorI2RlZmluZSBTQ0NfR1NNUkxfUkRDUl8xCSgodWludCkweDAwMDAwMDAwKQorI2RlZmluZSBTQ0NfR1NNUkxfUkVOQ19ERk1BTgkoKHVpbnQpMHgwMDAwMzAwMCkKKyNkZWZpbmUgU0NDX0dTTVJMX1JFTkNfTUFOQ0gJKCh1aW50KTB4MDAwMDIwMDApCisjZGVmaW5lIFNDQ19HU01STF9SRU5DX0ZNMAkoKHVpbnQpMHgwMDAwMTAwMCkKKyNkZWZpbmUgU0NDX0dTTVJMX1JFTkNfTlJaSQkoKHVpbnQpMHgwMDAwMDgwMCkKKyNkZWZpbmUgU0NDX0dTTVJMX1JFTkNfTlJaCSgodWludCkweDAwMDAwMDAwKQorI2RlZmluZSBTQ0NfR1NNUkxfVEVOQ19ERk1BTgkoKHVpbnQpMHgwMDAwMDYwMCkKKyNkZWZpbmUgU0NDX0dTTVJMX1RFTkNfTUFOQ0gJKCh1aW50KTB4MDAwMDA0MDApCisjZGVmaW5lIFNDQ19HU01STF9URU5DX0ZNMAkoKHVpbnQpMHgwMDAwMDIwMCkKKyNkZWZpbmUgU0NDX0dTTVJMX1RFTkNfTlJaSQkoKHVpbnQpMHgwMDAwMDEwMCkKKyNkZWZpbmUgU0NDX0dTTVJMX1RFTkNfTlJaCSgodWludCkweDAwMDAwMDAwKQorI2RlZmluZSBTQ0NfR1NNUkxfRElBR19MRQkoKHVpbnQpMHgwMDAwMDBjMCkJLyogTG9vcCBhbmQgZWNobyAqLworI2RlZmluZSBTQ0NfR1NNUkxfRElBR19FQ0hPCSgodWludCkweDAwMDAwMDgwKQorI2RlZmluZSBTQ0NfR1NNUkxfRElBR19MT09QCSgodWludCkweDAwMDAwMDQwKQorI2RlZmluZSBTQ0NfR1NNUkxfRElBR19OT1JNCSgodWludCkweDAwMDAwMDAwKQorI2RlZmluZSBTQ0NfR1NNUkxfRU5SCQkoKHVpbnQpMHgwMDAwMDAyMCkKKyNkZWZpbmUgU0NDX0dTTVJMX0VOVAkJKCh1aW50KTB4MDAwMDAwMTApCisjZGVmaW5lIFNDQ19HU01STF9NT0RFX0VORVQJKCh1aW50KTB4MDAwMDAwMGMpCisjZGVmaW5lIFNDQ19HU01STF9NT0RFX0REQ01QCSgodWludCkweDAwMDAwMDA5KQorI2RlZmluZSBTQ0NfR1NNUkxfTU9ERV9CSVNZTkMJKCh1aW50KTB4MDAwMDAwMDgpCisjZGVmaW5lIFNDQ19HU01STF9NT0RFX1YxNAkoKHVpbnQpMHgwMDAwMDAwNykKKyNkZWZpbmUgU0NDX0dTTVJMX01PREVfQUhETEMJKCh1aW50KTB4MDAwMDAwMDYpCisjZGVmaW5lIFNDQ19HU01STF9NT0RFX1BST0ZJQlVTCSgodWludCkweDAwMDAwMDA1KQorI2RlZmluZSBTQ0NfR1NNUkxfTU9ERV9VQVJUCSgodWludCkweDAwMDAwMDA0KQorI2RlZmluZSBTQ0NfR1NNUkxfTU9ERV9TUzcJKCh1aW50KTB4MDAwMDAwMDMpCisjZGVmaW5lIFNDQ19HU01STF9NT0RFX0FUQUxLCSgodWludCkweDAwMDAwMDAyKQorI2RlZmluZSBTQ0NfR1NNUkxfTU9ERV9IRExDCSgodWludCkweDAwMDAwMDAwKQorCisjZGVmaW5lIFNDQ19UT0RSX1RPRAkJKCh1c2hvcnQpMHg4MDAwKQorCisvKiBTQ0MgRXZlbnQgYW5kIE1hc2sgcmVnaXN0ZXIuCisqLworI2RlZmluZQlTQ0NNX1RYRQkoKHVuc2lnbmVkIGNoYXIpMHgxMCkKKyNkZWZpbmUJU0NDTV9CU1kJKCh1bnNpZ25lZCBjaGFyKTB4MDQpCisjZGVmaW5lCVNDQ01fVFgJCSgodW5zaWduZWQgY2hhcikweDAyKQorI2RlZmluZQlTQ0NNX1JYCQkoKHVuc2lnbmVkIGNoYXIpMHgwMSkKKwordHlwZWRlZiBzdHJ1Y3Qgc2NjX3BhcmFtIHsKKwl1c2hvcnQJc2NjX3JiYXNlOwkvKiBSeCBCdWZmZXIgZGVzY3JpcHRvciBiYXNlIGFkZHJlc3MgKi8KKwl1c2hvcnQJc2NjX3RiYXNlOwkvKiBUeCBCdWZmZXIgZGVzY3JpcHRvciBiYXNlIGFkZHJlc3MgKi8KKwl1X2NoYXIJc2NjX3JmY3I7CS8qIFJ4IGZ1bmN0aW9uIGNvZGUgKi8KKwl1X2NoYXIJc2NjX3RmY3I7CS8qIFR4IGZ1bmN0aW9uIGNvZGUgKi8KKwl1c2hvcnQJc2NjX21yYmxyOwkvKiBNYXggcmVjZWl2ZSBidWZmZXIgbGVuZ3RoICovCisJdWludAlzY2NfcnN0YXRlOwkvKiBJbnRlcm5hbCAqLworCXVpbnQJc2NjX2lkcDsJLyogSW50ZXJuYWwgKi8KKwl1c2hvcnQJc2NjX3JicHRyOwkvKiBJbnRlcm5hbCAqLworCXVzaG9ydAlzY2NfaWJjOwkvKiBJbnRlcm5hbCAqLworCXVpbnQJc2NjX3J4dG1wOwkvKiBJbnRlcm5hbCAqLworCXVpbnQJc2NjX3RzdGF0ZTsJLyogSW50ZXJuYWwgKi8KKwl1aW50CXNjY190ZHA7CS8qIEludGVybmFsICovCisJdXNob3J0CXNjY190YnB0cjsJLyogSW50ZXJuYWwgKi8KKwl1c2hvcnQJc2NjX3RiYzsJLyogSW50ZXJuYWwgKi8KKwl1aW50CXNjY190eHRtcDsJLyogSW50ZXJuYWwgKi8KKwl1aW50CXNjY19yY3JjOwkvKiBJbnRlcm5hbCAqLworCXVpbnQJc2NjX3RjcmM7CS8qIEludGVybmFsICovCit9IHNjY3BfdDsKKworCisvKiBGdW5jdGlvbiBjb2RlIGJpdHMuCisgKi8KKyNkZWZpbmUgU0NDX0VCCSgodV9jaGFyKTB4MTApCS8qIFNldCBiaWcgZW5kaWFuIGJ5dGUgb3JkZXIgKi8KKyNkZWZpbmUgU0NDX0ZDX0RNQSAoKHVfY2hhcikweDA4KSAvKiBTZXQgU0RNQSAqLworCisvKiBDUE0gRXRoZXJuZXQgdGhyb3VnaCBTQ0MxLgorICovCit0eXBlZGVmIHN0cnVjdCBzY2NfZW5ldCB7CisJc2NjcF90CXNlbl9nZW5zY2M7CisJdWludAlzZW5fY3ByZXM7CS8qIFByZXNldCBDUkMgKi8KKwl1aW50CXNlbl9jbWFzazsJLyogQ29uc3RhbnQgbWFzayBmb3IgQ1JDICovCisJdWludAlzZW5fY3JjZWM7CS8qIENSQyBFcnJvciBjb3VudGVyICovCisJdWludAlzZW5fYWxlYzsJLyogYWxpZ25tZW50IGVycm9yIGNvdW50ZXIgKi8KKwl1aW50CXNlbl9kaXNmYzsJLyogZGlzY2FyZCBmcmFtZSBjb3VudGVyICovCisJdXNob3J0CXNlbl9wYWRzOwkvKiBUeCBzaG9ydCBmcmFtZSBwYWQgY2hhcmFjdGVyICovCisJdXNob3J0CXNlbl9yZXRsaW07CS8qIFJldHJ5IGxpbWl0IHRocmVzaG9sZCAqLworCXVzaG9ydAlzZW5fcmV0Y250OwkvKiBSZXRyeSBsaW1pdCBjb3VudGVyICovCisJdXNob3J0CXNlbl9tYXhmbHI7CS8qIG1heGltdW0gZnJhbWUgbGVuZ3RoIHJlZ2lzdGVyICovCisJdXNob3J0CXNlbl9taW5mbHI7CS8qIG1pbmltdW0gZnJhbWUgbGVuZ3RoIHJlZ2lzdGVyICovCisJdXNob3J0CXNlbl9tYXhkMTsJLyogbWF4aW11bSBETUExIGxlbmd0aCAqLworCXVzaG9ydAlzZW5fbWF4ZDI7CS8qIG1heGltdW0gRE1BMiBsZW5ndGggKi8KKwl1c2hvcnQJc2VuX21heGQ7CS8qIFJ4IG1heCBETUEgKi8KKwl1c2hvcnQJc2VuX2RtYWNudDsJLyogUnggRE1BIGNvdW50ZXIgKi8KKwl1c2hvcnQJc2VuX21heGI7CS8qIE1heCBCRCBieXRlIGNvdW50ICovCisJdXNob3J0CXNlbl9nYWRkcjE7CS8qIEdyb3VwIGFkZHJlc3MgZmlsdGVyICovCisJdXNob3J0CXNlbl9nYWRkcjI7CisJdXNob3J0CXNlbl9nYWRkcjM7CisJdXNob3J0CXNlbl9nYWRkcjQ7CisJdWludAlzZW5fdGJ1ZjBkYXRhMDsJLyogU2F2ZSBhcmVhIDAgLSBjdXJyZW50IGZyYW1lICovCisJdWludAlzZW5fdGJ1ZjBkYXRhMTsJLyogU2F2ZSBhcmVhIDEgLSBjdXJyZW50IGZyYW1lICovCisJdWludAlzZW5fdGJ1ZjByYmE7CS8qIEludGVybmFsICovCisJdWludAlzZW5fdGJ1ZjBjcmM7CS8qIEludGVybmFsICovCisJdXNob3J0CXNlbl90YnVmMGJjbnQ7CS8qIEludGVybmFsICovCisJdXNob3J0CXNlbl9wYWRkcmg7CS8qIHBoeXNpY2FsIGFkZHJlc3MgKE1TQikgKi8KKwl1c2hvcnQJc2VuX3BhZGRybTsKKwl1c2hvcnQJc2VuX3BhZGRybDsJLyogcGh5c2ljYWwgYWRkcmVzcyAoTFNCKSAqLworCXVzaG9ydAlzZW5fcHBlcjsJLyogcGVyc2lzdGVuY2UgKi8KKwl1c2hvcnQJc2VuX3JmYmRwdHI7CS8qIFJ4IGZpcnN0IEJEIHBvaW50ZXIgKi8KKwl1c2hvcnQJc2VuX3RmYmRwdHI7CS8qIFR4IGZpcnN0IEJEIHBvaW50ZXIgKi8KKwl1c2hvcnQJc2VuX3RsYmRwdHI7CS8qIFR4IGxhc3QgQkQgcG9pbnRlciAqLworCXVpbnQJc2VuX3RidWYxZGF0YTA7CS8qIFNhdmUgYXJlYSAwIC0gY3VycmVudCBmcmFtZSAqLworCXVpbnQJc2VuX3RidWYxZGF0YTE7CS8qIFNhdmUgYXJlYSAxIC0gY3VycmVudCBmcmFtZSAqLworCXVpbnQJc2VuX3RidWYxcmJhOwkvKiBJbnRlcm5hbCAqLworCXVpbnQJc2VuX3RidWYxY3JjOwkvKiBJbnRlcm5hbCAqLworCXVzaG9ydAlzZW5fdGJ1ZjFiY250OwkvKiBJbnRlcm5hbCAqLworCXVzaG9ydAlzZW5fdHhsZW47CS8qIFR4IEZyYW1lIGxlbmd0aCBjb3VudGVyICovCisJdXNob3J0CXNlbl9pYWRkcjE7CS8qIEluZGl2aWR1YWwgYWRkcmVzcyBmaWx0ZXIgKi8KKwl1c2hvcnQJc2VuX2lhZGRyMjsKKwl1c2hvcnQJc2VuX2lhZGRyMzsKKwl1c2hvcnQJc2VuX2lhZGRyNDsKKwl1c2hvcnQJc2VuX2JvZmZjbnQ7CS8qIEJhY2tvZmYgY291bnRlciAqLworCisJLyogTk9URTogU29tZSB2ZXJzaW9ucyBvZiB0aGUgbWFudWFsIGhhdmUgdGhlIGZvbGxvd2luZyBpdGVtcworCSAqIGluY29ycmVjdGx5IGRvY3VtZW50ZWQuICBCZWxvdyBpcyB0aGUgcHJvcGVyIG9yZGVyLgorCSAqLworCXVzaG9ydAlzZW5fdGFkZHJoOwkvKiB0ZW1wIGFkZHJlc3MgKE1TQikgKi8KKwl1c2hvcnQJc2VuX3RhZGRybTsKKwl1c2hvcnQJc2VuX3RhZGRybDsJLyogdGVtcCBhZGRyZXNzIChMU0IpICovCit9IHNjY19lbmV0X3Q7CisKKworCisjaWYgZGVmaW5lZCAoQ09ORklHX1VDUVVJQ0MpCisvKiB1Q3F1aWNjIGhhcyB0aGUgZm9sbG93aW5nIHNpZ25hbHMgY29ubmVjdGVkIHRvIEV0aGVybmV0OgorICogIDY4MzYwICAgIC0gbHh0OTA1CisgKiBQQTAvUlhEMSAgLSByeGQKKyAqIFBBMS9UWEQxICAtIHR4ZAorICogUEE4L0NMSzEgIC0gdGNsaworICogUEE5L0NMSzIgIC0gcmNsaworICogUEMwLyFSVFMxIC0gdF9lbgorICogUEMxLyFDVFMxIC0gY29sCisgKiBQQzUvIUNEMSAgLSBjZAorICovCisjZGVmaW5lIFBBX0VORVRfUlhECVBBX1JYRDEKKyNkZWZpbmUgUEFfRU5FVF9UWEQJUEFfVFhEMQorI2RlZmluZSBQQV9FTkVUX1RDTEsJUEFfQ0xLMQorI2RlZmluZSBQQV9FTkVUX1JDTEsJUEFfQ0xLMgorI2RlZmluZSBQQ19FTkVUX1RFTkEJUENfUlRTMQorI2RlZmluZSBQQ19FTkVUX0NMU04JUENfQ1RTMQorI2RlZmluZSBQQ19FTkVUX1JFTkEJUENfQ0QxCisKKy8qIENvbnRyb2wgYml0cyBpbiB0aGUgU0lDUiB0byByb3V0ZSBUQ0xLIChDTEsxKSBhbmQgUkNMSyAoQ0xLMikgdG8KKyAqIFNDQzEuCisgKi8KKyNkZWZpbmUgU0lDUl9FTkVUX01BU0sJKCh1aW50KTB4MDAwMDAwZmYpCisjZGVmaW5lIFNJQ1JfRU5FVF9DTEtSVAkoKHVpbnQpMHgwMDAwMDAyYykKKworI2VuZGlmIC8qIGNvbmZpZ191Y3F1aWNjICovCisKKworI2lmZGVmIE1CWAorLyogQml0cyBpbiBwYXJhbGxlbCBJL08gcG9ydCByZWdpc3RlcnMgdGhhdCBoYXZlIHRvIGJlIHNldC9jbGVhcmVkCisgKiB0byBjb25maWd1cmUgdGhlIHBpbnMgZm9yIFNDQzEgdXNlLiAgVGhlIFRDTEsgYW5kIFJDTEsgc2VlbSB1bmlxdWUKKyAqIHRvIHRoZSBNQlg4NjAgYm9hcmQuICBBbnkgdHdvIG9mIHRoZSBmb3VyIGF2YWlsYWJsZSBjbG9ja3MgY291bGQgYmUKKyAqIHVzZWQsIGFuZCB0aGUgTVBDODYwIGNvb2tib29rIG1hbnVhbCBoYXMgYW4gZXhhbXBsZSB1c2luZyBkaWZmZXJlbnQKKyAqIGNsb2NrIHBpbnMuCisgKi8KKyNkZWZpbmUgUEFfRU5FVF9SWEQJKCh1c2hvcnQpMHgwMDAxKQorI2RlZmluZSBQQV9FTkVUX1RYRAkoKHVzaG9ydCkweDAwMDIpCisjZGVmaW5lIFBBX0VORVRfVENMSwkoKHVzaG9ydCkweDAyMDApCisjZGVmaW5lIFBBX0VORVRfUkNMSwkoKHVzaG9ydCkweDA4MDApCisjZGVmaW5lIFBDX0VORVRfVEVOQQkoKHVzaG9ydCkweDAwMDEpCisjZGVmaW5lIFBDX0VORVRfQ0xTTgkoKHVzaG9ydCkweDAwMTApCisjZGVmaW5lIFBDX0VORVRfUkVOQQkoKHVzaG9ydCkweDAwMjApCisKKy8qIENvbnRyb2wgYml0cyBpbiB0aGUgU0lDUiB0byByb3V0ZSBUQ0xLIChDTEsyKSBhbmQgUkNMSyAoQ0xLNCkgdG8KKyAqIFNDQzEuICBBbHNvLCBtYWtlIHN1cmUgR1IxIChiaXQgMjQpIGFuZCBTQzEgKGJpdCAyNSkgYXJlIHplcm8uCisgKi8KKyNkZWZpbmUgU0lDUl9FTkVUX01BU0sJKCh1aW50KTB4MDAwMDAwZmYpCisjZGVmaW5lIFNJQ1JfRU5FVF9DTEtSVAkoKHVpbnQpMHgwMDAwMDAzZCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1JQWExJVEUKKy8qIFRoaXMgRU5FVCBzdHVmZiBpcyBmb3IgdGhlIE1QQzg1MCB3aXRoIGV0aGVybmV0IG9uIFNDQzIuICBTb21lIG9mCisgKiB0aGlzIG1heSBiZSB1bmlxdWUgdG8gdGhlIFJQWC1MaXRlIGNvbmZpZ3VyYXRpb24uCisgKiBOb3RlIFRFTkEgaXMgb24gUG9ydCBCLgorICovCisjZGVmaW5lIFBBX0VORVRfUlhECSgodXNob3J0KTB4MDAwNCkKKyNkZWZpbmUgUEFfRU5FVF9UWEQJKCh1c2hvcnQpMHgwMDA4KQorI2RlZmluZSBQQV9FTkVUX1RDTEsJKCh1c2hvcnQpMHgwMjAwKQorI2RlZmluZSBQQV9FTkVUX1JDTEsJKCh1c2hvcnQpMHgwODAwKQorI2RlZmluZSBQQl9FTkVUX1RFTkEJKCh1aW50KTB4MDAwMDIwMDApCisjZGVmaW5lIFBDX0VORVRfQ0xTTgkoKHVzaG9ydCkweDAwNDApCisjZGVmaW5lIFBDX0VORVRfUkVOQQkoKHVzaG9ydCkweDAwODApCisKKyNkZWZpbmUgU0lDUl9FTkVUX01BU0sJKCh1aW50KTB4MDAwMGZmMDApCisjZGVmaW5lIFNJQ1JfRU5FVF9DTEtSVAkoKHVpbnQpMHgwMDAwM2QwMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0JTRUlQCisvKiBUaGlzIEVORVQgc3R1ZmYgaXMgZm9yIHRoZSBNUEM4MjMgd2l0aCBldGhlcm5ldCBvbiBTQ0MyLgorICogVGhpcyBpcyB1bmlxdWUgdG8gdGhlIEJTRSBpcC1FbmdpbmUgYm9hcmQuCisgKi8KKyNkZWZpbmUgUEFfRU5FVF9SWEQJKCh1c2hvcnQpMHgwMDA0KQorI2RlZmluZSBQQV9FTkVUX1RYRAkoKHVzaG9ydCkweDAwMDgpCisjZGVmaW5lIFBBX0VORVRfVENMSwkoKHVzaG9ydCkweDAxMDApCisjZGVmaW5lIFBBX0VORVRfUkNMSwkoKHVzaG9ydCkweDAyMDApCisjZGVmaW5lIFBCX0VORVRfVEVOQQkoKHVpbnQpMHgwMDAwMjAwMCkKKyNkZWZpbmUgUENfRU5FVF9DTFNOCSgodXNob3J0KTB4MDA0MCkKKyNkZWZpbmUgUENfRU5FVF9SRU5BCSgodXNob3J0KTB4MDA4MCkKKworLyogQlNFIHVzZXMgcG9ydCBCIGFuZCBDIGJpdHMgZm9yIFBIWSBjb250cm9sIGFsc28uCisqLworI2RlZmluZSBQQl9CU0VfUE9XRVJVUAkoKHVpbnQpMHgwMDAwMDAwNCkKKyNkZWZpbmUgUEJfQlNFX0ZEWERJUwkoKHVpbnQpMHgwMDAwODAwMCkKKyNkZWZpbmUgUENfQlNFX0xPT1BCQUNLCSgodXNob3J0KTB4MDgwMCkKKworI2RlZmluZSBTSUNSX0VORVRfTUFTSwkoKHVpbnQpMHgwMDAwZmYwMCkKKyNkZWZpbmUgU0lDUl9FTkVUX0NMS1JUCSgodWludCkweDAwMDAyYzAwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfUlBYQ0xBU1NJQworLyogQml0cyBpbiBwYXJhbGxlbCBJL08gcG9ydCByZWdpc3RlcnMgdGhhdCBoYXZlIHRvIGJlIHNldC9jbGVhcmVkCisgKiB0byBjb25maWd1cmUgdGhlIHBpbnMgZm9yIFNDQzEgdXNlLgorICovCisjZGVmaW5lIFBBX0VORVRfUlhECSgodXNob3J0KTB4MDAwMSkKKyNkZWZpbmUgUEFfRU5FVF9UWEQJKCh1c2hvcnQpMHgwMDAyKQorI2RlZmluZSBQQV9FTkVUX1RDTEsJKCh1c2hvcnQpMHgwMjAwKQorI2RlZmluZSBQQV9FTkVUX1JDTEsJKCh1c2hvcnQpMHgwODAwKQorI2RlZmluZSBQQl9FTkVUX1RFTkEJKCh1aW50KTB4MDAwMDEwMDApCisjZGVmaW5lIFBDX0VORVRfQ0xTTgkoKHVzaG9ydCkweDAwMTApCisjZGVmaW5lIFBDX0VORVRfUkVOQQkoKHVzaG9ydCkweDAwMjApCisKKy8qIENvbnRyb2wgYml0cyBpbiB0aGUgU0lDUiB0byByb3V0ZSBUQ0xLIChDTEsyKSBhbmQgUkNMSyAoQ0xLNCkgdG8KKyAqIFNDQzEuICBBbHNvLCBtYWtlIHN1cmUgR1IxIChiaXQgMjQpIGFuZCBTQzEgKGJpdCAyNSkgYXJlIHplcm8uCisgKi8KKyNkZWZpbmUgU0lDUl9FTkVUX01BU0sJKCh1aW50KTB4MDAwMDAwZmYpCisjZGVmaW5lIFNJQ1JfRU5FVF9DTEtSVAkoKHVpbnQpMHgwMDAwMDAzZCkKKyNlbmRpZgorCisvKiBTQ0MgRXZlbnQgcmVnaXN0ZXIgYXMgdXNlZCBieSBFdGhlcm5ldC4KKyovCisjZGVmaW5lIFNDQ0VfRU5FVF9HUkEJKCh1c2hvcnQpMHgwMDgwKQkvKiBHcmFjZWZ1bCBzdG9wIGNvbXBsZXRlICovCisjZGVmaW5lIFNDQ0VfRU5FVF9UWEUJKCh1c2hvcnQpMHgwMDEwKQkvKiBUcmFuc21pdCBFcnJvciAqLworI2RlZmluZSBTQ0NFX0VORVRfUlhGCSgodXNob3J0KTB4MDAwOCkJLyogRnVsbCBmcmFtZSByZWNlaXZlZCAqLworI2RlZmluZSBTQ0NFX0VORVRfQlNZCSgodXNob3J0KTB4MDAwNCkJLyogQWxsIGluY29taW5nIGJ1ZmZlcnMgZnVsbCAqLworI2RlZmluZSBTQ0NFX0VORVRfVFhCCSgodXNob3J0KTB4MDAwMikJLyogQSBidWZmZXIgd2FzIHRyYW5zbWl0dGVkICovCisjZGVmaW5lIFNDQ0VfRU5FVF9SWEIJKCh1c2hvcnQpMHgwMDAxKQkvKiBBIGJ1ZmZlciB3YXMgcmVjZWl2ZWQgKi8KKworLyogU0NDIE1vZGUgUmVnaXN0ZXIgKFBNU1IpIGFzIHVzZWQgYnkgRXRoZXJuZXQuCisqLworI2RlZmluZSBTQ0NfUE1TUl9IQkMJKCh1c2hvcnQpMHg4MDAwKQkvKiBFbmFibGUgaGVhcnRiZWF0ICovCisjZGVmaW5lIFNDQ19QTVNSX0ZDCSgodXNob3J0KTB4NDAwMCkJLyogRm9yY2UgY29sbGlzaW9uICovCisjZGVmaW5lIFNDQ19QTVNSX1JTSAkoKHVzaG9ydCkweDIwMDApCS8qIFJlY2VpdmUgc2hvcnQgZnJhbWVzICovCisjZGVmaW5lIFNDQ19QTVNSX0lBTQkoKHVzaG9ydCkweDEwMDApCS8qIENoZWNrIGluZGl2aWR1YWwgaGFzaCAqLworI2RlZmluZSBTQ0NfUE1TUl9FTkNSQwkoKHVzaG9ydCkweDA4MDApCS8qIEV0aGVybmV0IENSQyBtb2RlICovCisjZGVmaW5lIFNDQ19QTVNSX1BSTwkoKHVzaG9ydCkweDAyMDApCS8qIFByb21pc2N1b3VzIG1vZGUgKi8KKyNkZWZpbmUgU0NDX1BNU1JfQlJPCSgodXNob3J0KTB4MDEwMCkJLyogQ2F0Y2ggYnJvYWRjYXN0IHBrdHMgKi8KKyNkZWZpbmUgU0NDX1BNU1JfU0JUCSgodXNob3J0KTB4MDA4MCkJLyogU3BlY2lhbCBiYWNrb2ZmIHRpbWVyICovCisjZGVmaW5lIFNDQ19QTVNSX0xQQgkoKHVzaG9ydCkweDAwNDApCS8qIFNldCBMb29wYmFjayBtb2RlICovCisjZGVmaW5lIFNDQ19QTVNSX1NJUAkoKHVzaG9ydCkweDAwMjApCS8qIFNhbXBsZSBJbnB1dCBQaW5zICovCisjZGVmaW5lIFNDQ19QTVNSX0xDVwkoKHVzaG9ydCkweDAwMTApCS8qIExhdGUgY29sbGlzaW9uIHdpbmRvdyAqLworI2RlZmluZSBTQ0NfUE1TUl9OSUIyMgkoKHVzaG9ydCkweDAwMGEpCS8qIFN0YXJ0IGZyYW1lIHNlYXJjaCAqLworI2RlZmluZSBTQ0NfUE1TUl9GREUJKCh1c2hvcnQpMHgwMDAxKQkvKiBGdWxsIGR1cGxleCBlbmFibGUgKi8KKworLyogQnVmZmVyIGRlc2NyaXB0b3IgY29udHJvbC9zdGF0dXMgdXNlZCBieSBFdGhlcm5ldCByZWNlaXZlLgorKi8KKyNkZWZpbmUgQkRfRU5FVF9SWF9FTVBUWQkoKHVzaG9ydCkweDgwMDApCisjZGVmaW5lIEJEX0VORVRfUlhfV1JBUAkJKCh1c2hvcnQpMHgyMDAwKQorI2RlZmluZSBCRF9FTkVUX1JYX0lOVFIJCSgodXNob3J0KTB4MTAwMCkKKyNkZWZpbmUgQkRfRU5FVF9SWF9MQVNUCQkoKHVzaG9ydCkweDA4MDApCisjZGVmaW5lIEJEX0VORVRfUlhfRklSU1QJKCh1c2hvcnQpMHgwNDAwKQorI2RlZmluZSBCRF9FTkVUX1JYX01JU1MJCSgodXNob3J0KTB4MDEwMCkKKyNkZWZpbmUgQkRfRU5FVF9SWF9MRwkJKCh1c2hvcnQpMHgwMDIwKQorI2RlZmluZSBCRF9FTkVUX1JYX05PCQkoKHVzaG9ydCkweDAwMTApCisjZGVmaW5lIEJEX0VORVRfUlhfU0gJCSgodXNob3J0KTB4MDAwOCkKKyNkZWZpbmUgQkRfRU5FVF9SWF9DUgkJKCh1c2hvcnQpMHgwMDA0KQorI2RlZmluZSBCRF9FTkVUX1JYX09WCQkoKHVzaG9ydCkweDAwMDIpCisjZGVmaW5lIEJEX0VORVRfUlhfQ0wJCSgodXNob3J0KTB4MDAwMSkKKyNkZWZpbmUgQkRfRU5FVF9SWF9TVEFUUwkoKHVzaG9ydCkweDAxM2YpCS8qIEFsbCBzdGF0dXMgYml0cyAqLworCisvKiBCdWZmZXIgZGVzY3JpcHRvciBjb250cm9sL3N0YXR1cyB1c2VkIGJ5IEV0aGVybmV0IHRyYW5zbWl0LgorKi8KKyNkZWZpbmUgQkRfRU5FVF9UWF9SRUFEWQkoKHVzaG9ydCkweDgwMDApCisjZGVmaW5lIEJEX0VORVRfVFhfUEFECQkoKHVzaG9ydCkweDQwMDApCisjZGVmaW5lIEJEX0VORVRfVFhfV1JBUAkJKCh1c2hvcnQpMHgyMDAwKQorI2RlZmluZSBCRF9FTkVUX1RYX0lOVFIJCSgodXNob3J0KTB4MTAwMCkKKyNkZWZpbmUgQkRfRU5FVF9UWF9MQVNUCQkoKHVzaG9ydCkweDA4MDApCisjZGVmaW5lIEJEX0VORVRfVFhfVEMJCSgodXNob3J0KTB4MDQwMCkKKyNkZWZpbmUgQkRfRU5FVF9UWF9ERUYJCSgodXNob3J0KTB4MDIwMCkKKyNkZWZpbmUgQkRfRU5FVF9UWF9IQgkJKCh1c2hvcnQpMHgwMTAwKQorI2RlZmluZSBCRF9FTkVUX1RYX0xDCQkoKHVzaG9ydCkweDAwODApCisjZGVmaW5lIEJEX0VORVRfVFhfUkwJCSgodXNob3J0KTB4MDA0MCkKKyNkZWZpbmUgQkRfRU5FVF9UWF9SQ01BU0sJKCh1c2hvcnQpMHgwMDNjKQorI2RlZmluZSBCRF9FTkVUX1RYX1VOCQkoKHVzaG9ydCkweDAwMDIpCisjZGVmaW5lIEJEX0VORVRfVFhfQ1NMCQkoKHVzaG9ydCkweDAwMDEpCisjZGVmaW5lIEJEX0VORVRfVFhfU1RBVFMJKCh1c2hvcnQpMHgwM2ZmKQkvKiBBbGwgc3RhdHVzIGJpdHMgKi8KKworLyogU0NDIGFzIFVBUlQKKyovCit0eXBlZGVmIHN0cnVjdCBzY2NfdWFydCB7CisJc2NjcF90CXNjY19nZW5zY2M7CisJdWludAlzY2NfcmVzMTsJLyogUmVzZXJ2ZWQgKi8KKwl1aW50CXNjY19yZXMyOwkvKiBSZXNlcnZlZCAqLworCXVzaG9ydAlzY2NfbWF4aWRsOwkvKiBNYXhpbXVtIGlkbGUgY2hhcnMgKi8KKwl1c2hvcnQJc2NjX2lkbGM7CS8qIHRlbXAgaWRsZSBjb3VudGVyICovCisJdXNob3J0CXNjY19icmtjcjsJLyogQnJlYWsgY291bnQgcmVnaXN0ZXIgKi8KKwl1c2hvcnQJc2NjX3BhcmVjOwkvKiByZWNlaXZlIHBhcml0eSBlcnJvciBjb3VudGVyICovCisJdXNob3J0CXNjY19mcm1lYzsJLyogcmVjZWl2ZSBmcmFtaW5nIGVycm9yIGNvdW50ZXIgKi8KKwl1c2hvcnQJc2NjX25vc2VjOwkvKiByZWNlaXZlIG5vaXNlIGNvdW50ZXIgKi8KKwl1c2hvcnQJc2NjX2Jya2VjOwkvKiByZWNlaXZlIGJyZWFrIGNvbmRpdGlvbiBjb3VudGVyICovCisJdXNob3J0CXNjY19icmtsbjsJLyogbGFzdCByZWNlaXZlZCBicmVhayBsZW5ndGggKi8KKwl1c2hvcnQJc2NjX3VhZGRyMTsJLyogVUFSVCBhZGRyZXNzIGNoYXJhY3RlciAxICovCisJdXNob3J0CXNjY191YWRkcjI7CS8qIFVBUlQgYWRkcmVzcyBjaGFyYWN0ZXIgMiAqLworCXVzaG9ydAlzY2NfcnRlbXA7CS8qIFRlbXAgc3RvcmFnZSAqLworCXVzaG9ydAlzY2NfdG9zZXE7CS8qIFRyYW5zbWl0IG91dCBvZiBzZXF1ZW5jZSBjaGFyICovCisJdXNob3J0CXNjY19jaGFyMTsJLyogY29udHJvbCBjaGFyYWN0ZXIgMSAqLworCXVzaG9ydAlzY2NfY2hhcjI7CS8qIGNvbnRyb2wgY2hhcmFjdGVyIDIgKi8KKwl1c2hvcnQJc2NjX2NoYXIzOwkvKiBjb250cm9sIGNoYXJhY3RlciAzICovCisJdXNob3J0CXNjY19jaGFyNDsJLyogY29udHJvbCBjaGFyYWN0ZXIgNCAqLworCXVzaG9ydAlzY2NfY2hhcjU7CS8qIGNvbnRyb2wgY2hhcmFjdGVyIDUgKi8KKwl1c2hvcnQJc2NjX2NoYXI2OwkvKiBjb250cm9sIGNoYXJhY3RlciA2ICovCisJdXNob3J0CXNjY19jaGFyNzsJLyogY29udHJvbCBjaGFyYWN0ZXIgNyAqLworCXVzaG9ydAlzY2NfY2hhcjg7CS8qIGNvbnRyb2wgY2hhcmFjdGVyIDggKi8KKwl1c2hvcnQJc2NjX3JjY207CS8qIHJlY2VpdmUgY29udHJvbCBjaGFyYWN0ZXIgbWFzayAqLworCXVzaG9ydAlzY2NfcmNjcjsJLyogcmVjZWl2ZSBjb250cm9sIGNoYXJhY3RlciByZWdpc3RlciAqLworCXVzaG9ydAlzY2NfcmxiYzsJLyogcmVjZWl2ZSBsYXN0IGJyZWFrIGNoYXJhY3RlciAqLworfSBzY2NfdWFydF90OworCisvKiBTQ0MgRXZlbnQgYW5kIE1hc2sgcmVnaXN0ZXJzIHdoZW4gaXQgaXMgdXNlZCBhcyBhIFVBUlQuCisqLworI2RlZmluZSBVQVJUX1NDQ01fR0xSCQkoKHVzaG9ydCkweDEwMDApCisjZGVmaW5lIFVBUlRfU0NDTV9HTFQJCSgodXNob3J0KTB4MDgwMCkKKyNkZWZpbmUgVUFSVF9TQ0NNX0FCCQkoKHVzaG9ydCkweDAyMDApCisjZGVmaW5lIFVBUlRfU0NDTV9JREwJCSgodXNob3J0KTB4MDEwMCkKKyNkZWZpbmUgVUFSVF9TQ0NNX0dSQQkJKCh1c2hvcnQpMHgwMDgwKQorI2RlZmluZSBVQVJUX1NDQ01fQlJLRQkJKCh1c2hvcnQpMHgwMDQwKQorI2RlZmluZSBVQVJUX1NDQ01fQlJLUwkJKCh1c2hvcnQpMHgwMDIwKQorI2RlZmluZSBVQVJUX1NDQ01fQ0NSCQkoKHVzaG9ydCkweDAwMDgpCisjZGVmaW5lIFVBUlRfU0NDTV9CU1kJCSgodXNob3J0KTB4MDAwNCkKKyNkZWZpbmUgVUFSVF9TQ0NNX1RYCQkoKHVzaG9ydCkweDAwMDIpCisjZGVmaW5lIFVBUlRfU0NDTV9SWAkJKCh1c2hvcnQpMHgwMDAxKQorCisvKiBUaGUgU0NDIFBNU1Igd2hlbiB1c2VkIGFzIGEgVUFSVC4KKyovCisjZGVmaW5lIFNDVV9QTVNSX0ZMQwkJKCh1c2hvcnQpMHg4MDAwKQorI2RlZmluZSBTQ1VfUE1TUl9TTAkJKCh1c2hvcnQpMHg0MDAwKQorI2RlZmluZSBTQ1VfUE1TUl9DTAkJKCh1c2hvcnQpMHgzMDAwKQorI2RlZmluZSBTQ1VfUE1TUl9VTQkJKCh1c2hvcnQpMHgwYzAwKQorI2RlZmluZSBTQ1VfUE1TUl9GUloJCSgodXNob3J0KTB4MDIwMCkKKyNkZWZpbmUgU0NVX1BNU1JfUlpTCQkoKHVzaG9ydCkweDAxMDApCisjZGVmaW5lIFNDVV9QTVNSX1NZTgkJKCh1c2hvcnQpMHgwMDgwKQorI2RlZmluZSBTQ1VfUE1TUl9EUlQJCSgodXNob3J0KTB4MDA0MCkKKyNkZWZpbmUgU0NVX1BNU1JfUEVOCQkoKHVzaG9ydCkweDAwMTApCisjZGVmaW5lIFNDVV9QTVNSX1JQTQkJKCh1c2hvcnQpMHgwMDBjKQorI2RlZmluZSBTQ1VfUE1TUl9SRVZQCQkoKHVzaG9ydCkweDAwMDgpCisjZGVmaW5lIFNDVV9QTVNSX1RQTQkJKCh1c2hvcnQpMHgwMDAzKQorI2RlZmluZSBTQ1VfUE1TUl9URVZQCQkoKHVzaG9ydCkweDAwMDMpCisKKy8qIENQTSBUcmFuc3BhcmVudCBtb2RlIFNDQy4KKyAqLwordHlwZWRlZiBzdHJ1Y3Qgc2NjX3RyYW5zIHsKKwlzY2NwX3QJc3RfZ2Vuc2NjOworCXVpbnQJc3RfY3ByZXM7CS8qIFByZXNldCBDUkMgKi8KKwl1aW50CXN0X2NtYXNrOwkvKiBDb25zdGFudCBtYXNrIGZvciBDUkMgKi8KK30gc2NjX3RyYW5zX3Q7CisKKyNkZWZpbmUgQkRfU0NDX1RYX0xBU1QJCSgodXNob3J0KTB4MDgwMCkKKworCisKKy8qIENQTSBpbnRlcnJ1cHRzLiAgVGhlcmUgYXJlIG5lYXJseSAzMiBpbnRlcnJ1cHRzIGdlbmVyYXRlZCBieSBDUE0KKyAqIGNoYW5uZWxzIG9yIGRldmljZXMuICBBbGwgb2YgdGhlc2UgYXJlIHByZXNlbnRlZCB0byB0aGUgUFBDIGNvcmUKKyAqIGFzIGEgc2luZ2xlIGludGVycnVwdC4gIFRoZSBDUE0gaW50ZXJydXB0IGhhbmRsZXIgZGlzcGF0Y2hlcyBpdHMKKyAqIG93biBoYW5kbGVycywgaW4gYSBzaW1pbGFyIGZhc2hpb24gdG8gdGhlIFBQQyBjb3JlIGhhbmRsZXIuICBXZQorICogdXNlIHRoZSB0YWJsZSBhcyBkZWZpbmVkIGluIHRoZSBtYW51YWxzIChpLmUuIG5vIHNwZWNpYWwgaGlnaAorICogcHJpb3JpdHkgYW5kIFNDQzEgPT0gU0NDYSwgZXRjLi4uKS4KKyAqLworLyogI2RlZmluZSBDUE1WRUNfTlIJCTMyICovCisvKiAjZGVmaW5lCUNQTVZFQ19QSU9fUEMxNQkJKCh1c2hvcnQpMHgxZikgKi8KKy8qICNkZWZpbmUJQ1BNVkVDX1NDQzEJCSgodXNob3J0KTB4MWUpICovCisvKiAjZGVmaW5lCUNQTVZFQ19TQ0MyCQkoKHVzaG9ydCkweDFkKSAqLworLyogI2RlZmluZQlDUE1WRUNfU0NDMwkJKCh1c2hvcnQpMHgxYykgKi8KKy8qICNkZWZpbmUJQ1BNVkVDX1NDQzQJCSgodXNob3J0KTB4MWIpICovCisvKiAjZGVmaW5lCUNQTVZFQ19QSU9fUEMxNAkJKCh1c2hvcnQpMHgxYSkgKi8KKy8qICNkZWZpbmUJQ1BNVkVDX1RJTUVSMQkJKCh1c2hvcnQpMHgxOSkgKi8KKy8qICNkZWZpbmUJQ1BNVkVDX1BJT19QQzEzCQkoKHVzaG9ydCkweDE4KSAqLworLyogI2RlZmluZQlDUE1WRUNfUElPX1BDMTIJCSgodXNob3J0KTB4MTcpICovCisvKiAjZGVmaW5lCUNQTVZFQ19TRE1BX0NCX0VSUgkoKHVzaG9ydCkweDE2KSAqLworLyogI2RlZmluZSBDUE1WRUNfSURNQTEJCSgodXNob3J0KTB4MTUpICovCisvKiAjZGVmaW5lIENQTVZFQ19JRE1BMgkJKCh1c2hvcnQpMHgxNCkgKi8KKy8qICNkZWZpbmUgQ1BNVkVDX1RJTUVSMgkJKCh1c2hvcnQpMHgxMikgKi8KKy8qICNkZWZpbmUgQ1BNVkVDX1JJU0NUSU1FUgkoKHVzaG9ydCkweDExKSAqLworLyogI2RlZmluZSBDUE1WRUNfSTJDCQkoKHVzaG9ydCkweDEwKSAqLworLyogI2RlZmluZQlDUE1WRUNfUElPX1BDMTEJCSgodXNob3J0KTB4MGYpICovCisvKiAjZGVmaW5lCUNQTVZFQ19QSU9fUEMxMAkJKCh1c2hvcnQpMHgwZSkgKi8KKy8qICNkZWZpbmUgQ1BNVkVDX1RJTUVSMwkJKCh1c2hvcnQpMHgwYykgKi8KKy8qICNkZWZpbmUJQ1BNVkVDX1BJT19QQzkJCSgodXNob3J0KTB4MGIpICovCisvKiAjZGVmaW5lCUNQTVZFQ19QSU9fUEM4CQkoKHVzaG9ydCkweDBhKSAqLworLyogI2RlZmluZQlDUE1WRUNfUElPX1BDNwkJKCh1c2hvcnQpMHgwOSkgKi8KKy8qICNkZWZpbmUgQ1BNVkVDX1RJTUVSNAkJKCh1c2hvcnQpMHgwNykgKi8KKy8qICNkZWZpbmUJQ1BNVkVDX1BJT19QQzYJCSgodXNob3J0KTB4MDYpICovCisvKiAjZGVmaW5lCUNQTVZFQ19TUEkJCSgodXNob3J0KTB4MDUpICovCisvKiAjZGVmaW5lCUNQTVZFQ19TTUMxCQkoKHVzaG9ydCkweDA0KSAqLworLyogI2RlZmluZQlDUE1WRUNfU01DMgkJKCh1c2hvcnQpMHgwMykgKi8KKy8qICNkZWZpbmUJQ1BNVkVDX1BJT19QQzUJCSgodXNob3J0KTB4MDIpICovCisvKiAjZGVmaW5lCUNQTVZFQ19QSU9fUEM0CQkoKHVzaG9ydCkweDAxKSAqLworLyogI2RlZmluZQlDUE1WRUNfRVJST1IJCSgodXNob3J0KTB4MDApICovCisKK2V4dGVybiB2b2lkIGNwbV9pbnN0YWxsX2hhbmRsZXIoaW50IHZlYywgdm9pZCAoKmhhbmRsZXIpKHZvaWQgKiksIHZvaWQgKmRldl9pZCk7CisKKy8qIENQTSBpbnRlcnJ1cHQgY29uZmlndXJhdGlvbiB2ZWN0b3IuCisqLworI2RlZmluZQlDSUNSX1NDRF9TQ0M0CQkoKHVpbnQpMHgwMGMwMDAwMCkJLyogU0NDNCBAIFNDQ2QgKi8KKyNkZWZpbmUJQ0lDUl9TQ0NfU0NDMwkJKCh1aW50KTB4MDAyMDAwMDApCS8qIFNDQzMgQCBTQ0NjICovCisjZGVmaW5lCUNJQ1JfU0NCX1NDQzIJCSgodWludCkweDAwMDQwMDAwKQkvKiBTQ0MyIEAgU0NDYiAqLworI2RlZmluZQlDSUNSX1NDQV9TQ0MxCQkoKHVpbnQpMHgwMDAwMDAwMCkJLyogU0NDMSBAIFNDQ2EgKi8KKyNkZWZpbmUgQ0lDUl9JUkxfTUFTSwkJKCh1aW50KTB4MDAwMGUwMDApCS8qIENvcmUgaW50ZXJycnVwdCAqLworI2RlZmluZSBDSUNSX0hQX01BU0sJCSgodWludCkweDAwMDAxZjAwKQkvKiBIaS1wcmkgaW50LiAqLworI2RlZmluZSBDSUNSX0lFTgkJKCh1aW50KTB4MDAwMDAwODApCS8qIEludC4gZW5hYmxlICovCisjZGVmaW5lIENJQ1JfU1BTCQkoKHVpbnQpMHgwMDAwMDAwMSkJLyogU0NDIFNwcmVhZCAqLworI2VuZGlmIC8qIF9fQ1BNXzM2MF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvY3B1dGltZS5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L2NwdXRpbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGM0YTY2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L2NwdXRpbWUuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19NNjhLTk9NTVVfQ1BVVElNRV9ICisjZGVmaW5lIF9fTTY4S05PTU1VX0NQVVRJTUVfSAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvY3B1dGltZS5oPgorCisjZW5kaWYgLyogX19NNjhLTk9NTVVfQ1BVVElNRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvY3VycmVudC5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L2N1cnJlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2VlMGY5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L2N1cnJlbnQuaApAQCAtMCwwICsxLDI0IEBACisjaWZuZGVmIF9NNjhLTk9NTVVfQ1VSUkVOVF9ICisjZGVmaW5lIF9NNjhLTk9NTVVfQ1VSUkVOVF9ICisvKgorICoJY3VycmVudC5oCisgKgkoQykgQ29weXJpZ2h0IDIwMDAsIExpbmVvLCBEYXZpZCBNY0N1bGxvdWdoIDxkYXZpZG1AdWNsaW51eC5vcmc+CisgKgkoQykgQ29weXJpZ2h0IDIwMDIsIEdyZWcgVW5nZXJlciAoZ2VyZ0BzbmFwZ2Vhci5jb20pCisgKgorICoJcmF0aGVyIHRoYW4gZGVkaWNhdGUgYSByZWdpc3RlciAoYXMgdGhlIG02OGsgc291cmNlIGRvZXMpLCB3ZQorICoJanVzdCBrZWVwIGEgZ2xvYmFsLCAgd2Ugc2hvdWxkIHByb2JhYmx5IGp1c3QgY2hhbmdlIGl0IGFsbCB0byBiZQorICoJY3VycmVudCBhbmQgbG9zZSBfY3VycmVudF90YXNrLgorICovCisKKyNpbmNsdWRlIDxsaW51eC90aHJlYWRfaW5mby5oPgorCitzdHJ1Y3QgdGFza19zdHJ1Y3Q7CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRhc2tfc3RydWN0ICpnZXRfY3VycmVudCh2b2lkKQoreworCXJldHVybihjdXJyZW50X3RocmVhZF9pbmZvKCktPnRhc2spOworfQorCisjZGVmaW5lCWN1cnJlbnQJZ2V0X2N1cnJlbnQoKQorCisjZW5kaWYgLyogX002OEtOT01NVV9DVVJSRU5UX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9kYmcuaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9kYmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2FmMzI3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L2RiZy5oCkBAIC0wLDAgKzEsNiBAQAorI2RlZmluZSBERUJVRyAxCisjaWZkZWYgQ09ORklHX0NPTERGSVJFCisjZGVmaW5lCUJSRUFLIGFzbSB2b2xhdGlsZSAoImhhbHQiKQorI2Vsc2UKKyNkZWZpbmUgQlJFQUsgKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopMHhkZWFkYmVlMCA9IDAKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L2RlbGF5LmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvZGVsYXkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2E5NzYyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L2RlbGF5LmgKQEAgLTAsMCArMSw3NiBAQAorI2lmbmRlZiBfTTY4S05PTU1VX0RFTEFZX0gKKyNkZWZpbmUgX002OEtOT01NVV9ERUxBWV9ICisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTQgSGFtaXNoIE1hY2RvbmFsZAorICogQ29weXJpZ2h0IChDKSAyMDA0IEdyZWcgVW5nZXJlciA8Z2VyZ0BzbmFwZ2Vhci5jb20+CisgKi8KKworI2luY2x1ZGUgPGFzbS9wYXJhbS5oPgorCitleHRlcm4gX19pbmxpbmVfXyB2b2lkIF9fZGVsYXkodW5zaWduZWQgbG9uZyBsb29wcykKK3sKKyNpZiBkZWZpbmVkKENPTkZJR19DT0xERklSRSkKKwkvKiBUaGUgY29sZGZpcmUgcnVucyB0aGlzIGxvb3AgYXQgc2lnbmlmaWNhbnRseSBkaWZmZXJlbnQgc3BlZWRzCisJICogZGVwZW5kaW5nIHVwb24gbG9uZyB3b3JkIGFsaWdubWVudCBvciBub3QuICBXZSdsbCBwYWQgaXQgdG8KKwkgKiBsb25nIHdvcmQgYWxpZ25tZW50IHdoaWNoIGlzIHRoZSBmYXN0ZXIgdmVyc2lvbi4KKwkgKiBUaGUgMHg0YThlIGlzIG9mIGNvdXJzZSBhICd0c3RsICVmcCcgaW5zdHJ1Y3Rpb24uICBUaGlzIGlzIGJldHRlcgorCSAqIHRoYW4gdXNpbmcgYSBOT1AgKDB4NGU3MSkgaW5zdHJ1Y3Rpb24gYmVjYXVzZSBpdCBleGVjdXRlcyBpbiBvbmUKKwkgKiBjeWNsZSBub3QgdGhyZWUgYW5kIGRvZXNuJ3QgYWxsb3cgZm9yIGFuIGFyYml0YXJ5IGRlbGF5IHdhaXRpbmcKKwkgKiBmb3IgYnVzIGN5Y2xlcyB0byBmaW5pc2guICBBbHNvIGZwL2E2IGlzbid0IGxpa2VseSB0byBjYXVzZSBhCisJICogc3RhbGwgd2FpdGluZyBmb3IgdGhlIHJlZ2lzdGVyIHRvIGJlY29tZSB2YWxpZCBpZiBzdWNoIGlzIGFkZGVkCisJICogdG8gdGhlIGNvbGRmaXJlIGF0IHNvbWUgc3RhZ2UuCisJICovCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAkiLmJhbGlnbncgNCwgMHg0YThlXG5cdCIKKwkJCQkiMTogc3VicWwgIzEsICUwXG5cdCIKKwkJCQkiamNjIDFiIgorCQk6ICI9ZCIgKGxvb3BzKSA6ICIwIiAobG9vcHMpKTsKKyNlbHNlCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAkiMTogc3VicWwgIzEsICUwXG5cdCIKKwkJCQkiamNjIDFiIgorCQk6ICI9ZCIgKGxvb3BzKSA6ICIwIiAobG9vcHMpKTsKKyNlbmRpZgorfQorCisvKgorICoJSWRlYWxseSB3ZSB1c2UgYSAzMiozMi0+NjQgbXVsdGlwbHkgdG8gY2FsY3VsYXRlIHRoZSBudW1iZXIgb2YKKyAqCWxvb3AgaXRlcmF0aW9ucywgYnV0IHRoZSBvbGRlciBzdGFuZGFyZCA2OGsgYW5kIENvbGRGaXJlIGRvIG5vdAorICoJaGF2ZSB0aGlzIGluc3RydWN0aW9uLiBTbyBmb3IgdGhlbSB3ZSBoYXZlIGEgY2xzb2UgYXBwcm94aW1hdGlvbgorICoJbG9vcCB1c2luZyAzMiozMi0+MzIgbXVsdGlwbGllcyBvbmx5LiBUaGlzIGNhbGN1bGF0aW9uIGJhc2VkIG9uCisgKgl0aGUgQVJNIHZlcnNpb24gb2YgZGVsYXkuCisgKgorICoJV2Ugd2FudCB0byBpbXBsZW1lbnQ6CisgKgorICoJbG9vcHMgPSAodXNlY3MgKiAweDEwYzYgKiBIWiAqIGxvb3BzX3Blcl9qaWZmeSkgLyAyXjMyCisgKi8KKworI2RlZmluZQlIWlNDQUxFCQkoMjY4NDM1NDU2IC8gKDEwMDAwMDAvSFopKQorCitleHRlcm4gdW5zaWduZWQgbG9uZyBsb29wc19wZXJfamlmZnk7CisKK2V4dGVybiBfX2lubGluZV9fIHZvaWQgX3VkZWxheSh1bnNpZ25lZCBsb25nIHVzZWNzKQoreworI2lmIGRlZmluZWQoQ09ORklHX002ODMyOCkgfHwgZGVmaW5lZChDT05GSUdfTTY4RVozMjgpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19NNjhWWjMyOCkgfHwgZGVmaW5lZChDT05GSUdfTTY4MzYwKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfQ09MREZJUkUpCisJX19kZWxheSgoKCh1c2VjcyAqIEhaU0NBTEUpID4+IDExKSAqIChsb29wc19wZXJfamlmZnkgPj4gMTEpKSA+PiA2KTsKKyNlbHNlCisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwl1c2VjcyAqPSA0Mjk1OwkJLyogMioqMzIgLyAxMDAwMDAwICovCisJX19hc21fXyAoIm11bHVsICUyLCUwOiUxIgorCQk6ICI9ZCIgKHVzZWNzKSwgIj1kIiAodG1wKQorCQk6ICJkIiAodXNlY3MpLCAiMSIgKGxvb3BzX3Blcl9qaWZmeSpIWikpOworCV9fZGVsYXkodXNlY3MpOworI2VuZGlmCit9CisKKy8qCisgKglNb3ZlZCB0aGUgdWRlbGF5KCkgZnVuY3Rpb24gaW50byBsaWJyYXJ5IGNvZGUsIG5vIGxvbmdlciBpbmxpbmVkLgorICoJSSBoYWQgdG8gY2hhbmdlIHRoZSBhbGdvcml0aG0gYmVjYXVzZSB3ZSBhcmUgb3ZlcmZsb3dpbmcgbm93IG9uCisgKgl0aGUgZmFzdGVyIENvbGRGaXJlIHBhcnRzLiBUaGUgY29kZSBpcyBhIGxpdHRsZSBiaWdlciwgc28gaXQgbWFrZXMKKyAqCXNlbnNlIHRvIGxpYnJhcnkgaXQuCisgKi8KK2V4dGVybiB2b2lkIHVkZWxheSh1bnNpZ25lZCBsb25nIHVzZWNzKTsKKworI2VuZGlmIC8qIGRlZmluZWQoX002OEtOT01NVV9ERUxBWV9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L2RpdjY0LmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvZGl2NjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2Q5NzhjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L2RpdjY0LmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2RpdjY0Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvZG1hLW1hcHBpbmcuaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9kbWEtbWFwcGluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2YzQyYmEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvZG1hLW1hcHBpbmcuaApAQCAtMCwwICsxLDEwIEBACisjaWZuZGVmIF9NNjhLTk9NTVVfRE1BX01BUFBJTkdfSAorI2RlZmluZSBfTTY4S05PTU1VX0RNQV9NQVBQSU5HX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjaWZkZWYgQ09ORklHX1BDSQorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2RtYS1tYXBwaW5nLmg+CisjZW5kaWYKKworI2VuZGlmICAvKiBfTTY4S05PTU1VX0RNQV9NQVBQSU5HX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9kbWEuaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9kbWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2U5OGM5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L2RtYS5oCkBAIC0wLDAgKzEsNDkyIEBACisjaWZuZGVmIF9NNjhLX0RNQV9ICisjZGVmaW5lIF9NNjhLX0RNQV9IIDEKKyAKKy8vI2RlZmluZQlETUFfREVCVUcJMQorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpZmRlZiBDT05GSUdfQ09MREZJUkUKKy8qCisgKiBDb2xkRmlyZSBETUEgTW9kZWw6CisgKiAgIENvbGRGaXJlIERNQSBzdXBwb3J0cyB0d28gZm9ybXMgb2YgRE1BOiBTaW5nbGUgYW5kIER1YWwgYWRkcmVzcy4gU2luZ2xlCisgKiBhZGRyZXNzIG1vZGUgZW1pdHMgYSBzb3VyY2UgYWRkcmVzcywgYW5kIGV4cGVjdHMgdGhhdCB0aGUgZGV2aWNlIHdpbGwgZWl0aGVyCisgKiBwaWNrIHVwIHRoZSBkYXRhIChETUEgUkVBRCkgb3Igc291cmNlIGRhdGEgKERNQSBXUklURSkuIFRoaXMgaW1wbGllcyB0aGF0CisgKiB0aGUgZGV2aWNlIHdpbGwgcGxhY2UgZGF0YSBvbiB0aGUgY29ycmVjdCBieXRlKHMpIG9mIHRoZSBkYXRhIGJ1cywgYXMgdGhlCisgKiBtZW1vcnkgdHJhbnNhY3Rpb25zIGFyZSBhbHdheXMgMzIgYml0cy4gVGhpcyBpbXBsaWVzIHRoYXQgb25seSAzMiBiaXQKKyAqIGRldmljZXMgd2lsbCBmaW5kIHNpbmdsZSBtb2RlIHRyYW5zZmVycyB1c2VmdWwuIER1YWwgYWRkcmVzcyBETUEgbW9kZQorICogcGVyZm9ybXMgdHdvIGN5Y2xlczogc291cmNlIHJlYWQgYW5kIGRlc3RpbmF0aW9uIHdyaXRlLiBDb2xkRmlyZSB3aWxsCisgKiBhbGlnbiB0aGUgZGF0YSBzbyB0aGF0IHRoZSBkZXZpY2Ugd2lsbCBhbHdheXMgZ2V0IHRoZSBjb3JyZWN0IGJ5dGVzLCB0aHVzCisgKiBpcyB1c2VmdWwgZm9yIDggYW5kIDE2IGJpdCBkZXZpY2VzLiBUaGlzIGlzIHRoZSBtb2RlIHRoYXQgaXMgc3VwcG9ydGVkCisgKiBiZWxvdy4KKyAqCisgKiBBVUcvMjIvMjAwMCA6IGFkZGVkIHN1cHBvcnQgZm9yIDMyLWJpdCBEdWFsLUFkZHJlc3MtTW9kZSAoSykgMjAwMCAKKyAqICAgICAgICAgICAgICAgT2xpdmVyIEthbXBoZW5rZWwgKE8uS2FtcGhlbmtlbEB0dS1icy5kZSkKKyAqCisgKiBBVUcvMjUvMjAwMCA6IGFkZGFkIHN1cHBvcnQgZm9yIDgsIDE2IGFuZCAzMi1iaXQgU2luZ2xlLUFkZHJlc3MtTW9kZSAoSykyMDAwCisgKiAgICAgICAgICAgICAgIE9saXZlciBLYW1waGVua2VsIChPLkthbXBoZW5rZWxAdHUtYnMuZGUpCisgKgorICogQVBSLzE4LzIwMDIgOiBhZGRlZCBwcm9wZXIgc3VwcG9ydCBmb3IgTUNGNTI3MiBETUEgY29udHJvbGxlci4KKyAqICAgICAgICAgICAgICAgQXJ0aHVyIFNoaXBrb3dza2kgKGFydEB2aWRlb24tY2VudHJhbC5jb20pCisgKi8KKworI2luY2x1ZGUgPGFzbS9jb2xkZmlyZS5oPgorI2luY2x1ZGUgPGFzbS9tY2ZzaW0uaD4KKyNpbmNsdWRlIDxhc20vbWNmZG1hLmg+CisKKy8qCisgKiBTZXQgbnVtYmVyIG9mIGNoYW5uZWxzIG9mIERNQSBvbiBDb2xkRmlyZSBmb3IgZGlmZmVyZW50IGltcGxlbWVudGF0aW9ucy4KKyAqLworI2lmIGRlZmluZWQoQ09ORklHX001MjQ5KSB8fCBkZWZpbmVkKENPTkZJR19NNTMwNykgfHwgZGVmaW5lZChDT05GSUdfTTU0MDcpCisjZGVmaW5lIE1BWF9NNjhLX0RNQV9DSEFOTkVMUyA0CisjZWxpZiBkZWZpbmVkKENPTkZJR19NNTI3MikKKyNkZWZpbmUgTUFYX002OEtfRE1BX0NIQU5ORUxTIDEKKyNlbHNlCisjZGVmaW5lIE1BWF9NNjhLX0RNQV9DSEFOTkVMUyAyCisjZW5kaWYKKworZXh0ZXJuIHVuc2lnbmVkIGludCBkbWFfYmFzZV9hZGRyW01BWF9NNjhLX0RNQV9DSEFOTkVMU107CitleHRlcm4gdW5zaWduZWQgaW50IGRtYV9kZXZpY2VfYWRkcmVzc1tNQVhfTTY4S19ETUFfQ0hBTk5FTFNdOworCisjaWYgIWRlZmluZWQoQ09ORklHX001MjcyKQorI2RlZmluZSBETUFfTU9ERV9XUklURV9CSVQgIDB4MDEgIC8qIE1lbW9yeS9JTyB0byBJTy9NZW1vcnkgc2VsZWN0ICovCisjZGVmaW5lIERNQV9NT0RFX1dPUkRfQklUICAgMHgwMiAgLyogOCBvciAxNiBiaXQgdHJhbnNmZXJzICovCisjZGVmaW5lIERNQV9NT0RFX0xPTkdfQklUICAgMHgwNCAgLyogb3IgMzIgYml0IHRyYW5zZmVycyAqLworI2RlZmluZSBETUFfTU9ERV9TSU5HTEVfQklUIDB4MDggIC8qIHNpbmdsZS1hZGRyZXNzLW1vZGUgKi8KKworLyogSS9PIHRvIG1lbW9yeSwgOCBiaXRzLCBtb2RlICovCisjZGVmaW5lIERNQV9NT0RFX1JFQUQJICAgICAgICAgICAgMAorLyogbWVtb3J5IHRvIEkvTywgOCBiaXRzLCBtb2RlICovCisjZGVmaW5lIERNQV9NT0RFX1dSSVRFCSAgICAgICAgICAgIDEKKy8qIEkvTyB0byBtZW1vcnksIDE2IGJpdHMsIG1vZGUgKi8KKyNkZWZpbmUgRE1BX01PREVfUkVBRF9XT1JEICAgICAgICAgIDIKKy8qIG1lbW9yeSB0byBJL08sIDE2IGJpdHMsIG1vZGUgKi8KKyNkZWZpbmUgRE1BX01PREVfV1JJVEVfV09SRCAgICAgICAgIDMKKy8qIEkvTyB0byBtZW1vcnksIDMyIGJpdHMsIG1vZGUgKi8KKyNkZWZpbmUgRE1BX01PREVfUkVBRF9MT05HICAgICAgICAgIDQKKy8qIG1lbW9yeSB0byBJL08sIDMyIGJpdHMsIG1vZGUgKi8KKyNkZWZpbmUgRE1BX01PREVfV1JJVEVfTE9ORyAgICAgICAgIDUKKy8qIEkvTyB0byBtZW1vcnksIDggYml0cywgc2luZ2xlLWFkZHJlc3MtbW9kZSAqLyAgICAgCisjZGVmaW5lIERNQV9NT0RFX1JFQURfU0lOR0xFICAgICAgICA4CisvKiBtZW1vcnkgdG8gSS9PLCA4IGJpdHMsIHNpbmdsZS1hZGRyZXNzLW1vZGUgKi8KKyNkZWZpbmUgRE1BX01PREVfV1JJVEVfU0lOR0xFICAgICAgIDkKKy8qIEkvTyB0byBtZW1vcnksIDE2IGJpdHMsIHNpbmdsZS1hZGRyZXNzLW1vZGUgKi8KKyNkZWZpbmUgRE1BX01PREVfUkVBRF9XT1JEX1NJTkdMRSAgMTAKKy8qIG1lbW9yeSB0byBJL08sIDE2IGJpdHMsIHNpbmdsZS1hZGRyZXNzLW1vZGUgKi8KKyNkZWZpbmUgRE1BX01PREVfV1JJVEVfV09SRF9TSU5HTEUgMTEKKy8qIEkvTyB0byBtZW1vcnksIDMyIGJpdHMsIHNpbmdsZS1hZGRyZXNzLW1vZGUgKi8KKyNkZWZpbmUgRE1BX01PREVfUkVBRF9MT05HX1NJTkdMRSAgMTIKKy8qIG1lbW9yeSB0byBJL08sIDMyIGJpdHMsIHNpbmdsZS1hZGRyZXNzLW1vZGUgKi8KKyNkZWZpbmUgRE1BX01PREVfV1JJVEVfTE9OR19TSU5HTEUgMTMKKworI2Vsc2UgLyogQ09ORklHX001MjcyIGlzIGRlZmluZWQgKi8KKworLyogU291cmNlIHN0YXRpYy1hZGRyZXNzIG1vZGUgKi8KKyNkZWZpbmUgRE1BX01PREVfU1JDX1NBX0JJVCAweDAxICAKKy8qIFR3byBiaXRzIHRvIHNlbGVjdCBiZXR3ZWVuIGFsbCBmb3VyIG1vZGVzICovCisjZGVmaW5lIERNQV9NT0RFX1NTSVpFX01BU0sgMHgwNiAKKy8qIE9mZnNldCB0byBzaGlmdCBiaXRzIGluICovCisjZGVmaW5lIERNQV9NT0RFX1NTSVpFX09GRiAgMHgwMSAgCisvKiBEZXN0aW5hdGlvbiBzdGF0aWMtYWRkcmVzcyBtb2RlICovCisjZGVmaW5lIERNQV9NT0RFX0RFU19TQV9CSVQgMHgxMCAgCisvKiBUd28gYml0cyB0byBzZWxlY3QgYmV0d2VlbiBhbGwgZm91ciBtb2RlcyAqLworI2RlZmluZSBETUFfTU9ERV9EU0laRV9NQVNLIDB4NjAgIAorLyogT2Zmc2V0IHRvIHNoaWZ0IGJpdHMgaW4gKi8KKyNkZWZpbmUgRE1BX01PREVfRFNJWkVfT0ZGICAweDA1CisvKiBTaXplIG1vZGlmaWVycyAqLworI2RlZmluZSBETUFfTU9ERV9TSVpFX0xPTkcgIDB4MDAKKyNkZWZpbmUgRE1BX01PREVfU0laRV9CWVRFICAweDAxCisjZGVmaW5lIERNQV9NT0RFX1NJWkVfV09SRCAgMHgwMgorI2RlZmluZSBETUFfTU9ERV9TSVpFX0xJTkUgIDB4MDMKKworLyogCisgKiBBbGlhc2VzIHRvIGhlbHAgc3BlZWQgcXVpY2sgcG9ydHM7IHRoZXNlIG1heSBiZSBzdWJvcHRpbWFsLCBob3dldmVyLiBUaGV5CisgKiBkbyBub3QgaW5jbHVkZSB0aGUgU0lOR0xFIG1vZGUgbW9kaWZpZXJzIHNpbmNlIHRoZSBNQ0Y1MjcyIGRvZXMgbm90IGhhdmUgYQorICogbW9kZSB3aGVyZSB0aGUgZGV2aWNlIGlzIGluIGNvbnRyb2wgb2YgaXRzIGFkZHJlc3NpbmcuCisgKi8KKworLyogSS9PIHRvIG1lbW9yeSwgOCBiaXRzLCBtb2RlICovCisjZGVmaW5lIERNQV9NT0RFX1JFQUQJICAgICAgICAgICAgICAoKERNQV9NT0RFX1NJWkVfQllURSA8PCBETUFfTU9ERV9EU0laRV9PRkYpIHwgKERNQV9NT0RFX1NJWkVfQllURSA8PCBETUFfTU9ERV9TU0laRV9PRkYpIHwgRE1BX1NSQ19TQV9CSVQpCisvKiBtZW1vcnkgdG8gSS9PLCA4IGJpdHMsIG1vZGUgKi8KKyNkZWZpbmUgRE1BX01PREVfV1JJVEUJICAgICAgICAgICAgKChETUFfTU9ERV9TSVpFX0JZVEUgPDwgRE1BX01PREVfRFNJWkVfT0ZGKSB8IChETUFfTU9ERV9TSVpFX0JZVEUgPDwgRE1BX01PREVfU1NJWkVfT0ZGKSB8IERNQV9ERVNfU0FfQklUKQorLyogSS9PIHRvIG1lbW9yeSwgMTYgYml0cywgbW9kZSAqLworI2RlZmluZSBETUFfTU9ERV9SRUFEX1dPUkQJICAgICAgICAoKERNQV9NT0RFX1NJWkVfV09SRCA8PCBETUFfTU9ERV9EU0laRV9PRkYpIHwgKERNQV9NT0RFX1NJWkVfV09SRCA8PCBETUFfTU9ERV9TU0laRV9PRkYpIHwgRE1BX1NSQ19TQV9CSVQpCisvKiBtZW1vcnkgdG8gSS9PLCAxNiBiaXRzLCBtb2RlICovCisjZGVmaW5lIERNQV9NT0RFX1dSSVRFX1dPUkQgICAgICAgICAoKERNQV9NT0RFX1NJWkVfV09SRCA8PCBETUFfTU9ERV9EU0laRV9PRkYpIHwgKERNQV9NT0RFX1NJWkVfV09SRCA8PCBETUFfTU9ERV9TU0laRV9PRkYpIHwgRE1BX0RFU19TQV9CSVQpCisvKiBJL08gdG8gbWVtb3J5LCAzMiBiaXRzLCBtb2RlICovCisjZGVmaW5lIERNQV9NT0RFX1JFQURfTE9ORwkgICAgICAgICgoRE1BX01PREVfU0laRV9MT05HIDw8IERNQV9NT0RFX0RTSVpFX09GRikgfCAoRE1BX01PREVfU0laRV9MT05HIDw8IERNQV9NT0RFX1NTSVpFX09GRikgfCBETUFfU1JDX1NBX0JJVCkKKy8qIG1lbW9yeSB0byBJL08sIDMyIGJpdHMsIG1vZGUgKi8KKyNkZWZpbmUgRE1BX01PREVfV1JJVEVfTE9ORyAgICAgICAgICgoRE1BX01PREVfU0laRV9MT05HIDw8IERNQV9NT0RFX0RTSVpFX09GRikgfCAoRE1BX01PREVfU0laRV9MT05HIDw8IERNQV9NT0RFX1NTSVpFX09GRikgfCBETUFfREVTX1NBX0JJVCkKKworI2VuZGlmIC8qICFkZWZpbmVkKENPTkZJR19NNTI3MikgKi8KKworI2lmICFkZWZpbmVkKENPTkZJR19NNTI3MikKKy8qIGVuYWJsZS9kaXNhYmxlIGEgc3BlY2lmaWMgRE1BIGNoYW5uZWwgKi8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgZW5hYmxlX2RtYSh1bnNpZ25lZCBpbnQgZG1hbnIpCit7CisgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICpkbWF3cDsKKworI2lmZGVmIERNQV9ERUJVRworICBwcmludGsoImVuYWJsZV9kbWEoZG1hbnI9JWQpXG4iLCBkbWFucik7CisjZW5kaWYKKworICBkbWF3cCA9ICh1bnNpZ25lZCBzaG9ydCAqKSBkbWFfYmFzZV9hZGRyW2RtYW5yXTsKKyAgZG1hd3BbTUNGRE1BX0RDUl0gfD0gTUNGRE1BX0RDUl9FRVhUOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGRpc2FibGVfZG1hKHVuc2lnbmVkIGludCBkbWFucikKK3sKKyAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKmRtYXdwOworICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICAqZG1hcGI7CisKKyNpZmRlZiBETUFfREVCVUcKKyAgcHJpbnRrKCJkaXNhYmxlX2RtYShkbWFucj0lZClcbiIsIGRtYW5yKTsKKyNlbmRpZgorCisgIGRtYXdwID0gKHVuc2lnbmVkIHNob3J0ICopIGRtYV9iYXNlX2FkZHJbZG1hbnJdOworICBkbWFwYiA9ICh1bnNpZ25lZCBjaGFyICopIGRtYV9iYXNlX2FkZHJbZG1hbnJdOworCisgIC8qIFR1cm4gb2ZmIGV4dGVybmFsIHJlcXVlc3RzLCBhbmQgc3RvcCBhbnkgRE1BIGluIHByb2dyZXNzICovCisgIGRtYXdwW01DRkRNQV9EQ1JdICY9IH5NQ0ZETUFfRENSX0VFWFQ7CisgIGRtYXBiW01DRkRNQV9EU1JdID0gTUNGRE1BX0RTUl9ET05FOworfQorCisvKgorICogQ2xlYXIgdGhlICdETUEgUG9pbnRlciBGbGlwIEZsb3AnLgorICogV3JpdGUgMCBmb3IgTFNCL01TQiwgMSBmb3IgTVNCL0xTQiBhY2Nlc3MuCisgKiBVc2UgdGhpcyBvbmNlIHRvIGluaXRpYWxpemUgdGhlIEZGIHRvIGEga25vd24gc3RhdGUuCisgKiBBZnRlciB0aGF0LCBrZWVwIHRyYWNrIG9mIGl0LiA6LSkKKyAqIC0tLSBJbiBvcmRlciB0byBkbyB0aGF0LCB0aGUgRE1BIHJvdXRpbmVzIGJlbG93IHNob3VsZCAtLS0KKyAqIC0tLSBvbmx5IGJlIHVzZWQgd2hpbGUgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQhIC0tLQorICoKKyAqIFRoaXMgaXMgYSBOT1AgZm9yIENvbGRGaXJlLiBQcm92aWRlIGEgc3R1YiBmb3IgY29tcGF0aWJpbGl0eS4KKyAqLworc3RhdGljIF9faW5saW5lX18gdm9pZCBjbGVhcl9kbWFfZmYodW5zaWduZWQgaW50IGRtYW5yKQoreworfQorCisvKiBzZXQgbW9kZSAoYWJvdmUpIGZvciBhIHNwZWNpZmljIERNQSBjaGFubmVsICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHNldF9kbWFfbW9kZSh1bnNpZ25lZCBpbnQgZG1hbnIsIGNoYXIgbW9kZSkKK3sKKworICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICAqZG1hYnA7CisgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICpkbWF3cDsKKworI2lmZGVmIERNQV9ERUJVRworICBwcmludGsoInNldF9kbWFfbW9kZShkbWFucj0lZCxtb2RlPSVkKVxuIiwgZG1hbnIsIG1vZGUpOworI2VuZGlmCisKKyAgZG1hYnAgPSAodW5zaWduZWQgY2hhciAqKSBkbWFfYmFzZV9hZGRyW2RtYW5yXTsKKyAgZG1hd3AgPSAodW5zaWduZWQgc2hvcnQgKikgZG1hX2Jhc2VfYWRkcltkbWFucl07CisKKyAgLy8gQ2xlYXIgY29uZmlnIGVycm9ycworICBkbWFicFtNQ0ZETUFfRFNSXSA9IE1DRkRNQV9EU1JfRE9ORTsgCisKKyAgLy8gU2V0IGNvbW1hbmQgcmVnaXN0ZXIKKyAgZG1hd3BbTUNGRE1BX0RDUl0gPQorICAgIE1DRkRNQV9EQ1JfSU5UIHwgICAgICAgICAvLyBFbmFibGUgY29tcGxldGlvbiBpcnEKKyAgICBNQ0ZETUFfRENSX0NTIHwgICAgICAgICAgLy8gRm9yY2Ugb25lIHhmZXIgcGVyIHJlcXVlc3QKKyAgICBNQ0ZETUFfRENSX0FBIHwgICAgICAgICAgLy8gRW5hYmxlIGF1dG8gYWxpZ25tZW50CisgICAgLy8gc2luZ2xlLWFkZHJlc3MtbW9kZQorICAgICgobW9kZSAmIERNQV9NT0RFX1NJTkdMRV9CSVQpID8gTUNGRE1BX0RDUl9TQUEgOiAwKSB8CisgICAgLy8gc2V0cyBzX3J3ICgtPiByL3cpIGhpZ2ggaWYgTWVtb3J5IHRvIEkvMAorICAgICgobW9kZSAmIERNQV9NT0RFX1dSSVRFX0JJVCkgPyBNQ0ZETUFfRENSX1NfUlcgOiAwKSB8CisgICAgLy8gTWVtb3J5IHRvIEkvTyBvciBJL08gdG8gTWVtb3J5CisgICAgKChtb2RlICYgRE1BX01PREVfV1JJVEVfQklUKSA/IE1DRkRNQV9EQ1JfU0lOQyA6IE1DRkRNQV9EQ1JfRElOQykgfAorICAgIC8vIDMyIGJpdCwgMTYgYml0IG9yIDggYml0IHRyYW5zZmVycworICAgICgobW9kZSAmIERNQV9NT0RFX1dPUkRfQklUKSAgPyBNQ0ZETUFfRENSX1NTSVpFX1dPUkQgOiAKKyAgICAgKChtb2RlICYgRE1BX01PREVfTE9OR19CSVQpID8gTUNGRE1BX0RDUl9TU0laRV9MT05HIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUNGRE1BX0RDUl9TU0laRV9CWVRFKSkgfAorICAgICgobW9kZSAmIERNQV9NT0RFX1dPUkRfQklUKSAgPyBNQ0ZETUFfRENSX0RTSVpFX1dPUkQgOgorICAgICAoKG1vZGUgJiBETUFfTU9ERV9MT05HX0JJVCkgPyBNQ0ZETUFfRENSX0RTSVpFX0xPTkcgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQ0ZETUFfRENSX0RTSVpFX0JZVEUpKTsKKworI2lmZGVmIERFQlVHX0RNQQorICBwcmludGsoIiVzKCVkKTogZG1hbnI9JWQgRFNSWyV4XT0leCBEQ1JbJXhdPSV4XG4iLCBfX0ZJTEVfXywgX19MSU5FX18sCisgICAgICAgICBkbWFuciwgKGludCkgJmRtYWJwW01DRkRNQV9EU1JdLCBkbWFicFtNQ0ZETUFfRFNSXSwKKwkgKGludCkgJmRtYXdwW01DRkRNQV9EQ1JdLCBkbWF3cFtNQ0ZETUFfRENSXSk7CisjZW5kaWYKK30KKworLyogU2V0IHRyYW5zZmVyIGFkZHJlc3MgZm9yIHNwZWNpZmljIERNQSBjaGFubmVsICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHNldF9kbWFfYWRkcih1bnNpZ25lZCBpbnQgZG1hbnIsIHVuc2lnbmVkIGludCBhKQoreworICB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqZG1hd3A7CisgIHZvbGF0aWxlIHVuc2lnbmVkIGludCAgICpkbWFscDsKKworI2lmZGVmIERNQV9ERUJVRworICBwcmludGsoInNldF9kbWFfYWRkcihkbWFucj0lZCxhPSV4KVxuIiwgZG1hbnIsIGEpOworI2VuZGlmCisKKyAgZG1hd3AgPSAodW5zaWduZWQgc2hvcnQgKikgZG1hX2Jhc2VfYWRkcltkbWFucl07CisgIGRtYWxwID0gKHVuc2lnbmVkIGludCAqKSBkbWFfYmFzZV9hZGRyW2RtYW5yXTsKKworICAvLyBEZXRlcm1pbmUgd2hpY2ggYWRkcmVzcyByZWdpc3RlcnMgYXJlIHVzZWQgZm9yIG1lbW9yeS9kZXZpY2UgYWNjZXNzZXMKKyAgaWYgKGRtYXdwW01DRkRNQV9EQ1JdICYgTUNGRE1BX0RDUl9TSU5DKSB7CisgICAgLy8gU291cmNlIGluY3JlbWVudGluZywgbXVzdCBiZSBtZW1vcnkKKyAgICBkbWFscFtNQ0ZETUFfU0FSXSA9IGE7CisgICAgLy8gU2V0IGRlc3QgYWRkcmVzcywgbXVzdCBiZSBkZXZpY2UKKyAgICBkbWFscFtNQ0ZETUFfREFSXSA9IGRtYV9kZXZpY2VfYWRkcmVzc1tkbWFucl07CisgIH0gZWxzZSB7CisgICAgLy8gRGVzdGluYXRpb24gaW5jcmVtZW50aW5nLCBtdXN0IGJlIG1lbW9yeQorICAgIGRtYWxwW01DRkRNQV9EQVJdID0gYTsKKyAgICAvLyBTZXQgc291cmNlIGFkZHJlc3MsIG11c3QgYmUgZGV2aWNlCisgICAgZG1hbHBbTUNGRE1BX1NBUl0gPSBkbWFfZGV2aWNlX2FkZHJlc3NbZG1hbnJdOworICB9CisKKyNpZmRlZiBERUJVR19ETUEKKyAgcHJpbnRrKCIlcyglZCk6IGRtYW5yPSVkIERDUlsleF09JXggU0FSWyV4XT0lMDh4IERBUlsleF09JTA4eFxuIiwKKwlfX0ZJTEVfXywgX19MSU5FX18sIGRtYW5yLCAoaW50KSAmZG1hd3BbTUNGRE1BX0RDUl0sIGRtYXdwW01DRkRNQV9EQ1JdLAorCShpbnQpICZkbWFscFtNQ0ZETUFfU0FSXSwgZG1hbHBbTUNGRE1BX1NBUl0sCisJKGludCkgJmRtYWxwW01DRkRNQV9EQVJdLCBkbWFscFtNQ0ZETUFfREFSXSk7CisjZW5kaWYKK30KKworLyoKKyAqIFNwZWNpZmljIGZvciBDb2xkZmlyZSAtIHNldHMgZGV2aWNlIGFkZHJlc3MuCisgKiBTaG91bGQgYmUgY2FsbGVkIGFmdGVyIHRoZSBtb2RlIHNldCBjYWxsLCBhbmQgYmVmb3JlIHNldCBETUEgYWRkcmVzcy4KKyAqLworc3RhdGljIF9faW5saW5lX18gdm9pZCBzZXRfZG1hX2RldmljZV9hZGRyKHVuc2lnbmVkIGludCBkbWFuciwgdW5zaWduZWQgaW50IGEpCit7CisjaWZkZWYgRE1BX0RFQlVHCisgIHByaW50aygic2V0X2RtYV9kZXZpY2VfYWRkcihkbWFucj0lZCxhPSV4KVxuIiwgZG1hbnIsIGEpOworI2VuZGlmCisKKyAgZG1hX2RldmljZV9hZGRyZXNzW2RtYW5yXSA9IGE7Cit9CisKKy8qCisgKiBOT1RFIDI6ICJjb3VudCIgcmVwcmVzZW50cyBfYnl0ZXNfLgorICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHNldF9kbWFfY291bnQodW5zaWduZWQgaW50IGRtYW5yLCB1bnNpZ25lZCBpbnQgY291bnQpCit7CisgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICpkbWF3cDsKKworI2lmZGVmIERNQV9ERUJVRworICBwcmludGsoInNldF9kbWFfY291bnQoZG1hbnI9JWQsY291bnQ9JWQpXG4iLCBkbWFuciwgY291bnQpOworI2VuZGlmCisKKyAgZG1hd3AgPSAodW5zaWduZWQgc2hvcnQgKikgZG1hX2Jhc2VfYWRkcltkbWFucl07CisgIGRtYXdwW01DRkRNQV9CQ1JdID0gKHVuc2lnbmVkIHNob3J0KWNvdW50OworfQorCisvKgorICogR2V0IERNQSByZXNpZHVlIGNvdW50LiBBZnRlciBhIERNQSB0cmFuc2ZlciwgdGhpcworICogc2hvdWxkIHJldHVybiB6ZXJvLiBSZWFkaW5nIHRoaXMgd2hpbGUgYSBETUEgdHJhbnNmZXIgaXMKKyAqIHN0aWxsIGluIHByb2dyZXNzIHdpbGwgcmV0dXJuIHVucHJlZGljdGFibGUgcmVzdWx0cy4KKyAqIE90aGVyd2lzZSwgaXQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIF9ieXRlc18gbGVmdCB0byB0cmFuc2Zlci4KKyAqLworc3RhdGljIF9faW5saW5lX18gaW50IGdldF9kbWFfcmVzaWR1ZSh1bnNpZ25lZCBpbnQgZG1hbnIpCit7CisgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICpkbWF3cDsKKyAgdW5zaWduZWQgc2hvcnQgY291bnQ7CisKKyNpZmRlZiBETUFfREVCVUcKKyAgcHJpbnRrKCJnZXRfZG1hX3Jlc2lkdWUoZG1hbnI9JWQpXG4iLCBkbWFucik7CisjZW5kaWYKKworICBkbWF3cCA9ICh1bnNpZ25lZCBzaG9ydCAqKSBkbWFfYmFzZV9hZGRyW2RtYW5yXTsKKyAgY291bnQgPSBkbWF3cFtNQ0ZETUFfQkNSXTsKKyAgcmV0dXJuKChpbnQpIGNvdW50KTsKK30KKyNlbHNlIC8qIENPTkZJR19NNTI3MiBpcyBkZWZpbmVkICovCisKKy8qCisgKiBUaGUgTUNGNTI3MiBETUEgY29udHJvbGxlciBpcyB2ZXJ5IGRpZmZlcmVudCB0aGFuIHRoZSBjb250cm9sbGVyIGRlZmluZWQgYWJvdmUKKyAqIGluIHRlcm1zIG9mIHJlZ2lzdGVyIG1hcHBpbmcuICBGb3IgaW5zdGFuY2UsIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiB0aGUgMTYtYml0IAorICogaW50ZXJydXB0IHJlZ2lzdGVyIChJUlEjODUsIGZvciByZWZlcmVuY2UpLCBhbGwgb2YgdGhlIHJlZ2lzdGVycyBhcmUgMzItYml0LgorICoKKyAqIFRoZSBiaWcgZGlmZmVyZW5jZSwgaG93ZXZlciwgaXMgdGhlIGxhY2sgb2YgZGV2aWNlLXJlcXVlc3RlZCBETUEuICBBbGwgbW9kZXMKKyAqIGFyZSBkdWFsIGFkZHJlc3MgdHJhbnNmZXIsIGFuZCB0aGVyZSBpcyBubyAnZGV2aWNlJyBzZXR1cCBvciBkaXJlY3Rpb24gYml0LgorICogWW91IGNhbiBETUEgYmV0d2VlbiBhIGRldmljZSBhbmQgbWVtb3J5LCBiZXR3ZWVuIG1lbW9yeSBhbmQgbWVtb3J5LCBvciBldmVuIGJldHdlZW4KKyAqIHR3byBkZXZpY2VzIGRpcmVjdGx5LCB3aXRoIGFueSBjb21iaW5hdGlvbiBvZiBpbmNyZW1lbnRpbmcgYW5kIG5vbi1pbmNyZW1lbnRpbmcKKyAqIGFkZHJlc3NlcyB5b3UgY2hvb3NlLiAgVGhpcyBwdXRzIGEgY3JpbXAgaW4gZGlzdGluZ3Vpc2hpbmcgYmV0d2VlbiB0aGUgJ2RldmljZSAKKyAqIGFkZHJlc3MnIHNldCB1cCBieSBzZXRfZG1hX2RldmljZV9hZGRyLgorICoKKyAqIFRoZXJlZm9yZSwgdGhlcmUgYXJlIHR3byBvcHRpb25zLiAgT25lIGlzIHRvIHVzZSBzZXRfZG1hX2FkZHIgYW5kIHNldF9kbWFfZGV2aWNlX2FkZHIsCisgKiB3aGljaCB3aWxsIGFjdCBleGFjdGx5IGFzIGFib3ZlIGluIC0tIGl0IHdpbGwgbG9vayB0byBzZWUgaWYgdGhlIHNvdXJjZSBpcyBzZXQgdG8KKyAqIGF1dG9pbmNyZW1lbnQsIGFuZCBpZiBzbyBpdCB3aWxsIG1ha2UgdGhlIHNvdXJjZSB1c2UgdGhlIHNldF9kbWFfYWRkciB2YWx1ZSBhbmQgdGhlCisgKiBkZXN0aW5hdGlvbiB0aGUgc2V0X2RtYV9kZXZpY2VfYWRkciB2YWx1ZS4gIE90aGVyd2lzZSB0aGUgc291cmNlIHdpbGwgYmUgc2V0IHRvIHRoZQorICogc2V0X2RtYV9kZXZpY2VfYWRkciB2YWx1ZSBhbmQgdGhlIGRlc3RpbmF0aW9uIHdpbGwgZ2V0IHRoZSBzZXRfZG1hX2FkZHIgdmFsdWUuCisgKgorICogVGhlIG90aGVyIGlzIHRvIHVzZSB0aGUgcHJvdmlkZWQgc2V0X2RtYV9zcmNfYWRkciBhbmQgc2V0X2RtYV9kZXN0X2FkZHIgZnVuY3Rpb25zCisgKiBhbmQgbWFrZSBpdCBleHBsaWNpdC4gIERlcGVuZGluZyBvbiB3aGF0IHlvdSdyZSBkb2luZywgb25lIG9mIHRoZXNlIHR3byBzaG91bGQgd29yaworICogZm9yIHlvdSwgYnV0IGRvbid0IG1peCB0aGVtIGluIHRoZSBzYW1lIHRyYW5zZmVyIHNldHVwLgorICovCisKKy8qIGVuYWJsZS9kaXNhYmxlIGEgc3BlY2lmaWMgRE1BIGNoYW5uZWwgKi8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgZW5hYmxlX2RtYSh1bnNpZ25lZCBpbnQgZG1hbnIpCit7CisgIHZvbGF0aWxlIHVuc2lnbmVkIGludCAgKmRtYWxwOworCisjaWZkZWYgRE1BX0RFQlVHCisgIHByaW50aygiZW5hYmxlX2RtYShkbWFucj0lZClcbiIsIGRtYW5yKTsKKyNlbmRpZgorCisgIGRtYWxwID0gKHVuc2lnbmVkIGludCAqKSBkbWFfYmFzZV9hZGRyW2RtYW5yXTsKKyAgZG1hbHBbTUNGRE1BX0RNUl0gfD0gTUNGRE1BX0RNUl9FTjsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBkaXNhYmxlX2RtYSh1bnNpZ25lZCBpbnQgZG1hbnIpCit7CisgIHZvbGF0aWxlIHVuc2lnbmVkIGludCAgICpkbWFscDsKKworI2lmZGVmIERNQV9ERUJVRworICBwcmludGsoImRpc2FibGVfZG1hKGRtYW5yPSVkKVxuIiwgZG1hbnIpOworI2VuZGlmCisKKyAgZG1hbHAgPSAodW5zaWduZWQgaW50ICopIGRtYV9iYXNlX2FkZHJbZG1hbnJdOworCisgIC8qIFR1cm4gb2ZmIGV4dGVybmFsIHJlcXVlc3RzLCBhbmQgc3RvcCBhbnkgRE1BIGluIHByb2dyZXNzICovCisgIGRtYWxwW01DRkRNQV9ETVJdICY9IH5NQ0ZETUFfRE1SX0VOOworICBkbWFscFtNQ0ZETUFfRE1SXSB8PSBNQ0ZETUFfRE1SX1JFU0VUOworfQorCisvKgorICogQ2xlYXIgdGhlICdETUEgUG9pbnRlciBGbGlwIEZsb3AnLgorICogV3JpdGUgMCBmb3IgTFNCL01TQiwgMSBmb3IgTVNCL0xTQiBhY2Nlc3MuCisgKiBVc2UgdGhpcyBvbmNlIHRvIGluaXRpYWxpemUgdGhlIEZGIHRvIGEga25vd24gc3RhdGUuCisgKiBBZnRlciB0aGF0LCBrZWVwIHRyYWNrIG9mIGl0LiA6LSkKKyAqIC0tLSBJbiBvcmRlciB0byBkbyB0aGF0LCB0aGUgRE1BIHJvdXRpbmVzIGJlbG93IHNob3VsZCAtLS0KKyAqIC0tLSBvbmx5IGJlIHVzZWQgd2hpbGUgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQhIC0tLQorICoKKyAqIFRoaXMgaXMgYSBOT1AgZm9yIENvbGRGaXJlLiBQcm92aWRlIGEgc3R1YiBmb3IgY29tcGF0aWJpbGl0eS4KKyAqLworc3RhdGljIF9faW5saW5lX18gdm9pZCBjbGVhcl9kbWFfZmYodW5zaWduZWQgaW50IGRtYW5yKQoreworfQorCisvKiBzZXQgbW9kZSAoYWJvdmUpIGZvciBhIHNwZWNpZmljIERNQSBjaGFubmVsICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHNldF9kbWFfbW9kZSh1bnNpZ25lZCBpbnQgZG1hbnIsIGNoYXIgbW9kZSkKK3sKKworICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgICAqZG1hbHA7CisgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICpkbWF3cDsKKworI2lmZGVmIERNQV9ERUJVRworICBwcmludGsoInNldF9kbWFfbW9kZShkbWFucj0lZCxtb2RlPSVkKVxuIiwgZG1hbnIsIG1vZGUpOworI2VuZGlmCisgIGRtYWxwID0gKHVuc2lnbmVkIGludCAqKSBkbWFfYmFzZV9hZGRyW2RtYW5yXTsKKyAgZG1hd3AgPSAodW5zaWduZWQgc2hvcnQgKikgZG1hX2Jhc2VfYWRkcltkbWFucl07CisKKyAgLy8gQ2xlYXIgY29uZmlnIGVycm9ycworICBkbWFscFtNQ0ZETUFfRE1SXSB8PSBNQ0ZETUFfRE1SX1JFU0VUOyAKKworICAvLyBTZXQgY29tbWFuZCByZWdpc3RlcgorICBkbWFscFtNQ0ZETUFfRE1SXSA9CisgICAgTUNGRE1BX0RNUl9SUU1fRFVBTCB8ICAgICAgICAgLy8gTWFuZGF0b3J5IFJlcXVlc3QgTW9kZSBzZXR0aW5nCisgICAgTUNGRE1BX0RNUl9EU1RUX1NEICB8ICAgICAgICAgLy8gU2V0IHVwIGFkZHJlc3NpbmcgdHlwZXM7IHNldCB0byBzdXBlcnZpc29yLWRhdGEuCisgICAgTUNGRE1BX0RNUl9TUkNUX1NEICB8ICAgICAgICAgLy8gU2V0IHVwIGFkZHJlc3NpbmcgdHlwZXM7IHNldCB0byBzdXBlcnZpc29yLWRhdGEuIAorICAgIC8vIHNvdXJjZSBzdGF0aWMtYWRkcmVzcy1tb2RlCisgICAgKChtb2RlICYgRE1BX01PREVfU1JDX1NBX0JJVCkgPyBNQ0ZETUFfRE1SX1NSQ01fU0EgOiBNQ0ZETUFfRE1SX1NSQ01fSUEpIHwKKyAgICAvLyBkZXN0IHN0YXRpYy1hZGRyZXNzLW1vZGUKKyAgICAoKG1vZGUgJiBETUFfTU9ERV9ERVNfU0FfQklUKSA/IE1DRkRNQV9ETVJfRFNUTV9TQSA6IE1DRkRNQV9ETVJfRFNUTV9JQSkgfAorICAgIC8vIGJ1cnN0LCAzMiBiaXQsIDE2IGJpdCBvciA4IGJpdCB0cmFuc2ZlcnMgYXJlIHNlcGFyYXRlbHkgY29uZmlndXJhYmxlIG9uIHRoZSBNQ0Y1MjcyCisgICAgKCgobW9kZSAmIERNQV9NT0RFX1NTSVpFX01BU0spID4+IERNQV9NT0RFX1NTSVpFX09GRikgPDwgTUNGRE1BX0RNUl9EU1RTX09GRikgfAorICAgICgoKG1vZGUgJiBETUFfTU9ERV9TU0laRV9NQVNLKSA+PiBETUFfTU9ERV9TU0laRV9PRkYpIDw8IE1DRkRNQV9ETVJfU1JDU19PRkYpOworICAgIAorICBkbWF3cFtNQ0ZETUFfRElSXSB8PSBNQ0ZETUFfRElSX0FTQ0VOOyAgIC8qIEVuYWJsZSBjb21wbGV0aW9uIGludGVycnVwdHMgKi8KKyAgCisjaWZkZWYgREVCVUdfRE1BCisgIHByaW50aygiJXMoJWQpOiBkbWFucj0lZCBETVJbJXhdPSV4IERJUlsleF09JXhcbiIsIF9fRklMRV9fLCBfX0xJTkVfXywKKyAgICAgICAgIGRtYW5yLCAoaW50KSAmZG1hbHBbTUNGRE1BX0RNUl0sIGRtYWJwW01DRkRNQV9ETVJdLAorCSAoaW50KSAmZG1hd3BbTUNGRE1BX0RJUl0sIGRtYXdwW01DRkRNQV9ESVJdKTsKKyNlbmRpZgorfQorCisvKiBTZXQgdHJhbnNmZXIgYWRkcmVzcyBmb3Igc3BlY2lmaWMgRE1BIGNoYW5uZWwgKi8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgc2V0X2RtYV9hZGRyKHVuc2lnbmVkIGludCBkbWFuciwgdW5zaWduZWQgaW50IGEpCit7CisgIHZvbGF0aWxlIHVuc2lnbmVkIGludCAgICpkbWFscDsKKworI2lmZGVmIERNQV9ERUJVRworICBwcmludGsoInNldF9kbWFfYWRkcihkbWFucj0lZCxhPSV4KVxuIiwgZG1hbnIsIGEpOworI2VuZGlmCisKKyAgZG1hbHAgPSAodW5zaWduZWQgaW50ICopIGRtYV9iYXNlX2FkZHJbZG1hbnJdOworCisgIC8vIERldGVybWluZSB3aGljaCBhZGRyZXNzIHJlZ2lzdGVycyBhcmUgdXNlZCBmb3IgbWVtb3J5L2RldmljZSBhY2Nlc3NlcworICBpZiAoZG1hbHBbTUNGRE1BX0RNUl0gJiBNQ0ZETUFfRE1SX1NSQ00pIHsKKyAgICAvLyBTb3VyY2UgaW5jcmVtZW50aW5nLCBtdXN0IGJlIG1lbW9yeQorICAgIGRtYWxwW01DRkRNQV9EU0FSXSA9IGE7CisgICAgLy8gU2V0IGRlc3QgYWRkcmVzcywgbXVzdCBiZSBkZXZpY2UKKyAgICBkbWFscFtNQ0ZETUFfRERBUl0gPSBkbWFfZGV2aWNlX2FkZHJlc3NbZG1hbnJdOworICB9IGVsc2UgeworICAgIC8vIERlc3RpbmF0aW9uIGluY3JlbWVudGluZywgbXVzdCBiZSBtZW1vcnkKKyAgICBkbWFscFtNQ0ZETUFfRERBUl0gPSBhOworICAgIC8vIFNldCBzb3VyY2UgYWRkcmVzcywgbXVzdCBiZSBkZXZpY2UKKyAgICBkbWFscFtNQ0ZETUFfRFNBUl0gPSBkbWFfZGV2aWNlX2FkZHJlc3NbZG1hbnJdOworICB9CisKKyNpZmRlZiBERUJVR19ETUEKKyAgcHJpbnRrKCIlcyglZCk6IGRtYW5yPSVkIERNUlsleF09JXggU0FSWyV4XT0lMDh4IERBUlsleF09JTA4eFxuIiwKKwlfX0ZJTEVfXywgX19MSU5FX18sIGRtYW5yLCAoaW50KSAmZG1hd3BbTUNGRE1BX0RNUl0sIGRtYXdwW01DRkRNQV9ETVJdLAorCShpbnQpICZkbWFscFtNQ0ZETUFfRFNBUl0sIGRtYWxwW01DRkRNQV9EU0FSXSwKKwkoaW50KSAmZG1hbHBbTUNGRE1BX0REQVJdLCBkbWFscFtNQ0ZETUFfRERBUl0pOworI2VuZGlmCit9CisKKy8qCisgKiBTcGVjaWZpYyBmb3IgQ29sZGZpcmUgLSBzZXRzIGRldmljZSBhZGRyZXNzLgorICogU2hvdWxkIGJlIGNhbGxlZCBhZnRlciB0aGUgbW9kZSBzZXQgY2FsbCwgYW5kIGJlZm9yZSBzZXQgRE1BIGFkZHJlc3MuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgc2V0X2RtYV9kZXZpY2VfYWRkcih1bnNpZ25lZCBpbnQgZG1hbnIsIHVuc2lnbmVkIGludCBhKQoreworI2lmZGVmIERNQV9ERUJVRworICBwcmludGsoInNldF9kbWFfZGV2aWNlX2FkZHIoZG1hbnI9JWQsYT0leClcbiIsIGRtYW5yLCBhKTsKKyNlbmRpZgorCisgIGRtYV9kZXZpY2VfYWRkcmVzc1tkbWFucl0gPSBhOworfQorCisvKgorICogTk9URSAyOiAiY291bnQiIHJlcHJlc2VudHMgX2J5dGVzXy4KKyAqCisgKiBOT1RFIDM6IFdoaWxlIGEgMzItYml0IHJlZ2lzdGVyLCAiY291bnQiIGlzIG9ubHkgYSBtYXhpbXVtIDI0LWJpdCB2YWx1ZS4KKyAqLworc3RhdGljIF9faW5saW5lX18gdm9pZCBzZXRfZG1hX2NvdW50KHVuc2lnbmVkIGludCBkbWFuciwgdW5zaWduZWQgaW50IGNvdW50KQoreworICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKmRtYWxwOworICAKKyNpZmRlZiBETUFfREVCVUcKKyAgcHJpbnRrKCJzZXRfZG1hX2NvdW50KGRtYW5yPSVkLGNvdW50PSVkKVxuIiwgZG1hbnIsIGNvdW50KTsKKyNlbmRpZgorCisgIGRtYWxwID0gKHVuc2lnbmVkIGludCAqKSBkbWFfYmFzZV9hZGRyW2RtYW5yXTsKKyAgZG1hbHBbTUNGRE1BX0RCQ1JdID0gY291bnQ7Cit9CisKKy8qCisgKiBHZXQgRE1BIHJlc2lkdWUgY291bnQuIEFmdGVyIGEgRE1BIHRyYW5zZmVyLCB0aGlzCisgKiBzaG91bGQgcmV0dXJuIHplcm8uIFJlYWRpbmcgdGhpcyB3aGlsZSBhIERNQSB0cmFuc2ZlciBpcworICogc3RpbGwgaW4gcHJvZ3Jlc3Mgd2lsbCByZXR1cm4gdW5wcmVkaWN0YWJsZSByZXN1bHRzLgorICogT3RoZXJ3aXNlLCBpdCByZXR1cm5zIHRoZSBudW1iZXIgb2YgX2J5dGVzXyBsZWZ0IHRvIHRyYW5zZmVyLgorICovCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgZ2V0X2RtYV9yZXNpZHVlKHVuc2lnbmVkIGludCBkbWFucikKK3sKKyAgdm9sYXRpbGUgdW5zaWduZWQgaW50ICpkbWFscDsKKyAgdW5zaWduZWQgaW50IGNvdW50OworCisjaWZkZWYgRE1BX0RFQlVHCisgIHByaW50aygiZ2V0X2RtYV9yZXNpZHVlKGRtYW5yPSVkKVxuIiwgZG1hbnIpOworI2VuZGlmCisKKyAgZG1hbHAgPSAodW5zaWduZWQgaW50ICopIGRtYV9iYXNlX2FkZHJbZG1hbnJdOworICBjb3VudCA9IGRtYWxwW01DRkRNQV9EQkNSXTsKKyAgcmV0dXJuKGNvdW50KTsKK30KKworI2VuZGlmIC8qICFkZWZpbmVkKENPTkZJR19NNTI3MikgKi8KKyNlbmRpZiAvKiBDT05GSUdfQ09MREZJUkUgKi8KKyAKKyNkZWZpbmUgTUFYX0RNQV9DSEFOTkVMUyA4CisKKy8qIERvbid0IGRlZmluZSBNQVhfRE1BX0FERFJFU1M7IGl0J3MgdXNlbGVzcyBvbiB0aGUgbTY4ay9jb2xkZmlyZSBhbmQgYW55CisgICBvY2N1cnJlbmNlIHNob3VsZCBiZSBmbGFnZ2VkIGFzIGFuIGVycm9yLiAgKi8KKy8qIHVuZGVyIDIuNCBpdCBpcyBhY3R1YWxseSBuZWVkZWQgYnkgdGhlIG5ldyBib290bWVtIGFsbG9jYXRvciAqLworI2RlZmluZSBNQVhfRE1BX0FERFJFU1MgUEFHRV9PRkZTRVQKKworLyogVGhlc2UgYXJlIGluIGtlcm5lbC9kbWEuYzogKi8KK2V4dGVybiBpbnQgcmVxdWVzdF9kbWEodW5zaWduZWQgaW50IGRtYW5yLCBjb25zdCBjaGFyICpkZXZpY2VfaWQpOwkvKiByZXNlcnZlIGEgRE1BIGNoYW5uZWwgKi8KK2V4dGVybiB2b2lkIGZyZWVfZG1hKHVuc2lnbmVkIGludCBkbWFucik7CS8qIHJlbGVhc2UgaXQgYWdhaW4gKi8KKyAKKyNlbmRpZiAvKiBfTTY4S19ETUFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L2VsZi5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L2VsZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5MTk0ODcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvZWxmLmgKQEAgLTAsMCArMSwxMTMgQEAKKyNpZm5kZWYgX19BU01tNjhrX0VMRl9ICisjZGVmaW5lIF9fQVNNbTY4a19FTEZfSAorCisvKgorICogRUxGIHJlZ2lzdGVyIGRlZmluaXRpb25zLi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS91c2VyLmg+CisKKy8qCisgKiA2OGsgRUxGIHJlbG9jYXRpb24gdHlwZXMKKyAqLworI2RlZmluZSBSXzY4S19OT05FICAwCisjZGVmaW5lIFJfNjhLXzMyICAgIDEKKyNkZWZpbmUgUl82OEtfMTYgICAgMgorI2RlZmluZSBSXzY4S184ICAgICAzCisjZGVmaW5lIFJfNjhLX1BDMzIgIDQKKyNkZWZpbmUgUl82OEtfUEMxNiAgNQorI2RlZmluZSBSXzY4S19QQzggICA2CisjZGVmaW5lIFJfNjhLX0dPVDMyIDcKKyNkZWZpbmUgUl82OEtfR09UMTYgOAorI2RlZmluZSBSXzY4S19HT1Q4ICA5CisjZGVmaW5lIFJfNjhLX0dPVDMyTyAgICAxMAorI2RlZmluZSBSXzY4S19HT1QxNk8gICAgMTEKKyNkZWZpbmUgUl82OEtfR09UOE8gMTIKKyNkZWZpbmUgUl82OEtfUExUMzIgMTMKKyNkZWZpbmUgUl82OEtfUExUMTYgMTQKKyNkZWZpbmUgUl82OEtfUExUOCAgMTUKKyNkZWZpbmUgUl82OEtfUExUMzJPICAgIDE2CisjZGVmaW5lIFJfNjhLX1BMVDE2TyAgICAxNworI2RlZmluZSBSXzY4S19QTFQ4TyAxOAorI2RlZmluZSBSXzY4S19DT1BZICAxOQorI2RlZmluZSBSXzY4S19HTE9CX0RBVCAgMjAKKyNkZWZpbmUgUl82OEtfSk1QX1NMT1QgIDIxCisjZGVmaW5lIFJfNjhLX1JFTEFUSVZFICAyMgorCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgZWxmX2dyZWdfdDsKKworI2RlZmluZSBFTEZfTkdSRUcgKHNpemVvZihzdHJ1Y3QgdXNlcl9yZWdzX3N0cnVjdCkgLyBzaXplb2YoZWxmX2dyZWdfdCkpCit0eXBlZGVmIGVsZl9ncmVnX3QgZWxmX2dyZWdzZXRfdFtFTEZfTkdSRUddOworCit0eXBlZGVmIHN0cnVjdCB1c2VyX202OGtmcF9zdHJ1Y3QgZWxmX2ZwcmVnc2V0X3Q7CisKKy8qCisgKiBUaGlzIGlzIHVzZWQgdG8gZW5zdXJlIHdlIGRvbid0IGxvYWQgc29tZXRoaW5nIGZvciB0aGUgd3JvbmcgYXJjaGl0ZWN0dXJlLgorICovCisjZGVmaW5lIGVsZl9jaGVja19hcmNoKHgpICgoeCktPmVfbWFjaGluZSA9PSBFTV82OEspCisKKy8qCisgKiBUaGVzZSBhcmUgdXNlZCB0byBzZXQgcGFyYW1ldGVycyBpbiB0aGUgY29yZSBkdW1wcy4KKyAqLworI2RlZmluZSBFTEZfQ0xBU1MJRUxGQ0xBU1MzMgorI2RlZmluZSBFTEZfREFUQQlFTEZEQVRBMk1TQgorI2RlZmluZSBFTEZfQVJDSAlFTV82OEsKKworLyogRm9yIFNWUjQvbTY4ayB0aGUgZnVuY3Rpb24gcG9pbnRlciB0byBiZSByZWdpc3RlcmVkIHdpdGggYGF0ZXhpdCcgaXMKKyAgIHBhc3NlZCBpbiAlYTEuICBBbHRob3VnaCBteSBjb3B5IG9mIHRoZSBBQkkgaGFzIG5vIHN1Y2ggc3RhdGVtZW50LCBpdAorICAgaXMgYWN0dWFsbHkgdXNlZCBvbiBBU1YuICAqLworI2RlZmluZSBFTEZfUExBVF9JTklUKF9yLCBsb2FkX2FkZHIpCV9yLT5hMSA9IDAKKworI2RlZmluZSBVU0VfRUxGX0NPUkVfRFVNUAorI2RlZmluZSBFTEZfRVhFQ19QQUdFU0laRQk0MDk2CisKKy8qIFRoaXMgaXMgdGhlIGxvY2F0aW9uIHRoYXQgYW4gRVRfRFlOIHByb2dyYW0gaXMgbG9hZGVkIGlmIGV4ZWMnZWQuICBUeXBpY2FsCisgICB1c2Ugb2YgdGhpcyBpcyB0byBpbnZva2UgIi4vbGQuc28gc29tZXByb2ciIHRvIHRlc3Qgb3V0IGEgbmV3IHZlcnNpb24gb2YKKyAgIHRoZSBsb2FkZXIuICBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGl0IGlzIG91dCBvZiB0aGUgd2F5IG9mIHRoZSBwcm9ncmFtCisgICB0aGF0IGl0IHdpbGwgImV4ZWMiLCBhbmQgdGhhdCB0aGVyZSBpcyBzdWZmaWNpZW50IHJvb20gZm9yIHRoZSBicmsuICAqLworCisjZGVmaW5lIEVMRl9FVF9EWU5fQkFTRSAgICAgICAgIDB4RDAwMDAwMDBVTAorCisjZGVmaW5lIEVMRl9DT1JFX0NPUFlfUkVHUyhwcl9yZWcsIHJlZ3MpCQkJCVwKKwkvKiBCbGVlY2guICovCQkJCQkJCVwKKwlwcl9yZWdbMF0gPSByZWdzLT5kMTsJCQkJCQlcCisJcHJfcmVnWzFdID0gcmVncy0+ZDI7CQkJCQkJXAorCXByX3JlZ1syXSA9IHJlZ3MtPmQzOwkJCQkJCVwKKwlwcl9yZWdbM10gPSByZWdzLT5kNDsJCQkJCQlcCisJcHJfcmVnWzRdID0gcmVncy0+ZDU7CQkJCQkJXAorCXByX3JlZ1s3XSA9IHJlZ3MtPmEwOwkJCQkJCVwKKwlwcl9yZWdbOF0gPSByZWdzLT5hMTsJCQkJCQlcCisJcHJfcmVnWzE0XSA9IHJlZ3MtPmQwOwkJCQkJCVwKKwlwcl9yZWdbMTVdID0gcmR1c3AoKTsJCQkJCQlcCisJcHJfcmVnWzE2XSA9IDAgLyogcmVncy0+b3JpZ19kMCAqLzsJCQkJXAorCXByX3JlZ1sxN10gPSByZWdzLT5zcjsJCQkJCQlcCisJcHJfcmVnWzE4XSA9IHJlZ3MtPnBjOwkJCQkJCVwKKwkvKiBwcl9yZWdbMTldID0gKHJlZ3MtPmZvcm1hdCA8PCAxMikgfCByZWdzLT52ZWN0b3I7ICovCQlcCisJewkJCQkJCQkJXAorCSAgc3RydWN0IHN3aXRjaF9zdGFjayAqc3cgPSAoKHN0cnVjdCBzd2l0Y2hfc3RhY2sgKilyZWdzKSAtIDE7CVwKKwkgIHByX3JlZ1s1XSA9IHN3LT5kNjsJCQkJCQlcCisJICBwcl9yZWdbNl0gPSBzdy0+ZDc7CQkJCQkJXAorCSAgcHJfcmVnWzEwXSA9IHN3LT5hMzsJCQkJCQlcCisJICBwcl9yZWdbMTFdID0gc3ctPmE0OwkJCQkJCVwKKwkgIHByX3JlZ1sxMl0gPSBzdy0+YTU7CQkJCQkJXAorCSAgcHJfcmVnWzEzXSA9IHN3LT5hNjsJCQkJCQlcCisJfQorCisvKiBUaGlzIHlpZWxkcyBhIG1hc2sgdGhhdCB1c2VyIHByb2dyYW1zIGNhbiB1c2UgdG8gZmlndXJlIG91dCB3aGF0CisgICBpbnN0cnVjdGlvbiBzZXQgdGhpcyBjcHUgc3VwcG9ydHMuICAqLworCisjZGVmaW5lIEVMRl9IV0NBUAkoMCkKKworLyogVGhpcyB5aWVsZHMgYSBzdHJpbmcgdGhhdCBsZC5zbyB3aWxsIHVzZSB0byBsb2FkIGltcGxlbWVudGF0aW9uCisgICBzcGVjaWZpYyBsaWJyYXJpZXMgZm9yIG9wdGltaXphdGlvbi4gIFRoaXMgaXMgbW9yZSBzcGVjaWZpYyBpbgorICAgaW50ZW50IHRoYW4gcG9raW5nIGF0IHVuYW1lIG9yIC9wcm9jL2NwdWluZm8uICAqLworCisjZGVmaW5lIEVMRl9QTEFURk9STSAgKE5VTEwpCisKKyNpZmRlZiBfX0tFUk5FTF9fCisjZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCwgaWJjczIpIHNldF9wZXJzb25hbGl0eSgoaWJjczIpP1BFUl9TVlI0OlBFUl9MSU5VWCkKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9lbGlhLmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvZWxpYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxOGI4ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvZWxpYS5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICoJZWxpYS5oIC0tIExpbmVvIChmb3JtZXJseSBNb3JldG9uIEJheSkgZUxJQSBwbGF0Zm9ybSBzdXBwb3J0LgorICoKKyAqCShDKSBDb3B5cmlnaHQgMTk5OS0yMDAwLCBNb3JldG9uIEJheSAod3d3Lm1vcmV0b24uY29tLmF1KQorICoJKEMpIENvcHlyaWdodCAxOTk5LTIwMDAsIExpbmVvICh3d3cubGluZW8uY29tKQorICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZgllbGlhX2gKKyNkZWZpbmUJZWxpYV9oCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS9jb2xkZmlyZS5oPgorCisjaWZkZWYgQ09ORklHX2VMSUEKKworLyoKKyAqCVRoZSBzZXJpYWwgcG9ydCBEVFIgYW5kIERDRCBsaW5lcyBhcmUgYWxzbyBvbiB0aGUgUGFyYWxsZWwgSS9PCisgKglhcyB3ZWxsLCBzbyBkZWZpbmUgdGhvc2UgdG9vLgorICovCisKKyNkZWZpbmUJZUxJQV9EQ0QxCQkweDAwMDEKKyNkZWZpbmUJZUxJQV9EQ0QwCQkweDAwMDIKKyNkZWZpbmUJZUxJQV9EVFIxCQkweDAwMDQKKyNkZWZpbmUJZUxJQV9EVFIwCQkweDAwMDgKKworI2RlZmluZQllTElBX1BDSVJFU0VUCQkweDAwMjAKKworLyoKKyAqCUtlcm5lbCBtYWNyb3MgdG8gc2V0IGFuZCB1bnNldCB0aGUgTEVEcy4KKyAqLworI2lmbmRlZiBfX0FTU0VNQkxZX18KK2V4dGVybiB1bnNpZ25lZCBzaG9ydAlwcGRhdGE7CisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKyNlbmRpZgkvKiBDT05GSUdfZUxJQSAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNlbmRpZgkvKiBlbGlhX2ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9lbnRyeS5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L2VudHJ5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZmNWFhNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9lbnRyeS5oCkBAIC0wLDAgKzEsMTgzIEBACisjaWZuZGVmIF9fTTY4S05PTU1VX0VOVFJZX0gKKyNkZWZpbmUgX19NNjhLTk9NTVVfRU5UUllfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKworLyoKKyAqIFN0YWNrIGxheW91dCBpbiAncmV0X2Zyb21fZXhjZXB0aW9uJzoKKyAqCisgKiBUaGlzIGFsbG93cyBhY2Nlc3MgdG8gdGhlIHN5c2NhbGwgYXJndW1lbnRzIGluIHJlZ2lzdGVycyBkMS1kNQorICoKKyAqCSAwKHNwKSAtIGQxCisgKgkgNChzcCkgLSBkMgorICoJIDgoc3ApIC0gZDMKKyAqCSBDKHNwKSAtIGQ0CisgKgkxMChzcCkgLSBkNQorICoJMTQoc3ApIC0gYTAKKyAqCTE4KHNwKSAtIGExCisgKgkxQyhzcCkgLSBhMgorICoJMjAoc3ApIC0gZDAKKyAqCTI0KHNwKSAtIG9yaWdfZDAKKyAqCTI4KHNwKSAtIHN0YWNrIGFkanVzdG1lbnQKKyAqCTJDKHNwKSAtIFsgc3IgICAgICAgICAgICAgIF0gWyBmb3JtYXQgJiB2ZWN0b3IgXQorICoJMkUoc3ApIC0gWyBwYy1oaXdvcmQgICAgICAgXSBbIHNyICAgICAgICAgICAgICBdCisgKgkzMChzcCkgLSBbIHBjLWxvd29yZCAgICAgICBdIFsgcGMtaGl3b3JkICAgICAgIF0KKyAqCTMyKHNwKSAtIFsgZm9ybWF0ICYgdmVjdG9yIF0gWyBwYy1sb3dvcmQgICAgICAgXQorICoJCSAgXl5eXl5eXl5eXl5eXl5eXl4gICBeXl5eXl5eXl5eXl5eXl5eXgorICoJCQlNNjhLCQkgIENPTERGSVJFCisgKi8KKworI2RlZmluZSBBTExPV0lOVCAweGY4ZmYKKworI2lmZGVmIF9fQVNTRU1CTFlfXworCisvKiBwcm9jZXNzIGJpdHMgZm9yIHRhc2tfc3RydWN0LmZsYWdzICovCitQRl9UUkFDRVNZU19PRkYgPSAzCitQRl9UUkFDRVNZU19CSVQgPSA1CitQRl9QVFJBQ0VEX09GRiA9IDMKK1BGX1BUUkFDRURfQklUID0gNAorUEZfRFRSQUNFX09GRiA9IDEKK1BGX0RUUkFDRV9CSVQgPSA1CisKK0xFTk9TWVMgPSAzOAorCisjZGVmaW5lIFNXSVRDSF9TVEFDS19TSVpFICg2KjQrNCkJLyogSW5jbHVkZXMgcmV0dXJuIGFkZHJlc3MgKi8KKworLyoKKyAqIFRoaXMgZGVmaW5lcyB0aGUgbm9ybWFsIGtlcm5lbCBwdC1yZWdzIGxheW91dC4KKyAqCisgKiByZWdzIGFyZSBhMi1hNiBhbmQgZDYtZDcgcHJlc2VydmVkIGJ5IEMgY29kZQorICogdGhlIGtlcm5lbCBkb2Vzbid0IG1lc3Mgd2l0aCB1c3AgdW5sZXNzIGl0IG5lZWRzIHRvCisgKi8KKworI2lmZGVmIENPTkZJR19DT0xERklSRQorLyoKKyAqIFRoaXMgaXMgbWFkZSBhIGxpdHRsZSBtb3JlIHRyaWNreSBvbiB0aGUgQ29sZEZpcmUuIFRoZXJlIGlzIG5vCisgKiBzZXBhcmF0ZSBrZXJuZWwgYW5kIHVzZXIgc3RhY2sgcG9pbnRlcnMuIE5lZWQgdG8gYXJ0aWZpY2lhbGx5CisgKiBjb25zdHJ1Y3QgYSB1c3AgaW4gc29mdHdhcmUuLi4gV2hlbiBkb2luZyB0aGlzIHdlIG5lZWQgdG8gZGlzYWJsZQorICogaW50ZXJydXB0cywgb3RoZXJ3aXNlIGJhZCB0aGluZ3MgY291bGQgaGFwcGVuLgorICovCisubWFjcm8gU0FWRV9BTEwKKwltb3ZlCSMweDI3MDAsJXNyCQkvKiBkaXNhYmxlIGludHJzICovCisJYnRzdAkjNSwlc3BAKDIpCQkvKiBmcm9tIHVzZXI/ICovCisJYm5lcwk2ZgkJCS8qIG5vLCBza2lwICovCisJbW92ZWwJJXNwLHN3X3VzcAkJLyogc2F2ZSB1c2VyIHNwICovCisJYWRkcWwJIzgsc3dfdXNwCQkvKiByZW1vdmUgZXhjZXB0aW9uICovCisJbW92ZWwJc3dfa3NwLCVzcAkJLyoga2VybmVsIHNwICovCisJc3VicWwJIzgsJXNwCQkJLyogcm9vbSBmb3IgZXhjZXB0aW9uICovCisJY2xybAklc3BALQkJCS8qIHN0a2FkaiAqLworCW1vdmVsCSVkMCwlc3BALQkJLyogb3JpZyBkMCAqLworCW1vdmVsCSVkMCwlc3BALQkJLyogZDAgKi8KKwlsZWEJJXNwQCgtMzIpLCVzcAkJLyogc3BhY2UgZm9yIDggcmVncyAqLworCW1vdmVtbAklZDEtJWQ1LyVhMC0lYTIsJXNwQAorCW1vdmVsCXN3X3VzcCwlYTAJCS8qIGdldCB1c3AgKi8KKwltb3ZlbAklYTBALSwlc3BAKFBUX1BDKQkvKiBjb3B5IGV4Y2VwdGlvbiBwcm9ncmFtIGNvdW50ZXIgKi8KKwltb3ZlbAklYTBALSwlc3BAKFBUX0ZPUk1BVFZFQykvKiBjb3B5IGV4Y2VwdGlvbiBmb3JtYXQvdmVjdG9yL3NyICovCisJYnJhCTdmCisJNjoKKwljbHJsCSVzcEAtCQkJLyogc3RrYWRqICovCisJbW92ZWwJJWQwLCVzcEAtCQkvKiBvcmlnIGQwICovCisJbW92ZWwJJWQwLCVzcEAtCQkvKiBkMCAqLworCWxlYQklc3BAKC0zMiksJXNwCQkvKiBzcGFjZSBmb3IgOCByZWdzICovCisJbW92ZW1sCSVkMS0lZDUvJWEwLSVhMiwlc3BACisJNzoKKy5lbmRtCisKKy5tYWNybyBSRVNUT1JFX0FMTAorCWJ0c3QJIzUsJXNwQChQVF9TUikJCS8qIGdvaW5nIHVzZXI/ICovCisJYm5lcwk4ZgkJCS8qIG5vLCBza2lwICovCisJbW92ZQkjMHgyNzAwLCVzcgkJLyogZGlzYWJsZSBpbnRycyAqLworCW1vdmVsCXN3X3VzcCwlYTAJCS8qIGdldCB1c3AgKi8KKwltb3ZlbAklc3BAKFBUX1BDKSwlYTBALQkvKiBjb3B5IGV4Y2VwdGlvbiBwcm9ncmFtIGNvdW50ZXIgKi8KKwltb3ZlbAklc3BAKFBUX0ZPUk1BVFZFQyksJWEwQC0vKiBjb3B5IGV4Y2VwdGlvbiBmb3JtYXQvdmVjdG9yL3NyICovCisJbW92ZW1sCSVzcEAsJWQxLSVkNS8lYTAtJWEyCisJbGVhCSVzcEAoMzIpLCVzcAkJLyogc3BhY2UgZm9yIDggcmVncyAqLworCW1vdmVsCSVzcEArLCVkMAorCWFkZHFsCSM0LCVzcAkJCS8qIG9yaWcgZDAgKi8KKwlhZGRsCSVzcEArLCVzcAkJLyogc3RrYWRqICovCisJYWRkcWwJIzgsJXNwCQkJLyogcmVtb3ZlIGV4Y2VwdGlvbiAqLworCW1vdmVsCSVzcCxzd19rc3AJCS8qIHNhdmUga3NwICovCisJc3VicWwJIzgsc3dfdXNwCQkvKiBzZXQgZXhjZXB0aW9uICovCisJbW92ZWwJc3dfdXNwLCVzcAkJLyogcmVzdG9yZSB1c3AgKi8KKwlydGUKKwk4OgorCW1vdmVtbAklc3BALCVkMS0lZDUvJWEwLSVhMgorCWxlYQklc3BAKDMyKSwlc3AJCS8qIHNwYWNlIGZvciA4IHJlZ3MgKi8KKwltb3ZlbAklc3BAKywlZDAKKwlhZGRxbAkjNCwlc3AJCQkvKiBvcmlnIGQwICovCisJYWRkbAklc3BAKywlc3AJCS8qIHN0a2FkaiAqLworCXJ0ZQorLmVuZG0KKworLyoKKyAqIFF1aWNrIGV4Y2VwdGlvbiBzYXZlLCB1c2UgY3VycmVudCBzdGFjayBvbmx5LgorICovCisubWFjcm8gU0FWRV9MT0NBTAorCW1vdmUJIzB4MjcwMCwlc3IJCS8qIGRpc2FibGUgaW50cnMgKi8KKwljbHJsCSVzcEAtCQkJLyogc3RrYWRqICovCisJbW92ZWwJJWQwLCVzcEAtCQkvKiBvcmlnIGQwICovCisJbW92ZWwJJWQwLCVzcEAtCQkvKiBkMCAqLworCWxlYQklc3BAKC0zMiksJXNwCQkvKiBzcGFjZSBmb3IgOCByZWdzICovCisJbW92ZW1sCSVkMS0lZDUvJWEwLSVhMiwlc3BACisuZW5kbQorCisubWFjcm8gUkVTVE9SRV9MT0NBTAorCW1vdmVtbAklc3BALCVkMS0lZDUvJWEwLSVhMgorCWxlYQklc3BAKDMyKSwlc3AJCS8qIHNwYWNlIGZvciA4IHJlZ3MgKi8KKwltb3ZlbAklc3BAKywlZDAKKwlhZGRxbAkjNCwlc3AJCQkvKiBvcmlnIGQwICovCisJYWRkbAklc3BAKywlc3AJCS8qIHN0a2FkaiAqLworCXJ0ZQorLmVuZG0KKworLm1hY3JvIFNBVkVfU1dJVENIX1NUQUNLCisJbGVhCSVzcEAoLTI0KSwlc3AJCS8qIDYgcmVncyAqLworCW1vdmVtbAklYTMtJWE2LyVkNi0lZDcsJXNwQAorLmVuZG0KKworLm1hY3JvIFJFU1RPUkVfU1dJVENIX1NUQUNLCisJbW92ZW1sCSVzcEAsJWEzLSVhNi8lZDYtJWQ3CisJbGVhCSVzcEAoMjQpLCVzcAkJLyogNiByZWdzICovCisuZW5kbQorCisvKgorICogU29mdHdhcmUgY29weSBvZiB0aGUgdXNlciBhbmQga2VybmVsIHN0YWNrIHBvaW50ZXJzLi4uIFVnaC4uLgorICogTmVlZCB0aGVzZSB0byBnZXQgYXJvdW5kIENvbGRGaXJlIG5vdCBoYXZpbmcgc2VwYXJhdGUga2VybmVsCisgKiBhbmQgdXNlciBzdGFjayBwb2ludGVycy4KKyAqLworLmdsb2JsIHN3X3VzcAorLmdsb2JsIHN3X2tzcAorCisjZWxzZSAvKiAhQ09ORklHX0NPTERGSVJFICovCisKKy8qCisgKiBTdGFuZGFyZCA2OGsgaW50ZXJydXB0IGVudHJ5IGFuZCBleGl0IG1hY3Jvcy4KKyAqLworLm1hY3JvIFNBVkVfQUxMCisJY2xybAklc3BALQkJCS8qIHN0a2FkaiAqLworCW1vdmVsCSVkMCwlc3BALQkJLyogb3JpZyBkMCAqLworCW1vdmVsCSVkMCwlc3BALQkJLyogZDAgKi8KKwltb3ZlbWwJJWQxLSVkNS8lYTAtJWEyLCVzcEAtCisuZW5kbQorCisubWFjcm8gUkVTVE9SRV9BTEwKKwltb3ZlbWwJJXNwQCssJWEwLSVhMi8lZDEtJWQ1CisJbW92ZWwJJXNwQCssJWQwCisJYWRkcWwJIzQsJXNwCQkJLyogb3JpZyBkMCAqLworCWFkZGwJJXNwQCssJXNwCQkvKiBzdGthZGogKi8KKwlydGUKKy5lbmRtCisKKy5tYWNybyBTQVZFX1NXSVRDSF9TVEFDSworCW1vdmVtbAklYTMtJWE2LyVkNi0lZDcsJXNwQC0KKy5lbmRtCisKKy5tYWNybyBSRVNUT1JFX1NXSVRDSF9TVEFDSworCW1vdmVtbAklc3BAKywlYTMtJWE2LyVkNi0lZDcKKy5lbmRtCisKKyNlbmRpZiAvKiAhQ09ORklHX0NPTERGSVJFICovCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisjZW5kaWYgLyogX19NNjhLTk9NTVVfRU5UUllfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L2Vycm5vLmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvZXJybm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZThjMjJiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L2Vycm5vLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGFzbS1tNjhrL2Vycm5vLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvZmNudGwuaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9mY250bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2YTU1MmMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvZmNudGwuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLW02OGsvZmNudGwuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9mbGF0LmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvZmxhdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkODM2ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvZmxhdC5oCkBAIC0wLDAgKzEsMTYgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1tNjhrbm9tbXUvZmxhdC5oIC0tIHVDbGludXggZmxhdC1mb3JtYXQgZXhlY3V0YWJsZXMKKyAqLworCisjaWZuZGVmIF9fTTY4S05PTU1VX0ZMQVRfSF9fCisjZGVmaW5lIF9fTTY4S05PTU1VX0ZMQVRfSF9fCisKKyNkZWZpbmUJZmxhdF9zdGFja19hbGlnbihzcCkJCQkvKiBub3RoaW5nIG5lZWRlZCAqLworI2RlZmluZQlmbGF0X2FyZ3ZwX2VudnBfb25fc3RhY2soKQkJMQorI2RlZmluZQlmbGF0X29sZF9yYW1fZmxhZyhmbGFncykJCShmbGFncykKKyNkZWZpbmUJZmxhdF9yZWxvY192YWxpZChyZWxvYywgc2l6ZSkJCSgocmVsb2MpIDw9IChzaXplKSkKKyNkZWZpbmUJZmxhdF9nZXRfYWRkcl9mcm9tX3JwKHJwLCByZWx2YWwsIGZsYWdzKQlnZXRfdW5hbGlnbmVkKHJwKQorI2RlZmluZQlmbGF0X3B1dF9hZGRyX2F0X3JwKHJwLCB2YWwsIHJlbHZhbCkJcHV0X3VuYWxpZ25lZCh2YWwscnApCisjZGVmaW5lCWZsYXRfZ2V0X3JlbG9jYXRlX2FkZHIocmVsKQkJKHJlbCkKKworI2VuZGlmIC8qIF9fTTY4S05PTU1VX0ZMQVRfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvZnB1LmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvZnB1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI1MDgyOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9mcHUuaApAQCAtMCwwICsxLDIyIEBACisjaWZuZGVmIF9fTTY4S05PTU1VX0ZQVV9ICisjZGVmaW5lIF9fTTY4S05PTU1VX0ZQVV9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworLyoKKyAqIE1BWCBmbG9hdGluZyBwb2ludCB1bml0IHN0YXRlIHNpemUgKEZTQVZFL0ZSRVNUT1JFKQorICovCisjaWYgZGVmaW5lZChDT05GSUdfTTY4MDIwKSB8fCBkZWZpbmVkKENPTkZJR19NNjgwMzApCisjZGVmaW5lIEZQU1RBVEVTSVpFICgyMTYvc2l6ZW9mKHVuc2lnbmVkIGNoYXIpKQorI2VsaWYgZGVmaW5lZChDT05GSUdfTTY4MDQwKQorI2RlZmluZSBGUFNUQVRFU0laRSAoOTYvc2l6ZW9mKHVuc2lnbmVkIGNoYXIpKQorI2VsaWYgZGVmaW5lZChDT05GSUdfTTY4S0ZQVV9FTVUpCisjZGVmaW5lIEZQU1RBVEVTSVpFICgyOC9zaXplb2YodW5zaWduZWQgY2hhcikpCisjZWxpZiBkZWZpbmVkKENPTkZJR19NNjgwNjApCisjZGVmaW5lIEZQU1RBVEVTSVpFICgxMi9zaXplb2YodW5zaWduZWQgY2hhcikpCisjZWxzZQorLyogQXNzdW1lIG5vIEZQIHVuaXQgcHJlc2VudCB0aGVuLi4uICovCisjZGVmaW5lIEZQU1RBVEVTSVpFICgyKSAvKiBkdW1teSBzaXplICovCisjZW5kaWYKKworI2VuZGlmIC8qIF9fTTY4S19GUFVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L2hhcmRpcnEuaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9oYXJkaXJxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg2NTllNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9oYXJkaXJxLmgKQEAgLTAsMCArMSwyNSBAQAorI2lmbmRlZiBfX002OEtfSEFSRElSUV9ICisjZGVmaW5lIF9fTTY4S19IQVJESVJRX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgaW50IF9fc29mdGlycV9wZW5kaW5nOworfSBfX19fY2FjaGVsaW5lX2FsaWduZWQgaXJxX2NwdXN0YXRfdDsKKworI2luY2x1ZGUgPGxpbnV4L2lycV9jcHVzdGF0Lmg+CS8qIFN0YW5kYXJkIG1hcHBpbmdzIGZvciBpcnFfY3B1c3RhdF90IGFib3ZlICovCisKKyNkZWZpbmUgSEFSRElSUV9CSVRTCTgKKworLyoKKyAqIFRoZSBoYXJkaXJxIG1hc2sgaGFzIHRvIGJlIGxhcmdlIGVub3VnaCB0byBoYXZlCisgKiBzcGFjZSBmb3IgcG90ZW50aWFsbHkgYWxsIElSUSBzb3VyY2VzIGluIHRoZSBzeXN0ZW0KKyAqIG5lc3Rpbmcgb24gYSBzaW5nbGUgQ1BVOgorICovCisjaWYgKDEgPDwgSEFSRElSUV9CSVRTKSA8IE5SX0lSUVMKKyMgZXJyb3IgSEFSRElSUV9CSVRTIGlzIHRvbyBsb3chCisjZW5kaWYKKworI2VuZGlmIC8qIF9fTTY4S19IQVJESVJRX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9oZHJlZy5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L2hkcmVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNkZDliMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9oZHJlZy5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tbTY4ay9oZHJlZy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L2h3dGVzdC5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L2h3dGVzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwMDYyNmEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvaHd0ZXN0LmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGFzbS1tNjhrL2h3dGVzdC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L2lkZS5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L2lkZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxY2JmOGIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvaWRlLmgKQEAgLTAsMCArMSw0NDQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvaWRlLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk0LTE5OTYgIExpbnVzIFRvcnZhbGRzICYgYXV0aG9ycworICoJQ29weXJpZ2h0IChDKSAyMDAxICAgICAgIExpbmVvIEluYy4sIGRhdmlkbUB1Y2xpbnV4Lm9yZworICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX002OEtOT01NVV9JREVfSAorI2RlZmluZSBfTTY4S05PTU1VX0lERV9ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorCisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKglzb21lIGNvbGRmaXJlIHNwZWNpZmljcworICovCisKKyNpZmRlZiBDT05GSUdfQ09MREZJUkUKKyNpbmNsdWRlIDxhc20vY29sZGZpcmUuaD4KKyNpbmNsdWRlIDxhc20vbWNmc2ltLmg+CisKKy8qCisgKglTYXZlIHNvbWUgc3BhY2UsICBvbmx5IGhhdmUgMSBpbnRlcmZhY2UKKyAqLworI2RlZmluZSBNQVhfSFdJRlMJCSAgMQkvKiB3ZSBvbmx5IGhhdmUgb25lIGludGVyZmFjZSBmb3Igbm93ICovCisKKyNpZmRlZiBDT05GSUdfU0VDVVJFRURHRU1QMworI2RlZmluZQlNQ0ZTSU1fTE9DQUxDUwkgIE1DRlNJTV9DU0NSNAorI2Vsc2UKKyNkZWZpbmUJTUNGU0lNX0xPQ0FMQ1MJICBNQ0ZTSU1fQ1NDUjYKKyNlbmRpZgorCisjZW5kaWYgLyogQ09ORklHX0NPTERGSVJFICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqCUZpeCB1cCB0aGluZ3MgdGhhdCBtYXkgbm90IGhhdmUgYmVlbiBwcm92aWRlZAorICovCisKKyNpZm5kZWYgTUFYX0hXSUZTCisjZGVmaW5lIE1BWF9IV0lGUwk0CS8qIHNhbWUgYXMgdGhlIG90aGVyIGFyY2hzICovCisjZW5kaWYKKworI3VuZGVmIFNVUFBPUlRfU0xPV19EQVRBX1BPUlRTCisjZGVmaW5lIFNVUFBPUlRfU0xPV19EQVRBX1BPUlRTIDAKKworI3VuZGVmIFNVUFBPUlRfVkxCX1NZTkMKKyNkZWZpbmUgU1VQUE9SVF9WTEJfU1lOQyAwCisKKy8qIHRoaXMgZGVmaW5pdGlvbiBpcyB1c2VkIG9ubHkgb24gc3RhcnR1cCAuLiAqLworI3VuZGVmIEhEX0RBVEEKKyNkZWZpbmUgSERfREFUQSBOVUxMCisKKyNkZWZpbmUJREJHSURFKGZtdCxhLi4uKQorLy8gI2RlZmluZQlEQkdJREUoZm10LGEuLi4pIHByaW50ayhmbXQsICMjYSkKKyNkZWZpbmUgSURFX0lOTElORSBfX2lubGluZV9fCisvLyAjZGVmaW5lIElERV9JTkxJTkUKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgdW5pb24geworCXVuc2lnbmVkIGFsbAkJCTogODsJLyogYWxsIG9mIHRoZSBiaXRzIHRvZ2V0aGVyICovCisJc3RydWN0IHsKKwkJdW5zaWduZWQgYml0NwkJOiAxOwkvKiBhbHdheXMgMSAqLworCQl1bnNpZ25lZCBsYmEJCTogMTsJLyogdXNpbmcgTEJBIGluc3RlYWQgb2YgQ0hTICovCisJCXVuc2lnbmVkIGJpdDUJCTogMTsJLyogYWx3YXlzIDEgKi8KKwkJdW5zaWduZWQgdW5pdAkJOiAxOwkvKiBkcml2ZSBzZWxlY3QgbnVtYmVyLCAwIG9yIDEgKi8KKwkJdW5zaWduZWQgaGVhZAkJOiA0OwkvKiBhbHdheXMgemVyb3MgaGVyZSAqLworCX0gYjsKK30gc2VsZWN0X3Q7CisKKy8qCisgKglvdXIgbGlzdCBvZiBwb3J0cy9pcnEncyBmb3IgZGlmZmVyZW50IGJvYXJkcworICovCisKK3N0YXRpYyBzdHJ1Y3QgbTY4a19pZGVfZGVmYXVsdHMgeworCWlkZV9pb3JlZ190CWJhc2U7CisJaW50CQkJaXJxOworfSBtNjhrX2lkZV9kZWZhdWx0c1tNQVhfSFdJRlNdID0geworI2lmIGRlZmluZWQoQ09ORklHX1NFQ1VSRUVER0VNUDMpCisJeyAoKGlkZV9pb3JlZ190KTB4MzA4MDAwMDApLCAyOSB9LAorI2VsaWYgZGVmaW5lZChDT05GSUdfZUxJQSkKKwl7ICgoaWRlX2lvcmVnX3QpMHgzMGMwMDAwMCksIDI5IH0sCisjZWxzZQorCXsgKChpZGVfaW9yZWdfdCkweDApLCAwIH0KKyNlbmRpZgorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBJREVfSU5MSU5FIGludCBpZGVfZGVmYXVsdF9pcnEoaWRlX2lvcmVnX3QgYmFzZSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfSFdJRlM7IGkrKykKKwkJaWYgKG02OGtfaWRlX2RlZmF1bHRzW2ldLmJhc2UgPT0gYmFzZSkKKwkJCXJldHVybihtNjhrX2lkZV9kZWZhdWx0c1tpXS5pcnEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgSURFX0lOTElORSBpZGVfaW9yZWdfdCBpZGVfZGVmYXVsdF9pb19iYXNlKGludCBpbmRleCkKK3sKKwlpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8IE1BWF9IV0lGUykKKwkJcmV0dXJuKG02OGtfaWRlX2RlZmF1bHRzW2luZGV4XS5iYXNlKTsKKwlyZXR1cm4gMDsKK30KKworCisvKgorICogU2V0IHVwIGEgaHcgc3RydWN0dXJlIGZvciBhIHNwZWNpZmllZCBkYXRhIHBvcnQsIGNvbnRyb2wgcG9ydCBhbmQgSVJRLgorICogVGhpcyBzaG91bGQgZm9sbG93IHdoYXRldmVyIHRoZSBkZWZhdWx0IGludGVyZmFjZSB1c2VzLgorICovCitzdGF0aWMgSURFX0lOTElORSB2b2lkIGlkZV9pbml0X2h3aWZfcG9ydHMoCisJaHdfcmVnc190ICpodywKKwlpZGVfaW9yZWdfdCBkYXRhX3BvcnQsCisJaWRlX2lvcmVnX3QgY3RybF9wb3J0LAorCWludCAqaXJxKQoreworCWlkZV9pb3JlZ190IHJlZyA9IGRhdGFfcG9ydDsKKwlpbnQgaTsKKworCWZvciAoaSA9IElERV9EQVRBX09GRlNFVDsgaSA8PSBJREVfU1RBVFVTX09GRlNFVDsgaSsrKSB7CisJCWh3LT5pb19wb3J0c1tpXSA9IHJlZzsKKwkJcmVnICs9IDE7CisJfQorCWlmIChjdHJsX3BvcnQpIHsKKwkJaHctPmlvX3BvcnRzW0lERV9DT05UUk9MX09GRlNFVF0gPSBjdHJsX3BvcnQ7CisJfSBlbHNlIHsKKwkJaHctPmlvX3BvcnRzW0lERV9DT05UUk9MX09GRlNFVF0gPSBkYXRhX3BvcnQgKyAweGU7CisJfQorfQorCisjZGVmaW5lIGlkZV9pbml0X2RlZmF1bHRfaXJxKGJhc2UpCWlkZV9kZWZhdWx0X2lycShiYXNlKQorCitzdGF0aWMgSURFX0lOTElORSBpbnQKK2lkZV9yZXF1ZXN0X2lycSgKKwl1bnNpZ25lZCBpbnQgaXJxLAorCXZvaWQgKCpoYW5kbGVyKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKiksCisJdW5zaWduZWQgbG9uZyBmbGFncywKKwljb25zdCBjaGFyICpkZXZpY2UsCisJdm9pZCAqZGV2X2lkKQoreworI2lmZGVmIENPTkZJR19DT0xERklSRQorCW1jZl9hdXRvdmVjdG9yKGlycSk7CisjZW5kaWYKKwlyZXR1cm4ocmVxdWVzdF9pcnEoaXJxLCBoYW5kbGVyLCBmbGFncywgZGV2aWNlLCBkZXZfaWQpKTsKK30KKworCitzdGF0aWMgSURFX0lOTElORSB2b2lkCitpZGVfZnJlZV9pcnEodW5zaWduZWQgaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCWZyZWVfaXJxKGlycSwgZGV2X2lkKTsKK30KKworCitzdGF0aWMgSURFX0lOTElORSBpbnQKK2lkZV9jaGVja19yZWdpb24oaWRlX2lvcmVnX3QgZnJvbSwgdW5zaWduZWQgaW50IGV4dGVudCkKK3sKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgSURFX0lOTElORSB2b2lkCitpZGVfcmVxdWVzdF9yZWdpb24oaWRlX2lvcmVnX3QgZnJvbSwgdW5zaWduZWQgaW50IGV4dGVudCwgY29uc3QgY2hhciAqbmFtZSkKK3sKK30KKworCitzdGF0aWMgSURFX0lOTElORSB2b2lkCitpZGVfcmVsZWFzZV9yZWdpb24oaWRlX2lvcmVnX3QgZnJvbSwgdW5zaWduZWQgaW50IGV4dGVudCkKK3sKK30KKworCitzdGF0aWMgSURFX0lOTElORSB2b2lkCitpZGVfZml4X2RyaXZlaWQoc3RydWN0IGhkX2RyaXZlaWQgKmlkKQoreworI2lmZGVmIENPTkZJR19DT0xERklSRQorCWludCBpLCBuOworCXVuc2lnbmVkIHNob3J0ICp3cCA9ICh1bnNpZ25lZCBzaG9ydCAqKSBpZDsKKwlpbnQgYXZvaWRbXSA9IHs0OSwgNTEsIDUyLCA1OSwgLTEgfTsgLyogZG8gbm90IHN3YXAgdGhlc2Ugd29yZHMgKi8KKworCS8qIE5lZWQgdG8gYnl0ZSBzd2FwIHNob3J0cywgIGJ1dCBub3QgY2hhciBmaWVsZHMgKi8KKwlmb3IgKGkgPSBuID0gMDsgaSA8IHNpemVvZigqaWQpIC8gc2l6ZW9mKCp3cCk7IGkrKywgd3ArKykgeworCQlpZiAoYXZvaWRbbl0gPT0gaSkgeworCQkJbisrOworCQkJY29udGludWU7CisJCX0KKwkJKndwID0gKCgqd3AgJiAweGZmKSA8PCA4KSB8ICgoKndwID4+IDgpICYgMHhmZik7CisJfQorCS8qIGhhdmUgdG8gd29yZCBzd2FwIHRoZSBvbmUgMzIgYml0IGZpZWxkICovCisJaWQtPmxiYV9jYXBhY2l0eSA9ICgoaWQtPmxiYV9jYXBhY2l0eSAmIDB4ZmZmZikgPDwgMTYpIHwKKwkJCQkoKGlkLT5sYmFfY2FwYWNpdHkgPj4gMTYpICYgMHhmZmZmKTsKKyNlbmRpZgorfQorCisKK3N0YXRpYyBJREVfSU5MSU5FIHZvaWQKK2lkZV9yZWxlYXNlX2xvY2sgKGludCAqaWRlX2xvY2spCit7Cit9CisKKworc3RhdGljIElERV9JTkxJTkUgdm9pZAoraWRlX2dldF9sb2NrKAorCWludCAqaWRlX2xvY2ssCisJdm9pZCAoKmhhbmRsZXIpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSwKKwl2b2lkICpkYXRhKQoreworfQorCisKKyNkZWZpbmUgaWRlX2Fja19pbnRyKGh3aWYpIFwKKwkoKGh3aWYpLT5ody5hY2tfaW50ciA/IChod2lmKS0+aHcuYWNrX2ludHIoaHdpZikgOiAxKQorI2RlZmluZQlpZGVfX3N0aSgpCV9fc3RpKCkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICoJU3lzdGVtIHNwZWNpZmljIElPIHJlcXVpcmVtZW50cworICovCisKKyNpZmRlZiBDT05GSUdfQ09MREZJUkUKKworI2lmZGVmIENPTkZJR19TRUNVUkVFREdFTVAzCisKKy8qIFJlcGxhY2Ugc3RhbmRhcmQgSU8gZnVuY3Rpb25zIGZvciBmdW5reSBtYXBwaW5nIG9mIE1QMyBib2FyZCAqLworI3VuZGVmIG91dGIKKyN1bmRlZiBvdXRiX3AKKyN1bmRlZiBpbmIKKyN1bmRlZiBpbmJfcAorCisjZGVmaW5lIG91dGIodiwgYSkgICAgICAgICAgaWRlX291dGIodiwgKHVuc2lnbmVkIGxvbmcpIChhKSkKKyNkZWZpbmUgb3V0Yl9wKHYsIGEpICAgICAgICBpZGVfb3V0Yih2LCAodW5zaWduZWQgbG9uZykgKGEpKQorI2RlZmluZSBpbmIoYSkgICAgICAgICAgICAgIGlkZV9pbmIoKHVuc2lnbmVkIGxvbmcpIChhKSkKKyNkZWZpbmUgaW5iX3AoYSkgICAgICAgICAgICBpZGVfaW5iKCh1bnNpZ25lZCBsb25nKSAoYSkpCisKKyNkZWZpbmUgQUREUjhfUFRSKGFkZHIpCQkoKChhZGRyKSAmIDB4MSkgPyAoMHg4MDAwICsgKGFkZHIpIC0gMSkgOiAoYWRkcikpCisjZGVmaW5lIEFERFIxNl9QVFIoYWRkcikJKGFkZHIpCisjZGVmaW5lIEFERFIzMl9QVFIoYWRkcikJKGFkZHIpCisjZGVmaW5lIFNXQVA4KHcpCQkJKCgoKHcpICYgMHhmZmZmKSA8PCA4KSB8ICgoKHcpICYgMHhmZmZmKSA+PiA4KSkKKyNkZWZpbmUgU1dBUDE2KHcpCQkJKHcpCisjZGVmaW5lIFNXQVAzMih3KQkJCSh3KQorCisKK3N0YXRpYyBJREVfSU5MSU5FIHZvaWQKK2lkZV9vdXRiKHVuc2lnbmVkIGludCB2YWwsIHVuc2lnbmVkIGludCBhZGRyKQoreworCXZvbGF0aWxlIHVuc2lnbmVkIHNob3J0CSpycDsKKworCURCR0lERSgiJXModmFsPSV4LGFkZHI9JXgpXG4iLCBfX0ZVTkNUSU9OX18sIHZhbCwgYWRkcik7CisJcnAgPSAodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikgQUREUjhfUFRSKGFkZHIpOworCSpycCA9IFNXQVA4KHZhbCk7Cit9CisKKworc3RhdGljIElERV9JTkxJTkUgaW50CitpZGVfaW5iKHVuc2lnbmVkIGludCBhZGRyKQoreworCXZvbGF0aWxlIHVuc2lnbmVkIHNob3J0CSpycCwgdmFsOworCisJREJHSURFKCIlcyhhZGRyPSV4KVxuIiwgX19GVU5DVElPTl9fLCBhZGRyKTsKKwlycCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSBBRERSOF9QVFIoYWRkcik7CisJdmFsID0gKnJwOworCXJldHVybihTV0FQOCh2YWwpKTsKK30KKworCitzdGF0aWMgSURFX0lOTElORSB2b2lkCitpZGVfb3V0dyh1bnNpZ25lZCBpbnQgdmFsLCB1bnNpZ25lZCBpbnQgYWRkcikKK3sKKwl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydAkqcnA7CisKKwlEQkdJREUoIiVzKHZhbD0leCxhZGRyPSV4KVxuIiwgX19GVU5DVElPTl9fLCB2YWwsIGFkZHIpOworCXJwID0gKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopIEFERFIxNl9QVFIoYWRkcik7CisJKnJwID0gU1dBUDE2KHZhbCk7Cit9CisKK3N0YXRpYyBJREVfSU5MSU5FIHZvaWQKK2lkZV9vdXRzdyh1bnNpZ25lZCBpbnQgYWRkciwgY29uc3Qgdm9pZCAqdmJ1ZiwgdW5zaWduZWQgbG9uZyBsZW4pCit7CisJdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQJKnJwLCB2YWw7CisJdW5zaWduZWQgc2hvcnQgICAJKmJ1ZjsKKworCURCR0lERSgiJXMoYWRkcj0leCx2YnVmPSVwLGxlbj0leClcbiIsIF9fRlVOQ1RJT05fXywgYWRkciwgdmJ1ZiwgbGVuKTsKKwlidWYgPSAodW5zaWduZWQgc2hvcnQgKikgdmJ1ZjsKKwlycCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSBBRERSMTZfUFRSKGFkZHIpOworCWZvciAoOyAobGVuID4gMCk7IGxlbi0tKSB7CisJCXZhbCA9ICpidWYrKzsKKwkJKnJwID0gU1dBUDE2KHZhbCk7CisJfQorfQorCitzdGF0aWMgSURFX0lOTElORSBpbnQKK2lkZV9pbncodW5zaWduZWQgaW50IGFkZHIpCit7CisJdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKnJwLCB2YWw7CisKKwlEQkdJREUoIiVzKGFkZHI9JXgpXG4iLCBfX0ZVTkNUSU9OX18sIGFkZHIpOworCXJwID0gKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopIEFERFIxNl9QVFIoYWRkcik7CisJdmFsID0gKnJwOworCXJldHVybihTV0FQMTYodmFsKSk7Cit9CisKK3N0YXRpYyBJREVfSU5MSU5FIHZvaWQKK2lkZV9pbnN3KHVuc2lnbmVkIGludCBhZGRyLCB2b2lkICp2YnVmLCB1bnNpZ25lZCBsb25nIGxlbikKK3sKKwl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqcnA7CisJdW5zaWduZWQgc2hvcnQgICAgICAgICAgdywgKmJ1ZjsKKworCURCR0lERSgiJXMoYWRkcj0leCx2YnVmPSVwLGxlbj0leClcbiIsIF9fRlVOQ1RJT05fXywgYWRkciwgdmJ1ZiwgbGVuKTsKKwlidWYgPSAodW5zaWduZWQgc2hvcnQgKikgdmJ1ZjsKKwlycCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSBBRERSMTZfUFRSKGFkZHIpOworCWZvciAoOyAobGVuID4gMCk7IGxlbi0tKSB7CisJCXcgPSAqcnA7CisJCSpidWYrKyA9IFNXQVAxNih3KTsKKwl9Cit9CisKK3N0YXRpYyBJREVfSU5MSU5FIHZvaWQKK2lkZV9pbnNsKHVuc2lnbmVkIGludCBhZGRyLCB2b2lkICp2YnVmLCB1bnNpZ25lZCBsb25nIGxlbikKK3sKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nICpycDsKKwl1bnNpZ25lZCBsb25nICAgICAgICAgIHcsICpidWY7CisKKwlEQkdJREUoIiVzKGFkZHI9JXgsdmJ1Zj0lcCxsZW49JXgpXG4iLCBfX0ZVTkNUSU9OX18sIGFkZHIsIHZidWYsIGxlbik7CisJYnVmID0gKHVuc2lnbmVkIGxvbmcgKikgdmJ1ZjsKKwlycCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopIEFERFIzMl9QVFIoYWRkcik7CisJZm9yICg7IChsZW4gPiAwKTsgbGVuLS0pIHsKKwkJdyA9ICpycDsKKwkJKmJ1ZisrID0gU1dBUDMyKHcpOworCX0KK30KKworc3RhdGljIElERV9JTkxJTkUgdm9pZAoraWRlX291dHNsKHVuc2lnbmVkIGludCBhZGRyLCBjb25zdCB2b2lkICp2YnVmLCB1bnNpZ25lZCBsb25nIGxlbikKK3sKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nCSpycCwgdmFsOworCXVuc2lnbmVkIGxvbmcgICAJKmJ1ZjsKKworCURCR0lERSgiJXMoYWRkcj0leCx2YnVmPSVwLGxlbj0leClcbiIsIF9fRlVOQ1RJT05fXywgYWRkciwgdmJ1ZiwgbGVuKTsKKwlidWYgPSAodW5zaWduZWQgbG9uZyAqKSB2YnVmOworCXJwID0gKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikgQUREUjMyX1BUUihhZGRyKTsKKwlmb3IgKDsgKGxlbiA+IDApOyBsZW4tLSkgeworCQl2YWwgPSAqYnVmKys7CisJCSpycCA9IFNXQVAzMih2YWwpOworCX0KK30KKworI2VsaWYgQ09ORklHX2VMSUEKKworLyogOC8xNiBiaXQgYWNlc3NlcyBhcmUgY29udHJvbGxlZCBieSBmbGlja2luZyBiaXRzIGluIHRoZSBDUyByZWdpc3RlciAqLworI2RlZmluZQlBQ0NFU1NfTU9ERV8xNkJJVCgpCVwKKwkqKCh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSAoTUNGX01CQVIgKyBNQ0ZTSU1fTE9DQUxDUykpID0gMHgwMDgwCisjZGVmaW5lCUFDQ0VTU19NT0RFXzhCSVQoKQlcCisJKigodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikgKE1DRl9NQkFSICsgTUNGU0lNX0xPQ0FMQ1MpKSA9IDB4MDA0MAorCisKK3N0YXRpYyBJREVfSU5MSU5FIHZvaWQKK2lkZV9vdXR3KHVuc2lnbmVkIGludCB2YWwsIHVuc2lnbmVkIGludCBhZGRyKQoreworCUFDQ0VTU19NT0RFXzE2QklUKCk7CisJb3V0dyh2YWwsIGFkZHIpOworCUFDQ0VTU19NT0RFXzhCSVQoKTsKK30KKworc3RhdGljIElERV9JTkxJTkUgdm9pZAoraWRlX291dHN3KHVuc2lnbmVkIGludCBhZGRyLCBjb25zdCB2b2lkICp2YnVmLCB1bnNpZ25lZCBsb25nIGxlbikKK3sKKwlBQ0NFU1NfTU9ERV8xNkJJVCgpOworCW91dHN3KGFkZHIsIHZidWYsIGxlbik7CisJQUNDRVNTX01PREVfOEJJVCgpOworfQorCitzdGF0aWMgSURFX0lOTElORSBpbnQKK2lkZV9pbncodW5zaWduZWQgaW50IGFkZHIpCit7CisJaW50IHJldDsKKworCUFDQ0VTU19NT0RFXzE2QklUKCk7CisJcmV0ID0gaW53KGFkZHIpOworCUFDQ0VTU19NT0RFXzhCSVQoKTsKKwlyZXR1cm4ocmV0KTsKK30KKworc3RhdGljIElERV9JTkxJTkUgdm9pZAoraWRlX2luc3codW5zaWduZWQgaW50IGFkZHIsIHZvaWQgKnZidWYsIHVuc2lnbmVkIGxvbmcgbGVuKQoreworCUFDQ0VTU19NT0RFXzE2QklUKCk7CisJaW5zdyhhZGRyLCB2YnVmLCBsZW4pOworCUFDQ0VTU19NT0RFXzhCSVQoKTsKK30KKworc3RhdGljIElERV9JTkxJTkUgdm9pZAoraWRlX2luc2wodW5zaWduZWQgaW50IGFkZHIsIHZvaWQgKnZidWYsIHVuc2lnbmVkIGxvbmcgbGVuKQoreworCUFDQ0VTU19NT0RFXzE2QklUKCk7CisJaW5zbChhZGRyLCB2YnVmLCBsZW4pOworCUFDQ0VTU19NT0RFXzhCSVQoKTsKK30KKworc3RhdGljIElERV9JTkxJTkUgdm9pZAoraWRlX291dHNsKHVuc2lnbmVkIGludCBhZGRyLCBjb25zdCB2b2lkICp2YnVmLCB1bnNpZ25lZCBsb25nIGxlbikKK3sKKwlBQ0NFU1NfTU9ERV8xNkJJVCgpOworCW91dHNsKGFkZHIsIHZidWYsIGxlbik7CisJQUNDRVNTX01PREVfOEJJVCgpOworfQorCisjZW5kaWYgLyogQ09ORklHX1NFQ1VSRUVER0VNUDMgKi8KKworI3VuZGVmIG91dHcKKyN1bmRlZiBvdXR3X3AKKyN1bmRlZiBvdXRzdworI3VuZGVmIGludworI3VuZGVmIGlud19wCisjdW5kZWYgaW5zdworI3VuZGVmIGluc2wKKyN1bmRlZiBvdXRzbAorCisjZGVmaW5lCW91dHcodiwgYSkJICAgICBpZGVfb3V0dyh2LCAodW5zaWduZWQgbG9uZykgKGEpKQorI2RlZmluZQlvdXR3X3AodiwgYSkgICAgIGlkZV9vdXR3KHYsICh1bnNpZ25lZCBsb25nKSAoYSkpCisjZGVmaW5lIG91dHN3KGEsIGIsIG4pICAgaWRlX291dHN3KCh1bnNpZ25lZCBsb25nKSAoYSksIGIsIG4pCisjZGVmaW5lCWludyhhKQkgICAgICAgICBpZGVfaW53KCh1bnNpZ25lZCBsb25nKSAoYSkpCisjZGVmaW5lCWlud19wKGEpCSAgICAgaWRlX2ludygodW5zaWduZWQgbG9uZykgKGEpKQorI2RlZmluZSBpbnN3KGEsIGIsIG4pICAgIGlkZV9pbnN3KCh1bnNpZ25lZCBsb25nKSAoYSksIGIsIG4pCisjZGVmaW5lIGluc2woYSwgYiwgbikgICAgaWRlX2luc2woKHVuc2lnbmVkIGxvbmcpIChhKSwgYiwgbikKKyNkZWZpbmUgb3V0c2woYSwgYiwgbikgICBpZGVfb3V0c2woKHVuc2lnbmVkIGxvbmcpIChhKSwgYiwgbikKKworI2VuZGlmIENPTkZJR19DT0xERklSRQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYgLyogX002OEtOT01NVV9JREVfSCAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvaW8uaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9pby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwZmFkZTQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvaW8uaApAQCAtMCwwICsxLDIwMyBAQAorI2lmbmRlZiBfTTY4S05PTU1VX0lPX0gKKyNkZWZpbmUgX002OEtOT01NVV9JT19ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworLyoKKyAqIFRoZXNlIGFyZSBmb3IgSVNBL1BDSSBzaGFyZWQgbWVtb3J5IF9vbmx5XyBhbmQgc2hvdWxkIG5ldmVyIGJlIHVzZWQKKyAqIG9uIGFueSBvdGhlciB0eXBlIG9mIG1lbW9yeSwgaW5jbHVkaW5nIFpvcnJvIG1lbW9yeS4gVGhleSBhcmUgbWVhbnQgdG8KKyAqIGFjY2VzcyB0aGUgYnVzIGluIHRoZSBidXMgYnl0ZSBvcmRlciB3aGljaCBpcyBsaXR0bGUtZW5kaWFuIS4KKyAqCisgKiByZWFkWC93cml0ZVgoKSBhcmUgdXNlZCB0byBhY2Nlc3MgbWVtb3J5IG1hcHBlZCBkZXZpY2VzLiBPbiBzb21lCisgKiBhcmNoaXRlY3R1cmVzIHRoZSBtZW1vcnkgbWFwcGVkIElPIHN0dWZmIG5lZWRzIHRvIGJlIGFjY2Vzc2VkCisgKiBkaWZmZXJlbnRseS4gT24gdGhlIG02OGsgYXJjaGl0ZWN0dXJlLCB3ZSBqdXN0IHJlYWQvd3JpdGUgdGhlCisgKiBtZW1vcnkgbG9jYXRpb24gZGlyZWN0bHkuCisgKi8KKy8qICsrcm9tYW46IFRoZSBhc3NpZ25tZW50cyB0byB0ZW1wLiB2YXJzIGF2b2lkIHRoYXQgZ2NjIHNvbWV0aW1lcyBnZW5lcmF0ZXMKKyAqIHR3byBhY2Nlc3NlcyB0byBtZW1vcnksIHdoaWNoIG1heSBiZSB1bmRlc2lyZWFibGUgZm9yIHNvbWUgZGV2aWNlcy4KKyAqLworCisvKgorICogc3dhcCBmdW5jdGlvbnMgYXJlIHNvbWV0aW1lcyBuZWVkZWQgdG8gaW50ZXJmYWNlIGxpdHRsZS1lbmRpYW4gaGFyZHdhcmUKKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBfc3dhcHcodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgdikKK3sKKyAgICByZXR1cm4gKCh2IDw8IDgpIHwgKHYgPj4gOCkpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBfc3dhcGwodm9sYXRpbGUgdW5zaWduZWQgbG9uZyB2KQoreworICAgIHJldHVybiAoKHYgPDwgMjQpIHwgKCh2ICYgMHhmZjAwKSA8PCA4KSB8ICgodiAmIDB4ZmYwMDAwKSA+PiA4KSB8ICh2ID4+IDI0KSk7Cit9CisKKyNkZWZpbmUgcmVhZGIoYWRkcikgXAorICAgICh7IHVuc2lnbmVkIGNoYXIgX192ID0gKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoYWRkcikpOyBfX3Y7IH0pCisjZGVmaW5lIHJlYWR3KGFkZHIpIFwKKyAgICAoeyB1bnNpZ25lZCBzaG9ydCBfX3YgPSAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSAoYWRkcikpOyBfX3Y7IH0pCisjZGVmaW5lIHJlYWRsKGFkZHIpIFwKKyAgICAoeyB1bnNpZ25lZCBpbnQgX192ID0gKCoodm9sYXRpbGUgdW5zaWduZWQgaW50ICopIChhZGRyKSk7IF9fdjsgfSkKKworI2RlZmluZSByZWFkYl9yZWxheGVkKGFkZHIpIHJlYWRiKGFkZHIpCisjZGVmaW5lIHJlYWR3X3JlbGF4ZWQoYWRkcikgcmVhZHcoYWRkcikKKyNkZWZpbmUgcmVhZGxfcmVsYXhlZChhZGRyKSByZWFkbChhZGRyKQorCisjZGVmaW5lIHdyaXRlYihiLGFkZHIpICh2b2lkKSgoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIChhZGRyKSkgPSAoYikpCisjZGVmaW5lIHdyaXRldyhiLGFkZHIpICh2b2lkKSgoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSAoYWRkcikpID0gKGIpKQorI2RlZmluZSB3cml0ZWwoYixhZGRyKSAodm9pZCkoKCoodm9sYXRpbGUgdW5zaWduZWQgaW50ICopIChhZGRyKSkgPSAoYikpCisKKyNkZWZpbmUgX19yYXdfcmVhZGIgcmVhZGIKKyNkZWZpbmUgX19yYXdfcmVhZHcgcmVhZHcKKyNkZWZpbmUgX19yYXdfcmVhZGwgcmVhZGwKKyNkZWZpbmUgX19yYXdfd3JpdGViIHdyaXRlYgorI2RlZmluZSBfX3Jhd193cml0ZXcgd3JpdGV3CisjZGVmaW5lIF9fcmF3X3dyaXRlbCB3cml0ZWwKKworc3RhdGljIGlubGluZSB2b2lkIGlvX291dHNiKHVuc2lnbmVkIGludCBhZGRyLCB2b2lkICpidWYsIGludCBsZW4pCit7CisJdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqYXAgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSBhZGRyOworCXVuc2lnbmVkIGNoYXIgKmJwID0gKHVuc2lnbmVkIGNoYXIgKikgYnVmOworCXdoaWxlIChsZW4tLSkKKwkJKmFwID0gKmJwKys7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpb19vdXRzdyh1bnNpZ25lZCBpbnQgYWRkciwgdm9pZCAqYnVmLCBpbnQgbGVuKQoreworCXZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICphcCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSBhZGRyOworCXVuc2lnbmVkIHNob3J0ICpicCA9ICh1bnNpZ25lZCBzaG9ydCAqKSBidWY7CisJd2hpbGUgKGxlbi0tKQorCQkqYXAgPSBfc3dhcHcoKmJwKyspOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW9fb3V0c2wodW5zaWduZWQgaW50IGFkZHIsIHZvaWQgKmJ1ZiwgaW50IGxlbikKK3sKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKmFwID0gKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSBhZGRyOworCXVuc2lnbmVkIGludCAqYnAgPSAodW5zaWduZWQgaW50ICopIGJ1ZjsKKwl3aGlsZSAobGVuLS0pCisJCSphcCA9IF9zd2FwbCgqYnArKyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpb19pbnNiKHVuc2lnbmVkIGludCBhZGRyLCB2b2lkICpidWYsIGludCBsZW4pCit7CisJdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqYXAgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSBhZGRyOworCXVuc2lnbmVkIGNoYXIgKmJwID0gKHVuc2lnbmVkIGNoYXIgKikgYnVmOworCXdoaWxlIChsZW4tLSkKKwkJKmJwKysgPSAqYXA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpb19pbnN3KHVuc2lnbmVkIGludCBhZGRyLCB2b2lkICpidWYsIGludCBsZW4pCit7CisJdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKmFwID0gKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopIGFkZHI7CisJdW5zaWduZWQgc2hvcnQgKmJwID0gKHVuc2lnbmVkIHNob3J0ICopIGJ1ZjsKKwl3aGlsZSAobGVuLS0pCisJCSpicCsrID0gX3N3YXB3KCphcCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpb19pbnNsKHVuc2lnbmVkIGludCBhZGRyLCB2b2lkICpidWYsIGludCBsZW4pCit7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50ICphcCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgYWRkcjsKKwl1bnNpZ25lZCBpbnQgKmJwID0gKHVuc2lnbmVkIGludCAqKSBidWY7CisJd2hpbGUgKGxlbi0tKQorCQkqYnArKyA9IF9zd2FwbCgqYXApOworfQorCisjZGVmaW5lIG1taW93YigpCisKKy8qCisgKgltYWtlIHRoZSBzaG9ydCBuYW1lcyBtYWNyb3Mgc28gc3BlY2lmaWMgZGV2aWNlcworICoJY2FuIG92ZXJyaWRlIHRoZW0gYXMgcmVxdWlyZWQKKyAqLworCisjZGVmaW5lIG1lbXNldF9pbyhhLGIsYykJbWVtc2V0KCh2b2lkICopKGEpLChiKSwoYykpCisjZGVmaW5lIG1lbWNweV9mcm9taW8oYSxiLGMpCW1lbWNweSgoYSksKHZvaWQgKikoYiksKGMpKQorI2RlZmluZSBtZW1jcHlfdG9pbyhhLGIsYykJbWVtY3B5KCh2b2lkICopKGEpLChiKSwoYykpCisKKyNkZWZpbmUgaW5iKGFkZHIpICAgIHJlYWRiKGFkZHIpCisjZGVmaW5lIGludyhhZGRyKSAgICByZWFkdyhhZGRyKQorI2RlZmluZSBpbmwoYWRkcikgICAgcmVhZGwoYWRkcikKKyNkZWZpbmUgb3V0Yih4LGFkZHIpICgodm9pZCkgd3JpdGViKHgsYWRkcikpCisjZGVmaW5lIG91dHcoeCxhZGRyKSAoKHZvaWQpIHdyaXRldyh4LGFkZHIpKQorI2RlZmluZSBvdXRsKHgsYWRkcikgKCh2b2lkKSB3cml0ZWwoeCxhZGRyKSkKKworI2RlZmluZSBpbmJfcChhZGRyKSAgICBpbmIoYWRkcikKKyNkZWZpbmUgaW53X3AoYWRkcikgICAgaW53KGFkZHIpCisjZGVmaW5lIGlubF9wKGFkZHIpICAgIGlubChhZGRyKQorI2RlZmluZSBvdXRiX3AoeCxhZGRyKSBvdXRiKHgsYWRkcikKKyNkZWZpbmUgb3V0d19wKHgsYWRkcikgb3V0dyh4LGFkZHIpCisjZGVmaW5lIG91dGxfcCh4LGFkZHIpIG91dGwoeCxhZGRyKQorCisjZGVmaW5lIG91dHNiKGEsYixsKSBpb19vdXRzYihhLGIsbCkKKyNkZWZpbmUgb3V0c3coYSxiLGwpIGlvX291dHN3KGEsYixsKQorI2RlZmluZSBvdXRzbChhLGIsbCkgaW9fb3V0c2woYSxiLGwpCisKKyNkZWZpbmUgaW5zYihhLGIsbCkgaW9faW5zYihhLGIsbCkKKyNkZWZpbmUgaW5zdyhhLGIsbCkgaW9faW5zdyhhLGIsbCkKKyNkZWZpbmUgaW5zbChhLGIsbCkgaW9faW5zbChhLGIsbCkKKworI2RlZmluZSBJT19TUEFDRV9MSU1JVCAweGZmZmYKKworCisvKiBWYWx1ZXMgZm9yIG5vY2FjaGVmbGFnIGFuZCBjbW9kZSAqLworI2RlZmluZSBJT01BUF9GVUxMX0NBQ0hJTkcJCTAKKyNkZWZpbmUgSU9NQVBfTk9DQUNIRV9TRVIJCTEKKyNkZWZpbmUgSU9NQVBfTk9DQUNIRV9OT05TRVIJCTIKKyNkZWZpbmUgSU9NQVBfV1JJVEVUSFJPVUdICQkzCisKK2V4dGVybiB2b2lkICpfX2lvcmVtYXAodW5zaWduZWQgbG9uZyBwaHlzYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLCBpbnQgY2FjaGVmbGFnKTsKK2V4dGVybiB2b2lkIF9faW91bm1hcCh2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpOworCitleHRlcm4gaW5saW5lIHZvaWQgKmlvcmVtYXAodW5zaWduZWQgbG9uZyBwaHlzYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXJldHVybiBfX2lvcmVtYXAocGh5c2FkZHIsIHNpemUsIElPTUFQX05PQ0FDSEVfU0VSKTsKK30KK2V4dGVybiBpbmxpbmUgdm9pZCAqaW9yZW1hcF9ub2NhY2hlKHVuc2lnbmVkIGxvbmcgcGh5c2FkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlyZXR1cm4gX19pb3JlbWFwKHBoeXNhZGRyLCBzaXplLCBJT01BUF9OT0NBQ0hFX1NFUik7Cit9CitleHRlcm4gaW5saW5lIHZvaWQgKmlvcmVtYXBfd3JpdGV0aHJvdWdoKHVuc2lnbmVkIGxvbmcgcGh5c2FkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlyZXR1cm4gX19pb3JlbWFwKHBoeXNhZGRyLCBzaXplLCBJT01BUF9XUklURVRIUk9VR0gpOworfQorZXh0ZXJuIGlubGluZSB2b2lkICppb3JlbWFwX2Z1bGxjYWNoZSh1bnNpZ25lZCBsb25nIHBoeXNhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJcmV0dXJuIF9faW9yZW1hcChwaHlzYWRkciwgc2l6ZSwgSU9NQVBfRlVMTF9DQUNISU5HKTsKK30KKworZXh0ZXJuIHZvaWQgaW91bm1hcCh2b2lkICphZGRyKTsKKworLyogTm90aGluZyB0byBkbyAqLworCisjZGVmaW5lIGRtYV9jYWNoZV9pbnYoX3N0YXJ0LF9zaXplKQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBkbWFfY2FjaGVfd2JhY2soX3N0YXJ0LF9zaXplKQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBkbWFfY2FjaGVfd2JhY2tfaW52KF9zdGFydCxfc2l6ZSkJZG8geyB9IHdoaWxlICgwKQorCisvKiBQYWdlcyB0byBwaHlzaWNhbCBhZGRyZXNzLi4uICovCisjZGVmaW5lIHBhZ2VfdG9fcGh5cyhwYWdlKSAgICAgICgocGFnZSAtIG1lbV9tYXApIDw8IFBBR0VfU0hJRlQpCisjZGVmaW5lIHBhZ2VfdG9fYnVzKHBhZ2UpICAgICAgICgocGFnZSAtIG1lbV9tYXApIDw8IFBBR0VfU0hJRlQpCisKKy8qCisgKiBNYWNyb3MgdXNlZCBmb3IgY29udmVydGluZyBiZXR3ZWVuIHZpcnR1YWwgYW5kIHBoeXNpY2FsIG1hcHBpbmdzLgorICovCisjZGVmaW5lIG1tX3B0b3YodmFkZHIpCQkoKHZvaWQgKikgKHZhZGRyKSkKKyNkZWZpbmUgbW1fdnRvcCh2YWRkcikJCSgodW5zaWduZWQgbG9uZykgKHZhZGRyKSkKKyNkZWZpbmUgcGh5c190b192aXJ0KHZhZGRyKQkoKHZvaWQgKikgKHZhZGRyKSkKKyNkZWZpbmUgdmlydF90b19waHlzKHZhZGRyKQkoKHVuc2lnbmVkIGxvbmcpICh2YWRkcikpCisKKyNkZWZpbmUgdmlydF90b19idXMgdmlydF90b19waHlzCisjZGVmaW5lIGJ1c190b192aXJ0IHBoeXNfdG9fdmlydAorCisvKgorICogQ29udmVydCBhIHBoeXNpY2FsIHBvaW50ZXIgdG8gYSB2aXJ0dWFsIGtlcm5lbCBwb2ludGVyIGZvciAvZGV2L21lbQorICogYWNjZXNzCisgKi8KKyNkZWZpbmUgeGxhdGVfZGV2X21lbV9wdHIocCkJX192YShwKQorCisvKgorICogQ29udmVydCBhIHZpcnR1YWwgY2FjaGVkIHBvaW50ZXIgdG8gYW4gdW5jYWNoZWQgcG9pbnRlcgorICovCisjZGVmaW5lIHhsYXRlX2Rldl9rbWVtX3B0cihwKQlwCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfTTY4S05PTU1VX0lPX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9pb2N0bC5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L2lvY3RsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZmNzJmMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9pb2N0bC5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tbTY4ay9pb2N0bC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L2lvY3Rscy5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L2lvY3Rscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiMWViNGQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvaW9jdGxzLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGFzbS1tNjhrL2lvY3Rscy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L2lwYy5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L2lwYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0NmUzZDkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvaXBjLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2lwYy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L2lwY2J1Zi5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L2lwY2J1Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0YTdiZTYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvaXBjYnVmLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGFzbS1tNjhrL2lwY2J1Zi5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L2lycS5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L2lycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwOGNjZDkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvaXJxLmgKQEAgLTAsMCArMSwxMjggQEAKKyNpZm5kZWYgX002OEtfSVJRX0hfCisjZGVmaW5lIF9NNjhLX0lSUV9IXworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorCisjaWZkZWYgQ09ORklHX0NPTERGSVJFCisvKgorICogT24gdGhlIENvbGRGaXJlIHdlIGtlZXAgdHJhY2sgb2YgYWxsIHZlY3RvcnMuIFRoYXQgd2F5IGRyaXZlcnMKKyAqIGNhbiByZWdpc3RlciB3aGF0ZXZlciB2ZWN0b3IgbnVtYmVyIHRoZXkgd2lzaCwgYW5kIHdlIGNhbiBkZWFsCisgKiB3aXRoIGl0LgorICovCisjZGVmaW5lCVNZU19JUlFTCTI1NgorI2RlZmluZQlOUl9JUlFTCQlTWVNfSVJRUworCisjZWxzZQorCisvKgorICogIyBvZiBtNjhrIGludGVycnVwdHMKKyAqLworI2RlZmluZSBTWVNfSVJRUyA4CisjZGVmaW5lIE5SX0lSUVMgKDI0K1NZU19JUlFTKQorCisjZW5kaWYgLyogQ09ORklHX0NPTERGSVJFICovCisKKy8qCisgKiBJbnRlcnJ1cHQgc291cmNlIGRlZmluaXRpb25zCisgKiBHZW5lcmFsIGludGVycnVwdCBzb3VyY2VzIGFyZSB0aGUgbGV2ZWwgMS03LgorICogQWRkaW5nIGFuIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUgZm9yIG9uZSBvZiB0aGVzZSBzb3VyY2VzCisgKiByZXN1bHRzIGluIHRoZSBhZGRpdGlvbiBvZiB0aGF0IHJvdXRpbmUgdG8gYSBjaGFpbiBvZiByb3V0aW5lcy4KKyAqIEVhY2ggb25lIGlzIGNhbGxlZCBpbiBzdWNjZXNzaW9uLiAgRWFjaCBpbmRpdmlkdWFsIGludGVycnVwdAorICogc2VydmljZSByb3V0aW5lIHNob3VsZCBkZXRlcm1pbmUgaWYgdGhlIGRldmljZSBhc3NvY2lhdGVkIHdpdGgKKyAqIHRoYXQgcm91dGluZSByZXF1aXJlcyBzZXJ2aWNlLgorICovCisKKyNkZWZpbmUgSVJRMQkJKDEpCS8qIGxldmVsIDEgaW50ZXJydXB0ICovCisjZGVmaW5lIElSUTIJCSgyKQkvKiBsZXZlbCAyIGludGVycnVwdCAqLworI2RlZmluZSBJUlEzCQkoMykJLyogbGV2ZWwgMyBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRNAkJKDQpCS8qIGxldmVsIDQgaW50ZXJydXB0ICovCisjZGVmaW5lIElSUTUJCSg1KQkvKiBsZXZlbCA1IGludGVycnVwdCAqLworI2RlZmluZSBJUlE2CQkoNikJLyogbGV2ZWwgNiBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRNwkJKDcpCS8qIGxldmVsIDcgaW50ZXJydXB0IChub24tbWFza2FibGUpICovCisKKy8qCisgKiBNYWNoaW5lIHNwZWNpZmljIGludGVycnVwdCBzb3VyY2VzLgorICoKKyAqIEFkZGluZyBhbiBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lIGZvciBhIHNvdXJjZSB3aXRoIHRoaXMgYml0CisgKiBzZXQgaW5kaWNhdGVzIGEgc3BlY2lhbCBtYWNoaW5lIHNwZWNpZmljIGludGVycnVwdCBzb3VyY2UuCisgKiBUaGUgbWFjaGluZSBzcGVjaWZpYyBmaWxlcyBkZWZpbmUgdGhlc2Ugc291cmNlcy4KKyAqCisgKiBUaGUgSVJRX01BQ0hTUEVDIGJpdCBpcyBub3cgZ29uZSAtIHRoZSBvbmx5IHRoaW5nIGl0IGRpZCB3YXMgdG8KKyAqIGludHJvZHVjZSB1bm5lY2Vzc2FyeSBvdmVyaGVhZC4KKyAqCisgKiBBbGwgaW50ZXJydXB0IGhhbmRsaW5nIGlzIGFjdHVhbGx5IG1hY2hpbmUgc3BlY2lmaWMgc28gaXQgaXMgYmV0dGVyCisgKiB0byB1c2UgZnVuY3Rpb24gcG9pbnRlcnMsIGFzIHVzZWQgYnkgdGhlIFNwYXJjIHBvcnQsIGFuZCBzZWxlY3QgdGhlCisgKiBpbnRlcnJ1cHQgaGFuZGxpbmcgZnVuY3Rpb25zIHdoZW4gaW5pdGlhbGl6aW5nIHRoZSBrZXJuZWwuIFRoaXMgd2F5CisgKiB3ZSBzYXZlIHNvbWUgdW5uZWNlc3Nhcnkgb3ZlcmhlYWQgYXQgcnVuLXRpbWUuIAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwMS8xMS85NyAtIEplcworICovCisKK2V4dGVybiB2b2lkICgqbWFjaF9lbmFibGVfaXJxKSh1bnNpZ25lZCBpbnQpOworZXh0ZXJuIHZvaWQgKCptYWNoX2Rpc2FibGVfaXJxKSh1bnNpZ25lZCBpbnQpOworCisvKgorICogdmFyaW91cyBmbGFncyBmb3IgcmVxdWVzdF9pcnEoKSAtIHRoZSBBbWlnYSBub3cgdXNlcyB0aGUgc3RhbmRhcmQKKyAqIG1lY2hhbmlzbSBsaWtlIGFsbCBvdGhlciBhcmNoaXRlY3R1cmVzIC0gU0FfSU5URVJSVVBUIGFuZCBTQV9TSElSUQorICogYXJlIHlvdXIgZnJpZW5kcy4KKyAqLworI2RlZmluZSBJUlFfRkxHX0xPQ0sJKDB4MDAwMSkJLyogaGFuZGxlciBpcyBub3QgcmVwbGFjZWFibGUJKi8KKyNkZWZpbmUgSVJRX0ZMR19SRVBMQUNFCSgweDAwMDIpCS8qIHJlcGxhY2UgZXhpc3RpbmcgaGFuZGxlcgkqLworI2RlZmluZSBJUlFfRkxHX0ZBU1QJKDB4MDAwNCkKKyNkZWZpbmUgSVJRX0ZMR19TTE9XCSgweDAwMDgpCisjZGVmaW5lIElSUV9GTEdfU1RECSgweDgwMDApCS8qIGludGVybmFsbHkgdXNlZAkJKi8KKworI2lmZGVmIENPTkZJR19NNjgzNjAKKworI2RlZmluZSBDUE1fSU5URVJSVVBUICAgIElSUTQKKworLyogc2VlIE1DNjgzNjAgVXNlcidzIE1hbnVhbCwgcC4gNy0zNzcgICovCisjZGVmaW5lIENQTV9WRUNUT1JfQkFTRSAgMHgwNCAgICAgICAgICAgLyogMyBNU2JpdHMgb2YgQ1BNIHZlY3RvciAqLworCisjZW5kaWYgLyogQ09ORklHX002ODM2MCAqLworCisvKgorICogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBjaGFpbiB0b2dldGhlciB0aGUgSVNScyBmb3IgYSBwYXJ0aWN1bGFyCisgKiBpbnRlcnJ1cHQgc291cmNlIChpZiBpdCBzdXBwb3J0cyBjaGFpbmluZykuCisgKi8KK3R5cGVkZWYgc3RydWN0IGlycV9ub2RlIHsKKwlpcnFyZXR1cm5fdAkoKmhhbmRsZXIpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCXZvaWQJCSpkZXZfaWQ7CisJY29uc3QgY2hhcgkqZGV2bmFtZTsKKwlzdHJ1Y3QgaXJxX25vZGUgKm5leHQ7Cit9IGlycV9ub2RlX3Q7CisKKy8qCisgKiBUaGlzIHN0cnVjdHVyZSBoYXMgb25seSA0IGVsZW1lbnRzIGZvciBzcGVlZCByZWFzb25zCisgKi8KK3R5cGVkZWYgc3RydWN0IGlycV9oYW5kbGVyIHsKKwlpcnFyZXR1cm5fdAkoKmhhbmRsZXIpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCXZvaWQJCSpkZXZfaWQ7CisJY29uc3QgY2hhcgkqZGV2bmFtZTsKK30gaXJxX2hhbmRsZXJfdDsKKworLyogY291bnQgb2Ygc3B1cmlvdXMgaW50ZXJydXB0cyAqLworZXh0ZXJuIHZvbGF0aWxlIHVuc2lnbmVkIGludCBudW1fc3B1cmlvdXM7CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBuZXcgaXJxX25vZGVfdAorICovCitleHRlcm4gaXJxX25vZGVfdCAqbmV3X2lycV9ub2RlKHZvaWQpOworCisvKgorICogU29tZSBkcml2ZXJzIHdhbnQgdGhlc2UgZW50cnkgcG9pbnRzCisgKi8KKyNkZWZpbmUgZW5hYmxlX2lycSh4KQkobWFjaF9lbmFibGVfaXJxICA/ICgqbWFjaF9lbmFibGVfaXJxKSh4KSAgOiAwKQorI2RlZmluZSBkaXNhYmxlX2lycSh4KQkobWFjaF9kaXNhYmxlX2lycSA/ICgqbWFjaF9kaXNhYmxlX2lycSkoeCkgOiAwKQorCisjZGVmaW5lIGVuYWJsZV9pcnFfbm9zeW5jKHgpCWVuYWJsZV9pcnEoeCkKKyNkZWZpbmUgZGlzYWJsZV9pcnFfbm9zeW5jKHgpCWRpc2FibGVfaXJxKHgpCisKK3N0cnVjdCBpcnFhY3Rpb247CitzdHJ1Y3QgcHRfcmVnczsKK2ludCBoYW5kbGVfSVJRX2V2ZW50KHVuc2lnbmVkIGludCwgc3RydWN0IHB0X3JlZ3MgKiwgc3RydWN0IGlycWFjdGlvbiAqKTsKKworI2VuZGlmIC8qIF9NNjhLX0lSUV9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L2ttYXBfdHlwZXMuaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9rbWFwX3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZiNjcwNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9rbWFwX3R5cGVzLmgKQEAgLTAsMCArMSwyMSBAQAorI2lmbmRlZiBfX0FTTV9NNjhLX0tNQVBfVFlQRVNfSAorI2RlZmluZSBfX0FTTV9NNjhLX0tNQVBfVFlQRVNfSAorCitlbnVtIGttX3R5cGUgeworCUtNX0JPVU5DRV9SRUFELAorCUtNX1NLQl9TVU5SUENfREFUQSwKKwlLTV9TS0JfREFUQV9TT0ZUSVJRLAorCUtNX1VTRVIwLAorCUtNX1VTRVIxLAorCUtNX0JJT19TUkNfSVJRLAorCUtNX0JJT19EU1RfSVJRLAorCUtNX1BURTAsCisJS01fUFRFMSwKKwlLTV9JUlEwLAorCUtNX0lSUTEsCisJS01fU09GVElSUTAsCisJS01fU09GVElSUTEsCisJS01fVFlQRV9OUgorfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbGlua2FnZS5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L2xpbmthZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjg4YTE5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L2xpbmthZ2UuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLW02OGsvbGlua2FnZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L2xvY2FsLmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbG9jYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGEzOWMxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L2xvY2FsLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fTTY4S05PTU1VX0xPQ0FMX0gKKyNkZWZpbmUgX19NNjhLTk9NTVVfTE9DQUxfSAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbG9jYWwuaD4KKworI2VuZGlmIC8qIF9fTTY4S05PTU1VX0xPQ0FMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9tNTIwNnNpbS5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L201MjA2c2ltLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFlNzUwOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9tNTIwNnNpbS5oCkBAIC0wLDAgKzEsMTMyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCW01MjA2c2ltLmggLS0gQ29sZEZpcmUgNTIwNiBTeXN0ZW0gSW50ZWdyYXRpb24gTW9kdWxlIHN1cHBvcnQuCisgKgorICoJKEMpIENvcHlyaWdodCAxOTk5LCBHcmVnIFVuZ2VyZXIgKGdlcmdAc25hcGdlYXIuY29tKQorICogCShDKSBDb3B5cmlnaHQgMjAwMCwgTGluZW8gSW5jLiAod3d3LmxpbmVvLmNvbSkgCisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmCW01MjA2c2ltX2gKKyNkZWZpbmUJbTUyMDZzaW1faAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworLyoKKyAqCURlZmluZSB0aGUgNTIwNiBTSU0gcmVnaXN0ZXIgc2V0IGFkZHJlc3Nlcy4KKyAqLworI2RlZmluZQlNQ0ZTSU1fU0lNUgkJMHgwMwkJLyogU0lNIENvbmZpZyByZWcgKHIvdykgKi8KKyNkZWZpbmUJTUNGU0lNX0lDUjEJCTB4MTQJCS8qIEludHIgQ3RybCByZWcgMSAoci93KSAqLworI2RlZmluZQlNQ0ZTSU1fSUNSMgkJMHgxNQkJLyogSW50ciBDdHJsIHJlZyAyIChyL3cpICovCisjZGVmaW5lCU1DRlNJTV9JQ1IzCQkweDE2CQkvKiBJbnRyIEN0cmwgcmVnIDMgKHIvdykgKi8KKyNkZWZpbmUJTUNGU0lNX0lDUjQJCTB4MTcJCS8qIEludHIgQ3RybCByZWcgNCAoci93KSAqLworI2RlZmluZQlNQ0ZTSU1fSUNSNQkJMHgxOAkJLyogSW50ciBDdHJsIHJlZyA1IChyL3cpICovCisjZGVmaW5lCU1DRlNJTV9JQ1I2CQkweDE5CQkvKiBJbnRyIEN0cmwgcmVnIDYgKHIvdykgKi8KKyNkZWZpbmUJTUNGU0lNX0lDUjcJCTB4MWEJCS8qIEludHIgQ3RybCByZWcgNyAoci93KSAqLworI2RlZmluZQlNQ0ZTSU1fSUNSOAkJMHgxYgkJLyogSW50ciBDdHJsIHJlZyA4IChyL3cpICovCisjZGVmaW5lCU1DRlNJTV9JQ1I5CQkweDFjCQkvKiBJbnRyIEN0cmwgcmVnIDkgKHIvdykgKi8KKyNkZWZpbmUJTUNGU0lNX0lDUjEwCQkweDFkCQkvKiBJbnRyIEN0cmwgcmVnIDEwIChyL3cpICovCisjZGVmaW5lCU1DRlNJTV9JQ1IxMQkJMHgxZQkJLyogSW50ciBDdHJsIHJlZyAxMSAoci93KSAqLworI2RlZmluZQlNQ0ZTSU1fSUNSMTIJCTB4MWYJCS8qIEludHIgQ3RybCByZWcgMTIgKHIvdykgKi8KKyNkZWZpbmUJTUNGU0lNX0lDUjEzCQkweDIwCQkvKiBJbnRyIEN0cmwgcmVnIDEzIChyL3cpICovCisjaWZkZWYgQ09ORklHX001MjA2ZQorI2RlZmluZQlNQ0ZTSU1fSUNSMTQJCTB4MjEJCS8qIEludHIgQ3RybCByZWcgMTQgKHIvdykgKi8KKyNkZWZpbmUJTUNGU0lNX0lDUjE1CQkweDIyCQkvKiBJbnRyIEN0cmwgcmVnIDE1IChyL3cpICovCisjZW5kaWYKKworI2RlZmluZSBNQ0ZTSU1fSU1SCQkweDM2CQkvKiBJbnRlcnJ1cHQgTWFzayByZWcgKHIvdykgKi8KKyNkZWZpbmUgTUNGU0lNX0lQUgkJMHgzYQkJLyogSW50ZXJydXB0IFBlbmQgcmVnIChyL3cpICovCisKKyNkZWZpbmUJTUNGU0lNX1JTUgkJMHg0MAkJLyogUmVzZXQgU3RhdHVzIHJlZyAoci93KSAqLworI2RlZmluZQlNQ0ZTSU1fU1lQQ1IJCTB4NDEJCS8qIFN5c3RlbSBQcm90ZWN0aW9uIHJlZyAoci93KSovCisKKyNkZWZpbmUJTUNGU0lNX1NXSVZSCQkweDQyCQkvKiBTVyBXYXRjaGRvZyBpbnRyIHJlZyAoci93KSAqLworI2RlZmluZQlNQ0ZTSU1fU1dTUgkJMHg0MwkJLyogU1cgV2F0Y2hkb2cgc2VydmljZSAoci93KSAqLworCisjZGVmaW5lCU1DRlNJTV9EQ1JSCQkweDQ2CQkvKiBEUkFNIFJlZnJlc2ggcmVnIChyL3cpICovCisjZGVmaW5lCU1DRlNJTV9EQ1RSCQkweDRhCQkvKiBEUkFNIFRpbWluZyByZWcgKHIvdykgKi8KKyNkZWZpbmUJTUNGU0lNX0RBUjAJCTB4NGMJCS8qIERSQU0gMCBBZGRyZXNzIHJlZyhyL3cpICovCisjZGVmaW5lCU1DRlNJTV9ETVIwCQkweDUwCQkvKiBEUkFNIDAgTWFzayByZWcgKHIvdykgKi8KKyNkZWZpbmUJTUNGU0lNX0RDUjAJCTB4NTcJCS8qIERSQU0gMCBDb250cm9sIHJlZyAoci93KSAqLworI2RlZmluZQlNQ0ZTSU1fREFSMQkJMHg1OAkJLyogRFJBTSAxIEFkZHJlc3MgcmVnIChyL3cpICovCisjZGVmaW5lCU1DRlNJTV9ETVIxCQkweDVjCQkvKiBEUkFNIDEgTWFzayByZWcgKHIvdykgKi8KKyNkZWZpbmUJTUNGU0lNX0RDUjEJCTB4NjMJCS8qIERSQU0gMSBDb250cm9sIHJlZyAoci93KSAqLworCisjZGVmaW5lCU1DRlNJTV9DU0FSMAkJMHg2NAkJLyogQ1MgMCBBZGRyZXNzIDAgcmVnIChyL3cpICovCisjZGVmaW5lCU1DRlNJTV9DU01SMAkJMHg2OAkJLyogQ1MgMCBNYXNrIDAgcmVnIChyL3cpICovCisjZGVmaW5lCU1DRlNJTV9DU0NSMAkJMHg2ZQkJLyogQ1MgMCBDb250cm9sIHJlZyAoci93KSAqLworI2RlZmluZQlNQ0ZTSU1fQ1NBUjEJCTB4NzAJCS8qIENTIDEgQWRkcmVzcyByZWcgKHIvdykgKi8KKyNkZWZpbmUJTUNGU0lNX0NTTVIxCQkweDc0CQkvKiBDUyAxIE1hc2sgcmVnIChyL3cpICovCisjZGVmaW5lCU1DRlNJTV9DU0NSMQkJMHg3YQkJLyogQ1MgMSBDb250cm9sIHJlZyAoci93KSAqLworI2RlZmluZQlNQ0ZTSU1fQ1NBUjIJCTB4N2MJCS8qIENTIDIgQWRkcmVzcyByZWcgKHIvdykgKi8KKyNkZWZpbmUJTUNGU0lNX0NTTVIyCQkweDgwCQkvKiBDUyAyIE1hc2sgcmVnIChyL3cpICovCisjZGVmaW5lCU1DRlNJTV9DU0NSMgkJMHg4NgkJLyogQ1MgMiBDb250cm9sIHJlZyAoci93KSAqLworI2RlZmluZQlNQ0ZTSU1fQ1NBUjMJCTB4ODgJCS8qIENTIDMgQWRkcmVzcyByZWcgKHIvdykgKi8KKyNkZWZpbmUJTUNGU0lNX0NTTVIzCQkweDhjCQkvKiBDUyAzIE1hc2sgcmVnIChyL3cpICovCisjZGVmaW5lCU1DRlNJTV9DU0NSMwkJMHg5MgkJLyogQ1MgMyBDb250cm9sIHJlZyAoci93KSAqLworI2RlZmluZQlNQ0ZTSU1fQ1NBUjQJCTB4OTQJCS8qIENTIDQgQWRkcmVzcyByZWcgKHIvdykgKi8KKyNkZWZpbmUJTUNGU0lNX0NTTVI0CQkweDk4CQkvKiBDUyA0IE1hc2sgcmVnIChyL3cpICovCisjZGVmaW5lCU1DRlNJTV9DU0NSNAkJMHg5ZQkJLyogQ1MgNCBDb250cm9sIHJlZyAoci93KSAqLworI2RlZmluZQlNQ0ZTSU1fQ1NBUjUJCTB4YTAJCS8qIENTIDUgQWRkcmVzcyByZWcgKHIvdykgKi8KKyNkZWZpbmUJTUNGU0lNX0NTTVI1CQkweGE0CQkvKiBDUyA1IE1hc2sgcmVnIChyL3cpICovCisjZGVmaW5lCU1DRlNJTV9DU0NSNQkJMHhhYQkJLyogQ1MgNSBDb250cm9sIHJlZyAoci93KSAqLworI2RlZmluZQlNQ0ZTSU1fQ1NBUjYJCTB4YWMJCS8qIENTIDYgQWRkcmVzcyByZWcgKHIvdykgKi8KKyNkZWZpbmUJTUNGU0lNX0NTTVI2CQkweGIwCQkvKiBDUyA2IE1hc2sgcmVnIChyL3cpICovCisjZGVmaW5lCU1DRlNJTV9DU0NSNgkJMHhiNgkJLyogQ1MgNiBDb250cm9sIHJlZyAoci93KSAqLworI2RlZmluZQlNQ0ZTSU1fQ1NBUjcJCTB4YjgJCS8qIENTIDcgQWRkcmVzcyByZWcgKHIvdykgKi8KKyNkZWZpbmUJTUNGU0lNX0NTTVI3CQkweGJjCQkvKiBDUyA3IE1hc2sgcmVnIChyL3cpICovCisjZGVmaW5lCU1DRlNJTV9DU0NSNwkJMHhjMgkJLyogQ1MgNyBDb250cm9sIHJlZyAoci93KSAqLworI2RlZmluZQlNQ0ZTSU1fRE1DUgkJMHhjNgkJLyogRGVmYXVsdCBjb250cm9sICovCisKKyNpZmRlZiBDT05GSUdfTTUyMDZlCisjZGVmaW5lCU1DRlNJTV9QQVIJCTB4Y2EJCS8qIFBpbiBBc3NpZ25tZW50IHJlZyAoci93KSAqLworI2Vsc2UKKyNkZWZpbmUJTUNGU0lNX1BBUgkJMHhjYgkJLyogUGluIEFzc2lnbm1lbnQgcmVnIChyL3cpICovCisjZW5kaWYKKworI2RlZmluZQlNQ0ZTSU1fUEFERFIJCTB4MWM1CQkvKiBQYXJhbGxlbCBEaXJlY3Rpb24gKHIvdykgKi8KKyNkZWZpbmUJTUNGU0lNX1BBREFUCQkweDFjOQkJLyogUGFyYWxsZWwgUG9ydCBWYWx1ZSAoci93KSAqLworCisvKgorICoJU29tZSBzeW1ib2wgZGVmaW5lcyBmb3IgdGhlIFBhcmFsbGVsIFBvcnQgUGluIEFzc2lnbm1lbnQgUmVnaXN0ZXIKKyAqLworI2lmZGVmIENPTkZJR19NNTIwNmUKKyNkZWZpbmUgTUNGU0lNX1BBUl9EUkVRMCAgICAgICAgMHgxMDAgICAgICAgICAgIC8qIFNldCB0byBzZWxlY3QgRFJFUTAgaW5wdXQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIHRvIHNlbGVjdCBUMCBpbnB1dCAqLworI2RlZmluZSBNQ0ZTSU1fUEFSX0RSRVExICAgICAgICAweDIwMCAgICAgICAgICAgLyogU2VsZWN0IERSRVExIGlucHV0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciB0byBzZWxlY3QgVDAgb3V0cHV0ICovCisjZW5kaWYKKworLyoKKyAqCVNvbWUgc3ltYm9sIGRlZmluZXMgZm9yIHRoZSBJbnRlcnJ1cHQgQ29udHJvbCBSZWdpc3RlcgorICovCisjZGVmaW5lCU1DRlNJTV9TV0RJQ1IJCU1DRlNJTV9JQ1I4CS8qIFdhdGNoZG9nIHRpbWVyIElDUiAqLworI2RlZmluZQlNQ0ZTSU1fVElNRVIxSUNSCU1DRlNJTV9JQ1I5CS8qIFRpbWVyIDEgSUNSICovCisjZGVmaW5lCU1DRlNJTV9USU1FUjJJQ1IJTUNGU0lNX0lDUjEwCS8qIFRpbWVyIDIgSUNSICovCisjZGVmaW5lCU1DRlNJTV9VQVJUMUlDUgkJTUNGU0lNX0lDUjEyCS8qIFVBUlQgMSBJQ1IgKi8KKyNkZWZpbmUJTUNGU0lNX1VBUlQySUNSCQlNQ0ZTSU1fSUNSMTMJLyogVUFSVCAyIElDUiAqLworI2lmZGVmIENPTkZJR19NNTIwNmUKKyNkZWZpbmUJTUNGU0lNX0RNQTFJQ1IJCU1DRlNJTV9JQ1IxNAkvKiBETUEgMSBJQ1IgKi8KKyNkZWZpbmUJTUNGU0lNX0RNQTJJQ1IJCU1DRlNJTV9JQ1IxNQkvKiBETUEgMiBJQ1IgKi8KKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfTTUyMDZlKQorI2RlZmluZQlNQ0ZTSU1fSU1SX01BU0tBTEwJMHhmZmZlCQkvKiBBbGwgU0lNIGludHIgc291cmNlcyAqLworI2VuZGlmCisKKy8qCisgKglNYWNybyB0byBnZXQgYW5kIHNldCBJTVIgcmVnaXN0ZXIuIEl0IGlzIDE2IGJpdHMgb24gdGhlIDUyMDYuCisgKi8KKyNkZWZpbmUJbWNmX2dldGltcigpCQlcCisJKigodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikgKE1DRl9NQkFSICsgTUNGU0lNX0lNUikpCisKKyNkZWZpbmUJbWNmX3NldGltcihpbXIpCQlcCisJKigodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikgKE1DRl9NQkFSICsgTUNGU0lNX0lNUikpID0gKGltcikKKworI2RlZmluZQltY2ZfZ2V0aXByKCkJCVwKKwkqKCh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSAoTUNGX01CQVIgKyBNQ0ZTSU1fSVBSKSkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZW5kaWYJLyogbTUyMDZzaW1faCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L201MjQ5c2ltLmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbTUyNDlzaW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzQ0ZjUyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L201MjQ5c2ltLmgKQEAgLTAsMCArMSwyMDkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICoJbTUyNDlzaW0uaCAtLSBDb2xkRmlyZSA1MjQ5IFN5c3RlbSBJbnRlZ3JhdGlvbiBNb2R1bGUgc3VwcG9ydC4KKyAqCisgKgkoQykgQ29weXJpZ2h0IDIwMDIsIEdyZWcgVW5nZXJlciAoZ2VyZ0BzbmFwZ2Vhci5jb20pCisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmCW01MjQ5c2ltX2gKKyNkZWZpbmUJbTUyNDlzaW1faAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKglEZWZpbmUgdGhlIDUyNDkgU0lNIHJlZ2lzdGVyIHNldCBhZGRyZXNzZXMuCisgKi8KKyNkZWZpbmUJTUNGU0lNX1JTUgkJMHgwMAkJLyogUmVzZXQgU3RhdHVzIHJlZyAoci93KSAqLworI2RlZmluZQlNQ0ZTSU1fU1lQQ1IJCTB4MDEJCS8qIFN5c3RlbSBQcm90ZWN0aW9uIHJlZyAoci93KSovCisjZGVmaW5lCU1DRlNJTV9TV0lWUgkJMHgwMgkJLyogU1cgV2F0Y2hkb2cgaW50ciByZWcgKHIvdykgKi8KKyNkZWZpbmUJTUNGU0lNX1NXU1IJCTB4MDMJCS8qIFNXIFdhdGNoZG9nIHNlcnZpY2UgKHIvdykgKi8KKyNkZWZpbmUJTUNGU0lNX1BBUgkJMHgwNAkJLyogUGluIEFzc2lnbm1lbnQgcmVnIChyL3cpICovCisjZGVmaW5lCU1DRlNJTV9JUlFQQVIJCTB4MDYJCS8qIEludGVycnVwdCBBc3NpZ25tZW50IHJlZyAoci93KSAqLworI2RlZmluZQlNQ0ZTSU1fTVBBUksJCTB4MEMJCS8qIEJVUyBNYXN0ZXIgQ29udHJvbCBSZWcqLworI2RlZmluZQlNQ0ZTSU1fSVBSCQkweDQwCQkvKiBJbnRlcnJ1cHQgUGVuZCByZWcgKHIvdykgKi8KKyNkZWZpbmUJTUNGU0lNX0lNUgkJMHg0NAkJLyogSW50ZXJydXB0IE1hc2sgcmVnIChyL3cpICovCisjZGVmaW5lCU1DRlNJTV9BVlIJCTB4NGIJCS8qIEF1dG92ZWN0b3IgQ3RybCByZWcgKHIvdykgKi8KKyNkZWZpbmUJTUNGU0lNX0lDUjAJCTB4NGMJCS8qIEludHIgQ3RybCByZWcgMCAoci93KSAqLworI2RlZmluZQlNQ0ZTSU1fSUNSMQkJMHg0ZAkJLyogSW50ciBDdHJsIHJlZyAxIChyL3cpICovCisjZGVmaW5lCU1DRlNJTV9JQ1IyCQkweDRlCQkvKiBJbnRyIEN0cmwgcmVnIDIgKHIvdykgKi8KKyNkZWZpbmUJTUNGU0lNX0lDUjMJCTB4NGYJCS8qIEludHIgQ3RybCByZWcgMyAoci93KSAqLworI2RlZmluZQlNQ0ZTSU1fSUNSNAkJMHg1MAkJLyogSW50ciBDdHJsIHJlZyA0IChyL3cpICovCisjZGVmaW5lCU1DRlNJTV9JQ1I1CQkweDUxCQkvKiBJbnRyIEN0cmwgcmVnIDUgKHIvdykgKi8KKyNkZWZpbmUJTUNGU0lNX0lDUjYJCTB4NTIJCS8qIEludHIgQ3RybCByZWcgNiAoci93KSAqLworI2RlZmluZQlNQ0ZTSU1fSUNSNwkJMHg1MwkJLyogSW50ciBDdHJsIHJlZyA3IChyL3cpICovCisjZGVmaW5lCU1DRlNJTV9JQ1I4CQkweDU0CQkvKiBJbnRyIEN0cmwgcmVnIDggKHIvdykgKi8KKyNkZWZpbmUJTUNGU0lNX0lDUjkJCTB4NTUJCS8qIEludHIgQ3RybCByZWcgOSAoci93KSAqLworI2RlZmluZQlNQ0ZTSU1fSUNSMTAJCTB4NTYJCS8qIEludHIgQ3RybCByZWcgMTAgKHIvdykgKi8KKyNkZWZpbmUJTUNGU0lNX0lDUjExCQkweDU3CQkvKiBJbnRyIEN0cmwgcmVnIDExIChyL3cpICovCisKKyNkZWZpbmUgTUNGU0lNX0NTQVIwCQkweDgwCQkvKiBDUyAwIEFkZHJlc3MgMCByZWcgKHIvdykgKi8KKyNkZWZpbmUgTUNGU0lNX0NTTVIwCQkweDg0CQkvKiBDUyAwIE1hc2sgMCByZWcgKHIvdykgKi8KKyNkZWZpbmUgTUNGU0lNX0NTQ1IwCQkweDhhCQkvKiBDUyAwIENvbnRyb2wgcmVnIChyL3cpICovCisjZGVmaW5lIE1DRlNJTV9DU0FSMQkJMHg4YwkJLyogQ1MgMSBBZGRyZXNzIHJlZyAoci93KSAqLworI2RlZmluZSBNQ0ZTSU1fQ1NNUjEJCTB4OTAJCS8qIENTIDEgTWFzayByZWcgKHIvdykgKi8KKyNkZWZpbmUgTUNGU0lNX0NTQ1IxCQkweDk2CQkvKiBDUyAxIENvbnRyb2wgcmVnIChyL3cpICovCisjZGVmaW5lIE1DRlNJTV9DU0FSMgkJMHg5OAkJLyogQ1MgMiBBZHJlc3MgcmVnIChyL3cpICovCisjZGVmaW5lIE1DRlNJTV9DU01SMgkJMHg5YwkJLyogQ1MgMiBNYXNrIHJlZyAoci93KSAqLworI2RlZmluZSBNQ0ZTSU1fQ1NDUjIJCTB4YTIJCS8qIENTIDIgQ29udHJvbCByZWcgKHIvdykgKi8KKyNkZWZpbmUgTUNGU0lNX0NTQVIzCQkweGE0CQkvKiBDUyAzIEFkcmVzcyByZWcgKHIvdykgKi8KKyNkZWZpbmUgTUNGU0lNX0NTTVIzCQkweGE4CQkvKiBDUyAzIE1hc2sgcmVnIChyL3cpICovCisjZGVmaW5lIE1DRlNJTV9DU0NSMwkJMHhhZQkJLyogQ1MgMyBDb250cm9sIHJlZyAoci93KSAqLworCisjZGVmaW5lIE1DRlNJTV9EQ1IJCTB4MTAwCQkvKiBEUkFNIENvbnRyb2wgcmVnIChyL3cpICovCisjZGVmaW5lIE1DRlNJTV9EQUNSMAkJMHgxMDgJCS8qIERSQU0gMCBBZGRyIGFuZCBDdHJsIChyL3cpICovCisjZGVmaW5lIE1DRlNJTV9ETVIwCQkweDEwYwkJLyogRFJBTSAwIE1hc2sgcmVnIChyL3cpICovCisjZGVmaW5lIE1DRlNJTV9EQUNSMQkJMHgxMTAJCS8qIERSQU0gMSBBZGRyIGFuZCBDdHJsIChyL3cpICovCisjZGVmaW5lIE1DRlNJTV9ETVIxCQkweDExNAkJLyogRFJBTSAxIE1hc2sgcmVnIChyL3cpICovCisKKworLyoKKyAqCVNvbWUgc3ltYm9sIGRlZmluZXMgZm9yIHRoZSBhYm92ZS4uLgorICovCisjZGVmaW5lCU1DRlNJTV9TV0RJQ1IJCU1DRlNJTV9JQ1IwCS8qIFdhdGNoZG9nIHRpbWVyIElDUiAqLworI2RlZmluZQlNQ0ZTSU1fVElNRVIxSUNSCU1DRlNJTV9JQ1IxCS8qIFRpbWVyIDEgSUNSICovCisjZGVmaW5lCU1DRlNJTV9USU1FUjJJQ1IJTUNGU0lNX0lDUjIJLyogVGltZXIgMiBJQ1IgKi8KKyNkZWZpbmUJTUNGU0lNX1VBUlQxSUNSCQlNQ0ZTSU1fSUNSNAkvKiBVQVJUIDEgSUNSICovCisjZGVmaW5lCU1DRlNJTV9VQVJUMklDUgkJTUNGU0lNX0lDUjUJLyogVUFSVCAyIElDUiAqLworI2RlZmluZQlNQ0ZTSU1fRE1BMElDUgkJTUNGU0lNX0lDUjYJLyogRE1BIDAgSUNSICovCisjZGVmaW5lCU1DRlNJTV9ETUExSUNSCQlNQ0ZTSU1fSUNSNwkvKiBETUEgMSBJQ1IgKi8KKyNkZWZpbmUJTUNGU0lNX0RNQTJJQ1IJCU1DRlNJTV9JQ1I4CS8qIERNQSAyIElDUiAqLworI2RlZmluZQlNQ0ZTSU1fRE1BM0lDUgkJTUNGU0lNX0lDUjkJLyogRE1BIDMgSUNSICovCisKKy8qCisgKglHZW5lcmFsIHB1cnBvc2UgSU8gcmVnaXN0ZXJzIChpbiBNQkFSMikuCisgKi8KKyNkZWZpbmUJTUNGU0lNMl9HUElPUkVBRAkweDAJCS8qIEdQSU8gcmVhZCB2YWx1ZXMgKi8KKyNkZWZpbmUJTUNGU0lNMl9HUElPV1JJVEUJMHg0CQkvKiBHUElPIHdyaXRlIHZhbHVlcyAqLworI2RlZmluZQlNQ0ZTSU0yX0dQSU9FTkFCTEUJMHg4CQkvKiBHUElPIGVuYWJsZWQgKi8KKyNkZWZpbmUJTUNGU0lNMl9HUElPRlVOQwkweGMJCS8qIEdQSU8gZnVuY3Rpb24gKi8KKyNkZWZpbmUJTUNGU0lNMl9HUElPMVJFQUQJMHhiMAkJLyogR1BJTzEgcmVhZCB2YWx1ZXMgKi8KKyNkZWZpbmUJTUNGU0lNMl9HUElPMVdSSVRFCTB4YjQJCS8qIEdQSU8xIHdyaXRlIHZhbHVlcyAqLworI2RlZmluZQlNQ0ZTSU0yX0dQSU8xRU5BQkxFCTB4YjgJCS8qIEdQSU8xIGVuYWJsZWQgKi8KKyNkZWZpbmUJTUNGU0lNMl9HUElPMUZVTkMJMHhiYwkJLyogR1BJTzEgZnVuY3Rpb24gKi8KKworI2RlZmluZQlNQ0ZTSU0yX0dQSU9JTlRTVEFUCTB4YzAJCS8qIEdQSU8gaW50ZXJydXB0IHN0YXR1cyAqLworI2RlZmluZQlNQ0ZTSU0yX0dQSU9JTlRDTEVBUgkweGMwCQkvKiBHUElPIGludGVycnVwdCBjbGVhciAqLworI2RlZmluZQlNQ0ZTSU0yX0dQSU9JTlRFTkFCTEUJMHhjNAkJLyogR1BJTyBpbnRlcnJ1cHQgZW5hYmxlICovCisKKyNkZWZpbmUJTUNGU0lNMl9JTlRMRVZFTDEJMHgxNDAJCS8qIEludGVycnVwdCBsZXZlbCByZWcgMSAqLworI2RlZmluZQlNQ0ZTSU0yX0lOVExFVkVMMgkweDE0NAkJLyogSW50ZXJydXB0IGxldmVsIHJlZyAyICovCisjZGVmaW5lCU1DRlNJTTJfSU5UTEVWRUwzCTB4MTQ4CQkvKiBJbnRlcnJ1cHQgbGV2ZWwgcmVnIDMgKi8KKyNkZWZpbmUJTUNGU0lNMl9JTlRMRVZFTDQJMHgxNGMJCS8qIEludGVycnVwdCBsZXZlbCByZWcgNCAqLworI2RlZmluZQlNQ0ZTSU0yX0lOVExFVkVMNQkweDE1MAkJLyogSW50ZXJydXB0IGxldmVsIHJlZyA1ICovCisjZGVmaW5lCU1DRlNJTTJfSU5UTEVWRUw2CTB4MTU0CQkvKiBJbnRlcnJ1cHQgbGV2ZWwgcmVnIDYgKi8KKyNkZWZpbmUJTUNGU0lNMl9JTlRMRVZFTDcJMHgxNTgJCS8qIEludGVycnVwdCBsZXZlbCByZWcgNyAqLworI2RlZmluZQlNQ0ZTSU0yX0lOVExFVkVMOAkweDE1YwkJLyogSW50ZXJydXB0IGxldmVsIHJlZyA4ICovCisKKyNkZWZpbmUJTUNGU0lNMl9ETUFST1VURQkweDE4OAkJLyogRE1BIHJvdXRpbmcgKi8KKworI2RlZmluZQlNQ0ZTSU0yX0lERUNPTkZJRzEJMHgxOGMJCS8qIElERWNvbmZpZzEgKi8KKyNkZWZpbmUJTUNGU0lNMl9JREVDT05GSUcyCTB4MTkwCQkvKiBJREVjb25maWcyICovCisKKworLyoKKyAqCU1hY3JvIHRvIHNldCBJTVIgcmVnaXN0ZXIuIEl0IGlzIDMyIGJpdHMgb24gdGhlIDUyNDkuCisgKi8KKyNkZWZpbmUJTUNGU0lNX0lNUl9NQVNLQUxMCTB4N2ZmZmUJCS8qIEFsbCBTSU0gaW50ciBzb3VyY2VzICovCisKKyNkZWZpbmUJbWNmX2dldGltcigpCQlcCisJKigodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSAoTUNGX01CQVIgKyBNQ0ZTSU1fSU1SKSkKKworI2RlZmluZQltY2Zfc2V0aW1yKGltcikJCVwKKwkqKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopIChNQ0ZfTUJBUiArIE1DRlNJTV9JTVIpKSA9IChpbXIpOworCisjZGVmaW5lCW1jZl9nZXRpcHIoKQkJXAorCSooKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikgKE1DRl9NQkFSICsgTUNGU0lNX0lQUikpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZkZWYgX19BU1NFTUJMRVJfXworCisvKgorICoJVGhlIE01MjQ5QzMgYm9hcmQgbmVlZHMgYSBsaXR0bGUgaGVscCBnZXR0aW5nIGFsbCBpdHMgU0lNIGRldmljZXMKKyAqCWluaXRpYWxpemVkIGF0IGtlcm5lbCBzdGFydCB0aW1lLiBkQlVHIGRvZXNuJ3Qgc2V0IG11Y2ggdXAsIHNvCisgKgl3ZSBuZWVkIHRvIGRvIGl0IG1hbnVhbGx5LgorICovCisubWFjcm8gbTUyNDljM19zZXR1cAorCS8qCisJICoJU2V0IE1CQVIxIGFuZCBNQkFSMiwganVzdCBpbmNhc2UgdGhleSBhcmUgbm90IHNldC4KKwkgKi8KKwltb3ZlbAkjMHgxMDAwMDAwMSwlYTAKKwltb3ZlYwklYTAsJU1CQVIJCQkvKiBtYXAgTUJBUiByZWdpb24gKi8KKwlzdWJxbAkjMSwlYTAJCQkJLyogZ2V0IE1CQVIgYWRkcmVzcyBpbiBhMCAqLworCisJbW92ZWwJIzB4ODAwMDAwMDEsJWExCisJbW92ZWMJJWExLCMzMDg2CQkJLyogbWFwIE1CQVIyIHJlZ2lvbiAqLworCXN1YnFsCSMxLCVhMQkJCQkvKiBnZXQgTUJBUjIgYWRkcmVzcyBpbiBhMSAqLworCisJLyoKKwkgKiAgICAgIE1vdmUgc2Vjb25kYXJ5IGludGVycnVwdHMgdG8gYmFzZSBhdCAxMjguCisJICovCisJbW92ZWIJIzB4ODAsJWQwCisJbW92ZWIJJWQwLDB4MTZiKCVhMSkJCQkvKiBpbnRlcnJ1cHQgYmFzZSByZWdpc3RlciAqLworCisJLyoKKwkgKiAgICAgIFdvcmsgYXJvdW5kIGJyb2tlbiBDU01SMC9EUkFNIHZlY3RvciBwcm9ibGVtLgorCSAqLworCW1vdmVsCSMweDAwMUYwMDIxLCVkMAkJCS8qIGRpc2FibGUgQy9JIGJpdCAqLworCW1vdmVsCSVkMCwweDg0KCVhMCkJCQkvKiBzZXQgQ1NNUjAgKi8KKworCS8qCisJICoJRGlzYWJsZSB0aGUgUExMIGZpcnN0bHkuIChXaG8ga25vd3Mgd2hhdCBzdGF0ZSBpdCBpcworCSAqCWluIGhlcmUhKS4KKwkgKi8KKwltb3ZlbAkweDE4MCglYTEpLCVkMAkJCS8qIGdldCBjdXJyZW50IFBMTCB2YWx1ZSAqLworCWFuZGwJIzB4ZmZmZmZmZmUsJWQwCQkJLyogUExMIGJ5cGFzcyBmaXJzdCAqLworCW1vdmVsCSVkMCwweDE4MCglYTEpCQkJLyogc2V0IFBMTCByZWdpc3RlciAqLworCW5vcAorCisjaWZkZWYgQ09ORklHX0NMT0NLXzE0ME1IegorCS8qCisJICoJU2V0IGluaXRpYWwgY2xvY2sgZnJlcXVlbmN5LiBUaGlzIGFzc3VtZXMgTTUyNDlDMyBib2FyZAorCSAqCWlzIGZpdHRlZCB3aXRoIDExLjI4OTZNSHogY3J5c3RhbC4gSXQgd2lsbCBwcm9ncmFtIHRoZQorCSAqCVBMTCBmb3IgMTQwTUh6LiBMZXRzIGdvIGZhc3QgOi0pCisJICovCisJbW92ZWwJIzB4MTI1YTQwZjAsJWQwCQkJLyogc2V0IGZvciAxNDBNSHogKi8KKwltb3ZlbAklZDAsMHgxODAoJWExKQkJCS8qIHNldCBQTEwgcmVnaXN0ZXIgKi8KKwlvcmwJIzB4MSwlZDAKKwltb3ZlbAklZDAsMHgxODAoJWExKQkJCS8qIHNldCBQTEwgcmVnaXN0ZXIgKi8KKyNlbmRpZgorCisJLyoKKwkgKglTZXR1cCBDUzEgZm9yIGV0aGVybmV0IGNvbnRyb2xsZXIuCisJICoJKFNldHVwIGFzIHBlciBNNTI0OUMzIGRvY28pLgorCSAqLworCW1vdmVsICAjMHhlMDAwMDAwMCwlZDAJCQkvKiBDUzEgbWFwcGVkIGF0IDB4ZTAwMDAwMDAgKi8KKwltb3ZlbCAgJWQwLDB4OGMoJWEwKQorCW1vdmVsICAjMHgwMDFmMDAyMSwlZDAJCQkvKiBDUzEgc2l6ZSBvZiAxTWIgKi8KKwltb3ZlbCAgJWQwLDB4OTAoJWEwKQorCW1vdmV3ICAjMHgwMDgwLCVkMAkJCS8qIENTMSA9IDE2Yml0IHBvcnQsIEFBICovCisJbW92ZXcgICVkMCwweDk2KCVhMCkKKworCS8qCisJICoJU2V0dXAgQ1MyIGZvciBJREUgaW50ZXJmYWNlLgorCSAqLworCW1vdmVsCSMweDUwMDAwMDAwLCVkMAkJCS8qIENTMiBtYXBwZWQgYXQgMHg1MDAwMDAwMCAqLworCW1vdmVsCSVkMCwweDk4KCVhMCkKKwltb3ZlbAkjMHgwMDFmMDAwMSwlZDAJCQkvKiBDUzIgc2l6ZSBvZiAxTUIgKi8KKwltb3ZlbAklZDAsMHg5YyglYTApCisJbW92ZXcJIzB4MDA4MCwlZDAJCQkvKiBDUzIgPSAxNmJpdCwgVEEgKi8KKwltb3ZldwklZDAsMHhhMiglYTApCisKKwltb3ZlbAkjMHgwMDEwNzAwMCwlZDAJCQkvKiBJREVjb25maWcxICovCisJbW92ZWwJJWQwLDB4MThjKCVhMSkKKwltb3ZlbAkjMHgwMDBjMDQwMCwlZDAJCQkvKiBJREVjb25maWcyICovCisJbW92ZWwJJWQwLDB4MTkwKCVhMSkKKworCW1vdmVsCSMweDAwMDgwMDAwLCVkMAkJCS8qIEdQSU8xOSwgSURFIHJlc2V0IGJpdCAqLworCW9ybAklZDAsMHhjKCVhMSkJCQkvKiBmdW5jdGlvbiBHUElPMTkgKi8KKwlvcmwJJWQwLDB4OCglYTEpCQkJLyogZW5hYmxlIEdQSU8xOSBhcyBvdXRwdXQgKi8KKyAgICAgICAgb3JsCSVkMCwweDQoJWExKQkJCS8qIGRlLWFzc2VydCBJREUgcmVzZXQgKi8KKy5lbmRtCisKKyNkZWZpbmUJUExBVEZPUk1fU0VUVVAJbTUyNDljM19zZXR1cAorCisjZW5kaWYgLyogX19BU1NFTUJMRVJfXyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNlbmRpZgkvKiBtNTI0OXNpbV9oICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbTUyNzJzaW0uaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9tNTI3MnNpbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0MDg3NTMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbTUyNzJzaW0uaApAQCAtMCwwICsxLDc5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCW01Mjcyc2ltLmggLS0gQ29sZEZpcmUgNTI3MiBTeXN0ZW0gSW50ZWdyYXRpb24gTW9kdWxlIHN1cHBvcnQuCisgKgorICoJKEMpIENvcHlyaWdodCAxOTk5LCBHcmVnIFVuZ2VyZXIgKGdlcmdAc25hcGdlYXIuY29tKQorICogCShDKSBDb3B5cmlnaHQgMjAwMCwgTGluZW8gSW5jLiAod3d3LmxpbmVvLmNvbSkgCisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmCW01Mjcyc2ltX2gKKyNkZWZpbmUJbTUyNzJzaW1faAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworLyoKKyAqCURlZmluZSB0aGUgNTI3MiBTSU0gcmVnaXN0ZXIgc2V0IGFkZHJlc3Nlcy4KKyAqLworI2RlZmluZQlNQ0ZTSU1fU0NSCQkweDA0CQkvKiBTSU0gQ29uZmlnIHJlZyAoci93KSAqLworI2RlZmluZQlNQ0ZTSU1fU1BSCQkweDA2CQkvKiBTeXN0ZW0gUHJvdGVjdGlvbiByZWcgKHIvdykqLworI2RlZmluZQlNQ0ZTSU1fUE1SCQkweDA4CQkvKiBQb3dlciBNYW5hZ2VtZW50IHJlZyAoci93KSAqLworI2RlZmluZQlNQ0ZTSU1fQVBNUgkJMHgwZQkJLyogQWN0aXZlIExvdyBQb3dlciByZWcgKHIvdykgKi8KKyNkZWZpbmUJTUNGU0lNX0RJUgkJMHgxMAkJLyogRGV2aWNlIElkZW50aXR5IHJlZyAoci93KSAqLworCisjZGVmaW5lCU1DRlNJTV9JQ1IxCQkweDIwCQkvKiBJbnRyIEN0cmwgcmVnIDEgKHIvdykgKi8KKyNkZWZpbmUJTUNGU0lNX0lDUjIJCTB4MjQJCS8qIEludHIgQ3RybCByZWcgMiAoci93KSAqLworI2RlZmluZQlNQ0ZTSU1fSUNSMwkJMHgyOAkJLyogSW50ciBDdHJsIHJlZyAzIChyL3cpICovCisjZGVmaW5lCU1DRlNJTV9JQ1I0CQkweDJjCQkvKiBJbnRyIEN0cmwgcmVnIDQgKHIvdykgKi8KKworI2RlZmluZSBNQ0ZTSU1fSVNSCQkweDMwCQkvKiBJbnRlcnJ1cHQgU291cmNlIHJlZyAoci93KSAqLworI2RlZmluZSBNQ0ZTSU1fUElUUgkJMHgzNAkJLyogSW50ZXJydXB0IFRyYW5zaXRpb24gKHIvdykgKi8KKyNkZWZpbmUJTUNGU0lNX1BJV1IJCTB4MzgJCS8qIEludGVycnVwdCBXYWtldXAgcmVnIChyL3cpICovCisjZGVmaW5lCU1DRlNJTV9QSVZSCQkweDNmCQkvKiBJbnRlcnJ1cHQgVmVjdG9yIHJlZyAoci93KCAqLworCisjZGVmaW5lCU1DRlNJTV9XUlJSCQkweDI4MAkJLyogV2F0Y2hkb2cgcmVmZXJlbmNlIChyL3cpICovCisjZGVmaW5lCU1DRlNJTV9XSVJSCQkweDI4NAkJLyogV2F0Y2hkb2cgaW50ZXJydXB0IChyL3cpICovCisjZGVmaW5lCU1DRlNJTV9XQ1IJCTB4Mjg4CQkvKiBXYXRjaGRvZyBjb3VudGVyIChyL3cpICovCisjZGVmaW5lCU1DRlNJTV9XRVIJCTB4MjhjCQkvKiBXYXRjaGRvZyBldmVudCAoci93KSAqLworCisjZGVmaW5lCU1DRlNJTV9DU0JSMAkJMHg0MAkJLyogQ1MwIEJhc2UgQWRkcmVzcyAoci93KSAqLworI2RlZmluZQlNQ0ZTSU1fQ1NPUjAJCTB4NDQJCS8qIENTMCBPcHRpb24gKHIvdykgKi8KKyNkZWZpbmUJTUNGU0lNX0NTQlIxCQkweDQ4CQkvKiBDUzEgQmFzZSBBZGRyZXNzIChyL3cpICovCisjZGVmaW5lCU1DRlNJTV9DU09SMQkJMHg0YwkJLyogQ1MxIE9wdGlvbiAoci93KSAqLworI2RlZmluZQlNQ0ZTSU1fQ1NCUjIJCTB4NTAJCS8qIENTMiBCYXNlIEFkZHJlc3MgKHIvdykgKi8KKyNkZWZpbmUJTUNGU0lNX0NTT1IyCQkweDU0CQkvKiBDUzIgT3B0aW9uIChyL3cpICovCisjZGVmaW5lCU1DRlNJTV9DU0JSMwkJMHg1OAkJLyogQ1MzIEJhc2UgQWRkcmVzcyAoci93KSAqLworI2RlZmluZQlNQ0ZTSU1fQ1NPUjMJCTB4NWMJCS8qIENTMyBPcHRpb24gKHIvdykgKi8KKyNkZWZpbmUJTUNGU0lNX0NTQlI0CQkweDYwCQkvKiBDUzQgQmFzZSBBZGRyZXNzIChyL3cpICovCisjZGVmaW5lCU1DRlNJTV9DU09SNAkJMHg2NAkJLyogQ1M0IE9wdGlvbiAoci93KSAqLworI2RlZmluZQlNQ0ZTSU1fQ1NCUjUJCTB4NjgJCS8qIENTNSBCYXNlIEFkZHJlc3MgKHIvdykgKi8KKyNkZWZpbmUJTUNGU0lNX0NTT1I1CQkweDZjCQkvKiBDUzUgT3B0aW9uIChyL3cpICovCisjZGVmaW5lCU1DRlNJTV9DU0JSNgkJMHg3MAkJLyogQ1M2IEJhc2UgQWRkcmVzcyAoci93KSAqLworI2RlZmluZQlNQ0ZTSU1fQ1NPUjYJCTB4NzQJCS8qIENTNiBPcHRpb24gKHIvdykgKi8KKyNkZWZpbmUJTUNGU0lNX0NTQlI3CQkweDc4CQkvKiBDUzcgQmFzZSBBZGRyZXNzIChyL3cpICovCisjZGVmaW5lCU1DRlNJTV9DU09SNwkJMHg3YwkJLyogQ1M3IE9wdGlvbiAoci93KSAqLworCisjZGVmaW5lCU1DRlNJTV9TRENSCQkweDE4MAkJLyogU0RSQU0gQ29uZmlndXJhdGlvbiAoci93KSAqLworI2RlZmluZQlNQ0ZTSU1fU0RUUgkJMHgxODQJCS8qIFNEUkFNIFRpbWluZyAoci93KSAqLworI2RlZmluZQlNQ0ZTSU1fRENBUjAJCTB4NGMJCS8qIERSQU0gMCBBZGRyZXNzIHJlZyhyL3cpICovCisjZGVmaW5lCU1DRlNJTV9EQ01SMAkJMHg1MAkJLyogRFJBTSAwIE1hc2sgcmVnIChyL3cpICovCisjZGVmaW5lCU1DRlNJTV9EQ0NSMAkJMHg1NwkJLyogRFJBTSAwIENvbnRyb2wgcmVnIChyL3cpICovCisjZGVmaW5lCU1DRlNJTV9EQ0FSMQkJMHg1OAkJLyogRFJBTSAxIEFkZHJlc3MgcmVnIChyL3cpICovCisjZGVmaW5lCU1DRlNJTV9EQ01SMQkJMHg1YwkJLyogRFJBTSAxIE1hc2sgcmVnIChyL3cpICovCisjZGVmaW5lCU1DRlNJTV9EQ0NSMQkJMHg2MwkJLyogRFJBTSAxIENvbnRyb2wgcmVnIChyL3cpICovCisKKyNkZWZpbmUJTUNGU0lNX1BBQ05UCQkweDgwCQkvKiBQb3J0IEEgQ29udHJvbCAoci93KSAqLworI2RlZmluZQlNQ0ZTSU1fUEFERFIJCTB4ODQJCS8qIFBvcnQgQSBEaXJlY3Rpb24gKHIvdykgKi8KKyNkZWZpbmUJTUNGU0lNX1BBREFUCQkweDg2CQkvKiBQb3J0IEEgRGF0YSAoci93KSAqLworI2RlZmluZQlNQ0ZTSU1fUEJDTlQJCTB4ODgJCS8qIFBvcnQgQiBDb250cm9sIChyL3cpICovCisjZGVmaW5lCU1DRlNJTV9QQkREUgkJMHg4YwkJLyogUG9ydCBCIERpcmVjdGlvbiAoci93KSAqLworI2RlZmluZQlNQ0ZTSU1fUEJEQVQJCTB4OGUJCS8qIFBvcnQgQiBEYXRhIChyL3cpICovCisjZGVmaW5lCU1DRlNJTV9QQ0REUgkJMHg5NAkJLyogUG9ydCBDIERpcmVjdGlvbiAoci93KSAqLworI2RlZmluZQlNQ0ZTSU1fUENEQVQJCTB4OTYJCS8qIFBvcnQgQyBEYXRhIChyL3cpICovCisjZGVmaW5lCU1DRlNJTV9QRENOVAkJMHg5OAkJLyogUG9ydCBEIENvbnRyb2wgKHIvdykgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNlbmRpZgkvKiBtNTI3MnNpbV9oICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbTUyN3hzaW0uaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9tNTI3eHNpbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyODBkMDEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbTUyN3hzaW0uaApAQCAtMCwwICsxLDU4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCW01Mjd4c2ltLmggLS0gQ29sZEZpcmUgNTI3MC81MjcxIFN5c3RlbSBJbnRlZ3JhdGlvbiBNb2R1bGUgc3VwcG9ydC4KKyAqCisgKgkoQykgQ29weXJpZ2h0IDIwMDQsIEdyZWcgVW5nZXJlciAoZ2VyZ0BzbmFwZ2Vhci5jb20pCisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmCW01Mjd4c2ltX2gKKyNkZWZpbmUJbTUyN3hzaW1faAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworLyoKKyAqCURlZmluZSB0aGUgNTI3MC81MjcxIFNJTSByZWdpc3RlciBzZXQgYWRkcmVzc2VzLgorICovCisjZGVmaW5lCU1DRklDTV9JTlRDMAkJMHgwYzAwCQkvKiBCYXNlIGZvciBJbnRlcnJ1cHQgQ3RybCAwICovCisjZGVmaW5lCU1DRklDTV9JTlRDMQkJMHgwZDAwCQkvKiBCYXNlIGZvciBJbnRlcnJ1cHQgQ3RybCAxICovCisjZGVmaW5lCU1DRklOVENfSVBSSAkJMHgwMAkJLyogSW50ZXJydXB0IHBlbmRpbmcgMzItNjMgKi8KKyNkZWZpbmUJTUNGSU5UQ19JUFJMCQkweDA0CQkvKiBJbnRlcnJ1cHQgcGVuZGluZyAxLTMxICovCisjZGVmaW5lCU1DRklOVENfSU1SSAkJMHgwOAkJLyogSW50ZXJydXB0IG1hc2sgMzItNjMgKi8KKyNkZWZpbmUJTUNGSU5UQ19JTVJMCQkweDBjCQkvKiBJbnRlcnJ1cHQgbWFzayAxLTMxICovCisjZGVmaW5lCU1DRklOVENfSU5URlJDSAkJMHgxMAkJLyogSW50ZXJydXB0IGZvcmNlIDMyLTYzICovCisjZGVmaW5lCU1DRklOVENfSU5URlJDTAkJMHgxNAkJLyogSW50ZXJydXB0IGZvcmNlIDEtMzEgKi8KKyNkZWZpbmUJTUNGSU5UQ19JUkxSCQkweDE4CQkvKiAqLworI2RlZmluZQlNQ0ZJTlRDX0lBQ0tMCQkweDE5CQkvKiAqLworI2RlZmluZQlNQ0ZJTlRDX0lDUjAJCTB4NDAJCS8qIEJhc2UgSUNSIHJlZ2lzdGVyICovCisKKyNkZWZpbmUJTUNGSU5UX1ZFQ0JBU0UJCTY0CQkvKiBWZWN0b3IgYmFzZSBudW1iZXIgKi8KKyNkZWZpbmUJTUNGSU5UX1VBUlQwCQkxMwkJLyogSW50ZXJydXB0IG51bWJlciBmb3IgVUFSVDAgKi8KKyNkZWZpbmUJTUNGSU5UX1VBUlQxCQkxNAkJLyogSW50ZXJydXB0IG51bWJlciBmb3IgVUFSVDEgKi8KKyNkZWZpbmUJTUNGSU5UX1VBUlQyCQkxNQkJLyogSW50ZXJydXB0IG51bWJlciBmb3IgVUFSVDIgKi8KKyNkZWZpbmUJTUNGSU5UX1BJVDEJCTM2CQkvKiBJbnRlcnJ1cHQgbnVtYmVyIGZvciBQSVQxICovCisKKy8qCisgKglTRFJBTSBjb25maWd1cmF0aW9uIHJlZ2lzdGVycy4KKyAqLworI2lmZGVmIENPTkZJR19NNTI3MUVWQgorI2RlZmluZQlNQ0ZTSU1fRENSCQkweDQwCQkvKiBTRFJBTSBjb250cm9sICovCisjZGVmaW5lCU1DRlNJTV9EQUNSMAkJMHg0OAkJLyogU0RSQU0gYmFzZSBhZGRyZXNzIDAgKi8KKyNkZWZpbmUJTUNGU0lNX0RNUjAJCTB4NGMJCS8qIFNEUkFNIGFkZHJlc3MgbWFzayAwICovCisjZGVmaW5lCU1DRlNJTV9EQUNSMQkJMHg1MAkJLyogU0RSQU0gYmFzZSBhZGRyZXNzIDEgKi8KKyNkZWZpbmUJTUNGU0lNX0RNUjEJCTB4NTQJCS8qIFNEUkFNIGFkZHJlc3MgbWFzayAxICovCisjZWxzZQorI2RlZmluZQlNQ0ZTSU1fRE1SCQkweDQwCQkvKiBTRFJBTSBtb2RlICovCisjZGVmaW5lCU1DRlNJTV9EQ1IJCTB4NDQJCS8qIFNEUkFNIGNvbnRyb2wgKi8KKyNkZWZpbmUJTUNGU0lNX0RDRkcxCQkweDQ4CQkvKiBTRFJBTSBjb25maWd1cmF0aW9uIDEgKi8KKyNkZWZpbmUJTUNGU0lNX0RDRkcyCQkweDRjCQkvKiBTRFJBTSBjb25maWd1cmF0aW9uIDIgKi8KKyNkZWZpbmUJTUNGU0lNX0RCQVIwCQkweDUwCQkvKiBTRFJBTSBiYXNlIGFkZHJlc3MgMCAqLworI2RlZmluZQlNQ0ZTSU1fRE1SMAkJMHg1NAkJLyogU0RSQU0gYWRkcmVzcyBtYXNrIDAgKi8KKyNkZWZpbmUJTUNGU0lNX0RCQVIxCQkweDU4CQkvKiBTRFJBTSBiYXNlIGFkZHJlc3MgMSAqLworI2RlZmluZQlNQ0ZTSU1fRE1SMQkJMHg1YwkJLyogU0RSQU0gYWRkcmVzcyBtYXNrIDEgKi8KKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNlbmRpZgkvKiBtNTI3eHNpbV9oICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbTUyOHhzaW0uaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9tNTI4eHNpbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3MTk5M2EKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbTUyOHhzaW0uaApAQCAtMCwwICsxLDQ1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCW01Mjh4c2ltLmggLS0gQ29sZEZpcmUgNTI4MC81MjgyIFN5c3RlbSBJbnRlZ3JhdGlvbiBNb2R1bGUgc3VwcG9ydC4KKyAqCisgKgkoQykgQ29weXJpZ2h0IDIwMDMsIEdyZWcgVW5nZXJlciAoZ2VyZ0BzbmFwZ2Vhci5jb20pCisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmCW01Mjh4c2ltX2gKKyNkZWZpbmUJbTUyOHhzaW1faAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworLyoKKyAqCURlZmluZSB0aGUgNTI4MC81MjgyIFNJTSByZWdpc3RlciBzZXQgYWRkcmVzc2VzLgorICovCisjZGVmaW5lCU1DRklDTV9JTlRDMAkJMHgwYzAwCQkvKiBCYXNlIGZvciBJbnRlcnJ1cHQgQ3RybCAwICovCisjZGVmaW5lCU1DRklDTV9JTlRDMQkJMHgwZDAwCQkvKiBCYXNlIGZvciBJbnRlcnJ1cHQgQ3RybCAwICovCisjZGVmaW5lCU1DRklOVENfSVBSSAkJMHgwMAkJLyogSW50ZXJydXB0IHBlbmRpbmcgMzItNjMgKi8KKyNkZWZpbmUJTUNGSU5UQ19JUFJMCQkweDA0CQkvKiBJbnRlcnJ1cHQgcGVuZGluZyAxLTMxICovCisjZGVmaW5lCU1DRklOVENfSU1SSAkJMHgwOAkJLyogSW50ZXJydXB0IG1hc2sgMzItNjMgKi8KKyNkZWZpbmUJTUNGSU5UQ19JTVJMCQkweDBjCQkvKiBJbnRlcnJ1cHQgbWFzayAxLTMxICovCisjZGVmaW5lCU1DRklOVENfSU5URlJDSAkJMHgxMAkJLyogSW50ZXJydXB0IGZvcmNlIDMyLTYzICovCisjZGVmaW5lCU1DRklOVENfSU5URlJDTAkJMHgxNAkJLyogSW50ZXJydXB0IGZvcmNlIDEtMzEgKi8KKyNkZWZpbmUJTUNGSU5UQ19JUkxSCQkweDE4CQkvKiAqLworI2RlZmluZQlNQ0ZJTlRDX0lBQ0tMCQkweDE5CQkvKiAqLworI2RlZmluZQlNQ0ZJTlRDX0lDUjAJCTB4NDAJCS8qIEJhc2UgSUNSIHJlZ2lzdGVyICovCisKKyNkZWZpbmUJTUNGSU5UX1ZFQ0JBU0UJCTY0CQkvKiBWZWN0b3IgYmFzZSBudW1iZXIgKi8KKyNkZWZpbmUJTUNGSU5UX1VBUlQwCQkxMwkJLyogSW50ZXJydXB0IG51bWJlciBmb3IgVUFSVDAgKi8KKyNkZWZpbmUJTUNGSU5UX1BJVDEJCTU1CQkvKiBJbnRlcnJ1cHQgbnVtYmVyIGZvciBQSVQxICovCisKKy8qCisgKglTRFJBTSBjb25maWd1cmF0aW9uIHJlZ2lzdGVycy4KKyAqLworI2RlZmluZQlNQ0ZTSU1fRENSCQkweDQ0CQkvKiBTRFJBTSBjb250cm9sICovCisjZGVmaW5lCU1DRlNJTV9EQUNSMAkJMHg0OAkJLyogU0RSQU0gYmFzZSBhZGRyZXNzIDAgKi8KKyNkZWZpbmUJTUNGU0lNX0RNUjAJCTB4NGMJCS8qIFNEUkFNIGFkZHJlc3MgbWFzayAwICovCisjZGVmaW5lCU1DRlNJTV9EQUNSMQkJMHg1MAkJLyogU0RSQU0gYmFzZSBhZGRyZXNzIDEgKi8KKyNkZWZpbmUJTUNGU0lNX0RNUjEJCTB4NTQJCS8qIFNEUkFNIGFkZHJlc3MgbWFzayAxICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2VuZGlmCS8qIG01Mjh4c2ltX2ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9tNTMwN3NpbS5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L201MzA3c2ltLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNjZTU1MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9tNTMwN3NpbS5oCkBAIC0wLDAgKzEsMTgxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCW01MzA3c2ltLmggLS0gQ29sZEZpcmUgNTMwNyBTeXN0ZW0gSW50ZWdyYXRpb24gTW9kdWxlIHN1cHBvcnQuCisgKgorICoJKEMpIENvcHlyaWdodCAxOTk5LCAgTW9yZXRvbiBCYXkgVmVudHVyZXMgUHR5IEx0ZC4KKyAqCShDKSBDb3B5cmlnaHQgMTk5OSwgIExpbmVvICh3d3cubGluZW8uY29tKQorICoKKyAqICAgICAgTW9kaWZpZWQgYnkgRGF2aWQgVy4gTWlsbGVyIGZvciB0aGUgTUNGNTMwNyBFdmFsIEJvYXJkLgorICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZgltNTMwN3NpbV9oCisjZGVmaW5lCW01MzA3c2ltX2gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICoJRGVmaW5lIHRoZSA1MzA3IFNJTSByZWdpc3RlciBzZXQgYWRkcmVzc2VzLgorICovCisjZGVmaW5lCU1DRlNJTV9SU1IJCTB4MDAJCS8qIFJlc2V0IFN0YXR1cyByZWcgKHIvdykgKi8KKyNkZWZpbmUJTUNGU0lNX1NZUENSCQkweDAxCQkvKiBTeXN0ZW0gUHJvdGVjdGlvbiByZWcgKHIvdykqLworI2RlZmluZQlNQ0ZTSU1fU1dJVlIJCTB4MDIJCS8qIFNXIFdhdGNoZG9nIGludHIgcmVnIChyL3cpICovCisjZGVmaW5lCU1DRlNJTV9TV1NSCQkweDAzCQkvKiBTVyBXYXRjaGRvZyBzZXJ2aWNlIChyL3cpICovCisjZGVmaW5lCU1DRlNJTV9QQVIJCTB4MDQJCS8qIFBpbiBBc3NpZ25tZW50IHJlZyAoci93KSAqLworI2RlZmluZQlNQ0ZTSU1fSVJRUEFSCQkweDA2CQkvKiBJbnRlcnJ1cHQgQXNzaWdubWVudCByZWcgKHIvdykgKi8KKyNkZWZpbmUJTUNGU0lNX1BMTENSCQkweDA4CQkvKiBQTEwgQ29udHJvbGwgUmVnKi8KKyNkZWZpbmUJTUNGU0lNX01QQVJLCQkweDBDCQkvKiBCVVMgTWFzdGVyIENvbnRyb2wgUmVnKi8KKyNkZWZpbmUJTUNGU0lNX0lQUgkJMHg0MAkJLyogSW50ZXJydXB0IFBlbmQgcmVnIChyL3cpICovCisjZGVmaW5lCU1DRlNJTV9JTVIJCTB4NDQJCS8qIEludGVycnVwdCBNYXNrIHJlZyAoci93KSAqLworI2RlZmluZQlNQ0ZTSU1fQVZSCQkweDRiCQkvKiBBdXRvdmVjdG9yIEN0cmwgcmVnIChyL3cpICovCisjZGVmaW5lCU1DRlNJTV9JQ1IwCQkweDRjCQkvKiBJbnRyIEN0cmwgcmVnIDAgKHIvdykgKi8KKyNkZWZpbmUJTUNGU0lNX0lDUjEJCTB4NGQJCS8qIEludHIgQ3RybCByZWcgMSAoci93KSAqLworI2RlZmluZQlNQ0ZTSU1fSUNSMgkJMHg0ZQkJLyogSW50ciBDdHJsIHJlZyAyIChyL3cpICovCisjZGVmaW5lCU1DRlNJTV9JQ1IzCQkweDRmCQkvKiBJbnRyIEN0cmwgcmVnIDMgKHIvdykgKi8KKyNkZWZpbmUJTUNGU0lNX0lDUjQJCTB4NTAJCS8qIEludHIgQ3RybCByZWcgNCAoci93KSAqLworI2RlZmluZQlNQ0ZTSU1fSUNSNQkJMHg1MQkJLyogSW50ciBDdHJsIHJlZyA1IChyL3cpICovCisjZGVmaW5lCU1DRlNJTV9JQ1I2CQkweDUyCQkvKiBJbnRyIEN0cmwgcmVnIDYgKHIvdykgKi8KKyNkZWZpbmUJTUNGU0lNX0lDUjcJCTB4NTMJCS8qIEludHIgQ3RybCByZWcgNyAoci93KSAqLworI2RlZmluZQlNQ0ZTSU1fSUNSOAkJMHg1NAkJLyogSW50ciBDdHJsIHJlZyA4IChyL3cpICovCisjZGVmaW5lCU1DRlNJTV9JQ1I5CQkweDU1CQkvKiBJbnRyIEN0cmwgcmVnIDkgKHIvdykgKi8KKyNkZWZpbmUJTUNGU0lNX0lDUjEwCQkweDU2CQkvKiBJbnRyIEN0cmwgcmVnIDEwIChyL3cpICovCisjZGVmaW5lCU1DRlNJTV9JQ1IxMQkJMHg1NwkJLyogSW50ciBDdHJsIHJlZyAxMSAoci93KSAqLworCisjZGVmaW5lIE1DRlNJTV9DU0FSMAkJMHg4MAkJLyogQ1MgMCBBZGRyZXNzIDAgcmVnIChyL3cpICovCisjZGVmaW5lIE1DRlNJTV9DU01SMAkJMHg4NAkJLyogQ1MgMCBNYXNrIDAgcmVnIChyL3cpICovCisjZGVmaW5lIE1DRlNJTV9DU0NSMAkJMHg4YQkJLyogQ1MgMCBDb250cm9sIHJlZyAoci93KSAqLworI2RlZmluZSBNQ0ZTSU1fQ1NBUjEJCTB4OGMJCS8qIENTIDEgQWRkcmVzcyByZWcgKHIvdykgKi8KKyNkZWZpbmUgTUNGU0lNX0NTTVIxCQkweDkwCQkvKiBDUyAxIE1hc2sgcmVnIChyL3cpICovCisjZGVmaW5lIE1DRlNJTV9DU0NSMQkJMHg5NgkJLyogQ1MgMSBDb250cm9sIHJlZyAoci93KSAqLworCisjaWZkZWYgQ09ORklHX09MRE1BU0sKKyNkZWZpbmUgTUNGU0lNX0NTQkFSCQkweDk4CQkvKiBDUyBCYXNlIEFkZHJlc3MgcmVnIChyL3cpICovCisjZGVmaW5lIE1DRlNJTV9DU0JBTVIJCTB4OWMJCS8qIENTIEJhc2UgTWFzayByZWcgKHIvdykgKi8KKyNkZWZpbmUgTUNGU0lNX0NTTVIyCQkweDllCQkvKiBDUyAyIE1hc2sgcmVnIChyL3cpICovCisjZGVmaW5lIE1DRlNJTV9DU0NSMgkJMHhhMgkJLyogQ1MgMiBDb250cm9sIHJlZyAoci93KSAqLworI2RlZmluZSBNQ0ZTSU1fQ1NNUjMJCTB4YWEJCS8qIENTIDMgTWFzayByZWcgKHIvdykgKi8KKyNkZWZpbmUgTUNGU0lNX0NTQ1IzCQkweGFlCQkvKiBDUyAzIENvbnRyb2wgcmVnIChyL3cpICovCisjZGVmaW5lIE1DRlNJTV9DU01SNAkJMHhiNgkJLyogQ1MgNCBNYXNrIHJlZyAoci93KSAqLworI2RlZmluZSBNQ0ZTSU1fQ1NDUjQJCTB4YmEJCS8qIENTIDQgQ29udHJvbCByZWcgKHIvdykgKi8KKyNkZWZpbmUgTUNGU0lNX0NTTVI1CQkweGMyCQkvKiBDUyA1IE1hc2sgcmVnIChyL3cpICovCisjZGVmaW5lIE1DRlNJTV9DU0NSNQkJMHhjNgkJLyogQ1MgNSBDb250cm9sIHJlZyAoci93KSAqLworI2RlZmluZSBNQ0ZTSU1fQ1NNUjYJCTB4Y2UJCS8qIENTIDYgTWFzayByZWcgKHIvdykgKi8KKyNkZWZpbmUgTUNGU0lNX0NTQ1I2CQkweGQyCQkvKiBDUyA2IENvbnRyb2wgcmVnIChyL3cpICovCisjZGVmaW5lIE1DRlNJTV9DU01SNwkJMHhkYQkJLyogQ1MgNyBNYXNrIHJlZyAoci93KSAqLworI2RlZmluZSBNQ0ZTSU1fQ1NDUjcJCTB4ZGUJCS8qIENTIDcgQ29udHJvbCByZWcgKHIvdykgKi8KKyNlbHNlCisjZGVmaW5lIE1DRlNJTV9DU0FSMgkJMHg5OAkJLyogQ1MgMiBBZHJlc3MgcmVnIChyL3cpICovCisjZGVmaW5lIE1DRlNJTV9DU01SMgkJMHg5YwkJLyogQ1MgMiBNYXNrIHJlZyAoci93KSAqLworI2RlZmluZSBNQ0ZTSU1fQ1NDUjIJCTB4YTIJCS8qIENTIDIgQ29udHJvbCByZWcgKHIvdykgKi8KKyNkZWZpbmUgTUNGU0lNX0NTQVIzCQkweGE0CQkvKiBDUyAzIEFkcmVzcyByZWcgKHIvdykgKi8KKyNkZWZpbmUgTUNGU0lNX0NTTVIzCQkweGE4CQkvKiBDUyAzIE1hc2sgcmVnIChyL3cpICovCisjZGVmaW5lIE1DRlNJTV9DU0NSMwkJMHhhZQkJLyogQ1MgMyBDb250cm9sIHJlZyAoci93KSAqLworI2RlZmluZSBNQ0ZTSU1fQ1NBUjQJCTB4YjAJCS8qIENTIDQgQWRyZXNzIHJlZyAoci93KSAqLworI2RlZmluZSBNQ0ZTSU1fQ1NNUjQJCTB4YjQJCS8qIENTIDQgTWFzayByZWcgKHIvdykgKi8KKyNkZWZpbmUgTUNGU0lNX0NTQ1I0CQkweGJhCQkvKiBDUyA0IENvbnRyb2wgcmVnIChyL3cpICovCisjZGVmaW5lIE1DRlNJTV9DU0FSNQkJMHhiYwkJLyogQ1MgNSBBZHJlc3MgcmVnIChyL3cpICovCisjZGVmaW5lIE1DRlNJTV9DU01SNQkJMHhjMAkJLyogQ1MgNSBNYXNrIHJlZyAoci93KSAqLworI2RlZmluZSBNQ0ZTSU1fQ1NDUjUJCTB4YzYJCS8qIENTIDUgQ29udHJvbCByZWcgKHIvdykgKi8KKyNkZWZpbmUgTUNGU0lNX0NTQVI2CQkweGM4CQkvKiBDUyA2IEFkcmVzcyByZWcgKHIvdykgKi8KKyNkZWZpbmUgTUNGU0lNX0NTTVI2CQkweGNjCQkvKiBDUyA2IE1hc2sgcmVnIChyL3cpICovCisjZGVmaW5lIE1DRlNJTV9DU0NSNgkJMHhkMgkJLyogQ1MgNiBDb250cm9sIHJlZyAoci93KSAqLworI2RlZmluZSBNQ0ZTSU1fQ1NBUjcJCTB4ZDQJCS8qIENTIDcgQWRyZXNzIHJlZyAoci93KSAqLworI2RlZmluZSBNQ0ZTSU1fQ1NNUjcJCTB4ZDgJCS8qIENTIDcgTWFzayByZWcgKHIvdykgKi8KKyNkZWZpbmUgTUNGU0lNX0NTQ1I3CQkweGRlCQkvKiBDUyA3IENvbnRyb2wgcmVnIChyL3cpICovCisjZW5kaWYgLyogQ09ORklHX09MRE1BU0sgKi8KKworI2RlZmluZSBNQ0ZTSU1fRENSCQkweDEwMAkJLyogRFJBTSBDb250cm9sIHJlZyAoci93KSAqLworI2RlZmluZSBNQ0ZTSU1fREFDUjAJCTB4MTA4CQkvKiBEUkFNIDAgQWRkciBhbmQgQ3RybCAoci93KSAqLworI2RlZmluZSBNQ0ZTSU1fRE1SMAkJMHgxMGMJCS8qIERSQU0gMCBNYXNrIHJlZyAoci93KSAqLworI2RlZmluZSBNQ0ZTSU1fREFDUjEJCTB4MTEwCQkvKiBEUkFNIDEgQWRkciBhbmQgQ3RybCAoci93KSAqLworI2RlZmluZSBNQ0ZTSU1fRE1SMQkJMHgxMTQJCS8qIERSQU0gMSBNYXNrIHJlZyAoci93KSAqLworCisjZGVmaW5lCU1DRlNJTV9QQUREUgkJMHgyNDQJCS8qIFBhcmFsbGVsIERpcmVjdGlvbiAoci93KSAqLworI2RlZmluZQlNQ0ZTSU1fUEFEQVQJCTB4MjQ4CQkvKiBQYXJhbGxlbCBEYXRhIChyL3cpICovCisKKworLyogRGVmaW5pdGlvbiBvZmZzZXQgYWRkcmVzcyBmb3IgQ1MyLTcgIC0tIG9sZCBtYXNrIDUzMDcgKi8KKworI2RlZmluZQlNQ0Y1MzA3X0NTMgkJKDB4NDAwMDAwKQorI2RlZmluZQlNQ0Y1MzA3X0NTMwkJKDB4NjAwMDAwKQorI2RlZmluZQlNQ0Y1MzA3X0NTNAkJKDB4ODAwMDAwKQorI2RlZmluZQlNQ0Y1MzA3X0NTNQkJKDB4QTAwMDAwKQorI2RlZmluZQlNQ0Y1MzA3X0NTNgkJKDB4QzAwMDAwKQorI2RlZmluZQlNQ0Y1MzA3X0NTNwkJKDB4RTAwMDAwKQorCisKKy8qCisgKglTb21lIHN5bWJvbCBkZWZpbmVzIGZvciB0aGUgYWJvdmUuLi4KKyAqLworI2RlZmluZQlNQ0ZTSU1fU1dESUNSCQlNQ0ZTSU1fSUNSMAkvKiBXYXRjaGRvZyB0aW1lciBJQ1IgKi8KKyNkZWZpbmUJTUNGU0lNX1RJTUVSMUlDUglNQ0ZTSU1fSUNSMQkvKiBUaW1lciAxIElDUiAqLworI2RlZmluZQlNQ0ZTSU1fVElNRVIySUNSCU1DRlNJTV9JQ1IyCS8qIFRpbWVyIDIgSUNSICovCisjZGVmaW5lCU1DRlNJTV9VQVJUMUlDUgkJTUNGU0lNX0lDUjQJLyogVUFSVCAxIElDUiAqLworI2RlZmluZQlNQ0ZTSU1fVUFSVDJJQ1IJCU1DRlNJTV9JQ1I1CS8qIFVBUlQgMiBJQ1IgKi8KKyNkZWZpbmUJTUNGU0lNX0RNQTBJQ1IJCU1DRlNJTV9JQ1I2CS8qIERNQSAwIElDUiAqLworI2RlZmluZQlNQ0ZTSU1fRE1BMUlDUgkJTUNGU0lNX0lDUjcJLyogRE1BIDEgSUNSICovCisjZGVmaW5lCU1DRlNJTV9ETUEySUNSCQlNQ0ZTSU1fSUNSOAkvKiBETUEgMiBJQ1IgKi8KKyNkZWZpbmUJTUNGU0lNX0RNQTNJQ1IJCU1DRlNJTV9JQ1I5CS8qIERNQSAzIElDUiAqLworCisjaWYgZGVmaW5lZChDT05GSUdfTTUzMDcpCisjZGVmaW5lCU1DRlNJTV9JTVJfTUFTS0FMTAkweDNmZmZlCQkvKiBBbGwgU0lNIGludHIgc291cmNlcyAqLworI2VuZGlmCisKKy8qCisgKglNYWNybyB0byBzZXQgSU1SIHJlZ2lzdGVyLiBJdCBpcyAzMiBiaXRzIG9uIHRoZSA1MzA3LgorICovCisjZGVmaW5lCW1jZl9nZXRpbXIoKQkJXAorCSooKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikgKE1DRl9NQkFSICsgTUNGU0lNX0lNUikpCisKKyNkZWZpbmUJbWNmX3NldGltcihpbXIpCQlcCisJKigodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSAoTUNGX01CQVIgKyBNQ0ZTSU1fSU1SKSkgPSAoaW1yKTsKKworI2RlZmluZQltY2ZfZ2V0aXByKCkJCVwKKwkqKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopIChNQ0ZfTUJBUiArIE1DRlNJTV9JUFIpKQorCisKKy8qCisgKglTb21lIHN5bWJvbCBkZWZpbmVzIGZvciB0aGUgUGFyYWxsZWwgUG9ydCBQaW4gQXNzaWdubWVudCBSZWdpc3RlcgorICovCisjZGVmaW5lIE1DRlNJTV9QQVJfRFJFUTAgICAgICAgIDB4NDAgICAgICAgICAgICAvKiBTZXQgdG8gc2VsZWN0IERSRVEwIGlucHV0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciB0byBzZWxlY3QgcGFyIEkvTyAqLworI2RlZmluZSBNQ0ZTSU1fUEFSX0RSRVExICAgICAgICAweDIwICAgICAgICAgICAgLyogU2VsZWN0IERSRVExIGlucHV0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciB0byBzZWxlY3QgcGFyIEkvTyAqLworCisvKgorICogICAgICAgRGVmaW5lcyBmb3IgdGhlIElSUVBBUiBSZWdpc3RlcgorICovCisjZGVmaW5lIElSUTVfTEVWRUw0CTB4ODAKKyNkZWZpbmUgSVJRM19MRVZFTDYJMHg0MAorI2RlZmluZSBJUlExX0xFVkVMMgkweDIwCisKKworLyoKKyAqCURlZmluZSB0aGUgQ2FjaGUgcmVnaXN0ZXIgZmxhZ3MuCisgKi8KKyNkZWZpbmUJQ0FDUl9FQwkJCSgxPDwzMSkKKyNkZWZpbmUJQ0FDUl9FU0IJCSgxPDwyOSkKKyNkZWZpbmUJQ0FDUl9EUEkJCSgxPDwyOCkKKyNkZWZpbmUJQ0FDUl9ITENLCQkoMTw8MjcpCisjZGVmaW5lCUNBQ1JfQ0lOVkEJCSgxPDwyNCkKKyNkZWZpbmUJQ0FDUl9ETkZCCQkoMTw8MTApCisjZGVmaW5lCUNBQ1JfRENNX1dUSFJVCQkoMDw8OCkKKyNkZWZpbmUJQ0FDUl9EQ01fV0JBQ0sJCSgxPDw4KQorI2RlZmluZQlDQUNSX0RDTV9PRkZfUFJFCSgyPDw4KQorI2RlZmluZQlDQUNSX0RDTV9PRkZfSU1QCSgzPDw4KQorI2RlZmluZQlDQUNSX0RXCQkJKDE8PDUpCisKKyNkZWZpbmUJQUNSX0JBU0VfUE9TCQkyNAorI2RlZmluZQlBQ1JfTUFTS19QT1MJCTE2CisjZGVmaW5lCUFDUl9FTkFCTEUJCSgxPDwxNSkKKyNkZWZpbmUJQUNSX1VTRVIJCSgwPDwxMykKKyNkZWZpbmUJQUNSX1NVUEVSCQkoMTw8MTMpCisjZGVmaW5lCUFDUl9BTlkJCQkoMjw8MTMpCisjZGVmaW5lCUFDUl9DTV9XVEhSVQkJKDA8PDUpCisjZGVmaW5lCUFDUl9DTV9XQkFDSwkJKDE8PDUpCisjZGVmaW5lCUFDUl9DTV9PRkZfUFJFCQkoMjw8NSkKKyNkZWZpbmUJQUNSX0NNX09GRl9JTVAJCSgzPDw1KQorI2RlZmluZQlBQ1JfV1BST1RFQ1QJCSgxPDwyKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNlbmRpZgkvKiBtNTMwN3NpbV9oICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbTU0MDdzaW0uaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9tNTQwN3NpbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ZGNkYWMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbTU0MDdzaW0uaApAQCAtMCwwICsxLDE1NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKgltNTQwN3NpbS5oIC0tIENvbGRGaXJlIDU0MDcgU3lzdGVtIEludGVncmF0aW9uIE1vZHVsZSBzdXBwb3J0LgorICoKKyAqCShDKSBDb3B5cmlnaHQgMjAwMCwgIExpbmVvICh3d3cubGluZW8uY29tKQorICoJKEMpIENvcHlyaWdodCAxOTk5LCAgTW9yZXRvbiBCYXkgVmVudHVyZXMgUHR5IEx0ZC4KKyAqCisgKiAgICAgIE1vZGlmaWVkIGJ5IERhdmlkIFcuIE1pbGxlciBmb3IgdGhlIE1DRjUzMDcgRXZhbCBCb2FyZC4KKyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYJbTU0MDdzaW1faAorI2RlZmluZQltNTQwN3NpbV9oCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCURlZmluZSB0aGUgNTQwNyBTSU0gcmVnaXN0ZXIgc2V0IGFkZHJlc3Nlcy4KKyAqLworI2RlZmluZQlNQ0ZTSU1fUlNSCQkweDAwCQkvKiBSZXNldCBTdGF0dXMgcmVnIChyL3cpICovCisjZGVmaW5lCU1DRlNJTV9TWVBDUgkJMHgwMQkJLyogU3lzdGVtIFByb3RlY3Rpb24gcmVnIChyL3cpKi8KKyNkZWZpbmUJTUNGU0lNX1NXSVZSCQkweDAyCQkvKiBTVyBXYXRjaGRvZyBpbnRyIHJlZyAoci93KSAqLworI2RlZmluZQlNQ0ZTSU1fU1dTUgkJMHgwMwkJLyogU1cgV2F0Y2hkb2cgc2VydmljZSAoci93KSAqLworI2RlZmluZQlNQ0ZTSU1fUEFSCQkweDA0CQkvKiBQaW4gQXNzaWdubWVudCByZWcgKHIvdykgKi8KKyNkZWZpbmUJTUNGU0lNX0lSUVBBUgkJMHgwNgkJLyogSW50ZXJydXB0IEFzc2lnbm1lbnQgcmVnIChyL3cpICovCisjZGVmaW5lCU1DRlNJTV9QTExDUgkJMHgwOAkJLyogUExMIENvbnRyb2xsIFJlZyovCisjZGVmaW5lCU1DRlNJTV9NUEFSSwkJMHgwQwkJLyogQlVTIE1hc3RlciBDb250cm9sIFJlZyovCisjZGVmaW5lCU1DRlNJTV9JUFIJCTB4NDAJCS8qIEludGVycnVwdCBQZW5kIHJlZyAoci93KSAqLworI2RlZmluZQlNQ0ZTSU1fSU1SCQkweDQ0CQkvKiBJbnRlcnJ1cHQgTWFzayByZWcgKHIvdykgKi8KKyNkZWZpbmUJTUNGU0lNX0FWUgkJMHg0YgkJLyogQXV0b3ZlY3RvciBDdHJsIHJlZyAoci93KSAqLworI2RlZmluZQlNQ0ZTSU1fSUNSMAkJMHg0YwkJLyogSW50ciBDdHJsIHJlZyAwIChyL3cpICovCisjZGVmaW5lCU1DRlNJTV9JQ1IxCQkweDRkCQkvKiBJbnRyIEN0cmwgcmVnIDEgKHIvdykgKi8KKyNkZWZpbmUJTUNGU0lNX0lDUjIJCTB4NGUJCS8qIEludHIgQ3RybCByZWcgMiAoci93KSAqLworI2RlZmluZQlNQ0ZTSU1fSUNSMwkJMHg0ZgkJLyogSW50ciBDdHJsIHJlZyAzIChyL3cpICovCisjZGVmaW5lCU1DRlNJTV9JQ1I0CQkweDUwCQkvKiBJbnRyIEN0cmwgcmVnIDQgKHIvdykgKi8KKyNkZWZpbmUJTUNGU0lNX0lDUjUJCTB4NTEJCS8qIEludHIgQ3RybCByZWcgNSAoci93KSAqLworI2RlZmluZQlNQ0ZTSU1fSUNSNgkJMHg1MgkJLyogSW50ciBDdHJsIHJlZyA2IChyL3cpICovCisjZGVmaW5lCU1DRlNJTV9JQ1I3CQkweDUzCQkvKiBJbnRyIEN0cmwgcmVnIDcgKHIvdykgKi8KKyNkZWZpbmUJTUNGU0lNX0lDUjgJCTB4NTQJCS8qIEludHIgQ3RybCByZWcgOCAoci93KSAqLworI2RlZmluZQlNQ0ZTSU1fSUNSOQkJMHg1NQkJLyogSW50ciBDdHJsIHJlZyA5IChyL3cpICovCisjZGVmaW5lCU1DRlNJTV9JQ1IxMAkJMHg1NgkJLyogSW50ciBDdHJsIHJlZyAxMCAoci93KSAqLworI2RlZmluZQlNQ0ZTSU1fSUNSMTEJCTB4NTcJCS8qIEludHIgQ3RybCByZWcgMTEgKHIvdykgKi8KKworI2RlZmluZSBNQ0ZTSU1fQ1NBUjAJCTB4ODAJCS8qIENTIDAgQWRkcmVzcyAwIHJlZyAoci93KSAqLworI2RlZmluZSBNQ0ZTSU1fQ1NNUjAJCTB4ODQJCS8qIENTIDAgTWFzayAwIHJlZyAoci93KSAqLworI2RlZmluZSBNQ0ZTSU1fQ1NDUjAJCTB4OGEJCS8qIENTIDAgQ29udHJvbCByZWcgKHIvdykgKi8KKyNkZWZpbmUgTUNGU0lNX0NTQVIxCQkweDhjCQkvKiBDUyAxIEFkZHJlc3MgcmVnIChyL3cpICovCisjZGVmaW5lIE1DRlNJTV9DU01SMQkJMHg5MAkJLyogQ1MgMSBNYXNrIHJlZyAoci93KSAqLworI2RlZmluZSBNQ0ZTSU1fQ1NDUjEJCTB4OTYJCS8qIENTIDEgQ29udHJvbCByZWcgKHIvdykgKi8KKworI2RlZmluZSBNQ0ZTSU1fQ1NBUjIJCTB4OTgJCS8qIENTIDIgQWRyZXNzIHJlZyAoci93KSAqLworI2RlZmluZSBNQ0ZTSU1fQ1NNUjIJCTB4OWMJCS8qIENTIDIgTWFzayByZWcgKHIvdykgKi8KKyNkZWZpbmUgTUNGU0lNX0NTQ1IyCQkweGEyCQkvKiBDUyAyIENvbnRyb2wgcmVnIChyL3cpICovCisjZGVmaW5lIE1DRlNJTV9DU0FSMwkJMHhhNAkJLyogQ1MgMyBBZHJlc3MgcmVnIChyL3cpICovCisjZGVmaW5lIE1DRlNJTV9DU01SMwkJMHhhOAkJLyogQ1MgMyBNYXNrIHJlZyAoci93KSAqLworI2RlZmluZSBNQ0ZTSU1fQ1NDUjMJCTB4YWUJCS8qIENTIDMgQ29udHJvbCByZWcgKHIvdykgKi8KKyNkZWZpbmUgTUNGU0lNX0NTQVI0CQkweGIwCQkvKiBDUyA0IEFkcmVzcyByZWcgKHIvdykgKi8KKyNkZWZpbmUgTUNGU0lNX0NTTVI0CQkweGI0CQkvKiBDUyA0IE1hc2sgcmVnIChyL3cpICovCisjZGVmaW5lIE1DRlNJTV9DU0NSNAkJMHhiYQkJLyogQ1MgNCBDb250cm9sIHJlZyAoci93KSAqLworI2RlZmluZSBNQ0ZTSU1fQ1NBUjUJCTB4YmMJCS8qIENTIDUgQWRyZXNzIHJlZyAoci93KSAqLworI2RlZmluZSBNQ0ZTSU1fQ1NNUjUJCTB4YzAJCS8qIENTIDUgTWFzayByZWcgKHIvdykgKi8KKyNkZWZpbmUgTUNGU0lNX0NTQ1I1CQkweGM2CQkvKiBDUyA1IENvbnRyb2wgcmVnIChyL3cpICovCisjZGVmaW5lIE1DRlNJTV9DU0FSNgkJMHhjOAkJLyogQ1MgNiBBZHJlc3MgcmVnIChyL3cpICovCisjZGVmaW5lIE1DRlNJTV9DU01SNgkJMHhjYwkJLyogQ1MgNiBNYXNrIHJlZyAoci93KSAqLworI2RlZmluZSBNQ0ZTSU1fQ1NDUjYJCTB4ZDIJCS8qIENTIDYgQ29udHJvbCByZWcgKHIvdykgKi8KKyNkZWZpbmUgTUNGU0lNX0NTQVI3CQkweGQ0CQkvKiBDUyA3IEFkcmVzcyByZWcgKHIvdykgKi8KKyNkZWZpbmUgTUNGU0lNX0NTTVI3CQkweGQ4CQkvKiBDUyA3IE1hc2sgcmVnIChyL3cpICovCisjZGVmaW5lIE1DRlNJTV9DU0NSNwkJMHhkZQkJLyogQ1MgNyBDb250cm9sIHJlZyAoci93KSAqLworCisjZGVmaW5lIE1DRlNJTV9EQ1IJCTB4MTAwCQkvKiBEUkFNIENvbnRyb2wgcmVnIChyL3cpICovCisjZGVmaW5lIE1DRlNJTV9EQUNSMAkJMHgxMDgJCS8qIERSQU0gMCBBZGRyIGFuZCBDdHJsIChyL3cpICovCisjZGVmaW5lIE1DRlNJTV9ETVIwCQkweDEwYwkJLyogRFJBTSAwIE1hc2sgcmVnIChyL3cpICovCisjZGVmaW5lIE1DRlNJTV9EQUNSMQkJMHgxMTAJCS8qIERSQU0gMSBBZGRyIGFuZCBDdHJsIChyL3cpICovCisjZGVmaW5lIE1DRlNJTV9ETVIxCQkweDExNAkJLyogRFJBTSAxIE1hc2sgcmVnIChyL3cpICovCisKKyNkZWZpbmUJTUNGU0lNX1BBRERSCQkweDI0NAkJLyogUGFyYWxsZWwgRGlyZWN0aW9uIChyL3cpICovCisjZGVmaW5lCU1DRlNJTV9QQURBVAkJMHgyNDgJCS8qIFBhcmFsbGVsIERhdGEgKHIvdykgKi8KKworCisvKgorICoJU29tZSBzeW1ib2wgZGVmaW5lcyBmb3IgdGhlIGFib3ZlLi4uCisgKi8KKyNkZWZpbmUJTUNGU0lNX1NXRElDUgkJTUNGU0lNX0lDUjAJLyogV2F0Y2hkb2cgdGltZXIgSUNSICovCisjZGVmaW5lCU1DRlNJTV9USU1FUjFJQ1IJTUNGU0lNX0lDUjEJLyogVGltZXIgMSBJQ1IgKi8KKyNkZWZpbmUJTUNGU0lNX1RJTUVSMklDUglNQ0ZTSU1fSUNSMgkvKiBUaW1lciAyIElDUiAqLworI2RlZmluZQlNQ0ZTSU1fVUFSVDFJQ1IJCU1DRlNJTV9JQ1I0CS8qIFVBUlQgMSBJQ1IgKi8KKyNkZWZpbmUJTUNGU0lNX1VBUlQySUNSCQlNQ0ZTSU1fSUNSNQkvKiBVQVJUIDIgSUNSICovCisjZGVmaW5lCU1DRlNJTV9ETUEwSUNSCQlNQ0ZTSU1fSUNSNgkvKiBETUEgMCBJQ1IgKi8KKyNkZWZpbmUJTUNGU0lNX0RNQTFJQ1IJCU1DRlNJTV9JQ1I3CS8qIERNQSAxIElDUiAqLworI2RlZmluZQlNQ0ZTSU1fRE1BMklDUgkJTUNGU0lNX0lDUjgJLyogRE1BIDIgSUNSICovCisjZGVmaW5lCU1DRlNJTV9ETUEzSUNSCQlNQ0ZTSU1fSUNSOQkvKiBETUEgMyBJQ1IgKi8KKworLyoKKyAqCU1hY3JvIHRvIHNldCBJTVIgcmVnaXN0ZXIuIEl0IGlzIDMyIGJpdHMgb24gdGhlIDU0MDcuCisgKi8KKyNkZWZpbmUJbWNmX2dldGltcigpCQlcCisJKigodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSAoTUNGX01CQVIgKyBNQ0ZTSU1fSU1SKSkKKworI2RlZmluZQltY2Zfc2V0aW1yKGltcikJCVwKKwkqKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopIChNQ0ZfTUJBUiArIE1DRlNJTV9JTVIpKSA9IChpbXIpOworCisjZGVmaW5lCW1jZl9nZXRpcHIoKQkJXAorCSooKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikgKE1DRl9NQkFSICsgTUNGU0lNX0lQUikpCisKKworLyoKKyAqCVNvbWUgc3ltYm9sIGRlZmluZXMgZm9yIHRoZSBQYXJhbGxlbCBQb3J0IFBpbiBBc3NpZ25tZW50IFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgTUNGU0lNX1BBUl9EUkVRMCAgICAgICAgMHg0MCAgICAgICAgICAgIC8qIFNldCB0byBzZWxlY3QgRFJFUTAgaW5wdXQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIHRvIHNlbGVjdCBwYXIgSS9PICovCisjZGVmaW5lIE1DRlNJTV9QQVJfRFJFUTEgICAgICAgIDB4MjAgICAgICAgICAgICAvKiBTZWxlY3QgRFJFUTEgaW5wdXQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIHRvIHNlbGVjdCBwYXIgSS9PICovCisKKy8qCisgKiAgICAgICBEZWZpbmVzIGZvciB0aGUgSVJRUEFSIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgSVJRNV9MRVZFTDQJMHg4MAorI2RlZmluZSBJUlEzX0xFVkVMNgkweDQwCisjZGVmaW5lIElSUTFfTEVWRUwyCTB4MjAKKworCisvKgorICoJRGVmaW5lIHRoZSBDYWNoZSByZWdpc3RlciBmbGFncy4KKyAqLworI2RlZmluZQlDQUNSX0RFQwkJMHg4MDAwMDAwMAkvKiBFbmFibGUgZGF0YSBjYWNoZSAqLworI2RlZmluZQlDQUNSX0RXUAkJMHg0MDAwMDAwMAkvKiBEYXRhIHdyaXRlIHByb3RlY3Rpb24gKi8KKyNkZWZpbmUJQ0FDUl9ERVNCCQkweDIwMDAwMDAwCS8qIEVuYWJsZSBkYXRhIHN0b3JlIGJ1ZmZlciAqLworI2RlZmluZQlDQUNSX0REUEkJCTB4MTAwMDAwMDAJLyogRGlzYWJsZSBDUFVTSEwgKi8KKyNkZWZpbmUJQ0FDUl9ESENMSwkJMHgwODAwMDAwMAkvKiBIYWxmIGRhdGEgY2FjaGUgbG9jayBtb2RlICovCisjZGVmaW5lCUNBQ1JfRERDTV9XVAkJMHgwMDAwMDAwMAkvKiBXcml0ZSB0aHJvdWdoIGNhY2hlKi8KKyNkZWZpbmUJQ0FDUl9ERENNX0NQCQkweDAyMDAwMDAwCS8qIENvcHliYWNrIGNhY2hlICovCisjZGVmaW5lCUNBQ1JfRERDTV9QCQkweDA0MDAwMDAwCS8qIE5vIGNhY2hlLCBwcmVjaXNlICovCisjZGVmaW5lCUNBQ1JfRERDTV9JTVAJCTB4MDYwMDAwMDAJLyogTm8gY2FjaGUsIGltcHJlY2lzZSAqLworI2RlZmluZQlDQUNSX0RDSU5WQQkJMHgwMTAwMDAwMAkvKiBJbnZhbGlkYXRlIGRhdGEgY2FjaGUgKi8KKyNkZWZpbmUJQ0FDUl9CRUMJCTB4MDAwODAwMDAJLyogRW5hYmxlIGJyYW5jaCBjYWNoZSAqLworI2RlZmluZQlDQUNSX0JDSU5WQQkJMHgwMDA0MDAwMAkvKiBJbnZhbGlkYXRlIGJyYW5jaCBjYWNoZSAqLworI2RlZmluZQlDQUNSX0lFQwkJMHgwMDAwODAwMAkvKiBFbmFibGUgaW5zdHJ1Y3Rpb24gY2FjaGUgKi8KKyNkZWZpbmUJQ0FDUl9ETkZCCQkweDAwMDAyMDAwCS8qIEluaGliaXRlZCBmaWxsIGJ1ZmZlciAqLworI2RlZmluZQlDQUNSX0lEUEkJCTB4MDAwMDEwMDAJLyogRGlzYWJsZSBDUFVTSEwgKi8KKyNkZWZpbmUJQ0FDUl9JSExDSwkJMHgwMDAwMDgwMAkvKiBJbnRydWN0aW9uIGNhY2hlIGhhbGYgbG9jayAqLworI2RlZmluZQlDQUNSX0lEQ00JCTB4MDAwMDA0MDAJLyogSW50cnVjdGlvbiBjYWNoZSBpbmhpYml0ICovCisjZGVmaW5lCUNBQ1JfSUNJTlZBCQkweDAwMDAwMTAwCS8qIEludmFsaWRhdGUgaW5zdHIgY2FjaGUgKi8KKworI2RlZmluZQlBQ1JfQkFTRV9QT1MJCTI0CQkvKiBBZGRyZXNzIEJhc2UgKi8KKyNkZWZpbmUJQUNSX01BU0tfUE9TCQkxNgkJLyogQWRkcmVzcyBNYXNrICovCisjZGVmaW5lCUFDUl9FTkFCTEUJCTB4MDAwMDgwMDAJLyogRW5hYmxlIGFkZHJlc3MgKi8KKyNkZWZpbmUJQUNSX1VTRVIJCTB4MDAwMDAwMDAJLyogVXNlciBtb2RlIGFjY2VzcyBvbmx5ICovCisjZGVmaW5lCUFDUl9TVVBFUgkJMHgwMDAwMjAwMAkvKiBTdXBlcnZpc29yIG1vZGUgb25seSAqLworI2RlZmluZQlBQ1JfQU5ZCQkJMHgwMDAwNDAwMAkvKiBNYXRjaCBhbnkgYWNjZXNzIG1vZGUgKi8KKyNkZWZpbmUJQUNSX0NNX1dUCQkweDAwMDAwMDAwCS8qIFdyaXRlIHRocm91Z2ggbW9kZSAqLworI2RlZmluZQlBQ1JfQ01fQ1AJCTB4MDAwMDAwMjAJLyogQ29weWJhY2sgbW9kZSAqLworI2RlZmluZQlBQ1JfQ01fT0ZGX1BSRQkJMHgwMDAwMDA0MAkvKiBObyBjYWNoZSwgcHJlY2lzZSAqLworI2RlZmluZQlBQ1JfQ01fT0ZGX0lNUAkJMHgwMDAwMDA2MAkvKiBObyBjYWNoZSwgaW1wcmVjaXNlICovCisjZGVmaW5lCUFDUl9XUFJPVEVDVAkJMHgwMDAwMDAwNAkvKiBXcml0ZSBwcm90ZWN0ICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2VuZGlmCS8qIG01NDA3c2ltX2ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9tNjgzNjAuaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9tNjgzNjAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDExYjA3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L202ODM2MC5oCkBAIC0wLDAgKzEsNSBAQAorI2luY2x1ZGUgIm02ODM2MF9yZWdzLmgiCisjaW5jbHVkZSAibTY4MzYwX3ByYW0uaCIKKyNpbmNsdWRlICJtNjgzNjBfcXVpY2MuaCIKKyNpbmNsdWRlICJtNjgzNjBfZW5ldC5oIgorCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbTY4MzYwX2VuZXQuaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9tNjgzNjBfZW5ldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNmY0ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbTY4MzYwX2VuZXQuaApAQCAtMCwwICsxLDE3NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAkSWQ6IG02ODM2MF9lbmV0LmgsdiAxLjEgMjAwMi8wMy8wMiAxNTowMTowNyBnZXJnIEV4cCAkCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWZpbml0aW9ucyBmb3IgdGhlIEVUSEVSTkVUIGNvbnRyb2xsZXJzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworI2lmbmRlZiBfX0VUSEVSX0gKKyNkZWZpbmUgX19FVEhFUl9ICisKKyNpbmNsdWRlICJxdWljY19zaW1wbGUuaCIKKworLyoKKyAqIHRyYW5zbWl0IEJEJ3MKKyAqLworI2RlZmluZSBUX1IgICAgIDB4ODAwMCAgICAgICAgICAvKiByZWFkeSBiaXQgKi8KKyNkZWZpbmUgRV9UX1BBRCAweDQwMDAgICAgICAgICAgLyogc2hvcnQgZnJhbWUgcGFkZGluZyAqLworI2RlZmluZSBUX1cgICAgIDB4MjAwMCAgICAgICAgICAvKiB3cmFwIGJpdCAqLworI2RlZmluZSBUX0kgICAgIDB4MTAwMCAgICAgICAgICAvKiBpbnRlcnJ1cHQgb24gY29tcGxldGlvbiAqLworI2RlZmluZSBUX0wgICAgIDB4MDgwMCAgICAgICAgICAvKiBsYXN0IGluIGZyYW1lICovCisjZGVmaW5lIFRfVEMgICAgMHgwNDAwICAgICAgICAgIC8qIHRyYW5zbWl0IENSQyAod2hlbiBsYXN0KSAqLworCisjZGVmaW5lIFRfREVGICAgMHgwMjAwICAgICAgICAgIC8qIGRlZmVyIGluZGljYXRpb24gKi8KKyNkZWZpbmUgVF9IQiAgICAweDAxMDAgICAgICAgICAgLyogaGVhcnRiZWF0ICovCisjZGVmaW5lIFRfTEMgICAgMHgwMDgwICAgICAgICAgIC8qIGVycm9yOiBsYXRlIGNvbGxpc2lvbiAqLworI2RlZmluZSBUX1JMICAgIDB4MDA0MCAgICAgICAgICAvKiBlcnJvcjogcmV0cmFuc21pc3Npb24gbGltaXQgKi8KKyNkZWZpbmUgVF9SQyAgICAweDAwM2MgICAgICAgICAgLyogcmV0cnkgY291bnQgKi8KKyNkZWZpbmUgVF9VTiAgICAweDAwMDIgICAgICAgICAgLyogZXJyb3I6IHVuZGVycnVuICovCisjZGVmaW5lIFRfQ1NMICAgMHgwMDAxICAgICAgICAgIC8qIGNhcmllciBzZW5zZSBsb3N0ICovCisjZGVmaW5lIFRfRVJST1IgKFRfSEIgfCBUX0xDIHwgVF9STCB8IFRfVU4gfCBUX0NTTCkKKworLyoKKyAqIHJlY2VpdmUgQkQncworICovCisjZGVmaW5lIFJfRSAgICAgMHg4MDAwICAgICAgICAgIC8qIGJ1ZmZlciBlbXB0eSAqLworI2RlZmluZSBSX1cgICAgIDB4MjAwMCAgICAgICAgICAvKiB3cmFwIGJpdCAqLworI2RlZmluZSBSX0kgICAgIDB4MTAwMCAgICAgICAgICAvKiBpbnRlcnJ1cHQgb24gcmVjZXB0aW9uICovCisjZGVmaW5lIFJfTCAgICAgMHgwODAwICAgICAgICAgIC8qIGxhc3QgQkQgaW4gZnJhbWUgKi8KKyNkZWZpbmUgUl9GICAgICAweDA0MDAgICAgICAgICAgLyogZmlyc3QgQkQgaW4gZnJhbWUgKi8KKyNkZWZpbmUgUl9NICAgICAweDAxMDAgICAgICAgICAgLyogcmVjZWl2ZWQgYmVjYXVzZSBvZiBwcm9taXNjLiBtb2RlICovCisKKyNkZWZpbmUgUl9MRyAgICAweDAwMjAgICAgICAgICAgLyogZnJhbWUgdG9vIGxvbmcgKi8KKyNkZWZpbmUgUl9OTyAgICAweDAwMTAgICAgICAgICAgLyogbm9uLW9jdGV0IGFsaWduZWQgKi8KKyNkZWZpbmUgUl9TSCAgICAweDAwMDggICAgICAgICAgLyogc2hvcnQgZnJhbWUgKi8KKyNkZWZpbmUgUl9DUiAgICAweDAwMDQgICAgICAgICAgLyogcmVjZWl2ZSBDUkMgZXJyb3IgKi8KKyNkZWZpbmUgUl9PViAgICAweDAwMDIgICAgICAgICAgLyogcmVjZWl2ZSBvdmVycnVuICovCisjZGVmaW5lIFJfQ0wgICAgMHgwMDAxICAgICAgICAgIC8qIGNvbGxpc2lvbiAqLworI2RlZmluZSBFVEhFUl9SX0VSUk9SIChSX0xHIHwgUl9OTyB8IFJfU0ggfCBSX0NSIHwgUl9PViB8IFJfQ0wpCisKKworLyoKKyAqIGV0aGVybmV0IGludGVycnVwdHMKKyAqLworI2RlZmluZSBFVEhFUk5FVF9HUkEgICAgMHgwMDgwICAvKiBncmFjZWZ1bCBzdG9wIGNvbXBsZXRlICovCisjZGVmaW5lIEVUSEVSTkVUX1RYRSAgICAweDAwMTAgIC8qIHRyYW5zbWl0IGVycm9yICAgICAgICAgKi8KKyNkZWZpbmUgRVRIRVJORVRfUlhGICAgIDB4MDAwOCAgLyogcmVjZWl2ZSBmcmFtZSAgICAgICAgICAqLworI2RlZmluZSBFVEhFUk5FVF9CU1kgICAgMHgwMDA0ICAvKiBidXN5IGNvbmRpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVUSEVSTkVUX1RYQiAgICAweDAwMDIgIC8qIHRyYW5zbWl0IGJ1ZmZlciAgICAgICAgKi8KKyNkZWZpbmUgRVRIRVJORVRfUlhCICAgIDB4MDAwMSAgLyogcmVjZWl2ZSBidWZmZXIgICAgICAgICAqLworCisvKgorICogZXRoZXJuZXQgcHJvdG9jb2wgc3BlY2lmaWMgbW9kZSByZWdpc3RlciAoUFNNUikKKyAqLworI2RlZmluZSBFVEhFUl9IQkMgICAgICAgMHg4MDAwICAgIC8qIGhlYXJ0YmVhdCBjaGVja2luZyAgICAgICovCisjZGVmaW5lIEVUSEVSX0ZDICAgICAgICAweDQwMDAgICAgLyogZm9yY2UgY29sbGlzaW9uICAgICAgICAgKi8KKyNkZWZpbmUgRVRIRVJfUlNIICAgICAgIDB4MjAwMCAgICAvKiByZWNlaXZlIHNob3J0IGZyYW1lcyAgICAqLworI2RlZmluZSBFVEhFUl9JQU0gICAgICAgMHgxMDAwICAgIC8qIGluZGl2aWR1YWwgYWRkcmVzcyBtb2RlICovCisjZGVmaW5lIEVUSEVSX0NSQ18zMiAgICAoMHgyPDwxMCkgLyogRW5hYmxlIENSQyAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRVRIRVJfUFJPICAgICAgIDB4MDIwMCAgICAvKiBwcm9taXNjdW91cyAgICAgICAgICAgICAqLworI2RlZmluZSBFVEhFUl9CUk8gICAgICAgMHgwMTAwICAgIC8qIGJyb2FkY2FzdCBhZGRyZXNzICAgICAgICovCisjZGVmaW5lIEVUSEVSX1NCVCAgICAgICAweDAwODAgICAgLyogc3RvcCBiYWNrb2ZmIHRpbWVyICAgICAgKi8KKyNkZWZpbmUgRVRIRVJfTFBCICAgICAgIDB4MDA0MCAgICAvKiBMb29wIEJhY2sgTW9kZSAgICAgICAgICAqLworI2RlZmluZSBFVEhFUl9TSVAgICAgICAgMHgwMDIwICAgIC8qIHNhbXBsZSBpbnB1dCBwaW5zICAgICAgICovCisjZGVmaW5lIEVUSEVSX0xDVyAgICAgICAweDAwMTAgICAgLyogbGF0ZSBjb2xsaXNpb24gd2luZG93ICAgKi8KKyNkZWZpbmUgRVRIRVJfTklCXzEzICAgICgweDA8PDEpICAvKiAjIG9mIGlnbm9yZWQgYml0cyAxMyAgICAqLworI2RlZmluZSBFVEhFUl9OSUJfMTQgICAgKDB4MTw8MSkgIC8qICMgb2YgaWdub3JlZCBiaXRzIDE0ICAgICovCisjZGVmaW5lIEVUSEVSX05JQl8xNSAgICAoMHgyPDwxKSAgLyogIyBvZiBpZ25vcmVkIGJpdHMgMTUgICAgKi8KKyNkZWZpbmUgRVRIRVJfTklCXzE2ICAgICgweDM8PDEpICAvKiAjIG9mIGlnbm9yZWQgYml0cyAxNiAgICAqLworI2RlZmluZSBFVEhFUl9OSUJfMjEgICAgKDB4NDw8MSkgIC8qICMgb2YgaWdub3JlZCBiaXRzIDIxICAgICovCisjZGVmaW5lIEVUSEVSX05JQl8yMiAgICAoMHg1PDwxKSAgLyogIyBvZiBpZ25vcmVkIGJpdHMgMjIgICAgKi8KKyNkZWZpbmUgRVRIRVJfTklCXzIzICAgICgweDY8PDEpICAvKiAjIG9mIGlnbm9yZWQgYml0cyAyMyAgICAqLworI2RlZmluZSBFVEhFUl9OSUJfMjQgICAgKDB4Nzw8MSkgIC8qICMgb2YgaWdub3JlZCBiaXRzIDI0ICAgICovCisKKy8qCisgKiBldGhlcm5ldCBzcGVjaWZpYyBwYXJhbWV0ZXJzCisgKi8KKyNkZWZpbmUgQ1JDX1dPUkQgNCAgICAgICAgICAvKiBMZW5ndGggaW4gYnl0ZXMgb2YgQ1JDICovICAgICAgICAgICAgICAgCisjZGVmaW5lIENfUFJFUyAgIDB4ZmZmZmZmZmYgLyogcHJlZm9ybSAzMiBiaXQgQ1JDICovCisjZGVmaW5lIENfTUFTSyAgIDB4ZGViYjIwZTMgLyogY29tcGx5IHdpdGggMzIgYml0IENSQyAqLyAgICAgICAKKyNkZWZpbmUgQ1JDRUMgICAgMHgwMDAwMDAwMAorI2RlZmluZSBBTEVDICAgICAweDAwMDAwMDAwCisjZGVmaW5lIERJU0ZDICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgUEFEUyAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBSRVRfTElNICAweDAwMGYgICAgIC8qIHJldHJ5IDE1IHRpbWVzIHRvIHNlbmQgYSBmcmFtZSBiZWZvcmUgaW50ZXJydXB0ICovCisjZGVmaW5lIEVUSF9NRkxSIDB4MDVlZSAgICAgLyogMTUxOCBtYXggZnJhbWUgc2l6ZSAqLworI2RlZmluZSBNSU5GTFIgICAweDAwNDAgICAgIC8qIE1pbmltdW0gZnJhbWUgc2l6ZSA2NCAqLworI2RlZmluZSBNQVhEMSAgICAweDA1ZWUgICAgIC8qIE1heCBkbWEgY291bnQgMTUxOCAqLworI2RlZmluZSBNQVhEMiAgICAweDA1ZWUKKyNkZWZpbmUgR0FERFIxICAgMHgwMDAwMDAwMCAvKiBDbGVhciBncm91cCBhZGRyZXNzICovICAKKyNkZWZpbmUgR0FERFIyICAgMHgwMDAwMDAwMAorI2RlZmluZSBHQUREUjMgICAweDAwMDAwMDAwICAgIAorI2RlZmluZSBHQUREUjQgICAweDAwMDAwMDAwICAgIAorI2RlZmluZSBQX1BFUiAgICAweDAwMDAwMDAwIC8qbm90IHVzZWQgKi8gICAgICAgICAgICAgIAorI2RlZmluZSBJQUREUjEgICAweDAwMDAwMDAwIC8qIEluZGl2aWR1YWwgaGFzaCB0YWJsZSBub3QgdXNlZCAqLyAgICAgICAKKyNkZWZpbmUgSUFERFIyICAgMHgwMDAwMDAwMAorI2RlZmluZSBJQUREUjMgICAweDAwMDAwMDAwICAgIAorI2RlZmluZSBJQUREUjQgICAweDAwMDAwMDAwICAgICAgICAgICAgCisjZGVmaW5lIFRBRERSX0ggIDB4MDAwMDAwMDAgLyogY2xlYXIgdGhpcyByZWdzICovICAgICAgICAgICAgICAKKyNkZWZpbmUgVEFERFJfTSAgMHgwMDAwMDAwMCAgICAgICAgICAgIAorI2RlZmluZSBUQUREUl9MICAweDAwMDAwMDAwICAgICAgICAgICAgCisKKy8qICAgICAgIFNDQyBQYXJhbWV0ZXIgUmFtICovCisjZGVmaW5lIFJGQ1IgICAgMHgxOCAvKiBub3JtYWwgb3BlcmF0aW9uICovCisjZGVmaW5lIFRGQ1IgICAgMHgxOCAvKiBub3JtYWwgb3BlcmF0aW9uICovCisjZGVmaW5lIEVfTVJCTFIgMTUxOCAvKiBNYXggZXRoZXJuZXQgZnJhbWUgbGVuZ3RoICovCisKKy8qCisgKiBldGhlcm5ldCBzcGVjaWZpYyBzdHJ1Y3R1cmUKKyAqLwordHlwZWRlZiB1bmlvbiB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgYls2XTsKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGhpZ2g7CisgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBtaWRkbDsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGxvdzsKKyAgICAgICAgfSB3OworfSBFVEhFUl9BRERSOworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgaW50ICAgICAgICBtYXhfZnJhbWVfbGVuZ3RoOworICAgIGludCAgICAgICAgcHJvbWlzY19tb2RlOworICAgIGludCAgICAgICAgcmVqZWN0X2Jyb2FkY2FzdDsKKyAgICBFVEhFUl9BRERSIHBoeXNfYWRyOworfSBFVEhFUl9TUEVDSUZJQzsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIEVUSEVSX0FERFIgICAgIGRzdF9hZGRyOworICAgIEVUSEVSX0FERFIgICAgIHNyY19hZGRyOworICAgIHVuc2lnbmVkIHNob3J0IHR5cGVfb3JfbGVuOworICAgIHVuc2lnbmVkIGNoYXIgIGRhdGFbMV07Cit9IEVUSEVSX0ZSQU1FOworCisjZGVmaW5lIE1BWF9EQVRBTEVOIDE1MDAKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBFVEhFUl9BRERSICAgICBkc3RfYWRkcjsKKyAgICBFVEhFUl9BRERSICAgICBzcmNfYWRkcjsKKyAgICB1bnNpZ25lZCBzaG9ydCB0eXBlX29yX2xlbjsKKyAgICB1bnNpZ25lZCBjaGFyICBkYXRhW01BWF9EQVRBTEVOXTsKKyAgICB1bnNpZ25lZCBjaGFyICBmY3NbQ1JDX1dPUkRdOworfSBFVEhFUl9NQVhfRlJBTUU7CisKKworLyoKKyAqIEludGVybmFsIGV0aGVybmV0IGZ1bmN0aW9uIHByb3RvdHlwZXMKKyAqLwordm9pZCAgICAgICAgZXRoZXJfaW50ZXJydXB0KGludCBzY2NfbnVtKTsKKy8qIG1sZXNsaWU6IGRlYnVnICovCisvKiBzdGF0aWMgdm9pZCBldGhlcm5ldF9yeF9pbnRlcm5hbChpbnQgc2NjX251bSk7ICovCisvKiBzdGF0aWMgdm9pZCBldGhlcm5ldF90eF9pbnRlcm5hbChpbnQgc2NjX251bSk7ICovCisKKy8qCisgKiBVc2VyIGNhbGxhYmxlIHJvdXRpbmVzIHByb3RvdHlwZXMgKGV0aGVybmV0IHNwZWNpZmljKQorICovCit2b2lkIGV0aGVybmV0X2luaXQoaW50ICAgICAgICAgICAgICAgICAgICAgICBzY2NfbnVtYmVyLAorICAgICAgICAgICAgICAgICAgIGFsbG9jX3JvdXRpbmUgICAgICAgICAgICAgKmFsbG9jX2J1ZmZlciwKKyAgICAgICAgICAgICAgICAgICBmcmVlX3JvdXRpbmUgICAgICAgICAgICAgICpmcmVlX2J1ZmZlciwKKyAgICAgICAgICAgICAgICAgICBzdG9yZV9yeF9idWZmZXJfcm91dGluZSAgICpzdG9yZV9yeF9idWZmZXIsCisgICAgICAgICAgICAgICAgICAgaGFuZGxlX3R4X2Vycm9yX3JvdXRpbmUgICAqaGFuZGxlX3R4X2Vycm9yLAorICAgICAgICAgICAgICAgICAgIGhhbmRsZV9yeF9lcnJvcl9yb3V0aW5lICAgKmhhbmRsZV9yeF9lcnJvciwKKyAgICAgICAgICAgICAgICAgICBoYW5kbGVfbG9zdF9lcnJvcl9yb3V0aW5lICpoYW5kbGVfbG9zdF9lcnJvciwKKyAgICAgICAgICAgICAgICAgICBFVEhFUl9TUEVDSUZJQyAgICAgICAgICAgICpldGhlcl9zcGVjKTsKK2ludCAgZXRoZXJuZXRfdHgoaW50IHNjY19udW1iZXIsIHZvaWQgKmJ1ZiwgaW50IGxlbmd0aCk7CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbTY4MzYwX3ByYW0uaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9tNjgzNjBfcHJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2MDg4YmIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbTY4MzYwX3ByYW0uaApAQCAtMCwwICsxLDQzMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAkSWQ6IG02ODM2MF9wcmFtLmgsdiAxLjEgMjAwMi8wMy8wMiAxNTowMTowNyBnZXJnIEV4cCAkCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWZpbml0aW9ucyBvZiB0aGUgcGFyYW1ldGVyIGFyZWEgUkFNLgorICogTm90ZSB0aGF0IGRpZmZlcmVudCBzdHJ1Y3R1cmVzIGFyZSBvdmVybGFpZAorICogYXQgdGhlIHNhbWUgb2Zmc2V0cyBmb3IgdGhlIGRpZmZlcmVudCBtb2RlcworICogb2Ygb3BlcmF0aW9uLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKyNpZm5kZWYgX19QUkFNX0gKKyNkZWZpbmUgX19QUkFNX0gKKworLyogVGltZSBzbG90IGFzc2lnbm1lbnQgdGFibGUgKi8KKyNkZWZpbmUgVkFMSURfU0xPVAkweDgwMDAKKyNkZWZpbmUgV1JBUF9TTE9UCTB4NDAwMAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICAgR2xvYmFsIE11bHRpY2hhbm5lbCBwYXJhbWV0ZXIgUkFNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0cnVjdCBnbG9iYWxfbXVsdGlfcHJhbSB7CisgICAgLyoKKyAgICAgKiBHbG9iYWwgTXVsdGljaGFubmVsIHBhcmFtZXRlciBSQU0KKyAgICAgKi8KKyAgICB1bnNpZ25lZCBsb25nICAgbWNiYXNlOwkJLyogTXVsdGljaGFubmVsIEJhc2UgcG9pbnRlciAqLworICAgIHVuc2lnbmVkIHNob3J0ICBxbWNzdGF0ZTsJCS8qIE11bHRpY2hhbm5lbCBDb250cm9sbGVyIHN0YXRlICovCisgICAgdW5zaWduZWQgc2hvcnQgIG1yYmxyOwkJLyogTWF4aW11bSBSZWNlaXZlIEJ1ZmZlciBMZW5ndGggKi8KKyAgICB1bnNpZ25lZCBzaG9ydCAgdHhfc19wdHI7CQkvKiBUU1RBVHggUG9pbnRlciAqLworICAgIHVuc2lnbmVkIHNob3J0ICByeHB0cjsJCS8qIEN1cnJlbnQgVGltZSBzbG90IGVudHJ5IGluIFRTQVRSeCAqLworICAgIHVuc2lnbmVkIHNob3J0ICBncmZ0aHI7CQkvKiBHbG9iYWwgUmVjZWl2ZSBmcmFtZSB0aHJlc2hvbGQgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCAgZ3JmY250OwkJLyogR2xvYmFsIFJlY2VpdmUgRnJhbWUgQ291bnQgKi8KKyAgICB1bnNpZ25lZCBsb25nICAgaW50YmFzZTsJCS8qIE11bHRpY2hhbm5lbCBCYXNlIGFkZHJlc3MgKi8KKyAgICB1bnNpZ25lZCBsb25nICAgaWludHB0cjsJCS8qIFBvaW50ZXIgdG8gaW50ZXJydXB0IHF1ZXVlICovCisgICAgdW5zaWduZWQgc2hvcnQgIHJ4X3NfcHRyOwkJLyogVFNUQVJ4IFBvaW50ZXIgKi8KKworICAgIHVuc2lnbmVkIHNob3J0ICB0eHB0cjsJCS8qIEN1cnJlbnQgVGltZSBzbG90IGVudHJ5IGluIFRTQVRUeCAqLworICAgIHVuc2lnbmVkIGxvbmcgICBjX21hc2szMjsJCS8qIENSQyBDb25zdGFudCAoZGViYjIwZTMpICovCisgICAgdW5zaWduZWQgc2hvcnQgIHRzYXRyeFszMl07CQkvKiBUaW1lIFNsb3QgQXNzaWdubWVudCBUYWJsZSBSeCAqLworICAgIHVuc2lnbmVkIHNob3J0ICB0c2F0dHhbMzJdOwkJLyogVGltZSBTbG90IEFzc2lnbm1lbnQgVGFibGUgVHggKi8KKyAgICB1bnNpZ25lZCBzaG9ydCAgY19tYXNrMTY7CQkvKiBDUkMgQ29uc3RhbnQgKGYwYjgpICovCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICAgUXVpY2MzMiBIRExDIHBhcmFtZXRlciBSQU0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RydWN0IHF1aWNjMzJfcHJhbSB7CisKKyAgICB1bnNpZ25lZCBzaG9ydCAgdGJhc2U7CQkvKiBUeCBCdWZmZXIgRGVzY3JpcHRvcnMgQmFzZSBBZGRyZXNzICovCisgICAgdW5zaWduZWQgc2hvcnQgIGNoYW1yOwkJLyogQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyICovCisgICAgdW5zaWduZWQgbG9uZyAgIHRzdGF0ZTsJCS8qIFR4IEludGVybmFsIFN0YXRlICovCisgICAgdW5zaWduZWQgbG9uZyAgIHR4aW50cjsJCS8qIFR4IEludGVybmFsIERhdGEgUG9pbnRlciAqLworICAgIHVuc2lnbmVkIHNob3J0ICB0YnB0cjsJCS8qIFR4IEJ1ZmZlciBEZXNjcmlwdG9yIFBvaW50ZXIgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCAgdHhjbnRyOwkJLyogVHggSW50ZXJuYWwgQnl0ZSBDb3VudCAqLworICAgIHVuc2lnbmVkIGxvbmcgICB0dXBhY2s7CQkvKiAoVHggVGVtcCkgKi8KKyAgICB1bnNpZ25lZCBsb25nICAgemlzdGF0ZTsJCS8qIFplcm8gSW5zZXJ0aW9uIG1hY2hpbmUgc3RhdGUgKi8KKyAgICB1bnNpZ25lZCBsb25nICAgdGNyYzsJCS8qIFRlbXAgVHJhbnNtaXQgQ1JDICovCisgICAgdW5zaWduZWQgc2hvcnQgIGludG1hc2s7CQkvKiBDaGFubmVsJ3MgaW50ZXJydXB0IG1hc2sgZmxhZ3MgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCAgYmRmbGFnczsJCQorICAgIHVuc2lnbmVkIHNob3J0ICByYmFzZTsJCS8qIFJ4IEJ1ZmZlciBEZXNjcmlwdG9ycyBCYXNlIEFkZHJlc3MgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCAgbWZscjsJCS8qIE1heCBGcmFtZSBMZW5ndGggUmVnaXN0ZXIgKi8KKyAgICB1bnNpZ25lZCBsb25nICAgcnN0YXRlOwkJLyogUnggSW50ZXJuYWwgU3RhdGUgKi8KKyAgICB1bnNpZ25lZCBsb25nICAgcnhpbnRyOwkJLyogUnggSW50ZXJuYWwgRGF0YSBQb2ludGVyICovCisgICAgdW5zaWduZWQgc2hvcnQgIHJicHRyOwkJLyogUnggQnVmZmVyIERlc2NyaXB0b3IgUG9pbnRlciAqLworICAgIHVuc2lnbmVkIHNob3J0ICByeGJ5YzsJCS8qIFJ4IEludGVybmFsIEJ5dGUgQ291bnQgKi8KKyAgICB1bnNpZ25lZCBsb25nICAgcnBhY2s7CQkvKiAoUnggVGVtcCkgKi8KKyAgICB1bnNpZ25lZCBsb25nICAgemRzdGF0ZTsJCS8qIFplcm8gRGVsZXRpb24gbWFjaGluZSBzdGF0ZSAqLworICAgIHVuc2lnbmVkIGxvbmcgICByY3JjOwkJLyogVGVtcCBUcmFuc21pdCBDUkMgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCAgbWF4YzsJCS8qIE1heF9sZW5ndGggY291bnRlciAqLworICAgIHVuc2lnbmVkIHNob3J0ICB0bXBfbWI7CQkvKiBUZW1wICovCit9OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgICBIRExDIHBhcmFtZXRlciBSQU0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdHJ1Y3QgaGRsY19wcmFtIHsKKyAgICAvKgorICAgICAqIFNDQyBwYXJhbWV0ZXIgUkFNCisgICAgICovCisgICAgdW5zaWduZWQgc2hvcnQgIHJiYXNlOyAgICAgICAgICAvKiBSWCBCRCBiYXNlIGFkZHJlc3MgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCAgdGJhc2U7ICAgICAgICAgIC8qIFRYIEJEIGJhc2UgYWRkcmVzcyAqLworICAgIHVuc2lnbmVkIGNoYXIgICByZmNyOyAgICAgICAgICAgLyogUnggZnVuY3Rpb24gY29kZSAqLworICAgIHVuc2lnbmVkIGNoYXIgICB0ZmNyOyAgICAgICAgICAgLyogVHggZnVuY3Rpb24gY29kZSAqLworICAgIHVuc2lnbmVkIHNob3J0ICBtcmJscjsgICAgICAgICAgLyogUnggYnVmZmVyIGxlbmd0aCAqLworICAgIHVuc2lnbmVkIGxvbmcgICByc3RhdGU7ICAgICAgICAgLyogUnggaW50ZXJuYWwgc3RhdGUgKi8KKyAgICB1bnNpZ25lZCBsb25nICAgcnB0cjsgICAgICAgICAgIC8qIFJ4IGludGVybmFsIGRhdGEgcG9pbnRlciAqLworICAgIHVuc2lnbmVkIHNob3J0ICByYnB0cjsgICAgICAgICAgLyogcmIgQkQgUG9pbnRlciAqLworICAgIHVuc2lnbmVkIHNob3J0ICByY291bnQ7ICAgICAgICAgLyogUnggaW50ZXJuYWwgYnl0ZSBjb3VudCAqLworICAgIHVuc2lnbmVkIGxvbmcgICBydGVtcDsgICAgICAgICAgLyogUnggdGVtcCAqLworICAgIHVuc2lnbmVkIGxvbmcgICB0c3RhdGU7ICAgICAgICAgLyogVHggaW50ZXJuYWwgc3RhdGUgKi8KKyAgICB1bnNpZ25lZCBsb25nICAgdHB0cjsgICAgICAgICAgIC8qIFR4IGludGVybmFsIGRhdGEgcG9pbnRlciAqLworICAgIHVuc2lnbmVkIHNob3J0ICB0YnB0cjsgICAgICAgICAgLyogVHggQkQgcG9pbnRlciAqLworICAgIHVuc2lnbmVkIHNob3J0ICB0Y291bnQ7ICAgICAgICAgLyogVHggYnl0ZSBjb3VudCAqLworICAgIHVuc2lnbmVkIGxvbmcgICB0dGVtcDsgICAgICAgICAgLyogVHggdGVtcCAqLworICAgIHVuc2lnbmVkIGxvbmcgICByY3JjOyAgICAgICAgICAgLyogdGVtcCByZWNlaXZlIENSQyAqLworICAgIHVuc2lnbmVkIGxvbmcgICB0Y3JjOyAgICAgICAgICAgLyogdGVtcCB0cmFuc21pdCBDUkMgKi8KKyAgIAorICAgIC8qCisgICAgICogSERMQyBzcGVjaWZpYyBwYXJhbWV0ZXIgUkFNCisgICAgICovCisgICAgdW5zaWduZWQgY2hhciAgIFJFU0VSVkVEMVs0XTsgICAvKiBSZXNlcnZlZCBhcmVhICovCisgICAgdW5zaWduZWQgbG9uZyAgIGNfbWFzazsgICAgICAgICAvKiBDUkMgY29uc3RhbnQgKi8KKyAgICB1bnNpZ25lZCBsb25nICAgY19wcmVzOyAgICAgICAgIC8qIENSQyBwcmVzZXQgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCAgZGlzZmM7ICAgICAgICAgIC8qIGRpc2NhcmRlZCBmcmFtZSBjb3VudGVyICovCisgICAgdW5zaWduZWQgc2hvcnQgIGNyY2VjOyAgICAgICAgICAvKiBDUkMgZXJyb3IgY291bnRlciAqLworICAgIHVuc2lnbmVkIHNob3J0ICBhYnRzYzsgICAgICAgICAgLyogYWJvcnQgc2VxdWVuY2UgY291bnRlciAqLworICAgIHVuc2lnbmVkIHNob3J0ICBubWFyYzsgICAgICAgICAgLyogbm9ubWF0Y2hpbmcgYWRkcmVzcyByeCBjbnQgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCAgcmV0cmM7ICAgICAgICAgIC8qIGZyYW1lIHJldHJhbnNtaXNzaW9uIGNudCAqLworICAgIHVuc2lnbmVkIHNob3J0ICBtZmxyOyAgICAgICAgICAgLyogbWF4aW11bSBmcmFtZSBsZW5ndGggcmVnICovCisgICAgdW5zaWduZWQgc2hvcnQgIG1heF9jbnQ7ICAgICAgICAvKiBtYXhpbXVtIGxlbmd0aCBjb3VudGVyICovCisgICAgdW5zaWduZWQgc2hvcnQgIHJmdGhyOyAgICAgICAgICAvKiByZWNlaXZlZCBmcmFtZXMgdGhyZXNob2xkICovCisgICAgdW5zaWduZWQgc2hvcnQgIHJmY250OyAgICAgICAgICAvKiByZWNlaXZlZCBmcmFtZXMgY291bnQgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCAgaG1hc2s7ICAgICAgICAgIC8qIHVzZXIgZGVmaW5lZCBmcm0gYWRkciBtYXNrICovCisgICAgdW5zaWduZWQgc2hvcnQgIGhhZGRyMTsgICAgICAgICAvKiB1c2VyIGRlZmluZWQgZnJtIGFkZHJlc3MgMSAqLworICAgIHVuc2lnbmVkIHNob3J0ICBoYWRkcjI7ICAgICAgICAgLyogdXNlciBkZWZpbmVkIGZybSBhZGRyZXNzIDIgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCAgaGFkZHIzOyAgICAgICAgIC8qIHVzZXIgZGVmaW5lZCBmcm0gYWRkcmVzcyAzICovCisgICAgdW5zaWduZWQgc2hvcnQgIGhhZGRyNDsgICAgICAgICAvKiB1c2VyIGRlZmluZWQgZnJtIGFkZHJlc3MgNCAqLworICAgIHVuc2lnbmVkIHNob3J0ICB0bXA7ICAgICAgICAgICAgLyogdGVtcCAqLworICAgIHVuc2lnbmVkIHNob3J0ICB0bXBfbWI7ICAgICAgICAgLyogdGVtcCAqLworfTsKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgICBVQVJUIHBhcmFtZXRlciBSQU0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogYml0cyBpbiB1YXJ0IGNvbnRyb2wgY2hhcmFjdGVycyB0YWJsZQorICovCisjZGVmaW5lIENDX0lOVkFMSUQgIDB4ODAwMCAgICAgICAgICAvKiBjb250cm9sIGNoYXJhY3RlciBpcyB2YWxpZCAqLworI2RlZmluZSBDQ19SRUogICAgICAweDQwMDAgICAgICAgICAgLyogZG9uJ3Qgc3RvcmUgY2hhciBpbiBidWZmZXIgKi8KKyNkZWZpbmUgQ0NfQ0hBUiAgICAgMHgwMGZmICAgICAgICAgIC8qIGNvbnRyb2wgY2hhcmFjdGVyICovCisKKy8qIFVBUlQgKi8KK3N0cnVjdCB1YXJ0X3ByYW0geworICAgIC8qCisgICAgICogU0NDIHBhcmFtZXRlciBSQU0KKyAgICAgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCAgcmJhc2U7ICAgICAgICAgIC8qIFJYIEJEIGJhc2UgYWRkcmVzcyAqLworICAgIHVuc2lnbmVkIHNob3J0ICB0YmFzZTsgICAgICAgICAgLyogVFggQkQgYmFzZSBhZGRyZXNzICovCisgICAgdW5zaWduZWQgY2hhciAgIHJmY3I7ICAgICAgICAgICAvKiBSeCBmdW5jdGlvbiBjb2RlICovCisgICAgdW5zaWduZWQgY2hhciAgIHRmY3I7ICAgICAgICAgICAvKiBUeCBmdW5jdGlvbiBjb2RlICovCisgICAgdW5zaWduZWQgc2hvcnQgIG1yYmxyOyAgICAgICAgICAvKiBSeCBidWZmZXIgbGVuZ3RoICovCisgICAgdW5zaWduZWQgbG9uZyAgIHJzdGF0ZTsgICAgICAgICAvKiBSeCBpbnRlcm5hbCBzdGF0ZSAqLworICAgIHVuc2lnbmVkIGxvbmcgICBycHRyOyAgICAgICAgICAgLyogUnggaW50ZXJuYWwgZGF0YSBwb2ludGVyICovCisgICAgdW5zaWduZWQgc2hvcnQgIHJicHRyOyAgICAgICAgICAvKiByYiBCRCBQb2ludGVyICovCisgICAgdW5zaWduZWQgc2hvcnQgIHJjb3VudDsgICAgICAgICAvKiBSeCBpbnRlcm5hbCBieXRlIGNvdW50ICovCisgICAgdW5zaWduZWQgbG9uZyAgIHJ4X3RlbXA7ICAgICAgICAvKiBSeCB0ZW1wICovCisgICAgdW5zaWduZWQgbG9uZyAgIHRzdGF0ZTsgICAgICAgICAvKiBUeCBpbnRlcm5hbCBzdGF0ZSAqLworICAgIHVuc2lnbmVkIGxvbmcgICB0cHRyOyAgICAgICAgICAgLyogVHggaW50ZXJuYWwgZGF0YSBwb2ludGVyICovCisgICAgdW5zaWduZWQgc2hvcnQgIHRicHRyOyAgICAgICAgICAvKiBUeCBCRCBwb2ludGVyICovCisgICAgdW5zaWduZWQgc2hvcnQgIHRjb3VudDsgICAgICAgICAvKiBUeCBieXRlIGNvdW50ICovCisgICAgdW5zaWduZWQgbG9uZyAgIHR0ZW1wOyAgICAgICAgICAvKiBUeCB0ZW1wICovCisgICAgdW5zaWduZWQgbG9uZyAgIHJjcmM7ICAgICAgICAgICAvKiB0ZW1wIHJlY2VpdmUgQ1JDICovCisgICAgdW5zaWduZWQgbG9uZyAgIHRjcmM7ICAgICAgICAgICAvKiB0ZW1wIHRyYW5zbWl0IENSQyAqLworICAgCisgICAgLyoKKyAgICAgKiBVQVJUIHNwZWNpZmljIHBhcmFtZXRlciBSQU0KKyAgICAgKi8KKyAgICB1bnNpZ25lZCBjaGFyICAgUkVTRVJWRUQxWzhdOyAgIC8qIFJlc2VydmVkIGFyZWEgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCAgbWF4X2lkbDsgICAgICAgIC8qIG1heGltdW0gaWRsZSBjaGFyYWN0ZXJzICovCisgICAgdW5zaWduZWQgc2hvcnQgIGlkbGM7ICAgICAgICAgICAvKiByeCBpZGxlIGNvdW50ZXIgKGludGVybmFsKSAqLworICAgIHVuc2lnbmVkIHNob3J0ICBicmtjcjsgICAgICAgICAgLyogYnJlYWsgY291bnQgcmVnaXN0ZXIgKi8KKyAgICAgICAgICAgICAgICAgICAKKyAgICB1bnNpZ25lZCBzaG9ydCAgcGFyZWM7ICAgICAgICAgIC8qIFJ4IHBhcml0eSBlcnJvciBjb3VudGVyICovCisgICAgdW5zaWduZWQgc2hvcnQgIGZybWVyOyAgICAgICAgICAvKiBSeCBmcmFtaW5nIGVycm9yIGNvdW50ZXIgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCAgbm9zZWM7ICAgICAgICAgIC8qIFJ4IG5vaXNlIGNvdW50ZXIgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCAgYnJrZWM7ICAgICAgICAgIC8qIFJ4IGJyZWFrIGNoYXJhY3RlciBjb3VudGVyICovCisgICAgdW5zaWduZWQgc2hvcnQgIGJya2xuOyAgICAgICAgICAvKiBSZWFjZWl2ZSBicmVhayBsZW5ndGggKi8KKyAgICAgICAgICAgICAgICAgICAKKyAgICB1bnNpZ25lZCBzaG9ydCAgdWFkZHIxOyAgICAgICAgIC8qIGFkZHJlc3MgY2hhcmFjdGVyIDEgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCAgdWFkZHIyOyAgICAgICAgIC8qIGFkZHJlc3MgY2hhcmFjdGVyIDIgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCAgcnRlbXA7ICAgICAgICAgIC8qIHRlbXAgc3RvcmFnZSAqLworICAgIHVuc2lnbmVkIHNob3J0ICB0b3NlcTsgICAgICAgICAgLyogVHggb3V0IG9mIHNlcXVlbmNlIGNoYXIgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCAgY2NbOF07ICAgICAgICAgIC8qIFJ4IGNvbnRyb2wgY2hhcmFjdGVycyAqLworICAgIHVuc2lnbmVkIHNob3J0ICByY2NtOyAgICAgICAgICAgLyogUnggY29udHJvbCBjaGFyIG1hc2sgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCAgcmNjcjsgICAgICAgICAgIC8qIFJ4IGNvbnRyb2wgY2hhciByZWdpc3RlciAqLworICAgIHVuc2lnbmVkIHNob3J0ICBybGJjOyAgICAgICAgICAgLyogUmVjZWl2ZSBsYXN0IGJyZWFrIGNoYXIgKi8KK307CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICAgQklTWU5DIHBhcmFtZXRlciBSQU0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdHJ1Y3QgYmlzeW5jX3ByYW0geworICAgIC8qCisgICAgICogU0NDIHBhcmFtZXRlciBSQU0KKyAgICAgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCAgcmJhc2U7ICAgICAgICAgIC8qIFJYIEJEIGJhc2UgYWRkcmVzcyAqLworICAgIHVuc2lnbmVkIHNob3J0ICB0YmFzZTsgICAgICAgICAgLyogVFggQkQgYmFzZSBhZGRyZXNzICovCisgICAgdW5zaWduZWQgY2hhciAgIHJmY3I7ICAgICAgICAgICAvKiBSeCBmdW5jdGlvbiBjb2RlICovCisgICAgdW5zaWduZWQgY2hhciAgIHRmY3I7ICAgICAgICAgICAvKiBUeCBmdW5jdGlvbiBjb2RlICovCisgICAgdW5zaWduZWQgc2hvcnQgIG1yYmxyOyAgICAgICAgICAvKiBSeCBidWZmZXIgbGVuZ3RoICovCisgICAgdW5zaWduZWQgbG9uZyAgIHJzdGF0ZTsgICAgICAgICAvKiBSeCBpbnRlcm5hbCBzdGF0ZSAqLworICAgIHVuc2lnbmVkIGxvbmcgICBycHRyOyAgICAgICAgICAgLyogUnggaW50ZXJuYWwgZGF0YSBwb2ludGVyICovCisgICAgdW5zaWduZWQgc2hvcnQgIHJicHRyOyAgICAgICAgICAvKiByYiBCRCBQb2ludGVyICovCisgICAgdW5zaWduZWQgc2hvcnQgIHJjb3VudDsgICAgICAgICAvKiBSeCBpbnRlcm5hbCBieXRlIGNvdW50ICovCisgICAgdW5zaWduZWQgbG9uZyAgIHJ0ZW1wOyAgICAgICAgICAvKiBSeCB0ZW1wICovCisgICAgdW5zaWduZWQgbG9uZyAgIHRzdGF0ZTsgICAgICAgICAvKiBUeCBpbnRlcm5hbCBzdGF0ZSAqLworICAgIHVuc2lnbmVkIGxvbmcgICB0cHRyOyAgICAgICAgICAgLyogVHggaW50ZXJuYWwgZGF0YSBwb2ludGVyICovCisgICAgdW5zaWduZWQgc2hvcnQgIHRicHRyOyAgICAgICAgICAvKiBUeCBCRCBwb2ludGVyICovCisgICAgdW5zaWduZWQgc2hvcnQgIHRjb3VudDsgICAgICAgICAvKiBUeCBieXRlIGNvdW50ICovCisgICAgdW5zaWduZWQgbG9uZyAgIHR0ZW1wOyAgICAgICAgICAvKiBUeCB0ZW1wICovCisgICAgdW5zaWduZWQgbG9uZyAgIHJjcmM7ICAgICAgICAgICAvKiB0ZW1wIHJlY2VpdmUgQ1JDICovCisgICAgdW5zaWduZWQgbG9uZyAgIHRjcmM7ICAgICAgICAgICAvKiB0ZW1wIHRyYW5zbWl0IENSQyAqLworICAgCisgICAgLyoKKyAgICAgKiBCSVNZTkMgc3BlY2lmaWMgcGFyYW1ldGVyIFJBTQorICAgICAqLworICAgIHVuc2lnbmVkIGNoYXIgICBSRVNFUlZFRDFbNF07ICAgLyogUmVzZXJ2ZWQgYXJlYSAqLworICAgIHVuc2lnbmVkIGxvbmcgICBjcmNjOyAgICAgICAgICAgLyogQ1JDIENvbnN0YW50IFRlbXAgVmFsdWUgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCAgcHJjcmM7ICAgICAgICAgIC8qIFByZXNldCBSZWNlaXZlciBDUkMtMTYvTFJDICovCisgICAgdW5zaWduZWQgc2hvcnQgIHB0Y3JjOyAgICAgICAgICAvKiBQcmVzZXQgVHJhbnNtaXR0ZXIgQ1JDLTE2L0xSQyAqLworICAgIHVuc2lnbmVkIHNob3J0ICBwYXJlYzsgICAgICAgICAgLyogUmVjZWl2ZSBQYXJpdHkgRXJyb3IgQ291bnRlciAqLworICAgIHVuc2lnbmVkIHNob3J0ICBic3luYzsgICAgICAgICAgLyogQklTWU5DIFNZTkMgQ2hhcmFjdGVyICovCisgICAgdW5zaWduZWQgc2hvcnQgIGJkbGU7ICAgICAgICAgICAvKiBCSVNZTkMgRExFIENoYXJhY3RlciAqLworICAgIHVuc2lnbmVkIHNob3J0ICBjY1s4XTsgICAgICAgICAgLyogUnggY29udHJvbCBjaGFyYWN0ZXJzICovCisgICAgdW5zaWduZWQgc2hvcnQgIHJjY207ICAgICAgICAgICAvKiBSZWNlaXZlIENvbnRyb2wgQ2hhcmFjdGVyIE1hc2sgKi8KK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgICBJT00yIHBhcmFtZXRlciBSQU0KKyAgICAgICAgKG92ZXJsYWlkIG9uIHR4IGJkWzVdIG9mIFNDQyBjaGFubmVsWzJdKQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdHJ1Y3QgaW9tMl9wcmFtIHsKKyAgICB1bnNpZ25lZCBzaG9ydCAgY2lfZGF0YTsgICAgICAgIC8qIGNpIGRhdGEgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCAgbW9uaXRvcl9kYXRhOyAgIC8qIG1vbml0b3IgZGF0YSAqLworICAgIHVuc2lnbmVkIHNob3J0ICB0c3RhdGU7ICAgICAgICAgLyogdHJhbnNtaXR0ZXIgc3RhdGUgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCAgcnN0YXRlOyAgICAgICAgIC8qIHJlY2VpdmVyIHN0YXRlICovCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICAgU1BJL1NNQyBwYXJhbWV0ZXIgUkFNCisgICAgICAgIChvdmVybGFpZCBvbiB0eCBiZFs2LDddIG9mIFNDQyBjaGFubmVsWzJdKQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgU1BJX1IgICAgICAgMHg4MDAwICAgICAgICAgIC8qIFJlYWR5IGJpdCBpbiBCRCAqLworCitzdHJ1Y3Qgc3BpX3ByYW0geworICAgIHVuc2lnbmVkIHNob3J0ICByYmFzZTsgICAgICAgICAgLyogUnggQkQgQmFzZSBBZGRyZXNzICovCisgICAgdW5zaWduZWQgc2hvcnQgIHRiYXNlOyAgICAgICAgICAvKiBUeCBCRCBCYXNlIEFkZHJlc3MgKi8KKyAgICB1bnNpZ25lZCBjaGFyICAgcmZjcjsgICAgICAgICAgIC8qIFJ4IGZ1bmN0aW9uIGNvZGUgKi8KKyAgICB1bnNpZ25lZCBjaGFyICAgdGZjcjsgICAgICAgICAgIC8qIFR4IGZ1bmN0aW9uIGNvZGUgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCAgbXJibHI7ICAgICAgICAgIC8qIFJ4IGJ1ZmZlciBsZW5ndGggKi8KKyAgICB1bnNpZ25lZCBsb25nICAgcnN0YXRlOyAgICAgICAgIC8qIFJ4IGludGVybmFsIHN0YXRlICovCisgICAgdW5zaWduZWQgbG9uZyAgIHJwdHI7ICAgICAgICAgICAvKiBSeCBpbnRlcm5hbCBkYXRhIHBvaW50ZXIgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCAgcmJwdHI7ICAgICAgICAgIC8qIHJiIEJEIFBvaW50ZXIgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCAgcmNvdW50OyAgICAgICAgIC8qIFJ4IGludGVybmFsIGJ5dGUgY291bnQgKi8KKyAgICB1bnNpZ25lZCBsb25nICAgcnRlbXA7ICAgICAgICAgIC8qIFJ4IHRlbXAgKi8KKyAgICB1bnNpZ25lZCBsb25nICAgdHN0YXRlOyAgICAgICAgIC8qIFR4IGludGVybmFsIHN0YXRlICovCisgICAgdW5zaWduZWQgbG9uZyAgIHRwdHI7ICAgICAgICAgICAvKiBUeCBpbnRlcm5hbCBkYXRhIHBvaW50ZXIgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCAgdGJwdHI7ICAgICAgICAgIC8qIFR4IEJEIHBvaW50ZXIgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCAgdGNvdW50OyAgICAgICAgIC8qIFR4IGJ5dGUgY291bnQgKi8KKyAgICB1bnNpZ25lZCBsb25nICAgdHRlbXA7ICAgICAgICAgIC8qIFR4IHRlbXAgKi8KK307CisKK3N0cnVjdCBzbWNfdWFydF9wcmFtIHsKKyAgICB1bnNpZ25lZCBzaG9ydCAgcmJhc2U7ICAgICAgICAgIC8qIFJ4IEJEIEJhc2UgQWRkcmVzcyAqLworICAgIHVuc2lnbmVkIHNob3J0ICB0YmFzZTsgICAgICAgICAgLyogVHggQkQgQmFzZSBBZGRyZXNzICovCisgICAgdW5zaWduZWQgY2hhciAgIHJmY3I7ICAgICAgICAgICAvKiBSeCBmdW5jdGlvbiBjb2RlICovCisgICAgdW5zaWduZWQgY2hhciAgIHRmY3I7ICAgICAgICAgICAvKiBUeCBmdW5jdGlvbiBjb2RlICovCisgICAgdW5zaWduZWQgc2hvcnQgIG1yYmxyOyAgICAgICAgICAvKiBSeCBidWZmZXIgbGVuZ3RoICovCisgICAgdW5zaWduZWQgbG9uZyAgIHJzdGF0ZTsgICAgICAgICAvKiBSeCBpbnRlcm5hbCBzdGF0ZSAqLworICAgIHVuc2lnbmVkIGxvbmcgICBycHRyOyAgICAgICAgICAgLyogUnggaW50ZXJuYWwgZGF0YSBwb2ludGVyICovCisgICAgdW5zaWduZWQgc2hvcnQgIHJicHRyOyAgICAgICAgICAvKiByYiBCRCBQb2ludGVyICovCisgICAgdW5zaWduZWQgc2hvcnQgIHJjb3VudDsgICAgICAgICAvKiBSeCBpbnRlcm5hbCBieXRlIGNvdW50ICovCisgICAgdW5zaWduZWQgbG9uZyAgIHJ0ZW1wOyAgICAgICAgICAvKiBSeCB0ZW1wICovCisgICAgdW5zaWduZWQgbG9uZyAgIHRzdGF0ZTsgICAgICAgICAvKiBUeCBpbnRlcm5hbCBzdGF0ZSAqLworICAgIHVuc2lnbmVkIGxvbmcgICB0cHRyOyAgICAgICAgICAgLyogVHggaW50ZXJuYWwgZGF0YSBwb2ludGVyICovCisgICAgdW5zaWduZWQgc2hvcnQgIHRicHRyOyAgICAgICAgICAvKiBUeCBCRCBwb2ludGVyICovCisgICAgdW5zaWduZWQgc2hvcnQgIHRjb3VudDsgICAgICAgICAvKiBUeCBieXRlIGNvdW50ICovCisgICAgdW5zaWduZWQgbG9uZyAgIHR0ZW1wOyAgICAgICAgICAvKiBUeCB0ZW1wICovCisgICAgdW5zaWduZWQgc2hvcnQgIG1heF9pZGw7ICAgICAgICAvKiBNYXhpbXVtIElETEUgQ2hhcmFjdGVycyAqLworICAgIHVuc2lnbmVkIHNob3J0ICBpZGxjOyAgICAgICAgICAgLyogVGVtcG9yYXJ5IElETEUgQ291bnRlciAqLworICAgIHVuc2lnbmVkIHNob3J0ICBicmtsbjsgICAgICAgICAgLyogTGFzdCBSeCBCcmVhayBMZW5ndGggKi8KKyAgICB1bnNpZ25lZCBzaG9ydCAgYnJrZWM7ICAgICAgICAgIC8qIFJ4IEJyZWFrIENvbmRpdGlvbiBDb3VudGVyICovCisgICAgdW5zaWduZWQgc2hvcnQgIGJya2NyOyAgICAgICAgICAvKiBCcmVhayBDb3VudCBSZWdpc3RlciAoVHgpICovCisgICAgdW5zaWduZWQgc2hvcnQgIHJfbWFzazsgICAgICAgICAvKiBUZW1wb3JhcnkgYml0IG1hc2sgKi8KK307CisKK3N0cnVjdCBzbWNfdHJuc3BfcHJhbSB7CisgICAgdW5zaWduZWQgc2hvcnQgIHJiYXNlOyAgICAgICAgICAvKiByeCBCRCBCYXNlIEFkZHJlc3MgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCAgdGJhc2U7ICAgICAgICAgIC8qIFR4IEJEIEJhc2UgQWRkcmVzcyAqLworICAgIHVuc2lnbmVkIGNoYXIgICByZmNyOyAgICAgICAgICAgLyogUnggZnVuY3Rpb24gY29kZSAqLworICAgIHVuc2lnbmVkIGNoYXIgICB0ZmNyOyAgICAgICAgICAgLyogVHggZnVuY3Rpb24gY29kZSAqLworICAgIHVuc2lnbmVkIHNob3J0ICBtcmJscjsgICAgICAgICAgLyogUnggYnVmZmVyIGxlbmd0aCAqLworICAgIHVuc2lnbmVkIGxvbmcgICByc3RhdGU7ICAgICAgICAgLyogUnggaW50ZXJuYWwgc3RhdGUgKi8KKyAgICB1bnNpZ25lZCBsb25nICAgcnB0cjsgICAgICAgICAgIC8qIFJ4IGludGVybmFsIGRhdGEgcG9pbnRlciAqLworICAgIHVuc2lnbmVkIHNob3J0ICByYnB0cjsgICAgICAgICAgLyogcmIgQkQgUG9pbnRlciAqLworICAgIHVuc2lnbmVkIHNob3J0ICByY291bnQ7ICAgICAgICAgLyogUnggaW50ZXJuYWwgYnl0ZSBjb3VudCAqLworICAgIHVuc2lnbmVkIGxvbmcgICBydGVtcDsgICAgICAgICAgLyogUnggdGVtcCAqLworICAgIHVuc2lnbmVkIGxvbmcgICB0c3RhdGU7ICAgICAgICAgLyogVHggaW50ZXJuYWwgc3RhdGUgKi8KKyAgICB1bnNpZ25lZCBsb25nICAgdHB0cjsgICAgICAgICAgIC8qIFR4IGludGVybmFsIGRhdGEgcG9pbnRlciAqLworICAgIHVuc2lnbmVkIHNob3J0ICB0YnB0cjsgICAgICAgICAgLyogVHggQkQgcG9pbnRlciAqLworICAgIHVuc2lnbmVkIHNob3J0ICB0Y291bnQ7ICAgICAgICAgLyogVHggYnl0ZSBjb3VudCAqLworICAgIHVuc2lnbmVkIGxvbmcgICB0dGVtcDsgICAgICAgICAgLyogVHggdGVtcCAqLworICAgIHVuc2lnbmVkIHNob3J0ICByZXNlcnZlZFs1XTsgICAgLyogUmVzZXJ2ZWQgKi8KK307CisKK3N0cnVjdCBpZG1hX3ByYW0geworICAgIHVuc2lnbmVkIHNob3J0ICBpYmFzZTsgICAgICAgICAgLyogSURNQSBCRCBCYXNlIEFkZHJlc3MgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCAgaWJwdHI7ICAgICAgICAgIC8qIElETUEgYnVmZmVyIGRlc2NyaXB0b3IgcG9pbnRlciAqLworICAgIHVuc2lnbmVkIGxvbmcgICBpc3RhdGU7ICAgICAgICAgLyogSURNQSBpbnRlcm5hbCBzdGF0ZSAqLworICAgIHVuc2lnbmVkIGxvbmcgICBpdGVtcDsgICAgICAgICAgLyogSURNQSB0ZW1wICovCit9OworCitzdHJ1Y3QgZXRoZXJuZXRfcHJhbSB7CisgICAgLyoKKyAgICAgKiBTQ0MgcGFyYW1ldGVyIFJBTQorICAgICAqLworICAgIHVuc2lnbmVkIHNob3J0ICByYmFzZTsgICAgICAgICAgLyogUlggQkQgYmFzZSBhZGRyZXNzICovCisgICAgdW5zaWduZWQgc2hvcnQgIHRiYXNlOyAgICAgICAgICAvKiBUWCBCRCBiYXNlIGFkZHJlc3MgKi8KKyAgICB1bnNpZ25lZCBjaGFyICAgcmZjcjsgICAgICAgICAgIC8qIFJ4IGZ1bmN0aW9uIGNvZGUgKi8KKyAgICB1bnNpZ25lZCBjaGFyICAgdGZjcjsgICAgICAgICAgIC8qIFR4IGZ1bmN0aW9uIGNvZGUgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCAgbXJibHI7ICAgICAgICAgIC8qIFJ4IGJ1ZmZlciBsZW5ndGggKi8KKyAgICB1bnNpZ25lZCBsb25nICAgcnN0YXRlOyAgICAgICAgIC8qIFJ4IGludGVybmFsIHN0YXRlICovCisgICAgdW5zaWduZWQgbG9uZyAgIHJwdHI7ICAgICAgICAgICAvKiBSeCBpbnRlcm5hbCBkYXRhIHBvaW50ZXIgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCAgcmJwdHI7ICAgICAgICAgIC8qIHJiIEJEIFBvaW50ZXIgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCAgcmNvdW50OyAgICAgICAgIC8qIFJ4IGludGVybmFsIGJ5dGUgY291bnQgKi8KKyAgICB1bnNpZ25lZCBsb25nICAgcnRlbXA7ICAgICAgICAgIC8qIFJ4IHRlbXAgKi8KKyAgICB1bnNpZ25lZCBsb25nICAgdHN0YXRlOyAgICAgICAgIC8qIFR4IGludGVybmFsIHN0YXRlICovCisgICAgdW5zaWduZWQgbG9uZyAgIHRwdHI7ICAgICAgICAgICAvKiBUeCBpbnRlcm5hbCBkYXRhIHBvaW50ZXIgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCAgdGJwdHI7ICAgICAgICAgIC8qIFR4IEJEIHBvaW50ZXIgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCAgdGNvdW50OyAgICAgICAgIC8qIFR4IGJ5dGUgY291bnQgKi8KKyAgICB1bnNpZ25lZCBsb25nICAgdHRlbXA7ICAgICAgICAgIC8qIFR4IHRlbXAgKi8KKyAgICB1bnNpZ25lZCBsb25nICAgcmNyYzsgICAgICAgICAgIC8qIHRlbXAgcmVjZWl2ZSBDUkMgKi8KKyAgICB1bnNpZ25lZCBsb25nICAgdGNyYzsgICAgICAgICAgIC8qIHRlbXAgdHJhbnNtaXQgQ1JDICovCisgICAKKyAgICAvKgorICAgICAqIEVUSEVSTkVUIHNwZWNpZmljIHBhcmFtZXRlciBSQU0KKyAgICAgKi8KKyAgICB1bnNpZ25lZCBsb25nICAgY19wcmVzOyAgICAgICAgIC8qIHByZXNldCBDUkMgKi8KKyAgICB1bnNpZ25lZCBsb25nICAgY19tYXNrOyAgICAgICAgIC8qIGNvbnN0YW50IG1hc2sgZm9yIENSQyAqLworICAgIHVuc2lnbmVkIGxvbmcgICBjcmNlYzsgICAgICAgICAgLyogQ1JDIGVycm9yIGNvdW50ZXIgKi8KKyAgICB1bnNpZ25lZCBsb25nICAgYWxlYzsgICAgICAgICAgIC8qIGFsaWdobm1lbnQgZXJyb3IgY291bnRlciAqLworICAgIHVuc2lnbmVkIGxvbmcgICBkaXNmYzsgICAgICAgICAgLyogZGlzY2FyZCBmcmFtZSBjb3VudGVyICovCisgICAgdW5zaWduZWQgc2hvcnQgIHBhZHM7ICAgICAgICAgICAvKiBzaG9ydCBmcmFtZSBQQUQgY2hhcmFjdGVycyAqLworICAgIHVuc2lnbmVkIHNob3J0ICByZXRfbGltOyAgICAgICAgLyogcmV0cnkgbGltaXQgdGhyZXNob2xkICovCisgICAgdW5zaWduZWQgc2hvcnQgIHJldF9jbnQ7ICAgICAgICAvKiByZXRyeSBsaW1pdCBjb3VudGVyICovCisgICAgdW5zaWduZWQgc2hvcnQgIG1mbHI7ICAgICAgICAgICAvKiBtYXhpbXVtIGZyYW1lIGxlbmd0aCByZWcgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCAgbWluZmxyOyAgICAgICAgIC8qIG1pbmltdW0gZnJhbWUgbGVuZ3RoIHJlZyAqLworICAgIHVuc2lnbmVkIHNob3J0ICBtYXhkMTsgICAgICAgICAgLyogbWF4aW11bSBETUExIGxlbmd0aCByZWcgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCAgbWF4ZDI7ICAgICAgICAgIC8qIG1heGltdW0gRE1BMiBsZW5ndGggcmVnICovCisgICAgdW5zaWduZWQgc2hvcnQgIG1heGQ7ICAgICAgICAgICAvKiByeCBtYXggRE1BICovCisgICAgdW5zaWduZWQgc2hvcnQgIGRtYV9jbnQ7ICAgICAgICAvKiByeCBkbWEgY291bnRlciAqLworICAgIHVuc2lnbmVkIHNob3J0ICBtYXhfYjsgICAgICAgICAgLyogbWF4IGJkIGJ5dGUgY291bnQgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCAgZ2FkZHIxOyAgICAgICAgIC8qIGdyb3VwIGFkZHJlc3MgZmlsdGVyIDEgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCAgZ2FkZHIyOyAgICAgICAgIC8qIGdyb3VwIGFkZHJlc3MgZmlsdGVyIDIgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCAgZ2FkZHIzOyAgICAgICAgIC8qIGdyb3VwIGFkZHJlc3MgZmlsdGVyIDMgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCAgZ2FkZHI0OyAgICAgICAgIC8qIGdyb3VwIGFkZHJlc3MgZmlsdGVyIDQgKi8KKyAgICB1bnNpZ25lZCBsb25nICAgdGJ1ZjBfZGF0YTA7ICAgIC8qIHNhdmUgYXJlYSAwIC0gY3VycmVudCBmcm0gKi8KKyAgICB1bnNpZ25lZCBsb25nICAgdGJ1ZjBfZGF0YTE7ICAgIC8qIHNhdmUgYXJlYSAxIC0gY3VycmVudCBmcm0gKi8KKyAgICB1bnNpZ25lZCBsb25nICAgdGJ1ZjBfcmJhMDsKKyAgICB1bnNpZ25lZCBsb25nICAgdGJ1ZjBfY3JjOworICAgIHVuc2lnbmVkIHNob3J0ICB0YnVmMF9iY250OworICAgIHVuaW9uIHsKKyAgICAgICAgdW5zaWduZWQgY2hhciBiWzZdOworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgaGlnaDsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IG1pZGRsOworICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgbG93OworICAgICAgICB9IHc7CisgICAgfSBwYWRkcjsKKyAgICB1bnNpZ25lZCBzaG9ydCAgcF9wZXI7ICAgICAgICAgIC8qIHBlcnNpc3RlbmNlICovCisgICAgdW5zaWduZWQgc2hvcnQgIHJmYmRfcHRyOyAgICAgICAvKiByeCBmaXJzdCBiZCBwb2ludGVyICovCisgICAgdW5zaWduZWQgc2hvcnQgIHRmYmRfcHRyOyAgICAgICAvKiB0eCBmaXJzdCBiZCBwb2ludGVyICovCisgICAgdW5zaWduZWQgc2hvcnQgIHRsYmRfcHRyOyAgICAgICAvKiB0eCBsYXN0IGJkIHBvaW50ZXIgKi8KKyAgICB1bnNpZ25lZCBsb25nICAgdGJ1ZjFfZGF0YTA7ICAgIC8qIHNhdmUgYXJlYSAwIC0gbmV4dCBmcmFtZSAqLworICAgIHVuc2lnbmVkIGxvbmcgICB0YnVmMV9kYXRhMTsgICAgLyogc2F2ZSBhcmVhIDEgLSBuZXh0IGZyYW1lICovCisgICAgdW5zaWduZWQgbG9uZyAgIHRidWYxX3JiYTA7CisgICAgdW5zaWduZWQgbG9uZyAgIHRidWYxX2NyYzsKKyAgICB1bnNpZ25lZCBzaG9ydCAgdGJ1ZjFfYmNudDsKKyAgICB1bnNpZ25lZCBzaG9ydCAgdHhfbGVuOyAgICAgICAgIC8qIHR4IGZyYW1lIGxlbmd0aCBjb3VudGVyICovCisgICAgdW5zaWduZWQgc2hvcnQgIGlhZGRyMTsgICAgICAgICAvKiBpbmRpdmlkdWFsIGFkZHJlc3MgZmlsdGVyIDEqLworICAgIHVuc2lnbmVkIHNob3J0ICBpYWRkcjI7ICAgICAgICAgLyogaW5kaXZpZHVhbCBhZGRyZXNzIGZpbHRlciAyKi8KKyAgICB1bnNpZ25lZCBzaG9ydCAgaWFkZHIzOyAgICAgICAgIC8qIGluZGl2aWR1YWwgYWRkcmVzcyBmaWx0ZXIgMyovCisgICAgdW5zaWduZWQgc2hvcnQgIGlhZGRyNDsgICAgICAgICAvKiBpbmRpdmlkdWFsIGFkZHJlc3MgZmlsdGVyIDQqLworICAgIHVuc2lnbmVkIHNob3J0ICBib2ZmX2NudDsgICAgICAgLyogYmFjay1vZmYgY291bnRlciAqLworICAgIHVuc2lnbmVkIHNob3J0ICB0YWRkcl9oOyAgICAgICAgLyogdGVtcCBhZGRyZXNzIChNU0IpICovCisgICAgdW5zaWduZWQgc2hvcnQgIHRhZGRyX207ICAgICAgICAvKiB0ZW1wIGFkZHJlc3MgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCAgdGFkZHJfbDsgICAgICAgIC8qIHRlbXAgYWRkcmVzcyAoTFNCKSAqLworfTsKKworc3RydWN0IHRyYW5zcGFyZW50X3ByYW0geworICAgIC8qCisgICAgICogU0NDIHBhcmFtZXRlciBSQU0KKyAgICAgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCAgcmJhc2U7ICAgICAgICAgIC8qIFJYIEJEIGJhc2UgYWRkcmVzcyAqLworICAgIHVuc2lnbmVkIHNob3J0ICB0YmFzZTsgICAgICAgICAgLyogVFggQkQgYmFzZSBhZGRyZXNzICovCisgICAgdW5zaWduZWQgY2hhciAgIHJmY3I7ICAgICAgICAgICAvKiBSeCBmdW5jdGlvbiBjb2RlICovCisgICAgdW5zaWduZWQgY2hhciAgIHRmY3I7ICAgICAgICAgICAvKiBUeCBmdW5jdGlvbiBjb2RlICovCisgICAgdW5zaWduZWQgc2hvcnQgIG1yYmxyOyAgICAgICAgICAvKiBSeCBidWZmZXIgbGVuZ3RoICovCisgICAgdW5zaWduZWQgbG9uZyAgIHJzdGF0ZTsgICAgICAgICAvKiBSeCBpbnRlcm5hbCBzdGF0ZSAqLworICAgIHVuc2lnbmVkIGxvbmcgICBycHRyOyAgICAgICAgICAgLyogUnggaW50ZXJuYWwgZGF0YSBwb2ludGVyICovCisgICAgdW5zaWduZWQgc2hvcnQgIHJicHRyOyAgICAgICAgICAvKiByYiBCRCBQb2ludGVyICovCisgICAgdW5zaWduZWQgc2hvcnQgIHJjb3VudDsgICAgICAgICAvKiBSeCBpbnRlcm5hbCBieXRlIGNvdW50ICovCisgICAgdW5zaWduZWQgbG9uZyAgIHJ0ZW1wOyAgICAgICAgICAvKiBSeCB0ZW1wICovCisgICAgdW5zaWduZWQgbG9uZyAgIHRzdGF0ZTsgICAgICAgICAvKiBUeCBpbnRlcm5hbCBzdGF0ZSAqLworICAgIHVuc2lnbmVkIGxvbmcgICB0cHRyOyAgICAgICAgICAgLyogVHggaW50ZXJuYWwgZGF0YSBwb2ludGVyICovCisgICAgdW5zaWduZWQgc2hvcnQgIHRicHRyOyAgICAgICAgICAvKiBUeCBCRCBwb2ludGVyICovCisgICAgdW5zaWduZWQgc2hvcnQgIHRjb3VudDsgICAgICAgICAvKiBUeCBieXRlIGNvdW50ICovCisgICAgdW5zaWduZWQgbG9uZyAgIHR0ZW1wOyAgICAgICAgICAvKiBUeCB0ZW1wICovCisgICAgdW5zaWduZWQgbG9uZyAgIHJjcmM7ICAgICAgICAgICAvKiB0ZW1wIHJlY2VpdmUgQ1JDICovCisgICAgdW5zaWduZWQgbG9uZyAgIHRjcmM7ICAgICAgICAgICAvKiB0ZW1wIHRyYW5zbWl0IENSQyAqLworICAgCisgICAgLyoKKyAgICAgKiBUUkFOU1BBUkVOVCBzcGVjaWZpYyBwYXJhbWV0ZXIgUkFNCisgICAgICovCisgICAgdW5zaWduZWQgbG9uZyAgIGNyY19wOyAgICAgICAgICAvKiBDUkMgUHJlc2V0ICovCisgICAgdW5zaWduZWQgbG9uZyAgIGNyY19jOyAgICAgICAgICAvKiBDUkMgY29uc3RhbnQgKi8KK307CisKK3N0cnVjdCB0aW1lcl9wcmFtIHsKKyAgICAvKgorICAgICAqIFJJU0MgdGltZXJzIHBhcmFtZXRlciBSQU0KKyAgICAgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCAgdG1fYmFzZTsgICAgICAgIC8qIFJJU0MgdGltZXIgdGFibGUgYmFzZSBhZHIgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCAgdG1fcHRyOyAgICAgICAgIC8qIFJJU0MgdGltZXIgdGFibGUgcG9pbnRlciAqLworICAgIHVuc2lnbmVkIHNob3J0ICByX3RtcjsgICAgICAgICAgLyogUklTQyB0aW1lciBtb2RlIHJlZ2lzdGVyICovCisgICAgdW5zaWduZWQgc2hvcnQgIHJfdG12OyAgICAgICAgICAvKiBSSVNDIHRpbWVyIHZhbGlkIHJlZ2lzdGVyICovCisgICAgdW5zaWduZWQgbG9uZyAgIHRtX2NtZDsgICAgICAgICAvKiBSSVNDIHRpbWVyIGNtZCByZWdpc3RlciAqLworICAgIHVuc2lnbmVkIGxvbmcgICB0bV9jbnQ7ICAgICAgICAgLyogUklTQyB0aW1lciBpbnRlcm5hbCBjbnQgKi8KK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L202ODM2MF9xdWljYy5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L202ODM2MF9xdWljYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkNDBmNGQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbTY4MzYwX3F1aWNjLmgKQEAgLTAsMCArMSwzNjIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogJElkOiBtNjgzNjBfcXVpY2MuaCx2IDEuMSAyMDAyLzAzLzAyIDE1OjAxOjA3IGdlcmcgRXhwICQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlZmluaXRpb25zIG9mIFFVSUNDIG1lbW9yeSBzdHJ1Y3R1cmVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworI2lmbmRlZiBfX002ODM2MF9RVUlDQ19ICisjZGVmaW5lIF9fTTY4MzYwX1FVSUNDX0gKKworLyoKKyAqIGluY2x1ZGUgcmVnaXN0ZXJzIGFuZAorICogcGFyYW1ldGVyIHJhbSBkZWZpbml0aW9ucyBmaWxlcworICovCisjaW5jbHVkZSA8YXNtL202ODM2MF9yZWdzLmg+CisjaW5jbHVkZSA8YXNtL202ODM2MF9wcmFtLmg+CisKKworCisvKiBCdWZmZXIgRGVzY3JpcHRvcnMgKi8KK3R5cGVkZWYgc3RydWN0IHF1aWNjX2JkIHsKKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAgICAgc3RhdHVzOworICAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICAgICBsZW5ndGg7CisgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgICAgICpidWY7ICAgICAvKiBXQVJOSU5HOiBUaGlzIGlzIG9ubHkgdHJ1ZSBpZiAqY2hhciBpcyAzMiBiaXRzICovCit9IFFVSUNDX0JEOworCisKKyNpZmRlZiBNT1RPUk9MQV9PUklHSU5BTAorc3RydWN0IHVzZXJfZGF0YSB7CisgICAgLyogQkFTRSArIDB4MDAwOiB1c2VyIGRhdGEgbWVtb3J5ICovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgICAgIHVkYXRhX2JkX3Vjb2RlWzB4NDAwXTsgLyp1c2VyIGRhdGEgYmQncyBVY29kZSovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgICAgIHVkYXRhX2JkWzB4MjAwXTsgICAgICAgLyp1c2VyIGRhdGEgVWNvZGUgICAgICovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgICAgIHVjb2RlX2V4dFsweDEwMF07ICAgICAgLypVY29kZSBFeHRlbnRpb24gcmFtICovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgICAgIFJFU0VSVkVEMVsweDUwMF07ICAgICAgLyogUmVzZXJ2ZWQgYXJlYSAgICAgICovCit9OworI2Vsc2UKK3N0cnVjdCB1c2VyX2RhdGEgeworICAgIC8qIEJBU0UgKyAweDAwMDogdXNlciBkYXRhIG1lbW9yeSAqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgICAgICB1ZGF0YV9iZF91Y29kZVsweDQwMF07IC8qIHVzZXIgZGF0YSwgYmRzLCBVY29kZSovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgICAgIHVkYXRhX2JkMVsweDIwMF07ICAgICAgIC8qIHVzZXIsIGJkcyAqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgICAgICB1Y29kZV9iZF9zY3JhdGNoWzB4MTAwXTsgLyogdXNlciwgYmRzLCB1Y29kZSBzY3JhdGNoICovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgICAgIHVkYXRhX2JkMlsweDEwMF07ICAgICAgIC8qIHVzZXIsIGJkcyAqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgICAgICBSRVNFUlZFRDFbMHg0MDBdOyAgICAgIC8qIFJlc2VydmVkIGFyZWEgICAgICAqLworfTsKKyNlbmRpZgorCisKKy8qCisgKiBpbnRlcm5hbCByYW0KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcXVpY2MgeworCXVuaW9uIHsKKwkJc3RydWN0IHF1aWNjMzJfcHJhbSBjaF9wcmFtX3RibFszMl07CS8qIDMyKjY0KGJ5dGVzKSBwZXIgY2hhbm5lbCAqLwkKKwkJc3RydWN0IHVzZXJfZGF0YQkJdTsKKwl9Y2hfb3JfdTsJLyogbXVsdGlwdWwgb3IgdXNlciBzcGFjZSAqLworCisgICAgLyogQkFTRSArIDB4YzAwOiBQQVJBTUVURVIgUkFNICovCisJdW5pb24geworCQlzdHJ1Y3Qgc2NjX3ByYW0geworCQkJdW5pb24geworCQkJCXN0cnVjdCBoZGxjX3ByYW0gICAgICAgIGg7CisJCQkJc3RydWN0IHVhcnRfcHJhbSAgICAgICAgdTsKKwkJCQlzdHJ1Y3QgYmlzeW5jX3ByYW0gICAgICBiOworCQkJCXN0cnVjdCB0cmFuc3BhcmVudF9wcmFtIHQ7CisJCQkJdW5zaWduZWQgY2hhciAgIFJFU0VSVkVENjZbMHg3MF07CisJCQl9IHBzY2M7ICAgICAgICAgICAgICAgLyogc2NjIHBhcmFtZXRlciBhcmVhIChwcm90b2NvbCBkZXBlbmRlbnQpICovCisJCQl1bmlvbiB7CisJCQkJc3RydWN0IHsKKwkJCQkJdW5zaWduZWQgY2hhciAgICAgICBSRVNFUlZFRDcwWzB4MTBdOworCQkJCQlzdHJ1Y3Qgc3BpX3ByYW0gICAgIHNwaTsKKwkJCQkJdW5zaWduZWQgY2hhciAgICAgICBSRVNFUlZFRDcyWzB4OF07CisJCQkJCXN0cnVjdCB0aW1lcl9wcmFtICAgdGltZXI7CisJCQkJfSB0aW1lcl9zcGk7CisJCQkJc3RydWN0IHsKKwkJCQkJc3RydWN0IGlkbWFfcHJhbSBpZG1hOworCQkJCQl1bnNpZ25lZCBjaGFyICAgICAgIFJFU0VSVkVENjdbMHg0XTsKKwkJCQkJdW5pb24geworCQkJCQkJc3RydWN0IHNtY191YXJ0X3ByYW0gdTsKKwkJCQkJCXN0cnVjdCBzbWNfdHJuc3BfcHJhbSB0OworCQkJCQl9IHBzbWM7CisJCQkJfSBpZG1hX3NtYzsKKwkJCX0gcG90aGVyczsKKwkJfSBzY2M7CisJCXN0cnVjdCBldGhlcm5ldF9wcmFtICAgIGVuZXRfc2NjOworCQlzdHJ1Y3QgZ2xvYmFsX211bHRpX3ByYW0gICAgICAgIG07CisJCXVuc2lnbmVkIGNoYXIgICBwclsweDEwMF07CisJfSBwcmFtWzRdOworCisgICAgLyogcmVzZXJ2ZWQgKi8KKworICAgIC8qIEJBU0UgKyAweDEwMDA6IElOVEVSTkFMIFJFR0lTVEVSUyAqLworICAgIC8qIFNJTSAqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgICAgICBzaW1fbWNyOyAgICAgICAgLyogbW9kdWxlIGNvbmZpZ3VyYXRpb24gcmVnICovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgICAgIHNpbV9zaW10cjsgICAgICAvKiBtb2R1bGUgdGVzdCByZWdpc3RlciAgICAgKi8KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICAgICAgUkVTRVJWRUQyWzB4Ml07IC8qIFJlc2VydmVkIGFyZWEgICAgICAgICAgICAqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgICAgICBzaW1fYXZyOyAgICAgICAgLyogYXV0byB2ZWN0b3IgcmVnICAgICAgICAgICovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgICAgIHNpbV9yc3I7ICAgICAgICAvKiByZXNldCBzdGF0dXMgcmVnICAgICAgICAgKi8KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICAgICAgUkVTRVJWRUQzWzB4Ml07IC8qIFJlc2VydmVkIGFyZWEgICAgICAgICAgICAqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgICAgICBzaW1fY2xrb2NyOyAgICAgLyogQ0xDTyBjb250cm9sIHJlZ2lzdGVyICAgICovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgICAgIFJFU0VSVkVENjJbMHgzXTsgICAgICAgIC8qIFJlc2VydmVkIGFyZWEgICAgKi8KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAgICAgc2ltX3BsbGNyOyAgICAgIC8qIFBMTCBjb250cm9sIHJlZ2lzdGVyICAgICAqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgICAgICBSRVNFUlZFRDYzWzB4Ml07ICAgICAgICAvKiBSZXNlcnZlZCBhcmVhICAgICovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgICAgIHNpbV9jZHZjcjsgICAgICAvKiBDbG9jayBkZXZpZGVyIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAgICAgc2ltX3BlcGFyOyAgICAgIC8qIFBvcnQgRSBwaW4gYXNzaWdubWVudCByZWdpc3RlciAqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgICAgICBSRVNFUlZFRDY0WzB4YV07ICAgICAgICAvKiBSZXNlcnZlZCBhcmVhICAgICovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgICAgIHNpbV9zeXBjcjsgICAgICAvKiBzeXN0ZW0gcHJvdGVjdGlvbiBjb250cm9sKi8KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICAgICAgc2ltX3N3aXY7ICAgICAgIC8qIHNvZnR3YXJlIGludGVycnVwdCB2ZWN0b3IqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgICAgICBSRVNFUlZFRDZbMHgyXTsgLyogUmVzZXJ2ZWQgYXJlYSAgICAgICAgICAgICovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgICAgIHNpbV9waWNyOyAgICAgICAvKiBwZXJpb2RpYyBpbnRlcnJ1cHQgY29udHJvbCByZWcgKi8KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICAgICAgUkVTRVJWRUQ3WzB4Ml07IC8qIFJlc2VydmVkIGFyZWEgICAgICAgICAgICAqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICAgICBzaW1fcGl0cjsgICAgICAgLyogcGVyaW9kaWMgaW50ZXJydXB0IHRpbWluZyByZWcgKi8KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICAgICAgUkVTRVJWRUQ4WzB4M107IC8qIFJlc2VydmVkIGFyZWEgICAgICAgICAgICAqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgICAgICBzaW1fc3dzcjsgICAgICAgLyogc29mdHdhcmUgc2VydmljZSAgICAgICAgICovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAgICAgIHNpbV9ia2FyOyAgICAgICAvKiBicmVha3BvaW50IGFkZHJlc3MgcmVnaXN0ZXIqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgICAgICBzaW1fYmtjcjsgICAgICAgLyogYnJlYWtwb2ludCBjb250cm9sIHJlZ2lzdGVyKi8KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICAgICAgUkVTRVJWRUQxMFsweDhdOyAgICAgICAgLyogUmVzZXJ2ZWQgYXJlYSAgICAqLworICAgIC8qIE1FTUMgKi8KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICAgICAgbWVtY19nbXI7ICAgICAgIC8qIEdsb2JhbCBtZW1vcnkgcmVnaXN0ZXIgICAqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICAgICBtZW1jX21zdGF0OyAgICAgLyogTUVNQyBzdGF0dXMgcmVnaXN0ZXIgICAgICovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgICAgIFJFU0VSVkVEMTFbMHhhXTsgICAgICAgIC8qIFJlc2VydmVkIGFyZWEgICAgKi8KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICAgICAgbWVtY19icjA7ICAgICAgIC8qIGJhc2UgcmVnaXN0ZXIgMCAgICAgICAgICAqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgICAgICBtZW1jX29yMDsgICAgICAgLyogb3B0aW9uIHJlZ2lzdGVyIDAgICAgICAgICovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgICAgIFJFU0VSVkVEMTJbMHg4XTsgICAgICAgIC8qIFJlc2VydmVkIGFyZWEgICAgKi8KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICAgICAgbWVtY19icjE7ICAgICAgIC8qIGJhc2UgcmVnaXN0ZXIgMSAgICAgICAgICAqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgICAgICBtZW1jX29yMTsgICAgICAgLyogb3B0aW9uIHJlZ2lzdGVyIDEgICAgICAgICovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgICAgIFJFU0VSVkVEMTNbMHg4XTsgICAgICAgIC8qIFJlc2VydmVkIGFyZWEgICAgKi8KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICAgICAgbWVtY19icjI7ICAgICAgIC8qIGJhc2UgcmVnaXN0ZXIgMiAgICAgICAgICAqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgICAgICBtZW1jX29yMjsgICAgICAgLyogb3B0aW9uIHJlZ2lzdGVyIDIgICAgICAgICovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgICAgIFJFU0VSVkVEMTRbMHg4XTsgICAgICAgIC8qIFJlc2VydmVkIGFyZWEgICAgKi8KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICAgICAgbWVtY19icjM7ICAgICAgIC8qIGJhc2UgcmVnaXN0ZXIgMyAgICAgICAgICAqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgICAgICBtZW1jX29yMzsgICAgICAgLyogb3B0aW9uIHJlZ2lzdGVyIDMgICAgICAgICovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgICAgIFJFU0VSVkVEMTVbMHg4XTsgICAgICAgIC8qIFJlc2VydmVkIGFyZWEgICAgKi8KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICAgICAgbWVtY19icjQ7ICAgICAgIC8qIGJhc2UgcmVnaXN0ZXIgMyAgICAgICAgICAqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgICAgICBtZW1jX29yNDsgICAgICAgLyogb3B0aW9uIHJlZ2lzdGVyIDMgICAgICAgICovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgICAgIFJFU0VSVkVEMTZbMHg4XTsgICAgICAgIC8qIFJlc2VydmVkIGFyZWEgICAgKi8KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICAgICAgbWVtY19icjU7ICAgICAgIC8qIGJhc2UgcmVnaXN0ZXIgMyAgICAgICAgICAqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgICAgICBtZW1jX29yNTsgICAgICAgLyogb3B0aW9uIHJlZ2lzdGVyIDMgICAgICAgICovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgICAgIFJFU0VSVkVEMTdbMHg4XTsgICAgICAgIC8qIFJlc2VydmVkIGFyZWEgICAgKi8KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICAgICAgbWVtY19icjY7ICAgICAgIC8qIGJhc2UgcmVnaXN0ZXIgMyAgICAgICAgICAqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgICAgICBtZW1jX29yNjsgICAgICAgLyogb3B0aW9uIHJlZ2lzdGVyIDMgICAgICAgICovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgICAgIFJFU0VSVkVEMThbMHg4XTsgICAgICAgIC8qIFJlc2VydmVkIGFyZWEgICAgKi8KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICAgICAgbWVtY19icjc7ICAgICAgIC8qIGJhc2UgcmVnaXN0ZXIgMyAgICAgICAgICAqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgICAgICBtZW1jX29yNzsgICAgICAgLyogb3B0aW9uIHJlZ2lzdGVyIDMgICAgICAgICovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgICAgIFJFU0VSVkVEOVsweDI4XTsgICAgICAgIC8qIFJlc2VydmVkIGFyZWEgICAgKi8KKyAgICAvKiBURVNUICovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgICAgIHRlc3RfdHN0bXJhOyAgICAvKiBtYXN0ZXIgc2hpZnQgYSAgICAgICAgICAgKi8KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAgICAgdGVzdF90c3RtcmI7ICAgIC8qIG1hc3RlciBzaGlmdCBiICAgICAgICAgICAqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICAgICB0ZXN0X3RzdHNjOyAgICAgLyogc2hpZnQgY291bnQgICAgICAgICAgICAgICovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgICAgIHRlc3RfdHN0cmM7ICAgICAvKiByZXBldGl0aW9uIGNvdW50ZXIgICAgICAgKi8KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAgICAgdGVzdF9jcmVnOyAgICAgIC8qIGNvbnRyb2wgICAgICAgICAgICAgICAgICAqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICAgICB0ZXN0X2RyZWc7ICAgICAgLyogZGVzdHJpYnV0ZWQgcmVnaXN0ZXIgICAgICovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgICAgIFJFU0VSVkVENThbMHg0MDRdOyAgICAgIC8qIFJlc2VydmVkIGFyZWEgICAgKi8KKyAgICAvKiBJRE1BMSAqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICAgICBpZG1hX2ljY3I7ICAgICAgLyogY2hhbm5lbCBjb25maWd1cmF0aW9uIHJlZyovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgICAgIFJFU0VSVkVEMTlbMHgyXTsgICAgICAgIC8qIFJlc2VydmVkIGFyZWEgICAgKi8KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAgICAgaWRtYTFfY21yOyAgICAgIC8qIGRtYSBtb2RlIHJlZyAgICAgICAgICAgICAqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgICAgICBSRVNFUlZFRDY4WzB4Ml07ICAgICAgICAvKiBSZXNlcnZlZCBhcmVhICAgICovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAgICAgIGlkbWExX3NhcHI7ICAgICAvKiBkbWEgc291cmNlIGFkZHIgcHRyICAgICAgKi8KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICAgICAgaWRtYTFfZGFwcjsgICAgIC8qIGRtYSBkZXN0aW5hdGlvbiBhZGRyIHB0ciAqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgICAgICBpZG1hMV9iY3I7ICAgICAgLyogZG1hIGJ5dGUgY291bnQgcmVnICAgICAgICovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgICAgIGlkbWExX2ZjcjsgICAgICAvKiBmdW5jdGlvbiBjb2RlIHJlZyAgICAgICAgKi8KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICAgICAgUkVTRVJWRUQyMDsgICAgIC8qIFJlc2VydmVkIGFyZWEgICAgICAgICAgICAqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgICAgICBpZG1hMV9jbWFyOyAgICAgLyogY2hhbm5lbCBtYXNrIHJlZyAgICAgICAgICovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgICAgIFJFU0VSVkVEMjE7ICAgICAvKiBSZXNlcnZlZCBhcmVhICAgICAgICAgICAgKi8KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICAgICAgaWRtYTFfY3NyOyAgICAgIC8qIGNoYW5uZWwgc3RhdHVzIHJlZyAgICAgICAqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgICAgICBSRVNFUlZFRDIyWzB4M107ICAgICAgICAvKiBSZXNlcnZlZCBhcmVhICAgICovCisgICAgLyogU0RNQSAqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgICAgICBzZG1hX3Nkc3I7ICAgICAgLyogc3RhdHVzIHJlZyAgICAgICAgICAgICAgICovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgICAgIFJFU0VSVkVEMjM7ICAgICAvKiBSZXNlcnZlZCBhcmVhICAgICAgICAgICAgKi8KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAgICAgc2RtYV9zZGNyOyAgICAgIC8qIGNvbmZpZ3VyYXRpb24gcmVnICAgICAgICAqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgICAgICBzZG1hX3NkYXI7ICAgICAgLyogYWRkcmVzcyByZWcgICAgICAgICAgICAgICovCisgICAgLyogSURNQTIgKi8KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICAgICAgUkVTRVJWRUQ2OVsweDJdOyAgICAgICAgLyogUmVzZXJ2ZWQgYXJlYSAgICAqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICAgICBpZG1hMl9jbXI7ICAgICAgLyogZG1hIG1vZGUgcmVnICAgICAgICAgICAgICovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAgICAgIGlkbWEyX3NhcHI7ICAgICAvKiBkbWEgc291cmNlIGFkZHIgcHRyICAgICAgKi8KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICAgICAgaWRtYTJfZGFwcjsgICAgIC8qIGRtYSBkZXN0aW5hdGlvbiBhZGRyIHB0ciAqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgICAgICBpZG1hMl9iY3I7ICAgICAgLyogZG1hIGJ5dGUgY291bnQgcmVnICAgICAgICovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgICAgIGlkbWEyX2ZjcjsgICAgICAvKiBmdW5jdGlvbiBjb2RlIHJlZyAgICAgICAgKi8KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICAgICAgUkVTRVJWRUQyNDsgICAgIC8qIFJlc2VydmVkIGFyZWEgICAgICAgICAgICAqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgICAgICBpZG1hMl9jbWFyOyAgICAgLyogY2hhbm5lbCBtYXNrIHJlZyAgICAgICAgICovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgICAgIFJFU0VSVkVEMjU7ICAgICAvKiBSZXNlcnZlZCBhcmVhICAgICAgICAgICAgKi8KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICAgICAgaWRtYTJfY3NyOyAgICAgIC8qIGNoYW5uZWwgc3RhdHVzIHJlZyAgICAgICAqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgICAgICBSRVNFUlZFRDI2WzB4N107ICAgICAgICAvKiBSZXNlcnZlZCBhcmVhICAgICovCisgICAgLyogSW50ZXJydXB0IENvbnRyb2xsZXIgKi8KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICAgICAgaW50cl9jaWNyOyAgICAgIC8qIENQIGludGVycnVwdCBjb25maWd1cmF0aW9uIHJlZyovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAgICAgIGludHJfY2lwcjsgICAgICAvKiBDUCBpbnRlcnJ1cHQgcGVuZGluZyByZWcgKi8KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICAgICAgaW50cl9jaW1yOyAgICAgIC8qIENQIGludGVycnVwdCBtYXNrIHJlZyAgICAqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgICAgICBpbnRyX2Npc3I7ICAgICAgLyogQ1AgaW50ZXJydXB0IGluIHNlcnZpY2UgcmVnKi8KKyAgICAvKiBQYXJhbGxlbCBJL08gKi8KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAgICAgcGlvX3BhZGlyOyAgICAgIC8qIHBvcnQgQSBkYXRhIGRpcmVjdGlvbiByZWcgKi8KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAgICAgcGlvX3BhcGFyOyAgICAgIC8qIHBvcnQgQSBwaW4gYXNzaWdubWVudCByZWcgKi8KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAgICAgcGlvX3Bhb2RyOyAgICAgIC8qIHBvcnQgQSBvcGVuIGRyYWluIHJlZyAgICAqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICAgICBwaW9fcGFkYXQ7ICAgICAgLyogcG9ydCBBIGRhdGEgcmVnaXN0ZXIgICAgICovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgICAgIFJFU0VSVkVEMjhbMHg4XTsgICAgICAgIC8qIFJlc2VydmVkIGFyZWEgICAgKi8KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAgICAgcGlvX3BjZGlyOyAgICAgIC8qIHBvcnQgQyBkYXRhIGRpcmVjdGlvbiByZWcqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICAgICBwaW9fcGNwYXI7ICAgICAgLyogcG9ydCBDIHBpbiBhc3NpZ25tZW50IHJlZyovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgICAgIHBpb19wY3NvOyAgICAgICAvKiBwb3J0IEMgc3BlY2lhbCBvcHRpb25zICAgKi8KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAgICAgcGlvX3BjZGF0OyAgICAgIC8qIHBvcnQgQyBkYXRhIHJlZ2lzdGVyICAgICAqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICAgICBwaW9fcGNpbnQ7ICAgICAgLyogcG9ydCBDIGludGVycnVwdCBjbnRybCByZWcgKi8KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICAgICAgUkVTRVJWRUQyOVsweDE2XTsgICAgICAgLyogUmVzZXJ2ZWQgYXJlYSAgICAqLworICAgIC8qIFRpbWVyICovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgICAgIHRpbWVyX3RnY3I7ICAgICAvKiB0aW1lciBnbG9iYWwgY29uZmlndXJhdGlvbiByZWcgKi8KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICAgICAgUkVTRVJWRUQzMFsweGVdOyAgICAgICAgLyogUmVzZXJ2ZWQgYXJlYSAgICAqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICAgICB0aW1lcl90bXIxOyAgICAgLyogdGltZXIgMSBtb2RlIHJlZyAgICAgICAgICovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgICAgIHRpbWVyX3RtcjI7ICAgICAvKiB0aW1lciAyIG1vZGUgcmVnICAgICAgICAgKi8KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAgICAgdGltZXJfdHJyMTsgICAgIC8qIHRpbWVyIDEgcmVmZXJhbmNlIHJlZyAgICAqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICAgICB0aW1lcl90cnIyOyAgICAgLyogdGltZXIgMiByZWZlcmFuY2UgcmVnICAgICovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgICAgIHRpbWVyX3RjcjE7ICAgICAvKiB0aW1lciAxIGNhcHR1cmUgcmVnICAgICAgKi8KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAgICAgdGltZXJfdGNyMjsgICAgIC8qIHRpbWVyIDIgY2FwdHVyZSByZWcgICAgICAqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICAgICB0aW1lcl90Y24xOyAgICAgLyogdGltZXIgMSBjb3VudGVyIHJlZyAgICAgICovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgICAgIHRpbWVyX3RjbjI7ICAgICAvKiB0aW1lciAyIGNvdW50ZXIgcmVnICAgICAgKi8KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAgICAgdGltZXJfdG1yMzsgICAgIC8qIHRpbWVyIDMgbW9kZSByZWcgICAgICAgICAqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICAgICB0aW1lcl90bXI0OyAgICAgLyogdGltZXIgNCBtb2RlIHJlZyAgICAgICAgICovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgICAgIHRpbWVyX3RycjM7ICAgICAvKiB0aW1lciAzIHJlZmVyYW5jZSByZWcgICAgKi8KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAgICAgdGltZXJfdHJyNDsgICAgIC8qIHRpbWVyIDQgcmVmZXJhbmNlIHJlZyAgICAqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICAgICB0aW1lcl90Y3IzOyAgICAgLyogdGltZXIgMyBjYXB0dXJlIHJlZyAgICAgICovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgICAgIHRpbWVyX3RjcjQ7ICAgICAvKiB0aW1lciA0IGNhcHR1cmUgcmVnICAgICAgKi8KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAgICAgdGltZXJfdGNuMzsgICAgIC8qIHRpbWVyIDMgY291bnRlciByZWcgICAgICAqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICAgICB0aW1lcl90Y240OyAgICAgLyogdGltZXIgNCBjb3VudGVyIHJlZyAgICAgICovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgICAgIHRpbWVyX3RlcjE7ICAgICAvKiB0aW1lciAxIGV2ZW50IHJlZyAgICAgICAgKi8KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAgICAgdGltZXJfdGVyMjsgICAgIC8qIHRpbWVyIDIgZXZlbnQgcmVnICAgICAgICAqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICAgICB0aW1lcl90ZXIzOyAgICAgLyogdGltZXIgMyBldmVudCByZWcgICAgICAgICovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgICAgIHRpbWVyX3RlcjQ7ICAgICAvKiB0aW1lciA0IGV2ZW50IHJlZyAgICAgICAgKi8KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICAgICAgUkVTRVJWRUQzNFsweDhdOyAgICAgICAgLyogUmVzZXJ2ZWQgYXJlYSAgICAqLworICAgIC8qIENQICovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgICAgIGNwX2NyOyAgICAgICAgICAvKiBjb21tYW5kIHJlZ2lzdGVyICAgICAgICAgKi8KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICAgICAgUkVTRVJWRUQzNVsweDJdOyAgICAgICAgLyogUmVzZXJ2ZWQgYXJlYSAgICAqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICAgICBjcF9yY2NyOyAgICAgICAgLyogbWFpbiBjb25maWd1cmF0aW9uIHJlZyAgICovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgICAgIFJFU0VSVkVEMzc7ICAgICAvKiBSZXNlcnZlZCBhcmVhICAgICAgICAgICAgKi8KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICAgICAgY3Bfcm1kczsgICAgICAgIC8qIGRldmVsb3BtZW50IHN1cHBvcnQgc3RhdHVzIHJlZyAqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgICAgICBjcF9ybWRyOyAgICAgICAgLyogZGV2ZWxvcG1lbnQgc3VwcG9ydCBjb250cm9sIHJlZyAqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICAgICBjcF9yY3RyMTsgICAgICAgLyogcmFtIGJyZWFrIHJlZ2lzdGVyIDEgICAgICovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgICAgIGNwX3JjdHIyOyAgICAgICAvKiByYW0gYnJlYWsgcmVnaXN0ZXIgMiAgICAgKi8KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAgICAgY3BfcmN0cjM7ICAgICAgIC8qIHJhbSBicmVhayByZWdpc3RlciAzICAgICAqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICAgICBjcF9yY3RyNDsgICAgICAgLyogcmFtIGJyZWFrIHJlZ2lzdGVyIDQgICAgICovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgICAgIFJFU0VSVkVENTlbMHgyXTsgICAgICAgIC8qIFJlc2VydmVkIGFyZWEgICAgKi8KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAgICAgY3BfcnRlcjsgICAgICAgIC8qIFJJU0MgdGltZXJzIGV2ZW50IHJlZyAgICAqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgICAgICBSRVNFUlZFRDM4WzB4Ml07ICAgICAgICAvKiBSZXNlcnZlZCBhcmVhICAgICovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgICAgIGNwX3J0bXI7ICAgICAgICAvKiBSSVNDIHRpbWVycyBtYXNrIHJlZyAgICAgKi8KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICAgICAgUkVTRVJWRUQzOVsweDE0XTsgICAgICAgLyogUmVzZXJ2ZWQgYXJlYSAgICAqLworICAgIC8qIEJSRyAqLworICAgIHVuaW9uIHsKKyAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBsOworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgQlJHQ19SRVNFUlY6MTQ7CisgICAgICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCByc3Q6MTsKKyAgICAgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGVuOjE7CisgICAgICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBleHRjOjI7CisgICAgICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBhdGI6MTsKKyAgICAgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGNkOjEyOworICAgICAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgZGl2MTY6MTsKKyAgICAgICAgfSBiOworICAgIH0gYnJnY1s0XTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQlJHMS1CUkc0IGNvbmZpZ3VyYXRpb24gcmVncyovCisgICAgLyogU0NDIHJlZ2lzdGVycyAqLworICAgIHN0cnVjdCBzY2NfcmVncyB7CisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICAgICAgLyogTG93IHdvcmQuICovCisgICAgICAgICAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgR1NNUl9SRVNFUlYyOjE7CisgICAgICAgICAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgZWRnZToyOworICAgICAgICAgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IHRjaToxOworICAgICAgICAgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IHRzbmM6MjsKKyAgICAgICAgICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCByaW52OjE7CisgICAgICAgICAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgdGludjoxOworICAgICAgICAgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IHRwbDozOworICAgICAgICAgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IHRwcDoyOworICAgICAgICAgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IHRlbmQ6MTsKKyAgICAgICAgICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCB0ZGNyOjI7CisgICAgICAgICAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgcmRjcjoyOworICAgICAgICAgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IHJlbmM6MzsKKyAgICAgICAgICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCB0ZW5jOjM7CisgICAgICAgICAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgZGlhZzoyOworICAgICAgICAgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGVucjoxOworICAgICAgICAgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGVudDoxOworICAgICAgICAgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IG1vZGU6NDsKKyAgICAgICAgICAgICAgICAvKiBIaWdoIHdvcmQuICovCisgICAgICAgICAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgR1NNUl9SRVNFUlYxOjE0OworICAgICAgICAgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IHByaToxOworICAgICAgICAgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGdkZToxOworICAgICAgICAgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IHRjcmM6MjsKKyAgICAgICAgICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCByZXZkOjE7CisgICAgICAgICAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgdHJ4OjE7CisgICAgICAgICAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgdHR4OjE7CisgICAgICAgICAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgY2RwOjE7CisgICAgICAgICAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgY3RzcDoxOworICAgICAgICAgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGNkczoxOworICAgICAgICAgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGN0c3M6MTsKKyAgICAgICAgICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCB0Zmw6MTsKKyAgICAgICAgICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCByZnc6MTsKKyAgICAgICAgICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCB0eHN5OjE7CisgICAgICAgICAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgc3lubDoyOworICAgICAgICAgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IHJ0c206MTsKKyAgICAgICAgICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCByc3luOjE7CisgICAgICAgICAgICB9IGI7CisgICAgICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgbG93OworICAgICAgICAgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgaGlnaDsKKyAgICAgICAgICAgIH0gdzsKKyAgICAgICAgfSBzY2NfZ3NtcjsgICAgICAgICAgICAgICAgICAgICAgICAgLyogU0NDIGdlbmVyYWwgbW9kZSByZWcgICAgICAgICAqLworICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBzY2NfcHNtcjsgICAvKiBwcm90b2NvbCBzcGVjaWZpYyBtb2RlIHJlZyAgICovCisgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgIFJFU0VSVkVENDJbMHgyXTsgLyogUmVzZXJ2ZWQgYXJlYSAgICAgICAgICAgKi8KKyAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgc2NjX3RvZHI7IC8qIFNDQyB0cmFuc21pdCBvbiBkZW1hbmQgICAgICAgICAqLworICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBzY2NfZHNyOyAgICAgICAgLyogU0NDIGRhdGEgc3luYyByZWcgICAgICAgICovCisgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IHNjY19zY2NlOyAgICAgICAvKiBTQ0MgZXZlbnQgcmVnICAgICAgICAgICAgKi8KKyAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgUkVTRVJWRUQ0M1sweDJdOy8qIFJlc2VydmVkIGFyZWEgICAgICAgICAgICAqLworICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBzY2Nfc2NjbTsgICAgICAgLyogU0NDIG1hc2sgcmVnICAgICAgICAgICAgICovCisgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgIFJFU0VSVkVENDRbMHgxXTsvKiBSZXNlcnZlZCBhcmVhICAgICAgICAgICAgKi8KKyAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgc2NjX3NjY3M7ICAgICAgIC8qIFNDQyBzdGF0dXMgcmVnICAgICAgICAgICAqLworICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICBSRVNFUlZFRDQ1WzB4OF07IC8qIFJlc2VydmVkIGFyZWEgICAgICAgICAgICovCisgICAgfSBzY2NfcmVnc1s0XTsKKyAgICAvKiBTTUMgKi8KKyAgICBzdHJ1Y3Qgc21jX3JlZ3MgeworICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICBSRVNFUlZFRDQ2WzB4Ml07IC8qIFJlc2VydmVkIGFyZWEgICAgICAgICAgICovCisgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IHNtY19zbWNtcjsgICAgICAgLyogU01DIG1vZGUgcmVnICAgICAgICAgICAgKi8KKyAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgUkVTRVJWRUQ2MFsweDJdOyAvKiBSZXNlcnZlZCBhcmVhICAgICAgICAgICAqLworICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICBzbWNfc21jZTsgICAgICAgIC8qIFNNQyBldmVudCByZWcgICAgICAgICAgICovCisgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgIFJFU0VSVkVENDdbMHgzXTsgLyogUmVzZXJ2ZWQgYXJlYSAgICAgICAgICAgKi8KKyAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgc21jX3NtY207ICAgICAgICAvKiBTTUMgbWFzayByZWcgICAgICAgICAgICAqLworICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICBSRVNFUlZFRDQ4WzB4NV07IC8qIFJlc2VydmVkIGFyZWEgICAgICAgICAgICovCisgICAgfSBzbWNfcmVnc1syXTsKKyAgICAvKiBTUEkgKi8KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAgICAgc3BpX3NwbW9kZTsgICAgIC8qIFNQSSBtb2RlIHJlZyAgICAgICAgICAgICAqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgICAgICBSRVNFUlZFRDUxWzB4NF07ICAgICAgICAvKiBSZXNlcnZlZCBhcmVhICAgICovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgICAgIHNwaV9zcGllOyAgICAgICAvKiBTUEkgZXZlbnQgcmVnICAgICAgICAgICAgKi8KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICAgICAgUkVTRVJWRUQ1MlsweDNdOyAgICAgICAgLyogUmVzZXJ2ZWQgYXJlYSAgICAqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgICAgICBzcGlfc3BpbTsgICAgICAgLyogU1BJIG1hc2sgcmVnICAgICAgICAgICAgICovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgICAgIFJFU0VSVkVENTNbMHgyXTsgICAgICAgIC8qIFJlc2VydmVkIGFyZWEgICAgKi8KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICAgICAgc3BpX3NwY29tOyAgICAgIC8qIFNQSSBjb21tYW5kIHJlZyAgICAgICAgICAqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgICAgICBSRVNFUlZFRDU0WzB4NF07ICAgICAgICAvKiBSZXNlcnZlZCBhcmVhICAgICovCisgICAgLyogUElQICovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgICAgIHBpcF9waXBjOyAgICAgICAvKiBwaXAgY29uZmlndXJhdGlvbiByZWcgICAgKi8KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICAgICAgUkVTRVJWRUQ2NVsweDJdOyAgICAgICAgLyogUmVzZXJ2ZWQgYXJlYSAgICAqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICAgICBwaXBfcHRwcjsgICAgICAgLyogcGlwIHRpbWluZyBwYXJhbWV0ZXJzIHJlZyAqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgICAgICBwaXBfcGJkaXI7ICAgICAgLyogcG9ydCBiIGRhdGEgZGlyZWN0aW9uIHJlZyAqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgICAgICBwaXBfcGJwYXI7ICAgICAgLyogcG9ydCBiIHBpbiBhc3NpZ25tZW50IHJlZyAqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgICAgICBwaXBfcGJvZHI7ICAgICAgLyogcG9ydCBiIG9wZW4gZHJhaW4gcmVnICAgICovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAgICAgIHBpcF9wYmRhdDsgICAgICAvKiBwb3J0IGIgZGF0YSByZWcgICAgICAgICAgKi8KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICAgICAgUkVTRVJWRUQ3MVsweDE4XTsgICAgICAgLyogUmVzZXJ2ZWQgYXJlYSAgICAqLworICAgIC8qIFNlcmlhbCBJbnRlcmZhY2UgKi8KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICAgICAgc2lfc2ltb2RlOyAgICAgIC8qIFNJIG1vZGUgcmVnaXN0ZXIgICAgICAgICAqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgICAgICBzaV9zaWdtcjsgICAgICAgLyogU0kgZ2xvYmFsIG1vZGUgcmVnaXN0ZXIgICovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgICAgIFJFU0VSVkVENTU7ICAgICAvKiBSZXNlcnZlZCBhcmVhICAgICAgICAgICAgKi8KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICAgICAgc2lfc2lzdHI7ICAgICAgIC8qIFNJIHN0YXR1cyByZWdpc3RlciAgICAgICAqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgICAgICBzaV9zaWNtcjsgICAgICAgLyogU0kgY29tbWFuZCByZWdpc3RlciAgICAgICovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgICAgIFJFU0VSVkVENTZbMHg0XTsgLyogUmVzZXJ2ZWQgYXJlYSAgICAgICAgICAgKi8KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICAgICAgc2lfc2ljcjsgICAgICAgIC8qIFNJIGNsb2NrIHJvdXRpbmcgICAgICAgICAqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgICAgICBzaV9zaXJwOyAgICAgICAgLyogU0kgcmFtIHBvaW50ZXJzICAgICAgICAgICovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgICAgIFJFU0VSVkVENTdbMHhjXTsgLyogUmVzZXJ2ZWQgYXJlYSAgICAgICAgICAgKi8KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAgICAgc2lfc2lyYW1bMHg4MF07IC8qIFNJIHJvdXRpbmcgcmFtICAgICAgICAgICovCit9IFFVSUNDOworCisjZW5kaWYKKworLyoKKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqICBjLWluZGVudC1sZXZlbDogNAorICogIGMtYmFzaWMtb2Zmc2V0OiA0CisgKiAgdGFiLXdpZHRoOiA0CisgKiBFbmQ6CisgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9tNjgzNjBfcmVncy5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L202ODM2MF9yZWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNmOGNjOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9tNjgzNjBfcmVncy5oCkBAIC0wLDAgKzEsNDA4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICRJZDogbTY4MzYwX3JlZ3MuaCx2IDEuMiAyMDAyLzEwLzI2IDE1OjAzOjU1IGdlcmcgRXhwICQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlZmluaXRpb25zIG9mIHRoZSBRVUlDQyByZWdpc3RlcnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisjaWZuZGVmIF9fUkVHSVNURVJTX0gKKyNkZWZpbmUgX19SRUdJU1RFUlNfSAorCisjZGVmaW5lIENMRUFSX0JJVCh4LCBiaXQpICB4ID1iaXQgCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgICBDb21tYW5kIFJlZ2lzdGVyCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogYml0IGZpZWxkcyB3aXRoaW4gY29tbWFuZCByZWdpc3RlciAqLworI2RlZmluZSBTT0ZUV0FSRV9SRVNFVCAgMHg4MDAwCisjZGVmaW5lIENNRF9PUENPREUgICAgICAweDBmMDAKKyNkZWZpbmUgQ01EX0NIQU5ORUwgICAgIDB4MDBmMAorI2RlZmluZSBDTURfRkxBRyAgICAgICAgMHgwMDAxCisKKy8qIGdlbmVyYWwgY29tbWFuZCBvcGNvZGVzICovCisjZGVmaW5lIElOSVRfUlhUWF9QQVJBTVMgICAgICAgIDB4MDAwMAorI2RlZmluZSBJTklUX1JYX1BBUkFNUyAgICAgICAgICAweDAxMDAKKyNkZWZpbmUgSU5JVF9UWF9QQVJBTVMgICAgICAgICAgMHgwMjAwCisjZGVmaW5lIEVOVEVSX0hVTlRfTU9ERSAgICAgICAgIDB4MDMwMAorI2RlZmluZSBTVE9QX1RYICAgICAgICAgICAgICAgICAweDA0MDAKKyNkZWZpbmUgR1JfU1RPUF9UWCAgICAgICAgICAgICAgMHgwNTAwCisjZGVmaW5lIFJFU1RBUlRfVFggICAgICAgICAgICAgIDB4MDYwMAorI2RlZmluZSBDTE9TRV9SWF9CRCAgICAgICAgICAgICAweDA3MDAKKyNkZWZpbmUgU0VUX0VORVRfR1JPVVAgICAgICAgICAgMHgwODAwCisjZGVmaW5lIFJFU0VUX0VORVRfR1JPVVAgICAgICAgIDB4MDkwMAorCisvKiBxdWljYzMyIENQIGNvbW1hbmRzICovCisjZGVmaW5lIFNUT1BfVFhfMzIJCTB4MGUwMAkvKmFkZCBjaGFuIyBiaXRzIDItNiAqLworI2RlZmluZSBFTlRFUl9IVU5UX01PREVfMzIJMHgxZTAwCisKKy8qIHF1aWNjMzIgbWFzay9ldmVudCBTQ0MgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgR09WCTB4MDEKKyNkZWZpbmUgR1VOCTB4MDIKKyNkZWZpbmUgR0lOVAkweDA0CisjZGVmaW5lIElRT1YJMHgwOAorCisKKy8qIFRpbWVyIGNvbW1hbmRzICovCisjZGVmaW5lIFNFVF9USU1FUiAgICAgICAgICAgICAgIDB4MDgwMAorCisvKiBNdWx0aSBjaGFubmVsIEludGVycnVwdCBzdHJ1Y3R1cmUgKi8KKyNkZWZpbmUgSU5UUl9WQUxJRAkweDgwMDAJLyogVmFsaWQgaW50ZXJydXB0IGVudHJ5ICovCisjZGVmaW5lIElOVFJfV1JBUAkweDQwMDAJLyogV3JhcCBiaXQgaW4gdGhlIGludGVycnVwdCBlbnRyeSB0YWJsZSAqLworI2RlZmluZSBJTlRSX0NIX05VCTB4MDdjMAkvKiBDaGFubmVsIE51bSBpbiBpbnRlcnJ1cHQgdGFibGUgKi8KKyNkZWZpbmUgSU5UUl9NQVNLX0JJVFMJMHgzODNmCisKKy8qCisgKiBHZW5lcmFsIFNDQyBtb2RlIHJlZ2lzdGVyIChHU01SKQorICovCisKKyNkZWZpbmUgTU9ERV9IRExDICAgICAgICAgICAgICAgMHgwCisjZGVmaW5lIE1PREVfQVBQTEVfVEFMSyAgICAgICAgIDB4MgorI2RlZmluZSBNT0RFX1NTNyAgICAgICAgICAgICAgICAweDMKKyNkZWZpbmUgTU9ERV9VQVJUICAgICAgICAgICAgICAgMHg0CisjZGVmaW5lIE1PREVfUFJPRklCVVMgICAgICAgICAgIDB4NQorI2RlZmluZSBNT0RFX0FTWU5DX0hETEMgICAgICAgICAweDYKKyNkZWZpbmUgTU9ERV9WMTQgICAgICAgICAgICAgICAgMHg3CisjZGVmaW5lIE1PREVfQklTWU5DICAgICAgICAgICAgIDB4OAorI2RlZmluZSBNT0RFX0REQ01QICAgICAgICAgICAgICAweDkKKyNkZWZpbmUgTU9ERV9NVUxUSV9DSEFOTkVMICAgICAgMHhhCisjZGVmaW5lIE1PREVfRVRIRVJORVQgICAgICAgICAgIDB4YworCisjZGVmaW5lIERJQUdfTk9STUFMICAgICAgICAgICAgIDB4MAorI2RlZmluZSBESUFHX0xPQ0FMX0xQQiAgICAgICAgICAweDEKKyNkZWZpbmUgRElBR19BVVRPX0VDSE8gICAgICAgICAgMHgyCisjZGVmaW5lIERJQUdfTEJQX0VDSE8gICAgICAgICAgIDB4MworCisvKiBGb3IgUkVOQyBhbmQgVEVOQyBmaWVsZHMgaW4gR1NNUiAqLworI2RlZmluZSBFTkNfTlJaICAgICAgICAgICAgICAgICAweDAKKyNkZWZpbmUgRU5DX05SWkkgICAgICAgICAgICAgICAgMHgxCisjZGVmaW5lIEVOQ19GTTAgICAgICAgICAgICAgICAgIDB4MgorI2RlZmluZSBFTkNfTUFOQ0ggICAgICAgICAgICAgICAweDQKKyNkZWZpbmUgRU5DX0RJRkZfTUFOQyAgICAgICAgICAgMHg2CisKKy8qIEZvciBURENSIGFuZCBSRENSIGZpZWxkcyBpbiBHU01SICovCisjZGVmaW5lIENMT0NLX1JBVEVfMSAgICAgICAgICAgIDB4MAorI2RlZmluZSBDTE9DS19SQVRFXzggICAgICAgICAgICAweDEKKyNkZWZpbmUgQ0xPQ0tfUkFURV8xNiAgICAgICAgICAgMHgyCisjZGVmaW5lIENMT0NLX1JBVEVfMzIgICAgICAgICAgIDB4MworCisjZGVmaW5lIFRQUF8wMCAgICAgICAgICAgICAgICAgIDB4MAorI2RlZmluZSBUUFBfMTAgICAgICAgICAgICAgICAgICAweDEKKyNkZWZpbmUgVFBQXzAxICAgICAgICAgICAgICAgICAgMHgyCisjZGVmaW5lIFRQUF8xMSAgICAgICAgICAgICAgICAgIDB4MworCisjZGVmaW5lIFRQTF9OTyAgICAgICAgICAgICAgICAgIDB4MAorI2RlZmluZSBUUExfOCAgICAgICAgICAgICAgICAgICAweDEKKyNkZWZpbmUgVFBMXzE2ICAgICAgICAgICAgICAgICAgMHgyCisjZGVmaW5lIFRQTF8zMiAgICAgICAgICAgICAgICAgIDB4MworI2RlZmluZSBUUExfNDggICAgICAgICAgICAgICAgICAweDQKKyNkZWZpbmUgVFBMXzY0ICAgICAgICAgICAgICAgICAgMHg1CisjZGVmaW5lIFRQTF8xMjggICAgICAgICAgICAgICAgIDB4NgorCisjZGVmaW5lIFRTTkNfSU5GSU5JVEUgICAgICAgICAgIDB4MAorI2RlZmluZSBUU05DXzE0XzY1ICAgICAgICAgICAgICAweDEKKyNkZWZpbmUgVFNOQ180XzE1ICAgICAgICAgICAgICAgMHgyCisjZGVmaW5lIFRTTkNfM18xICAgICAgICAgICAgICAgIDB4MworCisjZGVmaW5lIEVER0VfQk9USCAgICAgICAgICAgICAgIDB4MAorI2RlZmluZSBFREdFX1BPUyAgICAgICAgICAgICAgICAweDEKKyNkZWZpbmUgRURHRV9ORUcgICAgICAgICAgICAgICAgMHgyCisjZGVmaW5lIEVER0VfTk8gICAgICAgICAgICAgICAgIDB4MworCisjZGVmaW5lIFNZTkxfTk8gICAgICAgICAgICAgICAgIDB4MAorI2RlZmluZSBTWU5MXzQgICAgICAgICAgICAgICAgICAweDEKKyNkZWZpbmUgU1lOTF84ICAgICAgICAgICAgICAgICAgMHgyCisjZGVmaW5lIFNZTkxfMTYgICAgICAgICAgICAgICAgIDB4MworCisjZGVmaW5lIFRDUkNfQ0NJVFQxNiAgICAgICAgICAgIDB4MAorI2RlZmluZSBUQ1JDX0NSQzE2ICAgICAgICAgICAgICAweDEKKyNkZWZpbmUgVENSQ19DQ0lUVDMyICAgICAgICAgICAgMHgyCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICAgIFRPRFIgKFRyYW5zbWl0IG9uIGRlbWFuZCkgUmVnaXN0ZXIKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBUT0RSX1RPRCAgICAgICAgMHg4MDAwICAvKiBUcmFuc21pdCBvbiBkZW1hbmQgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICAgQ0lDUiByZWdpc3RlciBzZXR0aW5ncworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIG5vdGUgdGhhdCByZWxhdGl2ZSBpcnEgcHJpb3JpdGllcyBvZiB0aGUgU0NDcyBjYW4gYmUgcmVvcmRlcmVkCisgKiBpZiBkZXNpcmVkIC0gc2VlIHAuIDctMzc3IG9mIHRoZSBNQzY4MzYwVU0gKi8KKyNkZWZpbmUgQ0lDUl9TQ0FfU0NDMSAgICAgICAgICAgKCh1aW50KTB4MDAwMDAwMDApICAgICAgLyogU0NDMSBAIFNDQ2EgKi8KKyNkZWZpbmUgQ0lDUl9TQ0JfU0NDMiAgICAgICAgICAgKCh1aW50KTB4MDAwNDAwMDApICAgICAgLyogU0NDMiBAIFNDQ2IgKi8KKyNkZWZpbmUgQ0lDUl9TQ0NfU0NDMyAgICAgICAgICAgKCh1aW50KTB4MDAyMDAwMDApICAgICAgLyogU0NDMyBAIFNDQ2MgKi8KKyNkZWZpbmUgQ0lDUl9TQ0RfU0NDNCAgICAgICAgICAgKCh1aW50KTB4MDBjMDAwMDApICAgICAgLyogU0NDNCBAIFNDQ2QgKi8KKworI2RlZmluZSBDSUNSX0lSTF9NQVNLICAgICAgICAgICAoKHVpbnQpMHgwMDAwZTAwMCkgICAgICAvKiBDb3JlIGludGVycnJ1cHQgKi8KKyNkZWZpbmUgQ0lDUl9IUF9NQVNLICAgICAgICAgICAgKCh1aW50KTB4MDAwMDFmMDApICAgICAgLyogSGktcHJpIGludC4gKi8KKyNkZWZpbmUgQ0lDUl9WQkFfTUFTSyAgICAgICAgICAgKCh1aW50KTB4MDAwMDAwZTApICAgICAgLyogVmVjdG9yIEJhc2UgQWRkcmVzcyAqLworI2RlZmluZSBDSUNSX1NQUyAgICAgICAgICAgICAgICAoKHVpbnQpMHgwMDAwMDAwMSkgICAgICAvKiBTQ0MgU3ByZWFkICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICAgSW50ZXJydXB0IGJpdHMgZm9yIENJUFIgYW5kIENJTVIgKE1DNjgzNjBVTSBwLiA3LTM3OSkKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIElOVFJfUElPX1BDMCAgICAweDgwMDAwMDAwICAgICAgLyogcGFyYWxsZWwgSS9PIEMgYml0IDAgKi8KKyNkZWZpbmUgSU5UUl9TQ0MxICAgICAgIDB4NDAwMDAwMDAgICAgICAvKiBTQ0MgcG9ydCAxICovCisjZGVmaW5lIElOVFJfU0NDMiAgICAgICAweDIwMDAwMDAwICAgICAgLyogU0NDIHBvcnQgMiAqLworI2RlZmluZSBJTlRSX1NDQzMgICAgICAgMHgxMDAwMDAwMCAgICAgIC8qIFNDQyBwb3J0IDMgKi8KKyNkZWZpbmUgSU5UUl9TQ0M0ICAgICAgIDB4MDgwMDAwMDAgICAgICAvKiBTQ0MgcG9ydCA0ICovCisjZGVmaW5lIElOVFJfUElPX1BDMSAgICAweDA0MDAwMDAwICAgICAgLyogcGFyYWxsZWwgaS9vIEMgYml0IDEgKi8KKyNkZWZpbmUgSU5UUl9USU1FUjEgICAgIDB4MDIwMDAwMDAgICAgICAvKiB0aW1lciAxICovCisjZGVmaW5lIElOVFJfUElPX1BDMiAgICAweDAxMDAwMDAwICAgICAgLyogcGFyYWxsZWwgaS9vIEMgYml0IDIgKi8KKyNkZWZpbmUgSU5UUl9QSU9fUEMzICAgIDB4MDA4MDAwMDAgICAgICAvKiBwYXJhbGxlbCBpL28gQyBiaXQgMyAqLworI2RlZmluZSBJTlRSX1NETUFfQkVSUiAgMHgwMDQwMDAwMCAgICAgIC8qIFNETUEgY2hhbm5lbCBidXMgZXJyb3IgKi8KKyNkZWZpbmUgSU5UUl9ETUExICAgICAgIDB4MDAyMDAwMDAgICAgICAvKiBpZG1hIDEgKi8KKyNkZWZpbmUgSU5UUl9ETUEyICAgICAgIDB4MDAxMDAwMDAgICAgICAvKiBpZG1hIDIgKi8KKyNkZWZpbmUgSU5UUl9USU1FUjIgICAgIDB4MDAwNDAwMDAgICAgICAvKiB0aW1lciAyICovCisjZGVmaW5lIElOVFJfQ1BfVElNRVIgICAweDAwMDIwMDAwICAgICAgLyogQ1AgdGltZXIgKi8KKyNkZWZpbmUgSU5UUl9QSVBfU1RBVFVTIDB4MDAwMTAwMDAgICAgICAvKiBQSVAgc3RhdHVzICovCisjZGVmaW5lIElOVFJfUElPX1BDNCAgICAweDAwMDA4MDAwICAgICAgLyogcGFyYWxsZWwgaS9vIEMgYml0IDQgKi8KKyNkZWZpbmUgSU5UUl9QSU9fUEM1ICAgIDB4MDAwMDQwMDAgICAgICAvKiBwYXJhbGxlbCBpL28gQyBiaXQgNSAqLworI2RlZmluZSBJTlRSX1RJTUVSMyAgICAgMHgwMDAwMTAwMCAgICAgIC8qIHRpbWVyIDMgKi8KKyNkZWZpbmUgSU5UUl9QSU9fUEM2ICAgIDB4MDAwMDA4MDAgICAgICAvKiBwYXJhbGxlbCBpL28gQyBiaXQgNiAqLworI2RlZmluZSBJTlRSX1BJT19QQzcgICAgMHgwMDAwMDQwMCAgICAgIC8qIHBhcmFsbGVsIGkvbyBDIGJpdCA3ICovCisjZGVmaW5lIElOVFJfUElPX1BDOCAgICAweDAwMDAwMjAwICAgICAgLyogcGFyYWxsZWwgaS9vIEMgYml0IDggKi8KKyNkZWZpbmUgSU5UUl9USU1FUjQgICAgIDB4MDAwMDAwODAgICAgICAvKiB0aW1lciA0ICovCisjZGVmaW5lIElOVFJfUElPX1BDOSAgICAweDAwMDAwMDQwICAgICAgLyogcGFyYWxsZWwgaS9vIEMgYml0IDkgKi8KKyNkZWZpbmUgSU5UUl9TQ1AgICAgICAgIDB4MDAwMDAwMjAgICAgICAvKiBTQ1AgKi8KKyNkZWZpbmUgSU5UUl9TTUMxICAgICAgIDB4MDAwMDAwMTAgICAgICAvKiBTTUMgMSAqLworI2RlZmluZSBJTlRSX1NNQzIgICAgICAgMHgwMDAwMDAwOCAgICAgIC8qIFNNQyAyICovCisjZGVmaW5lIElOVFJfUElPX1BDMTAgICAweDAwMDAwMDA0ICAgICAgLyogcGFyYWxsZWwgaS9vIEMgYml0IDEwICovCisjZGVmaW5lIElOVFJfUElPX1BDMTEgICAweDAwMDAwMDAyICAgICAgLyogcGFyYWxsZWwgaS9vIEMgYml0IDExICovCisjZGVmaW5lIElOVFJfRVJSICAgICAgICAweDAwMDAwMDAxICAgICAgLyogZXJyb3IgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICAgQ1BNIEludGVycnVwdCB2ZWN0b3IgZW5jb2RpbmdzIChNQzY4MzYwVU0gcC4gNy0zNzYpCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBDUE1WRUNfTlIJCTMyCisjZGVmaW5lIENQTVZFQ19QSU9fUEMwCQkweDFmCisjZGVmaW5lIENQTVZFQ19TQ0MxCQkweDFlCisjZGVmaW5lIENQTVZFQ19TQ0MyCQkweDFkCisjZGVmaW5lIENQTVZFQ19TQ0MzCQkweDFjCisjZGVmaW5lIENQTVZFQ19TQ0M0CQkweDFiCisjZGVmaW5lIENQTVZFQ19QSU9fUEMxCQkweDFhCisjZGVmaW5lIENQTVZFQ19USU1FUjEJCTB4MTkKKyNkZWZpbmUgQ1BNVkVDX1BJT19QQzIJCTB4MTgKKyNkZWZpbmUgQ1BNVkVDX1BJT19QQzMJCTB4MTcKKyNkZWZpbmUgQ1BNVkVDX1NETUFfQ0JfRVJSCTB4MTYKKyNkZWZpbmUgQ1BNVkVDX0lETUExCQkweDE1CisjZGVmaW5lIENQTVZFQ19JRE1BMgkJMHgxNAorI2RlZmluZSBDUE1WRUNfUkVTRVJWRUQzCTB4MTMKKyNkZWZpbmUgQ1BNVkVDX1RJTUVSMgkJMHgxMgorI2RlZmluZSBDUE1WRUNfUklTQ1RJTUVSCTB4MTEKKyNkZWZpbmUgQ1BNVkVDX1JFU0VSVkVEMgkweDEwCisjZGVmaW5lIENQTVZFQ19QSU9fUEM0CQkweDBmCisjZGVmaW5lIENQTVZFQ19QSU9fUEM1CQkweDBlCisjZGVmaW5lIENQTVZFQ19USU1FUjMJCTB4MGMKKyNkZWZpbmUgQ1BNVkVDX1BJT19QQzYJCTB4MGIKKyNkZWZpbmUgQ1BNVkVDX1BJT19QQzcJCTB4MGEKKyNkZWZpbmUgQ1BNVkVDX1BJT19QQzgJCTB4MDkKKyNkZWZpbmUgQ1BNVkVDX1JFU0VSVkVEMQkweDA4CisjZGVmaW5lIENQTVZFQ19USU1FUjQJCTB4MDcKKyNkZWZpbmUgQ1BNVkVDX1BJT19QQzkJCTB4MDYKKyNkZWZpbmUgQ1BNVkVDX1NQSQkJMHgwNQorI2RlZmluZSBDUE1WRUNfU01DMQkJMHgwNAorI2RlZmluZSBDUE1WRUNfU01DMgkJMHgwMworI2RlZmluZSBDUE1WRUNfUElPX1BDMTAJCTB4MDIKKyNkZWZpbmUgQ1BNVkVDX1BJT19QQzExCQkweDAxCisjZGVmaW5lIENQTVZFQ19FUlJPUgkJMHgwMAorCisvKiAjZGVmaW5lIENQTVZFQ19QSU9fUEMwCQkoKHVzaG9ydCkweDFmKSAqLworLyogI2RlZmluZSBDUE1WRUNfU0NDMQkJKCh1c2hvcnQpMHgxZSkgKi8KKy8qICNkZWZpbmUgQ1BNVkVDX1NDQzIJCSgodXNob3J0KTB4MWQpICovCisvKiAjZGVmaW5lIENQTVZFQ19TQ0MzCQkoKHVzaG9ydCkweDFjKSAqLworLyogI2RlZmluZSBDUE1WRUNfU0NDNAkJKCh1c2hvcnQpMHgxYikgKi8KKy8qICNkZWZpbmUgQ1BNVkVDX1BJT19QQzEJCSgodXNob3J0KTB4MWEpICovCisvKiAjZGVmaW5lIENQTVZFQ19USU1FUjEJCSgodXNob3J0KTB4MTkpICovCisvKiAjZGVmaW5lIENQTVZFQ19QSU9fUEMyCQkoKHVzaG9ydCkweDE4KSAqLworLyogI2RlZmluZSBDUE1WRUNfUElPX1BDMwkJKCh1c2hvcnQpMHgxNykgKi8KKy8qICNkZWZpbmUgQ1BNVkVDX1NETUFfQ0JfRVJSCSgodXNob3J0KTB4MTYpICovCisvKiAjZGVmaW5lIENQTVZFQ19JRE1BMQkJKCh1c2hvcnQpMHgxNSkgKi8KKy8qICNkZWZpbmUgQ1BNVkVDX0lETUEyCQkoKHVzaG9ydCkweDE0KSAqLworLyogI2RlZmluZSBDUE1WRUNfUkVTRVJWRUQzCSgodXNob3J0KTB4MTMpICovCisvKiAjZGVmaW5lIENQTVZFQ19USU1FUjIJCSgodXNob3J0KTB4MTIpICovCisvKiAjZGVmaW5lIENQTVZFQ19SSVNDVElNRVIJKCh1c2hvcnQpMHgxMSkgKi8KKy8qICNkZWZpbmUgQ1BNVkVDX1JFU0VSVkVEMgkoKHVzaG9ydCkweDEwKSAqLworLyogI2RlZmluZSBDUE1WRUNfUElPX1BDNAkJKCh1c2hvcnQpMHgwZikgKi8KKy8qICNkZWZpbmUgQ1BNVkVDX1BJT19QQzUJCSgodXNob3J0KTB4MGUpICovCisvKiAjZGVmaW5lIENQTVZFQ19USU1FUjMJCSgodXNob3J0KTB4MGMpICovCisvKiAjZGVmaW5lIENQTVZFQ19QSU9fUEM2CQkoKHVzaG9ydCkweDBiKSAqLworLyogI2RlZmluZSBDUE1WRUNfUElPX1BDNwkJKCh1c2hvcnQpMHgwYSkgKi8KKy8qICNkZWZpbmUgQ1BNVkVDX1BJT19QQzgJCSgodXNob3J0KTB4MDkpICovCisvKiAjZGVmaW5lIENQTVZFQ19SRVNFUlZFRDEJKCh1c2hvcnQpMHgwOCkgKi8KKy8qICNkZWZpbmUgQ1BNVkVDX1RJTUVSNAkJKCh1c2hvcnQpMHgwNykgKi8KKy8qICNkZWZpbmUgQ1BNVkVDX1BJT19QQzkJCSgodXNob3J0KTB4MDYpICovCisvKiAjZGVmaW5lIENQTVZFQ19TUEkJCSgodXNob3J0KTB4MDUpICovCisvKiAjZGVmaW5lIENQTVZFQ19TTUMxCQkoKHVzaG9ydCkweDA0KSAqLworLyogI2RlZmluZSBDUE1WRUNfU01DMgkJKCh1c2hvcnQpMHgwMykgKi8KKy8qICNkZWZpbmUgQ1BNVkVDX1BJT19QQzEwCQkoKHVzaG9ydCkweDAyKSAqLworLyogI2RlZmluZSBDUE1WRUNfUElPX1BDMTEJCSgodXNob3J0KTB4MDEpICovCisvKiAjZGVmaW5lIENQTVZFQ19FUlJPUgkJKCh1c2hvcnQpMHgwMCkgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICBQSU8gY29udHJvbCByZWdpc3RlcnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogUG9ydCBBIC0gU2VlIDM2MFVNIHAuIDctMzU4CisgKiAKKyAqICBOb3RlIHRoYXQgbW9zdCBvZiB0aGVzZSBwaW5zIGhhdmUgYWx0ZXJuYXRlIGZ1bmN0aW9ucworICovCisKKworLyogVGhlIG1hY3JvcyBhcmUgbmljZSwgYnV0IHRoZXJlIGFyZSBhbGwgc29ydHMgb2YgcmVmZXJlbmNlcyB0byAxLWluZGV4ZWQKKyAqIGZhY2lsaXRpZXMgb24gdGhlIDY4MzYwLi4uICovCisvKiAjZGVmaW5lIFBBX1JYRChuKQkoKHVzaG9ydCkoMHgwMTw8KDIqbikpKSAqLworLyogI2RlZmluZSBQQV9UWEQobikJKCh1c2hvcnQpKDB4MDI8PCgyKm4pKSkgKi8KKworI2RlZmluZSBQQV9SWEQxCQkoKHVzaG9ydCkweDAwMDEpCisjZGVmaW5lIFBBX1RYRDEJCSgodXNob3J0KTB4MDAwMikKKyNkZWZpbmUgUEFfUlhEMgkJKCh1c2hvcnQpMHgwMDA0KQorI2RlZmluZSBQQV9UWEQyCQkoKHVzaG9ydCkweDAwMDgpCisjZGVmaW5lIFBBX1JYRDMJCSgodXNob3J0KTB4MDAxMCkKKyNkZWZpbmUgUEFfVFhEMwkJKCh1c2hvcnQpMHgwMDIwKQorI2RlZmluZSBQQV9SWEQ0CQkoKHVzaG9ydCkweDAwNDApCisjZGVmaW5lIFBBX1RYRDQJCSgodXNob3J0KTB4MDA4MCkKKworI2RlZmluZSBQQV9DTEsxCQkoKHVzaG9ydCkweDAxMDApCisjZGVmaW5lIFBBX0NMSzIJCSgodXNob3J0KTB4MDIwMCkKKyNkZWZpbmUgUEFfQ0xLMwkJKCh1c2hvcnQpMHgwNDAwKQorI2RlZmluZSBQQV9DTEs0CQkoKHVzaG9ydCkweDA4MDApCisjZGVmaW5lIFBBX0NMSzUJCSgodXNob3J0KTB4MTAwMCkKKyNkZWZpbmUgUEFfQ0xLNgkJKCh1c2hvcnQpMHgyMDAwKQorI2RlZmluZSBQQV9DTEs3CQkoKHVzaG9ydCkweDQwMDApCisjZGVmaW5lIFBBX0NMSzgJCSgodXNob3J0KTB4ODAwMCkKKworCisvKiBQb3J0IEIgLSBTZWUgMzYwVU0gcC4gNy0zNjIKKyAqLworCisKKy8qIFBvcnQgQyAtIFNlZSAzNjBVTSBwLiA3LTM2NQorICovCisKKyNkZWZpbmUgUENfUlRTMQkJKCh1c2hvcnQpMHgwMDAxKQorI2RlZmluZSBQQ19SVFMyCQkoKHVzaG9ydCkweDAwMDIpCisjZGVmaW5lIFBDX19SVFMzCSgodXNob3J0KTB4MDAwNCkgLyogIVJUUzMgKi8KKyNkZWZpbmUgUENfX1JUUzQJKCh1c2hvcnQpMHgwMDA4KSAvKiAhUlRTNCAqLworCisjZGVmaW5lIFBDX0NUUzEJCSgodXNob3J0KTB4MDAxMCkKKyNkZWZpbmUgUENfQ0QxCQkoKHVzaG9ydCkweDAwMjApCisjZGVmaW5lIFBDX0NUUzIJCSgodXNob3J0KTB4MDA0MCkKKyNkZWZpbmUgUENfQ0QyCQkoKHVzaG9ydCkweDAwODApCisjZGVmaW5lIFBDX0NUUzMJCSgodXNob3J0KTB4MDEwMCkKKyNkZWZpbmUgUENfQ0QzCQkoKHVzaG9ydCkweDAyMDApCisjZGVmaW5lIFBDX0NUUzQJCSgodXNob3J0KTB4MDQwMCkKKyNkZWZpbmUgUENfQ0Q0CQkoKHVzaG9ydCkweDA4MDApCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICAgY2hpcCBzZWxlY3Qgb3B0aW9uIHJlZ2lzdGVyCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgRFRBQ0sgICAgICAgICAgIDB4ZTAwMAorI2RlZmluZSBBRFJfTUFTSyAgICAgICAgMHgxZmZjCisjZGVmaW5lIFJEV1JfTUFTSyAgICAgICAweDAwMDIKKyNkZWZpbmUgRkNfTUFTSyAgICAgICAgIDB4MDAwMQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICAgdGJhc2UgYW5kIHJiYXNlIHJlZ2lzdGVycworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFRCRF9BRERSKHF1aWNjLHByYW0pICgoc3RydWN0IHF1aWNjX2JkICopIFwKKyAgICAocXVpY2MtPmNoX29yX3UudS51ZGF0YV9iZF91Y29kZSArIHByYW0tPnRiYXNlKSkKKyNkZWZpbmUgUkJEX0FERFIocXVpY2MscHJhbSkgKChzdHJ1Y3QgcXVpY2NfYmQgKikgXAorICAgIChxdWljYy0+Y2hfb3JfdS51LnVkYXRhX2JkX3Vjb2RlICsgcHJhbS0+cmJhc2UpKQorI2RlZmluZSBUQkRfQ1VSX0FERFIocXVpY2MscHJhbSkgKChzdHJ1Y3QgcXVpY2NfYmQgKikgXAorICAgIChxdWljYy0+Y2hfb3JfdS51LnVkYXRhX2JkX3Vjb2RlICsgcHJhbS0+dGJwdHIpKQorI2RlZmluZSBSQkRfQ1VSX0FERFIocXVpY2MscHJhbSkgKChzdHJ1Y3QgcXVpY2NfYmQgKikgXAorICAgIChxdWljYy0+Y2hfb3JfdS51LnVkYXRhX2JkX3Vjb2RlICsgcHJhbS0+cmJwdHIpKQorI2RlZmluZSBUQkRfU0VUX0NVUl9BRERSKGJkLHF1aWNjLHByYW0pIHByYW0tPnRicHRyID0gXAorICAgICgodW5zaWduZWQgc2hvcnQpKChjaGFyICopKGJkKSAtIChjaGFyICopKHF1aWNjLT5jaF9vcl91LnUudWRhdGFfYmRfdWNvZGUpKSkKKyNkZWZpbmUgUkJEX1NFVF9DVVJfQUREUihiZCxxdWljYyxwcmFtKSBwcmFtLT5yYnB0ciA9IFwKKyAgICAoKHVuc2lnbmVkIHNob3J0KSgoY2hhciAqKShiZCkgLSAoY2hhciAqKShxdWljYy0+Y2hfb3JfdS51LnVkYXRhX2JkX3Vjb2RlKSkpCisjZGVmaW5lIElOQ1JFQVNFX1RCRChiZCxxdWljYyxwcmFtKSB7ICBcCisgICAgaWYoKGJkKS0+c3RhdHVzICYgVF9XKSAgICAgICAgICAgICBcCisgICAgICAgIChiZCkgPSBUQkRfQUREUihxdWljYyxwcmFtKTsgICBcCisgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChiZCkrKzsgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisjZGVmaW5lIERFQ1JFQVNFX1RCRChiZCxxdWljYyxwcmFtKSB7ICBcCisgICAgaWYgKChiZCkgPT0gVEJEX0FERFIocXVpY2MsIHByYW0pKSBcCisgICAgICAgIHdoaWxlICghKChiZCktPnN0YXR1cyAmIFRfVykpICBcCisgICAgICAgICAgICAoYmQpKys7ICAgICAgICAgICAgICAgICAgICBcCisgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChiZCktLTsgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisjZGVmaW5lIElOQ1JFQVNFX1JCRChiZCxxdWljYyxwcmFtKSB7ICBcCisgICAgaWYoKGJkKS0+c3RhdHVzICYgUl9XKSAgICAgICAgICAgICBcCisgICAgICAgIChiZCkgPSBSQkRfQUREUihxdWljYyxwcmFtKTsgICBcCisgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChiZCkrKzsgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisjZGVmaW5lIERFQ1JFQVNFX1JCRChiZCxxdWljYyxwcmFtKSB7ICBcCisgICAgaWYgKChiZCkgPT0gUkJEX0FERFIocXVpY2MsIHByYW0pKSBcCisgICAgICAgIHdoaWxlICghKChiZCktPnN0YXR1cyAmIFRfVykpICBcCisgICAgICAgICAgICAoYmQpKys7ICAgICAgICAgICAgICAgICAgICBcCisgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChiZCktLTsgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgICBNYWNyb3MgZm9yIE11bHRpIGNoYW5uZWwKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBRTUNfQkFTRShxdWljYyxwYWdlKSAoc3RydWN0IGdsb2JhbF9tdWx0aV9wcmFtICopKCZxdWljYy0+cHJhbVtwYWdlXSkKKyNkZWZpbmUgTUNCQVNFKHF1aWNjLHBhZ2UpICh1bnNpZ25lZCBsb25nKShxdWljYy0+cHJhbVtwYWdlXS5tLm1jYmFzZSkKKyNkZWZpbmUgQ0hBTk5FTF9QUkFNX0JBU0UocXVpY2MsY2hhbm5lbCkgKChzdHJ1Y3QgcXVpY2MzMl9wcmFtICopIFwKKwkJKCYocXVpY2MtPmNoX29yX3UuY2hfcHJhbV90YmxbY2hhbm5lbF0pKSkKKyNkZWZpbmUgVEJEXzMyX0FERFIocXVpY2MscGFnZSxjaGFubmVsKSAoKHN0cnVjdCBxdWljY19iZCAqKSBcCisgICAgKE1DQkFTRShxdWljYyxwYWdlKSArIChDSEFOTkVMX1BSQU1fQkFTRShxdWljYyxjaGFubmVsKS0+dGJhc2UpKSkKKyNkZWZpbmUgUkJEXzMyX0FERFIocXVpY2MscGFnZSxjaGFubmVsKSAoKHN0cnVjdCBxdWljY19iZCAqKSBcCisgICAgKE1DQkFTRShxdWljYyxwYWdlKSArIChDSEFOTkVMX1BSQU1fQkFTRShxdWljYyxjaGFubmVsKS0+cmJhc2UpKSkKKyNkZWZpbmUgVEJEXzMyX0NVUl9BRERSKHF1aWNjLHBhZ2UsY2hhbm5lbCkgKChzdHJ1Y3QgcXVpY2NfYmQgKikgXAorICAgIChNQ0JBU0UocXVpY2MscGFnZSkgKyAoQ0hBTk5FTF9QUkFNX0JBU0UocXVpY2MsY2hhbm5lbCktPnRicHRyKSkpCisjZGVmaW5lIFJCRF8zMl9DVVJfQUREUihxdWljYyxwYWdlLGNoYW5uZWwpICgoc3RydWN0IHF1aWNjX2JkICopIFwKKyAgICAoTUNCQVNFKHF1aWNjLHBhZ2UpICsgKENIQU5ORUxfUFJBTV9CQVNFKHF1aWNjLGNoYW5uZWwpLT5yYnB0cikpKQorI2RlZmluZSBUQkRfMzJfU0VUX0NVUl9BRERSKGJkLHF1aWNjLHBhZ2UsY2hhbm5lbCkgXAorICAgICBDSEFOTkVMX1BSQU1fQkFTRShxdWljYyxjaGFubmVsKS0+dGJwdHIgPSBcCisgICAgKCh1bnNpZ25lZCBzaG9ydCkoKGNoYXIgKikoYmQpIC0gKGNoYXIgKikoTUNCQVNFKHF1aWNjLHBhZ2UpKSkpCisjZGVmaW5lIFJCRF8zMl9TRVRfQ1VSX0FERFIoYmQscXVpY2MscGFnZSxjaGFubmVsKSBcCisgICAgIENIQU5ORUxfUFJBTV9CQVNFKHF1aWNjLGNoYW5uZWwpLT5yYnB0ciA9IFwKKyAgICAoKHVuc2lnbmVkIHNob3J0KSgoY2hhciAqKShiZCkgLSAoY2hhciAqKShNQ0JBU0UocXVpY2MscGFnZSkpKSkKKworI2RlZmluZSBJTkNSRUFTRV9UQkRfMzIoYmQscXVpY2MscGFnZSxjaGFubmVsKSB7ICBcCisgICAgaWYoKGJkKS0+c3RhdHVzICYgVF9XKSAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKGJkKSA9IFRCRF8zMl9BRERSKHF1aWNjLHBhZ2UsY2hhbm5lbCk7ICAgXAorICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChiZCkrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKyNkZWZpbmUgREVDUkVBU0VfVEJEXzMyKGJkLHF1aWNjLHBhZ2UsY2hhbm5lbCkgeyAgXAorICAgIGlmICgoYmQpID09IFRCRF8zMl9BRERSKHF1aWNjLCBwYWdlLGNoYW5uZWwpKSBcCisgICAgICAgIHdoaWxlICghKChiZCktPnN0YXR1cyAmIFRfVykpICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIChiZCkrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChiZCktLTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKyNkZWZpbmUgSU5DUkVBU0VfUkJEXzMyKGJkLHF1aWNjLHBhZ2UsY2hhbm5lbCkgeyAgXAorICAgIGlmKChiZCktPnN0YXR1cyAmIFJfVykgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChiZCkgPSBSQkRfMzJfQUREUihxdWljYyxwYWdlLGNoYW5uZWwpOyAgIFwKKyAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoYmQpKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisjZGVmaW5lIERFQ1JFQVNFX1JCRF8zMihiZCxxdWljYyxwYWdlLGNoYW5uZWwpIHsgIFwKKyAgICBpZiAoKGJkKSA9PSBSQkRfMzJfQUREUihxdWljYywgcGFnZSxjaGFubmVsKSkgXAorICAgICAgICB3aGlsZSAoISgoYmQpLT5zdGF0dXMgJiBUX1cpKSAgICAgICAgICAgICBcCisgICAgICAgICAgICAoYmQpKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoYmQpLS07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L21hY2hkZXAuaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9tYWNoZGVwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE5ZjljMjkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbWFjaGRlcC5oCkBAIC0wLDAgKzEsNTQgQEAKKyNpZm5kZWYgX002OEtOT01NVV9NQUNIREVQX0gKKyNkZWZpbmUgX002OEtOT01NVV9NQUNIREVQX0gKKworI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisKK3N0cnVjdCBwdF9yZWdzOworc3RydWN0IGtiZF9yZXBlYXQ7CitzdHJ1Y3QgbWt0aW1lOworc3RydWN0IGh3Y2xrX3RpbWU7CitzdHJ1Y3QgZ2VuZGlzazsKK3N0cnVjdCBidWZmZXJfaGVhZDsKKworZXh0ZXJuIHZvaWQgKCptYWNoX3NjaGVkX2luaXQpIChpcnFyZXR1cm5fdCAoKmhhbmRsZXIpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSk7CisvKiBtYWNoaW5lIGRlcGVuZGVudCBrZXlib2FyZCBmdW5jdGlvbnMgKi8KK2V4dGVybiBpbnQgKCptYWNoX2tleWJfaW5pdCkgKHZvaWQpOworZXh0ZXJuIGludCAoKm1hY2hfa2JkcmF0ZSkgKHN0cnVjdCBrYmRfcmVwZWF0ICopOworZXh0ZXJuIHZvaWQgKCptYWNoX2tiZF9sZWRzKSAodW5zaWduZWQgaW50KTsKKy8qIG1hY2hpbmUgZGVwZW5kZW50IGlycSBmdW5jdGlvbnMgKi8KK2V4dGVybiB2b2lkICgqbWFjaF9pbml0X0lSUSkgKHZvaWQpOworZXh0ZXJuIGlycXJldHVybl90ICgqKCptYWNoX2RlZmF1bHRfaGFuZGxlcilbXSkgKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKK2V4dGVybiBpbnQgKCptYWNoX3JlcXVlc3RfaXJxKSAodW5zaWduZWQgaW50IGlycSwgdm9pZCAoKmhhbmRsZXIpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncywgY29uc3QgY2hhciAqZGV2bmFtZSwgdm9pZCAqZGV2X2lkKTsKK2V4dGVybiB2b2lkICgqbWFjaF9mcmVlX2lycSkgKHVuc2lnbmVkIGludCBpcnEsIHZvaWQgKmRldl9pZCk7CitleHRlcm4gdm9pZCAoKm1hY2hfZ2V0X21vZGVsKSAoY2hhciAqbW9kZWwpOworZXh0ZXJuIGludCAoKm1hY2hfZ2V0X2hhcmR3YXJlX2xpc3QpIChjaGFyICpidWZmZXIpOworZXh0ZXJuIGludCAoKm1hY2hfZ2V0X2lycV9saXN0KSAoc3RydWN0IHNlcV9maWxlICpwLCB2b2lkICp2KTsKK2V4dGVybiB2b2lkICgqbWFjaF9wcm9jZXNzX2ludCkgKGludCBpcnEsIHN0cnVjdCBwdF9yZWdzICpmcCk7CisvKiBtYWNoaW5lIGRlcGVuZGVudCB0aW1lciBmdW5jdGlvbnMgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nICgqbWFjaF9nZXR0aW1lb2Zmc2V0KSh2b2lkKTsKK2V4dGVybiB2b2lkICgqbWFjaF9nZXR0b2QpKGludCAqeWVhciwgaW50ICptb24sIGludCAqZGF5LCBpbnQgKmhvdXIsCisJCQkgICBpbnQgKm1pbiwgaW50ICpzZWMpOworZXh0ZXJuIGludCAoKm1hY2hfaHdjbGspKGludCwgc3RydWN0IGh3Y2xrX3RpbWUqKTsKK2V4dGVybiBpbnQgKCptYWNoX3NldF9jbG9ja19tbXNzKSh1bnNpZ25lZCBsb25nKTsKK2V4dGVybiB2b2lkICgqbWFjaF9yZXNldCkoIHZvaWQgKTsKK2V4dGVybiB2b2lkICgqbWFjaF9oYWx0KSggdm9pZCApOworZXh0ZXJuIHZvaWQgKCptYWNoX3Bvd2VyX29mZikoIHZvaWQgKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nICgqbWFjaF9oZF9pbml0KSAodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CitleHRlcm4gdm9pZCAoKm1hY2hfaGRfc2V0dXApKGNoYXIgKiwgaW50ICopOworZXh0ZXJuIGxvbmcgbWFjaF9tYXhfZG1hX2FkZHJlc3M7CitleHRlcm4gdm9pZCAoKm1hY2hfZmxvcHB5X3NldHVwKShjaGFyICosIGludCAqKTsKK2V4dGVybiB2b2lkICgqbWFjaF9mbG9wcHlfZWplY3QpKHZvaWQpOworZXh0ZXJuIHZvaWQgKCptYWNoX2hlYXJ0YmVhdCkgKGludCk7CitleHRlcm4gdm9pZCAoKm1hY2hfbDJfZmx1c2gpIChpbnQpOworZXh0ZXJuIGludCBtYWNoX3N5c3JxX2tleTsKK2V4dGVybiBpbnQgbWFjaF9zeXNycV9zaGlmdF9zdGF0ZTsKK2V4dGVybiBpbnQgbWFjaF9zeXNycV9zaGlmdF9tYXNrOworZXh0ZXJuIGNoYXIgKm1hY2hfc3lzcnFfeGxhdGU7CisKK2V4dGVybiB2b2lkIGNvbmZpZ19CU1AoY2hhciAqY29tbWFuZCwgaW50IGxlbik7CitleHRlcm4gdm9pZCAoKm1hY2hfdGljaykodm9pZCk7CitleHRlcm4gdm9pZCAoKm1hY2hfdHJhcF9pbml0KSh2b2lkKTsKKworI2VuZGlmIC8qIF9NNjhLTk9NTVVfTUFDSERFUF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbWF0aC1lbXUuaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9tYXRoLWVtdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlNzA5MDUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbWF0aC1lbXUuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLW02OGsvbWF0aC1lbXUuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9tYzE0NjgxOHJ0Yy5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L21jMTQ2ODE4cnRjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA3YTA0ODEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbWMxNDY4MThydGMuaApAQCAtMCwwICsxLDkgQEAKKy8qCisgKiBNYWNoaW5lIGRlcGVuZGVudCBhY2Nlc3MgZnVuY3Rpb25zIGZvciBSVEMgcmVnaXN0ZXJzLgorICovCisjaWZuZGVmIF9NNjhLTk9NTVVfTUMxNDY4MThSVENfSAorI2RlZmluZSBfTTY4S05PTU1VX01DMTQ2ODE4UlRDX0gKKworLyogZW1wdHkgaW5jbHVkZSBmaWxlIHRvIHNhdGlzZnkgdGhlIGluY2x1ZGUgaW4gZ2VucnRjLmMvaWRlLWdlb21ldHJ5LmMgKi8KKworI2VuZGlmIC8qIF9NNjhLTk9NTVVfTUMxNDY4MThSVENfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L21jZmNhY2hlLmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbWNmY2FjaGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGQ4YzUzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L21jZmNhY2hlLmgKQEAgLTAsMCArMSwxMjUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICoJbWNmY2FjaGUuaCAtLSBDb2xkRmlyZSBDUFUgY2FjaGUgc3VwcG9ydCBjb2RlCisgKgorICoJKEMpIENvcHlyaWdodCAyMDA0LCBHcmVnIFVuZ2VyZXIgPGdlcmdAc25hcGdlYXIuY29tPgorICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZglfX002OEtOT01NVV9NQ0ZDQUNIRV9ICisjZGVmaW5lCV9fTTY4S05PTU1VX01DRkNBQ0hFX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKy8qCisgKglUaGUgZGlmZmVyZW50IENvbGRGaXJlIGZhbWlsaWVzIGhhdmUgZGlmZmVyZW50IGNhY2hlIGFycmFuZ21lbnRzLgorICoJRXZlcnl0aGluZyBmcm9tIGEgc21hbGwgaW5zdHJ1Y3Rpb24gb25seSBjYWNoZSwgdG8gY29uZmlndXJhYmxlCisgKglkYXRhIGFuZC9vciBpbnN0cnVjdGlvbiBjYWNoZSwgdG8gdW5pZmllZCBpbnN0cnVjdGlvbi9kYXRhLCB0byAKKyAqCWhhcnZhcmQgc3R5bGUgc2VwYXJhdGUgaW5zdHJ1Y3Rpb24gYW5kIGRhdGEgY2FjaGVzLgorICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19NNTIwNikgfHwgZGVmaW5lZChDT05GSUdfTTUyMDZlKSB8fCBkZWZpbmVkKENPTkZJR19NNTI3MikKKy8qCisgKglTaW1wbGUgdmVyc2lvbiAyIGNvcmUgY2FjaGUuIFRoZXNlIGhhdmUgaW5zdHJ1Y3Rpb24gY2FjaGUgb25seSwKKyAqCXdlIGp1c3QgbmVlZCB0byBpbnZhbGlkYXRlIGl0IGFuZCBlbmFibGUgaXQuCisgKi8KKy5tYWNybyBDQUNIRV9FTkFCTEUKKwltb3ZlbAkjMHgwMTAwMDAwMCwlZDAJCS8qIGludmFsaWRhdGUgY2FjaGUgY21kICovCisJbW92ZWMJJWQwLCVDQUNSCQkvKiBkbyBpbnZhbGlkYXRlIGNhY2hlICovCisJbW92ZWwJIzB4ODAwMDAxMDAsJWQwCQkvKiBzZXR1cCBjYWNoZSBtYXNrICovCisJbW92ZWMJJWQwLCVDQUNSCQkvKiBlbmFibGUgY2FjaGUgKi8KKy5lbmRtCisjZW5kaWYgLyogQ09ORklHX001MjA2IHx8IENPTkZJR19NNTIwNmUgfHwgQ09ORklHX001MjcyICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19NNTI3eCkKKy8qCisgKglOZXcgdmVyc2lvbiAyIGNvcmVzIGhhdmUgYSBjb25maWd1cmFibGUgc3BsaXQgY2FjaGUgYXJyYW5nZW1lbnQuCisgKglGb3Igbm93IEkgYW0ganVzdCBlbmFibGluZyBpbnN0cnVjdGlvbiBjYWNoZSAtIGJ1dCB1bHRpbWF0ZWx5IEkKKyAqCXRoaW5rIGEgc3BsaXQgaW5zdHJ1Y3Rpb24vZGF0YSBjYWNoZSB3b3VsZCBiZSBiZXR0ZXIuCisgKi8KKy5tYWNybyBDQUNIRV9FTkFCTEUKKwltb3ZlbAkjMHgwMTQwMDAwMCwlZDAKKwltb3ZlYwklZDAsJUNBQ1IJCS8qIGludmFsaWRhdGUgY2FjaGUgKi8KKwlub3AKKwltb3ZlbAkjMHgwMDAwYzAwMCwlZDAJCS8qIHNldCBTRFJBTSBjYWNoZWQgb25seSAqLworCW1vdmVjCSVkMCwlQUNSMAorCW1vdmVsCSMweDAwMDAwMDAwLCVkMAkJLyogbm8gb3RoZXIgcmVnaW9ucyBjYWNoZWQgKi8KKwltb3ZlYwklZDAsJUFDUjEKKwltb3ZlbAkjMHg4MDQwMDEwMCwlZDAJCS8qIGNvbmZpZ3VyZSBjYWNoZSAqLworCW1vdmVjCSVkMCwlQ0FDUgkJLyogZW5hYmxlIGNhY2hlICovCisJbm9wCisuZW5kbQorI2VuZGlmIC8qIENPTkZJR19NNTI3eCAqLworCisjaWYgZGVmaW5lZChDT05GSUdfTTUyOHgpCisvKgorICoJQ2FjaGUgaXMgdG90YWxseSBicm9rZW4gb24gZWFybHkgNTI4MiBzaWxpY29uLiBTbyBmYXIgbm93IHdlCisgKglkaXNhYmxlIGl0cyBjYWNoZSBhbGwgdG9nZXRoZXIuCisgKi8KKy5tYWNybyBDQUNIRV9FTkFCTEUKKwltb3ZlbAkjMHgwMTAwMDAwMCwlZDAKKwltb3ZlYwklZDAsJUNBQ1IJCS8qIGludmFsaWRhdGUgY2FjaGUgKi8KKwlub3AKKwltb3ZlbAkjMHgwMDAwYzAwMCwlZDAJCS8qIHNldCBTRFJBTSBjYWNoZWQgb25seSAqLworCW1vdmVjCSVkMCwlQUNSMAorCW1vdmVsCSMweDAwMDAwMDAwLCVkMAkJLyogbm8gb3RoZXIgcmVnaW9ucyBjYWNoZWQgKi8KKwltb3ZlYwklZDAsJUFDUjEKKwltb3ZlbAkjMHgwMDAwMDAwMCwlZDAJCS8qIGNvbmZpZ3VyZSBjYWNoZSAqLworCW1vdmVjCSVkMCwlQ0FDUgkJLyogZW5hYmxlIGNhY2hlICovCisJbm9wCisuZW5kbQorI2VuZGlmIC8qIENPTkZJR19NNTI4eCAqLworCisjaWYgZGVmaW5lZChDT05GSUdfTTUyNDkpIHx8IGRlZmluZWQoQ09ORklHX001MzA3KQorLyoKKyAqCVRoZSB2ZXJzaW9uIDMgY29yZSBjYWNoZS4gT2RkbHkgZW5vdWdoIHRoZSB2ZXJzaW9uIDIgY29yZSA1MjQ5CisgKgloYXMgdGhlIHNhbWUgU0RSQU0gYW5kIGNhY2hlIHNldHVwIGFzIHRoZSB2ZXJzaW9uIDMgY29yZXMuCisgKglUaGlzIGlzIGEgc2luZ2xlIHVuaWZpZWQgaW5zdHJ1Y3Rpb24vZGF0YSBjYWNoZS4KKyAqLworLm1hY3JvIENBQ0hFX0VOQUJMRQorCW1vdmVsCSMweDAxMDAwMDAwLCVkMAkJLyogaW52YWxpZGF0ZSB3aG9sZSBjYWNoZSAqLworCW1vdmVjCSVkMCwlQ0FDUgorCW5vcAorI2lmIGRlZmluZWQoREVCVUdHRVJfQ09NUEFUSUJMRV9DQUNIRSkgfHwgZGVmaW5lZChDT05GSUdfU0VDVVJFRURHRU1QMykKKwltb3ZlbAkjMHgwMDAwYzAwMCwlZDAJCS8qIHNldCBTRFJBTSBjYWNoZWQgKHdyaXRlLXRocnUpICovCisjZWxzZQorCW1vdmVsCSMweDAwMDBjMDIwLCVkMAkJLyogc2V0IFNEUkFNIGNhY2hlZCAoY29weWJhY2spICovCisjZW5kaWYKKwltb3ZlYwklZDAsJUFDUjAKKwltb3ZlbAkjMHgwMDAwMDAwMCwlZDAJCS8qIG5vIG90aGVyIHJlZ2lvbnMgY2FjaGVkICovCisJbW92ZWMJJWQwLCVBQ1IxCisJbW92ZWwJIzB4YTAwMDAyMDAsJWQwCQkvKiBlbmFibGUgY2FjaGUgKi8KKwltb3ZlYwklZDAsJUNBQ1IKKwlub3AKKy5lbmRtCisjZW5kaWYgLyogQ09ORklHX001MjQ5IHx8IENPTkZJR19NNTMwNyAqLworCisjaWYgZGVmaW5lZChDT05GSUdfTTU0MDcpCisvKgorICoJVmVyc2lvbiA0IGNvcmVzIGhhdmUgYSB0cnVlIGhhcnZhcmQgc3R5bGUgc2VwYXJhdGUgaW5zdHJ1Y3Rpb24KKyAqCWFuZCBkYXRhIGNhY2hlLiBJbnZhbGlkYXRlIGFuZCBlbmFibGUgY2FjaGUsIGFsc28gZW5hYmxlIHdyaXRlCisgKglidWZmZXJzIGFuZCBicmFuY2ggYWNjZWxlcmF0b3IuCisgKi8KKy5tYWNybyBDQUNIRV9FTkFCTEUKKwltb3ZlbAkjMHgwMTA0MDEwMCwlZDAJCS8qIGludmFsaWRhdGUgd2hvbGUgY2FjaGUgKi8KKwltb3ZlYwklZDAsJUNBQ1IKKwlub3AKKwltb3ZlbAkjMHgwMDBmYzAwMCwlZDAJCS8qIHNldCBTRFJBTSBjYWNoZWQgb25seSAqLworCW1vdmVjCSVkMCwgJUFDUjAKKwltb3ZlbAkjMHgwMDAwMDAwMCwlZDAJCS8qIG5vIG90aGVyIHJlZ2lvbnMgY2FjaGVkICovCisJbW92ZWMJJWQwLCAlQUNSMQorCW1vdmVsCSMweDAwMGZjMDAwLCVkMAkJLyogc2V0IFNEUkFNIGNhY2hlZCBvbmx5ICovCisJbW92ZWMJJWQwLCAlQUNSMgorCW1vdmVsCSMweDAwMDAwMDAwLCVkMAkJLyogbm8gb3RoZXIgcmVnaW9ucyBjYWNoZWQgKi8KKwltb3ZlYwklZDAsICVBQ1IzCisJbW92ZWwJIzB4YjYwODg0MDAsJWQwCQkvKiBlbmFibGUgY2FjaGVzICovCisJbW92ZWMJJWQwLCVDQUNSCisJbm9wCisuZW5kbQorI2VuZGlmIC8qIENPTkZJR19NNTQwNyAqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2VuZGlmCS8qIF9fTTY4S05PTU1VX01DRkNBQ0hFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9tY2ZkbWEuaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9tY2ZkbWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTBjNjA5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L21jZmRtYS5oCkBAIC0wLDAgKzEsMTQ1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCW1jZmRtYS5oIC0tIENvbGRmaXJlIGludGVybmFsIERNQSBzdXBwb3J0IGRlZmluZXMuCisgKgorICoJKEMpIENvcHlyaWdodCAxOTk5LCBSb2IgU2NvdHQgKHJzY290dEBtdHJvYi5tbC5vcmcpCisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmCW1jZmRtYV9oCisjZGVmaW5lCW1jZmRtYV9oCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisvKgorICoJR2V0IGFkZHJlc3Mgc3BlY2lmaWMgZGVmaW5lcyBmb3IgdGhpcyBDb2xkZmlyZSBtZW1iZXIuCisgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19NNTIwNikgfHwgZGVmaW5lZChDT05GSUdfTTUyMDZlKQorI2RlZmluZQlNQ0ZETUFfQkFTRTAJCTB4MjAwCQkvKiBCYXNlIGFkZHJlc3Mgb2YgRE1BIDAgKi8KKyNkZWZpbmUJTUNGRE1BX0JBU0UxCQkweDI0MAkJLyogQmFzZSBhZGRyZXNzIG9mIERNQSAxICovCisjZWxpZiBkZWZpbmVkKENPTkZJR19NNTI3MikKKyNkZWZpbmUJTUNGRE1BX0JBU0UwCQkweDBlMAkJLyogQmFzZSBhZGRyZXNzIG9mIERNQSAwICovCisjZWxpZiBkZWZpbmVkKENPTkZJR19NNTI3eCkgfHwgZGVmaW5lZChDT05GSUdfTTUyOHgpCisvKiBUaGVzZSBhcmUgcmVsYXRpdmUgdG8gdGhlIElQU0JBUiwgbm90IE1CQVIgKi8KKyNkZWZpbmUJTUNGRE1BX0JBU0UwCQkweDEwMAkJLyogQmFzZSBhZGRyZXNzIG9mIERNQSAwICovCisjZGVmaW5lCU1DRkRNQV9CQVNFMQkJMHgxNDAJCS8qIEJhc2UgYWRkcmVzcyBvZiBETUEgMSAqLworI2RlZmluZQlNQ0ZETUFfQkFTRTIJCTB4MTgwCQkvKiBCYXNlIGFkZHJlc3Mgb2YgRE1BIDIgKi8KKyNkZWZpbmUJTUNGRE1BX0JBU0UzCQkweDFDMAkJLyogQmFzZSBhZGRyZXNzIG9mIERNQSAzICovCisjZWxpZiBkZWZpbmVkKENPTkZJR19NNTI0OSkgfHwgZGVmaW5lZChDT05GSUdfTTUzMDcpIHx8IGRlZmluZWQoQ09ORklHX001NDA3KQorI2RlZmluZQlNQ0ZETUFfQkFTRTAJCTB4MzAwCQkvKiBCYXNlIGFkZHJlc3Mgb2YgRE1BIDAgKi8KKyNkZWZpbmUJTUNGRE1BX0JBU0UxCQkweDM0MAkJLyogQmFzZSBhZGRyZXNzIG9mIERNQSAxICovCisjZGVmaW5lCU1DRkRNQV9CQVNFMgkJMHgzODAJCS8qIEJhc2UgYWRkcmVzcyBvZiBETUEgMiAqLworI2RlZmluZQlNQ0ZETUFfQkFTRTMJCTB4M0MwCQkvKiBCYXNlIGFkZHJlc3Mgb2YgRE1BIDMgKi8KKyNlbmRpZgorCisKKyNpZiAhZGVmaW5lZChDT05GSUdfTTUyNzIpCisKKy8qCisgKglEZWZpbmUgdGhlIERNQSByZWdpc3RlciBzZXQgYWRkcmVzc2VzLgorICogICAgICBOb3RlOiB0aGVzZSBhcmUgbG9uZ3dvcmQgcmVnaXN0ZXJzLCB1c2UgdW5zaWduZWQgbG9uZyBhcyBkYXRhIHR5cGUKKyAqLworI2RlZmluZQlNQ0ZETUFfU0FSCQkweDAwCQkvKiBETUEgc291cmNlIGFkZHJlc3MgKHIvdykgKi8KKyNkZWZpbmUJTUNGRE1BX0RBUgkJMHgwMQkJLyogRE1BIGRlc3RpbmF0aW9uIGFkciAoci93KSAqLworLyogdGhlc2UgYXJlIHdvcmQgcmVnaXN0ZXJzLCB1c2UgdW5zaWduZWQgc2hvcnQgZGF0YSB0eXBlICovCisjZGVmaW5lCU1DRkRNQV9EQ1IJCTB4MDQJCS8qIERNQSBjb250cm9sIHJlZyAoci93KSAqLworI2RlZmluZQlNQ0ZETUFfQkNSCQkweDA2CQkvKiBETUEgYnl0ZSBjb3VudCByZWcgKHIvdykgKi8KKy8qIHRoZXNlIGFyZSBieXRlIHJlZ2lzdGVycywgdXNlIHVuc2lnZWQgY2hhciBkYXRhIHR5cGUgKi8KKyNkZWZpbmUJTUNGRE1BX0RTUgkJMHgxMAkJLyogRE1BIHN0YXR1cyByZWcgKHIvdykgKi8KKyNkZWZpbmUJTUNGRE1BX0RJVlIJCTB4MTQJCS8qIERNQSBpbnRlcnJ1cHQgdmVjIChyL3cpICovCisKKy8qCisgKglCaXQgZGVmaW5pdGlvbnMgZm9yIHRoZSBETUEgQ29udHJvbCBSZWdpc3RlciAoRENSKS4KKyAqLworI2RlZmluZQlNQ0ZETUFfRENSX0lOVAkgICAgICAgIDB4ODAwMAkJLyogRW5hYmxlIGNvbXBsZXRpb24gaXJxICovCisjZGVmaW5lCU1DRkRNQV9EQ1JfRUVYVAkgICAgICAgIDB4NDAwMAkJLyogRW5hYmxlIGV4dGVybmFsIERNQSByZXEgKi8KKyNkZWZpbmUJTUNGRE1BX0RDUl9DUyAJICAgICAgICAweDIwMDAJCS8qIEVuYWJsZSBjeWNsZSBzdGVhbCAqLworI2RlZmluZQlNQ0ZETUFfRENSX0FBICAgCTB4MTAwMAkJLyogRW5hYmxlIGF1dG8gYWxpZ25tZW50ICovCisjZGVmaW5lCU1DRkRNQV9EQ1JfQldDX01BU0sgIAkweDBFMDAJCS8qIEJhbmR3aWR0aCBjdGwgbWFzayAqLworI2RlZmluZSBNQ0ZETUFfRENSX0JXQ181MTIgICAgICAweDAyMDAgICAgICAgICAgLyogQmFuZHdpZHRoOiAgIDUxMiBCeXRlcyAqLworI2RlZmluZSBNQ0ZETUFfRENSX0JXQ18xMDI0ICAgICAweDA0MDAgICAgICAgICAgLyogQmFuZHdpZHRoOiAgMTAyNCBCeXRlcyAqLworI2RlZmluZSBNQ0ZETUFfRENSX0JXQ18yMDQ4ICAgICAweDA2MDAgICAgICAgICAgLyogQmFuZHdpZHRoOiAgMjA0OCBCeXRlcyAqLworI2RlZmluZSBNQ0ZETUFfRENSX0JXQ180MDk2ICAgICAweDA4MDAgICAgICAgICAgLyogQmFuZHdpZHRoOiAgNDA5NiBCeXRlcyAqLworI2RlZmluZSBNQ0ZETUFfRENSX0JXQ184MTkyICAgICAweDBhMDAgICAgICAgICAgLyogQmFuZHdpZHRoOiAgODE5MiBCeXRlcyAqLworI2RlZmluZSBNQ0ZETUFfRENSX0JXQ18xNjM4NCAgICAweDBjMDAgICAgICAgICAgLyogQmFuZHdpZHRoOiAxNjM4NCBCeXRlcyAqLworI2RlZmluZSBNQ0ZETUFfRENSX0JXQ18zMjc2OCAgICAweDBlMDAgICAgICAgICAgLyogQmFuZHdpZHRoOiAzMjc2OCBCeXRlcyAqLworI2RlZmluZQlNQ0ZETUFfRENSX1NBQSAgICAgICAgIAkweDAxMDAJCS8qIFNpbmdsZSBBZGRyZXNzIEFjY2VzcyAqLworI2RlZmluZQlNQ0ZETUFfRENSX1NfUlcgICAgICAgIAkweDAwODAJCS8qIFNBQSByZWFkL3dyaXRlIHZhbHVlICovCisjZGVmaW5lCU1DRkRNQV9EQ1JfU0lOQyAgICAgICAgCTB4MDA0MAkJLyogU291cmNlIGFkZHIgaW5jIGVuYWJsZSAqLworI2RlZmluZQlNQ0ZETUFfRENSX1NTSVpFX01BU0sgIAkweDAwMzAJCS8qIFNyYyB4ZmVyIHNpemUgKi8KKyNkZWZpbmUJTUNGRE1BX0RDUl9TU0laRV9MT05HICAJMHgwMDAwCQkvKiBTcmMgeGZlciBzaXplLCAwMCA9IGxvbmd3ICovCisjZGVmaW5lCU1DRkRNQV9EQ1JfU1NJWkVfQllURSAgCTB4MDAxMAkJLyogU3JjIHhmZXIgc2l6ZSwgMDEgPSBieXRlICovCisjZGVmaW5lCU1DRkRNQV9EQ1JfU1NJWkVfV09SRCAgCTB4MDAyMAkJLyogU3JjIHhmZXIgc2l6ZSwgMTAgPSB3b3JkICovCisjZGVmaW5lCU1DRkRNQV9EQ1JfU1NJWkVfTElORSAgCTB4MDAzMAkJLyogU3JjIHhmZXIgc2l6ZSwgMTEgPSBsaW5lICovCisjZGVmaW5lCU1DRkRNQV9EQ1JfRElOQyAgICAgICAgCTB4MDAwOAkJLyogRGVzdCBhZGRyIGluYyBlbmFibGUgKi8KKyNkZWZpbmUJTUNGRE1BX0RDUl9EU0laRV9NQVNLICAJMHgwMDA2CQkvKiBEZXN0IHhmZXIgc2l6ZSAqLworI2RlZmluZQlNQ0ZETUFfRENSX0RTSVpFX0xPTkcgIAkweDAwMDAJCS8qIERlc3QgeGZlciBzaXplLCAwMCA9IGxvbmcgKi8KKyNkZWZpbmUJTUNGRE1BX0RDUl9EU0laRV9CWVRFICAJMHgwMDAyCQkvKiBEZXN0IHhmZXIgc2l6ZSwgMDEgPSBieXRlICovCisjZGVmaW5lCU1DRkRNQV9EQ1JfRFNJWkVfV09SRCAgCTB4MDAwNAkJLyogRGVzdCB4ZmVyIHNpemUsIDEwID0gd29yZCAqLworI2RlZmluZQlNQ0ZETUFfRENSX0RTSVpFX0xJTkUgIAkweDAwMDYJCS8qIERlc3QgeGZlciBzaXplLCAxMSA9IGxpbmUgKi8KKyNkZWZpbmUJTUNGRE1BX0RDUl9TVEFSVCAgICAgICAJMHgwMDAxCQkvKiBTdGFydCB0cmFuc2ZlciAqLworCisvKgorICoJQml0IGRlZmluaXRpb25zIGZvciB0aGUgRE1BIFN0YXR1cyBSZWdpc3RlciAoRFNSKS4KKyAqLworI2RlZmluZQlNQ0ZETUFfRFNSX0NFCSAgICAgICAgMHg0MAkJLyogQ29uZmlnIGVycm9yICovCisjZGVmaW5lCU1DRkRNQV9EU1JfQkVTCSAgICAgICAgMHgyMAkJLyogQnVzIEVycm9yIG9uIHNvdXJjZSAqLworI2RlZmluZQlNQ0ZETUFfRFNSX0JFRCAJICAgICAgICAweDEwCQkvKiBCdXMgRXJyb3Igb24gZGVzdCAqLworI2RlZmluZQlNQ0ZETUFfRFNSX1JFUSAgIAkweDA0CQkvKiBSZXF1ZXN0cyByZW1haW5pbmcgKi8KKyNkZWZpbmUJTUNGRE1BX0RTUl9CU1kgIAkweDAyCQkvKiBCdXN5ICovCisjZGVmaW5lCU1DRkRNQV9EU1JfRE9ORSAgICAgICAgCTB4MDEJCS8qIERNQSB0cmFuc2ZlciBjb21wbGV0ZSAqLworCisjZWxzZSAvKiBUaGlzIGlzIGFuIE1DRjUyNzIgKi8KKworI2RlZmluZSBNQ0ZETUFfRE1SICAgICAgICAweDAwICAgIC8qIE1vZGUgUmVnaXN0ZXIgKHIvdykgKi8KKyNkZWZpbmUgTUNGRE1BX0RJUiAgICAgICAgMHgwMyAgICAvKiBJbnRlcnJ1cHQgdHJpZ2dlciByZWdpc3RlciAoci93KSAqLworI2RlZmluZSBNQ0ZETUFfRFNBUiAgICAgICAweDAzICAgIC8qIFNvdXJjZSBBZGRyZXNzIHJlZ2lzdGVyIChyL3cpICovCisjZGVmaW5lIE1DRkRNQV9EREFSICAgICAgIDB4MDQgICAgLyogRGVzdGluYXRpb24gQWRkcmVzcyByZWdpc3RlciAoci93KSAqLworI2RlZmluZSBNQ0ZETUFfREJDUiAgICAgICAweDAyICAgIC8qIEJ5dGUgQ291bnQgUmVnaXN0ZXIgKHIvdykgKi8KKworLyogQml0IGRlZmluaXRpb25zIGZvciB0aGUgRE1BIE1vZGUgUmVnaXN0ZXIgKERNUikgKi8KKyNkZWZpbmUgTUNGRE1BX0RNUl9SRVNFVCAgICAgMHg4MDAwMDAwMEwgLyogUmVzZXQgYml0ICovCisjZGVmaW5lIE1DRkRNQV9ETVJfRU4gICAgICAgIDB4NDAwMDAwMDBMIC8qIERNQSBlbmFibGUgKi8KKyNkZWZpbmUgTUNGRE1BX0RNUl9SUU0gICAgICAgMHgwMDBDMDAwMEwgLyogUmVxdWVzdCBNb2RlIE1hc2sgKi8KKyNkZWZpbmUgTUNGRE1BX0RNUl9SUU1fRFVBTCAgMHgwMDBDMDAwMEwgLyogRHVhbCBhZGRyZXNzIG1vZGUsIHRoZSBvbmx5IHZhbGlkIG1vZGUgKi8KKyNkZWZpbmUgTUNGRE1BX0RNUl9EU1RNICAgICAgMHgwMDAwMjAwMEwgLyogRGVzdGluYXRpb24gYWRkcmVzc2luZyBtYXNrICovCisjZGVmaW5lIE1DRkRNQV9ETVJfRFNUTV9TQSAgIDB4MDAwMDAwMDBMIC8qIERlc3RpbmF0aW9uIHVzZXMgc3RhdGljIGFkZHJlc3NpbmcgKi8KKyNkZWZpbmUgTUNGRE1BX0RNUl9EU1RNX0lBICAgMHgwMDAwMjAwMEwgLyogRGVzdGluYXRpb24gdXNlcyBpbmNyZW1lbnRhbCBhZGRyZXNzaW5nICovCisjZGVmaW5lIE1DRkRNQV9ETVJfRFNUVF9VRCAgIDB4MDAwMDA0MDBMIC8qIERlc3RpbmF0aW9uIGlzIHVzZXIgZGF0YSAqLworI2RlZmluZSBNQ0ZETUFfRE1SX0RTVFRfVUMgICAweDAwMDAwODAwTCAvKiBEZXN0aW5hdGlvbiBpcyB1c2VyIGNvZGUgKi8KKyNkZWZpbmUgTUNGRE1BX0RNUl9EU1RUX1NEICAgMHgwMDAwMTQwMEwgLyogRGVzdGluYXRpb24gaXMgc3VwZXJ2aXNvciBkYXRhICovCisjZGVmaW5lIE1DRkRNQV9ETVJfRFNUVF9TQyAgIDB4MDAwMDE4MDBMIC8qIERlc3RpbmF0aW9uIGlzIHN1cGVydmlzb3IgY29kZSAqLworI2RlZmluZSBNQ0ZETUFfRE1SX0RTVFNfT0ZGICAweDggICAgICAgICAvKiBvZmZzZXQgdG8gdGhlIGRlc3RpbmF0aW9uIHNpemUgYml0cyAqLworI2RlZmluZSBNQ0ZETUFfRE1SX0RTVFNfTE9ORyAweDAwMDAwMDAwTCAvKiBMb25nIGRlc3RpbmF0aW9uIHNpemUgKi8KKyNkZWZpbmUgTUNGRE1BX0RNUl9EU1RTX0JZVEUgMHgwMDAwMDEwMEwgLyogQnl0ZSBkZXN0aW5hdGlvbiBzaXplICovCisjZGVmaW5lIE1DRkRNQV9ETVJfRFNUU19XT1JEIDB4MDAwMDAyMDBMIC8qIFdvcmQgZGVzdGluYXRpb24gc2l6ZSAqLworI2RlZmluZSBNQ0ZETUFfRE1SX0RTVFNfTElORSAweDAwMDAwMzAwTCAvKiBMaW5lIGRlc3RpbmF0aW9uIHNpemUgKi8KKyNkZWZpbmUgTUNGRE1BX0RNUl9TUkNNICAgICAgMHgwMDAwMDAyMEwgLyogU291cmNlIGFkZHJlc3NpbmcgbWFzayAqLworI2RlZmluZSBNQ0ZETUFfRE1SX1NSQ01fU0EgICAweDAwMDAwMDAwTCAvKiBTb3VyY2UgdXNlcyBzdGF0aWMgYWRkcmVzc2luZyAqLworI2RlZmluZSBNQ0ZETUFfRE1SX1NSQ01fSUEgICAweDAwMDAwMDIwTCAvKiBTb3VyY2UgdXNlcyBpbmNyZW1lbnRhbCBhZGRyZXNzaW5nICovCisjZGVmaW5lIE1DRkRNQV9ETVJfU1JDVF9VRCAgIDB4MDAwMDAwMDRMIC8qIFNvdXJjZSBpcyB1c2VyIGRhdGEgKi8KKyNkZWZpbmUgTUNGRE1BX0RNUl9TUkNUX1VDICAgMHgwMDAwMDAwOEwgLyogU291cmNlIGlzIHVzZXIgY29kZSAqLworI2RlZmluZSBNQ0ZETUFfRE1SX1NSQ1RfU0QgICAweDAwMDAwMDE0TCAvKiBTb3VyY2UgaXMgc3VwZXJ2aXNvciBkYXRhICovCisjZGVmaW5lIE1DRkRNQV9ETVJfU1JDVF9TQyAgIDB4MDAwMDAwMThMIC8qIFNvdXJjZSBpcyBzdXBlcnZpc29yIGNvZGUgKi8KKyNkZWZpbmUgTUNGRE1BX0RNUl9TUkNTX09GRiAgMHgwICAgICAgICAgLyogT2Zmc2V0IHRvIHRoZSBzb3VyY2Ugc2l6ZSBiaXRzICovCisjZGVmaW5lIE1DRkRNQV9ETVJfU1JDU19MT05HIDB4MDAwMDAwMDBMIC8qIExvbmcgc291cmNlIHNpemUgKi8KKyNkZWZpbmUgTUNGRE1BX0RNUl9TUkNTX0JZVEUgMHgwMDAwMDAwMUwgLyogQnl0ZSBzb3VyY2Ugc2l6ZSAqLworI2RlZmluZSBNQ0ZETUFfRE1SX1NSQ1NfV09SRCAweDAwMDAwMDAyTCAvKiBXb3JkIHNvdXJjZSBzaXplICovCisjZGVmaW5lIE1DRkRNQV9ETVJfU1JDU19MSU5FIDB4MDAwMDAwMDNMIC8qIExpbmUgc291cmNlIHNpemUgKi8KKworLyogQml0IGRlZmluaXRpb25zIGZvciB0aGUgRE1BIGludGVycnVwdCByZWdpc3RlciAoRElSKSAqLworI2RlZmluZSBNQ0ZETUFfRElSX0lOVkVOICAgICAweDEwMDAgLyogSW52YWxpZCBDb21iaW5hdGlvbiBpbnRlcnJ1cHQgZW5hYmxlICovCisjZGVmaW5lIE1DRkRNQV9ESVJfQVNDRU4gICAgIDB4MDgwMCAvKiBBZGRyZXNzIFNlcXVlbmNlIENvbXBsZXRlIChDb21wbGV0aW9uKSBpbnRlcnJ1cHQgZW5hYmxlICovCisjZGVmaW5lIE1DRkRNQV9ESVJfVEVFTiAgICAgIDB4MDIwMCAvKiBUcmFuc2ZlciBFcnJvciBpbnRlcnJ1cHQgZW5hYmxlICovCisjZGVmaW5lIE1DRkRNQV9ESVJfVENFTiAgICAgIDB4MDEwMCAvKiBUcmFuc2ZlciBDb21wbGV0ZSAoYSBidXMgdHJhbnNmZXIsIHRoYXQgaXMpIGludGVycnVwdCBlbmFibGUgKi8KKyNkZWZpbmUgTUNGRE1BX0RJUl9JTlYgICAgICAgMHgxMDAwIC8qIEludmFsaWQgQ29tYmluYXRpb24gKi8KKyNkZWZpbmUgTUNGRE1BX0RJUl9BU0MgICAgICAgMHgwMDA4IC8qIEFkZHJlc3MgU2VxdWVuY2UgQ29tcGxldGUgKERNQSBDb21wbGV0aW9uKSAqLworI2RlZmluZSBNQ0ZETUFfRElSX1RFICAgICAgICAweDAwMDIgLyogVHJhbnNmZXIgRXJyb3IgKi8KKyNkZWZpbmUgTUNGRE1BX0RJUl9UQyAgICAgICAgMHgwMDAxIC8qIFRyYW5zZmVyIENvbXBsZXRlICovCisKKyNlbmRpZiAvKiAhZGVmaW5lZChDT05GSUdfTTUyNzIpICovIAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNlbmRpZgkvKiBtY2ZkbWFfaCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L21jZm1idXMuaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9tY2ZtYnVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc2MjU4OQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9tY2ZtYnVzLmgKQEAgLTAsMCArMSw3OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiAgICAgIG1jZm1idXMuaCAtLSBDb2xkZmlyZSBNQlVTIHN1cHBvcnQgZGVmaW5lcy4KKyAqCisgKiAgICAgIChDKSBDb3B5cmlnaHQgMTk5OSwgTWFydGluIEZsb2VlciAobWZsb2VlckBheGNlbnQuZGUpIAorICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgbWNmbWJ1c19oCisjZGVmaW5lIG1jZm1idXNfaAorI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisKKyNkZWZpbmUgTUNGTUJVU19CQVNFCQkweDI4MAorI2RlZmluZSBNQ0ZNQlVTX0lSUV9WRUNUT1IJMHgxOQorI2RlZmluZSBNQ0ZNQlVTX0lSUQkJMHgxCisjZGVmaW5lIE1DRk1CVVNfQ0xLCQkweDNmCisjZGVmaW5lIE1DRk1CVVNfSVJRX0xFVkVMCTB4MDcJLypJUlEgTGV2ZWwgMSovCisjZGVmaW5lIE1DRk1CVVNfQUREUkVTUwkJMHgwMQorCisKKy8qCisqCURlZmluZSB0aGUgNTMwNyBNQlVTIHJlZ2lzdGVyIHNldCBhZGRyZXNzZXMKKyovCisKKyNkZWZpbmUgTUNGTUJVU19NQURSCTB4MDAKKyNkZWZpbmUgTUNGTUJVU19NRkRSCTB4MDQKKyNkZWZpbmUgTUNGTUJVU19NQkNSCTB4MDgKKyNkZWZpbmUgTUNGTUJVU19NQlNSCTB4MEMKKyNkZWZpbmUgTUNGTUJVU19NQkRSCTB4MTAKKworCisjZGVmaW5lIE1DRk1CVVNfTUFEUl9BRERSKGEpCSgoKGEpJjB4N0YpPDwweDAxKSAvKlNsYXZlIEFkZHJlc3MqLworCisjZGVmaW5lIE1DRk1CVVNfTUZEUl9NQkMoYSkJKChhKSYweDNGKQkgICAvKk0tQnVzIENsb2NrKi8KKworLyoKKyoJRGVmaW5lIGJpdCBmbGFncyBpbiBDb250cm9sbCBSZWdpc3RlcgorKi8KKworI2RlZmluZSBNQ0ZNQlVTX01CQ1JfTUVOICAgICAgICAgICAoMHg4MCkgIC8qIE0tQnVzIEVuYWJsZSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTUNGTUJVU19NQkNSX01JRU4gICAgICAgICAgKDB4NDApICAvKiBNLUJ1cyBJbnRlcnJ1cHQgRW5hYmxlICAgICAgICovCisjZGVmaW5lIE1DRk1CVVNfTUJDUl9NU1RBICAgICAgICAgICgweDIwKSAgLyogTWFzdGVyL1NsYXZlIE1vZGUgU2VsZWN0IEJpdCAqLworI2RlZmluZSBNQ0ZNQlVTX01CQ1JfTVRYICAgICAgICAgICAoMHgxMCkgIC8qIFRyYW5zbWl0L1JjdiBNb2RlIFNlbGVjdCBCaXQgKi8KKyNkZWZpbmUgTUNGTUJVU19NQkNSX1RYQUsgICAgICAgICAgKDB4MDgpICAvKiBUcmFuc21pdCBBY2tub3dsZWRnZSBFbmFibGUgICovCisjZGVmaW5lIE1DRk1CVVNfTUJDUl9SU1RBICAgICAgICAgICgweDA0KSAgLyogUmVwZWF0IFN0YXJ0ICAgICAgICAgICAgICAgICAqLworCisvKgorKglEZWZpbmUgYml0IGZsYWdzIGluIFN0YXR1cyBSZWdpc3RlcgorKi8KKworI2RlZmluZSBNQ0ZNQlVTX01CU1JfTUNGICAgICAgICAgICAoMHg4MCkgIC8qIERhdGEgVHJhbnNmZXIgQ29tcGxldGUgICAgICAgKi8KKyNkZWZpbmUgTUNGTUJVU19NQlNSX01BQVMgICAgICAgICAgKDB4NDApICAvKiBBZGRyZXNzZWQgYXMgYSBTbGF2ZSAgICAgICAgICovCisjZGVmaW5lIE1DRk1CVVNfTUJTUl9NQkIgICAgICAgICAgICgweDIwKSAgLyogQnVzIEJ1c3kgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBNQ0ZNQlVTX01CU1JfTUFMICAgICAgICAgICAoMHgxMCkgIC8qIEFyYml0cmF0aW9uIExvc3QgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTUNGTUJVU19NQlNSX1NSVyAgICAgICAgICAgKDB4MDQpICAvKiBTbGF2ZSBUcmFuc21pdCAgICAgICAgICAgICAgICovCisjZGVmaW5lIE1DRk1CVVNfTUJTUl9NSUYgICAgICAgICAgICgweDAyKSAgLyogTS1CdXMgSW50ZXJydXB0ICAgICAgICAgICAgICAqLworI2RlZmluZSBNQ0ZNQlVTX01CU1JfUlhBSyAgICAgICAgICAoMHgwMSkgIC8qIE5vIEFja25vd2xlZGdlIFJlY2VpdmVkICAgICAgKi8KKworLyoKKyoJRGVmaW5lIGJpdCBmbGFncyBpbiBEQVRBIEkvTyBSZWdpc3RlcgorKi8KKworI2RlZmluZSBNQ0ZNQlVTX01CRFJfUkVBRCAgICAgICAgICAoMHgwMSkgIC8qIDE9cmVhZCAwPXdyaXRlIE1CVVMgKi8KKworI2RlZmluZSBNQlVTSU9DU0NMT0NLCQkxCisjZGVmaW5lIE1CVVNJT0NHQ0xPQ0sJCTIKKyNkZWZpbmUgTUJVU0lPQ1NBRERSCQkJMworI2RlZmluZSBNQlVTSU9DR0FERFIJCQk0CisjZGVmaW5lIE1CVVNJT0NTU0xBRERSCQkJNQorI2RlZmluZSBNQlVTSU9DR1NMQUREUgkJCTYKKyNkZWZpbmUgTUJVU0lPQ1NTVUJBRERSCQkJNworI2RlZmluZSBNQlVTSU9DR1NVQkFERFIJCQk4CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L21jZm5lLmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbWNmbmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDU4NzU2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L21jZm5lLmgKQEAgLTAsMCArMSwzNTMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICoJbWNmbmUuaCAtLSBORTIwMDAgaW4gQ29sZEZpcmUgZXZhbCBib2FyZHMuCisgKgorICoJKEMpIENvcHlyaWdodCAxOTk5LTIwMDAsIEdyZWcgVW5nZXJlciAoZ2VyZ0BzbmFwZ2Vhci5jb20pCisgKgkoQykgQ29weXJpZ2h0IDIwMDAsICAgICAgTGluZW8gKHd3dy5saW5lby5jb20pCisgKgkoQykgQ29weXJpZ2h0IDIwMDEsICAgICAgU25hcEdlYXIgKHd3dy5zbmFwZ2Vhci5jb20pCisgKgorICogICAgICAxOTk5MDQwOSBEYXZpZCBXLiBNaWxsZXIgIENvbnZlcnRlZCBmcm9tIG01MjA2bmUuaCBmb3IgNTMwNyBldmFsIGJvYXJkCisgKgorICogICAgICBIYWNrZWQgc3VwcG9ydCBmb3IgbTUyMDZlIENhZHJlIElJSSBldmFsdWF0aW9uIGJvYXJkCisgKiAgICAgIEZyZWQgU3RldmVucyAoZnJlZC5zdGV2ZW5zQHBlbXN0YXIuY29tKSAxMyBBcHJpbCAxOTk5CisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmCW1jZm5lX2gKKyNkZWZpbmUJbWNmbmVfaAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworLyoKKyAqCVN1cHBvcnQgZm9yIE5FMjAwMCBjbG9uZXMgZGV2aWNlcyBpbiBDb2xkRmlyZSBiYXNlZCBib2FyZHMuCisgKglOb3QgYWxsIGJvYXJkcyBhZGRyZXNzIHRoZXNlIHBhcnRzIHRoZSBzYW1lIHdheSwgc29tZSB1c2UgYQorICoJZGlyZWN0IGFkZHJlc3NpbmcgbWV0aG9kLCBvdGhlcnMgdXNlIGEgc2lkZS1iYW5kIGFkZHJlc3Mgc3BhY2UKKyAqCXRvIGFjY2VzcyBvZGQgYWRkcmVzcyByZWdpc3RlcnMsIHNvbWUgcmVxdWlyZSBieXRlIHN3YXBwaW5nCisgKglvdGhlcnMgZG8gbm90LgorICovCisjZGVmaW5lCUJTV0FQKHcpCSgoKHcpIDw8IDgpIHwgKCh3KSA+PiA4KSkKKyNkZWZpbmUJUlNXQVAodykJKHcpCisKKworLyoKKyAqCURlZmluZSB0aGUgYmFzaWMgaGFyZHdhcmUgcmVzb3VyY2VzIG9mIE5FMjAwMCBib2FyZHMuCisgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX001MjA2KSAmJiBkZWZpbmVkKENPTkZJR19BUk5FV1NIKQorI2RlZmluZSBORTIwMDBfQUREUgkJMHg0MDAwMDMwMAorI2RlZmluZSBORTIwMDBfT0RET0ZGU0VUCTB4MDAwMTAwMDAKKyNkZWZpbmUJTkUyMDAwX0lSUV9WRUNUT1IJMHhmMAorI2RlZmluZQlORTIwMDBfSVJRX1BSSU9SSVRZCTIKKyNkZWZpbmUJTkUyMDAwX0lSUV9MRVZFTAk0CisjZGVmaW5lCU5FMjAwMF9CWVRFCQl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19NNTIwNmUpICYmIGRlZmluZWQoQ09ORklHX01PVE9ST0xBKQorI2RlZmluZQlORTIwMDBfQUREUgkJMHg0MDAwMDMwMAorI2RlZmluZQlORTIwMDBfT0RET0ZGU0VUCTB4MDAwMTAwMDAKKyNkZWZpbmUJTkUyMDAwX0lSUV9WRUNUT1IJMHgxYworI2RlZmluZQlORTIwMDBfSVJRX1BSSU9SSVRZCTIKKyNkZWZpbmUJTkUyMDAwX0lSUV9MRVZFTAk0CisjZGVmaW5lCU5FMjAwMF9CWVRFCQl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19NNTIwNmUpICYmIGRlZmluZWQoQ09ORklHX05FVHRlbCkKKyNkZWZpbmUgTkUyMDAwX0FERFIJCTB4MzAwMDAzMDAKKyNkZWZpbmUgTkUyMDAwX0lSUV9WRUNUT1IJMjUKKyNkZWZpbmUgTkUyMDAwX0lSUV9QUklPUklUWQkxCisjZGVmaW5lIE5FMjAwMF9JUlFfTEVWRUwJMworI2RlZmluZQlORTIwMDBfQllURQkJdm9sYXRpbGUgdW5zaWduZWQgY2hhcgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19NNTIwNmUpICYmIGRlZmluZWQoQ09ORklHX0NGVjI0MCkKKyNkZWZpbmUgTkUyMDAwX0FERFIgICAgICAgICAgICAgMHg0MDAxMDAwMAorI2RlZmluZSBORTIwMDBfQUREUjEgICAgICAgICAgICAweDQwMDEwMDAxCisjZGVmaW5lIE5FMjAwMF9PRERPRkZTRVQgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgTkUyMDAwX0lSUSAgICAgICAgICAgICAgMQorI2RlZmluZSBORTIwMDBfSVJRX1ZFQ1RPUiAgICAgICAweDE5CisjZGVmaW5lIE5FMjAwMF9JUlFfUFJJT1JJVFkgICAgIDIKKyNkZWZpbmUgTkUyMDAwX0lSUV9MRVZFTCAgICAgICAgMQorI2RlZmluZQlORTIwMDBfQllURQkJdm9sYXRpbGUgdW5zaWduZWQgY2hhcgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19NNTMwNykgJiYgZGVmaW5lZChDT05GSUdfTU9UT1JPTEEpCisjZGVmaW5lIE5FMjAwMF9BRERSCQkweDQwMDAwMzAwCisjZGVmaW5lIE5FMjAwMF9PRERPRkZTRVQJMHgwMDAxMDAwMAorI2RlZmluZSBORTIwMDBfSVJRX1ZFQ1RPUgkweDFiCisjZGVmaW5lCU5FMjAwMF9CWVRFCQl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19NNTI3MikgJiYgZGVmaW5lZChDT05GSUdfTkVUdGVsKQorI2RlZmluZSBORTIwMDBfQUREUgkJMHgzMDYwMDMwMAorI2RlZmluZSBORTIwMDBfT0RET0ZGU0VUCTB4MDAwMDgwMDAKKyNkZWZpbmUgTkUyMDAwX0lSUV9WRUNUT1IJNjcKKyN1bmRlZglCU1dBUAorI2RlZmluZQlCU1dBUCh3KQkJKHcpCisjZGVmaW5lCU5FMjAwMF9CWVRFCQl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydAorI3VuZGVmCVJTV0FQCisjZGVmaW5lCVJTV0FQKHcpCQkoKCh3KSA8PCA4KSB8ICgodykgPj4gOCkpCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX001MzA3KSAmJiBkZWZpbmVkKENPTkZJR19ORVR0ZWwpCisjZGVmaW5lIE5FMjAwMF9BRERSMAkJMHgzMDYwMDMwMAorI2RlZmluZSBORTIwMDBfQUREUjEJCTB4MzA4MDAzMDAKKyNkZWZpbmUgTkUyMDAwX09ERE9GRlNFVAkweDAwMDA4MDAwCisjZGVmaW5lIE5FMjAwMF9JUlFfVkVDVE9SMAkyNworI2RlZmluZSBORTIwMDBfSVJRX1ZFQ1RPUjEJMjkKKyN1bmRlZglCU1dBUAorI2RlZmluZQlCU1dBUCh3KQkJKHcpCisjZGVmaW5lCU5FMjAwMF9CWVRFCQl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydAorI3VuZGVmCVJTV0FQCisjZGVmaW5lCVJTV0FQKHcpCQkoKCh3KSA8PCA4KSB8ICgodykgPj4gOCkpCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX001MzA3KSAmJiBkZWZpbmVkKENPTkZJR19TRUNVUkVFREdFTVAzKQorI2RlZmluZSBORTIwMDBfQUREUgkJMHgzMDYwMDMwMAorI2RlZmluZSBORTIwMDBfT0RET0ZGU0VUCTB4MDAwMDgwMDAKKyNkZWZpbmUgTkUyMDAwX0lSUV9WRUNUT1IJMjcKKyN1bmRlZglCU1dBUAorI2RlZmluZQlCU1dBUCh3KQkJKHcpCisjZGVmaW5lCU5FMjAwMF9CWVRFCQl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydAorI3VuZGVmCVJTV0FQCisjZGVmaW5lCVJTV0FQKHcpCQkoKCh3KSA8PCA4KSB8ICgodykgPj4gOCkpCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX001MzA3KSAmJiBkZWZpbmVkKENPTkZJR19BUk5FV1NIKQorI2RlZmluZSBORTIwMDBfQUREUgkJMHhmZTYwMDMwMAorI2RlZmluZSBORTIwMDBfT0RET0ZGU0VUCTB4MDAwMTAwMDAKKyNkZWZpbmUgTkUyMDAwX0lSUV9WRUNUT1IJMHgxYgorI2RlZmluZSBORTIwMDBfSVJRX1BSSU9SSVRZCTIKKyNkZWZpbmUgTkUyMDAwX0lSUV9MRVZFTAkzCisjZGVmaW5lCU5FMjAwMF9CWVRFCQl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19NNTQwNykKKyNkZWZpbmUgTkUyMDAwX0FERFIJCTB4NDAwMDAzMDAKKyNkZWZpbmUgTkUyMDAwX09ERE9GRlNFVAkweDAwMDEwMDAwCisjZGVmaW5lIE5FMjAwMF9JUlFfVkVDVE9SCTB4MWIKKyNkZWZpbmUJTkUyMDAwX0JZVEUJCXZvbGF0aWxlIHVuc2lnbmVkIHNob3J0CisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKglTaWRlLWJhbmQgYWRkcmVzcyBzcGFjZSBmb3Igb2RkIGFkZHJlc3MgcmVxdWlyZXMgcmUtbWFwcGluZworICoJbWFueSBvZiB0aGUgc3RhbmRhcmQgSVNBIGFjY2VzcyBmdW5jdGlvbnMuCisgKi8KKyNpZmRlZiBORTIwMDBfT0RET0ZGU0VUCisKKyN1bmRlZiBvdXRiCisjdW5kZWYgb3V0Yl9wCisjdW5kZWYgaW5iCisjdW5kZWYgaW5iX3AKKyN1bmRlZiBvdXRzYgorI3VuZGVmIG91dHN3CisjdW5kZWYgaW5zYgorI3VuZGVmIGluc3cKKworI2RlZmluZQlvdXRiCW5lMjAwMF9vdXRiCisjZGVmaW5lCWluYgluZTIwMDBfaW5iCisjZGVmaW5lCW91dGJfcAluZTIwMDBfb3V0YgorI2RlZmluZQlpbmJfcAluZTIwMDBfaW5iCisjZGVmaW5lCW91dHNiCW5lMjAwMF9vdXRzYgorI2RlZmluZQlvdXRzdwluZTIwMDBfb3V0c3cKKyNkZWZpbmUJaW5zYgluZTIwMDBfaW5zYgorI2RlZmluZQlpbnN3CW5lMjAwMF9pbnN3CisKKworI2lmbmRlZiBDT0xERklSRV9ORTIwMDBfRlVOQ1MKKwordm9pZCBuZTIwMDBfb3V0Yih1bnNpZ25lZCBpbnQgdmFsLCB1bnNpZ25lZCBpbnQgYWRkcik7CitpbnQgIG5lMjAwMF9pbmIodW5zaWduZWQgaW50IGFkZHIpOwordm9pZCBuZTIwMDBfaW5zYih1bnNpZ25lZCBpbnQgYWRkciwgdm9pZCAqdmJ1ZiwgaW50IHVuc2lnbmVkIGxvbmcgbGVuKTsKK3ZvaWQgbmUyMDAwX2luc3codW5zaWduZWQgaW50IGFkZHIsIHZvaWQgKnZidWYsIHVuc2lnbmVkIGxvbmcgbGVuKTsKK3ZvaWQgbmUyMDAwX291dHNiKHVuc2lnbmVkIGludCBhZGRyLCB2b2lkICp2YnVmLCB1bnNpZ25lZCBsb25nIGxlbik7Cit2b2lkIG5lMjAwMF9vdXRzdyh1bnNpZ25lZCBpbnQgYWRkciwgdm9pZCAqdmJ1ZiwgdW5zaWduZWQgbG9uZyBsZW4pOworCisjZWxzZQorCisvKgorICoJVGhpcyBtYWNybyBjb252ZXJ0cyBhIGNvbnZlbnRpb25hbCByZWdpc3RlciBhZGRyZXNzIGludG8gdGhlCisgKglyZWFsIG1lbW9yeSBwb2ludGVyIG9mIHRoZSBtYXBwZWQgTkUyMDAwIGRldmljZS4KKyAqCU9uIG1vc3QgTkUyMDAwIGltcGxlbWVudGF0aW9ucyBvbiBDb2xkRmlyZSBib2FyZHMgdGhlIGNoaXAgaXMKKyAqCW1hcHBlZCBpbiBraW5kYSBmdW5ueSwgZHVlIHRvIGl0cyBJU0EgaGVyaXRhZ2UuCisgKi8KKyNpZmRlZiBDT05GSUdfQ0ZWMjQwCisjZGVmaW5lIE5FMjAwMF9QVFIoYWRkcikJKE5FMjAwMF9BRERSICsgKChhZGRyICYgMHgzZikgPDwgMSkgKyAxKQorI2RlZmluZSBORTIwMDBfREFUQV9QVFIoYWRkcikJKE5FMjAwMF9BRERSICsgKChhZGRyICYgMHgzZikgPDwgMSkpCisjZWxzZQorI2RlZmluZQlORTIwMDBfUFRSKGFkZHIpCSgoYWRkciYweDEpPyhORTIwMDBfT0RET0ZGU0VUK2FkZHItMSk6KGFkZHIpKQorI2RlZmluZQlORTIwMDBfREFUQV9QVFIoYWRkcikJKGFkZHIpCisjZW5kaWYKKworCit2b2lkIG5lMjAwMF9vdXRiKHVuc2lnbmVkIGludCB2YWwsIHVuc2lnbmVkIGludCBhZGRyKQoreworCU5FMjAwMF9CWVRFCSpycDsKKworCXJwID0gKE5FMjAwMF9CWVRFICopIE5FMjAwMF9QVFIoYWRkcik7CisJKnJwID0gUlNXQVAodmFsKTsKK30KKworaW50IG5lMjAwMF9pbmIodW5zaWduZWQgaW50IGFkZHIpCit7CisJTkUyMDAwX0JZVEUJKnJwLCB2YWw7CisKKwlycCA9IChORTIwMDBfQllURSAqKSBORTIwMDBfUFRSKGFkZHIpOworCXZhbCA9ICpycDsKKwlyZXR1cm4oKGludCkgKChORTIwMDBfQllURSkgUlNXQVAodmFsKSkpOworfQorCit2b2lkIG5lMjAwMF9pbnNiKHVuc2lnbmVkIGludCBhZGRyLCB2b2lkICp2YnVmLCBpbnQgdW5zaWduZWQgbG9uZyBsZW4pCit7CisJTkUyMDAwX0JZVEUJKnJwLCB2YWw7CisJdW5zaWduZWQgY2hhcgkqYnVmOworCisJYnVmID0gKHVuc2lnbmVkIGNoYXIgKikgdmJ1ZjsKKwlycCA9IChORTIwMDBfQllURSAqKSBORTIwMDBfREFUQV9QVFIoYWRkcik7CisJZm9yICg7IChsZW4gPiAwKTsgbGVuLS0pIHsKKwkJdmFsID0gKnJwOworCQkqYnVmKysgPSBSU1dBUCh2YWwpOworCX0KK30KKwordm9pZCBuZTIwMDBfaW5zdyh1bnNpZ25lZCBpbnQgYWRkciwgdm9pZCAqdmJ1ZiwgdW5zaWduZWQgbG9uZyBsZW4pCit7CisJdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQJKnJwOworCXVuc2lnbmVkIHNob3J0CQl3LCAqYnVmOworCisJYnVmID0gKHVuc2lnbmVkIHNob3J0ICopIHZidWY7CisJcnAgPSAodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikgTkUyMDAwX0RBVEFfUFRSKGFkZHIpOworCWZvciAoOyAobGVuID4gMCk7IGxlbi0tKSB7CisJCXcgPSAqcnA7CisJCSpidWYrKyA9IEJTV0FQKHcpOworCX0KK30KKwordm9pZCBuZTIwMDBfb3V0c2IodW5zaWduZWQgaW50IGFkZHIsIGNvbnN0IHZvaWQgKnZidWYsIHVuc2lnbmVkIGxvbmcgbGVuKQoreworCU5FMjAwMF9CWVRFCSpycCwgdmFsOworCXVuc2lnbmVkIGNoYXIJKmJ1ZjsKKworCWJ1ZiA9ICh1bnNpZ25lZCBjaGFyICopIHZidWY7CisJcnAgPSAoTkUyMDAwX0JZVEUgKikgTkUyMDAwX0RBVEFfUFRSKGFkZHIpOworCWZvciAoOyAobGVuID4gMCk7IGxlbi0tKSB7CisJCXZhbCA9ICpidWYrKzsKKwkJKnJwID0gUlNXQVAodmFsKTsKKwl9Cit9CisKK3ZvaWQgbmUyMDAwX291dHN3KHVuc2lnbmVkIGludCBhZGRyLCBjb25zdCB2b2lkICp2YnVmLCB1bnNpZ25lZCBsb25nIGxlbikKK3sKKwl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydAkqcnA7CisJdW5zaWduZWQgc2hvcnQJCXcsICpidWY7CisKKwlidWYgPSAodW5zaWduZWQgc2hvcnQgKikgdmJ1ZjsKKwlycCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSBORTIwMDBfREFUQV9QVFIoYWRkcik7CisJZm9yICg7IChsZW4gPiAwKTsgbGVuLS0pIHsKKwkJdyA9ICpidWYrKzsKKwkJKnJwID0gQlNXQVAodyk7CisJfQorfQorCisjZW5kaWYgLyogQ09MREZJUkVfTkUyMDAwX0ZVTkNTICovCisjZW5kaWYgLyogTkUyMDAwX09GRk9GRlNFVCAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmZGVmIENPTERGSVJFX05FMjAwMF9GVU5DUworCisvKgorICoJTGFzdGx5IHRoZSBpbnRlcnJ1cHQgc2V0IHVwIGNvZGUuLi4KKyAqCU1pbm9yIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIGRpZmZlcmVudCBib2FyZCB0eXBlcy4KKyAqLworCisjaWYgZGVmaW5lZChDT05GSUdfTTUyMDYpICYmIGRlZmluZWQoQ09ORklHX0FSTkVXU0gpCit2b2lkIG5lMjAwMF9pcnFzZXR1cChpbnQgaXJxKQoreworCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgICppY3JwOworCisJaWNycCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIChNQ0ZfTUJBUiArIE1DRlNJTV9JQ1I0KTsKKwkqaWNycCA9IE1DRlNJTV9JQ1JfTEVWRUw0IHwgTUNGU0lNX0lDUl9QUkkyOworCW1jZl9zZXRpbXIobWNmX2dldGltcigpICYgfk1DRlNJTV9JTVJfRUlOVDQpOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19NNTIwNmUpICYmIGRlZmluZWQoQ09ORklHX01PVE9ST0xBKQordm9pZCBuZTIwMDBfaXJxc2V0dXAoaW50IGlycSkKK3sKKwl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICAqaWNycDsKKworCWljcnAgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoTUNGX01CQVIgKyBNQ0ZTSU1fSUNSNCk7CisJKmljcnAgPSBNQ0ZTSU1fSUNSX0xFVkVMNCB8IE1DRlNJTV9JQ1JfUFJJMiB8IE1DRlNJTV9JQ1JfQVVUT1ZFQzsKKwltY2Zfc2V0aW1yKG1jZl9nZXRpbXIoKSAmIH5NQ0ZTSU1fSU1SX0VJTlQ0KTsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfTTUyMDZlKSAmJiBkZWZpbmVkKENPTkZJR19DRlYyNDApCit2b2lkIG5lMjAwMF9pcnFzZXR1cChpbnQgaXJxKQoreworCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgICppY3JwOworCisJaWNycCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIChNQ0ZfTUJBUiArIE1DRlNJTV9JQ1IxKTsKKwkqaWNycCA9IE1DRlNJTV9JQ1JfTEVWRUwxIHwgTUNGU0lNX0lDUl9QUkkyIHwgTUNGU0lNX0lDUl9BVVRPVkVDOworCW1jZl9zZXRpbXIobWNmX2dldGltcigpICYgfk1DRlNJTV9JTVJfRUlOVDEpOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19NNTIwNmUpICYmIGRlZmluZWQoQ09ORklHX05FVHRlbCkKK3ZvaWQgbmUyMDAwX2lycXNldHVwKGludCBpcnEpCit7CisJbWNmX2F1dG92ZWN0b3IoaXJxKTsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfTTUyNzIpICYmIGRlZmluZWQoQ09ORklHX05FVHRlbCkKK3ZvaWQgbmUyMDAwX2lycXNldHVwKGludCBpcnEpCit7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZwkqaWNycDsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nCSpwaXRyOworCisJLyogVGhlIE5FMjAwMCBkZXZpY2UgdXNlcyBleHRlcm5hbCBJUlEzICovCisJaWNycCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopIChNQ0ZfTUJBUiArIE1DRlNJTV9JQ1IxKTsKKwkqaWNycCA9ICgqaWNycCAmIDB4NzcwNzc3NzcpIHwgMHgwMGQwMDAwMDsKKworCXBpdHIgPSAodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSAoTUNGX01CQVIgKyBNQ0ZTSU1fUElUUik7CisJKnBpdHIgPSAqcGl0ciB8IDB4MjAwMDAwMDA7Cit9CisKK3ZvaWQgbmUyMDAwX2lycWFjayhpbnQgaXJxKQoreworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcJKmljcnA7CisKKwkvKiBUaGUgTkUyMDAwIGRldmljZSB1c2VzIGV4dGVybmFsIElSUTMgKi8KKwlpY3JwID0gKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikgKE1DRl9NQkFSICsgTUNGU0lNX0lDUjEpOworCSppY3JwID0gKCppY3JwICYgMHg3Nzc3Nzc3NykgfCAweDAwODAwMDAwOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19NNTMwNykgfHwgZGVmaW5lZChDT05GSUdfTTU0MDcpCisjaWYgZGVmaW5lZChDT05GSUdfTkVUdGVsKSB8fCBkZWZpbmVkKENPTkZJR19TRUNVUkVFREdFTVAzKQorCit2b2lkIG5lMjAwMF9pcnFzZXR1cChpbnQgaXJxKQoreworCW1jZl9zZXRpbXIobWNmX2dldGltcigpICYgfk1DRlNJTV9JTVJfRUlOVDMpOworCW1jZl9hdXRvdmVjdG9yKGlycSk7Cit9CisKKyNlbHNlCisKK3ZvaWQgbmUyMDAwX2lycXNldHVwKGludCBpcnEpCit7CisJbWNmX3NldGltcihtY2ZfZ2V0aW1yKCkgJiB+TUNGU0lNX0lNUl9FSU5UMyk7Cit9CisKKyNlbmRpZiAvKiAhIENPTkZJR19ORVR0ZWwgfHwgQ09ORklHX1NFQ1VSRUVER0VNUDMgKi8KKyNlbmRpZiAvKiBDT05GSUdfTTUzMDcgfHwgQ09ORklHX001NDA3ICovCisKKyNlbmRpZiAvKiBDT0xERklSRV9ORTIwMDBfRlVOQ1MgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZW5kaWYJLyogbWNmbmVfaCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L21jZnBjaS5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L21jZnBjaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2MjI5MDQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbWNmcGNpLmgKQEAgLTAsMCArMSwxMjAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICoJbWNmcGNpLmggLS0gUENJIGJyaWRnZSBvbiBDb2xkRmlyZSBldmFsIGJvYXJkcy4KKyAqCisgKgkoQykgQ29weXJpZ2h0IDIwMDAsIEdyZWcgVW5nZXJlciAoZ2VyZ0BzbmFwZ2Vhci5jb20pCisgKgkoQykgQ29weXJpZ2h0IDIwMDAsIExpbmVvIEluYy4gKHd3dy5saW5lby5jb20pCisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmCW1jZnBjaV9oCisjZGVmaW5lCW1jZnBjaV9oCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjaWZkZWYgQ09ORklHX1BDSQorCisvKgorICoJQWRkcmVzcyByZWdpb25zIGluIHRoZSBQQ0kgYWRkcmVzcyBzcGFjZSBhcmUgbm90IG1hcHBlZCBpbnRvIHRoZQorICoJbm9ybWFsIG1lbW9yeSBzcGFjZSBvZiB0aGUgQ29sZEZpcmUuIFRoZXkgbXVzdCBiZSBhY2Nlc3NlZCB2aWEKKyAqCWhhbmRsZXIgcm91dGluZXMuIFRoaXMgaXMgZWFzeSBmb3IgSS9PIHNwYWNlIChpbmIvb3V0Yi9ldGMpIGJ1dAorICoJbmVlZHMgc29tZSBjb2RlIGNoYW5nZXMgdG8gc3VwcG9ydCBvcmRpbmFyeSBtZW1vcnkuIEludGVycnVwdHMKKyAqCWFsc28gbmVlZCB0byBiZSB2ZWN0b3JlZCB0aHJvdWdoIHRoZSBQQ0kgaGFuZGxlciBmaXJzdCwgdGhlbiBpdAorICoJd2lsbCBjYWxsIHRoZSBhY3R1YWwgZHJpdmVyIHN1Yi1oYW5kbGVycy4KKyAqLworCisvKgorICoJVW4tZGVmaW5lIGFsbCB0aGUgc3RhbmRhcmQgSS9PIGFjY2VzcyByb3V0aW5lcy4KKyAqLworI3VuZGVmCWluYgorI3VuZGVmCWludworI3VuZGVmCWlubAorI3VuZGVmCWluYl9wCisjdW5kZWYJaW53X3AKKyN1bmRlZglpbnNiCisjdW5kZWYJaW5zdworI3VuZGVmCWluc2wKKyN1bmRlZglvdXRiCisjdW5kZWYJb3V0dworI3VuZGVmCW91dGwKKyN1bmRlZglvdXRiX3AKKyN1bmRlZglvdXR3X3AKKyN1bmRlZglvdXRzYgorI3VuZGVmCW91dHN3CisjdW5kZWYJb3V0c2wKKworI3VuZGVmCXJlcXVlc3RfaXJxCisjdW5kZWYJZnJlZV9pcnEKKworI3VuZGVmCWJ1c190b192aXJ0CisjdW5kZWYJdmlydF90b19idXMKKworCisvKgorICoJUmUtZGlyZWN0IGFsbCBJL08gbWVtb3J5IGFjY2Vzc2VzIGZ1bmN0aW9ucyB0byBQQ0kgc3BlY2lmaWMgb25lcy4KKyAqLworI2RlZmluZQlpbmIJcGNpX2luYgorI2RlZmluZQlpbncJcGNpX2ludworI2RlZmluZQlpbmwJcGNpX2lubAorI2RlZmluZQlpbmJfcAlwY2lfaW5iCisjZGVmaW5lCWlud19wCXBjaV9pbncKKyNkZWZpbmUJaW5zYglwY2lfaW5zYgorI2RlZmluZQlpbnN3CXBjaV9pbnN3CisjZGVmaW5lCWluc2wJcGNpX2luc2wKKworI2RlZmluZQlvdXRiCXBjaV9vdXRiCisjZGVmaW5lCW91dHcJcGNpX291dHcKKyNkZWZpbmUJb3V0bAlwY2lfb3V0bAorI2RlZmluZQlvdXRiX3AJcGNpX291dGIKKyNkZWZpbmUJb3V0d19wCXBjaV9vdXR3CisjZGVmaW5lCW91dHNiCXBjaV9vdXRzYgorI2RlZmluZQlvdXRzdwlwY2lfb3V0c3cKKyNkZWZpbmUJb3V0c2wJcGNpX291dHNsCisKKyNkZWZpbmUJcmVxdWVzdF9pcnEJcGNpX3JlcXVlc3RfaXJxCisjZGVmaW5lCWZyZWVfaXJxCXBjaV9mcmVlX2lycQorCisjZGVmaW5lCXZpcnRfdG9fYnVzCXBjaV92aXJ0X3RvX2J1cworI2RlZmluZQlidXNfdG9fdmlydAlwY2lfYnVzX3RvX3ZpcnQKKworI2RlZmluZQlDT05GSUdfQ09NRU1QQ0kJMQorCisKKy8qCisgKglQcm90b3R5cGVzIG9mIHRoZSByZWFsIFBDSSBmdW5jdGlvbnMgKGRlZmluZWQgaW4gYmlvczMyLmMpLgorICovCit1bnNpZ25lZCBjaGFyCXBjaV9pbmIodW5zaWduZWQgaW50IGFkZHIpOwordW5zaWduZWQgc2hvcnQJcGNpX2ludyh1bnNpZ25lZCBpbnQgYWRkcik7Cit1bnNpZ25lZCBpbnQJcGNpX2lubCh1bnNpZ25lZCBpbnQgYWRkcik7Cit2b2lkCQlwY2lfaW5zYih2b2lkICphZGRyLCB2b2lkICpidWYsIGludCBsZW4pOwordm9pZAkJcGNpX2luc3codm9pZCAqYWRkciwgdm9pZCAqYnVmLCBpbnQgbGVuKTsKK3ZvaWQJCXBjaV9pbnNsKHZvaWQgKmFkZHIsIHZvaWQgKmJ1ZiwgaW50IGxlbik7CisKK3ZvaWQJCXBjaV9vdXRiKHVuc2lnbmVkIGNoYXIgdmFsLCB1bnNpZ25lZCBpbnQgYWRkcik7Cit2b2lkCQlwY2lfb3V0dyh1bnNpZ25lZCBzaG9ydCB2YWwsIHVuc2lnbmVkIGludCBhZGRyKTsKK3ZvaWQJCXBjaV9vdXRsKHVuc2lnbmVkIGludCB2YWwsIHVuc2lnbmVkIGludCBhZGRyKTsKK3ZvaWQJCXBjaV9vdXRzYih2b2lkICphZGRyLCB2b2lkICpidWYsIGludCBsZW4pOwordm9pZAkJcGNpX291dHN3KHZvaWQgKmFkZHIsIHZvaWQgKmJ1ZiwgaW50IGxlbik7Cit2b2lkCQlwY2lfb3V0c2wodm9pZCAqYWRkciwgdm9pZCAqYnVmLCBpbnQgbGVuKTsKKworaW50CQlwY2lfcmVxdWVzdF9pcnEodW5zaWduZWQgaW50IGlycSwKKwkJCXZvaWQgKCpoYW5kbGVyKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKiksCisJCQl1bnNpZ25lZCBsb25nIGZsYWdzLAorCQkJY29uc3QgY2hhciAqZGV2aWNlLAorCQkJdm9pZCAqZGV2X2lkKTsKK3ZvaWQJCXBjaV9mcmVlX2lycSh1bnNpZ25lZCBpbnQgaXJxLCB2b2lkICpkZXZfaWQpOworCit2b2lkCQkqcGNpX2JtYWxsb2MoaW50IHNpemUpOwordm9pZAkJcGNpX2JtZnJlZSh2b2lkICpibXAsIGludCBsZW4pOwordm9pZAkJcGNpX2NvcHl0b3NobWVtKHVuc2lnbmVkIGxvbmcgYm1wLCB2b2lkICpzcmMsIGludCBzaXplKTsKK3ZvaWQJCXBjaV9jb3B5ZnJvbXNobWVtKHZvaWQgKmRzdCwgdW5zaWduZWQgbG9uZyBibXAsIGludCBzaXplKTsKK3Vuc2lnbmVkIGxvbmcJcGNpX3ZpcnRfdG9fYnVzKHZvbGF0aWxlIHZvaWQgKmFkZHJlc3MpOwordm9pZAkJKnBjaV9idXNfdG9fdmlydCh1bnNpZ25lZCBsb25nIGFkZHJlc3MpOwordm9pZAkJcGNpX2JtY3B5dG8odm9pZCAqZHN0LCB2b2lkICpzcmMsIGludCBsZW4pOwordm9pZAkJcGNpX2JtY3B5ZnJvbSh2b2lkICpkc3QsIHZvaWQgKnNyYywgaW50IGxlbik7CisKKyNlbmRpZiAvKiBDT05GSUdfUENJICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNlbmRpZgkvKiBtY2ZwY2lfaCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L21jZnBpdC5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L21jZnBpdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjYzJlOWYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbWNmcGl0LmgKQEAgLTAsMCArMSw2MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKgltY2ZwaXQuaCAtLSBDb2xkRmlyZSBpbnRlcm5hbCBQSVQgdGltZXIgc3VwcG9ydCBkZWZpbmVzLgorICoKKyAqCShDKSBDb3B5cmlnaHQgMjAwMywgR3JlZyBVbmdlcmVyIChnZXJnQHNuYXBnZWFyLmNvbSkKKyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYJbWNmcGl0X2gKKyNkZWZpbmUJbWNmcGl0X2gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKy8qCisgKglHZXQgYWRkcmVzcyBzcGVjaWZpYyBkZWZpbmVzIGZvciB0aGUgNTI3MC81MjcxIGFuZCA1MjgwLzUyODIuCisgKi8KKyNkZWZpbmUJTUNGUElUX0JBU0UxCQkweDAwMTUwMDAwCS8qIEJhc2UgYWRkcmVzcyBvZiBUSU1FUjEgKi8KKyNkZWZpbmUJTUNGUElUX0JBU0UyCQkweDAwMTYwMDAwCS8qIEJhc2UgYWRkcmVzcyBvZiBUSU1FUjIgKi8KKyNkZWZpbmUJTUNGUElUX0JBU0UzCQkweDAwMTcwMDAwCS8qIEJhc2UgYWRkcmVzcyBvZiBUSU1FUjMgKi8KKyNkZWZpbmUJTUNGUElUX0JBU0U0CQkweDAwMTgwMDAwCS8qIEJhc2UgYWRkcmVzcyBvZiBUSU1FUjQgKi8KKworCisvKgorICoJRGVmaW5lIHRoZSBQSVQgdGltZXIgcmVnaXN0ZXIgc2V0IGFkZHJlc3Nlcy4KKyAqLworc3RydWN0IG1jZnBpdCB7CisJdW5zaWduZWQgc2hvcnQJcGNzcjsJCQkvKiBQSVQgY29udHJvbCBhbmQgc3RhdHVzICovCisJdW5zaWduZWQgc2hvcnQJcG1yOwkJCS8qIFBJVCBtb2R1bHVzIHJlZ2lzdGVyICovCisJdW5zaWduZWQgc2hvcnQJcGNudHI7CQkJLyogUElUIGNvdW50IHJlZ2lzdGVyICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKgorICoJQml0IGRlZmluaXRpb25zIGZvciB0aGUgUElUIENvbnRyb2wgYW5kIFN0YXR1cyByZWdpc3Rlci4KKyAqLworI2RlZmluZQlNQ0ZQSVRfUENTUl9DTEsxCTB4MDAwMAkJLyogU3lzdGVtIGNsb2NrIGRpdmlzb3IgKi8KKyNkZWZpbmUJTUNGUElUX1BDU1JfQ0xLMgkweDAxMDAJCS8qIFN5c3RlbSBjbG9jayBkaXZpc29yICovCisjZGVmaW5lCU1DRlBJVF9QQ1NSX0NMSzQJMHgwMjAwCQkvKiBTeXN0ZW0gY2xvY2sgZGl2aXNvciAqLworI2RlZmluZQlNQ0ZQSVRfUENTUl9DTEs4CTB4MDMwMAkJLyogU3lzdGVtIGNsb2NrIGRpdmlzb3IgKi8KKyNkZWZpbmUJTUNGUElUX1BDU1JfQ0xLMTYJMHgwNDAwCQkvKiBTeXN0ZW0gY2xvY2sgZGl2aXNvciAqLworI2RlZmluZQlNQ0ZQSVRfUENTUl9DTEszMgkweDA1MDAJCS8qIFN5c3RlbSBjbG9jayBkaXZpc29yICovCisjZGVmaW5lCU1DRlBJVF9QQ1NSX0NMSzY0CTB4MDYwMAkJLyogU3lzdGVtIGNsb2NrIGRpdmlzb3IgKi8KKyNkZWZpbmUJTUNGUElUX1BDU1JfQ0xLMTI4CTB4MDcwMAkJLyogU3lzdGVtIGNsb2NrIGRpdmlzb3IgKi8KKyNkZWZpbmUJTUNGUElUX1BDU1JfQ0xLMjU2CTB4MDgwMAkJLyogU3lzdGVtIGNsb2NrIGRpdmlzb3IgKi8KKyNkZWZpbmUJTUNGUElUX1BDU1JfQ0xLNTEyCTB4MDkwMAkJLyogU3lzdGVtIGNsb2NrIGRpdmlzb3IgKi8KKyNkZWZpbmUJTUNGUElUX1BDU1JfQ0xLMTAyNAkweDBhMDAJCS8qIFN5c3RlbSBjbG9jayBkaXZpc29yICovCisjZGVmaW5lCU1DRlBJVF9QQ1NSX0NMSzIwNDgJMHgwYjAwCQkvKiBTeXN0ZW0gY2xvY2sgZGl2aXNvciAqLworI2RlZmluZQlNQ0ZQSVRfUENTUl9DTEs0MDk2CTB4MGMwMAkJLyogU3lzdGVtIGNsb2NrIGRpdmlzb3IgKi8KKyNkZWZpbmUJTUNGUElUX1BDU1JfQ0xLODE5MgkweDBkMDAJCS8qIFN5c3RlbSBjbG9jayBkaXZpc29yICovCisjZGVmaW5lCU1DRlBJVF9QQ1NSX0NMSzE2Mzg0CTB4MGUwMAkJLyogU3lzdGVtIGNsb2NrIGRpdmlzb3IgKi8KKyNkZWZpbmUJTUNGUElUX1BDU1JfQ0xLMzI3NjgJMHgwZjAwCQkvKiBTeXN0ZW0gY2xvY2sgZGl2aXNvciAqLworI2RlZmluZQlNQ0ZQSVRfUENTUl9ET1pFCTB4MDA0MAkJLyogQ2xvY2sgcnVuIGluIGRvemUgbW9kZSAqLworI2RlZmluZQlNQ0ZQSVRfUENTUl9IQUxURUQJMHgwMDIwCQkvKiBDbG9jayBydW4gaW4gaGFsdCBtb2RlICovCisjZGVmaW5lCU1DRlBJVF9QQ1NSX09WVwkJMHgwMDEwCQkvKiBPdmVyd3JpdGUgUElUIGNvdW50ZXIgbm93ICovCisjZGVmaW5lCU1DRlBJVF9QQ1NSX1BJRQkJMHgwMDA4CQkvKiBFbmFibGUgUElUIGludGVycnVwdCAqLworI2RlZmluZQlNQ0ZQSVRfUENTUl9QSUYJCTB4MDAwNAkJLyogUElUIGludGVycnVwdCBmbGFnICovCisjZGVmaW5lCU1DRlBJVF9QQ1NSX1JMRAkJMHgwMDAyCQkvKiBSZWxvYWQgY291bnRlciAqLworI2RlZmluZQlNQ0ZQSVRfUENTUl9FTgkJMHgwMDAxCQkvKiBFbmFibGUgUElUICovCisjZGVmaW5lCU1DRlBJVF9QQ1NSX0RJU0FCTEUJMHgwMDAwCQkvKiBEaXNhYmxlIFBJVCAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNlbmRpZgkvKiBtY2ZwaXRfaCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L21jZnNpbS5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L21jZnNpbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyMmU1MTMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbWNmc2ltLmgKQEAgLTAsMCArMSwxMDkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICoJbWNmc2ltLmggLS0gQ29sZEZpcmUgU3lzdGVtIEludGVncmF0aW9uIE1vZHVsZSBzdXBwb3J0LgorICoKKyAqCShDKSBDb3B5cmlnaHQgMTk5OS0yMDAzLCBHcmVnIFVuZ2VyZXIgKGdlcmdAc25hcGdlYXIuY29tKQorICogCShDKSBDb3B5cmlnaHQgMjAwMCwgTGluZW8gSW5jLiAod3d3LmxpbmVvLmNvbSkgCisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmCW1jZnNpbV9oCisjZGVmaW5lCW1jZnNpbV9oCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisvKgorICoJSW5jbHVkZSA1MjA0LCA1MjA2L2UsIDUyNDksIDUyNzAvNTI3MSwgNTI3MiwgNTI4MC81MjgyLCA1MzA3IG9yCisgKgk1NDA3IHNwZWNpZmljIGFkZHJlc3Nlcy4KKyAqLworI2lmIGRlZmluZWQoQ09ORklHX001MjA0KQorI2luY2x1ZGUgPGFzbS9tNTIwNHNpbS5oPgorI2VsaWYgZGVmaW5lZChDT05GSUdfTTUyMDYpIHx8IGRlZmluZWQoQ09ORklHX001MjA2ZSkKKyNpbmNsdWRlIDxhc20vbTUyMDZzaW0uaD4KKyNlbGlmIGRlZmluZWQoQ09ORklHX001MjQ5KQorI2luY2x1ZGUgPGFzbS9tNTI0OXNpbS5oPgorI2VsaWYgZGVmaW5lZChDT05GSUdfTTUyN3gpCisjaW5jbHVkZSA8YXNtL201Mjd4c2ltLmg+CisjZWxpZiBkZWZpbmVkKENPTkZJR19NNTI3MikKKyNpbmNsdWRlIDxhc20vbTUyNzJzaW0uaD4KKyNlbGlmIGRlZmluZWQoQ09ORklHX001Mjh4KQorI2luY2x1ZGUgPGFzbS9tNTI4eHNpbS5oPgorI2VsaWYgZGVmaW5lZChDT05GSUdfTTUzMDcpCisjaW5jbHVkZSA8YXNtL201MzA3c2ltLmg+CisjZWxpZiBkZWZpbmVkKENPTkZJR19NNTQwNykKKyNpbmNsdWRlIDxhc20vbTU0MDdzaW0uaD4KKyNlbmRpZgorCisKKy8qCisgKglEZWZpbmUgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgU0lNIHdpdGhpbiB0aGUgTUJBUiBhZGRyZXNzIHNwYWNlLgorICovCisjZGVmaW5lCU1DRlNJTV9CQVNFCQkweDAJCS8qIEJhc2UgYWRkcmVzcyBvZiBTSU0gKi8KKworCisvKgorICoJQml0IGRlZmluaXRpb25zIGZvciB0aGUgSUNSIGZhbWlseSBvZiByZWdpc3RlcnMuCisgKi8KKyNkZWZpbmUJTUNGU0lNX0lDUl9BVVRPVkVDCTB4ODAJCS8qIEF1dG8tdmVjdG9yZWQgaW50ciAqLworI2RlZmluZQlNQ0ZTSU1fSUNSX0xFVkVMMAkweDAwCQkvKiBMZXZlbCAwIGludHIgKi8KKyNkZWZpbmUJTUNGU0lNX0lDUl9MRVZFTDEJMHgwNAkJLyogTGV2ZWwgMSBpbnRyICovCisjZGVmaW5lCU1DRlNJTV9JQ1JfTEVWRUwyCTB4MDgJCS8qIExldmVsIDIgaW50ciAqLworI2RlZmluZQlNQ0ZTSU1fSUNSX0xFVkVMMwkweDBjCQkvKiBMZXZlbCAzIGludHIgKi8KKyNkZWZpbmUJTUNGU0lNX0lDUl9MRVZFTDQJMHgxMAkJLyogTGV2ZWwgNCBpbnRyICovCisjZGVmaW5lCU1DRlNJTV9JQ1JfTEVWRUw1CTB4MTQJCS8qIExldmVsIDUgaW50ciAqLworI2RlZmluZQlNQ0ZTSU1fSUNSX0xFVkVMNgkweDE4CQkvKiBMZXZlbCA2IGludHIgKi8KKyNkZWZpbmUJTUNGU0lNX0lDUl9MRVZFTDcJMHgxYwkJLyogTGV2ZWwgNyBpbnRyICovCisKKyNkZWZpbmUJTUNGU0lNX0lDUl9QUkkwCQkweDAwCQkvKiBQcmlvcml0eSAwIGludHIgKi8KKyNkZWZpbmUJTUNGU0lNX0lDUl9QUkkxCQkweDAxCQkvKiBQcmlvcml0eSAxIGludHIgKi8KKyNkZWZpbmUJTUNGU0lNX0lDUl9QUkkyCQkweDAyCQkvKiBQcmlvcml0eSAyIGludHIgKi8KKyNkZWZpbmUJTUNGU0lNX0lDUl9QUkkzCQkweDAzCQkvKiBQcmlvcml0eSAzIGludHIgKi8KKworLyoKKyAqCUJpdCBkZWZpbml0aW9ucyBmb3IgdGhlIEludGVycnVwdCBNYXNrIHJlZ2lzdGVyIChJTVIpLgorICovCisjZGVmaW5lCU1DRlNJTV9JTVJfRUlOVDEJMHgwMDAyCQkvKiBFeHRlcm5hbCBpbnRyICMgMSAqLworI2RlZmluZQlNQ0ZTSU1fSU1SX0VJTlQyCTB4MDAwNAkJLyogRXh0ZXJuYWwgaW50ciAjIDIgKi8KKyNkZWZpbmUJTUNGU0lNX0lNUl9FSU5UMwkweDAwMDgJCS8qIEV4dGVybmFsIGludHIgIyAzICovCisjZGVmaW5lCU1DRlNJTV9JTVJfRUlOVDQJMHgwMDEwCQkvKiBFeHRlcm5hbCBpbnRyICMgNCAqLworI2RlZmluZQlNQ0ZTSU1fSU1SX0VJTlQ1CTB4MDAyMAkJLyogRXh0ZXJuYWwgaW50ciAjIDUgKi8KKyNkZWZpbmUJTUNGU0lNX0lNUl9FSU5UNgkweDAwNDAJCS8qIEV4dGVybmFsIGludHIgIyA2ICovCisjZGVmaW5lCU1DRlNJTV9JTVJfRUlOVDcJMHgwMDgwCQkvKiBFeHRlcm5hbCBpbnRyICMgNyAqLworCisjZGVmaW5lCU1DRlNJTV9JTVJfU1dECQkweDAxMDAJCS8qIFNvZnR3YXJlIFdhdGNoZG9nIGludHIgKi8KKyNkZWZpbmUJTUNGU0lNX0lNUl9USU1FUjEJMHgwMjAwCQkvKiBUSU1FUiAxIGludHIgKi8KKyNkZWZpbmUJTUNGU0lNX0lNUl9USU1FUjIJMHgwNDAwCQkvKiBUSU1FUiAyIGludHIgKi8KKyNkZWZpbmUgTUNGU0lNX0lNUl9NQlVTCQkweDA4MDAJCS8qIE1CVVMgaW50cgkqLworI2RlZmluZQlNQ0ZTSU1fSU1SX1VBUlQxCTB4MTAwMAkJLyogVUFSVCAxIGludHIgKi8KKyNkZWZpbmUJTUNGU0lNX0lNUl9VQVJUMgkweDIwMDAJCS8qIFVBUlQgMiBpbnRyICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19NNTIwNmUpCisjZGVmaW5lCU1DRlNJTV9JTVJfRE1BMQkJMHg0MDAwCQkvKiBETUEgMSBpbnRyICovCisjZGVmaW5lCU1DRlNJTV9JTVJfRE1BMgkJMHg4MDAwCQkvKiBETUEgMiBpbnRyICovCisjZWxpZiBkZWZpbmVkKENPTkZJR19NNTI0OSkgfHwgZGVmaW5lZChDT05GSUdfTTUzMDcpCisjZGVmaW5lCU1DRlNJTV9JTVJfRE1BMAkJMHg0MDAwCQkvKiBETUEgMCBpbnRyICovCisjZGVmaW5lCU1DRlNJTV9JTVJfRE1BMQkJMHg4MDAwCQkvKiBETUEgMSBpbnRyICovCisjZGVmaW5lCU1DRlNJTV9JTVJfRE1BMgkJMHgxMDAwMAkJLyogRE1BIDIgaW50ciAqLworI2RlZmluZQlNQ0ZTSU1fSU1SX0RNQTMJCTB4MjAwMDAJCS8qIERNQSAzIGludHIgKi8KKyNlbmRpZgorCisvKgorICoJTWFzayBmb3IgYWxsIG9mIHRoZSBTSU0gZGV2aWNlcy4gU29tZSBwYXJ0cyBoYXZlIG1vcmUgb3IgbGVzcworICoJU0lNIGRldmljZXMuIFRoaXMgaXMgYSBjYXRjaGFsbCBmb3IgdGhlIHNhbmRhcmQgc2V0LgorICovCisjaWZuZGVmIE1DRlNJTV9JTVJfTUFTS0FMTAorI2RlZmluZQlNQ0ZTSU1fSU1SX01BU0tBTEwJMHgzZmZlCQkvKiBBbGwgaW50ciBzb3VyY2VzICovCisjZW5kaWYKKworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworLyoKKyAqCURlZmluaXRpb24gZm9yIHRoZSBpbnRlcnJ1cHQgYXV0by12ZWN0b3Jpbmcgc3VwcG9ydC4KKyAqLworZXh0ZXJuIHZvaWQJbWNmX2F1dG92ZWN0b3IodW5zaWduZWQgaW50IHZlYyk7CisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2VuZGlmCS8qIG1jZnNpbV9oICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbWNmc21jLmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbWNmc21jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU4MzkwMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9tY2ZzbWMuaApAQCAtMCwwICsxLDE4OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKgltY2ZzbWMuaCAtLSBTTUMgZXRoZXJuZXQgc3VwcG9ydCBmb3IgQ29sZEZpcmUgZW52aXJvbm1lbnRzLgorICoKKyAqCShDKSBDb3B5cmlnaHQgMTk5OS0yMDAyLCBHcmVnIFVuZ2VyZXIgKGdlcmdAc25hcGdlYXIuY29tKQorICoJKEMpIENvcHlyaWdodCAyMDAwLCBMaW5lbyBJbmMuICh3d3cubGluZW8uY29tKSAKKyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYJbWNmc21jX2gKKyNkZWZpbmUJbWNmc21jX2gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICoJTm9uZSBvZiB0aGUgY3VycmVudCBDb2xkRmlyZSB0YXJnZXRzIHRoYXQgdXNlIHRoZSBTTUM5MXgxMTEKKyAqCWFsbG93IDggYml0IGFjY2Vzc2VzLiBTbyB0aGlzIGNvZGUgaXMgMTZiaXQgYWNjZXNzIG9ubHkuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjdW5kZWYJb3V0YgorI3VuZGVmCWluYgorI3VuZGVmCW91dHcKKyN1bmRlZglvdXR3ZAorI3VuZGVmCWludwkKKyN1bmRlZglvdXRsCisjdW5kZWYJaW5sCisKKyN1bmRlZglvdXRzYgorI3VuZGVmCW91dHN3CisjdW5kZWYJb3V0c2wKKyN1bmRlZglpbnNiCisjdW5kZWYJaW5zdworI3VuZGVmCWluc2wKKworLyoKKyAqCVJlLWRlZmluZXMgZm9yIENvbGRGaXJlIGVudmlyb25tZW50Li4uIFRoZSBTTUMgcGFydCBpcworICoJbWFwcGVkIGludG8gbWVtb3J5IHNwYWNlLCBzbyByZW1hcCB0aGUgUEMtc3R5bGUgaW4vb3V0CisgKglyb3V0aW5lcyB0byBoYW5kbGUgdGhhdC4KKyAqLworI2RlZmluZQlvdXRiCXNtY19vdXRiCisjZGVmaW5lCWluYglzbWNfaW5iCisjZGVmaW5lCW91dHcJc21jX291dHcKKyNkZWZpbmUJb3V0d2QJc21jX291dHdkCisjZGVmaW5lCWludwlzbWNfaW53CisjZGVmaW5lCW91dGwJc21jX291dGwKKyNkZWZpbmUJaW5sCXNtY19pbmwKKworI2RlZmluZQlvdXRzYglzbWNfb3V0c2IKKyNkZWZpbmUJb3V0c3cJc21jX291dHN3CisjZGVmaW5lCW91dHNsCXNtY19vdXRzbAorI2RlZmluZQlpbnNiCXNtY19pbnNiCisjZGVmaW5lCWluc3cJc21jX2luc3cKKyNkZWZpbmUJaW5zbAlzbWNfaW5zbAorCisKK3N0YXRpYyBpbmxpbmUgaW50IHNtY19pbmIodW5zaWduZWQgaW50IGFkZHIpCit7CisJcmVnaXN0ZXIgdW5zaWduZWQgc2hvcnQJdzsKKwl3ID0gKigodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikgKGFkZHIgJiB+MHgxKSk7CisJcmV0dXJuKCgoYWRkciAmIDB4MSkgPyB3IDogKHcgPj4gOCkpICYgMHhmZik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbWNfb3V0dyh1bnNpZ25lZCBpbnQgdmFsLCB1bnNpZ25lZCBpbnQgYWRkcikKK3sKKwkqKCh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSBhZGRyKSA9ICh2YWwgPDwgOCkgfCAodmFsID4+IDgpOworfQorCitzdGF0aWMgaW5saW5lIGludCBzbWNfaW53KHVuc2lnbmVkIGludCBhZGRyKQoreworCXJlZ2lzdGVyIHVuc2lnbmVkIHNob3J0CXc7CisJdyA9ICooKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopIGFkZHIpOworCXJldHVybigoKHcgPDwgOCkgfCAodyA+PiA4KSkgJiAweGZmZmYpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc21jX291dGwodW5zaWduZWQgbG9uZyB2YWwsIHVuc2lnbmVkIGludCBhZGRyKQoreworCSooKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikgYWRkcikgPSAKKwkJKCh2YWwgPDwgOCkgJiAweGZmMDAwMDAwKSB8ICgodmFsID4+IDgpICYgMHgwMGZmMDAwMCkgfAorCQkoKHZhbCA8PCA4KSAmIDB4MDAwMGZmMDApIHwgKCh2YWwgPj4gOCkgJiAweDAwMDAwMGZmKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNtY19vdXR3ZCh1bnNpZ25lZCBpbnQgdmFsLCB1bnNpZ25lZCBpbnQgYWRkcikKK3sKKwkqKCh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSBhZGRyKSA9IHZhbDsKK30KKworCisvKgorICoJVGhlIHJlcCogZnVuY3Rpb25zIGFyZSB1c2VkIHRvIGZlZWQgdGhlIGRhdGEgcG9ydCB3aXRoCisgKglyYXcgZGF0YS4gU28gd2UgZG8gbm90IGJ5dGUgc3dhcCB0aGVtIHdoZW4gY29weWluZy4KKyAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgc21jX2luc2IodW5zaWduZWQgaW50IGFkZHIsIHZvaWQgKnZidWYsIGludCB1bnNpZ25lZCBsb25nIGxlbikKK3sKKwl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydAkqcnA7CisJdW5zaWduZWQgc2hvcnQJCSpidWYsICplYnVmOworCisJYnVmID0gKHVuc2lnbmVkIHNob3J0ICopIHZidWY7CisJcnAgPSAodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikgYWRkcjsKKworCS8qIENvcHkgYXMgd29yZHMgZm9yIGFzIGxvbmcgYXMgcG9zc2libGUgKi8KKwlmb3IgKGVidWYgPSBidWYgKyAobGVuID4+IDEpOyAoYnVmIDwgZWJ1Zik7ICkKKwkJKmJ1ZisrID0gKnJwOworCisJLyogTGFzdGx5LCBoYW5kbGUgbGVmdCBvdmVyIGJ5dGUgKi8KKwlpZiAobGVuICYgMHgxKQorCQkqKCh1bnNpZ25lZCBjaGFyICopIGJ1ZikgPSAoKnJwID4+IDgpICYgMHhmZjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNtY19pbnN3KHVuc2lnbmVkIGludCBhZGRyLCB2b2lkICp2YnVmLCB1bnNpZ25lZCBsb25nIGxlbikKK3sKKwl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydAkqcnA7CisJdW5zaWduZWQgc2hvcnQJCSpidWYsICplYnVmOworCisJYnVmID0gKHVuc2lnbmVkIHNob3J0ICopIHZidWY7CisJcnAgPSAodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikgYWRkcjsKKwlmb3IgKGVidWYgPSBidWYgKyBsZW47IChidWYgPCBlYnVmKTsgKQorCQkqYnVmKysgPSAqcnA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbWNfaW5zbCh1bnNpZ25lZCBpbnQgYWRkciwgdm9pZCAqdmJ1ZiwgdW5zaWduZWQgbG9uZyBsZW4pCit7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZwkqcnA7CisJdW5zaWduZWQgbG9uZwkJKmJ1ZiwgKmVidWY7CisKKwlidWYgPSAodW5zaWduZWQgbG9uZyAqKSB2YnVmOworCXJwID0gKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikgYWRkcjsKKwlmb3IgKGVidWYgPSBidWYgKyBsZW47IChidWYgPCBlYnVmKTsgKQorCQkqYnVmKysgPSAqcnA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbWNfb3V0c3codW5zaWduZWQgaW50IGFkZHIsIGNvbnN0IHZvaWQgKnZidWYsIHVuc2lnbmVkIGxvbmcgbGVuKQoreworCXZvbGF0aWxlIHVuc2lnbmVkIHNob3J0CSpycDsKKwl1bnNpZ25lZCBzaG9ydAkJKmJ1ZiwgKmVidWY7CisKKwlidWYgPSAodW5zaWduZWQgc2hvcnQgKikgdmJ1ZjsKKwlycCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSBhZGRyOworCWZvciAoZWJ1ZiA9IGJ1ZiArIGxlbjsgKGJ1ZiA8IGVidWYpOyApCisJCSpycCA9ICpidWYrKzsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNtY19vdXRzbCh1bnNpZ25lZCBpbnQgYWRkciwgdm9pZCAqdmJ1ZiwgdW5zaWduZWQgbG9uZyBsZW4pCit7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZwkqcnA7CisJdW5zaWduZWQgbG9uZwkJKmJ1ZiwgKmVidWY7CisKKwlidWYgPSAodW5zaWduZWQgbG9uZyAqKSB2YnVmOworCXJwID0gKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikgYWRkcjsKKwlmb3IgKGVidWYgPSBidWYgKyBsZW47IChidWYgPCBlYnVmKTsgKQorCQkqcnAgPSAqYnVmKys7Cit9CisKKworI2lmZGVmIENPTkZJR19ORVR0ZWwKKy8qCisgKglSZS1tYXAgdGhlIGFkZHJlc3Mgc3BhY2Ugb2YgYXQgbGVhc3Qgb25lIG9mIHRoZSBTTUMgZXRoZXJuZXQKKyAqCXBhcnRzLiBCb3RoIHBhcnRzIHBvd2VyIHVwIGRlY29kaW5nIHRoZSBzYW1lIGFkZHJlc3MsIHNvIHdlCisgKgluZWVkIHRvIG1vdmUgb25lIG9mIHRoZW0gZmlyc3QsIGJlZm9yZSBkb2luZyBlbnl0aGluZyBlbHNlLgorICoKKyAqCVdlIGFsc28gaW5jcmVhc2UgdGhlIG51bWJlciBvZiB3YWl0IHN0YXRlcyBmb3IgdGhpcyBwYXJ0IGJ5IG9uZS4KKyAqLworCit2b2lkIHNtY19yZW1hcCh1bnNpZ25lZCBpbnQgaW9hZGRyKQoreworCXN0YXRpYyBpbnQJCW9uY2UgPSAwOworCWV4dGVybiB1bnNpZ25lZCBzaG9ydAlwcGRhdGE7CisJaWYgKG9uY2UrKyA9PSAwKSB7CisJCSooKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKE1DRl9NQkFSK01DRlNJTV9QQUREUikpID0gMHgwMGVjOworCQlwcGRhdGEgfD0gMHgwMDgwOworCQkqKCh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKShNQ0ZfTUJBUitNQ0ZTSU1fUEFEQVQpKSA9IHBwZGF0YTsKKwkJb3V0dygweDAwMDEsIGlvYWRkciArIEJBTktfU0VMRUNUKTsKKwkJb3V0dygweDAwMDEsIGlvYWRkciArIEJBTktfU0VMRUNUKTsKKwkJb3V0dygweDAwNjcsIGlvYWRkciArIEJBU0UpOworCisJCXBwZGF0YSAmPSB+MHgwMDgwOworCQkqKCh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKShNQ0ZfTUJBUitNQ0ZTSU1fUEFEQVQpKSA9IHBwZGF0YTsKKwl9CisJCisJKigodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoTUNGX01CQVIrTUNGU0lNX0NTQ1IzKSkgPSAweDExODA7Cit9CisKKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNlbmRpZgkvKiBtY2ZzbWNfaCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L21jZnRpbWVyLmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbWNmdGltZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjQ3MTY0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L21jZnRpbWVyLmgKQEAgLTAsMCArMSw4NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKgltY2Z0aW1lci5oIC0tIENvbGRGaXJlIGludGVybmFsIFRJTUVSIHN1cHBvcnQgZGVmaW5lcy4KKyAqCisgKgkoQykgQ29weXJpZ2h0IDE5OTktMjAwMiwgR3JlZyBVbmdlcmVyIChnZXJnQHNuYXBnZWFyLmNvbSkKKyAqIAkoQykgQ29weXJpZ2h0IDIwMDAsIExpbmVvIEluYy4gKHd3dy5saW5lby5jb20pIAorICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZgltY2Z0aW1lcl9oCisjZGVmaW5lCW1jZnRpbWVyX2gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKy8qCisgKglHZXQgYWRkcmVzcyBzcGVjaWZpYyBkZWZpbmVzIGZvciB0aGlzIENvbGRGaXJlIG1lbWJlci4KKyAqLworI2lmIGRlZmluZWQoQ09ORklHX001MjA0KSB8fCBkZWZpbmVkKENPTkZJR19NNTIwNikgfHwgZGVmaW5lZChDT05GSUdfTTUyMDZlKQorI2RlZmluZQlNQ0ZUSU1FUl9CQVNFMQkJMHgxMDAJCS8qIEJhc2UgYWRkcmVzcyBvZiBUSU1FUjEgKi8KKyNkZWZpbmUJTUNGVElNRVJfQkFTRTIJCTB4MTIwCQkvKiBCYXNlIGFkZHJlc3Mgb2YgVElNRVIyICovCisjZWxpZiBkZWZpbmVkKENPTkZJR19NNTI3MikKKyNkZWZpbmUgTUNGVElNRVJfQkFTRTEJCTB4MjAwICAgICAgICAgICAvKiBCYXNlIGFkZHJlc3Mgb2YgVElNRVIxICovCisjZGVmaW5lIE1DRlRJTUVSX0JBU0UyCQkweDIyMCAgICAgICAgICAgLyogQmFzZSBhZGRyZXNzIG9mIFRJTUVSMiAqLworI2RlZmluZSBNQ0ZUSU1FUl9CQVNFMwkJMHgyNDAgICAgICAgICAgIC8qIEJhc2UgYWRkcmVzcyBvZiBUSU1FUjQgKi8KKyNkZWZpbmUgTUNGVElNRVJfQkFTRTQJCTB4MjYwICAgICAgICAgICAvKiBCYXNlIGFkZHJlc3Mgb2YgVElNRVIzICovCisjZWxpZiBkZWZpbmVkKENPTkZJR19NNTI0OSkgfHwgZGVmaW5lZChDT05GSUdfTTUzMDcpIHx8IGRlZmluZWQoQ09ORklHX001NDA3KQorI2RlZmluZSBNQ0ZUSU1FUl9CQVNFMQkJMHgxNDAgICAgICAgICAgIC8qIEJhc2UgYWRkcmVzcyBvZiBUSU1FUjEgKi8KKyNkZWZpbmUgTUNGVElNRVJfQkFTRTIJCTB4MTgwICAgICAgICAgICAvKiBCYXNlIGFkZHJlc3Mgb2YgVElNRVIyICovCisjZW5kaWYKKworCisvKgorICoJRGVmaW5lIHRoZSBUSU1FUiByZWdpc3RlciBzZXQgYWRkcmVzc2VzLgorICovCisjZGVmaW5lCU1DRlRJTUVSX1RNUgkJMHgwMAkJLyogVGltZXIgTW9kZSByZWcgKHIvdykgKi8KKyNkZWZpbmUJTUNGVElNRVJfVFJSCQkweDAyCQkvKiBUaW1lciBSZWZlcmVuY2UgKHIvdykgKi8KKyNkZWZpbmUJTUNGVElNRVJfVENSCQkweDA0CQkvKiBUaW1lciBDYXB0dXJlIHJlZyAoci93KSAqLworI2RlZmluZQlNQ0ZUSU1FUl9UQ04JCTB4MDYJCS8qIFRpbWVyIENvdW50ZXIgcmVnIChyL3cpICovCisjZGVmaW5lCU1DRlRJTUVSX1RFUgkJMHgxMQkJLyogVGltZXIgRXZlbnQgcmVnIChyL3cpICovCisKK3N0cnVjdCBtY2Z0aW1lciB7CisJdW5zaWduZWQgc2hvcnQJdG1yOwkJCS8qIFRpbWVyIE1vZGUgcmVnIChyL3cpICovCisJdW5zaWduZWQgc2hvcnQJcmVzZXJ2ZWQxOworCXVuc2lnbmVkIHNob3J0CXRycjsJCQkvKiBUaW1lciBSZWZlcmVuY2UgKHIvdykgKi8KKwl1bnNpZ25lZCBzaG9ydAlyZXNlcnZlZDI7CisJdW5zaWduZWQgc2hvcnQJdGNyOwkJCS8qIFRpbWVyIENhcHR1cmUgcmVnIChyL3cpICovCisJdW5zaWduZWQgc2hvcnQJcmVzZXJ2ZWQzOworCXVuc2lnbmVkIHNob3J0CXRjbjsJCQkvKiBUaW1lciBDb3VudGVyIHJlZyAoci93KSAqLworCXVuc2lnbmVkIHNob3J0CXJlc2VydmVkNDsKKwl1bnNpZ25lZCBjaGFyCXJlc2VydmVkNTsKKwl1bnNpZ25lZCBjaGFyCXRlcjsJCQkvKiBUaW1lciBFdmVudCByZWcgKHIvdykgKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qCisgKglCaXQgZGVmaW5pdGlvbnMgZm9yIHRoZSBUaW1lciBNb2RlIFJlZ2lzdGVyIChUTVIpLgorICoJUmVnaXN0ZXIgYml0IGZsYWdzIGFyZSBjb21tb24gYWNjcm9zcyBDb2xkRmlyZXMuCisgKi8KKyNkZWZpbmUJTUNGVElNRVJfVE1SX1BSRU1BU0sJMHhmZjAwCQkvKiBQcmVzY2FsYXIgbWFzayAqLworI2RlZmluZQlNQ0ZUSU1FUl9UTVJfRElTQ0UJMHgwMDAwCQkvKiBEaXNhYmxlIGNhcHR1cmUgKi8KKyNkZWZpbmUJTUNGVElNRVJfVE1SX0FOWUNFCTB4MDBjMAkJLyogQ2FwdHVyZSBhbnkgZWRnZSAqLworI2RlZmluZQlNQ0ZUSU1FUl9UTVJfRkFMTENFCTB4MDA4MAkJLyogQ2FwdHVyZSBmYWxsaW5nZWRnZSAqLworI2RlZmluZQlNQ0ZUSU1FUl9UTVJfUklTRUNFCTB4MDA0MAkJLyogQ2FwdHVyZSByaXNpbmcgZWRnZSAqLworI2RlZmluZQlNQ0ZUSU1FUl9UTVJfRU5PTQkweDAwMjAJCS8qIEVuYWJsZSBvdXRwdXQgdG9nZ2xlICovCisjZGVmaW5lCU1DRlRJTUVSX1RNUl9ESVNPTQkweDAwMDAJCS8qIERvIHNpbmdsZSBvdXRwdXQgcHVsc2UgICovCisjZGVmaW5lCU1DRlRJTUVSX1RNUl9FTk9SSQkweDAwMTAJCS8qIEVuYWJsZSByZWYgaW50ZXJydXB0ICovCisjZGVmaW5lCU1DRlRJTUVSX1RNUl9ESVNPUkkJMHgwMDAwCQkvKiBEaXNhYmxlIHJlZiBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUJTUNGVElNRVJfVE1SX1JFU1RBUlQJMHgwMDA4CQkvKiBSZXN0YXJ0IGNvdW50ZXIgKi8KKyNkZWZpbmUJTUNGVElNRVJfVE1SX0ZSRUVSVU4JMHgwMDAwCQkvKiBGcmVlIHJ1bm5pbmcgY291bnRlciAqLworI2RlZmluZQlNQ0ZUSU1FUl9UTVJfQ0xLVElOCTB4MDAwNgkJLyogSW5wdXQgY2xvY2sgaXMgVElOICovCisjZGVmaW5lCU1DRlRJTUVSX1RNUl9DTEsxNgkweDAwMDQJCS8qIElucHV0IGNsb2NrIGlzIC8xNiAqLworI2RlZmluZQlNQ0ZUSU1FUl9UTVJfQ0xLMQkweDAwMDIJCS8qIElucHV0IGNsb2NrIGlzIC8xICovCisjZGVmaW5lCU1DRlRJTUVSX1RNUl9DTEtTVE9QCTB4MDAwMAkJLyogU3RvcCBjb3VudGVyICovCisjZGVmaW5lCU1DRlRJTUVSX1RNUl9FTkFCTEUJMHgwMDAxCQkvKiBFbmFibGUgdGltZXIgKi8KKyNkZWZpbmUJTUNGVElNRVJfVE1SX0RJU0FCTEUJMHgwMDAwCQkvKiBEaXNhYmxlIHRpbWVyICovCisKKy8qCisgKglCaXQgZGVmaW5pdGlvbnMgZm9yIHRoZSBUaW1lciBFdmVudCBSZWdpc3RlcnMgKFRFUikuCisgKi8KKyNkZWZpbmUJTUNGVElNRVJfVEVSX0NBUAkweDAxCQkvKiBDYXB0dXJlIGV2ZW50ICovCisjZGVmaW5lCU1DRlRJTUVSX1RFUl9SRUYJMHgwMgkJLyogUmVmZXJuZWNlIGV2ZW50ICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2VuZGlmCS8qIG1jZnRpbWVyX2ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9tY2Z1YXJ0LmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbWNmdWFydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0ZDRhODUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbWNmdWFydC5oCkBAIC0wLDAgKzEsMjAwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCW1jZnVhcnQuaCAtLSBDb2xkRmlyZSBpbnRlcm5hbCBVQVJUIHN1cHBvcnQgZGVmaW5lcy4KKyAqCisgKgkoQykgQ29weXJpZ2h0IDE5OTktMjAwMywgR3JlZyBVbmdlcmVyIChnZXJnQHNuYXBnZWFyLmNvbSkKKyAqIAkoQykgQ29weXJpZ2h0IDIwMDAsIExpbmVvIEluYy4gKHd3dy5saW5lby5jb20pIAorICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZgltY2Z1YXJ0X2gKKyNkZWZpbmUJbWNmdWFydF9oCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisvKgorICoJRGVmaW5lIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIFVBUlRTIHdpdGhpbiB0aGUgTUJBUiBhZGRyZXNzCisgKglzcGFjZS4KKyAqLworI2lmIGRlZmluZWQoQ09ORklHX001MjcyKQorI2RlZmluZQlNQ0ZVQVJUX0JBU0UxCQkweDEwMAkJLyogQmFzZSBhZGRyZXNzIG9mIFVBUlQxICovCisjZGVmaW5lCU1DRlVBUlRfQkFTRTIJCTB4MTQwCQkvKiBCYXNlIGFkZHJlc3Mgb2YgVUFSVDIgKi8KKyNlbGlmIGRlZmluZWQoQ09ORklHX001MjA0KSB8fCBkZWZpbmVkKENPTkZJR19NNTIwNikgfHwgZGVmaW5lZChDT05GSUdfTTUyMDZlKQorI2lmIGRlZmluZWQoQ09ORklHX05FVHRlbCkKKyNkZWZpbmUJTUNGVUFSVF9CQVNFMQkJMHgxODAJCS8qIEJhc2UgYWRkcmVzcyBvZiBVQVJUMSAqLworI2RlZmluZQlNQ0ZVQVJUX0JBU0UyCQkweDE0MAkJLyogQmFzZSBhZGRyZXNzIG9mIFVBUlQyICovCisjZWxzZQorI2RlZmluZQlNQ0ZVQVJUX0JBU0UxCQkweDE0MAkJLyogQmFzZSBhZGRyZXNzIG9mIFVBUlQxICovCisjZGVmaW5lCU1DRlVBUlRfQkFTRTIJCTB4MTgwCQkvKiBCYXNlIGFkZHJlc3Mgb2YgVUFSVDIgKi8KKyNlbmRpZgorI2VsaWYgZGVmaW5lZChDT05GSUdfTTUyN3gpIHx8IGRlZmluZWQoQ09ORklHX001Mjh4KQorI2RlZmluZSBNQ0ZVQVJUX0JBU0UxCQkweDIwMCAgICAgICAgICAgLyogQmFzZSBhZGRyZXNzIG9mIFVBUlQxICovCisjZGVmaW5lIE1DRlVBUlRfQkFTRTIJCTB4MjQwICAgICAgICAgICAvKiBCYXNlIGFkZHJlc3Mgb2YgVUFSVDIgKi8KKyNkZWZpbmUgTUNGVUFSVF9CQVNFMwkJMHgyODAgICAgICAgICAgIC8qIEJhc2UgYWRkcmVzcyBvZiBVQVJUMyAqLworI2VsaWYgZGVmaW5lZChDT05GSUdfTTUyNDkpIHx8IGRlZmluZWQoQ09ORklHX001MzA3KSB8fCBkZWZpbmVkKENPTkZJR19NNTQwNykKKyNpZiBkZWZpbmVkKENPTkZJR19ORVR0ZWwpIHx8IGRlZmluZWQoQ09ORklHX0RJU0t0ZWwpIHx8IGRlZmluZWQoQ09ORklHX1NFQ1VSRUVER0VNUDMpCisjZGVmaW5lIE1DRlVBUlRfQkFTRTEJCTB4MjAwICAgICAgICAgICAvKiBCYXNlIGFkZHJlc3Mgb2YgVUFSVDEgKi8KKyNkZWZpbmUgTUNGVUFSVF9CQVNFMgkJMHgxYzAgICAgICAgICAgIC8qIEJhc2UgYWRkcmVzcyBvZiBVQVJUMiAqLworI2Vsc2UKKyNkZWZpbmUgTUNGVUFSVF9CQVNFMQkJMHgxYzAgICAgICAgICAgIC8qIEJhc2UgYWRkcmVzcyBvZiBVQVJUMSAqLworI2RlZmluZSBNQ0ZVQVJUX0JBU0UyCQkweDIwMCAgICAgICAgICAgLyogQmFzZSBhZGRyZXNzIG9mIFVBUlQyICovCisjZW5kaWYKKyNlbmRpZgorCisKKy8qCisgKglEZWZpbmUgdGhlIENvbGRGaXJlIFVBUlQgcmVnaXN0ZXIgc2V0IGFkZHJlc3Nlcy4KKyAqLworI2RlZmluZQlNQ0ZVQVJUX1VNUgkJMHgwMAkJLyogTW9kZSByZWdpc3RlciAoci93KSAqLworI2RlZmluZQlNQ0ZVQVJUX1VTUgkJMHgwNAkJLyogU3RhdHVzIHJlZ2lzdGVyIChyKSAqLworI2RlZmluZQlNQ0ZVQVJUX1VDU1IJCTB4MDQJCS8qIENsb2NrIFNlbGVjdCAodykgKi8KKyNkZWZpbmUJTUNGVUFSVF9VQ1IJCTB4MDgJCS8qIENvbW1hbmQgcmVnaXN0ZXIgKHcpICovCisjZGVmaW5lCU1DRlVBUlRfVVJCCQkweDBjCQkvKiBSZWNlaXZlciBCdWZmZXIgKHIpICovCisjZGVmaW5lCU1DRlVBUlRfVVRCCQkweDBjCQkvKiBUcmFuc21pdCBCdWZmZXIgKHcpICovCisjZGVmaW5lCU1DRlVBUlRfVUlQQ1IJCTB4MTAJCS8qIElucHV0IFBvcnQgQ2hhbmdlIChyKSAqLworI2RlZmluZQlNQ0ZVQVJUX1VBQ1IJCTB4MTAJCS8qIEF1eGlsaWFyeSBDb250cm9sICh3KSAqLworI2RlZmluZQlNQ0ZVQVJUX1VJU1IJCTB4MTQJCS8qIEludGVycnVwIFN0YXR1cyAocikgKi8KKyNkZWZpbmUJTUNGVUFSVF9VSU1SCQkweDE0CQkvKiBJbnRlcnJ1cHQgTWFzayAodykgKi8KKyNkZWZpbmUJTUNGVUFSVF9VQkcxCQkweDE4CQkvKiBCYXVkIFJhdGUgTVNCIChyL3cpICovCisjZGVmaW5lCU1DRlVBUlRfVUJHMgkJMHgxYwkJLyogQmF1ZCBSYXRlIExTQiAoci93KSAqLworI2lmZGVmCUNPTkZJR19NNTI3MgorI2RlZmluZQlNQ0ZVQVJUX1VURgkJMHgyOAkJLyogVHJhbnNtaXR0ZXIgRklGTyAoci93KSAqLworI2RlZmluZQlNQ0ZVQVJUX1VSRgkJMHgyYwkJLyogUmVjZWl2ZXIgRklGTyAoci93KSAqLworI2RlZmluZQlNQ0ZVQVJUX1VGUEQJCTB4MzAJCS8qIEZyYWMgUHJlYy4gRGl2aWRlciAoci93KSAqLworI2Vsc2UKKyNkZWZpbmUJTUNGVUFSVF9VSVZSCQkweDMwCQkvKiBJbnRlcnJ1cHQgVmVjdG9yIChyL3cpICovCisjZW5kaWYKKyNkZWZpbmUJTUNGVUFSVF9VSVBSCQkweDM0CQkvKiBJbnB1dCBQb3J0IChyKSAqLworI2RlZmluZQlNQ0ZVQVJUX1VPUDEJCTB4MzgJCS8qIE91dHB1dCBQb3J0IEJpdCBTZXQgKHcpICovCisjZGVmaW5lCU1DRlVBUlRfVU9QMAkJMHgzYwkJLyogT3V0cHV0IFBvcnQgQml0IFJlc2V0ICh3KSAqLworCisKKy8qCisgKglEZWZpbmUgYml0IGZsYWdzIGluIE1vZGUgUmVnaXN0ZXIgMSAoTVIxKS4KKyAqLworI2RlZmluZQlNQ0ZVQVJUX01SMV9SWFJUUwkweDgwCQkvKiBBdXRvIFJUUyBmbG93IGNvbnRyb2wgKi8KKyNkZWZpbmUJTUNGVUFSVF9NUjFfUlhJUlFGVUxMCTB4NDAJCS8qIFJYIElSUSB0eXBlIEZVTEwgKi8KKyNkZWZpbmUJTUNGVUFSVF9NUjFfUlhJUlFSRFkJMHgwMAkJLyogUlggSVJRIHR5cGUgUkRZICovCisjZGVmaW5lCU1DRlVBUlRfTVIxX1JYRVJSQkxPQ0sJMHgyMAkJLyogUlggYmxvY2sgZXJyb3IgbW9kZSAqLworI2RlZmluZQlNQ0ZVQVJUX01SMV9SWEVSUkNIQVIJMHgwMAkJLyogUlggY2hhciBlcnJvciBtb2RlICovCisKKyNkZWZpbmUJTUNGVUFSVF9NUjFfUEFSSVRZTk9ORQkweDEwCQkvKiBObyBwYXJpdHkgKi8KKyNkZWZpbmUJTUNGVUFSVF9NUjFfUEFSSVRZRVZFTgkweDAwCQkvKiBFdmVuIHBhcml0eSAqLworI2RlZmluZQlNQ0ZVQVJUX01SMV9QQVJJVFlPREQJMHgwNAkJLyogT2RkIHBhcml0eSAqLworI2RlZmluZQlNQ0ZVQVJUX01SMV9QQVJJVFlTUEFDRQkweDA4CQkvKiBTcGFjZSBwYXJpdHkgKi8KKyNkZWZpbmUJTUNGVUFSVF9NUjFfUEFSSVRZTUFSSwkweDBjCQkvKiBNYXJrIHBhcml0eSAqLworCisjZGVmaW5lCU1DRlVBUlRfTVIxX0NTNQkJMHgwMAkJLyogNSBiaXRzIHBlciBjaGFyICovCisjZGVmaW5lCU1DRlVBUlRfTVIxX0NTNgkJMHgwMQkJLyogNiBiaXRzIHBlciBjaGFyICovCisjZGVmaW5lCU1DRlVBUlRfTVIxX0NTNwkJMHgwMgkJLyogNyBiaXRzIHBlciBjaGFyICovCisjZGVmaW5lCU1DRlVBUlRfTVIxX0NTOAkJMHgwMwkJLyogOCBiaXRzIHBlciBjaGFyICovCisKKy8qCisgKglEZWZpbmUgYml0IGZsYWdzIGluIE1vZGUgUmVnaXN0ZXIgMiAoTVIyKS4KKyAqLworI2RlZmluZQlNQ0ZVQVJUX01SMl9MT09QQkFDSwkweDgwCQkvKiBMb29wYmFjayBtb2RlICovCisjZGVmaW5lCU1DRlVBUlRfTVIyX1JFTU9URUxPT1AJMHhjMAkJLyogUmVtb3RlIGxvb3BiYWNrIG1vZGUgKi8KKyNkZWZpbmUJTUNGVUFSVF9NUjJfQVVUT0VDSE8JMHg0MAkJLyogQXV0b21hdGljIGVjaG8gKi8KKyNkZWZpbmUJTUNGVUFSVF9NUjJfVFhSVFMJMHgyMAkJLyogQXNzZXJ0IFJUUyBvbiBUWCAqLworI2RlZmluZQlNQ0ZVQVJUX01SMl9UWENUUwkweDEwCQkvKiBBdXRvIENUUyBmbG93IGNvbnRyb2wgKi8KKworI2RlZmluZQlNQ0ZVQVJUX01SMl9TVE9QMQkweDA3CQkvKiAxIHN0b3AgYml0ICovCisjZGVmaW5lCU1DRlVBUlRfTVIyX1NUT1AxNQkweDA4CQkvKiAxLjUgc3RvcCBiaXRzICovCisjZGVmaW5lCU1DRlVBUlRfTVIyX1NUT1AyCTB4MGYJCS8qIDIgc3RvcCBiaXRzICovCisKKy8qCisgKglEZWZpbmUgYml0IGZsYWdzIGluIFN0YXR1cyBSZWdpc3RlciAoVVNSKS4KKyAqLworI2RlZmluZQlNQ0ZVQVJUX1VTUl9SWEJSRUFLCTB4ODAJCS8qIFJlY2VpdmVkIEJSRUFLICovCisjZGVmaW5lCU1DRlVBUlRfVVNSX1JYRlJBTUlORwkweDQwCQkvKiBSZWNlaXZlZCBmcmFtaW5nIGVycm9yICovCisjZGVmaW5lCU1DRlVBUlRfVVNSX1JYUEFSSVRZCTB4MjAJCS8qIFJlY2VpdmVkIHBhcml0eSBlcnJvciAqLworI2RlZmluZQlNQ0ZVQVJUX1VTUl9SWE9WRVJSVU4JMHgxMAkJLyogUmVjZWl2ZWQgb3ZlcnJ1biBlcnJvciAqLworI2RlZmluZQlNQ0ZVQVJUX1VTUl9UWEVNUFRZCTB4MDgJCS8qIFRyYW5zbWl0dGVyIGVtcHR5ICovCisjZGVmaW5lCU1DRlVBUlRfVVNSX1RYUkVBRFkJMHgwNAkJLyogVHJhbnNtaXR0ZXIgcmVhZHkgKi8KKyNkZWZpbmUJTUNGVUFSVF9VU1JfUlhGVUxMCTB4MDIJCS8qIFJlY2VpdmVyIGZ1bGwgKi8KKyNkZWZpbmUJTUNGVUFSVF9VU1JfUlhSRUFEWQkweDAxCQkvKiBSZWNlaXZlciByZWFkeSAqLworCisjZGVmaW5lCU1DRlVBUlRfVVNSX1JYRVJSCShNQ0ZVQVJUX1VTUl9SWEJSRUFLIHwgTUNGVUFSVF9VU1JfUlhGUkFNSU5HIHwgXAorCQkJCU1DRlVBUlRfVVNSX1JYUEFSSVRZIHwgTUNGVUFSVF9VU1JfUlhPVkVSUlVOKQorCisvKgorICoJRGVmaW5lIGJpdCBmbGFncyBpbiBDbG9jayBTZWxlY3QgUmVnaXN0ZXIgKFVDU1IpLgorICovCisjZGVmaW5lCU1DRlVBUlRfVUNTUl9SWENMS1RJTUVSCTB4ZDAJCS8qIFJYIGNsb2NrIGlzIHRpbWVyICovCisjZGVmaW5lCU1DRlVBUlRfVUNTUl9SWENMS0VYVDE2CTB4ZTAJCS8qIFJYIGNsb2NrIGlzIGV4dGVybmFsIHgxNiAqLworI2RlZmluZQlNQ0ZVQVJUX1VDU1JfUlhDTEtFWFQxCTB4ZjAJCS8qIFJYIGNsb2NrIGlzIGV4dGVybmFsIHgxICovCisKKyNkZWZpbmUJTUNGVUFSVF9VQ1NSX1RYQ0xLVElNRVIJMHgwZAkJLyogVFggY2xvY2sgaXMgdGltZXIgKi8KKyNkZWZpbmUJTUNGVUFSVF9VQ1NSX1RYQ0xLRVhUMTYJMHgwZQkJLyogVFggY2xvY2sgaXMgZXh0ZXJuYWwgeDE2ICovCisjZGVmaW5lCU1DRlVBUlRfVUNTUl9UWENMS0VYVDEJMHgwZgkJLyogVFggY2xvY2sgaXMgZXh0ZXJuYWwgeDEgKi8KKworLyoKKyAqCURlZmluZSBiaXQgZmxhZ3MgaW4gQ29tbWFuZCBSZWdpc3RlciAoVUNSKS4KKyAqLworI2RlZmluZQlNQ0ZVQVJUX1VDUl9DTUROVUxMCQkweDAwCS8qIE5vIGNvbW1hbmQgKi8KKyNkZWZpbmUJTUNGVUFSVF9VQ1JfQ01EUkVTRVRNUlBUUgkweDEwCS8qIFJlc2V0IE1SIHBvaW50ZXIgKi8KKyNkZWZpbmUJTUNGVUFSVF9VQ1JfQ01EUkVTRVRSWAkJMHgyMAkvKiBSZXNldCByZWNlaXZlciAqLworI2RlZmluZQlNQ0ZVQVJUX1VDUl9DTURSRVNFVFRYCQkweDMwCS8qIFJlc2V0IHRyYW5zbWl0dGVyICovCisjZGVmaW5lCU1DRlVBUlRfVUNSX0NNRFJFU0VURVJSCQkweDQwCS8qIFJlc2V0IGVycm9yIHN0YXR1cyAqLworI2RlZmluZQlNQ0ZVQVJUX1VDUl9DTURSRVNFVEJSRUFLCTB4NTAJLyogUmVzZXQgQlJFQUsgY2hhbmdlICovCisjZGVmaW5lCU1DRlVBUlRfVUNSX0NNREJSRUFLU1RBUlQJMHg2MAkvKiBTdGFydCBCUkVBSyAqLworI2RlZmluZQlNQ0ZVQVJUX1VDUl9DTURCUkVBS1NUT1AJMHg3MAkvKiBTdG9wIEJSRUFLICovCisKKyNkZWZpbmUJTUNGVUFSVF9VQ1JfVFhOVUxMCTB4MDAJCS8qIE5vIFRYIGNvbW1hbmQgKi8KKyNkZWZpbmUJTUNGVUFSVF9VQ1JfVFhFTkFCTEUJMHgwNAkJLyogRW5hYmxlIFRYICovCisjZGVmaW5lCU1DRlVBUlRfVUNSX1RYRElTQUJMRQkweDA4CQkvKiBEaXNhYmxlIFRYICovCisjZGVmaW5lCU1DRlVBUlRfVUNSX1JYTlVMTAkweDAwCQkvKiBObyBSWCBjb21tYW5kICovCisjZGVmaW5lCU1DRlVBUlRfVUNSX1JYRU5BQkxFCTB4MDEJCS8qIEVuYWJsZSBSWCAqLworI2RlZmluZQlNQ0ZVQVJUX1VDUl9SWERJU0FCTEUJMHgwMgkJLyogRGlzYWJsZSBSWCAqLworCisvKgorICoJRGVmaW5lIGJpdCBmbGFncyBpbiBJbnB1dCBQb3J0IENoYW5nZSBSZWdpc3RlciAoVUlQQ1IpLgorICovCisjZGVmaW5lCU1DRlVBUlRfVUlQQ1JfQ1RTQ09TCTB4MTAJCS8qIENUUyBjaGFuZ2Ugb2Ygc3RhdGUgKi8KKyNkZWZpbmUJTUNGVUFSVF9VSVBDUl9DVFMJMHgwMQkJLyogQ1RTIHZhbHVlICovCisKKy8qCisgKglEZWZpbmUgYml0IGZsYWdzIGluIElucHV0IFBvcnQgUmVnaXN0ZXIgKFVJUCkuCisgKi8KKyNkZWZpbmUJTUNGVUFSVF9VSVBSX0NUUwkweDAxCQkvKiBDVFMgdmFsdWUgKi8KKworLyoKKyAqCURlZmluZSBiaXQgZmxhZ3MgaW4gT3V0cHV0IFBvcnQgUmVnaXN0ZXJzIChVT1ApLgorICoJQ2xlYXIgYml0IGJ5IHdyaXRpbmcgdG8gVU9QMCwgc2V0IGJ5IHdyaXRpbmcgdG8gVU9QMS4KKyAqLworI2RlZmluZQlNQ0ZVQVJUX1VPUF9SVFMJCTB4MDEJCS8qIFJUUyBzZXQgb3IgY2xlYXIgKi8KKworLyoKKyAqCURlZmluZSBiaXQgZmxhZ3MgaW4gdGhlIEF1eGlsaWFyeSBDb250cm9sIFJlZ2lzdGVyIChVQUNSKS4KKyAqLworI2RlZmluZQlNQ0ZVQVJUX1VBQ1JfSUVDCTB4MDEJCS8qIElucHV0IGVuYWJsZSBjb250cm9sICovCisKKy8qCisgKglEZWZpbmUgYml0IGZsYWdzIGluIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKFVJU1IpLgorICoJVGhlc2Ugc2FtZSBiaXRzIGFyZSB1c2VkIGZvciB0aGUgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKFVJTVIpLgorICovCisjZGVmaW5lCU1DRlVBUlRfVUlSX0NPUwkJMHg4MAkJLyogQ2hhbmdlIG9mIHN0YXRlIChDVFMpICovCisjZGVmaW5lCU1DRlVBUlRfVUlSX0RFTFRBQlJFQUsJMHgwNAkJLyogQnJlYWsgc3RhcnQgb3Igc3RvcCAqLworI2RlZmluZQlNQ0ZVQVJUX1VJUl9SWFJFQURZCTB4MDIJCS8qIFJlY2VpdmVyIHJlYWR5ICovCisjZGVmaW5lCU1DRlVBUlRfVUlSX1RYUkVBRFkJMHgwMQkJLyogVHJhbnNtaXR0ZXIgcmVhZHkgKi8KKworI2lmZGVmCUNPTkZJR19NNTI3MgorLyoKKyAqCURlZmluZSBiaXQgZmxhZ3MgaW4gdGhlIFRyYW5zbWl0dGVyIEZJRk8gUmVnaXN0ZXIgKFVURikuCisgKi8KKyNkZWZpbmUJTUNGVUFSVF9VVEZfVFhCCQkweDFmCQkvKiBUcmFuc21pdHRlciBkYXRhIGxldmVsICovCisjZGVmaW5lCU1DRlVBUlRfVVRGX0ZVTEwJMHgyMAkJLyogVHJhbnNtaXR0ZXIgZmlmbyBmdWxsICovCisjZGVmaW5lCU1DRlVBUlRfVVRGX1RYUwkJMHhjMAkJLyogVHJhbnNtaXR0ZXIgc3RhdHVzICovCisKKy8qCisgKglEZWZpbmUgYml0IGZsYWdzIGluIHRoZSBSZWNlaXZlciBGSUZPIFJlZ2lzdGVyIChVUkYpLgorICovCisjZGVmaW5lCU1DRlVBUlRfVVJGX1JYQgkJMHgxZgkJLyogUmVjZWl2ZXIgZGF0YSBsZXZlbCAqLworI2RlZmluZQlNQ0ZVQVJUX1VSRl9GVUxMCTB4MjAJCS8qIFJlY2VpdmVyIGZpZm8gZnVsbCAqLworI2RlZmluZQlNQ0ZVQVJUX1VSRl9SWFMJCTB4YzAJCS8qIFJlY2VpdmVyIHN0YXR1cyAqLworI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2VuZGlmCS8qIG1jZnVhcnRfaCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L21jZndkZWJ1Zy5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L21jZndkZWJ1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0MjVkZDUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbWNmd2RlYnVnLmgKQEAgLTAsMCArMSwxMTkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICoJbWNmZGVidWcuaCAtLSBDb2xkRmlyZSBEZWJ1ZyBNb2R1bGUgc3VwcG9ydC4KKyAqCisgKiAJKEMpIENvcHlyaWdodCAyMDAxLCBMaW5lbyBJbmMuICh3d3cubGluZW8uY29tKSAKKyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgbWNmZGVidWdfaAorI2RlZmluZSBtY2ZkZWJ1Z19oCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworLyogRGVmaW5lIHRoZSBkZWJ1ZyBtb2R1bGUgcmVnaXN0ZXJzICovCisjZGVmaW5lIE1DRkRFQlVHX0NTUgkweDAJCQkvKiBDb25maWd1cmF0aW9uIHN0YXR1cwkJKi8KKyNkZWZpbmUgTUNGREVCVUdfQkFBUgkweDUJCQkvKiBCRE0gYWRkcmVzcyBhdHRyaWJ1dGUJKi8KKyNkZWZpbmUgTUNGREVCVUdfQUFUUgkweDYJCQkvKiBBZGRyZXNzIGF0dHJpYnV0ZSB0cmlnZ2VyCSovCisjZGVmaW5lIE1DRkRFQlVHX1REUgkweDcJCQkvKiBUcmlnZ2VyIGRlZmluaXRpb24JCSovCisjZGVmaW5lIE1DRkRFQlVHX1BCUgkweDgJCQkvKiBQQyBicmVha3BvaW50CQkqLworI2RlZmluZSBNQ0ZERUJVR19QQk1SCTB4OQkJCS8qIFBDIGJyZWFrcG9pbnQgbWFzawkJKi8KKyNkZWZpbmUgTUNGREVCVUdfQUJIUgkweGMJCQkvKiBIaWdoIGFkZHJlc3MgYnJlYWtwb2ludAkqLworI2RlZmluZSBNQ0ZERUJVR19BQkxSCTB4ZAkJCS8qIExvdyBhZGRyZXNzIGJyZWFrcG9pbnQJKi8KKyNkZWZpbmUgTUNGREVCVUdfREJSCTB4ZQkJCS8qIERhdGEgYnJlYWtwb2ludAkJKi8KKyNkZWZpbmUgTUNGREVCVUdfREJNUgkweGYJCQkvKiBEYXRhIGJyZWFrcG9pbnQgbWFzawkJKi8KKworLyogRGVmaW5lIHNvbWUgaGFuZHkgY29uc3RhbnRzIGZvciB0aGUgdHJpZ2dlciBkZWZpbml0aW9uIHJlZ2lzdGVyICovCisjZGVmaW5lIE1DRkRFQlVHX1REUl9UUkNfRElTUAkweDAwMDAwMDAwCS8qIGRpc3BsYXkgb24gRERBVEEgb25seQkqLworI2RlZmluZSBNQ0ZERUJVR19URFJfVFJDX0hBTFQJMHg0MDAwMDAwMAkvKiBQcm9jZXNzb3IgaGFsdCBvbiBCUAkJKi8KKyNkZWZpbmUgTUNGREVCVUdfVERSX1RSQ19JTlRSCTB4ODAwMDAwMDAJLyogRGVidWcgaW50ciBvbiBCUAkJKi8KKyNkZWZpbmUgTUNGREVCVUdfVERSX0xYVDEJMHgwMDAwNDAwMAkvKiBURFIgbGV2ZWwgMQkJCSovCisjZGVmaW5lIE1DRkRFQlVHX1REUl9MWFQyCTB4MDAwMDgwMDAJLyogVERSIGxldmVsIDIJCQkqLworI2RlZmluZSBNQ0ZERUJVR19URFJfRUJMMQkweDAwMDAyMDAwCS8qIEVuYWJsZSBicmVha3BvaW50IGxldmVsIDEJKi8KKyNkZWZpbmUgTUNGREVCVUdfVERSX0VCTDIJMHgyMDAwMDAwMAkvKiBFbmFibGUgYnJlYWtwb2ludCBsZXZlbCAyCSovCisjZGVmaW5lIE1DRkRFQlVHX1REUl9FRExXMQkweDAwMDAxMDAwCS8qIEVuYWJsZSBkYXRhIEJQIGxvbmd3b3JkCSovCisjZGVmaW5lIE1DRkRFQlVHX1REUl9FRExXMgkweDEwMDAwMDAwCisjZGVmaW5lIE1DRkRFQlVHX1REUl9FRFdMMQkweDAwMDAwODAwCS8qIEVuYWJsZSBkYXRhIEJQIGxvd2VyIHdvcmQJKi8KKyNkZWZpbmUgTUNGREVCVUdfVERSX0VEV0wyCTB4MDgwMDAwMDAKKyNkZWZpbmUgTUNGREVCVUdfVERSX0VEV1UxCTB4MDAwMDA0MDAJLyogRW5hYmxlIGRhdGEgQlAgdXBwZXIgd29yZAkqLworI2RlZmluZSBNQ0ZERUJVR19URFJfRURXVTIJMHgwNDAwMDAwMAorI2RlZmluZSBNQ0ZERUJVR19URFJfRURMTDEJMHgwMDAwMDIwMAkvKiBFbmFibGUgZGF0YSBCUCBsb3cgbG93IGJ5dGUJKi8KKyNkZWZpbmUgTUNGREVCVUdfVERSX0VETEwyCTB4MDIwMDAwMDAKKyNkZWZpbmUgTUNGREVCVUdfVERSX0VETE0xCTB4MDAwMDAxMDAJLyogRW5hYmxlIGRhdGEgQlAgbG93IG1pZCBieXRlCSovCisjZGVmaW5lIE1DRkRFQlVHX1REUl9FRExNMgkweDAxMDAwMDAwCisjZGVmaW5lIE1DRkRFQlVHX1REUl9FRFVNMQkweDAwMDAwMDgwCS8qIEVuYWJsZSBkYXRhIEJQIHVwIG1pZCBieXRlCSovCisjZGVmaW5lIE1DRkRFQlVHX1REUl9FRFVNMgkweDAwODAwMDAwCisjZGVmaW5lIE1DRkRFQlVHX1REUl9FRFVVMQkweDAwMDAwMDQwCS8qIEVuYWJsZSBkYXRhIEJQIHVwIHVwIGJ5dGUJKi8KKyNkZWZpbmUgTUNGREVCVUdfVERSX0VEVVUyCTB4MDA0MDAwMDAKKyNkZWZpbmUgTUNGREVCVUdfVERSX0RJMQkweDAwMDAwMDIwCS8qIERhdGEgQlAgaW52ZXJ0CQkqLworI2RlZmluZSBNQ0ZERUJVR19URFJfREkyCTB4MDAyMDAwMDAKKyNkZWZpbmUgTUNGREVCVUdfVERSX0VBSTEJMHgwMDAwMDAxMAkvKiBFbmFibGUgYWRkcmVzcyBCUCBpbnZlcnRlZAkqLworI2RlZmluZSBNQ0ZERUJVR19URFJfRUFJMgkweDAwMTAwMDAwCisjZGVmaW5lIE1DRkRFQlVHX1REUl9FQVIxCTB4MDAwMDAwMDgJLyogRW5hYmxlIGFkZHJlc3MgQlAgcmFuZ2UJKi8KKyNkZWZpbmUgTUNGREVCVUdfVERSX0VBUjIJMHgwMDA4MDAwMAorI2RlZmluZSBNQ0ZERUJVR19URFJfRUFMMQkweDAwMDAwMDA0CS8qIEVuYWJsZSBhZGRyZXNzIEJQIGxvdwkqLworI2RlZmluZSBNQ0ZERUJVR19URFJfRUFMMgkweDAwMDQwMDAwCisjZGVmaW5lIE1DRkRFQlVHX1REUl9FUEMxCTB4MDAwMDAwMDIJLyogRW5hYmxlIFBDIEJQCQkJKi8KKyNkZWZpbmUgTUNGREVCVUdfVERSX0VQQzIJMHgwMDAyMDAwMAorI2RlZmluZSBNQ0ZERUJVR19URFJfUENJMQkweDAwMDAwMDAxCS8qIFBDIEJQIGludmVydAkJCSovCisjZGVmaW5lIE1DRkRFQlVHX1REUl9QQ0kyCTB4MDAwMTAwMDAKKworLyogQ29uc3RhbnRzIGZvciB0aGUgYWRkcmVzcyBhdHRyaWJ1dGUgdHJpZ2dlciByZWdpc3RlciAqLworI2RlZmluZSBNQ0ZERUJVR19BQVJfUkVTRVQJMHgwMDAwMDAwNQorLyogRmllbGRzIG5vdCB5ZXQgaW1wbGVtZW50ZWQgKi8KKworLyogQW5kIHNvbWUgZGVmaW5pdGlvbnMgZm9yIHRoZSB3cml0YWJsZSBzZWN0aW9ucyBvZiB0aGUgQ1NSICovCisjZGVmaW5lIE1DRkRFQlVHX0NTUl9SRVNFVAkweDAwMTAwMDAwCisjZGVmaW5lIE1DRkRFQlVHX0NTUl9QU1RDTEsJMHgwMDAyMDAwMAkvKiBQU1RDTEsgZGlzYWJsZQkJKi8KKyNkZWZpbmUgTUNGREVCVUdfQ1NSX0lQVwkweDAwMDEwMDAwCS8qIEluaGliaXQgcHJvY2Vzc29yIHdyaXRlcwkqLworI2RlZmluZSBNQ0ZERUJVR19DU1JfTUFQCTB4MDAwMDgwMDAJLyogUHJvY2Vzc29yIHJlZnMgaW4gZW11bCBtb2RlCSovCisjZGVmaW5lIE1DRkRFQlVHX0NTUl9UUkMJMHgwMDAwNDAwMAkvKiBFbXVsIG1vZGUgb24gdHJhY2UgZXhjZXB0aW9uCSovCisjZGVmaW5lIE1DRkRFQlVHX0NTUl9FTVUJMHgwMDAwMjAwMAkvKiBGb3JjZSBlbXVsYXRpb24gbW9kZQkJKi8KKyNkZWZpbmUgTUNGREVCVUdfQ1NSX0REQ19SRUFECTB4MDAwMDA4MDAJLyogRGVidWcgZGF0YSBjb250cm9sCQkqLworI2RlZmluZSBNQ0ZERUJVR19DU1JfRERDX1dSSVRFCTB4MDAwMDEwMDAKKyNkZWZpbmUgTUNGREVCVUdfQ1NSX1VIRQkweDAwMDAwNDAwCS8qIFVzZXIgbW9kZSBoYWx0IGVuYWJsZQkqLworI2RlZmluZSBNQ0ZERUJVR19DU1JfQlRCMAkweDAwMDAwMDAwCS8qIEJyYW5jaCB0YXJnZXQgMCBieXRlcwkqLworI2RlZmluZSBNQ0ZERUJVR19DU1JfQlRCMgkweDAwMDAwMTAwCS8qIEJyYW5jaCB0YXJnZXQgMiBieXRlcwkqLworI2RlZmluZSBNQ0ZERUJVR19DU1JfQlRCMwkweDAwMDAwMjAwCS8qIEJyYW5jaCB0YXJnZXQgMyBieXRlcwkqLworI2RlZmluZSBNQ0ZERUJVR19DU1JfQlRCNAkweDAwMDAwMzAwCS8qIEJyYW5jaCB0YXJnZXQgNCBieXRlcwkqLworI2RlZmluZSBNQ0ZERUJVR19DU1JfTlBMCTB4MDAwMDAwNDAJLyogTm9uLXBpcGVsaW5lZCBtb2RlCQkqLworI2RlZmluZSBNQ0ZERUJVR19DU1JfU1NNCTB4MDAwMDAwMTAJLyogU2luZ2xlIHN0ZXAgbW9kZQkJKi8KKworLyogQ29uc3RhbnRzIGZvciB0aGUgQkRNIGFkZHJlc3MgYXR0cmlidXRlIHJlZ2lzdGVyICovCisjZGVmaW5lIE1DRkRFQlVHX0JBQVJfUkVTRVQJMHgwMDAwMDAwNQorLyogRmllbGRzIG5vdCB5ZXQgaW1wbGVtZW50ZWQgKi8KKworCisvKiBUaGlzIHJvdXRpbmUgd3JhcHBlcnMgdXAgdGhlIHdkZWJ1ZyBhc20gaW5zdHJ1Y3Rpb24gc28gdGhhdCB0aGUgcmVnaXN0ZXIKKyAqIGFuZCB2YWx1ZSBjYW4gYmUgcmVsYXRpdmVseSBlYXNpbHkgc3BlY2lmaWVkLiAgVGhlIGJpZ2dlc3QgaGFzc2xlIGhlcmUgaXMKKyAqIHRoYXQgdGhlIGRlYnVnIG1vZHVsZSBpbnN0cnVjdGlvbnMgKDIgbG9uZ3MpIG11c3QgYmUgbG9uZyB3b3JkIGFsaWduZWQgYW5kCisgKiBzb21lIHBvaW50ZXIgZmlkZGxpbmcgaXMgcGVyZm9ybWVkIHRvIGVuc3VyZSB0aGlzLgorICovCitleHRlcm4gaW5saW5lIHZvaWQgd2RlYnVnKGludCByZWcsIHVuc2lnbmVkIGxvbmcgZGF0YSkgeworCXVuc2lnbmVkIHNob3J0IGRiZ19zcGNbNl07CisJdW5zaWduZWQgc2hvcnQgKmRiZzsKKworCS8vIEZvcmNlIGFsaWdubWVudCB0byBsb25nIHdvcmQgYm91bmRhcnkKKwlkYmcgPSAodW5zaWduZWQgc2hvcnQgKikoKCgodW5zaWduZWQgbG9uZylkYmdfc3BjKSArIDMpICYgMHhmZmZmZmZmYyk7CisKKwkvLyBCdWlsZCB1cCB0aGUgZGVidWcgaW5zdHJ1Y3Rpb24KKwlkYmdbMF0gPSAweDJjODAgfCAocmVnICYgMHhmKTsKKwlkYmdbMV0gPSAoZGF0YSA+PiAxNikgJiAweGZmZmY7CisJZGJnWzJdID0gZGF0YSAmIDB4ZmZmZjsKKwlkYmdbM10gPSAwOworCisJLy8gUGVyZm9ybSB0aGUgd2RlYnVnIGluc3RydWN0aW9uCisjaWYgMAorCS8vIFRoaXMgc3RyYWluIGlzIGZvciBnYXMgd2hpY2ggZG9lc24ndCBoYXZlIHRoZSB3ZGVidWcgaW5zdHJ1Y3Rpb25zIGRlZmluZWQKKwlhc20oCSJtb3ZlLmwJJTAsICUlYTBcblx0IgorCQkiLndvcmQJMHhmYmQwXG5cdCIKKwkJIi53b3JkCTB4MDAwM1xuXHQiCisJICAgIDo6ICJnIiAoZGJnKSA6ICJhMCIpOworI2Vsc2UKKwkvLyBBbmQgdGhpcyBpcyBmb3Igd2hlbiBpdCBkb2VzCisJYXNtKAkid2RlYnVnCSglMCkiIDo6ICJhIiAoZGJnKSk7CisjZW5kaWYKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbWQuaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9tZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4MTBjNzgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbWQuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLW02OGsvbWQuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9tbWFuLmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbW1hbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4NDZjNjgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbW1hbi5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tbTY4ay9tbWFuLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbW11LmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbW11LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZhNmI2OAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9tbXUuaApAQCAtMCwwICsxLDExIEBACisjaWZuZGVmIF9fTTY4S05PTU1VX01NVV9ICisjZGVmaW5lIF9fTTY4S05PTU1VX01NVV9ICisKKy8qIENvcHlyaWdodCAoQykgMjAwMiwgRGF2aWQgTWNDdWxsb3VnaCA8ZGF2aWRtQHNuYXBnZWFyLmNvbT4gKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworCXN0cnVjdCB2bV9saXN0X3N0cnVjdAkqdm1saXN0OworCXVuc2lnbmVkIGxvbmcJCWVuZF9icms7Cit9IG1tX2NvbnRleHRfdDsKKworI2VuZGlmIC8qIF9fTTY4S05PTU1VX01NVV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbW11X2NvbnRleHQuaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9tbXVfY29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYzBmZDQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbW11X2NvbnRleHQuaApAQCAtMCwwICsxLDMzIEBACisjaWZuZGVmIF9fTTY4S05PTU1VX01NVV9DT05URVhUX0gKKyNkZWZpbmUgX19NNjhLTk9NTVVfTU1VX0NPTlRFWFRfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgorCitzdGF0aWMgaW5saW5lIHZvaWQgZW50ZXJfbGF6eV90bGIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworfQorCitleHRlcm4gaW5saW5lIGludAoraW5pdF9uZXdfY29udGV4dChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJLy8gbW0tPmNvbnRleHQgPSB2aXJ0X3RvX3BoeXMobW0tPnBnZCk7CisJcmV0dXJuKDApOworfQorCisjZGVmaW5lIGRlc3Ryb3lfY29udGV4dChtbSkJCWRvIHsgfSB3aGlsZSgwKQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3dpdGNoX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKnByZXYsIHN0cnVjdCBtbV9zdHJ1Y3QgKm5leHQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworfQorCisjZGVmaW5lIGRlYWN0aXZhdGVfbW0odHNrLG1tKQlkbyB7IH0gd2hpbGUgKDApCisKK2V4dGVybiBpbmxpbmUgdm9pZCBhY3RpdmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICpwcmV2X21tLAorCQkJICAgICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm5leHRfbW0pCit7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L21vZHVsZS5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L21vZHVsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3ZTk1Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbW9kdWxlLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGFzbS1tNjhrL21vZHVsZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L21vdnMuaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9tb3ZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFhMTY3NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9tb3ZzLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGFzbS1tNjhrL21vdnMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9tc2didWYuaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9tc2didWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGZhZGVjNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9tc2didWYuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLW02OGsvbXNnYnVmLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbmFtZWkuaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9uYW1laS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxYTg1ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbmFtZWkuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLW02OGsvbmFtZWkuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9uZXR0ZWwuaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9uZXR0ZWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmRhMzA3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L25ldHRlbC5oCkBAIC0wLDAgKzEsMTA5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCW5ldHRlbC5oIC0tIExpbmVvIChmb3JtZXJseSBNb3JldG9uIEJheSkgTkVUdGVsIHN1cHBvcnQuCisgKgorICoJKEMpIENvcHlyaWdodCAxOTk5LTIwMDAsIE1vcmV0b24gQmF5ICh3d3cubW9yZXRvbmJheS5jb20pCisgKiAJKEMpIENvcHlyaWdodCAyMDAwLTIwMDEsIExpbmVvIEluYy4gKHd3dy5saW5lby5jb20pIAorICogCShDKSBDb3B5cmlnaHQgMjAwMS0yMDAyLCBTbmFwR2VhciBJbmMuLCAod3d3LnNuYXBnZWFyLmNvbSkgCisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmCW5ldHRlbF9oCisjZGVmaW5lCW5ldHRlbF9oCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZmRlZiBDT05GSUdfTkVUdGVsCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmZGVmIENPTkZJR19DT0xERklSRQorI2luY2x1ZGUgPGFzbS9jb2xkZmlyZS5oPgorI2luY2x1ZGUgPGFzbS9tY2ZzaW0uaD4KKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjaWYgZGVmaW5lZChDT05GSUdfTTUzMDcpCisvKgorICoJTkVUdGVsLzUzMDcgYmFzZWQgaGFyZHdhcmUgZmlyc3QuIERUUi9EQ0QgbGluZXMgYXJlIHdpcmVkIHRvCisgKglHUElPIGxpbmVzLiBNb3N0IG9mIHRoZSBMRUQncyBhcmUgZHJpdmVyIHRocm91Z2ggYSBsYXRjaAorICoJY29ubmVjdGVkIHRvIENTMi4KKyAqLworI2RlZmluZQlNQ0ZQUF9EQ0QxCTB4MDAwMQorI2RlZmluZQlNQ0ZQUF9EQ0QwCTB4MDAwMgorI2RlZmluZQlNQ0ZQUF9EVFIxCTB4MDAwNAorI2RlZmluZQlNQ0ZQUF9EVFIwCTB4MDAwOAorCisjZGVmaW5lCU5FVHRlbF9MRURBRERSCTB4MzA0MDAwMDAKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworZXh0ZXJuIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IHBwZGF0YTsKKworLyoKKyAqCVRoZXNlIGZ1bmN0aW9ucyBkZWZpbmVkIHRvIGdpdmUgcXVhc2kgZ2VuZXJpYyBhY2Nlc3MgdG8gdGhlCisgKglQUElPIGJpdHMgdXNlZCBmb3IgRFRSL0RDRC4KKyAqLworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IG1jZl9nZXRwcGRhdGEodm9pZCkKK3sKKwl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqcHA7CisJcHAgPSAodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikgKE1DRl9NQkFSICsgTUNGU0lNX1BBREFUKTsKKwlyZXR1cm4oKHVuc2lnbmVkIGludCkgKnBwKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBtY2Zfc2V0cHBkYXRhKHVuc2lnbmVkIGludCBtYXNrLCB1bnNpZ25lZCBpbnQgYml0cykKK3sKKwl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqcHA7CisJcHAgPSAodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikgKE1DRl9NQkFSICsgTUNGU0lNX1BBREFUKTsKKwlwcGRhdGEgPSAocHBkYXRhICYgfm1hc2spIHwgYml0czsKKwkqcHAgPSBwcGRhdGE7Cit9CisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2VsaWYgZGVmaW5lZChDT05GSUdfTTUyMDZlKQorLyoKKyAqCU5FVHRlbC81MjA2ZSBiYXNlZCBoYXJkd2FyZSBoYXMgbGVkcyBvbiBsYXRjaCBvbiBDUzMuCisgKglObyBzdXBwb3J0IG1vZGVtIGZvciBsaW5lcz8/CisgKi8KKyNkZWZpbmUJTkVUdGVsX0xFREFERFIJMHg1MDAwMDAwMAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZWxpZiBkZWZpbmVkKENPTkZJR19NNTI3MikKKy8qCisgKglORVR0ZWwvNTI3MiBiYXNlZCBoYXJkd2FyZS4gRFRSL0RDRCBsaW5lcyBhcmUgd2lyZWQgdG8gR1BCIGxpbmVzLgorICovCisjZGVmaW5lCU1DRlBQX0RDRDAJMHgwMDgwCisjZGVmaW5lCU1DRlBQX0RDRDEJMHgwMDAwCQkvKiBQb3J0IDEgbm8gRENEIHN1cHBvcnQgKi8KKyNkZWZpbmUJTUNGUFBfRFRSMAkweDAwNDAKKyNkZWZpbmUJTUNGUFBfRFRSMQkweDAwMDAJCS8qIFBvcnQgMSBubyBEVFIgc3VwcG9ydCAqLworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworLyoKKyAqCVRoZXNlIGZ1bmN0aW9ucyBkZWZpbmVkIHRvIGdpdmUgcXVhc2kgZ2VuZXJpYyBhY2Nlc3MgdG8gdGhlCisgKglQUElPIGJpdHMgdXNlZCBmb3IgRFRSL0RDRC4KKyAqLworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IG1jZl9nZXRwcGRhdGEodm9pZCkKK3sKKwl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqcHA7CisJcHAgPSAodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikgKE1DRl9NQkFSICsgTUNGU0lNX1BCREFUKTsKKwlyZXR1cm4oKHVuc2lnbmVkIGludCkgKnBwKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBtY2Zfc2V0cHBkYXRhKHVuc2lnbmVkIGludCBtYXNrLCB1bnNpZ25lZCBpbnQgYml0cykKK3sKKwl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqcHA7CisJcHAgPSAodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikgKE1DRl9NQkFSICsgTUNGU0lNX1BCREFUKTsKKwkqcHAgPSAoKnBwICYgfm1hc2spIHwgYml0czsKK30KKyNlbmRpZgorCisjZW5kaWYKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZW5kaWYgLyogQ09ORklHX05FVHRlbCAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZW5kaWYJLyogbmV0dGVsX2ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9vcGVucHJvbS5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L29wZW5wcm9tLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRiYTc5NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9vcGVucHJvbS5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tbTY4ay9vcGVucHJvbS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L29wbGliLmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvb3BsaWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTA3OWRjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L29wbGliLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGFzbS1tNjhrL29wbGliLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvcGFnZS5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L3BhZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWUwM2RmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L3BhZ2UuaApAQCAtMCwwICsxLDk1IEBACisjaWZuZGVmIF9NNjhLTk9NTVVfUEFHRV9ICisjZGVmaW5lIF9NNjhLTk9NTVVfUEFHRV9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworLyogUEFHRV9TSElGVCBkZXRlcm1pbmVzIHRoZSBwYWdlIHNpemUgKi8KKworI2RlZmluZSBQQUdFX1NISUZUCSgxMikKKyNkZWZpbmUgUEFHRV9TSVpFCSgxVUwgPDwgUEFHRV9TSElGVCkKKyNkZWZpbmUgUEFHRV9NQVNLCSh+KFBBR0VfU0laRS0xKSkKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworIAorI2RlZmluZSBnZXRfdXNlcl9wYWdlKHZhZGRyKQkJX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpCisjZGVmaW5lIGZyZWVfdXNlcl9wYWdlKHBhZ2UsIGFkZHIpCWZyZWVfcGFnZShhZGRyKQorCisjZGVmaW5lIGNsZWFyX3BhZ2UocGFnZSkJbWVtc2V0KChwYWdlKSwgMCwgUEFHRV9TSVpFKQorI2RlZmluZSBjb3B5X3BhZ2UodG8sZnJvbSkJbWVtY3B5KCh0byksIChmcm9tKSwgUEFHRV9TSVpFKQorCisjZGVmaW5lIGNsZWFyX3VzZXJfcGFnZShwYWdlLCB2YWRkciwgcGcpCWNsZWFyX3BhZ2UocGFnZSkKKyNkZWZpbmUgY29weV91c2VyX3BhZ2UodG8sIGZyb20sIHZhZGRyLCBwZykJY29weV9wYWdlKHRvLCBmcm9tKQorCisjZGVmaW5lIGFsbG9jX3plcm9lZF91c2VyX2hpZ2hwYWdlKHZtYSwgdmFkZHIpIGFsbG9jX3BhZ2Vfdm1hKEdGUF9ISUdIVVNFUiB8IF9fR0ZQX1pFUk8sIHZtYSwgdmFkZHIpCisjZGVmaW5lIF9fSEFWRV9BUkNIX0FMTE9DX1pFUk9FRF9VU0VSX0hJR0hQQUdFCisKKy8qCisgKiBUaGVzZSBhcmUgdXNlZCB0byBtYWtlIHVzZSBvZiBDIHR5cGUtY2hlY2tpbmcuLgorICovCit0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgcHRlOyB9IHB0ZV90OwordHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHBtZFsxNl07IH0gcG1kX3Q7Cit0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgcGdkOyB9IHBnZF90OwordHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHBncHJvdDsgfSBwZ3Byb3RfdDsKKworI2RlZmluZSBwdGVfdmFsKHgpCSgoeCkucHRlKQorI2RlZmluZSBwbWRfdmFsKHgpCSgoJngpLT5wbWRbMF0pCisjZGVmaW5lIHBnZF92YWwoeCkJKCh4KS5wZ2QpCisjZGVmaW5lIHBncHJvdF92YWwoeCkJKCh4KS5wZ3Byb3QpCisKKyNkZWZpbmUgX19wdGUoeCkJKChwdGVfdCkgeyAoeCkgfSApCisjZGVmaW5lIF9fcG1kKHgpCSgocG1kX3QpIHsgKHgpIH0gKQorI2RlZmluZSBfX3BnZCh4KQkoKHBnZF90KSB7ICh4KSB9ICkKKyNkZWZpbmUgX19wZ3Byb3QoeCkJKChwZ3Byb3RfdCkgeyAoeCkgfSApCisKKy8qIHRvIGFsaWduIHRoZSBwb2ludGVyIHRvIHRoZSAobmV4dCkgcGFnZSBib3VuZGFyeSAqLworI2RlZmluZSBQQUdFX0FMSUdOKGFkZHIpCSgoKGFkZHIpK1BBR0VfU0laRS0xKSZQQUdFX01BU0spCisKKy8qIFB1cmUgMl5uIHZlcnNpb24gb2YgZ2V0X29yZGVyICovCitleHRlcm4gX19pbmxpbmVfXyBpbnQgZ2V0X29yZGVyKHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlpbnQgb3JkZXI7CisKKwlzaXplID0gKHNpemUtMSkgPj4gKFBBR0VfU0hJRlQtMSk7CisJb3JkZXIgPSAtMTsKKwlkbyB7CisJCXNpemUgPj49IDE7CisJCW9yZGVyKys7CisJfSB3aGlsZSAoc2l6ZSk7CisJcmV0dXJuIG9yZGVyOworfQorCitleHRlcm4gdW5zaWduZWQgbG9uZyBtZW1vcnlfc3RhcnQ7CitleHRlcm4gdW5zaWduZWQgbG9uZyBtZW1vcnlfZW5kOworCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisjaW5jbHVkZSA8YXNtL3BhZ2Vfb2Zmc2V0Lmg+CisKKyNkZWZpbmUgUEFHRV9PRkZTRVQJCShQQUdFX09GRlNFVF9SQVcpCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNkZWZpbmUgX19wYSh2YWRkcikJCXZpcnRfdG9fcGh5cygodm9pZCAqKXZhZGRyKQorI2RlZmluZSBfX3ZhKHBhZGRyKQkJcGh5c190b192aXJ0KCh1bnNpZ25lZCBsb25nKXBhZGRyKQorCisjZGVmaW5lIHZpcnRfdG9fcGZuKGthZGRyKQkoX19wYShrYWRkcikgPj4gUEFHRV9TSElGVCkKKyNkZWZpbmUgcGZuX3RvX3ZpcnQocGZuKQlfX3ZhKChwZm4pIDw8IFBBR0VfU0hJRlQpCisKKyNkZWZpbmUgdmlydF90b19wYWdlKGFkZHIpCShtZW1fbWFwICsgKCgodW5zaWduZWQgbG9uZykoYWRkciktUEFHRV9PRkZTRVQpID4+IFBBR0VfU0hJRlQpKQorI2RlZmluZSBwYWdlX3RvX3ZpcnQocGFnZSkJKCgoKHBhZ2UpIC0gbWVtX21hcCkgPDwgUEFHRV9TSElGVCkgKyBQQUdFX09GRlNFVCkKKworI2RlZmluZSBwZm5fdG9fcGFnZShwZm4pCXZpcnRfdG9fcGFnZShwZm5fdG9fdmlydChwZm4pKQorI2RlZmluZSBwYWdlX3RvX3BmbihwYWdlKQl2aXJ0X3RvX3BmbihwYWdlX3RvX3ZpcnQocGFnZSkpCisKKyNkZWZpbmUJdmlydF9hZGRyX3ZhbGlkKGthZGRyKQkoKCh2b2lkICopKGthZGRyKSA+PSAodm9pZCAqKVBBR0VfT0ZGU0VUKSAmJiBcCisJCQkJKCh2b2lkICopKGthZGRyKSA8ICh2b2lkICopbWVtb3J5X2VuZCkpCisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9NNjhLTk9NTVVfUEFHRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvcGFnZV9vZmZzZXQuaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9wYWdlX29mZnNldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiNDU2NDUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvcGFnZV9vZmZzZXQuaApAQCAtMCwwICsxLDQ3IEBACisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworLyogVGhpcyBoYW5kbGVzIHRoZSBtZW1vcnkgbWFwLi4gKi8KKworI2lmZGVmIENPTkZJR19DT0xERklSRQorI2lmIGRlZmluZWQoQ09ORklHX1NNQUxMKQorI2RlZmluZSBQQUdFX09GRlNFVF9SQVcJCTB4MzAwMjAwMDAKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NGVjI0MCkKKyNkZWZpbmUgUEFHRV9PRkZTRVRfUkFXCQkweDAyMDAwMDAwCisjZWxzZQorI2RlZmluZSBQQUdFX09GRlNFVF9SQVcJCTB4MDAwMDAwMDAKKyNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTTY4MzYwCisjZGVmaW5lIFBBR0VfT0ZGU0VUX1JBVyAgICAgMHgwMDAwMDAwMAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfUElMT1QKKyNpZmRlZiBDT05GSUdfTTY4MzI4CisjZGVmaW5lIFBBR0VfT0ZGU0VUX1JBVwkJMHgxMDAwMDAwMAorI2VuZGlmCisjaWZkZWYgQ09ORklHX002OEVaMzI4CisjZGVmaW5lIFBBR0VfT0ZGU0VUX1JBVwkJMHgwMDAwMDAwMAorI2VuZGlmCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfVUNTSU1NCisjZGVmaW5lIFBBR0VfT0ZGU0VUX1JBVwkJMHgwMDAwMDAwMAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19VQ0RJTU0pIHx8IGRlZmluZWQoQ09ORklHX0RSQUdFTjIpCisjaWZkZWYgQ09ORklHX002OFZaMzI4IAorI2RlZmluZSBQQUdFX09GRlNFVF9SQVcJCTB4MDAwMDAwMDAKKyNlbmRpZiAvKiBDT05GSUdfTTY4VlozMjggKi8KKyNlbmRpZiAvKiBDT05GSUdfVUNESU1NICovCisKKyNpZmRlZiBDT05GSUdfTTY4RVozMjhBRFMKKyNkZWZpbmUgUEFHRV9PRkZTRVRfUkFXCQkweDAwMDAwMDAwCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQUxNQV9BTlMKKyNkZWZpbmUgUEFHRV9PRkZTRVRfUkFXCQkweDAwMDAwMDAwCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfTTY4RU4zMDIKKyNkZWZpbmUgUEFHRV9PRkZTRVRfUkFXCQkweDAwMDAwMDAwCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L3BhcmFtLmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjU3ZDVkYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9wYXJhbS5oCkBAIC0wLDAgKzEsMjYgQEAKKyNpZm5kZWYgX002OEtOT01NVV9QQVJBTV9ICisjZGVmaW5lIF9NNjhLTk9NTVVfUEFSQU1fSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpZiBkZWZpbmVkKENPTkZJR19DTEVPUEFUUkEpCisjZGVmaW5lCUhaIDEwMDAKKyNlbmRpZgorI2lmbmRlZiBIWgorI2RlZmluZQlIWiAxMDAKKyNlbmRpZgorCisjaWZkZWYgX19LRVJORUxfXworI2RlZmluZQlVU0VSX0haCQlIWgorI2RlZmluZQlDTE9DS1NfUEVSX1NFQwkoVVNFUl9IWikKKyNlbmRpZgorCisjZGVmaW5lIEVYRUNfUEFHRVNJWkUJNDA5NgorCisjaWZuZGVmIE5PR1JPVVAKKyNkZWZpbmUgTk9HUk9VUAkJKC0xKQorI2VuZGlmCisKKyNkZWZpbmUgTUFYSE9TVE5BTUVMRU4JNjQJLyogbWF4IGxlbmd0aCBvZiBob3N0bmFtZSAqLworCisjZW5kaWYgLyogX002OEtOT01NVV9QQVJBTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvcGNpLmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvcGNpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA0Yzc3ZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9wY2kuaApAQCAtMCwwICsxLDM5IEBACisjaWZuZGVmIE02OEtOT01NVV9QQ0lfSAorI2RlZmluZQlNNjhLTk9NTVVfUENJX0gKKworI2luY2x1ZGUgPGFzbS1tNjhrL3BjaS5oPgorCisjaWZkZWYgQ09ORklHX0NPTUVNUENJCisvKgorICoJVGhlc2UgYXJlIHByZXR0eSBtdWNoIGFyYml0YXJ5IHdpdGggdGhlIENvTUVNIGltcGxlbWVudGF0aW9uLgorICoJV2UgaGF2ZSB0aGUgd2hvbGUgYWRkcmVzcyBzcGFjZSB0byBvdXJzZWx2ZXMuCisgKi8KKyNkZWZpbmUgUENJQklPU19NSU5fSU8JCTB4MTAwCisjZGVmaW5lIFBDSUJJT1NfTUlOX01FTQkJMHgwMDAxMDAwMAorCisjZGVmaW5lIHBjaWJpb3Nfc2Nhbl9hbGxfZm5zKGEsIGIpCTAKKworLyoKKyAqIFJldHVybiB3aGV0aGVyIHRoZSBnaXZlbiBQQ0kgZGV2aWNlIERNQSBhZGRyZXNzIG1hc2sgY2FuCisgKiBiZSBzdXBwb3J0ZWQgcHJvcGVybHkuICBGb3IgZXhhbXBsZSwgaWYgeW91ciBkZXZpY2UgY2FuCisgKiBvbmx5IGRyaXZlIHRoZSBsb3cgMjQtYml0cyBkdXJpbmcgUENJIGJ1cyBtYXN0ZXJpbmcsIHRoZW4KKyAqIHlvdSB3b3VsZCBwYXNzIDB4MDBmZmZmZmYgYXMgdGhlIG1hc2sgdG8gdGhpcyBmdW5jdGlvbi4KKyAqLworc3RhdGljIGlubGluZSBpbnQgcGNpX2RtYV9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCB1NjQgbWFzaykKK3sKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIE5vdCBzdXBwb3J0aW5nIG1vcmUgdGhhbiAzMi1iaXQgUENJIGJ1cyBhZGRyZXNzZXMgbm93LCBidXQKKyAqIG11c3Qgc2F0aXNmeSByZWZlcmVuY2VzIHRvIHRoaXMgZnVuY3Rpb24uICBDaGFuZ2UgaWYgbmVlZGVkLgorICovCisjZGVmaW5lIHBjaV9kYWNfZG1hX3N1cHBvcnRlZChwY2lfZGV2LCBtYXNrKSAoMCkKKworc3RhdGljIGlubGluZSB2b2lkIHBjaWJpb3NfYWRkX3BsYXRmb3JtX2VudHJpZXMoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKK30KKworI2VuZGlmIC8qIENPTkZJR19DT01FTVBDSSAqLworCisjZW5kaWYgLyogTTY4S05PTU1VX1BDSV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvcGVyY3B1LmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvcGVyY3B1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRlNzJjMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9wZXJjcHUuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19BUkNIX002OEtOT01NVV9QRVJDUFVfXworI2RlZmluZSBfX0FSQ0hfTTY4S05PTU1VX1BFUkNQVV9fCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wZXJjcHUuaD4KKworI2VuZGlmIC8qIF9fQVJDSF9NNjhLTk9NTVVfUEVSQ1BVX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9wZ2FsbG9jLmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvcGdhbGxvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2MzUyZjYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvcGdhbGxvYy5oCkBAIC0wLDAgKzEsOCBAQAorI2lmbmRlZiBfTTY4S05PTU1VX1BHQUxMT0NfSAorI2RlZmluZSBfTTY4S05PTU1VX1BHQUxMT0NfSAorCisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisKKyNkZWZpbmUgY2hlY2tfcGd0X2NhY2hlKCkJZG8geyB9IHdoaWxlICgwKQorCisjZW5kaWYgLyogX002OEtOT01NVV9QR0FMTE9DX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvcGd0YWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyYTY5ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvcGd0YWJsZS5oCkBAIC0wLDAgKzEsNzYgQEAKKyNpZm5kZWYgX002OEtOT01NVV9QR1RBQkxFX0gKKyNkZWZpbmUgX002OEtOT01NVV9QR1RBQkxFX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljLzRsZXZlbC1maXh1cC5oPgorCisvKgorICogKEMpIENvcHlyaWdodCAyMDAwLTIwMDIsIEdyZWcgVW5nZXJlciA8Z2VyZ0BzbmFwZ2Vhci5jb20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworLyoKKyAqIFRyaXZpYWwgcGFnZSB0YWJsZSBmdW5jdGlvbnMuCisgKi8KKyNkZWZpbmUgcGdkX3ByZXNlbnQocGdkKQkoMSkKKyNkZWZpbmUgcGdkX25vbmUocGdkKQkJKDApCisjZGVmaW5lIHBnZF9iYWQocGdkKQkJKDApCisjZGVmaW5lIHBnZF9jbGVhcihwZ2RwKQorI2RlZmluZSBrZXJuX2FkZHJfdmFsaWQoYWRkcikJKDEpCisjZGVmaW5lCXBtZF9vZmZzZXQoYSwgYikJKCh2b2lkICopMCkKKworI2RlZmluZSBQQUdFX05PTkUJX19wZ3Byb3QoMCkKKyNkZWZpbmUgUEFHRV9TSEFSRUQJX19wZ3Byb3QoMCkKKyNkZWZpbmUgUEFHRV9DT1BZCV9fcGdwcm90KDApCisjZGVmaW5lIFBBR0VfUkVBRE9OTFkJX19wZ3Byb3QoMCkKKyNkZWZpbmUgUEFHRV9LRVJORUwJX19wZ3Byb3QoMCkKKworZXh0ZXJuIHZvaWQgcGFnaW5nX2luaXQodm9pZCk7CisjZGVmaW5lIHN3YXBwZXJfcGdfZGlyICgocGdkX3QgKikgMCkKKworI2RlZmluZSBfX3N3cF90eXBlKHgpCQkoMCkKKyNkZWZpbmUgX19zd3Bfb2Zmc2V0KHgpCQkoMCkKKyNkZWZpbmUgX19zd3BfZW50cnkodHlwLG9mZikJKChzd3BfZW50cnlfdCkgeyAoKHR5cCkgfCAoKG9mZikgPDwgNykpIH0pCisjZGVmaW5lIF9fcHRlX3RvX3N3cF9lbnRyeShwdGUpCSgoc3dwX2VudHJ5X3QpIHsgcHRlX3ZhbChwdGUpIH0pCisjZGVmaW5lIF9fc3dwX2VudHJ5X3RvX3B0ZSh4KQkoKHB0ZV90KSB7ICh4KS52YWwgfSkKKworc3RhdGljIGlubGluZSBpbnQgcHRlX2ZpbGUocHRlX3QgcHRlKSB7IHJldHVybiAwOyB9CisKKy8qCisgKiBaRVJPX1BBR0UgaXMgYSBnbG9iYWwgc2hhcmVkIHBhZ2UgdGhhdCBpcyBhbHdheXMgemVybzogdXNlZAorICogZm9yIHplcm8tbWFwcGVkIG1lbW9yeSBhcmVhcyBldGMuLgorICovCisjZGVmaW5lIFpFUk9fUEFHRSh2YWRkcikJKHZpcnRfdG9fcGFnZSgwKSkKKworLyoKKyAqIFRoZXNlIHdvdWxkIGJlIGluIG90aGVyIHBsYWNlcyBidXQgaGF2aW5nIHRoZW0gaGVyZSByZWR1Y2VzIHRoZSBkaWZmcy4KKyAqLworZXh0ZXJuIHVuc2lnbmVkIGludCBrb2Jqc2l6ZShjb25zdCB2b2lkICpvYmpwKTsKK2V4dGVybiBpbnQgaXNfaW5fcm9tKHVuc2lnbmVkIGxvbmcpOworCisvKgorICogTm8gcGFnZSB0YWJsZSBjYWNoZXMgdG8gaW5pdGlhbGlzZS4KKyAqLworI2RlZmluZSBwZ3RhYmxlX2NhY2hlX2luaXQoKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGlvX3JlbWFwX3BhZ2VfcmFuZ2Uodm1hLCB2YWRkciwgcGFkZHIsIHNpemUsIHByb3QpCQlcCisJCXJlbWFwX3Bmbl9yYW5nZSh2bWEsIHZhZGRyLCAocGFkZHIpID4+IFBBR0VfU0hJRlQsIHNpemUsIHByb3QpCisKKyNkZWZpbmUgaW9fcmVtYXBfcGZuX3JhbmdlKHZtYSwgdmFkZHIsIHBmbiwgc2l6ZSwgcHJvdCkJCVwKKwkJcmVtYXBfcGZuX3JhbmdlKHZtYSwgdmFkZHIsIHBmbiwgc2l6ZSwgcHJvdCkKKworI2RlZmluZSBNS19JT1NQQUNFX1BGTihzcGFjZSwgcGZuKQkocGZuKQorI2RlZmluZSBHRVRfSU9TUEFDRShwZm4pCQkwCisjZGVmaW5lIEdFVF9QRk4ocGZuKQkJCShwZm4pCisKKy8qCisgKiBBbGwgMzJiaXQgYWRkcmVzc2VzIGFyZSBlZmZlY3RpdmVseSB2YWxpZCBmb3Igdm1hbGxvYy4uLgorICogU29ydCBvZiBtZWFuaW5nbGVzcyBmb3Igbm9uLVZNIHRhcmdldHMuCisgKi8KKyNkZWZpbmUJVk1BTExPQ19TVEFSVAkwCisjZGVmaW5lCVZNQUxMT0NfRU5ECTB4ZmZmZmZmZmYKKworI2VuZGlmIC8qIF9NNjhLTk9NTVVfUEdUQUJMRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvcG9sbC5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L3BvbGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTFiNmNiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L3BvbGwuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLW02OGsvcG9sbC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L3Bvc2l4X3R5cGVzLmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvcG9zaXhfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjA1ZmI5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L3Bvc2l4X3R5cGVzLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGFzbS1tNjhrL3Bvc2l4X3R5cGVzLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvcHJvY2Vzc29yLmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvcHJvY2Vzc29yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVhMDU0ZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9wcm9jZXNzb3IuaApAQCAtMCwwICsxLDEzMSBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLW02OGsvcHJvY2Vzc29yLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUgSGFtaXNoIE1hY2RvbmFsZAorICovCisKKyNpZm5kZWYgX19BU01fTTY4S19QUk9DRVNTT1JfSAorI2RlZmluZSBfX0FTTV9NNjhLX1BST0NFU1NPUl9ICisKKy8qCisgKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIG1hY3JvIHRoYXQgcmV0dXJucyBjdXJyZW50CisgKiBpbnN0cnVjdGlvbiBwb2ludGVyICgicHJvZ3JhbSBjb3VudGVyIikuCisgKi8KKyNkZWZpbmUgY3VycmVudF90ZXh0X2FkZHIoKSAoeyBfX2xhYmVsX18gX2w7IF9sOiAmJl9sO30pCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KKyNpbmNsdWRlIDxhc20vZnB1Lmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS9jdXJyZW50Lmg+CisKK2V4dGVybiBpbmxpbmUgdW5zaWduZWQgbG9uZyByZHVzcCh2b2lkKQoreworI2lmZGVmIENPTkZJR19DT0xERklSRQorCWV4dGVybiB1bnNpZ25lZCBpbnQgc3dfdXNwOworCXJldHVybihzd191c3ApOworI2Vsc2UKKyAgCXVuc2lnbmVkIGxvbmcgdXNwOworCV9fYXNtX18gX192b2xhdGlsZV9fKCJtb3ZlICUvdXNwLCUwIiA6ICI9YSIgKHVzcCkpOworCXJldHVybiB1c3A7CisjZW5kaWYKK30KKworZXh0ZXJuIGlubGluZSB2b2lkIHdydXNwKHVuc2lnbmVkIGxvbmcgdXNwKQoreworI2lmZGVmIENPTkZJR19DT0xERklSRQorCWV4dGVybiB1bnNpZ25lZCBpbnQgc3dfdXNwOworCXN3X3VzcCA9IHVzcDsKKyNlbHNlCisJX19hc21fXyBfX3ZvbGF0aWxlX18oIm1vdmUgJTAsJS91c3AiIDogOiAiYSIgKHVzcCkpOworI2VuZGlmCit9CisKKy8qCisgKiBVc2VyIHNwYWNlIHByb2Nlc3Mgc2l6ZTogMy43NUdCLiBUaGlzIGlzIGhhcmRjb2RlZCBpbnRvIGEgZmV3IHBsYWNlcywKKyAqIHNvIGRvbid0IGNoYW5nZSBpdCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLgorICovCisjZGVmaW5lIFRBU0tfU0laRQkoMHhGMDAwMDAwMFVMKQorCisvKgorICogVGhpcyBkZWNpZGVzIHdoZXJlIHRoZSBrZXJuZWwgd2lsbCBzZWFyY2ggZm9yIGEgZnJlZSBjaHVuayBvZiB2bQorICogc3BhY2UgZHVyaW5nIG1tYXAncy4gV2Ugd29uJ3QgYmUgdXNpbmcgaXQKKyAqLworI2RlZmluZSBUQVNLX1VOTUFQUEVEX0JBU0UJMAorCisvKiAKKyAqIGlmIHlvdSBjaGFuZ2UgdGhpcyBzdHJ1Y3R1cmUsIHlvdSBtdXN0IGNoYW5nZSB0aGUgY29kZSBhbmQgb2Zmc2V0cworICogaW4gbTY4ay9tYWNoYXNtLlMKKyAqLworICAgCitzdHJ1Y3QgdGhyZWFkX3N0cnVjdCB7CisJdW5zaWduZWQgbG9uZyAga3NwOwkJLyoga2VybmVsIHN0YWNrIHBvaW50ZXIgKi8KKwl1bnNpZ25lZCBsb25nICB1c3A7CQkvKiB1c2VyIHN0YWNrIHBvaW50ZXIgKi8KKwl1bnNpZ25lZCBzaG9ydCBzcjsJCS8qIHNhdmVkIHN0YXR1cyByZWdpc3RlciAqLworCXVuc2lnbmVkIHNob3J0IGZzOwkJLyogc2F2ZWQgZnMgKHNmYywgZGZjKSAqLworCXVuc2lnbmVkIGxvbmcgIGNycFsyXTsJCS8qIGNwdSByb290IHBvaW50ZXIgKi8KKwl1bnNpZ25lZCBsb25nICBlc3AwOwkJLyogcG9pbnRzIHRvIFNSIG9mIHN0YWNrIGZyYW1lICovCisJdW5zaWduZWQgbG9uZyAgZnBbOCozXTsKKwl1bnNpZ25lZCBsb25nICBmcGNudGxbM107CS8qIGZwIGNvbnRyb2wgcmVncyAqLworCXVuc2lnbmVkIGNoYXIgIGZwc3RhdGVbRlBTVEFURVNJWkVdOyAgLyogZmxvYXRpbmcgcG9pbnQgc3RhdGUgKi8KK307CisKKyNkZWZpbmUgSU5JVF9USFJFQUQgIHsgXAorCXNpemVvZihpbml0X3N0YWNrKSArICh1bnNpZ25lZCBsb25nKSBpbml0X3N0YWNrLCAwLCBcCisJUFNfUywgX19LRVJORUxfRFMsIFwKKwl7MCwgMH0sIDAsIHswLH0sIHswLCAwLCAwfSwgezAsfSwgXAorfQorCisvKgorICogRG8gbmVjZXNzYXJ5IHNldHVwIHRvIHN0YXJ0IHVwIGEgbmV3bHkgZXhlY3V0ZWQgdGhyZWFkLgorICoKKyAqIHBhc3MgdGhlIGRhdGEgc2VnbWVudCBpbnRvIHVzZXIgcHJvZ3JhbXMgaWYgaXQgZXhpc3RzLAorICogaXQgY2FuJ3QgaHVydCBhbnl0aGluZyBhcyBmYXIgYXMgSSBjYW4gdGVsbAorICovCisjZGVmaW5lIHN0YXJ0X3RocmVhZChfcmVncywgX3BjLCBfdXNwKSAgICAgICAgICAgXAorZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlzZXRfZnMoVVNFUl9EUyk7IC8qIHJlYWRzIGZyb20gdXNlciBzcGFjZSAqLyBcCisJKF9yZWdzKS0+cGMgPSAoX3BjKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWlmIChjdXJyZW50LT5tbSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJKF9yZWdzKS0+ZDUgPSBjdXJyZW50LT5tbS0+c3RhcnRfZGF0YTsgICBcCisJKF9yZWdzKS0+c3IgJj0gfjB4MjAwMDsgICAgICAgICAgICAgICAgICAgICAgXAorCXdydXNwKF91c3ApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gd2hpbGUoMCkKKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbiwgYSBzdHJhbmdlIEMgdGhpbmcgKi8KK3N0cnVjdCB0YXNrX3N0cnVjdDsKKworLyogRnJlZSBhbGwgcmVzb3VyY2VzIGhlbGQgYnkgYSB0aHJlYWQuICovCitzdGF0aWMgaW5saW5lIHZvaWQgcmVsZWFzZV90aHJlYWQoc3RydWN0IHRhc2tfc3RydWN0ICpkZWFkX3Rhc2spCit7Cit9CisKKy8qIFByZXBhcmUgdG8gY29weSB0aHJlYWQgc3RhdGUgLSB1bmxhenkgYWxsIGxhenkgc3RhdHVzICovCisjZGVmaW5lIHByZXBhcmVfdG9fY29weSh0c2spCWRvIHsgfSB3aGlsZSAoMCkKKworZXh0ZXJuIGludCBrZXJuZWxfdGhyZWFkKGludCAoKmZuKSh2b2lkICopLCB2b2lkICogYXJnLCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKKworLyoKKyAqIEZyZWUgY3VycmVudCB0aHJlYWQgZGF0YSBzdHJ1Y3R1cmVzIGV0Yy4uCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBleGl0X3RocmVhZCh2b2lkKQoreworfQorCit1bnNpZ25lZCBsb25nIHRocmVhZF9zYXZlZF9wYyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7Cit1bnNpZ25lZCBsb25nIGdldF93Y2hhbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApOworCisjZGVmaW5lCUtTVEtfRUlQKHRzaykJXAorICAgICh7CQkJXAorCXVuc2lnbmVkIGxvbmcgZWlwID0gMDsJIFwKKwlpZiAoKHRzayktPnRocmVhZC5lc3AwID4gUEFHRV9TSVpFICYmIFwKKwkgICAgKHZpcnRfYWRkcl92YWxpZCgodHNrKS0+dGhyZWFkLmVzcDApKSkgXAorCSAgICAgIGVpcCA9ICgoc3RydWN0IHB0X3JlZ3MgKikgKHRzayktPnRocmVhZC5lc3AwKS0+cGM7IFwKKwllaXA7IH0pCisjZGVmaW5lCUtTVEtfRVNQKHRzaykJKCh0c2spID09IGN1cnJlbnQgPyByZHVzcCgpIDogKHRzayktPnRocmVhZC51c3ApCisKKyNkZWZpbmUgY3B1X3JlbGF4KCkgICAgZG8geyB9IHdoaWxlICgwKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9wdHJhY2UuaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9wdHJhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjViZDkwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L3B0cmFjZS5oCkBAIC0wLDAgKzEsOTEgQEAKKyNpZm5kZWYgX002OEtfUFRSQUNFX0gKKyNkZWZpbmUgX002OEtfUFRSQUNFX0gKKworI2RlZmluZSBQVF9EMQkgICAwCisjZGVmaW5lIFBUX0QyCSAgIDEKKyNkZWZpbmUgUFRfRDMJICAgMgorI2RlZmluZSBQVF9ENAkgICAzCisjZGVmaW5lIFBUX0Q1CSAgIDQKKyNkZWZpbmUgUFRfRDYJICAgNQorI2RlZmluZSBQVF9ENwkgICA2CisjZGVmaW5lIFBUX0EwCSAgIDcKKyNkZWZpbmUgUFRfQTEJICAgOAorI2RlZmluZSBQVF9BMgkgICA5CisjZGVmaW5lIFBUX0EzCSAgIDEwCisjZGVmaW5lIFBUX0E0CSAgIDExCisjZGVmaW5lIFBUX0E1CSAgIDEyCisjZGVmaW5lIFBUX0E2CSAgIDEzCisjZGVmaW5lIFBUX0QwCSAgIDE0CisjZGVmaW5lIFBUX1VTUAkgICAxNQorI2RlZmluZSBQVF9PUklHX0QwIDE2CisjZGVmaW5lIFBUX1NSCSAgIDE3CisjZGVmaW5lIFBUX1BDCSAgIDE4CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKy8qIHRoaXMgc3RydWN0IGRlZmluZXMgdGhlIHdheSB0aGUgcmVnaXN0ZXJzIGFyZSBzdG9yZWQgb24gdGhlCisgICBzdGFjayBkdXJpbmcgYSBzeXN0ZW0gY2FsbC4gKi8KKworc3RydWN0IHB0X3JlZ3MgeworICBsb25nICAgICBkMTsKKyAgbG9uZyAgICAgZDI7CisgIGxvbmcgICAgIGQzOworICBsb25nICAgICBkNDsKKyAgbG9uZyAgICAgZDU7CisgIGxvbmcgICAgIGEwOworICBsb25nICAgICBhMTsKKyAgbG9uZyAgICAgYTI7CisgIGxvbmcgICAgIGQwOworICBsb25nICAgICBvcmlnX2QwOworICBsb25nICAgICBzdGthZGo7CisjaWZkZWYgQ09ORklHX0NPTERGSVJFCisgIHVuc2lnbmVkIGZvcm1hdCA6ICA0OyAvKiBmcmFtZSBmb3JtYXQgc3BlY2lmaWVyICovCisgIHVuc2lnbmVkIHZlY3RvciA6IDEyOyAvKiB2ZWN0b3Igb2Zmc2V0ICovCisgIHVuc2lnbmVkIHNob3J0IHNyOworICB1bnNpZ25lZCBsb25nICBwYzsKKyNlbHNlCisgIHVuc2lnbmVkIHNob3J0IHNyOworICB1bnNpZ25lZCBsb25nICBwYzsKKyNpZm5kZWYgTk9fRk9STUFUX1ZFQworICB1bnNpZ25lZCBmb3JtYXQgOiAgNDsgLyogZnJhbWUgZm9ybWF0IHNwZWNpZmllciAqLworICB1bnNpZ25lZCB2ZWN0b3IgOiAxMjsgLyogdmVjdG9yIG9mZnNldCAqLworI2VuZGlmCisjZW5kaWYKK307CisKKy8qCisgKiBUaGlzIGlzIHRoZSBleHRlbmRlZCBzdGFjayB1c2VkIGJ5IHNpZ25hbCBoYW5kbGVycyBhbmQgdGhlIGNvbnRleHQKKyAqIHN3aXRjaGVyOiBpdCdzIHB1c2hlZCBhZnRlciB0aGUgbm9ybWFsICJzdHJ1Y3QgcHRfcmVncyIuCisgKi8KK3N0cnVjdCBzd2l0Y2hfc3RhY2sgeworCXVuc2lnbmVkIGxvbmcgIGQ2OworCXVuc2lnbmVkIGxvbmcgIGQ3OworCXVuc2lnbmVkIGxvbmcgIGEzOworCXVuc2lnbmVkIGxvbmcgIGE0OworCXVuc2lnbmVkIGxvbmcgIGE1OworCXVuc2lnbmVkIGxvbmcgIGE2OworCXVuc2lnbmVkIGxvbmcgIHJldHBjOworfTsKKworLyogQXJiaXRyYXJpbHkgY2hvb3NlIHRoZSBzYW1lIHB0cmFjZSBudW1iZXJzIGFzIHVzZWQgYnkgdGhlIFNwYXJjIGNvZGUuICovCisjZGVmaW5lIFBUUkFDRV9HRVRSRUdTICAgICAgICAgICAgMTIKKyNkZWZpbmUgUFRSQUNFX1NFVFJFR1MgICAgICAgICAgICAxMworI2lmZGVmIENPRk5JR19GUFUKKyNkZWZpbmUgUFRSQUNFX0dFVEZQUkVHUyAgICAgICAgICAxNAorI2RlZmluZSBQVFJBQ0VfU0VURlBSRUdTICAgICAgICAgIDE1CisjZW5kaWYKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2lmbmRlZiBQU19TCisjZGVmaW5lIFBTX1MgICgweDIwMDApCisjZGVmaW5lIFBTX00gICgweDEwMDApCisjZW5kaWYKKworI2RlZmluZSB1c2VyX21vZGUocmVncykgKCEoKHJlZ3MpLT5zciAmIFBTX1MpKQorI2RlZmluZSBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpICgocmVncyktPnBjKQorI2RlZmluZSBwcm9maWxlX3BjKHJlZ3MpIGluc3RydWN0aW9uX3BvaW50ZXIocmVncykKK2V4dGVybiB2b2lkIHNob3dfcmVncyhzdHJ1Y3QgcHRfcmVncyAqKTsKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisjZW5kaWYgLyogX002OEtfUFRSQUNFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9xdWljY19zaW1wbGUuaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9xdWljY19zaW1wbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzYzNjkzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L3F1aWNjX3NpbXBsZS5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogJElkOiBxdWljY19zaW1wbGUuaCx2IDEuMSAyMDAyLzAzLzAyIDE1OjAxOjEwIGdlcmcgRXhwICQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFNpbXBsZSBkcml2ZXJzIGNvbW1vbiBoZWFkZXIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisjaWZuZGVmIF9fU0lNUExFX0gKKyNkZWZpbmUgX19TSU1QTEVfSAorCisvKiAjaW5jbHVkZSAicXVpY2MuaCIgKi8KKworI2RlZmluZSBHTEJfU0NDXzAgICAwCisjZGVmaW5lIEdMQl9TQ0NfMSAgIDEKKyNkZWZpbmUgR0xCX1NDQ18yICAgMgorI2RlZmluZSBHTEJfU0NDXzMgICAzCisKK3R5cGVkZWYgdm9pZCAoaW50X3JvdXRpbmUpKHVuc2lnbmVkIHNob3J0IGludGVycnVwdF9ldmVudCk7Cit0eXBlZGVmIGludF9yb3V0aW5lICppbnRfcm91dGluZV9wdHI7IAordHlwZWRlZiB2b2lkICooYWxsb2Nfcm91dGluZSkoaW50IGxlbmd0aCk7Cit0eXBlZGVmIHZvaWQgKGZyZWVfcm91dGluZSkoaW50IHNjY19udW0sIGludCBjaGFubmVsX251bSwgdm9pZCAqYnVmKTsKK3R5cGVkZWYgdm9pZCAoc3RvcmVfcnhfYnVmZmVyX3JvdXRpbmUpKGludCBzY2NfbnVtLCBpbnQgY2hhbm5lbF9udW0sIHZvaWQgKmJ1ZmYsIGludCBsZW5ndGgpOwordHlwZWRlZiBpbnQgIChoYW5kbGVfdHhfZXJyb3Jfcm91dGluZSkoaW50IHNjY19udW0sIGludCBjaGFubmVsX251bSwgUVVJQ0NfQkQgKnRiZCk7Cit0eXBlZGVmIHZvaWQgKGhhbmRsZV9yeF9lcnJvcl9yb3V0aW5lKShpbnQgc2NjX251bSwgaW50IGNoYW5uZWxfbnVtLCBRVUlDQ19CRCAqcmJkKTsKK3R5cGVkZWYgdm9pZCAoaGFuZGxlX2xvc3RfZXJyb3Jfcm91dGluZSkoaW50IHNjY19udW0sIGludCBjaGFubmVsX251bSk7CisKKy8qIHVzZXIgZGVmaW5lZCBmdW5jdGlvbnMgZm9yIGdsb2JhbCBlcnJvcnMgKi8KK3R5cGVkZWYgdm9pZCAoaGFuZGxlX2dsb2Jfb3ZlcnJ1bl9yb3V0aW5lKShpbnQgc2NjX251bWJlcik7Cit0eXBlZGVmIHZvaWQgKGhhbmRsZV9nbG9iX3VuZGVycnVuX3JvdXRpbmUpKGludCBzY2NfbnVtYmVyKTsKK3R5cGVkZWYgdm9pZCAoZ2xvYl9pbnRyX3Ffb3ZlcmZsb3dfcm91dGluZSkoaW50IHNjY19udW1iZXIpOworCisvKgorICogR2VuZXJhbCBpbml0aWFsaXphdGlvbiBhbmQgY29tbWFuZCByb3V0aW5lcworICovCit2b2lkIHF1aWNjX2lzc3VlX2NtZCAodW5zaWduZWQgc2hvcnQgY21kLCBpbnQgc2NjX251bSk7Cit2b2lkIHF1aWNjX2luaXQodm9pZCk7Cit2b2lkIHF1aWNjX3NjY19pbml0KGludCBzY2NfbnVtYmVyLCBpbnQgbnVtYmVyX29mX3J4X2J1ZiwgaW50IG51bWJlcl9vZl90eF9idWYpOwordm9pZCBxdWljY19zbWNfaW5pdChpbnQgc21jX251bWJlciwgaW50IG51bWJlcl9vZl9yeF9idWYsIGludCBudW1iZXJfb2ZfdHhfYnVmKTsKK3ZvaWQgcXVpY2Nfc2NjX3N0YXJ0KGludCBzY2NfbnVtKTsKK3ZvaWQgcXVpY2Nfc2NjX2xvb3BiYWNrKGludCBzY2NfbnVtKTsKKworLyogSW50ZXJydXB0IGVuYWJsZS9kaXNhYmxlIHJvdXRpbmVzIGZvciBjcml0aWNhbCBwaWVjZXMgb2YgY29kZSovCit1bnNpZ25lZCBzaG9ydCAgSW50ckRpcyh2b2lkKTsKK3ZvaWQgICAgICAgICAgICBJbnRyRW5hKHVuc2lnbmVkIHNob3J0IG9sZF9zcik7CisKKy8qIEZvciBkZWJ1Z2dpbmcgKi8KK3ZvaWQgcHJpbnRfcmJkKGludCBzY2NfbnVtKTsKK3ZvaWQgcHJpbnRfdGJkKGludCBzY2NfbnVtKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvcmVzb3VyY2UuaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9yZXNvdXJjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmYTYzZDUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvcmVzb3VyY2UuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLW02OGsvcmVzb3VyY2UuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9zY2F0dGVybGlzdC5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L3NjYXR0ZXJsaXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMwYjhkNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9zY2F0dGVybGlzdC5oCkBAIC0wLDAgKzEsMTMgQEAKKyNpZm5kZWYgX002OEtOT01NVV9TQ0FUVEVSTElTVF9ICisjZGVmaW5lIF9NNjhLTk9NTVVfU0NBVFRFUkxJU1RfSAorCitzdHJ1Y3Qgc2NhdHRlcmxpc3QgeworCXN0cnVjdCBwYWdlCSpwYWdlOworCXVuc2lnbmVkIGludAlvZmZzZXQ7CisJZG1hX2FkZHJfdAlkbWFfYWRkcmVzczsKKwl1bnNpZ25lZCBpbnQJbGVuZ3RoOworfTsKKworI2RlZmluZSBJU0FfRE1BX1RIUkVTSE9MRAkoMHhmZmZmZmZmZikKKworI2VuZGlmIC8qICEoX002OEtOT01NVV9TQ0FUVEVSTElTVF9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L3NlY3Rpb25zLmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvc2VjdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDBlY2I5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L3NlY3Rpb25zLmgKQEAgLTAsMCArMSw3IEBACisjaWZuZGVmIF9NNjhLTk9NTVVfU0VDVElPTlNfSAorI2RlZmluZSBfTTY4S05PTU1VX1NFQ1RJT05TX0gKKworLyogbm90aGluZyB0byBzZWUsIG1vdmUgYWxvbmcgKi8KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zZWN0aW9ucy5oPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9zZWdtZW50LmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvc2VnbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyMzE4ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvc2VnbWVudC5oCkBAIC0wLDAgKzEsNTEgQEAKKyNpZm5kZWYgX002OEtfU0VHTUVOVF9ICisjZGVmaW5lIF9NNjhLX1NFR01FTlRfSAorCisvKiBkZWZpbmUgY29uc3RhbnRzICovCisvKiBBZGRyZXNzIHNwYWNlcyAoRkMwLUZDMikgKi8KKyNkZWZpbmUgVVNFUl9EQVRBICAgICAoMSkKKyNpZm5kZWYgX19VU0VSX0RTCisjZGVmaW5lIF9fVVNFUl9EUyAgICAgKFVTRVJfREFUQSkKKyNlbmRpZgorI2RlZmluZSBVU0VSX1BST0dSQU0gICgyKQorI2RlZmluZSBTVVBFUl9EQVRBICAgICg1KQorI2lmbmRlZiBfX0tFUk5FTF9EUworI2RlZmluZSBfX0tFUk5FTF9EUyAgIChTVVBFUl9EQVRBKQorI2VuZGlmCisjZGVmaW5lIFNVUEVSX1BST0dSQU0gKDYpCisjZGVmaW5lIENQVV9TUEFDRSAgICAgKDcpCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBsb25nIHNlZzsKK30gbW1fc2VnbWVudF90OworCisjZGVmaW5lIE1BS0VfTU1fU0VHKHMpCSgobW1fc2VnbWVudF90KSB7IChzKSB9KQorI2RlZmluZSBVU0VSX0RTCQlNQUtFX01NX1NFRyhfX1VTRVJfRFMpCisjZGVmaW5lIEtFUk5FTF9EUwlNQUtFX01NX1NFRyhfX0tFUk5FTF9EUykKKworLyoKKyAqIEdldC9zZXQgdGhlIFNGQy9ERkMgcmVnaXN0ZXJzIGZvciBNT1ZFUyBpbnN0cnVjdGlvbnMKKyAqLworCitzdGF0aWMgaW5saW5lIG1tX3NlZ21lbnRfdCBnZXRfZnModm9pZCkKK3sKKyAgICByZXR1cm4gVVNFUl9EUzsKK30KKworc3RhdGljIGlubGluZSBtbV9zZWdtZW50X3QgZ2V0X2RzKHZvaWQpCit7CisgICAgLyogcmV0dXJuIHRoZSBzdXBlcnZpc29yIGRhdGEgc3BhY2UgY29kZSAqLworICAgIHJldHVybiBLRVJORUxfRFM7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfZnMobW1fc2VnbWVudF90IHZhbCkKK3sKK30KKworI2RlZmluZSBzZWdtZW50X2VxKGEsYikJKChhKS5zZWcgPT0gKGIpLnNlZykKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYgLyogX002OEtfU0VHTUVOVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvc2VtYXBob3JlLWhlbHBlci5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L3NlbWFwaG9yZS1oZWxwZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjU4NjQxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L3NlbWFwaG9yZS1oZWxwZXIuaApAQCAtMCwwICsxLDgzIEBACisjaWZuZGVmIF9NNjhLX1NFTUFQSE9SRV9IRUxQRVJfSAorI2RlZmluZSBfTTY4S19TRU1BUEhPUkVfSEVMUEVSX0gKKworLyoKKyAqIFNNUC0gYW5kIGludGVycnVwdC1zYWZlIHNlbWFwaG9yZXMgaGVscGVyIGZ1bmN0aW9ucy4KKyAqCisgKiAoQykgQ29weXJpZ2h0IDE5OTYgTGludXMgVG9ydmFsZHMKKyAqCisgKiBtNjhrIHZlcnNpb24gYnkgQW5kcmVhcyBTY2h3YWIKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKy8qCisgKiBUaGVzZSB0d28gX211c3RfIGV4ZWN1dGUgYXRvbWljYWxseSB3cnQgZWFjaCBvdGhlci4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHdha2Vfb25lX21vcmUoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKK3sKKwlhdG9taWNfaW5jKCZzZW0tPndha2luZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHdha2luZ19ub25femVybyhzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCit7CisJaW50IHJldDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNlbWFwaG9yZV93YWtlX2xvY2ssIGZsYWdzKTsKKwlyZXQgPSAwOworCWlmIChhdG9taWNfcmVhZCgmc2VtLT53YWtpbmcpID4gMCkgeworCQlhdG9taWNfZGVjKCZzZW0tPndha2luZyk7CisJCXJldCA9IDE7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlbWFwaG9yZV93YWtlX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogd2FraW5nX25vbl96ZXJvX2ludGVycnVwdGlibGU6CisgKgkxCWdvdCB0aGUgbG9jaworICoJMAlnbyB0byBzbGVlcAorICoJLUVJTlRSCWludGVycnVwdGVkCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHdha2luZ19ub25femVyb19pbnRlcnJ1cHRpYmxlKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSwKKwkJCQkJCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCWludCByZXQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzZW1hcGhvcmVfd2FrZV9sb2NrLCBmbGFncyk7CisJcmV0ID0gMDsKKwlpZiAoYXRvbWljX3JlYWQoJnNlbS0+d2FraW5nKSA+IDApIHsKKwkJYXRvbWljX2RlYygmc2VtLT53YWtpbmcpOworCQlyZXQgPSAxOworCX0gZWxzZSBpZiAoc2lnbmFsX3BlbmRpbmcodHNrKSkgeworCQlhdG9taWNfaW5jKCZzZW0tPmNvdW50KTsKKwkJcmV0ID0gLUVJTlRSOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZW1hcGhvcmVfd2FrZV9sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIHdha2luZ19ub25femVyb190cnlsb2NrOgorICoJMQlmYWlsZWQgdG8gbG9jaworICoJMAlnb3QgdGhlIGxvY2sKKyAqLworc3RhdGljIGlubGluZSBpbnQgd2FraW5nX25vbl96ZXJvX3RyeWxvY2soc3RydWN0IHNlbWFwaG9yZSAqc2VtKQoreworCWludCByZXQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzZW1hcGhvcmVfd2FrZV9sb2NrLCBmbGFncyk7CisJcmV0ID0gMTsKKwlpZiAoYXRvbWljX3JlYWQoJnNlbS0+d2FraW5nKSA+IDApIHsKKwkJYXRvbWljX2RlYygmc2VtLT53YWtpbmcpOworCQlyZXQgPSAwOworCX0gZWxzZQorCQlhdG9taWNfaW5jKCZzZW0tPmNvdW50KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZW1hcGhvcmVfd2FrZV9sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJldDsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvc2VtYXBob3JlLmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvc2VtYXBob3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmViZTg1YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9zZW1hcGhvcmUuaApAQCAtMCwwICsxLDE1NyBAQAorI2lmbmRlZiBfTTY4S19TRU1BUEhPUkVfSAorI2RlZmluZSBfTTY4S19TRU1BUEhPUkVfSAorCisjZGVmaW5lIFJXX0xPQ0tfQklBUwkJIDB4MDEwMDAwMDAKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgorCisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKworLyoKKyAqIEludGVycnVwdC1zYWZlIHNlbWFwaG9yZXMuLgorICoKKyAqIChDKSBDb3B5cmlnaHQgMTk5NiBMaW51cyBUb3J2YWxkcworICoKKyAqIG02OGsgdmVyc2lvbiBieSBBbmRyZWFzIFNjaHdhYgorICovCisKKworc3RydWN0IHNlbWFwaG9yZSB7CisJYXRvbWljX3QgY291bnQ7CisJYXRvbWljX3Qgd2FraW5nOworCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7Cit9OworCisjZGVmaW5lIF9fU0VNQVBIT1JFX0lOSVRJQUxJWkVSKG5hbWUsIG4pCQkJCVwKK3sJCQkJCQkJCQlcCisJLmNvdW50CQk9IEFUT01JQ19JTklUKG4pLAkJCQlcCisJLndha2luZwkJPSBBVE9NSUNfSU5JVCgwKSwJCQkJXAorCS53YWl0CQk9IF9fV0FJVF9RVUVVRV9IRUFEX0lOSVRJQUxJWkVSKChuYW1lKS53YWl0KQlcCit9CisKKyNkZWZpbmUgX19NVVRFWF9JTklUSUFMSVpFUihuYW1lKSBcCisJX19TRU1BUEhPUkVfSU5JVElBTElaRVIobmFtZSwxKQorCisjZGVmaW5lIF9fREVDTEFSRV9TRU1BUEhPUkVfR0VORVJJQyhuYW1lLGNvdW50KSBcCisJc3RydWN0IHNlbWFwaG9yZSBuYW1lID0gX19TRU1BUEhPUkVfSU5JVElBTElaRVIobmFtZSxjb3VudCkKKworI2RlZmluZSBERUNMQVJFX01VVEVYKG5hbWUpIF9fREVDTEFSRV9TRU1BUEhPUkVfR0VORVJJQyhuYW1lLDEpCisjZGVmaW5lIERFQ0xBUkVfTVVURVhfTE9DS0VEKG5hbWUpIF9fREVDTEFSRV9TRU1BUEhPUkVfR0VORVJJQyhuYW1lLDApCisKK2V4dGVybiBpbmxpbmUgdm9pZCBzZW1hX2luaXQgKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSwgaW50IHZhbCkKK3sKKwkqc2VtID0gKHN0cnVjdCBzZW1hcGhvcmUpX19TRU1BUEhPUkVfSU5JVElBTElaRVIoKnNlbSwgdmFsKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGluaXRfTVVURVggKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKK3sKKwlzZW1hX2luaXQoc2VtLCAxKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGluaXRfTVVURVhfTE9DS0VEIChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCit7CisJc2VtYV9pbml0KHNlbSwgMCk7Cit9CisKK2FzbWxpbmthZ2Ugdm9pZCBfX2Rvd25fZmFpbGVkKHZvaWQgLyogc3BlY2lhbCByZWdpc3RlciBjYWxsaW5nIGNvbnZlbnRpb24gKi8pOworYXNtbGlua2FnZSBpbnQgIF9fZG93bl9mYWlsZWRfaW50ZXJydXB0aWJsZSh2b2lkICAvKiBwYXJhbXMgaW4gcmVnaXN0ZXJzICovKTsKK2FzbWxpbmthZ2UgaW50ICBfX2Rvd25fZmFpbGVkX3RyeWxvY2sodm9pZCAgLyogcGFyYW1zIGluIHJlZ2lzdGVycyAqLyk7Cithc21saW5rYWdlIHZvaWQgX191cF93YWtldXAodm9pZCAvKiBzcGVjaWFsIHJlZ2lzdGVyIGNhbGxpbmcgY29udmVudGlvbiAqLyk7CisKK2FzbWxpbmthZ2Ugdm9pZCBfX2Rvd24oc3RydWN0IHNlbWFwaG9yZSAqIHNlbSk7Cithc21saW5rYWdlIGludCAgX19kb3duX2ludGVycnVwdGlibGUoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSk7Cithc21saW5rYWdlIGludCAgX19kb3duX3RyeWxvY2soc3RydWN0IHNlbWFwaG9yZSAqIHNlbSk7Cithc21saW5rYWdlIHZvaWQgX191cChzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKTsKKworZXh0ZXJuIHNwaW5sb2NrX3Qgc2VtYXBob3JlX3dha2VfbG9jazsKKworLyoKKyAqIFRoaXMgaXMgdWdseSwgYnV0IHdlIHdhbnQgdGhlIGRlZmF1bHQgY2FzZSB0byBmYWxsIHRocm91Z2guCisgKiAiZG93bl9mYWlsZWQiIGlzIGEgc3BlY2lhbCBhc20gaGFuZGxlciB0aGF0IGNhbGxzIHRoZSBDCisgKiByb3V0aW5lIHRoYXQgYWN0dWFsbHkgd2FpdHMuIFNlZSBhcmNoL202OGsvbGliL3NlbWFwaG9yZS5TCisgKi8KK2V4dGVybiBpbmxpbmUgdm9pZCBkb3duKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCit7CisJbWlnaHRfc2xlZXAoKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJInwgYXRvbWljIGRvd24gb3BlcmF0aW9uXG5cdCIKKwkJIm1vdmVsCSUwLCAlJWExXG5cdCIKKwkJImxlYQklJXBjQCgxZiksICUlYTBcblx0IgorCQkic3VicWwJIzEsICUlYTFAXG5cdCIKKwkJImptaSBfX2Rvd25fZmFpbGVkXG4iCisJCSIxOiIKKwkJOiAvKiBubyBvdXRwdXRzICovCisJCTogImciIChzZW0pCisJCTogImNjIiwgIiVhMCIsICIlYTEiLCAibWVtb3J5Iik7Cit9CisKK2V4dGVybiBpbmxpbmUgaW50IGRvd25faW50ZXJydXB0aWJsZShzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQoreworCWludCByZXQ7CisKKwltaWdodF9zbGVlcCgpOworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkifCBhdG9taWMgZG93biBvcGVyYXRpb25cblx0IgorCQkibW92ZWwJJTEsICUlYTFcblx0IgorCQkibGVhCSUlcGNAKDFmKSwgJSVhMFxuXHQiCisJCSJzdWJxbAkjMSwgJSVhMUBcblx0IgorCQkiam1pIF9fZG93bl9mYWlsZWRfaW50ZXJydXB0aWJsZVxuXHQiCisJCSJjbHJsCSUlZDBcbiIKKwkJIjE6IG1vdmVsCSUlZDAsICUwXG4iCisJCTogIj1kIiAocmV0KQorCQk6ICJnIiAoc2VtKQorCQk6ICJjYyIsICIlZDAiLCAiJWEwIiwgIiVhMSIsICJtZW1vcnkiKTsKKwlyZXR1cm4ocmV0KTsKK30KKworZXh0ZXJuIGlubGluZSBpbnQgZG93bl90cnlsb2NrKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCit7CisJcmVnaXN0ZXIgc3RydWN0IHNlbWFwaG9yZSAqc2VtMSBfX2FzbV9fICgiJWExIikgPSBzZW07CisJcmVnaXN0ZXIgaW50IHJlc3VsdCBfX2FzbV9fICgiJWQwIik7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJInwgYXRvbWljIGRvd24gdHJ5bG9jayBvcGVyYXRpb25cblx0IgorCQkic3VicWwgIzEsJTFAXG5cdCIKKwkJImptaSAyZlxuXHQiCisJCSJjbHJsICUwXG4iCisJCSIxOlxuIgorCQkiLnNlY3Rpb24gLnRleHQubG9jayxcImF4XCJcbiIKKwkJIi5ldmVuXG4iCisJCSIyOlx0cGVhIDFiXG5cdCIKKwkJImpicmEgX19kb3duX2ZhaWxlZF90cnlsb2NrXG4iCisJCSIucHJldmlvdXMiCisJCTogIj1kIiAocmVzdWx0KQorCQk6ICJhIiAoc2VtMSkKKwkJOiAibWVtb3J5Iik7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIE5vdGUhIFRoaXMgaXMgc3VidGxlLiBXZSBqdW1wIHRvIHdha2UgcGVvcGxlIHVwIG9ubHkgaWYKKyAqIHRoZSBzZW1hcGhvcmUgd2FzIG5lZ2F0aXZlICg9PSBzb21lYm9keSB3YXMgd2FpdGluZyBvbiBpdCkuCisgKiBUaGUgZGVmYXVsdCBjYXNlIChubyBjb250ZW50aW9uKSB3aWxsIHJlc3VsdCBpbiBOTworICoganVtcHMgZm9yIGJvdGggZG93bigpIGFuZCB1cCgpLgorICovCitleHRlcm4gaW5saW5lIHZvaWQgdXAoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJInwgYXRvbWljIHVwIG9wZXJhdGlvblxuXHQiCisJCSJtb3ZlbAklMCwgJSVhMVxuXHQiCisJCSJsZWEJJSVwY0AoMWYpLCAlJWEwXG5cdCIKKwkJImFkZHFsCSMxLCAlJWExQFxuXHQiCisJCSJqbGUgX191cF93YWtldXBcbiIKKwkJIjE6IgorCQk6IC8qIG5vIG91dHB1dHMgKi8KKwkJOiAiZyIgKHNlbSkKKwkJOiAiY2MiLCAiJWEwIiwgIiVhMSIsICJtZW1vcnkiKTsKK30KKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9zZW1idWYuaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9zZW1idWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTYzNGY5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L3NlbWJ1Zi5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tbTY4ay9zZW1idWYuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9zZXR1cC5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L3NldHVwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJiMGZjYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9zZXR1cC5oCkBAIC0wLDAgKzEsNSBAQAorI2luY2x1ZGUgPGFzbS1tNjhrL3NldHVwLmg+CisKKy8qIFdlIGhhdmUgYSBiaWdnZXIgY29tbWFuZCBsaW5lIGJ1ZmZlci4gKi8KKyN1bmRlZiBDT01NQU5EX0xJTkVfU0laRQorI2RlZmluZSBDT01NQU5EX0xJTkVfU0laRQk1MTIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9zaG0uaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9zaG0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzhlNTIyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L3NobS5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tbTY4ay9zaG0uaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9zaG1idWYuaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9zaG1idWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzM0Y2Y4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L3NobWJ1Zi5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tbTY4ay9zaG1idWYuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9zaG1wYXJhbS5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L3NobXBhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdlZTY5NgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9zaG1wYXJhbS5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tbTY4ay9zaG1wYXJhbS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L3NpZ2NvbnRleHQuaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9zaWdjb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRiZjM2ZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9zaWdjb250ZXh0LmgKQEAgLTAsMCArMSwxNiBAQAorI2lmbmRlZiBfQVNNX002OEtOT01NVV9TSUdDT05URVhUX0gKKyNkZWZpbmUgX0FTTV9NNjhLTk9NTVVfU0lHQ09OVEVYVF9ICisKK3N0cnVjdCBzaWdjb250ZXh0IHsKKwl1bnNpZ25lZCBsb25nICBzY19tYXNrOyAJLyogb2xkIHNpZ21hc2sgKi8KKwl1bnNpZ25lZCBsb25nICBzY191c3A7CQkvKiBvbGQgdXNlciBzdGFjayBwb2ludGVyICovCisJdW5zaWduZWQgbG9uZyAgc2NfZDA7CisJdW5zaWduZWQgbG9uZyAgc2NfZDE7CisJdW5zaWduZWQgbG9uZyAgc2NfYTA7CisJdW5zaWduZWQgbG9uZyAgc2NfYTE7CisJdW5zaWduZWQgc2hvcnQgc2Nfc3I7CisJdW5zaWduZWQgbG9uZyAgc2NfcGM7CisJdW5zaWduZWQgc2hvcnQgc2NfZm9ybWF0dmVjOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvc2lnaW5mby5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L3NpZ2luZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMThlNWY0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L3NpZ2luZm8uaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX002OEtOT01NVV9TSUdJTkZPX0gKKyNkZWZpbmUgX002OEtOT01NVV9TSUdJTkZPX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NpZ2luZm8uaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvc2lnbmFsLmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvc2lnbmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg2Y2JiMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9zaWduYWwuaApAQCAtMCwwICsxLDE4MyBAQAorI2lmbmRlZiBfTTY4S05PTU1VX1NJR05BTF9ICisjZGVmaW5lIF9NNjhLTk9NTVVfU0lHTkFMX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qIEF2b2lkIHRvbyBtYW55IGhlYWRlciBvcmRlcmluZyBwcm9ibGVtcy4gICovCitzdHJ1Y3Qgc2lnaW5mbzsKKworI2lmZGVmIF9fS0VSTkVMX18KKy8qIE1vc3QgdGhpbmdzIHNob3VsZCBiZSBjbGVhbiBlbm91Z2ggdG8gcmVkZWZpbmUgdGhpcyBhdCB3aWxsLCBpZiBjYXJlCisgICBpcyB0YWtlbiB0byBtYWtlIGxpYmMgbWF0Y2guICAqLworCisjZGVmaW5lIF9OU0lHCQk2NAorI2RlZmluZSBfTlNJR19CUFcJMzIKKyNkZWZpbmUgX05TSUdfV09SRFMJKF9OU0lHIC8gX05TSUdfQlBXKQorCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgb2xkX3NpZ3NldF90OwkJLyogYXQgbGVhc3QgMzIgYml0cyAqLworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgbG9uZyBzaWdbX05TSUdfV09SRFNdOworfSBzaWdzZXRfdDsKKworI2Vsc2UKKy8qIEhlcmUgd2UgbXVzdCBjYXRlciB0byBsaWJjcyB0aGF0IHBva2UgYWJvdXQgaW4ga2VybmVsIGhlYWRlcnMuICAqLworCisjZGVmaW5lIE5TSUcJCTMyCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgc2lnc2V0X3Q7CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNkZWZpbmUgU0lHSFVQCQkgMQorI2RlZmluZSBTSUdJTlQJCSAyCisjZGVmaW5lIFNJR1FVSVQJCSAzCisjZGVmaW5lIFNJR0lMTAkJIDQKKyNkZWZpbmUgU0lHVFJBUAkJIDUKKyNkZWZpbmUgU0lHQUJSVAkJIDYKKyNkZWZpbmUgU0lHSU9UCQkgNgorI2RlZmluZSBTSUdCVVMJCSA3CisjZGVmaW5lIFNJR0ZQRQkJIDgKKyNkZWZpbmUgU0lHS0lMTAkJIDkKKyNkZWZpbmUgU0lHVVNSMQkJMTAKKyNkZWZpbmUgU0lHU0VHVgkJMTEKKyNkZWZpbmUgU0lHVVNSMgkJMTIKKyNkZWZpbmUgU0lHUElQRQkJMTMKKyNkZWZpbmUgU0lHQUxSTQkJMTQKKyNkZWZpbmUgU0lHVEVSTQkJMTUKKyNkZWZpbmUgU0lHU1RLRkxUCTE2CisjZGVmaW5lIFNJR0NITEQJCTE3CisjZGVmaW5lIFNJR0NPTlQJCTE4CisjZGVmaW5lIFNJR1NUT1AJCTE5CisjZGVmaW5lIFNJR1RTVFAJCTIwCisjZGVmaW5lIFNJR1RUSU4JCTIxCisjZGVmaW5lIFNJR1RUT1UJCTIyCisjZGVmaW5lIFNJR1VSRwkJMjMKKyNkZWZpbmUgU0lHWENQVQkJMjQKKyNkZWZpbmUgU0lHWEZTWgkJMjUKKyNkZWZpbmUgU0lHVlRBTFJNCTI2CisjZGVmaW5lIFNJR1BST0YJCTI3CisjZGVmaW5lIFNJR1dJTkNICTI4CisjZGVmaW5lIFNJR0lPCQkyOQorI2RlZmluZSBTSUdQT0xMCQlTSUdJTworLyoKKyNkZWZpbmUgU0lHTE9TVAkJMjkKKyovCisjZGVmaW5lIFNJR1BXUgkJMzAKKyNkZWZpbmUgU0lHU1lTCQkzMQorI2RlZmluZQlTSUdVTlVTRUQJMzEKKworLyogVGhlc2Ugc2hvdWxkIG5vdCBiZSBjb25zaWRlcmVkIGNvbnN0YW50cyBmcm9tIHVzZXJsYW5kLiAgKi8KKyNkZWZpbmUgU0lHUlRNSU4JMzIKKyNkZWZpbmUgU0lHUlRNQVgJX05TSUcKKworLyoKKyAqIFNBX0ZMQUdTIHZhbHVlczoKKyAqCisgKiBTQV9PTlNUQUNLIGluZGljYXRlcyB0aGF0IGEgcmVnaXN0ZXJlZCBzdGFja190IHdpbGwgYmUgdXNlZC4KKyAqIFNBX0lOVEVSUlVQVCBpcyBhIG5vLW9wLCBidXQgbGVmdCBkdWUgdG8gaGlzdG9yaWNhbCByZWFzb25zLiBVc2UgdGhlCisgKiBTQV9SRVNUQVJUIGZsYWcgdG8gZ2V0IHJlc3RhcnRpbmcgc2lnbmFscyAod2hpY2ggd2VyZSB0aGUgZGVmYXVsdCBsb25nIGFnbykKKyAqIFNBX05PQ0xEU1RPUCBmbGFnIHRvIHR1cm4gb2ZmIFNJR0NITEQgd2hlbiBjaGlsZHJlbiBzdG9wLgorICogU0FfUkVTRVRIQU5EIGNsZWFycyB0aGUgaGFuZGxlciB3aGVuIHRoZSBzaWduYWwgaXMgZGVsaXZlcmVkLgorICogU0FfTk9DTERXQUlUIGZsYWcgb24gU0lHQ0hMRCB0byBpbmhpYml0IHpvbWJpZXMuCisgKiBTQV9OT0RFRkVSIHByZXZlbnRzIHRoZSBjdXJyZW50IHNpZ25hbCBmcm9tIGJlaW5nIG1hc2tlZCBpbiB0aGUgaGFuZGxlci4KKyAqCisgKiBTQV9PTkVTSE9UIGFuZCBTQV9OT01BU0sgYXJlIHRoZSBoaXN0b3JpY2FsIExpbnV4IG5hbWVzIGZvciB0aGUgU2luZ2xlCisgKiBVbml4IG5hbWVzIFJFU0VUSEFORCBhbmQgTk9ERUZFUiByZXNwZWN0aXZlbHkuCisgKi8KKyNkZWZpbmUgU0FfTk9DTERTVE9QCTB4MDAwMDAwMDEKKyNkZWZpbmUgU0FfTk9DTERXQUlUCTB4MDAwMDAwMDIKKyNkZWZpbmUgU0FfU0lHSU5GTwkweDAwMDAwMDA0CisjZGVmaW5lIFNBX09OU1RBQ0sJMHgwODAwMDAwMAorI2RlZmluZSBTQV9SRVNUQVJUCTB4MTAwMDAwMDAKKyNkZWZpbmUgU0FfTk9ERUZFUgkweDQwMDAwMDAwCisjZGVmaW5lIFNBX1JFU0VUSEFORAkweDgwMDAwMDAwCisKKyNkZWZpbmUgU0FfTk9NQVNLCVNBX05PREVGRVIKKyNkZWZpbmUgU0FfT05FU0hPVAlTQV9SRVNFVEhBTkQKKyNkZWZpbmUgU0FfSU5URVJSVVBUCTB4MjAwMDAwMDAgLyogZHVtbXkgLS0gaWdub3JlZCAqLworCisvKiAKKyAqIHNpZ2FsdHN0YWNrIGNvbnRyb2xzCisgKi8KKyNkZWZpbmUgU1NfT05TVEFDSwkxCisjZGVmaW5lIFNTX0RJU0FCTEUJMgorCisjZGVmaW5lIE1JTlNJR1NUS1NaCTIwNDgKKyNkZWZpbmUgU0lHU1RLU1oJODE5MgorCisjaWZkZWYgX19LRVJORUxfXworLyoKKyAqIFRoZXNlIHZhbHVlcyBvZiBzYV9mbGFncyBhcmUgdXNlZCBvbmx5IGJ5IHRoZSBrZXJuZWwgYXMgcGFydCBvZiB0aGUKKyAqIGlycSBoYW5kbGluZyByb3V0aW5lcy4KKyAqCisgKiBTQV9JTlRFUlJVUFQgaXMgYWxzbyB1c2VkIGJ5IHRoZSBpcnEgaGFuZGxpbmcgcm91dGluZXMuCisgKiBTQV9TSElSUSBpcyBmb3Igc2hhcmVkIGludGVycnVwdCBzdXBwb3J0IG9uIFBDSSBhbmQgRUlTQS4KKyAqLworI2RlZmluZSBTQV9QUk9CRQkJU0FfT05FU0hPVAorI2RlZmluZSBTQV9TQU1QTEVfUkFORE9NCVNBX1JFU1RBUlQKKyNkZWZpbmUgU0FfU0hJUlEJCTB4MDQwMDAwMDAKKyNlbmRpZgorCisjZGVmaW5lIFNJR19CTE9DSyAgICAgICAgICAwCS8qIGZvciBibG9ja2luZyBzaWduYWxzICovCisjZGVmaW5lIFNJR19VTkJMT0NLICAgICAgICAxCS8qIGZvciB1bmJsb2NraW5nIHNpZ25hbHMgKi8KKyNkZWZpbmUgU0lHX1NFVE1BU0sgICAgICAgIDIJLyogZm9yIHNldHRpbmcgdGhlIHNpZ25hbCBtYXNrICovCisKKy8qIFR5cGUgb2YgYSBzaWduYWwgaGFuZGxlci4gICovCit0eXBlZGVmIHZvaWQgKCpfX3NpZ2hhbmRsZXJfdCkoaW50KTsKKworI2RlZmluZSBTSUdfREZMCSgoX19zaWdoYW5kbGVyX3QpMCkJLyogZGVmYXVsdCBzaWduYWwgaGFuZGxpbmcgKi8KKyNkZWZpbmUgU0lHX0lHTgkoKF9fc2lnaGFuZGxlcl90KTEpCS8qIGlnbm9yZSBzaWduYWwgKi8KKyNkZWZpbmUgU0lHX0VSUgkoKF9fc2lnaGFuZGxlcl90KS0xKQkvKiBlcnJvciByZXR1cm4gZnJvbSBzaWduYWwgKi8KKworI2lmZGVmIF9fS0VSTkVMX18KK3N0cnVjdCBvbGRfc2lnYWN0aW9uIHsKKwlfX3NpZ2hhbmRsZXJfdCBzYV9oYW5kbGVyOworCW9sZF9zaWdzZXRfdCBzYV9tYXNrOworCXVuc2lnbmVkIGxvbmcgc2FfZmxhZ3M7CisJdm9pZCAoKnNhX3Jlc3RvcmVyKSh2b2lkKTsKK307CisKK3N0cnVjdCBzaWdhY3Rpb24geworCV9fc2lnaGFuZGxlcl90IHNhX2hhbmRsZXI7CisJdW5zaWduZWQgbG9uZyBzYV9mbGFnczsKKwl2b2lkICgqc2FfcmVzdG9yZXIpKHZvaWQpOworCXNpZ3NldF90IHNhX21hc2s7CQkvKiBtYXNrIGxhc3QgZm9yIGV4dGVuc2liaWxpdHkgKi8KK307CisKK3N0cnVjdCBrX3NpZ2FjdGlvbiB7CisJc3RydWN0IHNpZ2FjdGlvbiBzYTsKK307CisjZWxzZQorLyogSGVyZSB3ZSBtdXN0IGNhdGVyIHRvIGxpYmNzIHRoYXQgcG9rZSBhYm91dCBpbiBrZXJuZWwgaGVhZGVycy4gICovCisKK3N0cnVjdCBzaWdhY3Rpb24geworCXVuaW9uIHsKKwkgIF9fc2lnaGFuZGxlcl90IF9zYV9oYW5kbGVyOworCSAgdm9pZCAoKl9zYV9zaWdhY3Rpb24pKGludCwgc3RydWN0IHNpZ2luZm8gKiwgdm9pZCAqKTsKKwl9IF91OworCXNpZ3NldF90IHNhX21hc2s7CisJdW5zaWduZWQgbG9uZyBzYV9mbGFnczsKKwl2b2lkICgqc2FfcmVzdG9yZXIpKHZvaWQpOworfTsKKworI2RlZmluZSBzYV9oYW5kbGVyCV91Ll9zYV9oYW5kbGVyCisjZGVmaW5lIHNhX3NpZ2FjdGlvbglfdS5fc2Ffc2lnYWN0aW9uCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKK3R5cGVkZWYgc3RydWN0IHNpZ2FsdHN0YWNrIHsKKwl2b2lkICpzc19zcDsKKwlpbnQgc3NfZmxhZ3M7CisJc2l6ZV90IHNzX3NpemU7Cit9IHN0YWNrX3Q7CisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxhc20vc2lnY29udGV4dC5oPgorI3VuZGVmIF9fSEFWRV9BUkNIX1NJR19CSVRPUFMKKworI2RlZmluZSBwdHJhY2Vfc2lnbmFsX2RlbGl2ZXIocmVncywgY29va2llKSBkbyB7IH0gd2hpbGUgKDApCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfTTY4S05PTU1VX1NJR05BTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvc21wLmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvc21wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU5YmQ3ZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9zbXAuaApAQCAtMCwwICsxIEBACisvKiBub3RoaW5nIHJlcXVpcmVkIGhlcmUgeWV0ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvc29ja2V0LmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvc29ja2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM1NDc4YgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9zb2NrZXQuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLW02OGsvc29ja2V0Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvc29ja2lvcy5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L3NvY2tpb3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2M2YTg5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L3NvY2tpb3MuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLW02OGsvc29ja2lvcy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L3NwaW5sb2NrLmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvc3BpbmxvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmIxZjA2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L3NwaW5sb2NrLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGFzbS1tNjhrL3NwaW5sb2NrLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvc3RhdC5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L3N0YXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDRiMjYwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L3N0YXQuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLW02OGsvc3RhdC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L3N0YXRmcy5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L3N0YXRmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjZTk5ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvc3RhdGZzLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGFzbS1tNjhrL3N0YXRmcy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L3N0cmluZy5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L3N0cmluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmMDllMTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvc3RyaW5nLmgKQEAgLTAsMCArMSwxMjYgQEAKKyNpZm5kZWYgX002OEtOT01NVV9TVFJJTkdfSF8KKyNkZWZpbmUgX002OEtOT01NVV9TVFJJTkdfSF8KKworI2lmZGVmIF9fS0VSTkVMX18gLyogb25seSBzZXQgdGhlc2UgdXAgZm9yIGtlcm5lbCBjb2RlICovCisKKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorCisjZGVmaW5lIF9fSEFWRV9BUkNIX1NUUkNQWQorc3RhdGljIGlubGluZSBjaGFyICogc3RyY3B5KGNoYXIgKiBkZXN0LGNvbnN0IGNoYXIgKnNyYykKK3sKKyAgY2hhciAqeGRlc3QgPSBkZXN0OworCisgIF9fYXNtX18gX192b2xhdGlsZV9fCisgICAgICAgKCIxOlx0bW92ZWIgJTFAKywlMEArXG5cdCIKKyAgICAgICAgImpuZSAxYiIKKwk6ICI9YSIgKGRlc3QpLCAiPWEiIChzcmMpCisgICAgICAgIDogIjAiIChkZXN0KSwgIjEiIChzcmMpIDogIm1lbW9yeSIpOworICByZXR1cm4geGRlc3Q7Cit9CisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSTkNQWQorc3RhdGljIGlubGluZSBjaGFyICogc3RybmNweShjaGFyICpkZXN0LCBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBuKQoreworICBjaGFyICp4ZGVzdCA9IGRlc3Q7CisKKyAgaWYgKG4gPT0gMCkKKyAgICByZXR1cm4geGRlc3Q7CisKKyAgX19hc21fXyBfX3ZvbGF0aWxlX18KKyAgICAgICAoIjE6XHRtb3ZlYiAlMUArLCUwQCtcblx0IgorCSJqZXEgMmZcblx0IgorICAgICAgICAic3VicWwgIzEsJTJcblx0IgorICAgICAgICAiam5lIDFiXG5cdCIKKyAgICAgICAgIjI6IgorICAgICAgICA6ICI9YSIgKGRlc3QpLCAiPWEiIChzcmMpLCAiPWQiIChuKQorICAgICAgICA6ICIwIiAoZGVzdCksICIxIiAoc3JjKSwgIjIiIChuKQorICAgICAgICA6ICJtZW1vcnkiKTsKKyAgcmV0dXJuIHhkZXN0OworfQorCisKKyNpZm5kZWYgQ09ORklHX0NPTERGSVJFCisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSQ01QCitzdGF0aWMgaW5saW5lIGludCBzdHJjbXAoY29uc3QgY2hhciAqIGNzLGNvbnN0IGNoYXIgKiBjdCkKK3sKKyAgY2hhciBfX3JlczsKKworICBfX2FzbV9fCisgICAgICAgKCIxOlx0bW92ZWIgJTBAKywlMlxuXHQiIC8qIGdldCAqY3MgKi8KKyAgICAgICAgImNtcGIgJTFAKywlMlxuXHQiICAgICAgLyogY29tcGFyZSBhIGJ5dGUgKi8KKyAgICAgICAgImpuZSAgMmZcblx0IiAgICAgICAgICAgLyogbm90IGVxdWFsLCBicmVhayBvdXQgKi8KKyAgICAgICAgInRzdGIgJTJcblx0IiAgICAgICAgICAgLyogYXQgZW5kIG9mIGNzPyAqLworICAgICAgICAiam5lICAxYlxuXHQiICAgICAgICAgICAvKiBubywga2VlcCBnb2luZyAqLworICAgICAgICAianJhICAzZlxuXHQiCQkvKiBzdHJpbmdzIGFyZSBlcXVhbCAqLworICAgICAgICAiMjpcdHN1YmIgJTFALSwlMlxuXHQiICAvKiAqY3MgLSAqY3QgKi8KKyAgICAgICAgIjM6IgorICAgICAgICA6ICI9YSIgKGNzKSwgIj1hIiAoY3QpLCAiPWQiIChfX3JlcykKKyAgICAgICAgOiAiMCIgKGNzKSwgIjEiIChjdCkpOworCisgIHJldHVybiBfX3JlczsKK30KKworI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJOQ01QCitzdGF0aWMgaW5saW5lIGludCBzdHJuY21wKGNvbnN0IGNoYXIgKiBjcyxjb25zdCBjaGFyICogY3Qsc2l6ZV90IGNvdW50KQoreworICBjaGFyIF9fcmVzOworCisgIGlmICghY291bnQpCisgICAgcmV0dXJuIDA7CisgIF9fYXNtX18KKyAgICAgICAoIjE6XHRtb3ZiICUwQCssJTNcblx0IiAgICAgICAgICAvKiBnZXQgKmNzICovCisgICAgICAgICJjbXBiICAgJTFAKywlM1xuXHQiICAgICAgICAgICAgLyogY29tcGFyZSBhIGJ5dGUgKi8KKyAgICAgICAgImpuZSAgICAzZlxuXHQiICAgICAgICAgICAgICAgICAvKiBub3QgZXF1YWwsIGJyZWFrIG91dCAqLworICAgICAgICAidHN0YiAgICUzXG5cdCIgICAgICAgICAgICAgICAgIC8qIGF0IGVuZCBvZiBjcz8gKi8KKyAgICAgICAgImplcSAgICA0ZlxuXHQiICAgICAgICAgICAgICAgICAvKiB5ZXMsIGFsbCBkb25lICovCisgICAgICAgICJzdWJxbCAgIzEsJTJcblx0IiAgICAgICAgICAgICAgLyogbm8sIGFkanVzdCBjb3VudCAqLworICAgICAgICAiam5lICAgIDFiXG5cdCIgICAgICAgICAgICAgICAgIC8qIG1vcmUgdG8gZG8sIGtlZXAgZ29pbmcgKi8KKyAgICAgICAgIjI6XHRtb3ZlcSAjMCwlM1xuXHQiICAgICAgICAgICAvKiBzdHJpbmdzIGFyZSBlcXVhbCAqLworICAgICAgICAianJhICAgIDRmXG5cdCIKKyAgICAgICAgIjM6XHRzdWJiICUxQC0sJTNcblx0IiAgICAgICAgICAvKiAqY3MgLSAqY3QgKi8KKyAgICAgICAgIjQ6IgorICAgICAgICA6ICI9YSIgKGNzKSwgIj1hIiAoY3QpLCAiPWQiIChjb3VudCksICI9ZCIgKF9fcmVzKQorICAgICAgICA6ICIwIiAoY3MpLCAiMSIgKGN0KSwgIjIiIChjb3VudCkpOworICByZXR1cm4gX19yZXM7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfQ09MREZJUkUgKi8KKworI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1TRVQKK2V4dGVybiB2b2lkICogbWVtc2V0KHZvaWQgKiBzLCBpbnQgYywgc2l6ZV90IGNvdW50KTsKKworI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1DUFkKK2V4dGVybiB2b2lkICogbWVtY3B5KHZvaWQgKmQsIGNvbnN0IHZvaWQgKnMsIHNpemVfdCBjb3VudCk7CisKKyNlbHNlIC8qIEtFUk5FTCAqLworCisvKgorICoJbGV0IHVzZXIgbGlicmFyaWVzIGRlYWwgd2l0aCB0aGVzZSwKKyAqCUlNSE8gdGhlIGtlcm5lbCBoYXMgbm8gcGxhY2UgZGVmaW5pbmcgdGhlc2UgZnVuY3Rpb25zIGZvciB1c2VyIGFwcHMKKyAqLworCisjZGVmaW5lIF9fSEFWRV9BUkNIX1NUUkNQWSAxCisjZGVmaW5lIF9fSEFWRV9BUkNIX1NUUk5DUFkgMQorI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJDQVQgMQorI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJOQ0FUIDEKKyNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSQ01QIDEKKyNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSTkNNUCAxCisjZGVmaW5lIF9fSEFWRV9BUkNIX1NUUk5JQ01QIDEKKyNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSQ0hSIDEKKyNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSUkNIUiAxCisjZGVmaW5lIF9fSEFWRV9BUkNIX1NUUlNUUiAxCisjZGVmaW5lIF9fSEFWRV9BUkNIX1NUUkxFTiAxCisjZGVmaW5lIF9fSEFWRV9BUkNIX1NUUk5MRU4gMQorI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1TRVQgMQorI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1DUFkgMQorI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1NT1ZFIDEKKyNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNU0NBTiAxCisjZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNNUCAxCisjZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNIUiAxCisjZGVmaW5lIF9fSEFWRV9BUkNIX1NUUlRPSyAxCisKKyNlbmRpZiAvKiBLRVJORUwgKi8KKworI2VuZGlmIC8qIF9NNjhLX1NUUklOR19IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L3N5c3RlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNDFiNjYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvc3lzdGVtLmgKQEAgLTAsMCArMSwyODYgQEAKKyNpZm5kZWYgX002OEtOT01NVV9TWVNURU1fSAorI2RlZmluZSBfTTY4S05PTU1VX1NZU1RFTV9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4gLyogZ2V0IGNvbmZpZ3VyYXRpb24gbWFjcm9zICovCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CisjaW5jbHVkZSA8YXNtL2VudHJ5Lmg+CisKKy8qCisgKiBzd2l0Y2hfdG8obikgc2hvdWxkIHN3aXRjaCB0YXNrcyB0byB0YXNrIHB0ciwgZmlyc3QgY2hlY2tpbmcgdGhhdAorICogcHRyIGlzbid0IHRoZSBjdXJyZW50IHRhc2ssIGluIHdoaWNoIGNhc2UgaXQgZG9lcyBub3RoaW5nLiAgVGhpcworICogYWxzbyBjbGVhcnMgdGhlIFRTLWZsYWcgaWYgdGhlIHRhc2sgd2Ugc3dpdGNoZWQgdG8gaGFzIHVzZWQgdGhlCisgKiBtYXRoIGNvLXByb2Nlc3NvciBsYXRlc3QuCisgKi8KKy8qCisgKiBzd2l0Y2hfdG8oKSBzYXZlcyB0aGUgZXh0cmEgcmVnaXN0ZXJzLCB0aGF0IGFyZSBub3Qgc2F2ZWQKKyAqIGF1dG9tYXRpY2FsbHkgYnkgU0FWRV9TV0lUQ0hfU1RBQ0sgaW4gcmVzdW1lKCksIGllLiBkMC1kNSBhbmQKKyAqIGEwLWExLiBTb21lIG9mIHRoZXNlIGFyZSB1c2VkIGJ5IHNjaGVkdWxlKCkgYW5kIGl0cyBwcmVkZWNlc3NvcnMKKyAqIGFuZCBzbyB3ZSBtaWdodCBnZXQgc2VlIHVuZXhwZWN0ZWQgYmVoYXZpb3JzIHdoZW4gYSB0YXNrIHJldHVybnMKKyAqIHdpdGggdW5leHBlY3RlZCByZWdpc3RlciB2YWx1ZXMuCisgKgorICogc3lzY2FsbCBzdG9yZXMgdGhlc2UgcmVnaXN0ZXJzIGl0c2VsZiBhbmQgbm9uZSBvZiB0aGVtIGFyZSB1c2VkCisgKiBieSBzeXNjYWxsIGFmdGVyIHRoZSBmdW5jdGlvbiBpbiB0aGUgc3lzY2FsbCBoYXMgYmVlbiBjYWxsZWQuCisgKgorICogQmV3YXJlIHRoYXQgcmVzdW1lIG5vdyBleHBlY3RzICpuZXh0IHRvIGJlIGluIGQxIGFuZCB0aGUgb2Zmc2V0IG9mCisgKiB0c3MgdG8gYmUgaW4gYTEuIFRoaXMgc2F2ZXMgYSBmZXcgaW5zdHJ1Y3Rpb25zIGFzIHdlIG5vIGxvbmdlciBoYXZlCisgKiB0byBwdXNoIHRoZW0gb250byB0aGUgc3RhY2sgYW5kIHJlYWQgdGhlbSBiYWNrIHJpZ2h0IGFmdGVyLgorICoKKyAqIDAyLzE3Lzk2IC0gSmVzIFNvcmVuc2VuIChqZHNAa29tLmF1Yy5kaykKKyAqCisgKiBDaGFuZ2VkIDk2LzA5LzE5IGJ5IEFuZHJlYXMgU2Nod2FiCisgKiBwYXNzIHByZXYgaW4gYTAsIG5leHQgaW4gYTEsIG9mZnNldCBvZiB0c3MgaW4gZDEsIGFuZCB3aGV0aGVyCisgKiB0aGUgbW0gc3RydWN0dXJlcyBhcmUgc2hhcmVkIGluIGQyICh0byBhdm9pZCBhdGMgZmx1c2hpbmcpLgorICovCithc21saW5rYWdlIHZvaWQgcmVzdW1lKHZvaWQpOworI2RlZmluZSBzd2l0Y2hfdG8ocHJldixuZXh0LGxhc3QpCQkJCVwKK3sJCQkJCQkJCVwKKyAgdm9pZCAqX2xhc3Q7CQkJCQkJCVwKKyAgX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAorICAJIm1vdmVsCSUxLCAlJWEwXG5cdCIJCQkJCVwKKwkibW92ZWwJJTIsICUlYTFcblx0IgkJCQkJXAorCSJqYnNyIHJlc3VtZVxuXHQiCQkJCQlcCisJIm1vdmVsCSUlZDEsICUwXG5cdCIJCQkJCVwKKyAgICAgICA6ICI9ZCIgKF9sYXN0KQkJCQkJCVwKKyAgICAgICA6ICJkIiAocHJldiksICJkIiAobmV4dCkJCQkJCVwKKyAgICAgICA6ICJjYyIsICJkMCIsICJkMSIsICJkMiIsICJkMyIsICJkNCIsICJkNSIsICJhMCIsICJhMSIpOwlcCisgIChsYXN0KSA9IF9sYXN0OwkJCQkJCVwKK30KKworI2lmZGVmIENPTkZJR19DT0xERklSRQorI2RlZmluZSBsb2NhbF9pcnFfZW5hYmxlKCkgX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJXAorCSJtb3ZlICUvc3IsJSVkMFxuXHQiCQkJCQlcCisJImFuZGkubCAjMHhmOGZmLCUlZDBcblx0IgkJCQlcCisJIm1vdmUgJSVkMCwlL3NyXG4iCQkJCQlcCisJOiAvKiBubyBvdXRwdXRzICovCQkJCQlcCisJOgkJCQkJCQlcCisgICAgICAgIDogImNjIiwgIiVkMCIsICJtZW1vcnkiKQorI2RlZmluZSBsb2NhbF9pcnFfZGlzYWJsZSgpIF9fYXNtX18gX192b2xhdGlsZV9fICgJCVwKKwkibW92ZSAlL3NyLCUlZDBcblx0IgkJCQkJXAorCSJvcmkubCAgIzB4MDcwMCwlJWQwXG5cdCIJCQkJXAorCSJtb3ZlICUlZDAsJS9zclxuIgkJCQkJXAorCTogLyogbm8gaW5wdXRzICovCQkJCQlcCisJOgkJCQkJCQlcCisJOiAiY2MiLCAiJWQwIiwgIm1lbW9yeSIpCisjZWxzZQorCisvKiBwb3J0YWJsZSB2ZXJzaW9uICovIC8qIEZJWE1FIC0gc2VlIGVudHJ5LmgqLworI2RlZmluZSBBTExPV0lOVCAweGY4ZmYKKworI2RlZmluZSBsb2NhbF9pcnFfZW5hYmxlKCkgYXNtIHZvbGF0aWxlICgiYW5kaXcgJTAsJSVzciI6IDogImkiIChBTExPV0lOVCkgOiAibWVtb3J5IikKKyNkZWZpbmUgbG9jYWxfaXJxX2Rpc2FibGUoKSBhc20gdm9sYXRpbGUgKCJvcml3ICAjMHgwNzAwLCUlc3IiOiA6IDogIm1lbW9yeSIpCisjZW5kaWYKKworI2RlZmluZSBsb2NhbF9zYXZlX2ZsYWdzKHgpIGFzbSB2b2xhdGlsZSAoIm1vdmV3ICUlc3IsJTAiOiI9ZCIgKHgpIDogOiAibWVtb3J5IikKKyNkZWZpbmUgbG9jYWxfaXJxX3Jlc3RvcmUoeCkgYXNtIHZvbGF0aWxlICgibW92ZXcgJTAsJSVzciI6IDoiZCIgKHgpIDogIm1lbW9yeSIpCisKKy8qIEZvciBzcGlubG9ja3MgZXRjICovCisjZGVmaW5lIGxvY2FsX2lycV9zYXZlKHgpIGRvIHsgbG9jYWxfc2F2ZV9mbGFncyh4KTsgbG9jYWxfaXJxX2Rpc2FibGUoKTsgfSB3aGlsZSAoMCkKKworI2RlZmluZQlpcnFzX2Rpc2FibGVkKCkJCQlcCisoewkJCQkJXAorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CQlcCisJbG9jYWxfc2F2ZV9mbGFncyhmbGFncyk7CVwKKwkoKGZsYWdzICYgMHgwNzAwKSA9PSAweDA3MDApOwlcCit9KQorCisjZGVmaW5lIGlyZXQoKSBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInJ0ZSI6IDogOiJtZW1vcnkiLCAic3AiLCAiY2MiKQorCisvKgorICogRm9yY2Ugc3RyaWN0IENQVSBvcmRlcmluZy4KKyAqIE5vdCByZWFsbHkgcmVxdWlyZWQgb24gbTY4ay4uLgorICovCisjZGVmaW5lIG5vcCgpICBhc20gdm9sYXRpbGUgKCJub3AiOjopCisjZGVmaW5lIG1iKCkgICBhc20gdm9sYXRpbGUgKCIiICAgOiA6IDoibWVtb3J5IikKKyNkZWZpbmUgcm1iKCkgIGFzbSB2b2xhdGlsZSAoIiIgICA6IDogOiJtZW1vcnkiKQorI2RlZmluZSB3bWIoKSAgYXNtIHZvbGF0aWxlICgiIiAgIDogOiA6Im1lbW9yeSIpCisjZGVmaW5lIHNldF9ybWIodmFyLCB2YWx1ZSkgICAgZG8geyB4Y2hnKCZ2YXIsIHZhbHVlKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgc2V0X21iKHZhciwgdmFsdWUpICAgICBzZXRfcm1iKHZhciwgdmFsdWUpCisjZGVmaW5lIHNldF93bWIodmFyLCB2YWx1ZSkgICAgZG8geyB2YXIgPSB2YWx1ZTsgd21iKCk7IH0gd2hpbGUgKDApCisKKyNpZmRlZiBDT05GSUdfU01QCisjZGVmaW5lIHNtcF9tYigpCW1iKCkKKyNkZWZpbmUgc21wX3JtYigpCXJtYigpCisjZGVmaW5lIHNtcF93bWIoKQl3bWIoKQorI2RlZmluZSBzbXBfcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQlyZWFkX2JhcnJpZXJfZGVwZW5kcygpCisjZWxzZQorI2RlZmluZSBzbXBfbWIoKQliYXJyaWVyKCkKKyNkZWZpbmUgc21wX3JtYigpCWJhcnJpZXIoKQorI2RlZmluZSBzbXBfd21iKCkJYmFycmllcigpCisjZGVmaW5lIHNtcF9yZWFkX2JhcnJpZXJfZGVwZW5kcygpCWRvIHsgfSB3aGlsZSgwKQorI2VuZGlmCisKKyNkZWZpbmUgeGNoZyhwdHIseCkgKChfX3R5cGVvZl9fKCoocHRyKSkpX194Y2hnKCh1bnNpZ25lZCBsb25nKSh4KSwocHRyKSxzaXplb2YoKihwdHIpKSkpCisjZGVmaW5lIHRhcyhwdHIpICh4Y2hnKChwdHIpLDEpKQorCitzdHJ1Y3QgX194Y2hnX2R1bW15IHsgdW5zaWduZWQgbG9uZyBhWzEwMF07IH07CisjZGVmaW5lIF9feGcoeCkgKCh2b2xhdGlsZSBzdHJ1Y3QgX194Y2hnX2R1bW15ICopKHgpKQorCisjaWZuZGVmIENPTkZJR19STVdfSU5TTlMKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX3hjaGcodW5zaWduZWQgbG9uZyB4LCB2b2xhdGlsZSB2b2lkICogcHRyLCBpbnQgc2l6ZSkKK3sKKyAgdW5zaWduZWQgbG9uZyB0bXAsIGZsYWdzOworCisgIGxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworICBzd2l0Y2ggKHNpemUpIHsKKyAgY2FzZSAxOgorICAgIF9fYXNtX18gX192b2xhdGlsZV9fCisgICAgKCJtb3ZlYiAlMiwlMFxuXHQiCisgICAgICJtb3ZlYiAlMSwlMiIKKyAgICA6ICI9JmQiICh0bXApIDogImQiICh4KSwgIm0iICgqX194ZyhwdHIpKSA6ICJtZW1vcnkiKTsKKyAgICBicmVhazsKKyAgY2FzZSAyOgorICAgIF9fYXNtX18gX192b2xhdGlsZV9fCisgICAgKCJtb3ZldyAlMiwlMFxuXHQiCisgICAgICJtb3ZldyAlMSwlMiIKKyAgICA6ICI9JmQiICh0bXApIDogImQiICh4KSwgIm0iICgqX194ZyhwdHIpKSA6ICJtZW1vcnkiKTsKKyAgICBicmVhazsKKyAgY2FzZSA0OgorICAgIF9fYXNtX18gX192b2xhdGlsZV9fCisgICAgKCJtb3ZlbCAlMiwlMFxuXHQiCisgICAgICJtb3ZlbCAlMSwlMiIKKyAgICA6ICI9JmQiICh0bXApIDogImQiICh4KSwgIm0iICgqX194ZyhwdHIpKSA6ICJtZW1vcnkiKTsKKyAgICBicmVhazsKKyAgfQorICBsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisgIHJldHVybiB0bXA7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9feGNoZyh1bnNpZ25lZCBsb25nIHgsIHZvbGF0aWxlIHZvaWQgKiBwdHIsIGludCBzaXplKQoreworCXN3aXRjaCAoc2l6ZSkgeworCSAgICBjYXNlIDE6CisJCV9fYXNtX18gX192b2xhdGlsZV9fCisJCQkoIm1vdmViICUyLCUwXG5cdCIKKwkJCSAiMTpcblx0IgorCQkJICJjYXNiICUwLCUxLCUyXG5cdCIKKwkJCSAiam5lIDFiIgorCQkJIDogIj0mZCIgKHgpIDogImQiICh4KSwgIm0iICgqX194ZyhwdHIpKSA6ICJtZW1vcnkiKTsKKwkJYnJlYWs7CisJICAgIGNhc2UgMjoKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18KKwkJCSgibW92ZXcgJTIsJTBcblx0IgorCQkJICIxOlxuXHQiCisJCQkgImNhc3cgJTAsJTEsJTJcblx0IgorCQkJICJqbmUgMWIiCisJCQkgOiAiPSZkIiAoeCkgOiAiZCIgKHgpLCAibSIgKCpfX3hnKHB0cikpIDogIm1lbW9yeSIpOworCQlicmVhazsKKwkgICAgY2FzZSA0OgorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXworCQkJKCJtb3ZlbCAlMiwlMFxuXHQiCisJCQkgIjE6XG5cdCIKKwkJCSAiY2FzbCAlMCwlMSwlMlxuXHQiCisJCQkgImpuZSAxYiIKKwkJCSA6ICI9JmQiICh4KSA6ICJkIiAoeCksICJtIiAoKl9feGcocHRyKSkgOiAibWVtb3J5Iik7CisJCWJyZWFrOworCX0KKwlyZXR1cm4geDsKK30KKyNlbmRpZgorCisvKgorICogQXRvbWljIGNvbXBhcmUgYW5kIGV4Y2hhbmdlLiAgQ29tcGFyZSBPTEQgd2l0aCBNRU0sIGlmIGlkZW50aWNhbCwKKyAqIHN0b3JlIE5FVyBpbiBNRU0uICBSZXR1cm4gdGhlIGluaXRpYWwgdmFsdWUgaW4gTUVNLiAgU3VjY2VzcyBpcworICogaW5kaWNhdGVkIGJ5IGNvbXBhcmluZyBSRVRVUk4gd2l0aCBPTEQuCisgKi8KKyNkZWZpbmUgX19IQVZFX0FSQ0hfQ01QWENIRwkxCisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcKK2NtcHhjaGcodm9sYXRpbGUgaW50ICpwLCBpbnQgb2xkLCBpbnQgbmV3KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHByZXY7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJaWYgKChwcmV2ID0gKnApID09IG9sZCkKKwkJKnAgPSBuZXc7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCXJldHVybihwcmV2KTsKK30KKworCisjaWZkZWYgQ09ORklHX002ODMzMgorI2RlZmluZSBIQVJEX1JFU0VUX05PVygpICh7CQlcCisgICAgICAgIGxvY2FsX2lycV9kaXNhYmxlKCk7CQlcCisgICAgICAgIGFzbSgiCQkJCVwKKwltb3ZldyAgICMweDAwMDAsIDB4ZmZmYTZhOwlcCisgICAgICAgIHJlc2V0OwkJCQlcCisgICAgICAgIC8qbW92ZXcgIzB4MTU1NywgMHhmZmZhNDQ7Ki8JXAorICAgICAgICAvKm1vdmV3ICMweDAxNTUsIDB4ZmZmYTQ2OyovCVwKKyAgICAgICAgbW92ZWFsICMwLCAlYTA7CQkJXAorICAgICAgICBtb3ZlYyAlYTAsICV2YnI7CQlcCisgICAgICAgIG1vdmVhbCAwLCAlc3A7CQkJXAorICAgICAgICBtb3ZlYWwgNCwgJWEwOwkJCVwKKyAgICAgICAgam1wICglYTApOwkJCVwKKyAgICAgICAgIik7CQkJCVwKK30pCisjZW5kaWYKKworI2lmIGRlZmluZWQoIENPTkZJR19NNjgzMjggKSB8fCBkZWZpbmVkKCBDT05GSUdfTTY4RVozMjggKSB8fCBcCisJZGVmaW5lZCAoQ09ORklHX002ODM2MCkgfHwgZGVmaW5lZCggQ09ORklHX002OFZaMzI4ICkKKyNkZWZpbmUgSEFSRF9SRVNFVF9OT1coKSAoewkJXAorICAgICAgICBsb2NhbF9pcnFfZGlzYWJsZSgpOwkJXAorICAgICAgICBhc20oIgkJCQlcCisgICAgICAgIG1vdmVhbCAjMHgxMGMwMDAwMCwgJWEwOwlcCisgICAgICAgIG1vdmViICMwLCAweEZGRkZGMzAwOwkJXAorICAgICAgICBtb3ZlYWwgMCglYTApLCAlc3A7CQlcCisgICAgICAgIG1vdmVhbCA0KCVhMCksICVhMDsJCVwKKyAgICAgICAgam1wICglYTApOwkJCVwKKyAgICAgICAgIik7CQkJCVwKK30pCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DT0xERklSRQorI2lmIGRlZmluZWQoQ09ORklHX001MjcyKSAmJiBkZWZpbmVkKENPTkZJR19ORVR0ZWwpCisvKgorICoJTmVlZCB0byBhY2NvdW50IGZvciBicm9rZW4gZWFybHkgbWFzayBvZiA1MjcyIHNpbGljb24uIFNvIGRvbid0CisgKglqdW1wIHRocm91Z2ggdGhlIG9yaWdpbmFsIHN0YXJ0IGFkZHJlc3MuIEp1bXAgc3RyYWl0IGludG8gdGhlCisgKglrbm93biBzdGFydCBvZiB0aGUgRkxBU0ggY29kZS4KKyAqLworI2RlZmluZSBIQVJEX1JFU0VUX05PVygpICh7CQlcCisgICAgICAgIGFzbSgiCQkJCVwKKwltb3ZldyAjMHgyNzAwLCAlc3I7CQlcCisgICAgICAgIGptcCAweGYwMDAwNDAwOwkJCVwKKyAgICAgICAgIik7CQkJCVwKK30pCisjZWxpZiBkZWZpbmVkKENPTkZJR19ORVR0ZWwpIHx8IGRlZmluZWQoQ09ORklHX2VMSUEpIHx8IGRlZmluZWQoQ09ORklHX0RJU0t0ZWwpIHx8IGRlZmluZWQoQ09ORklHX1NFQ1VSRUVER0VNUDMpIHx8IGRlZmluZWQoQ09ORklHX0NMRU9QQVRSQSkKKyNkZWZpbmUgSEFSRF9SRVNFVF9OT1coKSAoewkJXAorICAgICAgICBhc20oIgkJCQlcCisJbW92ZXcgIzB4MjcwMCwgJXNyOwkJXAorCW1vdmVhbCAjMHgxMDAwMDA0NCwgJWEwOwlcCisJbW92ZWwgIzB4ZmZmZmZmZmYsICglYTApOwlcCisJbW92ZWFsICMweDEwMDAwMDAxLCAlYTA7CVwKKwltb3ZlYiAjMHgwMCwgKCVhMCk7CQlcCisgICAgICAgIG1vdmVhbCAjMHhmMDAwMDAwNCwgJWEwOwlcCisgICAgICAgIG1vdmVhbCAoJWEwKSwgJWEwOwkJXAorICAgICAgICBqbXAgKCVhMCk7CQkJXAorICAgICAgICAiKTsJCQkJXAorfSkKKyNlbGlmIGRlZmluZWQoQ09ORklHX001Mjh4KQorLyoKKyAqIFRoZSBNQ0Y1Mjh4IGhhcyBhIGJpdCAoU09GVFJTVCkgaW4gbWVtb3J5IChSZXNldCBDb250cm9sIFJlZ2lzdGVyIFJDUiksCisgKiB0aGF0IHdoZW4gc2V0LCByZXNldHMgdGhlIE1DRjUyOHguCisgKi8KKyNkZWZpbmUgSEFSRF9SRVNFVF9OT1coKSBcCisoewkJCQkJCVwKKwl1bnNpZ25lZCBjaGFyIHZvbGF0aWxlICpyZXNldDsJCVwKKwlhc20oIm1vdmUudwkjMHgyNzAwLCAlc3IiKTsJCVwKKwlyZXNldCA9ICgodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoTUNGX0lQU0JBUiArIDB4MTEwMDAwKSk7CVwKKwl3aGlsZSgxKQkJCQlcCisJKnJlc2V0IHw9ICgweDAxIDw8IDcpO1wKK30pCisjZWxzZQorI2RlZmluZSBIQVJEX1JFU0VUX05PVygpICh7CQlcCisgICAgICAgIGFzbSgiCQkJCVwKKwltb3ZldyAjMHgyNzAwLCAlc3I7CQlcCisgICAgICAgIG1vdmVhbCAjMHg0LCAlYTA7CQlcCisgICAgICAgIG1vdmVhbCAoJWEwKSwgJWEwOwkJXAorICAgICAgICBqbXAgKCVhMCk7CQkJXAorICAgICAgICAiKTsJCQkJXAorfSkKKyNlbmRpZgorI2VuZGlmCisjZGVmaW5lIGFyY2hfYWxpZ25fc3RhY2soeCkgKHgpCisKKyNlbmRpZiAvKiBfTTY4S05PTU1VX1NZU1RFTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvdGVybWJpdHMuaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS90ZXJtYml0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1ZGQ2YmMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvdGVybWJpdHMuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLW02OGsvdGVybWJpdHMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS90ZXJtaW9zLmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvdGVybWlvcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3MzM3ODgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvdGVybWlvcy5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tbTY4ay90ZXJtaW9zLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvdGhyZWFkX2luZm8uaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS90aHJlYWRfaW5mby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4MTUzYjcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvdGhyZWFkX2luZm8uaApAQCAtMCwwICsxLDEwNiBAQAorLyogdGhyZWFkX2luZm8uaDogbTY4a25vbW11IGxvdy1sZXZlbCB0aHJlYWQgaW5mb3JtYXRpb24KKyAqIGFkYXB0ZWQgZnJvbSB0aGUgaTM4NiBhbmQgUFBDIHZlcnNpb25zIGJ5IEdyZWcgVW5nZXJlciAoZ2VyZ0BzbmFwZ2Vhci5jb20pCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAyICBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQorICogLSBJbmNvcnBvcmF0aW5nIHN1Z2dlc3Rpb25zIG1hZGUgYnkgTGludXMgVG9ydmFsZHMgYW5kIERhdmUgTWlsbGVyCisgKi8KKworI2lmbmRlZiBfQVNNX1RIUkVBRF9JTkZPX0gKKyNkZWZpbmUgX0FTTV9USFJFQURfSU5GT19ICisKKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorCisjaWZkZWYgX19LRVJORUxfXworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisvKgorICogU2l6ZSBvZiBrZXJuZWwgc3RhY2sgZm9yIGVhY2ggcHJvY2Vzcy4gVGhpcyBtdXN0IGJlIGEgcG93ZXIgb2YgMi4uLgorICovCisjaWZkZWYgQ09ORklHXzRLU1RBQ0tTCisjZGVmaW5lIFRIUkVBRF9TSVpFX09SREVSICgwKQorI2Vsc2UKKyNkZWZpbmUgVEhSRUFEX1NJWkVfT1JERVIgKDEpCisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisvKgorICogZm9yIGFzbSBmaWxlcywgVEhSRUFEX1NJWkUgaXMgbm93IGdlbmVyYXRlZCBieSBhc20tb2Zmc2V0cy5jCisgKi8KKyNkZWZpbmUgVEhSRUFEX1NJWkUgKFBBR0VfU0laRTw8VEhSRUFEX1NJWkVfT1JERVIpCisKKy8qCisgKiBsb3cgbGV2ZWwgdGFzayBkYXRhLgorICovCitzdHJ1Y3QgdGhyZWFkX2luZm8geworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsJCS8qIG1haW4gdGFzayBzdHJ1Y3R1cmUgKi8KKwlzdHJ1Y3QgZXhlY19kb21haW4gKmV4ZWNfZG9tYWluOwkvKiBleGVjdXRpb24gZG9tYWluICovCisJdW5zaWduZWQgbG9uZwkgICBmbGFnczsJCS8qIGxvdyBsZXZlbCBmbGFncyAqLworCWludAkJICAgY3B1OwkJCS8qIGNwdSB3ZSdyZSBvbiAqLworCWludAkJICAgcHJlZW1wdF9jb3VudDsJLyogMCA9PiBwcmVlbXB0YWJsZSwgPDAgPT4gQlVHKi8KKwlzdHJ1Y3QgcmVzdGFydF9ibG9jayByZXN0YXJ0X2Jsb2NrOworfTsKKworLyoKKyAqIG1hY3Jvcy9mdW5jdGlvbnMgZm9yIGdhaW5pbmcgYWNjZXNzIHRvIHRoZSB0aHJlYWQgaW5mb3JtYXRpb24gc3RydWN0dXJlCisgKi8KKyNkZWZpbmUgSU5JVF9USFJFQURfSU5GTyh0c2spCQkJXAorewkJCQkJCVwKKwkudGFzawkJPSAmdHNrLAkJCVwKKwkuZXhlY19kb21haW4JPSAmZGVmYXVsdF9leGVjX2RvbWFpbiwJXAorCS5mbGFncwkJPSAwLAkJCVwKKwkuY3B1CQk9IDAsCQkJXAorCS5yZXN0YXJ0X2Jsb2NrCT0gewkJCVwKKwkJLmZuID0gZG9fbm9fcmVzdGFydF9zeXNjYWxsLAlcCisJfSwJCQkJCVwKK30KKworI2RlZmluZSBpbml0X3RocmVhZF9pbmZvCShpbml0X3RocmVhZF91bmlvbi50aHJlYWRfaW5mbykKKyNkZWZpbmUgaW5pdF9zdGFjawkJKGluaXRfdGhyZWFkX3VuaW9uLnN0YWNrKQorCisKKy8qIGhvdyB0byBnZXQgdGhlIHRocmVhZCBpbmZvcm1hdGlvbiBzdHJ1Y3QgZnJvbSBDICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCB0aHJlYWRfaW5mbyAqY3VycmVudF90aHJlYWRfaW5mbyh2b2lkKQoreworCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGk7CisJX19hc21fXygKKwkJIm1vdmUubAklJXNwLCAlMCBcblx0IgorCQkiYW5kLmwJJTEsICUwIgorCQk6ICI9JmQiKHRpKQorCQk6ICJkaSIgKH4oVEhSRUFEX1NJWkUtMSkpCisJCSk7CisJcmV0dXJuIHRpOworfQorCisvKiB0aHJlYWQgaW5mb3JtYXRpb24gYWxsb2NhdGlvbiAqLworI2RlZmluZSBhbGxvY190aHJlYWRfaW5mbyh0c2spICgoc3RydWN0IHRocmVhZF9pbmZvICopIFwKKwkJCQlfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwsIFRIUkVBRF9TSVpFX09SREVSKSkKKyNkZWZpbmUgZnJlZV90aHJlYWRfaW5mbyh0aSkJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZykgKHRpKSwgVEhSRUFEX1NJWkVfT1JERVIpCisjZGVmaW5lIGdldF90aHJlYWRfaW5mbyh0aSkJZ2V0X3Rhc2tfc3RydWN0KCh0aSktPnRhc2spCisjZGVmaW5lIHB1dF90aHJlYWRfaW5mbyh0aSkJcHV0X3Rhc2tfc3RydWN0KCh0aSktPnRhc2spCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKyNkZWZpbmUJUFJFRU1QVF9BQ1RJVkUJMHg0MDAwMDAwCisKKy8qCisgKiB0aHJlYWQgaW5mb3JtYXRpb24gZmxhZyBiaXQgbnVtYmVycworICovCisjZGVmaW5lIFRJRl9TWVNDQUxMX1RSQUNFCTAJLyogc3lzY2FsbCB0cmFjZSBhY3RpdmUgKi8KKyNkZWZpbmUgVElGX05PVElGWV9SRVNVTUUJMQkvKiByZXN1bXB0aW9uIG5vdGlmaWNhdGlvbiByZXF1ZXN0ZWQgKi8KKyNkZWZpbmUgVElGX1NJR1BFTkRJTkcJCTIJLyogc2lnbmFsIHBlbmRpbmcgKi8KKyNkZWZpbmUgVElGX05FRURfUkVTQ0hFRAkzCS8qIHJlc2NoZWR1bGluZyBuZWNlc3NhcnkgKi8KKyNkZWZpbmUgVElGX1BPTExJTkdfTlJGTEFHCTQJLyogdHJ1ZSBpZiBwb2xsX2lkbGUoKSBpcyBwb2xsaW5nCisJCQkJCSAgIFRJRl9ORUVEX1JFU0NIRUQgKi8KKyNkZWZpbmUgVElGX01FTURJRQkJNQorCisvKiBhcyBhYm92ZSwgYnV0IGFzIGJpdCB2YWx1ZXMgKi8KKyNkZWZpbmUgX1RJRl9TWVNDQUxMX1RSQUNFCSgxPDxUSUZfU1lTQ0FMTF9UUkFDRSkKKyNkZWZpbmUgX1RJRl9OT1RJRllfUkVTVU1FCSgxPDxUSUZfTk9USUZZX1JFU1VNRSkKKyNkZWZpbmUgX1RJRl9TSUdQRU5ESU5HCQkoMTw8VElGX1NJR1BFTkRJTkcpCisjZGVmaW5lIF9USUZfTkVFRF9SRVNDSEVECSgxPDxUSUZfTkVFRF9SRVNDSEVEKQorI2RlZmluZSBfVElGX1BPTExJTkdfTlJGTEFHCSgxPDxUSUZfUE9MTElOR19OUkZMQUcpCisKKyNkZWZpbmUgX1RJRl9XT1JLX01BU0sJCTB4MDAwMEZGRkUJLyogd29yayB0byBkbyBvbiBpbnRlcnJ1cHQvZXhjZXB0aW9uIHJldHVybiAqLworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX0FTTV9USFJFQURfSU5GT19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvdGltZXguaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS90aW1leC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1MDY5OTkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvdGltZXguaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLW02OGsvdGltZXguaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS90bGIuaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS90bGIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2E3YzUxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L3RsYi5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tbTY4ay90bGIuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS90bGJmbHVzaC5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L3RsYmZsdXNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY3MDA0ZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS90bGJmbHVzaC5oCkBAIC0wLDAgKzEsNjEgQEAKKyNpZm5kZWYgX002OEtOT01NVV9UTEJGTFVTSF9ICisjZGVmaW5lIF9NNjhLTk9NTVVfVExCRkxVU0hfSAorCisvKgorICogQ29weXJpZ2h0IChDKSAyMDAwIExpbmVvLCBEYXZpZCBNY0N1bGxvdWdoIDxkYXZpZG1AdWNsaW51eC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMiwgR3JlZyBVbmdlcmVyIDxnZXJnQHNuYXBnZWFyLmNvbT4KKyAqLworCisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisKKy8qCisgKiBmbHVzaCBhbGwgdXNlci1zcGFjZSBhdGMgZW50cmllcy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIF9fZmx1c2hfdGxiKHZvaWQpCit7CisJQlVHKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2ZsdXNoX3RsYl9vbmUodW5zaWduZWQgbG9uZyBhZGRyKQoreworCUJVRygpOworfQorCisjZGVmaW5lIGZsdXNoX3RsYigpIF9fZmx1c2hfdGxiKCkKKworLyoKKyAqIGZsdXNoIGFsbCBhdGMgZW50cmllcyAoYm90aCBrZXJuZWwgYW5kIHVzZXItc3BhY2UgZW50cmllcykuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfYWxsKHZvaWQpCit7CisJQlVHKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJQlVHKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCUJVRygpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCUJVRygpOworfQorCitleHRlcm4gaW5saW5lIHZvaWQgZmx1c2hfdGxiX2tlcm5lbF9wYWdlKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlCVUcoKTsKK30KKworZXh0ZXJuIGlubGluZSB2b2lkIGZsdXNoX3RsYl9wZ3RhYmxlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwlCVUcoKTsKK30KKworI2VuZGlmIC8qIF9NNjhLTk9NTVVfVExCRkxVU0hfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L3RvcG9sb2d5LmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvdG9wb2xvZ3kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTE3M2U5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L3RvcG9sb2d5LmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9BU01fTTY4S19UT1BPTE9HWV9ICisjZGVmaW5lIF9BU01fTTY4S19UT1BPTE9HWV9ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy90b3BvbG9neS5oPgorCisjZW5kaWYgLyogX0FTTV9NNjhLX1RPUE9MT0dZX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS90cmFwcy5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L3RyYXBzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJhODEzMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS90cmFwcy5oCkBAIC0wLDAgKzEsMTUwIEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtL3RyYXBzLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTkzICAgICAgICBIYW1pc2ggTWFjZG9uYWxkCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX002OEtOT01NVV9UUkFQU19ICisjZGVmaW5lIF9NNjhLTk9NTVVfVFJBUFNfSAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCit0eXBlZGVmIHZvaWQgKCplX3ZlY3Rvcikodm9pZCk7CisKK2V4dGVybiBlX3ZlY3RvciB2ZWN0b3JzW107CisKKyNlbmRpZgorCisjZGVmaW5lIFZFQ19CVVNFUlIgICgyKQorI2RlZmluZSBWRUNfQUREUkVSUiAoMykKKyNkZWZpbmUgVkVDX0lMTEVHQUwgKDQpCisjZGVmaW5lIFZFQ19aRVJPRElWICg1KQorI2RlZmluZSBWRUNfQ0hLICAgICAoNikKKyNkZWZpbmUgVkVDX1RSQVAgICAgKDcpCisjZGVmaW5lIFZFQ19QUklWICAgICg4KQorI2RlZmluZSBWRUNfVFJBQ0UgICAoOSkKKyNkZWZpbmUgVkVDX0xJTkUxMCAgKDEwKQorI2RlZmluZSBWRUNfTElORTExICAoMTEpCisjZGVmaW5lIFZFQ19SRVNWMSAgICgxMikKKyNkZWZpbmUgVkVDX0NPUFJPQyAgKDEzKQorI2RlZmluZSBWRUNfRk9STUFUICAoMTQpCisjZGVmaW5lIFZFQ19VTklOVCAgICgxNSkKKyNkZWZpbmUgVkVDX1NQVVIgICAgKDI0KQorI2RlZmluZSBWRUNfSU5UMSAgICAoMjUpCisjZGVmaW5lIFZFQ19JTlQyICAgICgyNikKKyNkZWZpbmUgVkVDX0lOVDMgICAgKDI3KQorI2RlZmluZSBWRUNfSU5UNCAgICAoMjgpCisjZGVmaW5lIFZFQ19JTlQ1ICAgICgyOSkKKyNkZWZpbmUgVkVDX0lOVDYgICAgKDMwKQorI2RlZmluZSBWRUNfSU5UNyAgICAoMzEpCisjZGVmaW5lIFZFQ19TWVMgICAgICgzMikKKyNkZWZpbmUgVkVDX1RSQVAxICAgKDMzKQorI2RlZmluZSBWRUNfVFJBUDIgICAoMzQpCisjZGVmaW5lIFZFQ19UUkFQMyAgICgzNSkKKyNkZWZpbmUgVkVDX1RSQVA0ICAgKDM2KQorI2RlZmluZSBWRUNfVFJBUDUgICAoMzcpCisjZGVmaW5lIFZFQ19UUkFQNiAgICgzOCkKKyNkZWZpbmUgVkVDX1RSQVA3ICAgKDM5KQorI2RlZmluZSBWRUNfVFJBUDggICAoNDApCisjZGVmaW5lIFZFQ19UUkFQOSAgICg0MSkKKyNkZWZpbmUgVkVDX1RSQVAxMCAgKDQyKQorI2RlZmluZSBWRUNfVFJBUDExICAoNDMpCisjZGVmaW5lIFZFQ19UUkFQMTIgICg0NCkKKyNkZWZpbmUgVkVDX1RSQVAxMyAgKDQ1KQorI2RlZmluZSBWRUNfVFJBUDE0ICAoNDYpCisjZGVmaW5lIFZFQ19UUkFQMTUgICg0NykKKyNkZWZpbmUgVkVDX0ZQQlJVQyAgKDQ4KQorI2RlZmluZSBWRUNfRlBJUiAgICAoNDkpCisjZGVmaW5lIFZFQ19GUERJVlogICg1MCkKKyNkZWZpbmUgVkVDX0ZQVU5ERVIgKDUxKQorI2RlZmluZSBWRUNfRlBPRSAgICAoNTIpCisjZGVmaW5lIFZFQ19GUE9WRVIgICg1MykKKyNkZWZpbmUgVkVDX0ZQTkFOICAgKDU0KQorI2RlZmluZSBWRUNfRlBVTlNVUCAoNTUpCisjZGVmaW5lCVZFQ19VTklNUEVBICg2MCkKKyNkZWZpbmUJVkVDX1VOSU1QSUkgKDYxKQorI2RlZmluZSBWRUNfVVNFUiAgICAoNjQpCisKKyNkZWZpbmUgVkVDT0ZGKHZlYykgKCh2ZWMpPDwyKQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisvKiBTdGF0dXMgcmVnaXN0ZXIgYml0cyAqLworI2RlZmluZSBQU19UICAoMHg4MDAwKQorI2RlZmluZSBQU19TICAoMHgyMDAwKQorI2RlZmluZSBQU19NICAoMHgxMDAwKQorI2RlZmluZSBQU19DICAoMHgwMDAxKQorCisvKiBzdHJ1Y3R1cmUgZm9yIHN0YWNrIGZyYW1lcyAqLworCitzdHJ1Y3QgZnJhbWUgeworICAgIHN0cnVjdCBwdF9yZWdzIHB0cmVnczsKKyAgICB1bmlvbiB7CisJICAgIHN0cnVjdCB7CisJCSAgICB1bnNpZ25lZCBsb25nICBpYWRkcjsgICAgLyogaW5zdHJ1Y3Rpb24gYWRkcmVzcyAqLworCSAgICB9IGZtdDI7CisJICAgIHN0cnVjdCB7CisJCSAgICB1bnNpZ25lZCBsb25nICBlZmZhZGRyOyAgLyogZWZmZWN0aXZlIGFkZHJlc3MgKi8KKwkgICAgfSBmbXQzOworCSAgICBzdHJ1Y3QgeworCQkgICAgdW5zaWduZWQgbG9uZyAgZWZmYWRkcjsgIC8qIGVmZmVjdGl2ZSBhZGRyZXNzICovCisJCSAgICB1bnNpZ25lZCBsb25nICBwYzsJICAgICAvKiBwYyBvZiBmYXVsdGVkIGluc3RyICovCisJICAgIH0gZm10NDsKKwkgICAgc3RydWN0IHsKKwkJICAgIHVuc2lnbmVkIGxvbmcgIGVmZmFkZHI7ICAvKiBlZmZlY3RpdmUgYWRkcmVzcyAqLworCQkgICAgdW5zaWduZWQgc2hvcnQgc3N3OyAgICAgIC8qIHNwZWNpYWwgc3RhdHVzIHdvcmQgKi8KKwkJICAgIHVuc2lnbmVkIHNob3J0IHdiM3M7ICAgICAvKiB3cml0ZSBiYWNrIDMgc3RhdHVzICovCisJCSAgICB1bnNpZ25lZCBzaG9ydCB3YjJzOyAgICAgLyogd3JpdGUgYmFjayAyIHN0YXR1cyAqLworCQkgICAgdW5zaWduZWQgc2hvcnQgd2IxczsgICAgIC8qIHdyaXRlIGJhY2sgMSBzdGF0dXMgKi8KKwkJICAgIHVuc2lnbmVkIGxvbmcgIGZhZGRyOyAgICAvKiBmYXVsdCBhZGRyZXNzICovCisJCSAgICB1bnNpZ25lZCBsb25nICB3YjNhOyAgICAgLyogd3JpdGUgYmFjayAzIGFkZHJlc3MgKi8KKwkJICAgIHVuc2lnbmVkIGxvbmcgIHdiM2Q7ICAgICAvKiB3cml0ZSBiYWNrIDMgZGF0YSAqLworCQkgICAgdW5zaWduZWQgbG9uZyAgd2IyYTsgICAgIC8qIHdyaXRlIGJhY2sgMiBhZGRyZXNzICovCisJCSAgICB1bnNpZ25lZCBsb25nICB3YjJkOyAgICAgLyogd3JpdGUgYmFjayAyIGRhdGEgKi8KKwkJICAgIHVuc2lnbmVkIGxvbmcgIHdiMWE7ICAgICAvKiB3cml0ZSBiYWNrIDEgYWRkcmVzcyAqLworCQkgICAgdW5zaWduZWQgbG9uZyAgd2IxZHBkMDsgIC8qIHdyaXRlIGJhY2sgMSBkYXRhL3B1c2ggZGF0YSAwKi8KKwkJICAgIHVuc2lnbmVkIGxvbmcgIHBkMTsgICAgICAvKiBwdXNoIGRhdGEgMSovCisJCSAgICB1bnNpZ25lZCBsb25nICBwZDI7ICAgICAgLyogcHVzaCBkYXRhIDIqLworCQkgICAgdW5zaWduZWQgbG9uZyAgcGQzOyAgICAgIC8qIHB1c2ggZGF0YSAzKi8KKwkgICAgfSBmbXQ3OworCSAgICBzdHJ1Y3QgeworCQkgICAgdW5zaWduZWQgbG9uZyAgaWFkZHI7ICAgIC8qIGluc3RydWN0aW9uIGFkZHJlc3MgKi8KKwkJICAgIHVuc2lnbmVkIHNob3J0IGludDFbNF07ICAvKiBpbnRlcm5hbCByZWdpc3RlcnMgKi8KKwkgICAgfSBmbXQ5OworCSAgICBzdHJ1Y3QgeworCQkgICAgdW5zaWduZWQgc2hvcnQgaW50MTsKKwkJICAgIHVuc2lnbmVkIHNob3J0IHNzdzsgICAgICAvKiBzcGVjaWFsIHN0YXR1cyB3b3JkICovCisJCSAgICB1bnNpZ25lZCBzaG9ydCBpc2M7ICAgICAgLyogaW5zdHJ1Y3Rpb24gc3RhZ2UgYyAqLworCQkgICAgdW5zaWduZWQgc2hvcnQgaXNiOyAgICAgIC8qIGluc3RydWN0aW9uIHN0YWdlIGIgKi8KKwkJICAgIHVuc2lnbmVkIGxvbmcgIGRhZGRyOyAgICAvKiBkYXRhIGN5Y2xlIGZhdWx0IGFkZHJlc3MgKi8KKwkJICAgIHVuc2lnbmVkIHNob3J0IGludDJbMl07CisJCSAgICB1bnNpZ25lZCBsb25nICBkb2J1ZjsgICAgLyogZGF0YSBjeWNsZSBvdXRwdXQgYnVmZmVyICovCisJCSAgICB1bnNpZ25lZCBzaG9ydCBpbnQzWzJdOworCSAgICB9IGZtdGE7CisJICAgIHN0cnVjdCB7CisJCSAgICB1bnNpZ25lZCBzaG9ydCBpbnQxOworCQkgICAgdW5zaWduZWQgc2hvcnQgc3N3OyAgICAgLyogc3BlY2lhbCBzdGF0dXMgd29yZCAqLworCQkgICAgdW5zaWduZWQgc2hvcnQgaXNjOyAgICAgLyogaW5zdHJ1Y3Rpb24gc3RhZ2UgYyAqLworCQkgICAgdW5zaWduZWQgc2hvcnQgaXNiOyAgICAgLyogaW5zdHJ1Y3Rpb24gc3RhZ2UgYiAqLworCQkgICAgdW5zaWduZWQgbG9uZyAgZGFkZHI7ICAgLyogZGF0YSBjeWNsZSBmYXVsdCBhZGRyZXNzICovCisJCSAgICB1bnNpZ25lZCBzaG9ydCBpbnQyWzJdOworCQkgICAgdW5zaWduZWQgbG9uZyAgZG9idWY7ICAgLyogZGF0YSBjeWNsZSBvdXRwdXQgYnVmZmVyICovCisJCSAgICB1bnNpZ25lZCBzaG9ydCBpbnQzWzRdOworCQkgICAgdW5zaWduZWQgbG9uZyAgYmFkZHI7ICAgLyogc3RhZ2UgQiBhZGRyZXNzICovCisJCSAgICB1bnNpZ25lZCBzaG9ydCBpbnQ0WzJdOworCQkgICAgdW5zaWduZWQgbG9uZyAgZGlidWY7ICAgLyogZGF0YSBjeWNsZSBpbnB1dCBidWZmZXIgKi8KKwkJICAgIHVuc2lnbmVkIHNob3J0IGludDVbM107CisJCSAgICB1bnNpZ25lZAkgICB2ZXIgOiA0OyAvKiBzdGFjayBmcmFtZSB2ZXJzaW9uICMgKi8KKwkJICAgIHVuc2lnbmVkCSAgIGludDY6MTI7CisJCSAgICB1bnNpZ25lZCBzaG9ydCBpbnQ3WzE4XTsKKwkgICAgfSBmbXRiOworICAgIH0gdW47Cit9OworCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiBfTTY4S05PTU1VX1RSQVBTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS90eXBlcy5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMxMjM4YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS90eXBlcy5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tbTY4ay90eXBlcy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L3VhY2Nlc3MuaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS91YWNjZXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBiZTc0YgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS91YWNjZXNzLmgKQEAgLTAsMCArMSwxODIgQEAKKyNpZm5kZWYgX19NNjhLTk9NTVVfVUFDQ0VTU19ICisjZGVmaW5lIF9fTTY4S05PTU1VX1VBQ0NFU1NfSAorCisvKgorICogVXNlciBzcGFjZSBtZW1vcnkgYWNjZXNzIGZ1bmN0aW9ucworICovCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorCisjaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KKworI2RlZmluZSBWRVJJRllfUkVBRAkwCisjZGVmaW5lIFZFUklGWV9XUklURQkxCisKKyNkZWZpbmUgYWNjZXNzX29rKHR5cGUsYWRkcixzaXplKQlfYWNjZXNzX29rKCh1bnNpZ25lZCBsb25nKShhZGRyKSwoc2l6ZSkpCisKK3N0YXRpYyBpbmxpbmUgaW50IF9hY2Nlc3Nfb2sodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWVtb3J5X3N0YXJ0LCBtZW1vcnlfZW5kOworCisJcmV0dXJuICgoKGFkZHIgPj0gbWVtb3J5X3N0YXJ0KSAmJiAoYWRkcitzaXplIDwgbWVtb3J5X2VuZCkpIHx8CisJCShpc19pbl9yb20oYWRkcikgJiYgaXNfaW5fcm9tKGFkZHIrc2l6ZSkpKTsKK30KKworLyogdGhpcyBmdW5jdGlvbiB3aWxsIGdvIGF3YXkgc29vbiAtIHVzZSBhY2Nlc3Nfb2soKSBpbnN0ZWFkICovCitleHRlcm4gaW5saW5lIGludCBfX2RlcHJlY2F0ZWQgdmVyaWZ5X2FyZWEoaW50IHR5cGUsIGNvbnN0IHZvaWQgKiBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJcmV0dXJuIGFjY2Vzc19vayh0eXBlLGFkZHIsc2l6ZSk/MDotRUZBVUxUOworfQorCisvKgorICogVGhlIGV4Y2VwdGlvbiB0YWJsZSBjb25zaXN0cyBvZiBwYWlycyBvZiBhZGRyZXNzZXM6IHRoZSBmaXJzdCBpcyB0aGUKKyAqIGFkZHJlc3Mgb2YgYW4gaW5zdHJ1Y3Rpb24gdGhhdCBpcyBhbGxvd2VkIHRvIGZhdWx0LCBhbmQgdGhlIHNlY29uZCBpcworICogdGhlIGFkZHJlc3MgYXQgd2hpY2ggdGhlIHByb2dyYW0gc2hvdWxkIGNvbnRpbnVlLiAgTm8gcmVnaXN0ZXJzIGFyZQorICogbW9kaWZpZWQsIHNvIGl0IGlzIGVudGlyZWx5IHVwIHRvIHRoZSBjb250aW51YXRpb24gY29kZSB0byBmaWd1cmUgb3V0CisgKiB3aGF0IHRvIGRvLgorICoKKyAqIEFsbCB0aGUgcm91dGluZXMgYmVsb3cgdXNlIGJpdHMgb2YgZml4dXAgY29kZSB0aGF0IGFyZSBvdXQgb2YgbGluZQorICogd2l0aCB0aGUgbWFpbiBpbnN0cnVjdGlvbiBwYXRoLiAgVGhpcyBtZWFucyB3aGVuIGV2ZXJ5dGhpbmcgaXMgd2VsbCwKKyAqIHdlIGRvbid0IGV2ZW4gaGF2ZSB0byBqdW1wIG92ZXIgdGhlbS4gIEZ1cnRoZXIsIHRoZXkgZG8gbm90IGludHJ1ZGUKKyAqIG9uIG91ciBjYWNoZSBvciB0bGIgZW50cmllcy4KKyAqLworCitzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5Cit7CisJdW5zaWduZWQgbG9uZyBpbnNuLCBmaXh1cDsKK307CisKKy8qIFJldHVybnMgMCBpZiBleGNlcHRpb24gbm90IGZvdW5kIGFuZCBmaXh1cCBvdGhlcndpc2UuICAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc2VhcmNoX2V4Y2VwdGlvbl90YWJsZSh1bnNpZ25lZCBsb25nKTsKKworCisvKgorICogVGhlc2UgYXJlIHRoZSBtYWluIHNpbmdsZS12YWx1ZSB0cmFuc2ZlciByb3V0aW5lcy4gIFRoZXkgYXV0b21hdGljYWxseQorICogdXNlIHRoZSByaWdodCBzaXplIGlmIHdlIGp1c3QgaGF2ZSB0aGUgcmlnaHQgcG9pbnRlciB0eXBlLgorICovCisKKyNkZWZpbmUgcHV0X3VzZXIoeCwgcHRyKQkJCQlcCisoewkJCQkJCQlcCisgICAgaW50IF9fcHVfZXJyID0gMDsJCQkJCVwKKyAgICB0eXBlb2YoKihwdHIpKSBfX3B1X3ZhbCA9ICh4KTsJCQlcCisgICAgc3dpdGNoIChzaXplb2YgKCoocHRyKSkpIHsJCQkJXAorICAgIGNhc2UgMToJCQkJCQlcCisJX19wdXRfdXNlcl9hc20oX19wdV9lcnIsIF9fcHVfdmFsLCBwdHIsIGIpOwlcCisJYnJlYWs7CQkJCQkJXAorICAgIGNhc2UgMjoJCQkJCQlcCisJX19wdXRfdXNlcl9hc20oX19wdV9lcnIsIF9fcHVfdmFsLCBwdHIsIHcpOwlcCisJYnJlYWs7CQkJCQkJXAorICAgIGNhc2UgNDoJCQkJCQlcCisJX19wdXRfdXNlcl9hc20oX19wdV9lcnIsIF9fcHVfdmFsLCBwdHIsIGwpOwlcCisJYnJlYWs7CQkJCQkJXAorICAgIGNhc2UgODoJCQkJCQlcCisJbWVtY3B5KHB0ciwgJl9fcHVfdmFsLCBzaXplb2YgKCoocHRyKSkpOyBcCisJYnJlYWs7CQkJCQkJXAorICAgIGRlZmF1bHQ6CQkJCQkJXAorCV9fcHVfZXJyID0gX19wdXRfdXNlcl9iYWQoKTsJCQlcCisJYnJlYWs7CQkJCQkJXAorICAgIH0JCQkJCQkJXAorICAgIF9fcHVfZXJyOwkJCQkJCVwKK30pCisjZGVmaW5lIF9fcHV0X3VzZXIoeCwgcHRyKSBwdXRfdXNlcih4LCBwdHIpCisKK2V4dGVybiBpbnQgX19wdXRfdXNlcl9iYWQodm9pZCk7CisKKy8qCisgKiBUZWxsIGdjYyB3ZSByZWFkIGZyb20gbWVtb3J5IGluc3RlYWQgb2Ygd3JpdGluZzogdGhpcyBpcyBiZWNhdXNlCisgKiB3ZSBkbyBub3Qgd3JpdGUgdG8gYW55IG1lbW9yeSBnY2Mga25vd3MgYWJvdXQsIHNvIHRoZXJlIGFyZSBubworICogYWxpYXNpbmcgaXNzdWVzLgorICovCisKKyNkZWZpbmUgX19wdHIoeCkgKCh1bnNpZ25lZCBsb25nICopKHgpKQorCisjZGVmaW5lIF9fcHV0X3VzZXJfYXNtKGVycix4LHB0cixid2wpCQkJCVwKKwlfX2FzbV9fICgibW92ZSIgI2J3bCAiICUwLCUxIgkJCQlcCisJCTogLyogbm8gb3V0cHV0cyAqLwkJCQkJCVwKKwkJOiJkIiAoeCksIm0iICgqX19wdHIocHRyKSkgOiAibWVtb3J5IikKKworI2RlZmluZSBnZXRfdXNlcih4LCBwdHIpCQkJCQlcCisoewkJCQkJCQkJXAorICAgIGludCBfX2d1X2VyciA9IDA7CQkJCQkJXAorICAgIHR5cGVvZigqKHB0cikpIF9fZ3VfdmFsID0gMDsJCQkJXAorICAgIHN3aXRjaCAoc2l6ZW9mKCoocHRyKSkpIHsJCQkJCVwKKyAgICBjYXNlIDE6CQkJCQkJCVwKKwlfX2dldF91c2VyX2FzbShfX2d1X2VyciwgX19ndV92YWwsIHB0ciwgYiwgIj1kIik7CVwKKwlicmVhazsJCQkJCQkJXAorICAgIGNhc2UgMjoJCQkJCQkJXAorCV9fZ2V0X3VzZXJfYXNtKF9fZ3VfZXJyLCBfX2d1X3ZhbCwgcHRyLCB3LCAiPXIiKTsJXAorCWJyZWFrOwkJCQkJCQlcCisgICAgY2FzZSA0OgkJCQkJCQlcCisJX19nZXRfdXNlcl9hc20oX19ndV9lcnIsIF9fZ3VfdmFsLCBwdHIsIGwsICI9ciIpOwlcCisJYnJlYWs7CQkJCQkJCVwKKyAgICBjYXNlIDg6CQkJCQkJCVwKKwltZW1jcHkoJl9fZ3VfdmFsLCBwdHIsIHNpemVvZiAoKihwdHIpKSk7IFwKKwlicmVhazsJCQkJCQkJXAorICAgIGRlZmF1bHQ6CQkJCQkJCVwKKwlfX2d1X3ZhbCA9IDA7CQkJCQkJXAorCV9fZ3VfZXJyID0gX19nZXRfdXNlcl9iYWQoKTsJCQkJXAorCWJyZWFrOwkJCQkJCQlcCisgICAgfQkJCQkJCQkJXAorICAgICh4KSA9IF9fZ3VfdmFsOwkJCQkJCVwKKyAgICBfX2d1X2VycjsJCQkJCQkJXAorfSkKKyNkZWZpbmUgX19nZXRfdXNlcih4LCBwdHIpIGdldF91c2VyKHgsIHB0cikKKworZXh0ZXJuIGludCBfX2dldF91c2VyX2JhZCh2b2lkKTsKKworI2RlZmluZSBfX2dldF91c2VyX2FzbShlcnIseCxwdHIsYndsLHJlZykJXAorCV9fYXNtX18gKCJtb3ZlIiAjYndsICIgJTEsJTAiCQkJXAorCQkgOiAiPWQiICh4KQkJCQkJCQlcCisJCSA6ICJtIiAoKl9fcHRyKHB0cikpKQorCisjZGVmaW5lIGNvcHlfZnJvbV91c2VyKHRvLCBmcm9tLCBuKQkJKG1lbWNweSh0bywgZnJvbSwgbiksIDApCisjZGVmaW5lIGNvcHlfdG9fdXNlcih0bywgZnJvbSwgbikJCShtZW1jcHkodG8sIGZyb20sIG4pLCAwKQorCisjZGVmaW5lIF9fY29weV9mcm9tX3VzZXIodG8sIGZyb20sIG4pIGNvcHlfZnJvbV91c2VyKHRvLCBmcm9tLCBuKQorI2RlZmluZSBfX2NvcHlfdG9fdXNlcih0bywgZnJvbSwgbikgY29weV90b191c2VyKHRvLCBmcm9tLCBuKQorI2RlZmluZSBfX2NvcHlfdG9fdXNlcl9pbmF0b21pYyBfX2NvcHlfdG9fdXNlcgorI2RlZmluZSBfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljIF9fY29weV9mcm9tX3VzZXIKKworI2RlZmluZSBjb3B5X3RvX3VzZXJfcmV0KHRvLGZyb20sbixyZXR2YWwpICh7IGlmIChjb3B5X3RvX3VzZXIodG8sZnJvbSxuKSkgcmV0dXJuIHJldHZhbDsgfSkKKworI2RlZmluZSBjb3B5X2Zyb21fdXNlcl9yZXQodG8sZnJvbSxuLHJldHZhbCkgKHsgaWYgKGNvcHlfZnJvbV91c2VyKHRvLGZyb20sbikpIHJldHVybiByZXR2YWw7IH0pCisKKy8qCisgKiBDb3B5IGEgbnVsbCB0ZXJtaW5hdGVkIHN0cmluZyBmcm9tIHVzZXJzcGFjZS4KKyAqLworCitzdGF0aWMgaW5saW5lIGxvbmcKK3N0cm5jcHlfZnJvbV91c2VyKGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjLCBsb25nIGNvdW50KQoreworCWNoYXIgKnRtcDsKKwlzdHJuY3B5KGRzdCwgc3JjLCBjb3VudCk7CisJZm9yICh0bXAgPSBkc3Q7ICp0bXAgJiYgY291bnQgPiAwOyB0bXArKywgY291bnQtLSkKKwkJOworCXJldHVybih0bXAgLSBkc3QpOyAvKiBEQVZJRE0gc2hvdWxkIHdlIGNvdW50IGEgTlVMID8gIGNoZWNrIGdldG5hbWUgKi8KK30KKworLyoKKyAqIFJldHVybiB0aGUgc2l6ZSBvZiBhIHN0cmluZyAoaW5jbHVkaW5nIHRoZSBlbmRpbmcgMCkKKyAqCisgKiBSZXR1cm4gMCBvbiBleGNlcHRpb24sIGEgdmFsdWUgZ3JlYXRlciB0aGFuIE4gaWYgdG9vIGxvbmcKKyAqLworc3RhdGljIGlubGluZSBsb25nIHN0cm5sZW5fdXNlcihjb25zdCBjaGFyICpzcmMsIGxvbmcgbikKK3sKKwlyZXR1cm4oc3RybGVuKHNyYykgKyAxKTsgLyogREFWSURNIG1ha2Ugc2FmZXIgKi8KK30KKworI2RlZmluZSBzdHJsZW5fdXNlcihzdHIpIHN0cm5sZW5fdXNlcihzdHIsIDMyNzY3KQorCisvKgorICogWmVybyBVc2Vyc3BhY2UKKyAqLworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK2NsZWFyX3VzZXIodm9pZCAqdG8sIHVuc2lnbmVkIGxvbmcgbikKK3sKKwltZW1zZXQodG8sIDAsIG4pOworCXJldHVybiAwOworfQorCisjZW5kaWYgLyogX002OEtOT01NVV9VQUNDRVNTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS91Y29udGV4dC5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L3Vjb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ1NzBjZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS91Y29udGV4dC5oCkBAIC0wLDAgKzEsMzggQEAKKyNpZm5kZWYgX002OEtOT01NVV9VQ09OVEVYVF9ICisjZGVmaW5lIF9NNjhLTk9NTVVfVUNPTlRFWFRfSAorCit0eXBlZGVmIGludCBncmVnX3Q7CisjZGVmaW5lIE5HUkVHIDE4Cit0eXBlZGVmIGdyZWdfdCBncmVnc2V0X3RbTkdSRUddOworCisjaWZkZWYgQ09ORklHX0ZQVQordHlwZWRlZiBzdHJ1Y3QgZnByZWdzZXQgeworCWludCBmX3BjcjsKKwlpbnQgZl9wc3I7CisJaW50IGZfZnBpYWRkcjsKKwlpbnQgZl9mcHJlZ3NbOF1bM107Cit9IGZwcmVnc2V0X3Q7CisjZW5kaWYKKworc3RydWN0IG1jb250ZXh0IHsKKwlpbnQgdmVyc2lvbjsKKwlncmVnc2V0X3QgZ3JlZ3M7CisjaWZkZWYgQ09ORklHX0ZQVQorCWZwcmVnc2V0X3QgZnByZWdzOworI2VuZGlmCit9OworCisjZGVmaW5lIE1DT05URVhUX1ZFUlNJT04gMgorCitzdHJ1Y3QgdWNvbnRleHQgeworCXVuc2lnbmVkIGxvbmcJICB1Y19mbGFnczsKKwlzdHJ1Y3QgdWNvbnRleHQgICp1Y19saW5rOworCXN0YWNrX3QJCSAgdWNfc3RhY2s7CisJc3RydWN0IG1jb250ZXh0CSAgdWNfbWNvbnRleHQ7CisjaWZkZWYgQ09ORklHX0ZQVQorCXVuc2lnbmVkIGxvbmcJICB1Y19maWxsZXJbODBdOworI2VuZGlmCisJc2lnc2V0X3QJICB1Y19zaWdtYXNrOwkvKiBtYXNrIGxhc3QgZm9yIGV4dGVuc2liaWxpdHkgKi8KK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L3VuYWxpZ25lZC5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L3VuYWxpZ25lZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4NzZmMDMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvdW5hbGlnbmVkLmgKQEAgLTAsMCArMSwyNCBAQAorI2lmbmRlZiBfX002OEtfVU5BTElHTkVEX0gKKyNkZWZpbmUgX19NNjhLX1VOQUxJR05FRF9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2lmZGVmIENPTkZJR19DT0xERklSRQorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdW5hbGlnbmVkLmg+CisKKyNlbHNlCisvKgorICogVGhlIG02OGsgY2FuIGRvIHVuYWxpZ25lZCBhY2Nlc3NlcyBpdHNlbGYuIAorICoKKyAqIFRoZSBzdHJhbmdlIG1hY3JvcyBhcmUgdGhlcmUgdG8gbWFrZSBzdXJlIHRoZXNlIGNhbid0CisgKiBiZSBtaXN1c2VkIGluIGEgd2F5IHRoYXQgbWFrZXMgdGhlbSBub3Qgd29yayBvbiBvdGhlcgorICogYXJjaGl0ZWN0dXJlcyB3aGVyZSB1bmFsaWduZWQgYWNjZXNzZXMgYXJlbid0IGFzIHNpbXBsZS4KKyAqLworCisjZGVmaW5lIGdldF91bmFsaWduZWQocHRyKSAoKihwdHIpKQorI2RlZmluZSBwdXRfdW5hbGlnbmVkKHZhbCwgcHRyKSAoKHZvaWQpKCAqKHB0cikgPSAodmFsKSApKQorCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvdW5pc3RkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRiNmZhMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS91bmlzdGQuaApAQCAtMCwwICsxLDUyOSBAQAorI2lmbmRlZiBfQVNNX002OEtfVU5JU1REX0hfCisjZGVmaW5lIF9BU01fTTY4S19VTklTVERfSF8KKworLyoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgc3lzdGVtIGNhbGwgbnVtYmVycy4KKyAqLworCisjZGVmaW5lIF9fTlJfcmVzdGFydF9zeXNjYWxsICAgICAgMAorI2RlZmluZSBfX05SX2V4aXQJCSAgMQorI2RlZmluZSBfX05SX2ZvcmsJCSAgMgorI2RlZmluZSBfX05SX3JlYWQJCSAgMworI2RlZmluZSBfX05SX3dyaXRlCQkgIDQKKyNkZWZpbmUgX19OUl9vcGVuCQkgIDUKKyNkZWZpbmUgX19OUl9jbG9zZQkJICA2CisjZGVmaW5lIF9fTlJfd2FpdHBpZAkJICA3CisjZGVmaW5lIF9fTlJfY3JlYXQJCSAgOAorI2RlZmluZSBfX05SX2xpbmsJCSAgOQorI2RlZmluZSBfX05SX3VubGluawkJIDEwCisjZGVmaW5lIF9fTlJfZXhlY3ZlCQkgMTEKKyNkZWZpbmUgX19OUl9jaGRpcgkJIDEyCisjZGVmaW5lIF9fTlJfdGltZQkJIDEzCisjZGVmaW5lIF9fTlJfbWtub2QJCSAxNAorI2RlZmluZSBfX05SX2NobW9kCQkgMTUKKyNkZWZpbmUgX19OUl9jaG93bgkJIDE2CisjZGVmaW5lIF9fTlJfYnJlYWsJCSAxNworI2RlZmluZSBfX05SX29sZHN0YXQJCSAxOAorI2RlZmluZSBfX05SX2xzZWVrCQkgMTkKKyNkZWZpbmUgX19OUl9nZXRwaWQJCSAyMAorI2RlZmluZSBfX05SX21vdW50CQkgMjEKKyNkZWZpbmUgX19OUl91bW91bnQJCSAyMgorI2RlZmluZSBfX05SX3NldHVpZAkJIDIzCisjZGVmaW5lIF9fTlJfZ2V0dWlkCQkgMjQKKyNkZWZpbmUgX19OUl9zdGltZQkJIDI1CisjZGVmaW5lIF9fTlJfcHRyYWNlCQkgMjYKKyNkZWZpbmUgX19OUl9hbGFybQkJIDI3CisjZGVmaW5lIF9fTlJfb2xkZnN0YXQJCSAyOAorI2RlZmluZSBfX05SX3BhdXNlCQkgMjkKKyNkZWZpbmUgX19OUl91dGltZQkJIDMwCisjZGVmaW5lIF9fTlJfc3R0eQkJIDMxCisjZGVmaW5lIF9fTlJfZ3R0eQkJIDMyCisjZGVmaW5lIF9fTlJfYWNjZXNzCQkgMzMKKyNkZWZpbmUgX19OUl9uaWNlCQkgMzQKKyNkZWZpbmUgX19OUl9mdGltZQkJIDM1CisjZGVmaW5lIF9fTlJfc3luYwkJIDM2CisjZGVmaW5lIF9fTlJfa2lsbAkJIDM3CisjZGVmaW5lIF9fTlJfcmVuYW1lCQkgMzgKKyNkZWZpbmUgX19OUl9ta2RpcgkJIDM5CisjZGVmaW5lIF9fTlJfcm1kaXIJCSA0MAorI2RlZmluZSBfX05SX2R1cAkJIDQxCisjZGVmaW5lIF9fTlJfcGlwZQkJIDQyCisjZGVmaW5lIF9fTlJfdGltZXMJCSA0MworI2RlZmluZSBfX05SX3Byb2YJCSA0NAorI2RlZmluZSBfX05SX2JyawkJIDQ1CisjZGVmaW5lIF9fTlJfc2V0Z2lkCQkgNDYKKyNkZWZpbmUgX19OUl9nZXRnaWQJCSA0NworI2RlZmluZSBfX05SX3NpZ25hbAkJIDQ4CisjZGVmaW5lIF9fTlJfZ2V0ZXVpZAkJIDQ5CisjZGVmaW5lIF9fTlJfZ2V0ZWdpZAkJIDUwCisjZGVmaW5lIF9fTlJfYWNjdAkJIDUxCisjZGVmaW5lIF9fTlJfdW1vdW50MgkJIDUyCisjZGVmaW5lIF9fTlJfbG9jawkJIDUzCisjZGVmaW5lIF9fTlJfaW9jdGwJCSA1NAorI2RlZmluZSBfX05SX2ZjbnRsCQkgNTUKKyNkZWZpbmUgX19OUl9tcHgJCSA1NgorI2RlZmluZSBfX05SX3NldHBnaWQJCSA1NworI2RlZmluZSBfX05SX3VsaW1pdAkJIDU4CisjZGVmaW5lIF9fTlJfb2xkb2xkdW5hbWUJIDU5CisjZGVmaW5lIF9fTlJfdW1hc2sJCSA2MAorI2RlZmluZSBfX05SX2Nocm9vdAkJIDYxCisjZGVmaW5lIF9fTlJfdXN0YXQJCSA2MgorI2RlZmluZSBfX05SX2R1cDIJCSA2MworI2RlZmluZSBfX05SX2dldHBwaWQJCSA2NAorI2RlZmluZSBfX05SX2dldHBncnAJCSA2NQorI2RlZmluZSBfX05SX3NldHNpZAkJIDY2CisjZGVmaW5lIF9fTlJfc2lnYWN0aW9uCQkgNjcKKyNkZWZpbmUgX19OUl9zZ2V0bWFzawkJIDY4CisjZGVmaW5lIF9fTlJfc3NldG1hc2sJCSA2OQorI2RlZmluZSBfX05SX3NldHJldWlkCQkgNzAKKyNkZWZpbmUgX19OUl9zZXRyZWdpZAkJIDcxCisjZGVmaW5lIF9fTlJfc2lnc3VzcGVuZAkJIDcyCisjZGVmaW5lIF9fTlJfc2lncGVuZGluZwkJIDczCisjZGVmaW5lIF9fTlJfc2V0aG9zdG5hbWUJIDc0CisjZGVmaW5lIF9fTlJfc2V0cmxpbWl0CQkgNzUKKyNkZWZpbmUgX19OUl9nZXRybGltaXQJCSA3NgorI2RlZmluZSBfX05SX2dldHJ1c2FnZQkJIDc3CisjZGVmaW5lIF9fTlJfZ2V0dGltZW9mZGF5CSA3OAorI2RlZmluZSBfX05SX3NldHRpbWVvZmRheQkgNzkKKyNkZWZpbmUgX19OUl9nZXRncm91cHMJCSA4MAorI2RlZmluZSBfX05SX3NldGdyb3VwcwkJIDgxCisjZGVmaW5lIF9fTlJfc2VsZWN0CQkgODIKKyNkZWZpbmUgX19OUl9zeW1saW5rCQkgODMKKyNkZWZpbmUgX19OUl9vbGRsc3RhdAkJIDg0CisjZGVmaW5lIF9fTlJfcmVhZGxpbmsJCSA4NQorI2RlZmluZSBfX05SX3VzZWxpYgkJIDg2CisjZGVmaW5lIF9fTlJfc3dhcG9uCQkgODcKKyNkZWZpbmUgX19OUl9yZWJvb3QJCSA4OAorI2RlZmluZSBfX05SX3JlYWRkaXIJCSA4OQorI2RlZmluZSBfX05SX21tYXAJCSA5MAorI2RlZmluZSBfX05SX211bm1hcAkJIDkxCisjZGVmaW5lIF9fTlJfdHJ1bmNhdGUJCSA5MgorI2RlZmluZSBfX05SX2Z0cnVuY2F0ZQkJIDkzCisjZGVmaW5lIF9fTlJfZmNobW9kCQkgOTQKKyNkZWZpbmUgX19OUl9mY2hvd24JCSA5NQorI2RlZmluZSBfX05SX2dldHByaW9yaXR5CSA5NgorI2RlZmluZSBfX05SX3NldHByaW9yaXR5CSA5NworI2RlZmluZSBfX05SX3Byb2ZpbAkJIDk4CisjZGVmaW5lIF9fTlJfc3RhdGZzCQkgOTkKKyNkZWZpbmUgX19OUl9mc3RhdGZzCQkxMDAKKyNkZWZpbmUgX19OUl9pb3Blcm0JCTEwMQorI2RlZmluZSBfX05SX3NvY2tldGNhbGwJCTEwMgorI2RlZmluZSBfX05SX3N5c2xvZwkJMTAzCisjZGVmaW5lIF9fTlJfc2V0aXRpbWVyCQkxMDQKKyNkZWZpbmUgX19OUl9nZXRpdGltZXIJCTEwNQorI2RlZmluZSBfX05SX3N0YXQJCTEwNgorI2RlZmluZSBfX05SX2xzdGF0CQkxMDcKKyNkZWZpbmUgX19OUl9mc3RhdAkJMTA4CisjZGVmaW5lIF9fTlJfb2xkdW5hbWUJCTEwOQorI2RlZmluZSBfX05SX2lvcGwJCS8qIDExMCAqLyBub3Qgc3VwcG9ydGVkCisjZGVmaW5lIF9fTlJfdmhhbmd1cAkJMTExCisjZGVmaW5lIF9fTlJfaWRsZQkJLyogMTEyICovIE9ic29sZXRlCisjZGVmaW5lIF9fTlJfdm04NgkJLyogMTEzICovIG5vdCBzdXBwb3J0ZWQKKyNkZWZpbmUgX19OUl93YWl0NAkJMTE0CisjZGVmaW5lIF9fTlJfc3dhcG9mZgkJMTE1CisjZGVmaW5lIF9fTlJfc3lzaW5mbwkJMTE2CisjZGVmaW5lIF9fTlJfaXBjCQkxMTcKKyNkZWZpbmUgX19OUl9mc3luYwkJMTE4CisjZGVmaW5lIF9fTlJfc2lncmV0dXJuCQkxMTkKKyNkZWZpbmUgX19OUl9jbG9uZQkJMTIwCisjZGVmaW5lIF9fTlJfc2V0ZG9tYWlubmFtZQkxMjEKKyNkZWZpbmUgX19OUl91bmFtZQkJMTIyCisjZGVmaW5lIF9fTlJfY2FjaGVmbHVzaAkJMTIzCisjZGVmaW5lIF9fTlJfYWRqdGltZXgJCTEyNAorI2RlZmluZSBfX05SX21wcm90ZWN0CQkxMjUKKyNkZWZpbmUgX19OUl9zaWdwcm9jbWFzawkxMjYKKyNkZWZpbmUgX19OUl9jcmVhdGVfbW9kdWxlCTEyNworI2RlZmluZSBfX05SX2luaXRfbW9kdWxlCTEyOAorI2RlZmluZSBfX05SX2RlbGV0ZV9tb2R1bGUJMTI5CisjZGVmaW5lIF9fTlJfZ2V0X2tlcm5lbF9zeW1zCTEzMAorI2RlZmluZSBfX05SX3F1b3RhY3RsCQkxMzEKKyNkZWZpbmUgX19OUl9nZXRwZ2lkCQkxMzIKKyNkZWZpbmUgX19OUl9mY2hkaXIJCTEzMworI2RlZmluZSBfX05SX2JkZmx1c2gJCTEzNAorI2RlZmluZSBfX05SX3N5c2ZzCQkxMzUKKyNkZWZpbmUgX19OUl9wZXJzb25hbGl0eQkxMzYKKyNkZWZpbmUgX19OUl9hZnNfc3lzY2FsbAkxMzcgLyogU3lzY2FsbCBmb3IgQW5kcmV3IEZpbGUgU3lzdGVtICovCisjZGVmaW5lIF9fTlJfc2V0ZnN1aWQJCTEzOAorI2RlZmluZSBfX05SX3NldGZzZ2lkCQkxMzkKKyNkZWZpbmUgX19OUl9fbGxzZWVrCQkxNDAKKyNkZWZpbmUgX19OUl9nZXRkZW50cwkJMTQxCisjZGVmaW5lIF9fTlJfX25ld3NlbGVjdAkJMTQyCisjZGVmaW5lIF9fTlJfZmxvY2sJCTE0MworI2RlZmluZSBfX05SX21zeW5jCQkxNDQKKyNkZWZpbmUgX19OUl9yZWFkdgkJMTQ1CisjZGVmaW5lIF9fTlJfd3JpdGV2CQkxNDYKKyNkZWZpbmUgX19OUl9nZXRzaWQJCTE0NworI2RlZmluZSBfX05SX2ZkYXRhc3luYwkJMTQ4CisjZGVmaW5lIF9fTlJfX3N5c2N0bAkJMTQ5CisjZGVmaW5lIF9fTlJfbWxvY2sJCTE1MAorI2RlZmluZSBfX05SX211bmxvY2sJCTE1MQorI2RlZmluZSBfX05SX21sb2NrYWxsCQkxNTIKKyNkZWZpbmUgX19OUl9tdW5sb2NrYWxsCQkxNTMKKyNkZWZpbmUgX19OUl9zY2hlZF9zZXRwYXJhbQkJMTU0CisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0cGFyYW0JCTE1NQorI2RlZmluZSBfX05SX3NjaGVkX3NldHNjaGVkdWxlcgkJMTU2CisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0c2NoZWR1bGVyCQkxNTcKKyNkZWZpbmUgX19OUl9zY2hlZF95aWVsZAkJMTU4CisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21heAkxNTkKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWluCTE2MAorI2RlZmluZSBfX05SX3NjaGVkX3JyX2dldF9pbnRlcnZhbAkxNjEKKyNkZWZpbmUgX19OUl9uYW5vc2xlZXAJCTE2MgorI2RlZmluZSBfX05SX21yZW1hcAkJMTYzCisjZGVmaW5lIF9fTlJfc2V0cmVzdWlkCQkxNjQKKyNkZWZpbmUgX19OUl9nZXRyZXN1aWQJCTE2NQorI2RlZmluZSBfX05SX2dldHBhZ2VzaXplCTE2NgorI2RlZmluZSBfX05SX3F1ZXJ5X21vZHVsZQkxNjcKKyNkZWZpbmUgX19OUl9wb2xsCQkxNjgKKyNkZWZpbmUgX19OUl9uZnNzZXJ2Y3RsCQkxNjkKKyNkZWZpbmUgX19OUl9zZXRyZXNnaWQJCTE3MAorI2RlZmluZSBfX05SX2dldHJlc2dpZAkJMTcxCisjZGVmaW5lIF9fTlJfcHJjdGwJCTE3MgorI2RlZmluZSBfX05SX3J0X3NpZ3JldHVybgkxNzMKKyNkZWZpbmUgX19OUl9ydF9zaWdhY3Rpb24JMTc0CisjZGVmaW5lIF9fTlJfcnRfc2lncHJvY21hc2sJMTc1CisjZGVmaW5lIF9fTlJfcnRfc2lncGVuZGluZwkxNzYKKyNkZWZpbmUgX19OUl9ydF9zaWd0aW1lZHdhaXQJMTc3CisjZGVmaW5lIF9fTlJfcnRfc2lncXVldWVpbmZvCTE3OAorI2RlZmluZSBfX05SX3J0X3NpZ3N1c3BlbmQJMTc5CisjZGVmaW5lIF9fTlJfcHJlYWQJCTE4MAorI2RlZmluZSBfX05SX3B3cml0ZQkJMTgxCisjZGVmaW5lIF9fTlJfbGNob3duCQkxODIKKyNkZWZpbmUgX19OUl9nZXRjd2QJCTE4MworI2RlZmluZSBfX05SX2NhcGdldAkJMTg0CisjZGVmaW5lIF9fTlJfY2Fwc2V0CQkxODUKKyNkZWZpbmUgX19OUl9zaWdhbHRzdGFjawkxODYKKyNkZWZpbmUgX19OUl9zZW5kZmlsZQkJMTg3CisjZGVmaW5lIF9fTlJfZ2V0cG1zZwkJMTg4CS8qIHNvbWUgcGVvcGxlIGFjdHVhbGx5IHdhbnQgc3RyZWFtcyAqLworI2RlZmluZSBfX05SX3B1dHBtc2cJCTE4OQkvKiBzb21lIHBlb3BsZSBhY3R1YWxseSB3YW50IHN0cmVhbXMgKi8KKyNkZWZpbmUgX19OUl92Zm9yawkJMTkwCisjZGVmaW5lIF9fTlJfdWdldHJsaW1pdAkJMTkxCisjZGVmaW5lIF9fTlJfbW1hcDIJCTE5MgorI2RlZmluZSBfX05SX3RydW5jYXRlNjQJCTE5MworI2RlZmluZSBfX05SX2Z0cnVuY2F0ZTY0CTE5NAorI2RlZmluZSBfX05SX3N0YXQ2NAkJMTk1CisjZGVmaW5lIF9fTlJfbHN0YXQ2NAkJMTk2CisjZGVmaW5lIF9fTlJfZnN0YXQ2NAkJMTk3CisjZGVmaW5lIF9fTlJfY2hvd24zMgkJMTk4CisjZGVmaW5lIF9fTlJfZ2V0dWlkMzIJCTE5OQorI2RlZmluZSBfX05SX2dldGdpZDMyCQkyMDAKKyNkZWZpbmUgX19OUl9nZXRldWlkMzIJCTIwMQorI2RlZmluZSBfX05SX2dldGVnaWQzMgkJMjAyCisjZGVmaW5lIF9fTlJfc2V0cmV1aWQzMgkJMjAzCisjZGVmaW5lIF9fTlJfc2V0cmVnaWQzMgkJMjA0CisjZGVmaW5lIF9fTlJfZ2V0Z3JvdXBzMzIJMjA1CisjZGVmaW5lIF9fTlJfc2V0Z3JvdXBzMzIJMjA2CisjZGVmaW5lIF9fTlJfZmNob3duMzIJCTIwNworI2RlZmluZSBfX05SX3NldHJlc3VpZDMyCTIwOAorI2RlZmluZSBfX05SX2dldHJlc3VpZDMyCTIwOQorI2RlZmluZSBfX05SX3NldHJlc2dpZDMyCTIxMAorI2RlZmluZSBfX05SX2dldHJlc2dpZDMyCTIxMQorI2RlZmluZSBfX05SX2xjaG93bjMyCQkyMTIKKyNkZWZpbmUgX19OUl9zZXR1aWQzMgkJMjEzCisjZGVmaW5lIF9fTlJfc2V0Z2lkMzIJCTIxNAorI2RlZmluZSBfX05SX3NldGZzdWlkMzIJCTIxNQorI2RlZmluZSBfX05SX3NldGZzZ2lkMzIJCTIxNgorI2RlZmluZSBfX05SX3Bpdm90X3Jvb3QJCTIxNworI2RlZmluZSBfX05SX2dldGRlbnRzNjQJCTIyMAorI2RlZmluZSBfX05SX2dldHRpZAkJMjIxCisjZGVmaW5lIF9fTlJfdGtpbGwJCTIyMgorI2RlZmluZSBfX05SX3NldHhhdHRyCQkyMjMKKyNkZWZpbmUgX19OUl9sc2V0eGF0dHIJCTIyNAorI2RlZmluZSBfX05SX2ZzZXR4YXR0cgkJMjI1CisjZGVmaW5lIF9fTlJfZ2V0eGF0dHIJCTIyNgorI2RlZmluZSBfX05SX2xnZXR4YXR0cgkJMjI3CisjZGVmaW5lIF9fTlJfZmdldHhhdHRyCQkyMjgKKyNkZWZpbmUgX19OUl9saXN0eGF0dHIJCTIyOQorI2RlZmluZSBfX05SX2xsaXN0eGF0dHIJCTIzMAorI2RlZmluZSBfX05SX2ZsaXN0eGF0dHIJCTIzMQorI2RlZmluZSBfX05SX3JlbW92ZXhhdHRyCTIzMgorI2RlZmluZSBfX05SX2xyZW1vdmV4YXR0cgkyMzMKKyNkZWZpbmUgX19OUl9mcmVtb3ZleGF0dHIJMjM0CisjZGVmaW5lIF9fTlJfZnV0ZXgJCTIzNQorI2RlZmluZSBfX05SX3NlbmRmaWxlNjQJCTIzNgorI2RlZmluZSBfX05SX21pbmNvcmUJCTIzNworI2RlZmluZSBfX05SX21hZHZpc2UJCTIzOAorI2RlZmluZSBfX05SX2ZjbnRsNjQJCTIzOQorI2RlZmluZSBfX05SX3JlYWRhaGVhZAkJMjQwCisjZGVmaW5lIF9fTlJfaW9fc2V0dXAJCTI0MQorI2RlZmluZSBfX05SX2lvX2Rlc3Ryb3kJCTI0MgorI2RlZmluZSBfX05SX2lvX2dldGV2ZW50cwkyNDMKKyNkZWZpbmUgX19OUl9pb19zdWJtaXQJCTI0NAorI2RlZmluZSBfX05SX2lvX2NhbmNlbAkJMjQ1CisjZGVmaW5lIF9fTlJfZmFkdmlzZTY0CQkyNDYKKyNkZWZpbmUgX19OUl9leGl0X2dyb3VwCQkyNDcKKyNkZWZpbmUgX19OUl9sb29rdXBfZGNvb2tpZQkyNDgKKyNkZWZpbmUgX19OUl9lcG9sbF9jcmVhdGUJMjQ5CisjZGVmaW5lIF9fTlJfZXBvbGxfY3RsCQkyNTAKKyNkZWZpbmUgX19OUl9lcG9sbF93YWl0CQkyNTEKKyNkZWZpbmUgX19OUl9yZW1hcF9maWxlX3BhZ2VzCTI1MgorI2RlZmluZSBfX05SX3NldF90aWRfYWRkcmVzcwkyNTMKKyNkZWZpbmUgX19OUl90aW1lcl9jcmVhdGUJMjU0CisjZGVmaW5lIF9fTlJfdGltZXJfc2V0dGltZQkyNTUKKyNkZWZpbmUgX19OUl90aW1lcl9nZXR0aW1lCTI1NgorI2RlZmluZSBfX05SX3RpbWVyX2dldG92ZXJydW4JMjU3CisjZGVmaW5lIF9fTlJfdGltZXJfZGVsZXRlCTI1OAorI2RlZmluZSBfX05SX2Nsb2NrX3NldHRpbWUJMjU5CisjZGVmaW5lIF9fTlJfY2xvY2tfZ2V0dGltZQkyNjAKKyNkZWZpbmUgX19OUl9jbG9ja19nZXRyZXMJMjYxCisjZGVmaW5lIF9fTlJfY2xvY2tfbmFub3NsZWVwCTI2MgorI2RlZmluZSBfX05SX3N0YXRmczY0CQkyNjMKKyNkZWZpbmUgX19OUl9mc3RhdGZzNjQJCTI2NAorI2RlZmluZSBfX05SX3Rna2lsbAkJMjY1CisjZGVmaW5lIF9fTlJfdXRpbWVzCQkyNjYKKyNkZWZpbmUgX19OUl9mYWR2aXNlNjRfNjQJMjY3CisjZGVmaW5lIF9fTlJfbWJpbmQJCTI2OAorI2RlZmluZSBfX05SX2dldF9tZW1wb2xpY3kJMjY5CisjZGVmaW5lIF9fTlJfc2V0X21lbXBvbGljeQkyNzAKKyNkZWZpbmUgX19OUl9tcV9vcGVuCQkyNzEKKyNkZWZpbmUgX19OUl9tcV91bmxpbmsJCTI3MgorI2RlZmluZSBfX05SX21xX3RpbWVkc2VuZAkyNzMKKyNkZWZpbmUgX19OUl9tcV90aW1lZHJlY2VpdmUJMjc0CisjZGVmaW5lIF9fTlJfbXFfbm90aWZ5CQkyNzUKKyNkZWZpbmUgX19OUl9tcV9nZXRzZXRhdHRyCTI3NgorI2RlZmluZSBfX05SX3dhaXRpZAkJMjc3CisjZGVmaW5lIF9fTlJfc3lzX3NldGFsdHJvb3QJMjc4CisjZGVmaW5lIF9fTlJfYWRkX2tleQkJMjc5CisjZGVmaW5lIF9fTlJfcmVxdWVzdF9rZXkJMjgwCisjZGVmaW5lIF9fTlJfa2V5Y3RsCQkyODEKKyAKKyNkZWZpbmUgTlJfc3lzY2FsbHMJCTI4MgorCisvKiB1c2VyLXZpc2libGUgZXJyb3IgbnVtYmVycyBhcmUgaW4gdGhlIHJhbmdlIC0xIC0gLTEyMjogc2VlCisgICA8YXNtLW02OGsvZXJybm8uaD4gKi8KKworI2RlZmluZSBfX3N5c2NhbGxfcmV0dXJuKHR5cGUsIHJlcykgXAorZG8geyBcCisJaWYgKCh1bnNpZ25lZCBsb25nKShyZXMpID49ICh1bnNpZ25lZCBsb25nKSgtMTI1KSkgeyBcCisJLyogYXZvaWQgdXNpbmcgcmVzIHdoaWNoIGlzIGRlY2xhcmVkIHRvIGJlIGluIHJlZ2lzdGVyIGQwOyBcCisJICAgZXJybm8gbWlnaHQgZXhwYW5kIHRvIGEgZnVuY3Rpb24gY2FsbCBhbmQgY2xvYmJlciBpdC4gICovIFwKKwkJaW50IF9fZXJyID0gLShyZXMpOyBcCisJCWVycm5vID0gX19lcnI7IFwKKwkJcmVzID0gLTE7IFwKKwl9IFwKKwlyZXR1cm4gKHR5cGUpIChyZXMpOyBcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIF9zeXNjYWxsMCh0eXBlLCBuYW1lKQkJCQkJCQlcCit0eXBlIG5hbWUodm9pZCkJCQkJCQkJCQlcCit7CQkJCQkJCQkJCVwKKyAgbG9uZyBfX3JlczsJCQkJCQkJCQlcCisgIF9fYXNtX18gX192b2xhdGlsZV9fICgibW92ZWwJJTEsICUlZDBcblx0IgkJCQkJXAorICAJCQkidHJhcAkjMFxuXHQiCQkJCQkJXAorICAJCQkibW92ZWwJJSVkMCwgJTAiCQkJCQlcCisJCQk6ICI9ZyIgKF9fcmVzKQkJCQkJCVwKKwkJCTogImkiIChfX05SXyMjbmFtZSkJCQkJCVwKKwkJCTogImNjIiwgIiVkMCIpOwkJCQkJCVwKKyAgaWYgKCh1bnNpZ25lZCBsb25nKShfX3JlcykgPj0gKHVuc2lnbmVkIGxvbmcpKC0xMjUpKSB7CQkJCVwKKyAgICBlcnJubyA9IC1fX3JlczsJCQkJCQkJCVwKKyAgICBfX3JlcyA9IC0xOwkJCQkJCQkJCVwKKyAgfQkJCQkJCQkJCQlcCisgIHJldHVybiAodHlwZSlfX3JlczsJCQkJCQkJCVwKK30KKworI2RlZmluZSBfc3lzY2FsbDEodHlwZSwgbmFtZSwgYXR5cGUsIGEpCQkJCQkJXAordHlwZSBuYW1lKGF0eXBlIGEpCQkJCQkJCQlcCit7CQkJCQkJCQkJCVwKKyAgbG9uZyBfX3JlczsJCQkJCQkJCQlcCisgIF9fYXNtX18gX192b2xhdGlsZV9fICgibW92ZWwJJTIsICUlZDFcblx0IgkJCQkJXAorICAJCQkibW92ZWwJJTEsICUlZDBcblx0IgkJCQkJXAorICAJCQkidHJhcAkjMFxuXHQiCQkJCQkJXAorICAJCQkibW92ZWwJJSVkMCwgJTAiCQkJCQlcCisJCQk6ICI9ZyIgKF9fcmVzKQkJCQkJCVwKKwkJCTogImkiIChfX05SXyMjbmFtZSksCQkJCQlcCisJCQkgICJnIiAoKGxvbmcpYSkJCQkJCQlcCisJCQk6ICJjYyIsICIlZDAiLCAiJWQxIik7CQkJCQlcCisgIGlmICgodW5zaWduZWQgbG9uZykoX19yZXMpID49ICh1bnNpZ25lZCBsb25nKSgtMTI1KSkgewkJCQlcCisgICAgZXJybm8gPSAtX19yZXM7CQkJCQkJCQlcCisgICAgX19yZXMgPSAtMTsJCQkJCQkJCQlcCisgIH0JCQkJCQkJCQkJXAorICByZXR1cm4gKHR5cGUpX19yZXM7CQkJCQkJCQlcCit9CisKKyNkZWZpbmUgX3N5c2NhbGwyKHR5cGUsIG5hbWUsIGF0eXBlLCBhLCBidHlwZSwgYikJCQkJXAordHlwZSBuYW1lKGF0eXBlIGEsIGJ0eXBlIGIpCQkJCQkJCVwKK3sJCQkJCQkJCQkJXAorICBsb25nIF9fcmVzOwkJCQkJCQkJCVwKKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtb3ZlbAklMywgJSVkMlxuXHQiCQkJCQlcCisgIAkJCSJtb3ZlbAklMiwgJSVkMVxuXHQiCQkJCQlcCisJCQkibW92ZWwJJTEsICUlZDBcblx0IgkJCQkJXAorICAJCQkidHJhcAkjMFxuXHQiCQkJCQkJXAorICAJCQkibW92ZWwJJSVkMCwgJTAiCQkJCQlcCisJCQk6ICI9ZyIgKF9fcmVzKQkJCQkJCVwKKwkJCTogImkiIChfX05SXyMjbmFtZSksCQkJCQlcCisJCQkgICJhIiAoKGxvbmcpYSksCQkJCQlcCisJCQkgICJnIiAoKGxvbmcpYikJCQkJCQlcCisJCQk6ICJjYyIsICIlZDAiLCAiJWQxIiwgIiVkMiIpOwkJCQlcCisgIGlmICgodW5zaWduZWQgbG9uZykoX19yZXMpID49ICh1bnNpZ25lZCBsb25nKSgtMTI1KSkgewkJCQlcCisgICAgZXJybm8gPSAtX19yZXM7CQkJCQkJCQlcCisgICAgX19yZXMgPSAtMTsJCQkJCQkJCQlcCisgIH0JCQkJCQkJCQkJXAorICByZXR1cm4gKHR5cGUpX19yZXM7CQkJCQkJCQlcCit9CisKKyNkZWZpbmUgX3N5c2NhbGwzKHR5cGUsIG5hbWUsIGF0eXBlLCBhLCBidHlwZSwgYiwgY3R5cGUsIGMpCQkJXAordHlwZSBuYW1lKGF0eXBlIGEsIGJ0eXBlIGIsIGN0eXBlIGMpCQkJCQkJXAorewkJCQkJCQkJCQlcCisgIGxvbmcgX19yZXM7CQkJCQkJCQkJXAorICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1vdmVsCSU0LCAlJWQzXG5cdCIJCQkJCVwKKwkJCSJtb3ZlbAklMywgJSVkMlxuXHQiCQkJCQlcCisgIAkJCSJtb3ZlbAklMiwgJSVkMVxuXHQiCQkJCQlcCisJCQkibW92ZWwJJTEsICUlZDBcblx0IgkJCQkJXAorICAJCQkidHJhcAkjMFxuXHQiCQkJCQkJXAorICAJCQkibW92ZWwJJSVkMCwgJTAiCQkJCQlcCisJCQk6ICI9ZyIgKF9fcmVzKQkJCQkJCVwKKwkJCTogImkiIChfX05SXyMjbmFtZSksCQkJCQlcCisJCQkgICJhIiAoKGxvbmcpYSksCQkJCQlcCisJCQkgICJhIiAoKGxvbmcpYiksCQkJCQlcCisJCQkgICJnIiAoKGxvbmcpYykJCQkJCQlcCisJCQk6ICJjYyIsICIlZDAiLCAiJWQxIiwgIiVkMiIsICIlZDMiKTsJCQlcCisgIGlmICgodW5zaWduZWQgbG9uZykoX19yZXMpID49ICh1bnNpZ25lZCBsb25nKSgtMTI1KSkgewkJCQlcCisgICAgZXJybm8gPSAtX19yZXM7CQkJCQkJCQlcCisgICAgX19yZXMgPSAtMTsJCQkJCQkJCQlcCisgIH0JCQkJCQkJCQkJXAorICByZXR1cm4gKHR5cGUpX19yZXM7CQkJCQkJCQlcCit9CisKKyNkZWZpbmUgX3N5c2NhbGw0KHR5cGUsIG5hbWUsIGF0eXBlLCBhLCBidHlwZSwgYiwgY3R5cGUsIGMsIGR0eXBlLCBkKQkJXAordHlwZSBuYW1lKGF0eXBlIGEsIGJ0eXBlIGIsIGN0eXBlIGMsIGR0eXBlIGQpCQkJCQlcCit7CQkJCQkJCQkJCVwKKyAgbG9uZyBfX3JlczsJCQkJCQkJCQlcCisgIF9fYXNtX18gX192b2xhdGlsZV9fICgibW92ZWwJJTUsICUlZDRcblx0IgkJCQkJXAorCQkJIm1vdmVsCSU0LCAlJWQzXG5cdCIJCQkJCVwKKwkJCSJtb3ZlbAklMywgJSVkMlxuXHQiCQkJCQlcCisgIAkJCSJtb3ZlbAklMiwgJSVkMVxuXHQiCQkJCQlcCisJCQkibW92ZWwJJTEsICUlZDBcblx0IgkJCQkJXAorICAJCQkidHJhcAkjMFxuXHQiCQkJCQkJXAorICAJCQkibW92ZWwJJSVkMCwgJTAiCQkJCQlcCisJCQk6ICI9ZyIgKF9fcmVzKQkJCQkJCVwKKwkJCTogImkiIChfX05SXyMjbmFtZSksCQkJCQlcCisJCQkgICJhIiAoKGxvbmcpYSksCQkJCQlcCisJCQkgICJhIiAoKGxvbmcpYiksCQkJCQlcCisJCQkgICJhIiAoKGxvbmcpYyksCQkJCQlcCisJCQkgICJnIiAoKGxvbmcpZCkJCQkJCQlcCisJCQk6ICJjYyIsICIlZDAiLCAiJWQxIiwgIiVkMiIsICIlZDMiLAkJCVwKKwkJCSAgIiVkNCIpOwkJCQkJCVwKKyAgaWYgKCh1bnNpZ25lZCBsb25nKShfX3JlcykgPj0gKHVuc2lnbmVkIGxvbmcpKC0xMjUpKSB7CQkJCVwKKyAgICBlcnJubyA9IC1fX3JlczsJCQkJCQkJCVwKKyAgICBfX3JlcyA9IC0xOwkJCQkJCQkJCVwKKyAgfQkJCQkJCQkJCQlcCisgIHJldHVybiAodHlwZSlfX3JlczsJCQkJCQkJCVwKK30KKworI2RlZmluZSBfc3lzY2FsbDUodHlwZSwgbmFtZSwgYXR5cGUsIGEsIGJ0eXBlLCBiLCBjdHlwZSwgYywgZHR5cGUsIGQsIGV0eXBlLCBlKQlcCit0eXBlIG5hbWUoYXR5cGUgYSwgYnR5cGUgYiwgY3R5cGUgYywgZHR5cGUgZCwgZXR5cGUgZSkJCQkJXAorewkJCQkJCQkJCQlcCisgIGxvbmcgX19yZXM7CQkJCQkJCQkJXAorICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1vdmVsCSU2LCAlJWQ1XG5cdCIJCQkJCVwKKwkJCSJtb3ZlbAklNSwgJSVkNFxuXHQiCQkJCQlcCisJCQkibW92ZWwJJTQsICUlZDNcblx0IgkJCQkJXAorCQkJIm1vdmVsCSUzLCAlJWQyXG5cdCIJCQkJCVwKKyAgCQkJIm1vdmVsCSUyLCAlJWQxXG5cdCIJCQkJCVwKKwkJCSJtb3ZlbAklMSwgJSVkMFxuXHQiCQkJCQlcCisgIAkJCSJ0cmFwCSMwXG5cdCIJCQkJCQlcCisgIAkJCSJtb3ZlbAklJWQwLCAlMCIJCQkJCVwKKwkJCTogIj1nIiAoX19yZXMpCQkJCQkJXAorCQkJOiAiaSIgKF9fTlJfIyNuYW1lKSwJCQkJCVwKKwkJCSAgImEiICgobG9uZylhKSwJCQkJCVwKKwkJCSAgImEiICgobG9uZyliKSwJCQkJCVwKKwkJCSAgImEiICgobG9uZyljKSwJCQkJCVwKKwkJCSAgImEiICgobG9uZylkKSwJCQkJCVwKKwkJCSAgImciICgobG9uZyllKQkJCQkJCVwKKwkJCTogImNjIiwgIiVkMCIsICIlZDEiLCAiJWQyIiwgIiVkMyIsCQkJXAorCQkJICAiJWQ0IiwgIiVkNSIpOwkJCQkJXAorICBpZiAoKHVuc2lnbmVkIGxvbmcpKF9fcmVzKSA+PSAodW5zaWduZWQgbG9uZykoLTEyNSkpIHsJCQkJXAorICAgIGVycm5vID0gLV9fcmVzOwkJCQkJCQkJXAorICAgIF9fcmVzID0gLTE7CQkJCQkJCQkJXAorICB9CQkJCQkJCQkJCVwKKyAgcmV0dXJuICh0eXBlKV9fcmVzOwkJCQkJCQkJXAorfQorCisjaWZkZWYgX19LRVJORUxfXworI2RlZmluZSBfX0FSQ0hfV0FOVF9JUENfUEFSU0VfVkVSU0lPTgorI2RlZmluZSBfX0FSQ0hfV0FOVF9PTERfUkVBRERJUgorI2RlZmluZSBfX0FSQ0hfV0FOVF9PTERfU1RBVAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TVEFUNjQKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0FMQVJNCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19HRVRIT1NUTkFNRQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfUEFVU0UKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NHRVRNQVNLCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdOQUwKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1RJTUUKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1VUSU1FCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19XQUlUUElECisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TT0NLRVRDQUxMCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19GQURWSVNFNjQKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0dFVFBHUlAKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0xMU0VFSworI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfTklDRQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfT0xEX0dFVFJMSU1JVAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfT0xEVU1PVU5UCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdQRU5ESU5HCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdQUk9DTUFTSworI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfUlRfU0lHQUNUSU9OCisjZW5kaWYKKworI2lmZGVmIF9fS0VSTkVMX1NZU0NBTExTX18KKworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyoKKyAqIHdlIG5lZWQgdGhpcyBpbmxpbmUgLSBmb3JraW5nIGZyb20ga2VybmVsIHNwYWNlIHdpbGwgcmVzdWx0CisgKiBpbiBOTyBDT1BZIE9OIFdSSVRFICghISEpLCB1bnRpbCBhbiBleGVjdmUgaXMgZXhlY3V0ZWQuIFRoaXMKKyAqIGlzIG5vIHByb2JsZW0sIGJ1dCBmb3IgdGhlIHN0YWNrLiBUaGlzIGlzIGhhbmRsZWQgYnkgbm90IGxldHRpbmcKKyAqIG1haW4oKSB1c2UgdGhlIHN0YWNrIGF0IGFsbCBhZnRlciBmb3JrKCkuIFRodXMsIG5vIGZ1bmN0aW9uCisgKiBjYWxscyAtIHdoaWNoIG1lYW5zIGlubGluZSBjb2RlIGZvciBmb3JrIHRvbywgYXMgb3RoZXJ3aXNlIHdlCisgKiB3b3VsZCB1c2UgdGhlIHN0YWNrIHVwb24gZXhpdCBmcm9tICdmb3JrKCknLgorICoKKyAqIEFjdHVhbGx5IG9ubHkgcGF1c2UgYW5kIGZvcmsgYXJlIG5lZWRlZCBpbmxpbmUsIHNvIHRoYXQgdGhlcmUKKyAqIHdvbid0IGJlIGFueSBtZXNzaW5nIHdpdGggdGhlIHN0YWNrIGZyb20gbWFpbigpLCBidXQgd2UgZGVmaW5lCisgKiBzb21lIG90aGVycyB0b28uCisgKi8KKyNkZWZpbmUgX19OUl9fZXhpdCBfX05SX2V4aXQKK3N0YXRpYyBpbmxpbmUgX3N5c2NhbGwwKGludCxwYXVzZSkKK3N0YXRpYyBpbmxpbmUgX3N5c2NhbGwwKGludCxzeW5jKQorc3RhdGljIGlubGluZSBfc3lzY2FsbDAocGlkX3Qsc2V0c2lkKQorc3RhdGljIGlubGluZSBfc3lzY2FsbDMoaW50LHdyaXRlLGludCxmZCxjb25zdCBjaGFyICosYnVmLG9mZl90LGNvdW50KQorc3RhdGljIGlubGluZSBfc3lzY2FsbDMoaW50LHJlYWQsaW50LGZkLGNoYXIgKixidWYsb2ZmX3QsY291bnQpCitzdGF0aWMgaW5saW5lIF9zeXNjYWxsMyhvZmZfdCxsc2VlayxpbnQsZmQsb2ZmX3Qsb2Zmc2V0LGludCxjb3VudCkKK3N0YXRpYyBpbmxpbmUgX3N5c2NhbGwxKGludCxkdXAsaW50LGZkKQorc3RhdGljIGlubGluZSBfc3lzY2FsbDMoaW50LGV4ZWN2ZSxjb25zdCBjaGFyICosZmlsZSxjaGFyICoqLGFyZ3YsY2hhciAqKixlbnZwKQorc3RhdGljIGlubGluZSBfc3lzY2FsbDMoaW50LG9wZW4sY29uc3QgY2hhciAqLGZpbGUsaW50LGZsYWcsaW50LG1vZGUpCitzdGF0aWMgaW5saW5lIF9zeXNjYWxsMShpbnQsY2xvc2UsaW50LGZkKQorc3RhdGljIGlubGluZSBfc3lzY2FsbDEoaW50LF9leGl0LGludCxleGl0Y29kZSkKK3N0YXRpYyBpbmxpbmUgX3N5c2NhbGwzKHBpZF90LHdhaXRwaWQscGlkX3QscGlkLGludCAqLHdhaXRfc3RhdCxpbnQsb3B0aW9ucykKK3N0YXRpYyBpbmxpbmUgX3N5c2NhbGwxKGludCxkZWxldGVfbW9kdWxlLGNvbnN0IGNoYXIgKixuYW1lKQorCitzdGF0aWMgaW5saW5lIHBpZF90IHdhaXQoaW50ICogd2FpdF9zdGF0KQoreworCXJldHVybiB3YWl0cGlkKC0xLHdhaXRfc3RhdCwwKTsKK30KK2FzbWxpbmthZ2UgbG9uZyBzeXNfbW1hcDIodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwKKwkJCXVuc2lnbmVkIGxvbmcgcHJvdCwgdW5zaWduZWQgbG9uZyBmbGFncywKKwkJCXVuc2lnbmVkIGxvbmcgZmQsIHVuc2lnbmVkIGxvbmcgcGdvZmYpOworYXNtbGlua2FnZSBpbnQgc3lzX2V4ZWN2ZShjaGFyICpuYW1lLCBjaGFyICoqYXJndiwgY2hhciAqKmVudnApOworYXNtbGlua2FnZSBpbnQgc3lzX3BpcGUodW5zaWduZWQgbG9uZyAqZmlsZGVzKTsKK2FzbWxpbmthZ2UgaW50IHN5c19wdHJhY2UobG9uZyByZXF1ZXN0LCBsb25nIHBpZCwgbG9uZyBhZGRyLCBsb25nIGRhdGEpOworc3RydWN0IHB0X3JlZ3M7CitpbnQgc3lzX3JlcXVlc3RfaXJxKHVuc2lnbmVkIGludCwKKwkJCWlycXJldHVybl90ICgqKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKiksCisJCQl1bnNpZ25lZCBsb25nLCBjb25zdCBjaGFyICosIHZvaWQgKik7Cit2b2lkIHN5c19mcmVlX2lycSh1bnNpZ25lZCBpbnQsIHZvaWQgKik7CitzdHJ1Y3Qgc2lnYWN0aW9uOworYXNtbGlua2FnZSBsb25nIHN5c19ydF9zaWdhY3Rpb24oaW50IHNpZywKKwkJCQljb25zdCBzdHJ1Y3Qgc2lnYWN0aW9uIF9fdXNlciAqYWN0LAorCQkJCXN0cnVjdCBzaWdhY3Rpb24gX191c2VyICpvYWN0LAorCQkJCXNpemVfdCBzaWdzZXRzaXplKTsKKworI2VuZGlmCisKKy8qCisgKiAiQ29uZGl0aW9uYWwiIHN5c2NhbGxzCisgKgorICogV2hhdCB3ZSB3YW50IGlzIF9fYXR0cmlidXRlX18oKHdlYWssYWxpYXMoInN5c19uaV9zeXNjYWxsIikpKSwKKyAqIGJ1dCBpdCBkb2Vzbid0IHdvcmsgb24gYWxsIHRvb2xjaGFpbnMsIHNvIHdlIGp1c3QgZG8gaXQgYnkgaGFuZAorICovCisjZGVmaW5lIGNvbmRfc3lzY2FsbCh4KSBhc20oIi53ZWFrXHQiICN4ICJcblx0LnNldFx0IiAjeCAiLHN5c19uaV9zeXNjYWxsIikKKworI2VuZGlmIC8qIF9BU01fTTY4S19VTklTVERfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS91c2VyLmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvdXNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1YTU1NWIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvdXNlci5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tbTY4ay91c2VyLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzLzgyNTNwaXQuaCBiL2luY2x1ZGUvYXNtLW1pcHMvODI1M3BpdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4NWY3ODQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzLzgyNTNwaXQuaApAQCAtMCwwICsxLDEwIEBACisvKgorICogODI1My84MjU0IFByb2dyYW1tYWJsZSBJbnRlcnZhbCBUaW1lcgorICovCisKKyNpZm5kZWYgXzgyNTNQSVRfSAorI2RlZmluZSBfODI1M1BJVF9ICisKKyNkZWZpbmUgUElUX1RJQ0tfUkFURSAJMTE5MzE4MlVMCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9hLm91dC5oIGIvaW5jbHVkZS9hc20tbWlwcy9hLm91dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0MmIzMDkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2Eub3V0LmgKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NCAtIDE5OTksIDIwMDMgYnkgUmFsZiBCYWVjaGxlCisgKi8KKyNpZm5kZWYgX0FTTV9BX09VVF9ICisjZGVmaW5lIF9BU01fQV9PVVRfSAorCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNlbmRpZgorCitzdHJ1Y3QgZXhlYworeworCXVuc2lnbmVkIGxvbmcgYV9pbmZvOwkvKiBVc2UgbWFjcm9zIE5fTUFHSUMsIGV0YyBmb3IgYWNjZXNzICovCisJdW5zaWduZWQgYV90ZXh0OwkvKiBsZW5ndGggb2YgdGV4dCwgaW4gYnl0ZXMgKi8KKwl1bnNpZ25lZCBhX2RhdGE7CS8qIGxlbmd0aCBvZiBkYXRhLCBpbiBieXRlcyAqLworCXVuc2lnbmVkIGFfYnNzOwkJLyogbGVuZ3RoIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSBhcmVhIGZvcgorCQkJCSAgICBmaWxlLCBpbiBieXRlcyAqLworCXVuc2lnbmVkIGFfc3ltczsJLyogbGVuZ3RoIG9mIHN5bWJvbCB0YWJsZSBkYXRhIGluIGZpbGUsCisJCQkJICAgaW4gYnl0ZXMgKi8KKwl1bnNpZ25lZCBhX2VudHJ5OwkvKiBzdGFydCBhZGRyZXNzICovCisJdW5zaWduZWQgYV90cnNpemU7CS8qIGxlbmd0aCBvZiByZWxvY2F0aW9uIGluZm8gZm9yIHRleHQsIGluCisJCQkJICAgIGJ5dGVzICovCisJdW5zaWduZWQgYV9kcnNpemU7CS8qIGxlbmd0aCBvZiByZWxvY2F0aW9uIGluZm8gZm9yIGRhdGEsIGluIGJ5dGVzICovCit9OworCisjZGVmaW5lIE5fVFJTSVpFKGEpCSgoYSkuYV90cnNpemUpCisjZGVmaW5lIE5fRFJTSVpFKGEpCSgoYSkuYV9kcnNpemUpCisjZGVmaW5lIE5fU1lNU0laRShhKQkoKGEpLmFfc3ltcykKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2lmZGVmIENPTkZJR19NSVBTMzIKKyNkZWZpbmUgU1RBQ0tfVE9QCVRBU0tfU0laRQorI2VuZGlmCisjaWZkZWYgQ09ORklHX01JUFM2NAorI2RlZmluZSBTVEFDS19UT1AJKGN1cnJlbnQtPnRocmVhZC5tZmxhZ3MgJiBNRl8zMkJJVF9BRERSID8gVEFTS19TSVpFMzIgOiBUQVNLX1NJWkUpCisjZW5kaWYKKworI2VuZGlmCisKKyNlbmRpZiAvKiBfQVNNX0FfT1VUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvYWRkcnNwYWNlLmggYi9pbmNsdWRlL2FzbS1taXBzL2FkZHJzcGFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjYWE4YzQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2FkZHJzcGFjZS5oCkBAIC0wLDAgKzEsMTg3IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk2LCA5OSBSYWxmIEJhZWNobGUKKyAqIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMiAgTWFjaWVqIFcuIFJvenlja2kKKyAqIENvcHlyaWdodCAoQykgMTk5MCwgMTk5OSBieSBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCisgKi8KKyNpZm5kZWYgX0FTTV9BRERSU1BBQ0VfSAorI2RlZmluZSBfQVNNX0FERFJTUEFDRV9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxzcGFjZXMuaD4KKworLyoKKyAqICBDb25maWd1cmUgbGFuZ3VhZ2UKKyAqLworI2lmZGVmIF9fQVNTRU1CTFlfXworI2RlZmluZSBfQVRZUEVfCisjZGVmaW5lIF9BVFlQRTMyXworI2RlZmluZSBfQVRZUEU2NF8KKyNlbHNlCisjZGVmaW5lIF9BVFlQRV8JCV9fUFRSRElGRl9UWVBFX18KKyNkZWZpbmUgX0FUWVBFMzJfCWludAorI2RlZmluZSBfQVRZUEU2NF8JbG9uZyBsb25nCisjZW5kaWYKKworLyoKKyAqICAzMi1iaXQgTUlQUyBhZGRyZXNzIHNwYWNlcworICovCisjaWZkZWYgX19BU1NFTUJMWV9fCisjZGVmaW5lIF9BQ0FTVDMyXworI2RlZmluZSBfQUNBU1Q2NF8KKyNlbHNlCisjZGVmaW5lIF9BQ0FTVDMyXwkJKF9BVFlQRV8pKF9BVFlQRTMyXykJLyogd2lkZW4gaWYgbmVjZXNzYXJ5ICovCisjZGVmaW5lIF9BQ0FTVDY0XwkJKF9BVFlQRTY0XykJCS8qIGRvIF9ub3RfIG5hcnJvdyAqLworI2VuZGlmCisKKy8qCisgKiBSZXR1cm5zIHRoZSBrZXJuZWwgc2VnbWVudCBiYXNlIG9mIGEgZ2l2ZW4gYWRkcmVzcworICovCisjZGVmaW5lIEtTRUdYKGEpCQkoKF9BQ0FTVDMyXyAoYSkpICYgMHhlMDAwMDAwMCkKKworLyoKKyAqIFJldHVybnMgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgYSBDS1NFR3ggLyBYS1BIWVMgYWRkcmVzcworICovCisjZGVmaW5lIENQSFlTQUREUihhKQkJKChfQUNBU1QzMl8gKGEpKSAmIDB4MWZmZmZmZmYpCisjZGVmaW5lIFhQSFlTQUREUihhKSAgICAgICAgICAgICgoX0FDQVNUNjRfIChhKSkgJiAweDAwMDAwMGZmZmZmZmZmZmYpCisKKyNpZmRlZiBDT05GSUdfTUlQUzY0CisKKy8qCisgKiBNZW1vcnkgc2VnbWVudHMgKDY0Yml0IGtlcm5lbCBtb2RlIGFkZHJlc3NlcykKKyAqIFRoZSBjb21wYXRpYmlsaXR5IHNlZ21lbnRzIHVzZSB0aGUgZnVsbCA2NC1iaXQgc2lnbiBleHRlbmRlZCB2YWx1ZS4gIE5vdGUKKyAqIHRoZSBSODAwMCBkb2Vzbid0IGhhdmUgdGhlbSBzbyBkb24ndCByZWZlcmVuY2UgdGhlc2UgaW4gZ2VuZXJpYyBNSVBTIGNvZGUuCisgKi8KKyNkZWZpbmUgWEtVU0VHCQkJMHgwMDAwMDAwMDAwMDAwMDAwCisjZGVmaW5lIFhLU1NFRwkJCTB4NDAwMDAwMDAwMDAwMDAwMAorI2RlZmluZSBYS1BIWVMJCQkweDgwMDAwMDAwMDAwMDAwMDAKKyNkZWZpbmUgWEtTRUcJCQkweGMwMDAwMDAwMDAwMDAwMDAKKyNkZWZpbmUgQ0tTRUcwCQkJMHhmZmZmZmZmZjgwMDAwMDAwCisjZGVmaW5lIENLU0VHMQkJCTB4ZmZmZmZmZmZhMDAwMDAwMAorI2RlZmluZSBDS1NTRUcJCQkweGZmZmZmZmZmYzAwMDAwMDAKKyNkZWZpbmUgQ0tTRUczCQkJMHhmZmZmZmZmZmUwMDAwMDAwCisKKyNkZWZpbmUgQ0tTRUcwQUREUihhKQkJKENQSFlTQUREUihhKSB8IENLU0VHMCkKKyNkZWZpbmUgQ0tTRUcxQUREUihhKQkJKENQSFlTQUREUihhKSB8IENLU0VHMSkKKyNkZWZpbmUgQ0tTRUcyQUREUihhKQkJKENQSFlTQUREUihhKSB8IENLU0VHMikKKyNkZWZpbmUgQ0tTRUczQUREUihhKQkJKENQSFlTQUREUihhKSB8IENLU0VHMykKKworI2Vsc2UKKworI2RlZmluZSBDS1NFRzBBRERSKGEpCQkoQ1BIWVNBRERSKGEpIHwgS1NFRzApCisjZGVmaW5lIENLU0VHMUFERFIoYSkJCShDUEhZU0FERFIoYSkgfCBLU0VHMSkKKyNkZWZpbmUgQ0tTRUcyQUREUihhKQkJKENQSFlTQUREUihhKSB8IEtTRUcyKQorI2RlZmluZSBDS1NFRzNBRERSKGEpCQkoQ1BIWVNBRERSKGEpIHwgS1NFRzMpCisKKy8qCisgKiBNYXAgYW4gYWRkcmVzcyB0byBhIGNlcnRhaW4ga2VybmVsIHNlZ21lbnQKKyAqLworI2RlZmluZSBLU0VHMEFERFIoYSkJCShDUEhZU0FERFIoYSkgfCBLU0VHMCkKKyNkZWZpbmUgS1NFRzFBRERSKGEpCQkoQ1BIWVNBRERSKGEpIHwgS1NFRzEpCisjZGVmaW5lIEtTRUcyQUREUihhKQkJKENQSFlTQUREUihhKSB8IEtTRUcyKQorI2RlZmluZSBLU0VHM0FERFIoYSkJCShDUEhZU0FERFIoYSkgfCBLU0VHMykKKworLyoKKyAqIE1lbW9yeSBzZWdtZW50cyAoMzJiaXQga2VybmVsIG1vZGUgYWRkcmVzc2VzKQorICogVGhlc2UgYXJlIHRoZSB0cmFkaXRpb25hbCBuYW1lcyB1c2VkIGluIHRoZSAzMi1iaXQgdW5pdmVyc2UuCisgKi8KKyNkZWZpbmUgS1VTRUcJCQkweDAwMDAwMDAwCisjZGVmaW5lIEtTRUcwCQkJMHg4MDAwMDAwMAorI2RlZmluZSBLU0VHMQkJCTB4YTAwMDAwMDAKKyNkZWZpbmUgS1NFRzIJCQkweGMwMDAwMDAwCisjZGVmaW5lIEtTRUczCQkJMHhlMDAwMDAwMAorCisjZGVmaW5lIENLVVNFRwkJCTB4MDAwMDAwMDAKKyNkZWZpbmUgQ0tTRUcwCQkJMHg4MDAwMDAwMAorI2RlZmluZSBDS1NFRzEJCQkweGEwMDAwMDAwCisjZGVmaW5lIENLU0VHMgkJCTB4YzAwMDAwMDAKKyNkZWZpbmUgQ0tTRUczCQkJMHhlMDAwMDAwMAorCisjZW5kaWYKKworLyoKKyAqIENhY2hlIG1vZGVzIGZvciBYS1BIWVMgYWRkcmVzcyBjb252ZXJzaW9uIG1hY3JvcworICovCisjZGVmaW5lIEtfQ0FMR19DT0hfRVhDTDFfTk9MMgkwCisjZGVmaW5lIEtfQ0FMR19DT0hfU0hSTDFfTk9MMgkxCisjZGVmaW5lIEtfQ0FMR19VTkNBQ0hFRAkJMgorI2RlZmluZSBLX0NBTEdfTk9OQ09IRVJFTlQJMworI2RlZmluZSBLX0NBTEdfQ09IX0VYQ0wJCTQKKyNkZWZpbmUgS19DQUxHX0NPSF9TSEFSRUFCTEUJNQorI2RlZmluZSBLX0NBTEdfTk9UVVNFRAkJNgorI2RlZmluZSBLX0NBTEdfVU5DQUNIRURfQUNDRUwJNworCisvKgorICogNjQtYml0IGFkZHJlc3MgY29udmVyc2lvbnMKKyAqLworI2RlZmluZSBQSFlTX1RPX1hLU0VHX1VOQ0FDSEVEKHApCVBIWVNfVE9fWEtQSFlTKEtfQ0FMR19VTkNBQ0hFRCwocCkpCisjZGVmaW5lIFBIWVNfVE9fWEtTRUdfQ0FDSEVEKHApCQlQSFlTX1RPX1hLUEhZUyhLX0NBTEdfQ09IX1NIQVJFQUJMRSwocCkpCisjZGVmaW5lIFhLUEhZU19UT19QSFlTKHApCQkoKHApICYgVE9fUEhZU19NQVNLKQorI2RlZmluZSBQSFlTX1RPX1hLUEhZUyhjbSxhKQkJKDB4ODAwMDAwMDAwMDAwMDAwMCB8ICgoY20pPDw1OSkgfCAoYSkpCisKKyNpZiBkZWZpbmVkIChDT05GSUdfQ1BVX1I0MzAwKQkJCQkJCVwKKyAgICB8fCBkZWZpbmVkIChDT05GSUdfQ1BVX1I0WDAwKQkJCQkJXAorICAgIHx8IGRlZmluZWQgKENPTkZJR19DUFVfUjUwMDApCQkJCQlcCisgICAgfHwgZGVmaW5lZCAoQ09ORklHX0NQVV9ORVZBREEpCQkJCQlcCisgICAgfHwgZGVmaW5lZCAoQ09ORklHX0NQVV9UWDQ5WFgpCQkJCQlcCisgICAgfHwgZGVmaW5lZCAoQ09ORklHX0NQVV9NSVBTNjQpCisjZGVmaW5lCUtVU0laRQkJCTB4MDAwMDAxMDAwMDAwMDAwMAkvKiAyXl40MCAqLworI2RlZmluZQlLVVNJWkVfNjQJCTB4MDAwMDAxMDAwMDAwMDAwMAkvKiAyXl40MCAqLworI2RlZmluZQlLMFNJWkUJCQkweDAwMDAwMDEwMDAwMDAwMDAJLyogMl5eMzYgKi8KKyNkZWZpbmUJSzFTSVpFCQkJMHgwMDAwMDAxMDAwMDAwMDAwCS8qIDJeXjM2ICovCisjZGVmaW5lCUsyU0laRQkJCTB4MDAwMDAwZmY4MDAwMDAwMAorI2RlZmluZQlLU0VHU0laRQkJMHgwMDAwMDBmZjgwMDAwMDAwCS8qIG1heCBzeXNzZWdzeiAqLworI2RlZmluZSBUT19QSFlTX01BU0sJCTB4MDAwMDAwMGZmZmZmZmZmZgkvKiAyXl4zNiAtIDEgKi8KKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoQ09ORklHX0NQVV9SODAwMCkKKy8qIFdlIGtlZXAgS1VTSVpFIGNvbnNpc3RlbnQgd2l0aCBSNDAwMCBmb3Igbm93ICgyXl40MCkgaW5zdGVhZCBvZiAoMl5eNDgpICovCisjZGVmaW5lCUtVU0laRQkJCTB4MDAwMDAxMDAwMDAwMDAwMAkvKiAyXl40MCAqLworI2RlZmluZQlLVVNJWkVfNjQJCTB4MDAwMDAxMDAwMDAwMDAwMAkvKiAyXl40MCAqLworI2RlZmluZQlLMFNJWkUJCQkweDAwMDAwMTAwMDAwMDAwMDAJLyogMl5eNDAgKi8KKyNkZWZpbmUJSzFTSVpFCQkJMHgwMDAwMDEwMDAwMDAwMDAwCS8qIDJeXjQwICovCisjZGVmaW5lCUsyU0laRQkJCTB4MDAwMTAwMDAwMDAwMDAwMAorI2RlZmluZQlLU0VHU0laRQkJMHgwMDAwMDEwMDAwMDAwMDAwCS8qIG1heCBzeXNzZWdzeiAqLworI2RlZmluZSBUT19QSFlTX01BU0sJCTB4MDAwMDAwZmZmZmZmZmZmZgkvKiAyXl40MCAtIDEgKi8KKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoQ09ORklHX0NQVV9SMTAwMDApCisjZGVmaW5lCUtVU0laRQkJCTB4MDAwMDAxMDAwMDAwMDAwMAkvKiAyXl40MCAqLworI2RlZmluZQlLVVNJWkVfNjQJCTB4MDAwMDAxMDAwMDAwMDAwMAkvKiAyXl40MCAqLworI2RlZmluZQlLMFNJWkUJCQkweDAwMDAwMTAwMDAwMDAwMDAJLyogMl5eNDAgKi8KKyNkZWZpbmUJSzFTSVpFCQkJMHgwMDAwMDEwMDAwMDAwMDAwCS8qIDJeXjQwICovCisjZGVmaW5lCUsyU0laRQkJCTB4MDAwMDBmZmY4MDAwMDAwMAorI2RlZmluZQlLU0VHU0laRQkJMHgwMDAwMGZmZjgwMDAwMDAwCS8qIG1heCBzeXNzZWdzeiAqLworI2RlZmluZSBUT19QSFlTX01BU0sJCTB4MDAwMDAwZmZmZmZmZmZmZgkvKiAyXl40MCAtIDEgKi8KKyNlbmRpZgorCisvKgorICogRnVydGhlciBuYW1lcyBmb3IgU0dJIHNvdXJjZSBjb21wYXRpYmlsaXR5LiAgVGhlc2UgYXJlIHN0b2xlbiBmcm9tCisgKiBJUklYJ3MgPHN5cy9taXBzX2FkZHJzcGFjZS5oPi4KKyAqLworI2RlZmluZSBLVUJBU0UJCQkwCisjZGVmaW5lIEtVU0laRV8zMgkJMHgwMDAwMDAwMDgwMDAwMDAwCS8qIEtVU0laRQorCQkJCQkJCSAgIGZvciBhIDMyIGJpdCBwcm9jICovCisjZGVmaW5lIEswQkFTRV9FWExfV1IJCTB4YTgwMDAwMDAwMDAwMDAwMAkvKiBleGNsdXNpdmUgb24gd3JpdGUgKi8KKyNkZWZpbmUgSzBCQVNFX05PTkNPSAkJMHg5ODAwMDAwMDAwMDAwMDAwCS8qIG5vbmNvaGVyZW50ICovCisjZGVmaW5lIEswQkFTRV9FWEwJCTB4YTAwMDAwMDAwMDAwMDAwMAkvKiBleGNsdXNpdmUgKi8KKworI2lmbmRlZiBDT05GSUdfQ1BVX1I4MDAwCisKKy8qCisgKiBUaGUgUjgwMDAgZG9lc24ndCBoYXZlIHRoZSAzMi1iaXQgY29tcGF0IHNwYWNlcyBzbyB3ZSBkb24ndCBkZWZpbmUgdGhlbQorICogaW4gb3JkZXIgdG8gY2F0Y2ggYnVncyBpbiB0aGUgc291cmNlIGNvZGUuCisgKi8KKworI2RlZmluZSBDT01QQVRfSzFCQVNFMzIJCTB4ZmZmZmZmZmZhMDAwMDAwMAorI2RlZmluZSBQSFlTX1RPX0NPTVBBVEsxKHgpCSgoeCkgfCBDT01QQVRfSzFCQVNFMzIpIC8qIDMyLWJpdCBjb21wYXQgazEgKi8KKworI2VuZGlmCisKKyNkZWZpbmUgS0RNX1RPX1BIWVMoeCkJCShfQUNBU1Q2NF8gKHgpICYgVE9fUEhZU19NQVNLKQorI2RlZmluZSBQSFlTX1RPX0swKHgpCQkoX0FDQVNUNjRfICh4KSB8IENBQ19CQVNFKQorCisjZW5kaWYgLyogX0FTTV9BRERSU1BBQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9hcmMvaGludi5oIGIvaW5jbHVkZS9hc20tbWlwcy9hcmMvaGludi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlNzkyYmYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2FyYy9oaW52LmgKQEAgLTAsMCArMSwxNzQgQEAKKy8qCisgKiBBUkNTIGhhcmR3YXJlL21lbW9yeSBpbnZlbnRvcnkvY29uZmlndXJhdGlvbiBhbmQgc3lzdGVtIElEIGRlZmluaXRpb25zLgorICovCisjaWZuZGVmIF9BU01fQVJDX0hJTlZfSAorI2RlZmluZSBfQVNNX0FSQ19ISU5WX0gKKworI2luY2x1ZGUgPGFzbS9hcmMvdHlwZXMuaD4KKworLyogY29uZmlndXJhdGlvbiBxdWVyeSBkZWZpbmVzICovCit0eXBlZGVmIGVudW0gY29uZmlnY2xhc3MgeworCVN5c3RlbUNsYXNzLAorCVByb2Nlc3NvckNsYXNzLAorCUNhY2hlQ2xhc3MsCisjaWZuZGVmCV9OVF9QUk9NCisJTWVtb3J5Q2xhc3MsCisJQWRhcHRlckNsYXNzLAorCUNvbnRyb2xsZXJDbGFzcywKKwlQZXJpcGhlcmFsQ2xhc3MKKyNlbHNlCS8qIF9OVF9QUk9NICovCisJQWRhcHRlckNsYXNzLAorCUNvbnRyb2xsZXJDbGFzcywKKwlQZXJpcGhlcmFsQ2xhc3MsCisJTWVtb3J5Q2xhc3MKKyNlbmRpZgkvKiBfTlRfUFJPTSAqLworfSBDT05GSUdDTEFTUzsKKwordHlwZWRlZiBlbnVtIGNvbmZpZ3R5cGUgeworCUFSQywKKwlDUFUsCisJRlBVLAorCVByaW1hcnlJQ2FjaGUsCisJUHJpbWFyeURDYWNoZSwKKwlTZWNvbmRhcnlJQ2FjaGUsCisJU2Vjb25kYXJ5RENhY2hlLAorCVNlY29uZGFyeUNhY2hlLAorI2lmbmRlZglfTlRfUFJPTQorCU1lbW9yeSwKKyNlbmRpZgorCUVJU0FBZGFwdGVyLAorCVRDQWRhcHRlciwKKwlTQ1NJQWRhcHRlciwKKwlEVElBZGFwdGVyLAorCU11bHRpRnVuY3Rpb25BZGFwdGVyLAorCURpc2tDb250cm9sbGVyLAorCVRhcGVDb250cm9sbGVyLAorCUNEUk9NQ29udHJvbGxlciwKKwlXT1JNQ29udHJvbGxlciwKKwlTZXJpYWxDb250cm9sbGVyLAorCU5ldHdvcmtDb250cm9sbGVyLAorCURpc3BsYXlDb250cm9sbGVyLAorCVBhcmFsbGVsQ29udHJvbGxlciwKKwlQb2ludGVyQ29udHJvbGxlciwKKwlLZXlib2FyZENvbnRyb2xsZXIsCisJQXVkaW9Db250cm9sbGVyLAorCU90aGVyQ29udHJvbGxlciwKKwlEaXNrUGVyaXBoZXJhbCwKKwlGbG9wcHlEaXNrUGVyaXBoZXJhbCwKKwlUYXBlUGVyaXBoZXJhbCwKKwlNb2RlbVBlcmlwaGVyYWwsCisJTW9uaXRvclBlcmlwaGVyYWwsCisJUHJpbnRlclBlcmlwaGVyYWwsCisJUG9pbnRlclBlcmlwaGVyYWwsCisJS2V5Ym9hcmRQZXJpcGhlcmFsLAorCVRlcm1pbmFsUGVyaXBoZXJhbCwKKwlMaW5lUGVyaXBoZXJhbCwKKwlOZXR3b3JrUGVyaXBoZXJhbCwKKyNpZmRlZglfTlRfUFJPTQorCU1lbW9yeSwKKyNlbmRpZgorCU90aGVyUGVyaXBoZXJhbCwKKworCS8qIG5ldyBzdHVmZiBmb3IgSVAzMCAqLworCS8qIGFkZGVkIHdpdGhvdXQgbW92aW5nIGFueXRoaW5nICovCisJLyogZXhjZXB0IEFOT05ZTU9VUy4gKi8KKworCVhUYWxrQWRhcHRlciwKKwlQQ0lBZGFwdGVyLAorCUdJT0FkYXB0ZXIsCisJVFBVQWRhcHRlciwKKworCUFub255bW91cworfSBDT05GSUdUWVBFOworCit0eXBlZGVmIGVudW0geworCUZhaWxlZCA9IDEsCisJUmVhZE9ubHkgPSAyLAorCVJlbW92YWJsZSA9IDQsCisJQ29uc29sZUluID0gOCwKKwlDb25zb2xlT3V0ID0gMTYsCisJSW5wdXQgPSAzMiwKKwlPdXRwdXQgPSA2NAorfSBJREVOVElGSUVSRkxBRzsKKworI2lmbmRlZiBOVUxMCQkJLyogZm9yIEdldENoaWxkKE5VTEwpOyAqLworI2RlZmluZQlOVUxMCTAKKyNlbmRpZgorCit1bmlvbiBrZXlfdSB7CisJc3RydWN0IHsKKyNpZmRlZglfTUlQU0VCCisJCXVuc2lnbmVkIGNoYXIgIGNfYnNpemU7CQkvKiBibG9jayBzaXplIGluIGxpbmVzICovCisJCXVuc2lnbmVkIGNoYXIgIGNfbHNpemU7CQkvKiBsaW5lIHNpemUgaW4gYnl0ZXMvdGFnICovCisJCXVuc2lnbmVkIHNob3J0IGNfc2l6ZTsJCS8qIGNhY2hlIHNpemUgaW4gNEsgcGFnZXMgKi8KKyNlbHNlCS8qIF9NSVBTRUwgKi8KKwkJdW5zaWduZWQgc2hvcnQgY19zaXplOwkJLyogY2FjaGUgc2l6ZSBpbiA0SyBwYWdlcyAqLworCQl1bnNpZ25lZCBjaGFyICBjX2xzaXplOwkJLyogbGluZSBzaXplIGluIGJ5dGVzL3RhZyAqLworCQl1bnNpZ25lZCBjaGFyICBjX2JzaXplOwkJLyogYmxvY2sgc2l6ZSBpbiBsaW5lcyAqLworI2VuZGlmCS8qIF9NSVBTRUwgKi8KKwl9IGNhY2hlOworCVVMT05HIEZ1bGxLZXk7Cit9OworCisjaWYgX01JUFNfU0lNID09IF9BQkk2NAorI2RlZmluZSBTR0lfQVJDU19WRVJTCTY0CQkJLyogc2dpIDY0LWJpdCB2ZXJzaW9uICovCisjZGVmaW5lIFNHSV9BUkNTX1JFVgkwCQkJLyogcmV2IC4wMCAqLworI2Vsc2UKKyNkZWZpbmUgU0dJX0FSQ1NfVkVSUwkxCQkJLyogZmlyc3QgdmVyc2lvbiAqLworI2RlZmluZSBTR0lfQVJDU19SRVYJMTAJCQkvKiByZXYgLjEwLCAzLzA0LzkyICovCisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgY29tcG9uZW50IHsKKwlDT05GSUdDTEFTUwlDbGFzczsKKwlDT05GSUdUWVBFCVR5cGU7CisJSURFTlRJRklFUkZMQUcJRmxhZ3M7CisJVVNIT1JUCQlWZXJzaW9uOworCVVTSE9SVAkJUmV2aXNpb247CisJVUxPTkcgCQlLZXk7CisJVUxPTkcJCUFmZmluaXR5TWFzazsKKwlVTE9ORwkJQ29uZmlndXJhdGlvbkRhdGFTaXplOworCVVMT05HCQlJZGVudGlmaWVyTGVuZ3RoOworCWNoYXIJCSpJZGVudGlmaWVyOworfSBDT01QT05FTlQ7CisKKy8qIGludGVybmFsIHN0cnVjdHVyZSB0aGF0IGhvbGRzIHBhdGhuYW1lIHBhcnNpbmcgZGF0YSAqLworc3RydWN0IGNmZ2RhdGEgeworCWNoYXIgKm5hbWU7CQkJLyogZnVsbCBuYW1lICovCisJaW50IG1pbmxlbjsJCQkvKiBtaW5pbXVtIGxlbmd0aCB0byBtYXRjaCAqLworCUNPTkZJR1RZUEUgdHlwZTsJCS8qIHR5cGUgb2YgdG9rZW4gKi8KK307CisKKy8qIFN5c3RlbSBJRCAqLwordHlwZWRlZiBzdHJ1Y3Qgc3lzdGVtaWQgeworCUNIQVIgVmVuZG9ySWRbOF07CisJQ0hBUiBQcm9kdWN0SWRbOF07Cit9IFNZU1RFTUlEOworCisvKiBtZW1vcnkgcXVlcnkgZnVuY3Rpb25zICovCit0eXBlZGVmIGVudW0gbWVtb3J5dHlwZSB7CisJRXhjZXB0aW9uQmxvY2ssCisJU1BCUGFnZSwJCQkvKiBBUkNTID09IFN5c3RlbVBhcmFtZXRlckJsb2NrICovCisjaWZuZGVmCV9OVF9QUk9NCisJRnJlZUNvbnRpZ3VvdXMsCisJRnJlZU1lbW9yeSwKKwlCYWRNZW1vcnksCisJTG9hZGVkUHJvZ3JhbSwKKwlGaXJtd2FyZVRlbXBvcmFyeSwKKwlGaXJtd2FyZVBlcm1hbmVudAorI2Vsc2UJLyogX05UX1BST00gKi8KKwlGcmVlTWVtb3J5LAorCUJhZE1lbW9yeSwKKwlMb2FkZWRQcm9ncmFtLAorCUZpcm13YXJlVGVtcG9yYXJ5LAorCUZpcm13YXJlUGVybWFuZW50LAorCUZyZWVDb250aWd1b3VzCisjZW5kaWYJLyogX05UX1BST00gKi8KK30gTUVNT1JZVFlQRTsKKwordHlwZWRlZiBzdHJ1Y3QgbWVtb3J5ZGVzY3JpcHRvciB7CisJTUVNT1JZVFlQRQlUeXBlOworCUxPTkcJCUJhc2VQYWdlOworCUxPTkcJCVBhZ2VDb3VudDsKK30gTUVNT1JZREVTQ1JJUFRPUjsKKworI2VuZGlmIC8qIF9BU01fQVJDX0hJTlZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9hcmMvdHlwZXMuaCBiL2luY2x1ZGUvYXNtLW1pcHMvYXJjL3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJiNzI1YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvYXJjL3R5cGVzLmgKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAxOTk5IFJhbGYgQmFlY2hsZSAocmFsZkBnbnUub3JnKQorICogQ29weXJpZ2h0IDE5OTkgU2lsaWNvbiBHcmFwaGljcywgSW5jLgorICovCisjaWZuZGVmIF9BU01fQVJDX1RZUEVTX0gKKyNkZWZpbmUgX0FTTV9BUkNfVFlQRVNfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpZmRlZiBDT05GSUdfQVJDMzIKKwordHlwZWRlZiBjaGFyCQlDSEFSOwordHlwZWRlZiBzaG9ydAkJU0hPUlQ7Cit0eXBlZGVmIGxvbmcJCUxBUkdFX0lOVEVHRVIgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0RJX18pKSk7Cit0eXBlZGVmCWxvbmcJCUxPTkcgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIJVUNIQVI7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CVVTSE9SVDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZwlVTE9ORyBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKK3R5cGVkZWYgdm9pZAkJVk9JRDsKKworLyogVGhlIHBvaW50ZXIgdHlwZXMuICBOb3RlIHRoYXQgd2UncmUgdXNpbmcgYSA2NC1iaXQgY29tcGlsZXIgYnV0IGFsbAorICAgcG9pbnRlciBpbiB0aGUgQVJDIHN0cnVjdHVyZXMgYXJlIG9ubHkgMzItYml0LCBzbyB3ZSBuZWVkIHNvbWUgZGlzZ3VzdGluZworICAgd29ya2Fyb3VuZHMuICBLZWVwIHlvdXIgdm9taXQgYmFnIGhhbmR5LiAgKi8KK3R5cGVkZWYgTE9ORwkJX1BDSEFSOwordHlwZWRlZiBMT05HCQlfUFNIT1JUOwordHlwZWRlZiBMT05HCQlfUExBUkdFX0lOVEVHRVI7Cit0eXBlZGVmCUxPTkcJCV9QTE9ORzsKK3R5cGVkZWYgTE9ORwkJX1BVQ0hBUjsKK3R5cGVkZWYgTE9ORwkJX1BVU0hPUlQ7Cit0eXBlZGVmIExPTkcJCV9QVUxPTkc7Cit0eXBlZGVmIExPTkcJCV9QVk9JRDsKKworI2VuZGlmIC8qIENPTkZJR19BUkMzMiAqLworCisjaWZkZWYgQ09ORklHX0FSQzY0CisKK3R5cGVkZWYgY2hhcgkJQ0hBUjsKK3R5cGVkZWYgc2hvcnQJCVNIT1JUOwordHlwZWRlZiBsb25nCQlMQVJHRV9JTlRFR0VSIF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ESV9fKSkpOwordHlwZWRlZglsb25nCQlMT05HIF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ESV9fKSkpOwordHlwZWRlZiB1bnNpZ25lZCBjaGFyCVVDSEFSOwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAlVU0hPUlQ7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcJVUxPTkcgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0RJX18pKSk7Cit0eXBlZGVmIHZvaWQJCVZPSUQ7CisKKy8qIFRoZSBwb2ludGVyIHR5cGVzLiAgV2UncmUgNjQtYml0IGFuZCB0aGUgZmlybXdhcmUgaXMgYWxzbyA2NC1iaXQsIHNvCisgICBsaXZlIGlzIHNhbmUgLi4uICAqLwordHlwZWRlZiBDSEFSCQkqX1BDSEFSOwordHlwZWRlZiBTSE9SVAkJKl9QU0hPUlQ7Cit0eXBlZGVmIExBUkdFX0lOVEVHRVIJKl9QTEFSR0VfSU5URUdFUjsKK3R5cGVkZWYJTE9ORwkJKl9QTE9ORzsKK3R5cGVkZWYgVUNIQVIJCSpfUFVDSEFSOwordHlwZWRlZiBVU0hPUlQJCSpfUFVTSE9SVDsKK3R5cGVkZWYgVUxPTkcJCSpfUFVMT05HOwordHlwZWRlZiBWT0lECQkqX1BWT0lEOworCisjZW5kaWYgLyogQ09ORklHX0FSQzY0ICAqLworCit0eXBlZGVmIENIQVIJCSpQQ0hBUjsKK3R5cGVkZWYgU0hPUlQJCSpQU0hPUlQ7Cit0eXBlZGVmIExBUkdFX0lOVEVHRVIJKlBMQVJHRV9JTlRFR0VSOwordHlwZWRlZglMT05HCQkqUExPTkc7Cit0eXBlZGVmIFVDSEFSCQkqUFVDSEFSOwordHlwZWRlZiBVU0hPUlQJCSpQVVNIT1JUOwordHlwZWRlZiBVTE9ORwkJKlBVTE9ORzsKK3R5cGVkZWYgVk9JRAkJKlBWT0lEOworCisvKgorICogUmV0dXJuIHR5cGUgb2YgQXJjR2V0RGlzcGxheVN0YXR1cygpCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwlVU0hPUlQJQ3Vyc29yWFBvc2l0aW9uOworCVVTSE9SVAlDdXJzb3JZUG9zaXRpb247CisJVVNIT1JUCUN1cnNvck1heFhQb3NpdGlvbjsKKwlVU0hPUlQJQ3Vyc29yTWF4WVBvc2l0aW9uOworCVVTSE9SVAlGb3JlZ3JvdW5kQ29sb3I7CisJVVNIT1JUCUJhY2tncm91bmRDb2xvcjsKKwlVQ0hBUglIaWdoSW50ZW5zaXR5OworCVVDSEFSCVVuZGVyc2NvcmVkOworCVVDSEFSCVJldmVyc2VWaWRlbzsKK30gRElTUExBWV9TVEFUVVM7CisKKyNlbmRpZiAvKiBfQVNNX0FSQ19UWVBFU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2FzbS5oIGIvaW5jbHVkZS9hc20tbWlwcy9hc20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTMyMzc3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9hc20uaApAQCAtMCwwICsxLDM5NiBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiwgMTk5NywgMTk5OSwgMjAwMSBieSBSYWxmIEJhZWNobGUKKyAqIENvcHlyaWdodCAoQykgMTk5OSBieSBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMiAgTWFjaWVqIFcuIFJvenlja2kKKyAqCisgKiBTb21lIHVzZWZ1bCBtYWNyb3MgZm9yIE1JUFMgYXNzZW1ibGVyIGNvZGUKKyAqCisgKiBTb21lIG9mIHRoZSByb3V0aW5lcyBiZWxvdyBjb250YWluIHVzZWxlc3Mgbm9wcyB0aGF0IHdpbGwgYmUgb3B0aW1pemVkCisgKiBhd2F5IGJ5IGdhcyBpbiAtTyBtb2RlLiBUaGVzZSBub3BzIGFyZSBob3dldmVyIHJlcXVpcmVkIHRvIGZpbGwgZGVsYXkKKyAqIHNsb3RzIGluIG5vcmVvcmRlciBtb2RlLgorICovCisjaWZuZGVmIF9fQVNNX0FTTV9ICisjZGVmaW5lIF9fQVNNX0FTTV9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxhc20vc2dpZGVmcy5oPgorCisjaWZuZGVmIENBVAorI2lmZGVmIF9fU1REQ19fCisjZGVmaW5lIF9fQ0FUKHN0cjEsc3RyMikgc3RyMSMjc3RyMgorI2Vsc2UKKyNkZWZpbmUgX19DQVQoc3RyMSxzdHIyKSBzdHIxLyoqL3N0cjIKKyNlbmRpZgorI2RlZmluZSBDQVQoc3RyMSxzdHIyKSBfX0NBVChzdHIxLHN0cjIpCisjZW5kaWYKKworLyoKKyAqIFBJQyBzcGVjaWZpYyBkZWNsYXJhdGlvbnMKKyAqIE5vdCB1c2VkIGZvciB0aGUga2VybmVsIGJ1dCBoZXJlIHNlZW1zIHRvIGJlIHRoZSByaWdodCBwbGFjZS4KKyAqLworI2lmZGVmIF9fUElDX18KKyNkZWZpbmUgQ1BSRVNUT1JFKHJlZ2lzdGVyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkuY3ByZXN0b3JlIHJlZ2lzdGVyCisjZGVmaW5lIENQQUREKHJlZ2lzdGVyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJLmNwYWRkCXJlZ2lzdGVyCisjZGVmaW5lIENQTE9BRChyZWdpc3RlcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJLmNwbG9hZAlyZWdpc3RlcgorI2Vsc2UKKyNkZWZpbmUgQ1BSRVNUT1JFKHJlZ2lzdGVyKQorI2RlZmluZSBDUEFERChyZWdpc3RlcikKKyNkZWZpbmUgQ1BMT0FEKHJlZ2lzdGVyKQorI2VuZGlmCisKKy8qCisgKiBMRUFGIC0gZGVjbGFyZSBsZWFmIHJvdXRpbmUKKyAqLworI2RlZmluZQlMRUFGKHN5bWJvbCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCS5nbG9ibAlzeW1ib2w7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJLmFsaWduCTI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkudHlwZQlzeW1ib2wsQGZ1bmN0aW9uOyAgICAgICAgICAgICAgIFwKKwkJLmVudAlzeW1ib2wsMDsgICAgICAgICAgICAgICAgICAgICAgIFwKK3N5bWJvbDoJCS5mcmFtZQlzcCwwLHJhCisKKy8qCisgKiBORVNURUQgLSBkZWNsYXJlIG5lc3RlZCByb3V0aW5lIGVudHJ5IHBvaW50CisgKi8KKyNkZWZpbmUJTkVTVEVEKHN5bWJvbCwgZnJhbWVzaXplLCBycGMpICAgICAgICAgICAgICAgICAgXAorCQkuZ2xvYmwJc3ltYm9sOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCS5hbGlnbgkyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJLnR5cGUJc3ltYm9sLEBmdW5jdGlvbjsgICAgICAgICAgICAgICBcCisJCS5lbnQJc3ltYm9sLDA7ICAgICAgICAgICAgICAgICAgICAgICBcCitzeW1ib2w6CQkuZnJhbWUJc3AsIGZyYW1lc2l6ZSwgcnBjCisKKy8qCisgKiBFTkQgLSBtYXJrIGVuZCBvZiBmdW5jdGlvbgorICovCisjZGVmaW5lCUVORChmdW5jdGlvbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJLmVuZAlmdW5jdGlvbjsJCSAgICAgICAgXAorCQkuc2l6ZQlmdW5jdGlvbiwuLWZ1bmN0aW9uCisKKy8qCisgKiBFWFBPUlQgLSBleHBvcnQgZGVmaW5pdGlvbiBvZiBzeW1ib2wKKyAqLworI2RlZmluZSBFWFBPUlQoc3ltYm9sKQkJCQkJXAorCQkuZ2xvYmwJc3ltYm9sOyAgICAgICAgICAgICAgICAgICAgICAgICBcCitzeW1ib2w6CisKKy8qCisgKiBGRVhQT1JUIC0gZXhwb3J0IGRlZmluaXRpb24gb2YgYSBmdW5jdGlvbiBzeW1ib2wKKyAqLworI2RlZmluZSBGRVhQT1JUKHN5bWJvbCkJCQkJCVwKKwkJLmdsb2JsCXN5bWJvbDsJCQkJXAorCQkudHlwZQlzeW1ib2wsQGZ1bmN0aW9uOwkJXAorc3ltYm9sOgorCisvKgorICogQUJTIC0gZXhwb3J0IGFic29sdXRlIHN5bWJvbAorICovCisjZGVmaW5lCUFCUyhzeW1ib2wsdmFsdWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJLmdsb2JsCXN5bWJvbDsgICAgICAgICAgICAgICAgICAgICAgICAgXAorc3ltYm9sCQk9CXZhbHVlCisKKyNkZWZpbmUJUEFOSUMobXNnKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkuc2V0CXB1c2g7CQkJCVwKKwkJLnNldAlyZW9yZGVyOyAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJUFRSX0xBCWEwLDhmOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlqYWwJcGFuaWM7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCis5OgkJYgk5YjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJLnNldAlwb3A7CQkJCVwKKwkJVEVYVChtc2cpCisKKy8qCisgKiBQcmludCBmb3JtYXR0ZWQgc3RyaW5nCisgKi8KKyNkZWZpbmUgUFJJTlQoc3RyaW5nKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkuc2V0CXB1c2g7CQkJCVwKKwkJLnNldAlyZW9yZGVyOyAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJUFRSX0xBCWEwLDhmOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlqYWwJcHJpbnRrOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCS5zZXQJcG9wOwkJCQlcCisJCVRFWFQoc3RyaW5nKQorCisjZGVmaW5lCVRFWFQobXNnKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJLnB1c2hzZWN0aW9uIC5kYXRhOwkJCVwKKzg6CQkuYXNjaWl6CW1zZzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkucG9wc2VjdGlvbjsKKworLyoKKyAqIEJ1aWxkIHRleHQgdGFibGVzCisgKi8KKyNkZWZpbmUgVFRBQkxFKHN0cmluZykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkucHVzaHNlY3Rpb24gLnRleHQ7CQkJXAorCQkud29yZAkxZjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJLnBvcHNlY3Rpb24JCQkJXAorCQkucHVzaHNlY3Rpb24gLmRhdGE7CQkJXAorMToJCS5hc2NpaXoJc3RyaW5nOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCS5wb3BzZWN0aW9uCisKKy8qCisgKiBNSVBTIElWIHByZWYgaW5zdHJ1Y3Rpb24uCisgKiBVc2Ugd2l0aCAuc2V0IG5vcmVvcmRlciBvbmx5IQorICoKKyAqIE1JUFMgSVYgaW1wbGVtZW50YXRpb25zIGFyZSBmcmVlIHRvIHRyZWF0IHRoaXMgYXMgYSBub3AuICBUaGUgUjUwMDAKKyAqIGlzIG9uZSBvZiB0aGVtLiAgU28gd2Ugc2hvdWxkIGhhdmUgYW4gb3B0aW9uIG5vdCB0byB1c2UgdGhpcyBpbnN0cnVjdGlvbi4KKyAqLworI2lmZGVmIENPTkZJR19DUFVfSEFTX1BSRUZFVENICisKKyNkZWZpbmUgUFJFRihoaW50LGFkZHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkuc2V0CXB1c2g7CQkJCVwKKwkJLnNldAltaXBzNDsJCQkJXAorCQlwcmVmCWhpbnQsYWRkcjsJCQlcCisJCS5zZXQJcG9wCisKKyNkZWZpbmUgUFJFRlgoaGludCxhZGRyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkuc2V0CXB1c2g7CQkJCVwKKwkJLnNldAltaXBzNDsJCQkJXAorCQlwcmVmeAloaW50LGFkZHI7CQkJXAorCQkuc2V0CXBvcAorCisjZWxzZSAvKiAhQ09ORklHX0NQVV9IQVNfUFJFRkVUQ0ggKi8KKworI2RlZmluZSBQUkVGKGhpbnQsYWRkcikKKyNkZWZpbmUgUFJFRlgoaGludCxhZGRyKQorCisjZW5kaWYgLyogIUNPTkZJR19DUFVfSEFTX1BSRUZFVENIICovCisKKy8qCisgKiBNSVBTIElTQSBJVi9WIG1vdm4vbW92eiBpbnN0cnVjdGlvbnMgYW5kIGVxdWl2YWxlbnRzIGZvciBvbGRlciBDUFVzLgorICovCisjaWYgKF9NSVBTX0lTQSA9PSBfTUlQU19JU0FfTUlQUzEpCisjZGVmaW5lIE1PVk4ocmQscnMscnQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJLnNldAlwdXNoOwkJCQlcCisJCS5zZXQJcmVvcmRlcjsJCQlcCisJCWJlcXoJcnQsOWY7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCW1vdmUJcmQscnM7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCS5zZXQJcG9wOwkJCQlcCis5OgorI2RlZmluZSBNT1ZaKHJkLHJzLHJ0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCS5zZXQJcHVzaDsJCQkJXAorCQkuc2V0CXJlb3JkZXI7CQkJXAorCQlibmV6CXJ0LDlmOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQltb3ZlCXJkLHJzOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkuc2V0CXBvcDsJCQkJXAorOToKKyNlbmRpZiAvKiBfTUlQU19JU0EgPT0gX01JUFNfSVNBX01JUFMxICovCisjaWYgKF9NSVBTX0lTQSA9PSBfTUlQU19JU0FfTUlQUzIpIHx8IChfTUlQU19JU0EgPT0gX01JUFNfSVNBX01JUFMzKQorI2RlZmluZSBNT1ZOKHJkLHJzLHJ0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCS5zZXQJcHVzaDsJCQkJXAorCQkuc2V0CW5vcmVvcmRlcjsJCQlcCisJCWJuZXpsCXJ0LDlmOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgbW92ZQlyZCxyczsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJLnNldAlwb3A7CQkJCVwKKzk6CisjZGVmaW5lIE1PVloocmQscnMscnQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJLnNldAlwdXNoOwkJCQlcCisJCS5zZXQJbm9yZW9yZGVyOwkJCVwKKwkJYmVxemwJcnQsOWY7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSBtb3ZlCXJkLHJzOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkuc2V0CXBvcDsJCQkJXAorOToKKyNlbmRpZiAvKiAoX01JUFNfSVNBID09IF9NSVBTX0lTQV9NSVBTMikgfHwgKF9NSVBTX0lTQSA9PSBfTUlQU19JU0FfTUlQUzMpICovCisjaWYgKF9NSVBTX0lTQSA9PSBfTUlQU19JU0FfTUlQUzQgKSB8fCAoX01JUFNfSVNBID09IF9NSVBTX0lTQV9NSVBTNSkgfHwgXAorICAgIChfTUlQU19JU0EgPT0gX01JUFNfSVNBX01JUFMzMikgfHwgKF9NSVBTX0lTQSA9PSBfTUlQU19JU0FfTUlQUzY0KQorI2RlZmluZSBNT1ZOKHJkLHJzLHJ0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCW1vdm4JcmQscnMscnQKKyNkZWZpbmUgTU9WWihyZCxycyxydCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQltb3Z6CXJkLHJzLHJ0CisjZW5kaWYgLyogTUlQUyBJViwgTUlQUyBWLCBNSVBTMzIgb3IgTUlQUzY0ICovCisKKy8qCisgKiBTdGFjayBhbGlnbm1lbnQKKyAqLworI2lmIChfTUlQU19TSU0gPT0gX01JUFNfU0lNX0FCSTMyKQorI2RlZmluZSBBTFNaCTcKKyNkZWZpbmUgQUxNQVNLCX43CisjZW5kaWYKKyNpZiAoX01JUFNfU0lNID09IF9NSVBTX1NJTV9OQUJJMzIpIHx8IChfTUlQU19TSU0gPT0gX01JUFNfU0lNX0FCSTY0KQorI2RlZmluZSBBTFNaCTE1CisjZGVmaW5lIEFMTUFTSwl+MTUKKyNlbmRpZgorCisvKgorICogTWFjcm9zIHRvIGhhbmRsZSBkaWZmZXJlbnQgcG9pbnRlci9yZWdpc3RlciBzaXplcyBmb3IgMzIvNjQtYml0IGNvZGUKKyAqLworCisvKgorICogU2l6ZSBvZiBhIHJlZ2lzdGVyCisgKi8KKyNpZmRlZiBfX21pcHM2NAorI2RlZmluZSBTWlJFRwk4CisjZWxzZQorI2RlZmluZSBTWlJFRwk0CisjZW5kaWYKKworLyoKKyAqIFVzZSB0aGUgZm9sbG93aW5nIG1hY3JvcyBpbiBhc3NlbWJsZXJjb2RlIHRvIGxvYWQvc3RvcmUgcmVnaXN0ZXJzLAorICogcG9pbnRlcnMgZXRjLgorICovCisjaWYgKF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fQUJJMzIpCisjZGVmaW5lIFJFR19TCQlzdworI2RlZmluZSBSRUdfTAkJbHcKKyNkZWZpbmUgUkVHX1NVQlUJc3VidQorI2RlZmluZSBSRUdfQUREVQlhZGR1CisjZW5kaWYKKyNpZiAoX01JUFNfU0lNID09IF9NSVBTX1NJTV9OQUJJMzIpIHx8IChfTUlQU19TSU0gPT0gX01JUFNfU0lNX0FCSTY0KQorI2RlZmluZSBSRUdfUwkJc2QKKyNkZWZpbmUgUkVHX0wJCWxkCisjZGVmaW5lIFJFR19TVUJVCWRzdWJ1CisjZGVmaW5lIFJFR19BRERVCWRhZGR1CisjZW5kaWYKKworLyoKKyAqIEhvdyB0byBhZGQvc3ViL2xvYWQvc3RvcmUvc2hpZnQgQyBpbnQgdmFyaWFibGVzLgorICovCisjaWYgKF9NSVBTX1NaSU5UID09IDMyKQorI2RlZmluZSBJTlRfQURECQlhZGQKKyNkZWZpbmUgSU5UX0FERFUJYWRkdQorI2RlZmluZSBJTlRfQURESQlhZGRpCisjZGVmaW5lIElOVF9BRERJVQlhZGRpdQorI2RlZmluZSBJTlRfU1VCCQlzdWIKKyNkZWZpbmUgSU5UX1NVQlUJc3VidQorI2RlZmluZSBJTlRfTAkJbHcKKyNkZWZpbmUgSU5UX1MJCXN3CisjZGVmaW5lIElOVF9TTEwJCXNsbAorI2RlZmluZSBJTlRfU0xMVglzbGx2CisjZGVmaW5lIElOVF9TUkwJCXNybAorI2RlZmluZSBJTlRfU1JMVglzcmx2CisjZGVmaW5lIElOVF9TUkEJCXNyYQorI2RlZmluZSBJTlRfU1JBVglzcmF2CisjZW5kaWYKKworI2lmIChfTUlQU19TWklOVCA9PSA2NCkKKyNkZWZpbmUgSU5UX0FERAkJZGFkZAorI2RlZmluZSBJTlRfQUREVQlkYWRkdQorI2RlZmluZSBJTlRfQURESQlkYWRkaQorI2RlZmluZSBJTlRfQURESVUJZGFkZGl1CisjZGVmaW5lIElOVF9TVUIJCWRzdWIKKyNkZWZpbmUgSU5UX1NVQlUJZHN1YnUKKyNkZWZpbmUgSU5UX0wJCWxkCisjZGVmaW5lIElOVF9TCQlzZAorI2RlZmluZSBJTlRfU0xMCQlkc2xsCisjZGVmaW5lIElOVF9TTExWCWRzbGx2CisjZGVmaW5lIElOVF9TUkwJCWRzcmwKKyNkZWZpbmUgSU5UX1NSTFYJZHNybHYKKyNkZWZpbmUgSU5UX1NSQQkJZHNyYQorI2RlZmluZSBJTlRfU1JBVglkc3JhdgorI2VuZGlmCisKKy8qCisgKiBIb3cgdG8gYWRkL3N1Yi9sb2FkL3N0b3JlL3NoaWZ0IEMgbG9uZyB2YXJpYWJsZXMuCisgKi8KKyNpZiAoX01JUFNfU1pMT05HID09IDMyKQorI2RlZmluZSBMT05HX0FERAlhZGQKKyNkZWZpbmUgTE9OR19BRERVCWFkZHUKKyNkZWZpbmUgTE9OR19BRERJCWFkZGkKKyNkZWZpbmUgTE9OR19BRERJVQlhZGRpdQorI2RlZmluZSBMT05HX1NVQglzdWIKKyNkZWZpbmUgTE9OR19TVUJVCXN1YnUKKyNkZWZpbmUgTE9OR19MCQlsdworI2RlZmluZSBMT05HX1MJCXN3CisjZGVmaW5lIExPTkdfU0xMCXNsbAorI2RlZmluZSBMT05HX1NMTFYJc2xsdgorI2RlZmluZSBMT05HX1NSTAlzcmwKKyNkZWZpbmUgTE9OR19TUkxWCXNybHYKKyNkZWZpbmUgTE9OR19TUkEJc3JhCisjZGVmaW5lIExPTkdfU1JBVglzcmF2CisKKyNkZWZpbmUgTE9ORwkJLndvcmQKKyNkZWZpbmUgTE9OR1NJWkUJNAorI2RlZmluZSBMT05HTUFTSwkzCisjZGVmaW5lIExPTkdMT0cJCTIKKyNlbmRpZgorCisjaWYgKF9NSVBTX1NaTE9ORyA9PSA2NCkKKyNkZWZpbmUgTE9OR19BREQJZGFkZAorI2RlZmluZSBMT05HX0FERFUJZGFkZHUKKyNkZWZpbmUgTE9OR19BRERJCWRhZGRpCisjZGVmaW5lIExPTkdfQURESVUJZGFkZGl1CisjZGVmaW5lIExPTkdfU1VCCWRzdWIKKyNkZWZpbmUgTE9OR19TVUJVCWRzdWJ1CisjZGVmaW5lIExPTkdfTAkJbGQKKyNkZWZpbmUgTE9OR19TCQlzZAorI2RlZmluZSBMT05HX1NMTAlkc2xsCisjZGVmaW5lIExPTkdfU0xMVglkc2xsdgorI2RlZmluZSBMT05HX1NSTAlkc3JsCisjZGVmaW5lIExPTkdfU1JMVglkc3JsdgorI2RlZmluZSBMT05HX1NSQQlkc3JhCisjZGVmaW5lIExPTkdfU1JBVglkc3JhdgorCisjZGVmaW5lIExPTkcJCS5kd29yZAorI2RlZmluZSBMT05HU0laRQk4CisjZGVmaW5lIExPTkdNQVNLCTcKKyNkZWZpbmUgTE9OR0xPRwkJMworI2VuZGlmCisKKy8qCisgKiBIb3cgdG8gYWRkL3N1Yi9sb2FkL3N0b3JlL3NoaWZ0IHBvaW50ZXJzLgorICovCisjaWYgKF9NSVBTX1NaUFRSID09IDMyKQorI2RlZmluZSBQVFJfQURECQlhZGQKKyNkZWZpbmUgUFRSX0FERFUJYWRkdQorI2RlZmluZSBQVFJfQURESQlhZGRpCisjZGVmaW5lIFBUUl9BRERJVQlhZGRpdQorI2RlZmluZSBQVFJfU1VCCQlzdWIKKyNkZWZpbmUgUFRSX1NVQlUJc3VidQorI2RlZmluZSBQVFJfTAkJbHcKKyNkZWZpbmUgUFRSX1MJCXN3CisjZGVmaW5lIFBUUl9MQQkJbGEKKyNkZWZpbmUgUFRSX1NMTAkJc2xsCisjZGVmaW5lIFBUUl9TTExWCXNsbHYKKyNkZWZpbmUgUFRSX1NSTAkJc3JsCisjZGVmaW5lIFBUUl9TUkxWCXNybHYKKyNkZWZpbmUgUFRSX1NSQQkJc3JhCisjZGVmaW5lIFBUUl9TUkFWCXNyYXYKKworI2RlZmluZSBQVFJfU0NBTEVTSElGVAkyCisKKyNkZWZpbmUgUFRSCQkud29yZAorI2RlZmluZSBQVFJTSVpFCQk0CisjZGVmaW5lIFBUUkxPRwkJMgorI2VuZGlmCisKKyNpZiAoX01JUFNfU1pQVFIgPT0gNjQpCisjZGVmaW5lIFBUUl9BREQJCWRhZGQKKyNkZWZpbmUgUFRSX0FERFUJZGFkZHUKKyNkZWZpbmUgUFRSX0FEREkJZGFkZGkKKyNkZWZpbmUgUFRSX0FERElVCWRhZGRpdQorI2RlZmluZSBQVFJfU1VCCQlkc3ViCisjZGVmaW5lIFBUUl9TVUJVCWRzdWJ1CisjZGVmaW5lIFBUUl9MCQlsZAorI2RlZmluZSBQVFJfUwkJc2QKKyNkZWZpbmUgUFRSX0xBCQlkbGEKKyNkZWZpbmUgUFRSX1NMTAkJZHNsbAorI2RlZmluZSBQVFJfU0xMVglkc2xsdgorI2RlZmluZSBQVFJfU1JMCQlkc3JsCisjZGVmaW5lIFBUUl9TUkxWCWRzcmx2CisjZGVmaW5lIFBUUl9TUkEJCWRzcmEKKyNkZWZpbmUgUFRSX1NSQVYJZHNyYXYKKworI2RlZmluZSBQVFJfU0NBTEVTSElGVAkzCisKKyNkZWZpbmUgUFRSCQkuZHdvcmQKKyNkZWZpbmUgUFRSU0laRQkJOAorI2RlZmluZSBQVFJMT0cJCTMKKyNlbmRpZgorCisvKgorICogU29tZSBjcDAgcmVnaXN0ZXJzIHdlcmUgZXh0ZW5kZWQgdG8gNjRiaXQgZm9yIE1JUFMgSUlJLgorICovCisjaWYgKF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fQUJJMzIpCisjZGVmaW5lIE1GQzAJCW1mYzAKKyNkZWZpbmUgTVRDMAkJbXRjMAorI2VuZGlmCisjaWYgKF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fTkFCSTMyKSB8fCAoX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkk2NCkKKyNkZWZpbmUgTUZDMAkJZG1mYzAKKyNkZWZpbmUgTVRDMAkJZG10YzAKKyNlbmRpZgorCisjZGVmaW5lIFNTTk9QCQlzbGwgemVybyx6ZXJvLDEKKworI2VuZGlmIC8qIF9fQVNNX0FTTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2FzbW1hY3JvLTMyLmggYi9pbmNsdWRlL2FzbS1taXBzL2FzbW1hY3JvLTMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM4ODIzZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvYXNtbWFjcm8tMzIuaApAQCAtMCwwICsxLDE1OCBAQAorLyoKKyAqIGFzbW1hY3JvLmg6IEFzc2VtYmxlciBtYWNyb3MgdG8gbWFrZSB0aGluZ3MgZWFzaWVyIHRvIHJlYWQuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk2IERhdmlkIFMuIE1pbGxlciAoZG1AZW5nci5zZ2kuY29tKQorICogQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAzIFJhbGYgQmFlY2hsZQorICovCisjaWZuZGVmIF9BU01fQVNNTUFDUk9fMzJfSAorI2RlZmluZSBfQVNNX0FTTU1BQ1JPXzMyX0gKKworI2luY2x1ZGUgPGFzbS9vZmZzZXQuaD4KKyNpbmNsdWRlIDxhc20vcmVnZGVmLmg+CisjaW5jbHVkZSA8YXNtL2ZwcmVnZGVmLmg+CisjaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+CisKKwkubWFjcm8JZnB1X3NhdmVfZG91YmxlIHRocmVhZCBzdGF0dXMgdG1wMT10MCB0bXAyCisJY2ZjMQlcdG1wMSwgIGZjcjMxCisJc2RjMQkkZjAsICBUSFJFQURfRlBSMChcdGhyZWFkKQorCXNkYzEJJGYyLCAgVEhSRUFEX0ZQUjIoXHRocmVhZCkKKwlzZGMxCSRmNCwgIFRIUkVBRF9GUFI0KFx0aHJlYWQpCisJc2RjMQkkZjYsICBUSFJFQURfRlBSNihcdGhyZWFkKQorCXNkYzEJJGY4LCAgVEhSRUFEX0ZQUjgoXHRocmVhZCkKKwlzZGMxCSRmMTAsIFRIUkVBRF9GUFIxMChcdGhyZWFkKQorCXNkYzEJJGYxMiwgVEhSRUFEX0ZQUjEyKFx0aHJlYWQpCisJc2RjMQkkZjE0LCBUSFJFQURfRlBSMTQoXHRocmVhZCkKKwlzZGMxCSRmMTYsIFRIUkVBRF9GUFIxNihcdGhyZWFkKQorCXNkYzEJJGYxOCwgVEhSRUFEX0ZQUjE4KFx0aHJlYWQpCisJc2RjMQkkZjIwLCBUSFJFQURfRlBSMjAoXHRocmVhZCkKKwlzZGMxCSRmMjIsIFRIUkVBRF9GUFIyMihcdGhyZWFkKQorCXNkYzEJJGYyNCwgVEhSRUFEX0ZQUjI0KFx0aHJlYWQpCisJc2RjMQkkZjI2LCBUSFJFQURfRlBSMjYoXHRocmVhZCkKKwlzZGMxCSRmMjgsIFRIUkVBRF9GUFIyOChcdGhyZWFkKQorCXNkYzEJJGYzMCwgVEhSRUFEX0ZQUjMwKFx0aHJlYWQpCisJc3cJXHRtcDEsIFRIUkVBRF9GQ1IzMShcdGhyZWFkKQorCS5lbmRtCisKKwkubWFjcm8JZnB1X3NhdmVfc2luZ2xlIHRocmVhZCB0bXA9dDAKKwljZmMxCVx0bXAsICBmY3IzMQorCXN3YzEJJGYwLCAgVEhSRUFEX0ZQUjAoXHRocmVhZCkKKwlzd2MxCSRmMSwgIFRIUkVBRF9GUFIxKFx0aHJlYWQpCisJc3djMQkkZjIsICBUSFJFQURfRlBSMihcdGhyZWFkKQorCXN3YzEJJGYzLCAgVEhSRUFEX0ZQUjMoXHRocmVhZCkKKwlzd2MxCSRmNCwgIFRIUkVBRF9GUFI0KFx0aHJlYWQpCisJc3djMQkkZjUsICBUSFJFQURfRlBSNShcdGhyZWFkKQorCXN3YzEJJGY2LCAgVEhSRUFEX0ZQUjYoXHRocmVhZCkKKwlzd2MxCSRmNywgIFRIUkVBRF9GUFI3KFx0aHJlYWQpCisJc3djMQkkZjgsICBUSFJFQURfRlBSOChcdGhyZWFkKQorCXN3YzEJJGY5LCAgVEhSRUFEX0ZQUjkoXHRocmVhZCkKKwlzd2MxCSRmMTAsIFRIUkVBRF9GUFIxMChcdGhyZWFkKQorCXN3YzEJJGYxMSwgVEhSRUFEX0ZQUjExKFx0aHJlYWQpCisJc3djMQkkZjEyLCBUSFJFQURfRlBSMTIoXHRocmVhZCkKKwlzd2MxCSRmMTMsIFRIUkVBRF9GUFIxMyhcdGhyZWFkKQorCXN3YzEJJGYxNCwgVEhSRUFEX0ZQUjE0KFx0aHJlYWQpCisJc3djMQkkZjE1LCBUSFJFQURfRlBSMTUoXHRocmVhZCkKKwlzd2MxCSRmMTYsIFRIUkVBRF9GUFIxNihcdGhyZWFkKQorCXN3YzEJJGYxNywgVEhSRUFEX0ZQUjE3KFx0aHJlYWQpCisJc3djMQkkZjE4LCBUSFJFQURfRlBSMTgoXHRocmVhZCkKKwlzd2MxCSRmMTksIFRIUkVBRF9GUFIxOShcdGhyZWFkKQorCXN3YzEJJGYyMCwgVEhSRUFEX0ZQUjIwKFx0aHJlYWQpCisJc3djMQkkZjIxLCBUSFJFQURfRlBSMjEoXHRocmVhZCkKKwlzd2MxCSRmMjIsIFRIUkVBRF9GUFIyMihcdGhyZWFkKQorCXN3YzEJJGYyMywgVEhSRUFEX0ZQUjIzKFx0aHJlYWQpCisJc3djMQkkZjI0LCBUSFJFQURfRlBSMjQoXHRocmVhZCkKKwlzd2MxCSRmMjUsIFRIUkVBRF9GUFIyNShcdGhyZWFkKQorCXN3YzEJJGYyNiwgVEhSRUFEX0ZQUjI2KFx0aHJlYWQpCisJc3djMQkkZjI3LCBUSFJFQURfRlBSMjcoXHRocmVhZCkKKwlzd2MxCSRmMjgsIFRIUkVBRF9GUFIyOChcdGhyZWFkKQorCXN3YzEJJGYyOSwgVEhSRUFEX0ZQUjI5KFx0aHJlYWQpCisJc3djMQkkZjMwLCBUSFJFQURfRlBSMzAoXHRocmVhZCkKKwlzd2MxCSRmMzEsIFRIUkVBRF9GUFIzMShcdGhyZWFkKQorCXN3CVx0bXAsIFRIUkVBRF9GQ1IzMShcdGhyZWFkKQorCS5lbmRtCisKKwkubWFjcm8JZnB1X3Jlc3RvcmVfZG91YmxlIHRocmVhZCB0bXA9dDAKKwlsdwlcdG1wLCBUSFJFQURfRkNSMzEoXHRocmVhZCkKKwlsZGMxCSRmMCwgIFRIUkVBRF9GUFIwKFx0aHJlYWQpCisJbGRjMQkkZjIsICBUSFJFQURfRlBSMihcdGhyZWFkKQorCWxkYzEJJGY0LCAgVEhSRUFEX0ZQUjQoXHRocmVhZCkKKwlsZGMxCSRmNiwgIFRIUkVBRF9GUFI2KFx0aHJlYWQpCisJbGRjMQkkZjgsICBUSFJFQURfRlBSOChcdGhyZWFkKQorCWxkYzEJJGYxMCwgVEhSRUFEX0ZQUjEwKFx0aHJlYWQpCisJbGRjMQkkZjEyLCBUSFJFQURfRlBSMTIoXHRocmVhZCkKKwlsZGMxCSRmMTQsIFRIUkVBRF9GUFIxNChcdGhyZWFkKQorCWxkYzEJJGYxNiwgVEhSRUFEX0ZQUjE2KFx0aHJlYWQpCisJbGRjMQkkZjE4LCBUSFJFQURfRlBSMTgoXHRocmVhZCkKKwlsZGMxCSRmMjAsIFRIUkVBRF9GUFIyMChcdGhyZWFkKQorCWxkYzEJJGYyMiwgVEhSRUFEX0ZQUjIyKFx0aHJlYWQpCisJbGRjMQkkZjI0LCBUSFJFQURfRlBSMjQoXHRocmVhZCkKKwlsZGMxCSRmMjYsIFRIUkVBRF9GUFIyNihcdGhyZWFkKQorCWxkYzEJJGYyOCwgVEhSRUFEX0ZQUjI4KFx0aHJlYWQpCisJbGRjMQkkZjMwLCBUSFJFQURfRlBSMzAoXHRocmVhZCkKKwljdGMxCVx0bXAsIGZjcjMxCisJLmVuZG0KKworCS5tYWNybwlmcHVfcmVzdG9yZV9zaW5nbGUgdGhyZWFkIHRtcD10MAorCWx3CVx0bXAsIFRIUkVBRF9GQ1IzMShcdGhyZWFkKQorCWx3YzEJJGYwLCAgVEhSRUFEX0ZQUjAoXHRocmVhZCkKKwlsd2MxCSRmMSwgIFRIUkVBRF9GUFIxKFx0aHJlYWQpCisJbHdjMQkkZjIsICBUSFJFQURfRlBSMihcdGhyZWFkKQorCWx3YzEJJGYzLCAgVEhSRUFEX0ZQUjMoXHRocmVhZCkKKwlsd2MxCSRmNCwgIFRIUkVBRF9GUFI0KFx0aHJlYWQpCisJbHdjMQkkZjUsICBUSFJFQURfRlBSNShcdGhyZWFkKQorCWx3YzEJJGY2LCAgVEhSRUFEX0ZQUjYoXHRocmVhZCkKKwlsd2MxCSRmNywgIFRIUkVBRF9GUFI3KFx0aHJlYWQpCisJbHdjMQkkZjgsICBUSFJFQURfRlBSOChcdGhyZWFkKQorCWx3YzEJJGY5LCAgVEhSRUFEX0ZQUjkoXHRocmVhZCkKKwlsd2MxCSRmMTAsIFRIUkVBRF9GUFIxMChcdGhyZWFkKQorCWx3YzEJJGYxMSwgVEhSRUFEX0ZQUjExKFx0aHJlYWQpCisJbHdjMQkkZjEyLCBUSFJFQURfRlBSMTIoXHRocmVhZCkKKwlsd2MxCSRmMTMsIFRIUkVBRF9GUFIxMyhcdGhyZWFkKQorCWx3YzEJJGYxNCwgVEhSRUFEX0ZQUjE0KFx0aHJlYWQpCisJbHdjMQkkZjE1LCBUSFJFQURfRlBSMTUoXHRocmVhZCkKKwlsd2MxCSRmMTYsIFRIUkVBRF9GUFIxNihcdGhyZWFkKQorCWx3YzEJJGYxNywgVEhSRUFEX0ZQUjE3KFx0aHJlYWQpCisJbHdjMQkkZjE4LCBUSFJFQURfRlBSMTgoXHRocmVhZCkKKwlsd2MxCSRmMTksIFRIUkVBRF9GUFIxOShcdGhyZWFkKQorCWx3YzEJJGYyMCwgVEhSRUFEX0ZQUjIwKFx0aHJlYWQpCisJbHdjMQkkZjIxLCBUSFJFQURfRlBSMjEoXHRocmVhZCkKKwlsd2MxCSRmMjIsIFRIUkVBRF9GUFIyMihcdGhyZWFkKQorCWx3YzEJJGYyMywgVEhSRUFEX0ZQUjIzKFx0aHJlYWQpCisJbHdjMQkkZjI0LCBUSFJFQURfRlBSMjQoXHRocmVhZCkKKwlsd2MxCSRmMjUsIFRIUkVBRF9GUFIyNShcdGhyZWFkKQorCWx3YzEJJGYyNiwgVEhSRUFEX0ZQUjI2KFx0aHJlYWQpCisJbHdjMQkkZjI3LCBUSFJFQURfRlBSMjcoXHRocmVhZCkKKwlsd2MxCSRmMjgsIFRIUkVBRF9GUFIyOChcdGhyZWFkKQorCWx3YzEJJGYyOSwgVEhSRUFEX0ZQUjI5KFx0aHJlYWQpCisJbHdjMQkkZjMwLCBUSFJFQURfRlBSMzAoXHRocmVhZCkKKwlsd2MxCSRmMzEsIFRIUkVBRF9GUFIzMShcdGhyZWFkKQorCWN0YzEJXHRtcCwgZmNyMzEKKwkuZW5kbQorCisJLm1hY3JvCWNwdV9zYXZlX25vbnNjcmF0Y2ggdGhyZWFkCisJTE9OR19TCXMwLCBUSFJFQURfUkVHMTYoXHRocmVhZCkKKwlMT05HX1MJczEsIFRIUkVBRF9SRUcxNyhcdGhyZWFkKQorCUxPTkdfUwlzMiwgVEhSRUFEX1JFRzE4KFx0aHJlYWQpCisJTE9OR19TCXMzLCBUSFJFQURfUkVHMTkoXHRocmVhZCkKKwlMT05HX1MJczQsIFRIUkVBRF9SRUcyMChcdGhyZWFkKQorCUxPTkdfUwlzNSwgVEhSRUFEX1JFRzIxKFx0aHJlYWQpCisJTE9OR19TCXM2LCBUSFJFQURfUkVHMjIoXHRocmVhZCkKKwlMT05HX1MJczcsIFRIUkVBRF9SRUcyMyhcdGhyZWFkKQorCUxPTkdfUwlzcCwgVEhSRUFEX1JFRzI5KFx0aHJlYWQpCisJTE9OR19TCWZwLCBUSFJFQURfUkVHMzAoXHRocmVhZCkKKwkuZW5kbQorCisJLm1hY3JvCWNwdV9yZXN0b3JlX25vbnNjcmF0Y2ggdGhyZWFkCisJTE9OR19MCXMwLCBUSFJFQURfUkVHMTYoXHRocmVhZCkKKwlMT05HX0wJczEsIFRIUkVBRF9SRUcxNyhcdGhyZWFkKQorCUxPTkdfTAlzMiwgVEhSRUFEX1JFRzE4KFx0aHJlYWQpCisJTE9OR19MCXMzLCBUSFJFQURfUkVHMTkoXHRocmVhZCkKKwlMT05HX0wJczQsIFRIUkVBRF9SRUcyMChcdGhyZWFkKQorCUxPTkdfTAlzNSwgVEhSRUFEX1JFRzIxKFx0aHJlYWQpCisJTE9OR19MCXM2LCBUSFJFQURfUkVHMjIoXHRocmVhZCkKKwlMT05HX0wJczcsIFRIUkVBRF9SRUcyMyhcdGhyZWFkKQorCUxPTkdfTAlzcCwgVEhSRUFEX1JFRzI5KFx0aHJlYWQpCisJTE9OR19MCWZwLCBUSFJFQURfUkVHMzAoXHRocmVhZCkKKwlMT05HX0wJcmEsIFRIUkVBRF9SRUczMShcdGhyZWFkKQorCS5lbmRtCisKKyNlbmRpZiAvKiBfQVNNX0FTTU1BQ1JPXzMyX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvYXNtbWFjcm8tNjQuaCBiL2luY2x1ZGUvYXNtLW1pcHMvYXNtbWFjcm8tNjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmVkMzU1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9hc21tYWNyby02NC5oCkBAIC0wLDAgKzEsMTQwIEBACisvKgorICogYXNtbWFjcm8uaDogQXNzZW1ibGVyIG1hY3JvcyB0byBtYWtlIHRoaW5ncyBlYXNpZXIgdG8gcmVhZC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYgRGF2aWQgUy4gTWlsbGVyIChkbUBlbmdyLnNnaS5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTkgUmFsZiBCYWVjaGxlCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgU2lsaWNvbiBHcmFwaGljcywgSW5jLgorICovCisjaWZuZGVmIF9BU01fQVNNTUFDUk9fNjRfSAorI2RlZmluZSBfQVNNX0FTTU1BQ1JPXzY0X0gKKworI2luY2x1ZGUgPGFzbS9vZmZzZXQuaD4KKyNpbmNsdWRlIDxhc20vcmVnZGVmLmg+CisjaW5jbHVkZSA8YXNtL2ZwcmVnZGVmLmg+CisjaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+CisKKwkubWFjcm8JZnB1X3NhdmVfMTZldmVuIHRocmVhZCB0bXA9dDAKKwljZmMxCVx0bXAsIGZjcjMxCisJc2RjMQkkZjAsICBUSFJFQURfRlBSMChcdGhyZWFkKQorCXNkYzEJJGYyLCAgVEhSRUFEX0ZQUjIoXHRocmVhZCkKKwlzZGMxCSRmNCwgIFRIUkVBRF9GUFI0KFx0aHJlYWQpCisJc2RjMQkkZjYsICBUSFJFQURfRlBSNihcdGhyZWFkKQorCXNkYzEJJGY4LCAgVEhSRUFEX0ZQUjgoXHRocmVhZCkKKwlzZGMxCSRmMTAsIFRIUkVBRF9GUFIxMChcdGhyZWFkKQorCXNkYzEJJGYxMiwgVEhSRUFEX0ZQUjEyKFx0aHJlYWQpCisJc2RjMQkkZjE0LCBUSFJFQURfRlBSMTQoXHRocmVhZCkKKwlzZGMxCSRmMTYsIFRIUkVBRF9GUFIxNihcdGhyZWFkKQorCXNkYzEJJGYxOCwgVEhSRUFEX0ZQUjE4KFx0aHJlYWQpCisJc2RjMQkkZjIwLCBUSFJFQURfRlBSMjAoXHRocmVhZCkKKwlzZGMxCSRmMjIsIFRIUkVBRF9GUFIyMihcdGhyZWFkKQorCXNkYzEJJGYyNCwgVEhSRUFEX0ZQUjI0KFx0aHJlYWQpCisJc2RjMQkkZjI2LCBUSFJFQURfRlBSMjYoXHRocmVhZCkKKwlzZGMxCSRmMjgsIFRIUkVBRF9GUFIyOChcdGhyZWFkKQorCXNkYzEJJGYzMCwgVEhSRUFEX0ZQUjMwKFx0aHJlYWQpCisJc3cJXHRtcCwgVEhSRUFEX0ZDUjMxKFx0aHJlYWQpCisJLmVuZG0KKworCS5tYWNybwlmcHVfc2F2ZV8xNm9kZCB0aHJlYWQKKwlzZGMxCSRmMSwgIFRIUkVBRF9GUFIxKFx0aHJlYWQpCisJc2RjMQkkZjMsICBUSFJFQURfRlBSMyhcdGhyZWFkKQorCXNkYzEJJGY1LCAgVEhSRUFEX0ZQUjUoXHRocmVhZCkKKwlzZGMxCSRmNywgIFRIUkVBRF9GUFI3KFx0aHJlYWQpCisJc2RjMQkkZjksICBUSFJFQURfRlBSOShcdGhyZWFkKQorCXNkYzEJJGYxMSwgVEhSRUFEX0ZQUjExKFx0aHJlYWQpCisJc2RjMQkkZjEzLCBUSFJFQURfRlBSMTMoXHRocmVhZCkKKwlzZGMxCSRmMTUsIFRIUkVBRF9GUFIxNShcdGhyZWFkKQorCXNkYzEJJGYxNywgVEhSRUFEX0ZQUjE3KFx0aHJlYWQpCisJc2RjMQkkZjE5LCBUSFJFQURfRlBSMTkoXHRocmVhZCkKKwlzZGMxCSRmMjEsIFRIUkVBRF9GUFIyMShcdGhyZWFkKQorCXNkYzEJJGYyMywgVEhSRUFEX0ZQUjIzKFx0aHJlYWQpCisJc2RjMQkkZjI1LCBUSFJFQURfRlBSMjUoXHRocmVhZCkKKwlzZGMxCSRmMjcsIFRIUkVBRF9GUFIyNyhcdGhyZWFkKQorCXNkYzEJJGYyOSwgVEhSRUFEX0ZQUjI5KFx0aHJlYWQpCisJc2RjMQkkZjMxLCBUSFJFQURfRlBSMzEoXHRocmVhZCkKKwkuZW5kbQorCisJLm1hY3JvCWZwdV9zYXZlX2RvdWJsZSB0aHJlYWQgc3RhdHVzIHRtcDEgdG1wMgorCXNsbAlcdG1wMiwgXHRtcDEsIDUKKwliZ2V6CVx0bXAyLCAyZgorCWZwdV9zYXZlXzE2b2RkIFx0aHJlYWQKKzI6CisJZnB1X3NhdmVfMTZldmVuIFx0aHJlYWQgXHRtcDEJCQkjIGNsb2JiZXJzIHQxCisJLmVuZG0KKworCS5tYWNybwlmcHVfcmVzdG9yZV8xNmV2ZW4gdGhyZWFkIHRtcD10MAorCWx3CVx0bXAsIFRIUkVBRF9GQ1IzMShcdGhyZWFkKQorCWxkYzEJJGYwLCAgVEhSRUFEX0ZQUjAoXHRocmVhZCkKKwlsZGMxCSRmMiwgIFRIUkVBRF9GUFIyKFx0aHJlYWQpCisJbGRjMQkkZjQsICBUSFJFQURfRlBSNChcdGhyZWFkKQorCWxkYzEJJGY2LCAgVEhSRUFEX0ZQUjYoXHRocmVhZCkKKwlsZGMxCSRmOCwgIFRIUkVBRF9GUFI4KFx0aHJlYWQpCisJbGRjMQkkZjEwLCBUSFJFQURfRlBSMTAoXHRocmVhZCkKKwlsZGMxCSRmMTIsIFRIUkVBRF9GUFIxMihcdGhyZWFkKQorCWxkYzEJJGYxNCwgVEhSRUFEX0ZQUjE0KFx0aHJlYWQpCisJbGRjMQkkZjE2LCBUSFJFQURfRlBSMTYoXHRocmVhZCkKKwlsZGMxCSRmMTgsIFRIUkVBRF9GUFIxOChcdGhyZWFkKQorCWxkYzEJJGYyMCwgVEhSRUFEX0ZQUjIwKFx0aHJlYWQpCisJbGRjMQkkZjIyLCBUSFJFQURfRlBSMjIoXHRocmVhZCkKKwlsZGMxCSRmMjQsIFRIUkVBRF9GUFIyNChcdGhyZWFkKQorCWxkYzEJJGYyNiwgVEhSRUFEX0ZQUjI2KFx0aHJlYWQpCisJbGRjMQkkZjI4LCBUSFJFQURfRlBSMjgoXHRocmVhZCkKKwlsZGMxCSRmMzAsIFRIUkVBRF9GUFIzMChcdGhyZWFkKQorCWN0YzEJXHRtcCwgZmNyMzEKKwkuZW5kbQorCisJLm1hY3JvCWZwdV9yZXN0b3JlXzE2b2RkIHRocmVhZAorCWxkYzEJJGYxLCAgVEhSRUFEX0ZQUjEoXHRocmVhZCkKKwlsZGMxCSRmMywgIFRIUkVBRF9GUFIzKFx0aHJlYWQpCisJbGRjMQkkZjUsICBUSFJFQURfRlBSNShcdGhyZWFkKQorCWxkYzEJJGY3LCAgVEhSRUFEX0ZQUjcoXHRocmVhZCkKKwlsZGMxCSRmOSwgIFRIUkVBRF9GUFI5KFx0aHJlYWQpCisJbGRjMQkkZjExLCBUSFJFQURfRlBSMTEoXHRocmVhZCkKKwlsZGMxCSRmMTMsIFRIUkVBRF9GUFIxMyhcdGhyZWFkKQorCWxkYzEJJGYxNSwgVEhSRUFEX0ZQUjE1KFx0aHJlYWQpCisJbGRjMQkkZjE3LCBUSFJFQURfRlBSMTcoXHRocmVhZCkKKwlsZGMxCSRmMTksIFRIUkVBRF9GUFIxOShcdGhyZWFkKQorCWxkYzEJJGYyMSwgVEhSRUFEX0ZQUjIxKFx0aHJlYWQpCisJbGRjMQkkZjIzLCBUSFJFQURfRlBSMjMoXHRocmVhZCkKKwlsZGMxCSRmMjUsIFRIUkVBRF9GUFIyNShcdGhyZWFkKQorCWxkYzEJJGYyNywgVEhSRUFEX0ZQUjI3KFx0aHJlYWQpCisJbGRjMQkkZjI5LCBUSFJFQURfRlBSMjkoXHRocmVhZCkKKwlsZGMxCSRmMzEsIFRIUkVBRF9GUFIzMShcdGhyZWFkKQorCS5lbmRtCisKKwkubWFjcm8JZnB1X3Jlc3RvcmVfZG91YmxlIHRocmVhZCB0bXAKKwltZmMwCXQwLCBDUDBfU1RBVFVTCisJc2xsCXQxLCB0MCwgNQorCWJnZXoJdDEsIDFmCQkJCSMgMTYgcmVnaXN0ZXIgbW9kZT8KKworCWZwdV9yZXN0b3JlXzE2b2RkIGEwCisxOglmcHVfcmVzdG9yZV8xNmV2ZW4gYTAsIHQwCQkjIGNsb2JiZXJzIHQwCisJLmVuZG0KKworCS5tYWNybwljcHVfc2F2ZV9ub25zY3JhdGNoIHRocmVhZAorCUxPTkdfUwlzMCwgVEhSRUFEX1JFRzE2KFx0aHJlYWQpCisJTE9OR19TCXMxLCBUSFJFQURfUkVHMTcoXHRocmVhZCkKKwlMT05HX1MJczIsIFRIUkVBRF9SRUcxOChcdGhyZWFkKQorCUxPTkdfUwlzMywgVEhSRUFEX1JFRzE5KFx0aHJlYWQpCisJTE9OR19TCXM0LCBUSFJFQURfUkVHMjAoXHRocmVhZCkKKwlMT05HX1MJczUsIFRIUkVBRF9SRUcyMShcdGhyZWFkKQorCUxPTkdfUwlzNiwgVEhSRUFEX1JFRzIyKFx0aHJlYWQpCisJTE9OR19TCXM3LCBUSFJFQURfUkVHMjMoXHRocmVhZCkKKwlMT05HX1MJc3AsIFRIUkVBRF9SRUcyOShcdGhyZWFkKQorCUxPTkdfUwlmcCwgVEhSRUFEX1JFRzMwKFx0aHJlYWQpCisJLmVuZG0KKworCS5tYWNybwljcHVfcmVzdG9yZV9ub25zY3JhdGNoIHRocmVhZAorCUxPTkdfTAlzMCwgVEhSRUFEX1JFRzE2KFx0aHJlYWQpCisJTE9OR19MCXMxLCBUSFJFQURfUkVHMTcoXHRocmVhZCkKKwlMT05HX0wJczIsIFRIUkVBRF9SRUcxOChcdGhyZWFkKQorCUxPTkdfTAlzMywgVEhSRUFEX1JFRzE5KFx0aHJlYWQpCisJTE9OR19MCXM0LCBUSFJFQURfUkVHMjAoXHRocmVhZCkKKwlMT05HX0wJczUsIFRIUkVBRF9SRUcyMShcdGhyZWFkKQorCUxPTkdfTAlzNiwgVEhSRUFEX1JFRzIyKFx0aHJlYWQpCisJTE9OR19MCXM3LCBUSFJFQURfUkVHMjMoXHRocmVhZCkKKwlMT05HX0wJc3AsIFRIUkVBRF9SRUcyOShcdGhyZWFkKQorCUxPTkdfTAlmcCwgVEhSRUFEX1JFRzMwKFx0aHJlYWQpCisJTE9OR19MCXJhLCBUSFJFQURfUkVHMzEoXHRocmVhZCkKKwkuZW5kbQorCisjZW5kaWYgLyogX0FTTV9BU01NQUNST182NF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2FzbW1hY3JvLmggYi9pbmNsdWRlL2FzbS1taXBzL2FzbW1hY3JvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdhNDYwYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvYXNtbWFjcm8uaApAQCAtMCwwICsxLDUxIEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzIFJhbGYgQmFlY2hsZQorICovCisjaWZuZGVmIF9BU01fQVNNTUFDUk9fSAorI2RlZmluZSBfQVNNX0FTTU1BQ1JPX0gKKyAKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxhc20vaGF6YXJkcy5oPgorIAorI2lmZGVmIENPTkZJR19NSVBTMzIKKyNpbmNsdWRlIDxhc20vYXNtbWFjcm8tMzIuaD4KKyNlbmRpZgorI2lmZGVmIENPTkZJR19NSVBTNjQKKyNpbmNsdWRlIDxhc20vYXNtbWFjcm8tNjQuaD4KKyNlbmRpZgorCisJLm1hY3JvCWxvY2FsX2lycV9lbmFibGUgcmVnPXQwCisJbWZjMAlccmVnLCBDUDBfU1RBVFVTCisJb3JpCVxyZWcsIFxyZWcsIDEKKwltdGMwCVxyZWcsIENQMF9TVEFUVVMKKwlpcnFfZW5hYmxlX2hhemFyZAorCS5lbmRtCisKKwkubWFjcm8JbG9jYWxfaXJxX2Rpc2FibGUgcmVnPXQwCisJbWZjMAlccmVnLCBDUDBfU1RBVFVTCisJb3JpCVxyZWcsIFxyZWcsIDEKKwl4b3JpCVxyZWcsIFxyZWcsIDEKKwltdGMwCVxyZWcsIENQMF9TVEFUVVMKKwlpcnFfZGlzYWJsZV9oYXphcmQKKwkuZW5kbQorCisjaWZkZWYgQ09ORklHX0NQVV9TQjEKKwkubWFjcm8JZnB1X2VuYWJsZV9oYXphcmQKKwkuc2V0CXB1c2gKKwkuc2V0CW5vcmVvcmRlcgorCS5zZXQJbWlwczIKKwlTU05PUAorCWJuZXpsCSQwLCAuKzQKKwkgU1NOT1AKKwkuc2V0CXBvcAorCS5lbmRtCisjZWxzZQorCS5tYWNybwlmcHVfZW5hYmxlX2hhemFyZAorCS5lbmRtCisjZW5kaWYKKworI2VuZGlmIC8qIF9BU01fQVNNTUFDUk9fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9hdG9taWMuaCBiL2luY2x1ZGUvYXNtLW1pcHMvYXRvbWljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q4OWU4NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvYXRvbWljLmgKQEAgLTAsMCArMSw2NTMgQEAKKy8qCisgKiBBdG9taWMgb3BlcmF0aW9ucyB0aGF0IEMgY2FuJ3QgZ3VhcmFudGVlIHVzLiAgVXNlZnVsIGZvcgorICogcmVzb3VyY2UgY291bnRpbmcgZXRjLi4KKyAqCisgKiBCdXQgdXNlIHRoZXNlIGFzIHNlbGRvbSBhcyBwb3NzaWJsZSBzaW5jZSB0aGV5IGFyZSBtdWNoIG1vcmUgc2xvd2VyCisgKiB0aGFuIHJlZ3VsYXIgb3BlcmF0aW9ucy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYsIDk3LCA5OSwgMjAwMCwgMDMsIDA0IGJ5IFJhbGYgQmFlY2hsZQorICovCisKKy8qCisgKiBBcyB3b3JrYXJvdW5kIGZvciB0aGUgQVRPTUlDX0RFQ19BTkRfTE9DSyAvIGF0b21pY19kZWNfYW5kX2xvY2sgbWVzcyBpbgorICogPGxpbnV4L3NwaW5sb2NrLmg+IHdlIGhhdmUgdG8gaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4gb3V0c2lkZSB0aGUKKyAqIG1haW4gYmlnIHdyYXBwZXIgLi4uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorCisjaWZuZGVmIF9BU01fQVRPTUlDX0gKKyNkZWZpbmUgX0FTTV9BVE9NSUNfSAorCisjaW5jbHVkZSA8YXNtL2NwdS1mZWF0dXJlcy5oPgorI2luY2x1ZGUgPGFzbS93YXIuaD4KKworZXh0ZXJuIHNwaW5sb2NrX3QgYXRvbWljX2xvY2s7CisKK3R5cGVkZWYgc3RydWN0IHsgdm9sYXRpbGUgaW50IGNvdW50ZXI7IH0gYXRvbWljX3Q7CisKKyNkZWZpbmUgQVRPTUlDX0lOSVQoaSkgICAgeyAoaSkgfQorCisvKgorICogYXRvbWljX3JlYWQgLSByZWFkIGF0b21pYyB2YXJpYWJsZQorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICoKKyAqIEF0b21pY2FsbHkgcmVhZHMgdGhlIHZhbHVlIG9mIEB2LgorICovCisjZGVmaW5lIGF0b21pY19yZWFkKHYpCQkoKHYpLT5jb3VudGVyKQorCisvKgorICogYXRvbWljX3NldCAtIHNldCBhdG9taWMgdmFyaWFibGUKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqIEBpOiByZXF1aXJlZCB2YWx1ZQorICoKKyAqIEF0b21pY2FsbHkgc2V0cyB0aGUgdmFsdWUgb2YgQHYgdG8gQGkuCisgKi8KKyNkZWZpbmUgYXRvbWljX3NldCh2LGkpCQkoKHYpLT5jb3VudGVyID0gKGkpKQorCisvKgorICogYXRvbWljX2FkZCAtIGFkZCBpbnRlZ2VyIHRvIGF0b21pYyB2YXJpYWJsZQorICogQGk6IGludGVnZXIgdmFsdWUgdG8gYWRkCisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CisgKgorICogQXRvbWljYWxseSBhZGRzIEBpIHRvIEB2LgorICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGF0b21pY19hZGQoaW50IGksIGF0b21pY190ICogdikKK3sKKwlpZiAoY3B1X2hhc19sbHNjICYmIFIxMDAwMF9MTFNDX1dBUikgeworCQl1bnNpZ25lZCBsb25nIHRlbXA7CisKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSIxOglsbAklMCwgJTEJCSMgYXRvbWljX2FkZAkJXG4iCisJCSIJYWRkdQklMCwgJTIJCQkJCVxuIgorCQkiCXNjCSUwLCAlMQkJCQkJXG4iCisJCSIJYmVxemwJJTAsIDFiCQkJCQlcbiIKKwkJOiAiPSZyIiAodGVtcCksICI9bSIgKHYtPmNvdW50ZXIpCisJCTogIklyIiAoaSksICJtIiAodi0+Y291bnRlcikpOworCX0gZWxzZSBpZiAoY3B1X2hhc19sbHNjKSB7CisJCXVuc2lnbmVkIGxvbmcgdGVtcDsKKworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJIjE6CWxsCSUwLCAlMQkJIyBhdG9taWNfYWRkCQlcbiIKKwkJIglhZGR1CSUwLCAlMgkJCQkJXG4iCisJCSIJc2MJJTAsICUxCQkJCQlcbiIKKwkJIgliZXF6CSUwLCAxYgkJCQkJXG4iCisJCTogIj0mciIgKHRlbXApLCAiPW0iICh2LT5jb3VudGVyKQorCQk6ICJJciIgKGkpLCAibSIgKHYtPmNvdW50ZXIpKTsKKwl9IGVsc2UgeworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZhdG9taWNfbG9jaywgZmxhZ3MpOworCQl2LT5jb3VudGVyICs9IGk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmF0b21pY19sb2NrLCBmbGFncyk7CisJfQorfQorCisvKgorICogYXRvbWljX3N1YiAtIHN1YnRyYWN0IHRoZSBhdG9taWMgdmFyaWFibGUKKyAqIEBpOiBpbnRlZ2VyIHZhbHVlIHRvIHN1YnRyYWN0CisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CisgKgorICogQXRvbWljYWxseSBzdWJ0cmFjdHMgQGkgZnJvbSBAdi4KKyAqLworc3RhdGljIF9faW5saW5lX18gdm9pZCBhdG9taWNfc3ViKGludCBpLCBhdG9taWNfdCAqIHYpCit7CisJaWYgKGNwdV9oYXNfbGxzYyAmJiBSMTAwMDBfTExTQ19XQVIpIHsKKwkJdW5zaWduZWQgbG9uZyB0ZW1wOworCisJCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkiMToJbGwJJTAsICUxCQkjIGF0b21pY19zdWIJCVxuIgorCQkiCXN1YnUJJTAsICUyCQkJCQlcbiIKKwkJIglzYwklMCwgJTEJCQkJCVxuIgorCQkiCWJlcXpsCSUwLCAxYgkJCQkJXG4iCisJCTogIj0mciIgKHRlbXApLCAiPW0iICh2LT5jb3VudGVyKQorCQk6ICJJciIgKGkpLCAibSIgKHYtPmNvdW50ZXIpKTsKKwl9IGVsc2UgaWYgKGNwdV9oYXNfbGxzYykgeworCQl1bnNpZ25lZCBsb25nIHRlbXA7CisKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSIxOglsbAklMCwgJTEJCSMgYXRvbWljX3N1YgkJXG4iCisJCSIJc3VidQklMCwgJTIJCQkJCVxuIgorCQkiCXNjCSUwLCAlMQkJCQkJXG4iCisJCSIJYmVxegklMCwgMWIJCQkJCVxuIgorCQk6ICI9JnIiICh0ZW1wKSwgIj1tIiAodi0+Y291bnRlcikKKwkJOiAiSXIiIChpKSwgIm0iICh2LT5jb3VudGVyKSk7CisJfSBlbHNlIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYXRvbWljX2xvY2ssIGZsYWdzKTsKKwkJdi0+Y291bnRlciAtPSBpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhdG9taWNfbG9jaywgZmxhZ3MpOworCX0KK30KKworLyoKKyAqIFNhbWUgYXMgYWJvdmUsIGJ1dCByZXR1cm4gdGhlIHJlc3VsdCB2YWx1ZQorICovCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgYXRvbWljX2FkZF9yZXR1cm4oaW50IGksIGF0b21pY190ICogdikKK3sKKwl1bnNpZ25lZCBsb25nIHJlc3VsdDsKKworCWlmIChjcHVfaGFzX2xsc2MgJiYgUjEwMDAwX0xMU0NfV0FSKSB7CisJCXVuc2lnbmVkIGxvbmcgdGVtcDsKKworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJIjE6CWxsCSUxLCAlMgkJIyBhdG9taWNfYWRkX3JldHVybglcbiIKKwkJIglhZGR1CSUwLCAlMSwgJTMJCQkJXG4iCisJCSIJc2MJJTAsICUyCQkJCQlcbiIKKwkJIgliZXF6bAklMCwgMWIJCQkJCVxuIgorCQkiCWFkZHUJJTAsICUxLCAlMwkJCQlcbiIKKwkJIglzeW5jCQkJCQkJXG4iCisJCTogIj0mciIgKHJlc3VsdCksICI9JnIiICh0ZW1wKSwgIj1tIiAodi0+Y291bnRlcikKKwkJOiAiSXIiIChpKSwgIm0iICh2LT5jb3VudGVyKQorCQk6ICJtZW1vcnkiKTsKKwl9IGVsc2UgaWYgKGNwdV9oYXNfbGxzYykgeworCQl1bnNpZ25lZCBsb25nIHRlbXA7CisKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSIxOglsbAklMSwgJTIJCSMgYXRvbWljX2FkZF9yZXR1cm4JXG4iCisJCSIJYWRkdQklMCwgJTEsICUzCQkJCVxuIgorCQkiCXNjCSUwLCAlMgkJCQkJXG4iCisJCSIJYmVxegklMCwgMWIJCQkJCVxuIgorCQkiCWFkZHUJJTAsICUxLCAlMwkJCQlcbiIKKwkJIglzeW5jCQkJCQkJXG4iCisJCTogIj0mciIgKHJlc3VsdCksICI9JnIiICh0ZW1wKSwgIj1tIiAodi0+Y291bnRlcikKKwkJOiAiSXIiIChpKSwgIm0iICh2LT5jb3VudGVyKQorCQk6ICJtZW1vcnkiKTsKKwl9IGVsc2UgeworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZhdG9taWNfbG9jaywgZmxhZ3MpOworCQlyZXN1bHQgPSB2LT5jb3VudGVyOworCQlyZXN1bHQgKz0gaTsKKwkJdi0+Y291bnRlciA9IHJlc3VsdDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXRvbWljX2xvY2ssIGZsYWdzKTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgYXRvbWljX3N1Yl9yZXR1cm4oaW50IGksIGF0b21pY190ICogdikKK3sKKwl1bnNpZ25lZCBsb25nIHJlc3VsdDsKKworCWlmIChjcHVfaGFzX2xsc2MgJiYgUjEwMDAwX0xMU0NfV0FSKSB7CisJCXVuc2lnbmVkIGxvbmcgdGVtcDsKKworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJIjE6CWxsCSUxLCAlMgkJIyBhdG9taWNfc3ViX3JldHVybglcbiIKKwkJIglzdWJ1CSUwLCAlMSwgJTMJCQkJXG4iCisJCSIJc2MJJTAsICUyCQkJCQlcbiIKKwkJIgliZXF6bAklMCwgMWIJCQkJCVxuIgorCQkiCXN1YnUJJTAsICUxLCAlMwkJCQlcbiIKKwkJIglzeW5jCQkJCQkJXG4iCisJCTogIj0mciIgKHJlc3VsdCksICI9JnIiICh0ZW1wKSwgIj1tIiAodi0+Y291bnRlcikKKwkJOiAiSXIiIChpKSwgIm0iICh2LT5jb3VudGVyKQorCQk6ICJtZW1vcnkiKTsKKwl9IGVsc2UgaWYgKGNwdV9oYXNfbGxzYykgeworCQl1bnNpZ25lZCBsb25nIHRlbXA7CisKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSIxOglsbAklMSwgJTIJCSMgYXRvbWljX3N1Yl9yZXR1cm4JXG4iCisJCSIJc3VidQklMCwgJTEsICUzCQkJCVxuIgorCQkiCXNjCSUwLCAlMgkJCQkJXG4iCisJCSIJYmVxegklMCwgMWIJCQkJCVxuIgorCQkiCXN1YnUJJTAsICUxLCAlMwkJCQlcbiIKKwkJIglzeW5jCQkJCQkJXG4iCisJCTogIj0mciIgKHJlc3VsdCksICI9JnIiICh0ZW1wKSwgIj1tIiAodi0+Y291bnRlcikKKwkJOiAiSXIiIChpKSwgIm0iICh2LT5jb3VudGVyKQorCQk6ICJtZW1vcnkiKTsKKwl9IGVsc2UgeworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZhdG9taWNfbG9jaywgZmxhZ3MpOworCQlyZXN1bHQgPSB2LT5jb3VudGVyOworCQlyZXN1bHQgLT0gaTsKKwkJdi0+Y291bnRlciA9IHJlc3VsdDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXRvbWljX2xvY2ssIGZsYWdzKTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogYXRvbWljX3N1Yl9pZl9wb3NpdGl2ZSAtIGFkZCBpbnRlZ2VyIHRvIGF0b21pYyB2YXJpYWJsZQorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICoKKyAqIEF0b21pY2FsbHkgdGVzdCBAdiBhbmQgZGVjcmVtZW50IGlmIGl0IGlzIGdyZWF0ZXIgdGhhbiAwLgorICogVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIG9sZCB2YWx1ZSBvZiBAdiBtaW51cyAxLgorICovCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgYXRvbWljX3N1Yl9pZl9wb3NpdGl2ZShpbnQgaSwgYXRvbWljX3QgKiB2KQoreworCXVuc2lnbmVkIGxvbmcgcmVzdWx0OworCisJaWYgKGNwdV9oYXNfbGxzYyAmJiBSMTAwMDBfTExTQ19XQVIpIHsKKwkJdW5zaWduZWQgbG9uZyB0ZW1wOworCisJCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkiMToJbGwJJTEsICUyCQkjIGF0b21pY19zdWJfaWZfcG9zaXRpdmVcbiIKKwkJIglzdWJ1CSUwLCAlMSwgJTMJCQkJXG4iCisJCSIJYmx0egklMCwgMWYJCQkJCVxuIgorCQkiCXNjCSUwLCAlMgkJCQkJXG4iCisJCSIJYmVxemwJJTAsIDFiCQkJCQlcbiIKKwkJIglzeW5jCQkJCQkJXG4iCisJCSIxOgkJCQkJCQlcbiIKKwkJOiAiPSZyIiAocmVzdWx0KSwgIj0mciIgKHRlbXApLCAiPW0iICh2LT5jb3VudGVyKQorCQk6ICJJciIgKGkpLCAibSIgKHYtPmNvdW50ZXIpCisJCTogIm1lbW9yeSIpOworCX0gZWxzZSBpZiAoY3B1X2hhc19sbHNjKSB7CisJCXVuc2lnbmVkIGxvbmcgdGVtcDsKKworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJIjE6CWxsCSUxLCAlMgkJIyBhdG9taWNfc3ViX2lmX3Bvc2l0aXZlXG4iCisJCSIJc3VidQklMCwgJTEsICUzCQkJCVxuIgorCQkiCWJsdHoJJTAsIDFmCQkJCQlcbiIKKwkJIglzYwklMCwgJTIJCQkJCVxuIgorCQkiCWJlcXoJJTAsIDFiCQkJCQlcbiIKKwkJIglzeW5jCQkJCQkJXG4iCisJCSIxOgkJCQkJCQlcbiIKKwkJOiAiPSZyIiAocmVzdWx0KSwgIj0mciIgKHRlbXApLCAiPW0iICh2LT5jb3VudGVyKQorCQk6ICJJciIgKGkpLCAibSIgKHYtPmNvdW50ZXIpCisJCTogIm1lbW9yeSIpOworCX0gZWxzZSB7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmF0b21pY19sb2NrLCBmbGFncyk7CisJCXJlc3VsdCA9IHYtPmNvdW50ZXI7CisJCXJlc3VsdCAtPSBpOworCQlpZiAocmVzdWx0ID49IDApCisJCQl2LT5jb3VudGVyID0gcmVzdWx0OworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhdG9taWNfbG9jaywgZmxhZ3MpOworCX0KKworCXJldHVybiByZXN1bHQ7Cit9CisKKyNkZWZpbmUgYXRvbWljX2RlY19yZXR1cm4odikgYXRvbWljX3N1Yl9yZXR1cm4oMSwodikpCisjZGVmaW5lIGF0b21pY19pbmNfcmV0dXJuKHYpIGF0b21pY19hZGRfcmV0dXJuKDEsKHYpKQorCisvKgorICogYXRvbWljX3N1Yl9hbmRfdGVzdCAtIHN1YnRyYWN0IHZhbHVlIGZyb20gdmFyaWFibGUgYW5kIHRlc3QgcmVzdWx0CisgKiBAaTogaW50ZWdlciB2YWx1ZSB0byBzdWJ0cmFjdAorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICoKKyAqIEF0b21pY2FsbHkgc3VidHJhY3RzIEBpIGZyb20gQHYgYW5kIHJldHVybnMKKyAqIHRydWUgaWYgdGhlIHJlc3VsdCBpcyB6ZXJvLCBvciBmYWxzZSBmb3IgYWxsCisgKiBvdGhlciBjYXNlcy4KKyAqLworI2RlZmluZSBhdG9taWNfc3ViX2FuZF90ZXN0KGksdikgKGF0b21pY19zdWJfcmV0dXJuKChpKSwgKHYpKSA9PSAwKQorCisvKgorICogYXRvbWljX2luY19hbmRfdGVzdCAtIGluY3JlbWVudCBhbmQgdGVzdAorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICoKKyAqIEF0b21pY2FsbHkgaW5jcmVtZW50cyBAdiBieSAxCisgKiBhbmQgcmV0dXJucyB0cnVlIGlmIHRoZSByZXN1bHQgaXMgemVybywgb3IgZmFsc2UgZm9yIGFsbAorICogb3RoZXIgY2FzZXMuCisgKi8KKyNkZWZpbmUgYXRvbWljX2luY19hbmRfdGVzdCh2KSAoYXRvbWljX2luY19yZXR1cm4odikgPT0gMCkKKworLyoKKyAqIGF0b21pY19kZWNfYW5kX3Rlc3QgLSBkZWNyZW1lbnQgYnkgMSBhbmQgdGVzdAorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICoKKyAqIEF0b21pY2FsbHkgZGVjcmVtZW50cyBAdiBieSAxIGFuZAorICogcmV0dXJucyB0cnVlIGlmIHRoZSByZXN1bHQgaXMgMCwgb3IgZmFsc2UgZm9yIGFsbCBvdGhlcgorICogY2FzZXMuCisgKi8KKyNkZWZpbmUgYXRvbWljX2RlY19hbmRfdGVzdCh2KSAoYXRvbWljX3N1Yl9yZXR1cm4oMSwgKHYpKSA9PSAwKQorCisvKgorICogYXRvbWljX2RlY19pZl9wb3NpdGl2ZSAtIGRlY3JlbWVudCBieSAxIGlmIG9sZCB2YWx1ZSBwb3NpdGl2ZQorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICovCisjZGVmaW5lIGF0b21pY19kZWNfaWZfcG9zaXRpdmUodikJYXRvbWljX3N1Yl9pZl9wb3NpdGl2ZSgxLCB2KQorCisvKgorICogYXRvbWljX2luYyAtIGluY3JlbWVudCBhdG9taWMgdmFyaWFibGUKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqCisgKiBBdG9taWNhbGx5IGluY3JlbWVudHMgQHYgYnkgMS4KKyAqLworI2RlZmluZSBhdG9taWNfaW5jKHYpIGF0b21pY19hZGQoMSwodikpCisKKy8qCisgKiBhdG9taWNfZGVjIC0gZGVjcmVtZW50IGFuZCB0ZXN0CisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CisgKgorICogQXRvbWljYWxseSBkZWNyZW1lbnRzIEB2IGJ5IDEuCisgKi8KKyNkZWZpbmUgYXRvbWljX2RlYyh2KSBhdG9taWNfc3ViKDEsKHYpKQorCisvKgorICogYXRvbWljX2FkZF9uZWdhdGl2ZSAtIGFkZCBhbmQgdGVzdCBpZiBuZWdhdGl2ZQorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICogQGk6IGludGVnZXIgdmFsdWUgdG8gYWRkCisgKgorICogQXRvbWljYWxseSBhZGRzIEBpIHRvIEB2IGFuZCByZXR1cm5zIHRydWUKKyAqIGlmIHRoZSByZXN1bHQgaXMgbmVnYXRpdmUsIG9yIGZhbHNlIHdoZW4KKyAqIHJlc3VsdCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gemVyby4KKyAqLworI2RlZmluZSBhdG9taWNfYWRkX25lZ2F0aXZlKGksdikgKGF0b21pY19hZGRfcmV0dXJuKGksICh2KSkgPCAwKQorCisjaWZkZWYgQ09ORklHX01JUFM2NAorCit0eXBlZGVmIHN0cnVjdCB7IHZvbGF0aWxlIF9fczY0IGNvdW50ZXI7IH0gYXRvbWljNjRfdDsKKworI2RlZmluZSBBVE9NSUM2NF9JTklUKGkpICAgIHsgKGkpIH0KKworLyoKKyAqIGF0b21pYzY0X3JlYWQgLSByZWFkIGF0b21pYyB2YXJpYWJsZQorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWM2NF90CisgKgorICovCisjZGVmaW5lIGF0b21pYzY0X3JlYWQodikJKCh2KS0+Y291bnRlcikKKworLyoKKyAqIGF0b21pYzY0X3NldCAtIHNldCBhdG9taWMgdmFyaWFibGUKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljNjRfdAorICogQGk6IHJlcXVpcmVkIHZhbHVlCisgKi8KKyNkZWZpbmUgYXRvbWljNjRfc2V0KHYsaSkJKCh2KS0+Y291bnRlciA9IChpKSkKKworLyoKKyAqIGF0b21pYzY0X2FkZCAtIGFkZCBpbnRlZ2VyIHRvIGF0b21pYyB2YXJpYWJsZQorICogQGk6IGludGVnZXIgdmFsdWUgdG8gYWRkCisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pYzY0X3QKKyAqCisgKiBBdG9taWNhbGx5IGFkZHMgQGkgdG8gQHYuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgYXRvbWljNjRfYWRkKGxvbmcgaSwgYXRvbWljNjRfdCAqIHYpCit7CisJaWYgKGNwdV9oYXNfbGxzYyAmJiBSMTAwMDBfTExTQ19XQVIpIHsKKwkJdW5zaWduZWQgbG9uZyB0ZW1wOworCisJCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkiMToJbGxkCSUwLCAlMQkJIyBhdG9taWM2NF9hZGQJCVxuIgorCQkiCWFkZHUJJTAsICUyCQkJCQlcbiIKKwkJIglzY2QJJTAsICUxCQkJCQlcbiIKKwkJIgliZXF6bAklMCwgMWIJCQkJCVxuIgorCQk6ICI9JnIiICh0ZW1wKSwgIj1tIiAodi0+Y291bnRlcikKKwkJOiAiSXIiIChpKSwgIm0iICh2LT5jb3VudGVyKSk7CisJfSBlbHNlIGlmIChjcHVfaGFzX2xsc2MpIHsKKwkJdW5zaWduZWQgbG9uZyB0ZW1wOworCisJCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkiMToJbGxkCSUwLCAlMQkJIyBhdG9taWM2NF9hZGQJCVxuIgorCQkiCWFkZHUJJTAsICUyCQkJCQlcbiIKKwkJIglzY2QJJTAsICUxCQkJCQlcbiIKKwkJIgliZXF6CSUwLCAxYgkJCQkJXG4iCisJCTogIj0mciIgKHRlbXApLCAiPW0iICh2LT5jb3VudGVyKQorCQk6ICJJciIgKGkpLCAibSIgKHYtPmNvdW50ZXIpKTsKKwl9IGVsc2UgeworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZhdG9taWNfbG9jaywgZmxhZ3MpOworCQl2LT5jb3VudGVyICs9IGk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmF0b21pY19sb2NrLCBmbGFncyk7CisJfQorfQorCisvKgorICogYXRvbWljNjRfc3ViIC0gc3VidHJhY3QgdGhlIGF0b21pYyB2YXJpYWJsZQorICogQGk6IGludGVnZXIgdmFsdWUgdG8gc3VidHJhY3QKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljNjRfdAorICoKKyAqIEF0b21pY2FsbHkgc3VidHJhY3RzIEBpIGZyb20gQHYuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgYXRvbWljNjRfc3ViKGxvbmcgaSwgYXRvbWljNjRfdCAqIHYpCit7CisJaWYgKGNwdV9oYXNfbGxzYyAmJiBSMTAwMDBfTExTQ19XQVIpIHsKKwkJdW5zaWduZWQgbG9uZyB0ZW1wOworCisJCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkiMToJbGxkCSUwLCAlMQkJIyBhdG9taWM2NF9zdWIJCVxuIgorCQkiCXN1YnUJJTAsICUyCQkJCQlcbiIKKwkJIglzY2QJJTAsICUxCQkJCQlcbiIKKwkJIgliZXF6bAklMCwgMWIJCQkJCVxuIgorCQk6ICI9JnIiICh0ZW1wKSwgIj1tIiAodi0+Y291bnRlcikKKwkJOiAiSXIiIChpKSwgIm0iICh2LT5jb3VudGVyKSk7CisJfSBlbHNlIGlmIChjcHVfaGFzX2xsc2MpIHsKKwkJdW5zaWduZWQgbG9uZyB0ZW1wOworCisJCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkiMToJbGxkCSUwLCAlMQkJIyBhdG9taWM2NF9zdWIJCVxuIgorCQkiCXN1YnUJJTAsICUyCQkJCQlcbiIKKwkJIglzY2QJJTAsICUxCQkJCQlcbiIKKwkJIgliZXF6CSUwLCAxYgkJCQkJXG4iCisJCTogIj0mciIgKHRlbXApLCAiPW0iICh2LT5jb3VudGVyKQorCQk6ICJJciIgKGkpLCAibSIgKHYtPmNvdW50ZXIpKTsKKwl9IGVsc2UgeworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZhdG9taWNfbG9jaywgZmxhZ3MpOworCQl2LT5jb3VudGVyIC09IGk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmF0b21pY19sb2NrLCBmbGFncyk7CisJfQorfQorCisvKgorICogU2FtZSBhcyBhYm92ZSwgYnV0IHJldHVybiB0aGUgcmVzdWx0IHZhbHVlCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIGxvbmcgYXRvbWljNjRfYWRkX3JldHVybihsb25nIGksIGF0b21pYzY0X3QgKiB2KQoreworCXVuc2lnbmVkIGxvbmcgcmVzdWx0OworCisJaWYgKGNwdV9oYXNfbGxzYyAmJiBSMTAwMDBfTExTQ19XQVIpIHsKKwkJdW5zaWduZWQgbG9uZyB0ZW1wOworCisJCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkiMToJbGxkCSUxLCAlMgkJIyBhdG9taWM2NF9hZGRfcmV0dXJuCVxuIgorCQkiCWFkZHUJJTAsICUxLCAlMwkJCQlcbiIKKwkJIglzY2QJJTAsICUyCQkJCQlcbiIKKwkJIgliZXF6bAklMCwgMWIJCQkJCVxuIgorCQkiCWFkZHUJJTAsICUxLCAlMwkJCQlcbiIKKwkJIglzeW5jCQkJCQkJXG4iCisJCTogIj0mciIgKHJlc3VsdCksICI9JnIiICh0ZW1wKSwgIj1tIiAodi0+Y291bnRlcikKKwkJOiAiSXIiIChpKSwgIm0iICh2LT5jb3VudGVyKQorCQk6ICJtZW1vcnkiKTsKKwl9IGVsc2UgaWYgKGNwdV9oYXNfbGxzYykgeworCQl1bnNpZ25lZCBsb25nIHRlbXA7CisKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSIxOglsbGQJJTEsICUyCQkjIGF0b21pYzY0X2FkZF9yZXR1cm4JXG4iCisJCSIJYWRkdQklMCwgJTEsICUzCQkJCVxuIgorCQkiCXNjZAklMCwgJTIJCQkJCVxuIgorCQkiCWJlcXoJJTAsIDFiCQkJCQlcbiIKKwkJIglhZGR1CSUwLCAlMSwgJTMJCQkJXG4iCisJCSIJc3luYwkJCQkJCVxuIgorCQk6ICI9JnIiIChyZXN1bHQpLCAiPSZyIiAodGVtcCksICI9bSIgKHYtPmNvdW50ZXIpCisJCTogIklyIiAoaSksICJtIiAodi0+Y291bnRlcikKKwkJOiAibWVtb3J5Iik7CisJfSBlbHNlIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYXRvbWljX2xvY2ssIGZsYWdzKTsKKwkJcmVzdWx0ID0gdi0+Y291bnRlcjsKKwkJcmVzdWx0ICs9IGk7CisJCXYtPmNvdW50ZXIgPSByZXN1bHQ7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmF0b21pY19sb2NrLCBmbGFncyk7CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIF9faW5saW5lX18gbG9uZyBhdG9taWM2NF9zdWJfcmV0dXJuKGxvbmcgaSwgYXRvbWljNjRfdCAqIHYpCit7CisJdW5zaWduZWQgbG9uZyByZXN1bHQ7CisKKwlpZiAoY3B1X2hhc19sbHNjICYmIFIxMDAwMF9MTFNDX1dBUikgeworCQl1bnNpZ25lZCBsb25nIHRlbXA7CisKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSIxOglsbGQJJTEsICUyCQkjIGF0b21pYzY0X3N1Yl9yZXR1cm4JXG4iCisJCSIJc3VidQklMCwgJTEsICUzCQkJCVxuIgorCQkiCXNjZAklMCwgJTIJCQkJCVxuIgorCQkiCWJlcXpsCSUwLCAxYgkJCQkJXG4iCisJCSIJc3VidQklMCwgJTEsICUzCQkJCVxuIgorCQkiCXN5bmMJCQkJCQlcbiIKKwkJOiAiPSZyIiAocmVzdWx0KSwgIj0mciIgKHRlbXApLCAiPW0iICh2LT5jb3VudGVyKQorCQk6ICJJciIgKGkpLCAibSIgKHYtPmNvdW50ZXIpCisJCTogIm1lbW9yeSIpOworCX0gZWxzZSBpZiAoY3B1X2hhc19sbHNjKSB7CisJCXVuc2lnbmVkIGxvbmcgdGVtcDsKKworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJIjE6CWxsZAklMSwgJTIJCSMgYXRvbWljNjRfc3ViX3JldHVybglcbiIKKwkJIglzdWJ1CSUwLCAlMSwgJTMJCQkJXG4iCisJCSIJc2NkCSUwLCAlMgkJCQkJXG4iCisJCSIJYmVxegklMCwgMWIJCQkJCVxuIgorCQkiCXN1YnUJJTAsICUxLCAlMwkJCQlcbiIKKwkJIglzeW5jCQkJCQkJXG4iCisJCTogIj0mciIgKHJlc3VsdCksICI9JnIiICh0ZW1wKSwgIj1tIiAodi0+Y291bnRlcikKKwkJOiAiSXIiIChpKSwgIm0iICh2LT5jb3VudGVyKQorCQk6ICJtZW1vcnkiKTsKKwl9IGVsc2UgeworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZhdG9taWNfbG9jaywgZmxhZ3MpOworCQlyZXN1bHQgPSB2LT5jb3VudGVyOworCQlyZXN1bHQgLT0gaTsKKwkJdi0+Y291bnRlciA9IHJlc3VsdDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXRvbWljX2xvY2ssIGZsYWdzKTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogYXRvbWljNjRfc3ViX2lmX3Bvc2l0aXZlIC0gYWRkIGludGVnZXIgdG8gYXRvbWljIHZhcmlhYmxlCisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pYzY0X3QKKyAqCisgKiBBdG9taWNhbGx5IHRlc3QgQHYgYW5kIGRlY3JlbWVudCBpZiBpdCBpcyBncmVhdGVyIHRoYW4gMC4KKyAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBvbGQgdmFsdWUgb2YgQHYgbWludXMgMS4KKyAqLworc3RhdGljIF9faW5saW5lX18gbG9uZyBhdG9taWM2NF9zdWJfaWZfcG9zaXRpdmUobG9uZyBpLCBhdG9taWM2NF90ICogdikKK3sKKwl1bnNpZ25lZCBsb25nIHJlc3VsdDsKKworCWlmIChjcHVfaGFzX2xsc2MgJiYgUjEwMDAwX0xMU0NfV0FSKSB7CisJCXVuc2lnbmVkIGxvbmcgdGVtcDsKKworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJIjE6CWxsZAklMSwgJTIJCSMgYXRvbWljNjRfc3ViX2lmX3Bvc2l0aXZlXG4iCisJCSIJZHN1YnUJJTAsICUxLCAlMwkJCQlcbiIKKwkJIglibHR6CSUwLCAxZgkJCQkJXG4iCisJCSIJc2NkCSUwLCAlMgkJCQkJXG4iCisJCSIJYmVxemwJJTAsIDFiCQkJCQlcbiIKKwkJIglzeW5jCQkJCQkJXG4iCisJCSIxOgkJCQkJCQlcbiIKKwkJOiAiPSZyIiAocmVzdWx0KSwgIj0mciIgKHRlbXApLCAiPW0iICh2LT5jb3VudGVyKQorCQk6ICJJciIgKGkpLCAibSIgKHYtPmNvdW50ZXIpCisJCTogIm1lbW9yeSIpOworCX0gZWxzZSBpZiAoY3B1X2hhc19sbHNjKSB7CisJCXVuc2lnbmVkIGxvbmcgdGVtcDsKKworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJIjE6CWxsZAklMSwgJTIJCSMgYXRvbWljNjRfc3ViX2lmX3Bvc2l0aXZlXG4iCisJCSIJZHN1YnUJJTAsICUxLCAlMwkJCQlcbiIKKwkJIglibHR6CSUwLCAxZgkJCQkJXG4iCisJCSIJc2NkCSUwLCAlMgkJCQkJXG4iCisJCSIJYmVxegklMCwgMWIJCQkJCVxuIgorCQkiCXN5bmMJCQkJCQlcbiIKKwkJIjE6CQkJCQkJCVxuIgorCQk6ICI9JnIiIChyZXN1bHQpLCAiPSZyIiAodGVtcCksICI9bSIgKHYtPmNvdW50ZXIpCisJCTogIklyIiAoaSksICJtIiAodi0+Y291bnRlcikKKwkJOiAibWVtb3J5Iik7CisJfSBlbHNlIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYXRvbWljX2xvY2ssIGZsYWdzKTsKKwkJcmVzdWx0ID0gdi0+Y291bnRlcjsKKwkJcmVzdWx0IC09IGk7CisJCWlmIChyZXN1bHQgPj0gMCkKKwkJCXYtPmNvdW50ZXIgPSByZXN1bHQ7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmF0b21pY19sb2NrLCBmbGFncyk7CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKworI2RlZmluZSBhdG9taWM2NF9kZWNfcmV0dXJuKHYpIGF0b21pYzY0X3N1Yl9yZXR1cm4oMSwodikpCisjZGVmaW5lIGF0b21pYzY0X2luY19yZXR1cm4odikgYXRvbWljNjRfYWRkX3JldHVybigxLCh2KSkKKworLyoKKyAqIGF0b21pYzY0X3N1Yl9hbmRfdGVzdCAtIHN1YnRyYWN0IHZhbHVlIGZyb20gdmFyaWFibGUgYW5kIHRlc3QgcmVzdWx0CisgKiBAaTogaW50ZWdlciB2YWx1ZSB0byBzdWJ0cmFjdAorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWM2NF90CisgKgorICogQXRvbWljYWxseSBzdWJ0cmFjdHMgQGkgZnJvbSBAdiBhbmQgcmV0dXJucworICogdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIHplcm8sIG9yIGZhbHNlIGZvciBhbGwKKyAqIG90aGVyIGNhc2VzLgorICovCisjZGVmaW5lIGF0b21pYzY0X3N1Yl9hbmRfdGVzdChpLHYpIChhdG9taWM2NF9zdWJfcmV0dXJuKChpKSwgKHYpKSA9PSAwKQorCisvKgorICogYXRvbWljNjRfaW5jX2FuZF90ZXN0IC0gaW5jcmVtZW50IGFuZCB0ZXN0CisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pYzY0X3QKKyAqCisgKiBBdG9taWNhbGx5IGluY3JlbWVudHMgQHYgYnkgMQorICogYW5kIHJldHVybnMgdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIHplcm8sIG9yIGZhbHNlIGZvciBhbGwKKyAqIG90aGVyIGNhc2VzLgorICovCisjZGVmaW5lIGF0b21pYzY0X2luY19hbmRfdGVzdCh2KSAoYXRvbWljNjRfaW5jX3JldHVybih2KSA9PSAwKQorCisvKgorICogYXRvbWljNjRfZGVjX2FuZF90ZXN0IC0gZGVjcmVtZW50IGJ5IDEgYW5kIHRlc3QKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljNjRfdAorICoKKyAqIEF0b21pY2FsbHkgZGVjcmVtZW50cyBAdiBieSAxIGFuZAorICogcmV0dXJucyB0cnVlIGlmIHRoZSByZXN1bHQgaXMgMCwgb3IgZmFsc2UgZm9yIGFsbCBvdGhlcgorICogY2FzZXMuCisgKi8KKyNkZWZpbmUgYXRvbWljNjRfZGVjX2FuZF90ZXN0KHYpIChhdG9taWM2NF9zdWJfcmV0dXJuKDEsICh2KSkgPT0gMCkKKworLyoKKyAqIGF0b21pYzY0X2RlY19pZl9wb3NpdGl2ZSAtIGRlY3JlbWVudCBieSAxIGlmIG9sZCB2YWx1ZSBwb3NpdGl2ZQorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWM2NF90CisgKi8KKyNkZWZpbmUgYXRvbWljNjRfZGVjX2lmX3Bvc2l0aXZlKHYpCWF0b21pYzY0X3N1Yl9pZl9wb3NpdGl2ZSgxLCB2KQorCisvKgorICogYXRvbWljNjRfaW5jIC0gaW5jcmVtZW50IGF0b21pYyB2YXJpYWJsZQorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWM2NF90CisgKgorICogQXRvbWljYWxseSBpbmNyZW1lbnRzIEB2IGJ5IDEuCisgKi8KKyNkZWZpbmUgYXRvbWljNjRfaW5jKHYpIGF0b21pYzY0X2FkZCgxLCh2KSkKKworLyoKKyAqIGF0b21pYzY0X2RlYyAtIGRlY3JlbWVudCBhbmQgdGVzdAorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWM2NF90CisgKgorICogQXRvbWljYWxseSBkZWNyZW1lbnRzIEB2IGJ5IDEuCisgKi8KKyNkZWZpbmUgYXRvbWljNjRfZGVjKHYpIGF0b21pYzY0X3N1YigxLCh2KSkKKworLyoKKyAqIGF0b21pYzY0X2FkZF9uZWdhdGl2ZSAtIGFkZCBhbmQgdGVzdCBpZiBuZWdhdGl2ZQorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWM2NF90CisgKiBAaTogaW50ZWdlciB2YWx1ZSB0byBhZGQKKyAqCisgKiBBdG9taWNhbGx5IGFkZHMgQGkgdG8gQHYgYW5kIHJldHVybnMgdHJ1ZQorICogaWYgdGhlIHJlc3VsdCBpcyBuZWdhdGl2ZSwgb3IgZmFsc2Ugd2hlbgorICogcmVzdWx0IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB6ZXJvLgorICovCisjZGVmaW5lIGF0b21pYzY0X2FkZF9uZWdhdGl2ZShpLHYpIChhdG9taWM2NF9hZGRfcmV0dXJuKGksICh2KSkgPCAwKQorCisjZW5kaWYgLyogQ09ORklHX01JUFM2NCAqLworCisvKgorICogYXRvbWljKl9yZXR1cm4gb3BlcmF0aW9ucyBhcmUgc2VyaWFsaXppbmcgYnV0IG5vdCB0aGUgbm9uLSpfcmV0dXJuCisgKiB2ZXJzaW9ucy4KKyAqLworI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfZGVjKCkJc21wX21iKCkKKyNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWNfZGVjKCkJc21wX21iKCkKKyNkZWZpbmUgc21wX21iX19iZWZvcmVfYXRvbWljX2luYygpCXNtcF9tYigpCisjZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpCXNtcF9tYigpCisKKyNlbmRpZiAvKiBfQVNNX0FUT01JQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2JjYWNoZS5oIGIvaW5jbHVkZS9hc20tbWlwcy9iY2FjaGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDYxMDJiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9iY2FjaGUuaApAQCAtMCwwICsxLDYyIEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk3LCAxOTk5IGJ5IFJhbGYgQmFlY2hsZQorICogQ29weXJpZ2h0IChjKSAxOTk5IFNpbGljb24gR3JhcGhpY3MsIEluYy4KKyAqLworI2lmbmRlZiBfQVNNX0JDQUNIRV9ICisjZGVmaW5lIF9BU01fQkNBQ0hFX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisvKiBTb21lIFI0MDAwIC8gUjQ0MDAgLyBSNDYwMCAvIFI1MDAwIG1hY2hpbmVzIG1heSBoYXZlIGEgbm9uLWRtYS1jb2hlcmVudCwKKyAgIGNoaXBzZXQgaW1wbGVtZW50ZWQgY2FjaGVzLiAgT24gbWFjaGluZXMgd2l0aCBvdGhlciBDUFVzIHRoZSBDUFUgZG9lcyB0aGUKKyAgIGNhY2hlIHRoaW5nIGl0c2VsZi4gKi8KK3N0cnVjdCBiY2FjaGVfb3BzIHsKKwl2b2lkICgqYmNfZW5hYmxlKSh2b2lkKTsKKwl2b2lkICgqYmNfZGlzYWJsZSkodm9pZCk7CisJdm9pZCAoKmJjX3diYWNrX2ludikodW5zaWduZWQgbG9uZyBwYWdlLCB1bnNpZ25lZCBsb25nIHNpemUpOworCXZvaWQgKCpiY19pbnYpKHVuc2lnbmVkIGxvbmcgcGFnZSwgdW5zaWduZWQgbG9uZyBzaXplKTsKK307CisKK2V4dGVybiB2b2lkIGluZHlfc2NfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIHNuaV9wY2ltdF9zY19pbml0KHZvaWQpOworCisjaWZkZWYgQ09ORklHX0JPQVJEX1NDQUNIRQorCitleHRlcm4gc3RydWN0IGJjYWNoZV9vcHMgKmJjb3BzOworCitzdGF0aWMgaW5saW5lIHZvaWQgYmNfZW5hYmxlKHZvaWQpCit7CisJYmNvcHMtPmJjX2VuYWJsZSgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYmNfZGlzYWJsZSh2b2lkKQoreworCWJjb3BzLT5iY19kaXNhYmxlKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBiY193YmFja19pbnYodW5zaWduZWQgbG9uZyBwYWdlLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJYmNvcHMtPmJjX3diYWNrX2ludihwYWdlLCBzaXplKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGJjX2ludih1bnNpZ25lZCBsb25nIHBhZ2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwliY29wcy0+YmNfaW52KHBhZ2UsIHNpemUpOworfQorCisjZWxzZSAvKiAhZGVmaW5lZChDT05GSUdfQk9BUkRfU0NBQ0hFKSAqLworCisvKiBOb3QgUjQwMDAgLyBSNDQwMCAvIFI0NjAwIC8gUjUwMDAuICAqLworCisjZGVmaW5lIGJjX2VuYWJsZSgpIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgYmNfZGlzYWJsZSgpIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgYmNfd2JhY2tfaW52KHBhZ2UsIHNpemUpIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgYmNfaW52KHBhZ2UsIHNpemUpIGRvIHsgfSB3aGlsZSAoMCkKKworI2VuZGlmIC8qICFkZWZpbmVkKENPTkZJR19CT0FSRF9TQ0FDSEUpICovCisKKyNlbmRpZiAvKiBfQVNNX0JDQUNIRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2JpdG9wcy5oIGIvaW5jbHVkZS9hc20tbWlwcy9iaXRvcHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzlkMjE4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9iaXRvcHMuaApAQCAtMCwwICsxLDg1MCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5NCAtIDE5OTcsIDE5OTksIDIwMDAgIFJhbGYgQmFlY2hsZSAocmFsZkBnbnUub3JnKQorICogQ29weXJpZ2h0IChjKSAxOTk5LCAyMDAwICBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCisgKi8KKyNpZm5kZWYgX0FTTV9CSVRPUFNfSAorI2RlZmluZSBfQVNNX0JJVE9QU19ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgkJLyogc2lnaCAuLi4gKi8KKyNpbmNsdWRlIDxhc20vY3B1LWZlYXR1cmVzLmg+CisKKyNpZiAoX01JUFNfU1pMT05HID09IDMyKQorI2RlZmluZSBTWkxPTkdfTE9HIDUKKyNkZWZpbmUgU1pMT05HX01BU0sgMzFVTAorI2RlZmluZSBfX0xMCSJsbAkiCisjZGVmaW5lIF9fU0MJInNjCSIKKyNkZWZpbmUgY3B1X3RvX2xlbG9uZ3AoeCkgY3B1X3RvX2xlMzJwKChfX3UzMiAqKSAoeCkpIAorI2VsaWYgKF9NSVBTX1NaTE9ORyA9PSA2NCkKKyNkZWZpbmUgU1pMT05HX0xPRyA2CisjZGVmaW5lIFNaTE9OR19NQVNLIDYzVUwKKyNkZWZpbmUgX19MTAkibGxkCSIKKyNkZWZpbmUgX19TQwkic2NkCSIKKyNkZWZpbmUgY3B1X3RvX2xlbG9uZ3AoeCkgY3B1X3RvX2xlNjRwKChfX3U2NCAqKSAoeCkpIAorI2VuZGlmCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxhc20vaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8YXNtL3NnaWRlZnMuaD4KKyNpbmNsdWRlIDxhc20vd2FyLmg+CisKKy8qCisgKiBjbGVhcl9iaXQoKSBkb2Vzbid0IHByb3ZpZGUgYW55IGJhcnJpZXIgZm9yIHRoZSBjb21waWxlci4KKyAqLworI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKQlzbXBfbWIoKQorI2RlZmluZSBzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpCXNtcF9tYigpCisKKy8qCisgKiBPbmx5IGRpc2FibGUgaW50ZXJydXB0IGZvciBrZXJuZWwgbW9kZSBzdHVmZiB0byBrZWVwIHVzZXJtb2RlIHN0dWZmCisgKiB0aGF0IGRhcmVzIHRvIHVzZSBrZXJuZWwgaW5jbHVkZSBmaWxlcyBhbGl2ZS4KKyAqLworCisjZGVmaW5lIF9fYmlfZmxhZ3MJCQl1bnNpZ25lZCBsb25nIGZsYWdzCisjZGVmaW5lIF9fYmlfbG9jYWxfaXJxX3NhdmUoeCkJCWxvY2FsX2lycV9zYXZlKHgpCisjZGVmaW5lIF9fYmlfbG9jYWxfaXJxX3Jlc3RvcmUoeCkJbG9jYWxfaXJxX3Jlc3RvcmUoeCkKKyNlbHNlCisjZGVmaW5lIF9fYmlfZmxhZ3MKKyNkZWZpbmUgX19iaV9sb2NhbF9pcnFfc2F2ZSh4KQorI2RlZmluZSBfX2JpX2xvY2FsX2lycV9yZXN0b3JlKHgpCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisvKgorICogc2V0X2JpdCAtIEF0b21pY2FsbHkgc2V0IGEgYml0IGluIG1lbW9yeQorICogQG5yOiB0aGUgYml0IHRvIHNldAorICogQGFkZHI6IHRoZSBhZGRyZXNzIHRvIHN0YXJ0IGNvdW50aW5nIGZyb20KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGF0b21pYyBhbmQgbWF5IG5vdCBiZSByZW9yZGVyZWQuICBTZWUgX19zZXRfYml0KCkKKyAqIGlmIHlvdSBkbyBub3QgcmVxdWlyZSB0aGUgYXRvbWljIGd1YXJhbnRlZXMuCisgKiBOb3RlIHRoYXQgQG5yIG1heSBiZSBhbG1vc3QgYXJiaXRyYXJpbHkgbGFyZ2U7IHRoaXMgZnVuY3Rpb24gaXMgbm90CisgKiByZXN0cmljdGVkIHRvIGFjdGluZyBvbiBhIHNpbmdsZS13b3JkIHF1YW50aXR5LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2JpdCh1bnNpZ25lZCBsb25nIG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQoreworCXVuc2lnbmVkIGxvbmcgKm0gPSAoKHVuc2lnbmVkIGxvbmcgKikgYWRkcikgKyAobnIgPj4gU1pMT05HX0xPRyk7CisJdW5zaWduZWQgbG9uZyB0ZW1wOworCisJaWYgKGNwdV9oYXNfbGxzYyAmJiBSMTAwMDBfTExTQ19XQVIpIHsKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSIxOgkiIF9fTEwgIiUwLCAlMQkJCSMgc2V0X2JpdAlcbiIKKwkJIglvcgklMCwgJTIJCQkJCVxuIgorCQkiCSJfX1NDCSIlMCwgJTEJCQkJCVxuIgorCQkiCWJlcXpsCSUwLCAxYgkJCQkJXG4iCisJCTogIj0mciIgKHRlbXApLCAiPW0iICgqbSkKKwkJOiAiaXIiICgxVUwgPDwgKG5yICYgU1pMT05HX01BU0spKSwgIm0iICgqbSkpOworCX0gZWxzZSBpZiAoY3B1X2hhc19sbHNjKSB7CisJCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkiMToJIiBfX0xMICIlMCwgJTEJCQkjIHNldF9iaXQJXG4iCisJCSIJb3IJJTAsICUyCQkJCQlcbiIKKwkJIgkiX19TQwkiJTAsICUxCQkJCQlcbiIKKwkJIgliZXF6CSUwLCAxYgkJCQkJXG4iCisJCTogIj0mciIgKHRlbXApLCAiPW0iICgqbSkKKwkJOiAiaXIiICgxVUwgPDwgKG5yICYgU1pMT05HX01BU0spKSwgIm0iICgqbSkpOworCX0gZWxzZSB7CisJCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmEgPSBhZGRyOworCQl1bnNpZ25lZCBsb25nIG1hc2s7CisJCV9fYmlfZmxhZ3M7CisKKwkJYSArPSBuciA+PiBTWkxPTkdfTE9HOworCQltYXNrID0gMVVMIDw8IChuciAmIFNaTE9OR19NQVNLKTsKKwkJX19iaV9sb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJCSphIHw9IG1hc2s7CisJCV9fYmlfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCX0KK30KKworLyoKKyAqIF9fc2V0X2JpdCAtIFNldCBhIGJpdCBpbiBtZW1vcnkKKyAqIEBucjogdGhlIGJpdCB0byBzZXQKKyAqIEBhZGRyOiB0aGUgYWRkcmVzcyB0byBzdGFydCBjb3VudGluZyBmcm9tCisgKgorICogVW5saWtlIHNldF9iaXQoKSwgdGhpcyBmdW5jdGlvbiBpcyBub24tYXRvbWljIGFuZCBtYXkgYmUgcmVvcmRlcmVkLgorICogSWYgaXQncyBjYWxsZWQgb24gdGhlIHNhbWUgcmVnaW9uIG9mIG1lbW9yeSBzaW11bHRhbmVvdXNseSwgdGhlIGVmZmVjdAorICogbWF5IGJlIHRoYXQgb25seSBvbmUgb3BlcmF0aW9uIHN1Y2NlZWRzLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19zZXRfYml0KHVuc2lnbmVkIGxvbmcgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKiBhZGRyKQoreworCXVuc2lnbmVkIGxvbmcgKiBtID0gKCh1bnNpZ25lZCBsb25nICopIGFkZHIpICsgKG5yID4+IFNaTE9OR19MT0cpOworCisJKm0gfD0gMVVMIDw8IChuciAmIFNaTE9OR19NQVNLKTsKK30KKworLyoKKyAqIGNsZWFyX2JpdCAtIENsZWFycyBhIGJpdCBpbiBtZW1vcnkKKyAqIEBucjogQml0IHRvIGNsZWFyCisgKiBAYWRkcjogQWRkcmVzcyB0byBzdGFydCBjb3VudGluZyBmcm9tCisgKgorICogY2xlYXJfYml0KCkgaXMgYXRvbWljIGFuZCBtYXkgbm90IGJlIHJlb3JkZXJlZC4gIEhvd2V2ZXIsIGl0IGRvZXMKKyAqIG5vdCBjb250YWluIGEgbWVtb3J5IGJhcnJpZXIsIHNvIGlmIGl0IGlzIHVzZWQgZm9yIGxvY2tpbmcgcHVycG9zZXMsCisgKiB5b3Ugc2hvdWxkIGNhbGwgc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCkgYW5kL29yIHNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCkKKyAqIGluIG9yZGVyIHRvIGVuc3VyZSBjaGFuZ2VzIGFyZSB2aXNpYmxlIG9uIG90aGVyIHByb2Nlc3NvcnMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9iaXQodW5zaWduZWQgbG9uZyBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nICptID0gKCh1bnNpZ25lZCBsb25nICopIGFkZHIpICsgKG5yID4+IFNaTE9OR19MT0cpOworCXVuc2lnbmVkIGxvbmcgdGVtcDsKKworCWlmIChjcHVfaGFzX2xsc2MgJiYgUjEwMDAwX0xMU0NfV0FSKSB7CisJCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkiMToJIiBfX0xMICIlMCwgJTEJCQkjIGNsZWFyX2JpdAlcbiIKKwkJIglhbmQJJTAsICUyCQkJCQlcbiIKKwkJIgkiIF9fU0MgIiUwLCAlMQkJCQkJXG4iCisJCSIJYmVxemwJJTAsIDFiCQkJCQlcbiIKKwkJOiAiPSZyIiAodGVtcCksICI9bSIgKCptKQorCQk6ICJpciIgKH4oMVVMIDw8IChuciAmIFNaTE9OR19NQVNLKSkpLCAibSIgKCptKSk7CisJfSBlbHNlIGlmIChjcHVfaGFzX2xsc2MpIHsKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSIxOgkiIF9fTEwgIiUwLCAlMQkJCSMgY2xlYXJfYml0CVxuIgorCQkiCWFuZAklMCwgJTIJCQkJCVxuIgorCQkiCSIgX19TQyAiJTAsICUxCQkJCQlcbiIKKwkJIgliZXF6CSUwLCAxYgkJCQkJXG4iCisJCTogIj0mciIgKHRlbXApLCAiPW0iICgqbSkKKwkJOiAiaXIiICh+KDFVTCA8PCAobnIgJiBTWkxPTkdfTUFTSykpKSwgIm0iICgqbSkpOworCX0gZWxzZSB7CisJCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmEgPSBhZGRyOworCQl1bnNpZ25lZCBsb25nIG1hc2s7CisJCV9fYmlfZmxhZ3M7CisKKwkJYSArPSBuciA+PiBTWkxPTkdfTE9HOworCQltYXNrID0gMVVMIDw8IChuciAmIFNaTE9OR19NQVNLKTsKKwkJX19iaV9sb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJCSphICY9IH5tYXNrOworCQlfX2JpX2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwl9Cit9CisKKy8qCisgKiBfX2NsZWFyX2JpdCAtIENsZWFycyBhIGJpdCBpbiBtZW1vcnkKKyAqIEBucjogQml0IHRvIGNsZWFyCisgKiBAYWRkcjogQWRkcmVzcyB0byBzdGFydCBjb3VudGluZyBmcm9tCisgKgorICogVW5saWtlIGNsZWFyX2JpdCgpLCB0aGlzIGZ1bmN0aW9uIGlzIG5vbi1hdG9taWMgYW5kIG1heSBiZSByZW9yZGVyZWQuCisgKiBJZiBpdCdzIGNhbGxlZCBvbiB0aGUgc2FtZSByZWdpb24gb2YgbWVtb3J5IHNpbXVsdGFuZW91c2x5LCB0aGUgZWZmZWN0CisgKiBtYXkgYmUgdGhhdCBvbmx5IG9uZSBvcGVyYXRpb24gc3VjY2VlZHMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2NsZWFyX2JpdCh1bnNpZ25lZCBsb25nIG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICogYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nICogbSA9ICgodW5zaWduZWQgbG9uZyAqKSBhZGRyKSArIChuciA+PiBTWkxPTkdfTE9HKTsKKworCSptICY9IH4oMVVMIDw8IChuciAmIFNaTE9OR19NQVNLKSk7Cit9CisKKy8qCisgKiBjaGFuZ2VfYml0IC0gVG9nZ2xlIGEgYml0IGluIG1lbW9yeQorICogQG5yOiBCaXQgdG8gY2hhbmdlCisgKiBAYWRkcjogQWRkcmVzcyB0byBzdGFydCBjb3VudGluZyBmcm9tCisgKgorICogY2hhbmdlX2JpdCgpIGlzIGF0b21pYyBhbmQgbWF5IG5vdCBiZSByZW9yZGVyZWQuCisgKiBOb3RlIHRoYXQgQG5yIG1heSBiZSBhbG1vc3QgYXJiaXRyYXJpbHkgbGFyZ2U7IHRoaXMgZnVuY3Rpb24gaXMgbm90CisgKiByZXN0cmljdGVkIHRvIGFjdGluZyBvbiBhIHNpbmdsZS13b3JkIHF1YW50aXR5LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hhbmdlX2JpdCh1bnNpZ25lZCBsb25nIG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQoreworCWlmIChjcHVfaGFzX2xsc2MgJiYgUjEwMDAwX0xMU0NfV0FSKSB7CisJCXVuc2lnbmVkIGxvbmcgKm0gPSAoKHVuc2lnbmVkIGxvbmcgKikgYWRkcikgKyAobnIgPj4gU1pMT05HX0xPRyk7CisJCXVuc2lnbmVkIGxvbmcgdGVtcDsKKworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJIjE6CSIgX19MTCAiJTAsICUxCQkjIGNoYW5nZV9iaXQJXG4iCisJCSIJeG9yCSUwLCAlMgkJCQlcbiIKKwkJIgkiX19TQwkiJTAsICUxCQkJCVxuIgorCQkiCWJlcXpsCSUwLCAxYgkJCQlcbiIKKwkJOiAiPSZyIiAodGVtcCksICI9bSIgKCptKQorCQk6ICJpciIgKDFVTCA8PCAobnIgJiBTWkxPTkdfTUFTSykpLCAibSIgKCptKSk7CisJfSBlbHNlIGlmIChjcHVfaGFzX2xsc2MpIHsKKwkJdW5zaWduZWQgbG9uZyAqbSA9ICgodW5zaWduZWQgbG9uZyAqKSBhZGRyKSArIChuciA+PiBTWkxPTkdfTE9HKTsKKwkJdW5zaWduZWQgbG9uZyB0ZW1wOworCisJCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkiMToJIiBfX0xMICIlMCwgJTEJCSMgY2hhbmdlX2JpdAlcbiIKKwkJIgl4b3IJJTAsICUyCQkJCVxuIgorCQkiCSJfX1NDCSIlMCwgJTEJCQkJXG4iCisJCSIJYmVxegklMCwgMWIJCQkJXG4iCisJCTogIj0mciIgKHRlbXApLCAiPW0iICgqbSkKKwkJOiAiaXIiICgxVUwgPDwgKG5yICYgU1pMT05HX01BU0spKSwgIm0iICgqbSkpOworCX0gZWxzZSB7CisJCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmEgPSBhZGRyOworCQl1bnNpZ25lZCBsb25nIG1hc2s7CisJCV9fYmlfZmxhZ3M7CisKKwkJYSArPSBuciA+PiBTWkxPTkdfTE9HOworCQltYXNrID0gMVVMIDw8IChuciAmIFNaTE9OR19NQVNLKTsKKwkJX19iaV9sb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJCSphIF49IG1hc2s7CisJCV9fYmlfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCX0KK30KKworLyoKKyAqIF9fY2hhbmdlX2JpdCAtIFRvZ2dsZSBhIGJpdCBpbiBtZW1vcnkKKyAqIEBucjogdGhlIGJpdCB0byBjaGFuZ2UKKyAqIEBhZGRyOiB0aGUgYWRkcmVzcyB0byBzdGFydCBjb3VudGluZyBmcm9tCisgKgorICogVW5saWtlIGNoYW5nZV9iaXQoKSwgdGhpcyBmdW5jdGlvbiBpcyBub24tYXRvbWljIGFuZCBtYXkgYmUgcmVvcmRlcmVkLgorICogSWYgaXQncyBjYWxsZWQgb24gdGhlIHNhbWUgcmVnaW9uIG9mIG1lbW9yeSBzaW11bHRhbmVvdXNseSwgdGhlIGVmZmVjdAorICogbWF5IGJlIHRoYXQgb25seSBvbmUgb3BlcmF0aW9uIHN1Y2NlZWRzLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19jaGFuZ2VfYml0KHVuc2lnbmVkIGxvbmcgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKiBhZGRyKQoreworCXVuc2lnbmVkIGxvbmcgKiBtID0gKCh1bnNpZ25lZCBsb25nICopIGFkZHIpICsgKG5yID4+IFNaTE9OR19MT0cpOworCisJKm0gXj0gMVVMIDw8IChuciAmIFNaTE9OR19NQVNLKTsKK30KKworLyoKKyAqIHRlc3RfYW5kX3NldF9iaXQgLSBTZXQgYSBiaXQgYW5kIHJldHVybiBpdHMgb2xkIHZhbHVlCisgKiBAbnI6IEJpdCB0byBzZXQKKyAqIEBhZGRyOiBBZGRyZXNzIHRvIGNvdW50IGZyb20KKyAqCisgKiBUaGlzIG9wZXJhdGlvbiBpcyBhdG9taWMgYW5kIGNhbm5vdCBiZSByZW9yZGVyZWQuCisgKiBJdCBhbHNvIGltcGxpZXMgYSBtZW1vcnkgYmFycmllci4KKyAqLworc3RhdGljIGlubGluZSBpbnQgdGVzdF9hbmRfc2V0X2JpdCh1bnNpZ25lZCBsb25nIG5yLAorCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpCit7CisJaWYgKGNwdV9oYXNfbGxzYyAmJiBSMTAwMDBfTExTQ19XQVIpIHsKKwkJdW5zaWduZWQgbG9uZyAqbSA9ICgodW5zaWduZWQgbG9uZyAqKSBhZGRyKSArIChuciA+PiBTWkxPTkdfTE9HKTsKKwkJdW5zaWduZWQgbG9uZyB0ZW1wLCByZXM7CisKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSIxOgkiIF9fTEwgIiUwLCAlMQkJIyB0ZXN0X2FuZF9zZXRfYml0CVxuIgorCQkiCW9yCSUyLCAlMCwgJTMJCQkJXG4iCisJCSIJIiBfX1NDCSIlMiwgJTEJCQkJCVxuIgorCQkiCWJlcXpsCSUyLCAxYgkJCQkJXG4iCisJCSIJYW5kCSUyLCAlMCwgJTMJCQkJXG4iCisjaWZkZWYgQ09ORklHX1NNUAorCQkic3luYwkJCQkJCQlcbiIKKyNlbmRpZgorCQk6ICI9JnIiICh0ZW1wKSwgIj1tIiAoKm0pLCAiPSZyIiAocmVzKQorCQk6ICJyIiAoMVVMIDw8IChuciAmIFNaTE9OR19NQVNLKSksICJtIiAoKm0pCisJCTogIm1lbW9yeSIpOworCisJCXJldHVybiByZXMgIT0gMDsKKwl9IGVsc2UgaWYgKGNwdV9oYXNfbGxzYykgeworCQl1bnNpZ25lZCBsb25nICptID0gKCh1bnNpZ25lZCBsb25nICopIGFkZHIpICsgKG5yID4+IFNaTE9OR19MT0cpOworCQl1bnNpZ25lZCBsb25nIHRlbXAsIHJlczsKKworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJIgkuc2V0CW5vcmVvcmRlcgkjIHRlc3RfYW5kX3NldF9iaXQJXG4iCisJCSIxOgkiIF9fTEwgIiUwLCAlMQkJCQkJXG4iCisJCSIJb3IJJTIsICUwLCAlMwkJCQlcbiIKKwkJIgkiIF9fU0MJIiUyLCAlMQkJCQkJXG4iCisJCSIJYmVxegklMiwgMWIJCQkJCVxuIgorCQkiCSBhbmQJJTIsICUwLCAlMwkJCQlcbiIKKyNpZmRlZiBDT05GSUdfU01QCisJCSJzeW5jCQkJCQkJCVxuIgorI2VuZGlmCisJCSIuc2V0XHRyZW9yZGVyIgorCQk6ICI9JnIiICh0ZW1wKSwgIj1tIiAoKm0pLCAiPSZyIiAocmVzKQorCQk6ICJyIiAoMVVMIDw8IChuciAmIFNaTE9OR19NQVNLKSksICJtIiAoKm0pCisJCTogIm1lbW9yeSIpOworCisJCXJldHVybiByZXMgIT0gMDsKKwl9IGVsc2UgeworCQl2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphID0gYWRkcjsKKwkJdW5zaWduZWQgbG9uZyBtYXNrOworCQlpbnQgcmV0dmFsOworCQlfX2JpX2ZsYWdzOworCisJCWEgKz0gbnIgPj4gU1pMT05HX0xPRzsKKwkJbWFzayA9IDFVTCA8PCAobnIgJiBTWkxPTkdfTUFTSyk7CisJCV9fYmlfbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCQlyZXR2YWwgPSAobWFzayAmICphKSAhPSAwOworCQkqYSB8PSBtYXNrOworCQlfX2JpX2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCQlyZXR1cm4gcmV0dmFsOworCX0KK30KKworLyoKKyAqIF9fdGVzdF9hbmRfc2V0X2JpdCAtIFNldCBhIGJpdCBhbmQgcmV0dXJuIGl0cyBvbGQgdmFsdWUKKyAqIEBucjogQml0IHRvIHNldAorICogQGFkZHI6IEFkZHJlc3MgdG8gY291bnQgZnJvbQorICoKKyAqIFRoaXMgb3BlcmF0aW9uIGlzIG5vbi1hdG9taWMgYW5kIGNhbiBiZSByZW9yZGVyZWQuCisgKiBJZiB0d28gZXhhbXBsZXMgb2YgdGhpcyBvcGVyYXRpb24gcmFjZSwgb25lIGNhbiBhcHBlYXIgdG8gc3VjY2VlZAorICogYnV0IGFjdHVhbGx5IGZhaWwuICBZb3UgbXVzdCBwcm90ZWN0IG11bHRpcGxlIGFjY2Vzc2VzIHdpdGggYSBsb2NrLgorICovCitzdGF0aWMgaW5saW5lIGludCBfX3Rlc3RfYW5kX3NldF9iaXQodW5zaWduZWQgbG9uZyBuciwKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQoreworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmEgPSBhZGRyOworCXVuc2lnbmVkIGxvbmcgbWFzazsKKwlpbnQgcmV0dmFsOworCisJYSArPSBuciA+PiBTWkxPTkdfTE9HOworCW1hc2sgPSAxVUwgPDwgKG5yICYgU1pMT05HX01BU0spOworCXJldHZhbCA9IChtYXNrICYgKmEpICE9IDA7CisJKmEgfD0gbWFzazsKKworCXJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiB0ZXN0X2FuZF9jbGVhcl9iaXQgLSBDbGVhciBhIGJpdCBhbmQgcmV0dXJuIGl0cyBvbGQgdmFsdWUKKyAqIEBucjogQml0IHRvIGNsZWFyCisgKiBAYWRkcjogQWRkcmVzcyB0byBjb3VudCBmcm9tCisgKgorICogVGhpcyBvcGVyYXRpb24gaXMgYXRvbWljIGFuZCBjYW5ub3QgYmUgcmVvcmRlcmVkLgorICogSXQgYWxzbyBpbXBsaWVzIGEgbWVtb3J5IGJhcnJpZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHRlc3RfYW5kX2NsZWFyX2JpdCh1bnNpZ25lZCBsb25nIG5yLAorCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpCit7CisJaWYgKGNwdV9oYXNfbGxzYyAmJiBSMTAwMDBfTExTQ19XQVIpIHsKKwkJdW5zaWduZWQgbG9uZyAqbSA9ICgodW5zaWduZWQgbG9uZyAqKSBhZGRyKSArIChuciA+PiBTWkxPTkdfTE9HKTsKKwkJdW5zaWduZWQgbG9uZyB0ZW1wLCByZXM7CisKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSIxOgkiIF9fTEwJIiUwLCAlMQkJIyB0ZXN0X2FuZF9jbGVhcl9iaXQJXG4iCisJCSIJb3IJJTIsICUwLCAlMwkJCQlcbiIKKwkJIgl4b3IJJTIsICUzCQkJCQlcbiIKKwkJCV9fU0MgCSIlMiwgJTEJCQkJCVxuIgorCQkiCWJlcXpsCSUyLCAxYgkJCQkJXG4iCisJCSIJYW5kCSUyLCAlMCwgJTMJCQkJXG4iCisjaWZkZWYgQ09ORklHX1NNUAorCQkiCXN5bmMJCQkJCQlcbiIKKyNlbmRpZgorCQk6ICI9JnIiICh0ZW1wKSwgIj1tIiAoKm0pLCAiPSZyIiAocmVzKQorCQk6ICJyIiAoMVVMIDw8IChuciAmIFNaTE9OR19NQVNLKSksICJtIiAoKm0pCisJCTogIm1lbW9yeSIpOworCisJCXJldHVybiByZXMgIT0gMDsKKwl9IGVsc2UgaWYgKGNwdV9oYXNfbGxzYykgeworCQl1bnNpZ25lZCBsb25nICptID0gKCh1bnNpZ25lZCBsb25nICopIGFkZHIpICsgKG5yID4+IFNaTE9OR19MT0cpOworCQl1bnNpZ25lZCBsb25nIHRlbXAsIHJlczsKKworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJIgkuc2V0CW5vcmVvcmRlcgkjIHRlc3RfYW5kX2NsZWFyX2JpdAlcbiIKKwkJIjE6CSIgX19MTAkiJTAsICUxCQkJCQlcbiIKKwkJIglvcgklMiwgJTAsICUzCQkJCVxuIgorCQkiCXhvcgklMiwgJTMJCQkJCVxuIgorCQkJX19TQyAJIiUyLCAlMQkJCQkJXG4iCisJCSIJYmVxegklMiwgMWIJCQkJCVxuIgorCQkiCSBhbmQJJTIsICUwLCAlMwkJCQlcbiIKKyNpZmRlZiBDT05GSUdfU01QCisJCSIJc3luYwkJCQkJCVxuIgorI2VuZGlmCisJCSIJLnNldAlyZW9yZGVyCQkJCQlcbiIKKwkJOiAiPSZyIiAodGVtcCksICI9bSIgKCptKSwgIj0mciIgKHJlcykKKwkJOiAiciIgKDFVTCA8PCAobnIgJiBTWkxPTkdfTUFTSykpLCAibSIgKCptKQorCQk6ICJtZW1vcnkiKTsKKworCQlyZXR1cm4gcmVzICE9IDA7CisJfSBlbHNlIHsKKwkJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYSA9IGFkZHI7CisJCXVuc2lnbmVkIGxvbmcgbWFzazsKKwkJaW50IHJldHZhbDsKKwkJX19iaV9mbGFnczsKKworCQlhICs9IG5yID4+IFNaTE9OR19MT0c7CisJCW1hc2sgPSAxVUwgPDwgKG5yICYgU1pMT05HX01BU0spOworCQlfX2JpX2xvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJcmV0dmFsID0gKG1hc2sgJiAqYSkgIT0gMDsKKwkJKmEgJj0gfm1hc2s7CisJCV9fYmlfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJCXJldHVybiByZXR2YWw7CisJfQorfQorCisvKgorICogX190ZXN0X2FuZF9jbGVhcl9iaXQgLSBDbGVhciBhIGJpdCBhbmQgcmV0dXJuIGl0cyBvbGQgdmFsdWUKKyAqIEBucjogQml0IHRvIGNsZWFyCisgKiBAYWRkcjogQWRkcmVzcyB0byBjb3VudCBmcm9tCisgKgorICogVGhpcyBvcGVyYXRpb24gaXMgbm9uLWF0b21pYyBhbmQgY2FuIGJlIHJlb3JkZXJlZC4KKyAqIElmIHR3byBleGFtcGxlcyBvZiB0aGlzIG9wZXJhdGlvbiByYWNlLCBvbmUgY2FuIGFwcGVhciB0byBzdWNjZWVkCisgKiBidXQgYWN0dWFsbHkgZmFpbC4gIFlvdSBtdXN0IHByb3RlY3QgbXVsdGlwbGUgYWNjZXNzZXMgd2l0aCBhIGxvY2suCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IF9fdGVzdF9hbmRfY2xlYXJfYml0KHVuc2lnbmVkIGxvbmcgbnIsCisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqIGFkZHIpCit7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYSA9IGFkZHI7CisJdW5zaWduZWQgbG9uZyBtYXNrOworCWludCByZXR2YWw7CisKKwlhICs9IChuciA+PiBTWkxPTkdfTE9HKTsKKwltYXNrID0gMVVMIDw8IChuciAmIFNaTE9OR19NQVNLKTsKKwlyZXR2YWwgPSAoKG1hc2sgJiAqYSkgIT0gMCk7CisJKmEgJj0gfm1hc2s7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKgorICogdGVzdF9hbmRfY2hhbmdlX2JpdCAtIENoYW5nZSBhIGJpdCBhbmQgcmV0dXJuIGl0cyBvbGQgdmFsdWUKKyAqIEBucjogQml0IHRvIGNoYW5nZQorICogQGFkZHI6IEFkZHJlc3MgdG8gY291bnQgZnJvbQorICoKKyAqIFRoaXMgb3BlcmF0aW9uIGlzIGF0b21pYyBhbmQgY2Fubm90IGJlIHJlb3JkZXJlZC4KKyAqIEl0IGFsc28gaW1wbGllcyBhIG1lbW9yeSBiYXJyaWVyLgorICovCitzdGF0aWMgaW5saW5lIGludCB0ZXN0X2FuZF9jaGFuZ2VfYml0KHVuc2lnbmVkIGxvbmcgbnIsCisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcikKK3sKKwlpZiAoY3B1X2hhc19sbHNjICYmIFIxMDAwMF9MTFNDX1dBUikgeworCQl1bnNpZ25lZCBsb25nICptID0gKCh1bnNpZ25lZCBsb25nICopIGFkZHIpICsgKG5yID4+IFNaTE9OR19MT0cpOworCQl1bnNpZ25lZCBsb25nIHRlbXAsIHJlczsKKworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJIjE6CSIgX19MTAkiICUwLCAlMQkjIHRlc3RfYW5kX2NoYW5nZV9iaXQJXG4iCisJCSIJeG9yCSUyLCAlMCwgJTMJCQkJXG4iCisJCSIJIl9fU0MJIiUyLCAlMQkJCQkJXG4iCisJCSIJYmVxemwJJTIsIDFiCQkJCQlcbiIKKwkJIglhbmQJJTIsICUwLCAlMwkJCQlcbiIKKyNpZmRlZiBDT05GSUdfU01QCisJCSIJc3luYwkJCQkJCVxuIgorI2VuZGlmCisJCTogIj0mciIgKHRlbXApLCAiPW0iICgqbSksICI9JnIiIChyZXMpCisJCTogInIiICgxVUwgPDwgKG5yICYgU1pMT05HX01BU0spKSwgIm0iICgqbSkKKwkJOiAibWVtb3J5Iik7CisKKwkJcmV0dXJuIHJlcyAhPSAwOworCX0gZWxzZSBpZiAoY3B1X2hhc19sbHNjKSB7CisJCXVuc2lnbmVkIGxvbmcgKm0gPSAoKHVuc2lnbmVkIGxvbmcgKikgYWRkcikgKyAobnIgPj4gU1pMT05HX0xPRyk7CisJCXVuc2lnbmVkIGxvbmcgdGVtcCwgcmVzOworCisJCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkiCS5zZXQJbm9yZW9yZGVyCSMgdGVzdF9hbmRfY2hhbmdlX2JpdAlcbiIKKwkJIjE6CSIgX19MTAkiICUwLCAlMQkJCQlcbiIKKwkJIgl4b3IJJTIsICUwLCAlMwkJCQlcbiIKKwkJIgkiX19TQwkiXHQlMiwgJTEJCQkJXG4iCisJCSIJYmVxegklMiwgMWIJCQkJCVxuIgorCQkiCSBhbmQJJTIsICUwLCAlMwkJCQlcbiIKKyNpZmRlZiBDT05GSUdfU01QCisJCSIJc3luYwkJCQkJCVxuIgorI2VuZGlmCisJCSIJLnNldAlyZW9yZGVyCQkJCQlcbiIKKwkJOiAiPSZyIiAodGVtcCksICI9bSIgKCptKSwgIj0mciIgKHJlcykKKwkJOiAiciIgKDFVTCA8PCAobnIgJiBTWkxPTkdfTUFTSykpLCAibSIgKCptKQorCQk6ICJtZW1vcnkiKTsKKworCQlyZXR1cm4gcmVzICE9IDA7CisJfSBlbHNlIHsKKwkJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYSA9IGFkZHI7CisJCXVuc2lnbmVkIGxvbmcgbWFzaywgcmV0dmFsOworCQlfX2JpX2ZsYWdzOworCisJCWEgKz0gbnIgPj4gU1pMT05HX0xPRzsKKwkJbWFzayA9IDFVTCA8PCAobnIgJiBTWkxPTkdfTUFTSyk7CisJCV9fYmlfbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCQlyZXR2YWwgPSAobWFzayAmICphKSAhPSAwOworCQkqYSBePSBtYXNrOworCQlfX2JpX2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCQlyZXR1cm4gcmV0dmFsOworCX0KK30KKworLyoKKyAqIF9fdGVzdF9hbmRfY2hhbmdlX2JpdCAtIENoYW5nZSBhIGJpdCBhbmQgcmV0dXJuIGl0cyBvbGQgdmFsdWUKKyAqIEBucjogQml0IHRvIGNoYW5nZQorICogQGFkZHI6IEFkZHJlc3MgdG8gY291bnQgZnJvbQorICoKKyAqIFRoaXMgb3BlcmF0aW9uIGlzIG5vbi1hdG9taWMgYW5kIGNhbiBiZSByZW9yZGVyZWQuCisgKiBJZiB0d28gZXhhbXBsZXMgb2YgdGhpcyBvcGVyYXRpb24gcmFjZSwgb25lIGNhbiBhcHBlYXIgdG8gc3VjY2VlZAorICogYnV0IGFjdHVhbGx5IGZhaWwuICBZb3UgbXVzdCBwcm90ZWN0IG11bHRpcGxlIGFjY2Vzc2VzIHdpdGggYSBsb2NrLgorICovCitzdGF0aWMgaW5saW5lIGludCBfX3Rlc3RfYW5kX2NoYW5nZV9iaXQodW5zaWduZWQgbG9uZyBuciwKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQoreworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmEgPSBhZGRyOworCXVuc2lnbmVkIGxvbmcgbWFzazsKKwlpbnQgcmV0dmFsOworCisJYSArPSAobnIgPj4gU1pMT05HX0xPRyk7CisJbWFzayA9IDFVTCA8PCAobnIgJiBTWkxPTkdfTUFTSyk7CisJcmV0dmFsID0gKChtYXNrICYgKmEpICE9IDApOworCSphIF49IG1hc2s7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCisjdW5kZWYgX19iaV9mbGFncworI3VuZGVmIF9fYmlfbG9jYWxfaXJxX3NhdmUKKyN1bmRlZiBfX2JpX2xvY2FsX2lycV9yZXN0b3JlCisKKy8qCisgKiB0ZXN0X2JpdCAtIERldGVybWluZSB3aGV0aGVyIGEgYml0IGlzIHNldAorICogQG5yOiBiaXQgbnVtYmVyIHRvIHRlc3QKKyAqIEBhZGRyOiBBZGRyZXNzIHRvIHN0YXJ0IGNvdW50aW5nIGZyb20KKyAqLworc3RhdGljIGlubGluZSBpbnQgdGVzdF9iaXQodW5zaWduZWQgbG9uZyBuciwgY29uc3Qgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcikKK3sKKwlyZXR1cm4gMVVMICYgKGFkZHJbbnIgPj4gU1pMT05HX0xPR10gPj4gKG5yICYgU1pMT05HX01BU0spKTsKK30KKworLyoKKyAqIGZmeiAtIGZpbmQgZmlyc3QgemVybyBpbiB3b3JkLgorICogQHdvcmQ6IFRoZSB3b3JkIHRvIHNlYXJjaAorICoKKyAqIFVuZGVmaW5lZCBpZiBubyB6ZXJvIGV4aXN0cywgc28gY29kZSBzaG91bGQgY2hlY2sgYWdhaW5zdCB+MFVMIGZpcnN0LgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZmZ6KHVuc2lnbmVkIGxvbmcgd29yZCkKK3sKKwlpbnQgYiA9IDAsIHM7CisKKwl3b3JkID0gfndvcmQ7CisjaWZkZWYgQ09ORklHX01JUFMzMgorCXMgPSAxNjsgaWYgKHdvcmQgPDwgMTYgIT0gMCkgcyA9IDA7IGIgKz0gczsgd29yZCA+Pj0gczsKKwlzID0gIDg7IGlmICh3b3JkIDw8IDI0ICE9IDApIHMgPSAwOyBiICs9IHM7IHdvcmQgPj49IHM7CisJcyA9ICA0OyBpZiAod29yZCA8PCAyOCAhPSAwKSBzID0gMDsgYiArPSBzOyB3b3JkID4+PSBzOworCXMgPSAgMjsgaWYgKHdvcmQgPDwgMzAgIT0gMCkgcyA9IDA7IGIgKz0gczsgd29yZCA+Pj0gczsKKwlzID0gIDE7IGlmICh3b3JkIDw8IDMxICE9IDApIHMgPSAwOyBiICs9IHM7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfTUlQUzY0CisJcyA9IDMyOyBpZiAod29yZCA8PCAzMiAhPSAwKSBzID0gMDsgYiArPSBzOyB3b3JkID4+PSBzOworCXMgPSAxNjsgaWYgKHdvcmQgPDwgNDggIT0gMCkgcyA9IDA7IGIgKz0gczsgd29yZCA+Pj0gczsKKwlzID0gIDg7IGlmICh3b3JkIDw8IDU2ICE9IDApIHMgPSAwOyBiICs9IHM7IHdvcmQgPj49IHM7CisJcyA9ICA0OyBpZiAod29yZCA8PCA2MCAhPSAwKSBzID0gMDsgYiArPSBzOyB3b3JkID4+PSBzOworCXMgPSAgMjsgaWYgKHdvcmQgPDwgNjIgIT0gMCkgcyA9IDA7IGIgKz0gczsgd29yZCA+Pj0gczsKKwlzID0gIDE7IGlmICh3b3JkIDw8IDYzICE9IDApIHMgPSAwOyBiICs9IHM7CisjZW5kaWYKKworCXJldHVybiBiOworfQorCisvKgorICogX19mZnMgLSBmaW5kIGZpcnN0IGJpdCBpbiB3b3JkLgorICogQHdvcmQ6IFRoZSB3b3JkIHRvIHNlYXJjaAorICoKKyAqIFVuZGVmaW5lZCBpZiBubyBiaXQgZXhpc3RzLCBzbyBjb2RlIHNob3VsZCBjaGVjayBhZ2FpbnN0IDAgZmlyc3QuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX2Zmcyh1bnNpZ25lZCBsb25nIHdvcmQpCit7CisJcmV0dXJuIGZmeih+d29yZCk7Cit9CisKKy8qCisgKiBmbHM6IGZpbmQgbGFzdCBiaXQgc2V0LgorICovCisKKyNkZWZpbmUgZmxzKHgpIGdlbmVyaWNfZmxzKHgpCisKKy8qCisgKiBmaW5kX25leHRfemVyb19iaXQgLSBmaW5kIHRoZSBmaXJzdCB6ZXJvIGJpdCBpbiBhIG1lbW9yeSByZWdpb24KKyAqIEBhZGRyOiBUaGUgYWRkcmVzcyB0byBiYXNlIHRoZSBzZWFyY2ggb24KKyAqIEBvZmZzZXQ6IFRoZSBiaXRudW1iZXIgdG8gc3RhcnQgc2VhcmNoaW5nIGF0CisgKiBAc2l6ZTogVGhlIG1heGltdW0gc2l6ZSB0byBzZWFyY2gKKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGZpbmRfbmV4dF96ZXJvX2JpdChjb25zdCB1bnNpZ25lZCBsb25nICphZGRyLAorCXVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpCit7CisJY29uc3QgdW5zaWduZWQgbG9uZyAqcCA9IGFkZHIgKyAob2Zmc2V0ID4+IFNaTE9OR19MT0cpOworCXVuc2lnbmVkIGxvbmcgcmVzdWx0ID0gb2Zmc2V0ICYgflNaTE9OR19NQVNLOworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJaWYgKG9mZnNldCA+PSBzaXplKQorCQlyZXR1cm4gc2l6ZTsKKwlzaXplIC09IHJlc3VsdDsKKwlvZmZzZXQgJj0gU1pMT05HX01BU0s7CisJaWYgKG9mZnNldCkgeworCQl0bXAgPSAqKHArKyk7CisJCXRtcCB8PSB+MFVMID4+IChfTUlQU19TWkxPTkctb2Zmc2V0KTsKKwkJaWYgKHNpemUgPCBfTUlQU19TWkxPTkcpCisJCQlnb3RvIGZvdW5kX2ZpcnN0OworCQlpZiAofnRtcCkKKwkJCWdvdG8gZm91bmRfbWlkZGxlOworCQlzaXplIC09IF9NSVBTX1NaTE9ORzsKKwkJcmVzdWx0ICs9IF9NSVBTX1NaTE9ORzsKKwl9CisJd2hpbGUgKHNpemUgJiB+U1pMT05HX01BU0spIHsKKwkJaWYgKH4odG1wID0gKihwKyspKSkKKwkJCWdvdG8gZm91bmRfbWlkZGxlOworCQlyZXN1bHQgKz0gX01JUFNfU1pMT05HOworCQlzaXplIC09IF9NSVBTX1NaTE9ORzsKKwl9CisJaWYgKCFzaXplKQorCQlyZXR1cm4gcmVzdWx0OworCXRtcCA9ICpwOworCitmb3VuZF9maXJzdDoKKwl0bXAgfD0gfjBVTCA8PCBzaXplOworCWlmICh0bXAgPT0gfjBVTCkJCS8qIEFyZSBhbnkgYml0cyB6ZXJvPyAqLworCQlyZXR1cm4gcmVzdWx0ICsgc2l6ZTsJLyogTm9wZS4gKi8KK2ZvdW5kX21pZGRsZToKKwlyZXR1cm4gcmVzdWx0ICsgZmZ6KHRtcCk7Cit9CisKKyNkZWZpbmUgZmluZF9maXJzdF96ZXJvX2JpdChhZGRyLCBzaXplKSBcCisJZmluZF9uZXh0X3plcm9fYml0KChhZGRyKSwgKHNpemUpLCAwKQorCisvKgorICogZmluZF9uZXh0X2JpdCAtIGZpbmQgdGhlIG5leHQgc2V0IGJpdCBpbiBhIG1lbW9yeSByZWdpb24KKyAqIEBhZGRyOiBUaGUgYWRkcmVzcyB0byBiYXNlIHRoZSBzZWFyY2ggb24KKyAqIEBvZmZzZXQ6IFRoZSBiaXRudW1iZXIgdG8gc3RhcnQgc2VhcmNoaW5nIGF0CisgKiBAc2l6ZTogVGhlIG1heGltdW0gc2l6ZSB0byBzZWFyY2gKKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGZpbmRfbmV4dF9iaXQoY29uc3QgdW5zaWduZWQgbG9uZyAqYWRkciwKKwl1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQoreworCWNvbnN0IHVuc2lnbmVkIGxvbmcgKnAgPSBhZGRyICsgKG9mZnNldCA+PiBTWkxPTkdfTE9HKTsKKwl1bnNpZ25lZCBsb25nIHJlc3VsdCA9IG9mZnNldCAmIH5TWkxPTkdfTUFTSzsKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCWlmIChvZmZzZXQgPj0gc2l6ZSkKKwkJcmV0dXJuIHNpemU7CisJc2l6ZSAtPSByZXN1bHQ7CisJb2Zmc2V0ICY9IFNaTE9OR19NQVNLOworCWlmIChvZmZzZXQpIHsKKwkJdG1wID0gKihwKyspOworCQl0bXAgJj0gfjBVTCA8PCBvZmZzZXQ7CisJCWlmIChzaXplIDwgX01JUFNfU1pMT05HKQorCQkJZ290byBmb3VuZF9maXJzdDsKKwkJaWYgKHRtcCkKKwkJCWdvdG8gZm91bmRfbWlkZGxlOworCQlzaXplIC09IF9NSVBTX1NaTE9ORzsKKwkJcmVzdWx0ICs9IF9NSVBTX1NaTE9ORzsKKwl9CisJd2hpbGUgKHNpemUgJiB+U1pMT05HX01BU0spIHsKKwkJaWYgKCh0bXAgPSAqKHArKykpKQorCQkJZ290byBmb3VuZF9taWRkbGU7CisJCXJlc3VsdCArPSBfTUlQU19TWkxPTkc7CisJCXNpemUgLT0gX01JUFNfU1pMT05HOworCX0KKwlpZiAoIXNpemUpCisJCXJldHVybiByZXN1bHQ7CisJdG1wID0gKnA7CisKK2ZvdW5kX2ZpcnN0OgorCXRtcCAmPSB+MFVMID4+IChfTUlQU19TWkxPTkcgLSBzaXplKTsKKwlpZiAodG1wID09IDBVTCkJCQkvKiBBcmUgYW55IGJpdHMgc2V0PyAqLworCQlyZXR1cm4gcmVzdWx0ICsgc2l6ZTsJLyogTm9wZS4gKi8KK2ZvdW5kX21pZGRsZToKKwlyZXR1cm4gcmVzdWx0ICsgX19mZnModG1wKTsKK30KKworLyoKKyAqIGZpbmRfZmlyc3RfYml0IC0gZmluZCB0aGUgZmlyc3Qgc2V0IGJpdCBpbiBhIG1lbW9yeSByZWdpb24KKyAqIEBhZGRyOiBUaGUgYWRkcmVzcyB0byBzdGFydCB0aGUgc2VhcmNoIGF0CisgKiBAc2l6ZTogVGhlIG1heGltdW0gc2l6ZSB0byBzZWFyY2gKKyAqCisgKiBSZXR1cm5zIHRoZSBiaXQtbnVtYmVyIG9mIHRoZSBmaXJzdCBzZXQgYml0LCBub3QgdGhlIG51bWJlciBvZiB0aGUgYnl0ZQorICogY29udGFpbmluZyBhIGJpdC4KKyAqLworI2RlZmluZSBmaW5kX2ZpcnN0X2JpdChhZGRyLCBzaXplKSBcCisJZmluZF9uZXh0X2JpdCgoYWRkciksIChzaXplKSwgMCkKKworI2lmZGVmIF9fS0VSTkVMX18KKworLyoKKyAqIEV2ZXJ5IGFyY2hpdGVjdHVyZSBtdXN0IGRlZmluZSB0aGlzIGZ1bmN0aW9uLiBJdCdzIHRoZSBmYXN0ZXN0CisgKiB3YXkgb2Ygc2VhcmNoaW5nIGEgMTQwLWJpdCBiaXRtYXAgd2hlcmUgdGhlIGZpcnN0IDEwMCBiaXRzIGFyZQorICogdW5saWtlbHkgdG8gYmUgc2V0LiBJdCdzIGd1YXJhbnRlZWQgdGhhdCBhdCBsZWFzdCBvbmUgb2YgdGhlIDE0MAorICogYml0cyBpcyBjbGVhcmVkLgorICovCitzdGF0aWMgaW5saW5lIGludCBzY2hlZF9maW5kX2ZpcnN0X2JpdChjb25zdCB1bnNpZ25lZCBsb25nICpiKQoreworI2lmZGVmIENPTkZJR19NSVBTMzIKKwlpZiAodW5saWtlbHkoYlswXSkpCisJCXJldHVybiBfX2ZmcyhiWzBdKTsKKwlpZiAodW5saWtlbHkoYlsxXSkpCisJCXJldHVybiBfX2ZmcyhiWzFdKSArIDMyOworCWlmICh1bmxpa2VseShiWzJdKSkKKwkJcmV0dXJuIF9fZmZzKGJbMl0pICsgNjQ7CisJaWYgKGJbM10pCisJCXJldHVybiBfX2ZmcyhiWzNdKSArIDk2OworCXJldHVybiBfX2ZmcyhiWzRdKSArIDEyODsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19NSVBTNjQKKwlpZiAodW5saWtlbHkoYlswXSkpCisJCXJldHVybiBfX2ZmcyhiWzBdKTsKKwlpZiAodW5saWtlbHkoYlsxXSkpCisJCXJldHVybiBfX2ZmcyhiWzFdKSArIDY0OworCXJldHVybiBfX2ZmcyhiWzJdKSArIDEyODsKKyNlbmRpZgorfQorCisvKgorICogZmZzIC0gZmluZCBmaXJzdCBiaXQgc2V0CisgKiBAeDogdGhlIHdvcmQgdG8gc2VhcmNoCisgKgorICogVGhpcyBpcyBkZWZpbmVkIHRoZSBzYW1lIHdheSBhcworICogdGhlIGxpYmMgYW5kIGNvbXBpbGVyIGJ1aWx0aW4gZmZzIHJvdXRpbmVzLCB0aGVyZWZvcmUKKyAqIGRpZmZlcnMgaW4gc3Bpcml0IGZyb20gdGhlIGFib3ZlIGZmeiAobWFuIGZmcykuCisgKi8KKworI2RlZmluZSBmZnMoeCkgZ2VuZXJpY19mZnMoeCkKKworLyoKKyAqIGh3ZWlnaHROIC0gcmV0dXJucyB0aGUgaGFtbWluZyB3ZWlnaHQgb2YgYSBOLWJpdCB3b3JkCisgKiBAeDogdGhlIHdvcmQgdG8gd2VpZ2gKKyAqCisgKiBUaGUgSGFtbWluZyBXZWlnaHQgb2YgYSBudW1iZXIgaXMgdGhlIHRvdGFsIG51bWJlciBvZiBiaXRzIHNldCBpbiBpdC4KKyAqLworCisjZGVmaW5lIGh3ZWlnaHQ2NCh4KQlnZW5lcmljX2h3ZWlnaHQ2NCh4KQorI2RlZmluZSBod2VpZ2h0MzIoeCkJZ2VuZXJpY19od2VpZ2h0MzIoeCkKKyNkZWZpbmUgaHdlaWdodDE2KHgpCWdlbmVyaWNfaHdlaWdodDE2KHgpCisjZGVmaW5lIGh3ZWlnaHQ4KHgpCWdlbmVyaWNfaHdlaWdodDgoeCkKKworc3RhdGljIGlubGluZSBpbnQgX190ZXN0X2FuZF9zZXRfbGVfYml0KHVuc2lnbmVkIGxvbmcgbnIsIHVuc2lnbmVkIGxvbmcgKmFkZHIpCit7CisJdW5zaWduZWQgY2hhcgkqQUREUiA9ICh1bnNpZ25lZCBjaGFyICopIGFkZHI7CisJaW50CQltYXNrLCByZXR2YWw7CisKKwlBRERSICs9IG5yID4+IDM7CisJbWFzayA9IDEgPDwgKG5yICYgMHgwNyk7CisJcmV0dmFsID0gKG1hc2sgJiAqQUREUikgIT0gMDsKKwkqQUREUiB8PSBtYXNrOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGlubGluZSBpbnQgX190ZXN0X2FuZF9jbGVhcl9sZV9iaXQodW5zaWduZWQgbG9uZyBuciwgdW5zaWduZWQgbG9uZyAqYWRkcikKK3sKKwl1bnNpZ25lZCBjaGFyCSpBRERSID0gKHVuc2lnbmVkIGNoYXIgKikgYWRkcjsKKwlpbnQJCW1hc2ssIHJldHZhbDsKKworCUFERFIgKz0gbnIgPj4gMzsKKwltYXNrID0gMSA8PCAobnIgJiAweDA3KTsKKwlyZXR2YWwgPSAobWFzayAmICpBRERSKSAhPSAwOworCSpBRERSICY9IH5tYXNrOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGlubGluZSBpbnQgdGVzdF9sZV9iaXQodW5zaWduZWQgbG9uZyBuciwgY29uc3QgdW5zaWduZWQgbG9uZyAqIGFkZHIpCit7CisJY29uc3QgdW5zaWduZWQgY2hhcgkqQUREUiA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopIGFkZHI7CisJaW50CQkJbWFzazsKKworCUFERFIgKz0gbnIgPj4gMzsKKwltYXNrID0gMSA8PCAobnIgJiAweDA3KTsKKworCXJldHVybiAoKG1hc2sgJiAqQUREUikgIT0gMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBmaW5kX25leHRfemVyb19sZV9iaXQodW5zaWduZWQgbG9uZyAqYWRkciwKKwl1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQoreworCXVuc2lnbmVkIGxvbmcgKnAgPSAoKHVuc2lnbmVkIGxvbmcgKikgYWRkcikgKyAob2Zmc2V0ID4+IFNaTE9OR19MT0cpOworCXVuc2lnbmVkIGxvbmcgcmVzdWx0ID0gb2Zmc2V0ICYgflNaTE9OR19NQVNLOworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJaWYgKG9mZnNldCA+PSBzaXplKQorCQlyZXR1cm4gc2l6ZTsKKwlzaXplIC09IHJlc3VsdDsKKwlvZmZzZXQgJj0gU1pMT05HX01BU0s7CisJaWYgKG9mZnNldCkgeworCQl0bXAgPSBjcHVfdG9fbGVsb25ncChwKyspOworCQl0bXAgfD0gfjBVTCA+PiAoX01JUFNfU1pMT05HLW9mZnNldCk7IC8qIGJ1ZyBvciBmZWF0dXJlID8gKi8KKwkJaWYgKHNpemUgPCBfTUlQU19TWkxPTkcpCisJCQlnb3RvIGZvdW5kX2ZpcnN0OworCQlpZiAofnRtcCkKKwkJCWdvdG8gZm91bmRfbWlkZGxlOworCQlzaXplIC09IF9NSVBTX1NaTE9ORzsKKwkJcmVzdWx0ICs9IF9NSVBTX1NaTE9ORzsKKwl9CisJd2hpbGUgKHNpemUgJiB+U1pMT05HX01BU0spIHsKKwkJaWYgKH4odG1wID0gY3B1X3RvX2xlbG9uZ3AocCsrKSkpCisJCQlnb3RvIGZvdW5kX21pZGRsZTsKKwkJcmVzdWx0ICs9IF9NSVBTX1NaTE9ORzsKKwkJc2l6ZSAtPSBfTUlQU19TWkxPTkc7CisJfQorCWlmICghc2l6ZSkKKwkJcmV0dXJuIHJlc3VsdDsKKwl0bXAgPSBjcHVfdG9fbGVsb25ncChwKTsKKworZm91bmRfZmlyc3Q6CisJdG1wIHw9IH4wVUwgPDwgc2l6ZTsKKwlpZiAodG1wID09IH4wVUwpCQkvKiBBcmUgYW55IGJpdHMgemVybz8gKi8KKwkJcmV0dXJuIHJlc3VsdCArIHNpemU7CS8qIE5vcGUuICovCisKK2ZvdW5kX21pZGRsZToKKwlyZXR1cm4gcmVzdWx0ICsgZmZ6KHRtcCk7Cit9CisKKyNkZWZpbmUgZmluZF9maXJzdF96ZXJvX2xlX2JpdChhZGRyLCBzaXplKSBcCisJZmluZF9uZXh0X3plcm9fbGVfYml0KChhZGRyKSwgKHNpemUpLCAwKQorCisjZGVmaW5lIGV4dDJfc2V0X2JpdChucixhZGRyKSBcCisJX190ZXN0X2FuZF9zZXRfbGVfYml0KChuciksKHVuc2lnbmVkIGxvbmcqKWFkZHIpCisjZGVmaW5lIGV4dDJfY2xlYXJfYml0KG5yLCBhZGRyKSBcCisJX190ZXN0X2FuZF9jbGVhcl9sZV9iaXQoKG5yKSwodW5zaWduZWQgbG9uZyopYWRkcikKKyAjZGVmaW5lIGV4dDJfc2V0X2JpdF9hdG9taWMobG9jaywgbnIsIGFkZHIpCQlcCisoewkJCQkJCQlcCisJaW50IHJldDsJCQkJCVwKKwlzcGluX2xvY2sobG9jayk7CQkJCVwKKwlyZXQgPSBleHQyX3NldF9iaXQoKG5yKSwgKGFkZHIpKTsJCVwKKwlzcGluX3VubG9jayhsb2NrKTsJCQkJXAorCXJldDsJCQkJCQlcCit9KQorCisjZGVmaW5lIGV4dDJfY2xlYXJfYml0X2F0b21pYyhsb2NrLCBuciwgYWRkcikJCVwKKyh7CQkJCQkJCVwKKwlpbnQgcmV0OwkJCQkJXAorCXNwaW5fbG9jayhsb2NrKTsJCQkJXAorCXJldCA9IGV4dDJfY2xlYXJfYml0KChuciksIChhZGRyKSk7CQlcCisJc3Bpbl91bmxvY2sobG9jayk7CQkJCVwKKwlyZXQ7CQkJCQkJXAorfSkKKyNkZWZpbmUgZXh0Ml90ZXN0X2JpdChuciwgYWRkcikJdGVzdF9sZV9iaXQoKG5yKSwodW5zaWduZWQgbG9uZyopYWRkcikKKyNkZWZpbmUgZXh0Ml9maW5kX2ZpcnN0X3plcm9fYml0KGFkZHIsIHNpemUpIFwKKwlmaW5kX2ZpcnN0X3plcm9fbGVfYml0KCh1bnNpZ25lZCBsb25nKilhZGRyLCBzaXplKQorI2RlZmluZSBleHQyX2ZpbmRfbmV4dF96ZXJvX2JpdChhZGRyLCBzaXplLCBvZmYpIFwKKwlmaW5kX25leHRfemVyb19sZV9iaXQoKHVuc2lnbmVkIGxvbmcqKWFkZHIsIHNpemUsIG9mZikKKworLyoKKyAqIEJpdG1hcCBmdW5jdGlvbnMgZm9yIHRoZSBtaW5peCBmaWxlc3lzdGVtLgorICoKKyAqIEZJWE1FOiBUaGVzZSBhc3N1bWUgdGhhdCBNaW5peCB1c2VzIHRoZSBuYXRpdmUgYnl0ZS9iaXRvcmRlci4KKyAqIFRoaXMgbGltaXRzIHRoZSBNaW5peCBmaWxlc3lzdGVtJ3MgdmFsdWUgZm9yIGRhdGEgZXhjaGFuZ2UgdmVyeSBtdWNoLgorICovCisjZGVmaW5lIG1pbml4X3Rlc3RfYW5kX3NldF9iaXQobnIsYWRkcikgdGVzdF9hbmRfc2V0X2JpdChucixhZGRyKQorI2RlZmluZSBtaW5peF9zZXRfYml0KG5yLGFkZHIpIHNldF9iaXQobnIsYWRkcikKKyNkZWZpbmUgbWluaXhfdGVzdF9hbmRfY2xlYXJfYml0KG5yLGFkZHIpIHRlc3RfYW5kX2NsZWFyX2JpdChucixhZGRyKQorI2RlZmluZSBtaW5peF90ZXN0X2JpdChucixhZGRyKSB0ZXN0X2JpdChucixhZGRyKQorI2RlZmluZSBtaW5peF9maW5kX2ZpcnN0X3plcm9fYml0KGFkZHIsc2l6ZSkgZmluZF9maXJzdF96ZXJvX2JpdChhZGRyLHNpemUpCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfQVNNX0JJVE9QU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2Jvb3RpbmZvLmggYi9pbmNsdWRlL2FzbS1taXBzL2Jvb3RpbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFlNTdkNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvYm9vdGluZm8uaApAQCAtMCwwICsxLDI1NiBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDIwMDMgYnkgUmFsZiBCYWVjaGxlCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYgQW5kcmVhcyBCdXNzZQorICogQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2IFN0b25lZCBFbGlwb3QKKyAqIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiBQYXVsIE0uIEFudG9pbmUuCisgKi8KKyNpZm5kZWYgX0FTTV9CT09USU5GT19ICisjZGVmaW5lIF9BU01fQk9PVElORk9fSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKworLyoKKyAqIFRoZSBNQUNIX0dST1VQXyBJRHMgYXJlIHRoZSBlcXVpdmFsZW50IHRvIFBDSSB2ZW5kb3IgSURzOyB0aGUgcmVtYWluaW5nCisgKiBNQUNIXyB2YWx1ZXMgZXF1aXZhbGVudCB0byBwcm9kdWN0IElEcy4gIEFzIHN1Y2ggdGhlIG51bWJlcnMgZG8gbm90CisgKiBuZWNlc3NhcmlseSByZWZsZWN0IHRlY2huaWNhbCByZWxhdGlvbnMgb3Igc2ltaWxhcml0aWVzIGJldHdlZW4gc3lzdGVtcy4KKyAqLworCisvKgorICogVmFsaWQgbWFjaHR5cGUgdmFsdWVzIGZvciBncm91cCB1bmtub3duCisgKi8KKyNkZWZpbmUgTUFDSF9HUk9VUF9VTktOT1dOICAgICAgMAkvKiB3aGF0ZXZlci4uLgkJCSovCisjZGVmaW5lICBNQUNIX1VOS05PV04JCTAJLyogd2hhdGV2ZXIuLi4JCQkqLworCisvKgorICogVmFsaWQgbWFjaHR5cGUgdmFsdWVzIGZvciBncm91cCBKQVpaCisgKi8KKyNkZWZpbmUgTUFDSF9HUk9VUF9KQVpaCQkxIAkvKiBKYXp6CQkJCSovCisjZGVmaW5lICBNQUNIX0FDRVJfUElDQV82MQkwCS8qIEFjZXIgUElDQS02MSAoUElDQTEpCQkqLworI2RlZmluZSAgTUFDSF9NSVBTX01BR05VTV80MDAwCTEJLyogTWlwcyBNYWdudW0gNDAwMCAiUkM0MDMwIgkqLworI2RlZmluZSAgTUFDSF9PTElWRVRUSV9NNzAwCTIJLyogT2xpdmV0dGkgTTcwMC0xMCAoLTE1ID8/KSAgICAqLworCisvKgorICogVmFsaWQgbWFjaHR5cGUgZm9yIGdyb3VwIERFQworICovCisjZGVmaW5lIE1BQ0hfR1JPVVBfREVDICAgICAgICAgIDIJLyogRGlnaXRhbCBFcXVpcG1lbnQJCSovCisjZGVmaW5lICBNQUNIX0RTVU5LTk9XTgkJMAorI2RlZmluZSAgTUFDSF9EUzIzMTAwCQkxCS8qIERFQ3N0YXRpb24gMjEwMCBvciAzMTAwCSovCisjZGVmaW5lICBNQUNIX0RTNTEwMAkJMgkvKiBERUNzeXN0ZW0gNTEwMAkJKi8KKyNkZWZpbmUgIE1BQ0hfRFM1MDAwXzIwMAkzCS8qIERFQ3N0YXRpb24gNTAwMC8yMDAJCSovCisjZGVmaW5lICBNQUNIX0RTNTAwMF8xWFgJNAkvKiBERUNzdGF0aW9uIDUwMDAvMTIwLCAxMjUsIDEzMywgMTUwICovCisjZGVmaW5lICBNQUNIX0RTNTAwMF9YWAkJNQkvKiBERUNzdGF0aW9uIDUwMDAvMjAsIDI1LCAzMywgNTAgKi8KKyNkZWZpbmUgIE1BQ0hfRFM1MDAwXzJYMAk2CS8qIERFQ3N0YXRpb24gNTAwMC8yNDAsIDI2MAkqLworI2RlZmluZSAgTUFDSF9EUzU0MDAJCTcJLyogREVDc3lzdGVtIDU0MDAJCSovCisjZGVmaW5lICBNQUNIX0RTNTUwMAkJOAkvKiBERUNzeXN0ZW0gNTUwMAkJKi8KKyNkZWZpbmUgIE1BQ0hfRFM1ODAwCQk5CS8qIERFQ3N5c3RlbSA1ODAwCQkqLworI2RlZmluZSAgTUFDSF9EUzU5MDAJCTEwCS8qIERFQ3N5c3RlbSA1OTAwCQkqLworCisvKgorICogVmFsaWQgbWFjaHR5cGUgZm9yIGdyb3VwIEFSQworICovCisjZGVmaW5lIE1BQ0hfR1JPVVBfQVJDCQkzCS8qIERlc2tzdGF0aW9uCQkJKi8KKyNkZWZpbmUgTUFDSF9ERVNLU1RBVElPTl9SUEM0NCAgMAkvKiBEZXNrc3RhdGlvbiByUEM0NCAqLworI2RlZmluZSBNQUNIX0RFU0tTVEFUSU9OX1RZTkUJMQkvKiBEZXNrc3RhdGlvbiBUeW5lICovCisKKy8qCisgKiBWYWxpZCBtYWNodHlwZSBmb3IgZ3JvdXAgU05JX1JNCisgKi8KKyNkZWZpbmUgTUFDSF9HUk9VUF9TTklfUk0JNAkvKiBTaWVtZW5zIE5peGRvcmYgUk0gc2VyaWVzCSovCisjZGVmaW5lICBNQUNIX1NOSV9STTIwMF9QQ0kJMAkvKiBSTTIwMC9STTMwMC9STTQwMCBQQ0kgc2VyaWVzICovCisKKy8qCisgKiBWYWxpZCBtYWNodHlwZSBmb3IgZ3JvdXAgQUNOCisgKi8KKyNkZWZpbmUgTUFDSF9HUk9VUF9BQ04JCTUKKyNkZWZpbmUgIE1BQ0hfQUNOX01JUFNfQk9BUkQJMCAgICAgICAvKiBBQ04gTUlQUyBzaW5nbGUgYm9hcmQgICAgICAgICovCisKKy8qCisgKiBWYWxpZCBtYWNodHlwZSBmb3IgZ3JvdXAgU0dJCisgKi8KKyNkZWZpbmUgTUFDSF9HUk9VUF9TR0kgICAgICAgICAgNgkvKiBTaWxpY29uIEdyYXBoaWNzCQkqLworI2RlZmluZSAgTUFDSF9TR0lfSVAyMgkJMAkvKiBJbmR5LCBJbmRpZ28yLCBDaGFsbGVuZ2UgUwkqLworI2RlZmluZSAgTUFDSF9TR0lfSVAyNwkJMQkvKiBPcmlnaW4gMjAwLCBPcmlnaW4gMjAwMCwgT255eCAyICovCisjZGVmaW5lICBNQUNIX1NHSV9JUDI4CQkyCS8qIEluZGlnbzIgSW1wYWN0CQkqLworI2RlZmluZSAgTUFDSF9TR0lfSVAzMgkJMwkvKiBPMgkJCQkqLworCisvKgorICogVmFsaWQgbWFjaHR5cGUgZm9yIGdyb3VwIENPQkFMVAorICovCisjZGVmaW5lIE1BQ0hfR1JPVVBfQ09CQUxUICAgICAgIDcJLyogQ29iYWx0IHNlcnZlcnMJCSovCisjZGVmaW5lICBNQUNIX0NPQkFMVF8yNwkJMAkvKiBQcm90byAiMjciIGhhcmR3YXJlCQkqLworCisvKgorICogVmFsaWQgbWFjaHR5cGUgZm9yIGdyb3VwIE5FQyBEREIKKyAqLworI2RlZmluZSBNQUNIX0dST1VQX05FQ19EREIJOAkvKiBORUMgRERCCQkJKi8KKyNkZWZpbmUgIE1BQ0hfTkVDX0REQjUwNzQJMAkvKiBORUMgRERCIFZyYy01MDc0ICovCisjZGVmaW5lICBNQUNIX05FQ19EREI1NDc2CTEJLyogTkVDIEREQiBWcmMtNTQ3NiAqLworI2RlZmluZSAgTUFDSF9ORUNfRERCNTQ3NwkyCS8qIE5FQyBEREIgVnJjLTU0NzcgKi8KKyNkZWZpbmUgIE1BQ0hfTkVDX1JPQ0tIT1BQRVIJMwkvKiBSb2NraG9wcGVyIGJhc2UgYm9hcmQgKi8KKyNkZWZpbmUgIE1BQ0hfTkVDX1JPQ0tIT1BQRVJJSQk0CS8qIFJvY2tob3BwZXIgSUkgYmFzZSBib2FyZCAqLworCisvKgorICogVmFsaWQgbWFjaHR5cGUgZm9yIGdyb3VwIEJBR0VUCisgKi8KKyNkZWZpbmUgTUFDSF9HUk9VUF9CQUdFVAk5CS8qIEJhZ2V0CQkJKi8KKyNkZWZpbmUgIE1BQ0hfQkFHRVQyMDEJCTAJLyogQlQyMy0yMDEgKi8KKyNkZWZpbmUgIE1BQ0hfQkFHRVQyMDIJCTEJLyogQlQyMy0yMDIgKi8KKworLyoKKyAqIENvc2luZSBib2FyZHMuCisgKi8KKyNkZWZpbmUgTUFDSF9HUk9VUF9DT1NJTkUgICAgICAxMAkvKiBDb1NpbmUgT3Jpb24JCQkqLworI2RlZmluZSAgTUFDSF9DT1NJTkVfT1JJT04JMAorCisvKgorICogVmFsaWQgbWFjaHR5cGUgZm9yIGdyb3VwIEdBTElMRU8KKyAqLworI2RlZmluZSBNQUNIX0dST1VQX0dBTElMRU8gICAgIDExCS8qIEdhbGlsZW8gRXZhbCBCb2FyZHMJCSovCisjZGVmaW5lICBNQUNIX0VWOTYxMDAJCTAJLyogRVY5NjEwMCAqLworI2RlZmluZSAgTUFDSF9FVjY0MTIwQQkJMQkvKiBFVjY0MTIwQSAqLworCisvKgorICogVmFsaWQgbWFjaHR5cGUgZm9yIGdyb3VwIE1PTUVOQ08KKyAqLworI2RlZmluZSBNQUNIX0dST1VQX01PTUVOQ08JMTIJLyogTW9tZW50dW0gQm9hcmRzCQkqLworI2RlZmluZSAgTUFDSF9NT01FTkNPX09DRUxPVAkwCisjZGVmaW5lICBNQUNIX01PTUVOQ09fT0NFTE9UX0cJMQorI2RlZmluZSAgTUFDSF9NT01FTkNPX09DRUxPVF9DCTIKKyNkZWZpbmUgIE1BQ0hfTU9NRU5DT19KQUdVQVJfQVRYIDMKKyNkZWZpbmUgIE1BQ0hfTU9NRU5DT19PQ0VMT1RfMwk0CisKKy8qCisgKiBWYWxpZCBtYWNodHlwZSBmb3IgZ3JvdXAgSVRFCisgKi8KKyNkZWZpbmUgTUFDSF9HUk9VUF9JVEUJCTEzCS8qIElURSBTZW1pIEV2YWwgQm9hcmRzCQkqLworI2RlZmluZSAgTUFDSF9RRURfNE5fUzAxQgkwCS8qIElURTgxNzIgYmFzZWQgZXZhbCBib2FyZCAqLworCisvKgorICogVmFsaWQgbWFjaHR5cGUgZm9yIGdyb3VwIFBISUxJUFMKKyAqLworI2RlZmluZSBNQUNIX0dST1VQX1BISUxJUFMgICAgIDE0CisjZGVmaW5lICBNQUNIX1BISUxJUFNfTklOTwkwCS8qIE5pbm8gKi8KKyNkZWZpbmUgIE1BQ0hfUEhJTElQU19WRUxPCTEJLyogVmVsbyAqLworCisvKgorICogVmFsaWQgbWFjaHR5cGUgZm9yIGdyb3VwIEdsb2Jlc3BhbgorICovCisjZGVmaW5lIE1BQ0hfR1JPVVBfR0xPQkVTUEFOICAgMTUJLyogR2xvYmVzcGFuICovCisjZGVmaW5lICBNQUNIX0lWUgkJMAkvKiBJVlIgZXZhbCBib2FyZCAqLworCisvKgorICogVmFsaWQgbWFjaHR5cGUgZm9yIGdyb3VwIFNJQllURQorICovCisjZGVmaW5lIE1BQ0hfR1JPVVBfU0lCWVRFCTE2CS8qIFNpYnl0ZSAvIEJyb2FkY29tICovCisjZGVmaW5lICBNQUNIX1NXQVJNICAgICAgICAgICAgICAwCisKKy8qCisgKiBWYWxpZCBtYWNodHlwZXMgZm9yIGdyb3VwIFRvc2hpYmEKKyAqLworI2RlZmluZSBNQUNIX0dST1VQX1RPU0hJQkEJMTcgLyogVG9zaGliYSBSZWZlcmVuY2UgU3lzdGVtcyBUU0JSRUYgICAgICAgKi8KKyNkZWZpbmUgIE1BQ0hfUEFMTEFTCQkwCisjZGVmaW5lICBNQUNIX1RPUEFTCQkxCisjZGVmaW5lICBNQUNIX0pNUgkJMgorI2RlZmluZSAgTUFDSF9UT1NISUJBX0pNUjM5MjcJMwkvKiBKTVItVFgzOTI3IENQVS9JTyBib2FyZCAqLworI2RlZmluZSAgTUFDSF9UT1NISUJBX1JCVFg0OTI3CTQKKyNkZWZpbmUgIE1BQ0hfVE9TSElCQV9SQlRYNDkzNwk1CisKKyNkZWZpbmUgR1JPVVBfVE9TSElCQV9OQU1FUwl7ICJQYWxsYXMiLCAiVG9wYXNDRSIsICJKTVIiLCAiSk1SIFRYMzkyNyIsIFwKKwkJCQkgICJSQlRYNDkyNyIsICJSQlRYNDkzNyIgfQorCisvKgorICogVmFsaWQgbWFjaHR5cGUgZm9yIGdyb3VwIEFsY2hlbXkKKyAqLworI2RlZmluZSBNQUNIX0dST1VQX0FMQ0hFTVkgICAgIDE4CS8qIEFNRCBBbGNoZW15CSovCisjZGVmaW5lICBNQUNIX1BCMTAwMAkJMAkvKiBBdTEwMDAtYmFzZWQgZXZhbCBib2FyZCAqLworI2RlZmluZSAgTUFDSF9QQjExMDAJCTEJLyogQXUxMTAwLWJhc2VkIGV2YWwgYm9hcmQgKi8KKyNkZWZpbmUgIE1BQ0hfUEIxNTAwCQkyCS8qIEF1MTUwMC1iYXNlZCBldmFsIGJvYXJkICovCisjZGVmaW5lICBNQUNIX0RCMTAwMAkJMyAgICAgICAvKiBBdTEwMDAtYmFzZWQgZXZhbCBib2FyZCAqLworI2RlZmluZSAgTUFDSF9EQjExMDAJCTQgICAgICAgLyogQXUxMTAwLWJhc2VkIGV2YWwgYm9hcmQgKi8KKyNkZWZpbmUgIE1BQ0hfREIxNTAwCQk1ICAgICAgIC8qIEF1MTUwMC1iYXNlZCBldmFsIGJvYXJkICovCisjZGVmaW5lICBNQUNIX1hYUzE1MDAJCTYgICAgICAgLyogQXUxNTAwLWJhc2VkIGV2YWwgYm9hcmQgKi8KKyNkZWZpbmUgIE1BQ0hfTVRYMQkJNyAgICAgICAvKiA0RyBNVFgtMSBBdTE1MDAtYmFzZWQgYm9hcmQgKi8KKyNkZWZpbmUgIE1BQ0hfUEIxNTUwCQk4ICAgICAgIC8qIEF1MTU1MC1iYXNlZCBldmFsIGJvYXJkICovCisjZGVmaW5lICBNQUNIX0RCMTU1MAkJOSAgICAgICAvKiBBdTE1NTAtYmFzZWQgZXZhbCBib2FyZCAqLworCisvKgorICogVmFsaWQgbWFjaHR5cGUgZm9yIGdyb3VwIE5FQ19WUjQxWFgKKyAqCisgKiBWYXJpb3VzIE5FQy1iYXNlZCBkZXZpY2VzLgorICoKKyAqIEZJWE1FOiBNQUNIX0dST1VQcyBzaG91bGQgYmUgYnkgX01BTlVGQUNUVVJFUl8gb2YgKiB0aGUgZGV2aWNlLCBub3QgYnkKKyAqICAgICAgICB0ZWNobmljYWwgcHJvcGVydGllcywgc28gbm8gbmV3IGFkZGl0aW9ucyB0byB0aGlzIGdyb3VwLgorICovCisjZGVmaW5lIE1BQ0hfR1JPVVBfTkVDX1ZSNDFYWCAgMTkKKyNkZWZpbmUgIE1BQ0hfTkVDX09TUFJFWQkwCS8qIE9zcHJleSBldmFsIGJvYXJkICovCisjZGVmaW5lICBNQUNIX05FQ19FQUdMRQkJMQkvKiBORUMgRWFnbGUvSGF3ayBib2FyZCAqLworI2RlZmluZSAgTUFDSF9aQU9fQ0FQQ0VMTEEJMgkvKiBaQU8gTmV0d29ya3MgQ2FwY2VsbGEgKi8KKyNkZWZpbmUgIE1BQ0hfVklDVE9SX01QQzMwWAkzCS8qIFZpY3RvciBNUC1DMzAzLzMwNCAqLworI2RlZmluZSAgTUFDSF9JQk1fV09SS1BBRAk0CS8qIElCTSBXb3JrUGFkIHo1MCAqLworI2RlZmluZSAgTUFDSF9DQVNJT19FNTUJCTUJLyogQ0FTSU8gQ0FTU0lPUEVJQSBFLTEwLzE1LzU1LzY1ICovCisjZGVmaW5lICBNQUNIX1RBTkJBQ19UQjAyMjYJNgkvKiBUQU5CQUMgVEIwMjI2IChNYmFzZSkgKi8KKyNkZWZpbmUgIE1BQ0hfVEFOQkFDX1RCMDIyOQk3CS8qIFRBTkJBQyBUQjAyMjkgKFZSNDEzMURJTU0pICovCisjZGVmaW5lICBNQUNIX05FQ19DTUJWUjQxMzMJOAkvKiBDTUIgVlI0MTMzIEJvYXJkICovCisKKyNkZWZpbmUgTUFDSF9HUk9VUF9IUF9MSgkyMAkvKiBIZXdsZXR0IFBhY2thcmQgTGFzZXJKZXQJKi8KKyNkZWZpbmUgIE1BQ0hfSFBfTEFTRVJKRVQJMQorCisvKgorICogVmFsaWQgbWFjaHR5cGUgZm9yIGdyb3VwIExBU0FUCisgKi8KKyNkZWZpbmUgTUFDSF9HUk9VUF9MQVNBVCAgICAgICAyMQorI2RlZmluZSAgTUFDSF9MQVNBVF8xMDAJCTAJLyogTWFzcXVlcmFkZSBJSS9TUDEwMC9TUDUwL1NQMjUgKi8KKyNkZWZpbmUgIE1BQ0hfTEFTQVRfMjAwCQkxCS8qIE1hc3F1ZXJhZGUgUFJPL1NQMjAwICovCisKKy8qCisgKiBWYWxpZCBtYWNodHlwZSBmb3IgZ3JvdXAgVElUQU4KKyAqLworI2RlZmluZSBNQUNIX0dST1VQX1RJVEFOICAgICAgIDIyCS8qIFBNQy1TaWVycmEgVGl0YW4JCSovCisjZGVmaW5lICBNQUNIX1RJVEFOX1lPU0VNSVRFCTEJLyogUE1DLVNpZXJyYSBZb3NlbWl0ZQkJKi8KKworI2RlZmluZSBDTF9TSVpFCQkJQ09NTUFORF9MSU5FX1NJWkUKKworY29uc3QgY2hhciAqZ2V0X3N5c3RlbV90eXBlKHZvaWQpOworCitleHRlcm4gdW5zaWduZWQgbG9uZyBtaXBzX21hY2h0eXBlOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWlwc19tYWNoZ3JvdXA7CisKKyNkZWZpbmUgQk9PVF9NRU1fTUFQX01BWAkzMgorI2RlZmluZSBCT09UX01FTV9SQU0JCTEKKyNkZWZpbmUgQk9PVF9NRU1fUk9NX0RBVEEJMgorI2RlZmluZSBCT09UX01FTV9SRVNFUlZFRAkzCisKKy8qCisgKiBBIG1lbW9yeSBtYXAgdGhhdCdzIGJ1aWx0IHVwb24gd2hhdCB3YXMgZGV0ZXJtaW5lZAorICogb3Igc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUuCisgKi8KK3N0cnVjdCBib290X21lbV9tYXAgeworCWludCBucl9tYXA7CisJc3RydWN0IGJvb3RfbWVtX21hcF9lbnRyeSB7CisJCXBoeXNfdCBhZGRyOwkvKiBzdGFydCBvZiBtZW1vcnkgc2VnbWVudCAqLworCQlwaHlzX3Qgc2l6ZTsJLyogc2l6ZSBvZiBtZW1vcnkgc2VnbWVudCAqLworCQlsb25nIHR5cGU7CQkvKiB0eXBlIG9mIG1lbW9yeSBzZWdtZW50ICovCisJfSBtYXBbQk9PVF9NRU1fTUFQX01BWF07Cit9OworCitleHRlcm4gc3RydWN0IGJvb3RfbWVtX21hcCBib290X21lbV9tYXA7CisKK2V4dGVybiB2b2lkIGFkZF9tZW1vcnlfcmVnaW9uKHBoeXNfdCBzdGFydCwgcGh5c190IHNpemUsIGxvbmcgdHlwZSk7CisKK2V4dGVybiB2b2lkIHByb21faW5pdCh2b2lkKTsKKworLyoKKyAqIEluaXRpYWwga2VybmVsIGNvbW1hbmQgbGluZSwgdXN1YWxseSBzZXR1cCBieSBwcm9tX2luaXQoKQorICovCitleHRlcm4gY2hhciBhcmNzX2NtZGxpbmVbQ0xfU0laRV07CisKKy8qCisgKiBSZWdpc3RlcnMgYTAsIGExLCBhMyBhbmQgYTQgYXMgcGFzc2VkIHRvIHRoZSBrZW5yZWwgZW50cnkgYnkgZmlybXdhcmUKKyAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZndfYXJnMCwgZndfYXJnMSwgZndfYXJnMiwgZndfYXJnMzsKKyNlbmRpZiAvKiBfQVNNX0JPT1RJTkZPX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvYnJhbmNoLmggYi9pbmNsdWRlL2FzbS1taXBzL2JyYW5jaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3YzY4NTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2JyYW5jaC5oCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDIwMDEgYnkgUmFsZiBCYWVjaGxlCisgKi8KKyNpZm5kZWYgX0FTTV9CUkFOQ0hfSAorI2RlZmluZSBfQVNNX0JSQU5DSF9ICisKKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisKK3N0YXRpYyBpbmxpbmUgaW50IGRlbGF5X3Nsb3Qoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcmV0dXJuIHJlZ3MtPmNwMF9jYXVzZSAmIENBVVNFRl9CRDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGV4Y2VwdGlvbl9lcGMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaWYgKCFkZWxheV9zbG90KHJlZ3MpKQorCQlyZXR1cm4gcmVncy0+Y3AwX2VwYzsKKworCXJldHVybiByZWdzLT5jcDBfZXBjICsgNDsKK30KKworZXh0ZXJuIGludCBfX2NvbXB1dGVfcmV0dXJuX2VwYyhzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKK3N0YXRpYyBpbmxpbmUgaW50IGNvbXB1dGVfcmV0dXJuX2VwYyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpZiAoIWRlbGF5X3Nsb3QocmVncykpIHsKKwkJcmVncy0+Y3AwX2VwYyArPSA0OworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gX19jb21wdXRlX3JldHVybl9lcGMocmVncyk7Cit9CisKKyNlbmRpZiAvKiBfQVNNX0JSQU5DSF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2JyZWFrLmggYi9pbmNsdWRlL2FzbS1taXBzL2JyZWFrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU2ZGU3OAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvYnJlYWsuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LCAyMDAzIGJ5IFJhbGYgQmFlY2hsZQorICogQ29weXJpZ2h0IChDKSAxOTk5IFNpbGljb24gR3JhcGhpY3MsIEluYy4KKyAqLworI2lmbmRlZiBfX0FTTV9CUkVBS19ICisjZGVmaW5lIF9fQVNNX0JSRUFLX0gKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgYnJlYWsgY29kZXMgYXJlIG9yIHdlcmUgaW4gdXNlIGZvciBzcGVjaWZpYyBwdXJwb3NlcyBpbgorICogb3RoZXIgTUlQUyBvcGVyYXRpbmcgc3lzdGVtcy4gIExpbnV4L01JUFMgZG9lc24ndCB1c2UgYWxsIG9mIHRoZW0uICBUaGUKKyAqIHVudXNlZCBvbmVzIGFyZSBoZXJlIGFzIHBsYWNlaG9sZGVyczsgd2UgbWlnaHQgZW5jb3VudGVyIHRoZW0gaW4KKyAqIG5vbi1MaW51eC9NSVBTIG9iamVjdCBmaWxlcyBvciBtYWtlIHVzZSBvZiB0aGVtIGluIHRoZSBmdXR1cmUuCisgKi8KKyNkZWZpbmUgQlJLX1VTRVJCUAkwCS8qIFVzZXIgYnAgKHVzZWQgYnkgZGVidWdnZXJzKSAqLworI2RlZmluZSBCUktfS0VSTkVMQlAJMQkvKiBCcmVhayBpbiB0aGUga2VybmVsICovCisjZGVmaW5lIEJSS19BQk9SVAkyCS8qIFNvbWV0aW1lcyB1c2VkIGJ5IGFib3J0KDMpIHRvIFNJR0lPVCAqLworI2RlZmluZSBCUktfQkRfVEFLRU4JMwkvKiBGb3IgYmQgc2xvdCBlbXVsYXRpb24gLSBub3QgaW1wbGVtZW50ZWQgKi8KKyNkZWZpbmUgQlJLX0JEX05PVFRBS0VOCTQJLyogRm9yIGJkIHNsb3QgZW11bGF0aW9uIC0gbm90IGltcGxlbWVudGVkICovCisjZGVmaW5lIEJSS19TU1RFUEJQCTUJLyogVXNlciBicCAodXNlZCBieSBkZWJ1Z2dlcnMpICovCisjZGVmaW5lIEJSS19PVkVSRkxPVwk2CS8qIE92ZXJmbG93IGNoZWNrICovCisjZGVmaW5lIEJSS19ESVZaRVJPCTcJLyogRGl2aWRlIGJ5IHplcm8gY2hlY2sgKi8KKyNkZWZpbmUgQlJLX1JBTkdFCTgJLyogUmFuZ2UgZXJyb3IgY2hlY2sgKi8KKyNkZWZpbmUgQlJLX1NUQUNLT1ZFUkZMT1cgOQkvKiBGb3IgQWRhIHN0YWNrY2hlY2tpbmcgKi8KKyNkZWZpbmUgQlJLX05PUkxECTEwCS8qIE5vIHJsZCBmb3VuZCAtIG5vdCB1c2VkIGJ5IExpbnV4L01JUFMgKi8KKyNkZWZpbmUgX0JSS19USFJFQURCUAkxMQkvKiBGb3IgdGhyZWFkcywgdXNlciBicCAodXNlZCBieSBkZWJ1Z2dlcnMpICovCisjZGVmaW5lIEJSS19CVUcJCTUxMgkvKiBVc2VkIGJ5IEJVRygpICovCisjZGVmaW5lIEJSS19NVUxPVkYJMTAyMwkvKiBNdWx0aXBseSBvdmVyZmxvdyAqLworCisjZW5kaWYgLyogX19BU01fQlJFQUtfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9idWcuaCBiL2luY2x1ZGUvYXNtLW1pcHMvYnVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI5NGJiOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvYnVnLmgKQEAgLTAsMCArMSwxNCBAQAorI2lmbmRlZiBfX0FTTV9CVUdfSAorI2RlZmluZSBfX0FTTV9CVUdfSAorCisjaW5jbHVkZSA8YXNtL2JyZWFrLmg+CisKKyNkZWZpbmUgQlVHKCkJCQkJCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oImJyZWFrICUwIiA6IDogImkiIChCUktfQlVHKSk7CQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIEhBVkVfQVJDSF9CVUcKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9idWcuaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2J1Z3MuaCBiL2luY2x1ZGUvYXNtLW1pcHMvYnVncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4Y2NlZDEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2J1Z3MuaApAQCAtMCwwICsxLDIzIEBACisvKgorICogVGhpcyBpcyBpbmNsdWRlZCBieSBpbml0L21haW4uYyB0byBjaGVjayBmb3IgYXJjaGl0ZWN0dXJlLWRlcGVuZGVudCBidWdzLgorICoKKyAqIE5lZWRzOgorICoJdm9pZCBjaGVja19idWdzKHZvaWQpOworICovCisjaWZuZGVmIF9BU01fQlVHU19ICisjZGVmaW5lIF9BU01fQlVHU19ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworZXh0ZXJuIHZvaWQgY2hlY2tfYnVnczMyKHZvaWQpOworZXh0ZXJuIHZvaWQgY2hlY2tfYnVnczY0KHZvaWQpOworCitzdGF0aWMgaW5saW5lIHZvaWQgY2hlY2tfYnVncyh2b2lkKQoreworCWNoZWNrX2J1Z3MzMigpOworI2lmZGVmIENPTkZJR19NSVBTNjQKKwljaGVja19idWdzNjQoKTsKKyNlbmRpZgorfQorCisjZW5kaWYgLyogX0FTTV9CVUdTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvYnl0ZW9yZGVyLmggYi9pbmNsdWRlL2FzbS1taXBzL2J5dGVvcmRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxZmU5ZTVjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9ieXRlb3JkZXIuaApAQCAtMCwwICsxLDMwIEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk2LCA5OSwgMjAwMyBieSBSYWxmIEJhZWNobGUKKyAqLworI2lmbmRlZiBfQVNNX0JZVEVPUkRFUl9ICisjZGVmaW5lIF9BU01fQllURU9SREVSX0gKKworI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCisjaWZkZWYgX19HTlVDX18KKworI2lmICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykgfHwgZGVmaW5lZChfX0tFUk5FTF9fKQorIyAgZGVmaW5lIF9fQllURU9SREVSX0hBU19VNjRfXworIyAgZGVmaW5lIF9fU1dBQl82NF9USFJVXzMyX18KKyNlbmRpZgorCisjZW5kaWYgLyogX19HTlVDX18gKi8KKworI2lmIGRlZmluZWQgKF9fTUlQU0VCX18pCisjICBpbmNsdWRlIDxsaW51eC9ieXRlb3JkZXIvYmlnX2VuZGlhbi5oPgorI2VsaWYgZGVmaW5lZCAoX19NSVBTRUxfXykKKyMgIGluY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9saXR0bGVfZW5kaWFuLmg+CisjZWxzZQorIyAgZXJyb3IgIk1JUFMsIGJ1dCBuZWl0aGVyIF9fTUlQU0VCX18sIG5vciBfX01JUFNFTF9fPz8/IgorI2VuZGlmCisKKyNlbmRpZiAvKiBfQVNNX0JZVEVPUkRFUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2NhY2hlLmggYi9pbmNsdWRlL2FzbS1taXBzL2NhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDUxN2JkZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvY2FjaGUuaApAQCAtMCwwICsxLDIzIEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk3LCA5OCwgOTksIDIwMDAsIDIwMDMgUmFsZiBCYWVjaGxlCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgU2lsaWNvbiBHcmFwaGljcywgSW5jLgorICovCisjaWZuZGVmIF9BU01fQ0FDSEVfSAorI2RlZmluZSBfQVNNX0NBQ0hFX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjZGVmaW5lIEwxX0NBQ0hFX1NISUZUCQlDT05GSUdfTUlQU19MMV9DQUNIRV9TSElGVAorI2RlZmluZSBMMV9DQUNIRV9CWVRFUwkJKDEgPDwgTDFfQ0FDSEVfU0hJRlQpCisKKyNkZWZpbmUgTDFfQ0FDSEVfU0hJRlRfTUFYCTYKKyNkZWZpbmUgU01QX0NBQ0hFX1NISUZUCQlMMV9DQUNIRV9TSElGVAorI2RlZmluZSBTTVBfQ0FDSEVfQllURVMJCUwxX0NBQ0hFX0JZVEVTCisKKyNkZWZpbmUgQVJDSF9LTUFMTE9DX01JTkFMSUdOCTgKKworI2VuZGlmIC8qIF9BU01fQ0FDSEVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9jYWNoZWN0bC5oIGIvaW5jbHVkZS9hc20tbWlwcy9jYWNoZWN0bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzY2U3MjEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2NhY2hlY3RsLmgKQEAgLTAsMCArMSwyNiBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiBieSBSYWxmIEJhZWNobGUKKyAqLworI2lmbmRlZglfQVNNX0NBQ0hFQ1RMCisjZGVmaW5lCV9BU01fQ0FDSEVDVEwKKworLyoKKyAqIE9wdGlvbnMgZm9yIGNhY2hlZmx1c2ggc3lzdGVtIGNhbGwKKyAqLworI2RlZmluZQlJQ0FDSEUJKDE8PDApCQkvKiBmbHVzaCBpbnN0cnVjdGlvbiBjYWNoZSAgICAgICAgKi8KKyNkZWZpbmUJRENBQ0hFCSgxPDwxKQkJLyogd3JpdGViYWNrIGFuZCBmbHVzaCBkYXRhIGNhY2hlICovCisjZGVmaW5lCUJDQUNIRQkoSUNBQ0hFfERDQUNIRSkJLyogZmx1c2ggYm90aCBjYWNoZXMgICAgICAgICAgICAgICovCisKKy8qCisgKiBDYWNoaW5nIG1vZGVzIGZvciB0aGUgY2FjaGVjdGwoMikgY2FsbAorICoKKyAqIGNhY2hlY3RsKDIpIGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkIGFuZCByZXR1cm5zIEVOT1NZUy4KKyAqLworI2RlZmluZSBDQUNIRUFCTEUJMAkvKiBtYWtlIHBhZ2VzIGNhY2hlYWJsZSAqLworI2RlZmluZSBVTkNBQ0hFQUJMRQkxCS8qIG1ha2UgcGFnZXMgdW5jYWNoZWFibGUgKi8KKworI2VuZGlmCS8qIF9BU01fQ0FDSEVDVEwgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvY2FjaGVmbHVzaC5oIGIvaW5jbHVkZS9hc20tbWlwcy9jYWNoZWZsdXNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM1ZjFiZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvY2FjaGVmbHVzaC5oCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTQsIDk1LCA5NiwgOTcsIDk4LCA5OSwgMjAwMCwgMDEsIDAyLCAwMyBieSBSYWxmIEJhZWNobGUKKyAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMSBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCisgKi8KKyNpZm5kZWYgX0FTTV9DQUNIRUZMVVNIX0gKKyNkZWZpbmUgX0FTTV9DQUNIRUZMVVNIX0gKKworLyogS2VlcCBpbmNsdWRlcyB0aGUgc2FtZSBhY3Jvc3MgYXJjaGVzLiAgKi8KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGFzbS9jcHUtZmVhdHVyZXMuaD4KKworLyogQ2FjaGUgZmx1c2hpbmc6CisgKgorICogIC0gZmx1c2hfY2FjaGVfYWxsKCkgZmx1c2hlcyBlbnRpcmUgY2FjaGUKKyAqICAtIGZsdXNoX2NhY2hlX21tKG1tKSBmbHVzaGVzIHRoZSBzcGVjaWZpZWQgbW0gY29udGV4dCdzIGNhY2hlIGxpbmVzCisgKiAgLSBmbHVzaF9jYWNoZV9wYWdlKG1tLCB2bWFkZHIsIHBmbikgZmx1c2hlcyBhIHNpbmdsZSBwYWdlCisgKiAgLSBmbHVzaF9jYWNoZV9yYW5nZSh2bWEsIHN0YXJ0LCBlbmQpIGZsdXNoZXMgYSByYW5nZSBvZiBwYWdlcworICogIC0gZmx1c2hfaWNhY2hlX3JhbmdlKHN0YXJ0LCBlbmQpIGZsdXNoIGEgcmFuZ2Ugb2YgaW5zdHJ1Y3Rpb25zCisgKiAgLSBmbHVzaF9kY2FjaGVfcGFnZShwZykgZmx1c2hlcyh3YmFjayZpbnZhbGlkYXRlcykgYSBwYWdlIGZvciBkY2FjaGUKKyAqICAtIGZsdXNoX2ljYWNoZV9wYWdlKHZtYSwgcGcpIGZsdXNoZXMoaW52YWxpZGF0ZXMpIGEgcGFnZSBmb3IgaWNhY2hlCisgKgorICogTUlQUyBzcGVjaWZpYyBmbHVzaCBvcGVyYXRpb25zOgorICoKKyAqICAtIGZsdXNoX2NhY2hlX3NpZ3RyYW1wKCkgZmx1c2ggc2lnbmFsIHRyYW1wb2xpbmUKKyAqICAtIGZsdXNoX2ljYWNoZV9hbGwoKSBmbHVzaCB0aGUgZW50aXJlIGluc3RydWN0aW9uIGNhY2hlCisgKiAgLSBmbHVzaF9kYXRhX2NhY2hlX3BhZ2UoKSBmbHVzaGVzIGEgcGFnZSBmcm9tIHRoZSBkYXRhIGNhY2hlCisgKi8KK2V4dGVybiB2b2lkICgqZmx1c2hfY2FjaGVfYWxsKSh2b2lkKTsKK2V4dGVybiB2b2lkICgqX19mbHVzaF9jYWNoZV9hbGwpKHZvaWQpOworZXh0ZXJuIHZvaWQgKCpmbHVzaF9jYWNoZV9tbSkoc3RydWN0IG1tX3N0cnVjdCAqbW0pOworZXh0ZXJuIHZvaWQgKCpmbHVzaF9jYWNoZV9yYW5nZSkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpOworZXh0ZXJuIHZvaWQgKCpmbHVzaF9jYWNoZV9wYWdlKShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBwYWdlLCB1bnNpZ25lZCBsb25nIHBmbik7CitleHRlcm4gdm9pZCBfX2ZsdXNoX2RjYWNoZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKTsKKworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2RjYWNoZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQoreworCWlmIChjcHVfaGFzX2RjX2FsaWFzZXMpCisJCV9fZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSk7CisKK30KKworI2RlZmluZSBmbHVzaF9kY2FjaGVfbW1hcF9sb2NrKG1hcHBpbmcpCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2RjYWNoZV9tbWFwX3VubG9jayhtYXBwaW5nKQlkbyB7IH0gd2hpbGUgKDApCisKK2V4dGVybiB2b2lkICgqZmx1c2hfaWNhY2hlX3BhZ2UpKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCXN0cnVjdCBwYWdlICpwYWdlKTsKK2V4dGVybiB2b2lkICgqZmx1c2hfaWNhY2hlX3JhbmdlKSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7CisjZGVmaW5lIGZsdXNoX2NhY2hlX3ZtYXAoc3RhcnQsIGVuZCkJCWZsdXNoX2NhY2hlX2FsbCgpCisjZGVmaW5lIGZsdXNoX2NhY2hlX3Z1bm1hcChzdGFydCwgZW5kKQkJZmx1c2hfY2FjaGVfYWxsKCkKKworI2RlZmluZSBjb3B5X3RvX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIHZhZGRyLCBkc3QsIHNyYywgbGVuKQkJXAorZG8gewkJCQkJCQkJCVwKKwltZW1jcHkoZHN0LCAodm9pZCAqKSBzcmMsIGxlbik7CQkJCQlcCisJZmx1c2hfaWNhY2hlX3BhZ2Uodm1hLCBwYWdlKTsJCQkJCVwKK30gd2hpbGUgKDApCisjZGVmaW5lIGNvcHlfZnJvbV91c2VyX3BhZ2Uodm1hLCBwYWdlLCB2YWRkciwgZHN0LCBzcmMsIGxlbikJCVwKKwltZW1jcHkoZHN0LCBzcmMsIGxlbikKKworZXh0ZXJuIHZvaWQgKCpmbHVzaF9jYWNoZV9zaWd0cmFtcCkodW5zaWduZWQgbG9uZyBhZGRyKTsKK2V4dGVybiB2b2lkICgqZmx1c2hfaWNhY2hlX2FsbCkodm9pZCk7CitleHRlcm4gdm9pZCAoKmZsdXNoX2RhdGFfY2FjaGVfcGFnZSkodW5zaWduZWQgbG9uZyBhZGRyKTsKKworLyoKKyAqIFRoaXMgZmxhZyBpcyB1c2VkIHRvIGluZGljYXRlIHRoYXQgdGhlIHBhZ2UgcG9pbnRlZCB0byBieSBhIHB0ZQorICogaXMgZGlydHkgYW5kIHJlcXVpcmVzIGNsZWFuaW5nIGJlZm9yZSByZXR1cm5pbmcgaXQgdG8gdGhlIHVzZXIuCisgKi8KKyNkZWZpbmUgUEdfZGNhY2hlX2RpcnR5CQkJUEdfYXJjaF8xCisKKyNkZWZpbmUgUGFnZV9kY2FjaGVfZGlydHkocGFnZSkJCVwKKwl0ZXN0X2JpdChQR19kY2FjaGVfZGlydHksICYocGFnZSktPmZsYWdzKQorI2RlZmluZSBTZXRQYWdlRGNhY2hlRGlydHkocGFnZSkJXAorCXNldF9iaXQoUEdfZGNhY2hlX2RpcnR5LCAmKHBhZ2UpLT5mbGFncykKKyNkZWZpbmUgQ2xlYXJQYWdlRGNhY2hlRGlydHkocGFnZSkJXAorCWNsZWFyX2JpdChQR19kY2FjaGVfZGlydHksICYocGFnZSktPmZsYWdzKQorCisjZW5kaWYgLyogX0FTTV9DQUNIRUZMVVNIX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvY2FjaGVvcHMuaCBiL2luY2x1ZGUvYXNtLW1pcHMvY2FjaGVvcHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGExZWMzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9jYWNoZW9wcy5oCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDYWNoZSBvcGVyYXRpb25zIGZvciB0aGUgY2FjaGUgaW5zdHJ1Y3Rpb24uCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogKEMpIENvcHlyaWdodCAxOTk2LCA5NywgOTksIDIwMDIsIDAzIFJhbGYgQmFlY2hsZQorICogKEMpIENvcHlyaWdodCAxOTk5IFNpbGljb24gR3JhcGhpY3MsIEluYy4KKyAqLworI2lmbmRlZglfX0FTTV9DQUNIRU9QU19ICisjZGVmaW5lCV9fQVNNX0NBQ0hFT1BTX0gKKworLyoKKyAqIENhY2hlIE9wZXJhdGlvbnMgYXZhaWxhYmxlIG9uIGFsbCBNSVBTIHByb2Nlc3NvcnMgd2l0aCBSNDAwMC1zdHlsZSBjYWNoZXMKKyAqLworI2RlZmluZSBJbmRleF9JbnZhbGlkYXRlX0kgICAgICAweDAwCisjZGVmaW5lIEluZGV4X1dyaXRlYmFja19JbnZfRCAgIDB4MDEKKyNkZWZpbmUgSW5kZXhfTG9hZF9UYWdfSQkweDA0CisjZGVmaW5lIEluZGV4X0xvYWRfVGFnX0QJMHgwNQorI2RlZmluZSBJbmRleF9TdG9yZV9UYWdfSQkweDA4CisjZGVmaW5lIEluZGV4X1N0b3JlX1RhZ19ECTB4MDkKKyNkZWZpbmUgSGl0X0ludmFsaWRhdGVfSQkweDEwCisjZGVmaW5lIEhpdF9JbnZhbGlkYXRlX0QJMHgxMQorI2RlZmluZSBIaXRfV3JpdGViYWNrX0ludl9ECTB4MTUKKworLyoKKyAqIFI0MDAwLXNwZWNpZmljIGNhY2hlb3BzCisgKi8KKyNkZWZpbmUgQ3JlYXRlX0RpcnR5X0V4Y2xfRAkweDBkCisjZGVmaW5lIEZpbGwJCQkweDE0CisjZGVmaW5lIEhpdF9Xcml0ZWJhY2tfSQkJMHgxOAorI2RlZmluZSBIaXRfV3JpdGViYWNrX0QJCTB4MTkKKworLyoKKyAqIFI0MDAwU0MgYW5kIFI0NDAwU0Mtc3BlY2lmaWMgY2FjaGVvcHMKKyAqLworI2RlZmluZSBJbmRleF9JbnZhbGlkYXRlX1NJICAgICAweDAyCisjZGVmaW5lIEluZGV4X1dyaXRlYmFja19JbnZfU0QgIDB4MDMKKyNkZWZpbmUgSW5kZXhfTG9hZF9UYWdfU0kJMHgwNgorI2RlZmluZSBJbmRleF9Mb2FkX1RhZ19TRAkweDA3CisjZGVmaW5lIEluZGV4X1N0b3JlX1RhZ19TSQkweDBBCisjZGVmaW5lIEluZGV4X1N0b3JlX1RhZ19TRAkweDBCCisjZGVmaW5lIENyZWF0ZV9EaXJ0eV9FeGNsX1NECTB4MGYKKyNkZWZpbmUgSGl0X0ludmFsaWRhdGVfU0kJMHgxMgorI2RlZmluZSBIaXRfSW52YWxpZGF0ZV9TRAkweDEzCisjZGVmaW5lIEhpdF9Xcml0ZWJhY2tfSW52X1NECTB4MTcKKyNkZWZpbmUgSGl0X1dyaXRlYmFja19TRAkweDFiCisjZGVmaW5lIEhpdF9TZXRfVmlydHVhbF9TSQkweDFlCisjZGVmaW5lIEhpdF9TZXRfVmlydHVhbF9TRAkweDFmCisKKy8qCisgKiBSNTAwMC1zcGVjaWZpYyBjYWNoZW9wcworICovCisjZGVmaW5lIFI1S19QYWdlX0ludmFsaWRhdGVfUwkweDE3CisKKy8qCisgKiBSTTcwMDAtc3BlY2lmaWMgY2FjaGVvcHMKKyAqLworI2RlZmluZSBQYWdlX0ludmFsaWRhdGVfVAkweDE2CisKKy8qCisgKiBSMTAwMC1zcGVjaWZpYyBjYWNoZW9wcworICoKKyAqIENhY2hlb3BzIDB4MDIsIDB4MDYsIDB4MGEsIDB4MGMtMHgwZSwgMHgxNiwgMHgxYSBhbmQgMHgxZSBhcmUgdW51c2VkLgorICogTW9zdCBvZiB0aGUgX1MgY2FjaGVvcHMgYXJlIGlkZW50aWNhbCB0byB0aGUgUjQwMDBTQyBfU0QgY2FjaGVvcHMuCisgKi8KKyNkZWZpbmUgSW5kZXhfV3JpdGViYWNrX0ludl9TCTB4MDMKKyNkZWZpbmUgSW5kZXhfTG9hZF9UYWdfUwkweDA3CisjZGVmaW5lIEluZGV4X1N0b3JlX1RhZ19TCTB4MEIKKyNkZWZpbmUgSGl0X0ludmFsaWRhdGVfUwkweDEzCisjZGVmaW5lIENhY2hlX0JhcnJpZXIJCTB4MTQKKyNkZWZpbmUgSGl0X1dyaXRlYmFja19JbnZfUwkweDE3CisjZGVmaW5lIEluZGV4X0xvYWRfRGF0YV9JCTB4MTgKKyNkZWZpbmUgSW5kZXhfTG9hZF9EYXRhX0QJMHgxOQorI2RlZmluZSBJbmRleF9Mb2FkX0RhdGFfUwkweDFiCisjZGVmaW5lIEluZGV4X1N0b3JlX0RhdGFfSQkweDFjCisjZGVmaW5lIEluZGV4X1N0b3JlX0RhdGFfRAkweDFkCisjZGVmaW5lIEluZGV4X1N0b3JlX0RhdGFfUwkweDFmCisKKyNlbmRpZgkvKiBfX0FTTV9DQUNIRU9QU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2NoZWNrc3VtLmggYi9pbmNsdWRlL2FzbS1taXBzL2NoZWNrc3VtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI1Y2M5MgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvY2hlY2tzdW0uaApAQCAtMCwwICsxLDI1MyBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NSwgOTYsIDk3LCA5OCwgOTksIDIwMDEgYnkgUmFsZiBCYWVjaGxlCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgU2lsaWNvbiBHcmFwaGljcywgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDAxIFRoaWVtbyBTZXVmZXIuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgTWFjaWVqIFcuIFJvenlja2kKKyAqLworI2lmbmRlZiBfQVNNX0NIRUNLU1VNX0gKKyNkZWZpbmUgX0FTTV9DSEVDS1NVTV9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbjYuaD4KKworI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisKKy8qCisgKiBjb21wdXRlcyB0aGUgY2hlY2tzdW0gb2YgYSBtZW1vcnkgYmxvY2sgYXQgYnVmZiwgbGVuZ3RoIGxlbiwKKyAqIGFuZCBhZGRzIGluICJzdW0iICgzMi1iaXQpCisgKgorICogcmV0dXJucyBhIDMyLWJpdCBudW1iZXIgc3VpdGFibGUgZm9yIGZlZWRpbmcgaW50byBpdHNlbGYKKyAqIG9yIGNzdW1fdGNwdWRwX21hZ2ljCisgKgorICogdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIGV2ZW4gbGVuZ3RocywgZXhjZXB0CisgKiBmb3IgdGhlIGxhc3QgZnJhZ21lbnQsIHdoaWNoIG1heSBiZSBvZGQKKyAqCisgKiBpdCdzIGJlc3QgdG8gaGF2ZSBidWZmIGFsaWduZWQgb24gYSAzMi1iaXQgYm91bmRhcnkKKyAqLwordW5zaWduZWQgaW50IGNzdW1fcGFydGlhbChjb25zdCB1bnNpZ25lZCBjaGFyICpidWZmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgc3VtKTsKKworLyoKKyAqIHRoaXMgaXMgYSBuZXcgdmVyc2lvbiBvZiB0aGUgYWJvdmUgdGhhdCByZWNvcmRzIGVycm9ycyBpdCBmaW5kcyBpbiAqZXJycCwKKyAqIGJ1dCBjb250aW51ZXMgYW5kIHplcm9zIHRoZSByZXN0IG9mIHRoZSBidWZmZXIuCisgKi8KK3Vuc2lnbmVkIGludCBjc3VtX3BhcnRpYWxfY29weV9mcm9tX3VzZXIoY29uc3QgdW5zaWduZWQgY2hhciAqc3JjLCB1bnNpZ25lZCBjaGFyICpkc3QsIGludCBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzdW0sIGludCAqZXJycCk7CisKKy8qCisgKiBDb3B5IGFuZCBjaGVja3N1bSB0byB1c2VyCisgKi8KKyNkZWZpbmUgSEFWRV9DU1VNX0NPUFlfVVNFUgorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3N1bV9hbmRfY29weV90b191c2VyIChjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMsCisJCQkJCQkgIHVuc2lnbmVkIGNoYXIgX191c2VyICpkc3QsCisJCQkJCQkgIGludCBsZW4sIGludCBzdW0sCisJCQkJCQkgIGludCAqZXJyX3B0cikKK3sKKwltaWdodF9zbGVlcCgpOworCXN1bSA9IGNzdW1fcGFydGlhbChzcmMsIGxlbiwgc3VtKTsKKworCWlmIChjb3B5X3RvX3VzZXIoZHN0LCBzcmMsIGxlbikpIHsKKwkJKmVycl9wdHIgPSAtRUZBVUxUOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIHN1bTsKK30KKworLyoKKyAqIHRoZSBzYW1lIGFzIGNzdW1fcGFydGlhbCwgYnV0IGNvcGllcyBmcm9tIHVzZXIgc3BhY2UgKGJ1dCBvbiBNSVBTCisgKiB3ZSBoYXZlIGp1c3Qgb25lIGFkZHJlc3Mgc3BhY2UsIHNvIHRoaXMgaXMgaWRlbnRpY2FsIHRvIHRoZSBhYm92ZSkKKyAqLwordW5zaWduZWQgaW50IGNzdW1fcGFydGlhbF9jb3B5X25vY2hlY2soY29uc3QgdW5zaWduZWQgY2hhciAqc3JjLCB1bnNpZ25lZCBjaGFyICpkc3QsCisJCQkJICAgICAgIGludCBsZW4sIHVuc2lnbmVkIGludCBzdW0pOworCisvKgorICoJRm9sZCBhIHBhcnRpYWwgY2hlY2tzdW0gd2l0aG91dCBhZGRpbmcgcHNldWRvIGhlYWRlcnMKKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBpbnQgY3N1bV9mb2xkKHVuc2lnbmVkIGludCBzdW0pCit7CisJX19hc21fXygKKwkiLnNldFx0bm9hdFx0XHRcdCMgY3N1bV9mb2xkXG5cdCIKKwkic2xsXHQkMSwlMCwxNlxuXHQiCisJImFkZHVcdCUwLCQxXG5cdCIKKwkic2x0dVx0JDEsJTAsJDFcblx0IgorCSJzcmxcdCUwLCUwLDE2XG5cdCIKKwkiYWRkdVx0JTAsJDFcblx0IgorCSJ4b3JpXHQlMCwweGZmZmZcblx0IgorCSIuc2V0XHRhdCIKKwk6ICI9ciIgKHN1bSkKKwk6ICIwIiAoc3VtKSk7CisKKwlyZXR1cm4gc3VtOworfQorCisvKgorICoJVGhpcyBpcyBhIHZlcnNpb24gb2YgaXBfY29tcHV0ZV9jc3VtKCkgb3B0aW1pemVkIGZvciBJUCBoZWFkZXJzLAorICoJd2hpY2ggYWx3YXlzIGNoZWNrc3VtIG9uIDQgb2N0ZXQgYm91bmRhcmllcy4KKyAqCisgKglCeSBKb3JnZSBDd2lrIDxqb3JnZUBsYXNlci5zYXRsaW5rLm5ldD4sIGFkYXB0ZWQgZm9yIGxpbnV4IGJ5CisgKglBcm50IEd1bGJyYW5kc2VuLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IGlwX2Zhc3RfY3N1bSh1bnNpZ25lZCBjaGFyICppcGgsIHVuc2lnbmVkIGludCBpaGwpCit7CisJdW5zaWduZWQgaW50ICp3b3JkID0gKHVuc2lnbmVkIGludCAqKSBpcGg7CisJdW5zaWduZWQgaW50ICpzdG9wID0gd29yZCArIGlobDsKKwl1bnNpZ25lZCBpbnQgY3N1bTsKKwlpbnQgY2Fycnk7CisKKwljc3VtID0gd29yZFswXTsKKwljc3VtICs9IHdvcmRbMV07CisJY2FycnkgPSAoY3N1bSA8IHdvcmRbMV0pOworCWNzdW0gKz0gY2Fycnk7CisKKwljc3VtICs9IHdvcmRbMl07CisJY2FycnkgPSAoY3N1bSA8IHdvcmRbMl0pOworCWNzdW0gKz0gY2Fycnk7CisKKwljc3VtICs9IHdvcmRbM107CisJY2FycnkgPSAoY3N1bSA8IHdvcmRbM10pOworCWNzdW0gKz0gY2Fycnk7CisKKwl3b3JkICs9IDQ7CisJZG8geworCQljc3VtICs9ICp3b3JkOworCQljYXJyeSA9IChjc3VtIDwgKndvcmQpOworCQljc3VtICs9IGNhcnJ5OworCQl3b3JkKys7CisJfSB3aGlsZSAod29yZCAhPSBzdG9wKTsKKworCXJldHVybiBjc3VtX2ZvbGQoY3N1bSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNzdW1fdGNwdWRwX25vZm9sZCh1bnNpZ25lZCBsb25nIHNhZGRyLAorCXVuc2lnbmVkIGxvbmcgZGFkZHIsIHVuc2lnbmVkIHNob3J0IGxlbiwgdW5zaWduZWQgc2hvcnQgcHJvdG8sCisJdW5zaWduZWQgaW50IHN1bSkKK3sKKwlfX2FzbV9fKAorCSIuc2V0XHRub2F0XHRcdFx0IyBjc3VtX3RjcHVkcF9ub2ZvbGRcblx0IgorI2lmZGVmIENPTkZJR19NSVBTMzIKKwkiYWRkdVx0JTAsICUyXG5cdCIKKwkic2x0dVx0JDEsICUwLCAlMlxuXHQiCisJImFkZHVcdCUwLCAkMVxuXHQiCisKKwkiYWRkdVx0JTAsICUzXG5cdCIKKwkic2x0dVx0JDEsICUwLCAlM1xuXHQiCisJImFkZHVcdCUwLCAkMVxuXHQiCisKKwkiYWRkdVx0JTAsICU0XG5cdCIKKwkic2x0dVx0JDEsICUwLCAlNFxuXHQiCisJImFkZHVcdCUwLCAkMVxuXHQiCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfTUlQUzY0CisJImRhZGR1XHQlMCwgJTJcblx0IgorCSJkYWRkdVx0JTAsICUzXG5cdCIKKwkiZGFkZHVcdCUwLCAlNFxuXHQiCisJImRzbGwzMlx0JDEsICUwLCAwXG5cdCIKKwkiZGFkZHVcdCUwLCAkMVxuXHQiCisJImRzcmwzMlx0JTAsICUwLCAwXG5cdCIKKyNlbmRpZgorCSIuc2V0XHRhdCIKKwk6ICI9ciIgKHN1bSkKKwk6ICIwIiAoZGFkZHIpLCAiciIoc2FkZHIpLAorI2lmZGVmIF9fTUlQU0VMX18KKwkgICJyIiAoKCh1bnNpZ25lZCBsb25nKWh0b25zKGxlbik8PDE2KSArIHByb3RvKjI1NiksCisjZWxzZQorCSAgInIiICgoKHVuc2lnbmVkIGxvbmcpKHByb3RvKTw8MTYpICsgbGVuKSwKKyNlbmRpZgorCSAgInIiIChzdW0pKTsKKworCXJldHVybiBzdW07Cit9CisKKy8qCisgKiBjb21wdXRlcyB0aGUgY2hlY2tzdW0gb2YgdGhlIFRDUC9VRFAgcHNldWRvLWhlYWRlcgorICogcmV0dXJucyBhIDE2LWJpdCBjaGVja3N1bSwgYWxyZWFkeSBjb21wbGVtZW50ZWQKKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBpbnQgY3N1bV90Y3B1ZHBfbWFnaWModW5zaWduZWQgbG9uZyBzYWRkciwKKwkJCQkJCSAgIHVuc2lnbmVkIGxvbmcgZGFkZHIsCisJCQkJCQkgICB1bnNpZ25lZCBzaG9ydCBsZW4sCisJCQkJCQkgICB1bnNpZ25lZCBzaG9ydCBwcm90bywKKwkJCQkJCSAgIHVuc2lnbmVkIGludCBzdW0pCit7CisJcmV0dXJuIGNzdW1fZm9sZChjc3VtX3RjcHVkcF9ub2ZvbGQoc2FkZHIsIGRhZGRyLCBsZW4sIHByb3RvLCBzdW0pKTsKK30KKworLyoKKyAqIHRoaXMgcm91dGluZSBpcyB1c2VkIGZvciBtaXNjZWxsYW5lb3VzIElQLWxpa2UgY2hlY2tzdW1zLCBtYWlubHkKKyAqIGluIGljbXAuYworICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IGlwX2NvbXB1dGVfY3N1bSh1bnNpZ25lZCBjaGFyICogYnVmZiwgaW50IGxlbikKK3sKKwlyZXR1cm4gY3N1bV9mb2xkKGNzdW1fcGFydGlhbChidWZmLCBsZW4sIDApKTsKK30KKworI2RlZmluZSBfSEFWRV9BUkNIX0lQVjZfQ1NVTQorc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgc2hvcnQgaW50IGNzdW1faXB2Nl9tYWdpYyhzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLAorCQkJCQkJICAgICBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAorCQkJCQkJICAgICBfX3UzMiBsZW4sCisJCQkJCQkgICAgIHVuc2lnbmVkIHNob3J0IHByb3RvLAorCQkJCQkJICAgICB1bnNpZ25lZCBpbnQgc3VtKQoreworCV9fYXNtX18oCisJIi5zZXRcdHB1c2hcdFx0XHQjIGNzdW1faXB2Nl9tYWdpY1xuXHQiCisJIi5zZXRcdG5vcmVvcmRlclxuXHQiCisJIi5zZXRcdG5vYXRcblx0IgorCSJhZGR1XHQlMCwgJTVcdFx0XHQjIHByb3RvIChsb25nIGluIG5ldHdvcmsgYnl0ZSBvcmRlcilcblx0IgorCSJzbHR1XHQkMSwgJTAsICU1XG5cdCIKKwkiYWRkdVx0JTAsICQxXG5cdCIKKworCSJhZGR1XHQlMCwgJTZcdFx0XHQjIGNzdW1cblx0IgorCSJzbHR1XHQkMSwgJTAsICU2XG5cdCIKKwkibHdcdCUxLCAwKCUyKVx0XHRcdCMgZm91ciB3b3JkcyBzb3VyY2UgYWRkcmVzc1xuXHQiCisJImFkZHVcdCUwLCAkMVxuXHQiCisJImFkZHVcdCUwLCAlMVxuXHQiCisJInNsdHVcdCQxLCAlMCwgJTFcblx0IgorCisJImx3XHQlMSwgNCglMilcblx0IgorCSJhZGR1XHQlMCwgJDFcblx0IgorCSJhZGR1XHQlMCwgJTFcblx0IgorCSJzbHR1XHQkMSwgJTAsICUxXG5cdCIKKworCSJsd1x0JTEsIDgoJTIpXG5cdCIKKwkiYWRkdVx0JTAsICQxXG5cdCIKKwkiYWRkdVx0JTAsICUxXG5cdCIKKwkic2x0dVx0JDEsICUwLCAlMVxuXHQiCisKKwkibHdcdCUxLCAxMiglMilcblx0IgorCSJhZGR1XHQlMCwgJDFcblx0IgorCSJhZGR1XHQlMCwgJTFcblx0IgorCSJzbHR1XHQkMSwgJTAsICUxXG5cdCIKKworCSJsd1x0JTEsIDAoJTMpXG5cdCIKKwkiYWRkdVx0JTAsICQxXG5cdCIKKwkiYWRkdVx0JTAsICUxXG5cdCIKKwkic2x0dVx0JDEsICUwLCAlMVxuXHQiCisKKwkibHdcdCUxLCA0KCUzKVxuXHQiCisJImFkZHVcdCUwLCAkMVxuXHQiCisJImFkZHVcdCUwLCAlMVxuXHQiCisJInNsdHVcdCQxLCAlMCwgJTFcblx0IgorCisJImx3XHQlMSwgOCglMylcblx0IgorCSJhZGR1XHQlMCwgJDFcblx0IgorCSJhZGR1XHQlMCwgJTFcblx0IgorCSJzbHR1XHQkMSwgJTAsICUxXG5cdCIKKworCSJsd1x0JTEsIDEyKCUzKVxuXHQiCisJImFkZHVcdCUwLCAkMVxuXHQiCisJImFkZHVcdCUwLCAlMVxuXHQiCisJInNsdHVcdCQxLCAlMCwgJTFcblx0IgorCisJImFkZHVcdCUwLCAkMVx0XHRcdCMgQWRkIGZpbmFsIGNhcnJ5XG5cdCIKKwkiLnNldFx0cG9wIgorCTogIj1yIiAoc3VtKSwgIj1yIiAocHJvdG8pCisJOiAiciIgKHNhZGRyKSwgInIiIChkYWRkciksCisJICAiMCIgKGh0b25sKGxlbikpLCAiMSIgKGh0b25sKHByb3RvKSksICJyIiAoc3VtKSk7CisKKwlyZXR1cm4gY3N1bV9mb2xkKHN1bSk7Cit9CisKKyNlbmRpZiAvKiBfQVNNX0NIRUNLU1VNX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvY29iYWx0L2NvYmFsdC5oIGIvaW5jbHVkZS9hc20tbWlwcy9jb2JhbHQvY29iYWx0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ExZmJjMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvY29iYWx0L2NvYmFsdC5oCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBMb3dsZXZlbCBoYXJkd2FyZSBzdHVmZiBmb3IgdGhlIE1JUFMgYmFzZWQgQ29iYWx0IG1pY3Jvc2VydmVycy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTcgQ29iYWx0IE1pY3Jvc2VydmVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTcsIDIwMDMgUmFsZiBCYWVjaGxlCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMgTGlhbSBEYXZpZXMgKGxkYXZpZXNAYWdpbGUudHYpCisgKi8KKyNpZm5kZWYgX19BU01fQ09CQUxUX0gKKyNkZWZpbmUgX19BU01fQ09CQUxUX0gKKworLyoKKyAqIGk4MjU5IGxlZ2FjeSBpbnRlcnJ1cHRzIHVzZWQgb24gQ29iYWx0OgorICoKKyAqICAgICA4ICAtIFJUQworICogICAgIDkgIC0gUENJCisgKiAgICAxNCAgLSBJREUwCisgKiAgICAxNSAgLSBJREUxCisgKgorICogQ1BVIElSUXMgIGFyZSAxNiAuLi4gMjMKKyAqLworI2RlZmluZSBDT0JBTFRfVElNRVJfSVJRCTE4CisjZGVmaW5lIENPQkFMVF9TQ0NfSVJRICAgICAgICAgIDE5CQkvKiBwcmUtcHJvZHVjdGlvbiBoYXMgODVDMzAgKi8KKyNkZWZpbmUgQ09CQUxUX1JBUV9TQ1NJX0lSUQkxOQorI2RlZmluZSBDT0JBTFRfRVRIMF9JUlEJCTE5CisjZGVmaW5lIENPQkFMVF9FVEgxX0lSUQkJMjAKKyNkZWZpbmUgQ09CQUxUX1NFUklBTF9JUlEJMjEKKyNkZWZpbmUgQ09CQUxUX1NDU0lfSVJRICAgICAgICAgMjEKKyNkZWZpbmUgQ09CQUxUX1ZJQV9JUlEJCTIyCQkvKiBDaGFpbmVkIHRvIFZJQSBJU0EgYnJpZGdlICovCisjZGVmaW5lIENPQkFMVF9RVUJFX1NMT1RfSVJRCTIzCisKKy8qCisgKiBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSBtYW5pZmVzdCBjb25zdGFudHMuICBUaGVzZSBhcmUgd2lyZWQgaW50bworICogdGhlIGJvYXJkIGxheW91dCBhY2NvcmRpbmcgdG8gdGhlIFBDSSBzcGVjIHRvIGVuYWJsZSB0aGUgc29mdHdhcmUKKyAqIHRvIHByb2JlIHRoZSBoYXJkd2FyZSBjb25maWd1cmF0aW9uIHNwYWNlIGluIGEgd2VsbCBkZWZpbmVkIG1hbm5lci4KKyAqCisgKiBUaGUgUENJX0RFVlNIRlQoKSBtYWNybyB0cmFuc2Zvcm1zIHRoZXNlIHZhbHVlcyBpbnRvIG51bWJlcnMKKyAqIHN1aXRhYmxlIGZvciBwYXNzaW5nIGFzIHRoZSBkZXYgcGFyYW1ldGVyIHRvIHRoZSB2YXJpb3VzCisgKiBwY2liaW9zX3JlYWQvd3JpdGVfY29uZmlnIHJvdXRpbmVzLgorICovCisjZGVmaW5lIENPQkFMVF9QQ0lDT05GX0NQVSAgICAgIDB4MDYKKyNkZWZpbmUgQ09CQUxUX1BDSUNPTkZfRVRIMCAgICAgMHgwNworI2RlZmluZSBDT0JBTFRfUENJQ09ORl9SQVFTQ1NJICAweDA4CisjZGVmaW5lIENPQkFMVF9QQ0lDT05GX1ZJQSAgICAgIDB4MDkKKyNkZWZpbmUgQ09CQUxUX1BDSUNPTkZfUENJU0xPVCAgMHgwQQorI2RlZmluZSBDT0JBTFRfUENJQ09ORl9FVEgxICAgICAweDBDCisKKworLyoKKyAqIFRoZSBDb2JhbHQgYm9hcmQgaWQgaW5mb3JtYXRpb24uICBUaGUgYm9hcmRzIGhhdmUgYW4gSUQgbnVtYmVyIHdpcmVkCisgKiBpbnRvIHRoZSBWSUEgdGhhdCBpcyBhdmFpbGFibGUgaW4gdGhlIGhpZ2ggbmliYmxlIG9mIHJlZ2lzdGVyIDk0LgorICogVGhpcyByZWdpc3RlciBpcyBhdmFpbGFibGUgaW4gdGhlIFZJQSBjb25maWd1cmF0aW9uIHNwYWNlIHRocm91Z2ggdGhlCisgKiBpbnRlcmZhY2Ugcm91dGluZXMgcXViZV9wY2liaW9zX3JlYWQvd3JpdGVfY29uZmlnLiBTZWUgY29iYWx0L3BjaS5jCisgKi8KKyNkZWZpbmUgVklBX0NPQkFMVF9CUkRfSURfUkVHICAweDk0CisjZGVmaW5lIFZJQV9DT0JBTFRfQlJEX1JFR190b19JRChyZWcpICAoKHVuc2lnbmVkIGNoYXIpIChyZWcpID4+IDQpCisjZGVmaW5lIENPQkFMVF9CUkRfSURfUVVCRTEgICAgMHgzCisjZGVmaW5lIENPQkFMVF9CUkRfSURfUkFRMSAgICAgMHg0CisjZGVmaW5lIENPQkFMVF9CUkRfSURfUVVCRTIgICAgMHg1CisjZGVmaW5lIENPQkFMVF9CUkRfSURfUkFRMiAgICAgMHg2CisKKy8qCisgKiBHYWxpbGVvIGNoaXBzZXQgYWNjZXNzIG1hY3JvcyBmb3IgdGhlIENvYmFsdC4gVGhlIGJhc2UgYWRkcmVzcyBmb3IKKyAqIHRoZSBHVDY0MTExIGNoaXAgaXMgMHgxNDAwMDAwMAorICoKKyAqIE1vc3Qgb2YgdGhpcyByZWFsbHkgc2hvdWxkIGdvIGludG8gYSBzZXBhcmF0ZSBHVDY0MTExIGhlYWRlciBmaWxlLgorICovCisjZGVmaW5lIEdUNjQxMTFfSU9fQkFTRQkJMHgxMDAwMDAwMFVMCisjZGVmaW5lIEdUNjQxMTFfQkFTRQkJMHgxNDAwMDAwMFVMCisjZGVmaW5lIEdBTElMRU9fUkVHKG9mcykJKEtTRUcwICsgR1Q2NDExMV9CQVNFICsgKHVuc2lnbmVkIGxvbmcpKG9mcykpCisKKyNkZWZpbmUgR0FMSUxFT19JTkwocG9ydCkJKCoodm9sYXRpbGUgdW5zaWduZWQgaW50ICopIEdBTElMRU9fUkVHKHBvcnQpKQorI2RlZmluZSBHQUxJTEVPX09VVEwodmFsLCBwb3J0KQkJCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgR0FMSUxFT19SRUcocG9ydCkgPSAocG9ydCk7CQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIEdBTElMRU9fVDBFWFAJCTB4MDEwMAorI2RlZmluZSBHQUxJTEVPX0VOVEMwCQkweDAxCisjZGVmaW5lIEdBTElMRU9fU0VMVEMwCQkweDAyCisKKyNkZWZpbmUgUENJX0NGR19TRVQoZGV2Zm4sd2hlcmUpCQkJCQlcCisJR0FMSUxFT19PVVRMKCgweDgwMDAwMDAwIHwgKFBDSV9TTE9UIChkZXZmbikgPDwgMTEpIHwJCVwKKwkJKFBDSV9GVU5DIChkZXZmbikgPDwgOCkgfCAod2hlcmUpKSwgR1RfUENJMF9DRkdBRERSX09GUykKKworCisjZW5kaWYgLyogX19BU01fQ09CQUxUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvY29tcGF0LmggYi9pbmNsdWRlL2FzbS1taXBzL2NvbXBhdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjZTkyMDcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2NvbXBhdC5oCkBAIC0wLDAgKzEsMTQ0IEBACisjaWZuZGVmIF9BU01fQ09NUEFUX0gKKyNkZWZpbmUgX0FTTV9DT01QQVRfSAorLyoKKyAqIEFyY2hpdGVjdHVyZSBzcGVjaWZpYyBjb21wYXRpYmlsaXR5IHR5cGVzCisgKi8KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisKKyNkZWZpbmUgQ09NUEFUX1VTRVJfSFoJMTAwCisKK3R5cGVkZWYgdTMyCQljb21wYXRfc2l6ZV90OwordHlwZWRlZiBzMzIJCWNvbXBhdF9zc2l6ZV90OwordHlwZWRlZiBzMzIJCWNvbXBhdF90aW1lX3Q7Cit0eXBlZGVmIHMzMgkJY29tcGF0X2Nsb2NrX3Q7Cit0eXBlZGVmIHMzMgkJY29tcGF0X3N1c2Vjb25kc190OworCit0eXBlZGVmIHMzMgkJY29tcGF0X3BpZF90OwordHlwZWRlZiBzMzIJCWNvbXBhdF91aWRfdDsKK3R5cGVkZWYgczMyCQljb21wYXRfZ2lkX3Q7Cit0eXBlZGVmIHUzMgkJY29tcGF0X21vZGVfdDsKK3R5cGVkZWYgdTMyCQljb21wYXRfaW5vX3Q7Cit0eXBlZGVmIHUzMgkJY29tcGF0X2Rldl90OwordHlwZWRlZiBzMzIJCWNvbXBhdF9vZmZfdDsKK3R5cGVkZWYgczY0CQljb21wYXRfbG9mZl90OwordHlwZWRlZiB1MzIJCWNvbXBhdF9ubGlua190OwordHlwZWRlZiBzMzIJCWNvbXBhdF9pcGNfcGlkX3Q7Cit0eXBlZGVmIHMzMgkJY29tcGF0X2RhZGRyX3Q7Cit0eXBlZGVmIHMzMgkJY29tcGF0X2NhZGRyX3Q7Cit0eXBlZGVmIHN0cnVjdCB7CisJczMyCXZhbFsyXTsKK30gY29tcGF0X2ZzaWRfdDsKKwordHlwZWRlZiBzMzIJCWNvbXBhdF9pbnRfdDsKK3R5cGVkZWYgczMyCQljb21wYXRfbG9uZ190OwordHlwZWRlZiB1MzIJCWNvbXBhdF91aW50X3Q7Cit0eXBlZGVmIHUzMgkJY29tcGF0X3Vsb25nX3Q7CisKK3N0cnVjdCBjb21wYXRfdGltZXNwZWMgeworCWNvbXBhdF90aW1lX3QJdHZfc2VjOworCXMzMgkJdHZfbnNlYzsKK307CisKK3N0cnVjdCBjb21wYXRfdGltZXZhbCB7CisJY29tcGF0X3RpbWVfdAl0dl9zZWM7CisJczMyCQl0dl91c2VjOworfTsKKworc3RydWN0IGNvbXBhdF9zdGF0IHsKKwljb21wYXRfZGV2X3QJc3RfZGV2OworCXMzMgkJc3RfcGFkMVszXTsKKwljb21wYXRfaW5vX3QJc3RfaW5vOworCWNvbXBhdF9tb2RlX3QJc3RfbW9kZTsKKwljb21wYXRfbmxpbmtfdAlzdF9ubGluazsKKwljb21wYXRfdWlkX3QJc3RfdWlkOworCWNvbXBhdF9naWRfdAlzdF9naWQ7CisJY29tcGF0X2Rldl90CXN0X3JkZXY7CisJczMyCQlzdF9wYWQyWzJdOworCWNvbXBhdF9vZmZfdAlzdF9zaXplOworCXMzMgkJc3RfcGFkMzsKKwljb21wYXRfdGltZV90CXN0X2F0aW1lOworCXMzMgkJc3RfYXRpbWVfbnNlYzsKKwljb21wYXRfdGltZV90CXN0X210aW1lOworCXMzMgkJc3RfbXRpbWVfbnNlYzsKKwljb21wYXRfdGltZV90CXN0X2N0aW1lOworCXMzMgkJc3RfY3RpbWVfbnNlYzsKKwlzMzIJCXN0X2Jsa3NpemU7CisJczMyCQlzdF9ibG9ja3M7CisJczMyCQlzdF9wYWQ0WzE0XTsKK307CisKK3N0cnVjdCBjb21wYXRfZmxvY2sgeworCXNob3J0CQlsX3R5cGU7CisJc2hvcnQJCWxfd2hlbmNlOworCWNvbXBhdF9vZmZfdAlsX3N0YXJ0OworCWNvbXBhdF9vZmZfdAlsX2xlbjsKKwlzMzIJCWxfc3lzaWQ7CisJY29tcGF0X3BpZF90CWxfcGlkOworCXNob3J0CQlfX3VudXNlZDsKKwlzMzIJCXBhZFs0XTsKK307CisKKyNkZWZpbmUgRl9HRVRMSzY0CTMzCisjZGVmaW5lIEZfU0VUTEs2NAkzNAorI2RlZmluZSBGX1NFVExLVzY0CTM1CisKK3N0cnVjdCBjb21wYXRfZmxvY2s2NCB7CisJc2hvcnQJCWxfdHlwZTsKKwlzaG9ydAkJbF93aGVuY2U7CisJY29tcGF0X2xvZmZfdAlsX3N0YXJ0OworCWNvbXBhdF9sb2ZmX3QJbF9sZW47CisJY29tcGF0X3BpZF90CWxfcGlkOworfTsKKworc3RydWN0IGNvbXBhdF9zdGF0ZnMgeworCWludAkJZl90eXBlOworCWludAkJZl9ic2l6ZTsKKwlpbnQJCWZfZnJzaXplOworCWludAkJZl9ibG9ja3M7CisJaW50CQlmX2JmcmVlOworCWludAkJZl9maWxlczsKKwlpbnQJCWZfZmZyZWU7CisJaW50CQlmX2JhdmFpbDsKKwljb21wYXRfZnNpZF90CWZfZnNpZDsKKwlpbnQJCWZfbmFtZWxlbjsKKwlpbnQJCWZfc3BhcmVbNl07Cit9OworCisjZGVmaW5lIENPTVBBVF9STElNX0lORklOSVRZCTB4N2ZmZmZmZmZVTAorCit0eXBlZGVmIHUzMgkJY29tcGF0X29sZF9zaWdzZXRfdDsJLyogYXQgbGVhc3QgMzIgYml0cyAqLworCisjZGVmaW5lIF9DT01QQVRfTlNJRwkJMTI4CQkvKiBEb24ndCBhc2sgISRAIyUgLi4uICAqLworI2RlZmluZSBfQ09NUEFUX05TSUdfQlBXCTMyCisKK3R5cGVkZWYgdTMyCQljb21wYXRfc2lnc2V0X3dvcmQ7CisKKyNkZWZpbmUgQ09NUEFUX09GRl9UX01BWAkweDdmZmZmZmZmCisjZGVmaW5lIENPTVBBVF9MT0ZGX1RfTUFYCTB4N2ZmZmZmZmZmZmZmZmZmZkwKKworLyoKKyAqIEEgcG9pbnRlciBwYXNzZWQgaW4gZnJvbSB1c2VyIG1vZGUuIFRoaXMgc2hvdWxkIG5vdAorICogYmUgdXNlZCBmb3Igc3lzY2FsbCBwYXJhbWV0ZXJzLCBqdXN0IGRlY2xhcmUgdGhlbQorICogYXMgcG9pbnRlcnMgYmVjYXVzZSB0aGUgc3lzY2FsbCBlbnRyeSBjb2RlIHdpbGwgaGF2ZQorICogYXBwcm9wcmlhdGVseSBjb212ZXJ0ZWQgdGhlbSBhbHJlYWR5LgorICovCit0eXBlZGVmIHUzMgkJY29tcGF0X3VwdHJfdDsKKworc3RhdGljIGlubGluZSB2b2lkICpjb21wYXRfcHRyKGNvbXBhdF91cHRyX3QgdXB0cikKK3sKKwlyZXR1cm4gKHZvaWQgKikobG9uZyl1cHRyOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKmNvbXBhdF9hbGxvY191c2VyX3NwYWNlKGxvbmcgbGVuKQoreworCXN0cnVjdCBwdF9yZWdzICpyZWdzID0gKHN0cnVjdCBwdF9yZWdzICopCisJCSgodW5zaWduZWQgbG9uZykgY3VycmVudF90aHJlYWRfaW5mbygpICsgVEhSRUFEX1NJWkUgLSAzMikgLSAxOworCisJcmV0dXJuICh2b2lkICopIChyZWdzLT5yZWdzWzI5XSAtIGxlbik7Cit9CisjaWYgZGVmaW5lZCAoX19NSVBTRUxfXykKKyNkZWZpbmUgX19DT01QQVRfRU5ESUFOX1NXQVBfXyAJMQorI2VuZGlmCisKKyNlbmRpZiAvKiBfQVNNX0NPTVBBVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2NvbXBpbGVyLmggYi9pbmNsdWRlL2FzbS1taXBzL2NvbXBpbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY5YWUyNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvY29tcGlsZXIuaApAQCAtMCwwICsxLDE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0ICBNYWNpZWogVy4gUm96eWNraQorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9BU01fQ09NUElMRVJfSAorI2RlZmluZSBfQVNNX0NPTVBJTEVSX0gKKworI2lmIF9fR05VQ19fID4gMyB8fCAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA+PSA0KQorI2RlZmluZSBHQ0NfUkVHX0FDQ1VNICIkMCIKKyNlbHNlCisjZGVmaW5lIEdDQ19SRUdfQUNDVU0gImFjY3VtIgorI2VuZGlmCisKKyNlbmRpZiAvKiBfQVNNX0NPTVBJTEVSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvY3B1LWZlYXR1cmVzLmggYi9pbmNsdWRlL2FzbS1taXBzL2NwdS1mZWF0dXJlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkZjJjMjkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2NwdS1mZWF0dXJlcy5oCkBAIC0wLDAgKzEsMTU5IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0IFJhbGYgQmFlY2hsZQorICovCisjaWZuZGVmIF9fQVNNX0NQVV9GRUFUVVJFU19ICisjZGVmaW5lIF9fQVNNX0NQVV9GRUFUVVJFU19ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2luY2x1ZGUgPGFzbS9jcHUuaD4KKyNpbmNsdWRlIDxhc20vY3B1LWluZm8uaD4KKyNpbmNsdWRlIDxjcHUtZmVhdHVyZS1vdmVycmlkZXMuaD4KKworLyoKKyAqIFNNUCBhc3N1bXB0aW9uOiBPcHRpb25zIG9mIENQVSAwIGFyZSBhIHN1cGVyc2V0IG9mIGFsbCBwcm9jZXNzb3JzLgorICogVGhpcyBpcyB0cnVlIGZvciBhbGwga25vd24gTUlQUyBzeXN0ZW1zLgorICovCisjaWZuZGVmIGNwdV9oYXNfdGxiCisjZGVmaW5lIGNwdV9oYXNfdGxiCQkoY3B1X2RhdGFbMF0ub3B0aW9ucyAmIE1JUFNfQ1BVX1RMQikKKyNlbmRpZgorI2lmbmRlZiBjcHVfaGFzXzRrZXgKKyNkZWZpbmUgY3B1X2hhc180a2V4CQkoY3B1X2RhdGFbMF0ub3B0aW9ucyAmIE1JUFNfQ1BVXzRLRVgpCisjZW5kaWYKKyNpZm5kZWYgY3B1X2hhc180a3RsYgorI2RlZmluZSBjcHVfaGFzXzRrdGxiCQkoY3B1X2RhdGFbMF0ub3B0aW9ucyAmIE1JUFNfQ1BVXzRLVExCKQorI2VuZGlmCisjaWZuZGVmIGNwdV9oYXNfZnB1CisjZGVmaW5lIGNwdV9oYXNfZnB1CQkoY3B1X2RhdGFbMF0ub3B0aW9ucyAmIE1JUFNfQ1BVX0ZQVSkKKyNlbmRpZgorI2lmbmRlZiBjcHVfaGFzXzMyZnByCisjZGVmaW5lIGNwdV9oYXNfMzJmcHIJCShjcHVfZGF0YVswXS5vcHRpb25zICYgTUlQU19DUFVfMzJGUFIpCisjZW5kaWYKKyNpZm5kZWYgY3B1X2hhc19jb3VudGVyCisjZGVmaW5lIGNwdV9oYXNfY291bnRlcgkJKGNwdV9kYXRhWzBdLm9wdGlvbnMgJiBNSVBTX0NQVV9DT1VOVEVSKQorI2VuZGlmCisjaWZuZGVmIGNwdV9oYXNfd2F0Y2gKKyNkZWZpbmUgY3B1X2hhc193YXRjaAkJKGNwdV9kYXRhWzBdLm9wdGlvbnMgJiBNSVBTX0NQVV9XQVRDSCkKKyNlbmRpZgorI2lmbmRlZiBjcHVfaGFzX21pcHMxNgorI2RlZmluZSBjcHVfaGFzX21pcHMxNgkJKGNwdV9kYXRhWzBdLm9wdGlvbnMgJiBNSVBTX0NQVV9NSVBTMTYpCisjZW5kaWYKKyNpZm5kZWYgY3B1X2hhc19kaXZlYworI2RlZmluZSBjcHVfaGFzX2RpdmVjCQkoY3B1X2RhdGFbMF0ub3B0aW9ucyAmIE1JUFNfQ1BVX0RJVkVDKQorI2VuZGlmCisjaWZuZGVmIGNwdV9oYXNfdmNlCisjZGVmaW5lIGNwdV9oYXNfdmNlCQkoY3B1X2RhdGFbMF0ub3B0aW9ucyAmIE1JUFNfQ1BVX1ZDRSkKKyNlbmRpZgorI2lmbmRlZiBjcHVfaGFzX2NhY2hlX2NkZXhfcAorI2RlZmluZSBjcHVfaGFzX2NhY2hlX2NkZXhfcAkoY3B1X2RhdGFbMF0ub3B0aW9ucyAmIE1JUFNfQ1BVX0NBQ0hFX0NERVhfUCkKKyNlbmRpZgorI2lmbmRlZiBjcHVfaGFzX2NhY2hlX2NkZXhfcworI2RlZmluZSBjcHVfaGFzX2NhY2hlX2NkZXhfcwkoY3B1X2RhdGFbMF0ub3B0aW9ucyAmIE1JUFNfQ1BVX0NBQ0hFX0NERVhfUykKKyNlbmRpZgorI2lmbmRlZiBjcHVfaGFzX3ByZWZldGNoCisjZGVmaW5lIGNwdV9oYXNfcHJlZmV0Y2gJKGNwdV9kYXRhWzBdLm9wdGlvbnMgJiBNSVBTX0NQVV9QUkVGRVRDSCkKKyNlbmRpZgorI2lmbmRlZiBjcHVfaGFzX21jaGVjaworI2RlZmluZSBjcHVfaGFzX21jaGVjawkJKGNwdV9kYXRhWzBdLm9wdGlvbnMgJiBNSVBTX0NQVV9NQ0hFQ0spCisjZW5kaWYKKyNpZm5kZWYgY3B1X2hhc19lanRhZworI2RlZmluZSBjcHVfaGFzX2VqdGFnCQkoY3B1X2RhdGFbMF0ub3B0aW9ucyAmIE1JUFNfQ1BVX0VKVEFHKQorI2VuZGlmCisjaWZuZGVmIGNwdV9oYXNfbGxzYworI2RlZmluZSBjcHVfaGFzX2xsc2MJCShjcHVfZGF0YVswXS5vcHRpb25zICYgTUlQU19DUFVfTExTQykKKyNlbmRpZgorI2lmbmRlZiBjcHVfaGFzX3Z0YWdfaWNhY2hlCisjZGVmaW5lIGNwdV9oYXNfdnRhZ19pY2FjaGUJKGNwdV9kYXRhWzBdLmljYWNoZS5mbGFncyAmIE1JUFNfQ0FDSEVfVlRBRykKKyNlbmRpZgorI2lmbmRlZiBjcHVfaGFzX2RjX2FsaWFzZXMKKyNkZWZpbmUgY3B1X2hhc19kY19hbGlhc2VzCShjcHVfZGF0YVswXS5kY2FjaGUuZmxhZ3MgJiBNSVBTX0NBQ0hFX0FMSUFTRVMpCisjZW5kaWYKKyNpZm5kZWYgY3B1X2hhc19pY19maWxsc19mX2RjCisjZGVmaW5lIGNwdV9oYXNfaWNfZmlsbHNfZl9kYwkoY3B1X2RhdGFbMF0uaWNhY2hlLmZsYWdzICYgTUlQU19DQUNIRV9JQ19GX0RDKQorI2VuZGlmCisKKy8qCisgKiBJLUNhY2hlIHNub29wcyByZW1vdGUgc3RvcmUuICBUaGlzIG9ubHkgbWF0dGVycyBvbiBTTVAuICBTb21lIG11bHRpcHJvY2Vzc29ycworICogc3VjaCBhcyB0aGUgUjEwMDAwIGhhdmUgSS1DYWNoZXMgdGhhdCBzbm9vcCBsb2NhbCBzdG9yZXM7IHRoZSBlbWJlZGRlZCBvbmVzCisgKiBkb24ndC4gIEZvciBtYWludGFpbmluZyBJLWNhY2hlIGNvaGVyZW5jeSB0aGlzIG1lYW5zIHdlIG5lZWQgdG8gZmx1c2ggdGhlCisgKiBELWNhY2hlIGFsbCB0aGUgd2F5IGJhY2sgdG8gd2hldmVyIHRoZSBJLWNhY2hlIGRvZXMgcmVmaWxscyBmcm9tLCBzbyB0aGUKKyAqIEktY2FjaGUgaGFzIGEgY2hhbmNlIHRvIHNlZSB0aGUgbmV3IGRhdGEgYXQgYWxsLiAgVGhlbiB3ZSBoYXZlIHRvIGZsdXNoIHRoZQorICogSS1jYWNoZSBhbHNvLgorICogTm90ZSB3ZSBtYXkgaGF2ZSBiZWVuIHJlc2NoZWR1bGVkIGFuZCBtYXkgbm8gbG9uZ2VyIGJlIHJ1bm5pbmcgb24gdGhlIENQVQorICogdGhhdCBkaWQgdGhlIHN0b3JlIHNvIHdlIGNhbid0IG9wdGltaXplIHRoaXMgaW50byBvbmx5IGRvaW5nIHRoZSBmbHVzaCBvbgorICogdGhlIGxvY2FsIENQVS4KKyAqLworI2lmbmRlZiBjcHVfaWNhY2hlX3Nub29wc19yZW1vdGVfc3RvcmUKKyNpZmRlZiBDT05GSUdfU01QCisjZGVmaW5lIGNwdV9pY2FjaGVfc25vb3BzX3JlbW90ZV9zdG9yZQkoY3B1X2RhdGFbMF0uaWNhY2hlLmZsYWdzICYgTUlQU19JQ19TTk9PUFNfUkVNT1RFKQorI2Vsc2UKKyNkZWZpbmUgY3B1X2ljYWNoZV9zbm9vcHNfcmVtb3RlX3N0b3JlCTEKKyNlbmRpZgorI2VuZGlmCisKKy8qCisgKiBDZXJ0YWluIENQVXMgbWF5IHRocm93IGJpemFycmUgZXhjZXB0aW9ucyBpZiBub3QgdGhlIHdob2xlIGNhY2hlbGluZQorICogY29udGFpbnMgdmFsaWQgaW5zdHJ1Y3Rpb25zLiAgRm9yIHRoZXNlIHdlIGVuc3VyZSBwcm9wZXIgYWxpZ25tZW50IG9mCisgKiBzaWduYWwgdHJhbXBvbGluZXMgYW5kIHBhZCB0aGVtIHRvIHRoZSBzaXplIG9mIGEgZnVsbCBjYWNoZSBsaW5lcyB3aXRoCisgKiBub3BzLiAgVGhpcyBpcyBhbHNvIHVzZWQgaW4gc3RydWN0dXJlIGRlZmluaXRpb25zIHNvIGNhbid0IGJlIGEgdGVzdCBtYWNybworICogbGlrZSB0aGUgb3RoZXJzLgorICovCisjaWZuZGVmIFBMQVRfVFJBTVBPTElORV9TVFVGRl9MSU5FCisjZGVmaW5lIFBMQVRfVFJBTVBPTElORV9TVFVGRl9MSU5FCTBVTAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUlQUzMyCisjIGlmbmRlZiBjcHVfaGFzX25vZnB1ZXgKKyMgZGVmaW5lIGNwdV9oYXNfbm9mcHVleAkoY3B1X2RhdGFbMF0ub3B0aW9ucyAmIE1JUFNfQ1BVX05PRlBVRVgpCisjIGVuZGlmCisjIGlmbmRlZiBjcHVfaGFzXzY0Yml0cworIyBkZWZpbmUgY3B1X2hhc182NGJpdHMJCShjcHVfZGF0YVswXS5pc2FfbGV2ZWwgJiBNSVBTX0NQVV9JU0FfNjRCSVQpCisjIGVuZGlmCisjIGlmbmRlZiBjcHVfaGFzXzY0Yml0X3plcm9fcmVnCisjIGRlZmluZSBjcHVfaGFzXzY0Yml0X3plcm9fcmVnCShjcHVfZGF0YVswXS5pc2FfbGV2ZWwgJiBNSVBTX0NQVV9JU0FfNjRCSVQpCisjIGVuZGlmCisjIGlmbmRlZiBjcHVfaGFzXzY0Yml0X2dwX3JlZ3MKKyMgZGVmaW5lIGNwdV9oYXNfNjRiaXRfZ3BfcmVncwkJMAorIyBlbmRpZgorIyBpZm5kZWYgY3B1X2hhc182NGJpdF9hZGRyZXNzZXMKKyMgZGVmaW5lIGNwdV9oYXNfNjRiaXRfYWRkcmVzc2VzCTAKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01JUFM2NAorIyBpZm5kZWYgY3B1X2hhc19ub2ZwdWV4CisjIGRlZmluZSBjcHVfaGFzX25vZnB1ZXgJCTAKKyMgZW5kaWYKKyMgaWZuZGVmIGNwdV9oYXNfNjRiaXRzCisjIGRlZmluZSBjcHVfaGFzXzY0Yml0cwkJCTEKKyMgZW5kaWYKKyMgaWZuZGVmIGNwdV9oYXNfNjRiaXRfemVyb19yZWcKKyMgZGVmaW5lIGNwdV9oYXNfNjRiaXRfemVyb19yZWcJCTEKKyMgZW5kaWYKKyMgaWZuZGVmIGNwdV9oYXNfNjRiaXRfZ3BfcmVncworIyBkZWZpbmUgY3B1X2hhc182NGJpdF9ncF9yZWdzCQkxCisjIGVuZGlmCisjIGlmbmRlZiBjcHVfaGFzXzY0Yml0X2FkZHJlc3NlcworIyBkZWZpbmUgY3B1X2hhc182NGJpdF9hZGRyZXNzZXMJMQorIyBlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgY3B1X2hhc19zdWJzZXRfcGNhY2hlcworI2RlZmluZSBjcHVfaGFzX3N1YnNldF9wY2FjaGVzCShjcHVfZGF0YVswXS5vcHRpb25zICYgTUlQU19DUFVfU1VCU0VUX0NBQ0hFUykKKyNlbmRpZgorCisjaWZuZGVmIGNwdV9kY2FjaGVfbGluZV9zaXplCisjZGVmaW5lIGNwdV9kY2FjaGVfbGluZV9zaXplKCkJY3VycmVudF9jcHVfZGF0YS5kY2FjaGUubGluZXN6CisjZW5kaWYKKyNpZm5kZWYgY3B1X2ljYWNoZV9saW5lX3NpemUKKyNkZWZpbmUgY3B1X2ljYWNoZV9saW5lX3NpemUoKQljdXJyZW50X2NwdV9kYXRhLmljYWNoZS5saW5lc3oKKyNlbmRpZgorI2lmbmRlZiBjcHVfc2NhY2hlX2xpbmVfc2l6ZQorI2RlZmluZSBjcHVfc2NhY2hlX2xpbmVfc2l6ZSgpCWN1cnJlbnRfY3B1X2RhdGEuc2NhY2hlLmxpbmVzegorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0FTTV9DUFVfRkVBVFVSRVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9jcHUtaW5mby5oIGIvaW5jbHVkZS9hc20tbWlwcy9jcHUtaW5mby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwYTM1YjEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2NwdS1pbmZvLmgKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NCBXYWxkb3JmIEdNQkgKKyAqIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMSwgMjAwMiwgMjAwMyBSYWxmIEJhZWNobGUKKyAqIENvcHlyaWdodCAoQykgMTk5NiBQYXVsIE0uIEFudG9pbmUKKyAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCisgKi8KKyNpZm5kZWYgX19BU01fQ1BVX0lORk9fSAorI2RlZmluZSBfX0FTTV9DUFVfSU5GT19ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxhc20vY2FjaGUuaD4KKworI2lmZGVmIENPTkZJR19TR0lfSVAyNworI2luY2x1ZGUgPGFzbS9zbi90eXBlcy5oPgorI2VuZGlmCisKKy8qCisgKiBEZXNjcmlwdG9yIGZvciBhIGNhY2hlCisgKi8KK3N0cnVjdCBjYWNoZV9kZXNjIHsKKwl1bnNpZ25lZCBzaG9ydCBsaW5lc3o7CS8qIFNpemUgb2YgbGluZSBpbiBieXRlcyAqLworCXVuc2lnbmVkIHNob3J0IHdheXM7CS8qIE51bWJlciBvZiB3YXlzICovCisJdW5zaWduZWQgc2hvcnQgc2V0czsJLyogTnVtYmVyIG9mIGxpbmVzIHBlciBzZXQgKi8KKwl1bnNpZ25lZCBpbnQgd2F5c2l6ZTsJLyogQnl0ZXMgcGVyIHdheSAqLworCXVuc2lnbmVkIGludCB3YXliaXQ7CS8qIEJpdHMgdG8gc2VsZWN0IGluIGEgY2FjaGUgc2V0ICovCisJdW5zaWduZWQgaW50IGZsYWdzOwkvKiBGbGFncyBkZXNjcmliaW5nIGNhY2hlIHByb3BlcnRpZXMgKi8KK307CisKKy8qCisgKiBGbGFnIGRlZmluaXRpb25zCisgKi8KKyNkZWZpbmUgTUlQU19DQUNIRV9OT1RfUFJFU0VOVAkweDAwMDAwMDAxCisjZGVmaW5lIE1JUFNfQ0FDSEVfVlRBRwkJMHgwMDAwMDAwMgkvKiBWaXJ0dWFsbHkgdGFnZ2VkIGNhY2hlICovCisjZGVmaW5lIE1JUFNfQ0FDSEVfQUxJQVNFUwkweDAwMDAwMDA0CS8qIENhY2hlIGNvdWxkIGhhdmUgYWxpYXNlcyAqLworI2RlZmluZSBNSVBTX0NBQ0hFX0lDX0ZfREMJMHgwMDAwMDAwOAkvKiBJYyBjYW4gcmVmaWxsIGZyb20gRC1jYWNoZSAqLworI2RlZmluZSBNSVBTX0lDX1NOT09QU19SRU1PVEUJMHgwMDAwMDAxMAkvKiBJYyBzbm9vcHMgcmVtb3RlIHN0b3JlcyAqLworCitzdHJ1Y3QgY3B1aW5mb19taXBzIHsKKwl1bnNpZ25lZCBsb25nCQl1ZGVsYXlfdmFsOworCXVuc2lnbmVkIGxvbmcJCWFzaWRfY2FjaGU7CisjaWYgZGVmaW5lZChDT05GSUdfU0dJX0lQMjcpCisvLwljcHVpZF90CQlwX2NwdWlkOwkvKiBQUk9NIGFzc2lnbmVkIGNwdWlkICovCisJY25vZGVpZF90CXBfbm9kZWlkOwkvKiBteSBub2RlIElEIGluIGNvbXBhY3QtaWQtc3BhY2UgKi8KKwluYXNpZF90CQlwX25hc2lkOwkvKiBteSBub2RlIElEIGluIG51bWEtYXMtaWQtc3BhY2UgKi8KKwl1bnNpZ25lZCBjaGFyCXBfc2xpY2U7CS8qIFBoeXNpY2FsIHBvc2l0aW9uIG9uIG5vZGUgYm9hcmQgKi8KKyNlbmRpZgorI2lmIDAKKwl1bnNpZ25lZCBsb25nCQlsb29wc19wZXJfc2VjOworCXVuc2lnbmVkIGxvbmcJCWlwaV9jb3VudDsKKwl1bnNpZ25lZCBsb25nCQlpcnFfYXR0ZW1wdFtOUl9JUlFTXTsKKwl1bnNpZ25lZCBsb25nCQlzbXBfbG9jYWxfaXJxX2NvdW50OworCXVuc2lnbmVkIGxvbmcJCXByb2ZfbXVsdGlwbGllcjsKKwl1bnNpZ25lZCBsb25nCQlwcm9mX2NvdW50ZXI7CisjZW5kaWYKKworCS8qCisJICogQ2FwYWJpbGl0eSBhbmQgZmVhdHVyZSBkZXNjcmlwdG9yIHN0cnVjdHVyZSBmb3IgTUlQUyBDUFUKKwkgKi8KKwl1bnNpZ25lZCBsb25nCQlvcHRpb25zOworCXVuc2lnbmVkIGludAkJcHJvY2Vzc29yX2lkOworCXVuc2lnbmVkIGludAkJZnB1X2lkOworCXVuc2lnbmVkIGludAkJY3B1dHlwZTsKKwlpbnQJCQlpc2FfbGV2ZWw7CisJaW50CQkJdGxic2l6ZTsKKwlzdHJ1Y3QgY2FjaGVfZGVzYwlpY2FjaGU7CS8qIFByaW1hcnkgSS1jYWNoZSAqLworCXN0cnVjdCBjYWNoZV9kZXNjCWRjYWNoZTsJLyogUHJpbWFyeSBEIG9yIGNvbWJpbmVkIEkvRCBjYWNoZSAqLworCXN0cnVjdCBjYWNoZV9kZXNjCXNjYWNoZTsJLyogU2Vjb25kYXJ5IGNhY2hlICovCisJc3RydWN0IGNhY2hlX2Rlc2MJdGNhY2hlOwkvKiBUZXJ0aWFyeS9zcGxpdCBzZWNvbmRhcnkgY2FjaGUgKi8KKwl2b2lkIAkJCSpkYXRhOwkvKiBBZGRpdGlvbmFsIGRhdGEgKi8KK30gX19hdHRyaWJ1dGVfXygoYWxpZ25lZChTTVBfQ0FDSEVfQllURVMpKSk7CisKK2V4dGVybiBzdHJ1Y3QgY3B1aW5mb19taXBzIGNwdV9kYXRhW107CisjZGVmaW5lIGN1cnJlbnRfY3B1X2RhdGEgY3B1X2RhdGFbc21wX3Byb2Nlc3Nvcl9pZCgpXQorCitleHRlcm4gdm9pZCBjcHVfcHJvYmUodm9pZCk7CitleHRlcm4gdm9pZCBjcHVfcmVwb3J0KHZvaWQpOworCisjZW5kaWYgLyogX19BU01fQ1BVX0lORk9fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9jcHUuaCBiL2luY2x1ZGUvYXNtLW1pcHMvY3B1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVjMDYwYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvY3B1LmgKQEAgLTAsMCArMSwyMjIgQEAKKy8qCisgKiBjcHUuaDogVmFsdWVzIG9mIHRoZSBQUklkIHJlZ2lzdGVyIHVzZWQgdG8gbWF0Y2ggdXAKKyAqICAgICAgICB2YXJpb3VzIE1JUFMgY3B1IHR5cGVzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NiBEYXZpZCBTLiBNaWxsZXIgKGRtQGVuZ3Iuc2dpLmNvbSkKKyAqLworI2lmbmRlZiBfQVNNX0NQVV9ICisjZGVmaW5lIF9BU01fQ1BVX0gKKworLyogQXNzaWduZWQgQ29tcGFueSB2YWx1ZXMgZm9yIGJpdHMgMjM6MTYgb2YgdGhlIFBSSWQgUmVnaXN0ZXIKKyAgIChDUDAgcmVnaXN0ZXIgMTUsIHNlbGVjdCAwKS4gIEFzIG9mIHRoZSBNSVBTMzIgYW5kIE1JUFM2NCBzcGVjcyBmcm9tCisgICBNVEksIHRoZSBQUklkIHJlZ2lzdGVyIGlzIGRlZmluZWQgaW4gdGhpcyAoYmFja3dhcmRzIGNvbXBhdGlibGUpCisgICB3YXk6CisKKyAgKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgIHwgQ29tcGFueSBPcHRpb25zfCBDb21wYW55IElEICAgICB8IFByb2Nlc3NvciBJRCAgIHwgUmV2aXNpb24gICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAgIDMxICAgICAgICAgICAgMjQgMjMgICAgICAgICAgICAxNiAxNSAgICAgICAgICAgICA4IDcKKworICAgSSBkb24ndCBoYXZlIGRvY3MgZm9yIGFsbCB0aGUgcHJldmlvdXMgcHJvY2Vzc29ycywgYnV0IG15IGltcHJlc3Npb24gaXMKKyAgIHRoYXQgYml0cyAxNi0yMyBoYXZlIGJlZW4gMCBmb3IgYWxsIE1JUFMgcHJvY2Vzc29ycyBiZWZvcmUgdGhlIE1JUFMzMi82NAorICAgc3BlYy4KKyovCisKKyNkZWZpbmUgUFJJRF9DT01QX0xFR0FDWSAgICAgICAweDAwMDAwMAorI2RlZmluZSBQUklEX0NPTVBfTUlQUyAgICAgICAgIDB4MDEwMDAwCisjZGVmaW5lIFBSSURfQ09NUF9CUk9BRENPTSAgICAgMHgwMjAwMDAKKyNkZWZpbmUgUFJJRF9DT01QX0FMQ0hFTVkgICAgICAweDAzMDAwMAorI2RlZmluZSBQUklEX0NPTVBfU0lCWVRFICAgICAgIDB4MDQwMDAwCisjZGVmaW5lIFBSSURfQ09NUF9TQU5EQ1JBRlQgICAgMHgwNTAwMDAKKworLyoKKyAqIEFzc2lnbmVkIHZhbHVlcyBmb3IgdGhlIHByb2R1Y3QgSUQgcmVnaXN0ZXIuICBJbiBvcmRlciB0byBkZXRlY3QgYQorICogY2VydGFpbiBDUFUgdHlwZSBleGFjdGx5IGV2ZW50dWFsbHkgYWRkaXRpb25hbCByZWdpc3RlcnMgbWF5IG5lZWQgdG8KKyAqIGJlIGV4YW1pbmVkLiAgVGhlc2UgYXJlIHZhbGlkIHdoZW4gMjM6MTYgPT0gUFJJRF9DT01QX0xFR0FDWQorICovCisjZGVmaW5lIFBSSURfSU1QX1IyMDAwCQkweDAxMDAKKyNkZWZpbmUgUFJJRF9JTVBfQVUxX1JFVjEJMHgwMTAwCisjZGVmaW5lIFBSSURfSU1QX0FVMV9SRVYyCTB4MDIwMAorI2RlZmluZSBQUklEX0lNUF9SMzAwMAkJMHgwMjAwCQkvKiBTYW1lIGFzIFIyMDAwQSAgKi8KKyNkZWZpbmUgUFJJRF9JTVBfUjYwMDAJCTB4MDMwMAkJLyogU2FtZSBhcyBSMzAwMEEgICovCisjZGVmaW5lIFBSSURfSU1QX1I0MDAwCQkweDA0MDAKKyNkZWZpbmUgUFJJRF9JTVBfUjYwMDBBCQkweDA2MDAKKyNkZWZpbmUgUFJJRF9JTVBfUjEwMDAwCQkweDA5MDAKKyNkZWZpbmUgUFJJRF9JTVBfUjQzMDAJCTB4MGIwMAorI2RlZmluZSBQUklEX0lNUF9WUjQxWFgJCTB4MGMwMAorI2RlZmluZSBQUklEX0lNUF9SMTIwMDAJCTB4MGUwMAorI2RlZmluZSBQUklEX0lNUF9SODAwMAkJMHgxMDAwCisjZGVmaW5lIFBSSURfSU1QX1I0NjAwCQkweDIwMDAKKyNkZWZpbmUgUFJJRF9JTVBfUjQ3MDAJCTB4MjEwMAorI2RlZmluZSBQUklEX0lNUF9UWDM5CQkweDIyMDAKKyNkZWZpbmUgUFJJRF9JTVBfUjQ2NDAJCTB4MjIwMAorI2RlZmluZSBQUklEX0lNUF9SNDY1MAkJMHgyMjAwCQkvKiBTYW1lIGFzIFI0NjQwICovCisjZGVmaW5lIFBSSURfSU1QX1I1MDAwCQkweDIzMDAKKyNkZWZpbmUgUFJJRF9JTVBfVFg0OQkJMHgyZDAwCisjZGVmaW5lIFBSSURfSU1QX1NPTklDCQkweDI0MDAKKyNkZWZpbmUgUFJJRF9JTVBfTUFHSUMJCTB4MjUwMAorI2RlZmluZSBQUklEX0lNUF9STTcwMDAJCTB4MjcwMAorI2RlZmluZSBQUklEX0lNUF9ORVZBREEJCTB4MjgwMAkJLyogUk01MjYwID8/PyAqLworI2RlZmluZSBQUklEX0lNUF9STTkwMDAJCTB4MzQwMAorI2RlZmluZSBQUklEX0lNUF9SNTQzMgkJMHg1NDAwCisjZGVmaW5lIFBSSURfSU1QX1I1NTAwCQkweDU1MDAKKyNkZWZpbmUgUFJJRF9JTVBfNEtDCQkweDgwMDAKKyNkZWZpbmUgUFJJRF9JTVBfNUtDCQkweDgxMDAKKyNkZWZpbmUgUFJJRF9JTVBfMjBLQwkJMHg4MjAwCisjZGVmaW5lIFBSSURfSU1QXzRLRUMJCTB4ODQwMAorI2RlZmluZSBQUklEX0lNUF80S1NDCQkweDg2MDAKKyNkZWZpbmUgUFJJRF9JTVBfMjVLRgkJMHg4ODAwCisjZGVmaW5lIFBSSURfSU1QXzVLRQkJMHg4OTAwCisjZGVmaW5lIFBSSURfSU1QXzRLRUNSMgkJMHg5MDAwCisjZGVmaW5lIFBSSURfSU1QXzRLRU1QUjIJMHg5MTAwCisjZGVmaW5lIFBSSURfSU1QXzRLU0QJCTB4OTIwMAorI2RlZmluZSBQUklEX0lNUF8yNEsJCTB4OTMwMAorCisjZGVmaW5lIFBSSURfSU1QX1VOS05PV04JMHhmZjAwCisKKy8qCisgKiBUaGVzZSBhcmUgdGhlIFBSSUQncyBmb3Igd2hlbiAyMzoxNiA9PSBQUklEX0NPTVBfU0lCWVRFCisgKi8KKworI2RlZmluZSBQUklEX0lNUF9TQjEgICAgICAgICAgICAweDAxMDAKKworLyoKKyAqIFRoZXNlIGFyZSB0aGUgUFJJRCdzIGZvciB3aGVuIDIzOjE2ID09IFBSSURfQ09NUF9TQU5EQ1JBRlQKKyAqLworCisjZGVmaW5lIFBSSURfSU1QX1NSNzEwMDAgICAgICAgIDB4MDQwMAorCisvKgorICogRGVmaW5pdGlvbnMgZm9yIDc6MCBvbiBsZWdhY3kgcHJvY2Vzc29ycworICovCisKKworI2RlZmluZSBQUklEX1JFVl9UWDQ5MjcJCTB4MDAyMgorI2RlZmluZSBQUklEX1JFVl9UWDQ5MzcJCTB4MDAzMAorI2RlZmluZSBQUklEX1JFVl9SNDQwMAkJMHgwMDQwCisjZGVmaW5lIFBSSURfUkVWX1IzMDAwQQkJMHgwMDMwCisjZGVmaW5lIFBSSURfUkVWX1IzMDAwCQkweDAwMjAKKyNkZWZpbmUgUFJJRF9SRVZfUjIwMDBBCQkweDAwMTAKKyNkZWZpbmUgUFJJRF9SRVZfVFgzOTEyIAkweDAwMTAKKyNkZWZpbmUgUFJJRF9SRVZfVFgzOTIyIAkweDAwMzAKKyNkZWZpbmUgUFJJRF9SRVZfVFgzOTI3IAkweDAwNDAKKyNkZWZpbmUgUFJJRF9SRVZfVlI0MTExCQkweDAwNTAKKyNkZWZpbmUgUFJJRF9SRVZfVlI0MTgxCQkweDAwNTAJLyogU2FtZSBhcyBWUjQxMTEgKi8KKyNkZWZpbmUgUFJJRF9SRVZfVlI0MTIxCQkweDAwNjAKKyNkZWZpbmUgUFJJRF9SRVZfVlI0MTIyCQkweDAwNzAKKyNkZWZpbmUgUFJJRF9SRVZfVlI0MTgxQQkweDAwNzAJLyogU2FtZSBhcyBWUjQxMjIgKi8KKyNkZWZpbmUgUFJJRF9SRVZfVlI0MTMwCQkweDAwODAKKworLyoKKyAqIEZQVSBpbXBsZW1lbnRhdGlvbi9yZXZpc2lvbiByZWdpc3RlciAoQ1AxIGNvbnRyb2wgcmVnaXN0ZXIgMCkuCisgKgorICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgKiB8IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJbXBsZW1lbnRhdGlvbiB8IFJldmlzaW9uICAgICAgIHwKKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICogIDMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNiAxNSAgICAgICAgICAgICA4IDcgICAgICAgICAgICAgIDAKKyAqLworCisjZGVmaW5lIEZQSVJfSU1QX05PTkUJCTB4MDAwMAorCisjZGVmaW5lIENQVV9VTktOT1dOCQkgMAorI2RlZmluZSBDUFVfUjIwMDAJCSAxCisjZGVmaW5lIENQVV9SMzAwMAkJIDIKKyNkZWZpbmUgQ1BVX1IzMDAwQQkJIDMKKyNkZWZpbmUgQ1BVX1IzMDQxCQkgNAorI2RlZmluZSBDUFVfUjMwNTEJCSA1CisjZGVmaW5lIENQVV9SMzA1MgkJIDYKKyNkZWZpbmUgQ1BVX1IzMDgxCQkgNworI2RlZmluZSBDUFVfUjMwODFFCQkgOAorI2RlZmluZSBDUFVfUjQwMDBQQwkJIDkKKyNkZWZpbmUgQ1BVX1I0MDAwU0MJCTEwCisjZGVmaW5lIENQVV9SNDAwME1DCQkxMQorI2RlZmluZSBDUFVfUjQyMDAJCTEyCisjZGVmaW5lIENQVV9SNDQwMFBDCQkxMworI2RlZmluZSBDUFVfUjQ0MDBTQwkJMTQKKyNkZWZpbmUgQ1BVX1I0NDAwTUMJCTE1CisjZGVmaW5lIENQVV9SNDYwMAkJMTYKKyNkZWZpbmUgQ1BVX1I2MDAwCQkxNworI2RlZmluZSBDUFVfUjYwMDBBCQkxOAorI2RlZmluZSBDUFVfUjgwMDAJCTE5CisjZGVmaW5lIENQVV9SMTAwMDAJCTIwCisjZGVmaW5lIENQVV9SMTIwMDAJCTIxCisjZGVmaW5lIENQVV9SNDMwMAkJMjIKKyNkZWZpbmUgQ1BVX1I0NjUwCQkyMworI2RlZmluZSBDUFVfUjQ3MDAJCTI0CisjZGVmaW5lIENQVV9SNTAwMAkJMjUKKyNkZWZpbmUgQ1BVX1I1MDAwQQkJMjYKKyNkZWZpbmUgQ1BVX1I0NjQwCQkyNworI2RlZmluZSBDUFVfTkVWQURBCQkyOAorI2RlZmluZSBDUFVfUk03MDAwCQkyOQorI2RlZmluZSBDUFVfUjU0MzIJCTMwCisjZGVmaW5lIENQVV80S0MJCQkzMQorI2RlZmluZSBDUFVfNUtDCQkJMzIKKyNkZWZpbmUgQ1BVX1I0MzEwCQkzMworI2RlZmluZSBDUFVfU0IxCQkJMzQKKyNkZWZpbmUgQ1BVX1RYMzkxMgkJMzUKKyNkZWZpbmUgQ1BVX1RYMzkyMgkJMzYKKyNkZWZpbmUgQ1BVX1RYMzkyNwkJMzcKKyNkZWZpbmUgQ1BVX0FVMTAwMAkJMzgKKyNkZWZpbmUgQ1BVXzRLRUMJCTM5CisjZGVmaW5lIENQVV80S1NDCQk0MAorI2RlZmluZSBDUFVfVlI0MVhYCQk0MQorI2RlZmluZSBDUFVfUjU1MDAJCTQyCisjZGVmaW5lIENQVV9UWDQ5WFgJCTQzCisjZGVmaW5lIENQVV9BVTE1MDAJCTQ0CisjZGVmaW5lIENQVV8yMEtDCQk0NQorI2RlZmluZSBDUFVfVlI0MTExCQk0NgorI2RlZmluZSBDUFVfVlI0MTIxCQk0NworI2RlZmluZSBDUFVfVlI0MTIyCQk0OAorI2RlZmluZSBDUFVfVlI0MTMxCQk0OQorI2RlZmluZSBDUFVfVlI0MTgxCQk1MAorI2RlZmluZSBDUFVfVlI0MTgxQQkJNTEKKyNkZWZpbmUgQ1BVX0FVMTEwMAkJNTIKKyNkZWZpbmUgQ1BVX1NSNzEwMDAJCTUzCisjZGVmaW5lIENQVV9STTkwMDAJCTU0CisjZGVmaW5lIENQVV8yNUtGCQk1NQorI2RlZmluZSBDUFVfVlI0MTMzCQk1NgorI2RlZmluZSBDUFVfQVUxNTUwCQk1NworI2RlZmluZSBDUFVfMjRLCQkJNTgKKyNkZWZpbmUgQ1BVX0xBU1QJCTU4CisKKy8qCisgKiBJU0EgTGV2ZWwgZW5jb2RpbmdzCisgKgorICovCisjZGVmaW5lIE1JUFNfQ1BVX0lTQV9JCQkweDAwMDAwMDAxCisjZGVmaW5lIE1JUFNfQ1BVX0lTQV9JSQkJMHgwMDAwMDAwMgorI2RlZmluZSBNSVBTX0NQVV9JU0FfSUlJCTB4MDAwMDgwMDMKKyNkZWZpbmUgTUlQU19DUFVfSVNBX0lWCQkweDAwMDA4MDA0CisjZGVmaW5lIE1JUFNfQ1BVX0lTQV9WCQkweDAwMDA4MDA1CisjZGVmaW5lIE1JUFNfQ1BVX0lTQV9NMzIJMHgwMDAwMDAyMAorI2RlZmluZSBNSVBTX0NQVV9JU0FfTTY0CTB4MDAwMDgwNDAKKworLyoKKyAqIEJpdCAxNSBlbmNvZGVzIGlmIGFuIElTQSBsZXZlbCBzdXBwb3J0cyA2NC1iaXQgb3BlcmF0aW9ucy4KKyAqLworI2RlZmluZSBNSVBTX0NQVV9JU0FfNjRCSVQJMHgwMDAwODAwMAorCisvKgorICogQ1BVIE9wdGlvbiBlbmNvZGluZ3MKKyAqLworI2RlZmluZSBNSVBTX0NQVV9UTEIJCTB4MDAwMDAwMDEgLyogQ1BVIGhhcyBUTEIgKi8KKy8qIExlYXZlIGEgc3BhcmUgYml0IGZvciB2YXJpYW50IE1NVSB0eXBlcy4uLiAqLworI2RlZmluZSBNSVBTX0NQVV80S0VYCQkweDAwMDAwMDA0IC8qICJSNEsiIGV4Y2VwdGlvbiBtb2RlbCAqLworI2RlZmluZSBNSVBTX0NQVV80S1RMQgkJMHgwMDAwMDAwOCAvKiAiUjRLIiBUTEIgaGFuZGxlciAqLworI2RlZmluZSBNSVBTX0NQVV9GUFUJCTB4MDAwMDAwMTAgLyogQ1BVIGhhcyBGUFUgKi8KKyNkZWZpbmUgTUlQU19DUFVfMzJGUFIJCTB4MDAwMDAwMjAgLyogMzIgZGJsLiBwcmVjLiBGUCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgTUlQU19DUFVfQ09VTlRFUgkweDAwMDAwMDQwIC8qIEN5Y2xlIGNvdW50L2NvbXBhcmUgKi8KKyNkZWZpbmUgTUlQU19DUFVfV0FUQ0gJCTB4MDAwMDAwODAgLyogd2F0Y2hwb2ludCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgTUlQU19DUFVfTUlQUzE2CQkweDAwMDAwMTAwIC8qIGNvZGUgY29tcHJlc3Npb24gKi8KKyNkZWZpbmUgTUlQU19DUFVfRElWRUMJCTB4MDAwMDAyMDAgLyogZGVkaWNhdGVkIGludGVycnVwdCB2ZWN0b3IgKi8KKyNkZWZpbmUgTUlQU19DUFVfVkNFCQkweDAwMDAwNDAwIC8qIHZpcnQuIGNvaGVyZW5jZSBjb25mbGljdCBwb3NzaWJsZSAqLworI2RlZmluZSBNSVBTX0NQVV9DQUNIRV9DREVYX1AJMHgwMDAwMDgwMCAvKiBDcmVhdGVfRGlydHlfRXhjbHVzaXZlIENBQ0hFIG9wICovCisjZGVmaW5lIE1JUFNfQ1BVX0NBQ0hFX0NERVhfUwkweDAwMDAxMDAwIC8qIC4uLiBzYW1lIGZvciBzZWNvbmFyeSBjYWNoZSAuLi4gKi8KKyNkZWZpbmUgTUlQU19DUFVfTUNIRUNLCQkweDAwMDAyMDAwIC8qIE1hY2hpbmUgY2hlY2sgZXhjZXB0aW9uICovCisjZGVmaW5lIE1JUFNfQ1BVX0VKVEFHCQkweDAwMDA0MDAwIC8qIEVKVEFHIGV4Y2VwdGlvbiAqLworI2RlZmluZSBNSVBTX0NQVV9OT0ZQVUVYCTB4MDAwMDgwMDAgLyogbm8gRlBVIGV4Y2VwdGlvbiAqLworI2RlZmluZSBNSVBTX0NQVV9MTFNDCQkweDAwMDEwMDAwIC8qIENQVSBoYXMgbGwvc2MgaW5zdHJ1Y3Rpb25zICovCisjZGVmaW5lIE1JUFNfQ1BVX1NVQlNFVF9DQUNIRVMJMHgwMDAyMDAwMCAvKiBQLWNhY2hlIHN1YnNldCBlbmZvcmNlZCAqLworI2RlZmluZSBNSVBTX0NQVV9QUkVGRVRDSAkweDAwMDQwMDAwIC8qIENQVSBoYXMgdXNhYmxlIHByZWZldGNoICovCisKKyNlbmRpZiAvKiBfQVNNX0NQVV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2NwdXRpbWUuaCBiL2luY2x1ZGUvYXNtLW1pcHMvY3B1dGltZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwMGVhY2IKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2NwdXRpbWUuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19NSVBTX0NQVVRJTUVfSAorI2RlZmluZSBfX01JUFNfQ1BVVElNRV9ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9jcHV0aW1lLmg+CisKKyNlbmRpZiAvKiBfX01JUFNfQ1BVVElNRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2N1cnJlbnQuaCBiL2luY2x1ZGUvYXNtLW1pcHMvY3VycmVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1OWRiNjYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2N1cnJlbnQuaApAQCAtMCwwICsxLDIzIEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4LCAyMDAyIFJhbGYgQmFlY2hsZQorICogQ29weXJpZ2h0IChDKSAxOTk5IFNpbGljb24gR3JhcGhpY3MsIEluYy4KKyAqLworI2lmbmRlZiBfQVNNX0NVUlJFTlRfSAorI2RlZmluZSBfQVNNX0NVUlJFTlRfSAorCisjaW5jbHVkZSA8bGludXgvdGhyZWFkX2luZm8uaD4KKworc3RydWN0IHRhc2tfc3RydWN0OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqIGdldF9jdXJyZW50KHZvaWQpCit7CisJcmV0dXJuIGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+dGFzazsKK30KKworI2RlZmluZSBjdXJyZW50CQlnZXRfY3VycmVudCgpCisKKyNlbmRpZiAvKiBfQVNNX0NVUlJFTlRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9kZGI1MDc0LmggYi9pbmNsdWRlL2FzbS1taXBzL2RkYjUwNzQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDA5YWMyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9kZGI1MDc0LmgKQEAgLTAsMCArMSwxMSBAQAorLyoKKyAqICBpbmNsdWRlL2FzbS1taXBzL2RkYjUwNzQuaCAtLSBORUMgRERCIFZyYy01MDc0IGRlZmluaXRpb25zCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMCBHZWVydCBVeXR0ZXJob2V2ZW4gPGdlZXJ0QHNvbnljb20uY29tPgorICogICAgICAgICAgICAgICAgICAgICBTb255IFNvZnR3YXJlIERldmVsb3BtZW50IENlbnRlciBFdXJvcGUgKFNEQ0UpLCBCcnVzc2VscworICovCisKK2V4dGVybiB2b2lkIGRkYjUwNzRfbGVkX2hleChpbnQgaGV4KTsKK2V4dGVybiB2b2lkIGRkYjUwNzRfbGVkX2QyKGludCBvbik7CitleHRlcm4gdm9pZCBkZGI1MDc0X2xlZF9kMyhpbnQgb24pOworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2RkYjV4eHgvZGRiNTA3NC5oIGIvaW5jbHVkZS9hc20tbWlwcy9kZGI1eHh4L2RkYjUwNzQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGQ4ODMwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9kZGI1eHh4L2RkYjUwNzQuaApAQCAtMCwwICsxLDM4IEBACisvKgorICogIGluY2x1ZGUvYXNtLW1pcHMvZGRiNTA3NC5oIC0tIE5FQyBEREIgVnJjLTUwNzQgZGVmaW5pdGlvbnMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwIEdlZXJ0IFV5dHRlcmhvZXZlbiA8Z2VlcnRAc29ueWNvbS5jb20+CisgKiAgICAgICAgICAgICAgICAgICAgIFNvbnkgU29mdHdhcmUgRGV2ZWxvcG1lbnQgQ2VudGVyIEV1cm9wZSAoU0RDRSksIEJydXNzZWxzCisgKi8KKworI2lmbmRlZiBfQVNNX0REQjVYWFhfRERCNTA3NF9ICisjZGVmaW5lIF9BU01fRERCNVhYWF9EREI1MDc0X0gKKworI2luY2x1ZGUgPGFzbS9uaWxlNC5oPgorCisjZGVmaW5lIEREQl9TRFJBTV9TSVpFICAgICAgMHgwNDAwMDAwMCAgICAgIC8qIDY0TUIgKi8KKworI2RlZmluZSBEREJfUENJX0lPX0JBU0UgICAgIDB4MDYwMDAwMDAKKyNkZWZpbmUgRERCX1BDSV9JT19TSVpFICAgICAweDAyMDAwMDAwICAgICAgLyogMzIgTUIgKi8KKworI2RlZmluZSBEREJfUENJX01FTV9CQVNFICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgRERCX1BDSV9NRU1fU0laRSAgICAweDA4MDAwMDAwICAvKiAxMjggTUIgKi8KKworI2RlZmluZSBEREJfUENJX0NPTkZJR19CQVNFIEREQl9QQ0lfTUVNX0JBU0UKKyNkZWZpbmUgRERCX1BDSV9DT05GSUdfU0laRSBEREJfUENJX01FTV9TSVpFCisKKyNkZWZpbmUgTklMRTRfUENJX0lPX0JBU0UgICAweGE2MDAwMDAwCisjZGVmaW5lIE5JTEU0X1BDSV9NRU1fQkFTRSAgMHhhODAwMDAwMAorI2RlZmluZSBOSUxFNF9QQ0lfQ0ZHX0JBU0UgIE5JTEU0X1BDSV9NRU1fQkFTRQorI2RlZmluZSBEREJfUENJX0lBQ0tfQkFTRSBOSUxFNF9QQ0lfSU9fQkFTRQorCisjZGVmaW5lIE5JTEU0X0lSUV9CQVNFIE5VTV9JODI1OV9JTlRFUlJVUFRTCisjZGVmaW5lIENQVV9JUlFfQkFTRSAoTlVNX05JTEU0X0lOVEVSUlVQVFMgKyBOSUxFNF9JUlFfQkFTRSkKKyNkZWZpbmUgQ1BVX05JTEU0X0NBU0NBREUgMgorCitleHRlcm4gdm9pZCBkZGI1MDc0X2xlZF9oZXgoaW50IGhleCk7CitleHRlcm4gdm9pZCBkZGI1MDc0X2xlZF9kMihpbnQgb24pOworZXh0ZXJuIHZvaWQgZGRiNTA3NF9sZWRfZDMoaW50IG9uKTsKKworZXh0ZXJuIHZvaWQgbmlsZTRfaXJxX3NldHVwKHUzMiBiYXNlKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9kZGI1eHh4L2RkYjU0NzYuaCBiL2luY2x1ZGUvYXNtLW1pcHMvZGRiNXh4eC9kZGI1NDc2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGMyMzM5MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvZGRiNXh4eC9kZGI1NDc2LmgKQEAgLTAsMCArMSwxNTcgQEAKKy8qCisgKiBoZWFkZXIgZmlsZSBzcGVjaWZpYyBmb3IgZGRiNTQ3NgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMSBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KKyAqIEF1dGhvcjogSnVuIFN1biwganN1bkBtdmlzdGEuY29tIG9yIGpzdW5AanVuc3VuLm5ldAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKy8qCisgKiAgTWVtb3J5IG1hcCAocGh5c2ljYWwgYWRkcmVzcykKKyAqCisgKiAgTm90ZSBtb3N0IG9mIHRoZSBmb2xsb3dpbmcgYWRkcmVzcyBtdXN0IGJlIHByb3Blcmx5IGFsaWduZWQgYnkgdGhlCisgKiAgY29ycmVzcG9uZGluZyBzaXplLiAgRm9yIGV4YW1wbGUsIGlmIFBDSV9JT19TSVpFIGlzIDE2TUIsIHRoZW4KKyAqICBQQ0lfSU9fQkFTRSBtdXN0IGJlIGFsaWduZWQgYWxvbmcgMTZNQiBib3VuZGFyeS4KKyAqLworI2RlZmluZSBEREJfU0RSQU1fQkFTRQkJMHgwMDAwMDAwMAorI2RlZmluZSBEREJfU0RSQU1fU0laRQkJMHgwNDAwMDAwMCAgICAgIC8qIDY0TUIgKi8KKworI2RlZmluZQlEREJfRENTM19CQVNFCQkweDA0MDAwMDAwCS8qIGZsYXNoIDEgKi8KKyNkZWZpbmUJRERCX0RDUzNfU0laRQkJMHgwMTAwMDAwMAkvKiAxNk1CICovCisKKyNkZWZpbmUJRERCX0RDUzJfQkFTRQkJMHgwNTAwMDAwMAkvKiBmbGFzaCAyICovCisjZGVmaW5lCUREQl9EQ1MyX1NJWkUJCTB4MDEwMDAwMDAJLyogMTZNQiAqLworCisjZGVmaW5lIEREQl9QQ0lfSU9fQkFTRQkJMHgwNjAwMDAwMAorI2RlZmluZSBEREJfUENJX0lPX1NJWkUJCTB4MDIwMDAwMDAgICAgICAvKiAzMiBNQiAqLworCisjZGVmaW5lCUREQl9QQ0lfTUVNX0JBU0UJMHgwODAwMDAwMAorI2RlZmluZQlEREJfUENJX01FTV9TSVpFCTB4MDgwMDAwMDAJLyogMTI4IE1CICovCisKKyNkZWZpbmUJRERCX0RDUzVfQkFTRQkJMHgxMzAwMDAwMAkvKiBEREIgc3RhdHVzIHJlZ3MgKi8KKyNkZWZpbmUJRERCX0RDUzVfU0laRQkJMHgwMDIwMDAwMAkvKiAyTUIsIDgtYml0ICovCisKKyNkZWZpbmUJRERCX0RDUzRfQkFTRQkJMHgxNDAwMDAwMAkvKiBEREIgY29udHJvbCByZWdzICovCisjZGVmaW5lCUREQl9EQ1M0X1NJWkUJCTB4MDAyMDAwMDAJLyogMk1CLCA4LWJpdCAqLworCisjZGVmaW5lIEREQl9JTlRDU19CQVNFCQkweDFmYTAwMDAwICAgICAgLyogVlJDNTQ3NiBjb250cm9sIHJlZ3MgKi8KKyNkZWZpbmUgRERCX0lOVENTX1NJWkUJCTB4MDAyMDAwMDAgICAgICAvKiAyTUIgKi8KKworI2RlZmluZSBEREJfQk9PVENTX0JBU0UgICAgICAgICAweDFmYzAwMDAwICAgICAgLyogQm9vdCBST00gLyBFUFJPTSAvRmxhc2ggKi8KKyNkZWZpbmUgRERCX0JPT1RDU19TSVpFICAgICAgICAgMHgwMDIwMDAwMCAgICAgIC8qIDIgTUIgLSBkb2Mgc2F5cyA0TUIgKi8KKworCisvKiBhbGlhc2VzICovCisjZGVmaW5lCUREQl9QQ0lfQ09ORklHX0JBU0UJRERCX1BDSV9NRU1fQkFTRQorI2RlZmluZQlEREJfUENJX0NPTkZJR19TSVpFCUREQl9QQ0lfTUVNX1NJWkUKKworLyogUENJIGludHIgYWNrIHNoYXJlIFBDSVcwIHdpdGggUENJIElPICovCisjZGVmaW5lCUREQl9QQ0lfSUFDS19CQVNFCUREQl9QQ0lfSU9fQkFTRQorCisvKgorICogSW50ZXJydXB0IG1hcHBpbmcKKyAqCisgKiBXZSBoYXZlIHRocmVlIGludGVycnVwdCBjb250cm9sbGVyczoKKyAqCisgKiAgIC4gQ1BVIGl0c2VsZiAtIDggc291cmNlcworICogICAuIGk4MjU5IC0gMTYgc291cmNlcworICogICAuIHZyYzU0NzYgLSAxNiBzb3VyY2VzCisgKgorICogIFRoZXkgY29ubmVjdGVkIGFzIGZvbGxvd3M6CisgKiAgICBhbGwgdnJjNTQ3NiBpbnRlcnJ1cHRzIGFyZSByb3V0ZWQgdG8gY3B1IElQMiAoYnkgc29mdHdhcmUgc2V0dGluZykKKyAqICAgIGFsbCBpMjg2OSBhcmUgcm91dGVkIHRvIElOVEMgaW4gdnJjNTQ3NiAoYnkgaGFyZHdhcmUgY29ubmVjdGlvbikKKyAqCisgKiAgQWxsIFZSQzU0NzYgUENJIGludGVycnVwdHMgYXJlIGxldmVsLXRyaWdnZXJlZCAobm8gYWNrIG5lZWRlZCkuCisgKiAgQWxsIFBDSSBpcnEgYnV0IElOVEMgYXJlIGFjdGl2ZSBsb3cuCisgKi8KKworLyoKKyAqIGlycSBudW1iZXIgYmxvY2sgYXNzaWdubWVudAorICovCisKKyNkZWZpbmUJTlVNX0NQVV9JUlEJCTgKKyNkZWZpbmUJTlVNX0k4MjU5X0lSUQkJMTYKKyNkZWZpbmUJTlVNX1ZSQzU0NzZfSVJRCQkxNgorCisjZGVmaW5lCUREQl9JUlFfQkFTRQkJMAorCisjZGVmaW5lCUk4MjU5X0lSUV9CQVNFCQlEREJfSVJRX0JBU0UKKyNkZWZpbmUJVlJDNTQ3Nl9JUlFfQkFTRQkoSTgyNTlfSVJRX0JBU0UgKyBOVU1fSTgyNTlfSVJRKQorI2RlZmluZQlDUFVfSVJRX0JBU0UJCShWUkM1NDc2X0lSUV9CQVNFICsgTlVNX1ZSQzU0NzZfSVJRKQorCisvKgorICogdnJjNTQ3NiBpcnEgZGVmcywgc2VlIHBhZ2UgNTItNjQgb2YgVnJjNTA3NCBzeXN0ZW0gY29udHJvbGxlciBtYW51YWwKKyAqLworCisjZGVmaW5lIFZSQzU0NzZfSVJRX0NQQ0UJMAkvKiBjcHUgcGFyaXR5IGVycm9yICovCisjZGVmaW5lIFZSQzU0NzZfSVJRX0NOVEQJMQkvKiBjcHUgbm8gdGFyZ2V0ICovCisjZGVmaW5lIFZSQzU0NzZfSVJRX01DRQkJMgkvKiBtZW1vcnkgY2hlY2sgZXJyb3IgKi8KKyNkZWZpbmUgVlJDNTQ3Nl9JUlFfRE1BCQkzCS8qIERNQSAqLworI2RlZmluZSBWUkM1NDc2X0lSUV9VQVJUCTQJLyogdnJjNTQ3NiBidWlsdGluIFVBUlQsIG5vdCB1c2VkICovCisjZGVmaW5lIFZSQzU0NzZfSVJRX1dET0cJNQkvKiB3YXRjaGRvZyB0aW1lciAqLworI2RlZmluZSBWUkM1NDc2X0lSUV9HUFQJCTYJLyogZ2VuZXJhbCBwdXJwb3NlIHRpbWVyICovCisjZGVmaW5lIFZSQzU0NzZfSVJRX0xCUlQJNwkvKiBsb2NhbCBidXMgcmVhZCB0aW1lb3V0ICovCisjZGVmaW5lIFZSQzU0NzZfSVJRX0lOVEEJOAkvKiBQQ0kgSU5UICNBICovCisjZGVmaW5lIFZSQzU0NzZfSVJRX0lOVEIJOQkvKiBQQ0kgSU5UICNCICovCisjZGVmaW5lIFZSQzU0NzZfSVJRX0lOVEMJMTAJLyogUENJIElOVCAjQyAqLworI2RlZmluZSBWUkM1NDc2X0lSUV9JTlRECTExCS8qIFBDSSBJTlQgI0QgKi8KKyNkZWZpbmUgVlJDNTQ3Nl9JUlFfSU5URQkxMgkvKiBQQ0kgSU5UICNFICovCisjZGVmaW5lIFZSQzU0NzZfSVJRX1JFU0VSVkVEXzEzCTEzCS8qIHJlc2VydmVkICAqLworI2RlZmluZSBWUkM1NDc2X0lSUV9QQ0lTCTE0CS8qIFBDSSBTRVJSICMgICovCisjZGVmaW5lIFZSQzU0NzZfSVJRX1BDSQkJMTUJLyogUENJIGludGVybmFsIGVycm9yICovCisKKy8qCisgKiBpMjg1OSBpcnEgYXNzaWdubWVudAorICovCisjZGVmaW5lIEk4MjU5X0lSUV9SRVNFUlZFRF8wCTAKKyNkZWZpbmUgSTgyNTlfSVJRX0tFWUJPQVJECTEJLyogTTE1NDMgZGVmYXVsdCAqLworI2RlZmluZSBJODI1OV9JUlFfQ0FTQ0FERQkyCisjZGVmaW5lIEk4MjU5X0lSUV9VQVJUX0IJMwkvKiBNMTU0MyBkZWZhdWx0LCBtYXkgY29uZmxpY3Qgd2l0aCBSVEMgYWNjb3JkaW5nIHRvIHNjaGVtYXRpYyBkaWFncmFtICAqLworI2RlZmluZSBJODI1OV9JUlFfVUFSVF9BCTQJLyogTTE1NDMgZGVmYXVsdCAqLworI2RlZmluZSBJODI1OV9JUlFfUEFSQUxMRUwJNQkvKiBNMTU0MyBkZWZhdWx0ICovCisjZGVmaW5lIEk4MjU5X0lSUV9SRVNFUlZFRF82CTYKKyNkZWZpbmUgSTgyNTlfSVJRX1JFU0VSVkVEXzcJNworI2RlZmluZSBJODI1OV9JUlFfUlRDCQk4CS8qIHdobyBzZXQgdGhpcz8gKi8KKyNkZWZpbmUgSTgyNTlfSVJRX1VTQgkJOQkvKiBkZGJfc2V0dXAgKi8KKyNkZWZpbmUgSTgyNTlfSVJRX1BNVQkJMTAJLyogZGRiX3NldHVwICovCisjZGVmaW5lIEk4MjU5X0lSUV9SRVNFUlZFRF8xMQkxMQorI2RlZmluZSBJODI1OV9JUlFfUkVTRVJWRURfMTIJMTIJLyogbTE1NDNfaXJxX3NldHVwICovCisjZGVmaW5lIEk4MjU5X0lSUV9SRVNFUlZFRF8xMwkxMworI2RlZmluZSBJODI1OV9JUlFfSERDMQkJMTQJLyogZGVmYXVsdCBhbmQgZGRiX3NldHVwICovCisjZGVmaW5lIEk4MjU5X0lSUV9IREMyCQkxNQkvKiBkZWZhdWx0ICovCisKKworLyoKKyAqIG1pc2MKKyAqLworI2RlZmluZQlWUkM1NDc2X0k4MjU5X0NBU0NBREUJVlJDNTQ3Nl9JUlFfSU5UQworI2RlZmluZQlDUFVfVlJDNTQ3Nl9DQVNDQURFCTIKKworI2RlZmluZSBpc19pODI1OV9pcnEoaXJxKSAgICAgICAoKGlycSkgPCBOVU1fSTgyNTlfSVJRKQorI2RlZmluZSBuaWxlNF90b19pcnEobikgICAgICAgICAoKG4pK05VTV9JODI1OV9JUlEpCisjZGVmaW5lIGlycV90b19uaWxlNChuKSAgICAgICAgICgobiktTlVNX0k4MjU5X0lSUSkKKworLyoKKyAqIGxvdy1sZXZlbCBpcnEgZnVuY3Rpb25zCisgKi8KKyNpZm5kZWYgX19BU1NFTUJMWV9fCitleHRlcm4gdm9pZCBuaWxlNF9tYXBfaXJxKGludCBuaWxlNF9pcnEsIGludCBjcHVfaXJxKTsKK2V4dGVybiB2b2lkIG5pbGU0X21hcF9pcnFfYWxsKGludCBjcHVfaXJxKTsKK2V4dGVybiB2b2lkIG5pbGU0X2VuYWJsZV9pcnEoaW50IG5pbGU0X2lycSk7CitleHRlcm4gdm9pZCBuaWxlNF9kaXNhYmxlX2lycShpbnQgbmlsZTRfaXJxKTsKK2V4dGVybiB2b2lkIG5pbGU0X2Rpc2FibGVfaXJxX2FsbCh2b2lkKTsKK2V4dGVybiB1MTYgbmlsZTRfZ2V0X2lycV9zdGF0KGludCBjcHVfaXJxKTsKK2V4dGVybiB2b2lkIG5pbGU0X2VuYWJsZV9pcnFfb3V0cHV0KGludCBjcHVfaXJxKTsKK2V4dGVybiB2b2lkIG5pbGU0X2Rpc2FibGVfaXJxX291dHB1dChpbnQgY3B1X2lycSk7CitleHRlcm4gdm9pZCBuaWxlNF9zZXRfcGNpX2lycV9wb2xhcml0eShpbnQgcGNpX2lycSwgaW50IGhpZ2gpOworZXh0ZXJuIHZvaWQgbmlsZTRfc2V0X3BjaV9pcnFfbGV2ZWxfb3JfZWRnZShpbnQgcGNpX2lycSwgaW50IGxldmVsKTsKK2V4dGVybiB2b2lkIG5pbGU0X2NsZWFyX2lycShpbnQgbmlsZTRfaXJxKTsKK2V4dGVybiB2b2lkIG5pbGU0X2NsZWFyX2lycV9tYXNrKHUzMiBtYXNrKTsKK2V4dGVybiB1OCBuaWxlNF9pODI1OV9pYWNrKHZvaWQpOworZXh0ZXJuIHZvaWQgbmlsZTRfZHVtcF9pcnFfc3RhdHVzKHZvaWQpOyAgICAgICAgLyogRGVidWcgKi8KKyNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2RkYjV4eHgvZGRiNTQ3Ny5oIGIvaW5jbHVkZS9hc20tbWlwcy9kZGI1eHh4L2RkYjU0NzcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTNlMmEzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9kZGI1eHh4L2RkYjU0NzcuaApAQCAtMCwwICsxLDM0NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0IDIwMDEgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCisgKiBBdXRob3I6IGpzdW5AbXZpc3RhLmNvbSBvciBqc3VuQGp1bnN1bi5uZXQKKyAqCisgKiBpbmNsdWRlL2FzbS1taXBzL2RkYjV4eHgvZGRiNTQ3Ny5oCisgKiAgICAgRERCIDU0Nzcgc3BlY2lmaWMgZGVmaW5pdGlvbnMgYW5kIG1hY3Jvcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKyNpZm5kZWYgX19BU01fRERCNVhYWF9EREI1NDc3X0gKKyNkZWZpbmUgX19BU01fRERCNVhYWF9EREI1NDc3X0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisvKgorICogVGhpcyBjb250YWlucyBtYWNyb3MgdGhhdCBhcmUgc3BlY2lmaWMgdG8gRERCNTQ3NyBvciByZW5hbWVkIGZyb20KKyAqIEREQjU0NzYuCisgKi8KKworLyoKKyAqIHJlbmFtZWQgUEFEUnMKKyAqLworI2RlZmluZQlEREJfTENTMAlEREJfRENTMgorI2RlZmluZQlEREJfTENTMQlEREJfRENTMworI2RlZmluZQlEREJfTENTMglEREJfRENTNAorI2RlZmluZQlEREJfVlJDNTQ3NwlEREJfSU5UQ1MKKworLyoKKyAqIE5ldyBDUFUgaW50ZXJmYWNlIHJlZ2lzdGVycworICovCisjZGVmaW5lCUREQl9JTlRDVFJMMAkweDA0MDAJLyogSW50ZXJydXB0IENvbnRyb2wgMCAqLworI2RlZmluZQlEREJfSU5UQ1RSTDEJMHgwNDA0CS8qIEludGVycnVwdCBDb250cm9sIDEgKi8KKyNkZWZpbmUJRERCX0lOVENUUkwyCTB4MDQwOAkvKiBJbnRlcnJ1cHQgQ29udHJvbCAyICovCisjZGVmaW5lCUREQl9JTlRDVFJMMwkweDA0MGMJLyogSW50ZXJydXB0IENvbnRyb2wgMyAqLworCisjZGVmaW5lCUREQl9JTlQwU1RBVAkweDA0MjAgCS8qIElOVDAgU3RhdHVzIFtSXSAqLworI2RlZmluZQlEREJfSU5UMVNUQVQJMHgwNDI4IAkvKiBJTlQxIFN0YXR1cyBbUl0gKi8KKyNkZWZpbmUJRERCX0lOVDJTVEFUCTB4MDQzMCAJLyogSU5UMiBTdGF0dXMgW1JdICovCisjZGVmaW5lCUREQl9JTlQzU1RBVAkweDA0MzggCS8qIElOVDMgU3RhdHVzIFtSXSAqLworI2RlZmluZQlEREJfSU5UNFNUQVQJMHgwNDQwIAkvKiBJTlQ0IFN0YXR1cyBbUl0gKi8KKyNkZWZpbmUJRERCX05NSVNUQVQJMHgwNDUwCS8qIE5NSSBTdGF0dXMgW1JdICovCisKKyNkZWZpbmUJRERCX0lOVENMUjMyCTB4MDQ2OAkvKiBJbnRlcnJ1cHQgQ2xlYXIgKi8KKworI2RlZmluZQlEREJfSU5UUFBFUzAJMHgwNDcwCS8qIFBDSTAgSW50ZXJydXB0IENvbnRyb2wgKi8KKyNkZWZpbmUJRERCX0lOVFBQRVMxCTB4MDQ3OAkvKiBQQ0kxIEludGVycnVwdCBDb250cm9sICovCisKKyN1bmRlZiAgRERCX0NQVVNUQVQJCS8qIGR1cGxpY2F0ZSBpbiBWcmMtNTQ3NyAqLworI2RlZmluZQlEREJfQ1BVU1RBVAkweDA0ODAJLyogQ1BVIFN0YXR1cyBbUl0gKi8KKyNkZWZpbmUJRERCX0JVU0NUUkwJMHgwNDg4CS8qIEludGVybmFsIEJ1cyBDb250cm9sICovCisKKworLyoKKyAqIFRpbWVyIHJlZ2lzdGVycworICovCisjZGVmaW5lCUREQl9SRUZDVFJMX0wJRERCX1QwQ1RSTAorI2RlZmluZQlEREJfUkVGQ1RSTF9ICShEREJfVDBDVFJMKzQpCisjZGVmaW5lCUREQl9SRUZDTlRSCUREQl9UMENOVFIKKyNkZWZpbmUJRERCX1NQVDBDVFJMX0wJRERCX1QxQ1RSTAorI2RlZmluZQlEREJfU1BUMENUUkxfSAkoRERCX1QxQ1RSTCs0KQorI2RlZmluZQlEREJfU1BUMUNUUkxfTAlEREJfVDJDVFJMCisjZGVmaW5lCUREQl9TUFQxQ1RSTF9ICShEREJfVDJDVFJMKzQpCisjZGVmaW5lIEREQl9TUFQxQ05UUglEREJfVDFDVFJMCisjZGVmaW5lCUREQl9XRFRDVFJMX0wJRERCX1QzQ1RSTAorI2RlZmluZQlEREJfV0RUQ1RSTF9ICShEREJfVDNDVFJMKzQpCisjZGVmaW5lCUREQl9XRFRDTlRSCUREQl9UM0NOVFIKKworLyoKKyAqIERNQSByZWdpc3RlcnMgYXJlIG1vdmVkLiAgV2UgZG9uJ3QgY2FyZSBhYm91dCBpdCBmb3Igbm93LiBUT0RPLgorICovCisKKy8qCisgKiBCQVJzIGZvciBleHQgUENJIChQQ0kwKQorICovCisjdW5kZWYJRERCX0JBUkMKKyN1bmRlZglEREJfQkFSQgorCisjZGVmaW5lIEREQl9CQVJDMAkweDAyMTAJLyogUENJMCBDb250cm9sICovCisjZGVmaW5lIEREQl9CQVJNMDEwCTB4MDIxOAkvKiBQQ0kwIFNEUkFNIGJhbmswMSAqLworI2RlZmluZQlEREJfQkFSTTIzMAkweDAyMjAJLyogUENJMCBTRFJBTSBiYW5rMjMgKi8KKyNkZWZpbmUJRERCX0JBUjAwCTB4MDI0MAkvKiBQQ0kwIExEQ1MwICovCisjZGVmaW5lCUREQl9CQVIxMAkweDAyNDgJLyogUENJMCBMRENTMSAqLworI2RlZmluZQlEREJfQkFSMjAJMHgwMjUwCS8qIFBDSTAgTERDUzIgKi8KKyNkZWZpbmUJRERCX0JBUjMwCTB4MDI1OAkvKiBQQ0kwIExEQ1MzICovCisjZGVmaW5lCUREQl9CQVI0MAkweDAyNjAJLyogUENJMCBMRENTNCAqLworI2RlZmluZQlEREJfQkFSNTAJMHgwMjY4CS8qIFBDSTAgTERDUzUgKi8KKyNkZWZpbmUJRERCX0JBUkIwCTB4MDI4MAkvKiBQQ0kwIEJPT1QgKi8KKyNkZWZpbmUJRERCX0JBUlAwMAkweDAyOTAJLyogUENJMCBmb3IgSU9QQ0kgV2luZG93MCAqLworI2RlZmluZQlEREJfQkFSUDEwCTB4MDI5OAkvKiBQQ0kwIGZvciBJT1BDSSBXaW5kb3cxICovCisKKy8qCisgKiBCQVJzIGZvciBJT1BJQyAoUENJMSkKKyAqLworI2RlZmluZSBEREJfQkFSQzEJMHgwNjEwCS8qIFBDSTEgQ29udHJvbCAqLworI2RlZmluZSBEREJfQkFSTTAxMQkweDA2MTgJLyogUENJMSBTRFJBTSBiYW5rMDEgKi8KKyNkZWZpbmUJRERCX0JBUk0yMzEJMHgwNjIwCS8qIFBDSTEgU0RSQU0gYmFuazIzICovCisjZGVmaW5lCUREQl9CQVIwMQkweDA2NDAJLyogUENJMSBMRENTMCAqLworI2RlZmluZQlEREJfQkFSMTEJMHgwNjQ4CS8qIFBDSTEgTERDUzEgKi8KKyNkZWZpbmUJRERCX0JBUjIxCTB4MDY1MAkvKiBQQ0kxIExEQ1MyICovCisjZGVmaW5lCUREQl9CQVIzMQkweDA2NTgJLyogUENJMSBMRENTMyAqLworI2RlZmluZQlEREJfQkFSNDEJMHgwNjYwCS8qIFBDSTEgTERDUzQgKi8KKyNkZWZpbmUJRERCX0JBUjUxCTB4MDY2OAkvKiBQQ0kxIExEQ1M1ICovCisjZGVmaW5lCUREQl9CQVJCMQkweDA2ODAJLyogUENJMSBCT09UICovCisjZGVmaW5lCUREQl9CQVJQMDEJMHgwNjkwCS8qIFBDSTEgZm9yIGV4dCBQQ0kgV2luZG93MCAqLworI2RlZmluZQlEREJfQkFSUDExCTB4MDY5OAkvKiBQQ0kxIGZvciBleHQgUENJIFdpbmRvdzEgKi8KKworLyoKKyAqIE90aGVyIHJlZ2lzdGVycyBmb3IgZXh0IFBDSSAoUENJMCkKKyAqLworI2RlZmluZQlEREJfUENJSU5JVDAwCTB4MDJmMAkvKiBQQ0kwIEluaXRpYXRvciAwICovCisjZGVmaW5lCUREQl9QQ0lJTklUMTAJMHgwMmY4CS8qIFBDSTAgSW5pdGlhdG9yIDEgKi8KKworI2RlZmluZQlEREJfUENJU1dQMAkweDAyYjAJLyogUENJMCBTd2FwICovCisjZGVmaW5lCUREQl9QQ0lFUlIwCTB4MDJiOAkvKiBQQ0kwIEVycm9yICovCisKKyNkZWZpbmUJRERCX1BDSUNUTDBfTAkweDAyZTAJLyogUENJMCBDb250cm9sLUwgKi8KKyNkZWZpbmUJRERCX1BDSUNUTDBfSAkweDAyZTQJLyogUENJMCBDb250cm9sLUggKi8KKyNkZWZpbmUJRERCX1BDSUFSQjBfTAkweDAyZTgJLyogUENJMCBBcmJpdHJhdGlvbi1MICovCisjZGVmaW5lCUREQl9QQ0lBUkIwX0gJMHgwMmVjCS8qIFBDSTAgQXJiaXRyYXRpb24tSCAqLworCisvKgorICogT3RoZXIgcmVnaXN0ZXJzIGZvciBJT1BDSSAoUENJMSkKKyAqLworI2RlZmluZSBEREJfSU9QQ0lXMAkweDAwZDAJLyogUENJIEFkZHJlc3MgV2luZG93IDAgW1IvV10gKi8KKyNkZWZpbmUgRERCX0lPUENJVzEJMHgwMGQ4CS8qIFBDSSBBZGRyZXNzIFdpbmRvdyAxIFtSL1ddICovCisKKyNkZWZpbmUJRERCX1BDSUlOSVQwMQkweDA2ZjAJLyogUENJMSBJbml0aWF0b3IgMCAqLworI2RlZmluZQlEREJfUENJSU5JVDExCTB4MDZmOAkvKiBQQ0kxIEluaXRpYXRvciAxICovCisKKyNkZWZpbmUJRERCX1BDSVNXUDEJMHgwNmIwCS8qIFBDSTEgU3dhcCAqLworI2RlZmluZQlEREJfUENJRVJSMQkweDA2YjgJLyogUENJMSBFcnJvciAqLworCisjZGVmaW5lCUREQl9QQ0lDVEwxX0wJMHgwNmUwCS8qIFBDSTEgQ29udHJvbC1MICovCisjZGVmaW5lCUREQl9QQ0lDVEwxX0gJMHgwNmU0CS8qIFBDSTEgQ29udHJvbC1IICovCisjZGVmaW5lCUREQl9QQ0lBUkIxX0wJMHgwNmU4CS8qIFBDSTEgQXJiaXRyYXRpb24tTCAqLworI2RlZmluZQlEREJfUENJQVJCMV9ICTB4MDZlYwkvKiBQQ0kxIEFyYml0cmF0aW9uLUggKi8KKworLyoKKyAqIExvY2FsIEJ1cworICovCisjZGVmaW5lIEREQl9MQ1NUMAkweDAxMTAgIC8qIExCIENoaXAgU2VsZWN0IFRpbWluZyAwICovCisjZGVmaW5lIEREQl9MQ1NUMQkweDAxMTggIC8qIExCIENoaXAgU2VsZWN0IFRpbWluZyAxICovCisjdW5kZWYgRERCX0xDU1QyCisjZGVmaW5lIEREQl9MQ1NUMgkweDAxMjAgIC8qIExCIENoaXAgU2VsZWN0IFRpbWluZyAyICovCisjdW5kZWYgRERCX0xDU1QzCisjdW5kZWYgRERCX0xDU1Q0CisjdW5kZWYgRERCX0xDU1Q1CisjdW5kZWYgRERCX0xDU1Q2CisjdW5kZWYgRERCX0xDU1Q3CisjdW5kZWYgRERCX0xDU1Q4CisjZGVmaW5lIEREQl9FUlJBRFIJMHgwMTUwICAvKiBFcnJvciBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lIEREQl9FUlJDUyAgICAgICAweDAxNjAKKyNkZWZpbmUgRERCX0JUTQkJMHgwMTcwICAvKiBCb290IFRpbWUgTW9kZSB2YWx1ZSAqLworCisvKgorICogTUlTQyByZWdpc3RlcnMKKyAqLworI2RlZmluZSBEREJfR0lVRlVOU0VMCTB4NDA0MCAgLyogc2VsZWN0IGR1YWwtZnVuYyBwaW5zICovCisjZGVmaW5lIEREQl9QSUJNSVNDCTB4MDc1MAkvKiBVU0IgYnVmZmVyIGVuYWJsZSAvIHBvd2VyIHNhdmluZyAqLworCisvKgorICogIE1lbW9yeSBtYXAgKHBoeXNpY2FsIGFkZHJlc3MpCisgKgorICogIE5vdGUgbW9zdCBvZiB0aGUgZm9sbG93aW5nIGFkZHJlc3MgbXVzdCBiZSBwcm9wZXJseSBhbGlnbmVkIGJ5IHRoZQorICogIGNvcnJlc3BvbmRpbmcgc2l6ZS4gIEZvciBleGFtcGxlLCBpZiBQQ0lfSU9fU0laRSBpcyAxNk1CLCB0aGVuCisgKiAgUENJX0lPX0JBU0UgbXVzdCBiZSBhbGlnbmVkIGFsb25nIDE2TUIgYm91bmRhcnkuCisgKi8KKworLyogdGhlIGFjdHVhbCByYW0gc2l6ZSBpcyBkZXRlY3RlZCBhdCBydW4tdGltZSAqLworI2RlZmluZQlEREJfU0RSQU1fQkFTRQkJMHgwMDAwMDAwMAorI2RlZmluZQlEREJfTUFYX1NEUkFNX1NJWkUJMHgwODAwMDAwMAkvKiBsZXNzIHRoYW4gMTI4TUIgKi8KKworI2RlZmluZQlEREJfUENJMF9NRU1fQkFTRQkweDA4MDAwMDAwCisjZGVmaW5lCUREQl9QQ0kwX01FTV9TSVpFCTB4MDgwMDAwMDAJLyogMTI4IE1CICovCisKKyNkZWZpbmUJRERCX1BDSTFfTUVNX0JBU0UJMHgxMDAwMDAwMAorI2RlZmluZQlEREJfUENJMV9NRU1fU0laRQkweDA4MDAwMDAwCS8qIDEyOCBNQiAqLworCisjZGVmaW5lCUREQl9QQ0kwX0NPTkZJR19CQVNFCTB4MTgwMDAwMDAKKyNkZWZpbmUJRERCX1BDSTBfQ09ORklHX1NJWkUJMHgwMTAwMDAwMAkvKiAxNiBNQiAqLworCisjZGVmaW5lCUREQl9QQ0kxX0NPTkZJR19CQVNFCTB4MTkwMDAwMDAKKyNkZWZpbmUJRERCX1BDSTFfQ09ORklHX1NJWkUJMHgwMTAwMDAwMAkvKiAxNiBNQiAqLworCisjZGVmaW5lCUREQl9QQ0lfSU9fQkFTRQkJMHgxYTAwMDAwMAkvKiB3ZSBjb25jYXRlbmF0ZSB0d28gSU9zICovCisjZGVmaW5lCUREQl9QQ0kwX0lPX0JBU0UJMHgxYTAwMDAwMAorI2RlZmluZQlEREJfUENJMF9JT19TSVpFCTB4MDEwMDAwMDAJLyogMTYgTUIgKi8KKyNkZWZpbmUJRERCX1BDSTFfSU9fQkFTRQkweDFiMDAwMDAwCisjZGVmaW5lCUREQl9QQ0kxX0lPX1NJWkUJMHgwMTAwMDAwMAkvKiAxNiBNQiAqLworCisjZGVmaW5lCUREQl9MQ1MwX0JBU0UJCTB4MWMwMDAwMDAJLyogZmxhc2ggbWVtb3J5ICovCisjZGVmaW5lCUREQl9MQ1MwX1NJWkUJCTB4MDEwMDAwMDAJLyogMTYgTUIgKi8KKworI2RlZmluZQlEREJfTENTMV9CQVNFCQkweDFkMDAwMDAwCS8qIG1pc2MgKi8KKyNkZWZpbmUJRERCX0xDUzFfU0laRQkJMHgwMTAwMDAwMAkvKiAxNiBNQiAqLworCisjZGVmaW5lCUREQl9MQ1MyX0JBU0UJCTB4MWUwMDAwMDAJLyogTWV6emFuaW5lICovCisjZGVmaW5lCUREQl9MQ1MyX1NJWkUJCTB4MDEwMDAwMDAJLyogMTYgTUIgKi8KKworI2RlZmluZQlEREJfVlJDNTQ3N19CQVNFCTB4MWZhMDAwMDAJLyogVlJDNTQ3NyBjb250cm9sIHJlZ3MgKi8KKyNkZWZpbmUJRERCX1ZSQzU0NzdfU0laRQkweDAwMjAwMDAwCS8qIDJNQiAqLworCisjZGVmaW5lCUREQl9CT09UQ1NfQkFTRQkJMHgxZmMwMDAwMAkvKiBCb290IFJPTSAvIEVQUk9NIC9GbGFzaCAqLworI2RlZmluZQlEREJfQk9PVENTX1NJWkUJCTB4MDAyMDAwMDAJLyogMiBNQiAtIGRvYyBzYXlzIDRNQiAqLworCisjZGVmaW5lCUREQl9MRUQJCQlEREJfTENTMV9CQVNFICsgMHgxMDAwMAorCisKKy8qCisgKiBEREI1NDc3IHNwZWNpZmljIGZ1bmN0aW9ucworICovCisjaWZuZGVmIF9fQVNTRU1CTFlfXworZXh0ZXJuIHZvaWQgZGRiNTQ3N19pcnFfc2V0dXAodm9pZCk7CisKKy8qIHJvdXRlIGlycSB0byBjcHUgaW50IHBpbiAqLworZXh0ZXJuIHZvaWQgbGxfdnJjNTQ3N19pcnFfcm91dGUoaW50IHZyYzU0NzdfaXJxLCBpbnQgaXApOworCisvKiBsb3ctbGV2ZWwgcm91dGluZSBmb3IgZW5hYmxpbmcgdnJjNTQ3NyBpcnEsIGJ5cGFzc2luZyBoaWdoLWxldmVsICovCitleHRlcm4gdm9pZCBsbF92cmM1NDc3X2lycV9lbmFibGUoaW50IHZyYzU0NzdfaXJxKTsKK2V4dGVybiB2b2lkIGxsX3ZyYzU0NzdfaXJxX2Rpc2FibGUoaW50IHZyYzU0NzdfaXJxKTsKKyNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCisKKy8qIFBDSSBpbnRyIGFjayBzaGFyZSBQQ0lXMCB3aXRoIFBDSSBJTyAqLworI2RlZmluZQlEREJfUENJX0lBQ0tfQkFTRQlEREJfUENJX0lPX0JBU0UKKworLyoKKyAqIEludGVycnVwdCBtYXBwaW5nCisgKgorICogV2UgaGF2ZSB0aHJlZSBpbnRlcnJ1cHQgY29udHJvbGxlcnM6CisgKgorICogICAuIENQVSBpdHNlbGYgLSA4IHNvdXJjZXMKKyAqICAgLiBpODI1OSAtIDE2IHNvdXJjZXMKKyAqICAgLiB2cmM1NDc3IC0gMzIgc291cmNlcworICoKKyAqICBUaGV5IGNvbm5lY3RlZCBhcyBmb2xsb3dzOgorICogICAgYWxsIHZyYzU0NzcgaW50ZXJydXB0cyBhcmUgcm91dGVkIHRvIGNwdSBJUDIgKGJ5IHNvZnR3YXJlIHNldHRpbmcpCisgKiAgICBhbGwgaTgzNTkgYXJlIHJvdXRlZCB0byBJTlRDIGluIHZyYzU0NzcgKGJ5IGhhcmR3YXJlIGNvbm5lY3Rpb24pCisgKgorICogIEFsbCBWUkM1NDc3IFBDSSBpbnRlcnJ1cHRzIGFyZSBsZXZlbC10cmlnZ2VyZWQgKG5vIGFjayBuZWVkZWQpLgorICogIEFsbCBQQ0kgaXJxIGJ1dCBJTlRDIGFyZSBhY3RpdmUgbG93LgorICovCisKKy8qIAorICogaXJxIG51bWJlciBibG9jayBhc3NpZ25tZW50CisgKi8KKworI2RlZmluZQlOVU1fQ1BVX0lSUQkJOAorI2RlZmluZQlOVU1fSTgyNTlfSVJRCQkxNgorI2RlZmluZQlOVU1fVlJDNTQ3N19JUlEJCTMyCisKKyNkZWZpbmUJRERCX0lSUV9CQVNFCQkwCisKKyNkZWZpbmUJSTgyNTlfSVJRX0JBU0UJCUREQl9JUlFfQkFTRQorI2RlZmluZQlWUkM1NDc3X0lSUV9CQVNFCShJODI1OV9JUlFfQkFTRSArIE5VTV9JODI1OV9JUlEpCisjZGVmaW5lCUNQVV9JUlFfQkFTRQkJKFZSQzU0NzdfSVJRX0JBU0UgKyBOVU1fVlJDNTQ3N19JUlEpCisKKy8qCisgKiB2cmM1NDc3IGlycSBkZWZzCisgKi8KKworI2RlZmluZSBWUkM1NDc3X0lSUV9DUENFCSgwICsgVlJDNTQ3N19JUlFfQkFTRSkJLyogY3B1IHBhcml0eSBlcnJvciAqLworI2RlZmluZSBWUkM1NDc3X0lSUV9DTlRECSgxICsgVlJDNTQ3N19JUlFfQkFTRSkJLyogY3B1IG5vIHRhcmdldCAqLworI2RlZmluZSBWUkM1NDc3X0lSUV9JMkMJCSgyICsgVlJDNTQ3N19JUlFfQkFTRSkJLyogSTJDICovCisjZGVmaW5lIFZSQzU0NzdfSVJRX0RNQQkJKDMgKyBWUkM1NDc3X0lSUV9CQVNFKQkvKiBETUEgKi8KKyNkZWZpbmUgVlJDNTQ3N19JUlFfVUFSVDAJKDQgKyBWUkM1NDc3X0lSUV9CQVNFKQorI2RlZmluZSBWUkM1NDc3X0lSUV9XRE9HCSg1ICsgVlJDNTQ3N19JUlFfQkFTRSkJLyogd2F0Y2hkb2cgdGltZXIgKi8KKyNkZWZpbmUgVlJDNTQ3N19JUlFfU1BUMQkoNiArIFZSQzU0NzdfSVJRX0JBU0UpICAgIC8qIHNwZWNpYWwgcHVycG9zZSB0aW1lciAxICovCisjZGVmaW5lIFZSQzU0NzdfSVJRX0xCUlQJKDcgKyBWUkM1NDc3X0lSUV9CQVNFKQkvKiBsb2NhbCBidXMgcmVhZCB0aW1lb3V0ICovCisjZGVmaW5lIFZSQzU0NzdfSVJRX0lOVEEJKDggKyBWUkM1NDc3X0lSUV9CQVNFKQkvKiBQQ0kgSU5UICNBICovCisjZGVmaW5lIFZSQzU0NzdfSVJRX0lOVEIJKDkgKyBWUkM1NDc3X0lSUV9CQVNFKQkvKiBQQ0kgSU5UICNCICovCisjZGVmaW5lIFZSQzU0NzdfSVJRX0lOVEMJKDEwICsgVlJDNTQ3N19JUlFfQkFTRSkJLyogUENJIElOVCAjQyAqLworI2RlZmluZSBWUkM1NDc3X0lSUV9JTlRECSgxMSArIFZSQzU0NzdfSVJRX0JBU0UpCS8qIFBDSSBJTlQgI0QgKi8KKyNkZWZpbmUgVlJDNTQ3N19JUlFfSU5URQkoMTIgKyBWUkM1NDc3X0lSUV9CQVNFKQkvKiBQQ0kgSU5UICNFICovCisjZGVmaW5lIFZSQzU0NzdfSVJRX1JFU0VSVkVEXzEzCSgxMyArIFZSQzU0NzdfSVJRX0JBU0UpCS8qIHJlc2VydmVkICAqLworI2RlZmluZSBWUkM1NDc3X0lSUV9QQ0lTCSgxNCArIFZSQzU0NzdfSVJRX0JBU0UpCS8qIFBDSSBTRVJSICMgICovCisjZGVmaW5lIFZSQzU0NzdfSVJRX1BDSQkJKDE1ICsgVlJDNTQ3N19JUlFfQkFTRSkJLyogUENJIGludGVybmFsIGVycm9yICovCisjZGVmaW5lIFZSQzU0NzdfSVJRX0lPUENJX0lOVEEJKDE2ICsgVlJDNTQ3N19JUlFfQkFTRSkgICAgICAvKiBVU0ItSCAqLworI2RlZmluZSBWUkM1NDc3X0lSUV9JT1BDSV9JTlRCCSgxNyArIFZSQzU0NzdfSVJRX0JBU0UpICAgICAgLyogVVNCLVAgKi8KKyNkZWZpbmUgVlJDNTQ3N19JUlFfSU9QQ0lfSU5UQwkoMTggKyBWUkM1NDc3X0lSUV9CQVNFKSAgICAgIC8qIEFDOTcgKi8KKyNkZWZpbmUgVlJDNTQ3N19JUlFfSU9QQ0lfSU5URAkoMTkgKyBWUkM1NDc3X0lSUV9CQVNFKSAgICAgIC8qIFJlc2VydmVkICovCisjZGVmaW5lIFZSQzU0NzdfSVJRX1VBUlQxCSgyMCArIFZSQzU0NzdfSVJRX0JBU0UpICAgICAKKyNkZWZpbmUgVlJDNTQ3N19JUlFfU1BUMAkoMjEgKyBWUkM1NDc3X0lSUV9CQVNFKSAgICAgIC8qIHNwZWNpYWwgcHVycG9zZSB0aW1lciAwICovCisjZGVmaW5lIFZSQzU0NzdfSVJRX0dQVDAJKDIyICsgVlJDNTQ3N19JUlFfQkFTRSkgICAgICAvKiBnZW5lcmFsIHB1cnBvc2UgdGltZXIgMCAqLworI2RlZmluZSBWUkM1NDc3X0lSUV9HUFQxCSgyMyArIFZSQzU0NzdfSVJRX0JBU0UpICAgICAgLyogZ2VuZXJhbCBwdXJwb3NlIHRpbWVyIDEgKi8KKyNkZWZpbmUgVlJDNTQ3N19JUlFfR1BUMgkoMjQgKyBWUkM1NDc3X0lSUV9CQVNFKSAgICAgIC8qIGdlbmVyYWwgcHVycG9zZSB0aW1lciAyICovCisjZGVmaW5lIFZSQzU0NzdfSVJRX0dQVDMJKDI1ICsgVlJDNTQ3N19JUlFfQkFTRSkgICAgICAvKiBnZW5lcmFsIHB1cnBvc2UgdGltZXIgMyAqLworI2RlZmluZSBWUkM1NDc3X0lSUV9HUElPCSgyNiArIFZSQzU0NzdfSVJRX0JBU0UpCisjZGVmaW5lIFZSQzU0NzdfSVJRX1NJTzAJKDI3ICsgVlJDNTQ3N19JUlFfQkFTRSkKKyNkZWZpbmUgVlJDNTQ3N19JUlFfU0lPMSAgICAgICAgKDI4ICsgVlJDNTQ3N19JUlFfQkFTRSkKKyNkZWZpbmUgVlJDNTQ3N19JUlFfUkVTRVJWRURfMjkgKDI5ICsgVlJDNTQ3N19JUlFfQkFTRSkgICAgICAvKiByZXNlcnZlZCAqLworI2RlZmluZSBWUkM1NDc3X0lSUV9JT1BDSVNFUlIJKDMwICsgVlJDNTQ3N19JUlFfQkFTRSkgICAgICAvKiBJTyBQQ0kgU0VSUiAjICovCisjZGVmaW5lIFZSQzU0NzdfSVJRX0lPUENJCSgzMSArIFZSQzU0NzdfSVJRX0JBU0UpCisKKy8qCisgKiBpMjg1OSBpcnEgYXNzaWdubWVudAorICovCisjZGVmaW5lIEk4MjU5X0lSUV9SRVNFUlZFRF8wCSgwICsgSTgyNTlfSVJRX0JBU0UpCQorI2RlZmluZSBJODI1OV9JUlFfS0VZQk9BUkQJKDEgKyBJODI1OV9JUlFfQkFTRSkJLyogTTE1NDMgZGVmYXVsdCAqLworI2RlZmluZSBJODI1OV9JUlFfQ0FTQ0FERQkoMiArIEk4MjU5X0lSUV9CQVNFKQorI2RlZmluZSBJODI1OV9JUlFfVUFSVF9CCSgzICsgSTgyNTlfSVJRX0JBU0UpCS8qIE0xNTQzIGRlZmF1bHQsIG1heSBjb25mbGljdCB3aXRoIFJUQyBhY2NvcmRpbmcgdG8gc2NoZW1hdGljIGRpYWdyYW0gICovCisjZGVmaW5lIEk4MjU5X0lSUV9VQVJUX0EJKDQgKyBJODI1OV9JUlFfQkFTRSkJLyogTTE1NDMgZGVmYXVsdCAqLworI2RlZmluZSBJODI1OV9JUlFfUEFSQUxMRUwJKDUgKyBJODI1OV9JUlFfQkFTRSkJLyogTTE1NDMgZGVmYXVsdCAqLworI2RlZmluZSBJODI1OV9JUlFfUkVTRVJWRURfNgkoNiArIEk4MjU5X0lSUV9CQVNFKQorI2RlZmluZSBJODI1OV9JUlFfUkVTRVJWRURfNwkoNyArIEk4MjU5X0lSUV9CQVNFKQorI2RlZmluZSBJODI1OV9JUlFfUlRDCQkoOCArIEk4MjU5X0lSUV9CQVNFKQkvKiB3aG8gc2V0IHRoaXM/ICovCisjZGVmaW5lIEk4MjU5X0lSUV9VU0IJCSg5ICsgSTgyNTlfSVJRX0JBU0UpCS8qIGRkYl9zZXR1cCAqLworI2RlZmluZSBJODI1OV9JUlFfUE1VCQkoMTAgKyBJODI1OV9JUlFfQkFTRSkJLyogZGRiX3NldHVwICovCisjZGVmaW5lIEk4MjU5X0lSUV9SRVNFUlZFRF8xMQkoMTEgKyBJODI1OV9JUlFfQkFTRSkKKyNkZWZpbmUgSTgyNTlfSVJRX1JFU0VSVkVEXzEyCSgxMiArIEk4MjU5X0lSUV9CQVNFKQkvKiBtMTU0M19pcnFfc2V0dXAgKi8KKyNkZWZpbmUgSTgyNTlfSVJRX1JFU0VSVkVEXzEzCSgxMyArIEk4MjU5X0lSUV9CQVNFKQorI2RlZmluZSBJODI1OV9JUlFfSERDMQkJKDE0ICsgSTgyNTlfSVJRX0JBU0UpCS8qIGRlZmF1bHQgYW5kIGRkYl9zZXR1cCAqLworI2RlZmluZSBJODI1OV9JUlFfSERDMgkJKDE1ICsgSTgyNTlfSVJRX0JBU0UpCS8qIGRlZmF1bHQgKi8KKworCisvKgorICogbWlzYworICovCisjZGVmaW5lCVZSQzU0NzdfSTgyNTlfQ0FTQ0FERQkoVlJDNTQ3N19JUlFfSU5UQyAtIFZSQzU0NzdfSVJRX0JBU0UpCisjZGVmaW5lCUNQVV9WUkM1NDc3X0NBU0NBREUJMgorCisvKgorICogZGVidWcgcm91dGluZXMKKyAqLworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNpZiBkZWZpbmVkKENPTkZJR19SVU5USU1FX0RFQlVHKQorZXh0ZXJuIHZvaWQgdnJjNTQ3N19zaG93X3BkYXJfcmVncyh2b2lkKTsKK2V4dGVybiB2b2lkIHZyYzU0Nzdfc2hvd19wY2lfcmVncyh2b2lkKTsKK2V4dGVybiB2b2lkIHZyYzU0Nzdfc2hvd19iYXJfcmVncyh2b2lkKTsKK2V4dGVybiB2b2lkIHZyYzU0Nzdfc2hvd19pbnRfcmVncyh2b2lkKTsKK2V4dGVybiB2b2lkIHZyYzU0Nzdfc2hvd19hbGxfcmVncyh2b2lkKTsKKyNlbmRpZgorCisvKgorICogUkFNIHNpemUKKyAqLworZXh0ZXJuIGludCBib2FyZF9yYW1fc2l6ZTsKKyNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiBfX0FTTV9EREI1WFhYX0REQjU0NzdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9kZGI1eHh4L2RkYjV4eHguaCBiL2luY2x1ZGUvYXNtLW1pcHMvZGRiNXh4eC9kZGI1eHh4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODczYzAzZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvZGRiNXh4eC9kZGI1eHh4LmgKQEAgLTAsMCArMSwyNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMSBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KKyAqIEF1dGhvcjoganN1bkBtdmlzdGEuY29tIG9yIGpzdW5AanVuc3VuLm5ldAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBHZWVydCBVeXR0ZXJob2V2ZW4gPGdlZXJ0QHNvbnljb20uY29tPgorICogICAgICAgICAgICAgICAgICAgIFNvbnkgU29mdHdhcmUgRGV2ZWxvcG1lbnQgQ2VudGVyIEV1cm9wZSAoU0RDRSksIEJydXNzZWxzCisgKgorICogaW5jbHVkZS9hc20tbWlwcy9kZGI1eHh4L2RkYjV4eHguaAorICogICAgIENvbW1vbiBoZWFkZXIgZm9yIGFsbCBORUMgRERCIDV4eHggYm9hcmRzLCBpbmNsdWRpbmcgNTA3NCwgNTQ3NiwgNTQ3Ny4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaWZuZGVmIF9fQVNNX0REQjVYWFhfRERCNVhYWF9ICisjZGVmaW5lIF9fQVNNX0REQjVYWFhfRERCNVhYWF9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKgorICogIFRoaXMgZmlsZSBpcyBiYXNlZCBvbiB0aGUgZm9sbG93aW5nIGRvY3VtZW50YXRpb246CisgKgorICoJTkVDIFZyYyA1MDc0IFN5c3RlbSBDb250cm9sbGVyIERhdGEgU2hlZXQsIEp1bmUgMTk5OAorICoKKyAqIFtqc3VuXSBJdCBpcyBtb2RpZmllZCBzbyB0aGF0IHRoaXMgZmlsZSBvbmx5IGNvbnRhaW5zIHRoZSBtYWNyb3MKKyAqIHRoYXQgYXJlIHRydWUgZm9yIGFsbCBEREIgNXh4eCBib2FyZHMuICBUaGUgbW9kaWZpY2F0aW9uIGlzIGJhc2VkIG9uCisgKgorICoJdVBEMzE1NzcoVlJDNTQ3NykgVlI1NDMyLVNEUkFNL1BDSSBCcmlkZ2UgKEx1a2UpCisgKglQcmVsaW1pbmFyeSBTcGVjaWZpY2F0aW9uIERlY29tZW50LCBSZXYgMS4xLCAyNyBEZWMsIDIwMDAKKyAqCisgKi8KKworCisjZGVmaW5lIEREQl9CQVNFCQkweGJmYTAwMDAwCisjZGVmaW5lIEREQl9TSVpFCQkweDAwMjAwMDAwCQkvKiAyIE1CICovCisKKworLyoKKyAqICBQaHlzaWNhbCBEZXZpY2UgQWRkcmVzcyBSZWdpc3RlcnMgKFBEQVJzKQorICovCisKKyNkZWZpbmUgRERCX1NEUkFNMAkweDAwMDAJLyogU0RSQU0gQmFuayAwIFtSL1ddICovCisjZGVmaW5lIEREQl9TRFJBTTEJMHgwMDA4CS8qIFNEUkFNIEJhbmsgMSBbUi9XXSAqLworI2RlZmluZSBEREJfRENTMgkweDAwMTAJLyogRGV2aWNlIENoaXAtU2VsZWN0IDIgW1IvV10gKi8KKyNkZWZpbmUgRERCX0RDUzMJMHgwMDE4CS8qIERldmljZSBDaGlwLVNlbGVjdCAzIFtSL1ddICovCisjZGVmaW5lIEREQl9EQ1M0CTB4MDAyMAkvKiBEZXZpY2UgQ2hpcC1TZWxlY3QgNCBbUi9XXSAqLworI2RlZmluZSBEREJfRENTNQkweDAwMjgJLyogRGV2aWNlIENoaXAtU2VsZWN0IDUgW1IvV10gKi8KKyNkZWZpbmUgRERCX0RDUzYJMHgwMDMwCS8qIERldmljZSBDaGlwLVNlbGVjdCA2IFtSL1ddICovCisjZGVmaW5lIEREQl9EQ1M3CTB4MDAzOAkvKiBEZXZpY2UgQ2hpcC1TZWxlY3QgNyBbUi9XXSAqLworI2RlZmluZSBEREJfRENTOAkweDAwNDAJLyogRGV2aWNlIENoaXAtU2VsZWN0IDggW1IvV10gKi8KKyNkZWZpbmUgRERCX1BDSVcwCTB4MDA2MAkvKiBQQ0kgQWRkcmVzcyBXaW5kb3cgMCBbUi9XXSAqLworI2RlZmluZSBEREJfUENJVzEJMHgwMDY4CS8qIFBDSSBBZGRyZXNzIFdpbmRvdyAxIFtSL1ddICovCisjZGVmaW5lIEREQl9JTlRDUwkweDAwNzAJLyogQ29udHJvbGxlciBJbnRlcm5hbCBSZWdpc3RlcnMgYW5kIERldmljZXMgKi8KKwkJCQkvKiBbUi9XXSAqLworI2RlZmluZSBEREJfQk9PVENTCTB4MDA3OAkvKiBCb290IFJPTSBDaGlwLVNlbGVjdCBbUi9XXSAqLworLyogVnJjNTQ3NyBoYXMgdHdvIG1vcmUsIElPUENJVzAsIElPUENJVzEgKi8KKworLyoKKyAqICBDUFUgSW50ZXJmYWNlIFJlZ2lzdGVycworICovCisjZGVmaW5lIEREQl9DUFVTVEFUCTB4MDA4MAkvKiBDUFUgU3RhdHVzIFtSL1ddICovCisjZGVmaW5lIEREQl9JTlRDVFJMCTB4MDA4OAkvKiBJbnRlcnJ1cHQgQ29udHJvbCBbUi9XXSAqLworI2RlZmluZSBEREJfSU5UU1RBVDAJMHgwMDkwCS8qIEludGVycnVwdCBTdGF0dXMgMCBbUl0gKi8KKyNkZWZpbmUgRERCX0lOVFNUQVQxCTB4MDA5OAkvKiBJbnRlcnJ1cHQgU3RhdHVzIDEgYW5kIENQVSBJbnRlcnJ1cHQgKi8KKwkJCQkvKiBFbmFibGUgW1IvV10gKi8KKyNkZWZpbmUgRERCX0lOVENMUgkweDAwQTAJLyogSW50ZXJydXB0IENsZWFyIFtSL1ddICovCisjZGVmaW5lIEREQl9JTlRQUEVTCTB4MDBBOAkvKiBQQ0kgSW50ZXJydXB0IENvbnRyb2wgW1IvV10gKi8KKworCisvKgorICogIE1lbW9yeS1JbnRlcmZhY2UgUmVnaXN0ZXJzCisgKi8KKyNkZWZpbmUgRERCX01FTUNUUkwJMHgwMEMwCS8qIE1lbW9yeSBDb250cm9sICovCisjZGVmaW5lIEREQl9BQ1NUSU1FCTB4MDBDOAkvKiBNZW1vcnkgQWNjZXNzIFRpbWluZyBbUi9XXSAqLworI2RlZmluZSBEREJfQ0hLRVJSCTB4MDBEMAkvKiBNZW1vcnkgQ2hlY2sgRXJyb3IgU3RhdHVzIFtSXSAqLworCisKKy8qCisgKiAgUENJLUJ1cyBSZWdpc3RlcnMKKyAqLworI2RlZmluZSBEREJfUENJQ1RSTAkweDAwRTAJLyogUENJIENvbnRyb2wgW1IvV10gKi8KKyNkZWZpbmUgRERCX1BDSUFSQgkweDAwRTgJLyogUENJIEFyYml0ZXIgW1IvV10gKi8KKyNkZWZpbmUgRERCX1BDSUlOSVQwCTB4MDBGMAkvKiBQQ0kgTWFzdGVyIChJbml0aWF0b3IpIDAgW1IvV10gKi8KKyNkZWZpbmUgRERCX1BDSUlOSVQxCTB4MDBGOAkvKiBQQ0kgTWFzdGVyIChJbml0aWF0b3IpIDEgW1IvV10gKi8KKyNkZWZpbmUgRERCX1BDSUVSUgkweDAwQjgJLyogUENJIEVycm9yIFtSL1ddICovCisKKworLyoKKyAqICBMb2NhbC1CdXMgUmVnaXN0ZXJzCisgKi8KKyNkZWZpbmUgRERCX0xDTkZHCTB4MDEwMAkvKiBMb2NhbCBCdXMgQ29uZmlndXJhdGlvbiBbUi9XXSAqLworI2RlZmluZSBEREJfTENTVDIJMHgwMTEwCS8qIExvY2FsIEJ1cyBDaGlwLVNlbGVjdCBUaW1pbmcgMiBbUi9XXSAqLworI2RlZmluZSBEREJfTENTVDMJMHgwMTE4CS8qIExvY2FsIEJ1cyBDaGlwLVNlbGVjdCBUaW1pbmcgMyBbUi9XXSAqLworI2RlZmluZSBEREJfTENTVDQJMHgwMTIwCS8qIExvY2FsIEJ1cyBDaGlwLVNlbGVjdCBUaW1pbmcgNCBbUi9XXSAqLworI2RlZmluZSBEREJfTENTVDUJMHgwMTI4CS8qIExvY2FsIEJ1cyBDaGlwLVNlbGVjdCBUaW1pbmcgNSBbUi9XXSAqLworI2RlZmluZSBEREJfTENTVDYJMHgwMTMwCS8qIExvY2FsIEJ1cyBDaGlwLVNlbGVjdCBUaW1pbmcgNiBbUi9XXSAqLworI2RlZmluZSBEREJfTENTVDcJMHgwMTM4CS8qIExvY2FsIEJ1cyBDaGlwLVNlbGVjdCBUaW1pbmcgNyBbUi9XXSAqLworI2RlZmluZSBEREJfTENTVDgJMHgwMTQwCS8qIExvY2FsIEJ1cyBDaGlwLVNlbGVjdCBUaW1pbmcgOCBbUi9XXSAqLworI2RlZmluZSBEREJfRENTRk4JMHgwMTUwCS8qIERldmljZSBDaGlwLVNlbGVjdCBNdXhpbmcgYW5kIE91dHB1dCAqLworCQkJCS8qIEVuYWJsZXMgW1IvV10gKi8KKyNkZWZpbmUgRERCX0RDU0lPCTB4MDE1OAkvKiBEZXZpY2UgQ2hpcC1TZWxlY3RzIEFzIEkvTyBCaXRzIFtSL1ddICovCisjZGVmaW5lIEREQl9CQ1NUCTB4MDE3OAkvKiBMb2NhbCBCb290IENoaXAtU2VsZWN0IFRpbWluZyBbUi9XXSAqLworCisKKy8qCisgKiAgRE1BIFJlZ2lzdGVycworICovCisjZGVmaW5lIEREQl9ETUFDVFJMMAkweDAxODAJLyogRE1BIENvbnRyb2wgMCBbUi9XXSAqLworI2RlZmluZSBEREJfRE1BU1JDQTAJMHgwMTg4CS8qIERNQSBTb3VyY2UgQWRkcmVzcyAwIFtSL1ddICovCisjZGVmaW5lIEREQl9ETUFERVNBMAkweDAxOTAJLyogRE1BIERlc3RpbmF0aW9uIEFkZHJlc3MgMCBbUi9XXSAqLworI2RlZmluZSBEREJfRE1BQ1RSTDEJMHgwMTk4CS8qIERNQSBDb250cm9sIDEgW1IvV10gKi8KKyNkZWZpbmUgRERCX0RNQVNSQ0ExCTB4MDFBMAkvKiBETUEgU291cmNlIEFkZHJlc3MgMSBbUi9XXSAqLworI2RlZmluZSBEREJfRE1BREVTQTEJMHgwMUE4CS8qIERNQSBEZXN0aW5hdGlvbiBBZGRyZXNzIDEgW1IvV10gKi8KKworCisvKgorICogIFRpbWVyIFJlZ2lzdGVycworICovCisjZGVmaW5lIEREQl9UMENUUkwJMHgwMUMwCS8qIFNEUkFNIFJlZnJlc2ggQ29udHJvbCBbUi9XXSAqLworI2RlZmluZSBEREJfVDBDTlRSCTB4MDFDOAkvKiBTRFJBTSBSZWZyZXNoIENvdW50ZXIgW1IvV10gKi8KKyNkZWZpbmUgRERCX1QxQ1RSTAkweDAxRDAJLyogQ1BVLUJ1cyBSZWFkIFRpbWUtT3V0IENvbnRyb2wgW1IvV10gKi8KKyNkZWZpbmUgRERCX1QxQ05UUgkweDAxRDgJLyogQ1BVLUJ1cyBSZWFkIFRpbWUtT3V0IENvdW50ZXIgW1IvV10gKi8KKyNkZWZpbmUgRERCX1QyQ1RSTAkweDAxRTAJLyogR2VuZXJhbC1QdXJwb3NlIFRpbWVyIENvbnRyb2wgW1IvV10gKi8KKyNkZWZpbmUgRERCX1QyQ05UUgkweDAxRTgJLyogR2VuZXJhbC1QdXJwb3NlIFRpbWVyIENvdW50ZXIgW1IvV10gKi8KKyNkZWZpbmUgRERCX1QzQ1RSTAkweDAxRjAJLyogV2F0Y2hkb2cgVGltZXIgQ29udHJvbCBbUi9XXSAqLworI2RlZmluZSBEREJfVDNDTlRSCTB4MDFGOAkvKiBXYXRjaGRvZyBUaW1lciBDb3VudGVyIFtSL1ddICovCisKKworLyoKKyAqICBQQ0kgQ29uZmlndXJhdGlvbiBTcGFjZSBSZWdpc3RlcnMKKyAqLworI2RlZmluZSBEREJfUENJX0JBU0UJMHgwMjAwCisKKyNkZWZpbmUgRERCX1ZJRAkJMHgwMjAwCS8qIFBDSSBWZW5kb3IgSUQgW1JdICovCisjZGVmaW5lIEREQl9ESUQJCTB4MDIwMgkvKiBQQ0kgRGV2aWNlIElEIFtSXSAqLworI2RlZmluZSBEREJfUENJQ01ECTB4MDIwNAkvKiBQQ0kgQ29tbWFuZCBbUi9XXSAqLworI2RlZmluZSBEREJfUENJU1RTCTB4MDIwNgkvKiBQQ0kgU3RhdHVzIFtSL1ddICovCisjZGVmaW5lIEREQl9SRVZJRAkweDAyMDgJLyogUENJIFJldmlzaW9uIElEIFtSXSAqLworI2RlZmluZSBEREJfQ0xBU1MJMHgwMjA5CS8qIFBDSSBDbGFzcyBDb2RlIFtSXSAqLworI2RlZmluZSBEREJfQ0xTSVoJMHgwMjBDCS8qIFBDSSBDYWNoZSBMaW5lIFNpemUgW1IvV10gKi8KKyNkZWZpbmUgRERCX01MVElNCTB4MDIwRAkvKiBQQ0kgTGF0ZW5jeSBUaW1lciBbUi9XXSAqLworI2RlZmluZSBEREJfSFRZUEUJMHgwMjBFCS8qIFBDSSBIZWFkZXIgVHlwZSBbUl0gKi8KKyNkZWZpbmUgRERCX0JJU1QJMHgwMjBGCS8qIEJJU1QgW1JdICh1bmltcGxlbWVudGVkKSAqLworI2RlZmluZSBEREJfQkFSQwkweDAyMTAJLyogUENJIEJhc2UgQWRkcmVzcyBSZWdpc3RlciBDb250cm9sIFtSL1ddICovCisjZGVmaW5lIEREQl9CQVIwCTB4MDIxOAkvKiBQQ0kgQmFzZSBBZGRyZXNzIFJlZ2lzdGVyIDAgW1IvV10gKi8KKyNkZWZpbmUgRERCX0JBUjEJMHgwMjIwCS8qIFBDSSBCYXNlIEFkZHJlc3MgUmVnaXN0ZXIgMSBbUi9XXSAqLworI2RlZmluZSBEREJfQ0lTCQkweDAyMjgJLyogUENJIENhcmRidXMgQ0lTIFBvaW50ZXIgW1JdICovCisJCQkJLyogKHVuaW1wbGVtZW50ZWQpICovCisjZGVmaW5lIEREQl9TU1ZJRAkweDAyMkMJLyogUENJIFN1Yi1TeXN0ZW0gVmVuZG9yIElEIFtSL1ddICovCisjZGVmaW5lIEREQl9TU0lECTB4MDIyRQkvKiBQQ0kgU3ViLVN5c3RlbSBJRCBbUi9XXSAqLworI2RlZmluZSBEREJfUk9NCQkweDAyMzAJLyogRXhwYW5zaW9uIFJPTSBCYXNlIEFkZHJlc3MgW1JdICovCisJCQkJLyogKHVuaW1wbGVtZW50ZWQpICovCisjZGVmaW5lIEREQl9JTlRMSU4JMHgwMjNDCS8qIFBDSSBJbnRlcnJ1cHQgTGluZSBbUi9XXSAqLworI2RlZmluZSBEREJfSU5UUElOCTB4MDIzRAkvKiBQQ0kgSW50ZXJydXB0IFBpbiBbUl0gKi8KKyNkZWZpbmUgRERCX01JTkdOVAkweDAyM0UJLyogUENJIE1pbl9HbnQgW1JdICh1bmltcGxlbWVudGVkKSAqLworI2RlZmluZSBEREJfTUFYTEFUCTB4MDIzRgkvKiBQQ0kgTWF4X0xhdCBbUl0gKHVuaW1wbGVtZW50ZWQpICovCisjZGVmaW5lIEREQl9CQVIyCTB4MDI0MAkvKiBQQ0kgQmFzZSBBZGRyZXNzIFJlZ2lzdGVyIDIgW1IvV10gKi8KKyNkZWZpbmUgRERCX0JBUjMJMHgwMjQ4CS8qIFBDSSBCYXNlIEFkZHJlc3MgUmVnaXN0ZXIgMyBbUi9XXSAqLworI2RlZmluZSBEREJfQkFSNAkweDAyNTAJLyogUENJIEJhc2UgQWRkcmVzcyBSZWdpc3RlciA0IFtSL1ddICovCisjZGVmaW5lIEREQl9CQVI1CTB4MDI1OAkvKiBQQ0kgQmFzZSBBZGRyZXNzIFJlZ2lzdGVyIDUgW1IvV10gKi8KKyNkZWZpbmUgRERCX0JBUjYJMHgwMjYwCS8qIFBDSSBCYXNlIEFkZHJlc3MgUmVnaXN0ZXIgNiBbUi9XXSAqLworI2RlZmluZSBEREJfQkFSNwkweDAyNjgJLyogUENJIEJhc2UgQWRkcmVzcyBSZWdpc3RlciA3IFtSL1ddICovCisjZGVmaW5lIEREQl9CQVI4CTB4MDI3MAkvKiBQQ0kgQmFzZSBBZGRyZXNzIFJlZ2lzdGVyIDggW1IvV10gKi8KKyNkZWZpbmUgRERCX0JBUkIJMHgwMjc4CS8qIFBDSSBCYXNlIEFkZHJlc3MgUmVnaXN0ZXIgQk9PVCBbUi9XXSAqLworCisKKy8qCisgKiAgTmlsZSA0IFJlZ2lzdGVyIEFjY2VzcworICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZGJfc3luYyh2b2lkKQoreworLyogVGhlIEREQjUwNzQgZG9lc24ndCBzZWVtIHRvIGxpa2UgdGhlc2UgYWNjZXNzZXMuIFRoZXkga2lsbCB0aGUgYm9hcmQgb24KKyAqIGludGVycnVwdCBsb2FkCisgKi8KKyNpZm5kZWYgQ09ORklHX0REQjUwNzQKKyAgICB2b2xhdGlsZSB1MzIgKnAgPSAodm9sYXRpbGUgdTMyICopMHhiZmMwMDAwMDsKKyAgICAodm9pZCkoKnApOworI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZGJfb3V0MzIodTMyIG9mZnNldCwgdTMyIHZhbCkKK3sKKyAgICAqKHZvbGF0aWxlIHUzMiAqKShEREJfQkFTRStvZmZzZXQpID0gdmFsOworICAgIGRkYl9zeW5jKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGRkYl9pbjMyKHUzMiBvZmZzZXQpCit7CisgICAgdTMyIHZhbCA9ICoodm9sYXRpbGUgdTMyICopKEREQl9CQVNFK29mZnNldCk7CisgICAgZGRiX3N5bmMoKTsKKyAgICByZXR1cm4gdmFsOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGRiX291dDE2KHUzMiBvZmZzZXQsIHUxNiB2YWwpCit7CisgICAgKih2b2xhdGlsZSB1MTYgKikoRERCX0JBU0Urb2Zmc2V0KSA9IHZhbDsKKyAgICBkZGJfc3luYygpOworfQorCitzdGF0aWMgaW5saW5lIHUxNiBkZGJfaW4xNih1MzIgb2Zmc2V0KQoreworICAgIHUxNiB2YWwgPSAqKHZvbGF0aWxlIHUxNiAqKShEREJfQkFTRStvZmZzZXQpOworICAgIGRkYl9zeW5jKCk7CisgICAgcmV0dXJuIHZhbDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRkYl9vdXQ4KHUzMiBvZmZzZXQsIHU4IHZhbCkKK3sKKyAgICAqKHZvbGF0aWxlIHU4ICopKEREQl9CQVNFK29mZnNldCkgPSB2YWw7CisgICAgZGRiX3N5bmMoKTsKK30KKworc3RhdGljIGlubGluZSB1OCBkZGJfaW44KHUzMiBvZmZzZXQpCit7CisgICAgdTggdmFsID0gKih2b2xhdGlsZSB1OCAqKShEREJfQkFTRStvZmZzZXQpOworICAgIGRkYl9zeW5jKCk7CisgICAgcmV0dXJuIHZhbDsKK30KKworCisvKgorICogIFBoeXNpY2FsIERldmljZSBBZGRyZXNzIFJlZ2lzdGVycworICovCisKK2V4dGVybiB1MzIKK2RkYl9jYWxjX3BkYXIodTMyIHBoeXMsIHUzMiBzaXplLCBpbnQgd2lkdGgsIGludCBvbl9tZW1vcnlfYnVzLCBpbnQgcGNpX3Zpc2libGUpOworZXh0ZXJuIHZvaWQKK2RkYl9zZXRfcGRhcih1MzIgcGRhciwgdTMyIHBoeXMsIHUzMiBzaXplLCBpbnQgd2lkdGgsCisJICAgICBpbnQgb25fbWVtb3J5X2J1cywgaW50IHBjaV92aXNpYmxlKTsKKworLyoKKyAqICBQQ0kgTWFzdGVyIFJlZ2lzdGVycworICovCisKKyNkZWZpbmUgRERCX1BDSUNNRF9JQUNLCQkwCS8qIFBDSSBJbnRlcnJ1cHQgQWNrbm93bGVkZ2UgKi8KKyNkZWZpbmUgRERCX1BDSUNNRF9JTwkJMQkvKiBQQ0kgSS9PIFNwYWNlICovCisjZGVmaW5lIEREQl9QQ0lDTURfTUVNCQkzCS8qIFBDSSBNZW1vcnkgU3BhY2UgKi8KKyNkZWZpbmUgRERCX1BDSUNNRF9DRkcJCTUJLyogUENJIENvbmZpZ3VyYXRpb24gU3BhY2UgKi8KKworLyoKKyAqIGFkZGl0aW9uYWwgb3B0aW9ucyBmb3IgcGNpIGluaXQgcmVnIChubyBzaGlmdGluZyBuZWVkZWQpCisgKi8KKyNkZWZpbmUgRERCX1BDSV9DRkdUWVBFMSAgICAgMHgyMDAgICAvKiBmb3IgcGNpIGluaXQwLzEgcmVncyAqLworI2RlZmluZSBEREJfUENJX0FDQ0VTU18zMiAgICAweDEwICAgIC8qIGZvciBwY2kgaW5pdDAvMSByZWdzICovCisKKworZXh0ZXJuIHZvaWQgZGRiX3NldF9wbXIodTMyIHBtciwgdTMyIHR5cGUsIHUzMiBhZGRyLCB1MzIgb3B0aW9ucyk7CisKKy8qCisgKiB3ZSBuZWVkIHRvIHJlc2V0IHBjaSBidXMgd2hlbiB3ZSBzdGFydCB1cCBhbmQgc2h1dGRvd24KKyAqLworZXh0ZXJuIHZvaWQgZGRiX3BjaV9yZXNldF9idXModm9pZCk7CisKKworLyoKKyAqIGluY2x1ZGUgdGhlIGJvYXJkIGRlcGVuZGVudCBwYXJ0CisgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19EREI1MDc0KQorI2luY2x1ZGUgPGFzbS9kZGI1eHh4L2RkYjUwNzQuaD4KKyNlbGlmIGRlZmluZWQoQ09ORklHX0REQjU0NzYpCisjaW5jbHVkZSA8YXNtL2RkYjV4eHgvZGRiNTQ3Ni5oPgorI2VsaWYgZGVmaW5lZChDT05GSUdfRERCNTQ3NykKKyNpbmNsdWRlIDxhc20vZGRiNXh4eC9kZGI1NDc3Lmg+CisjZWxzZQorI2Vycm9yICJVbmtub3duIEREQiBib2FyZCEiCisjZW5kaWYKKworI2VuZGlmIC8qIF9fQVNNX0REQjVYWFhfRERCNVhYWF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2RlYnVnLmggYi9pbmNsdWRlL2FzbS1taXBzL2RlYnVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTMwZjJiNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvZGVidWcuaApAQCAtMCwwICsxLDQ5IEBACisvKgorICogRGVidWcgbWFjcm9zIGZvciBydW4tdGltZSBkZWJ1Z2dpbmcuCisgKiBUdXJuZWQgb24vb2ZmIHdpdGggQ09ORklHX1JVTlRJTUVfREVCVUcgb3B0aW9uLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMSBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KKyAqIEF1dGhvcjogSnVuIFN1biwganN1bkBtdmlzdGEuY29tIG9yIGpzdW5AanVuc3VuLm5ldAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpZm5kZWYgX0FTTV9ERUJVR19ICisjZGVmaW5lIF9BU01fREVCVUdfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKy8qCisgKiBydW4tdGltZSBtYWNyb3MgZm9yIGNhdGNoaW5nIHNwdXJpb3VzIGVycm9ycy4gIEVhYmxlIENPTkZJR19SVU5USU1FX0RFQlVHIGluCisgKiBrZXJuZWwgaGFja2luZyBjb25maWcgbWVudSB0byB1c2UgdGhlbS4KKyAqCisgKiBVc2UgdGhlbSBhcyBydW4tdGltZSBkZWJ1Z2dpbmcgYWlkLiAgTkVWRVIgVVNFIFRIRU0gQVMgRVJST1IgSEFORExJTkcgQ09ERSEhIQorICovCisKKyNpZmRlZiBDT05GSUdfUlVOVElNRV9ERUJVRworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKKyNkZWZpbmUgZGJfYXNzZXJ0KHgpICBpZiAoISh4KSkgeyBcCisJcGFuaWMoImFzc2VydGlvbiBmYWlsZWQgYXQgJXM6JWQ6ICVzIiwgX19GSUxFX18sIF9fTElORV9fLCAjeCk7IH0KKyNkZWZpbmUgZGJfd2Fybih4KSAgaWYgKCEoeCkpIHsgXAorCXByaW50ayhLRVJOX1dBUk5JTkcgIndhcm5pbmcgYXQgJXM6JWQ6ICVzIiwgX19GSUxFX18sIF9fTElORV9fLCAjeCk7IH0KKyNkZWZpbmUgZGJfdmVyaWZ5KHgsIHkpIGRiX2Fzc2VydCh4IHkpCisjZGVmaW5lIGRiX3ZlcmlmeV93YXJuKHgsIHkpIGRiX3dhcm4oeCB5KQorI2RlZmluZSBkYl9ydW4oeCkgIGRvIHsgeDsgfSB3aGlsZSAoMCkKKworI2Vsc2UKKworI2RlZmluZSBkYl9hc3NlcnQoeCkKKyNkZWZpbmUgZGJfd2Fybih4KQorI2RlZmluZSBkYl92ZXJpZnkoeCwgeSkgeAorI2RlZmluZSBkYl92ZXJpZnlfd2Fybih4LCB5KSB4CisjZGVmaW5lIGRiX3J1bih4KQorCisjZW5kaWYKKworI2VuZGlmIC8qIF9BU01fREVCVUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9kZWMvZWNjLmggYi9pbmNsdWRlL2FzbS1taXBzL2RlYy9lY2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjQ5MDhiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9kZWMvZWNjLmgKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqCWluY2x1ZGUvYXNtLW1pcHMvZGVjL2VjYy5oCisgKgorICoJRUNDIGhhbmRsaW5nIGxvZ2ljIGRlZmluaXRpb25zIGNvbW1vbiB0byBERUNzdGF0aW9uL0RFQ3N5c3RlbQorICoJNTAwMC8yMDAgKEtOMDIpLCA1MDAwLzI0MCAoS04wMyksIDUwMDAvMjYwIChLTjA1KSBhbmQKKyAqCURFQ3N5c3RlbSA1OTAwIChLTjAzKSwgNTkwMC8yNjAgKEtOMDUpIHN5c3RlbXMuCisgKgorICoJQ29weXJpZ2h0IChDKSAyMDAzICBNYWNpZWogVy4gUm96eWNraQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKglhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpZm5kZWYgX19BU01fTUlQU19ERUNfRUNDX0gKKyNkZWZpbmUgX19BU01fTUlQU19ERUNfRUNDX0gKKworLyoKKyAqIEVycm9yIEFkZHJlc3MgUmVnaXN0ZXIgYml0cy4KKyAqIFRoZSByZWdpc3RlciBpcyByL3djIC0tIGFueSB3cml0ZSBjbGVhcnMgaXQuCisgKi8KKyNkZWZpbmUgS04wWF9FQVJfVkFMSUQJCSgxPDwzMSkJCS8qIGVycm9yIGRhdGEgdmFsaWQsIGJ1cyBJUlEgKi8KKyNkZWZpbmUgS04wWF9FQVJfQ1BVCQkoMTw8MzApCQkvKiBDUFUvRE1BIHRyYW5zYWN0aW9uICovCisjZGVmaW5lIEtOMFhfRUFSX1dSSVRFCQkoMTw8MjkpCQkvKiB3cml0ZS9yZWFkIHRyYW5zYWN0aW9uICovCisjZGVmaW5lIEtOMFhfRUFSX0VDQ0VSUgkJKDE8PDI4KQkJLyogRUNDL3RpbWVvdXQgb3Igb3ZlcnJ1biAqLworI2RlZmluZSBLTjBYX0VBUl9SRVNfMjcJCSgxPDwyNykJCS8qIHVudXNlZCAqLworI2RlZmluZSBLTjBYX0VBUl9BRERSRVNTCSgweDdmZmZmZmY8PDApCS8qIGFkZHJlc3MgaW52b2x2ZWQgKi8KKworLyoKKyAqIEVycm9yIFN5bmRyb21lIFJlZ2lzdGVyIGJpdHMuCisgKiBUaGUgcmVnaXN0ZXIgaXMgZnJvemVuIHdoZW4gRUFSLlZBTElEIGlzIHNldCwgb3RoZXJ3aXNlIGl0IHJlY29yZHMgYml0cworICogZnJvbSB0aGUgbGFzdCBtZW1vcnkgcmVhZC4gIFRoZSByZWdpc3RlciBpcyByL3djIC0tIGFueSB3cml0ZSBjbGVhcnMgaXQuCisgKi8KKyNkZWZpbmUgS04wWF9FU1JfVkxESEkJCSgxPDwzMSkJCS8qIGVycm9yIGRhdGEgdmFsaWQgaGkgd29yZCAqLworI2RlZmluZSBLTjBYX0VTUl9DSEtISQkJKDB4N2Y8PDI0KQkvKiBjaGVjayBiaXRzIHJlYWQgZnJvbSBtZW0gKi8KKyNkZWZpbmUgS04wWF9FU1JfU05HSEkJCSgxPDwyMykJCS8qIHNpbmdsZS9kb3VibGUgYml0IGVycm9yICovCisjZGVmaW5lIEtOMFhfRVNSX1NZTkhJCQkoMHg3Zjw8MTYpCS8qIHN5bmRyb21lIGZyb20gRUNDIGxvZ2ljICovCisjZGVmaW5lIEtOMFhfRVNSX1ZMRExPCQkoMTw8MTUpCQkvKiBlcnJvciBkYXRhIHZhbGlkIGxvIHdvcmQgKi8KKyNkZWZpbmUgS04wWF9FU1JfQ0hLTE8JCSgweDdmPDw4KQkvKiBjaGVjayBiaXRzIHJlYWQgZnJvbSBtZW0gKi8KKyNkZWZpbmUgS04wWF9FU1JfU05HTE8JCSgxPDw3KQkJLyogc2luZ2xlL2RvdWJsZSBiaXQgZXJyb3IgKi8KKyNkZWZpbmUgS04wWF9FU1JfU1lOTE8JCSgweDdmPDwwKQkvKiBzeW5kcm9tZSBmcm9tIEVDQyBsb2dpYyAqLworCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKworc3RydWN0IHB0X3JlZ3M7CisKK2V4dGVybiB2b2lkIGRlY19lY2NfYmVfaW5pdCh2b2lkKTsKK2V4dGVybiBpbnQgZGVjX2VjY19iZV9oYW5kbGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgaXNfZml4dXApOworZXh0ZXJuIGlycXJldHVybl90IGRlY19lY2NfYmVfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworI2VuZGlmCisKKyNlbmRpZiAvKiBfX0FTTV9NSVBTX0RFQ19FQ0NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9kZWMvaW50ZXJydXB0cy5oIGIvaW5jbHVkZS9hc20tbWlwcy9kZWMvaW50ZXJydXB0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3M2U0ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2RlYy9pbnRlcnJ1cHRzLmgKQEAgLTAsMCArMSwxMjUgQEAKKy8qCisgKiBNaXNjZWxsYW5lb3VzIGRlZmluaXRpb25zIHVzZWQgdG8gaW5pdGlhbGlzZSB0aGUgaW50ZXJydXB0IHZlY3RvciB0YWJsZQorICogd2l0aCB0aGUgbWFjaGluZS1zcGVjaWZpYyBpbnRlcnJ1cHQgcm91dGluZXMuCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk3IGJ5IFBhdWwgTS4gQW50b2luZS4KKyAqIHJld29ya2VkIDE5OTggYnkgSGFyYWxkIEtvZXJmZ2VuLgorICogQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzICBNYWNpZWogVy4gUm96eWNraQorICovCisKKyNpZm5kZWYgX19BU01fREVDX0lOVEVSUlVQVFNfSAorI2RlZmluZSBfX0FTTV9ERUNfSU5URVJSVVBUU19ICisKKyNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KKworCisvKgorICogVGhlIGxpc3Qgb2YgcG9zc2libGUgc3lzdGVtIGRldmljZXMgd2hpY2ggcHJvdmlkZSBhbgorICogaW50ZXJydXB0LiAgTm90IGFsbCBkZXZpY2VzIGV4aXN0IG9uIGEgZ2l2ZW4gc3lzdGVtLgorICovCisjZGVmaW5lIERFQ19JUlFfQ0FTQ0FERQkJMAkvKiBjYXNjYWRlIGZyb20gQ1NSIG9yIEkvTyBBU0lDICovCisKKy8qIE9yZGluYXJ5IGludGVycnVwdHMgKi8KKyNkZWZpbmUgREVDX0lSUV9BQl9SRUNWCQkxCS8qIEFDQ0VTUy5idXMgcmVjZWl2ZSAqLworI2RlZmluZSBERUNfSVJRX0FCX1hNSVQJCTIJLyogQUNDRVNTLmJ1cyB0cmFuc21pdCAqLworI2RlZmluZSBERUNfSVJRX0RaMTEJCTMJLyogRFoxMSAoREM3MDg1KSBzZXJpYWwgKi8KKyNkZWZpbmUgREVDX0lSUV9BU0MJCTQJLyogQVNDIChOQ1I1M0M5NCkgU0NTSSAqLworI2RlZmluZSBERUNfSVJRX0ZMT1BQWQkJNQkvKiA4MjA3NyBGREMgKi8KKyNkZWZpbmUgREVDX0lSUV9GUFUJCTYJLyogUjNrIEZQVSAqLworI2RlZmluZSBERUNfSVJRX0hBTFQJCTcJLyogSEFMVCBidXR0b24gb3IgZnJvbSBBQ0NFU1MuQnVzICovCisjZGVmaW5lIERFQ19JUlFfSVNETgkJOAkvKiBBbTc5QzMwQSBJU0ROICovCisjZGVmaW5lIERFQ19JUlFfTEFOQ0UJCTkJLyogTEFOQ0UgKEFtNzk5MCkgRXRoZXJuZXQgKi8KKyNkZWZpbmUgREVDX0lSUV9CVVMJCTEwCS8qIG1lbW9yeSwgSS9PIGJ1cyByZWFkL3dyaXRlIGVycm9ycyAqLworI2RlZmluZSBERUNfSVJRX1BTVQkJMTEJLyogcG93ZXIgc3VwcGx5IHVuaXQgd2FybmluZyAqLworI2RlZmluZSBERUNfSVJRX1JUQwkJMTIJLyogRFMxMjg3IFJUQyAqLworI2RlZmluZSBERUNfSVJRX1NDQzAJCTEzCS8qIFNDQyAoWjg1QzMwKSBzZXJpYWwgIzAgKi8KKyNkZWZpbmUgREVDX0lSUV9TQ0MxCQkxNAkvKiBTQ0MgKFo4NUMzMCkgc2VyaWFsICMxICovCisjZGVmaW5lIERFQ19JUlFfU0lJCQkxNQkvKiBTSUkgKERDNzA2MSkgU0NTSSAqLworI2RlZmluZSBERUNfSVJRX1RDMAkJMTYJLyogVFVSQk9jaGFubmVsIHNsb3QgIzAgKi8KKyNkZWZpbmUgREVDX0lSUV9UQzEJCTE3CS8qIFRVUkJPY2hhbm5lbCBzbG90ICMxICovCisjZGVmaW5lIERFQ19JUlFfVEMyCQkxOAkvKiBUVVJCT2NoYW5uZWwgc2xvdCAjMiAqLworI2RlZmluZSBERUNfSVJRX1RJTUVSCQkxOQkvKiBBUkMgcGVyaW9kaWMgdGltZXIgKi8KKyNkZWZpbmUgREVDX0lSUV9WSURFTwkJMjAJLyogZnJhbWVidWZmZXIgKi8KKworLyogSS9PIEFTSUMgRE1BIGludGVycnVwdHMgKi8KKyNkZWZpbmUgREVDX0lSUV9BU0NfTUVSUgkyMQkvKiBBU0MgbWVtb3J5IHJlYWQgZXJyb3IgKi8KKyNkZWZpbmUgREVDX0lSUV9BU0NfRVJSCQkyMgkvKiBBU0MgcGFnZSBvdmVycnVuICovCisjZGVmaW5lIERFQ19JUlFfQVNDX0RNQQkJMjMJLyogQVNDIGJ1ZmZlciBwb2ludGVyIGxvYWRlZCAqLworI2RlZmluZSBERUNfSVJRX0ZMT1BQWV9FUlIJMjQJLyogRkRDIGVycm9yICovCisjZGVmaW5lIERFQ19JUlFfSVNETl9FUlIJMjUJLyogSVNETiBtZW1vcnkgcmVhZC9vdmVycnVuIGVycm9yICovCisjZGVmaW5lIERFQ19JUlFfSVNETl9SWERNQQkyNgkvKiBJU0ROIHJlY3YgYnVmZmVyIHBvaW50ZXIgbG9hZGVkICovCisjZGVmaW5lIERFQ19JUlFfSVNETl9UWERNQQkyNwkvKiBJU0ROIHhtaXQgYnVmZmVyIHBvaW50ZXIgbG9hZGVkICovCisjZGVmaW5lIERFQ19JUlFfTEFOQ0VfTUVSUgkyOAkvKiBMQU5DRSBtZW1vcnkgcmVhZCBlcnJvciAqLworI2RlZmluZSBERUNfSVJRX1NDQzBBX1JYRVJSCTI5CS8qIFNDQzBBIChwcmludGVyKSByZWNlaXZlIG92ZXJydW4gKi8KKyNkZWZpbmUgREVDX0lSUV9TQ0MwQV9SWERNQQkzMAkvKiBTQ0MwQSByZWNlaXZlIGhhbGYgcGFnZSAqLworI2RlZmluZSBERUNfSVJRX1NDQzBBX1RYRVJSCTMxCS8qIFNDQzBBIHhtaXQgbWVtb3J5IHJlYWQvb3ZlcnJ1biAqLworI2RlZmluZSBERUNfSVJRX1NDQzBBX1RYRE1BCTMyCS8qIFNDQzBBIHRyYW5zbWl0IHBhZ2UgZW5kICovCisjZGVmaW5lIERFQ19JUlFfQUJfUlhFUlIJMzMJLyogQUNDRVNTLmJ1cyByZWNlaXZlIG92ZXJydW4gKi8KKyNkZWZpbmUgREVDX0lSUV9BQl9SWERNQQkzNAkvKiBBQ0NFU1MuYnVzIHJlY2VpdmUgaGFsZiBwYWdlICovCisjZGVmaW5lIERFQ19JUlFfQUJfVFhFUlIJMzUJLyogQUNDRVNTLmJ1cyB4bWl0IG1lbW9yeSByZWFkL292cm4gKi8KKyNkZWZpbmUgREVDX0lSUV9BQl9UWERNQQkzNgkvKiBBQ0NFU1MuYnVzIHRyYW5zbWl0IHBhZ2UgZW5kICovCisjZGVmaW5lIERFQ19JUlFfU0NDMUFfUlhFUlIJMzcJLyogU0NDMUEgKG1vZGVtKSByZWNlaXZlIG92ZXJydW4gKi8KKyNkZWZpbmUgREVDX0lSUV9TQ0MxQV9SWERNQQkzOAkvKiBTQ0MxQSByZWNlaXZlIGhhbGYgcGFnZSAqLworI2RlZmluZSBERUNfSVJRX1NDQzFBX1RYRVJSCTM5CS8qIFNDQzFBIHhtaXQgbWVtb3J5IHJlYWQvb3ZlcnJ1biAqLworI2RlZmluZSBERUNfSVJRX1NDQzFBX1RYRE1BCTQwCS8qIFNDQzFBIHRyYW5zbWl0IHBhZ2UgZW5kICovCisKKy8qIFRDNSAmIFRDNiBhcmUgdmlydHVhbCBzbG90cyBmb3IgS04wMidzIG9uYm9hcmQgZGV2aWNlcyAqLworI2RlZmluZSBERUNfSVJRX1RDNQkJREVDX0lSUV9BU0MJLyogdmlydHVhbCBQTUFaLUFBICovCisjZGVmaW5lIERFQ19JUlFfVEM2CQlERUNfSVJRX0xBTkNFCS8qIHZpcnR1YWwgUE1BRC1BQSAqLworCisjZGVmaW5lIERFQ19OUl9JTlRTCQk0MQorCisKKy8qIExhcmdlc3Qgb2YgY3B1IG1hc2tfbnIgdGFibGVzLiAqLworI2RlZmluZSBERUNfTUFYX0NQVV9JTlRTCTYKKy8qIExhcmdlc3Qgb2YgYXNpYyBtYXNrX25yIHRhYmxlcy4gKi8KKyNkZWZpbmUgREVDX01BWF9BU0lDX0lOVFMJOQorCisKKy8qCisgKiBDUFUgaW50ZXJydXB0IGJpdHMgY29tbW9uIHRvIGFsbCBzeXN0ZW1zLgorICovCisjZGVmaW5lIERFQ19DUFVfSU5SX0ZQVQkJNwkvKiBSM2sgRlBVICovCisjZGVmaW5lIERFQ19DUFVfSU5SX1NXMQkJMQkvKiBzb2Z0d2FyZSAjMSAqLworI2RlZmluZSBERUNfQ1BVX0lOUl9TVzAJCTAJLyogc29mdHdhcmUgIzAgKi8KKworI2RlZmluZSBERUNfQ1BVX0lSUV9CQVNFCTAJLyogZmlyc3QgSVJRIGFzc2lnbmVkIHRvIENQVSAqLworCisjZGVmaW5lIERFQ19DUFVfSVJRX05SKG4pCSgobikgKyBERUNfQ1BVX0lSUV9CQVNFKQorI2RlZmluZSBERUNfQ1BVX0lSUV9NQVNLKG4pCSgxIDw8ICgobikgKyBDQVVTRUJfSVApKQorI2RlZmluZSBERUNfQ1BVX0lSUV9BTEwJCSgweGZmIDw8IENBVVNFQl9JUCkKKworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisvKgorICogSW50ZXJydXB0IHRhYmxlIHN0cnVjdHVyZXMgdG8gaGlkZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHN5c3RlbXMuCisgKi8KK3R5cGVkZWYgdW5pb24geyBpbnQgaTsgdm9pZCAqcDsgfSBpbnRfcHRyOworZXh0ZXJuIGludCBkZWNfaW50ZXJydXB0W0RFQ19OUl9JTlRTXTsKK2V4dGVybiBpbnRfcHRyIGNwdV9tYXNrX25yX3RibFtERUNfTUFYX0NQVV9JTlRTXVsyXTsKK2V4dGVybiBpbnRfcHRyIGFzaWNfbWFza19ucl90YmxbREVDX01BWF9BU0lDX0lOVFNdWzJdOworZXh0ZXJuIGludCBjcHVfZnB1X21hc2s7CisKKworLyoKKyAqIENvbW1vbiBpbnRlcnJ1cHQgcm91dGluZSBwcm90b3R5cGVzIGZvciBhbGwgREVDU3RhdGlvbnMKKyAqLworZXh0ZXJuIHZvaWQga24wMl9pb19pbnQodm9pZCk7CitleHRlcm4gdm9pZCBrbjAyeGFfaW9faW50KHZvaWQpOworZXh0ZXJuIHZvaWQga24wM19pb19pbnQodm9pZCk7CitleHRlcm4gdm9pZCBhc2ljX2RtYV9pbnQodm9pZCk7CitleHRlcm4gdm9pZCBhc2ljX2FsbF9pbnQodm9pZCk7CitleHRlcm4gdm9pZCBrbjAyX2FsbF9pbnQodm9pZCk7CitleHRlcm4gdm9pZCBjcHVfYWxsX2ludCh2b2lkKTsKKworZXh0ZXJuIHZvaWQgZGVjX2ludHJfdW5pbXBsZW1lbnRlZCh2b2lkKTsKK2V4dGVybiB2b2lkIGFzaWNfaW50cl91bmltcGxlbWVudGVkKHZvaWQpOworCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9kZWMvaW9hc2ljLmggYi9pbmNsdWRlL2FzbS1taXBzL2RlYy9pb2FzaWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODZhNWIwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9kZWMvaW9hc2ljLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqCWluY2x1ZGUvYXNtLW1pcHMvZGVjL2lvYXNpYy5oCisgKgorICoJREVDIEkvTyBBU0lDIGFjY2VzcyBvcGVyYXRpb25zLgorICoKKyAqCUNvcHlyaWdodCAoQykgMjAwMCwgMjAwMiwgMjAwMyAgTWFjaWVqIFcuIFJvenlja2kKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICoJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKgkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgX19BU01fREVDX0lPQVNJQ19ICisjZGVmaW5lIF9fQVNNX0RFQ19JT0FTSUNfSAorCisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitleHRlcm4gc3BpbmxvY2tfdCBpb2FzaWNfc3NyX2xvY2s7CisKK2V4dGVybiB2b2xhdGlsZSB1MzIgKmlvYXNpY19iYXNlOworCitzdGF0aWMgaW5saW5lIHZvaWQgaW9hc2ljX3dyaXRlKHVuc2lnbmVkIGludCByZWcsIHUzMiB2KQoreworCWlvYXNpY19iYXNlW3JlZyAvIDRdID0gdjsKK30KKworc3RhdGljIGlubGluZSB1MzIgaW9hc2ljX3JlYWQodW5zaWduZWQgaW50IHJlZykKK3sKKwlyZXR1cm4gaW9hc2ljX2Jhc2VbcmVnIC8gNF07Cit9CisKK2V4dGVybiB2b2lkIGluaXRfaW9hc2ljX2lycXMoaW50IGJhc2UpOworCisjZW5kaWYgLyogX19BU01fREVDX0lPQVNJQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2RlYy9pb2FzaWNfYWRkcnMuaCBiL2luY2x1ZGUvYXNtLW1pcHMvZGVjL2lvYXNpY19hZGRycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlMThhNzUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2RlYy9pb2FzaWNfYWRkcnMuaApAQCAtMCwwICsxLDE1MSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIERlZmluaXRpb25zIGZvciB0aGUgYWRkcmVzcyBtYXAgaW4gdGhlIEpVTktJTyBBc2ljCisgKgorICogQ3JlYXRlZCB3aXRoIEluZm9ybWF0aW9uIGZyb206CisgKgorICogIkRFQyAzMDAwIDMwMC80MDAvNTAwLzYwMC83MDAvODAwLzkwMCBBWFAgTW9kZWxzIFN5c3RlbSBQcm9ncmFtbWVyJ3MgTWFudWFsIgorICoKKyAqIGFuZCB0aGUgTWFjaCBTb3VyY2VzCisgKgorICogQ29weXJpZ2h0IChDKSAxOTl4ICB0aGUgQW5vbnltb3VzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMgIE1hY2llaiBXLiBSb3p5Y2tpCisgKi8KKworI2lmbmRlZiBfX0FTTV9NSVBTX0RFQ19JT0FTSUNfQUREUlNfSAorI2RlZmluZSBfX0FTTV9NSVBTX0RFQ19JT0FTSUNfQUREUlNfSAorCisjZGVmaW5lIElPQVNJQ19TTE9UX1NJWkUgMHgwMDA0MDAwMAorCisvKgorICogQWRkcmVzcyByYW5nZXMgZGVjb2RlZCBieSB0aGUgSS9PIEFTSUMgZm9yIG9uYm9hcmQgZGV2aWNlcy4KKyAqLworI2RlZmluZSBJT0FTSUNfU1lTX1JPTQkoMCpJT0FTSUNfU0xPVF9TSVpFKQkvKiBzeXN0ZW0gYm9hcmQgUk9NICovCisjZGVmaW5lIElPQVNJQ19JT0NUTAkoMSpJT0FTSUNfU0xPVF9TSVpFKQkvKiBJL08gQVNJQyAqLworI2RlZmluZSBJT0FTSUNfRVNBUiAJKDIqSU9BU0lDX1NMT1RfU0laRSkJLyogTEFOQ0UgTUFDIGFkZHJlc3MgY2hpcCAqLworI2RlZmluZSBJT0FTSUNfTEFOQ0UgCSgzKklPQVNJQ19TTE9UX1NJWkUpCS8qIExBTkNFIEV0aGVybmV0ICovCisjZGVmaW5lIElPQVNJQ19TQ0MwIAkoNCpJT0FTSUNfU0xPVF9TSVpFKQkvKiBTQ0MgIzAgKi8KKyNkZWZpbmUgSU9BU0lDX1ZEQUNfSEkJKDUqSU9BU0lDX1NMT1RfU0laRSkJLyogVkRBQyAobWF4aW5lKSAqLworI2RlZmluZSBJT0FTSUNfU0NDMSAJKDYqSU9BU0lDX1NMT1RfU0laRSkJLyogU0NDICMxICgzbWluLCAzbWF4KykgKi8KKyNkZWZpbmUgSU9BU0lDX1ZEQUNfTE8JKDcqSU9BU0lDX1NMT1RfU0laRSkJLyogVkRBQyAobWF4aW5lKSAqLworI2RlZmluZSBJT0FTSUNfVE9ZIAkoOCpJT0FTSUNfU0xPVF9TSVpFKQkvKiBSVEMgKi8KKyNkZWZpbmUgSU9BU0lDX0lTRE4gCSg5KklPQVNJQ19TTE9UX1NJWkUpCS8qIElTRE4gKG1heGluZSkgKi8KKyNkZWZpbmUgSU9BU0lDX0VSUkFERFIJKDkqSU9BU0lDX1NMT1RfU0laRSkJLyogYnVzIGVycm9yIGFkZHJlc3MgKDNtYXgrKSAqLworI2RlZmluZSBJT0FTSUNfQ0hLU1lOIAkoMTAqSU9BU0lDX1NMT1RfU0laRSkJLyogRUNDIHN5bmRyb21lICgzbWF4KykgKi8KKyNkZWZpbmUgSU9BU0lDX0FDQ19CVVMJKDEwKklPQVNJQ19TTE9UX1NJWkUpCS8qIEFDQ0VTUy5idXMgKG1heGluZSkgKi8KKyNkZWZpbmUgSU9BU0lDX01DUiAJKDExKklPQVNJQ19TTE9UX1NJWkUpCS8qIG1lbW9yeSBjb250cm9sICgzbWF4KykgKi8KKyNkZWZpbmUgSU9BU0lDX0ZMT1BQWSAJKDExKklPQVNJQ19TTE9UX1NJWkUpCS8qIEZEQyAobWF4aW5lKSAqLworI2RlZmluZSBJT0FTSUNfU0NTSSAJKDEyKklPQVNJQ19TTE9UX1NJWkUpCS8qIEFTQyBTQ1NJICovCisjZGVmaW5lIElPQVNJQ19GRENfRE1BCSgxMypJT0FTSUNfU0xPVF9TSVpFKQkvKiBGREMgRE1BIChtYXhpbmUpICovCisjZGVmaW5lIElPQVNJQ19TQ1NJX0RNQQkoMTQqSU9BU0lDX1NMT1RfU0laRSkJLyogPz8/ICovCisjZGVmaW5lIElPQVNJQ19SRVNfMTUJKDE1KklPQVNJQ19TTE9UX1NJWkUpCS8qIHVudXNlZD8gKi8KKworCisvKgorICogT2Zmc2V0cyBmb3IgSS9PIEFTSUMgcmVnaXN0ZXJzIChyZWxhdGl2ZSB0byAoc3lzdGVtX2Jhc2UgKyBJT0FTSUNfSU9DVEwpKS4KKyAqLworCQkJCQkvKiBhbGwgc3lzdGVtcyAqLworI2RlZmluZSBJT19SRUdfU0NTSV9ETUFfUAkweDAwCS8qIFNDU0kgRE1BIFBvaW50ZXIgKi8KKyNkZWZpbmUgSU9fUkVHX1NDU0lfRE1BX0JQCTB4MTAJLyogU0NTSSBETUEgQnVmZmVyIFBvaW50ZXIgKi8KKyNkZWZpbmUgSU9fUkVHX0xBTkNFX0RNQV9QCTB4MjAJLyogTEFOQ0UgRE1BIFBvaW50ZXIgKi8KKyNkZWZpbmUgSU9fUkVHX1NDQzBBX1RfRE1BX1AJMHgzMAkvKiBTQ0MwQSBUcmFuc21pdCBETUEgUG9pbnRlciAqLworI2RlZmluZSBJT19SRUdfU0NDMEFfUl9ETUFfUAkweDQwCS8qIFNDQzBBIFJlY2VpdmUgRE1BIFBvaW50ZXIgKi8KKworCQkJCQkvKiBleGNlcHQgTWF4aW5lICovCisjZGVmaW5lIElPX1JFR19TQ0MxQV9UX0RNQV9QCTB4NTAJLyogU0NDMUEgVHJhbnNtaXQgRE1BIFBvaW50ZXIgKi8KKyNkZWZpbmUgSU9fUkVHX1NDQzFBX1JfRE1BX1AJMHg2MAkvKiBTQ0MxQSBSZWNlaXZlIERNQSBQb2ludGVyICovCisKKwkJCQkJLyogTWF4aW5lICovCisjZGVmaW5lIElPX1JFR19BQl9UX0RNQV9QCTB4NTAJLyogQUNDRVNTLmJ1cyBUcmFuc21pdCBETUEgUG9pbnRlciAqLworI2RlZmluZSBJT19SRUdfQUJfUl9ETUFfUAkweDYwCS8qIEFDQ0VTUy5idXMgUmVjZWl2ZSBETUEgUG9pbnRlciAqLworI2RlZmluZSBJT19SRUdfRkxPUFBZX0RNQV9QCTB4NzAJLyogRmxvcHB5IERNQSBQb2ludGVyICovCisjZGVmaW5lIElPX1JFR19JU0ROX1RfRE1BX1AJMHg4MAkvKiBJU0ROIFRyYW5zbWl0IERNQSBQb2ludGVyICovCisjZGVmaW5lIElPX1JFR19JU0ROX1RfRE1BX0JQCTB4OTAJLyogSVNETiBUcmFuc21pdCBETUEgQnVmZmVyIFBvaW50ZXIgKi8KKyNkZWZpbmUgSU9fUkVHX0lTRE5fUl9ETUFfUAkweGEwCS8qIElTRE4gUmVjZWl2ZSBETUEgUG9pbnRlciAqLworI2RlZmluZSBJT19SRUdfSVNETl9SX0RNQV9CUAkweGIwCS8qIElTRE4gUmVjZWl2ZSBETUEgQnVmZmVyIFBvaW50ZXIgKi8KKworCQkJCQkvKiBhbGwgc3lzdGVtcyAqLworI2RlZmluZSBJT19SRUdfREFUQV8wCQkweGMwCS8qIFN5c3RlbSBEYXRhIEJ1ZmZlciAwICovCisjZGVmaW5lIElPX1JFR19EQVRBXzEJCTB4ZDAJLyogU3lzdGVtIERhdGEgQnVmZmVyIDEgKi8KKyNkZWZpbmUgSU9fUkVHX0RBVEFfMgkJMHhlMAkvKiBTeXN0ZW0gRGF0YSBCdWZmZXIgMiAqLworI2RlZmluZSBJT19SRUdfREFUQV8zCQkweGYwCS8qIFN5c3RlbSBEYXRhIEJ1ZmZlciAzICovCisKKwkJCQkJLyogYWxsIHN5c3RlbXMgKi8KKyNkZWZpbmUgSU9fUkVHX1NTUgkJMHgxMDAJLyogU3lzdGVtIFN1cHBvcnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSU9fUkVHX1NJUgkJMHgxMTAJLyogU3lzdGVtIEludGVycnVwdCBSZWdpc3RlciAqLworI2RlZmluZSBJT19SRUdfU0lNUgkJMHgxMjAJLyogU3lzdGVtIEludGVycnVwdCBNYXNrIFJlZy4gKi8KKyNkZWZpbmUgSU9fUkVHX1NBUgkJMHgxMzAJLyogU3lzdGVtIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKworCQkJCQkvKiBNYXhpbmUgKi8KKyNkZWZpbmUgSU9fUkVHX0lTRE5fVF9EQVRBCTB4MTQwCS8qIElTRE4gWG1pdCBEYXRhIFJlZ2lzdGVyICovCisjZGVmaW5lIElPX1JFR19JU0ROX1JfREFUQQkweDE1MAkvKiBJU0ROIFJlY2VpdmUgRGF0YSBSZWdpc3RlciAqLworCisJCQkJCS8qIGFsbCBzeXN0ZW1zICovCisjZGVmaW5lIElPX1JFR19MQU5DRV9TTE9UCTB4MTYwCS8qIExBTkNFIEkvTyBTbG90IFJlZ2lzdGVyICovCisjZGVmaW5lIElPX1JFR19TQ1NJX1NMT1QJMHgxNzAJLyogU0NTSSBTbG90IFJlZ2lzdGVyICovCisjZGVmaW5lIElPX1JFR19TQ0MwQV9TTE9UCTB4MTgwCS8qIFNDQzBBIERNQSBTbG90IFJlZ2lzdGVyICovCisKKwkJCQkJLyogZXhjZXB0IE1heGluZSAqLworI2RlZmluZSBJT19SRUdfU0NDMUFfU0xPVAkweDE5MAkvKiBTQ0MxQSBETUEgU2xvdCBSZWdpc3RlciAqLworCisJCQkJCS8qIE1heGluZSAqLworI2RlZmluZSBJT19SRUdfQUJfU0xPVAkJMHgxOTAJLyogQUNDRVNTLmJ1cyBETUEgU2xvdCBSZWdpc3RlciAqLworI2RlZmluZSBJT19SRUdfRkxPUFBZX1NMT1QJMHgxYTAJLyogRmxvcHB5IFNsb3QgUmVnaXN0ZXIgKi8KKworCQkJCQkvKiBhbGwgc3lzdGVtcyAqLworI2RlZmluZSBJT19SRUdfU0NTSV9TQ1IJCTB4MWIwCS8qIFNDU0kgUGFydGlhbC1Xb3JkIERNQSBDb250cm9sICovCisjZGVmaW5lIElPX1JFR19TQ1NJX1NEUjAJMHgxYzAJLyogU0NTSSBETUEgUGFydGlhbCBXb3JkIDAgKi8KKyNkZWZpbmUgSU9fUkVHX1NDU0lfU0RSMQkweDFkMAkvKiBTQ1NJIERNQSBQYXJ0aWFsIFdvcmQgMSAqLworI2RlZmluZSBJT19SRUdfRkNUUgkJMHgxZTAJLyogRnJlZS1SdW5uaW5nIENvdW50ZXIgKi8KKyNkZWZpbmUgSU9fUkVHX1JFU18zMQkJMHgxZjAJLyogdW51c2VkICovCisKKworLyoKKyAqIFRoZSB1cHBlciAxNiBiaXRzIG9mIHRoZSBTeXN0ZW0gU3VwcG9ydCBSZWdpc3RlciBhcmUgYSBwYXJ0IG9mIHRoZQorICogSS9PIEFTSUMncyBpbnRlcm5hbCBETUEgZW5naW5lIGFuZCB0aHVzIGFyZSBjb21tb24gdG8gYWxsIEkvTyBBU0lDCisgKiBtYWNoaW5lcy4gIFRoZSBleGNlcHRpb24gaXMgdGhlIE1heGluZSwgd2hpY2ggbWFrZXMgdXNlIG9mIHRoZQorICogRkxPUFBZIGFuZCBJU0ROIGJpdHMgKG90aGVyd2lzZSB1bnVzZWQpIGFuZCBoYXMgYSBkaWZmZXJlbnQgU0NDCisgKiB3aXJpbmcuCisgKi8KKwkJCQkJCS8qIGFsbCBzeXN0ZW1zICovCisjZGVmaW5lIElPX1NTUl9TQ0MwQV9UWF9ETUFfRU4JKDE8PDMxKQkJLyogU0NDMEEgdHJhbnNtaXQgRE1BIGVuYWJsZSAqLworI2RlZmluZSBJT19TU1JfU0NDMEFfUlhfRE1BX0VOCSgxPDwzMCkJCS8qIFNDQzBBIHJlY2VpdmUgRE1BIGVuYWJsZSAqLworI2RlZmluZSBJT19TU1JfUkVTXzI3CQkoMTw8MjcpCQkvKiB1bnVzZWQgKi8KKyNkZWZpbmUgSU9fU1NSX1JFU18yNgkJKDE8PDI2KQkJLyogdW51c2VkICovCisjZGVmaW5lIElPX1NTUl9SRVNfMjUJCSgxPDwyNSkJCS8qIHVudXNlZCAqLworI2RlZmluZSBJT19TU1JfUkVTXzI0CQkoMTw8MjQpCQkvKiB1bnVzZWQgKi8KKyNkZWZpbmUgSU9fU1NSX1JFU18yMwkJKDE8PDIzKQkJLyogdW51c2VkICovCisjZGVmaW5lIElPX1NTUl9TQ1NJX0RNQV9ESVIJKDE8PDE4KQkJLyogU0NTSSBETUEgZGlyZWN0aW9uICovCisjZGVmaW5lIElPX1NTUl9TQ1NJX0RNQV9FTgkoMTw8MTcpCQkvKiBTQ1NJIERNQSBlbmFibGUgKi8KKyNkZWZpbmUgSU9fU1NSX0xBTkNFX0RNQV9FTgkoMTw8MTYpCQkvKiBMQU5DRSBETUEgZW5hYmxlICovCisKKwkJCQkJCS8qIGV4Y2VwdCBNYXhpbmUgKi8KKyNkZWZpbmUgSU9fU1NSX1NDQzFBX1RYX0RNQV9FTgkoMTw8MjkpCQkvKiBTQ0MxQSB0cmFuc21pdCBETUEgZW5hYmxlICovCisjZGVmaW5lIElPX1NTUl9TQ0MxQV9SWF9ETUFfRU4JKDE8PDI4KQkJLyogU0NDMUEgcmVjZWl2ZSBETUEgZW5hYmxlICovCisjZGVmaW5lIElPX1NTUl9SRVNfMjIJCSgxPDwyMikJCS8qIHVudXNlZCAqLworI2RlZmluZSBJT19TU1JfUkVTXzIxCQkoMTw8MjEpCQkvKiB1bnVzZWQgKi8KKyNkZWZpbmUgSU9fU1NSX1JFU18yMAkJKDE8PDIwKQkJLyogdW51c2VkICovCisjZGVmaW5lIElPX1NTUl9SRVNfMTkJCSgxPDwxOSkJCS8qIHVudXNlZCAqLworCisJCQkJCQkvKiBNYXhpbmUgKi8KKyNkZWZpbmUgSU9fU1NSX0FCX1RYX0RNQV9FTgkoMTw8MjkpCQkvKiBBQ0NFU1MuYnVzIHhtaXQgRE1BIGVuYWJsZSAqLworI2RlZmluZSBJT19TU1JfQUJfUlhfRE1BX0VOCSgxPDwyOCkJCS8qIEFDQ0VTUy5idXMgcmVjdiBETUEgZW5hYmxlICovCisjZGVmaW5lIElPX1NTUl9GTE9QUFlfRE1BX0RJUgkoMTw8MjIpCQkvKiBGbG9wcHkgRE1BIGRpcmVjdGlvbiAqLworI2RlZmluZSBJT19TU1JfRkxPUFBZX0RNQV9FTgkoMTw8MjEpCQkvKiBGbG9wcHkgRE1BIGVuYWJsZSAqLworI2RlZmluZSBJT19TU1JfSVNETl9UWF9ETUFfRU4JKDE8PDIwKQkJLyogSVNETiB0cmFuc21pdCBETUEgZW5hYmxlICovCisjZGVmaW5lIElPX1NTUl9JU0ROX1JYX0RNQV9FTgkoMTw8MTkpCQkvKiBJU0ROIHJlY2VpdmUgRE1BIGVuYWJsZSAqLworCisvKgorICogVGhlIGxvd2VyIDE2IGJpdHMgYXJlIHN5c3RlbS1zcGVjaWZpYy4gIEJpdHMgMTUsMTE6OCBhcmUgY29tbW9uIGFuZAorICogZGVmaW5lZCBoZXJlLiAgVGhlIHJlc3QgaXMgZGVmaW5lZCBpbiBzeXN0ZW0tc3BlY2lmaWMgaGVhZGVycy4KKyAqLworI2RlZmluZSBLTjBYX0lPX1NTUl9ESUFHRE4JKDE8PDE1KQkJLyogZGlhZ25vc3RpYyBqdW1wZXIgKi8KKyNkZWZpbmUgS04wWF9JT19TU1JfU0NDX1JTVAkoMTw8MTEpCQkvKiB+U0NDMCwxIChaODVDMzApIHJlc2V0ICovCisjZGVmaW5lIEtOMFhfSU9fU1NSX1JUQ19SU1QJKDE8PDEwKQkJLyogflJUQyAoRFMxMjg3KSByZXNldCAqLworI2RlZmluZSBLTjBYX0lPX1NTUl9BU0NfUlNUCSgxPDw5KQkJLyogfkFTQyAoTkNSNTNDOTQpIHJlc2V0ICovCisjZGVmaW5lIEtOMFhfSU9fU1NSX0xBTkNFX1JTVAkoMTw8OCkJCS8qIH5MQU5DRSAoQW03OTkwKSByZXNldCAqLworCisjZW5kaWYgLyogX19BU01fTUlQU19ERUNfSU9BU0lDX0FERFJTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvZGVjL2lvYXNpY19pbnRzLmggYi9pbmNsdWRlL2FzbS1taXBzL2RlYy9pb2FzaWNfaW50cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhYWE5ODYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2RlYy9pb2FzaWNfaW50cy5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBEZWZpbml0aW9ucyBmb3IgdGhlIGludGVycnVwdCByZWxhdGVkIGJpdHMgaW4gdGhlIEkvTyBBU0lDCisgKiBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyIChhbmQgdGhlIGludGVycnVwdCBtYXNrIHJlZ2lzdGVyLCBvZiBjb3Vyc2UpCisgKgorICogQ3JlYXRlZCB3aXRoIEluZm9ybWF0aW9uIGZyb206CisgKgorICogIkRFQyAzMDAwIDMwMC80MDAvNTAwLzYwMC83MDAvODAwLzkwMCBBWFAgTW9kZWxzIFN5c3RlbSBQcm9ncmFtbWVyJ3MgTWFudWFsIgorICoKKyAqIGFuZCB0aGUgTWFjaCBTb3VyY2VzCisgKgorICogQ29weXJpZ2h0IChDKSAxOTl4ICB0aGUgQW5vbnltb3VzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgIE1hY2llaiBXLiBSb3p5Y2tpCisgKi8KKworI2lmbmRlZiBfX0FTTV9ERUNfSU9BU0lDX0lOVFNfSAorI2RlZmluZSBfX0FTTV9ERUNfSU9BU0lDX0lOVFNfSAorCisvKgorICogVGhlIHVwcGVyIDE2IGJpdHMgYXJlIGEgcGFydCBvZiB0aGUgSS9PIEFTSUMncyBpbnRlcm5hbCBETUEgZW5naW5lCisgKiBhbmQgdGh1cyBhcmUgY29tbW9uIHRvIGFsbCBJL08gQVNJQyBtYWNoaW5lcy4gIFRoZSBleGNlcHRpb24gaXMKKyAqIHRoZSBNYXhpbmUsIHdoaWNoIG1ha2VzIHVzZSBvZiB0aGUgRkxPUFBZIGFuZCBJU0ROIGJpdHMgKG90aGVyd2lzZQorICogdW51c2VkKSBhbmQgaGFzIGEgZGlmZmVyZW50IFNDQyB3aXJpbmcuCisgKi8KKwkJCQkJLyogYWxsIHN5c3RlbXMgKi8KKyNkZWZpbmUgSU9fSU5SX1NDQzBBX1RYRE1BCTMxCS8qIFNDQzBBIHRyYW5zbWl0IHBhZ2UgZW5kICovCisjZGVmaW5lIElPX0lOUl9TQ0MwQV9UWEVSUgkzMAkvKiBTQ0MwQSB0cmFuc21pdCBtZW1vcnkgcmVhZCBlcnJvciAqLworI2RlZmluZSBJT19JTlJfU0NDMEFfUlhETUEJMjkJLyogU0NDMEEgcmVjZWl2ZSBoYWxmIHBhZ2UgKi8KKyNkZWZpbmUgSU9fSU5SX1NDQzBBX1JYRVJSCTI4CS8qIFNDQzBBIHJlY2VpdmUgb3ZlcnJ1biAqLworI2RlZmluZSBJT19JTlJfQVNDX0RNQQkJMTkJLyogQVNDIGJ1ZmZlciBwb2ludGVyIGxvYWRlZCAqLworI2RlZmluZSBJT19JTlJfQVNDX0VSUgkJMTgJLyogQVNDIHBhZ2Ugb3ZlcnJ1biAqLworI2RlZmluZSBJT19JTlJfQVNDX01FUlIJCTE3CS8qIEFTQyBtZW1vcnkgcmVhZCBlcnJvciAqLworI2RlZmluZSBJT19JTlJfTEFOQ0VfTUVSUgkxNgkvKiBMQU5DRSBtZW1vcnkgcmVhZCBlcnJvciAqLworCisJCQkJCS8qIGV4Y2VwdCBNYXhpbmUgKi8KKyNkZWZpbmUgSU9fSU5SX1NDQzFBX1RYRE1BCTI3CS8qIFNDQzFBIHRyYW5zbWl0IHBhZ2UgZW5kICovCisjZGVmaW5lIElPX0lOUl9TQ0MxQV9UWEVSUgkyNgkvKiBTQ0MxQSB0cmFuc21pdCBtZW1vcnkgcmVhZCBlcnJvciAqLworI2RlZmluZSBJT19JTlJfU0NDMUFfUlhETUEJMjUJLyogU0NDMUEgcmVjZWl2ZSBoYWxmIHBhZ2UgKi8KKyNkZWZpbmUgSU9fSU5SX1NDQzFBX1JYRVJSCTI0CS8qIFNDQzFBIHJlY2VpdmUgb3ZlcnJ1biAqLworI2RlZmluZSBJT19JTlJfUkVTXzIzCQkyMwkvKiB1bnVzZWQgKi8KKyNkZWZpbmUgSU9fSU5SX1JFU18yMgkJMjIJLyogdW51c2VkICovCisjZGVmaW5lIElPX0lOUl9SRVNfMjEJCTIxCS8qIHVudXNlZCAqLworI2RlZmluZSBJT19JTlJfUkVTXzIwCQkyMAkvKiB1bnVzZWQgKi8KKworCQkJCQkvKiBNYXhpbmUgKi8KKyNkZWZpbmUgSU9fSU5SX0FCX1RYRE1BCQkyNwkvKiBBQ0NFU1MuYnVzIHRyYW5zbWl0IHBhZ2UgZW5kICovCisjZGVmaW5lIElPX0lOUl9BQl9UWEVSUgkJMjYJLyogQUNDRVNTLmJ1cyB4bWl0IG1lbW9yeSByZWFkIGVycm9yICovCisjZGVmaW5lIElPX0lOUl9BQl9SWERNQQkJMjUJLyogQUNDRVNTLmJ1cyByZWNlaXZlIGhhbGYgcGFnZSAqLworI2RlZmluZSBJT19JTlJfQUJfUlhFUlIJCTI0CS8qIEFDQ0VTUy5idXMgcmVjZWl2ZSBvdmVycnVuICovCisjZGVmaW5lIElPX0lOUl9GTE9QUFlfRVJSCTIzCS8qIEZEQyBlcnJvciAqLworI2RlZmluZSBJT19JTlJfSVNETl9UWERNQQkyMgkvKiBJU0ROIHhtaXQgYnVmZmVyIHBvaW50ZXIgbG9hZGVkICovCisjZGVmaW5lIElPX0lOUl9JU0ROX1JYRE1BCTIxCS8qIElTRE4gcmVjdiBidWZmZXIgcG9pbnRlciBsb2FkZWQgKi8KKyNkZWZpbmUgSU9fSU5SX0lTRE5fRVJSCQkyMAkvKiBJU0ROIG1lbW9yeSByZWFkL292ZXJydW4gZXJyb3IgKi8KKworI2RlZmluZSBJT19JTlJfRE1BCQkxNgkvKiBmaXJzdCBETUEgSVJRICovCisKKy8qCisgKiBUaGUgbG93ZXIgMTYgYml0cyBhcmUgc3lzdGVtLXNwZWNpZmljIGFuZCB0aHVzIGRlZmluZWQgaW4KKyAqIHN5c3RlbS1zcGVjaWZpYyBoZWFkZXJzLgorICovCisKKworI2RlZmluZSBJT19JUlFfQkFTRQkJOAkvKiBmaXJzdCBJUlEgYXNzaWduZWQgdG8gSS9PIEFTSUMgKi8KKyNkZWZpbmUgSU9fSVJRX0xJTkVTCQkzMgkvKiBudW1iZXIgb2YgSS9PIEFTSUMgaW50ZXJydXB0cyAqLworCisjZGVmaW5lIElPX0lSUV9OUihuKQkJKChuKSArIElPX0lSUV9CQVNFKQorI2RlZmluZSBJT19JUlFfTUFTSyhuKQkJKDEgPDwgKG4pKQorI2RlZmluZSBJT19JUlFfQUxMCQkweDAwMDBmZmZmCisjZGVmaW5lIElPX0lSUV9ETUEJCTB4ZmZmZjAwMDAKKworI2VuZGlmIC8qIF9fQVNNX0RFQ19JT0FTSUNfSU5UU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2RlYy9rbjAxLmggYi9pbmNsdWRlL2FzbS1taXBzL2RlYy9rbjAxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ2OTQzNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvZGVjL2tuMDEuaApAQCAtMCwwICsxLDgzIEBACisvKgorICogSGFyZHdhcmUgaW5mbyBhYm91dCBERUNzdGF0aW9uIERTMjEwMC8zMTAwIHN5c3RlbXMgKG90aGVyd2lzZSBrbm93biBhcworICogcG1pbi9wbWF4IG9yIEtOMDEpLgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NSwxOTk2IGJ5IFBhdWwgTS4gQW50b2luZSwgc29tZSBjb2RlIGFuZCBkZWZpbml0aW9ucworICogYXJlIGJ5IGNvdXJ0ZXN5IG9mIENocmlzIEZyYXNlci4KKyAqIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMyAgTWFjaWVqIFcuIFJvenlja2kKKyAqLworI2lmbmRlZiBfX0FTTV9NSVBTX0RFQ19LTjAxX0gKKyNkZWZpbmUgX19BU01fTUlQU19ERUNfS04wMV9ICisKKyNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CisKKyNkZWZpbmUgS04wMV9TTE9UX0JBU0UJS1NFRzFBRERSKDB4MTAwMDAwMDApCisjZGVmaW5lIEtOMDFfU0xPVF9TSVpFCTB4MDEwMDAwMDAKKworLyoKKyAqIEFkZHJlc3MgcmFuZ2VzIGZvciBkZXZpY2VzLgorICovCisjZGVmaW5lIEtOMDFfUE1BU0sJKDAqS04wMV9TTE9UX1NJWkUpCS8qIGNvbG9yIHBsYW5lIG1hc2sgKi8KKyNkZWZpbmUgS04wMV9QQ0MJKDEqS04wMV9TTE9UX1NJWkUpCS8qIFBDQyAoREM1MDMpIGN1cnNvciAqLworI2RlZmluZSBLTjAxX1ZEQUMJKDIqS04wMV9TTE9UX1NJWkUpCS8qIGNvbG9yIG1hcCAqLworI2RlZmluZSBLTjAxX1JFU18zCSgzKktOMDFfU0xPVF9TSVpFKQkvKiB1bnVzZWQgKi8KKyNkZWZpbmUgS04wMV9SRVNfNAkoNCpLTjAxX1NMT1RfU0laRSkJLyogdW51c2VkICovCisjZGVmaW5lIEtOMDFfUkVTXzUJKDUqS04wMV9TTE9UX1NJWkUpCS8qIHVudXNlZCAqLworI2RlZmluZSBLTjAxX1JFU182CSg2KktOMDFfU0xPVF9TSVpFKQkvKiB1bnVzZWQgKi8KKyNkZWZpbmUgS04wMV9FUlJBRERSCSg3KktOMDFfU0xPVF9TSVpFKQkvKiB3cml0ZSBlcnJvciBhZGRyZXNzICovCisjZGVmaW5lIEtOMDFfTEFOQ0UJKDgqS04wMV9TTE9UX1NJWkUpCS8qIExBTkNFIChBbTc5OTApIEV0aGVybmV0ICovCisjZGVmaW5lIEtOMDFfTEFOQ0VfTUVNCSg5KktOMDFfU0xPVF9TSVpFKQkvKiBMQU5DRSBidWZmZXIgbWVtb3J5ICovCisjZGVmaW5lIEtOMDFfU0lJCSgxMCpLTjAxX1NMT1RfU0laRSkJLyogU0lJIChEQzcwNjEpIFNDU0kgKi8KKyNkZWZpbmUgS04wMV9TSUlfTUVNCSgxMSpLTjAxX1NMT1RfU0laRSkJLyogU0lJIGJ1ZmZlciBtZW1vcnkgKi8KKyNkZWZpbmUgS04wMV9EWjExCSgxMipLTjAxX1NMT1RfU0laRSkJLyogRFoxMSAoREM3MDg1KSBzZXJpYWwgKi8KKyNkZWZpbmUgS04wMV9SVEMJKDEzKktOMDFfU0xPVF9TSVpFKQkvKiBEUzEyODcgUlRDIChieXRlcyAjMCkgKi8KKyNkZWZpbmUgS04wMV9FU0FSCSgxMypLTjAxX1NMT1RfU0laRSkJLyogTUFDIGFkZHJlc3MgKGJ5dGVzICMxKSAqLworI2RlZmluZSBLTjAxX0NTUgkoMTQqS04wMV9TTE9UX1NJWkUpCS8qIHN5c3RlbSBjdHJsICYgc3RhdHVzIHJlZyAqLworI2RlZmluZSBLTjAxX1NZU19ST00JKDE1KktOMDFfU0xPVF9TSVpFKQkvKiBzeXN0ZW0gYm9hcmQgUk9NICovCisKKworLyoKKyAqIFNvbWUgcG9ydCBhZGRyZXNzZXMuLi4KKyAqLworI2RlZmluZSBLTjAxX0xBTkNFX0JBU0UgKEtOMDFfU0xPVF9CQVNFICsgS04wMV9MQU5DRSkJLyogMHhCODAwMDAwMCAqLworI2RlZmluZSBLTjAxX0RaMTFfQkFTRQkoS04wMV9TTE9UX0JBU0UgKyBLTjAxX0RaMTEpCS8qIDB4QkMwMDAwMDAgKi8KKyNkZWZpbmUgS04wMV9SVENfQkFTRQkoS04wMV9TTE9UX0JBU0UgKyBLTjAxX1JUQykJLyogMHhCRDAwMDAwMCAqLworCisKKy8qCisgKiBGcmFtZSBidWZmZXIgbWVtb3J5IGFkZHJlc3MuCisgKi8KKyNkZWZpbmUgS04wMV9WRkJfTUVNCUtTRUcxQUREUigweDBmYzAwMDAwKQorCisvKgorICogQ1BVIGludGVycnVwdCBiaXRzLgorICovCisjZGVmaW5lIEtOMDFfQ1BVX0lOUl9CVVMJNgkvKiBtZW1vcnksIEkvTyBidXMgcmVhZC93cml0ZSBlcnJvcnMgKi8KKyNkZWZpbmUgS04wMV9DUFVfSU5SX1ZJREVPCTYJLyogUENDIGFyZWEgZGV0ZWN0ICMyICovCisjZGVmaW5lIEtOMDFfQ1BVX0lOUl9SVEMJNQkvKiBEUzEyODcgUlRDICovCisjZGVmaW5lIEtOMDFfQ1BVX0lOUl9EWjExCTQJLyogRFoxMSAoREM3MDg1KSBzZXJpYWwgKi8KKyNkZWZpbmUgS04wMV9DUFVfSU5SX0xBTkNFCTMJLyogTEFOQ0UgKEFtNzk5MCkgRXRoZXJuZXQgKi8KKyNkZWZpbmUgS04wMV9DUFVfSU5SX1NJSQkyCS8qIFNJSSAoREM3MDYxKSBTQ1NJICovCisKKworLyoKKyAqIFN5c3RlbSBDb250cm9sICYgU3RhdHVzIFJlZ2lzdGVyIGJpdHMuCisgKi8KKyNkZWZpbmUgS04wMV9DU1JfTU5GTU9ECQkoMTw8MTUpCS8qIE1ORk1PRCBtYW51ZmFjdHVyaW5nIGp1bXBlciAqLworI2RlZmluZSBLTjAxX0NTUl9TVEFUVVMJCSgxPDwxNCkJLyogc2VsZi10ZXN0IHJlc3VsdCBzdGF0dXMgb3V0cHV0ICovCisjZGVmaW5lIEtOMDFfQ1NSX1BBUkRJUwkJKDE8PDEzKQkvKiBwYXJpdHkgZXJyb3IgZGlzYWJsZSAqLworI2RlZmluZSBLTjAxX0NTUl9DUlNSVFNUCSgxPDwxMikJLyogUENDIHRlc3Qgb3V0cHV0ICovCisjZGVmaW5lIEtOMDFfQ1NSX01PTk8JCSgxPDwxMSkJLyogbW9uby9jb2xvciBmYiBTSU1NIGluc3RhbGxlZCAqLworI2RlZmluZSBLTjAxX0NTUl9NRU1FUlIJCSgxPDwxMCkJLyogd3JpdGUgdGltZW91dCBlcnJvciBzdGF0dXMgJiBhY2sqLworI2RlZmluZSBLTjAxX0NTUl9WSU5UCQkoMTw8OSkJLyogUENDIGFyZWEgZGV0ZWN0ICMyIHN0YXR1cyAmIGFjayAqLworI2RlZmluZSBLTjAxX0NTUl9UWERJUwkJKDE8PDgpCS8qIERaMTEgdHJhbnNtaXQgZGlzYWJsZSAqLworI2RlZmluZSBLTjAxX0NTUl9WQkdUUkcJCSgxPDwyKQkvKiBibHVlIERBQyB2b2x0YWdlIG92ZXIgZ3JlZW4gKHIvbykgKi8KKyNkZWZpbmUgS04wMV9DU1JfVlJHVFJHCQkoMTw8MSkJLyogcmVkIERBQyB2b2x0YWdlIG92ZXIgZ3JlZW4gKHIvbykgKi8KKyNkZWZpbmUgS04wMV9DU1JfVlJHVFJCCQkoMTw8MCkJLyogcmVkIERBQyB2b2x0YWdlIG92ZXIgYmx1ZSAoci9vKSAqLworI2RlZmluZSBLTjAxX0NTUl9MRURTCQkoMHhmZjw8MCkgLyogfmRpYWdub3N0aWMgTEVEcyAody9vKSAqLworCisjZW5kaWYgLyogX19BU01fTUlQU19ERUNfS04wMV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2RlYy9rbjAyLmggYi9pbmNsdWRlL2FzbS1taXBzL2RlYy9rbjAyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc5N2Y3MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvZGVjL2tuMDIuaApAQCAtMCwwICsxLDEwNiBAQAorLyoKKyAqIEhhcmR3YXJlIGluZm8gYWJvdXQgREVDc3RhdGlvbiA1MDAwLzIwMCBzeXN0ZW1zIChvdGhlcndpc2Uga25vd24gYXMKKyAqIDNtYXggb3IgS04wMikuCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LDE5OTYgYnkgUGF1bCBNLiBBbnRvaW5lLCBzb21lIGNvZGUgYW5kIGRlZmluaXRpb25zCisgKiBhcmUgYnkgY291cnRlc3kgb2YgQ2hyaXMgRnJhc2VyLgorICogQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzICBNYWNpZWogVy4gUm96eWNraQorICovCisjaWZuZGVmIF9fQVNNX01JUFNfREVDX0tOMDJfSAorI2RlZmluZSBfX0FTTV9NSVBTX0RFQ19LTjAyX0gKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KKyNpbmNsdWRlIDxhc20vZGVjL2VjYy5oPgorCisKKyNkZWZpbmUgS04wMl9TTE9UX0JBU0UJS1NFRzFBRERSKDB4MWZjMDAwMDApCisjZGVmaW5lIEtOMDJfU0xPVF9TSVpFCTB4MDAwODAwMDAKKworLyoKKyAqIEFkZHJlc3MgcmFuZ2VzIGRlY29kZWQgYnkgdGhlICJzeXN0ZW0gc2xvdCIgbG9naWMgZm9yIG9uYm9hcmQgZGV2aWNlcy4KKyAqLworI2RlZmluZSBLTjAyX1NZU19ST00JKDAqS04wMl9TTE9UX1NJWkUpCS8qIHN5c3RlbSBib2FyZCBST00gKi8KKyNkZWZpbmUgS04wMl9SRVNfMQkoMSpLTjAyX1NMT1RfU0laRSkJLyogdW51c2VkICovCisjZGVmaW5lIEtOMDJfQ0hLU1lOCSgyKktOMDJfU0xPVF9TSVpFKQkvKiBFQ0Mgc3luZHJvbWUgKi8KKyNkZWZpbmUgS04wMl9FUlJBRERSCSgzKktOMDJfU0xPVF9TSVpFKQkvKiBidXMgZXJyb3IgYWRkcmVzcyAqLworI2RlZmluZSBLTjAyX0RaMTEJKDQqS04wMl9TTE9UX1NJWkUpCS8qIERaMTEgKERDNzA4NSkgc2VyaWFsICovCisjZGVmaW5lIEtOMDJfUlRDCSg1KktOMDJfU0xPVF9TSVpFKQkvKiBEUzEyODcgUlRDICovCisjZGVmaW5lIEtOMDJfQ1NSCSg2KktOMDJfU0xPVF9TSVpFKQkvKiBzeXN0ZW0gY3RybCAmIHN0YXR1cyByZWcgKi8KKyNkZWZpbmUgS04wMl9TWVNfUk9NXzcJKDcqS04wMl9TTE9UX1NJWkUpCS8qIHN5c3RlbSBib2FyZCBST00gKGFsaWFzKSAqLworCisKKy8qCisgKiBTb21lIHBvcnQgYWRkcmVzc2VzLi4uCisgKi8KKyNkZWZpbmUgS04wMl9EWjExX0JBU0UJKEtOMDJfU0xPVF9CQVNFICsgS04wMl9EWjExKQkvKiBEWjExICovCisjZGVmaW5lIEtOMDJfUlRDX0JBU0UJKEtOMDJfU0xPVF9CQVNFICsgS04wMl9SVEMpCS8qIFJUQyAqLworI2RlZmluZSBLTjAyX0NTUl9CQVNFCShLTjAyX1NMT1RfQkFTRSArIEtOMDJfQ1NSKQkvKiBDU1IgKi8KKworCisvKgorICogU3lzdGVtIENvbnRyb2wgJiBTdGF0dXMgUmVnaXN0ZXIgYml0cy4KKyAqLworI2RlZmluZSBLTjAyX0NTUl9SRVNfMjgJCSgweGY8PDI4KQkvKiB1bnVzZWQgKi8KKyNkZWZpbmUgS04wMl9DU1JfUFNVCQkoMTw8MjcpCQkvKiBwb3dlciBzdXBwbHkgdW5pdCB3YXJuaW5nICovCisjZGVmaW5lIEtOMDJfQ1NSX05WUkFNCQkoMTw8MjYpCQkvKiB+TlZSQU0gY2xlYXIganVtcGVyICovCisjZGVmaW5lIEtOMDJfQ1NSX1JFRkVWRU4JKDE8PDI1KQkJLyogbWVtIHJlZnJlc2ggYmFuayB0b2dnbGUgKi8KKyNkZWZpbmUgS04wM19DU1JfTlJNT0QJCSgxPDwyNCkJCS8qIH5OUk1PRCBtYW51ZmFjdC4ganVtcGVyICovCisjZGVmaW5lIEtOMDNfQ1NSX0lPSU5URU4JKDB4ZmY8PDE2KQkvKiBJUlEgbWFzayBiaXRzICovCisjZGVmaW5lIEtOMDJfQ1NSX0RJQUdDSEsJKDE8PDE1KQkJLyogZGlhZ24vbm9ybWwgRUNDIHJlYWRzICovCisjZGVmaW5lIEtOMDJfQ1NSX0RJQUdHRU4JKDE8PDE0KQkJLyogZGlhZ24vbm9ybWwgRUNDIHdyaXRlcyAqLworI2RlZmluZSBLTjAyX0NTUl9DT1JSRUNUCSgxPDwxMykJCS8qIEVDQyBjb3JyZWN0L2NoZWNrICovCisjZGVmaW5lIEtOMDJfQ1NSX0xFRElBRwkJKDE8PDEyKQkJLyogRUNDIGRpYWduLiBsYXRjaCBzdHJvYmUgKi8KKyNkZWZpbmUgS04wMl9DU1JfVFhESVMJCSgxPDwxMSkJCS8qIERaMTEgdHJhbnNtaXQgZGlzYWJsZSAqLworI2RlZmluZSBLTjAyX0NTUl9CTkszMk0JCSgxPDwxMCkJCS8qIDMyTS84TSBzdHJpZGUgKi8KKyNkZWZpbmUgS04wMl9DU1JfRElBR0ROCQkoMTw8OSkJCS8qIERJQUdETiBtYW51ZmFjdC4ganVtcGVyICovCisjZGVmaW5lIEtOMDJfQ1NSX0JBVUQzOAkJKDE8PDgpCQkvKiBEWjExIDM4LzE5a2JwcyBleHQuIHJhdGUgKi8KKyNkZWZpbmUgS04wM19DU1JfSU9JTlQJCSgweGZmPDwwKQkvKiBJUlEgc3RhdHVzIGJpdHMgKHIvbykgKi8KKyNkZWZpbmUgS04wM19DU1JfTEVEUwkJKDB4ZmY8PDApCS8qIH5kaWFnbm9zdGljIExFRHMgKHcvbykgKi8KKworCisvKgorICogQ1BVIGludGVycnVwdCBiaXRzLgorICovCisjZGVmaW5lIEtOMDJfQ1BVX0lOUl9SRVNfNgk2CS8qIHVudXNlZCAqLworI2RlZmluZSBLTjAyX0NQVV9JTlJfQlVTCTUJLyogbWVtb3J5LCBJL08gYnVzIHJlYWQvd3JpdGUgZXJyb3JzICovCisjZGVmaW5lIEtOMDJfQ1BVX0lOUl9SRVNfNAk0CS8qIHVudXNlZCAqLworI2RlZmluZSBLTjAyX0NQVV9JTlJfUlRDCTMJLyogRFMxMjg3IFJUQyAqLworI2RlZmluZSBLTjAyX0NQVV9JTlJfQ0FTQ0FERQkyCS8qIENTUiBjYXNjYWRlICovCisKKy8qCisgKiBDU1IgaW50ZXJydXB0IGJpdHMuCisgKi8KKyNkZWZpbmUgS04wMl9DU1JfSU5SX0RaMTEJNwkvKiBEWjExIChEQzcwODUpIHNlcmlhbCAqLworI2RlZmluZSBLTjAyX0NTUl9JTlJfTEFOQ0UJNgkvKiBMQU5DRSAoQW03OTkwKSBFdGhlcm5ldCAqLworI2RlZmluZSBLTjAyX0NTUl9JTlJfQVNDCTUJLyogQVNDIChOQ1I1M0M5NCkgU0NTSSAqLworI2RlZmluZSBLTjAyX0NTUl9JTlJfUkVTXzQJNAkvKiB1bnVzZWQgKi8KKyNkZWZpbmUgS04wMl9DU1JfSU5SX1JFU18zCTMJLyogdW51c2VkICovCisjZGVmaW5lIEtOMDJfQ1NSX0lOUl9UQzIJMgkvKiBUVVJCT2NoYW5uZWwgc2xvdCAjMiAqLworI2RlZmluZSBLTjAyX0NTUl9JTlJfVEMxCTEJLyogVFVSQk9jaGFubmVsIHNsb3QgIzEgKi8KKyNkZWZpbmUgS04wMl9DU1JfSU5SX1RDMAkwCS8qIFRVUkJPY2hhbm5lbCBzbG90ICMwICovCisKKworI2RlZmluZSBLTjAyX0lSUV9CQVNFCQk4CS8qIGZpcnN0IElSUSBhc3NpZ25lZCB0byBDU1IgKi8KKyNkZWZpbmUgS04wMl9JUlFfTElORVMJCTgJLyogbnVtYmVyIG9mIENTUiBpbnRlcnJ1cHRzICovCisKKyNkZWZpbmUgS04wMl9JUlFfTlIobikJCSgobikgKyBLTjAyX0lSUV9CQVNFKQorI2RlZmluZSBLTjAyX0lSUV9NQVNLKG4pCSgxIDw8IChuKSkKKyNkZWZpbmUgS04wMl9JUlFfQUxMCQkweGZmCisKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK2V4dGVybiB1MzIgY2FjaGVkX2tuMDJfY3NyOworZXh0ZXJuIHNwaW5sb2NrX3Qga24wMl9sb2NrOworZXh0ZXJuIHZvaWQgaW5pdF9rbjAyX2lycXMoaW50IGJhc2UpOworI2VuZGlmCisKKyNlbmRpZiAvKiBfX0FTTV9NSVBTX0RFQ19LTjAyX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvZGVjL2tuMDJiYS5oIGIvaW5jbHVkZS9hc20tbWlwcy9kZWMva24wMmJhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk1N2E0ZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvZGVjL2tuMDJiYS5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKglpbmNsdWRlL2FzbS1taXBzL2RlYy9rbjAyYmEuaAorICoKKyAqCURFQ3N0YXRpb24gNTAwMC8xeHggKDNtaW4gb3IgS04wMi1CQSkgZGVmaW5pdGlvbnMuCisgKgorICoJQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzICBNYWNpZWogVy4gUm96eWNraQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKglhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpZm5kZWYgX19BU01fTUlQU19ERUNfS04wMkJBX0gKKyNkZWZpbmUgX19BU01fTUlQU19ERUNfS04wMkJBX0gKKworI2luY2x1ZGUgPGFzbS9kZWMva24wMnhhLmg+CQkvKiBGb3IgY29tbW9uIGRlZmluaXRpb25zLiAqLworCisvKgorICogQ1BVIGludGVycnVwdCBiaXRzLgorICovCisjZGVmaW5lIEtOMDJCQV9DUFVfSU5SX0hBTFQJNgkvKiBIQUxUIGJ1dHRvbiAqLworI2RlZmluZSBLTjAyQkFfQ1BVX0lOUl9DQVNDQURFCTUJLyogSS9PIEFTSUMgY2FzY2FkZSAqLworI2RlZmluZSBLTjAyQkFfQ1BVX0lOUl9UQzIJNAkvKiBUVVJCT2NoYW5uZWwgc2xvdCAjMiAqLworI2RlZmluZSBLTjAyQkFfQ1BVX0lOUl9UQzEJMwkvKiBUVVJCT2NoYW5uZWwgc2xvdCAjMSAqLworI2RlZmluZSBLTjAyQkFfQ1BVX0lOUl9UQzAJMgkvKiBUVVJCT2NoYW5uZWwgc2xvdCAjMCAqLworCisvKgorICogSS9PIEFTSUMgaW50ZXJydXB0IGJpdHMuICBTdGFyIG1hcmtzIGRlbm90ZSBub24tSVJRIHN0YXR1cyBiaXRzLgorICovCisjZGVmaW5lIEtOMDJCQV9JT19JTlJfUkVTXzE1CTE1CS8qIHVudXNlZCAqLworI2RlZmluZSBLTjAyQkFfSU9fSU5SX05WUkFNCTE0CS8qICgqKSBOVlJBTSBjbGVhciBqdW1wZXIgKi8KKyNkZWZpbmUgS04wMkJBX0lPX0lOUl9SRVNfMTMJMTMJLyogdW51c2VkICovCisjZGVmaW5lIEtOMDJCQV9JT19JTlJfQlVTCTEyCS8qIG1lbW9yeSwgSS9PIGJ1cyByZWFkL3dyaXRlIGVycm9ycyAqLworI2RlZmluZSBLTjAyQkFfSU9fSU5SX1JFU18xMQkxMQkvKiB1bnVzZWQgKi8KKyNkZWZpbmUgS04wMkJBX0lPX0lOUl9OUk1PRAkxMAkvKiAoKikgTlJNT0QgbWFudWZhY3R1cmluZyBqdW1wZXIgKi8KKyNkZWZpbmUgS04wMkJBX0lPX0lOUl9BU0MJOQkvKiBBU0MgKE5DUjUzQzk0KSBTQ1NJICovCisjZGVmaW5lIEtOMDJCQV9JT19JTlJfTEFOQ0UJOAkvKiBMQU5DRSAoQW03OTkwKSBFdGhlcm5ldCAqLworI2RlZmluZSBLTjAyQkFfSU9fSU5SX1NDQzEJNwkvKiBTQ0MgKFo4NUMzMCkgc2VyaWFsICMxICovCisjZGVmaW5lIEtOMDJCQV9JT19JTlJfU0NDMAk2CS8qIFNDQyAoWjg1QzMwKSBzZXJpYWwgIzAgKi8KKyNkZWZpbmUgS04wMkJBX0lPX0lOUl9SVEMJNQkvKiBEUzEyODcgUlRDICovCisjZGVmaW5lIEtOMDJCQV9JT19JTlJfUFNVCTQJLyogcG93ZXIgc3VwcGx5IHVuaXQgd2FybmluZyAqLworI2RlZmluZSBLTjAyQkFfSU9fSU5SX1JFU18zCTMJLyogdW51c2VkICovCisjZGVmaW5lIEtOMDJCQV9JT19JTlJfQVNDX0RBVEEJMgkvKiBTQ1NJIGRhdGEgcmVhZHkgKGZvciBQSU8pICovCisjZGVmaW5lIEtOMDJCQV9JT19JTlJfUEJOQwkxCS8qIH5IQUxUIGJ1dHRvbiBkZWJvdW5jZXIgKi8KKyNkZWZpbmUgS04wMkJBX0lPX0lOUl9QQk5PCTAJLyogSEFMVCBidXR0b24gZGVib3VuY2VyICovCisKKworLyoKKyAqIE1lbW9yeSBFcnJvciBSZWdpc3RlciBiaXRzLgorICovCisjZGVmaW5lIEtOMDJCQV9NRVJfUkVTXzI3CSgxPDwyNykJCS8qIHVudXNlZCAqLworCisvKgorICogTWVtb3J5IFNpemUgUmVnaXN0ZXIgYml0cy4KKyAqLworI2RlZmluZSBLTjAyQkFfTVNSX1JFU18xNwkoMHgzZmY8PDE3KQkvKiB1bnVzZWQgKi8KKworLyoKKyAqIEkvTyBBU0lDIFN5c3RlbSBTdXBwb3J0IFJlZ2lzdGVyIGJpdHMuCisgKi8KKyNkZWZpbmUgS04wMkJBX0lPX1NTUl9UWERJUzEJKDE8PDE0KQkJLyogU0NDMSB0cmFuc21pdCBkaXNhYmxlICovCisjZGVmaW5lIEtOMDJCQV9JT19TU1JfVFhESVMwCSgxPDwxMykJCS8qIFNDQzAgdHJhbnNtaXQgZGlzYWJsZSAqLworI2RlZmluZSBLTjAyQkFfSU9fU1NSX1JFU18xMgkoMTw8MTIpCQkvKiB1bnVzZWQgKi8KKworI2RlZmluZSBLTjAyQkFfSU9fU1NSX0xFRFMJKDB4ZmY8PDApCS8qIH5kaWFnbm9zdGljIExFRHMgKi8KKworI2VuZGlmIC8qIF9fQVNNX01JUFNfREVDX0tOMDJCQV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2RlYy9rbjAyY2EuaCBiL2luY2x1ZGUvYXNtLW1pcHMvZGVjL2tuMDJjYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyYzBmZTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2RlYy9rbjAyY2EuaApAQCAtMCwwICsxLDc5IEBACisvKgorICoJaW5jbHVkZS9hc20tbWlwcy9kZWMva24wMmNhLmgKKyAqCisgKglQZXJzb25hbCBERUNzdGF0aW9uIDUwMDAveHggKE1heGluZSBvciBLTjAyLUNBKSBkZWZpbml0aW9ucy4KKyAqCisgKglDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMgIE1hY2llaiBXLiBSb3p5Y2tpCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICoJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2lmbmRlZiBfX0FTTV9NSVBTX0RFQ19LTjAyQ0FfSAorI2RlZmluZSBfX0FTTV9NSVBTX0RFQ19LTjAyQ0FfSAorCisjaW5jbHVkZSA8YXNtL2RlYy9rbjAyeGEuaD4JCS8qIEZvciBjb21tb24gZGVmaW5pdGlvbnMuICovCisKKy8qCisgKiBDUFUgaW50ZXJydXB0IGJpdHMuCisgKi8KKyNkZWZpbmUgS04wMkNBX0NQVV9JTlJfSEFMVAk2CS8qIEhBTFQgZnJvbSBBQ0NFU1MuQnVzICovCisjZGVmaW5lIEtOMDJDQV9DUFVfSU5SX0NBU0NBREUJNQkvKiBJL08gQVNJQyBjYXNjYWRlICovCisjZGVmaW5lIEtOMDJDQV9DUFVfSU5SX0JVUwk0CS8qIG1lbW9yeSwgSS9PIGJ1cyByZWFkL3dyaXRlIGVycm9ycyAqLworI2RlZmluZSBLTjAyQ0FfQ1BVX0lOUl9SVEMJMwkvKiBEUzEyODcgUlRDICovCisjZGVmaW5lIEtOMDJDQV9DUFVfSU5SX1RJTUVSCTIJLyogQVJDIHBlcmlvZGljIHRpbWVyICovCisKKy8qCisgKiBJL08gQVNJQyBpbnRlcnJ1cHQgYml0cy4gIFN0YXIgbWFya3MgZGVub3RlIG5vbi1JUlEgc3RhdHVzIGJpdHMuCisgKi8KKyNkZWZpbmUgS04wMkNBX0lPX0lOUl9GTE9QUFkJMTUJLyogODIwNzcgRkRDICovCisjZGVmaW5lIEtOMDJDQV9JT19JTlJfTlZSQU0JMTQJLyogKCopIE5WUkFNIGNsZWFyIGp1bXBlciAqLworI2RlZmluZSBLTjAyQ0FfSU9fSU5SX1BPV0VST04JMTMJLyogKCopIEFDQ0VTUy5CdXMvcG93ZXItb24gcmVzZXQgKi8KKyNkZWZpbmUgS04wMkNBX0lPX0lOUl9UQzAJMTIJLyogVFVSQk9jaGFubmVsIHNsb3QgIzAgKi8KKyNkZWZpbmUgS04wMkNBX0lPX0lOUl9USU1FUgkxMgkvKiBBUkMgcGVyaW9kaWMgdGltZXIgKD8pICovCisjZGVmaW5lIEtOMDJDQV9JT19JTlJfSVNETgkxMQkvKiBBbTc5QzMwQSBJU0ROICovCisjZGVmaW5lIEtOMDJDQV9JT19JTlJfTlJNT0QJMTAJLyogKCopIE5STU9EIG1hbnVmYWN0dXJpbmcganVtcGVyICovCisjZGVmaW5lIEtOMDJDQV9JT19JTlJfQVNDCTkJLyogQVNDIChOQ1I1M0M5NCkgU0NTSSAqLworI2RlZmluZSBLTjAyQ0FfSU9fSU5SX0xBTkNFCTgJLyogTEFOQ0UgKEFtNzk5MCkgRXRoZXJuZXQgKi8KKyNkZWZpbmUgS04wMkNBX0lPX0lOUl9IREZMT1BQWQk3CS8qICgqKSBIRCAoMS40NE1CKSBmbG9wcHkgc3RhdHVzICovCisjZGVmaW5lIEtOMDJDQV9JT19JTlJfU0NDMAk2CS8qIFNDQyAoWjg1QzMwKSBzZXJpYWwgIzAgKi8KKyNkZWZpbmUgS04wMkNBX0lPX0lOUl9UQzEJNQkvKiBUVVJCT2NoYW5uZWwgc2xvdCAjMSAqLworI2RlZmluZSBLTjAyQ0FfSU9fSU5SX1hERkxPUFBZCTQJLyogKCopIFhEICgyLjg4TUIpIGZsb3BweSBzdGF0dXMgKi8KKyNkZWZpbmUgS04wMkNBX0lPX0lOUl9WSURFTwkzCS8qIGZyYW1lYnVmZmVyICovCisjZGVmaW5lIEtOMDJDQV9JT19JTlJfWFZJREVPCTIJLyogfmZyYW1lYnVmZmVyICovCisjZGVmaW5lIEtOMDJDQV9JT19JTlJfQUJfWE1JVAkxCS8qIEFDQ0VTUy5idXMgdHJhbnNtaXQgKi8KKyNkZWZpbmUgS04wMkNBX0lPX0lOUl9BQl9SRUNWCTAJLyogQUNDRVNTLmJ1cyByZWNlaXZlICovCisKKworLyoKKyAqIE1lbW9yeSBFcnJvciBSZWdpc3RlciBiaXRzLgorICovCisjZGVmaW5lIEtOMDJDQV9NRVJfSU5UUgkJKDE8PDI3KQkJLyogQVJDIElSUSBzdGF0dXMgJiBhY2sgKi8KKworLyoKKyAqIE1lbW9yeSBTaXplIFJlZ2lzdGVyIGJpdHMuCisgKi8KKyNkZWZpbmUgS04wMkNBX01TUl9JTlRSRU4JKDE8PDI2KQkJLyogQVJDIHBlcmlvZGljIElSUSBlbmFibGUgKi8KKyNkZWZpbmUgS04wMkNBX01TUl9NUzEwRU4JKDE8PDI1KQkJLyogMTAvMW1zIElSUSBwZXJpb2Qgc2VsZWN0ICovCisjZGVmaW5lIEtOMDJDQV9NU1JfUEZPUkNFCSgweGY8PDIxKQkvKiBieXRlIGxhbmUgZXJyb3IgZm9yY2UgKi8KKyNkZWZpbmUgS04wMkNBX01TUl9NQUJFTgkoMTw8MjApCQkvKiBBIHNpZGUgVkZCIGFkZHJlc3MgZW5hYmxlICovCisjZGVmaW5lIEtOMDJDQV9NU1JfTEFTVEJBTksJKDB4Nzw8MTcpCS8qIG9uYm9hcmQgUkFNIGJhbmsgIyAqLworCisvKgorICogSS9PIEFTSUMgU3lzdGVtIFN1cHBvcnQgUmVnaXN0ZXIgYml0cy4KKyAqLworI2RlZmluZSBLTjAzQ0FfSU9fU1NSX1JFU18xNAkoMTw8MTQpCQkvKiB1bnVzZWQgKi8KKyNkZWZpbmUgS04wM0NBX0lPX1NTUl9SRVNfMTMJKDE8PDEzKQkJLyogdW51c2VkICovCisjZGVmaW5lIEtOMDNDQV9JT19TU1JfSVNETl9SU1QJKDE8PDEyKQkJLyogfklTRE4gKEFtNzlDMzBBKSByZXNldCAqLworCisjZGVmaW5lIEtOMDNDQV9JT19TU1JfRkxPUFBZX1JTVCAoMTw8NykJCS8qIH5GREMgKDgyMDc3KSByZXNldCAqLworI2RlZmluZSBLTjAzQ0FfSU9fU1NSX1ZJREVPX1JTVAkoMTw8NikJCS8qIH5mcmFtZWJ1ZmZlciByZXNldCAqLworI2RlZmluZSBLTjAzQ0FfSU9fU1NSX0FCX1JTVAkoMTw8NSkJCS8qIEFDQ0VTUy5idXMgcmVzZXQgKi8KKyNkZWZpbmUgS04wM0NBX0lPX1NTUl9SRVNfNAkoMTw8NCkJCS8qIHVudXNlZCAqLworI2RlZmluZSBLTjAzQ0FfSU9fU1NSX1JFU18zCSgxPDw0KQkJLyogdW51c2VkICovCisjZGVmaW5lIEtOMDNDQV9JT19TU1JfUkVTXzIJKDE8PDIpCQkvKiB1bnVzZWQgKi8KKyNkZWZpbmUgS04wM0NBX0lPX1NTUl9SRVNfMQkoMTw8MSkJCS8qIHVudXNlZCAqLworI2RlZmluZSBLTjAzQ0FfSU9fU1NSX0xFRAkoMTw8MCkJCS8qIHBvd2VyIExFRCAqLworCisjZW5kaWYgLyogX19BU01fTUlQU19ERUNfS04wMkNBX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvZGVjL2tuMDJ4YS5oIGIvaW5jbHVkZS9hc20tbWlwcy9kZWMva24wMnhhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ4YzRkYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvZGVjL2tuMDJ4YS5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBIYXJkd2FyZSBpbmZvIGNvbW1vbiB0byBERUNzdGF0aW9uIDUwMDAvMXh4IHN5c3RlbXMgKG90aGVyd2lzZQorICoga25vd24gYXMgM21pbiBvciBrbjAyYmEpIGFuZCBQZXJzb25hbCBERUNzdGF0aW9ucyA1MDAwL3h4IG9uZXMKKyAqIChvdGhlcndpc2Uga25vd24gYXMgbWF4aW5lIG9yIGtuMDJjYSkuCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LDE5OTYgYnkgUGF1bCBNLiBBbnRvaW5lLCBzb21lIGNvZGUgYW5kIGRlZmluaXRpb25zCisgKiBhcmUgYnkgY291cnRlc3kgb2YgQ2hyaXMgRnJhc2VyLgorICogQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAyLCAyMDAzICBNYWNpZWogVy4gUm96eWNraQorICoKKyAqIFRoZXNlIGFyZSBhZGRyZXNzZXMgd2hpY2ggaGF2ZSB0byBiZSBrbm93biBlYXJseSBpbiB0aGUgYm9vdCBwcm9jZXNzLgorICogRm9yIG90aGVyIGFkZHJlc3NlcyByZWZlciB0byB0Yy5oLCBpb2FzaWNfYWRkcnMuaCBhbmQgZnJpZW5kcy4KKyAqLworI2lmbmRlZiBfX0FTTV9NSVBTX0RFQ19LTjAyWEFfSAorI2RlZmluZSBfX0FTTV9NSVBTX0RFQ19LTjAyWEFfSAorCisjaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgorI2luY2x1ZGUgPGFzbS9kZWMvaW9hc2ljX2FkZHJzLmg+CisKKyNkZWZpbmUgS04wMlhBX1NMT1RfQkFTRQlLU0VHMUFERFIoMHgxYzAwMDAwMCkKKworLyoKKyAqIFNvbWUgcG9ydCBhZGRyZXNzZXMuLi4KKyAqLworI2RlZmluZSBLTjAyWEFfSU9BU0lDX0JBU0UgICAgKEtOMDJYQV9TTE9UX0JBU0UgKyBJT0FTSUNfSU9DVEwpCS8qIEkvTyBBU0lDICovCisjZGVmaW5lIEtOMDJYQV9SVENfQkFTRQkJKEtOMDJYQV9TTE9UX0JBU0UgKyBJT0FTSUNfVE9ZKQkvKiBSVEMgKi8KKworCisvKgorICogTWVtb3J5IGNvbnRyb2wgQVNJQyByZWdpc3RlcnMuCisgKi8KKyNkZWZpbmUgS04wMlhBX01FUglLU0VHMUFERFIoMHgwYzQwMDAwMCkJLyogbWVtb3J5IGVycm9yIHJlZ2lzdGVyICovCisjZGVmaW5lIEtOMDJYQV9NU1IJS1NFRzFBRERSKDB4MGM4MDAwMDApCS8qIG1lbW9yeSBzaXplIHJlZ2lzdGVyICovCisKKy8qCisgKiBDUFUgY29udHJvbCBBU0lDIHJlZ2lzdGVycy4KKyAqLworI2RlZmluZSBLTjAyWEFfTUVNX0NPTkYJS1NFRzFBRERSKDB4MGUwMDAwMDApCS8qIHdyaXRlIHRpbWVvdXQgY29uZmlnICovCisjZGVmaW5lIEtOMDJYQV9FQVIJS1NFRzFBRERSKDB4MGUwMDAwMDQpCS8qIGVycm9yIGFkZHJlc3MgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgS04wMlhBX0JPT1QwCUtTRUcxQUREUigweDBlMDAwMDA4KQkvKiBib290IDAgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgS04wMlhBX01FTV9JTlRSCUtTRUcxQUREUigweDBlMDAwMDBjKQkvKiB3cml0ZSBlcnIgSVJRIHN0YXQgJiBhY2sgKi8KKworLyoKKyAqIE1lbW9yeSBFcnJvciBSZWdpc3RlciBiaXRzLCBjb21tb24gZGVmaW5pdGlvbnMuCisgKiBUaGUgcmVzdCBpcyBkZWZpbmVkIGluIHN5c3RlbS1zcGVjaWZpYyBoZWFkZXJzLgorICovCisjZGVmaW5lIEtOMDJYQV9NRVJfUkVTXzI4CSgweGY8PDI4KQkvKiB1bnVzZWQgKi8KKyNkZWZpbmUgS04wMlhBX01FUl9SRVNfMTcJKDB4M2ZmPDwxNykJLyogdW51c2VkICovCisjZGVmaW5lIEtOMDJYQV9NRVJfUEFHRVJSCSgxPDwxNikJCS8qIDJrIHBhZ2UgYm91bmRhcnkgZXJyb3IgKi8KKyNkZWZpbmUgS04wMlhBX01FUl9UUkFOU0VSUgkoMTw8MTUpCQkvKiB0cmFuc2ZlciBsZW5ndGggZXJyb3IgKi8KKyNkZWZpbmUgS04wMlhBX01FUl9QQVJESVMJKDE8PDE0KQkJLyogcGFyaXR5IGVycm9yIGRpc2FibGUgKi8KKyNkZWZpbmUgS04wMlhBX01FUl9SRVNfMTIJKDB4Mzw8MTIpCS8qIHVudXNlZCAqLworI2RlZmluZSBLTjAyWEFfTUVSX0JZVEVSUgkoMHhmPDw4KQkvKiBieXRlIGxhbmUgZXJyb3IgYml0bWFzayAqLworI2RlZmluZSBLTjAyWEFfTUVSX1JFU18wCSgweGZmPDwwKQkvKiB1bnVzZWQgKi8KKworLyoKKyAqIE1lbW9yeSBTaXplIFJlZ2lzdGVyIGJpdHMsIGNvbW1vbiBkZWZpbml0aW9ucy4KKyAqIFRoZSByZXN0IGlzIGRlZmluZWQgaW4gc3lzdGVtLXNwZWNpZmljIGhlYWRlcnMuCisgKi8KKyNkZWZpbmUgS04wMlhBX01TUl9SRVNfMjcJKDB4MWY8PDI3KQkvKiB1bnVzZWQgKi8KKyNkZWZpbmUgS04wMlhBX01TUl9SRVNfMTQJKDB4Nzw8MTQpCS8qIHVudXNlZCAqLworI2RlZmluZSBLTjAyWEFfTVNSX1NJWkUJCSgxPDwxMykJCS8qIDE2TS80TSBzdHJpZGUgKi8KKyNkZWZpbmUgS04wMlhBX01TUl9SRVNfMAkoMHgxZmZmPDwwKQkvKiB1bnVzZWQgKi8KKworLyoKKyAqIEVycm9yIEFkZHJlc3MgUmVnaXN0ZXIgYml0cy4KKyAqLworI2RlZmluZSBLTjAyWEFfRUFSX1JFU18yOQkoMHg3PDwyOSkJLyogdW51c2VkICovCisjZGVmaW5lIEtOMDJYQV9FQVJfQUREUkVTUwkoMHg3ZmZmZmZmPDwyKQkvKiBhZGRyZXNzIGludm9sdmVkICovCisjZGVmaW5lIEtOMDJYQV9FQVJfUkVTXzAJKDB4Mzw8MCkJLyogdW51c2VkICovCisKKyNlbmRpZiAvKiBfX0FTTV9NSVBTX0RFQ19LTjAyWEFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9kZWMva24wMy5oIGIvaW5jbHVkZS9hc20tbWlwcy9kZWMva24wMy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3NmFiZDEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2RlYy9rbjAzLmgKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIEhhcmR3YXJlIGluZm8gYWJvdXQgREVDc3RhdGlvbiA1MDAwLzJ4MCBzeXN0ZW1zIChvdGhlcndpc2Uga25vd24gYXMKKyAqIDNtYXgrKSBhbmQgREVDc3lzdGVtIDU5MDAgc3lzdGVtcyAob3RoZXJ3aXNlIGtub3duIGFzIGJpZ21heCkgd2hpY2gKKyAqIGRpZmZlciBtZWNoYW5pY2FsbHkgYnV0IGFyZSBvdGhlcndpc2UgaWRlbnRpY2FsIChib3RoIGFyZSBrbm93biBhcworICogS04wMykuCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LDE5OTYgYnkgUGF1bCBNLiBBbnRvaW5lLCBzb21lIGNvZGUgYW5kIGRlZmluaXRpb25zCisgKiBhcmUgYnkgY291cnRlc3kgb2YgQ2hyaXMgRnJhc2VyLgorICogQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAyLCAyMDAzICBNYWNpZWogVy4gUm96eWNraQorICovCisjaWZuZGVmIF9fQVNNX01JUFNfREVDX0tOMDNfSAorI2RlZmluZSBfX0FTTV9NSVBTX0RFQ19LTjAzX0gKKworI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KKyNpbmNsdWRlIDxhc20vZGVjL2VjYy5oPgorI2luY2x1ZGUgPGFzbS9kZWMvaW9hc2ljX2FkZHJzLmg+CisKKyNkZWZpbmUgS04wM19TTE9UX0JBU0UJS1NFRzFBRERSKDB4MWY4MDAwMDApCisKKy8qCisgKiBTb21lIHBvcnQgYWRkcmVzc2VzLi4uCisgKi8KKyNkZWZpbmUgS04wM19JT0FTSUNfQkFTRQkoS04wM19TTE9UX0JBU0UgKyBJT0FTSUNfSU9DVEwpCS8qIEkvTyBBU0lDICovCisjZGVmaW5lIEtOMDNfUlRDX0JBU0UJCShLTjAzX1NMT1RfQkFTRSArIElPQVNJQ19UT1kpCS8qIFJUQyAqLworI2RlZmluZSBLTjAzX01DUl9CQVNFCQkoS04wM19TTE9UX0JBU0UgKyBJT0FTSUNfTUNSKQkvKiBNQ1IgKi8KKworCisvKgorICogQ1BVIGludGVycnVwdCBiaXRzLgorICovCisjZGVmaW5lIEtOMDNfQ1BVX0lOUl9IQUxUCTYJLyogSEFMVCBidXR0b24gKi8KKyNkZWZpbmUgS04wM19DUFVfSU5SX0JVUwk1CS8qIG1lbW9yeSwgSS9PIGJ1cyByZWFkL3dyaXRlIGVycm9ycyAqLworI2RlZmluZSBLTjAzX0NQVV9JTlJfUkVTXzQJNAkvKiB1bnVzZWQgKi8KKyNkZWZpbmUgS04wM19DUFVfSU5SX1JUQwkzCS8qIERTMTI4NyBSVEMgKi8KKyNkZWZpbmUgS04wM19DUFVfSU5SX0NBU0NBREUJMgkvKiBJL08gQVNJQyBjYXNjYWRlICovCisKKy8qCisgKiBJL08gQVNJQyBpbnRlcnJ1cHQgYml0cy4gIFN0YXIgbWFya3MgZGVub3RlIG5vbi1JUlEgc3RhdHVzIGJpdHMuCisgKi8KKyNkZWZpbmUgS04wM19JT19JTlJfM01BWFAJMTUJLyogKCopIDNtYXgrL2JpZ21heCBJRCAqLworI2RlZmluZSBLTjAzX0lPX0lOUl9OVlJBTQkxNAkvKiAoKikgTlZSQU0gY2xlYXIganVtcGVyICovCisjZGVmaW5lIEtOMDNfSU9fSU5SX1RDMgkJMTMJLyogVFVSQk9jaGFubmVsIHNsb3QgIzIgKi8KKyNkZWZpbmUgS04wM19JT19JTlJfVEMxCQkxMgkvKiBUVVJCT2NoYW5uZWwgc2xvdCAjMSAqLworI2RlZmluZSBLTjAzX0lPX0lOUl9UQzAJCTExCS8qIFRVUkJPY2hhbm5lbCBzbG90ICMwICovCisjZGVmaW5lIEtOMDNfSU9fSU5SX05STU9ECTEwCS8qICgqKSBOUk1PRCBtYW51ZmFjdHVyaW5nIGp1bXBlciAqLworI2RlZmluZSBLTjAzX0lPX0lOUl9BU0MJCTkJLyogQVNDIChOQ1I1M0M5NCkgU0NTSSAqLworI2RlZmluZSBLTjAzX0lPX0lOUl9MQU5DRQk4CS8qIExBTkNFIChBbTc5OTApIEV0aGVybmV0ICovCisjZGVmaW5lIEtOMDNfSU9fSU5SX1NDQzEJNwkvKiBTQ0MgKFo4NUMzMCkgc2VyaWFsICMxICovCisjZGVmaW5lIEtOMDNfSU9fSU5SX1NDQzAJNgkvKiBTQ0MgKFo4NUMzMCkgc2VyaWFsICMwICovCisjZGVmaW5lIEtOMDNfSU9fSU5SX1JUQwkJNQkvKiBEUzEyODcgUlRDICovCisjZGVmaW5lIEtOMDNfSU9fSU5SX1BTVQkJNAkvKiBwb3dlciBzdXBwbHkgdW5pdCB3YXJuaW5nICovCisjZGVmaW5lIEtOMDNfSU9fSU5SX1JFU18zCTMJLyogdW51c2VkICovCisjZGVmaW5lIEtOMDNfSU9fSU5SX0FTQ19EQVRBCTIJLyogU0NTSSBkYXRhIHJlYWR5IChmb3IgUElPKSAqLworI2RlZmluZSBLTjAzX0lPX0lOUl9QQk5DCTEJLyogfkhBTFQgYnV0dG9uIGRlYm91bmNlciAqLworI2RlZmluZSBLTjAzX0lPX0lOUl9QQk5PCTAJLyogSEFMVCBidXR0b24gZGVib3VuY2VyICovCisKKworLyoKKyAqIE1lbW9yeSBDb250cm9sIFJlZ2lzdGVyIGJpdHMuCisgKi8KKyNkZWZpbmUgS04wM19NQ1JfUkVTXzE2CQkoMHhmZmZmPDwxNikJLyogdW51c2VkICovCisjZGVmaW5lIEtOMDNfTUNSX0RJQUdDSEsJKDE8PDE1KQkJLyogZGlhZ24vbm9ybWwgRUNDIHJlYWRzICovCisjZGVmaW5lIEtOMDNfTUNSX0RJQUdHRU4JKDE8PDE0KQkJLyogZGlhZ24vbm9ybWwgRUNDIHdyaXRlcyAqLworI2RlZmluZSBLTjAzX01DUl9DT1JSRUNUCSgxPDwxMykJCS8qIEVDQyBjb3JyZWN0L2NoZWNrICovCisjZGVmaW5lIEtOMDNfTUNSX1JFU18xMQkJKDB4Mzw8MTIpCS8qIHVudXNlZCAqLworI2RlZmluZSBLTjAzX01DUl9CTkszMk0JCSgxPDwxMCkJCS8qIDMyTS84TSBzdHJpZGUgKi8KKyNkZWZpbmUgS04wM19NQ1JfUkVTXzcJCSgweDc8PDcpCS8qIHVudXNlZCAqLworI2RlZmluZSBLTjAzX01DUl9DSEVDSwkJKDB4N2Y8PDApCS8qIGRpYWdub3N0aWMgY2hlY2sgYml0cyAqLworCisvKgorICogSS9PIEFTSUMgU3lzdGVtIFN1cHBvcnQgUmVnaXN0ZXIgYml0cy4KKyAqLworI2RlZmluZSBLTjAzX0lPX1NTUl9UWERJUzEJKDE8PDE0KQkJLyogU0NDMSB0cmFuc21pdCBkaXNhYmxlICovCisjZGVmaW5lIEtOMDNfSU9fU1NSX1RYRElTMAkoMTw8MTMpCQkvKiBTQ0MwIHRyYW5zbWl0IGRpc2FibGUgKi8KKyNkZWZpbmUgS04wM19JT19TU1JfUkVTXzEyCSgxPDwxMikJCS8qIHVudXNlZCAqLworCisjZGVmaW5lIEtOMDNfSU9fU1NSX0xFRFMJKDB4ZmY8PDApCS8qIH5kaWFnbm9zdGljIExFRHMgKi8KKworI2VuZGlmIC8qIF9fQVNNX01JUFNfREVDX0tOMDNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9kZWMva24wNS5oIGIvaW5jbHVkZS9hc20tbWlwcy9kZWMva24wNS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxMjAzNjIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2RlYy9rbjA1LmgKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqCWluY2x1ZGUvYXNtLW1pcHMvZGVjL2tuMDUuaAorICoKKyAqCURFQ3N0YXRpb24gNTAwMC8yNjAgKDRtYXgrIG9yIEtOMDUpIGFuZCBERUNzeXN0ZW0gNTkwMC8yNjAKKyAqCWRlZmluaXRpb25zLgorICoKKyAqCUNvcHlyaWdodCAoQykgMjAwMiwgMjAwMyAgTWFjaWVqIFcuIFJvenlja2kKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICoJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKgkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqCVdBUk5JTkchICBBbGwgdGhpcyBpbmZvcm1hdGlvbiBpcyBwdXJlIGd1ZXNzd29yayBiYXNlZCBvbiB0aGUKKyAqCVJPTS4gIEl0IGlzIHByb3ZpZGVkIGhlcmUgaW4gaG9wZSBpdCB3aWxsIGdpdmUgc29tZW9uZSBzb21lCisgKglmb29kIGZvciB0aG91Z2h0LiAgTm8gZG9jdW1lbnRhdGlvbiBmb3IgdGhlIEtOMDUgbW9kdWxlIGhhcworICoJYmVlbiBsb2NhdGVkIHNvIGZhci4KKyAqLworI2lmbmRlZiBfX0FTTV9NSVBTX0RFQ19LTjA1X0gKKyNkZWZpbmUgX19BU01fTUlQU19ERUNfS04wNV9ICisKKyNpbmNsdWRlIDxhc20vZGVjL2lvYXNpY19hZGRycy5oPgorCisvKgorICogVGhlIG9uY2FyZCBNQiAoTWVtb3J5IEJ1ZmZlcikgQVNJQyBwcm92aWRlcyBhbiBhZGRpdGlvbmFsIGFkZHJlc3MKKyAqIGRlY29kZXIuICBDZXJ0YWluIGFkZHJlc3MgcmFuZ2VzIHdpdGhpbiB0aGUgImhpZ2giIDE2IHNsb3RzIGFyZQorICogcGFzc2VkIHRvIHRoZSBJL08gQVNJQydzIGRlY29kZXIgbGlrZSB3aXRoIHRoZSBLTjAzLiAgT3RoZXJzIGFyZQorICogaGFuZGxlZCBsb2NhbGx5LiAgIkxvdyIgc2xvdHMgYXJlIGFsd2F5cyBwYXNzZWQuCisgKi8KKyNkZWZpbmUgS04wNV9NQl9ST00JKDE2KklPQVNJQ19TTE9UX1NJWkUpCS8qIEtOMDUgY2FyZCBST00gKi8KKyNkZWZpbmUgS04wNV9JT0NUTAkoMTcqSU9BU0lDX1NMT1RfU0laRSkJLyogSS9PIEFTSUMgKi8KKyNkZWZpbmUgS04wNV9FU0FSCSgxOCpJT0FTSUNfU0xPVF9TSVpFKQkvKiBMQU5DRSBNQUMgYWRkcmVzcyBjaGlwICovCisjZGVmaW5lIEtOMDVfTEFOQ0UJKDE5KklPQVNJQ19TTE9UX1NJWkUpCS8qIExBTkNFIEV0aGVybmV0ICovCisjZGVmaW5lIEtOMDVfTUJfSU5UCSgyMCpJT0FTSUNfU0xPVF9TSVpFKQkvKiBNQiBpbnRlcnJ1cHQgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgS04wNV9NQl9FQQkoMjEqSU9BU0lDX1NMT1RfU0laRSkJLyogTUIgZXJyb3IgYWRkcmVzcz8gKi8KKyNkZWZpbmUgS04wNV9NQl9FQwkoMjIqSU9BU0lDX1NMT1RfU0laRSkJLyogTUIgZXJyb3IgPz8/ICovCisjZGVmaW5lIEtOMDVfTUJfQ1NSCSgyMypJT0FTSUNfU0xPVF9TSVpFKQkvKiBNQiBjb250cm9sICYgc3RhdHVzICovCisjZGVmaW5lIEtOMDVfUkVTXzI0CSgyNCpJT0FTSUNfU0xPVF9TSVpFKQkvKiB1bnVzZWQ/ICovCisjZGVmaW5lIEtOMDVfUkVTXzI1CSgyNSpJT0FTSUNfU0xPVF9TSVpFKQkvKiB1bnVzZWQ/ICovCisjZGVmaW5lIEtOMDVfUkVTXzI2CSgyNipJT0FTSUNfU0xPVF9TSVpFKQkvKiB1bnVzZWQ/ICovCisjZGVmaW5lIEtOMDVfUkVTXzI3CSgyNypJT0FTSUNfU0xPVF9TSVpFKQkvKiB1bnVzZWQ/ICovCisjZGVmaW5lIEtOMDVfU0NTSQkoMjgqSU9BU0lDX1NMT1RfU0laRSkJLyogQVNDIFNDU0kgKi8KKyNkZWZpbmUgS04wNV9SRVNfMjkJKDI5KklPQVNJQ19TTE9UX1NJWkUpCS8qIHVudXNlZD8gKi8KKyNkZWZpbmUgS04wNV9SRVNfMzAJKDMwKklPQVNJQ19TTE9UX1NJWkUpCS8qIHVudXNlZD8gKi8KKyNkZWZpbmUgS04wNV9SRVNfMzEJKDMxKklPQVNJQ19TTE9UX1NJWkUpCS8qIHVudXNlZD8gKi8KKworLyoKKyAqIEJpdHMgZm9yIHRoZSBNQiBpbnRlcnJ1cHQgcmVnaXN0ZXIuCisgKiBUaGUgcmVnaXN0ZXIgYXBwZWFycyByZWFkLW9ubHkuCisgKi8KKyNkZWZpbmUgS04wNV9NQl9JTlRfVEMJCSgxPDwwKQkJLyogVFVSQk9jaGFubmVsPyAqLworI2RlZmluZSBLTjA1X01CX0lOVF9SVEMJCSgxPDwxKQkJLyogUlRDPyAqLworI2RlZmluZSBLTjA1X01CX0lOVF9NVAkJKDE8PDMpCQkvKiA/Pz8gKi8KKworLyoKKyAqIEJpdHMgZm9yIHRoZSBNQiBjb250cm9sICYgc3RhdHVzIHJlZ2lzdGVyLgorICogU2V0IHRvIDB4MDBiZjgwMDEgb24gbXkgc3lzdGVtIGJ5IHRoZSBST00uCisgKi8KKyNkZWZpbmUgS04wNV9NQl9DU1JfUEYJCSgxPDwwKQkJLyogUHJlRmV0Y2hpbmcgZW5hYmxlPyAqLworI2RlZmluZSBLTjA1X01CX0NTUl9GCQkoMTw8MSkJCS8qID8/PyAqLworI2RlZmluZSBLTjA1X01CX0NTUl9FQ0MJCSgweGZmPDwyKQkvKiA/Pz8gKi8KKyNkZWZpbmUgS04wNV9NQl9DU1JfT0QJCSgxPDwxMCkJCS8qID8/PyAqLworI2RlZmluZSBLTjA1X01CX0NTUl9DUAkJKDE8PDExKQkJLyogPz8/ICovCisjZGVmaW5lIEtOMDVfTUJfQ1NSX1VOQwkJKDE8PDEyKQkJLyogPz8/ICovCisjZGVmaW5lIEtOMDVfTUJfQ1NSX0lNCQkoMTw8MTMpCQkvKiA/Pz8gKi8KKyNkZWZpbmUgS04wNV9NQl9DU1JfTkMJCSgxPDwxNCkJCS8qID8/PyAqLworI2RlZmluZSBLTjA1X01CX0NTUl9FRQkJKDE8PDE1KQkJLyogKGJ1cykgRXhjZXB0aW9uIEVuYWJsZT8gKi8KKyNkZWZpbmUgS04wNV9NQl9DU1JfTVNLCQkoMHgxZjw8MTYpCS8qID8/PyAqLworI2RlZmluZSBLTjA1X01CX0NTUl9GVwkJKDE8PDIxKQkJLyogPz8/ICovCisKKyNlbmRpZiAvKiBfX0FTTV9NSVBTX0RFQ19LTjA1X0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvZGVjL2tuMjMwLmggYi9pbmNsdWRlL2FzbS1taXBzL2RlYy9rbjIzMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmMWJmMTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2RlYy9rbjIzMC5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKglpbmNsdWRlL2FzbS1taXBzL2RlYy9rbjIzMC5oCisgKgorICoJREVDc3lzdGVtIDUxMDAgKE1JUFNtYXRlIG9yIEtOMjMwKSBkZWZpbml0aW9ucy4KKyAqCisgKglDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMgIE1hY2llaiBXLiBSb3p5Y2tpCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICoJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2lmbmRlZiBfX0FTTV9NSVBTX0RFQ19LTjIzMF9ICisjZGVmaW5lIF9fQVNNX01JUFNfREVDX0tOMjMwX0gKKworLyoKKyAqIENQVSBpbnRlcnJ1cHQgYml0cy4KKyAqLworI2RlZmluZSBLTjIzMF9DUFVfSU5SX0hBTFQJNgkvKiBIQUxUIGJ1dHRvbiAqLworI2RlZmluZSBLTjIzMF9DUFVfSU5SX0JVUwk1CS8qIG1lbW9yeSwgSS9PIGJ1cyByZWFkL3dyaXRlIGVycm9ycyAqLworI2RlZmluZSBLTjIzMF9DUFVfSU5SX1JUQwk0CS8qIERTMTI4NyBSVEMgKi8KKyNkZWZpbmUgS04yMzBfQ1BVX0lOUl9TSUkJMwkvKiBTSUkgKERDNzA2MSkgU0NTSSAqLworI2RlZmluZSBLTjIzMF9DUFVfSU5SX0xBTkNFCTMJLyogTEFOQ0UgKEFtNzk5MCkgRXRoZXJuZXQgKi8KKyNkZWZpbmUgS04yMzBfQ1BVX0lOUl9EWjExCTIJLyogRFoxMSAoREM3MDg1KSBzZXJpYWwgKi8KKworI2VuZGlmIC8qIF9fQVNNX01JUFNfREVDX0tOMjMwX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvZGVjL21hY2h0eXBlLmggYi9pbmNsdWRlL2FzbS1taXBzL2RlYy9tYWNodHlwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2ZWNkZWIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2RlYy9tYWNodHlwZS5oCkBAIC0wLDAgKzEsMjcgQEAKKy8qCisgKiBWYXJpb3VzIG1hY2hpbmUgdHlwZSBtYWNyb3MKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgsIDIwMDAgSGFyYWxkIEtvZXJmZ2VuCisgKi8KKworI2lmbmRlZiBfX0FTTV9ERUNfTUFDSFRZUEVfSAorI2RlZmluZSBfX0FTTV9ERUNfTUFDSFRZUEVfSAorCisjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CisKKyNkZWZpbmUgVFVSQk9DSEFOTkVMCShtaXBzX21hY2h0eXBlID09IE1BQ0hfRFM1MDAwXzIwMCB8fCBcCisJCQkgbWlwc19tYWNodHlwZSA9PSBNQUNIX0RTNTAwMF8xWFggfHwgXAorCQkJIG1pcHNfbWFjaHR5cGUgPT0gTUFDSF9EUzUwMDBfWFggIHx8IFwKKwkJCSBtaXBzX21hY2h0eXBlID09IE1BQ0hfRFM1MDAwXzJYMCB8fCBcCisJCQkgbWlwc19tYWNodHlwZSA9PSBNQUNIX0RTNTkwMCkKKworI2RlZmluZSBJT0FTSUMJCShtaXBzX21hY2h0eXBlID09IE1BQ0hfRFM1MDAwXzFYWCB8fCBcCisJCQkgbWlwc19tYWNodHlwZSA9PSBNQUNIX0RTNTAwMF9YWCAgfHwgXAorCQkJIG1pcHNfbWFjaHR5cGUgPT0gTUFDSF9EUzUwMDBfMlgwIHx8IFwKKwkJCSBtaXBzX21hY2h0eXBlID09IE1BQ0hfRFM1OTAwKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvZGVjL3Byb20uaCBiL2luY2x1ZGUvYXNtLW1pcHMvZGVjL3Byb20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjNlMmYyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9kZWMvcHJvbS5oCkBAIC0wLDAgKzEsMTczIEBACisvKgorICoJaW5jbHVkZS9hc20tbWlwcy9kZWMvcHJvbS5oCisgKgorICoJREVDc3RhdGlvbiBQUk9NIGludGVyZmFjZS4KKyAqCisgKglDb3B5cmlnaHQgKEMpIDIwMDIgIE1hY2llaiBXLiBSb3p5Y2tpCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICoJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKglCYXNlZCBvbiBhcmNoL21pcHMvZGVjL3Byb20vcHJvbS5oIGJ5IHRoZSBBbm9ueW1vdXMuCisgKi8KKyNpZm5kZWYgX0FTTV9ERUNfUFJPTV9ICisjZGVmaW5lIF9BU01fREVDX1BST01fSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KKworLyoKKyAqIFBNQVgvM01BWCBQUk9NIGVudHJ5IHBvaW50cyBmb3IgRFMyMTAwLzMxMDAncyBhbmQgRFM1MDAwLzJ4eCdzLgorICogTWFueSBvZiB0aGVzZSB3aWxsIHdvcmsgZm9yIE1JUFNlbiBhcyB3ZWxsIQorICovCisjZGVmaW5lIFZFQ19SRVNFVAkJKHU2NCAqKUtTRUcxQUREUigweDFmYzAwMDAwKQorCQkJCQkJCS8qIFByb20gYmFzZSBhZGRyZXNzICovCisKKyNkZWZpbmUgUE1BWF9QUk9NX0VOVFJZKHgpCShWRUNfUkVTRVQgKyAoeCkpCS8qIFByb20ganVtcCB0YWJsZSAqLworCisjZGVmaW5lIFBNQVhfUFJPTV9IQUxUCQlQTUFYX1BST01fRU5UUlkoMikJLyogdmFsaWQgb24gTUlQU2VuICovCisjZGVmaW5lIFBNQVhfUFJPTV9BVVRPQk9PVAlQTUFYX1BST01fRU5UUlkoNSkJLyogdmFsaWQgb24gTUlQU2VuICovCisjZGVmaW5lIFBNQVhfUFJPTV9PUEVOCQlQTUFYX1BST01fRU5UUlkoNikKKyNkZWZpbmUgUE1BWF9QUk9NX1JFQUQJCVBNQVhfUFJPTV9FTlRSWSg3KQorI2RlZmluZSBQTUFYX1BST01fQ0xPU0UJCVBNQVhfUFJPTV9FTlRSWSgxMCkKKyNkZWZpbmUgUE1BWF9QUk9NX0xTRUVLCQlQTUFYX1BST01fRU5UUlkoMTEpCisjZGVmaW5lIFBNQVhfUFJPTV9HRVRDSEFSCVBNQVhfUFJPTV9FTlRSWSgxMikKKyNkZWZpbmUgUE1BWF9QUk9NX1BVVENIQVIJUE1BWF9QUk9NX0VOVFJZKDEzKQkvKiAxMiBvbiBNSVBTZW4gKi8KKyNkZWZpbmUgUE1BWF9QUk9NX0dFVFMJCVBNQVhfUFJPTV9FTlRSWSgxNSkKKyNkZWZpbmUgUE1BWF9QUk9NX1BSSU5URglQTUFYX1BST01fRU5UUlkoMTcpCisjZGVmaW5lIFBNQVhfUFJPTV9HRVRFTlYJUE1BWF9QUk9NX0VOVFJZKDMzKQkvKiB2YWxpZCBvbiBNSVBTZW4gKi8KKworCisvKgorICogTWFnaWMgbnVtYmVyIGluZGljYXRpbmcgUkVYIFBST00gYXZhaWxhYmxlIG9uIERFQ3N0YXRpb24uICBGb3VuZCBpbgorICogcmVnaXN0ZXIgYTIgb24gdHJhbnNmZXIgb2YgY29udHJvbCB0byBwcm9ncmFtIGZyb20gUFJPTS4KKyAqLworI2RlZmluZSBSRVhfUFJPTV9NQUdJQwkJMHgzMDQ2NDM1NAorCisjaWZkZWYgQ09ORklHX01JUFM2NAorCisjZGVmaW5lIHByb21faXNfcmV4KG1hZ2ljKQkxCS8qIEtOMDQgYW5kIEtOMDUgYXJlIFJFWCBQUk9Ncy4gICovCisKKyNlbHNlIC8qICFDT05GSUdfTUlQUzY0ICovCisKKyNkZWZpbmUgcHJvbV9pc19yZXgobWFnaWMpCSgobWFnaWMpID09IFJFWF9QUk9NX01BR0lDKQorCisjZW5kaWYgLyogIUNPTkZJR19NSVBTNjQgKi8KKworCisvKgorICogM01JTi9NQVhJTkUgUFJPTSBlbnRyeSBwb2ludHMgZm9yIERTNTAwMC8xeHgncywgRFM1MDAwL3h4J3MgYW5kCisgKiBEUzUwMDAvMngwLgorICovCisjZGVmaW5lIFJFWF9QUk9NX0dFVEJJVE1BUAkweDg0LzQJLyogZ2V0IG1lbSBiaXRtYXAgKi8KKyNkZWZpbmUgUkVYX1BST01fR0VUQ0hBUgkweDI0LzQJLyogZ2V0Y2goKSAqLworI2RlZmluZSBSRVhfUFJPTV9HRVRFTlYJCTB4NjQvNAkvKiBnZXQgZW52LiB2YXJpYWJsZSAqLworI2RlZmluZSBSRVhfUFJPTV9HRVRTWVNJRAkweDgwLzQJLyogZ2V0IHN5c3RlbSBpZCAqLworI2RlZmluZSBSRVhfUFJPTV9HRVRUQ0lORk8JMHhhNC80CisjZGVmaW5lIFJFWF9QUk9NX1BSSU5URgkJMHgzMC80CS8qIHByaW50ZigpICovCisjZGVmaW5lIFJFWF9QUk9NX1NMT1RBRERSCTB4NmMvNAkvKiBzbG90YWRkciAqLworI2RlZmluZSBSRVhfUFJPTV9CT09USU5JVAkweDU0LzQJLyogb3BlbigpICovCisjZGVmaW5lIFJFWF9QUk9NX0JPT1RSRUFECTB4NTgvNAkvKiByZWFkKCkgKi8KKyNkZWZpbmUgUkVYX1BST01fQ0xFQVJDQUNIRQkweDdjLzQKKworCisvKgorICogVXNlZCBieSByZXhfZ2V0Yml0bWFwKCkuCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwlpbnQgcGFnZXNpemU7CisJdW5zaWduZWQgY2hhciBiaXRtYXBbMF07Cit9IG1lbW1hcDsKKworCisvKgorICogRnVuY3Rpb24gcG9pbnRlcnMgYXMgcmVhZCBmcm9tIGEgUFJPTSdzIGNhbGxiYWNrIHZlY3Rvci4KKyAqLworZXh0ZXJuIGludCAoKl9fcmV4X2Jvb3Rpbml0KSh2b2lkKTsKK2V4dGVybiBpbnQgKCpfX3JleF9ib290cmVhZCkodm9pZCk7CitleHRlcm4gaW50ICgqX19yZXhfZ2V0Yml0bWFwKShtZW1tYXAgKik7CitleHRlcm4gdW5zaWduZWQgbG9uZyAqKCpfX3JleF9zbG90X2FkZHJlc3MpKGludCk7CitleHRlcm4gdm9pZCAqKCpfX3JleF9nZXR0Y2luZm8pKHZvaWQpOworZXh0ZXJuIGludCAoKl9fcmV4X2dldHN5c2lkKSh2b2lkKTsKK2V4dGVybiB2b2lkICgqX19yZXhfY2xlYXJfY2FjaGUpKHZvaWQpOworCitleHRlcm4gaW50ICgqX19wcm9tX2dldGNoYXIpKHZvaWQpOworZXh0ZXJuIGNoYXIgKigqX19wcm9tX2dldGVudikoY2hhciAqKTsKK2V4dGVybiBpbnQgKCpfX3Byb21fcHJpbnRmKShjaGFyICosIC4uLik7CisKK2V4dGVybiBpbnQgKCpfX3BtYXhfb3BlbikoY2hhciosIGludCk7CitleHRlcm4gaW50ICgqX19wbWF4X2xzZWVrKShpbnQsIGxvbmcsIGludCk7CitleHRlcm4gaW50ICgqX19wbWF4X3JlYWQpKGludCwgdm9pZCAqLCBpbnQpOworZXh0ZXJuIGludCAoKl9fcG1heF9jbG9zZSkoaW50KTsKKworCisjaWZkZWYgQ09ORklHX01JUFM2NAorCisvKgorICogT24gTUlQUzY0IHdlIGhhdmUgdG8gY2FsbCBQUk9NIGZ1bmN0aW9ucyB2aWEgYSBoZWxwZXIKKyAqIGRpc3BhdGNoZXIgdG8gYWNjb21vZGF0ZSBBQkkgaW5jb21wYXRpYmlsaXRpZXMuCisgKi8KKyNkZWZpbmUgX19ERUNfUFJPTV9PMzIgX19hdHRyaWJ1dGVfXygoYWxpYXMoImNhbGxfbzMyIikpKQorCitpbnQgX3JleF9ib290aW5pdChpbnQgKCopKHZvaWQpKSBfX0RFQ19QUk9NX08zMjsKK2ludCBfcmV4X2Jvb3RyZWFkKGludCAoKikodm9pZCkpIF9fREVDX1BST01fTzMyOworaW50IF9yZXhfZ2V0Yml0bWFwKGludCAoKikobWVtbWFwICopLCBtZW1tYXAgKikgX19ERUNfUFJPTV9PMzI7Cit1bnNpZ25lZCBsb25nICpfcmV4X3Nsb3RfYWRkcmVzcyh1bnNpZ25lZCBsb25nICooKikoaW50KSwgaW50KSBfX0RFQ19QUk9NX08zMjsKK3ZvaWQgKl9yZXhfZ2V0dGNpbmZvKHZvaWQgKigqKSh2b2lkKSkgX19ERUNfUFJPTV9PMzI7CitpbnQgX3JleF9nZXRzeXNpZChpbnQgKCopKHZvaWQpKSBfX0RFQ19QUk9NX08zMjsKK3ZvaWQgX3JleF9jbGVhcl9jYWNoZSh2b2lkICgqKSh2b2lkKSkgX19ERUNfUFJPTV9PMzI7CisKK2ludCBfcHJvbV9nZXRjaGFyKGludCAoKikodm9pZCkpIF9fREVDX1BST01fTzMyOworY2hhciAqX3Byb21fZ2V0ZW52KGNoYXIgKigqKShjaGFyICopLCBjaGFyICopIF9fREVDX1BST01fTzMyOworaW50IF9wcm9tX3ByaW50ZihpbnQgKCopKGNoYXIgKiwgLi4uKSwgY2hhciAqLCAuLi4pIF9fREVDX1BST01fTzMyOworCisKKyNkZWZpbmUgcmV4X2Jvb3Rpbml0KCkJCV9yZXhfYm9vdGluaXQoX19yZXhfYm9vdGluaXQpCisjZGVmaW5lIHJleF9ib290cmVhZCgpCQlfcmV4X2Jvb3RyZWFkKF9fcmV4X2Jvb3RyZWFkKQorI2RlZmluZSByZXhfZ2V0Yml0bWFwKHgpCV9yZXhfZ2V0Yml0bWFwKF9fcmV4X2dldGJpdG1hcCwgeCkKKyNkZWZpbmUgcmV4X3Nsb3RfYWRkcmVzcyh4KQlfcmV4X3Nsb3RfYWRkcmVzcyhfX3JleF9zbG90X2FkZHJlc3MsIHgpCisjZGVmaW5lIHJleF9nZXR0Y2luZm8oKQkJX3JleF9nZXR0Y2luZm8oX19yZXhfZ2V0dGNpbmZvKQorI2RlZmluZSByZXhfZ2V0c3lzaWQoKQkJX3JleF9nZXRzeXNpZChfX3JleF9nZXRzeXNpZCkKKyNkZWZpbmUgcmV4X2NsZWFyX2NhY2hlKCkJX3JleF9jbGVhcl9jYWNoZShfX3JleF9jbGVhcl9jYWNoZSkKKworI2RlZmluZSBwcm9tX2dldGNoYXIoKQkJX3Byb21fZ2V0Y2hhcihfX3Byb21fZ2V0Y2hhcikKKyNkZWZpbmUgcHJvbV9nZXRlbnYoeCkJCV9wcm9tX2dldGVudihfX3Byb21fZ2V0ZW52LCB4KQorI2RlZmluZSBwcm9tX3ByaW50Zih4Li4uKQlfcHJvbV9wcmludGYoX19wcm9tX3ByaW50ZiwgeCkKKworI2Vsc2UgLyogIUNPTkZJR19NSVBTNjQgKi8KKworLyoKKyAqIE9uIHBsYWluIE1JUFMgd2UganVzdCBjYWxsIFBST00gZnVuY3Rpb25zIGRpcmVjdGx5LgorICovCisjZGVmaW5lIHJleF9ib290aW5pdAkJX19yZXhfYm9vdGluaXQKKyNkZWZpbmUgcmV4X2Jvb3RyZWFkCQlfX3JleF9ib290cmVhZAorI2RlZmluZSByZXhfZ2V0Yml0bWFwCQlfX3JleF9nZXRiaXRtYXAKKyNkZWZpbmUgcmV4X3Nsb3RfYWRkcmVzcwlfX3JleF9zbG90X2FkZHJlc3MKKyNkZWZpbmUgcmV4X2dldHRjaW5mbwkJX19yZXhfZ2V0dGNpbmZvCisjZGVmaW5lIHJleF9nZXRzeXNpZAkJX19yZXhfZ2V0c3lzaWQKKyNkZWZpbmUgcmV4X2NsZWFyX2NhY2hlCQlfX3JleF9jbGVhcl9jYWNoZQorCisjZGVmaW5lIHByb21fZ2V0Y2hhcgkJX19wcm9tX2dldGNoYXIKKyNkZWZpbmUgcHJvbV9nZXRlbnYJCV9fcHJvbV9nZXRlbnYKKyNkZWZpbmUgcHJvbV9wcmludGYJCV9fcHJvbV9wcmludGYKKworI2RlZmluZSBwbWF4X29wZW4JCV9fcG1heF9vcGVuCisjZGVmaW5lIHBtYXhfbHNlZWsJCV9fcG1heF9sc2VlaworI2RlZmluZSBwbWF4X3JlYWQJCV9fcG1heF9yZWFkCisjZGVmaW5lIHBtYXhfY2xvc2UJCV9fcG1heF9jbG9zZQorCisjZW5kaWYgLyogIUNPTkZJR19NSVBTNjQgKi8KKworCitleHRlcm4gdm9pZCBwcm9tX21lbWluaXQodTMyKTsKK2V4dGVybiB2b2lkIHByb21faWRlbnRpZnlfYXJjaCh1MzIpOworZXh0ZXJuIHZvaWQgcHJvbV9pbml0X2NtZGxpbmUoczMyLCBzMzIgKiwgdTMyKTsKKworZXh0ZXJuIHZvaWQgcmVnaXN0ZXJfcHJvbV9jb25zb2xlKHZvaWQpOworZXh0ZXJuIHZvaWQgdW5yZWdpc3Rlcl9wcm9tX2NvbnNvbGUodm9pZCk7CisKKyNlbmRpZiAvKiBfQVNNX0RFQ19QUk9NX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvZGVjL3NlcmlhbC5oIGIvaW5jbHVkZS9hc20tbWlwcy9kZWMvc2VyaWFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNhZDc1OAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvZGVjL3NlcmlhbC5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKglpbmNsdWRlL2FzbS1taXBzL2RlYy9zZXJpYWwuaAorICoKKyAqCURlZmluaXRpb25zIGNvbW1vbiB0byBhbGwgREVDc3RhdGlvbiBzZXJpYWwgZGV2aWNlcy4KKyAqCisgKglDb3B5cmlnaHQgKEMpIDIwMDQgIE1hY2llaiBXLiBSb3p5Y2tpCisgKgorICoJQmFzZWQgb24gYml0cyBleHRyYWN0ZWQgZnJvbSBkcml2ZXJzL3RjL3pzLmggZm9yIHdoaWNoCisgKgl0aGUgZm9sbG93aW5nIGNvcHlyaWdodHMgYXBwbHk6CisgKgorICoJQ29weXJpZ2h0IChDKSAxOTk1ICBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCisgKglDb3B5cmlnaHQgKEMpIDE5OTYgIFBhdWwgTWFja2VycmFzIChQYXVsLk1hY2tlcnJhc0Bjcy5hbnUuZWR1LmF1KQorICoJQ29weXJpZ2h0IChDKSAgICAgICBIYXJhbGQgS29lcmZnZW4KKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICoJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKgkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisjaWZuZGVmIF9fQVNNX01JUFNfREVDX1NFUklBTF9ICisjZGVmaW5lIF9fQVNNX01JUFNfREVDX1NFUklBTF9ICisKK3N0cnVjdCBkZWNfc2VyaWFsX2hvb2sgeworCWludCAoKmluaXRfY2hhbm5lbCkodm9pZCAqaGFuZGxlKTsKKwl2b2lkICgqaW5pdF9pbmZvKSh2b2lkICpoYW5kbGUpOworCXZvaWQgKCpyeF9jaGFyKSh1bnNpZ25lZCBjaGFyIGNoLCB1bnNpZ25lZCBjaGFyIGZsKTsKKwlpbnQgKCpwb2xsX3J4X2NoYXIpKHZvaWQgKmhhbmRsZSk7CisJaW50ICgqcG9sbF90eF9jaGFyKSh2b2lkICpoYW5kbGUsIHVuc2lnbmVkIGNoYXIgY2gpOworCXVuc2lnbmVkIGludCBjZmxhZ3M7Cit9OworCitleHRlcm4gaW50IHJlZ2lzdGVyX2RlY19zZXJpYWxfaG9vayh1bnNpZ25lZCBpbnQgY2hhbm5lbCwKKwkJCQkgICAgc3RydWN0IGRlY19zZXJpYWxfaG9vayAqaG9vayk7CitleHRlcm4gaW50IHVucmVnaXN0ZXJfZGVjX3NlcmlhbF9ob29rKHVuc2lnbmVkIGludCBjaGFubmVsKTsKKworI2VuZGlmIC8qIF9fQVNNX01JUFNfREVDX1NFUklBTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2RlYy90Yy5oIGIvaW5jbHVkZS9hc20tbWlwcy9kZWMvdGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2JiYTQzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9kZWMvdGMuaApAQCAtMCwwICsxLDQzIEBACisvKgorICogSW50ZXJmYWNlIHRvIHRoZSBUVVJCT2NoYW5uZWwgcmVsYXRlZCByb3V0aW5lcworICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5OCBIYXJhbGQgS29lcmZnZW4KKyAqLworI2lmbmRlZiBBU01fVENfSAorI2RlZmluZSBBU01fVENfSAorCitleHRlcm4gdW5zaWduZWQgbG9uZyBzeXN0ZW1fYmFzZTsKKworLyoKKyAqIFNlYXJjaCBmb3IgYSBUVVJCT2NoYW5uZWwgT3B0aW9uIE1vZHVsZQorICogd2l0aCBhIGNlcnRhaW4gbmFtZS4gUmV0dXJucyBzbG90IG51bWJlcgorICogb2YgdGhlIGZpcnN0IGNhcmQgbm90IGluIHVzZSBvciAtRU5PREVWCisgKiBpZiBub25lIGZvdW5kLgorICovCitleHRlcm4gaW50IHNlYXJjaF90Y19jYXJkKGNvbnN0IGNoYXIgKik7CisvKgorICogTWFya3MgdGhlIGNhcmQgaW4gc2xvdCBhcyB1c2VkCisgKi8KK2V4dGVybiB2b2lkIGNsYWltX3RjX2NhcmQoaW50KTsKKy8qCisgKiBNYXJrcyB0aGUgY2FyZCBpbiBzbG90IGFzIGZyZWUKKyAqLworZXh0ZXJuIHZvaWQgcmVsZWFzZV90Y19jYXJkKGludCk7CisvKgorICogUmV0dXJuIGJhc2UgYWRkcmVzcyBvZiBjYXJkIGluIHNsb3QKKyAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZ2V0X3RjX2Jhc2VfYWRkcihpbnQpOworLyoKKyAqIFJldHVybiBpbnRlcnJ1cHQgbnVtYmVyIG9mIHNsb3QKKyAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZ2V0X3RjX2lycV9ucihpbnQpOworLyoKKyAqIFJldHVybiBUVVJCT2NoYW5uZWwgY2xvY2sgZnJlcXVlbmN5IGluIGh6CisgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIGdldF90Y19zcGVlZCh2b2lkKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2RlYy90Y2luZm8uaCBiL2luY2x1ZGUvYXNtLW1pcHMvZGVjL3RjaW5mby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjMjM1MDkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2RlYy90Y2luZm8uaApAQCAtMCwwICsxLDQ3IEBACisvKgorICogVmFyaW91cyBUVVJCT2NoYW5uZWwgcmVsYXRlZCBzdHVmZgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIEluZm9ybWF0aW9uIG9idGFpbmVkIHRocm91Z2ggdGhlIGdldF90Y2luZm8gcHJvbSBjYWxsCisgKiBjcmVhdGVkIGZyb206CisgKgorICogVFVSQk9jaGFubmVsIEZpcm13YXJlIFNwZWNpZmljYXRpb24KKyAqCisgKiBFSy1UQ0FBRC1GUy0wMDQKKyAqIGZyb20gRGlnaXRhbCBFcXVpcG1lbnQgQ29ycG9yYXRpb24KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTggSGFyYWxkIEtvZXJmZ2VuCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworCWludCByZXZpc2lvbjsKKwlpbnQgY2xrX3BlcmlvZDsKKwlpbnQgc2xvdF9zaXplOworCWludCBpb190aW1lb3V0OworCWludCBkbWFfcmFuZ2U7CisJaW50IG1heF9kbWFfYnVyc3Q7CisJaW50IHBhcml0eTsKKwlpbnQgcmVzZXJ2ZWRbNF07Cit9IHRjaW5mbzsKKworI2RlZmluZSBNQVhfU0xPVCA3CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBsb25nIGJhc2VfYWRkcjsKKwl1bnNpZ25lZCBjaGFyIG5hbWVbOV07CisJdW5zaWduZWQgY2hhciB2ZW5kb3JbOV07CisJdW5zaWduZWQgY2hhciBmaXJtd2FyZVs5XTsKKwlpbnQgaW50ZXJydXB0OworCWludCBmbGFnczsKK30gc2xvdF9pbmZvOworCisvKgorICogVmFsdWVzIGZvciBmbGFncworICovCisjZGVmaW5lIEZSRUUgCTE8PDAKKyNkZWZpbmUgSU5fVVNFCTE8PDEKKworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2RlYy90Y21vZHVsZS5oIGIvaW5jbHVkZS9hc20tbWlwcy9kZWMvdGNtb2R1bGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjY4ZTg5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9kZWMvdGNtb2R1bGUuaApAQCAtMCwwICsxLDM5IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogT2Zmc2V0cyBmb3IgdGhlIFJPTSBoZWFkZXIgbG9jYXRpb25zIGZvcgorICogVFVSQk9jaGFubmVsIGNhcmRzCisgKgorICogY3JlYXRlZCBmcm9tOgorICoKKyAqIFRVUkJPY2hhbm5lbCBGaXJtd2FyZSBTcGVjaWZpY2F0aW9uCisgKgorICogRUstVENBQUQtRlMtMDA0CisgKiBmcm9tIERpZ2l0YWwgRXF1aXBtZW50IENvcnBvcmF0aW9uCisgKgorICogSmFuLjE5OTggSGFyYWxkIEtvZXJmZ2VuCisgKi8KKyNpZm5kZWYgX19BU01fREVDX1RDTU9EVUxFX0gKKyNkZWZpbmUgX19BU01fREVDX1RDTU9EVUxFX0gKKworI2RlZmluZSBPTERDQVJEIDB4M2MwMDAwCisjZGVmaW5lIE5FV0NBUkQgMHgwMDAwMDAKKworI2RlZmluZSBUQ19ST01fV0lEVEgJMHgzZTAKKyNkZWZpbmUgVENfUk9NX1NUUklERQkweDNlNAorI2RlZmluZSBUQ19ST01fU0laRQkweDNlOAorI2RlZmluZSBUQ19TTE9UX1NJWkUJMHgzZWMKKyNkZWZpbmUgVENfUEFUVEVSTjAJMHgzZjAKKyNkZWZpbmUgVENfUEFUVEVSTjEJMHgzZjQKKyNkZWZpbmUgVENfUEFUVEVSTjIJMHgzZjgKKyNkZWZpbmUgVENfUEFUVEVSTjMJMHgzZmMKKyNkZWZpbmUgVENfRklSTV9WRVIJMHg0MDAKKyNkZWZpbmUgVENfVkVORE9SCTB4NDIwCisjZGVmaW5lIFRDX01PRFVMRQkweDQ0MAorI2RlZmluZSBUQ19GSVJNX1RZUEUJMHg0NjAKKyNkZWZpbmUgVENfRkxBR1MJMHg0NzAKKyNkZWZpbmUgVENfUk9NX09CSkVDVFMJMHg0ODAKKworI2VuZGlmIC8qIF9fQVNNX0RFQ19UQ01PRFVMRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2RlbGF5LmggYi9pbmNsdWRlL2FzbS1taXBzL2RlbGF5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBmNjg0NAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvZGVsYXkuaApAQCAtMCwwICsxLDkzIEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk0IGJ5IFdhbGRvcmYgRWxlY3Ryb25pY3MKKyAqIENvcHlyaWdodCAoQykgMTk5NSAtIDIwMDAsIDAxLCAwMyBieSBSYWxmIEJhZWNobGUKKyAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCisgKi8KKyNpZm5kZWYgX0FTTV9ERUxBWV9ICisjZGVmaW5lIF9BU01fREVMQVlfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvcGFyYW0uaD4KKworI2luY2x1ZGUgPGFzbS9jb21waWxlci5oPgorCitleHRlcm4gdW5zaWduZWQgbG9uZyBsb29wc19wZXJfamlmZnk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2RlbGF5KHVuc2lnbmVkIGxvbmcgbG9vcHMpCit7CisJaWYgKHNpemVvZihsb25nKSA9PSA0KQorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCSIuc2V0XHRub3Jlb3JkZXJcbiIKKwkJIjE6XHRibmV6XHQlMCwxYlxuXHQiCisJCSJzdWJ1XHQlMCwxXG5cdCIKKwkJIi5zZXRcdHJlb3JkZXIiCisJCTogIj1yIiAobG9vcHMpCisJCTogIjAiIChsb29wcykpOworCWVsc2UgaWYgKHNpemVvZihsb25nKSA9PSA4KQorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCSIuc2V0XHRub3Jlb3JkZXJcbiIKKwkJIjE6XHRibmV6XHQlMCwxYlxuXHQiCisJCSJkc3VidVx0JTAsMVxuXHQiCisJCSIuc2V0XHRyZW9yZGVyIgorCQk6Ij1yIiAobG9vcHMpCisJCToiMCIgKGxvb3BzKSk7Cit9CisKKworLyoKKyAqIERpdmlzaW9uIGJ5IG11bHRpcGxpY2F0aW9uOiB5b3UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dAorICogbG9zcyBvZiBwcmVjaXNpb24uCisgKgorICogVXNlIG9ubHkgZm9yIHZlcnkgc21hbGwgZGVsYXlzICggPCAxIG1zZWMpLiAgU2hvdWxkIHByb2JhYmx5IHVzZSBhCisgKiBsb29rdXAgdGFibGUsIHJlYWxseSwgYXMgdGhlIG11bHRpcGxpY2F0aW9ucyB0YWtlIG11Y2ggdG9vIGxvbmcgd2l0aAorICogc2hvcnQgZGVsYXlzLiAgVGhpcyBpcyBhICJyZWFzb25hYmxlIiBpbXBsZW1lbnRhdGlvbiwgdGhvdWdoIChhbmQgdGhlCisgKiBmaXJzdCBjb25zdGFudCBtdWx0aXBsaWNhdGlvbnMgZ2V0cyBvcHRpbWl6ZWQgYXdheSBpZiB0aGUgZGVsYXkgaXMKKyAqIGEgY29uc3RhbnQpCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkIF9fdWRlbGF5KHVuc2lnbmVkIGxvbmcgdXNlY3MsIHVuc2lnbmVkIGxvbmcgbHBqKQoreworCXVuc2lnbmVkIGxvbmcgbG87CisKKwkvKgorCSAqIFRoZSBjb21tb24gcmF0ZXMgb2YgMTAwMCBhbmQgMTI4IGFyZSByb3VuZGVkIHdyb25nbHkgYnkgdGhlCisJICogY2F0Y2hhbGwgY2FzZSBmb3IgNjQtYml0LiAgRXhjZXNzaXZlIHByZWNpc3Npb24/ICBQcm9iYWJseSAuLi4KKwkgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19NSVBTNjQpICYmIChIWiA9PSAxMjgpCisJdXNlY3MgKj0gMHgwMDA4NjM3YmQwNWFmNmM3VUw7CQkvKiAyKio2NCAvICgxMDAwMDAwIC8gSFopICovCisjZWxpZiBkZWZpbmVkKENPTkZJR19NSVBTNjQpICYmIChIWiA9PSAxMDAwKQorCXVzZWNzICo9IDB4MDA0MTg5Mzc0QkM2QTdmMFVMOwkJLyogMioqNjQgLyAoMTAwMDAwMCAvIEhaKSAqLworI2VsaWYgZGVmaW5lZChDT05GSUdfTUlQUzY0KQorCXVzZWNzICo9ICgweDgwMDAwMDAwMDAwMDAwMDBVTCAvICg1MDAwMDAgLyBIWikpOworI2Vsc2UgLyogMzItYml0IGp1bmsgZm9sbG93cyBoZXJlICovCisJdXNlY3MgKj0gKHVuc2lnbmVkIGxvbmcpICgoKDB4ODAwMDAwMDAwMDAwMDAwMFVMTCAvICg1MDAwMDAgLyBIWikpICsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwVUxMKSA+PiAzMik7CisjZW5kaWYKKworCWlmIChzaXplb2YobG9uZykgPT0gNCkKKwkJX19hc21fXygibXVsdHVcdCUyLCAlMyIKKwkJOiAiPWgiICh1c2VjcyksICI9bCIgKGxvKQorCQk6ICJyIiAodXNlY3MpLCAiciIgKGxwaikKKwkJOiBHQ0NfUkVHX0FDQ1VNKTsKKwllbHNlIGlmIChzaXplb2YobG9uZykgPT0gOCkKKwkJX19hc21fXygiZG11bHR1XHQlMiwgJTMiCisJCTogIj1oIiAodXNlY3MpLCAiPWwiIChsbykKKwkJOiAiciIgKHVzZWNzKSwgInIiIChscGopCisJCTogR0NDX1JFR19BQ0NVTSk7CisKKwlfX2RlbGF5KHVzZWNzKTsKK30KKworI2lmZGVmIENPTkZJR19TTVAKKyNkZWZpbmUgX191ZGVsYXlfdmFsIGNwdV9kYXRhW3NtcF9wcm9jZXNzb3JfaWQoKV0udWRlbGF5X3ZhbAorI2Vsc2UKKyNkZWZpbmUgX191ZGVsYXlfdmFsIGxvb3BzX3Blcl9qaWZmeQorI2VuZGlmCisKKyNkZWZpbmUgdWRlbGF5KHVzZWNzKSBfX3VkZWxheSgodXNlY3MpLF9fdWRlbGF5X3ZhbCkKKworI2VuZGlmIC8qIF9BU01fREVMQVlfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9kaXY2NC5oIGIvaW5jbHVkZS9hc20tbWlwcy9kaXY2NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmN2RjZjUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2RpdjY0LmgKQEAgLTAsMCArMSwxMjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDQgIE1hY2llaiBXLiBSb3p5Y2tpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgUmFsZiBCYWVjaGxlCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX0FTTV9ESVY2NF9ICisjZGVmaW5lIF9BU01fRElWNjRfSAorCisjaWYgKF9NSVBTX1NaTE9ORyA9PSAzMikKKworI2luY2x1ZGUgPGFzbS9jb21waWxlci5oPgorCisvKgorICogTm8gdHJhcHMgb24gb3ZlcmZsb3dzIGZvciBhbnkgb2YgdGhlc2UuLi4KKyAqLworCisjZGVmaW5lIGRvX2RpdjY0XzMyKHJlcywgaGlnaCwgbG93LCBiYXNlKSAoeyBcCisJdW5zaWduZWQgbG9uZyBfX3F1b3QsIF9fbW9kOyBcCisJdW5zaWduZWQgbG9uZyBfX2NmLCBfX3RtcCwgX190bXAyLCBfX2k7IFwKKwlcCisJX19hc21fXygiLnNldAlwdXNoXG5cdCIgXAorCQkiLnNldAlub2F0XG5cdCIgXAorCQkiLnNldAlub3Jlb3JkZXJcblx0IiBcCisJCSJtb3ZlCSUyLCAkMFxuXHQiIFwKKwkJIm1vdmUJJTMsICQwXG5cdCIgXAorCQkiYgkxZlxuXHQiIFwKKwkJIiBsaQklNCwgMHgyMVxuIiBcCisJCSIwOlxuXHQiIFwKKwkJInNsbAkkMSwgJTAsIDB4MVxuXHQiIFwKKwkJInNybAklMywgJTAsIDB4MWZcblx0IiBcCisJCSJvcgklMCwgJDEsICU1XG5cdCIgXAorCQkic2xsCSUxLCAlMSwgMHgxXG5cdCIgXAorCQkic2xsCSUyLCAlMiwgMHgxXG4iIFwKKwkJIjE6XG5cdCIgXAorCQkiYm5legklMywgMmZcblx0IiBcCisJCSIgc2x0dQklNSwgJTAsICV6NlxuXHQiIFwKKwkJImJuZXoJJTUsIDNmXG4iIFwKKwkJIjI6XG5cdCIgXAorCQkiIGFkZGl1CSU0LCAlNCwgLTFcblx0IiBcCisJCSJzdWJ1CSUwLCAlMCwgJXo2XG5cdCIgXAorCQkiYWRkaXUJJTIsICUyLCAxXG4iIFwKKwkJIjM6XG5cdCIgXAorCQkiYm5legklNCwgMGJcblx0IiBcCisJCSIgc3JsCSU1LCAlMSwgMHgxZlxuXHQiIFwKKwkJIi5zZXQJcG9wIiBcCisJCTogIj0mciIgKF9fbW9kKSwgIj0mciIgKF9fdG1wKSwgIj0mciIgKF9fcXVvdCksICI9JnIiIChfX2NmKSwgXAorCQkgICI9JnIiIChfX2kpLCAiPSZyIiAoX190bXAyKSBcCisJCTogIkpyIiAoYmFzZSksICIwIiAoaGlnaCksICIxIiAobG93KSk7IFwKKwlcCisJKHJlcykgPSBfX3F1b3Q7IFwKKwlfX21vZDsgfSkKKworI2RlZmluZSBkb19kaXYobiwgYmFzZSkgKHsgXAorCXVuc2lnbmVkIGxvbmcgbG9uZyBfX3F1b3Q7IFwKKwl1bnNpZ25lZCBsb25nIF9fbW9kOyBcCisJdW5zaWduZWQgbG9uZyBsb25nIF9fZGl2OyBcCisJdW5zaWduZWQgbG9uZyBfX3VwcGVyLCBfX2xvdywgX19oaWdoLCBfX2Jhc2U7IFwKKwlcCisJX19kaXYgPSAobik7IFwKKwlfX2Jhc2UgPSAoYmFzZSk7IFwKKwlcCisJX19oaWdoID0gX19kaXYgPj4gMzI7IFwKKwlfX2xvdyA9IF9fZGl2OyBcCisJX191cHBlciA9IF9faGlnaDsgXAorCVwKKwlpZiAoX19oaWdoKSBcCisJCV9fYXNtX18oImRpdnUJJDAsICV6MiwgJXozIiBcCisJCQk6ICI9aCIgKF9fdXBwZXIpLCAiPWwiIChfX2hpZ2gpIFwKKwkJCTogIkpyIiAoX19oaWdoKSwgIkpyIiAoX19iYXNlKSBcCisJCQk6IEdDQ19SRUdfQUNDVU0pOyBcCisJXAorCV9fbW9kID0gZG9fZGl2NjRfMzIoX19sb3csIF9fdXBwZXIsIF9fbG93LCBfX2Jhc2UpOyBcCisJXAorCV9fcXVvdCA9IF9faGlnaDsgXAorCV9fcXVvdCA9IF9fcXVvdCA8PCAzMiB8IF9fbG93OyBcCisJKG4pID0gX19xdW90OyBcCisJX19tb2Q7IH0pCisjZW5kaWYgLyogKF9NSVBTX1NaTE9ORyA9PSAzMikgKi8KKworI2lmIChfTUlQU19TWkxPTkcgPT0gNjQpCisKKy8qCisgKiBEb24ndCB1c2UgdGhpcyBvbmUgaW4gbmV3IGNvZGUKKyAqLworI2RlZmluZSBkb19kaXY2NF8zMihyZXMsIGhpZ2gsIGxvdywgYmFzZSkgKHsgXAorCXVuc2lnbmVkIGludCBfX3F1b3QsIF9fbW9kOyBcCisJdW5zaWduZWQgbG9uZyBfX2RpdjsgXAorCXVuc2lnbmVkIGludCBfX2xvdywgX19oaWdoLCBfX2Jhc2U7IFwKKwlcCisJX19oaWdoID0gKGhpZ2gpOyBcCisJX19sb3cgPSAobG93KTsgXAorCV9fZGl2ID0gX19oaWdoOyBcCisJX19kaXYgPSBfX2RpdiA8PCAzMiB8IF9fbG93OyBcCisJX19iYXNlID0gKGJhc2UpOyBcCisJXAorCV9fbW9kID0gX19kaXYgJSBfX2Jhc2U7IFwKKwlfX2RpdiA9IF9fZGl2IC8gX19iYXNlOyBcCisJXAorCV9fcXVvdCA9IF9fZGl2OyBcCisJKHJlcykgPSBfX3F1b3Q7IFwKKwlfX21vZDsgfSkKKworLyoKKyAqIEhleSwgd2UncmUgYWxyZWFkeSA2NC1iaXQsIG5vCisgKiBuZWVkIHRvIHBsYXkgZ2FtZXMuLgorICovCisjZGVmaW5lIGRvX2RpdihuLCBiYXNlKSAoeyBcCisJdW5zaWduZWQgbG9uZyBfX3F1b3Q7IFwKKwl1bnNpZ25lZCBpbnQgX19tb2Q7IFwKKwl1bnNpZ25lZCBsb25nIF9fZGl2OyBcCisJdW5zaWduZWQgaW50IF9fYmFzZTsgXAorCVwKKwlfX2RpdiA9IChuKTsgXAorCV9fYmFzZSA9IChiYXNlKTsgXAorCVwKKwlfX21vZCA9IF9fZGl2ICUgX19iYXNlOyBcCisJX19xdW90ID0gX19kaXYgLyBfX2Jhc2U7IFwKKwlcCisJKG4pID0gX19xdW90OyBcCisJX19tb2Q7IH0pCisKKyNlbmRpZiAvKiAoX01JUFNfU1pMT05HID09IDY0KSAqLworCisjZW5kaWYgLyogX0FTTV9ESVY2NF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2RtYS1tYXBwaW5nLmggYi9pbmNsdWRlL2FzbS1taXBzL2RtYS1tYXBwaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYyOGRjOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvZG1hLW1hcHBpbmcuaApAQCAtMCwwICsxLDc5IEBACisjaWZuZGVmIF9BU01fRE1BX01BUFBJTkdfSAorI2RlZmluZSBfQVNNX0RNQV9NQVBQSU5HX0gKKworI2luY2x1ZGUgPGFzbS9zY2F0dGVybGlzdC5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgorCit2b2lkICpkbWFfYWxsb2Nfbm9uY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKKwkJCSAgIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGludCBmbGFnKTsKKwordm9pZCBkbWFfZnJlZV9ub25jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAorCQkJIHZvaWQgKnZhZGRyLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUpOworCit2b2lkICpkbWFfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKKwkJCSAgIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGludCBmbGFnKTsKKwordm9pZCBkbWFfZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAorCQkJIHZvaWQgKnZhZGRyLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUpOworCitleHRlcm4gZG1hX2FkZHJfdCBkbWFfbWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsCisJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKTsKK2V4dGVybiB2b2lkIGRtYV91bm1hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyLAorCXNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pOworZXh0ZXJuIGludCBkbWFfbWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbnRzLAorCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbik7CitleHRlcm4gZG1hX2FkZHJfdCBkbWFfbWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwl1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbik7CitleHRlcm4gdm9pZCBkbWFfdW5tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHJlc3MsCisJc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbik7CitleHRlcm4gdm9pZCBkbWFfdW5tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCWludCBuaHdlbnRyaWVzLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pOworZXh0ZXJuIHZvaWQgZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCisJc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbik7CitleHRlcm4gdm9pZCBkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCBzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKTsKK2V4dGVybiB2b2lkIGRtYV9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwKKwlkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwKKwllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pOworZXh0ZXJuIHZvaWQgZG1hX3N5bmNfc2luZ2xlX3JhbmdlX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LAorCWRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLAorCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbik7CitleHRlcm4gdm9pZCBkbWFfc3luY19zZ19mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwlpbnQgbmVsZW1zLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pOworZXh0ZXJuIHZvaWQgZG1hX3N5bmNfc2dfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJaW50IG5lbGVtcywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKTsKK2V4dGVybiBpbnQgZG1hX21hcHBpbmdfZXJyb3IoZG1hX2FkZHJfdCBkbWFfYWRkcik7CitleHRlcm4gaW50IGRtYV9zdXBwb3J0ZWQoc3RydWN0IGRldmljZSAqZGV2LCB1NjQgbWFzayk7CisKK3N0YXRpYyBpbmxpbmUgaW50CitkbWFfc2V0X21hc2soc3RydWN0IGRldmljZSAqZGV2LCB1NjQgbWFzaykKK3sKKwlpZighZGV2LT5kbWFfbWFzayB8fCAhZG1hX3N1cHBvcnRlZChkZXYsIG1hc2spKQorCQlyZXR1cm4gLUVJTzsKKworCSpkZXYtPmRtYV9tYXNrID0gbWFzazsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludAorZG1hX2dldF9jYWNoZV9hbGlnbm1lbnQodm9pZCkKK3sKKwkvKiBYWFggTGFyZ2VzdCBvbiBhbnkgTUlQUyAqLworCXJldHVybiAxMjg7Cit9CisKK2V4dGVybiBpbnQgZG1hX2lzX2NvbnNpc3RlbnQoZG1hX2FkZHJfdCBkbWFfYWRkcik7CisKK2V4dGVybiB2b2lkIGRtYV9jYWNoZV9zeW5jKHZvaWQgKnZhZGRyLCBzaXplX3Qgc2l6ZSwKKwkgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKTsKKworI2RlZmluZSBBUkNIX0hBU19ETUFfREVDTEFSRV9DT0hFUkVOVF9NRU1PUlkKKworZXh0ZXJuIGludCBkbWFfZGVjbGFyZV9jb2hlcmVudF9tZW1vcnkoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGJ1c19hZGRyLAorCWRtYV9hZGRyX3QgZGV2aWNlX2FkZHIsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpOworZXh0ZXJuIHZvaWQgZG1hX3JlbGVhc2VfZGVjbGFyZWRfbWVtb3J5KHN0cnVjdCBkZXZpY2UgKmRldik7CitleHRlcm4gdm9pZCAqIGRtYV9tYXJrX2RlY2xhcmVkX21lbW9yeV9vY2N1cGllZChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJZG1hX2FkZHJfdCBkZXZpY2VfYWRkciwgc2l6ZV90IHNpemUpOworCisjZW5kaWYgLyogX0FTTV9ETUFfTUFQUElOR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2RtYS5oIGIvaW5jbHVkZS9hc20tbWlwcy9kbWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWFmOTkzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9kbWEuaApAQCAtMCwwICsxLDMxMyBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtL2RtYS5oOiBEZWZpbmVzIGZvciB1c2luZyBhbmQgYWxsb2NhdGluZyBkbWEgY2hhbm5lbHMuCisgKiBXcml0dGVuIGJ5IEhlbm51cyBCZXJnbWFuLCAxOTkyLgorICogSGlnaCBETUEgY2hhbm5lbCBzdXBwb3J0ICYgaW5mbyBieSBIYW5udSBTYXZvbGFpbmVuCisgKiBhbmQgSm9obiBCb3lkLCBOb3YuIDE5OTIuCisgKgorICogTk9URTogYWxsIHRoaXMgaXMgdHJ1ZSAqb25seSogZm9yIElTQS9FSVNBIGV4cGFuc2lvbnMgb24gTWlwcyBib2FyZHMKKyAqIGFuZCBjYW4gb25seSBiZSB1c2VkIGZvciBleHBhbnNpb24gY2FyZHMuIE9uYm9hcmQgRE1BIGNvbnRyb2xsZXJzLCBzdWNoCisgKiBhcyB0aGUgUjQwMzAgb24gSmF6eiBib2FyZHMgYmVoYXZlIHRvdGFsbHkgZGlmZmVyZW50IQorICovCisKKyNpZm5kZWYgX0FTTV9ETUFfSAorI2RlZmluZSBfQVNNX0RNQV9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4JCQkvKiBuZWVkIGJ5dGUgSU8gKi8KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgkJLyogQW5kIHNwaW5sb2NrcyAqLworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorCisKKyNpZmRlZiBIQVZFX1JFQUxMWV9TTE9XX0RNQV9DT05UUk9MTEVSCisjZGVmaW5lIGRtYV9vdXRiCW91dGJfcAorI2Vsc2UKKyNkZWZpbmUgZG1hX291dGIJb3V0YgorI2VuZGlmCisKKyNkZWZpbmUgZG1hX2luYgkJaW5iCisKKy8qCisgKiBOT1RFUyBhYm91dCBETUEgdHJhbnNmZXJzOgorICoKKyAqICBjb250cm9sbGVyIDE6IGNoYW5uZWxzIDAtMywgYnl0ZSBvcGVyYXRpb25zLCBwb3J0cyAwMC0xRgorICogIGNvbnRyb2xsZXIgMjogY2hhbm5lbHMgNC03LCB3b3JkIG9wZXJhdGlvbnMsIHBvcnRzIEMwLURGCisgKgorICogIC0gQUxMIHJlZ2lzdGVycyBhcmUgOCBiaXRzIG9ubHksIHJlZ2FyZGxlc3Mgb2YgdHJhbnNmZXIgc2l6ZQorICogIC0gY2hhbm5lbCA0IGlzIG5vdCB1c2VkIC0gY2FzY2FkZXMgMSBpbnRvIDIuCisgKiAgLSBjaGFubmVscyAwLTMgYXJlIGJ5dGUgLSBhZGRyZXNzZXMvY291bnRzIGFyZSBmb3IgcGh5c2ljYWwgYnl0ZXMKKyAqICAtIGNoYW5uZWxzIDUtNyBhcmUgd29yZCAtIGFkZHJlc3Nlcy9jb3VudHMgYXJlIGZvciBwaHlzaWNhbCB3b3JkcworICogIC0gdHJhbnNmZXJzIG11c3Qgbm90IGNyb3NzIHBoeXNpY2FsIDY0SyAoMC0zKSBvciAxMjhLICg1LTcpIGJvdW5kYXJpZXMKKyAqICAtIHRyYW5zZmVyIGNvdW50IGxvYWRlZCB0byByZWdpc3RlcnMgaXMgMSBsZXNzIHRoYW4gYWN0dWFsIGNvdW50CisgKiAgLSBjb250cm9sbGVyIDIgb2Zmc2V0cyBhcmUgYWxsIGV2ZW4gKDJ4IG9mZnNldHMgZm9yIGNvbnRyb2xsZXIgMSkKKyAqICAtIHBhZ2UgcmVnaXN0ZXJzIGZvciA1LTcgZG9uJ3QgdXNlIGRhdGEgYml0IDAsIHJlcHJlc2VudCAxMjhLIHBhZ2VzCisgKiAgLSBwYWdlIHJlZ2lzdGVycyBmb3IgMC0zIHVzZSBiaXQgMCwgcmVwcmVzZW50IDY0SyBwYWdlcworICoKKyAqIERNQSB0cmFuc2ZlcnMgYXJlIGxpbWl0ZWQgdG8gdGhlIGxvd2VyIDE2TUIgb2YgX3BoeXNpY2FsXyBtZW1vcnkuCisgKiBOb3RlIHRoYXQgYWRkcmVzc2VzIGxvYWRlZCBpbnRvIHJlZ2lzdGVycyBtdXN0IGJlIF9waHlzaWNhbF8gYWRkcmVzc2VzLAorICogbm90IGxvZ2ljYWwgYWRkcmVzc2VzICh3aGljaCBtYXkgZGlmZmVyIGlmIHBhZ2luZyBpcyBhY3RpdmUpLgorICoKKyAqICBBZGRyZXNzIG1hcHBpbmcgZm9yIGNoYW5uZWxzIDAtMzoKKyAqCisgKiAgIEEyMyAuLi4gQTE2IEExNSAuLi4gQTggIEE3IC4uLiBBMCAgICAoUGh5c2ljYWwgYWRkcmVzc2VzKQorICogICAgfCAgLi4uICB8ICAgfCAgLi4uIHwgICB8ICAuLi4gfAorICogICAgfCAgLi4uICB8ICAgfCAgLi4uIHwgICB8ICAuLi4gfAorICogICAgfCAgLi4uICB8ICAgfCAgLi4uIHwgICB8ICAuLi4gfAorICogICBQNyAgLi4uICBQMCAgQTcgLi4uIEEwICBBNyAuLi4gQTAKKyAqIHwgICAgUGFnZSAgICB8IEFkZHIgTVNCIHwgQWRkciBMU0IgfCAgIChETUEgcmVnaXN0ZXJzKQorICoKKyAqICBBZGRyZXNzIG1hcHBpbmcgZm9yIGNoYW5uZWxzIDUtNzoKKyAqCisgKiAgIEEyMyAuLi4gQTE3IEExNiBBMTUgLi4uIEE5IEE4IEE3IC4uLiBBMSBBMCAgICAoUGh5c2ljYWwgYWRkcmVzc2VzKQorICogICAgfCAgLi4uICB8ICAgXCAgIFwgICAuLi4gXCAgXCAgXCAgLi4uIFwgIFwKKyAqICAgIHwgIC4uLiAgfCAgICBcICAgXCAgIC4uLiBcICBcICBcICAuLi4gXCAgKG5vdCB1c2VkKQorICogICAgfCAgLi4uICB8ICAgICBcICAgXCAgIC4uLiBcICBcICBcICAuLi4gXAorICogICBQNyAgLi4uICBQMSAoMCkgQTcgQTYgIC4uLiBBMCBBNyBBNiAuLi4gQTAKKyAqIHwgICAgICBQYWdlICAgICAgfCAgQWRkciBNU0IgICB8ICBBZGRyIExTQiAgfCAgIChETUEgcmVnaXN0ZXJzKQorICoKKyAqIEFnYWluLCBjaGFubmVscyA1LTcgdHJhbnNmZXIgX3BoeXNpY2FsXyB3b3JkcyAoMTYgYml0cyksIHNvIGFkZHJlc3NlcworICogYW5kIGNvdW50cyBfbXVzdF8gYmUgd29yZC1hbGlnbmVkICh0aGUgbG93ZXN0IGFkZHJlc3MgYml0IGlzIF9pZ25vcmVkXyBhdAorICogdGhlIGhhcmR3YXJlIGxldmVsLCBzbyBvZGQtYnl0ZSB0cmFuc2ZlcnMgYXJlbid0IHBvc3NpYmxlKS4KKyAqCisgKiBUcmFuc2ZlciBjb3VudCAoX25vdCAjIGJ5dGVzXykgaXMgbGltaXRlZCB0byA2NEssIHJlcHJlc2VudGVkIGFzIGFjdHVhbAorICogY291bnQgLSAxIDogNjRLID0+IDB4RkZGRiwgMSA9PiAweDAwMDAuICBUaHVzLCBjb3VudCBpcyBhbHdheXMgMSBvciBtb3JlLAorICogYW5kIHVwIHRvIDEyOEsgYnl0ZXMgbWF5IGJlIHRyYW5zZmVycmVkIG9uIGNoYW5uZWxzIDUtNyBpbiBvbmUgb3BlcmF0aW9uLgorICoKKyAqLworCisjZGVmaW5lIE1BWF9ETUFfQ0hBTk5FTFMJOAorCisvKgorICogVGhlIG1heGltdW0gYWRkcmVzcyBpbiBLU0VHMCB0aGF0IHdlIGNhbiBwZXJmb3JtIGEgRE1BIHRyYW5zZmVyIHRvIG9uIHRoaXMKKyAqIHBsYXRmb3JtLiAgVGhpcyBkZXNjcmliZXMgb25seSB0aGUgUEMgc3R5bGUgcGFydCBvZiB0aGUgRE1BIGxvZ2ljIGxpa2Ugb24KKyAqIERlc2tzdGF0aW9ucyBvciBBY2VyIFBJQ0EgYnV0IG5vdCB0aGUgbXVjaCBtb3JlIHZlcnNhdGlsZSBETUEgbG9naWMgdXNlZAorICogZm9yIHRoZSBsb2NhbCBkZXZpY2VzIG9uIEFjZXIgUElDQSBvciBNYWdudW1zLgorICovCisjaWZkZWYgQ09ORklHX1NHSV9JUDIyCisvKiBIb3JyaWJsZSBoYWNrIHRvIGhhdmUgYSBjb3JyZWN0IERNQSB3aW5kb3cgb24gSVAyMiAqLworI2luY2x1ZGUgPGFzbS9zZ2kvbWMuaD4KKyNkZWZpbmUgTUFYX0RNQV9BRERSRVNTCQkoUEFHRV9PRkZTRVQgKyBTR0lNQ19TRUcwX0JBRERSICsgMHgwMTAwMDAwMCkKKyNlbHNlCisjZGVmaW5lIE1BWF9ETUFfQUREUkVTUwkJKFBBR0VfT0ZGU0VUICsgMHgwMTAwMDAwMCkKKyNlbmRpZgorCisvKiA4MjM3IERNQSBjb250cm9sbGVycyAqLworI2RlZmluZSBJT19ETUExX0JBU0UJMHgwMAkvKiA4IGJpdCBzbGF2ZSBETUEsIGNoYW5uZWxzIDAuLjMgKi8KKyNkZWZpbmUgSU9fRE1BMl9CQVNFCTB4QzAJLyogMTYgYml0IG1hc3RlciBETUEsIGNoIDQoPXNsYXZlIGlucHV0KS4uNyAqLworCisvKiBETUEgY29udHJvbGxlciByZWdpc3RlcnMgKi8KKyNkZWZpbmUgRE1BMV9DTURfUkVHCQkweDA4CS8qIGNvbW1hbmQgcmVnaXN0ZXIgKHcpICovCisjZGVmaW5lIERNQTFfU1RBVF9SRUcJCTB4MDgJLyogc3RhdHVzIHJlZ2lzdGVyIChyKSAqLworI2RlZmluZSBETUExX1JFUV9SRUcgICAgICAgICAgICAweDA5ICAgIC8qIHJlcXVlc3QgcmVnaXN0ZXIgKHcpICovCisjZGVmaW5lIERNQTFfTUFTS19SRUcJCTB4MEEJLyogc2luZ2xlLWNoYW5uZWwgbWFzayAodykgKi8KKyNkZWZpbmUgRE1BMV9NT0RFX1JFRwkJMHgwQgkvKiBtb2RlIHJlZ2lzdGVyICh3KSAqLworI2RlZmluZSBETUExX0NMRUFSX0ZGX1JFRwkweDBDCS8qIGNsZWFyIHBvaW50ZXIgZmxpcC1mbG9wICh3KSAqLworI2RlZmluZSBETUExX1RFTVBfUkVHICAgICAgICAgICAweDBEICAgIC8qIFRlbXBvcmFyeSBSZWdpc3RlciAocikgKi8KKyNkZWZpbmUgRE1BMV9SRVNFVF9SRUcJCTB4MEQJLyogTWFzdGVyIENsZWFyICh3KSAqLworI2RlZmluZSBETUExX0NMUl9NQVNLX1JFRyAgICAgICAweDBFICAgIC8qIENsZWFyIE1hc2sgKi8KKyNkZWZpbmUgRE1BMV9NQVNLX0FMTF9SRUcgICAgICAgMHgwRiAgICAvKiBhbGwtY2hhbm5lbHMgbWFzayAodykgKi8KKworI2RlZmluZSBETUEyX0NNRF9SRUcJCTB4RDAJLyogY29tbWFuZCByZWdpc3RlciAodykgKi8KKyNkZWZpbmUgRE1BMl9TVEFUX1JFRwkJMHhEMAkvKiBzdGF0dXMgcmVnaXN0ZXIgKHIpICovCisjZGVmaW5lIERNQTJfUkVRX1JFRyAgICAgICAgICAgIDB4RDIgICAgLyogcmVxdWVzdCByZWdpc3RlciAodykgKi8KKyNkZWZpbmUgRE1BMl9NQVNLX1JFRwkJMHhENAkvKiBzaW5nbGUtY2hhbm5lbCBtYXNrICh3KSAqLworI2RlZmluZSBETUEyX01PREVfUkVHCQkweEQ2CS8qIG1vZGUgcmVnaXN0ZXIgKHcpICovCisjZGVmaW5lIERNQTJfQ0xFQVJfRkZfUkVHCTB4RDgJLyogY2xlYXIgcG9pbnRlciBmbGlwLWZsb3AgKHcpICovCisjZGVmaW5lIERNQTJfVEVNUF9SRUcgICAgICAgICAgIDB4REEgICAgLyogVGVtcG9yYXJ5IFJlZ2lzdGVyIChyKSAqLworI2RlZmluZSBETUEyX1JFU0VUX1JFRwkJMHhEQQkvKiBNYXN0ZXIgQ2xlYXIgKHcpICovCisjZGVmaW5lIERNQTJfQ0xSX01BU0tfUkVHICAgICAgIDB4REMgICAgLyogQ2xlYXIgTWFzayAqLworI2RlZmluZSBETUEyX01BU0tfQUxMX1JFRyAgICAgICAweERFICAgIC8qIGFsbC1jaGFubmVscyBtYXNrICh3KSAqLworCisjZGVmaW5lIERNQV9BRERSXzAgICAgICAgICAgICAgIDB4MDAgICAgLyogRE1BIGFkZHJlc3MgcmVnaXN0ZXJzICovCisjZGVmaW5lIERNQV9BRERSXzEgICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgRE1BX0FERFJfMiAgICAgICAgICAgICAgMHgwNAorI2RlZmluZSBETUFfQUREUl8zICAgICAgICAgICAgICAweDA2CisjZGVmaW5lIERNQV9BRERSXzQgICAgICAgICAgICAgIDB4QzAKKyNkZWZpbmUgRE1BX0FERFJfNSAgICAgICAgICAgICAgMHhDNAorI2RlZmluZSBETUFfQUREUl82ICAgICAgICAgICAgICAweEM4CisjZGVmaW5lIERNQV9BRERSXzcgICAgICAgICAgICAgIDB4Q0MKKworI2RlZmluZSBETUFfQ05UXzAgICAgICAgICAgICAgICAweDAxICAgIC8qIERNQSBjb3VudCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgRE1BX0NOVF8xICAgICAgICAgICAgICAgMHgwMworI2RlZmluZSBETUFfQ05UXzIgICAgICAgICAgICAgICAweDA1CisjZGVmaW5lIERNQV9DTlRfMyAgICAgICAgICAgICAgIDB4MDcKKyNkZWZpbmUgRE1BX0NOVF80ICAgICAgICAgICAgICAgMHhDMgorI2RlZmluZSBETUFfQ05UXzUgICAgICAgICAgICAgICAweEM2CisjZGVmaW5lIERNQV9DTlRfNiAgICAgICAgICAgICAgIDB4Q0EKKyNkZWZpbmUgRE1BX0NOVF83ICAgICAgICAgICAgICAgMHhDRQorCisjZGVmaW5lIERNQV9QQUdFXzAgICAgICAgICAgICAgIDB4ODcgICAgLyogRE1BIHBhZ2UgcmVnaXN0ZXJzICovCisjZGVmaW5lIERNQV9QQUdFXzEgICAgICAgICAgICAgIDB4ODMKKyNkZWZpbmUgRE1BX1BBR0VfMiAgICAgICAgICAgICAgMHg4MQorI2RlZmluZSBETUFfUEFHRV8zICAgICAgICAgICAgICAweDgyCisjZGVmaW5lIERNQV9QQUdFXzUgICAgICAgICAgICAgIDB4OEIKKyNkZWZpbmUgRE1BX1BBR0VfNiAgICAgICAgICAgICAgMHg4OQorI2RlZmluZSBETUFfUEFHRV83ICAgICAgICAgICAgICAweDhBCisKKyNkZWZpbmUgRE1BX01PREVfUkVBRAkweDQ0CS8qIEkvTyB0byBtZW1vcnksIG5vIGF1dG9pbml0LCBpbmNyZW1lbnQsIHNpbmdsZSBtb2RlICovCisjZGVmaW5lIERNQV9NT0RFX1dSSVRFCTB4NDgJLyogbWVtb3J5IHRvIEkvTywgbm8gYXV0b2luaXQsIGluY3JlbWVudCwgc2luZ2xlIG1vZGUgKi8KKyNkZWZpbmUgRE1BX01PREVfQ0FTQ0FERSAweEMwICAgLyogcGFzcyB0aHJ1IERSRVEtPkhSUSwgREFDSzwtSExEQSBvbmx5ICovCisKKyNkZWZpbmUgRE1BX0FVVE9JTklUCTB4MTAKKworZXh0ZXJuIHNwaW5sb2NrX3QgIGRtYV9zcGluX2xvY2s7CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgY2xhaW1fZG1hX2xvY2sodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXNwaW5fbG9ja19pcnFzYXZlKCZkbWFfc3Bpbl9sb2NrLCBmbGFncyk7CisJcmV0dXJuIGZsYWdzOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHJlbGVhc2VfZG1hX2xvY2sodW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkbWFfc3Bpbl9sb2NrLCBmbGFncyk7Cit9CisKKy8qIGVuYWJsZS9kaXNhYmxlIGEgc3BlY2lmaWMgRE1BIGNoYW5uZWwgKi8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgZW5hYmxlX2RtYSh1bnNpZ25lZCBpbnQgZG1hbnIpCit7CisJaWYgKGRtYW5yPD0zKQorCQlkbWFfb3V0YihkbWFuciwgIERNQTFfTUFTS19SRUcpOworCWVsc2UKKwkJZG1hX291dGIoZG1hbnIgJiAzLCAgRE1BMl9NQVNLX1JFRyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgZGlzYWJsZV9kbWEodW5zaWduZWQgaW50IGRtYW5yKQoreworCWlmIChkbWFucjw9MykKKwkJZG1hX291dGIoZG1hbnIgfCA0LCAgRE1BMV9NQVNLX1JFRyk7CisJZWxzZQorCQlkbWFfb3V0YigoZG1hbnIgJiAzKSB8IDQsICBETUEyX01BU0tfUkVHKTsKK30KKworLyogQ2xlYXIgdGhlICdETUEgUG9pbnRlciBGbGlwIEZsb3AnLgorICogV3JpdGUgMCBmb3IgTFNCL01TQiwgMSBmb3IgTVNCL0xTQiBhY2Nlc3MuCisgKiBVc2UgdGhpcyBvbmNlIHRvIGluaXRpYWxpemUgdGhlIEZGIHRvIGEga25vd24gc3RhdGUuCisgKiBBZnRlciB0aGF0LCBrZWVwIHRyYWNrIG9mIGl0LiA6LSkKKyAqIC0tLSBJbiBvcmRlciB0byBkbyB0aGF0LCB0aGUgRE1BIHJvdXRpbmVzIGJlbG93IHNob3VsZCAtLS0KKyAqIC0tLSBvbmx5IGJlIHVzZWQgd2hpbGUgaG9sZGluZyB0aGUgRE1BIGxvY2sgISAtLS0KKyAqLworc3RhdGljIF9faW5saW5lX18gdm9pZCBjbGVhcl9kbWFfZmYodW5zaWduZWQgaW50IGRtYW5yKQoreworCWlmIChkbWFucjw9MykKKwkJZG1hX291dGIoMCwgIERNQTFfQ0xFQVJfRkZfUkVHKTsKKwllbHNlCisJCWRtYV9vdXRiKDAsICBETUEyX0NMRUFSX0ZGX1JFRyk7Cit9CisKKy8qIHNldCBtb2RlIChhYm92ZSkgZm9yIGEgc3BlY2lmaWMgRE1BIGNoYW5uZWwgKi8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgc2V0X2RtYV9tb2RlKHVuc2lnbmVkIGludCBkbWFuciwgY2hhciBtb2RlKQoreworCWlmIChkbWFucjw9MykKKwkJZG1hX291dGIobW9kZSB8IGRtYW5yLCAgRE1BMV9NT0RFX1JFRyk7CisJZWxzZQorCQlkbWFfb3V0Yihtb2RlIHwgKGRtYW5yJjMpLCAgRE1BMl9NT0RFX1JFRyk7Cit9CisKKy8qIFNldCBvbmx5IHRoZSBwYWdlIHJlZ2lzdGVyIGJpdHMgb2YgdGhlIHRyYW5zZmVyIGFkZHJlc3MuCisgKiBUaGlzIGlzIHVzZWQgZm9yIHN1Y2Nlc3NpdmUgdHJhbnNmZXJzIHdoZW4gd2Uga25vdyB0aGUgY29udGVudHMgb2YKKyAqIHRoZSBsb3dlciAxNiBiaXRzIG9mIHRoZSBETUEgY3VycmVudCBhZGRyZXNzIHJlZ2lzdGVyLCBidXQgYSA2NGsgYm91bmRhcnkKKyAqIG1heSBoYXZlIGJlZW4gY3Jvc3NlZC4KKyAqLworc3RhdGljIF9faW5saW5lX18gdm9pZCBzZXRfZG1hX3BhZ2UodW5zaWduZWQgaW50IGRtYW5yLCBjaGFyIHBhZ2VucikKK3sKKwlzd2l0Y2goZG1hbnIpIHsKKwkJY2FzZSAwOgorCQkJZG1hX291dGIocGFnZW5yLCBETUFfUEFHRV8wKTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlkbWFfb3V0YihwYWdlbnIsIERNQV9QQUdFXzEpOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCWRtYV9vdXRiKHBhZ2VuciwgRE1BX1BBR0VfMik7CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJZG1hX291dGIocGFnZW5yLCBETUFfUEFHRV8zKTsKKwkJCWJyZWFrOworCQljYXNlIDU6CisJCQlkbWFfb3V0YihwYWdlbnIgJiAweGZlLCBETUFfUEFHRV81KTsKKwkJCWJyZWFrOworCQljYXNlIDY6CisJCQlkbWFfb3V0YihwYWdlbnIgJiAweGZlLCBETUFfUEFHRV82KTsKKwkJCWJyZWFrOworCQljYXNlIDc6CisJCQlkbWFfb3V0YihwYWdlbnIgJiAweGZlLCBETUFfUEFHRV83KTsKKwkJCWJyZWFrOworCX0KK30KKworCisvKiBTZXQgdHJhbnNmZXIgYWRkcmVzcyAmIHBhZ2UgYml0cyBmb3Igc3BlY2lmaWMgRE1BIGNoYW5uZWwuCisgKiBBc3N1bWVzIGRtYSBmbGlwZmxvcCBpcyBjbGVhci4KKyAqLworc3RhdGljIF9faW5saW5lX18gdm9pZCBzZXRfZG1hX2FkZHIodW5zaWduZWQgaW50IGRtYW5yLCB1bnNpZ25lZCBpbnQgYSkKK3sKKwlzZXRfZG1hX3BhZ2UoZG1hbnIsIGE+PjE2KTsKKwlpZiAoZG1hbnIgPD0gMykgIHsKKwkgICAgZG1hX291dGIoIGEgJiAweGZmLCAoKGRtYW5yJjMpPDwxKSArIElPX0RNQTFfQkFTRSApOworICAgICAgICAgICAgZG1hX291dGIoIChhPj44KSAmIDB4ZmYsICgoZG1hbnImMyk8PDEpICsgSU9fRE1BMV9CQVNFICk7CisJfSAgZWxzZSAgeworCSAgICBkbWFfb3V0YiggKGE+PjEpICYgMHhmZiwgKChkbWFuciYzKTw8MikgKyBJT19ETUEyX0JBU0UgKTsKKwkgICAgZG1hX291dGIoIChhPj45KSAmIDB4ZmYsICgoZG1hbnImMyk8PDIpICsgSU9fRE1BMl9CQVNFICk7CisJfQorfQorCisKKy8qIFNldCB0cmFuc2ZlciBzaXplIChtYXggNjRrIGZvciBETUEwLi4zLCAxMjhrIGZvciBETUE1Li43KSBmb3IKKyAqIGEgc3BlY2lmaWMgRE1BIGNoYW5uZWwuCisgKiBZb3UgbXVzdCBlbnN1cmUgdGhlIHBhcmFtZXRlcnMgYXJlIHZhbGlkLgorICogTk9URTogZnJvbSBhIG1hbnVhbDogInRoZSBudW1iZXIgb2YgdHJhbnNmZXJzIGlzIG9uZSBtb3JlCisgKiB0aGFuIHRoZSBpbml0aWFsIHdvcmQgY291bnQiISBUaGlzIGlzIHRha2VuIGludG8gYWNjb3VudC4KKyAqIEFzc3VtZXMgZG1hIGZsaXAtZmxvcCBpcyBjbGVhci4KKyAqIE5PVEUgMjogImNvdW50IiByZXByZXNlbnRzIF9ieXRlc18gYW5kIG11c3QgYmUgZXZlbiBmb3IgY2hhbm5lbHMgNS03LgorICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHNldF9kbWFfY291bnQodW5zaWduZWQgaW50IGRtYW5yLCB1bnNpZ25lZCBpbnQgY291bnQpCit7CisgICAgICAgIGNvdW50LS07CisJaWYgKGRtYW5yIDw9IDMpICB7CisJICAgIGRtYV9vdXRiKCBjb3VudCAmIDB4ZmYsICgoZG1hbnImMyk8PDEpICsgMSArIElPX0RNQTFfQkFTRSApOworCSAgICBkbWFfb3V0YiggKGNvdW50Pj44KSAmIDB4ZmYsICgoZG1hbnImMyk8PDEpICsgMSArIElPX0RNQTFfQkFTRSApOworICAgICAgICB9IGVsc2UgeworCSAgICBkbWFfb3V0YiggKGNvdW50Pj4xKSAmIDB4ZmYsICgoZG1hbnImMyk8PDIpICsgMiArIElPX0RNQTJfQkFTRSApOworCSAgICBkbWFfb3V0YiggKGNvdW50Pj45KSAmIDB4ZmYsICgoZG1hbnImMyk8PDIpICsgMiArIElPX0RNQTJfQkFTRSApOworICAgICAgICB9Cit9CisKKworLyogR2V0IERNQSByZXNpZHVlIGNvdW50LiBBZnRlciBhIERNQSB0cmFuc2ZlciwgdGhpcworICogc2hvdWxkIHJldHVybiB6ZXJvLiBSZWFkaW5nIHRoaXMgd2hpbGUgYSBETUEgdHJhbnNmZXIgaXMKKyAqIHN0aWxsIGluIHByb2dyZXNzIHdpbGwgcmV0dXJuIHVucHJlZGljdGFibGUgcmVzdWx0cy4KKyAqIElmIGNhbGxlZCBiZWZvcmUgdGhlIGNoYW5uZWwgaGFzIGJlZW4gdXNlZCwgaXQgbWF5IHJldHVybiAxLgorICogT3RoZXJ3aXNlLCBpdCByZXR1cm5zIHRoZSBudW1iZXIgb2YgX2J5dGVzXyBsZWZ0IHRvIHRyYW5zZmVyLgorICoKKyAqIEFzc3VtZXMgRE1BIGZsaXAtZmxvcCBpcyBjbGVhci4KKyAqLworc3RhdGljIF9faW5saW5lX18gaW50IGdldF9kbWFfcmVzaWR1ZSh1bnNpZ25lZCBpbnQgZG1hbnIpCit7CisJdW5zaWduZWQgaW50IGlvX3BvcnQgPSAoZG1hbnI8PTMpPyAoKGRtYW5yJjMpPDwxKSArIDEgKyBJT19ETUExX0JBU0UKKwkJCQkJIDogKChkbWFuciYzKTw8MikgKyAyICsgSU9fRE1BMl9CQVNFOworCisJLyogdXNpbmcgc2hvcnQgdG8gZ2V0IDE2LWJpdCB3cmFwIGFyb3VuZCAqLworCXVuc2lnbmVkIHNob3J0IGNvdW50OworCisJY291bnQgPSAxICsgZG1hX2luYihpb19wb3J0KTsKKwljb3VudCArPSBkbWFfaW5iKGlvX3BvcnQpIDw8IDg7CisKKwlyZXR1cm4gKGRtYW5yPD0zKT8gY291bnQgOiAoY291bnQ8PDEpOworfQorCisKKy8qIFRoZXNlIGFyZSBpbiBrZXJuZWwvZG1hLmM6ICovCitleHRlcm4gaW50IHJlcXVlc3RfZG1hKHVuc2lnbmVkIGludCBkbWFuciwgY29uc3QgY2hhciAqIGRldmljZV9pZCk7CS8qIHJlc2VydmUgYSBETUEgY2hhbm5lbCAqLworZXh0ZXJuIHZvaWQgZnJlZV9kbWEodW5zaWduZWQgaW50IGRtYW5yKTsJLyogcmVsZWFzZSBpdCBhZ2FpbiAqLworCisvKiBGcm9tIFBDSSAqLworCisjaWZkZWYgQ09ORklHX1BDSQorZXh0ZXJuIGludCBpc2FfZG1hX2JyaWRnZV9idWdneTsKKyNlbHNlCisjZGVmaW5lIGlzYV9kbWFfYnJpZGdlX2J1Z2d5CSgwKQorI2VuZGlmCisKKyNlbmRpZiAvKiBfQVNNX0RNQV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2RzMTI4Ni5oIGIvaW5jbHVkZS9hc20tbWlwcy9kczEyODYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTgzYjZmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9kczEyODYuaApAQCAtMCwwICsxLDE1IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogTWFjaGluZSBkZXBlbmRlbnQgYWNjZXNzIGZ1bmN0aW9ucyBmb3IgUlRDIHJlZ2lzdGVycy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgUmFsZiBCYWVjaGxlIChyYWxmQGxpbnV4LW1pcHMub3JnKQorICovCisjaWZuZGVmIF9BU01fRFMxMjg2X0gKKyNkZWZpbmUgX0FTTV9EUzEyODZfSAorCisjaW5jbHVkZSA8ZHMxMjg2Lmg+CisKKyNlbmRpZiAvKiBfQVNNX0RTMTI4Nl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2VsZi5oIGIvaW5jbHVkZS9hc20tbWlwcy9lbGYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjkyYzgwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9lbGYuaApAQCAtMCwwICsxLDI4MiBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9BU01fRUxGX0gKKyNkZWZpbmUgX0FTTV9FTEZfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKy8qIEVMRiBoZWFkZXIgZV9mbGFncyBkZWZpbmVzLiAqLworLyogTUlQUyBhcmNoaXRlY3R1cmUgbGV2ZWwuICovCisjZGVmaW5lIEVGX01JUFNfQVJDSF8xCQkweDAwMDAwMDAwCS8qIC1taXBzMSBjb2RlLiAgKi8KKyNkZWZpbmUgRUZfTUlQU19BUkNIXzIJCTB4MTAwMDAwMDAJLyogLW1pcHMyIGNvZGUuICAqLworI2RlZmluZSBFRl9NSVBTX0FSQ0hfMwkJMHgyMDAwMDAwMAkvKiAtbWlwczMgY29kZS4gICovCisjZGVmaW5lIEVGX01JUFNfQVJDSF80CQkweDMwMDAwMDAwCS8qIC1taXBzNCBjb2RlLiAgKi8KKyNkZWZpbmUgRUZfTUlQU19BUkNIXzUJCTB4NDAwMDAwMDAJLyogLW1pcHM1IGNvZGUuICAqLworI2RlZmluZSBFRl9NSVBTX0FSQ0hfMzIJCTB4NTAwMDAwMDAJLyogTUlQUzMyIGNvZGUuICAqLworI2RlZmluZSBFRl9NSVBTX0FSQ0hfNjQJCTB4NjAwMDAwMDAJLyogTUlQUzY0IGNvZGUuICAqLworCisvKiBUaGUgQUJJIG9mIGEgZmlsZS4gKi8KKyNkZWZpbmUgRUZfTUlQU19BQklfTzMyCQkweDAwMDAxMDAwCS8qIE8zMiBBQkkuICAqLworI2RlZmluZSBFRl9NSVBTX0FCSV9PNjQJCTB4MDAwMDIwMDAJLyogTzMyIGV4dGVuZGVkIGZvciA2NCBiaXQuICAqLworCisjZGVmaW5lIFBUX01JUFNfUkVHSU5GTwkJMHg3MDAwMDAwMAorI2RlZmluZSBQVF9NSVBTX1JUUFJPQwkJMHg3MDAwMDAwMQorI2RlZmluZSBQVF9NSVBTX09QVElPTlMJCTB4NzAwMDAwMDIKKworLyogRmxhZ3MgaW4gdGhlIGVfZmxhZ3MgZmllbGQgb2YgdGhlIGhlYWRlciAqLworI2RlZmluZSBFRl9NSVBTX05PUkVPUkRFUgkweDAwMDAwMDAxCisjZGVmaW5lIEVGX01JUFNfUElDCQkweDAwMDAwMDAyCisjZGVmaW5lIEVGX01JUFNfQ1BJQwkJMHgwMDAwMDAwNAorI2RlZmluZSBFRl9NSVBTX0FCSTIJCTB4MDAwMDAwMjAKKyNkZWZpbmUgRUZfTUlQU19PUFRJT05TX0ZJUlNUCTB4MDAwMDAwODAKKyNkZWZpbmUgRUZfTUlQU18zMkJJVE1PREUJMHgwMDAwMDEwMAorI2RlZmluZSBFRl9NSVBTX0FCSQkJMHgwMDAwZjAwMAorI2RlZmluZSBFRl9NSVBTX0FSQ0gJCTB4ZjAwMDAwMDAKKworI2RlZmluZSBEVF9NSVBTX1JMRF9WRVJTSU9OCTB4NzAwMDAwMDEKKyNkZWZpbmUgRFRfTUlQU19USU1FX1NUQU1QCTB4NzAwMDAwMDIKKyNkZWZpbmUgRFRfTUlQU19JQ0hFQ0tTVU0JMHg3MDAwMDAwMworI2RlZmluZSBEVF9NSVBTX0lWRVJTSU9OCTB4NzAwMDAwMDQKKyNkZWZpbmUgRFRfTUlQU19GTEFHUwkJMHg3MDAwMDAwNQorCSNkZWZpbmUgUkhGX05PTkUJMHgwMDAwMDAwMAorCSNkZWZpbmUgUkhGX0hBUkRXQVkJMHgwMDAwMDAwMQorCSNkZWZpbmUgUkhGX05PVFBPVAkweDAwMDAwMDAyCisJI2RlZmluZSBSSEZfU0dJX09OTFkJMHgwMDAwMDAxMAorI2RlZmluZSBEVF9NSVBTX0JBU0VfQUREUkVTUwkweDcwMDAwMDA2CisjZGVmaW5lIERUX01JUFNfQ09ORkxJQ1QJMHg3MDAwMDAwOAorI2RlZmluZSBEVF9NSVBTX0xJQkxJU1QJCTB4NzAwMDAwMDkKKyNkZWZpbmUgRFRfTUlQU19MT0NBTF9HT1ROTwkweDcwMDAwMDBhCisjZGVmaW5lIERUX01JUFNfQ09ORkxJQ1ROTwkweDcwMDAwMDBiCisjZGVmaW5lIERUX01JUFNfTElCTElTVE5PCTB4NzAwMDAwMTAKKyNkZWZpbmUgRFRfTUlQU19TWU1UQUJOTwkweDcwMDAwMDExCisjZGVmaW5lIERUX01JUFNfVU5SRUZFWFROTwkweDcwMDAwMDEyCisjZGVmaW5lIERUX01JUFNfR09UU1lNCQkweDcwMDAwMDEzCisjZGVmaW5lIERUX01JUFNfSElQQUdFTk8JMHg3MDAwMDAxNAorI2RlZmluZSBEVF9NSVBTX1JMRF9NQVAJCTB4NzAwMDAwMTYKKworI2RlZmluZSBSX01JUFNfTk9ORQkJMAorI2RlZmluZSBSX01JUFNfMTYJCTEKKyNkZWZpbmUgUl9NSVBTXzMyCQkyCisjZGVmaW5lIFJfTUlQU19SRUwzMgkJMworI2RlZmluZSBSX01JUFNfMjYJCTQKKyNkZWZpbmUgUl9NSVBTX0hJMTYJCTUKKyNkZWZpbmUgUl9NSVBTX0xPMTYJCTYKKyNkZWZpbmUgUl9NSVBTX0dQUkVMMTYJCTcKKyNkZWZpbmUgUl9NSVBTX0xJVEVSQUwJCTgKKyNkZWZpbmUgUl9NSVBTX0dPVDE2CQk5CisjZGVmaW5lIFJfTUlQU19QQzE2CQkxMAorI2RlZmluZSBSX01JUFNfQ0FMTDE2CQkxMQorI2RlZmluZSBSX01JUFNfR1BSRUwzMgkJMTIKKy8qIFRoZSByZW1haW5pbmcgcmVsb2NzIGFyZSBkZWZpbmVkIG9uIElyaXgsIGFsdGhvdWdoIHRoZXkgYXJlIG5vdAorICAgaW4gdGhlIE1JUFMgRUxGIEFCSS4gICovCisjZGVmaW5lIFJfTUlQU19VTlVTRUQxCQkxMworI2RlZmluZSBSX01JUFNfVU5VU0VEMgkJMTQKKyNkZWZpbmUgUl9NSVBTX1VOVVNFRDMJCTE1CisjZGVmaW5lIFJfTUlQU19TSElGVDUJCTE2CisjZGVmaW5lIFJfTUlQU19TSElGVDYJCTE3CisjZGVmaW5lIFJfTUlQU182NAkJMTgKKyNkZWZpbmUgUl9NSVBTX0dPVF9ESVNQCQkxOQorI2RlZmluZSBSX01JUFNfR09UX1BBR0UJCTIwCisjZGVmaW5lIFJfTUlQU19HT1RfT0ZTVAkJMjEKKy8qCisgKiBUaGUgZm9sbG93aW5nIHR3byByZWxvY2F0aW9uIHR5cGVzIGFyZSBzcGVjaWZpZWQgaW4gdGhlIE1JUFMgQUJJCisgKiBjb25mb3JtYW5jZSBndWlkZSB2ZXJzaW9uIDEuMiBidXQgbm90IHlldCBpbiB0aGUgcHNBQkkuCisgKi8KKyNkZWZpbmUgUl9NSVBTX0dPVEhJMTYJCTIyCisjZGVmaW5lIFJfTUlQU19HT1RMTzE2CQkyMworI2RlZmluZSBSX01JUFNfU1VCCQkyNAorI2RlZmluZSBSX01JUFNfSU5TRVJUX0EJCTI1CisjZGVmaW5lIFJfTUlQU19JTlNFUlRfQgkJMjYKKyNkZWZpbmUgUl9NSVBTX0RFTEVURQkJMjcKKyNkZWZpbmUgUl9NSVBTX0hJR0hFUgkJMjgKKyNkZWZpbmUgUl9NSVBTX0hJR0hFU1QJCTI5CisvKgorICogVGhlIGZvbGxvd2luZyB0d28gcmVsb2NhdGlvbiB0eXBlcyBhcmUgc3BlY2lmaWVkIGluIHRoZSBNSVBTIEFCSQorICogY29uZm9ybWFuY2UgZ3VpZGUgdmVyc2lvbiAxLjIgYnV0IG5vdCB5ZXQgaW4gdGhlIHBzQUJJLgorICovCisjZGVmaW5lIFJfTUlQU19DQUxMSEkxNgkJMzAKKyNkZWZpbmUgUl9NSVBTX0NBTExMTzE2CQkzMQorLyoKKyAqIFRoaXMgcmFuZ2UgaXMgcmVzZXJ2ZWQgZm9yIHZlbmRvciBzcGVjaWZpYyByZWxvY2F0aW9ucy4KKyAqLworI2RlZmluZSBSX01JUFNfTE9WRU5ET1IJCTEwMAorI2RlZmluZSBSX01JUFNfSElWRU5ET1IJCTEyNworCisjZGVmaW5lIFNITl9NSVBTX0FDQ09NT04JMHhmZjAwCisKKyNkZWZpbmUgU0hUX01JUFNfTElTVAkJMHg3MDAwMDAwMAorI2RlZmluZSBTSFRfTUlQU19DT05GTElDVAkweDcwMDAwMDAyCisjZGVmaW5lIFNIVF9NSVBTX0dQVEFCCQkweDcwMDAwMDAzCisjZGVmaW5lIFNIVF9NSVBTX1VDT0RFCQkweDcwMDAwMDA0CisKKyNkZWZpbmUgU0hGX01JUFNfR1BSRUwJMHgxMDAwMDAwMAorCisjaWZuZGVmIEVMRl9BUkNICisvKiBFTEYgcmVnaXN0ZXIgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgRUxGX05HUkVHCTQ1CisjZGVmaW5lIEVMRl9ORlBSRUcJMzMKKwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGVsZl9ncmVnX3Q7Cit0eXBlZGVmIGVsZl9ncmVnX3QgZWxmX2dyZWdzZXRfdFtFTEZfTkdSRUddOworCit0eXBlZGVmIGRvdWJsZSBlbGZfZnByZWdfdDsKK3R5cGVkZWYgZWxmX2ZwcmVnX3QgZWxmX2ZwcmVnc2V0X3RbRUxGX05GUFJFR107CisKKyNpZmRlZiBDT05GSUdfTUlQUzMyCisKKy8qCisgKiBUaGlzIGlzIHVzZWQgdG8gZW5zdXJlIHdlIGRvbid0IGxvYWQgc29tZXRoaW5nIGZvciB0aGUgd3JvbmcgYXJjaGl0ZWN0dXJlLgorICovCisjZGVmaW5lIGVsZl9jaGVja19hcmNoKGhkcikJCQkJCQlcCisoewkJCQkJCQkJCVwKKwlpbnQgX19yZXMgPSAxOwkJCQkJCQlcCisJc3RydWN0IGVsZmhkciAqX19oID0gKGhkcik7CQkJCQlcCisJCQkJCQkJCQlcCisJaWYgKF9faC0+ZV9tYWNoaW5lICE9IEVNX01JUFMpCQkJCQlcCisJCV9fcmVzID0gMDsJCQkJCQlcCisJaWYgKF9faC0+ZV9pZGVudFtFSV9DTEFTU10gIT0gRUxGQ0xBU1MzMikJCQlcCisJCV9fcmVzID0gMDsJCQkJCQlcCisJaWYgKChfX2gtPmVfZmxhZ3MgJiBFRl9NSVBTX0FCSTIpICE9IDApCQkJCVwKKwkJX19yZXMgPSAwOwkJCQkJCVwKKwlpZiAoKChfX2gtPmVfZmxhZ3MgJiBFRl9NSVBTX0FCSSkgIT0gMCkgJiYJCQlcCisJICAgICgoX19oLT5lX2ZsYWdzICYgRUZfTUlQU19BQkkpICE9IEVGX01JUFNfQUJJX08zMikpCQlcCisJCV9fcmVzID0gMDsJCQkJCQlcCisJCQkJCQkJCQlcCisJX19yZXM7CQkJCQkJCQlcCit9KQorCisvKgorICogVGhlc2UgYXJlIHVzZWQgdG8gc2V0IHBhcmFtZXRlcnMgaW4gdGhlIGNvcmUgZHVtcHMuCisgKi8KKyNkZWZpbmUgRUxGX0NMQVNTCUVMRkNMQVNTMzIKKworI2VuZGlmIC8qIENPTkZJR19NSVBTMzIgKi8KKworI2lmZGVmIENPTkZJR19NSVBTNjQKKy8qCisgKiBUaGlzIGlzIHVzZWQgdG8gZW5zdXJlIHdlIGRvbid0IGxvYWQgc29tZXRoaW5nIGZvciB0aGUgd3JvbmcgYXJjaGl0ZWN0dXJlLgorICovCisjZGVmaW5lIGVsZl9jaGVja19hcmNoKGhkcikJCQkJCQlcCisoewkJCQkJCQkJCVwKKwlpbnQgX19yZXMgPSAxOwkJCQkJCQlcCisJc3RydWN0IGVsZmhkciAqX19oID0gKGhkcik7CQkJCQlcCisJCQkJCQkJCQlcCisJaWYgKF9faC0+ZV9tYWNoaW5lICE9IEVNX01JUFMpCQkJCQlcCisJCV9fcmVzID0gMDsJCQkJCQlcCisJaWYgKF9faC0+ZV9pZGVudFtFSV9DTEFTU10gIT0gRUxGQ0xBU1M2NCkgCQkJXAorCQlfX3JlcyA9IDA7CQkJCQkJXAorCQkJCQkJCQkJXAorCV9fcmVzOwkJCQkJCQkJXAorfSkKKworLyoKKyAqIFRoZXNlIGFyZSB1c2VkIHRvIHNldCBwYXJhbWV0ZXJzIGluIHRoZSBjb3JlIGR1bXBzLgorICovCisjZGVmaW5lIEVMRl9DTEFTUwlFTEZDTEFTUzY0CisKKyNlbmRpZiAvKiBDT05GSUdfTUlQUzY0ICovCisKKy8qCisgKiBUaGVzZSBhcmUgdXNlZCB0byBzZXQgcGFyYW1ldGVycyBpbiB0aGUgY29yZSBkdW1wcy4KKyAqLworI2lmZGVmIF9fTUlQU0VCX18KKyNkZWZpbmUgRUxGX0RBVEEJRUxGREFUQTJNU0IKKyNlbGlmIF9fTUlQU0VMX18KKyNkZWZpbmUgRUxGX0RBVEEJRUxGREFUQTJMU0IKKyNlbmRpZgorI2RlZmluZSBFTEZfQVJDSAlFTV9NSVBTCisKKyNlbmRpZiAvKiAhZGVmaW5lZChFTEZfQVJDSCkgKi8KKworI2lmZGVmIF9fS0VSTkVMX18KKworI2lmZGVmIENPTkZJR19NSVBTMzIKKworI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgsIGliY3MyKQkJCVwKK2RvIHsJCQkJCQkJXAorCWlmIChpYmNzMikJCQkJCVwKKwkJc2V0X3BlcnNvbmFsaXR5KFBFUl9TVlI0KTsJCVwKKwlzZXRfcGVyc29uYWxpdHkoUEVSX0xJTlVYKTsJCQlcCit9IHdoaWxlICgwKQorCisjZW5kaWYgLyogQ09ORklHX01JUFMzMiAqLworCisjaWZkZWYgQ09ORklHX01JUFM2NAorCisjZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCwgaWJjczIpCQkJCVwKK2RvIHsJY3VycmVudC0+dGhyZWFkLm1mbGFncyAmPSB+TUZfQUJJX01BU0s7CQkJXAorCWlmICgoZXgpLmVfaWRlbnRbRUlfQ0xBU1NdID09IEVMRkNMQVNTMzIpIHsJCVwKKwkJaWYgKCgoKGV4KS5lX2ZsYWdzICYgRUZfTUlQU19BQkkyKSAhPSAwKSAmJglcCisJCSAgICAgKChleCkuZV9mbGFncyAmIEVGX01JUFNfQUJJKSA9PSAwKQkJXAorCQkJY3VycmVudC0+dGhyZWFkLm1mbGFncyB8PSBNRl9OMzI7CVwKKwkJZWxzZQkJCQkJCVwKKwkJCWN1cnJlbnQtPnRocmVhZC5tZmxhZ3MgfD0gTUZfTzMyOwlcCisJfSBlbHNlCQkJCQkJCVwKKwkJY3VycmVudC0+dGhyZWFkLm1mbGFncyB8PSBNRl9ONjQ7CQlcCisJaWYgKGliY3MyKQkJCQkJCVwKKwkJc2V0X3BlcnNvbmFsaXR5KFBFUl9TVlI0KTsJCQlcCisJZWxzZSBpZiAoY3VycmVudC0+cGVyc29uYWxpdHkgIT0gUEVSX0xJTlVYMzIpCQlcCisJCXNldF9wZXJzb25hbGl0eShQRVJfTElOVVgpOwkJCVwKK30gd2hpbGUgKDApCisKKyNlbmRpZiAvKiBDT05GSUdfTUlQUzY0ICovCisKK2V4dGVybiB2b2lkIGR1bXBfcmVncyhlbGZfZ3JlZ190ICosIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2V4dGVybiBpbnQgZHVtcF90YXNrX2ZwdShzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgZWxmX2ZwcmVnc2V0X3QgKik7CisKKyNkZWZpbmUgRUxGX0NPUkVfQ09QWV9SRUdTKGVsZl9yZWdzLCByZWdzKQkJCVwKKwlkdW1wX3JlZ3MoKGVsZl9ncmVnX3QgKikmKGVsZl9yZWdzKSwgcmVncyk7CisjZGVmaW5lIEVMRl9DT1JFX0NPUFlfRlBSRUdTKHRzaywgZWxmX2ZwcmVncykJCQlcCisJZHVtcF90YXNrX2ZwdSh0c2ssIGVsZl9mcHJlZ3MpCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKy8qIFRoaXMgb25lIGFjY2VwdHMgSVJJWCBiaW5hcmllcy4gICovCisjZGVmaW5lIGlyaXhfZWxmX2NoZWNrX2FyY2goaGRyKQkoKGhkciktPmVfZmxhZ3MgJiBSSEZfU0dJX09OTFkpCisKKyNkZWZpbmUgVVNFX0VMRl9DT1JFX0RVTVAKKyNkZWZpbmUgRUxGX0VYRUNfUEFHRVNJWkUJUEFHRV9TSVpFCisKKy8qIFRoaXMgeWllbGRzIGEgbWFzayB0aGF0IHVzZXIgcHJvZ3JhbXMgY2FuIHVzZSB0byBmaWd1cmUgb3V0IHdoYXQKKyAgIGluc3RydWN0aW9uIHNldCB0aGlzIGNwdSBzdXBwb3J0cy4gIFRoaXMgY291bGQgYmUgZG9uZSBpbiB1c2Vyc3BhY2UsCisgICBidXQgaXQncyBub3QgZWFzeSwgYW5kIHdlJ3ZlIGFscmVhZHkgZG9uZSBpdCBoZXJlLiAgKi8KKworI2RlZmluZSBFTEZfSFdDQVAgICAgICAgKDApCisKKy8qIFRoaXMgeWllbGRzIGEgc3RyaW5nIHRoYXQgbGQuc28gd2lsbCB1c2UgdG8gbG9hZCBpbXBsZW1lbnRhdGlvbgorICAgc3BlY2lmaWMgbGlicmFyaWVzIGZvciBvcHRpbWl6YXRpb24uICBUaGlzIGlzIG1vcmUgc3BlY2lmaWMgaW4KKyAgIGludGVudCB0aGFuIHBva2luZyBhdCB1bmFtZSBvciAvcHJvYy9jcHVpbmZvLgorCisgICBGb3IgdGhlIG1vbWVudCwgd2UgaGF2ZSBvbmx5IG9wdGltaXphdGlvbnMgZm9yIHRoZSBJbnRlbCBnZW5lcmF0aW9ucywKKyAgIGJ1dCB0aGF0IGNvdWxkIGNoYW5nZS4uLiAqLworCisjZGVmaW5lIEVMRl9QTEFURk9STSAgKE5VTEwpCisKKy8qCisgKiBTZWUgY29tbWVudHMgaW4gYXNtLWFscGhhL2VsZi5oLCB0aGlzIGlzIHRoZSBzYW1lIHRoaW5nCisgKiBvbiB0aGUgTUlQUy4KKyAqLworI2RlZmluZSBFTEZfUExBVF9JTklUKF9yLCBsb2FkX2FkZHIpCWRvIHsgXAorCV9yLT5yZWdzWzFdID0gX3ItPnJlZ3NbMl0gPSBfci0+cmVnc1szXSA9IF9yLT5yZWdzWzRdID0gMDsJXAorCV9yLT5yZWdzWzVdID0gX3ItPnJlZ3NbNl0gPSBfci0+cmVnc1s3XSA9IF9yLT5yZWdzWzhdID0gMDsJXAorCV9yLT5yZWdzWzldID0gX3ItPnJlZ3NbMTBdID0gX3ItPnJlZ3NbMTFdID0gX3ItPnJlZ3NbMTJdID0gMDsJXAorCV9yLT5yZWdzWzEzXSA9IF9yLT5yZWdzWzE0XSA9IF9yLT5yZWdzWzE1XSA9IF9yLT5yZWdzWzE2XSA9IDA7CVwKKwlfci0+cmVnc1sxN10gPSBfci0+cmVnc1sxOF0gPSBfci0+cmVnc1sxOV0gPSBfci0+cmVnc1syMF0gPSAwOwlcCisJX3ItPnJlZ3NbMjFdID0gX3ItPnJlZ3NbMjJdID0gX3ItPnJlZ3NbMjNdID0gX3ItPnJlZ3NbMjRdID0gMDsJXAorCV9yLT5yZWdzWzI1XSA9IF9yLT5yZWdzWzI2XSA9IF9yLT5yZWdzWzI3XSA9IF9yLT5yZWdzWzI4XSA9IDA7CVwKKwlfci0+cmVnc1szMF0gPSBfci0+cmVnc1szMV0gPSAwOwkJCQlcCit9IHdoaWxlICgwKQorCisvKiBUaGlzIGlzIHRoZSBsb2NhdGlvbiB0aGF0IGFuIEVUX0RZTiBwcm9ncmFtIGlzIGxvYWRlZCBpZiBleGVjJ2VkLiAgVHlwaWNhbAorICAgdXNlIG9mIHRoaXMgaXMgdG8gaW52b2tlICIuL2xkLnNvIHNvbWVwcm9nIiB0byB0ZXN0IG91dCBhIG5ldyB2ZXJzaW9uIG9mCisgICB0aGUgbG9hZGVyLiAgV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBpdCBpcyBvdXQgb2YgdGhlIHdheSBvZiB0aGUgcHJvZ3JhbQorICAgdGhhdCBpdCB3aWxsICJleGVjIiwgYW5kIHRoYXQgdGhlcmUgaXMgc3VmZmljaWVudCByb29tIGZvciB0aGUgYnJrLiAgKi8KKworI2lmbmRlZiBFTEZfRVRfRFlOX0JBU0UKKyNkZWZpbmUgRUxGX0VUX0RZTl9CQVNFICAgICAgICAgKFRBU0tfU0laRSAvIDMgKiAyKQorI2VuZGlmCisKKyNlbmRpZiAvKiBfQVNNX0VMRl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2Vycm5vLmggYi9pbmNsdWRlL2FzbS1taXBzL2Vycm5vLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI0NThmOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvZXJybm8uaApAQCAtMCwwICsxLDEyNyBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NSwgMTk5OSwgMjAwMSwgMjAwMiBieSBSYWxmIEJhZWNobGUKKyAqLworI2lmbmRlZiBfQVNNX0VSUk5PX0gKKyNkZWZpbmUgX0FTTV9FUlJOT19ICisKKy8qCisgKiBUaGVzZSBlcnJvciBudW1iZXJzIGFyZSBpbnRlbmRlZCB0byBiZSBNSVBTIEFCSSBjb21wYXRpYmxlCisgKi8KKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2Vycm5vLWJhc2UuaD4KKworI2RlZmluZQlFTk9NU0cJCTM1CS8qIE5vIG1lc3NhZ2Ugb2YgZGVzaXJlZCB0eXBlICovCisjZGVmaW5lCUVJRFJNCQkzNgkvKiBJZGVudGlmaWVyIHJlbW92ZWQgKi8KKyNkZWZpbmUJRUNIUk5HCQkzNwkvKiBDaGFubmVsIG51bWJlciBvdXQgb2YgcmFuZ2UgKi8KKyNkZWZpbmUJRUwyTlNZTkMJMzgJLyogTGV2ZWwgMiBub3Qgc3luY2hyb25pemVkICovCisjZGVmaW5lCUVMM0hMVAkJMzkJLyogTGV2ZWwgMyBoYWx0ZWQgKi8KKyNkZWZpbmUJRUwzUlNUCQk0MAkvKiBMZXZlbCAzIHJlc2V0ICovCisjZGVmaW5lCUVMTlJORwkJNDEJLyogTGluayBudW1iZXIgb3V0IG9mIHJhbmdlICovCisjZGVmaW5lCUVVTkFUQ0gJCTQyCS8qIFByb3RvY29sIGRyaXZlciBub3QgYXR0YWNoZWQgKi8KKyNkZWZpbmUJRU5PQ1NJCQk0MwkvKiBObyBDU0kgc3RydWN0dXJlIGF2YWlsYWJsZSAqLworI2RlZmluZQlFTDJITFQJCTQ0CS8qIExldmVsIDIgaGFsdGVkICovCisjZGVmaW5lCUVERUFETEsJCTQ1CS8qIFJlc291cmNlIGRlYWRsb2NrIHdvdWxkIG9jY3VyICovCisjZGVmaW5lCUVOT0xDSwkJNDYJLyogTm8gcmVjb3JkIGxvY2tzIGF2YWlsYWJsZSAqLworI2RlZmluZQlFQkFERQkJNTAJLyogSW52YWxpZCBleGNoYW5nZSAqLworI2RlZmluZQlFQkFEUgkJNTEJLyogSW52YWxpZCByZXF1ZXN0IGRlc2NyaXB0b3IgKi8KKyNkZWZpbmUJRVhGVUxMCQk1MgkvKiBFeGNoYW5nZSBmdWxsICovCisjZGVmaW5lCUVOT0FOTwkJNTMJLyogTm8gYW5vZGUgKi8KKyNkZWZpbmUJRUJBRFJRQwkJNTQJLyogSW52YWxpZCByZXF1ZXN0IGNvZGUgKi8KKyNkZWZpbmUJRUJBRFNMVAkJNTUJLyogSW52YWxpZCBzbG90ICovCisjZGVmaW5lCUVERUFETE9DSwk1NgkvKiBGaWxlIGxvY2tpbmcgZGVhZGxvY2sgZXJyb3IgKi8KKyNkZWZpbmUJRUJGT05UCQk1OQkvKiBCYWQgZm9udCBmaWxlIGZvcm1hdCAqLworI2RlZmluZQlFTk9TVFIJCTYwCS8qIERldmljZSBub3QgYSBzdHJlYW0gKi8KKyNkZWZpbmUJRU5PREFUQQkJNjEJLyogTm8gZGF0YSBhdmFpbGFibGUgKi8KKyNkZWZpbmUJRVRJTUUJCTYyCS8qIFRpbWVyIGV4cGlyZWQgKi8KKyNkZWZpbmUJRU5PU1IJCTYzCS8qIE91dCBvZiBzdHJlYW1zIHJlc291cmNlcyAqLworI2RlZmluZQlFTk9ORVQJCTY0CS8qIE1hY2hpbmUgaXMgbm90IG9uIHRoZSBuZXR3b3JrICovCisjZGVmaW5lCUVOT1BLRwkJNjUJLyogUGFja2FnZSBub3QgaW5zdGFsbGVkICovCisjZGVmaW5lCUVSRU1PVEUJCTY2CS8qIE9iamVjdCBpcyByZW1vdGUgKi8KKyNkZWZpbmUJRU5PTElOSwkJNjcJLyogTGluayBoYXMgYmVlbiBzZXZlcmVkICovCisjZGVmaW5lCUVBRFYJCTY4CS8qIEFkdmVydGlzZSBlcnJvciAqLworI2RlZmluZQlFU1JNTlQJCTY5CS8qIFNybW91bnQgZXJyb3IgKi8KKyNkZWZpbmUJRUNPTU0JCTcwCS8qIENvbW11bmljYXRpb24gZXJyb3Igb24gc2VuZCAqLworI2RlZmluZQlFUFJPVE8JCTcxCS8qIFByb3RvY29sIGVycm9yICovCisjZGVmaW5lCUVET1RET1QJCTczCS8qIFJGUyBzcGVjaWZpYyBlcnJvciAqLworI2RlZmluZQlFTVVMVElIT1AJNzQJLyogTXVsdGlob3AgYXR0ZW1wdGVkICovCisjZGVmaW5lCUVCQURNU0cJCTc3CS8qIE5vdCBhIGRhdGEgbWVzc2FnZSAqLworI2RlZmluZQlFTkFNRVRPT0xPTkcJNzgJLyogRmlsZSBuYW1lIHRvbyBsb25nICovCisjZGVmaW5lCUVPVkVSRkxPVwk3OQkvKiBWYWx1ZSB0b28gbGFyZ2UgZm9yIGRlZmluZWQgZGF0YSB0eXBlICovCisjZGVmaW5lCUVOT1RVTklRCTgwCS8qIE5hbWUgbm90IHVuaXF1ZSBvbiBuZXR3b3JrICovCisjZGVmaW5lCUVCQURGRAkJODEJLyogRmlsZSBkZXNjcmlwdG9yIGluIGJhZCBzdGF0ZSAqLworI2RlZmluZQlFUkVNQ0hHCQk4MgkvKiBSZW1vdGUgYWRkcmVzcyBjaGFuZ2VkICovCisjZGVmaW5lCUVMSUJBQ0MJCTgzCS8qIENhbiBub3QgYWNjZXNzIGEgbmVlZGVkIHNoYXJlZCBsaWJyYXJ5ICovCisjZGVmaW5lCUVMSUJCQUQJCTg0CS8qIEFjY2Vzc2luZyBhIGNvcnJ1cHRlZCBzaGFyZWQgbGlicmFyeSAqLworI2RlZmluZQlFTElCU0NOCQk4NQkvKiAubGliIHNlY3Rpb24gaW4gYS5vdXQgY29ycnVwdGVkICovCisjZGVmaW5lCUVMSUJNQVgJCTg2CS8qIEF0dGVtcHRpbmcgdG8gbGluayBpbiB0b28gbWFueSBzaGFyZWQgbGlicmFyaWVzICovCisjZGVmaW5lCUVMSUJFWEVDCTg3CS8qIENhbm5vdCBleGVjIGEgc2hhcmVkIGxpYnJhcnkgZGlyZWN0bHkgKi8KKyNkZWZpbmUJRUlMU0VRCQk4OAkvKiBJbGxlZ2FsIGJ5dGUgc2VxdWVuY2UgKi8KKyNkZWZpbmUJRU5PU1lTCQk4OQkvKiBGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQgKi8KKyNkZWZpbmUJRUxPT1AJCTkwCS8qIFRvbyBtYW55IHN5bWJvbGljIGxpbmtzIGVuY291bnRlcmVkICovCisjZGVmaW5lCUVSRVNUQVJUCTkxCS8qIEludGVycnVwdGVkIHN5c3RlbSBjYWxsIHNob3VsZCBiZSByZXN0YXJ0ZWQgKi8KKyNkZWZpbmUJRVNUUlBJUEUJOTIJLyogU3RyZWFtcyBwaXBlIGVycm9yICovCisjZGVmaW5lCUVOT1RFTVBUWQk5MwkvKiBEaXJlY3Rvcnkgbm90IGVtcHR5ICovCisjZGVmaW5lCUVVU0VSUwkJOTQJLyogVG9vIG1hbnkgdXNlcnMgKi8KKyNkZWZpbmUJRU5PVFNPQ0sJOTUJLyogU29ja2V0IG9wZXJhdGlvbiBvbiBub24tc29ja2V0ICovCisjZGVmaW5lCUVERVNUQUREUlJFUQk5NgkvKiBEZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkICovCisjZGVmaW5lCUVNU0dTSVpFCTk3CS8qIE1lc3NhZ2UgdG9vIGxvbmcgKi8KKyNkZWZpbmUJRVBST1RPVFlQRQk5OAkvKiBQcm90b2NvbCB3cm9uZyB0eXBlIGZvciBzb2NrZXQgKi8KKyNkZWZpbmUJRU5PUFJPVE9PUFQJOTkJLyogUHJvdG9jb2wgbm90IGF2YWlsYWJsZSAqLworI2RlZmluZQlFUFJPVE9OT1NVUFBPUlQJMTIwCS8qIFByb3RvY29sIG5vdCBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUJRVNPQ0tUTk9TVVBQT1JUCTEyMQkvKiBTb2NrZXQgdHlwZSBub3Qgc3VwcG9ydGVkICovCisjZGVmaW5lCUVPUE5PVFNVUFAJMTIyCS8qIE9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkIG9uIHRyYW5zcG9ydCBlbmRwb2ludCAqLworI2RlZmluZQlFUEZOT1NVUFBPUlQJMTIzCS8qIFByb3RvY29sIGZhbWlseSBub3Qgc3VwcG9ydGVkICovCisjZGVmaW5lCUVBRk5PU1VQUE9SVAkxMjQJLyogQWRkcmVzcyBmYW1pbHkgbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbCAqLworI2RlZmluZQlFQUREUklOVVNFCTEyNQkvKiBBZGRyZXNzIGFscmVhZHkgaW4gdXNlICovCisjZGVmaW5lCUVBRERSTk9UQVZBSUwJMTI2CS8qIENhbm5vdCBhc3NpZ24gcmVxdWVzdGVkIGFkZHJlc3MgKi8KKyNkZWZpbmUJRU5FVERPV04JMTI3CS8qIE5ldHdvcmsgaXMgZG93biAqLworI2RlZmluZQlFTkVUVU5SRUFDSAkxMjgJLyogTmV0d29yayBpcyB1bnJlYWNoYWJsZSAqLworI2RlZmluZQlFTkVUUkVTRVQJMTI5CS8qIE5ldHdvcmsgZHJvcHBlZCBjb25uZWN0aW9uIGJlY2F1c2Ugb2YgcmVzZXQgKi8KKyNkZWZpbmUJRUNPTk5BQk9SVEVECTEzMAkvKiBTb2Z0d2FyZSBjYXVzZWQgY29ubmVjdGlvbiBhYm9ydCAqLworI2RlZmluZQlFQ09OTlJFU0VUCTEzMQkvKiBDb25uZWN0aW9uIHJlc2V0IGJ5IHBlZXIgKi8KKyNkZWZpbmUJRU5PQlVGUwkJMTMyCS8qIE5vIGJ1ZmZlciBzcGFjZSBhdmFpbGFibGUgKi8KKyNkZWZpbmUJRUlTQ09OTgkJMTMzCS8qIFRyYW5zcG9ydCBlbmRwb2ludCBpcyBhbHJlYWR5IGNvbm5lY3RlZCAqLworI2RlZmluZQlFTk9UQ09OTgkxMzQJLyogVHJhbnNwb3J0IGVuZHBvaW50IGlzIG5vdCBjb25uZWN0ZWQgKi8KKyNkZWZpbmUJRVVDTEVBTgkJMTM1CS8qIFN0cnVjdHVyZSBuZWVkcyBjbGVhbmluZyAqLworI2RlZmluZQlFTk9UTkFNCQkxMzcJLyogTm90IGEgWEVOSVggbmFtZWQgdHlwZSBmaWxlICovCisjZGVmaW5lCUVOQVZBSUwJCTEzOAkvKiBObyBYRU5JWCBzZW1hcGhvcmVzIGF2YWlsYWJsZSAqLworI2RlZmluZQlFSVNOQU0JCTEzOQkvKiBJcyBhIG5hbWVkIHR5cGUgZmlsZSAqLworI2RlZmluZQlFUkVNT1RFSU8JMTQwCS8qIFJlbW90ZSBJL08gZXJyb3IgKi8KKyNkZWZpbmUgRUlOSVQJCTE0MQkvKiBSZXNlcnZlZCAqLworI2RlZmluZSBFUkVNREVWCQkxNDIJLyogRXJyb3IgMTQyICovCisjZGVmaW5lCUVTSFVURE9XTgkxNDMJLyogQ2Fubm90IHNlbmQgYWZ0ZXIgdHJhbnNwb3J0IGVuZHBvaW50IHNodXRkb3duICovCisjZGVmaW5lCUVUT09NQU5ZUkVGUwkxNDQJLyogVG9vIG1hbnkgcmVmZXJlbmNlczogY2Fubm90IHNwbGljZSAqLworI2RlZmluZQlFVElNRURPVVQJMTQ1CS8qIENvbm5lY3Rpb24gdGltZWQgb3V0ICovCisjZGVmaW5lCUVDT05OUkVGVVNFRAkxNDYJLyogQ29ubmVjdGlvbiByZWZ1c2VkICovCisjZGVmaW5lCUVIT1NURE9XTgkxNDcJLyogSG9zdCBpcyBkb3duICovCisjZGVmaW5lCUVIT1NUVU5SRUFDSAkxNDgJLyogTm8gcm91dGUgdG8gaG9zdCAqLworI2RlZmluZQlFV09VTERCTE9DSwlFQUdBSU4JLyogT3BlcmF0aW9uIHdvdWxkIGJsb2NrICovCisjZGVmaW5lCUVBTFJFQURZCTE0OQkvKiBPcGVyYXRpb24gYWxyZWFkeSBpbiBwcm9ncmVzcyAqLworI2RlZmluZQlFSU5QUk9HUkVTUwkxNTAJLyogT3BlcmF0aW9uIG5vdyBpbiBwcm9ncmVzcyAqLworI2RlZmluZQlFU1RBTEUJCTE1MQkvKiBTdGFsZSBORlMgZmlsZSBoYW5kbGUgKi8KKyNkZWZpbmUgRUNBTkNFTEVECTE1OAkvKiBBSU8gb3BlcmF0aW9uIGNhbmNlbGVkICovCisKKy8qCisgKiBUaGVzZSBlcnJvciBhcmUgTGludXggZXh0ZW5zaW9ucy4KKyAqLworI2RlZmluZSBFTk9NRURJVU0JMTU5CS8qIE5vIG1lZGl1bSBmb3VuZCAqLworI2RlZmluZSBFTUVESVVNVFlQRQkxNjAJLyogV3JvbmcgbWVkaXVtIHR5cGUgKi8KKyNkZWZpbmUJRU5PS0VZCQkxNjEJLyogUmVxdWlyZWQga2V5IG5vdCBhdmFpbGFibGUgKi8KKyNkZWZpbmUJRUtFWUVYUElSRUQJMTYyCS8qIEtleSBoYXMgZXhwaXJlZCAqLworI2RlZmluZQlFS0VZUkVWT0tFRAkxNjMJLyogS2V5IGhhcyBiZWVuIHJldm9rZWQgKi8KKyNkZWZpbmUJRUtFWVJFSkVDVEVECTE2NAkvKiBLZXkgd2FzIHJlamVjdGVkIGJ5IHNlcnZpY2UgKi8KKworI2RlZmluZSBFRFFVT1QJCTExMzMJLyogUXVvdGEgZXhjZWVkZWQgKi8KKworI2lmZGVmIF9fS0VSTkVMX18KKworLyogVGhlIGJpZ2dlc3QgZXJyb3IgbnVtYmVyIGRlZmluZWQgaGVyZSBvciBpbiA8bGludXgvZXJybm8uaD4uICovCisjZGVmaW5lIEVNQVhFUlJOTwkxMTMzCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfQVNNX0VSUk5PX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvZmNudGwuaCBiL2luY2x1ZGUvYXNtLW1pcHMvZmNudGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDM2MzkyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9mY250bC5oCkBAIC0wLDAgKzEsMTI1IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LCA5NiwgOTcsIDk4LCA5OSwgMjAwMyBSYWxmIEJhZWNobGUKKyAqLworI2lmbmRlZiBfQVNNX0ZDTlRMX0gKKyNkZWZpbmUgX0FTTV9GQ05UTF9ICisKKy8qIG9wZW4vZmNudGwgLSBPX1NZTkMgaXMgb25seSBpbXBsZW1lbnRlZCBvbiBibG9ja3MgZGV2aWNlcyBhbmQgb24gZmlsZXMKKyAgIGxvY2F0ZWQgb24gYW4gZXh0MiBmaWxlIHN5c3RlbSAqLworI2RlZmluZSBPX0FDQ01PREUJMHgwMDAzCisjZGVmaW5lIE9fUkRPTkxZCTB4MDAwMAorI2RlZmluZSBPX1dST05MWQkweDAwMDEKKyNkZWZpbmUgT19SRFdSCQkweDAwMDIKKyNkZWZpbmUgT19BUFBFTkQJMHgwMDA4CisjZGVmaW5lIE9fU1lOQwkJMHgwMDEwCisjZGVmaW5lIE9fTk9OQkxPQ0sJMHgwMDgwCisjZGVmaW5lIE9fQ1JFQVQgICAgICAgICAweDAxMDAJLyogbm90IGZjbnRsICovCisjZGVmaW5lIE9fVFJVTkMJCTB4MDIwMAkvKiBub3QgZmNudGwgKi8KKyNkZWZpbmUgT19FWENMCQkweDA0MDAJLyogbm90IGZjbnRsICovCisjZGVmaW5lIE9fTk9DVFRZCTB4MDgwMAkvKiBub3QgZmNudGwgKi8KKyNkZWZpbmUgRkFTWU5DCQkweDEwMDAJLyogZmNudGwsIGZvciBCU0QgY29tcGF0aWJpbGl0eSAqLworI2RlZmluZSBPX0xBUkdFRklMRQkweDIwMDAJLyogYWxsb3cgbGFyZ2UgZmlsZSBvcGVucyAqLworI2RlZmluZSBPX0RJUkVDVAkweDgwMDAJLyogZGlyZWN0IGRpc2sgYWNjZXNzIGhpbnQgKi8KKyNkZWZpbmUgT19ESVJFQ1RPUlkJMHgxMDAwMAkvKiBtdXN0IGJlIGEgZGlyZWN0b3J5ICovCisjZGVmaW5lIE9fTk9GT0xMT1cJMHgyMDAwMAkvKiBkb24ndCBmb2xsb3cgbGlua3MgKi8KKyNkZWZpbmUgT19OT0FUSU1FCTB4NDAwMDAKKworI2RlZmluZSBPX05ERUxBWQlPX05PTkJMT0NLCisKKyNkZWZpbmUgRl9EVVBGRAkJMAkvKiBkdXAgKi8KKyNkZWZpbmUgRl9HRVRGRAkJMQkvKiBnZXQgY2xvc2Vfb25fZXhlYyAqLworI2RlZmluZSBGX1NFVEZECQkyCS8qIHNldC9jbGVhciBjbG9zZV9vbl9leGVjICovCisjZGVmaW5lIEZfR0VURkwJCTMJLyogZ2V0IGZpbGUtPmZfZmxhZ3MgKi8KKyNkZWZpbmUgRl9TRVRGTAkJNAkvKiBzZXQgZmlsZS0+Zl9mbGFncyAqLworI2RlZmluZSBGX0dFVExLCQkxNAorI2RlZmluZSBGX1NFVExLCQk2CisjZGVmaW5lIEZfU0VUTEtXCTcKKworI2RlZmluZSBGX1NFVE9XTgkyNAkvKiAgZm9yIHNvY2tldHMuICovCisjZGVmaW5lIEZfR0VUT1dOCTIzCS8qICBmb3Igc29ja2V0cy4gKi8KKyNkZWZpbmUgRl9TRVRTSUcJMTAJLyogIGZvciBzb2NrZXRzLiAqLworI2RlZmluZSBGX0dFVFNJRwkxMQkvKiAgZm9yIHNvY2tldHMuICovCisKKyNpZm5kZWYgX19taXBzNjQKKyNkZWZpbmUgRl9HRVRMSzY0CTMzCS8qICB1c2luZyAnc3RydWN0IGZsb2NrNjQnICovCisjZGVmaW5lIEZfU0VUTEs2NAkzNAorI2RlZmluZSBGX1NFVExLVzY0CTM1CisjZW5kaWYKKworLyogZm9yIEZfW0dFVHxTRVRdRkwgKi8KKyNkZWZpbmUgRkRfQ0xPRVhFQwkxCS8qIGFjdHVhbGx5IGFueXRoaW5nIHdpdGggbG93IGJpdCBzZXQgZ29lcyAqLworCisvKiBmb3IgcG9zaXggZmNudGwoKSBhbmQgbG9ja2YoKSAqLworI2RlZmluZSBGX1JETENLCQkwCisjZGVmaW5lIEZfV1JMQ0sJCTEKKyNkZWZpbmUgRl9VTkxDSwkJMgorCisvKiBmb3Igb2xkIGltcGxlbWVudGF0aW9uIG9mIGJzZCBmbG9jayAoKSAqLworI2RlZmluZSBGX0VYTENLCQk0CS8qIG9yIDMgKi8KKyNkZWZpbmUgRl9TSExDSwkJOAkvKiBvciA0ICovCisKKy8qIGZvciBsZWFzZXMgKi8KKyNkZWZpbmUgRl9JTlBST0dSRVNTCTE2CisKKy8qIG9wZXJhdGlvbnMgZm9yIGJzZCBmbG9jaygpLCBhbHNvIHVzZWQgYnkgdGhlIGtlcm5lbCBpbXBsZW1lbnRhdGlvbiAqLworI2RlZmluZSBMT0NLX1NICQkxCS8qIHNoYXJlZCBsb2NrICovCisjZGVmaW5lIExPQ0tfRVgJCTIJLyogZXhjbHVzaXZlIGxvY2sgKi8KKyNkZWZpbmUgTE9DS19OQgkJNAkvKiBvcidkIHdpdGggb25lIG9mIHRoZSBhYm92ZSB0byBwcmV2ZW50CisJCQkJICAgYmxvY2tpbmcgKi8KKyNkZWZpbmUgTE9DS19VTgkJOAkvKiByZW1vdmUgbG9jayAqLworCisjZGVmaW5lIExPQ0tfTUFORAkzMgkvKiBUaGlzIGlzIGEgbWFuZGF0b3J5IGZsb2NrICovCisjZGVmaW5lIExPQ0tfUkVBRAk2NAkvKiAuLi4gV2hpY2ggYWxsb3dzIGNvbmN1cnJlbnQgcmVhZCBvcGVyYXRpb25zICovCisjZGVmaW5lIExPQ0tfV1JJVEUJMTI4CS8qIC4uLiBXaGljaCBhbGxvd3MgY29uY3VycmVudCB3cml0ZSBvcGVyYXRpb25zICovCisjZGVmaW5lIExPQ0tfUlcJCTE5MgkvKiAuLi4gV2hpY2ggYWxsb3dzIGNvbmN1cnJlbnQgcmVhZCAmIHdyaXRlIG9wcyAqLworCisvKgorICogVGhlIGZsYXZvdXJzIG9mIHN0cnVjdCBmbG9jay4gICJzdHJ1Y3QgZmxvY2siIGlzIHRoZSBBQkkgY29tcGxpYW50CisgKiB2YXJpYW50LiAgRmluYWxseSBzdHJ1Y3QgZmxvY2s2NCBpcyB0aGUgTEZTIHZhcmlhbnQgb2Ygc3RydWN0IGZsb2NrLiAgQXMKKyAqIGEgaGlzdG9yaWMgYWNjaWRlbnQgYW5kIGluY29uc2lzdGVuY2Ugd2l0aCB0aGUgQUJJIGRlZmluaXRpb24gaXQgZG9lc24ndAorICogY29udGFpbiBhbGwgdGhlIHNhbWUgZmllbGRzIGFzIHN0cnVjdCBmbG9jay4KKyAqLworCisjaWZuZGVmIF9fbWlwczY0CisKK3R5cGVkZWYgc3RydWN0IGZsb2NrIHsKKwlzaG9ydAlsX3R5cGU7CisJc2hvcnQJbF93aGVuY2U7CisJX19rZXJuZWxfb2ZmX3QgbF9zdGFydDsKKwlfX2tlcm5lbF9vZmZfdCBsX2xlbjsKKwlsb25nCWxfc3lzaWQ7CisJX19rZXJuZWxfcGlkX3QgbF9waWQ7CisJbG9uZwlwYWRbNF07Cit9IGZsb2NrX3Q7CisKK3R5cGVkZWYgc3RydWN0IGZsb2NrNjQgeworCXNob3J0CWxfdHlwZTsKKwlzaG9ydAlsX3doZW5jZTsKKwlsb2ZmX3QJbF9zdGFydDsKKwlsb2ZmX3QJbF9sZW47CisJcGlkX3QJbF9waWQ7Cit9IGZsb2NrNjRfdDsKKworI2Vsc2UgLyogNjQtYml0IGRlZmluaXRpb25zICovCisKK3R5cGVkZWYgc3RydWN0IGZsb2NrIHsKKwlzaG9ydAlsX3R5cGU7CisJc2hvcnQJbF93aGVuY2U7CisJX19rZXJuZWxfb2ZmX3QgbF9zdGFydDsKKwlfX2tlcm5lbF9vZmZfdCBsX2xlbjsKKwlfX2tlcm5lbF9waWRfdCBsX3BpZDsKK30gZmxvY2tfdDsKKworI2lmZGVmIF9fS0VSTkVMX18KKyNkZWZpbmUgZmxvY2s2NAkJZmxvY2sKKyNlbmRpZgorCisjZW5kaWYKKworI2RlZmluZSBGX0xJTlVYX1NQRUNJRklDX0JBU0UJMTAyNAorCisjZW5kaWYgLyogX0FTTV9GQ05UTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2ZpeG1hcC5oIGIvaW5jbHVkZS9hc20tbWlwcy9maXhtYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmI2YTkwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9maXhtYXAuaApAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqIGZpeG1hcC5oOiBjb21waWxlLXRpbWUgdmlydHVhbCBtZW1vcnkgYWxsb2NhdGlvbgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCBJbmdvIE1vbG5hcgorICoKKyAqIFN1cHBvcnQgb2YgQklHTUVNIGFkZGVkIGJ5IEdlcmhhcmQgV2ljaGVydCwgU2llbWVucyBBRywgSnVseSAxOTk5CisgKi8KKworI2lmbmRlZiBfQVNNX0ZJWE1BUF9ICisjZGVmaW5lIF9BU01fRklYTUFQX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaWZkZWYgQ09ORklHX0hJR0hNRU0KKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisjaW5jbHVkZSA8YXNtL2ttYXBfdHlwZXMuaD4KKyNlbmRpZgorCisvKgorICogSGVyZSB3ZSBkZWZpbmUgYWxsIHRoZSBjb21waWxlLXRpbWUgJ3NwZWNpYWwnIHZpcnR1YWwKKyAqIGFkZHJlc3Nlcy4gVGhlIHBvaW50IGlzIHRvIGhhdmUgYSBjb25zdGFudCBhZGRyZXNzIGF0CisgKiBjb21waWxlIHRpbWUsIGJ1dCB0byBzZXQgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb25seQorICogaW4gdGhlIGJvb3QgcHJvY2Vzcy4gV2UgYWxsb2NhdGUgdGhlc2Ugc3BlY2lhbCAgYWRkcmVzc2VzCisgKiBmcm9tIHRoZSBlbmQgb2YgdmlydHVhbCBtZW1vcnkgKDB4ZmZmZmYwMDApIGJhY2t3YXJkcy4KKyAqIEFsc28gdGhpcyBsZXRzIHVzIGRvIGZhaWwtc2FmZSB2bWFsbG9jKCksIHdlCisgKiBjYW4gZ3VhcmFudGVlIHRoYXQgdGhlc2Ugc3BlY2lhbCBhZGRyZXNzZXMgYW5kCisgKiB2bWFsbG9jKCktZWQgYWRkcmVzc2VzIG5ldmVyIG92ZXJsYXAuCisgKgorICogdGhlc2UgJ2NvbXBpbGUtdGltZSBhbGxvY2F0ZWQnIG1lbW9yeSBidWZmZXJzIGFyZQorICogZml4ZWQtc2l6ZSA0ayBwYWdlcy4gKG9yIGxhcmdlciBpZiB1c2VkIHdpdGggYW4gaW5jcmVtZW50CisgKiBoaWdoZ2VyIHRoYW4gMSkgdXNlIGZpeG1hcF9zZXQoaWR4LHBoeXMpIHRvIGFzc29jaWF0ZQorICogcGh5c2ljYWwgbWVtb3J5IHdpdGggZml4bWFwIGluZGljZXMuCisgKgorICogVExCIGVudHJpZXMgb2Ygc3VjaCBidWZmZXJzIHdpbGwgbm90IGJlIGZsdXNoZWQgYWNyb3NzCisgKiB0YXNrIHN3aXRjaGVzLgorICovCisKKy8qCisgKiBvbiBVUCBjdXJyZW50bHkgd2Ugd2lsbCBoYXZlIG5vIHRyYWNlIG9mIHRoZSBmaXhtYXAgbWVjaGFuaXptLAorICogbm8gcGFnZSB0YWJsZSBhbGxvY2F0aW9ucywgZXRjLiBUaGlzIG1pZ2h0IGNoYW5nZSBpbiB0aGUKKyAqIGZ1dHVyZSwgc2F5IGZyYW1lYnVmZmVycyBmb3IgdGhlIGNvbnNvbGUgZHJpdmVyKHMpIGNvdWxkIGJlCisgKiBmaXgtbWFwcGVkPworICovCitlbnVtIGZpeGVkX2FkZHJlc3NlcyB7CisjaWZkZWYgQ09ORklHX0hJR0hNRU0KKwlGSVhfS01BUF9CRUdJTiwJLyogcmVzZXJ2ZWQgcHRlJ3MgZm9yIHRlbXBvcmFyeSBrZXJuZWwgbWFwcGluZ3MgKi8KKwlGSVhfS01BUF9FTkQgPSBGSVhfS01BUF9CRUdJTisoS01fVFlQRV9OUipOUl9DUFVTKS0xLAorI2VuZGlmCisJX19lbmRfb2ZfZml4ZWRfYWRkcmVzc2VzCit9OworCitleHRlcm4gdm9pZCBfX3NldF9maXhtYXAgKGVudW0gZml4ZWRfYWRkcmVzc2VzIGlkeCwKKwkJCQkJdW5zaWduZWQgbG9uZyBwaHlzLCBwZ3Byb3RfdCBmbGFncyk7CisKKyNkZWZpbmUgc2V0X2ZpeG1hcChpZHgsIHBoeXMpIFwKKwkJX19zZXRfZml4bWFwKGlkeCwgcGh5cywgUEFHRV9LRVJORUwpCisvKgorICogU29tZSBoYXJkd2FyZSB3YW50cyB0byBnZXQgZml4bWFwcGVkIHdpdGhvdXQgY2FjaGluZy4KKyAqLworI2RlZmluZSBzZXRfZml4bWFwX25vY2FjaGUoaWR4LCBwaHlzKSBcCisJCV9fc2V0X2ZpeG1hcChpZHgsIHBoeXMsIFBBR0VfS0VSTkVMX05PQ0FDSEUpCisvKgorICogdXNlZCBieSB2bWFsbG9jLmMuCisgKgorICogTGVhdmUgb25lIGVtcHR5IHBhZ2UgYmV0d2VlbiB2bWFsbG9jJ2VkIGFyZWFzIGFuZAorICogdGhlIHN0YXJ0IG9mIHRoZSBmaXhtYXAsIGFuZCBsZWF2ZSBvbmUgcGFnZSBlbXB0eQorICogYXQgdGhlIHRvcCBvZiBtZW0uLgorICovCisjZGVmaW5lIEZJWEFERFJfVE9QCSgweGZmZmZlMDAwVUwpCisjZGVmaW5lIEZJWEFERFJfU0laRQkoX19lbmRfb2ZfZml4ZWRfYWRkcmVzc2VzIDw8IFBBR0VfU0hJRlQpCisjZGVmaW5lIEZJWEFERFJfU1RBUlQJKEZJWEFERFJfVE9QIC0gRklYQUREUl9TSVpFKQorCisjZGVmaW5lIF9fZml4X3RvX3ZpcnQoeCkJKEZJWEFERFJfVE9QIC0gKCh4KSA8PCBQQUdFX1NISUZUKSkKKyNkZWZpbmUgX192aXJ0X3RvX2ZpeCh4KQkoKEZJWEFERFJfVE9QIC0gKCh4KSZQQUdFX01BU0spKSA+PiBQQUdFX1NISUZUKQorCitleHRlcm4gdm9pZCBfX3RoaXNfZml4bWFwX2RvZXNfbm90X2V4aXN0KHZvaWQpOworCisvKgorICogJ2luZGV4IHRvIGFkZHJlc3MnIHRyYW5zbGF0aW9uLiBJZiBhbnlvbmUgdHJpZXMgdG8gdXNlIHRoZSBpZHgKKyAqIGRpcmVjdGx5IHdpdGhvdXQgdHJhbmxhdGlvbiwgd2UgY2F0Y2ggdGhlIGJ1ZyB3aXRoIGEgTlVMTC1kZWZlcmVuY2UKKyAqIGtlcm5lbCBvb3BzLiBJbGxlZ2FsIHJhbmdlcyBvZiBpbmNvbWluZyBpbmRpY2VzIGFyZSBjYXVnaHQgdG9vLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZml4X3RvX3ZpcnQoY29uc3QgdW5zaWduZWQgaW50IGlkeCkKK3sKKwkvKgorCSAqIHRoaXMgYnJhbmNoIGdldHMgY29tcGxldGVseSBlbGltaW5hdGVkIGFmdGVyIGlubGluaW5nLAorCSAqIGV4Y2VwdCB3aGVuIHNvbWVvbmUgdHJpZXMgdG8gdXNlIGZpeGFkZHIgaW5kaWNlcyBpbiBhbgorCSAqIGlsbGVnYWwgd2F5LiAoc3VjaCBhcyBtaXhpbmcgdXAgYWRkcmVzcyB0eXBlcyBvciB1c2luZworCSAqIG91dC1vZi1yYW5nZSBpbmRpY2VzKS4KKwkgKgorCSAqIElmIGl0IGRvZXNuJ3QgZ2V0IHJlbW92ZWQsIHRoZSBsaW5rZXIgd2lsbCBjb21wbGFpbgorCSAqIGxvdWRseSB3aXRoIGEgcmVhc29uYWJseSBjbGVhciBlcnJvciBtZXNzYWdlLi4KKwkgKi8KKwlpZiAoaWR4ID49IF9fZW5kX29mX2ZpeGVkX2FkZHJlc3NlcykKKwkJX190aGlzX2ZpeG1hcF9kb2VzX25vdF9leGlzdCgpOworCisgICAgICAgIHJldHVybiBfX2ZpeF90b192aXJ0KGlkeCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB2aXJ0X3RvX2ZpeChjb25zdCB1bnNpZ25lZCBsb25nIHZhZGRyKQoreworCUJVR19PTih2YWRkciA+PSBGSVhBRERSX1RPUCB8fCB2YWRkciA8IEZJWEFERFJfU1RBUlQpOworCXJldHVybiBfX3ZpcnRfdG9fZml4KHZhZGRyKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2Zsb3BweS5oIGIvaW5jbHVkZS9hc20tbWlwcy9mbG9wcHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTFlZjhiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9mbG9wcHkuaApAQCAtMCwwICsxLDU2IEBACisvKgorICogQXJjaGl0ZWN0dXJlIHNwZWNpZmljIHBhcnRzIG9mIHRoZSBGbG9wcHkgZHJpdmVyCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1IC0gMjAwMCBSYWxmIEJhZWNobGUKKyAqLworI2lmbmRlZiBfQVNNX0ZMT1BQWV9ICisjZGVmaW5lIF9BU01fRkxPUFBZX0gKKworc3RhdGljIGlubGluZSB2b2lkIGZkX2NhY2hlZmx1c2goY2hhciAqIGFkZHIsIGxvbmcgc2l6ZSkKK3sKKwlkbWFfY2FjaGVfd2JhY2tfaW52KCh1bnNpZ25lZCBsb25nKWFkZHIsc2l6ZSk7Cit9CisKKyNkZWZpbmUgTUFYX0JVRkZFUl9TRUNUT1JTIDI0CisKKworLyoKKyAqIEFuZCBvbiBNaXBzJ3MgdGhlIENNT1MgaW5mbyBmYWlscyBhbHNvIC4uLgorICoKKyAqIEZJWE1FOiBUaGlzIGluZm9ybWF0aW9uIHNob3VsZCBjb21lIGZyb20gdGhlIEFSQyBjb25maWd1cmF0aW9uIHRyZWUKKyAqICAgICAgICBvciB3aGVyZWV2ZXIgYSBwYXJ0aWN1bGFyIG1hY2hpbmUgaGFzIHN0b3JlZCB0aGlzIC4uLgorICovCisjZGVmaW5lIEZMT1BQWTBfVFlQRSAJCWZkX2RyaXZlX3R5cGUoMCkKKyNkZWZpbmUgRkxPUFBZMV9UWVBFCQlmZF9kcml2ZV90eXBlKDEpCisKKyNkZWZpbmUgRkRDMQkJCWZkX2dldGZkYWRkcjEoKTsKKworI2RlZmluZSBOX0ZEQyAxCQkJLyogZG8geW91ICpyZWFsbHkqIHdhbnQgYSBzZWNvbmQgY29udHJvbGxlcj8gKi8KKyNkZWZpbmUgTl9EUklWRSA4CisKKyNkZWZpbmUgRkxPUFBZX01PVE9SX01BU0sgMHhmMAorCisvKgorICogVGhlIERNQSBjaGFubmVsIHVzZWQgYnkgdGhlIGZsb3BweSBjb250cm9sbGVyIGNhbm5vdCBhY2Nlc3MgZGF0YSBhdAorICogYWRkcmVzc2VzID49IDE2TUIKKyAqCisgKiBXZW50IGJhY2sgdG8gdGhlIDFNQiBsaW1pdCwgYXMgc29tZSBwZW9wbGUgaGFkIHByb2JsZW1zIHdpdGggdGhlIGZsb3BweQorICogZHJpdmVyIG90aGVyd2lzZS4gSXQgZG9lc24ndCBtYXR0ZXIgbXVjaCBmb3IgcGVyZm9ybWFuY2UgYW55d2F5LCBhcyBtb3N0CisgKiBmbG9wcHkgYWNjZXNzZXMgZ28gdGhyb3VnaCB0aGUgdHJhY2sgYnVmZmVyLgorICoKKyAqIE9uIE1JUFNlcyB1c2luZyB2ZG1hLCB0aGlzIGFjdHVhbGx5IG1lYW5zIHRoYXQgKmFsbCogdHJhbnNmZXJzIGdvIHRocnUKKyAqIHRoZSAqIHRyYWNrIGJ1ZmZlciBzaW5jZSAweDEwMDAwMDAgaXMgYWx3YXlzIHNtYWxsZXIgdGhhbiBLU0VHMC8xLgorICogQWN0dWFsbHkgdGhpcyBuZWVkcyB0byBiZSBhIGJpdCBtb3JlIGNvbXBsaWNhdGVkIHNpbmNlIHRoZSBzbyBtdWNoIGRpZmZlcmVudAorICogaGFyZHdhcmUgYXZhaWxhYmxlIHdpdGggTUlQUyBDUFVzIC4uLgorICovCisjZGVmaW5lIENST1NTXzY0S0IoYSxzKSAoKHVuc2lnbmVkIGxvbmcpKGEpL0tfNjQgIT0gKCh1bnNpZ25lZCBsb25nKShhKSArIChzKSAtIDEpIC8gS182NCkKKworI2RlZmluZSBFWFRSQV9GTE9QUFlfUEFSQU1TCisKKyNpbmNsdWRlIDxmbG9wcHkuaD4KKworI2VuZGlmIC8qIF9BU01fRkxPUFBZX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvZnByZWdkZWYuaCBiL2luY2x1ZGUvYXNtLW1pcHMvZnByZWdkZWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDlhYTA5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9mcHJlZ2RlZi5oCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBEZWZpbml0aW9ucyBmb3IgdGhlIEZQVSByZWdpc3RlciBuYW1lcworICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NSwgMTk5OSBSYWxmIEJhZWNobGUKKyAqIENvcHlyaWdodCAoQykgMTk4NSBNSVBTIENvbXB1dGVyIFN5c3RlbXMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMTk5MCAtIDE5OTIsIDE5OTkgU2lsaWNvbiBHcmFwaGljcywgSW5jLgorICovCisjaWZuZGVmIF9BU01fRlBSRUdERUZfSAorI2RlZmluZSBfQVNNX0ZQUkVHREVGX0gKKworI2luY2x1ZGUgPGFzbS9zZ2lkZWZzLmg+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorI2lmIF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fQUJJMzIKKworLyoKKyAqIFRoZXNlIGRlZmluaXRpb25zIG9ubHkgY292ZXIgdGhlIFIzMDAwLWlzaCAxNi8zMiByZWdpc3RlciBtb2RlbC4KKyAqIEJ1dCB3ZSdyZSB0cnlpbmcgdG8gYmUgUjMwMDAgZnJpZW5kbHkgYW55d2F5IC4uLgorICovCisjZGVmaW5lIGZ2MAkkZjAgICAgICAvKiByZXR1cm4gdmFsdWUgKi8KKyNkZWZpbmUgZnYwZgkkZjEKKyNkZWZpbmUgZnYxCSRmMgorI2RlZmluZSBmdjFmCSRmMworI2RlZmluZSBmYTAJJGYxMiAgICAgLyogYXJndW1lbnQgcmVnaXN0ZXJzICovCisjZGVmaW5lIGZhMGYJJGYxMworI2RlZmluZSBmYTEJJGYxNAorI2RlZmluZSBmYTFmCSRmMTUKKyNkZWZpbmUgZnQwCSRmNCAgICAgIC8qIGNhbGxlciBzYXZlZCAqLworI2RlZmluZSBmdDBmCSRmNQorI2RlZmluZSBmdDEJJGY2CisjZGVmaW5lIGZ0MWYJJGY3CisjZGVmaW5lIGZ0MgkkZjgKKyNkZWZpbmUgZnQyZgkkZjkKKyNkZWZpbmUgZnQzCSRmMTAKKyNkZWZpbmUgZnQzZgkkZjExCisjZGVmaW5lIGZ0NAkkZjE2CisjZGVmaW5lIGZ0NGYJJGYxNworI2RlZmluZSBmdDUJJGYxOAorI2RlZmluZSBmdDVmCSRmMTkKKyNkZWZpbmUgZnMwCSRmMjAgICAgIC8qIGNhbGxlZSBzYXZlZCAqLworI2RlZmluZSBmczBmCSRmMjEKKyNkZWZpbmUgZnMxCSRmMjIKKyNkZWZpbmUgZnMxZgkkZjIzCisjZGVmaW5lIGZzMgkkZjI0CisjZGVmaW5lIGZzMmYJJGYyNQorI2RlZmluZSBmczMJJGYyNgorI2RlZmluZSBmczNmCSRmMjcKKyNkZWZpbmUgZnM0CSRmMjgKKyNkZWZpbmUgZnM0ZgkkZjI5CisjZGVmaW5lIGZzNQkkZjMwCisjZGVmaW5lIGZzNWYJJGYzMQorCisjZGVmaW5lIGZjcjMxCSQzMSAgICAgIC8qIEZQVSBzdGF0dXMgcmVnaXN0ZXIgKi8KKworI2VuZGlmIC8qIF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fQUJJMzIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisjaWYgX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkk2NCB8fCBfTUlQU19TSU0gPT0gX01JUFNfU0lNX05BQkkzMgorCisjZGVmaW5lIGZ2MAkkZjAJLyogcmV0dXJuIHZhbHVlICovCisjZGVmaW5lIGZ2MQkkZjIKKyNkZWZpbmUgZmEwCSRmMTIJLyogYXJndW1lbnQgcmVnaXN0ZXJzICovCisjZGVmaW5lIGZhMQkkZjEzCisjZGVmaW5lIGZhMgkkZjE0CisjZGVmaW5lIGZhMwkkZjE1CisjZGVmaW5lIGZhNAkkZjE2CisjZGVmaW5lIGZhNQkkZjE3CisjZGVmaW5lIGZhNgkkZjE4CisjZGVmaW5lIGZhNwkkZjE5CisjZGVmaW5lIGZ0MAkkZjQJLyogY2FsbGVyIHNhdmVkICovCisjZGVmaW5lIGZ0MQkkZjUKKyNkZWZpbmUgZnQyCSRmNgorI2RlZmluZSBmdDMJJGY3CisjZGVmaW5lIGZ0NAkkZjgKKyNkZWZpbmUgZnQ1CSRmOQorI2RlZmluZSBmdDYJJGYxMAorI2RlZmluZSBmdDcJJGYxMQorI2RlZmluZSBmdDgJJGYyMAorI2RlZmluZSBmdDkJJGYyMQorI2RlZmluZSBmdDEwCSRmMjIKKyNkZWZpbmUgZnQxMQkkZjIzCisjZGVmaW5lIGZ0MTIJJGYxCisjZGVmaW5lIGZ0MTMJJGYzCisjZGVmaW5lIGZzMAkkZjI0CS8qIGNhbGxlZSBzYXZlZCAqLworI2RlZmluZSBmczEJJGYyNQorI2RlZmluZSBmczIJJGYyNgorI2RlZmluZSBmczMJJGYyNworI2RlZmluZSBmczQJJGYyOAorI2RlZmluZSBmczUJJGYyOQorI2RlZmluZSBmczYJJGYzMAorI2RlZmluZSBmczcJJGYzMQorCisjZGVmaW5lIGZjcjMxCSQzMQorCisjZW5kaWYgLyogX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkk2NCB8fCBfTUlQU19TSU0gPT0gX01JUFNfU0lNX05BQkkzMiAqLworCisjZW5kaWYgLyogX0FTTV9GUFJFR0RFRl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2ZwdS5oIGIvaW5jbHVkZS9hc20tbWlwcy9mcHUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2IzOGQ1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9mcHUuaApAQCAtMCwwICsxLDEzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMiBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KKyAqIEF1dGhvcjogSnVuIFN1biwganN1bkBtdmlzdGEuY29tIG9yIGpzdW5AanVuc3VuLm5ldAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2lmbmRlZiBfQVNNX0ZQVV9ICisjZGVmaW5lIF9BU01fRlBVX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvdGhyZWFkX2luZm8uaD4KKworI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgorI2luY2x1ZGUgPGFzbS9jcHUuaD4KKyNpbmNsdWRlIDxhc20vY3B1LWZlYXR1cmVzLmg+CisjaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vY3VycmVudC5oPgorCitzdHJ1Y3Qgc2lnY29udGV4dDsKK3N0cnVjdCBzaWdjb250ZXh0MzI7CisKK2V4dGVybiBhc21saW5rYWdlIGludCAoKnNhdmVfZnBfY29udGV4dCkoc3RydWN0IHNpZ2NvbnRleHQgKnNjKTsKK2V4dGVybiBhc21saW5rYWdlIGludCAoKnJlc3RvcmVfZnBfY29udGV4dCkoc3RydWN0IHNpZ2NvbnRleHQgKnNjKTsKKworZXh0ZXJuIGFzbWxpbmthZ2UgaW50ICgqc2F2ZV9mcF9jb250ZXh0MzIpKHN0cnVjdCBzaWdjb250ZXh0MzIgKnNjKTsKK2V4dGVybiBhc21saW5rYWdlIGludCAoKnJlc3RvcmVfZnBfY29udGV4dDMyKShzdHJ1Y3Qgc2lnY29udGV4dDMyICpzYyk7CisKK2V4dGVybiB2b2lkIGZwdV9lbXVsYXRvcl9pbml0X2ZwdSh2b2lkKTsKK2V4dGVybiB2b2lkIF9pbml0X2ZwdSh2b2lkKTsKK2V4dGVybiB2b2lkIF9zYXZlX2ZwKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKK2V4dGVybiB2b2lkIF9yZXN0b3JlX2ZwKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKKworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TQjEpCisjZGVmaW5lIF9fZW5hYmxlX2ZwdV9oYXphcmQoKQkJCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJYXNtKCIuc2V0CXB1c2gJCVxuXHQiCQkJCVwKKwkgICAgIi5zZXQJbWlwczY0CQlcblx0IgkJCQlcCisJICAgICIuc2V0CW5vcmVvcmRlcglcblx0IgkJCQlcCisJICAgICJzc25vcAkJCVxuXHQiCQkJCVwKKwkgICAgImJuZXpsCSQwLCAuKzQJCVxuXHQiCQkJCVwKKwkgICAgInNzbm9wCQkJXG5cdCIJCQkJXAorCSAgICAiLnNldCBwb3AiKTsJCQkJCQlcCit9IHdoaWxlICgwKQorI2Vsc2UKKyNkZWZpbmUgX19lbmFibGVfZnB1X2hhemFyZCgpCQkJCQkJXAorZG8gewkJCQkJCQkJCVwKKwlhc20oIm5vcDtub3A7bm9wO25vcCIpOwkJLyogbWF4LiBoYXphcmQgKi8JCVwKK30gd2hpbGUgKDApCisjZW5kaWYKKworI2RlZmluZSBfX2VuYWJsZV9mcHUoKQkJCQkJCQlcCitkbyB7CQkJCQkJCQkJXAorICAgICAgICBzZXRfYzBfc3RhdHVzKFNUMF9DVTEpOwkJCQkJCVwKKyAgICAgICAgX19lbmFibGVfZnB1X2hhemFyZCgpOwkJCQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgX19kaXNhYmxlX2ZwdSgpCQkJCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJY2xlYXJfYzBfc3RhdHVzKFNUMF9DVTEpOwkJCQkJXAorCS8qIFdlIGRvbid0IGNhcmUgYWJvdXQgdGhlIGMwIGhhemFyZCBoZXJlICAqLwkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgZW5hYmxlX2ZwdSgpCQkJCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJaWYgKGNwdV9oYXNfZnB1KQkJCQkJCVwKKwkJX19lbmFibGVfZnB1KCk7CQkJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBkaXNhYmxlX2ZwdSgpCQkJCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJaWYgKGNwdV9oYXNfZnB1KQkJCQkJCVwKKwkJX19kaXNhYmxlX2ZwdSgpOwkJCQkJXAorfSB3aGlsZSAoMCkKKworCisjZGVmaW5lIGNsZWFyX2ZwdV9vd25lcigpCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9VU0VERlBVKQorCitzdGF0aWMgaW5saW5lIGludCBpc19mcHVfb3duZXIodm9pZCkKK3sKKwlyZXR1cm4gY3B1X2hhc19mcHUgJiYgdGVzdF90aHJlYWRfZmxhZyhUSUZfVVNFREZQVSk7IAorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgb3duX2ZwdSh2b2lkKQoreworCWlmIChjcHVfaGFzX2ZwdSkgeworCQlfX2VuYWJsZV9mcHUoKTsKKwkJS1NUS19TVEFUVVMoY3VycmVudCkgfD0gU1QwX0NVMTsKKwkJc2V0X3RocmVhZF9mbGFnKFRJRl9VU0VERlBVKTsgCisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbG9zZV9mcHUodm9pZCkKK3sKKwlpZiAoY3B1X2hhc19mcHUpIHsKKwkJS1NUS19TVEFUVVMoY3VycmVudCkgJj0gflNUMF9DVTE7CisJCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9VU0VERlBVKTsgCisJCV9fZGlzYWJsZV9mcHUoKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbml0X2ZwdSh2b2lkKQoreworCWlmIChjcHVfaGFzX2ZwdSkgeworCQlfaW5pdF9mcHUoKTsKKwl9IGVsc2UgeworCQlmcHVfZW11bGF0b3JfaW5pdF9mcHUoKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzYXZlX2ZwKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCWlmIChjcHVfaGFzX2ZwdSkKKwkJX3NhdmVfZnAodHNrKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJlc3RvcmVfZnAoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJaWYgKGNwdV9oYXNfZnB1KQorCQlfcmVzdG9yZV9mcCh0c2spOworfQorCitzdGF0aWMgaW5saW5lIGZwdXJlZ190ICpnZXRfZnB1X3JlZ3Moc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJaWYgKGNwdV9oYXNfZnB1KSB7CisJCWlmICgodHNrID09IGN1cnJlbnQpICYmIGlzX2ZwdV9vd25lcigpKSAKKwkJCV9zYXZlX2ZwKGN1cnJlbnQpOworCQlyZXR1cm4gdHNrLT50aHJlYWQuZnB1LmhhcmQuZnByOworCX0KKworCXJldHVybiB0c2stPnRocmVhZC5mcHUuc29mdC5mcHI7Cit9CisKKyNlbmRpZiAvKiBfQVNNX0ZQVV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2ZwdV9lbXVsYXRvci5oIGIvaW5jbHVkZS9hc20tbWlwcy9mcHVfZW11bGF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Njk3MmFlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9mcHVfZW11bGF0b3IuaApAQCAtMCwwICsxLDM4IEBACisvKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIGRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKKyAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqICA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICogRnVydGhlciBwcml2YXRlIGRhdGEgZm9yIHdoaWNoIG5vIHNwYWNlIGV4aXN0cyBpbiBtaXBzX2ZwdV9zb2Z0X3N0cnVjdC4KKyAqIFRoaXMgc2hvdWxkIGJlIHN1YnN1bWVkIGludG8gdGhlIG1pcHNfZnB1X3NvZnRfc3RydWN0IHN0cnVjdHVyZSBhcworICogZGVmaW5lZCBpbiBwcm9jZXNzb3IuaCBhcyBzb29uIGFzIHRoZSBhYnN1cmQgd2lyZWQgYWJzb2x1dGUgYXNzZW1ibGVyCisgKiBvZmZzZXRzIGJlY29tZSBkeW5hbWljIGF0IGNvbXBpbGUgdGltZS4KKyAqCisgKiBLZXZpbiBELiBLaXNzZWxsLCBrZXZpbmtAbWlwcy5jb20gYW5kIENhcnN0ZW4gTGFuZ2dhYXJkLCBjYXJzdGVubEBtaXBzLmNvbQorICogQ29weXJpZ2h0IChDKSAyMDAwIE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICovCisjaWZuZGVmIF9BU01fRlBVX0VNVUxBVE9SX0gKKyNkZWZpbmUgX0FTTV9GUFVfRU1VTEFUT1JfSAorCitzdHJ1Y3QgbWlwc19mcHVfZW11bGF0b3JfcHJpdmF0ZSB7CisJdW5zaWduZWQgaW50IGVpcjsKKwlzdHJ1Y3QgeworCQl1bnNpZ25lZCBpbnQgZW11bGF0ZWQ7CisJCXVuc2lnbmVkIGludCBsb2FkczsKKwkJdW5zaWduZWQgaW50IHN0b3JlczsKKwkJdW5zaWduZWQgaW50IGNwMW9wczsKKwkJdW5zaWduZWQgaW50IGNwMXhvcHM7CisJCXVuc2lnbmVkIGludCBlcnJvcnM7CisJfSBzdGF0czsKK307CisKKyNlbmRpZiAvKiBfQVNNX0ZQVV9FTVVMQVRPUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2dhbGlsZW8tYm9hcmRzL2V2OTYxMDAuaCBiL2luY2x1ZGUvYXNtLW1pcHMvZ2FsaWxlby1ib2FyZHMvZXY5NjEwMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3MGRmZDgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2dhbGlsZW8tYm9hcmRzL2V2OTYxMDAuaApAQCAtMCwwICsxLDU1IEBACisvKgorICoKKyAqLworI2lmbmRlZiBfTUlQU19FVjk2MTAwX0gKKyNkZWZpbmUgX01JUFNfRVY5NjEwMF9ICisKKyNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CisKKy8qCisgKiAgIEdUNjQxMjAgY29uZmlnIHNwYWNlIGJhc2UgYWRkcmVzcworICovCisjZGVmaW5lIEdUNjQxMjBfQkFTRQkoS1NFRzFBRERSKDB4MTQwMDAwMDApKQorI2RlZmluZSBNSVBTX0dUX0JBU0UJR1Q2NDEyMF9CQVNFCisKKy8qCisgKiAgIFBDSSBCdXMgYWxsb2NhdGlvbgorICovCisjZGVmaW5lIEdUX1BDSV9NRU1fQkFTRSAgICAweDEyMDAwMDAwVUwKKyNkZWZpbmUgR1RfUENJX01FTV9TSVpFICAgIDB4MDIwMDAwMDBVTAorI2RlZmluZSBHVF9QQ0lfSU9fQkFTRSAgICAgMHgxMDAwMDAwMFVMCisjZGVmaW5lIEdUX1BDSV9JT19TSVpFICAgICAweDAyMDAwMDAwVUwKKyNkZWZpbmUgR1RfSVNBX0lPX0JBU0UgICAgIFBDSV9JT19CQVNFCisKKy8qCisgKiAgIER1YXJ0IEkvTyBwb3J0cy4KKyAqLworI2RlZmluZSBFVjk2MTAwX0NPTTFfQkFTRV9BRERSIAkoMHhCRDAwMDAwMCArIDB4MjApCisjZGVmaW5lIEVWOTYxMDBfQ09NMl9CQVNFX0FERFIJKDB4QkQwMDAwMDAgKyAweDAwKQorCisKKy8qCisgKiAgIEVWOTYxMDAgaW50ZXJydXB0IGNvbnRyb2xsZXIgcmVnaXN0ZXIgYmFzZS4KKyAqLworI2RlZmluZSBFVjk2MTAwX0lDVFJMX1JFR1NfQkFTRQkoS1NFRzFBRERSKDB4MWYwMDAwMDApKQorCisvKgorICogICBFVjk2MTAwIFVBUlQgcmVnaXN0ZXIgYmFzZS4KKyAqLworI2RlZmluZSBFVjk2MTAwX1VBUlQwX1JFR1NfQkFTRQlFVjk2MTAwX0NPTTFfQkFTRV9BRERSCisjZGVmaW5lIEVWOTYxMDBfVUFSVDFfUkVHU19CQVNFCUVWOTYxMDBfQ09NMl9CQVNFX0FERFIKKyNkZWZpbmUgRVY5NjEwMF9CQVNFX0JBVUQJKCAzNjg2NDAwIC8gMTYgKQorCisKKy8qCisgKiBCZWNhdXNlIG9mIGFuIGVycm9yL3BlY3VsaWFyaXR5IGluIHRoZSBHYWxpbGVvIGNoaXAsIHdlIG5lZWQgdG8gc3dhcCB0aGUKKyAqIGJ5dGVzIHdoZW4gcnVubmluZyBiaWdlbmRpYW4uCisgKi8KKyNkZWZpbmUgX19HVF9SRUFEKG9mcykJCQkJCQkJXAorCSgqKHZvbGF0aWxlIHUzMiAqKShHVDY0MTIwX0JBU0UrKG9mcykpKQorI2RlZmluZSBfX0dUX1dSSVRFKG9mcywgZGF0YSkJCQkJCQlcCisJZG8geyAqKHZvbGF0aWxlIHUzMiAqKShHVDY0MTIwX0JBU0UrKG9mcykpID0gKGRhdGEpOyB9IHdoaWxlICgwKQorI2RlZmluZSBHVF9SRUFEKG9mcykJCWxlMzJfdG9fY3B1KF9fR1RfUkVBRChvZnMpKQorI2RlZmluZSBHVF9XUklURShvZnMsIGRhdGEpCV9fR1RfV1JJVEUob2ZzLCBjcHVfdG9fbGUzMihkYXRhKSkKKworI2VuZGlmIC8qICEoX01JUFNfRVY5NjEwMF9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9nYWxpbGVvLWJvYXJkcy9ldjk2MTAwaW50LmggYi9pbmNsdWRlL2FzbS1taXBzL2dhbGlsZW8tYm9hcmRzL2V2OTYxMDBpbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNThiMTZkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9nYWxpbGVvLWJvYXJkcy9ldjk2MTAwaW50LmgKQEAgLTAsMCArMSwxMiBAQAorLyoKKyAqCisgKi8KKyNpZm5kZWYgX01JUFNfRVY5NjEwMElOVF9ICisjZGVmaW5lIF9NSVBTX0VWOTYxMDBJTlRfSAorCisjZGVmaW5lIEVWOTYxMDBJTlRfVUFSVF8wICAgIDYgICAgIC8qIElQIDYgKi8KKyNkZWZpbmUgRVY5NjEwMElOVF9USU1FUiAgICAgNyAgICAgLyogSVAgNyAqLworCitleHRlcm4gdm9pZCBldjk2MTAwaW50X2luaXQodm9pZCk7CisKKyNlbmRpZiAvKiAhKF9NSVBTX0VWOTYxMDBfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvZ2FsaWxlby1ib2FyZHMvZ3Q5NjEwMC5oIGIvaW5jbHVkZS9hc20tbWlwcy9nYWxpbGVvLWJvYXJkcy9ndDk2MTAwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFiZDFiNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvZ2FsaWxlby1ib2FyZHMvZ3Q5NjEwMC5oCkBAIC0wLDAgKzEsNDI3IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCisgKiBBdXRob3I6IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqICAgICAgICAgCXN0ZXZlbEBtdmlzdGEuY29tIG9yIHNvdXJjZUBtdmlzdGEuY29tCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIGRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKKyAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqICA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICogUmVnaXN0ZXIgb2Zmc2V0cyBvZiB0aGUgTUlQUyBHVDk2MTAwIEFkdmFuY2VkIENvbW11bmljYXRpb24gQ29udHJvbGxlci4KKyAqLworI2lmbmRlZiBfR1Q5NjEwMF9ICisjZGVmaW5lIF9HVDk2MTAwX0gKKworLyoKKyAqIEdhbGlsZW8gR1Q5NjEwMCBpbnRlcm5hbCByZWdpc3RlciBiYXNlLgorICovCisjZGVmaW5lIE1JUFNfR1Q5NjEwMF9CQVNFIChLU0VHMUFERFIoMHgxNDAwMDAwMCkpCisKKyNkZWZpbmUgR1Q5NjEwMF9XUklURShvZnMsIGRhdGEpIFwKKyAgICAqKHZvbGF0aWxlIHUzMiAqKShNSVBTX0dUOTYxMDBfQkFTRStvZnMpID0gY3B1X3RvX2xlMzIoZGF0YSkKKyNkZWZpbmUgR1Q5NjEwMF9SRUFEKG9mcykgXAorICAgIGxlMzJfdG9fY3B1KCoodm9sYXRpbGUgdTMyICopKE1JUFNfR1Q5NjEwMF9CQVNFK29mcykpCisKKyNkZWZpbmUgR1Q5NjEwMF9FVEhfSU9fU0laRSAweDQwMDAKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIFJlZ2lzdGVyIG9mZnNldCBhZGRyZXNzZXMgZm9sbG93CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBDUFUgSW50ZXJmYWNlIENvbnRyb2wgUmVnaXN0ZXJzICovCisjZGVmaW5lIEdUOTYxMDBfQ1BVX0lOVEVSRl9DT05GSUcgMHgwMDAwMDAKKworLyogRXRoZXJuZXQgUG9ydHMgKi8KKyNkZWZpbmUgR1Q5NjEwMF9FVEhfUEhZX0FERFJfUkVHICAgICAgICAgICAgIDB4MDgwODAwCisjZGVmaW5lIEdUOTYxMDBfRVRIX1NNSV9SRUcgICAgICAgICAgICAgICAgICAweDA4MDgxMAorLyoKKyAgVGhlc2UgYXJlIG9mZnNldHMgdG8gcG9ydCAwIHJlZ2lzdGVycy4gQWRkIEdUOTYxMDBfRVRIX0lPX1NJWkUgdG8KKyAgZ2V0IG9mZnNldHMgdG8gcG9ydCAxIHJlZ2lzdGVycy4KKyovCisjZGVmaW5lIEdUOTYxMDBfRVRIX1BPUlRfQ09ORklHICAgICAgICAgIDB4MDg0ODAwCisjZGVmaW5lIEdUOTYxMDBfRVRIX1BPUlRfQ09ORklHX0VYVCAgICAgIDB4MDg0ODA4CisjZGVmaW5lIEdUOTYxMDBfRVRIX1BPUlRfQ09NTSAgICAgICAgICAgIDB4MDg0ODEwCisjZGVmaW5lIEdUOTYxMDBfRVRIX1BPUlRfU1RBVFVTICAgICAgICAgIDB4MDg0ODE4CisjZGVmaW5lIEdUOTYxMDBfRVRIX1NFUl9QQVJBTSAgICAgICAgICAgIDB4MDg0ODIwCisjZGVmaW5lIEdUOTYxMDBfRVRIX0hBU0hfVEJMX1BUUiAgICAgICAgIDB4MDg0ODI4CisjZGVmaW5lIEdUOTYxMDBfRVRIX0ZMT1dfQ05UUkxfU1JDX0FERFJfTCAgICAweDA4NDgzMAorI2RlZmluZSBHVDk2MTAwX0VUSF9GTE9XX0NOVFJMX1NSQ19BRERSX0ggICAgMHgwODQ4MzgKKyNkZWZpbmUgR1Q5NjEwMF9FVEhfU0RNQV9DT05GSUcgICAgICAgICAgMHgwODQ4NDAKKyNkZWZpbmUgR1Q5NjEwMF9FVEhfU0RNQV9DT01NICAgICAgICAgICAgMHgwODQ4NDgKKyNkZWZpbmUgR1Q5NjEwMF9FVEhfSU5UX0NBVVNFICAgICAgICAgICAgMHgwODQ4NTAKKyNkZWZpbmUgR1Q5NjEwMF9FVEhfSU5UX01BU0sgICAgICAgICAgICAgMHgwODQ4NTgKKyNkZWZpbmUgR1Q5NjEwMF9FVEhfMVNUX1JYX0RFU0NfUFRSMCAgICAgICAgIDB4MDg0ODgwCisjZGVmaW5lIEdUOTYxMDBfRVRIXzFTVF9SWF9ERVNDX1BUUjEgICAgICAgICAweDA4NDg4NAorI2RlZmluZSBHVDk2MTAwX0VUSF8xU1RfUlhfREVTQ19QVFIyICAgICAgICAgMHgwODQ4ODgKKyNkZWZpbmUgR1Q5NjEwMF9FVEhfMVNUX1JYX0RFU0NfUFRSMyAgICAgICAgIDB4MDg0ODhDCisjZGVmaW5lIEdUOTYxMDBfRVRIX0NVUlJfUlhfREVTQ19QVFIwICAgICAgICAweDA4NDhBMAorI2RlZmluZSBHVDk2MTAwX0VUSF9DVVJSX1JYX0RFU0NfUFRSMSAgICAgICAgMHgwODQ4QTQKKyNkZWZpbmUgR1Q5NjEwMF9FVEhfQ1VSUl9SWF9ERVNDX1BUUjIgICAgICAgIDB4MDg0OEE4CisjZGVmaW5lIEdUOTYxMDBfRVRIX0NVUlJfUlhfREVTQ19QVFIzICAgICAgICAweDA4NDhBQworI2RlZmluZSBHVDk2MTAwX0VUSF9DVVJSX1RYX0RFU0NfUFRSMCAgICAgICAgMHgwODQ4RTAKKyNkZWZpbmUgR1Q5NjEwMF9FVEhfQ1VSUl9UWF9ERVNDX1BUUjEgICAgICAgIDB4MDg0OEU0CisjZGVmaW5lIEdUOTYxMDBfRVRIX01JQl9DT1VOVF9CQVNFICAgICAgICAgICAweDA4NTgwMAorCisvKiBTRE1BcyAqLworI2RlZmluZSBHVDk2MTAwX1NETUFfR1JPVVBfQ09ORklHICAgICAgICAgICAweDEwMUFGMAorLyogU0RNQSBHcm91cCAwICovCisjZGVmaW5lIEdUOTYxMDBfU0RNQV9HMF9DSEFOMF9DT05GSUcgICAgICAgIDB4MDAwOTAwCisjZGVmaW5lIEdUOTYxMDBfU0RNQV9HMF9DSEFOMF9DT01NICAgICAgICAgIDB4MDAwOTA4CisjZGVmaW5lIEdUOTYxMDBfU0RNQV9HMF9DSEFOMF9SWF9ERVNDX0JBU0UgICAgICAweDAwODkwMAorI2RlZmluZSBHVDk2MTAwX1NETUFfRzBfQ0hBTjBfQ1VSUl9SWF9ERVNDX1BUUiAgMHgwMDg5MTAKKyNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cwX0NIQU4wX1RYX0RFU0NfQkFTRSAgICAgIDB4MDBDOTAwCisjZGVmaW5lIEdUOTYxMDBfU0RNQV9HMF9DSEFOMF9DVVJSX1RYX0RFU0NfUFRSICAweDAwQzkxMAorI2RlZmluZSBHVDk2MTAwX1NETUFfRzBfQ0hBTjBfMVNUX1RYX0RFU0NfUFRSICAgMHgwMEM5MTQKKyNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cwX0NIQU4xX0NPTkZJRyAgICAgICAgMHgwMTA5MDAKKyNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cwX0NIQU4xX0NPTU0gICAgICAgICAgMHgwMTA5MDgKKyNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cwX0NIQU4xX1JYX0RFU0NfQkFTRSAgICAgIDB4MDE4OTAwCisjZGVmaW5lIEdUOTYxMDBfU0RNQV9HMF9DSEFOMV9DVVJSX1JYX0RFU0NfUFRSICAweDAxODkxMAorI2RlZmluZSBHVDk2MTAwX1NETUFfRzBfQ0hBTjFfVFhfREVTQ19CQVNFICAgICAgMHgwMUM5MDAKKyNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cwX0NIQU4xX0NVUlJfVFhfREVTQ19QVFIgIDB4MDFDOTEwCisjZGVmaW5lIEdUOTYxMDBfU0RNQV9HMF9DSEFOMV8xU1RfVFhfREVTQ19QVFIgICAweDAxQzkxNAorI2RlZmluZSBHVDk2MTAwX1NETUFfRzBfQ0hBTjJfQ09ORklHICAgICAgICAweDAyMDkwMAorI2RlZmluZSBHVDk2MTAwX1NETUFfRzBfQ0hBTjJfQ09NTSAgICAgICAgICAweDAyMDkwOAorI2RlZmluZSBHVDk2MTAwX1NETUFfRzBfQ0hBTjJfUlhfREVTQ19CQVNFICAgICAgMHgwMjg5MDAKKyNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cwX0NIQU4yX0NVUlJfUlhfREVTQ19QVFIgIDB4MDI4OTEwCisjZGVmaW5lIEdUOTYxMDBfU0RNQV9HMF9DSEFOMl9UWF9ERVNDX0JBU0UgICAgICAweDAyQzkwMAorI2RlZmluZSBHVDk2MTAwX1NETUFfRzBfQ0hBTjJfQ1VSUl9UWF9ERVNDX1BUUiAgMHgwMkM5MTAKKyNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cwX0NIQU4yXzFTVF9UWF9ERVNDX1BUUiAgIDB4MDJDOTE0CisjZGVmaW5lIEdUOTYxMDBfU0RNQV9HMF9DSEFOM19DT05GSUcgICAgICAgIDB4MDMwOTAwCisjZGVmaW5lIEdUOTYxMDBfU0RNQV9HMF9DSEFOM19DT01NICAgICAgICAgIDB4MDMwOTA4CisjZGVmaW5lIEdUOTYxMDBfU0RNQV9HMF9DSEFOM19SWF9ERVNDX0JBU0UgICAgICAweDAzODkwMAorI2RlZmluZSBHVDk2MTAwX1NETUFfRzBfQ0hBTjNfQ1VSUl9SWF9ERVNDX1BUUiAgMHgwMzg5MTAKKyNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cwX0NIQU4zX1RYX0RFU0NfQkFTRSAgICAgIDB4MDNDOTAwCisjZGVmaW5lIEdUOTYxMDBfU0RNQV9HMF9DSEFOM19DVVJSX1RYX0RFU0NfUFRSICAweDAzQzkxMAorI2RlZmluZSBHVDk2MTAwX1NETUFfRzBfQ0hBTjNfMVNUX1RYX0RFU0NfUFRSICAgMHgwM0M5MTQKKyNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cwX0NIQU40X0NPTkZJRyAgICAgICAgMHgwNDA5MDAKKyNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cwX0NIQU40X0NPTU0gICAgICAgICAgMHgwNDA5MDgKKyNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cwX0NIQU40X1JYX0RFU0NfQkFTRSAgICAgIDB4MDQ4OTAwCisjZGVmaW5lIEdUOTYxMDBfU0RNQV9HMF9DSEFONF9DVVJSX1JYX0RFU0NfUFRSICAweDA0ODkxMAorI2RlZmluZSBHVDk2MTAwX1NETUFfRzBfQ0hBTjRfVFhfREVTQ19CQVNFICAgICAgMHgwNEM5MDAKKyNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cwX0NIQU40X0NVUlJfVFhfREVTQ19QVFIgIDB4MDRDOTEwCisjZGVmaW5lIEdUOTYxMDBfU0RNQV9HMF9DSEFONF8xU1RfVFhfREVTQ19QVFIgICAweDA0QzkxNAorI2RlZmluZSBHVDk2MTAwX1NETUFfRzBfQ0hBTjVfQ09ORklHICAgICAgICAweDA1MDkwMAorI2RlZmluZSBHVDk2MTAwX1NETUFfRzBfQ0hBTjVfQ09NTSAgICAgICAgICAweDA1MDkwOAorI2RlZmluZSBHVDk2MTAwX1NETUFfRzBfQ0hBTjVfUlhfREVTQ19CQVNFICAgICAgMHgwNTg5MDAKKyNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cwX0NIQU41X0NVUlJfUlhfREVTQ19QVFIgIDB4MDU4OTEwCisjZGVmaW5lIEdUOTYxMDBfU0RNQV9HMF9DSEFONV9UWF9ERVNDX0JBU0UgICAgICAweDA1QzkwMAorI2RlZmluZSBHVDk2MTAwX1NETUFfRzBfQ0hBTjVfQ1VSUl9UWF9ERVNDX1BUUiAgMHgwNUM5MTAKKyNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cwX0NIQU41XzFTVF9UWF9ERVNDX1BUUiAgIDB4MDVDOTE0CisjZGVmaW5lIEdUOTYxMDBfU0RNQV9HMF9DSEFONl9DT05GSUcgICAgICAgIDB4MDYwOTAwCisjZGVmaW5lIEdUOTYxMDBfU0RNQV9HMF9DSEFONl9DT01NICAgICAgICAgIDB4MDYwOTA4CisjZGVmaW5lIEdUOTYxMDBfU0RNQV9HMF9DSEFONl9SWF9ERVNDX0JBU0UgICAgICAweDA2ODkwMAorI2RlZmluZSBHVDk2MTAwX1NETUFfRzBfQ0hBTjZfQ1VSUl9SWF9ERVNDX1BUUiAgMHgwNjg5MTAKKyNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cwX0NIQU42X1RYX0RFU0NfQkFTRSAgICAgIDB4MDZDOTAwCisjZGVmaW5lIEdUOTYxMDBfU0RNQV9HMF9DSEFONl9DVVJSX1RYX0RFU0NfUFRSICAweDA2QzkxMAorI2RlZmluZSBHVDk2MTAwX1NETUFfRzBfQ0hBTjZfMVNUX1RYX0RFU0NfUFRSICAgMHgwNkM5MTQKKyNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cwX0NIQU43X0NPTkZJRyAgICAgICAgMHgwNzA5MDAKKyNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cwX0NIQU43X0NPTU0gICAgICAgICAgMHgwNzA5MDgKKyNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cwX0NIQU43X1JYX0RFU0NfQkFTRSAgICAgIDB4MDc4OTAwCisjZGVmaW5lIEdUOTYxMDBfU0RNQV9HMF9DSEFON19DVVJSX1JYX0RFU0NfUFRSICAweDA3ODkxMAorI2RlZmluZSBHVDk2MTAwX1NETUFfRzBfQ0hBTjdfVFhfREVTQ19CQVNFICAgICAgMHgwN0M5MDAKKyNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cwX0NIQU43X0NVUlJfVFhfREVTQ19QVFIgIDB4MDdDOTEwCisjZGVmaW5lIEdUOTYxMDBfU0RNQV9HMF9DSEFON18xU1RfVFhfREVTQ19QVFIgICAweDA3QzkxNAorLyogU0RNQSBHcm91cCAxICovCisjZGVmaW5lIEdUOTYxMDBfU0RNQV9HMV9DSEFOMF9DT05GSUcgICAgICAgIDB4MTAwOTAwCisjZGVmaW5lIEdUOTYxMDBfU0RNQV9HMV9DSEFOMF9DT01NICAgICAgICAgIDB4MTAwOTA4CisjZGVmaW5lIEdUOTYxMDBfU0RNQV9HMV9DSEFOMF9SWF9ERVNDX0JBU0UgICAgICAweDEwODkwMAorI2RlZmluZSBHVDk2MTAwX1NETUFfRzFfQ0hBTjBfQ1VSUl9SWF9ERVNDX1BUUiAgMHgxMDg5MTAKKyNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cxX0NIQU4wX1RYX0RFU0NfQkFTRSAgICAgIDB4MTBDOTAwCisjZGVmaW5lIEdUOTYxMDBfU0RNQV9HMV9DSEFOMF9DVVJSX1RYX0RFU0NfUFRSICAweDEwQzkxMAorI2RlZmluZSBHVDk2MTAwX1NETUFfRzFfQ0hBTjBfMVNUX1RYX0RFU0NfUFRSICAgMHgxMEM5MTQKKyNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cxX0NIQU4xX0NPTkZJRyAgICAgICAgMHgxMTA5MDAKKyNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cxX0NIQU4xX0NPTU0gICAgICAgICAgMHgxMTA5MDgKKyNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cxX0NIQU4xX1JYX0RFU0NfQkFTRSAgICAgIDB4MTE4OTAwCisjZGVmaW5lIEdUOTYxMDBfU0RNQV9HMV9DSEFOMV9DVVJSX1JYX0RFU0NfUFRSICAweDExODkxMAorI2RlZmluZSBHVDk2MTAwX1NETUFfRzFfQ0hBTjFfVFhfREVTQ19CQVNFICAgICAgMHgxMUM5MDAKKyNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cxX0NIQU4xX0NVUlJfVFhfREVTQ19QVFIgIDB4MTFDOTEwCisjZGVmaW5lIEdUOTYxMDBfU0RNQV9HMV9DSEFOMV8xU1RfVFhfREVTQ19QVFIgICAweDExQzkxNAorI2RlZmluZSBHVDk2MTAwX1NETUFfRzFfQ0hBTjJfQ09ORklHICAgICAgICAweDEyMDkwMAorI2RlZmluZSBHVDk2MTAwX1NETUFfRzFfQ0hBTjJfQ09NTSAgICAgICAgICAweDEyMDkwOAorI2RlZmluZSBHVDk2MTAwX1NETUFfRzFfQ0hBTjJfUlhfREVTQ19CQVNFICAgICAgMHgxMjg5MDAKKyNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cxX0NIQU4yX0NVUlJfUlhfREVTQ19QVFIgIDB4MTI4OTEwCisjZGVmaW5lIEdUOTYxMDBfU0RNQV9HMV9DSEFOMl9UWF9ERVNDX0JBU0UgICAgICAweDEyQzkwMAorI2RlZmluZSBHVDk2MTAwX1NETUFfRzFfQ0hBTjJfQ1VSUl9UWF9ERVNDX1BUUiAgMHgxMkM5MTAKKyNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cxX0NIQU4yXzFTVF9UWF9ERVNDX1BUUiAgIDB4MTJDOTE0CisjZGVmaW5lIEdUOTYxMDBfU0RNQV9HMV9DSEFOM19DT05GSUcgICAgICAgIDB4MTMwOTAwCisjZGVmaW5lIEdUOTYxMDBfU0RNQV9HMV9DSEFOM19DT01NICAgICAgICAgIDB4MTMwOTA4CisjZGVmaW5lIEdUOTYxMDBfU0RNQV9HMV9DSEFOM19SWF9ERVNDX0JBU0UgICAgICAweDEzODkwMAorI2RlZmluZSBHVDk2MTAwX1NETUFfRzFfQ0hBTjNfQ1VSUl9SWF9ERVNDX1BUUiAgMHgxMzg5MTAKKyNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cxX0NIQU4zX1RYX0RFU0NfQkFTRSAgICAgIDB4MTNDOTAwCisjZGVmaW5lIEdUOTYxMDBfU0RNQV9HMV9DSEFOM19DVVJSX1RYX0RFU0NfUFRSICAweDEzQzkxMAorI2RlZmluZSBHVDk2MTAwX1NETUFfRzFfQ0hBTjNfMVNUX1RYX0RFU0NfUFRSICAgMHgxM0M5MTQKKyNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cxX0NIQU40X0NPTkZJRyAgICAgICAgMHgxNDA5MDAKKyNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cxX0NIQU40X0NPTU0gICAgICAgICAgMHgxNDA5MDgKKyNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cxX0NIQU40X1JYX0RFU0NfQkFTRSAgICAgIDB4MTQ4OTAwCisjZGVmaW5lIEdUOTYxMDBfU0RNQV9HMV9DSEFONF9DVVJSX1JYX0RFU0NfUFRSICAweDE0ODkxMAorI2RlZmluZSBHVDk2MTAwX1NETUFfRzFfQ0hBTjRfVFhfREVTQ19CQVNFICAgICAgMHgxNEM5MDAKKyNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cxX0NIQU40X0NVUlJfVFhfREVTQ19QVFIgIDB4MTRDOTEwCisjZGVmaW5lIEdUOTYxMDBfU0RNQV9HMV9DSEFONF8xU1RfVFhfREVTQ19QVFIgICAweDE0QzkxNAorI2RlZmluZSBHVDk2MTAwX1NETUFfRzFfQ0hBTjVfQ09ORklHICAgICAgICAweDE1MDkwMAorI2RlZmluZSBHVDk2MTAwX1NETUFfRzFfQ0hBTjVfQ09NTSAgICAgICAgICAweDE1MDkwOAorI2RlZmluZSBHVDk2MTAwX1NETUFfRzFfQ0hBTjVfUlhfREVTQ19CQVNFICAgICAgMHgxNTg5MDAKKyNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cxX0NIQU41X0NVUlJfUlhfREVTQ19QVFIgIDB4MTU4OTEwCisjZGVmaW5lIEdUOTYxMDBfU0RNQV9HMV9DSEFONV9UWF9ERVNDX0JBU0UgICAgICAweDE1QzkwMAorI2RlZmluZSBHVDk2MTAwX1NETUFfRzFfQ0hBTjVfQ1VSUl9UWF9ERVNDX1BUUiAgMHgxNUM5MTAKKyNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cxX0NIQU41XzFTVF9UWF9ERVNDX1BUUiAgIDB4MTVDOTE0CisjZGVmaW5lIEdUOTYxMDBfU0RNQV9HMV9DSEFONl9DT05GSUcgICAgICAgIDB4MTYwOTAwCisjZGVmaW5lIEdUOTYxMDBfU0RNQV9HMV9DSEFONl9DT01NICAgICAgICAgIDB4MTYwOTA4CisjZGVmaW5lIEdUOTYxMDBfU0RNQV9HMV9DSEFONl9SWF9ERVNDX0JBU0UgICAgICAweDE2ODkwMAorI2RlZmluZSBHVDk2MTAwX1NETUFfRzFfQ0hBTjZfQ1VSUl9SWF9ERVNDX1BUUiAgMHgxNjg5MTAKKyNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cxX0NIQU42X1RYX0RFU0NfQkFTRSAgICAgIDB4MTZDOTAwCisjZGVmaW5lIEdUOTYxMDBfU0RNQV9HMV9DSEFONl9DVVJSX1RYX0RFU0NfUFRSICAweDE2QzkxMAorI2RlZmluZSBHVDk2MTAwX1NETUFfRzFfQ0hBTjZfMVNUX1RYX0RFU0NfUFRSICAgMHgxNkM5MTQKKyNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cxX0NIQU43X0NPTkZJRyAgICAgICAgMHgxNzA5MDAKKyNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cxX0NIQU43X0NPTU0gICAgICAgICAgMHgxNzA5MDgKKyNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cxX0NIQU43X1JYX0RFU0NfQkFTRSAgICAgIDB4MTc4OTAwCisjZGVmaW5lIEdUOTYxMDBfU0RNQV9HMV9DSEFON19DVVJSX1JYX0RFU0NfUFRSICAweDE3ODkxMAorI2RlZmluZSBHVDk2MTAwX1NETUFfRzFfQ0hBTjdfVFhfREVTQ19CQVNFICAgICAgMHgxN0M5MDAKKyNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cxX0NIQU43X0NVUlJfVFhfREVTQ19QVFIgIDB4MTdDOTEwCisjZGVmaW5lIEdUOTYxMDBfU0RNQV9HMV9DSEFON18xU1RfVFhfREVTQ19QVFIgICAweDE3QzkxNAorLyogIE1QU0NzICAqLworI2RlZmluZSBHVDk2MTAwX01QU0MwX01BSU5fQ09ORklHX0xPVyAgIDB4MDAwQTAwCisjZGVmaW5lIEdUOTYxMDBfTVBTQzBfTUFJTl9DT05GSUdfSElHSCAgMHgwMDBBMDQKKyNkZWZpbmUgR1Q5NjEwMF9NUFNDMF9QUk9UT0NPTF9DT05GSUcgICAweDAwMEEwOAorI2RlZmluZSBHVDk2MTAwX01QU0NfQ0hBTjBfUkVHMSAgICAgICAgIDB4MDAwQTBDCisjZGVmaW5lIEdUOTYxMDBfTVBTQ19DSEFOMF9SRUcyICAgICAgICAgMHgwMDBBMTAKKyNkZWZpbmUgR1Q5NjEwMF9NUFNDX0NIQU4wX1JFRzMgICAgICAgICAweDAwMEExNAorI2RlZmluZSBHVDk2MTAwX01QU0NfQ0hBTjBfUkVHNCAgICAgICAgIDB4MDAwQTE4CisjZGVmaW5lIEdUOTYxMDBfTVBTQ19DSEFOMF9SRUc1ICAgICAgICAgMHgwMDBBMUMKKyNkZWZpbmUgR1Q5NjEwMF9NUFNDX0NIQU4wX1JFRzYgICAgICAgICAweDAwMEEyMAorI2RlZmluZSBHVDk2MTAwX01QU0NfQ0hBTjBfUkVHNyAgICAgICAgIDB4MDAwQTI0CisjZGVmaW5lIEdUOTYxMDBfTVBTQ19DSEFOMF9SRUc4ICAgICAgICAgMHgwMDBBMjgKKyNkZWZpbmUgR1Q5NjEwMF9NUFNDX0NIQU4wX1JFRzkgICAgICAgICAweDAwMEEyQworI2RlZmluZSBHVDk2MTAwX01QU0NfQ0hBTjBfUkVHMTAgICAgICAgIDB4MDAwQTMwCisjZGVmaW5lIEdUOTYxMDBfTVBTQ19DSEFOMF9SRUcxMSAgICAgICAgMHgwMDBBMzQKKyNkZWZpbmUgR1Q5NjEwMF9NUFNDMV9NQUlOX0NPTkZJR19MT1cgICAweDAwOEEwMAorI2RlZmluZSBHVDk2MTAwX01QU0MxX01BSU5fQ09ORklHX0hJR0ggIDB4MDA4QTA0CisjZGVmaW5lIEdUOTYxMDBfTVBTQzFfUFJPVE9DT0xfQ09ORklHICAgMHgwMDhBMDgKKyNkZWZpbmUgR1Q5NjEwMF9NUFNDX0NIQU4xX1JFRzEgICAgICAgICAweDAwOEEwQworI2RlZmluZSBHVDk2MTAwX01QU0NfQ0hBTjFfUkVHMiAgICAgICAgIDB4MDA4QTEwCisjZGVmaW5lIEdUOTYxMDBfTVBTQ19DSEFOMV9SRUczICAgICAgICAgMHgwMDhBMTQKKyNkZWZpbmUgR1Q5NjEwMF9NUFNDX0NIQU4xX1JFRzQgICAgICAgICAweDAwOEExOAorI2RlZmluZSBHVDk2MTAwX01QU0NfQ0hBTjFfUkVHNSAgICAgICAgIDB4MDA4QTFDCisjZGVmaW5lIEdUOTYxMDBfTVBTQ19DSEFOMV9SRUc2ICAgICAgICAgMHgwMDhBMjAKKyNkZWZpbmUgR1Q5NjEwMF9NUFNDX0NIQU4xX1JFRzcgICAgICAgICAweDAwOEEyNAorI2RlZmluZSBHVDk2MTAwX01QU0NfQ0hBTjFfUkVHOCAgICAgICAgIDB4MDA4QTI4CisjZGVmaW5lIEdUOTYxMDBfTVBTQ19DSEFOMV9SRUc5ICAgICAgICAgMHgwMDhBMkMKKyNkZWZpbmUgR1Q5NjEwMF9NUFNDX0NIQU4xX1JFRzEwICAgICAgICAweDAwOEEzMAorI2RlZmluZSBHVDk2MTAwX01QU0NfQ0hBTjFfUkVHMTEgICAgICAgIDB4MDA4QTM0CisjZGVmaW5lIEdUOTYxMDBfTVBTQzJfTUFJTl9DT05GSUdfTE9XICAgMHgwMTBBMDAKKyNkZWZpbmUgR1Q5NjEwMF9NUFNDMl9NQUlOX0NPTkZJR19ISUdIICAweDAxMEEwNAorI2RlZmluZSBHVDk2MTAwX01QU0MyX1BST1RPQ09MX0NPTkZJRyAgIDB4MDEwQTA4CisjZGVmaW5lIEdUOTYxMDBfTVBTQ19DSEFOMl9SRUcxICAgICAgICAgMHgwMTBBMEMKKyNkZWZpbmUgR1Q5NjEwMF9NUFNDX0NIQU4yX1JFRzIgICAgICAgICAweDAxMEExMAorI2RlZmluZSBHVDk2MTAwX01QU0NfQ0hBTjJfUkVHMyAgICAgICAgIDB4MDEwQTE0CisjZGVmaW5lIEdUOTYxMDBfTVBTQ19DSEFOMl9SRUc0ICAgICAgICAgMHgwMTBBMTgKKyNkZWZpbmUgR1Q5NjEwMF9NUFNDX0NIQU4yX1JFRzUgICAgICAgICAweDAxMEExQworI2RlZmluZSBHVDk2MTAwX01QU0NfQ0hBTjJfUkVHNiAgICAgICAgIDB4MDEwQTIwCisjZGVmaW5lIEdUOTYxMDBfTVBTQ19DSEFOMl9SRUc3ICAgICAgICAgMHgwMTBBMjQKKyNkZWZpbmUgR1Q5NjEwMF9NUFNDX0NIQU4yX1JFRzggICAgICAgICAweDAxMEEyOAorI2RlZmluZSBHVDk2MTAwX01QU0NfQ0hBTjJfUkVHOSAgICAgICAgIDB4MDEwQTJDCisjZGVmaW5lIEdUOTYxMDBfTVBTQ19DSEFOMl9SRUcxMCAgICAgICAgMHgwMTBBMzAKKyNkZWZpbmUgR1Q5NjEwMF9NUFNDX0NIQU4yX1JFRzExICAgICAgICAweDAxMEEzNAorI2RlZmluZSBHVDk2MTAwX01QU0MzX01BSU5fQ09ORklHX0xPVyAgIDB4MDE4QTAwCisjZGVmaW5lIEdUOTYxMDBfTVBTQzNfTUFJTl9DT05GSUdfSElHSCAgMHgwMThBMDQKKyNkZWZpbmUgR1Q5NjEwMF9NUFNDM19QUk9UT0NPTF9DT05GSUcgICAweDAxOEEwOAorI2RlZmluZSBHVDk2MTAwX01QU0NfQ0hBTjNfUkVHMSAgICAgICAgIDB4MDE4QTBDCisjZGVmaW5lIEdUOTYxMDBfTVBTQ19DSEFOM19SRUcyICAgICAgICAgMHgwMThBMTAKKyNkZWZpbmUgR1Q5NjEwMF9NUFNDX0NIQU4zX1JFRzMgICAgICAgICAweDAxOEExNAorI2RlZmluZSBHVDk2MTAwX01QU0NfQ0hBTjNfUkVHNCAgICAgICAgIDB4MDE4QTE4CisjZGVmaW5lIEdUOTYxMDBfTVBTQ19DSEFOM19SRUc1ICAgICAgICAgMHgwMThBMUMKKyNkZWZpbmUgR1Q5NjEwMF9NUFNDX0NIQU4zX1JFRzYgICAgICAgICAweDAxOEEyMAorI2RlZmluZSBHVDk2MTAwX01QU0NfQ0hBTjNfUkVHNyAgICAgICAgIDB4MDE4QTI0CisjZGVmaW5lIEdUOTYxMDBfTVBTQ19DSEFOM19SRUc4ICAgICAgICAgMHgwMThBMjgKKyNkZWZpbmUgR1Q5NjEwMF9NUFNDX0NIQU4zX1JFRzkgICAgICAgICAweDAxOEEyQworI2RlZmluZSBHVDk2MTAwX01QU0NfQ0hBTjNfUkVHMTAgICAgICAgIDB4MDE4QTMwCisjZGVmaW5lIEdUOTYxMDBfTVBTQ19DSEFOM19SRUcxMSAgICAgICAgMHgwMThBMzQKKyNkZWZpbmUgR1Q5NjEwMF9NUFNDNF9NQUlOX0NPTkZJR19MT1cgICAweDAyMEEwMAorI2RlZmluZSBHVDk2MTAwX01QU0M0X01BSU5fQ09ORklHX0hJR0ggIDB4MDIwQTA0CisjZGVmaW5lIEdUOTYxMDBfTVBTQzRfUFJPVE9DT0xfQ09ORklHICAgMHgwMjBBMDgKKyNkZWZpbmUgR1Q5NjEwMF9NUFNDX0NIQU40X1JFRzEgICAgICAgICAweDAyMEEwQworI2RlZmluZSBHVDk2MTAwX01QU0NfQ0hBTjRfUkVHMiAgICAgICAgIDB4MDIwQTEwCisjZGVmaW5lIEdUOTYxMDBfTVBTQ19DSEFONF9SRUczICAgICAgICAgMHgwMjBBMTQKKyNkZWZpbmUgR1Q5NjEwMF9NUFNDX0NIQU40X1JFRzQgICAgICAgICAweDAyMEExOAorI2RlZmluZSBHVDk2MTAwX01QU0NfQ0hBTjRfUkVHNSAgICAgICAgIDB4MDIwQTFDCisjZGVmaW5lIEdUOTYxMDBfTVBTQ19DSEFONF9SRUc2ICAgICAgICAgMHgwMjBBMjAKKyNkZWZpbmUgR1Q5NjEwMF9NUFNDX0NIQU40X1JFRzcgICAgICAgICAweDAyMEEyNAorI2RlZmluZSBHVDk2MTAwX01QU0NfQ0hBTjRfUkVHOCAgICAgICAgIDB4MDIwQTI4CisjZGVmaW5lIEdUOTYxMDBfTVBTQ19DSEFONF9SRUc5ICAgICAgICAgMHgwMjBBMkMKKyNkZWZpbmUgR1Q5NjEwMF9NUFNDX0NIQU40X1JFRzEwICAgICAgICAweDAyMEEzMAorI2RlZmluZSBHVDk2MTAwX01QU0NfQ0hBTjRfUkVHMTEgICAgICAgIDB4MDIwQTM0CisjZGVmaW5lIEdUOTYxMDBfTVBTQzVfTUFJTl9DT05GSUdfTE9XICAgMHgwMjhBMDAKKyNkZWZpbmUgR1Q5NjEwMF9NUFNDNV9NQUlOX0NPTkZJR19ISUdIICAweDAyOEEwNAorI2RlZmluZSBHVDk2MTAwX01QU0M1X1BST1RPQ09MX0NPTkZJRyAgIDB4MDI4QTA4CisjZGVmaW5lIEdUOTYxMDBfTVBTQ19DSEFONV9SRUcxICAgICAgICAgMHgwMjhBMEMKKyNkZWZpbmUgR1Q5NjEwMF9NUFNDX0NIQU41X1JFRzIgICAgICAgICAweDAyOEExMAorI2RlZmluZSBHVDk2MTAwX01QU0NfQ0hBTjVfUkVHMyAgICAgICAgIDB4MDI4QTE0CisjZGVmaW5lIEdUOTYxMDBfTVBTQ19DSEFONV9SRUc0ICAgICAgICAgMHgwMjhBMTgKKyNkZWZpbmUgR1Q5NjEwMF9NUFNDX0NIQU41X1JFRzUgICAgICAgICAweDAyOEExQworI2RlZmluZSBHVDk2MTAwX01QU0NfQ0hBTjVfUkVHNiAgICAgICAgIDB4MDI4QTIwCisjZGVmaW5lIEdUOTYxMDBfTVBTQ19DSEFONV9SRUc3ICAgICAgICAgMHgwMjhBMjQKKyNkZWZpbmUgR1Q5NjEwMF9NUFNDX0NIQU41X1JFRzggICAgICAgICAweDAyOEEyOAorI2RlZmluZSBHVDk2MTAwX01QU0NfQ0hBTjVfUkVHOSAgICAgICAgIDB4MDI4QTJDCisjZGVmaW5lIEdUOTYxMDBfTVBTQ19DSEFONV9SRUcxMCAgICAgICAgMHgwMjhBMzAKKyNkZWZpbmUgR1Q5NjEwMF9NUFNDX0NIQU41X1JFRzExICAgICAgICAweDAyOEEzNAorI2RlZmluZSBHVDk2MTAwX01QU0M2X01BSU5fQ09ORklHX0xPVyAgIDB4MDMwQTAwCisjZGVmaW5lIEdUOTYxMDBfTVBTQzZfTUFJTl9DT05GSUdfSElHSCAgMHgwMzBBMDQKKyNkZWZpbmUgR1Q5NjEwMF9NUFNDNl9QUk9UT0NPTF9DT05GSUcgICAweDAzMEEwOAorI2RlZmluZSBHVDk2MTAwX01QU0NfQ0hBTjZfUkVHMSAgICAgICAgIDB4MDMwQTBDCisjZGVmaW5lIEdUOTYxMDBfTVBTQ19DSEFONl9SRUcyICAgICAgICAgMHgwMzBBMTAKKyNkZWZpbmUgR1Q5NjEwMF9NUFNDX0NIQU42X1JFRzMgICAgICAgICAweDAzMEExNAorI2RlZmluZSBHVDk2MTAwX01QU0NfQ0hBTjZfUkVHNCAgICAgICAgIDB4MDMwQTE4CisjZGVmaW5lIEdUOTYxMDBfTVBTQ19DSEFONl9SRUc1ICAgICAgICAgMHgwMzBBMUMKKyNkZWZpbmUgR1Q5NjEwMF9NUFNDX0NIQU42X1JFRzYgICAgICAgICAweDAzMEEyMAorI2RlZmluZSBHVDk2MTAwX01QU0NfQ0hBTjZfUkVHNyAgICAgICAgIDB4MDMwQTI0CisjZGVmaW5lIEdUOTYxMDBfTVBTQ19DSEFONl9SRUc4ICAgICAgICAgMHgwMzBBMjgKKyNkZWZpbmUgR1Q5NjEwMF9NUFNDX0NIQU42X1JFRzkgICAgICAgICAweDAzMEEyQworI2RlZmluZSBHVDk2MTAwX01QU0NfQ0hBTjZfUkVHMTAgICAgICAgIDB4MDMwQTMwCisjZGVmaW5lIEdUOTYxMDBfTVBTQ19DSEFONl9SRUcxMSAgICAgICAgMHgwMzBBMzQKKyNkZWZpbmUgR1Q5NjEwMF9NUFNDN19NQUlOX0NPTkZJR19MT1cgICAweDAzOEEwMAorI2RlZmluZSBHVDk2MTAwX01QU0M3X01BSU5fQ09ORklHX0hJR0ggIDB4MDM4QTA0CisjZGVmaW5lIEdUOTYxMDBfTVBTQzdfUFJPVE9DT0xfQ09ORklHICAgMHgwMzhBMDgKKyNkZWZpbmUgR1Q5NjEwMF9NUFNDX0NIQU43X1JFRzEgICAgICAgICAweDAzOEEwQworI2RlZmluZSBHVDk2MTAwX01QU0NfQ0hBTjdfUkVHMiAgICAgICAgIDB4MDM4QTEwCisjZGVmaW5lIEdUOTYxMDBfTVBTQ19DSEFON19SRUczICAgICAgICAgMHgwMzhBMTQKKyNkZWZpbmUgR1Q5NjEwMF9NUFNDX0NIQU43X1JFRzQgICAgICAgICAweDAzOEExOAorI2RlZmluZSBHVDk2MTAwX01QU0NfQ0hBTjdfUkVHNSAgICAgICAgIDB4MDM4QTFDCisjZGVmaW5lIEdUOTYxMDBfTVBTQ19DSEFON19SRUc2ICAgICAgICAgMHgwMzhBMjAKKyNkZWZpbmUgR1Q5NjEwMF9NUFNDX0NIQU43X1JFRzcgICAgICAgICAweDAzOEEyNAorI2RlZmluZSBHVDk2MTAwX01QU0NfQ0hBTjdfUkVHOCAgICAgICAgIDB4MDM4QTI4CisjZGVmaW5lIEdUOTYxMDBfTVBTQ19DSEFON19SRUc5ICAgICAgICAgMHgwMzhBMkMKKyNkZWZpbmUgR1Q5NjEwMF9NUFNDX0NIQU43X1JFRzEwICAgICAgICAweDAzOEEzMAorI2RlZmluZSBHVDk2MTAwX01QU0NfQ0hBTjdfUkVHMTEgICAgICAgIDB4MDM4QTM0CisvKiAgRmxleFRETXMgICovCisvKiBURFBSMCAtIFRyYW5zbWl0IER1YWwgUG9ydCBSQU0uIGJsb2NrIHNpemUgMHhmZiAqLworI2RlZmluZSBHVDk2MTAwX0ZYVERNMF9URFBSMF9CTEswX0JBU0UgIDB4MDAwQjAwCisjZGVmaW5lIEdUOTYxMDBfRlhURE0wX1REUFIwX0JMSzFfQkFTRSAgMHgwMDFCMDAKKyNkZWZpbmUgR1Q5NjEwMF9GWFRETTBfVERQUjBfQkxLMl9CQVNFICAweDAwMkIwMAorI2RlZmluZSBHVDk2MTAwX0ZYVERNMF9URFBSMF9CTEszX0JBU0UgIDB4MDAzQjAwCisvKiBSRFBSMCAtIFJlY2VpdmUgRHVhbCBQb3J0IFJBTS4gYmxvY2sgc2l6ZSAweGZmICovCisjZGVmaW5lIEdUOTYxMDBfRlhURE0wX1JEUFIwX0JMSzBfQkFTRSAgMHgwMDRCMDAKKyNkZWZpbmUgR1Q5NjEwMF9GWFRETTBfUkRQUjBfQkxLMV9CQVNFICAweDAwNUIwMAorI2RlZmluZSBHVDk2MTAwX0ZYVERNMF9SRFBSMF9CTEsyX0JBU0UgIDB4MDA2QjAwCisjZGVmaW5lIEdUOTYxMDBfRlhURE0wX1JEUFIwX0JMSzNfQkFTRSAgMHgwMDdCMDAKKyNkZWZpbmUgR1Q5NjEwMF9GWFRETTBfVFhfUkVBRF9QVFIgICAgICAweDAwOEIwMAorI2RlZmluZSBHVDk2MTAwX0ZYVERNMF9SWF9SRUFEX1BUUiAgICAgIDB4MDA4QjA0CisjZGVmaW5lIEdUOTYxMDBfRlhURE0wX0NPTkZJRyAgICAgICAweDAwOEIwOAorI2RlZmluZSBHVDk2MTAwX0ZYVERNMF9BVVhfQ0hBTkFfVFggMHgwMDhCMEMKKyNkZWZpbmUgR1Q5NjEwMF9GWFRETTBfQVVYX0NIQU5BX1JYIDB4MDA4QjEwCisjZGVmaW5lIEdUOTYxMDBfRlhURE0wX0FVWF9DSEFOQl9UWCAweDAwOEIxNAorI2RlZmluZSBHVDk2MTAwX0ZYVERNMF9BVVhfQ0hBTkJfUlggMHgwMDhCMTgKKyNkZWZpbmUgR1Q5NjEwMF9GWFRETTFfVERQUjFfQkxLMF9CQVNFICAweDAxMEIwMAorI2RlZmluZSBHVDk2MTAwX0ZYVERNMV9URFBSMV9CTEsxX0JBU0UgIDB4MDExQjAwCisjZGVmaW5lIEdUOTYxMDBfRlhURE0xX1REUFIxX0JMSzJfQkFTRSAgMHgwMTJCMDAKKyNkZWZpbmUgR1Q5NjEwMF9GWFRETTFfVERQUjFfQkxLM19CQVNFICAweDAxM0IwMAorI2RlZmluZSBHVDk2MTAwX0ZYVERNMV9SRFBSMV9CTEswX0JBU0UgIDB4MDE0QjAwCisjZGVmaW5lIEdUOTYxMDBfRlhURE0xX1JEUFIxX0JMSzFfQkFTRSAgMHgwMTVCMDAKKyNkZWZpbmUgR1Q5NjEwMF9GWFRETTFfUkRQUjFfQkxLMl9CQVNFICAweDAxNkIwMAorI2RlZmluZSBHVDk2MTAwX0ZYVERNMV9SRFBSMV9CTEszX0JBU0UgIDB4MDE3QjAwCisjZGVmaW5lIEdUOTYxMDBfRlhURE0xX1RYX1JFQURfUFRSICAgICAgMHgwMThCMDAKKyNkZWZpbmUgR1Q5NjEwMF9GWFRETTFfUlhfUkVBRF9QVFIgICAgICAweDAxOEIwNAorI2RlZmluZSBHVDk2MTAwX0ZYVERNMV9DT05GSUcgICAgICAgMHgwMThCMDgKKyNkZWZpbmUgR1Q5NjEwMF9GWFRETTFfQVVYX0NIQU5BX1RYIDB4MDE4QjBDCisjZGVmaW5lIEdUOTYxMDBfRlhURE0xX0FVWF9DSEFOQV9SWCAweDAxOEIxMAorI2RlZmluZSBHVDk2MTAwX0ZMVERNMV9BVVhfQ0hBTkJfVFggMHgwMThCMTQKKyNkZWZpbmUgR1Q5NjEwMF9GTFRETTFfQVVYX0NIQU5CX1JYIDB4MDE4QjE4CisjZGVmaW5lIEdUOTYxMDBfRkxURE0yX1REUFIyX0JMSzBfQkFTRSAgMHgwMjBCMDAKKyNkZWZpbmUgR1Q5NjEwMF9GTFRETTJfVERQUjJfQkxLMV9CQVNFICAweDAyMUIwMAorI2RlZmluZSBHVDk2MTAwX0ZMVERNMl9URFBSMl9CTEsyX0JBU0UgIDB4MDIyQjAwCisjZGVmaW5lIEdUOTYxMDBfRkxURE0yX1REUFIyX0JMSzNfQkFTRSAgMHgwMjNCMDAKKyNkZWZpbmUgR1Q5NjEwMF9GTFRETTJfUkRQUjJfQkxLMF9CQVNFICAweDAyNEIwMAorI2RlZmluZSBHVDk2MTAwX0ZMVERNMl9SRFBSMl9CTEsxX0JBU0UgIDB4MDI1QjAwCisjZGVmaW5lIEdUOTYxMDBfRkxURE0yX1JEUFIyX0JMSzJfQkFTRSAgMHgwMjZCMDAKKyNkZWZpbmUgR1Q5NjEwMF9GTFRETTJfUkRQUjJfQkxLM19CQVNFICAweDAyN0IwMAorI2RlZmluZSBHVDk2MTAwX0ZMVERNMl9UWF9SRUFEX1BUUiAgICAgIDB4MDI4QjAwCisjZGVmaW5lIEdUOTYxMDBfRkxURE0yX1JYX1JFQURfUFRSICAgICAgMHgwMjhCMDQKKyNkZWZpbmUgR1Q5NjEwMF9GTFRETTJfQ09ORklHICAgICAgIDB4MDI4QjA4CisjZGVmaW5lIEdUOTYxMDBfRkxURE0yX0FVWF9DSEFOQV9UWCAweDAyOEIwQworI2RlZmluZSBHVDk2MTAwX0ZMVERNMl9BVVhfQ0hBTkFfUlggMHgwMjhCMTAKKyNkZWZpbmUgR1Q5NjEwMF9GTFRETTJfQVVYX0NIQU5CX1RYIDB4MDI4QjE0CisjZGVmaW5lIEdUOTYxMDBfRkxURE0yX0FVWF9DSEFOQl9SWCAweDAyOEIxOAorI2RlZmluZSBHVDk2MTAwX0ZMVERNM19URFBSM19CTEswX0JBU0UgIDB4MDMwQjAwCisjZGVmaW5lIEdUOTYxMDBfRkxURE0zX1REUFIzX0JMSzFfQkFTRSAgMHgwMzFCMDAKKyNkZWZpbmUgR1Q5NjEwMF9GTFRETTNfVERQUjNfQkxLMl9CQVNFICAweDAzMkIwMAorI2RlZmluZSBHVDk2MTAwX0ZMVERNM19URFBSM19CTEszX0JBU0UgIDB4MDMzQjAwCisjZGVmaW5lIEdUOTYxMDBfRlhURE0zX1JEUFIzX0JMSzBfQkFTRSAgMHgwMzRCMDAKKyNkZWZpbmUgR1Q5NjEwMF9GWFRETTNfUkRQUjNfQkxLMV9CQVNFICAweDAzNUIwMAorI2RlZmluZSBHVDk2MTAwX0ZYVERNM19SRFBSM19CTEsyX0JBU0UgIDB4MDM2QjAwCisjZGVmaW5lIEdUOTYxMDBfRlhURE0zX1JEUFIzX0JMSzNfQkFTRSAgMHgwMzdCMDAKKyNkZWZpbmUgR1Q5NjEwMF9GWFRETTNfVFhfUkVBRF9QVFIgICAgICAweDAzOEIwMAorI2RlZmluZSBHVDk2MTAwX0ZYVERNM19SWF9SRUFEX1BUUiAgICAgIDB4MDM4QjA0CisjZGVmaW5lIEdUOTYxMDBfRlhURE0zX0NPTkZJRyAgICAgICAweDAzOEIwOAorI2RlZmluZSBHVDk2MTAwX0ZYVERNM19BVVhfQ0hBTkFfVFggMHgwMzhCMEMKKyNkZWZpbmUgR1Q5NjEwMF9GWFRETTNfQVVYX0NIQU5BX1JYIDB4MDM4QjEwCisjZGVmaW5lIEdUOTYxMDBfRlhURE0zX0FVWF9DSEFOQl9UWCAweDAzOEIxNAorI2RlZmluZSBHVDk2MTAwX0ZYVERNM19BVVhfQ0hBTkJfUlggMHgwMzhCMTgKKy8qICBCYXVkIFJhdGUgR2VuZXJhdG9ycyAgKi8KKyNkZWZpbmUgR1Q5NjEwMF9CUkcwX0NPTkZJRyAgICAgMHgxMDJBMDAKKyNkZWZpbmUgR1Q5NjEwMF9CUkcwX0JBVURfVFVORSAgMHgxMDJBMDQKKyNkZWZpbmUgR1Q5NjEwMF9CUkcxX0NPTkZJRyAgICAgMHgxMDJBMDgKKyNkZWZpbmUgR1Q5NjEwMF9CUkcxX0JBVURfVFVORSAgMHgxMDJBMEMKKyNkZWZpbmUgR1Q5NjEwMF9CUkcyX0NPTkZJRyAgICAgMHgxMDJBMTAKKyNkZWZpbmUgR1Q5NjEwMF9CUkcyX0JBVURfVFVORSAgMHgxMDJBMTQKKyNkZWZpbmUgR1Q5NjEwMF9CUkczX0NPTkZJRyAgICAgMHgxMDJBMTgKKyNkZWZpbmUgR1Q5NjEwMF9CUkczX0JBVURfVFVORSAgMHgxMDJBMUMKKyNkZWZpbmUgR1Q5NjEwMF9CUkc0X0NPTkZJRyAgICAgMHgxMDJBMjAKKyNkZWZpbmUgR1Q5NjEwMF9CUkc0X0JBVURfVFVORSAgMHgxMDJBMjQKKyNkZWZpbmUgR1Q5NjEwMF9CUkc1X0NPTkZJRyAgICAgMHgxMDJBMjgKKyNkZWZpbmUgR1Q5NjEwMF9CUkc1X0JBVURfVFVORSAgMHgxMDJBMkMKKyNkZWZpbmUgR1Q5NjEwMF9CUkc2X0NPTkZJRyAgICAgMHgxMDJBMzAKKyNkZWZpbmUgR1Q5NjEwMF9CUkc2X0JBVURfVFVORSAgMHgxMDJBMzQKKyNkZWZpbmUgR1Q5NjEwMF9CUkc3X0NPTkZJRyAgICAgMHgxMDJBMzgKKyNkZWZpbmUgR1Q5NjEwMF9CUkc3X0JBVURfVFVORSAgMHgxMDJBM0MKKy8qICBSb3V0aW5nIFJlZ2lzdGVycyAgKi8KKyNkZWZpbmUgR1Q5NjEwMF9ST1VURV9NQUlOICAgICAgMHgxMDFBMDAKKyNkZWZpbmUgR1Q5NjEwMF9ST1VURV9SWF9DTE9DSyAgMHgxMDFBMTAKKyNkZWZpbmUgR1Q5NjEwMF9ST1VURV9UWF9DTE9DSyAgMHgxMDFBMjAKKy8qICBHZW5lcmFsIFB1cnBvc2UgUG9ydHMgICovCisjZGVmaW5lIEdUOTYxMDBfR1BQX0NPTkZJRzAgICAgIDB4MTAwQTAwCisjZGVmaW5lIEdUOTYxMDBfR1BQX0NPTkZJRzEgICAgIDB4MTAwQTA0CisjZGVmaW5lIEdUOTYxMDBfR1BQX0NPTkZJRzIgICAgIDB4MTAwQTA4CisjZGVmaW5lIEdUOTYxMDBfR1BQX0NPTkZJRzMgICAgIDB4MTAwQTBDCisjZGVmaW5lIEdUOTYxMDBfR1BQX0lPMCAgICAgICAgIDB4MTAwQTIwCisjZGVmaW5lIEdUOTYxMDBfR1BQX0lPMSAgICAgICAgIDB4MTAwQTI0CisjZGVmaW5lIEdUOTYxMDBfR1BQX0lPMiAgICAgICAgIDB4MTAwQTI4CisjZGVmaW5lIEdUOTYxMDBfR1BQX0lPMyAgICAgICAgIDB4MTAwQTJDCisjZGVmaW5lIEdUOTYxMDBfR1BQX0RBVEEwICAgICAgIDB4MTAwQTQwCisjZGVmaW5lIEdUOTYxMDBfR1BQX0RBVEExICAgICAgIDB4MTAwQTQ0CisjZGVmaW5lIEdUOTYxMDBfR1BQX0RBVEEyICAgICAgIDB4MTAwQTQ4CisjZGVmaW5lIEdUOTYxMDBfR1BQX0RBVEEzICAgICAgIDB4MTAwQTRDCisjZGVmaW5lIEdUOTYxMDBfR1BQX0xFVkVMMCAgICAgIDB4MTAwQTYwCisjZGVmaW5lIEdUOTYxMDBfR1BQX0xFVkVMMSAgICAgIDB4MTAwQTY0CisjZGVmaW5lIEdUOTYxMDBfR1BQX0xFVkVMMiAgICAgIDB4MTAwQTY4CisjZGVmaW5lIEdUOTYxMDBfR1BQX0xFVkVMMyAgICAgIDB4MTAwQTZDCisvKiAgV2F0Y2hkb2cgICovCisjZGVmaW5lIEdUOTYxMDBfV0RfQ09ORklHICAgMHgxMDFBODAKKyNkZWZpbmUgR1Q5NjEwMF9XRF9WQUxVRSAgICAweDEwMUE4NAorLyogQ29tbXVuaWNhdGlvbiBVbml0IEFyYml0ZXIgICovCisjZGVmaW5lIEdUOTYxMDBfQ09NTV9VTklUX0FSQlRSX0NPTkZJRyAweDEwMUFDMAorLyogIFBDSSBBcmJpdGVycyAgKi8KKyNkZWZpbmUgR1Q5NjEwMF9QQ0kwX0FSQlRSX0NPTkZJRyAweDEwMUFFMAorI2RlZmluZSBHVDk2MTAwX1BDSTFfQVJCVFJfQ09ORklHIDB4MTAxQUU0CisvKiBDSVUgQXJiaXRlciAqLworI2RlZmluZSBHVDk2MTAwX0NJVV9BUkJJVEVSX0NPTkZJRyAweDEwMUFDMAorLyogSW50ZXJydXB0IENvbnRyb2xsZXIgKi8KKyNkZWZpbmUgR1Q5NjEwMF9NQUlOX0NBVVNFICAgICAweDAwMEMxOAorI2RlZmluZSBHVDk2MTAwX0lOVDBfTUFJTl9NQVNLIDB4MDAwQzFDCisjZGVmaW5lIEdUOTYxMDBfSU5UMV9NQUlOX01BU0sgMHgwMDBDMjQKKyNkZWZpbmUgR1Q5NjEwMF9ISUdIX0NBVVNFICAgICAweDAwMEM5OAorI2RlZmluZSBHVDk2MTAwX0lOVDBfSElHSF9NQVNLIDB4MDAwQzlDCisjZGVmaW5lIEdUOTYxMDBfSU5UMV9ISUdIX01BU0sgMHgwMDBDQTQKKyNkZWZpbmUgR1Q5NjEwMF9JTlQwX1NFTEVDVCAgICAweDAwMEM3MAorI2RlZmluZSBHVDk2MTAwX0lOVDFfU0VMRUNUICAgIDB4MDAwQzc0CisjZGVmaW5lIEdUOTYxMDBfU0VSSUFMX0NBVVNFICAgMHgxMDNBMDAKKyNkZWZpbmUgR1Q5NjEwMF9TRVJJTlQwX01BU0sgICAweDEwM0E4MAorI2RlZmluZSBHVDk2MTAwX1NFUklOVDFfTUFTSyAgIDB4MTAzQTg4CisKKyNlbmRpZiAvKiAgX0dUOTYxMDBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9nY2Mvc2dpZGVmcy5oIGIvaW5jbHVkZS9hc20tbWlwcy9nY2Mvc2dpZGVmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1OTk0MzcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2djYy9zZ2lkZWZzLmgKQEAgLTAsMCArMSwxNyBAQAorLyoKKyAqIGluY2x1ZGUvc2dpZGVmcy5oCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk2IGJ5IFJhbGYgQmFlY2hsZQorICoKKyAqIFRoaXMgZmlsZSBpcyBoZXJlIHRvIHNhdGlzZnkgR0NDJ3MgZXhwZWN0YXRpb25zLgorICovCisjaWZuZGVmIF9fU0dJREVGU19ICisjZGVmaW5lIF9fU0dJREVGU19ICisKKyNpbmNsdWRlIDxhc20vc2dpZGVmcy5oPgorCisjZW5kaWYgLyogX19TR0lERUZTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvZ2RiLXN0dWIuaCBiL2luY2x1ZGUvYXNtLW1pcHMvZ2RiLXN0dWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmY2N2Q0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9nZGItc3R1Yi5oCkBAIC0wLDAgKzEsMjE1IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1IEFuZHJlYXMgQnVzc2UKKyAqIENvcHlyaWdodCAoQykgMjAwMyBSYWxmIEJhZWNobGUKKyAqLworI2lmbmRlZiBfQVNNX0dEQl9TVFVCX0gKKyNkZWZpbmUgX0FTTV9HREJfU1RVQl9ICisKKworLyoKKyAqIGltcG9ydGFudCByZWdpc3RlciBudW1iZXJzCisgKi8KKworI2RlZmluZSBSRUdfRVBDCQkJMzcKKyNkZWZpbmUgUkVHX0ZQCQkJNzIKKyNkZWZpbmUgUkVHX1NQCQkJMjkKKworLyoKKyAqIFN0YWNrIGxheW91dCBmb3IgdGhlIEdEQiBleGNlcHRpb24gaGFuZGxlcgorICogRGVyaXZlZCBmcm9tIHRoZSBzdGFjayBsYXlvdXQgZGVzY3JpYmVkIGluIGFzbS1taXBzL3N0YWNrZnJhbWUuaAorICoKKyAqIFRoZSBmaXJzdCBQVFJTSVpFKjYgYnl0ZXMgYXJlIGFyZ3VtZW50IHNhdmUgc3BhY2UgZm9yIEMgc3Vicm91dGluZXMuCisgKi8KKyNkZWZpbmUgTlVNUkVHUwkJCTkwCisKKyNkZWZpbmUgR0RCX0ZSX1JFRzAJCShQVFJTSVpFKjYpCQkJLyogMCAqLworI2RlZmluZSBHREJfRlJfUkVHMQkJKChHREJfRlJfUkVHMCkgKyBMT05HU0laRSkJLyogMSAqLworI2RlZmluZSBHREJfRlJfUkVHMgkJKChHREJfRlJfUkVHMSkgKyBMT05HU0laRSkJLyogMiAqLworI2RlZmluZSBHREJfRlJfUkVHMwkJKChHREJfRlJfUkVHMikgKyBMT05HU0laRSkJLyogMyAqLworI2RlZmluZSBHREJfRlJfUkVHNAkJKChHREJfRlJfUkVHMykgKyBMT05HU0laRSkJLyogNCAqLworI2RlZmluZSBHREJfRlJfUkVHNQkJKChHREJfRlJfUkVHNCkgKyBMT05HU0laRSkJLyogNSAqLworI2RlZmluZSBHREJfRlJfUkVHNgkJKChHREJfRlJfUkVHNSkgKyBMT05HU0laRSkJLyogNiAqLworI2RlZmluZSBHREJfRlJfUkVHNwkJKChHREJfRlJfUkVHNikgKyBMT05HU0laRSkJLyogNyAqLworI2RlZmluZSBHREJfRlJfUkVHOAkJKChHREJfRlJfUkVHNykgKyBMT05HU0laRSkJLyogOCAqLworI2RlZmluZSBHREJfRlJfUkVHOQkgICAgICAgICgoR0RCX0ZSX1JFRzgpICsgTE9OR1NJWkUpCS8qIDkgKi8KKyNkZWZpbmUgR0RCX0ZSX1JFRzEwCQkoKEdEQl9GUl9SRUc5KSArIExPTkdTSVpFKQkvKiAxMCAqLworI2RlZmluZSBHREJfRlJfUkVHMTEJCSgoR0RCX0ZSX1JFRzEwKSArIExPTkdTSVpFKQkvKiAxMSAqLworI2RlZmluZSBHREJfRlJfUkVHMTIJCSgoR0RCX0ZSX1JFRzExKSArIExPTkdTSVpFKQkvKiAxMiAqLworI2RlZmluZSBHREJfRlJfUkVHMTMJCSgoR0RCX0ZSX1JFRzEyKSArIExPTkdTSVpFKQkvKiAxMyAqLworI2RlZmluZSBHREJfRlJfUkVHMTQJCSgoR0RCX0ZSX1JFRzEzKSArIExPTkdTSVpFKQkvKiAxNCAqLworI2RlZmluZSBHREJfRlJfUkVHMTUJCSgoR0RCX0ZSX1JFRzE0KSArIExPTkdTSVpFKQkvKiAxNSAqLworI2RlZmluZSBHREJfRlJfUkVHMTYJCSgoR0RCX0ZSX1JFRzE1KSArIExPTkdTSVpFKQkvKiAxNiAqLworI2RlZmluZSBHREJfRlJfUkVHMTcJCSgoR0RCX0ZSX1JFRzE2KSArIExPTkdTSVpFKQkvKiAxNyAqLworI2RlZmluZSBHREJfRlJfUkVHMTgJCSgoR0RCX0ZSX1JFRzE3KSArIExPTkdTSVpFKQkvKiAxOCAqLworI2RlZmluZSBHREJfRlJfUkVHMTkJCSgoR0RCX0ZSX1JFRzE4KSArIExPTkdTSVpFKQkvKiAxOSAqLworI2RlZmluZSBHREJfRlJfUkVHMjAJCSgoR0RCX0ZSX1JFRzE5KSArIExPTkdTSVpFKQkvKiAyMCAqLworI2RlZmluZSBHREJfRlJfUkVHMjEJCSgoR0RCX0ZSX1JFRzIwKSArIExPTkdTSVpFKQkvKiAyMSAqLworI2RlZmluZSBHREJfRlJfUkVHMjIJCSgoR0RCX0ZSX1JFRzIxKSArIExPTkdTSVpFKQkvKiAyMiAqLworI2RlZmluZSBHREJfRlJfUkVHMjMJCSgoR0RCX0ZSX1JFRzIyKSArIExPTkdTSVpFKQkvKiAyMyAqLworI2RlZmluZSBHREJfRlJfUkVHMjQJCSgoR0RCX0ZSX1JFRzIzKSArIExPTkdTSVpFKQkvKiAyNCAqLworI2RlZmluZSBHREJfRlJfUkVHMjUJCSgoR0RCX0ZSX1JFRzI0KSArIExPTkdTSVpFKQkvKiAyNSAqLworI2RlZmluZSBHREJfRlJfUkVHMjYJCSgoR0RCX0ZSX1JFRzI1KSArIExPTkdTSVpFKQkvKiAyNiAqLworI2RlZmluZSBHREJfRlJfUkVHMjcJCSgoR0RCX0ZSX1JFRzI2KSArIExPTkdTSVpFKQkvKiAyNyAqLworI2RlZmluZSBHREJfRlJfUkVHMjgJCSgoR0RCX0ZSX1JFRzI3KSArIExPTkdTSVpFKQkvKiAyOCAqLworI2RlZmluZSBHREJfRlJfUkVHMjkJCSgoR0RCX0ZSX1JFRzI4KSArIExPTkdTSVpFKQkvKiAyOSAqLworI2RlZmluZSBHREJfRlJfUkVHMzAJCSgoR0RCX0ZSX1JFRzI5KSArIExPTkdTSVpFKQkvKiAzMCAqLworI2RlZmluZSBHREJfRlJfUkVHMzEJCSgoR0RCX0ZSX1JFRzMwKSArIExPTkdTSVpFKQkvKiAzMSAqLworCisvKgorICogU2F2ZWQgc3BlY2lhbCByZWdpc3RlcnMKKyAqLworI2RlZmluZSBHREJfRlJfU1RBVFVTCQkoKEdEQl9GUl9SRUczMSkgKyBMT05HU0laRSkJLyogMzIgKi8KKyNkZWZpbmUgR0RCX0ZSX0xPCQkoKEdEQl9GUl9TVEFUVVMpICsgTE9OR1NJWkUpCS8qIDMzICovCisjZGVmaW5lIEdEQl9GUl9ISQkJKChHREJfRlJfTE8pICsgTE9OR1NJWkUpCS8qIDM0ICovCisjZGVmaW5lIEdEQl9GUl9CQURWQUREUgkJKChHREJfRlJfSEkpICsgTE9OR1NJWkUpCS8qIDM1ICovCisjZGVmaW5lIEdEQl9GUl9DQVVTRQkJKChHREJfRlJfQkFEVkFERFIpICsgTE9OR1NJWkUpCS8qIDM2ICovCisjZGVmaW5lIEdEQl9GUl9FUEMJCSgoR0RCX0ZSX0NBVVNFKSArIExPTkdTSVpFKQkvKiAzNyAqLworCisvKgorICogU2F2ZWQgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzCisgKi8KKyNkZWZpbmUgR0RCX0ZSX0ZQUjAJCSgoR0RCX0ZSX0VQQykgKyBMT05HU0laRSkJLyogMzggKi8KKyNkZWZpbmUgR0RCX0ZSX0ZQUjEJCSgoR0RCX0ZSX0ZQUjApICsgTE9OR1NJWkUpCS8qIDM5ICovCisjZGVmaW5lIEdEQl9GUl9GUFIyCQkoKEdEQl9GUl9GUFIxKSArIExPTkdTSVpFKQkvKiA0MCAqLworI2RlZmluZSBHREJfRlJfRlBSMwkJKChHREJfRlJfRlBSMikgKyBMT05HU0laRSkJLyogNDEgKi8KKyNkZWZpbmUgR0RCX0ZSX0ZQUjQJCSgoR0RCX0ZSX0ZQUjMpICsgTE9OR1NJWkUpCS8qIDQyICovCisjZGVmaW5lIEdEQl9GUl9GUFI1CQkoKEdEQl9GUl9GUFI0KSArIExPTkdTSVpFKQkvKiA0MyAqLworI2RlZmluZSBHREJfRlJfRlBSNgkJKChHREJfRlJfRlBSNSkgKyBMT05HU0laRSkJLyogNDQgKi8KKyNkZWZpbmUgR0RCX0ZSX0ZQUjcJCSgoR0RCX0ZSX0ZQUjYpICsgTE9OR1NJWkUpCS8qIDQ1ICovCisjZGVmaW5lIEdEQl9GUl9GUFI4CQkoKEdEQl9GUl9GUFI3KSArIExPTkdTSVpFKQkvKiA0NiAqLworI2RlZmluZSBHREJfRlJfRlBSOQkJKChHREJfRlJfRlBSOCkgKyBMT05HU0laRSkJLyogNDcgKi8KKyNkZWZpbmUgR0RCX0ZSX0ZQUjEwCQkoKEdEQl9GUl9GUFI5KSArIExPTkdTSVpFKQkvKiA0OCAqLworI2RlZmluZSBHREJfRlJfRlBSMTEJCSgoR0RCX0ZSX0ZQUjEwKSArIExPTkdTSVpFKQkvKiA0OSAqLworI2RlZmluZSBHREJfRlJfRlBSMTIJCSgoR0RCX0ZSX0ZQUjExKSArIExPTkdTSVpFKQkvKiA1MCAqLworI2RlZmluZSBHREJfRlJfRlBSMTMJCSgoR0RCX0ZSX0ZQUjEyKSArIExPTkdTSVpFKQkvKiA1MSAqLworI2RlZmluZSBHREJfRlJfRlBSMTQJCSgoR0RCX0ZSX0ZQUjEzKSArIExPTkdTSVpFKQkvKiA1MiAqLworI2RlZmluZSBHREJfRlJfRlBSMTUJCSgoR0RCX0ZSX0ZQUjE0KSArIExPTkdTSVpFKQkvKiA1MyAqLworI2RlZmluZSBHREJfRlJfRlBSMTYJCSgoR0RCX0ZSX0ZQUjE1KSArIExPTkdTSVpFKQkvKiA1NCAqLworI2RlZmluZSBHREJfRlJfRlBSMTcJCSgoR0RCX0ZSX0ZQUjE2KSArIExPTkdTSVpFKQkvKiA1NSAqLworI2RlZmluZSBHREJfRlJfRlBSMTgJCSgoR0RCX0ZSX0ZQUjE3KSArIExPTkdTSVpFKQkvKiA1NiAqLworI2RlZmluZSBHREJfRlJfRlBSMTkJCSgoR0RCX0ZSX0ZQUjE4KSArIExPTkdTSVpFKQkvKiA1NyAqLworI2RlZmluZSBHREJfRlJfRlBSMjAJCSgoR0RCX0ZSX0ZQUjE5KSArIExPTkdTSVpFKQkvKiA1OCAqLworI2RlZmluZSBHREJfRlJfRlBSMjEJCSgoR0RCX0ZSX0ZQUjIwKSArIExPTkdTSVpFKQkvKiA1OSAqLworI2RlZmluZSBHREJfRlJfRlBSMjIJCSgoR0RCX0ZSX0ZQUjIxKSArIExPTkdTSVpFKQkvKiA2MCAqLworI2RlZmluZSBHREJfRlJfRlBSMjMJCSgoR0RCX0ZSX0ZQUjIyKSArIExPTkdTSVpFKQkvKiA2MSAqLworI2RlZmluZSBHREJfRlJfRlBSMjQJCSgoR0RCX0ZSX0ZQUjIzKSArIExPTkdTSVpFKQkvKiA2MiAqLworI2RlZmluZSBHREJfRlJfRlBSMjUJCSgoR0RCX0ZSX0ZQUjI0KSArIExPTkdTSVpFKQkvKiA2MyAqLworI2RlZmluZSBHREJfRlJfRlBSMjYJCSgoR0RCX0ZSX0ZQUjI1KSArIExPTkdTSVpFKQkvKiA2NCAqLworI2RlZmluZSBHREJfRlJfRlBSMjcJCSgoR0RCX0ZSX0ZQUjI2KSArIExPTkdTSVpFKQkvKiA2NSAqLworI2RlZmluZSBHREJfRlJfRlBSMjgJCSgoR0RCX0ZSX0ZQUjI3KSArIExPTkdTSVpFKQkvKiA2NiAqLworI2RlZmluZSBHREJfRlJfRlBSMjkJCSgoR0RCX0ZSX0ZQUjI4KSArIExPTkdTSVpFKQkvKiA2NyAqLworI2RlZmluZSBHREJfRlJfRlBSMzAJCSgoR0RCX0ZSX0ZQUjI5KSArIExPTkdTSVpFKQkvKiA2OCAqLworI2RlZmluZSBHREJfRlJfRlBSMzEJCSgoR0RCX0ZSX0ZQUjMwKSArIExPTkdTSVpFKQkvKiA2OSAqLworCisjZGVmaW5lIEdEQl9GUl9GU1IJCSgoR0RCX0ZSX0ZQUjMxKSArIExPTkdTSVpFKQkvKiA3MCAqLworI2RlZmluZSBHREJfRlJfRklSCQkoKEdEQl9GUl9GU1IpICsgTE9OR1NJWkUpCS8qIDcxICovCisjZGVmaW5lIEdEQl9GUl9GUlAJCSgoR0RCX0ZSX0ZJUikgKyBMT05HU0laRSkJLyogNzIgKi8KKworI2RlZmluZSBHREJfRlJfRFVNTVkJCSgoR0RCX0ZSX0ZSUCkgKyBMT05HU0laRSkJLyogNzMsIHVudXNlZCA/Pz8gKi8KKworLyoKKyAqIEFnYWluLCBDUDAgcmVnaXN0ZXJzCisgKi8KKyNkZWZpbmUgR0RCX0ZSX0NQMF9JTkRFWAkoKEdEQl9GUl9EVU1NWSkgKyBMT05HU0laRSkJLyogNzQgKi8KKyNkZWZpbmUgR0RCX0ZSX0NQMF9SQU5ET00JKChHREJfRlJfQ1AwX0lOREVYKSArIExPTkdTSVpFKQkvKiA3NSAqLworI2RlZmluZSBHREJfRlJfQ1AwX0VOVFJZTE8wCSgoR0RCX0ZSX0NQMF9SQU5ET00pICsgTE9OR1NJWkUpLyogNzYgKi8KKyNkZWZpbmUgR0RCX0ZSX0NQMF9FTlRSWUxPMQkoKEdEQl9GUl9DUDBfRU5UUllMTzApICsgTE9OR1NJWkUpLyogNzcgKi8KKyNkZWZpbmUgR0RCX0ZSX0NQMF9DT05URVhUCSgoR0RCX0ZSX0NQMF9FTlRSWUxPMSkgKyBMT05HU0laRSkvKiA3OCAqLworI2RlZmluZSBHREJfRlJfQ1AwX1BBR0VNQVNLCSgoR0RCX0ZSX0NQMF9DT05URVhUKSArIExPTkdTSVpFKS8qIDc5ICovCisjZGVmaW5lIEdEQl9GUl9DUDBfV0lSRUQJKChHREJfRlJfQ1AwX1BBR0VNQVNLKSArIExPTkdTSVpFKS8qIDgwICovCisjZGVmaW5lIEdEQl9GUl9DUDBfUkVHNwkJKChHREJfRlJfQ1AwX1dJUkVEKSArIExPTkdTSVpFKQkvKiA4MSAqLworI2RlZmluZSBHREJfRlJfQ1AwX1JFRzgJCSgoR0RCX0ZSX0NQMF9SRUc3KSArIExPTkdTSVpFKQkvKiA4MiAqLworI2RlZmluZSBHREJfRlJfQ1AwX1JFRzkJCSgoR0RCX0ZSX0NQMF9SRUc4KSArIExPTkdTSVpFKQkvKiA4MyAqLworI2RlZmluZSBHREJfRlJfQ1AwX0VOVFJZSEkJKChHREJfRlJfQ1AwX1JFRzkpICsgTE9OR1NJWkUpCS8qIDg0ICovCisjZGVmaW5lIEdEQl9GUl9DUDBfUkVHMTEJKChHREJfRlJfQ1AwX0VOVFJZSEkpICsgTE9OR1NJWkUpLyogODUgKi8KKyNkZWZpbmUgR0RCX0ZSX0NQMF9SRUcxMgkoKEdEQl9GUl9DUDBfUkVHMTEpICsgTE9OR1NJWkUpCS8qIDg2ICovCisjZGVmaW5lIEdEQl9GUl9DUDBfUkVHMTMJKChHREJfRlJfQ1AwX1JFRzEyKSArIExPTkdTSVpFKQkvKiA4NyAqLworI2RlZmluZSBHREJfRlJfQ1AwX1JFRzE0CSgoR0RCX0ZSX0NQMF9SRUcxMykgKyBMT05HU0laRSkJLyogODggKi8KKyNkZWZpbmUgR0RCX0ZSX0NQMF9QUklECQkoKEdEQl9GUl9DUDBfUkVHMTQpICsgTE9OR1NJWkUpCS8qIDg5ICovCisKKyNkZWZpbmUgR0RCX0ZSX1NJWkUJCSgoKChHREJfRlJfQ1AwX1BSSUQpICsgTE9OR1NJWkUpICsgKFBUUlNJWkUtMSkpICYgfihQVFJTSVpFLTEpKQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisvKgorICogVGhpcyBpcyB0aGUgc2FtZSBhcyBhYm92ZSwgYnV0IGZvciB0aGUgaGlnaC1sZXZlbAorICogcGFydCBvZiB0aGUgR0RCIHN0dWIuCisgKi8KKworc3RydWN0IGdkYl9yZWdzIHsKKwkvKgorCSAqIFBhZCBieXRlcyBmb3IgYXJndW1lbnQgc2F2ZSBzcGFjZSBvbiB0aGUgc3RhY2sKKwkgKiAyNC80OCBCeXRlcyBmb3IgMzIvNjQgYml0IGNvZGUKKwkgKi8KKwl1bnNpZ25lZCBsb25nIHBhZDBbNl07CisKKwkvKgorCSAqIHNhdmVkIG1haW4gcHJvY2Vzc29yIHJlZ2lzdGVycworCSAqLworCWxvbmcJIHJlZzAsICByZWcxLCAgcmVnMiwgIHJlZzMsICByZWc0LCAgcmVnNSwgIHJlZzYsICByZWc3OworCWxvbmcJIHJlZzgsICByZWc5LCByZWcxMCwgcmVnMTEsIHJlZzEyLCByZWcxMywgcmVnMTQsIHJlZzE1OworCWxvbmcJcmVnMTYsIHJlZzE3LCByZWcxOCwgcmVnMTksIHJlZzIwLCByZWcyMSwgcmVnMjIsIHJlZzIzOworCWxvbmcJcmVnMjQsIHJlZzI1LCByZWcyNiwgcmVnMjcsIHJlZzI4LCByZWcyOSwgcmVnMzAsIHJlZzMxOworCisJLyoKKwkgKiBTYXZlZCBzcGVjaWFsIHJlZ2lzdGVycworCSAqLworCWxvbmcJY3AwX3N0YXR1czsKKwlsb25nCWxvOworCWxvbmcJaGk7CisJbG9uZwljcDBfYmFkdmFkZHI7CisJbG9uZwljcDBfY2F1c2U7CisJbG9uZwljcDBfZXBjOworCisJLyoKKwkgKiBTYXZlZCBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMKKwkgKi8KKwlsb25nCWZwcjAsICBmcHIxLCAgZnByMiwgIGZwcjMsICBmcHI0LCAgZnByNSwgIGZwcjYsICBmcHI3OworCWxvbmcJZnByOCwgIGZwcjksICBmcHIxMCwgZnByMTEsIGZwcjEyLCBmcHIxMywgZnByMTQsIGZwcjE1OworCWxvbmcJZnByMTYsIGZwcjE3LCBmcHIxOCwgZnByMTksIGZwcjIwLCBmcHIyMSwgZnByMjIsIGZwcjIzOworCWxvbmcJZnByMjQsIGZwcjI1LCBmcHIyNiwgZnByMjcsIGZwcjI4LCBmcHIyOSwgZnByMzAsIGZwcjMxOworCisJbG9uZwljcDFfZnNyOworCWxvbmcJY3AxX2ZpcjsKKworCS8qCisJICogRnJhbWUgcG9pbnRlcgorCSAqLworCWxvbmcJZnJhbWVfcHRyOworCWxvbmcgICAgZHVtbXk7CQkvKiB1bnVzZWQgKi8KKworCS8qCisJICogc2F2ZWQgY3AwIHJlZ2lzdGVycworCSAqLworCWxvbmcJY3AwX2luZGV4OworCWxvbmcJY3AwX3JhbmRvbTsKKwlsb25nCWNwMF9lbnRyeWxvMDsKKwlsb25nCWNwMF9lbnRyeWxvMTsKKwlsb25nCWNwMF9jb250ZXh0OworCWxvbmcJY3AwX3BhZ2VtYXNrOworCWxvbmcJY3AwX3dpcmVkOworCWxvbmcJY3AwX3JlZzc7CisJbG9uZwljcDBfcmVnODsKKwlsb25nCWNwMF9yZWc5OworCWxvbmcJY3AwX2VudHJ5aGk7CisJbG9uZwljcDBfcmVnMTE7CisJbG9uZwljcDBfcmVnMTI7CisJbG9uZwljcDBfcmVnMTM7CisJbG9uZwljcDBfcmVnMTQ7CisJbG9uZwljcDBfcHJpZDsKK307CisKKy8qCisgKiBQcm90b3R5cGVzCisgKi8KKworZXh0ZXJuIGludCBrZ2RiX2VuYWJsZWQ7Cit2b2lkIHNldF9kZWJ1Z190cmFwcyh2b2lkKTsKK3ZvaWQgc2V0X2FzeW5jX2JyZWFrcG9pbnQodW5zaWduZWQgbG9uZyAqZXBjKTsKKworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKyNlbmRpZiAvKiBfQVNNX0dEQl9TVFVCX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvZ2Z4LmggYi9pbmNsdWRlL2FzbS1taXBzL2dmeC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3MjM1ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2dmeC5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBUaGlzIGlzIHRoZSB1c2VyLXZpc2libGUgU0dJIEdGWCBpbnRlcmZhY2UuCisgKgorICogVGhpcyBtdXN0IGJlIHVzZWQgdmVyYmF0aW0gaW50byB0aGUgR05VIGxpYmMuICBJdCBkb2VzIG5vdCBpbmNsdWRlCisgKiBhbnkga2VybmVsLW9ubHkgYml0cyBvbiBpdC4KKyAqCisgKiBtaWd1ZWxAbnVjbGVjdS51bmFtLm14CisgKi8KKyNpZm5kZWYgX0FTTV9HRlhfSAorI2RlZmluZSBfQVNNX0dGWF9ICisKKy8qIFRoZSBpb2NscywgeWVzLCB0aGV5IGRvIG5vdCBtYWtlIHNlbnNlLCBidXQgc3VjaCBpcyBsaWZlICovCisjZGVmaW5lIEdGWF9CQVNFICAgICAgICAgICAgIDEwMAorI2RlZmluZSBHRlhfR0VUTlVNX0JPQVJEUyAgICAoR0ZYX0JBU0UgKyAxKQorI2RlZmluZSBHRlhfR0VUQk9BUkRfSU5GTyAgICAoR0ZYX0JBU0UgKyAyKQorI2RlZmluZSBHRlhfQVRUQUNIX0JPQVJEICAgICAoR0ZYX0JBU0UgKyAzKQorI2RlZmluZSBHRlhfREVUQUNIX0JPQVJEICAgICAoR0ZYX0JBU0UgKyA0KQorI2RlZmluZSBHRlhfSVNfTUFOQUdFRCAgICAgICAoR0ZYX0JBU0UgKyA1KQorCisjZGVmaW5lIEdGWF9NQVBBTEwgICAgICAgICAgIChHRlhfQkFTRSArIDEwKQorI2RlZmluZSBHRlhfTEFCRUwgICAgICAgICAgICAoR0ZYX0JBU0UgKyAxMSkKKworI2RlZmluZSBHRlhfSU5GT19OQU1FX1NJWkUgIDE2CisjZGVmaW5lIEdGWF9JTkZPX0xBQkVMX1NJWkUgMTYKKworc3RydWN0IGdmeF9pbmZvIHsKKwljaGFyIG5hbWUgIFtHRlhfSU5GT19OQU1FX1NJWkVdOyAgLyogYm9hcmQgbmFtZSAqLworCWNoYXIgbGFiZWwgW0dGWF9JTkZPX0xBQkVMX1NJWkVdOyAvKiBsYWJlbCBuYW1lICovCisJdW5zaWduZWQgc2hvcnQgaW50IHhwbWF4LCB5cG1heDsgIC8qIHNjcmVlbiByZXNvbHV0aW9uICovCisJdW5zaWduZWQgaW50IGxlbmdodDsJICAgICAgICAgIC8qIHNpemUgb2YgYSBjb21wbGV0ZSBnZnhfaW5mbyBmb3IgdGhpcyBib2FyZCAqLworfTsKKworc3RydWN0IGdmeF9nZXRib2FyZGluZm9fYXJncyB7CisJdW5zaWduZWQgaW50IGJvYXJkOyAgICAgLyogYm9hcmQgbnVtYmVyLiAgc3RhcnRpbmcgZnJvbSB6ZXJvICovCisJdm9pZCAqYnVmOyAgICAgICAgICAgICAgLyogcG9pbnRlciB0byBnZnhfaW5mbyAqLworCXVuc2lnbmVkIGludCBsZW47ICAgICAgIC8qIGJ1ZmZlciBzaXplIG9mIGJ1ZiAqLworfTsKKworc3RydWN0IGdmeF9hdHRhY2hfYm9hcmRfYXJncyB7CisJdW5zaWduZWQgaW50IGJvYXJkOwkvKiBib2FyZCBudW1iZXIsIHN0YXJ0aW5nIGZyb20gemVybyAqLworCXZvaWQgICAgICAgICp2YWRkcjsJLyogYWRkcmVzcyB3aGVyZSB0aGUgYm9hcmQgcmVnaXN0ZXJzIHNob3VsZCBiZSBtYXBwZWQgKi8KK307CisKKyNpZmRlZiBfX0tFUk5FTF9fCisvKiB1bWFwLmMgKi8KK2V4dGVybiB2b2lkIHJlbW92ZV9tYXBwaW5nIChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHRhc2tfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuIHZvaWQgKnZtYWxsb2NfdW5jYWNoZWQgKHVuc2lnbmVkIGxvbmcgc2l6ZSk7CitleHRlcm4gaW50IHZtYXBfcGFnZV9yYW5nZSAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgZnJvbSwgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIHZhZGRyKTsKKyNlbmRpZgorCisjZW5kaWYgLyogX0FTTV9HRlhfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9ndDY0MTIwLmggYi9pbmNsdWRlL2FzbS1taXBzL2d0NjQxMjAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWRkMTcxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9ndDY0MTIwLmgKQEAgLTAsMCArMSw1NjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDQsIDIwMDUgIE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuCisgKglBbGwgcmlnaHRzIHJlc2VydmVkLgorICoJQXV0aG9yczogQ2Fyc3RlbiBMYW5nZ2FhcmQgPGNhcnN0ZW5sQG1pcHMuY29tPgorICoJCSBNYWNpZWogVy4gUm96eWNraSA8bWFjcm9AbWlwcy5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgUmFsZiBCYWVjaGxlIChyYWxmQGxpbnV4LW1pcHMub3JnKQorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChWZXJzaW9uIDIpIGFzCisgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisjaWZuZGVmIF9BU01fR1Q2NDEyMF9ICisjZGVmaW5lIF9BU01fR1Q2NDEyMF9ICisKKyNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorCisjZGVmaW5lIE1TSyhuKQkJCSgoMSA8PCAobikpIC0gMSkKKworLyoKKyAqICBSZWdpc3RlciBvZmZzZXQgYWRkcmVzc2VzCisgKi8KKy8qIENQVSBDb25maWd1cmF0aW9uLiAgKi8KKyNkZWZpbmUgR1RfQ1BVX09GUwkJMHgwMDAKKworI2RlZmluZSBHVF9NVUxUSV9PRlMJCTB4MTIwCisKKy8qIENQVSBBZGRyZXNzIERlY29kZS4gICovCisjZGVmaW5lIEdUX1NDUzEwTERfT0ZTCQkweDAwOAorI2RlZmluZSBHVF9TQ1MxMEhEX09GUwkJMHgwMTAKKyNkZWZpbmUgR1RfU0NTMzJMRF9PRlMJCTB4MDE4CisjZGVmaW5lIEdUX1NDUzMySERfT0ZTCQkweDAyMAorI2RlZmluZSBHVF9DUzIwTERfT0ZTCQkweDAyOAorI2RlZmluZSBHVF9DUzIwSERfT0ZTCQkweDAzMAorI2RlZmluZSBHVF9DUzNCT09UTERfT0ZTCTB4MDM4CisjZGVmaW5lIEdUX0NTM0JPT1RIRF9PRlMJMHgwNDAKKyNkZWZpbmUgR1RfUENJMElPTERfT0ZTCQkweDA0OAorI2RlZmluZSBHVF9QQ0kwSU9IRF9PRlMJCTB4MDUwCisjZGVmaW5lIEdUX1BDSTBNMExEX09GUwkJMHgwNTgKKyNkZWZpbmUgR1RfUENJME0wSERfT0ZTCQkweDA2MAorI2RlZmluZSBHVF9JU0RfT0ZTCQkweDA2OAorCisjZGVmaW5lIEdUX1BDSTBNMUxEX09GUwkJMHgwODAKKyNkZWZpbmUgR1RfUENJME0xSERfT0ZTCQkweDA4OAorI2RlZmluZSBHVF9QQ0kxSU9MRF9PRlMJCTB4MDkwCisjZGVmaW5lIEdUX1BDSTFJT0hEX09GUwkJMHgwOTgKKyNkZWZpbmUgR1RfUENJMU0wTERfT0ZTCQkweDBhMAorI2RlZmluZSBHVF9QQ0kxTTBIRF9PRlMJCTB4MGE4CisjZGVmaW5lIEdUX1BDSTFNMUxEX09GUwkJMHgwYjAKKyNkZWZpbmUgR1RfUENJMU0xSERfT0ZTCQkweDBiOAorI2RlZmluZSBHVF9QQ0kxTTFMRF9PRlMJCTB4MGIwCisjZGVmaW5lIEdUX1BDSTFNMUhEX09GUwkJMHgwYjgKKworI2RlZmluZSBHVF9TQ1MxMEFSX09GUwkJMHgwZDAKKyNkZWZpbmUgR1RfU0NTMzJBUl9PRlMJCTB4MGQ4CisjZGVmaW5lIEdUX0NTMjBSX09GUwkJMHgwZTAKKyNkZWZpbmUgR1RfQ1MzQk9PVFJfT0ZTCQkweDBlOAorCisjZGVmaW5lIEdUX1BDSTBJT1JFTUFQX09GUwkweDBmMAorI2RlZmluZSBHVF9QQ0kwTTBSRU1BUF9PRlMJMHgwZjgKKyNkZWZpbmUgR1RfUENJME0xUkVNQVBfT0ZTCTB4MTAwCisjZGVmaW5lIEdUX1BDSTFJT1JFTUFQX09GUwkweDEwOAorI2RlZmluZSBHVF9QQ0kxTTBSRU1BUF9PRlMJMHgxMTAKKyNkZWZpbmUgR1RfUENJMU0xUkVNQVBfT0ZTCTB4MTE4CisKKy8qIENQVSBFcnJvciBSZXBvcnQuICAqLworI2RlZmluZSBHVF9DUFVFUlJfQUREUkxPX09GUwkweDA3MAorI2RlZmluZSBHVF9DUFVFUlJfQUREUkhJX09GUwkweDA3OAorCisjZGVmaW5lIEdUX0NQVUVSUl9EQVRBTE9fT0ZTCTB4MTI4CQkJLyogR1QtNjQxMjBBIG9ubHkgICovCisjZGVmaW5lIEdUX0NQVUVSUl9EQVRBSElfT0ZTCTB4MTMwCQkJLyogR1QtNjQxMjBBIG9ubHkgICovCisjZGVmaW5lIEdUX0NQVUVSUl9QQVJJVFlfT0ZTCTB4MTM4CQkJLyogR1QtNjQxMjBBIG9ubHkgICovCisKKy8qIENQVSBTeW5jIEJhcnJpZXIuICAqLworI2RlZmluZSBHVF9QQ0kwU1lOQ19PRlMJCTB4MGMwCisjZGVmaW5lIEdUX1BDSTFTWU5DX09GUwkJMHgwYzgKKworLyogU0RSQU0gYW5kIERldmljZSBBZGRyZXNzIERlY29kZS4gICovCisjZGVmaW5lIEdUX1NDUzBMRF9PRlMJCTB4NDAwCisjZGVmaW5lIEdUX1NDUzBIRF9PRlMJCTB4NDA0CisjZGVmaW5lIEdUX1NDUzFMRF9PRlMJCTB4NDA4CisjZGVmaW5lIEdUX1NDUzFIRF9PRlMJCTB4NDBjCisjZGVmaW5lIEdUX1NDUzJMRF9PRlMJCTB4NDEwCisjZGVmaW5lIEdUX1NDUzJIRF9PRlMJCTB4NDE0CisjZGVmaW5lIEdUX1NDUzNMRF9PRlMJCTB4NDE4CisjZGVmaW5lIEdUX1NDUzNIRF9PRlMJCTB4NDFjCisjZGVmaW5lIEdUX0NTMExEX09GUwkJMHg0MjAKKyNkZWZpbmUgR1RfQ1MwSERfT0ZTCQkweDQyNAorI2RlZmluZSBHVF9DUzFMRF9PRlMJCTB4NDI4CisjZGVmaW5lIEdUX0NTMUhEX09GUwkJMHg0MmMKKyNkZWZpbmUgR1RfQ1MyTERfT0ZTCQkweDQzMAorI2RlZmluZSBHVF9DUzJIRF9PRlMJCTB4NDM0CisjZGVmaW5lIEdUX0NTM0xEX09GUwkJMHg0MzgKKyNkZWZpbmUgR1RfQ1MzSERfT0ZTCQkweDQzYworI2RlZmluZSBHVF9CT09UTERfT0ZTCQkweDQ0MAorI2RlZmluZSBHVF9CT09USERfT0ZTCQkweDQ0NAorCisjZGVmaW5lIEdUX0FERVJSX09GUwkJMHg0NzAKKworLyogU0RSQU0gQ29uZmlndXJhdGlvbi4gICovCisjZGVmaW5lIEdUX1NEUkFNX0NGR19PRlMJMHg0NDgKKworI2RlZmluZSBHVF9TRFJBTV9PUE1PREVfT0ZTCTB4NDc0CisjZGVmaW5lIEdUX1NEUkFNX0JNX09GUwkJMHg0NzgKKyNkZWZpbmUgR1RfU0RSQU1fQUREUkRFQ09ERV9PRlMJMHg0N2MKKworLyogU0RSQU0gUGFyYW1ldGVycy4gICovCisjZGVmaW5lIEdUX1NEUkFNX0IwX09GUwkJMHg0NGMKKyNkZWZpbmUgR1RfU0RSQU1fQjFfT0ZTCQkweDQ1MAorI2RlZmluZSBHVF9TRFJBTV9CMl9PRlMJCTB4NDU0CisjZGVmaW5lIEdUX1NEUkFNX0IzX09GUwkJMHg0NTgKKworLyogRGV2aWNlIFBhcmFtZXRlcnMuICAqLworI2RlZmluZSBHVF9ERVZfQjBfT0ZTCQkweDQ1YworI2RlZmluZSBHVF9ERVZfQjFfT0ZTCQkweDQ2MAorI2RlZmluZSBHVF9ERVZfQjJfT0ZTCQkweDQ2NAorI2RlZmluZSBHVF9ERVZfQjNfT0ZTCQkweDQ2OAorI2RlZmluZSBHVF9ERVZfQk9PVF9PRlMJCTB4NDZjCisKKy8qIEVDQy4gICovCisjZGVmaW5lIEdUX0VDQ19FUlJEQVRBTE8JMHg0ODAJCQkvKiBHVC02NDEyMEEgb25seSAgKi8KKyNkZWZpbmUgR1RfRUNDX0VSUkRBVEFISQkweDQ4NAkJCS8qIEdULTY0MTIwQSBvbmx5ICAqLworI2RlZmluZSBHVF9FQ0NfTUVNCQkweDQ4OAkJCS8qIEdULTY0MTIwQSBvbmx5ICAqLworI2RlZmluZSBHVF9FQ0NfQ0FMQwkJMHg0OGMJCQkvKiBHVC02NDEyMEEgb25seSAgKi8KKyNkZWZpbmUgR1RfRUNDX0VSUkFERFIJCTB4NDkwCQkJLyogR1QtNjQxMjBBIG9ubHkgICovCisKKy8qIERNQSBSZWNvcmQuICAqLworI2RlZmluZSBHVF9ETUEwX0NOVF9PRlMJCTB4ODAwCisjZGVmaW5lIEdUX0RNQTFfQ05UX09GUwkJMHg4MDQKKyNkZWZpbmUgR1RfRE1BMl9DTlRfT0ZTCQkweDgwOAorI2RlZmluZSBHVF9ETUEzX0NOVF9PRlMJCTB4ODBjCisjZGVmaW5lIEdUX0RNQTBfU0FfT0ZTCQkweDgxMAorI2RlZmluZSBHVF9ETUExX1NBX09GUwkJMHg4MTQKKyNkZWZpbmUgR1RfRE1BMl9TQV9PRlMJCTB4ODE4CisjZGVmaW5lIEdUX0RNQTNfU0FfT0ZTCQkweDgxYworI2RlZmluZSBHVF9ETUEwX0RBX09GUwkJMHg4MjAKKyNkZWZpbmUgR1RfRE1BMV9EQV9PRlMJCTB4ODI0CisjZGVmaW5lIEdUX0RNQTJfREFfT0ZTCQkweDgyOAorI2RlZmluZSBHVF9ETUEzX0RBX09GUwkJMHg4MmMKKyNkZWZpbmUgR1RfRE1BMF9ORVhUX09GUwkweDgzMAorI2RlZmluZSBHVF9ETUExX05FWFRfT0ZTCTB4ODM0CisjZGVmaW5lIEdUX0RNQTJfTkVYVF9PRlMJMHg4MzgKKyNkZWZpbmUgR1RfRE1BM19ORVhUX09GUwkweDgzYworCisjZGVmaW5lIEdUX0RNQTBfQ1VSX09GUwkJMHg4NzAKKyNkZWZpbmUgR1RfRE1BMV9DVVJfT0ZTCQkweDg3NAorI2RlZmluZSBHVF9ETUEyX0NVUl9PRlMJCTB4ODc4CisjZGVmaW5lIEdUX0RNQTNfQ1VSX09GUwkJMHg4N2MKKworLyogRE1BIENoYW5uZWwgQ29udHJvbC4gICovCisjZGVmaW5lIEdUX0RNQTBfQ1RSTF9PRlMJMHg4NDAKKyNkZWZpbmUgR1RfRE1BMV9DVFJMX09GUwkweDg0NAorI2RlZmluZSBHVF9ETUEyX0NUUkxfT0ZTCTB4ODQ4CisjZGVmaW5lIEdUX0RNQTNfQ1RSTF9PRlMJMHg4NGMKKworLyogRE1BIEFyYml0ZXIuICAqLworI2RlZmluZSBHVF9ETUFfQVJCX09GUwkJMHg4NjAKKworLyogVGltZXIvQ291bnRlci4gICovCisjZGVmaW5lIEdUX1RDMF9PRlMJCTB4ODUwCisjZGVmaW5lIEdUX1RDMV9PRlMJCTB4ODU0CisjZGVmaW5lIEdUX1RDMl9PRlMJCTB4ODU4CisjZGVmaW5lIEdUX1RDM19PRlMJCTB4ODVjCisKKyNkZWZpbmUgR1RfVENfQ09OVFJPTF9PRlMJMHg4NjQKKworLyogUENJIEludGVybmFsLiAgKi8KKyNkZWZpbmUgR1RfUENJMF9DTURfT0ZTCQkweGMwMAorI2RlZmluZSBHVF9QQ0kwX1RPUl9PRlMJCTB4YzA0CisjZGVmaW5lIEdUX1BDSTBfQlNfU0NTMTBfT0ZTCTB4YzA4CisjZGVmaW5lIEdUX1BDSTBfQlNfU0NTMzJfT0ZTCTB4YzBjCisjZGVmaW5lIEdUX1BDSTBfQlNfQ1MyMF9PRlMJMHhjMTAKKyNkZWZpbmUgR1RfUENJMF9CU19DUzNCVF9PRlMJMHhjMTQKKworI2RlZmluZSBHVF9QQ0kxX0lBQ0tfT0ZTCTB4YzMwCisjZGVmaW5lIEdUX1BDSTBfSUFDS19PRlMJMHhjMzQKKworI2RlZmluZSBHVF9QQ0kwX0JBUkVfT0ZTCTB4YzNjCisjZGVmaW5lIEdUX1BDSTBfUFJFRk1CUl9PRlMJMHhjNDAKKworI2RlZmluZSBHVF9QQ0kwX1NDUzEwX0JBUl9PRlMJMHhjNDgKKyNkZWZpbmUgR1RfUENJMF9TQ1MzMl9CQVJfT0ZTCTB4YzRjCisjZGVmaW5lIEdUX1BDSTBfQ1MyMF9CQVJfT0ZTCTB4YzUwCisjZGVmaW5lIEdUX1BDSTBfQ1MzQlRfQkFSX09GUwkweGM1NAorI2RlZmluZSBHVF9QQ0kwX1NTQ1MxMF9CQVJfT0ZTCTB4YzU4CisjZGVmaW5lIEdUX1BDSTBfU1NDUzMyX0JBUl9PRlMJMHhjNWMKKworI2RlZmluZSBHVF9QQ0kwX1NDUzNCVF9CQVJfT0ZTCTB4YzY0CisKKyNkZWZpbmUgR1RfUENJMV9DTURfT0ZTCQkweGM4MAorI2RlZmluZSBHVF9QQ0kxX1RPUl9PRlMJCTB4Yzg0CisjZGVmaW5lIEdUX1BDSTFfQlNfU0NTMTBfT0ZTCTB4Yzg4CisjZGVmaW5lIEdUX1BDSTFfQlNfU0NTMzJfT0ZTCTB4YzhjCisjZGVmaW5lIEdUX1BDSTFfQlNfQ1MyMF9PRlMJMHhjOTAKKyNkZWZpbmUgR1RfUENJMV9CU19DUzNCVF9PRlMJMHhjOTQKKworI2RlZmluZSBHVF9QQ0kxX0JBUkVfT0ZTCTB4Y2JjCisjZGVmaW5lIEdUX1BDSTFfUFJFRk1CUl9PRlMJMHhjYzAKKworI2RlZmluZSBHVF9QQ0kxX1NDUzEwX0JBUl9PRlMJMHhjYzgKKyNkZWZpbmUgR1RfUENJMV9TQ1MzMl9CQVJfT0ZTCTB4Y2NjCisjZGVmaW5lIEdUX1BDSTFfQ1MyMF9CQVJfT0ZTCTB4Y2QwCisjZGVmaW5lIEdUX1BDSTFfQ1MzQlRfQkFSX09GUwkweGNkNAorI2RlZmluZSBHVF9QQ0kxX1NTQ1MxMF9CQVJfT0ZTCTB4Y2Q4CisjZGVmaW5lIEdUX1BDSTFfU1NDUzMyX0JBUl9PRlMJMHhjZGMKKworI2RlZmluZSBHVF9QQ0kxX1NDUzNCVF9CQVJfT0ZTCTB4Y2U0CisKKyNkZWZpbmUgR1RfUENJMV9DRkdBRERSX09GUwkweGNmMAorI2RlZmluZSBHVF9QQ0kxX0NGR0RBVEFfT0ZTCTB4Y2Y0CisjZGVmaW5lIEdUX1BDSTBfQ0ZHQUREUl9PRlMJMHhjZjgKKyNkZWZpbmUgR1RfUENJMF9DRkdEQVRBX09GUwkweGNmYworCisvKiBJbnRlcnJ1cHRzLiAgKi8KKyNkZWZpbmUgR1RfSU5UUkNBVVNFX09GUwkweGMxOAorI2RlZmluZSBHVF9JTlRSTUFTS19PRlMJCTB4YzFjCisKKyNkZWZpbmUgR1RfUENJMF9JQ01BU0tfT0ZTCTB4YzI0CisjZGVmaW5lIEdUX1BDSTBfU0VSUjBNQVNLX09GUwkweGMyOAorCisjZGVmaW5lIEdUX0NQVV9JTlRTRUxfT0ZTCTB4YzcwCisjZGVmaW5lIEdUX1BDSTBfSU5UU0VMX09GUwkweGM3NAorCisjZGVmaW5lIEdUX0hJTlRSQ0FVU0VfT0ZTCTB4Yzk4CisjZGVmaW5lIEdUX0hJTlRSTUFTS19PRlMJMHhjOWMKKworI2RlZmluZSBHVF9QQ0kwX0hJQ01BU0tfT0ZTCTB4Y2E0CisjZGVmaW5lIEdUX1BDSTFfU0VSUjFNQVNLX09GUwkweGNhOAorCisKKy8qCisgKiBJMk8gU3VwcG9ydCBSZWdpc3RlcnMKKyAqLworI2RlZmluZSBJTkJPVU5EX01FU1NBR0VfUkVHSVNURVIwX1BDSV9TSURFCQkweDAxMAorI2RlZmluZSBJTkJPVU5EX01FU1NBR0VfUkVHSVNURVIxX1BDSV9TSURFCQkweDAxNAorI2RlZmluZSBPVVRCT1VORF9NRVNTQUdFX1JFR0lTVEVSMF9QQ0lfU0lERQkJMHgwMTgKKyNkZWZpbmUgT1VUQk9VTkRfTUVTU0FHRV9SRUdJU1RFUjFfUENJX1NJREUJCTB4MDFjCisjZGVmaW5lIElOQk9VTkRfRE9PUkJFTExfUkVHSVNURVJfUENJX1NJREUJCTB4MDIwCisjZGVmaW5lIElOQk9VTkRfSU5URVJSVVBUX0NBVVNFX1JFR0lTVEVSX1BDSV9TSURFCTB4MDI0CisjZGVmaW5lIElOQk9VTkRfSU5URVJSVVBUX01BU0tfUkVHSVNURVJfUENJX1NJREUJMHgwMjgKKyNkZWZpbmUgT1VUQk9VTkRfRE9PUkJFTExfUkVHSVNURVJfUENJX1NJREUJCTB4MDJjCisjZGVmaW5lIE9VVEJPVU5EX0lOVEVSUlVQVF9DQVVTRV9SRUdJU1RFUl9QQ0lfU0lERQkweDAzMAorI2RlZmluZSBPVVRCT1VORF9JTlRFUlJVUFRfTUFTS19SRUdJU1RFUl9QQ0lfU0lERQkweDAzNAorI2RlZmluZSBJTkJPVU5EX1FVRVVFX1BPUlRfVklSVFVBTF9SRUdJU1RFUl9QQ0lfU0lERQkweDA0MAorI2RlZmluZSBPVVRCT1VORF9RVUVVRV9QT1JUX1ZJUlRVQUxfUkVHSVNURVJfUENJX1NJREUJMHgwNDQKKyNkZWZpbmUgUVVFVUVfQ09OVFJPTF9SRUdJU1RFUl9QQ0lfU0lERQkJCTB4MDUwCisjZGVmaW5lIFFVRVVFX0JBU0VfQUREUkVTU19SRUdJU1RFUl9QQ0lfU0lERQkJMHgwNTQKKyNkZWZpbmUgSU5CT1VORF9GUkVFX0hFQURfUE9JTlRFUl9SRUdJU1RFUl9QQ0lfU0lERQkweDA2MAorI2RlZmluZSBJTkJPVU5EX0ZSRUVfVEFJTF9QT0lOVEVSX1JFR0lTVEVSX1BDSV9TSURFCTB4MDY0CisjZGVmaW5lIElOQk9VTkRfUE9TVF9IRUFEX1BPSU5URVJfUkVHSVNURVJfUENJX1NJREUJMHgwNjgKKyNkZWZpbmUgSU5CT1VORF9QT1NUX1RBSUxfUE9JTlRFUl9SRUdJU1RFUl9QQ0lfU0lERQkweDA2YworI2RlZmluZSBPVVRCT1VORF9GUkVFX0hFQURfUE9JTlRFUl9SRUdJU1RFUl9QQ0lfU0lERQkweDA3MAorI2RlZmluZSBPVVRCT1VORF9GUkVFX1RBSUxfUE9JTlRFUl9SRUdJU1RFUl9QQ0lfU0lERQkweDA3NAorI2RlZmluZSBPVVRCT1VORF9QT1NUX0hFQURfUE9JTlRFUl9SRUdJU1RFUl9QQ0lfU0lERQkweDA3OAorI2RlZmluZSBPVVRCT1VORF9QT1NUX1RBSUxfUE9JTlRFUl9SRUdJU1RFUl9QQ0lfU0lERQkweDA3YworCisjZGVmaW5lIElOQk9VTkRfTUVTU0FHRV9SRUdJU1RFUjBfQ1BVX1NJREUJCTB4MWMxMAorI2RlZmluZSBJTkJPVU5EX01FU1NBR0VfUkVHSVNURVIxX0NQVV9TSURFCQkweDFjMTQKKyNkZWZpbmUgT1VUQk9VTkRfTUVTU0FHRV9SRUdJU1RFUjBfQ1BVX1NJREUJCTB4MWMxOAorI2RlZmluZSBPVVRCT1VORF9NRVNTQUdFX1JFR0lTVEVSMV9DUFVfU0lERQkJMHgxYzFjCisjZGVmaW5lIElOQk9VTkRfRE9PUkJFTExfUkVHSVNURVJfQ1BVX1NJREUJCTB4MWMyMAorI2RlZmluZSBJTkJPVU5EX0lOVEVSUlVQVF9DQVVTRV9SRUdJU1RFUl9DUFVfU0lERQkweDFjMjQKKyNkZWZpbmUgSU5CT1VORF9JTlRFUlJVUFRfTUFTS19SRUdJU1RFUl9DUFVfU0lERQkweDFjMjgKKyNkZWZpbmUgT1VUQk9VTkRfRE9PUkJFTExfUkVHSVNURVJfQ1BVX1NJREUJCTB4MWMyYworI2RlZmluZSBPVVRCT1VORF9JTlRFUlJVUFRfQ0FVU0VfUkVHSVNURVJfQ1BVX1NJREUJMHgxYzMwCisjZGVmaW5lIE9VVEJPVU5EX0lOVEVSUlVQVF9NQVNLX1JFR0lTVEVSX0NQVV9TSURFCTB4MWMzNAorI2RlZmluZSBJTkJPVU5EX1FVRVVFX1BPUlRfVklSVFVBTF9SRUdJU1RFUl9DUFVfU0lERQkweDFjNDAKKyNkZWZpbmUgT1VUQk9VTkRfUVVFVUVfUE9SVF9WSVJUVUFMX1JFR0lTVEVSX0NQVV9TSURFCTB4MWM0NAorI2RlZmluZSBRVUVVRV9DT05UUk9MX1JFR0lTVEVSX0NQVV9TSURFCQkJMHgxYzUwCisjZGVmaW5lIFFVRVVFX0JBU0VfQUREUkVTU19SRUdJU1RFUl9DUFVfU0lERQkJMHgxYzU0CisjZGVmaW5lIElOQk9VTkRfRlJFRV9IRUFEX1BPSU5URVJfUkVHSVNURVJfQ1BVX1NJREUJMHgxYzYwCisjZGVmaW5lIElOQk9VTkRfRlJFRV9UQUlMX1BPSU5URVJfUkVHSVNURVJfQ1BVX1NJREUJMHgxYzY0CisjZGVmaW5lIElOQk9VTkRfUE9TVF9IRUFEX1BPSU5URVJfUkVHSVNURVJfQ1BVX1NJREUJMHgxYzY4CisjZGVmaW5lIElOQk9VTkRfUE9TVF9UQUlMX1BPSU5URVJfUkVHSVNURVJfQ1BVX1NJREUJMHgxYzZjCisjZGVmaW5lIE9VVEJPVU5EX0ZSRUVfSEVBRF9QT0lOVEVSX1JFR0lTVEVSX0NQVV9TSURFCTB4MWM3MAorI2RlZmluZSBPVVRCT1VORF9GUkVFX1RBSUxfUE9JTlRFUl9SRUdJU1RFUl9DUFVfU0lERQkweDFjNzQKKyNkZWZpbmUgT1VUQk9VTkRfUE9TVF9IRUFEX1BPSU5URVJfUkVHSVNURVJfQ1BVX1NJREUJMHgxYzc4CisjZGVmaW5lIE9VVEJPVU5EX1BPU1RfVEFJTF9QT0lOVEVSX1JFR0lTVEVSX0NQVV9TSURFCTB4MWM3YworCisvKgorICogIFJlZ2lzdGVyIGVuY29kaW5ncworICovCisjZGVmaW5lIEdUX0NQVV9FTkRJQU5fU0hGCTEyCisjZGVmaW5lIEdUX0NQVV9FTkRJQU5fTVNLCShNU0soMSkgPDwgR1RfQ1BVX0VORElBTl9TSEYpCisjZGVmaW5lIEdUX0NQVV9FTkRJQU5fQklUCUdUX0NQVV9FTkRJQU5fTVNLCisjZGVmaW5lIEdUX0NQVV9XUl9TSEYJCTE2CisjZGVmaW5lIEdUX0NQVV9XUl9NU0sJCShNU0soMSkgPDwgR1RfQ1BVX1dSX1NIRikKKyNkZWZpbmUgR1RfQ1BVX1dSX0JJVAkJR1RfQ1BVX1dSX01TSworI2RlZmluZSBHVF9DUFVfV1JfRFhEWERYRFgJMAorI2RlZmluZSBHVF9DUFVfV1JfRERERAkJMQorCisKKyNkZWZpbmUgR1RfUENJX0RDUk1fU0hGCQkyMQorI2RlZmluZSBHVF9QQ0lfTERfU0hGCQkwCisjZGVmaW5lIEdUX1BDSV9MRF9NU0sJCShNU0soMTUpIDw8IEdUX1BDSV9MRF9TSEYpCisjZGVmaW5lIEdUX1BDSV9IRF9TSEYJCTAKKyNkZWZpbmUgR1RfUENJX0hEX01TSwkJKE1TSyg3KSA8PCBHVF9QQ0lfSERfU0hGKQorI2RlZmluZSBHVF9QQ0lfUkVNQVBfU0hGCTAKKyNkZWZpbmUgR1RfUENJX1JFTUFQX01TSwkoTVNLKDExKSA8PCBHVF9QQ0lfUkVNQVBfU0hGKQorCisKKyNkZWZpbmUgR1RfQ0ZHQUREUl9DRkdFTl9TSEYJMzEKKyNkZWZpbmUgR1RfQ0ZHQUREUl9DRkdFTl9NU0sJKE1TSygxKSA8PCBHVF9DRkdBRERSX0NGR0VOX1NIRikKKyNkZWZpbmUgR1RfQ0ZHQUREUl9DRkdFTl9CSVQJR1RfQ0ZHQUREUl9DRkdFTl9NU0sKKworI2RlZmluZSBHVF9DRkdBRERSX0JVU05VTV9TSEYJMTYKKyNkZWZpbmUgR1RfQ0ZHQUREUl9CVVNOVU1fTVNLCShNU0soOCkgPDwgR1RfQ0ZHQUREUl9CVVNOVU1fU0hGKQorCisjZGVmaW5lIEdUX0NGR0FERFJfREVWTlVNX1NIRgkxMQorI2RlZmluZSBHVF9DRkdBRERSX0RFVk5VTV9NU0sJKE1TSyg1KSA8PCBHVF9DRkdBRERSX0RFVk5VTV9TSEYpCisKKyNkZWZpbmUgR1RfQ0ZHQUREUl9GVU5DTlVNX1NIRgk4CisjZGVmaW5lIEdUX0NGR0FERFJfRlVOQ05VTV9NU0sJKE1TSygzKSA8PCBHVF9DRkdBRERSX0ZVTkNOVU1fU0hGKQorCisjZGVmaW5lIEdUX0NGR0FERFJfUkVHTlVNX1NIRgkyCisjZGVmaW5lIEdUX0NGR0FERFJfUkVHTlVNX01TSwkoTVNLKDYpIDw8IEdUX0NGR0FERFJfUkVHTlVNX1NIRikKKworCisjZGVmaW5lIEdUX1NEUkFNX0JNX09SREVSX1NIRgkyCisjZGVmaW5lIEdUX1NEUkFNX0JNX09SREVSX01TSwkoTVNLKDEpIDw8IEdUX1NEUkFNX0JNX09SREVSX1NIRikKKyNkZWZpbmUgR1RfU0RSQU1fQk1fT1JERVJfQklUCUdUX1NEUkFNX0JNX09SREVSX01TSworI2RlZmluZSBHVF9TRFJBTV9CTV9PUkRFUl9TVUIJMQorI2RlZmluZSBHVF9TRFJBTV9CTV9PUkRFUl9MSU4JMAorCisjZGVmaW5lIEdUX1NEUkFNX0JNX1JTVkRfQUxMMQkweGZmYgorCisKKyNkZWZpbmUgR1RfU0RSQU1fQUREUkRFQ09ERV9BRERSX1NIRgkwCisjZGVmaW5lIEdUX1NEUkFNX0FERFJERUNPREVfQUREUl9NU0sJKE1TSygzKSA8PCBHVF9TRFJBTV9BRERSREVDT0RFX0FERFJfU0hGKQorI2RlZmluZSBHVF9TRFJBTV9BRERSREVDT0RFX0FERFJfMAkwCisjZGVmaW5lIEdUX1NEUkFNX0FERFJERUNPREVfQUREUl8xCTEKKyNkZWZpbmUgR1RfU0RSQU1fQUREUkRFQ09ERV9BRERSXzIJMgorI2RlZmluZSBHVF9TRFJBTV9BRERSREVDT0RFX0FERFJfMwkzCisjZGVmaW5lIEdUX1NEUkFNX0FERFJERUNPREVfQUREUl80CTQKKyNkZWZpbmUgR1RfU0RSQU1fQUREUkRFQ09ERV9BRERSXzUJNQorI2RlZmluZSBHVF9TRFJBTV9BRERSREVDT0RFX0FERFJfNgk2CisjZGVmaW5lIEdUX1NEUkFNX0FERFJERUNPREVfQUREUl83CTcKKworCisjZGVmaW5lIEdUX1NEUkFNX0IwX0NBU0xBVF9TSEYJCTAKKyNkZWZpbmUgR1RfU0RSQU1fQjBfQ0FTTEFUX01TSwkJKE1TSygyKSA8PCBHVF9TRFJBTV9CMF9fU0hGKQorI2RlZmluZSBHVF9TRFJBTV9CMF9DQVNMQVRfMgkJMQorI2RlZmluZSBHVF9TRFJBTV9CMF9DQVNMQVRfMwkJMgorCisjZGVmaW5lIEdUX1NEUkFNX0IwX0ZURElTX1NIRgkJMgorI2RlZmluZSBHVF9TRFJBTV9CMF9GVERJU19NU0sJCShNU0soMSkgPDwgR1RfU0RSQU1fQjBfRlRESVNfU0hGKQorI2RlZmluZSBHVF9TRFJBTV9CMF9GVERJU19CSVQJCUdUX1NEUkFNX0IwX0ZURElTX01TSworCisjZGVmaW5lIEdUX1NEUkFNX0IwX1NSQVNQUkNIR19TSEYJMworI2RlZmluZSBHVF9TRFJBTV9CMF9TUkFTUFJDSEdfTVNLCShNU0soMSkgPDwgR1RfU0RSQU1fQjBfU1JBU1BSQ0hHX1NIRikKKyNkZWZpbmUgR1RfU0RSQU1fQjBfU1JBU1BSQ0hHX0JJVAlHVF9TRFJBTV9CMF9TUkFTUFJDSEdfTVNLCisjZGVmaW5lIEdUX1NEUkFNX0IwX1NSQVNQUkNIR18yCQkwCisjZGVmaW5lIEdUX1NEUkFNX0IwX1NSQVNQUkNIR18zCQkxCisKKyNkZWZpbmUgR1RfU0RSQU1fQjBfQjBDT01QQUJfU0hGCTQKKyNkZWZpbmUgR1RfU0RSQU1fQjBfQjBDT01QQUJfTVNLCShNU0soMSkgPDwgR1RfU0RSQU1fQjBfQjBDT01QQUJfU0hGKQorI2RlZmluZSBHVF9TRFJBTV9CMF9CMENPTVBBQl9CSVQJR1RfU0RSQU1fQjBfQjBDT01QQUJfTVNLCisKKyNkZWZpbmUgR1RfU0RSQU1fQjBfNjRCSVRJTlRfU0hGCTUKKyNkZWZpbmUgR1RfU0RSQU1fQjBfNjRCSVRJTlRfTVNLCShNU0soMSkgPDwgR1RfU0RSQU1fQjBfNjRCSVRJTlRfU0hGKQorI2RlZmluZSBHVF9TRFJBTV9CMF82NEJJVElOVF9CSVQJR1RfU0RSQU1fQjBfNjRCSVRJTlRfTVNLCisjZGVmaW5lIEdUX1NEUkFNX0IwXzY0QklUSU5UXzIJCTAKKyNkZWZpbmUgR1RfU0RSQU1fQjBfNjRCSVRJTlRfNAkJMQorCisjZGVmaW5lIEdUX1NEUkFNX0IwX0JXX1NIRgkJNgorI2RlZmluZSBHVF9TRFJBTV9CMF9CV19NU0sJCShNU0soMSkgPDwgR1RfU0RSQU1fQjBfQldfU0hGKQorI2RlZmluZSBHVF9TRFJBTV9CMF9CV19CSVQJCUdUX1NEUkFNX0IwX0JXX01TSworI2RlZmluZSBHVF9TRFJBTV9CMF9CV18zMgkJMAorI2RlZmluZSBHVF9TRFJBTV9CMF9CV182NAkJMQorCisjZGVmaW5lIEdUX1NEUkFNX0IwX0JMT0REX1NIRgkJNworI2RlZmluZSBHVF9TRFJBTV9CMF9CTE9ERF9NU0sJCShNU0soMSkgPDwgR1RfU0RSQU1fQjBfQkxPRERfU0hGKQorI2RlZmluZSBHVF9TRFJBTV9CMF9CTE9ERF9CSVQJCUdUX1NEUkFNX0IwX0JMT0REX01TSworCisjZGVmaW5lIEdUX1NEUkFNX0IwX1BBUl9TSEYJCTgKKyNkZWZpbmUgR1RfU0RSQU1fQjBfUEFSX01TSwkJKE1TSygxKSA8PCBHVF9TRFJBTV9CMF9QQVJfU0hGKQorI2RlZmluZSBHVF9TRFJBTV9CMF9QQVJfQklUCQlHVF9TRFJBTV9CMF9QQVJfTVNLCisKKyNkZWZpbmUgR1RfU0RSQU1fQjBfQllQQVNTX1NIRgkJOQorI2RlZmluZSBHVF9TRFJBTV9CMF9CWVBBU1NfTVNLCQkoTVNLKDEpIDw8IEdUX1NEUkFNX0IwX0JZUEFTU19TSEYpCisjZGVmaW5lIEdUX1NEUkFNX0IwX0JZUEFTU19CSVQJCUdUX1NEUkFNX0IwX0JZUEFTU19NU0sKKworI2RlZmluZSBHVF9TRFJBTV9CMF9TUkFTMlNDQVNfU0hGCTEwCisjZGVmaW5lIEdUX1NEUkFNX0IwX1NSQVMyU0NBU19NU0sJKE1TSygxKSA8PCBHVF9TRFJBTV9CMF9TUkFTMlNDQVNfU0hGKQorI2RlZmluZSBHVF9TRFJBTV9CMF9TUkFTMlNDQVNfQklUCUdUX1NEUkFNX0IwX1NSQVMyU0NBU19NU0sKKyNkZWZpbmUgR1RfU0RSQU1fQjBfU1JBUzJTQ0FTXzIJCTAKKyNkZWZpbmUgR1RfU0RSQU1fQjBfU1JBUzJTQ0FTXzMJCTEKKworI2RlZmluZSBHVF9TRFJBTV9CMF9TSVpFX1NIRgkJMTEKKyNkZWZpbmUgR1RfU0RSQU1fQjBfU0laRV9NU0sJCShNU0soMSkgPDwgR1RfU0RSQU1fQjBfU0laRV9TSEYpCisjZGVmaW5lIEdUX1NEUkFNX0IwX1NJWkVfQklUCQlHVF9TRFJBTV9CMF9TSVpFX01TSworI2RlZmluZSBHVF9TRFJBTV9CMF9TSVpFXzE2TQkJMAorI2RlZmluZSBHVF9TRFJBTV9CMF9TSVpFXzY0TQkJMQorCisjZGVmaW5lIEdUX1NEUkFNX0IwX0VYVFBBUl9TSEYJCTEyCisjZGVmaW5lIEdUX1NEUkFNX0IwX0VYVFBBUl9NU0sJCShNU0soMSkgPDwgR1RfU0RSQU1fQjBfRVhUUEFSX1NIRikKKyNkZWZpbmUgR1RfU0RSQU1fQjBfRVhUUEFSX0JJVAkJR1RfU0RSQU1fQjBfRVhUUEFSX01TSworCisjZGVmaW5lIEdUX1NEUkFNX0IwX0JMRU5fU0hGCQkxMworI2RlZmluZSBHVF9TRFJBTV9CMF9CTEVOX01TSwkJKE1TSygxKSA8PCBHVF9TRFJBTV9CMF9CTEVOX1NIRikKKyNkZWZpbmUgR1RfU0RSQU1fQjBfQkxFTl9CSVQJCUdUX1NEUkFNX0IwX0JMRU5fTVNLCisjZGVmaW5lIEdUX1NEUkFNX0IwX0JMRU5fOAkJMAorI2RlZmluZSBHVF9TRFJBTV9CMF9CTEVOXzQJCTEKKworCisjZGVmaW5lIEdUX1NEUkFNX0NGR19SRUZJTlRfU0hGCQkwCisjZGVmaW5lIEdUX1NEUkFNX0NGR19SRUZJTlRfTVNLCQkoTVNLKDE0KSA8PCBHVF9TRFJBTV9DRkdfUkVGSU5UX1NIRikKKworI2RlZmluZSBHVF9TRFJBTV9DRkdfTklOVEVSTEVBVkVfU0hGCTE0CisjZGVmaW5lIEdUX1NEUkFNX0NGR19OSU5URVJMRUFWRV9NU0sJKE1TSygxKSA8PCBHVF9TRFJBTV9DRkdfTklOVEVSTEVBVkVfU0hGKQorI2RlZmluZSBHVF9TRFJBTV9DRkdfTklOVEVSTEVBVkVfQklUCUdUX1NEUkFNX0NGR19OSU5URVJMRUFWRV9NU0sKKworI2RlZmluZSBHVF9TRFJBTV9DRkdfUk1XX1NIRgkJMTUKKyNkZWZpbmUgR1RfU0RSQU1fQ0ZHX1JNV19NU0sJCShNU0soMSkgPDwgR1RfU0RSQU1fQ0ZHX1JNV19TSEYpCisjZGVmaW5lIEdUX1NEUkFNX0NGR19STVdfQklUCQlHVF9TRFJBTV9DRkdfUk1XX01TSworCisjZGVmaW5lIEdUX1NEUkFNX0NGR19OT05TVEFHUkVGX1NIRgkxNgorI2RlZmluZSBHVF9TRFJBTV9DRkdfTk9OU1RBR1JFRl9NU0sJKE1TSygxKSA8PCBHVF9TRFJBTV9DRkdfTk9OU1RBR1JFRl9TSEYpCisjZGVmaW5lIEdUX1NEUkFNX0NGR19OT05TVEFHUkVGX0JJVAlHVF9TRFJBTV9DRkdfTk9OU1RBR1JFRl9NU0sKKworI2RlZmluZSBHVF9TRFJBTV9DRkdfRFVQQ05UTF9TSEYJMTkKKyNkZWZpbmUgR1RfU0RSQU1fQ0ZHX0RVUENOVExfTVNLCShNU0soMSkgPDwgR1RfU0RSQU1fQ0ZHX0RVUENOVExfU0hGKQorI2RlZmluZSBHVF9TRFJBTV9DRkdfRFVQQ05UTF9CSVQJR1RfU0RSQU1fQ0ZHX0RVUENOVExfTVNLCisKKyNkZWZpbmUgR1RfU0RSQU1fQ0ZHX0RVUEJBX1NIRgkJMjAKKyNkZWZpbmUgR1RfU0RSQU1fQ0ZHX0RVUEJBX01TSwkJKE1TSygxKSA8PCBHVF9TRFJBTV9DRkdfRFVQQkFfU0hGKQorI2RlZmluZSBHVF9TRFJBTV9DRkdfRFVQQkFfQklUCQlHVF9TRFJBTV9DRkdfRFVQQkFfTVNLCisKKyNkZWZpbmUgR1RfU0RSQU1fQ0ZHX0RVUEVPVDBfU0hGCTIxCisjZGVmaW5lIEdUX1NEUkFNX0NGR19EVVBFT1QwX01TSwkoTVNLKDEpIDw8IEdUX1NEUkFNX0NGR19EVVBFT1QwX1NIRikKKyNkZWZpbmUgR1RfU0RSQU1fQ0ZHX0RVUEVPVDBfQklUCUdUX1NEUkFNX0NGR19EVVBFT1QwX01TSworCisjZGVmaW5lIEdUX1NEUkFNX0NGR19EVVBFT1QxX1NIRgkyMgorI2RlZmluZSBHVF9TRFJBTV9DRkdfRFVQRU9UMV9NU0sJKE1TSygxKSA8PCBHVF9TRFJBTV9DRkdfRFVQRU9UMV9TSEYpCisjZGVmaW5lIEdUX1NEUkFNX0NGR19EVVBFT1QxX0JJVAlHVF9TRFJBTV9DRkdfRFVQRU9UMV9NU0sKKworI2RlZmluZSBHVF9TRFJBTV9PUE1PREVfT1BfU0hGCQkwCisjZGVmaW5lIEdUX1NEUkFNX09QTU9ERV9PUF9NU0sJCShNU0soMykgPDwgR1RfU0RSQU1fT1BNT0RFX09QX1NIRikKKyNkZWZpbmUgR1RfU0RSQU1fT1BNT0RFX09QX05PUk1BTAkwCisjZGVmaW5lIEdUX1NEUkFNX09QTU9ERV9PUF9OT1AJCTEKKyNkZWZpbmUgR1RfU0RSQU1fT1BNT0RFX09QX1BSQ0hHCTIKKyNkZWZpbmUgR1RfU0RSQU1fT1BNT0RFX09QX01PREUJCTMKKyNkZWZpbmUgR1RfU0RSQU1fT1BNT0RFX09QX0NCUgkJNAorCisKKyNkZWZpbmUgR1RfUENJMF9CQVJFX1NXU0NTM0JPT1RESVNfU0hGCTAKKyNkZWZpbmUgR1RfUENJMF9CQVJFX1NXU0NTM0JPT1RESVNfTVNLCShNU0soMSkgPDwgR1RfUENJMF9CQVJFX1NXU0NTM0JPT1RESVNfU0hGKQorI2RlZmluZSBHVF9QQ0kwX0JBUkVfU1dTQ1MzQk9PVERJU19CSVQJR1RfUENJMF9CQVJFX1NXU0NTM0JPT1RESVNfTVNLCisKKyNkZWZpbmUgR1RfUENJMF9CQVJFX1NXU0NTMzJESVNfU0hGCTEKKyNkZWZpbmUgR1RfUENJMF9CQVJFX1NXU0NTMzJESVNfTVNLCShNU0soMSkgPDwgR1RfUENJMF9CQVJFX1NXU0NTMzJESVNfU0hGKQorI2RlZmluZSBHVF9QQ0kwX0JBUkVfU1dTQ1MzMkRJU19CSVQJR1RfUENJMF9CQVJFX1NXU0NTMzJESVNfTVNLCisKKyNkZWZpbmUgR1RfUENJMF9CQVJFX1NXU0NTMTBESVNfU0hGCTIKKyNkZWZpbmUgR1RfUENJMF9CQVJFX1NXU0NTMTBESVNfTVNLCShNU0soMSkgPDwgR1RfUENJMF9CQVJFX1NXU0NTMTBESVNfU0hGKQorI2RlZmluZSBHVF9QQ0kwX0JBUkVfU1dTQ1MxMERJU19CSVQJR1RfUENJMF9CQVJFX1NXU0NTMTBESVNfTVNLCisKKyNkZWZpbmUgR1RfUENJMF9CQVJFX0lOVElPRElTX1NIRgkzCisjZGVmaW5lIEdUX1BDSTBfQkFSRV9JTlRJT0RJU19NU0sJKE1TSygxKSA8PCBHVF9QQ0kwX0JBUkVfSU5USU9ESVNfU0hGKQorI2RlZmluZSBHVF9QQ0kwX0JBUkVfSU5USU9ESVNfQklUCUdUX1BDSTBfQkFSRV9JTlRJT0RJU19NU0sKKworI2RlZmluZSBHVF9QQ0kwX0JBUkVfSU5UTUVNRElTX1NIRgk0CisjZGVmaW5lIEdUX1BDSTBfQkFSRV9JTlRNRU1ESVNfTVNLCShNU0soMSkgPDwgR1RfUENJMF9CQVJFX0lOVE1FTURJU19TSEYpCisjZGVmaW5lIEdUX1BDSTBfQkFSRV9JTlRNRU1ESVNfQklUCUdUX1BDSTBfQkFSRV9JTlRNRU1ESVNfTVNLCisKKyNkZWZpbmUgR1RfUENJMF9CQVJFX0NTM0JPT1RESVNfU0hGCTUKKyNkZWZpbmUgR1RfUENJMF9CQVJFX0NTM0JPT1RESVNfTVNLCShNU0soMSkgPDwgR1RfUENJMF9CQVJFX0NTM0JPT1RESVNfU0hGKQorI2RlZmluZSBHVF9QQ0kwX0JBUkVfQ1MzQk9PVERJU19CSVQJR1RfUENJMF9CQVJFX0NTM0JPT1RESVNfTVNLCisKKyNkZWZpbmUgR1RfUENJMF9CQVJFX0NTMjBESVNfU0hGCTYKKyNkZWZpbmUgR1RfUENJMF9CQVJFX0NTMjBESVNfTVNLCShNU0soMSkgPDwgR1RfUENJMF9CQVJFX0NTMjBESVNfU0hGKQorI2RlZmluZSBHVF9QQ0kwX0JBUkVfQ1MyMERJU19CSVQJR1RfUENJMF9CQVJFX0NTMjBESVNfTVNLCisKKyNkZWZpbmUgR1RfUENJMF9CQVJFX1NDUzMyRElTX1NIRgk3CisjZGVmaW5lIEdUX1BDSTBfQkFSRV9TQ1MzMkRJU19NU0sJKE1TSygxKSA8PCBHVF9QQ0kwX0JBUkVfU0NTMzJESVNfU0hGKQorI2RlZmluZSBHVF9QQ0kwX0JBUkVfU0NTMzJESVNfQklUCUdUX1BDSTBfQkFSRV9TQ1MzMkRJU19NU0sKKworI2RlZmluZSBHVF9QQ0kwX0JBUkVfU0NTMTBESVNfU0hGCTgKKyNkZWZpbmUgR1RfUENJMF9CQVJFX1NDUzEwRElTX01TSwkoTVNLKDEpIDw8IEdUX1BDSTBfQkFSRV9TQ1MxMERJU19TSEYpCisjZGVmaW5lIEdUX1BDSTBfQkFSRV9TQ1MxMERJU19CSVQJR1RfUENJMF9CQVJFX1NDUzEwRElTX01TSworCisKKyNkZWZpbmUgR1RfSU5UUkNBVVNFX01BU0FCT1JUMF9TSEYJMTgKKyNkZWZpbmUgR1RfSU5UUkNBVVNFX01BU0FCT1JUMF9NU0sJKE1TSygxKSA8PCBHVF9JTlRSQ0FVU0VfTUFTQUJPUlQwX1NIRikKKyNkZWZpbmUgR1RfSU5UUkNBVVNFX01BU0FCT1JUMF9CSVQJR1RfSU5UUkNBVVNFX01BU0FCT1JUMF9NU0sKKworI2RlZmluZSBHVF9JTlRSQ0FVU0VfVEFSQUJPUlQwX1NIRgkxOQorI2RlZmluZSBHVF9JTlRSQ0FVU0VfVEFSQUJPUlQwX01TSwkoTVNLKDEpIDw8IEdUX0lOVFJDQVVTRV9UQVJBQk9SVDBfU0hGKQorI2RlZmluZSBHVF9JTlRSQ0FVU0VfVEFSQUJPUlQwX0JJVAlHVF9JTlRSQ0FVU0VfVEFSQUJPUlQwX01TSworCisKKyNkZWZpbmUgR1RfUENJMF9DRkdBRERSX1JFR05VTV9TSEYJMgorI2RlZmluZSBHVF9QQ0kwX0NGR0FERFJfUkVHTlVNX01TSwkoTVNLKDYpIDw8IEdUX1BDSTBfQ0ZHQUREUl9SRUdOVU1fU0hGKQorI2RlZmluZSBHVF9QQ0kwX0NGR0FERFJfRlVOQ1ROVU1fU0hGCTgKKyNkZWZpbmUgR1RfUENJMF9DRkdBRERSX0ZVTkNUTlVNX01TSwkoTVNLKDMpIDw8IEdUX1BDSTBfQ0ZHQUREUl9GVU5DVE5VTV9TSEYpCisjZGVmaW5lIEdUX1BDSTBfQ0ZHQUREUl9ERVZOVU1fU0hGCTExCisjZGVmaW5lIEdUX1BDSTBfQ0ZHQUREUl9ERVZOVU1fTVNLCShNU0soNSkgPDwgR1RfUENJMF9DRkdBRERSX0RFVk5VTV9TSEYpCisjZGVmaW5lIEdUX1BDSTBfQ0ZHQUREUl9CVVNOVU1fU0hGCTE2CisjZGVmaW5lIEdUX1BDSTBfQ0ZHQUREUl9CVVNOVU1fTVNLCShNU0soOCkgPDwgR1RfUENJMF9DRkdBRERSX0JVU05VTV9TSEYpCisjZGVmaW5lIEdUX1BDSTBfQ0ZHQUREUl9DT05GSUdFTl9TSEYJMzEKKyNkZWZpbmUgR1RfUENJMF9DRkdBRERSX0NPTkZJR0VOX01TSwkoTVNLKDEpIDw8IEdUX1BDSTBfQ0ZHQUREUl9DT05GSUdFTl9TSEYpCisjZGVmaW5lIEdUX1BDSTBfQ0ZHQUREUl9DT05GSUdFTl9CSVQJR1RfUENJMF9DRkdBRERSX0NPTkZJR0VOX01TSworCisjZGVmaW5lIEdUX1BDSTBfQ01EX01CWVRFU1dBUF9TSEYJMAorI2RlZmluZSBHVF9QQ0kwX0NNRF9NQllURVNXQVBfTVNLCShNU0soMSkgPDwgR1RfUENJMF9DTURfTUJZVEVTV0FQX1NIRikKKyNkZWZpbmUgR1RfUENJMF9DTURfTUJZVEVTV0FQX0JJVAlHVF9QQ0kwX0NNRF9NQllURVNXQVBfTVNLCisjZGVmaW5lIEdUX1BDSTBfQ01EX01XT1JEU1dBUF9TSEYJMTAKKyNkZWZpbmUgR1RfUENJMF9DTURfTVdPUkRTV0FQX01TSwkoTVNLKDEpIDw8IEdUX1BDSTBfQ01EX01XT1JEU1dBUF9TSEYpCisjZGVmaW5lIEdUX1BDSTBfQ01EX01XT1JEU1dBUF9CSVQJR1RfUENJMF9DTURfTVdPUkRTV0FQX01TSworI2RlZmluZSBHVF9QQ0kwX0NNRF9TQllURVNXQVBfU0hGCTE2CisjZGVmaW5lIEdUX1BDSTBfQ01EX1NCWVRFU1dBUF9NU0sJKE1TSygxKSA8PCBHVF9QQ0kwX0NNRF9TQllURVNXQVBfU0hGKQorI2RlZmluZSBHVF9QQ0kwX0NNRF9TQllURVNXQVBfQklUCUdUX1BDSTBfQ01EX1NCWVRFU1dBUF9NU0sKKyNkZWZpbmUgR1RfUENJMF9DTURfU1dPUkRTV0FQX1NIRgkxMQorI2RlZmluZSBHVF9QQ0kwX0NNRF9TV09SRFNXQVBfTVNLCShNU0soMSkgPDwgR1RfUENJMF9DTURfU1dPUkRTV0FQX1NIRikKKyNkZWZpbmUgR1RfUENJMF9DTURfU1dPUkRTV0FQX0JJVAlHVF9QQ0kwX0NNRF9TV09SRFNXQVBfTVNLCisKKy8qCisgKiAgTWlzYworICovCisjZGVmaW5lIEdUX0RFRl9QQ0kwX0lPX0JBU0UJMHgxMDAwMDAwMFVMCisjZGVmaW5lIEdUX0RFRl9QQ0kwX0lPX1NJWkUJMHgwMjAwMDAwMFVMCisjZGVmaW5lIEdUX0RFRl9QQ0kwX01FTTBfQkFTRQkweDEyMDAwMDAwVUwKKyNkZWZpbmUgR1RfREVGX1BDSTBfTUVNMF9TSVpFCTB4MDIwMDAwMDBVTAorI2RlZmluZSBHVF9ERUZfQkFTRQkJMHgxNDAwMDAwMFVMCisKKyNkZWZpbmUgR1RfTUFYX0JBTktTSVpFCQkoMjU2ICogMTAyNCAqIDEwMjQpCS8qIE1heCAyNTZNQiBiYW5rICAqLworI2RlZmluZSBHVF9MQVRUSU1fTUlOCQk2CQkJLyogTWluaW11bSBsYXQgICovCisKKy8qCisgKiBUaGUgZ3Q2NDEyMF9kZXAuaCBmaWxlIG11c3QgZGVmaW5lIHRoZSBmb2xsb3dpbmcgbWFjcm9zCisgKgorICogICBHVF9SRUFEKG9mcywgZGF0YV9wb2ludGVyKQorICogICBHVF9XUklURShvZnMsIGRhdGEpICAgICAgICAgICAtIHJlYWQvd3JpdGUgR1Q2NDEyMCByZWdpc3RlcnMgaW4gMzJiaXQKKyAqCisgKiAgIFRJTUVSIAktIGd0NjQxMjAgdGltZXIgaXJxLCB0ZW1wb3Jhcnkgc29sdXRpb24gdW50aWwKKyAqCQkgIGZ1bGwgZ3Q2NDEyMCBjYXNjYWRlIGludGVycnVwdCBzdXBwb3J0IGlzIGluIHBsYWNlCisgKi8KKworI2luY2x1ZGUgPG1hY2gtZ3Q2NDEyMC5oPgorCisvKgorICogQmVjYXVzZSBvZiBhbiBlcnJvci9wZWN1bGlhcml0eSBpbiB0aGUgR2FsaWxlbyBjaGlwLCB3ZSBuZWVkIHRvIHN3YXAgdGhlCisgKiBieXRlcyB3aGVuIHJ1bm5pbmcgYmlnZW5kaWFuLiAgV2UgYWxzbyBwcm92aWRlIG5vbi1zd2FwcGluZyB2ZXJzaW9ucy4KKyAqLworI2RlZmluZSBfX0dUX1JFQUQob2ZzKQkJCQkJCQlcCisJKCoodm9sYXRpbGUgdTMyICopKEdUNjQxMjBfQkFTRSsob2ZzKSkpCisjZGVmaW5lIF9fR1RfV1JJVEUob2ZzLCBkYXRhKQkJCQkJCVwKKwlkbyB7ICoodm9sYXRpbGUgdTMyICopKEdUNjQxMjBfQkFTRSsob2ZzKSkgPSAoZGF0YSk7IH0gd2hpbGUgKDApCisjZGVmaW5lIEdUX1JFQUQob2ZzKQkJbGUzMl90b19jcHUoX19HVF9SRUFEKG9mcykpCisjZGVmaW5lIEdUX1dSSVRFKG9mcywgZGF0YSkJX19HVF9XUklURShvZnMsIGNwdV90b19sZTMyKGRhdGEpKQorCisjZW5kaWYgLyogX0FTTV9HVDY0MTIwX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvZ3Q2NDI0MC5oIGIvaW5jbHVkZS9hc20tbWlwcy9ndDY0MjQwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY5YmQzNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvZ3Q2NDI0MC5oCkBAIC0wLDAgKzEsMTIzNSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAtIEdhbGlsZW8gdGVjaG5vbG9neS4KKyAqIENvcHlyaWdodCAoQykgMjAwNCBieSBSYWxmIEJhZWNobGUKKyAqLworI2lmbmRlZiBfX0FTTV9NSVBTX01WNjQyNDBfSAorI2RlZmluZSBfX0FTTV9NSVBTX01WNjQyNDBfSAorCisjaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgorI2luY2x1ZGUgPGFzbS9tYXJ2ZWxsLmg+CisKKy8qCisgKiBDUFUgQ29udHJvbCBSZWdpc3RlcnMKKyAqLworCisjZGVmaW5lIENQVV9DT05GSUdVUkFUSU9OCQkJCQkweDAwMAorI2RlZmluZSBDUFVfTU9ERQkJCQkJCTB4MTIwCisjZGVmaW5lIENQVV9SRUFEX1JFU1BPTlNFX0NST1NTQkFSX0xPVwkJCQkweDE3MAorI2RlZmluZSBDUFVfUkVBRF9SRVNQT05TRV9DUk9TU0JBUl9ISUdICQkJCTB4MTc4CisKKy8qCisgKiBQcm9jZXNzb3IgQWRkcmVzcyBTcGFjZQorICovCisKKy8qIFNkcmFtJ3MgQkFSJ1MgKi8KKyNkZWZpbmUgU0NTXzBfTE9XX0RFQ09ERV9BRERSRVNTCQkJCTB4MDA4CisjZGVmaW5lIFNDU18wX0hJR0hfREVDT0RFX0FERFJFU1MJCQkJMHgwMTAKKyNkZWZpbmUgU0NTXzFfTE9XX0RFQ09ERV9BRERSRVNTCQkJCTB4MjA4CisjZGVmaW5lIFNDU18xX0hJR0hfREVDT0RFX0FERFJFU1MJCQkJMHgyMTAKKyNkZWZpbmUgU0NTXzJfTE9XX0RFQ09ERV9BRERSRVNTCQkJCTB4MDE4CisjZGVmaW5lIFNDU18yX0hJR0hfREVDT0RFX0FERFJFU1MJCQkJMHgwMjAKKyNkZWZpbmUgU0NTXzNfTE9XX0RFQ09ERV9BRERSRVNTCQkJCTB4MjE4CisjZGVmaW5lIFNDU18zX0hJR0hfREVDT0RFX0FERFJFU1MJCQkJMHgyMjAKKy8qIERldmljZXMgQkFSJ1MgKi8KKyNkZWZpbmUgQ1NfMF9MT1dfREVDT0RFX0FERFJFU1MJCQkJCTB4MDI4CisjZGVmaW5lIENTXzBfSElHSF9ERUNPREVfQUREUkVTUwkJCQkweDAzMAorI2RlZmluZSBDU18xX0xPV19ERUNPREVfQUREUkVTUwkJCQkJMHgyMjgKKyNkZWZpbmUgQ1NfMV9ISUdIX0RFQ09ERV9BRERSRVNTCQkJCTB4MjMwCisjZGVmaW5lIENTXzJfTE9XX0RFQ09ERV9BRERSRVNTCQkJCQkweDI0OAorI2RlZmluZSBDU18yX0hJR0hfREVDT0RFX0FERFJFU1MJCQkJMHgyNTAKKyNkZWZpbmUgQ1NfM19MT1dfREVDT0RFX0FERFJFU1MJCQkJCTB4MDM4CisjZGVmaW5lIENTXzNfSElHSF9ERUNPREVfQUREUkVTUwkJCQkweDA0MAorI2RlZmluZSBCT09UQ1NfTE9XX0RFQ09ERV9BRERSRVNTCQkJCTB4MjM4CisjZGVmaW5lIEJPT1RDU19ISUdIX0RFQ09ERV9BRERSRVNTCQkJCTB4MjQwCisKKyNkZWZpbmUgUENJXzBJX09fTE9XX0RFQ09ERV9BRERSRVNTCQkJCTB4MDQ4CisjZGVmaW5lIFBDSV8wSV9PX0hJR0hfREVDT0RFX0FERFJFU1MJCQkJMHgwNTAKKyNkZWZpbmUgUENJXzBNRU1PUlkwX0xPV19ERUNPREVfQUREUkVTUwkJCQkweDA1OAorI2RlZmluZSBQQ0lfME1FTU9SWTBfSElHSF9ERUNPREVfQUREUkVTUwkJCTB4MDYwCisjZGVmaW5lIFBDSV8wTUVNT1JZMV9MT1dfREVDT0RFX0FERFJFU1MJCQkJMHgwODAKKyNkZWZpbmUgUENJXzBNRU1PUlkxX0hJR0hfREVDT0RFX0FERFJFU1MJCQkweDA4OAorI2RlZmluZSBQQ0lfME1FTU9SWTJfTE9XX0RFQ09ERV9BRERSRVNTCQkJCTB4MjU4CisjZGVmaW5lIFBDSV8wTUVNT1JZMl9ISUdIX0RFQ09ERV9BRERSRVNTCQkJMHgyNjAKKyNkZWZpbmUgUENJXzBNRU1PUlkzX0xPV19ERUNPREVfQUREUkVTUwkJCQkweDI4MAorI2RlZmluZSBQQ0lfME1FTU9SWTNfSElHSF9ERUNPREVfQUREUkVTUwkJCTB4Mjg4CisKKyNkZWZpbmUgUENJXzFJX09fTE9XX0RFQ09ERV9BRERSRVNTCQkJCTB4MDkwCisjZGVmaW5lIFBDSV8xSV9PX0hJR0hfREVDT0RFX0FERFJFU1MJCQkJMHgwOTgKKyNkZWZpbmUgUENJXzFNRU1PUlkwX0xPV19ERUNPREVfQUREUkVTUwkJCQkweDBhMAorI2RlZmluZSBQQ0lfMU1FTU9SWTBfSElHSF9ERUNPREVfQUREUkVTUwkJCTB4MGE4CisjZGVmaW5lIFBDSV8xTUVNT1JZMV9MT1dfREVDT0RFX0FERFJFU1MJCQkJMHgwYjAKKyNkZWZpbmUgUENJXzFNRU1PUlkxX0hJR0hfREVDT0RFX0FERFJFU1MJCQkweDBiOAorI2RlZmluZSBQQ0lfMU1FTU9SWTJfTE9XX0RFQ09ERV9BRERSRVNTCQkJCTB4MmEwCisjZGVmaW5lIFBDSV8xTUVNT1JZMl9ISUdIX0RFQ09ERV9BRERSRVNTCQkJMHgyYTgKKyNkZWZpbmUgUENJXzFNRU1PUlkzX0xPV19ERUNPREVfQUREUkVTUwkJCQkweDJiMAorI2RlZmluZSBQQ0lfMU1FTU9SWTNfSElHSF9ERUNPREVfQUREUkVTUwkJCTB4MmI4CisKKyNkZWZpbmUgSU5URVJOQUxfU1BBQ0VfREVDT0RFCQkJCQkweDA2OAorCisjZGVmaW5lIENQVV8wX0xPV19ERUNPREVfQUREUkVTUwkJCQkweDI5MAorI2RlZmluZSBDUFVfMF9ISUdIX0RFQ09ERV9BRERSRVNTCQkJCTB4Mjk4CisjZGVmaW5lIENQVV8xX0xPV19ERUNPREVfQUREUkVTUwkJCQkweDJjMAorI2RlZmluZSBDUFVfMV9ISUdIX0RFQ09ERV9BRERSRVNTCQkJCTB4MmM4CisKKyNkZWZpbmUgUENJXzBJX09fQUREUkVTU19SRU1BUAkJCQkJMHgwZjAKKyNkZWZpbmUgUENJXzBNRU1PUlkwX0FERFJFU1NfUkVNQVAJCQkJMHgwZjgKKyNkZWZpbmUgUENJXzBNRU1PUlkwX0hJR0hfQUREUkVTU19SRU1BUAkJCQkweDMyMAorI2RlZmluZSBQQ0lfME1FTU9SWTFfQUREUkVTU19SRU1BUAkJCQkweDEwMAorI2RlZmluZSBQQ0lfME1FTU9SWTFfSElHSF9BRERSRVNTX1JFTUFQCQkJCTB4MzI4CisjZGVmaW5lIFBDSV8wTUVNT1JZMl9BRERSRVNTX1JFTUFQCQkJCTB4MmY4CisjZGVmaW5lIFBDSV8wTUVNT1JZMl9ISUdIX0FERFJFU1NfUkVNQVAJCQkJMHgzMzAKKyNkZWZpbmUgUENJXzBNRU1PUlkzX0FERFJFU1NfUkVNQVAJCQkJMHgzMDAKKyNkZWZpbmUgUENJXzBNRU1PUlkzX0hJR0hfQUREUkVTU19SRU1BUAkJCQkweDMzOAorCisjZGVmaW5lIFBDSV8xSV9PX0FERFJFU1NfUkVNQVAJCQkJCTB4MTA4CisjZGVmaW5lIFBDSV8xTUVNT1JZMF9BRERSRVNTX1JFTUFQCQkJCTB4MTEwCisjZGVmaW5lIFBDSV8xTUVNT1JZMF9ISUdIX0FERFJFU1NfUkVNQVAJCQkJMHgzNDAKKyNkZWZpbmUgUENJXzFNRU1PUlkxX0FERFJFU1NfUkVNQVAJCQkJMHgxMTgKKyNkZWZpbmUgUENJXzFNRU1PUlkxX0hJR0hfQUREUkVTU19SRU1BUAkJCQkweDM0OAorI2RlZmluZSBQQ0lfMU1FTU9SWTJfQUREUkVTU19SRU1BUAkJCQkweDMxMAorI2RlZmluZSBQQ0lfMU1FTU9SWTJfSElHSF9BRERSRVNTX1JFTUFQCQkJCTB4MzUwCisjZGVmaW5lIFBDSV8xTUVNT1JZM19BRERSRVNTX1JFTUFQCQkJCTB4MzE4CisjZGVmaW5lIFBDSV8xTUVNT1JZM19ISUdIX0FERFJFU1NfUkVNQVAJCQkJMHgzNTgKKworLyoKKyAqIENQVSBTeW5jIEJhcnJpZXIKKyAqLworCisjZGVmaW5lIFBDSV8wU1lOQ19CQVJJRVJfVklSVFVBTF9SRUdJU1RFUgkJCTB4MGMwCisjZGVmaW5lIFBDSV8xU1lOQ19CQVJJRVJfVklSVFVBTF9SRUdJU1RFUgkJCTB4MGM4CisKKworLyoKKyAqIENQVSBBY2Nlc3MgUHJvdGVjdAorICovCisKKyNkZWZpbmUgQ1BVX0xPV19QUk9URUNUX0FERFJFU1NfMAkJCQkwWDE4MAorI2RlZmluZSBDUFVfSElHSF9QUk9URUNUX0FERFJFU1NfMAkJCQkwWDE4OAorI2RlZmluZSBDUFVfTE9XX1BST1RFQ1RfQUREUkVTU18xCQkJCTBYMTkwCisjZGVmaW5lIENQVV9ISUdIX1BST1RFQ1RfQUREUkVTU18xCQkJCTBYMTk4CisjZGVmaW5lIENQVV9MT1dfUFJPVEVDVF9BRERSRVNTXzIJCQkJMFgxYTAKKyNkZWZpbmUgQ1BVX0hJR0hfUFJPVEVDVF9BRERSRVNTXzIJCQkJMFgxYTgKKyNkZWZpbmUgQ1BVX0xPV19QUk9URUNUX0FERFJFU1NfMwkJCQkwWDFiMAorI2RlZmluZSBDUFVfSElHSF9QUk9URUNUX0FERFJFU1NfMwkJCQkwWDFiOAorI2RlZmluZSBDUFVfTE9XX1BST1RFQ1RfQUREUkVTU180CQkJCTBYMWMwCisjZGVmaW5lIENQVV9ISUdIX1BST1RFQ1RfQUREUkVTU180CQkJCTBYMWM4CisjZGVmaW5lIENQVV9MT1dfUFJPVEVDVF9BRERSRVNTXzUJCQkJMFgxZDAKKyNkZWZpbmUgQ1BVX0hJR0hfUFJPVEVDVF9BRERSRVNTXzUJCQkJMFgxZDgKKyNkZWZpbmUgQ1BVX0xPV19QUk9URUNUX0FERFJFU1NfNgkJCQkwWDFlMAorI2RlZmluZSBDUFVfSElHSF9QUk9URUNUX0FERFJFU1NfNgkJCQkwWDFlOAorI2RlZmluZSBDUFVfTE9XX1BST1RFQ1RfQUREUkVTU183CQkJCTBYMWYwCisjZGVmaW5lIENQVV9ISUdIX1BST1RFQ1RfQUREUkVTU183CQkJCTBYMWY4CisKKworLyoKKyAqIFNub29wIENvbnRyb2wKKyAqLworCisjZGVmaW5lIFNOT09QX0JBU0VfQUREUkVTU18wCQkJCQkweDM4MAorI2RlZmluZSBTTk9PUF9UT1BfQUREUkVTU18wCQkJCQkweDM4OAorI2RlZmluZSBTTk9PUF9CQVNFX0FERFJFU1NfMQkJCQkJMHgzOTAKKyNkZWZpbmUgU05PT1BfVE9QX0FERFJFU1NfMQkJCQkJMHgzOTgKKyNkZWZpbmUgU05PT1BfQkFTRV9BRERSRVNTXzIJCQkJCTB4M2EwCisjZGVmaW5lIFNOT09QX1RPUF9BRERSRVNTXzIJCQkJCTB4M2E4CisjZGVmaW5lIFNOT09QX0JBU0VfQUREUkVTU18zCQkJCQkweDNiMAorI2RlZmluZSBTTk9PUF9UT1BfQUREUkVTU18zCQkJCQkweDNiOAorCisvKgorICogQ1BVIEVycm9yIFJlcG9ydAorICovCisKKyNkZWZpbmUgQ1BVX0VSUk9SX0FERFJFU1NfTE9XCQkJCQkweDA3MAorI2RlZmluZSBDUFVfRVJST1JfQUREUkVTU19ISUdICQkJCQkweDA3OAorI2RlZmluZSBDUFVfRVJST1JfREFUQV9MT1cJCQkJCTB4MTI4CisjZGVmaW5lIENQVV9FUlJPUl9EQVRBX0hJR0gJCQkJCTB4MTMwCisjZGVmaW5lIENQVV9FUlJPUl9QQVJJVFkJCQkJCTB4MTM4CisjZGVmaW5lIENQVV9FUlJPUl9DQVVTRQkJCQkJCTB4MTQwCisjZGVmaW5lIENQVV9FUlJPUl9NQVNLCQkJCQkJMHgxNDgKKworLyoKKyAqIFBzbGF2ZSBEZWJ1ZworICovCisKKyNkZWZpbmUgWF8wX0FERFJFU1MJCQkJCQkweDM2MAorI2RlZmluZSBYXzBfQ09NTUFORF9JRAkJCQkJCTB4MzY4CisjZGVmaW5lIFhfMV9BRERSRVNTCQkJCQkJMHgzNzAKKyNkZWZpbmUgWF8xX0NPTU1BTkRfSUQJCQkJCQkweDM3OAorI2RlZmluZSBXUklURV9EQVRBX0xPVwkJCQkJCTB4M2MwCisjZGVmaW5lIFdSSVRFX0RBVEFfSElHSAkJCQkJCTB4M2M4CisjZGVmaW5lIFdSSVRFX0JZVEVfRU5BQkxFCQkJCQkwWDNlMAorI2RlZmluZSBSRUFEX0RBVEFfTE9XCQkJCQkJMHgzZDAKKyNkZWZpbmUgUkVBRF9EQVRBX0hJR0gJCQkJCQkweDNkOAorI2RlZmluZSBSRUFEX0lECQkJCQkJCTB4M2U4CisKKworLyoKKyAqIFNEUkFNIGFuZCBEZXZpY2UgQWRkcmVzcyBTcGFjZQorICovCisKKworLyoKKyAqIFNEUkFNIENvbmZpZ3VyYXRpb24KKyAqLworCisjZGVmaW5lIFNEUkFNX0NPTkZJR1VSQVRJT04JCQkJCTB4NDQ4CisjZGVmaW5lIFNEUkFNX09QRVJBVElPTl9NT0RFCQkJCQkweDQ3NAorI2RlZmluZSBTRFJBTV9BRERSRVNTX0RFQ09ERQkJCQkJMHg0N0MKKyNkZWZpbmUgU0RSQU1fVElNSU5HX1BBUkFNRVRFUlMJCQkJCTB4NGI0CisjZGVmaW5lIFNEUkFNX1VNQV9DT05UUk9MCQkJCQkweDRhNAorI2RlZmluZSBTRFJBTV9DUk9TU19CQVJfQ09OVFJPTF9MT1cJCQkJMHg0YTgKKyNkZWZpbmUgU0RSQU1fQ1JPU1NfQkFSX0NPTlRST0xfSElHSAkJCQkweDRhYworI2RlZmluZSBTRFJBTV9DUk9TU19CQVJfVElNRU9VVAkJCQkJMHg0YjAKKworCisvKgorICogU0RSQU0gUGFyYW1ldGVycworICovCisKKyNkZWZpbmUgU0RSQU1fQkFOSzBQQVJBTUVURVJTCQkJCQkweDQ0QworI2RlZmluZSBTRFJBTV9CQU5LMVBBUkFNRVRFUlMJCQkJCTB4NDUwCisjZGVmaW5lIFNEUkFNX0JBTksyUEFSQU1FVEVSUwkJCQkJMHg0NTQKKyNkZWZpbmUgU0RSQU1fQkFOSzNQQVJBTUVURVJTCQkJCQkweDQ1OAorCisKKy8qCisgKiBTRFJBTSBFcnJvciBSZXBvcnQKKyAqLworCisjZGVmaW5lIFNEUkFNX0VSUk9SX0RBVEFfTE9XCQkJCQkweDQ4NAorI2RlZmluZSBTRFJBTV9FUlJPUl9EQVRBX0hJR0gJCQkJCTB4NDgwCisjZGVmaW5lIFNEUkFNX0FORF9ERVZJQ0VfRVJST1JfQUREUkVTUwkJCQkweDQ5MAorI2RlZmluZSBTRFJBTV9SRUNFSVZFRF9FQ0MJCQkJCTB4NDg4CisjZGVmaW5lIFNEUkFNX0NBTENVTEFURURfRUNDCQkJCQkweDQ4YworI2RlZmluZSBTRFJBTV9FQ0NfQ09OVFJPTAkJCQkJMHg0OTQKKyNkZWZpbmUgU0RSQU1fRUNDX0VSUk9SX0NPVU5URVIJCQkJCTB4NDk4CisKKworLyoKKyAqIFNEdW5pdCBEZWJ1ZyAoZm9yIGludGVybmFsIHVzZSkKKyAqLworCisjZGVmaW5lIFgwX0FERFJFU1MJCQkJCQkweDUwMAorI2RlZmluZSBYMF9DT01NQU5EX0FORF9JRAkJCQkJMHg1MDQKKyNkZWZpbmUgWDBfV1JJVEVfREFUQV9MT1cJCQkJCTB4NTA4CisjZGVmaW5lIFgwX1dSSVRFX0RBVEFfSElHSAkJCQkJMHg1MGMKKyNkZWZpbmUgWDBfV1JJVEVfQllURV9FTkFCTEUJCQkJCTB4NTE4CisjZGVmaW5lIFgwX1JFQURfREFUQV9MT1cJCQkJCTB4NTEwCisjZGVmaW5lIFgwX1JFQURfREFUQV9ISUdICQkJCQkweDUxNAorI2RlZmluZSBYMF9SRUFEX0lECQkJCQkJMHg1MWMKKyNkZWZpbmUgWDFfQUREUkVTUwkJCQkJCTB4NTIwCisjZGVmaW5lIFgxX0NPTU1BTkRfQU5EX0lECQkJCQkweDUyNAorI2RlZmluZSBYMV9XUklURV9EQVRBX0xPVwkJCQkJMHg1MjgKKyNkZWZpbmUgWDFfV1JJVEVfREFUQV9ISUdICQkJCQkweDUyYworI2RlZmluZSBYMV9XUklURV9CWVRFX0VOQUJMRQkJCQkJMHg1MzgKKyNkZWZpbmUgWDFfUkVBRF9EQVRBX0xPVwkJCQkJMHg1MzAKKyNkZWZpbmUgWDFfUkVBRF9EQVRBX0hJR0gJCQkJCTB4NTM0CisjZGVmaW5lIFgxX1JFQURfSUQJCQkJCQkweDUzYworI2RlZmluZSBYMF9TTk9PUF9BRERSRVNTCQkJCQkweDU0MAorI2RlZmluZSBYMF9TTk9PUF9DT01NQU5ECQkJCQkweDU0NAorI2RlZmluZSBYMV9TTk9PUF9BRERSRVNTCQkJCQkweDU0OAorI2RlZmluZSBYMV9TTk9PUF9DT01NQU5ECQkJCQkweDU0YworCisKKy8qCisgKiBEZXZpY2UgUGFyYW1ldGVycworICovCisKKyNkZWZpbmUgREVWSUNFX0JBTkswUEFSQU1FVEVSUwkJCQkJMHg0NWMKKyNkZWZpbmUgREVWSUNFX0JBTksxUEFSQU1FVEVSUwkJCQkJMHg0NjAKKyNkZWZpbmUgREVWSUNFX0JBTksyUEFSQU1FVEVSUwkJCQkJMHg0NjQKKyNkZWZpbmUgREVWSUNFX0JBTkszUEFSQU1FVEVSUwkJCQkJMHg0NjgKKyNkZWZpbmUgREVWSUNFX0JPT1RfQkFOS19QQVJBTUVURVJTCQkJCTB4NDZjCisjZGVmaW5lIERFVklDRV9DT05UUk9MCQkJCQkJMHg0YzAKKyNkZWZpbmUgREVWSUNFX0NST1NTX0JBUl9DT05UUk9MX0xPVwkJCQkweDRjOAorI2RlZmluZSBERVZJQ0VfQ1JPU1NfQkFSX0NPTlRST0xfSElHSAkJCQkweDRjYworI2RlZmluZSBERVZJQ0VfQ1JPU1NfQkFSX1RJTUVPVVQJCQkJMHg0YzQKKworCisvKgorICogRGV2aWNlIEludGVycnVwdAorICovCisKKyNkZWZpbmUgREVWSUNFX0lOVEVSUlVQVF9DQVVTRQkJCQkJMHg0ZDAKKyNkZWZpbmUgREVWSUNFX0lOVEVSUlVQVF9NQVNLCQkJCQkweDRkNAorI2RlZmluZSBERVZJQ0VfRVJST1JfQUREUkVTUwkJCQkJMHg0ZDgKKworLyoKKyAqIERNQSBSZWNvcmQKKyAqLworCisjZGVmaW5lIENIQU5ORUwwX0RNQV9CWVRFX0NPVU5UCQkJCQkweDgwMAorI2RlZmluZSBDSEFOTkVMMV9ETUFfQllURV9DT1VOVAkJCQkJMHg4MDQKKyNkZWZpbmUgQ0hBTk5FTDJfRE1BX0JZVEVfQ09VTlQJCQkJCTB4ODA4CisjZGVmaW5lIENIQU5ORUwzX0RNQV9CWVRFX0NPVU5UCQkJCQkweDgwQworI2RlZmluZSBDSEFOTkVMNF9ETUFfQllURV9DT1VOVAkJCQkJMHg5MDAKKyNkZWZpbmUgQ0hBTk5FTDVfRE1BX0JZVEVfQ09VTlQJCQkJCTB4OTA0CisjZGVmaW5lIENIQU5ORUw2X0RNQV9CWVRFX0NPVU5UCQkJCQkweDkwOAorI2RlZmluZSBDSEFOTkVMN19ETUFfQllURV9DT1VOVAkJCQkJMHg5MEMKKyNkZWZpbmUgQ0hBTk5FTDBfRE1BX1NPVVJDRV9BRERSRVNTCQkJCTB4ODEwCisjZGVmaW5lIENIQU5ORUwxX0RNQV9TT1VSQ0VfQUREUkVTUwkJCQkweDgxNAorI2RlZmluZSBDSEFOTkVMMl9ETUFfU09VUkNFX0FERFJFU1MJCQkJMHg4MTgKKyNkZWZpbmUgQ0hBTk5FTDNfRE1BX1NPVVJDRV9BRERSRVNTCQkJCTB4ODFDCisjZGVmaW5lIENIQU5ORUw0X0RNQV9TT1VSQ0VfQUREUkVTUwkJCQkweDkxMAorI2RlZmluZSBDSEFOTkVMNV9ETUFfU09VUkNFX0FERFJFU1MJCQkJMHg5MTQKKyNkZWZpbmUgQ0hBTk5FTDZfRE1BX1NPVVJDRV9BRERSRVNTCQkJCTB4OTE4CisjZGVmaW5lIENIQU5ORUw3X0RNQV9TT1VSQ0VfQUREUkVTUwkJCQkweDkxQworI2RlZmluZSBDSEFOTkVMMF9ETUFfREVTVElOQVRJT05fQUREUkVTUwkJCTB4ODIwCisjZGVmaW5lIENIQU5ORUwxX0RNQV9ERVNUSU5BVElPTl9BRERSRVNTCQkJMHg4MjQKKyNkZWZpbmUgQ0hBTk5FTDJfRE1BX0RFU1RJTkFUSU9OX0FERFJFU1MJCQkweDgyOAorI2RlZmluZSBDSEFOTkVMM19ETUFfREVTVElOQVRJT05fQUREUkVTUwkJCTB4ODJDCisjZGVmaW5lIENIQU5ORUw0X0RNQV9ERVNUSU5BVElPTl9BRERSRVNTCQkJMHg5MjAKKyNkZWZpbmUgQ0hBTk5FTDVfRE1BX0RFU1RJTkFUSU9OX0FERFJFU1MJCQkweDkyNAorI2RlZmluZSBDSEFOTkVMNl9ETUFfREVTVElOQVRJT05fQUREUkVTUwkJCTB4OTI4CisjZGVmaW5lIENIQU5ORUw3X0RNQV9ERVNUSU5BVElPTl9BRERSRVNTCQkJMHg5MkMKKyNkZWZpbmUgQ0hBTk5FTDBORVhUX1JFQ09SRF9QT0lOVEVSCQkJCTB4ODMwCisjZGVmaW5lIENIQU5ORUwxTkVYVF9SRUNPUkRfUE9JTlRFUgkJCQkweDgzNAorI2RlZmluZSBDSEFOTkVMMk5FWFRfUkVDT1JEX1BPSU5URVIJCQkJMHg4MzgKKyNkZWZpbmUgQ0hBTk5FTDNORVhUX1JFQ09SRF9QT0lOVEVSCQkJCTB4ODNDCisjZGVmaW5lIENIQU5ORUw0TkVYVF9SRUNPUkRfUE9JTlRFUgkJCQkweDkzMAorI2RlZmluZSBDSEFOTkVMNU5FWFRfUkVDT1JEX1BPSU5URVIJCQkJMHg5MzQKKyNkZWZpbmUgQ0hBTk5FTDZORVhUX1JFQ09SRF9QT0lOVEVSCQkJCTB4OTM4CisjZGVmaW5lIENIQU5ORUw3TkVYVF9SRUNPUkRfUE9JTlRFUgkJCQkweDkzQworI2RlZmluZSBDSEFOTkVMMENVUlJFTlRfREVTQ1JJUFRPUl9QT0lOVEVSCQkJMHg4NzAKKyNkZWZpbmUgQ0hBTk5FTDFDVVJSRU5UX0RFU0NSSVBUT1JfUE9JTlRFUgkJCTB4ODc0CisjZGVmaW5lIENIQU5ORUwyQ1VSUkVOVF9ERVNDUklQVE9SX1BPSU5URVIJCQkweDg3OAorI2RlZmluZSBDSEFOTkVMM0NVUlJFTlRfREVTQ1JJUFRPUl9QT0lOVEVSCQkJMHg4N0MKKyNkZWZpbmUgQ0hBTk5FTDRDVVJSRU5UX0RFU0NSSVBUT1JfUE9JTlRFUgkJCTB4OTcwCisjZGVmaW5lIENIQU5ORUw1Q1VSUkVOVF9ERVNDUklQVE9SX1BPSU5URVIJCQkweDk3NAorI2RlZmluZSBDSEFOTkVMNkNVUlJFTlRfREVTQ1JJUFRPUl9QT0lOVEVSCQkJMHg5NzgKKyNkZWZpbmUgQ0hBTk5FTDdDVVJSRU5UX0RFU0NSSVBUT1JfUE9JTlRFUgkJCTB4OTdDCisjZGVmaW5lIENIQU5ORUwwX0RNQV9TT1VSQ0VfSElHSF9QQ0lfQUREUkVTUwkJCTB4ODkwCisjZGVmaW5lIENIQU5ORUwxX0RNQV9TT1VSQ0VfSElHSF9QQ0lfQUREUkVTUwkJCTB4ODk0CisjZGVmaW5lIENIQU5ORUwyX0RNQV9TT1VSQ0VfSElHSF9QQ0lfQUREUkVTUwkJCTB4ODk4CisjZGVmaW5lIENIQU5ORUwzX0RNQV9TT1VSQ0VfSElHSF9QQ0lfQUREUkVTUwkJCTB4ODljCisjZGVmaW5lIENIQU5ORUw0X0RNQV9TT1VSQ0VfSElHSF9QQ0lfQUREUkVTUwkJCTB4OTkwCisjZGVmaW5lIENIQU5ORUw1X0RNQV9TT1VSQ0VfSElHSF9QQ0lfQUREUkVTUwkJCTB4OTk0CisjZGVmaW5lIENIQU5ORUw2X0RNQV9TT1VSQ0VfSElHSF9QQ0lfQUREUkVTUwkJCTB4OTk4CisjZGVmaW5lIENIQU5ORUw3X0RNQV9TT1VSQ0VfSElHSF9QQ0lfQUREUkVTUwkJCTB4OTljCisjZGVmaW5lIENIQU5ORUwwX0RNQV9ERVNUSU5BVElPTl9ISUdIX1BDSV9BRERSRVNTCQkweDhhMAorI2RlZmluZSBDSEFOTkVMMV9ETUFfREVTVElOQVRJT05fSElHSF9QQ0lfQUREUkVTUwkJMHg4YTQKKyNkZWZpbmUgQ0hBTk5FTDJfRE1BX0RFU1RJTkFUSU9OX0hJR0hfUENJX0FERFJFU1MJCTB4OGE4CisjZGVmaW5lIENIQU5ORUwzX0RNQV9ERVNUSU5BVElPTl9ISUdIX1BDSV9BRERSRVNTCQkweDhhYworI2RlZmluZSBDSEFOTkVMNF9ETUFfREVTVElOQVRJT05fSElHSF9QQ0lfQUREUkVTUwkJMHg5YTAKKyNkZWZpbmUgQ0hBTk5FTDVfRE1BX0RFU1RJTkFUSU9OX0hJR0hfUENJX0FERFJFU1MJCTB4OWE0CisjZGVmaW5lIENIQU5ORUw2X0RNQV9ERVNUSU5BVElPTl9ISUdIX1BDSV9BRERSRVNTCQkweDlhOAorI2RlZmluZSBDSEFOTkVMN19ETUFfREVTVElOQVRJT05fSElHSF9QQ0lfQUREUkVTUwkJMHg5YWMKKyNkZWZpbmUgQ0hBTk5FTDBfRE1BX05FWFRfUkVDT1JEX1BPSU5URVJfSElHSF9QQ0lfQUREUkVTUwkweDhiMAorI2RlZmluZSBDSEFOTkVMMV9ETUFfTkVYVF9SRUNPUkRfUE9JTlRFUl9ISUdIX1BDSV9BRERSRVNTCTB4OGI0CisjZGVmaW5lIENIQU5ORUwyX0RNQV9ORVhUX1JFQ09SRF9QT0lOVEVSX0hJR0hfUENJX0FERFJFU1MJMHg4YjgKKyNkZWZpbmUgQ0hBTk5FTDNfRE1BX05FWFRfUkVDT1JEX1BPSU5URVJfSElHSF9QQ0lfQUREUkVTUwkweDhiYworI2RlZmluZSBDSEFOTkVMNF9ETUFfTkVYVF9SRUNPUkRfUE9JTlRFUl9ISUdIX1BDSV9BRERSRVNTCTB4OWIwCisjZGVmaW5lIENIQU5ORUw1X0RNQV9ORVhUX1JFQ09SRF9QT0lOVEVSX0hJR0hfUENJX0FERFJFU1MJMHg5YjQKKyNkZWZpbmUgQ0hBTk5FTDZfRE1BX05FWFRfUkVDT1JEX1BPSU5URVJfSElHSF9QQ0lfQUREUkVTUwkweDliOAorI2RlZmluZSBDSEFOTkVMN19ETUFfTkVYVF9SRUNPUkRfUE9JTlRFUl9ISUdIX1BDSV9BRERSRVNTCTB4OWJjCisKKy8qCisgKiBETUEgQ2hhbm5lbCBDb250cm9sCisgKi8KKworI2RlZmluZSBDSEFOTkVMMENPTlRST0wJCQkJCQkweDg0MAorI2RlZmluZSBDSEFOTkVMMENPTlRST0xfSElHSAkJCQkJMHg4ODAKKworI2RlZmluZSBDSEFOTkVMMUNPTlRST0wJCQkJCQkweDg0NAorI2RlZmluZSBDSEFOTkVMMUNPTlRST0xfSElHSAkJCQkJMHg4ODQKKworI2RlZmluZSBDSEFOTkVMMkNPTlRST0wJCQkJCQkweDg0OAorI2RlZmluZSBDSEFOTkVMMkNPTlRST0xfSElHSAkJCQkJMHg4ODgKKworI2RlZmluZSBDSEFOTkVMM0NPTlRST0wJCQkJCQkweDg0QworI2RlZmluZSBDSEFOTkVMM0NPTlRST0xfSElHSAkJCQkJMHg4OEMKKworI2RlZmluZSBDSEFOTkVMNENPTlRST0wJCQkJCQkweDk0MAorI2RlZmluZSBDSEFOTkVMNENPTlRST0xfSElHSAkJCQkJMHg5ODAKKworI2RlZmluZSBDSEFOTkVMNUNPTlRST0wJCQkJCQkweDk0NAorI2RlZmluZSBDSEFOTkVMNUNPTlRST0xfSElHSAkJCQkJMHg5ODQKKworI2RlZmluZSBDSEFOTkVMNkNPTlRST0wJCQkJCQkweDk0OAorI2RlZmluZSBDSEFOTkVMNkNPTlRST0xfSElHSAkJCQkJMHg5ODgKKworI2RlZmluZSBDSEFOTkVMN0NPTlRST0wJCQkJCQkweDk0QworI2RlZmluZSBDSEFOTkVMN0NPTlRST0xfSElHSAkJCQkJMHg5OEMKKworCisvKgorICogRE1BIEFyYml0ZXIKKyAqLworCisjZGVmaW5lIEFSQklURVJfQ09OVFJPTF8wXzMJCQkJCTB4ODYwCisjZGVmaW5lIEFSQklURVJfQ09OVFJPTF80XzcJCQkJCTB4OTYwCisKKworLyoKKyAqIERNQSBJbnRlcnJ1cHQKKyAqLworCisjZGVmaW5lIENIQU5FTFMwXzNfSU5URVJSVVBUX0NBVVNFCQkJCTB4OGMwCisjZGVmaW5lIENIQU5FTFMwXzNfSU5URVJSVVBUX01BU0sJCQkJMHg4YzQKKyNkZWZpbmUgQ0hBTkVMUzBfM19FUlJPUl9BRERSRVNTCQkJCTB4OGM4CisjZGVmaW5lIENIQU5FTFMwXzNfRVJST1JfU0VMRUNUCQkJCQkweDhjYworI2RlZmluZSBDSEFORUxTNF83X0lOVEVSUlVQVF9DQVVTRQkJCQkweDljMAorI2RlZmluZSBDSEFORUxTNF83X0lOVEVSUlVQVF9NQVNLCQkJCTB4OWM0CisjZGVmaW5lIENIQU5FTFM0XzdfRVJST1JfQUREUkVTUwkJCQkweDljOAorI2RlZmluZSBDSEFORUxTNF83X0VSUk9SX1NFTEVDVAkJCQkJMHg5Y2MKKworCisvKgorICogRE1BIERlYnVnIChmb3IgaW50ZXJuYWwgdXNlKQorICovCisKKyNkZWZpbmUgRE1BX1gwX0FERFJFU1MJCQkJCQkweDhlMAorI2RlZmluZSBETUFfWDBfQ09NTUFORF9BTkRfSUQJCQkJCTB4OGU0CisjZGVmaW5lIERNQV9YMF9XUklURV9EQVRBX0xPVwkJCQkJMHg4ZTgKKyNkZWZpbmUgRE1BX1gwX1dSSVRFX0RBVEFfSElHSAkJCQkJMHg4ZWMKKyNkZWZpbmUgRE1BX1gwX1dSSVRFX0JZVEVfRU5BQkxFCQkJCTB4OGY4CisjZGVmaW5lIERNQV9YMF9SRUFEX0RBVEFfTE9XCQkJCQkweDhmMAorI2RlZmluZSBETUFfWDBfUkVBRF9EQVRBX0hJR0gJCQkJCTB4OGY0CisjZGVmaW5lIERNQV9YMF9SRUFEX0lECQkJCQkJMHg4ZmMKKyNkZWZpbmUgRE1BX1gxX0FERFJFU1MJCQkJCQkweDllMAorI2RlZmluZSBETUFfWDFfQ09NTUFORF9BTkRfSUQJCQkJCTB4OWU0CisjZGVmaW5lIERNQV9YMV9XUklURV9EQVRBX0xPVwkJCQkJMHg5ZTgKKyNkZWZpbmUgRE1BX1gxX1dSSVRFX0RBVEFfSElHSAkJCQkJMHg5ZWMKKyNkZWZpbmUgRE1BX1gxX1dSSVRFX0JZVEVfRU5BQkxFCQkJCTB4OWY4CisjZGVmaW5lIERNQV9YMV9SRUFEX0RBVEFfTE9XCQkJCQkweDlmMAorI2RlZmluZSBETUFfWDFfUkVBRF9EQVRBX0hJR0gJCQkJCTB4OWY0CisjZGVmaW5lIERNQV9YMV9SRUFEX0lECQkJCQkJMHg5ZmMKKworLyoKKyAqIFRpbWVyX0NvdW50ZXIKKyAqLworCisjZGVmaW5lIFRJTUVSX0NPVU5URVIwCQkJCQkJMHg4NTAKKyNkZWZpbmUgVElNRVJfQ09VTlRFUjEJCQkJCQkweDg1NAorI2RlZmluZSBUSU1FUl9DT1VOVEVSMgkJCQkJCTB4ODU4CisjZGVmaW5lIFRJTUVSX0NPVU5URVIzCQkJCQkJMHg4NUMKKyNkZWZpbmUgVElNRVJfQ09VTlRFUl8wXzNfQ09OVFJPTAkJCQkweDg2NAorI2RlZmluZSBUSU1FUl9DT1VOVEVSXzBfM19JTlRFUlJVUFRfQ0FVU0UJCQkweDg2OAorI2RlZmluZSBUSU1FUl9DT1VOVEVSXzBfM19JTlRFUlJVUFRfTUFTSwkJCTB4ODZjCisjZGVmaW5lIFRJTUVSX0NPVU5URVI0CQkJCQkJMHg5NTAKKyNkZWZpbmUgVElNRVJfQ09VTlRFUjUJCQkJCQkweDk1NAorI2RlZmluZSBUSU1FUl9DT1VOVEVSNgkJCQkJCTB4OTU4CisjZGVmaW5lIFRJTUVSX0NPVU5URVI3CQkJCQkJMHg5NUMKKyNkZWZpbmUgVElNRVJfQ09VTlRFUl80XzdfQ09OVFJPTAkJCQkweDk2NAorI2RlZmluZSBUSU1FUl9DT1VOVEVSXzRfN19JTlRFUlJVUFRfQ0FVU0UJCQkweDk2OAorI2RlZmluZSBUSU1FUl9DT1VOVEVSXzRfN19JTlRFUlJVUFRfTUFTSwkJCTB4OTZjCisKKy8qCisgKiBQQ0kgU2xhdmUgQWRkcmVzcyBEZWNvZGluZworICovCisKKyNkZWZpbmUgUENJXzBTQ1NfMF9CQU5LX1NJWkUJCQkJCTB4YzA4CisjZGVmaW5lIFBDSV8xU0NTXzBfQkFOS19TSVpFCQkJCQkweGM4OAorI2RlZmluZSBQQ0lfMFNDU18xX0JBTktfU0laRQkJCQkJMHhkMDgKKyNkZWZpbmUgUENJXzFTQ1NfMV9CQU5LX1NJWkUJCQkJCTB4ZDg4CisjZGVmaW5lIFBDSV8wU0NTXzJfQkFOS19TSVpFCQkJCQkweGMwYworI2RlZmluZSBQQ0lfMVNDU18yX0JBTktfU0laRQkJCQkJMHhjOGMKKyNkZWZpbmUgUENJXzBTQ1NfM19CQU5LX1NJWkUJCQkJCTB4ZDBjCisjZGVmaW5lIFBDSV8xU0NTXzNfQkFOS19TSVpFCQkJCQkweGQ4YworI2RlZmluZSBQQ0lfMENTXzBfQkFOS19TSVpFCQkJCQkweGMxMAorI2RlZmluZSBQQ0lfMUNTXzBfQkFOS19TSVpFCQkJCQkweGM5MAorI2RlZmluZSBQQ0lfMENTXzFfQkFOS19TSVpFCQkJCQkweGQxMAorI2RlZmluZSBQQ0lfMUNTXzFfQkFOS19TSVpFCQkJCQkweGQ5MAorI2RlZmluZSBQQ0lfMENTXzJfQkFOS19TSVpFCQkJCQkweGQxOAorI2RlZmluZSBQQ0lfMUNTXzJfQkFOS19TSVpFCQkJCQkweGQ5OAorI2RlZmluZSBQQ0lfMENTXzNfQkFOS19TSVpFCQkJCQkweGMxNAorI2RlZmluZSBQQ0lfMUNTXzNfQkFOS19TSVpFCQkJCQkweGM5NAorI2RlZmluZSBQQ0lfMENTX0JPT1RfQkFOS19TSVpFCQkJCQkweGQxNAorI2RlZmluZSBQQ0lfMUNTX0JPT1RfQkFOS19TSVpFCQkJCQkweGQ5NAorI2RlZmluZSBQQ0lfMFAyUF9NRU0wX0JBUl9TSVpFCQkJCQkweGQxYworI2RlZmluZSBQQ0lfMVAyUF9NRU0wX0JBUl9TSVpFCQkJCQkweGQ5YworI2RlZmluZSBQQ0lfMFAyUF9NRU0xX0JBUl9TSVpFCQkJCQkweGQyMAorI2RlZmluZSBQQ0lfMVAyUF9NRU0xX0JBUl9TSVpFCQkJCQkweGRhMAorI2RlZmluZSBQQ0lfMFAyUF9JX09fQkFSX1NJWkUJCQkJCTB4ZDI0CisjZGVmaW5lIFBDSV8xUDJQX0lfT19CQVJfU0laRQkJCQkJMHhkYTQKKyNkZWZpbmUgUENJXzBDUFVfQkFSX1NJWkUJCQkJCTB4ZDI4CisjZGVmaW5lIFBDSV8xQ1BVX0JBUl9TSVpFCQkJCQkweGRhOAorI2RlZmluZSBQQ0lfMERBQ19TQ1NfMF9CQU5LX1NJWkUJCQkJMHhlMDAKKyNkZWZpbmUgUENJXzFEQUNfU0NTXzBfQkFOS19TSVpFCQkJCTB4ZTgwCisjZGVmaW5lIFBDSV8wREFDX1NDU18xX0JBTktfU0laRQkJCQkweGUwNAorI2RlZmluZSBQQ0lfMURBQ19TQ1NfMV9CQU5LX1NJWkUJCQkJMHhlODQKKyNkZWZpbmUgUENJXzBEQUNfU0NTXzJfQkFOS19TSVpFCQkJCTB4ZTA4CisjZGVmaW5lIFBDSV8xREFDX1NDU18yX0JBTktfU0laRQkJCQkweGU4OAorI2RlZmluZSBQQ0lfMERBQ19TQ1NfM19CQU5LX1NJWkUJCQkJMHhlMGMKKyNkZWZpbmUgUENJXzFEQUNfU0NTXzNfQkFOS19TSVpFCQkJCTB4ZThjCisjZGVmaW5lIFBDSV8wREFDX0NTXzBfQkFOS19TSVpFCQkJCQkweGUxMAorI2RlZmluZSBQQ0lfMURBQ19DU18wX0JBTktfU0laRQkJCQkJMHhlOTAKKyNkZWZpbmUgUENJXzBEQUNfQ1NfMV9CQU5LX1NJWkUJCQkJCTB4ZTE0CisjZGVmaW5lIFBDSV8xREFDX0NTXzFfQkFOS19TSVpFCQkJCQkweGU5NAorI2RlZmluZSBQQ0lfMERBQ19DU18yX0JBTktfU0laRQkJCQkJMHhlMTgKKyNkZWZpbmUgUENJXzFEQUNfQ1NfMl9CQU5LX1NJWkUJCQkJCTB4ZTk4CisjZGVmaW5lIFBDSV8wREFDX0NTXzNfQkFOS19TSVpFCQkJCQkweGUxYworI2RlZmluZSBQQ0lfMURBQ19DU18zX0JBTktfU0laRQkJCQkJMHhlOWMKKyNkZWZpbmUgUENJXzBEQUNfQk9PVENTX0JBTktfU0laRQkJCQkweGUyMAorI2RlZmluZSBQQ0lfMURBQ19CT09UQ1NfQkFOS19TSVpFCQkJCTB4ZWEwCisjZGVmaW5lIFBDSV8wREFDX1AyUF9NRU0wX0JBUl9TSVpFCQkJCTB4ZTI0CisjZGVmaW5lIFBDSV8xREFDX1AyUF9NRU0wX0JBUl9TSVpFCQkJCTB4ZWE0CisjZGVmaW5lIFBDSV8wREFDX1AyUF9NRU0xX0JBUl9TSVpFCQkJCTB4ZTI4CisjZGVmaW5lIFBDSV8xREFDX1AyUF9NRU0xX0JBUl9TSVpFCQkJCTB4ZWE4CisjZGVmaW5lIFBDSV8wREFDX0NQVV9CQVJfU0laRQkJCQkJMHhlMmMKKyNkZWZpbmUgUENJXzFEQUNfQ1BVX0JBUl9TSVpFCQkJCQkweGVhYworI2RlZmluZSBQQ0lfMEVYUEFOU0lPTl9ST01fQkFSX1NJWkUJCQkJMHhkMmMKKyNkZWZpbmUgUENJXzFFWFBBTlNJT05fUk9NX0JBUl9TSVpFCQkJCTB4ZGFjCisjZGVmaW5lIFBDSV8wQkFTRV9BRERSRVNTX1JFR0lTVEVSU19FTkFCTEUJCQkweGMzYworI2RlZmluZSBQQ0lfMUJBU0VfQUREUkVTU19SRUdJU1RFUlNfRU5BQkxFCQkJMHhjYmMKKyNkZWZpbmUgUENJXzBTQ1NfMF9CQVNFX0FERFJFU1NfUkVNQVAJCQkJMHhjNDgKKyNkZWZpbmUgUENJXzFTQ1NfMF9CQVNFX0FERFJFU1NfUkVNQVAJCQkJMHhjYzgKKyNkZWZpbmUgUENJXzBTQ1NfMV9CQVNFX0FERFJFU1NfUkVNQVAJCQkJMHhkNDgKKyNkZWZpbmUgUENJXzFTQ1NfMV9CQVNFX0FERFJFU1NfUkVNQVAJCQkJMHhkYzgKKyNkZWZpbmUgUENJXzBTQ1NfMl9CQVNFX0FERFJFU1NfUkVNQVAJCQkJMHhjNGMKKyNkZWZpbmUgUENJXzFTQ1NfMl9CQVNFX0FERFJFU1NfUkVNQVAJCQkJMHhjY2MKKyNkZWZpbmUgUENJXzBTQ1NfM19CQVNFX0FERFJFU1NfUkVNQVAJCQkJMHhkNGMKKyNkZWZpbmUgUENJXzFTQ1NfM19CQVNFX0FERFJFU1NfUkVNQVAJCQkJMHhkY2MKKyNkZWZpbmUgUENJXzBDU18wX0JBU0VfQUREUkVTU19SRU1BUAkJCQkweGM1MAorI2RlZmluZSBQQ0lfMUNTXzBfQkFTRV9BRERSRVNTX1JFTUFQCQkJCTB4Y2QwCisjZGVmaW5lIFBDSV8wQ1NfMV9CQVNFX0FERFJFU1NfUkVNQVAJCQkJMHhkNTAKKyNkZWZpbmUgUENJXzFDU18xX0JBU0VfQUREUkVTU19SRU1BUAkJCQkweGRkMAorI2RlZmluZSBQQ0lfMENTXzJfQkFTRV9BRERSRVNTX1JFTUFQCQkJCTB4ZDU4CisjZGVmaW5lIFBDSV8xQ1NfMl9CQVNFX0FERFJFU1NfUkVNQVAJCQkJMHhkZDgKKyNkZWZpbmUgUENJXzBDU18zX0JBU0VfQUREUkVTU19SRU1BUAkJCQkweGM1NAorI2RlZmluZSBQQ0lfMUNTXzNfQkFTRV9BRERSRVNTX1JFTUFQCQkJCTB4Y2Q0CisjZGVmaW5lIFBDSV8wQ1NfQk9PVENTX0JBU0VfQUREUkVTU19SRU1BUAkJCTB4ZDU0CisjZGVmaW5lIFBDSV8xQ1NfQk9PVENTX0JBU0VfQUREUkVTU19SRU1BUAkJCTB4ZGQ0CisjZGVmaW5lIFBDSV8wUDJQX01FTTBfQkFTRV9BRERSRVNTX1JFTUFQX0xPVwkJCTB4ZDVjCisjZGVmaW5lIFBDSV8xUDJQX01FTTBfQkFTRV9BRERSRVNTX1JFTUFQX0xPVwkJCTB4ZGRjCisjZGVmaW5lIFBDSV8wUDJQX01FTTBfQkFTRV9BRERSRVNTX1JFTUFQX0hJR0gJCQkweGQ2MAorI2RlZmluZSBQQ0lfMVAyUF9NRU0wX0JBU0VfQUREUkVTU19SRU1BUF9ISUdICQkJMHhkZTAKKyNkZWZpbmUgUENJXzBQMlBfTUVNMV9CQVNFX0FERFJFU1NfUkVNQVBfTE9XCQkJMHhkNjQKKyNkZWZpbmUgUENJXzFQMlBfTUVNMV9CQVNFX0FERFJFU1NfUkVNQVBfTE9XCQkJMHhkZTQKKyNkZWZpbmUgUENJXzBQMlBfTUVNMV9CQVNFX0FERFJFU1NfUkVNQVBfSElHSAkJCTB4ZDY4CisjZGVmaW5lIFBDSV8xUDJQX01FTTFfQkFTRV9BRERSRVNTX1JFTUFQX0hJR0gJCQkweGRlOAorI2RlZmluZSBQQ0lfMFAyUF9JX09fQkFTRV9BRERSRVNTX1JFTUFQCQkJCTB4ZDZjCisjZGVmaW5lIFBDSV8xUDJQX0lfT19CQVNFX0FERFJFU1NfUkVNQVAJCQkJMHhkZWMKKyNkZWZpbmUgUENJXzBDUFVfQkFTRV9BRERSRVNTX1JFTUFQCQkJCTB4ZDcwCisjZGVmaW5lIFBDSV8xQ1BVX0JBU0VfQUREUkVTU19SRU1BUAkJCQkweGRmMAorI2RlZmluZSBQQ0lfMERBQ19TQ1NfMF9CQVNFX0FERFJFU1NfUkVNQVAJCQkweGYwMAorI2RlZmluZSBQQ0lfMURBQ19TQ1NfMF9CQVNFX0FERFJFU1NfUkVNQVAJCQkweGZmMAorI2RlZmluZSBQQ0lfMERBQ19TQ1NfMV9CQVNFX0FERFJFU1NfUkVNQVAJCQkweGYwNAorI2RlZmluZSBQQ0lfMURBQ19TQ1NfMV9CQVNFX0FERFJFU1NfUkVNQVAJCQkweGY4NAorI2RlZmluZSBQQ0lfMERBQ19TQ1NfMl9CQVNFX0FERFJFU1NfUkVNQVAJCQkweGYwOAorI2RlZmluZSBQQ0lfMURBQ19TQ1NfMl9CQVNFX0FERFJFU1NfUkVNQVAJCQkweGY4OAorI2RlZmluZSBQQ0lfMERBQ19TQ1NfM19CQVNFX0FERFJFU1NfUkVNQVAJCQkweGYwYworI2RlZmluZSBQQ0lfMURBQ19TQ1NfM19CQVNFX0FERFJFU1NfUkVNQVAJCQkweGY4YworI2RlZmluZSBQQ0lfMERBQ19DU18wX0JBU0VfQUREUkVTU19SRU1BUAkJCTB4ZjEwCisjZGVmaW5lIFBDSV8xREFDX0NTXzBfQkFTRV9BRERSRVNTX1JFTUFQCQkJMHhmOTAKKyNkZWZpbmUgUENJXzBEQUNfQ1NfMV9CQVNFX0FERFJFU1NfUkVNQVAJCQkweGYxNAorI2RlZmluZSBQQ0lfMURBQ19DU18xX0JBU0VfQUREUkVTU19SRU1BUAkJCTB4Zjk0CisjZGVmaW5lIFBDSV8wREFDX0NTXzJfQkFTRV9BRERSRVNTX1JFTUFQCQkJMHhmMTgKKyNkZWZpbmUgUENJXzFEQUNfQ1NfMl9CQVNFX0FERFJFU1NfUkVNQVAJCQkweGY5OAorI2RlZmluZSBQQ0lfMERBQ19DU18zX0JBU0VfQUREUkVTU19SRU1BUAkJCTB4ZjFjCisjZGVmaW5lIFBDSV8xREFDX0NTXzNfQkFTRV9BRERSRVNTX1JFTUFQCQkJMHhmOWMKKyNkZWZpbmUgUENJXzBEQUNfQk9PVENTX0JBU0VfQUREUkVTU19SRU1BUAkJCTB4ZjIwCisjZGVmaW5lIFBDSV8xREFDX0JPT1RDU19CQVNFX0FERFJFU1NfUkVNQVAJCQkweGZhMAorI2RlZmluZSBQQ0lfMERBQ19QMlBfTUVNMF9CQVNFX0FERFJFU1NfUkVNQVBfTE9XCQkweGYyNAorI2RlZmluZSBQQ0lfMURBQ19QMlBfTUVNMF9CQVNFX0FERFJFU1NfUkVNQVBfTE9XCQkweGZhNAorI2RlZmluZSBQQ0lfMERBQ19QMlBfTUVNMF9CQVNFX0FERFJFU1NfUkVNQVBfSElHSAkJMHhmMjgKKyNkZWZpbmUgUENJXzFEQUNfUDJQX01FTTBfQkFTRV9BRERSRVNTX1JFTUFQX0hJR0gJCTB4ZmE4CisjZGVmaW5lIFBDSV8wREFDX1AyUF9NRU0xX0JBU0VfQUREUkVTU19SRU1BUF9MT1cJCTB4ZjJjCisjZGVmaW5lIFBDSV8xREFDX1AyUF9NRU0xX0JBU0VfQUREUkVTU19SRU1BUF9MT1cJCTB4ZmFjCisjZGVmaW5lIFBDSV8wREFDX1AyUF9NRU0xX0JBU0VfQUREUkVTU19SRU1BUF9ISUdICQkweGYzMAorI2RlZmluZSBQQ0lfMURBQ19QMlBfTUVNMV9CQVNFX0FERFJFU1NfUkVNQVBfSElHSAkJMHhmYjAKKyNkZWZpbmUgUENJXzBEQUNfQ1BVX0JBU0VfQUREUkVTU19SRU1BUAkJCQkweGYzNAorI2RlZmluZSBQQ0lfMURBQ19DUFVfQkFTRV9BRERSRVNTX1JFTUFQCQkJCTB4ZmI0CisjZGVmaW5lIFBDSV8wRVhQQU5TSU9OX1JPTV9CQVNFX0FERFJFU1NfUkVNQVAJCQkweGYzOAorI2RlZmluZSBQQ0lfMUVYUEFOU0lPTl9ST01fQkFTRV9BRERSRVNTX1JFTUFQCQkJMHhmYjgKKyNkZWZpbmUgUENJXzBBRERSRVNTX0RFQ09ERV9DT05UUk9MCQkJCTB4ZDNjCisjZGVmaW5lIFBDSV8xQUREUkVTU19ERUNPREVfQ09OVFJPTAkJCQkweGRiYworCisvKgorICogUENJIENvbnRyb2wKKyAqLworCisjZGVmaW5lIFBDSV8wQ09NTUFORAkJCQkJCTB4YzAwCisjZGVmaW5lIFBDSV8xQ09NTUFORAkJCQkJCTB4YzgwCisjZGVmaW5lIFBDSV8wTU9ERQkJCQkJCTB4ZDAwCisjZGVmaW5lIFBDSV8xTU9ERQkJCQkJCTB4ZDgwCisjZGVmaW5lIFBDSV8wVElNRU9VVF9SRVRSWQkJCQkJMHhjMDQKKyNkZWZpbmUgUENJXzFUSU1FT1VUX1JFVFJZCQkJCQkweGM4NAorI2RlZmluZSBQQ0lfMFJFQURfQlVGRkVSX0RJU0NBUkRfVElNRVIJCQkJMHhkMDQKKyNkZWZpbmUgUENJXzFSRUFEX0JVRkZFUl9ESVNDQVJEX1RJTUVSCQkJCTB4ZDg0CisjZGVmaW5lIE1TSV8wVFJJR0dFUl9USU1FUgkJCQkJMHhjMzgKKyNkZWZpbmUgTVNJXzFUUklHR0VSX1RJTUVSCQkJCQkweGNiOAorI2RlZmluZSBQQ0lfMEFSQklURVJfQ09OVFJPTAkJCQkJMHgxZDAwCisjZGVmaW5lIFBDSV8xQVJCSVRFUl9DT05UUk9MCQkJCQkweDFkODAKKy8qIGNoYW5naW5nIHVudGlsbCBoZXJlICovCisjZGVmaW5lIFBDSV8wQ1JPU1NfQkFSX0NPTlRST0xfTE9XCQkJCSAweDFkMDgKKyNkZWZpbmUgUENJXzBDUk9TU19CQVJfQ09OVFJPTF9ISUdICQkJCSAweDFkMGMKKyNkZWZpbmUgUENJXzBDUk9TU19CQVJfVElNRU9VVAkJCQkJIDB4MWQwNAorI2RlZmluZSBQQ0lfMFJFQURfUkVTUE9OU0VfQ1JPU1NfQkFSX0NPTlRST0xfTE9XCQkgMHgxZDE4CisjZGVmaW5lIFBDSV8wUkVBRF9SRVNQT05TRV9DUk9TU19CQVJfQ09OVFJPTF9ISUdICQkgMHgxZDFjCisjZGVmaW5lIFBDSV8wU1lOQ19CQVJSSUVSX1ZJUlRVQUxfUkVHSVNURVIJCQkgMHgxZDEwCisjZGVmaW5lIFBDSV8wUDJQX0NPTkZJR1VSQVRJT04JCQkJCSAweDFkMTQKKyNkZWZpbmUgUENJXzBBQ0NFU1NfQ09OVFJPTF9CQVNFXzBfTE9XCQkJCSAweDFlMDAKKyNkZWZpbmUgUENJXzBBQ0NFU1NfQ09OVFJPTF9CQVNFXzBfSElHSAkJCQkgMHgxZTA0CisjZGVmaW5lIFBDSV8wQUNDRVNTX0NPTlRST0xfVE9QXzAJCQkJIDB4MWUwOAorI2RlZmluZSBQQ0lfMEFDQ0VTU19DT05UUk9MX0JBU0VfMV9MT1cJCQkJIDBjMWUxMAorI2RlZmluZSBQQ0lfMEFDQ0VTU19DT05UUk9MX0JBU0VfMV9ISUdICQkJCSAweDFlMTQKKyNkZWZpbmUgUENJXzBBQ0NFU1NfQ09OVFJPTF9UT1BfMQkJCQkgMHgxZTE4CisjZGVmaW5lIFBDSV8wQUNDRVNTX0NPTlRST0xfQkFTRV8yX0xPVwkJCQkgMGMxZTIwCisjZGVmaW5lIFBDSV8wQUNDRVNTX0NPTlRST0xfQkFTRV8yX0hJR0gJCQkJIDB4MWUyNAorI2RlZmluZSBQQ0lfMEFDQ0VTU19DT05UUk9MX1RPUF8yCQkJCSAweDFlMjgKKyNkZWZpbmUgUENJXzBBQ0NFU1NfQ09OVFJPTF9CQVNFXzNfTE9XCQkJCSAwYzFlMzAKKyNkZWZpbmUgUENJXzBBQ0NFU1NfQ09OVFJPTF9CQVNFXzNfSElHSAkJCQkgMHgxZTM0CisjZGVmaW5lIFBDSV8wQUNDRVNTX0NPTlRST0xfVE9QXzMJCQkJIDB4MWUzOAorI2RlZmluZSBQQ0lfMEFDQ0VTU19DT05UUk9MX0JBU0VfNF9MT1cJCQkJIDBjMWU0MAorI2RlZmluZSBQQ0lfMEFDQ0VTU19DT05UUk9MX0JBU0VfNF9ISUdICQkJCSAweDFlNDQKKyNkZWZpbmUgUENJXzBBQ0NFU1NfQ09OVFJPTF9UT1BfNAkJCQkgMHgxZTQ4CisjZGVmaW5lIFBDSV8wQUNDRVNTX0NPTlRST0xfQkFTRV81X0xPVwkJCQkgMGMxZTUwCisjZGVmaW5lIFBDSV8wQUNDRVNTX0NPTlRST0xfQkFTRV81X0hJR0gJCQkJIDB4MWU1NAorI2RlZmluZSBQQ0lfMEFDQ0VTU19DT05UUk9MX1RPUF81CQkJCSAweDFlNTgKKyNkZWZpbmUgUENJXzBBQ0NFU1NfQ09OVFJPTF9CQVNFXzZfTE9XCQkJCSAwYzFlNjAKKyNkZWZpbmUgUENJXzBBQ0NFU1NfQ09OVFJPTF9CQVNFXzZfSElHSAkJCQkgMHgxZTY0CisjZGVmaW5lIFBDSV8wQUNDRVNTX0NPTlRST0xfVE9QXzYJCQkJIDB4MWU2OAorI2RlZmluZSBQQ0lfMEFDQ0VTU19DT05UUk9MX0JBU0VfN19MT1cJCQkJIDBjMWU3MAorI2RlZmluZSBQQ0lfMEFDQ0VTU19DT05UUk9MX0JBU0VfN19ISUdICQkJCSAweDFlNzQKKyNkZWZpbmUgUENJXzBBQ0NFU1NfQ09OVFJPTF9UT1BfNwkJCQkgMHgxZTc4CisjZGVmaW5lIFBDSV8xQ1JPU1NfQkFSX0NPTlRST0xfTE9XCQkJCSAweDFkODgKKyNkZWZpbmUgUENJXzFDUk9TU19CQVJfQ09OVFJPTF9ISUdICQkJCSAweDFkOGMKKyNkZWZpbmUgUENJXzFDUk9TU19CQVJfVElNRU9VVAkJCQkJIDB4MWQ4NAorI2RlZmluZSBQQ0lfMVJFQURfUkVTUE9OU0VfQ1JPU1NfQkFSX0NPTlRST0xfTE9XCQkgMHgxZDk4CisjZGVmaW5lIFBDSV8xUkVBRF9SRVNQT05TRV9DUk9TU19CQVJfQ09OVFJPTF9ISUdICQkgMHgxZDljCisjZGVmaW5lIFBDSV8xU1lOQ19CQVJSSUVSX1ZJUlRVQUxfUkVHSVNURVIJCQkgMHgxZDkwCisjZGVmaW5lIFBDSV8xUDJQX0NPTkZJR1VSQVRJT04JCQkJCSAweDFkOTQKKyNkZWZpbmUgUENJXzFBQ0NFU1NfQ09OVFJPTF9CQVNFXzBfTE9XCQkJCSAweDFlODAKKyNkZWZpbmUgUENJXzFBQ0NFU1NfQ09OVFJPTF9CQVNFXzBfSElHSAkJCQkgMHgxZTg0CisjZGVmaW5lIFBDSV8xQUNDRVNTX0NPTlRST0xfVE9QXzAJCQkJIDB4MWU4OAorI2RlZmluZSBQQ0lfMUFDQ0VTU19DT05UUk9MX0JBU0VfMV9MT1cJCQkJIDBjMWU5MAorI2RlZmluZSBQQ0lfMUFDQ0VTU19DT05UUk9MX0JBU0VfMV9ISUdICQkJCSAweDFlOTQKKyNkZWZpbmUgUENJXzFBQ0NFU1NfQ09OVFJPTF9UT1BfMQkJCQkgMHgxZTk4CisjZGVmaW5lIFBDSV8xQUNDRVNTX0NPTlRST0xfQkFTRV8yX0xPVwkJCQkgMGMxZWEwCisjZGVmaW5lIFBDSV8xQUNDRVNTX0NPTlRST0xfQkFTRV8yX0hJR0gJCQkJIDB4MWVhNAorI2RlZmluZSBQQ0lfMUFDQ0VTU19DT05UUk9MX1RPUF8yCQkJCSAweDFlYTgKKyNkZWZpbmUgUENJXzFBQ0NFU1NfQ09OVFJPTF9CQVNFXzNfTE9XCQkJCSAwYzFlYjAKKyNkZWZpbmUgUENJXzFBQ0NFU1NfQ09OVFJPTF9CQVNFXzNfSElHSAkJCQkgMHgxZWI0CisjZGVmaW5lIFBDSV8xQUNDRVNTX0NPTlRST0xfVE9QXzMJCQkJIDB4MWViOAorI2RlZmluZSBQQ0lfMUFDQ0VTU19DT05UUk9MX0JBU0VfNF9MT1cJCQkJIDBjMWVjMAorI2RlZmluZSBQQ0lfMUFDQ0VTU19DT05UUk9MX0JBU0VfNF9ISUdICQkJCSAweDFlYzQKKyNkZWZpbmUgUENJXzFBQ0NFU1NfQ09OVFJPTF9UT1BfNAkJCQkgMHgxZWM4CisjZGVmaW5lIFBDSV8xQUNDRVNTX0NPTlRST0xfQkFTRV81X0xPVwkJCQkgMGMxZWQwCisjZGVmaW5lIFBDSV8xQUNDRVNTX0NPTlRST0xfQkFTRV81X0hJR0gJCQkJIDB4MWVkNAorI2RlZmluZSBQQ0lfMUFDQ0VTU19DT05UUk9MX1RPUF81CQkJCSAweDFlZDgKKyNkZWZpbmUgUENJXzFBQ0NFU1NfQ09OVFJPTF9CQVNFXzZfTE9XCQkJCSAwYzFlZTAKKyNkZWZpbmUgUENJXzFBQ0NFU1NfQ09OVFJPTF9CQVNFXzZfSElHSAkJCQkgMHgxZWU0CisjZGVmaW5lIFBDSV8xQUNDRVNTX0NPTlRST0xfVE9QXzYJCQkJIDB4MWVlOAorI2RlZmluZSBQQ0lfMUFDQ0VTU19DT05UUk9MX0JBU0VfN19MT1cJCQkJIDBjMWVmMAorI2RlZmluZSBQQ0lfMUFDQ0VTU19DT05UUk9MX0JBU0VfN19ISUdICQkJCSAweDFlZjQKKyNkZWZpbmUgUENJXzFBQ0NFU1NfQ09OVFJPTF9UT1BfNwkJCQkgMHgxZWY4CisKKy8qCisgKiBQQ0kgU25vb3AgQ29udHJvbAorICovCisKKyNkZWZpbmUgUENJXzBTTk9PUF9DT05UUk9MX0JBU0VfMF9MT1cJCQkJIDB4MWYwMAorI2RlZmluZSBQQ0lfMFNOT09QX0NPTlRST0xfQkFTRV8wX0hJR0gJCQkJIDB4MWYwNAorI2RlZmluZSBQQ0lfMFNOT09QX0NPTlRST0xfVE9QXzAJCQkJIDB4MWYwOAorI2RlZmluZSBQQ0lfMFNOT09QX0NPTlRST0xfQkFTRV8xXzBfTE9XCQkJCSAweDFmMTAKKyNkZWZpbmUgUENJXzBTTk9PUF9DT05UUk9MX0JBU0VfMV8wX0hJR0gJCQkgMHgxZjE0CisjZGVmaW5lIFBDSV8wU05PT1BfQ09OVFJPTF9UT1BfMQkJCQkgMHgxZjE4CisjZGVmaW5lIFBDSV8wU05PT1BfQ09OVFJPTF9CQVNFXzJfMF9MT1cJCQkJIDB4MWYyMAorI2RlZmluZSBQQ0lfMFNOT09QX0NPTlRST0xfQkFTRV8yXzBfSElHSAkJCSAweDFmMjQKKyNkZWZpbmUgUENJXzBTTk9PUF9DT05UUk9MX1RPUF8yCQkJCSAweDFmMjgKKyNkZWZpbmUgUENJXzBTTk9PUF9DT05UUk9MX0JBU0VfM18wX0xPVwkJCQkgMHgxZjMwCisjZGVmaW5lIFBDSV8wU05PT1BfQ09OVFJPTF9CQVNFXzNfMF9ISUdICQkJIDB4MWYzNAorI2RlZmluZSBQQ0lfMFNOT09QX0NPTlRST0xfVE9QXzMJCQkJIDB4MWYzOAorI2RlZmluZSBQQ0lfMVNOT09QX0NPTlRST0xfQkFTRV8wX0xPVwkJCQkgMHgxZjgwCisjZGVmaW5lIFBDSV8xU05PT1BfQ09OVFJPTF9CQVNFXzBfSElHSAkJCQkgMHgxZjg0CisjZGVmaW5lIFBDSV8xU05PT1BfQ09OVFJPTF9UT1BfMAkJCQkgMHgxZjg4CisjZGVmaW5lIFBDSV8xU05PT1BfQ09OVFJPTF9CQVNFXzFfMF9MT1cJCQkJIDB4MWY5MAorI2RlZmluZSBQQ0lfMVNOT09QX0NPTlRST0xfQkFTRV8xXzBfSElHSAkJCSAweDFmOTQKKyNkZWZpbmUgUENJXzFTTk9PUF9DT05UUk9MX1RPUF8xCQkJCSAweDFmOTgKKyNkZWZpbmUgUENJXzFTTk9PUF9DT05UUk9MX0JBU0VfMl8wX0xPVwkJCQkgMHgxZmEwCisjZGVmaW5lIFBDSV8xU05PT1BfQ09OVFJPTF9CQVNFXzJfMF9ISUdICQkJIDB4MWZhNAorI2RlZmluZSBQQ0lfMVNOT09QX0NPTlRST0xfVE9QXzIJCQkJIDB4MWZhOAorI2RlZmluZSBQQ0lfMVNOT09QX0NPTlRST0xfQkFTRV8zXzBfTE9XCQkJCSAweDFmYjAKKyNkZWZpbmUgUENJXzFTTk9PUF9DT05UUk9MX0JBU0VfM18wX0hJR0gJCQkgMHgxZmI0CisjZGVmaW5lIFBDSV8xU05PT1BfQ09OVFJPTF9UT1BfMwkJCQkgMHgxZmI4CisKKy8qCisgKiBQQ0kgQ29uZmlndXJhdGlvbiBBZGRyZXNzCisgKi8KKworI2RlZmluZSBQQ0lfMENPTkZJR1VSQVRJT05fQUREUkVTUwkJCQkweGNmOAorI2RlZmluZSBQQ0lfMENPTkZJR1VSQVRJT05fREFUQV9WSVJUVUFMX1JFR0lTVEVSCQkweGNmYworI2RlZmluZSBQQ0lfMUNPTkZJR1VSQVRJT05fQUREUkVTUwkJCQkweGM3OAorI2RlZmluZSBQQ0lfMUNPTkZJR1VSQVRJT05fREFUQV9WSVJUVUFMX1JFR0lTVEVSCQkweGM3YworI2RlZmluZSBQQ0lfMElOVEVSUlVQVF9BQ0tOT1dMRURHRV9WSVJUVUFMX1JFR0lTVEVSCQkweGMzNAorI2RlZmluZSBQQ0lfMUlOVEVSUlVQVF9BQ0tOT1dMRURHRV9WSVJUVUFMX1JFR0lTVEVSCQkweGNiNAorCisvKgorICogUENJIEVycm9yIFJlcG9ydAorICovCisKKyNkZWZpbmUgUENJXzBTRVJSX01BU0sJCQkJCQkgMHhjMjgKKyNkZWZpbmUgUENJXzBFUlJPUl9BRERSRVNTX0xPVwkJCQkJIDB4MWQ0MAorI2RlZmluZSBQQ0lfMEVSUk9SX0FERFJFU1NfSElHSAkJCQkJIDB4MWQ0NAorI2RlZmluZSBQQ0lfMEVSUk9SX0RBVEFfTE9XCQkJCQkgMHgxZDQ4CisjZGVmaW5lIFBDSV8wRVJST1JfREFUQV9ISUdICQkJCQkgMHgxZDRjCisjZGVmaW5lIFBDSV8wRVJST1JfQ09NTUFORAkJCQkJIDB4MWQ1MAorI2RlZmluZSBQQ0lfMEVSUk9SX0NBVVNFCQkJCQkgMHgxZDU4CisjZGVmaW5lIFBDSV8wRVJST1JfTUFTSwkJCQkJCSAweDFkNWMKKworI2RlZmluZSBQQ0lfMVNFUlJfTUFTSwkJCQkJCSAweGNhOAorI2RlZmluZSBQQ0lfMUVSUk9SX0FERFJFU1NfTE9XCQkJCQkgMHgxZGMwCisjZGVmaW5lIFBDSV8xRVJST1JfQUREUkVTU19ISUdICQkJCQkgMHgxZGM0CisjZGVmaW5lIFBDSV8xRVJST1JfREFUQV9MT1cJCQkJCSAweDFkYzgKKyNkZWZpbmUgUENJXzFFUlJPUl9EQVRBX0hJR0gJCQkJCSAweDFkY2MKKyNkZWZpbmUgUENJXzFFUlJPUl9DT01NQU5ECQkJCQkgMHgxZGQwCisjZGVmaW5lIFBDSV8xRVJST1JfQ0FVU0UJCQkJCSAweDFkZDgKKyNkZWZpbmUgUENJXzFFUlJPUl9NQVNLCQkJCQkJIDB4MWRkYworCisKKy8qCisgKiBMc2xhdmUgRGVidWcJIChmb3IgaW50ZXJuYWwgdXNlKQorICovCisKKyNkZWZpbmUgTF9TTEFWRV9YMF9BRERSRVNTCQkJCQkweDFkMjAKKyNkZWZpbmUgTF9TTEFWRV9YMF9DT01NQU5EX0FORF9JRAkJCQkweDFkMjQKKyNkZWZpbmUgTF9TTEFWRV9YMV9BRERSRVNTCQkJCQkweDFkMjgKKyNkZWZpbmUgTF9TTEFWRV9YMV9DT01NQU5EX0FORF9JRAkJCQkweDFkMmMKKyNkZWZpbmUgTF9TTEFWRV9XUklURV9EQVRBX0xPVwkJCQkJMHgxZDMwCisjZGVmaW5lIExfU0xBVkVfV1JJVEVfREFUQV9ISUdICQkJCQkweDFkMzQKKyNkZWZpbmUgTF9TTEFWRV9XUklURV9CWVRFX0VOQUJMRQkJCQkweDFkNjAKKyNkZWZpbmUgTF9TTEFWRV9SRUFEX0RBVEFfTE9XCQkJCQkweDFkMzgKKyNkZWZpbmUgTF9TTEFWRV9SRUFEX0RBVEFfSElHSAkJCQkJMHgxZDNjCisjZGVmaW5lIExfU0xBVkVfUkVBRF9JRAkJCQkJCTB4MWQ2NAorCisjaWYgMCAvKiBEaXNhYmxlZCBiZWNhdXNlIFBDSV8qIG5hbWVzcGFjZSBiZWxvbmdzIHRvIFBDSSBzdWJzeXN0ZW0gLi4uICovCisKKy8qCisgKiBQQ0kgQ29uZmlndXJhdGlvbiBGdW5jdGlvbiAwCisgKi8KKworI2RlZmluZSBQQ0lfREVWSUNFX0FORF9WRU5ET1JfSUQJCQkJMHgwMDAKKyNkZWZpbmUgUENJX1NUQVRVU19BTkRfQ09NTUFORAkJCQkJMHgwMDQKKyNkZWZpbmUgUENJX0NMQVNTX0NPREVfQU5EX1JFVklTSU9OX0lECQkJCTB4MDA4CisjZGVmaW5lIFBDSV9CSVNUX0hFQURFUl9UWVBFX0xBVEVOQ1lfVElNRVJfQ0FDSEVfTElORQkJMHgwMEMKKyNkZWZpbmUgUENJX1NDU18wX0JBU0VfQUREUkVTUwkJCQkJMHgwMTAKKyNkZWZpbmUgUENJX1NDU18xX0JBU0VfQUREUkVTUwkJCQkJMHgwMTQKKyNkZWZpbmUgUENJX1NDU18yX0JBU0VfQUREUkVTUwkJCQkJMHgwMTgKKyNkZWZpbmUgUENJX1NDU18zX0JBU0VfQUREUkVTUwkJCQkJMHgwMUMKKyNkZWZpbmUgUENJX0lOVEVSTkFMX1JFR0lTVEVSU19NRU1PUllfTUFQUEVEX0JBU0VfQUREUkVTUwkweDAyMAorI2RlZmluZSBQQ0lfSU5URVJOQUxfUkVHSVNURVJTX0lfT01BUFBFRF9CQVNFX0FERFJFU1MJCTB4MDI0CisjZGVmaW5lIFBDSV9TVUJTWVNURU1fSURfQU5EX1NVQlNZU1RFTV9WRU5ET1JfSUQJCTB4MDJDCisjZGVmaW5lIFBDSV9FWFBBTlNJT05fUk9NX0JBU0VfQUREUkVTU19SRUdJU1RFUgkJCTB4MDMwCisjZGVmaW5lIFBDSV9DQVBBQklMVFlfTElTVF9QT0lOVEVSCQkJCTB4MDM0CisjZGVmaW5lIFBDSV9JTlRFUlJVUFRfUElOX0FORF9MSU5FCQkJCTB4MDNDCisjZGVmaW5lIFBDSV9QT1dFUl9NQU5BR0VNRU5UX0NBUEFCSUxJVFkJCQkJMHgwNDAKKyNkZWZpbmUgUENJX1BPV0VSX01BTkFHRU1FTlRfU1RBVFVTX0FORF9DT05UUk9MCQkJMHgwNDQKKyNkZWZpbmUgUENJX1ZQRF9BRERSRVNTCQkJCQkJMHgwNDgKKyNkZWZpbmUgUENJX1ZQRF9EQVRBCQkJCQkJMFgwNGMKKyNkZWZpbmUgUENJX01TSV9NRVNTQUdFX0NPTlRST0wJCQkJCTB4MDUwCisjZGVmaW5lIFBDSV9NU0lfTUVTU0FHRV9BRERSRVNTCQkJCQkweDA1NAorI2RlZmluZSBQQ0lfTVNJX01FU1NBR0VfVVBQRVJfQUREUkVTUwkJCQkweDA1OAorI2RlZmluZSBQQ0lfTVNJX01FU1NBR0VfREFUQQkJCQkJMHgwNWMKKyNkZWZpbmUgUENJX0NPTVBBQ1RfUENJX0hPVF9TV0FQX0NBUEFCSUxJVFkJCQkweDA1OAorCisvKgorICogUENJIENvbmZpZ3VyYXRpb24gRnVuY3Rpb24gMQorICovCisKKyNkZWZpbmUgUENJX0NTXzBfQkFTRV9BRERSRVNTCQkJCQkweDExMAorI2RlZmluZSBQQ0lfQ1NfMV9CQVNFX0FERFJFU1MJCQkJCTB4MTE0CisjZGVmaW5lIFBDSV9DU18yX0JBU0VfQUREUkVTUwkJCQkJMHgxMTgKKyNkZWZpbmUgUENJX0NTXzNfQkFTRV9BRERSRVNTCQkJCQkweDExYworI2RlZmluZSBQQ0lfQk9PVENTX0JBU0VfQUREUkVTUwkJCQkJMHgxMjAKKworLyoKKyAqIFBDSSBDb25maWd1cmF0aW9uIEZ1bmN0aW9uIDIKKyAqLworCisjZGVmaW5lIFBDSV9QMlBfTUVNMF9CQVNFX0FERFJFU1MJCQkJMHgyMTAKKyNkZWZpbmUgUENJX1AyUF9NRU0xX0JBU0VfQUREUkVTUwkJCQkweDIxNAorI2RlZmluZSBQQ0lfUDJQX0lfT19CQVNFX0FERFJFU1MJCQkJMHgyMTgKKyNkZWZpbmUgUENJX0NQVV9CQVNFX0FERFJFU1MJCQkJCTB4MjFjCisKKy8qCisgKiBQQ0kgQ29uZmlndXJhdGlvbiBGdW5jdGlvbiA0CisgKi8KKworI2RlZmluZSBQQ0lfREFDX1NDU18wX0JBU0VfQUREUkVTU19MT1cJCQkJMHg0MTAKKyNkZWZpbmUgUENJX0RBQ19TQ1NfMF9CQVNFX0FERFJFU1NfSElHSAkJCQkweDQxNAorI2RlZmluZSBQQ0lfREFDX1NDU18xX0JBU0VfQUREUkVTU19MT1cJCQkJMHg0MTgKKyNkZWZpbmUgUENJX0RBQ19TQ1NfMV9CQVNFX0FERFJFU1NfSElHSAkJCQkweDQxYworI2RlZmluZSBQQ0lfREFDX1AyUF9NRU0wX0JBU0VfQUREUkVTU19MT1cJCQkweDQyMAorI2RlZmluZSBQQ0lfREFDX1AyUF9NRU0wX0JBU0VfQUREUkVTU19ISUdICQkJMHg0MjQKKworCisvKgorICogUENJIENvbmZpZ3VyYXRpb24gRnVuY3Rpb24gNQorICovCisKKyNkZWZpbmUgUENJX0RBQ19TQ1NfMl9CQVNFX0FERFJFU1NfTE9XCQkJCTB4NTEwCisjZGVmaW5lIFBDSV9EQUNfU0NTXzJfQkFTRV9BRERSRVNTX0hJR0gJCQkJMHg1MTQKKyNkZWZpbmUgUENJX0RBQ19TQ1NfM19CQVNFX0FERFJFU1NfTE9XCQkJCTB4NTE4CisjZGVmaW5lIFBDSV9EQUNfU0NTXzNfQkFTRV9BRERSRVNTX0hJR0gJCQkJMHg1MWMKKyNkZWZpbmUgUENJX0RBQ19QMlBfTUVNMV9CQVNFX0FERFJFU1NfTE9XCQkJMHg1MjAKKyNkZWZpbmUgUENJX0RBQ19QMlBfTUVNMV9CQVNFX0FERFJFU1NfSElHSAkJCTB4NTI0CisKKworLyoKKyAqIFBDSSBDb25maWd1cmF0aW9uIEZ1bmN0aW9uIDYKKyAqLworCisjZGVmaW5lIFBDSV9EQUNfQ1NfMF9CQVNFX0FERFJFU1NfTE9XCQkJCTB4NjEwCisjZGVmaW5lIFBDSV9EQUNfQ1NfMF9CQVNFX0FERFJFU1NfSElHSAkJCQkweDYxNAorI2RlZmluZSBQQ0lfREFDX0NTXzFfQkFTRV9BRERSRVNTX0xPVwkJCQkweDYxOAorI2RlZmluZSBQQ0lfREFDX0NTXzFfQkFTRV9BRERSRVNTX0hJR0gJCQkJMHg2MWMKKyNkZWZpbmUgUENJX0RBQ19DU18yX0JBU0VfQUREUkVTU19MT1cJCQkJMHg2MjAKKyNkZWZpbmUgUENJX0RBQ19DU18yX0JBU0VfQUREUkVTU19ISUdICQkJCTB4NjI0CisKKy8qCisgKiBQQ0kgQ29uZmlndXJhdGlvbiBGdW5jdGlvbiA3CisgKi8KKworI2RlZmluZSBQQ0lfREFDX0NTXzNfQkFTRV9BRERSRVNTX0xPVwkJCQkweDcxMAorI2RlZmluZSBQQ0lfREFDX0NTXzNfQkFTRV9BRERSRVNTX0hJR0gJCQkJMHg3MTQKKyNkZWZpbmUgUENJX0RBQ19CT09UQ1NfQkFTRV9BRERSRVNTX0xPVwkJCQkweDcxOAorI2RlZmluZSBQQ0lfREFDX0JPT1RDU19CQVNFX0FERFJFU1NfSElHSAkJCTB4NzFjCisjZGVmaW5lIFBDSV9EQUNfQ1BVX0JBU0VfQUREUkVTU19MT1cJCQkJMHg3MjAKKyNkZWZpbmUgUENJX0RBQ19DUFVfQkFTRV9BRERSRVNTX0hJR0gJCQkJMHg3MjQKKyNlbmRpZgorCisvKgorICogSW50ZXJydXB0cworICovCisKKyNkZWZpbmUgTE9XX0lOVEVSUlVQVF9DQVVTRV9SRUdJU1RFUgkJCQkweGMxOAorI2RlZmluZSBISUdIX0lOVEVSUlVQVF9DQVVTRV9SRUdJU1RFUgkJCQkweGM2OAorI2RlZmluZSBDUFVfSU5URVJSVVBUX01BU0tfUkVHSVNURVJfTE9XCQkJCTB4YzFjCisjZGVmaW5lIENQVV9JTlRFUlJVUFRfTUFTS19SRUdJU1RFUl9ISUdICQkJMHhjNmMKKyNkZWZpbmUgQ1BVX1NFTEVDVF9DQVVTRV9SRUdJU1RFUgkJCQkweGM3MAorI2RlZmluZSBQQ0lfMElOVEVSUlVQVF9DQVVTRV9NQVNLX1JFR0lTVEVSX0xPVwkJCTB4YzI0CisjZGVmaW5lIFBDSV8wSU5URVJSVVBUX0NBVVNFX01BU0tfUkVHSVNURVJfSElHSAkJCTB4YzY0CisjZGVmaW5lIFBDSV8wU0VMRUNUX0NBVVNFCQkJCQkweGM3NAorI2RlZmluZSBQQ0lfMUlOVEVSUlVQVF9DQVVTRV9NQVNLX1JFR0lTVEVSX0xPVwkJCTB4Y2E0CisjZGVmaW5lIFBDSV8xSU5URVJSVVBUX0NBVVNFX01BU0tfUkVHSVNURVJfSElHSAkJCTB4Y2U0CisjZGVmaW5lIFBDSV8xU0VMRUNUX0NBVVNFCQkJCQkweGNmNAorI2RlZmluZSBDUFVfSU5UXzBfTUFTSwkJCQkJCTB4ZTYwCisjZGVmaW5lIENQVV9JTlRfMV9NQVNLCQkJCQkJMHhlNjQKKyNkZWZpbmUgQ1BVX0lOVF8yX01BU0sJCQkJCQkweGU2OAorI2RlZmluZSBDUFVfSU5UXzNfTUFTSwkJCQkJCTB4ZTZjCisKKy8qCisgKiBJMjAgU3VwcG9ydCByZWdpc3RlcnMKKyAqLworCisjZGVmaW5lIElOQk9VTkRfTUVTU0FHRV9SRUdJU1RFUjBfUENJMF9TSURFCQkJMHgwMTAKKyNkZWZpbmUgSU5CT1VORF9NRVNTQUdFX1JFR0lTVEVSMV9QQ0kwX1NJREUJCQkweDAxNAorI2RlZmluZSBPVVRCT1VORF9NRVNTQUdFX1JFR0lTVEVSMF9QQ0kwX1NJREUJCQkweDAxOAorI2RlZmluZSBPVVRCT1VORF9NRVNTQUdFX1JFR0lTVEVSMV9QQ0kwX1NJREUJCQkweDAxQworI2RlZmluZSBJTkJPVU5EX0RPT1JCRUxMX1JFR0lTVEVSX1BDSTBfU0lERQkJCTB4MDIwCisjZGVmaW5lIElOQk9VTkRfSU5URVJSVVBUX0NBVVNFX1JFR0lTVEVSX1BDSTBfU0lERQkJMHgwMjQKKyNkZWZpbmUgSU5CT1VORF9JTlRFUlJVUFRfTUFTS19SRUdJU1RFUl9QQ0kwX1NJREUJCTB4MDI4CisjZGVmaW5lIE9VVEJPVU5EX0RPT1JCRUxMX1JFR0lTVEVSX1BDSTBfU0lERQkJCTB4MDJDCisjZGVmaW5lIE9VVEJPVU5EX0lOVEVSUlVQVF9DQVVTRV9SRUdJU1RFUl9QQ0kwX1NJREUJCTB4MDMwCisjZGVmaW5lIE9VVEJPVU5EX0lOVEVSUlVQVF9NQVNLX1JFR0lTVEVSX1BDSTBfU0lERQkJMHgwMzQKKyNkZWZpbmUgSU5CT1VORF9RVUVVRV9QT1JUX1ZJUlRVQUxfUkVHSVNURVJfUENJMF9TSURFCQkweDA0MAorI2RlZmluZSBPVVRCT1VORF9RVUVVRV9QT1JUX1ZJUlRVQUxfUkVHSVNURVJfUENJMF9TSURFCQkweDA0NAorI2RlZmluZSBRVUVVRV9DT05UUk9MX1JFR0lTVEVSX1BDSTBfU0lERQkJCTB4MDUwCisjZGVmaW5lIFFVRVVFX0JBU0VfQUREUkVTU19SRUdJU1RFUl9QQ0kwX1NJREUJCQkweDA1NAorI2RlZmluZSBJTkJPVU5EX0ZSRUVfSEVBRF9QT0lOVEVSX1JFR0lTVEVSX1BDSTBfU0lERQkJMHgwNjAKKyNkZWZpbmUgSU5CT1VORF9GUkVFX1RBSUxfUE9JTlRFUl9SRUdJU1RFUl9QQ0kwX1NJREUJCTB4MDY0CisjZGVmaW5lIElOQk9VTkRfUE9TVF9IRUFEX1BPSU5URVJfUkVHSVNURVJfUENJMF9TSURFCQkweDA2OAorI2RlZmluZSBJTkJPVU5EX1BPU1RfVEFJTF9QT0lOVEVSX1JFR0lTVEVSX1BDSTBfU0lERQkJMHgwNkMKKyNkZWZpbmUgT1VUQk9VTkRfRlJFRV9IRUFEX1BPSU5URVJfUkVHSVNURVJfUENJMF9TSURFCQkweDA3MAorI2RlZmluZSBPVVRCT1VORF9GUkVFX1RBSUxfUE9JTlRFUl9SRUdJU1RFUl9QQ0kwX1NJREUJCTB4MDc0CisjZGVmaW5lIE9VVEJPVU5EX1BPU1RfSEVBRF9QT0lOVEVSX1JFR0lTVEVSX1BDSTBfU0lERQkJMHgwRjgKKyNkZWZpbmUgT1VUQk9VTkRfUE9TVF9UQUlMX1BPSU5URVJfUkVHSVNURVJfUENJMF9TSURFCQkweDBGQworCisjZGVmaW5lIElOQk9VTkRfTUVTU0FHRV9SRUdJU1RFUjBfUENJMV9TSURFCQkJMHgwOTAKKyNkZWZpbmUgSU5CT1VORF9NRVNTQUdFX1JFR0lTVEVSMV9QQ0kxX1NJREUJCQkweDA5NAorI2RlZmluZSBPVVRCT1VORF9NRVNTQUdFX1JFR0lTVEVSMF9QQ0kxX1NJREUJCQkweDA5OAorI2RlZmluZSBPVVRCT1VORF9NRVNTQUdFX1JFR0lTVEVSMV9QQ0kxX1NJREUJCQkweDA5QworI2RlZmluZSBJTkJPVU5EX0RPT1JCRUxMX1JFR0lTVEVSX1BDSTFfU0lERQkJCTB4MEEwCisjZGVmaW5lIElOQk9VTkRfSU5URVJSVVBUX0NBVVNFX1JFR0lTVEVSX1BDSTFfU0lERQkJMHgwQTQKKyNkZWZpbmUgSU5CT1VORF9JTlRFUlJVUFRfTUFTS19SRUdJU1RFUl9QQ0kxX1NJREUJCTB4MEE4CisjZGVmaW5lIE9VVEJPVU5EX0RPT1JCRUxMX1JFR0lTVEVSX1BDSTFfU0lERQkJCTB4MEFDCisjZGVmaW5lIE9VVEJPVU5EX0lOVEVSUlVQVF9DQVVTRV9SRUdJU1RFUl9QQ0kxX1NJREUJCTB4MEIwCisjZGVmaW5lIE9VVEJPVU5EX0lOVEVSUlVQVF9NQVNLX1JFR0lTVEVSX1BDSTFfU0lERQkJMHgwQjQKKyNkZWZpbmUgSU5CT1VORF9RVUVVRV9QT1JUX1ZJUlRVQUxfUkVHSVNURVJfUENJMV9TSURFCQkweDBDMAorI2RlZmluZSBPVVRCT1VORF9RVUVVRV9QT1JUX1ZJUlRVQUxfUkVHSVNURVJfUENJMV9TSURFCQkweDBDNAorI2RlZmluZSBRVUVVRV9DT05UUk9MX1JFR0lTVEVSX1BDSTFfU0lERQkJCTB4MEQwCisjZGVmaW5lIFFVRVVFX0JBU0VfQUREUkVTU19SRUdJU1RFUl9QQ0kxX1NJREUJCQkweDBENAorI2RlZmluZSBJTkJPVU5EX0ZSRUVfSEVBRF9QT0lOVEVSX1JFR0lTVEVSX1BDSTFfU0lERQkJMHgwRTAKKyNkZWZpbmUgSU5CT1VORF9GUkVFX1RBSUxfUE9JTlRFUl9SRUdJU1RFUl9QQ0kxX1NJREUJCTB4MEU0CisjZGVmaW5lIElOQk9VTkRfUE9TVF9IRUFEX1BPSU5URVJfUkVHSVNURVJfUENJMV9TSURFCQkweDBFOAorI2RlZmluZSBJTkJPVU5EX1BPU1RfVEFJTF9QT0lOVEVSX1JFR0lTVEVSX1BDSTFfU0lERQkJMHgwRUMKKyNkZWZpbmUgT1VUQk9VTkRfRlJFRV9IRUFEX1BPSU5URVJfUkVHSVNURVJfUENJMV9TSURFCQkweDBGMAorI2RlZmluZSBPVVRCT1VORF9GUkVFX1RBSUxfUE9JTlRFUl9SRUdJU1RFUl9QQ0kxX1NJREUJCTB4MEY0CisjZGVmaW5lIE9VVEJPVU5EX1BPU1RfSEVBRF9QT0lOVEVSX1JFR0lTVEVSX1BDSTFfU0lERQkJMHgwNzgKKyNkZWZpbmUgT1VUQk9VTkRfUE9TVF9UQUlMX1BPSU5URVJfUkVHSVNURVJfUENJMV9TSURFCQkweDA3QworCisjZGVmaW5lIElOQk9VTkRfTUVTU0FHRV9SRUdJU1RFUjBfQ1BVMF9TSURFCQkJMFgxQzEwCisjZGVmaW5lIElOQk9VTkRfTUVTU0FHRV9SRUdJU1RFUjFfQ1BVMF9TSURFCQkJMFgxQzE0CisjZGVmaW5lIE9VVEJPVU5EX01FU1NBR0VfUkVHSVNURVIwX0NQVTBfU0lERQkJCTBYMUMxOAorI2RlZmluZSBPVVRCT1VORF9NRVNTQUdFX1JFR0lTVEVSMV9DUFUwX1NJREUJCQkwWDFDMUMKKyNkZWZpbmUgSU5CT1VORF9ET09SQkVMTF9SRUdJU1RFUl9DUFUwX1NJREUJCQkwWDFDMjAKKyNkZWZpbmUgSU5CT1VORF9JTlRFUlJVUFRfQ0FVU0VfUkVHSVNURVJfQ1BVMF9TSURFCQkwWDFDMjQKKyNkZWZpbmUgSU5CT1VORF9JTlRFUlJVUFRfTUFTS19SRUdJU1RFUl9DUFUwX1NJREUJCTBYMUMyOAorI2RlZmluZSBPVVRCT1VORF9ET09SQkVMTF9SRUdJU1RFUl9DUFUwX1NJREUJCQkwWDFDMkMKKyNkZWZpbmUgT1VUQk9VTkRfSU5URVJSVVBUX0NBVVNFX1JFR0lTVEVSX0NQVTBfU0lERQkJMFgxQzMwCisjZGVmaW5lIE9VVEJPVU5EX0lOVEVSUlVQVF9NQVNLX1JFR0lTVEVSX0NQVTBfU0lERQkJMFgxQzM0CisjZGVmaW5lIElOQk9VTkRfUVVFVUVfUE9SVF9WSVJUVUFMX1JFR0lTVEVSX0NQVTBfU0lERQkJMFgxQzQwCisjZGVmaW5lIE9VVEJPVU5EX1FVRVVFX1BPUlRfVklSVFVBTF9SRUdJU1RFUl9DUFUwX1NJREUJCTBYMUM0NAorI2RlZmluZSBRVUVVRV9DT05UUk9MX1JFR0lTVEVSX0NQVTBfU0lERQkJCTBYMUM1MAorI2RlZmluZSBRVUVVRV9CQVNFX0FERFJFU1NfUkVHSVNURVJfQ1BVMF9TSURFCQkJMFgxQzU0CisjZGVmaW5lIElOQk9VTkRfRlJFRV9IRUFEX1BPSU5URVJfUkVHSVNURVJfQ1BVMF9TSURFCQkwWDFDNjAKKyNkZWZpbmUgSU5CT1VORF9GUkVFX1RBSUxfUE9JTlRFUl9SRUdJU1RFUl9DUFUwX1NJREUJCTBYMUM2NAorI2RlZmluZSBJTkJPVU5EX1BPU1RfSEVBRF9QT0lOVEVSX1JFR0lTVEVSX0NQVTBfU0lERQkJMFgxQzY4CisjZGVmaW5lIElOQk9VTkRfUE9TVF9UQUlMX1BPSU5URVJfUkVHSVNURVJfQ1BVMF9TSURFCQkwWDFDNkMKKyNkZWZpbmUgT1VUQk9VTkRfRlJFRV9IRUFEX1BPSU5URVJfUkVHSVNURVJfQ1BVMF9TSURFCQkwWDFDNzAKKyNkZWZpbmUgT1VUQk9VTkRfRlJFRV9UQUlMX1BPSU5URVJfUkVHSVNURVJfQ1BVMF9TSURFCQkwWDFDNzQKKyNkZWZpbmUgT1VUQk9VTkRfUE9TVF9IRUFEX1BPSU5URVJfUkVHSVNURVJfQ1BVMF9TSURFCQkwWDFDRjgKKyNkZWZpbmUgT1VUQk9VTkRfUE9TVF9UQUlMX1BPSU5URVJfUkVHSVNURVJfQ1BVMF9TSURFCQkwWDFDRkMKKworI2RlZmluZSBJTkJPVU5EX01FU1NBR0VfUkVHSVNURVIwX0NQVTFfU0lERQkJCTBYMUM5MAorI2RlZmluZSBJTkJPVU5EX01FU1NBR0VfUkVHSVNURVIxX0NQVTFfU0lERQkJCTBYMUM5NAorI2RlZmluZSBPVVRCT1VORF9NRVNTQUdFX1JFR0lTVEVSMF9DUFUxX1NJREUJCQkwWDFDOTgKKyNkZWZpbmUgT1VUQk9VTkRfTUVTU0FHRV9SRUdJU1RFUjFfQ1BVMV9TSURFCQkJMFgxQzlDCisjZGVmaW5lIElOQk9VTkRfRE9PUkJFTExfUkVHSVNURVJfQ1BVMV9TSURFCQkJMFgxQ0EwCisjZGVmaW5lIElOQk9VTkRfSU5URVJSVVBUX0NBVVNFX1JFR0lTVEVSX0NQVTFfU0lERQkJMFgxQ0E0CisjZGVmaW5lIElOQk9VTkRfSU5URVJSVVBUX01BU0tfUkVHSVNURVJfQ1BVMV9TSURFCQkwWDFDQTgKKyNkZWZpbmUgT1VUQk9VTkRfRE9PUkJFTExfUkVHSVNURVJfQ1BVMV9TSURFCQkJMFgxQ0FDCisjZGVmaW5lIE9VVEJPVU5EX0lOVEVSUlVQVF9DQVVTRV9SRUdJU1RFUl9DUFUxX1NJREUJCTBYMUNCMAorI2RlZmluZSBPVVRCT1VORF9JTlRFUlJVUFRfTUFTS19SRUdJU1RFUl9DUFUxX1NJREUJCTBYMUNCNAorI2RlZmluZSBJTkJPVU5EX1FVRVVFX1BPUlRfVklSVFVBTF9SRUdJU1RFUl9DUFUxX1NJREUJCTBYMUNDMAorI2RlZmluZSBPVVRCT1VORF9RVUVVRV9QT1JUX1ZJUlRVQUxfUkVHSVNURVJfQ1BVMV9TSURFCQkwWDFDQzQKKyNkZWZpbmUgUVVFVUVfQ09OVFJPTF9SRUdJU1RFUl9DUFUxX1NJREUJCQkwWDFDRDAKKyNkZWZpbmUgUVVFVUVfQkFTRV9BRERSRVNTX1JFR0lTVEVSX0NQVTFfU0lERQkJCTBYMUNENAorI2RlZmluZSBJTkJPVU5EX0ZSRUVfSEVBRF9QT0lOVEVSX1JFR0lTVEVSX0NQVTFfU0lERQkJMFgxQ0UwCisjZGVmaW5lIElOQk9VTkRfRlJFRV9UQUlMX1BPSU5URVJfUkVHSVNURVJfQ1BVMV9TSURFCQkwWDFDRTQKKyNkZWZpbmUgSU5CT1VORF9QT1NUX0hFQURfUE9JTlRFUl9SRUdJU1RFUl9DUFUxX1NJREUJCTBYMUNFOAorI2RlZmluZSBJTkJPVU5EX1BPU1RfVEFJTF9QT0lOVEVSX1JFR0lTVEVSX0NQVTFfU0lERQkJMFgxQ0VDCisjZGVmaW5lIE9VVEJPVU5EX0ZSRUVfSEVBRF9QT0lOVEVSX1JFR0lTVEVSX0NQVTFfU0lERQkJMFgxQ0YwCisjZGVmaW5lIE9VVEJPVU5EX0ZSRUVfVEFJTF9QT0lOVEVSX1JFR0lTVEVSX0NQVTFfU0lERQkJMFgxQ0Y0CisjZGVmaW5lIE9VVEJPVU5EX1BPU1RfSEVBRF9QT0lOVEVSX1JFR0lTVEVSX0NQVTFfU0lERQkJMFgxQzc4CisjZGVmaW5lIE9VVEJPVU5EX1BPU1RfVEFJTF9QT0lOVEVSX1JFR0lTVEVSX0NQVTFfU0lERQkJMFgxQzdDCisKKy8qCisgKiBDb21tdW5pY2F0aW9uIFVuaXQgUmVnaXN0ZXJzCisgKi8KKworI2RlZmluZSBFVEhFUk5FVF8wX0FERFJFU1NfQ09OVFJPTF9MT1cKKyNkZWZpbmUgRVRIRVJORVRfMF9BRERSRVNTX0NPTlRST0xfSElHSAkJCQkweGYyMDQKKyNkZWZpbmUgRVRIRVJORVRfMF9SRUNFSVZFX0JVRkZFUl9QQ0lfSElHSF9BRERSRVNTCQkweGYyMDgKKyNkZWZpbmUgRVRIRVJORVRfMF9UUkFOU01JVF9CVUZGRVJfUENJX0hJR0hfQUREUkVTUwkJMHhmMjBjCisjZGVmaW5lIEVUSEVSTkVUXzBfUkVDRUlWRV9ERVNDUklQVE9SX1BDSV9ISUdIX0FERFJFU1MJCTB4ZjIxMAorI2RlZmluZSBFVEhFUk5FVF8wX1RSQU5TTUlUX0RFU0NSSVBUT1JfUENJX0hJR0hfQUREUkVTUwkJMHhmMjE0CisjZGVmaW5lIEVUSEVSTkVUXzBfSEFTSF9UQUJMRV9QQ0lfSElHSF9BRERSRVNTCQkJMHhmMjE4CisjZGVmaW5lIEVUSEVSTkVUXzFfQUREUkVTU19DT05UUk9MX0xPVwkJCQkweGYyMjAKKyNkZWZpbmUgRVRIRVJORVRfMV9BRERSRVNTX0NPTlRST0xfSElHSAkJCQkweGYyMjQKKyNkZWZpbmUgRVRIRVJORVRfMV9SRUNFSVZFX0JVRkZFUl9QQ0lfSElHSF9BRERSRVNTCQkweGYyMjgKKyNkZWZpbmUgRVRIRVJORVRfMV9UUkFOU01JVF9CVUZGRVJfUENJX0hJR0hfQUREUkVTUwkJMHhmMjJjCisjZGVmaW5lIEVUSEVSTkVUXzFfUkVDRUlWRV9ERVNDUklQVE9SX1BDSV9ISUdIX0FERFJFU1MJCTB4ZjIzMAorI2RlZmluZSBFVEhFUk5FVF8xX1RSQU5TTUlUX0RFU0NSSVBUT1JfUENJX0hJR0hfQUREUkVTUwkJMHhmMjM0CisjZGVmaW5lIEVUSEVSTkVUXzFfSEFTSF9UQUJMRV9QQ0lfSElHSF9BRERSRVNTCQkJMHhmMjM4CisjZGVmaW5lIEVUSEVSTkVUXzJfQUREUkVTU19DT05UUk9MX0xPVwkJCQkweGYyNDAKKyNkZWZpbmUgRVRIRVJORVRfMl9BRERSRVNTX0NPTlRST0xfSElHSAkJCQkweGYyNDQKKyNkZWZpbmUgRVRIRVJORVRfMl9SRUNFSVZFX0JVRkZFUl9QQ0lfSElHSF9BRERSRVNTCQkweGYyNDgKKyNkZWZpbmUgRVRIRVJORVRfMl9UUkFOU01JVF9CVUZGRVJfUENJX0hJR0hfQUREUkVTUwkJMHhmMjRjCisjZGVmaW5lIEVUSEVSTkVUXzJfUkVDRUlWRV9ERVNDUklQVE9SX1BDSV9ISUdIX0FERFJFU1MJCTB4ZjI1MAorI2RlZmluZSBFVEhFUk5FVF8yX1RSQU5TTUlUX0RFU0NSSVBUT1JfUENJX0hJR0hfQUREUkVTUwkJMHhmMjU0CisjZGVmaW5lIEVUSEVSTkVUXzJfSEFTSF9UQUJMRV9QQ0lfSElHSF9BRERSRVNTCQkJMHhmMjU4CisjZGVmaW5lIE1QU0NfMF9BRERSRVNTX0NPTlRST0xfTE9XCQkJCTB4ZjI4MAorI2RlZmluZSBNUFNDXzBfQUREUkVTU19DT05UUk9MX0hJR0gJCQkJMHhmMjg0CisjZGVmaW5lIE1QU0NfMF9SRUNFSVZFX0JVRkZFUl9QQ0lfSElHSF9BRERSRVNTCQkJMHhmMjg4CisjZGVmaW5lIE1QU0NfMF9UUkFOU01JVF9CVUZGRVJfUENJX0hJR0hfQUREUkVTUwkJCTB4ZjI4YworI2RlZmluZSBNUFNDXzBfUkVDRUlWRV9ERVNDUklQVE9SX1BDSV9ISUdIX0FERFJFU1MJCTB4ZjI5MAorI2RlZmluZSBNUFNDXzBfVFJBTlNNSVRfREVTQ1JJUFRPUl9QQ0lfSElHSF9BRERSRVNTCQkweGYyOTQKKyNkZWZpbmUgTVBTQ18xX0FERFJFU1NfQ09OVFJPTF9MT1cJCQkJMHhmMmEwCisjZGVmaW5lIE1QU0NfMV9BRERSRVNTX0NPTlRST0xfSElHSAkJCQkweGYyYTQKKyNkZWZpbmUgTVBTQ18xX1JFQ0VJVkVfQlVGRkVSX1BDSV9ISUdIX0FERFJFU1MJCQkweGYyYTgKKyNkZWZpbmUgTVBTQ18xX1RSQU5TTUlUX0JVRkZFUl9QQ0lfSElHSF9BRERSRVNTCQkJMHhmMmFjCisjZGVmaW5lIE1QU0NfMV9SRUNFSVZFX0RFU0NSSVBUT1JfUENJX0hJR0hfQUREUkVTUwkJMHhmMmIwCisjZGVmaW5lIE1QU0NfMV9UUkFOU01JVF9ERVNDUklQVE9SX1BDSV9ISUdIX0FERFJFU1MJCTB4ZjJiNAorI2RlZmluZSBNUFNDXzJfQUREUkVTU19DT05UUk9MX0xPVwkJCQkweGYyYzAKKyNkZWZpbmUgTVBTQ18yX0FERFJFU1NfQ09OVFJPTF9ISUdICQkJCTB4ZjJjNAorI2RlZmluZSBNUFNDXzJfUkVDRUlWRV9CVUZGRVJfUENJX0hJR0hfQUREUkVTUwkJCTB4ZjJjOAorI2RlZmluZSBNUFNDXzJfVFJBTlNNSVRfQlVGRkVSX1BDSV9ISUdIX0FERFJFU1MJCQkweGYyY2MKKyNkZWZpbmUgTVBTQ18yX1JFQ0VJVkVfREVTQ1JJUFRPUl9QQ0lfSElHSF9BRERSRVNTCQkweGYyZDAKKyNkZWZpbmUgTVBTQ18yX1RSQU5TTUlUX0RFU0NSSVBUT1JfUENJX0hJR0hfQUREUkVTUwkJMHhmMmQ0CisjZGVmaW5lIFNFUklBTF9JTklUX1BDSV9ISUdIX0FERFJFU1MJCQkJMHhmMzIwCisjZGVmaW5lIFNFUklBTF9JTklUX0xBU1RfREFUQQkJCQkJMHhmMzI0CisjZGVmaW5lIFNFUklBTF9JTklUX1NUQVRVU19BTkRfQ09OVFJPTAkJCQkweGYzMjgKKyNkZWZpbmUgQ09NTV9VTklUX0FSQklURVJfQ09OVFJPTAkJCQkweGYzMDAKKyNkZWZpbmUgQ09NTV9VTklUX0NST1NTX0JBUl9USU1FT1VUCQkJCTB4ZjMwNAorI2RlZmluZSBDT01NX1VOSVRfSU5URVJSVVBUX0NBVVNFCQkJCTB4ZjMxMAorI2RlZmluZSBDT01NX1VOSVRfSU5URVJSVVBUX01BU0sJCQkJMHhmMzE0CisjZGVmaW5lIENPTU1fVU5JVF9FUlJPUl9BRERSRVNTCQkJCQkweGYzMTQKKworLyoKKyAqIEN1bml0IERlYnVnCShmb3IgaW50ZXJuYWwgdXNlKQorICovCisKKyNkZWZpbmUgQ1VOSVRfQUREUkVTUwkJCQkJCTB4ZjM0MAorI2RlZmluZSBDVU5JVF9DT01NQU5EX0FORF9JRAkJCQkJMHhmMzQ0CisjZGVmaW5lIENVTklUX1dSSVRFX0RBVEFfTE9XCQkJCQkweGYzNDgKKyNkZWZpbmUgQ1VOSVRfV1JJVEVfREFUQV9ISUdICQkJCQkweGYzNGMKKyNkZWZpbmUgQ1VOSVRfV1JJVEVfQllURV9FTkFCTEUJCQkJCTB4ZjM1OAorI2RlZmluZSBDVU5JVF9SRUFEX0RBVEFfTE9XCQkJCQkweGYzNTAKKyNkZWZpbmUgQ1VOSVRfUkVBRF9EQVRBX0hJR0gJCQkJCTB4ZjM1NAorI2RlZmluZSBDVU5JVF9SRUFEX0lECQkJCQkJMHhmMzVjCisKKy8qCisgKiBGYXN0IEV0aGVybmV0IFVuaXQgUmVnaXN0ZXJzCisgKi8KKworLyogRXRoZXJuZXQgKi8KKworI2RlZmluZSBFVEhFUk5FVF9QSFlfQUREUkVTU19SRUdJU1RFUgkJCQkweDIwMDAKKyNkZWZpbmUgRVRIRVJORVRfU01JX1JFR0lTVEVSCQkJCQkweDIwMTAKKworLyogRXRoZXJuZXQgMCAqLworCisjZGVmaW5lIEVUSEVSTkVUMF9QT1JUX0NPTkZJR1VSQVRJT05fUkVHSVNURVIJCQkweDI0MDAKKyNkZWZpbmUgRVRIRVJORVQwX1BPUlRfQ09ORklHVVJBVElPTl9FWFRFTkRfUkVHSVNURVIJCTB4MjQwOAorI2RlZmluZSBFVEhFUk5FVDBfUE9SVF9DT01NQU5EX1JFR0lTVEVSCQkJCTB4MjQxMAorI2RlZmluZSBFVEhFUk5FVDBfUE9SVF9TVEFUVVNfUkVHSVNURVIJCQkJMHgyNDE4CisjZGVmaW5lIEVUSEVSTkVUMF9TRVJJQUxfUEFSQU1FVFJTX1JFR0lTVEVSCQkJMHgyNDIwCisjZGVmaW5lIEVUSEVSTkVUMF9IQVNIX1RBQkxFX1BPSU5URVJfUkVHSVNURVIJCQkweDI0MjgKKyNkZWZpbmUgRVRIRVJORVQwX0ZMT1dfQ09OVFJPTF9TT1VSQ0VfQUREUkVTU19MT1cJCTB4MjQzMAorI2RlZmluZSBFVEhFUk5FVDBfRkxPV19DT05UUk9MX1NPVVJDRV9BRERSRVNTX0hJR0gJCTB4MjQzOAorI2RlZmluZSBFVEhFUk5FVDBfU0RNQV9DT05GSUdVUkFUSU9OX1JFR0lTVEVSCQkJMHgyNDQwCisjZGVmaW5lIEVUSEVSTkVUMF9TRE1BX0NPTU1BTkRfUkVHSVNURVIJCQkJMHgyNDQ4CisjZGVmaW5lIEVUSEVSTkVUMF9JTlRFUlJVUFRfQ0FVU0VfUkVHSVNURVIJCQkweDI0NTAKKyNkZWZpbmUgRVRIRVJORVQwX0lOVEVSUlVQVF9NQVNLX1JFR0lTVEVSCQkJMHgyNDU4CisjZGVmaW5lIEVUSEVSTkVUMF9GSVJTVF9SWF9ERVNDUklQVE9SX1BPSU5URVIwCQkJMHgyNDgwCisjZGVmaW5lIEVUSEVSTkVUMF9GSVJTVF9SWF9ERVNDUklQVE9SX1BPSU5URVIxCQkJMHgyNDg0CisjZGVmaW5lIEVUSEVSTkVUMF9GSVJTVF9SWF9ERVNDUklQVE9SX1BPSU5URVIyCQkJMHgyNDg4CisjZGVmaW5lIEVUSEVSTkVUMF9GSVJTVF9SWF9ERVNDUklQVE9SX1BPSU5URVIzCQkJMHgyNDhjCisjZGVmaW5lIEVUSEVSTkVUMF9DVVJSRU5UX1JYX0RFU0NSSVBUT1JfUE9JTlRFUjAJCTB4MjRhMAorI2RlZmluZSBFVEhFUk5FVDBfQ1VSUkVOVF9SWF9ERVNDUklQVE9SX1BPSU5URVIxCQkweDI0YTQKKyNkZWZpbmUgRVRIRVJORVQwX0NVUlJFTlRfUlhfREVTQ1JJUFRPUl9QT0lOVEVSMgkJMHgyNGE4CisjZGVmaW5lIEVUSEVSTkVUMF9DVVJSRU5UX1JYX0RFU0NSSVBUT1JfUE9JTlRFUjMJCTB4MjRhYworI2RlZmluZSBFVEhFUk5FVDBfQ1VSUkVOVF9UWF9ERVNDUklQVE9SX1BPSU5URVIwCQkweDI0ZTAKKyNkZWZpbmUgRVRIRVJORVQwX0NVUlJFTlRfVFhfREVTQ1JJUFRPUl9QT0lOVEVSMQkJMHgyNGU0CisjZGVmaW5lIEVUSEVSTkVUMF9NSUJfQ09VTlRFUl9CQVNFCQkJCTB4MjUwMAorCisvKiBFdGhlcm5ldCAxICovCisKKyNkZWZpbmUgRVRIRVJORVQxX1BPUlRfQ09ORklHVVJBVElPTl9SRUdJU1RFUgkJCTB4MjgwMAorI2RlZmluZSBFVEhFUk5FVDFfUE9SVF9DT05GSUdVUkFUSU9OX0VYVEVORF9SRUdJU1RFUgkJMHgyODA4CisjZGVmaW5lIEVUSEVSTkVUMV9QT1JUX0NPTU1BTkRfUkVHSVNURVIJCQkJMHgyODEwCisjZGVmaW5lIEVUSEVSTkVUMV9QT1JUX1NUQVRVU19SRUdJU1RFUgkJCQkweDI4MTgKKyNkZWZpbmUgRVRIRVJORVQxX1NFUklBTF9QQVJBTUVUUlNfUkVHSVNURVIJCQkweDI4MjAKKyNkZWZpbmUgRVRIRVJORVQxX0hBU0hfVEFCTEVfUE9JTlRFUl9SRUdJU1RFUgkJCTB4MjgyOAorI2RlZmluZSBFVEhFUk5FVDFfRkxPV19DT05UUk9MX1NPVVJDRV9BRERSRVNTX0xPVwkJMHgyODMwCisjZGVmaW5lIEVUSEVSTkVUMV9GTE9XX0NPTlRST0xfU09VUkNFX0FERFJFU1NfSElHSAkJMHgyODM4CisjZGVmaW5lIEVUSEVSTkVUMV9TRE1BX0NPTkZJR1VSQVRJT05fUkVHSVNURVIJCQkweDI4NDAKKyNkZWZpbmUgRVRIRVJORVQxX1NETUFfQ09NTUFORF9SRUdJU1RFUgkJCQkweDI4NDgKKyNkZWZpbmUgRVRIRVJORVQxX0lOVEVSUlVQVF9DQVVTRV9SRUdJU1RFUgkJCTB4Mjg1MAorI2RlZmluZSBFVEhFUk5FVDFfSU5URVJSVVBUX01BU0tfUkVHSVNURVIJCQkweDI4NTgKKyNkZWZpbmUgRVRIRVJORVQxX0ZJUlNUX1JYX0RFU0NSSVBUT1JfUE9JTlRFUjAJCQkweDI4ODAKKyNkZWZpbmUgRVRIRVJORVQxX0ZJUlNUX1JYX0RFU0NSSVBUT1JfUE9JTlRFUjEJCQkweDI4ODQKKyNkZWZpbmUgRVRIRVJORVQxX0ZJUlNUX1JYX0RFU0NSSVBUT1JfUE9JTlRFUjIJCQkweDI4ODgKKyNkZWZpbmUgRVRIRVJORVQxX0ZJUlNUX1JYX0RFU0NSSVBUT1JfUE9JTlRFUjMJCQkweDI4OGMKKyNkZWZpbmUgRVRIRVJORVQxX0NVUlJFTlRfUlhfREVTQ1JJUFRPUl9QT0lOVEVSMAkJMHgyOGEwCisjZGVmaW5lIEVUSEVSTkVUMV9DVVJSRU5UX1JYX0RFU0NSSVBUT1JfUE9JTlRFUjEJCTB4MjhhNAorI2RlZmluZSBFVEhFUk5FVDFfQ1VSUkVOVF9SWF9ERVNDUklQVE9SX1BPSU5URVIyCQkweDI4YTgKKyNkZWZpbmUgRVRIRVJORVQxX0NVUlJFTlRfUlhfREVTQ1JJUFRPUl9QT0lOVEVSMwkJMHgyOGFjCisjZGVmaW5lIEVUSEVSTkVUMV9DVVJSRU5UX1RYX0RFU0NSSVBUT1JfUE9JTlRFUjAJCTB4MjhlMAorI2RlZmluZSBFVEhFUk5FVDFfQ1VSUkVOVF9UWF9ERVNDUklQVE9SX1BPSU5URVIxCQkweDI4ZTQKKyNkZWZpbmUgRVRIRVJORVQxX01JQl9DT1VOVEVSX0JBU0UJCQkJMHgyOTAwCisKKy8qIEV0aGVybmV0IDIgKi8KKworI2RlZmluZSBFVEhFUk5FVDJfUE9SVF9DT05GSUdVUkFUSU9OX1JFR0lTVEVSCQkJMHgyYzAwCisjZGVmaW5lIEVUSEVSTkVUMl9QT1JUX0NPTkZJR1VSQVRJT05fRVhURU5EX1JFR0lTVEVSCQkweDJjMDgKKyNkZWZpbmUgRVRIRVJORVQyX1BPUlRfQ09NTUFORF9SRUdJU1RFUgkJCQkweDJjMTAKKyNkZWZpbmUgRVRIRVJORVQyX1BPUlRfU1RBVFVTX1JFR0lTVEVSCQkJCTB4MmMxOAorI2RlZmluZSBFVEhFUk5FVDJfU0VSSUFMX1BBUkFNRVRSU19SRUdJU1RFUgkJCTB4MmMyMAorI2RlZmluZSBFVEhFUk5FVDJfSEFTSF9UQUJMRV9QT0lOVEVSX1JFR0lTVEVSCQkJMHgyYzI4CisjZGVmaW5lIEVUSEVSTkVUMl9GTE9XX0NPTlRST0xfU09VUkNFX0FERFJFU1NfTE9XCQkweDJjMzAKKyNkZWZpbmUgRVRIRVJORVQyX0ZMT1dfQ09OVFJPTF9TT1VSQ0VfQUREUkVTU19ISUdICQkweDJjMzgKKyNkZWZpbmUgRVRIRVJORVQyX1NETUFfQ09ORklHVVJBVElPTl9SRUdJU1RFUgkJCTB4MmM0MAorI2RlZmluZSBFVEhFUk5FVDJfU0RNQV9DT01NQU5EX1JFR0lTVEVSCQkJCTB4MmM0OAorI2RlZmluZSBFVEhFUk5FVDJfSU5URVJSVVBUX0NBVVNFX1JFR0lTVEVSCQkJMHgyYzUwCisjZGVmaW5lIEVUSEVSTkVUMl9JTlRFUlJVUFRfTUFTS19SRUdJU1RFUgkJCTB4MmM1OAorI2RlZmluZSBFVEhFUk5FVDJfRklSU1RfUlhfREVTQ1JJUFRPUl9QT0lOVEVSMAkJCTB4MmM4MAorI2RlZmluZSBFVEhFUk5FVDJfRklSU1RfUlhfREVTQ1JJUFRPUl9QT0lOVEVSMQkJCTB4MmM4NAorI2RlZmluZSBFVEhFUk5FVDJfRklSU1RfUlhfREVTQ1JJUFRPUl9QT0lOVEVSMgkJCTB4MmM4OAorI2RlZmluZSBFVEhFUk5FVDJfRklSU1RfUlhfREVTQ1JJUFRPUl9QT0lOVEVSMwkJCTB4MmM4YworI2RlZmluZSBFVEhFUk5FVDJfQ1VSUkVOVF9SWF9ERVNDUklQVE9SX1BPSU5URVIwCQkweDJjYTAKKyNkZWZpbmUgRVRIRVJORVQyX0NVUlJFTlRfUlhfREVTQ1JJUFRPUl9QT0lOVEVSMQkJMHgyY2E0CisjZGVmaW5lIEVUSEVSTkVUMl9DVVJSRU5UX1JYX0RFU0NSSVBUT1JfUE9JTlRFUjIJCTB4MmNhOAorI2RlZmluZSBFVEhFUk5FVDJfQ1VSUkVOVF9SWF9ERVNDUklQVE9SX1BPSU5URVIzCQkweDJjYWMKKyNkZWZpbmUgRVRIRVJORVQyX0NVUlJFTlRfVFhfREVTQ1JJUFRPUl9QT0lOVEVSMAkJMHgyY2UwCisjZGVmaW5lIEVUSEVSTkVUMl9DVVJSRU5UX1RYX0RFU0NSSVBUT1JfUE9JTlRFUjEJCTB4MmNlNAorI2RlZmluZSBFVEhFUk5FVDJfTUlCX0NPVU5URVJfQkFTRQkJCQkweDJkMDAKKworLyoKKyAqIFNETUEgUmVnaXN0ZXJzCisgKi8KKworI2RlZmluZSBTRE1BX0dST1VQX0NPTkZJR1VSQVRJT05fUkVHSVNURVIJCQkweGIxZjAKKyNkZWZpbmUgQ0hBTk5FTDBfQ09ORklHVVJBVElPTl9SRUdJU1RFUgkJCQkweDQwMDAKKyNkZWZpbmUgQ0hBTk5FTDBfQ09NTUFORF9SRUdJU1RFUgkJCQkweDQwMDgKKyNkZWZpbmUgQ0hBTk5FTDBfUlhfQ01EX1NUQVRVUwkJCQkJMHg0ODAwCisjZGVmaW5lIENIQU5ORUwwX1JYX1BBQ0tFVF9BTkRfQlVGRkVSX1NJWkVTCQkJMHg0ODA0CisjZGVmaW5lIENIQU5ORUwwX1JYX0JVRkZFUl9QT0lOVEVSCQkJCTB4NDgwOAorI2RlZmluZSBDSEFOTkVMMF9SWF9ORVhUX1BPSU5URVIJCQkJMHg0ODBjCisjZGVmaW5lIENIQU5ORUwwX0NVUlJFTlRfUlhfREVTQ1JJUFRPUl9QT0lOVEVSCQkJMHg0ODEwCisjZGVmaW5lIENIQU5ORUwwX1RYX0NNRF9TVEFUVVMJCQkJCTB4NEMwMAorI2RlZmluZSBDSEFOTkVMMF9UWF9QQUNLRVRfU0laRQkJCQkJMHg0QzA0CisjZGVmaW5lIENIQU5ORUwwX1RYX0JVRkZFUl9QT0lOVEVSCQkJCTB4NEMwOAorI2RlZmluZSBDSEFOTkVMMF9UWF9ORVhUX1BPSU5URVIJCQkJMHg0QzBjCisjZGVmaW5lIENIQU5ORUwwX0NVUlJFTlRfVFhfREVTQ1JJUFRPUl9QT0lOVEVSCQkJMHg0YzEwCisjZGVmaW5lIENIQU5ORUwwX0ZJUlNUX1RYX0RFU0NSSVBUT1JfUE9JTlRFUgkJCTB4NGMxNAorI2RlZmluZSBDSEFOTkVMMV9DT05GSUdVUkFUSU9OX1JFR0lTVEVSCQkJCTB4NjAwMAorI2RlZmluZSBDSEFOTkVMMV9DT01NQU5EX1JFR0lTVEVSCQkJCTB4NjAwOAorI2RlZmluZSBDSEFOTkVMMV9SWF9DTURfU1RBVFVTCQkJCQkweDY4MDAKKyNkZWZpbmUgQ0hBTk5FTDFfUlhfUEFDS0VUX0FORF9CVUZGRVJfU0laRVMJCQkweDY4MDQKKyNkZWZpbmUgQ0hBTk5FTDFfUlhfQlVGRkVSX1BPSU5URVIJCQkJMHg2ODA4CisjZGVmaW5lIENIQU5ORUwxX1JYX05FWFRfUE9JTlRFUgkJCQkweDY4MGMKKyNkZWZpbmUgQ0hBTk5FTDFfQ1VSUkVOVF9SWF9ERVNDUklQVE9SX1BPSU5URVIJCQkweDY4MTAKKyNkZWZpbmUgQ0hBTk5FTDFfVFhfQ01EX1NUQVRVUwkJCQkJMHg2QzAwCisjZGVmaW5lIENIQU5ORUwxX1RYX1BBQ0tFVF9TSVpFCQkJCQkweDZDMDQKKyNkZWZpbmUgQ0hBTk5FTDFfVFhfQlVGRkVSX1BPSU5URVIJCQkJMHg2QzA4CisjZGVmaW5lIENIQU5ORUwxX1RYX05FWFRfUE9JTlRFUgkJCQkweDZDMGMKKyNkZWZpbmUgQ0hBTk5FTDFfQ1VSUkVOVF9SWF9ERVNDUklQVE9SX1BPSU5URVIJCQkweDY4MTAKKyNkZWZpbmUgQ0hBTk5FTDFfQ1VSUkVOVF9UWF9ERVNDUklQVE9SX1BPSU5URVIJCQkweDZjMTAKKyNkZWZpbmUgQ0hBTk5FTDFfRklSU1RfVFhfREVTQ1JJUFRPUl9QT0lOVEVSCQkJMHg2YzE0CisKKy8qIFNETUEgSW50ZXJydXB0ICovCisKKyNkZWZpbmUgU0RNQV9DQVVTRQkJCQkJCTB4YjgyMAorI2RlZmluZSBTRE1BX01BU0sJCQkJCQkweGI4YTAKKworCisvKgorICogQmF1ZGUgUmF0ZSBHZW5lcmF0b3JzIFJlZ2lzdGVycworICovCisKKy8qIEJSRyAwICovCisKKyNkZWZpbmUgQlJHMF9DT05GSUdVUkFUSU9OX1JFR0lTVEVSCQkJCTB4YjIwMAorI2RlZmluZSBCUkcwX0JBVURFX1RVTklOR19SRUdJU1RFUgkJCQkweGIyMDQKKworLyogQlJHIDEgKi8KKworI2RlZmluZSBCUkcxX0NPTkZJR1VSQVRJT05fUkVHSVNURVIJCQkJMHhiMjA4CisjZGVmaW5lIEJSRzFfQkFVREVfVFVOSU5HX1JFR0lTVEVSCQkJCTB4YjIwYworCisvKiBCUkcgMiAqLworCisjZGVmaW5lIEJSRzJfQ09ORklHVVJBVElPTl9SRUdJU1RFUgkJCQkweGIyMTAKKyNkZWZpbmUgQlJHMl9CQVVERV9UVU5JTkdfUkVHSVNURVIJCQkJMHhiMjE0CisKKy8qIEJSRyBJbnRlcnJ1cHRzICovCisKKyNkZWZpbmUgQlJHX0NBVVNFX1JFR0lTVEVSCQkJCQkweGI4MzQKKyNkZWZpbmUgQlJHX01BU0tfUkVHSVNURVIJCQkJCTB4YjhiNAorCisvKiBNSVNDICovCisKKyNkZWZpbmUgTUFJTl9ST1VUSU5HX1JFR0lTVEVSCQkJCQkweGI0MDAKKyNkZWZpbmUgUkVDRUlWRV9DTE9DS19ST1VUSU5HX1JFR0lTVEVSCQkJCTB4YjQwNAorI2RlZmluZSBUUkFOU01JVF9DTE9DS19ST1VUSU5HX1JFR0lTVEVSCQkJCTB4YjQwOAorI2RlZmluZSBDT01NX1VOSVRfQVJCSVRFUl9DT05GSUdVUkFUSU9OX1JFR0lTVEVSCQkweGI0MGMKKyNkZWZpbmUgV0FUQ0hET0dfQ09ORklHVVJBVElPTl9SRUdJU1RFUgkJCQkweGI0MTAKKyNkZWZpbmUgV0FUQ0hET0dfVkFMVUVfUkVHSVNURVIJCQkJCTB4YjQxNAorCisKKy8qCisgKiBGbGV4IFRETSBSZWdpc3RlcnMKKyAqLworCisvKiBGVERNIFBvcnQgKi8KKworI2RlZmluZSBGTEVYVERNX1RSQU5TTUlUX1JFQURfUE9JTlRFUgkJCQkweGE4MDAKKyNkZWZpbmUgRkxFWFRETV9SRUNFSVZFX1JFQURfUE9JTlRFUgkJCQkweGE4MDQKKyNkZWZpbmUgRkxFWFRETV9DT05GSUdVUkFUSU9OX1JFR0lTVEVSCQkJCTB4YTgwOAorI2RlZmluZSBGTEVYVERNX0FVWF9DSEFOTkVMQV9UWF9SRUdJU1RFUgkJCTB4YTgwYworI2RlZmluZSBGTEVYVERNX0FVWF9DSEFOTkVMQV9SWF9SRUdJU1RFUgkJCTB4YTgxMAorI2RlZmluZSBGTEVYVERNX0FVWF9DSEFOTkVMQl9UWF9SRUdJU1RFUgkJCTB4YTgxNAorI2RlZmluZSBGTEVYVERNX0FVWF9DSEFOTkVMQl9SWF9SRUdJU1RFUgkJCTB4YTgxOAorCisvKiBGVERNIEludGVycnVwdHMgKi8KKworI2RlZmluZSBGVERNX0NBVVNFX1JFR0lTVEVSCQkJCQkweGI4MzAKKyNkZWZpbmUgRlRETV9NQVNLX1JFR0lTVEVSCQkJCQkweGI4YjAKKworCisvKgorICogR1BQIEludGVyZmFjZSBSZWdpc3RlcnMKKyAqLworCisjZGVmaW5lIEdQUF9JT19DT05UUk9MCQkJCQkJMHhmMTAwCisjZGVmaW5lIEdQUF9MRVZFTF9DT05UUk9MCQkJCQkweGYxMTAKKyNkZWZpbmUgR1BQX1ZBTFVFCQkJCQkJMHhmMTA0CisjZGVmaW5lIEdQUF9JTlRFUlJVUFRfQ0FVU0UJCQkJCTB4ZjEwOAorI2RlZmluZSBHUFBfSU5URVJSVVBUX01BU0sJCQkJCTB4ZjEwYworCisjZGVmaW5lIE1QUF9DT05UUk9MMAkJCQkJCTB4ZjAwMAorI2RlZmluZSBNUFBfQ09OVFJPTDEJCQkJCQkweGYwMDQKKyNkZWZpbmUgTVBQX0NPTlRST0wyCQkJCQkJMHhmMDA4CisjZGVmaW5lIE1QUF9DT05UUk9MMwkJCQkJCTB4ZjAwYworI2RlZmluZSBERUJVR19QT1JUX01VTFRJUExFWAkJCQkJMHhmMDE0CisjZGVmaW5lIFNFUklBTF9QT1JUX01VTFRJUExFWAkJCQkJMHhmMDEwCisKKy8qCisgKiBJMkMgUmVnaXN0ZXJzCisgKi8KKworI2RlZmluZSBJMkNfU0xBVkVfQUREUkVTUwkJCQkJMHhjMDAwCisjZGVmaW5lIEkyQ19FWFRFTkRFRF9TTEFWRV9BRERSRVNTCQkJCTB4YzA0MAorI2RlZmluZSBJMkNfREFUQQkJCQkJCTB4YzAwNAorI2RlZmluZSBJMkNfQ09OVFJPTAkJCQkJCTB4YzAwOAorI2RlZmluZSBJMkNfU1RBVFVTX0JBVURFX1JBVEUJCQkJCTB4YzAwQworI2RlZmluZSBJMkNfU09GVF9SRVNFVAkJCQkJCTB4YzAxYworCisvKgorICogTVBTQyBSZWdpc3RlcnMKKyAqLworCisvKgorICogTVBTQzAKKyAqLworCisjZGVmaW5lIE1QU0MwX01BSU5fQ09ORklHVVJBVElPTl9MT1cJCQkJMHg4MDAwCisjZGVmaW5lIE1QU0MwX01BSU5fQ09ORklHVVJBVElPTl9ISUdICQkJCTB4ODAwNAorI2RlZmluZSBNUFNDMF9QUk9UT0NPTF9DT05GSUdVUkFUSU9OCQkJCTB4ODAwOAorI2RlZmluZSBDSEFOTkVMMF9SRUdJU1RFUjEJCQkJCTB4ODAwYworI2RlZmluZSBDSEFOTkVMMF9SRUdJU1RFUjIJCQkJCTB4ODAxMAorI2RlZmluZSBDSEFOTkVMMF9SRUdJU1RFUjMJCQkJCTB4ODAxNAorI2RlZmluZSBDSEFOTkVMMF9SRUdJU1RFUjQJCQkJCTB4ODAxOAorI2RlZmluZSBDSEFOTkVMMF9SRUdJU1RFUjUJCQkJCTB4ODAxYworI2RlZmluZSBDSEFOTkVMMF9SRUdJU1RFUjYJCQkJCTB4ODAyMAorI2RlZmluZSBDSEFOTkVMMF9SRUdJU1RFUjcJCQkJCTB4ODAyNAorI2RlZmluZSBDSEFOTkVMMF9SRUdJU1RFUjgJCQkJCTB4ODAyOAorI2RlZmluZSBDSEFOTkVMMF9SRUdJU1RFUjkJCQkJCTB4ODAyYworI2RlZmluZSBDSEFOTkVMMF9SRUdJU1RFUjEwCQkJCQkweDgwMzAKKyNkZWZpbmUgQ0hBTk5FTDBfUkVHSVNURVIxMQkJCQkJMHg4MDM0CisKKy8qCisgKiBNUFNDMQorICovCisKKyNkZWZpbmUgTVBTQzFfTUFJTl9DT05GSUdVUkFUSU9OX0xPVwkJCQkweDkwMDAKKyNkZWZpbmUgTVBTQzFfTUFJTl9DT05GSUdVUkFUSU9OX0hJR0gJCQkJMHg5MDA0CisjZGVmaW5lIE1QU0MxX1BST1RPQ09MX0NPTkZJR1VSQVRJT04JCQkJMHg5MDA4CisjZGVmaW5lIENIQU5ORUwxX1JFR0lTVEVSMQkJCQkJMHg5MDBjCisjZGVmaW5lIENIQU5ORUwxX1JFR0lTVEVSMgkJCQkJMHg5MDEwCisjZGVmaW5lIENIQU5ORUwxX1JFR0lTVEVSMwkJCQkJMHg5MDE0CisjZGVmaW5lIENIQU5ORUwxX1JFR0lTVEVSNAkJCQkJMHg5MDE4CisjZGVmaW5lIENIQU5ORUwxX1JFR0lTVEVSNQkJCQkJMHg5MDFjCisjZGVmaW5lIENIQU5ORUwxX1JFR0lTVEVSNgkJCQkJMHg5MDIwCisjZGVmaW5lIENIQU5ORUwxX1JFR0lTVEVSNwkJCQkJMHg5MDI0CisjZGVmaW5lIENIQU5ORUwxX1JFR0lTVEVSOAkJCQkJMHg5MDI4CisjZGVmaW5lIENIQU5ORUwxX1JFR0lTVEVSOQkJCQkJMHg5MDJjCisjZGVmaW5lIENIQU5ORUwxX1JFR0lTVEVSMTAJCQkJCTB4OTAzMAorI2RlZmluZSBDSEFOTkVMMV9SRUdJU1RFUjExCQkJCQkweDkwMzQKKworLyoKKyAqIE1QU0NzIEludGVydXB0cworICovCisKKyNkZWZpbmUgTVBTQzBfQ0FVU0UJCQkJCQkweGI4MDQKKyNkZWZpbmUgTVBTQzBfTUFTSwkJCQkJCTB4Yjg4NAorI2RlZmluZSBNUFNDMV9DQVVTRQkJCQkJCTB4YjgwYworI2RlZmluZSBNUFNDMV9NQVNLCQkJCQkJMHhiODhjCisKKyNlbmRpZgkvKiBfX0FTTV9NSVBTX01WNjQyNDBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9oYXJkaXJxLmggYi9pbmNsdWRlL2FzbS1taXBzL2hhcmRpcnEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGJmMzk5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9oYXJkaXJxLmgKQEAgLTAsMCArMSwyNCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NywgOTgsIDk5LCAyMDAwLCAwMSwgMDUgUmFsZiBCYWVjaGxlIChyYWxmQGxpbnV4LW1pcHMub3JnKQorICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwIFNpbGljb24gR3JhcGhpY3MsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMSBNSVBTIFRlY2hub2xvZ2llcywgSW5jLgorICovCisjaWZuZGVmIF9BU01fSEFSRElSUV9ICisjZGVmaW5lIF9BU01fSEFSRElSUV9ICisKKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQgX19zb2Z0aXJxX3BlbmRpbmc7Cit9IF9fX19jYWNoZWxpbmVfYWxpZ25lZCBpcnFfY3B1c3RhdF90OworCisjaW5jbHVkZSA8bGludXgvaXJxX2NwdXN0YXQuaD4JLyogU3RhbmRhcmQgbWFwcGluZ3MgZm9yIGlycV9jcHVzdGF0X3QgYWJvdmUgKi8KKworZXh0ZXJuIHZvaWQgYWNrX2JhZF9pcnEodW5zaWduZWQgaW50IGlycSk7CisKKyNlbmRpZiAvKiBfQVNNX0hBUkRJUlFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9oYXphcmRzLmggYi9pbmNsdWRlL2FzbS1taXBzL2hhemFyZHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTI0ZWFjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9oYXphcmRzLmgKQEAgLTAsMCArMSwyMTcgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQgUmFsZiBCYWVjaGxlCisgKi8KKyNpZm5kZWYgX0FTTV9IQVpBUkRTX0gKKyNkZWZpbmUgX0FTTV9IQVpBUkRTX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjaWZkZWYgX19BU1NFTUJMWV9fCisKKwkubWFjcm8JX3Nzbm9wCisJc2xsCSQwLCAkMCwgMQorCS5lbmRtCisKKwkubWFjcm8JX2VoYgorCXNsbAkkMCwgJDAsIDMKKwkuZW5kbQorCisvKgorICogUk05MDAwIGhhemFyZHMuICBXaGVuIHRoZSBKVExCIGlzIHVwZGF0ZWQgYnkgdGxid2kgb3IgdGxid3IsIGEgc3Vic2VxdWVudAorICogdXNlIG9mIHRoZSBKVExCIGZvciBpbnN0cnVjdGlvbnMgc2hvdWxkIG5vdCBvY2N1ciBmb3IgNCBjcHUgY3ljbGVzIGFuZCB1c2UKKyAqIGZvciBkYXRhIHRyYW5zbGF0aW9ucyBzaG91bGQgbm90IG9jY3VyIGZvciAzIGNwdSBjeWNsZXMuCisgKi8KKyNpZmRlZiBDT05GSUdfQ1BVX1JNOTAwMAorCisJLm1hY3JvCW10YzBfdGxid19oYXphcmQKKwkuc2V0CXB1c2gKKwkuc2V0CW1pcHMzMgorCV9zc25vcDsgX3Nzbm9wOyBfc3Nub3A7IF9zc25vcAorCS5zZXQJcG9wCisJLmVuZG0KKworCS5tYWNybwl0bGJ3X2VyZXRfaGF6YXJkCisJLnNldAlwdXNoCisJLnNldAltaXBzMzIKKwlfc3Nub3A7IF9zc25vcDsgX3Nzbm9wOyBfc3Nub3AKKwkuc2V0CXBvcAorCS5lbmRtCisKKyNlbHNlCisKKy8qCisgKiBUaGUgdGFrZW4gYnJhbmNoIHdpbGwgcmVzdWx0IGluIGEgdHdvIGN5Y2xlIHBlbmFsdHkgZm9yIHRoZSB0d28ga2lsbGVkCisgKiBpbnN0cnVjdGlvbnMgb24gUjQwMDAgLyBSNDQwMC4gIE90aGVyIHByb2Nlc3NvcnMgb25seSBoYXZlIGEgc2luZ2xlIGN5Y2xlCisgKiBoYXphcmQgc28gdGhpcyBpcyBuaWNlIHRyaWNrIHRvIGhhdmUgYW4gb3B0aW1hbCBjb2RlIGZvciBhIHJhbmdlIG9mCisgKiBwcm9jZXNzb3JzLgorICovCisJLm1hY3JvCW10YzBfdGxid19oYXphcmQKKwliCS4gKyA4CisJLmVuZG0KKworCS5tYWNybwl0bGJ3X2VyZXRfaGF6YXJkCisJLmVuZG0KKyNlbmRpZgorCisvKgorICogbXRjMC0+bWZjMCBoYXphcmQKKyAqIFRoZSAyNEsgaGFzIGEgMiBjeWNsZSBtdGMwL21mYzAgZXhlY3V0aW9uIGhhemFyZC4KKyAqIEl0IGlzIGEgTUlQUzMyUjIgcHJvY2Vzc29yIHNvIGVoYiB3aWxsIGNsZWFyIHRoZSBoYXphcmQuCisgKi8KKworI2lmZGVmIENPTkZJR19DUFVfTUlQU1IyCisvKgorICogVXNlIGEgbWFjcm8gZm9yIGVoYiB1bmxlc3MgZXhwbGljaXQgc3VwcG9ydCBmb3IgTUlQU1IyIGlzIGVuYWJsZWQKKyAqLworCisjZGVmaW5lIGlycV9lbmFibGVfaGF6YXJkCisJX2VoYgorCisjZGVmaW5lIGlycV9kaXNhYmxlX2hhemFyZAorCV9laGIKKworI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1IxMDAwMCkgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1JNOTAwMCkKKworLyoKKyAqIFIxMDAwMCByb2NrcyAtIGFsbCBoYXphcmRzIGhhbmRsZWQgaW4gaGFyZHdhcmUsIHNvIHRoaXMgYmVjb21lcyBhIG5vYnJhaW5lci4KKyAqLworCisjZGVmaW5lIGlycV9lbmFibGVfaGF6YXJkCisKKyNkZWZpbmUgaXJxX2Rpc2FibGVfaGF6YXJkCisKKyNlbHNlCisKKy8qCisgKiBDbGFzc2ljIE1JUFMgbmVlZHMgMSAtIDMgbm9wcyBvciBzc25vcHMKKyAqLworI2RlZmluZSBpcnFfZW5hYmxlX2hhemFyZAorI2RlZmluZSBpcnFfZGlzYWJsZV9oYXphcmQJCQkJCQlcCisJX3Nzbm9wOyBfc3Nub3A7IF9zc25vcAorCisjZW5kaWYKKworI2Vsc2UgLyogX19BU1NFTUJMWV9fICovCisKK19fYXNtX18oCisJIgkubWFjcm8JX3Nzbm9wCQkJCQlcblx0IgorCSIJc2xsCSQwLCAkMiwgMQkJCQlcblx0IgorCSIJLmVuZG0JCQkJCQlcblx0IgorCSIJCQkJCQkJXG5cdCIKKwkiCS5tYWNybwlfZWhiCQkJCQlcblx0IgorCSIJc2xsCSQwLCAkMCwgMwkJCQlcblx0IgorCSIJLmVuZG0JCQkJCQlcblx0Iik7CisKKyNpZmRlZiBDT05GSUdfQ1BVX1JNOTAwMAorLyoKKyAqIFJNOTAwMCBoYXphcmRzLiAgV2hlbiB0aGUgSlRMQiBpcyB1cGRhdGVkIGJ5IHRsYndpIG9yIHRsYndyLCBhIHN1YnNlcXVlbnQKKyAqIHVzZSBvZiB0aGUgSlRMQiBmb3IgaW5zdHJ1Y3Rpb25zIHNob3VsZCBub3Qgb2NjdXIgZm9yIDQgY3B1IGN5Y2xlcyBhbmQgdXNlCisgKiBmb3IgZGF0YSB0cmFuc2xhdGlvbnMgc2hvdWxkIG5vdCBvY2N1ciBmb3IgMyBjcHUgY3ljbGVzLgorICovCisKKyNkZWZpbmUgbXRjMF90bGJ3X2hhemFyZCgpCQkJCQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCVwKKwkJIi5zZXRcdG1pcHMzMlxuXHQiCQkJCQlcCisJCSJfc3Nub3A7IF9zc25vcDsgX3Nzbm9wOyBfc3Nub3Bcblx0IgkJCVwKKwkJIi5zZXRcdG1pcHMwIikKKworI2RlZmluZSB0bGJ3X3VzZV9oYXphcmQoKQkJCQkJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQlcCisJCSIuc2V0XHRtaXBzMzJcblx0IgkJCQkJXAorCQkiX3Nzbm9wOyBfc3Nub3A7IF9zc25vcDsgX3Nzbm9wXG5cdCIJCQlcCisJCSIuc2V0XHRtaXBzMCIpCisjZWxzZQorCisvKgorICogT3ZlcmtpbGwgd2FybmluZyAuLi4KKyAqLworI2RlZmluZSBtdGMwX3RsYndfaGF6YXJkKCkJCQkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAorCQkiLnNldCBub3Jlb3JkZXJcblx0IgkJCQkJXAorCQkibm9wOyBub3A7IG5vcDsgbm9wOyBub3A7IG5vcDtcblx0IgkJCVwKKwkJIi5zZXQgcmVvcmRlclxuXHQiKQorCisjZGVmaW5lIHRsYndfdXNlX2hhemFyZCgpCQkJCQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCVwKKwkJIi5zZXQgbm9yZW9yZGVyXG5cdCIJCQkJCVwKKwkJIm5vcDsgbm9wOyBub3A7IG5vcDsgbm9wOyBub3A7XG5cdCIJCQlcCisJCSIuc2V0IHJlb3JkZXJcblx0IikKKworI2VuZGlmCisKKy8qCisgKiBtdGMwLT5tZmMwIGhhemFyZAorICogVGhlIDI0SyBoYXMgYSAyIGN5Y2xlIG10YzAvbWZjMCBleGVjdXRpb24gaGF6YXJkLgorICogSXQgaXMgYSBNSVBTMzJSMiBwcm9jZXNzb3Igc28gZWhiIHdpbGwgY2xlYXIgdGhlIGhhemFyZC4KKyAqLworCisjaWZkZWYgQ09ORklHX0NQVV9NSVBTUjIKKy8qCisgKiBVc2UgYSBtYWNybyBmb3IgZWhiIHVubGVzcyBleHBsaWNpdCBzdXBwb3J0IGZvciBNSVBTUjIgaXMgZW5hYmxlZAorICovCitfX2FzbV9fKAorCSIJLm1hY3JvXHRpcnFfZW5hYmxlX2hhemFyZAkJCVxuXHQiCisJIglfZWhiCQkJCQkJXG5cdCIKKwkiCS5lbmRtCQkJCQkJXG5cdCIKKwkiCQkJCQkJCVxuXHQiCisJIgkubWFjcm9cdGlycV9kaXNhYmxlX2hhemFyZAkJCVxuXHQiCisJIglfZWhiCQkJCQkJXG5cdCIKKwkiCS5lbmRtIik7CisKKyNkZWZpbmUgaXJxX2VuYWJsZV9oYXphcmQoKQkJCQkJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQlcCisJIl9laGJcdFx0XHRcdCMgaXJxX2VuYWJsZV9oYXphcmQiKQorCisjZGVmaW5lIGlycV9kaXNhYmxlX2hhemFyZCgpCQkJCQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCVwKKwkiX2VoYlx0XHRcdFx0IyBpcnFfZGlzYWJsZV9oYXphcmQiKQorCisjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfUjEwMDAwKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfUk05MDAwKQorCisvKgorICogUjEwMDAwIHJvY2tzIC0gYWxsIGhhemFyZHMgaGFuZGxlZCBpbiBoYXJkd2FyZSwgc28gdGhpcyBiZWNvbWVzIGEgbm9icmFpbmVyLgorICovCisKK19fYXNtX18oCisJIgkubWFjcm9cdGlycV9lbmFibGVfaGF6YXJkCQkJXG5cdCIKKwkiCS5lbmRtCQkJCQkJXG5cdCIKKwkiCQkJCQkJCVxuXHQiCisJIgkubWFjcm9cdGlycV9kaXNhYmxlX2hhemFyZAkJCVxuXHQiCisJIgkuZW5kbSIpOworCisjZGVmaW5lIGlycV9lbmFibGVfaGF6YXJkKCkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBpcnFfZGlzYWJsZV9oYXphcmQoKQlkbyB7IH0gd2hpbGUgKDApCisKKyNlbHNlCisKKy8qCisgKiBEZWZhdWx0IGZvciBjbGFzc2ljIE1JUFMgcHJvY2Vzc29ycy4gIEFzc3VtZSB3b3JzdCBjYXNlIGhhemFyZHMgYnV0IGRvbid0CisgKiBjYXJlIGFib3V0IHRoZSBpcnFfZW5hYmxlX2hhemFyZCAtIHNvb25lciBvciBsYXRlciB0aGUgaGFyZHdhcmUgd2lsbAorICogZW5hYmxlIGl0IGFuZCB3ZSBkb24ndCBjYXJlIHdoZW4gZXhhY3RseS4KKyAqLworCitfX2FzbV9fKAorCSIJIwkJCQkJCVxuXHQiCisJIgkjIFRoZXJlIGlzIGEgaGF6YXJkIGJ1dCB3ZSBkbyBub3QgY2FyZQkJXG5cdCIKKwkiCSMJCQkJCQlcblx0IgorCSIJLm1hY3JvXHRpcnFfZW5hYmxlX2hhemFyZAkJCVxuXHQiCisJIgkuZW5kbQkJCQkJCVxuXHQiCisJIgkJCQkJCQlcblx0IgorCSIJLm1hY3JvXHRpcnFfZGlzYWJsZV9oYXphcmQJCQlcblx0IgorCSIJX3Nzbm9wOyBfc3Nub3A7IF9zc25vcAkJCQlcblx0IgorCSIJLmVuZG0iKTsKKworI2RlZmluZSBpcnFfZW5hYmxlX2hhemFyZCgpCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgaXJxX2Rpc2FibGVfaGF6YXJkKCkJCQkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAorCSJfc3Nub3A7IF9zc25vcDsgX3Nzbm9wO1x0XHQjIGlycV9kaXNhYmxlX2hhemFyZCIpCisKKyNlbmRpZgorCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiBfQVNNX0hBWkFSRFNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9oZHJlZy5oIGIvaW5jbHVkZS9hc20tbWlwcy9oZHJlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5ODliYmMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2hkcmVnLmgKQEAgLTAsMCArMSBAQAorI3dhcm5pbmcgdGhpcyBmaWxlIGlzIG9ic29sZXRlLCBwbGVhc2UgZG8gbm90IHVzZSBpdApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9oaWdobWVtLmggYi9pbmNsdWRlL2FzbS1taXBzL2hpZ2htZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDk5MzBkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9oaWdobWVtLmgKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiBoaWdobWVtLmg6IHZpcnR1YWwga2VybmVsIG1lbW9yeSBtYXBwaW5ncyBmb3IgaGlnaCBtZW1vcnkKKyAqCisgKiBVc2VkIGluIENPTkZJR19ISUdITUVNIHN5c3RlbXMgZm9yIG1lbW9yeSBwYWdlcyB3aGljaAorICogYXJlIG5vdCBhZGRyZXNzYWJsZSBieSBkaXJlY3Qga2VybmVsIHZpcnR1YWwgYWRkcmVzc2VzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBHZXJoYXJkIFdpY2hlcnQsIFNpZW1lbnMgQUcKKyAqCQkgICAgICBHZXJoYXJkLldpY2hlcnRAcGRiLnNpZW1lbnMuZGUKKyAqCisgKgorICogUmVkZXNpZ25lZCB0aGUgeDg2IDMyLWJpdCBWTSBhcmNoaXRlY3R1cmUgdG8gZGVhbCB3aXRoCisgKiB1cCB0byAxNiBUZXJhYnl0ZSBwaHlzaWNhbCBtZW1vcnkuIFdpdGggY3VycmVudCB4ODYgQ1BVcworICogd2Ugbm93IHN1cHBvcnQgdXAgdG8gNjQgR2lnYWJ5dGVzIHBoeXNpY2FsIFJBTS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+CisgKi8KKyNpZm5kZWYgX0FTTV9ISUdITUVNX0gKKyNkZWZpbmUgX0FTTV9ISUdITUVNX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxhc20va21hcF90eXBlcy5oPgorCisvKiB1bmRlZiBmb3IgcHJvZHVjdGlvbiAqLworI2RlZmluZSBISUdITUVNX0RFQlVHIDEKKworLyogZGVjbGFyYXRpb25zIGZvciBoaWdobWVtLmMgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIGhpZ2hzdGFydF9wZm4sIGhpZ2hlbmRfcGZuOworCitleHRlcm4gcHRlX3QgKmttYXBfcHRlOworZXh0ZXJuIHBncHJvdF90IGttYXBfcHJvdDsKK2V4dGVybiBwdGVfdCAqcGttYXBfcGFnZV90YWJsZTsKKworLyoKKyAqIFJpZ2h0IG5vdyB3ZSBpbml0aWFsaXplIG9ubHkgYSBzaW5nbGUgcHRlIHRhYmxlLiBJdCBjYW4gYmUgZXh0ZW5kZWQKKyAqIGVhc2lseSwgc3Vic2VxdWVudCBwdGUgdGFibGVzIGhhdmUgdG8gYmUgYWxsb2NhdGVkIGluIG9uZSBwaHlzaWNhbAorICogY2h1bmsgb2YgUkFNLgorICovCisjZGVmaW5lIFBLTUFQX0JBU0UgKDB4ZmUwMDAwMDBVTCkKKyNkZWZpbmUgTEFTVF9QS01BUCAxMDI0CisjZGVmaW5lIExBU1RfUEtNQVBfTUFTSyAoTEFTVF9QS01BUC0xKQorI2RlZmluZSBQS01BUF9OUih2aXJ0KSAgKCh2aXJ0LVBLTUFQX0JBU0UpID4+IFBBR0VfU0hJRlQpCisjZGVmaW5lIFBLTUFQX0FERFIobnIpICAoUEtNQVBfQkFTRSArICgobnIpIDw8IFBBR0VfU0hJRlQpKQorCitleHRlcm4gdm9pZCAqIGttYXBfaGlnaChzdHJ1Y3QgcGFnZSAqcGFnZSk7CitleHRlcm4gdm9pZCBrdW5tYXBfaGlnaChzdHJ1Y3QgcGFnZSAqcGFnZSk7CisKKy8qCisgKiBDT05GSUdfTElNSVRFRF9ETUEgaXMgZm9yIHN5c3RlbXMgd2l0aCBETUEgbGltaXRhdGlvbnMgc3VjaCBhcyBNb21lbnR1bSdzCisgKiBKYWd1YXIgQVRYLiAgVGhpcyBvcHRpb24gZXhwbG9pdHMgdGhlIGhpZ2htZW0gY29kZSBpbiB0aGUga2VybmVsIHNvIGlzCisgKiBhbHdheXMgZW5hYmxlZCB0b2dldGhlciB3aXRoIENPTkZJR19ISUdITUVNIGJ1dCBhdCB0aGlzIHRpbWUgZG9lc24ndAorICogYWN0dWFsbHkgYWRkIGhpZ2htZW0gZnVuY3Rpb25hbGl0eS4KKyAqLworCisjaWZkZWYgQ09ORklHX0xJTUlURURfRE1BCisKKy8qCisgKiBUaGVzZSBhcmUgdGhlIGRlZmF1bHQgZnVuY3Rpb25zIGZvciB0aGUgbm8taGlnaG1lbSBjYXNlIGZyb20KKyAqIDxsaW51eC9oaWdobWVtLmg+CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCAqa21hcChzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwltaWdodF9zbGVlcCgpOworCXJldHVybiBwYWdlX2FkZHJlc3MocGFnZSk7Cit9CisKKyNkZWZpbmUga3VubWFwKHBhZ2UpIGRvIHsgKHZvaWQpIChwYWdlKTsgfSB3aGlsZSAoMCkKKworc3RhdGljIGlubGluZSB2b2lkICprbWFwX2F0b21pYyhzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSBrbV90eXBlIHR5cGUpCit7CisJcmV0dXJuIHBhZ2VfYWRkcmVzcyhwYWdlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGt1bm1hcF9hdG9taWModm9pZCAqa3ZhZGRyLCBlbnVtIGttX3R5cGUgdHlwZSkgeyB9CisKKyNkZWZpbmUga21hcF9hdG9taWNfdG9fcGFnZShwdHIpIHZpcnRfdG9fcGFnZShwdHIpCisKKyNkZWZpbmUgZmx1c2hfY2FjaGVfa21hcHMoKQlkbyB7IH0gd2hpbGUgKDApCisKKyNlbHNlIC8qIExJTUlURURfRE1BICovCisKK2V4dGVybiB2b2lkICpfX2ttYXAoc3RydWN0IHBhZ2UgKnBhZ2UpOworZXh0ZXJuIHZvaWQgX19rdW5tYXAoc3RydWN0IHBhZ2UgKnBhZ2UpOworZXh0ZXJuIHZvaWQgKl9fa21hcF9hdG9taWMoc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0ga21fdHlwZSB0eXBlKTsKK2V4dGVybiB2b2lkIF9fa3VubWFwX2F0b21pYyh2b2lkICprdmFkZHIsIGVudW0ga21fdHlwZSB0eXBlKTsKK2V4dGVybiBzdHJ1Y3QgcGFnZSAqX19rbWFwX2F0b21pY190b19wYWdlKHZvaWQgKnB0cik7CisKKyNkZWZpbmUga21hcAkJCV9fa21hcAorI2RlZmluZSBrdW5tYXAJCQlfX2t1bm1hcAorI2RlZmluZSBrbWFwX2F0b21pYwkJX19rbWFwX2F0b21pYworI2RlZmluZSBrdW5tYXBfYXRvbWljCQlfX2t1bm1hcF9hdG9taWMKKyNkZWZpbmUga21hcF9hdG9taWNfdG9fcGFnZQlfX2ttYXBfYXRvbWljX3RvX3BhZ2UKKworI2RlZmluZSBmbHVzaF9jYWNoZV9rbWFwcygpCWZsdXNoX2NhY2hlX2FsbCgpCisKKyNlbmRpZiAvKiBMSU1JVEVEX0RNQSAqLworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX0FTTV9ISUdITUVNX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvaHAtbGovYXNpYy5oIGIvaW5jbHVkZS9hc20tbWlwcy9ocC1sai9hc2ljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmMyY2E2NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvaHAtbGovYXNpYy5oCkBAIC0wLDAgKzEsNyBAQAorCit0eXBlZGVmIGVudW0geyBJbGxlZ2FsQXNpYywgVW5rbm93bkFzaWMsIEFuZHJvc0FzaWMsIEhhcm1vbnlBc2ljIH0gQXNpY0lkOworCitBc2ljSWQgR2V0QXNpY0lkKHZvaWQpOworCitjb25zdCBjaGFyKiBjb25zdCBHZXRBc2ljTmFtZSh2b2lkKTsKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9od19pcnEuaCBiL2luY2x1ZGUvYXNtLW1pcHMvaHdfaXJxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg1NGQwMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvaHdfaXJxLmgKQEAgLTAsMCArMSwyNyBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSwgMjAwMiBieSBSYWxmIEJhZWNobGUKKyAqLworI2lmbmRlZiBfX0FTTV9IV19JUlFfSAorI2RlZmluZSBfX0FTTV9IV19JUlFfSAorCisjaW5jbHVkZSA8bGludXgvcHJvZmlsZS5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKworZXh0ZXJuIHZvaWQgZGlzYWJsZV84MjU5QV9pcnEodW5zaWduZWQgaW50IGlycSk7CitleHRlcm4gdm9pZCBlbmFibGVfODI1OUFfaXJxKHVuc2lnbmVkIGludCBpcnEpOworZXh0ZXJuIGludCBpODI1OUFfaXJxX3BlbmRpbmcodW5zaWduZWQgaW50IGlycSk7CitleHRlcm4gdm9pZCBtYWtlXzgyNTlBX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKK2V4dGVybiB2b2lkIGluaXRfODI1OUEoaW50IGFlb2kpOworCitleHRlcm4gYXRvbWljX3QgaXJxX2Vycl9jb3VudDsKKworLyogVGhpcyBtYXkgbm90IGJlIGFwcm9wcmlhdGUgZm9yIGFsbCBtYWNoaW5lcywgd2UnbGwgc2VlIC4uLiAgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod19yZXNlbmRfaXJxKHN0cnVjdCBod19pbnRlcnJ1cHRfdHlwZSAqaCwgdW5zaWduZWQgaW50IGkpCit7Cit9CisKKyNlbmRpZiAvKiBfX0FTTV9IV19JUlFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9pODI1OS5oIGIvaW5jbHVkZS9hc20tbWlwcy9pODI1OS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyMTRhYmUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2k4MjU5LmgKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqCWluY2x1ZGUvYXNtLW1pcHMvaTgyNTkuaAorICoKKyAqCWk4MjU5QSBpbnRlcnJ1cHQgZGVmaW5pdGlvbnMuCisgKgorICoJQ29weXJpZ2h0IChDKSAyMDAzICBNYWNpZWogVy4gUm96eWNraQorICoJQ29weXJpZ2h0IChDKSAyMDAzICBSYWxmIEJhZWNobGUgPHJhbGZAbGludXgtbWlwcy5vcmc+CisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICoJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2lmbmRlZiBfQVNNX0k4MjU5X0gKKyNkZWZpbmUgX0FTTV9JODI1OV9ICisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKworZXh0ZXJuIHNwaW5sb2NrX3QgaTgyNTlBX2xvY2s7CisKK2V4dGVybiB2b2lkIGluaXRfaTgyNTlfaXJxcyh2b2lkKTsKKworLyoKKyAqIERvIHRoZSB0cmFkaXRpb25hbCBpODI1OSBpbnRlcnJ1cHQgcG9sbGluZyB0aGluZy4gIFRoaXMgaXMgZm9yIHRoZSBmZXcKKyAqIGNhc2VzIHdoZXJlIG5vIGJldHRlciBpbnRlcnJ1cHQgYWNrbm93bGVkZ2UgbWV0aG9kIGlzIGF2YWlsYWJsZSBhbmQgd2UKKyAqIGFic29sdXRlbHkgbXVzdCB0b3VjaCB0aGUgaTgyNTkuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGk4MjU5X2lycSh2b2lkKQoreworCWludCBpcnE7CisKKwlzcGluX2xvY2soJmk4MjU5QV9sb2NrKTsKKworCS8qIFBlcmZvcm0gYW4gaW50ZXJydXB0IGFja25vd2xlZGdlIGN5Y2xlIG9uIGNvbnRyb2xsZXIgMS4gKi8KKwlvdXRiKDB4MEMsIDB4MjApOwkJLyogcHJlcGFyZSBmb3IgcG9sbCAqLworCWlycSA9IGluYigweDIwKSAmIDc7CisJaWYgKGlycSA9PSAyKSB7CisJCS8qCisJCSAqIEludGVycnVwdCBpcyBjYXNjYWRlZCBzbyBwZXJmb3JtIGludGVycnVwdAorCQkgKiBhY2tub3dsZWRnZSBvbiBjb250cm9sbGVyIDIuCisJCSAqLworCQlvdXRiKDB4MEMsIDB4QTApOwkJLyogcHJlcGFyZSBmb3IgcG9sbCAqLworCQlpcnEgPSAoaW5iKDB4QTApICYgNykgKyA4OworCX0KKworCWlmICh1bmxpa2VseShpcnEgPT0gNykpIHsKKwkJLyoKKwkJICogVGhpcyBtYXkgYmUgYSBzcHVyaW91cyBpbnRlcnJ1cHQuCisJCSAqCisJCSAqIFJlYWQgdGhlIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgKElTUikuIElmIHRoZSBtb3N0CisJCSAqIHNpZ25pZmljYW50IGJpdCBpcyBub3Qgc2V0IHRoZW4gdGhlcmUgaXMgbm8gdmFsaWQKKwkJICogaW50ZXJydXB0LgorCQkgKi8KKwkJb3V0YigweDBCLCAweDIwKTsJCS8qIElTUiByZWdpc3RlciAqLworCQlpZih+aW5iKDB4MjApICYgMHg4MCkKKwkJCWlycSA9IC0xOworCX0KKworCXNwaW5fdW5sb2NrKCZpODI1OUFfbG9jayk7CisKKwlyZXR1cm4gaXJxOworfQorCisjZW5kaWYgLyogX0FTTV9JODI1OV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2lkZS5oIGIvaW5jbHVkZS9hc20tbWlwcy9pZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjY3NGMzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9pZGUuaApAQCAtMCwwICsxLDEzIEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBNSVBTIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBJREUgY29kZS4KKyAqLworI2lmbmRlZiBfX0FTTV9JREVfSAorI2RlZmluZSBfX0FTTV9JREVfSAorCisjaW5jbHVkZSA8aWRlLmg+CisKKyNlbmRpZiAvKiBfX0FTTV9JREVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9pbnN0LmggYi9pbmNsdWRlL2FzbS1taXBzL2luc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWQ1MTcyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9pbnN0LmgKQEAgLTAsMCArMSwzNzEgQEAKKy8qCisgKiBGb3JtYXQgb2YgYW4gaW5zdHJ1Y3Rpb24gaW4gbWVtb3J5LgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NiwgMjAwMCBieSBSYWxmIEJhZWNobGUKKyAqLworI2lmbmRlZiBfQVNNX0lOU1RfSAorI2RlZmluZSBfQVNNX0lOU1RfSAorCisvKgorICogTWFqb3Igb3Bjb2RlczsgYmVmb3JlIE1JUFMgSVYgY29wMXggd2FzIGNhbGxlZCBjb3AzLgorICovCitlbnVtIG1ham9yX29wIHsKKwlzcGVjX29wLCBiY29uZF9vcCwgal9vcCwgamFsX29wLAorCWJlcV9vcCwgYm5lX29wLCBibGV6X29wLCBiZ3R6X29wLAorCWFkZGlfb3AsIGFkZGl1X29wLCBzbHRpX29wLCBzbHRpdV9vcCwKKwlhbmRpX29wLCBvcmlfb3AsIHhvcmlfb3AsIGx1aV9vcCwKKwljb3AwX29wLCBjb3AxX29wLCBjb3AyX29wLCBjb3AxeF9vcCwKKwliZXFsX29wLCBibmVsX29wLCBibGV6bF9vcCwgYmd0emxfb3AsCisJZGFkZGlfb3AsIGRhZGRpdV9vcCwgbGRsX29wLCBsZHJfb3AsCisJbWFqb3JfMWNfb3AsIGphbHhfb3AsIG1ham9yXzFlX29wLCBtYWpvcl8xZl9vcCwKKwlsYl9vcCwgbGhfb3AsIGx3bF9vcCwgbHdfb3AsCisJbGJ1X29wLCBsaHVfb3AsIGx3cl9vcCwgbHd1X29wLAorCXNiX29wLCBzaF9vcCwgc3dsX29wLCBzd19vcCwKKwlzZGxfb3AsIHNkcl9vcCwgc3dyX29wLCBjYWNoZV9vcCwKKwlsbF9vcCwgbHdjMV9vcCwgbHdjMl9vcCwgcHJlZl9vcCwKKwlsbGRfb3AsIGxkYzFfb3AsIGxkYzJfb3AsIGxkX29wLAorCXNjX29wLCBzd2MxX29wLCBzd2MyX29wLCBtYWpvcl8zYl9vcCwgLyogT3Bjb2RlIDB4M2IgaXMgdW51c2VkICovCisJc2NkX29wLCBzZGMxX29wLCBzZGMyX29wLCBzZF9vcAorfTsKKworLyoKKyAqIGZ1bmMgZmllbGQgb2Ygc3BlYyBvcGNvZGUuCisgKi8KK2VudW0gc3BlY19vcCB7CisJc2xsX29wLCBtb3ZjX29wLCBzcmxfb3AsIHNyYV9vcCwKKwlzbGx2X29wLCBzcmx2X29wLCBzcmF2X29wLCBzcGVjMV91bnVzZWRfb3AsIC8qIE9wY29kZSAweDA3IGlzIHVudXNlZCAqLworCWpyX29wLCBqYWxyX29wLCBtb3Z6X29wLCBtb3ZuX29wLAorCXN5c2NhbGxfb3AsIGJyZWFrX29wLCBzcGltX29wLCBzeW5jX29wLAorCW1maGlfb3AsIG10aGlfb3AsIG1mbG9fb3AsIG10bG9fb3AsCisJZHNsbHZfb3AsIHNwZWMyX3VudXNlZF9vcCwgZHNybHZfb3AsIGRzcmF2X29wLAorCW11bHRfb3AsIG11bHR1X29wLCBkaXZfb3AsIGRpdnVfb3AsCisJZG11bHRfb3AsIGRtdWx0dV9vcCwgZGRpdl9vcCwgZGRpdnVfb3AsCisJYWRkX29wLCBhZGR1X29wLCBzdWJfb3AsIHN1YnVfb3AsCisJYW5kX29wLCBvcl9vcCwgeG9yX29wLCBub3Jfb3AsCisJc3BlYzNfdW51c2VkX29wLCBzcGVjNF91bnVzZWRfb3AsIHNsdF9vcCwgc2x0dV9vcCwKKwlkYWRkX29wLCBkYWRkdV9vcCwgZHN1Yl9vcCwgZHN1YnVfb3AsCisJdGdlX29wLCB0Z2V1X29wLCB0bHRfb3AsIHRsdHVfb3AsCisJdGVxX29wLCBzcGVjNV91bnVzZWRfb3AsIHRuZV9vcCwgc3BlYzZfdW51c2VkX29wLAorCWRzbGxfb3AsIHNwZWM3X3VudXNlZF9vcCwgZHNybF9vcCwgZHNyYV9vcCwKKwlkc2xsMzJfb3AsIHNwZWM4X3VudXNlZF9vcCwgZHNybDMyX29wLCBkc3JhMzJfb3AKK307CisKKy8qCisgKiBydCBmaWVsZCBvZiBiY29uZCBvcGNvZGVzLgorICovCitlbnVtIHJ0X29wIHsKKwlibHR6X29wLCBiZ2V6X29wLCBibHR6bF9vcCwgYmdlemxfb3AsCisJc3BpbWlfb3AsIHVudXNlZF9ydF9vcF8weDA1LCB1bnVzZWRfcnRfb3BfMHgwNiwgdW51c2VkX3J0X29wXzB4MDcsCisJdGdlaV9vcCwgdGdlaXVfb3AsIHRsdGlfb3AsIHRsdGl1X29wLAorCXRlcWlfb3AsIHVudXNlZF8weDBkX3J0X29wLCB0bmVpX29wLCB1bnVzZWRfMHgwZl9ydF9vcCwKKwlibHR6YWxfb3AsIGJnZXphbF9vcCwgYmx0emFsbF9vcCwgYmdlemFsbF9vcAorCS8qCisJICogVGhlIG90aGVycyAoMHgxNCAtIDB4MWYpIGFyZSB1bnVzZWQuCisgCSAqLworfTsKKworLyoKKyAqIHJzIGZpZWxkIG9mIGNvcCBvcGNvZGVzLgorICovCitlbnVtIGNvcF9vcCB7CisJbWZjX29wICAgICAgICA9IDB4MDAsIGRtZmNfb3AgICAgICAgPSAweDAxLAorCWNmY19vcCAgICAgICAgPSAweDAyLCBtdGNfb3AgICAgICAgID0gMHgwNCwKKwlkbXRjX29wICAgICAgID0gMHgwNSwgY3RjX29wICAgICAgICA9IDB4MDYsCisJYmNfb3AgICAgICAgICA9IDB4MDgsIGNvcF9vcCAgICAgICAgPSAweDEwLAorCWNvcG1fb3AgICAgICAgPSAweDE4Cit9OworCisvKgorICogcnQgZmllbGQgb2YgY29wLmJjX29wIG9wY29kZXMKKyAqLworZW51bSBiY29wX29wIHsKKwliY2Zfb3AsIGJjdF9vcCwgYmNmbF9vcCwgYmN0bF9vcAorfTsKKworLyoKKyAqIGZ1bmMgZmllbGQgb2YgY29wMCBjb2kgb3Bjb2Rlcy4KKyAqLworZW51bSBjb3AwX2NvaV9mdW5jIHsKKwl0bGJyX29wICAgICAgID0gMHgwMSwgdGxid2lfb3AgICAgICA9IDB4MDIsCisJdGxid3Jfb3AgICAgICA9IDB4MDYsIHRsYnBfb3AgICAgICAgPSAweDA4LAorCXJmZV9vcCAgICAgICAgPSAweDEwLCBlcmV0X29wICAgICAgID0gMHgxOAorfTsKKworLyoKKyAqIGZ1bmMgZmllbGQgb2YgY29wMCBjb20gb3Bjb2Rlcy4KKyAqLworZW51bSBjb3AwX2NvbV9mdW5jIHsKKwl0bGJyMV9vcCAgICAgID0gMHgwMSwgdGxid19vcCAgICAgICA9IDB4MDIsCisJdGxicDFfb3AgICAgICA9IDB4MDgsIGRjdHJfb3AgICAgICAgPSAweDA5LAorCWRjdHdfb3AgICAgICAgPSAweDBhCit9OworCisvKgorICogZm10IGZpZWxkIG9mIGNvcDEgb3Bjb2Rlcy4KKyAqLworZW51bSBjb3AxX2ZtdCB7CisJc19mbXQsIGRfZm10LCBlX2ZtdCwgcV9mbXQsCisJd19mbXQsIGxfZm10Cit9OworCisvKgorICogZnVuYyBmaWVsZCBvZiBjb3AxIGluc3RydWN0aW9ucyB1c2luZyBkLCBzIG9yIHcgZm9ybWF0LgorICovCitlbnVtIGNvcDFfc2R3X2Z1bmMgeworCWZhZGRfb3AgICAgICA9ICAweDAwLCBmc3ViX29wICAgICAgPSAgMHgwMSwKKwlmbXVsX29wICAgICAgPSAgMHgwMiwgZmRpdl9vcCAgICAgID0gIDB4MDMsCisJZnNxcnRfb3AgICAgID0gIDB4MDQsIGZhYnNfb3AgICAgICA9ICAweDA1LAorCWZtb3Zfb3AgICAgICA9ICAweDA2LCBmbmVnX29wICAgICAgPSAgMHgwNywKKwlmcm91bmRsX29wICAgPSAgMHgwOCwgZnRydW5jbF9vcCAgID0gIDB4MDksCisJZmNlaWxsX29wICAgID0gIDB4MGEsIGZmbG9vcmxfb3AgICA9ICAweDBiLAorCWZyb3VuZF9vcCAgICA9ICAweDBjLCBmdHJ1bmNfb3AgICAgPSAgMHgwZCwKKwlmY2VpbF9vcCAgICAgPSAgMHgwZSwgZmZsb29yX29wICAgID0gIDB4MGYsCisJZm1vdmNfb3AgICAgID0gIDB4MTEsIGZtb3Z6X29wICAgICA9ICAweDEyLAorCWZtb3ZuX29wICAgICA9ICAweDEzLCBmcmVjaXBfb3AgICAgPSAgMHgxNSwKKwlmcnNxcnRfb3AgICAgPSAgMHgxNiwgZmN2dHNfb3AgICAgID0gIDB4MjAsCisJZmN2dGRfb3AgICAgID0gIDB4MjEsIGZjdnRlX29wICAgICA9ICAweDIyLAorCWZjdnR3X29wICAgICA9ICAweDI0LCBmY3Z0bF9vcCAgICAgPSAgMHgyNSwKKwlmY21wX29wICAgICAgPSAgMHgzMAorfTsKKworLyoKKyAqIGZ1bmMgZmllbGQgb2YgY29wMXggb3Bjb2RlcyAoTUlQUyBJVikuCisgKi8KK2VudW0gY29wMXhfZnVuYyB7CisJbHd4YzFfb3AgICAgID0gIDB4MDAsIGxkeGMxX29wICAgICA9ICAweDAxLAorCXBmZXRjaF9vcCAgICA9ICAweDA3LCBzd3hjMV9vcCAgICAgPSAgMHgwOCwKKwlzZHhjMV9vcCAgICAgPSAgMHgwOSwgbWFkZF9zX29wICAgID0gIDB4MjAsCisJbWFkZF9kX29wICAgID0gIDB4MjEsIG1hZGRfZV9vcCAgICA9ICAweDIyLAorCW1zdWJfc19vcCAgICA9ICAweDI4LCBtc3ViX2Rfb3AgICAgPSAgMHgyOSwKKwltc3ViX2Vfb3AgICAgPSAgMHgyYSwgbm1hZGRfc19vcCAgID0gIDB4MzAsCisJbm1hZGRfZF9vcCAgID0gIDB4MzEsIG5tYWRkX2Vfb3AgICA9ICAweDMyLAorCW5tc3ViX3Nfb3AgICA9ICAweDM4LCBubXN1Yl9kX29wICAgPSAgMHgzOSwKKwlubXN1Yl9lX29wICAgPSAgMHgzYQorfTsKKworLyoKKyAqIGZ1bmMgZmllbGQgZm9yIG1hZCBvcGNvZGVzIChNSVBTIElWKS4KKyAqLworZW51bSBtYWRfZnVuYyB7CisJbWFkZF9vcCAgICAgID0gMHgwOCwgbXN1Yl9vcCAgICAgID0gMHgwYSwKKwlubWFkZF9vcCAgICAgPSAweDBjLCBubXN1Yl9vcCAgICAgPSAweDBlCit9OworCisvKgorICogRGFtbiAuLi4gIGJpdGZpZWxkcyBkZXBlbmQgZnJvbSBieXRlb3JkZXIgOi0oCisgKi8KKyNpZmRlZiBfX01JUFNFQl9fCitzdHJ1Y3Qgal9mb3JtYXQgewkvKiBKdW1wIGZvcm1hdCAqLworCXVuc2lnbmVkIGludCBvcGNvZGUgOiA2OworCXVuc2lnbmVkIGludCB0YXJnZXQgOiAyNjsKK307CisKK3N0cnVjdCBpX2Zvcm1hdCB7CS8qIEltbWVkaWF0ZSBmb3JtYXQgKGFkZGksIGx3LCAuLi4pICovCisJdW5zaWduZWQgaW50IG9wY29kZSA6IDY7CisJdW5zaWduZWQgaW50IHJzIDogNTsKKwl1bnNpZ25lZCBpbnQgcnQgOiA1OworCXNpZ25lZCBpbnQgc2ltbWVkaWF0ZSA6IDE2OworfTsKKworc3RydWN0IHVfZm9ybWF0IHsJLyogVW5zaWduZWQgaW1tZWRpYXRlIGZvcm1hdCAob3JpLCB4b3JpLCAuLi4pICovCisJdW5zaWduZWQgaW50IG9wY29kZSA6IDY7CisJdW5zaWduZWQgaW50IHJzIDogNTsKKwl1bnNpZ25lZCBpbnQgcnQgOiA1OworCXVuc2lnbmVkIGludCB1aW1tZWRpYXRlIDogMTY7Cit9OworCitzdHJ1Y3QgY19mb3JtYXQgewkvKiBDYWNoZSAoPj0gUjYwMDApIGZvcm1hdCAqLworCXVuc2lnbmVkIGludCBvcGNvZGUgOiA2OworCXVuc2lnbmVkIGludCBycyA6IDU7CisJdW5zaWduZWQgaW50IGNfb3AgOiAzOworCXVuc2lnbmVkIGludCBjYWNoZSA6IDI7CisJdW5zaWduZWQgaW50IHNpbW1lZGlhdGUgOiAxNjsKK307CisKK3N0cnVjdCByX2Zvcm1hdCB7CS8qIFJlZ2lzdGVyIGZvcm1hdCAqLworCXVuc2lnbmVkIGludCBvcGNvZGUgOiA2OworCXVuc2lnbmVkIGludCBycyA6IDU7CisJdW5zaWduZWQgaW50IHJ0IDogNTsKKwl1bnNpZ25lZCBpbnQgcmQgOiA1OworCXVuc2lnbmVkIGludCByZSA6IDU7CisJdW5zaWduZWQgaW50IGZ1bmMgOiA2OworfTsKKworc3RydWN0IHBfZm9ybWF0IHsJLyogUGVyZm9ybWFuY2UgY291bnRlciBmb3JtYXQgKFIxMDAwMCkgKi8KKwl1bnNpZ25lZCBpbnQgb3Bjb2RlIDogNjsKKwl1bnNpZ25lZCBpbnQgcnMgOiA1OworCXVuc2lnbmVkIGludCBydCA6IDU7CisJdW5zaWduZWQgaW50IHJkIDogNTsKKwl1bnNpZ25lZCBpbnQgcmUgOiA1OworCXVuc2lnbmVkIGludCBmdW5jIDogNjsKK307CisKK3N0cnVjdCBmX2Zvcm1hdCB7CS8qIEZQVSByZWdpc3RlciBmb3JtYXQgKi8KKwl1bnNpZ25lZCBpbnQgb3Bjb2RlIDogNjsKKwl1bnNpZ25lZCBpbnQgOiAxOworCXVuc2lnbmVkIGludCBmbXQgOiA0OworCXVuc2lnbmVkIGludCBydCA6IDU7CisJdW5zaWduZWQgaW50IHJkIDogNTsKKwl1bnNpZ25lZCBpbnQgcmUgOiA1OworCXVuc2lnbmVkIGludCBmdW5jIDogNjsKK307CisKK3N0cnVjdCBtYV9mb3JtYXQgewkvKiBGUFUgbXVsdGlweSBhbmQgYWRkIGZvcm1hdCAoTUlQUyBJVikgKi8KKwl1bnNpZ25lZCBpbnQgb3Bjb2RlIDogNjsKKwl1bnNpZ25lZCBpbnQgZnIgOiA1OworCXVuc2lnbmVkIGludCBmdCA6IDU7CisJdW5zaWduZWQgaW50IGZzIDogNTsKKwl1bnNpZ25lZCBpbnQgZmQgOiA1OworCXVuc2lnbmVkIGludCBmdW5jIDogNDsKKwl1bnNpZ25lZCBpbnQgZm10IDogMjsKK307CisKKyNlbGlmIGRlZmluZWQoX19NSVBTRUxfXykKKworc3RydWN0IGpfZm9ybWF0IHsJLyogSnVtcCBmb3JtYXQgKi8KKwl1bnNpZ25lZCBpbnQgdGFyZ2V0IDogMjY7CisJdW5zaWduZWQgaW50IG9wY29kZSA6IDY7Cit9OworCitzdHJ1Y3QgaV9mb3JtYXQgewkvKiBJbW1lZGlhdGUgZm9ybWF0ICovCisJc2lnbmVkIGludCBzaW1tZWRpYXRlIDogMTY7CisJdW5zaWduZWQgaW50IHJ0IDogNTsKKwl1bnNpZ25lZCBpbnQgcnMgOiA1OworCXVuc2lnbmVkIGludCBvcGNvZGUgOiA2OworfTsKKworc3RydWN0IHVfZm9ybWF0IHsJLyogVW5zaWduZWQgaW1tZWRpYXRlIGZvcm1hdCAqLworCXVuc2lnbmVkIGludCB1aW1tZWRpYXRlIDogMTY7CisJdW5zaWduZWQgaW50IHJ0IDogNTsKKwl1bnNpZ25lZCBpbnQgcnMgOiA1OworCXVuc2lnbmVkIGludCBvcGNvZGUgOiA2OworfTsKKworc3RydWN0IGNfZm9ybWF0IHsJLyogQ2FjaGUgKD49IFI2MDAwKSBmb3JtYXQgKi8KKwl1bnNpZ25lZCBpbnQgc2ltbWVkaWF0ZSA6IDE2OworCXVuc2lnbmVkIGludCBjYWNoZSA6IDI7CisJdW5zaWduZWQgaW50IGNfb3AgOiAzOworCXVuc2lnbmVkIGludCBycyA6IDU7CisJdW5zaWduZWQgaW50IG9wY29kZSA6IDY7Cit9OworCitzdHJ1Y3Qgcl9mb3JtYXQgewkvKiBSZWdpc3RlciBmb3JtYXQgKi8KKwl1bnNpZ25lZCBpbnQgZnVuYyA6IDY7CisJdW5zaWduZWQgaW50IHJlIDogNTsKKwl1bnNpZ25lZCBpbnQgcmQgOiA1OworCXVuc2lnbmVkIGludCBydCA6IDU7CisJdW5zaWduZWQgaW50IHJzIDogNTsKKwl1bnNpZ25lZCBpbnQgb3Bjb2RlIDogNjsKK307CisKK3N0cnVjdCBwX2Zvcm1hdCB7CS8qIFBlcmZvcm1hbmNlIGNvdW50ZXIgZm9ybWF0IChSMTAwMDApICovCisJdW5zaWduZWQgaW50IGZ1bmMgOiA2OworCXVuc2lnbmVkIGludCByZSA6IDU7CisJdW5zaWduZWQgaW50IHJkIDogNTsKKwl1bnNpZ25lZCBpbnQgcnQgOiA1OworCXVuc2lnbmVkIGludCBycyA6IDU7CisJdW5zaWduZWQgaW50IG9wY29kZSA6IDY7Cit9OworCitzdHJ1Y3QgZl9mb3JtYXQgewkvKiBGUFUgcmVnaXN0ZXIgZm9ybWF0ICovCisJdW5zaWduZWQgaW50IGZ1bmMgOiA2OworCXVuc2lnbmVkIGludCByZSA6IDU7CisJdW5zaWduZWQgaW50IHJkIDogNTsKKwl1bnNpZ25lZCBpbnQgcnQgOiA1OworCXVuc2lnbmVkIGludCBmbXQgOiA0OworCXVuc2lnbmVkIGludCA6IDE7CisJdW5zaWduZWQgaW50IG9wY29kZSA6IDY7Cit9OworCitzdHJ1Y3QgbWFfZm9ybWF0IHsJLyogRlBVIG11bHRpcHkgYW5kIGFkZCBmb3JtYXQgKE1JUFMgSVYpICovCisJdW5zaWduZWQgaW50IGZtdCA6IDI7CisJdW5zaWduZWQgaW50IGZ1bmMgOiA0OworCXVuc2lnbmVkIGludCBmZCA6IDU7CisJdW5zaWduZWQgaW50IGZzIDogNTsKKwl1bnNpZ25lZCBpbnQgZnQgOiA1OworCXVuc2lnbmVkIGludCBmciA6IDU7CisJdW5zaWduZWQgaW50IG9wY29kZSA6IDY7Cit9OworCisjZWxzZSAvKiAhZGVmaW5lZCAoX19NSVBTRUJfXykgJiYgIWRlZmluZWQgKF9fTUlQU0VMX18pICovCisjZXJyb3IgIk1JUFMgYnV0IG5laXRoZXIgX19NSVBTRUxfXyBub3IgX19NSVBTRUJfXz8iCisjZW5kaWYKKwordW5pb24gbWlwc19pbnN0cnVjdGlvbiB7CisJdW5zaWduZWQgaW50IHdvcmQ7CisJdW5zaWduZWQgc2hvcnQgaGFsZndvcmRbMl07CisJdW5zaWduZWQgY2hhciBieXRlWzRdOworCXN0cnVjdCBqX2Zvcm1hdCBqX2Zvcm1hdDsKKwlzdHJ1Y3QgaV9mb3JtYXQgaV9mb3JtYXQ7CisJc3RydWN0IHVfZm9ybWF0IHVfZm9ybWF0OworCXN0cnVjdCBjX2Zvcm1hdCBjX2Zvcm1hdDsKKwlzdHJ1Y3Qgcl9mb3JtYXQgcl9mb3JtYXQ7CisJc3RydWN0IGZfZm9ybWF0IGZfZm9ybWF0OworICAgICAgICBzdHJ1Y3QgbWFfZm9ybWF0IG1hX2Zvcm1hdDsKK307CisKKy8qIEhBQ0hBQ0hBSENBSEMgLi4uICAqLworCisvKiBJbiBjYXNlIHNvbWUgb3RoZXIgbWFzc2FnaW5nIGlzIG5lZWRlZCwga2VlcCBNSVBTSW5zdCBhcyB3cmFwcGVyICovCisKKyNkZWZpbmUgTUlQU0luc3QoeCkgeAorCisjZGVmaW5lIElfT1BDT0RFX1NGVAkyNgorI2RlZmluZSBNSVBTSW5zdF9PUENPREUoeCkgKE1JUFNJbnN0KHgpID4+IElfT1BDT0RFX1NGVCkKKworI2RlZmluZSBJX0pUQVJHRVRfU0ZUCTAKKyNkZWZpbmUgTUlQU0luc3RfSlRBUkdFVCh4KSAoTUlQU0luc3QoeCkgJiAweDAzZmZmZmZmKQorCisjZGVmaW5lIElfUlNfU0ZUCTIxCisjZGVmaW5lIE1JUFNJbnN0X1JTKHgpICgoTUlQU0luc3QoeCkgJiAweDAzZTAwMDAwKSA+PiBJX1JTX1NGVCkKKworI2RlZmluZSBJX1JUX1NGVAkxNgorI2RlZmluZSBNSVBTSW5zdF9SVCh4KSAoKE1JUFNJbnN0KHgpICYgMHgwMDFmMDAwMCkgPj4gSV9SVF9TRlQpCisKKyNkZWZpbmUgSV9JTU1fU0ZUCTAKKyNkZWZpbmUgTUlQU0luc3RfU0lNTSh4KSAoKGludCkoKHNob3J0KShNSVBTSW5zdCh4KSAmIDB4ZmZmZikpKQorI2RlZmluZSBNSVBTSW5zdF9VSU1NKHgpIChNSVBTSW5zdCh4KSAmIDB4ZmZmZikKKworI2RlZmluZSBJX0NBQ0hFT1BfU0ZUCTE4CisjZGVmaW5lIE1JUFNJbnN0X0NBQ0hFT1AoeCkgKChNSVBTSW5zdCh4KSAmIDB4MDAxYzAwMDApID4+IElfQ0FDSEVPUF9TRlQpCisKKyNkZWZpbmUgSV9DQUNIRVNFTF9TRlQJMTYKKyNkZWZpbmUgTUlQU0luc3RfQ0FDSEVTRUwoeCkgKChNSVBTSW5zdCh4KSAmIDB4MDAwMzAwMDApID4+IElfQ0FDSEVTRUxfU0ZUKQorCisjZGVmaW5lIElfUkRfU0ZUCTExCisjZGVmaW5lIE1JUFNJbnN0X1JEKHgpICgoTUlQU0luc3QoeCkgJiAweDAwMDBmODAwKSA+PiBJX1JEX1NGVCkKKworI2RlZmluZSBJX1JFX1NGVAk2CisjZGVmaW5lIE1JUFNJbnN0X1JFKHgpICgoTUlQU0luc3QoeCkgJiAweDAwMDAwN2MwKSA+PiBJX1JFX1NGVCkKKworI2RlZmluZSBJX0ZVTkNfU0ZUCTAKKyNkZWZpbmUgTUlQU0luc3RfRlVOQyh4KSAoTUlQU0luc3QoeCkgJiAweDAwMDAwMDNmKQorCisjZGVmaW5lIElfRkZNVF9TRlQJMjEKKyNkZWZpbmUgTUlQU0luc3RfRkZNVCh4KSAoKE1JUFNJbnN0KHgpICYgMHgwMWUwMDAwMCkgPj4gSV9GRk1UX1NGVCkKKworI2RlZmluZSBJX0ZUX1NGVAkxNgorI2RlZmluZSBNSVBTSW5zdF9GVCh4KSAoKE1JUFNJbnN0KHgpICYgMHgwMDFmMDAwMCkgPj4gSV9GVF9TRlQpCisKKyNkZWZpbmUgSV9GU19TRlQJMTEKKyNkZWZpbmUgTUlQU0luc3RfRlMoeCkgKChNSVBTSW5zdCh4KSAmIDB4MDAwMGY4MDApID4+IElfRlNfU0ZUKQorCisjZGVmaW5lIElfRkRfU0ZUCTYKKyNkZWZpbmUgTUlQU0luc3RfRkQoeCkgKChNSVBTSW5zdCh4KSAmIDB4MDAwMDA3YzApID4+IElfRkRfU0ZUKQorCisjZGVmaW5lIElfRlJfU0ZUCTIxCisjZGVmaW5lIE1JUFNJbnN0X0ZSKHgpICgoTUlQU0luc3QoeCkgJiAweDAzZTAwMDAwKSA+PiBJX0ZSX1NGVCkKKworI2RlZmluZSBJX0ZNQV9GVU5DX1NGVAkyCisjZGVmaW5lIE1JUFNJbnN0X0ZNQV9GVU5DKHgpICgoTUlQU0luc3QoeCkgJiAweDAwMDAwMDNjKSA+PiBJX0ZNQV9GVU5DX1NGVCkKKworI2RlZmluZSBJX0ZNQV9GRk1UX1NGVAkwCisjZGVmaW5lIE1JUFNJbnN0X0ZNQV9GRk1UKHgpIChNSVBTSW5zdCh4KSAmIDB4MDAwMDAwMDMpCisKK3R5cGVkZWYgdW5zaWduZWQgaW50IG1pcHNfaW5zdHJ1Y3Rpb247CisKKyNlbmRpZiAvKiBfQVNNX0lOU1RfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9pbnRlcnJ1cHQuaCBiL2luY2x1ZGUvYXNtLW1pcHMvaW50ZXJydXB0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgzNTdmNTMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2ludGVycnVwdC5oCkBAIC0wLDAgKzEsMTM0IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk0LCA5NSwgOTYsIDk3LCA5OCwgOTksIDIwMDMgYnkgUmFsZiBCYWVjaGxlCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYgYnkgUGF1bCBNLiBBbnRvaW5lCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgU2lsaWNvbiBHcmFwaGljcworICogQ29weXJpZ2h0IChDKSAyMDAwIE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuCisgKi8KKyNpZm5kZWYgX0FTTV9JTlRFUlJVUFRfSAorI2RlZmluZSBfQVNNX0lOVEVSUlVQVF9ICisKKyNpbmNsdWRlIDxhc20vaGF6YXJkcy5oPgorCitfX2FzbV9fICgKKwkiLm1hY3JvXHRsb2NhbF9pcnFfZW5hYmxlXG5cdCIKKwkiLnNldFx0cHVzaFxuXHQiCisJIi5zZXRcdHJlb3JkZXJcblx0IgorCSIuc2V0XHRub2F0XG5cdCIKKwkibWZjMFx0JDEsJDEyXG5cdCIKKwkib3JpXHQkMSwweDFmXG5cdCIKKwkieG9yaVx0JDEsMHgxZVxuXHQiCisJIm10YzBcdCQxLCQxMlxuXHQiCisJImlycV9lbmFibGVfaGF6YXJkXG5cdCIKKwkiLnNldFx0cG9wXG5cdCIKKwkiLmVuZG0iKTsKKworc3RhdGljIGlubGluZSB2b2lkIGxvY2FsX2lycV9lbmFibGUodm9pZCkKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJImxvY2FsX2lycV9lbmFibGUiCisJCTogLyogbm8gb3V0cHV0cyAqLworCQk6IC8qIG5vIGlucHV0cyAqLworCQk6ICJtZW1vcnkiKTsKK30KKworLyoKKyAqIEZvciBjbGkoKSB3ZSBoYXZlIHRvIGluc2VydCBub3BzIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBuZXcgdmFsdWUKKyAqIGhhcyBhY3R1YWxseSBhcnJpdmVkIGluIHRoZSBzdGF0dXMgcmVnaXN0ZXIgYmVmb3JlIHRoZSBlbmQgb2YgdGhpcworICogbWFjcm8uCisgKiBSNDAwMC9SNDQwMCBuZWVkIHRocmVlIG5vcHMsIHRoZSBSNDYwMCB0d28gbm9wcyBhbmQgdGhlIFIxMDAwMCBuZWVkcworICogbm8gbm9wcyBhdCBhbGwuCisgKi8KK19fYXNtX18gKAorCSIubWFjcm9cdGxvY2FsX2lycV9kaXNhYmxlXG5cdCIKKwkiLnNldFx0cHVzaFxuXHQiCisJIi5zZXRcdG5vYXRcblx0IgorCSJtZmMwXHQkMSwkMTJcblx0IgorCSJvcmlcdCQxLDFcblx0IgorCSJ4b3JpXHQkMSwxXG5cdCIKKwkiLnNldFx0bm9yZW9yZGVyXG5cdCIKKwkibXRjMFx0JDEsJDEyXG5cdCIKKwkiaXJxX2Rpc2FibGVfaGF6YXJkXG5cdCIKKwkiLnNldFx0cG9wXG5cdCIKKwkiLmVuZG0iKTsKKworc3RhdGljIGlubGluZSB2b2lkIGxvY2FsX2lycV9kaXNhYmxlKHZvaWQpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSJsb2NhbF9pcnFfZGlzYWJsZSIKKwkJOiAvKiBubyBvdXRwdXRzICovCisJCTogLyogbm8gaW5wdXRzICovCisJCTogIm1lbW9yeSIpOworfQorCitfX2FzbV9fICgKKwkiLm1hY3JvXHRsb2NhbF9zYXZlX2ZsYWdzIGZsYWdzXG5cdCIKKwkiLnNldFx0cHVzaFxuXHQiCisJIi5zZXRcdHJlb3JkZXJcblx0IgorCSJtZmMwXHRcXGZsYWdzLCAkMTJcblx0IgorCSIuc2V0XHRwb3Bcblx0IgorCSIuZW5kbSIpOworCisjZGVmaW5lIGxvY2FsX3NhdmVfZmxhZ3MoeCkJCQkJCQlcCitfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQkJXAorCSJsb2NhbF9zYXZlX2ZsYWdzICUwIgkJCQkJCVwKKwk6ICI9ciIgKHgpKQorCitfX2FzbV9fICgKKwkiLm1hY3JvXHRsb2NhbF9pcnFfc2F2ZSByZXN1bHRcblx0IgorCSIuc2V0XHRwdXNoXG5cdCIKKwkiLnNldFx0cmVvcmRlclxuXHQiCisJIi5zZXRcdG5vYXRcblx0IgorCSJtZmMwXHRcXHJlc3VsdCwgJDEyXG5cdCIKKwkib3JpXHQkMSwgXFxyZXN1bHQsIDFcblx0IgorCSJ4b3JpXHQkMSwgMVxuXHQiCisJIi5zZXRcdG5vcmVvcmRlclxuXHQiCisJIm10YzBcdCQxLCAkMTJcblx0IgorCSJpcnFfZGlzYWJsZV9oYXphcmRcblx0IgorCSIuc2V0XHRwb3Bcblx0IgorCSIuZW5kbSIpOworCisjZGVmaW5lIGxvY2FsX2lycV9zYXZlKHgpCQkJCQkJXAorX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJCVwKKwkibG9jYWxfaXJxX3NhdmVcdCUwIgkJCQkJCVwKKwk6ICI9ciIgKHgpCQkJCQkJCVwKKwk6IC8qIG5vIGlucHV0cyAqLwkJCQkJCVwKKwk6ICJtZW1vcnkiKQorCitfX2FzbV9fICgKKwkiLm1hY3JvXHRsb2NhbF9pcnFfcmVzdG9yZSBmbGFnc1xuXHQiCisJIi5zZXRcdG5vcmVvcmRlclxuXHQiCisJIi5zZXRcdG5vYXRcblx0IgorCSJtZmMwXHQkMSwgJDEyXG5cdCIKKwkiYW5kaVx0XFxmbGFncywgMVxuXHQiCisJIm9yaVx0JDEsIDFcblx0IgorCSJ4b3JpXHQkMSwgMVxuXHQiCisJIm9yXHRcXGZsYWdzLCAkMVxuXHQiCisJIm10YzBcdFxcZmxhZ3MsICQxMlxuXHQiCisJImlycV9kaXNhYmxlX2hhemFyZFxuXHQiCisJIi5zZXRcdGF0XG5cdCIKKwkiLnNldFx0cmVvcmRlclxuXHQiCisJIi5lbmRtIik7CisKKyNkZWZpbmUgbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpCQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCXVuc2lnbmVkIGxvbmcgX190bXAxOwkJCQkJCVwKKwkJCQkJCQkJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQlcCisJCSJsb2NhbF9pcnFfcmVzdG9yZVx0JTAiCQkJCQlcCisJCTogIj1yIiAoX190bXAxKQkJCQkJCVwKKwkJOiAiMCIgKGZsYWdzKQkJCQkJCVwKKwkJOiAibWVtb3J5Iik7CQkJCQkJXAorfSB3aGlsZSgwKQorCisjZGVmaW5lIGlycXNfZGlzYWJsZWQoKQkJCQkJCQlcCisoewkJCQkJCQkJCVwKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwkJCQkJCVwKKwlsb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKTsJCQkJCVwKKwkhKGZsYWdzICYgMSk7CQkJCQkJCVwKK30pCisKKyNlbmRpZiAvKiBfQVNNX0lOVEVSUlVQVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2ludmVudG9yeS5oIGIvaW5jbHVkZS9hc20tbWlwcy9pbnZlbnRvcnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2QzNmZlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9pbnZlbnRvcnkuaApAQCAtMCwwICsxLDIwIEBACisvKgorICogTWlndWVsIGRlIEljYXphCisgKi8KKyNpZm5kZWYgX19BU01fSU5WRU5UT1JZX0gKKyNkZWZpbmUgX19BU01fSU5WRU5UT1JZX0gKKwordHlwZWRlZiBzdHJ1Y3QgaW52ZW50b3J5X3MgeworCXN0cnVjdCBpbnZlbnRvcnlfcyAqaW52X25leHQ7CisJaW50ICAgIGludl9jbGFzczsKKwlpbnQgICAgaW52X3R5cGU7CisJaW50ICAgIGludl9jb250cm9sbGVyOworCWludCAgICBpbnZfdW5pdDsKKwlpbnQgICAgaW52X3N0YXRlOworfSBpbnZlbnRvcnlfdDsKKworZXh0ZXJuIGludCBpbnZlbnRvcnlfaXRlbXM7Cit2b2lkIGFkZF90b19pbnZlbnRvcnkgKGludCBjbGFzcywgaW50IHR5cGUsIGludCBjb250cm9sbGVyLCBpbnQgdW5pdCwgaW50IHN0YXRlKTsKK2ludCBkdW1wX2ludmVudG9yeV90b191c2VyICh2b2lkICp1c2VyYnVmLCBpbnQgc2l6ZSk7CisKKyNlbmRpZiAvKiBfX0FTTV9JTlZFTlRPUllfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9pby5oIGIvaW5jbHVkZS9hc20tbWlwcy9pby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzOTg0NWYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2lvLmgKQEAgLTAsMCArMSw2MzAgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUgV2FsZG9yZiBHbWJICisgKiBDb3B5cmlnaHQgKEMpIDE5OTQgLSAyMDAwIFJhbGYgQmFlY2hsZQorICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwIFNpbGljb24gR3JhcGhpY3MsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSAgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKglBdXRob3I6CU1hY2llaiBXLiBSb3p5Y2tpIDxtYWNyb0BtaXBzLmNvbT4KKyAqLworI2lmbmRlZiBfQVNNX0lPX0gKKyNkZWZpbmUgX0FTTV9JT19ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CisjaW5jbHVkZSA8YXNtL2J1Zy5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKyNpbmNsdWRlIDxhc20vY3B1Lmg+CisjaW5jbHVkZSA8YXNtL2NwdS1mZWF0dXJlcy5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUtYml0cy5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKworI2luY2x1ZGUgPG1hbmdsZS1wb3J0Lmg+CisKKy8qCisgKiBTbG93ZG93biBJL08gcG9ydCBzcGFjZSBhY2Nlc3NlcyBmb3IgYW50aXF1ZSBoYXJkd2FyZS4KKyAqLworI3VuZGVmIENPTkZfU0xPV0RPV05fSU8KKworLyoKKyAqIFJhdyBvcGVyYXRpb25zIGFyZSBuZXZlciBzd2FwcGVkIGluIHNvZnR3YXJlLiAgT3RvaCB2YWx1ZXMgdGhhdCByYXcKKyAqIG9wZXJhdGlvbnMgYXJlIHdvcmtpbmcgb24gbWF5IG9yIG1heSBub3QgaGF2ZSBiZWVuIHN3YXBwZWQgYnkgdGhlIGJ1cworICogaGFyZHdhcmUuICBBbiBleGFtcGxlIHVzZSB3b3VsZCBiZSBmb3IgZmxhc2ggbWVtb3J5IHRoYXQncyB1c2VkIGZvcgorICogZXhlY3V0ZSBpbiBwbGFjZS4KKyAqLworIyBkZWZpbmUgX19yYXdfaW9zd2FiYih4KQkoeCkKKyMgZGVmaW5lIF9fcmF3X2lvc3dhYncoeCkJKHgpCisjIGRlZmluZSBfX3Jhd19pb3N3YWJsKHgpCSh4KQorIyBkZWZpbmUgX19yYXdfaW9zd2FicSh4KQkoeCkKKworLyoKKyAqIFNhbmUgaGFyZHdhcmUgb2ZmZXJzIHN3YXBwaW5nIG9mIFBDSS9JU0EgSS9PIHNwYWNlIGFjY2Vzc2VzIGluIGhhcmR3YXJlOworICogbGVzcyBzYW5lIGhhcmR3YXJlIGZvcmNlcyBzb2Z0d2FyZSB0byBmaWRkbGUgd2l0aCB0aGlzLi4uCisgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19TV0FQX0lPX1NQQUNFKQorCisjIGRlZmluZSBpb3N3YWJiKHgpCQkoeCkKKyMgaWZkZWYgQ09ORklHX1NHSV9JUDIyCisvKgorICogSVAyMiBzZWVtcyBicmFpbmRlYWQgZW5vdWdoIHRvIHN3YXAgMTZiaXRzIHZhbHVlcyBpbiBoYXJkd2FyZSwgYnV0CisgKiBub3QgMzJiaXRzLiAgR28gZmlndXJlLi4uIENhbid0IHRlbGwgd2l0aG91dCBkb2N1bWVudGF0aW9uLgorICovCisjICBkZWZpbmUgaW9zd2Fidyh4KQkJKHgpCisjIGVsc2UKKyMgIGRlZmluZSBpb3N3YWJ3KHgpCQlsZTE2X3RvX2NwdSh4KQorIyBlbmRpZgorIyBkZWZpbmUgaW9zd2FibCh4KQkJbGUzMl90b19jcHUoeCkKKyMgZGVmaW5lIGlvc3dhYnEoeCkJCWxlNjRfdG9fY3B1KHgpCisKKyNlbHNlCisKKyMgZGVmaW5lIGlvc3dhYmIoeCkJCSh4KQorIyBkZWZpbmUgaW9zd2Fidyh4KQkJKHgpCisjIGRlZmluZSBpb3N3YWJsKHgpCQkoeCkKKyMgZGVmaW5lIGlvc3dhYnEoeCkJCSh4KQorCisjZW5kaWYKKworLyoKKyAqIE5hdGl2ZSBidXMgYWNjZXNzZXMgbmV2ZXIgc3dhcHBlZC4KKyAqLworI2RlZmluZSBidXNfaW9zd2FiYih4KQkJKHgpCisjZGVmaW5lIGJ1c19pb3N3YWJ3KHgpCQkoeCkKKyNkZWZpbmUgYnVzX2lvc3dhYmwoeCkJCSh4KQorI2RlZmluZSBidXNfaW9zd2FicSh4KQkJKHgpCisKKyNkZWZpbmUgX19idXNfaW9zd2FicQkJYnVzX2lvc3dhYnEKKworI2RlZmluZSBJT19TUEFDRV9MSU1JVCAweGZmZmYKKworLyoKKyAqIE9uIE1JUFMgSS9PIHBvcnRzIGFyZSBtZW1vcnkgbWFwcGVkLCBzbyB3ZSBhY2Nlc3MgdGhlbSB1c2luZyBub3JtYWwKKyAqIGxvYWQvc3RvcmUgaW5zdHJ1Y3Rpb25zLiBtaXBzX2lvX3BvcnRfYmFzZSBpcyB0aGUgdmlydHVhbCBhZGRyZXNzIHRvCisgKiB3aGljaCBhbGwgcG9ydHMgYXJlIGJlaW5nIG1hcHBlZC4gIEZvciBzYWtlIG9mIGVmZmljaWVuY3kgc29tZSBjb2RlCisgKiBhc3N1bWVzIHRoYXQgdGhpcyBpcyBhbiBhZGRyZXNzIHRoYXQgY2FuIGJlIGxvYWRlZCB3aXRoIGEgc2luZ2xlIGx1aQorICogaW5zdHJ1Y3Rpb24sIHNvIHRoZSBsb3dlciAxNiBiaXRzIG11c3QgYmUgemVyby4gIFNob3VsZCBiZSB0cnVlIG9uCisgKiBvbiBhbnkgc2FuZSBhcmNoaXRlY3R1cmU7IGdlbmVyaWMgY29kZSBkb2VzIG5vdCB1c2UgdGhpcyBhc3N1bXB0aW9uLgorICovCitleHRlcm4gY29uc3QgdW5zaWduZWQgbG9uZyBtaXBzX2lvX3BvcnRfYmFzZTsKKworI2RlZmluZSBzZXRfaW9fcG9ydF9iYXNlKGJhc2UpCVwKKwlkbyB7ICogKHVuc2lnbmVkIGxvbmcgKikgJm1pcHNfaW9fcG9ydF9iYXNlID0gKGJhc2UpOyB9IHdoaWxlICgwKQorCisvKgorICogVGhhbmtzIHRvIEphbWVzIHZhbiBBcnRzZGFsZW4gZm9yIGEgYmV0dGVyIHRpbWluZy1maXggdGhhbgorICogdGhlIHR3byBzaG9ydCBqdW1wczogdXNpbmcgb3V0YidzIHRvIGEgbm9uZXhpc3RlbnQgcG9ydCBzZWVtcworICogdG8gZ3VhcmFudGVlIGJldHRlciB0aW1pbmdzIGV2ZW4gb24gZmFzdCBtYWNoaW5lcy4KKyAqCisgKiBPbiB0aGUgb3RoZXIgaGFuZCwgSSdkIGxpa2UgdG8gYmUgc3VyZSBvZiBhIG5vbi1leGlzdGVudCBwb3J0OgorICogSSBmZWVsIGEgYml0IHVuc2FmZSBhYm91dCB1c2luZyAweDgwIChzaG91bGQgYmUgc2FmZSwgdGhvdWdoKQorICoKKyAqCQlMaW51cworICoKKyAqLworCisjZGVmaW5lIF9fU0xPV19ET1dOX0lPIFwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyggXAorCQkic2JcdCQwLDB4ODAoJTApIiBcCisJCTogOiAiciIgKG1pcHNfaW9fcG9ydF9iYXNlKSk7CisKKyNpZmRlZiBDT05GX1NMT1dET1dOX0lPCisjaWZkZWYgUkVBTExZX1NMT1dfSU8KKyNkZWZpbmUgU0xPV19ET1dOX0lPIHsgX19TTE9XX0RPV05fSU87IF9fU0xPV19ET1dOX0lPOyBfX1NMT1dfRE9XTl9JTzsgX19TTE9XX0RPV05fSU87IH0KKyNlbHNlCisjZGVmaW5lIFNMT1dfRE9XTl9JTyBfX1NMT1dfRE9XTl9JTworI2VuZGlmCisjZWxzZQorI2RlZmluZSBTTE9XX0RPV05fSU8KKyNlbmRpZgorCisvKgorICogICAgIHZpcnRfdG9fcGh5cyAgICAtICAgICAgIG1hcCB2aXJ0dWFsIGFkZHJlc3NlcyB0byBwaHlzaWNhbAorICogICAgIEBhZGRyZXNzOiBhZGRyZXNzIHRvIHJlbWFwCisgKgorICogICAgIFRoZSByZXR1cm5lZCBwaHlzaWNhbCBhZGRyZXNzIGlzIHRoZSBwaHlzaWNhbCAoQ1BVKSBtYXBwaW5nIGZvcgorICogICAgIHRoZSBtZW1vcnkgYWRkcmVzcyBnaXZlbi4gSXQgaXMgb25seSB2YWxpZCB0byB1c2UgdGhpcyBmdW5jdGlvbiBvbgorICogICAgIGFkZHJlc3NlcyBkaXJlY3RseSBtYXBwZWQgb3IgYWxsb2NhdGVkIHZpYSBrbWFsbG9jLgorICoKKyAqICAgICBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGdpdmUgYnVzIG1hcHBpbmdzIGZvciBETUEgdHJhbnNmZXJzLiBJbgorICogICAgIGFsbW9zdCBhbGwgY29uY2VpdmFibGUgY2FzZXMgYSBkZXZpY2UgZHJpdmVyIHNob3VsZCBub3QgYmUgdXNpbmcKKyAqICAgICB0aGlzIGZ1bmN0aW9uCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB2aXJ0X3RvX3BoeXModm9sYXRpbGUgdm9pZCAqIGFkZHJlc3MpCit7CisJcmV0dXJuICh1bnNpZ25lZCBsb25nKWFkZHJlc3MgLSBQQUdFX09GRlNFVDsKK30KKworLyoKKyAqICAgICBwaHlzX3RvX3ZpcnQgICAgLSAgICAgICBtYXAgcGh5c2ljYWwgYWRkcmVzcyB0byB2aXJ0dWFsCisgKiAgICAgQGFkZHJlc3M6IGFkZHJlc3MgdG8gcmVtYXAKKyAqCisgKiAgICAgVGhlIHJldHVybmVkIHZpcnR1YWwgYWRkcmVzcyBpcyBhIGN1cnJlbnQgQ1BVIG1hcHBpbmcgZm9yCisgKiAgICAgdGhlIG1lbW9yeSBhZGRyZXNzIGdpdmVuLiBJdCBpcyBvbmx5IHZhbGlkIHRvIHVzZSB0aGlzIGZ1bmN0aW9uIG9uCisgKiAgICAgYWRkcmVzc2VzIHRoYXQgaGF2ZSBhIGtlcm5lbCBtYXBwaW5nCisgKgorICogICAgIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgaGFuZGxlIGJ1cyBtYXBwaW5ncyBmb3IgRE1BIHRyYW5zZmVycy4gSW4KKyAqICAgICBhbG1vc3QgYWxsIGNvbmNlaXZhYmxlIGNhc2VzIGEgZGV2aWNlIGRyaXZlciBzaG91bGQgbm90IGJlIHVzaW5nCisgKiAgICAgdGhpcyBmdW5jdGlvbgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgKiBwaHlzX3RvX3ZpcnQodW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCXJldHVybiAodm9pZCAqKShhZGRyZXNzICsgUEFHRV9PRkZTRVQpOworfQorCisvKgorICogSVNBIEkvTyBidXMgbWVtb3J5IGFkZHJlc3NlcyBhcmUgMToxIHdpdGggdGhlIHBoeXNpY2FsIGFkZHJlc3MuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBpc2FfdmlydF90b19idXModm9sYXRpbGUgdm9pZCAqIGFkZHJlc3MpCit7CisJcmV0dXJuICh1bnNpZ25lZCBsb25nKWFkZHJlc3MgLSBQQUdFX09GRlNFVDsKK30KKworc3RhdGljIGlubGluZSB2b2lkICogaXNhX2J1c190b192aXJ0KHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwlyZXR1cm4gKHZvaWQgKikoYWRkcmVzcyArIFBBR0VfT0ZGU0VUKTsKK30KKworI2RlZmluZSBpc2FfcGFnZV90b19idXMgcGFnZV90b19waHlzCisKKy8qCisgKiBIb3dldmVyIFBDSSBvbmVzIGFyZSBub3QgbmVjZXNzYXJpbHkgMToxIGFuZCB0aGVyZWZvcmUgdGhlc2UgaW50ZXJmYWNlcworICogYXJlIGZvcmJpZGRlbiBpbiBwb3J0YWJsZSBQQ0kgZHJpdmVycy4KKyAqCisgKiBBbGxvdyB0aGVtIGZvciB4ODYgZm9yIGxlZ2FjeSBkcml2ZXJzLCB0aG91Z2guCisgKi8KKyNkZWZpbmUgdmlydF90b19idXMgdmlydF90b19waHlzCisjZGVmaW5lIGJ1c190b192aXJ0IHBoeXNfdG9fdmlydAorCisvKgorICogaXNhX3Nsb3Rfb2Zmc2V0IGlzIHRoZSBhZGRyZXNzIHdoZXJlIEUoSVNBKSBidXNhZGRyZXNzIDAgaXMgbWFwcGVkCisgKiBmb3IgdGhlIHByb2Nlc3Nvci4gIFRoaXMgaW1wbGllcyB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoZXJlIGlzIG9ubHkKKyAqIG9uZSBvZiB0aGVzZSBidXNzZXMuCisgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIGlzYV9zbG90X29mZnNldDsKKworLyoKKyAqIENoYW5nZSAic3RydWN0IHBhZ2UiIHRvIHBoeXNpY2FsIGFkZHJlc3MuCisgKi8KKyNkZWZpbmUgcGFnZV90b19waHlzKHBhZ2UpCSgoZG1hX2FkZHJfdClwYWdlX3RvX3BmbihwYWdlKSA8PCBQQUdFX1NISUZUKQorCitleHRlcm4gdm9pZCAqIF9faW9yZW1hcChwaHlzX3Qgb2Zmc2V0LCBwaHlzX3Qgc2l6ZSwgdW5zaWduZWQgbG9uZyBmbGFncyk7CitleHRlcm4gdm9pZCBfX2lvdW5tYXAodm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKTsKKworc3RhdGljIGlubGluZSB2b2lkICogX19pb3JlbWFwX21vZGUocGh5c190IG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplLAorCXVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJaWYgKGNwdV9oYXNfNjRiaXRfYWRkcmVzc2VzKSB7CisJCXU2NCBiYXNlID0gVU5DQUNfQkFTRTsKKworCQkvKgorCQkgKiBSMTAwMDAgc3VwcG9ydHMgYSAyIGJpdCB1bmNhY2hlZCBhdHRyaWJ1dGUgdGhlcmVmb3JlCisJCSAqIFVOQ0FDX0JBU0UgbWF5IG5vdCBlcXVhbCBJT19CQVNFLgorCQkgKi8KKwkJaWYgKGZsYWdzID09IF9DQUNIRV9VTkNBQ0hFRCkKKwkJCWJhc2UgPSAodTY0KSBJT19CQVNFOworCQlyZXR1cm4gKHZvaWQgKikgKHVuc2lnbmVkIGxvbmcpIChiYXNlICsgb2Zmc2V0KTsKKwl9CisKKwlyZXR1cm4gX19pb3JlbWFwKG9mZnNldCwgc2l6ZSwgZmxhZ3MpOworfQorCisvKgorICogaW9yZW1hcCAgICAgLSAgIG1hcCBidXMgbWVtb3J5IGludG8gQ1BVIHNwYWNlCisgKiBAb2Zmc2V0OiAgICBidXMgYWRkcmVzcyBvZiB0aGUgbWVtb3J5CisgKiBAc2l6ZTogICAgICBzaXplIG9mIHRoZSByZXNvdXJjZSB0byBtYXAKKyAqCisgKiBpb3JlbWFwIHBlcmZvcm1zIGEgcGxhdGZvcm0gc3BlY2lmaWMgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyB0bworICogbWFrZSBidXMgbWVtb3J5IENQVSBhY2Nlc3NpYmxlIHZpYSB0aGUgcmVhZGIvcmVhZHcvcmVhZGwvd3JpdGViLworICogd3JpdGV3L3dyaXRlbCBmdW5jdGlvbnMgYW5kIHRoZSBvdGhlciBtbWlvIGhlbHBlcnMuIFRoZSByZXR1cm5lZAorICogYWRkcmVzcyBpcyBub3QgZ3VhcmFudGVlZCB0byBiZSB1c2FibGUgZGlyZWN0bHkgYXMgYSB2aXJ0dWFsCisgKiBhZGRyZXNzLgorICovCisjZGVmaW5lIGlvcmVtYXAob2Zmc2V0LCBzaXplKQkJCQkJCVwKKwlfX2lvcmVtYXBfbW9kZSgob2Zmc2V0KSwgKHNpemUpLCBfQ0FDSEVfVU5DQUNIRUQpCisKKy8qCisgKiBpb3JlbWFwX25vY2FjaGUgICAgIC0gICBtYXAgYnVzIG1lbW9yeSBpbnRvIENQVSBzcGFjZQorICogQG9mZnNldDogICAgYnVzIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeQorICogQHNpemU6ICAgICAgc2l6ZSBvZiB0aGUgcmVzb3VyY2UgdG8gbWFwCisgKgorICogaW9yZW1hcF9ub2NhY2hlIHBlcmZvcm1zIGEgcGxhdGZvcm0gc3BlY2lmaWMgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyB0bworICogbWFrZSBidXMgbWVtb3J5IENQVSBhY2Nlc3NpYmxlIHZpYSB0aGUgcmVhZGIvcmVhZHcvcmVhZGwvd3JpdGViLworICogd3JpdGV3L3dyaXRlbCBmdW5jdGlvbnMgYW5kIHRoZSBvdGhlciBtbWlvIGhlbHBlcnMuIFRoZSByZXR1cm5lZAorICogYWRkcmVzcyBpcyBub3QgZ3VhcmFudGVlZCB0byBiZSB1c2FibGUgZGlyZWN0bHkgYXMgYSB2aXJ0dWFsCisgKiBhZGRyZXNzLgorICoKKyAqIFRoaXMgdmVyc2lvbiBvZiBpb3JlbWFwIGVuc3VyZXMgdGhhdCB0aGUgbWVtb3J5IGlzIG1hcmtlZCB1bmNhY2hhYmxlCisgKiBvbiB0aGUgQ1BVIGFzIHdlbGwgYXMgaG9ub3VyaW5nIGV4aXN0aW5nIGNhY2hpbmcgcnVsZXMgZnJvbSB0aGluZ3MgbGlrZQorICogdGhlIFBDSSBidXMuIE5vdGUgdGhhdCB0aGVyZSBhcmUgb3RoZXIgY2FjaGVzIGFuZCBidWZmZXJzIG9uIG1hbnkKKyAqIGJ1c3Nlcy4gSW4gcGF0aWN1bGFyIGRyaXZlciBhdXRob3JzIHNob3VsZCByZWFkIHVwIG9uIFBDSSB3cml0ZXMKKyAqCisgKiBJdCdzIHVzZWZ1bCBpZiBzb21lIGNvbnRyb2wgcmVnaXN0ZXJzIGFyZSBpbiBzdWNoIGFuIGFyZWEgYW5kCisgKiB3cml0ZSBjb21iaW5pbmcgb3IgcmVhZCBjYWNoaW5nIGlzIG5vdCBkZXNpcmFibGU6CisgKi8KKyNkZWZpbmUgaW9yZW1hcF9ub2NhY2hlKG9mZnNldCwgc2l6ZSkJCQkJCVwKKwlfX2lvcmVtYXBfbW9kZSgob2Zmc2V0KSwgKHNpemUpLCBfQ0FDSEVfVU5DQUNIRUQpCisKKy8qCisgKiBUaGVzZSB0d28gYXJlIE1JUFMgc3BlY2lmaWMgaW9yZW1hcCB2YXJpYW50LiAgaW9yZW1hcF9jYWNoZWFibGVfY293CisgKiByZXF1ZXN0cyBhIGNhY2hhYmxlIG1hcHBpbmcsIGlvcmVtYXBfdW5jYWNoZWRfYWNjZWxlcmF0ZWQgcmVxdWVzdHMgYQorICogbWFwcGluZyB1c2luZyB0aGUgdW5jYWNoZWQgYWNjZWxlcmF0ZWQgbW9kZSB3aGljaCBpc24ndCBzdXBwb3J0ZWQgb24KKyAqIGFsbCBwcm9jZXNzb3JzLgorICovCisjZGVmaW5lIGlvcmVtYXBfY2FjaGVhYmxlX2NvdyhvZmZzZXQsIHNpemUpCQkJCVwKKwlfX2lvcmVtYXBfbW9kZSgob2Zmc2V0KSwgKHNpemUpLCBfQ0FDSEVfQ0FDSEFCTEVfQ09XKQorI2RlZmluZSBpb3JlbWFwX3VuY2FjaGVkX2FjY2VsZXJhdGVkKG9mZnNldCwgc2l6ZSkJCQlcCisJX19pb3JlbWFwX21vZGUoKG9mZnNldCksIChzaXplKSwgX0NBQ0hFX1VOQ0FDSEVEX0FDQ0VMRVJBVEVEKQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW91bm1hcCh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJaWYgKGNwdV9oYXNfNjRiaXRfYWRkcmVzc2VzKQorCQlyZXR1cm47CisKKwlfX2lvdW5tYXAoYWRkcik7Cit9CisKKworI2RlZmluZSBfX0JVSUxEX01FTU9SWV9TSU5HTEUocGZ4LCBid2xxLCB0eXBlLCBpcnEpCQkJXAorCQkJCQkJCQkJXAorc3RhdGljIGlubGluZSB2b2lkIHBmeCMjd3JpdGUjI2J3bHEodHlwZSB2YWwsCQkJCVwKKwkJCQkgICAgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICptZW0pCQlcCit7CQkJCQkJCQkJXAorCXZvbGF0aWxlIHR5cGUgKl9fbWVtOwkJCQkJCVwKKwl0eXBlIF9fdmFsOwkJCQkJCQlcCisJCQkJCQkJCQlcCisJX19tZW0gPSAodm9pZCAqKV9fc3dpenpsZV9hZGRyXyMjYndscSgodW5zaWduZWQgbG9uZykobWVtKSk7CVwKKwkJCQkJCQkJCVwKKwlfX3ZhbCA9IHBmeCMjaW9zd2FiIyNid2xxKHZhbCk7CQkJCQlcCisJCQkJCQkJCQlcCisJaWYgKHNpemVvZih0eXBlKSAhPSBzaXplb2YodTY0KSB8fCBzaXplb2YodTY0KSA9PSBzaXplb2YobG9uZykpCVwKKwkJKl9fbWVtID0gX192YWw7CQkJCQkJXAorCWVsc2UgaWYgKGNwdV9oYXNfNjRiaXRzKSB7CQkJCQlcCisJCXVuc2lnbmVkIGxvbmcgX19mbGFnczsJCQkJCVwKKwkJdHlwZSBfX3RtcDsJCQkJCQlcCisJCQkJCQkJCQlcCisJCWlmIChpcnEpCQkJCQkJXAorCQkJbG9jYWxfaXJxX3NhdmUoX19mbGFncyk7CQkJXAorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCVwKKwkJCSIuc2V0CW1pcHMzIgkJIlx0XHQjIF9fd3JpdGVxIiJcblx0IglcCisJCQkiZHNsbDMyCSVMMCwgJUwwLCAwIgkJCSJcblx0IglcCisJCQkiZHNybDMyCSVMMCwgJUwwLCAwIgkJCSJcblx0IglcCisJCQkiZHNsbDMyCSVNMCwgJU0wLCAwIgkJCSJcblx0IglcCisJCQkib3IJJUwwLCAlTDAsICVNMCIJCQkiXG5cdCIJXAorCQkJInNkCSVMMCwgJTIiCQkJIlxuXHQiCVwKKwkJCSIuc2V0CW1pcHMwIgkJCQkiXG4iCVwKKwkJCTogIj1yIiAoX190bXApCQkJCQlcCisJCQk6ICIwIiAoX192YWwpLCAibSIgKCpfX21lbSkpOwkJCVwKKwkJaWYgKGlycSkJCQkJCQlcCisJCQlsb2NhbF9pcnFfcmVzdG9yZShfX2ZsYWdzKTsJCQlcCisJfSBlbHNlCQkJCQkJCQlcCisJCUJVRygpOwkJCQkJCQlcCit9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorc3RhdGljIGlubGluZSB0eXBlIHBmeCMjcmVhZCMjYndscSh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKm1lbSkJCVwKK3sJCQkJCQkJCQlcCisJdm9sYXRpbGUgdHlwZSAqX19tZW07CQkJCQkJXAorCXR5cGUgX192YWw7CQkJCQkJCVwKKwkJCQkJCQkJCVwKKwlfX21lbSA9ICh2b2lkICopX19zd2l6emxlX2FkZHJfIyNid2xxKCh1bnNpZ25lZCBsb25nKShtZW0pKTsJXAorCQkJCQkJCQkJXAorCWlmIChzaXplb2YodHlwZSkgIT0gc2l6ZW9mKHU2NCkgfHwgc2l6ZW9mKHU2NCkgPT0gc2l6ZW9mKGxvbmcpKQlcCisJCV9fdmFsID0gKl9fbWVtOwkJCQkJCVwKKwllbHNlIGlmIChjcHVfaGFzXzY0Yml0cykgewkJCQkJXAorCQl1bnNpZ25lZCBsb25nIF9fZmxhZ3M7CQkJCQlcCisJCQkJCQkJCQlcCisJCWxvY2FsX2lycV9zYXZlKF9fZmxhZ3MpOwkJCQlcCisJCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJXAorCQkJIi5zZXQJbWlwczMiCQkiXHRcdCMgX19yZWFkcSIJIlxuXHQiCVwKKwkJCSJsZAklTDAsICUxIgkJCSJcblx0IglcCisJCQkiZHNyYTMyCSVNMCwgJUwwLCAwIgkJCSJcblx0IglcCisJCQkic2xsCSVMMCwgJUwwLCAwIgkJCSJcblx0IglcCisJCQkiLnNldAltaXBzMCIJCQkJIlxuIglcCisJCQk6ICI9ciIgKF9fdmFsKQkJCQkJXAorCQkJOiAibSIgKCpfX21lbSkpOwkJCQlcCisJCWxvY2FsX2lycV9yZXN0b3JlKF9fZmxhZ3MpOwkJCQlcCisJfSBlbHNlIHsJCQkJCQkJXAorCQlfX3ZhbCA9IDA7CQkJCQkJXAorCQlCVUcoKTsJCQkJCQkJXAorCX0JCQkJCQkJCVwKKwkJCQkJCQkJCVwKKwlyZXR1cm4gcGZ4IyNpb3N3YWIjI2J3bHEoX192YWwpOwkJCQlcCit9CisKKyNkZWZpbmUgX19CVUlMRF9JT1BPUlRfU0lOR0xFKHBmeCwgYndscSwgdHlwZSwgcCwgc2xvdykJCQlcCisJCQkJCQkJCQlcCitzdGF0aWMgaW5saW5lIHZvaWQgcGZ4IyNvdXQjI2J3bHEjI3AodHlwZSB2YWwsIHVuc2lnbmVkIGxvbmcgcG9ydCkJXAorewkJCQkJCQkJCVwKKwl2b2xhdGlsZSB0eXBlICpfX2FkZHI7CQkJCQkJXAorCXR5cGUgX192YWw7CQkJCQkJCVwKKwkJCQkJCQkJCVwKKwlwb3J0ID0gX19zd2l6emxlX2FkZHJfIyNid2xxKHBvcnQpOwkJCQlcCisJX19hZGRyID0gKHZvaWQgKikobWlwc19pb19wb3J0X2Jhc2UgKyBwb3J0KTsJCQlcCisJCQkJCQkJCQlcCisJX192YWwgPSBwZngjI2lvc3dhYiMjYndscSh2YWwpOwkJCQkJXAorCQkJCQkJCQkJXAorCWlmIChzaXplb2YodHlwZSkgIT0gc2l6ZW9mKHU2NCkpIHsJCQkJXAorCQkqX19hZGRyID0gX192YWw7CQkJCQlcCisJCXNsb3c7CQkJCQkJCVwKKwl9IGVsc2UJCQkJCQkJCVwKKwkJQlVJTERfQlVHKCk7CQkJCQkJXAorfQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKK3N0YXRpYyBpbmxpbmUgdHlwZSBwZngjI2luIyNid2xxIyNwKHVuc2lnbmVkIGxvbmcgcG9ydCkJCQlcCit7CQkJCQkJCQkJXAorCXZvbGF0aWxlIHR5cGUgKl9fYWRkcjsJCQkJCQlcCisJdHlwZSBfX3ZhbDsJCQkJCQkJXAorCQkJCQkJCQkJXAorCXBvcnQgPSBfX3N3aXp6bGVfYWRkcl8jI2J3bHEocG9ydCk7CQkJCVwKKwlfX2FkZHIgPSAodm9pZCAqKShtaXBzX2lvX3BvcnRfYmFzZSArIHBvcnQpOwkJCVwKKwkJCQkJCQkJCVwKKwlpZiAoc2l6ZW9mKHR5cGUpICE9IHNpemVvZih1NjQpKSB7CQkJCVwKKwkJX192YWwgPSAqX19hZGRyOwkJCQkJXAorCQlzbG93OwkJCQkJCQlcCisJfSBlbHNlIHsJCQkJCQkJXAorCQlfX3ZhbCA9IDA7CQkJCQkJXAorCQlCVUlMRF9CVUcoKTsJCQkJCQlcCisJfQkJCQkJCQkJXAorCQkJCQkJCQkJXAorCXJldHVybiBwZngjI2lvc3dhYiMjYndscShfX3ZhbCk7CQkJCVwKK30KKworI2RlZmluZSBfX0JVSUxEX01FTU9SWV9QRlgoYnVzLCBid2xxLCB0eXBlKQkJCQlcCisJCQkJCQkJCQlcCitfX0JVSUxEX01FTU9SWV9TSU5HTEUoYnVzLCBid2xxLCB0eXBlLCAxKQorCisjZGVmaW5lIF9fQlVJTERfSU9QT1JUX1BGWChidXMsIGJ3bHEsIHR5cGUpCQkJCVwKKwkJCQkJCQkJCVwKK19fQlVJTERfSU9QT1JUX1NJTkdMRShidXMsIGJ3bHEsIHR5cGUsICwpCQkJCVwKK19fQlVJTERfSU9QT1JUX1NJTkdMRShidXMsIGJ3bHEsIHR5cGUsIF9wLCBTTE9XX0RPV05fSU8pCisKKyNkZWZpbmUgQlVJTERJTyhid2xxLCB0eXBlKQkJCQkJCVwKKwkJCQkJCQkJCVwKK19fQlVJTERfTUVNT1JZX1BGWCgsIGJ3bHEsIHR5cGUpCQkJCQlcCitfX0JVSUxEX01FTU9SWV9QRlgoX19yYXdfLCBid2xxLCB0eXBlKQkJCQkJXAorX19CVUlMRF9NRU1PUllfUEZYKGJ1c18sIGJ3bHEsIHR5cGUpCQkJCQlcCitfX0JVSUxEX0lPUE9SVF9QRlgoLCBid2xxLCB0eXBlKQkJCQkJXAorX19CVUlMRF9JT1BPUlRfUEZYKF9fcmF3XywgYndscSwgdHlwZSkKKworI2RlZmluZSBfX0JVSUxESU8oYndscSwgdHlwZSkJCQkJCQlcCisJCQkJCQkJCQlcCitfX0JVSUxEX01FTU9SWV9TSU5HTEUoX19idXNfLCBid2xxLCB0eXBlLCAwKQorCitCVUlMRElPKGIsIHU4KQorQlVJTERJTyh3LCB1MTYpCitCVUlMRElPKGwsIHUzMikKK0JVSUxESU8ocSwgdTY0KQorCitfX0JVSUxESU8ocSwgdTY0KQorCisjZGVmaW5lIHJlYWRiX3JlbGF4ZWQJCQlyZWFkYgorI2RlZmluZSByZWFkd19yZWxheGVkCQkJcmVhZHcKKyNkZWZpbmUgcmVhZGxfcmVsYXhlZAkJCXJlYWRsCisjZGVmaW5lIHJlYWRxX3JlbGF4ZWQJCQlyZWFkcQorCisvKgorICogU29tZSBjb2RlIHRlc3RzIGZvciB0aGVzZSBzeW1ib2xzCisgKi8KKyNkZWZpbmUgcmVhZHEJCQkJcmVhZHEKKyNkZWZpbmUgd3JpdGVxCQkJCXdyaXRlcQorCisjZGVmaW5lIF9fQlVJTERfTUVNT1JZX1NUUklORyhid2xxLCB0eXBlKQkJCQlcCisJCQkJCQkJCQlcCitzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVzIyNid2xxKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqbWVtLCB2b2lkICphZGRyLAlcCisJCQkJdW5zaWduZWQgaW50IGNvdW50KQkJCVwKK3sJCQkJCQkJCQlcCisJdm9sYXRpbGUgdHlwZSAqX19hZGRyID0gYWRkcjsJCQkJCVwKKwkJCQkJCQkJCVwKKwl3aGlsZSAoY291bnQtLSkgewkJCQkJCVwKKwkJX19yYXdfd3JpdGUjI2J3bHEoKl9fYWRkciwgbWVtKTsJCQlcCisJCV9fYWRkcisrOwkJCQkJCVwKKwl9CQkJCQkJCQlcCit9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorc3RhdGljIGlubGluZSB2b2lkIHJlYWRzIyNid2xxKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqbWVtLCB2b2lkICphZGRyLAlcCisJCQkgICAgICAgdW5zaWduZWQgaW50IGNvdW50KQkJCVwKK3sJCQkJCQkJCQlcCisJdm9sYXRpbGUgdHlwZSAqX19hZGRyID0gYWRkcjsJCQkJCVwKKwkJCQkJCQkJCVwKKwl3aGlsZSAoY291bnQtLSkgewkJCQkJCVwKKwkJKl9fYWRkciA9IF9fcmF3X3JlYWQjI2J3bHEobWVtKTsJCQlcCisJCV9fYWRkcisrOwkJCQkJCVwKKwl9CQkJCQkJCQlcCit9CisKKyNkZWZpbmUgX19CVUlMRF9JT1BPUlRfU1RSSU5HKGJ3bHEsIHR5cGUpCQkJCVwKKwkJCQkJCQkJCVwKK3N0YXRpYyBpbmxpbmUgdm9pZCBvdXRzIyNid2xxKHVuc2lnbmVkIGxvbmcgcG9ydCwgdm9pZCAqYWRkciwJCVwKKwkJCSAgICAgIHVuc2lnbmVkIGludCBjb3VudCkJCQlcCit7CQkJCQkJCQkJXAorCXZvbGF0aWxlIHR5cGUgKl9fYWRkciA9IGFkZHI7CQkJCQlcCisJCQkJCQkJCQlcCisJd2hpbGUgKGNvdW50LS0pIHsJCQkJCQlcCisJCV9fcmF3X291dCMjYndscSgqX19hZGRyLCBwb3J0KTsJCQkJXAorCQlfX2FkZHIrKzsJCQkJCQlcCisJfQkJCQkJCQkJXAorfQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbnMjI2J3bHEodW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICphZGRyLAkJXAorCQkJICAgICB1bnNpZ25lZCBpbnQgY291bnQpCQkJXAorewkJCQkJCQkJCVwKKwl2b2xhdGlsZSB0eXBlICpfX2FkZHIgPSBhZGRyOwkJCQkJXAorCQkJCQkJCQkJXAorCXdoaWxlIChjb3VudC0tKSB7CQkJCQkJXAorCQkqX19hZGRyID0gX19yYXdfaW4jI2J3bHEocG9ydCk7CQkJCVwKKwkJX19hZGRyKys7CQkJCQkJXAorCX0JCQkJCQkJCVwKK30KKworI2RlZmluZSBCVUlMRFNUUklORyhid2xxLCB0eXBlKQkJCQkJCVwKKwkJCQkJCQkJCVwKK19fQlVJTERfTUVNT1JZX1NUUklORyhid2xxLCB0eXBlKQkJCQkJXAorX19CVUlMRF9JT1BPUlRfU1RSSU5HKGJ3bHEsIHR5cGUpCisKK0JVSUxEU1RSSU5HKGIsIHU4KQorQlVJTERTVFJJTkcodywgdTE2KQorQlVJTERTVFJJTkcobCwgdTMyKQorQlVJTERTVFJJTkcocSwgdTY0KQorCisKKy8qIERlcGVuZHMgb24gTUlQUyBJSSBpbnN0cnVjdGlvbiBzZXQgKi8KKyNkZWZpbmUgbW1pb3diKCkgYXNtIHZvbGF0aWxlICgic3luYyIgOjo6ICJtZW1vcnkiKQorCisjZGVmaW5lIG1lbXNldF9pbyhhLGIsYykJbWVtc2V0KCh2b2lkICopKGEpLChiKSwoYykpCisjZGVmaW5lIG1lbWNweV9mcm9taW8oYSxiLGMpCW1lbWNweSgoYSksKHZvaWQgKikoYiksKGMpKQorI2RlZmluZSBtZW1jcHlfdG9pbyhhLGIsYykJbWVtY3B5KCh2b2lkICopKGEpLChiKSwoYykpCisKKy8qCisgKiBNZW1vcnkgTWFwcGVkIEkvTworICovCisjZGVmaW5lIGlvcmVhZDgoYWRkcikJCXJlYWRiKGFkZHIpCisjZGVmaW5lIGlvcmVhZDE2KGFkZHIpCQlyZWFkdyhhZGRyKQorI2RlZmluZSBpb3JlYWQzMihhZGRyKQkJcmVhZGwoYWRkcikKKworI2RlZmluZSBpb3dyaXRlOChiLGFkZHIpCXdyaXRlYihiLGFkZHIpCisjZGVmaW5lIGlvd3JpdGUxNih3LGFkZHIpCXdyaXRldyh3LGFkZHIpCisjZGVmaW5lIGlvd3JpdGUzMihsLGFkZHIpCXdyaXRlbChsLGFkZHIpCisKKyNkZWZpbmUgaW9yZWFkOF9yZXAoYSxiLGMpCXJlYWRzYihhLGIsYykKKyNkZWZpbmUgaW9yZWFkMTZfcmVwKGEsYixjKQlyZWFkc3coYSxiLGMpCisjZGVmaW5lIGlvcmVhZDMyX3JlcChhLGIsYykJcmVhZHNsKGEsYixjKQorCisjZGVmaW5lIGlvd3JpdGU4X3JlcChhLGIsYykJd3JpdGVzYihhLGIsYykKKyNkZWZpbmUgaW93cml0ZTE2X3JlcChhLGIsYykJd3JpdGVzdyhhLGIsYykKKyNkZWZpbmUgaW93cml0ZTMyX3JlcChhLGIsYykJd3JpdGVzbChhLGIsYykKKworLyogQ3JlYXRlIGEgdmlydHVhbCBtYXBwaW5nIGNvb2tpZSBmb3IgYW4gSU8gcG9ydCByYW5nZSAqLworZXh0ZXJuIHZvaWQgX19pb21lbSAqaW9wb3J0X21hcCh1bnNpZ25lZCBsb25nIHBvcnQsIHVuc2lnbmVkIGludCBucik7CitleHRlcm4gdm9pZCBpb3BvcnRfdW5tYXAodm9pZCBfX2lvbWVtICopOworCisvKiBDcmVhdGUgYSB2aXJ0dWFsIG1hcHBpbmcgY29va2llIGZvciBhIFBDSSBCQVIgKG1lbW9yeSBvciBJTykgKi8KK3N0cnVjdCBwY2lfZGV2OworZXh0ZXJuIHZvaWQgX19pb21lbSAqcGNpX2lvbWFwKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBiYXIsIHVuc2lnbmVkIGxvbmcgbWF4KTsKK2V4dGVybiB2b2lkIHBjaV9pb3VubWFwKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHZvaWQgX19pb21lbSAqKTsKKworLyoKKyAqIElTQSBzcGFjZSBpcyAnYWx3YXlzIG1hcHBlZCcgb24gY3VycmVudGx5IHN1cHBvcnRlZCBNSVBTIHN5c3RlbXMsIG5vIG5lZWQKKyAqIHRvIGV4cGxpY2l0bHkgaW9yZW1hcCgpIGl0LiBUaGUgZmFjdCB0aGF0IHRoZSBJU0EgSU8gc3BhY2UgaXMgbWFwcGVkCisgKiB0byBQQUdFX09GRlNFVCBpcyBwdXJlIGNvaW5jaWRlbmNlIC0gaXQgZG9lcyBub3QgbWVhbiBJU0EgdmFsdWVzCisgKiBhcmUgcGh5c2ljYWwgYWRkcmVzc2VzLiBUaGUgZm9sbG93aW5nIGNvbnN0YW50IHBvaW50ZXIgY2FuIGJlCisgKiB1c2VkIGFzIHRoZSBJTy1hcmVhIHBvaW50ZXIgKGl0IGNhbiBiZSBpb3VubWFwcGVkIGFzIHdlbGwsIHNvIHRoZQorICogYW5hbG9neSB3aXRoIFBDSSBpcyBxdWl0ZSBsYXJnZSk6CisgKi8KKyNkZWZpbmUgX19JU0FfSU9fYmFzZSAoKGNoYXIgKikoaXNhX3Nsb3Rfb2Zmc2V0KSkKKworI2RlZmluZSBpc2FfcmVhZGIoYSkJCXJlYWRiKF9fSVNBX0lPX2Jhc2UgKyAoYSkpCisjZGVmaW5lIGlzYV9yZWFkdyhhKQkJcmVhZHcoX19JU0FfSU9fYmFzZSArIChhKSkKKyNkZWZpbmUgaXNhX3JlYWRsKGEpCQlyZWFkbChfX0lTQV9JT19iYXNlICsgKGEpKQorI2RlZmluZSBpc2FfcmVhZHEoYSkJCXJlYWRxKF9fSVNBX0lPX2Jhc2UgKyAoYSkpCisjZGVmaW5lIGlzYV93cml0ZWIoYixhKQkJd3JpdGViKGIsX19JU0FfSU9fYmFzZSArIChhKSkKKyNkZWZpbmUgaXNhX3dyaXRldyh3LGEpCQl3cml0ZXcodyxfX0lTQV9JT19iYXNlICsgKGEpKQorI2RlZmluZSBpc2Ffd3JpdGVsKGwsYSkJCXdyaXRlbChsLF9fSVNBX0lPX2Jhc2UgKyAoYSkpCisjZGVmaW5lIGlzYV93cml0ZXEocSxhKQkJd3JpdGVxKHEsX19JU0FfSU9fYmFzZSArIChhKSkKKyNkZWZpbmUgaXNhX21lbXNldF9pbyhhLGIsYykJbWVtc2V0X2lvKF9fSVNBX0lPX2Jhc2UgKyAoYSksKGIpLChjKSkKKyNkZWZpbmUgaXNhX21lbWNweV9mcm9taW8oYSxiLGMpIG1lbWNweV9mcm9taW8oKGEpLF9fSVNBX0lPX2Jhc2UgKyAoYiksKGMpKQorI2RlZmluZSBpc2FfbWVtY3B5X3RvaW8oYSxiLGMpCW1lbWNweV90b2lvKF9fSVNBX0lPX2Jhc2UgKyAoYSksKGIpLChjKSkKKworLyoKKyAqIFdlIGRvbid0IGhhdmUgY3N1bV9wYXJ0aWFsX2NvcHlfZnJvbWlvKCkgeWV0LCBzbyB3ZSBjaGVhdCBoZXJlIGFuZAorICoganVzdCBjb3B5IGl0LiBUaGUgbmV0IGNvZGUgd2lsbCB0aGVuIGRvIHRoZSBjaGVja3N1bSBsYXRlci4KKyAqLworI2RlZmluZSBldGhfaW9fY29weV9hbmRfc3VtKHNrYixzcmMsbGVuLHVudXNlZCkgbWVtY3B5X2Zyb21pbygoc2tiKS0+ZGF0YSwoc3JjKSwobGVuKSkKKyNkZWZpbmUgaXNhX2V0aF9pb19jb3B5X2FuZF9zdW0oYSxiLGMsZCkgZXRoX2NvcHlfYW5kX3N1bSgoYSksKGIpLChjKSwoZCkpCisKKy8qCisgKiAgICAgY2hlY2tfc2lnbmF0dXJlICAgICAgICAgLSAgICAgICBmaW5kIEJJT1Mgc2lnbmF0dXJlcworICogICAgIEBpb19hZGRyOiBtbWlvIGFkZHJlc3MgdG8gY2hlY2sKKyAqICAgICBAc2lnbmF0dXJlOiAgc2lnbmF0dXJlIGJsb2NrCisgKiAgICAgQGxlbmd0aDogbGVuZ3RoIG9mIHNpZ25hdHVyZQorICoKKyAqICAgICBQZXJmb3JtIGEgc2lnbmF0dXJlIGNvbXBhcmlzb24gd2l0aCB0aGUgbW1pbyBhZGRyZXNzIGlvX2FkZHIuIFRoaXMKKyAqICAgICBhZGRyZXNzIHNob3VsZCBoYXZlIGJlZW4gb2J0YWluZWQgYnkgaW9yZW1hcC4KKyAqICAgICBSZXR1cm5zIDEgb24gYSBtYXRjaC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgY2hlY2tfc2lnbmF0dXJlKGNoYXIgX19pb21lbSAqaW9fYWRkciwKKwljb25zdCB1bnNpZ25lZCBjaGFyICpzaWduYXR1cmUsIGludCBsZW5ndGgpCit7CisJaW50IHJldHZhbCA9IDA7CisJZG8geworCQlpZiAocmVhZGIoaW9fYWRkcikgIT0gKnNpZ25hdHVyZSkKKwkJCWdvdG8gb3V0OworCQlpb19hZGRyKys7CisJCXNpZ25hdHVyZSsrOworCQlsZW5ndGgtLTsKKwl9IHdoaWxlIChsZW5ndGgpOworCXJldHZhbCA9IDE7CitvdXQ6CisJcmV0dXJuIHJldHZhbDsKK30KKworLyoKKyAqIFRoZSBjYWNoZXMgb24gc29tZSBhcmNoaXRlY3R1cmVzIGFyZW4ndCBkbWEtY29oZXJlbnQgYW5kIGhhdmUgbmVlZCB0bworICogaGFuZGxlIHRoaXMgaW4gc29mdHdhcmUuICBUaGVyZSBhcmUgdGhyZWUgdHlwZXMgb2Ygb3BlcmF0aW9ucyB0aGF0CisgKiBjYW4gYmUgYXBwbGllZCB0byBkbWEgYnVmZmVycy4KKyAqCisgKiAgLSBkbWFfY2FjaGVfd2JhY2tfaW52KHN0YXJ0LCBzaXplKSBtYWtlcyBjYWNoZXMgYW5kIGNvaGVyZW50IGJ5CisgKiAgICB3cml0aW5nIHRoZSBjb250ZW50IG9mIHRoZSBjYWNoZXMgYmFjayB0byBtZW1vcnksIGlmIG5lY2Vzc2FyeS4KKyAqICAgIFRoZSBmdW5jdGlvbiBhbHNvIGludmFsaWRhdGVzIHRoZSBhZmZlY3RlZCBwYXJ0IG9mIHRoZSBjYWNoZXMgYXMKKyAqICAgIG5lY2Vzc2FyeSBiZWZvcmUgRE1BIHRyYW5zZmVycyBmcm9tIG91dHNpZGUgdG8gbWVtb3J5LgorICogIC0gZG1hX2NhY2hlX3diYWNrKHN0YXJ0LCBzaXplKSBtYWtlcyBjYWNoZXMgYW5kIGNvaGVyZW50IGJ5CisgKiAgICB3cml0aW5nIHRoZSBjb250ZW50IG9mIHRoZSBjYWNoZXMgYmFjayB0byBtZW1vcnksIGlmIG5lY2Vzc2FyeS4KKyAqICAgIFRoZSBmdW5jdGlvbiBhbHNvIGludmFsaWRhdGVzIHRoZSBhZmZlY3RlZCBwYXJ0IG9mIHRoZSBjYWNoZXMgYXMKKyAqICAgIG5lY2Vzc2FyeSBiZWZvcmUgRE1BIHRyYW5zZmVycyBmcm9tIG91dHNpZGUgdG8gbWVtb3J5LgorICogIC0gZG1hX2NhY2hlX2ludihzdGFydCwgc2l6ZSkgaW52YWxpZGF0ZXMgdGhlIGFmZmVjdGVkIHBhcnRzIG9mIHRoZQorICogICAgY2FjaGVzLiAgRGlydHkgbGluZXMgb2YgdGhlIGNhY2hlcyBtYXkgYmUgd3JpdHRlbiBiYWNrIG9yIHNpbXBseQorICogICAgYmUgZGlzY2FyZGVkLiAgVGhpcyBvcGVyYXRpb24gaXMgbmVjZXNzYXJ5IGJlZm9yZSBkbWEgb3BlcmF0aW9ucworICogICAgdG8gdGhlIG1lbW9yeS4KKyAqLworI2lmZGVmIENPTkZJR19ETUFfTk9OQ09IRVJFTlQKKworZXh0ZXJuIHZvaWQgKCpfZG1hX2NhY2hlX3diYWNrX2ludikodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKTsKK2V4dGVybiB2b2lkICgqX2RtYV9jYWNoZV93YmFjaykodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKTsKK2V4dGVybiB2b2lkICgqX2RtYV9jYWNoZV9pbnYpKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CisKKyNkZWZpbmUgZG1hX2NhY2hlX3diYWNrX2ludihzdGFydCwgc2l6ZSkJX2RtYV9jYWNoZV93YmFja19pbnYoc3RhcnQsc2l6ZSkKKyNkZWZpbmUgZG1hX2NhY2hlX3diYWNrKHN0YXJ0LCBzaXplKQkJX2RtYV9jYWNoZV93YmFjayhzdGFydCxzaXplKQorI2RlZmluZSBkbWFfY2FjaGVfaW52KHN0YXJ0LCBzaXplKQkJX2RtYV9jYWNoZV9pbnYoc3RhcnQsc2l6ZSkKKworI2Vsc2UgLyogU2FuZSBoYXJkd2FyZSAqLworCisjZGVmaW5lIGRtYV9jYWNoZV93YmFja19pbnYoc3RhcnQsc2l6ZSkJXAorCWRvIHsgKHZvaWQpIChzdGFydCk7ICh2b2lkKSAoc2l6ZSk7IH0gd2hpbGUgKDApCisjZGVmaW5lIGRtYV9jYWNoZV93YmFjayhzdGFydCxzaXplKQlcCisJZG8geyAodm9pZCkgKHN0YXJ0KTsgKHZvaWQpIChzaXplKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZG1hX2NhY2hlX2ludihzdGFydCxzaXplKQlcCisJZG8geyAodm9pZCkgKHN0YXJ0KTsgKHZvaWQpIChzaXplKTsgfSB3aGlsZSAoMCkKKworI2VuZGlmIC8qIENPTkZJR19ETUFfTk9OQ09IRVJFTlQgKi8KKworLyoKKyAqIFJlYWQgYSAzMi1iaXQgcmVnaXN0ZXIgdGhhdCByZXF1aXJlcyBhIDY0LWJpdCByZWFkIGN5Y2xlIG9uIHRoZSBidXMuCisgKiBBdm9pZCBpbnRlcnJ1cHQgbXVja2luZywganVzdCBhZGp1c3QgdGhlIGFkZHJlc3MgZm9yIDQtYnl0ZSBhY2Nlc3MuCisgKiBBc3N1bWUgdGhlIGFkZHJlc3NlcyBhcmUgOC1ieXRlIGFsaWduZWQuCisgKi8KKyNpZmRlZiBfX01JUFNFQl9fCisjZGVmaW5lIF9fQ1NSXzMyX0FESlVTVCA0CisjZWxzZQorI2RlZmluZSBfX0NTUl8zMl9BREpVU1QgMAorI2VuZGlmCisKKyNkZWZpbmUgY3NyX291dDMyKHYsYSkgKCoodm9sYXRpbGUgdTMyICopKCh1bnNpZ25lZCBsb25nKShhKSArIF9fQ1NSXzMyX0FESlVTVCkgPSAodikpCisjZGVmaW5lIGNzcl9pbjMyKGEpICAgICgqKHZvbGF0aWxlIHUzMiAqKSgodW5zaWduZWQgbG9uZykoYSkgKyBfX0NTUl8zMl9BREpVU1QpKQorCisvKgorICogQ29udmVydCBhIHBoeXNpY2FsIHBvaW50ZXIgdG8gYSB2aXJ0dWFsIGtlcm5lbCBwb2ludGVyIGZvciAvZGV2L21lbQorICogYWNjZXNzCisgKi8KKyNkZWZpbmUgeGxhdGVfZGV2X21lbV9wdHIocCkJX192YShwKQorCisvKgorICogQ29udmVydCBhIHZpcnR1YWwgY2FjaGVkIHBvaW50ZXIgdG8gYW4gdW5jYWNoZWQgcG9pbnRlcgorICovCisjZGVmaW5lIHhsYXRlX2Rldl9rbWVtX3B0cihwKQlwCisKKyNlbmRpZiAvKiBfQVNNX0lPX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvaW9jdGwuaCBiL2luY2x1ZGUvYXNtLW1pcHMvaW9jdGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmE2NDFhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9pb2N0bC5oCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUsIDk2LCA5OSwgMjAwMSBSYWxmIEJhZWNobGUKKyAqLworI2lmbmRlZiBfQVNNX0lPQ1RMX0gKKyNkZWZpbmUgX0FTTV9JT0NUTF9ICisKKy8qCisgKiBUaGUgb3JpZ2luYWwgbGludXggaW9jdGwgbnVtYmVyaW5nIHNjaGVtZSB3YXMganVzdCBhIGdlbmVyYWwKKyAqICJhbnl0aGluZyBnb2VzIiBzZXR1cCwgd2hlcmUgbW9yZSBvciBsZXNzIHJhbmRvbSBudW1iZXJzIHdlcmUKKyAqIGFzc2lnbmVkLiAgU29ycnksIEkgd2FzIGNsdWVsZXNzIHdoZW4gSSBzdGFydGVkIG91dCBvbiB0aGlzLgorICoKKyAqIE9uIHRoZSBhbHBoYSwgd2UnbGwgdHJ5IHRvIGNsZWFuIGl0IHVwIGEgYml0LCB1c2luZyBhIG1vcmUgc2FuZQorICogaW9jdGwgbnVtYmVyaW5nLCBhbmQgYWxzbyB0cnlpbmcgdG8gYmUgY29tcGF0aWJsZSB3aXRoIE9TRi8xIGluCisgKiB0aGUgcHJvY2Vzcy4gSSdkIGxpa2UgdG8gY2xlYW4gaXQgdXAgZm9yIHRoZSBpMzg2IGFzIHdlbGwsIGJ1dAorICogaXQncyBzbyBwYWluZnVsIHJlY29nbml6aW5nIGJvdGggdGhlIG5ldyBhbmQgdGhlIG9sZCBudW1iZXJzLi4KKyAqCisgKiBUaGUgc2FtZSBhcHBsaWVzIGZvciBmb3IgdGhlIE1JUFMgQUJJOyBpbiBmYWN0IGV2ZW4gdGhlIG1hY3JvcworICogZnJvbSBMaW51eC9BbHBoYSBmaXQgYWxtb3N0IHBlcmZlY3RseS4KKyAqLworCisjZGVmaW5lIF9JT0NfTlJCSVRTCTgKKyNkZWZpbmUgX0lPQ19UWVBFQklUUwk4CisjZGVmaW5lIF9JT0NfU0laRUJJVFMJMTMKKyNkZWZpbmUgX0lPQ19ESVJCSVRTCTMKKworI2RlZmluZSBfSU9DX05STUFTSwkoKDEgPDwgX0lPQ19OUkJJVFMpLTEpCisjZGVmaW5lIF9JT0NfVFlQRU1BU0sJKCgxIDw8IF9JT0NfVFlQRUJJVFMpLTEpCisjZGVmaW5lIF9JT0NfU0laRU1BU0sJKCgxIDw8IF9JT0NfU0laRUJJVFMpLTEpCisjZGVmaW5lIF9JT0NfRElSTUFTSwkoKDEgPDwgX0lPQ19ESVJCSVRTKS0xKQorCisjZGVmaW5lIF9JT0NfTlJTSElGVAkwCisjZGVmaW5lIF9JT0NfVFlQRVNISUZUCShfSU9DX05SU0hJRlQrX0lPQ19OUkJJVFMpCisjZGVmaW5lIF9JT0NfU0laRVNISUZUCShfSU9DX1RZUEVTSElGVCtfSU9DX1RZUEVCSVRTKQorI2RlZmluZSBfSU9DX0RJUlNISUZUCShfSU9DX1NJWkVTSElGVCtfSU9DX1NJWkVCSVRTKQorCisvKgorICogV2UgdG8gYWRkaXRpb25hbGx5IGxpbWl0IHBhcmFtZXRlcnMgdG8gYSBtYXhpbXVtIDI1NSBieXRlcy4KKyAqLworI2RlZmluZSBfSU9DX1NMTUFTSwkweGZmCisKKy8qCisgKiBEaXJlY3Rpb24gYml0cyBfSU9DX05PTkUgY291bGQgYmUgMCwgYnV0IE9TRi8xIGdpdmVzIGl0IGEgYml0LgorICogQW5kIHRoaXMgdHVybnMgb3V0IHVzZWZ1bCB0byBjYXRjaCBvbGQgaW9jdGwgbnVtYmVycyBpbiBoZWFkZXIKKyAqIGZpbGVzIGZvciB1cy4KKyAqLworI2RlZmluZSBfSU9DX05PTkUJMVUKKyNkZWZpbmUgX0lPQ19SRUFECTJVCisjZGVmaW5lIF9JT0NfV1JJVEUJNFUKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgYXJlIGluY2x1ZGVkIGZvciBjb21wYXRpYmlsaXR5CisgKi8KKyNkZWZpbmUgX0lPQ19WT0lECTB4MjAwMDAwMDAKKyNkZWZpbmUgX0lPQ19PVVQJMHg0MDAwMDAwMAorI2RlZmluZSBfSU9DX0lOCQkweDgwMDAwMDAwCisjZGVmaW5lIF9JT0NfSU5PVVQJKElPQ19JTnxJT0NfT1VUKQorCisjZGVmaW5lIF9JT0MoZGlyLHR5cGUsbnIsc2l6ZSkgXAorCSgoKGRpcikgIDw8IF9JT0NfRElSU0hJRlQpIHwgXAorCSAoKHR5cGUpIDw8IF9JT0NfVFlQRVNISUZUKSB8IFwKKwkgKChucikgICA8PCBfSU9DX05SU0hJRlQpIHwgXAorCSAoKHNpemUpIDw8IF9JT0NfU0laRVNISUZUKSkKKworLyogcHJvdm9rZSBjb21waWxlIGVycm9yIGZvciBpbnZhbGlkIHVzZXMgb2Ygc2l6ZSBhcmd1bWVudCAqLworZXh0ZXJuIHVuc2lnbmVkIGludCBfX2ludmFsaWRfc2l6ZV9hcmd1bWVudF9mb3JfSU9DOworI2RlZmluZSBfSU9DX1RZUEVDSEVDSyh0KSBcCisJKChzaXplb2YodCkgPT0gc2l6ZW9mKHRbMV0pICYmIFwKKwkgIHNpemVvZih0KSA8ICgxIDw8IF9JT0NfU0laRUJJVFMpKSA/IFwKKwkgIHNpemVvZih0KSA6IF9faW52YWxpZF9zaXplX2FyZ3VtZW50X2Zvcl9JT0MpCisKKy8qIHVzZWQgdG8gY3JlYXRlIG51bWJlcnMgKi8KKyNkZWZpbmUgX0lPKHR5cGUsbnIpCQlfSU9DKF9JT0NfTk9ORSwodHlwZSksKG5yKSwwKQorI2RlZmluZSBfSU9SKHR5cGUsbnIsc2l6ZSkJX0lPQyhfSU9DX1JFQUQsKHR5cGUpLChuciksKF9JT0NfVFlQRUNIRUNLKHNpemUpKSkKKyNkZWZpbmUgX0lPVyh0eXBlLG5yLHNpemUpCV9JT0MoX0lPQ19XUklURSwodHlwZSksKG5yKSwoX0lPQ19UWVBFQ0hFQ0soc2l6ZSkpKQorI2RlZmluZSBfSU9XUih0eXBlLG5yLHNpemUpCV9JT0MoX0lPQ19SRUFEfF9JT0NfV1JJVEUsKHR5cGUpLChuciksKF9JT0NfVFlQRUNIRUNLKHNpemUpKSkKKyNkZWZpbmUgX0lPUl9CQUQodHlwZSxucixzaXplKQlfSU9DKF9JT0NfUkVBRCwodHlwZSksKG5yKSxzaXplb2Yoc2l6ZSkpCisjZGVmaW5lIF9JT1dfQkFEKHR5cGUsbnIsc2l6ZSkJX0lPQyhfSU9DX1dSSVRFLCh0eXBlKSwobnIpLHNpemVvZihzaXplKSkKKyNkZWZpbmUgX0lPV1JfQkFEKHR5cGUsbnIsc2l6ZSkJX0lPQyhfSU9DX1JFQUR8X0lPQ19XUklURSwodHlwZSksKG5yKSxzaXplb2Yoc2l6ZSkpCisKKworLyogdXNlZCB0byBkZWNvZGUgdGhlbS4uICovCisjZGVmaW5lIF9JT0NfRElSKG5yKQkJKCgobnIpID4+IF9JT0NfRElSU0hJRlQpICYgX0lPQ19ESVJNQVNLKQorI2RlZmluZSBfSU9DX1RZUEUobnIpCQkoKChucikgPj4gX0lPQ19UWVBFU0hJRlQpICYgX0lPQ19UWVBFTUFTSykKKyNkZWZpbmUgX0lPQ19OUihucikJCSgoKG5yKSA+PiBfSU9DX05SU0hJRlQpICYgX0lPQ19OUk1BU0spCisjZGVmaW5lIF9JT0NfU0laRShucikJCSgoKG5yKSA+PiBfSU9DX1NJWkVTSElGVCkgJiBfSU9DX1NJWkVNQVNLKQorCisvKiAuLi5hbmQgZm9yIHRoZSBkcml2ZXJzL3NvdW5kIGZpbGVzLi4uICovCisKKyNkZWZpbmUgSU9DX0lOCQkoX0lPQ19XUklURSA8PCBfSU9DX0RJUlNISUZUKQorI2RlZmluZSBJT0NfT1VUCQkoX0lPQ19SRUFEIDw8IF9JT0NfRElSU0hJRlQpCisjZGVmaW5lIElPQ19JTk9VVAkoKF9JT0NfV1JJVEV8X0lPQ19SRUFEKSA8PCBfSU9DX0RJUlNISUZUKQorI2RlZmluZSBJT0NTSVpFX01BU0sJKF9JT0NfU0laRU1BU0sgPDwgX0lPQ19TSVpFU0hJRlQpCisjZGVmaW5lIElPQ1NJWkVfU0hJRlQJKF9JT0NfU0laRVNISUZUKQorCisjZW5kaWYgLyogX0FTTV9JT0NUTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2lvY3Rscy5oIGIvaW5jbHVkZS9hc20tbWlwcy9pb2N0bHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmY2YzM2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9pb2N0bHMuaApAQCAtMCwwICsxLDEwNSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiwgMjAwMSBSYWxmIEJhZWNobGUKKyAqIENvcHlyaWdodCAoQykgMjAwMSBNSVBTIFRlY2hub2xvZ2llcywgSW5jLgorICovCisjaWZuZGVmIF9fQVNNX0lPQ1RMU19ICisjZGVmaW5lIF9fQVNNX0lPQ1RMU19ICisKKyNpbmNsdWRlIDxhc20vaW9jdGwuaD4KKworI2RlZmluZSBUQ0dFVEEJCTB4NTQwMQorI2RlZmluZSBUQ1NFVEEJCTB4NTQwMgkvKiBDbGFzaGVzIHdpdGggU05EQ1RMX1RNUl9TVEFSVCBzb3VuZCBpb2N0bCAqLworI2RlZmluZSBUQ1NFVEFXCQkweDU0MDMKKyNkZWZpbmUgVENTRVRBRgkJMHg1NDA0CisKKyNkZWZpbmUgVENTQlJLCQkweDU0MDUKKyNkZWZpbmUgVENYT05DCQkweDU0MDYKKyNkZWZpbmUgVENGTFNICQkweDU0MDcKKworI2RlZmluZSBUQ0dFVFMJCTB4NTQwZAorI2RlZmluZSBUQ1NFVFMJCTB4NTQwZQorI2RlZmluZSBUQ1NFVFNXCQkweDU0MGYKKyNkZWZpbmUgVENTRVRTRgkJMHg1NDEwCisKKyNkZWZpbmUgVElPQ0VYQ0wJMHg3NDBkCQkvKiBzZXQgZXhjbHVzaXZlIHVzZSBvZiB0dHkgKi8KKyNkZWZpbmUgVElPQ05YQ0wJMHg3NDBlCQkvKiByZXNldCBleGNsdXNpdmUgdXNlIG9mIHR0eSAqLworI2RlZmluZSBUSU9DT1VUUQkweDc0NzIJCS8qIG91dHB1dCBxdWV1ZSBzaXplICovCisjZGVmaW5lIFRJT0NTVEkJCTB4NTQ3MgkJLyogc2ltdWxhdGUgdGVybWluYWwgaW5wdXQgKi8KKyNkZWZpbmUgVElPQ01HRVQJMHg3NDFkCQkvKiBnZXQgYWxsIG1vZGVtIGJpdHMgKi8KKyNkZWZpbmUgVElPQ01CSVMJMHg3NDFiCQkvKiBiaXMgbW9kZW0gYml0cyAqLworI2RlZmluZSBUSU9DTUJJQwkweDc0MWMJCS8qIGJpYyBtb2RlbSBiaXRzICovCisjZGVmaW5lIFRJT0NNU0VUCTB4NzQxYQkJLyogc2V0IGFsbCBtb2RlbSBiaXRzICovCisjZGVmaW5lIFRJT0NQS1QJCTB4NTQ3MAkJLyogcHR5OiBzZXQvY2xlYXIgcGFja2V0IG1vZGUgKi8KKyNkZWZpbmUJIFRJT0NQS1RfREFUQQkJMHgwMAkvKiBkYXRhIHBhY2tldCAqLworI2RlZmluZQkgVElPQ1BLVF9GTFVTSFJFQUQJMHgwMQkvKiBmbHVzaCBwYWNrZXQgKi8KKyNkZWZpbmUJIFRJT0NQS1RfRkxVU0hXUklURQkweDAyCS8qIGZsdXNoIHBhY2tldCAqLworI2RlZmluZQkgVElPQ1BLVF9TVE9QCQkweDA0CS8qIHN0b3Agb3V0cHV0ICovCisjZGVmaW5lCSBUSU9DUEtUX1NUQVJUCQkweDA4CS8qIHN0YXJ0IG91dHB1dCAqLworI2RlZmluZQkgVElPQ1BLVF9OT1NUT1AJCTB4MTAJLyogbm8gbW9yZSBeUywgXlEgKi8KKyNkZWZpbmUJIFRJT0NQS1RfRE9TVE9QCQkweDIwCS8qIG5vdyBkbyBeUyBeUSAqLworLyogI2RlZmluZSAgVElPQ1BLVF9JT0NUTAkJMHg0MAlzdGF0ZSBjaGFuZ2Ugb2YgcHR5IGRyaXZlciAqLworI2RlZmluZSBUSU9DU1dJTlNaCV9JT1coJ3QnLCAxMDMsIHN0cnVjdCB3aW5zaXplKQkvKiBzZXQgd2luZG93IHNpemUgKi8KKyNkZWZpbmUgVElPQ0dXSU5TWglfSU9SKCd0JywgMTA0LCBzdHJ1Y3Qgd2luc2l6ZSkJLyogZ2V0IHdpbmRvdyBzaXplICovCisjZGVmaW5lIFRJT0NOT1RUWQkweDU0NzEJCS8qIHZvaWQgdHR5IGFzc29jaWF0aW9uICovCisjZGVmaW5lIFRJT0NTRVRECTB4NzQwMQorI2RlZmluZSBUSU9DR0VURAkweDc0MDAKKworI2RlZmluZSBGSU9DTEVYCQkweDY2MDEKKyNkZWZpbmUgRklPTkNMRVgJMHg2NjAyCisjZGVmaW5lIEZJT0FTWU5DCTB4NjY3ZAorI2RlZmluZSBGSU9OQklPCQkweDY2N2UKKyNkZWZpbmUgRklPUVNJWkUJMHg2NjdmCisKKyNkZWZpbmUgVElPQ0dMVEMJMHg3NDc0CQkJLyogZ2V0IHNwZWNpYWwgbG9jYWwgY2hhcnMgKi8KKyNkZWZpbmUgVElPQ1NMVEMJMHg3NDc1CQkJLyogc2V0IHNwZWNpYWwgbG9jYWwgY2hhcnMgKi8KKyNkZWZpbmUgVElPQ1NQR1JQCV9JT1coJ3QnLCAxMTgsIGludCkJLyogc2V0IHBncnAgb2YgdHR5ICovCisjZGVmaW5lIFRJT0NHUEdSUAlfSU9SKCd0JywgMTE5LCBpbnQpCS8qIGdldCBwZ3JwIG9mIHR0eSAqLworI2RlZmluZSBUSU9DQ09OUwlfSU9XKCd0JywgMTIwLCBpbnQpCS8qIGJlY29tZSB2aXJ0dWFsIGNvbnNvbGUgKi8KKworI2RlZmluZSBGSU9OUkVBRAkweDQ2N2YKKyNkZWZpbmUgVElPQ0lOUQkJRklPTlJFQUQKKworI2RlZmluZSBUSU9DR0VUUCAgICAgICAgMHg3NDA4CisjZGVmaW5lIFRJT0NTRVRQICAgICAgICAweDc0MDkKKyNkZWZpbmUgVElPQ1NFVE4gICAgICAgIDB4NzQwYQkJCS8qIFRJT0NTRVRQIHdvIGZsdXNoICovCisKKy8qICNkZWZpbmUgVElPQ1NFVEEJX0lPVygndCcsIDIwLCBzdHJ1Y3QgdGVybWlvcykgc2V0IHRlcm1pb3Mgc3RydWN0ICovCisvKiAjZGVmaW5lIFRJT0NTRVRBVwlfSU9XKCd0JywgMjEsIHN0cnVjdCB0ZXJtaW9zKSBkcmFpbiBvdXRwdXQsIHNldCAqLworLyogI2RlZmluZSBUSU9DU0VUQUYJX0lPVygndCcsIDIyLCBzdHJ1Y3QgdGVybWlvcykgZHJuIG91dCwgZmxzIGluLCBzZXQgKi8KKy8qICNkZWZpbmUgVElPQ0dFVEQJX0lPUigndCcsIDI2LCBpbnQpCWdldCBsaW5lIGRpc2NpcGxpbmUgKi8KKy8qICNkZWZpbmUgVElPQ1NFVEQJX0lPVygndCcsIDI3LCBpbnQpCXNldCBsaW5lIGRpc2NpcGxpbmUgKi8KKwkJCQkJCS8qIDEyNy0xMjQgY29tcGF0ICovCisKKyNkZWZpbmUgVElPQ1NCUksJMHg1NDI3ICAvKiBCU0QgY29tcGF0aWJpbGl0eSAqLworI2RlZmluZSBUSU9DQ0JSSwkweDU0MjggIC8qIEJTRCBjb21wYXRpYmlsaXR5ICovCisjZGVmaW5lIFRJT0NHU0lECTB4NzQxNiAgLyogUmV0dXJuIHRoZSBzZXNzaW9uIElEIG9mIEZEICovCisjZGVmaW5lIFRJT0NHUFROCV9JT1IoJ1QnLDB4MzAsIHVuc2lnbmVkIGludCkgLyogR2V0IFB0eSBOdW1iZXIgKG9mIHB0eS1tdXggZGV2aWNlKSAqLworI2RlZmluZSBUSU9DU1BUTENLCV9JT1coJ1QnLDB4MzEsIGludCkgIC8qIExvY2svdW5sb2NrIFB0eSAqLworCisvKiBJIGhvcGUgdGhlIHJhbmdlIGZyb20gMHg1NDgwIG9uIGlzIGZyZWUgLi4uICovCisjZGVmaW5lIFRJT0NTQ1RUWQkweDU0ODAJCS8qIGJlY29tZSBjb250cm9sbGluZyB0dHkgKi8KKyNkZWZpbmUgVElPQ0dTT0ZUQ0FSCTB4NTQ4MQorI2RlZmluZSBUSU9DU1NPRlRDQVIJMHg1NDgyCisjZGVmaW5lIFRJT0NMSU5VWAkweDU0ODMKKyNkZWZpbmUgVElPQ0dTRVJJQUwJMHg1NDg0CisjZGVmaW5lIFRJT0NTU0VSSUFMCTB4NTQ4NQorI2RlZmluZSBUQ1NCUktQCQkweDU0ODYJLyogTmVlZGVkIGZvciBQT1NJWCB0Y3NlbmRicmVhaygpICovCisjZGVmaW5lIFRJT0NTRVJDT05GSUcJMHg1NDg4CisjZGVmaW5lIFRJT0NTRVJHV0lMRAkweDU0ODkKKyNkZWZpbmUgVElPQ1NFUlNXSUxECTB4NTQ4YQorI2RlZmluZSBUSU9DR0xDS1RSTUlPUwkweDU0OGIKKyNkZWZpbmUgVElPQ1NMQ0tUUk1JT1MJMHg1NDhjCisjZGVmaW5lIFRJT0NTRVJHU1RSVUNUCTB4NTQ4ZCAvKiBGb3IgZGVidWdnaW5nIG9ubHkgKi8KKyNkZWZpbmUgVElPQ1NFUkdFVExTUiAgIDB4NTQ4ZSAvKiBHZXQgbGluZSBzdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgVElPQ1NFUkdFVE1VTFRJIDB4NTQ4ZiAvKiBHZXQgbXVsdGlwb3J0IGNvbmZpZyAgKi8KKyNkZWZpbmUgVElPQ1NFUlNFVE1VTFRJIDB4NTQ5MCAvKiBTZXQgbXVsdGlwb3J0IGNvbmZpZyAqLworI2RlZmluZSBUSU9DTUlXQUlUICAgICAgMHg1NDkxIC8qIHdhaXQgZm9yIGEgY2hhbmdlIG9uIHNlcmlhbCBpbnB1dCBsaW5lKHMpICovCisjZGVmaW5lIFRJT0NHSUNPVU5UICAgICAweDU0OTIgLyogcmVhZCBzZXJpYWwgcG9ydCBpbmxpbmUgaW50ZXJydXB0IGNvdW50cyAqLworI2RlZmluZSBUSU9DR0hBWUVTRVNQCTB4NTQ5MyAvKiBHZXQgSGF5ZXMgRVNQIGNvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgVElPQ1NIQVlFU0VTUAkweDU0OTQgLyogU2V0IEhheWVzIEVTUCBjb25maWd1cmF0aW9uICovCisKKyNlbmRpZiAvKiBfX0FTTV9JT0NUTFNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9pcDMyL2NyaW1lLmggYi9pbmNsdWRlL2FzbS1taXBzL2lwMzIvY3JpbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTI4NzliYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvaXAzMi9jcmltZS5oCkBAIC0wLDAgKzEsMTYxIEBACisvKgorICogRGVmaW5pdGlvbnMgZm9yIHRoZSBTR0kgQ1JJTUUgKENQVSwgUmVuZGVyaW5nLCBJbnRlcmNvbm5lY3QgYW5kIE1lbW9yeQorICogRW5naW5lKQorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBIYXJhbGQgS29lcmZnZW4KKyAqLworCisjaWZuZGVmIF9fQVNNX0NSSU1FX0hfXworI2RlZmluZSBfX0FTTV9DUklNRV9IX18KKworLyoKKyAqIEFkZHJlc3MgbWFwCisgKi8KKyNkZWZpbmUgQ1JJTUVfQkFTRQkweDE0MDAwMDAwCS8qIHBoeXNpY2FsICovCisKKyN1bmRlZiBCSVQKKyNkZWZpbmUgQklUKHgpCSgxVUwgPDwgKHgpKQorCitzdHJ1Y3Qgc2dpX2NyaW1lIHsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGlkOworI2RlZmluZSBDUklNRV9JRF9NQVNLCQkJMHhmZgorI2RlZmluZSBDUklNRV9JRF9JREJJVFMJCQkweGYwCisjZGVmaW5lIENSSU1FX0lEX0lEVkFMVUUJCTB4YTAKKyNkZWZpbmUgQ1JJTUVfSURfUkVWCQkJMHgwZgorI2RlZmluZSBDUklNRV9SRVZfUEVUVFkJCQkweDAwCisjZGVmaW5lIENSSU1FX1JFVl8xMQkJCTB4MTEKKyNkZWZpbmUgQ1JJTUVfUkVWXzEzCQkJMHgxMworI2RlZmluZSBDUklNRV9SRVZfMTQJCQkweDE0CisKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGNvbnRyb2w7CisjZGVmaW5lIENSSU1FX0NPTlRST0xfTUFTSwkJMHgzZmZmCisjZGVmaW5lIENSSU1FX0NPTlRST0xfVFJJVE9OX1NZU0FEQwkweDIwMDAKKyNkZWZpbmUgQ1JJTUVfQ09OVFJPTF9DUklNRV9TWVNBREMJMHgxMDAwCisjZGVmaW5lIENSSU1FX0NPTlRST0xfSEFSRF9SRVNFVAkweDA4MDAKKyNkZWZpbmUgQ1JJTUVfQ09OVFJPTF9TT0ZUX1JFU0VUCTB4MDQwMAorI2RlZmluZSBDUklNRV9DT05UUk9MX0RPR19FTkEJCTB4MDIwMAorI2RlZmluZSBDUklNRV9DT05UUk9MX0VORElBTkVTUwkJMHgwMTAwCisjZGVmaW5lIENSSU1FX0NPTlRST0xfRU5ESUFOX0JJRwkweDAxMDAKKyNkZWZpbmUgQ1JJTUVfQ09OVFJPTF9FTkRJQU5fTElUVExFCTB4MDAwMAorI2RlZmluZSBDUklNRV9DT05UUk9MX0NRVUVVRV9IV00JMHgwMDBmCisjZGVmaW5lIENSSU1FX0NPTlRST0xfQ1FVRVVFX1NIRlQJMAorI2RlZmluZSBDUklNRV9DT05UUk9MX1dCVUZfSFdNCQkweDAwZjAKKyNkZWZpbmUgQ1JJTUVfQ09OVFJPTF9XQlVGX1NIRlQJCTgKKworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgaXN0YXQ7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBpbWFzazsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIHNvZnRfaW50OworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgaGFyZF9pbnQ7CisjZGVmaW5lIE1BQ0VfVklEX0lOMV9JTlQJCUJJVCgwKQorI2RlZmluZSBNQUNFX1ZJRF9JTjJfSU5UCQlCSVQoMSkKKyNkZWZpbmUgTUFDRV9WSURfT1VUX0lOVAkJQklUKDIpCisjZGVmaW5lIE1BQ0VfRVRIRVJORVRfSU5UCQlCSVQoMykKKyNkZWZpbmUgTUFDRV9TVVBFUklPX0lOVAkJQklUKDQpCisjZGVmaW5lIE1BQ0VfTUlTQ19JTlQJCQlCSVQoNSkKKyNkZWZpbmUgTUFDRV9BVURJT19JTlQJCQlCSVQoNikKKyNkZWZpbmUgTUFDRV9QQ0lfQlJJREdFX0lOVAkJQklUKDcpCisjZGVmaW5lIE1BQ0VQQ0lfU0NTSTBfSU5UCQlCSVQoOCkKKyNkZWZpbmUgTUFDRVBDSV9TQ1NJMV9JTlQJCUJJVCg5KQorI2RlZmluZSBNQUNFUENJX1NMT1QwX0lOVAkJQklUKDEwKQorI2RlZmluZSBNQUNFUENJX1NMT1QxX0lOVAkJQklUKDExKQorI2RlZmluZSBNQUNFUENJX1NMT1QyX0lOVAkJQklUKDEyKQorI2RlZmluZSBNQUNFUENJX1NIQVJFRDBfSU5UCQlCSVQoMTMpCisjZGVmaW5lIE1BQ0VQQ0lfU0hBUkVEMV9JTlQJCUJJVCgxNCkKKyNkZWZpbmUgTUFDRVBDSV9TSEFSRUQyX0lOVAkJQklUKDE1KQorI2RlZmluZSBDUklNRV9HQkUwX0lOVAkJCUJJVCgxNikKKyNkZWZpbmUgQ1JJTUVfR0JFMV9JTlQJCQlCSVQoMTcpCisjZGVmaW5lIENSSU1FX0dCRTJfSU5UCQkJQklUKDE4KQorI2RlZmluZSBDUklNRV9HQkUzX0lOVAkJCUJJVCgxOSkKKyNkZWZpbmUgQ1JJTUVfQ1BVRVJSX0lOVAkJQklUKDIwKQorI2RlZmluZSBDUklNRV9NRU1FUlJfSU5UCQlCSVQoMjEpCisjZGVmaW5lIENSSU1FX1JFX0VNUFRZX0VfSU5UCQlCSVQoMjIpCisjZGVmaW5lIENSSU1FX1JFX0ZVTExfRV9JTlQJCUJJVCgyMykKKyNkZWZpbmUgQ1JJTUVfUkVfSURMRV9FX0lOVAkJQklUKDI0KQorI2RlZmluZSBDUklNRV9SRV9FTVBUWV9MX0lOVAkJQklUKDI1KQorI2RlZmluZSBDUklNRV9SRV9GVUxMX0xfSU5UCQlCSVQoMjYpCisjZGVmaW5lIENSSU1FX1JFX0lETEVfTF9JTlQgICAgCQlCSVQoMjcpCisjZGVmaW5lIENSSU1FX1NPRlQwX0lOVAkJCUJJVCgyOCkKKyNkZWZpbmUgQ1JJTUVfU09GVDFfSU5UCQkJQklUKDI5KQorI2RlZmluZSBDUklNRV9TT0ZUMl9JTlQJCQlCSVQoMzApCisjZGVmaW5lIENSSU1FX1NZU0NPUkVSUl9JTlQJCUNSSU1FX1NPRlQyX0lOVAorI2RlZmluZSBDUklNRV9WSUNFX0lOVAkJCUJJVCgzMSkKKy8qIE1hc2tzIGZvciBkZWNpZGluZyB3aG8gaGFuZGxlcyB0aGUgaW50ZXJydXB0ICovCisjZGVmaW5lIENSSU1FX01BQ0VfSU5UX01BU0sJCTB4OGYKKyNkZWZpbmUgQ1JJTUVfTUFDRUlTQV9JTlRfTUFTSwkJMHg3MAorI2RlZmluZSBDUklNRV9NQUNFUENJX0lOVF9NQVNLCQkweGZmMDAKKyNkZWZpbmUgQ1JJTUVfQ1JJTUVfSU5UX01BU0sJCTB4ZmZmZjAwMDAKKworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgd2F0Y2hkb2c7CisjZGVmaW5lIENSSU1FX0RPR19QT1dFUl9PTl9SRVNFVAkweDAwMDEwMDAwCisjZGVmaW5lIENSSU1FX0RPR19XQVJNX1JFU0VUCQkweDAwMDgwMDAwCisjZGVmaW5lIENSSU1FX0RPR19USU1FT1VUCQkoQ1JJTUVfRE9HX1BPV0VSX09OX1JFU0VUfENSSU1FX0RPR19XQVJNX1JFU0VUKQorI2RlZmluZSBDUklNRV9ET0dfVkFMVUUJCQkweDAwMDA3ZmZmCisKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIHRpbWVyOworI2RlZmluZSBDUklNRV9NQVNURVJfRlJFUQkJNjY2NjY1MDAJLyogQ3JpbWUgdXBjb3VudGVyIGZyZXF1ZW5jeSAqLworI2RlZmluZSBDUklNRV9OU19QRVJfVElDSwkJMTUJCS8qIGZvciBkZWxheV9jYWxpYnJhdGUgKi8KKworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgY3B1X2Vycm9yX2FkZHI7CisjZGVmaW5lIENSSU1FX0NQVV9FUlJPUl9BRERSX01BU0sJMHgzZmZmZmZmZmYKKworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgY3B1X2Vycm9yX3N0YXQ7CisjZGVmaW5lIENSSU1FX0NQVV9FUlJPUl9NQVNLCQkweDcJCS8qIGNwdSBlcnJvciBzdGF0IGlzIDMgYml0cyAqLworI2RlZmluZSBDUklNRV9DUFVfRVJST1JfQ1BVX0lMTF9BRERSCTB4NAorI2RlZmluZSBDUklNRV9DUFVfRVJST1JfVklDRV9XUlRfUFJUWQkweDIKKyNkZWZpbmUgQ1JJTUVfQ1BVX0VSUk9SX0NQVV9XUlRfUFJUWQkweDEKKworCXVuc2lnbmVkIGxvbmcgX3BhZDBbNTRdOworCisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBtY19jdHJsOworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgYmFua19jdHJsWzhdOworI2RlZmluZSBDUklNRV9NRU1fQkFOS19DT05UUk9MX01BU0sJCTB4MTFmCS8qIDkgYml0cyA3OjUgcmVzZXJ2ZWQgKi8KKyNkZWZpbmUgQ1JJTUVfTUVNX0JBTktfQ09OVFJPTF9BRERSCQkweDAxZgorI2RlZmluZSBDUklNRV9NRU1fQkFOS19DT05UUk9MX1NEUkFNX1NJWkUJMHgxMDAKKyNkZWZpbmUgQ1JJTUVfTUFYQkFOS1MJCQkJOAorCisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBtZW1fcmVmX2NvdW50ZXI7CisjZGVmaW5lIENSSU1FX01FTV9SRUZfQ09VTlRFUl9NQVNLCTB4M2ZmCQkvKiAxMGJpdCAqLworCisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBtZW1fZXJyb3Jfc3RhdDsKKyNkZWZpbmUgQ1JJTUVfTUVNX0VSUk9SX1NUQVRfTUFTSyAgICAgICAweDBmZjdmZmZmCS8qIDI4LWJpdCByZWdpc3RlciAqLworI2RlZmluZSBDUklNRV9NRU1fRVJST1JfTUFDRV9JRAkJMHgwMDAwMDA3ZgorI2RlZmluZSBDUklNRV9NRU1fRVJST1JfTUFDRV9BQ0NFU1MJMHgwMDAwMDA4MAorI2RlZmluZSBDUklNRV9NRU1fRVJST1JfUkVfSUQJCTB4MDAwMDdmMDAKKyNkZWZpbmUgQ1JJTUVfTUVNX0VSUk9SX1JFX0FDQ0VTUwkweDAwMDA4MDAwCisjZGVmaW5lIENSSU1FX01FTV9FUlJPUl9HQkVfQUNDRVNTCTB4MDAwMTAwMDAKKyNkZWZpbmUgQ1JJTUVfTUVNX0VSUk9SX1ZJQ0VfQUNDRVNTCTB4MDAwMjAwMDAKKyNkZWZpbmUgQ1JJTUVfTUVNX0VSUk9SX0NQVV9BQ0NFU1MJMHgwMDA0MDAwMAorI2RlZmluZSBDUklNRV9NRU1fRVJST1JfUkVTRVJWRUQJMHgwMDA4MDAwMAorI2RlZmluZSBDUklNRV9NRU1fRVJST1JfU09GVF9FUlIJMHgwMDEwMDAwMAorI2RlZmluZSBDUklNRV9NRU1fRVJST1JfSEFSRF9FUlIJMHgwMDIwMDAwMAorI2RlZmluZSBDUklNRV9NRU1fRVJST1JfTVVMVElQTEUJMHgwMDQwMDAwMAorI2RlZmluZSBDUklNRV9NRU1fRVJST1JfRUNDCQkweDAxODAwMDAwCisjZGVmaW5lIENSSU1FX01FTV9FUlJPUl9NRU1fRUNDX1JECTB4MDA4MDAwMDAKKyNkZWZpbmUgQ1JJTUVfTUVNX0VSUk9SX01FTV9FQ0NfUk1XCTB4MDEwMDAwMDAKKyNkZWZpbmUgQ1JJTUVfTUVNX0VSUk9SX0lOVgkJMHgwZTAwMDAwMAorI2RlZmluZSBDUklNRV9NRU1fRVJST1JfSU5WX01FTV9BRERSX1JECTB4MDIwMDAwMDAKKyNkZWZpbmUgQ1JJTUVfTUVNX0VSUk9SX0lOVl9NRU1fQUREUl9XUgkweDA0MDAwMDAwCisjZGVmaW5lIENSSU1FX01FTV9FUlJPUl9JTlZfTUVNX0FERFJfUk1XIDB4MDgwMDAwMDAKKworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgbWVtX2Vycm9yX2FkZHI7CisjZGVmaW5lIENSSU1FX01FTV9FUlJPUl9BRERSX01BU0sJMHgzZmZmZmZmZgorCisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBtZW1fZWNjX3N5bjsKKyNkZWZpbmUgQ1JJTUVfTUVNX0VSUk9SX0VDQ19TWU5fTUFTSwkweGZmZmZmZmZmCisKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIG1lbV9lY2NfY2hrOworI2RlZmluZSBDUklNRV9NRU1fRVJST1JfRUNDX0NIS19NQVNLCTB4ZmZmZmZmZmYKKworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgbWVtX2VjY19yZXBsOworI2RlZmluZSBDUklNRV9NRU1fRVJST1JfRUNDX1JFUExfTUFTSwkweGZmZmZmZmZmCit9OworCitleHRlcm4gc3RydWN0IHNnaV9jcmltZSAqY3JpbWU7CisKKyNkZWZpbmUgQ1JJTUVfSElfTUVNX0JBU0UJMHg0MDAwMDAwMAkvKiB0aGlzIGlzIHdoZXJlIHdob2xlIDFHIG9mIFJBTSBpcyBtYXBwZWQgKi8KKworI2VuZGlmIC8qIF9fQVNNX0NSSU1FX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9pcDMyL2lwMzJfaW50cy5oIGIvaW5jbHVkZS9hc20tbWlwcy9pcDMyL2lwMzJfaW50cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzYzI4MGUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2lwMzIvaXAzMl9pbnRzLmgKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBIYXJhbGQgS29lcmZnZW4KKyAqLworCisjaWZuZGVmIF9fQVNNX0lQMzJfSU5UU19ICisjZGVmaW5lIF9fQVNNX0lQMzJfSU5UU19ICisKKy8qCisgKiBUaGlzIGxpc3QgcmVmbGVjdHMgdGhlIGFzc2lnbm1lbnQgb2YgaW50ZXJydXB0IG51bWJlcnMgdG8KKyAqIGludGVycnVwdGluZyBldmVudHMuICBPcmRlciBpcyBmYWlybHkgaXJyZWxldmFudCB0byBoYW5kbGluZworICogcHJpb3JpdHkuICBUaGlzIGRpZmZlcnMgZnJvbSBpcml4LgorICovCisKKy8qIENQVSAqLworI2RlZmluZSBJUDMyX1I0S19USU1FUl9JUlEJCTAKKworLyogTUFDRSAqLworI2RlZmluZSBNQUNFX1ZJRF9JTjFfSVJRCQkxCisjZGVmaW5lIE1BQ0VfVklEX0lOMl9JUlEJCTIKKyNkZWZpbmUgTUFDRV9WSURfT1VUX0lSUQkJMworI2RlZmluZSBNQUNFX0VUSEVSTkVUX0lSUQkJNAorLyogU1VQRVJJTywgTUlTQywgYW5kIEFVRElPIGFyZSBNQUNFSVNBICovCisjZGVmaW5lIE1BQ0VfUENJX0JSSURHRV9JUlEJCTgKKworLyogTUFDRVBDSSAqLworI2RlZmluZSBNQUNFUENJX1NDU0kwX0lSUQkJOQorI2RlZmluZSBNQUNFUENJX1NDU0kxX0lSUQkJMTAKKyNkZWZpbmUgTUFDRVBDSV9TTE9UMF9JUlEJCTExCisjZGVmaW5lIE1BQ0VQQ0lfU0xPVDFfSVJRCQkxMgorI2RlZmluZSBNQUNFUENJX1NMT1QyX0lSUQkJMTMKKyNkZWZpbmUgTUFDRVBDSV9TSEFSRUQwX0lSUQkJMTQKKyNkZWZpbmUgTUFDRVBDSV9TSEFSRUQxX0lSUQkJMTUKKyNkZWZpbmUgTUFDRVBDSV9TSEFSRUQyX0lSUQkJMTYKKworLyogQ1JJTUUgKi8KKyNkZWZpbmUgQ1JJTUVfR0JFMF9JUlEJCQkxNworI2RlZmluZSBDUklNRV9HQkUxX0lSUQkJCTE4CisjZGVmaW5lIENSSU1FX0dCRTJfSVJRCQkJMTkKKyNkZWZpbmUgQ1JJTUVfR0JFM19JUlEJCQkyMAorI2RlZmluZSBDUklNRV9DUFVFUlJfSVJRCQkyMQorI2RlZmluZSBDUklNRV9NRU1FUlJfSVJRCQkyMgorI2RlZmluZSBDUklNRV9SRV9FTVBUWV9FX0lSUQkJMjMKKyNkZWZpbmUgQ1JJTUVfUkVfRlVMTF9FX0lSUQkJMjQKKyNkZWZpbmUgQ1JJTUVfUkVfSURMRV9FX0lSUQkJMjUKKyNkZWZpbmUgQ1JJTUVfUkVfRU1QVFlfTF9JUlEJCTI2CisjZGVmaW5lIENSSU1FX1JFX0ZVTExfTF9JUlEJCTI3CisjZGVmaW5lIENSSU1FX1JFX0lETEVfTF9JUlEJCTI4CisjZGVmaW5lIENSSU1FX1NPRlQwX0lSUQkJCTI5CisjZGVmaW5lIENSSU1FX1NPRlQxX0lSUQkJCTMwCisjZGVmaW5lIENSSU1FX1NPRlQyX0lSUQkJCTMxCisjZGVmaW5lIENSSU1FX1NZU0NPUkVSUl9JUlEJCUNSSU1FX1NPRlQyX0lSUQorI2RlZmluZSBDUklNRV9WSUNFX0lSUQkJCTMyCisKKy8qIE1BQ0VJU0EgKi8KKyNkZWZpbmUgTUFDRUlTQV9BVURJT19TV19JUlEJCTMzCisjZGVmaW5lIE1BQ0VJU0FfQVVESU9fU0NfSVJRCQkzNAorI2RlZmluZSBNQUNFSVNBX0FVRElPMV9ETUFUX0lSUQkJMzUKKyNkZWZpbmUgTUFDRUlTQV9BVURJTzFfT0ZfSVJRCQkzNgorI2RlZmluZSBNQUNFSVNBX0FVRElPMl9ETUFUX0lSUQkJMzcKKyNkZWZpbmUgTUFDRUlTQV9BVURJTzJfTUVSUl9JUlEJCTM4CisjZGVmaW5lIE1BQ0VJU0FfQVVESU8zX0RNQVRfSVJRCQkzOQorI2RlZmluZSBNQUNFSVNBX0FVRElPM19NRVJSX0lSUQkJNDAKKyNkZWZpbmUgTUFDRUlTQV9SVENfSVJRCQkJNDEKKyNkZWZpbmUgTUFDRUlTQV9LRVlCX0lSUQkJNDIKKy8qIE1BQ0VJU0FfS0VZQl9QT0xMIGlzIG5vdCBhbiBJUlEgKi8KKyNkZWZpbmUgTUFDRUlTQV9NT1VTRV9JUlEJCTQ0CisvKiBNQUNFSVNBX01PVVNFX1BPTEwgaXMgbm90IGFuIElSUSAqLworI2RlZmluZSBNQUNFSVNBX1RJTUVSMF9JUlEJCTQ2CisjZGVmaW5lIE1BQ0VJU0FfVElNRVIxX0lSUQkJNDcKKyNkZWZpbmUgTUFDRUlTQV9USU1FUjJfSVJRCQk0OAorI2RlZmluZSBNQUNFSVNBX1BBUkFMTEVMX0lSUQkJNDkKKyNkZWZpbmUgTUFDRUlTQV9QQVJfQ1RYQV9JUlEJCTUwCisjZGVmaW5lIE1BQ0VJU0FfUEFSX0NUWEJfSVJRCQk1MQorI2RlZmluZSBNQUNFSVNBX1BBUl9NRVJSX0lSUQkJNTIKKyNkZWZpbmUgTUFDRUlTQV9TRVJJQUwxX0lSUQkJNTMKKyNkZWZpbmUgTUFDRUlTQV9TRVJJQUwxX1RETUFUX0lSUQk1NAorI2RlZmluZSBNQUNFSVNBX1NFUklBTDFfVERNQVBSX0lSUQk1NQorI2RlZmluZSBNQUNFSVNBX1NFUklBTDFfVERNQU1FX0lSUQk1NgorI2RlZmluZSBNQUNFSVNBX1NFUklBTDFfUkRNQVRfSVJRCTU3CisjZGVmaW5lIE1BQ0VJU0FfU0VSSUFMMV9SRE1BT1JfSVJRCTU4CisjZGVmaW5lIE1BQ0VJU0FfU0VSSUFMMl9JUlEJCTU5CisjZGVmaW5lIE1BQ0VJU0FfU0VSSUFMMl9URE1BVF9JUlEJNjAKKyNkZWZpbmUgTUFDRUlTQV9TRVJJQUwyX1RETUFQUl9JUlEJNjEKKyNkZWZpbmUgTUFDRUlTQV9TRVJJQUwyX1RETUFNRV9JUlEJNjIKKyNkZWZpbmUgTUFDRUlTQV9TRVJJQUwyX1JETUFUX0lSUQk2MworI2RlZmluZSBNQUNFSVNBX1NFUklBTDJfUkRNQU9SX0lSUQk2NAorCisjZGVmaW5lIElQMzJfSVJRX01BWAkJCU1BQ0VJU0FfU0VSSUFMMl9SRE1BT1JfSVJRCisKKyNlbmRpZiAvKiBfX0FTTV9JUDMyX0lOVFNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9pcDMyL21hY2UuaCBiL2luY2x1ZGUvYXNtLW1pcHMvaXAzMi9tYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI3YjBmZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvaXAzMi9tYWNlLmgKQEAgLTAsMCArMSwzMzQgQEAKKy8qCisgKiBEZWZpbml0aW9ucyBmb3IgdGhlIFNHSSBNQUNFIChNdWx0aW1lZGlhLCBBdWRpbyBhbmQgQ29tbXVuaWNhdGlvbnMgRW5naW5lKQorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBIYXJhbGQgS29lcmZnZW4KKyAqIENvcHlyaWdodCAoQykgMjAwNCBMYWRpc2xhdiBNaWNobAorICovCisKKyNpZm5kZWYgX19BU01fTUFDRV9IX18KKyNkZWZpbmUgX19BU01fTUFDRV9IX18KKworLyoKKyAqIEFkZHJlc3MgbWFwCisgKi8KKyNkZWZpbmUgTUFDRV9CQVNFCTB4MWYwMDAwMDAJLyogcGh5c2ljYWwgKi8KKworI3VuZGVmIEJJVAorI2RlZmluZSBCSVQoeCkgKDFVTCA8PCAoeCkpCisKKy8qCisgKiBQQ0kgaW50ZXJmYWNlCisgKi8KK3N0cnVjdCBtYWNlX3BjaSB7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50IGVycm9yX2FkZHI7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50IGVycm9yOworI2RlZmluZSBNQUNFUENJX0VSUk9SX01BU1RFUl9BQk9SVAkJQklUKDMxKQorI2RlZmluZSBNQUNFUENJX0VSUk9SX1RBUkdFVF9BQk9SVAkJQklUKDMwKQorI2RlZmluZSBNQUNFUENJX0VSUk9SX0RBVEFfUEFSSVRZX0VSUgkJQklUKDI5KQorI2RlZmluZSBNQUNFUENJX0VSUk9SX1JFVFJZX0VSUgkJCUJJVCgyOCkKKyNkZWZpbmUgTUFDRVBDSV9FUlJPUl9JTExFR0FMX0NNRAkJQklUKDI3KQorI2RlZmluZSBNQUNFUENJX0VSUk9SX1NZU1RFTV9FUlIJCUJJVCgyNikKKyNkZWZpbmUgTUFDRVBDSV9FUlJPUl9JTlRFUlJVUFRfVEVTVAkJQklUKDI1KQorI2RlZmluZSBNQUNFUENJX0VSUk9SX1BBUklUWV9FUlIJCUJJVCgyNCkKKyNkZWZpbmUgTUFDRVBDSV9FUlJPUl9PVkVSUlVOCQkJQklUKDIzKQorI2RlZmluZSBNQUNFUENJX0VSUk9SX1JTVkQJCQlCSVQoMjIpCisjZGVmaW5lIE1BQ0VQQ0lfRVJST1JfTUVNT1JZX0FERFIJCUJJVCgyMSkKKyNkZWZpbmUgTUFDRVBDSV9FUlJPUl9DT05GSUdfQUREUgkJQklUKDIwKQorI2RlZmluZSBNQUNFUENJX0VSUk9SX01BU1RFUl9BQk9SVF9BRERSX1ZBTElECUJJVCgxOSkKKyNkZWZpbmUgTUFDRVBDSV9FUlJPUl9UQVJHRVRfQUJPUlRfQUREUl9WQUxJRAlCSVQoMTgpCisjZGVmaW5lIE1BQ0VQQ0lfRVJST1JfREFUQV9QQVJJVFlfQUREUl9WQUxJRAlCSVQoMTcpCisjZGVmaW5lIE1BQ0VQQ0lfRVJST1JfUkVUUllfQUREUl9WQUxJRAkJQklUKDE2KQorI2RlZmluZSBNQUNFUENJX0VSUk9SX1NJR19UQUJPUlQJCUJJVCg0KQorI2RlZmluZSBNQUNFUENJX0VSUk9SX0RFVlNFTF9NQVNLCQkweGMwCisjZGVmaW5lIE1BQ0VQQ0lfRVJST1JfREVWU0VMX0ZBU1QJCTAKKyNkZWZpbmUgTUFDRVBDSV9FUlJPUl9ERVZTRUxfTUVECQkweDQwCisjZGVmaW5lIE1BQ0VQQ0lfRVJST1JfREVWU0VMX1NMT1cJCTB4ODAKKyNkZWZpbmUgTUFDRVBDSV9FUlJPUl9GQkIJCQlCSVQoMSkKKyNkZWZpbmUgTUFDRVBDSV9FUlJPUl82Nk1IWgkJCUJJVCgwKQorCXZvbGF0aWxlIHVuc2lnbmVkIGludCBjb250cm9sOworI2RlZmluZSBNQUNFUENJX0NPTlRST0xfSU5UKHgpCQkJQklUKHgpCisjZGVmaW5lIE1BQ0VQQ0lfQ09OVFJPTF9JTlRfTUFTSwkJMHhmZgorI2RlZmluZSBNQUNFUENJX0NPTlRST0xfU0VSUl9FTkEJCUJJVCg4KQorI2RlZmluZSBNQUNFUENJX0NPTlRST0xfQVJCX042CQkJQklUKDkpCisjZGVmaW5lIE1BQ0VQQ0lfQ09OVFJPTF9QQVJJVFlfRVJSCQlCSVQoMTApCisjZGVmaW5lIE1BQ0VQQ0lfQ09OVFJPTF9NUk1SQV9FTkEJCUJJVCgxMSkKKyNkZWZpbmUgTUFDRVBDSV9DT05UUk9MX0FSQl9OMwkJCUJJVCgxMikKKyNkZWZpbmUgTUFDRVBDSV9DT05UUk9MX0FSQl9ONAkJCUJJVCgxMykKKyNkZWZpbmUgTUFDRVBDSV9DT05UUk9MX0FSQl9ONQkJCUJJVCgxNCkKKyNkZWZpbmUgTUFDRVBDSV9DT05UUk9MX1BBUktfTElVCQlCSVQoMTUpCisjZGVmaW5lIE1BQ0VQQ0lfQ09OVFJPTF9JTlZfSU5UKHgpCQlCSVQoMTYreCkKKyNkZWZpbmUgTUFDRVBDSV9DT05UUk9MX0lOVl9JTlRfTUFTSwkJMHgwMGZmMDAwMAorI2RlZmluZSBNQUNFUENJX0NPTlRST0xfT1ZFUlJVTl9JTlQJCUJJVCgyNCkKKyNkZWZpbmUgTUFDRVBDSV9DT05UUk9MX1BBUklUWV9JTlQJCUJJVCgyNSkKKyNkZWZpbmUgTUFDRVBDSV9DT05UUk9MX1NFUlJfSU5UCQlCSVQoMjYpCisjZGVmaW5lIE1BQ0VQQ0lfQ09OVFJPTF9JVF9JTlQJCQlCSVQoMjcpCisjZGVmaW5lIE1BQ0VQQ0lfQ09OVFJPTF9SRV9JTlQJCQlCSVQoMjgpCisjZGVmaW5lIE1BQ0VQQ0lfQ09OVFJPTF9EUEVEX0lOVAkJQklUKDI5KQorI2RlZmluZSBNQUNFUENJX0NPTlRST0xfVEFSX0lOVAkJCUJJVCgzMCkKKyNkZWZpbmUgTUFDRVBDSV9DT05UUk9MX01BUl9JTlQJCQlCSVQoMzEpCisJdm9sYXRpbGUgdW5zaWduZWQgaW50IHJldjsKKwl1bnNpZ25lZCBpbnQgX3BhZFsweGNmOC80IC0gNF07CisJdm9sYXRpbGUgdW5zaWduZWQgaW50IGNvbmZpZ19hZGRyOworCXVuaW9uIHsKKwkJdm9sYXRpbGUgdW5zaWduZWQgY2hhciBiWzRdOworCQl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCB3WzJdOworCQl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbDsKKwl9IGNvbmZpZ19kYXRhOworfTsKKyNkZWZpbmUgTUFDRVBDSV9MT1dfTUVNT1JZCQkweDFhMDAwMDAwCisjZGVmaW5lIE1BQ0VQQ0lfTE9XX0lPCQkJMHgxODAwMDAwMAorI2RlZmluZSBNQUNFUENJX1NXQVBQRURfVklFVwkJMAorI2RlZmluZSBNQUNFUENJX05BVElWRV9WSUVXCQkweDQwMDAwMDAwCisjZGVmaW5lIE1BQ0VQQ0lfSU8JCQkweDgwMDAwMDAwCisjZGVmaW5lIE1BQ0VQQ0lfSElfTUVNT1JZCQkweDI4MDAwMDAwMAorI2RlZmluZSBNQUNFUENJX0hJX0lPCQkJMHgxMDAwMDAwMDAKKworLyoKKyAqIFZpZGVvIGludGVyZmFjZQorICovCitzdHJ1Y3QgbWFjZV92aWRlbyB7CisJdW5zaWduZWQgbG9uZyB4eHg7CS8qIGxhdGVyLi4uICovCit9OworCisvKiAKKyAqIEV0aGVybmV0IGludGVyZmFjZQorICovCitzdHJ1Y3QgbWFjZV9ldGhlcm5ldCB7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBtYWNfY3RybDsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGludF9zdGF0OworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgZG1hX2N0cmw7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyB0aW1lcjsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIHR4X2ludF9hbDsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIHJ4X2ludF9hbDsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIHR4X2luZm87CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyB0eF9pbmZvX2FsOworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgcnhfYnVmZjsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIHJ4X2J1ZmZfYWwxOworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgcnhfYnVmZl9hbDI7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBkaWFnOworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgcGh5X2RhdGE7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBwaHlfcmVnczsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIHBoeV90cmFuc19nbzsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGJhY2tvZmZfc2VlZDsKKwkvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGltcV9yZXNlcnZlZFs0XTsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIG1hY19hZGRyOworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgbWFjX2FkZHIyOworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgbWNhc3RfZmlsdGVyOworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgdHhfcmluZ19iYXNlOworCS8qIEZvbGxvd2luZyBhcmUgcmVhZC1vbmx5IHJlZ2lzdGVycyBmb3IgZGVidWdnaW5nICovCisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyB0eF9wa3QxX2hkcjsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIHR4X3BrdDFfcHRyWzNdOworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgdHhfcGt0Ml9oZHI7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyB0eF9wa3QyX3B0clszXTsKKwkvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIHJ4X2ZpZm87Cit9OworCisvKiAKKyAqIFBlcmlwaGVyYWxzCisgKi8KKworLyogQXVkaW8gcmVnaXN0ZXJzICovCitzdHJ1Y3QgbWFjZV9hdWRpbyB7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBjb250cm9sOworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgY29kZWNfY29udHJvbDsJCS8qIGNvZGVjIHN0YXR1cyBjb250cm9sICovCisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBjb2RlY19tYXNrOwkJLyogY29kZWMgc3RhdHVzIGlucHV0IG1hc2sgKi8KKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGNvZGVjX3JlYWQ7CQkvKiBjb2RlYyBzdGF0dXMgcmVhZCBkYXRhICovCisJc3RydWN0IHsKKwkJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBjb250cm9sOwkJLyogY2hhbm5lbCBjb250cm9sICovCisJCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgcmVhZF9wdHI7CS8qIGNoYW5uZWwgcmVhZCBwb2ludGVyICovCisJCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgd3JpdGVfcHRyOwkvKiBjaGFubmVsIHdyaXRlIHBvaW50ZXIgKi8KKwkJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBkZXB0aDsJCS8qIGNoYW5uZWwgZGVwdGggKi8KKwl9IGNoYW5bM107Cit9OworCisvKiBJU0EgQ29udHJvbCBhbmQgRE1BIHJlZ2lzdGVycyAqLworc3RydWN0IG1hY2VfaXNhY3RybCB7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyByaW5nYmFzZTsKKyNkZWZpbmUgTUFDRUlTQV9SSU5HQlVGRkVSU19TSVpFCSg4ICogNDA5NikKKworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgbWlzYzsKKyNkZWZpbmUgTUFDRUlTQV9GTEFTSF9XRQkJQklUKDApCS8qIDE9PiBFbmFibGUgRkxBU0ggd3JpdGVzICovCisjZGVmaW5lIE1BQ0VJU0FfUFdEX0NMRUFSCQlCSVQoMSkJLyogMT0+IFBXRCBDTEVBUiBqdW1wZXIgZGV0ZWN0ZWQgKi8KKyNkZWZpbmUgTUFDRUlTQV9OSUNfREVBU1NFUlQJCUJJVCgyKQorI2RlZmluZSBNQUNFSVNBX05JQ19EQVRBCQlCSVQoMykKKyNkZWZpbmUgTUFDRUlTQV9MRURfUkVECQkJQklUKDQpCS8qIDA9PiBJbGx1bWluYXRlIHJlZCBMRUQgKi8KKyNkZWZpbmUgTUFDRUlTQV9MRURfR1JFRU4JCUJJVCg1KQkvKiAwPT4gSWxsdW1pbmF0ZSBncmVlbiBMRUQgKi8KKyNkZWZpbmUgTUFDRUlTQV9EUF9SQU1fRU5BQkxFCQlCSVQoNikKKworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgaXN0YXQ7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBpbWFzazsKKyNkZWZpbmUgTUFDRUlTQV9BVURJT19TV19JTlQJCUJJVCgwKQorI2RlZmluZSBNQUNFSVNBX0FVRElPX1NDX0lOVAkJQklUKDEpCisjZGVmaW5lIE1BQ0VJU0FfQVVESU8xX0RNQVRfSU5UCQlCSVQoMikKKyNkZWZpbmUgTUFDRUlTQV9BVURJTzFfT0ZfSU5UCQlCSVQoMykKKyNkZWZpbmUgTUFDRUlTQV9BVURJTzJfRE1BVF9JTlQJCUJJVCg0KQorI2RlZmluZSBNQUNFSVNBX0FVRElPMl9NRVJSX0lOVAkJQklUKDUpCisjZGVmaW5lIE1BQ0VJU0FfQVVESU8zX0RNQVRfSU5UCQlCSVQoNikKKyNkZWZpbmUgTUFDRUlTQV9BVURJTzNfTUVSUl9JTlQJCUJJVCg3KQorI2RlZmluZSBNQUNFSVNBX1JUQ19JTlQJCQlCSVQoOCkKKyNkZWZpbmUgTUFDRUlTQV9LRVlCX0lOVAkJQklUKDkpCisjZGVmaW5lIE1BQ0VJU0FfS0VZQl9QT0xMX0lOVAkJQklUKDEwKQorI2RlZmluZSBNQUNFSVNBX01PVVNFX0lOVAkJQklUKDExKQorI2RlZmluZSBNQUNFSVNBX01PVVNFX1BPTExfSU5UCQlCSVQoMTIpCisjZGVmaW5lIE1BQ0VJU0FfVElNRVIwX0lOVAkJQklUKDEzKQorI2RlZmluZSBNQUNFSVNBX1RJTUVSMV9JTlQJCUJJVCgxNCkKKyNkZWZpbmUgTUFDRUlTQV9USU1FUjJfSU5UCQlCSVQoMTUpCisjZGVmaW5lIE1BQ0VJU0FfUEFSQUxMRUxfSU5UCQlCSVQoMTYpCisjZGVmaW5lIE1BQ0VJU0FfUEFSX0NUWEFfSU5UCQlCSVQoMTcpCisjZGVmaW5lIE1BQ0VJU0FfUEFSX0NUWEJfSU5UCQlCSVQoMTgpCisjZGVmaW5lIE1BQ0VJU0FfUEFSX01FUlJfSU5UCQlCSVQoMTkpCisjZGVmaW5lIE1BQ0VJU0FfU0VSSUFMMV9JTlQJCUJJVCgyMCkKKyNkZWZpbmUgTUFDRUlTQV9TRVJJQUwxX1RETUFUX0lOVAlCSVQoMjEpCisjZGVmaW5lIE1BQ0VJU0FfU0VSSUFMMV9URE1BUFJfSU5UCUJJVCgyMikKKyNkZWZpbmUgTUFDRUlTQV9TRVJJQUwxX1RETUFNRV9JTlQJQklUKDIzKQorI2RlZmluZSBNQUNFSVNBX1NFUklBTDFfUkRNQVRfSU5UCUJJVCgyNCkKKyNkZWZpbmUgTUFDRUlTQV9TRVJJQUwxX1JETUFPUl9JTlQJQklUKDI1KQorI2RlZmluZSBNQUNFSVNBX1NFUklBTDJfSU5UCQlCSVQoMjYpCisjZGVmaW5lIE1BQ0VJU0FfU0VSSUFMMl9URE1BVF9JTlQJQklUKDI3KQorI2RlZmluZSBNQUNFSVNBX1NFUklBTDJfVERNQVBSX0lOVAlCSVQoMjgpCisjZGVmaW5lIE1BQ0VJU0FfU0VSSUFMMl9URE1BTUVfSU5UCUJJVCgyOSkKKyNkZWZpbmUgTUFDRUlTQV9TRVJJQUwyX1JETUFUX0lOVAlCSVQoMzApCisjZGVmaW5lIE1BQ0VJU0FfU0VSSUFMMl9SRE1BT1JfSU5UCUJJVCgzMSkKKworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgX3BhZFsweDIwMDAvOCAtIDRdOworCisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBkcF9yYW1bMHg0MDBdOworfTsKKworLyogS2V5Ym9hcmQgJiBNb3VzZSByZWdpc3RlcnMKKyAqIC0+IGRyaXZlcnMvaW5wdXQvc2VyaW8vbWFjZXBzMi5jICovCitzdHJ1Y3QgbWFjZV9wczJwb3J0IHsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIHR4OworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgcng7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBjb250cm9sOworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgc3RhdHVzOworfTsKKworc3RydWN0IG1hY2VfcHMyIHsKKwlzdHJ1Y3QgbWFjZV9wczJwb3J0IGtleWI7CisJc3RydWN0IG1hY2VfcHMycG9ydCBtb3VzZTsKK307CisKKy8qIEkyQyByZWdpc3RlcnMKKyAqIC0+IGRyaXZlcnMvaTJjL2FsZ29zL2kyYy1hbGdvLXNnaS5jICovCitzdHJ1Y3QgbWFjZV9pMmMgeworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgY29uZmlnOworI2RlZmluZSBNQUNFSTJDX1JFU0VUICAgICAgICAgICBCSVQoMCkKKyNkZWZpbmUgTUFDRUkyQ19GQVNUICAgICAgICAgICAgQklUKDEpCisjZGVmaW5lIE1BQ0VJMkNfREFUQV9PVkVSUklERSAgIEJJVCgyKQorI2RlZmluZSBNQUNFSTJDX0NMT0NLX09WRVJSSURFICBCSVQoMykKKyNkZWZpbmUgTUFDRUkyQ19EQVRBX1NUQVRVUyAgICAgQklUKDQpCisjZGVmaW5lIE1BQ0VJMkNfQ0xPQ0tfU1RBVFVTICAgIEJJVCg1KQorCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgY29udHJvbDsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGRhdGE7Cit9OworCisvKiBUaW1lciByZWdpc3RlcnMgKi8KK3R5cGVkZWYgdW5pb24geworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgdXN0X21zYzsKKwlzdHJ1Y3QgcmVnIHsKKwkJdm9sYXRpbGUgdW5zaWduZWQgaW50IHVzdDsKKwkJdm9sYXRpbGUgdW5zaWduZWQgaW50IG1zYzsKKwl9IHJlZzsKK30gdGltZXJfcmVnOworCitzdHJ1Y3QgbWFjZV90aW1lcnMgeworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgdXN0OworI2RlZmluZSBNQUNFX1VTVF9QRVJJT0RfTlMJOTYwCisKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGNvbXBhcmUxOworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgY29tcGFyZTI7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBjb21wYXJlMzsKKworCXRpbWVyX3JlZyBhdWRpb19pbjsKKwl0aW1lcl9yZWcgYXVkaW9fb3V0MTsKKwl0aW1lcl9yZWcgYXVkaW9fb3V0MjsKKwl0aW1lcl9yZWcgdmlkZW9faW4xOworCXRpbWVyX3JlZyB2aWRlb19pbjI7CisJdGltZXJfcmVnIHZpZGVvX291dDsJCit9OworCitzdHJ1Y3QgbWFjZV9wZXJpZiB7CisJc3RydWN0IG1hY2VfYXVkaW8gYXVkaW87CisJY2hhciBfcGFkMFsweDEwMDAwIC0gc2l6ZW9mKHN0cnVjdCBtYWNlX2F1ZGlvKV07CisKKwlzdHJ1Y3QgbWFjZV9pc2FjdHJsIGN0cmw7CisJY2hhciBfcGFkMVsweDEwMDAwIC0gc2l6ZW9mKHN0cnVjdCBtYWNlX2lzYWN0cmwpXTsKKworCXN0cnVjdCBtYWNlX3BzMiBwczI7CisJY2hhciBfcGFkMlsweDEwMDAwIC0gc2l6ZW9mKHN0cnVjdCBtYWNlX3BzMildOworCisJc3RydWN0IG1hY2VfaTJjIGkyYzsKKwljaGFyIF9wYWQzWzB4MTAwMDAgLSBzaXplb2Yoc3RydWN0IG1hY2VfaTJjKV07CisKKwlzdHJ1Y3QgbWFjZV90aW1lcnMgdGltZXJzOworCWNoYXIgX3BhZDRbMHgxMDAwMCAtIHNpemVvZihzdHJ1Y3QgbWFjZV90aW1lcnMpXTsKK307CisKKworLyogCisgKiBJU0EgcGVyaXBoZXJhbHMKKyAqLworCisvKiBQYXJhbGxlbCBwb3J0ICovCitzdHJ1Y3QgbWFjZV9wYXJhbGxlbCB7CS8qIGxhdGVyLi4uICovCit9OworCitzdHJ1Y3QgbWFjZV9lY3AxMjg0IHsJLyogbGF0ZXIuLi4gKi8KK307CisKKy8qIFNlcmlhbCBwb3J0ICovCitzdHJ1Y3QgbWFjZV9zZXJpYWwgeworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgeHh4OwkvKiBsYXRlci4uLiAqLworfTsKKworc3RydWN0IG1hY2VfaXNhIHsKKwlzdHJ1Y3QgbWFjZV9wYXJhbGxlbCBwYXJhbGxlbDsKKwljaGFyIF9wYWQxWzB4ODAwMCAtIHNpemVvZihzdHJ1Y3QgbWFjZV9wYXJhbGxlbCldOworCisJc3RydWN0IG1hY2VfZWNwMTI4NCBlY3AxMjg0OworCWNoYXIgX3BhZDJbMHg4MDAwIC0gc2l6ZW9mKHN0cnVjdCBtYWNlX2VjcDEyODQpXTsKKworCXN0cnVjdCBtYWNlX3NlcmlhbCBzZXJpYWwxOworCWNoYXIgX3BhZDNbMHg4MDAwIC0gc2l6ZW9mKHN0cnVjdCBtYWNlX3NlcmlhbCldOworCisJc3RydWN0IG1hY2Vfc2VyaWFsIHNlcmlhbDI7CisJY2hhciBfcGFkNFsweDgwMDAgLSBzaXplb2Yoc3RydWN0IG1hY2Vfc2VyaWFsKV07CisKKwl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIHJ0Y1sweDEwMDAwXTsKK307CisKK3N0cnVjdCBzZ2lfbWFjZSB7CisJY2hhciBfcmVzZXJ2ZWRbMHg4MDAwMF07CisKKwlzdHJ1Y3QgbWFjZV9wY2kgcGNpOworCWNoYXIgX3BhZDBbMHg4MDAwMCAtIHNpemVvZihzdHJ1Y3QgbWFjZV9wY2kpXTsKKworCXN0cnVjdCBtYWNlX3ZpZGVvIHZpZGVvX2luMTsKKwljaGFyIF9wYWQxWzB4ODAwMDAgLSBzaXplb2Yoc3RydWN0IG1hY2VfdmlkZW8pXTsKKworCXN0cnVjdCBtYWNlX3ZpZGVvIHZpZGVvX2luMjsKKwljaGFyIF9wYWQyWzB4ODAwMDAgLSBzaXplb2Yoc3RydWN0IG1hY2VfdmlkZW8pXTsKKworCXN0cnVjdCBtYWNlX3ZpZGVvIHZpZGVvX291dDsKKwljaGFyIF9wYWQzWzB4ODAwMDAgLSBzaXplb2Yoc3RydWN0IG1hY2VfdmlkZW8pXTsKKworCXN0cnVjdCBtYWNlX2V0aGVybmV0IGV0aDsKKwljaGFyIF9wYWQ0WzB4ODAwMDAgLSBzaXplb2Yoc3RydWN0IG1hY2VfZXRoZXJuZXQpXTsKKworCXN0cnVjdCBtYWNlX3BlcmlmIHBlcmlmOworCWNoYXIgX3BhZDVbMHg4MDAwMCAtIHNpemVvZihzdHJ1Y3QgbWFjZV9wZXJpZildOworCisJc3RydWN0IG1hY2VfaXNhIGlzYTsKKwljaGFyIF9wYWQ2WzB4ODAwMDAgLSBzaXplb2Yoc3RydWN0IG1hY2VfaXNhKV07Cit9OworCitleHRlcm4gc3RydWN0IHNnaV9tYWNlICptYWNlOworCisjZW5kaWYgLyogX19BU01fTUFDRV9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvaXAzMi9tYWNoaW5lLmggYi9pbmNsdWRlL2FzbS1taXBzL2lwMzIvbWFjaGluZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0NDBmZGYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2lwMzIvbWFjaGluZS5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBtYWNoaW5lLmggLS0gTWFjaGluZS9ncm91cCBwcm9iaW5nIGZvciBpcDMyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAxIEtlaXRoIE0gV2Vzb2xvd3NraQorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfQVNNX0lQMzJfTUFDSElORV9ICisjZGVmaW5lIF9BU01fSVAzMl9NQUNISU5FX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjaWZkZWYgQ09ORklHX1NHSV9JUDMyCisKKyNkZWZpbmUgU0dJX01BQ0hfTzIJCTB4MzIwMQorCisjZW5kaWYgLyogQ09ORklHX1NHSV9JUDMyICovCisKKyNlbmRpZiAvKiBfQVNNX1NHSV9NQUNISU5FX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvaXBjLmggYi9pbmNsdWRlL2FzbS1taXBzL2lwYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0NmUzZDkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2lwYy5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pcGMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvaXBjYnVmLmggYi9pbmNsdWRlL2FzbS1taXBzL2lwY2J1Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0N2QwOGYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2lwY2J1Zi5oCkBAIC0wLDAgKzEsMjggQEAKKyNpZm5kZWYgX0FTTV9JUENCVUZfSAorI2RlZmluZSBfQVNNX0lQQ0JVRl9ICisKKy8qCisgKiBUaGUgaXBjNjRfcGVybSBzdHJ1Y3R1cmUgZm9yIGFscGhhIGFyY2hpdGVjdHVyZS4KKyAqIE5vdGUgZXh0cmEgcGFkZGluZyBiZWNhdXNlIHRoaXMgc3RydWN0dXJlIGlzIHBhc3NlZCBiYWNrIGFuZCBmb3J0aAorICogYmV0d2VlbiBrZXJuZWwgYW5kIHVzZXIgc3BhY2UuCisgKgorICogUGFkIHNwYWNlIGlzIGxlZnQgZm9yOgorICogLSAzMi1iaXQgc2VxCisgKiAtIDIgbWlzY2VsbGFuZW91cyA2NC1iaXQgdmFsdWVzCisgKi8KKworc3RydWN0IGlwYzY0X3Blcm0KK3sKKwlfX2tlcm5lbF9rZXlfdAlrZXk7CisJX19rZXJuZWxfdWlkX3QJdWlkOworCV9fa2VybmVsX2dpZF90CWdpZDsKKwlfX2tlcm5lbF91aWRfdAljdWlkOworCV9fa2VybmVsX2dpZF90CWNnaWQ7CisJX19rZXJuZWxfbW9kZV90CW1vZGU7CisJdW5zaWduZWQgc2hvcnQJc2VxOworCXVuc2lnbmVkIHNob3J0CV9fcGFkMTsKKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkMTsKKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkMjsKK307CisKKyNlbmRpZiAvKiBfQVNNX0lQQ0JVRl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2lycS5oIGIvaW5jbHVkZS9hc20tbWlwcy9pcnEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTBiMTFkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9pcnEuaApAQCAtMCwwICsxLDU1IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk0IGJ5IFdhbGRvcmYgR01CSCwgd3JpdHRlbiBieSBSYWxmIEJhZWNobGUKKyAqIENvcHlyaWdodCAoQykgMTk5NSwgOTYsIDk3LCA5OCwgOTksIDIwMDAsIDAxLCAwMiwgMDMgYnkgUmFsZiBCYWVjaGxlCisgKi8KKyNpZm5kZWYgX0FTTV9JUlFfSAorI2RlZmluZSBfQVNNX0lSUV9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8aXJxLmg+CisKKyNpZmRlZiBDT05GSUdfSTgyNTkKK3N0YXRpYyBpbmxpbmUgaW50IGlycV9jYW5vbmljYWxpemUoaW50IGlycSkKK3sKKwlyZXR1cm4gKChpcnEgPT0gMikgPyA5IDogaXJxKTsKK30KKyNlbHNlCisjZGVmaW5lIGlycV9jYW5vbmljYWxpemUoaXJxKSAoaXJxKQkvKiBTYW5lIGhhcmR3YXJlLCBzYW5lIGNvZGUgLi4uICovCisjZW5kaWYKKworc3RydWN0IHB0X3JlZ3M7CisKKyNpZmRlZiBDT05GSUdfUFJFRU1QVAorCitleHRlcm4gYXNtbGlua2FnZSB1bnNpZ25lZCBpbnQgZG9fSVJRKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworI2Vsc2UKKworLyoKKyAqIGRvX0lSUSBoYW5kbGVzIGFsbCBub3JtYWwgZGV2aWNlIElSUSdzICh0aGUgc3BlY2lhbAorICogU01QIGNyb3NzLUNQVSBpbnRlcnJ1cHRzIGhhdmUgdGhlaXIgb3duIHNwZWNpZmljCisgKiBoYW5kbGVycykuCisgKgorICogSWRlYWxseSB0aGVyZSBzaG91bGQgYmUgYXdheSB0byBnZXQgdGhpcyBpbnRvIGtlcm5lbC9pcnEvaGFuZGxlLmMgdG8KKyAqIGF2b2lkIHRoZSBvdmVyaGVhZCBvZiBhIGNhbGwgZm9yIGp1c3QgYSB0aW55IGZ1bmN0aW9uIC4uLgorICovCisjZGVmaW5lIGRvX0lSUShpcnEsIHJlZ3MpCQkJCQkJXAorZG8gewkJCQkJCQkJCVwKKwlpcnFfZW50ZXIoKTsJCQkJCQkJXAorCV9fZG9fSVJRKChpcnEpLCAocmVncykpOwkJCQkJXAorCWlycV9leGl0KCk7CQkJCQkJCVwKK30gd2hpbGUgKDApCisKKyNlbmRpZgorCitleHRlcm4gdm9pZCBhcmNoX2luaXRfaXJxKHZvaWQpOworCitzdHJ1Y3QgaXJxYWN0aW9uOworaW50IGhhbmRsZV9JUlFfZXZlbnQodW5zaWduZWQgaW50LCBzdHJ1Y3QgcHRfcmVncyAqLCBzdHJ1Y3QgaXJxYWN0aW9uICopOworCisjZW5kaWYgLyogX0FTTV9JUlFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9pcnFfY3B1LmggYi9pbmNsdWRlL2FzbS1taXBzL2lycV9jcHUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDNkMWUzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9pcnFfY3B1LmgKQEAgLTAsMCArMSwyMCBAQAorLyoKKyAqCWluY2x1ZGUvYXNtLW1pcHMvaXJxX2NwdS5oCisgKgorICoJTUlQUyBDUFUgaW50ZXJydXB0IGRlZmluaXRpb25zLgorICoKKyAqCUNvcHlyaWdodCAoQykgMjAwMiAgTWFjaWVqIFcuIFJvenlja2kKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICoJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKgkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisjaWZuZGVmIF9BU01fSVJRX0NQVV9ICisjZGVmaW5lIF9BU01fSVJRX0NQVV9ICisKK2V4dGVybiB2b2lkIG1pcHNfY3B1X2lycV9pbml0KGludCBpcnFfYmFzZSk7CitleHRlcm4gdm9pZCBybTdrX2NwdV9pcnFfaW5pdChpbnQgaXJxX2Jhc2UpOworZXh0ZXJuIHZvaWQgcm05a19jcHVfaXJxX2luaXQoaW50IGlycV9iYXNlKTsKKworI2VuZGlmIC8qIF9BU01fSVJRX0NQVV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2lzYWRlcC5oIGIvaW5jbHVkZS9hc20tbWlwcy9pc2FkZXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmIwMDM1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9pc2FkZXAuaApAQCAtMCwwICsxLDM1IEBACisvKgorICogVmFyaW91cyBJU0EgbGV2ZWwgZGVwZW5kZW50IGNvbnN0YW50cy4KKyAqIE1vc3Qgb2YgdGhlIGZvbGxvd2luZyBjb25zdGFudHMgcmVmbGVjdCB0aGUgZGlmZmVyZW50IGxheW91dAorICogb2YgQ29wcm9jZXNzb3IgMCByZWdpc3RlcnMuCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk4IEhhcmFsZCBLb2VyZmdlbgorICovCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpZm5kZWYgX19BU01fSVNBREVQX0gKKyNkZWZpbmUgX19BU01fSVNBREVQX0gKKworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9SMzAwMCkgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1RYMzlYWCkKKy8qCisgKiBSMjAwMCBvciBSMzAwMAorICovCisKKy8qCisgKiBrZXJuZWwgb3IgdXNlciBtb2RlPyAoQ1AwX1NUQVRVUykKKyAqLworI2RlZmluZSBLVV9NQVNLIDB4MDgKKyNkZWZpbmUJS1VfVVNFUiAweDA4CisjZGVmaW5lIEtVX0tFUk4gMHgwMAorCisjZWxzZQorLyoKKyAqIGtlcm5lbCBvciB1c2VyIG1vZGU/CisgKi8KKyNkZWZpbmUgS1VfTUFTSyAweDE4CisjZGVmaW5lCUtVX1VTRVIgMHgxMAorI2RlZmluZSBLVV9LRVJOIDB4MDAKKworI2VuZGlmCisKKyNlbmRpZiAvKiBfX0FTTV9JU0FERVBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9pdDgxNzIvaXQ4MTcyLmggYi9pbmNsdWRlL2FzbS1taXBzL2l0ODE3Mi9pdDgxNzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjIzYWYwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9pdDgxNzIvaXQ4MTcyLmgKQEAgLTAsMCArMSwzNDggQEAKKy8qCisgKgorICogQlJJRUYgTU9EVUxFIERFU0NSSVBUSU9OCisgKglJVDgxNzIgc3lzdGVtIGNvbnRyb2xsZXIgZGVmaW5lcy4KKyAqCisgKiBDb3B5cmlnaHQgMjAwMCBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KKyAqIEF1dGhvcjogTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICogICAgICAgICAJcHBvcG92QG12aXN0YS5jb20gb3Igc291cmNlQG12aXN0YS5jb20KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVEhJUyAgU09GVFdBUkUgIElTIFBST1ZJREVEICAgYGBBUyAgSVMnJyBBTkQgICBBTlkgIEVYUFJFU1MgT1IgSU1QTElFRAorICogIFdBUlJBTlRJRVMsICAgSU5DTFVESU5HLCBCVVQgTk9UICBMSU1JVEVEICBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTgorICogIE5PICBFVkVOVCAgU0hBTEwgICBUSEUgQVVUSE9SICBCRSAgICBMSUFCTEUgRk9SIEFOWSAgIERJUkVDVCwgSU5ESVJFQ1QsCisgKiAgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiAgTk9UIExJTUlURUQgICBUTywgUFJPQ1VSRU1FTlQgT0YgIFNVQlNUSVRVVEUgR09PRFMgIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCisgKiAgVVNFLCBEQVRBLCAgT1IgUFJPRklUUzsgT1IgIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiAgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX0lUODE3Ml9fSF9fCisjZGVmaW5lIF9fSVQ4MTcyX19IX18KKworI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KKworI2RlZmluZSBJVDgxNzJfQkFTRQkJCTB4MTgwMDAwMDAKKyNkZWZpbmUgSVQ4MTcyX1BDSV9JT19CQVNFCQkweDE0MDAwMDAwCisjZGVmaW5lIElUODE3Ml9QQ0lfTUVNX0JBU0UJCTB4MTAwMDAwMDAKKworLy8gU3lzdGVtIHJlZ2lzdGVycyBvZmZzZXRzIGZyb20gSVQ4MTcyX0JBU0UKKyNkZWZpbmUgSVRfQ01GUENSCQkJMHgwCisjZGVmaW5lIElUX0RTUlIJCQkJMHgyCisjZGVmaW5lIElUX1BDRENSCQkJMHg0CisjZGVmaW5lIElUX1NQTExDUgkJCTB4NgorI2RlZmluZSBJVF9DSURSCQkJCTB4MTAKKyNkZWZpbmUgSVRfQ1JOUgkJCQkweDEyCisjZGVmaW5lIElUX0NQVVRSCQkJMHgxNAorI2RlZmluZSBJVF9DVENSCQkJCTB4MTYKKyNkZWZpbmUgSVRfU0RQUgkJCQkweEYwCisKKy8vIFBvd2VyIG1hbmFnZW1lbnQgcmVnaXN0ZXIgb2Zmc2V0IGZyb20gSVQ4MTcyX1BDSV9JT19CQVNFCisvLyBQb3dlciBNYW5hZ2VtZW50IERldmljZSBTdGFuZGJ5IFJlZ2lzdGVyCisjZGVmaW5lIElUX1BNX0RTUgkJMHgxNTgwMAorCisjZGVmaW5lIElUX1BNX0RTUl9UTVIwU0IJMHgwMDAxCisjZGVmaW5lIElUX1BNX0RTUl9UTVIxU0IJMHgwMDAyCisjZGVmaW5lIElUX1BNX0RTUl9DSVIwU0IJMHgwMDA0CisjZGVmaW5lIElUX1BNX0RTUl9DSVIxU0IJMHgwMDA4CisjZGVmaW5lIElUX1BNX0RTUl9TQ1IwU0IJMHgwMDEwCisjZGVmaW5lIElUX1BNX0RTUl9TQ1IxU0IJMHgwMDIwCisjZGVmaW5lIElUX1BNX0RTUl9QUFNCCQkweDAwNDAKKyNkZWZpbmUgSVRfUE1fRFNSX0kyQ1NCCQkweDAwODAKKyNkZWZpbmUgSVRfUE1fRFNSX1VBUlRTQgkweDAxMDAKKyNkZWZpbmUgSVRfUE1fRFNSX0lERVNCCQkweDAyMDAKKyNkZWZpbmUgSVRfUE1fRFNSX0FDU0IJCTB4MDQwMAorI2RlZmluZSBJVF9QTV9EU1JfTTY4S1NCCTB4MDgwMAorCisvLyBQb3dlciBNYW5hZ2VtZW50IFBDSSBEZXZpY2UgU29mdHdhcmUgUmVzZXQgUmVnaXN0ZXIKKyNkZWZpbmUgSVRfUE1fUENJU1IgICAgICAgICAgICAgMHgxNTgwMgorCisjZGVmaW5lIElUX1BNX1BDSVNSX0lERVNSICAgICAgIDB4MDAwMQorI2RlZmluZSBJVF9QTV9QQ0lTUl9DRE1BU1IgICAgICAweDAwMDIKKyNkZWZpbmUgSVRfUE1fUENJU1JfVVNCU1IgICAgICAgMHgwMDA0CisjZGVmaW5lIElUX1BNX1BDSVNSX0RNQVNSICAgICAgIDB4MDAwOAorI2RlZmluZSBJVF9QTV9QQ0lTUl9BQ1NSICAgICAgICAweDAwMTAKKyNkZWZpbmUgSVRfUE1fUENJU1JfTUVNU1IgICAgICAgMHgwMDIwCisjZGVmaW5lIElUX1BNX1BDSVNSXzY4S1NSICAgICAgIDB4MDA0MAorCisKKy8vIFBDSSBDb25maWd1cmF0aW9uIGFkZHJlc3MgYW5kIGRhdGEgcmVnaXN0ZXIgb2Zmc2V0cworLy8gZnJvbSBJVDgxNzJfQkFTRQorI2RlZmluZSBJVF9DT05GQUREUgkJCTB4NDAwMAorI2RlZmluZSBJVF9CVVNOVU1fU0hGICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIElUX0RFVk5VTV9TSEYgICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgSVRfRlVOQ05VTV9TSEYgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIElUX1JFR05VTV9TSEYgICAgICAgICAgICAgICAgICAgMgorCisjZGVmaW5lIElUX0NPTkZEQVRBCQkJMHg0MDA0CisKKy8vIFBDSSBjb25maWd1cmF0aW9uIGhlYWRlciBjb21tb24gcmVnaXN0ZXIgb2Zmc2V0cworI2RlZmluZSBJVF9WSUQJCQkJMHgwMAorI2RlZmluZSBJVF9ESUQJCQkJMHgwMgorI2RlZmluZSBJVF9QQ0lDTUQJCQkweDA0CisjZGVmaW5lIElUX1BDSVNUUwkJCTB4MDYKKyNkZWZpbmUgSVRfUklECQkJCTB4MDgKKyNkZWZpbmUgSVRfQ0xBU1NDCQkJMHgwOQorI2RlZmluZSBJVF9IRUFEVAkJCTB4MEUKKyNkZWZpbmUgSVRfU0VSSVJRQwkJCTB4NDkKKworLy8gUENJIHRvIEludGVybmFsL0xQQyBCdXMgQnJpZGdlIGNvbmZpZ3VyYXRpb24gaGVhZGVyIHJlZ2lzdGVyIG9mZnNldAorI2RlZmluZSBJVF9QMklfQkNSCQkJCTB4NEMKKyNkZWZpbmUgSVRfUDJJX0QwSU9TQwkJCQkweDUwCisjZGVmaW5lIElUX1AySV9EMUlPU0MJCQkJMHg1NAorI2RlZmluZSBJVF9QMklfRDJJT1NDCQkJCTB4NTgKKyNkZWZpbmUgSVRfUDJJX0QzSU9TQwkJCQkweDVDCisjZGVmaW5lIElUX1AySV9ENElPU0MJCQkJMHg2MAorI2RlZmluZSBJVF9QMklfRDVJT1NDCQkJCTB4NjQKKyNkZWZpbmUgSVRfUDJJX0Q2SU9TQwkJCQkweDY4CisjZGVmaW5lIElUX1AySV9EN0lPU0MJCQkJMHg2QworI2RlZmluZSBJVF9QMklfRDhJT1NDCQkJCTB4NzAKKyNkZWZpbmUgSVRfUDJJX0Q5SU9TQwkJCQkweDc0CisjZGVmaW5lIElUX1AySV9EMTBJT1NDCQkJCTB4NzgKKyNkZWZpbmUgSVRfUDJJX0QxMUlPU0MJCQkJMHg3QworCisvLyBNZW1vcnkgY29udHJvbGxlciByZWdpc3RlciBvZmZzZXRzIGZyb20gSVQ4MTcyX0JBU0UKKyNkZWZpbmUgSVRfTUNfU0RSTVIJCQkJCTB4MTAwMAorI2RlZmluZSBJVF9NQ19TRFJUUgkJCQkJMHgxMDA0CisjZGVmaW5lIElUX01DX01DUgkJCQkJMHgxMDA4CisjZGVmaW5lIElUX01DX1NEVFlQRQkJCQkJMHgxMDBDCisjZGVmaW5lIElUX01DX1dQQkEJCQkJCTB4MTAxMAorI2RlZmluZSBJVF9NQ19XUFRBCQkJCQkweDEwMTQKKyNkZWZpbmUgSVRfTUNfSEFUUgkJCQkJMHgxMDE4CisjZGVmaW5lIElUX01DX1BDSUNSCQkJCQkweDEwMUMKKworLy8gRmxhc2gvUk9NIGNvbnRyb2wgcmVnaXN0ZXIgb2Zmc2V0cyBmcm9tIElUODE3Ml9CQVNFCisjZGVmaW5lIElUX0ZDX0JSQ1IJCQkJCTB4MjAwMAorI2RlZmluZSBJVF9GQ19GQ1IJCQkJCTB4MjAwNAorI2RlZmluZSBJVF9GQ19EQ1IJCQkJCTB4MjAwOAorCisvLyBNNjhLIGludGVyZmFjZSBicmlkZ2UgY29uZmlndXJhdGlvbiBoZWFkZXIgcmVnaXN0ZXIgb2Zmc2V0CisjZGVmaW5lIElUX002OEtfTUJDU1IJCQkJCTB4NTQKKyNkZWZpbmUgSVRfTTY4S19UTVIJCQkJCTB4NTgKKyNkZWZpbmUgSVRfTTY4S19CQ1IJCQkJCTB4NUMKKyNkZWZpbmUgSVRfTTY4S19CU1IJCQkJCTB4NUQKKyNkZWZpbmUgSVRfTTY4S19EVFIJCQkJCTB4NUYKKworLy8gUmVnaXN0ZXIgb2Zmc2V0IGZyb20gSVQ4MTcyX1BDSV9JT19CQVNFCisvLyBUaGVzZSByZWdpc3RlcnMgYXJlIGFjY2Vzc2libGUgdGhyb3VnaCA4MTcyIFBDSSBJTyB3aW5kb3cuCisKKy8vIElOVEMKKyNkZWZpbmUgSVRfSU5UQ19CQVNFCQkJCTB4MTAwMDAKKyNkZWZpbmUgSVRfSU5UQ19MQkROSVJSCQkJCTB4MTAwMDAKKyNkZWZpbmUgSVRfSU5UQ19MQkROSU1SCQkJCTB4MTAwMDIKKyNkZWZpbmUgSVRfSU5UQ19MQkROSVRSCQkJCTB4MTAwMDQKKyNkZWZpbmUgSVRfSU5UQ19MQkROSUFSCQkJCTB4MTAwMDYKKyNkZWZpbmUgSVRfSU5UQ19MUENOSVJSCQkJCTB4MTAwMTAKKyNkZWZpbmUgSVRfSU5UQ19MUENOSU1SCQkJCTB4MTAwMTIKKyNkZWZpbmUgSVRfSU5UQ19MUENOSVRSCQkJCTB4MTAwMTQKKyNkZWZpbmUgSVRfSU5UQ19MUENOSUFSCQkJCTB4MTAwMTYKKyNkZWZpbmUgSVRfSU5UQ19QRE5JUlIJCQkJMHgxMDAyMAorI2RlZmluZSBJVF9JTlRDX1BETklNUgkJCQkweDEwMDIyCisjZGVmaW5lIElUX0lOVENfUEROSVRSCQkJCTB4MTAwMjQKKyNkZWZpbmUgSVRfSU5UQ19QRE5JQVIJCQkJMHgxMDAyNgorI2RlZmluZSBJVF9JTlRDX1VNTklSUgkJCQkweDEwMDMwCisjZGVmaW5lIElUX0lOVENfVU1OSVRSCQkJCTB4MTAwMzQKKyNkZWZpbmUgSVRfSU5UQ19VTU5JQVIJCQkJMHgxMDAzNgorI2RlZmluZSBJVF9JTlRDX1RZUEVSCQkJCTB4MTA3RkUKKworLy8gSVQ4MTcyIFBDSSBkZXZpY2UgbnVtYmVyCisjZGVmaW5lIElUX0MyUF9ERVZJQ0UJCQkJMAorI2RlZmluZSBJVF9BVURJT19ERVZJQ0UJCQkJMQorI2RlZmluZSBJVF9ETUFDX0RFVklDRQkJCQkxCisjZGVmaW5lIElUX0NETUFDX0RFVklDRQkJCQkxCisjZGVmaW5lIElUX1VTQl9ERVZJQ0UJCQkJMQorI2RlZmluZSBJVF9QMklfREVWSUNFCQkJCTEKKyNkZWZpbmUgSVRfSURFX0RFVklDRQkJCQkxCisjZGVmaW5lIElUX002OEtfREVWSUNFCQkJCTEKKworLy8gSVQ4MTcyIFBDSSBmdW5jdGlvbiBudW1iZXIKKyNkZWZpbmUgSVRfQzJQX0ZVTkNJT04JCQkJMAorI2RlZmluZSBJVF9BVURJT19GVU5DVElPTgkJCTAKKyNkZWZpbmUgSVRfRE1BQ19GVU5DVElPTgkJCTEKKyNkZWZpbmUgSVRfQ0RNQUNfRlVOQ1RJT04JCQkyCisjZGVmaW5lIElUX1VTQl9GVU5DVElPTgkJCQkzCisjZGVmaW5lIElUX1AySV9GVU5DVElPTgkJCQk0CisjZGVmaW5lIElUX0lERV9GVU5DVElPTgkJCQk1CisjZGVmaW5lIElUX002OEtfRlVOQ1RJT04JCQk2CisKKy8vIElUODE3MiBHUElPCisjZGVmaW5lIElUX0dQQURSCQkJCTB4MTM4MDAKKyNkZWZpbmUgSVRfR1BCRFIJCQkJMHgxMzgwOAorI2RlZmluZSBJVF9HUENEUgkJCQkweDEzODEwCisjZGVmaW5lIElUX0dQQUNSCQkJCTB4MTM4MDIKKyNkZWZpbmUgSVRfR1BCQ1IJCQkJMHgxMzgwQQorI2RlZmluZSBJVF9HUENDUgkJCQkweDEzODEyCisjZGVmaW5lIElUX0dQQUlDUgkJCQkweDEzODA0CisjZGVmaW5lIElUX0dQQklDUgkJCQkweDEzODBDCisjZGVmaW5lIElUX0dQQ0lDUgkJCQkweDEzODE0CisjZGVmaW5lIElUX0dQQUlTUgkJCQkweDEzODA2CisjZGVmaW5lIElUX0dQQklTUgkJCQkweDEzODBFCisjZGVmaW5lIElUX0dQQ0lTUgkJCQkweDEzODE2CisjZGVmaW5lIElUX0dDUgkJCQkJMHgxMzgxOAorCisvLyBJVDgxNzIgUlRDCisjZGVmaW5lIElUX1JUQ19CQVNFCQkJCTB4MTQ4MDAKKyNkZWZpbmUgSVRfUlRDX0NFTlRVUlkJCQkJMHgxNDgwOAorCisjZGVmaW5lIElUX1JUQ19SSVIwCQkJCTB4MDAKKyNkZWZpbmUgSVRfUlRDX1JUUjAJCQkJMHgwMQorI2RlZmluZSBJVF9SVENfUklSMQkJCQkweDAyCisjZGVmaW5lIElUX1JUQ19SVFIxCQkJCTB4MDMKKyNkZWZpbmUgSVRfUlRDX1JJUjIJCQkJMHgwNAorI2RlZmluZSBJVF9SVENfUlRSMgkJCQkweDA1CisjZGVmaW5lIElUX1JUQ19SQ1RSCQkJCTB4MDgKKyNkZWZpbmUgSVRfUlRDX1JBCQkJCTB4MEEKKyNkZWZpbmUgSVRfUlRDX1JCCQkJCTB4MEIKKyNkZWZpbmUgSVRfUlRDX1JDCQkJCTB4MEMKKyNkZWZpbmUgSVRfUlRDX1JECQkJCTB4MEQKKworI2RlZmluZSBSVENfU0VDX0lOREVYCQkJCTB4MDAKKyNkZWZpbmUgUlRDX01JTl9JTkRFWAkJCQkweDAyCisjZGVmaW5lIFJUQ19IT1VSX0lOREVYCQkJCTB4MDQKKyNkZWZpbmUgUlRDX0RBWV9JTkRFWAkJCQkweDA2CisjZGVmaW5lIFJUQ19EQVRFX0lOREVYCQkJCTB4MDcKKyNkZWZpbmUgUlRDX01PTlRIX0lOREVYCQkJCTB4MDgKKyNkZWZpbmUgUlRDX1lFQVJfSU5ERVgJCQkJMHgwOQorCisvLyBJVDgxNzIgaW50ZXJuYWwgZGV2aWNlIHJlZ2lzdGVycworI2RlZmluZSBJVF9USU1FUl9CQVNFCQkJCTB4MTA4MDAKKyNkZWZpbmUgSVRfQ0lSMF9CQVNFCQkJCTB4MTEwMDAKKyNkZWZpbmUgSVRfVUFSVF9CQVNFCQkJCTB4MTE4MDAKKyNkZWZpbmUgSVRfU0NSMF9CQVNFCQkJCTB4MTIwMDAKKyNkZWZpbmUgSVRfU0NSMV9CQVNFCQkJCTB4MTI4MDAKKyNkZWZpbmUgSVRfUFBfQkFTRQkJCQkweDEzMDAwCisjZGVmaW5lIElUX0kyQ19CQVNFCQkJCTB4MTQwMDAKKyNkZWZpbmUgSVRfQ0lSMV9CQVNFCQkJCTB4MTUwMDAKKworLy8gSVQ4MTcyIFNtYXJ0IENhcmQgUmVhZGVyIG9mZnNldHMgZnJvbSBJVF9TQ1IqX0JBU0UKKyNkZWZpbmUgSVRfU0NSX1NGUgkJCQkweDA4CisjZGVmaW5lIElUX1NDUl9TQ0RSCQkJCTB4MDkKKworLy8gSVQ4MTcyIElUX1NDUl9TRlIgYml0IGRlZmluaXRpb24gJiBtYXNrCisjZGVmaW5lCUlUX1NDUl9TRlJfR0FURV9VQVJUCQkJMHg0MAorI2RlZmluZQlJVF9TQ1JfU0ZSX0dBVEVfVUFSVF9CSVQJCTYKKyNkZWZpbmUgSVRfU0NSX1NGUl9HQVRFX1VBUlRfT0ZGCQkwCisjZGVmaW5lCUlUX1NDUl9TRlJfR0FURV9VQVJUX09OCQkJMQorI2RlZmluZQlJVF9TQ1JfU0ZSX0ZFVF9DSEFSR0UJCQkweDMwCisjZGVmaW5lCUlUX1NDUl9TRlJfRkVUX0NIQVJHRV9CSVQJCTQKKyNkZWZpbmUgSVRfU0NSX1NGUl9GRVRfQ0hBUkdFXzNfM19VUwkJMworI2RlZmluZSBJVF9TQ1JfU0ZSX0ZFVF9DSEFSR0VfMTNfVVMJCTIKKyNkZWZpbmUgSVRfU0NSX1NGUl9GRVRfQ0hBUkdFXzUzX1VTCQkxCisjZGVmaW5lIElUX1NDUl9TRlJfRkVUX0NIQVJHRV8yMTNfVVMJCTAKKyNkZWZpbmUJSVRfU0NSX1NGUl9DQVJEX0ZSRVEJCQkweDBDCisjZGVmaW5lCUlUX1NDUl9TRlJfQ0FSRF9GUkVRX0JJVAkJMgorI2RlZmluZSBJVF9TQ1JfU0ZSX0NBUkRfRlJFUV9TVE9QCQkzCisjZGVmaW5lIElUX1NDUl9TRlJfQ0FSRF9GUkVRXzNfNV9NSFoJCTAKKyNkZWZpbmUgSVRfU0NSX1NGUl9DQVJEX0ZSRVFfN18xX01IWgkJMgorI2RlZmluZSBJVF9TQ1JfU0ZSX0NBUkRfRlJFUV85Nl9ESVZfTUhaCQkxCisjZGVmaW5lCUlUX1NDUl9TRlJfRkVUX0FDVElWRQkJCTB4MDIKKyNkZWZpbmUJSVRfU0NSX1NGUl9GRVRfQUNUSVZFX0JJVAkJMQorI2RlZmluZSBJVF9TQ1JfU0ZSX0ZFVF9BQ1RJVkVfSU5WRVJUCQkwCisjZGVmaW5lIElUX1NDUl9TRlJfRkVUX0FDVElWRV9OT05JTlZFUlQJCTEKKyNkZWZpbmUJSVRfU0NSX1NGUl9FTkFCTEUJCQkweDAxCisjZGVmaW5lCUlUX1NDUl9TRlJfRU5BQkxFX0JJVAkJCTAKKyNkZWZpbmUgSVRfU0NSX1NGUl9FTkFCTEVfT0ZGCQkJMAorI2RlZmluZSBJVF9TQ1JfU0ZSX0VOQUJMRV9PTgkJCTEKKworLy8gSVQ4MTcyIElUX1NDUl9TQ0RSIGJpdCBkZWZpbml0aW9uICYgbWFzaworI2RlZmluZQlJVF9TQ1JfU0NEUl9SRVNFVF9NT0RFCQkJMHg4MAorI2RlZmluZQlJVF9TQ1JfU0NEUl9SRVNFVF9NT0RFX0JJVAkJNworI2RlZmluZQlJVF9TQ1JfU0NEUl9SRVNFVF9NT0RFX0FTWU5DCQkwCisjZGVmaW5lIElUX1NDUl9TQ0RSX1JFU0VUX01PREVfU1lOQwkJMQorI2RlZmluZQlJVF9TQ1JfU0NEUl9ESVZJU09SCQkJMHg3RgorI2RlZmluZQlJVF9TQ1JfU0NEUl9ESVZJU09SX0JJVAkJCTAKKyNkZWZpbmUJSVRfU0NSX1NDRFJfRElWSVNPUl9TVE9QX1ZBTF8xCQkweDAwCisjZGVmaW5lCUlUX1NDUl9TQ0RSX0RJVklTT1JfU1RPUF9WQUxfMgkJMHgwMQorI2RlZmluZQlJVF9TQ1JfU0NEUl9ESVZJU09SX1NUT1BfVkFMXzMJCTB4N0YKKworLy8gSVQ4MTcyIERNQQorI2RlZmluZSBJVF9ETUFDX0JBU0UJCQkJMHgxNjAwMAorI2RlZmluZSBJVF9ETUFDX0JDQVIwCQkJCTB4MDAKKyNkZWZpbmUgSVRfRE1BQ19CQ0FSMQkJCQkweDA0CisjZGVmaW5lIElUX0RNQUNfQkNBUjIJCQkJMHgwOAorI2RlZmluZSBJVF9ETUFDX0JDQVIzCQkJCTB4MEMKKyNkZWZpbmUgSVRfRE1BQ19CQ0NSMAkJCQkweDAyCisjZGVmaW5lIElUX0RNQUNfQkNDUjEJCQkJMHgwNgorI2RlZmluZSBJVF9ETUFDX0JDQ1IyCQkJCTB4MGEKKyNkZWZpbmUgSVRfRE1BQ19CQ0NSMwkJCQkweDBlCisjZGVmaW5lIElUX0RNQUNfQ1IJCQkJMHgxMAorI2RlZmluZSBJVF9ETUFDX1NSCQkJCTB4MTIKKyNkZWZpbmUgSVRfRE1BQ19FU1IJCQkJMHgxMworI2RlZmluZSBJVF9ETUFDX1JRUgkJCQkweDE0CisjZGVmaW5lIElUX0RNQUNfTVIJCQkJMHgxNgorI2RlZmluZSBJVF9ETUFDX0VNUgkJCQkweDE3CisjZGVmaW5lIElUX0RNQUNfTUtSCQkJCTB4MTgKKyNkZWZpbmUgSVRfRE1BQ19QQVIwCQkJCTB4MjAKKyNkZWZpbmUgSVRfRE1BQ19QQVIxCQkJCTB4MjIKKyNkZWZpbmUgSVRfRE1BQ19QQVIyCQkJCTB4MjQKKyNkZWZpbmUgSVRfRE1BQ19QQVIzCQkJCTB4MjYKKworLy8gSVQ4MTcyIElERQorI2RlZmluZSBJVF9JREVfQkFTRQkJCQkweDE3ODAwCisjZGVmaW5lIElUX0lERV9TVEFUVVMJCQkJMHgxRjcKKworLy8gSVQ4MTcyIEF1ZGlvIENvbnRyb2xsZXIKKyNkZWZpbmUgSVRfQUNfQkFTRQkJCQkweDE3MDAwCisjZGVmaW5lCUlUX0FDX1BDTU9WCQkJCTB4MDAKKyNkZWZpbmUgSVRfQUNfRk1PVgkJCQkweDAyCisjZGVmaW5lCUlUX0FDX0kyU1YJCQkJMHgwNAorI2RlZmluZSBJVF9BQ19EUlNTCQkJCTB4MDYKKyNkZWZpbmUgSVRfQUNfUENDCQkJCTB4MDgKKyNkZWZpbmUgSVRfQUNfUENETAkJCQkweDBBCisjZGVmaW5lIElUX0FDX1BDQjFTVEEJCQkJMHgwQworI2RlZmluZSBJVF9BQ19QQ0IyU1RBCQkJCTB4MTAKKyNkZWZpbmUgSVRfQUNfQ0FQQ0MJCQkJMHgxNAorI2RlZmluZSBJVF9BQ19DQVBDREwJCQkJMHgxNgorI2RlZmluZSBJVF9BQ19DQVBCMVNUQQkJCQkweDE4CisjZGVmaW5lIElUX0FDX0NBUEIyU1RBCQkJCTB4MUMKKyNkZWZpbmUgSVRfQUNfQ09ERUNDCQkJCTB4MjIKKyNkZWZpbmUgSVRfQUNfSTJTTUMJCQkJMHgyNAorI2RlZmluZSBJVF9BQ19WUwkJCQkweDI2CisjZGVmaW5lIElUX0FDX1NSQ1MJCQkJMHgyOAorI2RlZmluZSBJVF9BQ19DSVJDUAkJCQkweDJBCisjZGVmaW5lIElUX0FDX0NJUkRQCQkJCTB4MkMKKyNkZWZpbmUgSVRfQUNfVE0JCQkJMHg0QQorI2RlZmluZSBJVF9BQ19QRkRQCQkJCTB4NEMKKyNkZWZpbmUgSVRfQUNfR0MJCQkJMHg1NAorI2RlZmluZSBJVF9BQ19JTUMJCQkJMHg1NgorI2RlZmluZSBJVF9BQ19JU0MJCQkJMHg1QgorI2RlZmluZSBJVF9BQ19PUEwzU1IJCQkJMHg2OAorI2RlZmluZSBJVF9BQ19PUEwzRFdEUgkJCQkweDY5CisjZGVmaW5lIElUX0FDX09QTDNBQjFXCQkJCTB4NkEKKyNkZWZpbmUgSVRfQUNfT1BMM0RXCQkJCTB4NkIKKyNkZWZpbmUgSVRfQUNfQlBEQwkJCQkweDcwCisKKworLy8gSVQ4MTcyIFRpbWVyCisjZGVmaW5lIElUX1RJTUVSX0JBU0UJCQkJMHgxMDgwMAorI2RlZmluZQlUSU1FUl9UQ1ZSMAkJCQkweDAwCisjZGVmaW5lIFRJTUVSX1RSVlIwCQkJCTB4MDIKKyNkZWZpbmUJVElNRVJfVENSMAkJCQkweDA0CisjZGVmaW5lIFRJTUVSX1RJUlIJCQkJMHgwNgorI2RlZmluZQlUSU1FUl9UQ1ZSMQkJCQkweDA4CisjZGVmaW5lIFRJTUVSX1RSVlIxCQkJCTB4MEEKKyNkZWZpbmUJVElNRVJfVENSMQkJCQkweDBDCisjZGVmaW5lIFRJTUVSX1RJRFIJCQkJMHgwRQorCisKKyNkZWZpbmUgSVRfV1JJVEUob2ZzLCBkYXRhKSAqKHZvbGF0aWxlIHUzMiAqKUtTRUcxQUREUigoSVQ4MTcyX0JBU0Urb2ZzKSkgPSBkYXRhCisjZGVmaW5lIElUX1JFQUQob2ZzLCBkYXRhKSAgZGF0YSA9ICoodm9sYXRpbGUgdTMyICopS1NFRzFBRERSKChJVDgxNzJfQkFTRStvZnMpKQorCisjZGVmaW5lIElUX0lPX1dSSVRFKG9mcywgZGF0YSkgKih2b2xhdGlsZSB1MzIgKilLU0VHMUFERFIoKElUODE3Ml9QQ0lfSU9fQkFTRStvZnMpKSA9IGRhdGEKKyNkZWZpbmUgSVRfSU9fUkVBRChvZnMsIGRhdGEpICBkYXRhID0gKih2b2xhdGlsZSB1MzIgKilLU0VHMUFERFIoKElUODE3Ml9QQ0lfSU9fQkFTRStvZnMpKQorCisjZGVmaW5lIElUX0lPX1dSSVRFMTYob2ZzLCBkYXRhKSAqKHZvbGF0aWxlIHUxNiAqKUtTRUcxQUREUigoSVQ4MTcyX1BDSV9JT19CQVNFK29mcykpID0gZGF0YQorI2RlZmluZSBJVF9JT19SRUFEMTYob2ZzLCBkYXRhKSAgZGF0YSA9ICoodm9sYXRpbGUgdTE2ICopS1NFRzFBRERSKChJVDgxNzJfUENJX0lPX0JBU0Urb2ZzKSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2l0ODE3Mi9pdDgxNzJfY2lyLmggYi9pbmNsdWRlL2FzbS1taXBzL2l0ODE3Mi9pdDgxNzJfY2lyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmExZGJkMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvaXQ4MTcyL2l0ODE3Ml9jaXIuaApAQCAtMCwwICsxLDE0MCBAQAorLyoKKyAqCisgKiBCUklFRiBNT0RVTEUgREVTQ1JJUFRJT04KKyAqCUlUODE3MiBDb25zdW1lciBJUiBwb3J0IGRlZmluZXMuCisgKgorICogQ29weXJpZ2h0IDIwMDEgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCisgKiBBdXRob3I6IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqICAgICAgICAgCXBwb3BvdkBtdmlzdGEuY29tIG9yIHNvdXJjZUBtdmlzdGEuY29tCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRISVMgIFNPRlRXQVJFICBJUyBQUk9WSURFRCAgIGBgQVMgIElTJycgQU5EICAgQU5ZICBFWFBSRVNTIE9SIElNUExJRUQKKyAqICBXQVJSQU5USUVTLCAgIElOQ0xVRElORywgQlVUIE5PVCAgTElNSVRFRCAgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4KKyAqICBOTyAgRVZFTlQgIFNIQUxMICAgVEhFIEFVVEhPUiAgQkUgICAgTElBQkxFIEZPUiBBTlkgICBESVJFQ1QsIElORElSRUNULAorICogIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogIE5PVCBMSU1JVEVEICAgVE8sIFBST0NVUkVNRU5UIE9GICBTVUJTVElUVVRFIEdPT0RTICBPUiBTRVJWSUNFUzsgTE9TUyBPRgorICogIFVTRSwgREFUQSwgIE9SIFBST0ZJVFM7IE9SICBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNkZWZpbmUgTlVNX0NJUl9QT1JUUyAyCisKKy8qIE1hc3RlciBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIENJUl9SRVNFVCAgICAgICAgICAgICAgMHgxCisjZGVmaW5lIENJUl9GSUZPX0NMRUFSICAgICAgICAgMHgyCisjZGVmaW5lIENJUl9TRVRfRklGT19UTCh4KSAgICAgKCgoeCkmMHgzKTw8MikKKyNkZWZpbmUgQ0lSX0lMRSAgICAgICAgICAgICAgICAweDEwCisjZGVmaW5lIENJUl9JTFNFTCAgICAgICAgICAgICAgMHgyMAorCisvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovCisjZGVmaW5lIENJUl9UTERMSUUgICAgICAgICAgICAgMHgxCisjZGVmaW5lIENJUl9SREFJRSAgICAgICAgICAgICAgMHgyCisjZGVmaW5lIENJUl9SRk9JRSAgICAgICAgICAgICAgMHg0CisjZGVmaW5lIENJUl9JRUMgICAgICAgICAgICAgICAgMHg4MAorCisvKiBJbnRlcnJ1cHQgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ0lSX1RMRExJICAgICAgICAgICAgICAweDEKKyNkZWZpbmUgQ0lSX1JEQUkgICAgICAgICAgICAgICAweDIKKyNkZWZpbmUgQ0lSX1JGT0kgICAgICAgICAgICAgICAweDQKKyNkZWZpbmUgQ0lSX05JUCAgICAgICAgICAgICAgICAweDgwCisKKy8qIENhcnJpZXIgRnJlcXVlbmN5IFJlZ2lzdGVyICovCisjZGVmaW5lIENJUl9TRVRfQ0YoeCkgICAgICAgICAgKCh4KSYweDFmKQorICAjZGVmaW5lIENGUV8zOF80ODAgICAgICAgICAgIDB4QiAgICAgICAvKiAzOCBLSHogbG93LCA0ODAgS0h6IGhpZ2ggKi8KKyNkZWZpbmUgQ0lSX0hDRlMgICAgICAgICAgICAgICAweDIwCisgICNkZWZpbmUgQ0lSX1NFVF9IUyh4KSAgICAgICAgKCgoeCkmMHgxKTw8NSkKKworCisvKiBSZWNlaXZlciBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIENJUl9TRVRfUlhEQ1IoeCkgICAgICAgKCh4KSYweDcpCisjZGVmaW5lIENJUl9SWEFDVCAgICAgICAgICAgICAgMHg4CisjZGVmaW5lIENJUl9SWEVORCAgICAgICAgICAgICAgMHgxMAorI2RlZmluZSBDSVJfUkRXT1MgICAgICAgICAgICAgIDB4MjAKKyAgI2RlZmluZSBDSVJfU0VUX1JEV09TKHgpICAgICAoKCh4KSYweDEpPDw1KQorI2RlZmluZSBDSVJfUlhFTiAgICAgICAgICAgICAgIDB4ODAKKworLyogVHJhbnNtaXR0ZXIgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBDSVJfU0VUX1RYTVBXKHgpICAgICAgICgoeCkmMHg3KQorI2RlZmluZSBDSVJfU0VUX1RYTVBNKHgpICAgICAgICgoKHgpJjB4Myk8PDMpCisjZGVmaW5lIENJUl9UWEVOREYgICAgICAgICAgICAgMHgyMAorI2RlZmluZSBDSVJfVFhSTEUgICAgICAgICAgICAgIDB4NDAKKworLyogUmVjZWl2ZXIgRklGTyBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ0lSX1JYRkJDX01BU0sgICAgICAgICAweDNmCisjZGVmaW5lIENJUl9SWEZUTyAgICAgICAgICAgICAgMHg4MAorCisvKiBXYWtldXAgQ29kZSBMZW5ndGggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ0lSX1NFVF9XQ0wgICAgICAgICAgICAoKHgpJjB4M2YpCisjZGVmaW5lIENJUl9XQ0xfTUFTSyh4KSAgICAgICAgKCh4KSYweDNmKQorCisvKiBXYWtldXAgUG93ZXIgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ0lSX0JUTU9OICAgICAgICAgICAgICAweDIKKyNkZWZpbmUgQ0lSX0NJUk9OICAgICAgICAgICAgICAweDQKKyNkZWZpbmUgQ0lSX1JDUlNUICAgICAgICAgICAgICAweDEwCisjZGVmaW5lIENJUl9XQ1JTVCAgICAgICAgICAgICAgMHgyMAorCitzdHJ1Y3QgY2lyX3BvcnQgeworCWludCBwb3J0OworCXVuc2lnbmVkIHNob3J0IGJhdWRfcmF0ZTsKKwl1bnNpZ25lZCBjaGFyIGZpZm9fdGw7CisJdW5zaWduZWQgY2hhciBjZnE7CisJdW5zaWduZWQgY2hhciBoY2ZzOworCXVuc2lnbmVkIGNoYXIgcmR3b3M7CisJdW5zaWduZWQgY2hhciByeGRjcjsKK307CisKK3N0cnVjdCBpdDgxNzJfY2lyX3JlZ3MgeworCXVuc2lnbmVkIGNoYXIgZHI7ICAgICAgIC8qIGRhdGEgICAgICAgICAgICAgICAgICAgICAgICAqLworCWNoYXIgcGFkOworCXVuc2lnbmVkIGNoYXIgbXN0Y3I7ICAgIC8qIG1hc3RlciBjb250cm9sICAgICAgICAgICAgICAqLworCWNoYXIgcGFkMTsKKwl1bnNpZ25lZCBjaGFyIGllcjsgICAgICAvKiBpbnRlcnJ1cHQgZW5hYmxlICAgICAgICAgICAgKi8KKwljaGFyIHBhZDI7CisJdW5zaWduZWQgY2hhciBpaXI7ICAgICAgLyogaW50ZXJydXB0IGlkZW50aWZpY2F0aW9uICAgICovCisJY2hhciBwYWQzOworCXVuc2lnbmVkIGNoYXIgY2ZyOyAgICAgIC8qIGNhcnJpZXIgZnJlcXVlbmN5ICAgICAgICAgICAqLworCWNoYXIgcGFkNDsKKwl1bnNpZ25lZCBjaGFyIHJjcjsgICAgICAvKiByZWNlaXZlciBjb250cm9sICAgICAgICAgICAgKi8KKwljaGFyIHBhZDU7CisJdW5zaWduZWQgY2hhciB0Y3I7ICAgICAgLyogdHJhbnNtaXR0ZXIgY29udHJvbCAgICAgICAgICovCisJY2hhciBwYWQ2OworCWNoYXIgcGFkNzsKKwljaGFyIHBhZDg7CisJdW5zaWduZWQgY2hhciBiZGxyOyAgICAgLyogYmF1ZCByYXRlIGRpdmlzb3IgbG93IGJ5dGUgICovCisJY2hhciBwYWQ5OworCXVuc2lnbmVkIGNoYXIgYmRocjsgICAgIC8qIGJhdWQgcmF0ZSBkaXZpc29yIGhpZ2ggYnl0ZSAqLworCWNoYXIgcGFkMTA7CisJdW5zaWduZWQgY2hhciB0ZnNyOyAgICAgLyogdHggZmlmbyBieXRlIGNvdW50ICAgICAgICAgICovCisJY2hhciBwYWQxMTsKKwl1bnNpZ25lZCBjaGFyIHJmc3I7ICAgICAvKiByeCBmaWZvIHN0YXR1cyAgICAgICAgICAgICAgKi8KKwljaGFyIHBhZDEyOworCXVuc2lnbmVkIGNoYXIgd2NsOyAgICAgIC8qIHdha2V1cCBjb2RlIGxlbmd0aCAgICAgICAgICAqLworCWNoYXIgcGFkMTM7CisJdW5zaWduZWQgY2hhciB3Y3I7ICAgICAgLyogd2FrZXVwIGNvZGUgcmVhZC93cml0ZSAgICAgICovCisJY2hhciBwYWQxNDsKKwl1bnNpZ25lZCBjaGFyIHdwczsgICAgICAvKiB3YWtldXAgcG93ZXIgY29udHJvbC9zdGF0dXMgKi8KK307CisKK2ludCBjaXJfcG9ydF9pbml0KHN0cnVjdCBjaXJfcG9ydCAqY2lyKTsKK2V4dGVybiB2b2lkIGNsZWFyX2ZpZm8oc3RydWN0IGNpcl9wb3J0ICpjaXIpOworZXh0ZXJuIHZvaWQgZW5hYmxlX3JlY2VpdmVyKHN0cnVjdCBjaXJfcG9ydCAqY2lyKTsKK2V4dGVybiB2b2lkIGRpc2FibGVfcmVjZWl2ZXIoc3RydWN0IGNpcl9wb3J0ICpjaXIpOworZXh0ZXJuIHZvaWQgZW5hYmxlX3J4X2RlbW9kdWxhdGlvbihzdHJ1Y3QgY2lyX3BvcnQgKmNpcik7CitleHRlcm4gdm9pZCBkaXNhYmxlX3J4X2RlbW9kdWxhdGlvbihzdHJ1Y3QgY2lyX3BvcnQgKmNpcik7CitleHRlcm4gdm9pZCBzZXRfcnhfYWN0aXZlKHN0cnVjdCBjaXJfcG9ydCAqY2lyKTsKK2V4dGVybiB2b2lkIGludF9lbmFibGUoc3RydWN0IGNpcl9wb3J0ICpjaXIpOworZXh0ZXJuIHZvaWQgcnhfaW50X2VuYWJsZShzdHJ1Y3QgY2lyX3BvcnQgKmNpcik7CitleHRlcm4gY2hhciBnZXRfaW50X3N0YXR1cyhzdHJ1Y3QgY2lyX3BvcnQgKmNpcik7CitleHRlcm4gaW50IGNpcl9nZXRfcnhfY291bnQoc3RydWN0IGNpcl9wb3J0ICpjaXIpOworZXh0ZXJuIGNoYXIgY2lyX3JlYWRfZGF0YShzdHJ1Y3QgY2lyX3BvcnQgKmNpcik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2l0ODE3Mi9pdDgxNzJfZGJnLmggYi9pbmNsdWRlL2FzbS1taXBzL2l0ODE3Mi9pdDgxNzJfZGJnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQwNGVjN2MKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2l0ODE3Mi9pdDgxNzJfZGJnLmgKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqCisgKiBCUklFRiBNT0RVTEUgREVTQ1JJUFRJT04KKyAqCUZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIGxvdyBsZXZlbCB1YXJ0IHJvdXRpbmVzIHRvCisgKglkaXJlY3RseSBhY2Nlc3MgYSAxNjU1MCB1YXJ0LgorICoKKyAqIENvcHlyaWdodCAyMDAwIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgorICogQXV0aG9yOiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKiAgICAgICAgIAlwcG9wb3ZAbXZpc3RhLmNvbSBvciBzb3VyY2VAbXZpc3RhLmNvbQorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUSElTICBTT0ZUV0FSRSAgSVMgUFJPVklERUQgICBgYEFTICBJUycnIEFORCAgIEFOWSAgRVhQUkVTUyBPUiBJTVBMSUVECisgKiAgV0FSUkFOVElFUywgICBJTkNMVURJTkcsIEJVVCBOT1QgIExJTUlURUQgIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOCisgKiAgTk8gIEVWRU5UICBTSEFMTCAgIFRIRSBBVVRIT1IgIEJFICAgIExJQUJMRSBGT1IgQU5ZICAgRElSRUNULCBJTkRJUkVDVCwKKyAqICBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqICBOT1QgTElNSVRFRCAgIFRPLCBQUk9DVVJFTUVOVCBPRiAgU1VCU1RJVFVURSBHT09EUyAgT1IgU0VSVklDRVM7IExPU1MgT0YKKyAqICBVU0UsIERBVEEsICBPUiBQUk9GSVRTOyBPUiAgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqICBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSAgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworZXh0ZXJuIHZvaWQgcHV0Y2goY29uc3QgdW5zaWduZWQgY2hhciBjKTsKK2V4dGVybiB2b2lkIHB1dHModW5zaWduZWQgY2hhciAqY3ApOworZXh0ZXJuIHZvaWQgZnB1dHModW5zaWduZWQgY2hhciAqY3ApOworZXh0ZXJuIHZvaWQgcHV0NjQodWludDY0X3QgdWwpOworZXh0ZXJuIHZvaWQgcHV0MzIodW5zaWduZWQgdSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2l0ODE3Mi9pdDgxNzJfaW50LmggYi9pbmNsdWRlL2FzbS1taXBzL2l0ODE3Mi9pdDgxNzJfaW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM3ZTgzYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvaXQ4MTcyL2l0ODE3Ml9pbnQuaApAQCAtMCwwICsxLDE0NCBAQAorLyoKKyAqCisgKiBCUklFRiBNT0RVTEUgREVTQ1JJUFRJT04KKyAqCUlURSA4MTcyIEludGVycnVwdCBOdW1iZXJpbmcKKyAqCisgKiBDb3B5cmlnaHQgMjAwMCBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KKyAqIEF1dGhvcjogTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICogICAgICAgICAJcHBvcG92QG12aXN0YS5jb20gb3Igc291cmNlQG12aXN0YS5jb20KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVEhJUyAgU09GVFdBUkUgIElTIFBST1ZJREVEICAgYGBBUyAgSVMnJyBBTkQgICBBTlkgIEVYUFJFU1MgT1IgSU1QTElFRAorICogIFdBUlJBTlRJRVMsICAgSU5DTFVESU5HLCBCVVQgTk9UICBMSU1JVEVEICBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTgorICogIE5PICBFVkVOVCAgU0hBTEwgICBUSEUgQVVUSE9SICBCRSAgICBMSUFCTEUgRk9SIEFOWSAgIERJUkVDVCwgSU5ESVJFQ1QsCisgKiAgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiAgTk9UIExJTUlURUQgICBUTywgUFJPQ1VSRU1FTlQgT0YgIFNVQlNUSVRVVEUgR09PRFMgIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCisgKiAgVVNFLCBEQVRBLCAgT1IgUFJPRklUUzsgT1IgIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiAgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBfTUlQU19JVEVJTlRfSAorI2RlZmluZSBfTUlQU19JVEVJTlRfSAorCisvKgorICogSGVyZSdzIHRoZSAic3RyYXRlZ3kiOgorICogV2UgbnVtYmVyIHRoZSBMUEMgc2VyaWFsIGlycXMgZnJvbSAwIHRvIDE1LAorICogdGhlIGxvY2FsIGJ1cyBpcnFzIGZyb20gMTYgdG8gMzEsCisgKiB0aGUgcGNpIGRldiByZWdpc3RlciBpbnRlcnJ1cHRzIGZyb20gMzIgdG8gNDcsCisgKiBhbmQgdGhlIG5vbi1tYXNrYWJsZSBpbnRzIGZyb20gNDggdG8gNTMuCisgKi8KKworI2RlZmluZSBJVDgxNzJfTFBDX0lSUV9CQVNFICAwICAgIC8qIGZpcnN0IExQQyBpbnQgbnVtYmVyICovCisjZGVmaW5lIElUODE3Ml9TRVJJUlFfMCAgICAgIChJVDgxNzJfTFBDX0lSUV9CQVNFICsgMCkKKyNkZWZpbmUgSVQ4MTcyX1NFUklSUV8xICAgICAgKElUODE3Ml9MUENfSVJRX0JBU0UgKyAxKQorI2RlZmluZSBJVDgxNzJfU0VSSVJRXzIgICAgICAoSVQ4MTcyX0xQQ19JUlFfQkFTRSArIDIpCisjZGVmaW5lIElUODE3Ml9TRVJJUlFfMyAgICAgIChJVDgxNzJfTFBDX0lSUV9CQVNFICsgMykKKyNkZWZpbmUgSVQ4MTcyX1NFUklSUV80ICAgICAgKElUODE3Ml9MUENfSVJRX0JBU0UgKyA0KQorI2RlZmluZSBJVDgxNzJfU0VSSVJRXzUgICAgICAoSVQ4MTcyX0xQQ19JUlFfQkFTRSArIDUpCisjZGVmaW5lIElUODE3Ml9TRVJJUlFfNiAgICAgIChJVDgxNzJfTFBDX0lSUV9CQVNFICsgNikKKyNkZWZpbmUgSVQ4MTcyX1NFUklSUV83ICAgICAgKElUODE3Ml9MUENfSVJRX0JBU0UgKyA3KQorI2RlZmluZSBJVDgxNzJfU0VSSVJRXzggICAgICAoSVQ4MTcyX0xQQ19JUlFfQkFTRSArIDgpCisjZGVmaW5lIElUODE3Ml9TRVJJUlFfOSAgICAgIChJVDgxNzJfTFBDX0lSUV9CQVNFICsgOSkKKyNkZWZpbmUgSVQ4MTcyX1NFUklSUV8xMCAgICAgKElUODE3Ml9MUENfSVJRX0JBU0UgKyAxMCkKKyNkZWZpbmUgSVQ4MTcyX1NFUklSUV8xMSAgICAgKElUODE3Ml9MUENfSVJRX0JBU0UgKyAxMSkKKyNkZWZpbmUgSVQ4MTcyX1NFUklSUV8xMiAgICAgKElUODE3Ml9MUENfSVJRX0JBU0UgKyAxMikKKyNkZWZpbmUgSVQ4MTcyX1NFUklSUV8xMyAgICAgKElUODE3Ml9MUENfSVJRX0JBU0UgKyAxMykKKyNkZWZpbmUgSVQ4MTcyX1NFUklSUV8xNCAgICAgKElUODE3Ml9MUENfSVJRX0JBU0UgKyAxNCkKKyNkZWZpbmUgSVQ4MTcyX1NFUklSUV8xNSAgICAgKElUODE3Ml9MUENfSVJRX0JBU0UgKyAxNSkKKworI2RlZmluZSBJVDgxNzJfTEJfSVJRX0JBU0UgIDE2ICAgLyogZmlyc3QgbG9jYWwgYnVzIGludCBudW1iZXIgKi8KKyNkZWZpbmUgSVQ4MTcyX1BQUl9JUlEgICAgICAgICAgKElUODE3Ml9MQl9JUlFfQkFTRSArIDApIC8qIHBhcmFsbGVsIHBvcnQgKi8KKyNkZWZpbmUgSVQ4MTcyX1RJTUVSMF9JUlEgICAgICAgKElUODE3Ml9MQl9JUlFfQkFTRSArIDEpCisjZGVmaW5lIElUODE3Ml9USU1FUjFfSVJRICAgICAgIChJVDgxNzJfTEJfSVJRX0JBU0UgKyAyKQorI2RlZmluZSBJVDgxNzJfSTJDX0lSUSAgICAgICAgICAoSVQ4MTcyX0xCX0lSUV9CQVNFICsgMykKKyNkZWZpbmUgSVQ4MTcyX0dQSU9fSVJRICAgICAgICAgKElUODE3Ml9MQl9JUlFfQkFTRSArIDQpCisjZGVmaW5lIElUODE3Ml9DSVIwX0lSUSAgICAgICAgIChJVDgxNzJfTEJfSVJRX0JBU0UgKyA1KQorI2RlZmluZSBJVDgxNzJfQ0lSMV9JUlEgICAgICAgICAoSVQ4MTcyX0xCX0lSUV9CQVNFICsgNikKKyNkZWZpbmUgSVQ4MTcyX1VBUlRfSVJRICAgICAgICAgKElUODE3Ml9MQl9JUlFfQkFTRSArIDcpCisjZGVmaW5lIElUODE3Ml9TQ1IwX0lSUSAgICAgICAgIChJVDgxNzJfTEJfSVJRX0JBU0UgKyA4KQorI2RlZmluZSBJVDgxNzJfU0NSMV9JUlEgICAgICAgICAoSVQ4MTcyX0xCX0lSUV9CQVNFICsgOSkKKyNkZWZpbmUgSVQ4MTcyX1JUQ19JUlEgICAgICAgICAgKElUODE3Ml9MQl9JUlFfQkFTRSArIDEwKQorI2RlZmluZSBJVDgxNzJfSU9DSEtfSVJRICAgICAgICAoSVQ4MTcyX0xCX0lSUV9CQVNFICsgMTEpCisvKiAxMiAtIDE1IHJlc2VydmVkICovCisKKy8qCisgKiBOb3RlIGhlcmUgdGhhdCB0aGUgcGNpIGRldiByZWdpc3RlcnMgaW5jbHVkZXMgYml0cyBmb3IgbW9yZSB0aGFuCisgKiBqdXN0IHRoZSBwY2kgZGV2aWNlcy4KKyAqLworI2RlZmluZSBJVDgxNzJfUENJX0RFVl9JUlFfQkFTRSAgMzIgICAvKiBmaXJzdCBwY2kgZGV2IGlycSAqLworI2RlZmluZSBJVDgxNzJfQUM5N19JUlEgICAgICAgICAgKElUODE3Ml9QQ0lfREVWX0lSUV9CQVNFICsgMCkKKyNkZWZpbmUgSVQ4MTcyX01DNjhLX0lSUSAgICAgICAgIChJVDgxNzJfUENJX0RFVl9JUlFfQkFTRSArIDEpCisjZGVmaW5lIElUODE3Ml9JREVfSVJRICAgICAgICAgICAoSVQ4MTcyX1BDSV9ERVZfSVJRX0JBU0UgKyAyKQorI2RlZmluZSBJVDgxNzJfVVNCX0lSUSAgICAgICAgICAgKElUODE3Ml9QQ0lfREVWX0lSUV9CQVNFICsgMykKKyNkZWZpbmUgSVQ4MTcyX0JSSURHRV9NQVNURVJfSVJRIChJVDgxNzJfUENJX0RFVl9JUlFfQkFTRSArIDQpCisjZGVmaW5lIElUODE3Ml9CUklER0VfVEFSR0VUX0lSUSAoSVQ4MTcyX1BDSV9ERVZfSVJRX0JBU0UgKyA1KQorI2RlZmluZSBJVDgxNzJfUENJX0lOVEFfSVJRICAgICAgKElUODE3Ml9QQ0lfREVWX0lSUV9CQVNFICsgNikKKyNkZWZpbmUgSVQ4MTcyX1BDSV9JTlRCX0lSUSAgICAgIChJVDgxNzJfUENJX0RFVl9JUlFfQkFTRSArIDcpCisjZGVmaW5lIElUODE3Ml9QQ0lfSU5UQ19JUlEgICAgICAoSVQ4MTcyX1BDSV9ERVZfSVJRX0JBU0UgKyA4KQorI2RlZmluZSBJVDgxNzJfUENJX0lOVERfSVJRICAgICAgKElUODE3Ml9QQ0lfREVWX0lSUV9CQVNFICsgOSkKKyNkZWZpbmUgSVQ4MTcyX1NfSU5UQV9JUlEgICAgICAgIChJVDgxNzJfUENJX0RFVl9JUlFfQkFTRSArIDEwKQorI2RlZmluZSBJVDgxNzJfU19JTlRCX0lSUSAgICAgICAgKElUODE3Ml9QQ0lfREVWX0lSUV9CQVNFICsgMTEpCisjZGVmaW5lIElUODE3Ml9TX0lOVENfSVJRICAgICAgICAoSVQ4MTcyX1BDSV9ERVZfSVJRX0JBU0UgKyAxMikKKyNkZWZpbmUgSVQ4MTcyX1NfSU5URF9JUlEgICAgICAgIChJVDgxNzJfUENJX0RFVl9JUlFfQkFTRSArIDEzKQorI2RlZmluZSBJVDgxNzJfQ0RNQV9JUlEgICAgICAgICAgKElUODE3Ml9QQ0lfREVWX0lSUV9CQVNFICsgMTQpCisjZGVmaW5lIElUODE3Ml9ETUFfSVJRICAgICAgICAgICAoSVQ4MTcyX1BDSV9ERVZfSVJRX0JBU0UgKyAxNSkKKworI2RlZmluZSBJVDgxNzJfTk1JX0lSUV9CQVNFICAgICAgNDgKKyNkZWZpbmUgSVQ4MTcyX1NFUl9OTUlfSVJRICAgICAgIChJVDgxNzJfTk1JX0lSUV9CQVNFICsgMCkKKyNkZWZpbmUgSVQ4MTcyX1BDSV9OTUlfSVJRICAgICAgIChJVDgxNzJfTk1JX0lSUV9CQVNFICsgMSkKKyNkZWZpbmUgSVQ4MTcyX1JUQ19OTUlfSVJRICAgICAgIChJVDgxNzJfTk1JX0lSUV9CQVNFICsgMikKKyNkZWZpbmUgSVQ4MTcyX0NQVUlGX05NSV9JUlEgICAgIChJVDgxNzJfTk1JX0lSUV9CQVNFICsgMykKKyNkZWZpbmUgSVQ4MTcyX1BNRVJfTk1JX0lSUSAgICAgIChJVDgxNzJfTk1JX0lSUV9CQVNFICsgNCkKKyNkZWZpbmUgSVQ4MTcyX1BPV0VSX05NSV9JUlEgICAgIChJVDgxNzJfTk1JX0lSUV9CQVNFICsgNSkKKworI2RlZmluZSBJVDgxNzJfTEFTVF9JUlEgICAgICAgICAgKElUODE3Ml9QT1dFUl9OTUlfSVJRKQorLyogRmluYWxseSwgbGV0J3MgbW92ZSBvdmVyIGhlcmUgdGhlIG1pcHMgY3B1IHRpbWVyIGludGVycnVwdC4KKyAqLworI2RlZmluZSBNSVBTX0NQVV9USU1FUl9JUlEgICAgICAgKE5SX0lSUVMtMSkKKworLyoKKyAqIElUODE3MiBJbnRlcnJ1cHQgQ29udHJvbGxlciBSZWdpc3RlcnMKKyAqLworc3RydWN0IGl0ODE3Ml9pbnRjX3JlZ3MgeworICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBsYl9yZXE7ICAgICAgLyogb2Zmc2V0IDAgKi8KKyAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgbGJfbWFzazsKKyAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgbGJfdHJpZ2dlcjsKKyAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgbGJfbGV2ZWw7CisJdW5zaWduZWQgY2hhciBwYWQwWzhdOworCisgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGxwY19yZXE7ICAgICAvKiBvZmZzZXQgMHgxMCAqLworICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBscGNfbWFzazsKKyAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgbHBjX3RyaWdnZXI7CisgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGxwY19sZXZlbDsKKwl1bnNpZ25lZCBjaGFyIHBhZDFbOF07CisKKyAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgcGNpX3JlcTsgICAgIC8qIG9mZnNldCAweDIwICovCisgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IHBjaV9tYXNrOworICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBwY2lfdHJpZ2dlcjsKKyAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgcGNpX2xldmVsOworCXVuc2lnbmVkIGNoYXIgcGFkMls4XTsKKworICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBubWlfcmVxOyAgICAgLyogb2Zmc2V0IDB4MzAgKi8KKyAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgbm1pX21hc2s7CisgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IG5taV90cmlnZ2VyOworICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBubWlfbGV2ZWw7CisJdW5zaWduZWQgY2hhciBwYWQzWzZdOworCisgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IG5taV9yZWRpcjsgICAvKiBvZmZzZXQgMHgzRSAqLworCXVuc2lnbmVkIGNoYXIgcGFkNFsweEJFXTsKKworICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnRzdGF0dXM7ICAgIC8qIG9mZnNldCAweEZFICovCit9OworCisjZW5kaWYgLyogX01JUFNfSVRFSU5UX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvaXQ4MTcyL2l0ODE3Ml9wY2kuaCBiL2luY2x1ZGUvYXNtLW1pcHMvaXQ4MTcyL2l0ODE3Ml9wY2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmM2MWY1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9pdDgxNzIvaXQ4MTcyX3BjaS5oCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICoKKyAqIEJSSUVGIE1PRFVMRSBERVNDUklQVElPTgorICoJSVQ4MTcyIHN5c3RlbSBjb250cm9sbGVyIHNwZWNpZmljIHBjaSBkZWZpbmVzLgorICoKKyAqIENvcHlyaWdodCAyMDAwIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgorICogQXV0aG9yOiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKiAgICAgICAgIAlwcG9wb3ZAbXZpc3RhLmNvbSBvciBzb3VyY2VAbXZpc3RhLmNvbQorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUSElTICBTT0ZUV0FSRSAgSVMgUFJPVklERUQgICBgYEFTICBJUycnIEFORCAgIEFOWSAgRVhQUkVTUyBPUiBJTVBMSUVECisgKiAgV0FSUkFOVElFUywgICBJTkNMVURJTkcsIEJVVCBOT1QgIExJTUlURUQgIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOCisgKiAgTk8gIEVWRU5UICBTSEFMTCAgIFRIRSBBVVRIT1IgIEJFICAgIExJQUJMRSBGT1IgQU5ZICAgRElSRUNULCBJTkRJUkVDVCwKKyAqICBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqICBOT1QgTElNSVRFRCAgIFRPLCBQUk9DVVJFTUVOVCBPRiAgU1VCU1RJVFVURSBHT09EUyAgT1IgU0VSVklDRVM7IExPU1MgT0YKKyAqICBVU0UsIERBVEEsICBPUiBQUk9GSVRTOyBPUiAgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqICBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSAgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmIF84MTcyUENJX0hfCisjZGVmaW5lIF84MTcyUENJX0hfCisKKy8vIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlIFR5cGUwCisjZGVmaW5lCVBDSV9JRFJFRwkweDAwCisjZGVmaW5lCVBDSV9DTURTVFNSRUcJMHgwNAorI2RlZmluZQlQQ0lfQ0xBU1NSRUcJMHgwOAorI2RlZmluZQlQQ0lfQkhMQ1JFRwkweDBDCisjZGVmaW5lCVBDSV9CQVNFMVJFRwkweDEwCisjZGVmaW5lCVBDSV9CQVNFMlJFRwkweDE0CisjZGVmaW5lCVBDSV9CQVNFM1JFRwkweDE4CisjZGVmaW5lCVBDSV9CQVNFNFJFRwkweDFDCisjZGVmaW5lCVBDSV9CQVNFNVJFRwkweDIwCisjZGVmaW5lCVBDSV9CQVNFNlJFRwkweDI0CisjZGVmaW5lCVBDSV9ST01CQVNFUkVHCTB4MzAKKyNkZWZpbmUJUENJX0lOVFJSRUcJMHgzQworCisvLyBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSBUeXBlMQorI2RlZmluZQlQQ0lfQlVTTk9SRUcJMHgxOAorCisjZGVmaW5lCUlUX1BDSV9WRU5ET1JJRCh4KQkoKHgpICYgMHhGRkZGKQorI2RlZmluZQlJVF9QQ0lfREVWSUNFSUQoeCkJKCgoeCk+PjE2KSAmIDB4RkZGRikKKworLy8gQ29tbWFuZCByZWdpc3RlcgorI2RlZmluZQlQQ0lfQ01EX0lPRU4JCTB4MDAwMDAwMDEKKyNkZWZpbmUJUENJX0NNRF9NRU1FTgkJMHgwMDAwMDAwMgorI2RlZmluZQlQQ0lfQ01EX0JVU01BU1RFUgkweDAwMDAwMDA0CisjZGVmaW5lCVBDSV9DTURfU1BDWUNMRQkJMHgwMDAwMDAwOAorI2RlZmluZQlQQ0lfQ01EX1dSSU5WCQkweDAwMDAwMDEwCisjZGVmaW5lCVBDSV9DTURfVkdBU05PT1AJMHgwMDAwMDAyMAorI2RlZmluZQlQQ0lfQ01EX1BFUlIJCTB4MDAwMDAwNDAKKyNkZWZpbmUJUENJX0NNRF9XQUlUQ1RSTAkweDAwMDAwMDgwCisjZGVmaW5lCVBDSV9DTURfU0VSUgkJMHgwMDAwMDEwMAorI2RlZmluZQlQQ0lfQ01EX0ZBU1RfQkFDS1RPQkFDSwkweDAwMDAwMjAwCisKKy8vIFN0YXR1cyByZWdpc3RlcgorI2RlZmluZQlQQ0lfU1RTXzY2TUhaCQkweDAwMjAwMDAwCisjZGVmaW5lCVBDSV9TVFNfU1VQUE9SVF9VREYJMHgwMDQwMDAwMAorI2RlZmluZQlQQ0lfU1RTX0ZBU1RfQkFDS1RPQkFDSwkweDAwODAwMDAwCisjZGVmaW5lCVBDSV9TVFNfREFUQV9QRVJSCTB4MDEwMDAwMDAKKyNkZWZpbmUJUENJX1NUU19ERVZTRUwwCQkweDAyMDAwMDAwCisjZGVmaW5lCVBDSV9TVFNfREVWU0VMMQkJMHgwNDAwMDAwMAorI2RlZmluZQlQQ0lfU1RTX1NJR19UR1RBQk9SVAkweDA4MDAwMDAwCisjZGVmaW5lCVBDSV9TVFNfUkNWX1RHVEFCT1JUCTB4MTAwMDAwMDAKKyNkZWZpbmUJUENJX1NUU19SQ1ZfTVNUQUJPUlQJMHgyMDAwMDAwMAorI2RlZmluZQlQQ0lfU1RTX1NZU0VSUgkJMHg0MDAwMDAwMAorI2RlZmluZQlQQ0lfU1RTX0RFVENUX1BFUlIJMHg4MDAwMDAwMAorCisjZGVmaW5lCUlUX1BDSV9DTEFTUyh4KQkJKCgoeCk+PjI0KSAmIDB4RkYpCisjZGVmaW5lCUlUX1BDSV9TVUJDTEFTUyh4KQkJKCgoeCk+PjE2KSAmIDB4RkYpCisjZGVmaW5lCUlUX1BDSV9JTlRFUkZBQ0UoeCkJKCgoeCk+PjgpICYgMHhGRikKKyNkZWZpbmUJSVRfUENJX1JFVklTSU9OKHgpCQkoKHgpICYgMHhGRikKKworLy8gUENJIGNsYXNzIGNvZGUKKyNkZWZpbmUJUENJX0NMQVNTX0JSSURHRQkJCTB4MDYKKworLy8gYnJpZGdlIHN1YmNsYXNzCisjZGVmaW5lCVBDSV9TVUJDTEFTU19CUklER0VfSE9TVAkJMHgwMAorI2RlZmluZQlQQ0lfU1VCQ0xBU1NfQlJJREdFX1BDSQkJCTB4MDQKKworLy8gQkhMQ1JFRworI2RlZmluZQlJVF9QQ0lfQklTVCh4KQkJKCgoeCk+PjI0KSAmIDB4RkYpCisjZGVmaW5lCUlUX1BDSV9IRUFERVJUWVBFKHgpCSgoKHgpPj4xNikgJiAweEZGKQorI2RlZmluZQlJVF9QQ0lfTEFURU5DWVRJTUVSKHgpCSgoKHgpPj44KSAmIDB4RkYpCisjZGVmaW5lCUlUX1BDSV9DQUNIRUxJTkVTSVpFKHgpCSgoeCkgJiAweEZGKQorCisjZGVmaW5lCVBDSV9NVUxUSUZVTkMJMHg4MAorCisvLyBJTlRSUkVHCisjZGVmaW5lCUlUX1BDSV9NQVhMQVQoeCkJCSgoKHgpPj4yNCkgJiAweEZGKQorI2RlZmluZQlJVF9QQ0lfTUlOR05UKHgpCQkoKCh4KT4+MTYpICYgMHhGRikKKyNkZWZpbmUJSVRfUENJX0lOVFJQSU4oeCkJCSgoKHgpPj44KSAmIDB4RkYpCisjZGVmaW5lCUlUX1BDSV9JTlRSTElORSh4KQkJKCh4KSAmIDB4RkYpCisKKyNkZWZpbmUJUENJX1ZFTkRPUl9ORUMJMHgxMDMzCisjZGVmaW5lIFBDSV9WRU5ET1JfREVDCTB4MTEwMQorCisjZW5kaWYgLy8gXzgxNzJQQ0lfSF8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvaXQ4NzEyLmggYi9pbmNsdWRlL2FzbS1taXBzL2l0ODcxMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhMmRlZTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2l0ODcxMi5oCkBAIC0wLDAgKzEsMjggQEAKKworI2lmbmRlZiBfX0lUODcxMl9IX18KKyNkZWZpbmUgX19JVDg3MTJfSF9fCisKKyNkZWZpbmUgTFBDX0JBU0VfQUREUgkweDE0MDAwMDAwCisKKy8vIE1CIFBuUCBjb25maWd1cmF0aW9uIHJlZ2lzdGVyCisjZGVmaW5lIExQQ19LRVlfQUREUgkweDE0MDAwMDJFCisjZGVmaW5lIExQQ19EQVRBX0FERFIJMHgxNDAwMDAyRgorCisvLyBEZXZpY2UgTEROCisjZGVmaW5lIExETl9TRVJJQUwxCTB4MDEKKyNkZWZpbmUgTEROX1NFUklBTDIJMHgwMgorI2RlZmluZSBMRE5fUEFSQUxMRUwJMHgwMworI2RlZmluZSBMRE5fS0VZQk9BUkQJMHgwNQorI2RlZmluZSBMRE5fTU9VU0UJMHgwNgorCisjZGVmaW5lIElUODcxMl9VQVJUMV9QT1JUICAgICAgMHgzRjgKKyNkZWZpbmUgSVQ4NzEyX1VBUlQyX1BPUlQgICAgICAweDJGOAorCisjaWZuZGVmIEFTTV9PTkxZCisKK3ZvaWQgTFBDU2V0Q29uZmlnKGNoYXIgTGRuTnVtYmVyLCBjaGFyIEluZGV4LCBjaGFyIGRhdGEpOworY2hhciBMUENHZXRDb25maWcoY2hhciBMZG5OdW1iZXIsIGNoYXIgSW5kZXgpOworCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2phenouaCBiL2luY2x1ZGUvYXNtLW1pcHMvamF6ei5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxY2JmMDAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2phenouaApAQCAtMCwwICsxLDMyMiBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NSAtIDE5OTggYnkgQW5kcmVhcyBCdXNzZSBhbmQgUmFsZiBCYWVjaGxlCisgKi8KKyNpZm5kZWYgX19BU01fSkFaWl9ICisjZGVmaW5lIF9fQVNNX0pBWlpfSAorCisvKgorICogVGhlIGFkZHJlc3NlcyBiZWxvdyBhcmUgdmlydHVhbCBhZGRyZXNzLiBUaGUgbWFwcGluZ3MgYXJlCisgKiBjcmVhdGVkIG9uIHN0YXJ0dXAgdmlhIHdpcmVkIGVudHJpZXMgaW4gdGhlIHRsYi4gVGhlIE1pcHMKKyAqIE1hZ251bSBSMzAwMCBhbmQgUjQwMDAgbWFjaGluZXMgYXJlIHNpbWlsYXIgaW4gbWFueSBhc3BlY3RzLAorICogYnV0IG1hbnkgaGFyZHdhcmUgcmVnaXN0ZXIgYXJlIGFjY2Vzc2libGUgYXQgMHhiOTAwMDAwMCBpbgorICogaW5zdGVhZCBvZiAweGUwMDAwMDAwLgorICovCisKKyNkZWZpbmUgSkFaWl9MT0NBTF9JT19TUEFDRSAgICAgMHhlMDAwMDAwMAorCisvKgorICogUmV2aXNpb24gbnVtYmVycyBpbiBQSUNBX0FTSUNfUkVWSVNJT04KKyAqCisgKiAweGYwMDAwMDAwIC0gUmV2MQorICogMHhmMDAwMDAwMSAtIFJldjIKKyAqIDB4ZjAwMDAwMDIgLSBSZXYzCisgKi8KKyNkZWZpbmUgUElDQV9BU0lDX1JFVklTSU9OICAgICAgMHhlMDAwMDAwOAorCisvKgorICogVGhlIHNlZ21lbnRzIG9mIHRoZSBzZXZlbiBzZWdtZW50IExFRCBhcmUgbWFwcGVkCisgKiB0byB0aGUgY29udHJvbCBiaXRzIGFzIGZvbGxvd3M6CisgKgorICogICAgICAgICAoNykKKyAqICAgICAgLS0tLS0tLS0tCisgKiAgICAgIHwgICAgICAgfAorICogICgyKSB8ICAgICAgIHwgKDYpCisgKiAgICAgIHwgICgxKSAgfAorICogICAgICAtLS0tLS0tLS0KKyAqICAgICAgfCAgICAgICB8CisgKiAgKDMpIHwgICAgICAgfCAoNSkKKyAqICAgICAgfCAgKDQpICB8CisgKiAgICAgIC0tLS0tLS0tLSAuICgwKQorICovCisjZGVmaW5lIFBJQ0FfTEVEICAgICAgICAgICAgICAgIDB4ZTAwMGYwMDAKKworLyoKKyAqIFNvbWUgY2hhcmFjdGVycyBmb3IgdGhlIExFRCBjb250cm9sIHJlZ2lzdGVycworICogVGhlIG9yaWdpbmFsIE1pcHMgbWFjaGluZXMgc2VlbSB0byBoYXZlIGEgTEVEIGRpc3BsYXkKKyAqIHdpdGggaW50ZWdyYXRlZCBkZWNvZGVyIHdoaWxlIHRoZSBBY2VyIG1hY2hpbmVzIGNhbgorICogY29udHJvbCBlYWNoIG9mIHRoZSBzZXZlbiBzZWdtZW50cyBhbmQgdGhlIGRvdCBpbmRlcGVuZGVudGx5LgorICogSXQncyBvbmx5IGEgdG95LCBhbnl3YXkuLi4KKyAqLworI2RlZmluZSBMRURfRE9UICAgICAgICAgICAgICAgICAweDAxCisjZGVmaW5lIExFRF9TUEFDRSAgICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgTEVEXzAgICAgICAgICAgICAgICAgICAgMHhmYworI2RlZmluZSBMRURfMSAgICAgICAgICAgICAgICAgICAweDYwCisjZGVmaW5lIExFRF8yICAgICAgICAgICAgICAgICAgIDB4ZGEKKyNkZWZpbmUgTEVEXzMgICAgICAgICAgICAgICAgICAgMHhmMgorI2RlZmluZSBMRURfNCAgICAgICAgICAgICAgICAgICAweDY2CisjZGVmaW5lIExFRF81ICAgICAgICAgICAgICAgICAgIDB4YjYKKyNkZWZpbmUgTEVEXzYgICAgICAgICAgICAgICAgICAgMHhiZQorI2RlZmluZSBMRURfNyAgICAgICAgICAgICAgICAgICAweGUwCisjZGVmaW5lIExFRF84ICAgICAgICAgICAgICAgICAgIDB4ZmUKKyNkZWZpbmUgTEVEXzkgICAgICAgICAgICAgICAgICAgMHhmNgorI2RlZmluZSBMRURfQSAgICAgICAgICAgICAgICAgICAweGVlCisjZGVmaW5lIExFRF9iICAgICAgICAgICAgICAgICAgIDB4M2UKKyNkZWZpbmUgTEVEX0MgICAgICAgICAgICAgICAgICAgMHg5YworI2RlZmluZSBMRURfZCAgICAgICAgICAgICAgICAgICAweDdhCisjZGVmaW5lIExFRF9FICAgICAgICAgICAgICAgICAgIDB4OWUKKyNkZWZpbmUgTEVEX0YgICAgICAgICAgICAgICAgICAgMHg4ZQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHBpY2Ffc2V0X2xlZCh1bnNpZ25lZCBpbnQgYml0cykKK3sKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKmxlZF9yZWdpc3RlciA9ICh1bnNpZ25lZCBpbnQgKikgUElDQV9MRUQ7CisKKwkqbGVkX3JlZ2lzdGVyID0gYml0czsKK30KKworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKworLyoKKyAqIEJhc2UgYWRkcmVzcyBvZiB0aGUgU29uaWMgRXRoZXJuZXQgYWRhcHRlciBpbiBKYXp6IG1hY2hpbmVzLgorICovCisjZGVmaW5lIEpBWlpfRVRIRVJORVRfQkFTRSAgMHhlMDAwMTAwMAorCisvKgorICogQmFzZSBhZGRyZXNzIG9mIHRoZSA1M0M5NCBTQ1NJIGhvc3RhZGFwdGVyIGluIEphenogbWFjaGluZXMuCisgKi8KKyNkZWZpbmUgSkFaWl9TQ1NJX0JBU0UJCTB4ZTAwMDIwMDAKKworLyoKKyAqIGk4MDQyIGtleWJvYXJkIGNvbnRyb2xsZXIgZm9yIEpBWlogYW5kIFBJQ0EgY2hpcHNldHMuCisgKiBUaGlzIGFkZHJlc3MgaXMganVzdCBhIGd1ZXNzIGFuZCBzZWVtcyB0byBkaWZmZXIgZnJvbQorICogb3RoZXIgbWlwcyBtYWNoaW5lcyBzdWNoIGFzIFJDM3h4eC4uLgorICovCisjZGVmaW5lIEpBWlpfS0VZQk9BUkRfQUREUkVTUyAgIDB4ZTAwMDUwMDAKKyNkZWZpbmUgSkFaWl9LRVlCT0FSRF9EQVRBICAgICAgMHhlMDAwNTAwMAorI2RlZmluZSBKQVpaX0tFWUJPQVJEX0NPTU1BTkQgICAweGUwMDA1MDAxCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBjaGFyIGRhdGE7CisJdW5zaWduZWQgY2hhciBjb21tYW5kOworfSBqYXp6X2tleWJvYXJkX2hhcmR3YXJlOworCisjZGVmaW5lIGphenpfa2ggKChrZXlib2FyZF9oYXJkd2FyZSAqKSBKQVpaX0tFWUJPQVJEX0FERFJFU1MpCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBjaGFyIHBhZDBbM107CisJdW5zaWduZWQgY2hhciBkYXRhOworCXVuc2lnbmVkIGNoYXIgcGFkMVszXTsKKwl1bnNpZ25lZCBjaGFyIGNvbW1hbmQ7Cit9IG1pcHNfa2V5Ym9hcmRfaGFyZHdhcmU7CisKKy8qCisgKiBGb3Igbm93LiBOZWVkcyB0byBiZSBjaGFuZ2VkIGZvciBSQzN4eHggc3VwcG9ydC4gU2VlIGJlbG93LgorICovCisjZGVmaW5lIGtleWJvYXJkX2hhcmR3YXJlICAgICAgIGphenpfa2V5Ym9hcmRfaGFyZHdhcmUKKworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKworLyoKKyAqIGk4MDQyIGtleWJvYXJkIGNvbnRyb2xsZXIgZm9yIG1vc3Qgb3RoZXIgTWlwcyBtYWNoaW5lcy4KKyAqLworI2RlZmluZSBNSVBTX0tFWUJPQVJEX0FERFJFU1MgICAweGI5MDA1MDAwCisjZGVmaW5lIE1JUFNfS0VZQk9BUkRfREFUQSAgICAgIDB4YjkwMDUwMDMKKyNkZWZpbmUgTUlQU19LRVlCT0FSRF9DT01NQU5EICAgMHhiOTAwNTAwNworCisvKgorICogU2VyaWFsIGFuZCBwYXJhbGxlbCBwb3J0cyAoV0QgMTZDNTUyKSBvbiB0aGUgTWlwcyBKQVpaCisgKi8KKyNkZWZpbmUgSkFaWl9TRVJJQUwxX0JBU0UgICAgICAgKHVuc2lnbmVkIGludCkweGUwMDA2MDAwCisjZGVmaW5lIEpBWlpfU0VSSUFMMl9CQVNFICAgICAgICh1bnNpZ25lZCBpbnQpMHhlMDAwNzAwMAorI2RlZmluZSBKQVpaX1BBUkFMTEVMX0JBU0UgICAgICAodW5zaWduZWQgaW50KTB4ZTAwMDgwMDAKKworLyoKKyAqIER1bW15IERldmljZSBBZGRyZXNzLiBVc2VkIGluIGphenpkbWEuYworICovCisjZGVmaW5lIEpBWlpfRFVNTVlfREVWSUNFICAgICAgIDB4ZTAwMGQwMDAKKworLyoKKyAqIEpBWlogdGltZXIgcmVnaXN0ZXJzIGFuZCBpbnRlcnJ1cHQgbm8uCisgKiBOb3RlIHRoYXQgdGhlIGhhcmR3YXJlIHRpbWVyIGludGVycnVwdCBpcyBhY3R1YWxseSBvbgorICogY3B1IGxldmVsIDYsIGJ1dCB0byBrZWVwIGNvbXBhdGliaWxpdHkgd2l0aCBQQyBzdHVmZgorICogaXQgaXMgcmVtYXBwZWQgdG8gdmVjdG9yIDAuIFNlZSBhcmNoL21pcHMva2VybmVsL2VudHJ5LlMuCisgKi8KKyNkZWZpbmUgSkFaWl9USU1FUl9JTlRFUlZBTCAgICAgMHhlMDAwMDIyOAorI2RlZmluZSBKQVpaX1RJTUVSX1JFR0lTVEVSICAgICAweGUwMDAwMjMwCisKKy8qCisgKiBEUkFNIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIKKyAqLworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNpZmRlZiBfX01JUFNFTF9fCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgaW50IGJhbmsyIDogMzsKKwl1bnNpZ25lZCBpbnQgYmFuazEgOiAzOworCXVuc2lnbmVkIGludCBtZW1fYnVzX3dpZHRoIDogMTsKKwl1bnNpZ25lZCBpbnQgcmVzZXJ2ZWQyIDogMTsKKwl1bnNpZ25lZCBpbnQgcGFnZV9tb2RlIDogMTsKKwl1bnNpZ25lZCBpbnQgcmVzZXJ2ZWQxIDogMjM7Cit9IGRyYW1fY29uZmlndXJhdGlvbjsKKyNlbHNlIC8qIGRlZmluZWQgKF9fTUlQU0VCX18pICovCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgaW50IHJlc2VydmVkMSA6IDIzOworCXVuc2lnbmVkIGludCBwYWdlX21vZGUgOiAxOworCXVuc2lnbmVkIGludCByZXNlcnZlZDIgOiAxOworCXVuc2lnbmVkIGludCBtZW1fYnVzX3dpZHRoIDogMTsKKwl1bnNpZ25lZCBpbnQgYmFuazEgOiAzOworCXVuc2lnbmVkIGludCBiYW5rMiA6IDM7Cit9IGRyYW1fY29uZmlndXJhdGlvbjsKKyNlbmRpZgorI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKworI2RlZmluZSBQSUNBX0RSQU1fQ09ORklHICAgICAgICAweGUwMGZmZmUwCisKKy8qCisgKiBKQVpaIGludGVycnVwdCBjb250cm9sIHJlZ2lzdGVycworICovCisjZGVmaW5lIEpBWlpfSU9fSVJRX1NPVVJDRSAgICAgIDB4ZTAwMTAwMDAKKyNkZWZpbmUgSkFaWl9JT19JUlFfRU5BQkxFICAgICAgMHhlMDAxMDAwMgorCisvKgorICogSkFaWiBpbnRlcnJ1cHQgZW5hYmxlIGJpdHMKKyAqLworI2RlZmluZSBKQVpaX0lFX1BBUkFMTEVMICAgICAgICAgICAgKDEgPDwgMCkKKyNkZWZpbmUgSkFaWl9JRV9GTE9QUFkgICAgICAgICAgICAgICgxIDw8IDEpCisjZGVmaW5lIEpBWlpfSUVfU09VTkQgICAgICAgICAgICAgICAoMSA8PCAyKQorI2RlZmluZSBKQVpaX0lFX1ZJREVPICAgICAgICAgICAgICAgKDEgPDwgMykKKyNkZWZpbmUgSkFaWl9JRV9FVEhFUk5FVCAgICAgICAgICAgICgxIDw8IDQpCisjZGVmaW5lIEpBWlpfSUVfU0NTSSAgICAgICAgICAgICAgICAoMSA8PCA1KQorI2RlZmluZSBKQVpaX0lFX0tFWUJPQVJEICAgICAgICAgICAgKDEgPDwgNikKKyNkZWZpbmUgSkFaWl9JRV9NT1VTRSAgICAgICAgICAgICAgICgxIDw8IDcpCisjZGVmaW5lIEpBWlpfSUVfU0VSSUFMMSAgICAgICAgICAgICAoMSA8PCA4KQorI2RlZmluZSBKQVpaX0lFX1NFUklBTDIgICAgICAgICAgICAgKDEgPDwgOSkKKworLyoKKyAqIEpBWlogSW50ZXJydXB0IExldmVsIGRlZmluaXRpb25zCisgKgorICogVGhpcyBpcyBzb21ld2hhdCBicm9rZW4uICBGb3IgcmVhc29ucyB3aGljaCBub2JvZHkgY2FuIHJlbWVtYmVyIGFueW1vcmUKKyAqIHdlIHJlbWFwIHRoZSBKYXp6IGludGVycnVwdHMgdG8gdGhlIHVzdWFsIElTQSBzdHlsZSBpbnRlcnJ1cHQgbnVtYmVycy4KKyAqLworI2RlZmluZSBKQVpaX1BBUkFMTEVMX0lSUSAgICAgICAxNgorI2RlZmluZSBKQVpaX0ZMT1BQWV9JUlEgICAgICAgICAxNworI2RlZmluZSBKQVpaX1NPVU5EX0lSUSAgICAgICAgICAxOAorI2RlZmluZSBKQVpaX1ZJREVPX0lSUSAgICAgICAgICAxOQorI2RlZmluZSBKQVpaX0VUSEVSTkVUX0lSUSAgICAgICAyMAorI2RlZmluZSBKQVpaX1NDU0lfSVJRICAgICAgICAgICAyMQorI2RlZmluZSBKQVpaX0tFWUJPQVJEX0lSUSAgICAgICAyMgorI2RlZmluZSBKQVpaX01PVVNFX0lSUSAgICAgICAgICAyMworI2RlZmluZSBKQVpaX1NFUklBTDFfSVJRICAgICAgICAyNAorI2RlZmluZSBKQVpaX1NFUklBTDJfSVJRICAgICAgICAyNQorCisjZGVmaW5lIEpBWlpfVElNRVJfSVJRICAgICAgICAgIDMxCisKKworLyoKKyAqIEpBWlogRE1BIENoYW5uZWxzCisgKiBOb3RlOiBDaGFubmVscyA0Li4uNyBhcmUgbm90IHVzZWQgd2l0aCByZXNwZWN0IHRvIHRoZSBBY2VyIFBJQ0EtNjEKKyAqIGNoaXBzZXQgd2hpY2ggZG9lcyBub3QgcHJvdmlkZSB0aGVzZSBETUEgY2hhbm5lbHMuCisgKi8KKyNkZWZpbmUgSkFaWl9TQ1NJX0RNQSAgICAgICAgICAgMCAgICAgICAgICAgICAgLyogU0NTSSAqLworI2RlZmluZSBKQVpaX0ZMT1BQWV9ETUEgICAgICAgICAxICAgICAgICAgICAgICAvKiBGTE9QUFkgKi8KKyNkZWZpbmUgSkFaWl9BVURJT0xfRE1BICAgICAgICAgMiAgICAgICAgICAgICAgLyogQVVESU8gTCAqLworI2RlZmluZSBKQVpaX0FVRElPUl9ETUEgICAgICAgICAzICAgICAgICAgICAgICAvKiBBVURJTyBSICovCisKKy8qCisgKiBKQVpaIFI0MDMwIE1DVF9BRFIgY2hpcCAoRE1BIGNvbnRyb2xsZXIpCisgKiBOb3RlOiBWaXJ0dWFsIEFkZHJlc3NlcyAhCisgKi8KKyNkZWZpbmUgSkFaWl9SNDAzMF9DT05GSUcJMHhFMDAwMDAwMAkvKiBSNDAzMCBjb25maWcgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgSkFaWl9SNDAzMF9SRVZJU0lPTiAgICAgMHhFMDAwMDAwOAkvKiBzYW1lIGFzIFBJQ0FfQVNJQ19SRVZJU0lPTiAqLworI2RlZmluZSBKQVpaX1I0MDMwX0lOVl9BRERSCTB4RTAwMDAwMTAJLyogSW52YWxpZCBBZGRyZXNzIHJlZ2lzdGVyICovCisKKyNkZWZpbmUgSkFaWl9SNDAzMF9UUlNUQkxfQkFTRSAgMHhFMDAwMDAxOAkvKiBUcmFuc2xhdGlvbiBUYWJsZSBCYXNlICovCisjZGVmaW5lIEpBWlpfUjQwMzBfVFJTVEJMX0xJTSAgIDB4RTAwMDAwMjAJLyogVHJhbnNsYXRpb24gVGFibGUgTGltaXQgKi8KKyNkZWZpbmUgSkFaWl9SNDAzMF9UUlNUQkxfSU5WICAgMHhFMDAwMDAyOAkvKiBUcmFuc2xhdGlvbiBUYWJsZSBJbnZhbGlkYXRlICovCisKKyNkZWZpbmUgSkFaWl9SNDAzMF9DQUNIRV9NVE5DICAgMHhFMDAwMDAzMAkvKiBDYWNoZSBNYWludGVuYW5jZSAqLworI2RlZmluZSBKQVpaX1I0MDMwX1JfRkFJTF9BRERSICAweEUwMDAwMDM4CS8qIFJlbW90ZSBGYWlsZWQgQWRkcmVzcyAqLworI2RlZmluZSBKQVpaX1I0MDMwX01fRkFJTF9BRERSICAweEUwMDAwMDQwCS8qIE1lbW9yeSBGYWlsZWQgQWRkcmVzcyAqLworCisjZGVmaW5lIEpBWlpfUjQwMzBfQ0FDSEVfUFRBRyAgIDB4RTAwMDAwNDgJLyogSS9PIENhY2hlIFBoeXNpY2FsIFRhZyAqLworI2RlZmluZSBKQVpaX1I0MDMwX0NBQ0hFX0xUQUcgICAweEUwMDAwMDUwCS8qIEkvTyBDYWNoZSBMb2dpY2FsIFRhZyAqLworI2RlZmluZSBKQVpaX1I0MDMwX0NBQ0hFX0JNQVNLICAweEUwMDAwMDU4CS8qIEkvTyBDYWNoZSBCeXRlIE1hc2sgKi8KKyNkZWZpbmUgSkFaWl9SNDAzMF9DQUNIRV9CV0lOICAgMHhFMDAwMDA2MAkvKiBJL08gQ2FjaGUgQnVmZmVyIFdpbmRvdyAqLworCisvKgorICogUmVtb3RlIFNwZWVkIFJlZ2lzdGVycy4KKyAqCisgKiAgMDogZnJlZSwgICAgICAxOiBFdGhlcm5ldCwgIDI6IFNDU0ksICAgICAgMzogRmxvcHB5LAorICogIDQ6IFJUQywgICAgICAgNTogS2IuL01vdXNlICA2OiBzZXJpYWwgMSwgIDc6IHNlcmlhbCAyLAorICogIDg6IHBhcmFsbGVsLCAgOTogTlZSQU0sICAgIDEwOiBDUFUsICAgICAgMTE6IFBST00sCisgKiAxMjogcmVzZXJ2ZWQsIDEzOiBmcmVlLCAgICAgMTQ6IDdzZWcgTEVELCAxNTogPz8/CisgKi8KKyNkZWZpbmUgSkFaWl9SNDAzMF9SRU1fU1BFRUQJMHhFMDAwMDA3MAkvKiAxNiBSZW1vdGUgU3BlZWQgUmVnaXN0ZXJzICovCisJCQkJCQkvKiAweEUwMDAwMDcwLDc4LDgwLi4uIDB4RTAwMDAwRTggKi8KKyNkZWZpbmUgSkFaWl9SNDAzMF9JUlFfRU5BQkxFICAgMHhFMDAwMDBFOAkvKiBJbnRlcm5hbCBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIEpBWlpfUjQwMzBfSU5WQUxfQUREUiAgIDB4RTAwMDAwMTAJLyogSW52YWxpZCBhZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lIEpBWlpfUjQwMzBfSVJRX1NPVVJDRSAgIDB4RTAwMDAyMDAJLyogSW50ZXJydXB0IFNvdXJjZSBSZWdpc3RlciAqLworI2RlZmluZSBKQVpaX1I0MDMwX0kzODZfRVJST1IgICAweEUwMDAwMjA4CS8qIGkzODYvRUlTQSBCdXMgRXJyb3IgKi8KKworLyoKKyAqIFZpcnR1YWwgKEUpSVNBIGNvbnRyb2xsZXIgYWRkcmVzcworICovCisjZGVmaW5lIEpBWlpfRUlTQV9JUlFfQUNLCTB4RTAwMDAyMzgJLyogRUlTQSBpbnRlcnJ1cHQgYWNrbm93bGVkZ2UgKi8KKworLyoKKyAqIEFjY2VzcyB0aGUgUjQwMzAgRE1BIGFuZCBJL08gQ29udHJvbGxlcgorICovCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCitzdGF0aWMgaW5saW5lIHZvaWQgcjQwMzBfZGVsYXkodm9pZCkKK3sKK19fYXNtX18gX192b2xhdGlsZV9fKAorCSIuc2V0XHRub3Jlb3JkZXJcblx0IgorCSJub3Bcblx0IgorCSJub3Bcblx0IgorCSJub3Bcblx0IgorCSJub3Bcblx0IgorCSIuc2V0XHRyZW9yZGVyIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgcjQwMzBfcmVhZF9yZWcxNih1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJdW5zaWduZWQgc2hvcnQgcmV0ID0gKigodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilhZGRyKTsKKwlyNDAzMF9kZWxheSgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHI0MDMwX3JlYWRfcmVnMzIodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXVuc2lnbmVkIGludCByZXQgPSAqKCh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKilhZGRyKTsKKwlyNDAzMF9kZWxheSgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByNDAzMF93cml0ZV9yZWcxNih1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIHZhbCkKK3sKKwkqKCh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKWFkZHIpID0gdmFsOworCXI0MDMwX2RlbGF5KCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByNDAzMF93cml0ZV9yZWczMih1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIHZhbCkKK3sKKwkqKCh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKilhZGRyKSA9IHZhbDsKKwlyNDAzMF9kZWxheSgpOworfQorCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisjZGVmaW5lIEpBWlpfRkRDX0JBU0UJMHhlMDAwMzAwMAorI2RlZmluZSBKQVpaX1JUQ19CQVNFCTB4ZTAwMDQwMDAKKyNkZWZpbmUgSkFaWl9QT1JUX0JBU0UJMHhlMjAwMDAwMAorCisjZGVmaW5lIEpBWlpfRUlTQV9CQVNFCTB4ZTMwMDAwMDAKKworI2VuZGlmIC8qIF9fQVNNX0pBWlpfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9qYXp6ZG1hLmggYi9pbmNsdWRlL2FzbS1taXBzL2phenpkbWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTIwNWI3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9qYXp6ZG1hLmgKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIEhlbHBmaWxlIGZvciBqYXp6ZG1hLmMgLS0gTWlwcyBKYXp6IFI0MDMwIERNQSBjb250cm9sbGVyIHN1cHBvcnQKKyAqLworI2lmbmRlZiBfQVNNX0pBWlpETUFfSAorI2RlZmluZSBfQVNNX0pBWlpETUFfSAorCisvKgorICogUHJvdG90eXBlcyBhbmQgbWFjcm9zCisgKi8KK2V4dGVybiB2b2lkIHZkbWFfaW5pdCh2b2lkKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHZkbWFfYWxsb2ModW5zaWduZWQgbG9uZyBwYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKTsKK2V4dGVybiBpbnQgdmRtYV9mcmVlKHVuc2lnbmVkIGxvbmcgbGFkZHIpOworZXh0ZXJuIGludCB2ZG1hX3JlbWFwKHVuc2lnbmVkIGxvbmcgbGFkZHIsIHVuc2lnbmVkIGxvbmcgcGFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBzaXplKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHZkbWFfcGh5czJsb2codW5zaWduZWQgbG9uZyBwYWRkcik7CitleHRlcm4gdW5zaWduZWQgbG9uZyB2ZG1hX2xvZzJwaHlzKHVuc2lnbmVkIGxvbmcgbGFkZHIpOworZXh0ZXJuIHZvaWQgdmRtYV9zdGF0cyh2b2lkKTsJCS8qIGZvciBkZWJ1Z2dpbmcgb25seSAqLworCitleHRlcm4gdm9pZCB2ZG1hX2VuYWJsZShpbnQgY2hhbm5lbCk7CitleHRlcm4gdm9pZCB2ZG1hX2Rpc2FibGUoaW50IGNoYW5uZWwpOworZXh0ZXJuIHZvaWQgdmRtYV9zZXRfbW9kZShpbnQgY2hhbm5lbCwgaW50IG1vZGUpOworZXh0ZXJuIHZvaWQgdmRtYV9zZXRfYWRkcihpbnQgY2hhbm5lbCwgbG9uZyBhZGRyKTsKK2V4dGVybiB2b2lkIHZkbWFfc2V0X2NvdW50KGludCBjaGFubmVsLCBpbnQgY291bnQpOworZXh0ZXJuIGludCB2ZG1hX2dldF9yZXNpZHVlKGludCBjaGFubmVsKTsKK2V4dGVybiBpbnQgdmRtYV9nZXRfZW5hYmxlKGludCBjaGFubmVsKTsKKworLyoKKyAqIHNvbWUgZGVmaW5pdGlvbnMgdXNlZCBieSB0aGUgZHJpdmVyIGZ1bmN0aW9ucworICovCisjZGVmaW5lIFZETUFfUEFHRVNJWkUJCTQwOTYKKyNkZWZpbmUgVkRNQV9QR1RCTF9FTlRSSUVTCTQwOTYKKyNkZWZpbmUgVkRNQV9QR1RCTF9TSVpFCQkoc2l6ZW9mKFZETUFfUEdUQkxfRU5UUlkpICogVkRNQV9QR1RCTF9FTlRSSUVTKQorI2RlZmluZSBWRE1BX1BBR0VfRU1QVFkJCTB4ZmYwMDAwMDAKKworLyoKKyAqIE1hY3JvcyB0byBnZXQgcGFnZSBuby4gYW5kIG9mZnNldCBvZiBhIGdpdmVuIGFkZHJlc3MKKyAqIE5vdGUgdGhhdCBWRE1BX1BBR0UoKSB3b3JrcyBmb3IgcGh5c2ljYWwgYWRkcmVzc2VzIG9ubHkKKyAqLworI2RlZmluZSBWRE1BX1BBR0UoYSkgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkoYSkgPj4gMTIpCisjZGVmaW5lIFZETUFfT0ZGU0VUKGEpICAgICAgICAgICgodW5zaWduZWQgaW50KShhKSAmIChWRE1BX1BBR0VTSVpFLTEpKQorCisvKgorICogZXJyb3IgY29kZSByZXR1cm5lZCBieSB2ZG1hX2FsbG9jKCkKKyAqIChTZWUgYWxzbyBhcmNoL21pcHMva2VybmVsL2phenpkbWEuYykKKyAqLworI2RlZmluZSBWRE1BX0VSUk9SICAgICAgICAgICAgICAweGZmZmZmZmZmCisKKy8qCisgKiBWRE1BIHBhZ2V0YWJsZSBlbnRyeSBkZXNjcmlwdGlvbgorICovCit0eXBlZGVmIHZvbGF0aWxlIHN0cnVjdCBWRE1BX1BHVEJMX0VOVFJZIHsKKwl1bnNpZ25lZCBpbnQgZnJhbWU7CQkvKiBwaHlzaWNhbCBmcmFtZSBuby4gKi8KKwl1bnNpZ25lZCBpbnQgb3duZXI7CQkvKiBvd25lciBvZiB0aGlzIGVudHJ5ICgwPWZyZWUpICovCit9IFZETUFfUEdUQkxfRU5UUlk7CisKKworLyoKKyAqIERNQSBjaGFubmVsIGNvbnRyb2wgcmVnaXN0ZXJzCisgKiBpbiB0aGUgUjQwMzAgTUNUX0FEUiBjaGlwCisgKi8KKyNkZWZpbmUgSkFaWl9SNDAzMF9DSE5MX01PREUJMHhFMDAwMDEwMAkvKiA4IERNQSBDaGFubmVsIE1vZGUgUmVnaXN0ZXJzLCAqLworCQkJCQkJLyogMHhFMDAwMDEwMCwxMjAsMTQwLi4uICovCisjZGVmaW5lIEpBWlpfUjQwMzBfQ0hOTF9FTkFCTEUgIDB4RTAwMDAxMDgJLyogOCBETUEgQ2hhbm5lbCBFbmFibGUgUmVncywgKi8KKwkJCQkJCS8qIDB4RTAwMDAxMDgsMTI4LDE0OC4uLiAqLworI2RlZmluZSBKQVpaX1I0MDMwX0NITkxfQ09VTlQgICAweEUwMDAwMTEwCS8qIDggRE1BIENoYW5uZWwgQnl0ZSBDbnQgUmVncywgKi8KKwkJCQkJCS8qIDB4RTAwMDAxMTAsMTMwLDE1MC4uLiAqLworI2RlZmluZSBKQVpaX1I0MDMwX0NITkxfQUREUgkweEUwMDAwMTE4CS8qIDggRE1BIENoYW5uZWwgQWRkcmVzcyBSZWdzLCAqLworCQkJCQkJLyogMHhFMDAwMDExOCwxMzgsMTU4Li4uICovCisKKy8qIGNoYW5uZWwgZW5hYmxlIHJlZ2lzdGVyIGJpdHMgKi8KKworI2RlZmluZSBSNDAzMF9DSE5MX0VOQUJMRSAgICAgICAgKDE8PDApCisjZGVmaW5lIFI0MDMwX0NITkxfV1JJVEUgICAgICAgICAoMTw8MSkKKyNkZWZpbmUgUjQwMzBfVENfSU5UUiAgICAgICAgICAgICgxPDw4KQorI2RlZmluZSBSNDAzMF9NRU1fSU5UUiAgICAgICAgICAgKDE8PDkpCisjZGVmaW5lIFI0MDMwX0FERFJfSU5UUiAgICAgICAgICAoMTw8MTApCisKKy8qCisgKiBDaGFubmVsIG1vZGUgcmVnaXN0ZXIgYml0cworICovCisjZGVmaW5lIFI0MDMwX01PREVfQVRJTUVfNDAgICAgICAoMCkgLyogZGV2aWNlIGFjY2VzcyB0aW1lIG9uIHJlbW90ZSBidXMgKi8KKyNkZWZpbmUgUjQwMzBfTU9ERV9BVElNRV84MCAgICAgICgxKQorI2RlZmluZSBSNDAzMF9NT0RFX0FUSU1FXzEyMCAgICAgKDIpCisjZGVmaW5lIFI0MDMwX01PREVfQVRJTUVfMTYwICAgICAoMykKKyNkZWZpbmUgUjQwMzBfTU9ERV9BVElNRV8yMDAgICAgICg0KQorI2RlZmluZSBSNDAzMF9NT0RFX0FUSU1FXzI0MCAgICAgKDUpCisjZGVmaW5lIFI0MDMwX01PREVfQVRJTUVfMjgwICAgICAoNikKKyNkZWZpbmUgUjQwMzBfTU9ERV9BVElNRV8zMjAgICAgICg3KQorI2RlZmluZSBSNDAzMF9NT0RFX1dJRFRIXzggICAgICAgKDE8PDMpCS8qIGRldmljZSBkYXRhIGJ1cyB3aWR0aCAqLworI2RlZmluZSBSNDAzMF9NT0RFX1dJRFRIXzE2ICAgICAgKDI8PDMpCisjZGVmaW5lIFI0MDMwX01PREVfV0lEVEhfMzIgICAgICAoMzw8MykKKyNkZWZpbmUgUjQwMzBfTU9ERV9JTlRSX0VOICAgICAgICgxPDw1KQorI2RlZmluZSBSNDAzMF9NT0RFX0JVUlNUICAgICAgICAgKDE8PDYpCS8qIFJldi4gMiBvbmx5ICovCisjZGVmaW5lIFI0MDMwX01PREVfRkFTVF9BQ0sgICAgICAoMTw8NykJLyogUmV2LiAyIG9ubHkgKi8KKworI2VuZGlmIC8qIF9BU01fSkFaWkRNQV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2ptcjM5MjcvaXJxLmggYi9pbmNsdWRlL2FzbS1taXBzL2ptcjM5MjcvaXJxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBjMzI1YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvam1yMzkyNy9pcnEuaApAQCAtMCwwICsxLDYyIEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLW1pcHMvdHgzOTI3L2lycS5oCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAxIFRvc2hpYmEgQ29ycG9yYXRpb24KKyAqLworI2lmbmRlZiBfX0FTTV9UWDM5MjdfSVJRX0gKKyNkZWZpbmUgX19BU01fVFgzOTI3X0lSUV9ICisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisKK3N0cnVjdCB0Yl9pcnFfc3BhY2UgeworCXN0cnVjdCB0Yl9pcnFfc3BhY2UqIG5leHQ7CisJaW50IHN0YXJ0X2lycW5vOworCWludCBucl9pcnFzOworCXZvaWQgKCptYXNrX2Z1bmMpKGludCBpcnFfbnIsIGludCBzcGFjZV9pZCk7CisJdm9pZCAoKnVubWFza19mdW5jKShpbnQgaXJxX25vLCBpbnQgc3BhY2VfaWQpOworCWNvbnN0IGNoYXIgKm5hbWU7CisJaW50IHNwYWNlX2lkOworCWludCBjYW5fc2hhcmU7Cit9OworZXh0ZXJuIHN0cnVjdCB0Yl9pcnFfc3BhY2UqIHRiX2lycV9zcGFjZXM7CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgYWRkX3RiX2lycV9zcGFjZShzdHJ1Y3QgdGJfaXJxX3NwYWNlKiBzcCkKK3sKKwlzcC0+bmV4dCA9IHRiX2lycV9zcGFjZXM7CisJdGJfaXJxX3NwYWNlcyA9IHNwOworfQorCisKK3N0cnVjdCBwdF9yZWdzOworZXh0ZXJuIHZvaWQKK3Rvc2hpYmFib2FyZHNfc3B1cmlvdXMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBpcnEpOworZXh0ZXJuIHZvaWQKK3Rvc2hpYmFib2FyZHNfaXJxZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBpcnEpOworCitleHRlcm4gc3RydWN0IGlycWFjdGlvbiAqCit0b3NoaWJhYm9hcmRzX2dldF9pcnFfYWN0aW9uKGludCBpcnEpOworZXh0ZXJuIGludAordG9zaGliYWJvYXJkc19zZXR1cF9pcnEoaW50IGlycSwgc3RydWN0IGlycWFjdGlvbiAqIG5ldyk7CisKKworI2lmZGVmIENPTkZJR19UWF9CUkFOQ0hfTElLRUxZX0JVR19XT1JLQVJPVU5ECitleHRlcm4gdm9pZCB0eF9icmFuY2hfbGlrZWx5X2J1Z19maXh1cChzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisjZW5kaWYKKworZXh0ZXJuIGludCAoKnRvc2hpYmFib2FyZHNfZ2VuX2lhY2spKHZvaWQpOworCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisjZGVmaW5lIE5SX0lTQV9JUlFTIDE2CisjZGVmaW5lIFRCX0lSUV9JU19JU0EoaXJxKQlcCisJKDAgPD0gKGlycSkgJiYgKGlycSkgPCBOUl9JU0FfSVJRUykKKyNkZWZpbmUgVEJfSVJRX1RPX0lTQV9JUlEoaXJxKQkoaXJxKQorCisjZW5kaWYgLyogX19BU01fVFgzOTI3X0lSUV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2ptcjM5Mjcvam1yMzkyNy5oIGIvaW5jbHVkZS9hc20tbWlwcy9qbXIzOTI3L2ptcjM5MjcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmRmMzE3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9qbXIzOTI3L2ptcjM5MjcuaApAQCAtMCwwICsxLDMyNSBAQAorLyoKKyAqIERlZmluZXMgZm9yIHRoZSBUSlNZUyBKTVItVFgzOTI3L0pNSS0zOTI3SU8yL0pNWS0xMzk0SUYuCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwLTIwMDEgVG9zaGliYSBDb3Jwb3JhdGlvbgorICovCisjaWZuZGVmIF9fQVNNX1RYMzkyN19KTVIzOTI3X0gKKyNkZWZpbmUgX19BU01fVFgzOTI3X0pNUjM5MjdfSAorCisjaW5jbHVkZSA8YXNtL2ptcjM5MjcvdHgzOTI3Lmg+CisjaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgorI2luY2x1ZGUgPGFzbS9qbXIzOTI3L2lycS5oPgorI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjZW5kaWYKKworLyogQ1MgKi8KKyNkZWZpbmUgSk1SMzkyN19ST01DRTAJMHgxZmMwMDAwMAkvKiA0TSAqLworI2RlZmluZSBKTVIzOTI3X1JPTUNFMQkweDFlMDAwMDAwCS8qIDRNICovCisjZGVmaW5lIEpNUjM5MjdfUk9NQ0UyCTB4MTQwMDAwMDAJLyogMTZNICovCisjZGVmaW5lIEpNUjM5MjdfUk9NQ0UzCTB4MTAwMDAwMDAJLyogNjRNICovCisjZGVmaW5lIEpNUjM5MjdfUk9NQ0U1CTB4MWQwMDAwMDAJLyogNE0gKi8KKyNkZWZpbmUgSk1SMzkyN19TRENTMAkweDAwMDAwMDAwCS8qIDMyTSAqLworI2RlZmluZSBKTVIzOTI3X1NEQ1MxCTB4MDIwMDAwMDAJLyogMzJNICovCisvKiBQQ0kgRGlyZWN0IE1hcHBpbmdzICovCisKKyNkZWZpbmUgSk1SMzkyN19QQ0lNRU0JMHgwODAwMDAwMAorI2RlZmluZSBKTVIzOTI3X1BDSU1FTV9TSVpFCTB4MDgwMDAwMDAJLyogMTI4TSAqLworI2RlZmluZSBKTVIzOTI3X1BDSUlPCTB4MTUwMDAwMDAKKyNkZWZpbmUgSk1SMzkyN19QQ0lJT19TSVpFCTB4MDEwMDAwMDAJLyogMTZNICovCisKKyNkZWZpbmUgSk1SMzkyN19TRFJBTV9TSVpFCTB4MDIwMDAwMDAJLyogMzJNICovCisjZGVmaW5lIEpNUjM5MjdfUE9SVF9CQVNFCUtTRUcxCisKKy8qIHNlbGVjdCBpbmRpcmVjdCBpbml0aWF0b3IgYWNjZXNzIHBlciBlcnJhdGEgKi8KKyNkZWZpbmUgSk1SMzkyN19JTklUX0lORElSRUNUX1BDSQorI2RlZmluZSBQQ0lfSVNUQVRfSURJQ0MgICAgICAgICAgIDB4MTAwMAorI2RlZmluZSBQQ0lfSVBDSUJFX0lCRV9MT05HICAgICAgIDAKKyNkZWZpbmUgUENJX0lQQ0lCRV9JQ01EX0lPUkVBRCAgICAyCisjZGVmaW5lIFBDSV9JUENJQkVfSUNNRF9JT1dSSVRFICAgMworI2RlZmluZSBQQ0lfSVBDSUJFX0lDTURfTUVNUkVBRCAgIDYKKyNkZWZpbmUgUENJX0lQQ0lCRV9JQ01EX01FTVdSSVRFICA3CisjZGVmaW5lIFBDSV9JUENJQkVfSUNNRF9TSElGVCAgICAgNAorCisvKiBBZGRyZXNzIG1hcCAodmlydHVhbCBhZGRyZXNzKSAqLworI2RlZmluZSBKTVIzOTI3X1JPTTBfQkFTRQkoS1NFRzEgKyBKTVIzOTI3X1JPTUNFMCkKKyNkZWZpbmUgSk1SMzkyN19ST00xX0JBU0UJKEtTRUcxICsgSk1SMzkyN19ST01DRTEpCisjZGVmaW5lIEpNUjM5MjdfSU9DX0JBU0UJKEtTRUcxICsgSk1SMzkyN19ST01DRTIpCisjZGVmaW5lIEpNUjM5MjdfSU9CX0JBU0UJKEtTRUcxICsgSk1SMzkyN19ST01DRTMpCisjZGVmaW5lIEpNUjM5MjdfSVNBTUVNX0JBU0UJKEpNUjM5MjdfSU9CX0JBU0UpCisjZGVmaW5lIEpNUjM5MjdfSVNBSU9fQkFTRQkoSk1SMzkyN19JT0JfQkFTRSArIDB4MDEwMDAwMDApCisjZGVmaW5lIEpNUjM5MjdfSVNBQ19CQVNFCShKTVIzOTI3X0lPQl9CQVNFICsgMHgwMjAwMDAwMCkKKyNkZWZpbmUgSk1SMzkyN19MQ0RWR0FfUkVHX0JBU0UJKEpNUjM5MjdfSU9CX0JBU0UgKyAweDAzMDAwMDAwKQorI2RlZmluZSBKTVIzOTI3X0xDRFZHQV9NRU1fQkFTRQkoSk1SMzkyN19JT0JfQkFTRSArIDB4MDM4MDAwMDApCisjZGVmaW5lIEpNUjM5MjdfSk1ZMTM5NF9CQVNFCShLU0VHMSArIEpNUjM5MjdfUk9NQ0U1KQorI2RlZmluZSBKTVIzOTI3X1BSRU1JRVIzX0JBU0UJKEpNUjM5MjdfSk1ZMTM5NF9CQVNFICsgMHgwMDEwMDAwMCkKKyNkZWZpbmUgSk1SMzkyN19QQ0lNRU1fQkFTRQkoS1NFRzEgKyBKTVIzOTI3X1BDSU1FTSkKKyNkZWZpbmUgSk1SMzkyN19QQ0lJT19CQVNFCShLU0VHMSArIEpNUjM5MjdfUENJSU8pCisKKyNkZWZpbmUgSk1SMzkyN19JT0NfUkVWX0FERFIJKEpNUjM5MjdfSU9DX0JBU0UgKyAweDAwMDAwMDAwKQorI2RlZmluZSBKTVIzOTI3X0lPQ19OVlJBTUJfQUREUgkoSk1SMzkyN19JT0NfQkFTRSArIDB4MDAwMTAwMDApCisjZGVmaW5lIEpNUjM5MjdfSU9DX0xFRF9BRERSCShKTVIzOTI3X0lPQ19CQVNFICsgMHgwMDAyMDAwMCkKKyNkZWZpbmUgSk1SMzkyN19JT0NfRElQU1dfQUREUgkoSk1SMzkyN19JT0NfQkFTRSArIDB4MDAwMzAwMDApCisjZGVmaW5lIEpNUjM5MjdfSU9DX0JSRVZfQUREUgkoSk1SMzkyN19JT0NfQkFTRSArIDB4MDAwNDAwMDApCisjZGVmaW5lIEpNUjM5MjdfSU9DX0RUUl9BRERSCShKTVIzOTI3X0lPQ19CQVNFICsgMHgwMDA1MDAwMCkKKyNkZWZpbmUgSk1SMzkyN19JT0NfSU5UUzFfQUREUgkoSk1SMzkyN19JT0NfQkFTRSArIDB4MDAwODAwMDApCisjZGVmaW5lIEpNUjM5MjdfSU9DX0lOVFMyX0FERFIJKEpNUjM5MjdfSU9DX0JBU0UgKyAweDAwMDkwMDAwKQorI2RlZmluZSBKTVIzOTI3X0lPQ19JTlRNX0FERFIJKEpNUjM5MjdfSU9DX0JBU0UgKyAweDAwMGEwMDAwKQorI2RlZmluZSBKTVIzOTI3X0lPQ19JTlRQX0FERFIJKEpNUjM5MjdfSU9DX0JBU0UgKyAweDAwMGIwMDAwKQorI2RlZmluZSBKTVIzOTI3X0lPQ19SRVNFVF9BRERSCShKTVIzOTI3X0lPQ19CQVNFICsgMHgwMDBmMDAwMCkKKworI2RlZmluZSBKTVIzOTI3X0lTQUNfUkVWX0FERFIJKEpNUjM5MjdfSVNBQ19CQVNFICsgMHgwMDAwMDAwMCkKKyNkZWZpbmUgSk1SMzkyN19JU0FDX0VJTlRTX0FERFIJKEpNUjM5MjdfSVNBQ19CQVNFICsgMHgwMDIwMDAwMCkKKyNkZWZpbmUgSk1SMzkyN19JU0FDX0VJTlRNX0FERFIJKEpNUjM5MjdfSVNBQ19CQVNFICsgMHgwMDMwMDAwMCkKKyNkZWZpbmUgSk1SMzkyN19JU0FDX05NSV9BRERSCShKTVIzOTI3X0lTQUNfQkFTRSArIDB4MDA0MDAwMDApCisjZGVmaW5lIEpNUjM5MjdfSVNBQ19MRURfQUREUgkoSk1SMzkyN19JU0FDX0JBU0UgKyAweDAwNTAwMDAwKQorI2RlZmluZSBKTVIzOTI3X0lTQUNfSU5UUF9BRERSCShKTVIzOTI3X0lTQUNfQkFTRSArIDB4MDA4MDAwMDApCisjZGVmaW5lIEpNUjM5MjdfSVNBQ19JTlRTMV9BRERSCShKTVIzOTI3X0lTQUNfQkFTRSArIDB4MDA5MDAwMDApCisjZGVmaW5lIEpNUjM5MjdfSVNBQ19JTlRTMl9BRERSCShKTVIzOTI3X0lTQUNfQkFTRSArIDB4MDBhMDAwMDApCisjZGVmaW5lIEpNUjM5MjdfSVNBQ19JTlRNX0FERFIJKEpNUjM5MjdfSVNBQ19CQVNFICsgMHgwMGIwMDAwMCkKKworLyogRmxhc2ggUk9NICovCisjZGVmaW5lIEpNUjM5MjdfRkxBU0hfQkFTRQkoSk1SMzkyN19ST00wX0JBU0UpCisjZGVmaW5lIEpNUjM5MjdfRkxBU0hfU0laRQkweDAwNDAwMDAwCisKKy8qIGJpdHMgZm9yIElPQ19SRVYvSU9DX0JSRVYvSVNBQ19SRVYgKGhpZ2ggYnl0ZSkgKi8KKyNkZWZpbmUgSk1SMzkyN19JRFRfTUFTSwkweGZjCisjZGVmaW5lIEpNUjM5MjdfUkVWX01BU0sJMHgwMworI2RlZmluZSBKTVIzOTI3X0lPQ19JRFQJCTB4ZTAKKyNkZWZpbmUgSk1SMzkyN19JU0FDX0lEVAkweDIwCisKKy8qIGJpdHMgZm9yIElPQ19JTlRTMS9JT0NfSU5UUzIvSU9DX0lOVE0vSU9DX0lOVFAgKGhpZ2ggYnl0ZSkgKi8KKyNkZWZpbmUgSk1SMzkyN19JT0NfSU5UQl9QQ0lBCTAKKyNkZWZpbmUgSk1SMzkyN19JT0NfSU5UQl9QQ0lCCTEKKyNkZWZpbmUgSk1SMzkyN19JT0NfSU5UQl9QQ0lDCTIKKyNkZWZpbmUgSk1SMzkyN19JT0NfSU5UQl9QQ0lECTMKKyNkZWZpbmUgSk1SMzkyN19JT0NfSU5UQl9NT0RFTQk0CisjZGVmaW5lIEpNUjM5MjdfSU9DX0lOVEJfSU5UNgk1CisjZGVmaW5lIEpNUjM5MjdfSU9DX0lOVEJfSU5UNwk2CisjZGVmaW5lIEpNUjM5MjdfSU9DX0lOVEJfU09GVAk3CisjZGVmaW5lIEpNUjM5MjdfSU9DX0lOVEZfUENJQQkoMSA8PCBKTVIzOTI3X0lPQ19JTlRGX1BDSUEpCisjZGVmaW5lIEpNUjM5MjdfSU9DX0lOVEZfUENJQgkoMSA8PCBKTVIzOTI3X0lPQ19JTlRCX1BDSUIpCisjZGVmaW5lIEpNUjM5MjdfSU9DX0lOVEZfUENJQwkoMSA8PCBKTVIzOTI3X0lPQ19JTlRCX1BDSUMpCisjZGVmaW5lIEpNUjM5MjdfSU9DX0lOVEZfUENJRAkoMSA8PCBKTVIzOTI3X0lPQ19JTlRCX1BDSUQpCisjZGVmaW5lIEpNUjM5MjdfSU9DX0lOVEZfTU9ERU0JKDEgPDwgSk1SMzkyN19JT0NfSU5UQl9NT0RFTSkKKyNkZWZpbmUgSk1SMzkyN19JT0NfSU5URl9JTlQ2CSgxIDw8IEpNUjM5MjdfSU9DX0lOVEJfSU5UNikKKyNkZWZpbmUgSk1SMzkyN19JT0NfSU5URl9JTlQ3CSgxIDw8IEpNUjM5MjdfSU9DX0lOVEJfSU5UNykKKyNkZWZpbmUgSk1SMzkyN19JT0NfSU5URl9TT0ZUCSgxIDw8IEpNUjM5MjdfSU9DX0lOVEJfU09GVCkKKworLyogYml0cyBmb3IgSU9DX1JFU0VUIChoaWdoIGJ5dGUpICovCisjZGVmaW5lIEpNUjM5MjdfSU9DX1JFU0VUX0NQVQkxCisjZGVmaW5lIEpNUjM5MjdfSU9DX1JFU0VUX1BDSQkyCisKKy8qIGJpdHMgZm9yIElTQUNfRUlOVFMvSVNBQ19FSU5UTSAoaGlnaCBieXRlKSAqLworI2RlZmluZSBKTVIzOTI3X0lTQUNfRUlOVEJfSU9DSEsJMgorI2RlZmluZSBKTVIzOTI3X0lTQUNfRUlOVEJfQldUSAk0CisjZGVmaW5lIEpNUjM5MjdfSVNBQ19FSU5URl9JT0NISwkoMSA8PCBKTVIzOTI3X0lTQUNfRUlOVEJfSU9DSEspCisjZGVmaW5lIEpNUjM5MjdfSVNBQ19FSU5URl9CV1RICSgxIDw8IEpNUjM5MjdfSVNBQ19FSU5UQl9CV1RIKQorCisvKiBiaXRzIGZvciBJU0FDX0xFRCAoaGlnaCBieXRlKSAqLworI2RlZmluZSBKTVIzOTI3X0lTQUNfTEVEX0lTQUxFRAkweDAxCisjZGVmaW5lIEpNUjM5MjdfSVNBQ19MRURfVVNSTEVECTB4MDIKKworLyogYml0cyBmb3IgSVNBQ19JTlRTL0lTQUNfSU5UTS9JU0FDX0lOVFAgKGhpZ2ggYnl0ZSkgKi8KKyNkZWZpbmUgSk1SMzkyN19JU0FDX0lOVEJfSVJRNQkwCisjZGVmaW5lIEpNUjM5MjdfSVNBQ19JTlRCX0lSUUtCCTEKKyNkZWZpbmUgSk1SMzkyN19JU0FDX0lOVEJfSVJRTU9VU0UJMgorI2RlZmluZSBKTVIzOTI3X0lTQUNfSU5UQl9JUlE0CTMKKyNkZWZpbmUgSk1SMzkyN19JU0FDX0lOVEJfSVJRMTIJNAorI2RlZmluZSBKTVIzOTI3X0lTQUNfSU5UQl9JUlEzCTUKKyNkZWZpbmUgSk1SMzkyN19JU0FDX0lOVEJfSVJRMTAJNgorI2RlZmluZSBKTVIzOTI3X0lTQUNfSU5UQl9JU0FFUgk3CisjZGVmaW5lIEpNUjM5MjdfSVNBQ19JTlRGX0lSUTUJKDEgPDwgSk1SMzkyN19JU0FDX0lOVEJfSVJRNSkKKyNkZWZpbmUgSk1SMzkyN19JU0FDX0lOVEZfSVJRS0IJKDEgPDwgSk1SMzkyN19JU0FDX0lOVEJfSVJRS0IpCisjZGVmaW5lIEpNUjM5MjdfSVNBQ19JTlRGX0lSUU1PVVNFCSgxIDw8IEpNUjM5MjdfSVNBQ19JTlRCX0lSUU1PVVNFKQorI2RlZmluZSBKTVIzOTI3X0lTQUNfSU5URl9JUlE0CSgxIDw8IEpNUjM5MjdfSVNBQ19JTlRCX0lSUTQpCisjZGVmaW5lIEpNUjM5MjdfSVNBQ19JTlRGX0lSUTEyCSgxIDw8IEpNUjM5MjdfSVNBQ19JTlRCX0lSUTEyKQorI2RlZmluZSBKTVIzOTI3X0lTQUNfSU5URl9JUlEzCSgxIDw8IEpNUjM5MjdfSVNBQ19JTlRCX0lSUTMpCisjZGVmaW5lIEpNUjM5MjdfSVNBQ19JTlRGX0lSUTEwCSgxIDw8IEpNUjM5MjdfSVNBQ19JTlRCX0lSUTEwKQorI2RlZmluZSBKTVIzOTI3X0lTQUNfSU5URl9JU0FFUgkoMSA8PCBKTVIzOTI3X0lTQUNfSU5UQl9JU0FFUikKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworI2lmIDAKKyNkZWZpbmUgam1yMzkyN19pb2NfcmVnX291dChkLCBhKQkoKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoYSkpID0gKGQpIDw8IDgpCisjZGVmaW5lIGptcjM5MjdfaW9jX3JlZ19pbihhKQkJKCgoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKShhKSkgPj4gOCkgJiAweGZmKQorI2Vsc2UKKyNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKKyNkZWZpbmUgam1yMzkyN19pb2NfcmVnX291dChkLCBhKQkoKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKShhKSkgPSAoZCkpCisjZGVmaW5lIGptcjM5MjdfaW9jX3JlZ19pbihhKQkJKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKShhKSkKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorI2RlZmluZSBqbXIzOTI3X2lvY19yZWdfb3V0KGQsIGEpCSgoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKChhKV4xKSkgPSAoZCkpCisjZGVmaW5lIGptcjM5MjdfaW9jX3JlZ19pbihhKQkJKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgoYSleMSkpCisjZWxzZQorI2Vycm9yICJObyBFbmRpYW4iCisjZW5kaWYKKyNlbmRpZgorI2RlZmluZSBqbXIzOTI3X2lzYWNfcmVnX291dChkLCBhKQkoKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKShhKSkgPSAoZCkpCisjZGVmaW5lIGptcjM5MjdfaXNhY19yZWdfaW4oYSkJCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoYSkpCisKK3N0YXRpYyBpbmxpbmUgaW50IGptcjM5MjdfaGF2ZV9pc2FjKHZvaWQpCit7CisJdW5zaWduZWQgY2hhciBpZHQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIHJvbWNyMzsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlyb21jcjMgPSB0eDM5Mjdfcm9tY3B0ci0+Y3JbM107CisJdHgzOTI3X3JvbWNwdHItPmNyWzNdICY9IDB4ZmZmZmVmZmY7CS8qIGRvIG5vdCB3YWl0IGluZmluaXRlbHkgKi8KKwlpZHQgPSBqbXIzOTI3X2lzYWNfcmVnX2luKEpNUjM5MjdfSVNBQ19SRVZfQUREUikgJiBKTVIzOTI3X0lEVF9NQVNLOworCXR4MzkyN19yb21jcHRyLT5jclszXSA9IHJvbWNyMzsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlyZXR1cm4gaWR0ID09IEpNUjM5MjdfSVNBQ19JRFQ7Cit9CisjZGVmaW5lIGptcjM5MjdfaGF2ZV9udnJhbSgpIFwKKwkoKGptcjM5MjdfaW9jX3JlZ19pbihKTVIzOTI3X0lPQ19SRVZfQUREUikgJiBKTVIzOTI3X0lEVF9NQVNLKSA9PSBKTVIzOTI3X0lPQ19JRFQpCisKKy8qIE5WUkFNIG1hY3JvICovCisjZGVmaW5lIGptcjM5MjdfbnZyYW1faW4ob2ZzKSBcCisJam1yMzkyN19pb2NfcmVnX2luKEpNUjM5MjdfSU9DX05WUkFNQl9BRERSICsgKChvZnMpIDw8IDEpKQorI2RlZmluZSBqbXIzOTI3X252cmFtX291dChkLCBvZnMpIFwKKwlqbXIzOTI3X2lvY19yZWdfb3V0KGQsIEpNUjM5MjdfSU9DX05WUkFNQl9BRERSICsgKChvZnMpIDw8IDEpKQorCisvKiBMRUQgbWFjcm8gKi8KKyNkZWZpbmUgam1yMzkyN19sZWRfc2V0KG4vKjAtMTYqLykJam1yMzkyN19pb2NfcmVnX291dCh+KG4pLCBKTVIzOTI3X0lPQ19MRURfQUREUikKKyNkZWZpbmUgam1yMzkyN19pb19sZWRfc2V0KG4vKjAtMyovKQlqbXIzOTI3X2lzYWNfcmVnX291dCgobiksIEpNUjM5MjdfSVNBQ19MRURfQUREUikKKworI2RlZmluZSBqbXIzOTI3X2xlZF9hbmRfc2V0KG4vKjAtMTYqLykJam1yMzkyN19pb2NfcmVnX291dCgofihuKSkgJiBqbXIzOTI3X2lvY19yZWdfaW4oSk1SMzkyN19JT0NfTEVEX0FERFIpLCBKTVIzOTI3X0lPQ19MRURfQUREUikKKworLyogRElQU1c0IG1hY3JvICovCisjZGVmaW5lIGptcjM5MjdfZGlwc3cxKCkJKCh0eDM5MjdfcGlvcHRyLT5kaW4gJiAoMSA8PCAxMSkpID09IDApCisjZGVmaW5lIGptcjM5MjdfZGlwc3cyKCkJKCh0eDM5MjdfcGlvcHRyLT5kaW4gJiAoMSA8PCAxMCkpID09IDApCisjZGVmaW5lIGptcjM5MjdfZGlwc3czKCkJKChqbXIzOTI3X2lvY19yZWdfaW4oSk1SMzkyN19JT0NfRElQU1dfQUREUikgJiAyKSA9PSAwKQorI2RlZmluZSBqbXIzOTI3X2RpcHN3NCgpCSgoam1yMzkyN19pb2NfcmVnX2luKEpNUjM5MjdfSU9DX0RJUFNXX0FERFIpICYgMSkgPT0gMCkKKyNkZWZpbmUgam1yMzkyN19pb19kaXBzdygpCShqbXIzOTI3X2lzYWNfcmVnX2luKEpNUjM5MjdfSVNBQ19MRURfQUREUikgPj4gNCkKKworCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisvKgorICogVUFSVCBkZWZpbmVzIGZvciBzZXJpYWwuaAorICovCisKKy8qIHVzZSBQcmUtc2NhbGVyIFQwICgxLzIpICovCisjZGVmaW5lIEpNUjM5MjdfQkFTRV9CQVVEIChKTVIzOTI3X0lNQ0xLIC8gMiAvIDE2KQorCisjZGVmaW5lIFVBUlQwX0FERFIgICAweGZmZmVmMzAwCisjZGVmaW5lIFVBUlQxX0FERFIgICAweGZmZmVmNDAwCisjZGVmaW5lIFVBUlQwX0lOVCAgICBKTVIzOTI3X0lSUV9JUkNfU0lPMAorI2RlZmluZSBVQVJUMV9JTlQgICAgSk1SMzkyN19JUlFfSVJDX1NJTzEKKyNkZWZpbmUgVUFSVDBfRkxBR1MgIEFTWU5DX0JPT1RfQVVUT0NPTkYKKyNkZWZpbmUgVUFSVDFfRkxBR1MgIDAKKworLyoKKyAqIElSUSBtYXBwaW5ncworICovCisKKy8qIFRoZXNlIGFyZSB0aGUgdmlydHVhbCBJUlEgbnVtYmVycywgd2UgZGl2aWRlIGFsbCBJUlEncyBpbnRvCisgKiAnc3BhY2VzJywgdGhlICdzcGFjZScgZGV0ZXJtaW5lcyB3aGVyZSBhbmQgaG93IHRvIGVuYWJsZS9kaXNhYmxlCisgKiB0aGF0IHBhcnRpY3VsYXIgSVJRIG9uIGFuIEpNUiBtYWNoaW5lLiAgQWRkIG5ldyAnc3BhY2VzJyBhcyBuZXcKKyAqIElSUSBoYXJkd2FyZSBpcyBzdXBwb3J0ZWQuCisgKi8KKyNkZWZpbmUgSk1SMzkyN19OUl9JUlFfSVJDCTE2CS8qIE9uLUNoaXAgSVJDICovCisjZGVmaW5lIEpNUjM5MjdfTlJfSVJRX0lPQwk4CS8qIFBDSS9NT0RFTS9JTlRbNjo3XSAqLworI2RlZmluZSBKTVIzOTI3X05SX0lSUV9JU0FDCTgJLyogSVNBICovCisKKworI2RlZmluZSBKTVIzOTI3X0lSUV9JUkMJTlJfSVNBX0lSUVMKKyNkZWZpbmUgSk1SMzkyN19JUlFfSU9DCShKTVIzOTI3X0lSUV9JUkMgKyBKTVIzOTI3X05SX0lSUV9JUkMpCisjZGVmaW5lIEpNUjM5MjdfSVJRX0lTQUMJKEpNUjM5MjdfSVJRX0lPQyArIEpNUjM5MjdfTlJfSVJRX0lPQykKKyNkZWZpbmUgSk1SMzkyN19JUlFfRU5ECShKTVIzOTI3X0lSUV9JU0FDICsgSk1SMzkyN19OUl9JUlFfSVNBQykKKyNkZWZpbmUgSk1SMzkyN19JUlFfSVNfSVJDKGlycSkJKEpNUjM5MjdfSVJRX0lSQyA8PSAoaXJxKSAmJiAoaXJxKSA8IEpNUjM5MjdfSVJRX0lPQykKKyNkZWZpbmUgSk1SMzkyN19JUlFfSVNfSU9DKGlycSkJCShKTVIzOTI3X0lSUV9JT0MgPD0gKGlycSkgJiYgKGlycSkgPCBKTVIzOTI3X0lSUV9JU0FDKQorI2RlZmluZSBKTVIzOTI3X0lSUV9JU19JU0FDKGlycSkJKEpNUjM5MjdfSVJRX0lTQUMgPD0gKGlycSkgJiYgKGlycSkgPCBKTVIzOTI3X0lSUV9FTkQpCisKKyNkZWZpbmUgSk1SMzkyN19JUlFfSVJDX0lOVDAJKEpNUjM5MjdfSVJRX0lSQyArIFRYMzkyN19JUl9JTlQwKQorI2RlZmluZSBKTVIzOTI3X0lSUV9JUkNfSU5UMQkoSk1SMzkyN19JUlFfSVJDICsgVFgzOTI3X0lSX0lOVDEpCisjZGVmaW5lIEpNUjM5MjdfSVJRX0lSQ19JTlQyCShKTVIzOTI3X0lSUV9JUkMgKyBUWDM5MjdfSVJfSU5UMikKKyNkZWZpbmUgSk1SMzkyN19JUlFfSVJDX0lOVDMJKEpNUjM5MjdfSVJRX0lSQyArIFRYMzkyN19JUl9JTlQzKQorI2RlZmluZSBKTVIzOTI3X0lSUV9JUkNfSU5UNAkoSk1SMzkyN19JUlFfSVJDICsgVFgzOTI3X0lSX0lOVDQpCisjZGVmaW5lIEpNUjM5MjdfSVJRX0lSQ19JTlQ1CShKTVIzOTI3X0lSUV9JUkMgKyBUWDM5MjdfSVJfSU5UNSkKKyNkZWZpbmUgSk1SMzkyN19JUlFfSVJDX1NJTzAJKEpNUjM5MjdfSVJRX0lSQyArIFRYMzkyN19JUl9TSU8wKQorI2RlZmluZSBKTVIzOTI3X0lSUV9JUkNfU0lPMQkoSk1SMzkyN19JUlFfSVJDICsgVFgzOTI3X0lSX1NJTzEpCisjZGVmaW5lIEpNUjM5MjdfSVJRX0lSQ19TSU8oY2gpCShKTVIzOTI3X0lSUV9JUkMgKyBUWDM5MjdfSVJfU0lPKGNoKSkKKyNkZWZpbmUgSk1SMzkyN19JUlFfSVJDX0RNQQkoSk1SMzkyN19JUlFfSVJDICsgVFgzOTI3X0lSX0RNQSkKKyNkZWZpbmUgSk1SMzkyN19JUlFfSVJDX1BJTwkoSk1SMzkyN19JUlFfSVJDICsgVFgzOTI3X0lSX1BJTykKKyNkZWZpbmUgSk1SMzkyN19JUlFfSVJDX1BDSQkoSk1SMzkyN19JUlFfSVJDICsgVFgzOTI3X0lSX1BDSSkKKyNkZWZpbmUgSk1SMzkyN19JUlFfSVJDX1RNUjAJKEpNUjM5MjdfSVJRX0lSQyArIFRYMzkyN19JUl9UTVIwKQorI2RlZmluZSBKTVIzOTI3X0lSUV9JUkNfVE1SMQkoSk1SMzkyN19JUlFfSVJDICsgVFgzOTI3X0lSX1RNUjEpCisjZGVmaW5lIEpNUjM5MjdfSVJRX0lSQ19UTVIyCShKTVIzOTI3X0lSUV9JUkMgKyBUWDM5MjdfSVJfVE1SMikKKyNkZWZpbmUgSk1SMzkyN19JUlFfSU9DX1BDSUEJKEpNUjM5MjdfSVJRX0lPQyArIEpNUjM5MjdfSU9DX0lOVEJfUENJQSkKKyNkZWZpbmUgSk1SMzkyN19JUlFfSU9DX1BDSUIJKEpNUjM5MjdfSVJRX0lPQyArIEpNUjM5MjdfSU9DX0lOVEJfUENJQikKKyNkZWZpbmUgSk1SMzkyN19JUlFfSU9DX1BDSUMJKEpNUjM5MjdfSVJRX0lPQyArIEpNUjM5MjdfSU9DX0lOVEJfUENJQykKKyNkZWZpbmUgSk1SMzkyN19JUlFfSU9DX1BDSUQJKEpNUjM5MjdfSVJRX0lPQyArIEpNUjM5MjdfSU9DX0lOVEJfUENJRCkKKyNkZWZpbmUgSk1SMzkyN19JUlFfSU9DX01PREVNCShKTVIzOTI3X0lSUV9JT0MgKyBKTVIzOTI3X0lPQ19JTlRCX01PREVNKQorI2RlZmluZSBKTVIzOTI3X0lSUV9JT0NfSU5UNgkoSk1SMzkyN19JUlFfSU9DICsgSk1SMzkyN19JT0NfSU5UQl9JTlQ2KQorI2RlZmluZSBKTVIzOTI3X0lSUV9JT0NfSU5UNwkoSk1SMzkyN19JUlFfSU9DICsgSk1SMzkyN19JT0NfSU5UQl9JTlQ3KQorI2RlZmluZSBKTVIzOTI3X0lSUV9JT0NfU09GVAkoSk1SMzkyN19JUlFfSU9DICsgSk1SMzkyN19JT0NfSU5UQl9TT0ZUKQorI2RlZmluZSBKTVIzOTI3X0lSUV9JU0FDX0lSUTUJKEpNUjM5MjdfSVJRX0lTQUMgKyBKTVIzOTI3X0lTQUNfSU5UQl9JUlE1KQorI2RlZmluZSBKTVIzOTI3X0lSUV9JU0FDX0lSUUtCCShKTVIzOTI3X0lSUV9JU0FDICsgSk1SMzkyN19JU0FDX0lOVEJfSVJRS0IpCisjZGVmaW5lIEpNUjM5MjdfSVJRX0lTQUNfSVJRTU9VU0UJKEpNUjM5MjdfSVJRX0lTQUMgKyBKTVIzOTI3X0lTQUNfSU5UQl9JUlFNT1VTRSkKKyNkZWZpbmUgSk1SMzkyN19JUlFfSVNBQ19JUlE0CShKTVIzOTI3X0lSUV9JU0FDICsgSk1SMzkyN19JU0FDX0lOVEJfSVJRNCkKKyNkZWZpbmUgSk1SMzkyN19JUlFfSVNBQ19JUlExMgkoSk1SMzkyN19JUlFfSVNBQyArIEpNUjM5MjdfSVNBQ19JTlRCX0lSUTEyKQorI2RlZmluZSBKTVIzOTI3X0lSUV9JU0FDX0lSUTMJKEpNUjM5MjdfSVJRX0lTQUMgKyBKTVIzOTI3X0lTQUNfSU5UQl9JUlEzKQorI2RlZmluZSBKTVIzOTI3X0lSUV9JU0FDX0lSUTEwCShKTVIzOTI3X0lSUV9JU0FDICsgSk1SMzkyN19JU0FDX0lOVEJfSVJRMTApCisjZGVmaW5lIEpNUjM5MjdfSVJRX0lTQUNfSVNBRVIJKEpNUjM5MjdfSVJRX0lTQUMgKyBKTVIzOTI3X0lTQUNfSU5UQl9JU0FFUikKKworI2lmIDAJLyogYXV0byBkZXRlY3QgKi8KKy8qIFJUTDgwMTlBUyAxME0gRXRoZXIgKEpNSS0zOTI3SU8yOkpQVzI6MS0yIFNob3J0KSAqLworI2RlZmluZSBKTVIzOTI3X0lSUV9FVEhFUjEJSk1SMzkyN19JUlFfSVJDX0lOVDAKKyNlbmRpZgorLyogSU9DIChQQ0ksIE1PREVNKSAqLworI2RlZmluZSBKTVIzOTI3X0lSUV9JT0NJTlQJSk1SMzkyN19JUlFfSVJDX0lOVDEKKy8qIElTQUMgKElTQSwgUENNQ0lBLCBLRVlCT0FSRCwgTU9VU0UpICovCisjZGVmaW5lIEpNUjM5MjdfSVJRX0lTQUNJTlQJSk1SMzkyN19JUlFfSVJDX0lOVDIKKy8qIFRDMzU4MTUgMTAwTSBFdGhlciAoSk1SLVRYMzkxMjpKUFc0OjItMyBTaG9ydCkgKi8KKyNkZWZpbmUgSk1SMzkyN19JUlFfRVRIRVIwCUpNUjM5MjdfSVJRX0lSQ19JTlQzCisvKiBDbG9jayBUaWNrICgxMG1zKSAqLworI2RlZmluZSBKTVIzOTI3X0lSUV9USUNLCUpNUjM5MjdfSVJRX0lSQ19UTVIwCisjZGVmaW5lIEpNUjM5MjdfSVJRX0lERQkJSk1SMzkyN19JUlFfSVNBQ19JUlExMgorCisvKiBJRUVFMTM5NCAoTm90ZSB0aGF0IHRoaXMgbWF5IGNvbmZsaWN0cyB3aXRoIFJUTDgwMTlBUyAxME0gRXRoZXIuLi4pICovCisjZGVmaW5lIEpNUjM5MjdfSVJRX1BSRU1JRVIzCUpNUjM5MjdfSVJRX0lSQ19JTlQwCisKKy8qIEkvTyBQb3J0cyAqLworLyogUlRMODAxOUFTIDEwTSBFdGhlciAqLworI2RlZmluZSBKTVIzOTI3X0VUSEVSMV9QT1JUCShKTVIzOTI3X0lTQUlPX0JBU0UgLSBKTVIzOTI3X1BPUlRfQkFTRSArIDB4MjgwKQorI2RlZmluZSBKTVIzOTI3X0tCRF9QT1JUCShKTVIzOTI3X0lTQUlPX0JBU0UgLSBKTVIzOTI3X1BPUlRfQkFTRSArIDB4MDA4MDAwNjApCisjZGVmaW5lIEpNUjM5MjdfSURFX1BPUlQJKEpNUjM5MjdfSVNBSU9fQkFTRSAtIEpNUjM5MjdfUE9SVF9CQVNFICsgMHgwMDEwMDFmMCkKKworLyogQ2xvY2tzICovCisjZGVmaW5lIEpNUjM5MjdfQ09SRUNMSwkxMzI3MTA0MDAJLyogMTMyLjdNSHogKi8KKyNkZWZpbmUgSk1SMzkyN19HQlVTQ0xLCShKTVIzOTI3X0NPUkVDTEsgLyAyKQkvKiA2Ni4zNU1IeiAqLworI2RlZmluZSBKTVIzOTI3X0lNQ0xLCShKTVIzOTI3X0NPUkVDTEsgLyA0KQkvKiAzMy4xN01IeiAqLworCisjZGVmaW5lIGptcjM5MjdfdG1ycHRyCQl0eDM5MjdfdG1ycHRyKDApCS8qIFRNUjAgKi8KKworCisvKgorICogVFgzOTI3IFBpbiBDb25maWd1cmF0aW9uOgorICoKKyAqCVBDRkcgYml0cwkJQXZhaWwJCQlEZWFkCisgKglTRUxTSU9bMTowXToxMQkJUlhEWzE6MF0sIFRYRFsxOjBdCVBJT1s2OjNdCisgKglTRUxTSU9DWzBdOjEJCUNUU1swXSwgUlRTWzBdCQlJTlRbNTo0XQorICoJU0VMU0lPQ1sxXTowLFNFTERTRjowLAlHU0RBT1swXSxHUENTVFszXQlDVFNbMV0sIFJUU1sxXSxEU0YsCisgKgkgIEdEQkdFKgkJCQkJICBQSU9bMjoxXQorICoJU0VMRE1BWzJdOjEJCURNQVJFUVsyXSxETUFBQ0tbMl0JUElPWzEzOjEyXQorICoJU0VMVE1SWzI6MF06MDAwCQkJCQlUSU1FUlsxOjBdCisgKglTRUxDUzowLFNFTERNQVsxXTowCVBJT1sxMTsxMF0JCVNEQ1NfQ0VbNzo2XSwKKyAqCQkJCQkJCSAgRE1BUkVRWzFdLERNQUFDS1sxXQorICoJU0VMRE1BWzBdOjEJCURNQVJFUVswXSxETUFBQ0tbMF0JUElPWzk6OF0KKyAqCVNFTERNQVszXToxCQlETUFSRVFbM10sRE1BQUNLWzNdCVBJT1sxNToxNF0KKyAqCVNFTERPTkU6MQkJRE1BRE9ORQkJCVBJT1s3XQorICoKKyAqIFVzYWJsZSBwaW5zIGFyZToKKyAqCVJYRFsxOzBdLFRYRFsxOjBdLENUU1swXSxSVFNbMF0sCisgKglETUFSRVFbMCwyLDNdLERNQUFDS1swLDIsM10sRE1BRE9ORSxQSU9bMCwxMCwxMV0KKyAqCUlOVFszOjBdCisgKi8KKworI2VuZGlmIC8qIF9fQVNNX1RYMzkyN19KTVIzOTI3X0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvam1yMzkyNy90eDM5MjcuaCBiL2luY2x1ZGUvYXNtLW1pcHMvam1yMzkyNy90eDM5MjcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2Q2N2M3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9qbXIzOTI3L3R4MzkyNy5oCkBAIC0wLDAgKzEsMzY1IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwIFRvc2hpYmEgQ29ycG9yYXRpb24KKyAqLworI2lmbmRlZiBfX0FTTV9UWDM5MjdfSAorI2RlZmluZSBfX0FTTV9UWDM5MjdfSAorCisjaW5jbHVkZSA8YXNtL2ptcjM5MjcvdHh4OTI3Lmg+CisKKyNkZWZpbmUgVFgzOTI3X1NEUkFNQ19SRUcJMHhmZmZlODAwMAorI2RlZmluZSBUWDM5MjdfUk9NQ19SRUcJCTB4ZmZmZTkwMDAKKyNkZWZpbmUgVFgzOTI3X0RNQV9SRUcJCTB4ZmZmZWIwMDAKKyNkZWZpbmUgVFgzOTI3X0lSQ19SRUcJCTB4ZmZmZWMwMDAKKyNkZWZpbmUgVFgzOTI3X1BDSUNfUkVHCQkweGZmZmVkMDAwCisjZGVmaW5lIFRYMzkyN19DQ0ZHX1JFRwkJMHhmZmZlZTAwMAorI2RlZmluZSBUWDM5MjdfTlJfVE1SCTMKKyNkZWZpbmUgVFgzOTI3X1RNUl9SRUcoY2gpCSgweGZmZmVmMDAwICsgKGNoKSAqIDB4MTAwKQorI2RlZmluZSBUWDM5MjdfTlJfU0lPCTIKKyNkZWZpbmUgVFgzOTI3X1NJT19SRUcoY2gpCSgweGZmZmVmMzAwICsgKGNoKSAqIDB4MTAwKQorI2RlZmluZSBUWDM5MjdfUElPX1JFRwkJMHhmZmZlZjUwMAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCitzdHJ1Y3QgdHgzOTI3X3NkcmFtY19yZWcgeworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgY3JbOF07CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyB0clszXTsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGNtZDsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIHNtcnNbMl07Cit9OworCitzdHJ1Y3QgdHgzOTI3X3JvbWNfcmVnIHsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGNyWzhdOworfTsKKworc3RydWN0IHR4MzkyN19kbWFfcmVnIHsKKwlzdHJ1Y3QgdHgzOTI3X2RtYV9jaF9yZWcgeworCQl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGNoYTsKKwkJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBzYXI7CisJCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgZGFyOworCQl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGNudHI7CisJCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgc2FpcjsKKwkJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBkYWlyOworCQl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGNjcjsKKwkJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBjc3I7CisJfSBjaFs0XTsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGRicls4XTsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIHRkaHI7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBtY3I7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyB1bnVzZWQwOworfTsKKworc3RydWN0IHR4MzkyN19pcmNfcmVnIHsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGNlcjsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGNyWzJdOworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgdW51c2VkMDsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGlscls4XTsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIHVudXNlZDFbNF07CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBpbXI7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyB1bnVzZWQyWzddOworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgc2NyOworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgdW51c2VkM1s3XTsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIHNzcjsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIHVudXNlZDRbN107CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBjc3I7Cit9OworCisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorCisjaWZkZWYgX19CSUdfRU5ESUFOCisjZGVmaW5lIGVuZGlhbl9kZWZfczIoZTEsZTIpCVwKKwl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBlMSxlMgorI2RlZmluZSBlbmRpYW5fZGVmX3NiMihlMSxlMixlMykJXAorCXZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGUxO3ZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgZTIsZTMKKyNkZWZpbmUgZW5kaWFuX2RlZl9iMnMoZTEsZTIsZTMpCVwKKwl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIGUxLGUyO3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGUzCisjZGVmaW5lIGVuZGlhbl9kZWZfYjQoZTEsZTIsZTMsZTQpCVwKKwl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIGUxLGUyLGUzLGU0CisjZWxzZQorI2RlZmluZSBlbmRpYW5fZGVmX3MyKGUxLGUyKQlcCisJdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgZTIsZTEKKyNkZWZpbmUgZW5kaWFuX2RlZl9zYjIoZTEsZTIsZTMpCVwKKwl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIGUzLGUyO3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGUxCisjZGVmaW5lIGVuZGlhbl9kZWZfYjJzKGUxLGUyLGUzKQlcCisJdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgZTM7dm9sYXRpbGUgdW5zaWduZWQgY2hhciBlMixlMQorI2RlZmluZSBlbmRpYW5fZGVmX2I0KGUxLGUyLGUzLGU0KQlcCisJdm9sYXRpbGUgdW5zaWduZWQgY2hhciBlNCxlMyxlMixlMQorI2VuZGlmCisKK3N0cnVjdCB0eDM5MjdfcGNpY19yZWcgeworCWVuZGlhbl9kZWZfczIoZGlkLCB2aWQpOworCWVuZGlhbl9kZWZfczIocGNpc3RhdCwgcGNpY21kKTsKKwllbmRpYW5fZGVmX2I0KGNjLCBzY2MsIHJwbGksIHJpZCk7CisJZW5kaWFuX2RlZl9iNCh1bnVzZWQwLCBodCwgbWx0LCBjbHMpOworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgaW9iYTsJCS8qICsxMCAqLworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgbWJhOworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgdW51c2VkMVs1XTsKKwllbmRpYW5fZGVmX3MyKHN2aWQsIHNzdmlkKTsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIHVudXNlZDI7CQkvKiArMzAgKi8KKwllbmRpYW5fZGVmX3NiMih1bnVzZWQzLCB1bnVzZWQ0LCBjYXBwdHIpOworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgdW51c2VkNTsKKwllbmRpYW5fZGVmX2I0KG1sLCBtZywgaXAsIGlsKTsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIHVudXNlZDY7CQkvKiArNDAgKi8KKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGlzdGF0OworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgaWltOworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgcnJ0OworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgdW51c2VkN1szXTsJCS8qICs1MCAqLworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgaXBibW1hOworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgaXBiaW9tYTsJCS8qICs2MCAqLworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgaWxibW1hOworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgaWxiaW9tYTsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIHVudXNlZDhbOV07CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyB0YzsJCS8qICs5MCAqLworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgdHN0YXQ7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyB0aW07CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyB0Y2NtZDsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIHBjaXJydDsJCS8qICthMCAqLworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgcGNpcnJ0X2NtZDsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIHBjaXJyZHQ7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyB1bnVzZWQ5WzNdOworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgdGxib2FwOworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgdGxiaWFwOworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgdGxibW1hOwkJLyogK2MwICovCisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyB0bGJpb21hOworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgc2NfbXNnOworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgc2NfYmU7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyB0Ymw7CQkvKiArZDAgKi8KKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIHVudXNlZDEwWzNdOworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgcHdtbmc7CQkvKiArZTAgKi8KKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIHB3bW5nczsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIHVudXNlZDExWzZdOworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgcmVxX3RyYWNlOwkJLyogKzEwMCAqLworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgcGJhcG1jOworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgcGJhcG1zOworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgcGJhcG1pbTsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGJtOwkJLyogKzExMCAqLworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgY3BjaWJyczsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGNwY2liZ3M7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBwYmFjczsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGlvYmFzOwkJLyogKzEyMCAqLworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgbWJhczsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGxiYzsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGxic3RhdDsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGxiaW07CQkvKiArMTMwICovCisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBwY2lzdGF0aW07CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBpY2E7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBpY2Q7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBpaWFkcDsJCS8qICsxNDAgKi8KKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGlzY2RwOworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgbW1hczsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGlvbWFzOworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgaXBjaWFkZHI7CQkvKiArMTUwICovCisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBpcGNpZGF0YTsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGlwY2liZTsKK307CisKK3N0cnVjdCB0eDM5MjdfY2NmZ19yZWcgeworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgY2NmZzsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGNyaXI7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBwY2ZnOworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgdGVhcjsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIHBkY3I7Cit9OworCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisvKgorICogU0RSQU1DCisgKi8KKworLyoKKyAqIFJPTUMKKyAqLworCisvKgorICogRE1BCisgKi8KKy8qIGJpdHMgZm9yIE1DUiAqLworI2RlZmluZSBUWDM5MjdfRE1BX01DUl9FSVMoY2gpCSgweDEwMDAwMDAwPDwoY2gpKQorI2RlZmluZSBUWDM5MjdfRE1BX01DUl9ESVMoY2gpCSgweDAxMDAwMDAwPDwoY2gpKQorI2RlZmluZSBUWDM5MjdfRE1BX01DUl9SU0ZJRgkweDAwMDAwMDgwCisjZGVmaW5lIFRYMzkyN19ETUFfTUNSX0ZJRlVNKGNoKQkoMHgwMDAwMDAwODw8KGNoKSkKKyNkZWZpbmUgVFgzOTI3X0RNQV9NQ1JfTEUJMHgwMDAwMDAwNAorI2RlZmluZSBUWDM5MjdfRE1BX01DUl9SUFJUCTB4MDAwMDAwMDIKKyNkZWZpbmUgVFgzOTI3X0RNQV9NQ1JfTVNURU4JMHgwMDAwMDAwMQorCisvKiBiaXRzIGZvciBDQ1JuICovCisjZGVmaW5lIFRYMzkyN19ETUFfQ0NSX0RCSU5ICTB4MDQwMDAwMDAKKyNkZWZpbmUgVFgzOTI3X0RNQV9DQ1JfU0JJTkgJMHgwMjAwMDAwMAorI2RlZmluZSBUWDM5MjdfRE1BX0NDUl9DSFJTVAkweDAxMDAwMDAwCisjZGVmaW5lIFRYMzkyN19ETUFfQ0NSX1JWQllURQkweDAwODAwMDAwCisjZGVmaW5lIFRYMzkyN19ETUFfQ0NSX0FDS1BPTAkweDAwNDAwMDAwCisjZGVmaW5lIFRYMzkyN19ETUFfQ0NSX1JFUVBMCTB4MDAyMDAwMDAKKyNkZWZpbmUgVFgzOTI3X0RNQV9DQ1JfRUdSRVEJMHgwMDEwMDAwMAorI2RlZmluZSBUWDM5MjdfRE1BX0NDUl9DSEROCTB4MDAwODAwMDAKKyNkZWZpbmUgVFgzOTI3X0RNQV9DQ1JfRE5DVEwJMHgwMDA2MDAwMAorI2RlZmluZSBUWDM5MjdfRE1BX0NDUl9FWFRSUQkweDAwMDEwMDAwCisjZGVmaW5lIFRYMzkyN19ETUFfQ0NSX0lOVFJRRAkweDAwMDBlMDAwCisjZGVmaW5lIFRYMzkyN19ETUFfQ0NSX0lOVEVORQkweDAwMDAxMDAwCisjZGVmaW5lIFRYMzkyN19ETUFfQ0NSX0lOVEVOQwkweDAwMDAwODAwCisjZGVmaW5lIFRYMzkyN19ETUFfQ0NSX0lOVEVOVAkweDAwMDAwNDAwCisjZGVmaW5lIFRYMzkyN19ETUFfQ0NSX0NITkVOCTB4MDAwMDAyMDAKKyNkZWZpbmUgVFgzOTI3X0RNQV9DQ1JfWEZBQ1QJMHgwMDAwMDEwMAorI2RlZmluZSBUWDM5MjdfRE1BX0NDUl9TTk9QCTB4MDAwMDAwODAKKyNkZWZpbmUgVFgzOTI3X0RNQV9DQ1JfRFNUSU5DCTB4MDAwMDAwNDAKKyNkZWZpbmUgVFgzOTI3X0RNQV9DQ1JfU1JDSU5DCTB4MDAwMDAwMjAKKyNkZWZpbmUgVFgzOTI3X0RNQV9DQ1JfWEZTWihvcmRlcikJKCgob3JkZXIpIDw8IDIpICYgMHgwMDAwMDAxYykKKyNkZWZpbmUgVFgzOTI3X0RNQV9DQ1JfWEZTWl8xVwlUWDM5MjdfRE1BX0NDUl9YRlNaKDIpCisjZGVmaW5lIFRYMzkyN19ETUFfQ0NSX1hGU1pfNFcJVFgzOTI3X0RNQV9DQ1JfWEZTWig0KQorI2RlZmluZSBUWDM5MjdfRE1BX0NDUl9YRlNaXzhXCVRYMzkyN19ETUFfQ0NSX1hGU1ooNSkKKyNkZWZpbmUgVFgzOTI3X0RNQV9DQ1JfWEZTWl8xNlcJVFgzOTI3X0RNQV9DQ1JfWEZTWig2KQorI2RlZmluZSBUWDM5MjdfRE1BX0NDUl9YRlNaXzMyVwlUWDM5MjdfRE1BX0NDUl9YRlNaKDcpCisjZGVmaW5lIFRYMzkyN19ETUFfQ0NSX01FTUlPCTB4MDAwMDAwMDIKKyNkZWZpbmUgVFgzOTI3X0RNQV9DQ1JfT05FQUQJMHgwMDAwMDAwMQorCisvKiBiaXRzIGZvciBDU1JuICovCisjZGVmaW5lIFRYMzkyN19ETUFfQ1NSX0NITkFDVAkweDAwMDAwMTAwCisjZGVmaW5lIFRYMzkyN19ETUFfQ1NSX0FCQ0hDCTB4MDAwMDAwODAKKyNkZWZpbmUgVFgzOTI3X0RNQV9DU1JfTkNITkMJMHgwMDAwMDA0MAorI2RlZmluZSBUWDM5MjdfRE1BX0NTUl9OVFJORkMJMHgwMDAwMDAyMAorI2RlZmluZSBUWDM5MjdfRE1BX0NTUl9FWFRETgkweDAwMDAwMDEwCisjZGVmaW5lIFRYMzkyN19ETUFfQ1NSX0NGRVJSCTB4MDAwMDAwMDgKKyNkZWZpbmUgVFgzOTI3X0RNQV9DU1JfQ0hFUlIJMHgwMDAwMDAwNAorI2RlZmluZSBUWDM5MjdfRE1BX0NTUl9ERVNFUlIJMHgwMDAwMDAwMgorI2RlZmluZSBUWDM5MjdfRE1BX0NTUl9TT1JFUlIJMHgwMDAwMDAwMQorCisvKgorICogSVJDCisgKi8KKyNkZWZpbmUgVFgzOTI3X0lSX01BWF9MRVZFTAk3CisKKy8qIElSQ0VSIDogSW50LiBDb250cm9sIEVuYWJsZSAqLworI2RlZmluZSBUWDM5MjdfSVJDRVJfSUNFCTB4MDAwMDAwMDEKKworLyogSVJDUiA6IEludC4gQ29udHJvbCAqLworI2RlZmluZSBUWDM5MjdfSVJDUl9MT1cJMHgwMDAwMDAwMAorI2RlZmluZSBUWDM5MjdfSVJDUl9ISUdICTB4MDAwMDAwMDEKKyNkZWZpbmUgVFgzOTI3X0lSQ1JfRE9XTgkweDAwMDAwMDAyCisjZGVmaW5lIFRYMzkyN19JUkNSX1VQCTB4MDAwMDAwMDMKKworLyogSVJTQ1IgOiBJbnQuIFN0YXR1cyBDb250cm9sICovCisjZGVmaW5lIFRYMzkyN19JUlNDUl9FSUNsckUJMHgwMDAwMDEwMAorI2RlZmluZSBUWDM5MjdfSVJTQ1JfRUlDbHJfTUFTSwkweDAwMDAwMDBmCisKKy8qIElSQ1NSIDogSW50LiBDdXJyZW50IFN0YXR1cyAqLworI2RlZmluZSBUWDM5MjdfSVJDU1JfSUYJMHgwMDAxMDAwMAorI2RlZmluZSBUWDM5MjdfSVJDU1JfSUxWX01BU0sJMHgwMDAwMDcwMAorI2RlZmluZSBUWDM5MjdfSVJDU1JfSVZMX01BU0sJMHgwMDAwMDAxZgorCisjZGVmaW5lIFRYMzkyN19JUl9JTlQwCTAKKyNkZWZpbmUgVFgzOTI3X0lSX0lOVDEJMQorI2RlZmluZSBUWDM5MjdfSVJfSU5UMgkyCisjZGVmaW5lIFRYMzkyN19JUl9JTlQzCTMKKyNkZWZpbmUgVFgzOTI3X0lSX0lOVDQJNAorI2RlZmluZSBUWDM5MjdfSVJfSU5UNQk1CisjZGVmaW5lIFRYMzkyN19JUl9TSU8wCTYKKyNkZWZpbmUgVFgzOTI3X0lSX1NJTzEJNworI2RlZmluZSBUWDM5MjdfSVJfU0lPKGNoKQkoNiArIChjaCkpCisjZGVmaW5lIFRYMzkyN19JUl9ETUEJOAorI2RlZmluZSBUWDM5MjdfSVJfUElPCTkKKyNkZWZpbmUgVFgzOTI3X0lSX1BDSQkxMAorI2RlZmluZSBUWDM5MjdfSVJfVE1SMAkxMworI2RlZmluZSBUWDM5MjdfSVJfVE1SMQkxNAorI2RlZmluZSBUWDM5MjdfSVJfVE1SMgkxNQorI2RlZmluZSBUWDM5MjdfTlVNX0lSCTE2CisKKy8qCisgKiBQQ0lDCisgKi8KKy8qIGJpdHMgZm9yIFBDSUNNRCAqLworLyogc2VlIFBDSV9DT01NQU5EX1hYWCBpbiBsaW51eC9wY2kuaCAqLworCisvKiBiaXRzIGZvciBQQ0lTVEFUICovCisvKiBzZWUgUENJX1NUQVRVU19YWFggaW4gbGludXgvcGNpLmggKi8KKyNkZWZpbmUgUENJX1NUQVRVU19ORVdfQ0FQCTB4MDAxMAorCisvKiBiaXRzIGZvciBUQyAqLworI2RlZmluZSBUWDM5MjdfUENJQ19UQ19PRjE2RQkweDAwMDAwMDIwCisjZGVmaW5lIFRYMzkyN19QQ0lDX1RDX0lGOEUJMHgwMDAwMDAxMAorI2RlZmluZSBUWDM5MjdfUENJQ19UQ19PRjhFCTB4MDAwMDAwMDgKKworLyogYml0cyBmb3IgSU9CQS9NQkEgKi8KKy8qIHNlZSBQQ0lfQkFTRV9BRERSRVNTX1hYWCBpbiBsaW51eC9wY2kuaCAqLworCisvKiBiaXRzIGZvciBQQkFQTUMgKi8KKyNkZWZpbmUgVFgzOTI3X1BDSUNfUEJBUE1DX1JQQkEJMHgwMDAwMDAwNAorI2RlZmluZSBUWDM5MjdfUENJQ19QQkFQTUNfUEJBRU4JMHgwMDAwMDAwMgorI2RlZmluZSBUWDM5MjdfUENJQ19QQkFQTUNfQk1DRU4JMHgwMDAwMDAwMQorCisvKiBiaXRzIGZvciBMQlNUQVQvTEJJTSAqLworI2RlZmluZSBUWDM5MjdfUENJQ19MQklNX0FMTAkweDAwMDAwMDNlCisKKy8qIGJpdHMgZm9yIFBDSVNUQVRJTSAoc2VlIGFsc28gUENJX1NUQVRVU19YWFggaW4gbGludXgvcGNpLmggKi8KKyNkZWZpbmUgVFgzOTI3X1BDSUNfUENJU1RBVElNX0FMTAkweDAwMDBmOTAwCisKKy8qIGJpdHMgZm9yIExCQyAqLworI2RlZmluZSBUWDM5MjdfUENJQ19MQkNfSUJTRQkweDAwMDA0MDAwCisjZGVmaW5lIFRYMzkyN19QQ0lDX0xCQ19USUJTRQkweDAwMDAyMDAwCisjZGVmaW5lIFRYMzkyN19QQ0lDX0xCQ19UTUZCU0UJMHgwMDAwMTAwMAorI2RlZmluZSBUWDM5MjdfUENJQ19MQkNfSFJTVAkweDAwMDAwODAwCisjZGVmaW5lIFRYMzkyN19QQ0lDX0xCQ19TUlNUCTB4MDAwMDA0MDAKKyNkZWZpbmUgVFgzOTI3X1BDSUNfTEJDX0VQQ0FECTB4MDAwMDAyMDAKKyNkZWZpbmUgVFgzOTI3X1BDSUNfTEJDX01TRFNFCTB4MDAwMDAxMDAKKyNkZWZpbmUgVFgzOTI3X1BDSUNfTEJDX0NSUgkweDAwMDAwMDgwCisjZGVmaW5lIFRYMzkyN19QQ0lDX0xCQ19JTE1ERQkweDAwMDAwMDQwCisjZGVmaW5lIFRYMzkyN19QQ0lDX0xCQ19JTElERQkweDAwMDAwMDIwCisKKyNkZWZpbmUgVFgzOTI3X1BDSUNfSURTRUxfQURfVE9fU0xPVChhZCkJKChhZCkgLSAxMSkKKyNkZWZpbmUgVFgzOTI3X1BDSUNfTUFYX0RFVk5VCVRYMzkyN19QQ0lDX0lEU0VMX0FEX1RPX1NMT1QoMzIpCisKKy8qCisgKiBDQ0ZHCisgKi8KKy8qIENDRkcgOiBDaGlwIENvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgVFgzOTI3X0NDRkdfVExCT0ZGCTB4MDAwMjAwMDAKKyNkZWZpbmUgVFgzOTI3X0NDRkdfQkVPVwkweDAwMDEwMDAwCisjZGVmaW5lIFRYMzkyN19DQ0ZHX1dSCTB4MDAwMDgwMDAKKyNkZWZpbmUgVFgzOTI3X0NDRkdfVE9FCTB4MDAwMDQwMDAKKyNkZWZpbmUgVFgzOTI3X0NDRkdfUENJWEFSQgkweDAwMDAyMDAwCisjZGVmaW5lIFRYMzkyN19DQ0ZHX1BDSTMJMHgwMDAwMTAwMAorI2RlZmluZSBUWDM5MjdfQ0NGR19QU05QCTB4MDAwMDA4MDAKKyNkZWZpbmUgVFgzOTI3X0NDRkdfUFBSSQkweDAwMDAwNDAwCisjZGVmaW5lIFRYMzkyN19DQ0ZHX1BMTE0JMHgwMDAwMDAzMAorI2RlZmluZSBUWDM5MjdfQ0NGR19FTkRJQU4JMHgwMDAwMDAwNAorI2RlZmluZSBUWDM5MjdfQ0NGR19IQUxUCTB4MDAwMDAwMDIKKyNkZWZpbmUgVFgzOTI3X0NDRkdfQUNFSE9MRAkweDAwMDAwMDAxCisKKy8qIFBDRkcgOiBQaW4gQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSBUWDM5MjdfUENGR19TWVNDTEtFTgkweDA4MDAwMDAwCisjZGVmaW5lIFRYMzkyN19QQ0ZHX1NEUkNMS0VOX0FMTAkweDA3YzAwMDAwCisjZGVmaW5lIFRYMzkyN19QQ0ZHX1NEUkNMS0VOKGNoKQkoMHgwMDQwMDAwMDw8KGNoKSkKKyNkZWZpbmUgVFgzOTI3X1BDRkdfUENJQ0xLRU5fQUxMCTB4MDAzYzAwMDAKKyNkZWZpbmUgVFgzOTI3X1BDRkdfUENJQ0xLRU4oY2gpCSgweDAwMDQwMDAwPDwoY2gpKQorI2RlZmluZSBUWDM5MjdfUENGR19TRUxBTEwJMHgwMDAzZmZmZgorI2RlZmluZSBUWDM5MjdfUENGR19TRUxDUwkweDAwMDIwMDAwCisjZGVmaW5lIFRYMzkyN19QQ0ZHX1NFTERTRgkweDAwMDEwMDAwCisjZGVmaW5lIFRYMzkyN19QQ0ZHX1NFTFNJT0NfQUxMCTB4MDAwMGMwMDAKKyNkZWZpbmUgVFgzOTI3X1BDRkdfU0VMU0lPQyhjaCkJKDB4MDAwMDQwMDA8PChjaCkpCisjZGVmaW5lIFRYMzkyN19QQ0ZHX1NFTFNJT19BTEwJMHgwMDAwMzAwMAorI2RlZmluZSBUWDM5MjdfUENGR19TRUxTSU8oY2gpCSgweDAwMDAxMDAwPDwoY2gpKQorI2RlZmluZSBUWDM5MjdfUENGR19TRUxUTVJfQUxMCTB4MDAwMDBlMDAKKyNkZWZpbmUgVFgzOTI3X1BDRkdfU0VMVE1SKGNoKQkoMHgwMDAwMDIwMDw8KGNoKSkKKyNkZWZpbmUgVFgzOTI3X1BDRkdfU0VMRE9ORQkweDAwMDAwMTAwCisjZGVmaW5lIFRYMzkyN19QQ0ZHX0lOVERNQV9BTEwJMHgwMDAwMDBmMAorI2RlZmluZSBUWDM5MjdfUENGR19JTlRETUEoY2gpCSgweDAwMDAwMDEwPDwoY2gpKQorI2RlZmluZSBUWDM5MjdfUENGR19TRUxETUFfQUxMCTB4MDAwMDAwMGYKKyNkZWZpbmUgVFgzOTI3X1BDRkdfU0VMRE1BKGNoKQkoMHgwMDAwMDAwMTw8KGNoKSkKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworI2RlZmluZSB0eDM5Mjdfc2RyYW1jcHRyCSgoc3RydWN0IHR4MzkyN19zZHJhbWNfcmVnICopVFgzOTI3X1NEUkFNQ19SRUcpCisjZGVmaW5lIHR4MzkyN19yb21jcHRyCQkoKHN0cnVjdCB0eDM5Mjdfcm9tY19yZWcgKilUWDM5MjdfUk9NQ19SRUcpCisjZGVmaW5lIHR4MzkyN19kbWFwdHIJCSgoc3RydWN0IHR4MzkyN19kbWFfcmVnICopVFgzOTI3X0RNQV9SRUcpCisjZGVmaW5lIHR4MzkyN19pcmNwdHIJCSgoc3RydWN0IHR4MzkyN19pcmNfcmVnICopVFgzOTI3X0lSQ19SRUcpCisjZGVmaW5lIHR4MzkyN19wY2ljcHRyCQkoKHN0cnVjdCB0eDM5MjdfcGNpY19yZWcgKilUWDM5MjdfUENJQ19SRUcpCisjZGVmaW5lIHR4MzkyN19jY2ZncHRyCQkoKHN0cnVjdCB0eDM5MjdfY2NmZ19yZWcgKilUWDM5MjdfQ0NGR19SRUcpCisjZGVmaW5lIHR4MzkyN190bXJwdHIoY2gpCSgoc3RydWN0IHR4eDkyN190bXJfcmVnICopVFgzOTI3X1RNUl9SRUcoY2gpKQorI2RlZmluZSB0eDM5Mjdfc2lvcHRyKGNoKQkoKHN0cnVjdCB0eHg5Mjdfc2lvX3JlZyAqKVRYMzkyN19TSU9fUkVHKGNoKSkKKyNkZWZpbmUgdHgzOTI3X3Bpb3B0cgkJKChzdHJ1Y3QgdHh4OTI3X3Bpb19yZWcgKilUWDM5MjdfUElPX1JFRykKKworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKworI2VuZGlmIC8qIF9fQVNNX1RYMzkyN19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2ptcjM5MjcvdHh4OTI3LmggYi9pbmNsdWRlL2FzbS1taXBzL2ptcjM5MjcvdHh4OTI3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ1NzkyZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvam1yMzkyNy90eHg5MjcuaApAQCAtMCwwICsxLDE3NSBAQAorLyoKKyAqIENvbW1vbiBkZWZpbml0aW9ucyBmb3IgVFgzOTI3L1RYNDkyNworICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBUb3NoaWJhIENvcnBvcmF0aW9uCisgKi8KKyNpZm5kZWYgX19BU01fVFhYOTI3X0gKKyNkZWZpbmUgX19BU01fVFhYOTI3X0gKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworc3RydWN0IHR4eDkyN190bXJfcmVnIHsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIHRjcjsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIHRpc3I7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBjcHJhOworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgY3ByYjsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGl0bXI7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyB1bnVzZWQwWzNdOworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgY2NkcjsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIHVudXNlZDFbM107CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBwZ21yOworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgdW51c2VkMlszXTsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIHd0bXI7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyB1bnVzZWQzWzQzXTsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIHRycjsKK307CisKK3N0cnVjdCB0eHg5Mjdfc2lvX3JlZyB7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBsY3I7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBkaWNyOworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgZGlzcjsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGNpc3I7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBmY3I7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBmbGNyOworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgYmdyOworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgdGZpZm87CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyByZmlmbzsKK307CisKK3N0cnVjdCB0eHg5MjdfcGlvX3JlZyB7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBkb3V0OworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgZGluOworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgZGlyOworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgb2Q7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBmbGFnWzJdOworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgcG9sOworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgaW50YzsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIG1hc2tjcHU7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBtYXNrZXh0OworfTsKKworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKworCisvKgorICogVE1SCisgKi8KKy8qIFRNVENSIDogVGltZXIgQ29udHJvbCAqLworI2RlZmluZSBUWHg5MjdfVE1UQ1JfVENFCTB4MDAwMDAwODAKKyNkZWZpbmUgVFh4OTI3X1RNVENSX0NDREUJMHgwMDAwMDA0MAorI2RlZmluZSBUWHg5MjdfVE1UQ1JfQ1JFCTB4MDAwMDAwMjAKKyNkZWZpbmUgVFh4OTI3X1RNVENSX0VDRVMJMHgwMDAwMDAwOAorI2RlZmluZSBUWHg5MjdfVE1UQ1JfQ0NTCTB4MDAwMDAwMDQKKyNkZWZpbmUgVFh4OTI3X1RNVENSX1RNT0RFX01BU0sJMHgwMDAwMDAwMworI2RlZmluZSBUWHg5MjdfVE1UQ1JfVE1PREVfSVRWTAkweDAwMDAwMDAwCisKKy8qIFRNVElTUiA6IFRpbWVyIEludC4gU3RhdHVzICovCisjZGVmaW5lIFRYeDkyN19UTVRJU1JfVFBJQlMJMHgwMDAwMDAwNAorI2RlZmluZSBUWHg5MjdfVE1USVNSX1RQSUFTCTB4MDAwMDAwMDIKKyNkZWZpbmUgVFh4OTI3X1RNVElTUl9USUlTCTB4MDAwMDAwMDEKKworLyogVE1USVRNUiA6IEludGVydmFsIFRpbWVyIE1vZGUgKi8KKyNkZWZpbmUgVFh4OTI3X1RNVElUTVJfVElJRQkweDAwMDA4MDAwCisjZGVmaW5lIFRYeDkyN19UTVRJVE1SX1RaQ0UJMHgwMDAwMDAwMQorCisvKgorICogU0lPCisgKi8KKy8qIFNJTENSIDogTGluZSBDb250cm9sICovCisjZGVmaW5lIFRYeDkyN19TSUxDUl9TQ1NfTUFTSwkweDAwMDAwMDYwCisjZGVmaW5lIFRYeDkyN19TSUxDUl9TQ1NfSU1DTEsJMHgwMDAwMDAwMAorI2RlZmluZSBUWHg5MjdfU0lMQ1JfU0NTX0lNQ0xLX0JHCTB4MDAwMDAwMjAKKyNkZWZpbmUgVFh4OTI3X1NJTENSX1NDU19TQ0xLCTB4MDAwMDAwNDAKKyNkZWZpbmUgVFh4OTI3X1NJTENSX1NDU19TQ0xLX0JHCTB4MDAwMDAwNjAKKyNkZWZpbmUgVFh4OTI3X1NJTENSX1VFUFMJMHgwMDAwMDAxMAorI2RlZmluZSBUWHg5MjdfU0lMQ1JfVVBFTgkweDAwMDAwMDA4CisjZGVmaW5lIFRYeDkyN19TSUxDUl9VU0JMX01BU0sJMHgwMDAwMDAwNAorI2RlZmluZSBUWHg5MjdfU0lMQ1JfVVNCTF8xQklUCTB4MDAwMDAwMDQKKyNkZWZpbmUgVFh4OTI3X1NJTENSX1VTQkxfMkJJVAkweDAwMDAwMDAwCisjZGVmaW5lIFRYeDkyN19TSUxDUl9VTU9ERV9NQVNLCTB4MDAwMDAwMDMKKyNkZWZpbmUgVFh4OTI3X1NJTENSX1VNT0RFXzhCSVQJMHgwMDAwMDAwMAorI2RlZmluZSBUWHg5MjdfU0lMQ1JfVU1PREVfN0JJVAkweDAwMDAwMDAxCisKKy8qIFNJRElDUiA6IERNQS9JbnQuIENvbnRyb2wgKi8KKyNkZWZpbmUgVFh4OTI3X1NJRElDUl9UREUJMHgwMDAwODAwMAorI2RlZmluZSBUWHg5MjdfU0lESUNSX1JERQkweDAwMDA0MDAwCisjZGVmaW5lIFRYeDkyN19TSURJQ1JfVElFCTB4MDAwMDIwMDAKKyNkZWZpbmUgVFh4OTI3X1NJRElDUl9SSUUJMHgwMDAwMTAwMAorI2RlZmluZSBUWHg5MjdfU0lESUNSX1NQSUUJMHgwMDAwMDgwMAorI2RlZmluZSBUWHg5MjdfU0lESUNSX0NUU0FDCTB4MDAwMDA2MDAKKyNkZWZpbmUgVFh4OTI3X1NJRElDUl9TVElFX01BU0sJMHgwMDAwMDAzZgorI2RlZmluZSBUWHg5MjdfU0lESUNSX1NUSUVfT0VSUwkJMHgwMDAwMDAyMAorI2RlZmluZSBUWHg5MjdfU0lESUNSX1NUSUVfQ1RTUwkJMHgwMDAwMDAxMAorI2RlZmluZSBUWHg5MjdfU0lESUNSX1NUSUVfUkJSS0QJMHgwMDAwMDAwOAorI2RlZmluZSBUWHg5MjdfU0lESUNSX1NUSUVfVFJEWQkJMHgwMDAwMDAwNAorI2RlZmluZSBUWHg5MjdfU0lESUNSX1NUSUVfVFhBTFMJMHgwMDAwMDAwMgorI2RlZmluZSBUWHg5MjdfU0lESUNSX1NUSUVfVUJSS0QJMHgwMDAwMDAwMQorCisvKiBTSURJU1IgOiBETUEvSW50LiBTdGF0dXMgKi8KKyNkZWZpbmUgVFh4OTI3X1NJRElTUl9VQlJLCTB4MDAwMDgwMDAKKyNkZWZpbmUgVFh4OTI3X1NJRElTUl9VVkFMSUQJMHgwMDAwNDAwMAorI2RlZmluZSBUWHg5MjdfU0lESVNSX1VGRVIJMHgwMDAwMjAwMAorI2RlZmluZSBUWHg5MjdfU0lESVNSX1VQRVIJMHgwMDAwMTAwMAorI2RlZmluZSBUWHg5MjdfU0lESVNSX1VPRVIJMHgwMDAwMDgwMAorI2RlZmluZSBUWHg5MjdfU0lESVNSX0VSSQkweDAwMDAwNDAwCisjZGVmaW5lIFRYeDkyN19TSURJU1JfVE9VVAkweDAwMDAwMjAwCisjZGVmaW5lIFRYeDkyN19TSURJU1JfVERJUwkweDAwMDAwMTAwCisjZGVmaW5lIFRYeDkyN19TSURJU1JfUkRJUwkweDAwMDAwMDgwCisjZGVmaW5lIFRYeDkyN19TSURJU1JfU1RJUwkweDAwMDAwMDQwCisjZGVmaW5lIFRYeDkyN19TSURJU1JfUkZETl9NQVNLCTB4MDAwMDAwMWYKKworLyogU0lDSVNSIDogQ2hhbmdlIEludC4gU3RhdHVzICovCisjZGVmaW5lIFRYeDkyN19TSUNJU1JfT0VSUwkweDAwMDAwMDIwCisjZGVmaW5lIFRYeDkyN19TSUNJU1JfQ1RTUwkweDAwMDAwMDEwCisjZGVmaW5lIFRYeDkyN19TSUNJU1JfUkJSS0QJMHgwMDAwMDAwOAorI2RlZmluZSBUWHg5MjdfU0lDSVNSX1RSRFkJMHgwMDAwMDAwNAorI2RlZmluZSBUWHg5MjdfU0lDSVNSX1RYQUxTCTB4MDAwMDAwMDIKKyNkZWZpbmUgVFh4OTI3X1NJQ0lTUl9VQlJLRAkweDAwMDAwMDAxCisKKy8qIFNJRkNSIDogRklGTyBDb250cm9sICovCisjZGVmaW5lIFRYeDkyN19TSUZDUl9TV1JTVAkweDAwMDA4MDAwCisjZGVmaW5lIFRYeDkyN19TSUZDUl9SRElMX01BU0sJMHgwMDAwMDE4MAorI2RlZmluZSBUWHg5MjdfU0lGQ1JfUkRJTF8xCTB4MDAwMDAwMDAKKyNkZWZpbmUgVFh4OTI3X1NJRkNSX1JESUxfNAkweDAwMDAwMDgwCisjZGVmaW5lIFRYeDkyN19TSUZDUl9SRElMXzgJMHgwMDAwMDEwMAorI2RlZmluZSBUWHg5MjdfU0lGQ1JfUkRJTF8xMgkweDAwMDAwMTgwCisjZGVmaW5lIFRYeDkyN19TSUZDUl9SRElMX01BWAkweDAwMDAwMTgwCisjZGVmaW5lIFRYeDkyN19TSUZDUl9URElMX01BU0sJMHgwMDAwMDAxOAorI2RlZmluZSBUWHg5MjdfU0lGQ1JfVERJTF9NQVNLCTB4MDAwMDAwMTgKKyNkZWZpbmUgVFh4OTI3X1NJRkNSX1RESUxfMQkweDAwMDAwMDAwCisjZGVmaW5lIFRYeDkyN19TSUZDUl9URElMXzQJMHgwMDAwMDAwMQorI2RlZmluZSBUWHg5MjdfU0lGQ1JfVERJTF84CTB4MDAwMDAwMTAKKyNkZWZpbmUgVFh4OTI3X1NJRkNSX1RESUxfTUFYCTB4MDAwMDAwMTAKKyNkZWZpbmUgVFh4OTI3X1NJRkNSX1RGUlNUCTB4MDAwMDAwMDQKKyNkZWZpbmUgVFh4OTI3X1NJRkNSX1JGUlNUCTB4MDAwMDAwMDIKKyNkZWZpbmUgVFh4OTI3X1NJRkNSX0ZSU1RFCTB4MDAwMDAwMDEKKyNkZWZpbmUgVFh4OTI3X1NJT19UWF9GSUZPCTgKKyNkZWZpbmUgVFh4OTI3X1NJT19SWF9GSUZPCTE2CisKKy8qIFNJRkxDUiA6IEZsb3cgQ29udHJvbCAqLworI2RlZmluZSBUWHg5MjdfU0lGTENSX1JDUwkweDAwMDAxMDAwCisjZGVmaW5lIFRYeDkyN19TSUZMQ1JfVEVTCTB4MDAwMDA4MDAKKyNkZWZpbmUgVFh4OTI3X1NJRkxDUl9SVFNTQwkweDAwMDAwMjAwCisjZGVmaW5lIFRYeDkyN19TSUZMQ1JfUlNERQkweDAwMDAwMTAwCisjZGVmaW5lIFRYeDkyN19TSUZMQ1JfVFNERQkweDAwMDAwMDgwCisjZGVmaW5lIFRYeDkyN19TSUZMQ1JfUlRTVExfTUFTSwkweDAwMDAwMDFlCisjZGVmaW5lIFRYeDkyN19TSUZMQ1JfUlRTVExfTUFYCTB4MDAwMDAwMWUKKyNkZWZpbmUgVFh4OTI3X1NJRkxDUl9UQlJLCTB4MDAwMDAwMDEKKworLyogU0lCR1IgOiBCYXVkcmF0ZSBDb250cm9sICovCisjZGVmaW5lIFRYeDkyN19TSUJHUl9CQ0xLX01BU0sJMHgwMDAwMDMwMAorI2RlZmluZSBUWHg5MjdfU0lCR1JfQkNMS19UMAkweDAwMDAwMDAwCisjZGVmaW5lIFRYeDkyN19TSUJHUl9CQ0xLX1QyCTB4MDAwMDAxMDAKKyNkZWZpbmUgVFh4OTI3X1NJQkdSX0JDTEtfVDQJMHgwMDAwMDIwMAorI2RlZmluZSBUWHg5MjdfU0lCR1JfQkNMS19UNgkweDAwMDAwMzAwCisjZGVmaW5lIFRYeDkyN19TSUJHUl9CUkRfTUFTSwkweDAwMDAwMGZmCisKKy8qCisgKiBQSU8KKyAqLworCisjZW5kaWYgLyogX19BU01fVFhYOTI3X0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMva21hcF90eXBlcy5oIGIvaW5jbHVkZS9hc20tbWlwcy9rbWFwX3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg4NmEwYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMva21hcF90eXBlcy5oCkBAIC0wLDAgKzEsMzEgQEAKKyNpZm5kZWYgX0FTTV9LTUFQX1RZUEVTX0gKKyNkZWZpbmUgX0FTTV9LTUFQX1RZUEVTX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjaWZkZWYgQ09ORklHX0RFQlVHX0hJR0hNRU0KKyMgZGVmaW5lIEQobikgX19LTV9GRU5DRV8jI24gLAorI2Vsc2UKKyMgZGVmaW5lIEQobikKKyNlbmRpZgorCitlbnVtIGttX3R5cGUgeworRCgwKQlLTV9CT1VOQ0VfUkVBRCwKK0QoMSkJS01fU0tCX1NVTlJQQ19EQVRBLAorRCgyKQlLTV9TS0JfREFUQV9TT0ZUSVJRLAorRCgzKQlLTV9VU0VSMCwKK0QoNCkJS01fVVNFUjEsCitEKDUpCUtNX0JJT19TUkNfSVJRLAorRCg2KQlLTV9CSU9fRFNUX0lSUSwKK0QoNykJS01fUFRFMCwKK0QoOCkJS01fUFRFMSwKK0QoOSkJS01fSVJRMCwKK0QoMTApCUtNX0lSUTEsCitEKDExKQlLTV9TT0ZUSVJRMCwKK0QoMTIpCUtNX1NPRlRJUlExLAorRCgxMykJS01fVFlQRV9OUgorfTsKKworI3VuZGVmIEQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2xhc2F0L2RzMTYwMy5oIGIvaW5jbHVkZS9hc20tbWlwcy9sYXNhdC9kczE2MDMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGNkNzU0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9sYXNhdC9kczE2MDMuaApAQCAtMCwwICsxLDE4IEBACisjaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgorCisvKiBMYXNhdCAxMDAJKi8KKyNkZWZpbmUgRFMxNjAzX1JFR18xMDAJCShLU0VHMUFERFIoMHgxYzgxMDAwMCkpCisjZGVmaW5lIERTMTYwM19SU1RfMTAwCQkoMSA8PCAyKQorI2RlZmluZSBEUzE2MDNfQ0xLXzEwMAkJKDEgPDwgMCkKKyNkZWZpbmUgRFMxNjAzX0RBVEFfU0hJRlRfMTAwCTEKKyNkZWZpbmUgRFMxNjAzX0RBVEFfMTAwCQkoMSA8PCBEUzE2MDNfREFUQV9TSElGVF8xMDApCisKKy8qIExhc2F0IDIwMAkqLworI2RlZmluZSBEUzE2MDNfUkVHXzIwMAkJKEtTRUcxQUREUigweDExMDAwMDAwKSkKKyNkZWZpbmUgRFMxNjAzX1JTVF8yMDAJCSgxIDw8IDMpCisjZGVmaW5lIERTMTYwM19DTEtfMjAwCQkoMSA8PCA0KQorI2RlZmluZSBEUzE2MDNfREFUQV8yMDAJCSgxIDw8IDUpCisKKyNkZWZpbmUgRFMxNjAzX0RBVEFfUkVHXzIwMAkJKERTMTYwM19SRUdfMjAwICsgMHgxMDAwMCkKKyNkZWZpbmUgRFMxNjAzX0RBVEFfUkVBRF9TSElGVF8yMDAJOQorI2RlZmluZSBEUzE2MDNfREFUQV9SRUFEXzIwMAkoMSA8PCBEUzE2MDNfREFUQV9SRUFEX1NISUZUXzIwMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbGFzYXQvZWVwcm9tLmggYi9pbmNsdWRlL2FzbS1taXBzL2xhc2F0L2VlcHJvbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiNTNlZGQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2xhc2F0L2VlcHJvbS5oCkBAIC0wLDAgKzEsMTcgQEAKKyNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CisKKy8qIGxhc2F0IDEwMCAqLworI2RlZmluZSBBVDkzQ19SRUdfMTAwICAgICAgICAgICAgICAgS1NFRzFBRERSKDB4MWM4MTAwMDApCisjZGVmaW5lIEFUOTNDX1JEQVRBX1JFR18xMDAgICAgICAgICBBVDkzQ19SRUdfMTAwCisjZGVmaW5lIEFUOTNDX1JEQVRBX1NISUZUXzEwMCAgICAgICA0CisjZGVmaW5lIEFUOTNDX1dEQVRBX1NISUZUXzEwMCAgICAgICA0CisjZGVmaW5lIEFUOTNDX0NTX01fMTAwICAgICAgICAgICAgICAoIDEgPDwgNSApCisjZGVmaW5lIEFUOTNDX0NMS19NXzEwMCAgICAgICAgICAgICAoIDEgPDwgMyApCisKKy8qIGxhc2F0IDIwMCAqLworI2RlZmluZSBBVDkzQ19SRUdfMjAwCQlLU0VHMUFERFIoMHgxMTAwMDAwMCkKKyNkZWZpbmUgQVQ5M0NfUkRBVEFfUkVHXzIwMAkoQVQ5M0NfUkVHXzIwMCsweDEwMDAwKQorI2RlZmluZSBBVDkzQ19SREFUQV9TSElGVF8yMDAJOAorI2RlZmluZSBBVDkzQ19XREFUQV9TSElGVF8yMDAJMgorI2RlZmluZSBBVDkzQ19DU19NXzIwMAkJKCAxIDw8IDAgKQorI2RlZmluZSBBVDkzQ19DTEtfTV8yMDAJCSggMSA8PCAxICkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbGFzYXQvaGVhZC5oIGIvaW5jbHVkZS9hc20tbWlwcy9sYXNhdC9oZWFkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU1ODlmMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbGFzYXQvaGVhZC5oCkBAIC0wLDAgKzEsMjIgQEAKKy8qCisgKiBJbWFnZSBoZWFkZXIgc3R1ZmYKKyAqLworI2lmbmRlZiBfSEVBRF9ICisjZGVmaW5lIF9IRUFEX0gKKworI2RlZmluZSBMQVNBVF9LX01BR0lDMF9WQUwJMHhmZWRlYWJiYQorI2RlZmluZSBMQVNBVF9LX01BR0lDMV9WQUwJMHgwMGJlZGVhZAorCisjaWZuZGVmIF9MQU5HVUFHRV9BU1NFTUJMWQorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CitzdHJ1Y3QgYm9vdGxvYWRlcl9oZWFkZXIgeworCXUzMiBtYWdpY1syXTsKKwl1MzIgdmVyc2lvbjsKKwl1MzIgaW1hZ2Vfc3RhcnQ7CisJdTMyIGltYWdlX3NpemU7CisJdTMyIGtlcm5lbF9zdGFydDsKKwl1MzIga2VybmVsX2VudHJ5OworfTsKKyNlbmRpZgorCisjZW5kaWYgLyogX0hFQURfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9sYXNhdC9sYXNhdC5oIGIvaW5jbHVkZS9hc20tbWlwcy9sYXNhdC9sYXNhdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4MWFmYzUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2xhc2F0L2xhc2F0LmgKQEAgLTAsMCArMSwyNTUgQEAKKy8qCisgKiBsYXNhdC5oCisgKgorICogVGhvbWFzIEhvcnN0ZW4gPHRoaEBsYXNhdC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgTEFTQVQgTmV0d29ya3MgQS9TLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChWZXJzaW9uIDIpIGFzCisgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqIENvbmZpZ3VyYXRpb24gZm9yIExBU0FUIGJvYXJkcywgbG9hZHMgdGhlIGFwcHJvcHJpYXRlIGluY2x1ZGUgZmlsZXMuCisgKi8KKyNpZm5kZWYgX0xBU0FUX0gKKyNkZWZpbmUgX0xBU0FUX0gKKworI2lmbmRlZiBfTEFOR1VBR0VfQVNTRU1CTFkKKworZXh0ZXJuIHN0cnVjdCBsYXNhdF9taXNjIHsKKwl2b2xhdGlsZSB1MzIgKnJlc2V0X3JlZzsKKwl2b2xhdGlsZSB1MzIgKmZsYXNoX3dwX3JlZzsKKwl1MzIgZmxhc2hfd3BfYml0OworfSAqbGFzYXRfbWlzYzsKKworZW51bSBsYXNhdF9tdGRwYXJ0cyB7CisJTEFTQVRfTVREX0JPT1RMT0FERVIsCisJTEFTQVRfTVREX1NFUlZJQ0UsCisJTEFTQVRfTVREX05PUk1BTCwKKwlMQVNBVF9NVERfQ09ORklHLAorCUxBU0FUX01URF9GUywKKwlMQVNBVF9NVERfTEFTVAorfTsKKworLyoKKyAqIFRoZSBmb3JtYXQgb2YgdGhlIGRhdGEgcmVjb3JkIGluIHRoZSBFRVBST00uCisgKiBTZWUgRG9jdW1lbnRhdGlvbi9MQVNBVC9lZXByb20udHh0IGZvciBhIGRldGFpbGVkIGRlc2NyaXB0aW9uCisgKiBvZiB0aGUgZmllbGRzIGluIHRoaXMgc3RydWN0LCBhbmQgdGhlIExBU0FUIEhhcmR3YXJlIENvbmZpZ3VyYXRpb24KKyAqIGZpZWxkIHNwZWNpZmljYXRpb24gZm9yIGEgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgdGhlIGNvbmZpZworICogZmllbGQuCisgKi8KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjZGVmaW5lIExBU0FUX0VFUFJPTV9WRVJTSU9OIDcKK3N0cnVjdCBsYXNhdF9lZXByb21fc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQgIHZlcnNpb247CisJdW5zaWduZWQgaW50ICBjZmdbM107CisJdW5zaWduZWQgY2hhciBod2FkZHJbNl07CisJdW5zaWduZWQgY2hhciBwcmludF9wYXJ0bm9bMTJdOworCXVuc2lnbmVkIGNoYXIgdGVybTA7CisJdW5zaWduZWQgY2hhciBwcmludF9zZXJpYWxbMTRdOworCXVuc2lnbmVkIGNoYXIgdGVybTE7CisJdW5zaWduZWQgY2hhciBwcm9kX3BhcnRub1sxMl07CisJdW5zaWduZWQgY2hhciB0ZXJtMjsKKwl1bnNpZ25lZCBjaGFyIHByb2Rfc2VyaWFsWzE0XTsKKwl1bnNpZ25lZCBjaGFyIHRlcm0zOworCXVuc2lnbmVkIGNoYXIgcGFzc3dkX2hhc2hbMTZdOworCXVuc2lnbmVkIGNoYXIgcHdkbnVsbDsKKwl1bnNpZ25lZCBjaGFyIHZlbmRpZDsKKwl1bnNpZ25lZCBjaGFyIHRzX3JlZjsKKwl1bnNpZ25lZCBjaGFyIHRzX3NpZ25vZmY7CisJdW5zaWduZWQgY2hhciByZXNlcnZlZFsxMV07CisJdW5zaWduZWQgY2hhciBkZWJ1Z2FjY2VzczsKKwl1bnNpZ25lZCBzaG9ydCBwcmlkOworCXVuc2lnbmVkIGludCAgc2VydmljZWZsYWc7CisJdW5zaWduZWQgaW50ICBpcGFkZHI7CisJdW5zaWduZWQgaW50ICBuZXRtYXNrOworCXVuc2lnbmVkIGludCAgY3JjMzI7Cit9OworCitzdHJ1Y3QgbGFzYXRfZWVwcm9tX3N0cnVjdF9wcmU3IHsKKwl1bnNpZ25lZCBpbnQgIHZlcnNpb247CisJdW5zaWduZWQgaW50ICBmbGFnc1szXTsKKwl1bnNpZ25lZCBjaGFyIGh3YWRkcjBbNl07CisJdW5zaWduZWQgY2hhciBod2FkZHIxWzZdOworCXVuc2lnbmVkIGNoYXIgcHJpbnRfcGFydG5vWzldOworCXVuc2lnbmVkIGNoYXIgdGVybTA7CisJdW5zaWduZWQgY2hhciBwcmludF9zZXJpYWxbMTRdOworCXVuc2lnbmVkIGNoYXIgdGVybTE7CisJdW5zaWduZWQgY2hhciBwcm9kX3BhcnRub1s5XTsKKwl1bnNpZ25lZCBjaGFyIHRlcm0yOworCXVuc2lnbmVkIGNoYXIgcHJvZF9zZXJpYWxbMTRdOworCXVuc2lnbmVkIGNoYXIgdGVybTM7CisJdW5zaWduZWQgY2hhciBwYXNzd2RfaGFzaFsyNF07CisJdW5zaWduZWQgY2hhciBwd2RudWxsOworCXVuc2lnbmVkIGNoYXIgdmVuZG9yOworCXVuc2lnbmVkIGNoYXIgdHNfcmVmOworCXVuc2lnbmVkIGNoYXIgdHNfc2lnbm9mZjsKKwl1bnNpZ25lZCBjaGFyIHJlc2VydmVkWzZdOworCXVuc2lnbmVkIGludCAgd3JpdGVjb3VudDsKKwl1bnNpZ25lZCBpbnQgIGlwYWRkcjsKKwl1bnNpZ25lZCBpbnQgIG5ldG1hc2s7CisJdW5zaWduZWQgaW50ICBjcmMzMjsKK307CisKKy8qIENvbmZpZ3VyYXRpb24gZGVzY3JpcHRvciBlbmNvZGluZyAtIHNlZSB0aGUgZG9jIGZvciBkZXRhaWxzICovCisKKyNkZWZpbmUgTEFTQVRfVzBfRFNDVFlQRSh2KQkJKCAoICh2KSAgICAgICAgICkgJiAweGYgKQorI2RlZmluZSBMQVNBVF9XMF9CTUlEKHYpCQkoICggKHYpID4+IDB4MDQgKSAmIDB4ZiApCisjZGVmaW5lIExBU0FUX1cwX0NQVVRZUEUodikJCSggKCAodikgPj4gMHgwOCApICYgMHhmICkKKyNkZWZpbmUgTEFTQVRfVzBfQlVTU1BFRUQodikJCSggKCAodikgPj4gMHgwYyApICYgMHhmICkKKyNkZWZpbmUgTEFTQVRfVzBfQ1BVQ0xLKHYpCQkoICggKHYpID4+IDB4MTAgKSAmIDB4ZiApCisjZGVmaW5lIExBU0FUX1cwX1NEUkFNQkFOS1NaKHYpCQkoICggKHYpID4+IDB4MTQgKSAmIDB4ZiApCisjZGVmaW5lIExBU0FUX1cwX1NEUkFNQkFOS1ModikJCSggKCAodikgPj4gMHgxOCApICYgMHhmICkKKyNkZWZpbmUgTEFTQVRfVzBfTDJDQUNIRSh2KQkJKCAoICh2KSA+PiAweDFjICkgJiAweGYgKQorCisjZGVmaW5lIExBU0FUX1cxX0VESEFDKHYpCQkoICggKHYpICAgICAgICAgKSAmIDB4ZiApCisjZGVmaW5lIExBU0FUX1cxX0hJRk4odikJCSggKCAodikgPj4gMHgwNCApICYgMHgxICkKKyNkZWZpbmUgTEFTQVRfVzFfSVNETih2KQkJKCAoICh2KSA+PiAweDA1ICkgJiAweDEgKQorI2RlZmluZSBMQVNBVF9XMV9JREUodikJCQkoICggKHYpID4+IDB4MDYgKSAmIDB4MSApCisjZGVmaW5lIExBU0FUX1cxX0hETEModikJCSggKCAodikgPj4gMHgwNyApICYgMHgxICkKKyNkZWZpbmUgTEFTQVRfVzFfVVNWRVJTSU9OKHYpCQkoICggKHYpID4+IDB4MDggKSAmIDB4MSApCisjZGVmaW5lIExBU0FUX1cxXzRNQUNTKHYpCQkoICggKHYpID4+IDB4MDkgKSAmIDB4MSApCisjZGVmaW5lIExBU0FUX1cxX0VYVFNFUklBTCh2KQkJKCAoICh2KSA+PiAweDBhICkgJiAweDEgKQorI2RlZmluZSBMQVNBVF9XMV9GTEFTSFNJWkUodikJCSggKCAodikgPj4gMHgwYyApICYgMHhmICkKKyNkZWZpbmUgTEFTQVRfVzFfUENJU0xPVFModikJCSggKCAodikgPj4gMHgxMCApICYgMHhmICkKKyNkZWZpbmUgTEFTQVRfVzFfUENJMU9QVCh2KQkJKCAoICh2KSA+PiAweDE0ICkgJiAweGYgKQorI2RlZmluZSBMQVNBVF9XMV9QQ0kyT1BUKHYpCQkoICggKHYpID4+IDB4MTggKSAmIDB4ZiApCisjZGVmaW5lIExBU0FUX1cxX1BDSTNPUFQodikJCSggKCAodikgPj4gMHgxYyApICYgMHhmICkKKworLyogUm91dGluZXMgc3BlY2lmaWMgdG8gTEFTQVQgYm9hcmRzICovCisKKyNkZWZpbmUgTEFTQVRfQk1JRF9NQVNRVUVSQURFMgkJMAorI2RlZmluZSBMQVNBVF9CTUlEX01BU1FVRVJBREVQUk8JMQorI2RlZmluZSBMQVNBVF9CTUlEX1NBRkVQSVBFMjUJCQkyCisjZGVmaW5lIExBU0FUX0JNSURfU0FGRVBJUEU1MAkJCTMKKyNkZWZpbmUgTEFTQVRfQk1JRF9TQUZFUElQRTEwMAkJNAorI2RlZmluZSBMQVNBVF9CTUlEX1NBRkVQSVBFNTAwMAkJNQorI2RlZmluZSBMQVNBVF9CTUlEX1NBRkVQSVBFNzAwMAkJNgorI2RlZmluZSBMQVNBVF9CTUlEX1NBRkVQSVBFMTAwMAkJNworLy8jZGVmaW5lIExBU0FUX0JNSURfU0FGRVBJUEUzMAkJNworLy8jZGVmaW5lIExBU0FUX0JNSURfU0FGRVBJUEU1MTAwCTgKKy8vI2RlZmluZSBMQVNBVF9CTUlEX1NBRkVQSVBFNzEwMAk5CisjZGVmaW5lIExBU0FUX0JNSURfVU5LTk9XTgkJCQkweGYKKyNkZWZpbmUgTEFTQVRfTUFYX0JNSURfTkFNRVMJCQk5ICAgLy8gbm8gbGFyZ2VyIHRoYW4gMTUhCisKKyNkZWZpbmUgTEFTQVRfSEFTX0VESEFDCQkJKCAxIDw8IDAgKQorI2RlZmluZSBMQVNBVF9FREhBQ19GQVNUCQkoIDEgPDwgMSApCisjZGVmaW5lIExBU0FUX0hBU19FQURJCQkJKCAxIDw8IDIgKQorI2RlZmluZSBMQVNBVF9IQVNfSElGTgkJCSggMSA8PCAzICkKKyNkZWZpbmUgTEFTQVRfSEFTX0lTRE4JCQkoIDEgPDwgNCApCisjZGVmaW5lIExBU0FUX0hBU19MRUFTRURMSU5FX0lGCQkoIDEgPDwgNSApCisjZGVmaW5lIExBU0FUX0hBU19IREMJCQkoIDEgPDwgNiApCisKKyNkZWZpbmUgTEFTQVRfUFJJRF9NQVNRVUVSQURFMgkJMAorI2RlZmluZSBMQVNBVF9QUklEX01BU1FVRVJBREVQUk8JMQorI2RlZmluZSBMQVNBVF9QUklEX1NBRkVQSVBFMjUJCQkyCisjZGVmaW5lIExBU0FUX1BSSURfU0FGRVBJUEU1MAkJCTMKKyNkZWZpbmUgTEFTQVRfUFJJRF9TQUZFUElQRTEwMAkJNAorI2RlZmluZSBMQVNBVF9QUklEX1NBRkVQSVBFNTAwMAkJNQorI2RlZmluZSBMQVNBVF9QUklEX1NBRkVQSVBFNzAwMAkJNgorI2RlZmluZSBMQVNBVF9QUklEX1NBRkVQSVBFMzAJCQk3CisjZGVmaW5lIExBU0FUX1BSSURfU0FGRVBJUEU1MTAwCQk4CisjZGVmaW5lIExBU0FUX1BSSURfU0FGRVBJUEU3MTAwCQk5CisKKyNkZWZpbmUgTEFTQVRfUFJJRF9TQUZFUElQRTExMTAJCTEwCisjZGVmaW5lIExBU0FUX1BSSURfU0FGRVBJUEUzMDIwCQkxMQorI2RlZmluZSBMQVNBVF9QUklEX1NBRkVQSVBFMzAzMAkJMTIKKyNkZWZpbmUgTEFTQVRfUFJJRF9TQUZFUElQRTUwMjAJCTEzCisjZGVmaW5lIExBU0FUX1BSSURfU0FGRVBJUEU1MDMwCQkxNAorI2RlZmluZSBMQVNBVF9QUklEX1NBRkVQSVBFMTEyMAkJMTUKKyNkZWZpbmUgTEFTQVRfUFJJRF9TQUZFUElQRTExMzAJCTE2CisjZGVmaW5lIExBU0FUX1BSSURfU0FGRVBJUEU2MDEwCQkxNworI2RlZmluZSBMQVNBVF9QUklEX1NBRkVQSVBFNjExMAkJMTgKKyNkZWZpbmUgTEFTQVRfUFJJRF9TQUZFUElQRTYyMTAJCTE5CisjZGVmaW5lIExBU0FUX1BSSURfU0FGRVBJUEUxMDIwCQkyMAorI2RlZmluZSBMQVNBVF9QUklEX1NBRkVQSVBFMTA0MAkJMjEKKyNkZWZpbmUgTEFTQVRfUFJJRF9TQUZFUElQRTEwNjAJCTIyCisKK3N0cnVjdCBsYXNhdF9pbmZvIHsKKwl1bnNpZ25lZCBpbnQgIGxpX2NwdV9oejsKKwl1bnNpZ25lZCBpbnQgIGxpX2J1c19oejsKKwl1bnNpZ25lZCBpbnQgIGxpX2JtaWQ7CisJdW5zaWduZWQgaW50ICBsaV9tZW1zaXplOworCXVuc2lnbmVkIGludCAgbGlfZmxhc2hfc2l6ZTsKKwl1bnNpZ25lZCBpbnQgIGxpX3ByaWQ7CisJdW5zaWduZWQgY2hhciBsaV9ibXN0clsxNl07CisJdW5zaWduZWQgY2hhciBsaV9uYW1lc3RyWzMyXTsKKwl1bnNpZ25lZCBjaGFyIGxpX3R5cGVzdHJbMTZdOworCS8qIEluZm8gb24gdGhlIEZsYXNoIGxheW91dCAqLworCXVuc2lnbmVkIGludCAgbGlfZmxhc2hfYmFzZTsKKwl1bnNpZ25lZCBsb25nIGxpX2ZsYXNocGFydF9iYXNlW0xBU0FUX01URF9MQVNUXTsKKwl1bnNpZ25lZCBsb25nIGxpX2ZsYXNocGFydF9zaXplW0xBU0FUX01URF9MQVNUXTsKKwlzdHJ1Y3QgbGFzYXRfZWVwcm9tX3N0cnVjdCBsaV9lZXByb21faW5mbzsKKwl1bnNpZ25lZCBpbnQgIGxpX2VlcHJvbV91cGdyYWRlX3ZlcnNpb247CisJdW5zaWduZWQgaW50ICBsaV9kZWJ1Z2FjY2VzczsKK307CisKK2V4dGVybiBzdHJ1Y3QgbGFzYXRfaW5mbyBsYXNhdF9ib2FyZF9pbmZvOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbGFzYXRfZmxhc2hfcGFydGl0aW9uX3N0YXJ0KGludCBwYXJ0bm8pCit7CisJaWYgKHBhcnRubyA8IDAgfHwgcGFydG5vID49IExBU0FUX01URF9MQVNUKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBsYXNhdF9ib2FyZF9pbmZvLmxpX2ZsYXNocGFydF9iYXNlW3BhcnRub107Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBsYXNhdF9mbGFzaF9wYXJ0aXRpb25fc2l6ZShpbnQgcGFydG5vKQoreworCWlmIChwYXJ0bm8gPCAwIHx8IHBhcnRubyA+PSBMQVNBVF9NVERfTEFTVCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gbGFzYXRfYm9hcmRfaW5mby5saV9mbGFzaHBhcnRfc2l6ZVtwYXJ0bm9dOworfQorCisvKiBDYWxsZWQgZnJvbSBzZXR1cCgpIHRvIGluaXRpYWxpemUgdGhlIGdsb2JhbCBib2FyZF9pbmZvIHN0cnVjdCAqLworZXh0ZXJuIGludCBsYXNhdF9pbml0X2JvYXJkX2luZm8odm9pZCk7CisKKy8qIFdyaXRlIHRoZSBtb2RpZmllZCBFRVBST00gaW5mbyBzdHJ1Y3QgKi8KK2V4dGVybiB2b2lkIGxhc2F0X3dyaXRlX2VlcHJvbV9pbmZvKHZvaWQpOworCisjZGVmaW5lIE5fTUFDSFRZUEVTCQkyCisvKiBmb3IgY2FsaWJyYXRpb24gb2YgZGVsYXlzICovCisKKy8qIHRoZSBsYXNhdF9uZGVsYXkgZnVuY3Rpb24gaXMgbmVjZXNzYXJ5IGJlY2F1c2UgaXQgaXMgdXNlZCBhdCBhbgorICogZWFybHkgc3RhZ2Ugb2YgdGhlIGJvb3QgcHJvY2VzcyB3aGVyZSBuZGVsYXkgaXMgbm90IGNhbGlicmF0ZWQuCisgKiBJdCBpcyB1c2VkIGZvciB0aGUgYml0LWJhbmdpbmcgcnRjIGFuZCBlZXByb20gZHJpdmVycyAqLworCisjaW5jbHVkZSA8YXNtL2RlbGF5Lmg+CisvKiBjYWxjdWxhdGluZyB3aXRoIHRoZSBzbG93ZXN0IGJvYXJkIHdpdGggMTAwIE1IeiBjbG9jayAqLworI2RlZmluZSBMQVNBVF8xMDBfRElWSURFUiAyMAorLyogQWxsIDIwMCdzIHJ1biBhdCAyNTAgTUh6IGNsb2NrICovCisjZGVmaW5lIExBU0FUXzIwMF9ESVZJREVSIDgKKworZXh0ZXJuIHVuc2lnbmVkIGludCBsYXNhdF9uZGVsYXlfZGl2aWRlcjsKKworc3RhdGljIGlubGluZSB2b2lkIGxhc2F0X25kZWxheSh1bnNpZ25lZCBpbnQgbnMpCit7CisgICAgICAgICAgICBfX2RlbGF5KG5zIC8gbGFzYXRfbmRlbGF5X2RpdmlkZXIpOworfQorCitleHRlcm4gdm9pZCAoKiBwcm9tX3ByaW50ZikoY29uc3QgY2hhciAqZm10LCAuLi4pOworCisjZW5kaWYgLyogIWRlZmluZWQgKF9MQU5HVUFHRV9BU1NFTUJMWSkgKi8KKworI2RlZmluZSBMQVNBVF9TRVJWSUNFTU9ERV9NQUdJQ18xICAgICAweGRlYWRiZWVmCisjZGVmaW5lIExBU0FUX1NFUlZJQ0VNT0RFX01BR0lDXzIgICAgIDB4ZmVkZWFiYmEKKworLyogTGFzYXQgMTAwIGJvYXJkcyAqLworI2RlZmluZSBMQVNBVF9HVF9CQVNFICAgICAgICAgICAoS1NFRzFBRERSKDB4MTQwMDAwMDApKQorCisvKiBMYXNhdCAyMDAgYm9hcmRzICovCisjZGVmaW5lIFZyYzUwNzRfUEhZU19CQVNFICAgICAgIDB4MWZhMDAwMDAKKyNkZWZpbmUgVnJjNTA3NF9CQVNFICAgICAgICAgICAgKEtTRUcxQUREUihWcmM1MDc0X1BIWVNfQkFTRSkpCisjZGVmaW5lIFBDSV9XSU5ET1cxICAgICAgICAgICAgIDB4MWEwMDAwMDAKKworI2VuZGlmIC8qIF9MQVNBVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2xhc2F0L2xhc2F0aW50LmggYi9pbmNsdWRlL2FzbS1taXBzL2xhc2F0L2xhc2F0aW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY1NDc0ZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbGFzYXQvbGFzYXRpbnQuaApAQCAtMCwwICsxLDEyIEBACisjZGVmaW5lIExBU0FUSU5UX0VORCAxNgorCisvKiBsYXNhdCAxMDAgKi8KKyNkZWZpbmUgTEFTQVRfSU5UX1NUQVRVU19SRUdfMTAwCShLU0VHMUFERFIoMHgxYzg4MDAwMCkpCisjZGVmaW5lIExBU0FUX0lOVF9NQVNLX1JFR18xMDAJCShLU0VHMUFERFIoMHgxYzg5MDAwMCkpCisjZGVmaW5lIExBU0FUSU5UX01BU0tfU0hJRlRfMTAwCQkwCisKKy8qIGxhc2F0IDIwMCAqLworI2RlZmluZSBMQVNBVF9JTlRfU1RBVFVTX1JFR18yMDAJKEtTRUcxQUREUigweDExMDQwMDNjKSkKKyNkZWZpbmUgTEFTQVRfSU5UX01BU0tfUkVHXzIwMAkJKEtTRUcxQUREUigweDExMDQwMDNjKSkKKyNkZWZpbmUgTEFTQVRJTlRfTUFTS19TSElGVF8yMDAJCTE2CisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbGFzYXQvcGljdnVlLmggYi9pbmNsdWRlL2FzbS1taXBzL2xhc2F0L3BpY3Z1ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyYTQ5MmUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2xhc2F0L3BpY3Z1ZS5oCkBAIC0wLDAgKzEsMTUgQEAKKy8qIExhc2F0IDEwMCAqLworI2RlZmluZSBQVkNfUkVHXzEwMAkJS1NFRzFBRERSKDB4MWM4MjAwMDApCisjZGVmaW5lIFBWQ19EQVRBX1NISUZUXzEwMAkwCisjZGVmaW5lIFBWQ19EQVRBX01fMTAwCQkweEZGCisjZGVmaW5lIFBWQ19FXzEwMAkJKDEgPDwgOCkKKyNkZWZpbmUgUFZDX1JXXzEwMAkJKDEgPDwgOSkKKyNkZWZpbmUgUFZDX1JTXzEwMAkJKDEgPDwgMTApCisKKy8qIExhc2F0IDIwMCAqLworI2RlZmluZSBQVkNfUkVHXzIwMAkJS1NFRzFBRERSKDB4MTEwMDAwMDApCisjZGVmaW5lIFBWQ19EQVRBX1NISUZUXzIwMAkyNAorI2RlZmluZSBQVkNfREFUQV9NXzIwMAkJKDB4RkYgPDwgUFZDX0RBVEFfU0hJRlRfMjAwKQorI2RlZmluZSBQVkNfRV8yMDAJCSgxIDw8IDE2KQorI2RlZmluZSBQVkNfUldfMjAwCQkoMSA8PCAxNykKKyNkZWZpbmUgUFZDX1JTXzIwMAkJKDEgPDwgMTgpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2xhc2F0L3NlcmlhbC5oIGIvaW5jbHVkZS9hc20tbWlwcy9sYXNhdC9zZXJpYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWQwZmI3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9sYXNhdC9zZXJpYWwuaApAQCAtMCwwICsxLDEzIEBACisjaW5jbHVkZSA8YXNtL2xhc2F0L2xhc2F0Lmg+CisKKy8qIExhc2F0IDEwMCBib2FyZHMgc2VyaWFsIGNvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgTEFTQVRfQkFTRV9CQVVEXzEwMCAJCSggNzM3MjgwMCAvIDE2ICkgCisjZGVmaW5lIExBU0FUX1VBUlRfUkVHU19CQVNFXzEwMAkweDFjOGIwMDAwCisjZGVmaW5lIExBU0FUX1VBUlRfUkVHU19TSElGVF8xMDAJMgorI2RlZmluZSBMQVNBVElOVF9VQVJUXzEwMAkJOAorCisvKiAqIExBU0FUIDIwMCBib2FyZHMgc2VyaWFsIGNvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgTEFTQVRfQkFTRV9CQVVEXzIwMAkJKDEwMDAwMDAwMCAvIDE2IC8gMTIpIAorI2RlZmluZSBMQVNBVF9VQVJUX1JFR1NfQkFTRV8yMDAJKFZyYzUwNzRfUEhZU19CQVNFICsgMHgwMzAwKQorI2RlZmluZSBMQVNBVF9VQVJUX1JFR1NfU0hJRlRfMjAwCTMKKyNkZWZpbmUgTEFTQVRJTlRfVUFSVF8yMDAJCTEzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2xpbmthZ2UuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbGlua2FnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5MWMyZDAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2xpbmthZ2UuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19BU01fTElOS0FHRV9ICisjZGVmaW5lIF9fQVNNX0xJTktBR0VfSAorCisvKiBOb3RoaW5nIHRvIHNlZSBoZXJlLi4uICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9sb2NhbC5oIGIvaW5jbHVkZS9hc20tbWlwcy9sb2NhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlYjZiZjY2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9sb2NhbC5oCkBAIC0wLDAgKzEsNjEgQEAKKyNpZm5kZWYgX0FTTV9MT0NBTF9ICisjZGVmaW5lIF9BU01fTE9DQUxfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorCisjaWZkZWYgQ09ORklHX01JUFMzMgorCit0eXBlZGVmIGF0b21pY190IGxvY2FsX3Q7CisKKyNkZWZpbmUgTE9DQUxfSU5JVChpKQlBVE9NSUNfSU5JVChpKQorI2RlZmluZSBsb2NhbF9yZWFkKHYpCWF0b21pY19yZWFkKHYpCisjZGVmaW5lIGxvY2FsX3NldCh2LGkpCWF0b21pY19zZXQodixpKQorCisjZGVmaW5lIGxvY2FsX2luYyh2KQlhdG9taWNfaW5jKHYpCisjZGVmaW5lIGxvY2FsX2RlYyh2KQlhdG9taWNfZGVjKHYpCisjZGVmaW5lIGxvY2FsX2FkZChpLCB2KQlhdG9taWNfYWRkKGksIHYpCisjZGVmaW5lIGxvY2FsX3N1YihpLCB2KQlhdG9taWNfc3ViKGksIHYpCisKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01JUFM2NAorCit0eXBlZGVmIGF0b21pYzY0X3QgbG9jYWxfdDsKKworI2RlZmluZSBMT0NBTF9JTklUKGkpCUFUT01JQzY0X0lOSVQoaSkKKyNkZWZpbmUgbG9jYWxfcmVhZCh2KQlhdG9taWM2NF9yZWFkKHYpCisjZGVmaW5lIGxvY2FsX3NldCh2LGkpCWF0b21pYzY0X3NldCh2LGkpCisKKyNkZWZpbmUgbG9jYWxfaW5jKHYpCWF0b21pYzY0X2luYyh2KQorI2RlZmluZSBsb2NhbF9kZWModikJYXRvbWljNjRfZGVjKHYpCisjZGVmaW5lIGxvY2FsX2FkZChpLCB2KQlhdG9taWM2NF9hZGQoaSwgdikKKyNkZWZpbmUgbG9jYWxfc3ViKGksIHYpCWF0b21pYzY0X3N1YihpLCB2KQorCisjZW5kaWYKKworI2RlZmluZSBfX2xvY2FsX2luYyh2KQkJKCh2KS0+Y291bnRlcisrKQorI2RlZmluZSBfX2xvY2FsX2RlYyh2KQkJKCh2KS0+Y291bnRlci0tKQorI2RlZmluZSBfX2xvY2FsX2FkZChpLHYpCSgodiktPmNvdW50ZXIrPShpKSkKKyNkZWZpbmUgX19sb2NhbF9zdWIoaSx2KQkoKHYpLT5jb3VudGVyLT0oaSkpCisKKy8qCisgKiBVc2UgdGhlc2UgZm9yIHBlci1jcHUgbG9jYWxfdCB2YXJpYWJsZXM6IG9uIHNvbWUgYXJjaHMgdGhleSBhcmUKKyAqIG11Y2ggbW9yZSBlZmZpY2llbnQgdGhhbiB0aGVzZSBuYWl2ZSBpbXBsZW1lbnRhdGlvbnMuICBOb3RlIHRoZXkgdGFrZQorICogYSB2YXJpYWJsZSwgbm90IGFuIGFkZHJlc3MuCisgKi8KKyNkZWZpbmUgY3B1X2xvY2FsX3JlYWQodikJbG9jYWxfcmVhZCgmX19nZXRfY3B1X3Zhcih2KSkKKyNkZWZpbmUgY3B1X2xvY2FsX3NldCh2LCBpKQlsb2NhbF9zZXQoJl9fZ2V0X2NwdV92YXIodiksIChpKSkKKworI2RlZmluZSBjcHVfbG9jYWxfaW5jKHYpCWxvY2FsX2luYygmX19nZXRfY3B1X3Zhcih2KSkKKyNkZWZpbmUgY3B1X2xvY2FsX2RlYyh2KQlsb2NhbF9kZWMoJl9fZ2V0X2NwdV92YXIodikpCisjZGVmaW5lIGNwdV9sb2NhbF9hZGQoaSwgdikJbG9jYWxfYWRkKChpKSwgJl9fZ2V0X2NwdV92YXIodikpCisjZGVmaW5lIGNwdV9sb2NhbF9zdWIoaSwgdikJbG9jYWxfc3ViKChpKSwgJl9fZ2V0X2NwdV92YXIodikpCisKKyNkZWZpbmUgX19jcHVfbG9jYWxfaW5jKHYpCV9fbG9jYWxfaW5jKCZfX2dldF9jcHVfdmFyKHYpKQorI2RlZmluZSBfX2NwdV9sb2NhbF9kZWModikJX19sb2NhbF9kZWMoJl9fZ2V0X2NwdV92YXIodikpCisjZGVmaW5lIF9fY3B1X2xvY2FsX2FkZChpLCB2KQlfX2xvY2FsX2FkZCgoaSksICZfX2dldF9jcHVfdmFyKHYpKQorI2RlZmluZSBfX2NwdV9sb2NhbF9zdWIoaSwgdikJX19sb2NhbF9zdWIoKGkpLCAmX19nZXRfY3B1X3Zhcih2KSkKKworI2VuZGlmIC8qIF9BU01fTE9DQUxfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tNDh0MzUuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbTQ4dDM1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ0ODUyZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbTQ4dDM1LmgKQEAgLTAsMCArMSwyNyBAQAorLyoKKyAqICBSZWdpc3RlcnMgZm9yIHRoZSBTR1MtVGhvbXNvbiBNNDhUMzUgVGltZWtlZXBlciBSQU0gY2hpcAorICovCisjaWZuZGVmIF9BU01fTTQ4VDM1X0gKKyNkZWZpbmUgX0FTTV9NNDhUMzVfSAorCisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKworZXh0ZXJuIHNwaW5sb2NrX3QgcnRjX2xvY2s7CisKK3N0cnVjdCBtNDh0MzVfcnRjIHsKKwl2b2xhdGlsZSB1OAlwYWRbMHg3ZmY4XTsgICAgLyogc3RhcnRzIGF0IDB4N2ZmOCAqLworCXZvbGF0aWxlIHU4CWNvbnRyb2w7CisJdm9sYXRpbGUgdTgJc2VjOworCXZvbGF0aWxlIHU4CW1pbjsKKwl2b2xhdGlsZSB1OAlob3VyOworCXZvbGF0aWxlIHU4CWRheTsKKwl2b2xhdGlsZSB1OAlkYXRlOworCXZvbGF0aWxlIHU4CW1vbnRoOworCXZvbGF0aWxlIHU4CXllYXI7Cit9OworCisjZGVmaW5lIE00OFQzNV9SVENfU0VUCQkweDgwCisjZGVmaW5lIE00OFQzNV9SVENfU1RPUFBFRAkweDgwCisjZGVmaW5lIE00OFQzNV9SVENfUkVBRAkJMHg0MAorCisjZW5kaWYgLyogX0FTTV9NNDhUMzVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tNDh0MzcuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbTQ4dDM3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FiZjg2MgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbTQ4dDM3LmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqICBSZWdpc3RlcnMgZm9yIHRoZSBTR1MtVGhvbXNvbiBNNDhUMzcgVGltZWtlZXBlciBSQU0gY2hpcAorICovCisjaWZuZGVmIF9BU01fTTQ4VDM3X0gKKyNkZWZpbmUgX0FTTV9NNDhUMzdfSAorCisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKworZXh0ZXJuIHNwaW5sb2NrX3QgcnRjX2xvY2s7CisKK3N0cnVjdCBtNDh0MzdfcnRjIHsKKwl2b2xhdGlsZSB1OAlwYWRbMHg3ZmYwXTsgICAgLyogTlZSQU0gKi8KKwl2b2xhdGlsZSB1OAlmbGFnczsKKwl2b2xhdGlsZSB1OAljZW50dXJ5OworCXZvbGF0aWxlIHU4CWFsYXJtX3NlYzsKKwl2b2xhdGlsZSB1OAlhbGFybV9taW47CisJdm9sYXRpbGUgdTgJYWxhcm1faG91cjsKKwl2b2xhdGlsZSB1OAlhbGFybV9kYXRhOworCXZvbGF0aWxlIHU4CWludGVycnVwdHM7CisJdm9sYXRpbGUgdTgJd2F0Y2hkb2c7CisJdm9sYXRpbGUgdTgJY29udHJvbDsKKwl2b2xhdGlsZSB1OAlzZWM7CisJdm9sYXRpbGUgdTgJbWluOworCXZvbGF0aWxlIHU4CWhvdXI7CisJdm9sYXRpbGUgdTgJZGF5OworCXZvbGF0aWxlIHU4CWRhdGU7CisJdm9sYXRpbGUgdTgJbW9udGg7CisJdm9sYXRpbGUgdTgJeWVhcjsKK307CisKKyNkZWZpbmUgTTQ4VDM3X1JUQ19TRVQJCTB4ODAKKyNkZWZpbmUgTTQ4VDM3X1JUQ19TVE9QUEVECTB4ODAKKyNkZWZpbmUgTTQ4VDM3X1JUQ19SRUFECQkweDQwCisKKyNlbmRpZiAvKiBfQVNNX000OFQzN19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtYXRsYXMvbWMxNDY4MThydGMuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1hdGxhcy9tYzE0NjgxOHJ0Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5NzUyMmUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtYXRsYXMvbWMxNDY4MThydGMuaApAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDA1ICBNSVBTIFRlY2hub2xvZ2llcywgSW5jLgorICoJQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCUF1dGhvcnM6IENhcnN0ZW4gTGFuZ2dhYXJkIDxjYXJzdGVubEBtaXBzLmNvbT4KKyAqCQkgTWFjaWVqIFcuIFJvenlja2kgPG1hY3JvQG1pcHMuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAwNSBSYWxmIEJhZWNobGUgKHJhbGZAbGludXgtbWlwcy5vcmcpCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChWZXJzaW9uIDIpIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworI2lmbmRlZiBfX0FTTV9NQUNIX0FUTEFTX01DMTQ2ODE4UlRDX0gKKyNkZWZpbmUgX19BU01fTUFDSF9BVExBU19NQzE0NjgxOFJUQ19ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgorCisjaW5jbHVkZSA8YXNtL21pcHMtYm9hcmRzL2F0bGFzLmg+CisjaW5jbHVkZSA8YXNtL21pcHMtYm9hcmRzL2F0bGFzaW50Lmg+CisKKyNkZWZpbmUgUlRDX1BPUlQoeCkJKEFUTEFTX1JUQ19BRFJfUkVHICsgKHgpICogOCkKKyNkZWZpbmUgUlRDX0lPX0VYVEVOVAkweDEwMAorI2RlZmluZSBSVENfSU9NQVBQRUQJMAorI2RlZmluZSBSVENfSVJRCQlBVExBU0lOVF9SVEMKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIENNT1NfUkVBRCh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJdm9sYXRpbGUgdTMyICppcmVnID0gKHZvaWQgKilDS1NFRzFBRERSKFJUQ19QT1JUKDApKTsKKwl2b2xhdGlsZSB1MzIgKmRyZWcgPSAodm9pZCAqKUNLU0VHMUFERFIoUlRDX1BPUlQoMSkpOworCisJKmlyZWcgPSBhZGRyOworCXJldHVybiAqZHJlZzsKK30KKworc3RhdGljIGlubGluZSB2b2lkIENNT1NfV1JJVEUodW5zaWduZWQgY2hhciBkYXRhLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJdm9sYXRpbGUgdTMyICppcmVnID0gKHZvaWQgKilDS1NFRzFBRERSKFJUQ19QT1JUKDApKTsKKwl2b2xhdGlsZSB1MzIgKmRyZWcgPSAodm9pZCAqKUNLU0VHMUFERFIoUlRDX1BPUlQoMSkpOworCisJKmlyZWcgPSBhZGRyOworCSpkcmVnID0gZGF0YTsKK30KKworI2RlZmluZSBSVENfQUxXQVlTX0JDRAkwCisKKyNkZWZpbmUgbWMxNDY4MThfZGVjb2RlX3llYXIoeWVhcikgKCh5ZWFyKSA8IDcwID8gKHllYXIpICsgMjAwMCA6ICh5ZWFyKSArIDE5NzApCisKKyNlbmRpZiAvKiBfX0FTTV9NQUNIX0FUTEFTX01DMTQ2ODE4UlRDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1hdTF4MDAvYXUxMDAwLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtYXUxeDAwL2F1MTAwMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiMzZlYTMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtYXUxeDAwL2F1MTAwMC5oCkBAIC0wLDAgKzEsMTQwOCBAQAorLyoKKyAqCisgKiBCUklFRiBNT0RVTEUgREVTQ1JJUFRJT04KKyAqCUluY2x1ZGUgZmlsZSBmb3IgQWxjaGVteSBTZW1pY29uZHVjdG9yJ3MgQXUxayBDUFUuCisgKgorICogQ29weXJpZ2h0IDIwMDAsMjAwMSBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KKyAqIEF1dGhvcjogTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICogICAgICAgICAJcHBvcG92QG12aXN0YS5jb20gb3Igc291cmNlQG12aXN0YS5jb20KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVEhJUyAgU09GVFdBUkUgIElTIFBST1ZJREVEICAgYGBBUyAgSVMnJyBBTkQgICBBTlkgIEVYUFJFU1MgT1IgSU1QTElFRAorICogIFdBUlJBTlRJRVMsICAgSU5DTFVESU5HLCBCVVQgTk9UICBMSU1JVEVEICBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTgorICogIE5PICBFVkVOVCAgU0hBTEwgICBUSEUgQVVUSE9SICBCRSAgICBMSUFCTEUgRk9SIEFOWSAgIERJUkVDVCwgSU5ESVJFQ1QsCisgKiAgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiAgTk9UIExJTUlURUQgICBUTywgUFJPQ1VSRU1FTlQgT0YgIFNVQlNUSVRVVEUgR09PRFMgIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCisgKiAgVVNFLCBEQVRBLCAgT1IgUFJPRklUUzsgT1IgIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiAgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworIC8qCisgICogc29tZSBkZWZpbml0aW9ucyBhZGQgYnkgdGFrdXpvQHNtLnNvbnkuY28uanAgYW5kIHNhdG9Ac20uc29ueS5jby5qcAorICAqLworCisjaWZuZGVmIF9BVTEwMDBfSF8KKyNkZWZpbmUgX0FVMTAwMF9IXworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpZm5kZWYgX0xBTkdVQUdFX0FTU0VNQkxZCisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCisvKiBjcHUgcGlwZWxpbmUgZmx1c2ggKi8KK3ZvaWQgc3RhdGljIGlubGluZSBhdV9zeW5jKHZvaWQpCit7CisJX19hc21fXyB2b2xhdGlsZSAoInN5bmMiKTsKK30KKwordm9pZCBzdGF0aWMgaW5saW5lIGF1X3N5bmNfdWRlbGF5KGludCB1cykKK3sKKwlfX2FzbV9fIHZvbGF0aWxlICgic3luYyIpOworCXVkZWxheSh1cyk7Cit9CisKK3ZvaWQgc3RhdGljIGlubGluZSBhdV9zeW5jX2RlbGF5KGludCBtcykKK3sKKwlfX2FzbV9fIHZvbGF0aWxlICgic3luYyIpOworCW1kZWxheShtcyk7Cit9CisKK3ZvaWQgc3RhdGljIGlubGluZSBhdV93cml0ZWIodTggdmFsLCBpbnQgcmVnKQoreworCSoodm9sYXRpbGUgdTggKikocmVnKSA9IHZhbDsKK30KKwordm9pZCBzdGF0aWMgaW5saW5lIGF1X3dyaXRldyh1MTYgdmFsLCBpbnQgcmVnKQoreworCSoodm9sYXRpbGUgdTE2ICopKHJlZykgPSB2YWw7Cit9CisKK3ZvaWQgc3RhdGljIGlubGluZSBhdV93cml0ZWwodTMyIHZhbCwgaW50IHJlZykKK3sKKwkqKHZvbGF0aWxlIHUzMiAqKShyZWcpID0gdmFsOworfQorCitzdGF0aWMgaW5saW5lIHU4IGF1X3JlYWRiKHVuc2lnbmVkIGxvbmcgcG9ydCkKK3sKKwlyZXR1cm4gKCoodm9sYXRpbGUgdTggKilwb3J0KTsKK30KKworc3RhdGljIGlubGluZSB1MTYgYXVfcmVhZHcodW5zaWduZWQgbG9uZyBwb3J0KQoreworCXJldHVybiAoKih2b2xhdGlsZSB1MTYgKilwb3J0KTsKK30KKworc3RhdGljIGlubGluZSB1MzIgYXVfcmVhZGwodW5zaWduZWQgbG9uZyBwb3J0KQoreworCXJldHVybiAoKih2b2xhdGlsZSB1MzIgKilwb3J0KTsKK30KKworLyogVGhlc2UgbmV4dCB0aHJlZSBmdW5jdGlvbnMgc2hvdWxkIGJlIGEgZ2VuZXJpYyBwYXJ0IG9mIHRoZSBNSVBTCisgKiBrZXJuZWwgKHdpdGggdGhlICdhdV8nIHJlbW92ZWQgZnJvbSB0aGUgbmFtZSkgYW5kIHNlbGVjdGVkIGZvcgorICogcHJvY2Vzc29ycyB0aGF0IHN1cHBvcnQgdGhlIGluc3RydWN0aW9ucy4KKyAqIFRha2VuIGZyb20gUFBDIHRyZWUuICAtLSBEYW4KKyAqLworLyogUmV0dXJuIHRoZSBiaXQgcG9zaXRpb24gb2YgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgMSBiaXQgaW4gYSB3b3JkICovCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19pbG9nMih1bnNpZ25lZCBpbnQgeCkKK3sKKwlpbnQgbHo7CisKKwlhc20gdm9sYXRpbGUgKAorCQkiLnNldFx0bm9yZW9yZGVyXG5cdCIKKwkJIi5zZXRcdG5vYXRcblx0IgorCQkiLnNldFx0bWlwczMyXG5cdCIKKwkJImNselx0JTAsJTFcblx0IgorCQkiLnNldFx0bWlwczBcblx0IgorCQkiLnNldFx0YXRcblx0IgorCQkiLnNldFx0cmVvcmRlciIKKwkJOiAiPXIiIChseikKKwkJOiAiciIgKHgpKTsKKworCXJldHVybiAzMSAtIGx6OworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgYXVfZmZ6KHVuc2lnbmVkIGludCB4KQoreworCWlmICgoeCA9IH54KSA9PSAwKQorCQlyZXR1cm4gMzI7CisJcmV0dXJuIF9faWxvZzIoeCAmIC14KTsKK30KKworLyoKKyAqIGZmczogZmluZCBmaXJzdCBiaXQgc2V0LiBUaGlzIGlzIGRlZmluZWQgdGhlIHNhbWUgd2F5IGFzCisgKiB0aGUgbGliYyBhbmQgY29tcGlsZXIgYnVpbHRpbiBmZnMgcm91dGluZXMsIHRoZXJlZm9yZQorICogZGlmZmVycyBpbiBzcGlyaXQgZnJvbSB0aGUgYWJvdmUgZmZ6IChtYW4gZmZzKS4KKyAqLworc3RhdGljIF9faW5saW5lX18gaW50IGF1X2ZmcyhpbnQgeCkKK3sKKwlyZXR1cm4gX19pbG9nMih4ICYgLXgpICsgMTsKK30KKworLyogYXJjaC9taXBzL2F1MTAwMC9jb21tb24vY2xvY2tzLmMgKi8KK2V4dGVybiB2b2lkIHNldF9hdTF4MDBfc3BlZWQodW5zaWduZWQgaW50IG5ld19mcmVxKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgZ2V0X2F1MXgwMF9zcGVlZCh2b2lkKTsKK2V4dGVybiB2b2lkIHNldF9hdTF4MDBfdWFydF9iYXVkX2Jhc2UodW5zaWduZWQgbG9uZyBuZXdfYmF1ZF9iYXNlKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGdldF9hdTF4MDBfdWFydF9iYXVkX2Jhc2Uodm9pZCk7CitleHRlcm4gdm9pZCBzZXRfYXUxeDAwX2xjZF9jbG9jayh2b2lkKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgZ2V0X2F1MXgwMF9sY2RfY2xvY2sodm9pZCk7CisKKy8qCisgKiBFdmVyeSBib2FyZCBkZXNjcmliZXMgaXRzIElSUSBtYXBwaW5nIHdpdGggdGhpcyB0YWJsZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgYXUxeHh4X2lycW1hcCB7CisJaW50CWltX2lycTsKKwlpbnQJaW1fdHlwZTsKKwlpbnQJaW1fcmVxdWVzdDsKK30gYXUxeHh4X2lycV9tYXBfdDsKKworLyoKKyAqIGluaXRfSVJRIGxvb2tzIGZvciBhIHRhYmxlIHdpdGggdGhpcyBuYW1lLgorICovCitleHRlcm4gYXUxeHh4X2lycV9tYXBfdCBhdTF4eHhfaXJxX21hcFtdOworCisjZW5kaWYgLyogIWRlZmluZWQgKF9MQU5HVUFHRV9BU1NFTUJMWSkgKi8KKworI2lmZGVmIENPTkZJR19QTQorLyogbm8gQ1AwIHRpbWVyIGlycSAqLworI2RlZmluZSBBTExJTlRTIChJRV9JUlEwIHwgSUVfSVJRMSB8IElFX0lSUTIgfCBJRV9JUlEzIHwgSUVfSVJRNCkKKyNlbHNlCisjZGVmaW5lIEFMTElOVFMgKElFX0lSUTAgfCBJRV9JUlExIHwgSUVfSVJRMiB8IElFX0lSUTMgfCBJRV9JUlE0IHwgSUVfSVJRNSkKKyNlbmRpZgorCisvKiBTRFJBTSBDb250cm9sbGVyICovCisjaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTAwMCkgfHwgZGVmaW5lZChDT05GSUdfU09DX0FVMTUwMCkgfHwgZGVmaW5lZChDT05GSUdfU09DX0FVMTEwMCkKKyNkZWZpbmUgTUVNX1NETU9ERTAgICAgICAgICAgICAgICAgMHhCNDAwMDAwMAorI2RlZmluZSBNRU1fU0RNT0RFMSAgICAgICAgICAgICAgICAweEI0MDAwMDA0CisjZGVmaW5lIE1FTV9TRE1PREUyICAgICAgICAgICAgICAgIDB4QjQwMDAwMDgKKworI2RlZmluZSBNRU1fU0RBRERSMCAgICAgICAgICAgICAgICAweEI0MDAwMDBDCisjZGVmaW5lIE1FTV9TREFERFIxICAgICAgICAgICAgICAgIDB4QjQwMDAwMTAKKyNkZWZpbmUgTUVNX1NEQUREUjIgICAgICAgICAgICAgICAgMHhCNDAwMDAxNAorCisjZGVmaW5lIE1FTV9TRFJFRkNGRyAgICAgICAgICAgICAgIDB4QjQwMDAwMTgKKyNkZWZpbmUgTUVNX1NEUFJFQ01EICAgICAgICAgICAgICAgMHhCNDAwMDAxQworI2RlZmluZSBNRU1fU0RBVVRPUkVGICAgICAgICAgICAgICAweEI0MDAwMDIwCisKKyNkZWZpbmUgTUVNX1NEV1JNRDAgICAgICAgICAgICAgICAgMHhCNDAwMDAyNAorI2RlZmluZSBNRU1fU0RXUk1EMSAgICAgICAgICAgICAgICAweEI0MDAwMDI4CisjZGVmaW5lIE1FTV9TRFdSTUQyICAgICAgICAgICAgICAgIDB4QjQwMDAwMkMKKworI2RlZmluZSBNRU1fU0RTTEVFUCAgICAgICAgICAgICAgICAweEI0MDAwMDMwCisjZGVmaW5lIE1FTV9TRFNNQ0tFICAgICAgICAgICAgICAgIDB4QjQwMDAwMzQKKyNlbmRpZgorCisvKiBTdGF0aWMgQnVzIENvbnRyb2xsZXIgKi8KKyNkZWZpbmUgTUVNX1NUQ0ZHMCAgICAgICAgICAgICAgICAgMHhCNDAwMTAwMAorI2RlZmluZSBNRU1fU1RUSU1FMCAgICAgICAgICAgICAgICAweEI0MDAxMDA0CisjZGVmaW5lIE1FTV9TVEFERFIwICAgICAgICAgICAgICAgIDB4QjQwMDEwMDgKKworI2RlZmluZSBNRU1fU1RDRkcxICAgICAgICAgICAgICAgICAweEI0MDAxMDEwCisjZGVmaW5lIE1FTV9TVFRJTUUxICAgICAgICAgICAgICAgIDB4QjQwMDEwMTQKKyNkZWZpbmUgTUVNX1NUQUREUjEgICAgICAgICAgICAgICAgMHhCNDAwMTAxOAorCisjZGVmaW5lIE1FTV9TVENGRzIgICAgICAgICAgICAgICAgIDB4QjQwMDEwMjAKKyNkZWZpbmUgTUVNX1NUVElNRTIgICAgICAgICAgICAgICAgMHhCNDAwMTAyNAorI2RlZmluZSBNRU1fU1RBRERSMiAgICAgICAgICAgICAgICAweEI0MDAxMDI4CisKKyNkZWZpbmUgTUVNX1NUQ0ZHMyAgICAgICAgICAgICAgICAgMHhCNDAwMTAzMAorI2RlZmluZSBNRU1fU1RUSU1FMyAgICAgICAgICAgICAgICAweEI0MDAxMDM0CisjZGVmaW5lIE1FTV9TVEFERFIzICAgICAgICAgICAgICAgIDB4QjQwMDEwMzgKKworI2lmIGRlZmluZWQoQ09ORklHX1NPQ19BVTE1NTApIHx8IGRlZmluZWQoQ09ORklHX1NPQ19BVTEyMDApCisjZGVmaW5lIE1FTV9TVE5EQ1RMICAgICAgICAgICAgICAgIDB4QjQwMDExMDAKKyNkZWZpbmUgTUVNX1NUU1RBVCAgICAgICAgICAgICAgICAgMHhCNDAwMTEwNAorCisjZGVmaW5lIE1FTV9TVE5BTkRfQ01EICAgICAgICAgICAgICAgICAgKDB4MCkKKyNkZWZpbmUgTUVNX1NUTkFORF9BRERSICAgICAgICAgICAgICAgICAoMHg0KQorI2RlZmluZSBNRU1fU1ROQU5EX0RBVEEgICAgICAgICAgICAgICAgKDB4MjApCisjZW5kaWYKKworLyogSW50ZXJydXB0IENvbnRyb2xsZXIgMCAqLworI2RlZmluZSBJQzBfQ0ZHMFJEICAgICAgICAgICAgICAgICAweEIwNDAwMDQwCisjZGVmaW5lIElDMF9DRkcwU0VUICAgICAgICAgICAgICAgIDB4QjA0MDAwNDAKKyNkZWZpbmUgSUMwX0NGRzBDTFIgICAgICAgICAgICAgICAgMHhCMDQwMDA0NAorCisjZGVmaW5lIElDMF9DRkcxUkQgICAgICAgICAgICAgICAgIDB4QjA0MDAwNDgKKyNkZWZpbmUgSUMwX0NGRzFTRVQgICAgICAgICAgICAgICAgMHhCMDQwMDA0OAorI2RlZmluZSBJQzBfQ0ZHMUNMUiAgICAgICAgICAgICAgICAweEIwNDAwMDRDCisKKyNkZWZpbmUgSUMwX0NGRzJSRCAgICAgICAgICAgICAgICAgMHhCMDQwMDA1MAorI2RlZmluZSBJQzBfQ0ZHMlNFVCAgICAgICAgICAgICAgICAweEIwNDAwMDUwCisjZGVmaW5lIElDMF9DRkcyQ0xSICAgICAgICAgICAgICAgIDB4QjA0MDAwNTQKKworI2RlZmluZSBJQzBfUkVRMElOVCAgICAgICAgICAgICAgICAweEIwNDAwMDU0CisjZGVmaW5lIElDMF9TUkNSRCAgICAgICAgICAgICAgICAgIDB4QjA0MDAwNTgKKyNkZWZpbmUgSUMwX1NSQ1NFVCAgICAgICAgICAgICAgICAgMHhCMDQwMDA1OAorI2RlZmluZSBJQzBfU1JDQ0xSICAgICAgICAgICAgICAgICAweEIwNDAwMDVDCisjZGVmaW5lIElDMF9SRVExSU5UICAgICAgICAgICAgICAgIDB4QjA0MDAwNUMKKworI2RlZmluZSBJQzBfQVNTSUdOUkQgICAgICAgICAgICAgICAweEIwNDAwMDYwCisjZGVmaW5lIElDMF9BU1NJR05TRVQgICAgICAgICAgICAgIDB4QjA0MDAwNjAKKyNkZWZpbmUgSUMwX0FTU0lHTkNMUiAgICAgICAgICAgICAgMHhCMDQwMDA2NAorCisjZGVmaW5lIElDMF9XQUtFUkQgICAgICAgICAgICAgICAgIDB4QjA0MDAwNjgKKyNkZWZpbmUgSUMwX1dBS0VTRVQgICAgICAgICAgICAgICAgMHhCMDQwMDA2OAorI2RlZmluZSBJQzBfV0FLRUNMUiAgICAgICAgICAgICAgICAweEIwNDAwMDZDCisKKyNkZWZpbmUgSUMwX01BU0tSRCAgICAgICAgICAgICAgICAgMHhCMDQwMDA3MAorI2RlZmluZSBJQzBfTUFTS1NFVCAgICAgICAgICAgICAgICAweEIwNDAwMDcwCisjZGVmaW5lIElDMF9NQVNLQ0xSICAgICAgICAgICAgICAgIDB4QjA0MDAwNzQKKworI2RlZmluZSBJQzBfUklTSU5HUkQgICAgICAgICAgICAgICAweEIwNDAwMDc4CisjZGVmaW5lIElDMF9SSVNJTkdDTFIgICAgICAgICAgICAgIDB4QjA0MDAwNzgKKyNkZWZpbmUgSUMwX0ZBTExJTkdSRCAgICAgICAgICAgICAgMHhCMDQwMDA3QworI2RlZmluZSBJQzBfRkFMTElOR0NMUiAgICAgICAgICAgICAweEIwNDAwMDdDCisKKyNkZWZpbmUgSUMwX1RFU1RCSVQgICAgICAgICAgICAgICAgMHhCMDQwMDA4MAorCisvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciAxICovCisjZGVmaW5lIElDMV9DRkcwUkQgICAgICAgICAgICAgICAgIDB4QjE4MDAwNDAKKyNkZWZpbmUgSUMxX0NGRzBTRVQgICAgICAgICAgICAgICAgMHhCMTgwMDA0MAorI2RlZmluZSBJQzFfQ0ZHMENMUiAgICAgICAgICAgICAgICAweEIxODAwMDQ0CisKKyNkZWZpbmUgSUMxX0NGRzFSRCAgICAgICAgICAgICAgICAgMHhCMTgwMDA0OAorI2RlZmluZSBJQzFfQ0ZHMVNFVCAgICAgICAgICAgICAgICAweEIxODAwMDQ4CisjZGVmaW5lIElDMV9DRkcxQ0xSICAgICAgICAgICAgICAgIDB4QjE4MDAwNEMKKworI2RlZmluZSBJQzFfQ0ZHMlJEICAgICAgICAgICAgICAgICAweEIxODAwMDUwCisjZGVmaW5lIElDMV9DRkcyU0VUICAgICAgICAgICAgICAgIDB4QjE4MDAwNTAKKyNkZWZpbmUgSUMxX0NGRzJDTFIgICAgICAgICAgICAgICAgMHhCMTgwMDA1NAorCisjZGVmaW5lIElDMV9SRVEwSU5UICAgICAgICAgICAgICAgIDB4QjE4MDAwNTQKKyNkZWZpbmUgSUMxX1NSQ1JEICAgICAgICAgICAgICAgICAgMHhCMTgwMDA1OAorI2RlZmluZSBJQzFfU1JDU0VUICAgICAgICAgICAgICAgICAweEIxODAwMDU4CisjZGVmaW5lIElDMV9TUkNDTFIgICAgICAgICAgICAgICAgIDB4QjE4MDAwNUMKKyNkZWZpbmUgSUMxX1JFUTFJTlQgICAgICAgICAgICAgICAgMHhCMTgwMDA1QworCisjZGVmaW5lIElDMV9BU1NJR05SRCAgICAgICAgICAgICAgIDB4QjE4MDAwNjAKKyNkZWZpbmUgSUMxX0FTU0lHTlNFVCAgICAgICAgICAgICAgMHhCMTgwMDA2MAorI2RlZmluZSBJQzFfQVNTSUdOQ0xSICAgICAgICAgICAgICAweEIxODAwMDY0CisKKyNkZWZpbmUgSUMxX1dBS0VSRCAgICAgICAgICAgICAgICAgMHhCMTgwMDA2OAorI2RlZmluZSBJQzFfV0FLRVNFVCAgICAgICAgICAgICAgICAweEIxODAwMDY4CisjZGVmaW5lIElDMV9XQUtFQ0xSICAgICAgICAgICAgICAgIDB4QjE4MDAwNkMKKworI2RlZmluZSBJQzFfTUFTS1JEICAgICAgICAgICAgICAgICAweEIxODAwMDcwCisjZGVmaW5lIElDMV9NQVNLU0VUICAgICAgICAgICAgICAgIDB4QjE4MDAwNzAKKyNkZWZpbmUgSUMxX01BU0tDTFIgICAgICAgICAgICAgICAgMHhCMTgwMDA3NAorCisjZGVmaW5lIElDMV9SSVNJTkdSRCAgICAgICAgICAgICAgIDB4QjE4MDAwNzgKKyNkZWZpbmUgSUMxX1JJU0lOR0NMUiAgICAgICAgICAgICAgMHhCMTgwMDA3OAorI2RlZmluZSBJQzFfRkFMTElOR1JEICAgICAgICAgICAgICAweEIxODAwMDdDCisjZGVmaW5lIElDMV9GQUxMSU5HQ0xSICAgICAgICAgICAgIDB4QjE4MDAwN0MKKworI2RlZmluZSBJQzFfVEVTVEJJVCAgICAgICAgICAgICAgICAweEIxODAwMDgwCisKKy8qIEludGVycnVwdCBDb25maWd1cmF0aW9uIE1vZGVzICovCisjZGVmaW5lIElOVENfSU5UX0RJU0FCTEVEICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgSU5UQ19JTlRfUklTRV9FREdFICAgICAgICAgICAgIDB4MQorI2RlZmluZSBJTlRDX0lOVF9GQUxMX0VER0UgICAgICAgICAgICAgMHgyCisjZGVmaW5lIElOVENfSU5UX1JJU0VfQU5EX0ZBTExfRURHRSAgICAweDMKKyNkZWZpbmUgSU5UQ19JTlRfSElHSF9MRVZFTCAgICAgICAgICAgIDB4NQorI2RlZmluZSBJTlRDX0lOVF9MT1dfTEVWRUwgICAgICAgICAgICAgMHg2CisjZGVmaW5lIElOVENfSU5UX0hJR0hfQU5EX0xPV19MRVZFTCAgICAweDcKKworLyogSW50ZXJydXB0IE51bWJlcnMgKi8KKy8qIEF1MTAwMCAqLworI2lmZGVmIENPTkZJR19TT0NfQVUxMDAwCisjZGVmaW5lIEFVMTAwMF9VQVJUMF9JTlQgICAgICAgICAgMAorI2RlZmluZSBBVTEwMDBfVUFSVDFfSU5UICAgICAgICAgIDEgLyogYXUxMDAwICovCisjZGVmaW5lIEFVMTAwMF9VQVJUMl9JTlQgICAgICAgICAgMiAvKiBhdTEwMDAgKi8KKyNkZWZpbmUgQVUxMDAwX1VBUlQzX0lOVCAgICAgICAgICAzCisjZGVmaW5lIEFVMTAwMF9TU0kwX0lOVCAgICAgICAgICAgNCAvKiBhdTEwMDAgKi8KKyNkZWZpbmUgQVUxMDAwX1NTSTFfSU5UICAgICAgICAgICA1IC8qIGF1MTAwMCAqLworI2RlZmluZSBBVTEwMDBfRE1BX0lOVF9CQVNFICAgICAgIDYKKyNkZWZpbmUgQVUxMDAwX1RPWV9JTlQgICAgICAgICAgICAxNAorI2RlZmluZSBBVTEwMDBfVE9ZX01BVENIMF9JTlQgICAgIDE1CisjZGVmaW5lIEFVMTAwMF9UT1lfTUFUQ0gxX0lOVCAgICAgMTYKKyNkZWZpbmUgQVUxMDAwX1RPWV9NQVRDSDJfSU5UICAgICAxNworI2RlZmluZSBBVTEwMDBfUlRDX0lOVCAgICAgICAgICAgIDE4CisjZGVmaW5lIEFVMTAwMF9SVENfTUFUQ0gwX0lOVCAgICAgMTkKKyNkZWZpbmUgQVUxMDAwX1JUQ19NQVRDSDFfSU5UICAgICAyMAorI2RlZmluZSBBVTEwMDBfUlRDX01BVENIMl9JTlQgICAgIDIxCisjZGVmaW5lIEFVMTAwMF9JUkRBX1RYX0lOVCAgICAgICAgMjIgLyogYXUxMDAwICovCisjZGVmaW5lIEFVMTAwMF9JUkRBX1JYX0lOVCAgICAgICAgMjMgLyogYXUxMDAwICovCisjZGVmaW5lIEFVMTAwMF9VU0JfREVWX1JFUV9JTlQgICAgMjQKKyNkZWZpbmUgQVUxMDAwX1VTQl9ERVZfU1VTX0lOVCAgICAyNQorI2RlZmluZSBBVTEwMDBfVVNCX0hPU1RfSU5UICAgICAgIDI2CisjZGVmaW5lIEFVMTAwMF9BQ1NZTkNfSU5UICAgICAgICAgMjcKKyNkZWZpbmUgQVUxMDAwX01BQzBfRE1BX0lOVCAgICAgICAyOAorI2RlZmluZSBBVTEwMDBfTUFDMV9ETUFfSU5UICAgICAgIDI5CisjZGVmaW5lIEFVMTAwMF9JMlNfVU9fSU5UICAgICAgICAgMzAgLyogYXUxMDAwICovCisjZGVmaW5lIEFVMTAwMF9BQzk3Q19JTlQgICAgICAgICAgMzEKKyNkZWZpbmUgQVUxMDAwX0dQSU9fMCAgICAgICAgICAgICAzMgorI2RlZmluZSBBVTEwMDBfR1BJT18xICAgICAgICAgICAgIDMzCisjZGVmaW5lIEFVMTAwMF9HUElPXzIgICAgICAgICAgICAgMzQKKyNkZWZpbmUgQVUxMDAwX0dQSU9fMyAgICAgICAgICAgICAzNQorI2RlZmluZSBBVTEwMDBfR1BJT180ICAgICAgICAgICAgIDM2CisjZGVmaW5lIEFVMTAwMF9HUElPXzUgICAgICAgICAgICAgMzcKKyNkZWZpbmUgQVUxMDAwX0dQSU9fNiAgICAgICAgICAgICAzOAorI2RlZmluZSBBVTEwMDBfR1BJT183ICAgICAgICAgICAgIDM5CisjZGVmaW5lIEFVMTAwMF9HUElPXzggICAgICAgICAgICAgNDAKKyNkZWZpbmUgQVUxMDAwX0dQSU9fOSAgICAgICAgICAgICA0MQorI2RlZmluZSBBVTEwMDBfR1BJT18xMCAgICAgICAgICAgIDQyCisjZGVmaW5lIEFVMTAwMF9HUElPXzExICAgICAgICAgICAgNDMKKyNkZWZpbmUgQVUxMDAwX0dQSU9fMTIgICAgICAgICAgICA0NAorI2RlZmluZSBBVTEwMDBfR1BJT18xMyAgICAgICAgICAgIDQ1CisjZGVmaW5lIEFVMTAwMF9HUElPXzE0ICAgICAgICAgICAgNDYKKyNkZWZpbmUgQVUxMDAwX0dQSU9fMTUgICAgICAgICAgICA0NworI2RlZmluZSBBVTEwMDBfR1BJT18xNiAgICAgICAgICAgIDQ4CisjZGVmaW5lIEFVMTAwMF9HUElPXzE3ICAgICAgICAgICAgNDkKKyNkZWZpbmUgQVUxMDAwX0dQSU9fMTggICAgICAgICAgICA1MAorI2RlZmluZSBBVTEwMDBfR1BJT18xOSAgICAgICAgICAgIDUxCisjZGVmaW5lIEFVMTAwMF9HUElPXzIwICAgICAgICAgICAgNTIKKyNkZWZpbmUgQVUxMDAwX0dQSU9fMjEgICAgICAgICAgICA1MworI2RlZmluZSBBVTEwMDBfR1BJT18yMiAgICAgICAgICAgIDU0CisjZGVmaW5lIEFVMTAwMF9HUElPXzIzICAgICAgICAgICAgNTUKKyNkZWZpbmUgQVUxMDAwX0dQSU9fMjQgICAgICAgICAgICA1NgorI2RlZmluZSBBVTEwMDBfR1BJT18yNSAgICAgICAgICAgIDU3CisjZGVmaW5lIEFVMTAwMF9HUElPXzI2ICAgICAgICAgICAgNTgKKyNkZWZpbmUgQVUxMDAwX0dQSU9fMjcgICAgICAgICAgICA1OQorI2RlZmluZSBBVTEwMDBfR1BJT18yOCAgICAgICAgICAgIDYwCisjZGVmaW5lIEFVMTAwMF9HUElPXzI5ICAgICAgICAgICAgNjEKKyNkZWZpbmUgQVUxMDAwX0dQSU9fMzAgICAgICAgICAgICA2MgorI2RlZmluZSBBVTEwMDBfR1BJT18zMSAgICAgICAgICAgIDYzCisKKyNkZWZpbmUgVUFSVDBfQUREUiAgICAgICAgICAgICAgICAweEIxMTAwMDAwCisjZGVmaW5lIFVBUlQxX0FERFIgICAgICAgICAgICAgICAgMHhCMTIwMDAwMAorI2RlZmluZSBVQVJUMl9BRERSICAgICAgICAgICAgICAgIDB4QjEzMDAwMDAKKyNkZWZpbmUgVUFSVDNfQUREUiAgICAgICAgICAgICAgICAweEIxNDAwMDAwCisKKyNkZWZpbmUgVVNCX09IQ0lfQkFTRSAgICAgICAgICAgICAweDEwMTAwMDAwIC8vIHBoeXMgYWRkciBmb3IgaW9yZW1hcAorI2RlZmluZSBVU0JfSE9TVF9DT05GSUcgICAgICAgICAgIDB4QjAxN2ZmZmMKKworI2RlZmluZSBBVTEwMDBfRVRIMF9CQVNFICAgICAgMHhCMDUwMDAwMAorI2RlZmluZSBBVTEwMDBfRVRIMV9CQVNFICAgICAgMHhCMDUxMDAwMAorI2RlZmluZSBBVTEwMDBfTUFDMF9FTkFCTEUgICAgICAgMHhCMDUyMDAwMAorI2RlZmluZSBBVTEwMDBfTUFDMV9FTkFCTEUgICAgICAgMHhCMDUyMDAwNAorI2RlZmluZSBOVU1fRVRIX0lOVEVSRkFDRVMgMgorI2VuZGlmIC8vIENPTkZJR19TT0NfQVUxMDAwCisKKy8qIEF1MTUwMCAqLworI2lmZGVmIENPTkZJR19TT0NfQVUxNTAwCisjZGVmaW5lIEFVMTUwMF9VQVJUMF9JTlQgICAgICAgICAgMAorI2RlZmluZSBBVTEwMDBfUENJX0lOVEEgICAgICAgICAgIDEgLyogYXUxNTAwICovCisjZGVmaW5lIEFVMTAwMF9QQ0lfSU5UQiAgICAgICAgICAgMiAvKiBhdTE1MDAgKi8KKyNkZWZpbmUgQVUxNTAwX1VBUlQzX0lOVCAgICAgICAgICAzCisjZGVmaW5lIEFVMTAwMF9QQ0lfSU5UQyAgICAgICAgICAgNCAvKiBhdTE1MDAgKi8KKyNkZWZpbmUgQVUxMDAwX1BDSV9JTlREICAgICAgICAgICA1IC8qIGF1MTUwMCAqLworI2RlZmluZSBBVTEwMDBfRE1BX0lOVF9CQVNFICAgICAgIDYKKyNkZWZpbmUgQVUxMDAwX1RPWV9JTlQgICAgICAgICAgICAxNAorI2RlZmluZSBBVTEwMDBfVE9ZX01BVENIMF9JTlQgICAgIDE1CisjZGVmaW5lIEFVMTAwMF9UT1lfTUFUQ0gxX0lOVCAgICAgMTYKKyNkZWZpbmUgQVUxMDAwX1RPWV9NQVRDSDJfSU5UICAgICAxNworI2RlZmluZSBBVTEwMDBfUlRDX0lOVCAgICAgICAgICAgIDE4CisjZGVmaW5lIEFVMTAwMF9SVENfTUFUQ0gwX0lOVCAgICAgMTkKKyNkZWZpbmUgQVUxMDAwX1JUQ19NQVRDSDFfSU5UICAgICAyMAorI2RlZmluZSBBVTEwMDBfUlRDX01BVENIMl9JTlQgICAgIDIxCisjZGVmaW5lIEFVMTUwMF9QQ0lfRVJSX0lOVCAgICAgICAgMjIKKyNkZWZpbmUgQVUxMDAwX1VTQl9ERVZfUkVRX0lOVCAgICAyNAorI2RlZmluZSBBVTEwMDBfVVNCX0RFVl9TVVNfSU5UICAgIDI1CisjZGVmaW5lIEFVMTAwMF9VU0JfSE9TVF9JTlQgICAgICAgMjYKKyNkZWZpbmUgQVUxMDAwX0FDU1lOQ19JTlQgICAgICAgICAyNworI2RlZmluZSBBVTE1MDBfTUFDMF9ETUFfSU5UICAgICAgIDI4CisjZGVmaW5lIEFVMTUwMF9NQUMxX0RNQV9JTlQgICAgICAgMjkKKyNkZWZpbmUgQVUxMDAwX0FDOTdDX0lOVCAgICAgICAgICAzMQorI2RlZmluZSBBVTEwMDBfR1BJT18wICAgICAgICAgICAgIDMyCisjZGVmaW5lIEFVMTAwMF9HUElPXzEgICAgICAgICAgICAgMzMKKyNkZWZpbmUgQVUxMDAwX0dQSU9fMiAgICAgICAgICAgICAzNAorI2RlZmluZSBBVTEwMDBfR1BJT18zICAgICAgICAgICAgIDM1CisjZGVmaW5lIEFVMTAwMF9HUElPXzQgICAgICAgICAgICAgMzYKKyNkZWZpbmUgQVUxMDAwX0dQSU9fNSAgICAgICAgICAgICAzNworI2RlZmluZSBBVTEwMDBfR1BJT182ICAgICAgICAgICAgIDM4CisjZGVmaW5lIEFVMTAwMF9HUElPXzcgICAgICAgICAgICAgMzkKKyNkZWZpbmUgQVUxMDAwX0dQSU9fOCAgICAgICAgICAgICA0MAorI2RlZmluZSBBVTEwMDBfR1BJT185ICAgICAgICAgICAgIDQxCisjZGVmaW5lIEFVMTAwMF9HUElPXzEwICAgICAgICAgICAgNDIKKyNkZWZpbmUgQVUxMDAwX0dQSU9fMTEgICAgICAgICAgICA0MworI2RlZmluZSBBVTEwMDBfR1BJT18xMiAgICAgICAgICAgIDQ0CisjZGVmaW5lIEFVMTAwMF9HUElPXzEzICAgICAgICAgICAgNDUKKyNkZWZpbmUgQVUxMDAwX0dQSU9fMTQgICAgICAgICAgICA0NgorI2RlZmluZSBBVTEwMDBfR1BJT18xNSAgICAgICAgICAgIDQ3CisjZGVmaW5lIEFVMTUwMF9HUElPXzIwMCAgICAgICAgICAgNDgKKyNkZWZpbmUgQVUxNTAwX0dQSU9fMjAxICAgICAgICAgICA0OQorI2RlZmluZSBBVTE1MDBfR1BJT18yMDIgICAgICAgICAgIDUwCisjZGVmaW5lIEFVMTUwMF9HUElPXzIwMyAgICAgICAgICAgNTEKKyNkZWZpbmUgQVUxNTAwX0dQSU9fMjAgICAgICAgICAgICA1MgorI2RlZmluZSBBVTE1MDBfR1BJT18yMDQgICAgICAgICAgIDUzCisjZGVmaW5lIEFVMTUwMF9HUElPXzIwNSAgICAgICAgICAgNTQKKyNkZWZpbmUgQVUxNTAwX0dQSU9fMjMgICAgICAgICAgICA1NQorI2RlZmluZSBBVTE1MDBfR1BJT18yNCAgICAgICAgICAgIDU2CisjZGVmaW5lIEFVMTUwMF9HUElPXzI1ICAgICAgICAgICAgNTcKKyNkZWZpbmUgQVUxNTAwX0dQSU9fMjYgICAgICAgICAgICA1OAorI2RlZmluZSBBVTE1MDBfR1BJT18yNyAgICAgICAgICAgIDU5CisjZGVmaW5lIEFVMTUwMF9HUElPXzI4ICAgICAgICAgICAgNjAKKyNkZWZpbmUgQVUxNTAwX0dQSU9fMjA2ICAgICAgICAgICA2MQorI2RlZmluZSBBVTE1MDBfR1BJT18yMDcgICAgICAgICAgIDYyCisjZGVmaW5lIEFVMTUwMF9HUElPXzIwOF8yMTUgICAgICAgNjMKKworI2RlZmluZSBVQVJUMF9BRERSICAgICAgICAgICAgICAgIDB4QjExMDAwMDAKKyNkZWZpbmUgVUFSVDNfQUREUiAgICAgICAgICAgICAgICAweEIxNDAwMDAwCisKKyNkZWZpbmUgVVNCX09IQ0lfQkFTRSAgICAgICAgICAgICAweDEwMTAwMDAwIC8vIHBoeXMgYWRkciBmb3IgaW9yZW1hcAorI2RlZmluZSBVU0JfSE9TVF9DT05GSUcgICAgICAgICAgIDB4QjAxN2ZmZmMKKworI2RlZmluZSBBVTE1MDBfRVRIMF9CQVNFCSAgMHhCMTUwMDAwMAorI2RlZmluZSBBVTE1MDBfRVRIMV9CQVNFCSAgMHhCMTUxMDAwMAorI2RlZmluZSBBVTE1MDBfTUFDMF9FTkFCTEUgICAgICAgMHhCMTUyMDAwMAorI2RlZmluZSBBVTE1MDBfTUFDMV9FTkFCTEUgICAgICAgMHhCMTUyMDAwNAorI2RlZmluZSBOVU1fRVRIX0lOVEVSRkFDRVMgMgorI2VuZGlmIC8vIENPTkZJR19TT0NfQVUxNTAwCisKKy8qIEF1MTEwMCAqLworI2lmZGVmIENPTkZJR19TT0NfQVUxMTAwCisjZGVmaW5lIEFVMTEwMF9VQVJUMF9JTlQgICAgICAgICAgMAorI2RlZmluZSBBVTExMDBfVUFSVDFfSU5UICAgICAgICAgIDEKKyNkZWZpbmUgQVUxMTAwX1NEX0lOVCAgICAgICAgICAgICAyCisjZGVmaW5lIEFVMTEwMF9VQVJUM19JTlQgICAgICAgICAgMworI2RlZmluZSBBVTEwMDBfU1NJMF9JTlQgICAgICAgICAgIDQKKyNkZWZpbmUgQVUxMDAwX1NTSTFfSU5UICAgICAgICAgICA1CisjZGVmaW5lIEFVMTAwMF9ETUFfSU5UX0JBU0UgICAgICAgNgorI2RlZmluZSBBVTEwMDBfVE9ZX0lOVCAgICAgICAgICAgIDE0CisjZGVmaW5lIEFVMTAwMF9UT1lfTUFUQ0gwX0lOVCAgICAgMTUKKyNkZWZpbmUgQVUxMDAwX1RPWV9NQVRDSDFfSU5UICAgICAxNgorI2RlZmluZSBBVTEwMDBfVE9ZX01BVENIMl9JTlQgICAgIDE3CisjZGVmaW5lIEFVMTAwMF9SVENfSU5UICAgICAgICAgICAgMTgKKyNkZWZpbmUgQVUxMDAwX1JUQ19NQVRDSDBfSU5UICAgICAxOQorI2RlZmluZSBBVTEwMDBfUlRDX01BVENIMV9JTlQgICAgIDIwCisjZGVmaW5lIEFVMTAwMF9SVENfTUFUQ0gyX0lOVCAgICAgMjEKKyNkZWZpbmUgQVUxMDAwX0lSREFfVFhfSU5UICAgICAgICAyMgorI2RlZmluZSBBVTEwMDBfSVJEQV9SWF9JTlQgICAgICAgIDIzCisjZGVmaW5lIEFVMTAwMF9VU0JfREVWX1JFUV9JTlQgICAgMjQKKyNkZWZpbmUgQVUxMDAwX1VTQl9ERVZfU1VTX0lOVCAgICAyNQorI2RlZmluZSBBVTEwMDBfVVNCX0hPU1RfSU5UICAgICAgIDI2CisjZGVmaW5lIEFVMTAwMF9BQ1NZTkNfSU5UICAgICAgICAgMjcKKyNkZWZpbmUgQVUxMTAwX01BQzBfRE1BX0lOVCAgICAgICAyOAorI2RlZmluZQlBVTExMDBfR1BJT18yMDhfMjE1CTI5CisjZGVmaW5lCUFVMTEwMF9MQ0RfSU5UICAgICAgICAgICAgMzAKKyNkZWZpbmUgQVUxMDAwX0FDOTdDX0lOVCAgICAgICAgICAzMQorI2RlZmluZSBBVTEwMDBfR1BJT18wICAgICAgICAgICAgIDMyCisjZGVmaW5lIEFVMTAwMF9HUElPXzEgICAgICAgICAgICAgMzMKKyNkZWZpbmUgQVUxMDAwX0dQSU9fMiAgICAgICAgICAgICAzNAorI2RlZmluZSBBVTEwMDBfR1BJT18zICAgICAgICAgICAgIDM1CisjZGVmaW5lIEFVMTAwMF9HUElPXzQgICAgICAgICAgICAgMzYKKyNkZWZpbmUgQVUxMDAwX0dQSU9fNSAgICAgICAgICAgICAzNworI2RlZmluZSBBVTEwMDBfR1BJT182ICAgICAgICAgICAgIDM4CisjZGVmaW5lIEFVMTAwMF9HUElPXzcgICAgICAgICAgICAgMzkKKyNkZWZpbmUgQVUxMDAwX0dQSU9fOCAgICAgICAgICAgICA0MAorI2RlZmluZSBBVTEwMDBfR1BJT185ICAgICAgICAgICAgIDQxCisjZGVmaW5lIEFVMTAwMF9HUElPXzEwICAgICAgICAgICAgNDIKKyNkZWZpbmUgQVUxMDAwX0dQSU9fMTEgICAgICAgICAgICA0MworI2RlZmluZSBBVTEwMDBfR1BJT18xMiAgICAgICAgICAgIDQ0CisjZGVmaW5lIEFVMTAwMF9HUElPXzEzICAgICAgICAgICAgNDUKKyNkZWZpbmUgQVUxMDAwX0dQSU9fMTQgICAgICAgICAgICA0NgorI2RlZmluZSBBVTEwMDBfR1BJT18xNSAgICAgICAgICAgIDQ3CisKKyNkZWZpbmUgVUFSVDBfQUREUiAgICAgICAgICAgICAgICAweEIxMTAwMDAwCisjZGVmaW5lIFVBUlQxX0FERFIgICAgICAgICAgICAgICAgMHhCMTIwMDAwMAorI2RlZmluZSBVQVJUM19BRERSICAgICAgICAgICAgICAgIDB4QjE0MDAwMDAKKworI2RlZmluZSBVU0JfT0hDSV9CQVNFICAgICAgICAgICAgIDB4MTAxMDAwMDAgLy8gcGh5cyBhZGRyIGZvciBpb3JlbWFwCisjZGVmaW5lIFVTQl9IT1NUX0NPTkZJRyAgICAgICAgICAgMHhCMDE3ZmZmYworCisjZGVmaW5lIEFVMTEwMF9FVEgwX0JBU0UJICAweEIwNTAwMDAwCisjZGVmaW5lIEFVMTEwMF9NQUMwX0VOQUJMRSAgICAgICAweEIwNTIwMDAwCisjZGVmaW5lIE5VTV9FVEhfSU5URVJGQUNFUyAxCisjZW5kaWYgLy8gQ09ORklHX1NPQ19BVTExMDAKKworI2lmZGVmIENPTkZJR19TT0NfQVUxNTUwCisjZGVmaW5lIEFVMTU1MF9VQVJUMF9JTlQgICAgICAgICAgMAorI2RlZmluZSBBVTE1NTBfUENJX0lOVEEgICAgICAgICAgIDEKKyNkZWZpbmUgQVUxNTUwX1BDSV9JTlRCICAgICAgICAgICAyCisjZGVmaW5lIEFVMTU1MF9ERE1BX0lOVCAgICAgICAgICAgMworI2RlZmluZSBBVTE1NTBfQ1JZUFRPX0lOVCAgICAgICAgIDQKKyNkZWZpbmUgQVUxNTUwX1BDSV9JTlRDICAgICAgICAgICA1CisjZGVmaW5lIEFVMTU1MF9QQ0lfSU5URCAgICAgICAgICAgNgorI2RlZmluZSBBVTE1NTBfUENJX1JTVF9JTlQgICAgICAgIDcKKyNkZWZpbmUgQVUxNTUwX1VBUlQxX0lOVCAgICAgICAgICA4CisjZGVmaW5lIEFVMTU1MF9VQVJUM19JTlQgICAgICAgICAgOQorI2RlZmluZSBBVTE1NTBfUFNDMF9JTlQgICAgICAgICAgIDEwCisjZGVmaW5lIEFVMTU1MF9QU0MxX0lOVCAgICAgICAgICAgMTEKKyNkZWZpbmUgQVUxNTUwX1BTQzJfSU5UICAgICAgICAgICAxMgorI2RlZmluZSBBVTE1NTBfUFNDM19JTlQgICAgICAgICAgIDEzCisjZGVmaW5lIEFVMTU1MF9UT1lfSU5UCQkJICAxNAorI2RlZmluZSBBVTE1NTBfVE9ZX01BVENIMF9JTlQgICAgIDE1CisjZGVmaW5lIEFVMTU1MF9UT1lfTUFUQ0gxX0lOVCAgICAgMTYKKyNkZWZpbmUgQVUxNTUwX1RPWV9NQVRDSDJfSU5UICAgICAxNworI2RlZmluZSBBVTE1NTBfUlRDX0lOVCAgICAgICAgICAgIDE4CisjZGVmaW5lIEFVMTU1MF9SVENfTUFUQ0gwX0lOVCAgICAgMTkKKyNkZWZpbmUgQVUxNTUwX1JUQ19NQVRDSDFfSU5UICAgICAyMAorI2RlZmluZSBBVTE1NTBfUlRDX01BVENIMl9JTlQgICAgIDIxCisjZGVmaW5lIEFVMTU1MF9OQU5EX0lOVCAgICAgICAgICAgMjMKKyNkZWZpbmUgQVUxNTUwX1VTQl9ERVZfUkVRX0lOVCAgICAyNAorI2RlZmluZSBBVTE1NTBfVVNCX0RFVl9TVVNfSU5UICAgIDI1CisjZGVmaW5lIEFVMTU1MF9VU0JfSE9TVF9JTlQgICAgICAgMjYKKyNkZWZpbmUgQVUxMDAwX1VTQl9ERVZfUkVRX0lOVCAgICBBVTE1NTBfVVNCX0RFVl9SRVFfSU5UCisjZGVmaW5lIEFVMTAwMF9VU0JfREVWX1NVU19JTlQgICAgQVUxNTUwX1VTQl9ERVZfU1VTX0lOVAorI2RlZmluZSBBVTEwMDBfVVNCX0hPU1RfSU5UICAgICAgIEFVMTU1MF9VU0JfSE9TVF9JTlQKKyNkZWZpbmUgQVUxNTUwX01BQzBfRE1BX0lOVCAgICAgICAyNworI2RlZmluZSBBVTE1NTBfTUFDMV9ETUFfSU5UICAgICAgIDI4CisjZGVmaW5lIEFVMTAwMF9HUElPXzAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQVUxMDAwX0dQSU9fMSAgICAgICAgICAgICAzMworI2RlZmluZSBBVTEwMDBfR1BJT18yICAgICAgICAgICAgIDM0CisjZGVmaW5lIEFVMTAwMF9HUElPXzMgICAgICAgICAgICAgMzUKKyNkZWZpbmUgQVUxMDAwX0dQSU9fNCAgICAgICAgICAgICAzNgorI2RlZmluZSBBVTEwMDBfR1BJT181ICAgICAgICAgICAgIDM3CisjZGVmaW5lIEFVMTAwMF9HUElPXzYgICAgICAgICAgICAgMzgKKyNkZWZpbmUgQVUxMDAwX0dQSU9fNyAgICAgICAgICAgICAzOQorI2RlZmluZSBBVTEwMDBfR1BJT184ICAgICAgICAgICAgIDQwCisjZGVmaW5lIEFVMTAwMF9HUElPXzkgICAgICAgICAgICAgNDEKKyNkZWZpbmUgQVUxMDAwX0dQSU9fMTAgICAgICAgICAgICA0MgorI2RlZmluZSBBVTEwMDBfR1BJT18xMSAgICAgICAgICAgIDQzCisjZGVmaW5lIEFVMTAwMF9HUElPXzEyICAgICAgICAgICAgNDQKKyNkZWZpbmUgQVUxMDAwX0dQSU9fMTMgICAgICAgICAgICA0NQorI2RlZmluZSBBVTEwMDBfR1BJT18xNCAgICAgICAgICAgIDQ2CisjZGVmaW5lIEFVMTAwMF9HUElPXzE1ICAgICAgICAgICAgNDcKKyNkZWZpbmUgQVUxNTUwX0dQSU9fMjAwICAgICAgICAgICA0OAorI2RlZmluZSBBVTE1MDBfR1BJT18yMDFfMjA1ICAgICAgIDQ5CS8vIExvZ2ljYWwgb3Igb2YgR1BJTzIwMToyMDUKKyNkZWZpbmUgQVUxNTAwX0dQSU9fMTYgICAgICAgICAgICA1MAorI2RlZmluZSBBVTE1MDBfR1BJT18xNyAgICAgICAgICAgIDUxCisjZGVmaW5lIEFVMTUwMF9HUElPXzIwICAgICAgICAgICAgNTIKKyNkZWZpbmUgQVUxNTAwX0dQSU9fMjEgICAgICAgICAgICA1MworI2RlZmluZSBBVTE1MDBfR1BJT18yMiAgICAgICAgICAgIDU0CisjZGVmaW5lIEFVMTUwMF9HUElPXzIzICAgICAgICAgICAgNTUKKyNkZWZpbmUgQVUxNTAwX0dQSU9fMjQgICAgICAgICAgICA1NgorI2RlZmluZSBBVTE1MDBfR1BJT18yNSAgICAgICAgICAgIDU3CisjZGVmaW5lIEFVMTUwMF9HUElPXzI2ICAgICAgICAgICAgNTgKKyNkZWZpbmUgQVUxNTAwX0dQSU9fMjcgICAgICAgICAgICA1OQorI2RlZmluZSBBVTE1MDBfR1BJT18yOCAgICAgICAgICAgIDYwCisjZGVmaW5lIEFVMTUwMF9HUElPXzIwNiAgICAgICAgICAgNjEKKyNkZWZpbmUgQVUxNTAwX0dQSU9fMjA3ICAgICAgICAgICA2MgorI2RlZmluZSBBVTE1MDBfR1BJT18yMDhfMjE4ICAgICAgIDYzCS8vIExvZ2ljYWwgb3Igb2YgR1BJTzIwODoyMTgKKworI2RlZmluZSBVQVJUMF9BRERSICAgICAgICAgICAgICAgIDB4QjExMDAwMDAKKyNkZWZpbmUgVUFSVDFfQUREUiAgICAgICAgICAgICAgICAweEIxMjAwMDAwCisjZGVmaW5lIFVBUlQzX0FERFIgICAgICAgICAgICAgICAgMHhCMTQwMDAwMAorCisjZGVmaW5lIFVTQl9PSENJX0JBU0UgICAgICAgICAgICAgMHgxNDAyMDAwMCAvLyBwaHlzIGFkZHIgZm9yIGlvcmVtYXAKKyNkZWZpbmUgVVNCX0hPU1RfQ09ORklHICAgICAgICAgICAweEI0MDI3ZmZjCisKKyNkZWZpbmUgQVUxNTUwX0VUSDBfQkFTRSAgICAgIDB4QjA1MDAwMDAKKyNkZWZpbmUgQVUxNTUwX0VUSDFfQkFTRSAgICAgIDB4QjA1MTAwMDAKKyNkZWZpbmUgQVUxNTUwX01BQzBfRU5BQkxFICAgICAgIDB4QjA1MjAwMDAKKyNkZWZpbmUgQVUxNTUwX01BQzFfRU5BQkxFICAgICAgIDB4QjA1MjAwMDQKKyNkZWZpbmUgTlVNX0VUSF9JTlRFUkZBQ0VTIDIKKyNlbmRpZiAvLyBDT05GSUdfU09DX0FVMTU1MAorCisjaWZkZWYgQ09ORklHX1NPQ19BVTEyMDAKKyNkZWZpbmUgQVUxMjAwX1VBUlQwX0lOVCAgICAgICAgICAwCisjZGVmaW5lIEFVMTIwMF9TV1RfSU5UICAgICAgICAgICAgMQorI2RlZmluZSBBVTEyMDBfU0RfSU5UICAgICAgICAgICAgIDIKKyNkZWZpbmUgQVUxMjAwX0RETUFfSU5UICAgICAgICAgICAzCisjZGVmaW5lIEFVMTIwMF9NQUVfQkVfSU5UICAgICAgICAgNAorI2RlZmluZSBBVTEyMDBfR1BJT18yMDAgICAgICAgICAgIDUKKyNkZWZpbmUgQVUxMjAwX0dQSU9fMjAxICAgICAgICAgICA2CisjZGVmaW5lIEFVMTIwMF9HUElPXzIwMiAgICAgICAgICAgNworI2RlZmluZSBBVTEyMDBfVUFSVDFfSU5UICAgICAgICAgIDgKKyNkZWZpbmUgQVUxMjAwX01BRV9GRV9JTlQgICAgICAgICA5CisjZGVmaW5lIEFVMTIwMF9QU0MwX0lOVCAgICAgICAgICAgMTAKKyNkZWZpbmUgQVUxMjAwX1BTQzFfSU5UICAgICAgICAgICAxMQorI2RlZmluZSBBVTEyMDBfQUVTX0lOVCAgICAgICAgICAgIDEyCisjZGVmaW5lIEFVMTIwMF9DQU1FUkFfSU5UICAgICAgICAgMTMKKyNkZWZpbmUgQVUxMjAwX1RPWV9JTlQJCQkgIDE0CisjZGVmaW5lIEFVMTIwMF9UT1lfTUFUQ0gwX0lOVCAgICAgMTUKKyNkZWZpbmUgQVUxMjAwX1RPWV9NQVRDSDFfSU5UICAgICAxNgorI2RlZmluZSBBVTEyMDBfVE9ZX01BVENIMl9JTlQgICAgIDE3CisjZGVmaW5lIEFVMTIwMF9SVENfSU5UICAgICAgICAgICAgMTgKKyNkZWZpbmUgQVUxMjAwX1JUQ19NQVRDSDBfSU5UICAgICAxOQorI2RlZmluZSBBVTEyMDBfUlRDX01BVENIMV9JTlQgICAgIDIwCisjZGVmaW5lIEFVMTIwMF9SVENfTUFUQ0gyX0lOVCAgICAgMjEKKyNkZWZpbmUgQVUxMjAwX05BTkRfSU5UICAgICAgICAgICAyMworI2RlZmluZSBBVTEyMDBfR1BJT18yMDQgICAgICAgICAgIDI0CisjZGVmaW5lIEFVMTIwMF9HUElPXzIwNSAgICAgICAgICAgMjUKKyNkZWZpbmUgQVUxMjAwX0dQSU9fMjA2ICAgICAgICAgICAyNgorI2RlZmluZSBBVTEyMDBfR1BJT18yMDcgICAgICAgICAgIDI3CisjZGVmaW5lIEFVMTIwMF9HUElPXzIwOF8yMTUgICAgICAgMjggLy8gTG9naWNhbCBPUiBvZiAyMDg6MjE1CisjZGVmaW5lIEFVMTIwMF9VU0JfSU5UICAgICAgICAgICAgMjkKKyNkZWZpbmUgQVUxMjAwX0xDRF9JTlQgICAgICAgICAgICAzMAorI2RlZmluZSBBVTEyMDBfTUFFX0JPVEhfSU5UICAgICAgIDMxCisjZGVmaW5lIEFVMTAwMF9HUElPXzAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQVUxMDAwX0dQSU9fMSAgICAgICAgICAgICAzMworI2RlZmluZSBBVTEwMDBfR1BJT18yICAgICAgICAgICAgIDM0CisjZGVmaW5lIEFVMTAwMF9HUElPXzMgICAgICAgICAgICAgMzUKKyNkZWZpbmUgQVUxMDAwX0dQSU9fNCAgICAgICAgICAgICAzNgorI2RlZmluZSBBVTEwMDBfR1BJT181ICAgICAgICAgICAgIDM3CisjZGVmaW5lIEFVMTAwMF9HUElPXzYgICAgICAgICAgICAgMzgKKyNkZWZpbmUgQVUxMDAwX0dQSU9fNyAgICAgICAgICAgICAzOQorI2RlZmluZSBBVTEwMDBfR1BJT184ICAgICAgICAgICAgIDQwCisjZGVmaW5lIEFVMTAwMF9HUElPXzkgICAgICAgICAgICAgNDEKKyNkZWZpbmUgQVUxMDAwX0dQSU9fMTAgICAgICAgICAgICA0MgorI2RlZmluZSBBVTEwMDBfR1BJT18xMSAgICAgICAgICAgIDQzCisjZGVmaW5lIEFVMTAwMF9HUElPXzEyICAgICAgICAgICAgNDQKKyNkZWZpbmUgQVUxMDAwX0dQSU9fMTMgICAgICAgICAgICA0NQorI2RlZmluZSBBVTEwMDBfR1BJT18xNCAgICAgICAgICAgIDQ2CisjZGVmaW5lIEFVMTAwMF9HUElPXzE1ICAgICAgICAgICAgNDcKKyNkZWZpbmUgQVUxMDAwX0dQSU9fMTYgICAgICAgICAgICA0OAorI2RlZmluZSBBVTEwMDBfR1BJT18xNyAgICAgICAgICAgIDQ5CisjZGVmaW5lIEFVMTAwMF9HUElPXzE4ICAgICAgICAgICAgNTAKKyNkZWZpbmUgQVUxMDAwX0dQSU9fMTkgICAgICAgICAgICA1MQorI2RlZmluZSBBVTEwMDBfR1BJT18yMCAgICAgICAgICAgIDUyCisjZGVmaW5lIEFVMTAwMF9HUElPXzIxICAgICAgICAgICAgNTMKKyNkZWZpbmUgQVUxMDAwX0dQSU9fMjIgICAgICAgICAgICA1NAorI2RlZmluZSBBVTEwMDBfR1BJT18yMyAgICAgICAgICAgIDU1CisjZGVmaW5lIEFVMTAwMF9HUElPXzI0ICAgICAgICAgICAgNTYKKyNkZWZpbmUgQVUxMDAwX0dQSU9fMjUgICAgICAgICAgICA1NworI2RlZmluZSBBVTEwMDBfR1BJT18yNiAgICAgICAgICAgIDU4CisjZGVmaW5lIEFVMTAwMF9HUElPXzI3ICAgICAgICAgICAgNTkKKyNkZWZpbmUgQVUxMDAwX0dQSU9fMjggICAgICAgICAgICA2MAorI2RlZmluZSBBVTEwMDBfR1BJT18yOSAgICAgICAgICAgIDYxCisjZGVmaW5lIEFVMTAwMF9HUElPXzMwICAgICAgICAgICAgNjIKKyNkZWZpbmUgQVUxMDAwX0dQSU9fMzEgICAgICAgICAgICA2MworCisjZGVmaW5lIFVBUlQwX0FERFIgICAgICAgICAgICAgICAgMHhCMTEwMDAwMAorI2RlZmluZSBVQVJUMV9BRERSICAgICAgICAgICAgICAgIDB4QjEyMDAwMDAKKworI2RlZmluZSBVU0JfT0hDSV9CQVNFICAgICAgICAgICAgIDB4MTQwMjAwMDAgLy8gcGh5cyBhZGRyIGZvciBpb3JlbWFwCisjZGVmaW5lIFVTQl9IT1NUX0NPTkZJRyAgICAgICAgICAgMHhCNDAyN2ZmYworCisvLyB0aGVzZSBhcmUgaGVyZSBmb3IgcHJvdG90eXBpbmcgb24gYXUxNTUwIChkbyBub3QgZXhpc3Qgb24gYXUxMjAwKQorI2RlZmluZSBBVTEyMDBfRVRIMF9CQVNFICAgICAgMHhCMDUwMDAwMAorI2RlZmluZSBBVTEyMDBfRVRIMV9CQVNFICAgICAgMHhCMDUxMDAwMAorI2RlZmluZSBBVTEyMDBfTUFDMF9FTkFCTEUgICAgICAgMHhCMDUyMDAwMAorI2RlZmluZSBBVTEyMDBfTUFDMV9FTkFCTEUgICAgICAgMHhCMDUyMDAwNAorI2RlZmluZSBOVU1fRVRIX0lOVEVSRkFDRVMgMgorI2VuZGlmIC8vIENPTkZJR19TT0NfQVUxMjAwCisKKyNkZWZpbmUgQVUxMDAwX0xBU1RfSU5UQzBfSU5UICAgICAzMQorI2RlZmluZSBBVTEwMDBfTUFYX0lOVFIgICAgICAgICAgIDYzCisKKworLyogUHJvZ3JhbW1hYmxlIENvdW50ZXJzIDAgYW5kIDEgKi8KKyNkZWZpbmUgU1lTX0JBU0UgICAgICAgICAgICAgICAgICAgMHhCMTkwMDAwMAorI2RlZmluZSBTWVNfQ09VTlRFUl9DTlRSTCAgICAgICAgICAoU1lTX0JBU0UgKyAweDE0KQorICAjZGVmaW5lIFNZU19DTlRSTF9FMVMgICAgICAgICAgICAoMTw8MjMpCisgICNkZWZpbmUgU1lTX0NOVFJMX1QxUyAgICAgICAgICAgICgxPDwyMCkKKyAgI2RlZmluZSBTWVNfQ05UUkxfTTIxICAgICAgICAgICAgKDE8PDE5KQorICAjZGVmaW5lIFNZU19DTlRSTF9NMTEgICAgICAgICAgICAoMTw8MTgpCisgICNkZWZpbmUgU1lTX0NOVFJMX00wMSAgICAgICAgICAgICgxPDwxNykKKyAgI2RlZmluZSBTWVNfQ05UUkxfQzFTICAgICAgICAgICAgKDE8PDE2KQorICAjZGVmaW5lIFNZU19DTlRSTF9CUCAgICAgICAgICAgICAoMTw8MTQpCisgICNkZWZpbmUgU1lTX0NOVFJMX0VOMSAgICAgICAgICAgICgxPDwxMykKKyAgI2RlZmluZSBTWVNfQ05UUkxfQlQxICAgICAgICAgICAgKDE8PDEyKQorICAjZGVmaW5lIFNZU19DTlRSTF9FTjAgICAgICAgICAgICAoMTw8MTEpCisgICNkZWZpbmUgU1lTX0NOVFJMX0JUMCAgICAgICAgICAgICgxPDwxMCkKKyAgI2RlZmluZSBTWVNfQ05UUkxfRTAgICAgICAgICAgICAgKDE8PDgpCisgICNkZWZpbmUgU1lTX0NOVFJMX0UwUyAgICAgICAgICAgICgxPDw3KQorICAjZGVmaW5lIFNZU19DTlRSTF8zMlMgICAgICAgICAgICAoMTw8NSkKKyAgI2RlZmluZSBTWVNfQ05UUkxfVDBTICAgICAgICAgICAgKDE8PDQpCisgICNkZWZpbmUgU1lTX0NOVFJMX00yMCAgICAgICAgICAgICgxPDwzKQorICAjZGVmaW5lIFNZU19DTlRSTF9NMTAgICAgICAgICAgICAoMTw8MikKKyAgI2RlZmluZSBTWVNfQ05UUkxfTTAwICAgICAgICAgICAgKDE8PDEpCisgICNkZWZpbmUgU1lTX0NOVFJMX0MwUyAgICAgICAgICAgICgxPDwwKQorCisvKiBQcm9ncmFtbWFibGUgQ291bnRlciAwIFJlZ2lzdGVycyAqLworI2RlZmluZSBTWVNfVE9ZVFJJTSAgICAgICAgICAgICAgICAgKFNZU19CQVNFICsgMCkKKyNkZWZpbmUgU1lTX1RPWVdSSVRFICAgICAgICAgICAgICAgIChTWVNfQkFTRSArIDQpCisjZGVmaW5lIFNZU19UT1lNQVRDSDAgICAgICAgICAgICAgICAoU1lTX0JBU0UgKyA4KQorI2RlZmluZSBTWVNfVE9ZTUFUQ0gxICAgICAgICAgICAgICAgKFNZU19CQVNFICsgMHhDKQorI2RlZmluZSBTWVNfVE9ZTUFUQ0gyICAgICAgICAgICAgICAgKFNZU19CQVNFICsgMHgxMCkKKyNkZWZpbmUgU1lTX1RPWVJFQUQgICAgICAgICAgICAgICAgIChTWVNfQkFTRSArIDB4NDApCisKKy8qIFByb2dyYW1tYWJsZSBDb3VudGVyIDEgUmVnaXN0ZXJzICovCisjZGVmaW5lIFNZU19SVENUUklNICAgICAgICAgICAgICAgICAoU1lTX0JBU0UgKyAweDQ0KQorI2RlZmluZSBTWVNfUlRDV1JJVEUgICAgICAgICAgICAgICAgKFNZU19CQVNFICsgMHg0OCkKKyNkZWZpbmUgU1lTX1JUQ01BVENIMCAgICAgICAgICAgICAgIChTWVNfQkFTRSArIDB4NEMpCisjZGVmaW5lIFNZU19SVENNQVRDSDEgICAgICAgICAgICAgICAoU1lTX0JBU0UgKyAweDUwKQorI2RlZmluZSBTWVNfUlRDTUFUQ0gyICAgICAgICAgICAgICAgKFNZU19CQVNFICsgMHg1NCkKKyNkZWZpbmUgU1lTX1JUQ1JFQUQgICAgICAgICAgICAgICAgIChTWVNfQkFTRSArIDB4NTgpCisKKy8qIEkyUyBDb250cm9sbGVyICovCisjZGVmaW5lIEkyU19EQVRBICAgICAgICAgICAgICAgICAgICAweEIxMDAwMDAwCisgICNkZWZpbmUgSTJTX0RBVEFfTUFTSyAgICAgICAgKDB4ZmZmZmZmKQorI2RlZmluZSBJMlNfQ09ORklHICAgICAgICAgICAgICAgIDB4QjEwMDAwMDQKKyAgI2RlZmluZSBJMlNfQ09ORklHX1hVICAgICAgICAoMTw8MjUpCisgICNkZWZpbmUgSTJTX0NPTkZJR19YTyAgICAgICAgKDE8PDI0KQorICAjZGVmaW5lIEkyU19DT05GSUdfUlUgICAgICAgICgxPDwyMykKKyAgI2RlZmluZSBJMlNfQ09ORklHX1JPICAgICAgICAoMTw8MjIpCisgICNkZWZpbmUgSTJTX0NPTkZJR19UUiAgICAgICAgKDE8PDIxKQorICAjZGVmaW5lIEkyU19DT05GSUdfVEUgICAgICAgICgxPDwyMCkKKyAgI2RlZmluZSBJMlNfQ09ORklHX1RGICAgICAgICAoMTw8MTkpCisgICNkZWZpbmUgSTJTX0NPTkZJR19SUiAgICAgICAgKDE8PDE4KQorICAjZGVmaW5lIEkyU19DT05GSUdfUkUgICAgICAgICgxPDwxNykKKyAgI2RlZmluZSBJMlNfQ09ORklHX1JGICAgICAgICAoMTw8MTYpCisgICNkZWZpbmUgSTJTX0NPTkZJR19QRCAgICAgICAgKDE8PDExKQorICAjZGVmaW5lIEkyU19DT05GSUdfTEIgICAgICAgICgxPDwxMCkKKyAgI2RlZmluZSBJMlNfQ09ORklHX0lDICAgICAgICAoMTw8OSkKKyAgI2RlZmluZSBJMlNfQ09ORklHX0ZNX0JJVCAgICA3CisgICNkZWZpbmUgSTJTX0NPTkZJR19GTV9NQVNLICAgICAoMHgzIDw8IEkyU19DT05GSUdfRk1fQklUKQorICAgICNkZWZpbmUgSTJTX0NPTkZJR19GTV9JMlMgICAgKDB4MCA8PCBJMlNfQ09ORklHX0ZNX0JJVCkKKyAgICAjZGVmaW5lIEkyU19DT05GSUdfRk1fTEogICAgICgweDEgPDwgSTJTX0NPTkZJR19GTV9CSVQpCisgICAgI2RlZmluZSBJMlNfQ09ORklHX0ZNX1JKICAgICAoMHgyIDw8IEkyU19DT05GSUdfRk1fQklUKQorICAjZGVmaW5lIEkyU19DT05GSUdfVE4gICAgICAgICgxPDw2KQorICAjZGVmaW5lIEkyU19DT05GSUdfUk4gICAgICAgICgxPDw1KQorICAjZGVmaW5lIEkyU19DT05GSUdfU1pfQklUICAgIDAKKyAgI2RlZmluZSBJMlNfQ09ORklHX1NaX01BU0sgICAgICgweDFGIDw8IEkyU19DT05GSUdfU1pfQklUKQorCisjZGVmaW5lIEkyU19DT05UUk9MICAgICAgICAgICAgICAgIDB4QjEwMDAwMDgKKyAgI2RlZmluZSBJMlNfQ09OVFJPTF9EICAgICAgICAgKDE8PDEpCisgICNkZWZpbmUgSTJTX0NPTlRST0xfQ0UgICAgICAgICgxPDwwKQorCisvKiBVU0IgSG9zdCBDb250cm9sbGVyICovCisjZGVmaW5lIFVTQl9PSENJX0xFTiAgICAgICAgICAgICAgMHgwMDEwMDAwMAorCisvKiBVU0IgRGV2aWNlIENvbnRyb2xsZXIgKi8KKyNkZWZpbmUgVVNCRF9FUDBSRCAgICAgICAgICAgICAgICAweEIwMjAwMDAwCisjZGVmaW5lIFVTQkRfRVAwV1IgICAgICAgICAgICAgICAgMHhCMDIwMDAwNAorI2RlZmluZSBVU0JEX0VQMldSICAgICAgICAgICAgICAgIDB4QjAyMDAwMDgKKyNkZWZpbmUgVVNCRF9FUDNXUiAgICAgICAgICAgICAgICAweEIwMjAwMDBDCisjZGVmaW5lIFVTQkRfRVA0UkQgICAgICAgICAgICAgICAgMHhCMDIwMDAxMAorI2RlZmluZSBVU0JEX0VQNVJEICAgICAgICAgICAgICAgIDB4QjAyMDAwMTQKKyNkZWZpbmUgVVNCRF9JTlRFTiAgICAgICAgICAgICAgICAweEIwMjAwMDE4CisjZGVmaW5lIFVTQkRfSU5UU1RBVCAgICAgICAgICAgICAgMHhCMDIwMDAxQworICAjZGVmaW5lIFVTQkRFVl9JTlRfU09GICAgICAgICgxPDwxMikKKyAgI2RlZmluZSBVU0JERVZfSU5UX0hGX0JJVCAgICA2CisgICNkZWZpbmUgVVNCREVWX0lOVF9IRl9NQVNLICAgKDB4M2YgPDwgVVNCREVWX0lOVF9IRl9CSVQpCisgICNkZWZpbmUgVVNCREVWX0lOVF9DTVBMVF9CSVQgIDAKKyAgI2RlZmluZSBVU0JERVZfSU5UX0NNUExUX01BU0sgKDB4M2YgPDwgVVNCREVWX0lOVF9DTVBMVF9CSVQpCisjZGVmaW5lIFVTQkRfQ09ORklHICAgICAgICAgICAgICAgMHhCMDIwMDAyMAorI2RlZmluZSBVU0JEX0VQMENTICAgICAgICAgICAgICAgIDB4QjAyMDAwMjQKKyNkZWZpbmUgVVNCRF9FUDJDUyAgICAgICAgICAgICAgICAweEIwMjAwMDI4CisjZGVmaW5lIFVTQkRfRVAzQ1MgICAgICAgICAgICAgICAgMHhCMDIwMDAyQworI2RlZmluZSBVU0JEX0VQNENTICAgICAgICAgICAgICAgIDB4QjAyMDAwMzAKKyNkZWZpbmUgVVNCRF9FUDVDUyAgICAgICAgICAgICAgICAweEIwMjAwMDM0CisgICNkZWZpbmUgVVNCREVWX0NTX1NVICAgICAgICAgKDE8PDE0KQorICAjZGVmaW5lIFVTQkRFVl9DU19OQUsgICAgICAgICgxPDwxMykKKyAgI2RlZmluZSBVU0JERVZfQ1NfQUNLICAgICAgICAoMTw8MTIpCisgICNkZWZpbmUgVVNCREVWX0NTX0JVU1kgICAgICAgKDE8PDExKQorICAjZGVmaW5lIFVTQkRFVl9DU19UU0laRV9CSVQgIDEKKyAgI2RlZmluZSBVU0JERVZfQ1NfVFNJWkVfTUFTSyAoMHgzZmYgPDwgVVNCREVWX0NTX1RTSVpFX0JJVCkKKyAgI2RlZmluZSBVU0JERVZfQ1NfU1RBTEwgICAgICAoMTw8MCkKKyNkZWZpbmUgVVNCRF9FUDBSRFNUQVQgICAgICAgICAgICAweEIwMjAwMDQwCisjZGVmaW5lIFVTQkRfRVAwV1JTVEFUICAgICAgICAgICAgMHhCMDIwMDA0NAorI2RlZmluZSBVU0JEX0VQMldSU1RBVCAgICAgICAgICAgIDB4QjAyMDAwNDgKKyNkZWZpbmUgVVNCRF9FUDNXUlNUQVQgICAgICAgICAgICAweEIwMjAwMDRDCisjZGVmaW5lIFVTQkRfRVA0UkRTVEFUICAgICAgICAgICAgMHhCMDIwMDA1MAorI2RlZmluZSBVU0JEX0VQNVJEU1RBVCAgICAgICAgICAgIDB4QjAyMDAwNTQKKyAgI2RlZmluZSBVU0JERVZfRlNUQVRfRkxVU0ggICAgICgxPDw2KQorICAjZGVmaW5lIFVTQkRFVl9GU1RBVF9VRiAgICAgICAgKDE8PDUpCisgICNkZWZpbmUgVVNCREVWX0ZTVEFUX09GICAgICAgICAoMTw8NCkKKyAgI2RlZmluZSBVU0JERVZfRlNUQVRfRkNOVF9CSVQgIDAKKyAgI2RlZmluZSBVU0JERVZfRlNUQVRfRkNOVF9NQVNLICgweDBmIDw8IFVTQkRFVl9GU1RBVF9GQ05UX0JJVCkKKyNkZWZpbmUgVVNCRF9FTkFCTEUgICAgICAgICAgICAgICAweEIwMjAwMDU4CisgICNkZWZpbmUgVVNCREVWX0VOQUJMRSAoMTw8MSkKKyAgI2RlZmluZSBVU0JERVZfQ0UgICAgICgxPDwwKQorCisvKiBFdGhlcm5ldCBDb250cm9sbGVycyAgKi8KKworLyogNCBieXRlIG9mZnNldHMgZnJvbSBBVTEwMDBfRVRIX0JBU0UgKi8KKyNkZWZpbmUgTUFDX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAweDAKKyAgI2RlZmluZSBNQUNfUlhfRU5BQkxFICAgICAgICAgICAgICAgKDE8PDIpCisgICNkZWZpbmUgTUFDX1RYX0VOQUJMRSAgICAgICAgICAgICAgICgxPDwzKQorICAjZGVmaW5lIE1BQ19ERUZfQ0hFQ0sgICAgICAgICAgICAgICAoMTw8NSkKKyAgI2RlZmluZSBNQUNfU0VUX0JMKFgpICAgICAgICgoKFgpJjB4Myk8PDYpCisgICNkZWZpbmUgTUFDX0FVVE9fUEFEICAgICAgICAgICAgICAgICgxPDw4KQorICAjZGVmaW5lIE1BQ19ESVNBQkxFX1JFVFJZICAgICAgICAgICgxPDwxMCkKKyAgI2RlZmluZSBNQUNfRElTQUJMRV9CQ0FTVCAgICAgICAgICAoMTw8MTEpCisgICNkZWZpbmUgTUFDX0xBVEVfQ09MICAgICAgICAgICAgICAgKDE8PDEyKQorICAjZGVmaW5lIE1BQ19IQVNIX01PREUgICAgICAgICAgICAgICgxPDwxMykKKyAgI2RlZmluZSBNQUNfSEFTSF9PTkxZICAgICAgICAgICAgICAoMTw8MTUpCisgICNkZWZpbmUgTUFDX1BBU1NfQUxMICAgICAgICAgICAgICAgKDE8PDE2KQorICAjZGVmaW5lIE1BQ19JTlZFUlNFX0ZJTFRFUiAgICAgICAgICgxPDwxNykKKyAgI2RlZmluZSBNQUNfUFJPTUlTQ1VPVVMgICAgICAgICAgICAoMTw8MTgpCisgICNkZWZpbmUgTUFDX1BBU1NfQUxMX01VTFRJICAgICAgICAgKDE8PDE5KQorICAjZGVmaW5lIE1BQ19GVUxMX0RVUExFWCAgICAgICAgICAgICgxPDwyMCkKKyAgI2RlZmluZSBNQUNfTk9STUFMX01PREUgICAgICAgICAgICAgICAgIDAKKyAgI2RlZmluZSBNQUNfSU5UX0xPT1BCQUNLICAgICAgICAgICAoMTw8MjEpCisgICNkZWZpbmUgTUFDX0VYVF9MT09QQkFDSyAgICAgICAgICAgKDE8PDIyKQorICAjZGVmaW5lIE1BQ19ESVNBQkxFX1JYX09XTiAgICAgICAgICgxPDwyMykKKyAgI2RlZmluZSBNQUNfQklHX0VORElBTiAgICAgICAgICAgICAoMTw8MzApCisgICNkZWZpbmUgTUFDX1JYX0FMTCAgICAgICAgICAgICAgICAgKDE8PDMxKQorI2RlZmluZSBNQUNfQUREUkVTU19ISUdIICAgICAgICAgICAgICAgIDB4NAorI2RlZmluZSBNQUNfQUREUkVTU19MT1cgICAgICAgICAgICAgICAgIDB4OAorI2RlZmluZSBNQUNfTUNBU1RfSElHSCAgICAgICAgICAgICAgICAgIDB4QworI2RlZmluZSBNQUNfTUNBU1RfTE9XICAgICAgICAgICAgICAgICAgMHgxMAorI2RlZmluZSBNQUNfTUlJX0NOVFJMICAgICAgICAgICAgICAgICAgMHgxNAorICAjZGVmaW5lIE1BQ19NSUlfQlVTWSAgICAgICAgICAgICAgICAoMTw8MCkKKyAgI2RlZmluZSBNQUNfTUlJX1JFQUQgICAgICAgICAgICAgICAgICAgICAwCisgICNkZWZpbmUgTUFDX01JSV9XUklURSAgICAgICAgICAgICAgICgxPDwxKQorICAjZGVmaW5lIE1BQ19TRVRfTUlJX1NFTEVDVF9SRUcoWCkgICAoKChYKSYweDFmKTw8NikKKyAgI2RlZmluZSBNQUNfU0VUX01JSV9TRUxFQ1RfUEhZKFgpICAgKCgoWCkmMHgxZik8PDExKQorI2RlZmluZSBNQUNfTUlJX0RBVEEgICAgICAgICAgICAgICAgICAgMHgxOAorI2RlZmluZSBNQUNfRkxPV19DTlRSTCAgICAgICAgICAgICAgICAgMHgxQworICAjZGVmaW5lIE1BQ19GTE9XX0NOVFJMX0JVU1kgICAgICAgICAoMTw8MCkKKyAgI2RlZmluZSBNQUNfRkxPV19DTlRSTF9FTkFCTEUgICAgICAgKDE8PDEpCisgICNkZWZpbmUgTUFDX1BBU1NfQ09OVFJPTCAgICAgICAgICAgICgxPDwyKQorICAjZGVmaW5lIE1BQ19TRVRfUEFVU0UoWCkgICAgICAgICgoKFgpJjB4ZmZmZik8PDE2KQorI2RlZmluZSBNQUNfVkxBTjFfVEFHICAgICAgICAgICAgICAgICAgMHgyMAorI2RlZmluZSBNQUNfVkxBTjJfVEFHICAgICAgICAgICAgICAgICAgMHgyNAorCisvKiBFdGhlcm5ldCBDb250cm9sbGVyIEVuYWJsZSAqLworCisgICNkZWZpbmUgTUFDX0VOX0NMT0NLX0VOQUJMRSAgICAgICAgICgxPDwwKQorICAjZGVmaW5lIE1BQ19FTl9SRVNFVDAgICAgICAgICAgICAgICAoMTw8MSkKKyAgI2RlZmluZSBNQUNfRU5fVE9TUyAgICAgICAgICAgICAgICAgKDA8PDIpCisgICNkZWZpbmUgTUFDX0VOX0NBQ0hFQUJMRSAgICAgICAgICAgICgxPDwzKQorICAjZGVmaW5lIE1BQ19FTl9SRVNFVDEgICAgICAgICAgICAgICAoMTw8NCkKKyAgI2RlZmluZSBNQUNfRU5fUkVTRVQyICAgICAgICAgICAgICAgKDE8PDUpCisgICNkZWZpbmUgTUFDX0RNQV9SRVNFVCAgICAgICAgICAgICAgICgxPDw2KQorCisvKiBFdGhlcm5ldCBDb250cm9sbGVyIERNQSBDaGFubmVscyAqLworCisjZGVmaW5lIE1BQzBfVFhfRE1BX0FERFIgICAgICAgICAweEI0MDA0MDAwCisjZGVmaW5lIE1BQzFfVFhfRE1BX0FERFIgICAgICAgICAweEI0MDA0MjAwCisvKiBvZmZzZXRzIGZyb20gTUFDX1RYX1JJTkdfQUREUiBhZGRyZXNzICovCisjZGVmaW5lIE1BQ19UWF9CVUZGMF9TVEFUVVMgICAgICAgICAgICAgMHgwCisgICNkZWZpbmUgVFhfRlJBTUVfQUJPUlRFRCAgICAgICAgICAgICgxPDwwKQorICAjZGVmaW5lIFRYX0pBQl9USU1FT1VUICAgICAgICAgICAgICAoMTw8MSkKKyAgI2RlZmluZSBUWF9OT19DQVJSSUVSICAgICAgICAgICAgICAgKDE8PDIpCisgICNkZWZpbmUgVFhfTE9TU19DQVJSSUVSICAgICAgICAgICAgICgxPDwzKQorICAjZGVmaW5lIFRYX0VYQ19ERUYgICAgICAgICAgICAgICAgICAoMTw8NCkKKyAgI2RlZmluZSBUWF9MQVRFX0NPTExfQUJPUlQgICAgICAgICAgKDE8PDUpCisgICNkZWZpbmUgVFhfRVhDX0NPTEwgICAgICAgICAgICAgICAgICgxPDw2KQorICAjZGVmaW5lIFRYX1VOREVSUlVOICAgICAgICAgICAgICAgICAoMTw8NykKKyAgI2RlZmluZSBUWF9ERUZFUlJFRCAgICAgICAgICAgICAgICAgKDE8PDgpCisgICNkZWZpbmUgVFhfTEFURV9DT0xMICAgICAgICAgICAgICAgICgxPDw5KQorICAjZGVmaW5lIFRYX0NPTExfQ05UX01BU0sgICAgICAgICAoMHhGPDwxMCkKKyAgI2RlZmluZSBUWF9QS1RfUkVUUlkgICAgICAgICAgICAgICAoMTw8MzEpCisjZGVmaW5lIE1BQ19UWF9CVUZGMF9BRERSICAgICAgICAgICAgICAgIDB4NAorICAjZGVmaW5lIFRYX0RNQV9FTkFCTEUgICAgICAgICAgICAgICAoMTw8MCkKKyAgI2RlZmluZSBUWF9UX0RPTkUgICAgICAgICAgICAgICAgICAgKDE8PDEpCisgICNkZWZpbmUgVFhfR0VUX0RNQV9CVUZGRVIoWCkgICAgKCgoWCk+PjIpJjB4MykKKyNkZWZpbmUgTUFDX1RYX0JVRkYwX0xFTiAgICAgICAgICAgICAgICAgMHg4CisjZGVmaW5lIE1BQ19UWF9CVUZGMV9TVEFUVVMgICAgICAgICAgICAgMHgxMAorI2RlZmluZSBNQUNfVFhfQlVGRjFfQUREUiAgICAgICAgICAgICAgIDB4MTQKKyNkZWZpbmUgTUFDX1RYX0JVRkYxX0xFTiAgICAgICAgICAgICAgICAweDE4CisjZGVmaW5lIE1BQ19UWF9CVUZGMl9TVEFUVVMgICAgICAgICAgICAgMHgyMAorI2RlZmluZSBNQUNfVFhfQlVGRjJfQUREUiAgICAgICAgICAgICAgIDB4MjQKKyNkZWZpbmUgTUFDX1RYX0JVRkYyX0xFTiAgICAgICAgICAgICAgICAweDI4CisjZGVmaW5lIE1BQ19UWF9CVUZGM19TVEFUVVMgICAgICAgICAgICAgMHgzMAorI2RlZmluZSBNQUNfVFhfQlVGRjNfQUREUiAgICAgICAgICAgICAgIDB4MzQKKyNkZWZpbmUgTUFDX1RYX0JVRkYzX0xFTiAgICAgICAgICAgICAgICAweDM4CisKKyNkZWZpbmUgTUFDMF9SWF9ETUFfQUREUiAgICAgICAgIDB4QjQwMDQxMDAKKyNkZWZpbmUgTUFDMV9SWF9ETUFfQUREUiAgICAgICAgIDB4QjQwMDQzMDAKKy8qIG9mZnNldHMgZnJvbSBNQUNfUlhfUklOR19BRERSICovCisjZGVmaW5lIE1BQ19SWF9CVUZGMF9TVEFUVVMgICAgICAgICAgICAgIDB4MAorICAjZGVmaW5lIFJYX0ZSQU1FX0xFTl9NQVNLICAgICAgICAgICAweDNmZmYKKyAgI2RlZmluZSBSWF9XRE9HX1RJTUVSICAgICAgICAgICAgICAoMTw8MTQpCisgICNkZWZpbmUgUlhfUlVOVCAgICAgICAgICAgICAgICAgICAgKDE8PDE1KQorICAjZGVmaW5lIFJYX09WRVJMRU4gICAgICAgICAgICAgICAgICgxPDwxNikKKyAgI2RlZmluZSBSWF9DT0xMICAgICAgICAgICAgICAgICAgICAoMTw8MTcpCisgICNkZWZpbmUgUlhfRVRIRVIgICAgICAgICAgICAgICAgICAgKDE8PDE4KQorICAjZGVmaW5lIFJYX01JSV9FUlJPUiAgICAgICAgICAgICAgICgxPDwxOSkKKyAgI2RlZmluZSBSWF9EUklCQkxJTkcgICAgICAgICAgICAgICAoMTw8MjApCisgICNkZWZpbmUgUlhfQ1JDX0VSUk9SICAgICAgICAgICAgICAgKDE8PDIxKQorICAjZGVmaW5lIFJYX1ZMQU4xICAgICAgICAgICAgICAgICAgICgxPDwyMikKKyAgI2RlZmluZSBSWF9WTEFOMiAgICAgICAgICAgICAgICAgICAoMTw8MjMpCisgICNkZWZpbmUgUlhfTEVOX0VSUk9SICAgICAgICAgICAgICAgKDE8PDI0KQorICAjZGVmaW5lIFJYX0NOVFJMX0ZSQU1FICAgICAgICAgICAgICgxPDwyNSkKKyAgI2RlZmluZSBSWF9VX0NOVFJMX0ZSQU1FICAgICAgICAgICAoMTw8MjYpCisgICNkZWZpbmUgUlhfTUNBU1RfRlJBTUUgICAgICAgICAgICAgKDE8PDI3KQorICAjZGVmaW5lIFJYX0JDQVNUX0ZSQU1FICAgICAgICAgICAgICgxPDwyOCkKKyAgI2RlZmluZSBSWF9GSUxURVJfRkFJTCAgICAgICAgICAgICAoMTw8MjkpCisgICNkZWZpbmUgUlhfUEFDS0VUX0ZJTFRFUiAgICAgICAgICAgKDE8PDMwKQorICAjZGVmaW5lIFJYX01JU1NFRF9GUkFNRSAgICAgICAgICAgICgxPDwzMSkKKworICAjZGVmaW5lIFJYX0VSUk9SIChSWF9XRE9HX1RJTUVSIHwgUlhfUlVOVCB8IFJYX09WRVJMRU4gfCAgXAorICAgICAgICAgICAgICAgICAgICBSWF9DT0xMIHwgUlhfTUlJX0VSUk9SIHwgUlhfQ1JDX0VSUk9SIHwgXAorICAgICAgICAgICAgICAgICAgICBSWF9MRU5fRVJST1IgfCBSWF9VX0NOVFJMX0ZSQU1FIHwgUlhfTUlTU0VEX0ZSQU1FKQorI2RlZmluZSBNQUNfUlhfQlVGRjBfQUREUiAgICAgICAgICAgICAgICAweDQKKyAgI2RlZmluZSBSWF9ETUFfRU5BQkxFICAgICAgICAgICAgICAgKDE8PDApCisgICNkZWZpbmUgUlhfVF9ET05FICAgICAgICAgICAgICAgICAgICgxPDwxKQorICAjZGVmaW5lIFJYX0dFVF9ETUFfQlVGRkVSKFgpICAgICgoKFgpPj4yKSYweDMpCisgICNkZWZpbmUgUlhfU0VUX0JVRkZfQUREUihYKSAgICAgKChYKSYweGZmZmZmZmMwKQorI2RlZmluZSBNQUNfUlhfQlVGRjFfU1RBVFVTICAgICAgICAgICAgICAweDEwCisjZGVmaW5lIE1BQ19SWF9CVUZGMV9BRERSICAgICAgICAgICAgICAgIDB4MTQKKyNkZWZpbmUgTUFDX1JYX0JVRkYyX1NUQVRVUyAgICAgICAgICAgICAgMHgyMAorI2RlZmluZSBNQUNfUlhfQlVGRjJfQUREUiAgICAgICAgICAgICAgICAweDI0CisjZGVmaW5lIE1BQ19SWF9CVUZGM19TVEFUVVMgICAgICAgICAgICAgIDB4MzAKKyNkZWZpbmUgTUFDX1JYX0JVRkYzX0FERFIgICAgICAgICAgICAgICAgMHgzNAorCisKKy8qIFVBUlRTIDAtMyAqLworI2RlZmluZSBVQVJUX0JBU0UgICAgICAgICAgICAgICAgIFVBUlQwX0FERFIKKyNkZWZpbmUgVUFSVF9ERUJVR19CQVNFICAgICAgICAgICBVQVJUM19BRERSCisKKyNkZWZpbmUgVUFSVF9SWAkJMAkvKiBSZWNlaXZlIGJ1ZmZlciAqLworI2RlZmluZSBVQVJUX1RYCQk0CS8qIFRyYW5zbWl0IGJ1ZmZlciAqLworI2RlZmluZSBVQVJUX0lFUgk4CS8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVUFSVF9JSVIJMHhDCS8qIEludGVycnVwdCBJRCBSZWdpc3RlciAqLworI2RlZmluZSBVQVJUX0ZDUgkweDEwCS8qIEZJRk8gQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBVQVJUX0xDUgkweDE0CS8qIExpbmUgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBVQVJUX01DUgkweDE4CS8qIE1vZGVtIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVUFSVF9MU1IJMHgxQwkvKiBMaW5lIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBVQVJUX01TUgkweDIwCS8qIE1vZGVtIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBVQVJUX0NMSwkweDI4CS8qIEJhdWQgUmF0ZSBDbG9jayBEaXZpZGVyICovCisjZGVmaW5lIFVBUlRfTU9EX0NOVFJMCTB4MTAwCS8qIE1vZHVsZSBDb250cm9sICovCisKKyNkZWZpbmUgVUFSVF9GQ1JfRU5BQkxFX0ZJRk8JMHgwMSAvKiBFbmFibGUgdGhlIEZJRk8gKi8KKyNkZWZpbmUgVUFSVF9GQ1JfQ0xFQVJfUkNWUgkweDAyIC8qIENsZWFyIHRoZSBSQ1ZSIEZJRk8gKi8KKyNkZWZpbmUgVUFSVF9GQ1JfQ0xFQVJfWE1JVAkweDA0IC8qIENsZWFyIHRoZSBYTUlUIEZJRk8gKi8KKyNkZWZpbmUgVUFSVF9GQ1JfRE1BX1NFTEVDVAkweDA4IC8qIEZvciBETUEgYXBwbGljYXRpb25zICovCisjZGVmaW5lIFVBUlRfRkNSX1RSSUdHRVJfTUFTSwkweEYwIC8qIE1hc2sgZm9yIHRoZSBGSUZPIHRyaWdnZXIgcmFuZ2UgKi8KKyNkZWZpbmUgVUFSVF9GQ1JfUl9UUklHR0VSXzEJMHgwMCAvKiBNYXNrIGZvciByZWNlaXZlIHRyaWdnZXIgc2V0IGF0IDEgKi8KKyNkZWZpbmUgVUFSVF9GQ1JfUl9UUklHR0VSXzQJMHg0MCAvKiBNYXNrIGZvciByZWNlaXZlIHRyaWdnZXIgc2V0IGF0IDQgKi8KKyNkZWZpbmUgVUFSVF9GQ1JfUl9UUklHR0VSXzgJMHg4MCAvKiBNYXNrIGZvciByZWNlaXZlIHRyaWdnZXIgc2V0IGF0IDggKi8KKyNkZWZpbmUgVUFSVF9GQ1JfUl9UUklHR0VSXzE0ICAgMHhBMCAvKiBNYXNrIGZvciByZWNlaXZlIHRyaWdnZXIgc2V0IGF0IDE0ICovCisjZGVmaW5lIFVBUlRfRkNSX1RfVFJJR0dFUl8wCTB4MDAgLyogTWFzayBmb3IgdHJhbnNtaXQgdHJpZ2dlciBzZXQgYXQgMCAqLworI2RlZmluZSBVQVJUX0ZDUl9UX1RSSUdHRVJfNAkweDEwIC8qIE1hc2sgZm9yIHRyYW5zbWl0IHRyaWdnZXIgc2V0IGF0IDQgKi8KKyNkZWZpbmUgVUFSVF9GQ1JfVF9UUklHR0VSXzggICAgMHgyMCAvKiBNYXNrIGZvciB0cmFuc21pdCB0cmlnZ2VyIHNldCBhdCA4ICovCisjZGVmaW5lIFVBUlRfRkNSX1RfVFJJR0dFUl8xMgkweDMwIC8qIE1hc2sgZm9yIHRyYW5zbWl0IHRyaWdnZXIgc2V0IGF0IDEyICovCisKKy8qCisgKiBUaGVzZSBhcmUgdGhlIGRlZmluaXRpb25zIGZvciB0aGUgTGluZSBDb250cm9sIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgVUFSVF9MQ1JfU0JDCTB4NDAJLyogU2V0IGJyZWFrIGNvbnRyb2wgKi8KKyNkZWZpbmUgVUFSVF9MQ1JfU1BBUgkweDIwCS8qIFN0aWNrIHBhcml0eSAoPykgKi8KKyNkZWZpbmUgVUFSVF9MQ1JfRVBBUgkweDEwCS8qIEV2ZW4gcGFyaXR5IHNlbGVjdCAqLworI2RlZmluZSBVQVJUX0xDUl9QQVJJVFkJMHgwOAkvKiBQYXJpdHkgRW5hYmxlICovCisjZGVmaW5lIFVBUlRfTENSX1NUT1AJMHgwNAkvKiBTdG9wIGJpdHM6IDA9MSBzdG9wIGJpdCwgMT0gMiBzdG9wIGJpdHMgKi8KKyNkZWZpbmUgVUFSVF9MQ1JfV0xFTjUgIDB4MDAJLyogV29yZGxlbmd0aDogNSBiaXRzICovCisjZGVmaW5lIFVBUlRfTENSX1dMRU42ICAweDAxCS8qIFdvcmRsZW5ndGg6IDYgYml0cyAqLworI2RlZmluZSBVQVJUX0xDUl9XTEVONyAgMHgwMgkvKiBXb3JkbGVuZ3RoOiA3IGJpdHMgKi8KKyNkZWZpbmUgVUFSVF9MQ1JfV0xFTjggIDB4MDMJLyogV29yZGxlbmd0aDogOCBiaXRzICovCisKKy8qCisgKiBUaGVzZSBhcmUgdGhlIGRlZmluaXRpb25zIGZvciB0aGUgTGluZSBTdGF0dXMgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBVQVJUX0xTUl9URU1UCTB4NDAJLyogVHJhbnNtaXR0ZXIgZW1wdHkgKi8KKyNkZWZpbmUgVUFSVF9MU1JfVEhSRQkweDIwCS8qIFRyYW5zbWl0LWhvbGQtcmVnaXN0ZXIgZW1wdHkgKi8KKyNkZWZpbmUgVUFSVF9MU1JfQkkJMHgxMAkvKiBCcmVhayBpbnRlcnJ1cHQgaW5kaWNhdG9yICovCisjZGVmaW5lIFVBUlRfTFNSX0ZFCTB4MDgJLyogRnJhbWUgZXJyb3IgaW5kaWNhdG9yICovCisjZGVmaW5lIFVBUlRfTFNSX1BFCTB4MDQJLyogUGFyaXR5IGVycm9yIGluZGljYXRvciAqLworI2RlZmluZSBVQVJUX0xTUl9PRQkweDAyCS8qIE92ZXJydW4gZXJyb3IgaW5kaWNhdG9yICovCisjZGVmaW5lIFVBUlRfTFNSX0RSCTB4MDEJLyogUmVjZWl2ZXIgZGF0YSByZWFkeSAqLworCisvKgorICogVGhlc2UgYXJlIHRoZSBkZWZpbml0aW9ucyBmb3IgdGhlIEludGVycnVwdCBJZGVudGlmaWNhdGlvbiBSZWdpc3RlcgorICovCisjZGVmaW5lIFVBUlRfSUlSX05PX0lOVAkweDAxCS8qIE5vIGludGVycnVwdHMgcGVuZGluZyAqLworI2RlZmluZSBVQVJUX0lJUl9JRAkweDA2CS8qIE1hc2sgZm9yIHRoZSBpbnRlcnJ1cHQgSUQgKi8KKyNkZWZpbmUgVUFSVF9JSVJfTVNJCTB4MDAJLyogTW9kZW0gc3RhdHVzIGludGVycnVwdCAqLworI2RlZmluZSBVQVJUX0lJUl9USFJJCTB4MDIJLyogVHJhbnNtaXR0ZXIgaG9sZGluZyByZWdpc3RlciBlbXB0eSAqLworI2RlZmluZSBVQVJUX0lJUl9SREkJMHgwNAkvKiBSZWNlaXZlciBkYXRhIGludGVycnVwdCAqLworI2RlZmluZSBVQVJUX0lJUl9STFNJCTB4MDYJLyogUmVjZWl2ZXIgbGluZSBzdGF0dXMgaW50ZXJydXB0ICovCisKKy8qCisgKiBUaGVzZSBhcmUgdGhlIGRlZmluaXRpb25zIGZvciB0aGUgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlcgorICovCisjZGVmaW5lIFVBUlRfSUVSX01TSQkweDA4CS8qIEVuYWJsZSBNb2RlbSBzdGF0dXMgaW50ZXJydXB0ICovCisjZGVmaW5lIFVBUlRfSUVSX1JMU0kJMHgwNAkvKiBFbmFibGUgcmVjZWl2ZXIgbGluZSBzdGF0dXMgaW50ZXJydXB0ICovCisjZGVmaW5lIFVBUlRfSUVSX1RIUkkJMHgwMgkvKiBFbmFibGUgVHJhbnNtaXR0ZXIgaG9sZGluZyByZWdpc3RlciBpbnQuICovCisjZGVmaW5lIFVBUlRfSUVSX1JESQkweDAxCS8qIEVuYWJsZSByZWNlaXZlciBkYXRhIGludGVycnVwdCAqLworCisvKgorICogVGhlc2UgYXJlIHRoZSBkZWZpbml0aW9ucyBmb3IgdGhlIE1vZGVtIENvbnRyb2wgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBVQVJUX01DUl9MT09QCTB4MTAJLyogRW5hYmxlIGxvb3BiYWNrIHRlc3QgbW9kZSAqLworI2RlZmluZSBVQVJUX01DUl9PVVQyCTB4MDgJLyogT3V0MiBjb21wbGVtZW50ICovCisjZGVmaW5lIFVBUlRfTUNSX09VVDEJMHgwNAkvKiBPdXQxIGNvbXBsZW1lbnQgKi8KKyNkZWZpbmUgVUFSVF9NQ1JfUlRTCTB4MDIJLyogUlRTIGNvbXBsZW1lbnQgKi8KKyNkZWZpbmUgVUFSVF9NQ1JfRFRSCTB4MDEJLyogRFRSIGNvbXBsZW1lbnQgKi8KKworLyoKKyAqIFRoZXNlIGFyZSB0aGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBNb2RlbSBTdGF0dXMgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBVQVJUX01TUl9EQ0QJMHg4MAkvKiBEYXRhIENhcnJpZXIgRGV0ZWN0ICovCisjZGVmaW5lIFVBUlRfTVNSX1JJCTB4NDAJLyogUmluZyBJbmRpY2F0b3IgKi8KKyNkZWZpbmUgVUFSVF9NU1JfRFNSCTB4MjAJLyogRGF0YSBTZXQgUmVhZHkgKi8KKyNkZWZpbmUgVUFSVF9NU1JfQ1RTCTB4MTAJLyogQ2xlYXIgdG8gU2VuZCAqLworI2RlZmluZSBVQVJUX01TUl9ERENECTB4MDgJLyogRGVsdGEgRENEICovCisjZGVmaW5lIFVBUlRfTVNSX1RFUkkJMHgwNAkvKiBUcmFpbGluZyBlZGdlIHJpbmcgaW5kaWNhdG9yICovCisjZGVmaW5lIFVBUlRfTVNSX0REU1IJMHgwMgkvKiBEZWx0YSBEU1IgKi8KKyNkZWZpbmUgVUFSVF9NU1JfRENUUwkweDAxCS8qIERlbHRhIENUUyAqLworI2RlZmluZSBVQVJUX01TUl9BTllfREVMVEEgMHgwRgkvKiBBbnkgb2YgdGhlIGRlbHRhIGJpdHMhICovCisKKworCisvKiBTU0lPICovCisjZGVmaW5lIFNTSTBfU1RBVFVTICAgICAgICAgICAgICAgIDB4QjE2MDAwMDAKKyAgI2RlZmluZSBTU0lfU1RBVFVTX0JGICAgICAgICAgICAgICAoMTw8NCkKKyAgI2RlZmluZSBTU0lfU1RBVFVTX09GICAgICAgICAgICAgICAoMTw8MykKKyAgI2RlZmluZSBTU0lfU1RBVFVTX1VGICAgICAgICAgICAgICAoMTw8MikKKyAgI2RlZmluZSBTU0lfU1RBVFVTX0QgICAgICAgICAgICAgICAoMTw8MSkKKyAgI2RlZmluZSBTU0lfU1RBVFVTX0IgICAgICAgICAgICAgICAoMTw8MCkKKyNkZWZpbmUgU1NJMF9JTlQgICAgICAgICAgICAgICAgICAgMHhCMTYwMDAwNAorICAjZGVmaW5lIFNTSV9JTlRfT0kgICAgICAgICAgICAgICAgICgxPDwzKQorICAjZGVmaW5lIFNTSV9JTlRfVUkgICAgICAgICAgICAgICAgICgxPDwyKQorICAjZGVmaW5lIFNTSV9JTlRfREkgICAgICAgICAgICAgICAgICgxPDwxKQorI2RlZmluZSBTU0kwX0lOVF9FTkFCTEUgICAgICAgICAgICAweEIxNjAwMDA4CisgICNkZWZpbmUgU1NJX0lOVEVfT0lFICAgICAgICAgICAgICAgKDE8PDMpCisgICNkZWZpbmUgU1NJX0lOVEVfVUlFICAgICAgICAgICAgICAgKDE8PDIpCisgICNkZWZpbmUgU1NJX0lOVEVfRElFICAgICAgICAgICAgICAgKDE8PDEpCisjZGVmaW5lIFNTSTBfQ09ORklHICAgICAgICAgICAgICAgIDB4QjE2MDAwMjAKKyAgI2RlZmluZSBTU0lfQ09ORklHX0FPICAgICAgICAgICAgICAoMTw8MjQpCisgICNkZWZpbmUgU1NJX0NPTkZJR19ETyAgICAgICAgICAgICAgKDE8PDIzKQorICAjZGVmaW5lIFNTSV9DT05GSUdfQUxFTl9CSVQgICAgICAgIDIwCisgICAgI2RlZmluZSBTU0lfQ09ORklHX0FMRU5fTUFTSyAgICAgICAoMHg3PDwyMCkKKyAgI2RlZmluZSBTU0lfQ09ORklHX0RMRU5fQklUICAgICAgICAxNgorICAgICNkZWZpbmUgU1NJX0NPTkZJR19ETEVOX01BU0sgICAgICAgKDB4Nzw8MTYpCisgICNkZWZpbmUgU1NJX0NPTkZJR19ERCAgICAgICAgICAgICAgKDE8PDExKQorICAjZGVmaW5lIFNTSV9DT05GSUdfQUQgICAgICAgICAgICAgICgxPDwxMCkKKyAgI2RlZmluZSBTU0lfQ09ORklHX0JNX0JJVCAgICAgICAgICA4CisgICAgI2RlZmluZSBTU0lfQ09ORklHX0JNX01BU0sgICAgICAgICAoMHgzPDw4KQorICAjZGVmaW5lIFNTSV9DT05GSUdfQ0UgICAgICAgICAgICAgICgxPDw3KQorICAjZGVmaW5lIFNTSV9DT05GSUdfRFAgICAgICAgICAgICAgICgxPDw2KQorICAjZGVmaW5lIFNTSV9DT05GSUdfREwgICAgICAgICAgICAgICgxPDw1KQorICAjZGVmaW5lIFNTSV9DT05GSUdfRVAgICAgICAgICAgICAgICgxPDw0KQorI2RlZmluZSBTU0kwX0FEQVRBICAgICAgICAgICAgICAgICAweEIxNjAwMDI0CisgICNkZWZpbmUgU1NJX0FEX0QgICAgICAgICAgICAgICAgICAgKDE8PDI0KQorICAjZGVmaW5lIFNTSV9BRF9BRERSX0JJVCAgICAgICAgICAgIDE2CisgICAgI2RlZmluZSBTU0lfQURfQUREUl9NQVNLICAgICAgICAgICAoMHhmZjw8MTYpCisgICNkZWZpbmUgU1NJX0FEX0RBVEFfQklUICAgICAgICAgICAgMAorICAgICNkZWZpbmUgU1NJX0FEX0RBVEFfTUFTSyAgICAgICAgICAgKDB4ZmZmPDwwKQorI2RlZmluZSBTU0kwX0NMS0RJViAgICAgICAgICAgICAgICAweEIxNjAwMDI4CisjZGVmaW5lIFNTSTBfQ09OVFJPTCAgICAgICAgICAgICAgIDB4QjE2MDAxMDAKKyAgI2RlZmluZSBTU0lfQ09OVFJPTF9DRCAgICAgICAgICAgICAoMTw8MSkKKyAgI2RlZmluZSBTU0lfQ09OVFJPTF9FICAgICAgICAgICAgICAoMTw8MCkKKworLyogU1NJMSAqLworI2RlZmluZSBTU0kxX1NUQVRVUyAgICAgICAgICAgICAgICAweEIxNjgwMDAwCisjZGVmaW5lIFNTSTFfSU5UICAgICAgICAgICAgICAgICAgIDB4QjE2ODAwMDQKKyNkZWZpbmUgU1NJMV9JTlRfRU5BQkxFICAgICAgICAgICAgMHhCMTY4MDAwOAorI2RlZmluZSBTU0kxX0NPTkZJRyAgICAgICAgICAgICAgICAweEIxNjgwMDIwCisjZGVmaW5lIFNTSTFfQURBVEEgICAgICAgICAgICAgICAgIDB4QjE2ODAwMjQKKyNkZWZpbmUgU1NJMV9DTEtESVYgICAgICAgICAgICAgICAgMHhCMTY4MDAyOAorI2RlZmluZSBTU0kxX0VOQUJMRSAgICAgICAgICAgICAgICAweEIxNjgwMTAwCisKKy8qCisgKiBSZWdpc3RlciBjb250ZW50IGRlZmluaXRpb25zCisgKi8KKyNkZWZpbmUgU1NJX1NUQVRVU19CRgkJCQkoMTw8NCkKKyNkZWZpbmUgU1NJX1NUQVRVU19PRgkJCQkoMTw8MykKKyNkZWZpbmUgU1NJX1NUQVRVU19VRgkJCQkoMTw8MikKKyNkZWZpbmUgU1NJX1NUQVRVU19ECQkJCSgxPDwxKQorI2RlZmluZSBTU0lfU1RBVFVTX0IJCQkJKDE8PDApCisKKy8qIFNTSV9JTlQgKi8KKyNkZWZpbmUgU1NJX0lOVF9PSQkJCQkJKDE8PDMpCisjZGVmaW5lIFNTSV9JTlRfVUkJCQkJCSgxPDwyKQorI2RlZmluZSBTU0lfSU5UX0RJCQkJCQkoMTw8MSkKKworLyogU1NJX0lOVEVOICovCisjZGVmaW5lIFNTSV9JTlRFTl9PSUUJCQkJKDE8PDMpCisjZGVmaW5lIFNTSV9JTlRFTl9VSUUJCQkJKDE8PDIpCisjZGVmaW5lIFNTSV9JTlRFTl9ESUUJCQkJKDE8PDEpCisKKyNkZWZpbmUgU1NJX0NPTkZJR19BTwkJCQkoMTw8MjQpCisjZGVmaW5lIFNTSV9DT05GSUdfRE8JCQkJKDE8PDIzKQorI2RlZmluZSBTU0lfQ09ORklHX0FMRU4JCQkJKDc8PDIwKQorI2RlZmluZSBTU0lfQ09ORklHX0RMRU4JCQkJKDE1PDwxNikKKyNkZWZpbmUgU1NJX0NPTkZJR19ERAkJCQkoMTw8MTEpCisjZGVmaW5lIFNTSV9DT05GSUdfQUQJCQkJKDE8PDEwKQorI2RlZmluZSBTU0lfQ09ORklHX0JNCQkJCSgzPDw4KQorI2RlZmluZSBTU0lfQ09ORklHX0NFCQkJCSgxPDw3KQorI2RlZmluZSBTU0lfQ09ORklHX0RQCQkJCSgxPDw2KQorI2RlZmluZSBTU0lfQ09ORklHX0RMCQkJCSgxPDw1KQorI2RlZmluZSBTU0lfQ09ORklHX0VQCQkJCSgxPDw0KQorI2RlZmluZSBTU0lfQ09ORklHX0FMRU5fTihOKQkJKChOLTEpPDwyMCkKKyNkZWZpbmUgU1NJX0NPTkZJR19ETEVOX04oTikJCSgoTi0xKTw8MTYpCisjZGVmaW5lIFNTSV9DT05GSUdfQk1fSEkJCQkoMDw8OCkKKyNkZWZpbmUgU1NJX0NPTkZJR19CTV9MTwkJCSgxPDw4KQorI2RlZmluZSBTU0lfQ09ORklHX0JNX0NZCQkJKDI8PDgpCisKKyNkZWZpbmUgU1NJX0FEQVRBX0QJCQkJCSgxPDwyNCkKKyNkZWZpbmUgU1NJX0FEQVRBX0FERFIJCQkJKDB4RkY8PDE2KQorI2RlZmluZSBTU0lfQURBVEFfREFUQQkJCQkoMHgwRkZGKQorI2RlZmluZSBTU0lfQURBVEFfQUREUl9OKE4pCQkJKE48PDE2KQorCisjZGVmaW5lIFNTSV9FTkFCTEVfQ0QJCQkJKDE8PDEpCisjZGVmaW5lIFNTSV9FTkFCTEVfRQkJCQkoMTw8MCkKKworCisvKiBJckRBIENvbnRyb2xsZXIgKi8KKyNkZWZpbmUgSVJEQV9CQVNFICAgICAgICAgICAgICAgICAweEIwMzAwMDAwCisjZGVmaW5lIElSX1JJTkdfUFRSX1NUQVRVUyAgICAgICAgKElSREFfQkFTRSsweDAwKQorI2RlZmluZSBJUl9SSU5HX0JBU0VfQUREUl9IICAgICAgIChJUkRBX0JBU0UrMHgwNCkKKyNkZWZpbmUgSVJfUklOR19CQVNFX0FERFJfTCAgICAgICAoSVJEQV9CQVNFKzB4MDgpCisjZGVmaW5lIElSX1JJTkdfU0laRSAgICAgICAgICAgICAgKElSREFfQkFTRSsweDBDKQorI2RlZmluZSBJUl9SSU5HX1BST01QVCAgICAgICAgICAgIChJUkRBX0JBU0UrMHgxMCkKKyNkZWZpbmUgSVJfUklOR19BRERSX0NNUFIgICAgICAgICAoSVJEQV9CQVNFKzB4MTQpCisjZGVmaW5lIElSX0lOVF9DTEVBUiAgICAgICAgICAgICAgKElSREFfQkFTRSsweDE4KQorI2RlZmluZSBJUl9DT05GSUdfMSAgICAgICAgICAgICAgIChJUkRBX0JBU0UrMHgyMCkKKyAgI2RlZmluZSBJUl9SWF9JTlZFUlRfTEVEICAgICAgICAoMTw8MCkKKyAgI2RlZmluZSBJUl9UWF9JTlZFUlRfTEVEICAgICAgICAoMTw8MSkKKyAgI2RlZmluZSBJUl9TVCAgICAgICAgICAgICAgICAgICAoMTw8MikKKyAgI2RlZmluZSBJUl9TRiAgICAgICAgICAgICAgICAgICAoMTw8MykKKyAgI2RlZmluZSBJUl9TSVIgICAgICAgICAgICAgICAgICAoMTw8NCkKKyAgI2RlZmluZSBJUl9NSVIgICAgICAgICAgICAgICAgICAoMTw8NSkKKyAgI2RlZmluZSBJUl9GSVIgICAgICAgICAgICAgICAgICAoMTw8NikKKyAgI2RlZmluZSBJUl8xNkNSQyAgICAgICAgICAgICAgICAoMTw8NykKKyAgI2RlZmluZSBJUl9URCAgICAgICAgICAgICAgICAgICAoMTw8OCkKKyAgI2RlZmluZSBJUl9SWF9BTEwgICAgICAgICAgICAgICAoMTw8OSkKKyAgI2RlZmluZSBJUl9ETUFfRU5BQkxFICAgICAgICAgICAoMTw8MTApCisgICNkZWZpbmUgSVJfUlhfRU5BQkxFICAgICAgICAgICAgKDE8PDExKQorICAjZGVmaW5lIElSX1RYX0VOQUJMRSAgICAgICAgICAgICgxPDwxMikKKyAgI2RlZmluZSBJUl9MT09QQkFDSyAgICAgICAgICAgICAoMTw8MTQpCisgICNkZWZpbmUgSVJfU0lSX01PREUJICAgICAgICAgIChJUl9TSVIgfCBJUl9ETUFfRU5BQkxFIHwgXAorCQkgICAgICAgICAgICAgICAgICAgSVJfUlhfQUxMIHwgSVJfUlhfRU5BQkxFIHwgSVJfU0YgfCBJUl8xNkNSQykKKyNkZWZpbmUgSVJfU0lSX0ZMQUdTICAgICAgICAgICAgICAoSVJEQV9CQVNFKzB4MjQpCisjZGVmaW5lIElSX0VOQUJMRSAgICAgICAgICAgICAgICAgKElSREFfQkFTRSsweDI4KQorICAjZGVmaW5lIElSX1JYX1NUQVRVUyAgICAgICAgICAgICgxPDw5KQorICAjZGVmaW5lIElSX1RYX1NUQVRVUyAgICAgICAgICAgICgxPDwxMCkKKyNkZWZpbmUgSVJfUkVBRF9QSFlfQ09ORklHICAgICAgICAoSVJEQV9CQVNFKzB4MkMpCisjZGVmaW5lIElSX1dSSVRFX1BIWV9DT05GSUcgICAgICAgKElSREFfQkFTRSsweDMwKQorI2RlZmluZSBJUl9NQVhfUEtUX0xFTiAgICAgICAgICAgIChJUkRBX0JBU0UrMHgzNCkKKyNkZWZpbmUgSVJfUlhfQllURV9DTlQgICAgICAgICAgICAoSVJEQV9CQVNFKzB4MzgpCisjZGVmaW5lIElSX0NPTkZJR18yICAgICAgICAgICAgICAgKElSREFfQkFTRSsweDNDKQorICAjZGVmaW5lIElSX01PREVfSU5WICAgICAgICAgICAgICgxPDwwKQorICAjZGVmaW5lIElSX09ORV9QSU4gICAgICAgICAgICAgICgxPDwxKQorI2RlZmluZSBJUl9JTlRFUkZBQ0VfQ09ORklHICAgICAgIChJUkRBX0JBU0UrMHg0MCkKKworLyogR1BJTyAqLworI2RlZmluZSBTWVNfUElORlVOQyAgICAgICAgICAgICAgIDB4QjE5MDAwMkMKKyAgI2RlZmluZSBTWVNfUEZfVVNCCQkJKDE8PDE1KQkvKiAybmQgVVNCIGRldmljZS9ob3N0ICovCisgICNkZWZpbmUgU1lTX1BGX1UzCQkJKDE8PDE0KQkvKiBHUElPMjMvVTNUWEQgKi8KKyAgI2RlZmluZSBTWVNfUEZfVTIJCQkoMTw8MTMpIC8qIEdQSU8yMi9VMlRYRCAqLworICAjZGVmaW5lIFNZU19QRl9VMQkJCSgxPDwxMikgLyogR1BJTzIxL1UxVFhEICovCisgICNkZWZpbmUgU1lTX1BGX1NSQwkJCSgxPDwxMSkJLyogR1BJTzYvU1JPTUNLRSAqLworICAjZGVmaW5lIFNZU19QRl9DSzUJCQkoMTw8MTApCS8qIEdQSU8zL0NMSzUgKi8KKyAgI2RlZmluZSBTWVNfUEZfQ0s0CQkJKDE8PDkpCS8qIEdQSU8yL0NMSzQgKi8KKyAgI2RlZmluZSBTWVNfUEZfSVJGCQkJKDE8PDgpCS8qIEdQSU8xNS9JUkZJUlNFTCAqLworICAjZGVmaW5lIFNZU19QRl9VUjMJCQkoMTw8NykJLyogR1BJT1sxNDo5XS9VQVJUMyAqLworICAjZGVmaW5lIFNZU19QRl9JMkQJCQkoMTw8NikJLyogR1BJTzgvSTJTREkgKi8KKyAgI2RlZmluZSBTWVNfUEZfSTJTCQkJKDE8PDUpCS8qIEkyUy9HUElPWzI5OjMxXSAqLworICAjZGVmaW5lIFNZU19QRl9OSTIJCQkoMTw8NCkJLyogTkkyL0dQSU9bMjQ6MjhdICovCisgICNkZWZpbmUgU1lTX1BGX1UwCQkJKDE8PDMpCS8qIFUwVFhEL0dQSU8yMCAqLworICAjZGVmaW5lIFNZU19QRl9SRAkJCSgxPDwyKQkvKiBJUlRYRC9HUElPMTkgKi8KKyAgI2RlZmluZSBTWVNfUEZfQTk3CQkJKDE8PDEpCS8qIEFDOTcvU1NMMSAqLworICAjZGVmaW5lIFNZU19QRl9TMAkJCSgxPDwwKQkvKiBTU0lfMC9HUElPWzE2OjE4XSAqLworCisvKiBBdTExMDAgT25seSAqLworICAjZGVmaW5lIFNZU19QRl9QQwkJCSgxPDwxOCkJLyogUENNQ0lBL0dQSU9bMjA3OjIwNF0gKi8KKyAgI2RlZmluZSBTWVNfUEZfTENECQkJKDE8PDE3KQkvKiBleHRlcm4gbGNkL0dQSU9bMjAzOjIwMF0gKi8KKyAgI2RlZmluZSBTWVNfUEZfQ1MJCQkoMTw8MTYpCS8qIEVYVENMSzAvMzJraHogdG8gZ3BpbzIgKi8KKyAgI2RlZmluZSBTWVNfUEZfRVgwCQkJKDE8PDkpCS8qIGdwaW8yL2Nsb2NrICovCisKKy8qIEF1MTU1MCBPbmx5LiAgUmVkZWZpbmVzIGxvdHMgb2YgcGlucyAqLworICAjZGVmaW5lIFNZU19QRl9QU0MyX01BU0sJCSg3IDw8IDE3KQorICAjZGVmaW5lIFNZU19QRl9QU0MyX0FDOTcJCSgwKQorICAjZGVmaW5lIFNZU19QRl9QU0MyX1NQSQkJKDApCisgICNkZWZpbmUgU1lTX1BGX1BTQzJfSTJTCQkoMSA8PCAxNykKKyAgI2RlZmluZSBTWVNfUEZfUFNDMl9TTUJVUwkJKDMgPDwgMTcpCisgICNkZWZpbmUgU1lTX1BGX1BTQzJfR1BJTwkJKDcgPDwgMTcpCisgICNkZWZpbmUgU1lTX1BGX1BTQzNfTUFTSwkJKDcgPDwgMjApCisgICNkZWZpbmUgU1lTX1BGX1BTQzNfQUM5NwkJKDApCisgICNkZWZpbmUgU1lTX1BGX1BTQzNfU1BJCQkoMCkKKyAgI2RlZmluZSBTWVNfUEZfUFNDM19JMlMJCSgxIDw8IDIwKQorICAjZGVmaW5lIFNZU19QRl9QU0MzX1NNQlVTCQkoMyA8PCAyMCkKKyAgI2RlZmluZSBTWVNfUEZfUFNDM19HUElPCQkoNyA8PCAyMCkKKyAgI2RlZmluZSBTWVNfUEZfUFNDMV9TMQkJKDEgPDwgMSkKKyAgI2RlZmluZSBTWVNfUEZfTVVTVF9CRV9TRVQJCSgoMSA8PCA1KSB8ICgxIDw8IDIpKQorCisjZGVmaW5lIFNZU19UUklPVVRSRCAgICAgICAgICAgICAgMHhCMTkwMDEwMAorI2RlZmluZSBTWVNfVFJJT1VUQ0xSICAgICAgICAgICAgIDB4QjE5MDAxMDAKKyNkZWZpbmUgU1lTX09VVFBVVFJEICAgICAgICAgICAgICAweEIxOTAwMTA4CisjZGVmaW5lIFNZU19PVVRQVVRTRVQgICAgICAgICAgICAgMHhCMTkwMDEwOAorI2RlZmluZSBTWVNfT1VUUFVUQ0xSICAgICAgICAgICAgIDB4QjE5MDAxMEMKKyNkZWZpbmUgU1lTX1BJTlNUQVRFUkQgICAgICAgICAgICAweEIxOTAwMTEwCisjZGVmaW5lIFNZU19QSU5JTlBVVEVOICAgICAgICAgICAgMHhCMTkwMDExMAorCisvKiBHUElPMiwgQXUxNTAwLCBBdTE1NTAgb25seSAqLworI2RlZmluZSBHUElPMl9CQVNFICAgICAgICAgICAgICAgIDB4QjE3MDAwMDAKKyNkZWZpbmUgR1BJTzJfRElSICAgICAgICAgICAgICAgICAoR1BJTzJfQkFTRSArIDApCisjZGVmaW5lIEdQSU8yX09VVFBVVCAgICAgICAgICAgICAgKEdQSU8yX0JBU0UgKyA4KQorI2RlZmluZSBHUElPMl9QSU5TVEFURSAgICAgICAgICAgIChHUElPMl9CQVNFICsgMHhDKQorI2RlZmluZSBHUElPMl9JTlRFTkFCTEUgICAgICAgICAgIChHUElPMl9CQVNFICsgMHgxMCkKKyNkZWZpbmUgR1BJTzJfRU5BQkxFICAgICAgICAgICAgICAoR1BJTzJfQkFTRSArIDB4MTQpCisKKy8qIFBvd2VyIE1hbmFnZW1lbnQgKi8KKyNkZWZpbmUgU1lTX1NDUkFUQ0gwICAgICAgICAgICAgICAweEIxOTAwMDE4CisjZGVmaW5lIFNZU19TQ1JBVENIMSAgICAgICAgICAgICAgMHhCMTkwMDAxQworI2RlZmluZSBTWVNfV0FLRU1TSyAgICAgICAgICAgICAgIDB4QjE5MDAwMzQKKyNkZWZpbmUgU1lTX0VORElBTiAgICAgICAgICAgICAgICAweEIxOTAwMDM4CisjZGVmaW5lIFNZU19QT1dFUkNUUkwgICAgICAgICAgICAgMHhCMTkwMDAzQworI2RlZmluZSBTWVNfV0FLRVNSQyAgICAgICAgICAgICAgIDB4QjE5MDAwNUMKKyNkZWZpbmUgU1lTX1NMUFBXUiAgICAgICAgICAgICAgICAweEIxOTAwMDc4CisjZGVmaW5lIFNZU19TTEVFUCAgICAgICAgICAgICAgICAgMHhCMTkwMDA3QworCisvKiBDbG9jayBDb250cm9sbGVyICovCisjZGVmaW5lIFNZU19GUkVRQ1RSTDAgICAgICAgICAgICAgMHhCMTkwMDAyMAorICAjZGVmaW5lIFNZU19GQ19GUkRJVjJfQklUICAgICAgICAgMjIKKyAgI2RlZmluZSBTWVNfRkNfRlJESVYyX01BU0sgICAgICAgICgweGZmIDw8IFNZU19GQ19GUkRJVjJfQklUKQorICAjZGVmaW5lIFNZU19GQ19GRTIgICAgICAgICAgICAgICAgKDE8PDIxKQorICAjZGVmaW5lIFNZU19GQ19GUzIgICAgICAgICAgICAgICAgKDE8PDIwKQorICAjZGVmaW5lIFNZU19GQ19GUkRJVjFfQklUICAgICAgICAgMTIKKyAgI2RlZmluZSBTWVNfRkNfRlJESVYxX01BU0sgICAgICAgICgweGZmIDw8IFNZU19GQ19GUkRJVjFfQklUKQorICAjZGVmaW5lIFNZU19GQ19GRTEgICAgICAgICAgICAgICAgKDE8PDExKQorICAjZGVmaW5lIFNZU19GQ19GUzEgICAgICAgICAgICAgICAgKDE8PDEwKQorICAjZGVmaW5lIFNZU19GQ19GUkRJVjBfQklUICAgICAgICAgMgorICAjZGVmaW5lIFNZU19GQ19GUkRJVjBfTUFTSyAgICAgICAgKDB4ZmYgPDwgU1lTX0ZDX0ZSRElWMF9CSVQpCisgICNkZWZpbmUgU1lTX0ZDX0ZFMCAgICAgICAgICAgICAgICAoMTw8MSkKKyAgI2RlZmluZSBTWVNfRkNfRlMwICAgICAgICAgICAgICAgICgxPDwwKQorI2RlZmluZSBTWVNfRlJFUUNUUkwxICAgICAgICAgICAgIDB4QjE5MDAwMjQKKyAgI2RlZmluZSBTWVNfRkNfRlJESVY1X0JJVCAgICAgICAgIDIyCisgICNkZWZpbmUgU1lTX0ZDX0ZSRElWNV9NQVNLICAgICAgICAoMHhmZiA8PCBTWVNfRkNfRlJESVY1X0JJVCkKKyAgI2RlZmluZSBTWVNfRkNfRkU1ICAgICAgICAgICAgICAgICgxPDwyMSkKKyAgI2RlZmluZSBTWVNfRkNfRlM1ICAgICAgICAgICAgICAgICgxPDwyMCkKKyAgI2RlZmluZSBTWVNfRkNfRlJESVY0X0JJVCAgICAgICAgIDEyCisgICNkZWZpbmUgU1lTX0ZDX0ZSRElWNF9NQVNLICAgICAgICAoMHhmZiA8PCBTWVNfRkNfRlJESVY0X0JJVCkKKyAgI2RlZmluZSBTWVNfRkNfRkU0ICAgICAgICAgICAgICAgICgxPDwxMSkKKyAgI2RlZmluZSBTWVNfRkNfRlM0ICAgICAgICAgICAgICAgICgxPDwxMCkKKyAgI2RlZmluZSBTWVNfRkNfRlJESVYzX0JJVCAgICAgICAgIDIKKyAgI2RlZmluZSBTWVNfRkNfRlJESVYzX01BU0sgICAgICAgICgweGZmIDw8IFNZU19GQ19GUkRJVjNfQklUKQorICAjZGVmaW5lIFNZU19GQ19GRTMgICAgICAgICAgICAgICAgKDE8PDEpCisgICNkZWZpbmUgU1lTX0ZDX0ZTMyAgICAgICAgICAgICAgICAoMTw8MCkKKyNkZWZpbmUgU1lTX0NMS1NSQyAgICAgICAgICAgICAgICAweEIxOTAwMDI4CisgICNkZWZpbmUgU1lTX0NTX01FMV9CSVQgICAgICAgICAgICAyNworICAjZGVmaW5lIFNZU19DU19NRTFfTUFTSyAgICAgICAgICAgKDB4Nzw8U1lTX0NTX01FMV9CSVQpCisgICNkZWZpbmUgU1lTX0NTX0RFMSAgICAgICAgICAgICAgICAoMTw8MjYpCisgICNkZWZpbmUgU1lTX0NTX0NFMSAgICAgICAgICAgICAgICAoMTw8MjUpCisgICNkZWZpbmUgU1lTX0NTX01FMF9CSVQgICAgICAgICAgICAyMgorICAjZGVmaW5lIFNZU19DU19NRTBfTUFTSyAgICAgICAgICAgKDB4Nzw8U1lTX0NTX01FMF9CSVQpCisgICNkZWZpbmUgU1lTX0NTX0RFMCAgICAgICAgICAgICAgICAoMTw8MjEpCisgICNkZWZpbmUgU1lTX0NTX0NFMCAgICAgICAgICAgICAgICAoMTw8MjApCisgICNkZWZpbmUgU1lTX0NTX01JMl9CSVQgICAgICAgICAgICAxNworICAjZGVmaW5lIFNZU19DU19NSTJfTUFTSyAgICAgICAgICAgKDB4Nzw8U1lTX0NTX01JMl9CSVQpCisgICNkZWZpbmUgU1lTX0NTX0RJMiAgICAgICAgICAgICAgICAoMTw8MTYpCisgICNkZWZpbmUgU1lTX0NTX0NJMiAgICAgICAgICAgICAgICAoMTw8MTUpCisgICNkZWZpbmUgU1lTX0NTX01VSF9CSVQgICAgICAgICAgICAxMgorICAjZGVmaW5lIFNZU19DU19NVUhfTUFTSyAgICAgICAgICAgKDB4Nzw8U1lTX0NTX01VSF9CSVQpCisgICNkZWZpbmUgU1lTX0NTX0RVSCAgICAgICAgICAgICAgICAoMTw8MTEpCisgICNkZWZpbmUgU1lTX0NTX0NVSCAgICAgICAgICAgICAgICAoMTw8MTApCisgICNkZWZpbmUgU1lTX0NTX01VRF9CSVQgICAgICAgICAgICA3CisgICNkZWZpbmUgU1lTX0NTX01VRF9NQVNLICAgICAgICAgICAoMHg3PDxTWVNfQ1NfTVVEX0JJVCkKKyAgI2RlZmluZSBTWVNfQ1NfRFVEICAgICAgICAgICAgICAgICgxPDw2KQorICAjZGVmaW5lIFNZU19DU19DVUQgICAgICAgICAgICAgICAgKDE8PDUpCisgICNkZWZpbmUgU1lTX0NTX01JUl9CSVQgICAgICAgICAgICAyCisgICNkZWZpbmUgU1lTX0NTX01JUl9NQVNLICAgICAgICAgICAoMHg3PDxTWVNfQ1NfTUlSX0JJVCkKKyAgI2RlZmluZSBTWVNfQ1NfRElSICAgICAgICAgICAgICAgICgxPDwxKQorICAjZGVmaW5lIFNZU19DU19DSVIgICAgICAgICAgICAgICAgKDE8PDApCisKKyAgI2RlZmluZSBTWVNfQ1NfTVVYX0FVWCAgICAgICAgICAgIDB4MQorICAjZGVmaW5lIFNZU19DU19NVVhfRlEwICAgICAgICAgICAgMHgyCisgICNkZWZpbmUgU1lTX0NTX01VWF9GUTEgICAgICAgICAgICAweDMKKyAgI2RlZmluZSBTWVNfQ1NfTVVYX0ZRMiAgICAgICAgICAgIDB4NAorICAjZGVmaW5lIFNZU19DU19NVVhfRlEzICAgICAgICAgICAgMHg1CisgICNkZWZpbmUgU1lTX0NTX01VWF9GUTQgICAgICAgICAgICAweDYKKyAgI2RlZmluZSBTWVNfQ1NfTVVYX0ZRNSAgICAgICAgICAgIDB4NworI2RlZmluZSBTWVNfQ1BVUExMICAgICAgICAgICAgICAgIDB4QjE5MDAwNjAKKyNkZWZpbmUgU1lTX0FVWFBMTCAgICAgICAgICAgICAgICAweEIxOTAwMDY0CisKKy8qIEFDOTcgQ29udHJvbGxlciAqLworI2RlZmluZSBBQzk3Q19DT05GSUcgICAgICAgICAgICAgIDB4QjAwMDAwMDAKKyAgI2RlZmluZSBBQzk3Q19SRUNWX1NMT1RTX0JJVCAgMTMKKyAgI2RlZmluZSBBQzk3Q19SRUNWX1NMT1RTX01BU0sgKDB4M2ZmIDw8IEFDOTdDX1JFQ1ZfU0xPVFNfQklUKQorICAjZGVmaW5lIEFDOTdDX1hNSVRfU0xPVFNfQklUICAzCisgICNkZWZpbmUgQUM5N0NfWE1JVF9TTE9UU19NQVNLICgweDNmZiA8PCBBQzk3Q19YTUlUX1NMT1RTX0JJVCkKKyAgI2RlZmluZSBBQzk3Q19TRyAgICAgICAgICAgICAgKDE8PDIpCisgICNkZWZpbmUgQUM5N0NfU1lOQyAgICAgICAgICAgICgxPDwxKQorICAjZGVmaW5lIEFDOTdDX1JFU0VUICAgICAgICAgICAoMTw8MCkKKyNkZWZpbmUgQUM5N0NfU1RBVFVTICAgICAgICAgICAgICAweEIwMDAwMDA0CisgICNkZWZpbmUgQUM5N0NfWFUgICAgICAgICAgICAgICgxPDwxMSkKKyAgI2RlZmluZSBBQzk3Q19YTyAgICAgICAgICAgICAgKDE8PDEwKQorICAjZGVmaW5lIEFDOTdDX1JVICAgICAgICAgICAgICAoMTw8OSkKKyAgI2RlZmluZSBBQzk3Q19STyAgICAgICAgICAgICAgKDE8PDgpCisgICNkZWZpbmUgQUM5N0NfUkVBRFkgICAgICAgICAgICgxPDw3KQorICAjZGVmaW5lIEFDOTdDX0NQICAgICAgICAgICAgICAoMTw8NikKKyAgI2RlZmluZSBBQzk3Q19UUiAgICAgICAgICAgICAgKDE8PDUpCisgICNkZWZpbmUgQUM5N0NfVEUgICAgICAgICAgICAgICgxPDw0KQorICAjZGVmaW5lIEFDOTdDX1RGICAgICAgICAgICAgICAoMTw8MykKKyAgI2RlZmluZSBBQzk3Q19SUiAgICAgICAgICAgICAgKDE8PDIpCisgICNkZWZpbmUgQUM5N0NfUkUgICAgICAgICAgICAgICgxPDwxKQorICAjZGVmaW5lIEFDOTdDX1JGICAgICAgICAgICAgICAoMTw8MCkKKyNkZWZpbmUgQUM5N0NfREFUQSAgICAgICAgICAgICAgICAweEIwMDAwMDA4CisjZGVmaW5lIEFDOTdDX0NNRCAgICAgICAgICAgICAgICAgMHhCMDAwMDAwQworICAjZGVmaW5lIEFDOTdDX1dEX0JJVCAgICAgICAgICAxNgorICAjZGVmaW5lIEFDOTdDX1JFQUQgICAgICAgICAgICAoMTw8NykKKyAgI2RlZmluZSBBQzk3Q19JTkRFWF9NQVNLICAgICAgMHg3ZgorI2RlZmluZSBBQzk3Q19DTlRSTCAgICAgICAgICAgICAgIDB4QjAwMDAwMTAKKyAgI2RlZmluZSBBQzk3Q19SUyAgICAgICAgICAgICAgKDE8PDEpCisgICNkZWZpbmUgQUM5N0NfQ0UgICAgICAgICAgICAgICgxPDwwKQorCisKKy8qIFNlY3VyZSBEaWdpdGFsIChTRCkgQ29udHJvbGxlciAqLworI2RlZmluZSBTRDBfWE1JVF9GSUZPCTB4QjA2MDAwMDAKKyNkZWZpbmUgU0QwX1JFQ1ZfRklGTwkweEIwNjAwMDA0CisjZGVmaW5lIFNEMV9YTUlUX0ZJRk8JMHhCMDY4MDAwMAorI2RlZmluZSBTRDFfUkVDVl9GSUZPCTB4QjA2ODAwMDQKKworCisjaWYgZGVmaW5lZCAoQ09ORklHX1NPQ19BVTE1MDApIHx8IGRlZmluZWQoQ09ORklHX1NPQ19BVTE1NTApCisvKiBBdTE1MDAgUENJIENvbnRyb2xsZXIgKi8KKyNkZWZpbmUgQXUxNTAwX0NGR19CQVNFICAgICAgICAgICAweEI0MDA1MDAwIC8vIHZpcnR1YWwsIGtzZWcwIGFkZHIKKyNkZWZpbmUgQXUxNTAwX1BDSV9DTUVNICAgICAgICAgICAoQXUxNTAwX0NGR19CQVNFICsgMCkKKyNkZWZpbmUgQXUxNTAwX1BDSV9DRkcgICAgICAgICAgICAoQXUxNTAwX0NGR19CQVNFICsgNCkKKyAgI2RlZmluZSBQQ0lfRVJST1IgKCgxPDwyMikgfCAoMTw8MjMpIHwgKDE8PDI0KSB8ICgxPDwyNSkgfCAoMTw8MjYpIHwgKDE8PDI3KSkKKyNkZWZpbmUgQXUxNTAwX1BDSV9CMkJNQVNLX0NDSCAgICAoQXUxNTAwX0NGR19CQVNFICsgOCkKKyNkZWZpbmUgQXUxNTAwX1BDSV9CMkIwX1ZJRCAgICAgICAoQXUxNTAwX0NGR19CQVNFICsgMHhDKQorI2RlZmluZSBBdTE1MDBfUENJX0IyQjFfSUQgICAgICAgIChBdTE1MDBfQ0ZHX0JBU0UgKyAweDEwKQorI2RlZmluZSBBdTE1MDBfUENJX01XTUFTS19ERVYgICAgIChBdTE1MDBfQ0ZHX0JBU0UgKyAweDE0KQorI2RlZmluZSBBdTE1MDBfUENJX01XQkFTRV9SRVZfQ0NMIChBdTE1MDBfQ0ZHX0JBU0UgKyAweDE4KQorI2RlZmluZSBBdTE1MDBfUENJX0VSUl9BRERSICAgICAgIChBdTE1MDBfQ0ZHX0JBU0UgKyAweDFDKQorI2RlZmluZSBBdTE1MDBfUENJX1NQRUNfSU5UQUNLICAgIChBdTE1MDBfQ0ZHX0JBU0UgKyAweDIwKQorI2RlZmluZSBBdTE1MDBfUENJX0lEICAgICAgICAgICAgIChBdTE1MDBfQ0ZHX0JBU0UgKyAweDEwMCkKKyNkZWZpbmUgQXUxNTAwX1BDSV9TVEFUQ01EICAgICAgICAoQXUxNTAwX0NGR19CQVNFICsgMHgxMDQpCisjZGVmaW5lIEF1MTUwMF9QQ0lfQ0xBU1NSRVYgICAgICAgKEF1MTUwMF9DRkdfQkFTRSArIDB4MTA4KQorI2RlZmluZSBBdTE1MDBfUENJX0hEUlRZUEUgICAgICAgIChBdTE1MDBfQ0ZHX0JBU0UgKyAweDEwQykKKyNkZWZpbmUgQXUxNTAwX1BDSV9NQkFSICAgICAgICAgICAoQXUxNTAwX0NGR19CQVNFICsgMHgxMTApCisKKyNkZWZpbmUgQXUxNTAwX1BDSV9IRFIgICAgICAgICAgICAweEI0MDA1MTAwIC8vIHZpcnR1YWwsIGtzZWcwIGFkZHIKKworLyogQWxsIG9mIG91ciBzdHJ1Y3R1cmVzLCBsaWtlIHBjaSByZXNvdXJjZSwgaGF2ZSAzMiBiaXQgbWVtYmVycy4KKyAqIERyaXZlcnMgYXJlIGV4cGVjdGVkIHRvIGRvIGFuIGlvcmVtYXAgb24gdGhlIFBDSSBNRU0gcmVzb3VyY2UsIGJ1dCBpdCdzCisgKiBoYXJkIHRvIHN0b3JlIDB4NCAwMDAwIDAwMDAgaW4gYSAzMiBiaXQgdHlwZS4gIFdlIHJlcXVpcmUgYSBzbWFsbCBwYXRjaAorICogdG8gX19pb3JlbWFwIHRvIGNoZWNrIGZvciBhZGRyZXNzZXMgYmV0d2VlbiAodTMyKUF1MTUwMF9QQ0lfTUVNX1NUQVJUIGFuZAorICogKHUzMilBdTE1MDBfUENJX01FTV9FTkQgYW5kIGNoYW5nZSB0aG9zZSB0byB0aGUgZnVsbCAzNiBiaXQgUENJIE1FTQorICogYWRkcmVzc2VzLiAgRm9yIFBDSSBJTywgaXQncyBzaW1wbGVyIGJlY2F1c2Ugd2UgZ2V0IHRvIGRvIHRoZSBpb3JlbWFwCisgKiBvdXJzZWx2ZXMgYW5kIHRoZW4gYWRqdXN0IHRoZSBkZXZpY2UncyByZXNvdXJjZXMuCisgKi8KKyNkZWZpbmUgQXUxNTAwX0VYVF9DRkcgICAgICAgICAgICAweDYwMDAwMDAwMFVMTAorI2RlZmluZSBBdTE1MDBfRVhUX0NGR19UWVBFMSAgICAgIDB4NjgwMDAwMDAwVUxMCisjZGVmaW5lIEF1MTUwMF9QQ0lfSU9fU1RBUlQgICAgICAgMHg1MDAwMDAwMDBVTEwKKyNkZWZpbmUgQXUxNTAwX1BDSV9JT19FTkQgICAgICAgICAweDUwMDBGRkZGRlVMTAorI2RlZmluZSBBdTE1MDBfUENJX01FTV9TVEFSVCAgICAgIDB4NDQwMDAwMDAwVUxMCisjZGVmaW5lIEF1MTUwMF9QQ0lfTUVNX0VORCAgICAgICAgMHg0NEZGRkZGRkZVTEwKKworI2RlZmluZSBQQ0lfSU9fU1RBUlQgICAgKEF1MTUwMF9QQ0lfSU9fU1RBUlQgKyAweDEwMDApCisjZGVmaW5lIFBDSV9JT19FTkQgICAgICAoQXUxNTAwX1BDSV9JT19FTkQpCisjZGVmaW5lIFBDSV9NRU1fU1RBUlQgICAoQXUxNTAwX1BDSV9NRU1fU1RBUlQpCisjZGVmaW5lIFBDSV9NRU1fRU5EICAgICAoQXUxNTAwX1BDSV9NRU1fRU5EKQorI2RlZmluZSBQQ0lfRklSU1RfREVWRk4gKDA8PDMpCisjZGVmaW5lIFBDSV9MQVNUX0RFVkZOICAoMTk8PDMpCisKKyNkZWZpbmUgSU9QT1JUX1JFU09VUkNFX1NUQVJUIDB4MDAwMDEwMDAgLyogc2tpcCBsZWdhY3kgcHJvYmluZyAqLworI2RlZmluZSBJT1BPUlRfUkVTT1VSQ0VfRU5EICAgMHhmZmZmZmZmZgorI2RlZmluZSBJT01FTV9SRVNPVVJDRV9TVEFSVCAgMHgxMDAwMDAwMAorI2RlZmluZSBJT01FTV9SRVNPVVJDRV9FTkQgICAgMHhmZmZmZmZmZgorCisgIC8qCisgICAqIEJvcnJvd2VkIGZyb20gdGhlIFBQQyBhcmNoOgorICAgKiBUaGUgZm9sbG93aW5nIG1hY3JvIGlzIHVzZWQgdG8gbG9va3VwIGlycXMgaW4gYSBzdGFuZGFyZCB0YWJsZQorICAgKiBmb3JtYXQgZm9yIHRob3NlIFBQQyBzeXN0ZW1zIHRoYXQgZG8gbm90IGFscmVhZHkgaGF2ZSBQQ0kKKyAgICogaW50ZXJydXB0cyBwcm9wZXJseSByb3V0ZWQuCisgICAqLworICAvKiBGSVhNRSAtIGRvdWJsZSBjaGVjayB0aGlzIGZyb20gYXNtLXBwYy9wY2ktYnJpZGdlLmggKi8KKyNkZWZpbmUgUENJX0lSUV9UQUJMRV9MT09LVVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAoeyBsb25nIF9jdGxfID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgaWYgKGlkc2VsID49IG1pbl9pZHNlbCAmJiBpZHNlbCA8PSBtYXhfaWRzZWwgJiYgcGluIDw9IGlycXNfcGVyX3Nsb3QpICAgIFwKKwkgICAgICAgX2N0bF8gPSBwY2lfaXJxX3RhYmxlW2lkc2VsIC0gbWluX2lkc2VsXVtwaW4tMV07ICAgICAgICAgICAgICAgXAorCQkgICAgICBfY3RsXzsgfSkKKworCisjZWxzZSAvKiBBdTEwMDAgYW5kIEF1MTEwMCAqLworCisvKiBkb24ndCBhbGxvdyBhbnkgbGVnYWN5IHBvcnRzIHByb2JpbmcgKi8KKyNkZWZpbmUgSU9QT1JUX1JFU09VUkNFX1NUQVJUIDB4MTAwMDAwMDA7CisjZGVmaW5lIElPUE9SVF9SRVNPVVJDRV9FTkQgICAweGZmZmZmZmZmCisjZGVmaW5lIElPTUVNX1JFU09VUkNFX1NUQVJUICAweDEwMDAwMDAwCisjZGVmaW5lIElPTUVNX1JFU09VUkNFX0VORCAgICAweGZmZmZmZmZmCisKKyNpZmRlZiBDT05GSUdfTUlQU19QQjEwMDAKKyNkZWZpbmUgUENJX0lPX1NUQVJUICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBQQ0lfSU9fRU5EICAgICAgICAweDEwMDBmZmZmCisjZGVmaW5lIFBDSV9NRU1fU1RBUlQgICAgIDB4MTgwMDAwMDAKKyNkZWZpbmUgUENJX01FTV9FTkQgICAgICAgMHgxOGZmZmZmZgorI2RlZmluZSBQQ0lfRklSU1RfREVWRk4gICAwCisjZGVmaW5lIFBDSV9MQVNUX0RFVkZOICAgIDEKKyNlbHNlCisvKiBubyBQQ0kgYnVzIGNvbnRyb2xsZXIgKi8KKyNkZWZpbmUgUENJX0lPX1NUQVJUICAgIDAKKyNkZWZpbmUgUENJX0lPX0VORCAgICAgIDAKKyNkZWZpbmUgUENJX01FTV9TVEFSVCAgIDAKKyNkZWZpbmUgUENJX01FTV9FTkQgICAgIDAgCisjZGVmaW5lIFBDSV9GSVJTVF9ERVZGTiAwCisjZGVmaW5lIFBDSV9MQVNUX0RFVkZOICAwCisjZW5kaWYKKworI2VuZGlmCisKKy8qIFByb2Nlc3NvciBpbmZvcm1hdGlvbiBiYXNlIG9uIHByaWQuCisgKiBDb3BpZWQgZnJvbSBQb3dlclBDLgorICovCitzdHJ1Y3QgY3B1X3NwZWMgeworCS8qIENQVSBpcyBtYXRjaGVkIHZpYSAoUFJJRCAmIHByaWRfbWFzaykgPT0gcHJpZF92YWx1ZSAqLworCXVuc2lnbmVkIGludAlwcmlkX21hc2s7CisJdW5zaWduZWQgaW50CXByaWRfdmFsdWU7CisKKwljaGFyCQkqY3B1X25hbWU7CisJdW5zaWduZWQgY2hhcgljcHVfb2Q7CQkvKiBTZXQgQ29uZmlnW09EXSAqLworCXVuc2lnbmVkIGNoYXIJY3B1X2JjbGs7CS8qIEVuYWJsZSBCQ0xLIHN3aXRjaGluZyAqLworfTsKKworZXh0ZXJuIHN0cnVjdCBjcHVfc3BlYwkJY3B1X3NwZWNzW107CitleHRlcm4gc3RydWN0IGNwdV9zcGVjCQkqY3VyX2NwdV9zcGVjW107CisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1hdTF4MDAvYXUxMDAwX2RtYS5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWF1MXgwMC9hdTEwMDBfZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODEwZjJmYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1hdTF4MDAvYXUxMDAwX2RtYS5oCkBAIC0wLDAgKzEsNDQ2IEBACisvKgorICogQlJJRUYgTU9EVUxFIERFU0NSSVBUSU9OCisgKglEZWZpbmVzIGZvciB1c2luZyBhbmQgYWxsb2NhdGluZyBkbWEgY2hhbm5lbHMgb24gdGhlIEFsY2hlbXkKKyAqICAgICAgQXUxMDAwIG1pcHMgcHJvY2Vzc29yLgorICoKKyAqIENvcHlyaWdodCAyMDAwIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgorICogQXV0aG9yOiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKiAgICAgICAgIAlzdGV2ZWxAbXZpc3RhLmNvbSBvciBzb3VyY2VAbXZpc3RhLmNvbQorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUSElTICBTT0ZUV0FSRSAgSVMgUFJPVklERUQgICBgYEFTICBJUycnIEFORCAgIEFOWSAgRVhQUkVTUyBPUiBJTVBMSUVECisgKiAgV0FSUkFOVElFUywgICBJTkNMVURJTkcsIEJVVCBOT1QgIExJTUlURUQgIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOCisgKiAgTk8gIEVWRU5UICBTSEFMTCAgIFRIRSBBVVRIT1IgIEJFICAgIExJQUJMRSBGT1IgQU5ZICAgRElSRUNULCBJTkRJUkVDVCwKKyAqICBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqICBOT1QgTElNSVRFRCAgIFRPLCBQUk9DVVJFTUVOVCBPRiAgU1VCU1RJVFVURSBHT09EUyAgT1IgU0VSVklDRVM7IExPU1MgT0YKKyAqICBVU0UsIERBVEEsICBPUiBQUk9GSVRTOyBPUiAgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqICBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSAgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKi8KKyNpZm5kZWYgX19BU01fQVUxMDAwX0RNQV9ICisjZGVmaW5lIF9fQVNNX0FVMTAwMF9ETUFfSAorCisjaW5jbHVkZSA8YXNtL2lvLmg+CQkvKiBuZWVkIGJ5dGUgSU8gKi8KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgkvKiBBbmQgc3BpbmxvY2tzICovCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisKKyNkZWZpbmUgTlVNX0FVMTAwMF9ETUFfQ0hBTk5FTFMJOAorCisvKiBETUEgQ2hhbm5lbCBCYXNlIEFkZHJlc3NlcyAqLworI2RlZmluZSBETUFfQ0hBTk5FTF9CQVNFCTB4QjQwMDIwMDAKKyNkZWZpbmUgRE1BX0NIQU5ORUxfTEVOCQkweDAwMDAwMTAwCisKKy8qIERNQSBDaGFubmVsIFJlZ2lzdGVyIE9mZnNldHMgKi8KKyNkZWZpbmUgRE1BX01PREVfU0VUCQkweDAwMDAwMDAwCisjZGVmaW5lIERNQV9NT0RFX1JFQUQJCURNQV9NT0RFX1NFVAorI2RlZmluZSBETUFfTU9ERV9DTEVBUgkJMHgwMDAwMDAwNAorLyogRE1BIE1vZGUgcmVnaXN0ZXIgYml0cyBmb2xsb3cgKi8KKyNkZWZpbmUgRE1BX0RBSF9NQVNLCQkoMHgwZiA8PCAyMCkKKyNkZWZpbmUgRE1BX0RJRF9CSVQJCTE2CisjZGVmaW5lIERNQV9ESURfTUFTSwkJKDB4MGYgPDwgRE1BX0RJRF9CSVQpCisjZGVmaW5lIERNQV9EUwkJCSgxPDwxNSkKKyNkZWZpbmUgRE1BX0JFCQkJKDE8PDEzKQorI2RlZmluZSBETUFfRFIJCQkoMTw8MTIpCisjZGVmaW5lIERNQV9UUzgJCQkoMTw8MTEpCisjZGVmaW5lIERNQV9EV19CSVQJCTkKKyNkZWZpbmUgRE1BX0RXX01BU0sJCSgweDAzIDw8IERNQV9EV19CSVQpCisjZGVmaW5lIERNQV9EVzgJCQkoMCA8PCBETUFfRFdfQklUKQorI2RlZmluZSBETUFfRFcxNgkJKDEgPDwgRE1BX0RXX0JJVCkKKyNkZWZpbmUgRE1BX0RXMzIJCSgyIDw8IERNQV9EV19CSVQpCisjZGVmaW5lIERNQV9OQwkJCSgxPDw4KQorI2RlZmluZSBETUFfSUUJCQkoMTw8NykKKyNkZWZpbmUgRE1BX0hBTFQJCSgxPDw2KQorI2RlZmluZSBETUFfR08JCQkoMTw8NSkKKyNkZWZpbmUgRE1BX0FCCQkJKDE8PDQpCisjZGVmaW5lIERNQV9EMQkJCSgxPDwzKQorI2RlZmluZSBETUFfQkUxCQkJKDE8PDIpCisjZGVmaW5lIERNQV9EMAkJCSgxPDwxKQorI2RlZmluZSBETUFfQkUwCQkJKDE8PDApCisKKyNkZWZpbmUgRE1BX1BFUklQSEVSQUxfQUREUiAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIERNQV9CVUZGRVIwX1NUQVJUICAgICAgICAgMHgwMDAwMDAwQworI2RlZmluZSBETUFfQlVGRkVSMV9TVEFSVCAgICAgICAgIDB4MDAwMDAwMTQKKyNkZWZpbmUgRE1BX0JVRkZFUjBfQ09VTlQgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIERNQV9CVUZGRVIxX0NPVU5UICAgICAgICAgMHgwMDAwMDAxOAorI2RlZmluZSBETUFfQkFIX0JJVCAxNgorI2RlZmluZSBETUFfQkFIX01BU0sgKDB4MGYgPDwgRE1BX0JBSF9CSVQpCisjZGVmaW5lIERNQV9DT1VOVF9CSVQgMAorI2RlZmluZSBETUFfQ09VTlRfTUFTSyAoMHhmZmZmIDw8IERNQV9DT1VOVF9CSVQpCisKKy8qIERNQSBEZXZpY2UgSUQncyBmb2xsb3cgKi8KK2VudW0geworCURNQV9JRF9VQVJUMF9UWCA9IDAsCisJRE1BX0lEX1VBUlQwX1JYLAorCURNQV9JRF9HUDA0LAorCURNQV9JRF9HUDA1LAorCURNQV9JRF9BQzk3Q19UWCwKKwlETUFfSURfQUM5N0NfUlgsCisJRE1BX0lEX1VBUlQzX1RYLAorCURNQV9JRF9VQVJUM19SWCwKKwlETUFfSURfVVNCREVWX0VQMF9SWCwKKwlETUFfSURfVVNCREVWX0VQMF9UWCwKKwlETUFfSURfVVNCREVWX0VQMl9UWCwKKwlETUFfSURfVVNCREVWX0VQM19UWCwKKwlETUFfSURfVVNCREVWX0VQNF9SWCwKKwlETUFfSURfVVNCREVWX0VQNV9SWCwKKwlETUFfSURfSTJTX1RYLAorCURNQV9JRF9JMlNfUlgsCisJRE1BX05VTV9ERVYKK307CisKKy8qIERNQSBEZXZpY2UgSUQncyBmb3IgMm5kIGJhbmsgKEFVMTEwMCkgZm9sbG93ICovCitlbnVtIHsKKwlETUFfSURfU0QwX1RYID0gMCwKKwlETUFfSURfU0QwX1JYLAorCURNQV9JRF9TRDFfVFgsCisJRE1BX0lEX1NEMV9SWCwKKwlETUFfTlVNX0RFVl9CQU5LMgorfTsKKworc3RydWN0IGRtYV9jaGFuIHsKKwlpbnQgZGV2X2lkOwkJLy8gdGhpcyBjaGFubmVsIGlzIGFsbG9jYXRlZCBpZiA+PTAsIGZyZWUgb3RoZXJ3aXNlCisJdW5zaWduZWQgaW50IGlvOworCWNvbnN0IGNoYXIgKmRldl9zdHI7CisJaW50IGlycTsKKwl2b2lkICppcnFfZGV2OworCXVuc2lnbmVkIGludCBmaWZvX2FkZHI7CisJdW5zaWduZWQgaW50IG1vZGU7Cit9OworCisvKiBUaGVzZSBhcmUgaW4gYXJjaC9taXBzL2F1MTAwMC9jb21tb24vZG1hLmMgKi8KK2V4dGVybiBzdHJ1Y3QgZG1hX2NoYW4gYXUxMDAwX2RtYV90YWJsZVtdOworZXh0ZXJuIGludCByZXF1ZXN0X2F1MTAwMF9kbWEoaW50IGRldl9pZCwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmRldl9zdHIsCisJCQkgICAgICBpcnFyZXR1cm5fdCAoKmlycWhhbmRsZXIpKGludCwgdm9pZCAqLAorCQkJCQkJIHN0cnVjdCBwdF9yZWdzICopLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBpcnFmbGFncywKKwkJCSAgICAgIHZvaWQgKmlycV9kZXZfaWQpOworZXh0ZXJuIHZvaWQgZnJlZV9hdTEwMDBfZG1hKHVuc2lnbmVkIGludCBkbWFucik7CitleHRlcm4gaW50IGF1MTAwMF9kbWFfcmVhZF9wcm9jKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBmcG9zLAorCQkJCWludCBsZW5ndGgsIGludCAqZW9mLCB2b2lkICpkYXRhKTsKK2V4dGVybiB2b2lkIGR1bXBfYXUxMDAwX2RtYV9jaGFubmVsKHVuc2lnbmVkIGludCBkbWFucik7CitleHRlcm4gc3BpbmxvY2tfdCBhdTEwMDBfZG1hX3NwaW5fbG9jazsKKworCitzdGF0aWMgX19pbmxpbmVfXyBzdHJ1Y3QgZG1hX2NoYW4gKmdldF9kbWFfY2hhbih1bnNpZ25lZCBpbnQgZG1hbnIpCit7CisJaWYgKGRtYW5yID49IE5VTV9BVTEwMDBfRE1BX0NIQU5ORUxTCisJICAgIHx8IGF1MTAwMF9kbWFfdGFibGVbZG1hbnJdLmRldl9pZCA8IDApCisJCXJldHVybiBOVUxMOworCXJldHVybiAmYXUxMDAwX2RtYV90YWJsZVtkbWFucl07Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgY2xhaW1fZG1hX2xvY2sodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXNwaW5fbG9ja19pcnFzYXZlKCZhdTEwMDBfZG1hX3NwaW5fbG9jaywgZmxhZ3MpOworCXJldHVybiBmbGFnczsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCByZWxlYXNlX2RtYV9sb2NrKHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXUxMDAwX2RtYV9zcGluX2xvY2ssIGZsYWdzKTsKK30KKworLyoKKyAqIFNldCB0aGUgRE1BIGJ1ZmZlciBlbmFibGUgYml0cyBpbiB0aGUgbW9kZSByZWdpc3Rlci4KKyAqLworc3RhdGljIF9faW5saW5lX18gdm9pZCBlbmFibGVfZG1hX2J1ZmZlcjAodW5zaWduZWQgaW50IGRtYW5yKQoreworCXN0cnVjdCBkbWFfY2hhbiAqY2hhbiA9IGdldF9kbWFfY2hhbihkbWFucik7CisJaWYgKCFjaGFuKQorCQlyZXR1cm47CisJYXVfd3JpdGVsKERNQV9CRTAsIGNoYW4tPmlvICsgRE1BX01PREVfU0VUKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgZW5hYmxlX2RtYV9idWZmZXIxKHVuc2lnbmVkIGludCBkbWFucikKK3sKKwlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4gPSBnZXRfZG1hX2NoYW4oZG1hbnIpOworCWlmICghY2hhbikKKwkJcmV0dXJuOworCWF1X3dyaXRlbChETUFfQkUxLCBjaGFuLT5pbyArIERNQV9NT0RFX1NFVCk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGVuYWJsZV9kbWFfYnVmZmVycyh1bnNpZ25lZCBpbnQgZG1hbnIpCit7CisJc3RydWN0IGRtYV9jaGFuICpjaGFuID0gZ2V0X2RtYV9jaGFuKGRtYW5yKTsKKwlpZiAoIWNoYW4pCisJCXJldHVybjsKKwlhdV93cml0ZWwoRE1BX0JFMCB8IERNQV9CRTEsIGNoYW4tPmlvICsgRE1BX01PREVfU0VUKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBzdGFydF9kbWEodW5zaWduZWQgaW50IGRtYW5yKQoreworCXN0cnVjdCBkbWFfY2hhbiAqY2hhbiA9IGdldF9kbWFfY2hhbihkbWFucik7CisJaWYgKCFjaGFuKQorCQlyZXR1cm47CisKKwlhdV93cml0ZWwoRE1BX0dPLCBjaGFuLT5pbyArIERNQV9NT0RFX1NFVCk7Cit9CisKKyNkZWZpbmUgRE1BX0hBTFRfUE9MTCAweDUwMDAKKworc3RhdGljIF9faW5saW5lX18gdm9pZCBoYWx0X2RtYSh1bnNpZ25lZCBpbnQgZG1hbnIpCit7CisJc3RydWN0IGRtYV9jaGFuICpjaGFuID0gZ2V0X2RtYV9jaGFuKGRtYW5yKTsKKwlpbnQgaTsKKwlpZiAoIWNoYW4pCisJCXJldHVybjsKKworCWF1X3dyaXRlbChETUFfR08sIGNoYW4tPmlvICsgRE1BX01PREVfQ0xFQVIpOworCS8vIHBvbGwgdGhlIGhhbHQgYml0CisJZm9yIChpID0gMDsgaSA8IERNQV9IQUxUX1BPTEw7IGkrKykKKwkJaWYgKGF1X3JlYWRsKGNoYW4tPmlvICsgRE1BX01PREVfUkVBRCkgJiBETUFfSEFMVCkKKwkJCWJyZWFrOworCWlmIChpID09IERNQV9IQUxUX1BPTEwpCisJCXByaW50ayhLRVJOX0lORk8gImhhbHRfZG1hOiBIQUxUIHBvbGwgZXhwaXJlZCFcbiIpOworfQorCisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgZGlzYWJsZV9kbWEodW5zaWduZWQgaW50IGRtYW5yKQoreworCXN0cnVjdCBkbWFfY2hhbiAqY2hhbiA9IGdldF9kbWFfY2hhbihkbWFucik7CisJaWYgKCFjaGFuKQorCQlyZXR1cm47CisKKwloYWx0X2RtYShkbWFucik7CisKKwkvLyBub3cgd2UgY2FuIGRpc2FibGUgdGhlIGJ1ZmZlcnMKKwlhdV93cml0ZWwofkRNQV9HTywgY2hhbi0+aW8gKyBETUFfTU9ERV9DTEVBUik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBkbWFfaGFsdGVkKHVuc2lnbmVkIGludCBkbWFucikKK3sKKwlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4gPSBnZXRfZG1hX2NoYW4oZG1hbnIpOworCWlmICghY2hhbikKKwkJcmV0dXJuIDE7CisJcmV0dXJuIChhdV9yZWFkbChjaGFuLT5pbyArIERNQV9NT0RFX1JFQUQpICYgRE1BX0hBTFQpID8gMSA6IDA7Cit9CisKKy8qIGluaXRpYWxpemUgYSBETUEgY2hhbm5lbCAqLworc3RhdGljIF9faW5saW5lX18gdm9pZCBpbml0X2RtYSh1bnNpZ25lZCBpbnQgZG1hbnIpCit7CisJc3RydWN0IGRtYV9jaGFuICpjaGFuID0gZ2V0X2RtYV9jaGFuKGRtYW5yKTsKKwl1MzIgbW9kZTsKKwlpZiAoIWNoYW4pCisJCXJldHVybjsKKworCWRpc2FibGVfZG1hKGRtYW5yKTsKKworCS8vIHNldCBkZXZpY2UgRklGTyBhZGRyZXNzCisJYXVfd3JpdGVsKENQSFlTQUREUihjaGFuLT5maWZvX2FkZHIpLAorCQkgIGNoYW4tPmlvICsgRE1BX1BFUklQSEVSQUxfQUREUik7CisKKwltb2RlID0gY2hhbi0+bW9kZSB8IChjaGFuLT5kZXZfaWQgPDwgRE1BX0RJRF9CSVQpOworCWlmIChjaGFuLT5pcnEpCisJCW1vZGUgfD0gRE1BX0lFOworCisJYXVfd3JpdGVsKH5tb2RlLCBjaGFuLT5pbyArIERNQV9NT0RFX0NMRUFSKTsKKwlhdV93cml0ZWwobW9kZSwgY2hhbi0+aW8gKyBETUFfTU9ERV9TRVQpOworfQorCisvKgorICogc2V0IG1vZGUgZm9yIGEgc3BlY2lmaWMgRE1BIGNoYW5uZWwKKyAqLworc3RhdGljIF9faW5saW5lX18gdm9pZCBzZXRfZG1hX21vZGUodW5zaWduZWQgaW50IGRtYW5yLCB1bnNpZ25lZCBpbnQgbW9kZSkKK3sKKwlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4gPSBnZXRfZG1hX2NoYW4oZG1hbnIpOworCWlmICghY2hhbikKKwkJcmV0dXJuOworCS8qCisJICogc2V0X2RtYV9tb2RlIGlzIG9ubHkgYWxsb3dlZCB0byBjaGFuZ2UgZW5kaWFuZXNzLCBkaXJlY3Rpb24sCisJICogdHJhbnNmZXIgc2l6ZSwgZGV2aWNlIEZJRk8gd2lkdGgsIGFuZCBjb2hlcmVuY3kgc2V0dGluZ3MuCisJICogTWFrZSBzdXJlIGFueXRoaW5nIGVsc2UgaXMgbWFza2VkIG9mZi4KKwkgKi8KKwltb2RlICY9IChETUFfQkUgfCBETUFfRFIgfCBETUFfVFM4IHwgRE1BX0RXX01BU0sgfCBETUFfTkMpOworCWNoYW4tPm1vZGUgJj0gfihETUFfQkUgfCBETUFfRFIgfCBETUFfVFM4IHwgRE1BX0RXX01BU0sgfCBETUFfTkMpOworCWNoYW4tPm1vZGUgfD0gbW9kZTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IGdldF9kbWFfbW9kZSh1bnNpZ25lZCBpbnQgZG1hbnIpCit7CisJc3RydWN0IGRtYV9jaGFuICpjaGFuID0gZ2V0X2RtYV9jaGFuKGRtYW5yKTsKKwlpZiAoIWNoYW4pCisJCXJldHVybiAwOworCXJldHVybiBjaGFuLT5tb2RlOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgZ2V0X2RtYV9hY3RpdmVfYnVmZmVyKHVuc2lnbmVkIGludCBkbWFucikKK3sKKwlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4gPSBnZXRfZG1hX2NoYW4oZG1hbnIpOworCWlmICghY2hhbikKKwkJcmV0dXJuIC0xOworCXJldHVybiAoYXVfcmVhZGwoY2hhbi0+aW8gKyBETUFfTU9ERV9SRUFEKSAmIERNQV9BQikgPyAxIDogMDsKK30KKworCisvKgorICogc2V0IHRoZSBkZXZpY2UgRklGTyBhZGRyZXNzIGZvciBhIHNwZWNpZmljIERNQSBjaGFubmVsIC0gb25seQorICogYXBwbGljYWJsZSB0byBHUE80IGFuZCBHUE81LiBBbGwgdGhlIG90aGVyIGRldmljZXMgaGF2ZSBmaXhlZAorICogRklGTyBhZGRyZXNzZXMuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgc2V0X2RtYV9maWZvX2FkZHIodW5zaWduZWQgaW50IGRtYW5yLAorCQkJCQkgdW5zaWduZWQgaW50IGEpCit7CisJc3RydWN0IGRtYV9jaGFuICpjaGFuID0gZ2V0X2RtYV9jaGFuKGRtYW5yKTsKKwlpZiAoIWNoYW4pCisJCXJldHVybjsKKworCWlmIChjaGFuLT5tb2RlICYgRE1BX0RTKQkvKiBzZWNvbmQgYmFuayBvZiBkZXZpY2UgaWRzICovCisJCXJldHVybjsKKworCWlmIChjaGFuLT5kZXZfaWQgIT0gRE1BX0lEX0dQMDQgJiYgY2hhbi0+ZGV2X2lkICE9IERNQV9JRF9HUDA1KQorCQlyZXR1cm47CisKKwlhdV93cml0ZWwoQ1BIWVNBRERSKGEpLCBjaGFuLT5pbyArIERNQV9QRVJJUEhFUkFMX0FERFIpOworfQorCisvKgorICogQ2xlYXIgdGhlIERNQSBidWZmZXIgZG9uZSBiaXRzIGluIHRoZSBtb2RlIHJlZ2lzdGVyLgorICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGNsZWFyX2RtYV9kb25lMCh1bnNpZ25lZCBpbnQgZG1hbnIpCit7CisJc3RydWN0IGRtYV9jaGFuICpjaGFuID0gZ2V0X2RtYV9jaGFuKGRtYW5yKTsKKwlpZiAoIWNoYW4pCisJCXJldHVybjsKKwlhdV93cml0ZWwoRE1BX0QwLCBjaGFuLT5pbyArIERNQV9NT0RFX0NMRUFSKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgY2xlYXJfZG1hX2RvbmUxKHVuc2lnbmVkIGludCBkbWFucikKK3sKKwlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4gPSBnZXRfZG1hX2NoYW4oZG1hbnIpOworCWlmICghY2hhbikKKwkJcmV0dXJuOworCWF1X3dyaXRlbChETUFfRDEsIGNoYW4tPmlvICsgRE1BX01PREVfQ0xFQVIpOworfQorCisvKgorICogVGhpcyBkb2VzIG5vdGhpbmcgLSBub3QgYXBwbGljYWJsZSB0byBBdTEwMDAgRE1BLgorICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHNldF9kbWFfcGFnZSh1bnNpZ25lZCBpbnQgZG1hbnIsIGNoYXIgcGFnZW5yKQoreworfQorCisvKgorICogU2V0IEJ1ZmZlciAwIHRyYW5zZmVyIGFkZHJlc3MgZm9yIHNwZWNpZmljIERNQSBjaGFubmVsLgorICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHNldF9kbWFfYWRkcjAodW5zaWduZWQgaW50IGRtYW5yLCB1bnNpZ25lZCBpbnQgYSkKK3sKKwlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4gPSBnZXRfZG1hX2NoYW4oZG1hbnIpOworCWlmICghY2hhbikKKwkJcmV0dXJuOworCWF1X3dyaXRlbChhLCBjaGFuLT5pbyArIERNQV9CVUZGRVIwX1NUQVJUKTsKK30KKworLyoKKyAqIFNldCBCdWZmZXIgMSB0cmFuc2ZlciBhZGRyZXNzIGZvciBzcGVjaWZpYyBETUEgY2hhbm5lbC4KKyAqLworc3RhdGljIF9faW5saW5lX18gdm9pZCBzZXRfZG1hX2FkZHIxKHVuc2lnbmVkIGludCBkbWFuciwgdW5zaWduZWQgaW50IGEpCit7CisJc3RydWN0IGRtYV9jaGFuICpjaGFuID0gZ2V0X2RtYV9jaGFuKGRtYW5yKTsKKwlpZiAoIWNoYW4pCisJCXJldHVybjsKKwlhdV93cml0ZWwoYSwgY2hhbi0+aW8gKyBETUFfQlVGRkVSMV9TVEFSVCk7Cit9CisKKworLyoKKyAqIFNldCBCdWZmZXIgMCB0cmFuc2ZlciBzaXplIChtYXggNjRrKSBmb3IgYSBzcGVjaWZpYyBETUEgY2hhbm5lbC4KKyAqLworc3RhdGljIF9faW5saW5lX18gdm9pZCBzZXRfZG1hX2NvdW50MCh1bnNpZ25lZCBpbnQgZG1hbnIsCisJCQkJICAgICAgdW5zaWduZWQgaW50IGNvdW50KQoreworCXN0cnVjdCBkbWFfY2hhbiAqY2hhbiA9IGdldF9kbWFfY2hhbihkbWFucik7CisJaWYgKCFjaGFuKQorCQlyZXR1cm47CisJY291bnQgJj0gRE1BX0NPVU5UX01BU0s7CisJYXVfd3JpdGVsKGNvdW50LCBjaGFuLT5pbyArIERNQV9CVUZGRVIwX0NPVU5UKTsKK30KKworLyoKKyAqIFNldCBCdWZmZXIgMSB0cmFuc2ZlciBzaXplIChtYXggNjRrKSBmb3IgYSBzcGVjaWZpYyBETUEgY2hhbm5lbC4KKyAqLworc3RhdGljIF9faW5saW5lX18gdm9pZCBzZXRfZG1hX2NvdW50MSh1bnNpZ25lZCBpbnQgZG1hbnIsCisJCQkJICAgICAgdW5zaWduZWQgaW50IGNvdW50KQoreworCXN0cnVjdCBkbWFfY2hhbiAqY2hhbiA9IGdldF9kbWFfY2hhbihkbWFucik7CisJaWYgKCFjaGFuKQorCQlyZXR1cm47CisJY291bnQgJj0gRE1BX0NPVU5UX01BU0s7CisJYXVfd3JpdGVsKGNvdW50LCBjaGFuLT5pbyArIERNQV9CVUZGRVIxX0NPVU5UKTsKK30KKworLyoKKyAqIFNldCBib3RoIGJ1ZmZlciB0cmFuc2ZlciBzaXplcyAobWF4IDY0aykgZm9yIGEgc3BlY2lmaWMgRE1BIGNoYW5uZWwuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgc2V0X2RtYV9jb3VudCh1bnNpZ25lZCBpbnQgZG1hbnIsCisJCQkJICAgICB1bnNpZ25lZCBpbnQgY291bnQpCit7CisJc3RydWN0IGRtYV9jaGFuICpjaGFuID0gZ2V0X2RtYV9jaGFuKGRtYW5yKTsKKwlpZiAoIWNoYW4pCisJCXJldHVybjsKKwljb3VudCAmPSBETUFfQ09VTlRfTUFTSzsKKwlhdV93cml0ZWwoY291bnQsIGNoYW4tPmlvICsgRE1BX0JVRkZFUjBfQ09VTlQpOworCWF1X3dyaXRlbChjb3VudCwgY2hhbi0+aW8gKyBETUFfQlVGRkVSMV9DT1VOVCk7Cit9CisKKy8qCisgKiBSZXR1cm5zIHdoaWNoIGJ1ZmZlciBoYXMgaXRzIGRvbmUgYml0IHNldCBpbiB0aGUgbW9kZSByZWdpc3Rlci4KKyAqIFJldHVybnMgLTEgaWYgbmVpdGhlciBvciBib3RoIGRvbmUgYml0cyBzZXQuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCBnZXRfZG1hX2J1ZmZlcl9kb25lKHVuc2lnbmVkIGludCBkbWFucikKK3sKKwlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4gPSBnZXRfZG1hX2NoYW4oZG1hbnIpOworCWlmICghY2hhbikKKwkJcmV0dXJuIDA7CisKKyAgICByZXR1cm4gYXVfcmVhZGwoY2hhbi0+aW8gKyBETUFfTU9ERV9SRUFEKSAmIChETUFfRDAgfCBETUFfRDEpOworfQorCisKKy8qCisgKiBSZXR1cm5zIHRoZSBETUEgY2hhbm5lbCdzIEJ1ZmZlciBEb25lIElSUSBudW1iZXIuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIGludCBnZXRfZG1hX2RvbmVfaXJxKHVuc2lnbmVkIGludCBkbWFucikKK3sKKwlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4gPSBnZXRfZG1hX2NoYW4oZG1hbnIpOworCWlmICghY2hhbikKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIGNoYW4tPmlycTsKK30KKworLyoKKyAqIEdldCBETUEgcmVzaWR1ZSBjb3VudC4gUmV0dXJucyB0aGUgbnVtYmVyIG9mIF9ieXRlc18gbGVmdCB0byB0cmFuc2Zlci4KKyAqLworc3RhdGljIF9faW5saW5lX18gaW50IGdldF9kbWFfcmVzaWR1ZSh1bnNpZ25lZCBpbnQgZG1hbnIpCit7CisJaW50IGN1ckJ1ZkNudFJlZywgY291bnQ7CisJc3RydWN0IGRtYV9jaGFuICpjaGFuID0gZ2V0X2RtYV9jaGFuKGRtYW5yKTsKKwlpZiAoIWNoYW4pCisJCXJldHVybiAwOworCisJY3VyQnVmQ250UmVnID0gKGF1X3JlYWRsKGNoYW4tPmlvICsgRE1BX01PREVfUkVBRCkgJiBETUFfQUIpID8KKwkgICAgRE1BX0JVRkZFUjFfQ09VTlQgOiBETUFfQlVGRkVSMF9DT1VOVDsKKworCWNvdW50ID0gYXVfcmVhZGwoY2hhbi0+aW8gKyBjdXJCdWZDbnRSZWcpICYgRE1BX0NPVU5UX01BU0s7CisKKwlpZiAoKGNoYW4tPm1vZGUgJiBETUFfRFdfTUFTSykgPT0gRE1BX0RXMTYpCisJCWNvdW50IDw8PSAxOworCWVsc2UgaWYgKChjaGFuLT5tb2RlICYgRE1BX0RXX01BU0spID09IERNQV9EVzMyKQorCQljb3VudCA8PD0gMjsKKworCXJldHVybiBjb3VudDsKK30KKworI2VuZGlmIC8qIF9fQVNNX0FVMTAwMF9ETUFfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtYXUxeDAwL2F1MTAwMF9ncGlvLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtYXUxeDAwL2F1MTAwMF9ncGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk4ZjkyMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1hdTF4MDAvYXUxMDAwX2dwaW8uaApAQCAtMCwwICsxLDU2IEBACisvKgorICogRklMRSBOQU1FIGF1MTAwMF9ncGlvLmgKKyAqCisgKiBCUklFRiBNT0RVTEUgREVTQ1JJUFRJT04KKyAqCUFQSSB0byBBbGNoZW15IEF1MTAwMCBHUElPIGRldmljZS4KKyAqCisgKiAgQXV0aG9yOiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuICA8c291cmNlQG12aXN0YS5jb20+CisgKiAgICAgICAgICBTdGV2ZSBMb25nZXJiZWFtIDxzdGV2ZWxAbXZpc3RhLmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgMjAwMSBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVEhJUyAgU09GVFdBUkUgIElTIFBST1ZJREVEICAgYGBBUyAgSVMnJyBBTkQgICBBTlkgIEVYUFJFU1MgT1IgSU1QTElFRAorICogIFdBUlJBTlRJRVMsICAgSU5DTFVESU5HLCBCVVQgTk9UICBMSU1JVEVEICBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTgorICogIE5PICBFVkVOVCAgU0hBTEwgICBUSEUgQVVUSE9SICBCRSAgICBMSUFCTEUgRk9SIEFOWSAgIERJUkVDVCwgSU5ESVJFQ1QsCisgKiAgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiAgTk9UIExJTUlURUQgICBUTywgUFJPQ1VSRU1FTlQgT0YgIFNVQlNUSVRVVEUgR09PRFMgIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCisgKiAgVVNFLCBEQVRBLCAgT1IgUFJPRklUUzsgT1IgIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiAgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX0FVMTAwMF9HUElPX0gKKyNkZWZpbmUgX19BVTEwMDBfR1BJT19ICisKKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorCisjZGVmaW5lIEFVMTAwMEdQSU9fSU9DX01BR0lDICdBJworCisjZGVmaW5lIEFVMTAwMEdQSU9fSU4JCV9JT1IgKEFVMTAwMEdQSU9fSU9DX01BR0lDLCAwLCBpbnQpCisjZGVmaW5lIEFVMTAwMEdQSU9fU0VUCQlfSU9XIChBVTEwMDBHUElPX0lPQ19NQUdJQywgMSwgaW50KQorI2RlZmluZSBBVTEwMDBHUElPX0NMRUFSCV9JT1cgKEFVMTAwMEdQSU9fSU9DX01BR0lDLCAyLCBpbnQpCisjZGVmaW5lIEFVMTAwMEdQSU9fT1VUCQlfSU9XIChBVTEwMDBHUElPX0lPQ19NQUdJQywgMywgaW50KQorI2RlZmluZSBBVTEwMDBHUElPX1RSSVNUQVRFCV9JT1cgKEFVMTAwMEdQSU9fSU9DX01BR0lDLCA0LCBpbnQpCisjZGVmaW5lIEFVMTAwMEdQSU9fQVZBSUxfTUFTSwlfSU9SIChBVTEwMDBHUElPX0lPQ19NQUdJQywgNSwgaW50KQorCisjaWZkZWYgX19LRVJORUxfXworZXh0ZXJuIHUzMiBnZXRfYXUxMDAwX2F2YWlsX2dwaW9fbWFzayh2b2lkKTsKK2V4dGVybiBpbnQgYXUxMDAwZ3Bpb190cmlzdGF0ZSh1MzIgZGF0YSk7CitleHRlcm4gaW50IGF1MTAwMGdwaW9faW4odTMyICpkYXRhKTsKK2V4dGVybiBpbnQgYXUxMDAwZ3Bpb19zZXQodTMyIGRhdGEpOworZXh0ZXJuIGludCBhdTEwMDBncGlvX2NsZWFyKHUzMiBkYXRhKTsKK2V4dGVybiBpbnQgYXUxMDAwZ3Bpb19vdXQodTMyIGRhdGEpOworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWF1MXgwMC9hdTEwMDBfdXNiZGV2LmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtYXUxeDAwL2F1MTAwMF91c2JkZXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWJjNzRiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWF1MXgwMC9hdTEwMDBfdXNiZGV2LmgKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIEJSSUVGIE1PRFVMRSBERVNDUklQVElPTgorICoJQXUxMDAwIFVTQiBEZXZpY2UtU2lkZSBEcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgMjAwMSBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KKyAqIEF1dGhvcjogTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICoJCXN0ZXZlbEBtdmlzdGEuY29tIG9yIHNvdXJjZUBtdmlzdGEuY29tCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZQkgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YJIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCUxpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVEhJUyAgU09GVFdBUkUgIElTIFBST1ZJREVECSAgYGBBUwlJUycnIEFORCAgIEFOWQlFWFBSRVNTIE9SIElNUExJRUQKKyAqICBXQVJSQU5USUVTLAkgIElOQ0xVRElORywgQlVUIE5PVCAgTElNSVRFRCAgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4KKyAqICBOTwlFVkVOVCAgU0hBTEwgICBUSEUgQVVUSE9SICBCRQkgTElBQkxFIEZPUiBBTlkJICBESVJFQ1QsIElORElSRUNULAorICogIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogIE5PVCBMSU1JVEVECSAgVE8sIFBST0NVUkVNRU5UIE9GICBTVUJTVElUVVRFIEdPT0RTCU9SIFNFUlZJQ0VTOyBMT1NTIE9GCisgKiAgVVNFLCBEQVRBLAlPUiBQUk9GSVRTOyBPUglCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCSBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNkZWZpbmUgVVNCREVWX1JFViAweDAxMTAgLy8gQkNECisjZGVmaW5lIFVTQkRFVl9FUDBfTUFYX1BBQ0tFVF9TSVpFIDY0CisKK3R5cGVkZWYgZW51bSB7CisJQVRUQUNIRUQgPSAwLAorCVBPV0VSRUQsCisJREVGQVVMVCwKKwlBRERSRVNTLAorCUNPTkZJR1VSRUQKK30gdXNiZGV2X3N0YXRlX3Q7CisKK3R5cGVkZWYgZW51bSB7CisJQ0JfTkVXX1NUQVRFID0gMCwKKwlDQl9QS1RfQ09NUExFVEUKK30gdXNiZGV2X2NiX3R5cGVfdDsKKworCit0eXBlZGVmIHN0cnVjdCB1c2JkZXZfcGt0IHsKKwlpbnQgICAgICAgICAgICAgICAgZXBfYWRkcjsgICAgLy8gZXAgYWRkciB0aGlzIHBhY2tldCByb3V0ZWQgdG8KKwlpbnQgICAgICAgICAgICAgICAgc2l6ZTsgICAgICAgLy8gc2l6ZSBvZiBwYXlsb2FkIGluIGJ5dGVzCisJdW5zaWduZWQgICAgICAgICAgIHN0YXR1czsgICAgIC8vIHBhY2tldCBzdGF0dXMKKwlzdHJ1Y3QgdXNiZGV2X3BrdCogbmV4dDsgICAgICAgLy8gZnVuY3Rpb24gbGF5ZXIgY2FuJ3QgdG91Y2ggdGhpcworCXU4ICAgICAgICAgICAgICAgICBwYXlsb2FkWzBdOyAvLyB0aGUgcGF5bG9hZAorfSB1c2JkZXZfcGt0X3Q7CisKKyNkZWZpbmUgUEtUX1NUQVRVU19BQ0sgICgxPDwwKQorI2RlZmluZSBQS1RfU1RBVFVTX05BSyAgKDE8PDEpCisjZGVmaW5lIFBLVF9TVEFUVVNfU1UgICAoMTw8MikKKworZXh0ZXJuIGludCB1c2JkZXZfaW5pdChzdHJ1Y3QgdXNiX2RldmljZV9kZXNjcmlwdG9yKiBkZXZfZGVzYywKKwkJICAgICAgIHN0cnVjdCB1c2JfY29uZmlnX2Rlc2NyaXB0b3IqIGNvbmZpZ19kZXNjLAorCQkgICAgICAgc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvciogaWZfZGVzYywKKwkJICAgICAgIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciogZXBfZGVzYywKKwkJICAgICAgIHN0cnVjdCB1c2Jfc3RyaW5nX2Rlc2NyaXB0b3IqIHN0cl9kZXNjW10sCisJCSAgICAgICB2b2lkICgqY2IpKHVzYmRldl9jYl90eXBlX3QsIHVuc2lnbmVkIGxvbmcsIHZvaWQgKiksCisJCSAgICAgICB2b2lkKiBjYl9kYXRhKTsKKworZXh0ZXJuIHZvaWQgdXNiZGV2X2V4aXQodm9pZCk7CisKK2V4dGVybiBpbnQgdXNiZGV2X2FsbG9jX3BhY2tldCAgKGludCBlcF9hZGRyLCBpbnQgZGF0YV9zaXplLAorCQkJCSB1c2JkZXZfcGt0X3QqKiBwa3QpOworZXh0ZXJuIGludCB1c2JkZXZfc2VuZF9wYWNrZXQgICAoaW50IGVwX2FkZHIsIHVzYmRldl9wa3RfdCogcGt0KTsKK2V4dGVybiBpbnQgdXNiZGV2X3JlY2VpdmVfcGFja2V0KGludCBlcF9hZGRyLCB1c2JkZXZfcGt0X3QqKiBwa3QpOworZXh0ZXJuIGludCB1c2JkZXZfZ2V0X2J5dGVfY291bnQoaW50IGVwX2FkZHIpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWF1MXgwMC9hdTExMDBfbW1jLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtYXUxeDAwL2F1MTEwMF9tbWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTdkMWJhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWF1MXgwMC9hdTExMDBfbW1jLmgKQEAgLTAsMCArMSwyMDUgQEAKKy8qCisgKiBCUklFRiBNT0RVTEUgREVTQ1JJUFRJT04KKyAqCURlZmluZXMgZm9yIHVzaW5nIHRoZSBNTUMvU0QgY29udHJvbGxlcnMgb24gdGhlCisgKiAgICAgIEFsY2hlbXkgQXUxMTAwIG1pcHMgcHJvY2Vzc29yLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMyBFbWJlZGRlZCBFZGdlLCBMTEMuCisgKiBBdXRob3I6IEVtYmVkZGVkIEVkZ2UsIExMQy4KKyAqICAgICAgICAgCWRhbkBlbWJlZGRlZGVkZ2UuY29tIG9yIHRpbUBlbWJlZGRlZGVkZ2UuY29tCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRISVMgIFNPRlRXQVJFICBJUyBQUk9WSURFRCAgIGBgQVMgIElTJycgQU5EICAgQU5ZICBFWFBSRVNTIE9SIElNUExJRUQKKyAqICBXQVJSQU5USUVTLCAgIElOQ0xVRElORywgQlVUIE5PVCAgTElNSVRFRCAgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4KKyAqICBOTyAgRVZFTlQgIFNIQUxMICAgVEhFIEFVVEhPUiAgQkUgICAgTElBQkxFIEZPUiBBTlkgICBESVJFQ1QsIElORElSRUNULAorICogIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogIE5PVCBMSU1JVEVEICAgVE8sIFBST0NVUkVNRU5UIE9GICBTVUJTVElUVVRFIEdPT0RTICBPUiBTRVJWSUNFUzsgTE9TUyBPRgorICogIFVTRSwgREFUQSwgIE9SIFBST0ZJVFM7IE9SICBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqLworLyoKKyAqIEFVMTEwMCBNTUMvU0QgZGVmaW5pdGlvbnMuCisgKgorICogRnJvbSAiQU1EIEFsY2hlbXkgU29sdXRpb25zIEF1MTEwMCBQcm9jZXNzb3IgRGF0YSBCb29rIC0gUHJlbGltaW5hcnkiCisgKiAgICBKdW5lLCAyMDAzCisgKi8KKworI2lmbmRlZiBfX0FTTV9BVTExMDBfTU1DX0gKKyNkZWZpbmUgX19BU01fQVUxMTAwX01NQ19ICisKKworI2RlZmluZSBOVU1fQVUxMTAwX01NQ19DT05UUk9MTEVSUwkyCisKKworI2RlZmluZSBBVTExMDBfU0RfSVJRCTIKKworCisjZGVmaW5lIFNEMF9CQVNFCTB4QjA2MDAwMDAKKyNkZWZpbmUgU0QxX0JBU0UJMHhCMDY4MDAwMAorCisKKy8qCisgKiAgUmVnaXN0ZXIgb2Zmc2V0cy4KKyAqLworI2RlZmluZSBTRF9UWFBPUlQJKDB4MDAwMCkKKyNkZWZpbmUgU0RfUlhQT1JUCSgweDAwMDQpCisjZGVmaW5lIFNEX0NPTkZJRwkoMHgwMDA4KQorI2RlZmluZSBTRF9FTkFCTEUJKDB4MDAwQykKKyNkZWZpbmUgU0RfQ09ORklHMgkoMHgwMDEwKQorI2RlZmluZSBTRF9CTEtTSVpFCSgweDAwMTQpCisjZGVmaW5lIFNEX1NUQVRVUwkoMHgwMDE4KQorI2RlZmluZSBTRF9ERUJVRwkoMHgwMDFDKQorI2RlZmluZSBTRF9DTUQJCSgweDAwMjApCisjZGVmaW5lIFNEX0NNREFSRwkoMHgwMDI0KQorI2RlZmluZSBTRF9SRVNQMwkoMHgwMDI4KQorI2RlZmluZSBTRF9SRVNQMgkoMHgwMDJDKQorI2RlZmluZSBTRF9SRVNQMQkoMHgwMDMwKQorI2RlZmluZSBTRF9SRVNQMAkoMHgwMDM0KQorI2RlZmluZSBTRF9USU1FT1VUCSgweDAwMzgpCisKKworLyoKKyAqICBTRF9UWFBPUlQgYml0IGRlZmluaXRpb25zLgorICovCisjZGVmaW5lIFNEX1RYUE9SVF9UWEQJKDB4MDAwMDAwZmYpCisKKworLyoKKyAqICBTRF9SWFBPUlQgYml0IGRlZmluaXRpb25zLgorICovCisjZGVmaW5lIFNEX1JYUE9SVF9SWEQJKDB4MDAwMDAwZmYpCisKKworLyoKKyAqICBTRF9DT05GSUcgYml0IGRlZmluaXRpb25zLgorICovCisjZGVmaW5lIFNEX0NPTkZJR19ESVYJKDB4MDAwMDAxZmYpCisjZGVmaW5lIFNEX0NPTkZJR19ERQkoMHgwMDAwMDIwMCkKKyNkZWZpbmUgU0RfQ09ORklHX05FCSgweDAwMDAwNDAwKQorI2RlZmluZSBTRF9DT05GSUdfVFUJKDB4MDAwMDA4MDApCisjZGVmaW5lIFNEX0NPTkZJR19UTwkoMHgwMDAwMTAwMCkKKyNkZWZpbmUgU0RfQ09ORklHX1JVCSgweDAwMDAyMDAwKQorI2RlZmluZSBTRF9DT05GSUdfUk8JKDB4MDAwMDQwMDApCisjZGVmaW5lIFNEX0NPTkZJR19JCSgweDAwMDA4MDAwKQorI2RlZmluZSBTRF9DT05GSUdfQ1IJKDB4MDAwMTAwMDApCisjZGVmaW5lIFNEX0NPTkZJR19SQVQJKDB4MDAwMjAwMDApCisjZGVmaW5lIFNEX0NPTkZJR19ERAkoMHgwMDA0MDAwMCkKKyNkZWZpbmUgU0RfQ09ORklHX0RUCSgweDAwMDgwMDAwKQorI2RlZmluZSBTRF9DT05GSUdfU0MJKDB4MDAxMDAwMDApCisjZGVmaW5lIFNEX0NPTkZJR19SQwkoMHgwMDIwMDAwMCkKKyNkZWZpbmUgU0RfQ09ORklHX1dDCSgweDAwNDAwMDAwKQorI2RlZmluZSBTRF9DT05GSUdfeHh4CSgweDAwODAwMDAwKQorI2RlZmluZSBTRF9DT05GSUdfVEgJKDB4MDEwMDAwMDApCisjZGVmaW5lIFNEX0NPTkZJR19URQkoMHgwMjAwMDAwMCkKKyNkZWZpbmUgU0RfQ09ORklHX1RBCSgweDA0MDAwMDAwKQorI2RlZmluZSBTRF9DT05GSUdfUkgJKDB4MDgwMDAwMDApCisjZGVmaW5lIFNEX0NPTkZJR19SQQkoMHgxMDAwMDAwMCkKKyNkZWZpbmUgU0RfQ09ORklHX1JGCSgweDIwMDAwMDAwKQorI2RlZmluZSBTRF9DT05GSUdfQ0QJKDB4NDAwMDAwMDApCisjZGVmaW5lIFNEX0NPTkZJR19TSQkoMHg4MDAwMDAwMCkKKworCisvKgorICogIFNEX0VOQUJMRSBiaXQgZGVmaW5pdGlvbnMuCisgKi8KKyNkZWZpbmUgU0RfRU5BQkxFX0NFCSgweDAwMDAwMDAxKQorI2RlZmluZSBTRF9FTkFCTEVfUgkoMHgwMDAwMDAwMikKKworCisvKgorICogIFNEX0NPTkZJRzIgYml0IGRlZmluaXRpb25zLgorICovCisjZGVmaW5lIFNEX0NPTkZJRzJfRU4JKDB4MDAwMDAwMDEpCisjZGVmaW5lIFNEX0NPTkZJRzJfRkYJKDB4MDAwMDAwMDIpCisjZGVmaW5lIFNEX0NPTkZJRzJfeHgxCSgweDAwMDAwMDA0KQorI2RlZmluZSBTRF9DT05GSUcyX0RGCSgweDAwMDAwMDA4KQorI2RlZmluZSBTRF9DT05GSUcyX0RDCSgweDAwMDAwMDEwKQorI2RlZmluZSBTRF9DT05GSUcyX3h4MgkoMHgwMDAwMDBlMCkKKyNkZWZpbmUgU0RfQ09ORklHMl9XQgkoMHgwMDAwMDEwMCkKKyNkZWZpbmUgU0RfQ09ORklHMl9SVwkoMHgwMDAwMDIwMCkKKworCisvKgorICogIFNEX0JMS1NJWkUgYml0IGRlZmluaXRpb25zLgorICovCisjZGVmaW5lIFNEX0JMS1NJWkVfQlMJKDB4MDAwMDA3ZmYpCisjZGVmaW5lIFNEX0JMS1NJWkVfQlNfU0hJRlQJICgwKQorI2RlZmluZSBTRF9CTEtTSVpFX0JDCSgweDAxZmYwMDAwKQorI2RlZmluZSBTRF9CTEtTSVpFX0JDX1NISUZUCSgxNikKKworCisvKgorICogIFNEX1NUQVRVUyBiaXQgZGVmaW5pdGlvbnMuCisgKi8KKyNkZWZpbmUgU0RfU1RBVFVTX0RDUkNXCSgweDAwMDAwMDA3KQorI2RlZmluZSBTRF9TVEFUVVNfeHgxCSgweDAwMDAwMDA4KQorI2RlZmluZSBTRF9TVEFUVVNfQ0IJKDB4MDAwMDAwMTApCisjZGVmaW5lIFNEX1NUQVRVU19EQgkoMHgwMDAwMDAyMCkKKyNkZWZpbmUgU0RfU1RBVFVTX0NGCSgweDAwMDAwMDQwKQorI2RlZmluZSBTRF9TVEFUVVNfRDMJKDB4MDAwMDAwODApCisjZGVmaW5lIFNEX1NUQVRVU194eDIJKDB4MDAwMDAzMDApCisjZGVmaW5lIFNEX1NUQVRVU19ORQkoMHgwMDAwMDQwMCkKKyNkZWZpbmUgU0RfU1RBVFVTX1RVCSgweDAwMDAwODAwKQorI2RlZmluZSBTRF9TVEFUVVNfVE8JKDB4MDAwMDEwMDApCisjZGVmaW5lIFNEX1NUQVRVU19SVQkoMHgwMDAwMjAwMCkKKyNkZWZpbmUgU0RfU1RBVFVTX1JPCSgweDAwMDA0MDAwKQorI2RlZmluZSBTRF9TVEFUVVNfSQkoMHgwMDAwODAwMCkKKyNkZWZpbmUgU0RfU1RBVFVTX0NSCSgweDAwMDEwMDAwKQorI2RlZmluZSBTRF9TVEFUVVNfUkFUCSgweDAwMDIwMDAwKQorI2RlZmluZSBTRF9TVEFUVVNfREQJKDB4MDAwNDAwMDApCisjZGVmaW5lIFNEX1NUQVRVU19EVAkoMHgwMDA4MDAwMCkKKyNkZWZpbmUgU0RfU1RBVFVTX1NDCSgweDAwMTAwMDAwKQorI2RlZmluZSBTRF9TVEFUVVNfUkMJKDB4MDAyMDAwMDApCisjZGVmaW5lIFNEX1NUQVRVU19XQwkoMHgwMDQwMDAwMCkKKyNkZWZpbmUgU0RfU1RBVFVTX3h4MwkoMHgwMDgwMDAwMCkKKyNkZWZpbmUgU0RfU1RBVFVTX1RICSgweDAxMDAwMDAwKQorI2RlZmluZSBTRF9TVEFUVVNfVEUJKDB4MDIwMDAwMDApCisjZGVmaW5lIFNEX1NUQVRVU19UQQkoMHgwNDAwMDAwMCkKKyNkZWZpbmUgU0RfU1RBVFVTX1JICSgweDA4MDAwMDAwKQorI2RlZmluZSBTRF9TVEFUVVNfUkEJKDB4MTAwMDAwMDApCisjZGVmaW5lIFNEX1NUQVRVU19SRgkoMHgyMDAwMDAwMCkKKyNkZWZpbmUgU0RfU1RBVFVTX0NECSgweDQwMDAwMDAwKQorI2RlZmluZSBTRF9TVEFUVVNfU0kJKDB4ODAwMDAwMDApCisKKworLyoKKyAqICBTRF9DTUQgYml0IGRlZmluaXRpb25zLgorICovCisjZGVmaW5lIFNEX0NNRF9HTwkoMHgwMDAwMDAwMSkKKyNkZWZpbmUgU0RfQ01EX1JZCSgweDAwMDAwMDAyKQorI2RlZmluZSBTRF9DTURfeHgxCSgweDAwMDAwMDBjKQorI2RlZmluZSBTRF9DTURfQ1RfTUFTSwkoMHgwMDAwMDBmMCkKKyNkZWZpbmUgU0RfQ01EX0NUXzAJKDB4MDAwMDAwMDApCisjZGVmaW5lIFNEX0NNRF9DVF8xCSgweDAwMDAwMDEwKQorI2RlZmluZSBTRF9DTURfQ1RfMgkoMHgwMDAwMDAyMCkKKyNkZWZpbmUgU0RfQ01EX0NUXzMJKDB4MDAwMDAwMzApCisjZGVmaW5lIFNEX0NNRF9DVF80CSgweDAwMDAwMDQwKQorI2RlZmluZSBTRF9DTURfQ1RfNQkoMHgwMDAwMDA1MCkKKyNkZWZpbmUgU0RfQ01EX0NUXzYJKDB4MDAwMDAwNjApCisjZGVmaW5lIFNEX0NNRF9DVF83CSgweDAwMDAwMDcwKQorI2RlZmluZSBTRF9DTURfQ0kJKDB4MDAwMGZmMDApCisjZGVmaW5lIFNEX0NNRF9DSV9TSElGVAkJKDgpCisjZGVmaW5lIFNEX0NNRF9SVF9NQVNLCSgweDAwZmYwMDAwKQorI2RlZmluZSBTRF9DTURfUlRfMAkoMHgwMDAwMDAwMCkKKyNkZWZpbmUgU0RfQ01EX1JUXzEJKDB4MDAwMTAwMDApCisjZGVmaW5lIFNEX0NNRF9SVF8yCSgweDAwMDIwMDAwKQorI2RlZmluZSBTRF9DTURfUlRfMwkoMHgwMDAzMDAwMCkKKyNkZWZpbmUgU0RfQ01EX1JUXzQJKDB4MDAwNDAwMDApCisjZGVmaW5lIFNEX0NNRF9SVF81CSgweDAwMDUwMDAwKQorI2RlZmluZSBTRF9DTURfUlRfNgkoMHgwMDA2MDAwMCkKKyNkZWZpbmUgU0RfQ01EX1JUXzFCCSgweDAwODEwMDAwKQorCisKKyNlbmRpZiAvKiBfX0FTTV9BVTExMDBfTU1DX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWF1MXgwMC9hdTF4eHhfZGJkbWEuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1hdTF4MDAvYXUxeHh4X2RiZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVlYjg4YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1hdTF4MDAvYXUxeHh4X2RiZG1hLmgKQEAgLTAsMCArMSwyOTkgQEAKKy8qCisgKgorICogQlJJRUYgTU9EVUxFIERFU0NSSVBUSU9OCisgKglJbmNsdWRlIGZpbGUgZm9yIEFsY2hlbXkgU2VtaWNvbmR1Y3RvcidzIEF1MTU1MCBEZXNjcmlwdG9yCisgKglCYXNlZCBETUEgQ29udHJvbGxlci4KKyAqCisgKiBDb3B5cmlnaHQgMjAwNCBFbWJlZGRlZCBFZGdlLCBMTEMKKyAqCWRhbkBlbWJlZGRlZGVkZ2UuY29tCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRISVMgIFNPRlRXQVJFICBJUyBQUk9WSURFRCAgIGBgQVMgIElTJycgQU5EICAgQU5ZICBFWFBSRVNTIE9SIElNUExJRUQKKyAqICBXQVJSQU5USUVTLCAgIElOQ0xVRElORywgQlVUIE5PVCAgTElNSVRFRCAgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4KKyAqICBOTyAgRVZFTlQgIFNIQUxMICAgVEhFIEFVVEhPUiAgQkUgICAgTElBQkxFIEZPUiBBTlkgICBESVJFQ1QsIElORElSRUNULAorICogIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogIE5PVCBMSU1JVEVEICAgVE8sIFBST0NVUkVNRU5UIE9GICBTVUJTVElUVVRFIEdPT0RTICBPUiBTRVJWSUNFUzsgTE9TUyBPRgorICogIFVTRSwgREFUQSwgIE9SIFBST0ZJVFM7IE9SICBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKy8qIFNwZWNpZmljcyBmb3IgdGhlIEF1MXh4eCBEZXNjcmlwdG9yLUJhc2VkIERNQSBDb250cm9sbGVycywgZmlyc3QKKyAqIHNlZW4gaW4gdGhlIEFVMTU1MCBwYXJ0LgorICovCisjaWZuZGVmIF9BVTEwMDBfREJETUFfSF8KKyNkZWZpbmUgX0FVMTAwMF9EQkRNQV9IXworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpZm5kZWYgX0xBTkdVQUdFX0FTU0VNQkxZCisKKy8qIFRoZSBETUEgYmFzZSBhZGRyZXNzZXMuCisgKiBUaGUgQ2hhbm5lbHMgYXJlIGV2ZXJ5IDI1NiBieXRlcyAoMHgwMTAwKSBmcm9tIHRoZSBjaGFubmVsIDAgYmFzZS4KKyAqIEludGVycnVwdCBzdGF0dXMvZW5hYmxlIGlzIGJpdHMgMTU6MCBmb3IgY2hhbm5lbHMgMTUgdG8gemVyby4KKyAqLworI2RlZmluZSBERE1BX0dMT0JBTF9CQVNFCTB4YjQwMDMwMDAKKyNkZWZpbmUgRERNQV9DSEFOTkVMX0JBU0UJMHhiNDAwMjAwMAorCit0eXBlZGVmIHN0cnVjdCBkYmRtYV9nbG9iYWwgeworCXUzMglkZG1hX2NvbmZpZzsKKwl1MzIJZGRtYV9pbnRzdGF0OworCXUzMglkZG1hX3Rocm90dGxlOworCXUzMglkZG1hX2ludGVuOworfSBkYmRtYV9nbG9iYWxfdDsKKworLyogR2VuZXJhbCBDb25maWd1cmF0aW9uLgorKi8KKyNkZWZpbmUgRERNQV9DT05GSUdfQUYJCSgxIDw8IDIpCisjZGVmaW5lIERETUFfQ09ORklHX0FICQkoMSA8PCAxKQorI2RlZmluZSBERE1BX0NPTkZJR19BTAkJKDEgPDwgMCkKKworI2RlZmluZSBERE1BX1RIUk9UVExFX0VOCSgxIDw8IDMxKQorCisvKiBUaGUgc3RydWN0dXJlIG9mIGEgRE1BIENoYW5uZWwuCisqLwordHlwZWRlZiBzdHJ1Y3QgYXUxeHh4X2RtYV9jaGFubmVsIHsKKwl1MzIJZGRtYV9jZmc7CS8qIFNlZSBiZWxvdyAqLworCXUzMglkZG1hX2Rlc3B0cjsJLyogMzItYnl0ZSBhbGlnbmVkIHBvaW50ZXIgdG8gZGVzY3JpcHRvciAqLworCXUzMglkZG1hX3N0YXRwdHI7CS8qIHdvcmQgYWxpZ25lZCBwb2ludGVyIHRvIHN0YXR1cyB3b3JkICovCisJdTMyCWRkbWFfZGJlbGw7CS8qIEEgd3JpdGUgYWN0aXZhdGVzIGNoYW5uZWwgb3BlcmF0aW9uICovCisJdTMyCWRkbWFfaXJxOwkvKiBJZiBiaXQgMCBzZXQsIGludGVycnVwdCBwZW5kaW5nICovCisJdTMyCWRkbWFfc3RhdDsJLyogU2VlIGJlbG93ICovCisJdTMyCWRkbWFfYnl0ZWNudDsJLyogQnl0ZSBjb3VudCwgdmFsaWQgb25seSB3aGVuIGNoYW4gaWRsZSAqLworCS8qIFJlbWFpbmRlciwgdXAgdG8gdGhlIDI1NiBieXRlIGJvdW5kYXJ5LCBpcyByZXNlcnZlZC4KKwkqLworfSBhdTF4X2RtYV9jaGFuX3Q7CisKKyNkZWZpbmUgRERNQV9DRkdfU0VECSgxIDw8IDkpCS8qIHNvdXJjZSBETUEgbGV2ZWwvZWRnZSBkZXRlY3QgKi8KKyNkZWZpbmUgRERNQV9DRkdfU1AJKDEgPDwgOCkJLyogc291cmNlIERNQSBwb2xhcml0eSAqLworI2RlZmluZSBERE1BX0NGR19ERUQJKDEgPDwgNykJLyogZGVzdGluYXRpb24gRE1BIGxldmVsL2VkZ2UgZGV0ZWN0ICovCisjZGVmaW5lIERETUFfQ0ZHX0RQCSgxIDw8IDYpCS8qIGRlc3RpbmF0aW9uIERNQSBwb2xhcml0eSAqLworI2RlZmluZSBERE1BX0NGR19TWU5DCSgxIDw8IDUpCS8qIFN5bmMgc3RhdGljIGJ1cyBjb250cm9sbGVyICovCisjZGVmaW5lIERETUFfQ0ZHX1BQUgkoMSA8PCA0KQkvKiBQQ0kgcG9zdGVkIHJlYWQvd3JpdGUgY29udHJvbCAqLworI2RlZmluZSBERE1BX0NGR19ERk4JKDEgPDwgMykJLyogRGVzY3JpcHRvciBmZXRjaCBub24tY29oZXJlbnQgKi8KKyNkZWZpbmUgRERNQV9DRkdfU0JFCSgxIDw8IDIpCS8qIFNvdXJjZSBiaWcgZW5kaWFuICovCisjZGVmaW5lIERETUFfQ0ZHX0RCRQkoMSA8PCAxKQkvKiBEZXN0aW5hdGlvbiBiaWcgZW5kaWFuICovCisjZGVmaW5lIERETUFfQ0ZHX0VOCSgxIDw8IDApCS8qIENoYW5uZWwgZW5hYmxlICovCisKKy8qIEFsd2F5cyBzZXQgd2hlbiBkZXNjcmlwdG9yIHByb2Nlc3NpbmcgZG9uZSwgcmVnYXJkbGVzcyBvZgorICogaW50ZXJydXB0IGVuYWJsZSBzdGF0ZS4gIFJlZmxlY3RlZCBpbiBnbG9iYWwgaW50c3RhdCwgZG9uJ3QKKyAqIGNsZWFyIHRoaXMgdW50aWwgZ2xvYmFsIGludHN0YXQgaXMgcmVhZC91c2VkLgorICovCisjZGVmaW5lIERETUFfSVJRX0lOCSgxIDw8IDApCisKKyNkZWZpbmUgRERNQV9TVEFUX0RCCSgxIDw8IDIpCS8qIERvb3JiZWxsIHB1c2hlZCAqLworI2RlZmluZSBERE1BX1NUQVRfVgkoMSA8PCAxKQkvKiBEZXNjcmlwdG9yIHZhbGlkICovCisjZGVmaW5lIERETUFfU1RBVF9ICSgxIDw8IDApCS8qIENoYW5uZWwgSGFsdGVkICovCisKKy8qICJTdGFuZGFyZCIgRERNQSBEZXNjcmlwdG9yLgorICogTXVzdCBiZSAzMi1ieXRlIGFsaWduZWQuCisgKi8KK3R5cGVkZWYgc3RydWN0IGF1MXh4eF9kZG1hX2Rlc2MgeworCXUzMglkc2NyX2NtZDA7CQkvKiBTZWUgYmVsb3cgKi8KKwl1MzIJZHNjcl9jbWQxOwkJLyogU2VlIGJlbG93ICovCisJdTMyCWRzY3Jfc291cmNlMDsJCS8qIHNvdXJjZSBwaHlzIGFkZHJlc3MgKi8KKwl1MzIJZHNjcl9zb3VyY2UxOwkJLyogU2VlIGJlbG93ICovCisJdTMyCWRzY3JfZGVzdDA7CQkvKiBEZXN0aW5hdGlvbiBhZGRyZXNzICovCisJdTMyCWRzY3JfZGVzdDE7CQkvKiBTZWUgYmVsb3cgKi8KKwl1MzIJZHNjcl9zdGF0OwkJLyogY29tcGxldGlvbiBzdGF0dXMgKi8KKwl1MzIJZHNjcl9ueHRwdHI7CQkvKiBOZXh0IGRlc2NyaXB0b3IgcG9pbnRlciAobW9zdGx5KSAqLworfSBhdTF4X2RkbWFfZGVzY190OworCisjZGVmaW5lIERTQ1JfQ01EMF9WCQkoMSA8PCAzMSkJLyogRGVzY3JpcHRvciB2YWxpZCAqLworI2RlZmluZSBEU0NSX0NNRDBfTUVNCQkoMSA8PCAzMCkJLyogbWVtLW1lbSB0cmFuc2ZlciAqLworI2RlZmluZSBEU0NSX0NNRDBfU0lEX01BU0sJKDB4MWYgPDwgMjUpCS8qIFNvdXJjZSBJRCAqLworI2RlZmluZSBEU0NSX0NNRDBfRElEX01BU0sJKDB4MWYgPDwgMjApCS8qIERlc3RpbmF0aW9uIElEICovCisjZGVmaW5lIERTQ1JfQ01EMF9TV19NQVNLCSgweDMgPDwgMTgpCS8qIFNvdXJjZSBXaWR0aCAqLworI2RlZmluZSBEU0NSX0NNRDBfRFdfTUFTSwkoMHgzIDw8IDE2KQkvKiBEZXN0aW5hdGlvbiBXaWR0aCAqLworI2RlZmluZSBEU0NSX0NNRDBfQVJCCQkoMHgxIDw8IDE1KQkvKiBTZXQgZm9yIEhpIFByaSAqLworI2RlZmluZSBEU0NSX0NNRDBfRFRfTUFTSwkoMHgzIDw8IDEzKQkvKiBEZXNjcmlwdG9yIFR5cGUgKi8KKyNkZWZpbmUgRFNDUl9DTUQwX1NOCQkoMHgxIDw8IDEyKQkvKiBTb3VyY2Ugbm9uLWNvaGVyZW50ICovCisjZGVmaW5lIERTQ1JfQ01EMF9ETgkJKDB4MSA8PCAxMSkJLyogRGVzdGluYXRpb24gbm9uLWNvaGVyZW50ICovCisjZGVmaW5lIERTQ1JfQ01EMF9TTQkJKDB4MSA8PCAxMCkJLyogU3RyaWRlIG1vZGUgKi8KKyNkZWZpbmUgRFNDUl9DTUQwX0lFCQkoMHgxIDw8IDgpCS8qIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgRFNDUl9DTUQwX1NQCQkoMHgxIDw8IDQpCS8qIFN0YXR1cyBwb2ludGVyIHNlbGVjdCAqLworI2RlZmluZSBEU0NSX0NNRDBfQ1YJCSgweDEgPDwgMikJLyogQ2xlYXIgVmFsaWQgd2hlbiBkb25lICovCisjZGVmaW5lIERTQ1JfQ01EMF9TVF9NQVNLCSgweDMgPDwgMCkJLyogU3RhdHVzIGluc3RydWN0aW9uICovCisKKy8qIENvbW1hbmQgMCBkZXZpY2UgSURzLgorKi8KKyNkZWZpbmUgRFNDUl9DTUQwX1VBUlQwX1RYCTAKKyNkZWZpbmUgRFNDUl9DTUQwX1VBUlQwX1JYCTEKKyNkZWZpbmUgRFNDUl9DTUQwX1VBUlQzX1RYCTIKKyNkZWZpbmUgRFNDUl9DTUQwX1VBUlQzX1JYCTMKKyNkZWZpbmUgRFNDUl9DTUQwX0RNQV9SRVEwCTQKKyNkZWZpbmUgRFNDUl9DTUQwX0RNQV9SRVExCTUKKyNkZWZpbmUgRFNDUl9DTUQwX0RNQV9SRVEyCTYKKyNkZWZpbmUgRFNDUl9DTUQwX0RNQV9SRVEzCTcKKyNkZWZpbmUgRFNDUl9DTUQwX1VTQkRFVl9SWDAJOAorI2RlZmluZSBEU0NSX0NNRDBfVVNCREVWX1RYMAk5CisjZGVmaW5lIERTQ1JfQ01EMF9VU0JERVZfVFgxCTEwCisjZGVmaW5lIERTQ1JfQ01EMF9VU0JERVZfVFgyCTExCisjZGVmaW5lIERTQ1JfQ01EMF9VU0JERVZfUlgzCTEyCisjZGVmaW5lIERTQ1JfQ01EMF9VU0JERVZfUlg0CTEzCisjZGVmaW5lIERTQ1JfQ01EMF9QU0MwX1RYCTE0CisjZGVmaW5lIERTQ1JfQ01EMF9QU0MwX1JYCTE1CisjZGVmaW5lIERTQ1JfQ01EMF9QU0MxX1RYCTE2CisjZGVmaW5lIERTQ1JfQ01EMF9QU0MxX1JYCTE3CisjZGVmaW5lIERTQ1JfQ01EMF9QU0MyX1RYCTE4CisjZGVmaW5lIERTQ1JfQ01EMF9QU0MyX1JYCTE5CisjZGVmaW5lIERTQ1JfQ01EMF9QU0MzX1RYCTIwCisjZGVmaW5lIERTQ1JfQ01EMF9QU0MzX1JYCTIxCisjZGVmaW5lIERTQ1JfQ01EMF9QQ0lfV1JJVEUJMjIKKyNkZWZpbmUgRFNDUl9DTUQwX05BTkRfRkxBU0gJMjMKKyNkZWZpbmUgRFNDUl9DTUQwX01BQzBfUlgJMjQKKyNkZWZpbmUgRFNDUl9DTUQwX01BQzBfVFgJMjUKKyNkZWZpbmUgRFNDUl9DTUQwX01BQzFfUlgJMjYKKyNkZWZpbmUgRFNDUl9DTUQwX01BQzFfVFgJMjcKKyNkZWZpbmUgRFNDUl9DTUQwX1RIUk9UVExFCTMwCisjZGVmaW5lIERTQ1JfQ01EMF9BTFdBWVMJMzEKKyNkZWZpbmUgRFNDUl9OREVWX0lEUwkJMzIKKworI2RlZmluZSBEU0NSX0NNRDBfU0lEKHgpCSgoKHgpICYgMHgxZikgPDwgMjUpCisjZGVmaW5lIERTQ1JfQ01EMF9ESUQoeCkJKCgoeCkgJiAweDFmKSA8PCAyMCkKKworLyogU291cmNlL0Rlc3RpbmF0aW9uIHRyYW5zZmVyIHdpZHRoLgorKi8KKyNkZWZpbmUgRFNDUl9DTUQwX0JZVEUJCTAKKyNkZWZpbmUgRFNDUl9DTUQwX0hBTEZXT1JECTEKKyNkZWZpbmUgRFNDUl9DTUQwX1dPUkQJCTIKKworI2RlZmluZSBEU0NSX0NNRDBfU1coeCkJCSgoKHgpICYgMHgzKSA8PCAxOCkKKyNkZWZpbmUgRFNDUl9DTUQwX0RXKHgpCQkoKCh4KSAmIDB4MykgPDwgMTYpCisKKy8qIERETUEgRGVzY3JpcHRvciBUeXBlLgorKi8KKyNkZWZpbmUgRFNDUl9DTUQwX1NUQU5EQVJECTAKKyNkZWZpbmUgRFNDUl9DTUQwX0xJVEVSQUwJMQorI2RlZmluZSBEU0NSX0NNRDBfQ01QX0JSQU5DSAkyCisKKyNkZWZpbmUgRFNDUl9DTUQwX0RUKHgpCQkoKCh4KSAmIDB4MykgPDwgMTMpCisKKy8qIFN0YXR1cyBJbnN0cnVjdGlvbi4KKyovCisjZGVmaW5lIERTQ1JfQ01EMF9TVF9OT0NIQU5HRQkwCS8qIERvbid0IGNoYW5nZSAqLworI2RlZmluZSBEU0NSX0NNRDBfU1RfQ1VSUkVOVAkxCS8qIFdyaXRlIGN1cnJlbnQgc3RhdHVzICovCisjZGVmaW5lIERTQ1JfQ01EMF9TVF9DTUQwCTIJLyogV3JpdGUgY21kMCB3aXRoIFYgY2xlYXJlZCAqLworI2RlZmluZSBEU0NSX0NNRDBfU1RfQllURUNOVAkzCS8qIFdyaXRlIHJlbWFpbmluZyBieXRlIGNvdW50ICovCisKKyNkZWZpbmUgRFNDUl9DTUQwX1NUKHgpCQkoKCh4KSAmIDB4MykgPDwgMCkKKworLyogRGVzY3JpcHRvciBDb21tYW5kIDEKKyovCisjZGVmaW5lIERTQ1JfQ01EMV9TVVBUUl9NQVNLCSgweGYgPDwgMjgpCS8qIHVwcGVyIDQgYml0cyBvZiBzcmMgYWRkciAqLworI2RlZmluZSBEU0NSX0NNRDFfRFVQVFJfTUFTSwkoMHhmIDw8IDI0KQkvKiB1cHBlciA0IGJpdHMgb2YgZGVzdCBhZGRyICovCisjZGVmaW5lIERTQ1JfQ01EMV9GTF9NQVNLCSgweDMgPDwgMjIpCS8qIEZsYWcgYml0cyAqLworI2RlZmluZSBEU0NSX0NNRDFfQkNfTUFTSwkoMHgzZmZmZmYpCS8qIEJ5dGUgY291bnQgKi8KKworLyogRmxhZyBkZXNjcmlwdGlvbi4KKyovCisjZGVmaW5lIERTQ1JfQ01EMV9GTF9NRU1fU1RSSURFMAkwCisjZGVmaW5lIERTQ1JfQ01EMV9GTF9NRU1fU1RSSURFMQkxCisjZGVmaW5lIERTQ1JfQ01EMV9GTF9NRU1fU1RSSURFMgkyCisKKyNkZWZpbmUgRFNDUl9DTUQxX0ZMKHgpCQkoKCh4KSAmIDB4MykgPDwgMjIpCisKKy8qIFNvdXJjZTEsIDEtZGltZW5zaW9uYWwgc3RyaWRlLgorKi8KKyNkZWZpbmUgRFNDUl9TUkMxX1NUU19NQVNLCSgzIDw8IDMwKQkvKiBTcmMgeGZlciBzaXplICovCisjZGVmaW5lIERTQ1JfU1JDMV9TQU1fTUFTSwkoMyA8PCAyOCkJLyogU3JjIHhmZXIgbW92ZW1lbnQgKi8KKyNkZWZpbmUgRFNDUl9TUkMxX1NCX01BU0sJKDB4M2ZmZiA8PCAxNCkJLyogQmxvY2sgc2l6ZSAqLworI2RlZmluZSBEU0NSX1NSQzFfU0IoeCkJCSgoKHgpICYgMHgzZmZmKSA8PCAxNCkKKyNkZWZpbmUgRFNDUl9TUkMxX1NTX01BU0sJKDB4M2ZmZiA8PCAwKQkvKiBTdHJpZGUgKi8KKyNkZWZpbmUgRFNDUl9TUkMxX1NTKHgpCQkoKCh4KSAmIDB4M2ZmZikgPDwgMCkKKworLyogRGVzdDEsIDEtZGltZW5zaW9uYWwgc3RyaWRlLgorKi8KKyNkZWZpbmUgRFNDUl9ERVNUMV9EVFNfTUFTSwkoMyA8PCAzMCkJLyogRGVzdCB4ZmVyIHNpemUgKi8KKyNkZWZpbmUgRFNDUl9ERVNUMV9EQU1fTUFTSwkoMyA8PCAyOCkJLyogRGVzdCB4ZmVyIG1vdmVtZW50ICovCisjZGVmaW5lIERTQ1JfREVTVDFfREJfTUFTSwkoMHgzZmZmIDw8IDE0KQkvKiBCbG9jayBzaXplICovCisjZGVmaW5lIERTQ1JfREVTVDFfREIoeCkJKCgoeCkgJiAweDNmZmYpIDw8IDE0KQorI2RlZmluZSBEU0NSX0RFU1QxX0RTX01BU0sJKDB4M2ZmZiA8PCAwKQkvKiBTdHJpZGUgKi8KKyNkZWZpbmUgRFNDUl9ERVNUMV9EUyh4KQkoKCh4KSAmIDB4M2ZmZikgPDwgMCkKKworI2RlZmluZSBEU0NSX3hUU19TSVpFMQkJMAorI2RlZmluZSBEU0NSX3hUU19TSVpFMgkJMQorI2RlZmluZSBEU0NSX3hUU19TSVpFNAkJMgorI2RlZmluZSBEU0NSX3hUU19TSVpFOAkJMworI2RlZmluZSBEU0NSX1NSQzFfU1RTKHgpCSgoKHgpICYgMykgPDwgMzApCisjZGVmaW5lIERTQ1JfREVTVDFfRFRTKHgpCSgoKHgpICYgMykgPDwgMzApCisKKyNkZWZpbmUgRFNDUl94QU1fSU5DUkVNRU5UCTAKKyNkZWZpbmUgRFNDUl94QU1fREVDUkVNRU5UCTEKKyNkZWZpbmUgRFNDUl94QU1fU1RBVElDCQkyCisjZGVmaW5lIERTQ1JfeEFNX0JVUlNUCQkzCisjZGVmaW5lIERTQ1JfU1JDMV9TQU0oeCkJKCgoeCkgJiAzKSA8PCAyOCkKKyNkZWZpbmUgRFNDUl9ERVNUMV9EQU0oeCkJKCgoeCkgJiAzKSA8PCAyOCkKKworLyogVGhlIG5leHQgZGVzY3JpcHRvciBwb2ludGVyLgorKi8KKyNkZWZpbmUgRFNDUl9OWFRQVFJfTUFTSwkoMHgwN2ZmZmZmZikKKyNkZWZpbmUgRFNDUl9OWFRQVFIoeCkJCSgoeCkgPj4gNSkKKyNkZWZpbmUgRFNDUl9HRVRfTlhUUFRSKHgpCSgoeCkgPDwgNSkKKyNkZWZpbmUgRFNDUl9OWFRQVFJfTVMJCSgxIDw8IDI3KQorCisvKiBUaGUgbnVtYmVyIG9mIERCRE1BIGNoYW5uZWxzLgorKi8KKyNkZWZpbmUgTlVNX0RCRE1BX0NIQU5TCTE2CisKKy8qIEV4dGVybmFsIGZ1bmN0aW9ucyBmb3IgZHJpdmVycyB0byB1c2UuCisqLworLyogVXNlIHRoaXMgdG8gYWxsb2NhdGUgYSBkYmRtYSBjaGFubmVsLiAgVGhlIGRldmljZSBpZHMgYXJlIG9uZSBvZiB0aGUKKyAqIERTQ1JfQ01EMCBkZXZpY2VzIElEcywgd2hpY2ggaXMgdXN1YWxseSByZWRlZmluZWQgdG8gYSBtb3JlCisgKiBtZWFuaW5nZnVsIG5hbWUuICBUaGUgJ2NhbGxiYWNrJyBpcyBjYWxsZWQgZHVyaW5nIGRtYSBjb21wbGV0aW9uCisgKiBpbnRlcnJ1cHQuCisgKi8KK3UzMiBhdTF4eHhfZGJkbWFfY2hhbl9hbGxvYyh1MzIgc3JjaWQsIHUzMiBkZXN0aWQsCisgICAgICAgdm9pZCAoKmNhbGxiYWNrKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKiksIHZvaWQgKmNhbGxwYXJhbSk7CisKKyNkZWZpbmUgREJETUFfTUVNX0NIQU4JRFNDUl9DTUQwX0FMV0FZUworCisvKiBBQ0shICBUaGVzZSBzaG91bGQgYmUgaW4gYSBib2FyZCBzcGVjaWZpYyBkZXNjcmlwdGlvbiBmaWxlLgorKi8KKyNpZmRlZiBDT05GSUdfTUlQU19QQjE1NTAKKyNkZWZpbmUgREJETUFfQUM5N19UWF9DSEFOIERTQ1JfQ01EMF9QU0MxX1RYCisjZGVmaW5lIERCRE1BX0FDOTdfUlhfQ0hBTiBEU0NSX0NNRDBfUFNDMV9SWAorI2VuZGlmCisjaWZkZWYgQ09ORklHX01JUFNfREIxNTUwCisjZGVmaW5lIERCRE1BX0FDOTdfVFhfQ0hBTiBEU0NSX0NNRDBfUFNDMV9UWAorI2RlZmluZSBEQkRNQV9BQzk3X1JYX0NIQU4gRFNDUl9DTUQwX1BTQzFfUlgKKyNlbmRpZgorCisKKy8qIFNldCB0aGUgZGV2aWNlIHdpZHRoIG9mIGEgaW4vb3V0IGZpZm8uCisqLwordTMyIGF1MXh4eF9kYmRtYV9zZXRfZGV2d2lkdGgodTMyIGNoYW5pZCwgaW50IGJpdHMpOworCisvKiBBbGxvY2F0ZSBhIHJpbmcgb2YgZGVzY3JpcHRvcnMgZm9yIGRiZG1hLgorKi8KK3UzMiBhdTF4eHhfZGJkbWFfcmluZ19hbGxvYyh1MzIgY2hhbmlkLCBpbnQgZW50cmllcyk7CisKKy8qIFB1dCBidWZmZXJzIG9uIHNvdXJjZS9kZXN0aW5hdGlvbiBkZXNjcmlwdG9ycy4KKyovCit1MzIgYXUxeHh4X2RiZG1hX3B1dF9zb3VyY2UodTMyIGNoYW5pZCwgdm9pZCAqYnVmLCBpbnQgbmJ5dGVzKTsKK3UzMiBhdTF4eHhfZGJkbWFfcHV0X2Rlc3QodTMyIGNoYW5pZCwgdm9pZCAqYnVmLCBpbnQgbmJ5dGVzKTsKKworLyogR2V0IGEgYnVmZmVyIGZyb20gdGhlIGRlc3RpbmF0aW9uIGRlc2NyaXB0b3IuCisqLwordTMyIGF1MXh4eF9kYmRtYV9nZXRfZGVzdCh1MzIgY2hhbmlkLCB2b2lkICoqYnVmLCBpbnQgKm5ieXRlcyk7CisKK3ZvaWQgYXUxeHh4X2RiZG1hX3N0b3AodTMyIGNoYW5pZCk7Cit2b2lkIGF1MXh4eF9kYmRtYV9zdGFydCh1MzIgY2hhbmlkKTsKK3ZvaWQgYXUxeHh4X2RiZG1hX3Jlc2V0KHUzMiBjaGFuaWQpOwordTMyIGF1MXh4eF9nZXRfZG1hX3Jlc2lkdWUodTMyIGNoYW5pZCk7CisKK3ZvaWQgYXUxeHh4X2RiZG1hX2NoYW5fZnJlZSh1MzIgY2hhbmlkKTsKK3ZvaWQgYXUxeHh4X2RiZG1hX2R1bXAodTMyIGNoYW5pZCk7CisKKyNlbmRpZiAvKiBfTEFOR1VBR0VfQVNTRU1CTFkgKi8KKyNlbmRpZiAvKiBfQVUxMDAwX0RCRE1BX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtYXUxeDAwL2F1MXh4eF9wc2MuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1hdTF4MDAvYXUxeHh4X3BzYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4MzUxOWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtYXUxeDAwL2F1MXh4eF9wc2MuaApAQCAtMCwwICsxLDUyMiBAQAorLyoKKyAqCisgKiBCUklFRiBNT0RVTEUgREVTQ1JJUFRJT04KKyAqCUluY2x1ZGUgZmlsZSBmb3IgQWxjaGVteSBTZW1pY29uZHVjdG9yJ3MgQXUxayBDUFUuCisgKgorICogQ29weXJpZ2h0IDIwMDQgRW1iZWRkZWQgRWRnZSwgTExDCisgKglkYW5AZW1iZWRkZWRlZGdlLmNvbQorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUSElTICBTT0ZUV0FSRSAgSVMgUFJPVklERUQgICBgYEFTICBJUycnIEFORCAgIEFOWSAgRVhQUkVTUyBPUiBJTVBMSUVECisgKiAgV0FSUkFOVElFUywgICBJTkNMVURJTkcsIEJVVCBOT1QgIExJTUlURUQgIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOCisgKiAgTk8gIEVWRU5UICBTSEFMTCAgIFRIRSBBVVRIT1IgIEJFICAgIExJQUJMRSBGT1IgQU5ZICAgRElSRUNULCBJTkRJUkVDVCwKKyAqICBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqICBOT1QgTElNSVRFRCAgIFRPLCBQUk9DVVJFTUVOVCBPRiAgU1VCU1RJVFVURSBHT09EUyAgT1IgU0VSVklDRVM7IExPU1MgT0YKKyAqICBVU0UsIERBVEEsICBPUiBQUk9GSVRTOyBPUiAgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqICBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSAgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisvKiBTcGVjaWZpY3MgZm9yIHRoZSBBdTF4eHggUHJvZ3JhbW1hYmxlIFNlcmlhbCBDb250cm9sbGVycywgZmlyc3QKKyAqIHNlZW4gaW4gdGhlIEFVMTU1MCBwYXJ0LgorICovCisjaWZuZGVmIF9BVTEwMDBfUFNDX0hfCisjZGVmaW5lIF9BVTEwMDBfUFNDX0hfCisKKy8qIFRoZSBQU0MgYmFzZSBhZGRyZXNzZXMuICAqLworI2lmZGVmIENPTkZJR19TT0NfQVUxNTUwCisjZGVmaW5lIFBTQzBfQkFTRV9BRERSCQkweGIxYTAwMDAwCisjZGVmaW5lIFBTQzFfQkFTRV9BRERSCQkweGIxYjAwMDAwCisjZGVmaW5lIFBTQzJfQkFTRV9BRERSCQkweGIwYTAwMDAwCisjZGVmaW5lIFBTQzNfQkFTRV9BRERSCQkweGIwZDAwMDAwCisjZW5kaWYKKworLyogVGhlIFBTQyBzZWxlY3QgYW5kIGNvbnRyb2wgcmVnaXN0ZXJzIGFyZSBjb21tb24gdG8KKyAqIGFsbCBwcm90b2NvbHMuCisgKi8KKyNkZWZpbmUgUFNDX1NFTF9PRkZTRVQJCTB4MDAwMDAwMDAKKyNkZWZpbmUgUFNDX0NUUkxfT0ZGU0VUCQkweDAwMDAwMDA0CisKKyNkZWZpbmUgUFNDX1NFTF9DTEtfTUFTSwkoMyA8PCA0KQorI2RlZmluZSBQU0NfU0VMX0NMS19JTlRDTEsJKDAgPDwgNCkKKyNkZWZpbmUgUFNDX1NFTF9DTEtfRVhUQ0xLCSgxIDw8IDQpCisjZGVmaW5lIFBTQ19TRUxfQ0xLX1NFUkNMSwkoMiA8PCA0KQorCisjZGVmaW5lIFBTQ19TRUxfUFNfTUFTSwkJMHgwMDAwMDAwNworI2RlZmluZSBQU0NfU0VMX1BTX0RJU0FCTEVECSgwKQorI2RlZmluZSBQU0NfU0VMX1BTX1NQSU1PREUJKDIpCisjZGVmaW5lIFBTQ19TRUxfUFNfSTJTTU9ERQkoMykKKyNkZWZpbmUgUFNDX1NFTF9QU19BQzk3TU9ERQkoNCkKKyNkZWZpbmUgUFNDX1NFTF9QU19TTUJVU01PREUJKDUpCisKKyNkZWZpbmUgUFNDX0NUUkxfRElTQUJMRQkoMCkKKyNkZWZpbmUgUFNDX0NUUkxfU1VTUEVORAkoMikKKyNkZWZpbmUgUFNDX0NUUkxfRU5BQkxFCQkoMykKKworLyogQUM5NyBSZWdpc3RlcnMuCisqLworI2RlZmluZSBQU0NfQUM5N0NGR19PRkZTRVQJMHgwMDAwMDAwOAorI2RlZmluZSBQU0NfQUM5N01TS19PRkZTRVQJMHgwMDAwMDAwYworI2RlZmluZSBQU0NfQUM5N1BDUl9PRkZTRVQJMHgwMDAwMDAxMAorI2RlZmluZSBQU0NfQUM5N1NUQVRfT0ZGU0VUCTB4MDAwMDAwMTQKKyNkZWZpbmUgUFNDX0FDOTdFVk5UX09GRlNFVAkweDAwMDAwMDE4CisjZGVmaW5lIFBTQ19BQzk3VFhSWF9PRkZTRVQJMHgwMDAwMDAxYworI2RlZmluZSBQU0NfQUM5N0NEQ19PRkZTRVQJMHgwMDAwMDAyMAorI2RlZmluZSBQU0NfQUM5N1JTVF9PRkZTRVQJMHgwMDAwMDAyNAorI2RlZmluZSBQU0NfQUM5N0dQT19PRkZTRVQJMHgwMDAwMDAyOAorI2RlZmluZSBQU0NfQUM5N0dQSV9PRkZTRVQJMHgwMDAwMDAyYworCisjZGVmaW5lIEFDOTdfUFNDX1NFTAkJKEFDOTdfUFNDX0JBU0UgKyBQU0NfU0VMX09GRlNFVCkKKyNkZWZpbmUgQUM5N19QU0NfQ1RSTAkJKEFDOTdfUFNDX0JBU0UgKyBQU0NfQ1RSTF9PRkZTRVQpCisjZGVmaW5lIFBTQ19BQzk3Q0ZHCQkoQUM5N19QU0NfQkFTRSArIFBTQ19BQzk3Q0ZHX09GRlNFVCkKKyNkZWZpbmUgUFNDX0FDOTdNU0sJCShBQzk3X1BTQ19CQVNFICsgUFNDX0FDOTdNU0tfT0ZGU0VUKQorI2RlZmluZSBQU0NfQUM5N1BDUgkJKEFDOTdfUFNDX0JBU0UgKyBQU0NfQUM5N1BDUl9PRkZTRVQpCisjZGVmaW5lIFBTQ19BQzk3U1RBVAkJKEFDOTdfUFNDX0JBU0UgKyBQU0NfQUM5N1NUQVRfT0ZGU0VUKQorI2RlZmluZSBQU0NfQUM5N0VWTlQJCShBQzk3X1BTQ19CQVNFICsgUFNDX0FDOTdFVk5UX09GRlNFVCkKKyNkZWZpbmUgUFNDX0FDOTdUWFJYCQkoQUM5N19QU0NfQkFTRSArIFBTQ19BQzk3VFhSWF9PRkZTRVQpCisjZGVmaW5lIFBTQ19BQzk3Q0RDCQkoQUM5N19QU0NfQkFTRSArIFBTQ19BQzk3Q0RDX09GRlNFVCkKKyNkZWZpbmUgUFNDX0FDOTdSU1QJCShBQzk3X1BTQ19CQVNFICsgUFNDX0FDOTdSU1RfT0ZGU0VUKQorI2RlZmluZSBQU0NfQUM5N0dQTwkJKEFDOTdfUFNDX0JBU0UgKyBQU0NfQUM5N0dQT19PRkZTRVQpCisjZGVmaW5lIFBTQ19BQzk3R1BJCQkoQUM5N19QU0NfQkFTRSArIFBTQ19BQzk3R1BJX09GRlNFVCkKKworLyogQUM5NyBDb25maWcgUmVnaXN0ZXIuCisqLworI2RlZmluZSBQU0NfQUM5N0NGR19SVF9NQVNLCSgzIDw8IDMwKQorI2RlZmluZSBQU0NfQUM5N0NGR19SVF9GSUZPMQkoMCA8PCAzMCkKKyNkZWZpbmUgUFNDX0FDOTdDRkdfUlRfRklGTzIJKDEgPDwgMzApCisjZGVmaW5lIFBTQ19BQzk3Q0ZHX1JUX0ZJRk80CSgyIDw8IDMwKQorI2RlZmluZSBQU0NfQUM5N0NGR19SVF9GSUZPOAkoMyA8PCAzMCkKKworI2RlZmluZSBQU0NfQUM5N0NGR19UVF9NQVNLCSgzIDw8IDI4KQorI2RlZmluZSBQU0NfQUM5N0NGR19UVF9GSUZPMQkoMCA8PCAyOCkKKyNkZWZpbmUgUFNDX0FDOTdDRkdfVFRfRklGTzIJKDEgPDwgMjgpCisjZGVmaW5lIFBTQ19BQzk3Q0ZHX1RUX0ZJRk80CSgyIDw8IDI4KQorI2RlZmluZSBQU0NfQUM5N0NGR19UVF9GSUZPOAkoMyA8PCAyOCkKKworI2RlZmluZSBQU0NfQUM5N0NGR19ERF9ESVNBQkxFCSgxIDw8IDI3KQorI2RlZmluZSBQU0NfQUM5N0NGR19ERV9FTkFCTEUJKDEgPDwgMjYpCisjZGVmaW5lIFBTQ19BQzk3Q0ZHX1NFX0VOQUJMRQkoMSA8PCAyNSkKKworI2RlZmluZSBQU0NfQUM5N0NGR19MRU5fTUFTSwkoMHhmIDw8IDIxKQorI2RlZmluZSBQU0NfQUM5N0NGR19UWFNMT1RfTUFTSwkoMHgzZmYgPDwgMTEpCisjZGVmaW5lIFBTQ19BQzk3Q0ZHX1JYU0xPVF9NQVNLCSgweDNmZiA8PCAxKQorI2RlZmluZSBQU0NfQUM5N0NGR19HRV9FTkFCTEUJKDEpCisKKy8qIEVuYWJsZSBzbG90cyAzLTEyLgorKi8KKyNkZWZpbmUgUFNDX0FDOTdDRkdfVFhTTE9UX0VOQSh4KQkoMSA8PCAoKCh4KSAtIDMpICsgMTEpKQorI2RlZmluZSBQU0NfQUM5N0NGR19SWFNMT1RfRU5BKHgpCSgxIDw8ICgoKHgpIC0gMykgKyAxKSkKKworLyogVGhlIHdvcmQgbGVuZ3RoIGVxdWF0aW9uIGlzICgoeCkgKiAyKSArIDIsIHNvIGNob29zZSAneCcgYXBwcm9wcmlhdGVseS4KKyAqIFRoZSBvbmx5IHNlbnNpYmxlIG51bWJlcnMgYXJlIDcsIDksIG9yIHBvc3NpYmx5IDExLiAgTmFoLCBqdXN0IGRvIHRoZQorICogYXJpdGhtZXRpYyBpbiB0aGUgbWFjcm8uCisgKi8KKyNkZWZpbmUgUFNDX0FDOTdDRkdfU0VUX0xFTih4KQkoKCgoKHgpLTIpLzIpICYgMHhmKSA8PCAyMSkKKyNkZWZpbmUgUFNDX0FDOTdDRkdfR0VUX0xFTih4KQkoKCgoKHgpID4+IDIxKSAmIDB4ZikgKiAyKSArIDIpCisKKy8qIEFDOTcgTWFzayBSZWdpc3Rlci4KKyovCisjZGVmaW5lIFBTQ19BQzk3TVNLX0dSCQkoMSA8PCAyNSkKKyNkZWZpbmUgUFNDX0FDOTdNU0tfQ0QJCSgxIDw8IDI0KQorI2RlZmluZSBQU0NfQUM5N01TS19SUgkJKDEgPDwgMTMpCisjZGVmaW5lIFBTQ19BQzk3TVNLX1JPCQkoMSA8PCAxMikKKyNkZWZpbmUgUFNDX0FDOTdNU0tfUlUJCSgxIDw8IDExKQorI2RlZmluZSBQU0NfQUM5N01TS19UUgkJKDEgPDwgMTApCisjZGVmaW5lIFBTQ19BQzk3TVNLX1RPCQkoMSA8PCA5KQorI2RlZmluZSBQU0NfQUM5N01TS19UVQkJKDEgPDwgOCkKKyNkZWZpbmUgUFNDX0FDOTdNU0tfUkQJCSgxIDw8IDUpCisjZGVmaW5lIFBTQ19BQzk3TVNLX1RECQkoMSA8PCA0KQorI2RlZmluZSBQU0NfQUM5N01TS19BTExNQVNLCShQU0NfQUM5N01TS19HUiB8IFBTQ19BQzk3TVNLX0NEIHwgXAorCQkJCSBQU0NfQUM5N01TS19SUiB8IFBTQ19BQzk3TVNLX1JPIHwgXAorCQkJCSBQU0NfQUM5N01TS19SVSB8IFBTQ19BQzk3TVNLX1RSIHwgXAorCQkJCSBQU0NfQUM5N01TS19UTyB8IFBTQ19BQzk3TVNLX1RVIHwgXAorCQkJCSBQU0NfQUM5N01TS19SRCB8IFBTQ19BQzk3TVNLX1REKQorCisvKiBBQzk3IFByb3RvY29sIENvbnRyb2wgUmVnaXN0ZXIuCisqLworI2RlZmluZSBQU0NfQUM5N1BDUl9SQwkJKDEgPDwgNikKKyNkZWZpbmUgUFNDX0FDOTdQQ1JfUlAJCSgxIDw8IDUpCisjZGVmaW5lIFBTQ19BQzk3UENSX1JTCQkoMSA8PCA0KQorI2RlZmluZSBQU0NfQUM5N1BDUl9UQwkJKDEgPDwgMikKKyNkZWZpbmUgUFNDX0FDOTdQQ1JfVFAJCSgxIDw8IDEpCisjZGVmaW5lIFBTQ19BQzk3UENSX1RTCQkoMSA8PCAwKQorCisvKiBBQzk3IFN0YXR1cyByZWdpc3RlciAocmVhZCBvbmx5KS4KKyovCisjZGVmaW5lIFBTQ19BQzk3U1RBVF9DQgkJKDEgPDwgMjYpCisjZGVmaW5lIFBTQ19BQzk3U1RBVF9DUAkJKDEgPDwgMjUpCisjZGVmaW5lIFBTQ19BQzk3U1RBVF9DUgkJKDEgPDwgMjQpCisjZGVmaW5lIFBTQ19BQzk3U1RBVF9SRgkJKDEgPDwgMTMpCisjZGVmaW5lIFBTQ19BQzk3U1RBVF9SRQkJKDEgPDwgMTIpCisjZGVmaW5lIFBTQ19BQzk3U1RBVF9SUgkJKDEgPDwgMTEpCisjZGVmaW5lIFBTQ19BQzk3U1RBVF9URgkJKDEgPDwgMTApCisjZGVmaW5lIFBTQ19BQzk3U1RBVF9URQkJKDEgPDwgOSkKKyNkZWZpbmUgUFNDX0FDOTdTVEFUX1RSCQkoMSA8PCA4KQorI2RlZmluZSBQU0NfQUM5N1NUQVRfUkIJCSgxIDw8IDUpCisjZGVmaW5lIFBTQ19BQzk3U1RBVF9UQgkJKDEgPDwgNCkKKyNkZWZpbmUgUFNDX0FDOTdTVEFUX0RJCQkoMSA8PCAyKQorI2RlZmluZSBQU0NfQUM5N1NUQVRfRFIJCSgxIDw8IDEpCisjZGVmaW5lIFBTQ19BQzk3U1RBVF9TUgkJKDEgPDwgMCkKKworLyogQUM5NyBFdmVudCBSZWdpc3Rlci4KKyovCisjZGVmaW5lIFBTQ19BQzk3RVZOVF9HUgkJKDEgPDwgMjUpCisjZGVmaW5lIFBTQ19BQzk3RVZOVF9DRAkJKDEgPDwgMjQpCisjZGVmaW5lIFBTQ19BQzk3RVZOVF9SUgkJKDEgPDwgMTMpCisjZGVmaW5lIFBTQ19BQzk3RVZOVF9STwkJKDEgPDwgMTIpCisjZGVmaW5lIFBTQ19BQzk3RVZOVF9SVQkJKDEgPDwgMTEpCisjZGVmaW5lIFBTQ19BQzk3RVZOVF9UUgkJKDEgPDwgMTApCisjZGVmaW5lIFBTQ19BQzk3RVZOVF9UTwkJKDEgPDwgOSkKKyNkZWZpbmUgUFNDX0FDOTdFVk5UX1RVCQkoMSA8PCA4KQorI2RlZmluZSBQU0NfQUM5N0VWTlRfUkQJCSgxIDw8IDUpCisjZGVmaW5lIFBTQ19BQzk3RVZOVF9URAkJKDEgPDwgNCkKKworLyogQ09ERUMgQ29tbWFuZCBSZWdpc3Rlci4KKyovCisjZGVmaW5lIFBTQ19BQzk3Q0RDX1JECQkoMSA8PCAyNSkKKyNkZWZpbmUgUFNDX0FDOTdDRENfSURfTUFTSwkoMyA8PCAyMykKKyNkZWZpbmUgUFNDX0FDOTdDRENfSU5EWF9NQVNLCSgweDdmIDw8IDE2KQorI2RlZmluZSBQU0NfQUM5N0NEQ19JRCh4KQkoKCh4KSAmIDB4MykgPDwgMjMpCisjZGVmaW5lIFBTQ19BQzk3Q0RDX0lORFgoeCkJKCgoeCkgJiAweDdmKSA8PCAxNikKKworLyogQUM5NyBSZXNldCBDb250cm9sIFJlZ2lzdGVyLgorKi8KKyNkZWZpbmUgUFNDX0FDOTdSU1RfUlNUCQkoMSA8PCAxKQorI2RlZmluZSBQU0NfQUM5N1JTVF9TTkMJCSgxIDw8IDApCisKKworLyogUFNDIGluIEkyUyBNb2RlLgorKi8KK3R5cGVkZWYgc3RydWN0CXBzY19pMnMgeworCXUzMglwc2Nfc2VsOworCXUzMglwc2NfY3RybDsKKwl1MzIJcHNjX2kyc2NmZzsKKwl1MzIJcHNjX2kyc21zazsKKwl1MzIJcHNjX2kyc3BjcjsKKwl1MzIJcHNjX2kyc3N0YXQ7CisJdTMyCXBzY19pMnNldmVudDsKKwl1MzIJcHNjX2kyc3R4cng7CisJdTMyCXBzY19pMnN1ZGY7Cit9IHBzY19pMnNfdDsKKworLyogSTJTIENvbmZpZyBSZWdpc3Rlci4KKyovCisjZGVmaW5lIFBTQ19JMlNDRkdfUlRfTUFTSwkoMyA8PCAzMCkKKyNkZWZpbmUgUFNDX0kyU0NGR19SVF9GSUZPMQkoMCA8PCAzMCkKKyNkZWZpbmUgUFNDX0kyU0NGR19SVF9GSUZPMgkoMSA8PCAzMCkKKyNkZWZpbmUgUFNDX0kyU0NGR19SVF9GSUZPNAkoMiA8PCAzMCkKKyNkZWZpbmUgUFNDX0kyU0NGR19SVF9GSUZPOAkoMyA8PCAzMCkKKworI2RlZmluZSBQU0NfSTJTQ0ZHX1RUX01BU0sJKDMgPDwgMjgpCisjZGVmaW5lIFBTQ19JMlNDRkdfVFRfRklGTzEJKDAgPDwgMjgpCisjZGVmaW5lIFBTQ19JMlNDRkdfVFRfRklGTzIJKDEgPDwgMjgpCisjZGVmaW5lIFBTQ19JMlNDRkdfVFRfRklGTzQJKDIgPDwgMjgpCisjZGVmaW5lIFBTQ19JMlNDRkdfVFRfRklGTzgJKDMgPDwgMjgpCisKKyNkZWZpbmUgUFNDX0kyU0NGR19ERF9ESVNBQkxFCSgxIDw8IDI3KQorI2RlZmluZSBQU0NfSTJTQ0ZHX0RFX0VOQUJMRQkoMSA8PCAyNikKKyNkZWZpbmUgUFNDX0kyU0NGR19TRVRfV1MoeCkJKCgoKCh4KSAvIDIpIC0gMSkgJiAweDdmKSA8PCAxNikKKyNkZWZpbmUgUFNDX0kyU0NGR19XSQkJKDEgPDwgMTUpCisKKyNkZWZpbmUgUFNDX0kyU0NGR19ESVZfTUFTSwkoMyA8PCAxMykKKyNkZWZpbmUgUFNDX0kyU0NGR19ESVYyCQkoMCA8PCAxMykKKyNkZWZpbmUgUFNDX0kyU0NGR19ESVY0CQkoMSA8PCAxMykKKyNkZWZpbmUgUFNDX0kyU0NGR19ESVY4CQkoMiA8PCAxMykKKyNkZWZpbmUgUFNDX0kyU0NGR19ESVYxNgkoMyA8PCAxMykKKworI2RlZmluZSBQU0NfSTJTQ0ZHX0JJCQkoMSA8PCAxMikKKyNkZWZpbmUgUFNDX0kyU0NGR19CVUYJCSgxIDw8IDExKQorI2RlZmluZSBQU0NfSTJTQ0ZHX01MSgkJKDEgPDwgMTApCisjZGVmaW5lIFBTQ19JMlNDRkdfWE0JCSgxIDw8IDkpCisKKy8qIFRoZSB3b3JkIGxlbmd0aCBlcXVhdGlvbiBpcyBzaW1wbHkgTEVOKzEuCisgKi8KKyNkZWZpbmUgUFNDX0kyU0NGR19TRVRfTEVOKHgpCSgoKCh4KSAtIDEpICYgMHgxZikgPDwgNCkKKyNkZWZpbmUgUFNDX0kyU0NGR19HRVRfTEVOKHgpCSgoKCh4KSA+PiA0KSAmIDB4MWYpICsgMSkKKworI2RlZmluZSBQU0NfSTJTQ0ZHX0xCCQkoMSA8PCAyKQorI2RlZmluZSBQU0NfSTJTQ0ZHX01MRgkJKDEgPDwgMSkKKyNkZWZpbmUgUFNDX0kyU0NGR19NUwkJKDEgPDwgMCkKKworLyogSTJTIE1hc2sgUmVnaXN0ZXIuCisqLworI2RlZmluZSBQU0NfSTJTTVNLX1JSCQkoMSA8PCAxMykKKyNkZWZpbmUgUFNDX0kyU01TS19STwkJKDEgPDwgMTIpCisjZGVmaW5lIFBTQ19JMlNNU0tfUlUJCSgxIDw8IDExKQorI2RlZmluZSBQU0NfSTJTTVNLX1RSCQkoMSA8PCAxMCkKKyNkZWZpbmUgUFNDX0kyU01TS19UTwkJKDEgPDwgOSkKKyNkZWZpbmUgUFNDX0kyU01TS19UVQkJKDEgPDwgOCkKKyNkZWZpbmUgUFNDX0kyU01TS19SRAkJKDEgPDwgNSkKKyNkZWZpbmUgUFNDX0kyU01TS19URAkJKDEgPDwgNCkKKyNkZWZpbmUgUFNDX0kyU01TS19BTExNQVNLCShQU0NfSTJTTVNLX1JSIHwgUFNDX0kyU01TS19STyB8IFwKKwkJCQkgUFNDX0kyU01TS19SVSB8IFBTQ19JMlNNU0tfVFIgfCBcCisJCQkJIFBTQ19JMlNNU0tfVE8gfCBQU0NfSTJTTVNLX1RVIHwgXAorCQkJCSBQU0NfSTJTTVNLX1JEIHwgUFNDX0kyU01TS19URCkKKworLyogSTJTIFByb3RvY29sIENvbnRyb2wgUmVnaXN0ZXIuCisqLworI2RlZmluZSBQU0NfSTJTUENSX1JDCQkoMSA8PCA2KQorI2RlZmluZSBQU0NfSTJTUENSX1JQCQkoMSA8PCA1KQorI2RlZmluZSBQU0NfSTJTUENSX1JTCQkoMSA8PCA0KQorI2RlZmluZSBQU0NfSTJTUENSX1RDCQkoMSA8PCAyKQorI2RlZmluZSBQU0NfSTJTUENSX1RQCQkoMSA8PCAxKQorI2RlZmluZSBQU0NfSTJTUENSX1RTCQkoMSA8PCAwKQorCisvKiBJMlMgU3RhdHVzIHJlZ2lzdGVyIChyZWFkIG9ubHkpLgorKi8KKyNkZWZpbmUgUFNDX0kyU1NUQVRfUkYJCSgxIDw8IDEzKQorI2RlZmluZSBQU0NfSTJTU1RBVF9SRQkJKDEgPDwgMTIpCisjZGVmaW5lIFBTQ19JMlNTVEFUX1JSCQkoMSA8PCAxMSkKKyNkZWZpbmUgUFNDX0kyU1NUQVRfVEYJCSgxIDw8IDEwKQorI2RlZmluZSBQU0NfSTJTU1RBVF9URQkJKDEgPDwgOSkKKyNkZWZpbmUgUFNDX0kyU1NUQVRfVFIJCSgxIDw8IDgpCisjZGVmaW5lIFBTQ19JMlNTVEFUX1JCCQkoMSA8PCA1KQorI2RlZmluZSBQU0NfSTJTU1RBVF9UQgkJKDEgPDwgNCkKKyNkZWZpbmUgUFNDX0kyU1NUQVRfREkJCSgxIDw8IDIpCisjZGVmaW5lIFBTQ19JMlNTVEFUX0RSCQkoMSA8PCAxKQorI2RlZmluZSBQU0NfSTJTU1RBVF9TUgkJKDEgPDwgMCkKKworLyogSTJTIEV2ZW50IFJlZ2lzdGVyLgorKi8KKyNkZWZpbmUgUFNDX0kyU0VWTlRfUlIJCSgxIDw8IDEzKQorI2RlZmluZSBQU0NfSTJTRVZOVF9STwkJKDEgPDwgMTIpCisjZGVmaW5lIFBTQ19JMlNFVk5UX1JVCQkoMSA8PCAxMSkKKyNkZWZpbmUgUFNDX0kyU0VWTlRfVFIJCSgxIDw8IDEwKQorI2RlZmluZSBQU0NfSTJTRVZOVF9UTwkJKDEgPDwgOSkKKyNkZWZpbmUgUFNDX0kyU0VWTlRfVFUJCSgxIDw8IDgpCisjZGVmaW5lIFBTQ19JMlNFVk5UX1JECQkoMSA8PCA1KQorI2RlZmluZSBQU0NfSTJTRVZOVF9URAkJKDEgPDwgNCkKKworLyogUFNDIGluIFNQSSBNb2RlLgorKi8KK3R5cGVkZWYgc3RydWN0CXBzY19zcGkgeworCXUzMglwc2Nfc2VsOworCXUzMglwc2NfY3RybDsKKwl1MzIJcHNjX3NwaWNmZzsKKwl1MzIJcHNjX3NwaW1zazsKKwl1MzIJcHNjX3NwaXBjcjsKKwl1MzIJcHNjX3NwaXN0YXQ7CisJdTMyCXBzY19zcGlldmVudDsKKwl1MzIJcHNjX3NwaXR4cng7Cit9IHBzY19zcGlfdDsKKworLyogU1BJIENvbmZpZyBSZWdpc3Rlci4KKyovCisjZGVmaW5lIFBTQ19TUElDRkdfUlRfTUFTSwkoMyA8PCAzMCkKKyNkZWZpbmUgUFNDX1NQSUNGR19SVF9GSUZPMQkoMCA8PCAzMCkKKyNkZWZpbmUgUFNDX1NQSUNGR19SVF9GSUZPMgkoMSA8PCAzMCkKKyNkZWZpbmUgUFNDX1NQSUNGR19SVF9GSUZPNAkoMiA8PCAzMCkKKyNkZWZpbmUgUFNDX1NQSUNGR19SVF9GSUZPOAkoMyA8PCAzMCkKKworI2RlZmluZSBQU0NfU1BJQ0ZHX1RUX01BU0sJKDMgPDwgMjgpCisjZGVmaW5lIFBTQ19TUElDRkdfVFRfRklGTzEJKDAgPDwgMjgpCisjZGVmaW5lIFBTQ19TUElDRkdfVFRfRklGTzIJKDEgPDwgMjgpCisjZGVmaW5lIFBTQ19TUElDRkdfVFRfRklGTzQJKDIgPDwgMjgpCisjZGVmaW5lIFBTQ19TUElDRkdfVFRfRklGTzgJKDMgPDwgMjgpCisKKyNkZWZpbmUgUFNDX1NQSUNGR19ERF9ESVNBQkxFCSgxIDw8IDI3KQorI2RlZmluZSBQU0NfU1BJQ0ZHX0RFX0VOQUJMRQkoMSA8PCAyNikKKyNkZWZpbmUgUFNDX1NQSUNGR19DTFJfQkFVRCh4KQkoKHgpICYgfigoMHgzZikgPDwgMTUpKQorI2RlZmluZSBQU0NfU1BJQ0ZHX1NFVF9CQVVEKHgpCSgoKHgpICYgMHgzZikgPDwgMTUpCisKKyNkZWZpbmUgUFNDX1NQSUNGR19TRVRfRElWKHgpCSgoKHgpICYgMHgwMykgPDwgMTMpCisjZGVmaW5lIFBTQ19TUElDRkdfRElWMgkJMAorI2RlZmluZSBQU0NfU1BJQ0ZHX0RJVjQJCTEKKyNkZWZpbmUgUFNDX1NQSUNGR19ESVY4CQkyCisjZGVmaW5lIFBTQ19TUElDRkdfRElWMTYJMworCisjZGVmaW5lIFBTQ19TUElDRkdfQkkJCSgxIDw8IDEyKQorI2RlZmluZSBQU0NfU1BJQ0ZHX1BTRQkJKDEgPDwgMTEpCisjZGVmaW5lIFBTQ19TUElDRkdfQ0dFCQkoMSA8PCAxMCkKKyNkZWZpbmUgUFNDX1NQSUNGR19DREUJCSgxIDw8IDkpCisKKyNkZWZpbmUgUFNDX1NQSUNGR19DTFJfTEVOKHgpCSgoeCkgJiB+KCgweDFmKSA8PCA0KSkKKyNkZWZpbmUgUFNDX1NQSUNGR19TRVRfTEVOKHgpCSgoKHgtMSkgJiAweDFmKSA8PCA0KQorCisjZGVmaW5lIFBTQ19TUElDRkdfTEIJCSgxIDw8IDMpCisjZGVmaW5lIFBTQ19TUElDRkdfTUxGCQkoMSA8PCAxKQorI2RlZmluZSBQU0NfU1BJQ0ZHX01PCQkoMSA8PCAwKQorCisvKiBTUEkgTWFzayBSZWdpc3Rlci4KKyovCisjZGVmaW5lIFBTQ19TUElNU0tfTU0JCSgxIDw8IDE2KQorI2RlZmluZSBQU0NfU1BJTVNLX1JSCQkoMSA8PCAxMykKKyNkZWZpbmUgUFNDX1NQSU1TS19STwkJKDEgPDwgMTIpCisjZGVmaW5lIFBTQ19TUElNU0tfUlUJCSgxIDw8IDExKQorI2RlZmluZSBQU0NfU1BJTVNLX1RSCQkoMSA8PCAxMCkKKyNkZWZpbmUgUFNDX1NQSU1TS19UTwkJKDEgPDwgOSkKKyNkZWZpbmUgUFNDX1NQSU1TS19UVQkJKDEgPDwgOCkKKyNkZWZpbmUgUFNDX1NQSU1TS19TRAkJKDEgPDwgNSkKKyNkZWZpbmUgUFNDX1NQSU1TS19NRAkJKDEgPDwgNCkKKyNkZWZpbmUgUFNDX1NQSU1TS19BTExNQVNLCShQU0NfU1BJTVNLX01NIHwgUFNDX1NQSU1TS19SUiB8IFwKKwkJCQkgUFNDX1NQSU1TS19STyB8IFBTQ19TUElNU0tfVE8gfCBcCisJCQkJIFBTQ19TUElNU0tfVFUgfCBQU0NfU1BJTVNLX1NEIHwgXAorCQkJCSBQU0NfU1BJTVNLX01EKQorCisvKiBTUEkgUHJvdG9jb2wgQ29udHJvbCBSZWdpc3Rlci4KKyovCisjZGVmaW5lIFBTQ19TUElQQ1JfUkMJCSgxIDw8IDYpCisjZGVmaW5lIFBTQ19TUElQQ1JfU1AJCSgxIDw8IDUpCisjZGVmaW5lIFBTQ19TUElQQ1JfU1MJCSgxIDw8IDQpCisjZGVmaW5lIFBTQ19TUElQQ1JfVEMJCSgxIDw8IDIpCisjZGVmaW5lIFBTQ19TUElQQ1JfTVMJCSgxIDw8IDApCisKKy8qIFNQSSBTdGF0dXMgcmVnaXN0ZXIgKHJlYWQgb25seSkuCisqLworI2RlZmluZSBQU0NfU1BJU1RBVF9SRgkJKDEgPDwgMTMpCisjZGVmaW5lIFBTQ19TUElTVEFUX1JFCQkoMSA8PCAxMikKKyNkZWZpbmUgUFNDX1NQSVNUQVRfUlIJCSgxIDw8IDExKQorI2RlZmluZSBQU0NfU1BJU1RBVF9URgkJKDEgPDwgMTApCisjZGVmaW5lIFBTQ19TUElTVEFUX1RFCQkoMSA8PCA5KQorI2RlZmluZSBQU0NfU1BJU1RBVF9UUgkJKDEgPDwgOCkKKyNkZWZpbmUgUFNDX1NQSVNUQVRfU0IJCSgxIDw8IDUpCisjZGVmaW5lIFBTQ19TUElTVEFUX01CCQkoMSA8PCA0KQorI2RlZmluZSBQU0NfU1BJU1RBVF9ESQkJKDEgPDwgMikKKyNkZWZpbmUgUFNDX1NQSVNUQVRfRFIJCSgxIDw8IDEpCisjZGVmaW5lIFBTQ19TUElTVEFUX1NSCQkoMSA8PCAwKQorCisvKiBTUEkgRXZlbnQgUmVnaXN0ZXIuCisqLworI2RlZmluZSBQU0NfU1BJRVZOVF9NTQkJKDEgPDwgMTYpCisjZGVmaW5lIFBTQ19TUElFVk5UX1JSCQkoMSA8PCAxMykKKyNkZWZpbmUgUFNDX1NQSUVWTlRfUk8JCSgxIDw8IDEyKQorI2RlZmluZSBQU0NfU1BJRVZOVF9SVQkJKDEgPDwgMTEpCisjZGVmaW5lIFBTQ19TUElFVk5UX1RSCQkoMSA8PCAxMCkKKyNkZWZpbmUgUFNDX1NQSUVWTlRfVE8JCSgxIDw8IDkpCisjZGVmaW5lIFBTQ19TUElFVk5UX1RVCQkoMSA8PCA4KQorI2RlZmluZSBQU0NfU1BJRVZOVF9TRAkJKDEgPDwgNSkKKyNkZWZpbmUgUFNDX1NQSUVWTlRfTUQJCSgxIDw8IDQpCisKKy8qIFRyYW5zbWl0IHJlZ2lzdGVyIGNvbnRyb2wuCisqLworI2RlZmluZSBQU0NfU1BJVFhSWF9MQwkJKDEgPDwgMjkpCisjZGVmaW5lIFBTQ19TUElUWFJYX1NSCQkoMSA8PCAyOCkKKworLyogUFNDIGluIFNNQnVzIChJMkMpIE1vZGUuCisqLwordHlwZWRlZiBzdHJ1Y3QJcHNjX3NtYiB7CisJdTMyCXBzY19zZWw7CisJdTMyCXBzY19jdHJsOworCXUzMglwc2Nfc21iY2ZnOworCXUzMglwc2Nfc21ibXNrOworCXUzMglwc2Nfc21icGNyOworCXUzMglwc2Nfc21ic3RhdDsKKwl1MzIJcHNjX3NtYmV2bnQ7CisJdTMyCXBzY19zbWJ0eHJ4OworCXUzMglwc2Nfc21idG1yOworfSBwc2Nfc21iX3Q7CisKKy8qIFNNQnVzIENvbmZpZyBSZWdpc3Rlci4KKyovCisjZGVmaW5lIFBTQ19TTUJDRkdfUlRfTUFTSwkoMyA8PCAzMCkKKyNkZWZpbmUgUFNDX1NNQkNGR19SVF9GSUZPMQkoMCA8PCAzMCkKKyNkZWZpbmUgUFNDX1NNQkNGR19SVF9GSUZPMgkoMSA8PCAzMCkKKyNkZWZpbmUgUFNDX1NNQkNGR19SVF9GSUZPNAkoMiA8PCAzMCkKKyNkZWZpbmUgUFNDX1NNQkNGR19SVF9GSUZPOAkoMyA8PCAzMCkKKworI2RlZmluZSBQU0NfU01CQ0ZHX1RUX01BU0sJKDMgPDwgMjgpCisjZGVmaW5lIFBTQ19TTUJDRkdfVFRfRklGTzEJKDAgPDwgMjgpCisjZGVmaW5lIFBTQ19TTUJDRkdfVFRfRklGTzIJKDEgPDwgMjgpCisjZGVmaW5lIFBTQ19TTUJDRkdfVFRfRklGTzQJKDIgPDwgMjgpCisjZGVmaW5lIFBTQ19TTUJDRkdfVFRfRklGTzgJKDMgPDwgMjgpCisKKyNkZWZpbmUgUFNDX1NNQkNGR19ERF9ESVNBQkxFCSgxIDw8IDI3KQorI2RlZmluZSBQU0NfU01CQ0ZHX0RFX0VOQUJMRQkoMSA8PCAyNikKKworI2RlZmluZSBQU0NfU01CQ0ZHX1NFVF9ESVYoeCkJKCgoeCkgJiAweDAzKSA8PCAxMykKKyNkZWZpbmUgUFNDX1NNQkNGR19ESVYyCQkwCisjZGVmaW5lIFBTQ19TTUJDRkdfRElWNAkJMQorI2RlZmluZSBQU0NfU01CQ0ZHX0RJVjgJCTIKKyNkZWZpbmUgUFNDX1NNQkNGR19ESVYxNgkzCisKKyNkZWZpbmUgUFNDX1NNQkNGR19HQ0UJCSgxIDw8IDkpCisjZGVmaW5lIFBTQ19TTUJDRkdfU0ZNCQkoMSA8PCA4KQorCisjZGVmaW5lIFBTQ19TTUJDRkdfU0VUX1NMVih4KQkoKCh4KSAmIDB4N2YpIDw8IDEpCisKKy8qIFNNQnVzIE1hc2sgUmVnaXN0ZXIuCisqLworI2RlZmluZSBQU0NfU01CTVNLX0ROCQkoMSA8PCAzMCkKKyNkZWZpbmUgUFNDX1NNQk1TS19BTgkJKDEgPDwgMjkpCisjZGVmaW5lIFBTQ19TTUJNU0tfQUwJCSgxIDw8IDI4KQorI2RlZmluZSBQU0NfU01CTVNLX1JSCQkoMSA8PCAxMykKKyNkZWZpbmUgUFNDX1NNQk1TS19STwkJKDEgPDwgMTIpCisjZGVmaW5lIFBTQ19TTUJNU0tfUlUJCSgxIDw8IDExKQorI2RlZmluZSBQU0NfU01CTVNLX1RSCQkoMSA8PCAxMCkKKyNkZWZpbmUgUFNDX1NNQk1TS19UTwkJKDEgPDwgOSkKKyNkZWZpbmUgUFNDX1NNQk1TS19UVQkJKDEgPDwgOCkKKyNkZWZpbmUgUFNDX1NNQk1TS19TRAkJKDEgPDwgNSkKKyNkZWZpbmUgUFNDX1NNQk1TS19NRAkJKDEgPDwgNCkKKyNkZWZpbmUgUFNDX1NNQk1TS19BTExNQVNLCShQU0NfU01CTVNLX0ROIHwgUFNDX1NNQk1TS19BTiB8IFwKKwkJCQkgUFNDX1NNQk1TS19BTCB8IFBTQ19TTUJNU0tfUlIgfCBcCisJCQkJIFBTQ19TTUJNU0tfUk8gfCBQU0NfU01CTVNLX1RPIHwgXAorCQkJCSBQU0NfU01CTVNLX1RVIHwgUFNDX1NNQk1TS19TRCB8IFwKKwkJCQkgUFNDX1NNQk1TS19NRCkKKworLyogU01CdXMgUHJvdG9jb2wgQ29udHJvbCBSZWdpc3Rlci4KKyovCisjZGVmaW5lIFBTQ19TTUJQQ1JfREMJCSgxIDw8IDIpCisjZGVmaW5lIFBTQ19TTUJQQ1JfTVMJCSgxIDw8IDApCisKKy8qIFNNQnVzIFN0YXR1cyByZWdpc3RlciAocmVhZCBvbmx5KS4KKyovCisjZGVmaW5lIFBTQ19TTUJTVEFUX0JCCQkoMSA8PCAyOCkKKyNkZWZpbmUgUFNDX1NNQlNUQVRfUkYJCSgxIDw8IDEzKQorI2RlZmluZSBQU0NfU01CU1RBVF9SRQkJKDEgPDwgMTIpCisjZGVmaW5lIFBTQ19TTUJTVEFUX1JSCQkoMSA8PCAxMSkKKyNkZWZpbmUgUFNDX1NNQlNUQVRfVEYJCSgxIDw8IDEwKQorI2RlZmluZSBQU0NfU01CU1RBVF9URQkJKDEgPDwgOSkKKyNkZWZpbmUgUFNDX1NNQlNUQVRfVFIJCSgxIDw8IDgpCisjZGVmaW5lIFBTQ19TTUJTVEFUX1NCCQkoMSA8PCA1KQorI2RlZmluZSBQU0NfU01CU1RBVF9NQgkJKDEgPDwgNCkKKyNkZWZpbmUgUFNDX1NNQlNUQVRfREkJCSgxIDw8IDIpCisjZGVmaW5lIFBTQ19TTUJTVEFUX0RSCQkoMSA8PCAxKQorI2RlZmluZSBQU0NfU01CU1RBVF9TUgkJKDEgPDwgMCkKKworLyogU01CdXMgRXZlbnQgUmVnaXN0ZXIuCisqLworI2RlZmluZSBQU0NfU01CRVZOVF9ETgkJKDEgPDwgMzApCisjZGVmaW5lIFBTQ19TTUJFVk5UX0FOCQkoMSA8PCAyOSkKKyNkZWZpbmUgUFNDX1NNQkVWTlRfQUwJCSgxIDw8IDI4KQorI2RlZmluZSBQU0NfU01CRVZOVF9SUgkJKDEgPDwgMTMpCisjZGVmaW5lIFBTQ19TTUJFVk5UX1JPCQkoMSA8PCAxMikKKyNkZWZpbmUgUFNDX1NNQkVWTlRfUlUJCSgxIDw8IDExKQorI2RlZmluZSBQU0NfU01CRVZOVF9UUgkJKDEgPDwgMTApCisjZGVmaW5lIFBTQ19TTUJFVk5UX1RPCQkoMSA8PCA5KQorI2RlZmluZSBQU0NfU01CRVZOVF9UVQkJKDEgPDwgOCkKKyNkZWZpbmUgUFNDX1NNQkVWTlRfU0QJCSgxIDw8IDUpCisjZGVmaW5lIFBTQ19TTUJFVk5UX01ECQkoMSA8PCA0KQorI2RlZmluZSBQU0NfU01CRVZOVF9BTExDTFIJKFBTQ19TTUJFVk5UX0ROIHwgUFNDX1NNQkVWTlRfQU4gfCBcCisJCQkJIFBTQ19TTUJFVk5UX0FMIHwgUFNDX1NNQkVWTlRfUlIgfCBcCisJCQkJIFBTQ19TTUJFVk5UX1JPIHwgUFNDX1NNQkVWTlRfVE8gfCBcCisJCQkJIFBTQ19TTUJFVk5UX1RVIHwgUFNDX1NNQkVWTlRfU0QgfCBcCisJCQkJIFBTQ19TTUJFVk5UX01EKQorCisvKiBUcmFuc21pdCByZWdpc3RlciBjb250cm9sLgorKi8KKyNkZWZpbmUgUFNDX1NNQlRYUlhfUlNSCQkoMSA8PCAzMCkKKyNkZWZpbmUgUFNDX1NNQlRYUlhfU1RQCQkoMSA8PCAyOSkKKyNkZWZpbmUgUFNDX1NNQlRYUlhfREFUQU1BU0sJKDB4ZmYpCisKKy8qIFNNQnVzIHByb3RvY29sIHRpbWVycyByZWdpc3Rlci4KKyovCisjZGVmaW5lIFBTQ19TTUJUTVJfU0VUX1RIKHgpCSgoKHgpICYgMHgzKSA8PCAzMCkKKyNkZWZpbmUgUFNDX1NNQlRNUl9TRVRfUFMoeCkJKCgoeCkgJiAweDFmKSA8PCAyNSkKKyNkZWZpbmUgUFNDX1NNQlRNUl9TRVRfUFUoeCkJKCgoeCkgJiAweDFmKSA8PCAyMCkKKyNkZWZpbmUgUFNDX1NNQlRNUl9TRVRfU0goeCkJKCgoeCkgJiAweDFmKSA8PCAxNSkKKyNkZWZpbmUgUFNDX1NNQlRNUl9TRVRfU1UoeCkJKCgoeCkgJiAweDFmKSA8PCAxMCkKKyNkZWZpbmUgUFNDX1NNQlRNUl9TRVRfQ0woeCkJKCgoeCkgJiAweDFmKSA8PCA1KQorI2RlZmluZSBQU0NfU01CVE1SX1NFVF9DSCh4KQkoKCh4KSAmIDB4MWYpIDw8IDApCisKKworI2VuZGlmIC8qIF9BVTEwMDBfUFNDX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtYXUxeDAwL3RpbWV4LmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtYXUxeDAwL3RpbWV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNhZGE2NgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1hdTF4MDAvdGltZXguaApAQCAtMCwwICsxLDEzIEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzIGJ5IFJhbGYgQmFlY2hsZQorICovCisjaWZuZGVmIF9fQVNNX01BQ0hfQVUxWDAwX1RJTUVYX0gKKyNkZWZpbmUgX19BU01fTUFDSF9BVTFYMDBfVElNRVhfSAorCisjZGVmaW5lIENMT0NLX1RJQ0tfUkFURQkJKChIWiAqIDEwMDAwMFVMKSAvIDIpCisKKyNlbmRpZiAvKiBfX0FTTV9NQUNIX0FVMVgwMF9USU1FWF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtZGIxeDAwL2RiMXgwMC5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWRiMXgwMC9kYjF4MDAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjkxMzk4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWRiMXgwMC9kYjF4MDAuaApAQCAtMCwwICsxLDIwNSBAQAorLyoKKyAqIEFNRCBBbGNoZW15IERCMXgwMCBSZWZlcmVuY2UgQm9hcmRzCisgKgorICogQ29weXJpZ2h0IDIwMDEgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCisgKiBBdXRob3I6IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqICAgICAgICAgCXBwb3BvdkBtdmlzdGEuY29tIG9yIHNvdXJjZUBtdmlzdGEuY29tCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgUmFsZiBCYWVjaGxlIChyYWxmQGxpbnV4LW1pcHMub3JnKQorICoKKyAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChWZXJzaW9uIDIpIGFzCisgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICoKKyAqIAorICovCisjaWZuZGVmIF9fQVNNX0RCMVgwMF9ICisjZGVmaW5lIF9fQVNNX0RCMVgwMF9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2lmZGVmIENPTkZJR19NSVBTX0RCMTU1MAorI2RlZmluZSBCQ1NSX0tTRUcxX0FERFIgMHhBRjAwMDAwMAorI2RlZmluZSBOQU5EX1BIWVNfQUREUiAgMHgyMDAwMDAwMAorI2Vsc2UKKyNkZWZpbmUgQkNTUl9LU0VHMV9BRERSIDB4QUUwMDAwMDAKKyNlbmRpZgorCisvKgorICogT3ZlcmxheSBkYXRhIHN0cnVjdHVyZSBvZiB0aGUgRGIxeDAwIGJvYXJkIHJlZ2lzdGVycy4KKyAqIFJlZ2lzdGVycyBsb2NhdGVkIGF0IHBoeXNpY2FsIDBFMDAwMHh4LCBLU0VHMSAweEFFMDAwMHh4CisgKi8KK3R5cGVkZWYgdm9sYXRpbGUgc3RydWN0Cit7CisJLyowMCovCXVuc2lnbmVkIHNob3J0IHdob2FtaTsKKwl1bnNpZ25lZCBzaG9ydCByZXNlcnZlZDA7CisJLyowNCovCXVuc2lnbmVkIHNob3J0IHN0YXR1czsKKwl1bnNpZ25lZCBzaG9ydCByZXNlcnZlZDE7CisJLyowOCovCXVuc2lnbmVkIHNob3J0IHN3aXRjaGVzOworCXVuc2lnbmVkIHNob3J0IHJlc2VydmVkMjsKKwkvKjBDKi8JdW5zaWduZWQgc2hvcnQgcmVzZXRzOworCXVuc2lnbmVkIHNob3J0IHJlc2VydmVkMzsKKwkvKjEwKi8JdW5zaWduZWQgc2hvcnQgcGNtY2lhOworCXVuc2lnbmVkIHNob3J0IHJlc2VydmVkNDsKKwkvKjE0Ki8JdW5zaWduZWQgc2hvcnQgc3BlY2lmaWM7CisJdW5zaWduZWQgc2hvcnQgcmVzZXJ2ZWQ1OworCS8qMTgqLwl1bnNpZ25lZCBzaG9ydCBsZWRzOworCXVuc2lnbmVkIHNob3J0IHJlc2VydmVkNjsKKwkvKjFDKi8JdW5zaWduZWQgc2hvcnQgc3dyZXNldDsKKwl1bnNpZ25lZCBzaG9ydCByZXNlcnZlZDc7CisKK30gQkNTUjsKKworCisvKgorICogUmVnaXN0ZXIvbWFzayBiaXQgZGVmaW5pdGlvbnMgZm9yIHRoZSBCQ1NScworICovCisjZGVmaW5lIEJDU1JfV0hPQU1JX0RDSUQJCTB4MDAwRgorI2RlZmluZSBCQ1NSX1dIT0FNSV9DUExECQkweDAwRjAKKyNkZWZpbmUgQkNTUl9XSE9BTUlfQk9BUkQJCTB4MEYwMAorCisjZGVmaW5lIEJDU1JfU1RBVFVTX1BDMFZTCQkweDAwMDMKKyNkZWZpbmUgQkNTUl9TVEFUVVNfUEMxVlMJCTB4MDAwQworI2RlZmluZSBCQ1NSX1NUQVRVU19QQzBGSQkJMHgwMDEwCisjZGVmaW5lIEJDU1JfU1RBVFVTX1BDMUZJCQkweDAwMjAKKyNkZWZpbmUgQkNTUl9TVEFUVVNfRkxBU0hCVVNZCQkweDAxMDAKKyNkZWZpbmUgQkNTUl9TVEFUVVNfUk9NQlVTWQkJMHgwNDAwCisjZGVmaW5lIEJDU1JfU1RBVFVTX1NXQVBCT09UCQkweDIwMDAKKyNkZWZpbmUgQkNTUl9TVEFUVVNfRkxBU0hERU4JCTB4QzAwMAorCisjZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQCQkweDAwRkYKKyNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfMQkJMHgwMDgwCisjZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzIJCTB4MDA0MAorI2RlZmluZSBCQ1NSX1NXSVRDSEVTX0RJUF8zCQkweDAwMjAKKyNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfNAkJMHgwMDEwCisjZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzUJCTB4MDAwOAorI2RlZmluZSBCQ1NSX1NXSVRDSEVTX0RJUF82CQkweDAwMDQKKyNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfNwkJMHgwMDAyCisjZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzgJCTB4MDAwMQorI2RlZmluZSBCQ1NSX1NXSVRDSEVTX1JPVEFSWQkJMHgwRjAwCisKKyNkZWZpbmUgQkNTUl9SRVNFVFNfUEhZMAkJMHgwMDAxCisjZGVmaW5lIEJDU1JfUkVTRVRTX1BIWTEJCTB4MDAwMgorI2RlZmluZSBCQ1NSX1JFU0VUU19EQwkJCTB4MDAwNAorI2RlZmluZSBCQ1NSX1JFU0VUU19GSVJfU0VMCQkweDIwMDAKKyNkZWZpbmUgQkNTUl9SRVNFVFNfSVJEQV9NT0RFX01BU0sJMHhDMDAwCisjZGVmaW5lIEJDU1JfUkVTRVRTX0lSREFfTU9ERV9GVUxMCTB4MDAwMAorI2RlZmluZSBCQ1NSX1JFU0VUU19JUkRBX01PREVfT0ZGCTB4NDAwMAorI2RlZmluZSBCQ1NSX1JFU0VUU19JUkRBX01PREVfMl8zCTB4ODAwMAorI2RlZmluZSBCQ1NSX1JFU0VUU19JUkRBX01PREVfMV8zCTB4QzAwMAorCisjZGVmaW5lIEJDU1JfUENNQ0lBX1BDMFZQUAkJMHgwMDAzCisjZGVmaW5lIEJDU1JfUENNQ0lBX1BDMFZDQwkJMHgwMDBDCisjZGVmaW5lIEJDU1JfUENNQ0lBX1BDMERSVkVOCQkweDAwMTAKKyNkZWZpbmUgQkNTUl9QQ01DSUFfUEMwUlNUCQkweDAwODAKKyNkZWZpbmUgQkNTUl9QQ01DSUFfUEMxVlBQCQkweDAzMDAKKyNkZWZpbmUgQkNTUl9QQ01DSUFfUEMxVkNDCQkweDBDMDAKKyNkZWZpbmUgQkNTUl9QQ01DSUFfUEMxRFJWRU4JCTB4MTAwMAorI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzFSU1QJCTB4ODAwMAorCisjZGVmaW5lIEJDU1JfQk9BUkRfUENJTTY2RU4JCTB4MDAwMQorI2RlZmluZSBCQ1NSX0JPQVJEX1NEMF9QV1IJCTB4MDA0MAorI2RlZmluZSBCQ1NSX0JPQVJEX1NEMV9QV1IJCTB4MDA4MAorI2RlZmluZSBCQ1NSX0JPQVJEX1BDSU0zMwkJMHgwMTAwCisjZGVmaW5lIEJDU1JfQk9BUkRfR1BJTzIwMFJTVAkJMHgwNDAwCisjZGVmaW5lIEJDU1JfQk9BUkRfUENJQ0ZHCQkweDEwMDAKKyNkZWZpbmUgQkNTUl9CT0FSRF9TRDBfV1AJCTB4NDAwMAorI2RlZmluZSBCQ1NSX0JPQVJEX1NEMV9XUAkJMHg4MDAwCisKKyNkZWZpbmUgQkNTUl9MRURTX0RFQ0lNQUxTCQkweDAwMDMKKyNkZWZpbmUgQkNTUl9MRURTX0xFRDAJCQkweDAxMDAKKyNkZWZpbmUgQkNTUl9MRURTX0xFRDEJCQkweDAyMDAKKyNkZWZpbmUgQkNTUl9MRURTX0xFRDIJCQkweDA0MDAKKyNkZWZpbmUgQkNTUl9MRURTX0xFRDMJCQkweDA4MDAKKworI2RlZmluZSBCQ1NSX1NXUkVTRVRfUkVTRVQJCTB4MDA4MAorCisvKiBQQ01DSUEgRGIxeDAwIHNwZWNpZmljIGRlZmluZXMgKi8KKyNkZWZpbmUgUENNQ0lBX01BWF9TT0NLIDEKKyNkZWZpbmUgUENNQ0lBX05VTV9TT0NLUyAoUENNQ0lBX01BWF9TT0NLKzEpCisKKy8qIFZQUC9WQ0MgKi8KKyNkZWZpbmUgU0VUX1ZDQ19WUFAoVkNDLCBWUFAsIFNMT1QpXAorCSgoKChWQ0MpPDwyKSB8ICgoVlBQKTw8MCkpIDw8ICgoU0xPVCkqOCkpCisKKy8qIFNEIGNvbnRyb2xsZXIgbWFjcm9zICovCisvKgorICogRGV0ZWN0IGNhcmQuCisgKi8KKyNkZWZpbmUgbW1jX2NhcmRfaW5zZXJ0ZWQoX25fLCBfcmVzXykgXAorCWRvIHsgXAorCQlCQ1NSICogY29uc3QgYmNzciA9IChCQ1NSICopMHhBRTAwMDAwMDsgXAorCQl1bnNpZ25lZCBsb25nIG1tY193cCwgYm9hcmRfc3BlY2lmaWM7IFwKKwkJaWYgKChfbl8pKSB7IFwKKwkJCW1tY193cCA9IEJDU1JfQk9BUkRfU0QxX1dQOyBcCisJCX0gZWxzZSB7IFwKKwkJCW1tY193cCA9IEJDU1JfQk9BUkRfU0QwX1dQOyBcCisJCX0gXAorCQlib2FyZF9zcGVjaWZpYyA9IGF1X3JlYWRsKCh1bnNpZ25lZCBsb25nKSgmYmNzci0+c3BlY2lmaWMpKTsgXAorCQlpZiAoIShib2FyZF9zcGVjaWZpYyAmIG1tY193cCkpIHsvKiBsb3cgbWVhbnMgY2FyZCBwcmVzZW50ICovIFwKKwkJCSooaW50ICopKF9yZXNfKSA9IDE7IFwKKwkJfSBlbHNlIHsgXAorCQkJKihpbnQgKikoX3Jlc18pID0gMDsgXAorCQl9IFwKKwl9IHdoaWxlICgwKQorCisvKgorICogQXBwbHkgcG93ZXIgdG8gY2FyZCBzbG90KHMpLgorICovCisjZGVmaW5lIG1tY19wb3dlcl9vbihfbl8pIFwKKwlkbyB7IFwKKwkJQkNTUiAqIGNvbnN0IGJjc3IgPSAoQkNTUiAqKTB4QUUwMDAwMDA7IFwKKwkJdW5zaWduZWQgbG9uZyBtbWNfcHdyLCBtbWNfd3AsIGJvYXJkX3NwZWNpZmljOyBcCisJCWlmICgoX25fKSkgeyBcCisJCQltbWNfcHdyID0gQkNTUl9CT0FSRF9TRDFfUFdSOyBcCisJCQltbWNfd3AgPSBCQ1NSX0JPQVJEX1NEMV9XUDsgXAorCQl9IGVsc2UgeyBcCisJCQltbWNfcHdyID0gQkNTUl9CT0FSRF9TRDBfUFdSOyBcCisJCQltbWNfd3AgPSBCQ1NSX0JPQVJEX1NEMF9XUDsgXAorCQl9IFwKKwkJYm9hcmRfc3BlY2lmaWMgPSBhdV9yZWFkbCgodW5zaWduZWQgbG9uZykoJmJjc3ItPnNwZWNpZmljKSk7IFwKKwkJaWYgKCEoYm9hcmRfc3BlY2lmaWMgJiBtbWNfd3ApKSB7LyogbG93IG1lYW5zIGNhcmQgcHJlc2VudCAqLyBcCisJCQlib2FyZF9zcGVjaWZpYyB8PSBtbWNfcHdyOyBcCisJCQlhdV93cml0ZWwoYm9hcmRfc3BlY2lmaWMsIChpbnQpKCZiY3NyLT5zcGVjaWZpYykpOyBcCisJCQlhdV9zeW5jKCk7IFwKKwkJfSBcCisJfSB3aGlsZSAoMCkKKworCisvKiBOQU5EIGRlZmluZXMgKi8KKy8qIFRpbWluZyB2YWx1ZXMgYXMgZGVzY3JpYmVkIGluIGRhdGFib29rLCAqIG5zIHZhbHVlIHN0cmlwcGVkIG9mCisgKiBsb3dlciAyIGJpdHMuCisgKiBUaGVzZSBkZWZpbmVzIGFyZSBoZXJlIHJhdGhlciB0aGFuIGFuIFNPQzE1NTAgZ2VuZXJpYyBmaWxlIGJlY2F1c2UKKyAqIHRoZSBwYXJ0cyBjaG9zZW4gb24gYW5vdGhlciBib2FyZCBtYXkgYmUgZGlmZmVyZW50IGFuZCBtYXkgcmVxdWlyZQorICogZGlmZmVyZW50IHRpbWluZ3MuCisgKi8KKyNkZWZpbmUgTkFORF9UX0gJCQkoMTggPj4gMikKKyNkZWZpbmUgTkFORF9UX1BVTAkJCSgzMCA+PiAyKQorI2RlZmluZSBOQU5EX1RfU1UJCQkoMzAgPj4gMikKKyNkZWZpbmUgTkFORF9UX1dICQkJKDMwID4+IDIpCisKKy8qIEJpdGZpZWxkIHNoaWZ0IGFtb3VudHMgKi8KKyNkZWZpbmUgTkFORF9UX0hfU0hJRlQJCTAKKyNkZWZpbmUgTkFORF9UX1BVTF9TSElGVAk0CisjZGVmaW5lIE5BTkRfVF9TVV9TSElGVAkJOAorI2RlZmluZSBOQU5EX1RfV0hfU0hJRlQJCTEyCisKKyNkZWZpbmUgTkFORF9USU1JTkcJKChOQU5EX1RfSCAgICYgMHhGKQk8PCBOQU5EX1RfSF9TSElGVCkgICB8IFwKKwkJCSgoTkFORF9UX1BVTCAmIDB4RikJPDwgTkFORF9UX1BVTF9TSElGVCkgfCBcCisJCQkoKE5BTkRfVF9TVSAgJiAweEYpCTw8IE5BTkRfVF9TVV9TSElGVCkgIHwgXAorCQkJKChOQU5EX1RfV0ggICYgMHhGKQk8PCBOQU5EX1RfV0hfU0hJRlQpCisKKyNlbmRpZiAvKiBfX0FTTV9EQjFYMDBfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtZGRiNTA3NC9tYzE0NjgxOHJ0Yy5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWRkYjUwNzQvbWMxNDY4MThydGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWI5YWNiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWRkYjUwNzQvbWMxNDY4MThydGMuaApAQCAtMCwwICsxLDMxIEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4LCAyMDAxLCAwMyBieSBSYWxmIEJhZWNobGUKKyAqCisgKiBSVEMgcm91dGluZXMgZm9yIFBDIHN0eWxlIGF0dGFjaGVkIERhbGxhcyBjaGlwLgorICovCisjaWZuZGVmIF9fQVNNX01BQ0hfRERCNTA3NF9NQzE0NjgxOFJUQ19ICisjZGVmaW5lIF9fQVNNX01BQ0hfRERCNTA3NF9NQzE0NjgxOFJUQ19ICisKKyNpbmNsdWRlIDxhc20vZGRiNXh4eC9kZGI1MDc0Lmg+CisjaW5jbHVkZSA8YXNtL2RkYjV4eHgvZGRiNXh4eC5oPgorCisjZGVmaW5lIFJUQ19QT1JUKHgpCSgweDcwICsgKHgpKQorI2RlZmluZSBSVENfSVJRCQk4CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciBDTU9TX1JFQUQodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXJldHVybiAqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoS1NFRzFBRERSKEREQl9QQ0lfTUVNX0JBU0UpK2FkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgQ01PU19XUklURSh1bnNpZ25lZCBjaGFyIGRhdGEsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwkqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoS1NFRzFBRERSKEREQl9QQ0lfTUVNX0JBU0UpK2FkZHIpID0gZGF0YTsKK30KKworI2RlZmluZSBSVENfQUxXQVlTX0JDRAkxCisKKyNlbmRpZiAvKiBfX0FTTV9NQUNIX0REQjUwNzRfTUMxNDY4MThSVENfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWRlYy9tYzE0NjgxOHJ0Yy5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWRlYy9tYzE0NjgxOHJ0Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzMjZmNDUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtZGVjL21jMTQ2ODE4cnRjLmgKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIFJUQyBkZWZpbml0aW9ucyBmb3IgREVDc3RhdGlvbiBzdHlsZSBhdHRhY2hlZCBEYWxsYXMgRFMxMjg3IGNoaXAuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4LCAyMDAxIGJ5IFJhbGYgQmFlY2hsZQorICogQ29weXJpZ2h0IChDKSAxOTk4IGJ5IEhhcmFsZCBLb2VyZmdlbgorICogQ29weXJpZ2h0IChDKSAyMDAyICBNYWNpZWogVy4gUm96eWNraQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpZm5kZWYgX19BU01fTUlQU19ERUNfUlRDX0RFQ19ICisjZGVmaW5lIF9fQVNNX01JUFNfREVDX1JUQ19ERUNfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KKworZXh0ZXJuIHZvbGF0aWxlIHU4ICpkZWNfcnRjX2Jhc2U7CitleHRlcm4gdW5zaWduZWQgbG9uZyBkZWNfa25fc2xvdF9zaXplOworCisjZGVmaW5lIFJUQ19QT1JUKHgpCUNQSFlTQUREUihkZWNfcnRjX2Jhc2UpCisjZGVmaW5lIFJUQ19JT19FWFRFTlQJZGVjX2tuX3Nsb3Rfc2l6ZQorI2RlZmluZSBSVENfSU9NQVBQRUQJMAorI3VuZGVmIFJUQ19JUlEKKworI2RlZmluZSBSVENfREVDX1lFQVIJMHgzZgkvKiBXaGVyZSB3ZSBzdG9yZSB0aGUgcmVhbCB5ZWFyIG9uIERFQ3MuICAqLworCisjaW5jbHVkZSA8bGludXgvbWMxNDY4MThydGMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgQ01PU19SRUFEKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gZGVjX3J0Y19iYXNlW2FkZHIgKiA0XTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIENNT1NfV1JJVEUodW5zaWduZWQgY2hhciBkYXRhLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJZGVjX3J0Y19iYXNlW2FkZHIgKiA0XSA9IGRhdGE7Cit9CisKKyNkZWZpbmUgUlRDX0FMV0FZU19CQ0QJMAorCisjZW5kaWYgLyogX19BU01fTUlQU19ERUNfUlRDX0RFQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtZGVjL3BhcmFtLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtZGVjL3BhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U0ZjBlMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1kZWMvcGFyYW0uaApAQCAtMCwwICsxLDE4IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzIGJ5IFJhbGYgQmFlY2hsZQorICovCisjaWZuZGVmIF9fQVNNX01BQ0hfREVDX1BBUkFNX0gKKyNkZWZpbmUgX19BU01fTUFDSF9ERUNfUEFSQU1fSAorCisvKgorICogbG9nMihIWiksIGNoYW5nZSB0aGlzIGhlcmUgaWYgeW91IHdhbnQgYW5vdGhlciBIWiB2YWx1ZS4gVGhpcyBpcyBhbHNvCisgKiB1c2VkIGluIGRlY190aW1lX2luaXQuICBNaW5pbXVtIGlzIDEsIE1heGltdW0gaXMgMTUuCisgKi8KKyNkZWZpbmUgTE9HXzJfSFogNworI2RlZmluZSBIWiAoMSA8PCBMT0dfMl9IWikKKworI2VuZGlmIC8qIF9fQVNNX01BQ0hfREVDX1BBUkFNX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1ldjY0MTIwL21hY2gtZ3Q2NDEyMC5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWV2NjQxMjAvbWFjaC1ndDY0MTIwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNiMTQ0MwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1ldjY0MTIwL21hY2gtZ3Q2NDEyMC5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiAgVGhpcyBpcyBhIGRpcmVjdCBjb3B5IG9mIHRoZSBldjk2MTAwLmggZmlsZSwgd2l0aCBhIGdsb2JhbAorICogc2VhcmNoIGFuZCByZXBsYWNlLiAgVGhlIG51bWJlcnMgYXJlIHRoZSBzYW1lLgorICoKKyAqICBUaGUgcmVhc29uIEknbSBkdXBsaWNhdGluZyB0aGlzIGlzIHNvIHRoYXQgdGhlIDY0MTIwLzk2MTAwCisgKiBkZWZpbmVzIHdvbid0IGJlIGNvbmZ1c2luZyBpbiB0aGUgc291cmNlIGNvZGUuCisgKi8KKyNpZm5kZWYgX19BU01fR0FMSUxFT19CT0FSRFNfTUlQU19FVjY0MTIwX0gKKyNkZWZpbmUgX19BU01fR0FMSUxFT19CT0FSRFNfTUlQU19FVjY0MTIwX0gKKworLyoKKyAqICAgR1Q2NDEyMCBjb25maWcgc3BhY2UgYmFzZSBhZGRyZXNzCisgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIGd0NjQxMjBfYmFzZTsKKworI2RlZmluZSBHVDY0MTIwX0JBU0UJKGd0NjQxMjBfYmFzZSkKKworLyoKKyAqICAgUENJIEJ1cyBhbGxvY2F0aW9uCisgKi8KKyNkZWZpbmUgR1RfUENJX01FTV9CQVNFCTB4MTIwMDAwMDBVTAorI2RlZmluZSBHVF9QQ0lfTUVNX1NJWkUJMHgwMjAwMDAwMFVMCisjZGVmaW5lIEdUX1BDSV9JT19CQVNFCTB4MTAwMDAwMDBVTAorI2RlZmluZSBHVF9QQ0lfSU9fU0laRQkweDAyMDAwMDAwVUwKKyNkZWZpbmUgR1RfSVNBX0lPX0JBU0UJUENJX0lPX0JBU0UKKworLyoKKyAqICAgRHVhcnQgSS9PIHBvcnRzLgorICovCisjZGVmaW5lIEVWNjQxMjBfQ09NMV9CQVNFX0FERFIJKDB4MWQwMDAwMDAgKyAweDIwKQorI2RlZmluZSBFVjY0MTIwX0NPTTJfQkFTRV9BRERSCSgweDFkMDAwMDAwICsgMHgwMCkKKworCisvKgorICogICBFVjY0MTIwIGludGVycnVwdCBjb250cm9sbGVyIHJlZ2lzdGVyIGJhc2UuCisgKi8KKyNkZWZpbmUgRVY2NDEyMF9JQ1RSTF9SRUdTX0JBU0UJKEtTRUcxQUREUigweDFmMDAwMDAwKSkKKworLyoKKyAqICAgRVY2NDEyMCBVQVJUIHJlZ2lzdGVyIGJhc2UuCisgKi8KKyNkZWZpbmUgRVY2NDEyMF9VQVJUMF9SRUdTX0JBU0UJKEtTRUcxQUREUihFVjY0MTIwX0NPTTFfQkFTRV9BRERSKSkKKyNkZWZpbmUgRVY2NDEyMF9VQVJUMV9SRUdTX0JBU0UJKEtTRUcxQUREUihFVjY0MTIwX0NPTTJfQkFTRV9BRERSKSkKKyNkZWZpbmUgRVY2NDEyMF9CQVNFX0JBVUQgKCAzNjg2NDAwIC8gMTYgKQorCisvKgorICogUENJIGludGVycnVwdHMgd2lsbCBjb21lIGluIG9uIGVpdGhlciB0aGUgSU5UQSBvciBJTlREIGludGVycnVwcyBsaW5lcywKKyAqIHdoaWNoIGFyZSBtYXBwZWQgdG8gdGhlICMyIGFuZCAjNSBpbnRlcnJ1cHQgcGlucyBvZiB0aGUgTUlQUy4gIE9uIG91cgorICogYm9hcmRzLCB0aGV5IGFsbCBlaXRoZXIgY29tZSBpbiBvbiBJbnREIG9yIHRoZXkgYWxsIGNvbWUgaW4gb24gSW50QSwgdGhleQorICogYXJlbid0IG1peGVkLiBUaGVyZSBjYW4gYmUgbnVtZXJvdXMgUENJIGludGVycnVwdHMsIHNvIHdlIGtlZXAgYSBsaXN0IG9mIHRoZQorICogInJlcXVlc3RlZCIgaW50ZXJydXB0IG51bWJlcnMgYW5kIGdvIHRocm91Z2ggdGhlIGxpc3Qgd2hlbmV2ZXIgd2UgZ2V0IGFuCisgKiBJbnRBL0QuCisgKgorICogSW50ZXJydXB0cyA8IDggYXJlIGRpcmVjdGx5IHdpcmVkIHRvIHRoZSBwcm9jZXNzb3I7IFBDSSBJTlRBIGlzIDggYW5kCisgKiBJTlREIGlzIDExLgorICovCisjZGVmaW5lIEdUX1RJTUVSCTQKKyNkZWZpbmUgR1RfSU5UQQkJMgorI2RlZmluZSBHVF9JTlRECQk1CisKKyNlbmRpZiAvKiBfX0FTTV9HQUxJTEVPX0JPQVJEU19NSVBTX0VWNjQxMjBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWV2OTYxMDAvbWFjaC1ndDY0MTIwLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtZXY5NjEwMC9tYWNoLWd0NjQxMjAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWYxZTZjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWV2OTYxMDAvbWFjaC1ndDY0MTIwLmgKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqICBUaGlzIGlzIGEgZGlyZWN0IGNvcHkgb2YgdGhlIGV2OTYxMDAuaCBmaWxlLCB3aXRoIGEgZ2xvYmFsCisgKiBzZWFyY2ggYW5kIHJlcGxhY2UuICBUaGUgbnVtYmVycyBhcmUgdGhlIHNhbWUuCisgKgorICogIFRoZSByZWFzb24gSSdtIGR1cGxpY2F0aW5nIHRoaXMgaXMgc28gdGhhdCB0aGUgNjQxMjAvOTYxMDAKKyAqIGRlZmluZXMgd29uJ3QgYmUgY29uZnVzaW5nIGluIHRoZSBzb3VyY2UgY29kZS4KKyAqLworI2lmbmRlZiBfQVNNX0dUNjQxMjBfRVY5NjEwMF9HVDY0MTIwX0RFUF9ICisjZGVmaW5lIF9BU01fR1Q2NDEyMF9FVjk2MTAwX0dUNjQxMjBfREVQX0gKKworLyoKKyAqICAgR1Q5NjEwMCBjb25maWcgc3BhY2UgYmFzZSBhZGRyZXNzCisgKi8KKyNkZWZpbmUgR1Q2NDEyMF9CQVNFCShLU0VHMUFERFIoMHgxNDAwMDAwMCkpCisKKy8qCisgKiAgIFBDSSBCdXMgYWxsb2NhdGlvbgorICoKKyAqICAgKEd1ZXNzaW5nIC4uLikKKyAqLworI2RlZmluZSBHVF9QQ0lfTUVNX0JBU0UJMHgxMjAwMDAwMFVMCisjZGVmaW5lIEdUX1BDSV9NRU1fU0laRQkweDAyMDAwMDAwVUwKKyNkZWZpbmUgR1RfUENJX0lPX0JBU0UJMHgxMDAwMDAwMFVMCisjZGVmaW5lIEdUX1BDSV9JT19TSVpFCTB4MDIwMDAwMDBVTAorI2RlZmluZSBHVF9JU0FfSU9fQkFTRQlQQ0lfSU9fQkFTRQorCisvKgorICogICBEdWFydCBJL08gcG9ydHMuCisgKi8KKyNkZWZpbmUgRVY5NjEwMF9DT00xX0JBU0VfQUREUgkoMHhCRDAwMDAwMCArIDB4MjApCisjZGVmaW5lIEVWOTYxMDBfQ09NMl9CQVNFX0FERFIJKDB4QkQwMDAwMDAgKyAweDAwKQorCisKKy8qCisgKiAgIEVWOTYxMDAgaW50ZXJydXB0IGNvbnRyb2xsZXIgcmVnaXN0ZXIgYmFzZS4KKyAqLworI2RlZmluZSBFVjk2MTAwX0lDVFJMX1JFR1NfQkFTRQkoS1NFRzFBRERSKDB4MWYwMDAwMDApKQorCisvKgorICogICBFVjk2MTAwIFVBUlQgcmVnaXN0ZXIgYmFzZS4KKyAqLworI2RlZmluZSBFVjk2MTAwX1VBUlQwX1JFR1NfQkFTRQlFVjk2MTAwX0NPTTFfQkFTRV9BRERSCisjZGVmaW5lIEVWOTYxMDBfVUFSVDFfUkVHU19CQVNFCUVWOTYxMDBfQ09NMl9CQVNFX0FERFIKKyNkZWZpbmUgRVY5NjEwMF9CQVNFX0JBVUQJKCAzNjg2NDAwIC8gMTYgKQorCisjZW5kaWYgLyogX0FTTV9HVDY0MTIwX0VWOTYxMDBfR1Q2NDEyMF9ERVBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWdlbmVyaWMvY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtZ2VuZXJpYy9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWVjZmQwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWdlbmVyaWMvY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKQEAgLTAsMCArMSwxMyBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMyBSYWxmIEJhZWNobGUKKyAqLworI2lmbmRlZiBfX0FTTV9NQUNIX0dFTkVSSUNfQ1BVX0ZFQVRVUkVfT1ZFUlJJREVTX0gKKyNkZWZpbmUgX19BU01fTUFDSF9HRU5FUklDX0NQVV9GRUFUVVJFX09WRVJSSURFU19ICisKKy8qIEludGVuc2lvbmFsbHkgZW1wdHkgZmlsZSAuLi4gICovCisKKyNlbmRpZiAvKiBfX0FTTV9NQUNIX0dFTkVSSUNfQ1BVX0ZFQVRVUkVfT1ZFUlJJREVTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1nZW5lcmljL2Zsb3BweS5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWdlbmVyaWMvZmxvcHB5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgyYTU4NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1nZW5lcmljL2Zsb3BweS5oCkBAIC0wLDAgKzEsMTM5IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAyMDAzIGJ5IFJhbGYgQmFlY2hsZQorICovCisjaWZuZGVmIF9fQVNNX01BQ0hfR0VORVJJQ19GTE9QUFlfSAorI2RlZmluZSBfX0FTTV9NQUNIX0dFTkVSSUNfRkxPUFBZX0gKKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKworI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZWN0bC5oPgorI2luY2x1ZGUgPGFzbS9kbWEuaD4KKyNpbmNsdWRlIDxhc20vZmxvcHB5Lmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisKKy8qCisgKiBIb3cgdG8gYWNjZXNzIHRoZSBGREMncyByZWdpc3RlcnMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciBmZF9pbmIodW5zaWduZWQgaW50IHBvcnQpCit7CisJcmV0dXJuIGluYl9wKHBvcnQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmRfb3V0Yih1bnNpZ25lZCBjaGFyIHZhbHVlLCB1bnNpZ25lZCBpbnQgcG9ydCkKK3sKKwlvdXRiX3AodmFsdWUsIHBvcnQpOworfQorCisvKgorICogSG93IHRvIGFjY2VzcyB0aGUgZmxvcHB5IERNQSBmdW5jdGlvbnMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBmZF9lbmFibGVfZG1hKHZvaWQpCit7CisJZW5hYmxlX2RtYShGTE9QUFlfRE1BKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZkX2Rpc2FibGVfZG1hKHZvaWQpCit7CisJZGlzYWJsZV9kbWEoRkxPUFBZX0RNQSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGZkX3JlcXVlc3RfZG1hKHZvaWQpCit7CisJcmV0dXJuIHJlcXVlc3RfZG1hKEZMT1BQWV9ETUEsICJmbG9wcHkiKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZkX2ZyZWVfZG1hKHZvaWQpCit7CisJZnJlZV9kbWEoRkxPUFBZX0RNQSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmZF9jbGVhcl9kbWFfZmYodm9pZCkKK3sKKwljbGVhcl9kbWFfZmYoRkxPUFBZX0RNQSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmZF9zZXRfZG1hX21vZGUoY2hhciBtb2RlKQoreworCXNldF9kbWFfbW9kZShGTE9QUFlfRE1BLCBtb2RlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZkX3NldF9kbWFfYWRkcihjaGFyICphZGRyKQoreworCXNldF9kbWFfYWRkcihGTE9QUFlfRE1BLCAodW5zaWduZWQgbG9uZykgYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmZF9zZXRfZG1hX2NvdW50KHVuc2lnbmVkIGludCBjb3VudCkKK3sKKwlzZXRfZG1hX2NvdW50KEZMT1BQWV9ETUEsIGNvdW50KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZmRfZ2V0X2RtYV9yZXNpZHVlKHZvaWQpCit7CisJcmV0dXJuIGdldF9kbWFfcmVzaWR1ZShGTE9QUFlfRE1BKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZkX2VuYWJsZV9pcnEodm9pZCkKK3sKKwllbmFibGVfaXJxKEZMT1BQWV9JUlEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmRfZGlzYWJsZV9pcnEodm9pZCkKK3sKKwlkaXNhYmxlX2lycShGTE9QUFlfSVJRKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZmRfcmVxdWVzdF9pcnEodm9pZCkKK3sKKwlyZXR1cm4gcmVxdWVzdF9pcnEoRkxPUFBZX0lSUSwgZmxvcHB5X2ludGVycnVwdCwKKwkgICAgICAgICAgICAgICAgICAgU0FfSU5URVJSVVBUIHwgU0FfU0FNUExFX1JBTkRPTSwgImZsb3BweSIsIE5VTEwpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmRfZnJlZV9pcnEodm9pZCkKK3sKKwlmcmVlX2lycShGTE9QUFlfSVJRLCBOVUxMKTsKK30KKworI2RlZmluZSBmZF9mcmVlX2lycSgpICAgICAgICAgICBmcmVlX2lycShGTE9QUFlfSVJRLCBOVUxMKTsKKworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZmRfZ2V0ZmRhZGRyMSh2b2lkKQoreworCXJldHVybiAweDNmMDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGZkX2RtYV9tZW1fYWxsb2ModW5zaWduZWQgbG9uZyBzaXplKQoreworCXVuc2lnbmVkIGxvbmcgbWVtOworCisJbWVtID0gX19nZXRfZG1hX3BhZ2VzKEdGUF9LRVJORUwsIGdldF9vcmRlcihzaXplKSk7CisKKwlyZXR1cm4gbWVtOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmRfZG1hX21lbV9mcmVlKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCWZyZWVfcGFnZXMoYWRkciwgZ2V0X29yZGVyKHNpemUpKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGZkX2RyaXZlX3R5cGUodW5zaWduZWQgbG9uZyBuKQoreworCWlmIChuID09IDApCisJCXJldHVybiA0OwkvKiAzLDUiLCAxLjQ0bWIgKi8KKworCXJldHVybiAwOworfQorCisjZW5kaWYgLyogX19BU01fTUFDSF9HRU5FUklDX0ZMT1BQWV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtZ2VuZXJpYy9pZGUuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1nZW5lcmljL2lkZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiMmVkZDAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtZ2VuZXJpYy9pZGUuaApAQCAtMCwwICsxLDExOSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NC0xOTk2ICBMaW51cyBUb3J2YWxkcyAmIGF1dGhvcnMKKyAqCisgKiBDb3BpZWQgZnJvbSBpMzg2OyBtYW55IG9mIHRoZSBlc3BlY2lhbGx5IG9sZGVyIE1JUFMgb3IgSVNBLWJhc2VkIHBsYXRmb3JtcworICogYXJlIGJhc2ljYWxseSBpZGVudGljYWwuICBVc2luZyB0aGlzIGZpbGUgcHJvYmFibHkgaW1wbGllcyBpODI1OSBQSUMKKyAqIHN1cHBvcnQgaW4gYSBzeXN0ZW0gYnV0IHRoZSB2ZXJ5IGxlYXN0IGludGVycnVwdCBudW1iZXJzIDAgLSAxNSBuZWVkIHRvCisgKiBiZSBwdXQgYXNpZGUgZm9yIGxlZ2FjeSBkZXZpY2VzLgorICovCisjaWZuZGVmIF9fQVNNX01BQ0hfR0VORVJJQ19JREVfSAorI2RlZmluZSBfX0FTTV9NQUNIX0dFTkVSSUNfSURFX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgorCisjaWZuZGVmIE1BWF9IV0lGUworIyBpZmRlZiBDT05GSUdfQkxLX0RFVl9JREVQQ0kKKyNkZWZpbmUgTUFYX0hXSUZTCTEwCisjIGVsc2UKKyNkZWZpbmUgTUFYX0hXSUZTCTYKKyMgZW5kaWYKKyNlbmRpZgorCisjZGVmaW5lIElERV9BUkNIX09CU09MRVRFX0RFRkFVTFRTCisKK3N0YXRpYyBfX2lubGluZV9fIGludCBpZGVfcHJvYmVfbGVnYWN5KHZvaWQpCit7CisjaWZkZWYgQ09ORklHX1BDSQorCXN0cnVjdCBwY2lfZGV2ICpkZXY7CisJaWYgKChkZXYgPSBwY2lfZ2V0X2NsYXNzKFBDSV9DTEFTU19CUklER0VfRUlTQSA8PCA4LCBOVUxMKSkgIT0gTlVMTCB8fAorCSAgICAoZGV2ID0gcGNpX2dldF9jbGFzcyhQQ0lfQ0xBU1NfQlJJREdFX0lTQSA8PCA4LCBOVUxMKSkgIT0gTlVMTCkgeworCQlwY2lfZGV2X3B1dChkZXYpOworCisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKKyNlbGlmIGRlZmluZWQoQ09ORklHX0VJU0EpIHx8IGRlZmluZWQoQ09ORklHX0lTQSkKKwlyZXR1cm4gMTsKKyNlbHNlCisJcmV0dXJuIDA7CisjZW5kaWYKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IGlkZV9kZWZhdWx0X2lycSh1bnNpZ25lZCBsb25nIGJhc2UpCit7CisJaWYgKGlkZV9wcm9iZV9sZWdhY3koKSkKKwkJc3dpdGNoIChiYXNlKSB7CisJCWNhc2UgMHgxZjA6CisJCQlyZXR1cm4gMTQ7CisJCWNhc2UgMHgxNzA6CisJCQlyZXR1cm4gMTU7CisJCWNhc2UgMHgxZTg6CisJCQlyZXR1cm4gMTE7CisJCWNhc2UgMHgxNjg6CisJCQlyZXR1cm4gMTA7CisJCWNhc2UgMHgxZTA6CisJCQlyZXR1cm4gODsKKwkJY2FzZSAweDE2MDoKKwkJCXJldHVybiAxMjsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAwOworCQl9CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBpZGVfZGVmYXVsdF9pb19iYXNlKGludCBpbmRleCkKK3sKKwlpZiAoaWRlX3Byb2JlX2xlZ2FjeSgpKQorCQlzd2l0Y2ggKGluZGV4KSB7CisJCWNhc2UgMDoKKwkJCXJldHVybiAweDFmMDsKKwkJY2FzZSAxOgorCQkJcmV0dXJuIDB4MTcwOworCQljYXNlIDI6CisJCQlyZXR1cm4gMHgxZTg7CisJCWNhc2UgMzoKKwkJCXJldHVybiAweDE2ODsKKwkJY2FzZSA0OgorCQkJcmV0dXJuIDB4MWUwOworCQljYXNlIDU6CisJCQlyZXR1cm4gMHgxNjA7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gMDsKKwkJfQorCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgSURFX0FSQ0hfT0JTT0xFVEVfSU5JVAorI2RlZmluZSBpZGVfZGVmYXVsdF9pb19jdGwoYmFzZSkJKChiYXNlKSArIDB4MjA2KSAvKiBvYnNvbGV0ZSAqLworCisjaWZkZWYgQ09ORklHX0JMS19ERVZfSURFUENJCisjZGVmaW5lIGlkZV9pbml0X2RlZmF1bHRfaXJxKGJhc2UpCSgwKQorI2Vsc2UKKyNkZWZpbmUgaWRlX2luaXRfZGVmYXVsdF9pcnEoYmFzZSkJaWRlX2RlZmF1bHRfaXJxKGJhc2UpCisjZW5kaWYKKworLyogTUlQUyBwb3J0IGFuZCBtZW1vcnktbWFwcGVkIEkvTyBzdHJpbmcgb3BlcmF0aW9ucy4gICovCisKKyNkZWZpbmUgX19pZGVfaW5zdwlpbnN3CisjZGVmaW5lIF9faWRlX2luc2wJaW5zbAorI2RlZmluZSBfX2lkZV9vdXRzdwlvdXRzdworI2RlZmluZSBfX2lkZV9vdXRzbAlvdXRzbAorCisjZGVmaW5lIF9faWRlX21tX2luc3cJcmVhZHN3CisjZGVmaW5lIF9faWRlX21tX2luc2wJcmVhZHNsCisjZGVmaW5lIF9faWRlX21tX291dHN3CXdyaXRlc3cKKyNkZWZpbmUgX19pZGVfbW1fb3V0c2wJd3JpdGVzbAorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX19BU01fTUFDSF9HRU5FUklDX0lERV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtZ2VuZXJpYy9pcnEuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1nZW5lcmljL2lycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwMGUxMGYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtZ2VuZXJpYy9pcnEuaApAQCAtMCwwICsxLDEzIEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzIGJ5IFJhbGYgQmFlY2hsZQorICovCisjaWZuZGVmIF9fQVNNX01BQ0hfR0VORVJJQ19JUlFfSAorI2RlZmluZSBfX0FTTV9NQUNIX0dFTkVSSUNfSVJRX0gKKworI2RlZmluZSBOUl9JUlFTCTEyOAorCisjZW5kaWYgLyogX19BU01fTUFDSF9HRU5FUklDX0lSUV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtZ2VuZXJpYy9tYW5nbGUtcG9ydC5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWdlbmVyaWMvbWFuZ2xlLXBvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTk4ZDgzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWdlbmVyaWMvbWFuZ2xlLXBvcnQuaApAQCAtMCwwICsxLDE2IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0IFJhbGYgQmFlY2hsZQorICovCisjaWZuZGVmIF9fQVNNX01BQ0hfR0VORVJJQ19NQU5HTEVfUE9SVF9ICisjZGVmaW5lIF9fQVNNX01BQ0hfR0VORVJJQ19NQU5HTEVfUE9SVF9ICisKKyNkZWZpbmUgX19zd2l6emxlX2FkZHJfYihwb3J0KQkocG9ydCkKKyNkZWZpbmUgX19zd2l6emxlX2FkZHJfdyhwb3J0KQkocG9ydCkKKyNkZWZpbmUgX19zd2l6emxlX2FkZHJfbChwb3J0KQkocG9ydCkKKyNkZWZpbmUgX19zd2l6emxlX2FkZHJfcShwb3J0KQkocG9ydCkKKworI2VuZGlmIC8qIF9fQVNNX01BQ0hfR0VORVJJQ19NQU5HTEVfUE9SVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtZ2VuZXJpYy9tYzE0NjgxOHJ0Yy5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWdlbmVyaWMvbWMxNDY4MThydGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGMyZTZmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWdlbmVyaWMvbWMxNDY4MThydGMuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4LCAyMDAxLCAwMyBieSBSYWxmIEJhZWNobGUKKyAqCisgKiBSVEMgcm91dGluZXMgZm9yIFBDIHN0eWxlIGF0dGFjaGVkIERhbGxhcyBjaGlwLgorICovCisjaWZuZGVmIF9fQVNNX01BQ0hfR0VORVJJQ19NQzE0NjgxOFJUQ19ICisjZGVmaW5lIF9fQVNNX01BQ0hfR0VORVJJQ19NQzE0NjgxOFJUQ19ICisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2RlZmluZSBSVENfUE9SVCh4KQkoMHg3MCArICh4KSkKKyNkZWZpbmUgUlRDX0lSUQkJOAorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgQ01PU19SRUFEKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlvdXRiX3AoYWRkciwgUlRDX1BPUlQoMCkpOworCXJldHVybiBpbmJfcChSVENfUE9SVCgxKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBDTU9TX1dSSVRFKHVuc2lnbmVkIGNoYXIgZGF0YSwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCW91dGJfcChhZGRyLCBSVENfUE9SVCgwKSk7CisJb3V0Yl9wKGRhdGEsIFJUQ19QT1JUKDEpKTsKK30KKworI2RlZmluZSBSVENfQUxXQVlTX0JDRAkxCisKKyNpZm5kZWYgbWMxNDY4MThfZGVjb2RlX3llYXIKKyNkZWZpbmUgbWMxNDY4MThfZGVjb2RlX3llYXIoeWVhcikgKCh5ZWFyKSA8IDcwID8gKHllYXIpICsgMjAwMCA6ICh5ZWFyKSArIDE5NzApCisjZW5kaWYKKworI2VuZGlmIC8qIF9fQVNNX01BQ0hfR0VORVJJQ19NQzE0NjgxOFJUQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtZ2VuZXJpYy9wYXJhbS5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWdlbmVyaWMvcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGQxMmY5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWdlbmVyaWMvcGFyYW0uaApAQCAtMCwwICsxLDEzIEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzIGJ5IFJhbGYgQmFlY2hsZQorICovCisjaWZuZGVmIF9fQVNNX01BQ0hfR0VORVJJQ19QQVJBTV9ICisjZGVmaW5lIF9fQVNNX01BQ0hfR0VORVJJQ19QQVJBTV9ICisKKyNkZWZpbmUgSFoJCTEwMDAJCS8qIEludGVybmFsIGtlcm5lbCB0aW1lciBmcmVxdWVuY3kgKi8KKworI2VuZGlmIC8qIF9fQVNNX01BQ0hfR0VORVJJQ19QQVJBTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtZ2VuZXJpYy9zcGFjZXMuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1nZW5lcmljL3NwYWNlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzYzBhODEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtZ2VuZXJpYy9zcGFjZXMuaApAQCAtMCwwICsxLDcyIEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk0IC0gMTk5OSwgMjAwMCwgMDMsIDA0IFJhbGYgQmFlY2hsZQorICogQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAyICBNYWNpZWogVy4gUm96eWNraQorICogQ29weXJpZ2h0IChDKSAxOTkwLCAxOTk5LCAyMDAwIFNpbGljb24gR3JhcGhpY3MsIEluYy4KKyAqLworI2lmbmRlZiBfQVNNX01BQ0hfR0VORVJJQ19TUEFDRVNfSAorI2RlZmluZSBfQVNNX01BQ0hfR0VORVJJQ19TUEFDRVNfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpZmRlZiBDT05GSUdfTUlQUzMyCisKKyNkZWZpbmUgQ0FDX0JBU0UJCTB4ODAwMDAwMDAKKyNkZWZpbmUgSU9fQkFTRQkJCTB4YTAwMDAwMDAKKyNkZWZpbmUgVU5DQUNfQkFTRQkJMHhhMDAwMDAwMAorI2RlZmluZSBNQVBfQkFTRQkJMHhjMDAwMDAwMAorCisvKgorICogVGhpcyBoYW5kbGVzIHRoZSBtZW1vcnkgbWFwLgorICogV2UgaGFuZGxlIHBhZ2VzIGF0IEtTRUcwIGZvciBrZXJuZWxzIHdpdGggMzIgYml0IGFkZHJlc3Mgc3BhY2UuCisgKi8KKyNkZWZpbmUgUEFHRV9PRkZTRVQJCTB4ODAwMDAwMDBVTAorCisvKgorICogTWVtb3J5IGFib3ZlIHRoaXMgcGh5c2ljYWwgYWRkcmVzcyB3aWxsIGJlIGNvbnNpZGVyZWQgaGlnaG1lbS4KKyAqLworI2lmbmRlZiBISUdITUVNX1NUQVJUCisjZGVmaW5lIEhJR0hNRU1fU1RBUlQJCTB4MjAwMDAwMDBVTAorI2VuZGlmCisKKyNlbmRpZiAvKiBDT05GSUdfTUlQUzMyICovCisKKyNpZmRlZiBDT05GSUdfTUlQUzY0CisKKy8qCisgKiBUaGlzIGhhbmRsZXMgdGhlIG1lbW9yeSBtYXAuCisgKi8KKyNpZmRlZiBDT05GSUdfRE1BX05PTkNPSEVSRU5UCisjZGVmaW5lIFBBR0VfT0ZGU0VUCTB4OTgwMDAwMDAwMDAwMDAwMFVMCisjZWxzZQorI2RlZmluZSBQQUdFX09GRlNFVAkweGE4MDAwMDAwMDAwMDAwMDBVTAorI2VuZGlmCisKKy8qCisgKiBNZW1vcnkgYWJvdmUgdGhpcyBwaHlzaWNhbCBhZGRyZXNzIHdpbGwgYmUgY29uc2lkZXJlZCBoaWdobWVtLgorICogRml4bWU6IDU5IGJpdHMgaXMgYSBmaWN0aXZlIG51bWJlciBhbmQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgcHJvY2Vzc29ycworICogaW4gdGhlIGRpc3RhbnQgZnV0dXJlLiAgTm9ib2R5IHdpbGwgY2FyZSBmb3IgYSBmZXcgeWVhcnMgOi0pCisgKi8KKyNpZm5kZWYgSElHSE1FTV9TVEFSVAorI2RlZmluZSBISUdITUVNX1NUQVJUCQkoMVVMIDw8IDU5VUwpCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19ETUFfTk9OQ09IRVJFTlQKKyNkZWZpbmUgQ0FDX0JBU0UJCTB4OTgwMDAwMDAwMDAwMDAwMAorI2Vsc2UKKyNkZWZpbmUgQ0FDX0JBU0UJCTB4YTgwMDAwMDAwMDAwMDAwMAorI2VuZGlmCisjZGVmaW5lIElPX0JBU0UJCQkweDkwMDAwMDAwMDAwMDAwMDAKKyNkZWZpbmUgVU5DQUNfQkFTRQkJMHg5MDAwMDAwMDAwMDAwMDAwCisjZGVmaW5lIE1BUF9CQVNFCQkweGMwMDAwMDAwMDAwMDAwMDAKKworI2RlZmluZSBUT19QSFlTKHgpCQkoICAgICAgICAgICAgICgoeCkgJiBUT19QSFlTX01BU0spKQorI2RlZmluZSBUT19DQUMoeCkJCShDQUNfQkFTRSAgIHwgKCh4KSAmIFRPX1BIWVNfTUFTSykpCisjZGVmaW5lIFRPX1VOQ0FDKHgpCQkoVU5DQUNfQkFTRSB8ICgoeCkgJiBUT19QSFlTX01BU0spKQorCisjZW5kaWYgLyogQ09ORklHX01JUFM2NCAqLworCisjZW5kaWYgLyogX19BU01fTUFDSF9HRU5FUklDX1NQQUNFU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtZ2VuZXJpYy90aW1leC5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWdlbmVyaWMvdGltZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmEyZTVmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWdlbmVyaWMvdGltZXguaApAQCAtMCwwICsxLDIyIEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzIGJ5IFJhbGYgQmFlY2hsZQorICovCisjaWZuZGVmIF9fQVNNX01BQ0hfR0VORVJJQ19USU1FWF9ICisjZGVmaW5lIF9fQVNNX01BQ0hfR0VORVJJQ19USU1FWF9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworLyoKKyAqIExhc3QgcmVtYWluaW5nIHVzZXIgb2YgdGhlIGk4MjU0IFBJQywgd2lsbCBiZSBjb252ZXJ0ZWQsIHRvbyAuLi4KKyAqLworI2lmZGVmIENPTkZJR19TTklfUk0yMDBfUENJCisjZGVmaW5lIENMT0NLX1RJQ0tfUkFURQkJMTE5MzE4MgorI2Vsc2UKKyNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFCQk1MDAwMDAKKyNlbmRpZgorCisjZW5kaWYgLyogX19BU01fTUFDSF9HRU5FUklDX1RJTUVYX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1nZW5lcmljL3RvcG9sb2d5LmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtZ2VuZXJpYy90b3BvbG9neS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0MjhmMzMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtZ2VuZXJpYy90b3BvbG9neS5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy90b3BvbG9neS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWlwMjIvY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtaXAyMi9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzg4OTZkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWlwMjIvY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKQEAgLTAsMCArMSwyOSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMyBSYWxmIEJhZWNobGUKKyAqLworI2lmbmRlZiBfX0FTTV9NQUNIX0lQMjJfQ1BVX0ZFQVRVUkVfT1ZFUlJJREVTX0gKKyNkZWZpbmUgX19BU01fTUFDSF9JUDIyX0NQVV9GRUFUVVJFX09WRVJSSURFU19ICisKKy8qCisgKiBJUDIyIHdpdGggYSB2YXJpZXR5IG9mIHByb2Nlc3NvcnMgc28gd2UgY2FuJ3QgdXNlIGRlZmF1bHRzIGZvciBldmVyeXRoaW5nLgorICovCisjZGVmaW5lIGNwdV9oYXNfbWlwczE2CQkwCisjZGVmaW5lIGNwdV9oYXNfZGl2ZWMJCTAKKyNkZWZpbmUgY3B1X2hhc19jYWNoZV9jZGV4X3AJMQorI2RlZmluZSBjcHVfaGFzX3ByZWZldGNoCTAKKyNkZWZpbmUgY3B1X2hhc19tY2hlY2sJCTAKKyNkZWZpbmUgY3B1X2hhc19lanRhZwkJMAorCisjZGVmaW5lIGNwdV9oYXNfbGxzYwkJMQorI2RlZmluZSBjcHVfaGFzX3Z0YWdfaWNhY2hlCTAJCS8qIE5lZWRzIHRvIGNoYW5nZSBmb3IgUjgwMDAgKi8KKyNkZWZpbmUgY3B1X2hhc19kY19hbGlhc2VzCShQQUdFX1NJWkUgPCAweDQwMDApCisjZGVmaW5lIGNwdV9oYXNfaWNfZmlsbHNfZl9kYwkwCisKKyNkZWZpbmUgY3B1X2hhc19ub2ZwdWV4CQkwCisjZGVmaW5lIGNwdV9oYXNfNjRiaXRzCQkxCisKKyNlbmRpZiAvKiBfX0FTTV9NQUNIX0lQMjJfQ1BVX0ZFQVRVUkVfT1ZFUlJJREVTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1pcDIyL2RzMTI4Ni5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWlwMjIvZHMxMjg2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE5ZjFlYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1pcDIyL2RzMTI4Ni5oCkBAIC0wLDAgKzEsMTggQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTgsIDIwMDEsIDAzIGJ5IFJhbGYgQmFlY2hsZQorICoKKyAqIFJUQyByb3V0aW5lcyBmb3IgUEMgc3R5bGUgYXR0YWNoZWQgRGFsbGFzIGNoaXAuCisgKi8KKyNpZm5kZWYgX19BU01fTUFDSF9JUDIyX0RTMTI4Nl9ICisjZGVmaW5lIF9fQVNNX01BQ0hfSVAyMl9EUzEyODZfSAorCisjaW5jbHVkZSA8YXNtL3NnaS9ocGMzLmg+CisKKyNkZWZpbmUgcnRjX3JlYWQocmVnKQkJKGhwYzNjMC0+cnRjcmVnc1socmVnKV0gJiAweGZmKQorI2RlZmluZSBydGNfd3JpdGUoZGF0YSwgcmVnKQlkbyB7IGhwYzNjMC0+cnRjcmVnc1socmVnKV0gPSAoZGF0YSk7IH0gd2hpbGUoMCkKKworI2VuZGlmIC8qIF9fQVNNX01BQ0hfSVAyMl9EUzEyODZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWlwMjIvc3BhY2VzLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtaXAyMi9zcGFjZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGQ0MmZjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWlwMjIvc3BhY2VzLmgKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NCAtIDE5OTksIDIwMDAsIDAzLCAwNCBSYWxmIEJhZWNobGUKKyAqIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMiAgTWFjaWVqIFcuIFJvenlja2kKKyAqIENvcHlyaWdodCAoQykgMTk5MCwgMTk5OSwgMjAwMCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCisgKi8KKyNpZm5kZWYgX0FTTV9NQUNIX0lQMjJfU1BBQ0VTX0gKKyNkZWZpbmUgX0FTTV9NQUNIX0lQMjJfU1BBQ0VTX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjaWZkZWYgQ09ORklHX01JUFMzMgorCisjZGVmaW5lIENBQ19CQVNFCQkweDgwMDAwMDAwCisjZGVmaW5lIElPX0JBU0UJCQkweGEwMDAwMDAwCisjZGVmaW5lIFVOQ0FDX0JBU0UJCTB4YTAwMDAwMDAKKyNkZWZpbmUgTUFQX0JBU0UJCTB4YzAwMDAwMDAKKworLyoKKyAqIFRoaXMgaGFuZGxlcyB0aGUgbWVtb3J5IG1hcC4KKyAqIFdlIGhhbmRsZSBwYWdlcyBhdCBLU0VHMCBmb3Iga2VybmVscyB3aXRoIDMyIGJpdCBhZGRyZXNzIHNwYWNlLgorICovCisjZGVmaW5lIFBBR0VfT0ZGU0VUCQkweDgwMDAwMDAwVUwKKworLyoKKyAqIE1lbW9yeSBhYm92ZSB0aGlzIHBoeXNpY2FsIGFkZHJlc3Mgd2lsbCBiZSBjb25zaWRlcmVkIGhpZ2htZW0uCisgKi8KKyNpZm5kZWYgSElHSE1FTV9TVEFSVAorI2RlZmluZSBISUdITUVNX1NUQVJUCQkweDIwMDAwMDAwVUwKKyNlbmRpZgorCisjZW5kaWYgLyogQ09ORklHX01JUFMzMiAqLworCisjaWZkZWYgQ09ORklHX01JUFM2NAorI2RlZmluZSBQQUdFX09GRlNFVAkJMHhmZmZmZmZmZjgwMDAwMDAwVUwKKworI2lmbmRlZiBISUdITUVNX1NUQVJUCisjZGVmaW5lIEhJR0hNRU1fU1RBUlQJCSgxVUwgPDwgNTlVTCkKKyNlbmRpZgorCisjZGVmaW5lIENBQ19CQVNFCQkweGZmZmZmZmZmODAwMDAwMDAKKyNkZWZpbmUgSU9fQkFTRQkJCTB4ZmZmZmZmZmZhMDAwMDAwMAorI2RlZmluZSBVTkNBQ19CQVNFCQkweGZmZmZmZmZmYTAwMDAwMDAKKyNkZWZpbmUgTUFQX0JBU0UJCTB4ZmZmZmZmZmZjMDAwMDAwMAorCisjZGVmaW5lIFRPX1BIWVMoeCkJCSggICAgICAgICAgICAgKCh4KSAmIFRPX1BIWVNfTUFTSykpCisjZGVmaW5lIFRPX0NBQyh4KQkJKENBQ19CQVNFICAgfCAoKHgpICYgVE9fUEhZU19NQVNLKSkKKyNkZWZpbmUgVE9fVU5DQUMoeCkJCShVTkNBQ19CQVNFIHwgKCh4KSAmIFRPX1BIWVNfTUFTSykpCisKKyNlbmRpZiAvKiBDT05GSUdfTUlQUzY0ICovCisKKyNlbmRpZiAvKiBfX0FTTV9NQUNIX0lQMjJfU1BBQ0VTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1pcDI3L2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWlwMjcvY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU5NmQ3MwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1pcDI3L2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgUmFsZiBCYWVjaGxlCisgKi8KKyNpZm5kZWYgX19BU01fTUFDSF9JUDI3X0NQVV9GRUFUVVJFX09WRVJSSURFU19ICisjZGVmaW5lIF9fQVNNX01BQ0hfSVAyN19DUFVfRkVBVFVSRV9PVkVSUklERVNfSAorCisvKgorICogSVAyNyBvbmx5IGNvbWVzIHdpdGggUjEwMDAwIGZhbWlseSBwcm9jZXNzb3JzIGFsbCB1c2luZyB0aGUgc2FtZSBjb25maWcKKyAqLworI2RlZmluZSBjcHVfaGFzX3dhdGNoCQkxCisjZGVmaW5lIGNwdV9oYXNfbWlwczE2CQkwCisjZGVmaW5lIGNwdV9oYXNfZGl2ZWMJCTAKKyNkZWZpbmUgY3B1X2hhc192Y2UJCTAKKyNkZWZpbmUgY3B1X2hhc19jYWNoZV9jZGV4X3AJMAorI2RlZmluZSBjcHVfaGFzX2NhY2hlX2NkZXhfcwkwCisjZGVmaW5lIGNwdV9oYXNfcHJlZmV0Y2gJMQorI2RlZmluZSBjcHVfaGFzX21jaGVjawkJMAorI2RlZmluZSBjcHVfaGFzX2VqdGFnCQkwCisKKyNkZWZpbmUgY3B1X2hhc19sbHNjCQkxCisjZGVmaW5lIGNwdV9oYXNfdnRhZ19pY2FjaGUJMAorI2RlZmluZSBjcHVfaGFzX2RjX2FsaWFzZXMJMAorI2RlZmluZSBjcHVfaGFzX2ljX2ZpbGxzX2ZfZGMJMAorI2RlZmluZSBjcHVfaWNhY2hlX3Nub29wc19yZW1vdGVfc3RvcmUJMQorCisjZGVmaW5lIGNwdV9oYXNfbm9mcHVleAkJMAorI2RlZmluZSBjcHVfaGFzXzY0Yml0cwkJMQorCisjZGVmaW5lIGNwdV9oYXNfc3Vic2V0X3BjYWNoZXMJMQorCisjZGVmaW5lIGNwdV9kY2FjaGVfbGluZV9zaXplKCkJMzIKKyNkZWZpbmUgY3B1X2ljYWNoZV9saW5lX3NpemUoKQk2NAorI2RlZmluZSBjcHVfc2NhY2hlX2xpbmVfc2l6ZSgpCTEyOAorCisjZW5kaWYgLyogX19BU01fTUFDSF9JUDI3X0NQVV9GRUFUVVJFX09WRVJSSURFU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtaXAyNy9pcnEuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1pcDI3L2lycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwNjIxM2MKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtaXAyNy9pcnEuaApAQCAtMCwwICsxLDIyIEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAwMSwgMDIsIDAzIGJ5IFJhbGYgQmFlY2hsZQorICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwIFNpbGljb24gR3JhcGhpY3MsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMSBLYW5vaiBTYXJjYXIKKyAqLworI2lmbmRlZiBfX0FTTV9NQUNIX0lQMjdfSVJRX0gKKyNkZWZpbmUgX19BU01fTUFDSF9JUDI3X0lSUV9ICisKKyNpbmNsdWRlIDxhc20vc24vYXJjaC5oPgorCisvKgorICogQSBoYXJkd2lyZWQgaW50ZXJydXB0IG51bWJlciBpcyBjb21wbGV0bHkgc3R1cGlkIGZvciB0aGlzIHN5c3RlbSAtIGEKKyAqIGxhcmdlIGNvbmZpZ3VyYXRpb24gbWlnaHQgaGF2ZSB0aG91c2FuZHMgaWYgbm90IHRlbnRob3VzYW5kcyBvZgorICogaW50ZXJydXB0cy4KKyAqLworI2RlZmluZSBOUl9JUlFTIDI1NgorCisjZW5kaWYgLyogX19BU01fTUFDSF9JUDI3X0lSUV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtaXAyNy9tYW5nbGUtcG9ydC5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWlwMjcvbWFuZ2xlLXBvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzZjNDQ4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWlwMjcvbWFuZ2xlLXBvcnQuaApAQCAtMCwwICsxLDE2IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0IFJhbGYgQmFlY2hsZQorICovCisjaWZuZGVmIF9fQVNNX01BQ0hfSVAyN19NQU5HTEVfUE9SVF9ICisjZGVmaW5lIF9fQVNNX01BQ0hfSVAyN19NQU5HTEVfUE9SVF9ICisKKyNkZWZpbmUgX19zd2l6emxlX2FkZHJfYihwb3J0KQkocG9ydCkKKyNkZWZpbmUgX19zd2l6emxlX2FkZHJfdyhwb3J0KQkoKHBvcnQpIF4gMikKKyNkZWZpbmUgX19zd2l6emxlX2FkZHJfbChwb3J0KQkocG9ydCkKKyNkZWZpbmUgX19zd2l6emxlX2FkZHJfcShwb3J0KQkocG9ydCkKKworI2VuZGlmIC8qIF9fQVNNX01BQ0hfSVAyN19NQU5HTEVfUE9SVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtaXAyNy9tbXpvbmUuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1pcDI3L21tem9uZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzZjU2NjMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtaXAyNy9tbXpvbmUuaApAQCAtMCwwICsxLDM2IEBACisjaWZuZGVmIF9BU01fTUFDSF9NTVpPTkVfSAorI2RlZmluZSBfQVNNX01BQ0hfTU1aT05FX0gKKworI2luY2x1ZGUgPGFzbS9zbi9hZGRycy5oPgorI2luY2x1ZGUgPGFzbS9zbi9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL3NuL2h1Yi5oPgorCisjZGVmaW5lIHBhX3RvX25pZChhZGRyKQkJTkFTSURfVE9fQ09NUEFDVF9OT0RFSUQoTkFTSURfR0VUKGFkZHIpKQorCisjZGVmaW5lIExFVkVMU19QRVJfU0xJQ0UgICAgICAgIDEyOAorCitzdHJ1Y3Qgc2xpY2VfZGF0YSB7CisJdW5zaWduZWQgbG9uZyBpcnFfYWxsb2NfbWFza1syXTsKKwl1bnNpZ25lZCBsb25nIGlycV9lbmFibGVfbWFza1syXTsKKwlpbnQgbGV2ZWxfdG9faXJxW0xFVkVMU19QRVJfU0xJQ0VdOworfTsKKworc3RydWN0IGh1Yl9kYXRhIHsKKwlrZXJuX3ZhcnNfdAlrZXJuX3ZhcnM7CisJREVDTEFSRV9CSVRNQVAoaF9iaWd3aW5fdXNlZCwgSFVCX05VTV9CSUdfV0lORE9XKTsKKwljcHVtYXNrX3QJaF9jcHVzOworCXVuc2lnbmVkIGxvbmcgc2xpY2VfbWFwOworCXN0cnVjdCBzbGljZV9kYXRhIHNsaWNlWzJdOworfTsKKworc3RydWN0IG5vZGVfZGF0YSB7CisJc3RydWN0IHBnbGlzdF9kYXRhIHBnbGlzdDsKKwlzdHJ1Y3QgaHViX2RhdGEgaHViOworfTsKKworZXh0ZXJuIHN0cnVjdCBub2RlX2RhdGEgKl9fbm9kZV9kYXRhW107CisKKyNkZWZpbmUgTk9ERV9EQVRBKG4pCQkoJl9fbm9kZV9kYXRhWyhuKV0tPnBnbGlzdCkKKyNkZWZpbmUgaHViX2RhdGEobikJCSgmX19ub2RlX2RhdGFbKG4pXS0+aHViKQorCisjZW5kaWYgLyogX0FTTV9NQUNIX01NWk9ORV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtaXAyNy9zcGFjZXMuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1pcDI3L3NwYWNlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzYjNmZTMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtaXAyNy9zcGFjZXMuaApAQCAtMCwwICsxLDM0IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk2LCA5OSBSYWxmIEJhZWNobGUKKyAqIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMiAgTWFjaWVqIFcuIFJvenlja2kKKyAqIENvcHlyaWdodCAoQykgMTk5MCwgMTk5OSBieSBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCisgKi8KKyNpZm5kZWYgX0FTTV9NQUNIX0lQMjdfU1BBQ0VTX0gKKyNkZWZpbmUgX0FTTV9NQUNIX0lQMjdfU1BBQ0VTX0gKKworLyoKKyAqIElQMjcgdXNlcyB0aGUgUjEwMDAwJ3MgdW5jYWNoZWQgYXR0cmlidXRlIGZlYXR1cmUuICBBdHRyaWJ1dGUgMyBzZWxlY3RzCisgKiB1bmNhY2hlZCBtZW1vcnkgYWRkcmVzc2luZy4KKyAqLworI2RlZmluZSBDQUNfQkFTRQkJMHhhODAwMDAwMDAwMDAwMDAwCisKKyNkZWZpbmUgSFNQRUNfQkFTRQkJMHg5MDAwMDAwMDAwMDAwMDAwCisjZGVmaW5lIElPX0JBU0UJCQkweDkyMDAwMDAwMDAwMDAwMDAKKyNkZWZpbmUgTVNQRUNfQkFTRQkJMHg5NDAwMDAwMDAwMDAwMDAwCisjZGVmaW5lIFVOQ0FDX0JBU0UJCTB4OTYwMDAwMDAwMDAwMDAwMAorCisjZGVmaW5lIFRPX1BIWVMoeCkJCSggICAgICAgICAgICAgKCh4KSAmIFRPX1BIWVNfTUFTSykpCisjZGVmaW5lIFRPX0NBQyh4KQkJKENBQ19CQVNFICAgfCAoKHgpICYgVE9fUEhZU19NQVNLKSkKKyNkZWZpbmUgVE9fVU5DQUMoeCkJCShVTkNBQ19CQVNFIHwgKCh4KSAmIFRPX1BIWVNfTUFTSykpCisjZGVmaW5lIFRPX01TUEVDKHgpCQkoTVNQRUNfQkFTRSB8ICgoeCkgJiBUT19QSFlTX01BU0spKQorI2RlZmluZSBUT19IU1BFQyh4KQkJKEhTUEVDX0JBU0UgfCAoKHgpICYgVE9fUEhZU19NQVNLKSkKKworI2RlZmluZSBQQUdFX09GRlNFVAkJQ0FDX0JBU0UKKworI2RlZmluZSBISUdITUVNX1NUQVJUCQkofjBVTCkKKworI2VuZGlmIC8qIF9BU01fTUFDSF9JUDI3X1NQQUNFU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtaXAyNy90b3BvbG9neS5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWlwMjcvdG9wb2xvZ3kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzBhODEyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWlwMjcvdG9wb2xvZ3kuaApAQCAtMCwwICsxLDM4IEBACisjaWZuZGVmIF9BU01fTUFDSF9UT1BPTE9HWV9ICisjZGVmaW5lIF9BU01fTUFDSF9UT1BPTE9HWV9ICTEKKworI2luY2x1ZGUgPGFzbS9zbi9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL3NuL2h1Yi5oPgorI2luY2x1ZGUgPGFzbS9tbXpvbmUuaD4KKworI2RlZmluZSBjcHVfdG9fbm9kZShjcHUpCShjcHVfZGF0YVsoY3B1KV0ucF9ub2RlaWQpCisjZGVmaW5lIHBhcmVudF9ub2RlKG5vZGUpCShub2RlKQorI2RlZmluZSBub2RlX3RvX2NwdW1hc2sobm9kZSkJKGh1Yl9kYXRhKG5vZGUpLT5oX2NwdXMpCisjZGVmaW5lIG5vZGVfdG9fZmlyc3RfY3B1KG5vZGUpCShmaXJzdF9jcHUobm9kZV90b19jcHVtYXNrKG5vZGUpKSkKKyNkZWZpbmUgcGNpYnVzX3RvX2NwdW1hc2soYnVzKQkoY3B1X29ubGluZV9tYXApCisKK2V4dGVybiB1bnNpZ25lZCBjaGFyIF9fbm9kZV9kaXN0YW5jZXNbTUFYX0NPTVBBQ1RfTk9ERVNdW01BWF9DT01QQUNUX05PREVTXTsKKworI2RlZmluZSBub2RlX2Rpc3RhbmNlKGZyb20sIHRvKQkoX19ub2RlX2Rpc3RhbmNlc1soZnJvbSldWyh0byldKQorCisvKiBzY2hlZF9kb21haW5zIFNEX05PREVfSU5JVCBmb3IgU0dJIElQMjcgbWFjaGluZXMgKi8KKyNkZWZpbmUgU0RfTk9ERV9JTklUIChzdHJ1Y3Qgc2NoZWRfZG9tYWluKSB7CQlcCisJLnNwYW4JCQk9IENQVV9NQVNLX05PTkUsCVwKKwkucGFyZW50CQkJPSBOVUxMLAkJCVwKKwkuZ3JvdXBzCQkJPSBOVUxMLAkJCVwKKwkubWluX2ludGVydmFsCQk9IDgsCQkJXAorCS5tYXhfaW50ZXJ2YWwJCT0gMzIsCQkJXAorCS5idXN5X2ZhY3RvcgkJPSAzMiwJCQlcCisJLmltYmFsYW5jZV9wY3QJCT0gMTI1LAkJCVwKKwkuY2FjaGVfaG90X3RpbWUJCT0gKDEwKjEwMDApLAkJXAorCS5jYWNoZV9uaWNlX3RyaWVzCT0gMSwJCQlcCisJLnBlcl9jcHVfZ2FpbgkJPSAxMDAsCQkJXAorCS5mbGFncwkJCT0gU0RfTE9BRF9CQUxBTkNFCVwKKwkJCQl8IFNEX0JBTEFOQ0VfRVhFQwlcCisJCQkJfCBTRF9XQUtFX0JBTEFOQ0UsCVwKKwkubGFzdF9iYWxhbmNlCQk9IGppZmZpZXMsCQlcCisJLmJhbGFuY2VfaW50ZXJ2YWwJPSAxLAkJCVwKKwkubnJfYmFsYW5jZV9mYWlsZWQJPSAwLAkJCVwKK30KKworI2VuZGlmIC8qIF9BU01fTUFDSF9UT1BPTE9HWV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtaXAzMi9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1pcDMyL2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5MzIyMzcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtaXAzMi9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaApAQCAtMCwwICsxLDQxIEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IElseWEgQS4gVm9seW5ldHMtRXZlbmJha2gKKyAqIENvcHlyaWdodCAoQykgMjAwNSBSYWxmIEJhZWNobGUgKHJhbGZAbGludXgtbWlwcy5vcmcpCisgKi8KKyNpZm5kZWYgX19BU01fTUFDSF9JUDMyX0NQVV9GRUFUVVJFX09WRVJSSURFU19ICisjZGVmaW5lIF9fQVNNX01BQ0hfSVAzMl9DUFVfRkVBVFVSRV9PVkVSUklERVNfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKy8qCisgKiBSNTAwMCBoYXMgYW4gaW50ZXJlc3RpbmcgInJlc3RyaWN0aW9uIjogIGxsKGQpL3NjKGQpCisgKiBpbnN0cnVjdGlvbnMgdG8gWEtQSFlTIHJlZ2lvbiBzaW1wbHkgZG8gdW5jYWNoZWQgYnVzCisgKiByZXF1ZXN0cy4gVGhpcyBicmVha3MgYWxsIHRoZSBhdG9taWMgYml0b3BzIGZ1bmN0aW9ucy4KKyAqIHNvLCBmb3IgNjRiaXQgSVAzMiBrZXJuZWwgd2UganVzdCBkb24ndCB1c2UgbGwvc2MuCisgKiBUaGlzIGRvZXMgbm90IGFmZmVjdCBsdXNlcmxhbmQuCisgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfUjUwMDApICYmIGRlZmluZWQoQ09ORklHX01JUFM2NCkKKyNkZWZpbmUgY3B1X2hhc19sbHNjCQkwCisjZWxzZQorI2RlZmluZSBjcHVfaGFzX2xsc2MJCTEKKyNlbmRpZgorCisvKiBTZXR0aW5ncyB3aGljaCBhcmUgY29tbW9uIGZvciBhbGwgaXAzMiBDUFVzICovCisjZGVmaW5lIGNwdV9oYXNfdGxiCQkxCisjZGVmaW5lIGNwdV9oYXNfNGtleAkJMQorI2RlZmluZSBjcHVfaGFzX2ZwdQkJMQorI2RlZmluZSBjcHVfaGFzXzMyZnByCQkxCisjZGVmaW5lIGNwdV9oYXNfY291bnRlcgkJMQorI2RlZmluZSBjcHVfaGFzX21pcHMxNgkJMAorI2RlZmluZSBjcHVfaGFzX3ZjZQkJMAorI2RlZmluZSBjcHVfaGFzX2NhY2hlX2NkZXhfcwkwCisjZGVmaW5lIGNwdV9oYXNfbWNoZWNrCQkwCisjZGVmaW5lIGNwdV9oYXNfZWp0YWcJCTAKKyNkZWZpbmUgY3B1X2hhc192dGFnX2ljYWNoZQkwCisjZGVmaW5lIGNwdV9oYXNfaWNfZmlsbHNfZl9kYwkwCisKKyNlbmRpZiAvKiBfX0FTTV9NQUNIX0lQMzJfQ1BVX0ZFQVRVUkVfT1ZFUlJJREVTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1pcDMyL21hbmdsZS1wb3J0LmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtaXAzMi9tYW5nbGUtcG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlMjViNTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtaXAzMi9tYW5nbGUtcG9ydC5oCkBAIC0wLDAgKzEsMTcgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgTGFkaXNsYXYgTWljaGwKKyAqIENvcHlyaWdodCAoQykgMjAwNCBSYWxmIEJhZWNobGUKKyAqLworI2lmbmRlZiBfX0FTTV9NQUNIX0lQMzJfTUFOR0xFX1BPUlRfSAorI2RlZmluZSBfX0FTTV9NQUNIX0lQMzJfTUFOR0xFX1BPUlRfSAorCisjZGVmaW5lIF9fc3dpenpsZV9hZGRyX2IocG9ydCkJKChwb3J0KSBeIDMpCisjZGVmaW5lIF9fc3dpenpsZV9hZGRyX3cocG9ydCkJKChwb3J0KSBeIDIpCisjZGVmaW5lIF9fc3dpenpsZV9hZGRyX2wocG9ydCkJKHBvcnQpCisjZGVmaW5lIF9fc3dpenpsZV9hZGRyX3EocG9ydCkJKHBvcnQpCisKKyNlbmRpZiAvKiBfX0FTTV9NQUNIX0lQMzJfTUFOR0xFX1BPUlRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWlwMzIvbWMxNDY4MThydGMuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1pcDMyL21jMTQ2ODE4cnRjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVkNzgwZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1pcDMyL21jMTQ2ODE4cnRjLmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCwgMjAwMSwgMDMgYnkgUmFsZiBCYWVjaGxlCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgSGFyYWxkIEtvZXJmZ2VuCisgKgorICogUlRDIHJvdXRpbmVzIGZvciBJUDMyIHN0eWxlIGF0dGFjaGVkIERhbGxhcyBjaGlwLgorICovCisjaWZuZGVmIF9fQVNNX01BQ0hfSVAzMl9NQzE0NjgxOFJUQ19ICisjZGVmaW5lIF9fQVNNX01BQ0hfSVAzMl9NQzE0NjgxOFJUQ19ICisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXAzMi9tYWNlLmg+CisKKyNkZWZpbmUgUlRDX1BPUlQoeCkJKDB4NzAgKyAoeCkpCisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIENNT1NfUkVBRCh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcmV0dXJuIG1hY2UtPmlzYS5ydGNbYWRkciA8PCA4XTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIENNT1NfV1JJVEUodW5zaWduZWQgY2hhciBkYXRhLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJbWFjZS0+aXNhLnJ0Y1thZGRyIDw8IDhdID0gZGF0YTsKK30KKworLyogRklYTUU6IERvIGl0IHJpZ2h0LiBGb3Igbm93IGp1c3QgYXNzdW1lIHRoYXQgbm9vbmUgbGl2ZXMgaW4gMjB0aCBjZW50dXJ5CisgKiBhbmQgbm8gTzIgdXNlciBpbiAyMnRoIGNlbnR1cnkgOy0pICovCisjZGVmaW5lIG1jMTQ2ODE4X2RlY29kZV95ZWFyKHllYXIpICgoeWVhcikgKyAyMDAwKQorCisjZGVmaW5lIFJUQ19BTFdBWVNfQkNECTAKKworI2VuZGlmIC8qIF9fQVNNX01BQ0hfSVAzMl9NQzE0NjgxOFJUQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtaXAzMi9zcGFjZXMuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1pcDMyL3NwYWNlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3ODM5ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtaXAzMi9zcGFjZXMuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk0IC0gMTk5OSwgMjAwMCwgMDMsIDA0LCAwNSBSYWxmIEJhZWNobGUgKHJhbGZAbGludXgtbWlwcy5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDIgIE1hY2llaiBXLiBSb3p5Y2tpCisgKiBDb3B5cmlnaHQgKEMpIDE5OTAsIDE5OTksIDIwMDAgU2lsaWNvbiBHcmFwaGljcywgSW5jLgorICovCisjaWZuZGVmIF9BU01fTUFDSF9JUDMyX1NQQUNFU19ICisjZGVmaW5lIF9BU01fTUFDSF9JUDMyX1NQQUNFU19ICisKKy8qCisgKiBNZW1vcnkgYWJvdmUgdGhpcyBwaHlzaWNhbCBhZGRyZXNzIHdpbGwgYmUgY29uc2lkZXJlZCBoaWdobWVtLgorICogRml4bWU6IDU5IGJpdHMgaXMgYSBmaWN0aXZlIG51bWJlciBhbmQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgcHJvY2Vzc29ycworICogaW4gdGhlIGRpc3RhbnQgZnV0dXJlLiAgTm9ib2R5IHdpbGwgY2FyZSBmb3IgYSBmZXcgeWVhcnMgOi0pCisgKi8KKyNpZm5kZWYgSElHSE1FTV9TVEFSVAorI2RlZmluZSBISUdITUVNX1NUQVJUCQkoMVVMIDw8IDU5VUwpCisjZW5kaWYKKworI2RlZmluZSBDQUNfQkFTRQkJMHg5ODAwMDAwMDAwMDAwMDAwCisjZGVmaW5lIElPX0JBU0UJCQkweDkwMDAwMDAwMDAwMDAwMDAKKyNkZWZpbmUgVU5DQUNfQkFTRQkJMHg5MDAwMDAwMDAwMDAwMDAwCisjZGVmaW5lIE1BUF9CQVNFCQkweGMwMDAwMDAwMDAwMDAwMDAKKworI2RlZmluZSBUT19QSFlTKHgpCQkoICAgICAgICAgICAgICgoeCkgJiBUT19QSFlTX01BU0spKQorI2RlZmluZSBUT19DQUMoeCkJCShDQUNfQkFTRSAgIHwgKCh4KSAmIFRPX1BIWVNfTUFTSykpCisjZGVmaW5lIFRPX1VOQ0FDKHgpCQkoVU5DQUNfQkFTRSB8ICgoeCkgJiBUT19QSFlTX01BU0spKQorCisvKgorICogVGhpcyBoYW5kbGVzIHRoZSBtZW1vcnkgbWFwLgorICovCisjZGVmaW5lIFBBR0VfT0ZGU0VUCQlDQUNfQkFTRQorCisjZW5kaWYgLyogX19BU01fTUFDSF9JUDMyX1NQQUNFU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtamEvY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtamEvY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E1N2U3ZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1qYS9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaApAQCAtMCwwICsxLDQ1IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0IFJhbGYgQmFlY2hsZQorICovCisjaWZuZGVmIF9fQVNNX01BQ0hfSkFfQ1BVX0ZFQVRVUkVfT1ZFUlJJREVTX0gKKyNkZWZpbmUgX19BU01fTUFDSF9KQV9DUFVfRkVBVFVSRV9PVkVSUklERVNfSAorCisvKgorICogTW9tZW50dW0gSmFndWFyIEFUWCBhbHdheXMgaGFzIHRoZSBSTTkwMDAgcHJvY2Vzc29yLgorICovCisjZGVmaW5lIGNwdV9oYXNfd2F0Y2gJCTEKKyNkZWZpbmUgY3B1X2hhc19taXBzMTYJCTAKKyNkZWZpbmUgY3B1X2hhc19kaXZlYwkJMAorI2RlZmluZSBjcHVfaGFzX3ZjZQkJMAorI2RlZmluZSBjcHVfaGFzX2NhY2hlX2NkZXhfcAkwCisjZGVmaW5lIGNwdV9oYXNfY2FjaGVfY2RleF9zCTAKKyNkZWZpbmUgY3B1X2hhc19wcmVmZXRjaAkxCisjZGVmaW5lIGNwdV9oYXNfbWNoZWNrCQkwCisjZGVmaW5lIGNwdV9oYXNfZWp0YWcJCTAKKworI2RlZmluZSBjcHVfaGFzX2xsc2MJCTEKKyNkZWZpbmUgY3B1X2hhc192dGFnX2ljYWNoZQkwCisjZGVmaW5lIGNwdV9oYXNfZGNfYWxpYXNlcwkwCisjZGVmaW5lIGNwdV9oYXNfaWNfZmlsbHNfZl9kYwkwCisjZGVmaW5lIGNwdV9pY2FjaGVfc25vb3BzX3JlbW90ZV9zdG9yZQkwCisKKyNkZWZpbmUgY3B1X2hhc19ub2ZwdWV4CQkwCisjZGVmaW5lIGNwdV9oYXNfNjRiaXRzCQkxCisKKyNkZWZpbmUgY3B1X2hhc19zdWJzZXRfcGNhY2hlcwkwCisKKyNkZWZpbmUgY3B1X2RjYWNoZV9saW5lX3NpemUoKQkzMgorI2RlZmluZSBjcHVfaWNhY2hlX2xpbmVfc2l6ZSgpCTMyCisjZGVmaW5lIGNwdV9zY2FjaGVfbGluZV9zaXplKCkJMzIKKworLyoKKyAqIE9uIHRoZSBSTTkwMDAgd2UgbmVlZCB0byBlbnN1cmUgdGhhdCBJLWNhY2hlIGxpbmVzIGJlaW5nIGZldGNoZXMgb25seQorICogY29udGFpbiB2YWxpZCBpbnN0cnVjdGlvbnMgYXJlIGZ1bm55IHRoaW5ncyB3aWxsIGhhcHBlbi4KKyAqLworI2RlZmluZSBQTEFUX1RSQU1QT0xJTkVfU1RVRkZfTElORQkzMlVMCisKKyNlbmRpZiAvKiBfX0FTTV9NQUNIX0pBX0NQVV9GRUFUVVJFX09WRVJSSURFU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtamEvc3BhY2VzLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtamEvc3BhY2VzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ2NmEwZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1qYS9zcGFjZXMuaApAQCAtMCwwICsxLDIwIEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk0IC0gMTk5OSwgMjAwMCwgMDMsIDA0IFJhbGYgQmFlY2hsZQorICogQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAyICBNYWNpZWogVy4gUm96eWNraQorICogQ29weXJpZ2h0IChDKSAxOTkwLCAxOTk5LCAyMDAwIFNpbGljb24gR3JhcGhpY3MsIEluYy4KKyAqLworI2lmbmRlZiBfX0FTTV9NQUNIX0pBX1NQQUNFU19ICisjZGVmaW5lIF9fQVNNX01BQ0hfSkFfU1BBQ0VTX0gKKworLyoKKyAqIE1lbW9yeSBhYm92ZSB0aGlzIHBoeXNpY2FsIGFkZHJlc3Mgd2lsbCBiZSBjb25zaWRlcmVkIGhpZ2htZW0uCisgKi8KKyNkZWZpbmUgSElHSE1FTV9TVEFSVAkJMHgwODAwMDAwMFVMCisKKyNpbmNsdWRlX25leHQgPHNwYWNlcy5oPgorCisjZW5kaWYgLyogX19BU01fTUFDSF9KQV9TUEFDRVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWphenovZmxvcHB5LmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtamF6ei9mbG9wcHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2YwZDA0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWphenovZmxvcHB5LmgKQEAgLTAsMCArMSwxMzUgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTgsIDIwMDMgYnkgUmFsZiBCYWVjaGxlCisgKi8KKyNpZm5kZWYgX19BU01fTUFDSF9KQVpaX0ZMT1BQWV9ICisjZGVmaW5lIF9fQVNNX01BQ0hfSkFaWl9GTE9QUFlfSAorCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CisjaW5jbHVkZSA8YXNtL2phenouaD4KKyNpbmNsdWRlIDxhc20vamF6emRtYS5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciBmZF9pbmIodW5zaWduZWQgaW50IHBvcnQpCit7CisJdW5zaWduZWQgY2hhciBjOworCisJYyA9ICoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSBwb3J0OworCXVkZWxheSgxKTsKKworCXJldHVybiBjOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmRfb3V0Yih1bnNpZ25lZCBjaGFyIHZhbHVlLCB1bnNpZ25lZCBpbnQgcG9ydCkKK3sKKwkqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgcG9ydCA9IHZhbHVlOworfQorCisvKgorICogSG93IHRvIGFjY2VzcyB0aGUgZmxvcHB5IERNQSBmdW5jdGlvbnMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBmZF9lbmFibGVfZG1hKHZvaWQpCit7CisJdmRtYV9lbmFibGUoSkFaWl9GTE9QUFlfRE1BKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZkX2Rpc2FibGVfZG1hKHZvaWQpCit7CisJdmRtYV9kaXNhYmxlKEpBWlpfRkxPUFBZX0RNQSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGZkX3JlcXVlc3RfZG1hKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmZF9mcmVlX2RtYSh2b2lkKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmRfY2xlYXJfZG1hX2ZmKHZvaWQpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmZF9zZXRfZG1hX21vZGUoY2hhciBtb2RlKQoreworCXZkbWFfc2V0X21vZGUoSkFaWl9GTE9QUFlfRE1BLCBtb2RlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZkX3NldF9kbWFfYWRkcihjaGFyICphKQoreworCXZkbWFfc2V0X2FkZHIoSkFaWl9GTE9QUFlfRE1BLCB2ZG1hX3BoeXMybG9nKENQSFlTQUREUigodW5zaWduZWQgbG9uZylhKSkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmRfc2V0X2RtYV9jb3VudCh1bnNpZ25lZCBpbnQgY291bnQpCit7CisJdmRtYV9zZXRfY291bnQoSkFaWl9GTE9QUFlfRE1BLCBjb3VudCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGZkX2dldF9kbWFfcmVzaWR1ZSh2b2lkKQoreworCXJldHVybiB2ZG1hX2dldF9yZXNpZHVlKEpBWlpfRkxPUFBZX0RNQSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmZF9lbmFibGVfaXJxKHZvaWQpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmZF9kaXNhYmxlX2lycSh2b2lkKQoreworfQorCitzdGF0aWMgaW5saW5lIGludCBmZF9yZXF1ZXN0X2lycSh2b2lkKQoreworCXJldHVybiByZXF1ZXN0X2lycShGTE9QUFlfSVJRLCBmbG9wcHlfaW50ZXJydXB0LAorCSAgICAgICAgICAgICAgICAgICBTQV9JTlRFUlJVUFQgfCBTQV9TQU1QTEVfUkFORE9NLCAiZmxvcHB5IiwgTlVMTCk7Cit9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorc3RhdGljIGlubGluZSB2b2lkIGZkX2ZyZWVfaXJxKHZvaWQpCit7CisJZnJlZV9pcnEoRkxPUFBZX0lSUSwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBmZF9nZXRmZGFkZHIxKHZvaWQpCit7CisJcmV0dXJuIEpBWlpfRkRDX0JBU0U7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBmZF9kbWFfbWVtX2FsbG9jKHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIG1lbTsKKworCW1lbSA9IF9fZ2V0X2RtYV9wYWdlcyhHRlBfS0VSTkVMLCBnZXRfb3JkZXIoc2l6ZSkpOworCWlmKCFtZW0pCisJCXJldHVybiAwOworCXZkbWFfYWxsb2MoQ1BIWVNBRERSKG1lbSksIHNpemUpOwkvKiBYWFggZXJyb3IgY2hlY2tpbmcgKi8KKworCXJldHVybiBtZW07Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmZF9kbWFfbWVtX2ZyZWUodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJdmRtYV9mcmVlKHZkbWFfcGh5czJsb2coQ1BIWVNBRERSKGFkZHIpKSk7CisJZnJlZV9wYWdlcyhhZGRyLCBnZXRfb3JkZXIoc2l6ZSkpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZmRfZHJpdmVfdHlwZSh1bnNpZ25lZCBsb25nIG4pCit7CisJLyogWFhYIFRoaXMgaXMgd3JvbmcgZm9yIG1hY2hpbmVzIHdpdGggRUQgMi44OG1iIGRpc2sgZHJpdmVzIGxpa2UgdGhlCisJICAgT2xpdmV0dGkgTTcwMC4gIEFueXdheSwgd2Ugc2hvdWxkIHN1Y2sgdGhpcyBmcm9tIHRoZSBBUkMKKwkgICBmaXJtd2FyZS4gICovCisJaWYgKG4gPT0gMCkKKwkJcmV0dXJuIDQ7CS8qIDMsNSIsIDEuNDRtYiAqLworCisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvKiBfX0FTTV9NQUNIX0pBWlpfRkxPUFBZX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1qYXp6L21jMTQ2ODE4cnRjLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtamF6ei9tYzE0NjgxOHJ0Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0NGZkYmEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtamF6ei9tYzE0NjgxOHJ0Yy5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTgsIDIwMDEsIDAzIGJ5IFJhbGYgQmFlY2hsZQorICoKKyAqIFJUQyByb3V0aW5lcyBmb3IgSmF6eiBzdHlsZSBhdHRhY2hlZCBEYWxsYXMgY2hpcC4KKyAqLworI2lmbmRlZiBfX0FTTV9NQUNIX0pBWlpfTUMxNDY4MThSVENfSAorI2RlZmluZSBfX0FTTV9NQUNIX0pBWlpfTUMxNDY4MThSVENfSAorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2phenouaD4KKworI2RlZmluZSBSVENfUE9SVCh4KQkoMHg3MCArICh4KSkKKyNkZWZpbmUgUlRDX0lSUQkJOAorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgQ01PU19SRUFEKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlvdXRiX3AoYWRkciwgUlRDX1BPUlQoMCkpOworCisJcmV0dXJuICooY2hhciAqKUpBWlpfUlRDX0JBU0U7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBDTU9TX1dSSVRFKHVuc2lnbmVkIGNoYXIgZGF0YSwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCW91dGJfcChhZGRyLCBSVENfUE9SVCgwKSk7CisJKihjaGFyICopSkFaWl9SVENfQkFTRSA9IGRhdGE7Cit9CisKKyNkZWZpbmUgUlRDX0FMV0FZU19CQ0QJMAorCisjZW5kaWYgLyogX19BU01fTUFDSF9KQVpaX01DMTQ2ODE4UlRDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1qYXp6L3BhcmFtLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtamF6ei9wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzOTc2M2EKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtamF6ei9wYXJhbS5oCkBAIC0wLDAgKzEsMTYgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgYnkgUmFsZiBCYWVjaGxlCisgKi8KKyNpZm5kZWYgX19BU01fTUFDSF9KQVpaX1BBUkFNX0gKKyNkZWZpbmUgX19BU01fTUFDSF9KQVpaX1BBUkFNX0gKKworLyoKKyAqIEphenogaXMgY3VycmVudGx5IHVzaW5nIHRoZSBpbnRlcm5hbCAxMDBIeiB0aW1lciBvZiB0aGUgUjQwMzAKKyAqLworI2RlZmluZSBIWgkJMTAwCQkvKiBJbnRlcm5hbCBrZXJuZWwgdGltZXIgZnJlcXVlbmN5ICovCisKKyNlbmRpZiAvKiBfX0FTTV9NQUNIX0pBWlpfUEFSQU1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWphenovdGltZXguaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1qYXp6L3RpbWV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNhZmZhMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1qYXp6L3RpbWV4LmgKQEAgLTAsMCArMSwxNiBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMyBieSBSYWxmIEJhZWNobGUKKyAqLworI2lmbmRlZiBfX0FTTV9NQUNIX0pBWlpfVElNRVhfSAorI2RlZmluZSBfX0FTTV9NQUNIX0pBWlpfVElNRVhfSAorCisvKgorICogSmF6eiBpcyBzdGlsbCB1c2luZyB0aGUgUjQwMzAgMTAwSHogY291bnRlcgorICovCisjZGVmaW5lIENMT0NLX1RJQ0tfUkFURQkJMTAwCisKKyNlbmRpZiAvKiBfX0FTTV9NQUNIX0pBWlpfVElNRVhfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWptcjM5MjcvYXNtL2RzMTc0Mi5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWptcjM5MjcvYXNtL2RzMTc0Mi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzNGE0YjYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtam1yMzkyNy9hc20vZHMxNzQyLmgKQEAgLTAsMCArMSwxNiBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMyBieSBSYWxmIEJhZWNobGUKKyAqLworI2lmbmRlZiBfX0FTTV9NQUNIX0pNUjM5MjdfQVNNX0RTMTc0Ml9ICisjZGVmaW5lIF9fQVNNX01BQ0hfSk1SMzkyN19BU01fRFMxNzQyX0gKKworI2luY2x1ZGUgPGFzbS9qbXIzOTI3L2ptcjM5MjcuaD4KKworI2RlZmluZSBydGNfcmVhZChyZWcpCQkoam1yMzkyN19udnJhbV9pbihhZGRyKSkKKyNkZWZpbmUgcnRjX3dyaXRlKGRhdGEsIHJlZykJKGptcjM5MjdfbnZyYW1fb3V0KChkYXRhKSwocmVnKSkpCisKKyNlbmRpZiAvKiBfX0FTTV9NQUNIX0pNUjM5MjdfQVNNX0RTMTc0Ml9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtbGFzYXQvbWFjaC1ndDY0MTIwLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtbGFzYXQvbWFjaC1ndDY0MTIwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE5YWQ0NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1sYXNhdC9tYWNoLWd0NjQxMjAuaApAQCAtMCwwICsxLDI3IEBACisvKgorICogIFRoaXMgaXMgYSBkaXJlY3QgY29weSBvZiB0aGUgZXY5NjEwMC5oIGZpbGUsIHdpdGggYSBnbG9iYWwKKyAqIHNlYXJjaCBhbmQgcmVwbGFjZS4gIFRoZSBudW1iZXJzIGFyZSB0aGUgc2FtZS4KKyAqCisgKiAgVGhlIHJlYXNvbiBJJ20gZHVwbGljYXRpbmcgdGhpcyBpcyBzbyB0aGF0IHRoZSA2NDEyMC85NjEwMAorICogZGVmaW5lcyB3b24ndCBiZSBjb25mdXNpbmcgaW4gdGhlIHNvdXJjZSBjb2RlLgorICovCisjaWZuZGVmIF9BU01fR1Q2NDEyMF9MQVNBVF9HVDY0MTIwX0RFUF9ICisjZGVmaW5lIF9BU01fR1Q2NDEyMF9MQVNBVF9HVDY0MTIwX0RFUF9ICisKKy8qCisgKiAgIEdUNjQxMjAgY29uZmlnIHNwYWNlIGJhc2UgYWRkcmVzcyBvbiBMYXNhdCAxMDAKKyAqLworI2RlZmluZSBHVDY0MTIwX0JBU0UJKEtTRUcxQUREUigweDE0MDAwMDAwKSkKKworLyoKKyAqICAgUENJIEJ1cyBhbGxvY2F0aW9uCisgKgorICogICAoR3Vlc3NpbmcgLi4uKQorICovCisjZGVmaW5lIEdUX1BDSV9NRU1fQkFTRQkweDEyMDAwMDAwVUwKKyNkZWZpbmUgR1RfUENJX01FTV9TSVpFCTB4MDIwMDAwMDBVTAorI2RlZmluZSBHVF9QQ0lfSU9fQkFTRQkweDEwMDAwMDAwVUwKKyNkZWZpbmUgR1RfUENJX0lPX1NJWkUJMHgwMjAwMDAwMFVMCisjZGVmaW5lIEdUX0lTQV9JT19CQVNFCVBDSV9JT19CQVNFCisKKyNlbmRpZiAvKiBfQVNNX0dUNjQxMjBfTEFTQVRfR1Q2NDEyMF9ERVBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLW1pcHMvY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtbWlwcy9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjUxYmU1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLW1pcHMvY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCBDaHJpcyBEZWFybWFuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgUmFsZiBCYWVjaGxlIChyYWxmQGxpbnV4LW1pcHMub3JnKQorICovCisjaWZuZGVmIF9fQVNNX01BQ0hfTUlQU19DUFVfRkVBVFVSRV9PVkVSUklERVNfSAorI2RlZmluZSBfX0FTTV9NQUNIX01JUFNfQ1BVX0ZFQVRVUkVfT1ZFUlJJREVTX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisvKgorICogQ1BVIGZlYXR1cmUgb3ZlcnJpZGVzIGZvciBNSVBTIGJvYXJkcworICovCisjaWZkZWYgQ09ORklHX0NQVV9NSVBTMzIKKyNkZWZpbmUgY3B1X2hhc190bGIJCTEKKyNkZWZpbmUgY3B1X2hhc180a2V4CQkxCisjZGVmaW5lIGNwdV9oYXNfNGt0bGIJCTEKKy8qICNkZWZpbmUgY3B1X2hhc19mcHUJCT8gKi8KKy8qICNkZWZpbmUgY3B1X2hhc18zMmZwcgk/ICovCisjZGVmaW5lIGNwdV9oYXNfY291bnRlcgkJMQorLyogI2RlZmluZSBjcHVfaGFzX3dhdGNoCT8gKi8KKyNkZWZpbmUgY3B1X2hhc19kaXZlYwkJMQorI2RlZmluZSBjcHVfaGFzX3ZjZQkJMAorLyogI2RlZmluZSBjcHVfaGFzX2NhY2hlX2NkZXhfcAk/ICovCisvKiAjZGVmaW5lIGNwdV9oYXNfY2FjaGVfY2RleF9zCT8gKi8KKy8qICNkZWZpbmUgY3B1X2hhc19wcmVmZXRjaAk/ICovCisjZGVmaW5lIGNwdV9oYXNfbWNoZWNrCQkxCisvKiAjZGVmaW5lIGNwdV9oYXNfZWp0YWcJPyAqLworI2RlZmluZSBjcHVfaGFzX2xsc2MJCTEKKy8qICNkZWZpbmUgY3B1X2hhc192dGFnX2ljYWNoZQk/ICovCisvKiAjZGVmaW5lIGNwdV9oYXNfZGNfYWxpYXNlcwk/ICovCisvKiAjZGVmaW5lIGNwdV9oYXNfaWNfZmlsbHNfZl9kYyA/ICovCisjZGVmaW5lIGNwdV9oYXNfbm9mcHVleAkJMAorLyogI2RlZmluZSBjcHVfaGFzXzY0Yml0cwk/ICovCisvKiAjZGVmaW5lIGNwdV9oYXNfNjRiaXRfemVyb19yZWcgPyAqLworLyogI2RlZmluZSBjcHVfaGFzX3N1YnNldF9wY2FjaGVzID8gKi8KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9NSVBTNjQKKyNkZWZpbmUgY3B1X2hhc190bGIJCTEKKyNkZWZpbmUgY3B1X2hhc180a2V4CQkxCisjZGVmaW5lIGNwdV9oYXNfNGt0bGIJCTEKKy8qICNkZWZpbmUgY3B1X2hhc19mcHUJCT8gKi8KKy8qICNkZWZpbmUgY3B1X2hhc18zMmZwcgk/ICovCisjZGVmaW5lIGNwdV9oYXNfY291bnRlcgkJMQorLyogI2RlZmluZSBjcHVfaGFzX3dhdGNoCT8gKi8KKyNkZWZpbmUgY3B1X2hhc19kaXZlYwkJMQorI2RlZmluZSBjcHVfaGFzX3ZjZQkJMAorLyogI2RlZmluZSBjcHVfaGFzX2NhY2hlX2NkZXhfcAk/ICovCisvKiAjZGVmaW5lIGNwdV9oYXNfY2FjaGVfY2RleF9zCT8gKi8KKy8qICNkZWZpbmUgY3B1X2hhc19wcmVmZXRjaAk/ICovCisjZGVmaW5lIGNwdV9oYXNfbWNoZWNrCQkxCisvKiAjZGVmaW5lIGNwdV9oYXNfZWp0YWcJPyAqLworI2RlZmluZSBjcHVfaGFzX2xsc2MJCTEKKy8qICNkZWZpbmUgY3B1X2hhc192dGFnX2ljYWNoZQk/ICovCisvKiAjZGVmaW5lIGNwdV9oYXNfZGNfYWxpYXNlcwk/ICovCisvKiAjZGVmaW5lIGNwdV9oYXNfaWNfZmlsbHNfZl9kYyA/ICovCisjZGVmaW5lIGNwdV9oYXNfbm9mcHVleAkJMAorLyogI2RlZmluZSBjcHVfaGFzXzY0Yml0cwk/ICovCisvKiAjZGVmaW5lIGNwdV9oYXNfNjRiaXRfemVyb19yZWcgPyAqLworLyogI2RlZmluZSBjcHVfaGFzX3N1YnNldF9wY2FjaGVzID8gKi8KKyNlbmRpZgorCisjZW5kaWYgLyogX19BU01fTUFDSF9NSVBTX0NQVV9GRUFUVVJFX09WRVJSSURFU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtbWlwcy9tYWNoLWd0NjQxMjAuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1taXBzL21hY2gtZ3Q2NDEyMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxMWY3Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtbWlwcy9tYWNoLWd0NjQxMjAuaApAQCAtMCwwICsxLDI4IEBACisvKgorICogIFRoaXMgaXMgYSBkaXJlY3QgY29weSBvZiB0aGUgZXY5NjEwMC5oIGZpbGUsIHdpdGggYSBnbG9iYWwKKyAqIHNlYXJjaCBhbmQgcmVwbGFjZS4gIFRoZSBudW1iZXJzIGFyZSB0aGUgc2FtZS4KKyAqCisgKiAgVGhlIHJlYXNvbiBJJ20gZHVwbGljYXRpbmcgdGhpcyBpcyBzbyB0aGF0IHRoZSA2NDEyMC85NjEwMAorICogZGVmaW5lcyB3b24ndCBiZSBjb25mdXNpbmcgaW4gdGhlIHNvdXJjZSBjb2RlLgorICovCisjaWZuZGVmIF9BU01fTUFDSF9NSVBTX01BQ0hfR1Q2NDEyMF9ERVBfSAorI2RlZmluZSBfQVNNX01BQ0hfTUlQU19NQUNIX0dUNjQxMjBfREVQX0gKKworI2RlZmluZSBNSVBTX0dUX0JBU0UJMHgxYmUwMDAwMAorCitleHRlcm4gdW5zaWduZWQgbG9uZyBfcGNpY3RybF9ndDY0MTIwOworLyoKKyAqICAgR1Q2NDEyMCBjb25maWcgc3BhY2UgYmFzZSBhZGRyZXNzCisgKi8KKyNkZWZpbmUgR1Q2NDEyMF9CQVNFCV9wY2ljdHJsX2d0NjQxMjAKKworLyoKKyAqICAgUENJIEJ1cyBhbGxvY2F0aW9uCisgKi8KKyNkZWZpbmUgR1RfUENJX01FTV9CQVNFCTB4MTIwMDAwMDBVTAorI2RlZmluZSBHVF9QQ0lfTUVNX1NJWkUJMHgwMjAwMDAwMFVMCisjZGVmaW5lIEdUX1BDSV9JT19CQVNFCTB4MTAwMDAwMDBVTAorI2RlZmluZSBHVF9QQ0lfSU9fU0laRQkweDAyMDAwMDAwVUwKKyNkZWZpbmUgR1RfSVNBX0lPX0JBU0UJUENJX0lPX0JBU0UKKworI2VuZGlmIC8qIF9BU01fTUFDSF9NSVBTX01BQ0hfR1Q2NDEyMF9ERVBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLW1pcHMvbWMxNDY4MThydGMuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1taXBzL21jMTQ2ODE4cnRjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjczMGJhMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1taXBzL21jMTQ2ODE4cnRjLmgKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENhcnN0ZW4gTGFuZ2dhYXJkLCBjYXJzdGVubEBtaXBzLmNvbQorICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgYnkgUmFsZiBCYWVjaGxlCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChWZXJzaW9uIDIpIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKiBSVEMgcm91dGluZXMgZm9yIE1hbHRhIHN0eWxlIGF0dGFjaGVkIFBJSVg0IGRldmljZSwgd2hpY2ggY29udGFpbnMgYQorICogTW90b3JvbGEgTUMxNDY4MThBLWNvbXBhdGlibGUgUmVhbCBUaW1lIENsb2NrLgorICovCisjaWZuZGVmIF9fQVNNX01BQ0hfTUFMVEFfTUMxNDY4MThSVENfSAorI2RlZmluZSBfX0FTTV9NQUNIX01BTFRBX01DMTQ2ODE4UlRDX0gKKworI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9taXBzLWJvYXJkcy9nZW5lcmljLmg+CisjaW5jbHVkZSA8YXNtL21pcHMtYm9hcmRzL21hbHRhLmg+CisKKyNkZWZpbmUgUlRDX1BPUlQoeCkJKDB4NzAgKyAoeCkpCisjZGVmaW5lIFJUQ19JUlEJCTgKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIENNT1NfUkVBRCh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJb3V0YihhZGRyLCBNQUxUQV9SVENfQURSX1JFRyk7CisJcmV0dXJuIGluYihNQUxUQV9SVENfREFUX1JFRyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBDTU9TX1dSSVRFKHVuc2lnbmVkIGNoYXIgZGF0YSwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCW91dGIoYWRkciwgTUFMVEFfUlRDX0FEUl9SRUcpOworCW91dGIoZGF0YSwgTUFMVEFfUlRDX0RBVF9SRUcpOworfQorCisjZGVmaW5lIFJUQ19BTFdBWVNfQkNECTAKKworI2RlZmluZSBtYzE0NjgxOF9kZWNvZGVfeWVhcih5ZWFyKSAoKHllYXIpIDwgNzAgPyAoeWVhcikgKyAyMDAwIDogKHllYXIpICsgMTk3MCkKKworI2VuZGlmIC8qIF9fQVNNX01BQ0hfTUFMVEFfTUMxNDY4MThSVENfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLW9jZWxvdC9tYWNoLWd0NjQxMjAuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1vY2Vsb3QvbWFjaC1ndDY0MTIwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTYyZWNiNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1vY2Vsb3QvbWFjaC1ndDY0MTIwLmgKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAxIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgorICogQXV0aG9yOiBKdW4gU3VuLCBqc3VuQG12aXN0YS5jb20gb3IganN1bkBqdW5zdW4ubmV0CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2lmbmRlZiBfQVNNX0dUNjQxMjBfTU9NRU5DT19PQ0VMT1RfR1Q2NDEyMF9ERVBfSAorI2RlZmluZSBfQVNNX0dUNjQxMjBfTU9NRU5DT19PQ0VMT1RfR1Q2NDEyMF9ERVBfSAorCisvKgorICogUENJIGFkZHJlc3MgYWxsb2NhdGlvbgorICovCisjZGVmaW5lIEdUX1BDSV9NRU1fQkFTRQkoMHgyMjAwMDAwMFVMKQorI2RlZmluZSBHVF9QQ0lfTUVNX1NJWkUJR1RfREVGX1BDSTBfTUVNMF9TSVpFCisjZGVmaW5lIEdUX1BDSV9JT19CQVNFCSgweDIwMDAwMDAwVUwpCisjZGVmaW5lIEdUX1BDSV9JT19TSVpFCUdUX0RFRl9QQ0kwX0lPX1NJWkUKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZ3Q2NDEyMF9iYXNlOworCisjZGVmaW5lIEdUNjQxMjBfQkFTRQkoZ3Q2NDEyMF9iYXNlKQorCisvKgorICogR1QgdGltZXIgaXJxCisgKi8KKyNkZWZpbmUJR1RfVElNRVIJCTYKKworI2VuZGlmICAvKiBfQVNNX0dUNjQxMjBfTU9NRU5DT19PQ0VMT1RfR1Q2NDEyMF9ERVBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLW9jZWxvdDMvY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtb2NlbG90My9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDczNTEyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLW9jZWxvdDMvY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KKyAqIEF1dGhvcjogTWFuaXNoIExhY2h3YW5pLCBtbGFjaHdhbmlAbXZpc3RhLmNvbQorICogQ29weXJpZ2h0IChDKSAyMDA0IFJhbGYgQmFlY2hsZQorICovCisjaWZuZGVmIF9fQVNNX01BQ0hfSkFfQ1BVX0ZFQVRVUkVfT1ZFUlJJREVTX0gKKyNkZWZpbmUgX19BU01fTUFDSF9KQV9DUFVfRkVBVFVSRV9PVkVSUklERVNfSAorCisvKgorICogTW9tZW50dW0gT2NlbG90LTMgaXMgYmFzZWQgb24gUm03OTAwIHByb2Nlc3NvciB3aGljaAorICogaXMgYmFzZWQgb24gdGhlIEU5MDAwIGNvcmUuCisgKi8KKyNkZWZpbmUgY3B1X2hhc193YXRjaAkJMQorI2RlZmluZSBjcHVfaGFzX21pcHMxNgkJMAorI2RlZmluZSBjcHVfaGFzX2RpdmVjCQkwCisjZGVmaW5lIGNwdV9oYXNfdmNlCQkwCisjZGVmaW5lIGNwdV9oYXNfY2FjaGVfY2RleF9wCTAKKyNkZWZpbmUgY3B1X2hhc19jYWNoZV9jZGV4X3MJMAorI2RlZmluZSBjcHVfaGFzX3ByZWZldGNoCTEKKyNkZWZpbmUgY3B1X2hhc19tY2hlY2sJCTAKKyNkZWZpbmUgY3B1X2hhc19lanRhZwkJMAorCisjZGVmaW5lIGNwdV9oYXNfbGxzYwkJMQorI2RlZmluZSBjcHVfaGFzX3Z0YWdfaWNhY2hlCTAKKyNkZWZpbmUgY3B1X2hhc19kY19hbGlhc2VzCTAKKyNkZWZpbmUgY3B1X2hhc19pY19maWxsc19mX2RjCTAKKyNkZWZpbmUgY3B1X2ljYWNoZV9zbm9vcHNfcmVtb3RlX3N0b3JlCTAKKworI2RlZmluZSBjcHVfaGFzX25vZnB1ZXggCTAKKyNkZWZpbmUgY3B1X2hhc182NGJpdHMJCTEKKworI2RlZmluZSBjcHVfaGFzX3N1YnNldF9wY2FjaGVzCTAKKworI2RlZmluZSBjcHVfZGNhY2hlX2xpbmVfc2l6ZSgpCTMyCisjZGVmaW5lIGNwdV9pY2FjaGVfbGluZV9zaXplKCkJMzIKKyNkZWZpbmUgY3B1X3NjYWNoZV9saW5lX3NpemUoKQkzMgorCisvKgorICogT24gdGhlIFJNOTAwMCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IEktY2FjaGUgbGluZXMgYmVpbmcgZmV0Y2hlcyBvbmx5CisgKiBjb250YWluIHZhbGlkIGluc3RydWN0aW9ucyBhcmUgZnVubnkgdGhpbmdzIHdpbGwgaGFwcGVuLgorICovCisjZGVmaW5lIFBMQVRfVFJBTVBPTElORV9TVFVGRl9MSU5FCTMyVUwKKworI2VuZGlmIC8qIF9fQVNNX01BQ0hfSkFfQ1BVX0ZFQVRVUkVfT1ZFUlJJREVTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1wYjF4MDAvbWMxNDY4MThydGMuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1wYjF4MDAvbWMxNDY4MThydGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjJjNTg3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLXBiMXgwMC9tYzE0NjgxOHJ0Yy5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTgsIDIwMDEsIDAzIGJ5IFJhbGYgQmFlY2hsZQorICoKKyAqIFJUQyByb3V0aW5lcyBmb3IgUEMgc3R5bGUgYXR0YWNoZWQgRGFsbGFzIGNoaXAuCisgKi8KKyNpZm5kZWYgX19BU01fTUFDSF9BVTFYWF9NQzE0NjgxOFJUQ19ICisjZGVmaW5lIF9fQVNNX01BQ0hfQVUxWFhfTUMxNDY4MThSVENfSAorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MTAwMC5oPgorCisjZGVmaW5lIFJUQ19QT1JUKHgpCSgweDBjMDAwMDAwICsgKHgpKQorI2RlZmluZSBSVENfSVJRCQk4CisjZGVmaW5lIFBCMTUwMF9SVENfQUREUiAweDBjMDAwMDAwCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciBDTU9TX1JFQUQodW5zaWduZWQgbG9uZyBvZmZzZXQpCit7CisJb2Zmc2V0IDw8PSAyOworCXJldHVybiAodTgpKGF1X3JlYWRsKG9mZnNldCArIFBCMTUwMF9SVENfQUREUikgJiAweGZmKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIENNT1NfV1JJVEUodW5zaWduZWQgY2hhciBkYXRhLCB1bnNpZ25lZCBsb25nIG9mZnNldCkKK3sKKwlvZmZzZXQgPDw9IDI7CisJYXVfd3JpdGVsKGRhdGEsIG9mZnNldCArIFBCMTUwMF9SVENfQUREUik7Cit9CisKKyNkZWZpbmUgUlRDX0FMV0FZU19CQ0QJMQorCisjZW5kaWYgLyogX19BU01fTUFDSF9BVTFYWF9NQzE0NjgxOFJUQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtcGIxeDAwL3BiMTAwMC5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLXBiMXgwMC9wYjEwMDAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGMxZTQxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLXBiMXgwMC9wYjEwMDAuaApAQCAtMCwwICsxLDE3MiBAQAorLyoKKyAqIEFsY2hlbXkgU2VtaSBQQjEwMDAgUmVmZXJyZW5jZSBCb2FyZAorICoKKyAqIENvcHlyaWdodCAyMDAxIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgorICogQXV0aG9yOiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKiAgICAgICAgIAlwcG9wb3ZAbXZpc3RhLmNvbSBvciBzb3VyY2VAbXZpc3RhLmNvbQorICoKKyAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChWZXJzaW9uIDIpIGFzCisgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICoKKyAqCisgKi8KKyNpZm5kZWYgX19BU01fUEIxMDAwX0gKKyNkZWZpbmUgX19BU01fUEIxMDAwX0gKKworLyogUENNQ0lBIFBCMTAwMCBzcGVjaWZpYyBkZWZpbmVzICovCisjZGVmaW5lIFBDTUNJQV9NQVhfU09DSyAxCisjZGVmaW5lIFBDTUNJQV9OVU1fU09DS1MgKFBDTUNJQV9NQVhfU09DSysxKQorCisjZGVmaW5lIFBCMTAwMF9QQ1IgICAgIDB4QkUwMDAwMDAKKyAgI2RlZmluZSBQQ1JfU0xPVF8wX1ZQUDAgICgxPDwwKQorICAjZGVmaW5lIFBDUl9TTE9UXzBfVlBQMSAgKDE8PDEpCisgICNkZWZpbmUgUENSX1NMT1RfMF9WQ0MwICAoMTw8MikKKyAgI2RlZmluZSBQQ1JfU0xPVF8wX1ZDQzEgICgxPDwzKQorICAjZGVmaW5lIFBDUl9TTE9UXzBfUlNUICAgKDE8PDQpCisKKyAgI2RlZmluZSBQQ1JfU0xPVF8xX1ZQUDAgICgxPDw4KQorICAjZGVmaW5lIFBDUl9TTE9UXzFfVlBQMSAgKDE8PDkpCisgICNkZWZpbmUgUENSX1NMT1RfMV9WQ0MwICAoMTw8MTApCisgICNkZWZpbmUgUENSX1NMT1RfMV9WQ0MxICAoMTw8MTEpCisgICNkZWZpbmUgUENSX1NMT1RfMV9SU1QgICAoMTw8MTIpCisKKyNkZWZpbmUgUEIxMDAwX01EUiAgICAgMHhCRTAwMDAwNAorICAjZGVmaW5lIE1EUl9QSSAgICAgICAgKDE8PDUpICAvKiBwY21jaWEgaW50IGxhdGNoICAqLworICAjZGVmaW5lIE1EUl9FUEkgICAgICAoMTw8MTQpICAvKiBlbmFibGUgcGNtY2lhIGludCAqLworICAjZGVmaW5lIE1EUl9DUEkgICAgICAoMTw8MTUpICAvKiBjbGVhciBwY21jaWEgaW50ICAqLworCisjZGVmaW5lIFBCMTAwMF9BQ1IxICAgIDB4QkUwMDAwMDgKKyAgI2RlZmluZSBBQ1IxX1NMT1RfMF9DRDEgICAgKDE8PDApICAvKiBjYXJkIGRldGVjdCAxICAgICAqLworICAjZGVmaW5lIEFDUjFfU0xPVF8wX0NEMiAgICAoMTw8MSkgIC8qIGNhcmQgZGV0ZWN0IDIgICAgICovCisgICNkZWZpbmUgQUNSMV9TTE9UXzBfUkVBRFkgICgxPDwyKSAgLyogcmVhZHkgICAgICAgICAgICAgKi8KKyAgI2RlZmluZSBBQ1IxX1NMT1RfMF9TVEFUVVMgKDE8PDMpICAvKiBzdGF0dXMgY2hhbmdlICAgICAqLworICAjZGVmaW5lIEFDUjFfU0xPVF8wX1ZTMSAgICAoMTw8NCkgIC8qIHZvbHRhZ2Ugc2Vuc2UgMSAgICovCisgICNkZWZpbmUgQUNSMV9TTE9UXzBfVlMyICAgICgxPDw1KSAgLyogdm9sdGFnZSBzZW5zZSAyICAgKi8KKyAgI2RlZmluZSBBQ1IxX1NMT1RfMF9JTlBBQ0sgKDE8PDYpICAvKiBpbnBhY2sgcGluIHN0YXR1cyAqLworICAjZGVmaW5lIEFDUjFfU0xPVF8xX0NEMSAgICAoMTw8OCkgIC8qIGNhcmQgZGV0ZWN0IDEgICAgICovCisgICNkZWZpbmUgQUNSMV9TTE9UXzFfQ0QyICAgICgxPDw5KSAgLyogY2FyZCBkZXRlY3QgMiAgICAgKi8KKyAgI2RlZmluZSBBQ1IxX1NMT1RfMV9SRUFEWSAgKDE8PDEwKSAvKiByZWFkeSAgICAgICAgICAgICAqLworICAjZGVmaW5lIEFDUjFfU0xPVF8xX1NUQVRVUyAoMTw8MTEpIC8qIHN0YXR1cyBjaGFuZ2UgICAgICovCisgICNkZWZpbmUgQUNSMV9TTE9UXzFfVlMxICAgICgxPDwxMikgLyogdm9sdGFnZSBzZW5zZSAxICAgKi8KKyAgI2RlZmluZSBBQ1IxX1NMT1RfMV9WUzIgICAgKDE8PDEzKSAvKiB2b2x0YWdlIHNlbnNlIDIgICAqLworICAjZGVmaW5lIEFDUjFfU0xPVF8xX0lOUEFDSyAoMTw8MTQpIC8qIGlucGFjayBwaW4gc3RhdHVzICovCisKKyNkZWZpbmUgQ1BMRF9BVVgwICAgICAgMHhCRTAwMDAwQworI2RlZmluZSBDUExEX0FVWDEgICAgICAweEJFMDAwMDEwCisjZGVmaW5lIENQTERfQVVYMiAgICAgIDB4QkUwMDAwMTQKKworLyogVm9sdGFnZSBsZXZlbHMgKi8KKworLyogVlBQRU4xIC0gVlBQRU4wICovCisjZGVmaW5lIFZQUF9HTkQgKCgwPDwxKSB8ICgwPDwwKSkKKyNkZWZpbmUgVlBQXzVWICAoKDE8PDEpIHwgKDA8PDApKQorI2RlZmluZSBWUFBfM1YgICgoMDw8MSkgfCAoMTw8MCkpCisjZGVmaW5lIFZQUF8xMlYgKCgwPDwxKSB8ICgxPDwwKSkKKyNkZWZpbmUgVlBQX0hJWiAoKDE8PDEpIHwgKDE8PDApKQorCisvKiBWQ0NFTjEgLSBWQ0NFTjAgKi8KKyNkZWZpbmUgVkNDXzNWICAoKDA8PDEpIHwgKDE8PDApKQorI2RlZmluZSBWQ0NfNVYgICgoMTw8MSkgfCAoMDw8MCkpCisjZGVmaW5lIFZDQ19ISVogKCgwPDwxKSB8ICgwPDwwKSkKKworLyogVlBQL1ZDQyAqLworI2RlZmluZSBTRVRfVkNDX1ZQUChWQ0MsIFZQUCwgU0xPVClcCisJKCgoKFZDQyk8PDIpIHwgKChWUFApPDwwKSkgPDwgKChTTE9UKSo4KSkKKworCisvKiBQQ0kgUEIxMDAwIHNwZWNpZmljIGRlZmluZXMgKi8KKy8qIFRoZSByZWFzb24gdGhlc2UgZGVmaW5lcyBhcmUgaGVyZSBpbnN0ZWFkIG9mIGF1MTAwMC5oIGlzIGJlY2F1c2UKKyAqIHRoZSBBdTEwMDAgZG9lcyBub3QgaGF2ZSBhIFBDSSBidXMgY29udHJvbGxlciBzbyB0aGUgUENJIGltcGxlbWVudGF0aW9uCisgKiBvbiB0aGUgc29tZSBvZiB0aGUgb2xkZXIgUGIxMDAwIGJvYXJkcyB3YXMgdmVyeSBib2FyZCBzcGVjaWZpYy4KKyAqLworI2RlZmluZSBQQ0lfQ09ORklHX0JBU0UgICAweEJBMDIwMDAwIC8qIHRoZSBvbmx5IGV4dGVybmFsIHNsb3QgKi8KKworI2RlZmluZSBTRFJBTV9ERVZJRCAgICAgICAweEJBMDEwMDAwCisjZGVmaW5lIFNEUkFNX0NNRCAgICAgICAgIDB4QkEwMTAwMDQKKyNkZWZpbmUgU0RSQU1fQ0xBU1MgICAgICAgMHhCQTAxMDAwOAorI2RlZmluZSBTRFJBTV9NSVNDICAgICAgICAweEJBMDEwMDBDCisjZGVmaW5lIFNEUkFNX01CQVIgICAgICAgIDB4QkEwMTAwMTAKKworI2RlZmluZSBQQ0lfSU9fREFUQV9QT1JUICAweEJBODAwMDAwCisKKyNkZWZpbmUgUENJX0lPX0FERFIgICAgICAgMHhCRTAwMDAxQworI2RlZmluZSBQQ0lfSU5UX0FDSyAgICAgICAweEJCQzAwMDAwCisjZGVmaW5lIFBDSV9JT19SRUFEICAgICAgIDB4QkJDMDAwMjAKKyNkZWZpbmUgUENJX0lPX1dSSVRFICAgICAgMHhCQkMwMDAzMAorCisjZGVmaW5lIFBDSV9CUklER0VfQ09ORklHIDB4QkUwMDAwMTgKKworI2RlZmluZSBQQ0lfSU9fU1RBUlQgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIFBDSV9JT19FTkQgICAgICAgIDB4MTAwMGZmZmYKKyNkZWZpbmUgUENJX01FTV9TVEFSVCAgICAgMHgxODAwMDAwMAorI2RlZmluZSBQQ0lfTUVNX0VORCAgICAgICAweDE4ZmZmZmZmCisKKyNkZWZpbmUgUENJX0ZJUlNUX0RFVkZOICAgMAorI2RlZmluZSBQQ0lfTEFTVF9ERVZGTiAgICAxCisKK3N0YXRpYyBpbmxpbmUgdTggYXVfcGNpX2lvX3JlYWRiKHUzMiBhZGRyKQoreworCXdyaXRlbChhZGRyLCBQQ0lfSU9fQUREUik7CisJd3JpdGVsKChyZWFkbChQQ0lfQlJJREdFX0NPTkZJRykgJiAweGZmZmZjZmZmKSB8ICgxPDwxMiksIFBDSV9CUklER0VfQ09ORklHKTsKKwlyZXR1cm4gKHJlYWRsKFBDSV9JT19EQVRBX1BPUlQpICYgMHhmZik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTE2IGF1X3BjaV9pb19yZWFkdyh1MzIgYWRkcikKK3sKKwl3cml0ZWwoYWRkciwgUENJX0lPX0FERFIpOworCXdyaXRlbCgocmVhZGwoUENJX0JSSURHRV9DT05GSUcpICYgMHhmZmZmY2ZmZikgfCAoMTw8MTMpLCBQQ0lfQlJJREdFX0NPTkZJRyk7CisJcmV0dXJuIChyZWFkbChQQ0lfSU9fREFUQV9QT1JUKSAmIDB4ZmZmZik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGF1X3BjaV9pb19yZWFkbCh1MzIgYWRkcikKK3sKKwl3cml0ZWwoYWRkciwgUENJX0lPX0FERFIpOworCXdyaXRlbCgocmVhZGwoUENJX0JSSURHRV9DT05GSUcpICYgMHhmZmZmY2ZmZiksIFBDSV9CUklER0VfQ09ORklHKTsKKwlyZXR1cm4gcmVhZGwoUENJX0lPX0RBVEFfUE9SVCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdV9wY2lfaW9fd3JpdGViKHU4IHZhbCwgdTMyIGFkZHIpCit7CisJd3JpdGVsKGFkZHIsIFBDSV9JT19BRERSKTsKKwl3cml0ZWwoKHJlYWRsKFBDSV9CUklER0VfQ09ORklHKSAmIDB4ZmZmZmNmZmYpIHwgKDE8PDEyKSwgUENJX0JSSURHRV9DT05GSUcpOworCXdyaXRlbCh2YWwsIFBDSV9JT19EQVRBX1BPUlQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXVfcGNpX2lvX3dyaXRldyh1MTYgdmFsLCB1MzIgYWRkcikKK3sKKwl3cml0ZWwoYWRkciwgUENJX0lPX0FERFIpOworCXdyaXRlbCgocmVhZGwoUENJX0JSSURHRV9DT05GSUcpICYgMHhmZmZmY2ZmZikgfCAoMTw8MTMpLCBQQ0lfQlJJREdFX0NPTkZJRyk7CisJd3JpdGVsKHZhbCwgUENJX0lPX0RBVEFfUE9SVCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdV9wY2lfaW9fd3JpdGVsKHUzMiB2YWwsIHUzMiBhZGRyKQoreworCXdyaXRlbChhZGRyLCBQQ0lfSU9fQUREUik7CisJd3JpdGVsKHJlYWRsKFBDSV9CUklER0VfQ09ORklHKSAmIDB4ZmZmZmNmZmYsIFBDSV9CUklER0VfQ09ORklHKTsKKwl3cml0ZWwodmFsLCBQQ0lfSU9fREFUQV9QT1JUKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldF9zZHJhbV9leHRieXRlKHZvaWQpCit7CisJd3JpdGVsKHJlYWRsKFBDSV9CUklER0VfQ09ORklHKSAmIDB4ZmZmZmZmMDAsIFBDSV9CUklER0VfQ09ORklHKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldF9zbG90X2V4dGJ5dGUodm9pZCkKK3sKKwl3cml0ZWwoKHJlYWRsKFBDSV9CUklER0VfQ09ORklHKSAmIDB4ZmZmZmJmMDApIHwgMHgxOCwgUENJX0JSSURHRV9DT05GSUcpOworfQorI2VuZGlmIC8qIF9fQVNNX1BCMTAwMF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtcGIxeDAwL3BiMTEwMC5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLXBiMXgwMC9wYjExMDAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzVhMWNkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLXBiMXgwMC9wYjExMDAuaApAQCAtMCwwICsxLDg1IEBACisvKgorICogQWxjaGVteSBTZW1pIFBCMTEwMCBSZWZlcnJlbmNlIEJvYXJkCisgKgorICogQ29weXJpZ2h0IDIwMDEgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCisgKiBBdXRob3I6IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqICAgICAgICAgCXBwb3BvdkBtdmlzdGEuY29tIG9yIHNvdXJjZUBtdmlzdGEuY29tCisgKgorICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIGRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKKyAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqICA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgKgorICoKKyAqLworI2lmbmRlZiBfX0FTTV9QQjExMDBfSAorI2RlZmluZSBfX0FTTV9QQjExMDBfSAorCisjZGVmaW5lIFBCMTEwMF9JREVOVCAgICAgICAgICAweEFFMDAwMDAwCisjZGVmaW5lIEJPQVJEX1NUQVRVU19SRUcgICAgICAweEFFMDAwMDA0CisgICNkZWZpbmUgUEIxMTAwX1JPTV9TRUwgICAgICAgICAoMTw8MTUpCisgICNkZWZpbmUgUEIxMTAwX1JPTV9TSVogICAgICAgICAoMTw8MTQpCisgICNkZWZpbmUgUEIxMTAwX1NXQVBfQk9PVCAgICAgICAoMTw8MTMpCisgICNkZWZpbmUgUEIxMTAwX0ZMQVNIX1dQICAgICAgICAoMTw8MTIpCisgICNkZWZpbmUgUEIxMTAwX1JPTV9IX1NUUyAgICAgICAoMTw8MTEpCisgICNkZWZpbmUgUEIxMTAwX1JPTV9MX1NUUyAgICAgICAoMTw8MTApCisgICNkZWZpbmUgUEIxMTAwX0ZMQVNIX0hfU1RTICAgICAgKDE8PDkpCisgICNkZWZpbmUgUEIxMTAwX0ZMQVNIX0xfU1RTICAgICAgKDE8PDgpCisgICNkZWZpbmUgUEIxMTAwX1NSQU1fU0laICAgICAgICAgKDE8PDcpCisgICNkZWZpbmUgUEIxMTAwX1RTQ19CVVNZICAgICAgICAgKDE8PDYpCisgICNkZWZpbmUgUEIxMTAwX1BDTUNJQV9WU19NQVNLICAgKDM8PDQpCisgICNkZWZpbmUgUEIxMTAwX1JTMjMyX0NEICAgICAgICAgKDE8PDMpCisgICNkZWZpbmUgUEIxMTAwX1JTMjMyX0NUUyAgICAgICAgKDE8PDIpCisgICNkZWZpbmUgUEIxMTAwX1JTMjMyX0RTUiAgICAgICAgKDE8PDEpCisgICNkZWZpbmUgUEIxMTAwX1JTMjMyX1JJICAgICAgICAgKDE8PDApCisKKyNkZWZpbmUgUEIxMTAwX0lSREFfUlMyMzIgICAgIDB4QUUwMDAwMEMKKyAgI2RlZmluZSBQQjExMDBfSVJEQV9GVUxMICAgICAgICgwPDwxNCkgLyogZnVsbCBwb3dlciAqLworICAjZGVmaW5lIFBCMTEwMF9JUkRBX1NIVVRET1dOICAgKDE8PDE0KQorICAjZGVmaW5lIFBCMTEwMF9JUkRBX1RUICAgICAgICAgKDI8PDE0KSAvKiAyLzMgcG93ZXIgKi8KKyAgI2RlZmluZSBQQjExMDBfSVJEQV9PVCAgICAgICAgICgzPDwxNCkgLyogMS8zIHBvd2VyICovCisgICNkZWZpbmUgUEIxMTAwX0lSREFfRklSICAgICAgICAoMTw8MTMpCisKKyNkZWZpbmUgUENNQ0lBX0JPQVJEX1JFRyAgICAgMHhBRTAwMDAxMAorICAjZGVmaW5lIFBCMTEwMF9TRF9XUDFfUk8gICAgICAgKDE8PDE1KSAvKiByZWFkIG9ubHkgKi8KKyAgI2RlZmluZSBQQjExMDBfU0RfV1AwX1JPICAgICAgICgxPDwxNCkgLyogcmVhZCBvbmx5ICovCisgICNkZWZpbmUgUEIxMTAwX1NEX1BXUjEgICAgICAgICAoMTw8MTEpIC8qIGFwcGxpZXMgcG93ZXIgdG8gU0QxICovCisgICNkZWZpbmUgUEIxMTAwX1NEX1BXUjAgICAgICAgICAoMTw8MTApIC8qIGFwcGxpZXMgcG93ZXIgdG8gU0QwICovCisgICNkZWZpbmUgUEIxMTAwX1NFTF9TRF9DT05OMSAgICAgKDE8PDkpCisgICNkZWZpbmUgUEIxMTAwX1NFTF9TRF9DT05OMCAgICAgKDE8PDgpCisgICNkZWZpbmUgUENfREVBU1NFUlRfUlNUICAgICAgICAgKDE8PDcpCisgICNkZWZpbmUgUENfRFJWX0VOICAgICAgICAgICAgICAgKDE8PDQpCisKKyNkZWZpbmUgUEIxMTAwX0dfQ09OVFJPTCAgICAgIDB4QUUwMDAwMTQgLyogZ3JhcGhpY3MgY29udHJvbCAqLworCisjZGVmaW5lIFBCMTEwMF9SU1RfVkRESSAgICAgICAweEFFMDAwMDFDCisgICNkZWZpbmUgUEIxMTAwX1NPRlRfUkVTRVQgICAgICAoMTw8MTUpIC8qIGNsZWFyIHRvIHJlc2V0IHRoZSBib2FyZCAqLworICAjZGVmaW5lIFBCMTEwMF9WRERJX01BU0sgICAgICAgICgweDFGKQorCisjZGVmaW5lIFBCMTEwMF9MRURTICAgICAgICAgICAweEFFMDAwMDE4CisKKy8qIDExOjggaXMgNCBkaXNjcmVldCBMRURzLiBDbGVhcmluZyBhIGJpdCBpbGx1bWluYXRlcyB0aGUgTEVELgorICogNzowIGlzIHRoZSBMRUQgRGlzcGxheSdzIGRlY2ltYWwgcG9pbnRzLgorICovCisjZGVmaW5lIFBCMTEwMF9IRVhfTEVEICAgICAgICAweEFFMDAwMDE4CisKKy8qIFBDTUNJQSBQQjExMDAgc3BlY2lmaWMgZGVmaW5lcyAqLworI2RlZmluZSBQQ01DSUFfTUFYX1NPQ0sgMAorI2RlZmluZSBQQ01DSUFfTlVNX1NPQ0tTIChQQ01DSUFfTUFYX1NPQ0srMSkKKworLyogVlBQL1ZDQyAqLworI2RlZmluZSBTRVRfVkNDX1ZQUChWQ0MsIFZQUCkgKCgoVkNDKTw8MikgfCAoKFZQUCk8PDApKQorCisjZW5kaWYgLyogX19BU01fUEIxMTAwX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1wYjF4MDAvcGIxNTAwLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtcGIxeDAwL3BiMTUwMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2Yzc3OTc0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLXBiMXgwMC9wYjE1MDAuaApAQCAtMCwwICsxLDUxIEBACisvKgorICogQWxjaGVteSBTZW1pIFBCMTUwMCBSZWZlcnJlbmNlIEJvYXJkCisgKgorICogQ29weXJpZ2h0IDIwMDEgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCisgKiBBdXRob3I6IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqICAgICAgICAgCXBwb3BvdkBtdmlzdGEuY29tIG9yIHNvdXJjZUBtdmlzdGEuY29tCisgKgorICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIGRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKKyAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqICA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgKgorICoKKyAqLworI2lmbmRlZiBfX0FTTV9QQjE1MDBfSAorI2RlZmluZSBfX0FTTV9QQjE1MDBfSAorCisKKyNkZWZpbmUgSURFTlRfQk9BUkRfUkVHICAgICAgICAgICAweEFFMDAwMDAwCisjZGVmaW5lIEJPQVJEX1NUQVRVU19SRUcgICAgICAgICAgMHhBRTAwMDAwNAorI2RlZmluZSBQQ0lfQk9BUkRfUkVHICAgICAgICAgICAgIDB4QUUwMDAwMTAKKyNkZWZpbmUgUENNQ0lBX0JPQVJEX1JFRyAgICAgICAgICAweEFFMDAwMDEwCisgICNkZWZpbmUgUENfREVBU1NFUlRfUlNUICAgICAgICAgICAgICAgMHg4MAorICAjZGVmaW5lIFBDX0RSVl9FTiAgICAgICAgICAgICAgICAgICAgIDB4MTAgCisjZGVmaW5lIFBCMTUwMF9HX0NPTlRST0wgICAgICAgICAgMHhBRTAwMDAxNAorI2RlZmluZSBQQjE1MDBfUlNUX1ZEREkgICAgICAgICAgIDB4QUUwMDAwMUMKKyNkZWZpbmUgUEIxNTAwX0xFRFMgICAgICAgICAgICAgICAweEFFMDAwMDE4CisgIAorI2RlZmluZSBQQjE1MDBfSEVYX0xFRCAgICAgICAgICAgIDB4QUYwMDAwMDQKKyNkZWZpbmUgUEIxNTAwX0hFWF9MRURfQkxBTksgICAgICAweEFGMDAwMDA4CisKKy8qIFBDTUNJQSBQQjE1MDAgc3BlY2lmaWMgZGVmaW5lcyAqLworI2RlZmluZSBQQ01DSUFfTUFYX1NPQ0sgMAorI2RlZmluZSBQQ01DSUFfTlVNX1NPQ0tTIChQQ01DSUFfTUFYX1NPQ0srMSkKKworLyogVlBQL1ZDQyAqLworI2RlZmluZSBTRVRfVkNDX1ZQUChWQ0MsIFZQUCkgKCgoVkNDKTw8MikgfCAoKFZQUCk8PDApKQorCisjZW5kaWYgLyogX19BU01fUEIxNTAwX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1wYjF4MDAvcGIxNTUwLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtcGIxeDAwL3BiMTU1MC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzMWQ2MDgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtcGIxeDAwL3BiMTU1MC5oCkBAIC0wLDAgKzEsMTY5IEBACisvKgorICogQU1EIEFsY2hlbXkgU2VtaSBQQjE1NTAgUmVmZXJyZW5jZSBCb2FyZAorICogQm9hcmQgUmVnaXN0ZXJzIGRlZmluZXMuCisgKgorICogQ29weXJpZ2h0IDIwMDQgRW1iZWRkZWQgRWRnZSBMTEMuCisgKiBDb3B5cmlnaHQgMjAwNSBSYWxmIEJhZWNobGUgKHJhbGZAbGludXgtbWlwcy5vcmcpCisgKgorICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIGRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKKyAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqICA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgKgorICoKKyAqLworI2lmbmRlZiBfX0FTTV9QQjE1NTBfSAorI2RlZmluZSBfX0FTTV9QQjE1NTBfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2RlZmluZSBEQkRNQV9BQzk3X1RYX0NIQU4gRFNDUl9DTUQwX1BTQzFfVFgKKyNkZWZpbmUgREJETUFfQUM5N19SWF9DSEFOIERTQ1JfQ01EMF9QU0MxX1JYCisjZGVmaW5lIERCRE1BX0kyU19UWF9DSEFOIERTQ1JfQ01EMF9QU0MzX1RYCisjZGVmaW5lIERCRE1BX0kyU19SWF9DSEFOIERTQ1JfQ01EMF9QU0MzX1JYCisKKyNkZWZpbmUgU1BJX1BTQ19CQVNFICAgICAgICBQU0MwX0JBU0VfQUREUgorI2RlZmluZSBBQzk3X1BTQ19CQVNFICAgICAgIFBTQzFfQkFTRV9BRERSCisjZGVmaW5lIFNNQlVTX1BTQ19CQVNFICAgICAgUFNDMl9CQVNFX0FERFIKKyNkZWZpbmUgSTJTX1BTQ19CQVNFICAgICAgICBQU0MzX0JBU0VfQUREUgorCisjZGVmaW5lIEJDU1JfUEhZU19BRERSIDB4QUYwMDAwMDAKKwordHlwZWRlZiB2b2xhdGlsZSBzdHJ1Y3QKK3sKKwkvKjAwKi8JdTE2IHdob2FtaTsKKwkJdTE2IHJlc2VydmVkMDsKKwkvKjA0Ki8JdTE2IHN0YXR1czsKKwkJdTE2IHJlc2VydmVkMTsKKwkvKjA4Ki8JdTE2IHN3aXRjaGVzOworCQl1MTYgcmVzZXJ2ZWQyOworCS8qMEMqLwl1MTYgcmVzZXRzOworCQl1MTYgcmVzZXJ2ZWQzOworCS8qMTAqLwl1MTYgcGNtY2lhOworCQl1MTYgcmVzZXJ2ZWQ0OworCS8qMTQqLwl1MTYgcGNpOworCQl1MTYgcmVzZXJ2ZWQ1OworCS8qMTgqLwl1MTYgbGVkczsKKwkJdTE2IHJlc2VydmVkNjsKKwkvKjFDKi8JdTE2IHN5c3RlbTsKKwkJdTE2IHJlc2VydmVkNzsKKworfSBCQ1NSOworCitzdGF0aWMgQkNTUiAqIGNvbnN0IGJjc3IgPSAoQkNTUiAqKUJDU1JfUEhZU19BRERSOworCisvKgorICogUmVnaXN0ZXIgYml0IGRlZmluaXRpb25zIGZvciB0aGUgQkNTUnMKKyAqLworI2RlZmluZSBCQ1NSX1dIT0FNSV9EQ0lECTB4MDAwRgorI2RlZmluZSBCQ1NSX1dIT0FNSV9DUExECTB4MDBGMAorI2RlZmluZSBCQ1NSX1dIT0FNSV9CT0FSRAkweDBGMDAKKworI2RlZmluZSBCQ1NSX1NUQVRVU19QQ01DSUEwVlMJMHgwMDAzCisjZGVmaW5lIEJDU1JfU1RBVFVTX1BDTUNJQTFWUwkweDAwMEMKKyNkZWZpbmUgQkNTUl9TVEFUVVNfUENNQ0lBMEZJCTB4MDAxMAorI2RlZmluZSBCQ1NSX1NUQVRVU19QQ01DSUExRkkJMHgwMDIwCisjZGVmaW5lIEJDU1JfU1RBVFVTX1NXQVBCT09UCTB4MDA0MAorI2RlZmluZSBCQ1NSX1NUQVRVU19TUkFNV0lEVEgJMHgwMDgwCisjZGVmaW5lIEJDU1JfU1RBVFVTX0ZMQVNIQlVTWQkweDAxMDAKKyNkZWZpbmUgQkNTUl9TVEFUVVNfUk9NQlVTWQkweDAyMDAKKyNkZWZpbmUgQkNTUl9TVEFUVVNfVVNCT1RHSUQJMHgwODAwCisjZGVmaW5lIEJDU1JfU1RBVFVTX1UwUlhECTB4MTAwMAorI2RlZmluZSBCQ1NSX1NUQVRVU19VMVJYRAkweDIwMDAKKyNkZWZpbmUgQkNTUl9TVEFUVVNfVTNSWEQJMHg4MDAwCisKKyNkZWZpbmUgQkNTUl9TV0lUQ0hFU19PQ1RBTAkweDAwRkYKKyNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfMQkweDAwODAKKyNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfMgkweDAwNDAKKyNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfMwkweDAwMjAKKyNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfNAkweDAwMTAKKyNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfNQkweDAwMDgKKyNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfNgkweDAwMDQKKyNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfNwkweDAwMDIKKyNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfOAkweDAwMDEKKyNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ST1RBUlkJMHgwRjAwCisKKyNkZWZpbmUgQkNTUl9SRVNFVFNfUEhZMAkweDAwMDEKKyNkZWZpbmUgQkNTUl9SRVNFVFNfUEhZMQkweDAwMDIKKyNkZWZpbmUgQkNTUl9SRVNFVFNfREMJCTB4MDAwNAorI2RlZmluZSBCQ1NSX1JFU0VUU19XU0MJCTB4MjAwMAorI2RlZmluZSBCQ1NSX1JFU0VUU19TUElTRUwJMHg0MDAwCisjZGVmaW5lIEJDU1JfUkVTRVRTX0RNQVJFUQkweDgwMDAKKworI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzBWUFAJMHgwMDAzCisjZGVmaW5lIEJDU1JfUENNQ0lBX1BDMFZDQwkweDAwMEMKKyNkZWZpbmUgQkNTUl9QQ01DSUFfUEMwRFJWRU4JMHgwMDEwCisjZGVmaW5lIEJDU1JfUENNQ0lBX1BDMFJTVAkweDAwODAKKyNkZWZpbmUgQkNTUl9QQ01DSUFfUEMxVlBQCTB4MDMwMAorI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzFWQ0MJMHgwQzAwCisjZGVmaW5lIEJDU1JfUENNQ0lBX1BDMURSVkVOCTB4MTAwMAorI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzFSU1QJMHg4MDAwCisKKyNkZWZpbmUgQkNTUl9QQ0lfTTY2RU4JCTB4MDAwMQorI2RlZmluZSBCQ1NSX1BDSV9NMzMJCTB4MDEwMAorI2RlZmluZSBCQ1NSX1BDSV9FWFRFUk5BUkIJMHgwMjAwCisjZGVmaW5lIEJDU1JfUENJX0dQSU8yMDBSU1QJMHgwNDAwCisjZGVmaW5lIEJDU1JfUENJX0NMS09VVAkJMHgwODAwCisjZGVmaW5lIEJDU1JfUENJX0NGR0hPU1QJMHgxMDAwCisKKyNkZWZpbmUgQkNTUl9MRURTX0RFQ0lNQUxTCTB4MDBGRgorI2RlZmluZSBCQ1NSX0xFRFNfTEVEMAkJMHgwMTAwCisjZGVmaW5lIEJDU1JfTEVEU19MRUQxCQkweDAyMDAKKyNkZWZpbmUgQkNTUl9MRURTX0xFRDIJCTB4MDQwMAorI2RlZmluZSBCQ1NSX0xFRFNfTEVEMwkJMHgwODAwCisKKyNkZWZpbmUgQkNTUl9TWVNURU1fVkRESQkweDAwMUYKKyNkZWZpbmUgQkNTUl9TWVNURU1fUE9XRVJPRkYJMHg0MDAwCisjZGVmaW5lIEJDU1JfU1lTVEVNX1JFU0VUCTB4ODAwMAorCisjZGVmaW5lIFBDTUNJQV9NQVhfU09DSyAxCisjZGVmaW5lIFBDTUNJQV9OVU1fU09DS1MgKFBDTUNJQV9NQVhfU09DSysxKQorCisvKiBWUFAvVkNDICovCisjZGVmaW5lIFNFVF9WQ0NfVlBQKFZDQywgVlBQLCBTTE9UKVwKKwkoKCgoVkNDKTw8MikgfCAoKFZQUCk8PDApKSA8PCAoKFNMT1QpKjgpKQorCisjaWYgZGVmaW5lZChDT05GSUdfTVREX1BCMTU1MF9CT09UKSAmJiBkZWZpbmVkKENPTkZJR19NVERfUEIxNTUwX1VTRVIpCisjZGVmaW5lIFBCMTU1MF9CT1RIX0JBTktTCisjZWxpZiBkZWZpbmVkKENPTkZJR19NVERfUEIxNTUwX0JPT1QpICYmICFkZWZpbmVkKENPTkZJR19NVERfUEIxNTUwX1VTRVIpCisjZGVmaW5lIFBCMTU1MF9CT09UX09OTFkKKyNlbGlmICFkZWZpbmVkKENPTkZJR19NVERfUEIxNTUwX0JPT1QpICYmIGRlZmluZWQoQ09ORklHX01URF9QQjE1NTBfVVNFUikKKyNkZWZpbmUgUEIxNTUwX1VTRVJfT05MWQorI2VuZGlmCisKKy8qIFRpbWluZyB2YWx1ZXMgYXMgZGVzY3JpYmVkIGluIGRhdGFib29rLCAqIG5zIHZhbHVlIHN0cmlwcGVkIG9mCisgKiBsb3dlciAyIGJpdHMuCisgKiBUaGVzZSBkZWZpbmVzIGFyZSBoZXJlIHJhdGhlciB0aGFuIGFuIFNPQzE1NTAgZ2VuZXJpYyBmaWxlIGJlY2F1c2UKKyAqIHRoZSBwYXJ0cyBjaG9zZW4gb24gYW5vdGhlciBib2FyZCBtYXkgYmUgZGlmZmVyZW50IGFuZCBtYXkgcmVxdWlyZQorICogZGlmZmVyZW50IHRpbWluZ3MuCisgKi8KKyNkZWZpbmUgTkFORF9UX0gJCQkoMTggPj4gMikKKyNkZWZpbmUgTkFORF9UX1BVTAkJCSgzMCA+PiAyKQorI2RlZmluZSBOQU5EX1RfU1UJCQkoMzAgPj4gMikKKyNkZWZpbmUgTkFORF9UX1dICQkJKDMwID4+IDIpCisKKy8qIEJpdGZpZWxkIHNoaWZ0IGFtb3VudHMgKi8KKyNkZWZpbmUgTkFORF9UX0hfU0hJRlQJCTAKKyNkZWZpbmUgTkFORF9UX1BVTF9TSElGVAk0CisjZGVmaW5lIE5BTkRfVF9TVV9TSElGVAkJOAorI2RlZmluZSBOQU5EX1RfV0hfU0hJRlQJCTEyCisKKyNkZWZpbmUgTkFORF9USU1JTkcJKChOQU5EX1RfSCAgICYgMHhGKQk8PCBOQU5EX1RfSF9TSElGVCkgICB8IFwKKwkJCSgoTkFORF9UX1BVTCAmIDB4RikJPDwgTkFORF9UX1BVTF9TSElGVCkgfCBcCisJCQkoKE5BTkRfVF9TVSAgJiAweEYpCTw8IE5BTkRfVF9TVV9TSElGVCkgIHwgXAorCQkJKChOQU5EX1RfV0ggICYgMHhGKQk8PCBOQU5EX1RfV0hfU0hJRlQpCisKKyNlbmRpZiAvKiBfX0FTTV9QQjE1NTBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLXJtMjAwL2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLXJtMjAwL2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0ODczNjAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtcm0yMDAvY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCBSYWxmIEJhZWNobGUKKyAqCisgKiBTTkkgUk0yMDAgQyBhcHBhcmVudGx5IHdhcyBvbmx5IHNoaXBwZWQgd2l0aCBSNDYwMCBWMi4wIGFuZCBSNTAwMCBwcm9jZXNzb3JzLgorICovCisjaWZuZGVmIF9fQVNNX01BQ0hfUk0yMDBfQ1BVX0ZFQVRVUkVfT1ZFUlJJREVTX0gKKyNkZWZpbmUgX19BU01fTUFDSF9STTIwMF9DUFVfRkVBVFVSRV9PVkVSUklERVNfSAorCisjaW5jbHVkZSA8Y3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmg+CisKKyNkZWZpbmUgY3B1X2hhc190bGIJCTEKKyNkZWZpbmUgY3B1X2hhc180a2V4CQkxCisjZGVmaW5lIGNwdV9oYXNfNGt0bGIJCTEKKyNkZWZpbmUgY3B1X2hhc19mcHUJCTEKKyNkZWZpbmUgY3B1X2hhc18zMmZwcgkJMQorI2RlZmluZSBjcHVfaGFzX2NvdW50ZXIJCTEKKyNkZWZpbmUgY3B1X2hhc193YXRjaAkJMAorI2RlZmluZSBjcHVfaGFzX21pcHMxNgkJMAorI2RlZmluZSBjcHVfaGFzX2RpdmVjCQkwCisjZGVmaW5lIGNwdV9oYXNfdmNlCQkwCisjZGVmaW5lIGNwdV9oYXNfY2FjaGVfY2RleF9wCTEKKyNkZWZpbmUgY3B1X2hhc19jYWNoZV9jZGV4X3MJMAorI2RlZmluZSBjcHVfaGFzX3ByZWZldGNoCTAKKyNkZWZpbmUgY3B1X2hhc19tY2hlY2sJCTAKKyNkZWZpbmUgY3B1X2hhc19lanRhZwkJMAorI2RlZmluZSBjcHVfaGFzX2xsc2MJCTEKKyNkZWZpbmUgY3B1X2hhc192dGFnX2ljYWNoZQkwCisjZGVmaW5lIGNwdV9oYXNfZGNfYWxpYXNlcwkoUEFHRV9TSVpFIDwgMHg0MDAwKQorI2RlZmluZSBjcHVfaGFzX2ljX2ZpbGxzX2ZfZGMJMAorI2RlZmluZSBjcHVfaGFzX25vZnB1ZXgJCTAKKyNkZWZpbmUgY3B1X2hhc182NGJpdHMJCTEKKworI2RlZmluZSBjcHVfaGFzX3N1YnNldF9wY2FjaGVzCTAJLyogTm8gUy1jYWNoZSBvbiBSNTAwMCBJIHRoaW5rIC4uLiAgKi8KKyNkZWZpbmUgY3B1X2RjYWNoZV9saW5lX3NpemUoKQkzMgorI2RlZmluZSBjcHVfaWNhY2hlX2xpbmVfc2l6ZSgpCTMyCisjZGVmaW5lIGNwdV9zY2FjaGVfbGluZV9zaXplKCkJMAkvKiBObyBTLWNhY2hlIG9uIFI1MDAwIEkgdGhpbmsgLi4uICAqLworCisjZW5kaWYgLyogX19BU01fTUFDSF9STTIwMF9DUFVfRkVBVFVSRV9PVkVSUklERVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLXJtMjAwL21jMTQ2ODE4cnRjLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtcm0yMDAvbWMxNDY4MThydGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzdhZTY4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLXJtMjAwL21jMTQ2ODE4cnRjLmgKQEAgLTAsMCArMSwxNyBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBieSBSYWxmIEJhZWNobGUKKyAqCisgKiBSVEMgcm91dGluZXMgZm9yIFBDIHN0eWxlIGF0dGFjaGVkIERhbGxhcyBjaGlwIHdpdGggQVJDIGVwb2NoLgorICovCisjaWZuZGVmIF9fQVNNX01BQ0hfUk0yMDBfTUMxNDY4MThSVENfSAorI2RlZmluZSBfX0FTTV9NQUNIX1JNMjAwX01DMTQ2ODE4UlRDX0gKKworI2RlZmluZSBtYzE0NjgxOF9kZWNvZGVfeWVhcih5ZWFyKSAoKHllYXIpICsgMTk4MCkKKworI2luY2x1ZGVfbmV4dCA8bWMxNDY4MThydGMuaD4KKworI2VuZGlmIC8qIF9fQVNNX01BQ0hfUk0yMDBfTUMxNDY4MThSVENfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLXNpYnl0ZS9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1zaWJ5dGUvY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNhMmNjNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1zaWJ5dGUvY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCBSYWxmIEJhZWNobGUKKyAqLworI2lmbmRlZiBfX0FTTV9NQUNIX1NJQllURV9DUFVfRkVBVFVSRV9PVkVSUklERVNfSAorI2RlZmluZSBfX0FTTV9NQUNIX1NJQllURV9DUFVfRkVBVFVSRV9PVkVSUklERVNfSAorCisvKgorICogU2lieXRlIGFyZSBNSVBTNjQgcHJvY2Vzc29ycyB3ZWlyZWQgdG8gYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgY3B1X2hhc193YXRjaAkJMQorI2RlZmluZSBjcHVfaGFzX21pcHMxNgkJMAorI2RlZmluZSBjcHVfaGFzX2RpdmVjCQkxCisjZGVmaW5lIGNwdV9oYXNfdmNlCQkwCisjZGVmaW5lIGNwdV9oYXNfY2FjaGVfY2RleF9wCTAKKyNkZWZpbmUgY3B1X2hhc19jYWNoZV9jZGV4X3MJMAorI2RlZmluZSBjcHVfaGFzX3ByZWZldGNoCTEKKyNkZWZpbmUgY3B1X2hhc19tY2hlY2sJCTEKKyNkZWZpbmUgY3B1X2hhc19lanRhZwkJMQorCisjZGVmaW5lIGNwdV9oYXNfbGxzYwkJMQorI2RlZmluZSBjcHVfaGFzX3Z0YWdfaWNhY2hlCTEKKyNkZWZpbmUgY3B1X2hhc19kY19hbGlhc2VzCTAKKyNkZWZpbmUgY3B1X2hhc19pY19maWxsc19mX2RjCTAKKyNkZWZpbmUgY3B1X2ljYWNoZV9zbm9vcHNfcmVtb3RlX3N0b3JlCTAKKworI2RlZmluZSBjcHVfaGFzX25vZnB1ZXgJCTAKKyNkZWZpbmUgY3B1X2hhc182NGJpdHMJCTEKKworI2RlZmluZSBjcHVfaGFzX3N1YnNldF9wY2FjaGVzCTAKKworI2RlZmluZSBjcHVfZGNhY2hlX2xpbmVfc2l6ZSgpCTMyCisjZGVmaW5lIGNwdV9pY2FjaGVfbGluZV9zaXplKCkJMzIKKyNkZWZpbmUgY3B1X3NjYWNoZV9saW5lX3NpemUoKQkzMgorCisjZW5kaWYgLyogX19BU01fTUFDSF9TSUJZVEVfQ1BVX0ZFQVRVUkVfT1ZFUlJJREVTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC12cjQxeHgvdGltZXguaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC12cjQxeHgvdGltZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDcxNDg1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLXZyNDF4eC90aW1leC5oCkBAIC0wLDAgKzEsMTggQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgYnkgUmFsZiBCYWVjaGxlCisgKi8KKy8qCisgKiBDaGFuZ2VzOgorICogIFlvaWNoaSBZdWFzYSA8eXVhc2FAaGguaWlqNHUub3IuanA+CisgKiAgLSBDTE9DS19USUNLX1JBVEUgaXMgY2hhbmdlZCBpbnRvIDMyNzY4IGZyb20gNjE0NDAwMC4KKyAqLworI2lmbmRlZiBfX0FTTV9NQUNIX1ZSNDFYWF9USU1FWF9ICisjZGVmaW5lIF9fQVNNX01BQ0hfVlI0MVhYX1RJTUVYX0gKKworI2RlZmluZSBDTE9DS19USUNLX1JBVEUJCTMyNzY4CisKKyNlbmRpZiAvKiBfX0FTTV9NQUNIX1ZSNDFYWF9USU1FWF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gteW9zZW1pdGUvY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gteW9zZW1pdGUvY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg2MDNlMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC15b3NlbWl0ZS9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaApAQCAtMCwwICsxLDQ1IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0IFJhbGYgQmFlY2hsZQorICovCisjaWZuZGVmIF9fQVNNX01BQ0hfWU9TRU1JVEVfQ1BVX0ZFQVRVUkVfT1ZFUlJJREVTX0gKKyNkZWZpbmUgX19BU01fTUFDSF9ZT1NFTUlURV9DUFVfRkVBVFVSRV9PVkVSUklERVNfSAorCisvKgorICogTW9tZW50dW0gSmFndWFyIEFUWCBhbHdheXMgaGFzIHRoZSBSTTkwMDAgcHJvY2Vzc29yLgorICovCisjZGVmaW5lIGNwdV9oYXNfd2F0Y2gJCTEKKyNkZWZpbmUgY3B1X2hhc19taXBzMTYJCTAKKyNkZWZpbmUgY3B1X2hhc19kaXZlYwkJMAorI2RlZmluZSBjcHVfaGFzX3ZjZQkJMAorI2RlZmluZSBjcHVfaGFzX2NhY2hlX2NkZXhfcAkwCisjZGVmaW5lIGNwdV9oYXNfY2FjaGVfY2RleF9zCTAKKyNkZWZpbmUgY3B1X2hhc19wcmVmZXRjaAkxCisjZGVmaW5lIGNwdV9oYXNfbWNoZWNrCQkwCisjZGVmaW5lIGNwdV9oYXNfZWp0YWcJCTAKKworI2RlZmluZSBjcHVfaGFzX2xsc2MJCTEKKyNkZWZpbmUgY3B1X2hhc192dGFnX2ljYWNoZQkwCisjZGVmaW5lIGNwdV9oYXNfZGNfYWxpYXNlcwkwCisjZGVmaW5lIGNwdV9oYXNfaWNfZmlsbHNfZl9kYwkwCisjZGVmaW5lIGNwdV9pY2FjaGVfc25vb3BzX3JlbW90ZV9zdG9yZQkwCisKKyNkZWZpbmUgY3B1X2hhc19ub2ZwdWV4CQkwCisjZGVmaW5lIGNwdV9oYXNfNjRiaXRzCQkxCisKKyNkZWZpbmUgY3B1X2hhc19zdWJzZXRfcGNhY2hlcwkwCisKKyNkZWZpbmUgY3B1X2RjYWNoZV9saW5lX3NpemUoKQkzMgorI2RlZmluZSBjcHVfaWNhY2hlX2xpbmVfc2l6ZSgpCTMyCisjZGVmaW5lIGNwdV9zY2FjaGVfbGluZV9zaXplKCkJMzIKKworLyoKKyAqIE9uIHRoZSBSTTkwMDAgd2UgbmVlZCB0byBlbnN1cmUgdGhhdCBJLWNhY2hlIGxpbmVzIGJlaW5nIGZldGNoZXMgb25seQorICogY29udGFpbiB2YWxpZCBpbnN0cnVjdGlvbnMgYXJlIGZ1bm55IHRoaW5ncyB3aWxsIGhhcHBlbi4KKyAqLworI2RlZmluZSBQTEFUX1RSQU1QT0xJTkVfU1RVRkZfTElORQkzMlVMCisKKyNlbmRpZiAvKiBfX0FTTV9NQUNIX1lPU0VNSVRFX0NQVV9GRUFUVVJFX09WRVJSSURFU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hcnZlbGwuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFydmVsbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyMjViMzMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21hcnZlbGwuaApAQCAtMCwwICsxLDU2IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IGJ5IFJhbGYgQmFlY2hsZQorICovCisjaWZuZGVmIF9fQVNNX01JUFNfTUFSVkVMTF9ICisjZGVmaW5lIF9fQVNNX01JUFNfTUFSVkVMTF9ICisKKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKworI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWFydmVsbF9iYXNlOworCisvKgorICogQmVjYXVzZSBvZiBhbiBlcnJvci9wZWN1bGlhcml0eSBpbiB0aGUgR2FsaWxlbyBjaGlwLCB3ZSBuZWVkIHRvIHN3YXAgdGhlCisgKiBieXRlcyB3aGVuIHJ1bm5pbmcgYmlnZW5kaWFuLgorICovCisjZGVmaW5lIF9fTVZfUkVBRChvZnMpCQkJCQkJCVwKKwkoKih2b2xhdGlsZSB1MzIgKikobWFydmVsbF9iYXNlKyhvZnMpKSkKKyNkZWZpbmUgX19NVl9XUklURShvZnMsIGRhdGEpCQkJCQkJXAorCWRvIHsgKih2b2xhdGlsZSB1MzIgKikobWFydmVsbF9iYXNlKyhvZnMpKSA9IChkYXRhKTsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBNVl9SRUFEKG9mcykJCWxlMzJfdG9fY3B1KF9fTVZfUkVBRChvZnMpKQorI2RlZmluZSBNVl9XUklURShvZnMsIGRhdGEpCV9fTVZfV1JJVEUob2ZzLCBjcHVfdG9fbGUzMihkYXRhKSkKKworI2RlZmluZSBNVl9SRUFEXzE2KG9mcykJCQkJCQkJXAorICAgICAgICBsZTE2X3RvX2NwdSgqKHZvbGF0aWxlIHUxNiAqKShtYXJ2ZWxsX2Jhc2UrKG9mcykpKQorI2RlZmluZSBNVl9XUklURV8xNihvZnMsIGRhdGEpICBcCisgICAgICAgICoodm9sYXRpbGUgdTE2ICopKG1hcnZlbGxfYmFzZSsob2ZzKSkgPSBjcHVfdG9fbGUxNihkYXRhKQorCisjZGVmaW5lIE1WX1JFQURfOChvZnMpCQkJCQkJCVwKKwkqKHZvbGF0aWxlIHU4ICopKG1hcnZlbGxfYmFzZSsob2ZzKSkKKyNkZWZpbmUgTVZfV1JJVEVfOChvZnMsIGRhdGEpCQkJCQkJXAorCSoodm9sYXRpbGUgdTggKikobWFydmVsbF9iYXNlKyhvZnMpKSA9IGRhdGEKKworI2RlZmluZSBNVl9TRVRfUkVHX0JJVFMob2ZzLCBiaXRzKQkJCQkJXAorCSgqKCh2b2xhdGlsZSB1MzIgKikobWFydmVsbF9iYXNlICsgKG9mcykpKSkgfD0gKCh1MzIpY3B1X3RvX2xlMzIoYml0cykpCisjZGVmaW5lIE1WX1JFU0VUX1JFR19CSVRTKG9mcywgYml0cykJCQkJCVwKKwkoKigodm9sYXRpbGUgdTMyICopKG1hcnZlbGxfYmFzZSArIChvZnMpKSkpICY9IH4oKHUzMiljcHVfdG9fbGUzMihiaXRzKSkKKworZXh0ZXJuIHN0cnVjdCBwY2lfb3BzIG12X3BjaV9vcHM7CisKK3N0cnVjdCBtdl9wY2lfY29udHJvbGxlciB7CisJc3RydWN0IHBjaV9jb250cm9sbGVyICAgcGNpYzsKKworCS8qCisJICogR1QtNjQyNDAvTVYtNjQzNDAgc3BlY2lmaWMsIHBlciBob3N0IGJ1cyBpbmZvcm1hdGlvbgorCSAqLworCXVuc2lnbmVkIGxvbmcgICBjb25maWdfYWRkcjsKKwl1bnNpZ25lZCBsb25nICAgY29uZmlnX3ZyZWc7Cit9OworCisjZW5kaWYJLyogX19BU01fTUlQU19NQVJWRUxMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWMxNDY4MTgtdGltZS5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYzE0NjgxOC10aW1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJjMmQyYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWMxNDY4MTgtdGltZS5oCkBAIC0wLDAgKzEsMTI4IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogTWFjaGluZSBkZXBlbmRlbnQgYWNjZXNzIGZ1bmN0aW9ucyBmb3IgUlRDIHJlZ2lzdGVycy4KKyAqLworI2lmbmRlZiBfX0FTTV9NQzE0NjgxOF9USU1FX0gKKyNkZWZpbmUgX19BU01fTUMxNDY4MThfVElNRV9ICisKKyNpbmNsdWRlIDxsaW51eC9iY2QuaD4KKyNpbmNsdWRlIDxsaW51eC9tYzE0NjgxOHJ0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKworLyoKKyAqIEZvciBjaGVjayB0aW1pbmcgY2FsbCBzZXRfcnRjX21tc3MoKSA1MDBtczsgdXNlZCBpbiB0aW1lciBpbnRlcnJ1cHQuCisgKi8KKyNkZWZpbmUgVVNFQ19BRlRFUgk1MDAwMDAKKyNkZWZpbmUgVVNFQ19CRUZPUkUJNTAwMDAwCisKKy8qCisgKiBJbiBvcmRlciB0byBzZXQgdGhlIENNT1MgY2xvY2sgcHJlY2lzZWx5LCBzZXRfcnRjX21tc3MgaGFzIHRvIGJlCisgKiBjYWxsZWQgNTAwIG1zIGFmdGVyIHRoZSBzZWNvbmQgbm93dGltZSBoYXMgc3RhcnRlZCwgYmVjYXVzZSB3aGVuCisgKiBub3d0aW1lIGlzIHdyaXR0ZW4gaW50byB0aGUgcmVnaXN0ZXJzIG9mIHRoZSBDTU9TIGNsb2NrLCBpdCB3aWxsCisgKiBqdW1wIHRvIHRoZSBuZXh0IHNlY29uZCBwcmVjaXNlbHkgNTAwIG1zIGxhdGVyLiBDaGVjayB0aGUgTW90b3JvbGEKKyAqIE1DMTQ2ODE4QSBvciBEYWxsYXMgRFMxMjg4NyBkYXRhIHNoZWV0IGZvciBkZXRhaWxzLgorICoKKyAqIEJVRzogVGhpcyByb3V0aW5lIGRvZXMgbm90IGhhbmRsZSBob3VyIG92ZXJmbG93IHByb3Blcmx5OyBpdCBqdXN0CisgKiAgICAgIHNldHMgdGhlIG1pbnV0ZXMuIFVzdWFsbHkgeW91J2xsIG9ubHkgbm90aWNlIHRoYXQgYWZ0ZXIgcmVib290IQorICovCitzdGF0aWMgaW5saW5lIGludCBtYzE0NjgxOF9zZXRfcnRjX21tc3ModW5zaWduZWQgbG9uZyBub3d0aW1lKQoreworCWludCByZWFsX3NlY29uZHMsIHJlYWxfbWludXRlcywgY21vc19taW51dGVzOworCXVuc2lnbmVkIGNoYXIgc2F2ZV9jb250cm9sLCBzYXZlX2ZyZXFfc2VsZWN0OworCWludCByZXR2YWwgPSAwOworCisJc2F2ZV9jb250cm9sID0gQ01PU19SRUFEKFJUQ19DT05UUk9MKTsgLyogdGVsbCB0aGUgY2xvY2sgaXQncyBiZWluZyBzZXQgKi8KKwlDTU9TX1dSSVRFKChzYXZlX2NvbnRyb2x8UlRDX1NFVCksIFJUQ19DT05UUk9MKTsKKworCXNhdmVfZnJlcV9zZWxlY3QgPSBDTU9TX1JFQUQoUlRDX0ZSRVFfU0VMRUNUKTsgLyogc3RvcCBhbmQgcmVzZXQgcHJlc2NhbGVyICovCisJQ01PU19XUklURSgoc2F2ZV9mcmVxX3NlbGVjdHxSVENfRElWX1JFU0VUMiksIFJUQ19GUkVRX1NFTEVDVCk7CisKKwljbW9zX21pbnV0ZXMgPSBDTU9TX1JFQUQoUlRDX01JTlVURVMpOworCWlmICghKHNhdmVfY29udHJvbCAmIFJUQ19ETV9CSU5BUlkpIHx8IFJUQ19BTFdBWVNfQkNEKQorCQlCQ0RfVE9fQklOKGNtb3NfbWludXRlcyk7CisKKwkvKgorCSAqIHNpbmNlIHdlJ3JlIG9ubHkgYWRqdXN0aW5nIG1pbnV0ZXMgYW5kIHNlY29uZHMsCisJICogZG9uJ3QgaW50ZXJmZXJlIHdpdGggaG91ciBvdmVyZmxvdy4gVGhpcyBhdm9pZHMKKwkgKiBtZXNzaW5nIHdpdGggdW5rbm93biB0aW1lIHpvbmVzIGJ1dCByZXF1aXJlcyB5b3VyCisJICogUlRDIG5vdCB0byBiZSBvZmYgYnkgbW9yZSB0aGFuIDE1IG1pbnV0ZXMKKwkgKi8KKwlyZWFsX3NlY29uZHMgPSBub3d0aW1lICUgNjA7CisJcmVhbF9taW51dGVzID0gbm93dGltZSAvIDYwOworCWlmICgoKGFicyhyZWFsX21pbnV0ZXMgLSBjbW9zX21pbnV0ZXMpICsgMTUpLzMwKSAmIDEpCisJCXJlYWxfbWludXRlcyArPSAzMDsJCS8qIGNvcnJlY3QgZm9yIGhhbGYgaG91ciB0aW1lIHpvbmUgKi8KKwlyZWFsX21pbnV0ZXMgJT0gNjA7CisKKwlpZiAoYWJzKHJlYWxfbWludXRlcyAtIGNtb3NfbWludXRlcykgPCAzMCkgeworCQlpZiAoIShzYXZlX2NvbnRyb2wgJiBSVENfRE1fQklOQVJZKSB8fCBSVENfQUxXQVlTX0JDRCkgeworCQkJQklOX1RPX0JDRChyZWFsX3NlY29uZHMpOworCQkJQklOX1RPX0JDRChyZWFsX21pbnV0ZXMpOworCQl9CisJCUNNT1NfV1JJVEUocmVhbF9zZWNvbmRzLFJUQ19TRUNPTkRTKTsKKwkJQ01PU19XUklURShyZWFsX21pbnV0ZXMsUlRDX01JTlVURVMpOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJICAgICAgICJzZXRfcnRjX21tc3M6IGNhbid0IHVwZGF0ZSBmcm9tICVkIHRvICVkXG4iLAorCQkgICAgICAgY21vc19taW51dGVzLCByZWFsX21pbnV0ZXMpOworCQlyZXR2YWwgPSAtMTsKKwl9CisKKwkvKiBUaGUgZm9sbG93aW5nIGZsYWdzIGhhdmUgdG8gYmUgcmVsZWFzZWQgZXhhY3RseSBpbiB0aGlzIG9yZGVyLAorCSAqIG90aGVyd2lzZSB0aGUgRFMxMjg4NyAocG9wdWxhciBNQzE0NjgxOEEgY2xvbmUgd2l0aCBpbnRlZ3JhdGVkCisJICogYmF0dGVyeSBhbmQgcXVhcnR6KSB3aWxsIG5vdCByZXNldCB0aGUgb3NjaWxsYXRvciBhbmQgd2lsbCBub3QKKwkgKiB1cGRhdGUgcHJlY2lzZWx5IDUwMCBtcyBsYXRlci4gWW91IHdvbid0IGZpbmQgdGhpcyBtZW50aW9uZWQgaW4KKwkgKiB0aGUgRGFsbGFzIFNlbWljb25kdWN0b3IgZGF0YSBzaGVldHMsIGJ1dCB3aG8gYmVsaWV2ZXMgZGF0YQorCSAqIHNoZWV0cyBhbnl3YXkgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gTWFya3VzIEt1aG4KKwkgKi8KKwlDTU9TX1dSSVRFKHNhdmVfY29udHJvbCwgUlRDX0NPTlRST0wpOworCUNNT1NfV1JJVEUoc2F2ZV9mcmVxX3NlbGVjdCwgUlRDX0ZSRVFfU0VMRUNUKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtYzE0NjgxOF9nZXRfY21vc190aW1lKHZvaWQpCit7CisJdW5zaWduZWQgaW50IHllYXIsIG1vbiwgZGF5LCBob3VyLCBtaW4sIHNlYzsKKwlpbnQgaTsKKworCS8qCisJICogVGhlIExpbnV4IGludGVycHJldGF0aW9uIG9mIHRoZSBDTU9TIGNsb2NrIHJlZ2lzdGVyIGNvbnRlbnRzOgorCSAqIFdoZW4gdGhlIFVwZGF0ZS1Jbi1Qcm9ncmVzcyAoVUlQKSBmbGFnIGdvZXMgZnJvbSAxIHRvIDAsIHRoZQorCSAqIFJUQyByZWdpc3RlcnMgc2hvdyB0aGUgc2Vjb25kIHdoaWNoIGhhcyBwcmVjaXNlbHkganVzdCBzdGFydGVkLgorCSAqIExldCdzIGhvcGUgb3RoZXIgb3BlcmF0aW5nIHN5c3RlbXMgaW50ZXJwcmV0IHRoZSBSVEMgdGhlIHNhbWUgd2F5LgorCSAqLworCisJLyogcmVhZCBSVEMgZXhhY3RseSBvbiBmYWxsaW5nIGVkZ2Ugb2YgdXBkYXRlIGZsYWcgKi8KKwlmb3IgKGkgPSAwIDsgaSA8IDEwMDAwMDAgOyBpKyspCS8qIG1heSB0YWtlIHVwIHRvIDEgc2Vjb25kLi4uICovCisJCWlmIChDTU9TX1JFQUQoUlRDX0ZSRVFfU0VMRUNUKSAmIFJUQ19VSVApCisJCQlicmVhazsKKwlmb3IgKGkgPSAwIDsgaSA8IDEwMDAwMDAgOyBpKyspCS8qIG11c3QgdHJ5IGF0IGxlYXN0IDIuMjI4IG1zICovCisJCWlmICghKENNT1NfUkVBRChSVENfRlJFUV9TRUxFQ1QpICYgUlRDX1VJUCkpCisJCQlicmVhazsKKworCWRvIHsgLyogSXNuJ3QgdGhpcyBvdmVya2lsbCA/IFVJUCBhYm92ZSBzaG91bGQgZ3VhcmFudGVlIGNvbnNpc3RlbmN5ICovCisJCXNlYyA9IENNT1NfUkVBRChSVENfU0VDT05EUyk7CisJCW1pbiA9IENNT1NfUkVBRChSVENfTUlOVVRFUyk7CisJCWhvdXIgPSBDTU9TX1JFQUQoUlRDX0hPVVJTKTsKKwkJZGF5ID0gQ01PU19SRUFEKFJUQ19EQVlfT0ZfTU9OVEgpOworCQltb24gPSBDTU9TX1JFQUQoUlRDX01PTlRIKTsKKwkJeWVhciA9IENNT1NfUkVBRChSVENfWUVBUik7CisJfSB3aGlsZSAoc2VjICE9IENNT1NfUkVBRChSVENfU0VDT05EUykpOworCisJaWYgKCEoQ01PU19SRUFEKFJUQ19DT05UUk9MKSAmIFJUQ19ETV9CSU5BUlkpIHx8IFJUQ19BTFdBWVNfQkNEKSB7CisJCUJDRF9UT19CSU4oc2VjKTsKKwkJQkNEX1RPX0JJTihtaW4pOworCQlCQ0RfVE9fQklOKGhvdXIpOworCQlCQ0RfVE9fQklOKGRheSk7CisJCUJDRF9UT19CSU4obW9uKTsKKwkJQkNEX1RPX0JJTih5ZWFyKTsKKwl9CisJeWVhciA9IG1jMTQ2ODE4X2RlY29kZV95ZWFyKHllYXIpOworCisJcmV0dXJuIG1rdGltZSh5ZWFyLCBtb24sIGRheSwgaG91ciwgbWluLCBzZWMpOworfQorCisjZW5kaWYgLyogX19BU01fTUMxNDY4MThfVElNRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21jMTQ2ODE4cnRjLmggYi9pbmNsdWRlL2FzbS1taXBzL21jMTQ2ODE4cnRjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhiNGRhNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWMxNDY4MThydGMuaApAQCAtMCwwICsxLDE2IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogTWFjaGluZSBkZXBlbmRlbnQgYWNjZXNzIGZ1bmN0aW9ucyBmb3IgUlRDIHJlZ2lzdGVycy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDIwMDAgUmFsZiBCYWVjaGxlCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgIE1hY2llaiBXLiBSb3p5Y2tpCisgKi8KKyNpZm5kZWYgX0FTTV9NQzE0NjgxOFJUQ19ICisjZGVmaW5lIF9BU01fTUMxNDY4MThSVENfSAorCisjaW5jbHVkZSA8bWMxNDY4MThydGMuaD4KKworI2VuZGlmIC8qIF9BU01fTUMxNDY4MThSVENfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9taXBzLWJvYXJkcy9hdGxhcy5oIGIvaW5jbHVkZS9hc20tbWlwcy9taXBzLWJvYXJkcy9hdGxhcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5OTgxNTEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21pcHMtYm9hcmRzL2F0bGFzLmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENhcnN0ZW4gTGFuZ2dhYXJkLCBjYXJzdGVubEBtaXBzLmNvbQorICogQ29weXJpZ2h0IChDKSAyMDAwIE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChWZXJzaW9uIDIpIGFzCisgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICoKKyAqIERlZmluZXMgb2YgdGhlIEF0bGFzIGJvYXJkIHNwZWNpZmljIGFkZHJlc3MtTUFQLCByZWdpc3RlcnMsIGV0Yy4KKyAqCisgKi8KKyNpZm5kZWYgX01JUFNfQVRMQVNfSAorI2RlZmluZSBfTUlQU19BVExBU19ICisKKyNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CisKKy8qCisgKiBBdGxhcyBSVEMtZGV2aWNlIGluZGlyZWN0IHJlZ2lzdGVyIGFjY2Vzcy4KKyAqLworI2RlZmluZSBBVExBU19SVENfQURSX1JFRyAgICAgICAweDFmMDAwODAwCisjZGVmaW5lIEFUTEFTX1JUQ19EQVRfUkVHICAgICAgIDB4MWYwMDA4MDgKKworCisvKgorICogQXRsYXMgaW50ZXJydXB0IGNvbnRyb2xsZXIgcmVnaXN0ZXIgYmFzZS4KKyAqLworI2RlZmluZSBBVExBU19JQ1RSTF9SRUdTX0JBU0UgICAweDFmMDAwMDAwCisKKy8qCisgKiBBdGxhcyBVQVJUIHJlZ2lzdGVyIGJhc2UuCisgKi8KKyNkZWZpbmUgQVRMQVNfVUFSVF9SRUdTX0JBU0UgICAgMHgxZjAwMDkwMAorI2RlZmluZSBBVExBU19CQVNFX0JBVUQgKCAzNjg2NDAwIC8gMTYgKQorCisvKgorICogQXRsYXMgUFNVIHN0YW5kYnkgcmVnaXN0ZXIuCisgKi8KKyNkZWZpbmUgQVRMQVNfUFNVU1RCWV9SRUcgICAgICAgMHgxZjAwMDYwMAorI2RlZmluZSBBVExBU19HT1NUQlkgICAgICAgICAgICAweDRkCisKKy8qCisgKiBXZSBtYWtlIGEgdW5pdmVyc2FsIGFzc3VtcHRpb24gYWJvdXQgdGhlIHdheSB0aGUgYm9vdGxvYWRlciAoWUFNT04pCisgKiBoYXZlIGxvY2F0ZWQgdGhlIFBoaWxpcHMgU0FBOTczMCBjaGlwLgorICogVGhpcyBpcyBub3QgaWRlYWwsIGJ1dCBpcyBuZWVkZWQgZm9yIHNldHRpbmcgdXAgcmVtb3RlIGRlYnVnZ2luZyBhcworICogc29vbiBhcyBwb3NzaWJsZS4KKyAqLworI2RlZmluZSBBVExBU19TQUE5NzMwX1JFRwkweDEwODAwMDAwCisKKyNkZWZpbmUgQVRMQVNfU0FBOTczMF9CQVVEQ0xPQ0sJMzY5MjMwMAorCisjZW5kaWYgLyogIShfTUlQU19BVExBU19IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9taXBzLWJvYXJkcy9hdGxhc2ludC5oIGIvaW5jbHVkZS9hc20tbWlwcy9taXBzLWJvYXJkcy9hdGxhc2ludC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiYTM1YzEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21pcHMtYm9hcmRzL2F0bGFzaW50LmgKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENhcnN0ZW4gTGFuZ2dhYXJkLCBjYXJzdGVubEBtaXBzLmNvbQorICogQ29weXJpZ2h0IChDKSAxOTk5IE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChWZXJzaW9uIDIpIGFzCisgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICoKKyAqIERlZmluZXMgZm9yIHRoZSBBdGxhcyBpbnRlcnJ1cHQgY29udHJvbGxlci4KKyAqCisgKi8KKyNpZm5kZWYgX01JUFNfQVRMQVNJTlRfSAorI2RlZmluZSBfTUlQU19BVExBU0lOVF9ICisKKyNkZWZpbmUgQVRMQVNJTlRfQkFTRQkJMQorI2RlZmluZSBBVExBU0lOVF9VQVJUCQkoQVRMQVNJTlRfQkFTRSswKQorI2RlZmluZSBBVExBU0lOVF9USU0wCQkoQVRMQVNJTlRfQkFTRSsxKQorI2RlZmluZSBBVExBU0lOVF9SRVMyCQkoQVRMQVNJTlRfQkFTRSsyKQorI2RlZmluZSBBVExBU0lOVF9SRVMzCQkoQVRMQVNJTlRfQkFTRSszKQorI2RlZmluZSBBVExBU0lOVF9SVEMJCShBVExBU0lOVF9CQVNFKzQpCisjZGVmaW5lIEFUTEFTSU5UX0NPUkVISQkJKEFUTEFTSU5UX0JBU0UrNSkKKyNkZWZpbmUgQVRMQVNJTlRfQ09SRUxPCQkoQVRMQVNJTlRfQkFTRSs2KQorI2RlZmluZSBBVExBU0lOVF9SRVM3CQkoQVRMQVNJTlRfQkFTRSs3KQorI2RlZmluZSBBVExBU0lOVF9QQ0lBCQkoQVRMQVNJTlRfQkFTRSs4KQorI2RlZmluZSBBVExBU0lOVF9QQ0lCCQkoQVRMQVNJTlRfQkFTRSs5KQorI2RlZmluZSBBVExBU0lOVF9QQ0lDCQkoQVRMQVNJTlRfQkFTRSsxMCkKKyNkZWZpbmUgQVRMQVNJTlRfUENJRAkJKEFUTEFTSU5UX0JBU0UrMTEpCisjZGVmaW5lIEFUTEFTSU5UX0VOVU0JCShBVExBU0lOVF9CQVNFKzEyKQorI2RlZmluZSBBVExBU0lOVF9ERUcJCShBVExBU0lOVF9CQVNFKzEzKQorI2RlZmluZSBBVExBU0lOVF9BVFhGQUlMCShBVExBU0lOVF9CQVNFKzE0KQorI2RlZmluZSBBVExBU0lOVF9JTlRBCQkoQVRMQVNJTlRfQkFTRSsxNSkKKyNkZWZpbmUgQVRMQVNJTlRfSU5UQgkJKEFUTEFTSU5UX0JBU0UrMTYpCisjZGVmaW5lIEFUTEFTSU5UX0VUSAkJQVRMQVNJTlRfSU5UQgorI2RlZmluZSBBVExBU0lOVF9JTlRDCQkoQVRMQVNJTlRfQkFTRSsxNykKKyNkZWZpbmUgQVRMQVNJTlRfU0NTSQkJQVRMQVNJTlRfSU5UQworI2RlZmluZSBBVExBU0lOVF9JTlRECQkoQVRMQVNJTlRfQkFTRSsxOCkKKyNkZWZpbmUgQVRMQVNJTlRfU0VSUgkJKEFUTEFTSU5UX0JBU0UrMTkpCisjZGVmaW5lIEFUTEFTSU5UX1JFUzIwCQkoQVRMQVNJTlRfQkFTRSsyMCkKKyNkZWZpbmUgQVRMQVNJTlRfUkVTMjEJCShBVExBU0lOVF9CQVNFKzIxKQorI2RlZmluZSBBVExBU0lOVF9SRVMyMgkJKEFUTEFTSU5UX0JBU0UrMjIpCisjZGVmaW5lIEFUTEFTSU5UX1JFUzIzCQkoQVRMQVNJTlRfQkFTRSsyMykKKyNkZWZpbmUgQVRMQVNJTlRfUkVTMjQJCShBVExBU0lOVF9CQVNFKzI0KQorI2RlZmluZSBBVExBU0lOVF9SRVMyNQkJKEFUTEFTSU5UX0JBU0UrMjUpCisjZGVmaW5lIEFUTEFTSU5UX1JFUzI2CQkoQVRMQVNJTlRfQkFTRSsyNikKKyNkZWZpbmUgQVRMQVNJTlRfUkVTMjcJCShBVExBU0lOVF9CQVNFKzI3KQorI2RlZmluZSBBVExBU0lOVF9SRVMyOAkJKEFUTEFTSU5UX0JBU0UrMjgpCisjZGVmaW5lIEFUTEFTSU5UX1JFUzI5CQkoQVRMQVNJTlRfQkFTRSsyOSkKKyNkZWZpbmUgQVRMQVNJTlRfUkVTMzAJCShBVExBU0lOVF9CQVNFKzMwKQorI2RlZmluZSBBVExBU0lOVF9SRVMzMQkJKEFUTEFTSU5UX0JBU0UrMzEpCisjZGVmaW5lIEFUTEFTSU5UX0VORAkJKEFUTEFTSU5UX0JBU0UrMzEpCisKKy8qCisgKiBBdGxhcyByZWdpc3RlcnMgYXJlIG1lbW9yeSBtYXBwZWQgb24gNjQtYml0IGFsaWduZWQgYm91bmRhcmllcyBhbmQKKyAqIG9ubHkgd29yZCBhY2Nlc3MgYXJlIGFsbG93ZWQuCisgKi8KK3N0cnVjdCBhdGxhc19pY3RybF9yZWdzIHsKKyAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGludHJhdzsKKyAgICAgICAgaW50IGR1bW15MTsKKyAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGludHNldGVuOworICAgICAgICBpbnQgZHVtbXkyOworICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgaW50cnN0ZW47CisgICAgICAgIGludCBkdW1teTM7CisgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGludCBpbnRlbmFibGU7CisgICAgICAgIGludCBkdW1teTQ7CisgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGludCBpbnRzdGF0dXM7CisgICAgICAgIGludCBkdW1teTU7Cit9OworCitleHRlcm4gdm9pZCBhdGxhc2ludF9pbml0KHZvaWQpOworCisjZW5kaWYgLyogIShfTUlQU19BVExBU0lOVF9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9taXBzLWJvYXJkcy9ib25pdG82NC5oIGIvaW5jbHVkZS9hc20tbWlwcy9taXBzLWJvYXJkcy9ib25pdG82NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkNzEyNTYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21pcHMtYm9hcmRzL2Jvbml0bzY0LmgKQEAgLTAsMCArMSw0MzEgQEAKKy8qCisgKiBCb25pdG8gUmVnaXN0ZXIgTWFwCisgKgorICogVGhpcyBmaWxlIGlzIHRoZSBvcmlnaW5hbCBib25pdG8uaCBmcm9tIEFsZ29yaXRobWljcyB3aXRoIG1pbm9yIGNoYW5nZXMKKyAqIHRvIGZpdCBpbnRvIGxpbnV4LgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5OSBBbGdvcml0aG1pY3MgTHRkCisgKgorICogQ2Fyc3RlbiBMYW5nZ2FhcmQsIGNhcnN0ZW5sQG1pcHMuY29tCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogQWxnb3JpdGhtaWNzIGdpdmVzIHBlcm1pc3Npb24gZm9yIGFueW9uZSB0byB1c2UgYW5kIG1vZGlmeSB0aGlzIGZpbGUKKyAqIHdpdGhvdXQgYW55IG9ibGlnYXRpb24gb3IgbGljZW5zZSBjb25kaXRpb24gZXhjZXB0IHRoYXQgeW91IHJldGFpbgorICogdGhpcyBjb3B5cmlnaHQgbWVzc2FnZSBpbiBhbnkgc291cmNlIHJlZGlzdHJpYnV0aW9uIGluIHdob2xlIG9yIHBhcnQuCisgKgorICovCisKKy8qIFJldmlzaW9uIDEuNDggYXV0b2dlbmVyYXRlZCBvbiAwOC8xNy85OSAxNToyMDowMSAqLworLyogVGhpcyBib25pdG82NCB2ZXJzaW9uIGVkaXR0ZWQgZnJvbSBib25pdG8uaCBSZXZpc2lvbiAxLjQ4IG9uIDExLzA5LzAwICovCisKKyNpZm5kZWYgX0FTTV9NSVBTX0JPQVJEU19CT05JVE82NF9ICisjZGVmaW5lIF9BU01fTUlQU19CT0FSRFNfQk9OSVRPNjRfSAorCisjaWZkZWYgX19BU1NFTUJMWV9fCisKKy8qIG9mZnNldHMgZnJvbSBiYXNlIHJlZ2lzdGVyICovCisjZGVmaW5lIEJPTklUTyh4KQkoeCkKKworI2Vsc2UgLyogIV9fQVNTRU1CTFlfXyAqLworCisvKgorICogQWxnb3JpdGhtaWNzIEJvbml0bzY0IHN5c3RlbSBjb250cm9sbGVyIHJlZ2lzdGVyIGJhc2UuCisgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIF9wY2ljdHJsX2Jvbml0bzsKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9wY2ljdHJsX2Jvbml0b19wY2ljZmc7CisKKyNkZWZpbmUgQk9OSVRPKHgpCQkqKHZvbGF0aWxlIHUzMiAqKShfcGNpY3RybF9ib25pdG8gKyAoeCkpCisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworCisjZGVmaW5lIEJPTklUT19CT09UX0JBU0UJCTB4MWZjMDAwMDAKKyNkZWZpbmUgQk9OSVRPX0JPT1RfU0laRQkJMHgwMDEwMDAwMAorI2RlZmluZSBCT05JVE9fQk9PVF9UT1AgCQkoQk9OSVRPX0JPT1RfQkFTRStCT05JVE9fQk9PVF9TSVpFLTEpCisjZGVmaW5lIEJPTklUT19GTEFTSF9CQVNFCQkweDFjMDAwMDAwCisjZGVmaW5lIEJPTklUT19GTEFTSF9TSVpFCQkweDAzMDAwMDAwCisjZGVmaW5lIEJPTklUT19GTEFTSF9UT1AJCShCT05JVE9fRkxBU0hfQkFTRStCT05JVE9fRkxBU0hfU0laRS0xKQorI2RlZmluZSBCT05JVE9fU09DS0VUX0JBU0UJCTB4MWY4MDAwMDAKKyNkZWZpbmUgQk9OSVRPX1NPQ0tFVF9TSVpFCQkweDAwNDAwMDAwCisjZGVmaW5lIEJPTklUT19TT0NLRVRfVE9QCQkoQk9OSVRPX1NPQ0tFVF9CQVNFK0JPTklUT19TT0NLRVRfU0laRS0xKQorI2RlZmluZSBCT05JVE9fUkVHX0JBU0UgCQkweDFmZTAwMDAwCisjZGVmaW5lIEJPTklUT19SRUdfU0laRSAJCTB4MDAwNDAwMDAKKyNkZWZpbmUgQk9OSVRPX1JFR19UT1AJCQkoQk9OSVRPX1JFR19CQVNFK0JPTklUT19SRUdfU0laRS0xKQorI2RlZmluZSBCT05JVE9fREVWX0JBU0UgCQkweDFmZjAwMDAwCisjZGVmaW5lIEJPTklUT19ERVZfU0laRSAJCTB4MDAxMDAwMDAKKyNkZWZpbmUgQk9OSVRPX0RFVl9UT1AJCQkoQk9OSVRPX0RFVl9CQVNFK0JPTklUT19ERVZfU0laRS0xKQorI2RlZmluZSBCT05JVE9fUENJTE9fQkFTRQkJMHgxMDAwMDAwMAorI2RlZmluZSBCT05JVE9fUENJTE9fU0laRQkJMHgwYzAwMDAwMAorI2RlZmluZSBCT05JVE9fUENJTE9fVE9QCQkoQk9OSVRPX1BDSUxPX0JBU0UrQk9OSVRPX1BDSUxPX1NJWkUtMSkKKyNkZWZpbmUgQk9OSVRPX1BDSUxPMF9CQVNFCQkweDEwMDAwMDAwCisjZGVmaW5lIEJPTklUT19QQ0lMTzFfQkFTRQkJMHgxNDAwMDAwMAorI2RlZmluZSBCT05JVE9fUENJTE8yX0JBU0UJCTB4MTgwMDAwMDAKKyNkZWZpbmUgQk9OSVRPX1BDSUhJX0JBU0UJCTB4MjAwMDAwMDAKKyNkZWZpbmUgQk9OSVRPX1BDSUhJX1NJWkUJCTB4MjAwMDAwMDAKKyNkZWZpbmUgQk9OSVRPX1BDSUhJX1RPUAkJKEJPTklUT19QQ0lISV9CQVNFK0JPTklUT19QQ0lISV9TSVpFLTEpCisjZGVmaW5lIEJPTklUT19QQ0lJT19CQVNFCQkweDFmZDAwMDAwCisjZGVmaW5lIEJPTklUT19QQ0lJT19TSVpFCQkweDAwMTAwMDAwCisjZGVmaW5lIEJPTklUT19QQ0lJT19UT1AJCShCT05JVE9fUENJSU9fQkFTRStCT05JVE9fUENJSU9fU0laRS0xKQorI2RlZmluZSBCT05JVE9fUENJQ0ZHX0JBU0UJCTB4MWZlODAwMDAKKyNkZWZpbmUgQk9OSVRPX1BDSUNGR19TSVpFCQkweDAwMDgwMDAwCisjZGVmaW5lIEJPTklUT19QQ0lDRkdfVE9QCQkoQk9OSVRPX1BDSUNGR19CQVNFK0JPTklUT19QQ0lDRkdfU0laRS0xKQorCisKKy8qIEJvbml0byBSZWdpc3RlciBCYXNlcyAqLworCisjZGVmaW5lIEJPTklUT19QQ0lDT05GSUdCQVNFCQkweDAwCisjZGVmaW5lIEJPTklUT19SRUdCQVNFCQkJMHgxMDAKKworCisvKiBQQ0kgQ29uZmlndXJhdGlvbiAgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgQk9OSVRPX1BDSV9SRUcoeCkgICAgICAgICAgICAgICBCT05JVE8oQk9OSVRPX1BDSUNPTkZJR0JBU0UgKyAoeCkpCisjZGVmaW5lIEJPTklUT19QQ0lESUQJCQlCT05JVE9fUENJX1JFRygweDAwKQorI2RlZmluZSBCT05JVE9fUENJQ01ECQkJQk9OSVRPX1BDSV9SRUcoMHgwNCkKKyNkZWZpbmUgQk9OSVRPX1BDSUNMQVNTIAkJQk9OSVRPX1BDSV9SRUcoMHgwOCkKKyNkZWZpbmUgQk9OSVRPX1BDSUxUSU1FUgkJQk9OSVRPX1BDSV9SRUcoMHgwYykKKyNkZWZpbmUgQk9OSVRPX1BDSUJBU0UwIAkJQk9OSVRPX1BDSV9SRUcoMHgxMCkKKyNkZWZpbmUgQk9OSVRPX1BDSUJBU0UxIAkJQk9OSVRPX1BDSV9SRUcoMHgxNCkKKyNkZWZpbmUgQk9OSVRPX1BDSUJBU0UyIAkJQk9OSVRPX1BDSV9SRUcoMHgxOCkKKyNkZWZpbmUgQk9OSVRPX1BDSUVYUFJCQVNFCQlCT05JVE9fUENJX1JFRygweDMwKQorI2RlZmluZSBCT05JVE9fUENJSU5UCQkJQk9OSVRPX1BDSV9SRUcoMHgzYykKKworI2RlZmluZSBCT05JVE9fUENJQ01EX1BFUlJfQ0xSCQkweDgwMDAwMDAwCisjZGVmaW5lIEJPTklUT19QQ0lDTURfU0VSUl9DTFIJCTB4NDAwMDAwMDAKKyNkZWZpbmUgQk9OSVRPX1BDSUNNRF9NQUJPUlRfQ0xSCTB4MjAwMDAwMDAKKyNkZWZpbmUgQk9OSVRPX1BDSUNNRF9NVEFCT1JUX0NMUgkweDEwMDAwMDAwCisjZGVmaW5lIEJPTklUT19QQ0lDTURfVEFCT1JUX0NMUgkweDA4MDAwMDAwCisjZGVmaW5lIEJPTklUT19QQ0lDTURfTVBFUlJfQ0xSIAkweDAxMDAwMDAwCisjZGVmaW5lIEJPTklUT19QQ0lDTURfUEVSUlJFU1BFTgkweDAwMDAwMDQwCisjZGVmaW5lIEJPTklUT19QQ0lDTURfQVNURVBFTgkJMHgwMDAwMDA4MAorI2RlZmluZSBCT05JVE9fUENJQ01EX1NFUlJFTgkJMHgwMDAwMDEwMAorI2RlZmluZSBCT05JVE9fUENJTFRJTUVSX0JVU0xBVEVOQ1kJMHgwMDAwZmYwMAorI2RlZmluZSBCT05JVE9fUENJTFRJTUVSX0JVU0xBVEVOQ1lfU0hJRlQJOAorCisKKworCisvKiAxLiBCb25pdG8gaC93IENvbmZpZ3VyYXRpb24gKi8KKy8qIFBvd2VyIG9uIHJlZ2lzdGVyICovCisKKyNkZWZpbmUgQk9OSVRPX0JPTlBPTkNGRwkJQk9OSVRPKEJPTklUT19SRUdCQVNFICsgMHgwMCkKKworI2RlZmluZSBCT05JVE9fQk9OUE9OQ0ZHX1NZU0NPTlRST0xMRVJSRAkweDAwMDQwMDAwCisjZGVmaW5lIEJPTklUT19CT05QT05DRkdfUk9NQ1MxU0FNUAkweDAwMDIwMDAwCisjZGVmaW5lIEJPTklUT19CT05QT05DRkdfUk9NQ1MwU0FNUAkweDAwMDEwMDAwCisjZGVmaW5lIEJPTklUT19CT05QT05DRkdfQ1BVQklHRU5ECTB4MDAwMDQwMDAKKy8qIEFkZGVkIGJ5IFJQRiAxMS05LTAwICovCisjZGVmaW5lIEJPTklUT19CT05QT05DRkdfQlVSU1RPUkRFUgkweDAwMDAxMDAwCisvKiAtLS0gKi8KKyNkZWZpbmUgQk9OSVRPX0JPTlBPTkNGR19DUFVQQVJJVFkJMHgwMDAwMjAwMAorI2RlZmluZSBCT05JVE9fQk9OUE9OQ0ZHX0NQVVRZUEUJMHgwMDAwMDAwNworI2RlZmluZSBCT05JVE9fQk9OUE9OQ0ZHX0NQVVRZUEVfU0hJRlQJMAorI2RlZmluZSBCT05JVE9fQk9OUE9OQ0ZHX1BDSVJFU0VUX09VVAkweDAwMDAwMDA4CisjZGVmaW5lIEJPTklUT19CT05QT05DRkdfSVNfQVJCSVRFUgkweDAwMDAwMDEwCisjZGVmaW5lIEJPTklUT19CT05QT05DRkdfUk9NQk9PVAkweDAwMDAwMGMwCisjZGVmaW5lIEJPTklUT19CT05QT05DRkdfUk9NQk9PVF9TSElGVAk2CisKKyNkZWZpbmUgQk9OSVRPX0JPTlBPTkNGR19ST01CT09UX0ZMQVNICSgweDA8PEJPTklUT19CT05QT05DRkdfUk9NQk9PVF9TSElGVCkKKyNkZWZpbmUgQk9OSVRPX0JPTlBPTkNGR19ST01CT09UX1NPQ0tFVCAoMHgxPDxCT05JVE9fQk9OUE9OQ0ZHX1JPTUJPT1RfU0hJRlQpCisjZGVmaW5lIEJPTklUT19CT05QT05DRkdfUk9NQk9PVF9TRFJBTQkoMHgyPDxCT05JVE9fQk9OUE9OQ0ZHX1JPTUJPT1RfU0hJRlQpCisjZGVmaW5lIEJPTklUT19CT05QT05DRkdfUk9NQk9PVF9DUFVSRVNFVAkoMHgzPDxCT05JVE9fQk9OUE9OQ0ZHX1JPTUJPT1RfU0hJRlQpCisKKyNkZWZpbmUgQk9OSVRPX0JPTlBPTkNGR19ST01DUzBXSURUSAkweDAwMDAwMTAwCisjZGVmaW5lIEJPTklUT19CT05QT05DRkdfUk9NQ1MxV0lEVEgJMHgwMDAwMDIwMAorI2RlZmluZSBCT05JVE9fQk9OUE9OQ0ZHX1JPTUNTMEZBU1QJMHgwMDAwMDQwMAorI2RlZmluZSBCT05JVE9fQk9OUE9OQ0ZHX1JPTUNTMUZBU1QJMHgwMDAwMDgwMAorI2RlZmluZSBCT05JVE9fQk9OUE9OQ0ZHX0NPTkZJR19ESVMJMHgwMDAwMDAyMAorCisKKy8qIE90aGVyIEJvbml0byBjb25maWd1cmF0aW9uICovCisKKyNkZWZpbmUgQk9OSVRPX0JPTkdFTkNGR19PRkZTRVQgICAgICAgICAweDQKKyNkZWZpbmUgQk9OSVRPX0JPTkdFTkNGRwkJQk9OSVRPKEJPTklUT19SRUdCQVNFICsgQk9OSVRPX0JPTkdFTkNGR19PRkZTRVQpCisKKyNkZWZpbmUgQk9OSVRPX0JPTkdFTkNGR19ERUJVR01PREUJMHgwMDAwMDAwMQorI2RlZmluZSBCT05JVE9fQk9OR0VOQ0ZHX1NOT09QRU4JMHgwMDAwMDAwMgorI2RlZmluZSBCT05JVE9fQk9OR0VOQ0ZHX0NQVVNFTEZSRVNFVAkweDAwMDAwMDA0CisKKyNkZWZpbmUgQk9OSVRPX0JPTkdFTkNGR19GT1JDRV9JUlFBCTB4MDAwMDAwMDgKKyNkZWZpbmUgQk9OSVRPX0JPTkdFTkNGR19JUlFBX0lTT1VUCTB4MDAwMDAwMTAKKyNkZWZpbmUgQk9OSVRPX0JPTkdFTkNGR19JUlFBX0ZST01fSU5UMSAweDAwMDAwMDIwCisjZGVmaW5lIEJPTklUT19CT05HRU5DRkdfQllURVNXQVAJMHgwMDAwMDA0MAorCisjZGVmaW5lIEJPTklUT19CT05HRU5DRkdfVU5DQUNIRUQJMHgwMDAwMDA4MAorI2RlZmluZSBCT05JVE9fQk9OR0VOQ0ZHX1BSRUZFVENIRU4JMHgwMDAwMDEwMAorI2RlZmluZSBCT05JVE9fQk9OR0VOQ0ZHX1dCRUhJTkRFTgkweDAwMDAwMjAwCisjZGVmaW5lIEJPTklUT19CT05HRU5DRkdfQ0FDSEVBTEcJMHgwMDAwMGMwMAorI2RlZmluZSBCT05JVE9fQk9OR0VOQ0ZHX0NBQ0hFQUxHX1NISUZUIDEwCisjZGVmaW5lIEJPTklUT19CT05HRU5DRkdfUENJUVVFVUUJMHgwMDAwMTAwMAorI2RlZmluZSBCT05JVE9fQk9OR0VOQ0ZHX0NBQ0hFU1RPUAkweDAwMDAyMDAwCisjZGVmaW5lIEJPTklUT19CT05HRU5DRkdfTVNUUkJZVEVTV0FQCTB4MDAwMDQwMDAKKyNkZWZpbmUgQk9OSVRPX0JPTkdFTkNGR19CVVNFUlJFTgkweDAwMDA4MDAwCisjZGVmaW5lIEJPTklUT19CT05HRU5DRkdfTk9SRVRSWVRJTUVPVVQgMHgwMDAxMDAwMAorI2RlZmluZSBCT05JVE9fQk9OR0VOQ0ZHX1NIT1JUQ09QWVRJTUVPVVQJMHgwMDAyMDAwMAorCisvKiAyLiBJTyAmIElERSBjb25maWd1cmF0aW9uICovCisKKyNkZWZpbmUgQk9OSVRPX0lPREVWQ0ZHIAkJQk9OSVRPKEJPTklUT19SRUdCQVNFICsgMHgwOCkKKworLyogMy4gSU8gJiBJREUgY29uZmlndXJhdGlvbiAqLworCisjZGVmaW5lIEJPTklUT19TRENGRwkJCUJPTklUTyhCT05JVE9fUkVHQkFTRSArIDB4MGMpCisKKy8qIDQuIFBDSSBhZGRyZXNzIG1hcCBjb250cm9sICovCisKKyNkZWZpbmUgQk9OSVRPX1BDSU1BUAkJCUJPTklUTyhCT05JVE9fUkVHQkFTRSArIDB4MTApCisjZGVmaW5lIEJPTklUT19QQ0lNRU1CQVNFQ0ZHCQlCT05JVE8oQk9OSVRPX1JFR0JBU0UgKyAweDE0KQorI2RlZmluZSBCT05JVE9fUENJTUFQX0NGRwkJQk9OSVRPKEJPTklUT19SRUdCQVNFICsgMHgxOCkKKworLyogNS4gSUNVICYgR1BJTyByZWdzICovCisKKy8qIEdQSU8gUmVncyAtIHIvdyAqLworCisjZGVmaW5lIEJPTklUT19HUElPREFUQV9PRkZTRVQgICAgICAgICAgMHgxYworI2RlZmluZSBCT05JVE9fR1BJT0RBVEEgCQlCT05JVE8oQk9OSVRPX1JFR0JBU0UgKyBCT05JVE9fR1BJT0RBVEFfT0ZGU0VUKQorI2RlZmluZSBCT05JVE9fR1BJT0lFCQkJQk9OSVRPKEJPTklUT19SRUdCQVNFICsgMHgyMCkKKworLyogSUNVIENvbmZpZ3VyYXRpb24gUmVncyAtIHIvdyAqLworCisjZGVmaW5lIEJPTklUT19JTlRFREdFCQkJQk9OSVRPKEJPTklUT19SRUdCQVNFICsgMHgyNCkKKyNkZWZpbmUgQk9OSVRPX0lOVFNURUVSIAkJQk9OSVRPKEJPTklUT19SRUdCQVNFICsgMHgyOCkKKyNkZWZpbmUgQk9OSVRPX0lOVFBPTAkJCUJPTklUTyhCT05JVE9fUkVHQkFTRSArIDB4MmMpCisKKy8qIElDVSBFbmFibGUgUmVncyAtIEludEVuICYgSW50SVNSIGFyZSByL28uICovCisKKyNkZWZpbmUgQk9OSVRPX0lOVEVOU0VUIAkJQk9OSVRPKEJPTklUT19SRUdCQVNFICsgMHgzMCkKKyNkZWZpbmUgQk9OSVRPX0lOVEVOQ0xSIAkJQk9OSVRPKEJPTklUT19SRUdCQVNFICsgMHgzNCkKKyNkZWZpbmUgQk9OSVRPX0lOVEVOCQkJQk9OSVRPKEJPTklUT19SRUdCQVNFICsgMHgzOCkKKyNkZWZpbmUgQk9OSVRPX0lOVElTUgkJCUJPTklUTyhCT05JVE9fUkVHQkFTRSArIDB4M2MpCisKKy8qIFBDSSBtYWlsIGJveGVzICovCisKKyNkZWZpbmUgQk9OSVRPX1BDSU1BSUwwX09GRlNFVCAgICAgICAgICAweDQwCisjZGVmaW5lIEJPTklUT19QQ0lNQUlMMV9PRkZTRVQgICAgICAgICAgMHg0NAorI2RlZmluZSBCT05JVE9fUENJTUFJTDJfT0ZGU0VUICAgICAgICAgIDB4NDgKKyNkZWZpbmUgQk9OSVRPX1BDSU1BSUwzX09GRlNFVCAgICAgICAgICAweDRjCisjZGVmaW5lIEJPTklUT19QQ0lNQUlMMCAJCUJPTklUTyhCT05JVE9fUkVHQkFTRSArIDB4NDApCisjZGVmaW5lIEJPTklUT19QQ0lNQUlMMSAJCUJPTklUTyhCT05JVE9fUkVHQkFTRSArIDB4NDQpCisjZGVmaW5lIEJPTklUT19QQ0lNQUlMMiAJCUJPTklUTyhCT05JVE9fUkVHQkFTRSArIDB4NDgpCisjZGVmaW5lIEJPTklUT19QQ0lNQUlMMyAJCUJPTklUTyhCT05JVE9fUkVHQkFTRSArIDB4NGMpCisKKworLyogNi4gUENJIGNhY2hlICovCisKKyNkZWZpbmUgQk9OSVRPX1BDSUNBQ0hFQ1RSTAkJQk9OSVRPKEJPTklUT19SRUdCQVNFICsgMHg1MCkKKyNkZWZpbmUgQk9OSVRPX1BDSUNBQ0hFVEFHCQlCT05JVE8oQk9OSVRPX1JFR0JBU0UgKyAweDU0KQorCisjZGVmaW5lIEJPTklUT19QQ0lCQURBRERSCQlCT05JVE8oQk9OSVRPX1JFR0JBU0UgKyAweDU4KQorI2RlZmluZSBCT05JVE9fUENJTVNUQVQgCQlCT05JVE8oQk9OSVRPX1JFR0JBU0UgKyAweDVjKQorCisKKy8qCisjZGVmaW5lIEJPTklUT19QQ0lSRFBPU1QJCUJPTklUTyhCT05JVE9fUkVHQkFTRSArIDB4NjApCisjZGVmaW5lIEJPTklUT19QQ0lEQVRBCQkJQk9OSVRPKEJPTklUT19SRUdCQVNFICsgMHg2NCkKKyovCisKKy8qIDcuIElERSBETUEgJiBDb3BpZXIgKi8KKworI2RlZmluZSBCT05JVE9fQ09ORklHQkFTRQkJMHgwMDAKKyNkZWZpbmUgQk9OSVRPX0JPTklUT0JBU0UJCTB4MTAwCisjZGVmaW5lIEJPTklUT19MRE1BQkFTRSAJCTB4MjAwCisjZGVmaW5lIEJPTklUT19DT1BCQVNFCQkJMHgzMDAKKyNkZWZpbmUgQk9OSVRPX1JFR19CTE9DS01BU0sJCTB4MzAwCisKKyNkZWZpbmUgQk9OSVRPX0xETUFDVFJMIAkJQk9OSVRPKEJPTklUT19MRE1BQkFTRSArIDB4MCkKKyNkZWZpbmUgQk9OSVRPX0xETUFTVEFUIAkJQk9OSVRPKEJPTklUT19MRE1BQkFTRSArIDB4MCkKKyNkZWZpbmUgQk9OSVRPX0xETUFBRERSIAkJQk9OSVRPKEJPTklUT19MRE1BQkFTRSArIDB4NCkKKyNkZWZpbmUgQk9OSVRPX0xETUFHTwkJCUJPTklUTyhCT05JVE9fTERNQUJBU0UgKyAweDgpCisjZGVmaW5lIEJPTklUT19MRE1BREFUQSAJCUJPTklUTyhCT05JVE9fTERNQUJBU0UgKyAweGMpCisKKyNkZWZpbmUgQk9OSVRPX0NPUENUUkwJCQlCT05JVE8oQk9OSVRPX0NPUEJBU0UgKyAweDApCisjZGVmaW5lIEJPTklUT19DT1BTVEFUCQkJQk9OSVRPKEJPTklUT19DT1BCQVNFICsgMHgwKQorI2RlZmluZSBCT05JVE9fQ09QUEFERFIgCQlCT05JVE8oQk9OSVRPX0NPUEJBU0UgKyAweDQpCisjZGVmaW5lIEJPTklUT19DT1BEQUREUiAJCUJPTklUTyhCT05JVE9fQ09QQkFTRSArIDB4OCkKKyNkZWZpbmUgQk9OSVRPX0NPUEdPCQkJQk9OSVRPKEJPTklUT19DT1BCQVNFICsgMHhjKQorCisKKy8qICMjIyMjIyBCaXQgRGVmaW5pdGlvbnMgZm9yIGluZGl2aWR1YWwgUmVnaXN0ZXJzICMjIyMgKi8KKworLyogR2VuIERNQS4gKi8KKworI2RlZmluZSBCT05JVE9fSURFQ09QREFERFJfRE1BX0RBRERSCTB4MGZmZmZmZmMKKyNkZWZpbmUgQk9OSVRPX0lERUNPUERBRERSX0RNQV9EQUREUl9TSElGVAkyCisjZGVmaW5lIEJPTklUT19JREVDT1BQQUREUl9ETUFfUEFERFIJMHhmZmZmZmZmYworI2RlZmluZSBCT05JVE9fSURFQ09QUEFERFJfRE1BX1BBRERSX1NISUZUCTIKKyNkZWZpbmUgQk9OSVRPX0lERUNPUEdPX0RNQV9TSVpFCTB4MDAwMGZmZmUKKyNkZWZpbmUgQk9OSVRPX0lERUNPUEdPX0RNQV9TSVpFX1NISUZUCTAKKyNkZWZpbmUgQk9OSVRPX0lERUNPUEdPX0RNQV9XUklURQkweDAwMDEwMDAwCisjZGVmaW5lIEJPTklUT19JREVDT1BHT19ETUFXQ09VTlQJMHgwMDBmMDAwMAorI2RlZmluZSBCT05JVE9fSURFQ09QR09fRE1BV0NPVU5UX1NISUZUCTE2CisKKyNkZWZpbmUgQk9OSVRPX0lERUNPUENUUkxfRE1BX1NUQVJUQklUCTB4ODAwMDAwMDAKKyNkZWZpbmUgQk9OSVRPX0lERUNPUENUUkxfRE1BX1JTVEJJVAkweDQwMDAwMDAwCisKKy8qIERSQU0gLSBzZENmZyAqLworCisjZGVmaW5lIEJPTklUT19TRENGR19BUk9XQklUUwkJMHgwMDAwMDAwMworI2RlZmluZSBCT05JVE9fU0RDRkdfQVJPV0JJVFNfU0hJRlQJMAorI2RlZmluZSBCT05JVE9fU0RDRkdfQUNPTEJJVFMJCTB4MDAwMDAwMGMKKyNkZWZpbmUgQk9OSVRPX1NEQ0ZHX0FDT0xCSVRTX1NISUZUCTIKKyNkZWZpbmUgQk9OSVRPX1NEQ0ZHX0FCQU5LQklUCQkweDAwMDAwMDEwCisjZGVmaW5lIEJPTklUT19TRENGR19BU0lERVMJCTB4MDAwMDAwMjAKKyNkZWZpbmUgQk9OSVRPX1NEQ0ZHX0FBQlNFTlQJCTB4MDAwMDAwNDAKKyNkZWZpbmUgQk9OSVRPX1NEQ0ZHX0FXSURUSDY0CQkweDAwMDAwMDgwCisKKyNkZWZpbmUgQk9OSVRPX1NEQ0ZHX0JST1dCSVRTCQkweDAwMDAwMzAwCisjZGVmaW5lIEJPTklUT19TRENGR19CUk9XQklUU19TSElGVAk4CisjZGVmaW5lIEJPTklUT19TRENGR19CQ09MQklUUwkJMHgwMDAwMGMwMAorI2RlZmluZSBCT05JVE9fU0RDRkdfQkNPTEJJVFNfU0hJRlQJMTAKKyNkZWZpbmUgQk9OSVRPX1NEQ0ZHX0JCQU5LQklUCQkweDAwMDAxMDAwCisjZGVmaW5lIEJPTklUT19TRENGR19CU0lERVMJCTB4MDAwMDIwMDAKKyNkZWZpbmUgQk9OSVRPX1NEQ0ZHX0JBQlNFTlQJCTB4MDAwMDQwMDAKKyNkZWZpbmUgQk9OSVRPX1NEQ0ZHX0JXSURUSDY0CQkweDAwMDA4MDAwCisKKyNkZWZpbmUgQk9OSVRPX1NEQ0ZHX0VYVFJEREFUQQkJMHgwMDAxMDAwMAorI2RlZmluZSBCT05JVE9fU0RDRkdfRVhUUkFTQ0FTCQkweDAwMDIwMDAwCisjZGVmaW5lIEJPTklUT19TRENGR19FWFRQUkVDSAkJMHgwMDA0MDAwMAorI2RlZmluZSBCT05JVE9fU0RDRkdfRVhUUkFTV0lEVEgJMHgwMDE4MDAwMAorI2RlZmluZSBCT05JVE9fU0RDRkdfRVhUUkFTV0lEVEhfU0hJRlQJMTkKKy8qIENoYW5nZWQgYnkgUlBGIDExLTktMDAgKi8KKyNkZWZpbmUgQk9OSVRPX1NEQ0ZHX0RSQU1NT0RFU0VUCTB4MDAyMDAwMDAKKy8qIC0tLSAqLworI2RlZmluZSBCT05JVE9fU0RDRkdfRFJBTUVYVFJFR1MJMHgwMDQwMDAwMAorI2RlZmluZSBCT05JVE9fU0RDRkdfRFJBTVBBUklUWSAJMHgwMDgwMDAwMAorLyogQWRkZWQgYnkgUlBGIDExLTktMDAgKi8KKyNkZWZpbmUgQk9OSVRPX1NEQ0ZHX0RSQU1CVVJTVExFTiAJMHgwMzAwMDAwMAorI2RlZmluZSBCT05JVE9fU0RDRkdfRFJBTUJVUlNUTEVOX1NISUZUCTI0CisjZGVmaW5lIEJPTklUT19TRENGR19EUkFNTU9ERVNFVF9ET05FIAkweDgwMDAwMDAwCisvKiAtLS0gKi8KKworLyogUENJIENhY2hlIC0gcGNpQ2FjaGVDdHJsICovCisKKyNkZWZpbmUgQk9OSVRPX1BDSUNBQ0hFQ1RSTF9DQUNIRUNNRAkweDAwMDAwMDA3CisjZGVmaW5lIEJPTklUT19QQ0lDQUNIRUNUUkxfQ0FDSEVDTURfU0hJRlQJMAorI2RlZmluZSBCT05JVE9fUENJQ0FDSEVDVFJMX0NBQ0hFQ01ETElORQkweDAwMDAwMDE4CisjZGVmaW5lIEJPTklUT19QQ0lDQUNIRUNUUkxfQ0FDSEVDTURMSU5FX1NISUZUCTMKKyNkZWZpbmUgQk9OSVRPX1BDSUNBQ0hFQ1RSTF9DTURFWEVDCTB4MDAwMDAwMjAKKworI2RlZmluZSBCT05JVE9fUENJQ0FDSEVDVFJMX0lPQkNDT0hfUFJFUwkweDAwMDAwMTAwCisjZGVmaW5lIEJPTklUT19QQ0lDQUNIRUNUUkxfSU9CQ0NPSF9FTgkweDAwMDAwMjAwCisjZGVmaW5lIEJPTklUT19QQ0lDQUNIRUNUUkxfQ1BVQ09IX1BSRVMJMHgwMDAwMDQwMAorI2RlZmluZSBCT05JVE9fUENJQ0FDSEVDVFJMX0NQVUNPSF9FTgkweDAwMDAwODAwCisKKyNkZWZpbmUgQk9OSVRPX0lPREVWQ0ZHX0JVRkZCSVRfQ1MwCTB4MDAwMDAwMDEKKyNkZWZpbmUgQk9OSVRPX0lPREVWQ0ZHX1NQRUVEQklUX0NTMAkweDAwMDAwMDAyCisjZGVmaW5lIEJPTklUT19JT0RFVkNGR19NT1JFQUJJVFNfQ1MwCTB4MDAwMDAwMDQKKworI2RlZmluZSBCT05JVE9fSU9ERVZDRkdfQlVGRkJJVF9DUzEJMHgwMDAwMDAwOAorI2RlZmluZSBCT05JVE9fSU9ERVZDRkdfU1BFRURCSVRfQ1MxCTB4MDAwMDAwMTAKKyNkZWZpbmUgQk9OSVRPX0lPREVWQ0ZHX01PUkVBQklUU19DUzEJMHgwMDAwMDAyMAorCisjZGVmaW5lIEJPTklUT19JT0RFVkNGR19CVUZGQklUX0NTMgkweDAwMDAwMDQwCisjZGVmaW5lIEJPTklUT19JT0RFVkNGR19TUEVFREJJVF9DUzIJMHgwMDAwMDA4MAorI2RlZmluZSBCT05JVE9fSU9ERVZDRkdfTU9SRUFCSVRTX0NTMgkweDAwMDAwMTAwCisKKyNkZWZpbmUgQk9OSVRPX0lPREVWQ0ZHX0JVRkZCSVRfQ1MzCTB4MDAwMDAyMDAKKyNkZWZpbmUgQk9OSVRPX0lPREVWQ0ZHX1NQRUVEQklUX0NTMwkweDAwMDAwNDAwCisjZGVmaW5lIEJPTklUT19JT0RFVkNGR19NT1JFQUJJVFNfQ1MzCTB4MDAwMDA4MDAKKworI2RlZmluZSBCT05JVE9fSU9ERVZDRkdfQlVGRkJJVF9JREUJMHgwMDAwMTAwMAorI2RlZmluZSBCT05JVE9fSU9ERVZDRkdfU1BFRURCSVRfSURFCTB4MDAwMDIwMDAKKyNkZWZpbmUgQk9OSVRPX0lPREVWQ0ZHX1dPUkRTV0FQQklUX0lERSAweDAwMDA0MDAwCisjZGVmaW5lIEJPTklUT19JT0RFVkNGR19NT0RFQklUX0lERQkweDAwMDA4MDAwCisjZGVmaW5lIEJPTklUT19JT0RFVkNGR19ETUFPTl9JREUJMHgwMDFmMDAwMAorI2RlZmluZSBCT05JVE9fSU9ERVZDRkdfRE1BT05fSURFX1NISUZUIDE2CisjZGVmaW5lIEJPTklUT19JT0RFVkNGR19ETUFPRkZfSURFCTB4MDFlMDAwMDAKKyNkZWZpbmUgQk9OSVRPX0lPREVWQ0ZHX0RNQU9GRl9JREVfU0hJRlQJMjEKKyNkZWZpbmUgQk9OSVRPX0lPREVWQ0ZHX0VQUk9NU1BMSVQJMHgwMjAwMDAwMAorLyogQWRkZWQgYnkgUlBGIDExLTktMDAgKi8KKyNkZWZpbmUgQk9OSVRPX0lPREVWQ0ZHX0NQVUNMT0NLUEVSSU9ECTB4ZmMwMDAwMDAKKyNkZWZpbmUgQk9OSVRPX0lPREVWQ0ZHX0NQVUNMT0NLUEVSSU9EX1NISUZUIDI2CisvKiAtLS0gKi8KKworLyogZ3BpbyAqLworI2RlZmluZSBCT05JVE9fR1BJT19HUElPVwkJMHgwMDAwMDNmZgorI2RlZmluZSBCT05JVE9fR1BJT19HUElPV19TSElGVCAJMAorI2RlZmluZSBCT05JVE9fR1BJT19HUElPUgkJMHgwMWZmMDAwMAorI2RlZmluZSBCT05JVE9fR1BJT19HUElPUl9TSElGVCAJMTYKKyNkZWZpbmUgQk9OSVRPX0dQSU9fR1BJTlIJCTB4ZmUwMDAwMDAKKyNkZWZpbmUgQk9OSVRPX0dQSU9fR1BJTlJfU0hJRlQgCTI1CisjZGVmaW5lIEJPTklUT19HUElPX0lPVyhOKQkJKDE8PChCT05JVE9fR1BJT19HUElPV19TSElGVCsoTikpKQorI2RlZmluZSBCT05JVE9fR1BJT19JT1IoTikJCSgxPDwoQk9OSVRPX0dQSU9fR1BJT1JfU0hJRlQrKE4pKSkKKyNkZWZpbmUgQk9OSVRPX0dQSU9fSU5SKE4pCQkoMTw8KEJPTklUT19HUElPX0dQSU5SX1NISUZUKyhOKSkpCisKKy8qIElDVSAqLworI2RlZmluZSBCT05JVE9fSUNVX01CT1hFUwkJMHgwMDAwMDAwZgorI2RlZmluZSBCT05JVE9fSUNVX01CT1hFU19TSElGVCAJMAorI2RlZmluZSBCT05JVE9fSUNVX0RNQVJEWQkJMHgwMDAwMDAxMAorI2RlZmluZSBCT05JVE9fSUNVX0RNQUVNUFRZCQkweDAwMDAwMDIwCisjZGVmaW5lIEJPTklUT19JQ1VfQ09QWVJEWQkJMHgwMDAwMDA0MAorI2RlZmluZSBCT05JVE9fSUNVX0NPUFlFTVBUWQkJMHgwMDAwMDA4MAorI2RlZmluZSBCT05JVE9fSUNVX0NPUFlFUlIJCTB4MDAwMDAxMDAKKyNkZWZpbmUgQk9OSVRPX0lDVV9QQ0lJUlEJCTB4MDAwMDAyMDAKKyNkZWZpbmUgQk9OSVRPX0lDVV9NQVNURVJFUlIJCTB4MDAwMDA0MDAKKyNkZWZpbmUgQk9OSVRPX0lDVV9TWVNURU1FUlIJCTB4MDAwMDA4MDAKKyNkZWZpbmUgQk9OSVRPX0lDVV9EUkFNUEVSUgkJMHgwMDAwMTAwMAorI2RlZmluZSBCT05JVE9fSUNVX1JFVFJZRVJSCQkweDAwMDAyMDAwCisjZGVmaW5lIEJPTklUT19JQ1VfR1BJT1MJCTB4MDFmZjAwMDAKKyNkZWZpbmUgQk9OSVRPX0lDVV9HUElPU19TSElGVAkJMTYKKyNkZWZpbmUgQk9OSVRPX0lDVV9HUElOUwkJMHg3ZTAwMDAwMAorI2RlZmluZSBCT05JVE9fSUNVX0dQSU5TX1NISUZUCQkyNQorI2RlZmluZSBCT05JVE9fSUNVX01CT1goTikJCSgxPDwoQk9OSVRPX0lDVV9NQk9YRVNfU0hJRlQrKE4pKSkKKyNkZWZpbmUgQk9OSVRPX0lDVV9HUElPKE4pCQkoMTw8KEJPTklUT19JQ1VfR1BJT1NfU0hJRlQrKE4pKSkKKyNkZWZpbmUgQk9OSVRPX0lDVV9HUElOKE4pCQkoMTw8KEJPTklUT19JQ1VfR1BJTlNfU0hJRlQrKE4pKSkKKworLyogcGNpbWFwICovCisKKyNkZWZpbmUgQk9OSVRPX1BDSU1BUF9QQ0lNQVBfTE8wCTB4MDAwMDAwM2YKKyNkZWZpbmUgQk9OSVRPX1BDSU1BUF9QQ0lNQVBfTE8wX1NISUZUCTAKKyNkZWZpbmUgQk9OSVRPX1BDSU1BUF9QQ0lNQVBfTE8xCTB4MDAwMDBmYzAKKyNkZWZpbmUgQk9OSVRPX1BDSU1BUF9QQ0lNQVBfTE8xX1NISUZUCTYKKyNkZWZpbmUgQk9OSVRPX1BDSU1BUF9QQ0lNQVBfTE8yCTB4MDAwM2YwMDAKKyNkZWZpbmUgQk9OSVRPX1BDSU1BUF9QQ0lNQVBfTE8yX1NISUZUCTEyCisjZGVmaW5lIEJPTklUT19QQ0lNQVBfUENJTUFQXzIJCTB4MDAwNDAwMDAKKyNkZWZpbmUgQk9OSVRPX1BDSU1BUF9XSU4oV0lOLEFERFIpCSgoKChBRERSKT4+MjYpICYgQk9OSVRPX1BDSU1BUF9QQ0lNQVBfTE8wKSA8PCAoKFdJTikqNikpCisKKyNkZWZpbmUgQk9OSVRPX1BDSU1BUF9XSU5TSVpFICAgICAgICAgICAoMTw8MjYpCisjZGVmaW5lIEJPTklUT19QQ0lNQVBfV0lOT0ZGU0VUKEFERFIpCSgoQUREUikgJiAoQk9OSVRPX1BDSU1BUF9XSU5TSVpFIC0gMSkpCisjZGVmaW5lIEJPTklUT19QQ0lNQVBfV0lOQkFTRShBRERSKQkoKEFERFIpIDw8IDI2KQorCisvKiBwY2ltZW1iYXNlQ2ZnICovCisKKyNkZWZpbmUgQk9OSVRPX1BDSU1FTUJBU0VDRkdfTUFTSyAgICAgICAgICAgICAgIDB4ZjAwMDAwMDAKKyNkZWZpbmUgQk9OSVRPX1BDSU1FTUJBU0VDRkdfTUVNQkFTRTBfTUFTSwkweDAwMDAwMDFmCisjZGVmaW5lIEJPTklUT19QQ0lNRU1CQVNFQ0ZHX01FTUJBU0UwX01BU0tfU0hJRlQJMAorI2RlZmluZSBCT05JVE9fUENJTUVNQkFTRUNGR19NRU1CQVNFMF9UUkFOUwkweDAwMDAwM2UwCisjZGVmaW5lIEJPTklUT19QQ0lNRU1CQVNFQ0ZHX01FTUJBU0UwX1RSQU5TX1NISUZUCTUKKyNkZWZpbmUgQk9OSVRPX1BDSU1FTUJBU0VDRkdfTUVNQkFTRTBfQ0FDSEVECTB4MDAwMDA0MDAKKyNkZWZpbmUgQk9OSVRPX1BDSU1FTUJBU0VDRkdfTUVNQkFTRTBfSU8JMHgwMDAwMDgwMAorCisjZGVmaW5lIEJPTklUT19QQ0lNRU1CQVNFQ0ZHX01FTUJBU0UxX01BU0sJMHgwMDAxZjAwMAorI2RlZmluZSBCT05JVE9fUENJTUVNQkFTRUNGR19NRU1CQVNFMV9NQVNLX1NISUZUCTEyCisjZGVmaW5lIEJPTklUT19QQ0lNRU1CQVNFQ0ZHX01FTUJBU0UxX1RSQU5TCTB4MDAzZTAwMDAKKyNkZWZpbmUgQk9OSVRPX1BDSU1FTUJBU0VDRkdfTUVNQkFTRTFfVFJBTlNfU0hJRlQJMTcKKyNkZWZpbmUgQk9OSVRPX1BDSU1FTUJBU0VDRkdfTUVNQkFTRTFfQ0FDSEVECTB4MDA0MDAwMDAKKyNkZWZpbmUgQk9OSVRPX1BDSU1FTUJBU0VDRkdfTUVNQkFTRTFfSU8JMHgwMDgwMDAwMAorCisjZGVmaW5lIEJPTklUT19QQ0lNRU1CQVNFQ0ZHX0FTSElGVAkyMworI2RlZmluZSBCT05JVE9fUENJTUVNQkFTRUNGR19BTUFTSyAgICAgICAgICAgICAgMHgwMDdmZmZmZgorI2RlZmluZSBCT05JVE9fUENJTUVNQkFTRUNGR1NJWkUoV0lOLFNJWkUpCSgoKH4oKFNJWkUpLTEpKT4+KEJPTklUT19QQ0lNRU1CQVNFQ0ZHX0FTSElGVC1CT05JVE9fUENJTUVNQkFTRUNGR19NRU1CQVNFIyNXSU4jI19NQVNLX1NISUZUKSkgJiBCT05JVE9fUENJTUVNQkFTRUNGR19NRU1CQVNFIyNXSU4jI19NQVNLKQorI2RlZmluZSBCT05JVE9fUENJTUVNQkFTRUNGR0JBU0UoV0lOLEJBU0UpCSgoKEJBU0UpPj4oQk9OSVRPX1BDSU1FTUJBU0VDRkdfQVNISUZULUJPTklUT19QQ0lNRU1CQVNFQ0ZHX01FTUJBU0UjI1dJTiMjX1RSQU5TX1NISUZUKSkgJiBCT05JVE9fUENJTUVNQkFTRUNGR19NRU1CQVNFIyNXSU4jI19UUkFOUykKKworI2RlZmluZSBCT05JVE9fUENJTUVNQkFTRUNGR19TSVpFKFdJTixDRkcpICAoKCgoKH4oQ0ZHKSkgJiBCT05JVE9fUENJTUVNQkFTRUNGR19NRU1CQVNFIyNXSU4jI19NQVNLKSkgPDwgKEJPTklUT19QQ0lNRU1CQVNFQ0ZHX0FTSElGVCAtIEJPTklUT19QQ0lNRU1CQVNFQ0ZHX01FTUJBU0UjI1dJTiMjX01BU0tfU0hJRlQpKSB8IEJPTklUT19QQ0lNRU1CQVNFQ0ZHX0FNQVNLKQorCisKKyNkZWZpbmUgQk9OSVRPX1BDSU1FTUJBU0VDRkdfQUREUk1BU0soV0lOLENGRykgICgoKChDRkcpICYgQk9OSVRPX1BDSU1FTUJBU0VDRkdfTUVNQkFTRSMjV0lOIyNfTUFTSykgPj4gQk9OSVRPX1BDSU1FTUJBU0VDRkdfTUVNQkFTRSMjV0lOIyNfTUFTS19TSElGVCkgPDwgQk9OSVRPX1BDSU1FTUJBU0VDRkdfQVNISUZUKQorI2RlZmluZSBCT05JVE9fUENJTUVNQkFTRUNGR19BRERSTUFTSyhXSU4sQ0ZHKSAgKCgoKENGRykgJiBCT05JVE9fUENJTUVNQkFTRUNGR19NRU1CQVNFIyNXSU4jI19NQVNLKSA+PiBCT05JVE9fUENJTUVNQkFTRUNGR19NRU1CQVNFIyNXSU4jI19NQVNLX1NISUZUKSA8PCBCT05JVE9fUENJTUVNQkFTRUNGR19BU0hJRlQpCisjZGVmaW5lIEJPTklUT19QQ0lNRU1CQVNFQ0ZHX0FERFJUUkFOUyhXSU4sQ0ZHKSAoKCgoQ0ZHKSAmIEJPTklUT19QQ0lNRU1CQVNFQ0ZHX01FTUJBU0UjI1dJTiMjX1RSQU5TKSA+PiBCT05JVE9fUENJTUVNQkFTRUNGR19NRU1CQVNFIyNXSU4jI19UUkFOU19TSElGVCkgPDwgQk9OSVRPX1BDSU1FTUJBU0VDRkdfQVNISUZUKQorCisjZGVmaW5lIEJPTklUT19QQ0lUT1BIWVMoV0lOLEFERFIsQ0ZHKSAgICAgICAgICAoIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoQUREUikgJiAofihCT05JVE9fUENJTUVNQkFTRUNGR19NQVNLKSkpICYgKH4oQk9OSVRPX1BDSU1FTUJBU0VDRkdfQUREUk1BU0soV0lOLENGRykpKSkgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCT05JVE9fUENJTUVNQkFTRUNGR19BRERSVFJBTlMoV0lOLENGRykpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKworLyogUENJQ21kICovCisKKyNkZWZpbmUgQk9OSVRPX1BDSUNNRF9NRU1FTgkJMHgwMDAwMDAwMgorI2RlZmluZSBCT05JVE9fUENJQ01EX01TVFJFTgkJMHgwMDAwMDAwNAorCisKKyNlbmRpZiAvKiBfQVNNX01JUFNfQk9BUkRTX0JPTklUTzY0X0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWlwcy1ib2FyZHMvZ2VuZXJpYy5oIGIvaW5jbHVkZS9hc20tbWlwcy9taXBzLWJvYXJkcy9nZW5lcmljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVkMWQxNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWlwcy1ib2FyZHMvZ2VuZXJpYy5oCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDYXJzdGVuIExhbmdnYWFyZCwgY2Fyc3RlbmxAbWlwcy5jb20KKyAqIENvcHlyaWdodCAoQykgMjAwMCBNSVBTIFRlY2hub2xvZ2llcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqIERlZmluZXMgb2YgdGhlIE1JUFMgYm9hcmRzIHNwZWNpZmljIGFkZHJlc3MtTUFQLCByZWdpc3RlcnMsIGV0Yy4KKyAqLworI2lmbmRlZiBfX0FTTV9NSVBTX0JPQVJEU19HRU5FUklDX0gKKyNkZWZpbmUgX19BU01fTUlQU19CT0FSRFNfR0VORVJJQ19ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgPGFzbS9taXBzLWJvYXJkcy9ib25pdG82NC5oPgorCisvKgorICogRGlzcGxheSByZWdpc3RlciBiYXNlLgorICovCisjaWZkZWYgQ09ORklHX01JUFNfU0VBRAorI2RlZmluZSBBU0NJSV9ESVNQTEFZX1BPU19CQVNFICAgICAweDFmMDAwNWMwCisjZWxzZQorI2RlZmluZSBBU0NJSV9ESVNQTEFZX1dPUkRfQkFTRSAgICAweDFmMDAwNDEwCisjZGVmaW5lIEFTQ0lJX0RJU1BMQVlfUE9TX0JBU0UgICAgIDB4MWYwMDA0MTgKKyNlbmRpZgorCisKKy8qCisgKiBZYW1vbiBQcm9tIHByaW50IGFkZHJlc3MuCisgKi8KKyNkZWZpbmUgWUFNT05fUFJPTV9QUklOVF9BRERSICAgICAgMHgxZmMwMDUwNAorCisKKy8qCisgKiBSZXNldCByZWdpc3Rlci4KKyAqLworI2lmZGVmIENPTkZJR19NSVBTX1NFQUQKKyNkZWZpbmUgU09GVFJFU19SRUcgICAgICAgMHgxZTgwMDA1MAorI2RlZmluZSBHT1JFU0VUICAgICAgICAgICAweDRkCisjZWxzZQorI2RlZmluZSBTT0ZUUkVTX1JFRyAgICAgICAweDFmMDAwNTAwCisjZGVmaW5lIEdPUkVTRVQgICAgICAgICAgIDB4NDIKKyNlbmRpZgorCisvKgorICogUmV2aXNpb24gcmVnaXN0ZXIuCisgKi8KKyNkZWZpbmUgTUlQU19SRVZJU0lPTl9SRUcgICAgICAgICAgICAgICAgICAweDFmYzAwMDEwCisjZGVmaW5lIE1JUFNfUkVWSVNJT05fQ09SSURfUUVEX1JNNTI2MSAgICAgMAorI2RlZmluZSBNSVBTX1JFVklTSU9OX0NPUklEX0NPUkVfTFYgICAgICAgIDEKKyNkZWZpbmUgTUlQU19SRVZJU0lPTl9DT1JJRF9CT05JVE82NCAgICAgICAyCisjZGVmaW5lIE1JUFNfUkVWSVNJT05fQ09SSURfQ09SRV8yMEsgICAgICAgMworI2RlZmluZSBNSVBTX1JFVklTSU9OX0NPUklEX0NPUkVfRlBHQSAgICAgIDQKKyNkZWZpbmUgTUlQU19SRVZJU0lPTl9DT1JJRF9DT1JFX01TQyAgICAgICA1CisjZGVmaW5lIE1JUFNfUkVWSVNJT05fQ09SSURfQ09SRV9FTVVMICAgICAgNgorI2RlZmluZSBNSVBTX1JFVklTSU9OX0NPUklEX0NPUkVfRlBHQTIgICAgIDcKKyNkZWZpbmUgTUlQU19SRVZJU0lPTl9DT1JJRF9DT1JFX0ZQR0FSMiAgICA4CisKKy8qKioqIEFydGlmaWNpYWwgY29yaWQgZGVmaW5lcyAqKioqLworLyoKKyAqICBDb3JlRU1VTCB3aXRoICAgQm9uaXRvICAgU3lzdGVtIENvbnRyb2xsZXIgaXMgdHJlYXRlZCBsaWtlIGEgQ29yZTIwSworICogIENvcmVFTVVMIHdpdGggU09DLWl0IDEwMSBTeXN0ZW0gQ29udHJvbGxlciBpcyB0cmVhdGVkIGxpa2UgYSBDb3JlTVNDCisgKi8KKyNkZWZpbmUgTUlQU19SRVZJU0lPTl9DT1JJRF9DT1JFX0VNVUxfQk9OICAweDYzCisjZGVmaW5lIE1JUFNfUkVWSVNJT05fQ09SSURfQ09SRV9FTVVMX01TQyAgMHg2NQorCisjZGVmaW5lIE1JUFNfUkVWSVNJT05fQ09SSUQgKCgoKih2b2xhdGlsZSB1MzIgKilpb3JlbWFwKE1JUFNfUkVWSVNJT05fUkVHLCA0KSkgPj4gMTApICYgMHgzZikKKworZXh0ZXJuIHVuc2lnbmVkIGludCBtaXBzX3JldmlzaW9uX2NvcmlkOworCisjZW5kaWYgIC8qIF9fQVNNX01JUFNfQk9BUkRTX0dFTkVSSUNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9taXBzLWJvYXJkcy9tYWx0YS5oIGIvaW5jbHVkZS9hc20tbWlwcy9taXBzLWJvYXJkcy9tYWx0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwYmEzYzUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21pcHMtYm9hcmRzL21hbHRhLmgKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENhcnN0ZW4gTGFuZ2dhYXJkLCBjYXJzdGVubEBtaXBzLmNvbQorICogQ29weXJpZ2h0IChDKSAyMDAwIE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChWZXJzaW9uIDIpIGFzCisgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqIERlZmluZXMgb2YgdGhlIE1hbHRhIGJvYXJkIHNwZWNpZmljIGFkZHJlc3MtTUFQLCByZWdpc3RlcnMsIGV0Yy4KKyAqLworI2lmbmRlZiBfX0FTTV9NSVBTX0JPQVJEU19NQUxUQV9ICisjZGVmaW5lIF9fQVNNX01JUFNfQk9BUkRTX01BTFRBX0gKKworI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vbWlwcy1ib2FyZHMvbXNjMDFfcGNpLmg+CisjaW5jbHVkZSA8YXNtL2d0NjQxMjAuaD4KKworLyoKKyAqIE1hbHRhIEkvTyBwb3J0cyBiYXNlIGFkZHJlc3MgZm9yIHRoZSBHYWxpbGVvIEdUNjQxMjAgYW5kIEFsZ29yaXRobWljcworICogQm9uaXRvIHN5c3RlbSBjb250cm9sbGVycy4KKyAqLworI2RlZmluZSBNQUxUQV9HVF9QT1JUX0JBU0UgICAgICBnZXRfZ3RfcG9ydF9iYXNlKEdUX1BDSTBJT0xEX09GUykKKyNkZWZpbmUgTUFMVEFfQk9OSVRPX1BPUlRfQkFTRSAgKCh1bnNpZ25lZCBsb25nKWlvcmVtYXAgKDB4MWZkMDAwMDAsIDB4MTAwMDApKQorI2RlZmluZSBNQUxUQV9NU0NfUE9SVF9CQVNFICAgICBnZXRfbXNjX3BvcnRfYmFzZShNU0MwMV9QQ0lfU0MyUElPQkFTTCkKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9ndF9wb3J0X2Jhc2UodW5zaWduZWQgbG9uZyByZWcpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCWFkZHIgPSBHVF9SRUFEKHJlZyk7CisJcmV0dXJuICh1bnNpZ25lZCBsb25nKSBpb3JlbWFwICgoKGFkZHIgJiAweGZmZmYpIDw8IDIxKSwgMHgxMDAwMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfbXNjX3BvcnRfYmFzZSh1bnNpZ25lZCBsb25nIHJlZykKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisJTVNDX1JFQUQocmVnLCBhZGRyKTsKKwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpIGlvcmVtYXAoYWRkciwgMHgxMDAwMCk7Cit9CisKKy8qCisgKiBNYWx0YSBSVEMtZGV2aWNlIGluZGlyZWN0IHJlZ2lzdGVyIGFjY2Vzcy4KKyAqLworI2RlZmluZSBNQUxUQV9SVENfQURSX1JFRyAgICAgICAweDcwCisjZGVmaW5lIE1BTFRBX1JUQ19EQVRfUkVHICAgICAgIDB4NzEKKworLyoKKyAqIE1hbHRhIFNNU0MgRkRDMzdNODE3IFN1cGVyIEkvTyBDb250cm9sbGVyIHJlZ2lzdGVyLgorICovCisjZGVmaW5lIFNNU0NfQ09ORklHX1JFRwkJMHgzZjAKKyNkZWZpbmUgU01TQ19EQVRBX1JFRwkJMHgzZjEKKworI2RlZmluZSBTTVNDX0NPTkZJR19ERVZOVU0JMHg3CisjZGVmaW5lIFNNU0NfQ09ORklHX0FDVElWQVRFCTB4MzAKKyNkZWZpbmUgU01TQ19DT05GSUdfRU5URVIJMHg1NQorI2RlZmluZSBTTVNDX0NPTkZJR19FWElUCTB4YWEKKworI2RlZmluZSBTTVNDX0NPTkZJR19ERVZOVU1fRkxPUFBZICAgICAwCisKKyNkZWZpbmUgU01TQ19DT05GSUdfQUNUSVZBVEVfRU5BQkxFICAgMQorCisjZGVmaW5lIFNNU0NfV1JJVEUoeCxhKSAgICAgb3V0Yih4LGEpCisKKyNkZWZpbmUgTUFMVEFfSk1QUlNfUkVHCQkweDFmMDAwMjEwCisKKyNlbmRpZiAvKiBfX0FTTV9NSVBTX0JPQVJEU19NQUxUQV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21pcHMtYm9hcmRzL21hbHRhaW50LmggYi9pbmNsdWRlL2FzbS1taXBzL21pcHMtYm9hcmRzL21hbHRhaW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc2MTgxOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWlwcy1ib2FyZHMvbWFsdGFpbnQuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogQ2Fyc3RlbiBMYW5nZ2FhcmQsIGNhcnN0ZW5sQG1pcHMuY29tCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIGRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKKyAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqICA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgKgorICogRGVmaW5lcyBmb3IgdGhlIE1hbHRhIGludGVycnVwdCBjb250cm9sbGVyLgorICoKKyAqLworI2lmbmRlZiBfTUlQU19NQUxUQUlOVF9ICisjZGVmaW5lIF9NSVBTX01BTFRBSU5UX0gKKworLyogTnVtYmVyIG9mIElSUSBzdXBwb3J0ZWQgb24gaHcgaW50ZXJydXB0IDAuICovCisjZGVmaW5lIE1BTFRBSU5UX0VORCAgICAgIDE2CisKK2V4dGVybiB2b2lkIG1hbHRhaW50X2luaXQodm9pZCk7CisKKyNlbmRpZiAvKiAhKF9NSVBTX01BTFRBSU5UX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21pcHMtYm9hcmRzL21zYzAxX3BjaS5oIGIvaW5jbHVkZS9hc20tbWlwcy9taXBzLWJvYXJkcy9tc2MwMV9wY2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjJhODdhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9taXBzLWJvYXJkcy9tc2MwMV9wY2kuaApAQCAtMCwwICsxLDI1NiBAQAorLyoKKyAqIFBDSSBSZWdpc3RlciBkZWZpbml0aW9ucyBmb3IgdGhlIE1JUFMgU3lzdGVtIENvbnRyb2xsZXIuCisgKgorICogQ2Fyc3RlbiBMYW5nZ2FhcmQsIGNhcnN0ZW5sQG1pcHMuY29tCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX19BU01fTUlQU19CT0FSRFNfTVNDMDFfUENJX0gKKyNkZWZpbmUgX19BU01fTUlQU19CT0FSRFNfTVNDMDFfUENJX0gKKworLyoKKyAqIFJlZ2lzdGVyIG9mZnNldCBhZGRyZXNzZXMKKyAqLworCisjZGVmaW5lIE1TQzAxX1BDSV9JRF9PRlMJCTB4MDAwMAorI2RlZmluZSBNU0MwMV9QQ0lfU0MyUE1CQVNMX09GUwkJMHgwMjA4CisjZGVmaW5lIE1TQzAxX1BDSV9TQzJQTU1TS0xfT0ZTCQkweDAyMTgKKyNkZWZpbmUgTVNDMDFfUENJX1NDMlBNTUFQTF9PRlMJCTB4MDIyOAorI2RlZmluZSBNU0MwMV9QQ0lfU0MyUElPQkFTTF9PRlMJMHgwMjQ4CisjZGVmaW5lIE1TQzAxX1BDSV9TQzJQSU9NU0tMX09GUwkweDAyNTgKKyNkZWZpbmUgTVNDMDFfUENJX1NDMlBJT01BUExfT0ZTCTB4MDI2OAorI2RlZmluZSBNU0MwMV9QQ0lfUDJTQ01TS0xfT0ZTCQkweDAzMDgKKyNkZWZpbmUgTVNDMDFfUENJX1AyU0NNQVBMX09GUwkJMHgwMzE4CisjZGVmaW5lIE1TQzAxX1BDSV9JTlRDRkdfT0ZTCQkweDA2MDAKKyNkZWZpbmUgTVNDMDFfUENJX0lOVFNUQVRfT0ZTCQkweDA2MDgKKyNkZWZpbmUgTVNDMDFfUENJX0NGR0FERFJfT0ZTCQkweDA2MTAKKyNkZWZpbmUgTVNDMDFfUENJX0NGR0RBVEFfT0ZTCQkweDA2MTgKKyNkZWZpbmUgTVNDMDFfUENJX0lBQ0tfT0ZTCQkweDA2MjAKKyNkZWZpbmUgTVNDMDFfUENJX0hFQUQwX09GUwkJMHgyMDAwICAvKiBEZXZJRCwgVmVuZG9ySUQgKi8KKyNkZWZpbmUgTVNDMDFfUENJX0hFQUQxX09GUwkJMHgyMDA4ICAvKiBTdGF0dXMsIENvbW1hbmQgKi8KKyNkZWZpbmUgTVNDMDFfUENJX0hFQUQyX09GUwkJMHgyMDEwICAvKiBDbGFzcyBjb2RlLCBSZXZJRCAqLworI2RlZmluZSBNU0MwMV9QQ0lfSEVBRDNfT0ZTCQkweDIwMTggIC8qIGJpc3QsIGhlYWRlciwgbGF0ZW5jeSAqLworI2RlZmluZSBNU0MwMV9QQ0lfSEVBRDRfT0ZTCQkweDIwMjAgIC8qIEJBUiAwICovCisjZGVmaW5lIE1TQzAxX1BDSV9IRUFENV9PRlMJCTB4MjAyOCAgLyogQkFSIDEgKi8KKyNkZWZpbmUgTVNDMDFfUENJX0hFQUQ2X09GUwkJMHgyMDMwICAvKiBCQVIgMiAqLworI2RlZmluZSBNU0MwMV9QQ0lfSEVBRDdfT0ZTCQkweDIwMzggIC8qIEJBUiAzICovCisjZGVmaW5lIE1TQzAxX1BDSV9IRUFEOF9PRlMJCTB4MjA0MCAgLyogQkFSIDQgKi8KKyNkZWZpbmUgTVNDMDFfUENJX0hFQUQ5X09GUwkJMHgyMDQ4ICAvKiBCQVIgNSAqLworI2RlZmluZSBNU0MwMV9QQ0lfSEVBRDEwX09GUwkJMHgyMDUwICAvKiBDYXJkQnVzIENJUyBQdHIgKi8KKyNkZWZpbmUgTVNDMDFfUENJX0hFQUQxMV9PRlMJCTB4MjA1OCAgLyogU3ViU3lzdGVtIElELCAtVmVuZG9ySUQgKi8KKyNkZWZpbmUgTVNDMDFfUENJX0hFQUQxMl9PRlMJCTB4MjA2MCAgLyogUk9NIEJBUiAqLworI2RlZmluZSBNU0MwMV9QQ0lfSEVBRDEzX09GUwkJMHgyMDY4ICAvKiBDYXBhYmlsaXRpZXMgcHRyICovCisjZGVmaW5lIE1TQzAxX1BDSV9IRUFEMTRfT0ZTCQkweDIwNzAgIC8qIHJlc2VydmVkICovCisjZGVmaW5lIE1TQzAxX1BDSV9IRUFEMTVfT0ZTCQkweDIwNzggIC8qIE1heGwsIG1pbmcsIGludHBpbiwgaW50ICovCisjZGVmaW5lIE1TQzAxX1BDSV9CQVIwX09GUwkJMHgyMjIwCisjZGVmaW5lIE1TQzAxX1BDSV9DRkdfT0ZTCQkweDIzODAKKyNkZWZpbmUgTVNDMDFfUENJX1NXQVBfT0ZTCQkweDIzODgKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJlZ2lzdGVyIGVuY29kaW5ncworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgTVNDMDFfUENJX0lEX0lEX1NIRgkJMTYKKyNkZWZpbmUgTVNDMDFfUENJX0lEX0lEX01TSwkJMHgwMGZmMDAwMAorI2RlZmluZSBNU0MwMV9QQ0lfSURfSURfSE9TVEJSSURHRQk4MgorI2RlZmluZSBNU0MwMV9QQ0lfSURfTUFSX1NIRgkJOAorI2RlZmluZSBNU0MwMV9QQ0lfSURfTUFSX01TSwkJMHgwMDAwZmYwMAorI2RlZmluZSBNU0MwMV9QQ0lfSURfTUlSX1NIRgkJMAorI2RlZmluZSBNU0MwMV9QQ0lfSURfTUlSX01TSwkJMHgwMDAwMDBmZgorCisjZGVmaW5lIE1TQzAxX1BDSV9TQzJQTUJBU0xfQkFTX1NIRgkyNAorI2RlZmluZSBNU0MwMV9QQ0lfU0MyUE1CQVNMX0JBU19NU0sJMHhmZjAwMDAwMAorCisjZGVmaW5lIE1TQzAxX1BDSV9TQzJQTU1TS0xfTVNLX1NIRgkyNAorI2RlZmluZSBNU0MwMV9QQ0lfU0MyUE1NU0tMX01TS19NU0sJMHhmZjAwMDAwMAorCisjZGVmaW5lIE1TQzAxX1BDSV9TQzJQTU1BUExfTUFQX1NIRgkyNAorI2RlZmluZSBNU0MwMV9QQ0lfU0MyUE1NQVBMX01BUF9NU0sJMHhmZjAwMDAwMAorCisjZGVmaW5lIE1TQzAxX1BDSV9TQzJQSU9CQVNMX0JBU19TSEYJMjQKKyNkZWZpbmUgTVNDMDFfUENJX1NDMlBJT0JBU0xfQkFTX01TSwkweGZmMDAwMDAwCisKKyNkZWZpbmUgTVNDMDFfUENJX1NDMlBJT01TS0xfTVNLX1NIRgkyNAorI2RlZmluZSBNU0MwMV9QQ0lfU0MyUElPTVNLTF9NU0tfTVNLCTB4ZmYwMDAwMDAKKworI2RlZmluZSBNU0MwMV9QQ0lfU0MyUElPTUFQTF9NQVBfU0hGCTI0CisjZGVmaW5lIE1TQzAxX1BDSV9TQzJQSU9NQVBMX01BUF9NU0sJMHhmZjAwMDAwMAorCisjZGVmaW5lIE1TQzAxX1BDSV9QMlNDTVNLTF9NU0tfU0hGCTI0CisjZGVmaW5lIE1TQzAxX1BDSV9QMlNDTVNLTF9NU0tfTVNLCTB4ZmYwMDAwMDAKKworI2RlZmluZSBNU0MwMV9QQ0lfUDJTQ01BUExfTUFQX1NIRgkyNAorI2RlZmluZSBNU0MwMV9QQ0lfUDJTQ01BUExfTUFQX01TSwkweGZmMDAwMDAwCisKKyNkZWZpbmUgTVNDMDFfUENJX0lOVENGR19SU1RfU0hGICAgICAgICAxMAorI2RlZmluZSBNU0MwMV9QQ0lfSU5UQ0ZHX1JTVF9NU0sgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgTVNDMDFfUENJX0lOVENGR19SU1RfQklUICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIE1TQzAxX1BDSV9JTlRDRkdfTVdFX1NIRiAgICAgICAgOQorI2RlZmluZSBNU0MwMV9QQ0lfSU5UQ0ZHX01XRV9NU0sgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgTVNDMDFfUENJX0lOVENGR19NV0VfQklUICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIE1TQzAxX1BDSV9JTlRDRkdfRFRPX1NIRiAgICAgICAgOAorI2RlZmluZSBNU0MwMV9QQ0lfSU5UQ0ZHX0RUT19NU0sgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgTVNDMDFfUENJX0lOVENGR19EVE9fQklUICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIE1TQzAxX1BDSV9JTlRDRkdfTUFfU0hGICAgICAgICAgNworI2RlZmluZSBNU0MwMV9QQ0lfSU5UQ0ZHX01BX01TSyAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgTVNDMDFfUENJX0lOVENGR19NQV9CSVQgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIE1TQzAxX1BDSV9JTlRDRkdfVEFfU0hGICAgICAgICAgNgorI2RlZmluZSBNU0MwMV9QQ0lfSU5UQ0ZHX1RBX01TSyAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgTVNDMDFfUENJX0lOVENGR19UQV9CSVQgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIE1TQzAxX1BDSV9JTlRDRkdfUlRZX1NIRiAgICAgICAgNQorI2RlZmluZSBNU0MwMV9QQ0lfSU5UQ0ZHX1JUWV9NU0sgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgTVNDMDFfUENJX0lOVENGR19SVFlfQklUICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIE1TQzAxX1BDSV9JTlRDRkdfTVdQX1NIRiAgICAgICAgNAorI2RlZmluZSBNU0MwMV9QQ0lfSU5UQ0ZHX01XUF9NU0sgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgTVNDMDFfUENJX0lOVENGR19NV1BfQklUICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIE1TQzAxX1BDSV9JTlRDRkdfTVJQX1NIRiAgICAgICAgMworI2RlZmluZSBNU0MwMV9QQ0lfSU5UQ0ZHX01SUF9NU0sgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgTVNDMDFfUENJX0lOVENGR19NUlBfQklUICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIE1TQzAxX1BDSV9JTlRDRkdfU1dQX1NIRiAgICAgICAgMgorI2RlZmluZSBNU0MwMV9QQ0lfSU5UQ0ZHX1NXUF9NU0sgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgTVNDMDFfUENJX0lOVENGR19TV1BfQklUICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIE1TQzAxX1BDSV9JTlRDRkdfU1JQX1NIRiAgICAgICAgMQorI2RlZmluZSBNU0MwMV9QQ0lfSU5UQ0ZHX1NSUF9NU0sgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgTVNDMDFfUENJX0lOVENGR19TUlBfQklUICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIE1TQzAxX1BDSV9JTlRDRkdfU0VfU0hGICAgICAgICAgMAorI2RlZmluZSBNU0MwMV9QQ0lfSU5UQ0ZHX1NFX01TSyAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgTVNDMDFfUENJX0lOVENGR19TRV9CSVQgICAgICAgICAweDAwMDAwMDAxCisKKyNkZWZpbmUgTVNDMDFfUENJX0lOVFNUQVRfUlNUX1NIRiAgICAgICAxMAorI2RlZmluZSBNU0MwMV9QQ0lfSU5UU1RBVF9SU1RfTVNLICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgTVNDMDFfUENJX0lOVFNUQVRfUlNUX0JJVCAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIE1TQzAxX1BDSV9JTlRTVEFUX01XRV9TSEYgICAgICAgOQorI2RlZmluZSBNU0MwMV9QQ0lfSU5UU1RBVF9NV0VfTVNLICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgTVNDMDFfUENJX0lOVFNUQVRfTVdFX0JJVCAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIE1TQzAxX1BDSV9JTlRTVEFUX0RUT19TSEYgICAgICAgOAorI2RlZmluZSBNU0MwMV9QQ0lfSU5UU1RBVF9EVE9fTVNLICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgTVNDMDFfUENJX0lOVFNUQVRfRFRPX0JJVCAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIE1TQzAxX1BDSV9JTlRTVEFUX01BX1NIRiAgICAgICAgNworI2RlZmluZSBNU0MwMV9QQ0lfSU5UU1RBVF9NQV9NU0sgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgTVNDMDFfUENJX0lOVFNUQVRfTUFfQklUICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIE1TQzAxX1BDSV9JTlRTVEFUX1RBX1NIRiAgICAgICAgNgorI2RlZmluZSBNU0MwMV9QQ0lfSU5UU1RBVF9UQV9NU0sgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgTVNDMDFfUENJX0lOVFNUQVRfVEFfQklUICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIE1TQzAxX1BDSV9JTlRTVEFUX1JUWV9TSEYgICAgICAgNQorI2RlZmluZSBNU0MwMV9QQ0lfSU5UU1RBVF9SVFlfTVNLICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgTVNDMDFfUENJX0lOVFNUQVRfUlRZX0JJVCAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIE1TQzAxX1BDSV9JTlRTVEFUX01XUF9TSEYgICAgICAgNAorI2RlZmluZSBNU0MwMV9QQ0lfSU5UU1RBVF9NV1BfTVNLICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgTVNDMDFfUENJX0lOVFNUQVRfTVdQX0JJVCAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIE1TQzAxX1BDSV9JTlRTVEFUX01SUF9TSEYgICAgICAgMworI2RlZmluZSBNU0MwMV9QQ0lfSU5UU1RBVF9NUlBfTVNLICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgTVNDMDFfUENJX0lOVFNUQVRfTVJQX0JJVCAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIE1TQzAxX1BDSV9JTlRTVEFUX1NXUF9TSEYgICAgICAgMgorI2RlZmluZSBNU0MwMV9QQ0lfSU5UU1RBVF9TV1BfTVNLICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgTVNDMDFfUENJX0lOVFNUQVRfU1dQX0JJVCAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIE1TQzAxX1BDSV9JTlRTVEFUX1NSUF9TSEYgICAgICAgMQorI2RlZmluZSBNU0MwMV9QQ0lfSU5UU1RBVF9TUlBfTVNLICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgTVNDMDFfUENJX0lOVFNUQVRfU1JQX0JJVCAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIE1TQzAxX1BDSV9JTlRTVEFUX1NFX1NIRiAgICAgICAgMAorI2RlZmluZSBNU0MwMV9QQ0lfSU5UU1RBVF9TRV9NU0sgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgTVNDMDFfUENJX0lOVFNUQVRfU0VfQklUICAgICAgICAweDAwMDAwMDAxCisKKyNkZWZpbmUgTVNDMDFfUENJX0NGR0FERFJfQk5VTV9TSEYJMTYKKyNkZWZpbmUgTVNDMDFfUENJX0NGR0FERFJfQk5VTV9NU0sJMHgwMGZmMDAwMAorI2RlZmluZSBNU0MwMV9QQ0lfQ0ZHQUREUl9ETlVNX1NIRgkxMQorI2RlZmluZSBNU0MwMV9QQ0lfQ0ZHQUREUl9ETlVNX01TSwkweDAwMDBmODAwCisjZGVmaW5lIE1TQzAxX1BDSV9DRkdBRERSX0ZOVU1fU0hGCTgKKyNkZWZpbmUgTVNDMDFfUENJX0NGR0FERFJfRk5VTV9NU0sJMHgwMDAwMDcwMAorI2RlZmluZSBNU0MwMV9QQ0lfQ0ZHQUREUl9STlVNX1NIRgkyCisjZGVmaW5lIE1TQzAxX1BDSV9DRkdBRERSX1JOVU1fTVNLCTB4MDAwMDAwZmMKKworI2RlZmluZSBNU0MwMV9QQ0lfQ0ZHREFUQV9EQVRBX1NIRgkwCisjZGVmaW5lIE1TQzAxX1BDSV9DRkdEQVRBX0RBVEFfTVNLCTB4ZmZmZmZmZmYKKworLyogVGhlIGRlZmluZXMgYmVsb3cgYXJlIE9OTFkgdmFsaWQgZm9yIGEgTUVNIGJhciEgKi8KKyNkZWZpbmUgTVNDMDFfUENJX0JBUjBfU0laRV9TSEYJICAgICAgICA0CisjZGVmaW5lIE1TQzAxX1BDSV9CQVIwX1NJWkVfTVNLCSAgICAgICAgMHhmZmZmZmZmMAorI2RlZmluZSBNU0MwMV9QQ0lfQkFSMF9QX1NIRgkgICAgICAgIDMKKyNkZWZpbmUgTVNDMDFfUENJX0JBUjBfUF9NU0sJICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIE1TQzAxX1BDSV9CQVIwX1BfQklUCSAgICAgICAgTVNDMDFfUENJX0JBUjBfUF9NU0sKKyNkZWZpbmUgTVNDMDFfUENJX0JBUjBfRF9TSEYJICAgICAgICAxCisjZGVmaW5lIE1TQzAxX1BDSV9CQVIwX0RfTVNLCSAgICAgICAgMHgwMDAwMDAwNgorI2RlZmluZSBNU0MwMV9QQ0lfQkFSMF9UX1NIRgkgICAgICAgIDAKKyNkZWZpbmUgTVNDMDFfUENJX0JBUjBfVF9NU0sJICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIE1TQzAxX1BDSV9CQVIwX1RfQklUCSAgICAgICAgTVNDMDFfUENJX0JBUjBfVF9NU0sKKworCisjZGVmaW5lIE1TQzAxX1BDSV9DRkdfUkFfU0hGCSAgICAgICAgMTcKKyNkZWZpbmUgTVNDMDFfUENJX0NGR19SQV9NU0sJICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIE1TQzAxX1BDSV9DRkdfUkFfQklUCSAgICAgICAgTVNDMDFfUENJX0NGR19SQV9NU0sKKyNkZWZpbmUgTVNDMDFfUENJX0NGR19HX1NIRgkgICAgICAgIDE2CisjZGVmaW5lIE1TQzAxX1BDSV9DRkdfR19NU0sJICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIE1TQzAxX1BDSV9DRkdfR19CSVQJICAgICAgICBNU0MwMV9QQ0lfQ0ZHX0dfTVNLCisjZGVmaW5lIE1TQzAxX1BDSV9DRkdfRU5fU0hGCSAgICAgICAgMTUKKyNkZWZpbmUgTVNDMDFfUENJX0NGR19FTl9NU0sJICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIE1TQzAxX1BDSV9DRkdfRU5fQklUCSAgICAgICAgTVNDMDFfUENJX0NGR19FTl9NU0sKKyNkZWZpbmUgTVNDMDFfUENJX0NGR19NQVhSVFJZX1NIRiAgICAgICAwCisjZGVmaW5lIE1TQzAxX1BDSV9DRkdfTUFYUlRSWV9NU0sgICAgICAgMHgwMDAwMDBmZgorCisjZGVmaW5lIE1TQzAxX1BDSV9TV0FQX0lPX1NIRgkJMTgKKyNkZWZpbmUgTVNDMDFfUENJX1NXQVBfSU9fTVNLCQkweDAwMGMwMDAwCisjZGVmaW5lIE1TQzAxX1BDSV9TV0FQX01FTV9TSEYJCTE2CisjZGVmaW5lIE1TQzAxX1BDSV9TV0FQX01FTV9NU0sJCTB4MDAwMzAwMDAKKyNkZWZpbmUgTVNDMDFfUENJX1NXQVBfQkFSMF9TSEYJCTAKKyNkZWZpbmUgTVNDMDFfUENJX1NXQVBfQkFSMF9NU0sJCTB4MDAwMDAwMDMKKyNkZWZpbmUgTVNDMDFfUENJX1NXQVBfTk9TV0FQCQkwCisjZGVmaW5lIE1TQzAxX1BDSV9TV0FQX0JZVEVTV0FQCQkxCisKKy8qCisgKiBNSVBTIFN5c3RlbSBjb250cm9sbGVyIFBDSSByZWdpc3RlciBiYXNlLgorICoKKyAqIEZJWE1FIC0gYXJlIHRoZXNlIG1hY3JvcyBzcGVjaWZpYyB0byBNYWx0YSBhbmQgY28gb3IgdG8gdGhlIE1TQz8gIElmIHRoZQorICogbGF0dGVyLCB0aGV5IHNob3VsZCBiZSBtb3ZlZCBlbHNld2hlcmUuCisgKi8KKyNkZWZpbmUgTUlQU19NU0MwMV9QQ0lfUkVHX0JBU0UJMHgxYmQwMDAwMAorCitleHRlcm4gdW5zaWduZWQgbG9uZyBfcGNpY3RybF9tc2M7CisKKyNkZWZpbmUgTVNDMDFfUENJX1JFR19CQVNFCV9wY2ljdHJsX21zYworCisjZGVmaW5lIE1TQ19XUklURShyZWcsIGRhdGEpCWRvIHsgKih2b2xhdGlsZSB1MzIgKikocmVnKSA9IGRhdGE7IH0gd2hpbGUgKDApCisjZGVmaW5lIE1TQ19SRUFEKHJlZywgZGF0YSkJZG8geyBkYXRhID0gKih2b2xhdGlsZSB1MzIgKikocmVnKTsgfSB3aGlsZSAoMCkKKworLyoKKyAqIFJlZ2lzdGVycyBhYnNvbHV0ZSBhZGRyZXNzZXMKKyAqLworCisjZGVmaW5lIE1TQzAxX1BDSV9JRCAgICAgICAgICAgIChNU0MwMV9QQ0lfUkVHX0JBU0UgKyBNU0MwMV9QQ0lfSURfT0ZTKQorI2RlZmluZSBNU0MwMV9QQ0lfU0MyUE1CQVNMICAgICAoTVNDMDFfUENJX1JFR19CQVNFICsgTVNDMDFfUENJX1NDMlBNQkFTTF9PRlMpCisjZGVmaW5lIE1TQzAxX1BDSV9TQzJQTU1TS0wgICAgIChNU0MwMV9QQ0lfUkVHX0JBU0UgKyBNU0MwMV9QQ0lfU0MyUE1NU0tMX09GUykKKyNkZWZpbmUgTVNDMDFfUENJX1NDMlBNTUFQTCAgICAgKE1TQzAxX1BDSV9SRUdfQkFTRSArIE1TQzAxX1BDSV9TQzJQTU1BUExfT0ZTKQorI2RlZmluZSBNU0MwMV9QQ0lfU0MyUElPQkFTTCAgICAoTVNDMDFfUENJX1JFR19CQVNFICsgTVNDMDFfUENJX1NDMlBJT0JBU0xfT0ZTKQorI2RlZmluZSBNU0MwMV9QQ0lfU0MyUElPTVNLTCAgICAoTVNDMDFfUENJX1JFR19CQVNFICsgTVNDMDFfUENJX1NDMlBJT01TS0xfT0ZTKQorI2RlZmluZSBNU0MwMV9QQ0lfU0MyUElPTUFQTCAgICAoTVNDMDFfUENJX1JFR19CQVNFICsgTVNDMDFfUENJX1NDMlBJT01BUExfT0ZTKQorI2RlZmluZSBNU0MwMV9QQ0lfUDJTQ01TS0wgICAgICAoTVNDMDFfUENJX1JFR19CQVNFICsgTVNDMDFfUENJX1AyU0NNU0tMX09GUykKKyNkZWZpbmUgTVNDMDFfUENJX1AyU0NNQVBMICAgICAgKE1TQzAxX1BDSV9SRUdfQkFTRSArIE1TQzAxX1BDSV9QMlNDTUFQTF9PRlMpCisjZGVmaW5lIE1TQzAxX1BDSV9JTlRDRkcgICAgICAgIChNU0MwMV9QQ0lfUkVHX0JBU0UgKyBNU0MwMV9QQ0lfSU5UQ0ZHX09GUykKKyNkZWZpbmUgTVNDMDFfUENJX0lOVFNUQVQgICAgICAgKE1TQzAxX1BDSV9SRUdfQkFTRSArIE1TQzAxX1BDSV9JTlRTVEFUX09GUykKKyNkZWZpbmUgTVNDMDFfUENJX0NGR0FERFIgICAgICAgKE1TQzAxX1BDSV9SRUdfQkFTRSArIE1TQzAxX1BDSV9DRkdBRERSX09GUykKKyNkZWZpbmUgTVNDMDFfUENJX0NGR0RBVEEgICAgICAgKE1TQzAxX1BDSV9SRUdfQkFTRSArIE1TQzAxX1BDSV9DRkdEQVRBX09GUykKKyNkZWZpbmUgTVNDMDFfUENJX0lBQ0sJCShNU0MwMV9QQ0lfUkVHX0JBU0UgKyBNU0MwMV9QQ0lfSUFDS19PRlMpCisjZGVmaW5lIE1TQzAxX1BDSV9IRUFEMAkJKE1TQzAxX1BDSV9SRUdfQkFTRSArIE1TQzAxX1BDSV9IRUFEMF9PRlMpCisjZGVmaW5lIE1TQzAxX1BDSV9IRUFEMQkJKE1TQzAxX1BDSV9SRUdfQkFTRSArIE1TQzAxX1BDSV9IRUFEMV9PRlMpCisjZGVmaW5lIE1TQzAxX1BDSV9IRUFEMgkJKE1TQzAxX1BDSV9SRUdfQkFTRSArIE1TQzAxX1BDSV9IRUFEMl9PRlMpCisjZGVmaW5lIE1TQzAxX1BDSV9IRUFEMwkJKE1TQzAxX1BDSV9SRUdfQkFTRSArIE1TQzAxX1BDSV9IRUFEM19PRlMpCisjZGVmaW5lIE1TQzAxX1BDSV9IRUFENAkJKE1TQzAxX1BDSV9SRUdfQkFTRSArIE1TQzAxX1BDSV9IRUFENF9PRlMpCisjZGVmaW5lIE1TQzAxX1BDSV9IRUFENQkJKE1TQzAxX1BDSV9SRUdfQkFTRSArIE1TQzAxX1BDSV9IRUFENV9PRlMpCisjZGVmaW5lIE1TQzAxX1BDSV9IRUFENgkJKE1TQzAxX1BDSV9SRUdfQkFTRSArIE1TQzAxX1BDSV9IRUFENl9PRlMpCisjZGVmaW5lIE1TQzAxX1BDSV9IRUFENwkJKE1TQzAxX1BDSV9SRUdfQkFTRSArIE1TQzAxX1BDSV9IRUFEN19PRlMpCisjZGVmaW5lIE1TQzAxX1BDSV9IRUFEOAkJKE1TQzAxX1BDSV9SRUdfQkFTRSArIE1TQzAxX1BDSV9IRUFEOF9PRlMpCisjZGVmaW5lIE1TQzAxX1BDSV9IRUFEOQkJKE1TQzAxX1BDSV9SRUdfQkFTRSArIE1TQzAxX1BDSV9IRUFEOV9PRlMpCisjZGVmaW5lIE1TQzAxX1BDSV9IRUFEMTAJKE1TQzAxX1BDSV9SRUdfQkFTRSArIE1TQzAxX1BDSV9IRUFEMTBfT0ZTKQorI2RlZmluZSBNU0MwMV9QQ0lfSEVBRDExCShNU0MwMV9QQ0lfUkVHX0JBU0UgKyBNU0MwMV9QQ0lfSEVBRDExX09GUykKKyNkZWZpbmUgTVNDMDFfUENJX0hFQUQxMgkoTVNDMDFfUENJX1JFR19CQVNFICsgTVNDMDFfUENJX0hFQUQxMV9PRlMpCisjZGVmaW5lIE1TQzAxX1BDSV9IRUFEMTMJKE1TQzAxX1BDSV9SRUdfQkFTRSArIE1TQzAxX1BDSV9IRUFEMTFfT0ZTKQorI2RlZmluZSBNU0MwMV9QQ0lfSEVBRDE0CShNU0MwMV9QQ0lfUkVHX0JBU0UgKyBNU0MwMV9QQ0lfSEVBRDExX09GUykKKyNkZWZpbmUgTVNDMDFfUENJX0hFQUQxNSAgICAgICAgKE1TQzAxX1BDSV9SRUdfQkFTRSArIE1TQzAxX1BDSV9IRUFEMTFfT0ZTKQorI2RlZmluZSBNU0MwMV9QQ0lfQkFSMAkJKE1TQzAxX1BDSV9SRUdfQkFTRSArIE1TQzAxX1BDSV9CQVIwX09GUykKKyNkZWZpbmUgTVNDMDFfUENJX0NGRwkJKE1TQzAxX1BDSV9SRUdfQkFTRSArIE1TQzAxX1BDSV9DRkdfT0ZTKQorI2RlZmluZSBNU0MwMV9QQ0lfU1dBUAkJKE1TQzAxX1BDSV9SRUdfQkFTRSArIE1TQzAxX1BDSV9TV0FQX09GUykKKworI2VuZGlmIC8qIF9fQVNNX01JUFNfQk9BUkRTX01TQzAxX1BDSV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21pcHMtYm9hcmRzL3BpaXg0LmggYi9pbmNsdWRlL2FzbS1taXBzL21pcHMtYm9hcmRzL3BpaXg0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk3MWQ2MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWlwcy1ib2FyZHMvcGlpeDQuaApAQCAtMCwwICsxLDgwIEBACisvKgorICogQ2Fyc3RlbiBMYW5nZ2FhcmQsIGNhcnN0ZW5sQG1pcHMuY29tCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIGRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKKyAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqICA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICogUmVnaXN0ZXIgZGVmaW5pdGlvbnMgZm9yIEludGVsIFBJSVg0IFNvdXRoIEJyaWRnZSBEZXZpY2UuCisgKi8KKyNpZm5kZWYgX19BU01fTUlQU19CT0FSRFNfUElJWDRfSAorI2RlZmluZSBfX0FTTV9NSVBTX0JPQVJEU19QSUlYNF9ICisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBJTyByZWdpc3RlciBvZmZzZXRzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBQSUlYNF9JQ1RMUjFfSUNXMQkweDIwCisjZGVmaW5lIFBJSVg0X0lDVExSMV9JQ1cyCTB4MjEKKyNkZWZpbmUgUElJWDRfSUNUTFIxX0lDVzMJMHgyMQorI2RlZmluZSBQSUlYNF9JQ1RMUjFfSUNXNAkweDIxCisjZGVmaW5lIFBJSVg0X0lDVExSMl9JQ1cxCTB4YTAKKyNkZWZpbmUgUElJWDRfSUNUTFIyX0lDVzIJMHhhMQorI2RlZmluZSBQSUlYNF9JQ1RMUjJfSUNXMwkweGExCisjZGVmaW5lIFBJSVg0X0lDVExSMl9JQ1c0CTB4YTEKKyNkZWZpbmUgUElJWDRfSUNUTFIxX09DVzEJMHgyMQorI2RlZmluZSBQSUlYNF9JQ1RMUjFfT0NXMgkweDIwCisjZGVmaW5lIFBJSVg0X0lDVExSMV9PQ1czCTB4MjAKKyNkZWZpbmUgUElJWDRfSUNUTFIxX09DVzQJMHgyMAorI2RlZmluZSBQSUlYNF9JQ1RMUjJfT0NXMQkweGExCisjZGVmaW5lIFBJSVg0X0lDVExSMl9PQ1cyCTB4YTAKKyNkZWZpbmUgUElJWDRfSUNUTFIyX09DVzMJMHhhMAorI2RlZmluZSBQSUlYNF9JQ1RMUjJfT0NXNAkweGEwCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIFJlZ2lzdGVyIGVuY29kaW5ncy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFBJSVg0X09DVzJfTlNFT0kJKDB4MSA8PCA1KQorI2RlZmluZSBQSUlYNF9PQ1cyX1NFT0kJCSgweDMgPDwgNSkKKyNkZWZpbmUgUElJWDRfT0NXMl9STlNFT0kJKDB4NSA8PCA1KQorI2RlZmluZSBQSUlYNF9PQ1cyX1JBRU9JUwkoMHg0IDw8IDUpCisjZGVmaW5lIFBJSVg0X09DVzJfUkFFT0lDCSgweDAgPDwgNSkKKyNkZWZpbmUgUElJWDRfT0NXMl9SU0VPSQkoMHg3IDw8IDUpCisjZGVmaW5lIFBJSVg0X09DVzJfU1AJCSgweDYgPDwgNSkKKyNkZWZpbmUgUElJWDRfT0NXMl9OT1AJCSgweDIgPDwgNSkKKworI2RlZmluZSBQSUlYNF9PQ1cyX1NFTCAgICAgICAgICAoMHgwIDw8IDMpCisKKyNkZWZpbmUgUElJWDRfT0NXMl9JTFNfMAkwCisjZGVmaW5lIFBJSVg0X09DVzJfSUxTXzEJMQorI2RlZmluZSBQSUlYNF9PQ1cyX0lMU18yCTIKKyNkZWZpbmUgUElJWDRfT0NXMl9JTFNfMwkzCisjZGVmaW5lIFBJSVg0X09DVzJfSUxTXzQJNAorI2RlZmluZSBQSUlYNF9PQ1cyX0lMU181CTUKKyNkZWZpbmUgUElJWDRfT0NXMl9JTFNfNgk2CisjZGVmaW5lIFBJSVg0X09DVzJfSUxTXzcJNworI2RlZmluZSBQSUlYNF9PQ1cyX0lMU184CTAKKyNkZWZpbmUgUElJWDRfT0NXMl9JTFNfOQkxCisjZGVmaW5lIFBJSVg0X09DVzJfSUxTXzEwCTIKKyNkZWZpbmUgUElJWDRfT0NXMl9JTFNfMTEJMworI2RlZmluZSBQSUlYNF9PQ1cyX0lMU18xMgk0CisjZGVmaW5lIFBJSVg0X09DVzJfSUxTXzEzCTUKKyNkZWZpbmUgUElJWDRfT0NXMl9JTFNfMTQJNgorI2RlZmluZSBQSUlYNF9PQ1cyX0lMU18xNQk3CisKKyNkZWZpbmUgUElJWDRfT0NXM19TRUwgICAgICAgICAgKDB4MSA8PCAzKQorCisjZGVmaW5lIFBJSVg0X09DVzNfSVJSICAgICAgICAgIDB4MgorI2RlZmluZSBQSUlYNF9PQ1czX0lTUiAgICAgICAgICAweDMKKworI2VuZGlmIC8qIF9fQVNNX01JUFNfQk9BUkRTX1BJSVg0X0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWlwcy1ib2FyZHMvcHJvbS5oIGIvaW5jbHVkZS9hc20tbWlwcy9taXBzLWJvYXJkcy9wcm9tLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE2OGM3ZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWlwcy1ib2FyZHMvcHJvbS5oCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDYXJzdGVuIExhbmdnYWFyZCwgY2Fyc3RlbmxAbWlwcy5jb20KKyAqIENvcHlyaWdodCAoQykgMjAwMCBNSVBTIFRlY2hub2xvZ2llcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoVmVyc2lvbiAyKSBhcworICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAqCisgKiBNSVBTIGJvYXJkcyBib290cHJvbSBpbnRlcmZhY2UgZm9yIHRoZSBMaW51eCBrZXJuZWwuCisgKgorICovCisKKyNpZm5kZWYgX01JUFNfUFJPTV9ICisjZGVmaW5lIF9NSVBTX1BST01fSAorCitleHRlcm4gY2hhciAqcHJvbV9nZXRjbWRsaW5lKHZvaWQpOworZXh0ZXJuIGNoYXIgKnByb21fZ2V0ZW52KGNoYXIgKm5hbWUpOworZXh0ZXJuIHZvaWQgc2V0dXBfcHJvbV9wcmludGYoaW50IHR0eV9ubyk7CitleHRlcm4gdm9pZCBwcm9tX3ByaW50ZihjaGFyICpmbXQsIC4uLik7CitleHRlcm4gdm9pZCBwcm9tX2luaXRfY21kbGluZSh2b2lkKTsKK2V4dGVybiB2b2lkIHByb21fbWVtaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIHByb21fZml4dXBfbWVtX21hcCh1bnNpZ25lZCBsb25nIHN0YXJ0X21lbSwgdW5zaWduZWQgbG9uZyBlbmRfbWVtKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHByb21fZnJlZV9wcm9tX21lbW9yeSAodm9pZCk7CitleHRlcm4gdm9pZCBtaXBzX2Rpc3BsYXlfbWVzc2FnZShjb25zdCBjaGFyICpzdHIpOworZXh0ZXJuIHZvaWQgbWlwc19kaXNwbGF5X3dvcmQodW5zaWduZWQgaW50IG51bSk7CitleHRlcm4gaW50IGdldF9ldGhlcm5ldF9hZGRyKGNoYXIgKmV0aGVybmV0X2FkZHIpOworCisvKiBNZW1vcnkgZGVzY3JpcHRvciBtYW5hZ2VtZW50LiAqLworI2RlZmluZSBQUk9NX01BWF9QTUVNQkxPQ0tTICAgIDMyCitzdHJ1Y3QgcHJvbV9wbWVtYmxvY2sgeworICAgICAgICB1bnNpZ25lZCBsb25nIGJhc2U7IC8qIFdpdGhpbiBLU0VHMC4gKi8KKyAgICAgICAgdW5zaWduZWQgaW50IHNpemU7ICAvKiBJbiBieXRlcy4gKi8KKyAgICAgICAgdW5zaWduZWQgaW50IHR5cGU7ICAvKiBmcmVlIG9yIHByb20gbWVtb3J5ICovCit9OworCisjZW5kaWYgLyogIShfTUlQU19QUk9NX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21pcHMtYm9hcmRzL3NhYTk3MzBfdWFydC5oIGIvaW5jbHVkZS9hc20tbWlwcy9taXBzLWJvYXJkcy9zYWE5NzMwX3VhcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTEzMTQzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9taXBzLWJvYXJkcy9zYWE5NzMwX3VhcnQuaApAQCAtMCwwICsxLDY5IEBACisvKgorICogQ2Fyc3RlbiBMYW5nZ2FhcmQsIGNhcnN0ZW5sQG1pcHMuY29tCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIGRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKKyAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqICA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgKgorICogUmVnaXN0ZXIgZGVmaW5pdGlvbnMgZm9yIHRoZSBVQVJUIHBhcnQgb2YgdGhlIFBoaWxpcHMgU0FBOTczMCBjaGlwLgorICoKKyAqLworCisjaWZuZGVmIFNBQTk3MzBfVUFSVF9ICisjZGVmaW5lIFNBQTk3MzBfVUFSVF9ICisKKy8qIFRoZSBTQUE5NzMwIFVBUlQgcmVnaXN0ZXIgbWFwLCBhcyBzZWVuIHZpYSB0aGUgUENJIGJ1cyAqLworCisjZGVmaW5lIFNBQTk3MzBfVUFSVF9SRUdTX0FERFIJMHgyMTgwMAorCitzdHJ1Y3QgdWFydF9zYWE5NzMwX3JlZ21hcCB7CisJdm9sYXRpbGUgdW5zaWduZWQgY2hhciBUaHJfUmJyOworCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgSWVyOworCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgSWlyX0ZjcjsKKwl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIExjcjsKKwl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIE1jcjsKKwl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIExzcjsKKwl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIE1zcjsKKwl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIFNjcjsKKwl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIEJhdWREaXZMc2I7CisJdm9sYXRpbGUgdW5zaWduZWQgY2hhciBCYXVkRGl2TXNiOworCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgSnVuazA7CisJdm9sYXRpbGUgdW5zaWduZWQgY2hhciBKdW5rMTsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQ29uZmlnOwkJLyogMHgyMTgwYyAqLworCXZvbGF0aWxlIHVuc2lnbmVkIGludCBUeFN0YXJ0OwkJLyogMHgyMTgxMCAqLworCXZvbGF0aWxlIHVuc2lnbmVkIGludCBUeExlbmd0aDsJCS8qIDB4MjE4MTQgKi8KKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgVHhDb3VudGVyOwkvKiAweDIxODE4ICovCisJdm9sYXRpbGUgdW5zaWduZWQgaW50IFJ4U3RhcnQ7CQkvKiAweDIxODFjICovCisJdm9sYXRpbGUgdW5zaWduZWQgaW50IFJ4TGVuZ3RoOwkJLyogMHgyMTgyMCAqLworCXZvbGF0aWxlIHVuc2lnbmVkIGludCBSeENvdW50ZXI7CS8qIDB4MjE4MjQgKi8KK307Cit0eXBlZGVmIHZvbGF0aWxlIHN0cnVjdCB1YXJ0X3NhYTk3MzBfcmVnbWFwIHRfdWFydF9zYWE5NzMwX3JlZ21hcDsKKworLyoKKyAqIE9ubHkgYSBzdWJzZXQgb2YgdGhlIFVBUlQgY29udHJvbCBiaXRzIGFyZSBkZWZpbmVkIGhlcmUsCisgKiBlbm91Z2ggdG8gbWFrZSB0aGUgc2VyaWFsIGRlYnVnIHBvcnQgd29yay4KKyAqLworCisjZGVmaW5lIFNBQTk3MzBfTENSX0RBVEE4CTB4MDMKKworI2RlZmluZSBTQUE5NzMwX01DUl9EVFIJCTB4MDEKKyNkZWZpbmUgU0FBOTczMF9NQ1JfUlRTCQkweDAyCisKKyNkZWZpbmUgU0FBOTczMF9MU1JfRFIJCTB4MDEKKyNkZWZpbmUgU0FBOTczMF9MU1JfVEhSRQkweDIwCisKKyNlbmRpZiAvKiAhKFNBQTk3MzBfVUFSVF9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9taXBzLWJvYXJkcy9zZWFkLmggYi9pbmNsdWRlL2FzbS1taXBzL21pcHMtYm9hcmRzL3NlYWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGM2OWRlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9taXBzLWJvYXJkcy9zZWFkLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENhcnN0ZW4gTGFuZ2dhYXJkLCBjYXJzdGVubEBtaXBzLmNvbQorICogQ29weXJpZ2h0IChDKSAyMDAyIE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChWZXJzaW9uIDIpIGFzCisgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICoKKyAqIERlZmluZXMgb2YgdGhlIFNFQUQgYm9hcmQgc3BlY2lmaWMgYWRkcmVzcy1NQVAsIHJlZ2lzdGVycywgZXRjLgorICoKKyAqLworI2lmbmRlZiBfTUlQU19TRUFEX0gKKyNkZWZpbmUgX01JUFNfU0VBRF9ICisKKyNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CisKKy8qCisgKiBTRUFEIFVBUlQgcmVnaXN0ZXIgYmFzZS4KKyAqLworI2RlZmluZSBTRUFEX1VBUlQwX1JFR1NfQkFTRSAgICAoMHgxZjAwMDgwMCkKKyNkZWZpbmUgU0VBRF9CQVNFX0JBVUQgKCAzNjg2NDAwIC8gMTYgKQorCisjZW5kaWYgLyogIShfTUlQU19TRUFEX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21pcHMtYm9hcmRzL3NlYWRpbnQuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWlwcy1ib2FyZHMvc2VhZGludC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzZGNmY2IKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21pcHMtYm9hcmRzL3NlYWRpbnQuaApAQCAtMCwwICsxLDI4IEBACisvKgorICogQ2Fyc3RlbiBMYW5nZ2FhcmQsIGNhcnN0ZW5sQG1pcHMuY29tCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIGRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKKyAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqICA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICogRGVmaW5lcyBmb3IgdGhlIFNFQUQgaW50ZXJydXB0IGNvbnRyb2xsZXIuCisgKi8KKyNpZm5kZWYgX01JUFNfU0VBRElOVF9ICisjZGVmaW5lIF9NSVBTX1NFQURJTlRfSAorCisjZGVmaW5lIFNFQURJTlRfVUFSVDAgICAgIDIKKyNkZWZpbmUgU0VBRElOVF9VQVJUMSAgICAgMworCitleHRlcm4gdm9pZCBzZWFkaW50X2luaXQodm9pZCk7CisKKyNlbmRpZiAvKiAhKF9NSVBTX1NFQURJTlRfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWlwc3Byb20uaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWlwc3Byb20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTdjZmY3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9taXBzcHJvbS5oCkBAIC0wLDAgKzEsNzQgQEAKKyNpZm5kZWYgX19BU01fTUlQU19QUk9NX0gKKyNkZWZpbmUgX19BU01fTUlQU19QUk9NX0gKKworI2RlZmluZSBQUk9NX1JFU0VUCQkwCisjZGVmaW5lIFBST01fRVhFQwkJMQorI2RlZmluZSBQUk9NX1JFU1RBUlQJCTIKKyNkZWZpbmUgUFJPTV9SRUlOSVQJCTMKKyNkZWZpbmUgUFJPTV9SRUJPT1QJCTQKKyNkZWZpbmUgUFJPTV9BVVRPQk9PVAkJNQorI2RlZmluZSBQUk9NX09QRU4JCTYKKyNkZWZpbmUgUFJPTV9SRUFECQk3CisjZGVmaW5lIFBST01fV1JJVEUJCTgKKyNkZWZpbmUgUFJPTV9JT0NUTAkJOQorI2RlZmluZSBQUk9NX0NMT1NFCQkxMAorI2RlZmluZSBQUk9NX0dFVENIQVIJCTExCisjZGVmaW5lIFBST01fUFVUQ0hBUgkJMTIKKyNkZWZpbmUgUFJPTV9TSE9XQ0hBUgkJMTMJLyogWFhYICovCisjZGVmaW5lIFBST01fR0VUUwkJMTQJLyogWFhYICovCisjZGVmaW5lIFBST01fUFVUUwkJMTUJLyogWFhYICovCisjZGVmaW5lIFBST01fUFJJTlRGCQkxNgkvKiBYWFggKi8KKworLyogV2hhdCBhcmUgdGhlc2UgZm9yPyAqLworI2RlZmluZSBQUk9NX0lOSVRQUk9UTwkJMTcJLyogWFhYICovCisjZGVmaW5lIFBST01fUFJPVE9FTkFCTEUJMTgJLyogWFhYICovCisjZGVmaW5lIFBST01fUFJPVE9ESVNBQkxFCTE5CS8qIFhYWCAqLworI2RlZmluZSBQUk9NX0dFVFBLVAkJMjAJLyogWFhYICovCisjZGVmaW5lIFBST01fUFVUUEtUCQkyMQkvKiBYWFggKi8KKworLyogTW9yZSBQUk9NIHNoaXQuICBQcm9iYWJseSBoYXMgdG8gZG8gd2l0aCBWTUUgUk1XIGN5Y2xlcz8/PyAqLworI2RlZmluZSBQUk9NX09SV19STVcJCTIyCS8qIFhYWCAqLworI2RlZmluZSBQUk9NX09SSF9STVcJCTIzCS8qIFhYWCAqLworI2RlZmluZSBQUk9NX09SQl9STVcJCTI0CS8qIFhYWCAqLworI2RlZmluZSBQUk9NX0FORFdfUk1XCQkyNQkvKiBYWFggKi8KKyNkZWZpbmUgUFJPTV9BTkRIX1JNVwkJMjYJLyogWFhYICovCisjZGVmaW5lIFBST01fQU5EQl9STVcJCTI3CS8qIFhYWCAqLworCisvKiBDYWNoZSBoYW5kbGluZyBzdHVmZiAqLworI2RlZmluZSBQUk9NX0ZMVVNIQ0FDSEUJCTI4CS8qIFhYWCAqLworI2RlZmluZSBQUk9NX0NMRUFSQ0FDSEUJCTI5CS8qIFhYWCAqLworCisvKiBMaWJjIGFsaWtlIHN0dWZmICovCisjZGVmaW5lIFBST01fU0VUSk1QCQkzMAkvKiBYWFggKi8KKyNkZWZpbmUgUFJPTV9MT05HSk1QCQkzMQkvKiBYWFggKi8KKyNkZWZpbmUgUFJPTV9CRVZVVExCCQkzMgkvKiBYWFggKi8KKyNkZWZpbmUgUFJPTV9HRVRFTlYJCTMzCS8qIFhYWCAqLworI2RlZmluZSBQUk9NX1NFVEVOVgkJMzQJLyogWFhYICovCisjZGVmaW5lIFBST01fQVRPQgkJMzUJLyogWFhYICovCisjZGVmaW5lIFBST01fU1RSQ01QCQkzNgkvKiBYWFggKi8KKyNkZWZpbmUgUFJPTV9TVFJMRU4JCTM3CS8qIFhYWCAqLworI2RlZmluZSBQUk9NX1NUUkNQWQkJMzgJLyogWFhYICovCisjZGVmaW5lIFBST01fU1RSQ0FUCQkzOQkvKiBYWFggKi8KKworLyogTWlzYyBzdHVmZiAqLworI2RlZmluZSBQUk9NX1BBUlNFUgkJNDAJLyogWFhYICovCisjZGVmaW5lIFBST01fUkFOR0UJCTQxCS8qIFhYWCAqLworI2RlZmluZSBQUk9NX0FSR1ZJWkUJCTQyCS8qIFhYWCAqLworI2RlZmluZSBQUk9NX0hFTFAJCTQzCS8qIFhYWCAqLworCisvKiBFbnRyeSBwb2ludHMgZm9yIHNvbWUgUFJPTSBjb21tYW5kcyAqLworI2RlZmluZSBQUk9NX0RVTVBDTUQJCTQ0CS8qIFhYWCAqLworI2RlZmluZSBQUk9NX1NFVEVOVkNNRAkJNDUJLyogWFhYICovCisjZGVmaW5lIFBST01fVU5TRVRFTlZDTUQJNDYJLyogWFhYICovCisjZGVmaW5lIFBST01fUFJJTlRFTlZDTUQJNDcJLyogWFhYICovCisjZGVmaW5lIFBST01fQkVWRVhDRVBUCQk0OAkvKiBYWFggKi8KKyNkZWZpbmUgUFJPTV9FTkFCTEVDTUQJCTQ5CS8qIFhYWCAqLworI2RlZmluZSBQUk9NX0RJU0FCTEVDTUQJCTUwCS8qIFhYWCAqLworCisjZGVmaW5lIFBST01fQ0xFQVJOT0ZBVUxUCTUxCS8qIFhYWCAqLworI2RlZmluZSBQUk9NX05PVElNUExFTUVOVAk1MgkvKiBYWFggKi8KKworI2RlZmluZSBQUk9NX05WX0dFVAkJNTMJLyogWFhYICovCisjZGVmaW5lIFBST01fTlZfU0VUCQk1NAkvKiBYWFggKi8KKworI2VuZGlmIC8qIF9fQVNNX01JUFNfUFJPTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21pcHNyZWdzLmggYi9pbmNsdWRlL2FzbS1taXBzL21pcHNyZWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE5N2FhNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWlwc3JlZ3MuaApAQCAtMCwwICsxLDEwMTggQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDIwMDAsIDIwMDEgYnkgUmFsZiBCYWVjaGxlCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgU2lsaWNvbiBHcmFwaGljcywgSW5jLgorICogTW9kaWZpZWQgZm9yIGZ1cnRoZXIgUlsyMzZdMDAwIHN1cHBvcnQgYnkgUGF1bCBNLiBBbnRvaW5lLCAxOTk2LgorICogS2V2aW4gRC4gS2lzc2VsbCwga2V2aW5rQG1pcHMuY29tIGFuZCBDYXJzdGVuIExhbmdnYWFyZCwgY2Fyc3RlbmxAbWlwcy5jb20KKyAqIENvcHlyaWdodCAoQykgMjAwMCBNSVBTIFRlY2hub2xvZ2llcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMyAgTWFjaWVqIFcuIFJvenlja2kKKyAqLworI2lmbmRlZiBfQVNNX01JUFNSRUdTX0gKKyNkZWZpbmUgX0FTTV9NSVBTUkVHU19ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL2hhemFyZHMuaD4KKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgbWFjcm9zIGFyZSBlc3BlY2lhbGx5IHVzZWZ1bCBmb3IgX19hc21fXworICogaW5saW5lIGFzc2VtYmxlci4KKyAqLworI2lmbmRlZiBfX1NUUgorI2RlZmluZSBfX1NUUih4KSAjeAorI2VuZGlmCisjaWZuZGVmIFNUUgorI2RlZmluZSBTVFIoeCkgX19TVFIoeCkKKyNlbmRpZgorCisvKgorICogIENvbmZpZ3VyZSBsYW5ndWFnZQorICovCisjaWZkZWYgX19BU1NFTUJMWV9fCisjZGVmaW5lIF9VTENBU1RfCisjZWxzZQorI2RlZmluZSBfVUxDQVNUXyAodW5zaWduZWQgbG9uZykKKyNlbmRpZgorCisvKgorICogQ29wcm9jZXNzb3IgMCByZWdpc3RlciBuYW1lcworICovCisjZGVmaW5lIENQMF9JTkRFWCAkMAorI2RlZmluZSBDUDBfUkFORE9NICQxCisjZGVmaW5lIENQMF9FTlRSWUxPMCAkMgorI2RlZmluZSBDUDBfRU5UUllMTzEgJDMKKyNkZWZpbmUgQ1AwX0NPTkYgJDMKKyNkZWZpbmUgQ1AwX0NPTlRFWFQgJDQKKyNkZWZpbmUgQ1AwX1BBR0VNQVNLICQ1CisjZGVmaW5lIENQMF9XSVJFRCAkNgorI2RlZmluZSBDUDBfSU5GTyAkNworI2RlZmluZSBDUDBfQkFEVkFERFIgJDgKKyNkZWZpbmUgQ1AwX0NPVU5UICQ5CisjZGVmaW5lIENQMF9FTlRSWUhJICQxMAorI2RlZmluZSBDUDBfQ09NUEFSRSAkMTEKKyNkZWZpbmUgQ1AwX1NUQVRVUyAkMTIKKyNkZWZpbmUgQ1AwX0NBVVNFICQxMworI2RlZmluZSBDUDBfRVBDICQxNAorI2RlZmluZSBDUDBfUFJJRCAkMTUKKyNkZWZpbmUgQ1AwX0NPTkZJRyAkMTYKKyNkZWZpbmUgQ1AwX0xMQUREUiAkMTcKKyNkZWZpbmUgQ1AwX1dBVENITE8gJDE4CisjZGVmaW5lIENQMF9XQVRDSEhJICQxOQorI2RlZmluZSBDUDBfWENPTlRFWFQgJDIwCisjZGVmaW5lIENQMF9GUkFNRU1BU0sgJDIxCisjZGVmaW5lIENQMF9ESUFHTk9TVElDICQyMgorI2RlZmluZSBDUDBfREVCVUcgJDIzCisjZGVmaW5lIENQMF9ERVBDICQyNAorI2RlZmluZSBDUDBfUEVSRk9STUFOQ0UgJDI1CisjZGVmaW5lIENQMF9FQ0MgJDI2CisjZGVmaW5lIENQMF9DQUNIRUVSUiAkMjcKKyNkZWZpbmUgQ1AwX1RBR0xPICQyOAorI2RlZmluZSBDUDBfVEFHSEkgJDI5CisjZGVmaW5lIENQMF9FUlJPUkVQQyAkMzAKKyNkZWZpbmUgQ1AwX0RFU0FWRSAkMzEKKworLyoKKyAqIFI0NjQwL1I0NjUwIGNwMCByZWdpc3RlciBuYW1lcy4gIFRoZXNlIHJlZ2lzdGVycyBhcmUgbGlzdGVkCisgKiBoZXJlIG9ubHkgZm9yIGNvbXBsZXRlbmVzczsgd2l0aG91dCBNTVUgdGhlc2UgQ1BVcyBhcmUgbm90IHVzZWFibGUKKyAqIGJ5IExpbnV4LiAgQSBmdXR1cmUgRUxLUyBwb3J0IG1pZ2h0IHRha2UgbWFrZSBMaW51eCBydW4gb24gdGhlbQorICogdGhvdWdoIC4uLgorICovCisjZGVmaW5lIENQMF9JQkFTRSAkMAorI2RlZmluZSBDUDBfSUJPVU5EICQxCisjZGVmaW5lIENQMF9EQkFTRSAkMgorI2RlZmluZSBDUDBfREJPVU5EICQzCisjZGVmaW5lIENQMF9DQUxHICQxNworI2RlZmluZSBDUDBfSVdBVENIICQxOAorI2RlZmluZSBDUDBfRFdBVENIICQxOQorCisvKgorICogQ29wcm9jZXNzb3IgMCBTZXQgMSByZWdpc3RlciBuYW1lcworICovCisjZGVmaW5lIENQMF9TMV9ERVJSQUREUjAgICQyNgorI2RlZmluZSBDUDBfUzFfREVSUkFERFIxICAkMjcKKyNkZWZpbmUgQ1AwX1MxX0lOVENPTlRST0wgJDIwCisKKy8qCisgKiAgVFgzOSBTZXJpZXMKKyAqLworI2RlZmluZSBDUDBfVFgzOV9DQUNIRQkkNworCisvKgorICogQ29wcm9jZXNzb3IgMSAoRlBVKSByZWdpc3RlciBuYW1lcworICovCisjZGVmaW5lIENQMV9SRVZJU0lPTiAgICQwCisjZGVmaW5lIENQMV9TVEFUVVMgICAgICQzMQorCisvKgorICogRlBVIFN0YXR1cyBSZWdpc3RlciBWYWx1ZXMKKyAqLworLyoKKyAqIFN0YXR1cyBSZWdpc3RlciBWYWx1ZXMKKyAqLworCisjZGVmaW5lIEZQVV9DU1JfRkxVU0ggICAweDAxMDAwMDAwICAgICAgLyogZmx1c2ggZGVub3JtYWxpc2VkIHJlc3VsdHMgdG8gMCAqLworI2RlZmluZSBGUFVfQ1NSX0NPTkQgICAgMHgwMDgwMDAwMCAgICAgIC8qICRmY2MwICovCisjZGVmaW5lIEZQVV9DU1JfQ09ORDAgICAweDAwODAwMDAwICAgICAgLyogJGZjYzAgKi8KKyNkZWZpbmUgRlBVX0NTUl9DT05EMSAgIDB4MDIwMDAwMDAgICAgICAvKiAkZmNjMSAqLworI2RlZmluZSBGUFVfQ1NSX0NPTkQyICAgMHgwNDAwMDAwMCAgICAgIC8qICRmY2MyICovCisjZGVmaW5lIEZQVV9DU1JfQ09ORDMgICAweDA4MDAwMDAwICAgICAgLyogJGZjYzMgKi8KKyNkZWZpbmUgRlBVX0NTUl9DT05ENCAgIDB4MTAwMDAwMDAgICAgICAvKiAkZmNjNCAqLworI2RlZmluZSBGUFVfQ1NSX0NPTkQ1ICAgMHgyMDAwMDAwMCAgICAgIC8qICRmY2M1ICovCisjZGVmaW5lIEZQVV9DU1JfQ09ORDYgICAweDQwMDAwMDAwICAgICAgLyogJGZjYzYgKi8KKyNkZWZpbmUgRlBVX0NTUl9DT05ENyAgIDB4ODAwMDAwMDAgICAgICAvKiAkZmNjNyAqLworCisvKgorICogWCB0aGUgZXhjZXB0aW9uIGNhdXNlIGluZGljYXRvcgorICogRSB0aGUgZXhjZXB0aW9uIGVuYWJsZQorICogUyB0aGUgc3RpY2t5L2ZsYWcgYml0CisqLworI2RlZmluZSBGUFVfQ1NSX0FMTF9YICAgMHgwMDAzZjAwMAorI2RlZmluZSBGUFVfQ1NSX1VOSV9YICAgMHgwMDAyMDAwMAorI2RlZmluZSBGUFVfQ1NSX0lOVl9YICAgMHgwMDAxMDAwMAorI2RlZmluZSBGUFVfQ1NSX0RJVl9YICAgMHgwMDAwODAwMAorI2RlZmluZSBGUFVfQ1NSX09WRl9YICAgMHgwMDAwNDAwMAorI2RlZmluZSBGUFVfQ1NSX1VERl9YICAgMHgwMDAwMjAwMAorI2RlZmluZSBGUFVfQ1NSX0lORV9YICAgMHgwMDAwMTAwMAorCisjZGVmaW5lIEZQVV9DU1JfQUxMX0UgICAweDAwMDAwZjgwCisjZGVmaW5lIEZQVV9DU1JfSU5WX0UgICAweDAwMDAwODAwCisjZGVmaW5lIEZQVV9DU1JfRElWX0UgICAweDAwMDAwNDAwCisjZGVmaW5lIEZQVV9DU1JfT1ZGX0UgICAweDAwMDAwMjAwCisjZGVmaW5lIEZQVV9DU1JfVURGX0UgICAweDAwMDAwMTAwCisjZGVmaW5lIEZQVV9DU1JfSU5FX0UgICAweDAwMDAwMDgwCisKKyNkZWZpbmUgRlBVX0NTUl9BTExfUyAgIDB4MDAwMDAwN2MKKyNkZWZpbmUgRlBVX0NTUl9JTlZfUyAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgRlBVX0NTUl9ESVZfUyAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgRlBVX0NTUl9PVkZfUyAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgRlBVX0NTUl9VREZfUyAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgRlBVX0NTUl9JTkVfUyAgIDB4MDAwMDAwMDQKKworLyogcm91bmRpbmcgbW9kZSAqLworI2RlZmluZSBGUFVfQ1NSX1JOICAgICAgMHgwICAgICAvKiBuZWFyZXN0ICovCisjZGVmaW5lIEZQVV9DU1JfUlogICAgICAweDEgICAgIC8qIHRvd2FyZHMgemVybyAqLworI2RlZmluZSBGUFVfQ1NSX1JVICAgICAgMHgyICAgICAvKiB0b3dhcmRzICtJbmZpbml0eSAqLworI2RlZmluZSBGUFVfQ1NSX1JEICAgICAgMHgzICAgICAvKiB0b3dhcmRzIC1JbmZpbml0eSAqLworCisKKy8qCisgKiBWYWx1ZXMgZm9yIFBhZ2VNYXNrIHJlZ2lzdGVyCisgKi8KKyNpZmRlZiBDT05GSUdfQ1BVX1ZSNDFYWAorCisvKiBXaHkgZG9lc24ndCBzdHVwaWRpdHkgaHVydCAuLi4gKi8KKworI2RlZmluZSBQTV8xSwkJMHgwMDAwMDAwMAorI2RlZmluZSBQTV80SwkJMHgwMDAwMTgwMAorI2RlZmluZSBQTV8xNksJCTB4MDAwMDc4MDAKKyNkZWZpbmUgUE1fNjRLCQkweDAwMDFmODAwCisjZGVmaW5lIFBNXzI1NksJCTB4MDAwN2Y4MDAKKworI2Vsc2UKKworI2RlZmluZSBQTV80SwkJMHgwMDAwMDAwMAorI2RlZmluZSBQTV8xNksJCTB4MDAwMDYwMDAKKyNkZWZpbmUgUE1fNjRLCQkweDAwMDFlMDAwCisjZGVmaW5lIFBNXzI1NksJCTB4MDAwN2UwMDAKKyNkZWZpbmUgUE1fMU0JCTB4MDAxZmUwMDAKKyNkZWZpbmUgUE1fNE0JCTB4MDA3ZmUwMDAKKyNkZWZpbmUgUE1fMTZNCQkweDAxZmZlMDAwCisjZGVmaW5lIFBNXzY0TQkJMHgwN2ZmZTAwMAorI2RlZmluZSBQTV8yNTZNCQkweDFmZmZlMDAwCisKKyNlbmRpZgorCisvKgorICogRGVmYXVsdCBwYWdlIHNpemUgZm9yIGEgZ2l2ZW4ga2VybmVsIGNvbmZpZ3VyYXRpb24KKyAqLworI2lmZGVmIENPTkZJR19QQUdFX1NJWkVfNEtCCisjZGVmaW5lIFBNX0RFRkFVTFRfTUFTSwlQTV80SworI2VsaWYgZGVmaW5lZChDT05GSUdfUEFHRV9TSVpFXzE2S0IpCisjZGVmaW5lIFBNX0RFRkFVTFRfTUFTSwlQTV8xNksKKyNlbGlmIGRlZmluZWQoQ09ORklHX1BBR0VfU0laRV82NEtCKQorI2RlZmluZSBQTV9ERUZBVUxUX01BU0sJUE1fNjRLCisjZWxzZQorI2Vycm9yIEJhZCBwYWdlIHNpemUgY29uZmlndXJhdGlvbiEKKyNlbmRpZgorCisKKy8qCisgKiBWYWx1ZXMgdXNlZCBmb3IgY29tcHV0YXRpb24gb2YgbmV3IHRsYiBlbnRyaWVzCisgKi8KKyNkZWZpbmUgUExfNEsJCTEyCisjZGVmaW5lIFBMXzE2SwkJMTQKKyNkZWZpbmUgUExfNjRLCQkxNgorI2RlZmluZSBQTF8yNTZLCQkxOAorI2RlZmluZSBQTF8xTQkJMjAKKyNkZWZpbmUgUExfNE0JCTIyCisjZGVmaW5lIFBMXzE2TQkJMjQKKyNkZWZpbmUgUExfNjRNCQkyNgorI2RlZmluZSBQTF8yNTZNCQkyOAorCisvKgorICogUjR4MDAgaW50ZXJydXB0IGVuYWJsZSAvIGNhdXNlIGJpdHMKKyAqLworI2RlZmluZSBJRV9TVzAgICAgICAgICAgKF9VTENBU1RfKDEpIDw8ICA4KQorI2RlZmluZSBJRV9TVzEgICAgICAgICAgKF9VTENBU1RfKDEpIDw8ICA5KQorI2RlZmluZSBJRV9JUlEwICAgICAgICAgKF9VTENBU1RfKDEpIDw8IDEwKQorI2RlZmluZSBJRV9JUlExICAgICAgICAgKF9VTENBU1RfKDEpIDw8IDExKQorI2RlZmluZSBJRV9JUlEyICAgICAgICAgKF9VTENBU1RfKDEpIDw8IDEyKQorI2RlZmluZSBJRV9JUlEzICAgICAgICAgKF9VTENBU1RfKDEpIDw8IDEzKQorI2RlZmluZSBJRV9JUlE0ICAgICAgICAgKF9VTENBU1RfKDEpIDw8IDE0KQorI2RlZmluZSBJRV9JUlE1ICAgICAgICAgKF9VTENBU1RfKDEpIDw8IDE1KQorCisvKgorICogUjR4MDAgaW50ZXJydXB0IGNhdXNlIGJpdHMKKyAqLworI2RlZmluZSBDX1NXMCAgICAgICAgICAgKF9VTENBU1RfKDEpIDw8ICA4KQorI2RlZmluZSBDX1NXMSAgICAgICAgICAgKF9VTENBU1RfKDEpIDw8ICA5KQorI2RlZmluZSBDX0lSUTAgICAgICAgICAgKF9VTENBU1RfKDEpIDw8IDEwKQorI2RlZmluZSBDX0lSUTEgICAgICAgICAgKF9VTENBU1RfKDEpIDw8IDExKQorI2RlZmluZSBDX0lSUTIgICAgICAgICAgKF9VTENBU1RfKDEpIDw8IDEyKQorI2RlZmluZSBDX0lSUTMgICAgICAgICAgKF9VTENBU1RfKDEpIDw8IDEzKQorI2RlZmluZSBDX0lSUTQgICAgICAgICAgKF9VTENBU1RfKDEpIDw8IDE0KQorI2RlZmluZSBDX0lSUTUgICAgICAgICAgKF9VTENBU1RfKDEpIDw8IDE1KQorCisvKgorICogQml0ZmllbGRzIGluIHRoZSBSNHh4MCBjcDAgc3RhdHVzIHJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgU1QwX0lFCQkJMHgwMDAwMDAwMQorI2RlZmluZSBTVDBfRVhMCQkJMHgwMDAwMDAwMgorI2RlZmluZSBTVDBfRVJMCQkJMHgwMDAwMDAwNAorI2RlZmluZSBTVDBfS1NVCQkJMHgwMDAwMDAxOAorIyAgZGVmaW5lIEtTVV9VU0VSCQkweDAwMDAwMDEwCisjICBkZWZpbmUgS1NVX1NVUEVSVklTT1IJMHgwMDAwMDAwOAorIyAgZGVmaW5lIEtTVV9LRVJORUwJCTB4MDAwMDAwMDAKKyNkZWZpbmUgU1QwX1VYCQkJMHgwMDAwMDAyMAorI2RlZmluZSBTVDBfU1gJCQkweDAwMDAwMDQwCisjZGVmaW5lIFNUMF9LWCAJCQkweDAwMDAwMDgwCisjZGVmaW5lIFNUMF9ERQkJCTB4MDAwMTAwMDAKKyNkZWZpbmUgU1QwX0NFCQkJMHgwMDAyMDAwMAorCisvKgorICogU2V0dGluZyBjMF9zdGF0dXMuY28gZW5hYmxlcyBIaXRfV3JpdGViYWNrIGFuZCBIaXRfV3JpdGViYWNrX0ludmFsaWRhdGUKKyAqIGNhY2hlb3BzIGluIHVzZXJzcGFjZS4gIFRoaXMgYml0IGV4aXN0cyBvbmx5IG9uIFJNNzAwMCBhbmQgUk05MDAwCisgKiBwcm9jZXNzb3JzLgorICovCisjZGVmaW5lIFNUMF9DTwkJCTB4MDgwMDAwMDAKKworLyoKKyAqIEJpdGZpZWxkcyBpbiB0aGUgUlsyM10wMDAgY3AwIHN0YXR1cyByZWdpc3Rlci4KKyAqLworI2RlZmluZSBTVDBfSUVDICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNUMF9LVUMJCQkweDAwMDAwMDAyCisjZGVmaW5lIFNUMF9JRVAJCQkweDAwMDAwMDA0CisjZGVmaW5lIFNUMF9LVVAJCQkweDAwMDAwMDA4CisjZGVmaW5lIFNUMF9JRU8JCQkweDAwMDAwMDEwCisjZGVmaW5lIFNUMF9LVU8JCQkweDAwMDAwMDIwCisvKiBiaXRzIDYgJiA3IGFyZSByZXNlcnZlZCBvbiBSWzIzXTAwMCAqLworI2RlZmluZSBTVDBfSVNDCQkJMHgwMDAxMDAwMAorI2RlZmluZSBTVDBfU1dDCQkJMHgwMDAyMDAwMAorI2RlZmluZSBTVDBfQ00JCQkweDAwMDgwMDAwCisKKy8qCisgKiBCaXRzIHNwZWNpZmljIHRvIHRoZSBSNDY0MC9SNDY1MAorICovCisjZGVmaW5lIFNUMF9VTQkJCShfVUxDQVNUXygxKSA8PCAgNCkKKyNkZWZpbmUgU1QwX0lMCQkJKF9VTENBU1RfKDEpIDw8IDIzKQorI2RlZmluZSBTVDBfREwJCQkoX1VMQ0FTVF8oMSkgPDwgMjQpCisKKy8qCisgKiBCaXRmaWVsZHMgaW4gdGhlIFRYMzkgZmFtaWx5IENQMCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDMKKyAqLworI2RlZmluZSBUWDM5X0NPTkZfSUNTX1NISUZUCTE5CisjZGVmaW5lIFRYMzlfQ09ORl9JQ1NfTUFTSwkweDAwMzgwMDAwCisjZGVmaW5lIFRYMzlfQ09ORl9JQ1NfMUtCIAkweDAwMDAwMDAwCisjZGVmaW5lIFRYMzlfQ09ORl9JQ1NfMktCIAkweDAwMDgwMDAwCisjZGVmaW5lIFRYMzlfQ09ORl9JQ1NfNEtCIAkweDAwMTAwMDAwCisjZGVmaW5lIFRYMzlfQ09ORl9JQ1NfOEtCIAkweDAwMTgwMDAwCisjZGVmaW5lIFRYMzlfQ09ORl9JQ1NfMTZLQiAJMHgwMDIwMDAwMAorCisjZGVmaW5lIFRYMzlfQ09ORl9EQ1NfU0hJRlQJMTYKKyNkZWZpbmUgVFgzOV9DT05GX0RDU19NQVNLCTB4MDAwNzAwMDAKKyNkZWZpbmUgVFgzOV9DT05GX0RDU18xS0IgCTB4MDAwMDAwMDAKKyNkZWZpbmUgVFgzOV9DT05GX0RDU18yS0IgCTB4MDAwMTAwMDAKKyNkZWZpbmUgVFgzOV9DT05GX0RDU180S0IgCTB4MDAwMjAwMDAKKyNkZWZpbmUgVFgzOV9DT05GX0RDU184S0IgCTB4MDAwMzAwMDAKKyNkZWZpbmUgVFgzOV9DT05GX0RDU18xNktCIAkweDAwMDQwMDAwCisKKyNkZWZpbmUgVFgzOV9DT05GX0NXRk9OIAkweDAwMDA0MDAwCisjZGVmaW5lIFRYMzlfQ09ORl9XQk9OICAJMHgwMDAwMjAwMAorI2RlZmluZSBUWDM5X0NPTkZfUkZfU0hJRlQJMTAKKyNkZWZpbmUgVFgzOV9DT05GX1JGX01BU0sJMHgwMDAwMGMwMAorI2RlZmluZSBUWDM5X0NPTkZfRE9aRQkJMHgwMDAwMDIwMAorI2RlZmluZSBUWDM5X0NPTkZfSEFMVAkJMHgwMDAwMDEwMAorI2RlZmluZSBUWDM5X0NPTkZfTE9DSwkJMHgwMDAwMDA4MAorI2RlZmluZSBUWDM5X0NPTkZfSUNFCQkweDAwMDAwMDIwCisjZGVmaW5lIFRYMzlfQ09ORl9EQ0UJCTB4MDAwMDAwMTAKKyNkZWZpbmUgVFgzOV9DT05GX0lSU0laRV9TSElGVAkyCisjZGVmaW5lIFRYMzlfQ09ORl9JUlNJWkVfTUFTSwkweDAwMDAwMDBjCisjZGVmaW5lIFRYMzlfQ09ORl9EUlNJWkVfU0hJRlQJMAorI2RlZmluZSBUWDM5X0NPTkZfRFJTSVpFX01BU0sJMHgwMDAwMDAwMworCisvKgorICogU3RhdHVzIHJlZ2lzdGVyIGJpdHMgYXZhaWxhYmxlIGluIGFsbCBNSVBTIENQVXMuCisgKi8KKyNkZWZpbmUgU1QwX0lNCQkJMHgwMDAwZmYwMAorI2RlZmluZSAgU1RBVFVTQl9JUDAJCTgKKyNkZWZpbmUgIFNUQVRVU0ZfSVAwCQkoX1VMQ0FTVF8oMSkgPDwgIDgpCisjZGVmaW5lICBTVEFUVVNCX0lQMQkJOQorI2RlZmluZSAgU1RBVFVTRl9JUDEJCShfVUxDQVNUXygxKSA8PCAgOSkKKyNkZWZpbmUgIFNUQVRVU0JfSVAyCQkxMAorI2RlZmluZSAgU1RBVFVTRl9JUDIJCShfVUxDQVNUXygxKSA8PCAxMCkKKyNkZWZpbmUgIFNUQVRVU0JfSVAzCQkxMQorI2RlZmluZSAgU1RBVFVTRl9JUDMJCShfVUxDQVNUXygxKSA8PCAxMSkKKyNkZWZpbmUgIFNUQVRVU0JfSVA0CQkxMgorI2RlZmluZSAgU1RBVFVTRl9JUDQJCShfVUxDQVNUXygxKSA8PCAxMikKKyNkZWZpbmUgIFNUQVRVU0JfSVA1CQkxMworI2RlZmluZSAgU1RBVFVTRl9JUDUJCShfVUxDQVNUXygxKSA8PCAxMykKKyNkZWZpbmUgIFNUQVRVU0JfSVA2CQkxNAorI2RlZmluZSAgU1RBVFVTRl9JUDYJCShfVUxDQVNUXygxKSA8PCAxNCkKKyNkZWZpbmUgIFNUQVRVU0JfSVA3CQkxNQorI2RlZmluZSAgU1RBVFVTRl9JUDcJCShfVUxDQVNUXygxKSA8PCAxNSkKKyNkZWZpbmUgIFNUQVRVU0JfSVA4CQkwCisjZGVmaW5lICBTVEFUVVNGX0lQOAkJKF9VTENBU1RfKDEpIDw8ICAwKQorI2RlZmluZSAgU1RBVFVTQl9JUDkJCTEKKyNkZWZpbmUgIFNUQVRVU0ZfSVA5CQkoX1VMQ0FTVF8oMSkgPDwgIDEpCisjZGVmaW5lICBTVEFUVVNCX0lQMTAJCTIKKyNkZWZpbmUgIFNUQVRVU0ZfSVAxMAkJKF9VTENBU1RfKDEpIDw8ICAyKQorI2RlZmluZSAgU1RBVFVTQl9JUDExCQkzCisjZGVmaW5lICBTVEFUVVNGX0lQMTEJCShfVUxDQVNUXygxKSA8PCAgMykKKyNkZWZpbmUgIFNUQVRVU0JfSVAxMgkJNAorI2RlZmluZSAgU1RBVFVTRl9JUDEyCQkoX1VMQ0FTVF8oMSkgPDwgIDQpCisjZGVmaW5lICBTVEFUVVNCX0lQMTMJCTUKKyNkZWZpbmUgIFNUQVRVU0ZfSVAxMwkJKF9VTENBU1RfKDEpIDw8ICA1KQorI2RlZmluZSAgU1RBVFVTQl9JUDE0CQk2CisjZGVmaW5lICBTVEFUVVNGX0lQMTQJCShfVUxDQVNUXygxKSA8PCAgNikKKyNkZWZpbmUgIFNUQVRVU0JfSVAxNQkJNworI2RlZmluZSAgU1RBVFVTRl9JUDE1CQkoX1VMQ0FTVF8oMSkgPDwgIDcpCisjZGVmaW5lIFNUMF9DSAkJCTB4MDAwNDAwMDAKKyNkZWZpbmUgU1QwX1NSCQkJMHgwMDEwMDAwMAorI2RlZmluZSBTVDBfVFMJCQkweDAwMjAwMDAwCisjZGVmaW5lIFNUMF9CRVYJCQkweDAwNDAwMDAwCisjZGVmaW5lIFNUMF9SRQkJCTB4MDIwMDAwMDAKKyNkZWZpbmUgU1QwX0ZSCQkJMHgwNDAwMDAwMAorI2RlZmluZSBTVDBfQ1UJCQkweGYwMDAwMDAwCisjZGVmaW5lIFNUMF9DVTAJCQkweDEwMDAwMDAwCisjZGVmaW5lIFNUMF9DVTEJCQkweDIwMDAwMDAwCisjZGVmaW5lIFNUMF9DVTIJCQkweDQwMDAwMDAwCisjZGVmaW5lIFNUMF9DVTMJCQkweDgwMDAwMDAwCisjZGVmaW5lIFNUMF9YWAkJCTB4ODAwMDAwMDAJLyogTUlQUyBJViBuYW1pbmcgKi8KKworLyoKKyAqIEJpdGZpZWxkcyBhbmQgYml0IG51bWJlcnMgaW4gdGhlIGNvcHJvY2Vzc29yIDAgY2F1c2UgcmVnaXN0ZXIuCisgKgorICogUmVmZXIgdG8geW91ciBNSVBTIFI0eHgwIG1hbnVhbCwgY2hhcHRlciA1IGZvciBleHBsYW5hdGlvbi4KKyAqLworI2RlZmluZSAgQ0FVU0VCX0VYQ0NPREUJCTIKKyNkZWZpbmUgIENBVVNFRl9FWENDT0RFCQkoX1VMQ0FTVF8oMzEpICA8PCAgMikKKyNkZWZpbmUgIENBVVNFQl9JUAkJOAorI2RlZmluZSAgQ0FVU0VGX0lQCQkoX1VMQ0FTVF8oMjU1KSA8PCAgOCkKKyNkZWZpbmUgIENBVVNFQl9JUDAJCTgKKyNkZWZpbmUgIENBVVNFRl9JUDAJCShfVUxDQVNUXygxKSAgIDw8ICA4KQorI2RlZmluZSAgQ0FVU0VCX0lQMQkJOQorI2RlZmluZSAgQ0FVU0VGX0lQMQkJKF9VTENBU1RfKDEpICAgPDwgIDkpCisjZGVmaW5lICBDQVVTRUJfSVAyCQkxMAorI2RlZmluZSAgQ0FVU0VGX0lQMgkJKF9VTENBU1RfKDEpICAgPDwgMTApCisjZGVmaW5lICBDQVVTRUJfSVAzCQkxMQorI2RlZmluZSAgQ0FVU0VGX0lQMwkJKF9VTENBU1RfKDEpICAgPDwgMTEpCisjZGVmaW5lICBDQVVTRUJfSVA0CQkxMgorI2RlZmluZSAgQ0FVU0VGX0lQNAkJKF9VTENBU1RfKDEpICAgPDwgMTIpCisjZGVmaW5lICBDQVVTRUJfSVA1CQkxMworI2RlZmluZSAgQ0FVU0VGX0lQNQkJKF9VTENBU1RfKDEpICAgPDwgMTMpCisjZGVmaW5lICBDQVVTRUJfSVA2CQkxNAorI2RlZmluZSAgQ0FVU0VGX0lQNgkJKF9VTENBU1RfKDEpICAgPDwgMTQpCisjZGVmaW5lICBDQVVTRUJfSVA3CQkxNQorI2RlZmluZSAgQ0FVU0VGX0lQNwkJKF9VTENBU1RfKDEpICAgPDwgMTUpCisjZGVmaW5lICBDQVVTRUJfSVYJCTIzCisjZGVmaW5lICBDQVVTRUZfSVYJCShfVUxDQVNUXygxKSAgIDw8IDIzKQorI2RlZmluZSAgQ0FVU0VCX0NFCQkyOAorI2RlZmluZSAgQ0FVU0VGX0NFCQkoX1VMQ0FTVF8oMykgICA8PCAyOCkKKyNkZWZpbmUgIENBVVNFQl9CRAkJMzEKKyNkZWZpbmUgIENBVVNFRl9CRAkJKF9VTENBU1RfKDEpICAgPDwgMzEpCisKKy8qCisgKiBCaXRzIGluIHRoZSBjb3Byb2Nlc3NvciAwIGNvbmZpZyByZWdpc3Rlci4KKyAqLworLyogR2VuZXJpYyBiaXRzLiAgKi8KKyNkZWZpbmUgQ09ORl9DTV9DQUNIQUJMRV9OT19XQQkJMAorI2RlZmluZSBDT05GX0NNX0NBQ0hBQkxFX1dBCQkxCisjZGVmaW5lIENPTkZfQ01fVU5DQUNIRUQJCTIKKyNkZWZpbmUgQ09ORl9DTV9DQUNIQUJMRV9OT05DT0hFUkVOVAkzCisjZGVmaW5lIENPTkZfQ01fQ0FDSEFCTEVfQ0UJCTQKKyNkZWZpbmUgQ09ORl9DTV9DQUNIQUJMRV9DT1cJCTUKKyNkZWZpbmUgQ09ORl9DTV9DQUNIQUJMRV9DVVcJCTYKKyNkZWZpbmUgQ09ORl9DTV9DQUNIQUJMRV9BQ0NFTEVSQVRFRAk3CisjZGVmaW5lIENPTkZfQ01fQ01BU0sJCQk3CisjZGVmaW5lIENPTkZfQkUJCQkoX1VMQ0FTVF8oMSkgPDwgMTUpCisKKy8qIEJpdHMgY29tbW9uIHRvIHZhcmlvdXMgcHJvY2Vzc29ycy4gICovCisjZGVmaW5lIENPTkZfQ1UJCQkoX1VMQ0FTVF8oMSkgPDwgIDMpCisjZGVmaW5lIENPTkZfREIJCQkoX1VMQ0FTVF8oMSkgPDwgIDQpCisjZGVmaW5lIENPTkZfSUIJCQkoX1VMQ0FTVF8oMSkgPDwgIDUpCisjZGVmaW5lIENPTkZfREMJCQkoX1VMQ0FTVF8oNykgPDwgIDYpCisjZGVmaW5lIENPTkZfSUMJCQkoX1VMQ0FTVF8oNykgPDwgIDkpCisjZGVmaW5lIENPTkZfRUIJCQkoX1VMQ0FTVF8oMSkgPDwgMTMpCisjZGVmaW5lIENPTkZfRU0JCQkoX1VMQ0FTVF8oMSkgPDwgMTQpCisjZGVmaW5lIENPTkZfU00JCQkoX1VMQ0FTVF8oMSkgPDwgMTYpCisjZGVmaW5lIENPTkZfU0MJCQkoX1VMQ0FTVF8oMSkgPDwgMTcpCisjZGVmaW5lIENPTkZfRVcJCQkoX1VMQ0FTVF8oMykgPDwgMTgpCisjZGVmaW5lIENPTkZfRVAJCQkoX1VMQ0FTVF8oMTUpPDwgMjQpCisjZGVmaW5lIENPTkZfRUMJCQkoX1VMQ0FTVF8oNykgPDwgMjgpCisjZGVmaW5lIENPTkZfQ00JCQkoX1VMQ0FTVF8oMSkgPDwgMzEpCisKKy8qIEJpdHMgc3BlY2lmaWMgdG8gdGhlIFI0eHgwLiAgKi8KKyNkZWZpbmUgUjRLX0NPTkZfU1cJCShfVUxDQVNUXygxKSA8PCAyMCkKKyNkZWZpbmUgUjRLX0NPTkZfU1MJCShfVUxDQVNUXygxKSA8PCAyMSkKKyNkZWZpbmUgUjRLX0NPTkZfU0IJCShfVUxDQVNUXygzKSA8PCAyMikKKworLyogQml0cyBzcGVjaWZpYyB0byB0aGUgUjUwMDAuICAqLworI2RlZmluZSBSNUtfQ09ORl9TRQkJKF9VTENBU1RfKDEpIDw8IDEyKQorI2RlZmluZSBSNUtfQ09ORl9TUwkJKF9VTENBU1RfKDMpIDw8IDIwKQorCisvKiBCaXRzIHNwZWNpZmljIHRvIHRoZSBSMTAwMDAuICAqLworI2RlZmluZSBSMTBLX0NPTkZfRE4JCShfVUxDQVNUXygzKSA8PCAgMykKKyNkZWZpbmUgUjEwS19DT05GX0NUCQkoX1VMQ0FTVF8oMSkgPDwgIDUpCisjZGVmaW5lIFIxMEtfQ09ORl9QRQkJKF9VTENBU1RfKDEpIDw8ICA2KQorI2RlZmluZSBSMTBLX0NPTkZfUE0JCShfVUxDQVNUXygzKSA8PCAgNykKKyNkZWZpbmUgUjEwS19DT05GX0VDCQkoX1VMQ0FTVF8oMTUpPDwgIDkpCisjZGVmaW5lIFIxMEtfQ09ORl9TQgkJKF9VTENBU1RfKDEpIDw8IDEzKQorI2RlZmluZSBSMTBLX0NPTkZfU0sJCShfVUxDQVNUXygxKSA8PCAxNCkKKyNkZWZpbmUgUjEwS19DT05GX1NTCQkoX1VMQ0FTVF8oNykgPDwgMTYpCisjZGVmaW5lIFIxMEtfQ09ORl9TQwkJKF9VTENBU1RfKDcpIDw8IDE5KQorI2RlZmluZSBSMTBLX0NPTkZfREMJCShfVUxDQVNUXyg3KSA8PCAyNikKKyNkZWZpbmUgUjEwS19DT05GX0lDCQkoX1VMQ0FTVF8oNykgPDwgMjkpCisKKy8qIEJpdHMgc3BlY2lmaWMgdG8gdGhlIFZSNDF4eC4gICovCisjZGVmaW5lIFZSNDFfQ09ORl9DUwkJKF9VTENBU1RfKDEpIDw8IDEyKQorI2RlZmluZSBWUjQxX0NPTkZfTTE2CQkoX1VMQ0FTVF8oMSkgPDwgMjApCisjZGVmaW5lIFZSNDFfQ09ORl9BRAkJKF9VTENBU1RfKDEpIDw8IDIzKQorCisvKiBCaXRzIHNwZWNpZmljIHRvIHRoZSBSMzB4eC4gICovCisjZGVmaW5lIFIzMFhYX0NPTkZfRkRNCQkoX1VMQ0FTVF8oMSkgPDwgMTkpCisjZGVmaW5lIFIzMFhYX0NPTkZfUkVWCQkoX1VMQ0FTVF8oMSkgPDwgMjIpCisjZGVmaW5lIFIzMFhYX0NPTkZfQUMJCShfVUxDQVNUXygxKSA8PCAyMykKKyNkZWZpbmUgUjMwWFhfQ09ORl9SRgkJKF9VTENBU1RfKDEpIDw8IDI0KQorI2RlZmluZSBSMzBYWF9DT05GX0hBTFQJCShfVUxDQVNUXygxKSA8PCAyNSkKKyNkZWZpbmUgUjMwWFhfQ09ORl9GUElOVAkoX1VMQ0FTVF8oNykgPDwgMjYpCisjZGVmaW5lIFIzMFhYX0NPTkZfREJSCQkoX1VMQ0FTVF8oMSkgPDwgMjkpCisjZGVmaW5lIFIzMFhYX0NPTkZfU0IJCShfVUxDQVNUXygxKSA8PCAzMCkKKyNkZWZpbmUgUjMwWFhfQ09ORl9MT0NLCQkoX1VMQ0FTVF8oMSkgPDwgMzEpCisKKy8qIEJpdHMgc3BlY2lmaWMgdG8gdGhlIFRYNDkuICAqLworI2RlZmluZSBUWDQ5X0NPTkZfREMJCShfVUxDQVNUXygxKSA8PCAxNikKKyNkZWZpbmUgVFg0OV9DT05GX0lDCQkoX1VMQ0FTVF8oMSkgPDwgMTcpICAvKiBjb25mbGljdCB3aXRoIENPTkZfU0MgKi8KKyNkZWZpbmUgVFg0OV9DT05GX0hBTFQJCShfVUxDQVNUXygxKSA8PCAxOCkKKyNkZWZpbmUgVFg0OV9DT05GX0NXRk9OCQkoX1VMQ0FTVF8oMSkgPDwgMjcpCisKKy8qIEJpdHMgc3BlY2lmaWMgdG8gdGhlIE1JUFMzMi82NCBQUkEuICAqLworI2RlZmluZSBNSVBTX0NPTkZfTVQJCShfVUxDQVNUXyg3KSA8PCAgNykKKyNkZWZpbmUgTUlQU19DT05GX0FSCQkoX1VMQ0FTVF8oNykgPDwgMTApCisjZGVmaW5lIE1JUFNfQ09ORl9BVAkJKF9VTENBU1RfKDMpIDw8IDEzKQorI2RlZmluZSBNSVBTX0NPTkZfTQkJKF9VTENBU1RfKDEpIDw8IDMxKQorCisvKgorICogUjEwMDAwIHBlcmZvcm1hbmNlIGNvdW50ZXIgZGVmaW5pdGlvbnMuCisgKgorICogRklYTUU6IFRoZSBSMTAwMDAgcGVyZm9ybWFuY2UgY291bnRlciBvcGVucyBhIG5pY2Ugd2F5IHRvIGltcGxlbWVudCBDUFUKKyAqICAgICAgICB0aW1lIGFjY291bnRpbmcgd2l0aCBhIHByZWNpc3Npb24gb2Ygb25lIGN5Y2xlLiAgSSBkb24ndCBoYXZlCisgKiAgICAgICAgUjEwMDAwIHNpbGljb24gYnV0IGp1c3QgYSBtYW51YWwsIHNvIC4uLgorICovCisKKy8qCisgKiBFdmVudHMgY291bnRlZCBieSBjb3VudGVyICMwCisgKi8KKyNkZWZpbmUgQ0UwX0NZQ0xFUwkJCTAKKyNkZWZpbmUgQ0UwX0lOU05fSVNTVUVECQkJMQorI2RlZmluZSBDRTBfTFBTQ19JU1NVRUQJCQkyCisjZGVmaW5lIENFMF9TX0lTU1VFRAkJCTMKKyNkZWZpbmUgQ0UwX1NDX0lTU1VFRAkJCTQKKyNkZWZpbmUgQ0UwX1NDX0ZBSUxFRAkJCTUKKyNkZWZpbmUgQ0UwX0JSQU5DSF9ERUNPREVECQk2CisjZGVmaW5lIENFMF9RV19XQl9TRUNPTkRBUlkJCTcKKyNkZWZpbmUgQ0UwX0NPUlJFQ1RFRF9FQ0NfRVJST1JTCTgKKyNkZWZpbmUgQ0UwX0lDQUNIRV9NSVNTRVMJCTkKKyNkZWZpbmUgQ0UwX1NDQUNIRV9JX01JU1NFUwkJMTAKKyNkZWZpbmUgQ0UwX1NDQUNIRV9JX1dBWV9NSVNTUFJFRElDVEVECTExCisjZGVmaW5lIENFMF9FWFRfSU5URVJWRU5USU9OU19SRVEJMTIKKyNkZWZpbmUgQ0UwX0VYVF9JTlZBTElEQVRFX1JFUQkJMTMKKyNkZWZpbmUgQ0UwX1ZJUlRVQUxfQ09IRVJFTkNZX0NPTkQJMTQKKyNkZWZpbmUgQ0UwX0lOU05fR1JBRFVBVEVECQkxNQorCisvKgorICogRXZlbnRzIGNvdW50ZWQgYnkgY291bnRlciAjMQorICovCisjZGVmaW5lIENFMV9DWUNMRVMJCQkwCisjZGVmaW5lIENFMV9JTlNOX0dSQURVQVRFRAkJMQorI2RlZmluZSBDRTFfTFBTQ19HUkFEVUFURUQJCTIKKyNkZWZpbmUgQ0UxX1NfR1JBRFVBVEVECQkJMworI2RlZmluZSBDRTFfU0NfR1JBRFVBVEVECQk0CisjZGVmaW5lIENFMV9GUF9JTlNOX0dSQURVQVRFRAkJNQorI2RlZmluZSBDRTFfUVdfV0JfUFJJTUFSWQkJNgorI2RlZmluZSBDRTFfVExCX1JFRklMTAkJCTcKKyNkZWZpbmUgQ0UxX0JSQU5DSF9NSVNTUFJFRElDVEVECTgKKyNkZWZpbmUgQ0UxX0RDQUNIRV9NSVNTCQkJOQorI2RlZmluZSBDRTFfU0NBQ0hFX0RfTUlTU0VTCQkxMAorI2RlZmluZSBDRTFfU0NBQ0hFX0RfV0FZX01JU1NQUkVESUNURUQJMTEKKyNkZWZpbmUgQ0UxX0VYVF9JTlRFUlZFTlRJT05fSElUUwkxMgorI2RlZmluZSBDRTFfRVhUX0lOVkFMSURBVEVfUkVRCQkxMworI2RlZmluZSBDRTFfU1BfSElOVF9UT19DRVhDTF9TQ19CTE9DS1MJMTQKKyNkZWZpbmUgQ0UxX1NQX0hJTlRfVE9fU0hBUkVEX1NDX0JMT0NLUwkxNQorCisvKgorICogVGhlc2UgZmxhZ3MgZGVmaW5lIGluIHdoaWNoIHByaXZpbGVnZSBtb2RlIHRoZSBjb3VudGVycyBjb3VudCBldmVudHMKKyAqLworI2RlZmluZSBDRUJfVVNFUgk4CS8qIENvdW50IGV2ZW50cyBpbiB1c2VyIG1vZGUsIEVYTCA9IEVSTCA9IDAgKi8KKyNkZWZpbmUgQ0VCX1NVUEVSVklTT1IJNAkvKiBDb3VudCBldmVudHMgaW4gc3VwdmVydmlzb3IgbW9kZSBFWEwgPSBFUkwgPSAwICovCisjZGVmaW5lIENFQl9LRVJORUwJMgkvKiBDb3VudCBldmVudHMgaW4ga2VybmVsIG1vZGUgRVhMID0gRVJMID0gMCAqLworI2RlZmluZSBDRUJfRVhMCQkxCS8qIENvdW50IGV2ZW50cyB3aXRoIEVYTCA9IDEsIEVSTCA9IDAgKi8KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworLyoKKyAqIEZ1bmN0aW9ucyB0byBhY2Nlc3MgdGhlIFIxMDAwMCBwZXJmb3JtYW5jZSBjb3VudGVycy4gIFRoZXNlIGFyZSBiYXNpY2FsbHkKKyAqIG1mYzAgYW5kIG10YzAgaW5zdHJ1Y3Rpb25zIGZyb20gYW5kIHRvIGNvcHJvY2Vzc29yIHJlZ2lzdGVyIHdpdGggYSA1LWJpdAorICogcGVyZm9ybWFuY2UgY291bnRlciBudW1iZXIgZW5jb2RlZCBpbnRvIGJpdHMgMSAuLi4gNSBvZiB0aGUgaW5zdHJ1Y3Rpb24uCisgKiBPbmx5IHBlcmZvcm1hbmNlIGNvdW50ZXJzIDAgdG8gMSBhY3R1YWxseSBleGlzdCwgc28gZm9yIGEgbm9uLVIxMDAwMCBhd2FyZQorICogZGlzYXNzZW1ibGVyIHRoZXNlIHdpbGwgbG9vayBsaWtlIGFuIGFjY2VzcyB0byBzZWwgMCBvciAxLgorICovCisjZGVmaW5lIHJlYWRfcjEwa19wZXJmX2NudHIoY291bnRlcikJCQkJXAorKHsJCQkJCQkJCVwKKwl1bnNpZ25lZCBpbnQgX19yZXM7CQkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQlcCisJIm1mcGNcdCUwLCAlMSIJCQkJCQlcCisgICAgICAgIDogIj1yIiAoX19yZXMpCQkJCQkJXAorCTogImkiIChjb3VudGVyKSk7CQkJCQlcCisJCQkJCQkJCVwKKyAgICAgICAgX19yZXM7CQkJCQkJCVwKK30pCisKKyNkZWZpbmUgd3JpdGVfcjEwa19wZXJmX2NudHIoY291bnRlcix2YWwpICAgICAgICAgICAgICAgICAgICAgICBcCitkbyB7CQkJCQkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQlcCisJIm10cGNcdCUwLCAlMSIJCQkJCQlcCisJOgkJCQkJCQlcCisJOiAiciIgKHZhbCksICJpIiAoY291bnRlcikpOwkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIHJlYWRfcjEwa19wZXJmX2V2ZW50KGNvdW50ZXIpCQkJCVwKKyh7CQkJCQkJCQlcCisJdW5zaWduZWQgaW50IF9fcmVzOwkJCQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJXAorCSJtZnBzXHQlMCwgJTEiCQkJCQkJXAorICAgICAgICA6ICI9ciIgKF9fcmVzKQkJCQkJCVwKKwk6ICJpIiAoY291bnRlcikpOwkJCQkJXAorCQkJCQkJCQlcCisgICAgICAgIF9fcmVzOwkJCQkJCQlcCit9KQorCisjZGVmaW5lIHdyaXRlX3IxMGtfcGVyZl9jbnRsKGNvdW50ZXIsdmFsKSAgICAgICAgICAgICAgICAgICAgICAgXAorZG8gewkJCQkJCQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJXAorCSJtdHBzXHQlMCwgJTEiCQkJCQkJXAorCToJCQkJCQkJXAorCTogInIiICh2YWwpLCAiaSIgKGNvdW50ZXIpKTsJCQkJXAorfSB3aGlsZSAoMCkKKworCisvKgorICogTWFjcm9zIHRvIGFjY2VzcyB0aGUgc3lzdGVtIGNvbnRyb2wgY29wcm9jZXNzb3IKKyAqLworCisjZGVmaW5lIF9fcmVhZF8zMmJpdF9jMF9yZWdpc3Rlcihzb3VyY2UsIHNlbCkJCQkJXAorKHsgaW50IF9fcmVzOwkJCQkJCQkJXAorCWlmIChzZWwgPT0gMCkJCQkJCQkJXAorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCVwKKwkJCSJtZmMwXHQlMCwgIiAjc291cmNlICJcblx0IgkJCVwKKwkJCTogIj1yIiAoX19yZXMpKTsJCQkJXAorCWVsc2UJCQkJCQkJCVwKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQlcCisJCQkiLnNldFx0bWlwczMyXG5cdCIJCQkJXAorCQkJIm1mYzBcdCUwLCAiICNzb3VyY2UgIiwgIiAjc2VsICJcblx0IgkJXAorCQkJIi5zZXRcdG1pcHMwXG5cdCIJCQkJXAorCQkJOiAiPXIiIChfX3JlcykpOwkJCQlcCisJX19yZXM7CQkJCQkJCQlcCit9KQorCisjZGVmaW5lIF9fcmVhZF82NGJpdF9jMF9yZWdpc3Rlcihzb3VyY2UsIHNlbCkJCQkJXAorKHsgdW5zaWduZWQgbG9uZyBsb25nIF9fcmVzOwkJCQkJCVwKKwlpZiAoc2l6ZW9mKHVuc2lnbmVkIGxvbmcpID09IDQpCQkJCQlcCisJCV9fcmVzID0gX19yZWFkXzY0Yml0X2MwX3NwbGl0KHNvdXJjZSwgc2VsKTsJCVwKKwllbHNlIGlmIChzZWwgPT0gMCkJCQkJCQlcCisJCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJXAorCQkJIi5zZXRcdG1pcHMzXG5cdCIJCQkJXAorCQkJImRtZmMwXHQlMCwgIiAjc291cmNlICJcblx0IgkJCVwKKwkJCSIuc2V0XHRtaXBzMCIJCQkJCVwKKwkJCTogIj1yIiAoX19yZXMpKTsJCQkJXAorCWVsc2UJCQkJCQkJCVwKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQlcCisJCQkiLnNldFx0bWlwczY0XG5cdCIJCQkJXAorCQkJImRtZmMwXHQlMCwgIiAjc291cmNlICIsICIgI3NlbCAiXG5cdCIJCVwKKwkJCSIuc2V0XHRtaXBzMCIJCQkJCVwKKwkJCTogIj1yIiAoX19yZXMpKTsJCQkJXAorCV9fcmVzOwkJCQkJCQkJXAorfSkKKworI2RlZmluZSBfX3dyaXRlXzMyYml0X2MwX3JlZ2lzdGVyKHJlZ2lzdGVyLCBzZWwsIHZhbHVlKQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJaWYgKHNlbCA9PSAwKQkJCQkJCQlcCisJCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJXAorCQkJIm10YzBcdCV6MCwgIiAjcmVnaXN0ZXIgIlxuXHQiCQkJXAorCQkJOiA6ICJKciIgKCh1bnNpZ25lZCBpbnQpdmFsdWUpKTsJCVwKKwllbHNlCQkJCQkJCQlcCisJCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJXAorCQkJIi5zZXRcdG1pcHMzMlxuXHQiCQkJCVwKKwkJCSJtdGMwXHQlejAsICIgI3JlZ2lzdGVyICIsICIgI3NlbCAiXG5cdCIJXAorCQkJIi5zZXRcdG1pcHMwIgkJCQkJXAorCQkJOiA6ICJKciIgKCh1bnNpZ25lZCBpbnQpdmFsdWUpKTsJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgX193cml0ZV82NGJpdF9jMF9yZWdpc3RlcihyZWdpc3Rlciwgc2VsLCB2YWx1ZSkJCQlcCitkbyB7CQkJCQkJCQkJXAorCWlmIChzaXplb2YodW5zaWduZWQgbG9uZykgPT0gNCkJCQkJCVwKKwkJX193cml0ZV82NGJpdF9jMF9zcGxpdChyZWdpc3Rlciwgc2VsLCB2YWx1ZSk7CQlcCisJZWxzZSBpZiAoc2VsID09IDApCQkJCQkJXAorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCVwKKwkJCSIuc2V0XHRtaXBzM1xuXHQiCQkJCVwKKwkJCSJkbXRjMFx0JXowLCAiICNyZWdpc3RlciAiXG5cdCIJCQlcCisJCQkiLnNldFx0bWlwczAiCQkJCQlcCisJCQk6IDogIkpyIiAodmFsdWUpKTsJCQkJXAorCWVsc2UJCQkJCQkJCVwKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQlcCisJCQkiLnNldFx0bWlwczY0XG5cdCIJCQkJXAorCQkJImRtdGMwXHQlejAsICIgI3JlZ2lzdGVyICIsICIgI3NlbCAiXG5cdCIJXAorCQkJIi5zZXRcdG1pcHMwIgkJCQkJXAorCQkJOiA6ICJKciIgKHZhbHVlKSk7CQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgX19yZWFkX3Vsb25nX2MwX3JlZ2lzdGVyKHJlZywgc2VsKQkJCQlcCisJKChzaXplb2YodW5zaWduZWQgbG9uZykgPT0gNCkgPwkJCQkJXAorCSh1bnNpZ25lZCBsb25nKSBfX3JlYWRfMzJiaXRfYzBfcmVnaXN0ZXIocmVnLCBzZWwpIDoJCVwKKwkodW5zaWduZWQgbG9uZykgX19yZWFkXzY0Yml0X2MwX3JlZ2lzdGVyKHJlZywgc2VsKSkKKworI2RlZmluZSBfX3dyaXRlX3Vsb25nX2MwX3JlZ2lzdGVyKHJlZywgc2VsLCB2YWwpCQkJXAorZG8gewkJCQkJCQkJCVwKKwlpZiAoc2l6ZW9mKHVuc2lnbmVkIGxvbmcpID09IDQpCQkJCQlcCisJCV9fd3JpdGVfMzJiaXRfYzBfcmVnaXN0ZXIocmVnLCBzZWwsIHZhbCk7CQlcCisJZWxzZQkJCQkJCQkJXAorCQlfX3dyaXRlXzY0Yml0X2MwX3JlZ2lzdGVyKHJlZywgc2VsLCB2YWwpOwkJXAorfSB3aGlsZSAoMCkKKworLyoKKyAqIE9uIFJNNzAwMC9STTkwMDAgdGhlc2UgYXJlIHVzZXMgdG8gYWNjZXNzIGNvcDAgc2V0IDEgcmVnaXN0ZXJzCisgKi8KKyNkZWZpbmUgX19yZWFkXzMyYml0X2MwX2N0cmxfcmVnaXN0ZXIoc291cmNlKQkJCQlcCisoeyBpbnQgX19yZXM7CQkJCQkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAorCQkiY2ZjMFx0JTAsICIgI3NvdXJjZSAiXG5cdCIJCQkJXAorCQk6ICI9ciIgKF9fcmVzKSk7CQkJCQlcCisJX19yZXM7CQkJCQkJCQlcCit9KQorCisjZGVmaW5lIF9fd3JpdGVfMzJiaXRfYzBfY3RybF9yZWdpc3RlcihyZWdpc3RlciwgdmFsdWUpCQkJXAorZG8gewkJCQkJCQkJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQlcCisJCSJjdGMwXHQlejAsICIgI3JlZ2lzdGVyICJcblx0IgkJCQlcCisJCTogOiAiSnIiICgodW5zaWduZWQgaW50KXZhbHVlKSk7CQkJXAorfSB3aGlsZSAoMCkKKworLyoKKyAqIFRoZXNlIHZlcnNpb25zIGFyZSBvbmx5IG5lZWRlZCBmb3Igc3lzdGVtcyB3aXRoIG1vcmUgdGhhbiAzOCBiaXRzIG9mCisgKiBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlIHJ1bm5pbmcgdGhlIDMyLWJpdCBrZXJuZWwuICBUaGF0J3Mgbm9uZSBhdG0gOi0pCisgKi8KKyNkZWZpbmUgX19yZWFkXzY0Yml0X2MwX3NwbGl0KHNvdXJjZSwgc2VsKQkJCQlcCisoewkJCQkJCQkJCVwKKwl1bnNpZ25lZCBsb25nIGxvbmcgdmFsOwkJCQkJCVwKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwkJCQkJCVwKKwkJCQkJCQkJCVwKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CQkJCQkJXAorCWlmIChzZWwgPT0gMCkJCQkJCQkJXAorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCVwKKwkJCSIuc2V0XHRtaXBzNjRcblx0IgkJCQlcCisJCQkiZG1mYzBcdCVNMCwgIiAjc291cmNlICJcblx0IgkJCVwKKwkJCSJkc2xsXHQlTDAsICVNMCwgMzJcblx0IgkJCVwKKwkJCSJkc3JsXHQlTTAsICVNMCwgMzJcblx0IgkJCVwKKwkJCSJkc3JsXHQlTDAsICVMMCwgMzJcblx0IgkJCVwKKwkJCSIuc2V0XHRtaXBzMCIJCQkJCVwKKwkJCTogIj1yIiAodmFsKSk7CQkJCQlcCisJZWxzZQkJCQkJCQkJXAorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCVwKKwkJCSIuc2V0XHRtaXBzNjRcblx0IgkJCQlcCisJCQkiZG1mYzBcdCVNMCwgIiAjc291cmNlICIsICIgI3NlbCAiXG5cdCIJCVwKKwkJCSJkc2xsXHQlTDAsICVNMCwgMzJcblx0IgkJCVwKKwkJCSJkc3JsXHQlTTAsICVNMCwgMzJcblx0IgkJCVwKKwkJCSJkc3JsXHQlTDAsICVMMCwgMzJcblx0IgkJCVwKKwkJCSIuc2V0XHRtaXBzMCIJCQkJCVwKKwkJCTogIj1yIiAodmFsKSk7CQkJCQlcCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwkJCQkJXAorCQkJCQkJCQkJXAorCXZhbDsJCQkJCQkJCVwKK30pCisKKyNkZWZpbmUgX193cml0ZV82NGJpdF9jMF9zcGxpdChzb3VyY2UsIHNlbCwgdmFsKQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJdW5zaWduZWQgbG9uZyBmbGFnczsJCQkJCQlcCisJCQkJCQkJCQlcCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwkJCQkJCVwKKwlpZiAoc2VsID09IDApCQkJCQkJCVwKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQlcCisJCQkiLnNldFx0bWlwczY0XG5cdCIJCQkJXAorCQkJImRzbGxcdCVMMCwgJUwwLCAzMlxuXHQiCQkJXAorCQkJImRzcmxcdCVMMCwgJUwwLCAzMlxuXHQiCQkJXAorCQkJImRzbGxcdCVNMCwgJU0wLCAzMlxuXHQiCQkJXAorCQkJIm9yXHQlTDAsICVMMCwgJU0wXG5cdCIJCQkJXAorCQkJImRtdGMwXHQlTDAsICIgI3NvdXJjZSAiXG5cdCIJCQlcCisJCQkiLnNldFx0bWlwczAiCQkJCQlcCisJCQk6IDogInIiICh2YWwpKTsJCQkJCVwKKwllbHNlCQkJCQkJCQlcCisJCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJXAorCQkJIi5zZXRcdG1pcHM2NFxuXHQiCQkJCVwKKwkJCSJkc2xsXHQlTDAsICVMMCwgMzJcblx0IgkJCVwKKwkJCSJkc3JsXHQlTDAsICVMMCwgMzJcblx0IgkJCVwKKwkJCSJkc2xsXHQlTTAsICVNMCwgMzJcblx0IgkJCVwKKwkJCSJvclx0JUwwLCAlTDAsICVNMFxuXHQiCQkJCVwKKwkJCSJkbXRjMFx0JUwwLCAiICNzb3VyY2UgIiwgIiAjc2VsICJcblx0IgkJXAorCQkJIi5zZXRcdG1pcHMwIgkJCQkJXAorCQkJOiA6ICJyIiAodmFsKSk7CQkJCQlcCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwkJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSByZWFkX2MwX2luZGV4KCkJCV9fcmVhZF8zMmJpdF9jMF9yZWdpc3RlcigkMCwgMCkKKyNkZWZpbmUgd3JpdGVfYzBfaW5kZXgodmFsKQlfX3dyaXRlXzMyYml0X2MwX3JlZ2lzdGVyKCQwLCAwLCB2YWwpCisKKyNkZWZpbmUgcmVhZF9jMF9lbnRyeWxvMCgpCV9fcmVhZF91bG9uZ19jMF9yZWdpc3RlcigkMiwgMCkKKyNkZWZpbmUgd3JpdGVfYzBfZW50cnlsbzAodmFsKQlfX3dyaXRlX3Vsb25nX2MwX3JlZ2lzdGVyKCQyLCAwLCB2YWwpCisKKyNkZWZpbmUgcmVhZF9jMF9lbnRyeWxvMSgpCV9fcmVhZF91bG9uZ19jMF9yZWdpc3RlcigkMywgMCkKKyNkZWZpbmUgd3JpdGVfYzBfZW50cnlsbzEodmFsKQlfX3dyaXRlX3Vsb25nX2MwX3JlZ2lzdGVyKCQzLCAwLCB2YWwpCisKKyNkZWZpbmUgcmVhZF9jMF9jb25mKCkJCV9fcmVhZF8zMmJpdF9jMF9yZWdpc3RlcigkMywgMCkKKyNkZWZpbmUgd3JpdGVfYzBfY29uZih2YWwpCV9fd3JpdGVfMzJiaXRfYzBfcmVnaXN0ZXIoJDMsIDAsIHZhbCkKKworI2RlZmluZSByZWFkX2MwX2NvbnRleHQoKQlfX3JlYWRfdWxvbmdfYzBfcmVnaXN0ZXIoJDQsIDApCisjZGVmaW5lIHdyaXRlX2MwX2NvbnRleHQodmFsKQlfX3dyaXRlX3Vsb25nX2MwX3JlZ2lzdGVyKCQ0LCAwLCB2YWwpCisKKyNkZWZpbmUgcmVhZF9jMF9wYWdlbWFzaygpCV9fcmVhZF8zMmJpdF9jMF9yZWdpc3RlcigkNSwgMCkKKyNkZWZpbmUgd3JpdGVfYzBfcGFnZW1hc2sodmFsKQlfX3dyaXRlXzMyYml0X2MwX3JlZ2lzdGVyKCQ1LCAwLCB2YWwpCisKKyNkZWZpbmUgcmVhZF9jMF93aXJlZCgpCQlfX3JlYWRfMzJiaXRfYzBfcmVnaXN0ZXIoJDYsIDApCisjZGVmaW5lIHdyaXRlX2MwX3dpcmVkKHZhbCkJX193cml0ZV8zMmJpdF9jMF9yZWdpc3RlcigkNiwgMCwgdmFsKQorCisjZGVmaW5lIHJlYWRfYzBfaW5mbygpCQlfX3JlYWRfMzJiaXRfYzBfcmVnaXN0ZXIoJDcsIDApCisKKyNkZWZpbmUgcmVhZF9jMF9jYWNoZSgpCQlfX3JlYWRfMzJiaXRfYzBfcmVnaXN0ZXIoJDcsIDApCS8qIFRYMzl4eCAqLworI2RlZmluZSB3cml0ZV9jMF9jYWNoZSh2YWwpCV9fd3JpdGVfMzJiaXRfYzBfcmVnaXN0ZXIoJDcsIDAsIHZhbCkKKworI2RlZmluZSByZWFkX2MwX2NvdW50KCkJCV9fcmVhZF8zMmJpdF9jMF9yZWdpc3RlcigkOSwgMCkKKyNkZWZpbmUgd3JpdGVfYzBfY291bnQodmFsKQlfX3dyaXRlXzMyYml0X2MwX3JlZ2lzdGVyKCQ5LCAwLCB2YWwpCisKKyNkZWZpbmUgcmVhZF9jMF9lbnRyeWhpKCkJX19yZWFkX3Vsb25nX2MwX3JlZ2lzdGVyKCQxMCwgMCkKKyNkZWZpbmUgd3JpdGVfYzBfZW50cnloaSh2YWwpCV9fd3JpdGVfdWxvbmdfYzBfcmVnaXN0ZXIoJDEwLCAwLCB2YWwpCisKKyNkZWZpbmUgcmVhZF9jMF9jb21wYXJlKCkJX19yZWFkXzMyYml0X2MwX3JlZ2lzdGVyKCQxMSwgMCkKKyNkZWZpbmUgd3JpdGVfYzBfY29tcGFyZSh2YWwpCV9fd3JpdGVfMzJiaXRfYzBfcmVnaXN0ZXIoJDExLCAwLCB2YWwpCisKKyNkZWZpbmUgcmVhZF9jMF9zdGF0dXMoKQlfX3JlYWRfMzJiaXRfYzBfcmVnaXN0ZXIoJDEyLCAwKQorI2RlZmluZSB3cml0ZV9jMF9zdGF0dXModmFsKQlfX3dyaXRlXzMyYml0X2MwX3JlZ2lzdGVyKCQxMiwgMCwgdmFsKQorCisjZGVmaW5lIHJlYWRfYzBfY2F1c2UoKQkJX19yZWFkXzMyYml0X2MwX3JlZ2lzdGVyKCQxMywgMCkKKyNkZWZpbmUgd3JpdGVfYzBfY2F1c2UodmFsKQlfX3dyaXRlXzMyYml0X2MwX3JlZ2lzdGVyKCQxMywgMCwgdmFsKQorCisjZGVmaW5lIHJlYWRfYzBfZXBjKCkJCV9fcmVhZF91bG9uZ19jMF9yZWdpc3RlcigkMTQsIDApCisjZGVmaW5lIHdyaXRlX2MwX2VwYyh2YWwpCV9fd3JpdGVfdWxvbmdfYzBfcmVnaXN0ZXIoJDE0LCAwLCB2YWwpCisKKyNkZWZpbmUgcmVhZF9jMF9wcmlkKCkJCV9fcmVhZF8zMmJpdF9jMF9yZWdpc3RlcigkMTUsIDApCisKKyNkZWZpbmUgcmVhZF9jMF9jb25maWcoKQlfX3JlYWRfMzJiaXRfYzBfcmVnaXN0ZXIoJDE2LCAwKQorI2RlZmluZSByZWFkX2MwX2NvbmZpZzEoKQlfX3JlYWRfMzJiaXRfYzBfcmVnaXN0ZXIoJDE2LCAxKQorI2RlZmluZSByZWFkX2MwX2NvbmZpZzIoKQlfX3JlYWRfMzJiaXRfYzBfcmVnaXN0ZXIoJDE2LCAyKQorI2RlZmluZSByZWFkX2MwX2NvbmZpZzMoKQlfX3JlYWRfMzJiaXRfYzBfcmVnaXN0ZXIoJDE2LCAzKQorI2RlZmluZSB3cml0ZV9jMF9jb25maWcodmFsKQlfX3dyaXRlXzMyYml0X2MwX3JlZ2lzdGVyKCQxNiwgMCwgdmFsKQorI2RlZmluZSB3cml0ZV9jMF9jb25maWcxKHZhbCkJX193cml0ZV8zMmJpdF9jMF9yZWdpc3RlcigkMTYsIDEsIHZhbCkKKyNkZWZpbmUgd3JpdGVfYzBfY29uZmlnMih2YWwpCV9fd3JpdGVfMzJiaXRfYzBfcmVnaXN0ZXIoJDE2LCAyLCB2YWwpCisjZGVmaW5lIHdyaXRlX2MwX2NvbmZpZzModmFsKQlfX3dyaXRlXzMyYml0X2MwX3JlZ2lzdGVyKCQxNiwgMywgdmFsKQorCisvKgorICogVGhlIFdhdGNoTG8gcmVnaXN0ZXIuICBUaGVyZSBtYXkgYmUgdXB0byA4IG9mIHRoZW0uCisgKi8KKyNkZWZpbmUgcmVhZF9jMF93YXRjaGxvMCgpCV9fcmVhZF91bG9uZ19jMF9yZWdpc3RlcigkMTgsIDApCisjZGVmaW5lIHJlYWRfYzBfd2F0Y2hsbzEoKQlfX3JlYWRfdWxvbmdfYzBfcmVnaXN0ZXIoJDE4LCAxKQorI2RlZmluZSByZWFkX2MwX3dhdGNobG8yKCkJX19yZWFkX3Vsb25nX2MwX3JlZ2lzdGVyKCQxOCwgMikKKyNkZWZpbmUgcmVhZF9jMF93YXRjaGxvMygpCV9fcmVhZF91bG9uZ19jMF9yZWdpc3RlcigkMTgsIDMpCisjZGVmaW5lIHJlYWRfYzBfd2F0Y2hsbzQoKQlfX3JlYWRfdWxvbmdfYzBfcmVnaXN0ZXIoJDE4LCA0KQorI2RlZmluZSByZWFkX2MwX3dhdGNobG81KCkJX19yZWFkX3Vsb25nX2MwX3JlZ2lzdGVyKCQxOCwgNSkKKyNkZWZpbmUgcmVhZF9jMF93YXRjaGxvNigpCV9fcmVhZF91bG9uZ19jMF9yZWdpc3RlcigkMTgsIDYpCisjZGVmaW5lIHJlYWRfYzBfd2F0Y2hsbzcoKQlfX3JlYWRfdWxvbmdfYzBfcmVnaXN0ZXIoJDE4LCA3KQorI2RlZmluZSB3cml0ZV9jMF93YXRjaGxvMCh2YWwpCV9fd3JpdGVfdWxvbmdfYzBfcmVnaXN0ZXIoJDE4LCAwLCB2YWwpCisjZGVmaW5lIHdyaXRlX2MwX3dhdGNobG8xKHZhbCkJX193cml0ZV91bG9uZ19jMF9yZWdpc3RlcigkMTgsIDEsIHZhbCkKKyNkZWZpbmUgd3JpdGVfYzBfd2F0Y2hsbzIodmFsKQlfX3dyaXRlX3Vsb25nX2MwX3JlZ2lzdGVyKCQxOCwgMiwgdmFsKQorI2RlZmluZSB3cml0ZV9jMF93YXRjaGxvMyh2YWwpCV9fd3JpdGVfdWxvbmdfYzBfcmVnaXN0ZXIoJDE4LCAzLCB2YWwpCisjZGVmaW5lIHdyaXRlX2MwX3dhdGNobG80KHZhbCkJX193cml0ZV91bG9uZ19jMF9yZWdpc3RlcigkMTgsIDQsIHZhbCkKKyNkZWZpbmUgd3JpdGVfYzBfd2F0Y2hsbzUodmFsKQlfX3dyaXRlX3Vsb25nX2MwX3JlZ2lzdGVyKCQxOCwgNSwgdmFsKQorI2RlZmluZSB3cml0ZV9jMF93YXRjaGxvNih2YWwpCV9fd3JpdGVfdWxvbmdfYzBfcmVnaXN0ZXIoJDE4LCA2LCB2YWwpCisjZGVmaW5lIHdyaXRlX2MwX3dhdGNobG83KHZhbCkJX193cml0ZV91bG9uZ19jMF9yZWdpc3RlcigkMTgsIDcsIHZhbCkKKworLyoKKyAqIFRoZSBXYXRjaEhpIHJlZ2lzdGVyLiAgVGhlcmUgbWF5IGJlIHVwdG8gOCBvZiB0aGVtLgorICovCisjZGVmaW5lIHJlYWRfYzBfd2F0Y2hoaTAoKQlfX3JlYWRfMzJiaXRfYzBfcmVnaXN0ZXIoJDE5LCAwKQorI2RlZmluZSByZWFkX2MwX3dhdGNoaGkxKCkJX19yZWFkXzMyYml0X2MwX3JlZ2lzdGVyKCQxOSwgMSkKKyNkZWZpbmUgcmVhZF9jMF93YXRjaGhpMigpCV9fcmVhZF8zMmJpdF9jMF9yZWdpc3RlcigkMTksIDIpCisjZGVmaW5lIHJlYWRfYzBfd2F0Y2hoaTMoKQlfX3JlYWRfMzJiaXRfYzBfcmVnaXN0ZXIoJDE5LCAzKQorI2RlZmluZSByZWFkX2MwX3dhdGNoaGk0KCkJX19yZWFkXzMyYml0X2MwX3JlZ2lzdGVyKCQxOSwgNCkKKyNkZWZpbmUgcmVhZF9jMF93YXRjaGhpNSgpCV9fcmVhZF8zMmJpdF9jMF9yZWdpc3RlcigkMTksIDUpCisjZGVmaW5lIHJlYWRfYzBfd2F0Y2hoaTYoKQlfX3JlYWRfMzJiaXRfYzBfcmVnaXN0ZXIoJDE5LCA2KQorI2RlZmluZSByZWFkX2MwX3dhdGNoaGk3KCkJX19yZWFkXzMyYml0X2MwX3JlZ2lzdGVyKCQxOSwgNykKKworI2RlZmluZSB3cml0ZV9jMF93YXRjaGhpMCh2YWwpCV9fd3JpdGVfMzJiaXRfYzBfcmVnaXN0ZXIoJDE5LCAwLCB2YWwpCisjZGVmaW5lIHdyaXRlX2MwX3dhdGNoaGkxKHZhbCkJX193cml0ZV8zMmJpdF9jMF9yZWdpc3RlcigkMTksIDEsIHZhbCkKKyNkZWZpbmUgd3JpdGVfYzBfd2F0Y2hoaTIodmFsKQlfX3dyaXRlXzMyYml0X2MwX3JlZ2lzdGVyKCQxOSwgMiwgdmFsKQorI2RlZmluZSB3cml0ZV9jMF93YXRjaGhpMyh2YWwpCV9fd3JpdGVfMzJiaXRfYzBfcmVnaXN0ZXIoJDE5LCAzLCB2YWwpCisjZGVmaW5lIHdyaXRlX2MwX3dhdGNoaGk0KHZhbCkJX193cml0ZV8zMmJpdF9jMF9yZWdpc3RlcigkMTksIDQsIHZhbCkKKyNkZWZpbmUgd3JpdGVfYzBfd2F0Y2hoaTUodmFsKQlfX3dyaXRlXzMyYml0X2MwX3JlZ2lzdGVyKCQxOSwgNSwgdmFsKQorI2RlZmluZSB3cml0ZV9jMF93YXRjaGhpNih2YWwpCV9fd3JpdGVfMzJiaXRfYzBfcmVnaXN0ZXIoJDE5LCA2LCB2YWwpCisjZGVmaW5lIHdyaXRlX2MwX3dhdGNoaGk3KHZhbCkJX193cml0ZV8zMmJpdF9jMF9yZWdpc3RlcigkMTksIDcsIHZhbCkKKworI2RlZmluZSByZWFkX2MwX3hjb250ZXh0KCkJX19yZWFkX3Vsb25nX2MwX3JlZ2lzdGVyKCQyMCwgMCkKKyNkZWZpbmUgd3JpdGVfYzBfeGNvbnRleHQodmFsKQlfX3dyaXRlX3Vsb25nX2MwX3JlZ2lzdGVyKCQyMCwgMCwgdmFsKQorCisjZGVmaW5lIHJlYWRfYzBfaW50Y29udHJvbCgpCV9fcmVhZF8zMmJpdF9jMF9jdHJsX3JlZ2lzdGVyKCQyMCkKKyNkZWZpbmUgd3JpdGVfYzBfaW50Y29udHJvbCh2YWwpIF9fd3JpdGVfMzJiaXRfYzBfY3RybF9yZWdpc3RlcigkMjAsIHZhbCkKKworI2RlZmluZSByZWFkX2MwX2ZyYW1lbWFzaygpCV9fcmVhZF8zMmJpdF9jMF9yZWdpc3RlcigkMjEsIDApCisjZGVmaW5lIHdyaXRlX2MwX2ZyYW1lbWFzayh2YWwpCV9fd3JpdGVfMzJiaXRfYzBfcmVnaXN0ZXIoJDIxLCAwLCB2YWwpCisKKy8qIFJNOTAwMCBQZXJmQ29udHJvbCBwZXJmb3JtYW5jZSBjb3VudGVyIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgcmVhZF9jMF9wZXJmY29udHJvbCgpCV9fcmVhZF8zMmJpdF9jMF9yZWdpc3RlcigkMjIsIDApCisjZGVmaW5lIHdyaXRlX2MwX3BlcmZjb250cm9sKHZhbCkgX193cml0ZV8zMmJpdF9jMF9yZWdpc3RlcigkMjIsIDAsIHZhbCkKKworI2RlZmluZSByZWFkX2MwX2RpYWcoKQkJX19yZWFkXzMyYml0X2MwX3JlZ2lzdGVyKCQyMiwgMCkKKyNkZWZpbmUgd3JpdGVfYzBfZGlhZyh2YWwpCV9fd3JpdGVfMzJiaXRfYzBfcmVnaXN0ZXIoJDIyLCAwLCB2YWwpCisKKyNkZWZpbmUgcmVhZF9jMF9kaWFnMSgpCQlfX3JlYWRfMzJiaXRfYzBfcmVnaXN0ZXIoJDIyLCAxKQorI2RlZmluZSB3cml0ZV9jMF9kaWFnMSh2YWwpCV9fd3JpdGVfMzJiaXRfYzBfcmVnaXN0ZXIoJDIyLCAxLCB2YWwpCisKKyNkZWZpbmUgcmVhZF9jMF9kaWFnMigpCQlfX3JlYWRfMzJiaXRfYzBfcmVnaXN0ZXIoJDIyLCAyKQorI2RlZmluZSB3cml0ZV9jMF9kaWFnMih2YWwpCV9fd3JpdGVfMzJiaXRfYzBfcmVnaXN0ZXIoJDIyLCAyLCB2YWwpCisKKyNkZWZpbmUgcmVhZF9jMF9kaWFnMygpCQlfX3JlYWRfMzJiaXRfYzBfcmVnaXN0ZXIoJDIyLCAzKQorI2RlZmluZSB3cml0ZV9jMF9kaWFnMyh2YWwpCV9fd3JpdGVfMzJiaXRfYzBfcmVnaXN0ZXIoJDIyLCAzLCB2YWwpCisKKyNkZWZpbmUgcmVhZF9jMF9kaWFnNCgpCQlfX3JlYWRfMzJiaXRfYzBfcmVnaXN0ZXIoJDIyLCA0KQorI2RlZmluZSB3cml0ZV9jMF9kaWFnNCh2YWwpCV9fd3JpdGVfMzJiaXRfYzBfcmVnaXN0ZXIoJDIyLCA0LCB2YWwpCisKKyNkZWZpbmUgcmVhZF9jMF9kaWFnNSgpCQlfX3JlYWRfMzJiaXRfYzBfcmVnaXN0ZXIoJDIyLCA1KQorI2RlZmluZSB3cml0ZV9jMF9kaWFnNSh2YWwpCV9fd3JpdGVfMzJiaXRfYzBfcmVnaXN0ZXIoJDIyLCA1LCB2YWwpCisKKyNkZWZpbmUgcmVhZF9jMF9kZWJ1ZygpCQlfX3JlYWRfMzJiaXRfYzBfcmVnaXN0ZXIoJDIzLCAwKQorI2RlZmluZSB3cml0ZV9jMF9kZWJ1Zyh2YWwpCV9fd3JpdGVfMzJiaXRfYzBfcmVnaXN0ZXIoJDIzLCAwLCB2YWwpCisKKyNkZWZpbmUgcmVhZF9jMF9kZXBjKCkJCV9fcmVhZF91bG9uZ19jMF9yZWdpc3RlcigkMjQsIDApCisjZGVmaW5lIHdyaXRlX2MwX2RlcGModmFsKQlfX3dyaXRlX3Vsb25nX2MwX3JlZ2lzdGVyKCQyNCwgMCwgdmFsKQorCisvKgorICogTUlQUzMyIC8gTUlQUzY0IHBlcmZvcm1hbmNlIGNvdW50ZXJzCisgKi8KKyNkZWZpbmUgcmVhZF9jMF9wZXJmY3RybDAoKQlfX3JlYWRfMzJiaXRfYzBfcmVnaXN0ZXIoJDI1LCAwKQorI2RlZmluZSB3cml0ZV9jMF9wZXJmY3RybDAodmFsKQlfX3dyaXRlXzMyYml0X2MwX3JlZ2lzdGVyKCQyNSwgMCwgdmFsKQorI2RlZmluZSByZWFkX2MwX3BlcmZjbnRyMCgpCV9fcmVhZF8zMmJpdF9jMF9yZWdpc3RlcigkMjUsIDEpCisjZGVmaW5lIHdyaXRlX2MwX3BlcmZjbnRyMCh2YWwpCV9fd3JpdGVfMzJiaXRfYzBfcmVnaXN0ZXIoJDI1LCAxLCB2YWwpCisjZGVmaW5lIHJlYWRfYzBfcGVyZmN0cmwxKCkJX19yZWFkXzMyYml0X2MwX3JlZ2lzdGVyKCQyNSwgMikKKyNkZWZpbmUgd3JpdGVfYzBfcGVyZmN0cmwxKHZhbCkJX193cml0ZV8zMmJpdF9jMF9yZWdpc3RlcigkMjUsIDIsIHZhbCkKKyNkZWZpbmUgcmVhZF9jMF9wZXJmY250cjEoKQlfX3JlYWRfMzJiaXRfYzBfcmVnaXN0ZXIoJDI1LCAzKQorI2RlZmluZSB3cml0ZV9jMF9wZXJmY250cjEodmFsKQlfX3dyaXRlXzMyYml0X2MwX3JlZ2lzdGVyKCQyNSwgMywgdmFsKQorI2RlZmluZSByZWFkX2MwX3BlcmZjdHJsMigpCV9fcmVhZF8zMmJpdF9jMF9yZWdpc3RlcigkMjUsIDQpCisjZGVmaW5lIHdyaXRlX2MwX3BlcmZjdHJsMih2YWwpCV9fd3JpdGVfMzJiaXRfYzBfcmVnaXN0ZXIoJDI1LCA0LCB2YWwpCisjZGVmaW5lIHJlYWRfYzBfcGVyZmNudHIyKCkJX19yZWFkXzMyYml0X2MwX3JlZ2lzdGVyKCQyNSwgNSkKKyNkZWZpbmUgd3JpdGVfYzBfcGVyZmNudHIyKHZhbCkJX193cml0ZV8zMmJpdF9jMF9yZWdpc3RlcigkMjUsIDUsIHZhbCkKKyNkZWZpbmUgcmVhZF9jMF9wZXJmY3RybDMoKQlfX3JlYWRfMzJiaXRfYzBfcmVnaXN0ZXIoJDI1LCA2KQorI2RlZmluZSB3cml0ZV9jMF9wZXJmY3RybDModmFsKQlfX3dyaXRlXzMyYml0X2MwX3JlZ2lzdGVyKCQyNSwgNiwgdmFsKQorI2RlZmluZSByZWFkX2MwX3BlcmZjbnRyMygpCV9fcmVhZF8zMmJpdF9jMF9yZWdpc3RlcigkMjUsIDcpCisjZGVmaW5lIHdyaXRlX2MwX3BlcmZjbnRyMyh2YWwpCV9fd3JpdGVfMzJiaXRfYzBfcmVnaXN0ZXIoJDI1LCA3LCB2YWwpCisKKy8qIFJNOTAwMCBQZXJmQ291bnQgcGVyZm9ybWFuY2UgY291bnRlciByZWdpc3RlciAqLworI2RlZmluZSByZWFkX2MwX3BlcmZjb3VudCgpCV9fcmVhZF82NGJpdF9jMF9yZWdpc3RlcigkMjUsIDApCisjZGVmaW5lIHdyaXRlX2MwX3BlcmZjb3VudCh2YWwpCV9fd3JpdGVfNjRiaXRfYzBfcmVnaXN0ZXIoJDI1LCAwLCB2YWwpCisKKyNkZWZpbmUgcmVhZF9jMF9lY2MoKQkJX19yZWFkXzMyYml0X2MwX3JlZ2lzdGVyKCQyNiwgMCkKKyNkZWZpbmUgd3JpdGVfYzBfZWNjKHZhbCkJX193cml0ZV8zMmJpdF9jMF9yZWdpc3RlcigkMjYsIDAsIHZhbCkKKworI2RlZmluZSByZWFkX2MwX2RlcnJhZGRyMCgpCV9fcmVhZF91bG9uZ19jMF9yZWdpc3RlcigkMjYsIDEpCisjZGVmaW5lIHdyaXRlX2MwX2RlcnJhZGRyMCh2YWwpCV9fd3JpdGVfdWxvbmdfYzBfcmVnaXN0ZXIoJDI2LCAxLCB2YWwpCisKKyNkZWZpbmUgcmVhZF9jMF9jYWNoZWVycigpCV9fcmVhZF8zMmJpdF9jMF9yZWdpc3RlcigkMjcsIDApCisKKyNkZWZpbmUgcmVhZF9jMF9kZXJyYWRkcjEoKQlfX3JlYWRfdWxvbmdfYzBfcmVnaXN0ZXIoJDI3LCAxKQorI2RlZmluZSB3cml0ZV9jMF9kZXJyYWRkcjEodmFsKQlfX3dyaXRlX3Vsb25nX2MwX3JlZ2lzdGVyKCQyNywgMSwgdmFsKQorCisjZGVmaW5lIHJlYWRfYzBfdGFnbG8oKQkJX19yZWFkXzMyYml0X2MwX3JlZ2lzdGVyKCQyOCwgMCkKKyNkZWZpbmUgd3JpdGVfYzBfdGFnbG8odmFsKQlfX3dyaXRlXzMyYml0X2MwX3JlZ2lzdGVyKCQyOCwgMCwgdmFsKQorCisjZGVmaW5lIHJlYWRfYzBfdGFnaGkoKQkJX19yZWFkXzMyYml0X2MwX3JlZ2lzdGVyKCQyOSwgMCkKKyNkZWZpbmUgd3JpdGVfYzBfdGFnaGkodmFsKQlfX3dyaXRlXzMyYml0X2MwX3JlZ2lzdGVyKCQyOSwgMCwgdmFsKQorCisjZGVmaW5lIHJlYWRfYzBfZXJyb3JlcGMoKQlfX3JlYWRfdWxvbmdfYzBfcmVnaXN0ZXIoJDMwLCAwKQorI2RlZmluZSB3cml0ZV9jMF9lcnJvcmVwYyh2YWwpCV9fd3JpdGVfdWxvbmdfYzBfcmVnaXN0ZXIoJDMwLCAwLCB2YWwpCisKKy8qCisgKiBNYWNyb3MgdG8gYWNjZXNzIHRoZSBmbG9hdGluZyBwb2ludCBjb3Byb2Nlc3NvciBjb250cm9sIHJlZ2lzdGVycworICovCisjZGVmaW5lIHJlYWRfMzJiaXRfY3AxX3JlZ2lzdGVyKHNvdXJjZSkgICAgICAgICAgICAgICAgICAgICAgICAgXAorKHsgaW50IF9fcmVzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkiLnNldFx0cHVzaFxuXHQiCQkJCQlcCisJIi5zZXRcdHJlb3JkZXJcblx0IgkJCQkJXAorICAgICAgICAiY2ZjMVx0JTAsIlNUUihzb3VyY2UpIlxuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkiLnNldFx0cG9wIgkJCQkJCVwKKyAgICAgICAgOiAiPXIiIChfX3JlcykpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIF9fcmVzO30pCisKKy8qCisgKiBUTEIgb3BlcmF0aW9ucy4KKyAqCisgKiBJdCBpcyByZXNwb25zaWJpbGl0eSBvZiB0aGUgY2FsbGVyIHRvIHRha2UgY2FyZSBvZiBhbnkgVExCIGhhemFyZHMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB0bGJfcHJvYmUodm9pZCkKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJIi5zZXQgbm9yZW9yZGVyXG5cdCIKKwkJInRsYnBcblx0IgorCQkiLnNldCByZW9yZGVyIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0bGJfcmVhZCh2b2lkKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkiLnNldCBub3Jlb3JkZXJcblx0IgorCQkidGxiclxuXHQiCisJCSIuc2V0IHJlb3JkZXIiKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHRsYl93cml0ZV9pbmRleGVkKHZvaWQpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSIuc2V0IG5vcmVvcmRlclxuXHQiCisJCSJ0bGJ3aVxuXHQiCisJCSIuc2V0IHJlb3JkZXIiKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHRsYl93cml0ZV9yYW5kb20odm9pZCkKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJIi5zZXQgbm9yZW9yZGVyXG5cdCIKKwkJInRsYndyXG5cdCIKKwkJIi5zZXQgcmVvcmRlciIpOworfQorCisvKgorICogTWFuaXB1bGF0ZSBiaXRzIGluIGEgYzAgcmVnaXN0ZXIuCisgKi8KKyNkZWZpbmUgX19CVUlMRF9TRVRfQzAobmFtZSkJCQkJCVwKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CQkJCQlcCitzZXRfYzBfIyNuYW1lKHVuc2lnbmVkIGludCBzZXQpCQkJCQlcCit7CQkJCQkJCQlcCisJdW5zaWduZWQgaW50IHJlczsJCQkJCVwKKwkJCQkJCQkJXAorCXJlcyA9IHJlYWRfYzBfIyNuYW1lKCk7CQkJCQlcCisJcmVzIHw9IHNldDsJCQkJCQlcCisJd3JpdGVfYzBfIyNuYW1lKHJlcyk7CQkJCQlcCisJCQkJCQkJCVwKKwlyZXR1cm4gcmVzOwkJCQkJCVwKK30JCQkJCQkJCVwKKwkJCQkJCQkJXAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQJCQkJCVwKK2NsZWFyX2MwXyMjbmFtZSh1bnNpZ25lZCBpbnQgY2xlYXIpCQkJCVwKK3sJCQkJCQkJCVwKKwl1bnNpZ25lZCBpbnQgcmVzOwkJCQkJXAorCQkJCQkJCQlcCisJcmVzID0gcmVhZF9jMF8jI25hbWUoKTsJCQkJCVwKKwlyZXMgJj0gfmNsZWFyOwkJCQkJCVwKKwl3cml0ZV9jMF8jI25hbWUocmVzKTsJCQkJCVwKKwkJCQkJCQkJXAorCXJldHVybiByZXM7CQkJCQkJXAorfQkJCQkJCQkJXAorCQkJCQkJCQlcCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAkJCQkJXAorY2hhbmdlX2MwXyMjbmFtZSh1bnNpZ25lZCBpbnQgY2hhbmdlLCB1bnNpZ25lZCBpbnQgbmV3KQkJXAorewkJCQkJCQkJXAorCXVuc2lnbmVkIGludCByZXM7CQkJCQlcCisJCQkJCQkJCVwKKwlyZXMgPSByZWFkX2MwXyMjbmFtZSgpOwkJCQkJXAorCXJlcyAmPSB+Y2hhbmdlOwkJCQkJCVwKKwlyZXMgfD0gKG5ldyAmIGNoYW5nZSk7CQkJCQlcCisJd3JpdGVfYzBfIyNuYW1lKHJlcyk7CQkJCQlcCisJCQkJCQkJCVwKKwlyZXR1cm4gcmVzOwkJCQkJCVwKK30KKworX19CVUlMRF9TRVRfQzAoc3RhdHVzKQorX19CVUlMRF9TRVRfQzAoY2F1c2UpCitfX0JVSUxEX1NFVF9DMChjb25maWcpCitfX0JVSUxEX1NFVF9DMChpbnRjb250cm9sKQorCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYgLyogX0FTTV9NSVBTUkVHU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21tYW4uaCBiL2luY2x1ZGUvYXNtLW1pcHMvbW1hbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyMDYwOTUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21tYW4uaApAQCAtMCwwICsxLDczIEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk5LCAyMDAyIGJ5IFJhbGYgQmFlY2hsZQorICovCisjaWZuZGVmIF9BU01fTU1BTl9ICisjZGVmaW5lIF9BU01fTU1BTl9ICisKKy8qCisgKiBQcm90ZWN0aW9ucyBhcmUgY2hvc2VuIGZyb20gdGhlc2UgYml0cywgT1InZCB0b2dldGhlci4gIFRoZQorICogaW1wbGVtZW50YXRpb24gZG9lcyBub3QgbmVjZXNzYXJpbHkgc3VwcG9ydCBQUk9UX0VYRUMgb3IgUFJPVF9XUklURQorICogd2l0aG91dCBQUk9UX1JFQUQuICBUaGUgb25seSBndWFyYW50ZWVzIGFyZSB0aGF0IG5vIHdyaXRpbmcgd2lsbCBiZQorICogYWxsb3dlZCB3aXRob3V0IFBST1RfV1JJVEUgYW5kIG5vIGFjY2VzcyB3aWxsIGJlIGFsbG93ZWQgZm9yIFBST1RfTk9ORS4KKyAqLworI2RlZmluZSBQUk9UX05PTkUJMHgwMAkJLyogcGFnZSBjYW4gbm90IGJlIGFjY2Vzc2VkICovCisjZGVmaW5lIFBST1RfUkVBRAkweDAxCQkvKiBwYWdlIGNhbiBiZSByZWFkICovCisjZGVmaW5lIFBST1RfV1JJVEUJMHgwMgkJLyogcGFnZSBjYW4gYmUgd3JpdHRlbiAqLworI2RlZmluZSBQUk9UX0VYRUMJMHgwNAkJLyogcGFnZSBjYW4gYmUgZXhlY3V0ZWQgKi8KKy8qCQkJMHgwOAkJICAgcmVzZXJ2ZWQgZm9yIFBST1RfRVhFQ19OT0ZMVVNIICovCisjZGVmaW5lIFBST1RfU0VNCTB4MTAJCS8qIHBhZ2UgbWF5IGJlIHVzZWQgZm9yIGF0b21pYyBvcHMgKi8KKyNkZWZpbmUgUFJPVF9HUk9XU0RPV04JMHgwMTAwMDAwMAkvKiBtcHJvdGVjdCBmbGFnOiBleHRlbmQgY2hhbmdlIHRvIHN0YXJ0IG9mIGdyb3dzZG93biB2bWEgKi8KKyNkZWZpbmUgUFJPVF9HUk9XU1VQCTB4MDIwMDAwMDAJLyogbXByb3RlY3QgZmxhZzogZXh0ZW5kIGNoYW5nZSB0byBlbmQgb2YgZ3Jvd3N1cCB2bWEgKi8KKworLyoKKyAqIEZsYWdzIGZvciBtbWFwCisgKi8KKyNkZWZpbmUgTUFQX1NIQVJFRAkweDAwMQkJLyogU2hhcmUgY2hhbmdlcyAqLworI2RlZmluZSBNQVBfUFJJVkFURQkweDAwMgkJLyogQ2hhbmdlcyBhcmUgcHJpdmF0ZSAqLworI2RlZmluZSBNQVBfVFlQRQkweDAwZgkJLyogTWFzayBmb3IgdHlwZSBvZiBtYXBwaW5nICovCisjZGVmaW5lIE1BUF9GSVhFRAkweDAxMAkJLyogSW50ZXJwcmV0IGFkZHIgZXhhY3RseSAqLworCisvKiBub3QgdXNlZCBieSBsaW51eCwgYnV0IGhlcmUgdG8gbWFrZSBzdXJlIHdlIGRvbid0IGNsYXNoIHdpdGggQUJJIGRlZmluZXMgKi8KKyNkZWZpbmUgTUFQX1JFTkFNRQkweDAyMAkJLyogQXNzaWduIHBhZ2UgdG8gZmlsZSAqLworI2RlZmluZSBNQVBfQVVUT0dST1cJMHgwNDAJCS8qIEZpbGUgbWF5IGdyb3cgYnkgd3JpdGluZyAqLworI2RlZmluZSBNQVBfTE9DQUwJMHgwODAJCS8qIENvcHkgb24gZm9yay9zcHJvYyAqLworI2RlZmluZSBNQVBfQVVUT1JTUlYJMHgxMDAJCS8qIExvZ2ljYWwgc3dhcCByZXNlcnZlZCBvbiBkZW1hbmQgKi8KKworLyogVGhlc2UgYXJlIGxpbnV4LXNwZWNpZmljICovCisjZGVmaW5lIE1BUF9OT1JFU0VSVkUJMHgwNDAwCQkvKiBkb24ndCBjaGVjayBmb3IgcmVzZXJ2YXRpb25zICovCisjZGVmaW5lIE1BUF9BTk9OWU1PVVMJMHgwODAwCQkvKiBkb24ndCB1c2UgYSBmaWxlICovCisjZGVmaW5lIE1BUF9HUk9XU0RPV04JMHgxMDAwCQkvKiBzdGFjay1saWtlIHNlZ21lbnQgKi8KKyNkZWZpbmUgTUFQX0RFTllXUklURQkweDIwMDAJCS8qIEVUWFRCU1kgKi8KKyNkZWZpbmUgTUFQX0VYRUNVVEFCTEUJMHg0MDAwCQkvKiBtYXJrIGl0IGFzIGFuIGV4ZWN1dGFibGUgKi8KKyNkZWZpbmUgTUFQX0xPQ0tFRAkweDgwMDAJCS8qIHBhZ2VzIGFyZSBsb2NrZWQgKi8KKyNkZWZpbmUgTUFQX1BPUFVMQVRFCTB4MTAwMDAJCS8qIHBvcHVsYXRlIChwcmVmYXVsdCkgcGFnZXRhYmxlcyAqLworI2RlZmluZSBNQVBfTk9OQkxPQ0sJMHgyMDAwMAkJLyogZG8gbm90IGJsb2NrIG9uIElPICovCisKKy8qCisgKiBGbGFncyBmb3IgbXN5bmMKKyAqLworI2RlZmluZSBNU19BU1lOQwkweDAwMDEJCS8qIHN5bmMgbWVtb3J5IGFzeW5jaHJvbm91c2x5ICovCisjZGVmaW5lIE1TX0lOVkFMSURBVEUJMHgwMDAyCQkvKiBpbnZhbGlkYXRlIG1hcHBpbmdzICYgY2FjaGVzICovCisjZGVmaW5lIE1TX1NZTkMJCTB4MDAwNAkJLyogc3luY2hyb25vdXMgbWVtb3J5IHN5bmMgKi8KKworLyoKKyAqIEZsYWdzIGZvciBtbG9ja2FsbAorICovCisjZGVmaW5lIE1DTF9DVVJSRU5UCTEJCS8qIGxvY2sgYWxsIGN1cnJlbnQgbWFwcGluZ3MgKi8KKyNkZWZpbmUgTUNMX0ZVVFVSRQkyCQkvKiBsb2NrIGFsbCBmdXR1cmUgbWFwcGluZ3MgKi8KKworI2RlZmluZSBNQURWX05PUk1BTAkweDAJCS8qIGRlZmF1bHQgcGFnZS1pbiBiZWhhdmlvciAqLworI2RlZmluZSBNQURWX1JBTkRPTQkweDEJCS8qIHBhZ2UtaW4gbWluaW11bSByZXF1aXJlZCAqLworI2RlZmluZSBNQURWX1NFUVVFTlRJQUwJMHgyCQkvKiByZWFkLWFoZWFkIGFnZ3Jlc3NpdmVseSAqLworI2RlZmluZSBNQURWX1dJTExORUVECTB4MwkJLyogcHJlLWZhdWx0IHBhZ2VzICovCisjZGVmaW5lIE1BRFZfRE9OVE5FRUQJMHg0CQkvKiBkaXNjYXJkIHRoZXNlIHBhZ2VzICovCisKKy8qIGNvbXBhdGliaWxpdHkgZmxhZ3MgKi8KKyNkZWZpbmUgTUFQX0FOT04gICAgICAgTUFQX0FOT05ZTU9VUworI2RlZmluZSBNQVBfRklMRSAgICAgICAwCisKKyNlbmRpZiAvKiBfQVNNX01NQU5fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tbXUuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbW11LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA2M2VkZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbW11LmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fQVNNX01NVV9ICisjZGVmaW5lIF9fQVNNX01NVV9ICisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBtbV9jb250ZXh0X3RbTlJfQ1BVU107CisKKyNlbmRpZiAvKiBfX0FTTV9NTVVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tbXVfY29udGV4dC5oIGIvaW5jbHVkZS9hc20tbWlwcy9tbXVfY29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4Yjc3YzkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21tdV9jb250ZXh0LmgKQEAgLTAsMCArMSwxOTYgQEAKKy8qCisgKiBTd2l0Y2ggYSBNTVUgY29udGV4dC4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTkgYnkgUmFsZiBCYWVjaGxlCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgU2lsaWNvbiBHcmFwaGljcywgSW5jLgorICovCisjaWZuZGVmIF9BU01fTU1VX0NPTlRFWFRfSAorI2RlZmluZSBfQVNNX01NVV9DT05URVhUX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KKworLyoKKyAqIEZvciB0aGUgZmFzdCB0bGIgbWlzcyBoYW5kbGVycywgd2Uga2VlcCBhIHBlciBjcHUgYXJyYXkgb2YgcG9pbnRlcnMKKyAqIHRvIHRoZSBjdXJyZW50IHBnZCBmb3IgZWFjaCBwcm9jZXNzb3IuIEFsc28sIHRoZSBwcm9jLiBpZCBpcyBzdHVmZmVkCisgKiBpbnRvIHRoZSBjb250ZXh0IHJlZ2lzdGVyLgorICovCitleHRlcm4gdW5zaWduZWQgbG9uZyBwZ2RfY3VycmVudFtdOworCisjZGVmaW5lIFRMQk1JU1NfSEFORExFUl9TRVRVUF9QR0QocGdkKSBcCisJcGdkX2N1cnJlbnRbc21wX3Byb2Nlc3Nvcl9pZCgpXSA9ICh1bnNpZ25lZCBsb25nKShwZ2QpCisKKyNpZmRlZiBDT05GSUdfTUlQUzMyCisjZGVmaW5lIFRMQk1JU1NfSEFORExFUl9TRVRVUCgpCQkJCQkJXAorCXdyaXRlX2MwX2NvbnRleHQoKHVuc2lnbmVkIGxvbmcpIHNtcF9wcm9jZXNzb3JfaWQoKSA8PCAyMyk7CVwKKwlUTEJNSVNTX0hBTkRMRVJfU0VUVVBfUEdEKHN3YXBwZXJfcGdfZGlyKQorI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfTUlQUzY0KSAmJiAhZGVmaW5lZChDT05GSUdfQlVJTERfRUxGNjQpCisjZGVmaW5lIFRMQk1JU1NfSEFORExFUl9TRVRVUCgpCQkJCQkJXAorCXdyaXRlX2MwX2NvbnRleHQoKHVuc2lnbmVkIGxvbmcpICZwZ2RfY3VycmVudFtzbXBfcHJvY2Vzc29yX2lkKCldIDw8IDIzKTsgXAorCVRMQk1JU1NfSEFORExFUl9TRVRVUF9QR0Qoc3dhcHBlcl9wZ19kaXIpCisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19NSVBTNjQpICYmIGRlZmluZWQoQ09ORklHX0JVSUxEX0VMRjY0KQorI2RlZmluZSBUTEJNSVNTX0hBTkRMRVJfU0VUVVAoKQkJCQkJCVwKKwl3cml0ZV9jMF9jb250ZXh0KCh1bnNpZ25lZCBsb25nKSBzbXBfcHJvY2Vzc29yX2lkKCkgPDwgMjMpOwlcCisJVExCTUlTU19IQU5ETEVSX1NFVFVQX1BHRChzd2FwcGVyX3BnX2RpcikKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1IzMDAwKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfVFgzOVhYKQorCisjZGVmaW5lIEFTSURfSU5DCTB4NDAKKyNkZWZpbmUgQVNJRF9NQVNLCTB4ZmMwCisKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9SODAwMCkKKworI2RlZmluZSBBU0lEX0lOQwkweDEwCisjZGVmaW5lIEFTSURfTUFTSwkweGZmMAorCisjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfUk05MDAwKQorCisjZGVmaW5lIEFTSURfSU5DCTB4MQorI2RlZmluZSBBU0lEX01BU0sJMHhmZmYKKworI2Vsc2UgLyogRklYTUU6IG5vdCBjb3JyZWN0IGZvciBSNjAwMCAqLworCisjZGVmaW5lIEFTSURfSU5DCTB4MQorI2RlZmluZSBBU0lEX01BU0sJMHhmZgorCisjZW5kaWYKKworI2RlZmluZSBjcHVfY29udGV4dChjcHUsIG1tKQkoKG1tKS0+Y29udGV4dFtjcHVdKQorI2RlZmluZSBjcHVfYXNpZChjcHUsIG1tKQkoY3B1X2NvbnRleHQoKGNwdSksIChtbSkpICYgQVNJRF9NQVNLKQorI2RlZmluZSBhc2lkX2NhY2hlKGNwdSkJCShjcHVfZGF0YVtjcHVdLmFzaWRfY2FjaGUpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBlbnRlcl9sYXp5X3RsYihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7Cit9CisKKy8qCisgKiAgQWxsIHVudXNlZCBieSBoYXJkd2FyZSB1cHBlciBiaXRzIHdpbGwgYmUgY29uc2lkZXJlZAorICogIGFzIGEgc29mdHdhcmUgYXNpZCBleHRlbnNpb24uCisgKi8KKyNkZWZpbmUgQVNJRF9WRVJTSU9OX01BU0sgICgodW5zaWduZWQgbG9uZyl+KEFTSURfTUFTS3woQVNJRF9NQVNLLTEpKSkKKyNkZWZpbmUgQVNJRF9GSVJTVF9WRVJTSU9OICgodW5zaWduZWQgbG9uZykofkFTSURfVkVSU0lPTl9NQVNLKSArIDEpCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2V0X25ld19tbXVfY29udGV4dChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBjcHUpCit7CisJdW5zaWduZWQgbG9uZyBhc2lkID0gYXNpZF9jYWNoZShjcHUpOworCisJaWYgKCEgKChhc2lkICs9IEFTSURfSU5DKSAmIEFTSURfTUFTSykgKSB7CisJCWlmIChjcHVfaGFzX3Z0YWdfaWNhY2hlKQorCQkJZmx1c2hfaWNhY2hlX2FsbCgpOworCQlsb2NhbF9mbHVzaF90bGJfYWxsKCk7CS8qIHN0YXJ0IG5ldyBhc2lkIGN5Y2xlICovCisJCWlmICghYXNpZCkJCS8qIGZpeCB2ZXJzaW9uIGlmIG5lZWRlZCAqLworCQkJYXNpZCA9IEFTSURfRklSU1RfVkVSU0lPTjsKKwl9CisJY3B1X2NvbnRleHQoY3B1LCBtbSkgPSBhc2lkX2NhY2hlKGNwdSkgPSBhc2lkOworfQorCisvKgorICogSW5pdGlhbGl6ZSB0aGUgY29udGV4dCByZWxhdGVkIGluZm8gZm9yIGEgbmV3IG1tX3N0cnVjdAorICogaW5zdGFuY2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50Citpbml0X25ld19jb250ZXh0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fb25saW5lX2NwdXMoKTsgaSsrKQorCQljcHVfY29udGV4dChpLCBtbSkgPSAwOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzd2l0Y2hfbW0oc3RydWN0IG1tX3N0cnVjdCAqcHJldiwgc3RydWN0IG1tX3N0cnVjdCAqbmV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJdW5zaWduZWQgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJLyogQ2hlY2sgaWYgb3VyIEFTSUQgaXMgb2YgYW4gb2xkZXIgdmVyc2lvbiBhbmQgdGh1cyBpbnZhbGlkICovCisJaWYgKChjcHVfY29udGV4dChjcHUsIG5leHQpIF4gYXNpZF9jYWNoZShjcHUpKSAmIEFTSURfVkVSU0lPTl9NQVNLKQorCQlnZXRfbmV3X21tdV9jb250ZXh0KG5leHQsIGNwdSk7CisKKwl3cml0ZV9jMF9lbnRyeWhpKGNwdV9jb250ZXh0KGNwdSwgbmV4dCkpOworCVRMQk1JU1NfSEFORExFUl9TRVRVUF9QR0QobmV4dC0+cGdkKTsKKworCS8qCisJICogTWFyayBjdXJyZW50LT5hY3RpdmVfbW0gYXMgbm90ICJhY3RpdmUiIGFueW1vcmUuCisJICogV2UgZG9uJ3Qgd2FudCB0byBtaXNsZWFkIHBvc3NpYmxlIElQSSB0bGIgZmx1c2ggcm91dGluZXMuCisJICovCisJY3B1X2NsZWFyKGNwdSwgcHJldi0+Y3B1X3ZtX21hc2spOworCWNwdV9zZXQoY3B1LCBuZXh0LT5jcHVfdm1fbWFzayk7CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKKy8qCisgKiBEZXN0cm95IGNvbnRleHQgcmVsYXRlZCBpbmZvIGZvciBhbiBtbV9zdHJ1Y3QgdGhhdCBpcyBhYm91dAorICogdG8gYmUgcHV0IHRvIHJlc3QuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBkZXN0cm95X2NvbnRleHQoc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7Cit9CisKKyNkZWZpbmUgZGVhY3RpdmF0ZV9tbSh0c2ssbW0pCWRvIHsgfSB3aGlsZSAoMCkKKworLyoKKyAqIEFmdGVyIHdlIGhhdmUgc2V0IGN1cnJlbnQtPm1tIHRvIGEgbmV3IHZhbHVlLCB0aGlzIGFjdGl2YXRlcworICogdGhlIGNvbnRleHQgZm9yIHRoZSBuZXcgbW0gc28gd2Ugc2VlIHRoZSBuZXcgbWFwcGluZ3MuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorYWN0aXZhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqcHJldiwgc3RydWN0IG1tX3N0cnVjdCAqbmV4dCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwkvKiBVbmNvbmRpdGlvbmFsbHkgZ2V0IGEgbmV3IEFTSUQuICAqLworCWdldF9uZXdfbW11X2NvbnRleHQobmV4dCwgY3B1KTsKKworCXdyaXRlX2MwX2VudHJ5aGkoY3B1X2NvbnRleHQoY3B1LCBuZXh0KSk7CisJVExCTUlTU19IQU5ETEVSX1NFVFVQX1BHRChuZXh0LT5wZ2QpOworCisJLyogbWFyayBtbXUgb3duZXJzaGlwIGNoYW5nZSAqLworCWNwdV9jbGVhcihjcHUsIHByZXYtPmNwdV92bV9tYXNrKTsKKwljcHVfc2V0KGNwdSwgbmV4dC0+Y3B1X3ZtX21hc2spOworCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCisvKgorICogSWYgbW0gaXMgY3VycmVudGx5IGFjdGl2ZV9tbSwgd2UgY2FuJ3QgcmVhbGx5IGRyb3AgaXQuICBJbnN0ZWFkLAorICogd2Ugd2lsbCBnZXQgYSBuZXcgb25lIGZvciBpdC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCitkcm9wX21tdV9jb250ZXh0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBjcHUpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCWlmIChjcHVfaXNzZXQoY3B1LCBtbS0+Y3B1X3ZtX21hc2spKSAgeworCQlnZXRfbmV3X21tdV9jb250ZXh0KG1tLCBjcHUpOworCQl3cml0ZV9jMF9lbnRyeWhpKGNwdV9hc2lkKGNwdSwgbW0pKTsKKwl9IGVsc2UgeworCQkvKiB3aWxsIGdldCBhIG5ldyBjb250ZXh0IG5leHQgdGltZSAqLworCQljcHVfY29udGV4dChjcHUsIG1tKSA9IDA7CisJfQorCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCisjZW5kaWYgLyogX0FTTV9NTVVfQ09OVEVYVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21tem9uZS5oIGIvaW5jbHVkZS9hc20tbWlwcy9tbXpvbmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWVlMTNiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tbXpvbmUuaApAQCAtMCwwICsxLDM5IEBACisvKgorICogV3JpdHRlbiBieSBLYW5vaiBTYXJjYXIgKGthbm9qQHNnaS5jb20pIEF1ZyA5OQorICogUmV3cml0dGVuIGZvciBMaW51eCAyLjYgYnkgQ2hyaXN0b3BoIEhlbGx3aWcgKGhjaEBsc3QuZGUpIEphbiAyMDA0CisgKi8KKyNpZm5kZWYgX0FTTV9NTVpPTkVfSF8KKyNkZWZpbmUgX0FTTV9NTVpPTkVfSF8KKworI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8bW16b25lLmg+CisKKyNkZWZpbmUga3ZhZGRyX3RvX25pZChrdmFkZHIpCXBhX3RvX25pZChfX3BhKGt2YWRkcikpCisjZGVmaW5lIHBmbl90b19uaWQocGZuKQkJcGFfdG9fbmlkKChwZm4pIDw8IFBBR0VfU0hJRlQpCisKKyNkZWZpbmUgcGZuX3ZhbGlkKHBmbikJCQkJCQlcCisoewkJCQkJCQkJXAorIAl1bnNpZ25lZCBsb25nIF9fcGZuID0gKHBmbik7CQkJCVwKKyAJaW50IF9fbiA9IHBmbl90b19uaWQoX19wZm4pOwkJCQlcCisJKChfX24gPj0gMCkgPyAoX19wZm4gPCBOT0RFX0RBVEEoX19uKS0+bm9kZV9zdGFydF9wZm4gKwlcCisJCSAgICAgICBOT0RFX0RBVEEoX19uKS0+bm9kZV9zcGFubmVkX3BhZ2VzKSA6IDApO1wKK30pCisKKyNkZWZpbmUgcGZuX3RvX3BhZ2UocGZuKQkJCQkJXAorKHsJCQkJCQkJCVwKKyAJdW5zaWduZWQgbG9uZyBfX3BmbiA9IChwZm4pOwkJCQlcCisJcGdfZGF0YV90ICpfX3BnID0gTk9ERV9EQVRBKHBmbl90b19uaWQoX19wZm4pKTsJCVwKKwlfX3BnLT5ub2RlX21lbV9tYXAgKyAoX19wZm4gLSBfX3BnLT5ub2RlX3N0YXJ0X3Bmbik7CVwKK30pCisKKyNkZWZpbmUgcGFnZV90b19wZm4ocCkJCQkJCQlcCisoewkJCQkJCQkJXAorCXN0cnVjdCBwYWdlICpfX3AgPSAocCk7CQkJCQlcCisJc3RydWN0IHpvbmUgKl9feiA9IHBhZ2Vfem9uZShfX3ApOwkJCVwKKwkoKF9fcCAtIF9fei0+em9uZV9tZW1fbWFwKSArIF9fei0+em9uZV9zdGFydF9wZm4pOwlcCit9KQorCisvKiBYWFg6IEZJWE1FIC0tIHdsaSAqLworI2RlZmluZSBrZXJuX2FkZHJfdmFsaWQoYWRkcikJKDApCisKKyNlbmRpZiAvKiBfQVNNX01NWk9ORV9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tb2R1bGUuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbW9kdWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTBlZTI0YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbW9kdWxlLmgKQEAgLTAsMCArMSw1NiBAQAorI2lmbmRlZiBfQVNNX01PRFVMRV9ICisjZGVmaW5lIF9BU01fTU9EVUxFX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorCitzdHJ1Y3QgbW9kX2FyY2hfc3BlY2lmaWMgeworCS8qIERhdGEgQnVzIEVycm9yIGV4Y2VwdGlvbiB0YWJsZXMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGRiZV9saXN0OworCWNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmRiZV9zdGFydDsKKwljb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpkYmVfZW5kOworfTsKKwordHlwZWRlZiB1aW50OF90IEVsZjY0X0J5dGU7CQkvKiBUeXBlIGZvciBhIDgtYml0IHF1YW50aXR5LiAgKi8KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgRWxmNjRfQWRkciByX29mZnNldDsJCQkvKiBBZGRyZXNzIG9mIHJlbG9jYXRpb24uICAqLworICBFbGY2NF9Xb3JkIHJfc3ltOwkJCS8qIFN5bWJvbCBpbmRleC4gICovCisgIEVsZjY0X0J5dGUgcl9zc3ltOwkJCS8qIFNwZWNpYWwgc3ltYm9sLiAgKi8KKyAgRWxmNjRfQnl0ZSByX3R5cGUzOwkJCS8qIFRoaXJkIHJlbG9jYXRpb24uICAqLworICBFbGY2NF9CeXRlIHJfdHlwZTI7CQkJLyogU2Vjb25kIHJlbG9jYXRpb24uICAqLworICBFbGY2NF9CeXRlIHJfdHlwZTsJCQkvKiBGaXJzdCByZWxvY2F0aW9uLiAgKi8KKyAgRWxmNjRfU3h3b3JkIHJfYWRkZW5kOwkJLyogQWRkZW5kLiAgKi8KK30gRWxmNjRfTWlwc19SZWxhOworCisjaWZkZWYgQ09ORklHX01JUFMzMgorCisjZGVmaW5lIEVsZl9TaGRyCUVsZjMyX1NoZHIKKyNkZWZpbmUgRWxmX1N5bQkJRWxmMzJfU3ltCisjZGVmaW5lIEVsZl9FaGRyCUVsZjMyX0VoZHIKKworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUlQUzY0CisKKyNkZWZpbmUgRWxmX1NoZHIJRWxmNjRfU2hkcgorI2RlZmluZSBFbGZfU3ltCQlFbGY2NF9TeW0KKyNkZWZpbmUgRWxmX0VoZHIJRWxmNjRfRWhkcgorCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NT0RVTEVTCisvKiBHaXZlbiBhbiBhZGRyZXNzLCBsb29rIGZvciBpdCBpbiB0aGUgZXhjZXB0aW9uIHRhYmxlcy4gKi8KK2NvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkqc2VhcmNoX21vZHVsZV9kYmV0YWJsZXModW5zaWduZWQgbG9uZyBhZGRyKTsKKyNlbHNlCisvKiBHaXZlbiBhbiBhZGRyZXNzLCBsb29rIGZvciBpdCBpbiB0aGUgZXhjZXB0aW9uIHRhYmxlcy4gKi8KK3N0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqCitzZWFyY2hfbW9kdWxlX2RiZXRhYmxlcyh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9BU01fTU9EVUxFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbXNjMDFfaWMuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbXNjMDFfaWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGYxNzIwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tc2MwMV9pYy5oCkBAIC0wLDAgKzEsMTUxIEBACisvKgorICogUENJIFJlZ2lzdGVyIGRlZmluaXRpb25zIGZvciB0aGUgTUlQUyBTeXN0ZW0gQ29udHJvbGxlci4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0FTTV9NSVBTX0JPQVJEU19NU0MwMV9JQ19ICisjZGVmaW5lIF9fQVNNX01JUFNfQk9BUkRTX01TQzAxX0lDX0gKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSZWdpc3RlciBvZmZzZXQgYWRkcmVzc2VzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgTVNDMDFfSUNfUlNUX09GUyAgICAgMHgwMDAwOCAgICAvKiBTb2Z0d2FyZSByZXNldCAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTVNDMDFfSUNfRU5BTF9PRlMgICAgMHgwMDEwMCAgICAvKiBJbnRfaW4gZW5hYmxlIG1hc2sgMzE6MCAgICAgKi8KKyNkZWZpbmUgTVNDMDFfSUNfRU5BSF9PRlMgICAgMHgwMDEwOCAgICAvKiBJbnRfaW4gZW5hYmxlIG1hc2sgNjM6MzIgICAgKi8KKyNkZWZpbmUgTVNDMDFfSUNfRElTTF9PRlMgICAgMHgwMDEyMCAgICAvKiBJbnRfaW4gZGlzYWJsZSBtYXNrIDMxOjAgICAgKi8KKyNkZWZpbmUgTVNDMDFfSUNfRElTSF9PRlMgICAgMHgwMDEyOCAgICAvKiBJbnRfaW4gZGlzYWJsZSBtYXNrIDYzOjMyICAgKi8KKyNkZWZpbmUgTVNDMDFfSUNfSVNCTF9PRlMgICAgMHgwMDE0MCAgICAvKiBSYXcgaW50X2luIDMxOjAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTVNDMDFfSUNfSVNCSF9PRlMgICAgMHgwMDE0OCAgICAvKiBSYXcgaW50X2luIDYzOjMyICAgICAgICAgICAgKi8KKyNkZWZpbmUgTVNDMDFfSUNfSVNBTF9PRlMgICAgMHgwMDE2MCAgICAvKiBNYXNrZWQgaW50X2luIDMxOjAgICAgICAgICAgKi8KKyNkZWZpbmUgTVNDMDFfSUNfSVNBSF9PRlMgICAgMHgwMDE2OCAgICAvKiBNYXNrZWQgaW50X2luIDYzOjMyICAgICAgICAgKi8KKyNkZWZpbmUgTVNDMDFfSUNfTFZMX09GUyAgICAgMHgwMDE4MCAgICAvKiBEaXNhYmxlIHByaW9yaXR5IGludF9vdXQgICAgKi8KKyNkZWZpbmUgTVNDMDFfSUNfUkFNV19PRlMgICAgMHgwMDE4MCAgICAvKiBTaGFkb3cgc2V0IFJBTSAoRUkpCSAgICAgICAqLworI2RlZmluZSBNU0MwMV9JQ19PU0JfT0ZTICAgICAweDAwMTg4ICAgIC8qIFJhdyBpbnRfb3V0ICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBNU0MwMV9JQ19PU0FfT0ZTICAgICAweDAwMTkwICAgIC8qIE1hc2tlZCBpbnRfb3V0ICAgICAgICAgICAgICAqLworI2RlZmluZSBNU0MwMV9JQ19HRU5BX09GUyAgICAweDAwMTk4ICAgIC8qIEdsb2JhbCBIVyBpbnQgZW5hYmxlICAgICAgICAqLworI2RlZmluZSBNU0MwMV9JQ19CQVNFX09GUyAgICAweDAwMWEwICAgIC8qIEJhc2UgYWRkcmVzcyBvZiBJQ19WRUMgICAgICAqLworI2RlZmluZSBNU0MwMV9JQ19WRUNfT0ZTICAgICAweDAwMWIwICAgIC8qIEFjdGl2ZSBpbnQncyB2ZWN0b3IgYWRkcmVzcyAqLworI2RlZmluZSBNU0MwMV9JQ19FT0lfT0ZTICAgICAweDAwMWMwICAgIC8qIEVuYWJsZSBsb3dlciBsZXZlbCBpbnRzICAgICAqLworI2RlZmluZSBNU0MwMV9JQ19DRkdfT0ZTICAgICAweDAwMWM4ICAgIC8qIENvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgICAgICAqLworI2RlZmluZSBNU0MwMV9JQ19UUkxEX09GUyAgICAweDAwMWQwICAgIC8qIEludGVydmFsIHRpbWVyIHJlbG9hZCB2YWwgICAqLworI2RlZmluZSBNU0MwMV9JQ19UVkFMX09GUyAgICAweDAwMWUwICAgIC8qIEludGVydmFsIHRpbWVyIGN1cnJlbnQgdmFsICAqLworI2RlZmluZSBNU0MwMV9JQ19UQ0ZHX09GUyAgICAweDAwMWYwICAgIC8qIEludGVydmFsIHRpbWVyIGNvbmZpZyAgICAgICAqLworI2RlZmluZSBNU0MwMV9JQ19TVVBfT0ZTICAgICAweDAwMjAwICAgIC8qIFNldCB1cCBpbnRfaW4gbGluZSAwICAgICAgICAqLworI2RlZmluZSBNU0MwMV9JQ19FTkFfT0ZTICAgICAweDAwODAwICAgIC8qIEludF9pbiBlbmFibGUgbWFzayA2MzowICAgICAqLworI2RlZmluZSBNU0MwMV9JQ19ESVNfT0ZTICAgICAweDAwODIwICAgIC8qIEludF9pbiBkaXNhYmxlIG1hc2sgNjM6MCAgICAqLworI2RlZmluZSBNU0MwMV9JQ19JU0JfT0ZTICAgICAweDAwODQwICAgIC8qIFJhdyBpbnRfaW4gNjM6MCAgICAgICAgICAgICAqLworI2RlZmluZSBNU0MwMV9JQ19JU0FfT0ZTICAgICAweDAwODYwICAgIC8qIE1hc2tlZCBpbnRfaW4gNjM6MCAgICAgICAgICAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJlZ2lzdGVyIGZpZWxkIGVuY29kaW5ncworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIE1TQzAxX0lDX1JTVF9SU1RfU0hGICAgICAgMAorI2RlZmluZSBNU0MwMV9JQ19SU1RfUlNUX01TSyAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgTVNDMDFfSUNfUlNUX1JTVF9CSVQgICAgICBNU0MwMV9JQ19SU1RfUlNUX01TSworI2RlZmluZSBNU0MwMV9JQ19MVkxfTFZMX1NIRiAgICAgIDAKKyNkZWZpbmUgTVNDMDFfSUNfTFZMX0xWTF9NU0sgICAgICAweDAwMDAwMGZmCisjZGVmaW5lIE1TQzAxX0lDX0xWTF9TUFVSX1NIRiAgICAgMTYKKyNkZWZpbmUgTVNDMDFfSUNfTFZMX1NQVVJfTVNLICAgICAweDAwMDEwMDAwCisjZGVmaW5lIE1TQzAxX0lDX0xWTF9TUFVSX0JJVCAgICAgTVNDMDFfSUNfTFZMX1NQVVJfTVNLCisjZGVmaW5lIE1TQzAxX0lDX1JBTVdfUklQTF9TSEYJICAwCisjZGVmaW5lIE1TQzAxX0lDX1JBTVdfUklQTF9NU0sJICAweDAwMDAwMDNmCisjZGVmaW5lIE1TQzAxX0lDX1JBTVdfREFUQV9TSEYJICA2CisjZGVmaW5lIE1TQzAxX0lDX1JBTVdfREFUQV9NU0sJICAweDAwMDAwZmMwCisjZGVmaW5lIE1TQzAxX0lDX1JBTVdfQUREUl9TSEYJICAyNQorI2RlZmluZSBNU0MwMV9JQ19SQU1XX0FERFJfTVNLCSAgMHg3ZTAwMDAwMAorI2RlZmluZSBNU0MwMV9JQ19SQU1XX1JFQURfU0hGCSAgMzEKKyNkZWZpbmUgTVNDMDFfSUNfUkFNV19SRUFEX01TSwkgIDB4ODAwMDAwMDAKKyNkZWZpbmUgTVNDMDFfSUNfUkFNV19SRUFEX0JJVAkgIE1TQzAxX0lDX1JBTVdfUkVBRF9NU0sKKyNkZWZpbmUgTVNDMDFfSUNfT1NCX09TQl9TSEYgICAgICAwCisjZGVmaW5lIE1TQzAxX0lDX09TQl9PU0JfTVNLICAgICAgMHgwMDAwMDBmZgorI2RlZmluZSBNU0MwMV9JQ19PU0FfT1NBX1NIRiAgICAgIDAKKyNkZWZpbmUgTVNDMDFfSUNfT1NBX09TQV9NU0sgICAgICAweDAwMDAwMGZmCisjZGVmaW5lIE1TQzAxX0lDX0dFTkFfR0VOQV9TSEYgICAgMAorI2RlZmluZSBNU0MwMV9JQ19HRU5BX0dFTkFfTVNLICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgTVNDMDFfSUNfR0VOQV9HRU5BX0JJVCAgICBNU0MwMV9JQ19HRU5BX0dFTkFfTVNLCisjZGVmaW5lIE1TQzAxX0lDX0NGR19ESVNfU0hGICAgICAgMAorI2RlZmluZSBNU0MwMV9JQ19DRkdfRElTX01TSyAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgTVNDMDFfSUNfQ0ZHX0RJU19CSVQgICAgICBNU0MwMV9JQ19DRkdfRElTX01TSworI2RlZmluZSBNU0MwMV9JQ19DRkdfU0hGVF9TSEYgICAgIDgKKyNkZWZpbmUgTVNDMDFfSUNfQ0ZHX1NIRlRfTVNLICAgICAweDAwMDAwZjAwCisjZGVmaW5lIE1TQzAxX0lDX1RDRkdfRU5BX1NIRiAgICAgMAorI2RlZmluZSBNU0MwMV9JQ19UQ0ZHX0VOQV9NU0sgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgTVNDMDFfSUNfVENGR19FTkFfQklUICAgICBNU0MwMV9JQ19UQ0ZHX0VOQV9NU0sKKyNkZWZpbmUgTVNDMDFfSUNfVENGR19JTlRfU0hGICAgICA4CisjZGVmaW5lIE1TQzAxX0lDX1RDRkdfSU5UX01TSyAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBNU0MwMV9JQ19UQ0ZHX0lOVF9CSVQgICAgIE1TQzAxX0lDX1RDRkdfSU5UX01TSworI2RlZmluZSBNU0MwMV9JQ19UQ0ZHX0VER0VfU0hGICAgIDE2CisjZGVmaW5lIE1TQzAxX0lDX1RDRkdfRURHRV9NU0sgICAgMHgwMDAxMDAwMAorI2RlZmluZSBNU0MwMV9JQ19UQ0ZHX0VER0VfQklUICAgIE1TQzAxX0lDX1RDRkdfRURHRV9NU0sKKyNkZWZpbmUgTVNDMDFfSUNfU1VQX1BSSV9TSEYgICAgICAwCisjZGVmaW5lIE1TQzAxX0lDX1NVUF9QUklfTVNLICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBNU0MwMV9JQ19TVVBfRURHRV9TSEYgICAgIDgKKyNkZWZpbmUgTVNDMDFfSUNfU1VQX0VER0VfTVNLICAgICAweDAwMDAwMTAwCisjZGVmaW5lIE1TQzAxX0lDX1NVUF9FREdFX0JJVCAgICAgTVNDMDFfSUNfU1VQX0VER0VfTVNLCisjZGVmaW5lIE1TQzAxX0lDX1NVUF9TVEVQICAgICAgICAgOAorCisvKgorICogTUlQUyBTeXN0ZW0gY29udHJvbGxlciBpbnRlcnJ1cHQgcmVnaXN0ZXIgYmFzZS4KKyAqCisgKiBGSVhNRSAtIGFyZSB0aGVzZSBtYWNyb3Mgc3BlY2lmaWMgdG8gTWFsdGEgYW5kIGNvIG9yIHRvIHRoZSBNU0M/ICBJZiB0aGUKKyAqIGxhdHRlciwgdGhleSBzaG91bGQgYmUgbW92ZWQgZWxzZXdoZXJlLgorICovCisjZGVmaW5lIE1JUFNfTVNDMDFfSUNfUkVHX0JBU0UJMHgxYmM0MDAwMAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEFic29sdXRlIHJlZ2lzdGVyIGFkZHJlc3NlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIE1TQzAxX0lDX1JTVCAgICAgKE1TQzAxX0lDX1JFR19CQVNFICsgTVNDMDFfSUNfUlNUX09GUykKKyNkZWZpbmUgTVNDMDFfSUNfRU5BTCAgICAoTVNDMDFfSUNfUkVHX0JBU0UgKyBNU0MwMV9JQ19FTkFMX09GUykKKyNkZWZpbmUgTVNDMDFfSUNfRU5BSCAgICAoTVNDMDFfSUNfUkVHX0JBU0UgKyBNU0MwMV9JQ19FTkFIX09GUykKKyNkZWZpbmUgTVNDMDFfSUNfRElTTCAgICAoTVNDMDFfSUNfUkVHX0JBU0UgKyBNU0MwMV9JQ19ESVNMX09GUykKKyNkZWZpbmUgTVNDMDFfSUNfRElTSCAgICAoTVNDMDFfSUNfUkVHX0JBU0UgKyBNU0MwMV9JQ19ESVNIX09GUykKKyNkZWZpbmUgTVNDMDFfSUNfSVNCTCAgICAoTVNDMDFfSUNfUkVHX0JBU0UgKyBNU0MwMV9JQ19JU0JMX09GUykKKyNkZWZpbmUgTVNDMDFfSUNfSVNCSCAgICAoTVNDMDFfSUNfUkVHX0JBU0UgKyBNU0MwMV9JQ19JU0JIX09GUykKKyNkZWZpbmUgTVNDMDFfSUNfSVNBTCAgICAoTVNDMDFfSUNfUkVHX0JBU0UgKyBNU0MwMV9JQ19JU0FMX09GUykKKyNkZWZpbmUgTVNDMDFfSUNfSVNBSCAgICAoTVNDMDFfSUNfUkVHX0JBU0UgKyBNU0MwMV9JQ19JU0FIX09GUykKKyNkZWZpbmUgTVNDMDFfSUNfTFZMICAgICAoTVNDMDFfSUNfUkVHX0JBU0UgKyBNU0MwMV9JQ19MVkxfT0ZTKQorI2RlZmluZSBNU0MwMV9JQ19SQU1XICAgIChNU0MwMV9JQ19SRUdfQkFTRSArIE1TQzAxX0lDX1JBTVdfT0ZTKQorI2RlZmluZSBNU0MwMV9JQ19PU0IgICAgIChNU0MwMV9JQ19SRUdfQkFTRSArIE1TQzAxX0lDX09TQl9PRlMpCisjZGVmaW5lIE1TQzAxX0lDX09TQSAgICAgKE1TQzAxX0lDX1JFR19CQVNFICsgTVNDMDFfSUNfT1NBX09GUykKKyNkZWZpbmUgTVNDMDFfSUNfR0VOQSAgICAoTVNDMDFfSUNfUkVHX0JBU0UgKyBNU0MwMV9JQ19HRU5BX09GUykKKyNkZWZpbmUgTVNDMDFfSUNfQkFTRSAgICAoTVNDMDFfSUNfUkVHX0JBU0UgKyBNU0MwMV9JQ19CQVNFX09GUykKKyNkZWZpbmUgTVNDMDFfSUNfVkVDICAgICAoTVNDMDFfSUNfUkVHX0JBU0UgKyBNU0MwMV9JQ19WRUNfT0ZTKQorI2RlZmluZSBNU0MwMV9JQ19FT0kgICAgIChNU0MwMV9JQ19SRUdfQkFTRSArIE1TQzAxX0lDX0VPSV9PRlMpCisjZGVmaW5lIE1TQzAxX0lDX0NGRyAgICAgKE1TQzAxX0lDX1JFR19CQVNFICsgTVNDMDFfSUNfQ0ZHX09GUykKKyNkZWZpbmUgTVNDMDFfSUNfVFJMRCAgICAoTVNDMDFfSUNfUkVHX0JBU0UgKyBNU0MwMV9JQ19UUkxEX09GUykKKyNkZWZpbmUgTVNDMDFfSUNfVFZBTCAgICAoTVNDMDFfSUNfUkVHX0JBU0UgKyBNU0MwMV9JQ19UVkFMX09GUykKKyNkZWZpbmUgTVNDMDFfSUNfVENGRyAgICAoTVNDMDFfSUNfUkVHX0JBU0UgKyBNU0MwMV9JQ19UQ0ZHX09GUykKKyNkZWZpbmUgTVNDMDFfSUNfU1VQICAgICAoTVNDMDFfSUNfUkVHX0JBU0UgKyBNU0MwMV9JQ19TVVBfT0ZTKQorI2RlZmluZSBNU0MwMV9JQ19FTkEgICAgIChNU0MwMV9JQ19SRUdfQkFTRSArIE1TQzAxX0lDX0VOQV9PRlMpCisjZGVmaW5lIE1TQzAxX0lDX0RJUyAgICAgKE1TQzAxX0lDX1JFR19CQVNFICsgTVNDMDFfSUNfRElTX09GUykKKyNkZWZpbmUgTVNDMDFfSUNfSVNCICAgICAoTVNDMDFfSUNfUkVHX0JBU0UgKyBNU0MwMV9JQ19JU0JfT0ZTKQorI2RlZmluZSBNU0MwMV9JQ19JU0EgICAgIChNU0MwMV9JQ19SRUdfQkFTRSArIE1TQzAxX0lDX0lTQV9PRlMpCisKKy8qCisgKiBTb2MtaXQgaW50ZXJydXB0cyBhcmUgY29uZmlndXJhYmxlLgorICogRXZlcnkgYm9hcmQgZGVzY3JpYmVzIGl0cyBJUlEgbWFwcGluZyB3aXRoIHRoaXMgdGFibGUuCisgKi8KK3R5cGVkZWYgc3RydWN0IG1zY19pcnFtYXAgeworCWludAlpbV9pcnE7CisJaW50CWltX3R5cGU7CisJaW50CWltX2x2bDsKK30gbXNjX2lycW1hcF90OworCisvKiBpbV90eXBlICovCisjZGVmaW5lIE1TQzAxX0lSUV9MRVZFTAkJMAorI2RlZmluZSBNU0MwMV9JUlFfRURHRQkJMQorCitleHRlcm4gdm9pZCBfX2luaXQgaW5pdF9tc2NfaXJxcyh1bnNpZ25lZCBpbnQgYmFzZSwgbXNjX2lycW1hcF90ICppbXAsIGludCBuaXJxKTsKK2V4dGVybiB2b2lkIGxsX21zY19pcnEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCisjZW5kaWYgLyogX19BU01fTUlQU19CT0FSRFNfTVNDMDFfSUNfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21zZ2J1Zi5oIGIvaW5jbHVkZS9hc20tbWlwcy9tc2didWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTNiMjgyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tc2didWYuaApAQCAtMCwwICsxLDQ4IEBACisjaWZuZGVmIF9BU01fTVNHQlVGX0gKKyNkZWZpbmUgX0FTTV9NU0dCVUZfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKy8qCisgKiBUaGUgbXNxaWQ2NF9kcyBzdHJ1Y3R1cmUgZm9yIHRoZSBNSVBTIGFyY2hpdGVjdHVyZS4KKyAqIE5vdGUgZXh0cmEgcGFkZGluZyBiZWNhdXNlIHRoaXMgc3RydWN0dXJlIGlzIHBhc3NlZCBiYWNrIGFuZCBmb3J0aAorICogYmV0d2VlbiBrZXJuZWwgYW5kIHVzZXIgc3BhY2UuCisgKgorICogUGFkIHNwYWNlIGlzIGxlZnQgZm9yOgorICogLSBleHRlbnNpb24gb2YgdGltZV90IHRvIDY0LWJpdCBvbiAzMi1iaXRzeXN0ZW0gdG8gc29sdmUgdGhlIHkyMDM4IHByb2JsZW0KKyAqIC0gMiBtaXNjZWxsYW5lb3VzIHVuc2lnbmVkIGxvbmcgdmFsdWVzCisgKi8KKworc3RydWN0IG1zcWlkNjRfZHMgeworCXN0cnVjdCBpcGM2NF9wZXJtIG1zZ19wZXJtOworI2lmIGRlZmluZWQoQ09ORklHX01JUFMzMikgJiYgIWRlZmluZWQoQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOKQorCXVuc2lnbmVkIGxvbmcJX191bnVzZWQxOworI2VuZGlmCisJX19rZXJuZWxfdGltZV90IG1zZ19zdGltZTsJLyogbGFzdCBtc2dzbmQgdGltZSAqLworI2lmIGRlZmluZWQoQ09ORklHX01JUFMzMikgJiYgZGVmaW5lZChDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU4pCisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDE7CisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19NSVBTMzIpICYmICFkZWZpbmVkKENPTkZJR19DUFVfTElUVExFX0VORElBTikKKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkMjsKKyNlbmRpZgorCV9fa2VybmVsX3RpbWVfdCBtc2dfcnRpbWU7CS8qIGxhc3QgbXNncmN2IHRpbWUgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19NSVBTMzIpICYmIGRlZmluZWQoQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOKQorCXVuc2lnbmVkIGxvbmcJX191bnVzZWQyOworI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfTUlQUzMyKSAmJiAhZGVmaW5lZChDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU4pCisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDM7CisjZW5kaWYKKwlfX2tlcm5lbF90aW1lX3QgbXNnX2N0aW1lOwkvKiBsYXN0IGNoYW5nZSB0aW1lICovCisjaWYgZGVmaW5lZChDT05GSUdfTUlQUzMyKSAmJiBkZWZpbmVkKENPTkZJR19DUFVfTElUVExFX0VORElBTikKKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkMzsKKyNlbmRpZgorCXVuc2lnbmVkIGxvbmcgIG1zZ19jYnl0ZXM7CS8qIGN1cnJlbnQgbnVtYmVyIG9mIGJ5dGVzIG9uIHF1ZXVlICovCisJdW5zaWduZWQgbG9uZyAgbXNnX3FudW07CS8qIG51bWJlciBvZiBtZXNzYWdlcyBpbiBxdWV1ZSAqLworCXVuc2lnbmVkIGxvbmcgIG1zZ19xYnl0ZXM7CS8qIG1heCBudW1iZXIgb2YgYnl0ZXMgb24gcXVldWUgKi8KKwlfX2tlcm5lbF9waWRfdCBtc2dfbHNwaWQ7CS8qIHBpZCBvZiBsYXN0IG1zZ3NuZCAqLworCV9fa2VybmVsX3BpZF90IG1zZ19scnBpZDsJLyogbGFzdCByZWNlaXZlIHBpZCAqLworCXVuc2lnbmVkIGxvbmcgIF9fdW51c2VkNDsKKwl1bnNpZ25lZCBsb25nICBfX3VudXNlZDU7Cit9OworCisjZW5kaWYgLyogX0FTTV9NU0dCVUZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9uYW1laS5oIGIvaW5jbHVkZS9hc20tbWlwcy9uYW1laS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NGQxMmQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL25hbWVpLmgKQEAgLTAsMCArMSwyNiBAQAorI2lmbmRlZiBfQVNNX05BTUVJX0gKKyNkZWZpbmUgX0FTTV9OQU1FSV9ICisKKyNpbmNsdWRlIDxsaW51eC9wZXJzb25hbGl0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgorCisjZGVmaW5lIElSSVhfRU1VTAkiL3Vzci9nbmVtdWwvaXJpeC8iCisjZGVmaW5lIFJJU0NPU19FTVVMCSIvdXNyL2duZW11bC9yaXNjb3MvIgorCitzdGF0aWMgaW5saW5lIGNoYXIgKl9fZW11bF9wcmVmaXgodm9pZCkKK3sKKwlzd2l0Y2ggKGN1cnJlbnQtPnBlcnNvbmFsaXR5KSB7CisJY2FzZSBQRVJfSVJJWDMyOgorCWNhc2UgUEVSX0lSSVhOMzI6CisJY2FzZSBQRVJfSVJJWDY0OgorCQlyZXR1cm4gSVJJWF9FTVVMOworCisJY2FzZSBQRVJfUklTQ09TOgorCQlyZXR1cm4gUklTQ09TX0VNVUw7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gTlVMTDsKKwl9Cit9CisKKyNlbmRpZiAvKiBfQVNNX05BTUVJX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbmlsZTQuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbmlsZTQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2NhOTU5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9uaWxlNC5oCkBAIC0wLDAgKzEsMzEwIEBACisvKgorICogIGFzbS1taXBzL25pbGU0LmggLS0gTkVDIFZyYy01MDc0IE5pbGUgNCBkZWZpbml0aW9ucworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDAgR2VlcnQgVXl0dGVyaG9ldmVuIDxnZWVydEBzb255Y29tLmNvbT4KKyAqICAgICAgICAgICAgICAgICAgICAgU29ueSBTb2Z0d2FyZSBEZXZlbG9wbWVudCBDZW50ZXIgRXVyb3BlIChTRENFKSwgQnJ1c3NlbHMKKyAqCisgKiAgVGhpcyBmaWxlIGlzIGJhc2VkIG9uIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRhdGlvbjoKKyAqCisgKglORUMgVnJjIDUwNzQgU3lzdGVtIENvbnRyb2xsZXIgRGF0YSBTaGVldCwgSnVuZSAxOTk4CisgKi8KKworI2lmbmRlZiBfQVNNX05JTEU0X0gKKyNkZWZpbmUgX0FTTV9OSUxFNF9ICisKKyNkZWZpbmUgTklMRTRfQkFTRQkJMHhiZmEwMDAwMAorI2RlZmluZSBOSUxFNF9TSVpFCQkweDAwMjAwMDAwCQkvKiAyIE1CICovCisKKworICAgIC8qCisgICAgICogIFBoeXNpY2FsIERldmljZSBBZGRyZXNzIFJlZ2lzdGVycyAoUERBUnMpCisgICAgICovCisKKyNkZWZpbmUgTklMRTRfU0RSQU0wCTB4MDAwMAkvKiBTRFJBTSBCYW5rIDAgW1IvV10gKi8KKyNkZWZpbmUgTklMRTRfU0RSQU0xCTB4MDAwOAkvKiBTRFJBTSBCYW5rIDEgW1IvV10gKi8KKyNkZWZpbmUgTklMRTRfRENTMgkweDAwMTAJLyogRGV2aWNlIENoaXAtU2VsZWN0IDIgW1IvV10gKi8KKyNkZWZpbmUgTklMRTRfRENTMwkweDAwMTgJLyogRGV2aWNlIENoaXAtU2VsZWN0IDMgW1IvV10gKi8KKyNkZWZpbmUgTklMRTRfRENTNAkweDAwMjAJLyogRGV2aWNlIENoaXAtU2VsZWN0IDQgW1IvV10gKi8KKyNkZWZpbmUgTklMRTRfRENTNQkweDAwMjgJLyogRGV2aWNlIENoaXAtU2VsZWN0IDUgW1IvV10gKi8KKyNkZWZpbmUgTklMRTRfRENTNgkweDAwMzAJLyogRGV2aWNlIENoaXAtU2VsZWN0IDYgW1IvV10gKi8KKyNkZWZpbmUgTklMRTRfRENTNwkweDAwMzgJLyogRGV2aWNlIENoaXAtU2VsZWN0IDcgW1IvV10gKi8KKyNkZWZpbmUgTklMRTRfRENTOAkweDAwNDAJLyogRGV2aWNlIENoaXAtU2VsZWN0IDggW1IvV10gKi8KKyNkZWZpbmUgTklMRTRfUENJVzAJMHgwMDYwCS8qIFBDSSBBZGRyZXNzIFdpbmRvdyAwIFtSL1ddICovCisjZGVmaW5lIE5JTEU0X1BDSVcxCTB4MDA2OAkvKiBQQ0kgQWRkcmVzcyBXaW5kb3cgMSBbUi9XXSAqLworI2RlZmluZSBOSUxFNF9JTlRDUwkweDAwNzAJLyogQ29udHJvbGxlciBJbnRlcm5hbCBSZWdpc3RlcnMgYW5kIERldmljZXMgKi8KKwkJCQkvKiBbUi9XXSAqLworI2RlZmluZSBOSUxFNF9CT09UQ1MJMHgwMDc4CS8qIEJvb3QgUk9NIENoaXAtU2VsZWN0IFtSL1ddICovCisKKworICAgIC8qCisgICAgICogIENQVSBJbnRlcmZhY2UgUmVnaXN0ZXJzCisgICAgICovCisKKyNkZWZpbmUgTklMRTRfQ1BVU1RBVAkweDAwODAJLyogQ1BVIFN0YXR1cyBbUi9XXSAqLworI2RlZmluZSBOSUxFNF9JTlRDVFJMCTB4MDA4OAkvKiBJbnRlcnJ1cHQgQ29udHJvbCBbUi9XXSAqLworI2RlZmluZSBOSUxFNF9JTlRTVEFUMAkweDAwOTAJLyogSW50ZXJydXB0IFN0YXR1cyAwIFtSXSAqLworI2RlZmluZSBOSUxFNF9JTlRTVEFUMQkweDAwOTgJLyogSW50ZXJydXB0IFN0YXR1cyAxIGFuZCBDUFUgSW50ZXJydXB0ICovCisJCQkJLyogRW5hYmxlIFtSL1ddICovCisjZGVmaW5lIE5JTEU0X0lOVENMUgkweDAwQTAJLyogSW50ZXJydXB0IENsZWFyIFtSL1ddICovCisjZGVmaW5lIE5JTEU0X0lOVFBQRVMJMHgwMEE4CS8qIFBDSSBJbnRlcnJ1cHQgQ29udHJvbCBbUi9XXSAqLworCisKKyAgICAvKgorICAgICAqICBNZW1vcnktSW50ZXJmYWNlIFJlZ2lzdGVycworICAgICAqLworCisjZGVmaW5lIE5JTEU0X01FTUNUUkwJMHgwMEMwCS8qIE1lbW9yeSBDb250cm9sICovCisjZGVmaW5lIE5JTEU0X0FDU1RJTUUJMHgwMEM4CS8qIE1lbW9yeSBBY2Nlc3MgVGltaW5nIFtSL1ddICovCisjZGVmaW5lIE5JTEU0X0NIS0VSUgkweDAwRDAJLyogTWVtb3J5IENoZWNrIEVycm9yIFN0YXR1cyBbUl0gKi8KKworCisgICAgLyoKKyAgICAgKiAgUENJLUJ1cyBSZWdpc3RlcnMKKyAgICAgKi8KKworI2RlZmluZSBOSUxFNF9QQ0lDVFJMCTB4MDBFMAkvKiBQQ0kgQ29udHJvbCBbUi9XXSAqLworI2RlZmluZSBOSUxFNF9QQ0lBUkIJMHgwMEU4CS8qIFBDSSBBcmJpdGVyIFtSL1ddICovCisjZGVmaW5lIE5JTEU0X1BDSUlOSVQwCTB4MDBGMAkvKiBQQ0kgTWFzdGVyIChJbml0aWF0b3IpIDAgW1IvV10gKi8KKyNkZWZpbmUgTklMRTRfUENJSU5JVDEJMHgwMEY4CS8qIFBDSSBNYXN0ZXIgKEluaXRpYXRvcikgMSBbUi9XXSAqLworI2RlZmluZSBOSUxFNF9QQ0lFUlIJMHgwMEI4CS8qIFBDSSBFcnJvciBbUi9XXSAqLworCisKKyAgICAvKgorICAgICAqICBMb2NhbC1CdXMgUmVnaXN0ZXJzCisgICAgICovCisKKyNkZWZpbmUgTklMRTRfTENORkcJMHgwMTAwCS8qIExvY2FsIEJ1cyBDb25maWd1cmF0aW9uIFtSL1ddICovCisjZGVmaW5lIE5JTEU0X0xDU1QyCTB4MDExMAkvKiBMb2NhbCBCdXMgQ2hpcC1TZWxlY3QgVGltaW5nIDIgW1IvV10gKi8KKyNkZWZpbmUgTklMRTRfTENTVDMJMHgwMTE4CS8qIExvY2FsIEJ1cyBDaGlwLVNlbGVjdCBUaW1pbmcgMyBbUi9XXSAqLworI2RlZmluZSBOSUxFNF9MQ1NUNAkweDAxMjAJLyogTG9jYWwgQnVzIENoaXAtU2VsZWN0IFRpbWluZyA0IFtSL1ddICovCisjZGVmaW5lIE5JTEU0X0xDU1Q1CTB4MDEyOAkvKiBMb2NhbCBCdXMgQ2hpcC1TZWxlY3QgVGltaW5nIDUgW1IvV10gKi8KKyNkZWZpbmUgTklMRTRfTENTVDYJMHgwMTMwCS8qIExvY2FsIEJ1cyBDaGlwLVNlbGVjdCBUaW1pbmcgNiBbUi9XXSAqLworI2RlZmluZSBOSUxFNF9MQ1NUNwkweDAxMzgJLyogTG9jYWwgQnVzIENoaXAtU2VsZWN0IFRpbWluZyA3IFtSL1ddICovCisjZGVmaW5lIE5JTEU0X0xDU1Q4CTB4MDE0MAkvKiBMb2NhbCBCdXMgQ2hpcC1TZWxlY3QgVGltaW5nIDggW1IvV10gKi8KKyNkZWZpbmUgTklMRTRfRENTRk4JMHgwMTUwCS8qIERldmljZSBDaGlwLVNlbGVjdCBNdXhpbmcgYW5kIE91dHB1dCAqLworCQkJCS8qIEVuYWJsZXMgW1IvV10gKi8KKyNkZWZpbmUgTklMRTRfRENTSU8JMHgwMTU4CS8qIERldmljZSBDaGlwLVNlbGVjdHMgQXMgSS9PIEJpdHMgW1IvV10gKi8KKyNkZWZpbmUgTklMRTRfQkNTVAkweDAxNzgJLyogTG9jYWwgQm9vdCBDaGlwLVNlbGVjdCBUaW1pbmcgW1IvV10gKi8KKworCisgICAgLyoKKyAgICAgKiAgRE1BIFJlZ2lzdGVycworICAgICAqLworCisjZGVmaW5lIE5JTEU0X0RNQUNUUkwwCTB4MDE4MAkvKiBETUEgQ29udHJvbCAwIFtSL1ddICovCisjZGVmaW5lIE5JTEU0X0RNQVNSQ0EwCTB4MDE4OAkvKiBETUEgU291cmNlIEFkZHJlc3MgMCBbUi9XXSAqLworI2RlZmluZSBOSUxFNF9ETUFERVNBMAkweDAxOTAJLyogRE1BIERlc3RpbmF0aW9uIEFkZHJlc3MgMCBbUi9XXSAqLworI2RlZmluZSBOSUxFNF9ETUFDVFJMMQkweDAxOTgJLyogRE1BIENvbnRyb2wgMSBbUi9XXSAqLworI2RlZmluZSBOSUxFNF9ETUFTUkNBMQkweDAxQTAJLyogRE1BIFNvdXJjZSBBZGRyZXNzIDEgW1IvV10gKi8KKyNkZWZpbmUgTklMRTRfRE1BREVTQTEJMHgwMUE4CS8qIERNQSBEZXN0aW5hdGlvbiBBZGRyZXNzIDEgW1IvV10gKi8KKworCisgICAgLyoKKyAgICAgKiAgVGltZXIgUmVnaXN0ZXJzCisgICAgICovCisKKyNkZWZpbmUgTklMRTRfVDBDVFJMCTB4MDFDMAkvKiBTRFJBTSBSZWZyZXNoIENvbnRyb2wgW1IvV10gKi8KKyNkZWZpbmUgTklMRTRfVDBDTlRSCTB4MDFDOAkvKiBTRFJBTSBSZWZyZXNoIENvdW50ZXIgW1IvV10gKi8KKyNkZWZpbmUgTklMRTRfVDFDVFJMCTB4MDFEMAkvKiBDUFUtQnVzIFJlYWQgVGltZS1PdXQgQ29udHJvbCBbUi9XXSAqLworI2RlZmluZSBOSUxFNF9UMUNOVFIJMHgwMUQ4CS8qIENQVS1CdXMgUmVhZCBUaW1lLU91dCBDb3VudGVyIFtSL1ddICovCisjZGVmaW5lIE5JTEU0X1QyQ1RSTAkweDAxRTAJLyogR2VuZXJhbC1QdXJwb3NlIFRpbWVyIENvbnRyb2wgW1IvV10gKi8KKyNkZWZpbmUgTklMRTRfVDJDTlRSCTB4MDFFOAkvKiBHZW5lcmFsLVB1cnBvc2UgVGltZXIgQ291bnRlciBbUi9XXSAqLworI2RlZmluZSBOSUxFNF9UM0NUUkwJMHgwMUYwCS8qIFdhdGNoZG9nIFRpbWVyIENvbnRyb2wgW1IvV10gKi8KKyNkZWZpbmUgTklMRTRfVDNDTlRSCTB4MDFGOAkvKiBXYXRjaGRvZyBUaW1lciBDb3VudGVyIFtSL1ddICovCisKKworICAgIC8qCisgICAgICogIFBDSSBDb25maWd1cmF0aW9uIFNwYWNlIFJlZ2lzdGVycworICAgICAqLworCisjZGVmaW5lIE5JTEU0X1BDSV9CQVNFCTB4MDIwMAorCisjZGVmaW5lIE5JTEU0X1ZJRAkweDAyMDAJLyogUENJIFZlbmRvciBJRCBbUl0gKi8KKyNkZWZpbmUgTklMRTRfRElECTB4MDIwMgkvKiBQQ0kgRGV2aWNlIElEIFtSXSAqLworI2RlZmluZSBOSUxFNF9QQ0lDTUQJMHgwMjA0CS8qIFBDSSBDb21tYW5kIFtSL1ddICovCisjZGVmaW5lIE5JTEU0X1BDSVNUUwkweDAyMDYJLyogUENJIFN0YXR1cyBbUi9XXSAqLworI2RlZmluZSBOSUxFNF9SRVZJRAkweDAyMDgJLyogUENJIFJldmlzaW9uIElEIFtSXSAqLworI2RlZmluZSBOSUxFNF9DTEFTUwkweDAyMDkJLyogUENJIENsYXNzIENvZGUgW1JdICovCisjZGVmaW5lIE5JTEU0X0NMU0laCTB4MDIwQwkvKiBQQ0kgQ2FjaGUgTGluZSBTaXplIFtSL1ddICovCisjZGVmaW5lIE5JTEU0X01MVElNCTB4MDIwRAkvKiBQQ0kgTGF0ZW5jeSBUaW1lciBbUi9XXSAqLworI2RlZmluZSBOSUxFNF9IVFlQRQkweDAyMEUJLyogUENJIEhlYWRlciBUeXBlIFtSXSAqLworI2RlZmluZSBOSUxFNF9CSVNUCTB4MDIwRgkvKiBCSVNUIFtSXSAodW5pbXBsZW1lbnRlZCkgKi8KKyNkZWZpbmUgTklMRTRfQkFSQwkweDAyMTAJLyogUENJIEJhc2UgQWRkcmVzcyBSZWdpc3RlciBDb250cm9sIFtSL1ddICovCisjZGVmaW5lIE5JTEU0X0JBUjAJMHgwMjE4CS8qIFBDSSBCYXNlIEFkZHJlc3MgUmVnaXN0ZXIgMCBbUi9XXSAqLworI2RlZmluZSBOSUxFNF9CQVIxCTB4MDIyMAkvKiBQQ0kgQmFzZSBBZGRyZXNzIFJlZ2lzdGVyIDEgW1IvV10gKi8KKyNkZWZpbmUgTklMRTRfQ0lTCTB4MDIyOAkvKiBQQ0kgQ2FyZGJ1cyBDSVMgUG9pbnRlciBbUl0gKi8KKwkJCQkvKiAodW5pbXBsZW1lbnRlZCkgKi8KKyNkZWZpbmUgTklMRTRfU1NWSUQJMHgwMjJDCS8qIFBDSSBTdWItU3lzdGVtIFZlbmRvciBJRCBbUi9XXSAqLworI2RlZmluZSBOSUxFNF9TU0lECTB4MDIyRQkvKiBQQ0kgU3ViLVN5c3RlbSBJRCBbUi9XXSAqLworI2RlZmluZSBOSUxFNF9ST00JMHgwMjMwCS8qIEV4cGFuc2lvbiBST00gQmFzZSBBZGRyZXNzIFtSXSAqLworCQkJCS8qICh1bmltcGxlbWVudGVkKSAqLworI2RlZmluZSBOSUxFNF9JTlRMSU4JMHgwMjNDCS8qIFBDSSBJbnRlcnJ1cHQgTGluZSBbUi9XXSAqLworI2RlZmluZSBOSUxFNF9JTlRQSU4JMHgwMjNECS8qIFBDSSBJbnRlcnJ1cHQgUGluIFtSXSAqLworI2RlZmluZSBOSUxFNF9NSU5HTlQJMHgwMjNFCS8qIFBDSSBNaW5fR250IFtSXSAodW5pbXBsZW1lbnRlZCkgKi8KKyNkZWZpbmUgTklMRTRfTUFYTEFUCTB4MDIzRgkvKiBQQ0kgTWF4X0xhdCBbUl0gKHVuaW1wbGVtZW50ZWQpICovCisjZGVmaW5lIE5JTEU0X0JBUjIJMHgwMjQwCS8qIFBDSSBCYXNlIEFkZHJlc3MgUmVnaXN0ZXIgMiBbUi9XXSAqLworI2RlZmluZSBOSUxFNF9CQVIzCTB4MDI0OAkvKiBQQ0kgQmFzZSBBZGRyZXNzIFJlZ2lzdGVyIDMgW1IvV10gKi8KKyNkZWZpbmUgTklMRTRfQkFSNAkweDAyNTAJLyogUENJIEJhc2UgQWRkcmVzcyBSZWdpc3RlciA0IFtSL1ddICovCisjZGVmaW5lIE5JTEU0X0JBUjUJMHgwMjU4CS8qIFBDSSBCYXNlIEFkZHJlc3MgUmVnaXN0ZXIgNSBbUi9XXSAqLworI2RlZmluZSBOSUxFNF9CQVI2CTB4MDI2MAkvKiBQQ0kgQmFzZSBBZGRyZXNzIFJlZ2lzdGVyIDYgW1IvV10gKi8KKyNkZWZpbmUgTklMRTRfQkFSNwkweDAyNjgJLyogUENJIEJhc2UgQWRkcmVzcyBSZWdpc3RlciA3IFtSL1ddICovCisjZGVmaW5lIE5JTEU0X0JBUjgJMHgwMjcwCS8qIFBDSSBCYXNlIEFkZHJlc3MgUmVnaXN0ZXIgOCBbUi9XXSAqLworI2RlZmluZSBOSUxFNF9CQVJCCTB4MDI3OAkvKiBQQ0kgQmFzZSBBZGRyZXNzIFJlZ2lzdGVyIEJPT1QgW1IvV10gKi8KKworCisgICAgLyoKKyAgICAgKiAgU2VyaWFsLVBvcnQgUmVnaXN0ZXJzCisgICAgICovCisKKyNkZWZpbmUgTklMRTRfVUFSVF9CQVNFCTB4MDMwMAorCisjZGVmaW5lIE5JTEU0X1VBUlRSQlIJMHgwMzAwCS8qIFVBUlQgUmVjZWl2ZXIgRGF0YSBCdWZmZXIgW1JdICovCisjZGVmaW5lIE5JTEU0X1VBUlRUSFIJMHgwMzAwCS8qIFVBUlQgVHJhbnNtaXR0ZXIgRGF0YSBIb2xkaW5nIFtXXSAqLworI2RlZmluZSBOSUxFNF9VQVJUSUVSCTB4MDMwOAkvKiBVQVJUIEludGVycnVwdCBFbmFibGUgW1IvV10gKi8KKyNkZWZpbmUgTklMRTRfVUFSVERMTAkweDAzMDAJLyogVUFSVCBEaXZpc29yIExhdGNoIExTQiBbUi9XXSAqLworI2RlZmluZSBOSUxFNF9VQVJURExNCTB4MDMwOAkvKiBVQVJUIERpdmlzb3IgTGF0Y2ggTVNCIFtSL1ddICovCisjZGVmaW5lIE5JTEU0X1VBUlRJSVIJMHgwMzEwCS8qIFVBUlQgSW50ZXJydXB0IElEIFtSXSAqLworI2RlZmluZSBOSUxFNF9VQVJURkNSCTB4MDMxMAkvKiBVQVJUIEZJRk8gQ29udHJvbCBbV10gKi8KKyNkZWZpbmUgTklMRTRfVUFSVExDUgkweDAzMTgJLyogVUFSVCBMaW5lIENvbnRyb2wgW1IvV10gKi8KKyNkZWZpbmUgTklMRTRfVUFSVE1DUgkweDAzMjAJLyogVUFSVCBNb2RlbSBDb250cm9sIFtSL1ddICovCisjZGVmaW5lIE5JTEU0X1VBUlRMU1IJMHgwMzI4CS8qIFVBUlQgTGluZSBTdGF0dXMgW1IvV10gKi8KKyNkZWZpbmUgTklMRTRfVUFSVE1TUgkweDAzMzAJLyogVUFSVCBNb2RlbSBTdGF0dXMgW1IvV10gKi8KKyNkZWZpbmUgTklMRTRfVUFSVFNDUgkweDAzMzgJLyogVUFSVCBTY3JhdGNoIFtSL1ddICovCisKKyNkZWZpbmUgTklMRTRfVUFSVF9CQVNFX0JBVUQJNTIwODMzCS8qIDEwMCBNSHogLyAxMiAvIDE2ICovCisKKworICAgIC8qCisgICAgICogIEludGVycnVwdCBMaW5lcworICAgICAqLworCisjZGVmaW5lIE5JTEU0X0lOVF9DUENFCTAJLyogQ1BVLUludGVyZmFjZSBQYXJpdHktRXJyb3IgSW50ZXJydXB0ICovCisjZGVmaW5lIE5JTEU0X0lOVF9DTlRECTEJLyogQ1BVIE5vLVRhcmdldCBEZWNvZGUgSW50ZXJydXB0ICovCisjZGVmaW5lIE5JTEU0X0lOVF9NQ0UJMgkvKiBNZW1vcnktQ2hlY2sgRXJyb3IgSW50ZXJydXB0ICovCisjZGVmaW5lIE5JTEU0X0lOVF9ETUEJMwkvKiBETUEgQ29udHJvbGxlciBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgTklMRTRfSU5UX1VBUlQJNAkvKiBVQVJUIEludGVycnVwdCAqLworI2RlZmluZSBOSUxFNF9JTlRfV0RPRwk1CS8qIFdhdGNoZG9nIFRpbWVyIEludGVycnVwdCAqLworI2RlZmluZSBOSUxFNF9JTlRfR1BUCTYJLyogR2VuZXJhbC1QdXJwb3NlIFRpbWVyIEludGVycnVwdCAqLworI2RlZmluZSBOSUxFNF9JTlRfTEJSVEQJNwkvKiBMb2NhbC1CdXMgUmVhZHkgVGltZXIgSW50ZXJydXB0ICovCisjZGVmaW5lIE5JTEU0X0lOVF9JTlRBCTgJLyogUENJIEludGVycnVwdCBTaWduYWwgSU5UQSMgKi8KKyNkZWZpbmUgTklMRTRfSU5UX0lOVEIJOQkvKiBQQ0kgSW50ZXJydXB0IFNpZ25hbCBJTlRCIyAqLworI2RlZmluZSBOSUxFNF9JTlRfSU5UQwkxMAkvKiBQQ0kgSW50ZXJydXB0IFNpZ25hbCBJTlRDIyAqLworI2RlZmluZSBOSUxFNF9JTlRfSU5URAkxMQkvKiBQQ0kgSW50ZXJydXB0IFNpZ25hbCBJTlREIyAqLworI2RlZmluZSBOSUxFNF9JTlRfSU5URQkxMgkvKiBQQ0kgSW50ZXJydXB0IFNpZ25hbCBJTlRFIyAoSVNBIGNhc2NhZGUpICovCisjZGVmaW5lIE5JTEU0X0lOVF9SRVNWCTEzCS8qIFJlc2VydmVkICovCisjZGVmaW5lIE5JTEU0X0lOVF9QQ0lTCTE0CS8qIFBDSSBTRVJSIyBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgTklMRTRfSU5UX1BDSUUJMTUJLyogUENJIEludGVybmFsIEVycm9yIEludGVycnVwdCAqLworCisKKyAgICAvKgorICAgICAqICBOaWxlIDQgUmVnaXN0ZXIgQWNjZXNzCisgICAgICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuaWxlNF9zeW5jKHZvaWQpCit7CisgICAgdm9sYXRpbGUgdTMyICpwID0gKHZvbGF0aWxlIHUzMiAqKTB4YmZjMDAwMDA7CisgICAgKHZvaWQpKCpwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG5pbGU0X291dDMyKHUzMiBvZmZzZXQsIHUzMiB2YWwpCit7CisgICAgKih2b2xhdGlsZSB1MzIgKikoTklMRTRfQkFTRStvZmZzZXQpID0gdmFsOworICAgIG5pbGU0X3N5bmMoKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgbmlsZTRfaW4zMih1MzIgb2Zmc2V0KQoreworICAgIHUzMiB2YWwgPSAqKHZvbGF0aWxlIHUzMiAqKShOSUxFNF9CQVNFK29mZnNldCk7CisgICAgbmlsZTRfc3luYygpOworICAgIHJldHVybiB2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuaWxlNF9vdXQxNih1MzIgb2Zmc2V0LCB1MTYgdmFsKQoreworICAgICoodm9sYXRpbGUgdTE2ICopKE5JTEU0X0JBU0Urb2Zmc2V0KSA9IHZhbDsKKyAgICBuaWxlNF9zeW5jKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTE2IG5pbGU0X2luMTYodTMyIG9mZnNldCkKK3sKKyAgICB1MTYgdmFsID0gKih2b2xhdGlsZSB1MTYgKikoTklMRTRfQkFTRStvZmZzZXQpOworICAgIG5pbGU0X3N5bmMoKTsKKyAgICByZXR1cm4gdmFsOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbmlsZTRfb3V0OCh1MzIgb2Zmc2V0LCB1OCB2YWwpCit7CisgICAgKih2b2xhdGlsZSB1OCAqKShOSUxFNF9CQVNFK29mZnNldCkgPSB2YWw7CisgICAgbmlsZTRfc3luYygpOworfQorCitzdGF0aWMgaW5saW5lIHU4IG5pbGU0X2luOCh1MzIgb2Zmc2V0KQoreworICAgIHU4IHZhbCA9ICoodm9sYXRpbGUgdTggKikoTklMRTRfQkFTRStvZmZzZXQpOworICAgIG5pbGU0X3N5bmMoKTsKKyAgICByZXR1cm4gdmFsOworfQorCisKKyAgICAvKgorICAgICAqICBQaHlzaWNhbCBEZXZpY2UgQWRkcmVzcyBSZWdpc3RlcnMKKyAgICAgKi8KKworZXh0ZXJuIHZvaWQgbmlsZTRfc2V0X3BkYXIodTMyIHBkYXIsIHUzMiBwaHlzLCB1MzIgc2l6ZSwgaW50IHdpZHRoLAorCQkJICAgaW50IG9uX21lbW9yeV9idXMsIGludCB2aXNpYmxlKTsKKworCisgICAgLyoKKyAgICAgKiAgUENJIE1hc3RlciBSZWdpc3RlcnMKKyAgICAgKi8KKworI2RlZmluZSBOSUxFNF9QQ0lDTURfSUFDSwkwCS8qIFBDSSBJbnRlcnJ1cHQgQWNrbm93bGVkZ2UgKi8KKyNkZWZpbmUgTklMRTRfUENJQ01EX0lPCQkxCS8qIFBDSSBJL08gU3BhY2UgKi8KKyNkZWZpbmUgTklMRTRfUENJQ01EX01FTQkzCS8qIFBDSSBNZW1vcnkgU3BhY2UgKi8KKyNkZWZpbmUgTklMRTRfUENJQ01EX0NGRwk1CS8qIFBDSSBDb25maWd1cmF0aW9uIFNwYWNlICovCisKKworICAgIC8qCisgICAgICogIFBDSSBBZGRyZXNzIFNwYWNlcworICAgICAqCisgICAgICogIE5vdGUgdGhhdCB0aGVzZSBhcmUgbXVsdGlwbGV4ZWQgdXNpbmcgUENJSU5JVFswMV0hCisgICAgICovCisKKyNkZWZpbmUgTklMRTRfUENJX0lPX0JBU0UJMHhhNjAwMDAwMAorI2RlZmluZSBOSUxFNF9QQ0lfTUVNX0JBU0UJMHhhODAwMDAwMAorI2RlZmluZSBOSUxFNF9QQ0lfQ0ZHX0JBU0UJTklMRTRfUENJX01FTV9CQVNFCisjZGVmaW5lIE5JTEU0X1BDSV9JQUNLX0JBU0UJTklMRTRfUENJX0lPX0JBU0UKKworCitleHRlcm4gdm9pZCBuaWxlNF9zZXRfcG1yKHUzMiBwbXIsIHUzMiB0eXBlLCB1MzIgYWRkcik7CisKKworICAgIC8qCisgICAgICogIEludGVycnVwdCBQcm9ncmFtbWluZworICAgICAqLworCisjZGVmaW5lIE5VTV9JODI1OV9JTlRFUlJVUFRTCTE2CisjZGVmaW5lIE5VTV9OSUxFNF9JTlRFUlJVUFRTCTE2CisKKyNkZWZpbmUgSVJRX0k4MjU5X0NBU0NBREUJTklMRTRfSU5UX0lOVEUKKyNkZWZpbmUgaXNfaTgyNTlfaXJxKGlycSkJKChpcnEpIDwgTlVNX0k4MjU5X0lOVEVSUlVQVFMpCisjZGVmaW5lIG5pbGU0X3RvX2lycShuKQkJKChuKStOVU1fSTgyNTlfSU5URVJSVVBUUykKKyNkZWZpbmUgaXJxX3RvX25pbGU0KG4pCQkoKG4pLU5VTV9JODI1OV9JTlRFUlJVUFRTKQorCitleHRlcm4gdm9pZCBuaWxlNF9tYXBfaXJxKGludCBuaWxlNF9pcnEsIGludCBjcHVfaXJxKTsKK2V4dGVybiB2b2lkIG5pbGU0X21hcF9pcnFfYWxsKGludCBjcHVfaXJxKTsKK2V4dGVybiB2b2lkIG5pbGU0X2VuYWJsZV9pcnEodW5zaWduZWQgaW50IG5pbGU0X2lycSk7CitleHRlcm4gdm9pZCBuaWxlNF9kaXNhYmxlX2lycSh1bnNpZ25lZCBpbnQgbmlsZTRfaXJxKTsKK2V4dGVybiB2b2lkIG5pbGU0X2Rpc2FibGVfaXJxX2FsbCh2b2lkKTsKK2V4dGVybiB1MTYgbmlsZTRfZ2V0X2lycV9zdGF0KGludCBjcHVfaXJxKTsKK2V4dGVybiB2b2lkIG5pbGU0X2VuYWJsZV9pcnFfb3V0cHV0KGludCBjcHVfaXJxKTsKK2V4dGVybiB2b2lkIG5pbGU0X2Rpc2FibGVfaXJxX291dHB1dChpbnQgY3B1X2lycSk7CitleHRlcm4gdm9pZCBuaWxlNF9zZXRfcGNpX2lycV9wb2xhcml0eShpbnQgcGNpX2lycSwgaW50IGhpZ2gpOworZXh0ZXJuIHZvaWQgbmlsZTRfc2V0X3BjaV9pcnFfbGV2ZWxfb3JfZWRnZShpbnQgcGNpX2lycSwgaW50IGxldmVsKTsKK2V4dGVybiB2b2lkIG5pbGU0X2NsZWFyX2lycShpbnQgbmlsZTRfaXJxKTsKK2V4dGVybiB2b2lkIG5pbGU0X2NsZWFyX2lycV9tYXNrKHUzMiBtYXNrKTsKK2V4dGVybiB1OCBuaWxlNF9pODI1OV9pYWNrKHZvaWQpOworZXh0ZXJuIHZvaWQgbmlsZTRfZHVtcF9pcnFfc3RhdHVzKHZvaWQpOwkvKiBEZWJ1ZyAqLworCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9udW1ub2Rlcy5oIGIvaW5jbHVkZS9hc20tbWlwcy9udW1ub2Rlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmMDBjMTYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL251bW5vZGVzLmgKQEAgLTAsMCArMSw3IEBACisjaWZuZGVmIF9BU01fTUFYX05VTU5PREVTX0gKKyNkZWZpbmUgX0FTTV9NQVhfTlVNTk9ERVNfSAorCisvKiBNYXggMTI4IE5vZGVzICovCisjZGVmaW5lIE5PREVTX1NISUZUCTYKKworI2VuZGlmIC8qIF9BU01fTUFYX05VTU5PREVTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvcGFjY2Vzcy5oIGIvaW5jbHVkZS9hc20tbWlwcy9wYWNjZXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZjZWM5ZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvcGFjY2Vzcy5oCkBAIC0wLDAgKzEsMTEzIEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwIGJ5IFJhbGYgQmFlY2hsZQorICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwIFNpbGljb24gR3JhcGhpY3MsIEluYy4KKyAqCisgKiBQcm90ZWN0ZWQgbWVtb3J5IGFjY2Vzcy4gIFVzZWQgZm9yIGV2ZXJ5dGhpbmcgdGhhdCBtaWdodCB0YWtlIHJldmVuZ2UKKyAqIGJ5IHNlbmRpbmcgYSBEQkUgZXJyb3IgbGlrZSBhY2Nlc3NpbmcgcG9zc2libHkgbm9uLWV4aXN0YW50IG1lbW9yeSBvcgorICogZGV2aWNlcy4KKyAqLworI2lmbmRlZiBfQVNNX1BBQ0NFU1NfSAorI2RlZmluZSBfQVNNX1BBQ0NFU1NfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKworI2lmZGVmIENPTkZJR19NSVBTMzIKKyNkZWZpbmUgX19QQV9BRERSCSIud29yZCIKKyNlbmRpZgorI2lmZGVmIENPTkZJR19NSVBTNjQKKyNkZWZpbmUgX19QQV9BRERSCSIuZHdvcmQiCisjZW5kaWYKKworZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBoYW5kbGVfaWJlKHZvaWQpOworZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBoYW5kbGVfZGJlKHZvaWQpOworCisjZGVmaW5lIHB1dF9kYmUoeCxwdHIpIF9fcHV0X2RiZSgoeCksKHB0ciksc2l6ZW9mKCoocHRyKSkpCisjZGVmaW5lIGdldF9kYmUoeCxwdHIpIF9fZ2V0X2RiZSgoeCksKHB0ciksc2l6ZW9mKCoocHRyKSkpCisKK3N0cnVjdCBfX2xhcmdlX3BzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIGJ1ZlsxMDBdOyB9OworI2RlZmluZSBfX21wKHgpICgqKHN0cnVjdCBfX2xhcmdlX3BzdHJ1Y3QgKikoeCkpCisKKyNkZWZpbmUgX19nZXRfZGJlKHgscHRyLHNpemUpCQkJCQkJXAorKHsJCQkJCQkJCQlcCisJbG9uZyBfX2d1X2VycjsJCQkJCQkJXAorCV9fdHlwZW9mKCoocHRyKSkgX19ndV92YWw7CQkJCQlcCisJdW5zaWduZWQgbG9uZyBfX2d1X2FkZHI7CQkJCQlcCisJX19hc21fXygiIjoiPXIiIChfX2d1X3ZhbCkpOwkJCQkJXAorCV9fZ3VfYWRkciA9ICh1bnNpZ25lZCBsb25nKSAocHRyKTsJCQkJXAorCV9fYXNtX18oIiI6Ij1yIiAoX19ndV9lcnIpKTsJCQkJCVwKKwlzd2l0Y2ggKHNpemUpIHsJCQkJCQkJXAorCWNhc2UgMTogX19nZXRfZGJlX2FzbSgibGIiKTsgYnJlYWs7CQkJCVwKKwljYXNlIDI6IF9fZ2V0X2RiZV9hc20oImxoIik7IGJyZWFrOwkJCQlcCisJY2FzZSA0OiBfX2dldF9kYmVfYXNtKCJsdyIpOyBicmVhazsJCQkJXAorCWNhc2UgODogIF9fZ2V0X2RiZV9hc20oImxkIik7IGJyZWFrOwkJCQlcCisJZGVmYXVsdDogX19nZXRfZGJlX3Vua25vd24oKTsgYnJlYWs7CQkJCVwKKwl9CQkJCQkJCQlcCisJeCA9IChfX3R5cGVvZl9fKCoocHRyKSkpIF9fZ3VfdmFsOwkJCQlcCisJX19ndV9lcnI7CQkJCQkJCVwKK30pCisKKyNkZWZpbmUgX19nZXRfZGJlX2FzbShpbnNuKQkJCQkJCVwKKyh7CQkJCQkJCQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCVwKKwkiMTpcdCIgaW5zbiAiXHQlMSwlMlxuXHQiCQkJCQlcCisJIm1vdmVcdCUwLCQwXG4iCQkJCQkJCVwKKwkiMjpcblx0IgkJCQkJCQlcCisJIi5zZWN0aW9uXHQuZml4dXAsXCJheFwiXG4iCQkJCQlcCisJIjM6XHRsaVx0JTAsJTNcblx0IgkJCQkJCVwKKwkibW92ZVx0JTEsJDBcblx0IgkJCQkJCVwKKwkialx0MmJcblx0IgkJCQkJCQlcCisJIi5wcmV2aW91c1xuXHQiCQkJCQkJCVwKKwkiLnNlY3Rpb25cdF9fZGJlX3RhYmxlLFwiYVwiXG5cdCIJCQkJXAorCV9fUEFfQUREUiAiXHQxYiwgM2Jcblx0IgkJCQkJXAorCSIucHJldmlvdXMiCQkJCQkJCVwKKwk6Ij1yIiAoX19ndV9lcnIpLCAiPXIiIChfX2d1X3ZhbCkJCQkJXAorCToibyIgKF9fbXAoX19ndV9hZGRyKSksICJpIiAoLUVGQVVMVCkpOwkJCQlcCit9KQorCitleHRlcm4gdm9pZCBfX2dldF9kYmVfdW5rbm93bih2b2lkKTsKKworI2RlZmluZSBfX3B1dF9kYmUoeCxwdHIsc2l6ZSkJCQkJCQlcCisoewkJCQkJCQkJCVwKKwlsb25nIF9fcHVfZXJyOwkJCQkJCQlcCisJX190eXBlb2ZfXygqKHB0cikpIF9fcHVfdmFsOwkJCQkJXAorCWxvbmcgX19wdV9hZGRyOwkJCQkJCQlcCisJX19wdV92YWwgPSAoeCk7CQkJCQkJCVwKKwlfX3B1X2FkZHIgPSAobG9uZykgKHB0cik7CQkJCQlcCisJX19hc21fXygiIjoiPXIiIChfX3B1X2VycikpOwkJCQkJXAorCXN3aXRjaCAoc2l6ZSkgewkJCQkJCQlcCisJY2FzZSAxOiBfX3B1dF9kYmVfYXNtKCJzYiIpOyBicmVhazsJCQkJXAorCWNhc2UgMjogX19wdXRfZGJlX2FzbSgic2giKTsgYnJlYWs7CQkJCVwKKwljYXNlIDQ6IF9fcHV0X2RiZV9hc20oInN3Iik7IGJyZWFrOwkJCQlcCisJY2FzZSA4OiBfX3B1dF9kYmVfYXNtKCJzZCIpOyBicmVhazsJCQkJXAorCWRlZmF1bHQ6IF9fcHV0X2RiZV91bmtub3duKCk7IGJyZWFrOwkJCQlcCisJfQkJCQkJCQkJXAorCV9fcHVfZXJyOwkJCQkJCQlcCit9KQorCisjZGVmaW5lIF9fcHV0X2RiZV9hc20oaW5zbikJCQkJCQlcCisoewkJCQkJCQkJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQlcCisJIjE6XHQiIGluc24gIlx0JTEsJTJcblx0IgkJCQkJXAorCSJtb3ZlXHQlMCwkMFxuIgkJCQkJCQlcCisJIjI6XG5cdCIJCQkJCQkJXAorCSIuc2VjdGlvblx0LmZpeHVwLFwiYXhcIlxuIgkJCQkJXAorCSIzOlx0bGlcdCUwLCUzXG5cdCIJCQkJCQlcCisJImpcdDJiXG5cdCIJCQkJCQkJXAorCSIucHJldmlvdXNcblx0IgkJCQkJCQlcCisJIi5zZWN0aW9uXHRfX2RiZV90YWJsZSxcImFcIlxuXHQiCQkJCVwKKwlfX1BBX0FERFIgIlx0MWIsIDNiXG5cdCIJCQkJCVwKKwkiLnByZXZpb3VzIgkJCQkJCQlcCisJOiAiPXIiIChfX3B1X2VycikJCQkJCQlcCisJOiAiciIgKF9fcHVfdmFsKSwgIm8iIChfX21wKF9fcHVfYWRkcikpLCAiaSIgKC1FRkFVTFQpKTsJXAorfSkKKworZXh0ZXJuIHZvaWQgX19wdXRfZGJlX3Vua25vd24odm9pZCk7CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIHNlYXJjaF9kYmVfdGFibGUodW5zaWduZWQgbG9uZyBhZGRyKTsKKworI2VuZGlmIC8qIF9BU01fUEFDQ0VTU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3BhZ2UuaCBiL2luY2x1ZGUvYXNtLW1pcHMvcGFnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxYmY4MjQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3BhZ2UuaApAQCAtMCwwICsxLDE1MSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NCAtIDE5OTksIDIwMDAsIDAzIFJhbGYgQmFlY2hsZQorICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwIFNpbGljb24gR3JhcGhpY3MsIEluYy4KKyAqLworI2lmbmRlZiBfQVNNX1BBR0VfSAorI2RlZmluZSBfQVNNX1BBR0VfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxzcGFjZXMuaD4KKworI2VuZGlmCisKKy8qCisgKiBQQUdFX1NISUZUIGRldGVybWluZXMgdGhlIHBhZ2Ugc2l6ZQorICovCisjaWZkZWYgQ09ORklHX1BBR0VfU0laRV80S0IKKyNkZWZpbmUgUEFHRV9TSElGVAkxMgorI2VuZGlmCisjaWZkZWYgQ09ORklHX1BBR0VfU0laRV84S0IKKyNkZWZpbmUgUEFHRV9TSElGVAkxMworI2VuZGlmCisjaWZkZWYgQ09ORklHX1BBR0VfU0laRV8xNktCCisjZGVmaW5lIFBBR0VfU0hJRlQJMTQKKyNlbmRpZgorI2lmZGVmIENPTkZJR19QQUdFX1NJWkVfNjRLQgorI2RlZmluZSBQQUdFX1NISUZUCTE2CisjZW5kaWYKKyNkZWZpbmUgUEFHRV9TSVpFCSgxVUwgPDwgUEFHRV9TSElGVCkKKyNkZWZpbmUgUEFHRV9NQVNLICAgICAgICh+KCgxIDw8IFBBR0VfU0hJRlQpIC0gMSkpCisKKworI2lmZGVmIF9fS0VSTkVMX18KKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK2V4dGVybiB2b2lkIGNsZWFyX3BhZ2Uodm9pZCAqIHBhZ2UpOworZXh0ZXJuIHZvaWQgY29weV9wYWdlKHZvaWQgKiB0bywgdm9pZCAqIGZyb20pOworCitleHRlcm4gdW5zaWduZWQgbG9uZyBzaG1fYWxpZ25fbWFzazsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHBhZ2VzX2RvX2FsaWFzKHVuc2lnbmVkIGxvbmcgYWRkcjEsCisJdW5zaWduZWQgbG9uZyBhZGRyMikKK3sKKwlyZXR1cm4gKGFkZHIxIF4gYWRkcjIpICYgc2htX2FsaWduX21hc2s7Cit9CisKK3N0cnVjdCBwYWdlOworCitzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfdXNlcl9wYWdlKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgdmFkZHIsCisJc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJZXh0ZXJuIHZvaWQgKCpmbHVzaF9kYXRhX2NhY2hlX3BhZ2UpKHVuc2lnbmVkIGxvbmcgYWRkcik7CisKKwljbGVhcl9wYWdlKGFkZHIpOworCWlmIChwYWdlc19kb19hbGlhcygodW5zaWduZWQgbG9uZykgYWRkciwgdmFkZHIpKQorCQlmbHVzaF9kYXRhX2NhY2hlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5X3VzZXJfcGFnZSh2b2lkICp2dG8sIHZvaWQgKnZmcm9tLCB1bnNpZ25lZCBsb25nIHZhZGRyLAorCXN0cnVjdCBwYWdlICp0bykKK3sKKwlleHRlcm4gdm9pZCAoKmZsdXNoX2RhdGFfY2FjaGVfcGFnZSkodW5zaWduZWQgbG9uZyBhZGRyKTsKKworCWNvcHlfcGFnZSh2dG8sIHZmcm9tKTsKKwlpZiAocGFnZXNfZG9fYWxpYXMoKHVuc2lnbmVkIGxvbmcpdnRvLCB2YWRkcikpCisJCWZsdXNoX2RhdGFfY2FjaGVfcGFnZSgodW5zaWduZWQgbG9uZyl2dG8pOworfQorCisvKgorICogVGhlc2UgYXJlIHVzZWQgdG8gbWFrZSB1c2Ugb2YgQyB0eXBlLWNoZWNraW5nLi4KKyAqLworI2lmZGVmIENPTkZJR182NEJJVF9QSFlTX0FERFIKKyAgI2lmZGVmIENPTkZJR19DUFVfTUlQUzMyCisgICAgdHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHB0ZV9sb3csIHB0ZV9oaWdoOyB9IHB0ZV90OworICAgICNkZWZpbmUgcHRlX3ZhbCh4KSAgICAoKHgpLnB0ZV9sb3cgfCAoKHVuc2lnbmVkIGxvbmcgbG9uZykoeCkucHRlX2hpZ2ggPDwgMzIpKQorICAjZWxzZQorICAgICB0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgbG9uZyBwdGU7IH0gcHRlX3Q7CisgICAgICNkZWZpbmUgcHRlX3ZhbCh4KQkoKHgpLnB0ZSkKKyAgI2VuZGlmCisjZWxzZQordHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHB0ZTsgfSBwdGVfdDsKKyNkZWZpbmUgcHRlX3ZhbCh4KQkoKHgpLnB0ZSkKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgcG1kOyB9IHBtZF90OwordHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHBnZDsgfSBwZ2RfdDsKK3R5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBwZ3Byb3Q7IH0gcGdwcm90X3Q7CisKKyNkZWZpbmUgcG1kX3ZhbCh4KQkoKHgpLnBtZCkKKyNkZWZpbmUgcGdkX3ZhbCh4KQkoKHgpLnBnZCkKKyNkZWZpbmUgcGdwcm90X3ZhbCh4KQkoKHgpLnBncHJvdCkKKworI2RlZmluZSBwdGVwX2J1ZGR5KHgpCSgocHRlX3QgKikoKHVuc2lnbmVkIGxvbmcpKHgpIF4gc2l6ZW9mKHB0ZV90KSkpCisKKyNkZWZpbmUgX19wdGUoeCkJKChwdGVfdCkgeyAoeCkgfSApCisjZGVmaW5lIF9fcG1kKHgpCSgocG1kX3QpIHsgKHgpIH0gKQorI2RlZmluZSBfX3BnZCh4KQkoKHBnZF90KSB7ICh4KSB9ICkKKyNkZWZpbmUgX19wZ3Byb3QoeCkJKChwZ3Byb3RfdCkgeyAoeCkgfSApCisKKy8qIFB1cmUgMl5uIHZlcnNpb24gb2YgZ2V0X29yZGVyICovCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgZ2V0X29yZGVyKHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlpbnQgb3JkZXI7CisKKwlzaXplID0gKHNpemUtMSkgPj4gKFBBR0VfU0hJRlQtMSk7CisJb3JkZXIgPSAtMTsKKwlkbyB7CisJCXNpemUgPj49IDE7CisJCW9yZGVyKys7CisJfSB3aGlsZSAoc2l6ZSk7CisJcmV0dXJuIG9yZGVyOworfQorCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisvKiB0byBhbGlnbiB0aGUgcG9pbnRlciB0byB0aGUgKG5leHQpIHBhZ2UgYm91bmRhcnkgKi8KKyNkZWZpbmUgUEFHRV9BTElHTihhZGRyKQkoKChhZGRyKSArIFBBR0VfU0laRSAtIDEpICYgUEFHRV9NQVNLKQorCisjZGVmaW5lIF9fcGEoeCkJCQkoKHVuc2lnbmVkIGxvbmcpICh4KSAtIFBBR0VfT0ZGU0VUKQorI2RlZmluZSBfX3ZhKHgpCQkJKCh2b2lkICopKCh1bnNpZ25lZCBsb25nKSAoeCkgKyBQQUdFX09GRlNFVCkpCisKKyNkZWZpbmUgcGZuX3RvX2thZGRyKHBmbikJX192YSgocGZuKSA8PCBQQUdFX1NISUZUKQorCisjaWZuZGVmIENPTkZJR19ESVNDT05USUdNRU0KKyNkZWZpbmUgcGZuX3RvX3BhZ2UocGZuKQkobWVtX21hcCArIChwZm4pKQorI2RlZmluZSBwYWdlX3RvX3BmbihwYWdlKQkoKHVuc2lnbmVkIGxvbmcpKChwYWdlKSAtIG1lbV9tYXApKQorI2RlZmluZSBwZm5fdmFsaWQocGZuKQkJKChwZm4pIDwgbWF4X21hcG5yKQorI2VuZGlmCisKKyNkZWZpbmUgdmlydF90b19wYWdlKGthZGRyKQlwZm5fdG9fcGFnZShfX3BhKGthZGRyKSA+PiBQQUdFX1NISUZUKQorI2RlZmluZSB2aXJ0X2FkZHJfdmFsaWQoa2FkZHIpCXBmbl92YWxpZChfX3BhKGthZGRyKSA+PiBQQUdFX1NISUZUKQorCisjZGVmaW5lIFZNX0RBVEFfREVGQVVMVF9GTEFHUwkoVk1fUkVBRCB8IFZNX1dSSVRFIHwgVk1fRVhFQyB8IFwKKwkJCQkgVk1fTUFZUkVBRCB8IFZNX01BWVdSSVRFIHwgVk1fTUFZRVhFQykKKworI2RlZmluZSBVTkNBQ19BRERSKGFkZHIpCSgoYWRkcikgLSBQQUdFX09GRlNFVCArIFVOQ0FDX0JBU0UpCisjZGVmaW5lIENBQ19BRERSKGFkZHIpCQkoKGFkZHIpIC0gVU5DQUNfQkFTRSArIFBBR0VfT0ZGU0VUKQorCisjZW5kaWYgLyogZGVmaW5lZCAoX19LRVJORUxfXykgKi8KKworI2lmZGVmIENPTkZJR19MSU1JVEVEX0RNQQorI2RlZmluZSBXQU5UX1BBR0VfVklSVFVBTAorI2VuZGlmCisKKyNlbmRpZiAvKiBfQVNNX1BBR0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9wYXJhbS5oIGIvaW5jbHVkZS9hc20tbWlwcy9wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiZWFkODIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3BhcmFtLmgKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAxOTk0IC0gMjAwMCwgMjAwMiBSYWxmIEJhZWNobGUgKHJhbGZAZ251Lm9yZykKKyAqIENvcHlyaWdodCAyMDAwIFNpbGljb24gR3JhcGhpY3MsIEluYy4KKyAqLworI2lmbmRlZiBfQVNNX1BBUkFNX0gKKyNkZWZpbmUgX0FTTV9QQVJBTV9ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyMgaW5jbHVkZSA8cGFyYW0uaD4JCQkvKiBJbnRlcm5hbCBrZXJuZWwgdGltZXIgZnJlcXVlbmN5ICovCisjIGRlZmluZSBVU0VSX0haCTEwMAkJLyogLi4gc29tZSB1c2VyIGludGVyZmFjZXMgYXJlIGluICJ0aWNrcyIgKi8KKyMgZGVmaW5lIENMT0NLU19QRVJfU0VDCShVU0VSX0haKQkvKiBsaWtlIHRpbWVzKCkgKi8KKyNlbmRpZgorCisjaWZuZGVmIEhaCisjZGVmaW5lIEhaIDEwMAorI2VuZGlmCisKKyNkZWZpbmUgRVhFQ19QQUdFU0laRQk2NTUzNgorCisjaWZuZGVmIE5PR1JPVVAKKyNkZWZpbmUgTk9HUk9VUAkJKC0xKQorI2VuZGlmCisKKyNkZWZpbmUgTUFYSE9TVE5BTUVMRU4JNjQJLyogbWF4IGxlbmd0aCBvZiBob3N0bmFtZSAqLworCisjZW5kaWYgLyogX0FTTV9QQVJBTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3BhcnBvcnQuaCBiL2luY2x1ZGUvYXNtLW1pcHMvcGFycG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3NDJlMDQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3BhcnBvcnQuaApAQCAtMCwwICsxLDE1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwICBUaW0gV2F1Z2ggPHRpbUBjeWJlcmVsay5kZW1vbi5jby51az4KKyAqCisgKiBUaGlzIGZpbGUgc2hvdWxkIG9ubHkgYmUgaW5jbHVkZWQgYnkgZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfcGMuYy4KKyAqLworI2lmbmRlZiBfQVNNX1BBUlBPUlRfSAorI2RlZmluZSBfQVNNX1BBUlBPUlRfSAorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBwYXJwb3J0X3BjX2ZpbmRfaXNhX3BvcnRzIChpbnQgYXV0b2lycSwgaW50IGF1dG9kbWEpOworc3RhdGljIGludCBfX2RldmluaXQgcGFycG9ydF9wY19maW5kX25vbnBjaV9wb3J0cyAoaW50IGF1dG9pcnEsIGludCBhdXRvZG1hKQoreworCXJldHVybiBwYXJwb3J0X3BjX2ZpbmRfaXNhX3BvcnRzIChhdXRvaXJxLCBhdXRvZG1hKTsKK30KKworI2VuZGlmIC8qIF9BU01fUEFSUE9SVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3BjaS5oIGIvaW5jbHVkZS9hc20tbWlwcy9wY2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWM1NzZiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9wY2kuaApAQCAtMCwwICsxLDE2MCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9BU01fUENJX0gKKyNkZWZpbmUgX0FTTV9QQ0lfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKworI2lmZGVmIF9fS0VSTkVMX18KKworLyoKKyAqIFRoaXMgZmlsZSBlc3NlbnRpYWxseSBkZWZpbmVzIHRoZSBpbnRlcmZhY2UgYmV0d2VlbiBib2FyZAorICogc3BlY2lmaWMgUENJIGNvZGUgYW5kIE1JUFMgY29tbW9uIFBDSSBjb2RlLiAgU2hvdWxkIHBvdGVudGlhbGx5IHB1dAorICogaW50byBpbmNsdWRlL2FzbS9wY2kuaCBmaWxlLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKworLyoKKyAqIEVhY2ggcGNpIGNoYW5uZWwgaXMgYSB0b3AtbGV2ZWwgUENJIGJ1cyBzZWVtIGJ5IENQVS4gIEEgbWFjaGluZSAgd2l0aAorICogbXVsdGlwbGUgUENJIGNoYW5uZWxzIG1heSBoYXZlIG11bHRpcGxlIFBDSSBob3N0IGNvbnRyb2xsZXJzIG9yIGEKKyAqIHNpbmdsZSBjb250cm9sbGVyIHN1cHBvcnRpbmcgbXVsdGlwbGUgY2hhbm5lbHMuCisgKi8KK3N0cnVjdCBwY2lfY29udHJvbGxlciB7CisJc3RydWN0IHBjaV9jb250cm9sbGVyICpuZXh0OworCXN0cnVjdCBwY2lfYnVzICpidXM7CisKKwlzdHJ1Y3QgcGNpX29wcyAqcGNpX29wczsKKwlzdHJ1Y3QgcmVzb3VyY2UgKm1lbV9yZXNvdXJjZTsKKwl1bnNpZ25lZCBsb25nIG1lbV9vZmZzZXQ7CisJc3RydWN0IHJlc291cmNlICppb19yZXNvdXJjZTsKKwl1bnNpZ25lZCBsb25nIGlvX29mZnNldDsKKworCXVuc2lnbmVkIGludCBpbmRleDsKKwkvKiBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIGN1cnJlbnQgKGFzIG9mIEp1bHkgMjAwMykgcGNpdXRpbHMKKwkgICBhbmQgWEZyZWU4Ni4gRXZlbnR1YWxseSB3aWxsIGJlIHJlbW92ZWQuICovCisJdW5zaWduZWQgaW50IG5lZWRfZG9tYWluX2luZm87CisKKwlpbnQgaW9tbXU7Cit9OworCisvKgorICogVXNlZCBieSBib2FyZHMgdG8gcmVnaXN0ZXIgdGhlaXIgUENJIGJ1c3NlcyBiZWZvcmUgdGhlIGFjdHVhbCBzY2FubmluZy4KKyAqLworZXh0ZXJuIHN0cnVjdCBwY2lfY29udHJvbGxlciAqIGFsbG9jX3BjaV9jb250cm9sbGVyKHZvaWQpOworZXh0ZXJuIHZvaWQgcmVnaXN0ZXJfcGNpX2NvbnRyb2xsZXIoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlKTsKKworLyoKKyAqIGJvYXJkIHN1cHBsaWVkIHBjaSBpcnEgZml4dXAgcm91dGluZQorICovCitleHRlcm4gaW50IHBjaWJpb3NfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pOworCisKKy8qIENhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIHRoZSBsb2dpYyBpbiBwY2lfc2Nhbl9idXMgZm9yIHNraXBwaW5nCisgICBhbHJlYWR5LWNvbmZpZ3VyZWQgYnVzIG51bWJlcnMgLSB0byBiZSB1c2VkIGZvciBidWdneSBCSU9TZXMKKyAgIG9yIGFyY2hpdGVjdHVyZXMgd2l0aCBpbmNvbXBsZXRlIFBDSSBzZXR1cCBieSB0aGUgbG9hZGVyICovCisKK2V4dGVybiB1bnNpZ25lZCBpbnQgcGNpYmlvc19hc3NpZ25fYWxsX2J1c3Nlcyh2b2lkKTsKKworI2RlZmluZSBwY2liaW9zX3NjYW5fYWxsX2ZucyhhLCBiKQkwCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIFBDSUJJT1NfTUlOX0lPOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgUENJQklPU19NSU5fTUVNOworCisjZGVmaW5lIFBDSUJJT1NfTUlOX0NBUkRCVVNfSU8JMHg0MDAwCisKK2V4dGVybiB2b2lkIHBjaWJpb3Nfc2V0X21hc3RlcihzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKKworc3RhdGljIGlubGluZSB2b2lkIHBjaWJpb3NfcGVuYWxpemVfaXNhX2lycShpbnQgaXJxKQoreworCS8qIFdlIGRvbid0IGRvIGR5bmFtaWMgUENJIElSUSBhbGxvY2F0aW9uICovCit9CisKKy8qCisgKiBEeW5hbWljIERNQSBtYXBwaW5nIHN0dWZmLgorICogTUlQUyBoYXMgZXZlcnl0aGluZyBtYXBwZWQgc3RhdGljYWxseS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKK3N0cnVjdCBwY2lfZGV2OworCisvKgorICogVGhlIFBDSSBhZGRyZXNzIHNwYWNlIGRvZXMgZXF1YWwgdGhlIHBoeXNpY2FsIG1lbW9yeSBhZGRyZXNzIHNwYWNlLiAgVGhlCisgKiBuZXR3b3JraW5nIGFuZCBibG9jayBkZXZpY2UgbGF5ZXJzIHVzZSB0aGlzIGJvb2xlYW4gZm9yIGJvdW5jZSBidWZmZXIKKyAqIGRlY2lzaW9ucy4gIFRoaXMgaXMgc2V0IGlmIGFueSBob3NlIGRvZXMgbm90IGhhdmUgYW4gSU9NTVUuCisgKi8KK2V4dGVybiB1bnNpZ25lZCBpbnQgUENJX0RNQV9CVVNfSVNfUEhZUzsKKworI2lmZGVmIENPTkZJR19NQVBQRURfRE1BX0lPCisKKy8qIHBjaV91bm1hcF97c2luZ2xlLHBhZ2V9IGlzIG5vdCBhIG5vcCwgdGh1cy4uLiAqLworI2RlZmluZSBERUNMQVJFX1BDSV9VTk1BUF9BRERSKEFERFJfTkFNRSkJZG1hX2FkZHJfdCBBRERSX05BTUU7CisjZGVmaW5lIERFQ0xBUkVfUENJX1VOTUFQX0xFTihMRU5fTkFNRSkJCV9fdTMyIExFTl9OQU1FOworI2RlZmluZSBwY2lfdW5tYXBfYWRkcihQVFIsIEFERFJfTkFNRSkJCSgoUFRSKS0+QUREUl9OQU1FKQorI2RlZmluZSBwY2lfdW5tYXBfYWRkcl9zZXQoUFRSLCBBRERSX05BTUUsIFZBTCkJKCgoUFRSKS0+QUREUl9OQU1FKSA9IChWQUwpKQorI2RlZmluZSBwY2lfdW5tYXBfbGVuKFBUUiwgTEVOX05BTUUpCQkoKFBUUiktPkxFTl9OQU1FKQorI2RlZmluZSBwY2lfdW5tYXBfbGVuX3NldChQVFIsIExFTl9OQU1FLCBWQUwpCSgoKFBUUiktPkxFTl9OQU1FKSA9IChWQUwpKQorCisjZWxzZSAvKiBDT05GSUdfTUFQUEVEX0RNQV9JTyAgKi8KKworLyogcGNpX3VubWFwX3twYWdlLHNpbmdsZX0gaXMgYSBub3Agc28uLi4gKi8KKyNkZWZpbmUgREVDTEFSRV9QQ0lfVU5NQVBfQUREUihBRERSX05BTUUpCisjZGVmaW5lIERFQ0xBUkVfUENJX1VOTUFQX0xFTihMRU5fTkFNRSkKKyNkZWZpbmUgcGNpX3VubWFwX2FkZHIoUFRSLCBBRERSX05BTUUpCQkoMCkKKyNkZWZpbmUgcGNpX3VubWFwX2FkZHJfc2V0KFBUUiwgQUREUl9OQU1FLCBWQUwpCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgcGNpX3VubWFwX2xlbihQVFIsIExFTl9OQU1FKQkJKDApCisjZGVmaW5lIHBjaV91bm1hcF9sZW5fc2V0KFBUUiwgTEVOX05BTUUsIFZBTCkJZG8geyB9IHdoaWxlICgwKQorCisjZW5kaWYgLyogQ09ORklHX01BUFBFRF9ETUFfSU8gICovCisKKy8qIFRoaXMgaXMgYWx3YXlzIGZpbmUuICovCisjZGVmaW5lIHBjaV9kYWNfZG1hX3N1cHBvcnRlZChwY2lfZGV2LCBtYXNrKQkoMSkKKworZXh0ZXJuIGRtYTY0X2FkZHJfdCBwY2lfZGFjX3BhZ2VfdG9fZG1hKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCXN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwgaW50IGRpcmVjdGlvbik7CitleHRlcm4gc3RydWN0IHBhZ2UgKnBjaV9kYWNfZG1hX3RvX3BhZ2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJZG1hNjRfYWRkcl90IGRtYV9hZGRyKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHBjaV9kYWNfZG1hX3RvX29mZnNldChzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwlkbWE2NF9hZGRyX3QgZG1hX2FkZHIpOworZXh0ZXJuIHZvaWQgcGNpX2RhY19kbWFfc3luY19zaW5nbGVfZm9yX2NwdShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwlkbWE2NF9hZGRyX3QgZG1hX2FkZHIsIHNpemVfdCBsZW4sIGludCBkaXJlY3Rpb24pOworZXh0ZXJuIHZvaWQgcGNpX2RhY19kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwlkbWE2NF9hZGRyX3QgZG1hX2FkZHIsIHNpemVfdCBsZW4sIGludCBkaXJlY3Rpb24pOworCitleHRlcm4gdm9pZCBwY2liaW9zX3Jlc291cmNlX3RvX2J1cyhzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCXN0cnVjdCBwY2lfYnVzX3JlZ2lvbiAqcmVnaW9uLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcyk7CisKKyNpZmRlZiBDT05GSUdfUENJX0RPTUFJTlMKKworI2RlZmluZSBwY2lfZG9tYWluX25yKGJ1cykgKChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKikoYnVzKS0+c3lzZGF0YSktPmluZGV4CisKK3N0YXRpYyBpbmxpbmUgaW50IHBjaV9wcm9jX2RvbWFpbihzdHJ1Y3QgcGNpX2J1cyAqYnVzKQoreworCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSA9IGJ1cy0+c3lzZGF0YTsKKwlyZXR1cm4gaG9zZS0+bmVlZF9kb21haW5faW5mbzsKK30KKworI2VuZGlmIC8qIENPTkZJR19QQ0lfRE9NQUlOUyAqLworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisvKiBpbXBsZW1lbnQgdGhlIHBjaV8gRE1BIEFQSSBpbiB0ZXJtcyBvZiB0aGUgZ2VuZXJpYyBkZXZpY2UgZG1hXyBvbmUgKi8KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wY2ktZG1hLWNvbXBhdC5oPgorCitzdGF0aWMgaW5saW5lIHZvaWQgcGNpYmlvc19hZGRfcGxhdGZvcm1fZW50cmllcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworfQorCisvKiBEbyBwbGF0Zm9ybSBzcGVjaWZpYyBkZXZpY2UgaW5pdGlhbGl6YXRpb24gYXQgcGNpX2VuYWJsZV9kZXZpY2UoKSB0aW1lICovCitleHRlcm4gaW50IHBjaWJpb3NfcGxhdF9kZXZfaW5pdChzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKKworI2VuZGlmIC8qIF9BU01fUENJX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvcGNpL2JyaWRnZS5oIGIvaW5jbHVkZS9hc20tbWlwcy9wY2kvYnJpZGdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRlZTk5NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvcGNpL2JyaWRnZS5oCkBAIC0wLDAgKzEsODUxIEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogYnJpZGdlLmggLSBicmlkZ2UgY2hpcCBoZWFkZXIgZmlsZSwgZGVyaXZlZCBmcm9tIElSSVggPHN5cy9QQ0kvYnJpZGdlLmg+LAorICogcmV2aXNpb24gMS43Ni4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTkgU2lsY29uIEdyYXBoaWNzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgUmFsZiBCYWVjaGxlIChyYWxmQGdudS5vcmcpCisgKi8KKyNpZm5kZWYgX0FTTV9QQ0lfQlJJREdFX0gKKyNkZWZpbmUgX0FTTV9QQ0lfQlJJREdFX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8YXNtL3h0YWxrL3h3aWRnZXQuaD4JCS8qIGdlbmVyaWMgd2lkZ2V0IGhlYWRlciAqLworCisvKiBJL08gcGFnZSBzaXplICovCisKKyNkZWZpbmUgSU9QRk5TSElGVAkJMTIJLyogNEsgcGVyIG1hcHBlZCBwYWdlICovCisKKyNkZWZpbmUgSU9QR1NJWkUJCSgxIDw8IElPUEZOU0hJRlQpCisjZGVmaW5lIElPUEcoeCkJCQkoKHgpID4+IElPUEZOU0hJRlQpCisjZGVmaW5lIElPUEdPRkYoeCkJCSgoeCkgJiAoSU9QR1NJWkUtMSkpCisKKy8qIEJyaWRnZSBSQU0gc2l6ZXMgKi8KKworI2RlZmluZSBCUklER0VfQVRFX1JBTV9TSVpFCTB4MDAwMDA0MDAJLyogMWtCIEFURSBSQU0gKi8KKworI2RlZmluZSBCUklER0VfQ09ORklHX0JBU0UJMHgyMDAwMAorI2RlZmluZSBCUklER0VfQ09ORklHMV9CQVNFCTB4MjgwMDAKKyNkZWZpbmUgQlJJREdFX0NPTkZJR19FTkQJMHgzMDAwMAorI2RlZmluZSBCUklER0VfQ09ORklHX1NMT1RfU0laRSAweDEwMDAKKworI2RlZmluZSBCUklER0VfU1NSQU1fNTEySwkweDAwMDgwMDAwCS8qIDUxMmtCICovCisjZGVmaW5lIEJSSURHRV9TU1JBTV8xMjhLCTB4MDAwMjAwMDAJLyogMTI4a0IgKi8KKyNkZWZpbmUgQlJJREdFX1NTUkFNXzY0SwkweDAwMDEwMDAwCS8qIDY0a0IgKi8KKyNkZWZpbmUgQlJJREdFX1NTUkFNXzBLCQkweDAwMDAwMDAwCS8qIDBrQiAqLworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICAgIEJyaWRnZSBhZGRyZXNzIG1hcAorICovCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKy8qCisgKiBBbGwgYWNjZXNzZXMgdG8gYnJpZGdlIGhhcmR3YXJlIHJlZ2lzdGVycyBtdXN0IGJlIGRvbmUKKyAqIHVzaW5nIDMyLWJpdCBsb2FkcyBhbmQgc3RvcmVzLgorICovCit0eXBlZGVmIHUzMglicmlkZ2VyZWdfdDsKKwordHlwZWRlZiB1NjQJYnJpZGdlX2F0ZV90OworCisvKiBwb2ludGVycyB0byBicmlkZ2UgQVRFcworICogYXJlIGFsd2F5cyAicG9pbnRlciB0byB2b2xhdGlsZSIKKyAqLwordHlwZWRlZiB2b2xhdGlsZSBicmlkZ2VfYXRlX3QgICpicmlkZ2VfYXRlX3A7CisKKy8qCisgKiBJdCBpcyBnZW5lcmFsbHkgcHJlZmVycmVkIHRoYXQgaGFyZHdhcmUgcmVnaXN0ZXJzIG9uIHRoZSBicmlkZ2UKKyAqIGFyZSBsb2NhdGVkIGZyb20gQyBjb2RlIHZpYSB0aGlzIHN0cnVjdHVyZS4KKyAqCisgKiBHZW5lcmF0ZWQgZnJvbSBCcmlkZ2Ugc3BlYyBkYXRlZCAwNG9jdDk1CisgKi8KKwordHlwZWRlZiB2b2xhdGlsZSBzdHJ1Y3QgYnJpZGdlX3MgeworCS8qIExvY2FsIFJlZ2lzdGVycwkJCSAgICAgICAweDAwMDAwMC0weDAwRkZGRiAqLworCisJLyogc3RhbmRhcmQgd2lkZ2V0IGNvbmZpZ3VyYXRpb24JICAgICAgIDB4MDAwMDAwLTB4MDAwMDU3ICovCisJd2lkZ2V0X2NmZ190CSAgICBiX3dpZGdldDsJCQkvKiAweDAwMDAwMCAqLworCisJLyogaGVscGVyIGZpZWxkbmFtZXMgZm9yIGFjY2Vzc2luZyBicmlkZ2Ugd2lkZ2V0ICovCisKKyNkZWZpbmUgYl93aWRfaWQJCQliX3dpZGdldC53X2lkCisjZGVmaW5lIGJfd2lkX3N0YXQJCQliX3dpZGdldC53X3N0YXR1cworI2RlZmluZSBiX3dpZF9lcnJfdXBwZXIJCQliX3dpZGdldC53X2Vycl91cHBlcl9hZGRyCisjZGVmaW5lIGJfd2lkX2Vycl9sb3dlcgkJCWJfd2lkZ2V0LndfZXJyX2xvd2VyX2FkZHIKKyNkZWZpbmUgYl93aWRfY29udHJvbAkJCWJfd2lkZ2V0LndfY29udHJvbAorI2RlZmluZSBiX3dpZF9yZXFfdGltZW91dAkJYl93aWRnZXQud19yZXFfdGltZW91dAorI2RlZmluZSBiX3dpZF9pbnRfdXBwZXIJCQliX3dpZGdldC53X2ludGRlc3RfdXBwZXJfYWRkcgorI2RlZmluZSBiX3dpZF9pbnRfbG93ZXIJCQliX3dpZGdldC53X2ludGRlc3RfbG93ZXJfYWRkcgorI2RlZmluZSBiX3dpZF9lcnJfY21kd29yZAkJYl93aWRnZXQud19lcnJfY21kX3dvcmQKKyNkZWZpbmUgYl93aWRfbGxwCQkJYl93aWRnZXQud19sbHBfY2ZnCisjZGVmaW5lIGJfd2lkX3RmbHVzaAkJCWJfd2lkZ2V0LndfdGZsdXNoCisKKwkvKiBicmlkZ2Utc3BlY2lmaWMgd2lkZ2V0IGNvbmZpZ3VyYXRpb24JMHgwMDAwNTgtMHgwMDAwN0YgKi8KKwlicmlkZ2VyZWdfdAkgICAgX3BhZF8wMDAwNTg7CisJYnJpZGdlcmVnX3QJICAgIGJfd2lkX2F1eF9lcnI7CQkvKiAweDAwMDA1QyAqLworCWJyaWRnZXJlZ190CSAgICBfcGFkXzAwMDA2MDsKKwlicmlkZ2VyZWdfdAkgICAgYl93aWRfcmVzcF91cHBlcjsJCS8qIDB4MDAwMDY0ICovCisJYnJpZGdlcmVnX3QJICAgIF9wYWRfMDAwMDY4OworCWJyaWRnZXJlZ190CSAgICBiX3dpZF9yZXNwX2xvd2VyOwkJLyogMHgwMDAwNkMgKi8KKwlicmlkZ2VyZWdfdAkgICAgX3BhZF8wMDAwNzA7CisJYnJpZGdlcmVnX3QJICAgIGJfd2lkX3RzdF9waW5fY3RybDsJCS8qIDB4MDAwMDc0ICovCisJYnJpZGdlcmVnX3QJX3BhZF8wMDAwNzhbMl07CisKKwkvKiBQTVUgJiBNYXAgMHgwMDAwODAtMHgwMDAwOEYgKi8KKwlicmlkZ2VyZWdfdAlfcGFkXzAwMDA4MDsKKwlicmlkZ2VyZWdfdAliX2Rpcl9tYXA7CQkJLyogMHgwMDAwODQgKi8KKwlicmlkZ2VyZWdfdAlfcGFkXzAwMDA4OFsyXTsKKworCS8qIFNTUkFNIDB4MDAwMDkwLTB4MDAwMDlGICovCisJYnJpZGdlcmVnX3QJX3BhZF8wMDAwOTA7CisJYnJpZGdlcmVnX3QJYl9yYW1fcGVycjsJCQkvKiAweDAwMDA5NCAqLworCWJyaWRnZXJlZ190CV9wYWRfMDAwMDk4WzJdOworCisJLyogQXJiaXRyYXRpb24gMHgwMDAwQTAtMHgwMDAwQUYgKi8KKwlicmlkZ2VyZWdfdAlfcGFkXzAwMDBBMDsKKwlicmlkZ2VyZWdfdAliX2FyYjsJCQkJLyogMHgwMDAwQTQgKi8KKwlicmlkZ2VyZWdfdAlfcGFkXzAwMDBBOFsyXTsKKworCS8qIE51bWJlciBJbiBBIENhbiAweDAwMDBCMC0weDAwMDBCRiAqLworCWJyaWRnZXJlZ190CV9wYWRfMDAwMEIwOworCWJyaWRnZXJlZ190CWJfbmljOwkJCQkvKiAweDAwMDBCNCAqLworCWJyaWRnZXJlZ190CV9wYWRfMDAwMEI4WzJdOworCisJLyogUENJL0dJTyAweDAwMDBDMC0weDAwMDBGRiAqLworCWJyaWRnZXJlZ190CV9wYWRfMDAwMEMwOworCWJyaWRnZXJlZ190CWJfYnVzX3RpbWVvdXQ7CQkJLyogMHgwMDAwQzQgKi8KKyNkZWZpbmUgYl9wY2lfYnVzX3RpbWVvdXQgYl9idXNfdGltZW91dAorCisJYnJpZGdlcmVnX3QJX3BhZF8wMDAwQzg7CisJYnJpZGdlcmVnX3QJYl9wY2lfY2ZnOwkJCS8qIDB4MDAwMENDICovCisJYnJpZGdlcmVnX3QJX3BhZF8wMDAwRDA7CisJYnJpZGdlcmVnX3QJYl9wY2lfZXJyX3VwcGVyOwkJLyogMHgwMDAwRDQgKi8KKwlicmlkZ2VyZWdfdAlfcGFkXzAwMDBEODsKKwlicmlkZ2VyZWdfdAliX3BjaV9lcnJfbG93ZXI7CQkvKiAweDAwMDBEQyAqLworCWJyaWRnZXJlZ190CV9wYWRfMDAwMEUwWzhdOworI2RlZmluZSBiX2dpb19lcnJfbG93ZXIgYl9wY2lfZXJyX2xvd2VyCisjZGVmaW5lIGJfZ2lvX2Vycl91cHBlciBiX3BjaV9lcnJfdXBwZXIKKworCS8qIEludGVycnVwdCAweDAwMDEwMC0weDAwMDFGRiAqLworCWJyaWRnZXJlZ190CV9wYWRfMDAwMTAwOworCWJyaWRnZXJlZ190CWJfaW50X3N0YXR1czsJCQkvKiAweDAwMDEwNCAqLworCWJyaWRnZXJlZ190CV9wYWRfMDAwMTA4OworCWJyaWRnZXJlZ190CWJfaW50X2VuYWJsZTsJCQkvKiAweDAwMDEwQyAqLworCWJyaWRnZXJlZ190CV9wYWRfMDAwMTEwOworCWJyaWRnZXJlZ190CWJfaW50X3JzdF9zdGF0OwkJCS8qIDB4MDAwMTE0ICovCisJYnJpZGdlcmVnX3QJX3BhZF8wMDAxMTg7CisJYnJpZGdlcmVnX3QJYl9pbnRfbW9kZTsJCQkvKiAweDAwMDExQyAqLworCWJyaWRnZXJlZ190CV9wYWRfMDAwMTIwOworCWJyaWRnZXJlZ190CWJfaW50X2RldmljZTsJCQkvKiAweDAwMDEyNCAqLworCWJyaWRnZXJlZ190CV9wYWRfMDAwMTI4OworCWJyaWRnZXJlZ190CWJfaW50X2hvc3RfZXJyOwkJCS8qIDB4MDAwMTJDICovCisKKwlzdHJ1Y3QgeworCQlicmlkZ2VyZWdfdAlfX3BhZDsJCQkvKiAweDAwMDF7MzAsLCw2OH0gKi8KKwkJYnJpZGdlcmVnX3QJYWRkcjsJCQkvKiAweDAwMDF7MzQsLCw2Q30gKi8KKwl9IGJfaW50X2FkZHJbOF07CQkJCS8qIDB4MDAwMTMwICovCisKKwlicmlkZ2VyZWdfdAlfcGFkXzAwMDE3MFszNl07CisKKwkvKiBEZXZpY2UgMHgwMDAyMDAtMHgwMDAzRkYgKi8KKwlzdHJ1Y3QgeworCQlicmlkZ2VyZWdfdAlfX3BhZDsJCQkvKiAweDAwMDJ7MDAsLCwzOH0gKi8KKwkJYnJpZGdlcmVnX3QJcmVnOwkJCS8qIDB4MDAwMnswNCwsLDNDfSAqLworCX0gYl9kZXZpY2VbOF07CQkJCQkvKiAweDAwMDIwMCAqLworCisJc3RydWN0IHsKKwkJYnJpZGdlcmVnX3QJX19wYWQ7CQkJLyogMHgwMDAyezQwLCwsNzh9ICovCisJCWJyaWRnZXJlZ190CXJlZzsJCQkvKiAweDAwMDJ7NDQsLCw3Q30gKi8KKwl9IGJfd3JfcmVxX2J1Zls4XTsJCQkJLyogMHgwMDAyNDAgKi8KKworCXN0cnVjdCB7CisJCWJyaWRnZXJlZ190CV9fcGFkOwkJCS8qIDB4MDAwMns4MCwsLDg4fSAqLworCQlicmlkZ2VyZWdfdAlyZWc7CQkJLyogMHgwMDAyezg0LCwsOEN9ICovCisJfSBiX3JyYl9tYXBbMl07CQkJCQkvKiAweDAwMDI4MCAqLworI2RlZmluZQliX2V2ZW5fcmVzcAliX3JyYl9tYXBbMF0ucmVnCQkvKiAweDAwMDI4NCAqLworI2RlZmluZQliX29kZF9yZXNwCWJfcnJiX21hcFsxXS5yZWcJCS8qIDB4MDAwMjhDICovCisKKwlicmlkZ2VyZWdfdAlfcGFkXzAwMDI5MDsKKwlicmlkZ2VyZWdfdAliX3Jlc3Bfc3RhdHVzOwkJCS8qIDB4MDAwMjk0ICovCisJYnJpZGdlcmVnX3QJX3BhZF8wMDAyOTg7CisJYnJpZGdlcmVnX3QJYl9yZXNwX2NsZWFyOwkJCS8qIDB4MDAwMjlDICovCisKKwlicmlkZ2VyZWdfdAlfcGFkXzAwMDJBMFsyNF07CisKKwljaGFyCQlfcGFkXzAwMDMwMFsweDEwMDAwIC0gMHgwMDAzMDBdOworCisJLyogSW50ZXJuYWwgQWRkcmVzcyBUcmFuc2xhdGlvbiBFbnRyeSBSQU0gMHgwMTAwMDAtMHgwMTAzRkYgKi8KKwl1bmlvbiB7CisJCWJyaWRnZV9hdGVfdAl3cjsJCQkvKiB3cml0ZS1vbmx5ICovCisJCXN0cnVjdCB7CisJCQlicmlkZ2VyZWdfdAlfcF9wYWQ7CisJCQlicmlkZ2VyZWdfdAlyZDsJCS8qIHJlYWQtb25seSAqLworCQl9CQkJaGk7CisJfQkJCSAgICBiX2ludF9hdGVfcmFtWzEyOF07CisKKwljaGFyCV9wYWRfMDEwNDAwWzB4MTEwMDAgLSAweDAxMDQwMF07CisKKwkvKiBJbnRlcm5hbCBBZGRyZXNzIFRyYW5zbGF0aW9uIEVudHJ5IFJBTSBMT1cgMHgwMTEwMDAtMHgwMTEzRkYgKi8KKwlzdHJ1Y3QgeworCQlicmlkZ2VyZWdfdAlfcF9wYWQ7CisJCWJyaWRnZXJlZ190CXJkOwkJLyogcmVhZC1vbmx5ICovCisJfSBiX2ludF9hdGVfcmFtX2xvWzEyOF07CisKKwljaGFyCV9wYWRfMDExNDAwWzB4MjAwMDAgLSAweDAxMTQwMF07CisKKwkvKiBQQ0kgRGV2aWNlIENvbmZpZ3VyYXRpb24gU3BhY2VzIDB4MDIwMDAwLTB4MDI3RkZGICovCisJdW5pb24gewkJCQkvKiBtYWtlIGFsbCBhY2Nlc3Mgc2l6ZXMgYXZhaWxhYmxlLiAqLworCQl1OAljWzB4MTAwMCAvIDFdOworCQl1MTYJc1sweDEwMDAgLyAyXTsKKwkJdTMyCWxbMHgxMDAwIC8gNF07CisJCXU2NAlkWzB4MTAwMCAvIDhdOworCQl1bmlvbiB7CisJCQl1OAljWzB4MTAwIC8gMV07CisJCQl1MTYJc1sweDEwMCAvIDJdOworCQkJdTMyCWxbMHgxMDAgLyA0XTsKKwkJCXU2NAlkWzB4MTAwIC8gOF07CisJCX0gZls4XTsKKwl9IGJfdHlwZTBfY2ZnX2Rldls4XTsJCQkJCS8qIDB4MDIwMDAwICovCisKKyAgICAvKiBQQ0kgVHlwZSAxIENvbmZpZ3VyYXRpb24gU3BhY2UgMHgwMjgwMDAtMHgwMjhGRkYgKi8KKwl1bmlvbiB7CQkJCS8qIG1ha2UgYWxsIGFjY2VzcyBzaXplcyBhdmFpbGFibGUuICovCisJCXU4CWNbMHgxMDAwIC8gMV07CisJCXUxNglzWzB4MTAwMCAvIDJdOworCQl1MzIJbFsweDEwMDAgLyA0XTsKKwkJdTY0CWRbMHgxMDAwIC8gOF07CisJfSBiX3R5cGUxX2NmZzsJCQkJCS8qIDB4MDI4MDAwLTB4MDI5MDAwICovCisKKwljaGFyCV9wYWRfMDI5MDAwWzB4MDA3MDAwXTsJCQkvKiAweDAyOTAwMC0weDAzMDAwMCAqLworCisJLyogUENJIEludGVycnVwdCBBY2tub3dsZWRnZSBDeWNsZSAweDAzMDAwMCAqLworCXVuaW9uIHsKKwkJdTgJY1s4IC8gMV07CisJCXUxNglzWzggLyAyXTsKKwkJdTMyCWxbOCAvIDRdOworCQl1NjQJZFs4IC8gOF07CisJfSBiX3BjaV9pYWNrOwkJCQkJCS8qIDB4MDMwMDAwICovCisKKwl1OAlfcGFkXzAzMDAwN1sweDA0ZmZmOF07CQkJLyogMHgwMzAwMDgtMHgwN0ZGRkYgKi8KKworCS8qIEV4dGVybmFsIEFkZHJlc3MgVHJhbnNsYXRpb24gRW50cnkgUkFNIDB4MDgwMDAwLTB4MEZGRkZGICovCisJYnJpZGdlX2F0ZV90ICAgIGJfZXh0X2F0ZV9yYW1bMHgxMDAwMF07CisKKwkvKiBSZXNlcnZlZCAweDEwMDAwMC0weDFGRkZGRiAqLworCWNoYXIJX3BhZF8xMDAwMDBbMHgyMDAwMDAtMHgxMDAwMDBdOworCisJLyogUENJL0dJTyBEZXZpY2UgU3BhY2VzIDB4MjAwMDAwLTB4QkZGRkZGICovCisJdW5pb24gewkJCQkvKiBtYWtlIGFsbCBhY2Nlc3Mgc2l6ZXMgYXZhaWxhYmxlLiAqLworCQl1OAljWzB4MTAwMDAwIC8gMV07CisJCXUxNglzWzB4MTAwMDAwIC8gMl07CisJCXUzMglsWzB4MTAwMDAwIC8gNF07CisJCXU2NAlkWzB4MTAwMDAwIC8gOF07CisJfSBiX2RldmlvX3Jhd1sxMF07CQkJCS8qIDB4MjAwMDAwICovCisKKwkvKiBiX2RldmlvIG1hY3JvIGlzIGEgYml0IHN0cmFuZ2U7IGl0IHJlZmxlY3RzIHRoZQorCSAqIGZhY3QgdGhhdCB0aGUgQnJpZGdlIEFTSUMgcHJvdmlkZXMgMk0gZm9yIHRoZQorCSAqIGZpcnN0IHR3byBEZXZJTyB3aW5kb3dzIGFuZCAxTSBmb3IgdGhlIG90aGVyIHNpeC4KKwkgKi8KKyNkZWZpbmUgYl9kZXZpbyhuKQliX2RldmlvX3Jhd1soKG4pPDIpPyhuKjIpOihuKzIpXQorCisJLyogRXh0ZXJuYWwgRmxhc2ggUHJvbXMgMSwwIDB4QzAwMDAwLTB4RkZGRkZGICovCisJdW5pb24gewkJLyogbWFrZSBhbGwgYWNjZXNzIHNpemVzIGF2YWlsYWJsZS4gKi8KKwkJdTgJY1sweDQwMDAwMCAvIDFdOwkvKiByZWFkLW9ubHkgKi8KKwkJdTE2CXNbMHg0MDAwMDAgLyAyXTsJLyogcmVhZC13cml0ZSAqLworCQl1MzIJbFsweDQwMDAwMCAvIDRdOwkvKiByZWFkLW9ubHkgKi8KKwkJdTY0CWRbMHg0MDAwMDAgLyA4XTsJLyogcmVhZC1vbmx5ICovCisJfSBiX2V4dGVybmFsX2ZsYXNoOwkJCS8qIDB4QzAwMDAwICovCit9IGJyaWRnZV90OworCisvKgorICogRmllbGQgZm9ybWF0cyBmb3IgRXJyb3IgQ29tbWFuZCBXb3JkIGFuZCBBdXhpbGxhcnkgRXJyb3IgQ29tbWFuZCBXb3JkCisgKiBvZiBicmlkZ2UuCisgKi8KK3R5cGVkZWYgc3RydWN0IGJyaWRnZV9lcnJfY21kd29yZF9zIHsKKwl1bmlvbiB7CisJCXUzMgkJY21kX3dvcmQ7CisJCXN0cnVjdCB7CisJCQl1MzIJZGlkbjo0LAkJLyogRGVzdGluYXRpb24gSUQgKi8KKwkJCQlzaWRuOjQsCQkvKiBTb3VyY2UgSUQJICAqLworCQkJCXBhY3R5cDo0LAkvKiBQYWNrZXQgdHlwZQkgICovCisJCQkJdG51bTo1LAkJLyogVHJhbnMgTnVtYmVyCSAgKi8KKwkJCQljb2g6MSwJCS8qIENvaCBUcmFuc2FjdGkgICovCisJCQkJZHM6MiwJCS8qIERhdGEgc2l6ZQkgICovCisJCQkJZ2JyOjEsCQkvKiBHQlIgZW5hYmxlCSAgKi8KKwkJCQl2YnBtOjEsCQkvKiBWQlBNIG1lc3NhZ2UJICAqLworCQkJCWVycm9yOjEsCS8qIEVycm9yIG9jY3VycmVkICAqLworCQkJCWJhcnI6MSwJCS8qIEJhcnJpZXIgb3AJICAqLworCQkJCXJzdmQ6ODsKKwkJfSBiZXJyX3N0OworCX0gYmVycl91bjsKK30gYnJpZGdlX2Vycl9jbWR3b3JkX3Q7CisKKyNkZWZpbmUgYmVycl9maWVsZAliZXJyX3VuLmJlcnJfc3QKKyNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCisKKy8qCisgKiBUaGUgdmFsdWVzIG9mIHRoZXNlIG1hY3JvcyBjYW4gYW5kIHNob3VsZCBiZSBjcm9zc2NoZWNrZWQKKyAqIHJlZ3VsYXJseSBhZ2FpbnN0IHRoZSBvZmZzZXRzIG9mIHRoZSBsaWtlLW5hbWVkIGZpZWxkcworICogd2l0aGluIHRoZSAiYnJpZGdlX3QiIHN0cnVjdHVyZSBhYm92ZS4KKyAqLworCisvKiBCeXRlIG9mZnNldCBtYWNyb3MgZm9yIEJyaWRnZSBpbnRlcm5hbCByZWdpc3RlcnMgKi8KKworI2RlZmluZSBCUklER0VfV0lEX0lECQlXSURHRVRfSUQKKyNkZWZpbmUgQlJJREdFX1dJRF9TVEFUCQlXSURHRVRfU1RBVFVTCisjZGVmaW5lIEJSSURHRV9XSURfRVJSX1VQUEVSCVdJREdFVF9FUlJfVVBQRVJfQUREUgorI2RlZmluZSBCUklER0VfV0lEX0VSUl9MT1dFUglXSURHRVRfRVJSX0xPV0VSX0FERFIKKyNkZWZpbmUgQlJJREdFX1dJRF9DT05UUk9MCVdJREdFVF9DT05UUk9MCisjZGVmaW5lIEJSSURHRV9XSURfUkVRX1RJTUVPVVQJV0lER0VUX1JFUV9USU1FT1VUCisjZGVmaW5lIEJSSURHRV9XSURfSU5UX1VQUEVSCVdJREdFVF9JTlRERVNUX1VQUEVSX0FERFIKKyNkZWZpbmUgQlJJREdFX1dJRF9JTlRfTE9XRVIJV0lER0VUX0lOVERFU1RfTE9XRVJfQUREUgorI2RlZmluZSBCUklER0VfV0lEX0VSUl9DTURXT1JECVdJREdFVF9FUlJfQ01EX1dPUkQKKyNkZWZpbmUgQlJJREdFX1dJRF9MTFAJCVdJREdFVF9MTFBfQ0ZHCisjZGVmaW5lIEJSSURHRV9XSURfVEZMVVNICVdJREdFVF9URkxVU0gKKworI2RlZmluZSBCUklER0VfV0lEX0FVWF9FUlIJMHgwMDAwNUMJLyogQXV4IEVycm9yIENvbW1hbmQgV29yZCAqLworI2RlZmluZSBCUklER0VfV0lEX1JFU1BfVVBQRVIJMHgwMDAwNjQJLyogUmVzcG9uc2UgQnVmIFVwcGVyIEFkZHIgKi8KKyNkZWZpbmUgQlJJREdFX1dJRF9SRVNQX0xPV0VSCTB4MDAwMDZDCS8qIFJlc3BvbnNlIEJ1ZiBMb3dlciBBZGRyICovCisjZGVmaW5lIEJSSURHRV9XSURfVFNUX1BJTl9DVFJMIDB4MDAwMDc0CS8qIFRlc3QgcGluIGNvbnRyb2wgKi8KKworI2RlZmluZSBCUklER0VfRElSX01BUAkJMHgwMDAwODQJLyogRGlyZWN0IE1hcCByZWcgKi8KKworI2RlZmluZSBCUklER0VfUkFNX1BFUlIJCTB4MDAwMDk0CS8qIFNTUkFNIFBhcml0eSBFcnJvciAqLworCisjZGVmaW5lIEJSSURHRV9BUkIJCTB4MDAwMEE0CS8qIEFyYml0cmF0aW9uIFByaW9yaXR5IHJlZyAqLworCisjZGVmaW5lIEJSSURHRV9OSUMJCTB4MDAwMEI0CS8qIE51bWJlciBJbiBBIENhbiAqLworCisjZGVmaW5lIEJSSURHRV9CVVNfVElNRU9VVAkweDAwMDBDNAkvKiBCdXMgVGltZW91dCBSZWdpc3RlciAqLworI2RlZmluZSBCUklER0VfUENJX0JVU19USU1FT1VUCUJSSURHRV9CVVNfVElNRU9VVAorI2RlZmluZSBCUklER0VfUENJX0NGRwkJMHgwMDAwQ0MJLyogUENJIFR5cGUgMSBDb25maWcgcmVnICovCisjZGVmaW5lIEJSSURHRV9QQ0lfRVJSX1VQUEVSCTB4MDAwMEQ0CS8qIFBDSSBlcnJvciBVcHBlciBBZGRyICovCisjZGVmaW5lIEJSSURHRV9QQ0lfRVJSX0xPV0VSCTB4MDAwMERDCS8qIFBDSSBlcnJvciBMb3dlciBBZGRyICovCisKKyNkZWZpbmUgQlJJREdFX0lOVF9TVEFUVVMJMHgwMDAxMDQJLyogSW50ZXJydXB0IFN0YXR1cyAqLworI2RlZmluZSBCUklER0VfSU5UX0VOQUJMRQkweDAwMDEwQwkvKiBJbnRlcnJ1cHQgRW5hYmxlcyAqLworI2RlZmluZSBCUklER0VfSU5UX1JTVF9TVEFUCTB4MDAwMTE0CS8qIFJlc2V0IEludHIgU3RhdHVzICovCisjZGVmaW5lIEJSSURHRV9JTlRfTU9ERQkJMHgwMDAxMUMJLyogSW50ZXJydXB0IE1vZGUgKi8KKyNkZWZpbmUgQlJJREdFX0lOVF9ERVZJQ0UJMHgwMDAxMjQJLyogSW50ZXJydXB0IERldmljZSAqLworI2RlZmluZSBCUklER0VfSU5UX0hPU1RfRVJSCTB4MDAwMTJDCS8qIEhvc3QgRXJyb3IgRmllbGQgKi8KKworI2RlZmluZSBCUklER0VfSU5UX0FERFIwCTB4MDAwMTM0CS8qIEhvc3QgQWRkcmVzcyBSZWcgKi8KKyNkZWZpbmUgQlJJREdFX0lOVF9BRERSX09GRgkweDAwMDAwOAkvKiBIb3N0IEFkZHIgb2Zmc2V0ICgxLi43KSAqLworI2RlZmluZSBCUklER0VfSU5UX0FERFIoeCkJKEJSSURHRV9JTlRfQUREUjArKHgpKkJSSURHRV9JTlRfQUREUl9PRkYpCisKKyNkZWZpbmUgQlJJREdFX0RFVklDRTAJCTB4MDAwMjA0CS8qIERldmljZSAwICovCisjZGVmaW5lIEJSSURHRV9ERVZJQ0VfT0ZGCTB4MDAwMDA4CS8qIERldmljZSBvZmZzZXQgKDEuLjcpICovCisjZGVmaW5lIEJSSURHRV9ERVZJQ0UoeCkJKEJSSURHRV9ERVZJQ0UwKyh4KSpCUklER0VfREVWSUNFX09GRikKKworI2RlZmluZSBCUklER0VfV1JfUkVRX0JVRjAJMHgwMDAyNDQJLyogV3JpdGUgUmVxdWVzdCBCdWZmZXIgMCAqLworI2RlZmluZSBCUklER0VfV1JfUkVRX0JVRl9PRkYJMHgwMDAwMDgJLyogQnVmZmVyIE9mZnNldCAoMS4uNykgKi8KKyNkZWZpbmUgQlJJREdFX1dSX1JFUV9CVUYoeCkJKEJSSURHRV9XUl9SRVFfQlVGMCsoeCkqQlJJREdFX1dSX1JFUV9CVUZfT0ZGKQorCisjZGVmaW5lIEJSSURHRV9FVkVOX1JFU1AJMHgwMDAyODQJLyogRXZlbiBEZXZpY2UgUmVzcG9uc2UgQnVmICovCisjZGVmaW5lIEJSSURHRV9PRERfUkVTUAkJMHgwMDAyOEMJLyogT2RkIERldmljZSBSZXNwb25zZSBCdWYgKi8KKworI2RlZmluZSBCUklER0VfUkVTUF9TVEFUVVMJMHgwMDAyOTQJLyogUmVhZCBSZXNwb25zZSBTdGF0dXMgcmVnICovCisjZGVmaW5lIEJSSURHRV9SRVNQX0NMRUFSCTB4MDAwMjlDCS8qIFJlYWQgUmVzcG9uc2UgQ2xlYXIgcmVnICovCisKKy8qIEJ5dGUgb2Zmc2V0IG1hY3JvcyBmb3IgQnJpZGdlIEkvTyBzcGFjZSAqLworCisjZGVmaW5lIEJSSURHRV9BVEVfUkFNCQkweDAwMDEwMDAwCS8qIEludGVybmFsIEFkZHIgWGxhdCBSYW0gKi8KKworI2RlZmluZSBCUklER0VfVFlQRTBfQ0ZHX0RFVjAJMHgwMDAyMDAwMAkvKiBUeXBlIDAgQ2ZnLCBEZXZpY2UgMCAqLworI2RlZmluZSBCUklER0VfVFlQRTBfQ0ZHX1NMT1RfT0ZGCTB4MDAwMDEwMDAJLyogVHlwZSAwIENmZyBTbG90IE9mZnNldCAoMS4uNykgKi8KKyNkZWZpbmUgQlJJREdFX1RZUEUwX0NGR19GVU5DX09GRgkweDAwMDAwMTAwCS8qIFR5cGUgMCBDZmcgRnVuYyBPZmZzZXQgKDEuLjcpICovCisjZGVmaW5lIEJSSURHRV9UWVBFMF9DRkdfREVWKHMpCQkoQlJJREdFX1RZUEUwX0NGR19ERVYwK1wKKwkJCQkJIChzKSpCUklER0VfVFlQRTBfQ0ZHX1NMT1RfT0ZGKQorI2RlZmluZSBCUklER0VfVFlQRTBfQ0ZHX0RFVkYocyxmKQkoQlJJREdFX1RZUEUwX0NGR19ERVYwK1wKKwkJCQkJIChzKSpCUklER0VfVFlQRTBfQ0ZHX1NMT1RfT0ZGK1wKKwkJCQkJIChmKSpCUklER0VfVFlQRTBfQ0ZHX0ZVTkNfT0ZGKQorCisjZGVmaW5lIEJSSURHRV9UWVBFMV9DRkcJMHgwMDAyODAwMAkvKiBUeXBlIDEgQ2ZnIHNwYWNlICovCisKKyNkZWZpbmUgQlJJREdFX1BDSV9JQUNLCQkweDAwMDMwMDAwCS8qIFBDSSBJbnRlcnJ1cHQgQWNrICovCisjZGVmaW5lIEJSSURHRV9FWFRfU1NSQU0JMHgwMDA4MDAwMAkvKiBFeHRlcm4gU1NSQU0gKEFURSkgKi8KKworLyogQnl0ZSBvZmZzZXQgbWFjcm9zIGZvciBCcmlkZ2UgZGV2aWNlIElPIHNwYWNlcyAqLworCisjZGVmaW5lIEJSSURHRV9ERVZfQ05UCQk4CS8qIFVwIHRvIDggZGV2aWNlcyBwZXIgYnJpZGdlICovCisjZGVmaW5lIEJSSURHRV9ERVZJTzAJCTB4MDAyMDAwMDAJLyogRGV2aWNlIElPIDAgQWRkciAqLworI2RlZmluZSBCUklER0VfREVWSU8xCQkweDAwNDAwMDAwCS8qIERldmljZSBJTyAxIEFkZHIgKi8KKyNkZWZpbmUgQlJJREdFX0RFVklPMgkJMHgwMDYwMDAwMAkvKiBEZXZpY2UgSU8gMiBBZGRyICovCisjZGVmaW5lIEJSSURHRV9ERVZJT19PRkYJMHgwMDEwMDAwMAkvKiBEZXZpY2UgSU8gT2Zmc2V0ICgzLi43KSAqLworCisjZGVmaW5lIEJSSURHRV9ERVZJT18yTUIJMHgwMDIwMDAwMAkvKiBEZXZpY2UgSU8gT2Zmc2V0ICgwLi4xKSAqLworI2RlZmluZSBCUklER0VfREVWSU9fMU1CCTB4MDAxMDAwMDAJLyogRGV2aWNlIElPIE9mZnNldCAoMi4uNykgKi8KKworI2RlZmluZSBCUklER0VfREVWSU8oeCkJCSgoeCk8PTEgPyBCUklER0VfREVWSU8wKyh4KSpCUklER0VfREVWSU9fMk1CIDogQlJJREdFX0RFVklPMisoKHgpLTIpKkJSSURHRV9ERVZJT18xTUIpCisKKyNkZWZpbmUgQlJJREdFX0VYVEVSTkFMX0ZMQVNICTB4MDBDMDAwMDAJLyogRXh0ZXJuYWwgRmxhc2ggUFJPTVMgKi8KKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAgICBCcmlkZ2UgcmVnaXN0ZXIgYml0IGZpZWxkIGRlZmluaXRpb25zCisgKi8KKworLyogV2lkZ2V0IHBhcnQgbnVtYmVyIG9mIGJyaWRnZSAqLworI2RlZmluZSBCUklER0VfV0lER0VUX1BBUlRfTlVNCQkweGMwMDIKKyNkZWZpbmUgWEJSSURHRV9XSURHRVRfUEFSVF9OVU0JCTB4ZDAwMgorCisvKiBNYW51ZmFjdHVyZXIgb2YgYnJpZGdlICovCisjZGVmaW5lIEJSSURHRV9XSURHRVRfTUZHUl9OVU0JCTB4MDM2CisjZGVmaW5lIFhCUklER0VfV0lER0VUX01GR1JfTlVNCQkweDAyNAorCisvKiBSZXZpc2lvbiBudW1iZXJzIGZvciBrbm93biBCcmlkZ2UgcmV2aXNpb25zICovCisjZGVmaW5lIEJSSURHRV9SRVZfQQkJCTB4MQorI2RlZmluZSBCUklER0VfUkVWX0IJCQkweDIKKyNkZWZpbmUgQlJJREdFX1JFVl9DCQkJMHgzCisjZGVmaW5lCUJSSURHRV9SRVZfRAkJCTB4NAorCisvKiBCcmlkZ2Ugd2lkZ2V0IHN0YXR1cyByZWdpc3RlciBiaXRzIGRlZmluaXRpb24gKi8KKworI2RlZmluZSBCUklER0VfU1RBVF9MTFBfUkVDX0NOVAkJKDB4RkZ1IDw8IDI0KQorI2RlZmluZSBCUklER0VfU1RBVF9MTFBfVFhfQ05UCQkoMHhGRiA8PCAxNikKKyNkZWZpbmUgQlJJREdFX1NUQVRfRkxBU0hfU0VMRUNUCSgweDEgPDwgNikKKyNkZWZpbmUgQlJJREdFX1NUQVRfUENJX0dJT19OCQkoMHgxIDw8IDUpCisjZGVmaW5lIEJSSURHRV9TVEFUX1BFTkRJTkcJCSgweDFGIDw8IDApCisKKy8qIEJyaWRnZSB3aWRnZXQgY29udHJvbCByZWdpc3RlciBiaXRzIGRlZmluaXRpb24gKi8KKyNkZWZpbmUgQlJJREdFX0NUUkxfRkxBU0hfV1JfRU4JCSgweDF1bCA8PCAzMSkKKyNkZWZpbmUgQlJJREdFX0NUUkxfRU5fQ0xLNTAJCSgweDEgPDwgMzApCisjZGVmaW5lIEJSSURHRV9DVFJMX0VOX0NMSzQwCQkoMHgxIDw8IDI5KQorI2RlZmluZSBCUklER0VfQ1RSTF9FTl9DTEszMwkJKDB4MSA8PCAyOCkKKyNkZWZpbmUgQlJJREdFX0NUUkxfUlNUKG4pCQkoKG4pIDw8IDI0KQorI2RlZmluZSBCUklER0VfQ1RSTF9SU1RfTUFTSwkJKEJSSURHRV9DVFJMX1JTVCgweEYpKQorI2RlZmluZSBCUklER0VfQ1RSTF9SU1RfUElOKHgpCQkoQlJJREdFX0NUUkxfUlNUKDB4MSA8PCAoeCkpKQorI2RlZmluZSBCUklER0VfQ1RSTF9JT19TV0FQCQkoMHgxIDw8IDIzKQorI2RlZmluZSBCUklER0VfQ1RSTF9NRU1fU1dBUAkJKDB4MSA8PCAyMikKKyNkZWZpbmUgQlJJREdFX0NUUkxfUEFHRV9TSVpFCQkoMHgxIDw8IDIxKQorI2RlZmluZSBCUklER0VfQ1RSTF9TU19QQVJfQkFECQkoMHgxIDw8IDIwKQorI2RlZmluZSBCUklER0VfQ1RSTF9TU19QQVJfRU4JCSgweDEgPDwgMTkpCisjZGVmaW5lIEJSSURHRV9DVFJMX1NTUkFNX1NJWkUobikJKChuKSA8PCAxNykKKyNkZWZpbmUgQlJJREdFX0NUUkxfU1NSQU1fU0laRV9NQVNLCShCUklER0VfQ1RSTF9TU1JBTV9TSVpFKDB4MykpCisjZGVmaW5lIEJSSURHRV9DVFJMX1NTUkFNXzUxMksJCShCUklER0VfQ1RSTF9TU1JBTV9TSVpFKDB4MykpCisjZGVmaW5lIEJSSURHRV9DVFJMX1NTUkFNXzEyOEsJCShCUklER0VfQ1RSTF9TU1JBTV9TSVpFKDB4MikpCisjZGVmaW5lIEJSSURHRV9DVFJMX1NTUkFNXzY0SwkJKEJSSURHRV9DVFJMX1NTUkFNX1NJWkUoMHgxKSkKKyNkZWZpbmUgQlJJREdFX0NUUkxfU1NSQU1fMUsJCShCUklER0VfQ1RSTF9TU1JBTV9TSVpFKDB4MCkpCisjZGVmaW5lIEJSSURHRV9DVFJMX0ZfQkFEX1BLVAkJKDB4MSA8PCAxNikKKyNkZWZpbmUgQlJJREdFX0NUUkxfTExQX1hCQVJfQ1JEKG4pCSgobikgPDwgMTIpCisjZGVmaW5lIEJSSURHRV9DVFJMX0xMUF9YQkFSX0NSRF9NQVNLCShCUklER0VfQ1RSTF9MTFBfWEJBUl9DUkQoMHhmKSkKKyNkZWZpbmUgQlJJREdFX0NUUkxfQ0xSX1JMTFBfQ05UCSgweDEgPDwgMTEpCisjZGVmaW5lIEJSSURHRV9DVFJMX0NMUl9UTExQX0NOVAkoMHgxIDw8IDEwKQorI2RlZmluZSBCUklER0VfQ1RSTF9TWVNfRU5ECQkoMHgxIDw8IDkpCisjZGVmaW5lIEJSSURHRV9DVFJMX01BWF9UUkFOUyhuKQkoKG4pIDw8IDQpCisjZGVmaW5lIEJSSURHRV9DVFJMX01BWF9UUkFOU19NQVNLCShCUklER0VfQ1RSTF9NQVhfVFJBTlMoMHgxZikpCisjZGVmaW5lIEJSSURHRV9DVFJMX1dJREdFVF9JRChuKQkoKG4pIDw8IDApCisjZGVmaW5lIEJSSURHRV9DVFJMX1dJREdFVF9JRF9NQVNLCShCUklER0VfQ1RSTF9XSURHRVRfSUQoMHhmKSkKKworLyogQnJpZGdlIFJlc3BvbnNlIGJ1ZmZlciBFcnJvciBVcHBlciBSZWdpc3RlciBiaXQgZmllbGRzIGRlZmluaXRpb24gKi8KKyNkZWZpbmUgQlJJREdFX1JFU1BfRVJSVVBQUl9ERVZOVU1fU0hGVCAoMjApCisjZGVmaW5lIEJSSURHRV9SRVNQX0VSUlVQUFJfREVWTlVNX01BU0sgKDB4NyA8PCBCUklER0VfUkVTUF9FUlJVUFBSX0RFVk5VTV9TSEZUKQorI2RlZmluZSBCUklER0VfUkVTUF9FUlJVUFBSX0JVRk5VTV9TSEZUICgxNikKKyNkZWZpbmUgQlJJREdFX1JFU1BfRVJSVVBQUl9CVUZOVU1fTUFTSyAoMHhGIDw8IEJSSURHRV9SRVNQX0VSUlVQUFJfQlVGTlVNX1NIRlQpCisjZGVmaW5lIEJSSURHRV9SRVNQX0VSUlJVUFBSX0JVRk1BU0sJKDB4RkZGRikKKworI2RlZmluZSBCUklER0VfUkVTUF9FUlJVUFBSX0JVRk5VTSh4KQlcCisJCQkoKCh4KSAmIEJSSURHRV9SRVNQX0VSUlVQUFJfQlVGTlVNX01BU0spID4+IFwKKwkJCQlCUklER0VfUkVTUF9FUlJVUFBSX0JVRk5VTV9TSEZUKQorCisjZGVmaW5lIEJSSURHRV9SRVNQX0VSUlVQUFJfREVWSUNFKHgpCVwKKwkJCSgoKHgpICYJIEJSSURHRV9SRVNQX0VSUlVQUFJfREVWTlVNX01BU0spID4+IFwKKwkJCQkgQlJJREdFX1JFU1BfRVJSVVBQUl9ERVZOVU1fU0hGVCkKKworLyogQnJpZGdlIGRpcmVjdCBtYXBwaW5nIHJlZ2lzdGVyIGJpdHMgZGVmaW5pdGlvbiAqLworI2RlZmluZSBCUklER0VfRElSTUFQX1dfSURfU0hGVAkJMjAKKyNkZWZpbmUgQlJJREdFX0RJUk1BUF9XX0lECQkoMHhmIDw8IEJSSURHRV9ESVJNQVBfV19JRF9TSEZUKQorI2RlZmluZSBCUklER0VfRElSTUFQX1JNRl82NAkJKDB4MSA8PCAxOCkKKyNkZWZpbmUgQlJJREdFX0RJUk1BUF9BREQ1MTIJCSgweDEgPDwgMTcpCisjZGVmaW5lIEJSSURHRV9ESVJNQVBfT0ZGCQkoMHgxZmZmZiA8PCAwKQorI2RlZmluZSBCUklER0VfRElSTUFQX09GRl9BRERSU0hGVAkoMzEpCS8qIGxzYml0IG9mIERJUk1BUF9PRkYgaXMgeHRhbGsgYWRkcmVzcyBiaXQgMzEgKi8KKworLyogQnJpZGdlIEFyYml0cmF0aW9uIHJlZ2lzdGVyIGJpdHMgZGVmaW5pdGlvbiAqLworI2RlZmluZSBCUklER0VfQVJCX1JFUV9XQUlUX1RJQ0soeCkJKCh4KSA8PCAxNikKKyNkZWZpbmUgQlJJREdFX0FSQl9SRVFfV0FJVF9USUNLX01BU0sJQlJJREdFX0FSQl9SRVFfV0FJVF9USUNLKDB4MykKKyNkZWZpbmUgQlJJREdFX0FSQl9SRVFfV0FJVF9FTih4KQkoKHgpIDw8IDgpCisjZGVmaW5lIEJSSURHRV9BUkJfUkVRX1dBSVRfRU5fTUFTSwlCUklER0VfQVJCX1JFUV9XQUlUX0VOKDB4ZmYpCisjZGVmaW5lIEJSSURHRV9BUkJfRlJFRVpFX0dOVAkJKDEgPDwgNikKKyNkZWZpbmUgQlJJREdFX0FSQl9IUFJJX1JJTkdfQjIJCSgxIDw8IDUpCisjZGVmaW5lIEJSSURHRV9BUkJfSFBSSV9SSU5HX0IxCQkoMSA8PCA0KQorI2RlZmluZSBCUklER0VfQVJCX0hQUklfUklOR19CMAkJKDEgPDwgMykKKyNkZWZpbmUgQlJJREdFX0FSQl9MUFJJX1JJTkdfQjIJCSgxIDw8IDIpCisjZGVmaW5lIEJSSURHRV9BUkJfTFBSSV9SSU5HX0IxCQkoMSA8PCAxKQorI2RlZmluZSBCUklER0VfQVJCX0xQUklfUklOR19CMAkJKDEgPDwgMCkKKworLyogQnJpZGdlIEJ1cyB0aW1lLW91dCByZWdpc3RlciBiaXRzIGRlZmluaXRpb24gKi8KKyNkZWZpbmUgQlJJREdFX0JVU19QQ0lfUkVUUllfSExEKHgpCSgoeCkgPDwgMTYpCisjZGVmaW5lIEJSSURHRV9CVVNfUENJX1JFVFJZX0hMRF9NQVNLCUJSSURHRV9CVVNfUENJX1JFVFJZX0hMRCgweDFmKQorI2RlZmluZSBCUklER0VfQlVTX0dJT19USU1FT1VUCQkoMSA8PCAxMikKKyNkZWZpbmUgQlJJREdFX0JVU19QQ0lfUkVUUllfQ05UKHgpCSgoeCkgPDwgMCkKKyNkZWZpbmUgQlJJREdFX0JVU19QQ0lfUkVUUllfTUFTSwlCUklER0VfQlVTX1BDSV9SRVRSWV9DTlQoMHgzZmYpCisKKy8qIEJyaWRnZSBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyIGJpdHMgZGVmaW5pdGlvbiAqLworI2RlZmluZSBCUklER0VfSVNSX01VTFRJX0VSUgkJKDB4MXUgPDwgMzEpCisjZGVmaW5lIEJSSURHRV9JU1JfUE1VX0VTSVpFX0ZBVUxUCSgweDEgPDwgMzApCisjZGVmaW5lIEJSSURHRV9JU1JfVU5FWFBfUkVTUAkJKDB4MSA8PCAyOSkKKyNkZWZpbmUgQlJJREdFX0lTUl9CQURfWFJFU1BfUEtUCSgweDEgPDwgMjgpCisjZGVmaW5lIEJSSURHRV9JU1JfQkFEX1hSRVFfUEtUCQkoMHgxIDw8IDI3KQorI2RlZmluZSBCUklER0VfSVNSX1JFU1BfWFRMS19FUlIJKDB4MSA8PCAyNikKKyNkZWZpbmUgQlJJREdFX0lTUl9SRVFfWFRMS19FUlIJCSgweDEgPDwgMjUpCisjZGVmaW5lIEJSSURHRV9JU1JfSU5WTERfQUREUgkJKDB4MSA8PCAyNCkKKyNkZWZpbmUgQlJJREdFX0lTUl9VTlNVUFBPUlRFRF9YT1AJKDB4MSA8PCAyMykKKyNkZWZpbmUgQlJJREdFX0lTUl9YUkVRX0ZJRk9fT0ZMT1cJKDB4MSA8PCAyMikKKyNkZWZpbmUgQlJJREdFX0lTUl9MTFBfUkVDX1NORVJSCSgweDEgPDwgMjEpCisjZGVmaW5lIEJSSURHRV9JU1JfTExQX1JFQ19DQkVSUgkoMHgxIDw8IDIwKQorI2RlZmluZSBCUklER0VfSVNSX0xMUF9SQ1RZCQkoMHgxIDw8IDE5KQorI2RlZmluZSBCUklER0VfSVNSX0xMUF9UWF9SRVRSWQkJKDB4MSA8PCAxOCkKKyNkZWZpbmUgQlJJREdFX0lTUl9MTFBfVENUWQkJKDB4MSA8PCAxNykKKyNkZWZpbmUgQlJJREdFX0lTUl9TU1JBTV9QRVJSCQkoMHgxIDw8IDE2KQorI2RlZmluZSBCUklER0VfSVNSX1BDSV9BQk9SVAkJKDB4MSA8PCAxNSkKKyNkZWZpbmUgQlJJREdFX0lTUl9QQ0lfUEFSSVRZCQkoMHgxIDw8IDE0KQorI2RlZmluZSBCUklER0VfSVNSX1BDSV9TRVJSCQkoMHgxIDw8IDEzKQorI2RlZmluZSBCUklER0VfSVNSX1BDSV9QRVJSCQkoMHgxIDw8IDEyKQorI2RlZmluZSBCUklER0VfSVNSX1BDSV9NU1RfVElNRU9VVAkoMHgxIDw8IDExKQorI2RlZmluZSBCUklER0VfSVNSX0dJT19NU1RfVElNRU9VVAlCUklER0VfSVNSX1BDSV9NU1RfVElNRU9VVAorI2RlZmluZSBCUklER0VfSVNSX1BDSV9SRVRSWV9DTlQJKDB4MSA8PCAxMCkKKyNkZWZpbmUgQlJJREdFX0lTUl9YUkVBRF9SRVFfVElNRU9VVAkoMHgxIDw8IDkpCisjZGVmaW5lIEJSSURHRV9JU1JfR0lPX0JfRU5CTF9FUlIJKDB4MSA8PCA4KQorI2RlZmluZSBCUklER0VfSVNSX0lOVF9NU0sJCSgweGZmIDw8IDApCisjZGVmaW5lIEJSSURHRV9JU1JfSU5UKHgpCQkoMHgxIDw8ICh4KSkKKworI2RlZmluZSBCUklER0VfSVNSX0xJTktfRVJST1IJCVwKKwkJKEJSSURHRV9JU1JfTExQX1JFQ19TTkVSUnxCUklER0VfSVNSX0xMUF9SRUNfQ0JFUlJ8CVwKKwkJIEJSSURHRV9JU1JfTExQX1JDVFl8QlJJREdFX0lTUl9MTFBfVFhfUkVUUll8CQlcCisJCSBCUklER0VfSVNSX0xMUF9UQ1RZKQorCisjZGVmaW5lIEJSSURHRV9JU1JfUENJQlVTX1BJT0VSUglcCisJCShCUklER0VfSVNSX1BDSV9NU1RfVElNRU9VVHxCUklER0VfSVNSX1BDSV9BQk9SVCkKKworI2RlZmluZSBCUklER0VfSVNSX1BDSUJVU19FUlJPUgkJXAorCQkoQlJJREdFX0lTUl9QQ0lCVVNfUElPRVJSfEJSSURHRV9JU1JfUENJX1BFUlJ8CQlcCisJCSBCUklER0VfSVNSX1BDSV9TRVJSfEJSSURHRV9JU1JfUENJX1JFVFJZX0NOVHwJCVwKKwkJIEJSSURHRV9JU1JfUENJX1BBUklUWSkKKworI2RlZmluZSBCUklER0VfSVNSX1hUQUxLX0VSUk9SCQlcCisJCShCUklER0VfSVNSX1hSRUFEX1JFUV9USU1FT1VUfEJSSURHRV9JU1JfWFJFUV9GSUZPX09GTE9XfFwKKwkJIEJSSURHRV9JU1JfVU5TVVBQT1JURURfWE9QfEJSSURHRV9JU1JfSU5WTERfQUREUnwJXAorCQkgQlJJREdFX0lTUl9SRVFfWFRMS19FUlJ8QlJJREdFX0lTUl9SRVNQX1hUTEtfRVJSfAlcCisJCSBCUklER0VfSVNSX0JBRF9YUkVRX1BLVHxCUklER0VfSVNSX0JBRF9YUkVTUF9QS1R8CVwKKwkJIEJSSURHRV9JU1JfVU5FWFBfUkVTUCkKKworI2RlZmluZSBCUklER0VfSVNSX0VSUk9SUwkJXAorCQkoQlJJREdFX0lTUl9MSU5LX0VSUk9SfEJSSURHRV9JU1JfUENJQlVTX0VSUk9SfAkJXAorCQkgQlJJREdFX0lTUl9YVEFMS19FUlJPUnxCUklER0VfSVNSX1NTUkFNX1BFUlJ8CQlcCisJCSBCUklER0VfSVNSX1BNVV9FU0laRV9GQVVMVCkKKworLyoKKyAqIExpc3Qgb2YgRXJyb3JzIHdoaWNoIGFyZSBmYXRhbCBhbmQga2lsbCB0aGUgc3l0ZW0KKyAqLworI2RlZmluZSBCUklER0VfSVNSX0VSUk9SX0ZBVEFMCQlcCisJCSgoQlJJREdFX0lTUl9YVEFMS19FUlJPUiAmIH5CUklER0VfSVNSX1hSRUFEX1JFUV9USU1FT1VUKXxcCisJCSBCUklER0VfSVNSX1BDSV9TRVJSfEJSSURHRV9JU1JfUENJX1BBUklUWSApCisKKyNkZWZpbmUgQlJJREdFX0lTUl9FUlJPUl9EVU1QCQlcCisJCShCUklER0VfSVNSX1BDSUJVU19FUlJPUnxCUklER0VfSVNSX1BNVV9FU0laRV9GQVVMVHwJXAorCQkgQlJJREdFX0lTUl9YVEFMS19FUlJPUnxCUklER0VfSVNSX1NTUkFNX1BFUlIpCisKKy8qIEJyaWRnZSBpbnRlcnJ1cHQgZW5hYmxlIHJlZ2lzdGVyIGJpdHMgZGVmaW5pdGlvbiAqLworI2RlZmluZSBCUklER0VfSU1SX1VORVhQX1JFU1AJCUJSSURHRV9JU1JfVU5FWFBfUkVTUAorI2RlZmluZSBCUklER0VfSU1SX1BNVV9FU0laRV9GQVVMVAlCUklER0VfSVNSX1BNVV9FU0laRV9GQVVMVAorI2RlZmluZSBCUklER0VfSU1SX0JBRF9YUkVTUF9QS1QJQlJJREdFX0lTUl9CQURfWFJFU1BfUEtUCisjZGVmaW5lIEJSSURHRV9JTVJfQkFEX1hSRVFfUEtUCQlCUklER0VfSVNSX0JBRF9YUkVRX1BLVAorI2RlZmluZSBCUklER0VfSU1SX1JFU1BfWFRMS19FUlIJQlJJREdFX0lTUl9SRVNQX1hUTEtfRVJSCisjZGVmaW5lIEJSSURHRV9JTVJfUkVRX1hUTEtfRVJSCQlCUklER0VfSVNSX1JFUV9YVExLX0VSUgorI2RlZmluZSBCUklER0VfSU1SX0lOVkxEX0FERFIJCUJSSURHRV9JU1JfSU5WTERfQUREUgorI2RlZmluZSBCUklER0VfSU1SX1VOU1VQUE9SVEVEX1hPUAlCUklER0VfSVNSX1VOU1VQUE9SVEVEX1hPUAorI2RlZmluZSBCUklER0VfSU1SX1hSRVFfRklGT19PRkxPVwlCUklER0VfSVNSX1hSRVFfRklGT19PRkxPVworI2RlZmluZSBCUklER0VfSU1SX0xMUF9SRUNfU05FUlIJQlJJREdFX0lTUl9MTFBfUkVDX1NORVJSCisjZGVmaW5lIEJSSURHRV9JTVJfTExQX1JFQ19DQkVSUglCUklER0VfSVNSX0xMUF9SRUNfQ0JFUlIKKyNkZWZpbmUgQlJJREdFX0lNUl9MTFBfUkNUWQkJQlJJREdFX0lTUl9MTFBfUkNUWQorI2RlZmluZSBCUklER0VfSU1SX0xMUF9UWF9SRVRSWQkJQlJJREdFX0lTUl9MTFBfVFhfUkVUUlkKKyNkZWZpbmUgQlJJREdFX0lNUl9MTFBfVENUWQkJQlJJREdFX0lTUl9MTFBfVENUWQorI2RlZmluZSBCUklER0VfSU1SX1NTUkFNX1BFUlIJCUJSSURHRV9JU1JfU1NSQU1fUEVSUgorI2RlZmluZSBCUklER0VfSU1SX1BDSV9BQk9SVAkJQlJJREdFX0lTUl9QQ0lfQUJPUlQKKyNkZWZpbmUgQlJJREdFX0lNUl9QQ0lfUEFSSVRZCQlCUklER0VfSVNSX1BDSV9QQVJJVFkKKyNkZWZpbmUgQlJJREdFX0lNUl9QQ0lfU0VSUgkJQlJJREdFX0lTUl9QQ0lfU0VSUgorI2RlZmluZSBCUklER0VfSU1SX1BDSV9QRVJSCQlCUklER0VfSVNSX1BDSV9QRVJSCisjZGVmaW5lIEJSSURHRV9JTVJfUENJX01TVF9USU1FT1VUCUJSSURHRV9JU1JfUENJX01TVF9USU1FT1VUCisjZGVmaW5lIEJSSURHRV9JTVJfR0lPX01TVF9USU1FT1VUCUJSSURHRV9JU1JfR0lPX01TVF9USU1FT1VUCisjZGVmaW5lIEJSSURHRV9JTVJfUENJX1JFVFJZX0NOVAlCUklER0VfSVNSX1BDSV9SRVRSWV9DTlQKKyNkZWZpbmUgQlJJREdFX0lNUl9YUkVBRF9SRVFfVElNRU9VVAlCUklER0VfSVNSX1hSRUFEX1JFUV9USU1FT1VUCisjZGVmaW5lIEJSSURHRV9JTVJfR0lPX0JfRU5CTF9FUlIJQlJJREdFX0lTUl9HSU9fQl9FTkJMX0VSUgorI2RlZmluZSBCUklER0VfSU1SX0lOVF9NU0sJCUJSSURHRV9JU1JfSU5UX01TSworI2RlZmluZSBCUklER0VfSU1SX0lOVCh4KQkJQlJJREdFX0lTUl9JTlQoeCkKKworLyogQnJpZGdlIGludGVycnVwdCByZXNldCByZWdpc3RlciBiaXRzIGRlZmluaXRpb24gKi8KKyNkZWZpbmUgQlJJREdFX0lSUl9NVUxUSV9DTFIJCSgweDEgPDwgNikKKyNkZWZpbmUgQlJJREdFX0lSUl9DUlBfR1JQX0NMUgkJKDB4MSA8PCA1KQorI2RlZmluZSBCUklER0VfSVJSX1JFU1BfQlVGX0dSUF9DTFIJKDB4MSA8PCA0KQorI2RlZmluZSBCUklER0VfSVJSX1JFUV9EU1BfR1JQX0NMUgkoMHgxIDw8IDMpCisjZGVmaW5lIEJSSURHRV9JUlJfTExQX0dSUF9DTFIJCSgweDEgPDwgMikKKyNkZWZpbmUgQlJJREdFX0lSUl9TU1JBTV9HUlBfQ0xSCSgweDEgPDwgMSkKKyNkZWZpbmUgQlJJREdFX0lSUl9QQ0lfR1JQX0NMUgkJKDB4MSA8PCAwKQorI2RlZmluZSBCUklER0VfSVJSX0dJT19HUlBfQ0xSCQkoMHgxIDw8IDApCisjZGVmaW5lIEJSSURHRV9JUlJfQUxMX0NMUgkJMHg3ZgorCisjZGVmaW5lIEJSSURHRV9JUlJfQ1JQX0dSUAkJKEJSSURHRV9JU1JfVU5FWFBfUkVTUCB8IFwKKwkJCQkJIEJSSURHRV9JU1JfWFJFUV9GSUZPX09GTE9XKQorI2RlZmluZSBCUklER0VfSVJSX1JFU1BfQlVGX0dSUAkJKEJSSURHRV9JU1JfQkFEX1hSRVNQX1BLVCB8IFwKKwkJCQkJIEJSSURHRV9JU1JfUkVTUF9YVExLX0VSUiB8IFwKKwkJCQkJIEJSSURHRV9JU1JfWFJFQURfUkVRX1RJTUVPVVQpCisjZGVmaW5lIEJSSURHRV9JUlJfUkVRX0RTUF9HUlAJCShCUklER0VfSVNSX1VOU1VQUE9SVEVEX1hPUCB8IFwKKwkJCQkJIEJSSURHRV9JU1JfQkFEX1hSRVFfUEtUIHwgXAorCQkJCQkgQlJJREdFX0lTUl9SRVFfWFRMS19FUlIgfCBcCisJCQkJCSBCUklER0VfSVNSX0lOVkxEX0FERFIpCisjZGVmaW5lIEJSSURHRV9JUlJfTExQX0dSUAkJKEJSSURHRV9JU1JfTExQX1JFQ19TTkVSUiB8IFwKKwkJCQkJIEJSSURHRV9JU1JfTExQX1JFQ19DQkVSUiB8IFwKKwkJCQkJIEJSSURHRV9JU1JfTExQX1JDVFkgfCBcCisJCQkJCSBCUklER0VfSVNSX0xMUF9UWF9SRVRSWSB8IFwKKwkJCQkJIEJSSURHRV9JU1JfTExQX1RDVFkpCisjZGVmaW5lIEJSSURHRV9JUlJfU1NSQU1fR1JQCQkoQlJJREdFX0lTUl9TU1JBTV9QRVJSIHwgXAorCQkJCQkgQlJJREdFX0lTUl9QTVVfRVNJWkVfRkFVTFQpCisjZGVmaW5lIEJSSURHRV9JUlJfUENJX0dSUAkJKEJSSURHRV9JU1JfUENJX0FCT1JUIHwgXAorCQkJCQkgQlJJREdFX0lTUl9QQ0lfUEFSSVRZIHwgXAorCQkJCQkgQlJJREdFX0lTUl9QQ0lfU0VSUiB8IFwKKwkJCQkJIEJSSURHRV9JU1JfUENJX1BFUlIgfCBcCisJCQkJCSBCUklER0VfSVNSX1BDSV9NU1RfVElNRU9VVCB8IFwKKwkJCQkJIEJSSURHRV9JU1JfUENJX1JFVFJZX0NOVCkKKworI2RlZmluZSBCUklER0VfSVJSX0dJT19HUlAJCShCUklER0VfSVNSX0dJT19CX0VOQkxfRVJSIHwgXAorCQkJCQkgQlJJREdFX0lTUl9HSU9fTVNUX1RJTUVPVVQpCisKKy8qIEJyaWRnZSBJTlRfREVWIHJlZ2lzdGVyIGJpdHMgZGVmaW5pdGlvbiAqLworI2RlZmluZSBCUklER0VfSU5UX0RFVl9TSEZUKG4pCQkoKG4pKjMpCisjZGVmaW5lIEJSSURHRV9JTlRfREVWX01BU0sobikJCSgweDcgPDwgQlJJREdFX0lOVF9ERVZfU0hGVChuKSkKKyNkZWZpbmUgQlJJREdFX0lOVF9ERVZfU0VUKF9kZXYsIF9saW5lKSAoX2RldiA8PCBCUklER0VfSU5UX0RFVl9TSEZUKF9saW5lKSkKKworLyogQnJpZGdlIGludGVycnVwdCh4KSByZWdpc3RlciBiaXRzIGRlZmluaXRpb24gKi8KKyNkZWZpbmUgQlJJREdFX0lOVF9BRERSX0hPU1QJCTB4MDAwM0ZGMDAKKyNkZWZpbmUgQlJJREdFX0lOVF9BRERSX0ZMRAkJMHgwMDAwMDBGRgorCisjZGVmaW5lIEJSSURHRV9UTU9fUENJX1JFVFJZX0hMRF9NQVNLCTB4MWYwMDAwCisjZGVmaW5lIEJSSURHRV9UTU9fR0lPX1RJTUVPVVRfTUFTSwkweDAwMTAwMAorI2RlZmluZSBCUklER0VfVE1PX1BDSV9SRVRSWV9DTlRfTUFTSwkweDAwMDNmZgorCisjZGVmaW5lIEJSSURHRV9UTU9fUENJX1JFVFJZX0NOVF9NQVgJMHgzZmYKKworLyoKKyAqIFRoZSBOQVNJRCBzaG91bGQgYmUgc2hpZnRlZCBieSB0aGlzIGFtb3VudCBhbmQgc3RvcmVkIGludG8gdGhlCisgKiBpbnRlcnJ1cHQoeCkgcmVnaXN0ZXIuCisgKi8KKyNkZWZpbmUgQlJJREdFX0lOVF9BRERSX05BU0lEX1NIRlQJOAorCisvKgorICogVGhlIEJSSURHRV9JTlRfQUREUl9ERVNUX0lPIGJpdCBzaG91bGQgYmUgc2V0IHRvIHNlbmQgYW4gaW50ZXJydXB0IHRvCisgKiBtZW1vcnkuCisgKi8KKyNkZWZpbmUgQlJJREdFX0lOVF9BRERSX0RFU1RfSU8JCSgxIDw8IDE3KQorI2RlZmluZSBCUklER0VfSU5UX0FERFJfREVTVF9NRU0JMAorI2RlZmluZSBCUklER0VfSU5UX0FERFJfTUFTSwkJKDEgPDwgMTcpCisKKy8qIEJyaWRnZSBkZXZpY2UoeCkgcmVnaXN0ZXIgYml0cyBkZWZpbml0aW9uICovCisjZGVmaW5lIEJSSURHRV9ERVZfRVJSX0xPQ0tfRU4JCTB4MTAwMDAwMDAKKyNkZWZpbmUgQlJJREdFX0RFVl9QQUdFX0NIS19ESVMJCTB4MDgwMDAwMDAKKyNkZWZpbmUgQlJJREdFX0RFVl9GT1JDRV9QQ0lfUEFSCTB4MDQwMDAwMDAKKyNkZWZpbmUgQlJJREdFX0RFVl9WSVJUVUFMX0VOCQkweDAyMDAwMDAwCisjZGVmaW5lIEJSSURHRV9ERVZfUE1VX1dSR0FfRU4JCTB4MDEwMDAwMDAKKyNkZWZpbmUgQlJJREdFX0RFVl9ESVJfV1JHQV9FTgkJMHgwMDgwMDAwMAorI2RlZmluZSBCUklER0VfREVWX0RFVl9TSVpFCQkweDAwNDAwMDAwCisjZGVmaW5lIEJSSURHRV9ERVZfUlQJCQkweDAwMjAwMDAwCisjZGVmaW5lIEJSSURHRV9ERVZfU1dBUF9QTVUJCTB4MDAxMDAwMDAKKyNkZWZpbmUgQlJJREdFX0RFVl9TV0FQX0RJUgkJMHgwMDA4MDAwMAorI2RlZmluZSBCUklER0VfREVWX1BSRUYJCQkweDAwMDQwMDAwCisjZGVmaW5lIEJSSURHRV9ERVZfUFJFQ0lTRQkJMHgwMDAyMDAwMAorI2RlZmluZSBCUklER0VfREVWX0NPSAkJCTB4MDAwMTAwMDAKKyNkZWZpbmUgQlJJREdFX0RFVl9CQVJSSUVSCQkweDAwMDA4MDAwCisjZGVmaW5lIEJSSURHRV9ERVZfR0JSCQkJMHgwMDAwNDAwMAorI2RlZmluZSBCUklER0VfREVWX0RFVl9TV0FQCQkweDAwMDAyMDAwCisjZGVmaW5lIEJSSURHRV9ERVZfREVWX0lPX01FTQkJMHgwMDAwMTAwMAorI2RlZmluZSBCUklER0VfREVWX09GRl9NQVNLCQkweDAwMDAwZmZmCisjZGVmaW5lIEJSSURHRV9ERVZfT0ZGX0FERFJfU0hGVAkyMAorCisjZGVmaW5lIEJSSURHRV9ERVZfUE1VX0JJVFMJCShCUklER0VfREVWX1BNVV9XUkdBX0VOCQl8IFwKKwkJCQkJIEJSSURHRV9ERVZfU1dBUF9QTVUpCisjZGVmaW5lIEJSSURHRV9ERVZfRDMyX0JJVFMJCShCUklER0VfREVWX0RJUl9XUkdBX0VOCQl8IFwKKwkJCQkJIEJSSURHRV9ERVZfU1dBUF9ESVIJCXwgXAorCQkJCQkgQlJJREdFX0RFVl9QUkVGCQl8IFwKKwkJCQkJIEJSSURHRV9ERVZfUFJFQ0lTRQkJfCBcCisJCQkJCSBCUklER0VfREVWX0NPSAkJCXwgXAorCQkJCQkgQlJJREdFX0RFVl9CQVJSSUVSKQorI2RlZmluZSBCUklER0VfREVWX0Q2NF9CSVRTCQkoQlJJREdFX0RFVl9ESVJfV1JHQV9FTgkJfCBcCisJCQkJCSBCUklER0VfREVWX1NXQVBfRElSCQl8IFwKKwkJCQkJIEJSSURHRV9ERVZfQ09ICQkJfCBcCisJCQkJCSBCUklER0VfREVWX0JBUlJJRVIpCisKKy8qIEJyaWRnZSBFcnJvciBVcHBlciByZWdpc3RlciBiaXQgZmllbGQgZGVmaW5pdGlvbiAqLworI2RlZmluZSBCUklER0VfRVJSVVBQUl9ERVZNQVNURVIJKDB4MSA8PCAyMCkJLyogRGV2aWNlIHdhcyBtYXN0ZXIgKi8KKyNkZWZpbmUgQlJJREdFX0VSUlVQUFJfUENJVkRFVgkJKDB4MSA8PCAxOSkJLyogVmlydHVhbCBSZXEgdmFsdWUgKi8KKyNkZWZpbmUgQlJJREdFX0VSUlVQUFJfREVWTlVNX1NIRlQJKDE2KQorI2RlZmluZSBCUklER0VfRVJSVVBQUl9ERVZOVU1fTUFTSwkoMHg3IDw8IEJSSURHRV9FUlJVUFBSX0RFVk5VTV9TSEZUKQorI2RlZmluZSBCUklER0VfRVJSVVBQUl9ERVZJQ0UoZXJyKQkoKChlcnIpID4+IEJSSURHRV9FUlJVUFBSX0RFVk5VTV9TSEZUKSAmIDB4NykKKyNkZWZpbmUgQlJJREdFX0VSUlVQUFJfQUREUk1BU0sJCSgweEZGRkYpCisKKy8qIEJyaWRnZSBpbnRlcnJ1cHQgbW9kZSByZWdpc3RlciBiaXRzIGRlZmluaXRpb24gKi8KKyNkZWZpbmUgQlJJREdFX0lOVE1PREVfQ0xSX1BLVF9FTih4KQkoMHgxIDw8ICh4KSkKKworLyogdGhpcyBzaG91bGQgYmUgd3JpdHRlbiB0byB0aGUgeGJvdydzIGxpbmtfY29udHJvbCh4KSByZWdpc3RlciAqLworI2RlZmluZSBCUklER0VfQ1JFRElUCTMKKworLyogUlJCIGFzc2lnbm1lbnQgcmVnaXN0ZXIgKi8KKyNkZWZpbmUJQlJJREdFX1JSQl9FTgkweDgJLyogYWZ0ZXIgc2hpZnRpbmcgZG93biAqLworI2RlZmluZQlCUklER0VfUlJCX0RFVgkweDcJLyogYWZ0ZXIgc2hpZnRpbmcgZG93biAqLworI2RlZmluZQlCUklER0VfUlJCX1ZERVYJMHg0CS8qIGFmdGVyIHNoaWZ0aW5nIGRvd24gKi8KKyNkZWZpbmUJQlJJREdFX1JSQl9QREVWCTB4MwkvKiBhZnRlciBzaGlmdGluZyBkb3duICovCisKKy8qIFJSQiBzdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUJQlJJREdFX1JSQl9WQUxJRChyKQkoMHgwMDAxMDAwMDw8KHIpKQorI2RlZmluZQlCUklER0VfUlJCX0lOVVNFKHIpCSgweDAwMDAwMDAxPDwocikpCisKKy8qIFJSQiBjbGVhciByZWdpc3RlciAqLworI2RlZmluZQlCUklER0VfUlJCX0NMRUFSKHIpCSgweDAwMDAwMDAxPDwocikpCisKKy8qIHhib3ggc3lzdGVtIGNvbnRyb2xsZXIgZGVjbGFyYXRpb25zICovCisjZGVmaW5lIFhCT1hfQlJJREdFX1dJRCAgICAgICAgIDgKKyNkZWZpbmUgRkxBU0hfUFJPTTFfQkFTRSAgICAgICAgMHhFMDAwMDAgLyogVG8gcmVhZCB0aGUgeGJveCBzeXNjdGxyIHN0YXR1cyAqLworI2RlZmluZSBYQk9YX1JQU19FWElTVFMJCTEgPDwgNgkgLyogUlBTIGJpdCBpbiBzdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgWEJPWF9SUFNfRkFJTAkJMSA8PCA0CSAvKiBSUFMgc3RhdHVzIGJpdCBpbiByZWdpc3RlciAqLworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworLyoKKyAqIE1hY3JvcyBmb3IgWHRhbGsgdG8gQnJpZGdlIGJ1cyAoUENJL0dJTykgUElPCisgKiByZWZlciB0byBzZWN0aW9uIDQuMi4xIG9mIEJyaWRnZSBTcGVjIGZvciB4dGFsayB0byBQQ0kvR0lPIFBJTyBtYXBwaW5ncworICovCisvKiBYVEFMSyBhZGRyZXNzZXMgdGhhdCBtYXAgaW50byBCcmlkZ2UgQnVzIGFkZHIgc3BhY2UgKi8KKyNkZWZpbmUgQlJJREdFX1BJTzMyX1hUQUxLX0FMSUFTX0JBU0UJMHgwMDAwNDAwMDAwMDBMCisjZGVmaW5lIEJSSURHRV9QSU8zMl9YVEFMS19BTElBU19MSU1JVAkweDAwMDA3RkZGRkZGRkwKKyNkZWZpbmUgQlJJREdFX1BJTzY0X1hUQUxLX0FMSUFTX0JBU0UJMHgwMDAwODAwMDAwMDBMCisjZGVmaW5lIEJSSURHRV9QSU82NF9YVEFMS19BTElBU19MSU1JVAkweDAwMDBCRkZGRkZGRkwKKyNkZWZpbmUgQlJJREdFX1BDSUlPX1hUQUxLX0FMSUFTX0JBU0UJMHgwMDAxMDAwMDAwMDBMCisjZGVmaW5lIEJSSURHRV9QQ0lJT19YVEFMS19BTElBU19MSU1JVAkweDAwMDFGRkZGRkZGRkwKKworLyogUmFuZ2VzIG9mIFBDSSBidXMgc3BhY2UgdGhhdCBjYW4gYmUgYWNjZXNzZWQgdmlhIFBJTyBmcm9tIHh0YWxrICovCisjZGVmaW5lIEJSSURHRV9NSU5fUElPX0FERFJfTUVNCQkweDAwMDAwMDAwCS8qIDFHIFBDSSBtZW1vcnkgc3BhY2UgKi8KKyNkZWZpbmUgQlJJREdFX01BWF9QSU9fQUREUl9NRU0JCTB4M2ZmZmZmZmYKKyNkZWZpbmUgQlJJREdFX01JTl9QSU9fQUREUl9JTwkJMHgwMDAwMDAwMAkvKiA0RyBQQ0kgSU8gc3BhY2UgKi8KKyNkZWZpbmUgQlJJREdFX01BWF9QSU9fQUREUl9JTwkJMHhmZmZmZmZmZgorCisvKiBYVEFMSyBhZGRyZXNzZXMgdGhhdCBtYXAgaW50byBQQ0kgYWRkcmVzc2VzICovCisjZGVmaW5lIEJSSURHRV9QQ0lfTUVNMzJfQkFTRQkJQlJJREdFX1BJTzMyX1hUQUxLX0FMSUFTX0JBU0UKKyNkZWZpbmUgQlJJREdFX1BDSV9NRU0zMl9MSU1JVAkJQlJJREdFX1BJTzMyX1hUQUxLX0FMSUFTX0xJTUlUCisjZGVmaW5lIEJSSURHRV9QQ0lfTUVNNjRfQkFTRQkJQlJJREdFX1BJTzY0X1hUQUxLX0FMSUFTX0JBU0UKKyNkZWZpbmUgQlJJREdFX1BDSV9NRU02NF9MSU1JVAkJQlJJREdFX1BJTzY0X1hUQUxLX0FMSUFTX0xJTUlUCisjZGVmaW5lIEJSSURHRV9QQ0lfSU9fQkFTRQkJQlJJREdFX1BDSUlPX1hUQUxLX0FMSUFTX0JBU0UKKyNkZWZpbmUgQlJJREdFX1BDSV9JT19MSU1JVAkJQlJJREdFX1BDSUlPX1hUQUxLX0FMSUFTX0xJTUlUCisKKy8qCisgKiBNYWNyb3MgZm9yIEJyaWRnZSBidXMgKFBDSS9HSU8pIHRvIFh0YWxrIERNQQorICovCisvKiBCcmlkZ2UgQnVzIERNQSBhZGRyZXNzZXMgKi8KKyNkZWZpbmUgQlJJREdFX0xPQ0FMX0JBU0UJCTAKKyNkZWZpbmUgQlJJREdFX0RNQV9NQVBQRURfQkFTRQkJMHg0MDAwMDAwMAorI2RlZmluZSBCUklER0VfRE1BX01BUFBFRF9TSVpFCQkweDQwMDAwMDAwCS8qIDFHIEJ5dGVzICovCisjZGVmaW5lIEJSSURHRV9ETUFfRElSRUNUX0JBU0UJCTB4ODAwMDAwMDAKKyNkZWZpbmUgQlJJREdFX0RNQV9ESVJFQ1RfU0laRQkJMHg4MDAwMDAwMAkvKiAyRyBCeXRlcyAqLworCisjZGVmaW5lIFBDSTMyX0xPQ0FMX0JBU0UJCUJSSURHRV9MT0NBTF9CQVNFCisKKy8qIFBDSSBhZGRyZXNzZXMgb2YgcmVnaW9ucyBkZWNvZGVkIGJ5IEJyaWRnZSBmb3IgRE1BICovCisjZGVmaW5lIFBDSTMyX01BUFBFRF9CQVNFCQlCUklER0VfRE1BX01BUFBFRF9CQVNFCisjZGVmaW5lIFBDSTMyX0RJUkVDVF9CQVNFCQlCUklER0VfRE1BX0RJUkVDVF9CQVNFCisKKyNkZWZpbmUgSVNfUENJMzJfTE9DQUwoeCkJKCh1bG9uZ190KSh4KSA8IFBDSTMyX01BUFBFRF9CQVNFKQorI2RlZmluZSBJU19QQ0kzMl9NQVBQRUQoeCkJKCh1bG9uZ190KSh4KSA8IFBDSTMyX0RJUkVDVF9CQVNFICYmIFwKKwkJCQkJKHVsb25nX3QpKHgpID49IFBDSTMyX01BUFBFRF9CQVNFKQorI2RlZmluZSBJU19QQ0kzMl9ESVJFQ1QoeCkJKCh1bG9uZ190KSh4KSA+PSBQQ0kzMl9NQVBQRURfQkFTRSkKKyNkZWZpbmUgSVNfUENJNjQoeCkJCSgodWxvbmdfdCkoeCkgPj0gUENJNjRfQkFTRSkKKworLyoKKyAqIFRoZSBHSU8gYWRkcmVzcyBzcGFjZS4KKyAqLworLyogWHRhbGsgdG8gR0lPIFBJTyAqLworI2RlZmluZSBCUklER0VfR0lPX01FTTMyX0JBU0UJCUJSSURHRV9QSU8zMl9YVEFMS19BTElBU19CQVNFCisjZGVmaW5lIEJSSURHRV9HSU9fTUVNMzJfTElNSVQJCUJSSURHRV9QSU8zMl9YVEFMS19BTElBU19MSU1JVAorCisjZGVmaW5lIEdJT19MT0NBTF9CQVNFCQkJQlJJREdFX0xPQ0FMX0JBU0UKKworLyogR0lPIGFkZHJlc3NlcyBvZiByZWdpb25zIGRlY29kZWQgYnkgQnJpZGdlIGZvciBETUEgKi8KKyNkZWZpbmUgR0lPX01BUFBFRF9CQVNFCQkJQlJJREdFX0RNQV9NQVBQRURfQkFTRQorI2RlZmluZSBHSU9fRElSRUNUX0JBU0UJCQlCUklER0VfRE1BX0RJUkVDVF9CQVNFCisKKyNkZWZpbmUgSVNfR0lPX0xPQ0FMKHgpCQkoKHVsb25nX3QpKHgpIDwgR0lPX01BUFBFRF9CQVNFKQorI2RlZmluZSBJU19HSU9fTUFQUEVEKHgpCSgodWxvbmdfdCkoeCkgPCBHSU9fRElSRUNUX0JBU0UgJiYgXAorCQkJCQkodWxvbmdfdCkoeCkgPj0gR0lPX01BUFBFRF9CQVNFKQorI2RlZmluZSBJU19HSU9fRElSRUNUKHgpCSgodWxvbmdfdCkoeCkgPj0gR0lPX01BUFBFRF9CQVNFKQorCisvKiBQQ0kgdG8geHRhbGsgbWFwcGluZyAqLworCisvKiBnaXZlbiBhIERJUl9PRkYgdmFsdWUgYW5kIGEgcGNpL2dpbyAzMiBiaXRzIGRpcmVjdCBhZGRyZXNzLCBkZXRlcm1pbmUKKyAqIHdoaWNoIHh0YWxrIGFkZHJlc3MgaXMgYWNjZXNzZWQKKyAqLworI2RlZmluZSBCUklER0VfRElSRUNUXzMyX1NFR19TSVpFCUJSSURHRV9ETUFfRElSRUNUX1NJWkUKKyNkZWZpbmUgQlJJREdFX0RJUkVDVF8zMl9UT19YVEFMSyhkaXJfb2ZmLGFkcikJCVwKKwkoKGRpcl9vZmYpICogQlJJREdFX0RJUkVDVF8zMl9TRUdfU0laRSArCVwKKwkJKChhZHIpICYgKEJSSURHRV9ESVJFQ1RfMzJfU0VHX1NJWkUgLSAxKSkgKyBQSFlTX1JBTUJBU0UpCisKKy8qIDY0LWJpdCBhZGRyZXNzIGF0dHJpYnV0ZSBtYXNrcyAqLworI2RlZmluZSBQQ0k2NF9BVFRSX1RBUkdfTUFTSwkweGYwMDAwMDAwMDAwMDAwMDAKKyNkZWZpbmUgUENJNjRfQVRUUl9UQVJHX1NIRlQJNjAKKyNkZWZpbmUgUENJNjRfQVRUUl9QUkVGCQkweDA4MDAwMDAwMDAwMDAwMDAKKyNkZWZpbmUgUENJNjRfQVRUUl9QUkVDCQkweDA0MDAwMDAwMDAwMDAwMDAKKyNkZWZpbmUgUENJNjRfQVRUUl9WSVJUVUFMCTB4MDIwMDAwMDAwMDAwMDAwMAorI2RlZmluZSBQQ0k2NF9BVFRSX0JBUgkJMHgwMTAwMDAwMDAwMDAwMDAwCisjZGVmaW5lIFBDSTY0X0FUVFJfUk1GX01BU0sJMHgwMGZmMDAwMDAwMDAwMDAwCisjZGVmaW5lIFBDSTY0X0FUVFJfUk1GX1NIRlQJNDgKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKy8qIEFkZHJlc3MgdHJhbnNsYXRpb24gZW50cnkgZm9yIG1hcHBlZCBwY2kzMiBhY2Nlc3NlcyAqLwordHlwZWRlZiB1bmlvbiBhdGVfdSB7CisJdTY0CWVudDsKKwlzdHJ1Y3QgYXRlX3MgeworCQl1NjQJcm1mOjE2OworCQl1NjQJYWRkcjozNjsKKwkJdTY0CXRhcmc6NDsKKwkJdTY0CXJlc2VydmVkOjM7CisJCXU2NAliYXJyaWVyOjE7CisJCXU2NAlwcmVmZXRjaDoxOworCQl1NjQJcHJlY2lzZToxOworCQl1NjQJY29oZXJlbnQ6MTsKKwkJdTY0CXZhbGlkOjE7CisJfSBmaWVsZDsKK30gYXRlX3Q7CisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisjZGVmaW5lIEFURV9WCQkweDAxCisjZGVmaW5lIEFURV9DTwkJMHgwMgorI2RlZmluZSBBVEVfUFJFQwkweDA0CisjZGVmaW5lIEFURV9QUkVGCTB4MDgKKyNkZWZpbmUgQVRFX0JBUgkJMHgxMAorCisjZGVmaW5lIEFURV9QRk5TSElGVAkJMTIKKyNkZWZpbmUgQVRFX1RJRFNISUZUCQk4CisjZGVmaW5lIEFURV9STUZTSElGVAkJNDgKKworI2RlZmluZSBta2F0ZSh4YWRkciwgeGlkLCBhdHRyKSAoKHhhZGRyKSAmIDB4MDAwMGZmZmZmZmZmZjAwMFVMTCkgfCBcCisJCQkJKCh4aWQpPDxBVEVfVElEU0hJRlQpIHwgXAorCQkJCShhdHRyKQorCisjZGVmaW5lIEJSSURHRV9JTlRFUk5BTF9BVEVTCTEyOAorCitzdHJ1Y3QgYnJpZGdlX2NvbnRyb2xsZXIgeworCXN0cnVjdCBwY2lfY29udHJvbGxlcglwYzsKKwlzdHJ1Y3QgcmVzb3VyY2UJCW1lbTsKKwlzdHJ1Y3QgcmVzb3VyY2UJCWlvOworCWJyaWRnZV90CQkqYmFzZTsKKwluYXNpZF90CQkJbmFzaWQ7CisJdW5zaWduZWQgaW50CQl3aWRnZXRfaWQ7CisJdW5zaWduZWQgaW50IAkJaXJxX2NwdTsKKwlkbWE2NF9hZGRyX3QJCWJhZGRyOworCXVuc2lnbmVkIGludAkJcGNpX2ludFs4XTsKK307CisKKyNkZWZpbmUgQlJJREdFX0NPTlRST0xMRVIoYnVzKSBcCisJKChzdHJ1Y3QgYnJpZGdlX2NvbnRyb2xsZXIgKikoKGJ1cyktPnN5c2RhdGEpKQorCitleHRlcm4gdm9pZCByZWdpc3Rlcl9icmlkZ2VfaXJxKHVuc2lnbmVkIGludCBpcnEpOworZXh0ZXJuIGludCByZXF1ZXN0X2JyaWRnZV9pcnEoc3RydWN0IGJyaWRnZV9jb250cm9sbGVyICpiYyk7CisKKyNlbmRpZiAvKiBfQVNNX1BDSV9CUklER0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9wZXJjcHUuaCBiL2luY2x1ZGUvYXNtLW1pcHMvcGVyY3B1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ0ZTc2MwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvcGVyY3B1LmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fQVNNX1BFUkNQVV9ICisjZGVmaW5lIF9fQVNNX1BFUkNQVV9ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wZXJjcHUuaD4KKworI2VuZGlmIC8qIF9fQVNNX1BFUkNQVV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3BnYWxsb2MuaCBiL2luY2x1ZGUvYXNtLW1pcHMvcGdhbGxvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkNjNmNWIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3BnYWxsb2MuaApAQCAtMCwwICsxLDEyNSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NCAtIDIwMDEsIDIwMDMgYnkgUmFsZiBCYWVjaGxlCisgKiBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAsIDIwMDEgU2lsaWNvbiBHcmFwaGljcywgSW5jLgorICovCisjaWZuZGVmIF9BU01fUEdBTExPQ19ICisjZGVmaW5lIF9BU01fUEdBTExPQ19ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKworc3RhdGljIGlubGluZSB2b2lkIHBtZF9wb3B1bGF0ZV9rZXJuZWwoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQsCisJcHRlX3QgKnB0ZSkKK3sKKwlzZXRfcG1kKHBtZCwgX19wbWQoKHVuc2lnbmVkIGxvbmcpcHRlKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwbWRfcG9wdWxhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQsCisJc3RydWN0IHBhZ2UgKnB0ZSkKK3sKKwlzZXRfcG1kKHBtZCwgX19wbWQoKHVuc2lnbmVkIGxvbmcpcGFnZV9hZGRyZXNzKHB0ZSkpKTsKK30KKworLyoKKyAqIEluaXRpYWxpemUgYSBuZXcgcGdkIC8gcG1kIHRhYmxlIHdpdGggaW52YWxpZCBwb2ludGVycy4KKyAqLworZXh0ZXJuIHZvaWQgcGdkX2luaXQodW5zaWduZWQgbG9uZyBwYWdlKTsKK2V4dGVybiB2b2lkIHBtZF9pbml0KHVuc2lnbmVkIGxvbmcgcGFnZSwgdW5zaWduZWQgbG9uZyBwYWdldGFibGUpOworCitzdGF0aWMgaW5saW5lIHBnZF90ICpwZ2RfYWxsb2Moc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJcGdkX3QgKnJldCwgKmluaXQ7CisKKwlyZXQgPSAocGdkX3QgKikgX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMLCBQR0RfT1JERVIpOworCWlmIChyZXQpIHsKKwkJaW5pdCA9IHBnZF9vZmZzZXQoJmluaXRfbW0sIDApOworCQlwZ2RfaW5pdCgodW5zaWduZWQgbG9uZylyZXQpOworCQltZW1jcHkocmV0ICsgVVNFUl9QVFJTX1BFUl9QR0QsIGluaXQgKyBVU0VSX1BUUlNfUEVSX1BHRCwKKwkJICAgICAgIChQVFJTX1BFUl9QR0QgLSBVU0VSX1BUUlNfUEVSX1BHRCkgKiBzaXplb2YocGdkX3QpKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGdkX2ZyZWUocGdkX3QgKnBnZCkKK3sKKwlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXBnZCwgUEdEX09SREVSKTsKK30KKworc3RhdGljIGlubGluZSBwdGVfdCAqcHRlX2FsbG9jX29uZV9rZXJuZWwoc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJdW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCXB0ZV90ICpwdGU7CisKKwlwdGUgPSAocHRlX3QgKikgX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMfF9fR0ZQX1JFUEVBVHxfX0dGUF9aRVJPLCBQVEVfT1JERVIpOworCisJcmV0dXJuIHB0ZTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqcHRlX2FsbG9jX29uZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwl1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisJc3RydWN0IHBhZ2UgKnB0ZTsKKworCXB0ZSA9IGFsbG9jX3BhZ2VzKEdGUF9LRVJORUwgfCBfX0dGUF9SRVBFQVQsIFBURV9PUkRFUik7CisJaWYgKHB0ZSkKKwkJY2xlYXJfaGlnaHBhZ2UocHRlKTsKKworCXJldHVybiBwdGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdGVfZnJlZV9rZXJuZWwocHRlX3QgKnB0ZSkKK3sKKwlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXB0ZSwgUFRFX09SREVSKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHB0ZV9mcmVlKHN0cnVjdCBwYWdlICpwdGUpCit7CisJX19mcmVlX3BhZ2VzKHB0ZSwgUFRFX09SREVSKTsKK30KKworI2RlZmluZSBfX3B0ZV9mcmVlX3RsYih0bGIscHRlKQkJdGxiX3JlbW92ZV9wYWdlKCh0bGIpLChwdGUpKQorCisjaWZkZWYgQ09ORklHX01JUFMzMgorI2RlZmluZSBwZ2RfcG9wdWxhdGUobW0sIHBtZCwgcHRlKQlCVUcoKQorCisvKgorICogYWxsb2NhdGluZyBhbmQgZnJlZWluZyBhIHBtZCBpcyB0cml2aWFsOiB0aGUgMS1lbnRyeSBwbWQgaXMKKyAqIGluc2lkZSB0aGUgcGdkLCBzbyBoYXMgbm8gZXh0cmEgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCBpdC4KKyAqLworI2RlZmluZSBwbWRfYWxsb2Nfb25lKG1tLCBhZGRyKQkJKHsgQlVHKCk7ICgocG1kX3QgKikyKTsgfSkKKyNkZWZpbmUgcG1kX2ZyZWUoeCkJCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIF9fcG1kX2ZyZWVfdGxiKHRsYix4KQkJZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUlQUzY0CisKKyNkZWZpbmUgcGdkX3BvcHVsYXRlKG1tLCBwZ2QsIHBtZCkJc2V0X3BnZChwZ2QsIF9fcGdkKHBtZCkpCisKK3N0YXRpYyBpbmxpbmUgcG1kX3QgKnBtZF9hbGxvY19vbmUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwlwbWRfdCAqcG1kOworCisJcG1kID0gKHBtZF90ICopIF9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTHxfX0dGUF9SRVBFQVQsIFBNRF9PUkRFUik7CisJaWYgKHBtZCkKKwkJcG1kX2luaXQoKHVuc2lnbmVkIGxvbmcpcG1kLCAodW5zaWduZWQgbG9uZylpbnZhbGlkX3B0ZV90YWJsZSk7CisJcmV0dXJuIHBtZDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBtZF9mcmVlKHBtZF90ICpwbWQpCit7CisJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZylwbWQsIFBNRF9PUkRFUik7Cit9CisKKyNkZWZpbmUgX19wbWRfZnJlZV90bGIodGxiLHgpCXBtZF9mcmVlKHgpCisKKyNlbmRpZgorCisjZGVmaW5lIGNoZWNrX3BndF9jYWNoZSgpCWRvIHsgfSB3aGlsZSAoMCkKKworI2VuZGlmIC8qIF9BU01fUEdBTExPQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3BndGFibGUtMzIuaCBiL2luY2x1ZGUvYXNtLW1pcHMvcGd0YWJsZS0zMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxYTBkZjcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3BndGFibGUtMzIuaApAQCAtMCwwICsxLDI0MyBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NCwgOTUsIDk2LCA5NywgOTgsIDk5LCAyMDAwLCAyMDAzIFJhbGYgQmFlY2hsZQorICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAxIFNpbGljb24gR3JhcGhpY3MsIEluYy4KKyAqLworI2lmbmRlZiBfQVNNX1BHVEFCTEVfMzJfSAorI2RlZmluZSBfQVNNX1BHVEFCTEVfMzJfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisKKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlY3RsLmg+CisjaW5jbHVkZSA8YXNtL2ZpeG1hcC5oPgorCisvKgorICogLSBhZGRfd2lyZWRfZW50cnkoKSBhZGQgYSBmaXhlZCBUTEIgZW50cnksIGFuZCBtb3ZlIHdpcmVkIHJlZ2lzdGVyCisgKi8KK2V4dGVybiB2b2lkIGFkZF93aXJlZF9lbnRyeSh1bnNpZ25lZCBsb25nIGVudHJ5bG8wLCB1bnNpZ25lZCBsb25nIGVudHJ5bG8xLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgZW50cnloaSwgdW5zaWduZWQgbG9uZyBwYWdlbWFzayk7CisKKy8qCisgKiAtIGFkZF90ZW1wb3JhcnlfZW50cnkoKSBhZGQgYSB0ZW1wb3JhcnkgVExCIGVudHJ5LiBXZSB1c2UgVExCIGVudHJpZXMKKyAqCXN0YXJ0aW5nIGF0IHRoZSB0b3AgYW5kIHdvcmtpbmcgZG93bi4gVGhpcyBpcyBmb3IgcG9wdWxhdGluZyB0aGUKKyAqCVRMQiBiZWZvcmUgdHJhcF9pbml0KCkgcHV0cyB0aGUgVExCIG1pc3MgaGFuZGxlciBpbiBwbGFjZS4gSXQKKyAqCXNob3VsZCBiZSB1c2VkIG9ubHkgZm9yIGVudHJpZXMgbWF0Y2hpbmcgdGhlIGFjdHVhbCBwYWdlIHRhYmxlcywKKyAqCXRvIHByZXZlbnQgaW5jb25zaXN0ZW5jaWVzLgorICovCitleHRlcm4gaW50IGFkZF90ZW1wb3JhcnlfZW50cnkodW5zaWduZWQgbG9uZyBlbnRyeWxvMCwgdW5zaWduZWQgbG9uZyBlbnRyeWxvMSwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIGVudHJ5aGksIHVuc2lnbmVkIGxvbmcgcGFnZW1hc2spOworCisKKy8qIEJhc2ljYWxseSB3ZSBoYXZlIHRoZSBzYW1lIHR3by1sZXZlbCAod2hpY2ggaXMgdGhlIGxvZ2ljYWwgdGhyZWUgbGV2ZWwKKyAqIExpbnV4IHBhZ2UgdGFibGUgbGF5b3V0IGZvbGRlZCkgcGFnZSB0YWJsZXMgYXMgdGhlIGkzODYuICBTb21lIGRheQorICogd2hlbiB3ZSBoYXZlIHByb3BlciBwYWdlIGNvbG9yaW5nIHN1cHBvcnQgd2UgY2FuIGhhdmUgYSAxJSBxdWlja2VyCisgKiB0bGIgcmVmaWxsIGhhbmRsaW5nIG1lY2hhbmlzbSwgYnV0IGZvciBub3cgaXQgaXMgYSBiaXQgc2xvd2VyIGJ1dAorICogd29ya3MgZXZlbiB3aXRoIHRoZSBjYWNoZSBhbGlhc2luZyBwcm9ibGVtIHRoZSBSNGsgYW5kIGFib3ZlIGhhdmUuCisgKi8KKworLyogUE1EX1NISUZUIGRldGVybWluZXMgdGhlIHNpemUgb2YgdGhlIGFyZWEgYSBzZWNvbmQtbGV2ZWwgcGFnZSB0YWJsZSBjYW4gbWFwICovCisjaWZkZWYgQ09ORklHXzY0QklUX1BIWVNfQUREUgorI2RlZmluZSBQTURfU0hJRlQJMjEKKyNlbHNlCisjZGVmaW5lIFBNRF9TSElGVAkyMgorI2VuZGlmCisjZGVmaW5lIFBNRF9TSVpFCSgxVUwgPDwgUE1EX1NISUZUKQorI2RlZmluZSBQTURfTUFTSwkofihQTURfU0laRS0xKSkKKworLyogUEdESVJfU0hJRlQgZGV0ZXJtaW5lcyB3aGF0IGEgdGhpcmQtbGV2ZWwgcGFnZSB0YWJsZSBlbnRyeSBjYW4gbWFwICovCisjZGVmaW5lIFBHRElSX1NISUZUCVBNRF9TSElGVAorI2RlZmluZSBQR0RJUl9TSVpFCSgxVUwgPDwgUEdESVJfU0hJRlQpCisjZGVmaW5lIFBHRElSX01BU0sJKH4oUEdESVJfU0laRS0xKSkKKworLyoKKyAqIEVudHJpZXMgcGVyIHBhZ2UgZGlyZWN0b3J5IGxldmVsOiB3ZSB1c2UgdHdvLWxldmVsLCBzbworICogd2UgZG9uJ3QgcmVhbGx5IGhhdmUgYW55IFBNRCBkaXJlY3RvcnkgcGh5c2ljYWxseS4KKyAqLworI2lmZGVmIENPTkZJR182NEJJVF9QSFlTX0FERFIKKyNkZWZpbmUgUEdEX09SREVSCTEKKyNkZWZpbmUgUE1EX09SREVSCTAKKyNkZWZpbmUgUFRFX09SREVSCTAKKyNlbHNlCisjZGVmaW5lIFBHRF9PUkRFUgkwCisjZGVmaW5lIFBNRF9PUkRFUgkwCisjZGVmaW5lIFBURV9PUkRFUgkwCisjZW5kaWYKKworI2RlZmluZSBQVFJTX1BFUl9QR0QJKChQQUdFX1NJWkUgPDwgUEdEX09SREVSKSAvIHNpemVvZihwZ2RfdCkpCisjZGVmaW5lIFBUUlNfUEVSX1BNRAkxCisjZGVmaW5lIFBUUlNfUEVSX1BURQkoKFBBR0VfU0laRSA8PCBQVEVfT1JERVIpIC8gc2l6ZW9mKHB0ZV90KSkKKworI2RlZmluZSBVU0VSX1BUUlNfUEVSX1BHRAkoMHg4MDAwMDAwMFVML1BHRElSX1NJWkUpCisjZGVmaW5lIEZJUlNUX1VTRVJfUEdEX05SCTAKKworI2RlZmluZSBWTUFMTE9DX1NUQVJUICAgICBLU0VHMgorCisjaWZkZWYgQ09ORklHX0hJR0hNRU0KKyMgZGVmaW5lIFZNQUxMT0NfRU5ECShQS01BUF9CQVNFLTIqUEFHRV9TSVpFKQorI2Vsc2UKKyMgZGVmaW5lIFZNQUxMT0NfRU5ECShGSVhBRERSX1NUQVJULTIqUEFHRV9TSVpFKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfNjRCSVRfUEhZU19BRERSCisjZGVmaW5lIHB0ZV9FUlJPUihlKSBcCisJcHJpbnRrKCIlczolZDogYmFkIHB0ZSAlMDE2THguXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sIHB0ZV92YWwoZSkpCisjZWxzZQorI2RlZmluZSBwdGVfRVJST1IoZSkgXAorCXByaW50aygiJXM6JWQ6IGJhZCBwdGUgJTA4bHguXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sIHB0ZV92YWwoZSkpCisjZW5kaWYKKyNkZWZpbmUgcG1kX0VSUk9SKGUpIFwKKwlwcmludGsoIiVzOiVkOiBiYWQgcG1kICUwOGx4LlxuIiwgX19GSUxFX18sIF9fTElORV9fLCBwbWRfdmFsKGUpKQorI2RlZmluZSBwZ2RfRVJST1IoZSkgXAorCXByaW50aygiJXM6JWQ6IGJhZCBwZ2QgJTA4bHguXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sIHBnZF92YWwoZSkpCisKK2V4dGVybiB2b2lkIGxvYWRfcGdkKHVuc2lnbmVkIGxvbmcgcGdfZGlyKTsKKworZXh0ZXJuIHB0ZV90IGludmFsaWRfcHRlX3RhYmxlW1BBR0VfU0laRS9zaXplb2YocHRlX3QpXTsKKworLyoKKyAqIEVtcHR5IHBnZC9wbWQgZW50cmllcyBwb2ludCB0byB0aGUgaW52YWxpZF9wdGVfdGFibGUuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHBtZF9ub25lKHBtZF90IHBtZCkKK3sKKwlyZXR1cm4gcG1kX3ZhbChwbWQpID09ICh1bnNpZ25lZCBsb25nKSBpbnZhbGlkX3B0ZV90YWJsZTsKK30KKworI2RlZmluZSBwbWRfYmFkKHBtZCkJCShwbWRfdmFsKHBtZCkgJiB+UEFHRV9NQVNLKQorCitzdGF0aWMgaW5saW5lIGludCBwbWRfcHJlc2VudChwbWRfdCBwbWQpCit7CisJcmV0dXJuIHBtZF92YWwocG1kKSAhPSAodW5zaWduZWQgbG9uZykgaW52YWxpZF9wdGVfdGFibGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwbWRfY2xlYXIocG1kX3QgKnBtZHApCit7CisJcG1kX3ZhbCgqcG1kcCkgPSAoKHVuc2lnbmVkIGxvbmcpIGludmFsaWRfcHRlX3RhYmxlKTsKK30KKworLyoKKyAqIFRoZSAicGdkX3h4eCgpIiBmdW5jdGlvbnMgaGVyZSBhcmUgdHJpdmlhbCBmb3IgYSBmb2xkZWQgdHdvLWxldmVsCisgKiBzZXR1cDogdGhlIHBnZCBpcyBuZXZlciBiYWQsIGFuZCBhIHBtZCBhbHdheXMgZXhpc3RzIChhcyBpdCdzIGZvbGRlZAorICogaW50byB0aGUgcGdkIGVudHJ5KQorICovCitzdGF0aWMgaW5saW5lIGludCBwZ2Rfbm9uZShwZ2RfdCBwZ2QpCQl7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIGludCBwZ2RfYmFkKHBnZF90IHBnZCkJCXsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHBnZF9wcmVzZW50KHBnZF90IHBnZCkJeyByZXR1cm4gMTsgfQorc3RhdGljIGlubGluZSB2b2lkIHBnZF9jbGVhcihwZ2RfdCAqcGdkcCkJeyB9CisKKyNpZiBkZWZpbmVkKENPTkZJR182NEJJVF9QSFlTX0FERFIpICYmIGRlZmluZWQoQ09ORklHX0NQVV9NSVBTMzIpCisjZGVmaW5lIHB0ZV9wYWdlKHgpCQlwZm5fdG9fcGFnZShwdGVfcGZuKHgpKQorI2RlZmluZSBwdGVfcGZuKHgpCQkoKHVuc2lnbmVkIGxvbmcpKCh4KS5wdGVfaGlnaCA+PiA2KSkKK3N0YXRpYyBpbmxpbmUgcHRlX3QKK3Bmbl9wdGUodW5zaWduZWQgbG9uZyBwZm4sIHBncHJvdF90IHByb3QpCit7CisJcHRlX3QgcHRlOworCXB0ZS5wdGVfaGlnaCA9IChwZm4gPDwgNikgfCAocGdwcm90X3ZhbChwcm90KSAmIDB4M2YpOworCXB0ZS5wdGVfbG93ID0gcGdwcm90X3ZhbChwcm90KTsKKwlyZXR1cm4gcHRlOworfQorCisjZWxzZQorCisjZGVmaW5lIHB0ZV9wYWdlKHgpCQlwZm5fdG9fcGFnZShwdGVfcGZuKHgpKQorCisjaWZkZWYgQ09ORklHX0NQVV9WUjQxWFgKKyNkZWZpbmUgcHRlX3Bmbih4KQkJKCh1bnNpZ25lZCBsb25nKSgoeCkucHRlID4+IChQQUdFX1NISUZUICsgMikpKQorI2RlZmluZSBwZm5fcHRlKHBmbiwgcHJvdCkJX19wdGUoKChwZm4pIDw8IChQQUdFX1NISUZUICsgMikpIHwgcGdwcm90X3ZhbChwcm90KSkKKyNlbHNlCisjZGVmaW5lIHB0ZV9wZm4oeCkJCSgodW5zaWduZWQgbG9uZykoKHgpLnB0ZSA+PiBQQUdFX1NISUZUKSkKKyNkZWZpbmUgcGZuX3B0ZShwZm4sIHByb3QpCV9fcHRlKCgocGZuKSA8PCBQQUdFX1NISUZUKSB8IHBncHJvdF92YWwocHJvdCkpCisjZW5kaWYKKyNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR182NEJJVF9QSFlTX0FERFIpICYmIGRlZmluZWQoQ09ORklHX0NQVV9NSVBTMzIpICovCisKKyNkZWZpbmUgX19wZ2Rfb2Zmc2V0KGFkZHJlc3MpCXBnZF9pbmRleChhZGRyZXNzKQorI2RlZmluZSBfX3BtZF9vZmZzZXQoYWRkcmVzcykJKCgoYWRkcmVzcykgPj4gUE1EX1NISUZUKSAmIChQVFJTX1BFUl9QTUQtMSkpCisKKy8qIHRvIGZpbmQgYW4gZW50cnkgaW4gYSBrZXJuZWwgcGFnZS10YWJsZS1kaXJlY3RvcnkgKi8KKyNkZWZpbmUgcGdkX29mZnNldF9rKGFkZHJlc3MpIHBnZF9vZmZzZXQoJmluaXRfbW0sIGFkZHJlc3MpCisKKyNkZWZpbmUgcGdkX2luZGV4KGFkZHJlc3MpCSgoYWRkcmVzcykgPj4gUEdESVJfU0hJRlQpCisKKy8qIHRvIGZpbmQgYW4gZW50cnkgaW4gYSBwYWdlLXRhYmxlLWRpcmVjdG9yeSAqLworI2RlZmluZSBwZ2Rfb2Zmc2V0KG1tLGFkZHIpCSgobW0pLT5wZ2QgKyBwZ2RfaW5kZXgoYWRkcikpCisKKy8qIEZpbmQgYW4gZW50cnkgaW4gdGhlIHNlY29uZC1sZXZlbCBwYWdlIHRhYmxlLi4gKi8KK3N0YXRpYyBpbmxpbmUgcG1kX3QgKnBtZF9vZmZzZXQocGdkX3QgKmRpciwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCXJldHVybiAocG1kX3QgKikgZGlyOworfQorCisvKiBGaW5kIGFuIGVudHJ5IGluIHRoZSB0aGlyZC1sZXZlbCBwYWdlIHRhYmxlLi4gKi8KKyNkZWZpbmUgX19wdGVfb2Zmc2V0KGFkZHJlc3MpCQkJCQkJXAorCSgoKGFkZHJlc3MpID4+IFBBR0VfU0hJRlQpICYgKFBUUlNfUEVSX1BURSAtIDEpKQorI2RlZmluZSBwdGVfb2Zmc2V0KGRpciwgYWRkcmVzcykJCQkJCVwKKwkoKHB0ZV90ICopIChwbWRfcGFnZV9rZXJuZWwoKmRpcikpICsgX19wdGVfb2Zmc2V0KGFkZHJlc3MpKQorI2RlZmluZSBwdGVfb2Zmc2V0X2tlcm5lbChkaXIsIGFkZHJlc3MpIFwKKwkoKHB0ZV90ICopIHBtZF9wYWdlX2tlcm5lbCgqKGRpcikpICsgIF9fcHRlX29mZnNldChhZGRyZXNzKSkKKworI2RlZmluZSBwdGVfb2Zmc2V0X21hcChkaXIsIGFkZHJlc3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSgocHRlX3QgKilwYWdlX2FkZHJlc3MocG1kX3BhZ2UoKihkaXIpKSkgKyBfX3B0ZV9vZmZzZXQoYWRkcmVzcykpCisjZGVmaW5lIHB0ZV9vZmZzZXRfbWFwX25lc3RlZChkaXIsIGFkZHJlc3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJKChwdGVfdCAqKXBhZ2VfYWRkcmVzcyhwbWRfcGFnZSgqKGRpcikpKSArIF9fcHRlX29mZnNldChhZGRyZXNzKSkKKyNkZWZpbmUgcHRlX3VubWFwKHB0ZSkgKCh2b2lkKShwdGUpKQorI2RlZmluZSBwdGVfdW5tYXBfbmVzdGVkKHB0ZSkgKCh2b2lkKShwdGUpKQorCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1IzMDAwKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfVFgzOVhYKQorCisvKiBTd2FwIGVudHJpZXMgbXVzdCBoYXZlIFZBTElEIGJpdCBjbGVhcmVkLiAqLworI2RlZmluZSBfX3N3cF90eXBlKHgpCQkoKCh4KS52YWwgPj4gMTApICYgMHgxZikKKyNkZWZpbmUgX19zd3Bfb2Zmc2V0KHgpCQkoKHgpLnZhbCA+PiAxNSkKKyNkZWZpbmUgX19zd3BfZW50cnkodHlwZSxvZmZzZXQpCVwKKwkoKHN3cF9lbnRyeV90KSB7ICgodHlwZSkgPDwgMTApIHwgKChvZmZzZXQpIDw8IDE1KSB9KQorCisvKgorICogQml0cyAwLCAxLCAyLCA5IGFuZCAxMCBhcmUgdGFrZW4sIHNwbGl0IHVwIHRoZSAyNyBiaXRzIG9mIG9mZnNldAorICogaW50byB0aGlzIHJhbmdlOgorICovCisjZGVmaW5lIFBURV9GSUxFX01BWF9CSVRTCTI3CisKKyNkZWZpbmUgcHRlX3RvX3Bnb2ZmKF9wdGUpIFwKKwkoKCgoX3B0ZSkucHRlID4+IDMpICYgMHgzZiApICsgKCgoX3B0ZSkucHRlID4+IDExKSA8PCA4ICkpCisKKyNkZWZpbmUgcGdvZmZfdG9fcHRlKG9mZikgXAorCSgocHRlX3QpIHsgKCgob2ZmKSAmIDB4M2YpIDw8IDMpICsgKCgob2ZmKSA+PiA4KSA8PCAxMSkgKyBfUEFHRV9GSUxFIH0pCisKKyNlbHNlCisKKy8qIFN3YXAgZW50cmllcyBtdXN0IGhhdmUgVkFMSUQgYW5kIEdMT0JBTCBiaXRzIGNsZWFyZWQuICovCisjZGVmaW5lIF9fc3dwX3R5cGUoeCkJCSgoKHgpLnZhbCA+PiA4KSAmIDB4MWYpCisjZGVmaW5lIF9fc3dwX29mZnNldCh4KQkJKCh4KS52YWwgPj4gMTMpCisjZGVmaW5lIF9fc3dwX2VudHJ5KHR5cGUsb2Zmc2V0KQlcCisJCSgoc3dwX2VudHJ5X3QpIHsgKCh0eXBlKSA8PCA4KSB8ICgob2Zmc2V0KSA8PCAxMykgfSkKKworLyoKKyAqIEJpdHMgMCwgMSwgMiwgNyBhbmQgOCBhcmUgdGFrZW4sIHNwbGl0IHVwIHRoZSAyNyBiaXRzIG9mIG9mZnNldAorICogaW50byB0aGlzIHJhbmdlOgorICovCisjZGVmaW5lIFBURV9GSUxFX01BWF9CSVRTCTI3CisKKyNpZiBkZWZpbmVkKENPTkZJR182NEJJVF9QSFlTX0FERFIpICYmIGRlZmluZWQoQ09ORklHX0NQVV9NSVBTMzIpCisJLyogZml4bWUgKi8KKyNkZWZpbmUgcHRlX3RvX3Bnb2ZmKF9wdGUpICgoKF9wdGUpLnB0ZV9oaWdoID4+IDYpICsgKChfcHRlKS5wdGVfaGlnaCAmIDB4M2YpKQorI2RlZmluZSBwZ29mZl90b19wdGUob2ZmKSBcCisgCSgocHRlX3QpeygoKG9mZikgJiAweDNmKSArICgob2ZmKSA8PCA2KSArIF9QQUdFX0ZJTEUpfSkKKworI2Vsc2UKKyNkZWZpbmUgcHRlX3RvX3Bnb2ZmKF9wdGUpIFwKKwkoKCgoX3B0ZSkucHRlID4+IDMpICYgMHgxZiApICsgKCgoX3B0ZSkucHRlID4+IDkpIDw8IDYgKSkKKworI2RlZmluZSBwZ29mZl90b19wdGUob2ZmKSBcCisJKChwdGVfdCkgeyAoKChvZmYpICYgMHgxZikgPDwgMykgKyAoKChvZmYpID4+IDYpIDw8IDkpICsgX1BBR0VfRklMRSB9KQorI2VuZGlmCisKKyNlbmRpZgorCisjZGVmaW5lIF9fcHRlX3RvX3N3cF9lbnRyeShwdGUpCSgoc3dwX2VudHJ5X3QpIHsgcHRlX3ZhbChwdGUpIH0pCisjZGVmaW5lIF9fc3dwX2VudHJ5X3RvX3B0ZSh4KQkoKHB0ZV90KSB7ICh4KS52YWwgfSkKKworI2VuZGlmIC8qIF9BU01fUEdUQUJMRV8zMl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3BndGFibGUtNjQuaCBiL2luY2x1ZGUvYXNtLW1pcHMvcGd0YWJsZS02NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwNGI1NTEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3BndGFibGUtNjQuaApAQCAtMCwwICsxLDIyNyBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NCwgOTUsIDk2LCA5NywgOTgsIDk5LCAyMDAwLCAyMDAzIFJhbGYgQmFlY2hsZQorICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAxIFNpbGljb24gR3JhcGhpY3MsIEluYy4KKyAqLworI2lmbmRlZiBfQVNNX1BHVEFCTEVfNjRfSAorI2RlZmluZSBfQVNNX1BHVEFCTEVfNjRfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorCisjaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlY3RsLmg+CisKKy8qCisgKiBFYWNoIGFkZHJlc3Mgc3BhY2UgaGFzIDIgNEsgcGFnZXMgYXMgaXRzIHBhZ2UgZGlyZWN0b3J5LCBnaXZpbmcgMTAyNAorICogKD09IFBUUlNfUEVSX1BHRCkgOCBieXRlIHBvaW50ZXJzIHRvIHBtZCB0YWJsZXMuIEVhY2ggcG1kIHRhYmxlIGlzIGEKKyAqIHBhaXIgb2YgNEsgcGFnZXMsIGdpdmluZyAxMDI0ICg9PSBQVFJTX1BFUl9QTUQpIDggYnl0ZSBwb2ludGVycyB0bworICogcGFnZSB0YWJsZXMuIEVhY2ggcGFnZSB0YWJsZSBpcyBhIHNpbmdsZSA0SyBwYWdlLCBnaXZpbmcgNTEyICg9PQorICogUFRSU19QRVJfUFRFKSA4IGJ5dGUgcHRlcy4gRWFjaCBwZ2RlIGlzIGluaXRpYWxpemVkIHRvIHBvaW50IHRvCisgKiBpbnZhbGlkX3BtZF90YWJsZSwgZWFjaCBwbWRlIGlzIGluaXRpYWxpemVkIHRvIHBvaW50IHRvCisgKiBpbnZhbGlkX3B0ZV90YWJsZSwgZWFjaCBwdGUgaXMgaW5pdGlhbGl6ZWQgdG8gMC4gV2hlbiBtZW1vcnkgaXMgbG93LAorICogYW5kIGEgcG1kIHRhYmxlIG9yIGEgcGFnZSB0YWJsZSBhbGxvY2F0aW9uIGZhaWxzLCBlbXB0eV9iYWRfcG1kX3RhYmxlCisgKiBhbmQgZW1wdHlfYmFkX3BhZ2VfdGFibGUgaXMgcmV0dXJuZWQgYmFjayB0byBoaWdoZXIgbGF5ZXIgY29kZSwgc28KKyAqIHRoYXQgdGhlIGZhaWx1cmUgaXMgcmVjb2duaXplZCBsYXRlciBvbi4gTGludXggZG9lcyBub3Qgc2VlbSB0bworICogaGFuZGxlIHRoZXNlIGZhaWx1cmVzIHZlcnkgd2VsbCB0aG91Z2guIFRoZSBlbXB0eV9iYWRfcGFnZV90YWJsZSBoYXMKKyAqIGludmFsaWQgcHRlIGVudHJpZXMgaW4gaXQsIHRvIGZvcmNlIHBhZ2UgZmF1bHRzLgorICoKKyAqIEtlcm5lbCBtYXBwaW5nczoga2VybmVsIG1hcHBpbmdzIGFyZSBoZWxkIGluIHRoZSBzd2FwcGVyX3BnX3RhYmxlLgorICogVGhlIGxheW91dCBpcyBpZGVudGljYWwgdG8gdXNlcnNwYWNlIGV4Y2VwdCBpdCdzIGluZGV4ZWQgd2l0aCB0aGUKKyAqIGZhdWx0IGFkZHJlc3MgLSBWTUFMTE9DX1NUQVJULgorICovCisKKy8qIFBNRF9TSElGVCBkZXRlcm1pbmVzIHRoZSBzaXplIG9mIHRoZSBhcmVhIGEgc2Vjb25kLWxldmVsIHBhZ2UgdGFibGUgY2FuIG1hcCAqLworI2RlZmluZSBQTURfU0hJRlQJKFBBR0VfU0hJRlQgKyAoUEFHRV9TSElGVCAtIDMpKQorI2RlZmluZSBQTURfU0laRQkoMVVMIDw8IFBNRF9TSElGVCkKKyNkZWZpbmUgUE1EX01BU0sJKH4oUE1EX1NJWkUtMSkpCisKKy8qIFBHRElSX1NISUZUIGRldGVybWluZXMgd2hhdCBhIHRoaXJkLWxldmVsIHBhZ2UgdGFibGUgZW50cnkgY2FuIG1hcCAqLworI2RlZmluZSBQR0RJUl9TSElGVAkoUE1EX1NISUZUICsgKFBBR0VfU0hJRlQgKyAxIC0gMykpCisjZGVmaW5lIFBHRElSX1NJWkUJKDFVTCA8PCBQR0RJUl9TSElGVCkKKyNkZWZpbmUgUEdESVJfTUFTSwkofihQR0RJUl9TSVpFLTEpKQorCisvKgorICogRm9yIDRrQiBwYWdlIHNpemUgd2UgdXNlIGEgMyBsZXZlbCBwYWdlIHRyZWUgYW5kIGEgOGtCIHBtZCBhbmQgcGdkcyB3aGljaAorICogcGVybWl0cyB1cyBtYXBwaW5nIDQwIGJpdHMgb2YgdmlydHVhbCBhZGRyZXNzIHNwYWNlLgorICoKKyAqIFdlIHVzZWQgdG8gaW1wbGVtZW50IDQxIGJpdHMgYnkgaGF2aW5nIGFuIG9yZGVyIDEgcG1kIGxldmVsIGJ1dCB0aGF0IHNlZW1lZAorICogcmF0aGVyIHBvaW50bGVzcy4KKyAqCisgKiBGb3IgOGtCIHBhZ2Ugc2l6ZSB3ZSB1c2UgYSAzIGxldmVsIHBhZ2UgdHJlZSB3aGljaCBwZXJtaXRzIGEgdG90YWwgb2YKKyAqIDhUQiBvZiBhZGRyZXNzIHNwYWNlLiAgQWx0ZXJuYXRpdmVseSBhIDMzLWJpdCAvIDhHQiBvcmdhbml6YXRpb24gdXNpbmcKKyAqIHR3byBsZXZlbHMgd291bGQgYmUgZWFzeSB0byBpbXBsZW1lbnQuCisgKgorICogRm9yIDE2a0IgcGFnZSBzaXplIHdlIHVzZSBhIDIgbGV2ZWwgcGFnZSB0cmVlIHdoaWNoIHBlcm1pdHMgYSB0b3RhbCBvZgorICogMzYgYml0cyBvZiB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UuICBXZSBjb3VsZCBhZGQgYSB0aGlyZCBsZXZlLiBidXQgaXQgc2VlbXMKKyAqIGxpa2UgYXQgdGhlIG1vbWVudCB0aGVyZSdzIG5vIG5lZWQgZm9yIHRoaXMuCisgKgorICogRm9yIDY0a0IgcGFnZSBzaXplIHdlIHVzZSBhIDIgbGV2ZWwgcGFnZSB0YWJsZSB0cmVlIGZvciBhIHRvdGFsIG9mIDQyIGJpdHMKKyAqIG9mIHZpcnR1YWwgYWRkcmVzcyBzcGFjZS4KKyAqLworI2lmZGVmIENPTkZJR19QQUdFX1NJWkVfNEtCCisjZGVmaW5lIFBHRF9PUkRFUgkJMQorI2RlZmluZSBQTURfT1JERVIJCTAKKyNkZWZpbmUgUFRFX09SREVSCQkwCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfUEFHRV9TSVpFXzhLQgorI2RlZmluZSBQR0RfT1JERVIJCTAKKyNkZWZpbmUgUE1EX09SREVSCQkwCisjZGVmaW5lIFBURV9PUkRFUgkJMAorI2VuZGlmCisjaWZkZWYgQ09ORklHX1BBR0VfU0laRV8xNktCCisjZGVmaW5lIFBHRF9PUkRFUgkJMAorI2RlZmluZSBQTURfT1JERVIJCTAKKyNkZWZpbmUgUFRFX09SREVSCQkwCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfUEFHRV9TSVpFXzY0S0IKKyNkZWZpbmUgUEdEX09SREVSCQkwCisjZGVmaW5lIFBNRF9PUkRFUgkJMAorI2RlZmluZSBQVEVfT1JERVIJCTAKKyNlbmRpZgorCisjZGVmaW5lIFBUUlNfUEVSX1BHRAkoKFBBR0VfU0laRSA8PCBQR0RfT1JERVIpIC8gc2l6ZW9mKHBnZF90KSkKKyNkZWZpbmUgUFRSU19QRVJfUE1ECSgoUEFHRV9TSVpFIDw8IFBNRF9PUkRFUikgLyBzaXplb2YocG1kX3QpKQorI2RlZmluZSBQVFJTX1BFUl9QVEUJKChQQUdFX1NJWkUgPDwgUFRFX09SREVSKSAvIHNpemVvZihwdGVfdCkpCisKKyNkZWZpbmUgVVNFUl9QVFJTX1BFUl9QR0QJKFRBU0tfU0laRSAvIFBHRElSX1NJWkUpCisjZGVmaW5lIEZJUlNUX1VTRVJfUEdEX05SCTAKKworI2RlZmluZSBWTUFMTE9DX1NUQVJUCQlYS1NFRworI2RlZmluZSBWTUFMTE9DX0VORAlcCisJKFZNQUxMT0NfU1RBUlQgKyBQVFJTX1BFUl9QR0QgKiBQVFJTX1BFUl9QTUQgKiBQVFJTX1BFUl9QVEUgKiBQQUdFX1NJWkUpCisKKyNkZWZpbmUgcHRlX0VSUk9SKGUpIFwKKwlwcmludGsoIiVzOiVkOiBiYWQgcHRlICUwMTZseC5cbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgcHRlX3ZhbChlKSkKKyNkZWZpbmUgcG1kX0VSUk9SKGUpIFwKKwlwcmludGsoIiVzOiVkOiBiYWQgcG1kICUwMTZseC5cbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgcG1kX3ZhbChlKSkKKyNkZWZpbmUgcGdkX0VSUk9SKGUpIFwKKwlwcmludGsoIiVzOiVkOiBiYWQgcGdkICUwMTZseC5cbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgcGdkX3ZhbChlKSkKKworZXh0ZXJuIHB0ZV90IGludmFsaWRfcHRlX3RhYmxlW1BBR0VfU0laRS9zaXplb2YocHRlX3QpXTsKK2V4dGVybiBwdGVfdCBlbXB0eV9iYWRfcGFnZV90YWJsZVtQQUdFX1NJWkUvc2l6ZW9mKHB0ZV90KV07CitleHRlcm4gcG1kX3QgaW52YWxpZF9wbWRfdGFibGVbMipQQUdFX1NJWkUvc2l6ZW9mKHBtZF90KV07CitleHRlcm4gcG1kX3QgZW1wdHlfYmFkX3BtZF90YWJsZVsyKlBBR0VfU0laRS9zaXplb2YocG1kX3QpXTsKKworLyoKKyAqIEVtcHR5IHBtZCBlbnRyaWVzIHBvaW50IHRvIHRoZSBpbnZhbGlkX3B0ZV90YWJsZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgcG1kX25vbmUocG1kX3QgcG1kKQoreworCXJldHVybiBwbWRfdmFsKHBtZCkgPT0gKHVuc2lnbmVkIGxvbmcpIGludmFsaWRfcHRlX3RhYmxlOworfQorCisjZGVmaW5lIHBtZF9iYWQocG1kKQkJKHBtZF92YWwocG1kKSAmIH5QQUdFX01BU0spCisKK3N0YXRpYyBpbmxpbmUgaW50IHBtZF9wcmVzZW50KHBtZF90IHBtZCkKK3sKKwlyZXR1cm4gcG1kX3ZhbChwbWQpICE9ICh1bnNpZ25lZCBsb25nKSBpbnZhbGlkX3B0ZV90YWJsZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBtZF9jbGVhcihwbWRfdCAqcG1kcCkKK3sKKwlwbWRfdmFsKCpwbWRwKSA9ICgodW5zaWduZWQgbG9uZykgaW52YWxpZF9wdGVfdGFibGUpOworfQorCisvKgorICogRW1wdHkgcGdkIGVudHJpZXMgcG9pbnQgdG8gdGhlIGludmFsaWRfcG1kX3RhYmxlLgorICovCitzdGF0aWMgaW5saW5lIGludCBwZ2Rfbm9uZShwZ2RfdCBwZ2QpCit7CisJcmV0dXJuIHBnZF92YWwocGdkKSA9PSAodW5zaWduZWQgbG9uZykgaW52YWxpZF9wbWRfdGFibGU7Cit9CisKKyNkZWZpbmUgcGdkX2JhZChwZ2QpCQkocGdkX3ZhbChwZ2QpICZ+IFBBR0VfTUFTSykKKworc3RhdGljIGlubGluZSBpbnQgcGdkX3ByZXNlbnQocGdkX3QgcGdkKQoreworCXJldHVybiBwZ2RfdmFsKHBnZCkgIT0gKHVuc2lnbmVkIGxvbmcpIGludmFsaWRfcG1kX3RhYmxlOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGdkX2NsZWFyKHBnZF90ICpwZ2RwKQoreworCXBnZF92YWwoKnBnZHApID0gKCh1bnNpZ25lZCBsb25nKSBpbnZhbGlkX3BtZF90YWJsZSk7Cit9CisKKyNkZWZpbmUgcHRlX3BhZ2UoeCkJCXBmbl90b19wYWdlKCh1bnNpZ25lZCBsb25nKSgocHRlX3ZhbCh4KSA+PiBQQUdFX1NISUZUKSkpCisjaWZkZWYgQ09ORklHX0NQVV9WUjQxWFgKKyNkZWZpbmUgcHRlX3Bmbih4KQkJKCh1bnNpZ25lZCBsb25nKSgoeCkucHRlID4+IChQQUdFX1NISUZUICsgMikpKQorI2RlZmluZSBwZm5fcHRlKHBmbiwgcHJvdCkJX19wdGUoKChwZm4pIDw8IChQQUdFX1NISUZUICsgMikpIHwgcGdwcm90X3ZhbChwcm90KSkKKyNlbHNlCisjZGVmaW5lIHB0ZV9wZm4oeCkJCSgodW5zaWduZWQgbG9uZykoKHgpLnB0ZSA+PiBQQUdFX1NISUZUKSkKKyNkZWZpbmUgcGZuX3B0ZShwZm4sIHByb3QpCV9fcHRlKCgocGZuKSA8PCBQQUdFX1NISUZUKSB8IHBncHJvdF92YWwocHJvdCkpCisjZW5kaWYKKworI2RlZmluZSBfX3BnZF9vZmZzZXQoYWRkcmVzcykJcGdkX2luZGV4KGFkZHJlc3MpCisjZGVmaW5lIHBhZ2VfcHRlKHBhZ2UpIHBhZ2VfcHRlX3Byb3QocGFnZSwgX19wZ3Byb3QoMCkpCisKKy8qIHRvIGZpbmQgYW4gZW50cnkgaW4gYSBrZXJuZWwgcGFnZS10YWJsZS1kaXJlY3RvcnkgKi8KKyNkZWZpbmUgcGdkX29mZnNldF9rKGFkZHJlc3MpIHBnZF9vZmZzZXQoJmluaXRfbW0sIDApCisKKyNkZWZpbmUgcGdkX2luZGV4KGFkZHJlc3MpCQkoKGFkZHJlc3MpID4+IFBHRElSX1NISUZUKQorCisvKiB0byBmaW5kIGFuIGVudHJ5IGluIGEgcGFnZS10YWJsZS1kaXJlY3RvcnkgKi8KKyNkZWZpbmUgcGdkX29mZnNldChtbSxhZGRyKQkoKG1tKS0+cGdkICsgcGdkX2luZGV4KGFkZHIpKQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcGdkX3BhZ2UocGdkX3QgcGdkKQoreworCXJldHVybiBwZ2RfdmFsKHBnZCk7Cit9CisKKy8qIEZpbmQgYW4gZW50cnkgaW4gdGhlIHNlY29uZC1sZXZlbCBwYWdlIHRhYmxlLi4gKi8KK3N0YXRpYyBpbmxpbmUgcG1kX3QgKnBtZF9vZmZzZXQocGdkX3QgKiBkaXIsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwlyZXR1cm4gKHBtZF90ICopIHBnZF9wYWdlKCpkaXIpICsKKwkgICAgICAgKChhZGRyZXNzID4+IFBNRF9TSElGVCkgJiAoUFRSU19QRVJfUE1EIC0gMSkpOworfQorCisvKiBGaW5kIGFuIGVudHJ5IGluIHRoZSB0aGlyZC1sZXZlbCBwYWdlIHRhYmxlLi4gKi8KKyNkZWZpbmUgX19wdGVfb2Zmc2V0KGFkZHJlc3MpCQkJCQkJXAorCSgoKGFkZHJlc3MpID4+IFBBR0VfU0hJRlQpICYgKFBUUlNfUEVSX1BURSAtIDEpKQorI2RlZmluZSBwdGVfb2Zmc2V0KGRpciwgYWRkcmVzcykJCQkJCVwKKwkoKHB0ZV90ICopIChwbWRfcGFnZV9rZXJuZWwoKmRpcikpICsgX19wdGVfb2Zmc2V0KGFkZHJlc3MpKQorI2RlZmluZSBwdGVfb2Zmc2V0X2tlcm5lbChkaXIsIGFkZHJlc3MpCQkJCQlcCisJKChwdGVfdCAqKSBwbWRfcGFnZV9rZXJuZWwoKihkaXIpKSArICBfX3B0ZV9vZmZzZXQoYWRkcmVzcykpCisjZGVmaW5lIHB0ZV9vZmZzZXRfbWFwKGRpciwgYWRkcmVzcykJCQkJCVwKKwkoKHB0ZV90ICopcGFnZV9hZGRyZXNzKHBtZF9wYWdlKCooZGlyKSkpICsgX19wdGVfb2Zmc2V0KGFkZHJlc3MpKQorI2RlZmluZSBwdGVfb2Zmc2V0X21hcF9uZXN0ZWQoZGlyLCBhZGRyZXNzKQkJCQlcCisJKChwdGVfdCAqKXBhZ2VfYWRkcmVzcyhwbWRfcGFnZSgqKGRpcikpKSArIF9fcHRlX29mZnNldChhZGRyZXNzKSkKKyNkZWZpbmUgcHRlX3VubWFwKHB0ZSkgKCh2b2lkKShwdGUpKQorI2RlZmluZSBwdGVfdW5tYXBfbmVzdGVkKHB0ZSkgKCh2b2lkKShwdGUpKQorCisvKgorICogSW5pdGlhbGl6ZSBhIG5ldyBwZ2QgLyBwbWQgdGFibGUgd2l0aCBpbnZhbGlkIHBvaW50ZXJzLgorICovCitleHRlcm4gdm9pZCBwZ2RfaW5pdCh1bnNpZ25lZCBsb25nIHBhZ2UpOworZXh0ZXJuIHZvaWQgcG1kX2luaXQodW5zaWduZWQgbG9uZyBwYWdlLCB1bnNpZ25lZCBsb25nIHBhZ2V0YWJsZSk7CisKKy8qCisgKiBOb24tcHJlc2VudCBwYWdlczogIGhpZ2ggMjQgYml0cyBhcmUgb2Zmc2V0LCBuZXh0IDggYml0cyB0eXBlLAorICogbG93IDMyIGJpdHMgemVyby4KKyAqLworc3RhdGljIGlubGluZSBwdGVfdCBta19zd2FwX3B0ZSh1bnNpZ25lZCBsb25nIHR5cGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQoreyBwdGVfdCBwdGU7IHB0ZV92YWwocHRlKSA9ICh0eXBlIDw8IDMyKSB8IChvZmZzZXQgPDwgNDApOyByZXR1cm4gcHRlOyB9CisKKyNkZWZpbmUgX19zd3BfdHlwZSh4KQkJKCgoeCkudmFsID4+IDMyKSAmIDB4ZmYpCisjZGVmaW5lIF9fc3dwX29mZnNldCh4KQkJKCh4KS52YWwgPj4gNDApCisjZGVmaW5lIF9fc3dwX2VudHJ5KHR5cGUsb2Zmc2V0KSAoKHN3cF9lbnRyeV90KSB7IHB0ZV92YWwobWtfc3dhcF9wdGUoKHR5cGUpLChvZmZzZXQpKSkgfSkKKyNkZWZpbmUgX19wdGVfdG9fc3dwX2VudHJ5KHB0ZSkJKChzd3BfZW50cnlfdCkgeyBwdGVfdmFsKHB0ZSkgfSkKKyNkZWZpbmUgX19zd3BfZW50cnlfdG9fcHRlKHgpCSgocHRlX3QpIHsgKHgpLnZhbCB9KQorCisvKgorICogQml0cyAwLCAxLCAyLCA3IGFuZCA4IGFyZSB0YWtlbiwgc3BsaXQgdXAgdGhlIDMyIGJpdHMgb2Ygb2Zmc2V0CisgKiBpbnRvIHRoaXMgcmFuZ2U6CisgKi8KKyNkZWZpbmUgUFRFX0ZJTEVfTUFYX0JJVFMJMzIKKworI2RlZmluZSBwdGVfdG9fcGdvZmYoX3B0ZSkgXAorCSgoKChfcHRlKS5wdGUgPj4gMykgJiAweDFmICkgKyAoKChfcHRlKS5wdGUgPj4gOSkgPDwgNiApKQorCisjZGVmaW5lIHBnb2ZmX3RvX3B0ZShvZmYpIFwKKwkoKHB0ZV90KSB7ICgoKG9mZikgJiAweDFmKSA8PCAzKSArICgoKG9mZikgPj4gNikgPDwgOSkgKyBfUEFHRV9GSUxFIH0pCisKKyNlbmRpZiAvKiBfQVNNX1BHVEFCTEVfNjRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9wZ3RhYmxlLWJpdHMuaCBiL2luY2x1ZGUvYXNtLW1pcHMvcGd0YWJsZS1iaXRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FhZDc1MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvcGd0YWJsZS1iaXRzLmgKQEAgLTAsMCArMSwxNDkgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTQgLSAyMDAyIGJ5IFJhbGYgQmFlY2hsZQorICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAxIFNpbGljb24gR3JhcGhpY3MsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMiAgTWFjaWVqIFcuIFJvenlja2kKKyAqLworI2lmbmRlZiBfQVNNX1BHVEFCTEVfQklUU19ICisjZGVmaW5lIF9BU01fUEdUQUJMRV9CSVRTX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisvKgorICogTm90ZSB0aGF0IHdlIHNoaWZ0IHRoZSBsb3dlciAzMmJpdHMgb2YgZWFjaCBFbnRyeUxvWzAxXSBlbnRyeQorICogNiBiaXRzIHRvIHRoZSBsZWZ0LiBUaGF0IHdheSB3ZSBjYW4gY29udmVydCB0aGUgUEZOIGludG8gdGhlCisgKiBwaHlzaWNhbCBhZGRyZXNzIGJ5IGEgc2luZ2xlICdhbmQnIG9wZXJhdGlvbiBhbmQgZ2FpbiA2IGFkZGl0aW9uYWwKKyAqIGJpdHMgZm9yIHN0b3JpbmcgaW5mb3JtYXRpb24gd2hpY2ggaXNuJ3QgcHJlc2VudCBpbiBhIG5vcm1hbAorICogTUlQUyBwYWdlIHRhYmxlLgorICoKKyAqIFNpbWlsYXIgdG8gdGhlIEFscGhhIHBvcnQsIHdlIG5lZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUgcmVmCisgKiBhbmQgbW9kIGJpdHMgaW4gc29mdHdhcmUuICBXZSBoYXZlIGEgc29mdHdhcmUgInllYWggeW91IGNhbiByZWFkCisgKiBmcm9tIHRoaXMgcGFnZSIgYml0LCBhbmQgYSBoYXJkd2FyZSBvbmUgd2hpY2ggYWN0dWFsbHkgbGV0cyB0aGUKKyAqIHByb2Nlc3MgcmVhZCBmcm9tIHRoZSBwYWdlLiAgT24gdGhlIHNhbWUgdG9rZW4gd2UgaGF2ZSBhIHNvZnR3YXJlCisgKiB3cml0YWJsZSBiaXQgYW5kIHRoZSByZWFsIGhhcmR3YXJlIG9uZSB3aGljaCBhY3R1YWxseSBsZXRzIHRoZQorICogcHJvY2VzcyB3cml0ZSB0byB0aGUgcGFnZSwgdGhpcyBrZWVwcyBhIG1vZCBiaXQgdmlhIHRoZSBoYXJkd2FyZQorICogZGlydHkgYml0LgorICoKKyAqIENlcnRhaW4gcmV2aXNpb25zIG9mIHRoZSBSNDAwMCBhbmQgUjUwMDAgaGF2ZSBhIGJ1ZyB3aGVyZSBpZiBhCisgKiBjZXJ0YWluIHNlcXVlbmNlIG9jY3VycyBpbiB0aGUgbGFzdCAzIGluc3RydWN0aW9ucyBvZiBhbiBleGVjdXRhYmxlCisgKiBwYWdlLCBhbmQgdGhlIGZvbGxvd2luZyBwYWdlIGlzIG5vdCBtYXBwZWQsIHRoZSBjcHUgY2FuIGRvCisgKiB1bnByZWRpY3RhYmxlIHRoaW5ncy4gIFRoZSBjb2RlICh3aGVuIGl0IGlzIHdyaXR0ZW4pIHRvIGRlYWwgd2l0aAorICogdGhpcyBwcm9ibGVtIHdpbGwgYmUgaW4gdGhlIHVwZGF0ZV9tbXVfY2FjaGUoKSBjb2RlIGZvciB0aGUgcjRrLgorICovCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX01JUFMzMikgJiYgZGVmaW5lZChDT05GSUdfNjRCSVRfUEhZU19BRERSKQorCisjZGVmaW5lIF9QQUdFX1BSRVNFTlQgICAgICAgICAgICAgICAoMTw8NikgIC8qIGltcGxlbWVudGVkIGluIHNvZnR3YXJlICovCisjZGVmaW5lIF9QQUdFX1JFQUQgICAgICAgICAgICAgICAgICAoMTw8NykgIC8qIGltcGxlbWVudGVkIGluIHNvZnR3YXJlICovCisjZGVmaW5lIF9QQUdFX1dSSVRFICAgICAgICAgICAgICAgICAoMTw8OCkgIC8qIGltcGxlbWVudGVkIGluIHNvZnR3YXJlICovCisjZGVmaW5lIF9QQUdFX0FDQ0VTU0VEICAgICAgICAgICAgICAoMTw8OSkgIC8qIGltcGxlbWVudGVkIGluIHNvZnR3YXJlICovCisjZGVmaW5lIF9QQUdFX01PRElGSUVEICAgICAgICAgICAgICAoMTw8MTApIC8qIGltcGxlbWVudGVkIGluIHNvZnR3YXJlICovCisjZGVmaW5lIF9QQUdFX0ZJTEUgICAgICAgICAgICAgICAgICAoMTw8MTApICAvKiBzZXQ6cGFnZWNhY2hlIHVuc2V0OnN3YXAgKi8KKworI2RlZmluZSBfUEFHRV9SNEtCVUcgICAgICAgICAgICAgICAgKDE8PDApICAvKiB3b3JrYXJvdW5kIGZvciByNGsgYnVnICAqLworI2RlZmluZSBfUEFHRV9HTE9CQUwgICAgICAgICAgICAgICAgKDE8PDApCisjZGVmaW5lIF9QQUdFX1ZBTElEICAgICAgICAgICAgICAgICAoMTw8MSkKKyNkZWZpbmUgX1BBR0VfU0lMRU5UX1JFQUQgICAgICAgICAgICgxPDwxKSAgLyogc3lub255bSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX1BBR0VfRElSVFkgICAgICAgICAgICAgICAgICgxPDwyKSAgLyogVGhlIE1JUFMgZGlydHkgYml0ICAgICAgKi8KKyNkZWZpbmUgX1BBR0VfU0lMRU5UX1dSSVRFICAgICAgICAgICgxPDwyKQorI2RlZmluZSBfQ0FDSEVfTUFTSyAgICAgICAgICAgICAgICAgKDc8PDMpCisKKy8qIE1JUFMzMiBkZWZpbmVzIG9ubHkgdmFsdWVzIDIgYW5kIDMuIFRoZSByZXN0IGFyZSBpbXBsZW1lbnRhdGlvbgorICogZGVwZW5kZW50LgorICovCisjZGVmaW5lIF9DQUNIRV9VTkNBQ0hFRCAgICAgICAgICAgICAoMjw8MykKKyNkZWZpbmUgX0NBQ0hFX0NBQ0hBQkxFX05PTkNPSEVSRU5UICgzPDwzKQorI2RlZmluZSBfQ0FDSEVfQ0FDSEFCTEVfQ09XICAgICAgICAgKDM8PDMpICAvKiBBdTF4ICAgICAgICAgICAgICAgICAgICAqLworCisjZWxzZQorCisjZGVmaW5lIF9QQUdFX1BSRVNFTlQgICAgICAgICAgICAgICAoMTw8MCkgIC8qIGltcGxlbWVudGVkIGluIHNvZnR3YXJlICovCisjZGVmaW5lIF9QQUdFX1JFQUQgICAgICAgICAgICAgICAgICAoMTw8MSkgIC8qIGltcGxlbWVudGVkIGluIHNvZnR3YXJlICovCisjZGVmaW5lIF9QQUdFX1dSSVRFICAgICAgICAgICAgICAgICAoMTw8MikgIC8qIGltcGxlbWVudGVkIGluIHNvZnR3YXJlICovCisjZGVmaW5lIF9QQUdFX0FDQ0VTU0VEICAgICAgICAgICAgICAoMTw8MykgIC8qIGltcGxlbWVudGVkIGluIHNvZnR3YXJlICovCisjZGVmaW5lIF9QQUdFX01PRElGSUVEICAgICAgICAgICAgICAoMTw8NCkgIC8qIGltcGxlbWVudGVkIGluIHNvZnR3YXJlICovCisjZGVmaW5lIF9QQUdFX0ZJTEUgICAgICAgICAgICAgICAgICAoMTw8NCkgIC8qIHNldDpwYWdlY2FjaGUgdW5zZXQ6c3dhcCAqLworCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1IzMDAwKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfVFgzOVhYKQorCisjZGVmaW5lIF9QQUdFX0dMT0JBTCAgICAgICAgICAgICAgICAoMTw8OCkKKyNkZWZpbmUgX1BBR0VfVkFMSUQgICAgICAgICAgICAgICAgICgxPDw5KQorI2RlZmluZSBfUEFHRV9TSUxFTlRfUkVBRCAgICAgICAgICAgKDE8PDkpICAvKiBzeW5vbnltICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfUEFHRV9ESVJUWSAgICAgICAgICAgICAgICAgKDE8PDEwKSAvKiBUaGUgTUlQUyBkaXJ0eSBiaXQgICAgICAqLworI2RlZmluZSBfUEFHRV9TSUxFTlRfV1JJVEUgICAgICAgICAgKDE8PDEwKQorI2RlZmluZSBfQ0FDSEVfVU5DQUNIRUQgICAgICAgICAgICAgKDE8PDExKQorI2RlZmluZSBfQ0FDSEVfTUFTSyAgICAgICAgICAgICAgICAgKDE8PDExKQorI2RlZmluZSBfQ0FDSEVfQ0FDSEFCTEVfTk9OQ09IRVJFTlQgMAorCisjZWxzZQorI2RlZmluZSBfUEFHRV9SNEtCVUcgICAgICAgICAgICAgICAgKDE8PDUpICAvKiB3b3JrYXJvdW5kIGZvciByNGsgYnVnICAqLworI2RlZmluZSBfUEFHRV9HTE9CQUwgICAgICAgICAgICAgICAgKDE8PDYpCisjZGVmaW5lIF9QQUdFX1ZBTElEICAgICAgICAgICAgICAgICAoMTw8NykKKyNkZWZpbmUgX1BBR0VfU0lMRU5UX1JFQUQgICAgICAgICAgICgxPDw3KSAgLyogc3lub255bSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX1BBR0VfRElSVFkgICAgICAgICAgICAgICAgICgxPDw4KSAgLyogVGhlIE1JUFMgZGlydHkgYml0ICAgICAgKi8KKyNkZWZpbmUgX1BBR0VfU0lMRU5UX1dSSVRFICAgICAgICAgICgxPDw4KQorI2RlZmluZSBfQ0FDSEVfTUFTSyAgICAgICAgICAgICAgICAgKDc8PDkpCisKKyNpZmRlZiBDT05GSUdfQ1BVX1NCMQorCisvKiBObyBwZW5hbHR5IGZvciBiZWluZyBjb2hlcmVudCBvbiB0aGUgU0IxLCBzbyBqdXN0CisgICB1c2UgaXQgZm9yICJub25jb2hlcmVudCIgc3BhY2VzLCB0b28uICBTaG91bGRuJ3QgaHVydC4gKi8KKworI2RlZmluZSBfQ0FDSEVfVU5DQUNIRUQgICAgICAgICAgICAgKDI8PDkpCisjZGVmaW5lIF9DQUNIRV9DQUNIQUJMRV9DT1cgICAgICAgICAoNTw8OSkKKyNkZWZpbmUgX0NBQ0hFX0NBQ0hBQkxFX05PTkNPSEVSRU5UICg1PDw5KQorI2RlZmluZSBfQ0FDSEVfVU5DQUNIRURfQUNDRUxFUkFURUQgKDc8PDkpCisKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9STTkwMDApCisKKyNkZWZpbmUgX0NBQ0hFX1dUCQkJKDAgPDwgOSkKKyNkZWZpbmUgX0NBQ0hFX1dUV0EJCQkoMSA8PCA5KQorI2RlZmluZSBfQ0FDSEVfVUNfQgkJCSgyIDw8IDkpCisjZGVmaW5lIF9DQUNIRV9XQgkJCSgzIDw8IDkpCisjZGVmaW5lIF9DQUNIRV9DV0JFQQkJCSg0IDw8IDkpCisjZGVmaW5lIF9DQUNIRV9DV0IJCQkoNSA8PCA5KQorI2RlZmluZSBfQ0FDSEVfVUNOQgkJCSg2IDw8IDkpCisjZGVmaW5lIF9DQUNIRV9GUEMJCQkoNyA8PCA5KQorCisjZGVmaW5lIF9DQUNIRV9VTkNBQ0hFRAkJCV9DQUNIRV9VQ19CCisjZGVmaW5lIF9DQUNIRV9DQUNIQUJMRV9OT05DT0hFUkVOVAlfQ0FDSEVfV0IKKworI2Vsc2UKKworI2RlZmluZSBfQ0FDSEVfQ0FDSEFCTEVfTk9fV0EgICAgICAgKDA8PDkpICAvKiBSNDYwMCBvbmx5ICAgICAgICAgICAgICAqLworI2RlZmluZSBfQ0FDSEVfQ0FDSEFCTEVfV0EgICAgICAgICAgKDE8PDkpICAvKiBSNDYwMCBvbmx5ICAgICAgICAgICAgICAqLworI2RlZmluZSBfQ0FDSEVfVU5DQUNIRUQgICAgICAgICAgICAgKDI8PDkpICAvKiBSNFswMjQ2XTAwICAgICAgICAgICAgICAqLworI2RlZmluZSBfQ0FDSEVfQ0FDSEFCTEVfTk9OQ09IRVJFTlQgKDM8PDkpICAvKiBSNFswMjQ2XTAwICAgICAgICAgICAgICAqLworI2RlZmluZSBfQ0FDSEVfQ0FDSEFCTEVfQ0UgICAgICAgICAgKDQ8PDkpICAvKiBSNFswNF0wME1DIG9ubHkgICAgICAgICAqLworI2RlZmluZSBfQ0FDSEVfQ0FDSEFCTEVfQ09XICAgICAgICAgKDU8PDkpICAvKiBSNFswNF0wME1DIG9ubHkgICAgICAgICAqLworI2RlZmluZSBfQ0FDSEVfQ0FDSEFCTEVfQ1VXICAgICAgICAgKDY8PDkpICAvKiBSNFswNF0wME1DIG9ubHkgICAgICAgICAqLworI2RlZmluZSBfQ0FDSEVfVU5DQUNIRURfQUNDRUxFUkFURUQgKDc8PDkpICAvKiBSMTAwMDAgb25seSAgICAgICAgICAgICAqLworCisjZW5kaWYKKyNlbmRpZgorI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX0NQVV9NSVBTMzIpICYmIGRlZmluZWQoQ09ORklHXzY0QklUX1BIWVNfQUREUikgKi8KKworI2RlZmluZSBfX1JFQURBQkxFCShfUEFHRV9SRUFEIHwgX1BBR0VfU0lMRU5UX1JFQUQgfCBfUEFHRV9BQ0NFU1NFRCkKKyNkZWZpbmUgX19XUklURUFCTEUJKF9QQUdFX1dSSVRFIHwgX1BBR0VfU0lMRU5UX1dSSVRFIHwgX1BBR0VfTU9ESUZJRUQpCisKKyNkZWZpbmUgX1BBR0VfQ0hHX01BU0sgIChQQUdFX01BU0sgfCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX01PRElGSUVEIHwgX0NBQ0hFX01BU0spCisKKyNpZmRlZiBDT05GSUdfTUlQU19VTkNBQ0hFRAorI2RlZmluZSBQQUdFX0NBQ0hBQkxFX0RFRkFVTFQJX0NBQ0hFX1VOQ0FDSEVECisjZWxpZiBkZWZpbmVkKENPTkZJR19ETUFfTk9OQ09IRVJFTlQpCisjZGVmaW5lIFBBR0VfQ0FDSEFCTEVfREVGQVVMVAlfQ0FDSEVfQ0FDSEFCTEVfTk9OQ09IRVJFTlQKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9STTkwMDApCisjZGVmaW5lIFBBR0VfQ0FDSEFCTEVfREVGQVVMVAlfQ0FDSEVfQ1dCCisjZWxzZQorI2RlZmluZSBQQUdFX0NBQ0hBQkxFX0RFRkFVTFQJX0NBQ0hFX0NBQ0hBQkxFX0NPVworI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfTUlQUzMyKSAmJiBkZWZpbmVkKENPTkZJR182NEJJVF9QSFlTX0FERFIpCisjZGVmaW5lIENPTkZfQ01fREVGQVVMVAkJKFBBR0VfQ0FDSEFCTEVfREVGQVVMVCA+PiAzKQorI2Vsc2UKKyNkZWZpbmUgQ09ORl9DTV9ERUZBVUxUCQkoUEFHRV9DQUNIQUJMRV9ERUZBVUxUID4+IDkpCisjZW5kaWYKKworI2VuZGlmIC8qIF9BU01fUEdUQUJMRV9CSVRTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20tbWlwcy9wZ3RhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc4ODQzMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvcGd0YWJsZS5oCkBAIC0wLDAgKzEsNDA0IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzIFJhbGYgQmFlY2hsZQorICovCisjaWZuZGVmIF9BU01fUEdUQUJMRV9ICisjZGVmaW5lIF9BU01fUEdUQUJMRV9ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy80bGV2ZWwtZml4dXAuaD4KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2lmZGVmIENPTkZJR19NSVBTMzIKKyNpbmNsdWRlIDxhc20vcGd0YWJsZS0zMi5oPgorI2VuZGlmCisjaWZkZWYgQ09ORklHX01JUFM2NAorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLTY0Lmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLWJpdHMuaD4KKworI2RlZmluZSBQQUdFX05PTkUJX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9DQUNIRV9DQUNIQUJMRV9OT05DT0hFUkVOVCkKKyNkZWZpbmUgUEFHRV9TSEFSRUQJX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JFQUQgfCBfUEFHRV9XUklURSB8IFwKKwkJCVBBR0VfQ0FDSEFCTEVfREVGQVVMVCkKKyNkZWZpbmUgUEFHRV9DT1BZCV9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SRUFEIHwgXAorCQkJUEFHRV9DQUNIQUJMRV9ERUZBVUxUKQorI2RlZmluZSBQQUdFX1JFQURPTkxZCV9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SRUFEIHwgXAorCQkJUEFHRV9DQUNIQUJMRV9ERUZBVUxUKQorI2RlZmluZSBQQUdFX0tFUk5FTAlfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX19SRUFEQUJMRSB8IF9fV1JJVEVBQkxFIHwgXAorCQkJX1BBR0VfR0xPQkFMIHwgUEFHRV9DQUNIQUJMRV9ERUZBVUxUKQorI2RlZmluZSBQQUdFX1VTRVJJTwlfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUkVBRCB8IF9QQUdFX1dSSVRFIHwgXAorCQkJUEFHRV9DQUNIQUJMRV9ERUZBVUxUKQorI2RlZmluZSBQQUdFX0tFUk5FTF9VTkNBQ0hFRCBfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX19SRUFEQUJMRSB8IFwKKwkJCV9fV1JJVEVBQkxFIHwgX1BBR0VfR0xPQkFMIHwgX0NBQ0hFX1VOQ0FDSEVEKQorCisvKgorICogTUlQUyBjYW4ndCBkbyBwYWdlIHByb3RlY3Rpb24gZm9yIGV4ZWN1dGUsIGFuZCBjb25zaWRlcnMgdGhhdCB0aGUgc2FtZSBsaWtlCisgKiByZWFkLiBBbHNvLCB3cml0ZSBwZXJtaXNzaW9ucyBpbXBseSByZWFkIHBlcm1pc3Npb25zLiBUaGlzIGlzIHRoZSBjbG9zZXN0CisgKiB3ZSBjYW4gZ2V0IGJ5IHJlYXNvbmFibGUgbWVhbnMuLgorICovCisjZGVmaW5lIF9fUDAwMAlQQUdFX05PTkUKKyNkZWZpbmUgX19QMDAxCVBBR0VfUkVBRE9OTFkKKyNkZWZpbmUgX19QMDEwCVBBR0VfQ09QWQorI2RlZmluZSBfX1AwMTEJUEFHRV9DT1BZCisjZGVmaW5lIF9fUDEwMAlQQUdFX1JFQURPTkxZCisjZGVmaW5lIF9fUDEwMQlQQUdFX1JFQURPTkxZCisjZGVmaW5lIF9fUDExMAlQQUdFX0NPUFkKKyNkZWZpbmUgX19QMTExCVBBR0VfQ09QWQorCisjZGVmaW5lIF9fUzAwMAlQQUdFX05PTkUKKyNkZWZpbmUgX19TMDAxCVBBR0VfUkVBRE9OTFkKKyNkZWZpbmUgX19TMDEwCVBBR0VfU0hBUkVECisjZGVmaW5lIF9fUzAxMQlQQUdFX1NIQVJFRAorI2RlZmluZSBfX1MxMDAJUEFHRV9SRUFET05MWQorI2RlZmluZSBfX1MxMDEJUEFHRV9SRUFET05MWQorI2RlZmluZSBfX1MxMTAJUEFHRV9TSEFSRUQKKyNkZWZpbmUgX19TMTExCVBBR0VfU0hBUkVECisKKy8qCisgKiBaRVJPX1BBR0UgaXMgYSBnbG9iYWwgc2hhcmVkIHBhZ2UgdGhhdCBpcyBhbHdheXMgemVybzsgdXNlZAorICogZm9yIHplcm8tbWFwcGVkIG1lbW9yeSBhcmVhcyBldGMuLgorICovCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIGVtcHR5X3plcm9fcGFnZTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHplcm9fcGFnZV9tYXNrOworCisjZGVmaW5lIFpFUk9fUEFHRSh2YWRkcikgXAorCSh2aXJ0X3RvX3BhZ2UoZW1wdHlfemVyb19wYWdlICsgKCgodW5zaWduZWQgbG9uZykodmFkZHIpKSAmIHplcm9fcGFnZV9tYXNrKSkpCisKK2V4dGVybiB2b2lkIHBhZ2luZ19pbml0KHZvaWQpOworCisvKgorICogQ29udmVyc2lvbiBmdW5jdGlvbnM6IGNvbnZlcnQgYSBwYWdlIGFuZCBwcm90ZWN0aW9uIHRvIGEgcGFnZSBlbnRyeSwKKyAqIGFuZCBhIHBhZ2UgZW50cnkgYW5kIHBhZ2UgZGlyZWN0b3J5IHRvIHRoZSBwYWdlIHRoZXkgcmVmZXIgdG8uCisgKi8KKyNkZWZpbmUgcGFnZV9wdGUocGFnZSkJCXBhZ2VfcHRlX3Byb3QocGFnZSwgX19wZ3Byb3QoMCkpCisjZGVmaW5lIHBtZF9waHlzKHBtZCkJCShwbWRfdmFsKHBtZCkgLSBQQUdFX09GRlNFVCkKKyNkZWZpbmUgcG1kX3BhZ2UocG1kKQkJKHBmbl90b19wYWdlKHBtZF9waHlzKHBtZCkgPj4gUEFHRV9TSElGVCkpCisjZGVmaW5lIHBtZF9wYWdlX2tlcm5lbChwbWQpCXBtZF92YWwocG1kKQorCisjZGVmaW5lIHB0ZV9ub25lKHB0ZSkJCSghKHB0ZV92YWwocHRlKSAmIH5fUEFHRV9HTE9CQUwpKQorI2RlZmluZSBwdGVfcHJlc2VudChwdGUpCShwdGVfdmFsKHB0ZSkgJiBfUEFHRV9QUkVTRU5UKQorCisjaWYgZGVmaW5lZChDT05GSUdfNjRCSVRfUEhZU19BRERSKSAmJiBkZWZpbmVkKENPTkZJR19DUFVfTUlQUzMyKQorc3RhdGljIGlubGluZSB2b2lkIHNldF9wdGUocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKK3sKKwlwdGVwLT5wdGVfaGlnaCA9IHB0ZS5wdGVfaGlnaDsKKwlzbXBfd21iKCk7CisJcHRlcC0+cHRlX2xvdyA9IHB0ZS5wdGVfbG93OworCS8vcHJpbnRrKCJwdGVfaGlnaCAleCBwdGVfbG93ICV4XG4iLCBwdGVwLT5wdGVfaGlnaCwgcHRlcC0+cHRlX2xvdyk7CisKKwlpZiAocHRlX3ZhbChwdGUpICYgX1BBR0VfR0xPQkFMKSB7CisJCXB0ZV90ICpidWRkeSA9IHB0ZXBfYnVkZHkocHRlcCk7CisJCS8qCisJCSAqIE1ha2Ugc3VyZSB0aGUgYnVkZHkgaXMgZ2xvYmFsIHRvbyAoaWYgaXQncyAhbm9uZSwKKwkJICogaXQgYmV0dGVyIGFscmVhZHkgYmUgZ2xvYmFsKQorCQkgKi8KKwkJaWYgKHB0ZV9ub25lKCpidWRkeSkpCisJCQlidWRkeS0+cHRlX2xvdyB8PSBfUEFHRV9HTE9CQUw7CisJfQorfQorI2RlZmluZSBzZXRfcHRlX2F0KG1tLGFkZHIscHRlcCxwdGV2YWwpIHNldF9wdGUocHRlcCxwdGV2YWwpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdGVfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApCit7CisJLyogUHJlc2VydmUgZ2xvYmFsIHN0YXR1cyBmb3IgdGhlIHBhaXIgKi8KKwlpZiAocHRlX3ZhbCgqcHRlcF9idWRkeShwdGVwKSkgJiBfUEFHRV9HTE9CQUwpCisJCXNldF9wdGVfYXQobW0sIGFkZHIsIHB0ZXAsIF9fcHRlKF9QQUdFX0dMT0JBTCkpOworCWVsc2UKKwkJc2V0X3B0ZV9hdChtbSwgYWRkciwgcHRlcCwgX19wdGUoMCkpOworfQorI2Vsc2UKKy8qCisgKiBDZXJ0YWluIGFyY2hpdGVjdHVyZXMgbmVlZCB0byBkbyBzcGVjaWFsIHRoaW5ncyB3aGVuIHB0ZSdzCisgKiB3aXRoaW4gYSBwYWdlIHRhYmxlIGFyZSBkaXJlY3RseSBtb2RpZmllZC4gIFRodXMsIHRoZSBmb2xsb3dpbmcKKyAqIGhvb2sgaXMgbWFkZSBhdmFpbGFibGUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcHRlKHB0ZV90ICpwdGVwLCBwdGVfdCBwdGV2YWwpCit7CisJKnB0ZXAgPSBwdGV2YWw7CisjaWYgIWRlZmluZWQoQ09ORklHX0NQVV9SMzAwMCkgJiYgIWRlZmluZWQoQ09ORklHX0NQVV9UWDM5WFgpCisJaWYgKHB0ZV92YWwocHRldmFsKSAmIF9QQUdFX0dMT0JBTCkgeworCQlwdGVfdCAqYnVkZHkgPSBwdGVwX2J1ZGR5KHB0ZXApOworCQkvKgorCQkgKiBNYWtlIHN1cmUgdGhlIGJ1ZGR5IGlzIGdsb2JhbCB0b28gKGlmIGl0J3MgIW5vbmUsCisJCSAqIGl0IGJldHRlciBhbHJlYWR5IGJlIGdsb2JhbCkKKwkJICovCisJCWlmIChwdGVfbm9uZSgqYnVkZHkpKQorCQkJcHRlX3ZhbCgqYnVkZHkpID0gcHRlX3ZhbCgqYnVkZHkpIHwgX1BBR0VfR0xPQkFMOworCX0KKyNlbmRpZgorfQorI2RlZmluZSBzZXRfcHRlX2F0KG1tLGFkZHIscHRlcCxwdGV2YWwpIHNldF9wdGUocHRlcCxwdGV2YWwpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdGVfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApCit7CisjaWYgIWRlZmluZWQoQ09ORklHX0NQVV9SMzAwMCkgJiYgIWRlZmluZWQoQ09ORklHX0NQVV9UWDM5WFgpCisJLyogUHJlc2VydmUgZ2xvYmFsIHN0YXR1cyBmb3IgdGhlIHBhaXIgKi8KKwlpZiAocHRlX3ZhbCgqcHRlcF9idWRkeShwdGVwKSkgJiBfUEFHRV9HTE9CQUwpCisJCXNldF9wdGVfYXQobW0sIGFkZHIsIHB0ZXAsIF9fcHRlKF9QQUdFX0dMT0JBTCkpOworCWVsc2UKKyNlbmRpZgorCQlzZXRfcHRlX2F0KG1tLCBhZGRyLCBwdGVwLCBfX3B0ZSgwKSk7Cit9CisjZW5kaWYKKworLyoKKyAqIChwbWRzIGFyZSBmb2xkZWQgaW50byBwZ2RzIHNvIHRoaXMgZG9lc24ndCBnZXQgYWN0dWFsbHkgY2FsbGVkLAorICogYnV0IHRoZSBkZWZpbmUgaXMgbmVlZGVkIGZvciBhIGdlbmVyaWMgaW5saW5lIGZ1bmN0aW9uLikKKyAqLworI2RlZmluZSBzZXRfcG1kKHBtZHB0ciwgcG1kdmFsKSBkbyB7ICoocG1kcHRyKSA9IChwbWR2YWwpOyB9IHdoaWxlKDApCisjZGVmaW5lIHNldF9wZ2QocGdkcHRyLCBwZ2R2YWwpIGRvIHsgKihwZ2RwdHIpID0gKHBnZHZhbCk7IH0gd2hpbGUoMCkKKworI2RlZmluZSBQR0RfVF9MT0cyCWZmeih+c2l6ZW9mKHBnZF90KSkKKyNkZWZpbmUgUE1EX1RfTE9HMglmZnoofnNpemVvZihwbWRfdCkpCisjZGVmaW5lIFBURV9UX0xPRzIJZmZ6KH5zaXplb2YocHRlX3QpKQorCitleHRlcm4gcGdkX3Qgc3dhcHBlcl9wZ19kaXJbUFRSU19QRVJfUEdEXTsKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgb25seSB3b3JrIGlmIHB0ZV9wcmVzZW50KCkgaXMgdHJ1ZS4KKyAqIFVuZGVmaW5lZCBiZWhhdmlvdXIgaWYgbm90Li4KKyAqLworc3RhdGljIGlubGluZSBpbnQgcHRlX3VzZXIocHRlX3QgcHRlKQl7IEJVRygpOyByZXR1cm4gMDsgfQorI2lmIGRlZmluZWQoQ09ORklHXzY0QklUX1BIWVNfQUREUikgJiYgZGVmaW5lZChDT05GSUdfQ1BVX01JUFMzMikKK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9yZWFkKHB0ZV90IHB0ZSkJeyByZXR1cm4gKHB0ZSkucHRlX2xvdyAmIF9QQUdFX1JFQUQ7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV93cml0ZShwdGVfdCBwdGUpCXsgcmV0dXJuIChwdGUpLnB0ZV9sb3cgJiBfUEFHRV9XUklURTsgfQorc3RhdGljIGlubGluZSBpbnQgcHRlX2RpcnR5KHB0ZV90IHB0ZSkJeyByZXR1cm4gKHB0ZSkucHRlX2xvdyAmIF9QQUdFX01PRElGSUVEOyB9CitzdGF0aWMgaW5saW5lIGludCBwdGVfeW91bmcocHRlX3QgcHRlKQl7IHJldHVybiAocHRlKS5wdGVfbG93ICYgX1BBR0VfQUNDRVNTRUQ7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9maWxlKHB0ZV90IHB0ZSkJeyByZXR1cm4gKHB0ZSkucHRlX2xvdyAmIF9QQUdFX0ZJTEU7IH0KK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX3dycHJvdGVjdChwdGVfdCBwdGUpCit7CisJKHB0ZSkucHRlX2xvdyAmPSB+KF9QQUdFX1dSSVRFIHwgX1BBR0VfU0lMRU5UX1dSSVRFKTsKKwkocHRlKS5wdGVfaGlnaCAmPSB+X1BBR0VfU0lMRU5UX1dSSVRFOworCXJldHVybiBwdGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX3JkcHJvdGVjdChwdGVfdCBwdGUpCit7CisJKHB0ZSkucHRlX2xvdyAmPSB+KF9QQUdFX1JFQUQgfCBfUEFHRV9TSUxFTlRfUkVBRCk7CisJKHB0ZSkucHRlX2hpZ2ggJj0gfl9QQUdFX1NJTEVOVF9SRUFEOworCXJldHVybiBwdGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rY2xlYW4ocHRlX3QgcHRlKQoreworCShwdGUpLnB0ZV9sb3cgJj0gfihfUEFHRV9NT0RJRklFRHxfUEFHRV9TSUxFTlRfV1JJVEUpOworCShwdGUpLnB0ZV9oaWdoICY9IH5fUEFHRV9TSUxFTlRfV1JJVEU7CisJcmV0dXJuIHB0ZTsKK30KKworc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtvbGQocHRlX3QgcHRlKQoreworCShwdGUpLnB0ZV9sb3cgJj0gfihfUEFHRV9BQ0NFU1NFRHxfUEFHRV9TSUxFTlRfUkVBRCk7CisJKHB0ZSkucHRlX2hpZ2ggJj0gfl9QQUdFX1NJTEVOVF9SRUFEOworCXJldHVybiBwdGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rd3JpdGUocHRlX3QgcHRlKQoreworCShwdGUpLnB0ZV9sb3cgfD0gX1BBR0VfV1JJVEU7CisJaWYgKChwdGUpLnB0ZV9sb3cgJiBfUEFHRV9NT0RJRklFRCkgeworCQkocHRlKS5wdGVfbG93IHw9IF9QQUdFX1NJTEVOVF9XUklURTsKKwkJKHB0ZSkucHRlX2hpZ2ggfD0gX1BBR0VfU0lMRU5UX1dSSVRFOworCX0KKwlyZXR1cm4gcHRlOworfQorCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3JlYWQocHRlX3QgcHRlKQoreworCShwdGUpLnB0ZV9sb3cgfD0gX1BBR0VfUkVBRDsKKwlpZiAoKHB0ZSkucHRlX2xvdyAmIF9QQUdFX0FDQ0VTU0VEKSB7CisJCShwdGUpLnB0ZV9sb3cgfD0gX1BBR0VfU0lMRU5UX1JFQUQ7CisJCShwdGUpLnB0ZV9oaWdoIHw9IF9QQUdFX1NJTEVOVF9SRUFEOworCX0KKwlyZXR1cm4gcHRlOworfQorCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta2RpcnR5KHB0ZV90IHB0ZSkKK3sKKwkocHRlKS5wdGVfbG93IHw9IF9QQUdFX01PRElGSUVEOworCWlmICgocHRlKS5wdGVfbG93ICYgX1BBR0VfV1JJVEUpIHsKKwkJKHB0ZSkucHRlX2xvdyB8PSBfUEFHRV9TSUxFTlRfV1JJVEU7CisJCShwdGUpLnB0ZV9oaWdoIHw9IF9QQUdFX1NJTEVOVF9XUklURTsKKwl9CisJcmV0dXJuIHB0ZTsKK30KKworc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt5b3VuZyhwdGVfdCBwdGUpCit7CisJKHB0ZSkucHRlX2xvdyB8PSBfUEFHRV9BQ0NFU1NFRDsKKwlpZiAoKHB0ZSkucHRlX2xvdyAmIF9QQUdFX1JFQUQpCisJCShwdGUpLnB0ZV9sb3cgfD0gX1BBR0VfU0lMRU5UX1JFQUQ7CisJCShwdGUpLnB0ZV9oaWdoIHw9IF9QQUdFX1NJTEVOVF9SRUFEOworCXJldHVybiBwdGU7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgcHRlX3JlYWQocHRlX3QgcHRlKQl7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9SRUFEOyB9CitzdGF0aWMgaW5saW5lIGludCBwdGVfd3JpdGUocHRlX3QgcHRlKQl7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9XUklURTsgfQorc3RhdGljIGlubGluZSBpbnQgcHRlX2RpcnR5KHB0ZV90IHB0ZSkJeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfTU9ESUZJRUQ7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV95b3VuZyhwdGVfdCBwdGUpCXsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX0FDQ0VTU0VEOyB9CitzdGF0aWMgaW5saW5lIGludCBwdGVfZmlsZShwdGVfdCBwdGUpCXsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX0ZJTEU7IH0KKworc3RhdGljIGlubGluZSBwdGVfdCBwdGVfd3Jwcm90ZWN0KHB0ZV90IHB0ZSkKK3sKKwlwdGVfdmFsKHB0ZSkgJj0gfihfUEFHRV9XUklURSB8IF9QQUdFX1NJTEVOVF9XUklURSk7CisJcmV0dXJuIHB0ZTsKK30KKworc3RhdGljIGlubGluZSBwdGVfdCBwdGVfcmRwcm90ZWN0KHB0ZV90IHB0ZSkKK3sKKwlwdGVfdmFsKHB0ZSkgJj0gfihfUEFHRV9SRUFEIHwgX1BBR0VfU0lMRU5UX1JFQUQpOworCXJldHVybiBwdGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rY2xlYW4ocHRlX3QgcHRlKQoreworCXB0ZV92YWwocHRlKSAmPSB+KF9QQUdFX01PRElGSUVEfF9QQUdFX1NJTEVOVF9XUklURSk7CisJcmV0dXJuIHB0ZTsKK30KKworc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtvbGQocHRlX3QgcHRlKQoreworCXB0ZV92YWwocHRlKSAmPSB+KF9QQUdFX0FDQ0VTU0VEfF9QQUdFX1NJTEVOVF9SRUFEKTsKKwlyZXR1cm4gcHRlOworfQorCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSkKK3sKKwlwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfV1JJVEU7CisJaWYgKHB0ZV92YWwocHRlKSAmIF9QQUdFX01PRElGSUVEKQorCQlwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfU0lMRU5UX1dSSVRFOworCXJldHVybiBwdGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rcmVhZChwdGVfdCBwdGUpCit7CisJcHRlX3ZhbChwdGUpIHw9IF9QQUdFX1JFQUQ7CisJaWYgKHB0ZV92YWwocHRlKSAmIF9QQUdFX0FDQ0VTU0VEKQorCQlwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfU0lMRU5UX1JFQUQ7CisJcmV0dXJuIHB0ZTsKK30KKworc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtkaXJ0eShwdGVfdCBwdGUpCit7CisJcHRlX3ZhbChwdGUpIHw9IF9QQUdFX01PRElGSUVEOworCWlmIChwdGVfdmFsKHB0ZSkgJiBfUEFHRV9XUklURSkKKwkJcHRlX3ZhbChwdGUpIHw9IF9QQUdFX1NJTEVOVF9XUklURTsKKwlyZXR1cm4gcHRlOworfQorCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3lvdW5nKHB0ZV90IHB0ZSkKK3sKKwlwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfQUNDRVNTRUQ7CisJaWYgKHB0ZV92YWwocHRlKSAmIF9QQUdFX1JFQUQpCisJCXB0ZV92YWwocHRlKSB8PSBfUEFHRV9TSUxFTlRfUkVBRDsKKwlyZXR1cm4gcHRlOworfQorI2VuZGlmCisKKy8qCisgKiBNYWNybyB0byBtYWtlIG1hcmsgYSBwYWdlIHByb3RlY3Rpb24gdmFsdWUgYXMgInVuY2FjaGVhYmxlIi4gIE5vdGUKKyAqIHRoYXQgInByb3RlY3Rpb24iIGlzIHJlYWxseSBhIG1pc25vbWVyIGhlcmUgYXMgdGhlIHByb3RlY3Rpb24gdmFsdWUKKyAqIGNvbnRhaW5zIHRoZSBtZW1vcnkgYXR0cmlidXRlIGJpdHMsIGRpcnR5IGJpdHMsIGFuZCB2YXJpb3VzIG90aGVyCisgKiBiaXRzIGFzIHdlbGwuCisgKi8KKyNkZWZpbmUgcGdwcm90X25vbmNhY2hlZCBwZ3Byb3Rfbm9uY2FjaGVkCisKK3N0YXRpYyBpbmxpbmUgcGdwcm90X3QgcGdwcm90X25vbmNhY2hlZChwZ3Byb3RfdCBfcHJvdCkKK3sKKwl1bnNpZ25lZCBsb25nIHByb3QgPSBwZ3Byb3RfdmFsKF9wcm90KTsKKworCXByb3QgPSAocHJvdCAmIH5fQ0FDSEVfTUFTSykgfCBfQ0FDSEVfVU5DQUNIRUQ7CisKKwlyZXR1cm4gX19wZ3Byb3QocHJvdCk7Cit9CisKKy8qCisgKiBDb252ZXJzaW9uIGZ1bmN0aW9uczogY29udmVydCBhIHBhZ2UgYW5kIHByb3RlY3Rpb24gdG8gYSBwYWdlIGVudHJ5LAorICogYW5kIGEgcGFnZSBlbnRyeSBhbmQgcGFnZSBkaXJlY3RvcnkgdG8gdGhlIHBhZ2UgdGhleSByZWZlciB0by4KKyAqLworI2RlZmluZSBta19wdGUocGFnZSwgcGdwcm90KQlwZm5fcHRlKHBhZ2VfdG9fcGZuKHBhZ2UpLCAocGdwcm90KSkKKworI2lmIGRlZmluZWQoQ09ORklHXzY0QklUX1BIWVNfQUREUikgJiYgZGVmaW5lZChDT05GSUdfQ1BVX01JUFMzMikKK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21vZGlmeShwdGVfdCBwdGUsIHBncHJvdF90IG5ld3Byb3QpCit7CisJcHRlLnB0ZV9sb3cgJj0gX1BBR0VfQ0hHX01BU0s7CisJcHRlLnB0ZV9sb3cgfD0gcGdwcm90X3ZhbChuZXdwcm90KTsKKwlwdGUucHRlX2hpZ2ggfD0gcGdwcm90X3ZhbChuZXdwcm90KSAmIDB4M2Y7CisJcmV0dXJuIHB0ZTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9tb2RpZnkocHRlX3QgcHRlLCBwZ3Byb3RfdCBuZXdwcm90KQoreworCXJldHVybiBfX3B0ZSgocHRlX3ZhbChwdGUpICYgX1BBR0VfQ0hHX01BU0spIHwgcGdwcm90X3ZhbChuZXdwcm90KSk7Cit9CisjZW5kaWYKKworCitleHRlcm4gdm9pZCBfX3VwZGF0ZV90bGIoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKKwlwdGVfdCBwdGUpOworZXh0ZXJuIHZvaWQgX191cGRhdGVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKKwlwdGVfdCBwdGUpOworCitzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX21tdV9jYWNoZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwl1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90IHB0ZSkKK3sKKwlfX3VwZGF0ZV90bGIodm1hLCBhZGRyZXNzLCBwdGUpOworCV9fdXBkYXRlX2NhY2hlKHZtYSwgYWRkcmVzcywgcHRlKTsKK30KKworI2lmbmRlZiBDT05GSUdfRElTQ09OVElHTUVNCisjZGVmaW5lIGtlcm5fYWRkcl92YWxpZChhZGRyKQkoMSkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHXzY0QklUX1BIWVNfQUREUgorZXh0ZXJuIHBoeXNfdCBmaXh1cF9iaWdwaHlzX2FkZHIocGh5c190IHBoeXNfYWRkciwgcGh5c190IHNpemUpOworZXh0ZXJuIGludCByZW1hcF9wZm5fcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgZnJvbSwgdW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgc2l6ZSwgcGdwcm90X3QgcHJvdCk7CisKK3N0YXRpYyBpbmxpbmUgaW50IGlvX3JlbWFwX3BhZ2VfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCXVuc2lnbmVkIGxvbmcgdmFkZHIsCisJCXVuc2lnbmVkIGxvbmcgcGFkZHIsCisJCXVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJcGdwcm90X3QgcHJvdCkKK3sKKwlwaHlzX3QgcGh5c19hZGRyX2hpZ2ggPSBmaXh1cF9iaWdwaHlzX2FkZHIocGFkZHIsIHNpemUpOworCXJldHVybiByZW1hcF9wZm5fcmFuZ2Uodm1hLCB2YWRkciwgcGh5c19hZGRyX2hpZ2ggPj4gUEFHRV9TSElGVCwgc2l6ZSwgcHJvdCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGlvX3JlbWFwX3Bmbl9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJdW5zaWduZWQgbG9uZyB2YWRkciwKKwkJdW5zaWduZWQgbG9uZyBwZm4sCisJCXVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJcGdwcm90X3QgcHJvdCkKK3sKKwlwaHlzX3QgcGh5c19hZGRyX2hpZ2ggPSBmaXh1cF9iaWdwaHlzX2FkZHIocGZuIDw8IFBBR0VfU0hJRlQsIHNpemUpOworCXJldHVybiByZW1hcF9wZm5fcmFuZ2Uodm1hLCB2YWRkciwgcGZuLCBzaXplLCBwcm90KTsKK30KKyNlbHNlCisjZGVmaW5lIGlvX3JlbWFwX3BhZ2VfcmFuZ2Uodm1hLCB2YWRkciwgcGFkZHIsIHNpemUsIHByb3QpCQlcCisJCXJlbWFwX3Bmbl9yYW5nZSh2bWEsIHZhZGRyLCAocGFkZHIpID4+IFBBR0VfU0hJRlQsIHNpemUsIHByb3QpCisjZGVmaW5lIGlvX3JlbWFwX3Bmbl9yYW5nZSh2bWEsIHZhZGRyLCBwZm4sIHNpemUsIHByb3QpCQlcCisJCXJlbWFwX3Bmbl9yYW5nZSh2bWEsIHZhZGRyLCBwZm4sIHNpemUsIHByb3QpCisjZW5kaWYKKworI2RlZmluZSBNS19JT1NQQUNFX1BGTihzcGFjZSwgcGZuKQkocGZuKQorI2RlZmluZSBHRVRfSU9TUEFDRShwZm4pCQkwCisjZGVmaW5lIEdFVF9QRk4ocGZuKQkJCShwZm4pCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wZ3RhYmxlLmg+CisKKy8qCisgKiBXZSBwcm92aWRlIG91ciBvd24gZ2V0X3VubWFwcGVkIGFyZWEgdG8gY29wZSB3aXRoIHRoZSB2aXJ0dWFsIGFsaWFzaW5nCisgKiBjb25zdHJhaW50cyBwbGFjZWQgb24gdXMgYnkgdGhlIGNhY2hlIGFyY2hpdGVjdHVyZS4KKyAqLworI2RlZmluZSBIQVZFX0FSQ0hfVU5NQVBQRURfQVJFQQorCisvKgorICogTm8gcGFnZSB0YWJsZSBjYWNoZXMgdG8gaW5pdGlhbGlzZQorICovCisjZGVmaW5lIHBndGFibGVfY2FjaGVfaW5pdCgpCWRvIHsgfSB3aGlsZSAoMCkKKworI2VuZGlmIC8qIF9BU01fUEdUQUJMRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3Btb24uaCBiL2luY2x1ZGUvYXNtLW1pcHMvcG1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2MGYzNDQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3Btb24uaApAQCAtMCwwICsxLDQ2IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IGJ5IFJhbGYgQmFlY2hsZQorICoKKyAqIFRoZSBjcHVzdGFydCBtZXRob2QgaXMgYSBQTUMtU2llcnJhJ3MgZnVuY3Rpb24gdG8gc3RhcnQgdGhlIHNlY29uZGFyeSBDUFUuCisgKiBTdG9jayBQTU9OIDIwMDAgaGFzIHRoZSBzbXBmb3JrLCBzZW1sb2NrIGFuZCBzZW11bmxvY2sgbWV0aG9kcyBpbnN0ZWFkLgorICovCisjaWZuZGVmIF9BU01fUE1PTl9ICisjZGVmaW5lIF9BU01fUE1PTl9ICisKK3N0cnVjdCBjYWxsdmVjdG9ycyB7CisJaW50CSgqb3BlbikgKGNoYXIqLCBpbnQsIGludCk7CisJaW50CSgqY2xvc2UpIChpbnQpOworCWludAkoKnJlYWQpIChpbnQsIHZvaWQqLCBpbnQpOworCWludAkoKndyaXRlKSAoaW50LCB2b2lkKiwgaW50KTsKKwlvZmZfdAkoKmxzZWVrKSAoaW50LCBvZmZfdCwgaW50KTsKKwlpbnQJKCpwcmludGYpIChjb25zdCBjaGFyKiwgLi4uKTsKKwl2b2lkCSgqY2FjaGVmbHVzaCkgKHZvaWQpOworCWNoYXIqCSgqZ2V0cykgKGNoYXIqKTsKKwl1bmlvbiB7CisJCWludAkoKnNtcGZvcmspICh1bnNpZ25lZCBsb25nIGNwLCBjaGFyICpzcCk7CisJCWludAkoKmNwdXN0YXJ0KSAobG9uZywgbG9uZywgbG9uZywgbG9uZyk7CisJfSBfczsKKwlpbnQJKCpzZW1sb2NrKSAoaW50IHNlbSk7CisJdm9pZAkoKnNlbXVubG9jaykgKGludCBzZW0pOworfTsKKworZXh0ZXJuIHN0cnVjdCBjYWxsdmVjdG9ycyAqZGVidWdfdmVjdG9yczsKKworI2RlZmluZSBwbW9uX29wZW4obmFtZSwgZmxhZ3MsIG1vZGUpCWRlYnVnX3ZlY3RvcnMtPm9wZW4obmFtZSwgZmxhZ2UsIG1vZGUpCisjZGVmaW5lIHBtb25fY2xvc2UoZmQpCQkJZGVidWdfdmVjdG9ycy0+Y2xvc2UoZmQpCisjZGVmaW5lIHBtb25fcmVhZChmZCwgYnVmLCBjb3VudCkJZGVidWdfdmVjdG9ycy0+cmVhZChmZCwgYnVmLCBjb3VudCkKKyNkZWZpbmUgcG1vbl93cml0ZShmZCwgYnVmLCBjb3VudCkJZGVidWdfdmVjdG9ycy0+d3JpdGUoZmQsIGJ1ZiwgY291bnQpCisjZGVmaW5lIHBtb25fbHNlZWsoZmQsIG9mZiwgd2hlbmNlKQlkZWJ1Z192ZWN0b3JzLT5sc2VlayhmZCwgb2ZmLCB3aGVuY2UpCisjZGVmaW5lIHBtb25fcHJpbnRmKGZtdC4uLikJCWRlYnVnX3ZlY3RvcnMtPnByaW50ZihmbXQpCisjZGVmaW5lIHBtb25fY2FjaGVmbHVzaCgpCQlkZWJ1Z192ZWN0b3JzLT5jYWNoZWZsdXNoKCkKKyNkZWZpbmUgcG1vbl9nZXRzKHMpCQkJZGVidWdfdmVjdG9ycy0+Z2V0cyhzKQorI2RlZmluZSBwbW9uX2NwdXN0YXJ0KG4sIGYsIHNwLCBncCkJZGVidWdfdmVjdG9ycy0+X3MuY3B1c3RhcnQobiwgZiwgc3AsIGdwKQorI2RlZmluZSBwbW9uX3NtcGZvcmsoY3AsIHNwKQkJZGVidWdfdmVjdG9ycy0+X3Muc21wZm9yayhjcCwgc3ApCisjZGVmaW5lIHBtb25fc2VtbG9jayhzZW0pCQlkZWJ1Z192ZWN0b3JzLT5zZW1sb2NrKHNlbSkKKyNkZWZpbmUgcG1vbl9zZW11bmxvY2soc2VtKQkJZGVidWdfdmVjdG9ycy0+c2VtdW5sb2NrKHNlbSkKKworI2VuZGlmIC8qIF9BU01fUE1PTl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3BvbGwuaCBiL2luY2x1ZGUvYXNtLW1pcHMvcG9sbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwMDBmMWYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3BvbGwuaApAQCAtMCwwICsxLDI3IEBACisjaWZuZGVmIF9fQVNNX1BPTExfSAorI2RlZmluZSBfX0FTTV9QT0xMX0gKKworI2RlZmluZSBQT0xMSU4JCTB4MDAwMQorI2RlZmluZSBQT0xMUFJJCQkweDAwMDIKKyNkZWZpbmUgUE9MTE9VVAkJMHgwMDA0CisKKyNkZWZpbmUgUE9MTEVSUgkJMHgwMDA4CisjZGVmaW5lIFBPTExIVVAJCTB4MDAxMAorI2RlZmluZSBQT0xMTlZBTAkweDAwMjAKKworI2RlZmluZSBQT0xMUkROT1JNCTB4MDA0MAorI2RlZmluZSBQT0xMUkRCQU5ECTB4MDA4MAorI2RlZmluZSBQT0xMV1JOT1JNCVBPTExPVVQKKyNkZWZpbmUgUE9MTFdSQkFORAkweDAxMDAKKworLyogVGhlc2Ugc2VlbSB0byBiZSBtb3JlIG9yIGxlc3Mgbm9uc3RhbmRhcmQgLi4uICAqLworI2RlZmluZSBQT0xMTVNHCQkweDA0MDAKKyNkZWZpbmUgUE9MTFJFTU9WRQkweDEwMDAKKworc3RydWN0IHBvbGxmZCB7CisJaW50IGZkOworCXNob3J0IGV2ZW50czsKKwlzaG9ydCByZXZlbnRzOworfTsKKworI2VuZGlmIC8qIF9fQVNNX1BPTExfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9wb3NpeF90eXBlcy5oIGIvaW5jbHVkZS9hc20tbWlwcy9wb3NpeF90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyZThhMDAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3Bvc2l4X3R5cGVzLmgKQEAgLTAsMCArMSwxNDQgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYsIDk3LCA5OCwgOTksIDIwMDAgYnkgUmFsZiBCYWVjaGxlCisgKiBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAgU2lsaWNvbiBHcmFwaGljcywgSW5jLgorICovCisjaWZuZGVmIF9BU01fUE9TSVhfVFlQRVNfSAorI2RlZmluZSBfQVNNX1BPU0lYX1RZUEVTX0gKKworI2luY2x1ZGUgPGFzbS9zZ2lkZWZzLmg+CisKKy8qCisgKiBUaGlzIGZpbGUgaXMgZ2VuZXJhbGx5IHVzZWQgYnkgdXNlci1sZXZlbCBzb2Z0d2FyZSwgc28geW91IG5lZWQgdG8KKyAqIGJlIGEgbGl0dGxlIGNhcmVmdWwgYWJvdXQgbmFtZXNwYWNlIHBvbGx1dGlvbiBldGMuICBBbHNvLCB3ZSBjYW5ub3QKKyAqIGFzc3VtZSBHQ0MgaXMgYmVpbmcgdXNlZC4KKyAqLworCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcJX19rZXJuZWxfaW5vX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludAlfX2tlcm5lbF9tb2RlX3Q7CisjaWYgKF9NSVBTX1NaTE9ORyA9PSAzMikKK3R5cGVkZWYgdW5zaWduZWQgbG9uZwlfX2tlcm5lbF9ubGlua190OworI2VuZGlmCisjaWYgKF9NSVBTX1NaTE9ORyA9PSA2NCkKK3R5cGVkZWYgdW5zaWduZWQgaW50CV9fa2VybmVsX25saW5rX3Q7CisjZW5kaWYKK3R5cGVkZWYgbG9uZwkJX19rZXJuZWxfb2ZmX3Q7Cit0eXBlZGVmIGludAkJX19rZXJuZWxfcGlkX3Q7Cit0eXBlZGVmIGludAkJX19rZXJuZWxfaXBjX3BpZF90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQJX19rZXJuZWxfdWlkX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludAlfX2tlcm5lbF9naWRfdDsKKyNpZiAoX01JUFNfU1pMT05HID09IDMyKQordHlwZWRlZiB1bnNpZ25lZCBpbnQJX19rZXJuZWxfc2l6ZV90OwordHlwZWRlZiBpbnQJCV9fa2VybmVsX3NzaXplX3Q7Cit0eXBlZGVmIGludAkJX19rZXJuZWxfcHRyZGlmZl90OworI2VuZGlmCisjaWYgKF9NSVBTX1NaTE9ORyA9PSA2NCkKK3R5cGVkZWYgdW5zaWduZWQgbG9uZwlfX2tlcm5lbF9zaXplX3Q7Cit0eXBlZGVmIGxvbmcJCV9fa2VybmVsX3NzaXplX3Q7Cit0eXBlZGVmIGxvbmcJCV9fa2VybmVsX3B0cmRpZmZfdDsKKyNlbmRpZgordHlwZWRlZiBsb25nCQlfX2tlcm5lbF90aW1lX3Q7Cit0eXBlZGVmIGxvbmcJCV9fa2VybmVsX3N1c2Vjb25kc190OwordHlwZWRlZiBsb25nCQlfX2tlcm5lbF9jbG9ja190OwordHlwZWRlZiBpbnQJCV9fa2VybmVsX3RpbWVyX3Q7Cit0eXBlZGVmIGludAkJX19rZXJuZWxfY2xvY2tpZF90OwordHlwZWRlZiBsb25nCQlfX2tlcm5lbF9kYWRkcl90OwordHlwZWRlZiBjaGFyICoJCV9fa2VybmVsX2NhZGRyX3Q7CisKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJX19rZXJuZWxfdWlkMTZfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJX19rZXJuZWxfZ2lkMTZfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50CV9fa2VybmVsX3VpZDMyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludAlfX2tlcm5lbF9naWQzMl90OwordHlwZWRlZiBfX2tlcm5lbF91aWRfdAlfX2tlcm5lbF9vbGRfdWlkX3Q7Cit0eXBlZGVmIF9fa2VybmVsX2dpZF90CV9fa2VybmVsX29sZF9naWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50CV9fa2VybmVsX29sZF9kZXZfdDsKKworI2lmZGVmIF9fR05VQ19fCit0eXBlZGVmIGxvbmcgbG9uZyAgICAgIF9fa2VybmVsX2xvZmZfdDsKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCB7CisjaWYgKF9NSVBTX1NaTE9ORyA9PSAzMikKKwlsb25nCXZhbFsyXTsKKyNlbmRpZgorI2lmIChfTUlQU19TWkxPTkcgPT0gNjQpCisJaW50CXZhbFsyXTsKKyNlbmRpZgorfSBfX2tlcm5lbF9mc2lkX3Q7CisKKyNpZiBkZWZpbmVkKF9fS0VSTkVMX18pIHx8ICFkZWZpbmVkKF9fR0xJQkNfXykgfHwgKF9fR0xJQkNfXyA8IDIpCisKKyN1bmRlZiBfX0ZEX1NFVAorc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0ZEX1NFVCh1bnNpZ25lZCBsb25nIF9fZmQsIF9fa2VybmVsX2ZkX3NldCAqX19mZHNldHApCit7CisJdW5zaWduZWQgbG9uZyBfX3RtcCA9IF9fZmQgLyBfX05GREJJVFM7CisJdW5zaWduZWQgbG9uZyBfX3JlbSA9IF9fZmQgJSBfX05GREJJVFM7CisJX19mZHNldHAtPmZkc19iaXRzW19fdG1wXSB8PSAoMVVMPDxfX3JlbSk7Cit9CisKKyN1bmRlZiBfX0ZEX0NMUgorc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0ZEX0NMUih1bnNpZ25lZCBsb25nIF9fZmQsIF9fa2VybmVsX2ZkX3NldCAqX19mZHNldHApCit7CisJdW5zaWduZWQgbG9uZyBfX3RtcCA9IF9fZmQgLyBfX05GREJJVFM7CisJdW5zaWduZWQgbG9uZyBfX3JlbSA9IF9fZmQgJSBfX05GREJJVFM7CisJX19mZHNldHAtPmZkc19iaXRzW19fdG1wXSAmPSB+KDFVTDw8X19yZW0pOworfQorCisjdW5kZWYgX19GRF9JU1NFVAorc3RhdGljIF9faW5saW5lX18gaW50IF9fRkRfSVNTRVQodW5zaWduZWQgbG9uZyBfX2ZkLCBjb25zdCBfX2tlcm5lbF9mZF9zZXQgKl9fcCkKK3sKKwl1bnNpZ25lZCBsb25nIF9fdG1wID0gX19mZCAvIF9fTkZEQklUUzsKKwl1bnNpZ25lZCBsb25nIF9fcmVtID0gX19mZCAlIF9fTkZEQklUUzsKKwlyZXR1cm4gKF9fcC0+ZmRzX2JpdHNbX190bXBdICYgKDFVTDw8X19yZW0pKSAhPSAwOworfQorCisvKgorICogVGhpcyB3aWxsIHVucm9sbCB0aGUgbG9vcCBmb3IgdGhlIG5vcm1hbCBjb25zdGFudCBjYXNlICg4IGludHMsCisgKiBmb3IgYSAyNTYtYml0IGZkX3NldCkKKyAqLworI3VuZGVmIF9fRkRfWkVSTworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0ZEX1pFUk8oX19rZXJuZWxfZmRfc2V0ICpfX3ApCit7CisJdW5zaWduZWQgbG9uZyAqX190bXAgPSBfX3AtPmZkc19iaXRzOworCWludCBfX2k7CisKKwlpZiAoX19idWlsdGluX2NvbnN0YW50X3AoX19GRFNFVF9MT05HUykpIHsKKwkJc3dpdGNoIChfX0ZEU0VUX0xPTkdTKSB7CisJCWNhc2UgMTY6CisJCQlfX3RtcFsgMF0gPSAwOyBfX3RtcFsgMV0gPSAwOworCQkJX190bXBbIDJdID0gMDsgX190bXBbIDNdID0gMDsKKwkJCV9fdG1wWyA0XSA9IDA7IF9fdG1wWyA1XSA9IDA7CisJCQlfX3RtcFsgNl0gPSAwOyBfX3RtcFsgN10gPSAwOworCQkJX190bXBbIDhdID0gMDsgX190bXBbIDldID0gMDsKKwkJCV9fdG1wWzEwXSA9IDA7IF9fdG1wWzExXSA9IDA7CisJCQlfX3RtcFsxMl0gPSAwOyBfX3RtcFsxM10gPSAwOworCQkJX190bXBbMTRdID0gMDsgX190bXBbMTVdID0gMDsKKwkJCXJldHVybjsKKworCQljYXNlIDg6CisJCQlfX3RtcFsgMF0gPSAwOyBfX3RtcFsgMV0gPSAwOworCQkJX190bXBbIDJdID0gMDsgX190bXBbIDNdID0gMDsKKwkJCV9fdG1wWyA0XSA9IDA7IF9fdG1wWyA1XSA9IDA7CisJCQlfX3RtcFsgNl0gPSAwOyBfX3RtcFsgN10gPSAwOworCQkJcmV0dXJuOworCisJCWNhc2UgNDoKKwkJCV9fdG1wWyAwXSA9IDA7IF9fdG1wWyAxXSA9IDA7CisJCQlfX3RtcFsgMl0gPSAwOyBfX3RtcFsgM10gPSAwOworCQkJcmV0dXJuOworCQl9CisJfQorCV9faSA9IF9fRkRTRVRfTE9OR1M7CisJd2hpbGUgKF9faSkgeworCQlfX2ktLTsKKwkJKl9fdG1wID0gMDsKKwkJX190bXArKzsKKwl9Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKF9fS0VSTkVMX18pIHx8ICFkZWZpbmVkKF9fR0xJQkNfXykgfHwgKF9fR0xJQkNfXyA8IDIpICovCisKKyNlbmRpZiAvKiBfQVNNX1BPU0lYX1RZUEVTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvcHJjdGwuaCBiL2luY2x1ZGUvYXNtLW1pcHMvcHJjdGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWFhZmY2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9wcmN0bC5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBJUklYIHByY3RsIGludGVyZmFjZQorICoKKyAqIFRoZSBJUklYIGtlcm5lbCBtYXBzIGEgcGFnZSBhdCBQUkRBX0FERFJFU1Mgd2l0aCB0aGUKKyAqIGNvbnRlbnRzIG9mIHByZGEgYW5kIGZpbGxzIGl0IHRoZSBiaXRzIG9uIHByZGFfc3lzLgorICovCisKKyNpZm5kZWYgX19QUkNUTF9IX18KKyNkZWZpbmUgX19QUkNUTF9IX18KKworI2RlZmluZSBQUkRBX0FERFJFU1MgMHgyMDAwMDBMCisjZGVmaW5lIFBSREEgKChzdHJ1Y3QgcHJkYSAqKSBQUkRBX0FERFJFU1MpCisKK3N0cnVjdCBwcmRhX3N5cyB7CisJcGlkX3QgdF9waWQ7CisgICAgICAgIHUzMiAgIHRfaGludDsKKyAgICAgICAgdTMyICAgdF9kbGFjdHNlcTsKKyAgICAgICAgdTMyICAgdF9mcGZsYWdzOworICAgICAgICB1MzIgICB0X3ByaWQ7CQkvKiBwcm9jZXNzb3IgdHlwZSwgJHByaWQgQ1AwIHJlZ2lzdGVyICovCisgICAgICAgIHUzMiAgIHRfZGxlbmRzZXE7CisgICAgICAgIHU2NCAgIHRfdW51c2VkMVs1XTsKKyAgICAgICAgcGlkX3QgdF9ycGlkOworICAgICAgICBzMzIgICB0X3Jlc2NoZWQ7CisgICAgICAgIHUzMiAgIHRfdW51c2VkWzhdOworICAgICAgICB1MzIgICB0X2NwdTsJCS8qIGN1cnJlbnQvbGFzdCBjcHUgKi8KKworCS8qIEZJWE1FOiBUaGUgc2lnbmFsIGluZm9ybWF0aW9uLCBub3Qgc3VwcG9ydGVkIGJ5IExpbnV4IG5vdyAqLworCXUzMiAgIHRfZmxhZ3M7CQkvKiBpZiB0cnVlLCB0aGVuIHRoZSBzaWdwcm9jbWFzayBpcyBpbiB1c2Vyc3BhY2UgKi8KKwl1MzIgICB0X3NpZ3Byb2NtYXNrIFsxXTsgLyogdGhlIHNpZ3Byb2NtYXNrICovCit9OworCitzdHJ1Y3QgcHJkYSB7CisJY2hhciBmaWxsIFsweGUwMF07CisJc3RydWN0IHByZGFfc3lzIHByZGFfc3lzOworfTsKKworI2RlZmluZSB0X3N5cyAgICAgICAgICAgcHJkYV9zeXMKKworcHRyZGlmZl90IHByY3RsIChpbnQgb3AsIGludCB2MSwgaW50IHYyKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3ByZWZldGNoLmggYi9pbmNsdWRlL2FzbS1taXBzL3ByZWZldGNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzEyOTNlYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvcHJlZmV0Y2guaApAQCAtMCwwICsxLDg4IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzIGJ5IFJhbGYgQmFlY2hsZQorICovCisjaWZuZGVmIF9fQVNNX1BSRUZFVENIX0gKKyNkZWZpbmUgX19BU01fUFJFRkVUQ0hfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKy8qCisgKiBSNTAwMCBhbmQgUk01MjAwIGltcGxlbWVudHMgcHJlZiBhbmQgcHJlZnggaW5zdHJ1Y3Rpb25zIGJ1dCB0aGV5J3JlIG5vcHMsIHNvCisgKiByYXRoZXIgdGhhbiB3YXN0aW5nIHRpbWUgd2UgcHJldGVuZCB0aGVzZSBwcm9jZXNzb3JzIGRvbid0IHN1cHBvcnQKKyAqIHByZWZldGNoaW5nIGF0IGFsbC4KKyAqCisgKiBSNTQzMiBpbXBsZW1lbnRzIExvYWQsIFN0b3JlLCBMb2FkU3RyZWFtZWQsIFN0b3JlU3RyZWFtZWQsIExvYWRSZXRhaW5lZCwKKyAqIFN0b3JlUmV0YWluZWQgYW5kIFdyaXRlQmFja0ludmFsaWRhdGUgYnV0IG5vdCBQcmVmX1ByZXBhcmVGb3JTdG9yZS4KKyAqCisgKiBIZWxsIChhbmQgdGhlIGJvb2sgb24gbXkgc2hlbGYgSSBjYW4ndCBvcGVuIC4uLikga25vdyB3aGF0IHRoZSBSODAwMCBkb2VzLgorICoKKyAqIFJNNzAwMCB2ZXJzaW9uIDEuMCBpbnRlcnByZXRzIGFsbCBoaW50cyBhcyBQcmVmX0xvYWQ7IHZlcnNpb24gMi4wIGltcGxlbWVudHMKKyAqIFByZWZfUHJlcGFyZUZvclN0b3JlIGFsc28uCisgKgorICogUk05MDAwIGlzIE1JUFMgSVYgYnV0IGltcGxlbWVudHMgcHJlZmV0Y2hpbmcgbGlrZSBNSVBTMzIvTUlQUzY0OyBpdCdzCisgKiBQcmVmX1dyaXRlQmFja0ludmFsaWRhdGUgaXMgYSBub3AgYW5kIFByZWZfUHJlcGFyZUZvclN0b3JlIGlzIGJyb2tlbiBpbgorICogY3VycmVudCB2ZXJzaW9ucyBkdWUgdG8gZXJyYXR1bSBHMTA1LgorICoKKyAqIFZSNzcwMSBvbmx5IGltcGxlbWVudHMgdGhlIExvYWQgcHJlZmV0Y2guCisgKgorICogRmluYWxseSBNSVBTMzIgYW5kIE1JUFM2NCBpbXBsZW1lbnQgYWxsIG9mIHRoZSBmb2xsb3dpbmcgaGludHMuCisgKi8KKworI2RlZmluZSBQcmVmX0xvYWQJCQkwCisjZGVmaW5lIFByZWZfU3RvcmUJCQkxCisJCQkJCQkvKiAyIGFuZCAzIGFyZSByZXNlcnZlZCAqLworI2RlZmluZSBQcmVmX0xvYWRTdHJlYW1lZAkJNAorI2RlZmluZSBQcmVmX1N0b3JlU3RyZWFtZWQJCTUKKyNkZWZpbmUgUHJlZl9Mb2FkUmV0YWluZWQJCTYKKyNkZWZpbmUgUHJlZl9TdG9yZVJldGFpbmVkCQk3CisJCQkJCQkvKiA4IC4uLiAyNCBhcmUgcmVzZXJ2ZWQgKi8KKyNkZWZpbmUgUHJlZl9Xcml0ZUJhY2tJbnZhbGlkYXRlCTI1CisjZGVmaW5lIFByZWZfUHJlcGFyZUZvclN0b3JlCQkzMAorCisjaWZkZWYgX19BU1NFTUJMWV9fCisKKwkubWFjcm8JX19wcmVmIGhpbnQgYWRkcgorI2lmZGVmIENPTkZJR19DUFVfSEFTX1BSRUZFVENICisJcHJlZglcaGludCwgXGFkZHIKKyNlbmRpZgorCS5lbmRtCisKKwkubWFjcm8JcHJlZl9sb2FkIGFkZHIKKwlfX3ByZWYJUHJlZl9Mb2FkLCBcYWRkcgorCS5lbmRtCisKKwkubWFjcm8JcHJlZl9zdG9yZSBhZGRyCisJX19wcmVmCVByZWZfU3RvcmUsIFxhZGRyCisJLmVuZG0KKworCS5tYWNybwlwcmVmX2xvYWRfc3RyZWFtZWQgYWRkcgorCV9fcHJlZglQcmVmX0xvYWRTdHJlYW1lZCwgXGFkZHIKKwkuZW5kbQorCisJLm1hY3JvCXByZWZfc3RvcmVfc3RyZWFtZWQgYWRkcgorCV9fcHJlZglQcmVmX1N0b3JlU3RyZWFtZWQsIFxhZGRyCisJLmVuZG0KKworCS5tYWNybwlwcmVmX2xvYWRfcmV0YWluZWQgYWRkcgorCV9fcHJlZglQcmVmX0xvYWRSZXRhaW5lZCwgXGFkZHIKKwkuZW5kbQorCisJLm1hY3JvCXByZWZfc3RvcmVfcmV0YWluZWQgYWRkcgorCV9fcHJlZglQcmVmX1N0b3JlUmV0YWluZWQsIFxhZGRyCisJLmVuZG0KKworCS5tYWNybwlwcmVmX3diYWNrX2ludiBhZGRyCisJX19wcmVmCVByZWZfV3JpdGVCYWNrSW52YWxpZGF0ZSwgXGFkZHIKKwkuZW5kbQorCisJLm1hY3JvCXByZWZfcHJlcGFyZV9mb3Jfc3RvcmUgYWRkcgorCV9fcHJlZglQcmVmX1ByZXBhcmVGb3JTdG9yZSwgXGFkZHIKKwkuZW5kbQorCisjZW5kaWYKKworI2VuZGlmIC8qIF9fQVNNX1BSRUZFVENIX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvcHJvY2Vzc29yLmggYi9pbmNsdWRlL2FzbS1taXBzL3Byb2Nlc3Nvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzYzU0ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3Byb2Nlc3Nvci5oCkBAIC0wLDAgKzEsMjIwIEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk0IFdhbGRvcmYgR01CSAorICogQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAxLCAyMDAyLCAyMDAzIFJhbGYgQmFlY2hsZQorICogQ29weXJpZ2h0IChDKSAxOTk2IFBhdWwgTS4gQW50b2luZQorICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwIFNpbGljb24gR3JhcGhpY3MsIEluYy4KKyAqLworI2lmbmRlZiBfQVNNX1BST0NFU1NPUl9ICisjZGVmaW5lIF9BU01fUFJPQ0VTU09SX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKworI2luY2x1ZGUgPGFzbS9jYWNoZWN0bC5oPgorI2luY2x1ZGUgPGFzbS9jcHUuaD4KKyNpbmNsdWRlIDxhc20vY3B1LWluZm8uaD4KKyNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KKyNpbmNsdWRlIDxhc20vcHJlZmV0Y2guaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisKKy8qCisgKiBSZXR1cm4gY3VycmVudCAqIGluc3RydWN0aW9uIHBvaW50ZXIgKCJwcm9ncmFtIGNvdW50ZXIiKS4KKyAqLworI2RlZmluZSBjdXJyZW50X3RleHRfYWRkcigpICh7IF9fbGFiZWxfXyBfbDsgX2w6ICYmX2w7fSkKKworLyoKKyAqIFN5c3RlbSBzZXR1cCBhbmQgaGFyZHdhcmUgZmxhZ3MuLgorICovCitleHRlcm4gdm9pZCAoKmNwdV93YWl0KSh2b2lkKTsKKworZXh0ZXJuIHVuc2lnbmVkIGludCB2Y2VkX2NvdW50LCB2Y2VpX2NvdW50OworCisjaWZkZWYgQ09ORklHX01JUFMzMgorLyoKKyAqIFVzZXIgc3BhY2UgcHJvY2VzcyBzaXplOiAyR0IuIFRoaXMgaXMgaGFyZGNvZGVkIGludG8gYSBmZXcgcGxhY2VzLAorICogc28gZG9uJ3QgY2hhbmdlIGl0IHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuCisgKi8KKyNkZWZpbmUgVEFTS19TSVpFCTB4N2ZmZjgwMDBVTAorCisvKgorICogVGhpcyBkZWNpZGVzIHdoZXJlIHRoZSBrZXJuZWwgd2lsbCBzZWFyY2ggZm9yIGEgZnJlZSBjaHVuayBvZiB2bQorICogc3BhY2UgZHVyaW5nIG1tYXAncy4KKyAqLworI2RlZmluZSBUQVNLX1VOTUFQUEVEX0JBU0UJKFBBR0VfQUxJR04oVEFTS19TSVpFIC8gMykpCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NSVBTNjQKKy8qCisgKiBVc2VyIHNwYWNlIHByb2Nlc3Mgc2l6ZTogMVRCLiBUaGlzIGlzIGhhcmRjb2RlZCBpbnRvIGEgZmV3IHBsYWNlcywKKyAqIHNvIGRvbid0IGNoYW5nZSBpdCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLiAgVEFTS19TSVpFCisgKiBpcyBsaW1pdGVkIHRvIDFUQiBieSB0aGUgUjQwMDAgYXJjaGl0ZWN0dXJlOyBSMTAwMDAgYW5kIGJldHRlciBjYW4KKyAqIHN1cHBvcnQgMTZUQjsgdGhlIGFyY2hpdGVjdHVyYWwgcmVzZXJ2ZSBmb3IgZnV0dXJlIGV4cGFuc2lvbiBpcworICogODE5MkVCIC4uLgorICovCisjZGVmaW5lIFRBU0tfU0laRTMyCTB4N2ZmZjgwMDBVTAorI2RlZmluZSBUQVNLX1NJWkUJMHgxMDAwMDAwMDAwMFVMCisKKy8qCisgKiBUaGlzIGRlY2lkZXMgd2hlcmUgdGhlIGtlcm5lbCB3aWxsIHNlYXJjaCBmb3IgYSBmcmVlIGNodW5rIG9mIHZtCisgKiBzcGFjZSBkdXJpbmcgbW1hcCdzLgorICovCisjZGVmaW5lIFRBU0tfVU5NQVBQRURfQkFTRQkoKGN1cnJlbnQtPnRocmVhZC5tZmxhZ3MgJiBNRl8zMkJJVF9BRERSKSA/IFwKKwlQQUdFX0FMSUdOKFRBU0tfU0laRTMyIC8gMykgOiBQQUdFX0FMSUdOKFRBU0tfU0laRSAvIDMpKQorI2VuZGlmCisKKyNkZWZpbmUgTlVNX0ZQVV9SRUdTCTMyCisKK3R5cGVkZWYgX191NjQgZnB1cmVnX3Q7CisKK3N0cnVjdCBtaXBzX2ZwdV9oYXJkX3N0cnVjdCB7CisJZnB1cmVnX3QJZnByW05VTV9GUFVfUkVHU107CisJdW5zaWduZWQgaW50CWZjcjMxOworfTsKKworLyoKKyAqIEl0IHdvdWxkIGJlIG5pY2UgdG8gYWRkIHNvbWUgbW9yZSBmaWVsZHMgZm9yIGVtdWxhdG9yIHN0YXRpc3RpY3MsIGJ1dCB0aGVyZQorICogYXJlIGEgbnVtYmVyIG9mIGZpeGVkIG9mZnNldHMgaW4gb2Zmc2V0LmggYW5kIGVsc2V3aGVyZSB0aGF0IHdvdWxkIGhhdmUgdG8KKyAqIGJlIHJlY2FsY3VsYXRlZCBieSBoYW5kLiAgU28gdGhlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gd2lsbCBiZSBwcml2YXRlIHRvCisgKiB0aGUgRlBVIGVtdWxhdG9yIGZvciBub3cuICBTZWUgYXNtLW1pcHMvZnB1X2VtdWxhdG9yLmguCisgKi8KKworc3RydWN0IG1pcHNfZnB1X3NvZnRfc3RydWN0IHsKKwlmcHVyZWdfdAlmcHJbTlVNX0ZQVV9SRUdTXTsKKwl1bnNpZ25lZCBpbnQJZmNyMzE7Cit9OworCit1bmlvbiBtaXBzX2ZwdV91bmlvbiB7CisgICAgICAgIHN0cnVjdCBtaXBzX2ZwdV9oYXJkX3N0cnVjdCBoYXJkOworICAgICAgICBzdHJ1Y3QgbWlwc19mcHVfc29mdF9zdHJ1Y3Qgc29mdDsKK307CisKKyNkZWZpbmUgSU5JVF9GUFUgeyBcCisJe3swLH0sfSBcCit9CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBsb25nIHNlZzsKK30gbW1fc2VnbWVudF90OworCisjZGVmaW5lIEFSQ0hfTUlOX1RBU0tBTElHTgk4CisKKy8qCisgKiBJZiB5b3UgY2hhbmdlIHRocmVhZF9zdHJ1Y3QgcmVtZW1iZXIgdG8gY2hhbmdlIHRoZSAjZGVmaW5lcyBiZWxvdyB0b28hCisgKi8KK3N0cnVjdCB0aHJlYWRfc3RydWN0IHsKKwkvKiBTYXZlZCBtYWluIHByb2Nlc3NvciByZWdpc3RlcnMuICovCisJdW5zaWduZWQgbG9uZyByZWcxNjsKKwl1bnNpZ25lZCBsb25nIHJlZzE3LCByZWcxOCwgcmVnMTksIHJlZzIwLCByZWcyMSwgcmVnMjIsIHJlZzIzOworCXVuc2lnbmVkIGxvbmcgcmVnMjksIHJlZzMwLCByZWczMTsKKworCS8qIFNhdmVkIGNwMCBzdHVmZi4gKi8KKwl1bnNpZ25lZCBsb25nIGNwMF9zdGF0dXM7CisKKwkvKiBTYXZlZCBmcHUvZnB1IGVtdWxhdG9yIHN0dWZmLiAqLworCXVuaW9uIG1pcHNfZnB1X3VuaW9uIGZwdTsKKworCS8qIE90aGVyIHN0dWZmIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGhyZWFkLiAqLworCXVuc2lnbmVkIGxvbmcgY3AwX2JhZHZhZGRyOwkvKiBMYXN0IHVzZXIgZmF1bHQgKi8KKwl1bnNpZ25lZCBsb25nIGNwMF9iYWR1YWRkcjsJLyogTGFzdCBrZXJuZWwgZmF1bHQgYWNjZXNzaW5nIFVTRUcgKi8KKwl1bnNpZ25lZCBsb25nIGVycm9yX2NvZGU7CisJdW5zaWduZWQgbG9uZyB0cmFwX25vOworI2RlZmluZSBNRl9GSVhBREUJMQkJLyogRml4IGFkZHJlc3MgZXJyb3JzIGluIHNvZnR3YXJlICovCisjZGVmaW5lIE1GX0xPR0FERQkyCQkvKiBMb2cgYWRkcmVzcyBlcnJvcnMgdG8gc3lzbG9nICovCisjZGVmaW5lIE1GXzMyQklUX1JFR1MJNAkJLyogYWxzbyBpbXBsaWVzIDE2LzMyIGZwcnMgKi8KKyNkZWZpbmUgTUZfMzJCSVRfQUREUgk4CQkvKiAzMi1iaXQgYWRkcmVzcyBzcGFjZSAobzMyL24zMikgKi8KKwl1bnNpZ25lZCBsb25nIG1mbGFnczsKKwl1bnNpZ25lZCBsb25nIGlyaXhfdHJhbXBvbGluZTsgIC8qIFdoZWVlLi4uICovCisJdW5zaWduZWQgbG9uZyBpcml4X29sZGN0eDsKK307CisKKyNkZWZpbmUgTUZfQUJJX01BU0sJKE1GXzMyQklUX1JFR1MgfCBNRl8zMkJJVF9BRERSKQorI2RlZmluZSBNRl9PMzIJCShNRl8zMkJJVF9SRUdTIHwgTUZfMzJCSVRfQUREUikKKyNkZWZpbmUgTUZfTjMyCQlNRl8zMkJJVF9BRERSCisjZGVmaW5lIE1GX042NAkJMAorCisjZGVmaW5lIElOSVRfVEhSRUFEICB7IFwKKyAgICAgICAgLyogXAorICAgICAgICAgKiBzYXZlZCBtYWluIHByb2Nlc3NvciByZWdpc3RlcnMgXAorICAgICAgICAgKi8gXAorCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIFwKKwkgICAgICAgICAgICAgICAwLCAwLCAwLCBcCisJLyogXAorCSAqIHNhdmVkIGNwMCBzdHVmZiBcCisJICovIFwKKwkwLCBcCisJLyogXAorCSAqIHNhdmVkIGZwdS9mcHUgZW11bGF0b3Igc3R1ZmYgXAorCSAqLyBcCisJSU5JVF9GUFUsIFwKKwkvKiBcCisJICogT3RoZXIgc3R1ZmYgYXNzb2NpYXRlZCB3aXRoIHRoZSBwcm9jZXNzIFwKKwkgKi8gXAorCTAsIDAsIDAsIDAsIFwKKwkvKiBcCisJICogRm9yIG5vdyB0aGUgZGVmYXVsdCBpcyB0byBmaXggYWRkcmVzcyBlcnJvcnMgXAorCSAqLyBcCisJTUZfRklYQURFLCAwLCAwIFwKK30KKworc3RydWN0IHRhc2tfc3RydWN0OworCisvKiBGcmVlIGFsbCByZXNvdXJjZXMgaGVsZCBieSBhIHRocmVhZC4gKi8KKyNkZWZpbmUgcmVsZWFzZV90aHJlYWQodGhyZWFkKSBkbyB7IH0gd2hpbGUoMCkKKworLyogUHJlcGFyZSB0byBjb3B5IHRocmVhZCBzdGF0ZSAtIHVubGF6eSBhbGwgbGF6eSBzdGF0dXMgKi8KKyNkZWZpbmUgcHJlcGFyZV90b19jb3B5KHRzaykJZG8geyB9IHdoaWxlICgwKQorCitleHRlcm4gbG9uZyBrZXJuZWxfdGhyZWFkKGludCAoKmZuKSh2b2lkICopLCB2b2lkICogYXJnLCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdGhyZWFkX3NhdmVkX3BjKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKKworLyoKKyAqIERvIG5lY2Vzc2FyeSBzZXR1cCB0byBzdGFydCB1cCBhIG5ld2x5IGV4ZWN1dGVkIHRocmVhZC4KKyAqLworZXh0ZXJuIHZvaWQgc3RhcnRfdGhyZWFkKHN0cnVjdCBwdF9yZWdzICogcmVncywgdW5zaWduZWQgbG9uZyBwYywgdW5zaWduZWQgbG9uZyBzcCk7CisKK3Vuc2lnbmVkIGxvbmcgZ2V0X3djaGFuKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7CisKKyNkZWZpbmUgX19QVF9SRUcocmVnKSAoKGxvbmcpJigoc3RydWN0IHB0X3JlZ3MgKikwKS0+cmVnIC0gc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKSkKKyNkZWZpbmUgX19LU1RLX1RPUyh0c2spICgodW5zaWduZWQgbG9uZykodHNrLT50aHJlYWRfaW5mbykgKyBUSFJFQURfU0laRSAtIDMyKQorI2RlZmluZSBLU1RLX0VJUCh0c2spICgqKHVuc2lnbmVkIGxvbmcgKikoX19LU1RLX1RPUyh0c2spICsgX19QVF9SRUcoY3AwX2VwYykpKQorI2RlZmluZSBLU1RLX0VTUCh0c2spICgqKHVuc2lnbmVkIGxvbmcgKikoX19LU1RLX1RPUyh0c2spICsgX19QVF9SRUcocmVnc1syOV0pKSkKKyNkZWZpbmUgS1NUS19TVEFUVVModHNrKSAoKih1bnNpZ25lZCBsb25nICopKF9fS1NUS19UT1ModHNrKSArIF9fUFRfUkVHKGNwMF9zdGF0dXMpKSkKKworI2RlZmluZSBjcHVfcmVsYXgoKQliYXJyaWVyKCkKKworLyoKKyAqIFJldHVybl9hZGRyZXNzIGlzIGEgcmVwbGFjZW1lbnQgZm9yIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcyhjb3VudCkKKyAqIHdoaWNoIG9uIGNlcnRhaW4gYXJjaGl0ZWN0dXJlcyBjYW5ub3QgcmVhc29uYWJseSBiZSBpbXBsZW1lbnRlZCBpbiBHQ0MKKyAqIChNSVBTLCBBbHBoYSkgb3IgaXMgdW51c2VhYmxlIHdpdGggLWZvbWl0LWZyYW1lLXBvaW50ZXIgKGkzODYpLgorICogTm90ZSB0aGF0IF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcyh4Pj0xKSBpcyBmb3JiaWRkZW4gYmVjYXVzZSBHQ0MKKyAqIGFib3J0cyBjb21waWxhdGlvbiBvbiBzb21lIENQVXMuICBJdCdzIHNpbXBseSBub3QgcG9zc2libGUgdG8gdW53aW5kCisgKiBzb21lIENQVSdzIHN0YWNrZnJhbWVzLgorICoKKyAqIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcyB3b3JrcyBvbmx5IGZvciBub24tbGVhZiBmdW5jdGlvbnMuICBXZSBhdm9pZCB0aGUKKyAqIG92ZXJoZWFkIG9mIGEgZnVuY3Rpb24gY2FsbCBieSBmb3JjaW5nIHRoZSBjb21waWxlciB0byBzYXZlIHRoZSByZXR1cm4KKyAqIGFkZHJlc3MgcmVnaXN0ZXIgb24gdGhlIHN0YWNrLgorICovCisjZGVmaW5lIHJldHVybl9hZGRyZXNzKCkgKHtfX2FzbV9fIF9fdm9sYXRpbGVfXygiIjo6OiIkMzEiKTtfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCk7fSkKKworI2lmZGVmIENPTkZJR19DUFVfSEFTX1BSRUZFVENICisKKyNkZWZpbmUgQVJDSF9IQVNfUFJFRkVUQ0gKKworZXh0ZXJuIGlubGluZSB2b2lkIHByZWZldGNoKGNvbnN0IHZvaWQgKmFkZHIpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJIgkuc2V0CW1pcHM0CQlcbiIKKwkiCXByZWYJJTAsICglMSkJXG4iCisJIgkuc2V0CW1pcHMwCQlcbiIKKwk6CisJOiAiaSIgKFByZWZfTG9hZCksICJyIiAoYWRkcikpOworfQorCisjZW5kaWYKKworI2VuZGlmIC8qIF9BU01fUFJPQ0VTU09SX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvcHRyYWNlLmggYi9pbmNsdWRlL2FzbS1taXBzL3B0cmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzYzQ2ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3B0cmFjZS5oCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTQsIDk1LCA5NiwgOTcsIDk4LCA5OSwgMjAwMCBieSBSYWxmIEJhZWNobGUKKyAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCisgKi8KKyNpZm5kZWYgX0FTTV9QVFJBQ0VfSAorI2RlZmluZSBfQVNNX1BUUkFDRV9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2luY2x1ZGUgPGFzbS9pc2FkZXAuaD4KKworLyogMCAtIDMxIGFyZSBpbnRlZ2VyIHJlZ2lzdGVycywgMzIgLSA2MyBhcmUgZnAgcmVnaXN0ZXJzLiAgKi8KKyNkZWZpbmUgRlBSX0JBU0UJMzIKKyNkZWZpbmUgUEMJCTY0CisjZGVmaW5lIENBVVNFCQk2NQorI2RlZmluZSBCQURWQUREUgk2NgorI2RlZmluZSBNTUhJCQk2NworI2RlZmluZSBNTUxPCQk2OAorI2RlZmluZSBGUENfQ1NSCQk2OQorI2RlZmluZSBGUENfRUlSCQk3MAorCisvKgorICogVGhpcyBzdHJ1Y3QgZGVmaW5lcyB0aGUgd2F5IHRoZSByZWdpc3RlcnMgYXJlIHN0b3JlZCBvbiB0aGUgc3RhY2sgZHVyaW5nIGEKKyAqIHN5c3RlbSBjYWxsL2V4Y2VwdGlvbi4gQXMgdXN1YWwgdGhlIHJlZ2lzdGVycyBrMC9rMSBhcmVuJ3QgYmVpbmcgc2F2ZWQuCisgKi8KK3N0cnVjdCBwdF9yZWdzIHsKKyNpZmRlZiBDT05GSUdfTUlQUzMyCisJLyogUGFkIGJ5dGVzIGZvciBhcmd1bWVudCBzYXZlIHNwYWNlIG9uIHRoZSBzdGFjay4gKi8KKwl1bnNpZ25lZCBsb25nIHBhZDBbNl07CisjZW5kaWYKKworCS8qIFNhdmVkIG1haW4gcHJvY2Vzc29yIHJlZ2lzdGVycy4gKi8KKwl1bnNpZ25lZCBsb25nIHJlZ3NbMzJdOworCisJLyogU2F2ZWQgc3BlY2lhbCByZWdpc3RlcnMuICovCisJdW5zaWduZWQgbG9uZyBjcDBfc3RhdHVzOworCXVuc2lnbmVkIGxvbmcgbG87CisJdW5zaWduZWQgbG9uZyBoaTsKKwl1bnNpZ25lZCBsb25nIGNwMF9iYWR2YWRkcjsKKwl1bnNpZ25lZCBsb25nIGNwMF9jYXVzZTsKKwl1bnNpZ25lZCBsb25nIGNwMF9lcGM7Cit9OworCisvKiBBcmJpdHJhcmlseSBjaG9vc2UgdGhlIHNhbWUgcHRyYWNlIG51bWJlcnMgYXMgdXNlZCBieSB0aGUgU3BhcmMgY29kZS4gKi8KKy8qICNkZWZpbmUgUFRSQUNFX0dFVFJFR1MJCTEyICovCisvKiAjZGVmaW5lIFBUUkFDRV9TRVRSRUdTCQkxMyAqLworLyogI2RlZmluZSBQVFJBQ0VfR0VURlBSRUdTCQkxNCAqLworLyogI2RlZmluZSBQVFJBQ0VfU0VURlBSRUdTCQkxNSAqLworLyogI2RlZmluZSBQVFJBQ0VfR0VURlBYUkVHUwkJMTggKi8KKy8qICNkZWZpbmUgUFRSQUNFX1NFVEZQWFJFR1MJCTE5ICovCisKKyNkZWZpbmUgUFRSQUNFX09MRFNFVE9QVElPTlMJMjEKKworI2RlZmluZSBQVFJBQ0VfR0VUX1RIUkVBRF9BUkVBCTI1CisjZGVmaW5lIFBUUkFDRV9TRVRfVEhSRUFEX0FSRUEJMjYKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKworLyoKKyAqIERvZXMgdGhlIHByb2Nlc3MgYWNjb3VudCBmb3IgdXNlciBvciBmb3Igc3lzdGVtIHRpbWU/CisgKi8KKyNkZWZpbmUgdXNlcl9tb2RlKHJlZ3MpICgoKHJlZ3MpLT5jcDBfc3RhdHVzICYgS1VfTUFTSykgPT0gS1VfVVNFUikKKworI2RlZmluZSBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpICgocmVncyktPmNwMF9lcGMpCisjZGVmaW5lIHByb2ZpbGVfcGMocmVncykgaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKQorCitleHRlcm4gdm9pZCBzaG93X3JlZ3Moc3RydWN0IHB0X3JlZ3MgKik7CisKK2V4dGVybiBhc21saW5rYWdlIHZvaWQgZG9fc3lzY2FsbF90cmFjZShzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGVudHJ5ZXhpdCk7CisKKyNlbmRpZgorCisjZW5kaWYgLyogX0FTTV9QVFJBQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9yNGtjYWNoZS5oIGIvaW5jbHVkZS9hc20tbWlwcy9yNGtjYWNoZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhMDNhMzIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3I0a2NhY2hlLmgKQEAgLTAsMCArMSw1OTggQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBJbmxpbmUgYXNzZW1ibHkgY2FjaGUgb3BlcmF0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYgRGF2aWQgUy4gTWlsbGVyIChkbUBlbmdyLnNnaS5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDE5OTcgLSAyMDAyIFJhbGYgQmFlY2hsZSAocmFsZkBnbnUub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDA0IFJhbGYgQmFlY2hsZSAocmFsZkBsaW51eC1taXBzLm9yZykKKyAqLworI2lmbmRlZiBfQVNNX1I0S0NBQ0hFX0gKKyNkZWZpbmUgX0FTTV9SNEtDQUNIRV9ICisKKyNpbmNsdWRlIDxhc20vYXNtLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlb3BzLmg+CisKKy8qCisgKiBUaGlzIG1hY3JvIHJldHVybiBhIHByb3Blcmx5IHNpZ24tZXh0ZW5kZWQgYWRkcmVzcyBzdWl0YWJsZSBhcyBiYXNlIGFkZHJlc3MKKyAqIGZvciBpbmRleGVkIGNhY2hlIG9wZXJhdGlvbnMuICBUd28gaXNzdWVzIGhlcmU6CisgKgorICogIC0gVGhlIE1JUFMzMiBhbmQgTUlQUzY0IHNwZWNzIHBlcm1pdCBhbiBpbXBsZW1lbnRhdGlvbiB0byBkaXJlY3RseSBkZXJpdmUKKyAqICAgIHRoZSBpbmRleCBiaXRzIGZyb20gdGhlIHZpcnR1YWwgYWRkcmVzcy4gIFRoaXMgYnJlYWtzIHdpdGggdHJhZGl0aW9uCisgKiAgICBzZXQgYnkgdGhlIFI0MDAwLiAgVG8ga2VlcCB1bnBsZWFzc2FudCBzdXJwcmlzZXMgZnJvbSBoYXBwZW5pbmcgd2UgcGljaworICogICAgYW4gYWRkcmVzcyBpbiBLU0VHMCAvIENLU0VHMC4KKyAqICAtIFdlIG5lZWQgYSBwcm9wZXJseSBzaWduIGV4dGVuZGVkIGFkZHJlc3MgZm9yIDY0LWJpdCBjb2RlLiAgVG8gZ2V0IGF3YXkKKyAqICAgIHdpdGhvdXQgaWZkZWZzIHdlIGxldCB0aGUgY29tcGlsZXIgZG8gaXQgYnkgYSB0eXBlIGNhc3QuCisgKi8KKyNkZWZpbmUgSU5ERVhfQkFTRQlDS1NFRzAKKworI2RlZmluZSBjYWNoZV9vcChvcCxhZGRyKQkJCQkJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQlcCisJIgkuc2V0CW5vcmVvcmRlcgkJCQlcbiIJXAorCSIJLnNldAltaXBzM1xuXHQJCQkJXG4iCVwKKwkiCWNhY2hlCSUwLCAlMQkJCQkJXG4iCVwKKwkiCS5zZXQJbWlwczAJCQkJCVxuIglcCisJIgkuc2V0CXJlb3JkZXIiCQkJCQlcCisJOgkJCQkJCQkJXAorCTogImkiIChvcCksICJtIiAoKih1bnNpZ25lZCBjaGFyICopKGFkZHIpKSkKKworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2ljYWNoZV9saW5lX2luZGV4ZWQodW5zaWduZWQgbG9uZyBhZGRyKQoreworCWNhY2hlX29wKEluZGV4X0ludmFsaWRhdGVfSSwgYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9kY2FjaGVfbGluZV9pbmRleGVkKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwljYWNoZV9vcChJbmRleF9Xcml0ZWJhY2tfSW52X0QsIGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfc2NhY2hlX2xpbmVfaW5kZXhlZCh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJY2FjaGVfb3AoSW5kZXhfV3JpdGViYWNrX0ludl9TRCwgYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9pY2FjaGVfbGluZSh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJY2FjaGVfb3AoSGl0X0ludmFsaWRhdGVfSSwgYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9kY2FjaGVfbGluZSh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJY2FjaGVfb3AoSGl0X1dyaXRlYmFja19JbnZfRCwgYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbnZhbGlkYXRlX2RjYWNoZV9saW5lKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwljYWNoZV9vcChIaXRfSW52YWxpZGF0ZV9ELCBhZGRyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGludmFsaWRhdGVfc2NhY2hlX2xpbmUodW5zaWduZWQgbG9uZyBhZGRyKQoreworCWNhY2hlX29wKEhpdF9JbnZhbGlkYXRlX1NELCBhZGRyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3NjYWNoZV9saW5lKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwljYWNoZV9vcChIaXRfV3JpdGViYWNrX0ludl9TRCwgYWRkcik7Cit9CisKKy8qCisgKiBUaGUgbmV4dCB0d28gYXJlIGZvciBiYWRsYW5kIGFkZHJlc3NlcyBsaWtlIHNpZ25hbCB0cmFtcG9saW5lcy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHByb3RlY3RlZF9mbHVzaF9pY2FjaGVfbGluZSh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSIuc2V0IG5vcmVvcmRlclxuXHQiCisJCSIuc2V0IG1pcHMzXG4iCisJCSIxOlx0Y2FjaGUgJTAsKCUxKVxuIgorCQkiMjpcdC5zZXQgbWlwczBcblx0IgorCQkiLnNldCByZW9yZGVyXG5cdCIKKwkJIi5zZWN0aW9uXHRfX2V4X3RhYmxlLFwiYVwiXG5cdCIKKwkJU1RSKFBUUikiXHQxYiwyYlxuXHQiCisJCSIucHJldmlvdXMiCisJCToKKwkJOiAiaSIgKEhpdF9JbnZhbGlkYXRlX0kpLCAiciIgKGFkZHIpKTsKK30KKworLyoKKyAqIFIxMDAwMCAvIFIxMjAwMCBoYXphcmQgLSB0aGVzZSBwcm9jZXNzb3JzIGRvbid0IHN1cHBvcnQgdGhlIEhpdF9Xcml0ZWJhY2tfRAorICogY2FjaGVvcCBzbyB3ZSB1c2UgSGl0X1dyaXRlYmFja19JbnZfRCB3aGljaCBpcyBzdXBwb3J0ZWQgYnkgYWxsIFI0MDAwLXN0eWxlCisgKiBjYWNoZXMuICBXZSdyZSB0YWxraW5nIGFib3V0IG9uZSBjYWNoZWxpbmUgdW5uZWNlc3NhcmlseSBnZXR0aW5nIGludmFsaWRhdGVkCisgKiBoZXJlIHNvIHRoZSBwZW5hbHRpeSBpc24ndCBvdmVybHkgaGFyZC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHByb3RlY3RlZF93cml0ZWJhY2tfZGNhY2hlX2xpbmUodW5zaWduZWQgbG9uZyBhZGRyKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkiLnNldCBub3Jlb3JkZXJcblx0IgorCQkiLnNldCBtaXBzM1xuIgorCQkiMTpcdGNhY2hlICUwLCglMSlcbiIKKwkJIjI6XHQuc2V0IG1pcHMwXG5cdCIKKwkJIi5zZXQgcmVvcmRlclxuXHQiCisJCSIuc2VjdGlvblx0X19leF90YWJsZSxcImFcIlxuXHQiCisJCVNUUihQVFIpIlx0MWIsMmJcblx0IgorCQkiLnByZXZpb3VzIgorCQk6CisJCTogImkiIChIaXRfV3JpdGViYWNrX0ludl9EKSwgInIiIChhZGRyKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwcm90ZWN0ZWRfd3JpdGViYWNrX3NjYWNoZV9saW5lKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJIi5zZXQgbm9yZW9yZGVyXG5cdCIKKwkJIi5zZXQgbWlwczNcbiIKKwkJIjE6XHRjYWNoZSAlMCwoJTEpXG4iCisJCSIyOlx0LnNldCBtaXBzMFxuXHQiCisJCSIuc2V0IHJlb3JkZXJcblx0IgorCQkiLnNlY3Rpb25cdF9fZXhfdGFibGUsXCJhXCJcblx0IgorCQlTVFIoUFRSKSJcdDFiLDJiXG5cdCIKKwkJIi5wcmV2aW91cyIKKwkJOgorCQk6ICJpIiAoSGl0X1dyaXRlYmFja19JbnZfU0QpLCAiciIgKGFkZHIpKTsKK30KKworLyoKKyAqIFRoaXMgb25lIGlzIFJNNzAwMC1zcGVjaWZpYworICovCitzdGF0aWMgaW5saW5lIHZvaWQgaW52YWxpZGF0ZV90Y2FjaGVfcGFnZSh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJY2FjaGVfb3AoUGFnZV9JbnZhbGlkYXRlX1QsIGFkZHIpOworfQorCisjZGVmaW5lIGNhY2hlMTZfdW5yb2xsMzIoYmFzZSxvcCkJCQkJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQlcCisJIgkuc2V0IG5vcmVvcmRlcgkJCQkJXG4iCVwKKwkiCS5zZXQgbWlwczMJCQkJCVxuIglcCisJIgljYWNoZSAlMSwgMHgwMDAoJTApOyBjYWNoZSAlMSwgMHgwMTAoJTApCVxuIglcCisJIgljYWNoZSAlMSwgMHgwMjAoJTApOyBjYWNoZSAlMSwgMHgwMzAoJTApCVxuIglcCisJIgljYWNoZSAlMSwgMHgwNDAoJTApOyBjYWNoZSAlMSwgMHgwNTAoJTApCVxuIglcCisJIgljYWNoZSAlMSwgMHgwNjAoJTApOyBjYWNoZSAlMSwgMHgwNzAoJTApCVxuIglcCisJIgljYWNoZSAlMSwgMHgwODAoJTApOyBjYWNoZSAlMSwgMHgwOTAoJTApCVxuIglcCisJIgljYWNoZSAlMSwgMHgwYTAoJTApOyBjYWNoZSAlMSwgMHgwYjAoJTApCVxuIglcCisJIgljYWNoZSAlMSwgMHgwYzAoJTApOyBjYWNoZSAlMSwgMHgwZDAoJTApCVxuIglcCisJIgljYWNoZSAlMSwgMHgwZTAoJTApOyBjYWNoZSAlMSwgMHgwZjAoJTApCVxuIglcCisJIgljYWNoZSAlMSwgMHgxMDAoJTApOyBjYWNoZSAlMSwgMHgxMTAoJTApCVxuIglcCisJIgljYWNoZSAlMSwgMHgxMjAoJTApOyBjYWNoZSAlMSwgMHgxMzAoJTApCVxuIglcCisJIgljYWNoZSAlMSwgMHgxNDAoJTApOyBjYWNoZSAlMSwgMHgxNTAoJTApCVxuIglcCisJIgljYWNoZSAlMSwgMHgxNjAoJTApOyBjYWNoZSAlMSwgMHgxNzAoJTApCVxuIglcCisJIgljYWNoZSAlMSwgMHgxODAoJTApOyBjYWNoZSAlMSwgMHgxOTAoJTApCVxuIglcCisJIgljYWNoZSAlMSwgMHgxYTAoJTApOyBjYWNoZSAlMSwgMHgxYjAoJTApCVxuIglcCisJIgljYWNoZSAlMSwgMHgxYzAoJTApOyBjYWNoZSAlMSwgMHgxZDAoJTApCVxuIglcCisJIgljYWNoZSAlMSwgMHgxZTAoJTApOyBjYWNoZSAlMSwgMHgxZjAoJTApCVxuIglcCisJIgkuc2V0IG1pcHMwCQkJCQlcbiIJXAorCSIJLnNldCByZW9yZGVyCQkJCQlcbiIJXAorCQk6CQkJCQkJCVwKKwkJOiAiciIgKGJhc2UpLAkJCQkJCVwKKwkJICAiaSIgKG9wKSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBibGFzdF9kY2FjaGUxNih2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBJTkRFWF9CQVNFOworCXVuc2lnbmVkIGxvbmcgZW5kID0gc3RhcnQgKyBjdXJyZW50X2NwdV9kYXRhLmRjYWNoZS53YXlzaXplOworCXVuc2lnbmVkIGxvbmcgd3NfaW5jID0gMVVMIDw8IGN1cnJlbnRfY3B1X2RhdGEuZGNhY2hlLndheWJpdDsKKwl1bnNpZ25lZCBsb25nIHdzX2VuZCA9IGN1cnJlbnRfY3B1X2RhdGEuZGNhY2hlLndheXMgPDwgCisJICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50X2NwdV9kYXRhLmRjYWNoZS53YXliaXQ7CisJdW5zaWduZWQgbG9uZyB3cywgYWRkcjsKKworCWZvciAod3MgPSAwOyB3cyA8IHdzX2VuZDsgd3MgKz0gd3NfaW5jKSAKKwkJZm9yIChhZGRyID0gc3RhcnQ7IGFkZHIgPCBlbmQ7IGFkZHIgKz0gMHgyMDApCisJCQljYWNoZTE2X3Vucm9sbDMyKGFkZHJ8d3MsSW5kZXhfV3JpdGViYWNrX0ludl9EKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGJsYXN0X2RjYWNoZTE2X3BhZ2UodW5zaWduZWQgbG9uZyBwYWdlKQoreworCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBwYWdlOworCXVuc2lnbmVkIGxvbmcgZW5kID0gc3RhcnQgKyBQQUdFX1NJWkU7CisKKwlkbyB7CisJCWNhY2hlMTZfdW5yb2xsMzIoc3RhcnQsSGl0X1dyaXRlYmFja19JbnZfRCk7CisJCXN0YXJ0ICs9IDB4MjAwOworCX0gd2hpbGUgKHN0YXJ0IDwgZW5kKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGJsYXN0X2RjYWNoZTE2X3BhZ2VfaW5kZXhlZCh1bnNpZ25lZCBsb25nIHBhZ2UpCit7CisJdW5zaWduZWQgbG9uZyBzdGFydCA9IHBhZ2U7CisJdW5zaWduZWQgbG9uZyBlbmQgPSBzdGFydCArIFBBR0VfU0laRTsKKwl1bnNpZ25lZCBsb25nIHdzX2luYyA9IDFVTCA8PCBjdXJyZW50X2NwdV9kYXRhLmRjYWNoZS53YXliaXQ7CisJdW5zaWduZWQgbG9uZyB3c19lbmQgPSBjdXJyZW50X2NwdV9kYXRhLmRjYWNoZS53YXlzIDw8CisJICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50X2NwdV9kYXRhLmRjYWNoZS53YXliaXQ7CisJdW5zaWduZWQgbG9uZyB3cywgYWRkcjsKKworCWZvciAod3MgPSAwOyB3cyA8IHdzX2VuZDsgd3MgKz0gd3NfaW5jKSAKKwkJZm9yIChhZGRyID0gc3RhcnQ7IGFkZHIgPCBlbmQ7IGFkZHIgKz0gMHgyMDApIAorCQkJY2FjaGUxNl91bnJvbGwzMihhZGRyfHdzLEluZGV4X1dyaXRlYmFja19JbnZfRCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBibGFzdF9pY2FjaGUxNih2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBJTkRFWF9CQVNFOworCXVuc2lnbmVkIGxvbmcgZW5kID0gc3RhcnQgKyBjdXJyZW50X2NwdV9kYXRhLmljYWNoZS53YXlzaXplOworCXVuc2lnbmVkIGxvbmcgd3NfaW5jID0gMVVMIDw8IGN1cnJlbnRfY3B1X2RhdGEuaWNhY2hlLndheWJpdDsKKwl1bnNpZ25lZCBsb25nIHdzX2VuZCA9IGN1cnJlbnRfY3B1X2RhdGEuaWNhY2hlLndheXMgPDwKKwkgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfY3B1X2RhdGEuaWNhY2hlLndheWJpdDsKKwl1bnNpZ25lZCBsb25nIHdzLCBhZGRyOworCisJZm9yICh3cyA9IDA7IHdzIDwgd3NfZW5kOyB3cyArPSB3c19pbmMpIAorCQlmb3IgKGFkZHIgPSBzdGFydDsgYWRkciA8IGVuZDsgYWRkciArPSAweDIwMCkgCisJCQljYWNoZTE2X3Vucm9sbDMyKGFkZHJ8d3MsSW5kZXhfSW52YWxpZGF0ZV9JKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGJsYXN0X2ljYWNoZTE2X3BhZ2UodW5zaWduZWQgbG9uZyBwYWdlKQoreworCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBwYWdlOworCXVuc2lnbmVkIGxvbmcgZW5kID0gc3RhcnQgKyBQQUdFX1NJWkU7CisKKwlkbyB7CisJCWNhY2hlMTZfdW5yb2xsMzIoc3RhcnQsSGl0X0ludmFsaWRhdGVfSSk7CisJCXN0YXJ0ICs9IDB4MjAwOworCX0gd2hpbGUgKHN0YXJ0IDwgZW5kKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGJsYXN0X2ljYWNoZTE2X3BhZ2VfaW5kZXhlZCh1bnNpZ25lZCBsb25nIHBhZ2UpCit7CisJdW5zaWduZWQgbG9uZyBzdGFydCA9IHBhZ2U7CisJdW5zaWduZWQgbG9uZyBlbmQgPSBzdGFydCArIFBBR0VfU0laRTsKKwl1bnNpZ25lZCBsb25nIHdzX2luYyA9IDFVTCA8PCBjdXJyZW50X2NwdV9kYXRhLmljYWNoZS53YXliaXQ7CisJdW5zaWduZWQgbG9uZyB3c19lbmQgPSBjdXJyZW50X2NwdV9kYXRhLmljYWNoZS53YXlzIDw8CisJICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50X2NwdV9kYXRhLmljYWNoZS53YXliaXQ7CisJdW5zaWduZWQgbG9uZyB3cywgYWRkcjsKKworCWZvciAod3MgPSAwOyB3cyA8IHdzX2VuZDsgd3MgKz0gd3NfaW5jKSAKKwkJZm9yIChhZGRyID0gc3RhcnQ7IGFkZHIgPCBlbmQ7IGFkZHIgKz0gMHgyMDApIAorCQkJY2FjaGUxNl91bnJvbGwzMihhZGRyfHdzLEluZGV4X0ludmFsaWRhdGVfSSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBibGFzdF9zY2FjaGUxNih2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBJTkRFWF9CQVNFOworCXVuc2lnbmVkIGxvbmcgZW5kID0gc3RhcnQgKyBjdXJyZW50X2NwdV9kYXRhLnNjYWNoZS53YXlzaXplOworCXVuc2lnbmVkIGxvbmcgd3NfaW5jID0gMVVMIDw8IGN1cnJlbnRfY3B1X2RhdGEuc2NhY2hlLndheWJpdDsKKwl1bnNpZ25lZCBsb25nIHdzX2VuZCA9IGN1cnJlbnRfY3B1X2RhdGEuc2NhY2hlLndheXMgPDwgCisJICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50X2NwdV9kYXRhLnNjYWNoZS53YXliaXQ7CisJdW5zaWduZWQgbG9uZyB3cywgYWRkcjsKKworCWZvciAod3MgPSAwOyB3cyA8IHdzX2VuZDsgd3MgKz0gd3NfaW5jKSAKKwkJZm9yIChhZGRyID0gc3RhcnQ7IGFkZHIgPCBlbmQ7IGFkZHIgKz0gMHgyMDApCisJCQljYWNoZTE2X3Vucm9sbDMyKGFkZHJ8d3MsSW5kZXhfV3JpdGViYWNrX0ludl9TRCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBibGFzdF9zY2FjaGUxNl9wYWdlKHVuc2lnbmVkIGxvbmcgcGFnZSkKK3sKKwl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gcGFnZTsKKwl1bnNpZ25lZCBsb25nIGVuZCA9IHBhZ2UgKyBQQUdFX1NJWkU7CisKKwlkbyB7CisJCWNhY2hlMTZfdW5yb2xsMzIoc3RhcnQsSGl0X1dyaXRlYmFja19JbnZfU0QpOworCQlzdGFydCArPSAweDIwMDsKKwl9IHdoaWxlIChzdGFydCA8IGVuZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBibGFzdF9zY2FjaGUxNl9wYWdlX2luZGV4ZWQodW5zaWduZWQgbG9uZyBwYWdlKQoreworCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBwYWdlOworCXVuc2lnbmVkIGxvbmcgZW5kID0gc3RhcnQgKyBQQUdFX1NJWkU7CisJdW5zaWduZWQgbG9uZyB3c19pbmMgPSAxVUwgPDwgY3VycmVudF9jcHVfZGF0YS5zY2FjaGUud2F5Yml0OworCXVuc2lnbmVkIGxvbmcgd3NfZW5kID0gY3VycmVudF9jcHVfZGF0YS5zY2FjaGUud2F5cyA8PAorCSAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudF9jcHVfZGF0YS5zY2FjaGUud2F5Yml0OworCXVuc2lnbmVkIGxvbmcgd3MsIGFkZHI7CisKKwlmb3IgKHdzID0gMDsgd3MgPCB3c19lbmQ7IHdzICs9IHdzX2luYykgCisJCWZvciAoYWRkciA9IHN0YXJ0OyBhZGRyIDwgZW5kOyBhZGRyICs9IDB4MjAwKSAKKwkJCWNhY2hlMTZfdW5yb2xsMzIoYWRkcnx3cyxJbmRleF9Xcml0ZWJhY2tfSW52X1NEKTsKK30KKworI2RlZmluZSBjYWNoZTMyX3Vucm9sbDMyKGJhc2Usb3ApCQkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAorCSIJLnNldCBub3Jlb3JkZXIJCQkJCVxuIglcCisJIgkuc2V0IG1pcHMzCQkJCQlcbiIJXAorCSIJY2FjaGUgJTEsIDB4MDAwKCUwKTsgY2FjaGUgJTEsIDB4MDIwKCUwKQlcbiIJXAorCSIJY2FjaGUgJTEsIDB4MDQwKCUwKTsgY2FjaGUgJTEsIDB4MDYwKCUwKQlcbiIJXAorCSIJY2FjaGUgJTEsIDB4MDgwKCUwKTsgY2FjaGUgJTEsIDB4MGEwKCUwKQlcbiIJXAorCSIJY2FjaGUgJTEsIDB4MGMwKCUwKTsgY2FjaGUgJTEsIDB4MGUwKCUwKQlcbiIJXAorCSIJY2FjaGUgJTEsIDB4MTAwKCUwKTsgY2FjaGUgJTEsIDB4MTIwKCUwKQlcbiIJXAorCSIJY2FjaGUgJTEsIDB4MTQwKCUwKTsgY2FjaGUgJTEsIDB4MTYwKCUwKQlcbiIJXAorCSIJY2FjaGUgJTEsIDB4MTgwKCUwKTsgY2FjaGUgJTEsIDB4MWEwKCUwKQlcbiIJXAorCSIJY2FjaGUgJTEsIDB4MWMwKCUwKTsgY2FjaGUgJTEsIDB4MWUwKCUwKQlcbiIJXAorCSIJY2FjaGUgJTEsIDB4MjAwKCUwKTsgY2FjaGUgJTEsIDB4MjIwKCUwKQlcbiIJXAorCSIJY2FjaGUgJTEsIDB4MjQwKCUwKTsgY2FjaGUgJTEsIDB4MjYwKCUwKQlcbiIJXAorCSIJY2FjaGUgJTEsIDB4MjgwKCUwKTsgY2FjaGUgJTEsIDB4MmEwKCUwKQlcbiIJXAorCSIJY2FjaGUgJTEsIDB4MmMwKCUwKTsgY2FjaGUgJTEsIDB4MmUwKCUwKQlcbiIJXAorCSIJY2FjaGUgJTEsIDB4MzAwKCUwKTsgY2FjaGUgJTEsIDB4MzIwKCUwKQlcbiIJXAorCSIJY2FjaGUgJTEsIDB4MzQwKCUwKTsgY2FjaGUgJTEsIDB4MzYwKCUwKQlcbiIJXAorCSIJY2FjaGUgJTEsIDB4MzgwKCUwKTsgY2FjaGUgJTEsIDB4M2EwKCUwKQlcbiIJXAorCSIJY2FjaGUgJTEsIDB4M2MwKCUwKTsgY2FjaGUgJTEsIDB4M2UwKCUwKQlcbiIJXAorCSIJLnNldCBtaXBzMAkJCQkJXG4iCVwKKwkiCS5zZXQgcmVvcmRlcgkJCQkJXG4iCVwKKwkJOgkJCQkJCQlcCisJCTogInIiIChiYXNlKSwJCQkJCQlcCisJCSAgImkiIChvcCkpOworCitzdGF0aWMgaW5saW5lIHZvaWQgYmxhc3RfZGNhY2hlMzIodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gSU5ERVhfQkFTRTsKKwl1bnNpZ25lZCBsb25nIGVuZCA9IHN0YXJ0ICsgY3VycmVudF9jcHVfZGF0YS5kY2FjaGUud2F5c2l6ZTsKKwl1bnNpZ25lZCBsb25nIHdzX2luYyA9IDFVTCA8PCBjdXJyZW50X2NwdV9kYXRhLmRjYWNoZS53YXliaXQ7CisJdW5zaWduZWQgbG9uZyB3c19lbmQgPSBjdXJyZW50X2NwdV9kYXRhLmRjYWNoZS53YXlzIDw8CisJICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50X2NwdV9kYXRhLmRjYWNoZS53YXliaXQ7CisJdW5zaWduZWQgbG9uZyB3cywgYWRkcjsKKworCWZvciAod3MgPSAwOyB3cyA8IHdzX2VuZDsgd3MgKz0gd3NfaW5jKSAKKwkJZm9yIChhZGRyID0gc3RhcnQ7IGFkZHIgPCBlbmQ7IGFkZHIgKz0gMHg0MDApIAorCQkJY2FjaGUzMl91bnJvbGwzMihhZGRyfHdzLEluZGV4X1dyaXRlYmFja19JbnZfRCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBibGFzdF9kY2FjaGUzMl9wYWdlKHVuc2lnbmVkIGxvbmcgcGFnZSkKK3sKKwl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gcGFnZTsKKwl1bnNpZ25lZCBsb25nIGVuZCA9IHN0YXJ0ICsgUEFHRV9TSVpFOworCisJZG8geworCQljYWNoZTMyX3Vucm9sbDMyKHN0YXJ0LEhpdF9Xcml0ZWJhY2tfSW52X0QpOworCQlzdGFydCArPSAweDQwMDsKKwl9IHdoaWxlIChzdGFydCA8IGVuZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBibGFzdF9kY2FjaGUzMl9wYWdlX2luZGV4ZWQodW5zaWduZWQgbG9uZyBwYWdlKQoreworCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBwYWdlOworCXVuc2lnbmVkIGxvbmcgZW5kID0gc3RhcnQgKyBQQUdFX1NJWkU7CisJdW5zaWduZWQgbG9uZyB3c19pbmMgPSAxVUwgPDwgY3VycmVudF9jcHVfZGF0YS5kY2FjaGUud2F5Yml0OworCXVuc2lnbmVkIGxvbmcgd3NfZW5kID0gY3VycmVudF9jcHVfZGF0YS5kY2FjaGUud2F5cyA8PAorCSAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudF9jcHVfZGF0YS5kY2FjaGUud2F5Yml0OworCXVuc2lnbmVkIGxvbmcgd3MsIGFkZHI7CisKKwlmb3IgKHdzID0gMDsgd3MgPCB3c19lbmQ7IHdzICs9IHdzX2luYykgCisJCWZvciAoYWRkciA9IHN0YXJ0OyBhZGRyIDwgZW5kOyBhZGRyICs9IDB4NDAwKSAKKwkJCWNhY2hlMzJfdW5yb2xsMzIoYWRkcnx3cyxJbmRleF9Xcml0ZWJhY2tfSW52X0QpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYmxhc3RfaWNhY2hlMzIodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gSU5ERVhfQkFTRTsKKwl1bnNpZ25lZCBsb25nIGVuZCA9IHN0YXJ0ICsgY3VycmVudF9jcHVfZGF0YS5pY2FjaGUud2F5c2l6ZTsKKwl1bnNpZ25lZCBsb25nIHdzX2luYyA9IDFVTCA8PCBjdXJyZW50X2NwdV9kYXRhLmljYWNoZS53YXliaXQ7CisJdW5zaWduZWQgbG9uZyB3c19lbmQgPSBjdXJyZW50X2NwdV9kYXRhLmljYWNoZS53YXlzIDw8CisJICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50X2NwdV9kYXRhLmljYWNoZS53YXliaXQ7CisJdW5zaWduZWQgbG9uZyB3cywgYWRkcjsKKworCWZvciAod3MgPSAwOyB3cyA8IHdzX2VuZDsgd3MgKz0gd3NfaW5jKSAKKwkJZm9yIChhZGRyID0gc3RhcnQ7IGFkZHIgPCBlbmQ7IGFkZHIgKz0gMHg0MDApIAorCQkJY2FjaGUzMl91bnJvbGwzMihhZGRyfHdzLEluZGV4X0ludmFsaWRhdGVfSSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBibGFzdF9pY2FjaGUzMl9wYWdlKHVuc2lnbmVkIGxvbmcgcGFnZSkKK3sKKwl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gcGFnZTsKKwl1bnNpZ25lZCBsb25nIGVuZCA9IHN0YXJ0ICsgUEFHRV9TSVpFOworCisJZG8geworCQljYWNoZTMyX3Vucm9sbDMyKHN0YXJ0LEhpdF9JbnZhbGlkYXRlX0kpOworCQlzdGFydCArPSAweDQwMDsKKwl9IHdoaWxlIChzdGFydCA8IGVuZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBibGFzdF9pY2FjaGUzMl9wYWdlX2luZGV4ZWQodW5zaWduZWQgbG9uZyBwYWdlKQoreworCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBwYWdlOworCXVuc2lnbmVkIGxvbmcgZW5kID0gc3RhcnQgKyBQQUdFX1NJWkU7CisJdW5zaWduZWQgbG9uZyB3c19pbmMgPSAxVUwgPDwgY3VycmVudF9jcHVfZGF0YS5pY2FjaGUud2F5Yml0OworCXVuc2lnbmVkIGxvbmcgd3NfZW5kID0gY3VycmVudF9jcHVfZGF0YS5pY2FjaGUud2F5cyA8PAorCSAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudF9jcHVfZGF0YS5pY2FjaGUud2F5Yml0OworCXVuc2lnbmVkIGxvbmcgd3MsIGFkZHI7CisKKwlmb3IgKHdzID0gMDsgd3MgPCB3c19lbmQ7IHdzICs9IHdzX2luYykKKwkJZm9yIChhZGRyID0gc3RhcnQ7IGFkZHIgPCBlbmQ7IGFkZHIgKz0gMHg0MDApIAorCQkJY2FjaGUzMl91bnJvbGwzMihhZGRyfHdzLEluZGV4X0ludmFsaWRhdGVfSSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBibGFzdF9zY2FjaGUzMih2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBJTkRFWF9CQVNFOworCXVuc2lnbmVkIGxvbmcgZW5kID0gc3RhcnQgKyBjdXJyZW50X2NwdV9kYXRhLnNjYWNoZS53YXlzaXplOworCXVuc2lnbmVkIGxvbmcgd3NfaW5jID0gMVVMIDw8IGN1cnJlbnRfY3B1X2RhdGEuc2NhY2hlLndheWJpdDsKKwl1bnNpZ25lZCBsb25nIHdzX2VuZCA9IGN1cnJlbnRfY3B1X2RhdGEuc2NhY2hlLndheXMgPDwgCisJICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50X2NwdV9kYXRhLnNjYWNoZS53YXliaXQ7CisJdW5zaWduZWQgbG9uZyB3cywgYWRkcjsKKworCWZvciAod3MgPSAwOyB3cyA8IHdzX2VuZDsgd3MgKz0gd3NfaW5jKSAKKwkJZm9yIChhZGRyID0gc3RhcnQ7IGFkZHIgPCBlbmQ7IGFkZHIgKz0gMHg0MDApCisJCQljYWNoZTMyX3Vucm9sbDMyKGFkZHJ8d3MsSW5kZXhfV3JpdGViYWNrX0ludl9TRCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBibGFzdF9zY2FjaGUzMl9wYWdlKHVuc2lnbmVkIGxvbmcgcGFnZSkKK3sKKwl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gcGFnZTsKKwl1bnNpZ25lZCBsb25nIGVuZCA9IHBhZ2UgKyBQQUdFX1NJWkU7CisKKwlkbyB7CisJCWNhY2hlMzJfdW5yb2xsMzIoc3RhcnQsSGl0X1dyaXRlYmFja19JbnZfU0QpOworCQlzdGFydCArPSAweDQwMDsKKwl9IHdoaWxlIChzdGFydCA8IGVuZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBibGFzdF9zY2FjaGUzMl9wYWdlX2luZGV4ZWQodW5zaWduZWQgbG9uZyBwYWdlKQoreworCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBwYWdlOworCXVuc2lnbmVkIGxvbmcgZW5kID0gc3RhcnQgKyBQQUdFX1NJWkU7CisJdW5zaWduZWQgbG9uZyB3c19pbmMgPSAxVUwgPDwgY3VycmVudF9jcHVfZGF0YS5zY2FjaGUud2F5Yml0OworCXVuc2lnbmVkIGxvbmcgd3NfZW5kID0gY3VycmVudF9jcHVfZGF0YS5zY2FjaGUud2F5cyA8PAorCSAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudF9jcHVfZGF0YS5zY2FjaGUud2F5Yml0OworCXVuc2lnbmVkIGxvbmcgd3MsIGFkZHI7CisKKwlmb3IgKHdzID0gMDsgd3MgPCB3c19lbmQ7IHdzICs9IHdzX2luYykgCisJCWZvciAoYWRkciA9IHN0YXJ0OyBhZGRyIDwgZW5kOyBhZGRyICs9IDB4NDAwKSAKKwkJCWNhY2hlMzJfdW5yb2xsMzIoYWRkcnx3cyxJbmRleF9Xcml0ZWJhY2tfSW52X1NEKTsKK30KKworI2RlZmluZSBjYWNoZTY0X3Vucm9sbDMyKGJhc2Usb3ApCQkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAorCSIJLnNldCBub3Jlb3JkZXIJCQkJCVxuIglcCisJIgkuc2V0IG1pcHMzCQkJCQlcbiIJXAorCSIJY2FjaGUgJTEsIDB4MDAwKCUwKTsgY2FjaGUgJTEsIDB4MDQwKCUwKQlcbiIJXAorCSIJY2FjaGUgJTEsIDB4MDgwKCUwKTsgY2FjaGUgJTEsIDB4MGMwKCUwKQlcbiIJXAorCSIJY2FjaGUgJTEsIDB4MTAwKCUwKTsgY2FjaGUgJTEsIDB4MTQwKCUwKQlcbiIJXAorCSIJY2FjaGUgJTEsIDB4MTgwKCUwKTsgY2FjaGUgJTEsIDB4MWMwKCUwKQlcbiIJXAorCSIJY2FjaGUgJTEsIDB4MjAwKCUwKTsgY2FjaGUgJTEsIDB4MjQwKCUwKQlcbiIJXAorCSIJY2FjaGUgJTEsIDB4MjgwKCUwKTsgY2FjaGUgJTEsIDB4MmMwKCUwKQlcbiIJXAorCSIJY2FjaGUgJTEsIDB4MzAwKCUwKTsgY2FjaGUgJTEsIDB4MzQwKCUwKQlcbiIJXAorCSIJY2FjaGUgJTEsIDB4MzgwKCUwKTsgY2FjaGUgJTEsIDB4M2MwKCUwKQlcbiIJXAorCSIJY2FjaGUgJTEsIDB4NDAwKCUwKTsgY2FjaGUgJTEsIDB4NDQwKCUwKQlcbiIJXAorCSIJY2FjaGUgJTEsIDB4NDgwKCUwKTsgY2FjaGUgJTEsIDB4NGMwKCUwKQlcbiIJXAorCSIJY2FjaGUgJTEsIDB4NTAwKCUwKTsgY2FjaGUgJTEsIDB4NTQwKCUwKQlcbiIJXAorCSIJY2FjaGUgJTEsIDB4NTgwKCUwKTsgY2FjaGUgJTEsIDB4NWMwKCUwKQlcbiIJXAorCSIJY2FjaGUgJTEsIDB4NjAwKCUwKTsgY2FjaGUgJTEsIDB4NjQwKCUwKQlcbiIJXAorCSIJY2FjaGUgJTEsIDB4NjgwKCUwKTsgY2FjaGUgJTEsIDB4NmMwKCUwKQlcbiIJXAorCSIJY2FjaGUgJTEsIDB4NzAwKCUwKTsgY2FjaGUgJTEsIDB4NzQwKCUwKQlcbiIJXAorCSIJY2FjaGUgJTEsIDB4NzgwKCUwKTsgY2FjaGUgJTEsIDB4N2MwKCUwKQlcbiIJXAorCSIJLnNldCBtaXBzMAkJCQkJXG4iCVwKKwkiCS5zZXQgcmVvcmRlcgkJCQkJXG4iCVwKKwkJOgkJCQkJCQlcCisJCTogInIiIChiYXNlKSwJCQkJCQlcCisJCSAgImkiIChvcCkpOworCitzdGF0aWMgaW5saW5lIHZvaWQgYmxhc3RfaWNhY2hlNjQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gSU5ERVhfQkFTRTsKKwl1bnNpZ25lZCBsb25nIGVuZCA9IHN0YXJ0ICsgY3VycmVudF9jcHVfZGF0YS5pY2FjaGUud2F5c2l6ZTsKKwl1bnNpZ25lZCBsb25nIHdzX2luYyA9IDFVTCA8PCBjdXJyZW50X2NwdV9kYXRhLmljYWNoZS53YXliaXQ7CisJdW5zaWduZWQgbG9uZyB3c19lbmQgPSBjdXJyZW50X2NwdV9kYXRhLmljYWNoZS53YXlzIDw8CisJICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50X2NwdV9kYXRhLmljYWNoZS53YXliaXQ7CisJdW5zaWduZWQgbG9uZyB3cywgYWRkcjsKKworCWZvciAod3MgPSAwOyB3cyA8IHdzX2VuZDsgd3MgKz0gd3NfaW5jKSAKKwkJZm9yIChhZGRyID0gc3RhcnQ7IGFkZHIgPCBlbmQ7IGFkZHIgKz0gMHg4MDApIAorCQkJY2FjaGU2NF91bnJvbGwzMihhZGRyfHdzLEluZGV4X0ludmFsaWRhdGVfSSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBibGFzdF9pY2FjaGU2NF9wYWdlKHVuc2lnbmVkIGxvbmcgcGFnZSkKK3sKKwl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gcGFnZTsKKwl1bnNpZ25lZCBsb25nIGVuZCA9IHN0YXJ0ICsgUEFHRV9TSVpFOworCisJZG8geworCQljYWNoZTY0X3Vucm9sbDMyKHN0YXJ0LEhpdF9JbnZhbGlkYXRlX0kpOworCQlzdGFydCArPSAweDgwMDsKKwl9IHdoaWxlIChzdGFydCA8IGVuZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBibGFzdF9pY2FjaGU2NF9wYWdlX2luZGV4ZWQodW5zaWduZWQgbG9uZyBwYWdlKQoreworCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBwYWdlOworCXVuc2lnbmVkIGxvbmcgZW5kID0gc3RhcnQgKyBQQUdFX1NJWkU7CisJdW5zaWduZWQgbG9uZyB3c19pbmMgPSAxVUwgPDwgY3VycmVudF9jcHVfZGF0YS5pY2FjaGUud2F5Yml0OworCXVuc2lnbmVkIGxvbmcgd3NfZW5kID0gY3VycmVudF9jcHVfZGF0YS5pY2FjaGUud2F5cyA8PAorCSAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudF9jcHVfZGF0YS5pY2FjaGUud2F5Yml0OworCXVuc2lnbmVkIGxvbmcgd3MsIGFkZHI7CisKKwlmb3IgKHdzID0gMDsgd3MgPCB3c19lbmQ7IHdzICs9IHdzX2luYykKKwkJZm9yIChhZGRyID0gc3RhcnQ7IGFkZHIgPCBlbmQ7IGFkZHIgKz0gMHg4MDApIAorCQkJY2FjaGU2NF91bnJvbGwzMihhZGRyfHdzLEluZGV4X0ludmFsaWRhdGVfSSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBibGFzdF9zY2FjaGU2NCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBJTkRFWF9CQVNFOworCXVuc2lnbmVkIGxvbmcgZW5kID0gc3RhcnQgKyBjdXJyZW50X2NwdV9kYXRhLnNjYWNoZS53YXlzaXplOworCXVuc2lnbmVkIGxvbmcgd3NfaW5jID0gMVVMIDw8IGN1cnJlbnRfY3B1X2RhdGEuc2NhY2hlLndheWJpdDsKKwl1bnNpZ25lZCBsb25nIHdzX2VuZCA9IGN1cnJlbnRfY3B1X2RhdGEuc2NhY2hlLndheXMgPDwgCisJICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50X2NwdV9kYXRhLnNjYWNoZS53YXliaXQ7CisJdW5zaWduZWQgbG9uZyB3cywgYWRkcjsKKworCWZvciAod3MgPSAwOyB3cyA8IHdzX2VuZDsgd3MgKz0gd3NfaW5jKSAKKwkJZm9yIChhZGRyID0gc3RhcnQ7IGFkZHIgPCBlbmQ7IGFkZHIgKz0gMHg4MDApCisJCQljYWNoZTY0X3Vucm9sbDMyKGFkZHJ8d3MsSW5kZXhfV3JpdGViYWNrX0ludl9TRCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBibGFzdF9zY2FjaGU2NF9wYWdlKHVuc2lnbmVkIGxvbmcgcGFnZSkKK3sKKwl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gcGFnZTsKKwl1bnNpZ25lZCBsb25nIGVuZCA9IHBhZ2UgKyBQQUdFX1NJWkU7CisKKwlkbyB7CisJCWNhY2hlNjRfdW5yb2xsMzIoc3RhcnQsSGl0X1dyaXRlYmFja19JbnZfU0QpOworCQlzdGFydCArPSAweDgwMDsKKwl9IHdoaWxlIChzdGFydCA8IGVuZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBibGFzdF9zY2FjaGU2NF9wYWdlX2luZGV4ZWQodW5zaWduZWQgbG9uZyBwYWdlKQoreworCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBwYWdlOworCXVuc2lnbmVkIGxvbmcgZW5kID0gc3RhcnQgKyBQQUdFX1NJWkU7CisJdW5zaWduZWQgbG9uZyB3c19pbmMgPSAxVUwgPDwgY3VycmVudF9jcHVfZGF0YS5zY2FjaGUud2F5Yml0OworCXVuc2lnbmVkIGxvbmcgd3NfZW5kID0gY3VycmVudF9jcHVfZGF0YS5zY2FjaGUud2F5cyA8PAorCSAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudF9jcHVfZGF0YS5zY2FjaGUud2F5Yml0OworCXVuc2lnbmVkIGxvbmcgd3MsIGFkZHI7CisKKwlmb3IgKHdzID0gMDsgd3MgPCB3c19lbmQ7IHdzICs9IHdzX2luYykgCisJCWZvciAoYWRkciA9IHN0YXJ0OyBhZGRyIDwgZW5kOyBhZGRyICs9IDB4ODAwKSAKKwkJCWNhY2hlNjRfdW5yb2xsMzIoYWRkcnx3cyxJbmRleF9Xcml0ZWJhY2tfSW52X1NEKTsKK30KKworI2RlZmluZSBjYWNoZTEyOF91bnJvbGwzMihiYXNlLG9wKQkJCQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCVwKKwkiCS5zZXQgbm9yZW9yZGVyCQkJCQlcbiIJXAorCSIJLnNldCBtaXBzMwkJCQkJXG4iCVwKKwkiCWNhY2hlICUxLCAweDAwMCglMCk7IGNhY2hlICUxLCAweDA4MCglMCkJXG4iCVwKKwkiCWNhY2hlICUxLCAweDEwMCglMCk7IGNhY2hlICUxLCAweDE4MCglMCkJXG4iCVwKKwkiCWNhY2hlICUxLCAweDIwMCglMCk7IGNhY2hlICUxLCAweDI4MCglMCkJXG4iCVwKKwkiCWNhY2hlICUxLCAweDMwMCglMCk7IGNhY2hlICUxLCAweDM4MCglMCkJXG4iCVwKKwkiCWNhY2hlICUxLCAweDQwMCglMCk7IGNhY2hlICUxLCAweDQ4MCglMCkJXG4iCVwKKwkiCWNhY2hlICUxLCAweDUwMCglMCk7IGNhY2hlICUxLCAweDU4MCglMCkJXG4iCVwKKwkiCWNhY2hlICUxLCAweDYwMCglMCk7IGNhY2hlICUxLCAweDY4MCglMCkJXG4iCVwKKwkiCWNhY2hlICUxLCAweDcwMCglMCk7IGNhY2hlICUxLCAweDc4MCglMCkJXG4iCVwKKwkiCWNhY2hlICUxLCAweDgwMCglMCk7IGNhY2hlICUxLCAweDg4MCglMCkJXG4iCVwKKwkiCWNhY2hlICUxLCAweDkwMCglMCk7IGNhY2hlICUxLCAweDk4MCglMCkJXG4iCVwKKwkiCWNhY2hlICUxLCAweGEwMCglMCk7IGNhY2hlICUxLCAweGE4MCglMCkJXG4iCVwKKwkiCWNhY2hlICUxLCAweGIwMCglMCk7IGNhY2hlICUxLCAweGI4MCglMCkJXG4iCVwKKwkiCWNhY2hlICUxLCAweGMwMCglMCk7IGNhY2hlICUxLCAweGM4MCglMCkJXG4iCVwKKwkiCWNhY2hlICUxLCAweGQwMCglMCk7IGNhY2hlICUxLCAweGQ4MCglMCkJXG4iCVwKKwkiCWNhY2hlICUxLCAweGUwMCglMCk7IGNhY2hlICUxLCAweGU4MCglMCkJXG4iCVwKKwkiCWNhY2hlICUxLCAweGYwMCglMCk7IGNhY2hlICUxLCAweGY4MCglMCkJXG4iCVwKKwkiCS5zZXQgbWlwczAJCQkJCVxuIglcCisJIgkuc2V0IHJlb3JkZXIJCQkJCVxuIglcCisJCToJCQkJCQkJXAorCQk6ICJyIiAoYmFzZSksCQkJCQkJXAorCQkgICJpIiAob3ApKTsKKworc3RhdGljIGlubGluZSB2b2lkIGJsYXN0X3NjYWNoZTEyOCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBJTkRFWF9CQVNFOworCXVuc2lnbmVkIGxvbmcgZW5kID0gc3RhcnQgKyBjdXJyZW50X2NwdV9kYXRhLnNjYWNoZS53YXlzaXplOworCXVuc2lnbmVkIGxvbmcgd3NfaW5jID0gMVVMIDw8IGN1cnJlbnRfY3B1X2RhdGEuc2NhY2hlLndheWJpdDsKKwl1bnNpZ25lZCBsb25nIHdzX2VuZCA9IGN1cnJlbnRfY3B1X2RhdGEuc2NhY2hlLndheXMgPDwgCisJICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50X2NwdV9kYXRhLnNjYWNoZS53YXliaXQ7CisJdW5zaWduZWQgbG9uZyB3cywgYWRkcjsKKworCWZvciAod3MgPSAwOyB3cyA8IHdzX2VuZDsgd3MgKz0gd3NfaW5jKSAKKwkJZm9yIChhZGRyID0gc3RhcnQ7IGFkZHIgPCBlbmQ7IGFkZHIgKz0gMHgxMDAwKQorCQkJY2FjaGUxMjhfdW5yb2xsMzIoYWRkcnx3cyxJbmRleF9Xcml0ZWJhY2tfSW52X1NEKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGJsYXN0X3NjYWNoZTEyOF9wYWdlKHVuc2lnbmVkIGxvbmcgcGFnZSkKK3sKKwl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gcGFnZTsKKwl1bnNpZ25lZCBsb25nIGVuZCA9IHBhZ2UgKyBQQUdFX1NJWkU7CisKKwlkbyB7CisJCWNhY2hlMTI4X3Vucm9sbDMyKHN0YXJ0LEhpdF9Xcml0ZWJhY2tfSW52X1NEKTsKKwkJc3RhcnQgKz0gMHgxMDAwOworCX0gd2hpbGUgKHN0YXJ0IDwgZW5kKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGJsYXN0X3NjYWNoZTEyOF9wYWdlX2luZGV4ZWQodW5zaWduZWQgbG9uZyBwYWdlKQoreworCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBwYWdlOworCXVuc2lnbmVkIGxvbmcgZW5kID0gc3RhcnQgKyBQQUdFX1NJWkU7CisJdW5zaWduZWQgbG9uZyB3c19pbmMgPSAxVUwgPDwgY3VycmVudF9jcHVfZGF0YS5zY2FjaGUud2F5Yml0OworCXVuc2lnbmVkIGxvbmcgd3NfZW5kID0gY3VycmVudF9jcHVfZGF0YS5zY2FjaGUud2F5cyA8PAorCSAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudF9jcHVfZGF0YS5zY2FjaGUud2F5Yml0OworCXVuc2lnbmVkIGxvbmcgd3MsIGFkZHI7CisKKwlmb3IgKHdzID0gMDsgd3MgPCB3c19lbmQ7IHdzICs9IHdzX2luYykgCisJCWZvciAoYWRkciA9IHN0YXJ0OyBhZGRyIDwgZW5kOyBhZGRyICs9IDB4MTAwMCkgCisJCQljYWNoZTEyOF91bnJvbGwzMihhZGRyfHdzLEluZGV4X1dyaXRlYmFja19JbnZfU0QpOworfQorCisjZW5kaWYgLyogX0FTTV9SNEtDQUNIRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3JlYm9vdC5oIGIvaW5jbHVkZS9hc20tbWlwcy9yZWJvb3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjEwZWJjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9yZWJvb3QuaApAQCAtMCwwICsxLDE2IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk3LCAxOTk5LCAyMDAxIGJ5IFJhbGYgQmFlY2hsZQorICogQ29weXJpZ2h0IChDKSAyMDAxIE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuCisgKi8KKyNpZm5kZWYgX0FTTV9SRUJPT1RfSAorI2RlZmluZSBfQVNNX1JFQk9PVF9ICisKK2V4dGVybiB2b2lkICgqX21hY2hpbmVfcmVzdGFydCkoY2hhciAqY29tbWFuZCk7CitleHRlcm4gdm9pZCAoKl9tYWNoaW5lX2hhbHQpKHZvaWQpOworZXh0ZXJuIHZvaWQgKCpfbWFjaGluZV9wb3dlcl9vZmYpKHZvaWQpOworCisjZW5kaWYgLyogX0FTTV9SRUJPT1RfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9yZWcuaCBiL2luY2x1ZGUvYXNtLW1pcHMvcmVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IzM2JiYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvcmVnLmgKQEAgLTAsMCArMSwxMjkgQEAKKy8qCisgKiBWYXJpb3VzIHJlZ2lzdGVyIG9mZnNldCBkZWZpbml0aW9ucyBmb3IgZGVidWdnZXJzLCBjb3JlIGZpbGUKKyAqIGV4YW1pbmVycyBhbmQgd2hhdG5vdC4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTkgUmFsZiBCYWVjaGxlCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTkgU2lsaWNvbiBHcmFwaGljcworICovCisjaWZuZGVmIF9fQVNNX01JUFNfUkVHX0gKKyNkZWZpbmUgX19BU01fTUlQU19SRUdfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpZiBkZWZpbmVkKENPTkZJR19NSVBTMzIpIHx8IGRlZmluZWQoV0FOVF9DT01QQVRfUkVHX0gpCisKKyNkZWZpbmUgRUZfUjAJCQk2CisjZGVmaW5lIEVGX1IxCQkJNworI2RlZmluZSBFRl9SMgkJCTgKKyNkZWZpbmUgRUZfUjMJCQk5CisjZGVmaW5lIEVGX1I0CQkJMTAKKyNkZWZpbmUgRUZfUjUJCQkxMQorI2RlZmluZSBFRl9SNgkJCTEyCisjZGVmaW5lIEVGX1I3CQkJMTMKKyNkZWZpbmUgRUZfUjgJCQkxNAorI2RlZmluZSBFRl9SOQkJCTE1CisjZGVmaW5lIEVGX1IxMAkJCTE2CisjZGVmaW5lIEVGX1IxMQkJCTE3CisjZGVmaW5lIEVGX1IxMgkJCTE4CisjZGVmaW5lIEVGX1IxMwkJCTE5CisjZGVmaW5lIEVGX1IxNAkJCTIwCisjZGVmaW5lIEVGX1IxNQkJCTIxCisjZGVmaW5lIEVGX1IxNgkJCTIyCisjZGVmaW5lIEVGX1IxNwkJCTIzCisjZGVmaW5lIEVGX1IxOAkJCTI0CisjZGVmaW5lIEVGX1IxOQkJCTI1CisjZGVmaW5lIEVGX1IyMAkJCTI2CisjZGVmaW5lIEVGX1IyMQkJCTI3CisjZGVmaW5lIEVGX1IyMgkJCTI4CisjZGVmaW5lIEVGX1IyMwkJCTI5CisjZGVmaW5lIEVGX1IyNAkJCTMwCisjZGVmaW5lIEVGX1IyNQkJCTMxCisKKy8qCisgKiBrMC9rMSB1bnNhdmVkCisgKi8KKyNkZWZpbmUgRUZfUjI2CQkJMzIKKyNkZWZpbmUgRUZfUjI3CQkJMzMKKworI2RlZmluZSBFRl9SMjgJCQkzNAorI2RlZmluZSBFRl9SMjkJCQkzNQorI2RlZmluZSBFRl9SMzAJCQkzNgorI2RlZmluZSBFRl9SMzEJCQkzNworCisvKgorICogU2F2ZWQgc3BlY2lhbCByZWdpc3RlcnMKKyAqLworI2RlZmluZSBFRl9MTwkJCTM4CisjZGVmaW5lIEVGX0hJCQkJMzkKKworI2RlZmluZSBFRl9DUDBfRVBDCQk0MAorI2RlZmluZSBFRl9DUDBfQkFEVkFERFIJCTQxCisjZGVmaW5lIEVGX0NQMF9TVEFUVVMJCTQyCisjZGVmaW5lIEVGX0NQMF9DQVVTRQkJNDMKKyNkZWZpbmUgRUZfVU5VU0VEMAkJNDQKKworI2RlZmluZSBFRl9TSVpFCQkJMTgwCisKKyNlbmRpZgorCisjaWYgQ09ORklHX01JUFM2NAorCisjZGVmaW5lIEVGX1IwCQkJIDAKKyNkZWZpbmUgRUZfUjEJCQkgMQorI2RlZmluZSBFRl9SMgkJCSAyCisjZGVmaW5lIEVGX1IzCQkJIDMKKyNkZWZpbmUgRUZfUjQJCQkgNAorI2RlZmluZSBFRl9SNQkJCSA1CisjZGVmaW5lIEVGX1I2CQkJIDYKKyNkZWZpbmUgRUZfUjcJCQkgNworI2RlZmluZSBFRl9SOAkJCSA4CisjZGVmaW5lIEVGX1I5CQkJIDkKKyNkZWZpbmUgRUZfUjEwCQkJMTAKKyNkZWZpbmUgRUZfUjExCQkJMTEKKyNkZWZpbmUgRUZfUjEyCQkJMTIKKyNkZWZpbmUgRUZfUjEzCQkJMTMKKyNkZWZpbmUgRUZfUjE0CQkJMTQKKyNkZWZpbmUgRUZfUjE1CQkJMTUKKyNkZWZpbmUgRUZfUjE2CQkJMTYKKyNkZWZpbmUgRUZfUjE3CQkJMTcKKyNkZWZpbmUgRUZfUjE4CQkJMTgKKyNkZWZpbmUgRUZfUjE5CQkJMTkKKyNkZWZpbmUgRUZfUjIwCQkJMjAKKyNkZWZpbmUgRUZfUjIxCQkJMjEKKyNkZWZpbmUgRUZfUjIyCQkJMjIKKyNkZWZpbmUgRUZfUjIzCQkJMjMKKyNkZWZpbmUgRUZfUjI0CQkJMjQKKyNkZWZpbmUgRUZfUjI1CQkJMjUKKworLyoKKyAqIGswL2sxIHVuc2F2ZWQKKyAqLworI2RlZmluZSBFRl9SMjYJCQkyNgorI2RlZmluZSBFRl9SMjcJCQkyNworCisKKyNkZWZpbmUgRUZfUjI4CQkJMjgKKyNkZWZpbmUgRUZfUjI5CQkJMjkKKyNkZWZpbmUgRUZfUjMwCQkJMzAKKyNkZWZpbmUgRUZfUjMxCQkJMzEKKworLyoKKyAqIFNhdmVkIHNwZWNpYWwgcmVnaXN0ZXJzCisgKi8KKyNkZWZpbmUgRUZfTE8JCQkzMgorI2RlZmluZSBFRl9ISQkJCTMzCisKKyNkZWZpbmUgRUZfQ1AwX0VQQwkJMzQKKyNkZWZpbmUgRUZfQ1AwX0JBRFZBRERSCQkzNQorI2RlZmluZSBFRl9DUDBfU1RBVFVTCQkzNgorI2RlZmluZSBFRl9DUDBfQ0FVU0UJCTM3CisKKyNkZWZpbmUgRUZfU0laRQkJCTMwNAkvKiBzaXplIGluIGJ5dGVzICovCisKKyNlbmRpZiAvKiBDT05GSUdfTUlQUzY0ICovCisKKyNlbmRpZiAvKiBfX0FTTV9NSVBTX1JFR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3JlZ2RlZi5oIGIvaW5jbHVkZS9hc20tbWlwcy9yZWdkZWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzhlY2I2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9yZWdkZWYuaApAQCAtMCwwICsxLDEwMCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk4NSBNSVBTIENvbXB1dGVyIFN5c3RlbXMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMTk5NCwgOTUsIDk5LCAyMDAzIGJ5IFJhbGYgQmFlY2hsZQorICogQ29weXJpZ2h0IChDKSAxOTkwIC0gMTk5MiwgMTk5OSBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCisgKi8KKyNpZm5kZWYgX0FTTV9SRUdERUZfSAorI2RlZmluZSBfQVNNX1JFR0RFRl9ICisKKyNpbmNsdWRlIDxhc20vc2dpZGVmcy5oPgorCisjaWYgX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkkzMgorCisvKgorICogU3ltYm9saWMgcmVnaXN0ZXIgbmFtZXMgZm9yIDMyIGJpdCBBQkkKKyAqLworI2RlZmluZSB6ZXJvICAgICQwICAgICAgLyogd2lyZWQgemVybyAqLworI2RlZmluZSBBVCAgICAgICQxICAgICAgLyogYXNzZW1ibGVyIHRlbXAgIC0gdXBwZXJjYXNlIGJlY2F1c2Ugb2YgIi5zZXQgYXQiICovCisjZGVmaW5lIHYwICAgICAgJDIgICAgICAvKiByZXR1cm4gdmFsdWUgKi8KKyNkZWZpbmUgdjEgICAgICAkMworI2RlZmluZSBhMCAgICAgICQ0ICAgICAgLyogYXJndW1lbnQgcmVnaXN0ZXJzICovCisjZGVmaW5lIGExICAgICAgJDUKKyNkZWZpbmUgYTIgICAgICAkNgorI2RlZmluZSBhMyAgICAgICQ3CisjZGVmaW5lIHQwICAgICAgJDggICAgICAvKiBjYWxsZXIgc2F2ZWQgKi8KKyNkZWZpbmUgdDEgICAgICAkOQorI2RlZmluZSB0MiAgICAgICQxMAorI2RlZmluZSB0MyAgICAgICQxMQorI2RlZmluZSB0NCAgICAgICQxMgorI2RlZmluZSB0NSAgICAgICQxMworI2RlZmluZSB0NiAgICAgICQxNAorI2RlZmluZSB0NyAgICAgICQxNQorI2RlZmluZSBzMCAgICAgICQxNiAgICAgLyogY2FsbGVlIHNhdmVkICovCisjZGVmaW5lIHMxICAgICAgJDE3CisjZGVmaW5lIHMyICAgICAgJDE4CisjZGVmaW5lIHMzICAgICAgJDE5CisjZGVmaW5lIHM0ICAgICAgJDIwCisjZGVmaW5lIHM1ICAgICAgJDIxCisjZGVmaW5lIHM2ICAgICAgJDIyCisjZGVmaW5lIHM3ICAgICAgJDIzCisjZGVmaW5lIHQ4ICAgICAgJDI0ICAgICAvKiBjYWxsZXIgc2F2ZWQgKi8KKyNkZWZpbmUgdDkgICAgICAkMjUKKyNkZWZpbmUganAgICAgICAkMjUgICAgIC8qIFBJQyBqdW1wIHJlZ2lzdGVyICovCisjZGVmaW5lIGswICAgICAgJDI2ICAgICAvKiBrZXJuZWwgc2NyYXRjaCAqLworI2RlZmluZSBrMSAgICAgICQyNworI2RlZmluZSBncCAgICAgICQyOCAgICAgLyogZ2xvYmFsIHBvaW50ZXIgKi8KKyNkZWZpbmUgc3AgICAgICAkMjkgICAgIC8qIHN0YWNrIHBvaW50ZXIgKi8KKyNkZWZpbmUgZnAgICAgICAkMzAgICAgIC8qIGZyYW1lIHBvaW50ZXIgKi8KKyNkZWZpbmUgczgJJDMwCS8qIHNhbWUgbGlrZSBmcCEgKi8KKyNkZWZpbmUgcmEgICAgICAkMzEgICAgIC8qIHJldHVybiBhZGRyZXNzICovCisKKyNlbmRpZiAvKiBfTUlQU19TSU0gPT0gX01JUFNfU0lNX0FCSTMyICovCisKKyNpZiBfTUlQU19TSU0gPT0gX01JUFNfU0lNX0FCSTY0IHx8IF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fTkFCSTMyCisKKyNkZWZpbmUgemVybwkkMAkvKiB3aXJlZCB6ZXJvICovCisjZGVmaW5lIEFUCSRhdAkvKiBhc3NlbWJsZXIgdGVtcCAtIHVwcGVyY2FzZSBiZWNhdXNlIG9mICIuc2V0IGF0IiAqLworI2RlZmluZSB2MAkkMgkvKiByZXR1cm4gdmFsdWUgLSBjYWxsZXIgc2F2ZWQgKi8KKyNkZWZpbmUgdjEJJDMKKyNkZWZpbmUgYTAJJDQJLyogYXJndW1lbnQgcmVnaXN0ZXJzICovCisjZGVmaW5lIGExCSQ1CisjZGVmaW5lIGEyCSQ2CisjZGVmaW5lIGEzCSQ3CisjZGVmaW5lIGE0CSQ4CS8qIGFyZyByZWcgNjQgYml0OyBjYWxsZXIgc2F2ZWQgaW4gMzIgYml0ICovCisjZGVmaW5lIHRhMAkkOAorI2RlZmluZSBhNQkkOQorI2RlZmluZSB0YTEJJDkKKyNkZWZpbmUgYTYJJDEwCisjZGVmaW5lIHRhMgkkMTAKKyNkZWZpbmUgYTcJJDExCisjZGVmaW5lIHRhMwkkMTEKKyNkZWZpbmUgdDAJJDEyCS8qIGNhbGxlciBzYXZlZCAqLworI2RlZmluZSB0MQkkMTMKKyNkZWZpbmUgdDIJJDE0CisjZGVmaW5lIHQzCSQxNQorI2RlZmluZSBzMAkkMTYJLyogY2FsbGVlIHNhdmVkICovCisjZGVmaW5lIHMxCSQxNworI2RlZmluZSBzMgkkMTgKKyNkZWZpbmUgczMJJDE5CisjZGVmaW5lIHM0CSQyMAorI2RlZmluZSBzNQkkMjEKKyNkZWZpbmUgczYJJDIyCisjZGVmaW5lIHM3CSQyMworI2RlZmluZSB0OAkkMjQJLyogY2FsbGVyIHNhdmVkICovCisjZGVmaW5lIHQ5CSQyNQkvKiBjYWxsZWUgYWRkcmVzcyBmb3IgUElDL3RlbXAgKi8KKyNkZWZpbmUganAJJDI1CS8qIFBJQyBqdW1wIHJlZ2lzdGVyICovCisjZGVmaW5lIGswCSQyNgkvKiBrZXJuZWwgdGVtcG9yYXJ5ICovCisjZGVmaW5lIGsxCSQyNworI2RlZmluZSBncAkkMjgJLyogZ2xvYmFsIHBvaW50ZXIgLSBjYWxsZXIgc2F2ZWQgZm9yIFBJQyAqLworI2RlZmluZSBzcAkkMjkJLyogc3RhY2sgcG9pbnRlciAqLworI2RlZmluZSBmcAkkMzAJLyogZnJhbWUgcG9pbnRlciAqLworI2RlZmluZSBzOAkkMzAJLyogY2FsbGVlIHNhdmVkICovCisjZGVmaW5lIHJhCSQzMQkvKiByZXR1cm4gYWRkcmVzcyAqLworCisjZW5kaWYgLyogX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkk2NCB8fCBfTUlQU19TSU0gPT0gX01JUFNfU0lNX05BQkkzMiAqLworCisjZW5kaWYgLyogX0FTTV9SRUdERUZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9yZXNvdXJjZS5oIGIvaW5jbHVkZS9hc20tbWlwcy9yZXNvdXJjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkM2M2ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3Jlc291cmNlLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NSwgOTYsIDk4LCA5OSwgMjAwMCBieSBSYWxmIEJhZWNobGUKKyAqIENvcHlyaWdodCAoQykgMTk5OSBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCisgKi8KKyNpZm5kZWYgX0FTTV9SRVNPVVJDRV9ICisjZGVmaW5lIF9BU01fUkVTT1VSQ0VfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKy8qCisgKiBUaGVzZSBmaXZlIHJlc291cmNlIGxpbWl0IElEcyBoYXZlIGEgTUlQUy9MaW51eC1zcGVjaWZpYyBvcmRlcmluZywKKyAqIHRoZSByZXN0IGNvbWVzIGZyb20gdGhlIGdlbmVyaWMgaGVhZGVyOgorICovCisjZGVmaW5lIFJMSU1JVF9OT0ZJTEUJCTUJLyogbWF4IG51bWJlciBvZiBvcGVuIGZpbGVzICovCisjZGVmaW5lIFJMSU1JVF9BUwkJNgkvKiBhZGRyZXNzIHNwYWNlIGxpbWl0ICovCisjZGVmaW5lIFJMSU1JVF9SU1MJCTcJLyogbWF4IHJlc2lkZW50IHNldCBzaXplICovCisjZGVmaW5lIFJMSU1JVF9OUFJPQwkJOAkvKiBtYXggbnVtYmVyIG9mIHByb2Nlc3NlcyAqLworI2RlZmluZSBSTElNSVRfTUVNTE9DSwkJOQkvKiBtYXggbG9ja2VkLWluLW1lbW9yeSBhZGRyZXNzIHNwYWNlICovCisKKy8qCisgKiBTdVMgc2F5cyBsaW1pdHMgaGF2ZSB0byBiZSB1bnNpZ25lZC4KKyAqIFdoaWNoIG1ha2VzIGEgdG9uIG1vcmUgc2Vuc2UgYW55d2F5LAorICogYnV0IHdlIGtlZXAgdGhlIG9sZCB2YWx1ZSBvbiBNSVBTMzIsCisgKiBmb3IgY29tcGF0aWJpbGl0eToKKyAqLworI2lmZGVmIENPTkZJR19NSVBTMzIKKyMgZGVmaW5lIFJMSU1fSU5GSU5JVFkJCTB4N2ZmZmZmZmZVTAorI2VuZGlmCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9yZXNvdXJjZS5oPgorCisjZW5kaWYgLyogX0FTTV9SRVNPVVJDRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3Jpc2Nvcy1zeXNjYWxsLmggYi9pbmNsdWRlL2FzbS1taXBzL3Jpc2Nvcy1zeXNjYWxsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ4ZWIxNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvcmlzY29zLXN5c2NhbGwuaApAQCAtMCwwICsxLDk3OSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NSwgOTYsIDk3LCA5OCwgOTksIDIwMDAgYnkgUmFsZiBCYWVjaGxlCisgKi8KKyNpZm5kZWYgX0FTTV9SSVNDT1NfU1lTQ0FMTF9ICisjZGVmaW5lIF9BU01fUklTQ09TX1NZU0NBTExfSAorCisvKgorICogVGhlIHN5c2NhbGxzIDAgLSAzOTk5IGFyZSByZXNlcnZlZCBmb3IgYSBkb3duIHRvIHRoZSByb290IHN5c2NhbGwKKyAqIGNvbXBhdGliaWxpdHkgd2l0aCBSSVNDL29zIGFuZCBJUklYLiAgV2UnbGwgc2VlIGhvdyB0byBkZWFsIHdpdGggdGhlCisgKiB2YXJpb3VzICJyZWFsIiBCU0QgdmFyaWFudHMgbGlrZSBVbHRyaXgsIE5ldEJTRCAuLi4KKyAqLworCisvKgorICogU1ZSNCBzeXNjYWxscyBhcmUgaW4gdGhlIHJhbmdlIGZyb20gMSB0byA5OTkKKyAqLworI2RlZmluZSBfX05SX1NWUjQJCQkwCisjZGVmaW5lIF9fTlJfU1ZSNF9zeXNjYWxsCQkoX19OUl9TVlI0ICsgICAwKQorI2RlZmluZSBfX05SX1NWUjRfZXhpdAkJCShfX05SX1NWUjQgKyAgIDEpCisjZGVmaW5lIF9fTlJfU1ZSNF9mb3JrCQkJKF9fTlJfU1ZSNCArICAgMikKKyNkZWZpbmUgX19OUl9TVlI0X3JlYWQJCQkoX19OUl9TVlI0ICsgICAzKQorI2RlZmluZSBfX05SX1NWUjRfd3JpdGUJCQkoX19OUl9TVlI0ICsgICA0KQorI2RlZmluZSBfX05SX1NWUjRfb3BlbgkJCShfX05SX1NWUjQgKyAgIDUpCisjZGVmaW5lIF9fTlJfU1ZSNF9jbG9zZQkJCShfX05SX1NWUjQgKyAgIDYpCisjZGVmaW5lIF9fTlJfU1ZSNF93YWl0CQkJKF9fTlJfU1ZSNCArICAgNykKKyNkZWZpbmUgX19OUl9TVlI0X2NyZWF0CQkJKF9fTlJfU1ZSNCArICAgOCkKKyNkZWZpbmUgX19OUl9TVlI0X2xpbmsJCQkoX19OUl9TVlI0ICsgICA5KQorI2RlZmluZSBfX05SX1NWUjRfdW5saW5rCQkoX19OUl9TVlI0ICsgIDEwKQorI2RlZmluZSBfX05SX1NWUjRfZXhlYwkJCShfX05SX1NWUjQgKyAgMTEpCisjZGVmaW5lIF9fTlJfU1ZSNF9jaGRpcgkJCShfX05SX1NWUjQgKyAgMTIpCisjZGVmaW5lIF9fTlJfU1ZSNF9ndGltZQkJCShfX05SX1NWUjQgKyAgMTMpCisjZGVmaW5lIF9fTlJfU1ZSNF9ta25vZAkJCShfX05SX1NWUjQgKyAgMTQpCisjZGVmaW5lIF9fTlJfU1ZSNF9jaG1vZAkJCShfX05SX1NWUjQgKyAgMTUpCisjZGVmaW5lIF9fTlJfU1ZSNF9jaG93bgkJCShfX05SX1NWUjQgKyAgMTYpCisjZGVmaW5lIF9fTlJfU1ZSNF9zYnJlYWsJCShfX05SX1NWUjQgKyAgMTcpCisjZGVmaW5lIF9fTlJfU1ZSNF9zdGF0CQkJKF9fTlJfU1ZSNCArICAxOCkKKyNkZWZpbmUgX19OUl9TVlI0X2xzZWVrCQkJKF9fTlJfU1ZSNCArICAxOSkKKyNkZWZpbmUgX19OUl9TVlI0X2dldHBpZAkJKF9fTlJfU1ZSNCArICAyMCkKKyNkZWZpbmUgX19OUl9TVlI0X21vdW50CQkJKF9fTlJfU1ZSNCArICAyMSkKKyNkZWZpbmUgX19OUl9TVlI0X3Vtb3VudAkJKF9fTlJfU1ZSNCArICAyMikKKyNkZWZpbmUgX19OUl9TVlI0X3NldHVpZAkJKF9fTlJfU1ZSNCArICAyMykKKyNkZWZpbmUgX19OUl9TVlI0X2dldHVpZAkJKF9fTlJfU1ZSNCArICAyNCkKKyNkZWZpbmUgX19OUl9TVlI0X3N0aW1lCQkJKF9fTlJfU1ZSNCArICAyNSkKKyNkZWZpbmUgX19OUl9TVlI0X3B0cmFjZQkJKF9fTlJfU1ZSNCArICAyNikKKyNkZWZpbmUgX19OUl9TVlI0X2FsYXJtCQkJKF9fTlJfU1ZSNCArICAyNykKKyNkZWZpbmUgX19OUl9TVlI0X2ZzdGF0CQkJKF9fTlJfU1ZSNCArICAyOCkKKyNkZWZpbmUgX19OUl9TVlI0X3BhdXNlCQkJKF9fTlJfU1ZSNCArICAyOSkKKyNkZWZpbmUgX19OUl9TVlI0X3V0aW1lCQkJKF9fTlJfU1ZSNCArICAzMCkKKyNkZWZpbmUgX19OUl9TVlI0X3N0dHkJCQkoX19OUl9TVlI0ICsgIDMxKQorI2RlZmluZSBfX05SX1NWUjRfZ3R0eQkJCShfX05SX1NWUjQgKyAgMzIpCisjZGVmaW5lIF9fTlJfU1ZSNF9hY2Nlc3MJCShfX05SX1NWUjQgKyAgMzMpCisjZGVmaW5lIF9fTlJfU1ZSNF9uaWNlCQkJKF9fTlJfU1ZSNCArICAzNCkKKyNkZWZpbmUgX19OUl9TVlI0X3N0YXRmcwkJKF9fTlJfU1ZSNCArICAzNSkKKyNkZWZpbmUgX19OUl9TVlI0X3N5bmMJCQkoX19OUl9TVlI0ICsgIDM2KQorI2RlZmluZSBfX05SX1NWUjRfa2lsbAkJCShfX05SX1NWUjQgKyAgMzcpCisjZGVmaW5lIF9fTlJfU1ZSNF9mc3RhdGZzCQkoX19OUl9TVlI0ICsgIDM4KQorI2RlZmluZSBfX05SX1NWUjRfc2V0cGdycAkJKF9fTlJfU1ZSNCArICAzOSkKKyNkZWZpbmUgX19OUl9TVlI0X2N4ZW5peAkJKF9fTlJfU1ZSNCArICA0MCkKKyNkZWZpbmUgX19OUl9TVlI0X2R1cAkJCShfX05SX1NWUjQgKyAgNDEpCisjZGVmaW5lIF9fTlJfU1ZSNF9waXBlCQkJKF9fTlJfU1ZSNCArICA0MikKKyNkZWZpbmUgX19OUl9TVlI0X3RpbWVzCQkJKF9fTlJfU1ZSNCArICA0MykKKyNkZWZpbmUgX19OUl9TVlI0X3Byb2ZpbAkJKF9fTlJfU1ZSNCArICA0NCkKKyNkZWZpbmUgX19OUl9TVlI0X3Bsb2NrCQkJKF9fTlJfU1ZSNCArICA0NSkKKyNkZWZpbmUgX19OUl9TVlI0X3NldGdpZAkJKF9fTlJfU1ZSNCArICA0NikKKyNkZWZpbmUgX19OUl9TVlI0X2dldGdpZAkJKF9fTlJfU1ZSNCArICA0NykKKyNkZWZpbmUgX19OUl9TVlI0X3NpZwkJCShfX05SX1NWUjQgKyAgNDgpCisjZGVmaW5lIF9fTlJfU1ZSNF9tc2dzeXMJCShfX05SX1NWUjQgKyAgNDkpCisjZGVmaW5lIF9fTlJfU1ZSNF9zeXNtaXBzCQkoX19OUl9TVlI0ICsgIDUwKQorI2RlZmluZSBfX05SX1NWUjRfc3lzYWNjdAkJKF9fTlJfU1ZSNCArICA1MSkKKyNkZWZpbmUgX19OUl9TVlI0X3NobXN5cwkJKF9fTlJfU1ZSNCArICA1MikKKyNkZWZpbmUgX19OUl9TVlI0X3NlbXN5cwkJKF9fTlJfU1ZSNCArICA1MykKKyNkZWZpbmUgX19OUl9TVlI0X2lvY3RsCQkJKF9fTlJfU1ZSNCArICA1NCkKKyNkZWZpbmUgX19OUl9TVlI0X3VhZG1pbgkJKF9fTlJfU1ZSNCArICA1NSkKKyNkZWZpbmUgX19OUl9TVlI0X2V4Y2ggCQkJKF9fTlJfU1ZSNCArICA1NikKKyNkZWZpbmUgX19OUl9TVlI0X3V0c3N5cwkJKF9fTlJfU1ZSNCArICA1NykKKyNkZWZpbmUgX19OUl9TVlI0X2ZzeW5jCQkJKF9fTlJfU1ZSNCArICA1OCkKKyNkZWZpbmUgX19OUl9TVlI0X2V4ZWNlCQkJKF9fTlJfU1ZSNCArICA1OSkKKyNkZWZpbmUgX19OUl9TVlI0X3VtYXNrCQkJKF9fTlJfU1ZSNCArICA2MCkKKyNkZWZpbmUgX19OUl9TVlI0X2Nocm9vdAkJKF9fTlJfU1ZSNCArICA2MSkKKyNkZWZpbmUgX19OUl9TVlI0X2ZjbnRsCQkJKF9fTlJfU1ZSNCArICA2MikKKyNkZWZpbmUgX19OUl9TVlI0X3VsaW1pdAkJKF9fTlJfU1ZSNCArICA2MykKKyNkZWZpbmUgX19OUl9TVlI0X3Jlc2VydmVkMQkJKF9fTlJfU1ZSNCArICA2NCkKKyNkZWZpbmUgX19OUl9TVlI0X3Jlc2VydmVkMgkJKF9fTlJfU1ZSNCArICA2NSkKKyNkZWZpbmUgX19OUl9TVlI0X3Jlc2VydmVkMwkJKF9fTlJfU1ZSNCArICA2NikKKyNkZWZpbmUgX19OUl9TVlI0X3Jlc2VydmVkNAkJKF9fTlJfU1ZSNCArICA2NykKKyNkZWZpbmUgX19OUl9TVlI0X3Jlc2VydmVkNQkJKF9fTlJfU1ZSNCArICA2OCkKKyNkZWZpbmUgX19OUl9TVlI0X3Jlc2VydmVkNgkJKF9fTlJfU1ZSNCArICA2OSkKKyNkZWZpbmUgX19OUl9TVlI0X2FkdmZzCQkJKF9fTlJfU1ZSNCArICA3MCkKKyNkZWZpbmUgX19OUl9TVlI0X3VuYWR2ZnMJCShfX05SX1NWUjQgKyAgNzEpCisjZGVmaW5lIF9fTlJfU1ZSNF91bnVzZWQxCQkoX19OUl9TVlI0ICsgIDcyKQorI2RlZmluZSBfX05SX1NWUjRfdW51c2VkMgkJKF9fTlJfU1ZSNCArICA3MykKKyNkZWZpbmUgX19OUl9TVlI0X3Jmc3RhcnQJCShfX05SX1NWUjQgKyAgNzQpCisjZGVmaW5lIF9fTlJfU1ZSNF91bnVzZWQzCQkoX19OUl9TVlI0ICsgIDc1KQorI2RlZmluZSBfX05SX1NWUjRfcmRlYnVnCQkoX19OUl9TVlI0ICsgIDc2KQorI2RlZmluZSBfX05SX1NWUjRfcmZzdG9wCQkoX19OUl9TVlI0ICsgIDc3KQorI2RlZmluZSBfX05SX1NWUjRfcmZzeXMJCQkoX19OUl9TVlI0ICsgIDc4KQorI2RlZmluZSBfX05SX1NWUjRfcm1kaXIJCQkoX19OUl9TVlI0ICsgIDc5KQorI2RlZmluZSBfX05SX1NWUjRfbWtkaXIJCQkoX19OUl9TVlI0ICsgIDgwKQorI2RlZmluZSBfX05SX1NWUjRfZ2V0ZGVudHMJCShfX05SX1NWUjQgKyAgODEpCisjZGVmaW5lIF9fTlJfU1ZSNF9saWJhdHRhY2gJCShfX05SX1NWUjQgKyAgODIpCisjZGVmaW5lIF9fTlJfU1ZSNF9saWJkZXRhY2gJCShfX05SX1NWUjQgKyAgODMpCisjZGVmaW5lIF9fTlJfU1ZSNF9zeXNmcwkJCShfX05SX1NWUjQgKyAgODQpCisjZGVmaW5lIF9fTlJfU1ZSNF9nZXRtc2cJCShfX05SX1NWUjQgKyAgODUpCisjZGVmaW5lIF9fTlJfU1ZSNF9wdXRtc2cJCShfX05SX1NWUjQgKyAgODYpCisjZGVmaW5lIF9fTlJfU1ZSNF9wb2xsCQkJKF9fTlJfU1ZSNCArICA4NykKKyNkZWZpbmUgX19OUl9TVlI0X2xzdGF0CQkJKF9fTlJfU1ZSNCArICA4OCkKKyNkZWZpbmUgX19OUl9TVlI0X3N5bWxpbmsJCShfX05SX1NWUjQgKyAgODkpCisjZGVmaW5lIF9fTlJfU1ZSNF9yZWFkbGluawkJKF9fTlJfU1ZSNCArICA5MCkKKyNkZWZpbmUgX19OUl9TVlI0X3NldGdyb3VwcwkJKF9fTlJfU1ZSNCArICA5MSkKKyNkZWZpbmUgX19OUl9TVlI0X2dldGdyb3VwcwkJKF9fTlJfU1ZSNCArICA5MikKKyNkZWZpbmUgX19OUl9TVlI0X2ZjaG1vZAkJKF9fTlJfU1ZSNCArICA5MykKKyNkZWZpbmUgX19OUl9TVlI0X2ZjaG93bgkJKF9fTlJfU1ZSNCArICA5NCkKKyNkZWZpbmUgX19OUl9TVlI0X3NpZ3Byb2NtYXNrCQkoX19OUl9TVlI0ICsgIDk1KQorI2RlZmluZSBfX05SX1NWUjRfc2lnc3VzcGVuZAkJKF9fTlJfU1ZSNCArICA5NikKKyNkZWZpbmUgX19OUl9TVlI0X3NpZ2FsdHN0YWNrCQkoX19OUl9TVlI0ICsgIDk3KQorI2RlZmluZSBfX05SX1NWUjRfc2lnYWN0aW9uCQkoX19OUl9TVlI0ICsgIDk4KQorI2RlZmluZSBfX05SX1NWUjRfc2lncGVuZGluZwkJKF9fTlJfU1ZSNCArICA5OSkKKyNkZWZpbmUgX19OUl9TVlI0X3NldGNvbnRleHQJCShfX05SX1NWUjQgKyAxMDApCisjZGVmaW5lIF9fTlJfU1ZSNF9ldnN5cwkJCShfX05SX1NWUjQgKyAxMDEpCisjZGVmaW5lIF9fTlJfU1ZSNF9ldnRyYXByZXQJCShfX05SX1NWUjQgKyAxMDIpCisjZGVmaW5lIF9fTlJfU1ZSNF9zdGF0dmZzCQkoX19OUl9TVlI0ICsgMTAzKQorI2RlZmluZSBfX05SX1NWUjRfZnN0YXR2ZnMJCShfX05SX1NWUjQgKyAxMDQpCisjZGVmaW5lIF9fTlJfU1ZSNF9yZXNlcnZlZDcJCShfX05SX1NWUjQgKyAxMDUpCisjZGVmaW5lIF9fTlJfU1ZSNF9uZnNzeXMJCShfX05SX1NWUjQgKyAxMDYpCisjZGVmaW5lIF9fTlJfU1ZSNF93YWl0aWQJCShfX05SX1NWUjQgKyAxMDcpCisjZGVmaW5lIF9fTlJfU1ZSNF9zaWdzZW5kc2V0CQkoX19OUl9TVlI0ICsgMTA4KQorI2RlZmluZSBfX05SX1NWUjRfaHJ0c3lzCQkoX19OUl9TVlI0ICsgMTA5KQorI2RlZmluZSBfX05SX1NWUjRfYWNhbmNlbAkJKF9fTlJfU1ZSNCArIDExMCkKKyNkZWZpbmUgX19OUl9TVlI0X2FzeW5jCQkJKF9fTlJfU1ZSNCArIDExMSkKKyNkZWZpbmUgX19OUl9TVlI0X3ByaW9jbnRsc2V0CQkoX19OUl9TVlI0ICsgMTEyKQorI2RlZmluZSBfX05SX1NWUjRfcGF0aGNvbmYJCShfX05SX1NWUjQgKyAxMTMpCisjZGVmaW5lIF9fTlJfU1ZSNF9taW5jb3JlCQkoX19OUl9TVlI0ICsgMTE0KQorI2RlZmluZSBfX05SX1NWUjRfbW1hcAkJCShfX05SX1NWUjQgKyAxMTUpCisjZGVmaW5lIF9fTlJfU1ZSNF9tcHJvdGVjdAkJKF9fTlJfU1ZSNCArIDExNikKKyNkZWZpbmUgX19OUl9TVlI0X211bm1hcAkJKF9fTlJfU1ZSNCArIDExNykKKyNkZWZpbmUgX19OUl9TVlI0X2ZwYXRoY29uZgkJKF9fTlJfU1ZSNCArIDExOCkKKyNkZWZpbmUgX19OUl9TVlI0X3Zmb3JrCQkJKF9fTlJfU1ZSNCArIDExOSkKKyNkZWZpbmUgX19OUl9TVlI0X2ZjaGRpcgkJKF9fTlJfU1ZSNCArIDEyMCkKKyNkZWZpbmUgX19OUl9TVlI0X3JlYWR2CQkJKF9fTlJfU1ZSNCArIDEyMSkKKyNkZWZpbmUgX19OUl9TVlI0X3dyaXRldgkJKF9fTlJfU1ZSNCArIDEyMikKKyNkZWZpbmUgX19OUl9TVlI0X3hzdGF0CQkJKF9fTlJfU1ZSNCArIDEyMykKKyNkZWZpbmUgX19OUl9TVlI0X2x4c3RhdAkJKF9fTlJfU1ZSNCArIDEyNCkKKyNkZWZpbmUgX19OUl9TVlI0X2Z4c3RhdAkJKF9fTlJfU1ZSNCArIDEyNSkKKyNkZWZpbmUgX19OUl9TVlI0X3hta25vZAkJKF9fTlJfU1ZSNCArIDEyNikKKyNkZWZpbmUgX19OUl9TVlI0X2Nsb2NhbAkJKF9fTlJfU1ZSNCArIDEyNykKKyNkZWZpbmUgX19OUl9TVlI0X3NldHJsaW1pdAkJKF9fTlJfU1ZSNCArIDEyOCkKKyNkZWZpbmUgX19OUl9TVlI0X2dldHJsaW1pdAkJKF9fTlJfU1ZSNCArIDEyOSkKKyNkZWZpbmUgX19OUl9TVlI0X2xjaG93bgkJKF9fTlJfU1ZSNCArIDEzMCkKKyNkZWZpbmUgX19OUl9TVlI0X21lbWNudGwJCShfX05SX1NWUjQgKyAxMzEpCisjZGVmaW5lIF9fTlJfU1ZSNF9nZXRwbXNnCQkoX19OUl9TVlI0ICsgMTMyKQorI2RlZmluZSBfX05SX1NWUjRfcHV0cG1zZwkJKF9fTlJfU1ZSNCArIDEzMykKKyNkZWZpbmUgX19OUl9TVlI0X3JlbmFtZQkJKF9fTlJfU1ZSNCArIDEzNCkKKyNkZWZpbmUgX19OUl9TVlI0X251bmFtZQkJKF9fTlJfU1ZSNCArIDEzNSkKKyNkZWZpbmUgX19OUl9TVlI0X3NldGVnaWQJCShfX05SX1NWUjQgKyAxMzYpCisjZGVmaW5lIF9fTlJfU1ZSNF9zeXNjb25mCQkoX19OUl9TVlI0ICsgMTM3KQorI2RlZmluZSBfX05SX1NWUjRfYWRqdGltZQkJKF9fTlJfU1ZSNCArIDEzOCkKKyNkZWZpbmUgX19OUl9TVlI0X3N5c2luZm8JCShfX05SX1NWUjQgKyAxMzkpCisjZGVmaW5lIF9fTlJfU1ZSNF9yZXNlcnZlZDgJCShfX05SX1NWUjQgKyAxNDApCisjZGVmaW5lIF9fTlJfU1ZSNF9zZXRldWlkCQkoX19OUl9TVlI0ICsgMTQxKQorI2RlZmluZSBfX05SX1NWUjRfUFlSQU1JRF9zdGF0aXMJKF9fTlJfU1ZSNCArIDE0MikKKyNkZWZpbmUgX19OUl9TVlI0X1BZUkFNSURfdHVuaW5nCShfX05SX1NWUjQgKyAxNDMpCisjZGVmaW5lIF9fTlJfU1ZSNF9QWVJBTUlEX2ZvcmNlcnIJKF9fTlJfU1ZSNCArIDE0NCkKKyNkZWZpbmUgX19OUl9TVlI0X1BZUkFNSURfbXBjbnRsCShfX05SX1NWUjQgKyAxNDUpCisjZGVmaW5lIF9fTlJfU1ZSNF9yZXNlcnZlZDkJCShfX05SX1NWUjQgKyAxNDYpCisjZGVmaW5lIF9fTlJfU1ZSNF9yZXNlcnZlZDEwCQkoX19OUl9TVlI0ICsgMTQ3KQorI2RlZmluZSBfX05SX1NWUjRfcmVzZXJ2ZWQxMQkJKF9fTlJfU1ZSNCArIDE0OCkKKyNkZWZpbmUgX19OUl9TVlI0X3Jlc2VydmVkMTIJCShfX05SX1NWUjQgKyAxNDkpCisjZGVmaW5lIF9fTlJfU1ZSNF9yZXNlcnZlZDEzCQkoX19OUl9TVlI0ICsgMTUwKQorI2RlZmluZSBfX05SX1NWUjRfcmVzZXJ2ZWQxNAkJKF9fTlJfU1ZSNCArIDE1MSkKKyNkZWZpbmUgX19OUl9TVlI0X3Jlc2VydmVkMTUJCShfX05SX1NWUjQgKyAxNTIpCisjZGVmaW5lIF9fTlJfU1ZSNF9yZXNlcnZlZDE2CQkoX19OUl9TVlI0ICsgMTUzKQorI2RlZmluZSBfX05SX1NWUjRfcmVzZXJ2ZWQxNwkJKF9fTlJfU1ZSNCArIDE1NCkKKyNkZWZpbmUgX19OUl9TVlI0X3Jlc2VydmVkMTgJCShfX05SX1NWUjQgKyAxNTUpCisjZGVmaW5lIF9fTlJfU1ZSNF9yZXNlcnZlZDE5CQkoX19OUl9TVlI0ICsgMTU2KQorI2RlZmluZSBfX05SX1NWUjRfcmVzZXJ2ZWQyMAkJKF9fTlJfU1ZSNCArIDE1NykKKyNkZWZpbmUgX19OUl9TVlI0X3Jlc2VydmVkMjEJCShfX05SX1NWUjQgKyAxNTgpCisjZGVmaW5lIF9fTlJfU1ZSNF9yZXNlcnZlZDIyCQkoX19OUl9TVlI0ICsgMTU5KQorI2RlZmluZSBfX05SX1NWUjRfcmVzZXJ2ZWQyMwkJKF9fTlJfU1ZSNCArIDE2MCkKKyNkZWZpbmUgX19OUl9TVlI0X3Jlc2VydmVkMjQJCShfX05SX1NWUjQgKyAxNjEpCisjZGVmaW5lIF9fTlJfU1ZSNF9yZXNlcnZlZDI1CQkoX19OUl9TVlI0ICsgMTYyKQorI2RlZmluZSBfX05SX1NWUjRfcmVzZXJ2ZWQyNgkJKF9fTlJfU1ZSNCArIDE2MykKKyNkZWZpbmUgX19OUl9TVlI0X3Jlc2VydmVkMjcJCShfX05SX1NWUjQgKyAxNjQpCisjZGVmaW5lIF9fTlJfU1ZSNF9yZXNlcnZlZDI4CQkoX19OUl9TVlI0ICsgMTY1KQorI2RlZmluZSBfX05SX1NWUjRfcmVzZXJ2ZWQyOQkJKF9fTlJfU1ZSNCArIDE2NikKKyNkZWZpbmUgX19OUl9TVlI0X3Jlc2VydmVkMzAJCShfX05SX1NWUjQgKyAxNjcpCisjZGVmaW5lIF9fTlJfU1ZSNF9yZXNlcnZlZDMxCQkoX19OUl9TVlI0ICsgMTY4KQorI2RlZmluZSBfX05SX1NWUjRfcmVzZXJ2ZWQzMgkJKF9fTlJfU1ZSNCArIDE2OSkKKyNkZWZpbmUgX19OUl9TVlI0X3Jlc2VydmVkMzMJCShfX05SX1NWUjQgKyAxNzApCisjZGVmaW5lIF9fTlJfU1ZSNF9yZXNlcnZlZDM0CQkoX19OUl9TVlI0ICsgMTcxKQorI2RlZmluZSBfX05SX1NWUjRfcmVzZXJ2ZWQzNQkJKF9fTlJfU1ZSNCArIDE3MikKKyNkZWZpbmUgX19OUl9TVlI0X3Jlc2VydmVkMzYJCShfX05SX1NWUjQgKyAxNzMpCisjZGVmaW5lIF9fTlJfU1ZSNF9yZXNlcnZlZDM3CQkoX19OUl9TVlI0ICsgMTc0KQorI2RlZmluZSBfX05SX1NWUjRfcmVzZXJ2ZWQzOAkJKF9fTlJfU1ZSNCArIDE3NSkKKyNkZWZpbmUgX19OUl9TVlI0X3Jlc2VydmVkMzkJCShfX05SX1NWUjQgKyAxNzYpCisjZGVmaW5lIF9fTlJfU1ZSNF9yZXNlcnZlZDQwCQkoX19OUl9TVlI0ICsgMTc3KQorI2RlZmluZSBfX05SX1NWUjRfcmVzZXJ2ZWQ0MQkJKF9fTlJfU1ZSNCArIDE3OCkKKyNkZWZpbmUgX19OUl9TVlI0X3Jlc2VydmVkNDIJCShfX05SX1NWUjQgKyAxNzkpCisjZGVmaW5lIF9fTlJfU1ZSNF9yZXNlcnZlZDQzCQkoX19OUl9TVlI0ICsgMTgwKQorI2RlZmluZSBfX05SX1NWUjRfcmVzZXJ2ZWQ0NAkJKF9fTlJfU1ZSNCArIDE4MSkKKyNkZWZpbmUgX19OUl9TVlI0X3Jlc2VydmVkNDUJCShfX05SX1NWUjQgKyAxODIpCisjZGVmaW5lIF9fTlJfU1ZSNF9yZXNlcnZlZDQ2CQkoX19OUl9TVlI0ICsgMTgzKQorI2RlZmluZSBfX05SX1NWUjRfcmVzZXJ2ZWQ0NwkJKF9fTlJfU1ZSNCArIDE4NCkKKyNkZWZpbmUgX19OUl9TVlI0X3Jlc2VydmVkNDgJCShfX05SX1NWUjQgKyAxODUpCisjZGVmaW5lIF9fTlJfU1ZSNF9yZXNlcnZlZDQ5CQkoX19OUl9TVlI0ICsgMTg2KQorI2RlZmluZSBfX05SX1NWUjRfcmVzZXJ2ZWQ1MAkJKF9fTlJfU1ZSNCArIDE4NykKKyNkZWZpbmUgX19OUl9TVlI0X3Jlc2VydmVkNTEJCShfX05SX1NWUjQgKyAxODgpCisjZGVmaW5lIF9fTlJfU1ZSNF9yZXNlcnZlZDUyCQkoX19OUl9TVlI0ICsgMTg5KQorI2RlZmluZSBfX05SX1NWUjRfcmVzZXJ2ZWQ1MwkJKF9fTlJfU1ZSNCArIDE5MCkKKyNkZWZpbmUgX19OUl9TVlI0X3Jlc2VydmVkNTQJCShfX05SX1NWUjQgKyAxOTEpCisjZGVmaW5lIF9fTlJfU1ZSNF9yZXNlcnZlZDU1CQkoX19OUl9TVlI0ICsgMTkyKQorI2RlZmluZSBfX05SX1NWUjRfcmVzZXJ2ZWQ1NgkJKF9fTlJfU1ZSNCArIDE5MykKKyNkZWZpbmUgX19OUl9TVlI0X3Jlc2VydmVkNTcJCShfX05SX1NWUjQgKyAxOTQpCisjZGVmaW5lIF9fTlJfU1ZSNF9yZXNlcnZlZDU4CQkoX19OUl9TVlI0ICsgMTk1KQorI2RlZmluZSBfX05SX1NWUjRfcmVzZXJ2ZWQ1OQkJKF9fTlJfU1ZSNCArIDE5NikKKyNkZWZpbmUgX19OUl9TVlI0X3Jlc2VydmVkNjAJCShfX05SX1NWUjQgKyAxOTcpCisjZGVmaW5lIF9fTlJfU1ZSNF9yZXNlcnZlZDYxCQkoX19OUl9TVlI0ICsgMTk4KQorI2RlZmluZSBfX05SX1NWUjRfcmVzZXJ2ZWQ2MgkJKF9fTlJfU1ZSNCArIDE5OSkKKyNkZWZpbmUgX19OUl9TVlI0X3Jlc2VydmVkNjMJCShfX05SX1NWUjQgKyAyMDApCisjZGVmaW5lIF9fTlJfU1ZSNF9hcmVhZAkJCShfX05SX1NWUjQgKyAyMDEpCisjZGVmaW5lIF9fTlJfU1ZSNF9hd3JpdGUJCShfX05SX1NWUjQgKyAyMDIpCisjZGVmaW5lIF9fTlJfU1ZSNF9saXN0aW8JCShfX05SX1NWUjQgKyAyMDMpCisjZGVmaW5lIF9fTlJfU1ZSNF9taXBzX2FjYW5jZWwJCShfX05SX1NWUjQgKyAyMDQpCisjZGVmaW5lIF9fTlJfU1ZSNF9hc3RhdHVzCQkoX19OUl9TVlI0ICsgMjA1KQorI2RlZmluZSBfX05SX1NWUjRfYXdhaXQJCQkoX19OUl9TVlI0ICsgMjA2KQorI2RlZmluZSBfX05SX1NWUjRfYXJlYWR2CQkoX19OUl9TVlI0ICsgMjA3KQorI2RlZmluZSBfX05SX1NWUjRfYXdyaXRldgkJKF9fTlJfU1ZSNCArIDIwOCkKKyNkZWZpbmUgX19OUl9TVlI0X01JUFNfcmVzZXJ2ZWQxCShfX05SX1NWUjQgKyAyMDkpCisjZGVmaW5lIF9fTlJfU1ZSNF9NSVBTX3Jlc2VydmVkMgkoX19OUl9TVlI0ICsgMjEwKQorI2RlZmluZSBfX05SX1NWUjRfTUlQU19yZXNlcnZlZDMJKF9fTlJfU1ZSNCArIDIxMSkKKyNkZWZpbmUgX19OUl9TVlI0X01JUFNfcmVzZXJ2ZWQ0CShfX05SX1NWUjQgKyAyMTIpCisjZGVmaW5lIF9fTlJfU1ZSNF9NSVBTX3Jlc2VydmVkNQkoX19OUl9TVlI0ICsgMjEzKQorI2RlZmluZSBfX05SX1NWUjRfTUlQU19yZXNlcnZlZDYJKF9fTlJfU1ZSNCArIDIxNCkKKyNkZWZpbmUgX19OUl9TVlI0X01JUFNfcmVzZXJ2ZWQ3CShfX05SX1NWUjQgKyAyMTUpCisjZGVmaW5lIF9fTlJfU1ZSNF9NSVBTX3Jlc2VydmVkOAkoX19OUl9TVlI0ICsgMjE2KQorI2RlZmluZSBfX05SX1NWUjRfTUlQU19yZXNlcnZlZDkJKF9fTlJfU1ZSNCArIDIxNykKKyNkZWZpbmUgX19OUl9TVlI0X01JUFNfcmVzZXJ2ZWQxMAkoX19OUl9TVlI0ICsgMjE4KQorI2RlZmluZSBfX05SX1NWUjRfTUlQU19yZXNlcnZlZDExCShfX05SX1NWUjQgKyAyMTkpCisjZGVmaW5lIF9fTlJfU1ZSNF9NSVBTX3Jlc2VydmVkMTIJKF9fTlJfU1ZSNCArIDIyMCkKKyNkZWZpbmUgX19OUl9TVlI0X0NEQ19yZXNlcnZlZDEJCShfX05SX1NWUjQgKyAyMjEpCisjZGVmaW5lIF9fTlJfU1ZSNF9DRENfcmVzZXJ2ZWQyCQkoX19OUl9TVlI0ICsgMjIyKQorI2RlZmluZSBfX05SX1NWUjRfQ0RDX3Jlc2VydmVkMwkJKF9fTlJfU1ZSNCArIDIyMykKKyNkZWZpbmUgX19OUl9TVlI0X0NEQ19yZXNlcnZlZDQJCShfX05SX1NWUjQgKyAyMjQpCisjZGVmaW5lIF9fTlJfU1ZSNF9DRENfcmVzZXJ2ZWQ1CQkoX19OUl9TVlI0ICsgMjI1KQorI2RlZmluZSBfX05SX1NWUjRfQ0RDX3Jlc2VydmVkNgkJKF9fTlJfU1ZSNCArIDIyNikKKyNkZWZpbmUgX19OUl9TVlI0X0NEQ19yZXNlcnZlZDcJCShfX05SX1NWUjQgKyAyMjcpCisjZGVmaW5lIF9fTlJfU1ZSNF9DRENfcmVzZXJ2ZWQ4CQkoX19OUl9TVlI0ICsgMjI4KQorI2RlZmluZSBfX05SX1NWUjRfQ0RDX3Jlc2VydmVkOQkJKF9fTlJfU1ZSNCArIDIyOSkKKyNkZWZpbmUgX19OUl9TVlI0X0NEQ19yZXNlcnZlZDEwCShfX05SX1NWUjQgKyAyMzApCisjZGVmaW5lIF9fTlJfU1ZSNF9DRENfcmVzZXJ2ZWQxMQkoX19OUl9TVlI0ICsgMjMxKQorI2RlZmluZSBfX05SX1NWUjRfQ0RDX3Jlc2VydmVkMTIJKF9fTlJfU1ZSNCArIDIzMikKKyNkZWZpbmUgX19OUl9TVlI0X0NEQ19yZXNlcnZlZDEzCShfX05SX1NWUjQgKyAyMzMpCisjZGVmaW5lIF9fTlJfU1ZSNF9DRENfcmVzZXJ2ZWQxNAkoX19OUl9TVlI0ICsgMjM0KQorI2RlZmluZSBfX05SX1NWUjRfQ0RDX3Jlc2VydmVkMTUJKF9fTlJfU1ZSNCArIDIzNSkKKyNkZWZpbmUgX19OUl9TVlI0X0NEQ19yZXNlcnZlZDE2CShfX05SX1NWUjQgKyAyMzYpCisjZGVmaW5lIF9fTlJfU1ZSNF9DRENfcmVzZXJ2ZWQxNwkoX19OUl9TVlI0ICsgMjM3KQorI2RlZmluZSBfX05SX1NWUjRfQ0RDX3Jlc2VydmVkMTgJKF9fTlJfU1ZSNCArIDIzOCkKKyNkZWZpbmUgX19OUl9TVlI0X0NEQ19yZXNlcnZlZDE5CShfX05SX1NWUjQgKyAyMzkpCisjZGVmaW5lIF9fTlJfU1ZSNF9DRENfcmVzZXJ2ZWQyMAkoX19OUl9TVlI0ICsgMjQwKQorCisvKgorICogU1lTIFYgc3lzY2FsbHMgYXJlIGluIHRoZSByYW5nZSBmcm9tIDEwMDAgdG8gMTk5OQorICovCisjZGVmaW5lIF9fTlJfU1lTVgkJCTEwMDAKKyNkZWZpbmUgX19OUl9TWVNWX3N5c2NhbGwJCShfX05SX1NZU1YgKyAgIDApCisjZGVmaW5lIF9fTlJfU1lTVl9leGl0CQkJKF9fTlJfU1lTViArICAgMSkKKyNkZWZpbmUgX19OUl9TWVNWX2ZvcmsJCQkoX19OUl9TWVNWICsgICAyKQorI2RlZmluZSBfX05SX1NZU1ZfcmVhZAkJCShfX05SX1NZU1YgKyAgIDMpCisjZGVmaW5lIF9fTlJfU1lTVl93cml0ZQkJCShfX05SX1NZU1YgKyAgIDQpCisjZGVmaW5lIF9fTlJfU1lTVl9vcGVuCQkJKF9fTlJfU1lTViArICAgNSkKKyNkZWZpbmUgX19OUl9TWVNWX2Nsb3NlCQkJKF9fTlJfU1lTViArICAgNikKKyNkZWZpbmUgX19OUl9TWVNWX3dhaXQJCQkoX19OUl9TWVNWICsgICA3KQorI2RlZmluZSBfX05SX1NZU1ZfY3JlYXQJCQkoX19OUl9TWVNWICsgICA4KQorI2RlZmluZSBfX05SX1NZU1ZfbGluawkJCShfX05SX1NZU1YgKyAgIDkpCisjZGVmaW5lIF9fTlJfU1lTVl91bmxpbmsJCShfX05SX1NZU1YgKyAgMTApCisjZGVmaW5lIF9fTlJfU1lTVl9leGVjdgkJCShfX05SX1NZU1YgKyAgMTEpCisjZGVmaW5lIF9fTlJfU1lTVl9jaGRpcgkJCShfX05SX1NZU1YgKyAgMTIpCisjZGVmaW5lIF9fTlJfU1lTVl90aW1lCQkJKF9fTlJfU1lTViArICAxMykKKyNkZWZpbmUgX19OUl9TWVNWX21rbm9kCQkJKF9fTlJfU1lTViArICAxNCkKKyNkZWZpbmUgX19OUl9TWVNWX2NobW9kCQkJKF9fTlJfU1lTViArICAxNSkKKyNkZWZpbmUgX19OUl9TWVNWX2Nob3duCQkJKF9fTlJfU1lTViArICAxNikKKyNkZWZpbmUgX19OUl9TWVNWX2JyawkJCShfX05SX1NZU1YgKyAgMTcpCisjZGVmaW5lIF9fTlJfU1lTVl9zdGF0CQkJKF9fTlJfU1lTViArICAxOCkKKyNkZWZpbmUgX19OUl9TWVNWX2xzZWVrCQkJKF9fTlJfU1lTViArICAxOSkKKyNkZWZpbmUgX19OUl9TWVNWX2dldHBpZAkJKF9fTlJfU1lTViArICAyMCkKKyNkZWZpbmUgX19OUl9TWVNWX21vdW50CQkJKF9fTlJfU1lTViArICAyMSkKKyNkZWZpbmUgX19OUl9TWVNWX3Vtb3VudAkJKF9fTlJfU1lTViArICAyMikKKyNkZWZpbmUgX19OUl9TWVNWX3NldHVpZAkJKF9fTlJfU1lTViArICAyMykKKyNkZWZpbmUgX19OUl9TWVNWX2dldHVpZAkJKF9fTlJfU1lTViArICAyNCkKKyNkZWZpbmUgX19OUl9TWVNWX3N0aW1lCQkJKF9fTlJfU1lTViArICAyNSkKKyNkZWZpbmUgX19OUl9TWVNWX3B0cmFjZQkJKF9fTlJfU1lTViArICAyNikKKyNkZWZpbmUgX19OUl9TWVNWX2FsYXJtCQkJKF9fTlJfU1lTViArICAyNykKKyNkZWZpbmUgX19OUl9TWVNWX2ZzdGF0CQkJKF9fTlJfU1lTViArICAyOCkKKyNkZWZpbmUgX19OUl9TWVNWX3BhdXNlCQkJKF9fTlJfU1lTViArICAyOSkKKyNkZWZpbmUgX19OUl9TWVNWX3V0aW1lCQkJKF9fTlJfU1lTViArICAzMCkKKyNkZWZpbmUgX19OUl9TWVNWX3N0dHkJCQkoX19OUl9TWVNWICsgIDMxKQorI2RlZmluZSBfX05SX1NZU1ZfZ3R0eQkJCShfX05SX1NZU1YgKyAgMzIpCisjZGVmaW5lIF9fTlJfU1lTVl9hY2Nlc3MJCShfX05SX1NZU1YgKyAgMzMpCisjZGVmaW5lIF9fTlJfU1lTVl9uaWNlCQkJKF9fTlJfU1lTViArICAzNCkKKyNkZWZpbmUgX19OUl9TWVNWX3N0YXRmcwkJKF9fTlJfU1lTViArICAzNSkKKyNkZWZpbmUgX19OUl9TWVNWX3N5bmMJCQkoX19OUl9TWVNWICsgIDM2KQorI2RlZmluZSBfX05SX1NZU1Zfa2lsbAkJCShfX05SX1NZU1YgKyAgMzcpCisjZGVmaW5lIF9fTlJfU1lTVl9mc3RhdGZzCQkoX19OUl9TWVNWICsgIDM4KQorI2RlZmluZSBfX05SX1NZU1Zfc2V0cGdycAkJKF9fTlJfU1lTViArICAzOSkKKyNkZWZpbmUgX19OUl9TWVNWX3N5c3NnaQkJKF9fTlJfU1lTViArICA0MCkKKyNkZWZpbmUgX19OUl9TWVNWX2R1cAkJCShfX05SX1NZU1YgKyAgNDEpCisjZGVmaW5lIF9fTlJfU1lTVl9waXBlCQkJKF9fTlJfU1lTViArICA0MikKKyNkZWZpbmUgX19OUl9TWVNWX3RpbWVzCQkJKF9fTlJfU1lTViArICA0MykKKyNkZWZpbmUgX19OUl9TWVNWX3Byb2ZpbAkJKF9fTlJfU1lTViArICA0NCkKKyNkZWZpbmUgX19OUl9TWVNWX3Bsb2NrCQkJKF9fTlJfU1lTViArICA0NSkKKyNkZWZpbmUgX19OUl9TWVNWX3NldGdpZAkJKF9fTlJfU1lTViArICA0NikKKyNkZWZpbmUgX19OUl9TWVNWX2dldGdpZAkJKF9fTlJfU1lTViArICA0NykKKyNkZWZpbmUgX19OUl9TWVNWX3NpZwkJCShfX05SX1NZU1YgKyAgNDgpCisjZGVmaW5lIF9fTlJfU1lTVl9tc2dzeXMJCShfX05SX1NZU1YgKyAgNDkpCisjZGVmaW5lIF9fTlJfU1lTVl9zeXNtaXBzCQkoX19OUl9TWVNWICsgIDUwKQorI2RlZmluZSBfX05SX1NZU1ZfYWNjdAkJCShfX05SX1NZU1YgKyAgNTEpCisjZGVmaW5lIF9fTlJfU1lTVl9zaG1zeXMJCShfX05SX1NZU1YgKyAgNTIpCisjZGVmaW5lIF9fTlJfU1lTVl9zZW1zeXMJCShfX05SX1NZU1YgKyAgNTMpCisjZGVmaW5lIF9fTlJfU1lTVl9pb2N0bAkJCShfX05SX1NZU1YgKyAgNTQpCisjZGVmaW5lIF9fTlJfU1lTVl91YWRtaW4JCShfX05SX1NZU1YgKyAgNTUpCisjZGVmaW5lIF9fTlJfU1lTVl9zeXNtcAkJCShfX05SX1NZU1YgKyAgNTYpCisjZGVmaW5lIF9fTlJfU1lTVl91dHNzeXMJCShfX05SX1NZU1YgKyAgNTcpCisjZGVmaW5lIF9fTlJfU1lTVl9VU0dfcmVzZXJ2ZWQxCQkoX19OUl9TWVNWICsgIDU4KQorI2RlZmluZSBfX05SX1NZU1ZfZXhlY3ZlCQkoX19OUl9TWVNWICsgIDU5KQorI2RlZmluZSBfX05SX1NZU1ZfdW1hc2sJCQkoX19OUl9TWVNWICsgIDYwKQorI2RlZmluZSBfX05SX1NZU1ZfY2hyb290CQkoX19OUl9TWVNWICsgIDYxKQorI2RlZmluZSBfX05SX1NZU1ZfZmNudGwJCQkoX19OUl9TWVNWICsgIDYyKQorI2RlZmluZSBfX05SX1NZU1ZfdWxpbWl0CQkoX19OUl9TWVNWICsgIDYzKQorI2RlZmluZSBfX05SX1NZU1ZfU0FGQVJJNF9yZXNlcnZlZDEJKF9fTlJfU1lTViArICA2NCkKKyNkZWZpbmUgX19OUl9TWVNWX1NBRkFSSTRfcmVzZXJ2ZWQyCShfX05SX1NZU1YgKyAgNjUpCisjZGVmaW5lIF9fTlJfU1lTVl9TQUZBUkk0X3Jlc2VydmVkMwkoX19OUl9TWVNWICsgIDY2KQorI2RlZmluZSBfX05SX1NZU1ZfU0FGQVJJNF9yZXNlcnZlZDQJKF9fTlJfU1lTViArICA2NykKKyNkZWZpbmUgX19OUl9TWVNWX1NBRkFSSTRfcmVzZXJ2ZWQ1CShfX05SX1NZU1YgKyAgNjgpCisjZGVmaW5lIF9fTlJfU1lTVl9TQUZBUkk0X3Jlc2VydmVkNgkoX19OUl9TWVNWICsgIDY5KQorI2RlZmluZSBfX05SX1NZU1ZfYWR2ZnMJCQkoX19OUl9TWVNWICsgIDcwKQorI2RlZmluZSBfX05SX1NZU1ZfdW5hZHZmcwkJKF9fTlJfU1lTViArICA3MSkKKyNkZWZpbmUgX19OUl9TWVNWX3Jtb3VudAkJKF9fTlJfU1lTViArICA3MikKKyNkZWZpbmUgX19OUl9TWVNWX3J1bW91bnQJCShfX05SX1NZU1YgKyAgNzMpCisjZGVmaW5lIF9fTlJfU1lTVl9yZnN0YXJ0CQkoX19OUl9TWVNWICsgIDc0KQorI2RlZmluZSBfX05SX1NZU1ZfZ2V0cmxpbWl0NjQJCShfX05SX1NZU1YgKyAgNzUpCisjZGVmaW5lIF9fTlJfU1lTVl9zZXRybGltaXQ2NAkJKF9fTlJfU1lTViArICA3NikKKyNkZWZpbmUgX19OUl9TWVNWX25hbm9zbGVlcAkJKF9fTlJfU1lTViArICA3NykKKyNkZWZpbmUgX19OUl9TWVNWX2xzZWVrNjQJCShfX05SX1NZU1YgKyAgNzgpCisjZGVmaW5lIF9fTlJfU1lTVl9ybWRpcgkJCShfX05SX1NZU1YgKyAgNzkpCisjZGVmaW5lIF9fTlJfU1lTVl9ta2RpcgkJCShfX05SX1NZU1YgKyAgODApCisjZGVmaW5lIF9fTlJfU1lTVl9nZXRkZW50cwkJKF9fTlJfU1lTViArICA4MSkKKyNkZWZpbmUgX19OUl9TWVNWX3NnaW5hcAkJKF9fTlJfU1lTViArICA4MikKKyNkZWZpbmUgX19OUl9TWVNWX3NnaWtvcHQJCShfX05SX1NZU1YgKyAgODMpCisjZGVmaW5lIF9fTlJfU1lTVl9zeXNmcwkJCShfX05SX1NZU1YgKyAgODQpCisjZGVmaW5lIF9fTlJfU1lTVl9nZXRtc2cJCShfX05SX1NZU1YgKyAgODUpCisjZGVmaW5lIF9fTlJfU1lTVl9wdXRtc2cJCShfX05SX1NZU1YgKyAgODYpCisjZGVmaW5lIF9fTlJfU1lTVl9wb2xsCQkJKF9fTlJfU1lTViArICA4NykKKyNkZWZpbmUgX19OUl9TWVNWX3NpZ3JldHVybgkJKF9fTlJfU1lTViArICA4OCkKKyNkZWZpbmUgX19OUl9TWVNWX2FjY2VwdAkJKF9fTlJfU1lTViArICA4OSkKKyNkZWZpbmUgX19OUl9TWVNWX2JpbmQJCQkoX19OUl9TWVNWICsgIDkwKQorI2RlZmluZSBfX05SX1NZU1ZfY29ubmVjdAkJKF9fTlJfU1lTViArICA5MSkKKyNkZWZpbmUgX19OUl9TWVNWX2dldGhvc3RpZAkJKF9fTlJfU1lTViArICA5MikKKyNkZWZpbmUgX19OUl9TWVNWX2dldHBlZXJuYW1lCQkoX19OUl9TWVNWICsgIDkzKQorI2RlZmluZSBfX05SX1NZU1ZfZ2V0c29ja25hbWUJCShfX05SX1NZU1YgKyAgOTQpCisjZGVmaW5lIF9fTlJfU1lTVl9nZXRzb2Nrb3B0CQkoX19OUl9TWVNWICsgIDk1KQorI2RlZmluZSBfX05SX1NZU1ZfbGlzdGVuCQkoX19OUl9TWVNWICsgIDk2KQorI2RlZmluZSBfX05SX1NZU1ZfcmVjdgkJCShfX05SX1NZU1YgKyAgOTcpCisjZGVmaW5lIF9fTlJfU1lTVl9yZWN2ZnJvbQkJKF9fTlJfU1lTViArICA5OCkKKyNkZWZpbmUgX19OUl9TWVNWX3JlY3Ztc2cJCShfX05SX1NZU1YgKyAgOTkpCisjZGVmaW5lIF9fTlJfU1lTVl9zZWxlY3QJCShfX05SX1NZU1YgKyAxMDApCisjZGVmaW5lIF9fTlJfU1lTVl9zZW5kCQkJKF9fTlJfU1lTViArIDEwMSkKKyNkZWZpbmUgX19OUl9TWVNWX3NlbmRtc2cJCShfX05SX1NZU1YgKyAxMDIpCisjZGVmaW5lIF9fTlJfU1lTVl9zZW5kdG8JCShfX05SX1NZU1YgKyAxMDMpCisjZGVmaW5lIF9fTlJfU1lTVl9zZXRob3N0aWQJCShfX05SX1NZU1YgKyAxMDQpCisjZGVmaW5lIF9fTlJfU1lTVl9zZXRzb2Nrb3B0CQkoX19OUl9TWVNWICsgMTA1KQorI2RlZmluZSBfX05SX1NZU1Zfc2h1dGRvd24JCShfX05SX1NZU1YgKyAxMDYpCisjZGVmaW5lIF9fTlJfU1lTVl9zb2NrZXQJCShfX05SX1NZU1YgKyAxMDcpCisjZGVmaW5lIF9fTlJfU1lTVl9nZXRob3N0bmFtZQkJKF9fTlJfU1lTViArIDEwOCkKKyNkZWZpbmUgX19OUl9TWVNWX3NldGhvc3RuYW1lCQkoX19OUl9TWVNWICsgMTA5KQorI2RlZmluZSBfX05SX1NZU1ZfZ2V0ZG9tYWlubmFtZQkJKF9fTlJfU1lTViArIDExMCkKKyNkZWZpbmUgX19OUl9TWVNWX3NldGRvbWFpbm5hbWUJCShfX05SX1NZU1YgKyAxMTEpCisjZGVmaW5lIF9fTlJfU1lTVl90cnVuY2F0ZQkJKF9fTlJfU1lTViArIDExMikKKyNkZWZpbmUgX19OUl9TWVNWX2Z0cnVuY2F0ZQkJKF9fTlJfU1lTViArIDExMykKKyNkZWZpbmUgX19OUl9TWVNWX3JlbmFtZQkJKF9fTlJfU1lTViArIDExNCkKKyNkZWZpbmUgX19OUl9TWVNWX3N5bWxpbmsJCShfX05SX1NZU1YgKyAxMTUpCisjZGVmaW5lIF9fTlJfU1lTVl9yZWFkbGluawkJKF9fTlJfU1lTViArIDExNikKKyNkZWZpbmUgX19OUl9TWVNWX2xzdGF0CQkJKF9fTlJfU1lTViArIDExNykKKyNkZWZpbmUgX19OUl9TWVNWX25mc21vdW50CQkoX19OUl9TWVNWICsgMTE4KQorI2RlZmluZSBfX05SX1NZU1ZfbmZzc3ZjCQkoX19OUl9TWVNWICsgMTE5KQorI2RlZmluZSBfX05SX1NZU1ZfZ2V0ZmgJCQkoX19OUl9TWVNWICsgMTIwKQorI2RlZmluZSBfX05SX1NZU1ZfYXN5bmNfZGFlbW9uCQkoX19OUl9TWVNWICsgMTIxKQorI2RlZmluZSBfX05SX1NZU1ZfZXhwb3J0ZnMJCShfX05SX1NZU1YgKyAxMjIpCisjZGVmaW5lIF9fTlJfU1lTVl9zZXRyZWdpZAkJKF9fTlJfU1lTViArIDEyMykKKyNkZWZpbmUgX19OUl9TWVNWX3NldHJldWlkCQkoX19OUl9TWVNWICsgMTI0KQorI2RlZmluZSBfX05SX1NZU1ZfZ2V0aXRpbWVyCQkoX19OUl9TWVNWICsgMTI1KQorI2RlZmluZSBfX05SX1NZU1Zfc2V0aXRpbWVyCQkoX19OUl9TWVNWICsgMTI2KQorI2RlZmluZSBfX05SX1NZU1ZfYWRqdGltZQkJKF9fTlJfU1lTViArIDEyNykKKyNkZWZpbmUgX19OUl9TWVNWX0JTRF9nZXRpbWUJCShfX05SX1NZU1YgKyAxMjgpCisjZGVmaW5lIF9fTlJfU1lTVl9zcHJvYwkJCShfX05SX1NZU1YgKyAxMjkpCisjZGVmaW5lIF9fTlJfU1lTVl9wcmN0bAkJCShfX05SX1NZU1YgKyAxMzApCisjZGVmaW5lIF9fTlJfU1lTVl9wcm9jYmxrCQkoX19OUl9TWVNWICsgMTMxKQorI2RlZmluZSBfX05SX1NZU1Zfc3Byb2NzcAkJKF9fTlJfU1lTViArIDEzMikKKyNkZWZpbmUgX19OUl9TWVNWX3NnaWdzYwkJKF9fTlJfU1lTViArIDEzMykKKyNkZWZpbmUgX19OUl9TWVNWX21tYXAJCQkoX19OUl9TWVNWICsgMTM0KQorI2RlZmluZSBfX05SX1NZU1ZfbXVubWFwCQkoX19OUl9TWVNWICsgMTM1KQorI2RlZmluZSBfX05SX1NZU1ZfbXByb3RlY3QJCShfX05SX1NZU1YgKyAxMzYpCisjZGVmaW5lIF9fTlJfU1lTVl9tc3luYwkJCShfX05SX1NZU1YgKyAxMzcpCisjZGVmaW5lIF9fTlJfU1lTVl9tYWR2aXNlCQkoX19OUl9TWVNWICsgMTM4KQorI2RlZmluZSBfX05SX1NZU1ZfcGFnZWxvY2sJCShfX05SX1NZU1YgKyAxMzkpCisjZGVmaW5lIF9fTlJfU1lTVl9nZXRwYWdlc2l6ZQkJKF9fTlJfU1lTViArIDE0MCkKKyNkZWZpbmUgX19OUl9TWVNWX3F1b3RhY3RsCQkoX19OUl9TWVNWICsgMTQxKQorI2RlZmluZSBfX05SX1NZU1ZfbGliZGV0YWNoCQkoX19OUl9TWVNWICsgMTQyKQorI2RlZmluZSBfX05SX1NZU1ZfQlNEZ2V0cGdycAkJKF9fTlJfU1lTViArIDE0MykKKyNkZWZpbmUgX19OUl9TWVNWX0JTRHNldHBncnAJCShfX05SX1NZU1YgKyAxNDQpCisjZGVmaW5lIF9fTlJfU1lTVl92aGFuZ3VwCQkoX19OUl9TWVNWICsgMTQ1KQorI2RlZmluZSBfX05SX1NZU1ZfZnN5bmMJCQkoX19OUl9TWVNWICsgMTQ2KQorI2RlZmluZSBfX05SX1NZU1ZfZmNoZGlyCQkoX19OUl9TWVNWICsgMTQ3KQorI2RlZmluZSBfX05SX1NZU1ZfZ2V0cmxpbWl0CQkoX19OUl9TWVNWICsgMTQ4KQorI2RlZmluZSBfX05SX1NZU1Zfc2V0cmxpbWl0CQkoX19OUl9TWVNWICsgMTQ5KQorI2RlZmluZSBfX05SX1NZU1ZfY2FjaGVmbHVzaAkJKF9fTlJfU1lTViArIDE1MCkKKyNkZWZpbmUgX19OUl9TWVNWX2NhY2hlY3RsCQkoX19OUl9TWVNWICsgMTUxKQorI2RlZmluZSBfX05SX1NZU1ZfZmNob3duCQkoX19OUl9TWVNWICsgMTUyKQorI2RlZmluZSBfX05SX1NZU1ZfZmNobW9kCQkoX19OUl9TWVNWICsgMTUzKQorI2RlZmluZSBfX05SX1NZU1Zfd2FpdDMJCQkoX19OUl9TWVNWICsgMTU0KQorI2RlZmluZSBfX05SX1NZU1Zfc29ja2V0cGFpcgkJKF9fTlJfU1lTViArIDE1NSkKKyNkZWZpbmUgX19OUl9TWVNWX3N5c2luZm8JCShfX05SX1NZU1YgKyAxNTYpCisjZGVmaW5lIF9fTlJfU1lTVl9udW5hbWUJCShfX05SX1NZU1YgKyAxNTcpCisjZGVmaW5lIF9fTlJfU1lTVl94c3RhdAkJCShfX05SX1NZU1YgKyAxNTgpCisjZGVmaW5lIF9fTlJfU1lTVl9seHN0YXQJCShfX05SX1NZU1YgKyAxNTkpCisjZGVmaW5lIF9fTlJfU1lTVl9meHN0YXQJCShfX05SX1NZU1YgKyAxNjApCisjZGVmaW5lIF9fTlJfU1lTVl94bWtub2QJCShfX05SX1NZU1YgKyAxNjEpCisjZGVmaW5lIF9fTlJfU1lTVl9rc2lnYWN0aW9uCQkoX19OUl9TWVNWICsgMTYyKQorI2RlZmluZSBfX05SX1NZU1Zfc2lncGVuZGluZwkJKF9fTlJfU1lTViArIDE2MykKKyNkZWZpbmUgX19OUl9TWVNWX3NpZ3Byb2NtYXNrCQkoX19OUl9TWVNWICsgMTY0KQorI2RlZmluZSBfX05SX1NZU1Zfc2lnc3VzcGVuZAkJKF9fTlJfU1lTViArIDE2NSkKKyNkZWZpbmUgX19OUl9TWVNWX3NpZ3BvbGwJCShfX05SX1NZU1YgKyAxNjYpCisjZGVmaW5lIF9fTlJfU1lTVl9zd2FwY3RsCQkoX19OUl9TWVNWICsgMTY3KQorI2RlZmluZSBfX05SX1NZU1ZfZ2V0Y29udGV4dAkJKF9fTlJfU1lTViArIDE2OCkKKyNkZWZpbmUgX19OUl9TWVNWX3NldGNvbnRleHQJCShfX05SX1NZU1YgKyAxNjkpCisjZGVmaW5lIF9fTlJfU1lTVl93YWl0c3lzCQkoX19OUl9TWVNWICsgMTcwKQorI2RlZmluZSBfX05SX1NZU1Zfc2lnc3RhY2sJCShfX05SX1NZU1YgKyAxNzEpCisjZGVmaW5lIF9fTlJfU1lTVl9zaWdhbHRzdGFjawkJKF9fTlJfU1lTViArIDE3MikKKyNkZWZpbmUgX19OUl9TWVNWX3NpZ3NlbmRzZXQJCShfX05SX1NZU1YgKyAxNzMpCisjZGVmaW5lIF9fTlJfU1lTVl9zdGF0dmZzCQkoX19OUl9TWVNWICsgMTc0KQorI2RlZmluZSBfX05SX1NZU1ZfZnN0YXR2ZnMJCShfX05SX1NZU1YgKyAxNzUpCisjZGVmaW5lIF9fTlJfU1lTVl9nZXRwbXNnCQkoX19OUl9TWVNWICsgMTc2KQorI2RlZmluZSBfX05SX1NZU1ZfcHV0cG1zZwkJKF9fTlJfU1lTViArIDE3NykKKyNkZWZpbmUgX19OUl9TWVNWX2xjaG93bgkJKF9fTlJfU1lTViArIDE3OCkKKyNkZWZpbmUgX19OUl9TWVNWX3ByaW9jbnRsCQkoX19OUl9TWVNWICsgMTc5KQorI2RlZmluZSBfX05SX1NZU1Zfa3NpZ3F1ZXVlCQkoX19OUl9TWVNWICsgMTgwKQorI2RlZmluZSBfX05SX1NZU1ZfcmVhZHYJCQkoX19OUl9TWVNWICsgMTgxKQorI2RlZmluZSBfX05SX1NZU1Zfd3JpdGV2CQkoX19OUl9TWVNWICsgMTgyKQorI2RlZmluZSBfX05SX1NZU1ZfdHJ1bmNhdGU2NAkJKF9fTlJfU1lTViArIDE4MykKKyNkZWZpbmUgX19OUl9TWVNWX2Z0cnVuY2F0ZTY0CQkoX19OUl9TWVNWICsgMTg0KQorI2RlZmluZSBfX05SX1NZU1ZfbW1hcDY0CQkoX19OUl9TWVNWICsgMTg1KQorI2RlZmluZSBfX05SX1NZU1ZfZG1pCQkJKF9fTlJfU1lTViArIDE4NikKKyNkZWZpbmUgX19OUl9TWVNWX3ByZWFkCQkJKF9fTlJfU1lTViArIDE4NykKKyNkZWZpbmUgX19OUl9TWVNWX3B3cml0ZQkJKF9fTlJfU1lTViArIDE4OCkKKworLyoKKyAqIEJTRCA0LjMgc3lzY2FsbHMgYXJlIGluIHRoZSByYW5nZSBmcm9tIDIwMDAgdG8gMjk5OQorICovCisjZGVmaW5lIF9fTlJfQlNENDMJCQkyMDAwCisjZGVmaW5lIF9fTlJfQlNENDNfc3lzY2FsbAkJKF9fTlJfQlNENDMgKyAgIDApCisjZGVmaW5lIF9fTlJfQlNENDNfZXhpdAkJCShfX05SX0JTRDQzICsgICAxKQorI2RlZmluZSBfX05SX0JTRDQzX2ZvcmsJCQkoX19OUl9CU0Q0MyArICAgMikKKyNkZWZpbmUgX19OUl9CU0Q0M19yZWFkCQkJKF9fTlJfQlNENDMgKyAgIDMpCisjZGVmaW5lIF9fTlJfQlNENDNfd3JpdGUJCShfX05SX0JTRDQzICsgICA0KQorI2RlZmluZSBfX05SX0JTRDQzX29wZW4JCQkoX19OUl9CU0Q0MyArICAgNSkKKyNkZWZpbmUgX19OUl9CU0Q0M19jbG9zZQkJKF9fTlJfQlNENDMgKyAgIDYpCisjZGVmaW5lIF9fTlJfQlNENDNfd2FpdAkJCShfX05SX0JTRDQzICsgICA3KQorI2RlZmluZSBfX05SX0JTRDQzX2NyZWF0CQkoX19OUl9CU0Q0MyArICAgOCkKKyNkZWZpbmUgX19OUl9CU0Q0M19saW5rCQkJKF9fTlJfQlNENDMgKyAgIDkpCisjZGVmaW5lIF9fTlJfQlNENDNfdW5saW5rCQkoX19OUl9CU0Q0MyArICAxMCkKKyNkZWZpbmUgX19OUl9CU0Q0M19leGVjCQkJKF9fTlJfQlNENDMgKyAgMTEpCisjZGVmaW5lIF9fTlJfQlNENDNfY2hkaXIJCShfX05SX0JTRDQzICsgIDEyKQorI2RlZmluZSBfX05SX0JTRDQzX3RpbWUJCQkoX19OUl9CU0Q0MyArICAxMykKKyNkZWZpbmUgX19OUl9CU0Q0M19ta25vZAkJKF9fTlJfQlNENDMgKyAgMTQpCisjZGVmaW5lIF9fTlJfQlNENDNfY2htb2QJCShfX05SX0JTRDQzICsgIDE1KQorI2RlZmluZSBfX05SX0JTRDQzX2Nob3duCQkoX19OUl9CU0Q0MyArICAxNikKKyNkZWZpbmUgX19OUl9CU0Q0M19zYnJlYWsJCShfX05SX0JTRDQzICsgIDE3KQorI2RlZmluZSBfX05SX0JTRDQzX29sZHN0YXQJCShfX05SX0JTRDQzICsgIDE4KQorI2RlZmluZSBfX05SX0JTRDQzX2xzZWVrCQkoX19OUl9CU0Q0MyArICAxOSkKKyNkZWZpbmUgX19OUl9CU0Q0M19nZXRwaWQJCShfX05SX0JTRDQzICsgIDIwKQorI2RlZmluZSBfX05SX0JTRDQzX29sZG1vdW50CQkoX19OUl9CU0Q0MyArICAyMSkKKyNkZWZpbmUgX19OUl9CU0Q0M191bW91bnQJCShfX05SX0JTRDQzICsgIDIyKQorI2RlZmluZSBfX05SX0JTRDQzX3NldHVpZAkJKF9fTlJfQlNENDMgKyAgMjMpCisjZGVmaW5lIF9fTlJfQlNENDNfZ2V0dWlkCQkoX19OUl9CU0Q0MyArICAyNCkKKyNkZWZpbmUgX19OUl9CU0Q0M19zdGltZQkJKF9fTlJfQlNENDMgKyAgMjUpCisjZGVmaW5lIF9fTlJfQlNENDNfcHRyYWNlCQkoX19OUl9CU0Q0MyArICAyNikKKyNkZWZpbmUgX19OUl9CU0Q0M19hbGFybQkJKF9fTlJfQlNENDMgKyAgMjcpCisjZGVmaW5lIF9fTlJfQlNENDNfb2xkZnN0YXQJCShfX05SX0JTRDQzICsgIDI4KQorI2RlZmluZSBfX05SX0JTRDQzX3BhdXNlCQkoX19OUl9CU0Q0MyArICAyOSkKKyNkZWZpbmUgX19OUl9CU0Q0M191dGltZQkJKF9fTlJfQlNENDMgKyAgMzApCisjZGVmaW5lIF9fTlJfQlNENDNfc3R0eQkJCShfX05SX0JTRDQzICsgIDMxKQorI2RlZmluZSBfX05SX0JTRDQzX2d0dHkJCQkoX19OUl9CU0Q0MyArICAzMikKKyNkZWZpbmUgX19OUl9CU0Q0M19hY2Nlc3MJCShfX05SX0JTRDQzICsgIDMzKQorI2RlZmluZSBfX05SX0JTRDQzX25pY2UJCQkoX19OUl9CU0Q0MyArICAzNCkKKyNkZWZpbmUgX19OUl9CU0Q0M19mdGltZQkJKF9fTlJfQlNENDMgKyAgMzUpCisjZGVmaW5lIF9fTlJfQlNENDNfc3luYwkJCShfX05SX0JTRDQzICsgIDM2KQorI2RlZmluZSBfX05SX0JTRDQzX2tpbGwJCQkoX19OUl9CU0Q0MyArICAzNykKKyNkZWZpbmUgX19OUl9CU0Q0M19zdGF0CQkJKF9fTlJfQlNENDMgKyAgMzgpCisjZGVmaW5lIF9fTlJfQlNENDNfb2xkc2V0cGdycAkJKF9fTlJfQlNENDMgKyAgMzkpCisjZGVmaW5lIF9fTlJfQlNENDNfbHN0YXQJCShfX05SX0JTRDQzICsgIDQwKQorI2RlZmluZSBfX05SX0JTRDQzX2R1cAkJCShfX05SX0JTRDQzICsgIDQxKQorI2RlZmluZSBfX05SX0JTRDQzX3BpcGUJCQkoX19OUl9CU0Q0MyArICA0MikKKyNkZWZpbmUgX19OUl9CU0Q0M190aW1lcwkJKF9fTlJfQlNENDMgKyAgNDMpCisjZGVmaW5lIF9fTlJfQlNENDNfcHJvZmlsCQkoX19OUl9CU0Q0MyArICA0NCkKKyNkZWZpbmUgX19OUl9CU0Q0M19tc2dzeXMJCShfX05SX0JTRDQzICsgIDQ1KQorI2RlZmluZSBfX05SX0JTRDQzX3NldGdpZAkJKF9fTlJfQlNENDMgKyAgNDYpCisjZGVmaW5lIF9fTlJfQlNENDNfZ2V0Z2lkCQkoX19OUl9CU0Q0MyArICA0NykKKyNkZWZpbmUgX19OUl9CU0Q0M19zc2lnCQkJKF9fTlJfQlNENDMgKyAgNDgpCisjZGVmaW5lIF9fTlJfQlNENDNfcmVzZXJ2ZWQxCQkoX19OUl9CU0Q0MyArICA0OSkKKyNkZWZpbmUgX19OUl9CU0Q0M19yZXNlcnZlZDIJCShfX05SX0JTRDQzICsgIDUwKQorI2RlZmluZSBfX05SX0JTRDQzX3N5c2FjY3QJCShfX05SX0JTRDQzICsgIDUxKQorI2RlZmluZSBfX05SX0JTRDQzX3BoeXMJCQkoX19OUl9CU0Q0MyArICA1MikKKyNkZWZpbmUgX19OUl9CU0Q0M19sb2NrCQkJKF9fTlJfQlNENDMgKyAgNTMpCisjZGVmaW5lIF9fTlJfQlNENDNfaW9jdGwJCShfX05SX0JTRDQzICsgIDU0KQorI2RlZmluZSBfX05SX0JTRDQzX3JlYm9vdAkJKF9fTlJfQlNENDMgKyAgNTUpCisjZGVmaW5lIF9fTlJfQlNENDNfbXB4Y2hhbgkJKF9fTlJfQlNENDMgKyAgNTYpCisjZGVmaW5lIF9fTlJfQlNENDNfc3ltbGluawkJKF9fTlJfQlNENDMgKyAgNTcpCisjZGVmaW5lIF9fTlJfQlNENDNfcmVhZGxpbmsJCShfX05SX0JTRDQzICsgIDU4KQorI2RlZmluZSBfX05SX0JTRDQzX2V4ZWN2ZQkJKF9fTlJfQlNENDMgKyAgNTkpCisjZGVmaW5lIF9fTlJfQlNENDNfdW1hc2sJCShfX05SX0JTRDQzICsgIDYwKQorI2RlZmluZSBfX05SX0JTRDQzX2Nocm9vdAkJKF9fTlJfQlNENDMgKyAgNjEpCisjZGVmaW5lIF9fTlJfQlNENDNfZnN0YXQJCShfX05SX0JTRDQzICsgIDYyKQorI2RlZmluZSBfX05SX0JTRDQzX3Jlc2VydmVkMwkJKF9fTlJfQlNENDMgKyAgNjMpCisjZGVmaW5lIF9fTlJfQlNENDNfZ2V0cGFnZXNpemUJCShfX05SX0JTRDQzICsgIDY0KQorI2RlZmluZSBfX05SX0JTRDQzX21yZW1hcAkJKF9fTlJfQlNENDMgKyAgNjUpCisjZGVmaW5lIF9fTlJfQlNENDNfdmZvcmsJCShfX05SX0JTRDQzICsgIDY2KQorI2RlZmluZSBfX05SX0JTRDQzX3ZyZWFkCQkoX19OUl9CU0Q0MyArICA2NykKKyNkZWZpbmUgX19OUl9CU0Q0M192d3JpdGUJCShfX05SX0JTRDQzICsgIDY4KQorI2RlZmluZSBfX05SX0JTRDQzX3NicmsJCQkoX19OUl9CU0Q0MyArICA2OSkKKyNkZWZpbmUgX19OUl9CU0Q0M19zc3RrCQkJKF9fTlJfQlNENDMgKyAgNzApCisjZGVmaW5lIF9fTlJfQlNENDNfbW1hcAkJCShfX05SX0JTRDQzICsgIDcxKQorI2RlZmluZSBfX05SX0JTRDQzX3ZhZHZpc2UJCShfX05SX0JTRDQzICsgIDcyKQorI2RlZmluZSBfX05SX0JTRDQzX211bm1hcAkJKF9fTlJfQlNENDMgKyAgNzMpCisjZGVmaW5lIF9fTlJfQlNENDNfbXByb3RlY3QJCShfX05SX0JTRDQzICsgIDc0KQorI2RlZmluZSBfX05SX0JTRDQzX21hZHZpc2UJCShfX05SX0JTRDQzICsgIDc1KQorI2RlZmluZSBfX05SX0JTRDQzX3ZoYW5ndXAJCShfX05SX0JTRDQzICsgIDc2KQorI2RlZmluZSBfX05SX0JTRDQzX3ZsaW1pdAkJKF9fTlJfQlNENDMgKyAgNzcpCisjZGVmaW5lIF9fTlJfQlNENDNfbWluY29yZQkJKF9fTlJfQlNENDMgKyAgNzgpCisjZGVmaW5lIF9fTlJfQlNENDNfZ2V0Z3JvdXBzCQkoX19OUl9CU0Q0MyArICA3OSkKKyNkZWZpbmUgX19OUl9CU0Q0M19zZXRncm91cHMJCShfX05SX0JTRDQzICsgIDgwKQorI2RlZmluZSBfX05SX0JTRDQzX2dldHBncnAJCShfX05SX0JTRDQzICsgIDgxKQorI2RlZmluZSBfX05SX0JTRDQzX3NldHBncnAJCShfX05SX0JTRDQzICsgIDgyKQorI2RlZmluZSBfX05SX0JTRDQzX3NldGl0aW1lcgkJKF9fTlJfQlNENDMgKyAgODMpCisjZGVmaW5lIF9fTlJfQlNENDNfd2FpdDMJCShfX05SX0JTRDQzICsgIDg0KQorI2RlZmluZSBfX05SX0JTRDQzX3N3YXBvbgkJKF9fTlJfQlNENDMgKyAgODUpCisjZGVmaW5lIF9fTlJfQlNENDNfZ2V0aXRpbWVyCQkoX19OUl9CU0Q0MyArICA4NikKKyNkZWZpbmUgX19OUl9CU0Q0M19nZXRob3N0bmFtZQkJKF9fTlJfQlNENDMgKyAgODcpCisjZGVmaW5lIF9fTlJfQlNENDNfc2V0aG9zdG5hbWUJCShfX05SX0JTRDQzICsgIDg4KQorI2RlZmluZSBfX05SX0JTRDQzX2dldGR0YWJsZXNpemUJKF9fTlJfQlNENDMgKyAgODkpCisjZGVmaW5lIF9fTlJfQlNENDNfZHVwMgkJCShfX05SX0JTRDQzICsgIDkwKQorI2RlZmluZSBfX05SX0JTRDQzX2dldGRvcHQJCShfX05SX0JTRDQzICsgIDkxKQorI2RlZmluZSBfX05SX0JTRDQzX2ZjbnRsCQkoX19OUl9CU0Q0MyArICA5MikKKyNkZWZpbmUgX19OUl9CU0Q0M19zZWxlY3QJCShfX05SX0JTRDQzICsgIDkzKQorI2RlZmluZSBfX05SX0JTRDQzX3NldGRvcHQJCShfX05SX0JTRDQzICsgIDk0KQorI2RlZmluZSBfX05SX0JTRDQzX2ZzeW5jCQkoX19OUl9CU0Q0MyArICA5NSkKKyNkZWZpbmUgX19OUl9CU0Q0M19zZXRwcmlvcml0eQkJKF9fTlJfQlNENDMgKyAgOTYpCisjZGVmaW5lIF9fTlJfQlNENDNfc29ja2V0CQkoX19OUl9CU0Q0MyArICA5NykKKyNkZWZpbmUgX19OUl9CU0Q0M19jb25uZWN0CQkoX19OUl9CU0Q0MyArICA5OCkKKyNkZWZpbmUgX19OUl9CU0Q0M19vbGRhY2NlcHQJCShfX05SX0JTRDQzICsgIDk5KQorI2RlZmluZSBfX05SX0JTRDQzX2dldHByaW9yaXR5CQkoX19OUl9CU0Q0MyArIDEwMCkKKyNkZWZpbmUgX19OUl9CU0Q0M19zZW5kCQkJKF9fTlJfQlNENDMgKyAxMDEpCisjZGVmaW5lIF9fTlJfQlNENDNfcmVjdgkJCShfX05SX0JTRDQzICsgMTAyKQorI2RlZmluZSBfX05SX0JTRDQzX3NpZ3JldHVybgkJKF9fTlJfQlNENDMgKyAxMDMpCisjZGVmaW5lIF9fTlJfQlNENDNfYmluZAkJCShfX05SX0JTRDQzICsgMTA0KQorI2RlZmluZSBfX05SX0JTRDQzX3NldHNvY2tvcHQJCShfX05SX0JTRDQzICsgMTA1KQorI2RlZmluZSBfX05SX0JTRDQzX2xpc3RlbgkJKF9fTlJfQlNENDMgKyAxMDYpCisjZGVmaW5lIF9fTlJfQlNENDNfdnRpbWVzCQkoX19OUl9CU0Q0MyArIDEwNykKKyNkZWZpbmUgX19OUl9CU0Q0M19zaWd2ZWMJCShfX05SX0JTRDQzICsgMTA4KQorI2RlZmluZSBfX05SX0JTRDQzX3NpZ2Jsb2NrCQkoX19OUl9CU0Q0MyArIDEwOSkKKyNkZWZpbmUgX19OUl9CU0Q0M19zaWdzZXRtYXNrCQkoX19OUl9CU0Q0MyArIDExMCkKKyNkZWZpbmUgX19OUl9CU0Q0M19zaWdwYXVzZQkJKF9fTlJfQlNENDMgKyAxMTEpCisjZGVmaW5lIF9fTlJfQlNENDNfc2lnc3RhY2sJCShfX05SX0JTRDQzICsgMTEyKQorI2RlZmluZSBfX05SX0JTRDQzX29sZHJlY3Ztc2cJCShfX05SX0JTRDQzICsgMTEzKQorI2RlZmluZSBfX05SX0JTRDQzX29sZHNlbmRtc2cJCShfX05SX0JTRDQzICsgMTE0KQorI2RlZmluZSBfX05SX0JTRDQzX3Z0cmFjZQkJKF9fTlJfQlNENDMgKyAxMTUpCisjZGVmaW5lIF9fTlJfQlNENDNfZ2V0dGltZW9mZGF5CQkoX19OUl9CU0Q0MyArIDExNikKKyNkZWZpbmUgX19OUl9CU0Q0M19nZXRydXNhZ2UJCShfX05SX0JTRDQzICsgMTE3KQorI2RlZmluZSBfX05SX0JTRDQzX2dldHNvY2tvcHQJCShfX05SX0JTRDQzICsgMTE4KQorI2RlZmluZSBfX05SX0JTRDQzX3Jlc2VydmVkNAkJKF9fTlJfQlNENDMgKyAxMTkpCisjZGVmaW5lIF9fTlJfQlNENDNfcmVhZHYJCShfX05SX0JTRDQzICsgMTIwKQorI2RlZmluZSBfX05SX0JTRDQzX3dyaXRldgkJKF9fTlJfQlNENDMgKyAxMjEpCisjZGVmaW5lIF9fTlJfQlNENDNfc2V0dGltZW9mZGF5CQkoX19OUl9CU0Q0MyArIDEyMikKKyNkZWZpbmUgX19OUl9CU0Q0M19mY2hvd24JCShfX05SX0JTRDQzICsgMTIzKQorI2RlZmluZSBfX05SX0JTRDQzX2ZjaG1vZAkJKF9fTlJfQlNENDMgKyAxMjQpCisjZGVmaW5lIF9fTlJfQlNENDNfb2xkcmVjdmZyb20JCShfX05SX0JTRDQzICsgMTI1KQorI2RlZmluZSBfX05SX0JTRDQzX3NldHJldWlkCQkoX19OUl9CU0Q0MyArIDEyNikKKyNkZWZpbmUgX19OUl9CU0Q0M19zZXRyZWdpZAkJKF9fTlJfQlNENDMgKyAxMjcpCisjZGVmaW5lIF9fTlJfQlNENDNfcmVuYW1lCQkoX19OUl9CU0Q0MyArIDEyOCkKKyNkZWZpbmUgX19OUl9CU0Q0M190cnVuY2F0ZQkJKF9fTlJfQlNENDMgKyAxMjkpCisjZGVmaW5lIF9fTlJfQlNENDNfZnRydW5jYXRlCQkoX19OUl9CU0Q0MyArIDEzMCkKKyNkZWZpbmUgX19OUl9CU0Q0M19mbG9jawkJKF9fTlJfQlNENDMgKyAxMzEpCisjZGVmaW5lIF9fTlJfQlNENDNfc2Vtc3lzCQkoX19OUl9CU0Q0MyArIDEzMikKKyNkZWZpbmUgX19OUl9CU0Q0M19zZW5kdG8JCShfX05SX0JTRDQzICsgMTMzKQorI2RlZmluZSBfX05SX0JTRDQzX3NodXRkb3duCQkoX19OUl9CU0Q0MyArIDEzNCkKKyNkZWZpbmUgX19OUl9CU0Q0M19zb2NrZXRwYWlyCQkoX19OUl9CU0Q0MyArIDEzNSkKKyNkZWZpbmUgX19OUl9CU0Q0M19ta2RpcgkJKF9fTlJfQlNENDMgKyAxMzYpCisjZGVmaW5lIF9fTlJfQlNENDNfcm1kaXIJCShfX05SX0JTRDQzICsgMTM3KQorI2RlZmluZSBfX05SX0JTRDQzX3V0aW1lcwkJKF9fTlJfQlNENDMgKyAxMzgpCisjZGVmaW5lIF9fTlJfQlNENDNfc2lnY2xlYW51cAkJKF9fTlJfQlNENDMgKyAxMzkpCisjZGVmaW5lIF9fTlJfQlNENDNfYWRqdGltZQkJKF9fTlJfQlNENDMgKyAxNDApCisjZGVmaW5lIF9fTlJfQlNENDNfb2xkZ2V0cGVlcm5hbWUJKF9fTlJfQlNENDMgKyAxNDEpCisjZGVmaW5lIF9fTlJfQlNENDNfZ2V0aG9zdGlkCQkoX19OUl9CU0Q0MyArIDE0MikKKyNkZWZpbmUgX19OUl9CU0Q0M19zZXRob3N0aWQJCShfX05SX0JTRDQzICsgMTQzKQorI2RlZmluZSBfX05SX0JTRDQzX2dldHJsaW1pdAkJKF9fTlJfQlNENDMgKyAxNDQpCisjZGVmaW5lIF9fTlJfQlNENDNfc2V0cmxpbWl0CQkoX19OUl9CU0Q0MyArIDE0NSkKKyNkZWZpbmUgX19OUl9CU0Q0M19raWxscGcJCShfX05SX0JTRDQzICsgMTQ2KQorI2RlZmluZSBfX05SX0JTRDQzX3NobXN5cwkJKF9fTlJfQlNENDMgKyAxNDcpCisjZGVmaW5lIF9fTlJfQlNENDNfcXVvdGEJCShfX05SX0JTRDQzICsgMTQ4KQorI2RlZmluZSBfX05SX0JTRDQzX3FxdW90YQkJKF9fTlJfQlNENDMgKyAxNDkpCisjZGVmaW5lIF9fTlJfQlNENDNfb2xkZ2V0c29ja25hbWUJKF9fTlJfQlNENDMgKyAxNTApCisjZGVmaW5lIF9fTlJfQlNENDNfc3lzbWlwcwkJKF9fTlJfQlNENDMgKyAxNTEpCisjZGVmaW5lIF9fTlJfQlNENDNfY2FjaGVmbHVzaAkJKF9fTlJfQlNENDMgKyAxNTIpCisjZGVmaW5lIF9fTlJfQlNENDNfY2FjaGVjdGwJCShfX05SX0JTRDQzICsgMTUzKQorI2RlZmluZSBfX05SX0JTRDQzX2RlYnVnCQkoX19OUl9CU0Q0MyArIDE1NCkKKyNkZWZpbmUgX19OUl9CU0Q0M19yZXNlcnZlZDUJCShfX05SX0JTRDQzICsgMTU1KQorI2RlZmluZSBfX05SX0JTRDQzX3Jlc2VydmVkNgkJKF9fTlJfQlNENDMgKyAxNTYpCisjZGVmaW5lIF9fTlJfQlNENDNfbmZzX21vdW50CQkoX19OUl9CU0Q0MyArIDE1NykKKyNkZWZpbmUgX19OUl9CU0Q0M19uZnNfc3ZjCQkoX19OUl9CU0Q0MyArIDE1OCkKKyNkZWZpbmUgX19OUl9CU0Q0M19nZXRkaXJlbnRyaWVzCShfX05SX0JTRDQzICsgMTU5KQorI2RlZmluZSBfX05SX0JTRDQzX3N0YXRmcwkJKF9fTlJfQlNENDMgKyAxNjApCisjZGVmaW5lIF9fTlJfQlNENDNfZnN0YXRmcwkJKF9fTlJfQlNENDMgKyAxNjEpCisjZGVmaW5lIF9fTlJfQlNENDNfdW5tb3VudAkJKF9fTlJfQlNENDMgKyAxNjIpCisjZGVmaW5lIF9fTlJfQlNENDNfYXN5bmNfZGFlbW9uCQkoX19OUl9CU0Q0MyArIDE2MykKKyNkZWZpbmUgX19OUl9CU0Q0M19uZnNfZ2V0ZmgJCShfX05SX0JTRDQzICsgMTY0KQorI2RlZmluZSBfX05SX0JTRDQzX2dldGRvbWFpbm5hbWUJKF9fTlJfQlNENDMgKyAxNjUpCisjZGVmaW5lIF9fTlJfQlNENDNfc2V0ZG9tYWlubmFtZQkoX19OUl9CU0Q0MyArIDE2NikKKyNkZWZpbmUgX19OUl9CU0Q0M19wY2ZzX21vdW50CQkoX19OUl9CU0Q0MyArIDE2NykKKyNkZWZpbmUgX19OUl9CU0Q0M19xdW90YWN0bAkJKF9fTlJfQlNENDMgKyAxNjgpCisjZGVmaW5lIF9fTlJfQlNENDNfb2xkZXhwb3J0ZnMJCShfX05SX0JTRDQzICsgMTY5KQorI2RlZmluZSBfX05SX0JTRDQzX3Ntb3VudAkJKF9fTlJfQlNENDMgKyAxNzApCisjZGVmaW5lIF9fTlJfQlNENDNfbWlwc2h3Y29uZgkJKF9fTlJfQlNENDMgKyAxNzEpCisjZGVmaW5lIF9fTlJfQlNENDNfZXhwb3J0ZnMJCShfX05SX0JTRDQzICsgMTcyKQorI2RlZmluZSBfX05SX0JTRDQzX25mc2ZoX29wZW4JCShfX05SX0JTRDQzICsgMTczKQorI2RlZmluZSBfX05SX0JTRDQzX2xpYmF0dGFjaAkJKF9fTlJfQlNENDMgKyAxNzQpCisjZGVmaW5lIF9fTlJfQlNENDNfbGliZGV0YWNoCQkoX19OUl9CU0Q0MyArIDE3NSkKKyNkZWZpbmUgX19OUl9CU0Q0M19hY2NlcHQJCShfX05SX0JTRDQzICsgMTc2KQorI2RlZmluZSBfX05SX0JTRDQzX3Jlc2VydmVkNwkJKF9fTlJfQlNENDMgKyAxNzcpCisjZGVmaW5lIF9fTlJfQlNENDNfcmVzZXJ2ZWQ4CQkoX19OUl9CU0Q0MyArIDE3OCkKKyNkZWZpbmUgX19OUl9CU0Q0M19yZWN2bXNnCQkoX19OUl9CU0Q0MyArIDE3OSkKKyNkZWZpbmUgX19OUl9CU0Q0M19yZWN2ZnJvbQkJKF9fTlJfQlNENDMgKyAxODApCisjZGVmaW5lIF9fTlJfQlNENDNfc2VuZG1zZwkJKF9fTlJfQlNENDMgKyAxODEpCisjZGVmaW5lIF9fTlJfQlNENDNfZ2V0cGVlcm5hbWUJCShfX05SX0JTRDQzICsgMTgyKQorI2RlZmluZSBfX05SX0JTRDQzX2dldHNvY2tuYW1lCQkoX19OUl9CU0Q0MyArIDE4MykKKyNkZWZpbmUgX19OUl9CU0Q0M19hcmVhZAkJKF9fTlJfQlNENDMgKyAxODQpCisjZGVmaW5lIF9fTlJfQlNENDNfYXdyaXRlCQkoX19OUl9CU0Q0MyArIDE4NSkKKyNkZWZpbmUgX19OUl9CU0Q0M19saXN0aW8JCShfX05SX0JTRDQzICsgMTg2KQorI2RlZmluZSBfX05SX0JTRDQzX2FjYW5jZWwJCShfX05SX0JTRDQzICsgMTg3KQorI2RlZmluZSBfX05SX0JTRDQzX2FzdGF0dXMJCShfX05SX0JTRDQzICsgMTg4KQorI2RlZmluZSBfX05SX0JTRDQzX2F3YWl0CQkoX19OUl9CU0Q0MyArIDE4OSkKKyNkZWZpbmUgX19OUl9CU0Q0M19hcmVhZHYJCShfX05SX0JTRDQzICsgMTkwKQorI2RlZmluZSBfX05SX0JTRDQzX2F3cml0ZXYJCShfX05SX0JTRDQzICsgMTkxKQorCisvKgorICogUE9TSVggc3lzY2FsbHMgYXJlIGluIHRoZSByYW5nZSBmcm9tIDMwMDAgdG8gMzk5OQorICovCisjZGVmaW5lIF9fTlJfUE9TSVgJCQkzMDAwCisjZGVmaW5lIF9fTlJfUE9TSVhfc3lzY2FsbAkJKF9fTlJfUE9TSVggKyAgIDApCisjZGVmaW5lIF9fTlJfUE9TSVhfZXhpdAkJCShfX05SX1BPU0lYICsgICAxKQorI2RlZmluZSBfX05SX1BPU0lYX2ZvcmsJCQkoX19OUl9QT1NJWCArICAgMikKKyNkZWZpbmUgX19OUl9QT1NJWF9yZWFkCQkJKF9fTlJfUE9TSVggKyAgIDMpCisjZGVmaW5lIF9fTlJfUE9TSVhfd3JpdGUJCShfX05SX1BPU0lYICsgICA0KQorI2RlZmluZSBfX05SX1BPU0lYX29wZW4JCQkoX19OUl9QT1NJWCArICAgNSkKKyNkZWZpbmUgX19OUl9QT1NJWF9jbG9zZQkJKF9fTlJfUE9TSVggKyAgIDYpCisjZGVmaW5lIF9fTlJfUE9TSVhfd2FpdAkJCShfX05SX1BPU0lYICsgICA3KQorI2RlZmluZSBfX05SX1BPU0lYX2NyZWF0CQkoX19OUl9QT1NJWCArICAgOCkKKyNkZWZpbmUgX19OUl9QT1NJWF9saW5rCQkJKF9fTlJfUE9TSVggKyAgIDkpCisjZGVmaW5lIF9fTlJfUE9TSVhfdW5saW5rCQkoX19OUl9QT1NJWCArICAxMCkKKyNkZWZpbmUgX19OUl9QT1NJWF9leGVjCQkJKF9fTlJfUE9TSVggKyAgMTEpCisjZGVmaW5lIF9fTlJfUE9TSVhfY2hkaXIJCShfX05SX1BPU0lYICsgIDEyKQorI2RlZmluZSBfX05SX1BPU0lYX2d0aW1lCQkoX19OUl9QT1NJWCArICAxMykKKyNkZWZpbmUgX19OUl9QT1NJWF9ta25vZAkJKF9fTlJfUE9TSVggKyAgMTQpCisjZGVmaW5lIF9fTlJfUE9TSVhfY2htb2QJCShfX05SX1BPU0lYICsgIDE1KQorI2RlZmluZSBfX05SX1BPU0lYX2Nob3duCQkoX19OUl9QT1NJWCArICAxNikKKyNkZWZpbmUgX19OUl9QT1NJWF9zYnJlYWsJCShfX05SX1BPU0lYICsgIDE3KQorI2RlZmluZSBfX05SX1BPU0lYX3N0YXQJCQkoX19OUl9QT1NJWCArICAxOCkKKyNkZWZpbmUgX19OUl9QT1NJWF9sc2VlawkJKF9fTlJfUE9TSVggKyAgMTkpCisjZGVmaW5lIF9fTlJfUE9TSVhfZ2V0cGlkCQkoX19OUl9QT1NJWCArICAyMCkKKyNkZWZpbmUgX19OUl9QT1NJWF9tb3VudAkJKF9fTlJfUE9TSVggKyAgMjEpCisjZGVmaW5lIF9fTlJfUE9TSVhfdW1vdW50CQkoX19OUl9QT1NJWCArICAyMikKKyNkZWZpbmUgX19OUl9QT1NJWF9zZXR1aWQJCShfX05SX1BPU0lYICsgIDIzKQorI2RlZmluZSBfX05SX1BPU0lYX2dldHVpZAkJKF9fTlJfUE9TSVggKyAgMjQpCisjZGVmaW5lIF9fTlJfUE9TSVhfc3RpbWUJCShfX05SX1BPU0lYICsgIDI1KQorI2RlZmluZSBfX05SX1BPU0lYX3B0cmFjZQkJKF9fTlJfUE9TSVggKyAgMjYpCisjZGVmaW5lIF9fTlJfUE9TSVhfYWxhcm0JCShfX05SX1BPU0lYICsgIDI3KQorI2RlZmluZSBfX05SX1BPU0lYX2ZzdGF0CQkoX19OUl9QT1NJWCArICAyOCkKKyNkZWZpbmUgX19OUl9QT1NJWF9wYXVzZQkJKF9fTlJfUE9TSVggKyAgMjkpCisjZGVmaW5lIF9fTlJfUE9TSVhfdXRpbWUJCShfX05SX1BPU0lYICsgIDMwKQorI2RlZmluZSBfX05SX1BPU0lYX3N0dHkJCQkoX19OUl9QT1NJWCArICAzMSkKKyNkZWZpbmUgX19OUl9QT1NJWF9ndHR5CQkJKF9fTlJfUE9TSVggKyAgMzIpCisjZGVmaW5lIF9fTlJfUE9TSVhfYWNjZXNzCQkoX19OUl9QT1NJWCArICAzMykKKyNkZWZpbmUgX19OUl9QT1NJWF9uaWNlCQkJKF9fTlJfUE9TSVggKyAgMzQpCisjZGVmaW5lIF9fTlJfUE9TSVhfc3RhdGZzCQkoX19OUl9QT1NJWCArICAzNSkKKyNkZWZpbmUgX19OUl9QT1NJWF9zeW5jCQkJKF9fTlJfUE9TSVggKyAgMzYpCisjZGVmaW5lIF9fTlJfUE9TSVhfa2lsbAkJCShfX05SX1BPU0lYICsgIDM3KQorI2RlZmluZSBfX05SX1BPU0lYX2ZzdGF0ZnMJCShfX05SX1BPU0lYICsgIDM4KQorI2RlZmluZSBfX05SX1BPU0lYX2dldHBncnAJCShfX05SX1BPU0lYICsgIDM5KQorI2RlZmluZSBfX05SX1BPU0lYX3N5c3NnaQkJKF9fTlJfUE9TSVggKyAgNDApCisjZGVmaW5lIF9fTlJfUE9TSVhfZHVwCQkJKF9fTlJfUE9TSVggKyAgNDEpCisjZGVmaW5lIF9fTlJfUE9TSVhfcGlwZQkJCShfX05SX1BPU0lYICsgIDQyKQorI2RlZmluZSBfX05SX1BPU0lYX3RpbWVzCQkoX19OUl9QT1NJWCArICA0MykKKyNkZWZpbmUgX19OUl9QT1NJWF9wcm9maWwJCShfX05SX1BPU0lYICsgIDQ0KQorI2RlZmluZSBfX05SX1BPU0lYX2xvY2sJCQkoX19OUl9QT1NJWCArICA0NSkKKyNkZWZpbmUgX19OUl9QT1NJWF9zZXRnaWQJCShfX05SX1BPU0lYICsgIDQ2KQorI2RlZmluZSBfX05SX1BPU0lYX2dldGdpZAkJKF9fTlJfUE9TSVggKyAgNDcpCisjZGVmaW5lIF9fTlJfUE9TSVhfc2lnCQkJKF9fTlJfUE9TSVggKyAgNDgpCisjZGVmaW5lIF9fTlJfUE9TSVhfbXNnc3lzCQkoX19OUl9QT1NJWCArICA0OSkKKyNkZWZpbmUgX19OUl9QT1NJWF9zeXNtaXBzCQkoX19OUl9QT1NJWCArICA1MCkKKyNkZWZpbmUgX19OUl9QT1NJWF9zeXNhY2N0CQkoX19OUl9QT1NJWCArICA1MSkKKyNkZWZpbmUgX19OUl9QT1NJWF9zaG1zeXMJCShfX05SX1BPU0lYICsgIDUyKQorI2RlZmluZSBfX05SX1BPU0lYX3NlbXN5cwkJKF9fTlJfUE9TSVggKyAgNTMpCisjZGVmaW5lIF9fTlJfUE9TSVhfaW9jdGwJCShfX05SX1BPU0lYICsgIDU0KQorI2RlZmluZSBfX05SX1BPU0lYX3VhZG1pbgkJKF9fTlJfUE9TSVggKyAgNTUpCisjZGVmaW5lIF9fTlJfUE9TSVhfZXhjaAkJCShfX05SX1BPU0lYICsgIDU2KQorI2RlZmluZSBfX05SX1BPU0lYX3V0c3N5cwkJKF9fTlJfUE9TSVggKyAgNTcpCisjZGVmaW5lIF9fTlJfUE9TSVhfVVNHX3Jlc2VydmVkMQkoX19OUl9QT1NJWCArICA1OCkKKyNkZWZpbmUgX19OUl9QT1NJWF9leGVjZQkJKF9fTlJfUE9TSVggKyAgNTkpCisjZGVmaW5lIF9fTlJfUE9TSVhfdW1hc2sJCShfX05SX1BPU0lYICsgIDYwKQorI2RlZmluZSBfX05SX1BPU0lYX2Nocm9vdAkJKF9fTlJfUE9TSVggKyAgNjEpCisjZGVmaW5lIF9fTlJfUE9TSVhfZmNudGwJCShfX05SX1BPU0lYICsgIDYyKQorI2RlZmluZSBfX05SX1BPU0lYX3VsaW1pdAkJKF9fTlJfUE9TSVggKyAgNjMpCisjZGVmaW5lIF9fTlJfUE9TSVhfU0FGQVJJNF9yZXNlcnZlZDEJKF9fTlJfUE9TSVggKyAgNjQpCisjZGVmaW5lIF9fTlJfUE9TSVhfU0FGQVJJNF9yZXNlcnZlZDIJKF9fTlJfUE9TSVggKyAgNjUpCisjZGVmaW5lIF9fTlJfUE9TSVhfU0FGQVJJNF9yZXNlcnZlZDMJKF9fTlJfUE9TSVggKyAgNjYpCisjZGVmaW5lIF9fTlJfUE9TSVhfU0FGQVJJNF9yZXNlcnZlZDQJKF9fTlJfUE9TSVggKyAgNjcpCisjZGVmaW5lIF9fTlJfUE9TSVhfU0FGQVJJNF9yZXNlcnZlZDUJKF9fTlJfUE9TSVggKyAgNjgpCisjZGVmaW5lIF9fTlJfUE9TSVhfU0FGQVJJNF9yZXNlcnZlZDYJKF9fTlJfUE9TSVggKyAgNjkpCisjZGVmaW5lIF9fTlJfUE9TSVhfYWR2ZnMJCShfX05SX1BPU0lYICsgIDcwKQorI2RlZmluZSBfX05SX1BPU0lYX3VuYWR2ZnMJCShfX05SX1BPU0lYICsgIDcxKQorI2RlZmluZSBfX05SX1BPU0lYX3Jtb3VudAkJKF9fTlJfUE9TSVggKyAgNzIpCisjZGVmaW5lIF9fTlJfUE9TSVhfcnVtb3VudAkJKF9fTlJfUE9TSVggKyAgNzMpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmZzdGFydAkJKF9fTlJfUE9TSVggKyAgNzQpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQxCQkoX19OUl9QT1NJWCArICA3NSkKKyNkZWZpbmUgX19OUl9QT1NJWF9yZGVidWcJCShfX05SX1BPU0lYICsgIDc2KQorI2RlZmluZSBfX05SX1BPU0lYX3Jmc3RvcAkJKF9fTlJfUE9TSVggKyAgNzcpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmZzeXMJCShfX05SX1BPU0lYICsgIDc4KQorI2RlZmluZSBfX05SX1BPU0lYX3JtZGlyCQkoX19OUl9QT1NJWCArICA3OSkKKyNkZWZpbmUgX19OUl9QT1NJWF9ta2RpcgkJKF9fTlJfUE9TSVggKyAgODApCisjZGVmaW5lIF9fTlJfUE9TSVhfZ2V0ZGVudHMJCShfX05SX1BPU0lYICsgIDgxKQorI2RlZmluZSBfX05SX1BPU0lYX3NnaW5hcAkJKF9fTlJfUE9TSVggKyAgODIpCisjZGVmaW5lIF9fTlJfUE9TSVhfc2dpa29wdAkJKF9fTlJfUE9TSVggKyAgODMpCisjZGVmaW5lIF9fTlJfUE9TSVhfc3lzZnMJCShfX05SX1BPU0lYICsgIDg0KQorI2RlZmluZSBfX05SX1BPU0lYX2dldG1zZwkJKF9fTlJfUE9TSVggKyAgODUpCisjZGVmaW5lIF9fTlJfUE9TSVhfcHV0bXNnCQkoX19OUl9QT1NJWCArICA4NikKKyNkZWZpbmUgX19OUl9QT1NJWF9wb2xsCQkJKF9fTlJfUE9TSVggKyAgODcpCisjZGVmaW5lIF9fTlJfUE9TSVhfc2lncmV0dXJuCQkoX19OUl9QT1NJWCArICA4OCkKKyNkZWZpbmUgX19OUl9QT1NJWF9hY2NlcHQJCShfX05SX1BPU0lYICsgIDg5KQorI2RlZmluZSBfX05SX1BPU0lYX2JpbmQJCQkoX19OUl9QT1NJWCArICA5MCkKKyNkZWZpbmUgX19OUl9QT1NJWF9jb25uZWN0CQkoX19OUl9QT1NJWCArICA5MSkKKyNkZWZpbmUgX19OUl9QT1NJWF9nZXRob3N0aWQJCShfX05SX1BPU0lYICsgIDkyKQorI2RlZmluZSBfX05SX1BPU0lYX2dldHBlZXJuYW1lCQkoX19OUl9QT1NJWCArICA5MykKKyNkZWZpbmUgX19OUl9QT1NJWF9nZXRzb2NrbmFtZQkJKF9fTlJfUE9TSVggKyAgOTQpCisjZGVmaW5lIF9fTlJfUE9TSVhfZ2V0c29ja29wdAkJKF9fTlJfUE9TSVggKyAgOTUpCisjZGVmaW5lIF9fTlJfUE9TSVhfbGlzdGVuCQkoX19OUl9QT1NJWCArICA5NikKKyNkZWZpbmUgX19OUl9QT1NJWF9yZWN2CQkJKF9fTlJfUE9TSVggKyAgOTcpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVjdmZyb20JCShfX05SX1BPU0lYICsgIDk4KQorI2RlZmluZSBfX05SX1BPU0lYX3JlY3Ztc2cJCShfX05SX1BPU0lYICsgIDk5KQorI2RlZmluZSBfX05SX1BPU0lYX3NlbGVjdAkJKF9fTlJfUE9TSVggKyAxMDApCisjZGVmaW5lIF9fTlJfUE9TSVhfc2VuZAkJCShfX05SX1BPU0lYICsgMTAxKQorI2RlZmluZSBfX05SX1BPU0lYX3NlbmRtc2cJCShfX05SX1BPU0lYICsgMTAyKQorI2RlZmluZSBfX05SX1BPU0lYX3NlbmR0bwkJKF9fTlJfUE9TSVggKyAxMDMpCisjZGVmaW5lIF9fTlJfUE9TSVhfc2V0aG9zdGlkCQkoX19OUl9QT1NJWCArIDEwNCkKKyNkZWZpbmUgX19OUl9QT1NJWF9zZXRzb2Nrb3B0CQkoX19OUl9QT1NJWCArIDEwNSkKKyNkZWZpbmUgX19OUl9QT1NJWF9zaHV0ZG93bgkJKF9fTlJfUE9TSVggKyAxMDYpCisjZGVmaW5lIF9fTlJfUE9TSVhfc29ja2V0CQkoX19OUl9QT1NJWCArIDEwNykKKyNkZWZpbmUgX19OUl9QT1NJWF9nZXRob3N0bmFtZQkJKF9fTlJfUE9TSVggKyAxMDgpCisjZGVmaW5lIF9fTlJfUE9TSVhfc2V0aG9zdG5hbWUJCShfX05SX1BPU0lYICsgMTA5KQorI2RlZmluZSBfX05SX1BPU0lYX2dldGRvbWFpbm5hbWUJKF9fTlJfUE9TSVggKyAxMTApCisjZGVmaW5lIF9fTlJfUE9TSVhfc2V0ZG9tYWlubmFtZQkoX19OUl9QT1NJWCArIDExMSkKKyNkZWZpbmUgX19OUl9QT1NJWF90cnVuY2F0ZQkJKF9fTlJfUE9TSVggKyAxMTIpCisjZGVmaW5lIF9fTlJfUE9TSVhfZnRydW5jYXRlCQkoX19OUl9QT1NJWCArIDExMykKKyNkZWZpbmUgX19OUl9QT1NJWF9yZW5hbWUJCShfX05SX1BPU0lYICsgMTE0KQorI2RlZmluZSBfX05SX1BPU0lYX3N5bWxpbmsJCShfX05SX1BPU0lYICsgMTE1KQorI2RlZmluZSBfX05SX1BPU0lYX3JlYWRsaW5rCQkoX19OUl9QT1NJWCArIDExNikKKyNkZWZpbmUgX19OUl9QT1NJWF9sc3RhdAkJKF9fTlJfUE9TSVggKyAxMTcpCisjZGVmaW5lIF9fTlJfUE9TSVhfbmZzX21vdW50CQkoX19OUl9QT1NJWCArIDExOCkKKyNkZWZpbmUgX19OUl9QT1NJWF9uZnNfc3ZjCQkoX19OUl9QT1NJWCArIDExOSkKKyNkZWZpbmUgX19OUl9QT1NJWF9uZnNfZ2V0ZmgJCShfX05SX1BPU0lYICsgMTIwKQorI2RlZmluZSBfX05SX1BPU0lYX2FzeW5jX2RhZW1vbgkJKF9fTlJfUE9TSVggKyAxMjEpCisjZGVmaW5lIF9fTlJfUE9TSVhfZXhwb3J0ZnMJCShfX05SX1BPU0lYICsgMTIyKQorI2RlZmluZSBfX05SX1BPU0lYX1NHSV9zZXRyZWdpZAkJKF9fTlJfUE9TSVggKyAxMjMpCisjZGVmaW5lIF9fTlJfUE9TSVhfU0dJX3NldHJldWlkCQkoX19OUl9QT1NJWCArIDEyNCkKKyNkZWZpbmUgX19OUl9QT1NJWF9nZXRpdGltZXIJCShfX05SX1BPU0lYICsgMTI1KQorI2RlZmluZSBfX05SX1BPU0lYX3NldGl0aW1lcgkJKF9fTlJfUE9TSVggKyAxMjYpCisjZGVmaW5lIF9fTlJfUE9TSVhfYWRqdGltZQkJKF9fTlJfUE9TSVggKyAxMjcpCisjZGVmaW5lIF9fTlJfUE9TSVhfU0dJX2JzZGdldHRpbWUJKF9fTlJfUE9TSVggKyAxMjgpCisjZGVmaW5lIF9fTlJfUE9TSVhfU0dJX3Nwcm9jCQkoX19OUl9QT1NJWCArIDEyOSkKKyNkZWZpbmUgX19OUl9QT1NJWF9TR0lfcHJjdGwJCShfX05SX1BPU0lYICsgMTMwKQorI2RlZmluZSBfX05SX1BPU0lYX1NHSV9ibGtwcm9jCQkoX19OUl9QT1NJWCArIDEzMSkKKyNkZWZpbmUgX19OUl9QT1NJWF9TR0lfcmVzZXJ2ZWQxCShfX05SX1BPU0lYICsgMTMyKQorI2RlZmluZSBfX05SX1BPU0lYX1NHSV9zZ2lnc2MJCShfX05SX1BPU0lYICsgMTMzKQorI2RlZmluZSBfX05SX1BPU0lYX1NHSV9tbWFwCQkoX19OUl9QT1NJWCArIDEzNCkKKyNkZWZpbmUgX19OUl9QT1NJWF9TR0lfbXVubWFwCQkoX19OUl9QT1NJWCArIDEzNSkKKyNkZWZpbmUgX19OUl9QT1NJWF9TR0lfbXByb3RlY3QJCShfX05SX1BPU0lYICsgMTM2KQorI2RlZmluZSBfX05SX1BPU0lYX1NHSV9tc3luYwkJKF9fTlJfUE9TSVggKyAxMzcpCisjZGVmaW5lIF9fTlJfUE9TSVhfU0dJX21hZHZpc2UJCShfX05SX1BPU0lYICsgMTM4KQorI2RlZmluZSBfX05SX1BPU0lYX1NHSV9tcGluCQkoX19OUl9QT1NJWCArIDEzOSkKKyNkZWZpbmUgX19OUl9QT1NJWF9TR0lfZ2V0cGFnZXNpemUJKF9fTlJfUE9TSVggKyAxNDApCisjZGVmaW5lIF9fTlJfUE9TSVhfU0dJX2xpYmF0dGFjaAkoX19OUl9QT1NJWCArIDE0MSkKKyNkZWZpbmUgX19OUl9QT1NJWF9TR0lfbGliZGV0YWNoCShfX05SX1BPU0lYICsgMTQyKQorI2RlZmluZSBfX05SX1BPU0lYX1NHSV9nZXRwZ3JwCQkoX19OUl9QT1NJWCArIDE0MykKKyNkZWZpbmUgX19OUl9QT1NJWF9TR0lfc2V0cGdycAkJKF9fTlJfUE9TSVggKyAxNDQpCisjZGVmaW5lIF9fTlJfUE9TSVhfU0dJX3Jlc2VydmVkMgkoX19OUl9QT1NJWCArIDE0NSkKKyNkZWZpbmUgX19OUl9QT1NJWF9TR0lfcmVzZXJ2ZWQzCShfX05SX1BPU0lYICsgMTQ2KQorI2RlZmluZSBfX05SX1BPU0lYX1NHSV9yZXNlcnZlZDQJKF9fTlJfUE9TSVggKyAxNDcpCisjZGVmaW5lIF9fTlJfUE9TSVhfU0dJX3Jlc2VydmVkNQkoX19OUl9QT1NJWCArIDE0OCkKKyNkZWZpbmUgX19OUl9QT1NJWF9TR0lfcmVzZXJ2ZWQ2CShfX05SX1BPU0lYICsgMTQ5KQorI2RlZmluZSBfX05SX1BPU0lYX2NhY2hlZmx1c2gJCShfX05SX1BPU0lYICsgMTUwKQorI2RlZmluZSBfX05SX1BPU0lYX2NhY2hlY3RsCQkoX19OUl9QT1NJWCArIDE1MSkKKyNkZWZpbmUgX19OUl9QT1NJWF9mY2hvd24JCShfX05SX1BPU0lYICsgMTUyKQorI2RlZmluZSBfX05SX1BPU0lYX2ZjaG1vZAkJKF9fTlJfUE9TSVggKyAxNTMpCisjZGVmaW5lIF9fTlJfUE9TSVhfd2FpdDMJCShfX05SX1BPU0lYICsgMTU0KQorI2RlZmluZSBfX05SX1BPU0lYX21tYXAJCQkoX19OUl9QT1NJWCArIDE1NSkKKyNkZWZpbmUgX19OUl9QT1NJWF9tdW5tYXAJCShfX05SX1BPU0lYICsgMTU2KQorI2RlZmluZSBfX05SX1BPU0lYX21hZHZpc2UJCShfX05SX1BPU0lYICsgMTU3KQorI2RlZmluZSBfX05SX1BPU0lYX0JTRF9nZXRwYWdlc2l6ZQkoX19OUl9QT1NJWCArIDE1OCkKKyNkZWZpbmUgX19OUl9QT1NJWF9zZXRyZXVpZAkJKF9fTlJfUE9TSVggKyAxNTkpCisjZGVmaW5lIF9fTlJfUE9TSVhfc2V0cmVnaWQJCShfX05SX1BPU0lYICsgMTYwKQorI2RlZmluZSBfX05SX1BPU0lYX3NldHBnaWQJCShfX05SX1BPU0lYICsgMTYxKQorI2RlZmluZSBfX05SX1BPU0lYX2dldGdyb3VwcwkJKF9fTlJfUE9TSVggKyAxNjIpCisjZGVmaW5lIF9fTlJfUE9TSVhfc2V0Z3JvdXBzCQkoX19OUl9QT1NJWCArIDE2MykKKyNkZWZpbmUgX19OUl9QT1NJWF9nZXR0aW1lb2ZkYXkJCShfX05SX1BPU0lYICsgMTY0KQorI2RlZmluZSBfX05SX1BPU0lYX2dldHJ1c2FnZQkJKF9fTlJfUE9TSVggKyAxNjUpCisjZGVmaW5lIF9fTlJfUE9TSVhfZ2V0cmxpbWl0CQkoX19OUl9QT1NJWCArIDE2NikKKyNkZWZpbmUgX19OUl9QT1NJWF9zZXRybGltaXQJCShfX05SX1BPU0lYICsgMTY3KQorI2RlZmluZSBfX05SX1BPU0lYX3dhaXRwaWQJCShfX05SX1BPU0lYICsgMTY4KQorI2RlZmluZSBfX05SX1BPU0lYX2R1cDIJCQkoX19OUl9QT1NJWCArIDE2OSkKKyNkZWZpbmUgX19OUl9QT1NJWF9yZXNlcnZlZDIJCShfX05SX1BPU0lYICsgMTcwKQorI2RlZmluZSBfX05SX1BPU0lYX3Jlc2VydmVkMwkJKF9fTlJfUE9TSVggKyAxNzEpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQ0CQkoX19OUl9QT1NJWCArIDE3MikKKyNkZWZpbmUgX19OUl9QT1NJWF9yZXNlcnZlZDUJCShfX05SX1BPU0lYICsgMTczKQorI2RlZmluZSBfX05SX1BPU0lYX3Jlc2VydmVkNgkJKF9fTlJfUE9TSVggKyAxNzQpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQ3CQkoX19OUl9QT1NJWCArIDE3NSkKKyNkZWZpbmUgX19OUl9QT1NJWF9yZXNlcnZlZDgJCShfX05SX1BPU0lYICsgMTc2KQorI2RlZmluZSBfX05SX1BPU0lYX3Jlc2VydmVkOQkJKF9fTlJfUE9TSVggKyAxNzcpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQxMAkJKF9fTlJfUE9TSVggKyAxNzgpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQxMQkJKF9fTlJfUE9TSVggKyAxNzkpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQxMgkJKF9fTlJfUE9TSVggKyAxODApCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQxMwkJKF9fTlJfUE9TSVggKyAxODEpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQxNAkJKF9fTlJfUE9TSVggKyAxODIpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQxNQkJKF9fTlJfUE9TSVggKyAxODMpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQxNgkJKF9fTlJfUE9TSVggKyAxODQpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQxNwkJKF9fTlJfUE9TSVggKyAxODUpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQxOAkJKF9fTlJfUE9TSVggKyAxODYpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQxOQkJKF9fTlJfUE9TSVggKyAxODcpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQyMAkJKF9fTlJfUE9TSVggKyAxODgpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQyMQkJKF9fTlJfUE9TSVggKyAxODkpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQyMgkJKF9fTlJfUE9TSVggKyAxOTApCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQyMwkJKF9fTlJfUE9TSVggKyAxOTEpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQyNAkJKF9fTlJfUE9TSVggKyAxOTIpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQyNQkJKF9fTlJfUE9TSVggKyAxOTMpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQyNgkJKF9fTlJfUE9TSVggKyAxOTQpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQyNwkJKF9fTlJfUE9TSVggKyAxOTUpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQyOAkJKF9fTlJfUE9TSVggKyAxOTYpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQyOQkJKF9fTlJfUE9TSVggKyAxOTcpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQzMAkJKF9fTlJfUE9TSVggKyAxOTgpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQzMQkJKF9fTlJfUE9TSVggKyAxOTkpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQzMgkJKF9fTlJfUE9TSVggKyAyMDApCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQzMwkJKF9fTlJfUE9TSVggKyAyMDEpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQzNAkJKF9fTlJfUE9TSVggKyAyMDIpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQzNQkJKF9fTlJfUE9TSVggKyAyMDMpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQzNgkJKF9fTlJfUE9TSVggKyAyMDQpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQzNwkJKF9fTlJfUE9TSVggKyAyMDUpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQzOAkJKF9fTlJfUE9TSVggKyAyMDYpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQzOQkJKF9fTlJfUE9TSVggKyAyMDcpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQ0MAkJKF9fTlJfUE9TSVggKyAyMDgpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQ0MQkJKF9fTlJfUE9TSVggKyAyMDkpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQ0MgkJKF9fTlJfUE9TSVggKyAyMTApCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQ0MwkJKF9fTlJfUE9TSVggKyAyMTEpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQ0NAkJKF9fTlJfUE9TSVggKyAyMTIpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQ0NQkJKF9fTlJfUE9TSVggKyAyMTMpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQ0NgkJKF9fTlJfUE9TSVggKyAyMTQpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQ0NwkJKF9fTlJfUE9TSVggKyAyMTUpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQ0OAkJKF9fTlJfUE9TSVggKyAyMTYpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQ0OQkJKF9fTlJfUE9TSVggKyAyMTcpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQ1MAkJKF9fTlJfUE9TSVggKyAyMTgpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQ1MQkJKF9fTlJfUE9TSVggKyAyMTkpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQ1MgkJKF9fTlJfUE9TSVggKyAyMjApCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQ1MwkJKF9fTlJfUE9TSVggKyAyMjEpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQ1NAkJKF9fTlJfUE9TSVggKyAyMjIpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQ1NQkJKF9fTlJfUE9TSVggKyAyMjMpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQ1NgkJKF9fTlJfUE9TSVggKyAyMjQpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQ1NwkJKF9fTlJfUE9TSVggKyAyMjUpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQ1OAkJKF9fTlJfUE9TSVggKyAyMjYpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQ1OQkJKF9fTlJfUE9TSVggKyAyMjcpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQ2MAkJKF9fTlJfUE9TSVggKyAyMjgpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQ2MQkJKF9fTlJfUE9TSVggKyAyMjkpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQ2MgkJKF9fTlJfUE9TSVggKyAyMzApCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQ2MwkJKF9fTlJfUE9TSVggKyAyMzEpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQ2NAkJKF9fTlJfUE9TSVggKyAyMzIpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQ2NQkJKF9fTlJfUE9TSVggKyAyMzMpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQ2NgkJKF9fTlJfUE9TSVggKyAyMzQpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQ2NwkJKF9fTlJfUE9TSVggKyAyMzUpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQ2OAkJKF9fTlJfUE9TSVggKyAyMzYpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQ2OQkJKF9fTlJfUE9TSVggKyAyMzcpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQ3MAkJKF9fTlJfUE9TSVggKyAyMzgpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQ3MQkJKF9fTlJfUE9TSVggKyAyMzkpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQ3MgkJKF9fTlJfUE9TSVggKyAyNDApCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQ3MwkJKF9fTlJfUE9TSVggKyAyNDEpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQ3NAkJKF9fTlJfUE9TSVggKyAyNDIpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQ3NQkJKF9fTlJfUE9TSVggKyAyNDMpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQ3NgkJKF9fTlJfUE9TSVggKyAyNDQpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQ3NwkJKF9fTlJfUE9TSVggKyAyNDUpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQ3OAkJKF9fTlJfUE9TSVggKyAyNDYpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQ3OQkJKF9fTlJfUE9TSVggKyAyNDcpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQ4MAkJKF9fTlJfUE9TSVggKyAyNDgpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQ4MQkJKF9fTlJfUE9TSVggKyAyNDkpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQ4MgkJKF9fTlJfUE9TSVggKyAyNTApCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQ4MwkJKF9fTlJfUE9TSVggKyAyNTEpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQ4NAkJKF9fTlJfUE9TSVggKyAyNTIpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQ4NQkJKF9fTlJfUE9TSVggKyAyNTMpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQ4NgkJKF9fTlJfUE9TSVggKyAyNTQpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQ4NwkJKF9fTlJfUE9TSVggKyAyNTUpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQ4OAkJKF9fTlJfUE9TSVggKyAyNTYpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQ4OQkJKF9fTlJfUE9TSVggKyAyNTcpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQ5MAkJKF9fTlJfUE9TSVggKyAyNTgpCisjZGVmaW5lIF9fTlJfUE9TSVhfcmVzZXJ2ZWQ5MQkJKF9fTlJfUE9TSVggKyAyNTkpCisjZGVmaW5lIF9fTlJfUE9TSVhfbmV0Ym9vdAkJKF9fTlJfUE9TSVggKyAyNjApCisjZGVmaW5lIF9fTlJfUE9TSVhfbmV0dW5ib290CQkoX19OUl9QT1NJWCArIDI2MSkKKyNkZWZpbmUgX19OUl9QT1NJWF9yZHVtcAkJKF9fTlJfUE9TSVggKyAyNjIpCisjZGVmaW5lIF9fTlJfUE9TSVhfc2V0c2lkCQkoX19OUl9QT1NJWCArIDI2MykKKyNkZWZpbmUgX19OUl9QT1NJWF9nZXRtYXhzaWcJCShfX05SX1BPU0lYICsgMjY0KQorI2RlZmluZSBfX05SX1BPU0lYX3NpZ3BlbmRpbmcJCShfX05SX1BPU0lYICsgMjY1KQorI2RlZmluZSBfX05SX1BPU0lYX3NpZ3Byb2NtYXNrCQkoX19OUl9QT1NJWCArIDI2NikKKyNkZWZpbmUgX19OUl9QT1NJWF9zaWdzdXNwZW5kCQkoX19OUl9QT1NJWCArIDI2NykKKyNkZWZpbmUgX19OUl9QT1NJWF9zaWdhY3Rpb24JCShfX05SX1BPU0lYICsgMjY4KQorI2RlZmluZSBfX05SX1BPU0lYX01JUFNfcmVzZXJ2ZWQxCShfX05SX1BPU0lYICsgMjY5KQorI2RlZmluZSBfX05SX1BPU0lYX01JUFNfcmVzZXJ2ZWQyCShfX05SX1BPU0lYICsgMjcwKQorI2RlZmluZSBfX05SX1BPU0lYX01JUFNfcmVzZXJ2ZWQzCShfX05SX1BPU0lYICsgMjcxKQorI2RlZmluZSBfX05SX1BPU0lYX01JUFNfcmVzZXJ2ZWQ0CShfX05SX1BPU0lYICsgMjcyKQorI2RlZmluZSBfX05SX1BPU0lYX01JUFNfcmVzZXJ2ZWQ1CShfX05SX1BPU0lYICsgMjczKQorI2RlZmluZSBfX05SX1BPU0lYX01JUFNfcmVzZXJ2ZWQ2CShfX05SX1BPU0lYICsgMjc0KQorI2RlZmluZSBfX05SX1BPU0lYX01JUFNfcmVzZXJ2ZWQ3CShfX05SX1BPU0lYICsgMjc1KQorI2RlZmluZSBfX05SX1BPU0lYX01JUFNfcmVzZXJ2ZWQ4CShfX05SX1BPU0lYICsgMjc2KQorI2RlZmluZSBfX05SX1BPU0lYX01JUFNfcmVzZXJ2ZWQ5CShfX05SX1BPU0lYICsgMjc3KQorI2RlZmluZSBfX05SX1BPU0lYX01JUFNfcmVzZXJ2ZWQxMAkoX19OUl9QT1NJWCArIDI3OCkKKyNkZWZpbmUgX19OUl9QT1NJWF9NSVBTX3Jlc2VydmVkMTEJKF9fTlJfUE9TSVggKyAyNzkpCisjZGVmaW5lIF9fTlJfUE9TSVhfVEFOREVNX3Jlc2VydmVkMQkoX19OUl9QT1NJWCArIDI4MCkKKyNkZWZpbmUgX19OUl9QT1NJWF9UQU5ERU1fcmVzZXJ2ZWQyCShfX05SX1BPU0lYICsgMjgxKQorI2RlZmluZSBfX05SX1BPU0lYX1RBTkRFTV9yZXNlcnZlZDMJKF9fTlJfUE9TSVggKyAyODIpCisjZGVmaW5lIF9fTlJfUE9TSVhfVEFOREVNX3Jlc2VydmVkNAkoX19OUl9QT1NJWCArIDI4MykKKyNkZWZpbmUgX19OUl9QT1NJWF9UQU5ERU1fcmVzZXJ2ZWQ1CShfX05SX1BPU0lYICsgMjg0KQorI2RlZmluZSBfX05SX1BPU0lYX1RBTkRFTV9yZXNlcnZlZDYJKF9fTlJfUE9TSVggKyAyODUpCisjZGVmaW5lIF9fTlJfUE9TSVhfVEFOREVNX3Jlc2VydmVkNwkoX19OUl9QT1NJWCArIDI4NikKKyNkZWZpbmUgX19OUl9QT1NJWF9UQU5ERU1fcmVzZXJ2ZWQ4CShfX05SX1BPU0lYICsgMjg3KQorI2RlZmluZSBfX05SX1BPU0lYX1RBTkRFTV9yZXNlcnZlZDkJKF9fTlJfUE9TSVggKyAyODgpCisjZGVmaW5lIF9fTlJfUE9TSVhfVEFOREVNX3Jlc2VydmVkMTAJKF9fTlJfUE9TSVggKyAyODkpCisjZGVmaW5lIF9fTlJfUE9TSVhfVEFOREVNX3Jlc2VydmVkMTEJKF9fTlJfUE9TSVggKyAyOTApCisjZGVmaW5lIF9fTlJfUE9TSVhfVEFOREVNX3Jlc2VydmVkMTIJKF9fTlJfUE9TSVggKyAyOTEpCisjZGVmaW5lIF9fTlJfUE9TSVhfVEFOREVNX3Jlc2VydmVkMTMJKF9fTlJfUE9TSVggKyAyOTIpCisjZGVmaW5lIF9fTlJfUE9TSVhfVEFOREVNX3Jlc2VydmVkMTQJKF9fTlJfUE9TSVggKyAyOTMpCisjZGVmaW5lIF9fTlJfUE9TSVhfVEFOREVNX3Jlc2VydmVkMTUJKF9fTlJfUE9TSVggKyAyOTQpCisjZGVmaW5lIF9fTlJfUE9TSVhfVEFOREVNX3Jlc2VydmVkMTYJKF9fTlJfUE9TSVggKyAyOTUpCisjZGVmaW5lIF9fTlJfUE9TSVhfVEFOREVNX3Jlc2VydmVkMTcJKF9fTlJfUE9TSVggKyAyOTYpCisjZGVmaW5lIF9fTlJfUE9TSVhfVEFOREVNX3Jlc2VydmVkMTgJKF9fTlJfUE9TSVggKyAyOTcpCisjZGVmaW5lIF9fTlJfUE9TSVhfVEFOREVNX3Jlc2VydmVkMTkJKF9fTlJfUE9TSVggKyAyOTgpCisjZGVmaW5lIF9fTlJfUE9TSVhfVEFOREVNX3Jlc2VydmVkMjAJKF9fTlJfUE9TSVggKyAyOTkpCisjZGVmaW5lIF9fTlJfUE9TSVhfU0dJX3Jlc2VydmVkNwkoX19OUl9QT1NJWCArIDMwMCkKKyNkZWZpbmUgX19OUl9QT1NJWF9TR0lfcmVzZXJ2ZWQ4CShfX05SX1BPU0lYICsgMzAxKQorI2RlZmluZSBfX05SX1BPU0lYX1NHSV9yZXNlcnZlZDkJKF9fTlJfUE9TSVggKyAzMDIpCisjZGVmaW5lIF9fTlJfUE9TSVhfU0dJX3Jlc2VydmVkMTAJKF9fTlJfUE9TSVggKyAzMDMpCisjZGVmaW5lIF9fTlJfUE9TSVhfU0dJX3Jlc2VydmVkMTEJKF9fTlJfUE9TSVggKyAzMDQpCisjZGVmaW5lIF9fTlJfUE9TSVhfU0dJX3Jlc2VydmVkMTIJKF9fTlJfUE9TSVggKyAzMDUpCisjZGVmaW5lIF9fTlJfUE9TSVhfU0dJX3Jlc2VydmVkMTMJKF9fTlJfUE9TSVggKyAzMDYpCisjZGVmaW5lIF9fTlJfUE9TSVhfU0dJX3Jlc2VydmVkMTQJKF9fTlJfUE9TSVggKyAzMDcpCisjZGVmaW5lIF9fTlJfUE9TSVhfU0dJX3Jlc2VydmVkMTUJKF9fTlJfUE9TSVggKyAzMDgpCisjZGVmaW5lIF9fTlJfUE9TSVhfU0dJX3Jlc2VydmVkMTYJKF9fTlJfUE9TSVggKyAzMDkpCisjZGVmaW5lIF9fTlJfUE9TSVhfU0dJX3Jlc2VydmVkMTcJKF9fTlJfUE9TSVggKyAzMTApCisjZGVmaW5lIF9fTlJfUE9TSVhfU0dJX3Jlc2VydmVkMTgJKF9fTlJfUE9TSVggKyAzMTEpCisjZGVmaW5lIF9fTlJfUE9TSVhfU0dJX3Jlc2VydmVkMTkJKF9fTlJfUE9TSVggKyAzMTIpCisjZGVmaW5lIF9fTlJfUE9TSVhfU0dJX3Jlc2VydmVkMjAJKF9fTlJfUE9TSVggKyAzMTMpCisjZGVmaW5lIF9fTlJfUE9TSVhfU0dJX3Jlc2VydmVkMjEJKF9fTlJfUE9TSVggKyAzMTQpCisjZGVmaW5lIF9fTlJfUE9TSVhfU0dJX3Jlc2VydmVkMjIJKF9fTlJfUE9TSVggKyAzMTUpCisjZGVmaW5lIF9fTlJfUE9TSVhfU0dJX3Jlc2VydmVkMjMJKF9fTlJfUE9TSVggKyAzMTYpCisjZGVmaW5lIF9fTlJfUE9TSVhfU0dJX3Jlc2VydmVkMjQJKF9fTlJfUE9TSVggKyAzMTcpCisjZGVmaW5lIF9fTlJfUE9TSVhfU0dJX3Jlc2VydmVkMjUJKF9fTlJfUE9TSVggKyAzMTgpCisjZGVmaW5lIF9fTlJfUE9TSVhfU0dJX3Jlc2VydmVkMjYJKF9fTlJfUE9TSVggKyAzMTkpCisKKyNlbmRpZiAvKiBfQVNNX1JJU0NPU19TWVNDQUxMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvcnRjLmggYi9pbmNsdWRlL2FzbS1taXBzL3J0Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxYzBjMjMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3J0Yy5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1taXBzL3J0Yy5oIAorICoKKyAqIChSZWFsbHkgYW4gaW50ZXJmYWNlIGZvciBkcml2ZXJzL2NoYXIvZ2VucnRjLmMpCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgorICogQXV0aG9yOiBKdW4gU3VuLCBqc3VuQG12aXN0YS5jb20gb3IganN1bkBqdW5zdW4ubmV0CisgKgorICogUGxlYXNlIHJlYWQgdGhlIENPUFlJTkcgZmlsZSBmb3IgYWxsIGxpY2Vuc2UgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9NSVBTX1JUQ19ICisjZGVmaW5lIF9NSVBTX1JUQ19ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxsaW51eC9ydGMuaD4KKworI2RlZmluZSBSVENfUElFIDB4NDAgICAgICAgICAgICAvKiBwZXJpb2RpYyBpbnRlcnJ1cHQgZW5hYmxlICovCisjZGVmaW5lIFJUQ19BSUUgMHgyMCAgICAgICAgICAgIC8qIGFsYXJtIGludGVycnVwdCBlbmFibGUgKi8KKyNkZWZpbmUgUlRDX1VJRSAweDEwICAgICAgICAgICAgLyogdXBkYXRlLWZpbmlzaGVkIGludGVycnVwdCBlbmFibGUgKi8KKworLyogc29tZSBkdW1teSBkZWZpbml0aW9ucyAqLworI2RlZmluZSBSVENfQkFUVF9CQUQgMHgxMDAgICAgICAvKiBiYXR0ZXJ5IGJhZCAqLworI2RlZmluZSBSVENfU1FXRSAweDA4ICAgICAgICAgICAvKiBlbmFibGUgc3F1YXJlLXdhdmUgb3V0cHV0ICovCisjZGVmaW5lIFJUQ19ETV9CSU5BUlkgMHgwNCAgICAgIC8qIGFsbCB0aW1lL2RhdGUgdmFsdWVzIGFyZSBCQ0QgaWYgY2xlYXIgKi8KKyNkZWZpbmUgUlRDXzI0SCAweDAyICAgICAgICAgICAgLyogMjQgaG91ciBtb2RlIC0gZWxzZSBob3VycyBiaXQgNyBtZWFucyBwbSAqLworI2RlZmluZSBSVENfRFNUX0VOIDB4MDEgICAgICAgICAvKiBhdXRvIHN3aXRjaCBEU1QgLSB3b3JrcyBmLiBVU0Egb25seSAqLworCit1bnNpZ25lZCBpbnQgZ2V0X3J0Y190aW1lKHN0cnVjdCBydGNfdGltZSAqdGltZSk7CitpbnQgc2V0X3J0Y190aW1lKHN0cnVjdCBydGNfdGltZSAqdGltZSk7Cit1bnNpZ25lZCBpbnQgZ2V0X3J0Y19zcyh2b2lkKTsKK2ludCBnZXRfcnRjX3BsbChzdHJ1Y3QgcnRjX3BsbF9pbmZvICpwbGwpOworaW50IHNldF9ydGNfcGxsKHN0cnVjdCBydGNfcGxsX2luZm8gKnBsbCk7CisKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NjYXR0ZXJsaXN0LmggYi9pbmNsdWRlL2FzbS1taXBzL3NjYXR0ZXJsaXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI2MzQ3MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc2NhdHRlcmxpc3QuaApAQCAtMCwwICsxLDIzIEBACisjaWZuZGVmIF9fQVNNX1NDQVRURVJMSVNUX0gKKyNkZWZpbmUgX19BU01fU0NBVFRFUkxJU1RfSAorCitzdHJ1Y3Qgc2NhdHRlcmxpc3QgeworCXN0cnVjdCBwYWdlICoJcGFnZTsKKwl1bnNpZ25lZCBpbnQJb2Zmc2V0OworCWRtYV9hZGRyX3QJZG1hX2FkZHJlc3M7CisJdW5zaWduZWQgaW50CWxlbmd0aDsKK307CisKKy8qCisgKiBUaGVzZSBtYWNyb3Mgc2hvdWxkIGJlIHVzZWQgYWZ0ZXIgYSBwY2lfbWFwX3NnIGNhbGwgaGFzIGJlZW4gZG9uZQorICogdG8gZ2V0IGJ1cyBhZGRyZXNzZXMgb2YgZWFjaCBvZiB0aGUgU0cgZW50cmllcyBhbmQgdGhlaXIgbGVuZ3Rocy4KKyAqIFlvdSBzaG91bGQgb25seSB3b3JrIHdpdGggdGhlIG51bWJlciBvZiBzZyBlbnRyaWVzIHBjaV9tYXBfc2cKKyAqIHJldHVybnMsIG9yIGFsdGVybmF0aXZlbHkgc3RvcCBvbiB0aGUgZmlyc3Qgc2dfZG1hX2xlbihzZykgd2hpY2gKKyAqIGlzIDAuCisgKi8KKyNkZWZpbmUgc2dfZG1hX2FkZHJlc3Moc2cpCSgoc2cpLT5kbWFfYWRkcmVzcykKKyNkZWZpbmUgc2dfZG1hX2xlbihzZykJCSgoc2cpLT5sZW5ndGgpCisKKyNkZWZpbmUgSVNBX0RNQV9USFJFU0hPTEQgKDB4MDBmZmZmZmZVTCkKKworI2VuZGlmIC8qIF9fQVNNX1NDQVRURVJMSVNUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc2VjdGlvbnMuaCBiL2luY2x1ZGUvYXNtLW1pcHMvc2VjdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzAxNjI3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zZWN0aW9ucy5oCkBAIC0wLDAgKzEsOCBAQAorI2lmbmRlZiBfQVNNX1NFQ1RJT05TX0gKKyNkZWZpbmUgX0FTTV9TRUNUSU9OU19ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zZWN0aW9ucy5oPgorCitleHRlcm4gY2hhciBfZmRhdGE7CisKKyNlbmRpZiAvKiBfQVNNX1NFQ1RJT05TX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc2VnbWVudC5oIGIvaW5jbHVkZS9hc20tbWlwcy9zZWdtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJhYzAwMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc2VnbWVudC5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfQVNNX1NFR01FTlRfSAorI2RlZmluZSBfQVNNX1NFR01FTlRfSAorCisvKiBPbmx5IGhlcmUgYmVjYXVzZSB3ZSBoYXZlIHNvbWUgb2xkIGhlYWRlciBmaWxlcyB0aGF0IGV4cGVjdCBpdC4uICovCisKKyNlbmRpZiAvKiBfQVNNX1NFR01FTlRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zZW1hcGhvcmUuaCBiL2luY2x1ZGUvYXNtLW1pcHMvc2VtYXBob3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJjOTdkZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc2VtYXBob3JlLmgKQEAgLTAsMCArMSwxMTIgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYgIExpbnVzIFRvcnZhbGRzCisgKiBDb3B5cmlnaHQgKEMpIDE5OTgsIDk5LCAyMDAwLCAwMSwgMDQgIFJhbGYgQmFlY2hsZQorICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAwMSAgU2lsaWNvbiBHcmFwaGljcywgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDAwLCAwMSBNSVBTIFRlY2hub2xvZ2llcywgSW5jLgorICoKKyAqIEluIGFsbCBob25lc3R5LCBsaXR0bGUgb2YgdGhlIG9sZCBNSVBTIGNvZGUgbGVmdCAtIHRoZSBQUEM2NCB2YXJpYW50IHdhcworICoganVzdCBsb29raW5nIG5pY2UgYW5kIHBvcnRhYmxlIHNvIEkgcmlwcGVkIGl0LiAgQ3JlZGl0cyB0byB3aG9ldmVyIHdyb3RlCisgKiBpdC4KKyAqLworI2lmbmRlZiBfX0FTTV9TRU1BUEhPUkVfSAorI2RlZmluZSBfX0FTTV9TRU1BUEhPUkVfSAorCisvKgorICogUmVtb3ZlIHNwaW5sb2NrLWJhc2VkIFJXIHNlbWFwaG9yZXM7IFJXIHNlbWFwaG9yZSBkZWZpbml0aW9ucyBhcmUKKyAqIG5vdyBpbiByd3NlbS5oIGFuZCB3ZSB1c2UgdGhlIGdlbmVyaWMgbGliL3J3c2VtLmMgaW1wbGVtZW50YXRpb24uCisgKiBSZXdvcmsgc2VtYXBob3JlcyB0byB1c2UgYXRvbWljX2RlY19pZl9wb3NpdGl2ZS4KKyAqIC0tIFBhdWwgTWFja2VycmFzIChwYXVsdXNAc2FtYmEub3JnKQorICovCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgorCitzdHJ1Y3Qgc2VtYXBob3JlIHsKKwkvKgorCSAqIE5vdGUgdGhhdCBhbnkgbmVnYXRpdmUgdmFsdWUgb2YgY291bnQgaXMgZXF1aXZhbGVudCB0byAwLAorCSAqIGJ1dCBhZGRpdGlvbmFsbHkgaW5kaWNhdGVzIHRoYXQgc29tZSBwcm9jZXNzKGVzKSBtaWdodCBiZQorCSAqIHNsZWVwaW5nIG9uIGB3YWl0Jy4KKwkgKi8KKwlhdG9taWNfdCBjb3VudDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OworfTsKKworI2RlZmluZSBfX1NFTUFQSE9SRV9JTklUSUFMSVpFUihuYW1lLCBuKQkJCQlcCit7CQkJCQkJCQkJXAorCS5jb3VudAkJPSBBVE9NSUNfSU5JVChuKSwJCQkJXAorCS53YWl0CQk9IF9fV0FJVF9RVUVVRV9IRUFEX0lOSVRJQUxJWkVSKChuYW1lKS53YWl0KQlcCit9CisKKyNkZWZpbmUgX19NVVRFWF9JTklUSUFMSVpFUihuYW1lKSBcCisJX19TRU1BUEhPUkVfSU5JVElBTElaRVIobmFtZSwgMSkKKworI2RlZmluZSBfX0RFQ0xBUkVfU0VNQVBIT1JFX0dFTkVSSUMobmFtZSwgY291bnQpIFwKKwlzdHJ1Y3Qgc2VtYXBob3JlIG5hbWUgPSBfX1NFTUFQSE9SRV9JTklUSUFMSVpFUihuYW1lLGNvdW50KQorCisjZGVmaW5lIERFQ0xBUkVfTVVURVgobmFtZSkJCV9fREVDTEFSRV9TRU1BUEhPUkVfR0VORVJJQyhuYW1lLCAxKQorI2RlZmluZSBERUNMQVJFX01VVEVYX0xPQ0tFRChuYW1lKQlfX0RFQ0xBUkVfU0VNQVBIT1JFX0dFTkVSSUMobmFtZSwgMCkKKworc3RhdGljIGlubGluZSB2b2lkIHNlbWFfaW5pdCAoc3RydWN0IHNlbWFwaG9yZSAqc2VtLCBpbnQgdmFsKQoreworCWF0b21pY19zZXQoJnNlbS0+Y291bnQsIHZhbCk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmc2VtLT53YWl0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGluaXRfTVVURVggKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKK3sKKwlzZW1hX2luaXQoc2VtLCAxKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGluaXRfTVVURVhfTE9DS0VEIChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCit7CisJc2VtYV9pbml0KHNlbSwgMCk7Cit9CisKK2V4dGVybiB2b2lkIF9fZG93bihzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKTsKK2V4dGVybiBpbnQgIF9fZG93bl9pbnRlcnJ1cHRpYmxlKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pOworZXh0ZXJuIHZvaWQgX191cChzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKTsKKworc3RhdGljIGlubGluZSB2b2lkIGRvd24oc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKK3sKKwltaWdodF9zbGVlcCgpOworCisJLyoKKwkgKiBUcnkgdG8gZ2V0IHRoZSBzZW1hcGhvcmUsIHRha2UgdGhlIHNsb3cgcGF0aCBpZiB3ZSBmYWlsLgorCSAqLworCWlmICh1bmxpa2VseShhdG9taWNfZGVjX3JldHVybigmc2VtLT5jb3VudCkgPCAwKSkKKwkJX19kb3duKHNlbSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGRvd25faW50ZXJydXB0aWJsZShzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQoreworCWludCByZXQgPSAwOworCisJbWlnaHRfc2xlZXAoKTsKKworCWlmICh1bmxpa2VseShhdG9taWNfZGVjX3JldHVybigmc2VtLT5jb3VudCkgPCAwKSkKKwkJcmV0ID0gX19kb3duX2ludGVycnVwdGlibGUoc2VtKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIGludCBkb3duX3RyeWxvY2soc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKK3sKKwlyZXR1cm4gYXRvbWljX2RlY19pZl9wb3NpdGl2ZSgmc2VtLT5jb3VudCkgPCAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdXAoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKK3sKKwlpZiAodW5saWtlbHkoYXRvbWljX2luY19yZXR1cm4oJnNlbS0+Y291bnQpIDw9IDApKQorCQlfX3VwKHNlbSk7Cit9CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfX0FTTV9TRU1BUEhPUkVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zZW1idWYuaCBiL2luY2x1ZGUvYXNtLW1pcHMvc2VtYnVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI4MWE0ZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc2VtYnVmLmgKQEAgLTAsMCArMSwyMiBAQAorI2lmbmRlZiBfQVNNX1NFTUJVRl9ICisjZGVmaW5lIF9BU01fU0VNQlVGX0gKKworLyoKKyAqIFRoZSBzZW1pZDY0X2RzIHN0cnVjdHVyZSBmb3IgdGhlIE1JUFMgYXJjaGl0ZWN0dXJlLgorICogTm90ZSBleHRyYSBwYWRkaW5nIGJlY2F1c2UgdGhpcyBzdHJ1Y3R1cmUgaXMgcGFzc2VkIGJhY2sgYW5kIGZvcnRoCisgKiBiZXR3ZWVuIGtlcm5lbCBhbmQgdXNlciBzcGFjZS4KKyAqCisgKiBQYWQgc3BhY2UgaXMgbGVmdCBmb3I6CisgKiAtIDIgbWlzY2VsbGFuZW91cyA2NC1iaXQgdmFsdWVzCisgKi8KKworc3RydWN0IHNlbWlkNjRfZHMgeworCXN0cnVjdCBpcGM2NF9wZXJtIHNlbV9wZXJtOwkJLyogcGVybWlzc2lvbnMgLi4gc2VlIGlwYy5oICovCisJX19rZXJuZWxfdGltZV90CXNlbV9vdGltZTsJCS8qIGxhc3Qgc2Vtb3AgdGltZSAqLworCV9fa2VybmVsX3RpbWVfdAlzZW1fY3RpbWU7CQkvKiBsYXN0IGNoYW5nZSB0aW1lICovCisJdW5zaWduZWQgbG9uZwlzZW1fbnNlbXM7CQkvKiBuby4gb2Ygc2VtYXBob3JlcyBpbiBhcnJheSAqLworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQxOworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQyOworfTsKKworI2VuZGlmIC8qIF9BU01fU0VNQlVGX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc2VyaWFsLmggYi9pbmNsdWRlL2FzbS1taXBzL3NlcmlhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNzBmZjUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NlcmlhbC5oCkBAIC0wLDAgKzEsNDQ0IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5IGJ5IFJhbGYgQmFlY2hsZQorICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwIFNpbGljb24gR3JhcGhpY3MsIEluYy4KKyAqLworI2lmbmRlZiBfQVNNX1NFUklBTF9ICisjZGVmaW5lIF9BU01fU0VSSUFMX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisvKgorICogVGhpcyBhc3N1bWVzIHlvdSBoYXZlIGEgMS44NDMyIE1IeiBjbG9jayBmb3IgeW91ciBVQVJULgorICoKKyAqIEl0J2QgYmUgbmljZSBpZiBzb21lb25lIGJ1aWx0IGEgc2VyaWFsIGNhcmQgd2l0aCBhIDI0LjU3NiBNSHoKKyAqIGNsb2NrLCBzaW5jZSB0aGUgMTY1NTBBIGlzIGNhcGFibGUgb2YgaGFuZGxpbmcgYSB0b3Agc3BlZWQgb2YgMS41CisgKiBtZWdhYml0cy9zZWNvbmQ7IGJ1dCB0aGlzIHJlcXVpcmVzIHRoZSBmYXN0ZXIgY2xvY2suCisgKi8KKyNkZWZpbmUgQkFTRV9CQVVEICgxODQzMjAwIC8gMTYpCisKKy8qIFN0YW5kYXJkIENPTSBmbGFncyAoZXhjZXB0IGZvciBDT000LCBiZWNhdXNlIG9mIHRoZSA4NTE0IHByb2JsZW0pICovCisjaWZkZWYgQ09ORklHX1NFUklBTF9ERVRFQ1RfSVJRCisjZGVmaW5lIFNURF9DT01fRkxBR1MgKEFTWU5DX0JPT1RfQVVUT0NPTkYgfCBBU1lOQ19TS0lQX1RFU1QgfCBBU1lOQ19BVVRPX0lSUSkKKyNkZWZpbmUgU1REX0NPTTRfRkxBR1MgKEFTWU5DX0JPT1RfQVVUT0NPTkYgfCBBU1lOQ19BVVRPX0lSUSkKKyNlbHNlCisjZGVmaW5lIFNURF9DT01fRkxBR1MgKEFTWU5DX0JPT1RfQVVUT0NPTkYgfCBBU1lOQ19TS0lQX1RFU1QpCisjZGVmaW5lIFNURF9DT000X0ZMQUdTIEFTWU5DX0JPT1RfQVVUT0NPTkYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1NFUklBTF9NQU5ZX1BPUlRTCisjZGVmaW5lIEZPVVJQT1JUX0ZMQUdTIEFTWU5DX0ZPVVJQT1JUCisjZGVmaW5lIEFDQ0VOVF9GTEFHUyAwCisjZGVmaW5lIEJPQ0FfRkxBR1MgMAorI2RlZmluZSBIVUI2X0ZMQUdTIDAKKyNkZWZpbmUgUlNfVEFCTEVfU0laRQk2NAorI2Vsc2UKKyNkZWZpbmUgUlNfVEFCTEVfU0laRQorI2VuZGlmCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGRlZmluZSB0aGUgYWNjZXNzIG1ldGhvZHMgZm9yIHRoZSBIVUI2IGNhcmQuIEFsbAorICogYWNjZXNzIGlzIHRocm91Z2ggdHdvIHBvcnRzIGZvciBhbGwgMjQgcG9zc2libGUgY2hpcHMuIFRoZSBjYXJkIGlzCisgKiBzZWxlY3RlZCB0aHJvdWdoIHRoZSBoaWdoIDIgYml0cywgdGhlIHBvcnQgb24gdGhhdCBjYXJkIHdpdGggdGhlCisgKiAibWlkZGxlIiAzIGJpdHMsIGFuZCB0aGUgcmVnaXN0ZXIgb24gdGhhdCBwb3J0IHdpdGggdGhlIGJvdHRvbQorICogMyBiaXRzLgorICoKKyAqIFdoaWxlIHRoZSBhY2Nlc3MgcG9ydCBhbmQgaW50ZXJydXB0IGlzIGNvbmZpZ3VyYWJsZSwgdGhlIGRlZmF1bHQKKyAqIHBvcnQgbG9jYXRpb25zIGFyZSAweDMwMiBmb3IgdGhlIHBvcnQgY29udHJvbCByZWdpc3RlciwgYW5kIDB4MzAzCisgKiBmb3IgdGhlIGRhdGEgcmVhZC93cml0ZSByZWdpc3Rlci4gTm9ybWFsbHksIHRoZSBpbnRlcnJ1cHQgaXMgYXQgaXJxMworICogYnV0IGNhbiBiZSBhbnl0aGluZyBmcm9tIDMgdG8gNyBpbmNsdXNpdmUuIE5vdGUgdGhhdCB1c2luZyAzIHdpbGwKKyAqIHJlcXVpcmUgZGlzYWJsaW5nIGNvbTIuCisgKi8KKworI2RlZmluZSBDX1AoY2FyZCxwb3J0KSAoKChjYXJkKTw8NnwocG9ydCk8PDMpICsgMSkKKworI2lmZGVmIENPTkZJR19NQUNIX0pBWloKKyNpbmNsdWRlIDxhc20vamF6ei5oPgorCisjaWZuZGVmIENPTkZJR19PTElWRVRUSV9NNzAwCisgICAvKiBTb21lIEphenogbWFjaGluZXMgc2VlbSB0byBoYXZlIGFuIDhNSHogY3J5c3RhbCBjbG9jayBidXQgSSBkb24ndCBrbm93CisgICAgICBleGFjdGx5IHdoaWNoIG9uZXMgLi4uIFhYWCAqLworI2RlZmluZSBKQVpaX0JBU0VfQkFVRCAoIDgwMDAwMDAgLyAxNiApIC8qICggMzA3MjAwMCAvIDE2KSAqLworI2Vsc2UKKy8qIGJ1dCB0aGUgTTcwMCBpc24ndCBzdWNoIGEgc3RyYW5nZSBiZWFzdCAqLworI2RlZmluZSBKQVpaX0JBU0VfQkFVRCBCQVNFX0JBVUQKKyNlbmRpZgorCisjZGVmaW5lIF9KQVpaX1NFUklBTF9JTklUKGludCwgYmFzZSkJCQkJCVwKKwl7IC5iYXVkX2Jhc2UgPSBKQVpaX0JBU0VfQkFVRCwgLmlycSA9IGludCwgLmZsYWdzID0gU1REX0NPTV9GTEFHUywJXAorCSAgLmlvbWVtX2Jhc2UgPSAodTggKikgYmFzZSwgLmlvbWVtX3JlZ19zaGlmdCA9IDAsCQkJXAorCSAgLmlvX3R5cGUgPSBTRVJJQUxfSU9fTUVNIH0KKyNkZWZpbmUgSkFaWl9TRVJJQUxfUE9SVF9ERUZOUwkJCQkJCVwKKwlfSkFaWl9TRVJJQUxfSU5JVChKQVpaX1NFUklBTDFfSVJRLCBKQVpaX1NFUklBTDFfQkFTRSksCQlcCisJX0pBWlpfU0VSSUFMX0lOSVQoSkFaWl9TRVJJQUwyX0lSUSwgSkFaWl9TRVJJQUwyX0JBU0UpLAorI2Vsc2UKKyNkZWZpbmUgSkFaWl9TRVJJQUxfUE9SVF9ERUZOUworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUlQU19DT0JBTFQKKyNpbmNsdWRlIDxhc20vY29iYWx0L2NvYmFsdC5oPgorI2RlZmluZSBDT0JBTFRfQkFTRV9CQVVEICAoMTg0MzIwMDAgLyAxNikKKyNkZWZpbmUgQ09CQUxUX1NFUklBTF9QT1JUX0RFRk5TCQlcCisJLyogVUFSVCBDTEsgICBQT1JUICBJUlEgIEZMQUdTICAgICovIAkJXAorCXsgMCwgQ09CQUxUX0JBU0VfQkFVRCwgMHhjODAwMDAwLCBDT0JBTFRfU0VSSUFMX0lSUSwgU1REX0NPTV9GTEFHUyB9LCAgIC8qIHR0eVMwICovCisjZWxzZQorI2RlZmluZSBDT0JBTFRfU0VSSUFMX1BPUlRfREVGTlMKKyNlbmRpZgorCisvKgorICogQm90aCBHYWxpbGVvIGJvYXJkcyBoYXZlIHRoZSBzYW1lIFVBUlQgbWFwcGluZ3MuCisgKi8KKyNpZiBkZWZpbmVkIChDT05GSUdfTUlQU19FVjk2MTAwKSB8fCBkZWZpbmVkIChDT05GSUdfTUlQU19FVjY0MTIwKQorI2luY2x1ZGUgPGFzbS9nYWxpbGVvLWJvYXJkcy9ldjk2MTAwLmg+CisjaW5jbHVkZSA8YXNtL2dhbGlsZW8tYm9hcmRzL2V2OTYxMDBpbnQuaD4KKyNkZWZpbmUgRVY5NjEwMF9TRVJJQUxfUE9SVF9ERUZOUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAuYmF1ZF9iYXNlID0gRVY5NjEwMF9CQVNFX0JBVUQsIC5pcnEgPSBFVjk2MTAwSU5UX1VBUlRfMCwgXAorICAgICAgLmZsYWdzID0gU1REX0NPTV9GTEFHUywgIFwKKyAgICAgIC5pb21lbV9iYXNlID0gRVY5NjEwMF9VQVJUMF9SRUdTX0JBU0UsIC5pb21lbV9yZWdfc2hpZnQgPSAyLCBcCisgICAgICAuaW9fdHlwZSA9IFNFUklBTF9JT19NRU0gfSwgXAorICAgIHsgLmJhdWRfYmFzZSA9IEVWOTYxMDBfQkFTRV9CQVVELCAuaXJxID0gRVY5NjEwMElOVF9VQVJUXzAsIFwKKyAgICAgIC5mbGFncyA9IFNURF9DT01fRkxBR1MsIFwKKyAgICAgIC5pb21lbV9iYXNlID0gRVY5NjEwMF9VQVJUMV9SRUdTX0JBU0UsIC5pb21lbV9yZWdfc2hpZnQgPSAyLCBcCisgICAgICAuaW9fdHlwZSA9IFNFUklBTF9JT19NRU0gfSwKKyNlbHNlCisjZGVmaW5lIEVWOTYxMDBfU0VSSUFMX1BPUlRfREVGTlMKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01JUFNfSVRFODE3MgorI2luY2x1ZGUgPGFzbS9pdDgxNzIvaXQ4MTcyLmg+CisjaW5jbHVkZSA8YXNtL2l0ODE3Mi9pdDgxNzJfaW50Lmg+CisjaW5jbHVkZSA8YXNtL2l0ODcxMi5oPgorI2RlZmluZSBJVEVfU0VSSUFMX1BPUlRfREVGTlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgLmJhdWRfYmFzZSA9IEJBU0VfQkFVRCwgLnBvcnQgPSAoSVQ4MTcyX1BDSV9JT19CQVNFICsgSVRfVUFSVF9CQVNFKSwgXAorICAgICAgLmlycSA9IElUODE3Ml9VQVJUX0lSUSwgLmZsYWdzID0gU1REX0NPTV9GTEFHUywgLnR5cGUgPSAweDMgfSwgXAorICAgIHsgLmJhdWRfYmFzZSA9ICgyNDAwMDAwMC8oMTYqMTMpKSwgLnBvcnQgPSAoSVQ4MTcyX1BDSV9JT19CQVNFICsgSVQ4NzEyX1VBUlQxX1BPUlQpLCBcCisgICAgICAuaXJxID0gSVQ4MTcyX1NFUklSUV80LCAuZmxhZ3MgPSBTVERfQ09NX0ZMQUdTLCAudHlwZSA9IDB4MyB9LCBcCisgICAgLyogU21hcnQgQ2FyZCBSZWFkZXIgMCAqLyBcCisgICAgeyAuYmF1ZF9iYXNlID0gQkFTRV9CQVVELCAucG9ydCA9IChJVDgxNzJfUENJX0lPX0JBU0UgKyBJVF9TQ1IwX0JBU0UpLCBcCisgICAgICAuaXJxID0gSVQ4MTcyX1NDUjBfSVJRLCAuZmxhZ3MgPSBTVERfQ09NX0ZMQUdTLCAudHlwZSA9IDB4MyB9LCBcCisgICAgLyogU21hcnQgQ2FyZCBSZWFkZXIgMSAqLyBcCisgICAgeyAuYmF1ZF9iYXNlID0gQkFTRV9CQVVELCAucG9ydCA9IChJVDgxNzJfUENJX0lPX0JBU0UgKyBJVF9TQ1IxX0JBU0UpLCBcCisgICAgICAuaXJxID0gSVQ4MTcyX1NDUjFfSVJRLCAuZmxhZ3MgPSBTVERfQ09NX0ZMQUdTLCAudHlwZSA9IDB4MyB9LAorI2Vsc2UKKyNkZWZpbmUgSVRFX1NFUklBTF9QT1JUX0RFRk5TCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NSVBTX0lWUgorI2luY2x1ZGUgPGFzbS9pdDgxNzIvaXQ4MTcyLmg+CisjaW5jbHVkZSA8YXNtL2l0ODE3Mi9pdDgxNzJfaW50Lmg+CisjZGVmaW5lIElWUl9TRVJJQUxfUE9SVF9ERUZOUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAuYmF1ZF9iYXNlID0gQkFTRV9CQVVELCAucG9ydCA9IChJVDgxNzJfUENJX0lPX0JBU0UgKyBJVF9VQVJUX0JBU0UpLCBcCisgICAgICAuaXJxID0gSVQ4MTcyX1VBUlRfSVJRLCAuZmxhZ3MgPSBTVERfQ09NX0ZMQUdTLCAudHlwZSA9IDB4MyB9LCAgICAgICAgIFwKKyAgICAvKiBTbWFydCBDYXJkIFJlYWRlciAxICovIFwKKyAgICB7IC5iYXVkX2Jhc2UgPSBCQVNFX0JBVUQsIC5wb3J0ID0gKElUODE3Ml9QQ0lfSU9fQkFTRSArIElUX1NDUjFfQkFTRSksIFwKKyAgICAgIC5pcnEgPSBJVDgxNzJfU0NSMV9JUlEsIC5mbGFncyA9IFNURF9DT01fRkxBR1MsIC50eXBlID0gMHgzIH0sCisjZWxzZQorI2RlZmluZSBJVlJfU0VSSUFMX1BPUlRfREVGTlMKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1RPU0hJQkFfSk1SMzkyNworI2luY2x1ZGUgPGFzbS9qbXIzOTI3L2ptcjM5MjcuaD4KKyNkZWZpbmUgVFhYOTI3X1NFUklBTF9QT1JUX0RFRk5TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgLmJhdWRfYmFzZSA9IEpNUjM5MjdfQkFTRV9CQVVELCAucG9ydCA9IFVBUlQwX0FERFIsIC5pcnEgPSBVQVJUMF9JTlQsICBcCisgICAgICAuZmxhZ3MgPSBVQVJUMF9GTEFHUywgLnR5cGUgPSAxIH0sICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgLmJhdWRfYmFzZSA9IEpNUjM5MjdfQkFTRV9CQVVELCAucG9ydCA9IFVBUlQxX0FERFIsIC5pcnEgPSBVQVJUMV9JTlQsICBcCisgICAgICAuZmxhZ3MgPSBVQVJUMV9GTEFHUywgLnR5cGUgPSAxIH0sCisjZWxzZQorI2RlZmluZSBUWFg5MjdfU0VSSUFMX1BPUlRfREVGTlMKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1NFUklBTF9BVTFYMDAKKyNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMDAwLmg+CisjaWZkZWYgQ09ORklHX1NPQ19BVTEwMDAKKyNkZWZpbmUgQVUxMDAwX1NFUklBTF9QT1JUX0RFRk5TICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAuYmF1ZF9iYXNlID0gMCwgLnBvcnQgPSBVQVJUMF9BRERSLCAgICAgICAgICAgICAgXAorICAgICAgLmlvbWVtX2Jhc2UgPSAodW5zaWduZWQgY2hhciAqKVVBUlQwX0FERFIsICAgICAgIFwKKyAgICAgIC5pcnEgPSBBVTEwMDBfVUFSVDBfSU5ULCAuZmxhZ3MgPSBTVERfQ09NX0ZMQUdTLCBcCisgICAgICAuaW9tZW1fcmVnX3NoaWZ0ID0gMiB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgLmJhdWRfYmFzZSA9IDAsIC5wb3J0ID0gVUFSVDFfQUREUiwgICAgICAgICAgICAgIFwKKyAgICAgIC5pb21lbV9iYXNlID0gKHVuc2lnbmVkIGNoYXIgKilVQVJUMV9BRERSLCAgICAgICBcCisgICAgICAuaXJxID0gQVUxMDAwX1VBUlQxX0lOVCwgLmZsYWdzID0gU1REX0NPTV9GTEFHUywgXAorICAgICAgLmlvbWVtX3JlZ19zaGlmdCA9IDIgfSwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7IC5iYXVkX2Jhc2UgPSAwLCAucG9ydCA9IFVBUlQyX0FERFIsICAgICAgICAgICAgICBcCisgICAgICAuaW9tZW1fYmFzZSA9ICh1bnNpZ25lZCBjaGFyICopVUFSVDJfQUREUiwgICAgICAgXAorICAgICAgLmlycSA9IEFVMTAwMF9VQVJUMl9JTlQsIC5mbGFncyA9IFNURF9DT01fRkxBR1MsIFwKKyAgICAgIC5pb21lbV9yZWdfc2hpZnQgPSAyIH0sICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAuYmF1ZF9iYXNlID0gMCwgLnBvcnQgPSBVQVJUM19BRERSLCAgICAgICAgICAgICAgXAorICAgICAgLmlvbWVtX2Jhc2UgPSAodW5zaWduZWQgY2hhciAqKVVBUlQzX0FERFIsICAgICAgIFwKKyAgICAgIC5pcnEgPSBBVTEwMDBfVUFSVDNfSU5ULCAuZmxhZ3MgPSBTVERfQ09NX0ZMQUdTLCBcCisgICAgICAuaW9tZW1fcmVnX3NoaWZ0ID0gMiB9LAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfU09DX0FVMTUwMAorI2RlZmluZSBBVTEwMDBfU0VSSUFMX1BPUlRfREVGTlMgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7IC5iYXVkX2Jhc2UgPSAwLCAucG9ydCA9IFVBUlQwX0FERFIsICAgICAgICAgICAgICBcCisgICAgICAuaW9tZW1fYmFzZSA9ICh1bnNpZ25lZCBjaGFyICopVUFSVDBfQUREUiwgICAgICAgXAorICAgICAgLmlycSA9IEFVMTUwMF9VQVJUMF9JTlQsIC5mbGFncyA9IFNURF9DT01fRkxBR1MsIFwKKyAgICAgIC5pb21lbV9yZWdfc2hpZnQgPSAyIH0sICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAuYmF1ZF9iYXNlID0gMCwgLnBvcnQgPSBVQVJUM19BRERSLCAgICAgICAgICAgICAgXAorICAgICAgLmlvbWVtX2Jhc2UgPSAodW5zaWduZWQgY2hhciAqKVVBUlQzX0FERFIsICAgICAgIFwKKyAgICAgIC5pcnEgPSBBVTE1MDBfVUFSVDNfSU5ULCAuZmxhZ3MgPSBTVERfQ09NX0ZMQUdTLCBcCisgICAgICAuaW9tZW1fcmVnX3NoaWZ0ID0gMiB9LAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfU09DX0FVMTEwMAorI2RlZmluZSBBVTEwMDBfU0VSSUFMX1BPUlRfREVGTlMgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7IC5iYXVkX2Jhc2UgPSAwLCAucG9ydCA9IFVBUlQwX0FERFIsICAgICAgICAgICAgICBcCisgICAgICAuaW9tZW1fYmFzZSA9ICh1bnNpZ25lZCBjaGFyICopVUFSVDBfQUREUiwgICAgICAgXAorICAgICAgLmlycSA9IEFVMTEwMF9VQVJUMF9JTlQsIC5mbGFncyA9IFNURF9DT01fRkxBR1MsIFwKKyAgICAgIC5pb21lbV9yZWdfc2hpZnQgPSAyIH0sICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAuYmF1ZF9iYXNlID0gMCwgLnBvcnQgPSBVQVJUMV9BRERSLCAgICAgICAgICAgICAgXAorICAgICAgLmlvbWVtX2Jhc2UgPSAodW5zaWduZWQgY2hhciAqKVVBUlQxX0FERFIsICAgICAgIFwKKyAgICAgIC5pcnEgPSBBVTExMDBfVUFSVDFfSU5ULCAuZmxhZ3MgPSBTVERfQ09NX0ZMQUdTLCBcCisgICAgICAuaW9tZW1fcmVnX3NoaWZ0ID0gMiB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgLmJhdWRfYmFzZSA9IDAsIC5wb3J0ID0gVUFSVDNfQUREUiwgICAgICAgICAgICAgIFwKKyAgICAgIC5pb21lbV9iYXNlID0gKHVuc2lnbmVkIGNoYXIgKilVQVJUM19BRERSLCAgICAgICBcCisgICAgICAuaXJxID0gQVUxMTAwX1VBUlQzX0lOVCwgLmZsYWdzID0gU1REX0NPTV9GTEFHUywgXAorICAgICAgLmlvbWVtX3JlZ19zaGlmdCA9IDIgfSwKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1NPQ19BVTE1NTAKKyNkZWZpbmUgQVUxMDAwX1NFUklBTF9QT1JUX0RFRk5TICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAuYmF1ZF9iYXNlID0gMCwgLnBvcnQgPSBVQVJUMF9BRERSLCAgICAgICAgICAgICAgXAorICAgICAgLmlvbWVtX2Jhc2UgPSAodW5zaWduZWQgY2hhciAqKVVBUlQwX0FERFIsICAgICAgIFwKKyAgICAgIC5pcnEgPSBBVTE1NTBfVUFSVDBfSU5ULCAuZmxhZ3MgPSBTVERfQ09NX0ZMQUdTLCBcCisgICAgICAuaW9tZW1fcmVnX3NoaWZ0ID0gMiB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgLmJhdWRfYmFzZSA9IDAsIC5wb3J0ID0gVUFSVDFfQUREUiwgICAgICAgICAgICAgIFwKKyAgICAgIC5pb21lbV9iYXNlID0gKHVuc2lnbmVkIGNoYXIgKilVQVJUMV9BRERSLCAgICAgICBcCisgICAgICAuaXJxID0gQVUxNTUwX1VBUlQxX0lOVCwgLmZsYWdzID0gU1REX0NPTV9GTEFHUywgXAorICAgICAgLmlvbWVtX3JlZ19zaGlmdCA9IDIgfSwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7IC5iYXVkX2Jhc2UgPSAwLCAucG9ydCA9IFVBUlQzX0FERFIsICAgICAgICAgICAgICBcCisgICAgICAuaW9tZW1fYmFzZSA9ICh1bnNpZ25lZCBjaGFyICopVUFSVDNfQUREUiwgICAgICAgXAorICAgICAgLmlycSA9IEFVMTU1MF9VQVJUM19JTlQsICAuZmxhZ3MgPSBTVERfQ09NX0ZMQUdTLFwKKyAgICAgIC5pb21lbV9yZWdfc2hpZnQgPSAyIH0sCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19TT0NfQVUxMjAwCisjZGVmaW5lIEFVMTAwMF9TRVJJQUxfUE9SVF9ERUZOUyAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgLmJhdWRfYmFzZSA9IDAsIC5wb3J0ID0gVUFSVDBfQUREUiwgICAgICAgICAgICAgIFwKKyAgICAgIC5pb21lbV9iYXNlID0gKHVuc2lnbmVkIGNoYXIgKilVQVJUMF9BRERSLCAgICAgICBcCisgICAgICAuaXJxID0gQVUxMjAwX1VBUlQwX0lOVCwgLmZsYWdzID0gU1REX0NPTV9GTEFHUywgXAorICAgICAgLmlvbWVtX3JlZ19zaGlmdCA9IDIgfSwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7IC5iYXVkX2Jhc2UgPSAwLCAucG9ydCA9IFVBUlQxX0FERFIsICAgICAgICAgICAgICBcCisgICAgICAuaW9tZW1fYmFzZSA9ICh1bnNpZ25lZCBjaGFyICopVUFSVDFfQUREUiwgICAgICAgXAorICAgICAgLmlycSA9IEFVMTIwMF9VQVJUMV9JTlQsIC5mbGFncyA9IFNURF9DT01fRkxBR1MsIFwKKyAgICAgIC5pb21lbV9yZWdfc2hpZnQgPSAyIH0sCisjZW5kaWYKKworI2Vsc2UKKyNkZWZpbmUgQVUxMDAwX1NFUklBTF9QT1JUX0RFRk5TCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19IQVZFX1NURF9QQ19TRVJJQUxfUE9SVAorI2RlZmluZSBTVERfU0VSSUFMX1BPUlRfREVGTlMJCQlcCisJLyogVUFSVCBDTEsgICBQT1JUIElSUSAgICAgRkxBR1MgICAgICAgICovCQkJXAorCXsgMCwgQkFTRV9CQVVELCAweDNGOCwgNCwgU1REX0NPTV9GTEFHUyB9LAkvKiB0dHlTMCAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MkY4LCAzLCBTVERfQ09NX0ZMQUdTIH0sCS8qIHR0eVMxICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgzRTgsIDQsIFNURF9DT01fRkxBR1MgfSwJLyogdHR5UzIgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDJFOCwgMywgU1REX0NPTTRfRkxBR1MgfSwJLyogdHR5UzMgKi8KKworI2lmZGVmIENPTkZJR19TRVJJQUxfTUFOWV9QT1JUUworI2RlZmluZSBFWFRSQV9TRVJJQUxfUE9SVF9ERUZOUwkJCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgxQTAsIDksIEZPVVJQT1JUX0ZMQUdTIH0sIAkvKiB0dHlTNCAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MUE4LCA5LCBGT1VSUE9SVF9GTEFHUyB9LAkvKiB0dHlTNSAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MUIwLCA5LCBGT1VSUE9SVF9GTEFHUyB9LAkvKiB0dHlTNiAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MUI4LCA5LCBGT1VSUE9SVF9GTEFHUyB9LAkvKiB0dHlTNyAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MkEwLCA1LCBGT1VSUE9SVF9GTEFHUyB9LAkvKiB0dHlTOCAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MkE4LCA1LCBGT1VSUE9SVF9GTEFHUyB9LAkvKiB0dHlTOSAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MkIwLCA1LCBGT1VSUE9SVF9GTEFHUyB9LAkvKiB0dHlTMTAgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDJCOCwgNSwgRk9VUlBPUlRfRkxBR1MgfSwJLyogdHR5UzExICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgzMzAsIDQsIEFDQ0VOVF9GTEFHUyB9LAkvKiB0dHlTMTIgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDMzOCwgNCwgQUNDRU5UX0ZMQUdTIH0sCS8qIHR0eVMxMyAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MDAwLCAwLCAwIH0sCQkJLyogdHR5UzE0IChzcGFyZSkgKi8gXAorCXsgMCwgQkFTRV9CQVVELCAweDAwMCwgMCwgMCB9LAkJCS8qIHR0eVMxNSAoc3BhcmUpICovIFwKKwl7IDAsIEJBU0VfQkFVRCwgMHgxMDAsIDEyLCBCT0NBX0ZMQUdTIH0sCS8qIHR0eVMxNiAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MTA4LCAxMiwgQk9DQV9GTEFHUyB9LAkvKiB0dHlTMTcgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDExMCwgMTIsIEJPQ0FfRkxBR1MgfSwJLyogdHR5UzE4ICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgxMTgsIDEyLCBCT0NBX0ZMQUdTIH0sCS8qIHR0eVMxOSAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MTIwLCAxMiwgQk9DQV9GTEFHUyB9LAkvKiB0dHlTMjAgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDEyOCwgMTIsIEJPQ0FfRkxBR1MgfSwJLyogdHR5UzIxICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgxMzAsIDEyLCBCT0NBX0ZMQUdTIH0sCS8qIHR0eVMyMiAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MTM4LCAxMiwgQk9DQV9GTEFHUyB9LAkvKiB0dHlTMjMgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDE0MCwgMTIsIEJPQ0FfRkxBR1MgfSwJLyogdHR5UzI0ICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgxNDgsIDEyLCBCT0NBX0ZMQUdTIH0sCS8qIHR0eVMyNSAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MTUwLCAxMiwgQk9DQV9GTEFHUyB9LAkvKiB0dHlTMjYgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDE1OCwgMTIsIEJPQ0FfRkxBR1MgfSwJLyogdHR5UzI3ICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgxNjAsIDEyLCBCT0NBX0ZMQUdTIH0sCS8qIHR0eVMyOCAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MTY4LCAxMiwgQk9DQV9GTEFHUyB9LAkvKiB0dHlTMjkgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDE3MCwgMTIsIEJPQ0FfRkxBR1MgfSwJLyogdHR5UzMwICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgxNzgsIDEyLCBCT0NBX0ZMQUdTIH0sCS8qIHR0eVMzMSAqLworI2Vsc2UgLyogQ09ORklHX1NFUklBTF9NQU5ZX1BPUlRTICovCisjZGVmaW5lIEVYVFJBX1NFUklBTF9QT1JUX0RFRk5TCisjZW5kaWYgLyogQ09ORklHX1NFUklBTF9NQU5ZX1BPUlRTICovCisKKyNlbHNlIC8qIENPTkZJR19IQVZFX1NURF9QQ19TRVJJQUxfUE9SVFMgKi8KKyNkZWZpbmUgU1REX1NFUklBTF9QT1JUX0RFRk5TCisjZGVmaW5lIEVYVFJBX1NFUklBTF9QT1JUX0RFRk5TCisjZW5kaWYgLyogQ09ORklHX0hBVkVfU1REX1BDX1NFUklBTF9QT1JUUyAqLworCisvKiBZb3UgY2FuIGhhdmUgdXAgdG8gZm91ciBIVUI2J3MgaW4gdGhlIHN5c3RlbSwgYnV0IEkndmUgb25seQorICogaW5jbHVkZWQgdHdvIGNhcmRzIGhlcmUgZm9yIGEgdG90YWwgb2YgdHdlbHZlIHBvcnRzLgorICovCisjaWYgKGRlZmluZWQoQ09ORklHX0hVQjYpICYmIGRlZmluZWQoQ09ORklHX1NFUklBTF9NQU5ZX1BPUlRTKSkKKyNkZWZpbmUgSFVCNl9TRVJJQUxfUE9SVF9ERk5TCQlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MzAyLCAzLCBIVUI2X0ZMQUdTLCBDX1AoMCwwKSB9LCAgLyogdHR5UzMyICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgzMDIsIDMsIEhVQjZfRkxBR1MsIENfUCgwLDEpIH0sICAvKiB0dHlTMzMgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDMwMiwgMywgSFVCNl9GTEFHUywgQ19QKDAsMikgfSwgIC8qIHR0eVMzNCAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MzAyLCAzLCBIVUI2X0ZMQUdTLCBDX1AoMCwzKSB9LCAgLyogdHR5UzM1ICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgzMDIsIDMsIEhVQjZfRkxBR1MsIENfUCgwLDQpIH0sICAvKiB0dHlTMzYgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDMwMiwgMywgSFVCNl9GTEFHUywgQ19QKDAsNSkgfSwgIC8qIHR0eVMzNyAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MzAyLCAzLCBIVUI2X0ZMQUdTLCBDX1AoMSwwKSB9LCAgLyogdHR5UzM4ICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgzMDIsIDMsIEhVQjZfRkxBR1MsIENfUCgxLDEpIH0sICAvKiB0dHlTMzkgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDMwMiwgMywgSFVCNl9GTEFHUywgQ19QKDEsMikgfSwgIC8qIHR0eVM0MCAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MzAyLCAzLCBIVUI2X0ZMQUdTLCBDX1AoMSwzKSB9LCAgLyogdHR5UzQxICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgzMDIsIDMsIEhVQjZfRkxBR1MsIENfUCgxLDQpIH0sICAvKiB0dHlTNDIgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDMwMiwgMywgSFVCNl9GTEFHUywgQ19QKDEsNSkgfSwgIC8qIHR0eVM0MyAqLworI2Vsc2UKKyNkZWZpbmUgSFVCNl9TRVJJQUxfUE9SVF9ERk5TCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NT01FTkNPX0pBR1VBUl9BVFgKKy8qIE9yZGluYXJ5IE5TMTY1NTIgZHVhcnQgd2l0aCBhIDIwTUh6IGNyeXN0YWwuICAqLworI2RlZmluZSBKQUdVQVJfQVRYX1VBUlRfQ0xLCTIwMDAwMDAwCisjZGVmaW5lIEpBR1VBUl9BVFhfQkFTRV9CQVVECShKQUdVQVJfQVRYX1VBUlRfQ0xLIC8gMTYpCisKKyNkZWZpbmUgSkFHVUFSX0FUWF9TRVJJQUwxX0lSUQk2CisjZGVmaW5lIEpBR1VBUl9BVFhfU0VSSUFMMV9CQVNFCTB4ZmQwMDAwMjNMCisKKyNkZWZpbmUgX0pBR1VBUl9BVFhfU0VSSUFMX0lOSVQoaW50LCBiYXNlKQkJCQlcCisJeyBiYXVkX2Jhc2U6IEpBR1VBUl9BVFhfQkFTRV9CQVVELCBpcnE6IGludCwJCQlcCisJICBmbGFnczogKEFTWU5DX0JPT1RfQVVUT0NPTkYgfCBBU1lOQ19TS0lQX1RFU1QpLAkJXAorCSAgaW9tZW1fYmFzZTogKHU4ICopIGJhc2UsIGlvbWVtX3JlZ19zaGlmdDogMiwJCQlcCisJICBpb190eXBlOiBTRVJJQUxfSU9fTUVNIH0KKyNkZWZpbmUgTU9NRU5DT19KQUdVQVJfQVRYX1NFUklBTF9QT1JUX0RFRk5TCQkJCVwKKwlfSkFHVUFSX0FUWF9TRVJJQUxfSU5JVChKQUdVQVJfQVRYX1NFUklBTDFfSVJRLCBKQUdVQVJfQVRYX1NFUklBTDFfQkFTRSkKKyNlbHNlCisjZGVmaW5lIE1PTUVOQ09fSkFHVUFSX0FUWF9TRVJJQUxfUE9SVF9ERUZOUworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTU9NRU5DT19PQ0VMT1RfMworI2RlZmluZSBPQ0VMT1RfM19CQVNFX0JBVUQJKCAyMDAwMDAwMCAvIDE2ICkKKyNkZWZpbmUgT0NFTE9UXzNfU0VSSUFMX0lSUQk2CisjZGVmaW5lIE9DRUxPVF8zX1NFUklBTF9CQVNFCShzaWduZWQpMHhmZDAwMDAyMAorCisjZGVmaW5lIF9PQ0VMT1RfM19TRVJJQUxfSU5JVChpbnQsIGJhc2UpCQkJCVwKKwl7IGJhdWRfYmFzZTogT0NFTE9UXzNfQkFTRV9CQVVELCBpcnE6IGludCwgCQkJXAorCSAgZmxhZ3M6IFNURF9DT01fRkxBR1MsCQkJCQkJXAorCSAgaW9tZW1fYmFzZTogKHU4ICopIGJhc2UsIGlvbWVtX3JlZ19zaGlmdDogMiwJCQlcCisJICBpb190eXBlOiBTRVJJQUxfSU9fTUVNIH0KKworI2RlZmluZSBNT01FTkNPX09DRUxPVF8zX1NFUklBTF9QT1JUX0RFRk5TCQkJCVwKKwlfT0NFTE9UXzNfU0VSSUFMX0lOSVQoT0NFTE9UXzNfU0VSSUFMX0lSUSwgT0NFTE9UXzNfU0VSSUFMX0JBU0UpCisjZWxzZQorI2RlZmluZSBNT01FTkNPX09DRUxPVF8zX1NFUklBTF9QT1JUX0RFRk5TCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NT01FTkNPX09DRUxPVAorLyogT3JkaW5hcnkgTlMxNjU1MiBkdWFydCB3aXRoIGEgMjBNSHogY3J5c3RhbC4gICovCisjZGVmaW5lIE9DRUxPVF9CQVNFX0JBVUQgKCAyMDAwMDAwMCAvIDE2ICkKKworI2RlZmluZSBPQ0VMT1RfU0VSSUFMMV9JUlEJNAorI2RlZmluZSBPQ0VMT1RfU0VSSUFMMV9CQVNFCTB4ZTAwMDEwMjAKKworI2RlZmluZSBfT0NFTE9UX1NFUklBTF9JTklUKGludCwgYmFzZSkJCQkJCVwKKwl7IC5iYXVkX2Jhc2UgPSBPQ0VMT1RfQkFTRV9CQVVELCAuaXJxID0gaW50LCAuZmxhZ3MgPSBTVERfQ09NX0ZMQUdTLAlcCisJICAuaW9tZW1fYmFzZSA9ICh1OCAqKSBiYXNlLCAuaW9tZW1fcmVnX3NoaWZ0ID0gMiwJCQlcCisJICAuaW9fdHlwZSA9IFNFUklBTF9JT19NRU0gfQorI2RlZmluZSBNT01FTkNPX09DRUxPVF9TRVJJQUxfUE9SVF9ERUZOUwkJCQlcCisJX09DRUxPVF9TRVJJQUxfSU5JVChPQ0VMT1RfU0VSSUFMMV9JUlEsIE9DRUxPVF9TRVJJQUwxX0JBU0UpCisjZWxzZQorI2RlZmluZSBNT01FTkNPX09DRUxPVF9TRVJJQUxfUE9SVF9ERUZOUworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTU9NRU5DT19PQ0VMT1RfRworLyogT3JkaW5hcnkgTlMxNjU1MiBkdWFydCB3aXRoIGEgMjBNSHogY3J5c3RhbC4gICovCisjZGVmaW5lIE9DRUxPVF9HX0JBU0VfQkFVRCAoIDIwMDAwMDAwIC8gMTYgKQorCisjZGVmaW5lIE9DRUxPVF9HX1NFUklBTDFfSVJRCTQKKyNpZiAwCisjZGVmaW5lIE9DRUxPVF9HX1NFUklBTDFfQkFTRQkweGUwMDAxMDIwCisjZWxzZQorI2RlZmluZSBPQ0VMT1RfR19TRVJJQUwxX0JBU0UJMHhmZDAwMDAyMAorI2VuZGlmCisKKyNkZWZpbmUgX09DRUxPVF9HX1NFUklBTF9JTklUKGludCwgYmFzZSkJCQkJXAorCXsgLmJhdWRfYmFzZSA9IE9DRUxPVF9HX0JBU0VfQkFVRCwgLmlycSA9IGludCwgLmZsYWdzID0gU1REX0NPTV9GTEFHUyxcCisJICAuaW9tZW1fYmFzZSA9ICh1OCAqKSBiYXNlLCAuaW9tZW1fcmVnX3NoaWZ0ID0gMiwJCQlcCisJICAuaW9fdHlwZSA9IFNFUklBTF9JT19NRU0gfQorI2RlZmluZSBNT01FTkNPX09DRUxPVF9HX1NFUklBTF9QT1JUX0RFRk5TCQkJCVwKKwlfT0NFTE9UX0dfU0VSSUFMX0lOSVQoT0NFTE9UX0dfU0VSSUFMMV9JUlEsIE9DRUxPVF9HX1NFUklBTDFfQkFTRSkKKyNlbHNlCisjZGVmaW5lIE1PTUVOQ09fT0NFTE9UX0dfU0VSSUFMX1BPUlRfREVGTlMKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01PTUVOQ09fT0NFTE9UX0MKKy8qIE9yZGluYXJ5IE5TMTY1NTIgZHVhcnQgd2l0aCBhIDIwTUh6IGNyeXN0YWwuICAqLworI2RlZmluZSBPQ0VMT1RfQ19CQVNFX0JBVUQgKCAyMDAwMDAwMCAvIDE2ICkKKworI2RlZmluZSBPQ0VMT1RfQ19TRVJJQUwxX0lSUQk4MAorI2RlZmluZSBPQ0VMT1RfQ19TRVJJQUwxX0JBU0UJMHhmZDAwMDAyMAorCisjZGVmaW5lIE9DRUxPVF9DX1NFUklBTDJfSVJRCTgxCisjZGVmaW5lIE9DRUxPVF9DX1NFUklBTDJfQkFTRQkweGZkMDAwMDAwCisKKyNkZWZpbmUgX09DRUxPVF9DX1NFUklBTF9JTklUKGludCwgYmFzZSkJCQkJXAorCXsgLmJhdWRfYmFzZQkJPSBPQ0VMT1RfQ19CQVNFX0JBVUQsCQkJXAorCSAgLmlycQkJCT0gKGludCksCQkJCVwKKwkgIC5mbGFncwkJPSBTVERfQ09NX0ZMQUdTLAkJCVwKKwkgIC5pb21lbV9iYXNlCQk9ICh1OCAqKSBiYXNlLAkJCQlcCisJICAuaW9tZW1fcmVnX3NoaWZ0CT0gMiwJCQkJCVwKKwkgIC5pb190eXBlCQk9IFNFUklBTF9JT19NRU0JCQkJXAorCSB9CisjZGVmaW5lIE1PTUVOQ09fT0NFTE9UX0NfU0VSSUFMX1BPUlRfREVGTlMJCQkJXAorCV9PQ0VMT1RfQ19TRVJJQUxfSU5JVChPQ0VMT1RfQ19TRVJJQUwxX0lSUSwgT0NFTE9UX0NfU0VSSUFMMV9CQVNFKSwgXAorCV9PQ0VMT1RfQ19TRVJJQUxfSU5JVChPQ0VMT1RfQ19TRVJJQUwyX0lSUSwgT0NFTE9UX0NfU0VSSUFMMl9CQVNFKQorI2Vsc2UKKyNkZWZpbmUgTU9NRU5DT19PQ0VMT1RfQ19TRVJJQUxfUE9SVF9ERUZOUworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfRERCNTQ3NworI2luY2x1ZGUgPGFzbS9kZGI1eHh4L2RkYjU0NzcuaD4KKyNkZWZpbmUgRERCNTQ3N19TRVJJQUxfUE9SVF9ERUZOUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeyAuYmF1ZF9iYXNlID0gQkFTRV9CQVVELCAuaXJxID0gVlJDNTQ3N19JUlFfVUFSVDAsIAkJXAorCSAgLmZsYWdzID0gU1REX0NPTV9GTEFHUywgLmlvbWVtX2Jhc2UgPSAodTgqKTB4YmZhMDQyMDAsIAlcCisJICAuaW9tZW1fcmVnX3NoaWZ0ID0gMywgLmlvX3R5cGUgPSBTRVJJQUxfSU9fTUVNfSwJCVwKKyAgICAgICAgeyAuYmF1ZF9iYXNlID0gQkFTRV9CQVVELCAuaXJxID0gVlJDNTQ3N19JUlFfVUFSVDEsIAkJXAorCSAgLmZsYWdzID0gU1REX0NPTV9GTEFHUywgLmlvbWVtX2Jhc2UgPSAodTgqKTB4YmZhMDQyNDAsIAlcCisJICAuaW9tZW1fcmVnX3NoaWZ0ID0gMywgLmlvX3R5cGUgPSBTRVJJQUxfSU9fTUVNfSwKKyNlbHNlCisjZGVmaW5lIEREQjU0NzdfU0VSSUFMX1BPUlRfREVGTlMKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1NHSV9JUDMyCisvKgorICogVGhlIElQMzIgKFNHSSBPMikgaGFzIHN0YW5kYXJkIHNlcmlhbCBwb3J0cyAoVUFSVCAxNjU1MEEpIG1hcHBlZCBpbiBtZW1vcnkKKyAqIFRoZXkgYXJlIGluaXRpYWxpemVkIGluIGlwMzJfc2V0dXAKKyAqLworI2RlZmluZSBJUDMyX1NFUklBTF9QT1JUX0RFRk5TCQkJCVwKKyAgICAgICAge30se30sCisjZWxzZQorI2RlZmluZSBJUDMyX1NFUklBTF9QT1JUX0RFRk5TCisjZW5kaWYgLyogQ09ORklHX1NHSV9JUDMyICovCisKKyNkZWZpbmUgU0VSSUFMX1BPUlRfREZOUwkJCQlcCisJQ09CQUxUX1NFUklBTF9QT1JUX0RFRk5TCQkJXAorCUREQjU0NzdfU0VSSUFMX1BPUlRfREVGTlMJCQlcCisJRVY5NjEwMF9TRVJJQUxfUE9SVF9ERUZOUwkJCVwKKwlFWFRSQV9TRVJJQUxfUE9SVF9ERUZOUwkJCQlcCisJSFVCNl9TRVJJQUxfUE9SVF9ERk5TCQkJCVwKKwlJUDMyX1NFUklBTF9QT1JUX0RFRk5TICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJSVRFX1NFUklBTF9QT1JUX0RFRk5TICAgICAgICAgICAJCVwKKwlJVlJfU0VSSUFMX1BPUlRfREVGTlMgICAgICAgICAgIAkJXAorCUpBWlpfU0VSSUFMX1BPUlRfREVGTlMJCQkJXAorCVNURF9TRVJJQUxfUE9SVF9ERUZOUwkJCQlcCisJTU9NRU5DT19PQ0VMT1RfR19TRVJJQUxfUE9SVF9ERUZOUwkJXAorCU1PTUVOQ09fT0NFTE9UX0NfU0VSSUFMX1BPUlRfREVGTlMJCVwKKwlNT01FTkNPX09DRUxPVF9TRVJJQUxfUE9SVF9ERUZOUwkJXAorCU1PTUVOQ09fT0NFTE9UXzNfU0VSSUFMX1BPUlRfREVGTlMJCVwKKwlUWFg5MjdfU0VSSUFMX1BPUlRfREVGTlMgICAgICAgICAgICAgICAgICAgICAgICBcCisJQVUxMDAwX1NFUklBTF9QT1JUX0RFRk5TCisKKyNlbmRpZiAvKiBfQVNNX1NFUklBTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NldHVwLmggYi9pbmNsdWRlL2FzbS1taXBzL3NldHVwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM3ZmE0YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc2V0dXAuaApAQCAtMCwwICsxLDggQEAKKyNpZmRlZiBfX0tFUk5FTF9fCisjaWZuZGVmIF9NSVBTX1NFVFVQX0gKKyNkZWZpbmUgX01JUFNfU0VUVVBfSAorCisjZGVmaW5lIENPTU1BTkRfTElORV9TSVpFCTI1NgorCisjZW5kaWYgLyogX19TRVRVUF9IICovCisjZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zZ2kvZ2lvLmggYi9pbmNsdWRlL2FzbS1taXBzL3NnaS9naW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzhkNjZmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zZ2kvZ2lvLmgKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogZ2lvLmg6IERlZmluaXRpb25zIGZvciBTR0kgR0lPIGJ1cworICoKKyAqIENvcHlyaWdodCAoQykgMjAwMiBMYWRpc2xhdiBNaWNobAorICovCisKKyNpZm5kZWYgX1NHSV9HSU9fSAorI2RlZmluZSBfU0dJX0dJT19ICisKKy8qCisgKiBHSU8gYnVzIGFkZHJlc3NlcworICoKKyAqIFRoZSBJbmRpZ28gYW5kIEluZHkgaGF2ZSB0d28gR0lPIGJ1cyBjb25uZWN0b3JzLiBJbmRpZ28yIChhbGwgbW9kZWxzKSBoYXZlCisgKiB0aHJlZSBwaHlzaWNhbCBjb25uZWN0b3JzLCBidXQgb25seSB0d28gc2xvdHMsIEdGWCBhbmQgRVhQMC4KKyAqIAorICogVGhlcmUgaXMgMTBNQiBvZiBHSU8gYWRkcmVzcyBzcGFjZSBmb3IgR0lPNjQgc2xvdCBkZXZpY2VzCisgKiBzbG90IyAgIHNsb3QgdHlwZSBhZGRyZXNzIHJhbmdlICAgICAgICAgICAgc2l6ZQorICogLS0tLS0gICAtLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0KKyAqICAgMCAgICAgR0ZYICAgICAgIDB4MWYwMDAwMDAgLSAweDFmM2ZmZmZmICAgNE1CCisgKiAgIDEgICAgIEVYUDAgICAgICAweDFmNDAwMDAwIC0gMHgxZjVmZmZmZiAgIDJNQgorICogICAyICAgICBFWFAxICAgICAgMHgxZjYwMDAwMCAtIDB4MWY5ZmZmZmYgICA0TUIKKyAqCisgKiBUaGVyZSBhcmUgdW4tc2xvdHRlZCBkZXZpY2VzLCBIUEMsIEkvTyBhbmQgbWlzYyBkZXZpY2VzLCB3aGljaCBhcmUgZ3JvdXBlZAorICogaW50byB0aGUgSFBDIGFkZHJlc3Mgc3BhY2UuCisgKiAgIC0gICAgIE1JU0MgICAgICAweDFmYjAwMDAwIC0gMHgxZmJmZmZmZiAgIDFNQgorICoKKyAqIEZvbGxvd2luZyBzcGFjZSBpcyByZXNlcnZlZCBhbmQgdW51c2VkCisgKiAgIC0gICAgIFJFU0VSVkVEICAweDE4MDAwMDAwIC0gMHgxZWZmZmZmZiAxMTJNQgorICoKKyAqIEdJTyBidXMgSURzCisgKgorICogRWFjaCBHSU8gYnVzIGRldmljZSBpZGVudGlmaWVzIGl0c2VsZiB0byB0aGUgc3lzdGVtIGJ5IGFuc3dlcmluZyBhCisgKiByZWFkIHdpdGggYW4gIklEIiB2YWx1ZS4gSURzIGFyZSBlaXRoZXIgOCBvciAzMiBiaXRzIGxvbmcuIElEcyBsZXNzCisgKiB0aGFuIDEyOCBhcmUgOCBiaXRzIGxvbmcsIHdpdGggdGhlIG1vc3Qgc2lnbmlmaWNhbnQgMjQgYml0cyByZWFkIGZyb20KKyAqIHRoZSBzbG90IHVuZGVmaW5lZC4KKyAqCisgKiAzMi1iaXQgSURzIGFyZSBkaXZpZGVkIGludG8KKyAqCWJpdHMgMDo2ICAgICAgICB0aGUgcHJvZHVjdCBJRDsgcmFuZ2VzIGZyb20gMHgwMCB0byAweDdGLgorICoJYml0IDcJCTA9R0lPIFByb2R1Y3QgSUQgaXMgOCBiaXRzIHdpZGUKKyAqCQkJMT1HSU8gUHJvZHVjdCBJRCBpcyAzMiBiaXRzIHdpZGUuCisgKgliaXRzIDg6MTUgICAgICAgbWFudWZhY3R1cmVyIHZlcnNpb24gZm9yIHRoZSBwcm9kdWN0LgorICoJYml0IDE2CQkwPUdJTzMyIGFuZCBHSU8zMi1iaXMsIDE9R0lPNjQuCisgKgliaXQgMTcJCTA9bm8gUk9NIHByZXNlbnQKKyAqCQkJMT1ST00gcHJlc2VudCBvbiB0aGlzIGJvYXJkIEFORCBuZXh0IHRocmVlIHdvcmRzCisgKgkJCXNwYWNlIGRlZmluZSB0aGUgUk9NLgorICoJYml0cyAxODozMQl1cCB0byBtYW51ZmFjdHVyZXIuCisgKgorICogSURzIGFib3ZlIDB4NTAvMHhkMCBhcmUgb2YgM3JkIHBhcnR5IGJvYXJkcy4KKyAqCisgKiA4LWJpdCBJRHMKKyAqCTB4MDEJCVhQSSBsb3cgY29zdCBGRERJCisgKgkweDAyCQlHVFIgVG9rZW5SaW5nCisgKgkweDA0CQlTeW5jaHJvbm91cyBJU0ROCisgKgkweDA1CQlBVE0gYm9hcmQgWypdCisgKgkweDA2CQlDYW5vbiBJbnRlcmZhY2UKKyAqCTB4MDcJCTE2IGJpdCBTQ1NJIENhcmQgWypdCisgKgkweDA4CQlKUEVHIChEb3VibGUgV2lkZSkKKyAqCTB4MDkJCUpQRUcgKFNpbmdsZSBXaWRlKQorICoJMHgwYQkJWFBJIG1lei4gRkRESSBkZXZpY2UgMAorICoJMHgwYgkJWFBJIG1lei4gRkRESSBkZXZpY2UgMQorICoJMHgwYwkJU01QVEUgMjU5TSBWaWRlbyBbKl0KKyAqCTB4MGQJCUJhYmJsZWZpc2ggQ29tcHJlc3Npb24gWypdCisgKgkweDBlCQlFLVBsZXggOC1wb3J0IEV0aGVybmV0CisgKgkweDMwCQlMeW9uIExhbWIgSVZBUworICoJMHhiOAkJR0lPIDEwMEJhc2VUWCBGYXN0IEV0aGVybmV0IChnZmUpCisgKgorICogWypdIERldmljZSBwcm92aWRlIDMyLWJpdCBJRC4KKyAqCisgKi8KKworI2RlZmluZSBHSU9fSUQoeCkJCSh4ICYgMHg3ZikKKyNkZWZpbmUgR0lPXzMyQklUX0lECQkweDgwCisjZGVmaW5lIEdJT19SRVYoeCkJCSgoeCA+PiA4KSAmIDB4ZmYpCisjZGVmaW5lIEdJT182NEJJVF9JRkFDRQkJMHgxMDAwMAorI2RlZmluZSBHSU9fUk9NX1BSRVNFTlQJCTB4MjAwMDAKKyNkZWZpbmUgR0lPX1ZFTkRPUl9DT0RFKHgpCSgoeCA+PiAxOCkgJiAweDNmZmYpCisKKyNkZWZpbmUgR0lPX1NMT1RfR0ZYX0JBU0UJMHgxZjAwMDAwMAorI2RlZmluZSBHSU9fU0xPVF9FWFAwX0JBU0UJMHgxZjQwMDAwMAorI2RlZmluZSBHSU9fU0xPVF9FWFAxX0JBU0UJMHgxZjYwMDAwMAorCisjZW5kaWYgLyogX1NHSV9HSU9fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zZ2kvaHBjMy5oIGIvaW5jbHVkZS9hc20tbWlwcy9zZ2kvaHBjMy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1Yjk4OGQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NnaS9ocGMzLmgKQEAgLTAsMCArMSwzMTcgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIGhwYzMuaDogRGVmaW5pdGlvbnMgZm9yIFNHSSBIUEMzIGNvbnRyb2xsZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYgRGF2aWQgUy4gTWlsbGVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggUmFsZiBCYWVjaGxlCisgKi8KKworI2lmbmRlZiBfU0dJX0hQQzNfSAorI2RlZmluZSBfU0dJX0hQQzNfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorCisvKiBBbiBIUEMgRE1BIGRlc2NyaXB0b3IuICovCitzdHJ1Y3QgaHBjX2RtYV9kZXNjIHsKKwl1MzIgcGJ1ZjsJLyogcGh5c2ljYWwgYWRkcmVzcyBvZiBkYXRhIGJ1ZmZlciAqLworCXUzMiBjbnRpbmZvOwkvKiBjb3VudGVyIGFuZCBpbmZvIGJpdHMgKi8KKyNkZWZpbmUgSFBDRE1BX0VPWAkweDgwMDAwMDAwIC8qIGxhc3QgZGVzYyBpbiBjaGFpbiBmb3IgdHggKi8KKyNkZWZpbmUgSFBDRE1BX0VPUgkweDgwMDAwMDAwIC8qIGxhc3QgZGVzYyBpbiBjaGFpbiBmb3IgcnggKi8KKyNkZWZpbmUgSFBDRE1BX0VPWFAJMHg0MDAwMDAwMCAvKiBlbmQgb2YgcGFja2V0IGZvciB0eCAqLworI2RlZmluZSBIUENETUFfRU9SUAkweDQwMDAwMDAwIC8qIGVuZCBvZiBwYWNrZXQgZm9yIHJ4ICovCisjZGVmaW5lIEhQQ0RNQV9YSUUJMHgyMDAwMDAwMCAvKiBpcnEgZ2VuZXJhdGVkIHdoZW4gYXQgZW5kIG9mIHRoaXMgZGVzYyAqLworI2RlZmluZSBIUENETUFfWElVCTB4MDEwMDAwMDAgLyogVHggYnVmZmVyIGluIHVzZSBieSBDUFUuICovCisjZGVmaW5lIEhQQ0RNQV9FSVBDCTB4MDBmZjAwMDAgLyogU0VFUSBldGhlcm5ldCBzcGVjaWFsIHh0ZXJuYWwgYnl0ZWNvdW50ICovCisjZGVmaW5lIEhQQ0RNQV9FVFhECTB4MDAwMDgwMDAgLyogc2V0IHRvIG9uZSBieSBIUEMgd2hlbiBwYWNrZXQgdHgnZCAqLworI2RlZmluZSBIUENETUFfT1dOCTB4MDAwMDQwMDAgLyogRGVub3RlcyByaW5nIGJ1ZmZlciBvd25lcnNoaXAgb24gcnggKi8KKyNkZWZpbmUgSFBDRE1BX0JDTlQJMHgwMDAwM2ZmZiAvKiBzaXplIGluIGJ5dGVzIG9mIHRoaXMgZG1hIGJ1ZmZlciAqLworCisJdTMyIHBuZXh0OwkvKiBwYWRkciBvZiBuZXh0IGhwY19kbWFfZGVzYyBpZiBhbnkgKi8KK307CisKKy8qIFRoZSBzZXQgb2YgcmVncyBmb3IgZWFjaCBIUEMzIFBCVVMgRE1BIGNoYW5uZWwuICovCitzdHJ1Y3QgaHBjM19wYnVzX2RtYWNyZWdzIHsKKwl2b2xhdGlsZSB1MzIgcGJkbWFfYnB0cjsJLyogcGJ1cyBkbWEgY2hhbm5lbCBidWZmZXIgcHRyICovCisJdm9sYXRpbGUgdTMyIHBiZG1hX2RwdHI7CS8qIHBidXMgZG1hIGNoYW5uZWwgZGVzYyBwdHIgKi8KKwl1MzIgX3VudXNlZDBbMHgxMDAwLzQgLSAyXTsJLyogcGFkZGluZyAqLworCXZvbGF0aWxlIHUzMiBwYmRtYV9jdHJsOwkvKiBwYnVzIGRtYSBjaGFubmVsIGNvbnRyb2wgcmVnaXN0ZXIgaGFzCisJCQkJCSAqIGNvcGxldGVseSBkaWZmZXJlbnQgbWVhbmluZyBmb3IgcmVhZAorCQkJCQkgKiBjb21wYXJlZCB3aXRoIHdyaXRlICovCisJLyogcmVhZCAqLworI2RlZmluZSBIUEMzX1BETUFDVFJMX0lOVAkweDAwMDAwMDAxIC8qIGludGVycnVwdCAoY2xlYXJlZCBhZnRlciByZWFkKSAqLworI2RlZmluZSBIUEMzX1BETUFDVFJMX0lTQUNUCTB4MDAwMDAwMDIgLyogY2hhbm5lbCBhY3RpdmUgKi8KKwkvKiB3cml0ZSAqLworI2RlZmluZSBIUEMzX1BETUFDVFJMX1NFTAkweDAwMDAwMDAyIC8qIGxpdHRsZSBlbmRpYW4gdHJhbnNmZXIgKi8KKyNkZWZpbmUgSFBDM19QRE1BQ1RSTF9SQ1YJMHgwMDAwMDAwNCAvKiBkaXJlY3Rpb24gaXMgcmVjZWl2ZSAqLworI2RlZmluZSBIUEMzX1BETUFDVFJMX0ZMU0gJMHgwMDAwMDAwOCAvKiBlbmFibGUgZmx1c2ggZm9yIHJlY2VpdmUgRE1BICovCisjZGVmaW5lIEhQQzNfUERNQUNUUkxfQUNUCTB4MDAwMDAwMTAgLyogc3RhcnQgZG1hIHRyYW5zZmVyICovCisjZGVmaW5lIEhQQzNfUERNQUNUUkxfTEQJMHgwMDAwMDAyMCAvKiBsb2FkIGVuYWJsZSBmb3IgQUNUICovCisjZGVmaW5lIEhQQzNfUERNQUNUUkxfUlQJMHgwMDAwMDA0MCAvKiBVc2UgcmVhbHRpbWUgR0lPIGJ1cyBzZXJ2aWNpbmcgKi8KKyNkZWZpbmUgSFBDM19QRE1BQ1RSTF9IVwkweDAwMDBmZjAwIC8qIERNQSBIaWdoLXdhdGVyIG1hcmsgKi8KKyNkZWZpbmUgSFBDM19QRE1BQ1RSTF9GQgkweDAwM2YwMDAwIC8qIFB0ciB0byBiZWdpbm5pbmcgb2YgZmlmbyAqLworI2RlZmluZSBIUEMzX1BETUFDVFJMX0ZFCTB4M2YwMDAwMDAgLyogUHRyIHRvIGVuZCBvZiBmaWZvICovCisKKwl1MzIgX3VudXNlZDFbMHgxMDAwLzQgLSAxXTsJLyogcGFkZGluZyAqLworfTsKKworLyogVGhlIEhQQzMgU0NTSSByZWdpc3RlcnMsIHRoaXMgZG9lcyBub3QgaW5jbHVkZSBleHRlcm5hbCBvbmVzLiAqLworc3RydWN0IGhwYzNfc2NzaXJlZ3MgeworCXZvbGF0aWxlIHUzMiBjYnB0cjsJLyogY3VycmVudCBkbWEgYnVmZmVyIHB0ciwgZGlhZ25vc3RpYyB1c2Ugb25seSAqLworCXZvbGF0aWxlIHUzMiBuZHB0cjsJLyogbmV4dCBkbWEgZGVzY3JpcHRvciBwdHIgKi8KKwl1MzIgX3VudXNlZDBbMHgxMDAwLzQgLSAyXTsJLyogcGFkZGluZyAqLworCXZvbGF0aWxlIHUzMiBiY2Q7CS8qIGJ5dGUgY291bnQgaW5mbyAqLworI2RlZmluZSBIUEMzX1NCQ0RfQkNOVE1TSyAweDAwMDAzZmZmIC8qIGJ5dGVzIHRvIHRyYW5zZmVyIGZyb20vdG8gbWVtb3J5ICovCisjZGVmaW5lIEhQQzNfU0JDRF9YSUUgICAgIDB4MDAwMDQwMDAgLyogU2VuZCBJUlEgd2hlbiBkb25lIHdpdGggY3VyIGJ1ZiAqLworI2RlZmluZSBIUEMzX1NCQ0RfRU9YICAgICAweDAwMDA4MDAwIC8qIEluZGljYXRlcyB0aGlzIGlzIGxhc3QgYnVmIGluIGNoYWluICovCisKKwl2b2xhdGlsZSB1MzIgY3RybDsgICAgLyogY29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBIUEMzX1NDVFJMX0lSUSAgICAweDAxIC8qIElSUSBhc3NlcnRlZCwgZWl0aGVyIGRtYSBkb25lIG9yIHBhcml0eSAqLworI2RlZmluZSBIUEMzX1NDVFJMX0VORElBTiAweDAyIC8qIERNQSBlbmRpYW4gbW9kZSwgMD1iaWcgMT1saXR0bGUgKi8KKyNkZWZpbmUgSFBDM19TQ1RSTF9ESVIgICAgMHgwNCAvKiBETUEgZGlyZWN0aW9uLCAxPWRldjJtZW0gMD1tZW0yZGV2ICovCisjZGVmaW5lIEhQQzNfU0NUUkxfRkxVU0ggIDB4MDggLyogVGVsbHMgSFBDMyB0byBmbHVzaCBzY3NpIGZpZm9zICovCisjZGVmaW5lIEhQQzNfU0NUUkxfQUNUSVZFIDB4MTAgLyogU0NTSSBETUEgY2hhbm5lbCBpcyBhY3RpdmUgKi8KKyNkZWZpbmUgSFBDM19TQ1RSTF9BTUFTSyAgMHgyMCAvKiBETUEgYWN0aXZlIGluaGliaXRzIFBJTyAqLworI2RlZmluZSBIUEMzX1NDVFJMX0NSRVNFVCAweDQwIC8qIFJlc2V0cyBkbWEgY2hhbm5lbCBhbmQgZXh0ZXJuYWwgY29udHJvbGxlciAqLworI2RlZmluZSBIUEMzX1NDVFJMX1BFUlIgICAweDgwIC8qIEJhZCBwYXJpdHkgb24gSFBDMyBpZmFjZSB0byBzY3NpIGNvbnRyb2xsZXIgKi8KKworCXZvbGF0aWxlIHUzMiBnZnB0cjsJLyogY3VycmVudCBHSU8gZmlmbyBwdHIgKi8KKwl2b2xhdGlsZSB1MzIgZGZwdHI7CS8qIGN1cnJlbnQgZGV2aWNlIGZpZm8gcHRyICovCisJdm9sYXRpbGUgdTMyIGRjb25maWc7CS8qIERNQSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyICovCisjZGVmaW5lIEhQQzNfU0RDRkdfSENMSyAweDAwMDAxIC8qIEVuYWJsZSBETUEgaGFsZiBjbG9jayBtb2RlICovCisjZGVmaW5lIEhQQzNfU0RDRkdfRDEgICAweDAwMDA2IC8qIEN5Y2xlcyB0byBzcGVuZCBpbiBEMSBzdGF0ZSAqLworI2RlZmluZSBIUEMzX1NEQ0ZHX0QyICAgMHgwMDAzOCAvKiBDeWNsZXMgdG8gc3BlbmQgaW4gRDIgc3RhdGUgKi8KKyNkZWZpbmUgSFBDM19TRENGR19EMyAgIDB4MDAxYzAgLyogQ3ljbGVzIHRvIHNwZW5kIGluIEQzIHN0YXRlICovCisjZGVmaW5lIEhQQzNfU0RDRkdfSFdBVCAweDAwZTAwIC8qIERNQSBoaWdoIHdhdGVyIG1hcmsgKi8KKyNkZWZpbmUgSFBDM19TRENGR19IVyAgIDB4MDEwMDAgLyogRW5hYmxlIDE2LWJpdCBoYWxmd29yZCBETUEgYWNjZXNzZXMgdG8gc2NzaSAqLworI2RlZmluZSBIUEMzX1NEQ0ZHX1NXQVAgMHgwMjAwMCAvKiBCeXRlIHN3YXAgYWxsIERNQSBhY2Nlc3NlcyAqLworI2RlZmluZSBIUEMzX1NEQ0ZHX0VQQVIgMHgwNDAwMCAvKiBFbmFibGUgcGFyaXR5IGNoZWNraW5nIGZvciBETUEgKi8KKyNkZWZpbmUgSFBDM19TRENGR19QT0xMIDB4MDgwMDAgLyogaGRfZHJlcSBwb2xhcml0eSBjb250cm9sICovCisjZGVmaW5lIEhQQzNfU0RDRkdfRVJMWSAweDMwMDAwIC8qIGhkX2RyZXEgYmVoYXZpb3IgY29udHJvbCBiaXRzICovCisKKwl2b2xhdGlsZSB1MzIgcGNvbmZpZzsJLyogUElPIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgKi8KKyNkZWZpbmUgSFBDM19TUENGR19QMyAgIDB4MDAwMyAvKiBDeWNsZXMgdG8gc3BlbmQgaW4gUDMgc3RhdGUgKi8KKyNkZWZpbmUgSFBDM19TUENGR19QMlcgIDB4MDAxYyAvKiBDeWNsZXMgdG8gc3BlbmQgaW4gUDIgc3RhdGUgZm9yIHdyaXRlcyAqLworI2RlZmluZSBIUEMzX1NQQ0ZHX1AyUiAgMHgwMWUwIC8qIEN5Y2xlcyB0byBzcGVuZCBpbiBQMiBzdGF0ZSBmb3IgcmVhZHMgKi8KKyNkZWZpbmUgSFBDM19TUENGR19QMSAgIDB4MGUwMCAvKiBDeWNsZXMgdG8gc3BlbmQgaW4gUDEgc3RhdGUgKi8KKyNkZWZpbmUgSFBDM19TUENGR19IVyAgIDB4MTAwMCAvKiBFbmFibGUgMTYtYml0IGhhbGZ3b3JkIFBJTyBhY2Nlc3NlcyB0byBzY3NpICovCisjZGVmaW5lIEhQQzNfU1BDRkdfU1dBUCAweDIwMDAgLyogQnl0ZSBzd2FwIGFsbCBQSU8gYWNjZXNzZXMgKi8KKyNkZWZpbmUgSFBDM19TUENGR19FUEFSIDB4NDAwMCAvKiBFbmFibGUgcGFyaXR5IGNoZWNraW5nIGZvciBQSU8gKi8KKyNkZWZpbmUgSFBDM19TUENGR19GVUpJIDB4ODAwMCAvKiBGdWppdHN1IHNjc2kgY29udHJvbGxlciBtb2RlIGZvciBmYXN0ZXIgZG1hL3BpbyAqLworCisJdTMyIF91bnVzZWQxWzB4MTAwMC80IC0gNl07CS8qIHBhZGRpbmcgKi8KK307CisKKy8qIFNFRVEgZXRoZXJuZXQgSFBDMyByZWdpc3RlcnMsIG9ubHkgb25lIHNlZXEgcGVyIEhQQzMuICovCitzdHJ1Y3QgaHBjM19ldGhyZWdzIHsKKwkvKiBSZWNlaXZlciByZWdpc3RlcnMuICovCisJdm9sYXRpbGUgdTMyIHJ4X2NicHRyOyAgIC8qIGN1cnJlbnQgZG1hIGJ1ZmZlciBwdHIsIGRpYWdub3N0aWMgdXNlIG9ubHkgKi8KKwl2b2xhdGlsZSB1MzIgcnhfbmRwdHI7ICAgLyogbmV4dCBkbWEgZGVzY3JpcHRvciBwdHIgKi8KKwl1MzIgX3VudXNlZDBbMHgxMDAwLzQgLSAyXTsJLyogcGFkZGluZyAqLworCXZvbGF0aWxlIHUzMiByeF9iY2Q7CS8qIGJ5dGUgY291bnQgaW5mbyAqLworI2RlZmluZSBIUEMzX0VSWEJDRF9CQ05UTVNLIDB4MDAwMDNmZmYgLyogYnl0ZXMgdG8gYmUgc2VudCB0byBtZW1vcnkgKi8KKyNkZWZpbmUgSFBDM19FUlhCQ0RfWElFICAgICAweDIwMDAwMDAwIC8qIEhQQzMgaW50ZXJydXB0cyBjcHUgYXQgZW5kIG9mIHRoaXMgYnVmICovCisjZGVmaW5lIEhQQzNfRVJYQkNEX0VPWCAgICAgMHg4MDAwMDAwMCAvKiBmbGFncyB0aGlzIGFzIGVuZCBvZiBkZXNjcmlwdG9yIGNoYWluICovCisKKwl2b2xhdGlsZSB1MzIgcnhfY3RybDsJLyogY29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBIUEMzX0VSWENUUkxfU1RBVDUwIDB4MDAwMDAwM2YgLyogUmVjZWl2ZSBzdGF0dXMgcmVnIGJpdHMgb2YgU2VlcTgwMDMgKi8KKyNkZWZpbmUgSFBDM19FUlhDVFJMX1NUQVQ2ICAweDAwMDAwMDQwIC8qIFJkb25seSBpcnEgc3RhdHVzICovCisjZGVmaW5lIEhQQzNfRVJYQ1RSTF9TVEFUNyAgMHgwMDAwMDA4MCAvKiBSZG9ubHQgb2xkL25ldyBzdGF0dXMgYml0IGZyb20gU2VlcSAqLworI2RlZmluZSBIUEMzX0VSWENUUkxfRU5ESUFOIDB4MDAwMDAxMDAgLyogRW5kaWFuIGZvciBkbWEgY2hhbm5lbCwgbGl0dGxlPTEgYmlnPTAgKi8KKyNkZWZpbmUgSFBDM19FUlhDVFJMX0FDVElWRSAweDAwMDAwMjAwIC8qIFRlbGxzIGlmIERNQSB0cmFuc2ZlciBpcyBpbiBwcm9ncmVzcyAqLworI2RlZmluZSBIUEMzX0VSWENUUkxfQU1BU0sgIDB4MDAwMDA0MDAgLyogVGVsbHMgaWYgQUNUSVZFIGluaGliaXRzIFBJTydzIHRvIGhwYzMgKi8KKyNkZWZpbmUgSFBDM19FUlhDVFJMX1JCTyAgICAweDAwMDAwODAwIC8qIFJlY2VpdmUgYnVmZmVyIG92ZXJmbG93IGlmIHNldCB0byAxICovCisKKwl2b2xhdGlsZSB1MzIgcnhfZ2ZwdHI7CS8qIGN1cnJlbnQgR0lPIGZpZm8gcHRyICovCisJdm9sYXRpbGUgdTMyIHJ4X2RmcHRyOwkvKiBjdXJyZW50IGRldmljZSBmaWZvIHB0ciAqLworCXUzMiBfdW51c2VkMTsJCS8qIHBhZGRpbmcgKi8KKwl2b2xhdGlsZSB1MzIgcnhfcmVzZXQ7CS8qIHJlc2V0IHJlZ2lzdGVyICovCisjZGVmaW5lIEhQQzNfRVJYUlNUX0NSRVNFVCAweDEJLyogUmVzZXQgZG1hIGNoYW5uZWwgYW5kIGV4dGVybmFsIGNvbnRyb2xsZXIgKi8KKyNkZWZpbmUgSFBDM19FUlhSU1RfQ0xSSVJRIDB4MgkvKiBDbGVhciBjaGFubmVsIGludGVycnVwdCAqLworI2RlZmluZSBIUEMzX0VSWFJTVF9MQkFDSyAgMHg0CS8qIEVuYWJsZSBkaWFnbm9zdGljIGxvb3BiYWNrIG1vZGUgb2YgU2VlcTgwMDMgKi8KKworCXZvbGF0aWxlIHUzMiByeF9kY29uZmlnOwkvKiBETUEgY29uZmlndXJhdGlvbiByZWdpc3RlciAqLworI2RlZmluZSBIUEMzX0VSWERDRkdfRDEgICAgMHgwMDAwZiAvKiBDeWNsZXMgdG8gc3BlbmQgaW4gRDEgc3RhdGUgZm9yIFBJTyAqLworI2RlZmluZSBIUEMzX0VSWERDRkdfRDIgICAgMHgwMDBmMCAvKiBDeWNsZXMgdG8gc3BlbmQgaW4gRDIgc3RhdGUgZm9yIFBJTyAqLworI2RlZmluZSBIUEMzX0VSWERDRkdfRDMgICAgMHgwMGYwMCAvKiBDeWNsZXMgdG8gc3BlbmQgaW4gRDMgc3RhdGUgZm9yIFBJTyAqLworI2RlZmluZSBIUEMzX0VSWERDRkdfV0NUUkwgMHgwMTAwMCAvKiBFbmFibGUgd3JpdGVzIG9mIGRlc2MgaW50byBleCBjdHJsIHBvcnQgKi8KKyNkZWZpbmUgSFBDM19FUlhEQ0ZHX0ZSWERDIDB4MDIwMDAgLyogQ2xlYXIgZW9wIHN0YXQgYml0cyB1cG9uIHJ4ZGMsIGh3IHNlZXEgZml4ICovCisjZGVmaW5lIEhQQzNfRVJYRENGR19GRU9QICAweDA0MDAwIC8qIEJhZCBwYWNrZXQgbWFya2VyIHRpbWVvdXQgZW5hYmxlICovCisjZGVmaW5lIEhQQzNfRVJYRENGR19GSVJRICAweDA4MDAwIC8qIEFub3RoZXIgYmFkIHBhY2tldCB0aW1lb3V0IGVuYWJsZSAqLworI2RlZmluZSBIUEMzX0VSWERDRkdfUFRPICAgMHgzMDAwMCAvKiBQcm9ncmFtbWVkIHRpbWVvdXQgdmFsdWUgZm9yIGFib3ZlIHR3byAqLworCisJdm9sYXRpbGUgdTMyIHJ4X3Bjb25maWc7CS8qIFBJTyBjb25maWd1cmF0aW9uIHJlZ2lzdGVyICovCisjZGVmaW5lIEhQQzNfRVJYUENGR19QMSAgICAweDAwMGYgLyogQ3ljbGVzIHRvIHNwZW5kIGluIFAxIHN0YXRlIGZvciBQSU8gKi8KKyNkZWZpbmUgSFBDM19FUlhQQ0ZHX1AyICAgIDB4MDBmMCAvKiBDeWNsZXMgdG8gc3BlbmQgaW4gUDIgc3RhdGUgZm9yIFBJTyAqLworI2RlZmluZSBIUEMzX0VSWFBDRkdfUDMgICAgMHgwZjAwIC8qIEN5Y2xlcyB0byBzcGVuZCBpbiBQMyBzdGF0ZSBmb3IgUElPICovCisjZGVmaW5lIEhQQzNfRVJYUENGR19UU1QgICAweDEwMDAgLyogRGlhZ25pc3RpYyByYW0gdGVzdCBmZWF0dXJlIGJpdCAqLworCisJdTMyIF91bnVzZWQyWzB4MTAwMC80IC0gOF07CS8qIHBhZGRpbmcgKi8KKworCS8qIFRyYW5zbWl0dGVyIHJlZ2lzdGVycy4gKi8KKwl2b2xhdGlsZSB1MzIgdHhfY2JwdHI7CS8qIGN1cnJlbnQgZG1hIGJ1ZmZlciBwdHIsIGRpYWdub3N0aWMgdXNlIG9ubHkgKi8KKwl2b2xhdGlsZSB1MzIgdHhfbmRwdHI7CS8qIG5leHQgZG1hIGRlc2NyaXB0b3IgcHRyICovCisJdTMyIF91bnVzZWQzWzB4MTAwMC80IC0gMl07CS8qIHBhZGRpbmcgKi8KKwl2b2xhdGlsZSB1MzIgdHhfYmNkOwkJLyogYnl0ZSBjb3VudCBpbmZvICovCisjZGVmaW5lIEhQQzNfRVRYQkNEX0JDTlRNU0sgMHgwMDAwM2ZmZgkvKiBieXRlcyB0byBiZSByZWFkIGZyb20gbWVtb3J5ICovCisjZGVmaW5lIEhQQzNfRVRYQkNEX0VTQU1QICAgMHgxMDAwMDAwMAkvKiBpZiBzZXQsIHRvbyBsYXRlIHRvIGFkZCBkZXNjcmlwdG9yICovCisjZGVmaW5lIEhQQzNfRVRYQkNEX1hJRSAgICAgMHgyMDAwMDAwMAkvKiBJbnRlcnJ1cHQgY3B1IGF0IGVuZCBvZiBjdXIgZGVzYyAqLworI2RlZmluZSBIUEMzX0VUWEJDRF9FT1AgICAgIDB4NDAwMDAwMDAJLyogTGFzdCBieXRlIG9mIGN1ciBidWYgaXMgZW5kIG9mIHBhY2tldCAqLworI2RlZmluZSBIUEMzX0VUWEJDRF9FT1ggICAgIDB4ODAwMDAwMDAJLyogVGhpcyBidWYgaXMgdGhlIGVuZCBvZiBkZXNjIGNoYWluICovCisKKwl2b2xhdGlsZSB1MzIgdHhfY3RybDsJCS8qIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgSFBDM19FVFhDVFJMX1NUQVQzMCAweDAwMDAwMDBmCS8qIFJkb25seSBjb3B5IG9mIHNlZXEgdHggc3RhdCByZWcgKi8KKyNkZWZpbmUgSFBDM19FVFhDVFJMX1NUQVQ0ICAweDAwMDAwMDEwCS8qIEluZGljYXRlIGxhdGUgY29sbGlzaW9uIG9jY3VycmVkICovCisjZGVmaW5lIEhQQzNfRVRYQ1RSTF9TVEFUNzUgMHgwMDAwMDBlMAkvKiBSZG9ubHkgaXJxIHN0YXR1cyBmcm9tIHNlZXEgKi8KKyNkZWZpbmUgSFBDM19FVFhDVFJMX0VORElBTiAweDAwMDAwMTAwCS8qIERNQSBjaGFubmVsIGVuZGlhbiBtb2RlLCAxPWxpdHRsZSAwPWJpZyAqLworI2RlZmluZSBIUEMzX0VUWENUUkxfQUNUSVZFIDB4MDAwMDAyMDAJLyogRE1BIHR4IGNoYW5uZWwgaXMgYWN0aXZlICovCisjZGVmaW5lIEhQQzNfRVRYQ1RSTF9BTUFTSyAgMHgwMDAwMDQwMAkvKiBJbmRpY2F0ZXMgQUNUSVZFIGluaGliaXRzIFBJTydzICovCisKKwl2b2xhdGlsZSB1MzIgdHhfZ2ZwdHI7CQkvKiBjdXJyZW50IEdJTyBmaWZvIHB0ciAqLworCXZvbGF0aWxlIHUzMiB0eF9kZnB0cjsJCS8qIGN1cnJlbnQgZGV2aWNlIGZpZm8gcHRyICovCisJdTMyIF91bnVzZWQ0WzB4MTAwMC80IC0gNF07CS8qIHBhZGRpbmcgKi8KK307CisKK3N0cnVjdCBocGMzX3JlZ3MgeworCS8qIEZpcnN0IHJlZ3MgZm9yIHRoZSBQQlVTIDggZG1hIGNoYW5uZWxzLiAqLworCXN0cnVjdCBocGMzX3BidXNfZG1hY3JlZ3MgcGJkbWFbOF07CisKKwkvKiBOb3cgdGhlIEhQQyBzY3NpIHJlZ2lzdGVycywgd2UgZ2V0IHR3byBzY3NpIHJlZyBzZXRzLiAqLworCXN0cnVjdCBocGMzX3Njc2lyZWdzIHNjc2lfY2hhbjAsIHNjc2lfY2hhbjE7CisKKwkvKiBUaGUgU0VFUSBocGMzIGV0aGVybmV0IGRtYS9jb250cm9sIHJlZ2lzdGVycy4gKi8KKwlzdHJ1Y3QgaHBjM19ldGhyZWdzIGV0aHJlZ3M7CisKKwkvKiBIZXJlIGFyZSB3aGVyZSB0aGUgaHBjMyBmaWZvJ3MgY2FuIGJlIGRpcmVjdGx5IGFjY2Vzc2VkCisJICogdmlhIFBJTyBhY2Nlc3Nlcy4gIFVuZGVyIG5vcm1hbCBvcGVyYXRpb24gd2UgbmV2ZXIgc3RpY2sKKwkgKiBvdXIgZ3J1YmJ5IHBhd3MgaW4gaGVyZSBzbyBpdCdzIGp1c3QgcGFkZGluZy4gKi8KKwl1MzIgX3VudXNlZDBbMHgxODAwMC80XTsKKworCS8qIEhQQzMgaXJxIHN0YXR1cyByZWdzLiAgRHVlIHRvIGEgcGVjdWxpYXIgYnVnIHlvdSBuZWVkIHRvCisJICogbG9vayBhdCB0d28gZGlmZmVyZW50IHJlZ2lzdGVyIGFkZHJlc3NlcyB0byBnZXQgYXQgYWxsIG9mCisJICogdGhlIHN0YXR1cyBiaXRzLiAgVGhlIGZpcnN0IHJlZyBjYW4gb25seSByZWxpYWJseSByZXBvcnQKKwkgKiBiaXRzIDQ6MCBvZiB0aGUgc3RhdHVzLCBhbmQgdGhlIHNlY29uZCByZWcgY2FuIG9ubHkKKwkgKiByZWxpYWJseSByZXBvcnQgYml0cyA5OjUgb2YgdGhlIGhwYzMgaXJxIHN0YXR1cy4gIEkgdG9sZAorCSAqIHlvdSBpdCB3YXMgYSBwZWN1bGlhciBidWcuIDstKQorCSAqLworCXZvbGF0aWxlIHUzMiBpc3RhdDA7CQkvKiBJcnEgc3RhdHVzLCBvbmx5IGJpdHMgPDQ6MD4gcmVsaWFibGUuICovCisjZGVmaW5lIEhQQzNfSVNUQVRfUEJJTUFTSwkweDBmZgkvKiBpcnEgYml0cyBmb3IgcGJ1cyBkZXZzIDAgLS0+IDcgKi8KKyNkZWZpbmUgSFBDM19JU1RBVF9TQzBNQVNLCTB4MTAwCS8qIGlycSBiaXQgZm9yIHNjc2kgY2hhbm5lbCAwICovCisjZGVmaW5lIEhQQzNfSVNUQVRfU0MxTUFTSwkweDIwMAkvKiBpcnEgYml0IGZvciBzY3NpIGNoYW5uZWwgMSAqLworCisJdm9sYXRpbGUgdTMyIGdpb19taXNjOwkJLyogR0lPIG1pc2MgY29udHJvbCBiaXRzLiAqLworI2RlZmluZSBIUEMzX0dJT01JU0NfRVJUSU1FCTB4MQkvKiBFbmFibGUgZXh0ZXJuYWwgdGltZXIgcmVhbCB0aW1lLiAqLworI2RlZmluZSBIUEMzX0dJT01JU0NfREVORElBTgkweDIJLyogZG1hIGRlc2NyaXB0b3IgZW5kaWFuLCAxPWxpdCAwPWJpZyAqLworCisJdm9sYXRpbGUgdTMyIGVlcHJvbTsJCS8qIEVFUFJPTSBkYXRhIHJlZy4gKi8KKyNkZWZpbmUgSFBDM19FRVBST01fRVBST1QJMHgwMQkvKiBQcm90ZWN0IHJlZ2lzdGVyIGVuYWJsZSAqLworI2RlZmluZSBIUEMzX0VFUFJPTV9DU0VMCTB4MDIJLyogQ2hpcCBzZWxlY3QgKi8KKyNkZWZpbmUgSFBDM19FRVBST01fRUNMSwkweDA0CS8qIEVFUFJPTSBjbG9jayAqLworI2RlZmluZSBIUEMzX0VFUFJPTV9EQVRPCTB4MDgJLyogRGF0YSBvdXQgKi8KKyNkZWZpbmUgSFBDM19FRVBST01fREFUSQkweDEwCS8qIERhdGEgaW4gKi8KKworCXZvbGF0aWxlIHUzMiBpc3RhdDE7CQkvKiBJcnEgc3RhdHVzLCBvbmx5IGJpdHMgPDk6NT4gcmVsaWFibGUuICovCisJdm9sYXRpbGUgdTMyIGJlc3RhdDsJCS8qIEJ1cyBlcnJvciBpbnRlcnJ1cHQgc3RhdHVzIHJlZy4gKi8KKyNkZWZpbmUgSFBDM19CRVNUQVRfQkxNQVNLCTB4MDAwZmYJLyogQnVzIGxhbmUgd2hlcmUgYmFkIHBhcml0eSBvY2N1cnJlZCAqLworI2RlZmluZSBIUEMzX0JFU1RBVF9DVFlQRQkweDAwMTAwCS8qIEJ1cyBjeWNsZSB0eXBlLCAwPVBJTyAxPURNQSAqLworI2RlZmluZSBIUEMzX0JFU1RBVF9QSURTSElGVAk5CisjZGVmaW5lIEhQQzNfQkVTVEFUX1BJRE1BU0sJMHgzZjcwMAkvKiBETUEgY2hhbm5lbCBwYXJpdHkgaWRlbnRpZmllciAqLworCisJdTMyIF91bnVzZWQxWzB4MTQwMDAvNCAtIDVdOwkvKiBwYWRkaW5nICovCisJCisJLyogTm93IGRpcmVjdCBQSU8gcGVyLUhQQzMgcGVyaXBoZXJhbCBhY2Nlc3MgdG8gZXh0ZXJuYWwgcmVncy4gKi8KKwl2b2xhdGlsZSB1MzIgc2NzaTBfZXh0WzI1Nl07CS8qIFNDU0kgY2hhbm5lbCAwIGV4dGVybmFsIHJlZ3MgKi8KKwl1MzIgX3VudXNlZDJbMHg3YzAwLzRdOworCXZvbGF0aWxlIHUzMiBzY3NpMV9leHRbMjU2XTsJLyogU0NTSSBjaGFubmVsIDEgZXh0ZXJuYWwgcmVncyAqLworCXUzMiBfdW51c2VkM1sweDdjMDAvNF07CisJdm9sYXRpbGUgdTMyIGV0aF9leHRbMzIwXTsJLyogRXRoZXJuZXQgZXh0ZXJuYWwgcmVnaXN0ZXJzICovCisJdTMyIF91bnVzZWQ0WzB4M2IwMC80XTsKKworCS8qIFBlci1wZXJpcGhlcmFsIGRldmljZSBleHRlcm5hbCByZWdpc3RlcnMgYW5kIERNQS9QSU8gY29udHJvbC4gKi8KKwl2b2xhdGlsZSB1MzIgcGJ1c19leHRyZWdzWzE2XVsyNTZdOworCXZvbGF0aWxlIHUzMiBwYnVzX2RtYWNmZ1s4XVsxMjhdOworCS8qIEN5Y2xlcyB0byBzcGVuZCBpbiBEMyBmb3IgcmVhZHMgKi8KKyNkZWZpbmUgSFBDM19ETUFDRkdfRDNSX01BU0sJCTB4MDAwMDAwMDEKKyNkZWZpbmUgSFBDM19ETUFDRkdfRDNSX1NISUZUCQkwCisJLyogQ3ljbGVzIHRvIHNwZW5kIGluIEQ0IGZvciByZWFkcyAqLworI2RlZmluZSBIUEMzX0RNQUNGR19ENFJfTUFTSwkJMHgwMDAwMDAxZQorI2RlZmluZSBIUEMzX0RNQUNGR19ENFJfU0hJRlQJCTEKKwkvKiBDeWNsZXMgdG8gc3BlbmQgaW4gRDUgZm9yIHJlYWRzICovCisjZGVmaW5lIEhQQzNfRE1BQ0ZHX0Q1Ul9NQVNLCQkweDAwMDAwMWUwCisjZGVmaW5lIEhQQzNfRE1BQ0ZHX0Q1Ul9TSElGVAkJNQorCS8qIEN5Y2xlcyB0byBzcGVuZCBpbiBEMyBmb3Igd3JpdGVzICovCisjZGVmaW5lIEhQQzNfRE1BQ0ZHX0QzV19NQVNLCQkweDAwMDAwMjAwCisjZGVmaW5lIEhQQzNfRE1BQ0ZHX0QzV19TSElGVAkJOQorCS8qIEN5Y2xlcyB0byBzcGVuZCBpbiBENCBmb3Igd3JpdGVzICovCisjZGVmaW5lIEhQQzNfRE1BQ0ZHX0Q0V19NQVNLCQkweDAwMDAzYzAwCisjZGVmaW5lIEhQQzNfRE1BQ0ZHX0Q0V19TSElGVAkJMTAKKwkvKiBDeWNsZXMgdG8gc3BlbmQgaW4gRDUgZm9yIHdyaXRlcyAqLworI2RlZmluZSBIUEMzX0RNQUNGR19ENVdfTUFTSwkJMHgwMDAzYzAwMAorI2RlZmluZSBIUEMzX0RNQUNGR19ENVdfU0hJRlQJCTE0CisJLyogRW5hYmxlIDE2LWJpdCBETUEgYWNjZXNzIG1vZGUgKi8KKyNkZWZpbmUgSFBDM19ETUFDRkdfRFMxNgkJMHgwMDA0MDAwMAorCS8qIFBsYWNlcyBoYWxmd29yZHMgb24gaGlnaCAxNiBiaXRzIG9mIGJ1cyAqLworI2RlZmluZSBIUEMzX0RNQUNGR19FVkVOSEkJCTB4MDAwODAwMDAKKwkvKiBNYWtlIHRoaXMgZGV2aWNlIHJlYWwgdGltZSAqLworI2RlZmluZSBIUEMzX0RNQUNGR19SVElNRQkJMHgwMDIwMDAwMAorCS8qIDUgYml0IGJ1cnN0IGNvdW50IGZvciBETUEgZGV2aWNlICovCisjZGVmaW5lIEhQQzNfRE1BQ0ZHX0JVUlNUX01BU0sJCTB4MDdjMDAwMDAKKyNkZWZpbmUgSFBDM19ETUFDRkdfQlVSU1RfU0hJRlQJMjIKKwkvKiBVc2UgbGl2ZSBwYnVzX2RyZXEgdW5zeW5jaHJvbml6ZWQgc2lnbmFsICovCisjZGVmaW5lIEhQQzNfRE1BQ0ZHX0RSUUxJVkUJCTB4MDgwMDAwMDAKKwl2b2xhdGlsZSB1MzIgcGJ1c19waW9jZmdbMTZdWzY0XTsKKwkvKiBDeWNsZXMgdG8gc3BlbmQgaW4gUDIgc3RhdGUgZm9yIHJlYWRzICovCisjZGVmaW5lIEhQQzNfUElPQ0ZHX1AyUl9NQVNLCQkweDAwMDAxCisjZGVmaW5lIEhQQzNfUElPQ0ZHX1AyUl9TSElGVAkJMAorCS8qIEN5Y2xlcyB0byBzcGVuZCBpbiBQMyBzdGF0ZSBmb3IgcmVhZHMgKi8KKyNkZWZpbmUgSFBDM19QSU9DRkdfUDNSX01BU0sJCTB4MDAwMWUKKyNkZWZpbmUgSFBDM19QSU9DRkdfUDNSX1NISUZUCQkxCisJLyogQ3ljbGVzIHRvIHNwZW5kIGluIFA0IHN0YXRlIGZvciByZWFkcyAqLworI2RlZmluZSBIUEMzX1BJT0NGR19QNFJfTUFTSwkJMHgwMDFlMAorI2RlZmluZSBIUEMzX1BJT0NGR19QNFJfU0hJRlQJCTUKKwkvKiBDeWNsZXMgdG8gc3BlbmQgaW4gUDIgc3RhdGUgZm9yIHdyaXRlcyAqLworI2RlZmluZSBIUEMzX1BJT0NGR19QMldfTUFTSwkJMHgwMDIwMAorI2RlZmluZSBIUEMzX1BJT0NGR19QMldfU0hJRlQJCTkKKwkvKiBDeWNsZXMgdG8gc3BlbmQgaW4gUDMgc3RhdGUgZm9yIHdyaXRlcyAqLworI2RlZmluZSBIUEMzX1BJT0NGR19QM1dfTUFTSwkJMHgwM2MwMAorI2RlZmluZSBIUEMzX1BJT0NGR19QM1dfU0hJRlQJCTEwCisJLyogQ3ljbGVzIHRvIHNwZW5kIGluIFA0IHN0YXRlIGZvciB3cml0ZXMgKi8KKyNkZWZpbmUgSFBDM19QSU9DRkdfUDRXX01BU0sJCTB4M2MwMDAKKyNkZWZpbmUgSFBDM19QSU9DRkdfUDRXX1NISUZUCQkxNAorCS8qIEVuYWJsZSAxNi1iaXQgUElPIGFjY2Vzc2VzICovCisjZGVmaW5lIEhQQzNfUElPQ0ZHX0RTMTYJCTB4NDAwMDAKKwkvKiBQbGFjZSBldmVuIGFkZHJlc3MgYml0cyBpbiBiaXRzIDwxNTo4PiAqLworI2RlZmluZSBIUEMzX1BJT0NGR19FVkVOSEkJCTB4ODAwMDAKKworCS8qIFBCVVMgUFJPTSBjb250cm9sIHJlZ3MuICovCisJdm9sYXRpbGUgdTMyIHBidXNfcHJvbXdlOwkvKiBQUk9NIHdyaXRlIGVuYWJsZSByZWdpc3RlciAqLworI2RlZmluZSBIUEMzX1BST01fV0VOQUIJMHgxCS8qIEVuYWJsZSB3cml0ZXMgdG8gdGhlIFBST00gKi8KKworCXUzMiBfdW51c2VkNVsweDA4MDAvNCAtIDFdOworCXZvbGF0aWxlIHUzMiBwYnVzX3Byb21zd2FwOwkvKiBDaGlwIHNlbGVjdCBzd2FwIHJlZyAqLworI2RlZmluZSBIUEMzX1BST01fU1dBUAkweDEJLyogaW52ZXJ0IEdJTyBhZGRyIGJpdCB0byBzZWxlY3QgcHJvbTAgb3IgcHJvbTEgKi8KKworCXUzMiBfdW51c2VkNlsweDA4MDAvNCAtIDFdOworCXZvbGF0aWxlIHUzMiBwYnVzX2dvdXQ7CS8qIFBST00gZ2VuZXJhbCBwdXJwb3NlIG91dHB1dCByZWcgKi8KKyNkZWZpbmUgSFBDM19QUk9NX1NUQVQJMHgxCS8qIEdlbmVyYWwgcHVycG9zZSBzdGF0dXMgYml0IGluIGdvdXQgKi8KKworCXUzMiBfdW51c2VkN1sweDEwMDAvNCAtIDFdOworCXZvbGF0aWxlIHUzMiBydGNyZWdzWzE0XTsJLyogRGFsbGFzIGNsb2NrIHJlZ2lzdGVycyAqLworCXUzMiBfdW51c2VkOFs1MF07CisJdm9sYXRpbGUgdTMyIGJicmFtWzgxOTItNTAtMTRdOwkvKiBCYXR0ZXJ5IGJhY2tlZCByYW0gKi8KK307CisKKy8qIAorICogSXQgaXMgcG9zc2libGUgdG8gaGF2ZSB0d28gSFBDMydzIHdpdGhpbiB0aGUgYWRkcmVzcyBzcGFjZSBvbgorICogb25lIG1hY2hpbmUsIHRob3VnaCBvbmx5IGhhdmluZyBvbmUgaXMgbW9yZSBsaWtlbHkgb24gYW4gSW5keS4KKyAqLworZXh0ZXJuIHN0cnVjdCBocGMzX3JlZ3MgKmhwYzNjMCwgKmhwYzNjMTsKKyNkZWZpbmUgSFBDM19DSElQMF9CQVNFCQkweDFmYjgwMDAwCS8qIHBoeXNpY2FsICovCisjZGVmaW5lIEhQQzNfQ0hJUDFfQkFTRQkJMHgxZmIwMDAwMAkvKiBwaHlzaWNhbCAqLworCitleHRlcm4gdm9pZCBzZ2locGNfaW5pdCh2b2lkKTsKKworI2VuZGlmIC8qIF9TR0lfSFBDM19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NnaS9pb2MuaCBiL2luY2x1ZGUvYXNtLW1pcHMvc2dpL2lvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2OTE4N2YKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NnaS9pb2MuaApAQCAtMCwwICsxLDIwMCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogaW9jLmg6IERlZmluaXRpb25zIGZvciBTR0kgSS9PIENvbnRyb2xsZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYgRGF2aWQgUy4gTWlsbGVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAgUmFsZiBCYWVjaGxlCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDMgTGFkaXNsYXYgTWljaGwKKyAqLworCisjaWZuZGVmIF9TR0lfSU9DX0gKKyNkZWZpbmUgX1NHSV9JT0NfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vc2dpL3BpMS5oPgorCisvKiAKKyAqIEFsbCByZWdpc3RlcnMgYXJlIDgtYml0IHdpZGUgYWxsaWduZWQgb24gMzItYml0IGJvdW5kYXJ5LiBCYWQgdGhpbmdzCisgKiBoYXBwZW4gaWYgeW91IHRyeSB3b3JkIGFjY2VzcyB0aGVtLiBZb3UgaGF2ZSBiZWVuIHdhcm5lZC4KKyAqLworCitzdHJ1Y3Qgc2dpb2NfdWFydF9yZWdzIHsKKwl1OCBfY3RybDFbM107CisJdm9sYXRpbGUgdTggY3RybDE7CisJdTggX2RhdGExWzNdOworCXZvbGF0aWxlIHU4IGRhdGExOworCXU4IF9jdHJsMlszXTsKKwl2b2xhdGlsZSB1OCBjdHJsMjsKKwl1OCBfZGF0YTJbM107CisJdm9sYXRpbGUgdTggZGF0YTI7Cit9OworCitzdHJ1Y3Qgc2dpb2Nfa2V5Yl9yZWdzIHsKKwl1OCBfZGF0YVszXTsKKwl2b2xhdGlsZSB1OCBkYXRhOworCXU4IF9jb21tYW5kWzNdOworCXZvbGF0aWxlIHU4IGNvbW1hbmQ7Cit9OworCitzdHJ1Y3Qgc2dpbnRfcmVncyB7CisJdTggX2lzdGF0MFszXTsKKwl2b2xhdGlsZSB1OCBpc3RhdDA7CQkvKiBJbnRlcnJ1cHQgc3RhdHVzIHplcm8gKi8KKyNkZWZpbmUgU0dJTlRfSVNUQVQwX0ZGVUxMCTB4MDEKKyNkZWZpbmUgU0dJTlRfSVNUQVQwX1NDU0kwCTB4MDIKKyNkZWZpbmUgU0dJTlRfSVNUQVQwX1NDU0kxCTB4MDQKKyNkZWZpbmUgU0dJTlRfSVNUQVQwX0VORVQJMHgwOAorI2RlZmluZSBTR0lOVF9JU1RBVDBfR0ZYRE1BCTB4MTAKKyNkZWZpbmUgU0dJTlRfSVNUQVQwX1BQT1JUCTB4MjAKKyNkZWZpbmUgU0dJTlRfSVNUQVQwX0hQQzIJMHg0MAorI2RlZmluZSBTR0lOVF9JU1RBVDBfTElPMgkweDgwCisJdTggX2ltYXNrMFszXTsKKwl2b2xhdGlsZSB1OCBpbWFzazA7CQkvKiBJbnRlcnJ1cHQgbWFzayB6ZXJvICovCisJdTggX2lzdGF0MVszXTsKKwl2b2xhdGlsZSB1OCBpc3RhdDE7CQkvKiBJbnRlcnJ1cHQgc3RhdHVzIG9uZSAqLworI2RlZmluZSBTR0lOVF9JU1RBVDFfSVNETkkJMHgwMQorI2RlZmluZSBTR0lOVF9JU1RBVDFfUFdSCTB4MDIKKyNkZWZpbmUgU0dJTlRfSVNUQVQxX0lTRE5ICTB4MDQKKyNkZWZpbmUgU0dJTlRfSVNUQVQxX0xJTzMJMHgwOAorI2RlZmluZSBTR0lOVF9JU1RBVDFfSFBDMwkweDEwCisjZGVmaW5lIFNHSU5UX0lTVEFUMV9BRkFJTAkweDIwCisjZGVmaW5lIFNHSU5UX0lTVEFUMV9WSURFTwkweDQwCisjZGVmaW5lIFNHSU5UX0lTVEFUMV9HSU8yCTB4ODAKKwl1OCBfaW1hc2sxWzNdOworCXZvbGF0aWxlIHU4IGltYXNrMTsJCS8qIEludGVycnVwdCBtYXNrIG9uZSAqLworCXU4IF92bWVpc3RhdFszXTsKKwl2b2xhdGlsZSB1OCB2bWVpc3RhdDsJCS8qIFZNRSBpbnRlcnJ1cHQgc3RhdHVzICovCisJdTggX2NtZWltYXNrMFszXTsKKwl2b2xhdGlsZSB1OCBjbWVpbWFzazA7CQkvKiBWTUUgaW50ZXJydXB0IG1hc2sgemVybyAqLworCXU4IF9jbWVpbWFzazFbM107CisJdm9sYXRpbGUgdTggY21laW1hc2sxOwkJLyogVk1FIGludGVycnVwdCBtYXNrIG9uZSAqLworCXU4IF9jbWVwb2xbM107CisJdm9sYXRpbGUgdTggY21lcG9sOwkJLyogVk1FIHBvbGFyaXR5ICovCisJdTggX3RjbGVhclszXTsKKwl2b2xhdGlsZSB1OCB0Y2xlYXI7CisJdTggX2VycnN0YXRbM107CisJdm9sYXRpbGUgdTggZXJyc3RhdDsJLyogRXJyb3Igc3RhdHVzIHJlZywgcmVzZXJ2ZWQgb24gSU5UMiAqLworCXUzMiBfdW51c2VkMFsyXTsKKwl1OCBfdGNudDBbM107CisJdm9sYXRpbGUgdTggdGNudDA7CQkvKiBjb3VudGVyIDAgKi8KKwl1OCBfdGNudDFbM107CisJdm9sYXRpbGUgdTggdGNudDE7CQkvKiBjb3VudGVyIDEgKi8KKwl1OCBfdGNudDJbM107CisJdm9sYXRpbGUgdTggdGNudDI7CQkvKiBjb3VudGVyIDIgKi8KKwl1OCBfdGN3b3JkWzNdOworCXZvbGF0aWxlIHU4IHRjd29yZDsJCS8qIGNvbnRyb2wgd29yZCAqLworI2RlZmluZSBTR0lOVF9UQ1dPUkRfQkNECTB4MDEJLyogVXNlIEJDRCBtb2RlIGZvciBjb3VudGVycyAqLworI2RlZmluZSBTR0lOVF9UQ1dPUkRfTU1BU0sJMHgwZQkvKiBNb2RlIGJpdG1hc2suICovCisjZGVmaW5lIFNHSU5UX1RDV09SRF9NSVRDCTB4MDAJLyogSVJRIG9uIHRlcm1pbmFsIGNvdW50IChkb2Vzbid0IHdvcmspICovCisjZGVmaW5lIFNHSU5UX1RDV09SRF9NT1MJMHgwMgkvKiBPbmUtc2hvdCBJUlEgbW9kZS4gKi8KKyNkZWZpbmUgU0dJTlRfVENXT1JEX01SR0VOCTB4MDQJLyogTm9ybWFsIHJhdGUgZ2VuZXJhdGlvbiAqLworI2RlZmluZSBTR0lOVF9UQ1dPUkRfTVNXR0VOCTB4MDYJLyogU3F1YXJlIHdhdmUgZ2VuZXJhdG9yIG1vZGUgKi8KKyNkZWZpbmUgU0dJTlRfVENXT1JEX01TV1NUCTB4MDgJLyogU29mdHdhcmUgc3Ryb2JlICovCisjZGVmaW5lIFNHSU5UX1RDV09SRF9NSFdTVAkweDBhCS8qIEhhcmR3YXJlIHN0cm9iZSAqLworI2RlZmluZSBTR0lOVF9UQ1dPUkRfQ01BU0sJMHgzMAkvKiBDb21tYW5kIG1hc2sgKi8KKyNkZWZpbmUgU0dJTlRfVENXT1JEX0NMQVQJMHgwMAkvKiBMYXRjaCBjb21tYW5kICovCisjZGVmaW5lIFNHSU5UX1RDV09SRF9DTFNCCTB4MTAJLyogTFNCIHJlYWQvd3JpdGUgKi8KKyNkZWZpbmUgU0dJTlRfVENXT1JEX0NNU0IJMHgyMAkvKiBNU0IgcmVhZC93cml0ZSAqLworI2RlZmluZSBTR0lOVF9UQ1dPUkRfQ0FMTAkweDMwCS8qIEZ1bGwgY291bnRlciByZWFkL3dyaXRlICovCisjZGVmaW5lIFNHSU5UX1RDV09SRF9DTlQwCTB4MDAJLyogU2VsZWN0IGNvdW50ZXIgemVybyAqLworI2RlZmluZSBTR0lOVF9UQ1dPUkRfQ05UMQkweDQwCS8qIFNlbGVjdCBjb3VudGVyIG9uZSAqLworI2RlZmluZSBTR0lOVF9UQ1dPUkRfQ05UMgkweDgwCS8qIFNlbGVjdCBjb3VudGVyIHR3byAqLworI2RlZmluZSBTR0lOVF9UQ1dPUkRfQ1JCQ0sJMHhjMAkvKiBSZWFkYmFjayBjb21tYW5kICovCit9OworCisvKgorICogVGhlIHRpbWVyIGlzIHRoZSBnb29kIG9sZCA4MjU0LiAgVW5saWtlIGluIFBDcyBpdCdzIGNsb2NrZWQgYXQgZXhhY3RseSAxTUh6CisgKi8KKyNkZWZpbmUgU0dJTlRfVElNRVJfQ0xPQ0sJMTAwMDAwMAorCisvKgorICogVGhpcyBpcyB0aGUgY29uc3RhbnQgd2UncmUgdXNpbmcgZm9yIGNhbGlicmF0aW5nIHRoZSBjb3VudGVyLgorICovCisjZGVmaW5lIFNHSU5UX1RDU0FNUF9DT1VOVEVSCSgoU0dJTlRfVElNRVJfQ0xPQ0sgLyBIWikgKyAyNTUpCisKKy8qIFdlIG5lZWQgc29mdHdhcmUgY29waWVzIG9mIHRoZXNlIGJlY2F1c2UgdGhleSBhcmUgd3JpdGUgb25seS4gKi8KK2V4dGVybiB1OCBzZ2lfaW9jX3Jlc2V0LCBzZ2lfaW9jX3dyaXRlOworCitzdHJ1Y3Qgc2dpb2NfcmVncyB7CisJc3RydWN0IHBpMV9yZWdzIHBwb3J0OworCXUzMiBfdW51c2VkMFsyXTsKKwlzdHJ1Y3Qgc2dpb2NfdWFydF9yZWdzIHVhcnQ7CisJc3RydWN0IHNnaW9jX2tleWJfcmVncyBrYmRtb3VzZTsKKwl1OCBfZ2NzZWxbM107CisJdm9sYXRpbGUgdTggZ2NzZWw7CisJdTggX2dlbmN0cmxbM107CisJdm9sYXRpbGUgdTggZ2VuY3RybDsKKwl1OCBfcGFuZWxbM107CisJdm9sYXRpbGUgdTggcGFuZWw7CisjZGVmaW5lIFNHSU9DX1BBTkVMX1BPV0VST04JMHgwMQorI2RlZmluZSBTR0lPQ19QQU5FTF9QT1dFUklOVFIJMHgwMgorI2RlZmluZSBTR0lPQ19QQU5FTF9WT0xETklOVFIJMHgxMAorI2RlZmluZSBTR0lPQ19QQU5FTF9WT0xETkhPTEQJMHgyMAorI2RlZmluZSBTR0lPQ19QQU5FTF9WT0xVUElOVFIJMHg0MAorI2RlZmluZSBTR0lPQ19QQU5FTF9WT0xVUEhPTEQJMHg4MAorCXUzMiBfdW51c2VkMTsKKwl1OCBfc3lzaWRbM107CisJdm9sYXRpbGUgdTggc3lzaWQ7CisjZGVmaW5lIFNHSU9DX1NZU0lEX0ZVTExIT1VTRQkweDAxCisjZGVmaW5lIFNHSU9DX1NZU0lEX0JPQVJEUkVWKHgpCSgoeCAmIDB4ZTApID4gNSkgCisjZGVmaW5lIFNHSU9DX1NZU0lEX0NISVBSRVYoeCkJKCh4ICYgMHgxZSkgPiAxKQorCXUzMiBfdW51c2VkMjsKKwl1OCBfcmVhZFszXTsKKwl2b2xhdGlsZSB1OCByZWFkOworCXUzMiBfdW51c2VkMzsKKwl1OCBfZG1hc2VsWzNdOworCXZvbGF0aWxlIHU4IGRtYXNlbDsKKyNkZWZpbmUgU0dJT0NfRE1BU0VMX1NDTEsxME1IWgkweDAwCS8qIHVzZSAxME1IWiBzZXJpYWwgY2xvY2sgKi8KKyNkZWZpbmUgU0dJT0NfRE1BU0VMX0lTRE5CCTB4MDEJLyogZW5hYmxlIGlzZG4gQiAqLworI2RlZmluZSBTR0lPQ19ETUFTRUxfSVNETkEJMHgwMgkvKiBlbmFibGUgaXNkbiBBICovCisjZGVmaW5lIFNHSU9DX0RNQVNFTF9QUE9SVAkweDA0CS8qIHVzZSBwYXJhbGxlbCBETUEgKi8KKyNkZWZpbmUgU0dJT0NfRE1BU0VMX1NDTEs2NjdNSFoJMHgxMAkvKiB1c2UgNi42N01IWiBzZXJpYWwgY2xvY2sgKi8KKyNkZWZpbmUgU0dJT0NfRE1BU0VMX1NDTEtFWFQJMHgyMAkvKiB1c2UgZXh0ZXJuYWwgc2VyaWFsIGNsb2NrICovCisJdTMyIF91bnVzZWQ0OworCXU4IF9yZXNldFszXTsKKwl2b2xhdGlsZSB1OCByZXNldDsKKyNkZWZpbmUgU0dJT0NfUkVTRVRfUFBPUlQJMHgwMQkvKiAwPXBhcnBvcnQgcmVzZXQsIDE9bm9ybmFsICovCisjZGVmaW5lIFNHSU9DX1JFU0VUX0tCRE1PVVNFCTB4MDIJLyogMD1rYmRtb3VzZSByZXNldCwgMT1ub3JtYWwgKi8KKyNkZWZpbmUgU0dJT0NfUkVTRVRfRUlTQQkweDA0CS8qIDA9ZWlzYSByZXNldCwgMT1ub3JtYWwgKi8KKyNkZWZpbmUgU0dJT0NfUkVTRVRfSVNETgkweDA4CS8qIDA9aXNkbiByZXNldCwgMT1ub3JtYWwgKi8KKyNkZWZpbmUgU0dJT0NfUkVTRVRfTEMwT0ZGCTB4MTAJLyogZ3VpbmVzczogdHVybiBsZWQgb2ZmIChyZWQsIGVsc2UgZ3JlZW4pICovCisjZGVmaW5lIFNHSU9DX1JFU0VUX0xDMU9GRgkweDIwCS8qIGd1aW5lc3M6IHR1cm4gbGVkIG9mZiAoZ3JlZW4sIGVsc2UgYW1iZXIpICovCisJdTMyIF91bnVzZWQ1OworCXU4IF93cml0ZVszXTsKKwl2b2xhdGlsZSB1OCB3cml0ZTsKKyNkZWZpbmUgU0dJT0NfV1JJVEVfTlRIUkVTSAkweDAxCS8qIHVzZSA0LjVkYiB0aHJlc2hob2xkICovCisjZGVmaW5lIFNHSU9DX1dSSVRFX1RQU1BFRUQJMHgwMgkvKiB1c2UgMTAwb2htIFRQIHNwZWVkICovCisjZGVmaW5lIFNHSU9DX1dSSVRFX0VQU0VMCTB4MDQJLyogZm9yY2UgY2FibGUgbW9kZTogMT1BVUkgMD1UUCAqLworI2RlZmluZSBTR0lPQ19XUklURV9FQVNFTAkweDA4CS8qIDE9YXV0b3NlbGVjdCAwPW1hbnVhbCBjYWJsZSBzZWxlY3Rpb24gKi8KKyNkZWZpbmUgU0dJT0NfV1JJVEVfVTFBTU9ERQkweDEwCS8qIDE9UEMgMD1NQUMgVUFSVCBtb2RlICovCisjZGVmaW5lIFNHSU9DX1dSSVRFX1UwQU1PREUJMHgyMAkvKiAxPVBDIDA9TUFDIFVBUlQgbW9kZSAqLworI2RlZmluZSBTR0lPQ19XUklURV9NTE8JCTB4NDAJLyogMT00Ljc1ViAwPSs1ViAqLworI2RlZmluZSBTR0lPQ19XUklURV9NSEkJCTB4ODAJLyogMT01LjI1ViAwPSs1ViAqLworCXUzMiBfdW51c2VkNjsKKwlzdHJ1Y3Qgc2dpbnRfcmVncyBpbnQzOworCXUzMiBfdW51c2VkN1sxNl07CisJdm9sYXRpbGUgdTMyIGV4dGlvOwkJLyogRnVsbEhvdXNlIG9ubHkgKi8KKyNkZWZpbmUgRVhUSU9fUzBfSVJRXzMJCTB4ODAwMAkvKiBTMDogdmlkLnZzeW5jICovCisjZGVmaW5lIEVYVElPX1MwX0lSUV8yCQkweDQwMDAJLyogUzA6IGdmeC5maWZvZnVsbCAqLworI2RlZmluZSBFWFRJT19TMF9JUlFfMQkJMHgyMDAwCS8qIFMwOiBnZnguaW50ICovCisjZGVmaW5lIEVYVElPX1MwX1JFVFJBQ0UJMHgxMDAwCisjZGVmaW5lIEVYVElPX1NHX0lSUV8zCQkweDA4MDAJLyogU0c6IHZpZC52c3luYyAqLworI2RlZmluZSBFWFRJT19TR19JUlFfMgkJMHgwNDAwCS8qIFNHOiBnZnguZmlmb2Z1bGwgKi8KKyNkZWZpbmUgRVhUSU9fU0dfSVJRXzEJCTB4MDIwMAkvKiBTRzogZ2Z4LmludCAqLworI2RlZmluZSBFWFRJT19TR19SRVRSQUNFCTB4MDEwMAorI2RlZmluZSBFWFRJT19HSU9fMzNNSFoJCTB4MDA4MAorI2RlZmluZSBFWFRJT19FSVNBX0JVU0VSUgkweDAwNDAKKyNkZWZpbmUgRVhUSU9fTUNfQlVTRVJSCQkweDAwMjAKKyNkZWZpbmUgRVhUSU9fSFBDM19CVVNFUlIJMHgwMDEwCisjZGVmaW5lIEVYVElPX1MwX1NUQVRfMQkJMHgwMDA4CisjZGVmaW5lIEVYVElPX1MwX1NUQVRfMAkJMHgwMDA0CisjZGVmaW5lIEVYVElPX1NHX1NUQVRfMQkJMHgwMDAyCisjZGVmaW5lIEVYVElPX1NHX1NUQVRfMAkJMHgwMDAxCit9OworCitleHRlcm4gc3RydWN0IHNnaW9jX3JlZ3MgKnNnaW9jOworZXh0ZXJuIHN0cnVjdCBzZ2ludF9yZWdzICpzZ2ludDsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NnaS9pcDIyLmggYi9pbmNsdWRlL2FzbS1taXBzL3NnaS9pcDIyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdkNzNhZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc2dpL2lwMjIuaApAQCAtMCwwICsxLDc3IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBpcDIyLmg6IERlZmluaXRpb25zIGZvciBTR0kgSVAyMiBtYWNoaW5lcworICoKKyAqIENvcHlyaWdodCAoQykgMTk5NiBEYXZpZCBTLiBNaWxsZXIKKyAqIENvcHlyaWdodCAoQykgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCBSYWxmIEJhZWNobGUKKyAqLworCisjaWZuZGVmIF9TR0lfSVAyMl9ICisjZGVmaW5lIF9TR0lfSVAyMl9ICisKKy8qIAorICogVGhlc2UgYXJlIHRoZSB2aXJ0dWFsIElSUSBudW1iZXJzLCB3ZSBkaXZpZGUgYWxsIElSUSdzIGludG8KKyAqICdzcGFjZXMnLCB0aGUgJ3NwYWNlJyBkZXRlcm1pbmVzIHdoZXJlIGFuZCBob3cgdG8gZW5hYmxlL2Rpc2FibGUKKyAqIHRoYXQgcGFydGljdWxhciBJUlEgb24gYW4gU0dJIG1hY2hpbmUuIEhQQyBETUEgYW5kIE1DIERNQSBpbnRlcnJ1cHMKKyAqIGFyZSBub3Qgc3VwcG9ydGVkIHRoaXMgd2F5LiBEcml2ZXIgaXMgc3VwcG9zZWQgdG8gYWxsb2NhdGUgSFBDL01DCisgKiBpbnRlcnJ1cHQgYXMgc2hhcmVhYmxlIGFuZCB0aGVuIGxvb2sgdG8gcHJvcGVyIHN0YXR1cyBiaXQgKHNlZQorICogSEFMMiBkcml2ZXIpLiBUaGlzIHdpbGwgcHJldmVudCBtYW55IGNvbXBsaWNhdGlvbnMsIHRydXN0IG1lIDstKQorICovCisKKyNpbmNsdWRlIDxhc20vc2dpL2lvYy5oPgorCisjZGVmaW5lIFNHSU5UX0VJU0EJMAkvKiAxNiBFSVNBIGlycSBsZXZlbHMgKEluZGlnbzIpICovCisjZGVmaW5lIFNHSU5UX0NQVQkxNgkvKiBNSVBTIENQVSBkZWZpbmUgOCBpbnRlcnJ1cHQgc291cmNlcyAqLworI2RlZmluZSBTR0lOVF9MT0NBTDAJMjQJLyogOCBsb2NhbDAgaXJxIGxldmVscyAqLworI2RlZmluZSBTR0lOVF9MT0NBTDEJMzIJLyogOCBsb2NhbDEgaXJxIGxldmVscyAqLworI2RlZmluZSBTR0lOVF9MT0NBTDIJNDAJLyogOCBsb2NhbDIgdmVjdG9yZWQgaXJxIGxldmVscyAqLworI2RlZmluZSBTR0lOVF9MT0NBTDMJNDgJLyogOCBsb2NhbDMgdmVjdG9yZWQgaXJxIGxldmVscyAqLworI2RlZmluZSBTR0lOVF9FTkQJNTYJLyogRW5kIG9mICdzcGFjZXMnICovCisKKy8qCisgKiBJbmRpdmlkdWFsIGludGVycnVwdCBkZWZpbml0aW9ucyBmb3IgdGhlIEluZHkgYW5kIEluZGlnbzIKKyAqLworCisjZGVmaW5lIFNHSV9TT0ZUXzBfSVJRCVNHSU5UX0NQVSArIDAKKyNkZWZpbmUgU0dJX1NPRlRfMV9JUlEJU0dJTlRfQ1BVICsgMQorI2RlZmluZSBTR0lfTE9DQUxfMF9JUlEJU0dJTlRfQ1BVICsgMgorI2RlZmluZSBTR0lfTE9DQUxfMV9JUlEJU0dJTlRfQ1BVICsgMworI2RlZmluZSBTR0lfODI1NF8wX0lSUQlTR0lOVF9DUFUgKyA0CisjZGVmaW5lIFNHSV84MjU0XzFfSVJRCVNHSU5UX0NQVSArIDUKKyNkZWZpbmUgU0dJX0JVU0VSUl9JUlEJU0dJTlRfQ1BVICsgNgorI2RlZmluZSBTR0lfVElNRVJfSVJRCVNHSU5UX0NQVSArIDcKKworI2RlZmluZSBTR0lfRklGT19JUlEJU0dJTlRfTE9DQUwwICsgMAkvKiBGSUZPIGZ1bGwgKi8KKyNkZWZpbmUgU0dJX0dJT18wX0lSUQlTR0lfRklGT19JUlEJCS8qIEdJTy0wICovCisjZGVmaW5lIFNHSV9XRDkzXzBfSVJRCVNHSU5UX0xPQ0FMMCArIDEJLyogMXN0IG9uYm9hcmQgV0Q5MyAqLworI2RlZmluZSBTR0lfV0Q5M18xX0lSUQlTR0lOVF9MT0NBTDAgKyAyCS8qIDJuZCBvbmJvYXJkIFdEOTMgKi8KKyNkZWZpbmUgU0dJX0VORVRfSVJRCVNHSU5UX0xPQ0FMMCArIDMJLyogb25ib2FyZCBldGhlcm5ldCAqLworI2RlZmluZSBTR0lfTUNETUFfSVJRCVNHSU5UX0xPQ0FMMCArIDQJLyogTUMgRE1BIGRvbmUgKi8KKyNkZWZpbmUgU0dJX1BBUlBPUlRfSVJRCVNHSU5UX0xPQ0FMMCArIDUJLyogUGFyYWxsZWwgcG9ydCAqLworI2RlZmluZSBTR0lfR0lPXzFfSVJRCVNHSU5UX0xPQ0FMMCArIDYJLyogR0UgLyBHSU8tMSAvIDJuZC1IUEMgKi8KKyNkZWZpbmUgU0dJX01BUF8wX0lSUQlTR0lOVF9MT0NBTDAgKyA3CS8qIE1hcHBhYmxlIGludGVycnVwdCAwICovCisKKyNkZWZpbmUgU0dJX0dQTDBfSVJRCVNHSU5UX0xPQ0FMMSArIDAJLyogR2VuZXJhbCBQdXJwb3NlIExPQ0FMMV9OPDA+ICovCisjZGVmaW5lIFNHSV9QQU5FTF9JUlEJU0dJTlRfTE9DQUwxICsgMQkvKiBmcm9udCBwYW5lbCAqLworI2RlZmluZSBTR0lfR1BMMl9JUlEJU0dJTlRfTE9DQUwxICsgMgkvKiBHZW5lcmFsIFB1cnBvc2UgTE9DQUwxX048Mj4gKi8KKyNkZWZpbmUgU0dJX01BUF8xX0lSUQlTR0lOVF9MT0NBTDEgKyAzCS8qIE1hcHBhYmxlIGludGVycnVwdCAxICovCisjZGVmaW5lIFNHSV9IUENETUFfSVJRCVNHSU5UX0xPQ0FMMSArIDQJLyogSFBDIERNQSBkb25lICovCisjZGVmaW5lIFNHSV9BQ0ZBSUxfSVJRCVNHSU5UX0xPQ0FMMSArIDUJLyogQUMgZmFpbCAqLworI2RlZmluZSBTR0lfVklOT19JUlEJU0dJTlRfTE9DQUwxICsgNgkvKiBJbmR5IFZJTk8gKi8KKyNkZWZpbmUgU0dJX0dJT18yX0lSUQlTR0lOVF9MT0NBTDEgKyA3CS8qIFZlcnQgcmV0cmFjZSAvIEdJTy0yICovCisKKy8qIE1hcHBlZCBpbnRlcnJ1cHRzLiBUaGVzZSBpbnRlcnJ1cHRzIG1heSBiZSBtYXBwZWQgdG8gZWl0aGVyIDAsIG9yIDEgKi8KKyNkZWZpbmUgU0dJX1ZFUlRfSVJRCVNHSU5UX0xPQ0FMMiArIDAJLyogSU5UMzogbmV3cG9ydCB2ZXJ0aWNhbCBzdGF0dXMgKi8KKyNkZWZpbmUgU0dJX0VJU0FfSVJRCVNHSU5UX0xPQ0FMMiArIDMJLyogRUlTQSBpbnRlcnJ1cHRzICovCisjZGVmaW5lIFNHSV9LRVlCRF9JUlEJU0dJTlRfTE9DQUwyICsgNAkvKiBrZXlib2FyZCAqLworI2RlZmluZSBTR0lfU0VSSUFMX0lSUQlTR0lOVF9MT0NBTDIgKyA1CS8qIG9uYm9hcmQgc2VyaWFsICovCisKKyNkZWZpbmUgaXAyMl9pc19mdWxsaG91c2UoKQkoc2dpb2MtPnN5c2lkICYgU0dJT0NfU1lTSURfRlVMTEhPVVNFKQorCitleHRlcm4gdW5zaWduZWQgc2hvcnQgaXAyMl9lZXByb21fcmVhZCh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKmN0cmwsIGludCByZWcpOworZXh0ZXJuIHVuc2lnbmVkIHNob3J0IGlwMjJfbnZyYW1fcmVhZChpbnQgcmVnKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NnaS9tYy5oIGIvaW5jbHVkZS9hc20tbWlwcy9zZ2kvbWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDk4ZjkzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zZ2kvbWMuaApAQCAtMCwwICsxLDIzMSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogbWMuaDogRGVmaW5pdGlvbnMgZm9yIFNHSSBNZW1vcnkgQ29udHJvbGxlcgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NiBEYXZpZCBTLiBNaWxsZXIKKyAqIENvcHlyaWdodCAoQykgMTk5OSBSYWxmIEJhZWNobGUKKyAqIENvcHlyaWdodCAoQykgMTk5OSBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCisgKi8KKworI2lmbmRlZiBfU0dJX01DX0gKKyNkZWZpbmUgX1NHSV9NQ19ICisKK3N0cnVjdCBzZ2ltY19yZWdzIHsKKwl1MzIgX3VudXNlZDA7CisJdm9sYXRpbGUgdTMyIGNwdWN0cmwwOwkvKiBDUFUgY29udHJvbCByZWdpc3RlciAwLCByZWFkd3JpdGUgKi8KKyNkZWZpbmUgU0dJTUNfQ0NUUkwwX1JFRlMJMHgwMDAwMDAwZiAvKiBSRUZTIG1hc2sgKi8KKyNkZWZpbmUgU0dJTUNfQ0NUUkwwX0VSRUZSRVNICTB4MDAwMDAwMTAgLyogTWVtb3J5IHJlZnJlc2ggZW5hYmxlICovCisjZGVmaW5lIFNHSU1DX0NDVFJMMF9FUEVSUkdJTwkweDAwMDAwMDIwIC8qIEdJTyBwYXJpdHkgZXJyb3IgZW5hYmxlICovCisjZGVmaW5lIFNHSU1DX0NDVFJMMF9FUEVSUk1FTQkweDAwMDAwMDQwIC8qIE1haW4gbWVtIHBhcml0eSBlcnJvciBlbmFibGUgKi8KKyNkZWZpbmUgU0dJTUNfQ0NUUkwwX0VQRVJSQ1BVCTB4MDAwMDAwODAgLyogQ1BVIGJ1cyBwYXJpdHkgZXJyb3IgZW5hYmxlICovCisjZGVmaW5lIFNHSU1DX0NDVFJMMF9XRE9HCTB4MDAwMDAxMDAgLyogV2F0Y2hkb2cgdGltZXIgZW5hYmxlICovCisjZGVmaW5lIFNHSU1DX0NDVFJMMF9TWVNJTklUCTB4MDAwMDAyMDAgLyogU3lzdGVtIGluaXQgYml0ICovCisjZGVmaW5lIFNHSU1DX0NDVFJMMF9HRlhSRVNFVAkweDAwMDAwNDAwIC8qIEdyYXBoaWNzIGludGVyZmFjZSByZXNldCAqLworI2RlZmluZSBTR0lNQ19DQ1RSTDBfRUlTQUxPQ0sJMHgwMDAwMDgwMCAvKiBMb2NrIENQVSBmcm9tIG1lbW9yeSBmb3IgRUlTQSAqLworI2RlZmluZSBTR0lNQ19DQ1RSTDBfRVBFUlJTQ01ECTB4MDAwMDEwMDAgLyogU3lzQ01EIGJ1cyBwYXJpdHkgZXJyb3IgZW5hYmxlICovCisjZGVmaW5lIFNHSU1DX0NDVFJMMF9JRU5BQgkweDAwMDAyMDAwIC8qIEFsbG93IGludGVycnVwdHMgZnJvbSBNQyAqLworI2RlZmluZSBTR0lNQ19DQ1RSTDBfRVNOT09QCTB4MDAwMDQwMDAgLyogU25vb3BpbmcgSS9PIGVuYWJsZSAqLworI2RlZmluZSBTR0lNQ19DQ1RSTDBfRVBST01XUgkweDAwMDA4MDAwIC8qIFByb20gd3JpdGVzIGZyb20gY3B1IGVuYWJsZSAqLworI2RlZmluZSBTR0lNQ19DQ1RSTDBfV1JFU0VUUE1FTQkweDAwMDEwMDAwIC8qIFBlcmZvcm0gd2FybSByZXNldCwgcHJlc2VydmVzIG1lbSAqLworI2RlZmluZSBTR0lNQ19DQ1RSTDBfTEVORElBTgkweDAwMDIwMDAwIC8qIFB1dCBNQyBpbiBsaXR0bGUtZW5kaWFuIG1vZGUgKi8KKyNkZWZpbmUgU0dJTUNfQ0NUUkwwX1dSRVNFVERNRU0JMHgwMDA0MDAwMCAvKiBXYXJtIHJlc2V0LCBkZXN0cm95cyBtZW0gY29udGVudHMgKi8KKyNkZWZpbmUgU0dJTUNfQ0NUUkwwX0NNRU1CQURQQVIJMHgwMjAwMDAwMCAvKiBHZW5lcmF0ZSBiYWQgcGVyciBmcm9tIGNwdSB0byBtZW0gKi8KKyNkZWZpbmUgU0dJTUNfQ0NUUkwwX1I0S05PQ0hLUEFSUiAweDA0MDAwMDAwIC8qIERvbid0IGNoayBwYXJpdHkgb24gbWVtIGRhdGEgcmVhZHMgKi8KKyNkZWZpbmUgU0dJTUNfQ0NUUkwwX0dJT0JUT0IJMHgwODAwMDAwMCAvKiBBbGxvdyBHSU8gYmFjayB0byBiYWNrIHdyaXRlcyAqLworCXUzMiBfdW51c2VkMTsKKwl2b2xhdGlsZSB1MzIgY3B1Y3RybDE7CS8qIENQVSBjb250cm9sIHJlZ2lzdGVyIDEsIHJlYWR3cml0ZSAqLworI2RlZmluZSBTR0lNQ19DQ1RSTDFfRUdJT1RJTUVPCTB4MDAwMDAwMTAgLyogR0lPIGJ1cyB0aW1lb3V0IGVuYWJsZSAqLworI2RlZmluZSBTR0lNQ19DQ1RSTDFfRklYRURFSFBDCTB4MDAwMDEwMDAgLyogRml4ZWQgSFBDIGVuZGlhbm5lc3MgKi8KKyNkZWZpbmUgU0dJTUNfQ0NUUkwxX0xJVFRMRUhQQwkweDAwMDAyMDAwIC8qIExpdHRsZSBlbmRpYW4gSFBDICovCisjZGVmaW5lIFNHSU1DX0NDVFJMMV9GSVhFREVFWFAwCTB4MDAwMDQwMDAgLyogRml4ZWQgRVhQMCBlbmRpYW5uZXNzICovCisjZGVmaW5lIFNHSU1DX0NDVFJMMV9MSVRUTEVFWFAwCTB4MDAwMDgwMDAgLyogTGl0dGxlIGVuZGlhbiBFWFAwICovCisjZGVmaW5lIFNHSU1DX0NDVFJMMV9GSVhFREVFWFAxCTB4MDAwMTAwMDAgLyogRml4ZWQgRVhQMSBlbmRpYW5uZXNzICovCisjZGVmaW5lIFNHSU1DX0NDVFJMMV9MSVRUTEVFWFAxCTB4MDAwMjAwMDAgLyogTGl0dGxlIGVuZGlhbiBFWFAxICovCisKKwl1MzIgX3VudXNlZDI7CisJdm9sYXRpbGUgdTMyIHdhdGNoZG9ndDsJLyogV2F0Y2hkb2cgcmVnIHJkb25seSwgd3JpdGUgY2xlYXJzICovCisKKwl1MzIgX3VudXNlZDM7CisJdm9sYXRpbGUgdTMyIHN5c3RlbWlkOwkvKiBNQyBzeXN0ZW0gSUQgcmVnaXN0ZXIsIHJlYWRvbmx5ICovCisjZGVmaW5lIFNHSU1DX1NZU0lEX01BU0tSRVYJMHgwMDAwMDAwZiAvKiBSZXZpc2lvbiBvZiBNQyBjb250cm9sbGVyICovCisjZGVmaW5lIFNHSU1DX1NZU0lEX0VQUkVTRU5UCTB4MDAwMDAwMTAgLyogSW5kaWNhdGVzIHByZXNlbmNlIG9mIEVJU0EgYnVzICovCisKKwl1MzIgX3VudXNlZDRbM107CisJdm9sYXRpbGUgdTMyIGRpdmlkZXI7CS8qIERpdmlkZXIgcmVnIGZvciBSUFNTICovCisKKwl1MzIgX3VudXNlZDU7CisJdm9sYXRpbGUgdTMyIGVlcHJvbTsJLyogRUVQUk9NIGJ5dGUgcmVnIGZvciByNGsgKi8KKyNkZWZpbmUgU0dJTUNfRUVQUk9NX1BSRQkweDAwMDAwMDAxIC8qIGVlcHJvbSBjaGlwIFBSRSBwaW4gYXNzZXJ0aW9uICovCisjZGVmaW5lIFNHSU1DX0VFUFJPTV9DU0VMCTB4MDAwMDAwMDIgLyogQWN0aXZlIGhpZ2gsIGVlcHJvbSBjaGlwIHNlbGVjdCAqLworI2RlZmluZSBTR0lNQ19FRVBST01fU0VDTE9DSwkweDAwMDAwMDA0IC8qIEVFUFJPTSBzZXJpYWwgY2xvY2sgKi8KKyNkZWZpbmUgU0dJTUNfRUVQUk9NX1NEQVRBTwkweDAwMDAwMDA4IC8qIFNlcmlhbCBFRVBST00gZGF0YS1vdXQgKi8KKyNkZWZpbmUgU0dJTUNfRUVQUk9NX1NEQVRBSQkweDAwMDAwMDEwIC8qIFNlcmlhbCBFRVBST00gZGF0YS1pbiAqLworCisJdTMyIF91bnVzZWQ2WzNdOworCXZvbGF0aWxlIHUzMiByY250cHJlOwkvKiBQcmVsb2FkIHJlZnJlc2ggY291bnRlciAqLworCisJdTMyIF91bnVzZWQ3OworCXZvbGF0aWxlIHUzMiByY291bnRlcjsJLyogUmVhZG9ubHkgcmVmcmVzaCBjb3VudGVyICovCisKKwl1MzIgX3VudXNlZDhbMTNdOworCXZvbGF0aWxlIHUzMiBnaW9wYXI7CS8qIFBhcmFtZXRlciB3b3JkIGZvciBHSU82NCAqLworI2RlZmluZSBTR0lNQ19HSU9QQVJfSFBDNjQJMHgwMDAwMDAwMSAvKiBIUEMgdGFsa3MgdG8gR0lPIHVzaW5nIDY0LWJpdHMgKi8KKyNkZWZpbmUgU0dJTUNfR0lPUEFSX0dGWDY0CTB4MDAwMDAwMDIgLyogR0ZYIHRhbGtzIHRvIEdJTyB1c2luZyA2NC1iaXRzICovCisjZGVmaW5lIFNHSU1DX0dJT1BBUl9FWFAwNjQJMHgwMDAwMDAwNCAvKiBFWFAoc2xvdDApIHRhbGtzIHVzaW5nIDY0LWJpdHMgKi8KKyNkZWZpbmUgU0dJTUNfR0lPUEFSX0VYUDE2NAkweDAwMDAwMDA4IC8qIEVYUChzbG90MSkgdGFsa3MgdXNpbmcgNjQtYml0cyAqLworI2RlZmluZSBTR0lNQ19HSU9QQVJfRUlTQTY0CTB4MDAwMDAwMTAgLyogRUlTQSBidXMgdGFsa3MgNjQtYml0cyB0byBHSU8gKi8KKyNkZWZpbmUgU0dJTUNfR0lPUEFSX0hQQzI2NAkweDAwMDAwMDIwIC8qIDJuZCBIUFggdGFsa3MgNjQtYml0cyB0byBHSU8gKi8KKyNkZWZpbmUgU0dJTUNfR0lPUEFSX1JUSU1FR0ZYCTB4MDAwMDAwNDAgLyogR0ZYIGRldmljZSBoYXMgcmVhbHRpbWUgYXR0ciAqLworI2RlZmluZSBTR0lNQ19HSU9QQVJfUlRJTUVFWFAwCTB4MDAwMDAwODAgLyogRVhQKHNsb3QwKSBoYXMgcmVhbHRpbWUgYXR0ciAqLworI2RlZmluZSBTR0lNQ19HSU9QQVJfUlRJTUVFWFAxCTB4MDAwMDAxMDAgLyogRVhQKHNsb3QxKSBoYXMgcmVhbHRpbWUgYXR0ciAqLworI2RlZmluZSBTR0lNQ19HSU9QQVJfTUFTVEVSRUlTQQkweDAwMDAwMjAwIC8qIEVJU0EgYnVzIGNhbiBhY3QgYXMgYnVzIG1hc3RlciAqLworI2RlZmluZSBTR0lNQ19HSU9QQVJfT05FQlVTCTB4MDAwMDA0MDAgLyogRXhpc3RzIG9uZSBHSU82NCBwaXBlbGluZWQgYnVzICovCisjZGVmaW5lIFNHSU1DX0dJT1BBUl9NQVNURVJHRlgJMHgwMDAwMDgwMCAvKiBHRlggY2FuIGFjdCBhcyBhIGJ1cyBtYXN0ZXIgKi8KKyNkZWZpbmUgU0dJTUNfR0lPUEFSX01BU1RFUkVYUDAJMHgwMDAwMTAwMCAvKiBFWFAoc2xvdDApIGNhbiBidXMgbWFzdGVyICovCisjZGVmaW5lIFNHSU1DX0dJT1BBUl9NQVNURVJFWFAxCTB4MDAwMDIwMDAgLyogRVhQKHNsb3QxKSBjYW4gYnVzIG1hc3RlciAqLworI2RlZmluZSBTR0lNQ19HSU9QQVJfUExJTkVFWFAwCTB4MDAwMDQwMDAgLyogRVhQKHNsb3QwKSBoYXMgcGlwZWxpbmUgYXR0ciAqLworI2RlZmluZSBTR0lNQ19HSU9QQVJfUExJTkVFWFAxCTB4MDAwMDgwMDAgLyogRVhQKHNsb3QxKSBoYXMgcGlwZWxpbmUgYXR0ciAqLworCisJdTMyIF91bnVzZWQ5OworCXZvbGF0aWxlIHUzMiBjcHV0cDsJLyogQ1BVIGJ1cyBhcmIgdGltZSBwZXJpb2QgKi8KKworCXUzMiBfdW51c2VkMTBbM107CisJdm9sYXRpbGUgdTMyIGxidXJzdHRwOwkvKiBUaW1lIHBlcmlvZCBmb3IgbG9uZyBidXJzdHMgKi8KKworCS8qIE1DIGNoaXAgY2FuIGRyaXZlIHVwIHRvIDQgYmFuayA0IFNJTU1zIGVhY2guIEFsbCBTSU1NcyBpbiBiYW5rIG11c3QKKwkgKiBiZSB0aGUgc2FtZSBzaXplLiBUaGUgc2l6ZSBlbmNvZGluZyBmb3Igc3VwcG9ydGVkIFNJTU1zIGlzIGJlbGxvdyAqLworCXUzMiBfdW51c2VkMTFbOV07CisJdm9sYXRpbGUgdTMyIG1jb25maWcwOwkvKiBNZW1vcnkgY29uZmlnIHJlZ2lzdGVyIHplcm8gKi8KKwl1MzIgX3VudXNlZDEyOworCXZvbGF0aWxlIHUzMiBtY29uZmlnMTsJLyogTWVtb3J5IGNvbmZpZyByZWdpc3RlciBvbmUgKi8KKyNkZWZpbmUgU0dJTUNfTUNPTkZJR19CQVNFQUREUgkweDAwMDAwMGZmIC8qIEJhc2UgYWRkcmVzcyBvZiBiYW5rKi8KKyNkZWZpbmUgU0dJTUNfTUNPTkZJR19STUFTSwkweDAwMDAxZjAwIC8qIFJhbSBjb25maWcgYml0bWFzayAqLworI2RlZmluZSBTR0lNQ19NQ09ORklHX0JWQUxJRAkweDAwMDAyMDAwIC8qIEJhbmsgaXMgdmFsaWQgKi8KKyNkZWZpbmUgU0dJTUNfTUNPTkZJR19TQkFOS1MJMHgwMDAwNDAwMCAvKiBOdW1iZXIgb2Ygc3ViYmFua3MgKi8KKworCXUzMiBfdW51c2VkMTM7CisJdm9sYXRpbGUgdTMyIGNtYWNjOyAgICAgICAgLyogTWVtIGFjY2VzcyBjb25maWcgZm9yIENQVSAqLworCXUzMiBfdW51c2VkMTQ7CisJdm9sYXRpbGUgdTMyIGdtYWNjOyAgICAgICAgLyogTWVtIGFjY2VzcyBjb25maWcgZm9yIEdJTyAqLworCisJLyogVGhpcyBkZWZpbmUgYXBwbGllcyB0byBib3RoIGNtYWNjIGFuZCBnbWFjYyByZWdpc3RlcnMgYWJvdmUuICovCisjZGVmaW5lIFNHSU1DX01BQ0NfQUxJQVNCSUcJMHgyMDAwMDAwMCAvKiA1MTJNQiBob21lIGZvciBhbGlhcyAqLworCisJLyogRXJyb3IgYWRkcmVzcy9zdGF0dXMgcmVncyBmcm9tIEdJTyBhbmQgQ1BVIHBlcnNwZWN0aXZlcy4gKi8KKwl1MzIgX3VudXNlZDE1OworCXZvbGF0aWxlIHUzMiBjZXJyOwkvKiBFcnJvciBhZGRyZXNzIHJlZyBmb3IgQ1BVICovCisJdTMyIF91bnVzZWQxNjsKKwl2b2xhdGlsZSB1MzIgY3N0YXQ7CS8qIFN0YXR1cyByZWcgZm9yIENQVSAqLworI2RlZmluZSBTR0lNQ19DU1RBVF9SRAkJMHgwMDAwMDEwMCAvKiByZWFkIHBhcml0eSBlcnJvciAqLworI2RlZmluZSBTR0lNQ19DU1RBVF9QQVIJCTB4MDAwMDAyMDAgLyogQ1BVIHBhcml0eSBlcnJvciAqLworI2RlZmluZSBTR0lNQ19DU1RBVF9BRERSCTB4MDAwMDA0MDAgLyogbWVtb3J5IGJ1cyBlcnJvciBiYWQgYWRkciAqLworI2RlZmluZSBTR0lNQ19DU1RBVF9TWVNBRF9QQVIJMHgwMDAwMDgwMCAvKiBzeXNhZCBwYXJpdHkgZXJyb3IgKi8KKyNkZWZpbmUgU0dJTUNfQ1NUQVRfU1lTQ01EX1BBUgkweDAwMDAxMDAwIC8qIHN5c2NtZCBwYXJpdHkgZXJyb3IgKi8KKyNkZWZpbmUgU0dJTUNfQ1NUQVRfQkFEX0RBVEEJMHgwMDAwMjAwMCAvKiBiYWQgZGF0YSBpZGVudGlmaWVyICovCisjZGVmaW5lIFNHSU1DX0NTVEFUX1BBUl9NQVNLCTB4MDAwMDFmMDAgLyogcGFyaXR5IGVycm9yIG1hc2sgKi8KKyNkZWZpbmUgU0dJTUNfQ1NUQVRfUkRfUEFSCShTR0lNQ19DU1RBVF9SRCB8IFNHSU1DX0NTVEFUX1BBUikKKworCXUzMiBfdW51c2VkMTc7CisJdm9sYXRpbGUgdTMyIGdlcnI7CS8qIEVycm9yIGFkZHJlc3MgcmVnIGZvciBHSU8gKi8KKwl1MzIgX3VudXNlZDE4OworCXZvbGF0aWxlIHUzMiBnc3RhdDsJLyogU3RhdHVzIHJlZyBmb3IgR0lPICovCisjZGVmaW5lIFNHSU1DX0dTVEFUX1JECQkweDAwMDAwMTAwIC8qIHJlYWQgcGFyaXR5IGVycm9yICovCisjZGVmaW5lIFNHSU1DX0dTVEFUX1dSCQkweDAwMDAwMjAwIC8qIHdyaXRlIHBhcml0eSBlcnJvciAqLworI2RlZmluZSBTR0lNQ19HU1RBVF9USU1FCTB4MDAwMDA0MDAgLyogR0lPIGJ1cyB0aW1lZCBvdXQgKi8KKyNkZWZpbmUgU0dJTUNfR1NUQVRfUFJPTQkweDAwMDAwODAwIC8qIHdyaXRlIHRvIFBST00gd2hlbiBQUk9NX0VOIG5vdCBzZXQgKi8KKyNkZWZpbmUgU0dJTUNfR1NUQVRfQUREUgkweDAwMDAxMDAwIC8qIHBhcml0eSBlcnJvciBvbiBhZGRyIGN5Y2xlICovCisjZGVmaW5lIFNHSU1DX0dTVEFUX0JDCQkweDAwMDAyMDAwIC8qIHBhcml0eSBlcnJvciBvbiBieXRlIGNvdW50IGN5Y2xlICovCisjZGVmaW5lIFNHSU1DX0dTVEFUX1BJT19SRAkweDAwMDA0MDAwIC8qIHJlYWQgZGF0YSBwYXJpdHkgb24gcGlvICovCisjZGVmaW5lIFNHSU1DX0dTVEFUX1BJT19XUgkweDAwMDA4MDAwIC8qIHdyaXRlIGRhdGEgcGFyaXR5IG9uIHBpbyAqLworCisJLyogU3BlY2lhbCBoYXJkIGJ1cyBsb2NraW5nIHJlZ2lzdGVycy4gKi8KKwl1MzIgX3VudXNlZDE5OworCXZvbGF0aWxlIHUzMiBzeXNzZW1iaXQ7CQkvKiBVbmktYml0IHN5c3RlbSBzZW1hcGhvcmUgKi8KKwl1MzIgX3VudXNlZDIwOworCXZvbGF0aWxlIHUzMiBtbG9jazsJCS8qIEdsb2JhbCBHSU8gbWVtb3J5IGFjY2VzcyBsb2NrICovCisJdTMyIF91bnVzZWQyMTsKKwl2b2xhdGlsZSB1MzIgZWxvY2s7CQkvKiBMb2NrcyBFSVNBIGZyb20gR0lPIGFjY2Vzc2VzICovCisKKwkvKiBHSU8gZG1hIGNvbnRyb2wgcmVnaXN0ZXJzLiAqLworCXUzMiBfdW51c2VkMjJbMTVdOworCXZvbGF0aWxlIHUzMiBnaW9fZG1hX3RyYW5zOwkvKiBETUEgbWFzayB0byB0cmFuc2xhdGlvbiBHSU8gYWRkcnMgKi8KKwl1MzIgX3VudXNlZDIzOworCXZvbGF0aWxlIHUzMiBnaW9fZG1hX3NiaXRzOwkvKiBETUEgR0lPIGFkZHIgc3Vic3RpdHV0aW9uIGJpdHMgKi8KKwl1MzIgX3VudXNlZDI0OworCXZvbGF0aWxlIHUzMiBkbWFfaW50cl9jYXVzZTsJLyogRE1BIElSUSBjYXVzZSBpbmRpY2F0b3IgYml0cyAqLworCXUzMiBfdW51c2VkMjU7CisJdm9sYXRpbGUgdTMyIGRtYV9jdHJsOwkJLyogTWFpbiBETUEgY29udHJvbCByZWcgKi8KKworCS8qIERNQSBUTEIgZW50cnkgMCAqLworCXUzMiBfdW51c2VkMjZbNV07CisJdm9sYXRpbGUgdTMyIGR0bGJfaGkwOworCXUzMiBfdW51c2VkMjc7CisJdm9sYXRpbGUgdTMyIGR0bGJfbG8wOworCisJLyogRE1BIFRMQiBlbnRyeSAxICovCisJdTMyIF91bnVzZWQyODsKKwl2b2xhdGlsZSB1MzIgZHRsYl9oaTE7CisJdTMyIF91bnVzZWQyOTsKKwl2b2xhdGlsZSB1MzIgZHRsYl9sbzE7CisKKwkvKiBETUEgVExCIGVudHJ5IDIgKi8KKwl1MzIgX3VudXNlZDMwOworCXZvbGF0aWxlIHUzMiBkdGxiX2hpMjsKKwl1MzIgX3VudXNlZDMxOworCXZvbGF0aWxlIHUzMiBkdGxiX2xvMjsKKworCS8qIERNQSBUTEIgZW50cnkgMyAqLworCXUzMiBfdW51c2VkMzI7CisJdm9sYXRpbGUgdTMyIGR0bGJfaGkzOworCXUzMiBfdW51c2VkMzM7CisJdm9sYXRpbGUgdTMyIGR0bGJfbG8zOworCQorCXUzMiBfdW51c2VkMzRbMHgwMzkyXTsKKwkKKwl1MzIgX3VudXNlZDM1OworCXZvbGF0aWxlIHUzMiBycHNzY291bnRlcjsJLyogQ2hpcnBzIGF0IDEwMG5zICovCisKKwl1MzIgX3VudXNlZDM2WzB4MTAwMC80LTIqNF07CisJCisJdTMyIF91bnVzZWQzNzsKKwl2b2xhdGlsZSB1MzIgbWFkZHJvbmx5OwkJLyogQWRkcmVzcyBETUEgZ29lcyBhdCAqLworCXUzMiBfdW51c2VkMzg7CisJdm9sYXRpbGUgdTMyIG1hZGRycGRlZmx0czsJLyogU2FtZSBhcyBhYm92ZSwgcGx1cyBzZXQgZGVmYXVsdHMgKi8KKwl1MzIgX3VudXNlZDM5OworCXZvbGF0aWxlIHUzMiBkbWFzejsJCS8qIERNQSBjb3VudCAqLworCXUzMiBfdW51c2VkNDA7CisJdm9sYXRpbGUgdTMyIHNzaXplOwkJLyogRE1BIHN0cmlkZSBzaXplICovCisJdTMyIF91bnVzZWQ0MTsKKwl2b2xhdGlsZSB1MzIgZ21hZGRyb25seTsJLyogU2V0IEdJTyBETUEgYnV0IGRvbid0IHN0YXJ0IHRyYW5zICovCisJdTMyIF91bnVzZWQ0MjsKKwl2b2xhdGlsZSB1MzIgZG1hZGRucGdvOwkJLyogU2V0IEdJTyBETUEgYWRkciArIHN0YXJ0IHRyYW5zZmVyICovCisJdTMyIF91bnVzZWQ0MzsKKwl2b2xhdGlsZSB1MzIgZG1hbW9kZTsJCS8qIERNQSBtb2RlIGNvbmZpZyBiaXQgc2V0dGluZ3MgKi8KKwl1MzIgX3VudXNlZDQ0OworCXZvbGF0aWxlIHUzMiBkbWFjY291bnQ7CQkvKiBab29tIGFuZCBieXRlIGNvdW50IGZvciBETUEgKi8KKwl1MzIgX3VudXNlZDQ1OworCXZvbGF0aWxlIHUzMiBkbWFzdGFydDsJCS8qIFBlZGFsIHRvIHRoZSBtZXRhbC4gKi8KKwl1MzIgX3VudXNlZDQ2OworCXZvbGF0aWxlIHUzMiBkbWFydW5uaW5nOwkvKiBETUEgb3AgaXMgaW4gcHJvZ3Jlc3MgKi8KKwl1MzIgX3VudXNlZDQ3OworCXZvbGF0aWxlIHUzMiBtYWRkcmRlZnN0YXJ0OwkvKiBTZXQgZG1hIGFkZHIsIGRlZmF1bHRzLCBhbmQga2ljayBpdCAqLworfTsKKworZXh0ZXJuIHN0cnVjdCBzZ2ltY19yZWdzICpzZ2ltYzsKKyNkZWZpbmUgU0dJTUNfQkFTRQkJMHgxZmEwMDAwMAkvKiBwaHlzaWNhbCAqLworCisvKiBCYXNlIGxvY2F0aW9uIG9mIHRoZSB0d28gcmFtIGJhbmtzIGZvdW5kIGluIElQMlswMjY4XSBtYWNoaW5lcy4gKi8KKyNkZWZpbmUgU0dJTUNfU0VHMF9CQUREUgkweDA4MDAwMDAwCisjZGVmaW5lIFNHSU1DX1NFRzFfQkFERFIJMHgyMDAwMDAwMAorCisvKiBNYXhpbXVtIHNpemUgb2YgdGhlIGFib3ZlIGJhbmtzIGFyZSBwZXIgbWFjaGluZS4gKi8KKyNkZWZpbmUgU0dJTUNfU0VHMF9TSVpFX0FMTAkJMHgxMDAwMDAwMCAvKiAyNTZNQiAqLworI2RlZmluZSBTR0lNQ19TRUcxX1NJWkVfSVAyMF9JUDIyCTB4MDgwMDAwMDAgLyogMTI4TUIgKi8KKyNkZWZpbmUgU0dJTUNfU0VHMV9TSVpFX0lQMjZfSVAyOAkweDIwMDAwMDAwIC8qIDUxMk1CICovCisKK2V4dGVybiB2b2lkIHNnaW1jX2luaXQodm9pZCk7CisKKyNlbmRpZiAvKiBfU0dJX01DX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc2dpL3BpMS5oIGIvaW5jbHVkZS9hc20tbWlwcy9zZ2kvcGkxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk1MDY5MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc2dpL3BpMS5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBwaTEuaDogRGVmaW5pdGlvbnMgZm9yIFNHSSBQSTEgcGFyYWxsZWwgcG9ydAorICovCisKKyNpZm5kZWYgX1NHSV9QSTFfSAorI2RlZmluZSBfU0dJX1BJMV9ICisKK3N0cnVjdCBwaTFfcmVncyB7CisJdTggX2RhdGFbM107CisJdm9sYXRpbGUgdTggZGF0YTsKKwl1OCBfY3RybFszXTsKKwl2b2xhdGlsZSB1OCBjdHJsOworI2RlZmluZSBQSTFfQ1RSTF9TVFJPQkVfTgkweDAxCisjZGVmaW5lIFBJMV9DVFJMX0FGRF9OCQkweDAyCisjZGVmaW5lIFBJMV9DVFJMX0lOSVRfTgkJMHgwNAorI2RlZmluZSBQSTFfQ1RSTF9TTElOX04JCTB4MDgKKyNkZWZpbmUgUEkxX0NUUkxfSVJRX0VOQQkweDEwCisjZGVmaW5lIFBJMV9DVFJMX0RJUgkJMHgyMAorI2RlZmluZSBQSTFfQ1RSTF9TRUwJCTB4NDAKKwl1OCBfc3RhdHVzWzNdOworCXZvbGF0aWxlIHU4IHN0YXR1czsKKyNkZWZpbmUgUEkxX1NUQVRfREVWSUQJCTB4MDMJLyogYml0cyAwLTEgKi8KKyNkZWZpbmUgUEkxX1NUQVRfTk9JTksJCTB4MDQJLyogU0dJIE1PREUgb25seSAqLworI2RlZmluZSBQSTFfU1RBVF9FUlJPUgkJMHgwOAorI2RlZmluZSBQSTFfU1RBVF9PTkxJTkUJCTB4MTAKKyNkZWZpbmUgUEkxX1NUQVRfUEUJCTB4MjAKKyNkZWZpbmUgUEkxX1NUQVRfQUNLCQkweDQwCisjZGVmaW5lIFBJMV9TVEFUX0JVU1kJCTB4ODAKKwl1OCBfZG1hY3RybFszXTsKKwl2b2xhdGlsZSB1OCBkbWFjdHJsOworI2RlZmluZSBQSTFfRE1BQ1RSTF9GSUZPX0VNUFRZCTB4MDEgICAgLyogZmlmbyBlbXB0eSBSL08gKi8KKyNkZWZpbmUgUEkxX0RNQUNUUkxfQUJPUlQJMHgwMiAgICAvKiByZXNldCBETUEgYW5kIGludGVybmFsIGZpZm8gVy9PICovCisjZGVmaW5lIFBJMV9ETUFDVFJMX1NURE1PREUJMHgwMCAgICAvKiBiaXRzIDItMyAqLworI2RlZmluZSBQSTFfRE1BQ1RSTF9TR0lNT0RFCTB4MDQgICAgLyogYml0cyAyLTMgKi8KKyNkZWZpbmUgUEkxX0RNQUNUUkxfUklDT0hNT0RFCTB4MDggICAgLyogYml0cyAyLTMgKi8KKyNkZWZpbmUgUEkxX0RNQUNUUkxfSFBNT0RFCTB4MGMgICAgLyogYml0cyAyLTMgKi8KKyNkZWZpbmUgUEkxX0RNQUNUUkxfQkxLTU9ERQkweDEwICAgIC8qIGJsb2NrIG1vZGUgKi8KKyNkZWZpbmUgUEkxX0RNQUNUUkxfRklGT19DTEVBUgkweDIwICAgIC8qIGNsZWFyIGZpZm8gVy9PICovCisjZGVmaW5lIFBJMV9ETUFDVFJMX1JFQUQJMHg0MCAgICAvKiByZWFkICovCisjZGVmaW5lIFBJMV9ETUFDVFJMX1JVTgkJMHg4MCAgICAvKiBwZWRhbCB0byB0aGUgbWV0YWwgKi8KKwl1OCBfaW50c3RhdFszXTsKKwl2b2xhdGlsZSB1OCBpbnRzdGF0OworI2RlZmluZSBQSTFfSU5UU1RBVF9BQ0sJCTB4MDQKKyNkZWZpbmUgUEkxX0lOVFNUQVRfRkVNUFRZCTB4MDgKKyNkZWZpbmUgUEkxX0lOVFNUQVRfTk9JTksJMHgxMAorI2RlZmluZSBQSTFfSU5UU1RBVF9PTkxJTkUJMHgyMAorI2RlZmluZSBQSTFfSU5UU1RBVF9FUlIJCTB4NDAKKyNkZWZpbmUgUEkxX0lOVFNUQVRfUEUJCTB4ODAKKwl1OCBfaW50bWFza1szXTsKKwl2b2xhdGlsZSB1OCBpbnRtYXNrOwkJLyogZW5hYmxlZCBsb3csIHJlc2V0IGhpZ2gqLworI2RlZmluZSBQSTFfSU5UTUFTS19BQ0sJCTB4MDQKKyNkZWZpbmUgUEkxX0lOVE1BU0tfRklGT19FTVBUWQkweDA4CisjZGVmaW5lIFBJMV9JTlRNQVNLX05PSU5LCTB4MTAKKyNkZWZpbmUgUEkxX0lOVE1BU0tfT05MSU5FCTB4MjAKKyNkZWZpbmUgUEkxX0lOVE1BU0tfRVJSCQkweDQwCisjZGVmaW5lIFBJMV9JTlRNQVNLX1BFCQkweDgwCisJdTggX3RpbWVyMVszXTsKKwl2b2xhdGlsZSB1OCB0aW1lcjE7CisjZGVmaW5lIFBJMV9USU1FMQkJMHgyNworCXU4IF90aW1lcjJbM107CisJdm9sYXRpbGUgdTggdGltZXIyOworI2RlZmluZSBQSTFfVElNRTIJCTB4MTMKKwl1OCBfdGltZXIzWzNdOworCXZvbGF0aWxlIHU4IHRpbWVyMzsKKyNkZWZpbmUgUEkxX1RJTUUzCQkweDEwCisJdTggX3RpbWVyNFszXTsKKwl2b2xhdGlsZSB1OCB0aW1lcjQ7CisjZGVmaW5lIFBJMV9USU1FNAkJMHgwMAorfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NnaS9zZ2kuaCBiL2luY2x1ZGUvYXNtLW1pcHMvc2dpL3NnaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0NWNlYTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NnaS9zZ2kuaApAQCAtMCwwICsxLDQ3IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogc2dpLmg6IERlZmluaXRpb25zIHNwZWNpZmljIHRvIFNHSSBtYWNoaW5lcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYgRGF2aWQgUy4gTWlsbGVyIChkbUBzZ2kuY29tKQorICovCisjaWZuZGVmIF9BU01fU0dJX1NHSV9ICisjZGVmaW5lIF9BU01fU0dJX1NHSV9ICisKKy8qIFVQPVVuaVByb2Nlc3NvciBNUD1NdWx0aVByb2Nlc3NvcihjYXBhYmxlKSAqLworZW51bSBzZ2lfbWFjaCB7CisJaXA0LAkvKiBSMmsgVVAgKi8KKwlpcDUsCS8qIFIyayBNUCAqLworCWlwNiwJLyogUjNrIFVQICovCisJaXA3LAkvKiBSM2sgTVAgKi8KKwlpcDksCS8qIFIzayBVUCAqLworCWlwMTIsCS8qIFIza0EgVVAsIEluZGlnbyAqLworCWlwMTUsCS8qIFIza0EgTVAgKi8KKwlpcDE3LAkvKiBSNEsgVVAgKi8KKwlpcDE5LAkvKiBSNEsgTVAgKi8KKwlpcDIwLAkvKiBSNEsgVVAsIEluZGlnbyAqLworCWlwMjEsCS8qIFRGUCBNUCAqLworCWlwMjIsCS8qIFI0eDAwIFVQLCBJbmRpZ28yICovCisJaXAyNSwJLyogUjEwayBNUCAqLworCWlwMjYsCS8qIFRGUCBVUCwgSW5kaWdvMiAqLworCWlwMjcsCS8qIFIxMGsgTVAsIFIxMmsgTVAsIE9yaWdpbiAqLworCWlwMjgsCS8qIFIxMGsgVVAsIEluZGlnbzIgKi8KKwlpcDMwLAkvKiBPY3RhbmUgKi8KKwlpcDMyLAkvKiBPMiAqLworfTsKKworZXh0ZXJuIGVudW0gc2dpX21hY2ggc2dpbWFjaDsKK2V4dGVybiB2b2lkIHNnaV9zeXNpbml0KHZvaWQpOworCisvKiBNYW55IEkvTyBzcGFjZSByZWdpc3RlcnMgYXJlIGJ5dGUgc2l6ZWQgYW5kIGFyZSBjb250YWluZWQgd2l0aGluCisgKiBvbmUgYnl0ZSBwZXIgd29yZCwgc3BlY2lmaWNhbGx5IHRoZSBNU0IsIHRoaXMgbWFjcm8gaGVscHMgb3V0LgorICovCisjaWZkZWYgX19NSVBTRUxfXworI2RlZmluZSBTR0lfTVNCKHJlZ2FkZHIpICAgKHJlZ2FkZHIpCisjZWxzZQorI2RlZmluZSBTR0lfTVNCKHJlZ2FkZHIpICAgKChyZWdhZGRyKSB8IDB4MykKKyNlbmRpZgorCisjZW5kaWYgLyogX0FTTV9TR0lfU0dJX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc2dpYWxpYi5oIGIvaW5jbHVkZS9hc20tbWlwcy9zZ2lhbGliLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNmMDk3MwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc2dpYWxpYi5oCkBAIC0wLDAgKzEsMTI3IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogU0dJIEFSQ1MgZmlybXdhcmUgaW50ZXJmYWNlIGxpYnJhcnkgZm9yIHRoZSBMaW51eCBrZXJuZWwuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk2IERhdmlkIFMuIE1pbGxlciAoZG1AZW5nci5zZ2kuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyIFJhbGYgQmFlY2hsZSAocmFsZkBnbnUub3JnKQorICovCisjaWZuZGVmIF9BU01fU0dJQUxJQl9ICisjZGVmaW5lIF9BU01fU0dJQUxJQl9ICisKKyNpbmNsdWRlIDxhc20vc2dpYXJjcy5oPgorCitleHRlcm4gc3RydWN0IGxpbnV4X3JvbXZlYyAqcm9tdmVjOworZXh0ZXJuIGludCBwcm9tX2FyZ2M7CisKK2V4dGVybiBMT05HICpfcHJvbV9hcmd2LCAqX3Byb21fZW52cDsKKworLyogQSAzMi1iaXQgQVJDIFBST00gcGFzcyBhcmd1bWVudHMgYW5kIGVudmlyb25tZW50IGFzIDMyLWJpdCBwb2ludGVyLgorICAgVGhlc2UgbWFjcm9zIHRha2UgY2FyZSBvZiBzaWduIGV4dGVuc2lvbi4gICovCisjZGVmaW5lIHByb21fYXJndihpbmRleCkgKChjaGFyICopIChsb25nKSBfcHJvbV9hcmd2WyhpbmRleCldKQorI2RlZmluZSBwcm9tX2FyZ2MoaW5kZXgpICgoY2hhciAqKSAobG9uZykgX3Byb21fYXJnY1soaW5kZXgpXSkKKworZXh0ZXJuIGludCBwcm9tX2ZsYWdzOworCisjZGVmaW5lIFBST01fRkxBR19BUkNTCQkJMQorI2RlZmluZSBQUk9NX0ZMQUdfVVNFX0FTX0NPTlNPTEUJMgorI2RlZmluZSBQUk9NX0ZMQUdfRE9OVF9GUkVFX1RFTVAJNAorCisvKiBTaW1wbGUgY2hhci1ieS1jaGFyIGNvbnNvbGUgSS9PLiAqLworZXh0ZXJuIHZvaWQgcHJvbV9wdXRjaGFyKGNoYXIgYyk7CitleHRlcm4gY2hhciBwcm9tX2dldGNoYXIodm9pZCk7CisKKy8qIEdlbmVyaWMgcHJpbnRmKCkgdXNpbmcgQVJDUyBjb25zb2xlIEkvTy4gKi8KK2V4dGVybiB2b2lkIHByb21fcHJpbnRmKGNoYXIgKmZtdCwgLi4uKTsKKworLyogTWVtb3J5IGRlc2NyaXB0b3IgbWFuYWdlbWVudC4gKi8KKyNkZWZpbmUgUFJPTV9NQVhfUE1FTUJMT0NLUyAgICAzMgorc3RydWN0IHByb21fcG1lbWJsb2NrIHsKKwlMT05HCWJhc2U7CQkvKiBXaXRoaW4gS1NFRzAgb3IgWEtQSFlTLiAqLworCVVMT05HCXNpemU7CQkvKiBJbiBieXRlcy4gKi8KKwlVTE9ORwl0eXBlOwkJLyogZnJlZSBvciBwcm9tIG1lbW9yeSAqLworfTsKKworLyogR2V0IG5leHQgbWVtb3J5IGRlc2NyaXB0b3IgYWZ0ZXIgQ1VSUiwgcmV0dXJucyBmaXJzdCBkZXNjcmlwdG9yCisgKiBpbiBjaGFpbiBpcyBDVVJSIGlzIE5VTEwuCisgKi8KK2V4dGVybiBzdHJ1Y3QgbGludXhfbWRlc2MgKnByb21fZ2V0bWRlc2Moc3RydWN0IGxpbnV4X21kZXNjICpjdXJyKTsKKyNkZWZpbmUgUFJPTV9OVUxMX01ERVNDICAgKChzdHJ1Y3QgbGludXhfbWRlc2MgKikgMCkKKworLyogQ2FsbGVkIGJ5IHByb21faW5pdCB0byBzZXR1cCB0aGUgcGh5c2ljYWwgbWVtb3J5IHBtZW1ibG9jaworICogYXJyYXkuCisgKi8KK2V4dGVybiB2b2lkIHByb21fbWVtaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIHByb21fZml4dXBfbWVtX21hcCh1bnNpZ25lZCBsb25nIHN0YXJ0X21lbSwgdW5zaWduZWQgbG9uZyBlbmRfbWVtKTsKKworLyogUFJPTSBkZXZpY2UgdHJlZSBsaWJyYXJ5IHJvdXRpbmVzLiAqLworI2RlZmluZSBQUk9NX05VTExfQ09NUE9ORU5UICgocGNvbXBvbmVudCAqKSAwKQorCisvKiBHZXQgc2libGluZyBjb21wb25lbnQgb2YgVEhJUy4gKi8KK2V4dGVybiBwY29tcG9uZW50ICpBcmNHZXRQZWVyKHBjb21wb25lbnQgKnRoaXMpOworCisvKiBHZXQgY2hpbGQgY29tcG9uZW50IG9mIFRISVMuICovCitleHRlcm4gcGNvbXBvbmVudCAqQXJjR2V0Q2hpbGQocGNvbXBvbmVudCAqdGhpcyk7CisKKy8qIEdldCBwYXJlbnQgY29tcG9uZW50IG9mIENISUxELiAqLworZXh0ZXJuIHBjb21wb25lbnQgKnByb21fZ2V0cGFyZW50KHBjb21wb25lbnQgKmNoaWxkKTsKKworLyogQ29weSBjb21wb25lbnQgb3BhcXVlIGRhdGEgb2YgY29tcG9uZW50IFRISVMgaW50byBCVUZGRVIKKyAqIGlmIGNvbXBvbmVudCBUSElTIGhhcyBvcGFxdWUgZGF0YS4gIFJldHVybnMgc3VjY2VzcyBvcgorICogZmFpbHVyZSBzdGF0dXMuCisgKi8KK2V4dGVybiBsb25nIHByb21fZ2V0Y2RhdGEodm9pZCAqYnVmZmVyLCBwY29tcG9uZW50ICp0aGlzKTsKKworLyogT3RoZXIgbWlzYy4gY29tcG9uZW50IHJvdXRpbmVzLiAqLworZXh0ZXJuIHBjb21wb25lbnQgKnByb21fY2hpbGRhZGQocGNvbXBvbmVudCAqdGhpcywgcGNvbXBvbmVudCAqdG1wLCB2b2lkICpkYXRhKTsKK2V4dGVybiBsb25nIHByb21fZGVsY29tcG9uZW50KHBjb21wb25lbnQgKnRoaXMpOworZXh0ZXJuIHBjb21wb25lbnQgKnByb21fY29tcG9uZW50YnlwYXRoKGNoYXIgKnBhdGgpOworCisvKiBUaGlzIGlzIGNhbGxlZCBhdCBwcm9tX2luaXQgdGltZSB0byBpZGVudGlmeSB0aGUKKyAqIEFSQyBhcmNoaXRlY3R1cmUgd2UgYXJlIHJ1bm5pbmcgb24KKyAqLworZXh0ZXJuIHZvaWQgcHJvbV9pZGVudGlmeV9hcmNoKHZvaWQpOworCisvKiBFbnZpcm9ubWVudCB2YXJpYWJsZSByb3V0aW5lcy4gKi8KK2V4dGVybiBQQ0hBUiBBcmNHZXRFbnZpcm9ubWVudFZhcmlhYmxlKFBDSEFSIG5hbWUpOworZXh0ZXJuIExPTkcgQXJjU2V0RW52aXJvbm1lbnRWYXJpYWJsZShQQ0hBUiBuYW1lLCBQQ0hBUiB2YWx1ZSk7CisKKy8qIEFSQ1MgY29tbWFuZCBsaW5lIGFjcXVpc2l0aW9uIGFuZCBwYXJzaW5nLiAqLworZXh0ZXJuIGNoYXIgKnByb21fZ2V0Y21kbGluZSh2b2lkKTsKK2V4dGVybiB2b2lkIHByb21faW5pdF9jbWRsaW5lKHZvaWQpOworCisvKiBBY3F1aXJpbmcgaW5mbyBhYm91dCB0aGUgY3VycmVudCB0aW1lLCBldGMuICovCitleHRlcm4gc3RydWN0IGxpbnV4X3RpbmZvICpwcm9tX2dldHRpbmZvKHZvaWQpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcHJvbV9nZXRydGltZSh2b2lkKTsKKworLyogRmlsZSBvcGVyYXRpb25zLiAqLworZXh0ZXJuIGxvbmcgcHJvbV9nZXR2ZGlyZW50KHVuc2lnbmVkIGxvbmcgZmQsIHN0cnVjdCBsaW51eF92ZGlyZW50ICplbnQsIHVuc2lnbmVkIGxvbmcgbnVtLCB1bnNpZ25lZCBsb25nICpjbnQpOworZXh0ZXJuIGxvbmcgcHJvbV9vcGVuKGNoYXIgKm5hbWUsIGVudW0gbGludXhfb21vZGUgbWQsIHVuc2lnbmVkIGxvbmcgKmZkKTsKK2V4dGVybiBsb25nIHByb21fY2xvc2UodW5zaWduZWQgbG9uZyBmZCk7CitleHRlcm4gTE9ORyBBcmNSZWFkKFVMT05HIGZkLCBQVk9JRCBidWYsIFVMT05HIG51bSwgUFVMT05HIGNudCk7CitleHRlcm4gbG9uZyBwcm9tX2dldHJzdGF0dXModW5zaWduZWQgbG9uZyBmZCk7CitleHRlcm4gTE9ORyBBcmNXcml0ZShVTE9ORyBmZCwgUFZPSUQgYnVmLCBVTE9ORyBudW0sIFBVTE9ORyBjbnQpOworZXh0ZXJuIGxvbmcgcHJvbV9zZWVrKHVuc2lnbmVkIGxvbmcgZmQsIHN0cnVjdCBsaW51eF9iaWdpbnQgKm9mZiwgZW51bSBsaW51eF9zZWVrbW9kZSBzbSk7CitleHRlcm4gbG9uZyBwcm9tX21vdW50KGNoYXIgKm5hbWUsIGVudW0gbGludXhfbW91bnRvcHMgb3ApOworZXh0ZXJuIGxvbmcgcHJvbV9nZXRmaW5mbyh1bnNpZ25lZCBsb25nIGZkLCBzdHJ1Y3QgbGludXhfZmluZm8gKmJ1Zik7CitleHRlcm4gbG9uZyBwcm9tX3NldGZpbmZvKHVuc2lnbmVkIGxvbmcgZmQsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHVuc2lnbmVkIGxvbmcgbXNrKTsKKworLyogUnVubmluZyBzdGFuZC1hbG9uZyBwcm9ncmFtcy4gKi8KK2V4dGVybiBsb25nIHByb21fbG9hZChjaGFyICpuYW1lLCB1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgbG9uZyAqcGMsIHVuc2lnbmVkIGxvbmcgKmVhZGRyKTsKK2V4dGVybiBsb25nIHByb21faW52b2tlKHVuc2lnbmVkIGxvbmcgcGMsIHVuc2lnbmVkIGxvbmcgc3AsIGxvbmcgYXJnYywgY2hhciAqKmFyZ3YsIGNoYXIgKiplbnZwKTsKK2V4dGVybiBsb25nIHByb21fZXhlYyhjaGFyICpuYW1lLCBsb25nIGFyZ2MsIGNoYXIgKiphcmd2LCBjaGFyICoqZW52cCk7CisKKy8qIE1pc2MuIHJvdXRpbmVzLiAqLworZXh0ZXJuIFZPSUQgcHJvbV9oYWx0KFZPSUQpIF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSk7CitleHRlcm4gVk9JRCBwcm9tX3Bvd2VyZG93bihWT0lEKSBfX2F0dHJpYnV0ZV9fKChub3JldHVybikpOworZXh0ZXJuIFZPSUQgcHJvbV9yZXN0YXJ0KFZPSUQpIF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSk7CitleHRlcm4gVk9JRCBBcmNSZWJvb3QoVk9JRCkgX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKTsKK2V4dGVybiBWT0lEIEFyY0VudGVySW50ZXJhY3RpdmVNb2RlKFZPSUQpIF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSk7CitleHRlcm4gbG9uZyBwcm9tX2NmZ3NhdmUoVk9JRCk7CitleHRlcm4gc3RydWN0IGxpbnV4X3N5c2lkICpwcm9tX2dldHN5c2lkKFZPSUQpOworZXh0ZXJuIFZPSUQgQXJjRmx1c2hBbGxDYWNoZXMoVk9JRCk7CitleHRlcm4gRElTUExBWV9TVEFUVVMgKkFyY0dldERpc3BsYXlTdGF0dXMoVUxPTkcgRmlsZUlEKTsKKworI2VuZGlmIC8qIF9BU01fU0dJQUxJQl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NnaWFyY3MuaCBiL2luY2x1ZGUvYXNtLW1pcHMvc2dpYXJjcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5NDUwMzMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NnaWFyY3MuaApAQCAtMCwwICsxLDU0OSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIEFSQyBmaXJtd2FyZSBpbnRlcmZhY2UgZGVmaW5lcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYgRGF2aWQgUy4gTWlsbGVyIChkbUBlbmdyLnNnaS5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDEgUmFsZiBCYWVjaGxlIChyYWxmQGdudS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgU2lsaWNvbiBHcmFwaGljcywgSW5jLgorICovCisjaWZuZGVmIF9BU01fU0dJQVJDU19ICisjZGVmaW5lIF9BU01fU0dJQVJDU19ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vYXJjL3R5cGVzLmg+CisKKy8qIFZhcmlvdXMgQVJDUyBlcnJvciBjb2Rlcy4gKi8KKyNkZWZpbmUgUFJPTV9FU1VDQ0VTUyAgICAgICAgICAgICAgICAgICAweDAwCisjZGVmaW5lIFBST01fRTJCSUcgICAgICAgICAgICAgICAgICAgICAgMHgwMQorI2RlZmluZSBQUk9NX0VBQ0NFU1MgICAgICAgICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgUFJPTV9FQUdBSU4gICAgICAgICAgICAgICAgICAgICAweDAzCisjZGVmaW5lIFBST01fRUJBREYgICAgICAgICAgICAgICAgICAgICAgMHgwNAorI2RlZmluZSBQUk9NX0VCVVNZICAgICAgICAgICAgICAgICAgICAgIDB4MDUKKyNkZWZpbmUgUFJPTV9FRkFVTFQgICAgICAgICAgICAgICAgICAgICAweDA2CisjZGVmaW5lIFBST01fRUlOVkFMICAgICAgICAgICAgICAgICAgICAgMHgwNworI2RlZmluZSBQUk9NX0VJTyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgKKyNkZWZpbmUgUFJPTV9FSVNESVIgICAgICAgICAgICAgICAgICAgICAweDA5CisjZGVmaW5lIFBST01fRU1GSUxFICAgICAgICAgICAgICAgICAgICAgMHgwYQorI2RlZmluZSBQUk9NX0VNTElOSyAgICAgICAgICAgICAgICAgICAgIDB4MGIKKyNkZWZpbmUgUFJPTV9FTkFNRVRPT0xPTkcgICAgICAgICAgICAgICAweDBjCisjZGVmaW5lIFBST01fRU5PREVWICAgICAgICAgICAgICAgICAgICAgMHgwZAorI2RlZmluZSBQUk9NX0VOT0VOVCAgICAgICAgICAgICAgICAgICAgIDB4MGUKKyNkZWZpbmUgUFJPTV9FTk9FWEVDICAgICAgICAgICAgICAgICAgICAweDBmCisjZGVmaW5lIFBST01fRU5PTUVNICAgICAgICAgICAgICAgICAgICAgMHgxMAorI2RlZmluZSBQUk9NX0VOT1NQQyAgICAgICAgICAgICAgICAgICAgIDB4MTEKKyNkZWZpbmUgUFJPTV9FTk9URElSICAgICAgICAgICAgICAgICAgICAweDEyCisjZGVmaW5lIFBST01fRU5PVFRZICAgICAgICAgICAgICAgICAgICAgMHgxMworI2RlZmluZSBQUk9NX0VOWElPICAgICAgICAgICAgICAgICAgICAgIDB4MTQKKyNkZWZpbmUgUFJPTV9FUk9GUyAgICAgICAgICAgICAgICAgICAgICAweDE1CisvKiBTR0kgQVJDUyBzcGVjaWZpYyBlcnJubydzLiAqLworI2RlZmluZSBQUk9NX0VBRERSTk9UQVZBSUwgICAgICAgICAgICAgIDB4MWYKKyNkZWZpbmUgUFJPTV9FVElNRURPVVQgICAgICAgICAgICAgICAgICAweDIwCisjZGVmaW5lIFBST01fRUNPTk5BQk9SVEVEICAgICAgICAgICAgICAgMHgyMQorI2RlZmluZSBQUk9NX0VOT0NPTk5FQ1QgICAgICAgICAgICAgICAgIDB4MjIKKworLyogRGV2aWNlIGNsYXNzZXMsIHR5cGVzLCBhbmQgaWRlbnRpZmllcnMgZm9yIHByb20KKyAqIGRldmljZSBpbnZlbnRvcnkgcXVlcmllcy4KKyAqLworZW51bSBsaW51eF9kZXZjbGFzcyB7CisJc3lzdGVtLCBwcm9jZXNzb3IsIGNhY2hlLCBhZGFwdGVyLCBjb250cm9sbGVyLCBwZXJpcGhlcmFsLCBtZW1vcnkKK307CisKK2VudW0gbGludXhfZGV2dHlwZXMgeworCS8qIEdlbmVyaWMgc3R1ZmYuICovCisJQXJjLCBDcHUsIEZwdSwKKworCS8qIFByaW1hcnkgaW5zbiBhbmQgZGF0YSBjYWNoZXMuICovCisJcGljYWNoZSwgcGRjYWNoZSwKKworCS8qIFNlY29uZGFyeSBpbnNuLCBkYXRhLCBhbmQgY29tYmluZWQgY2FjaGVzLiAqLworCXNpY2FjaGUsIHNkY2FjaGUsIHNjY2FjaGUsCisKKwltZW1kZXYsIGVpc2FfYWRhcHRlciwgdGNfYWRhcHRlciwgc2NzaV9hZGFwdGVyLCBkdGlfYWRhcHRlciwKKwltdWx0aWZ1bmNfYWRhcHRlciwgZHNrX2NvbnRyb2xsZXIsIHRwX2NvbnRyb2xsZXIsIGNkcm9tX2NvbnRyb2xsZXIsCisJd29ybV9jb250cm9sbGVyLCBzZXJpYWxfY29udHJvbGxlciwgbmV0X2NvbnRyb2xsZXIsIGRpc3BfY29udHJvbGxlciwKKwlwYXJhbGxlbF9jb250cm9sbGVyLCBwdHJfY29udHJvbGxlciwga2JkX2NvbnRyb2xsZXIsIGF1ZGlvX2NvbnRyb2xsZXIsCisJbWlzY19jb250cm9sbGVyLCBkaXNrX3BlcmlwaGVyYWwsIGZscHlfcGVyaXBoZXJhbCwgdHBfcGVyaXBoZXJhbCwKKwltb2RlbV9wZXJpcGhlcmFsLCBtb25pdG9yX3BlcmlwaGVyYWwsIHByaW50ZXJfcGVyaXBoZXJhbCwKKwlwdHJfcGVyaXBoZXJhbCwga2JkX3BlcmlwaGVyYWwsIHRlcm1fcGVyaXBoZXJhbCwgbGluZV9wZXJpcGhlcmFsLAorCW5ldF9wZXJpcGhlcmFsLCBtaXNjX3BlcmlwaGVyYWwsIGFub24KK307CisKK2VudW0gbGludXhfaWRlbnRpZmllciB7CisJYm9ndXMsIHJvbmx5LCByZW1vdmFibGUsIGNvbnNpbiwgY29uc291dCwgaW5wdXQsIG91dHB1dAorfTsKKworLyogQSBwcm9tIGRldmljZSB0cmVlIGNvbXBvbmVudC4gKi8KK3N0cnVjdCBsaW51eF9jb21wb25lbnQgeworCWVudW0gbGludXhfZGV2Y2xhc3MgICAgIGNsYXNzOwkvKiBub2RlIGNsYXNzICovCisJZW51bSBsaW51eF9kZXZ0eXBlcyAgICAgdHlwZTsJLyogbm9kZSB0eXBlICovCisJZW51bSBsaW51eF9pZGVudGlmaWVyICAgaWZsYWdzOwkvKiBub2RlIGZsYWdzICovCisJVVNIT1JUIAkJCXZlcnM7CS8qIG5vZGUgdmVyc2lvbiAqLworCVVTSE9SVCAJCQlyZXY7CS8qIG5vZGUgcmV2aXNpb24gKi8KKwlVTE9ORyAJCQlrZXk7CS8qIGNvbXBsZXRlbHkgbWFnaWMgKi8KKwlVTE9ORyAJCQlhbWFzazsJLyogWFhYIGFmZmluaXR5IG1hc2s/Pz8gKi8KKwlVTE9ORwkJCWNkc2l6ZTsJLyogc2l6ZSBvZiBjb25maWd1cmF0aW9uIGRhdGEgKi8KKwlVTE9ORwkJCWlsZW47CS8qIGxlbmd0aCBvZiBzdHJpbmcgaWRlbnRpZmllciAqLworCV9QVUxPTkcJCQlpbmFtZTsJLyogc3RyaW5nIGlkZW50aWZpZXIgKi8KK307Cit0eXBlZGVmIHN0cnVjdCBsaW51eF9jb21wb25lbnQgcGNvbXBvbmVudDsKKworc3RydWN0IGxpbnV4X3N5c2lkIHsKKwljaGFyIHZlbmRbOF0sIHByb2RbOF07Cit9OworCisvKiBBUkNTIHByb20gbWVtb3J5IGRlc2NyaXB0b3JzLiAqLworZW51bSBhcmNzX21lbXR5cGVzIHsKKwlhcmNzX2VibG9jaywgIC8qIGV4Y2VwdGlvbiBibG9jayAqLworCWFyY3NfcnZwYWdlLCAgLyogQVJDUyByb212ZWMgcGFnZSAqLworCWFyY3NfZmNvbnRpZywgLyogQ29udGlndW91cyBhbmQgZnJlZSAqLworCWFyY3NfZnJlZSwgICAgLyogR2VuZXJpYyBmcmVlIG1lbW9yeSAqLworCWFyY3NfYm1lbSwgICAgLyogQm9ya2VuIG1lbW9yeSwgZG9uJ3QgdXNlICovCisJYXJjc19wcm9nLCAgICAvKiBBIGxvYWRlZCBwcm9ncmFtIHJlc2lkZXMgaGVyZSAqLworCWFyY3NfYXRtcCwgICAgLyogQVJDUyB0ZW1wb3Jhcnkgc3RvcmFnZSBhcmVhLCB3aXNoIFNwYXJjIE9wZW5Cb290IHRvbGQgdGhpcyAqLworCWFyY3NfYXBlcm0sICAgLyogQVJDUyBwZXJtYW5lbnQgc3RvcmFnZS4uLiAqLworfTsKKworLyogQVJDIGhhcyBzbGlnaHRseSBkaWZmZXJlbnQgdHlwZXMgdGhhbiBBUkNTICovCitlbnVtIGFyY19tZW10eXBlcyB7CisJYXJjX2VibG9jaywgIC8qIGV4Y2VwdGlvbiBibG9jayAqLworCWFyY19ydnBhZ2UsICAvKiByb212ZWMgcGFnZSAqLworCWFyY19mcmVlLCAgICAvKiBHZW5lcmljIGZyZWUgbWVtb3J5ICovCisJYXJjX2JtZW0sICAgIC8qIEJvcmtlbiBtZW1vcnksIGRvbid0IHVzZSAqLworCWFyY19wcm9nLCAgICAvKiBBIGxvYWRlZCBwcm9ncmFtIHJlc2lkZXMgaGVyZSAqLworCWFyY19hdG1wLCAgICAvKiB0ZW1wb3Jhcnkgc3RvcmFnZSBhcmVhICovCisJYXJjX2FwZXJtLCAgIC8qIHBlcm1hbmVudCBzdG9yYWdlICovCisJYXJjX2Zjb250aWcsIC8qIENvbnRpZ3VvdXMgYW5kIGZyZWUgKi8KK307CisKK3VuaW9uIGxpbnV4X21lbXR5cGVzIHsKKyAgICBlbnVtIGFyY3NfbWVtdHlwZXMgYXJjczsKKyAgICBlbnVtIGFyY19tZW10eXBlcyBhcmM7Cit9OworCitzdHJ1Y3QgbGludXhfbWRlc2MgeworCXVuaW9uIGxpbnV4X21lbXR5cGVzIHR5cGU7CisJVUxPTkcgYmFzZTsKKwlVTE9ORyBwYWdlczsKK307CisKKy8qIFRpbWUgb2YgZGF5IGRlc2NyaXB0b3IuICovCitzdHJ1Y3QgbGludXhfdGluZm8geworCXVuc2lnbmVkIHNob3J0IHlyOworCXVuc2lnbmVkIHNob3J0IG1udGg7CisJdW5zaWduZWQgc2hvcnQgZGF5OworCXVuc2lnbmVkIHNob3J0IGhyOworCXVuc2lnbmVkIHNob3J0IG1pbjsKKwl1bnNpZ25lZCBzaG9ydCBzZWM7CisJdW5zaWduZWQgc2hvcnQgbXNlYzsKK307CisKKy8qIEFSQ1MgdmlydHVhbCBkaXJlbnRzLiAqLworc3RydWN0IGxpbnV4X3ZkaXJlbnQgeworCVVMT05HIG5hbWVsZW47CisJdW5zaWduZWQgY2hhciBhdHRyOworCWNoYXIgZm5hbWVbMzJdOyAvKiBYWFggaW1wZXJpY2FsLCBzaG91bGQgYmUgYSBkZWZpbmUgKi8KK307CisKKy8qIE90aGVyIHN0dWZmIGZvciBmaWxlcy4gKi8KK2VudW0gbGludXhfb21vZGUgeworCXJkb25seSwgd3Jvbmx5LCByZHdyLCB3cm9ubHlfY3JlYXQsIHJkd3JfY3JlYXQsCisJd3Jvbmx5X3NzZWRlLCByZHdyX3NzZWRlLCBkaXJlbnQsIGRpcmVudF9jcmVhdAorfTsKKworZW51bSBsaW51eF9zZWVrbW9kZSB7CisJYWJzb2x1dGUsIHJlbGF0aXZlCit9OworCitlbnVtIGxpbnV4X21vdW50b3BzIHsKKwltZWRpYV9sb2FkLCBtZWRpYV91bmxvYWQKK307CisKKy8qIFRoaXMgcHJvbSBoYXMgYSBib2xpeGVkIGRlc2lnbi4gKi8KK3N0cnVjdCBsaW51eF9iaWdpbnQgeworI2lmZGVmIF9fTUlQU0VMX18KKwl1MzIgbG87CisJczMyIGhpOworI2Vsc2UgLyogIShfX01JUFNFTF9fKSAqLworCXMzMiBoaTsKKwl1MzIgbG87CisjZW5kaWYKK307CisKK3N0cnVjdCBsaW51eF9maW5mbyB7CisJc3RydWN0IGxpbnV4X2JpZ2ludCAgIGJlZ2luOworCXN0cnVjdCBsaW51eF9iaWdpbnQgICBlbmQ7CisJc3RydWN0IGxpbnV4X2JpZ2ludCAgIGN1cjsKKwllbnVtIGxpbnV4X2RldnR5cGVzICAgZHR5cGU7CisJdW5zaWduZWQgbG9uZyAgICAgICAgIG5hbWVsZW47CisJdW5zaWduZWQgY2hhciAgICAgICAgIGF0dHI7CisJY2hhciAgICAgICAgICAgICAgICAgIG5hbWVbMzJdOyAvKiBYWFggaW1wZXJpY2FsLCBzaG91bGQgYmUgZGVmaW5lICovCit9OworCisvKiBUaGlzIGRlc2NyaWJlcyB0aGUgdmVjdG9yIGNvbnRhaW5pbmcgZnVuY3Rpb24gcG9pbnRlcnMgdG8gdGhlIEFSQworICAgZmlybXdhcmUgZnVuY3Rpb25zLiAgKi8KK3N0cnVjdCBsaW51eF9yb212ZWMgeworCUxPTkcJbG9hZDsJCQkvKiBMb2FkIGFuIGV4ZWN1dGFibGUgaW1hZ2UuICovCisJTE9ORwlpbnZva2U7CQkJLyogSW52b2tlIGEgc3RhbmRhbG9uZyBpbWFnZS4gKi8KKwlMT05HCWV4ZWM7CQkJLyogTG9hZCBhbmQgYmVnaW4gZXhlY3V0aW9uIG9mIGEKKwkJCQkJICAgc3RhbmRhbG9uZSBpbWFnZS4gKi8KKwlMT05HCWhhbHQ7CQkJLyogSGFsdCB0aGUgbWFjaGluZS4gKi8KKwlMT05HCXBkb3duOwkJCS8qIFBvd2VyIGRvd24gdGhlIG1hY2hpbmUuICovCisJTE9ORwlyZXN0YXJ0OwkJLyogWFhYIHNvZnQgcmVzZXQ/Pz8gKi8KKwlMT05HCXJlYm9vdDsJCQkvKiBSZWJvb3QgdGhlIG1hY2hpbmUuICovCisJTE9ORwlpbW9kZTsJCQkvKiBFbnRlciBQUk9NIGludGVyYWN0aXZlIG1vZGUuICovCisJTE9ORwlfdW51c2VkMTsJCS8qIFdhcyBSZXR1cm5Gcm9tTWFpbigpLiAqLworCisJLyogUFJPTSBkZXZpY2UgdHJlZSBpbnRlcmZhY2UuICovCisJTE9ORwluZXh0X2NvbXBvbmVudDsKKwlMT05HCWNoaWxkX2NvbXBvbmVudDsKKwlMT05HCXBhcmVudF9jb21wb25lbnQ7CisJTE9ORwljb21wb25lbnRfZGF0YTsKKwlMT05HCWNoaWxkX2FkZDsKKwlMT05HCWNvbXBfZGVsOworCUxPTkcJY29tcG9uZW50X2J5X3BhdGg7CisKKwkvKiBNaXNjLiBzdHVmZi4gKi8KKwlMT05HCWNmZ19zYXZlOworCUxPTkcJZ2V0X3N5c2lkOworCisJLyogUHJvYmluZyBmb3IgbWVtb3J5LiAqLworCUxPTkcJZ2V0X21kZXNjOworCUxPTkcJX3VudXNlZDI7CQkvKiB3YXMgU2lnbmFsKCkgKi8KKworCUxPTkcJZ2V0X3RpbmZvOworCUxPTkcJZ2V0X3J0aW1lOworCisJLyogRmlsZSB0eXBlIG9wZXJhdGlvbnMuICovCisJTE9ORwlnZXRfdmRpcmVudDsKKwlMT05HCW9wZW47CisJTE9ORwljbG9zZTsKKwlMT05HCXJlYWQ7CisJTE9ORwlnZXRfcnN0YXR1czsKKwlMT05HCXdyaXRlOworCUxPTkcJc2VlazsKKwlMT05HCW1vdW50OworCisJLyogRGVhbGluZyB3aXRoIGZpcm13YXJlIGVudmlyb25tZW50IHZhcmlhYmxlcy4gKi8KKwlMT05HCWdldF9ldmFyOworCUxPTkcJc2V0X2V2YXI7CisKKwlMT05HCWdldF9maW5mbzsKKwlMT05HCXNldF9maW5mbzsKKworCS8qIE1pc2NlbGxhbmVvdXMuICovCisJTE9ORwljYWNoZV9mbHVzaDsKKwlMT05HCVRlc3RVbmljb2RlQ2hhcmFjdGVyOwkJLyogQVJDOyBub3Qgc3VyZSBpZiBBUkNTIHRvbyAqLworCUxPTkcJR2V0RGlzcGxheVN0YXR1czsKK307CisKKy8qIFRoZSBTR0kgQVJDUyBwYXJhbWV0ZXIgYmxvY2sgaXMgaW4gYSBmaXhlZCBsb2NhdGlvbiBmb3Igc3RhbmRhbG9uZQorICogcHJvZ3JhbXMgdG8gYWNjZXNzIFBST00gZmFjaWxpdGllcyBlYXNpbHkuCisgKi8KK3R5cGVkZWYgc3RydWN0IF9TWVNURU1fUEFSQU1FVEVSX0JMT0NLIHsKKwlVTE9ORwkJCW1hZ2ljOwkJLyogbWFnaWMgY29va2llICovCisjZGVmaW5lIFBST01CTE9DS19NQUdJQyAgICAgIDB4NTM0MzUyNDEKKworCVVMT05HCQkJbGVuOwkJLyogbGVuZ3RoIG9mIHBhcm0gYmxvY2sgKi8KKwlVU0hPUlQJCQl2ZXI7CQkvKiBBUkNTIGZpcm13YXJlIHZlcnNpb24gKi8KKwlVU0hPUlQJCQlyZXY7CQkvKiBBUkNTIGZpcm13YXJlIHJldmlzaW9uICovCisJX1BMT05HCQkJcnNfYmxvY2s7CS8qIFJlc3RhcnQgYmxvY2suICovCisJX1BMT05HCQkJZGJnX2Jsb2NrOwkvKiBEZWJ1ZyBibG9jay4gKi8KKwlfUExPTkcJCQlnZXZlY3Q7CQkvKiBYWFggR2VuZXJhbCB2ZWN0b3I/Pz8gKi8KKwlfUExPTkcJCQl1dGxidmVjdDsJLyogWFhYIFVUTEIgdmVjdG9yPz8/ICovCisJVUxPTkcJCQlydmVjbGVuOwkvKiBTaXplIG9mIHJvbXZlYyBzdHJ1Y3QuICovCisJX1BWT0lECQkJcm9tdmVjOwkJLyogRnVuY3Rpb24gaW50ZXJmYWNlLiAqLworCVVMT05HCQkJcHZlY2xlbjsJLyogTGVuZ3RoIG9mIHByaXZhdGUgdmVjdG9yLiAqLworCV9QVk9JRAkJCXB2ZWN0b3I7CS8qIFByaXZhdGUgdmVjdG9yLiAqLworCVVMT05HCQkJYWRhcF9jbnQ7CS8qIEFkYXB0ZXIgY291bnQuICovCisJVUxPTkcJCQlhZGFwX3R5cDA7CS8qIEZpcnN0IGFkYXB0ZXIgdHlwZS4gKi8KKwlVTE9ORwkJCWFkYXBfdmNudDA7CS8qIEFkYXB0ZXIgMCB2ZWN0b3IgY291bnQuICovCisJX1BWT0lECQkJYWRhcF92ZWN0b3I7CS8qIEFkYXB0ZXIgMCB2ZWN0b3IgcHRyLiAqLworCVVMT05HCQkJYWRhcF90eXAxOwkvKiBTZWNvbmQgYWRhcHRlciB0eXBlLiAqLworCVVMT05HCQkJYWRhcF92Y250MTsJLyogQWRhcHRlciAxIHZlY3RvciBjb3VudC4gKi8KKwlfUFZPSUQJCQlhZGFwX3ZlY3RvcjE7CS8qIEFkYXB0ZXIgMSB2ZWN0b3IgcHRyLiAqLworCS8qIE1vcmUgYWRhcHRlciB2ZWN0b3JzIGdvIGhlcmUuLi4gKi8KK30gU1lTVEVNX1BBUkFNRVRFUl9CTE9DSywgKlBTWVNURU1fUEFSQU1FVEVSX0JMT0NLOworCisjZGVmaW5lIFBST01CTE9DSyAoKFBTWVNURU1fUEFSQU1FVEVSX0JMT0NLKSAoaW50KTB4QTAwMDEwMDApCisjZGVmaW5lIFJPTVZFQ1RPUiAoKHN0cnVjdCBsaW51eF9yb212ZWMgKikgKGxvbmcpKFBST01CTE9DSyktPnJvbXZlYykKKworLyogQ2FjaGUgbGF5b3V0IHBhcmFtZXRlciBibG9jay4gKi8KK3VuaW9uIGxpbnV4X2NhY2hlX2tleSB7CisJc3RydWN0IHBhcmFtIHsKKyNpZmRlZiBfX01JUFNFTF9fCisJCXVuc2lnbmVkIHNob3J0IHNpemU7CisJCXVuc2lnbmVkIGNoYXIgbHNpemU7CisJCXVuc2lnbmVkIGNoYXIgYnNpemU7CisjZWxzZSAvKiAhKF9fTUlQU0VMX18pICovCisJCXVuc2lnbmVkIGNoYXIgYnNpemU7CisJCXVuc2lnbmVkIGNoYXIgbHNpemU7CisJCXVuc2lnbmVkIHNob3J0IHNpemU7CisjZW5kaWYKKwl9IGluZm87CisJdW5zaWduZWQgbG9uZyBhbGxpbmZvOworfTsKKworLyogQ29uZmlndXJhdGlvbiBkYXRhLiAqLworc3RydWN0IGxpbnV4X2NkYXRhIHsKKwljaGFyICpuYW1lOworCWludCBtbGVuOworCWVudW0gbGludXhfZGV2dHlwZXMgdHlwZTsKK307CisKKy8qIENvbW1vbiBTR0kgQVJDUyBmaXJtd2FyZSBmaWxlIGRlc2NyaXB0b3JzLiAqLworI2RlZmluZSBTR0lQUk9NX1NURElOICAgICAwCisjZGVmaW5lIFNHSVBST01fU1RET1VUICAgIDEKKworLyogQ29tbW9uIFNHSSBBUkNTIGZpcm13YXJlIGZpbGUgdHlwZXMuICovCisjZGVmaW5lIFNHSVBST01fUk9GSUxFICAgIDB4MDEgIC8qIHJlYWQtb25seSBmaWxlICovCisjZGVmaW5lIFNHSVBST01fSEZJTEUgICAgIDB4MDIgIC8qIGhpZGRlbiBmaWxlICovCisjZGVmaW5lIFNHSVBST01fU0ZJTEUgICAgIDB4MDQgIC8qIFN5c3RlbSBmaWxlICovCisjZGVmaW5lIFNHSVBST01fQUZJTEUgICAgIDB4MDggIC8qIEFyY2hpdmUgZmlsZSAqLworI2RlZmluZSBTR0lQUk9NX0RGSUxFICAgICAweDEwICAvKiBEaXJlY3RvcnkgZmlsZSAqLworI2RlZmluZSBTR0lQUk9NX0RFTEZJTEUgICAweDIwICAvKiBEZWxldGVkIGZpbGUgKi8KKworLyogU0dJIEFSQ1MgYm9vdCByZWNvcmQgaW5mb3JtYXRpb24uICovCitzdHJ1Y3Qgc2dpX3BhcnRpdGlvbiB7CisJdW5zaWduZWQgY2hhciBmbGFnOworI2RlZmluZSBTR0lQQVJUX1VOVVNFRCAweDAwCisjZGVmaW5lIFNHSVBBUlRfQUNUSVZFIDB4ODAKKworCXVuc2lnbmVkIGNoYXIgc2hlYWQsIHNzZWN0LCBzY3lsOyAvKiB1bnVzZWQgKi8KKwl1bnNpZ25lZCBjaGFyIHN5c3R5cGU7IC8qIE9TIHR5cGUsIElyaXggb3IgTlQgKi8KKwl1bnNpZ25lZCBjaGFyIGVoZWFkLCBlc2VjdCwgZWN5bDsgLyogdW51c2VkICovCisJdW5zaWduZWQgY2hhciByc2VjdDAsIHJzZWN0MSwgcnNlY3QyLCByc2VjdDM7CisJdW5zaWduZWQgY2hhciB0c2VjdDAsIHRzZWN0MSwgdHNlY3QyLCB0c2VjdDM7Cit9OworCisjZGVmaW5lIFNHSUJCTE9DS19NQUdJQyAgIDB4YWE1NQorI2RlZmluZSBTR0lCQkxPQ0tfTUFYUEFSVCAweDAwMDQKKworc3RydWN0IHNnaV9ib290YmxvY2sgeworCXVuc2lnbmVkIGNoYXIgX3VudXNlZFs0NDZdOworCXN0cnVjdCBzZ2lfcGFydGl0aW9uIHBhcnRpdGlvbnNbU0dJQkJMT0NLX01BWFBBUlRdOworCXVuc2lnbmVkIHNob3J0IG1hZ2ljOworfTsKKworLyogQklPUyBwYXJhbWV0ZXIgYmxvY2suICovCitzdHJ1Y3Qgc2dpX2JwYXJtX2Jsb2NrIHsKKwl1bnNpZ25lZCBzaG9ydCBieXRlc19zZWN0OyAgICAvKiBieXRlcyBwZXIgc2VjdG9yICovCisJdW5zaWduZWQgY2hhciAgc2VjdF9jbHVzdDsgICAgLyogc2VjdG9ycyBwZXIgY2x1c3RlciAqLworCXVuc2lnbmVkIHNob3J0IHNlY3RfcmVzdjsgICAgIC8qIHJlc2VydmVkIHNlY3RvcnMgKi8KKwl1bnNpZ25lZCBjaGFyICBuZmF0czsgICAgICAgICAvKiAjIG9mIGFsbG9jYXRpb24gdGFibGVzICovCisJdW5zaWduZWQgc2hvcnQgbnJvb3RfZGlyZW50czsgLyogIyBvZiByb290IGRpcmVjdG9yeSBlbnRyaWVzICovCisJdW5zaWduZWQgc2hvcnQgc2VjdF92b2x1bWU7ICAgLyogc2VjdG9ycyBpbiB2b2x1bWUgKi8KKwl1bnNpZ25lZCBjaGFyICBtZWRpYV90eXBlOyAgICAvKiBtZWRpYSBkZXNjcmlwdG9yICovCisJdW5zaWduZWQgc2hvcnQgc2VjdF9mYXQ7ICAgICAgLyogc2VjdG9ycyBwZXIgYWxsb2NhdGlvbiB0YWJsZSAqLworCXVuc2lnbmVkIHNob3J0IHNlY3RfdHJhY2s7ICAgIC8qIHNlY3RvcnMgcGVyIHRyYWNrICovCisJdW5zaWduZWQgc2hvcnQgbmhlYWRzOyAgICAgICAgLyogIyBvZiBoZWFkcyAqLworCXVuc2lnbmVkIHNob3J0IG5oc2VjdHM7ICAgICAgIC8qICMgb2YgaGlkZGVuIHNlY3RvcnMgKi8KK307CisKK3N0cnVjdCBzZ2lfYnNlY3RvciB7CisJdW5zaWduZWQgY2hhciAgIGptcGluZm9bM107CisJdW5zaWduZWQgY2hhciAgIG1hbnVmX25hbWVbOF07CisJc3RydWN0IHNnaV9icGFybV9ibG9jayBpbmZvOworfTsKKworLyogRGVidWdnaW5nIGJsb2NrIHVzZWQgd2l0aCBTR0kgc3ltbW9uIHN5bWJvbGljIGRlYnVnZ2VyLiAqLworI2RlZmluZSBTTUJfREVCVUdfTUFHSUMgICAweGZlZWRkZWFkCitzdHJ1Y3QgbGludXhfc21vbmJsb2NrIHsKKwl1bnNpZ25lZCBsb25nICAgbWFnaWM7CisJdm9pZCAgICAgICAgICAgICgqaGFuZGxlcikodm9pZCk7ICAvKiBCcmVha3BvaW50IHJvdXRpbmUuICovCisJdW5zaWduZWQgbG9uZyAgIGR0YWJsZV9iYXNlOyAgICAgICAvKiBCYXNlIGFkZHIgb2YgZGJnIHRhYmxlLiAqLworCWludCAgICAgICAgICAgICAoKnByaW50ZikoY29uc3QgY2hhciAqZm10LCAuLi4pOworCXVuc2lnbmVkIGxvbmcgICBidGFibGVfYmFzZTsgICAgICAgLyogQnJlYWtwb2ludCB0YWJsZS4gKi8KKwl1bnNpZ25lZCBsb25nICAgbXBmbHVzaHJlcXM7ICAgICAgIC8qIFNNUCBjYWNoZSBmbHVzaCByZXF1ZXN0IGxpc3QuICovCisJdW5zaWduZWQgbG9uZyAgIG50YWI7ICAgICAgICAgICAgICAvKiBOYW1lIHRhYmxlLiAqLworCXVuc2lnbmVkIGxvbmcgICBzdGFiOyAgICAgICAgICAgICAgLyogU3ltYm9sIHRhYmxlLiAqLworCWludCAgICAgICAgICAgICBzbWF4OyAgICAgICAgICAgICAgLyogTWF4ICMgb2Ygc3ltYm9scy4gKi8KK307CisKKy8qCisgKiBNYWNyb3MgZm9yIGNhbGxpbmcgYSAzMi1iaXQgQVJDIGltcGxlbWVudGF0aW9uIGZyb20gNjQtYml0IGNvZGUKKyAqLworCisjaWYgZGVmaW5lZChDT05GSUdfTUlQUzY0KSAmJiBkZWZpbmVkKENPTkZJR19BUkMzMikKKworI2RlZmluZSBfX2FyY19jbG9iYmVycwkJCQkJCQlcCisJIiQyIiwiJDMiIC8qIC4uLiAqLywgIiQ4IiwiJDkiLCIkMTAiLCIkMTEiLAkJCVwKKwkiJDEyIiwiJDEzIiwiJDE0IiwiJDE1IiwiJDE2IiwiJDI0IiwiJDI1IiwiJDMxIgorCisjZGVmaW5lIEFSQ19DQUxMMChkZXN0KQkJCQkJCQlcCisoewlsb25nIF9fcmVzOwkJCQkJCQlcCisJbG9uZyBfX3ZlYyA9IChsb25nKSByb212ZWMtPmRlc3Q7CQkJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQlcCisJImRzdWJ1XHQkMjksIDMyXG5cdCIJCQkJCQlcCisJImphbHJcdCUxXG5cdCIJCQkJCQkJXAorCSJkYWRkdVx0JDI5LCAzMlxuXHQiCQkJCQkJXAorCSJtb3ZlXHQlMCwgJDIiCQkJCQkJCVwKKwk6ICI9ciIgKF9fcmVzKSwgIj1yIiAoX192ZWMpCQkJCQlcCisJOiAiMSIgKF9fdmVjKQkJCQkJCQlcCisJOiBfX2FyY19jbG9iYmVycywgIiQ0IiwiJDUiLCIkNiIsIiQ3Iik7CQkJCVwKKwkodW5zaWduZWQgbG9uZykgX19yZXM7CQkJCQkJXAorfSkKKworI2RlZmluZSBBUkNfQ0FMTDEoZGVzdCxhMSkJCQkJCQlcCisoewlsb25nIF9fcmVzOwkJCQkJCQlcCisJcmVnaXN0ZXIgc2lnbmVkIGludCBfX2ExIF9fYXNtX18oIiQ0IikgPSAoaW50KSAobG9uZykgKGExKTsJXAorCWxvbmcgX192ZWMgPSAobG9uZykgcm9tdmVjLT5kZXN0OwkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAorCSJkc3VidVx0JDI5LCAzMlxuXHQiCQkJCQkJXAorCSJqYWxyXHQlMVxuXHQiCQkJCQkJCVwKKwkiZGFkZHVcdCQyOSwgMzJcblx0IgkJCQkJCVwKKwkibW92ZVx0JTAsICQyIgkJCQkJCQlcCisJOiAiPXIiIChfX3JlcyksICI9ciIgKF9fdmVjKQkJCQkJXAorCTogIjEiIChfX3ZlYyksICJyIiAoX19hMSkJCQkJCVwKKwk6IF9fYXJjX2Nsb2JiZXJzLCAiJDUiLCIkNiIsIiQ3Iik7CQkJCVwKKwkodW5zaWduZWQgbG9uZykgX19yZXM7CQkJCQkJXAorfSkKKworI2RlZmluZSBBUkNfQ0FMTDIoZGVzdCxhMSxhMikJCQkJCQlcCisoewlsb25nIF9fcmVzOwkJCQkJCQlcCisJcmVnaXN0ZXIgc2lnbmVkIGludCBfX2ExIF9fYXNtX18oIiQ0IikgPSAoaW50KSAobG9uZykgKGExKTsJXAorCXJlZ2lzdGVyIHNpZ25lZCBpbnQgX19hMiBfX2FzbV9fKCIkNSIpID0gKGludCkgKGxvbmcpIChhMik7CVwKKwlsb25nIF9fdmVjID0gKGxvbmcpIHJvbXZlYy0+ZGVzdDsJCQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCVwKKwkiZHN1YnVcdCQyOSwgMzJcblx0IgkJCQkJCVwKKwkiamFsclx0JTFcblx0IgkJCQkJCQlcCisJImRhZGR1XHQkMjksIDMyXG5cdCIJCQkJCQlcCisJIm1vdmVcdCUwLCAkMiIJCQkJCQkJXAorCTogIj1yIiAoX19yZXMpLCAiPXIiIChfX3ZlYykJCQkJCVwKKwk6ICIxIiAoX192ZWMpLCAiciIgKF9fYTEpLCAiciIgKF9fYTIpCQkJCVwKKwk6IF9fYXJjX2Nsb2JiZXJzLCAiJDYiLCIkNyIpOwkJCQkJXAorCV9fcmVzOwkJCQkJCQkJXAorfSkKKworI2RlZmluZSBBUkNfQ0FMTDMoZGVzdCxhMSxhMixhMykJCQkJCVwKKyh7CWxvbmcgX19yZXM7CQkJCQkJCVwKKwlyZWdpc3RlciBzaWduZWQgaW50IF9fYTEgX19hc21fXygiJDQiKSA9IChpbnQpIChsb25nKSAoYTEpOwlcCisJcmVnaXN0ZXIgc2lnbmVkIGludCBfX2EyIF9fYXNtX18oIiQ1IikgPSAoaW50KSAobG9uZykgKGEyKTsJXAorCXJlZ2lzdGVyIHNpZ25lZCBpbnQgX19hMyBfX2FzbV9fKCIkNiIpID0gKGludCkgKGxvbmcpIChhMyk7CVwKKwlsb25nIF9fdmVjID0gKGxvbmcpIHJvbXZlYy0+ZGVzdDsJCQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCVwKKwkiZHN1YnVcdCQyOSwgMzJcblx0IgkJCQkJCVwKKwkiamFsclx0JTFcblx0IgkJCQkJCQlcCisJImRhZGR1XHQkMjksIDMyXG5cdCIJCQkJCQlcCisJIm1vdmVcdCUwLCAkMiIJCQkJCQkJXAorCTogIj1yIiAoX19yZXMpLCAiPXIiIChfX3ZlYykJCQkJCVwKKwk6ICIxIiAoX192ZWMpLCAiciIgKF9fYTEpLCAiciIgKF9fYTIpLCAiciIgKF9fYTMpCQlcCisJOiBfX2FyY19jbG9iYmVycywgIiQ3Iik7CQkJCQlcCisJX19yZXM7CQkJCQkJCQlcCit9KQorCisjZGVmaW5lIEFSQ19DQUxMNChkZXN0LGExLGEyLGEzLGE0KQkJCQkJXAorKHsJbG9uZyBfX3JlczsJCQkJCQkJXAorCXJlZ2lzdGVyIHNpZ25lZCBpbnQgX19hMSBfX2FzbV9fKCIkNCIpID0gKGludCkgKGxvbmcpIChhMSk7CVwKKwlyZWdpc3RlciBzaWduZWQgaW50IF9fYTIgX19hc21fXygiJDUiKSA9IChpbnQpIChsb25nKSAoYTIpOwlcCisJcmVnaXN0ZXIgc2lnbmVkIGludCBfX2EzIF9fYXNtX18oIiQ2IikgPSAoaW50KSAobG9uZykgKGEzKTsJXAorCXJlZ2lzdGVyIHNpZ25lZCBpbnQgX19hNCBfX2FzbV9fKCIkNyIpID0gKGludCkgKGxvbmcpIChhNCk7CVwKKwlsb25nIF9fdmVjID0gKGxvbmcpIHJvbXZlYy0+ZGVzdDsJCQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCVwKKwkiZHN1YnVcdCQyOSwgMzJcblx0IgkJCQkJCVwKKwkiamFsclx0JTFcblx0IgkJCQkJCQlcCisJImRhZGR1XHQkMjksIDMyXG5cdCIJCQkJCQlcCisJIm1vdmVcdCUwLCAkMiIJCQkJCQkJXAorCTogIj1yIiAoX19yZXMpLCAiPXIiIChfX3ZlYykJCQkJCVwKKwk6ICIxIiAoX192ZWMpLCAiciIgKF9fYTEpLCAiciIgKF9fYTIpLCAiciIgKF9fYTMpLCAJCVwKKwkgICJyIiAoX19hNCkJCQkJCQkJXAorCTogX19hcmNfY2xvYmJlcnMpOwkJCQkJCVwKKwlfX3JlczsJCQkJCQkJCVwKK30pCisKKyNkZWZpbmUgQVJDX0NBTEw1KGRlc3QsYTEsYTIsYTMsYTQsYTUpCQkJCQlcCisoewlsb25nIF9fcmVzOwkJCQkJCQlcCisJcmVnaXN0ZXIgc2lnbmVkIGludCBfX2ExIF9fYXNtX18oIiQ0IikgPSAoaW50KSAobG9uZykgKGExKTsJXAorCXJlZ2lzdGVyIHNpZ25lZCBpbnQgX19hMiBfX2FzbV9fKCIkNSIpID0gKGludCkgKGxvbmcpIChhMik7CVwKKwlyZWdpc3RlciBzaWduZWQgaW50IF9fYTMgX19hc21fXygiJDYiKSA9IChpbnQpIChsb25nKSAoYTMpOwlcCisJcmVnaXN0ZXIgc2lnbmVkIGludCBfX2E0IF9fYXNtX18oIiQ3IikgPSAoaW50KSAobG9uZykgKGE0KTsJXAorCXJlZ2lzdGVyIHNpZ25lZCBpbnQgX19hNSA9IChhNSk7CQkJCVwKKwlsb25nIF9fdmVjID0gKGxvbmcpIHJvbXZlYy0+ZGVzdDsJCQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCVwKKwkiZHN1YnVcdCQyOSwgMzJcblx0IgkJCQkJCVwKKwkic3dcdCU3LCAxNigkMjkpXG5cdCIJCQkJCQlcCisJImphbHJcdCUxXG5cdCIJCQkJCQkJXAorCSJkYWRkdVx0JDI5LCAzMlxuXHQiCQkJCQkJXAorCSJtb3ZlXHQlMCwgJDIiCQkJCQkJCVwKKwk6ICI9ciIgKF9fcmVzKSwgIj1yIiAoX192ZWMpCQkJCQlcCisJOiAiMSIgKF9fdmVjKSwJCQkJCQkJXAorCSAgInIiIChfX2ExKSwgInIiIChfX2EyKSwgInIiIChfX2EzKSwgInIiIChfX2E0KSwJCVwKKwkgICJyIiAoX19hNSkJCQkJCQkJXAorCTogX19hcmNfY2xvYmJlcnMpOwkJCQkJCVwKKwlfX3JlczsJCQkJCQkJCVwKK30pCisKKyNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19NSVBTNjQpICYmIGRlZmluZWQoQ09ORklHX0FSQzMyKSAqLworCisjaWYgKGRlZmluZWQoQ09ORklHX01JUFMzMikgJiYgZGVmaW5lZChDT05GSUdfQVJDMzIpKSB8fAkJXAorICAgIChkZWZpbmVkKENPTkZJR19NSVBTNjQpICYmIGRlZmluZWQoQ09ORklHX0FSQzY0KSkKKworI2RlZmluZSBBUkNfQ0FMTDAoZGVzdCkJCQkJCQkJXAorKHsJbG9uZyBfX3JlczsJCQkJCQkJXAorCWxvbmcgKCpfX3ZlYykodm9pZCkgPSAodm9pZCAqKSByb212ZWMtPmRlc3Q7CQkJXAorCQkJCQkJCQkJXAorCV9fcmVzID0gX192ZWMoKTsJCQkJCQlcCisJX19yZXM7CQkJCQkJCQlcCit9KQorCisjZGVmaW5lIEFSQ19DQUxMMShkZXN0LGExKQkJCQkJCVwKKyh7CWxvbmcgX19yZXM7CQkJCQkJCVwKKwlsb25nIF9fYTEgPSAobG9uZykgKGExKTsJCQkJCVwKKwlsb25nICgqX192ZWMpKGxvbmcpID0gKHZvaWQgKikgcm9tdmVjLT5kZXN0OwkJCVwKKwkJCQkJCQkJCVwKKwlfX3JlcyA9IF9fdmVjKF9fYTEpOwkJCQkJCVwKKwlfX3JlczsJCQkJCQkJCVwKK30pCisKKyNkZWZpbmUgQVJDX0NBTEwyKGRlc3QsYTEsYTIpCQkJCQkJXAorKHsJbG9uZyBfX3JlczsJCQkJCQkJXAorCWxvbmcgX19hMSA9IChsb25nKSAoYTEpOwkJCQkJXAorCWxvbmcgX19hMiA9IChsb25nKSAoYTIpOwkJCQkJXAorCWxvbmcgKCpfX3ZlYykobG9uZywgbG9uZykgPSAodm9pZCAqKSByb212ZWMtPmRlc3Q7CQlcCisJCQkJCQkJCQlcCisJX19yZXMgPSBfX3ZlYyhfX2ExLCBfX2EyKTsJCQkJCVwKKwlfX3JlczsJCQkJCQkJCVwKK30pCisKKyNkZWZpbmUgQVJDX0NBTEwzKGRlc3QsYTEsYTIsYTMpCQkJCQlcCisoewlsb25nIF9fcmVzOwkJCQkJCQlcCisJbG9uZyBfX2ExID0gKGxvbmcpIChhMSk7CQkJCQlcCisJbG9uZyBfX2EyID0gKGxvbmcpIChhMik7CQkJCQlcCisJbG9uZyBfX2EzID0gKGxvbmcpIChhMyk7CQkJCQlcCisJbG9uZyAoKl9fdmVjKShsb25nLCBsb25nLCBsb25nKQk9ICh2b2lkICopIHJvbXZlYy0+ZGVzdDsJXAorCQkJCQkJCQkJXAorCV9fcmVzID0gX192ZWMoX19hMSwgX19hMiwgX19hMyk7CQkJCVwKKwlfX3JlczsJCQkJCQkJCVwKK30pCisKKyNkZWZpbmUgQVJDX0NBTEw0KGRlc3QsYTEsYTIsYTMsYTQpCQkJCQlcCisoewlsb25nIF9fcmVzOwkJCQkJCQlcCisJbG9uZyBfX2ExID0gKGxvbmcpIChhMSk7CQkJCQlcCisJbG9uZyBfX2EyID0gKGxvbmcpIChhMik7CQkJCQlcCisJbG9uZyBfX2EzID0gKGxvbmcpIChhMyk7CQkJCQlcCisJbG9uZyBfX2E0ID0gKGxvbmcpIChhNCk7CQkJCQlcCisJbG9uZyAoKl9fdmVjKShsb25nLCBsb25nLCBsb25nLCBsb25nKSA9ICh2b2lkICopIHJvbXZlYy0+ZGVzdDsJXAorCQkJCQkJCQkJXAorCV9fcmVzID0gX192ZWMoX19hMSwgX19hMiwgX19hMywgX19hNCk7CQkJCVwKKwlfX3JlczsJCQkJCQkJCVwKK30pCisKKyNkZWZpbmUgQVJDX0NBTEw1KGRlc3QsYTEsYTIsYTMsYTQsYTUpCQkJCQlcCisoewlsb25nIF9fcmVzOwkJCQkJCQlcCisJbG9uZyBfX2ExID0gKGxvbmcpIChhMSk7CQkJCQlcCisJbG9uZyBfX2EyID0gKGxvbmcpIChhMik7CQkJCQlcCisJbG9uZyBfX2EzID0gKGxvbmcpIChhMyk7CQkJCQlcCisJbG9uZyBfX2E0ID0gKGxvbmcpIChhNCk7CQkJCQlcCisJbG9uZyBfX2E1ID0gKGxvbmcpIChhNSk7CQkJCQlcCisJbG9uZyAoKl9fdmVjKShsb25nLCBsb25nLCBsb25nLCBsb25nLCBsb25nKTsJCQlcCisJX192ZWMgPSAodm9pZCAqKSByb212ZWMtPmRlc3Q7CQkJCQlcCisJCQkJCQkJCQlcCisJX19yZXMgPSBfX3ZlYyhfX2ExLCBfX2EyLCBfX2EzLCBfX2E0LCBfX2E1KTsJCQlcCisJX19yZXM7CQkJCQkJCQlcCit9KQorI2VuZGlmIC8qIGJvdGgga2VybmVsIGFuZCBBUkMgZWl0aGVyIDMyLWJpdCBvciA2NC1iaXQgKi8KKworI2VuZGlmIC8qIF9BU01fU0dJQVJDU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NnaWRlZnMuaCBiL2luY2x1ZGUvYXNtLW1pcHMvc2dpZGVmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3NjQ0MmYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NnaWRlZnMuaApAQCAtMCwwICsxLDQ0IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk5LCAyMDAxIFJhbGYgQmFlY2hsZQorICogQ29weXJpZ2h0IChDKSAxOTk5IFNpbGljb24gR3JhcGhpY3MsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMSBNSVBTIFRlY2hub2xvZ2llcywgSW5jLgorICovCisjaWZuZGVmIF9fQVNNX1NHSURFRlNfSAorI2RlZmluZSBfX0FTTV9TR0lERUZTX0gKKworLyoKKyAqIFVzaW5nIGEgTGludXggY29tcGlsZXIgZm9yIGJ1aWxkaW5nIExpbnV4IHNlZW1zIGxvZ2ljIGJ1dCBub3QgdG8KKyAqIGV2ZXJ5Ym9keS4KKyAqLworI2lmbmRlZiBfX2xpbnV4X18KKyNlcnJvciBVc2UgYSBMaW51eCBjb21waWxlciBvciBnaXZlIHVwLgorI2VuZGlmCisKKy8qCisgKiBEZWZpbml0aW9ucyBmb3IgdGhlIElTQSBsZXZlbHMKKyAqCisgKiBXaXRoIHRoZSBpbnRyb2R1Y3Rpb24gb2YgTUlQUzMyIC8gTUlQUzY0IGluc3RydWN0aW9uIHNldHMgZGVmaW5pdGlvbnMKKyAqIE1JUFMgSVNBcyBhcmUgbm8gbG9uZ2VyIHN1YnNldHMgb2YgZWFjaCBvdGhlci4gIFRoZXJlZm9yZSBjb21wYXJpc29ucworICogb24gdGhlc2Ugc3ltYm9scyBleGNlcHQgd2l0aCA9PSBtYXkgcmVzdWx0IGluIHVuZXhwZWN0ZWQgcmVzdWx0cyBhbmQKKyAqIGFyZSBmb3JiaWRkZW4hCisgKi8KKyNkZWZpbmUgX01JUFNfSVNBX01JUFMxCQkxCisjZGVmaW5lIF9NSVBTX0lTQV9NSVBTMgkJMgorI2RlZmluZSBfTUlQU19JU0FfTUlQUzMJCTMKKyNkZWZpbmUgX01JUFNfSVNBX01JUFM0CQk0CisjZGVmaW5lIF9NSVBTX0lTQV9NSVBTNQkJNQorI2RlZmluZSBfTUlQU19JU0FfTUlQUzMyCTYKKyNkZWZpbmUgX01JUFNfSVNBX01JUFM2NAk3CisKKy8qCisgKiBTdWJwcm9ncmFtIGNhbGxpbmcgY29udmVudGlvbgorICovCisjZGVmaW5lIF9NSVBTX1NJTV9BQkkzMgkJMQorI2RlZmluZSBfTUlQU19TSU1fTkFCSTMyCTIKKyNkZWZpbmUgX01JUFNfU0lNX0FCSTY0CQkzCisKKyNlbmRpZiAvKiBfX0FTTV9TR0lERUZTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc2htYnVmLmggYi9pbmNsdWRlL2FzbS1taXBzL3NobWJ1Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5OTQ0MzgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NobWJ1Zi5oCkBAIC0wLDAgKzEsMzggQEAKKyNpZm5kZWYgX0FTTV9TSE1CVUZfSAorI2RlZmluZSBfQVNNX1NITUJVRl9ICisKKy8qCisgKiBUaGUgc2htaWQ2NF9kcyBzdHJ1Y3R1cmUgZm9yIHRoZSBNSVBTIGFyY2hpdGVjdHVyZS4KKyAqIE5vdGUgZXh0cmEgcGFkZGluZyBiZWNhdXNlIHRoaXMgc3RydWN0dXJlIGlzIHBhc3NlZCBiYWNrIGFuZCBmb3J0aAorICogYmV0d2VlbiBrZXJuZWwgYW5kIHVzZXIgc3BhY2UuCisgKgorICogUGFkIHNwYWNlIGlzIGxlZnQgZm9yOgorICogLSAyIG1pc2NlbGxhbmVvdXMgMzItYml0IHJzcC4gNjQtYml0IHZhbHVlcworICovCisKK3N0cnVjdCBzaG1pZDY0X2RzIHsKKwlzdHJ1Y3QgaXBjNjRfcGVybQlzaG1fcGVybTsJLyogb3BlcmF0aW9uIHBlcm1zICovCisJc2l6ZV90CQkJc2htX3NlZ3N6OwkvKiBzaXplIG9mIHNlZ21lbnQgKGJ5dGVzKSAqLworCV9fa2VybmVsX3RpbWVfdAkJc2htX2F0aW1lOwkvKiBsYXN0IGF0dGFjaCB0aW1lICovCisJX19rZXJuZWxfdGltZV90CQlzaG1fZHRpbWU7CS8qIGxhc3QgZGV0YWNoIHRpbWUgKi8KKwlfX2tlcm5lbF90aW1lX3QJCXNobV9jdGltZTsJLyogbGFzdCBjaGFuZ2UgdGltZSAqLworCV9fa2VybmVsX3BpZF90CQlzaG1fY3BpZDsJLyogcGlkIG9mIGNyZWF0b3IgKi8KKwlfX2tlcm5lbF9waWRfdAkJc2htX2xwaWQ7CS8qIHBpZCBvZiBsYXN0IG9wZXJhdG9yICovCisJdW5zaWduZWQgbG9uZwkJc2htX25hdHRjaDsJLyogbm8uIG9mIGN1cnJlbnQgYXR0YWNoZXMgKi8KKwl1bnNpZ25lZCBsb25nCQlfX3VudXNlZDE7CisJdW5zaWduZWQgbG9uZwkJX191bnVzZWQyOworfTsKKworc3RydWN0IHNobWluZm82NCB7CisJdW5zaWduZWQgbG9uZwlzaG1tYXg7CisJdW5zaWduZWQgbG9uZwlzaG1taW47CisJdW5zaWduZWQgbG9uZwlzaG1tbmk7CisJdW5zaWduZWQgbG9uZwlzaG1zZWc7CisJdW5zaWduZWQgbG9uZwlzaG1hbGw7CisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDE7CisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDI7CisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDM7CisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDQ7Cit9OworCisjZW5kaWYgLyogX0FTTV9TSE1CVUZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zaG1wYXJhbS5oIGIvaW5jbHVkZS9hc20tbWlwcy9zaG1wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5MjkwNzIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NobXBhcmFtLmgKQEAgLTAsMCArMSwxMyBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9BU01fU0hNUEFSQU1fSAorI2RlZmluZSBfQVNNX1NITVBBUkFNX0gKKworI2RlZmluZSBfX0FSQ0hfRk9SQ0VfU0hNTEJBCTEKKworI2RlZmluZQlTSE1MQkEgMHg0MDAwMAkJCS8qIGF0dGFjaCBhZGRyIGEgbXVsdGlwbGUgb2YgdGhpcyAqLworCisjZW5kaWYgLyogX0FTTV9TSE1QQVJBTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NpYnl0ZS9ib2FyZC5oIGIvaW5jbHVkZS9hc20tbWlwcy9zaWJ5dGUvYm9hcmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2IxMWI2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zaWJ5dGUvYm9hcmQuaApAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzIEJyb2FkY29tIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiBfU0lCWVRFX0JPQVJEX0gKKyNkZWZpbmUgX1NJQllURV9CT0FSRF9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2lmZGVmIENPTkZJR19TSUJZVEVfQk9BUkQKKworI2lmIGRlZmluZWQoQ09ORklHX1NJQllURV9TV0FSTSkgfHwgZGVmaW5lZChDT05GSUdfU0lCWVRFX1BUU1dBUk0pIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19TSUJZVEVfQ1JIT05FKSB8fCBkZWZpbmVkKENPTkZJR19TSUJZVEVfQ1JISU5FKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfU0lCWVRFX0xJVFRMRVNVUikKKyNpbmNsdWRlIDxhc20vc2lieXRlL3N3YXJtLmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX1NJQllURV9TRU5UT1NBKSB8fCBkZWZpbmVkKENPTkZJR19TSUJZVEVfUkhPTkUpCisjaW5jbHVkZSA8YXNtL3NpYnl0ZS9zZW50b3NhLmg+CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19TSUJZVEVfQ0FSTUVMCisjaW5jbHVkZSA8YXNtL3NpYnl0ZS9jYXJtZWwuaD4KKyNlbmRpZgorCisjaWZkZWYgX19BU1NFTUJMWV9fCisKKyNpZmRlZiBMRURTX1BIWVMKKyNkZWZpbmUgc2V0bGVkcyh0MCx0MSxjMCxjMSxjMixjMykgXAorCWxpCXQwLCAoTEVEU19QSFlTfDB4YTAwMDAwMDApOyBcCisJbGkJdDEsIGMwOyBcCisJc2IJdDEsIDB4MTgodDApOyBcCisJbGkJdDEsIGMxOyBcCisJc2IJdDEsIDB4MTAodDApOyBcCisJbGkJdDEsIGMyOyBcCisJc2IJdDEsIDB4MDgodDApOyBcCisJbGkJdDEsIGMzOyBcCisJc2IJdDEsIDB4MDAodDApCisjZWxzZQorI2RlZmluZSBzZXRsZWRzKHQwLHQxLGMwLGMxLGMyLGMzKQorI2VuZGlmIC8qIExFRFNfUEhZUyAqLworCisjZWxzZQorCisjaWZkZWYgTEVEU19QSFlTCitleHRlcm4gdm9pZCBzZXRsZWRzKGNoYXIgKnN0cik7CisjZWxzZQorI2RlZmluZSBzZXRsZWRzKHMpIGRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZiAvKiBMRURTX1BIWVMgKi8KKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYgLyogQ09ORklHX1NJQllURV9CT0FSRCAqLworCisjZW5kaWYgLyogX1NJQllURV9CT0FSRF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NpYnl0ZS9jYXJtZWwuaCBiL2luY2x1ZGUvYXNtLW1pcHMvc2lieXRlL2Nhcm1lbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhYzVkYTEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NpYnl0ZS9jYXJtZWwuaApAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAyIEJyb2FkY29tIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuCisgKi8KKyNpZm5kZWYgX19BU01fU0lCWVRFX0NBUk1FTF9ICisjZGVmaW5lIF9fQVNNX1NJQllURV9DQVJNRUxfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpbmNsdWRlIDxhc20vc2lieXRlL3NiMTI1MC5oPgorI2luY2x1ZGUgPGFzbS9zaWJ5dGUvc2IxMjUwX2ludC5oPgorCisjZGVmaW5lIFNJQllURV9CT0FSRF9OQU1FICJDYXJtZWwiCisKKyNkZWZpbmUgR1BJT19QSFlfSU5URVJSVVBUICAgICAgMiAKKyNkZWZpbmUgR1BJT19OT05NQVNLQUJMRV9JTlQgICAgMyAKKyNkZWZpbmUgR1BJT19DRl9JTlNFUlRFRCAgICAgICAgNiAKKyNkZWZpbmUgR1BJT19NT05URVJFWV9SRVNFVCAgICAgNyAKKyNkZWZpbmUgR1BJT19RVUFEVUFSVF9JTlQgICAgICAgOCAKKyNkZWZpbmUgR1BJT19DRl9JTlQgICAgICAgICAgICAgOSAKKyNkZWZpbmUgR1BJT19GUEdBX0NDTEsgICAgICAgICAgMTAKKyNkZWZpbmUgR1BJT19GUEdBX0RPVVQgICAgICAgICAgMTEKKyNkZWZpbmUgR1BJT19GUEdBX0RJTiAgICAgICAgICAgMTIKKyNkZWZpbmUgR1BJT19GUEdBX1BHTSAgICAgICAgICAgMTMKKyNkZWZpbmUgR1BJT19GUEdBX0RPTkUgICAgICAgICAgMTQKKyNkZWZpbmUgR1BJT19GUEdBX0lOSVQgICAgICAgICAgMTUKKworI2RlZmluZSBMRURTX0NTICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIExFRFNfUEhZUyAgICAgICAgICAgICAgIDB4MTAwQzAwMDAKKyNkZWZpbmUgTUxFRFNfQ1MgICAgICAgICAgICAgICAgMworI2RlZmluZSBNTEVEU19QSFlTICAgICAgICAgICAgICAweDEwMEEwMDAwCisjZGVmaW5lIFVBUlRfQ1MgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgVUFSVF9QSFlTICAgICAgICAgICAgICAgMHgxMDBEMDAwMAorI2RlZmluZSBBUkFWQUxJX0NTICAgICAgICAgICAgICA1CisjZGVmaW5lIEFSQVZBTElfUEhZUyAgICAgICAgICAgIDB4MTEwMDAwMDAKKyNkZWZpbmUgSURFX0NTICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBJREVfUEhZUyAgICAgICAgICAgICAgICAweDEwMEIwMDAwCisjZGVmaW5lIEFSQVZBTEkyX0NTICAgICAgICAgICAgIDcKKyNkZWZpbmUgQVJBVkFMSTJfUEhZUyAgICAgICAgICAgMHgxMDBFMDAwMAorCisjaWYgZGVmaW5lZChDT05GSUdfU0lCWVRFX0NBUk1FTCkKKyNkZWZpbmUgS19HUElPX0dCX0lERSAgIDkKKyNkZWZpbmUgS19JTlRfR0JfSURFICAgIChLX0lOVF9HUElPXzAgKyBLX0dQSU9fR0JfSURFKQorI2VuZGlmCisKKworI2VuZGlmIC8qIF9fQVNNX1NJQllURV9DQVJNRUxfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zaWJ5dGUvc2IxMjUwLmggYi9pbmNsdWRlL2FzbS1taXBzL3NpYnl0ZS9zYjEyNTAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjJkYTRlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zaWJ5dGUvc2IxMjUwLmgKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMyBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgX0FTTV9TSUJZVEVfU0IxMjUwX0gKKyNkZWZpbmUgX0FTTV9TSUJZVEVfU0IxMjUwX0gKKworLyoKKyAqIHl5bW1kZHBwOiB5ZWFyLCBtb250aCwgZGF5LCBwYXRjaC4KKyAqIHNob3VsZCBzeW5jIHdpdGggTWFrZWZpbGUgRVhUUkFWRVJTSU9OCisgKi8KKyNkZWZpbmUgU0lCWVRFX1JFTEVBU0UgMHgwMjExMTQwMworCisjZGVmaW5lIFNCMTI1MF9OUl9JUlFTIDY0CisKKyNkZWZpbmUgU0IxMjUwX0RVQVJUX01JTk9SX0JBU0UJCTY0CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CisKKy8qIEZvciByZXZpc2lvbi9wYXNzIGluZm9ybWF0aW9uICovCisjaW5jbHVkZSA8YXNtL3NpYnl0ZS9zYjEyNTBfc2NkLmg+CitleHRlcm4gdW5zaWduZWQgaW50IHNiMV9wYXNzOworZXh0ZXJuIHVuc2lnbmVkIGludCBzb2NfcGFzczsKK2V4dGVybiB1bnNpZ25lZCBpbnQgc29jX3R5cGU7CitleHRlcm4gdW5zaWduZWQgaW50IHBlcmlwaF9yZXY7CitleHRlcm4gdW5zaWduZWQgaW50IHpiYnVzX21oejsKKworZXh0ZXJuIHZvaWQgc2IxMjUwX3RpbWVfaW5pdCh2b2lkKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHNiMTI1MF9nZXR0aW1lb2Zmc2V0KHZvaWQpOworZXh0ZXJuIHZvaWQgc2IxMjUwX21hc2tfaXJxKGludCBjcHUsIGludCBpcnEpOworZXh0ZXJuIHZvaWQgc2IxMjUwX3VubWFza19pcnEoaW50IGNwdSwgaW50IGlycSk7CitleHRlcm4gdm9pZCBzYjEyNTBfc21wX2ZpbmlzaCh2b2lkKTsKK2V4dGVybiB2b2lkIHByb21fcHJpbnRmKGNoYXIgKmZtdCwgLi4uKTsKKworI2RlZmluZSBBVF9zcGluIFwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQlcCisJCSIuc2V0IG5vYXRcbiIJCVwKKwkJImxpICRhdCwgMFxuIgkJXAorCQkiMTogYmVxeiAkYXQsIDFiXG4iCVwKKwkJIi5zZXQgYXRcbiIJCVwKKwkJKQorCisjZW5kaWYKKworI2RlZmluZSBJT0FERFIoYSkgKElPX0JBU0UgKyAoYSkpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zaWJ5dGUvc2IxMjUwX2RlZnMuaCBiL2luY2x1ZGUvYXNtLW1pcHMvc2lieXRlL3NiMTI1MF9kZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTYwODhmYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc2lieXRlL3NiMTI1MF9kZWZzLmgKQEAgLTAsMCArMSwyNDIgQEAKKy8qICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAqICBTQjEyNTAgQm9hcmQgU3VwcG9ydCBQYWNrYWdlCisgICAgKiAgCisgICAgKiAgR2xvYmFsIGNvbnN0YW50cyBhbmQgbWFjcm9zCQlGaWxlOiBzYjEyNTBfZGVmcy5oCQorICAgICogIAorICAgICogIFRoaXMgZmlsZSBjb250YWlucyBtYWNyb3MgYW5kIGRlZmluaXRpb25zIHVzZWQgYnkgdGhlIG90aGVyCisgICAgKiAgaW5jbHVkZSBmaWxlcy4KKyAgICAqCisgICAgKiAgU0IxMjUwIHNwZWNpZmljYXRpb24gbGV2ZWw6ICBVc2VyJ3MgbWFudWFsIDEvMDIvMDIKKyAgICAqICAKKyAgICAqICBBdXRob3I6ICBNaXRjaCBMaWNodGVuYmVyZworICAgICogIAorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAgCisgICAgKgorICAgICogIENvcHlyaWdodCAyMDAwLDIwMDEsMjAwMiwyMDAzCisgICAgKiAgQnJvYWRjb20gQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICAgKiAgCisgICAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAKKyAgICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyAKKyAgICAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiAKKyAgICAqICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgICAqCisgICAgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgICAqCisgICAgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIAorICAgICogIE1BIDAyMTExLTEzMDcgVVNBCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKyNpZm5kZWYgX1NCMTI1MF9ERUZTX0gKKyNkZWZpbmUgX1NCMTI1MF9ERUZTX0gKKworLyoKKyAqIFRoZXNlIGhlYWRlcnMgcmVxdWlyZSBBTlNJIEM4OSBzdHJpbmcgY29uY2F0ZW5hdGlvbiwgYW5kIEdDQyBvciBvdGhlcgorICogJ2xvbmcgbG9uZycgKDY0LWJpdCBpbnRlZ2VyKSBzdXBwb3J0LgorICovCisjaWYgIWRlZmluZWQoX19TVERDX18pICYmICFkZWZpbmVkKF9NU0NfVkVSKQorI2Vycm9yIFNpQnl0ZSBoZWFkZXJzIHJlcXVpcmUgQU5TSSBDODkgc3VwcG9ydAorI2VuZGlmCisKKworLyogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICogIE1hY3JvcyBmb3IgZmVhdHVyZSB0ZXN0cywgdXNlZCB0byBlbmFibGUgaW5jbHVkZSBmaWxlIGZlYXR1cmVzCisgICAgKiAgZm9yIGNoaXAgZmVhdHVyZXMgb25seSBwcmVzZW50IGluIGNlcnRhaW4gY2hpcCByZXZpc2lvbnMuCisgICAgKgorICAgICogIFNJQllURV9IRFJfRkVBVFVSRVMgbWF5IGJlIGRlZmluZWQgdG8gYmUgdGhlIG1hc2sgdmFsdWUgY2hpcC9yZXZpc2lvbgorICAgICogIHdoaWNoIGlzIHRvIGJlIGV4cG9zZWQgYnkgdGhlIGhlYWRlcnMuICBJZiB1bmRlZmluZWQsIGl0IGRlZmF1bHRzIHRvCisgICAgKiAgImFsbCBmZWF0dXJlcy4iCisgICAgKgorICAgICogIFVzZSBsaWtlOgorICAgICoKKyAgICAqICAgICNkZWZpbmUgU0lCWVRFX0hEUl9GRUFUVVJFUwlTSUJZVEVfSERSX0ZNQVNLXzExMnhfUEFTUzEKKyAgICAqCisgICAgKgkJR2VuZXJhdGUgZGVmaW5lcyBvbmx5IGZvciB0aGF0IHJldmlzaW9uIG9mIGNoaXAuCisgICAgKgorICAgICogICAgI2lmIFNJQllURV9IRFJfRkVBVFVSRShjaGlwLHBhc3MpCisgICAgKgorICAgICoJCVRydWUgaWYgaGVhZGVyIGZlYXR1cmVzIGZvciB0aGF0IHJldmlzaW9uIG9yIGxhdGVyIG9mCisgICAgKgkgICAgICAgIHRoYXQgcGFydGljdWxhciBjaGlwIHR5cGUgYXJlIGVuYWJsZWQgaW4gU0lCWVRFX0hEUl9GRUFUVVJFUy4KKyAgICAqCSAgICAgICAgKFVzZSB0aGlzIHRvIGJyYWNrZXQgI2RlZmluZXMgZm9yIGZlYXR1cmVzIHByZXNlbnQgaW4gYSBnaXZlbgorICAgICoJCXJldmlzaW9uIGFuZCBsYXRlci4pCisgICAgKgorICAgICoJCU5vdGUgdGhhdCB0aGVyZSBpcyBubyBpbXBsaWVkIG9yZGVyaW5nIGJldHdlZW4gY2hpcCB0eXBlcy4KKyAgICAqCisgICAgKgkJTm90ZSBhbHNvIHRoYXQgJ2NoaXAnIGFuZCAncGFzcycgbXVzdCB0ZXh0dWFsbHkgZXhhY3RseQorICAgICoJCW1hdGNoIHRoZSBkZWZpbmVzIGJlbG93LiAgU28sIGZvciBleGFtcGxlLAorICAgICoJCVNJQllURV9IRFJfRkVBVFVSRSgxMTJ4LCBQQVNTMSkgaXMgT0ssIGJ1dAorICAgICoJCVNJQllURV9IRFJfRkVBVFVSRSgxMTIwLCBwYXNzMSkgaXMgbm90IChmb3IgdHdvIHJlYXNvbnMpLgorICAgICoKKyAgICAqICAgICNpZiBTSUJZVEVfSERSX0ZFQVRVUkVfVVBfVE8oY2hpcCxwYXNzKQorICAgICoKKyAgICAqCQlTYW1lIGFzIFNJQllURV9IRFJfRkVBVFVSRSwgYnV0IHRydWUgZm9yIHRoZSBuYW1lZCByZXZpc2lvbgorICAgICoJCWFuZCBlYXJsaWVyIHJldmlzaW9ucyBvZiB0aGUgbmFtZWQgY2hpcCB0eXBlLgorICAgICoKKyAgICAqICAgICNpZiBTSUJZVEVfSERSX0ZFQVRVUkVfRVhBQ1QoY2hpcCxwYXNzKQorICAgICoKKyAgICAqCQlTYW1lIGFzIFNJQllURV9IRFJfRkVBVFVSRSwgYnV0IG9ubHkgdHJ1ZSBmb3IgdGhlIG5hbWVkCisgICAgKgkJcmV2aXNpb24gb2YgdGhlIG5hbWVkIGNoaXAgdHlwZS4gIChOb3RlIHRoYXQgdGhpcyBDQU5OT1QKKyAgICAqCQliZSB1c2VkIHRvIHZlcmlmeSB0aGF0IHlvdSdyZSBjb21waWxpbmcgb25seSBmb3IgdGhhdAorICAgICoJCXBhcnRpY3VsYXIgY2hpcC9yZXZpc2lvbi4gIEl0IHdpbGwgYmUgdHJ1ZSBhbnkgdGltZSB0aGlzCisgICAgKgkJY2hpcC9yZXZpc2lvbiBpcyBpbmNsdWRlZCBpbiBTSUJZVEVfSERSX0ZFQVRVUkVTLikKKyAgICAqCisgICAgKiAgICAjaWYgU0lCWVRFX0hEUl9GRUFUVVJFX0NISVAoY2hpcCkKKyAgICAqCisgICAgKgkJVHJ1ZSBpZiBoZWFkZXIgZmVhdHVyZXMgZm9yIChhbnkgcmV2aXNpb24gb2YpIHRoYXQgY2hpcCB0eXBlCisgICAgKgkJYXJlIGVuYWJsZWQgaW4gU0lCWVRFX0hEUl9GRUFUVVJFUy4gIChVc2UgdGhpcyB0byBicmFja2V0CisgICAgKgkJI2RlZmluZXMgZm9yIGZlYXR1cmVzIHNwZWNpZmljIHRvIGEgZ2l2ZW4gY2hpcCB0eXBlLikKKyAgICAqCisgICAgKiAgTWFzayB2YWx1ZXMgY3VycmVudGx5IGluY2x1ZGUgcm9vbSBmb3IgYWRkaXRpb25hbCByZXZpc2lvbnMgb2YgZWFjaAorICAgICogIGNoaXAgdHlwZSwgYnV0IGNhbiBiZSByZW51bWJlcmVkIGF0IHdpbGwuICBOb3RlIHRoYXQgdGhleSBNVVNUIGZpdAorICAgICogIGludG8gMzEgYml0cyBhbmQgbWF5IG5vdCBpbmNsdWRlIEMgdHlwZSBjb25zdHJ1Y3RzLCBmb3Igc2FmZSB1c2UgaW4KKyAgICAqICBDUFAgY29uZGl0aW9uYWxzLiAgQml0IHBvc2l0aW9ucyB3aXRoaW4gY2hpcCB0eXBlcyBETyBpbmRpY2F0ZQorICAgICogIG9yZGVyaW5nLCBzbyBiZSBjYXJlZnVsIHdoZW4gYWRkaW5nIHN1cHBvcnQgZm9yIG5ldyBtaW5vciByZXZzLgorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisjZGVmaW5lCVNJQllURV9IRFJfRk1BU0tfMTI1MF9BTEwJCTB4MDAwMDBmZgorI2RlZmluZQlTSUJZVEVfSERSX0ZNQVNLXzEyNTBfUEFTUzEJCTB4MDAwMDAwMQorI2RlZmluZQlTSUJZVEVfSERSX0ZNQVNLXzEyNTBfUEFTUzIJCTB4MDAwMDAwMgorI2RlZmluZQlTSUJZVEVfSERSX0ZNQVNLXzEyNTBfUEFTUzMJCTB4MDAwMDAwNAorCisjZGVmaW5lCVNJQllURV9IRFJfRk1BU0tfMTEyeF9BTEwJCTB4MDAwMGYwMAorI2RlZmluZQlTSUJZVEVfSERSX0ZNQVNLXzExMnhfUEFTUzEJCTB4MDAwMDEwMAorCisvKiBCaXQgbWFzayBmb3IgY2hpcC9yZXZpc2lvbi4gICh1c2UgX0FMTCBmb3IgYWxsIHJldmlzaW9ucyBvZiBhIGNoaXApLiAgKi8gCisjZGVmaW5lCVNJQllURV9IRFJfRk1BU0soY2hpcCwgcGFzcykJCQkJCVwKKyAgICAoU0lCWVRFX0hEUl9GTUFTS18gIyMgY2hpcCAjIyBfICMjIHBhc3MpCisjZGVmaW5lCVNJQllURV9IRFJfRk1BU0tfQUxMUkVWUyhjaGlwKQkJCQkJXAorICAgIChTSUJZVEVfSERSX0ZNQVNLXyAjIyBjaGlwICMjIF9BTEwpCisKKyNkZWZpbmUJU0lCWVRFX0hEUl9GTUFTS19BTEwJCQkJCQlcCisgICAgKFNJQllURV9IRFJfRk1BU0tfMTI1MF9BTEwgfCBTSUJZVEVfSERSX0ZNQVNLXzExMnhfQUxMKQorCisjaWZuZGVmIFNJQllURV9IRFJfRkVBVFVSRVMKKyNkZWZpbmUJU0lCWVRFX0hEUl9GRUFUVVJFUwkJCVNJQllURV9IRFJfRk1BU0tfQUxMCisjZW5kaWYKKworCisvKiBCaXQgbWFzayBmb3IgcmV2aXNpb25zIG9mIGNoaXAgZXhjbHVzaXZlbHkgYmVmb3JlIHRoZSBuYW1lZCByZXZpc2lvbi4gICovCisjZGVmaW5lCVNJQllURV9IRFJfRk1BU0tfQkVGT1JFKGNoaXAsIHBhc3MpCQkJCVwKKyAgICAoKFNJQllURV9IRFJfRk1BU0soY2hpcCwgcGFzcykgLSAxKSAmIFNJQllURV9IRFJfRk1BU0tfQUxMUkVWUyhjaGlwKSkKKworLyogQml0IG1hc2sgZm9yIHJldmlzaW9ucyBvZiBjaGlwIGV4Y2x1c2l2ZWx5IGFmdGVyIHRoZSBuYW1lZCByZXZpc2lvbi4gICovCisjZGVmaW5lCVNJQllURV9IRFJfRk1BU0tfQUZURVIoY2hpcCwgcGFzcykJCQkJXAorICAgICh+KFNJQllURV9IRFJfRk1BU0soY2hpcCwgcGFzcykJCQkJCVwKKyAgICAgfCAoU0lCWVRFX0hEUl9GTUFTSyhjaGlwLCBwYXNzKSAtIDEpKSAmIFNJQllURV9IRFJfRk1BU0tfQUxMUkVWUyhjaGlwKSkKKworCisvKiBUcnVlIGlmIGhlYWRlciBmZWF0dXJlcyBlbmFibGVkIGZvciAoYW55IHJldmlzaW9uIG9mKSB0aGF0IGNoaXAgdHlwZS4gICovCisjZGVmaW5lIFNJQllURV9IRFJfRkVBVFVSRV9DSElQKGNoaXApCQkJCQlcCisgICAgKCEhIChTSUJZVEVfSERSX0ZNQVNLX0FMTFJFVlMoY2hpcCkgJiBTSUJZVEVfSERSX0ZFQVRVUkVTKSkKKworLyogVHJ1ZSBpZiBoZWFkZXIgZmVhdHVyZXMgZW5hYmxlZCBmb3IgdGhhdCByZXYgb3IgbGF0ZXIsIGluY2x1c2l2ZS4gICovCisjZGVmaW5lIFNJQllURV9IRFJfRkVBVFVSRShjaGlwLCBwYXNzKQkJCQkJXAorICAgICghISAoKFNJQllURV9IRFJfRk1BU0soY2hpcCwgcGFzcykJCQkJCVwKKwkgIHwgU0lCWVRFX0hEUl9GTUFTS19BRlRFUihjaGlwLCBwYXNzKSkgJiBTSUJZVEVfSERSX0ZFQVRVUkVTKSkKKworLyogVHJ1ZSBpZiBoZWFkZXIgZmVhdHVyZXMgZW5hYmxlZCBmb3IgZXhhY3RseSB0aGF0IHJldi4gICovCisjZGVmaW5lIFNJQllURV9IRFJfRkVBVFVSRV9FWEFDVChjaGlwLCBwYXNzKQkJCQlcCisgICAgKCEhIChTSUJZVEVfSERSX0ZNQVNLKGNoaXAsIHBhc3MpICYgU0lCWVRFX0hEUl9GRUFUVVJFUykpCisKKy8qIFRydWUgaWYgaGVhZGVyIGZlYXR1cmVzIGVuYWJsZWQgZm9yIHRoYXQgcmV2IG9yIGJlZm9yZSwgaW5jbHVzaXZlLiAgKi8KKyNkZWZpbmUgU0lCWVRFX0hEUl9GRUFUVVJFX1VQX1RPKGNoaXAsIHBhc3MpCQkJCVwKKyAgICAoISEgKChTSUJZVEVfSERSX0ZNQVNLKGNoaXAsIHBhc3MpCQkJCQlcCisJIHwgU0lCWVRFX0hEUl9GTUFTS19CRUZPUkUoY2hpcCwgcGFzcykpICYgU0lCWVRFX0hEUl9GRUFUVVJFUykpCisKKworLyogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICogIE5hbWluZyBzY2hlbWVzIGZvciBjb25zdGFudHMgaW4gdGhlc2UgZmlsZXM6CisgICAgKiAgCisgICAgKiAgTV94eHggICAgICAgICAgIE1BU0sgY29uc3RhbnQgKGlkZW50aWZpZXMgYml0cyBpbiBhIHJlZ2lzdGVyKS4gCisgICAgKiAgICAgICAgICAgICAgICAgIEZvciBtdWx0aS1iaXQgZmllbGRzLCBhbGwgYml0cyBpbiB0aGUgZmllbGQgd2lsbAorICAgICogICAgICAgICAgICAgICAgICBiZSBzZXQuCisgICAgKgorICAgICogIEtfeHh4ICAgICAgICAgICAiQ29kZSIgY29uc3RhbnQgKHZhbHVlIGZvciBkYXRhIGluIGEgbXVsdGktYml0CisgICAgKiAgICAgICAgICAgICAgICAgIGZpZWxkKS4gIFRoZSB2YWx1ZSBpcyByaWdodCBqdXN0aWZpZWQuCisgICAgKgorICAgICogIFZfeHh4ICAgICAgICAgICAiVmFsdWUiIGNvbnN0YW50LiAgVGhpcyBpcyB0aGUgc2FtZSBhcyB0aGUgCisgICAgKiAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgIktfeHh4IiBjb25zdGFudCwgZXhjZXB0IGl0IGlzCisgICAgKiAgICAgICAgICAgICAgICAgIHNoaWZ0ZWQgdG8gdGhlIGNvcnJlY3QgcG9zaXRpb24gaW4gdGhlIHJlZ2lzdGVyLgorICAgICoKKyAgICAqICBTX3h4eCAgICAgICAgICAgU0hJRlQgY29uc3RhbnQuICBUaGlzIGlzIHRoZSBudW1iZXIgb2YgYml0cyB0aGF0CisgICAgKiAgICAgICAgICAgICAgICAgIGEgZmllbGQgdmFsdWUgKGNvZGUpIG5lZWRzIHRvIGJlIHNoaWZ0ZWQgCisgICAgKiAgICAgICAgICAgICAgICAgICh0b3dhcmRzIHRoZSBsZWZ0KSB0byBwdXQgdGhlIHZhbHVlIGluIHRoZSByaWdodAorICAgICogICAgICAgICAgICAgICAgICBwb3NpdGlvbiBmb3IgdGhlIHJlZ2lzdGVyLgorICAgICoKKyAgICAqICBBX3h4eCAgICAgICAgICAgQUREUkVTUyBjb25zdGFudC4gIFRoaXMgd2lsbCBiZSBhIHBoeXNpY2FsIAorICAgICogICAgICAgICAgICAgICAgICBhZGRyZXNzLiAgVXNlIHRoZSBQSFlTX1RPX0sxIG1hY3JvIHRvIGdlbmVyYXRlCisgICAgKiAgICAgICAgICAgICAgICAgIGEgSzFTRUcgYWRkcmVzcy4KKyAgICAqCisgICAgKiAgUl94eHggICAgICAgICAgIFJFTEFUSVZFIG9mZnNldCBjb25zdGFudC4gIFRoaXMgaXMgYW4gb2Zmc2V0IGZyb20KKyAgICAqICAgICAgICAgICAgICAgICAgYW4gQV94eHggY29uc3RhbnQgKHVzdWFsbHkgdGhlIGZpcnN0IHJlZ2lzdGVyIGluCisgICAgKiAgICAgICAgICAgICAgICAgIGEgZ3JvdXApLgorICAgICogIAorICAgICogIEdfeHh4KFgpICAgICAgICBHRVQgdmFsdWUuICBUaGlzIG1hY3JvIG9idGFpbnMgYSBtdWx0aS1iaXQgZmllbGQKKyAgICAqICAgICAgICAgICAgICAgICAgZnJvbSBhIHJlZ2lzdGVyLCBtYXNrcyBpdCwgYW5kIHNoaWZ0cyBpdCB0bworICAgICogICAgICAgICAgICAgICAgICB0aGUgYm90dG9tIG9mIHRoZSByZWdpc3RlciAocmV0cmlldmluZyBhIEtfeHh4CisgICAgKiAgICAgICAgICAgICAgICAgIHZhbHVlLCBmb3IgZXhhbXBsZSkuCisgICAgKgorICAgICogIFZfeHh4KFgpICAgICAgICBWQUxVRS4gIFRoaXMgbWFjcm8gY29tcHV0ZXMgdGhlIHZhbHVlIG9mIGEKKyAgICAqICAgICAgICAgICAgICAgICAgS194eHggY29uc3RhbnQgc2hpZnRlZCB0byB0aGUgY29ycmVjdCBwb3NpdGlvbgorICAgICogICAgICAgICAgICAgICAgICBpbiB0aGUgcmVnaXN0ZXIuCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKworCisKKy8qCisgKiBDYXN0IHRvIDY0LWJpdCBudW1iZXIuICBQcmVzdW1hYmx5IHRoZSBzeW50YXggaXMgZGlmZmVyZW50IGluIAorICogYXNzZW1ibHkgbGFuZ3VhZ2UuCisgKgorICogTm90ZTogeW91J2xsIG5lZWQgdG8gZGVmaW5lIHVpbnQzMl90IGFuZCB1aW50NjRfdCBpbiB5b3VyIGhlYWRlcnMuCisgKi8KKworI2lmICFkZWZpbmVkKF9fQVNTRU1CTEVSX18pCisjZGVmaW5lIF9TQl9NQUtFNjQoeCkgKCh1aW50NjRfdCkoeCkpCisjZGVmaW5lIF9TQl9NQUtFMzIoeCkgKCh1aW50MzJfdCkoeCkpCisjZWxzZQorI2RlZmluZSBfU0JfTUFLRTY0KHgpICh4KQorI2RlZmluZSBfU0JfTUFLRTMyKHgpICh4KQorI2VuZGlmCisKKworLyoKKyAqIE1ha2UgYSBtYXNrIGZvciAxIGJpdCBhdCBwb3NpdGlvbiAnbicKKyAqLworCisjZGVmaW5lIF9TQl9NQUtFTUFTSzEobikgKF9TQl9NQUtFNjQoMSkgPDwgX1NCX01BS0U2NChuKSkKKyNkZWZpbmUgX1NCX01BS0VNQVNLMV8zMihuKSAoX1NCX01BS0UzMigxKSA8PCBfU0JfTUFLRTMyKG4pKQorCisvKgorICogTWFrZSBhIG1hc2sgZm9yICd2JyBiaXRzIGF0IHBvc2l0aW9uICduJworICovCisKKyNkZWZpbmUgX1NCX01BS0VNQVNLKHYsbikgKF9TQl9NQUtFNjQoKF9TQl9NQUtFNjQoMSk8PCh2KSktMSkgPDwgX1NCX01BS0U2NChuKSkKKyNkZWZpbmUgX1NCX01BS0VNQVNLXzMyKHYsbikgKF9TQl9NQUtFMzIoKF9TQl9NQUtFMzIoMSk8PCh2KSktMSkgPDwgX1NCX01BS0UzMihuKSkKKworLyoKKyAqIE1ha2UgYSB2YWx1ZSBhdCAndicgYXQgYml0IHBvc2l0aW9uICduJworICovCisKKyNkZWZpbmUgX1NCX01BS0VWQUxVRSh2LG4pIChfU0JfTUFLRTY0KHYpIDw8IF9TQl9NQUtFNjQobikpCisjZGVmaW5lIF9TQl9NQUtFVkFMVUVfMzIodixuKSAoX1NCX01BS0UzMih2KSA8PCBfU0JfTUFLRTMyKG4pKQorCisjZGVmaW5lIF9TQl9HRVRWQUxVRSh2LG4sbSkgKChfU0JfTUFLRTY0KHYpICYgX1NCX01BS0U2NChtKSkgPj4gX1NCX01BS0U2NChuKSkKKyNkZWZpbmUgX1NCX0dFVFZBTFVFXzMyKHYsbixtKSAoKF9TQl9NQUtFMzIodikgJiBfU0JfTUFLRTMyKG0pKSA+PiBfU0JfTUFLRTMyKG4pKQorCisvKgorICogTWFjcm9zIHRvIHJlYWQvd3JpdGUgb24tY2hpcCByZWdpc3RlcnMKKyAqIFhYWCBzaG91bGQgd2UgZG8gdGhlIFBIWVNfVE9fSzEgaGVyZT8KKyAqLworCisKKyNpZiBkZWZpbmVkKF9fbWlwczY0KSAmJiAhZGVmaW5lZChfX0FTU0VNQkxFUl9fKQorI2RlZmluZSBTQldSSVRFQ1NSKGNzcix2YWwpICooKHZvbGF0aWxlIHVpbnQ2NF90ICopIFBIWVNfVE9fSzEoY3NyKSkgPSAodmFsKQorI2RlZmluZSBTQlJFQURDU1IoY3NyKSAoKigodm9sYXRpbGUgdWludDY0X3QgKikgUEhZU19UT19LMShjc3IpKSkKKyNlbmRpZiAvKiBfX0FTU0VNQkxFUl9fICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zaWJ5dGUvc2IxMjUwX2RtYS5oIGIvaW5jbHVkZS9hc20tbWlwcy9zaWJ5dGUvc2IxMjUwX2RtYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxYjA4ZDMyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zaWJ5dGUvc2IxMjUwX2RtYS5oCkBAIC0wLDAgKzEsNTk0IEBACisvKiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgKiAgU0IxMjUwIEJvYXJkIFN1cHBvcnQgUGFja2FnZQorICAgICogIAorICAgICogIERNQSBkZWZpbml0aW9ucwkJCQlGaWxlOiBzYjEyNTBfZG1hLmgKKyAgICAqICAKKyAgICAqICBUaGlzIG1vZHVsZSBjb250YWlucyBjb25zdGFudHMgYW5kIG1hY3JvcyB1c2VmdWwgZm9yCisgICAgKiAgcHJvZ3JhbW1pbmcgdGhlIFNCMTI1MCdzIERNQSBjb250cm9sbGVycywgYm90aCB0aGUgZGF0YSBtb3ZlcgorICAgICogIGFuZCB0aGUgRXRoZXJuZXQgRE1BLgorICAgICogIAorICAgICogIFNCMTI1MCBzcGVjaWZpY2F0aW9uIGxldmVsOiAgVXNlcidzIG1hbnVhbCAxLzAyLzAyCisgICAgKiAgCisgICAgKiAgQXV0aG9yOiAgTWl0Y2ggTGljaHRlbmJlcmcKKyAgICAqICAKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIAorICAgICoKKyAgICAqICBDb3B5cmlnaHQgMjAwMCwyMDAxLDIwMDIsMjAwMworICAgICogIEJyb2FkY29tIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICAgICogIAorICAgICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgCisgICAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgCisgICAgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgCisgICAgKiAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgICAgKgorICAgICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICAgKgorICAgICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCAKKyAgICAqICBNQSAwMjExMS0xMzA3IFVTQQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisKKyNpZm5kZWYgX1NCMTI1MF9ETUFfSAorI2RlZmluZSBfU0IxMjUwX0RNQV9ICisKKworI2luY2x1ZGUgInNiMTI1MF9kZWZzLmgiCisKKy8qICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAqICBETUEgUmVnaXN0ZXJzCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKy8qIAorICogRXRoZXJuZXQgYW5kIFNlcmlhbCBETUEgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAwICAoVGFibGUgNy00KQorICogUmVnaXN0ZXJzOiBETUFfQ09ORklHMF9NQUNfeF9SWF9DSF8wIAorICogUmVnaXN0ZXJzOiBETUFfQ09ORklHMF9NQUNfeF9UWF9DSF8wCisgKiBSZWdpc3RlcnM6IERNQV9DT05GSUcwX1NFUl94X1JYCisgKiBSZWdpc3RlcnM6IERNQV9DT05GSUcwX1NFUl94X1RYCisgKi8KKworCisjZGVmaW5lIE1fRE1BX0RST1AgICAgICAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDApCisKKyNkZWZpbmUgTV9ETUFfQ0hBSU5fU0VMICAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoMSkKKyNkZWZpbmUgTV9ETUFfUkVTRVJWRUQxICAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoMikKKworI2RlZmluZSBTX0RNQV9ERVNDX1RZUEUJCSAgICBfU0JfTUFLRTY0KDEpCisjZGVmaW5lIE1fRE1BX0RFU0NfVFlQRQkJICAgIF9TQl9NQUtFNjQoMixTX0RNQV9ERVNDX1RZUEUpCisjZGVmaW5lIFZfRE1BX0RFU0NfVFlQRSh4KSAgICAgICAgICBfU0JfTUFLRVZBTFVFKHgsU19ETUFfREVTQ19UWVBFKQorI2RlZmluZSBHX0RNQV9ERVNDX1RZUEUoeCkgICAgICAgICAgX1NCX0dFVFZBTFVFKHgsU19ETUFfREVTQ19UWVBFLE1fRE1BX0RFU0NfVFlQRSkKKworI2RlZmluZSBLX0RNQV9ERVNDX1RZUEVfUklOR19BTAkJMAorI2RlZmluZSBLX0RNQV9ERVNDX1RZUEVfQ0hBSU5fQUwJMQorCisjaWYgU0lCWVRFX0hEUl9GRUFUVVJFKDEyNTAsIFBBU1MzKSB8fCBTSUJZVEVfSERSX0ZFQVRVUkUoMTEyeCwgUEFTUzEpCisjZGVmaW5lIEtfRE1BX0RFU0NfVFlQRV9SSU5HX1VBTF9XSQkyCisjZGVmaW5lIEtfRE1BX0RFU0NfVFlQRV9SSU5HX1VBTF9STVcJMworI2VuZGlmIC8qIDEyNTAgUEFTUzMgfHwgMTEyeCBQQVNTMSAqLworCisjZGVmaW5lIE1fRE1BX0VPUF9JTlRfRU4gICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDMpCisjZGVmaW5lIE1fRE1BX0hXTV9JTlRfRU4gICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDQpCisjZGVmaW5lIE1fRE1BX0xXTV9JTlRfRU4gICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDUpCisjZGVmaW5lIE1fRE1BX1RCWF9FTiAgICAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDYpCisjZGVmaW5lIE1fRE1BX1REWF9FTiAgICAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDcpCisKKyNkZWZpbmUgU19ETUFfSU5UX1BLVENOVCAgICAgICAgICAgIF9TQl9NQUtFNjQoOCkKKyNkZWZpbmUgTV9ETUFfSU5UX1BLVENOVCAgICAgICAgICAgIF9TQl9NQUtFTUFTSyg4LFNfRE1BX0lOVF9QS1RDTlQpCisjZGVmaW5lIFZfRE1BX0lOVF9QS1RDTlQoeCkgICAgICAgICBfU0JfTUFLRVZBTFVFKHgsU19ETUFfSU5UX1BLVENOVCkKKyNkZWZpbmUgR19ETUFfSU5UX1BLVENOVCh4KSAgICAgICAgIF9TQl9HRVRWQUxVRSh4LFNfRE1BX0lOVF9QS1RDTlQsTV9ETUFfSU5UX1BLVENOVCkKKworI2RlZmluZSBTX0RNQV9SSU5HU1ogICAgICAgICAgICAgICAgX1NCX01BS0U2NCgxNikKKyNkZWZpbmUgTV9ETUFfUklOR1NaICAgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSygxNixTX0RNQV9SSU5HU1opCisjZGVmaW5lIFZfRE1BX1JJTkdTWih4KSAgICAgICAgICAgICBfU0JfTUFLRVZBTFVFKHgsU19ETUFfUklOR1NaKQorI2RlZmluZSBHX0RNQV9SSU5HU1ooeCkgICAgICAgICAgICAgX1NCX0dFVFZBTFVFKHgsU19ETUFfUklOR1NaLE1fRE1BX1JJTkdTWikKKworI2RlZmluZSBTX0RNQV9ISUdIX1dBVEVSTUFSSyAgICAgICAgX1NCX01BS0U2NCgzMikKKyNkZWZpbmUgTV9ETUFfSElHSF9XQVRFUk1BUksgICAgICAgIF9TQl9NQUtFTUFTSygxNixTX0RNQV9ISUdIX1dBVEVSTUFSSykKKyNkZWZpbmUgVl9ETUFfSElHSF9XQVRFUk1BUksoeCkgICAgIF9TQl9NQUtFVkFMVUUoeCxTX0RNQV9ISUdIX1dBVEVSTUFSSykKKyNkZWZpbmUgR19ETUFfSElHSF9XQVRFUk1BUksoeCkgICAgIF9TQl9HRVRWQUxVRSh4LFNfRE1BX0hJR0hfV0FURVJNQVJLLE1fRE1BX0hJR0hfV0FURVJNQVJLKQorCisjZGVmaW5lIFNfRE1BX0xPV19XQVRFUk1BUksgICAgICAgICBfU0JfTUFLRTY0KDQ4KQorI2RlZmluZSBNX0RNQV9MT1dfV0FURVJNQVJLICAgICAgICAgX1NCX01BS0VNQVNLKDE2LFNfRE1BX0xPV19XQVRFUk1BUkspCisjZGVmaW5lIFZfRE1BX0xPV19XQVRFUk1BUksoeCkgICAgICBfU0JfTUFLRVZBTFVFKHgsU19ETUFfTE9XX1dBVEVSTUFSSykKKyNkZWZpbmUgR19ETUFfTE9XX1dBVEVSTUFSSyh4KSAgICAgIF9TQl9HRVRWQUxVRSh4LFNfRE1BX0xPV19XQVRFUk1BUkssTV9ETUFfTE9XX1dBVEVSTUFSSykKKworLyoKKyAqIEV0aGVybmV0IGFuZCBTZXJpYWwgRE1BIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMSAoVGFibGUgNy01KQorICogUmVnaXN0ZXJzOiBETUFfQ09ORklHMV9NQUNfeF9SWF9DSF8wIAorICogUmVnaXN0ZXJzOiBETUFfQ09ORklHMV9ETUFfeF9UWF9DSF8wCisgKiBSZWdpc3RlcnM6IERNQV9DT05GSUcxX1NFUl94X1JYCisgKiBSZWdpc3RlcnM6IERNQV9DT05GSUcxX1NFUl94X1RYCisgKi8KKworI2RlZmluZSBNX0RNQV9IRFJfQ0ZfRU4gICAgICAgICAgICAgX1NCX01BS0VNQVNLMSgwKQorI2RlZmluZSBNX0RNQV9BU0lDX1hGUl9FTiAgICAgICAgICAgX1NCX01BS0VNQVNLMSgxKQorI2RlZmluZSBNX0RNQV9QUkVfQUREUl9FTiAgICAgICAgICAgX1NCX01BS0VNQVNLMSgyKQorI2RlZmluZSBNX0RNQV9GTE9XX0NUTF9FTiAgICAgICAgICAgX1NCX01BS0VNQVNLMSgzKQorI2RlZmluZSBNX0RNQV9OT19EU0NSX1VQRFQgICAgICAgICAgX1NCX01BS0VNQVNLMSg0KQorI2RlZmluZSBNX0RNQV9MMkNBCQkgICAgX1NCX01BS0VNQVNLMSg1KQorCisjaWYgU0lCWVRFX0hEUl9GRUFUVVJFKDEyNTAsIFBBU1MzKSB8fCBTSUJZVEVfSERSX0ZFQVRVUkUoMTEyeCwgUEFTUzEpCisjZGVmaW5lIE1fRE1BX1JYX1hUUkFfU1RBVFVTCSAgICBfU0JfTUFLRU1BU0sxKDYpCisjZGVmaW5lIE1fRE1BX1RYX0NQVV9QQVVTRQkgICAgX1NCX01BS0VNQVNLMSg2KQorI2RlZmluZSBNX0RNQV9UWF9GQ19QQVVTRV9FTgkgICAgX1NCX01BS0VNQVNLMSg3KQorI2VuZGlmIC8qIDEyNTAgUEFTUzMgfHwgMTEyeCBQQVNTMSAqLworCisjZGVmaW5lIE1fRE1BX01CWjEgICAgICAgICAgICAgICAgICBfU0JfTUFLRU1BU0soNiwxNSkKKworI2RlZmluZSBTX0RNQV9IRFJfU0laRSAgICAgICAgICAgICAgX1NCX01BS0U2NCgyMSkKKyNkZWZpbmUgTV9ETUFfSERSX1NJWkUgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSyg5LFNfRE1BX0hEUl9TSVpFKQorI2RlZmluZSBWX0RNQV9IRFJfU0laRSh4KSAgICAgICAgICAgX1NCX01BS0VWQUxVRSh4LFNfRE1BX0hEUl9TSVpFKQorI2RlZmluZSBHX0RNQV9IRFJfU0laRSh4KSAgICAgICAgICAgX1NCX0dFVFZBTFVFKHgsU19ETUFfSERSX1NJWkUsTV9ETUFfSERSX1NJWkUpCisKKyNkZWZpbmUgTV9ETUFfTUJaMiAgICAgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSyg1LDMyKQorCisjZGVmaW5lIFNfRE1BX0FTSUNYRlJfU0laRSAgICAgICAgICBfU0JfTUFLRTY0KDM3KQorI2RlZmluZSBNX0RNQV9BU0lDWEZSX1NJWkUgICAgICAgICAgX1NCX01BS0VNQVNLKDksU19ETUFfQVNJQ1hGUl9TSVpFKQorI2RlZmluZSBWX0RNQV9BU0lDWEZSX1NJWkUoeCkgICAgICAgX1NCX01BS0VWQUxVRSh4LFNfRE1BX0FTSUNYRlJfU0laRSkKKyNkZWZpbmUgR19ETUFfQVNJQ1hGUl9TSVpFKHgpICAgICAgIF9TQl9HRVRWQUxVRSh4LFNfRE1BX0FTSUNYRlJfU0laRSxNX0RNQV9BU0lDWEZSX1NJWkUpCisKKyNkZWZpbmUgU19ETUFfSU5UX1RJTUVPVVQgICAgICAgICAgIF9TQl9NQUtFNjQoNDgpCisjZGVmaW5lIE1fRE1BX0lOVF9USU1FT1VUICAgICAgICAgICBfU0JfTUFLRU1BU0soMTYsU19ETUFfSU5UX1RJTUVPVVQpCisjZGVmaW5lIFZfRE1BX0lOVF9USU1FT1VUKHgpICAgICAgICBfU0JfTUFLRVZBTFVFKHgsU19ETUFfSU5UX1RJTUVPVVQpCisjZGVmaW5lIEdfRE1BX0lOVF9USU1FT1VUKHgpICAgICAgICBfU0JfR0VUVkFMVUUoeCxTX0RNQV9JTlRfVElNRU9VVCxNX0RNQV9JTlRfVElNRU9VVCkKKworLyoKKyAqIEV0aGVybmV0IGFuZCBTZXJpYWwgRE1BIERlc2NyaXB0b3IgYmFzZSBhZGRyZXNzIChUYWJsZSA3LTYpCisgKi8KKworI2RlZmluZSBNX0RNQV9EU0NSQkFTRV9NQlogICAgICAgICAgX1NCX01BS0VNQVNLKDQsMCkKKworCisvKgorICogQVNJQyBNb2RlIEJhc2UgQWRkcmVzcyAoVGFibGUgNy03KQorICovCisKKyNkZWZpbmUgTV9ETUFfQVNJQ19CQVNFX01CWiAgICAgICAgIF9TQl9NQUtFTUFTSygyMCwwKQorCisvKgorICogRE1BIERlc2NyaXB0b3IgQ291bnQgUmVnaXN0ZXJzIChUYWJsZSA3LTgpCisgKi8KKyAKKy8qIE5vIGJpdGZpZWxkcyAqLworCisKKy8qIAorICogQ3VycmVudCBEZXNjcmlwdG9yIEFkZHJlc3MgUmVnaXN0ZXIgKFRhYmxlIDctMTEpCisgKi8KKworI2RlZmluZSBTX0RNQV9DVVJEU0NSX0FERFIgICAgICAgICAgX1NCX01BS0U2NCgwKQorI2RlZmluZSBNX0RNQV9DVVJEU0NSX0FERFIgICAgICAgICAgX1NCX01BS0VNQVNLKDQwLFNfRE1BX0NVUkRTQ1JfQUREUikKKyNkZWZpbmUgU19ETUFfQ1VSRFNDUl9DT1VOVCAgICAgICAgIF9TQl9NQUtFNjQoNDApCisjZGVmaW5lIE1fRE1BX0NVUkRTQ1JfQ09VTlQgICAgICAgICBfU0JfTUFLRU1BU0soMTYsU19ETUFfQ1VSRFNDUl9DT1VOVCkKKworI2lmIFNJQllURV9IRFJfRkVBVFVSRSgxMjUwLCBQQVNTMykgfHwgU0lCWVRFX0hEUl9GRUFUVVJFKDExMngsIFBBU1MxKQorI2RlZmluZSBNX0RNQV9UWF9DSF9QQVVTRV9PTgkgICAgX1NCX01BS0VNQVNLMSg1NikKKyNlbmRpZiAvKiAxMjUwIFBBU1MzIHx8IDExMnggUEFTUzEgKi8KKworLyoKKyAqIFJlY2VpdmUgUGFja2V0IERyb3AgUmVnaXN0ZXJzCisgKi8KKyNpZiBTSUJZVEVfSERSX0ZFQVRVUkUoMTI1MCwgUEFTUzMpIHx8IFNJQllURV9IRFJfRkVBVFVSRSgxMTJ4LCBQQVNTMSkKKyNkZWZpbmUgU19ETUFfT09ETE9TVF9SWCAgICAgICAgICAgX1NCX01BS0U2NCgwKQorI2RlZmluZSBNX0RNQV9PT0RMT1NUX1JYICAgICAgICAgICBfU0JfTUFLRU1BU0soMTYsU19ETUFfT09ETE9TVF9SWCkKKyNkZWZpbmUgR19ETUFfT09ETE9TVF9SWCh4KSAgICAgICAgX1NCX0dFVFZBTFVFKHgsU19ETUFfT09ETE9TVF9SWCxNX0RNQV9PT0RMT1NUX1JYKQorCisjZGVmaW5lIFNfRE1BX0VPUF9DT1VOVF9SWCAgICAgICAgIF9TQl9NQUtFNjQoMTYpCisjZGVmaW5lIE1fRE1BX0VPUF9DT1VOVF9SWCAgICAgICAgIF9TQl9NQUtFTUFTSyg4LFNfRE1BX0VPUF9DT1VOVF9SWCkKKyNkZWZpbmUgR19ETUFfRU9QX0NPVU5UX1JYKHgpICAgICAgX1NCX0dFVFZBTFVFKHgsU19ETUFfRU9QX0NPVU5UX1JYLE1fRE1BX0VPUF9DT1VOVF9SWCkKKyNlbmRpZiAvKiAxMjUwIFBBU1MzIHx8IDExMnggUEFTUzEgKi8KKworLyogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICogIERNQSBEZXNjcmlwdG9ycworICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisvKgorICogRGVzY3JpcHRvciBkb3VibGV3b3JkICJBIiAgKFRhYmxlIDctMTIpCisgKi8KKworI2RlZmluZSBTX0RNQV9EU0NSQV9PRkZTRVQgICAgICAgICAgX1NCX01BS0U2NCgwKQorI2RlZmluZSBNX0RNQV9EU0NSQV9PRkZTRVQgICAgICAgICAgX1NCX01BS0VNQVNLKDUsU19ETUFfRFNDUkFfT0ZGU0VUKQorI2RlZmluZSBWX0RNQV9EU0NSQV9PRkZTRVQoeCkgICAgICAgX1NCX01BS0VWQUxVRSh4LFNfRE1BX0RTQ1JBX09GRlNFVCkKKyNkZWZpbmUgR19ETUFfRFNDUkFfT0ZGU0VUKHgpICAgICAgIF9TQl9HRVRWQUxVRSh4LFNfRE1BX0RTQ1JBX09GRlNFVCxNX0RNQV9EU0NSQV9PRkZTRVQpCisKKy8qIE5vdGU6IERvbid0IHNoaWZ0IHRoZSBhZGRyZXNzIG92ZXIsIGp1c3QgbWFzayBpdCB3aXRoIHRoZSBtYXNrIGJlbG93ICovCisjZGVmaW5lIFNfRE1BX0RTQ1JBX0FfQUREUiAgICAgICAgICBfU0JfTUFLRTY0KDUpCisjZGVmaW5lIE1fRE1BX0RTQ1JBX0FfQUREUiAgICAgICAgICBfU0JfTUFLRU1BU0soMzUsU19ETUFfRFNDUkFfQV9BRERSKQorCisjZGVmaW5lIE1fRE1BX0RTQ1JBX0FfQUREUl9PRkZTRVQgICAoTV9ETUFfRFNDUkFfT0ZGU0VUIHwgTV9ETUFfRFNDUkFfQV9BRERSKQorCisjaWYgU0lCWVRFX0hEUl9GRUFUVVJFKDEyNTAsIFBBU1MzKSB8fCBTSUJZVEVfSERSX0ZFQVRVUkUoMTEyeCwgUEFTUzEpCisjZGVmaW5lIFNfRE1BX0RTQ1JBX0FfQUREUl9VQSAgICAgICAgX1NCX01BS0U2NCgwKQorI2RlZmluZSBNX0RNQV9EU0NSQV9BX0FERFJfVUEgICAgICAgIF9TQl9NQUtFTUFTSyg0MCxTX0RNQV9EU0NSQV9BX0FERFJfVUEpCisjZW5kaWYgLyogMTI1MCBQQVNTMyB8fCAxMTJ4IFBBU1MxICovCisKKyNkZWZpbmUgU19ETUFfRFNDUkFfQV9TSVpFICAgICAgICAgIF9TQl9NQUtFNjQoNDApCisjZGVmaW5lIE1fRE1BX0RTQ1JBX0FfU0laRSAgICAgICAgICBfU0JfTUFLRU1BU0soOSxTX0RNQV9EU0NSQV9BX1NJWkUpCisjZGVmaW5lIFZfRE1BX0RTQ1JBX0FfU0laRSh4KSAgICAgICBfU0JfTUFLRVZBTFVFKHgsU19ETUFfRFNDUkFfQV9TSVpFKQorI2RlZmluZSBHX0RNQV9EU0NSQV9BX1NJWkUoeCkgICAgICAgX1NCX0dFVFZBTFVFKHgsU19ETUFfRFNDUkFfQV9TSVpFLE1fRE1BX0RTQ1JBX0FfU0laRSkKKworI2lmIFNJQllURV9IRFJfRkVBVFVSRSgxMjUwLCBQQVNTMykgfHwgU0lCWVRFX0hEUl9GRUFUVVJFKDExMngsIFBBU1MxKQorI2RlZmluZSBTX0RNQV9EU0NSQV9EU0NSX0NOVAkgICAgX1NCX01BS0U2NCg0MCkKKyNkZWZpbmUgTV9ETUFfRFNDUkFfRFNDUl9DTlQJICAgIF9TQl9NQUtFTUFTSyg4LFNfRE1BX0RTQ1JBX0RTQ1JfQ05UKQorI2RlZmluZSBHX0RNQV9EU0NSQV9EU0NSX0NOVCh4KQkgICAgX1NCX0dFVFZBTFVFKHgsU19ETUFfRFNDUkFfRFNDUl9DTlQsTV9ETUFfRFNDUkFfRFNDUl9DTlQpCisjZW5kaWYgLyogMTI1MCBQQVNTMyB8fCAxMTJ4IFBBU1MxICovCisKKyNkZWZpbmUgTV9ETUFfRFNDUkFfSU5URVJSVVBUICAgICAgIF9TQl9NQUtFTUFTSzEoNDkpCisjZGVmaW5lIE1fRE1BX0RTQ1JBX09GRlNFVEIJICAgIF9TQl9NQUtFTUFTSzEoNTApCisKKyNkZWZpbmUgU19ETUFfRFNDUkFfU1RBVFVTICAgICAgICAgIF9TQl9NQUtFNjQoNTEpCisjZGVmaW5lIE1fRE1BX0RTQ1JBX1NUQVRVUyAgICAgICAgICBfU0JfTUFLRU1BU0soMTMsU19ETUFfRFNDUkFfU1RBVFVTKQorI2RlZmluZSBWX0RNQV9EU0NSQV9TVEFUVVMoeCkgICAgICAgX1NCX01BS0VWQUxVRSh4LFNfRE1BX0RTQ1JBX1NUQVRVUykKKyNkZWZpbmUgR19ETUFfRFNDUkFfU1RBVFVTKHgpICAgICAgIF9TQl9HRVRWQUxVRSh4LFNfRE1BX0RTQ1JBX1NUQVRVUyxNX0RNQV9EU0NSQV9TVEFUVVMpCisKKy8qCisgKiBEZXNjcmlwdG9yIGRvdWJsZXdvcmQgIkIiICAoVGFibGUgNy0xMykKKyAqLworCisKKyNkZWZpbmUgU19ETUFfRFNDUkJfT1BUSU9OUyAgICAgICAgIF9TQl9NQUtFNjQoMCkKKyNkZWZpbmUgTV9ETUFfRFNDUkJfT1BUSU9OUyAgICAgICAgIF9TQl9NQUtFTUFTSyg0LFNfRE1BX0RTQ1JCX09QVElPTlMpCisjZGVmaW5lIFZfRE1BX0RTQ1JCX09QVElPTlMoeCkgICAgICBfU0JfTUFLRVZBTFVFKHgsU19ETUFfRFNDUkJfT1BUSU9OUykKKyNkZWZpbmUgR19ETUFfRFNDUkJfT1BUSU9OUyh4KSAgICAgIF9TQl9HRVRWQUxVRSh4LFNfRE1BX0RTQ1JCX09QVElPTlMsTV9ETUFfRFNDUkJfT1BUSU9OUykKKworI2lmIFNJQllURV9IRFJfRkVBVFVSRSgxMjUwLCBQQVNTMykgfHwgU0lCWVRFX0hEUl9GRUFUVVJFKDExMngsIFBBU1MxKQorI2RlZmluZSBTX0RNQV9EU0NSQl9BX1NJWkUgICAgICAgIF9TQl9NQUtFNjQoOCkKKyNkZWZpbmUgTV9ETUFfRFNDUkJfQV9TSVpFICAgICAgICBfU0JfTUFLRU1BU0soMTQsU19ETUFfRFNDUkJfQV9TSVpFKQorI2RlZmluZSBWX0RNQV9EU0NSQl9BX1NJWkUoeCkgICAgIF9TQl9NQUtFVkFMVUUoeCxTX0RNQV9EU0NSQl9BX1NJWkUpCisjZGVmaW5lIEdfRE1BX0RTQ1JCX0FfU0laRSh4KSAgICAgX1NCX0dFVFZBTFVFKHgsU19ETUFfRFNDUkJfQV9TSVpFLE1fRE1BX0RTQ1JCX0FfU0laRSkKKyNlbmRpZiAvKiAxMjUwIFBBU1MzIHx8IDExMnggUEFTUzEgKi8KKworI2RlZmluZSBSX0RNQV9EU0NSQl9BRERSICAgICAgICAgICAgX1NCX01BS0U2NCgweDEwKQorCisvKiBOb3RlOiBEb24ndCBzaGlmdCB0aGUgYWRkcmVzcyBvdmVyLCBqdXN0IG1hc2sgaXQgd2l0aCB0aGUgbWFzayBiZWxvdyAqLworI2RlZmluZSBTX0RNQV9EU0NSQl9CX0FERFIgICAgICAgICAgX1NCX01BS0U2NCg1KQorI2RlZmluZSBNX0RNQV9EU0NSQl9CX0FERFIgICAgICAgICAgX1NCX01BS0VNQVNLKDM1LFNfRE1BX0RTQ1JCX0JfQUREUikKKworI2RlZmluZSBTX0RNQV9EU0NSQl9CX1NJWkUgICAgICAgICAgX1NCX01BS0U2NCg0MCkKKyNkZWZpbmUgTV9ETUFfRFNDUkJfQl9TSVpFICAgICAgICAgIF9TQl9NQUtFTUFTSyg5LFNfRE1BX0RTQ1JCX0JfU0laRSkKKyNkZWZpbmUgVl9ETUFfRFNDUkJfQl9TSVpFKHgpICAgICAgIF9TQl9NQUtFVkFMVUUoeCxTX0RNQV9EU0NSQl9CX1NJWkUpCisjZGVmaW5lIEdfRE1BX0RTQ1JCX0JfU0laRSh4KSAgICAgICBfU0JfR0VUVkFMVUUoeCxTX0RNQV9EU0NSQl9CX1NJWkUsTV9ETUFfRFNDUkJfQl9TSVpFKQorCisjZGVmaW5lIE1fRE1BX0RTQ1JCX0JfVkFMSUQgICAgICAgICBfU0JfTUFLRU1BU0sxKDQ5KQorCisjaWYgU0lCWVRFX0hEUl9GRUFUVVJFKDEyNTAsIFBBU1MzKSB8fCBTSUJZVEVfSERSX0ZFQVRVUkUoMTEyeCwgUEFTUzEpCisjZGVmaW5lIFNfRE1BX0RTQ1JCX1BLVF9TSVpFX01TQiAgICBfU0JfTUFLRTY0KDQ4KQorI2RlZmluZSBNX0RNQV9EU0NSQl9QS1RfU0laRV9NU0IgICAgX1NCX01BS0VNQVNLKDIsU19ETUFfRFNDUkJfUEtUX1NJWkVfTVNCKQorI2RlZmluZSBWX0RNQV9EU0NSQl9QS1RfU0laRV9NU0IoeCkgX1NCX01BS0VWQUxVRSh4LFNfRE1BX0RTQ1JCX1BLVF9TSVpFX01TQikKKyNkZWZpbmUgR19ETUFfRFNDUkJfUEtUX1NJWkVfTVNCKHgpIF9TQl9HRVRWQUxVRSh4LFNfRE1BX0RTQ1JCX1BLVF9TSVpFX01TQixNX0RNQV9EU0NSQl9QS1RfU0laRV9NU0IpCisjZW5kaWYgLyogMTI1MCBQQVNTMyB8fCAxMTJ4IFBBU1MxICovCisKKyNkZWZpbmUgU19ETUFfRFNDUkJfUEtUX1NJWkUgICAgICAgIF9TQl9NQUtFNjQoNTApCisjZGVmaW5lIE1fRE1BX0RTQ1JCX1BLVF9TSVpFICAgICAgICBfU0JfTUFLRU1BU0soMTQsU19ETUFfRFNDUkJfUEtUX1NJWkUpCisjZGVmaW5lIFZfRE1BX0RTQ1JCX1BLVF9TSVpFKHgpICAgICBfU0JfTUFLRVZBTFVFKHgsU19ETUFfRFNDUkJfUEtUX1NJWkUpCisjZGVmaW5lIEdfRE1BX0RTQ1JCX1BLVF9TSVpFKHgpICAgICBfU0JfR0VUVkFMVUUoeCxTX0RNQV9EU0NSQl9QS1RfU0laRSxNX0RNQV9EU0NSQl9QS1RfU0laRSkKKworLyoKKyAqIGZyb20gcGFzczIgc29tZSBiaXRzIGluIGRzY3JfYiBhcmUgYWxzbyB1c2VkIGZvciByeCBzdGF0dXMKKyAqLworI2RlZmluZSBTX0RNQV9EU0NSQl9TVEFUVVMgICAgICAgICAgX1NCX01BS0U2NCgwKQorI2RlZmluZSBNX0RNQV9EU0NSQl9TVEFUVVMgICAgICAgICAgX1NCX01BS0VNQVNLKDEsU19ETUFfRFNDUkJfU1RBVFVTKQorI2RlZmluZSBWX0RNQV9EU0NSQl9TVEFUVVMoeCkgICAgICAgX1NCX01BS0VWQUxVRSh4LFNfRE1BX0RTQ1JCX1NUQVRVUykKKyNkZWZpbmUgR19ETUFfRFNDUkJfU1RBVFVTKHgpICAgICAgIF9TQl9HRVRWQUxVRSh4LFNfRE1BX0RTQ1JCX1NUQVRVUyxNX0RNQV9EU0NSQl9TVEFUVVMpCisKKy8qIAorICogRXRoZXJuZXQgRGVzY3JpcHRvciBTdGF0dXMgQml0cyAoVGFibGUgNy0xNSkKKyAqLworCisjZGVmaW5lIE1fRE1BX0VUSFJYX0JBRElQNENTICAgICAgICBfU0JfTUFLRU1BU0sxKDUxKQorI2RlZmluZSBNX0RNQV9FVEhSWF9EU0NSRVJSCSAgICBfU0JfTUFLRU1BU0sxKDUyKQorCisjaWYgU0lCWVRFX0hEUl9GRUFUVVJFKDEyNTAsIFBBU1MyKSB8fCBTSUJZVEVfSERSX0ZFQVRVUkUoMTEyeCwgUEFTUzEpIAorLyogTm90ZTogQkFEVENQQ1MgaXMgYWN0dWFsbHkgaW4gRFNDUl9CIG9wdGlvbnMgZmllbGQgKi8KKyNkZWZpbmUgTV9ETUFfRVRIUlhfQkFEVENQQ1MJX1NCX01BS0VNQVNLMSgwKQorI2VuZGlmIC8qIDEyNTAgUEFTUzIgfHwgMTEyeCBQQVNTMSAqLworCisjaWYgU0lCWVRFX0hEUl9GRUFUVVJFKDEyNTAsIFBBU1MzKSB8fCBTSUJZVEVfSERSX0ZFQVRVUkUoMTEyeCwgUEFTUzEpCisjZGVmaW5lIE1fRE1BX0VUSF9WTEFOX0ZMQUcJX1NCX01BS0VNQVNLMSgxKQorI2RlZmluZSBNX0RNQV9FVEhfQ1JDX0ZMQUcJX1NCX01BS0VNQVNLMSgyKQorI2VuZGlmIC8qIDEyNTAgUEFTUzMgfHwgMTEyeCBQQVNTMSAqLworCisjZGVmaW5lIFNfRE1BX0VUSFJYX1JYQ0ggICAgICAgICAgICA1MworI2RlZmluZSBNX0RNQV9FVEhSWF9SWENIICAgICAgICAgICAgX1NCX01BS0VNQVNLKDIsU19ETUFfRVRIUlhfUlhDSCkKKyNkZWZpbmUgVl9ETUFfRVRIUlhfUlhDSCh4KSAgICAgICAgIF9TQl9NQUtFVkFMVUUoeCxTX0RNQV9FVEhSWF9SWENIKQorI2RlZmluZSBHX0RNQV9FVEhSWF9SWENIKHgpICAgICAgICAgX1NCX0dFVFZBTFVFKHgsU19ETUFfRVRIUlhfUlhDSCxNX0RNQV9FVEhSWF9SWENIKQorCisjZGVmaW5lIFNfRE1BX0VUSFJYX1BLVFRZUEUgICAgICAgICA1NQorI2RlZmluZSBNX0RNQV9FVEhSWF9QS1RUWVBFICAgICAgICAgX1NCX01BS0VNQVNLKDMsU19ETUFfRVRIUlhfUEtUVFlQRSkKKyNkZWZpbmUgVl9ETUFfRVRIUlhfUEtUVFlQRSh4KSAgICAgIF9TQl9NQUtFVkFMVUUoeCxTX0RNQV9FVEhSWF9QS1RUWVBFKQorI2RlZmluZSBHX0RNQV9FVEhSWF9QS1RUWVBFKHgpICAgICAgX1NCX0dFVFZBTFVFKHgsU19ETUFfRVRIUlhfUEtUVFlQRSxNX0RNQV9FVEhSWF9QS1RUWVBFKQorCisjZGVmaW5lIEtfRE1BX0VUSFJYX1BLVFRZUEVfSVBWNCAgICAwCisjZGVmaW5lIEtfRE1BX0VUSFJYX1BLVFRZUEVfQVJQVjQgICAxCisjZGVmaW5lIEtfRE1BX0VUSFJYX1BLVFRZUEVfODAyICAgICAyCisjZGVmaW5lIEtfRE1BX0VUSFJYX1BLVFRZUEVfT1RIRVIgICAzCisjZGVmaW5lIEtfRE1BX0VUSFJYX1BLVFRZUEVfVVNFUjAgICA0CisjZGVmaW5lIEtfRE1BX0VUSFJYX1BLVFRZUEVfVVNFUjEgICA1CisjZGVmaW5lIEtfRE1BX0VUSFJYX1BLVFRZUEVfVVNFUjIgICA2CisjZGVmaW5lIEtfRE1BX0VUSFJYX1BLVFRZUEVfVVNFUjMgICA3CisKKyNkZWZpbmUgTV9ETUFfRVRIUlhfTUFUQ0hfSEFTSCAgICAgIF9TQl9NQUtFTUFTSzEoNTgpCisjZGVmaW5lIE1fRE1BX0VUSFJYX01BVENIX0VYQUNUICAgICBfU0JfTUFLRU1BU0sxKDU5KQorI2RlZmluZSBNX0RNQV9FVEhSWF9CQ0FTVCAgICAgICAgICAgX1NCX01BS0VNQVNLMSg2MCkKKyNkZWZpbmUgTV9ETUFfRVRIUlhfTUNBU1QgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoNjEpCisjZGVmaW5lIE1fRE1BX0VUSFJYX0JBRAkgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDYyKQorI2RlZmluZSBNX0RNQV9FVEhSWF9TT1AgICAgICAgICAgICAgX1NCX01BS0VNQVNLMSg2MykKKworLyoKKyAqIEV0aGVybmV0IFRyYW5zbWl0IFN0YXR1cyBCaXRzIChUYWJsZSA3LTE2KQorICovCisKKyNkZWZpbmUgTV9ETUFfRVRIVFhfU09QCSAgICAJICAgIF9TQl9NQUtFTUFTSzEoNjMpCisKKy8qIAorICogRXRoZXJuZXQgVHJhbnNtaXQgT3B0aW9ucyAoVGFibGUgNy0xNykKKyAqLworCisjZGVmaW5lIEtfRE1BX0VUSFRYX05PVFNPUCAgICAgICAgICBfU0JfTUFLRTY0KDB4MDApCisjZGVmaW5lIEtfRE1BX0VUSFRYX0FQUEVORENSQyAgICAgICBfU0JfTUFLRTY0KDB4MDEpCisjZGVmaW5lIEtfRE1BX0VUSFRYX1JFUExBQ0VDUkMgICAgICBfU0JfTUFLRTY0KDB4MDIpCisjZGVmaW5lIEtfRE1BX0VUSFRYX0FQUEVORENSQ19BUFBFTkRQQUQgX1NCX01BS0U2NCgweDAzKQorI2RlZmluZSBLX0RNQV9FVEhUWF9BUFBFTkRWTEFOX1JFUExBQ0VDUkMgX1NCX01BS0U2NCgweDA0KQorI2RlZmluZSBLX0RNQV9FVEhUWF9SRU1PVkVWTEFOX1JFUExBQ0VDUkMgX1NCX01BS0U2NCgweDA1KQorI2RlZmluZSBLX0RNQV9FVEhUWF9SRVBMQUNFVkxBTl9SRVBMQUNFQ1JDIF9TQl9NQUtFNjQoMHg2KQorI2RlZmluZSBLX0RNQV9FVEhUWF9OT01PRFMgICAgICAgICAgX1NCX01BS0U2NCgweDA3KQorI2RlZmluZSBLX0RNQV9FVEhUWF9SRVNFUlZFRDEgICAgICAgX1NCX01BS0U2NCgweDA4KQorI2RlZmluZSBLX0RNQV9FVEhUWF9SRVBMQUNFU0FERFJfQVBQRU5EQ1JDIF9TQl9NQUtFNjQoMHgwOSkKKyNkZWZpbmUgS19ETUFfRVRIVFhfUkVQTEFDRVNBRERSX1JFUExBQ0VDUkMgX1NCX01BS0U2NCgweDBBKQorI2RlZmluZSBLX0RNQV9FVEhUWF9SRVBMQUNFU0FERFJfQVBQRU5EQ1JDX0FQUEVORFBBRCBfU0JfTUFLRTY0KDB4MEIpCisjZGVmaW5lIEtfRE1BX0VUSFRYX1JFUExBQ0VTQUREUl9BUFBFTkRWTEFOX1JFUExBQ0VDUkMgX1NCX01BS0U2NCgweDBDKQorI2RlZmluZSBLX0RNQV9FVEhUWF9SRVBMQUNFU0FERFJfUkVNT1ZFVkxBTl9SRVBMQUNFQ1JDIF9TQl9NQUtFNjQoMHgwRCkKKyNkZWZpbmUgS19ETUFfRVRIVFhfUkVQTEFDRVNBRERSX1JFUExBQ0VWTEFOX1JFUExBQ0VDUkMgX1NCX01BS0U2NCgweDBFKQorI2RlZmluZSBLX0RNQV9FVEhUWF9SRVNFUlZFRDIgICAgICAgX1NCX01BS0U2NCgweDBGKQorCisvKgorICogU2VyaWFsIFJlY2VpdmUgT3B0aW9ucyAoVGFibGUgNy0xOCkKKyAqLworI2RlZmluZSBNX0RNQV9TRVJSWF9DUkNfRVJST1IgICAgICAgX1NCX01BS0VNQVNLMSg1NikKKyNkZWZpbmUgTV9ETUFfU0VSUlhfQUJPUlQgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoNTcpCisjZGVmaW5lIE1fRE1BX1NFUlJYX09DVEVUX0VSUk9SICAgICBfU0JfTUFLRU1BU0sxKDU4KQorI2RlZmluZSBNX0RNQV9TRVJSWF9MT05HRlJBTUVfRVJST1IgX1NCX01BS0VNQVNLMSg1OSkKKyNkZWZpbmUgTV9ETUFfU0VSUlhfU0hPUlRGUkFNRV9FUlJPUiBfU0JfTUFLRU1BU0sxKDYwKQorI2RlZmluZSBNX0RNQV9TRVJSWF9PVkVSUlVOX0VSUk9SICAgX1NCX01BS0VNQVNLMSg2MSkKKyNkZWZpbmUgTV9ETUFfU0VSUlhfR09PRCAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoNjIpCisjZGVmaW5lIE1fRE1BX1NFUlJYX1NPUCAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDYzKQorCisvKgorICogU2VyaWFsIFRyYW5zbWl0IFN0YXR1cyBCaXRzIChUYWJsZSA3LTIwKQorICovCisKKyNkZWZpbmUgTV9ETUFfU0VSVFhfRkxBRwkgICAgX1NCX01BS0VNQVNLMSg2MykKKworLyoKKyAqIFNlcmlhbCBUcmFuc21pdCBPcHRpb25zIChUYWJsZSA3LTIxKQorICovCisKKyNkZWZpbmUgS19ETUFfU0VSVFhfUkVTRVJWRUQgICAgICAgIF9TQl9NQUtFTUFTSzEoMCkKKyNkZWZpbmUgS19ETUFfU0VSVFhfQVBQRU5EQ1JDICAgICAgIF9TQl9NQUtFTUFTSzEoMSkKKyNkZWZpbmUgS19ETUFfU0VSVFhfQVBQRU5EUEFEICAgICAgIF9TQl9NQUtFTUFTSzEoMikKKyNkZWZpbmUgS19ETUFfU0VSVFhfQUJPUlQgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoMykKKworCisvKiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgKiAgRGF0YSBNb3ZlciBSZWdpc3RlcnMKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworLyogCisgKiBEYXRhIE1vdmVyIERlc2NyaXB0b3IgQmFzZSBBZGRyZXNzIFJlZ2lzdGVyIChUYWJsZSA3LTIyKQorICogUmVnaXN0ZXI6IERNX0RTQ1JfQkFTRV8wCisgKiBSZWdpc3RlcjogRE1fRFNDUl9CQVNFXzEKKyAqIFJlZ2lzdGVyOiBETV9EU0NSX0JBU0VfMgorICogUmVnaXN0ZXI6IERNX0RTQ1JfQkFTRV8zCisgKi8KKworI2RlZmluZSBNX0RNX0RTQ1JfQkFTRV9NQlogICAgICAgICAgX1NCX01BS0VNQVNLKDQsMCkKKworLyogIE5vdGU6IEp1c3QgbWFzayB0aGUgYmFzZSBhZGRyZXNzIGFuZCB0aGVuIE9SIGl0IGluLiAqLworI2RlZmluZSBTX0RNX0RTQ1JfQkFTRV9BRERSICAgICAgICAgX1NCX01BS0U2NCg0KQorI2RlZmluZSBNX0RNX0RTQ1JfQkFTRV9BRERSICAgICAgICAgX1NCX01BS0VNQVNLKDM2LFNfRE1fRFNDUl9CQVNFX0FERFIpCisKKyNkZWZpbmUgU19ETV9EU0NSX0JBU0VfUklOR1NaICAgICAgIF9TQl9NQUtFNjQoNDApCisjZGVmaW5lIE1fRE1fRFNDUl9CQVNFX1JJTkdTWiAgICAgICBfU0JfTUFLRU1BU0soMTYsU19ETV9EU0NSX0JBU0VfUklOR1NaKQorI2RlZmluZSBWX0RNX0RTQ1JfQkFTRV9SSU5HU1ooeCkgICAgX1NCX01BS0VWQUxVRSh4LFNfRE1fRFNDUl9CQVNFX1JJTkdTWikKKyNkZWZpbmUgR19ETV9EU0NSX0JBU0VfUklOR1NaKHgpICAgIF9TQl9HRVRWQUxVRSh4LFNfRE1fRFNDUl9CQVNFX1JJTkdTWixNX0RNX0RTQ1JfQkFTRV9SSU5HU1opCisKKyNkZWZpbmUgU19ETV9EU0NSX0JBU0VfUFJJT1JJVFkgICAgIF9TQl9NQUtFNjQoNTYpCisjZGVmaW5lIE1fRE1fRFNDUl9CQVNFX1BSSU9SSVRZICAgICBfU0JfTUFLRU1BU0soMyxTX0RNX0RTQ1JfQkFTRV9QUklPUklUWSkKKyNkZWZpbmUgVl9ETV9EU0NSX0JBU0VfUFJJT1JJVFkoeCkgIF9TQl9NQUtFVkFMVUUoeCxTX0RNX0RTQ1JfQkFTRV9QUklPUklUWSkKKyNkZWZpbmUgR19ETV9EU0NSX0JBU0VfUFJJT1JJVFkoeCkgIF9TQl9HRVRWQUxVRSh4LFNfRE1fRFNDUl9CQVNFX1BSSU9SSVRZLE1fRE1fRFNDUl9CQVNFX1BSSU9SSVRZKQorCisjZGVmaW5lIEtfRE1fRFNDUl9CQVNFX1BSSU9SSVRZXzEgICAwCisjZGVmaW5lIEtfRE1fRFNDUl9CQVNFX1BSSU9SSVRZXzIgICAxCisjZGVmaW5lIEtfRE1fRFNDUl9CQVNFX1BSSU9SSVRZXzQgICAyCisjZGVmaW5lIEtfRE1fRFNDUl9CQVNFX1BSSU9SSVRZXzggICAzCisjZGVmaW5lIEtfRE1fRFNDUl9CQVNFX1BSSU9SSVRZXzE2ICA0CisKKyNkZWZpbmUgTV9ETV9EU0NSX0JBU0VfQUNUSVZFICAgICAgIF9TQl9NQUtFTUFTSzEoNTkpCisjZGVmaW5lIE1fRE1fRFNDUl9CQVNFX0lOVEVSUlVQVCAgICBfU0JfTUFLRU1BU0sxKDYwKQorI2RlZmluZSBNX0RNX0RTQ1JfQkFTRV9SRVNFVCAgICAgICAgX1NCX01BS0VNQVNLMSg2MSkJLyogd3JpdGUgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTV9ETV9EU0NSX0JBU0VfRVJST1IgICAgICAgIF9TQl9NQUtFTUFTSzEoNjEpCS8qIHJlYWQgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTV9ETV9EU0NSX0JBU0VfQUJPUlQgICAgICAgIF9TQl9NQUtFTUFTSzEoNjIpCisjZGVmaW5lIE1fRE1fRFNDUl9CQVNFX0VOQUJMICAgICAgICBfU0JfTUFLRU1BU0sxKDYzKQorCisvKiAKKyAqIERhdGEgTW92ZXIgRGVzY3JpcHRvciBDb3VudCBSZWdpc3RlciAoVGFibGUgNy0yNSkKKyAqLworCisvKiBubyBiaXRmaWVsZHMgKi8KKworLyoKKyAqIERhdGEgTW92ZXIgQ3VycmVudCBEZXNjcmlwdG9yIEFkZHJlc3MgKFRhYmxlIDctMjQpCisgKiBSZWdpc3RlcjogRE1fQ1VSX0RTQ1JfQUREUl8wCisgKiBSZWdpc3RlcjogRE1fQ1VSX0RTQ1JfQUREUl8xCisgKiBSZWdpc3RlcjogRE1fQ1VSX0RTQ1JfQUREUl8yCisgKiBSZWdpc3RlcjogRE1fQ1VSX0RTQ1JfQUREUl8zCisgKi8KKworI2RlZmluZSBTX0RNX0NVUl9EU0NSX0RTQ1JfQUREUiAgICAgX1NCX01BS0U2NCgwKQorI2RlZmluZSBNX0RNX0NVUl9EU0NSX0RTQ1JfQUREUiAgICAgX1NCX01BS0VNQVNLKDQwLFNfRE1fQ1VSX0RTQ1JfRFNDUl9BRERSKQorCisjZGVmaW5lIFNfRE1fQ1VSX0RTQ1JfRFNDUl9DT1VOVCAgICBfU0JfTUFLRTY0KDQ4KQorI2RlZmluZSBNX0RNX0NVUl9EU0NSX0RTQ1JfQ09VTlQgICAgX1NCX01BS0VNQVNLKDE2LFNfRE1fQ1VSX0RTQ1JfRFNDUl9DT1VOVCkKKyNkZWZpbmUgVl9ETV9DVVJfRFNDUl9EU0NSX0NPVU5UKHIpIF9TQl9NQUtFVkFMVUUocixTX0RNX0NVUl9EU0NSX0RTQ1JfQ09VTlQpCisjZGVmaW5lIEdfRE1fQ1VSX0RTQ1JfRFNDUl9DT1VOVChyKSBfU0JfR0VUVkFMVUUocixTX0RNX0NVUl9EU0NSX0RTQ1JfQ09VTlQsXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1fRE1fQ1VSX0RTQ1JfRFNDUl9DT1VOVCkKKworCisjaWYgU0lCWVRFX0hEUl9GRUFUVVJFKDEyNTAsIFBBU1MzKSB8fCBTSUJZVEVfSERSX0ZFQVRVUkUoMTEyeCwgUEFTUzEpCisvKgorICogRGF0YSBNb3ZlciBDaGFubmVsIFBhcnRpYWwgUmVzdWx0IFJlZ2lzdGVycworICogUmVnaXN0ZXI6IERNX1BBUlRJQUxfMAorICogUmVnaXN0ZXI6IERNX1BBUlRJQUxfMQorICogUmVnaXN0ZXI6IERNX1BBUlRJQUxfMgorICogUmVnaXN0ZXI6IERNX1BBUlRJQUxfMworICovCisjZGVmaW5lIFNfRE1fUEFSVElBTF9DUkNfUEFSVElBTCAgICAgIF9TQl9NQUtFNjQoMCkKKyNkZWZpbmUgTV9ETV9QQVJUSUFMX0NSQ19QQVJUSUFMICAgICAgX1NCX01BS0VNQVNLKDMyLFNfRE1fUEFSVElBTF9DUkNfUEFSVElBTCkKKyNkZWZpbmUgVl9ETV9QQVJUSUFMX0NSQ19QQVJUSUFMKHIpICAgX1NCX01BS0VWQUxVRShyLFNfRE1fUEFSVElBTF9DUkNfUEFSVElBTCkKKyNkZWZpbmUgR19ETV9QQVJUSUFMX0NSQ19QQVJUSUFMKHIpICAgX1NCX0dFVFZBTFVFKHIsU19ETV9QQVJUSUFMX0NSQ19QQVJUSUFMLFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1fRE1fUEFSVElBTF9DUkNfUEFSVElBTCkKKworI2RlZmluZSBTX0RNX1BBUlRJQUxfVENQQ1NfUEFSVElBTCAgICBfU0JfTUFLRTY0KDMyKQorI2RlZmluZSBNX0RNX1BBUlRJQUxfVENQQ1NfUEFSVElBTCAgICBfU0JfTUFLRU1BU0soMTYsU19ETV9QQVJUSUFMX1RDUENTX1BBUlRJQUwpCisjZGVmaW5lIFZfRE1fUEFSVElBTF9UQ1BDU19QQVJUSUFMKHIpIF9TQl9NQUtFVkFMVUUocixTX0RNX1BBUlRJQUxfVENQQ1NfUEFSVElBTCkKKyNkZWZpbmUgR19ETV9QQVJUSUFMX1RDUENTX1BBUlRJQUwocikgX1NCX0dFVFZBTFVFKHIsU19ETV9QQVJUSUFMX1RDUENTX1BBUlRJQUwsXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTV9ETV9QQVJUSUFMX1RDUENTX1BBUlRJQUwpCisKKyNkZWZpbmUgTV9ETV9QQVJUSUFMX09ERF9CWVRFICAgICAgICAgX1NCX01BS0VNQVNLMSg0OCkKKyNlbmRpZiAvKiAxMjUwIFBBU1MzIHx8IDExMnggUEFTUzEgKi8KKworCisjaWYgU0lCWVRFX0hEUl9GRUFUVVJFKDEyNTAsIFBBU1MzKSB8fCBTSUJZVEVfSERSX0ZFQVRVUkUoMTEyeCwgUEFTUzEpCisvKgorICogRGF0YSBNb3ZlciBDUkMgRGVmaW5pdGlvbiBSZWdpc3RlcnMKKyAqIFJlZ2lzdGVyOiBDUkNfREVGXzAKKyAqIFJlZ2lzdGVyOiBDUkNfREVGXzEKKyAqLworI2RlZmluZSBTX0NSQ19ERUZfQ1JDX0lOSVQgICAgICAgICAgICBfU0JfTUFLRTY0KDApCisjZGVmaW5lIE1fQ1JDX0RFRl9DUkNfSU5JVCAgICAgICAgICAgIF9TQl9NQUtFTUFTSygzMixTX0NSQ19ERUZfQ1JDX0lOSVQpCisjZGVmaW5lIFZfQ1JDX0RFRl9DUkNfSU5JVChyKSAgICAgICAgIF9TQl9NQUtFVkFMVUUocixTX0NSQ19ERUZfQ1JDX0lOSVQpCisjZGVmaW5lIEdfQ1JDX0RFRl9DUkNfSU5JVChyKSAgICAgICAgIF9TQl9HRVRWQUxVRShyLFNfQ1JDX0RFRl9DUkNfSU5JVCxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNX0NSQ19ERUZfQ1JDX0lOSVQpCisKKyNkZWZpbmUgU19DUkNfREVGX0NSQ19QT0xZICAgICAgICAgICAgX1NCX01BS0U2NCgzMikKKyNkZWZpbmUgTV9DUkNfREVGX0NSQ19QT0xZICAgICAgICAgICAgX1NCX01BS0VNQVNLKDMyLFNfQ1JDX0RFRl9DUkNfUE9MWSkKKyNkZWZpbmUgVl9DUkNfREVGX0NSQ19QT0xZKHIpICAgICAgICAgX1NCX01BS0VWQUxVRShyLFNfQ1JDX0RFRl9DUkNfUE9MWSkKKyNkZWZpbmUgR19DUkNfREVGX0NSQ19QT0xZKHIpICAgICAgICAgX1NCX0dFVFZBTFVFKHIsU19DUkNfREVGX0NSQ19QT0xZLFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1fQ1JDX0RFRl9DUkNfUE9MWSkKKyNlbmRpZiAvKiAxMjUwIFBBU1MzIHx8IDExMnggUEFTUzEgKi8KKworCisjaWYgU0lCWVRFX0hEUl9GRUFUVVJFKDEyNTAsIFBBU1MzKSB8fCBTSUJZVEVfSERSX0ZFQVRVUkUoMTEyeCwgUEFTUzEpCisvKgorICogRGF0YSBNb3ZlciBDUkMvQ2hlY2tzdW0gRGVmaW5pdGlvbiBSZWdpc3RlcnMKKyAqIFJlZ2lzdGVyOiBDVENQX0RFRl8wCisgKiBSZWdpc3RlcjogQ1RDUF9ERUZfMQorICovCisjZGVmaW5lIFNfQ1RDUF9ERUZfQ1JDX1RYT1IgICAgICAgICAgIF9TQl9NQUtFNjQoMCkKKyNkZWZpbmUgTV9DVENQX0RFRl9DUkNfVFhPUiAgICAgICAgICAgX1NCX01BS0VNQVNLKDMyLFNfQ1RDUF9ERUZfQ1JDX1RYT1IpCisjZGVmaW5lIFZfQ1RDUF9ERUZfQ1JDX1RYT1IocikgICAgICAgIF9TQl9NQUtFVkFMVUUocixTX0NUQ1BfREVGX0NSQ19UWE9SKQorI2RlZmluZSBHX0NUQ1BfREVGX0NSQ19UWE9SKHIpICAgICAgICBfU0JfR0VUVkFMVUUocixTX0NUQ1BfREVGX0NSQ19UWE9SLFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1fQ1RDUF9ERUZfQ1JDX1RYT1IpCisKKyNkZWZpbmUgU19DVENQX0RFRl9UQ1BDU19JTklUICAgICAgICAgX1NCX01BS0U2NCgzMikKKyNkZWZpbmUgTV9DVENQX0RFRl9UQ1BDU19JTklUICAgICAgICAgX1NCX01BS0VNQVNLKDE2LFNfQ1RDUF9ERUZfVENQQ1NfSU5JVCkKKyNkZWZpbmUgVl9DVENQX0RFRl9UQ1BDU19JTklUKHIpICAgICAgX1NCX01BS0VWQUxVRShyLFNfQ1RDUF9ERUZfVENQQ1NfSU5JVCkKKyNkZWZpbmUgR19DVENQX0RFRl9UQ1BDU19JTklUKHIpICAgICAgX1NCX0dFVFZBTFVFKHIsU19DVENQX0RFRl9UQ1BDU19JTklULFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1fQ1RDUF9ERUZfVENQQ1NfSU5JVCkKKworI2RlZmluZSBTX0NUQ1BfREVGX0NSQ19XSURUSCAgICAgICAgICBfU0JfTUFLRTY0KDQ4KQorI2RlZmluZSBNX0NUQ1BfREVGX0NSQ19XSURUSCAgICAgICAgICBfU0JfTUFLRU1BU0soMixTX0NUQ1BfREVGX0NSQ19XSURUSCkKKyNkZWZpbmUgVl9DVENQX0RFRl9DUkNfV0lEVEgocikgICAgICAgX1NCX01BS0VWQUxVRShyLFNfQ1RDUF9ERUZfQ1JDX1dJRFRIKQorI2RlZmluZSBHX0NUQ1BfREVGX0NSQ19XSURUSChyKSAgICAgICBfU0JfR0VUVkFMVUUocixTX0NUQ1BfREVGX0NSQ19XSURUSCxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNX0NUQ1BfREVGX0NSQ19XSURUSCkKKworI2RlZmluZSBLX0NUQ1BfREVGX0NSQ19XSURUSF80ICAgICAgICAwCisjZGVmaW5lIEtfQ1RDUF9ERUZfQ1JDX1dJRFRIXzIgICAgICAgIDEKKyNkZWZpbmUgS19DVENQX0RFRl9DUkNfV0lEVEhfMSAgICAgICAgMgorCisjZGVmaW5lIE1fQ1RDUF9ERUZfQ1JDX0JJVF9PUkRFUiAgICAgIF9TQl9NQUtFTUFTSzEoNTApCisjZW5kaWYgLyogMTI1MCBQQVNTMyB8fCAxMTJ4IFBBU1MxICovCisKKworLyoKKyAqIERhdGEgTW92ZXIgRGVzY3JpcHRvciBEb3VibGV3b3JkICJBIiAgKFRhYmxlIDctMjYpCisgKi8KKworI2RlZmluZSBTX0RNX0RTQ1JBX0RTVF9BRERSICAgICAgICAgX1NCX01BS0U2NCgwKQorI2RlZmluZSBNX0RNX0RTQ1JBX0RTVF9BRERSICAgICAgICAgX1NCX01BS0VNQVNLKDQwLFNfRE1fRFNDUkFfRFNUX0FERFIpCisKKyNkZWZpbmUgTV9ETV9EU0NSQV9VTl9ERVNUICAgICAgICAgIF9TQl9NQUtFTUFTSzEoNDApCisjZGVmaW5lIE1fRE1fRFNDUkFfVU5fU1JDICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDQxKQorI2RlZmluZSBNX0RNX0RTQ1JBX0lOVEVSUlVQVCAgICAgICAgX1NCX01BS0VNQVNLMSg0MikKKyNpZiBTSUJZVEVfSERSX0ZFQVRVUkVfVVBfVE8oMTI1MCwgUEFTUzEpCisjZGVmaW5lIE1fRE1fRFNDUkFfVEhST1RUTEUgICAgICAgICBfU0JfTUFLRU1BU0sxKDQzKQorI2VuZGlmIC8qIHVwIHRvIDEyNTAgUEFTUzEgKi8KKworI2RlZmluZSBTX0RNX0RTQ1JBX0RJUl9ERVNUICAgICAgICAgX1NCX01BS0U2NCg0NCkKKyNkZWZpbmUgTV9ETV9EU0NSQV9ESVJfREVTVCAgICAgICAgIF9TQl9NQUtFTUFTSygyLFNfRE1fRFNDUkFfRElSX0RFU1QpCisjZGVmaW5lIFZfRE1fRFNDUkFfRElSX0RFU1QoeCkgICAgICBfU0JfTUFLRVZBTFVFKHgsU19ETV9EU0NSQV9ESVJfREVTVCkKKyNkZWZpbmUgR19ETV9EU0NSQV9ESVJfREVTVCh4KSAgICAgIF9TQl9HRVRWQUxVRSh4LFNfRE1fRFNDUkFfRElSX0RFU1QsTV9ETV9EU0NSQV9ESVJfREVTVCkKKworI2RlZmluZSBLX0RNX0RTQ1JBX0RJUl9ERVNUX0lOQ1IgICAgMAorI2RlZmluZSBLX0RNX0RTQ1JBX0RJUl9ERVNUX0RFQ1IgICAgMQorI2RlZmluZSBLX0RNX0RTQ1JBX0RJUl9ERVNUX0NPTlNUICAgMgorCisjZGVmaW5lIFZfRE1fRFNDUkFfRElSX0RFU1RfSU5DUiAgICBfU0JfTUFLRVZBTFVFKEtfRE1fRFNDUkFfRElSX0RFU1RfSU5DUixTX0RNX0RTQ1JBX0RJUl9ERVNUKQorI2RlZmluZSBWX0RNX0RTQ1JBX0RJUl9ERVNUX0RFQ1IgICAgX1NCX01BS0VWQUxVRShLX0RNX0RTQ1JBX0RJUl9ERVNUX0RFQ1IsU19ETV9EU0NSQV9ESVJfREVTVCkKKyNkZWZpbmUgVl9ETV9EU0NSQV9ESVJfREVTVF9DT05TVCAgIF9TQl9NQUtFVkFMVUUoS19ETV9EU0NSQV9ESVJfREVTVF9DT05TVCxTX0RNX0RTQ1JBX0RJUl9ERVNUKQorCisjZGVmaW5lIFNfRE1fRFNDUkFfRElSX1NSQyAgICAgICAgICBfU0JfTUFLRTY0KDQ2KQorI2RlZmluZSBNX0RNX0RTQ1JBX0RJUl9TUkMgICAgICAgICAgX1NCX01BS0VNQVNLKDIsU19ETV9EU0NSQV9ESVJfU1JDKQorI2RlZmluZSBWX0RNX0RTQ1JBX0RJUl9TUkMoeCkgICAgICAgX1NCX01BS0VWQUxVRSh4LFNfRE1fRFNDUkFfRElSX1NSQykKKyNkZWZpbmUgR19ETV9EU0NSQV9ESVJfU1JDKHgpICAgICAgIF9TQl9HRVRWQUxVRSh4LFNfRE1fRFNDUkFfRElSX1NSQyxNX0RNX0RTQ1JBX0RJUl9TUkMpCisKKyNkZWZpbmUgS19ETV9EU0NSQV9ESVJfU1JDX0lOQ1IgICAgIDAKKyNkZWZpbmUgS19ETV9EU0NSQV9ESVJfU1JDX0RFQ1IgICAgIDEKKyNkZWZpbmUgS19ETV9EU0NSQV9ESVJfU1JDX0NPTlNUICAgIDIKKworI2RlZmluZSBWX0RNX0RTQ1JBX0RJUl9TUkNfSU5DUiAgICAgX1NCX01BS0VWQUxVRShLX0RNX0RTQ1JBX0RJUl9TUkNfSU5DUixTX0RNX0RTQ1JBX0RJUl9TUkMpCisjZGVmaW5lIFZfRE1fRFNDUkFfRElSX1NSQ19ERUNSICAgICBfU0JfTUFLRVZBTFVFKEtfRE1fRFNDUkFfRElSX1NSQ19ERUNSLFNfRE1fRFNDUkFfRElSX1NSQykKKyNkZWZpbmUgVl9ETV9EU0NSQV9ESVJfU1JDX0NPTlNUICAgIF9TQl9NQUtFVkFMVUUoS19ETV9EU0NSQV9ESVJfU1JDX0NPTlNULFNfRE1fRFNDUkFfRElSX1NSQykKKworCisjZGVmaW5lIE1fRE1fRFNDUkFfWkVST19NRU0gICAgICAgICBfU0JfTUFLRU1BU0sxKDQ4KQorI2RlZmluZSBNX0RNX0RTQ1JBX1BSRUZFVENIICAgICAgICAgX1NCX01BS0VNQVNLMSg0OSkKKyNkZWZpbmUgTV9ETV9EU0NSQV9MMkNfREVTVCAgICAgICAgIF9TQl9NQUtFTUFTSzEoNTApCisjZGVmaW5lIE1fRE1fRFNDUkFfTDJDX1NSQyAgICAgICAgICBfU0JfTUFLRU1BU0sxKDUxKQorCisjaWYgU0lCWVRFX0hEUl9GRUFUVVJFKDEyNTAsIFBBU1MyKSB8fCBTSUJZVEVfSERSX0ZFQVRVUkUoMTEyeCwgUEFTUzEpCisjZGVmaW5lIE1fRE1fRFNDUkFfUkRfQktPRkYJICAgIF9TQl9NQUtFTUFTSzEoNTIpCisjZGVmaW5lIE1fRE1fRFNDUkFfV1JfQktPRkYJICAgIF9TQl9NQUtFTUFTSzEoNTMpCisjZW5kaWYgLyogMTI1MCBQQVNTMiB8fCAxMTJ4IFBBU1MxICovCisKKyNpZiBTSUJZVEVfSERSX0ZFQVRVUkUoMTI1MCwgUEFTUzMpIHx8IFNJQllURV9IRFJfRkVBVFVSRSgxMTJ4LCBQQVNTMSkKKyNkZWZpbmUgTV9ETV9EU0NSQV9UQ1BDU19FTiAgICAgICAgIF9TQl9NQUtFTUFTSzEoNTQpCisjZGVmaW5lIE1fRE1fRFNDUkFfVENQQ1NfUkVTICAgICAgICBfU0JfTUFLRU1BU0sxKDU1KQorI2RlZmluZSBNX0RNX0RTQ1JBX1RDUENTX0FQICAgICAgICAgX1NCX01BS0VNQVNLMSg1NikKKyNkZWZpbmUgTV9ETV9EU0NSQV9DUkNfRU4gICAgICAgICAgIF9TQl9NQUtFTUFTSzEoNTcpCisjZGVmaW5lIE1fRE1fRFNDUkFfQ1JDX1JFUyAgICAgICAgICBfU0JfTUFLRU1BU0sxKDU4KQorI2RlZmluZSBNX0RNX0RTQ1JBX0NSQ19BUCAgICAgICAgICAgX1NCX01BS0VNQVNLMSg1OSkKKyNkZWZpbmUgTV9ETV9EU0NSQV9DUkNfREZOICAgICAgICAgIF9TQl9NQUtFTUFTSzEoNjApCisjZGVmaW5lIE1fRE1fRFNDUkFfQ1JDX1hCSVQgICAgICAgICBfU0JfTUFLRU1BU0sxKDYxKQorI2VuZGlmIC8qIDEyNTAgUEFTUzMgfHwgMTEyeCBQQVNTMSAqLworCisjZGVmaW5lIE1fRE1fRFNDUkFfUkVTRVJWRUQyICAgICAgICBfU0JfTUFLRU1BU0soMyw2MSkKKworLyoKKyAqIERhdGEgTW92ZXIgRGVzY3JpcHRvciBEb3VibGV3b3JkICJCIiAgKFRhYmxlIDctMjUpCisgKi8KKworI2RlZmluZSBTX0RNX0RTQ1JCX1NSQ19BRERSICAgICAgICAgX1NCX01BS0U2NCgwKQorI2RlZmluZSBNX0RNX0RTQ1JCX1NSQ19BRERSICAgICAgICAgX1NCX01BS0VNQVNLKDQwLFNfRE1fRFNDUkJfU1JDX0FERFIpCisKKyNkZWZpbmUgU19ETV9EU0NSQl9TUkNfTEVOR1RIICAgICAgIF9TQl9NQUtFNjQoNDApCisjZGVmaW5lIE1fRE1fRFNDUkJfU1JDX0xFTkdUSCAgICAgICBfU0JfTUFLRU1BU0soMjAsU19ETV9EU0NSQl9TUkNfTEVOR1RIKQorI2RlZmluZSBWX0RNX0RTQ1JCX1NSQ19MRU5HVEgoeCkgICAgX1NCX01BS0VWQUxVRSh4LFNfRE1fRFNDUkJfU1JDX0xFTkdUSCkKKyNkZWZpbmUgR19ETV9EU0NSQl9TUkNfTEVOR1RIKHgpICAgIF9TQl9HRVRWQUxVRSh4LFNfRE1fRFNDUkJfU1JDX0xFTkdUSCxNX0RNX0RTQ1JCX1NSQ19MRU5HVEgpCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NpYnl0ZS9zYjEyNTBfZ2VuYnVzLmggYi9pbmNsdWRlL2FzbS1taXBzL3NpYnl0ZS9zYjEyNTBfZ2VuYnVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ5ZGZhYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc2lieXRlL3NiMTI1MF9nZW5idXMuaApAQCAtMCwwICsxLDI3NiBAQAorLyogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICogIFNCMTI1MCBCb2FyZCBTdXBwb3J0IFBhY2thZ2UKKyAgICAqICAKKyAgICAqICBHZW5lcmljIEJ1cyBDb25zdGFudHMgICAgICAgICAgICAgICAgICAgICBGaWxlOiBzYjEyNTBfZ2VuYnVzLmgKKyAgICAqICAKKyAgICAqICBUaGlzIG1vZHVsZSBjb250YWlucyBjb25zdGFudHMgYW5kIG1hY3JvcyB1c2VmdWwgZm9yIAorICAgICogIG1hbmlwdWxhdGluZyB0aGUgU0IxMjUwJ3MgR2VuZXJpYyBCdXMgaW50ZXJmYWNlCisgICAgKiAgCisgICAgKiAgU0IxMjUwIHNwZWNpZmljYXRpb24gbGV2ZWw6ICBVc2VyJ3MgbWFudWFsIDEvMDIvMDIKKyAgICAqICAKKyAgICAqICBBdXRob3I6ICBNaXRjaCBMaWNodGVuYmVyZworICAgICogIAorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAgCisgICAgKgorICAgICogIENvcHlyaWdodCAyMDAwLDIwMDEsMjAwMiwyMDAzCisgICAgKiAgQnJvYWRjb20gQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICAgKiAgCisgICAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAKKyAgICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyAKKyAgICAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiAKKyAgICAqICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgICAqCisgICAgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgICAqCisgICAgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIAorICAgICogIE1BIDAyMTExLTEzMDcgVVNBCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKworI2lmbmRlZiBfU0IxMjUwX0dFTkJVU19ICisjZGVmaW5lIF9TQjEyNTBfR0VOQlVTX0gKKworI2luY2x1ZGUgInNiMTI1MF9kZWZzLmgiCisKKy8qCisgKiBHZW5lcmljIEJ1cyBSZWdpb24gQ29uZmlndXJhdGlvbiBSZWdpc3RlcnMgKFRhYmxlIDExLTQpCisgKi8KKworI2RlZmluZSBTX0lPX1JEWV9BQ1RJVkUgICAgICAgICAwCisjZGVmaW5lIE1fSU9fUkRZX0FDVElWRQkJX1NCX01BS0VNQVNLMShTX0lPX1JEWV9BQ1RJVkUpCisKKyNkZWZpbmUgU19JT19FTkFfUkRZICAgICAgICAgICAgMQorI2RlZmluZSBNX0lPX0VOQV9SRFkJCV9TQl9NQUtFTUFTSzEoU19JT19FTkFfUkRZKQorCisjZGVmaW5lIFNfSU9fV0lEVEhfU0VMCQkyCisjZGVmaW5lIE1fSU9fV0lEVEhfU0VMCQlfU0JfTUFLRU1BU0soMixTX0lPX1dJRFRIX1NFTCkKKyNkZWZpbmUgS19JT19XSURUSF9TRUxfMQkwCisjZGVmaW5lIEtfSU9fV0lEVEhfU0VMXzIJMQorI2lmIFNJQllURV9IRFJfRkVBVFVSRSgxMjUwLCBQQVNTMikgfHwgU0lCWVRFX0hEUl9GRUFUVVJFKDExMngsIFBBU1MxKQorI2RlZmluZSBLX0lPX1dJRFRIX1NFTF8xTCAgICAgICAyCisjZW5kaWYgLyogMTI1MCBQQVNTMiB8fCAxMTJ4IFBBU1MxICovCisjZGVmaW5lIEtfSU9fV0lEVEhfU0VMXzQJMworI2RlZmluZSBWX0lPX1dJRFRIX1NFTCh4KQlfU0JfTUFLRVZBTFVFKHgsU19JT19XSURUSF9TRUwpCisjZGVmaW5lIEdfSU9fV0lEVEhfU0VMKHgpCV9TQl9HRVRWQUxVRSh4LFNfSU9fV0lEVEhfU0VMLE1fSU9fV0lEVEhfU0VMKQorCisjZGVmaW5lIFNfSU9fUEFSSVRZX0VOQQkJNAorI2RlZmluZSBNX0lPX1BBUklUWV9FTkEJCV9TQl9NQUtFTUFTSzEoU19JT19QQVJJVFlfRU5BKQorI2lmIFNJQllURV9IRFJfRkVBVFVSRSgxMjUwLCBQQVNTMikgfHwgU0lCWVRFX0hEUl9GRUFUVVJFKDExMngsIFBBU1MxKQorI2RlZmluZSBTX0lPX0JVUlNUX0VOCQk1CisjZGVmaW5lIE1fSU9fQlVSU1RfRU4JCV9TQl9NQUtFTUFTSzEoU19JT19CVVJTVF9FTikKKyNlbmRpZiAvKiAxMjUwIFBBU1MyIHx8IDExMnggUEFTUzEgKi8KKyNkZWZpbmUgU19JT19QQVJJVFlfT0RECQk2CisjZGVmaW5lIE1fSU9fUEFSSVRZX09ERAkJX1NCX01BS0VNQVNLMShTX0lPX1BBUklUWV9PREQpCisjZGVmaW5lIFNfSU9fTk9OTVVYCQk3CisjZGVmaW5lIE1fSU9fTk9OTVVYCQlfU0JfTUFLRU1BU0sxKFNfSU9fTk9OTVVYKQorCisjZGVmaW5lIFNfSU9fVElNRU9VVAkJOAorI2RlZmluZSBNX0lPX1RJTUVPVVQJCV9TQl9NQUtFTUFTSyg4LFNfSU9fVElNRU9VVCkKKyNkZWZpbmUgVl9JT19USU1FT1VUKHgpCQlfU0JfTUFLRVZBTFVFKHgsU19JT19USU1FT1VUKQorI2RlZmluZSBHX0lPX1RJTUVPVVQoeCkJCV9TQl9HRVRWQUxVRSh4LFNfSU9fVElNRU9VVCxNX0lPX1RJTUVPVVQpCisKKy8qCisgKiBHZW5lcmljIEJ1cyBSZWdpb24gU2l6ZSByZWdpc3RlciAoVGFibGUgMTEtNSkKKyAqLworCisjZGVmaW5lIFNfSU9fTVVMVF9TSVpFCQkwCisjZGVmaW5lIE1fSU9fTVVMVF9TSVpFCQlfU0JfTUFLRU1BU0soMTIsU19JT19NVUxUX1NJWkUpCisjZGVmaW5lIFZfSU9fTVVMVF9TSVpFKHgpCV9TQl9NQUtFVkFMVUUoeCxTX0lPX01VTFRfU0laRSkKKyNkZWZpbmUgR19JT19NVUxUX1NJWkUoeCkJX1NCX0dFVFZBTFVFKHgsU19JT19NVUxUX1NJWkUsTV9JT19NVUxUX1NJWkUpCisKKyNkZWZpbmUgU19JT19SRUdTSVpFCQkxNgkgLyogIyBiaXRzIHRvIHNoaWZ0IHNpemUgZm9yIHRoaXMgcmVnICovCisKKy8qCisgKiBHZW5lcmljIEJ1cyBSZWdpb24gQWRkcmVzcyAoVGFibGUgMTEtNikKKyAqLworCisjZGVmaW5lIFNfSU9fU1RBUlRfQUREUgkJMAorI2RlZmluZSBNX0lPX1NUQVJUX0FERFIJCV9TQl9NQUtFTUFTSygxNCxTX0lPX1NUQVJUX0FERFIpCisjZGVmaW5lIFZfSU9fU1RBUlRfQUREUih4KQlfU0JfTUFLRVZBTFVFKHgsU19JT19TVEFSVF9BRERSKQorI2RlZmluZSBHX0lPX1NUQVJUX0FERFIoeCkJX1NCX0dFVFZBTFVFKHgsU19JT19TVEFSVF9BRERSLE1fSU9fU1RBUlRfQUREUikKKworI2RlZmluZSBTX0lPX0FERFJCQVNFCQkxNgkgLyogIyBiaXRzIHRvIHNoaWZ0IGFkZHIgZm9yIHRoaXMgcmVnICovCisKKy8qCisgKiBHZW5lcmljIEJ1cyBSZWdpb24gMCBUaW1pbmcgUmVnaXN0ZXJzIChUYWJsZSAxMS03KQorICovCisKKyNkZWZpbmUgU19JT19BTEVfV0lEVEgJCTAKKyNkZWZpbmUgTV9JT19BTEVfV0lEVEgJCV9TQl9NQUtFTUFTSygzLFNfSU9fQUxFX1dJRFRIKQorI2RlZmluZSBWX0lPX0FMRV9XSURUSCh4KQlfU0JfTUFLRVZBTFVFKHgsU19JT19BTEVfV0lEVEgpCisjZGVmaW5lIEdfSU9fQUxFX1dJRFRIKHgpCV9TQl9HRVRWQUxVRSh4LFNfSU9fQUxFX1dJRFRILE1fSU9fQUxFX1dJRFRIKQorCisjaWYgU0lCWVRFX0hEUl9GRUFUVVJFKDEyNTAsIFBBU1MyKSB8fCBTSUJZVEVfSERSX0ZFQVRVUkUoMTEyeCwgUEFTUzEpCisjZGVmaW5lIE1fSU9fRUFSTFlfQ1MJICAgICAgICBfU0JfTUFLRU1BU0sxKDMpCisjZW5kaWYgLyogMTI1MCBQQVNTMiB8fCAxMTJ4IFBBU1MxICovCisKKyNkZWZpbmUgU19JT19BTEVfVE9fQ1MJCTQKKyNkZWZpbmUgTV9JT19BTEVfVE9fQ1MJCV9TQl9NQUtFTUFTSygyLFNfSU9fQUxFX1RPX0NTKQorI2RlZmluZSBWX0lPX0FMRV9UT19DUyh4KQlfU0JfTUFLRVZBTFVFKHgsU19JT19BTEVfVE9fQ1MpCisjZGVmaW5lIEdfSU9fQUxFX1RPX0NTKHgpCV9TQl9HRVRWQUxVRSh4LFNfSU9fQUxFX1RPX0NTLE1fSU9fQUxFX1RPX0NTKQorCisjaWYgU0lCWVRFX0hEUl9GRUFUVVJFKDEyNTAsIFBBU1MyKSB8fCBTSUJZVEVfSERSX0ZFQVRVUkUoMTEyeCwgUEFTUzEpCisjZGVmaW5lIFNfSU9fQlVSU1RfV0lEVEggICAgICAgICAgIF9TQl9NQUtFNjQoNikKKyNkZWZpbmUgTV9JT19CVVJTVF9XSURUSCAgICAgICAgICAgX1NCX01BS0VNQVNLKDIsU19JT19CVVJTVF9XSURUSCkKKyNkZWZpbmUgVl9JT19CVVJTVF9XSURUSCh4KSAgICAgICAgX1NCX01BS0VWQUxVRSh4LFNfSU9fQlVSU1RfV0lEVEgpCisjZGVmaW5lIEdfSU9fQlVSU1RfV0lEVEgoeCkgICAgICAgIF9TQl9HRVRWQUxVRSh4LFNfSU9fQlVSU1RfV0lEVEgsTV9JT19CVVJTVF9XSURUSCkKKyNlbmRpZiAvKiAxMjUwIFBBU1MyIHx8IDExMnggUEFTUzEgKi8KKworI2RlZmluZSBTX0lPX0NTX1dJRFRICQk4CisjZGVmaW5lIE1fSU9fQ1NfV0lEVEgJCV9TQl9NQUtFTUFTSyg1LFNfSU9fQ1NfV0lEVEgpCisjZGVmaW5lIFZfSU9fQ1NfV0lEVEgoeCkJX1NCX01BS0VWQUxVRSh4LFNfSU9fQ1NfV0lEVEgpCisjZGVmaW5lIEdfSU9fQ1NfV0lEVEgoeCkJX1NCX0dFVFZBTFVFKHgsU19JT19DU19XSURUSCxNX0lPX0NTX1dJRFRIKQorCisjZGVmaW5lIFNfSU9fUkRZX1NNUExFCQkxMworI2RlZmluZSBNX0lPX1JEWV9TTVBMRQkJX1NCX01BS0VNQVNLKDMsU19JT19SRFlfU01QTEUpCisjZGVmaW5lIFZfSU9fUkRZX1NNUExFKHgpCV9TQl9NQUtFVkFMVUUoeCxTX0lPX1JEWV9TTVBMRSkKKyNkZWZpbmUgR19JT19SRFlfU01QTEUoeCkJX1NCX0dFVFZBTFVFKHgsU19JT19SRFlfU01QTEUsTV9JT19SRFlfU01QTEUpCisKKworLyoKKyAqIEdlbmVyaWMgQnVzIFRpbWluZyAxIFJlZ2lzdGVycyAoVGFibGUgMTEtOCkKKyAqLworCisjZGVmaW5lIFNfSU9fQUxFX1RPX1dSSVRFCTAKKyNkZWZpbmUgTV9JT19BTEVfVE9fV1JJVEUJX1NCX01BS0VNQVNLKDMsU19JT19BTEVfVE9fV1JJVEUpCisjZGVmaW5lIFZfSU9fQUxFX1RPX1dSSVRFKHgpCV9TQl9NQUtFVkFMVUUoeCxTX0lPX0FMRV9UT19XUklURSkKKyNkZWZpbmUgR19JT19BTEVfVE9fV1JJVEUoeCkJX1NCX0dFVFZBTFVFKHgsU19JT19BTEVfVE9fV1JJVEUsTV9JT19BTEVfVE9fV1JJVEUpCisKKyNpZiBTSUJZVEVfSERSX0ZFQVRVUkUoMTI1MCwgUEFTUzIpIHx8IFNJQllURV9IRFJfRkVBVFVSRSgxMTJ4LCBQQVNTMSkKKyNkZWZpbmUgTV9JT19SRFlfU1lOQwkgICAgICAgIF9TQl9NQUtFTUFTSzEoMykKKyNlbmRpZiAvKiAxMjUwIFBBU1MyIHx8IDExMnggUEFTUzEgKi8KKworI2RlZmluZSBTX0lPX1dSSVRFX1dJRFRICTQKKyNkZWZpbmUgTV9JT19XUklURV9XSURUSAlfU0JfTUFLRU1BU0soNCxTX0lPX1dSSVRFX1dJRFRIKQorI2RlZmluZSBWX0lPX1dSSVRFX1dJRFRIKHgpCV9TQl9NQUtFVkFMVUUoeCxTX0lPX1dSSVRFX1dJRFRIKQorI2RlZmluZSBHX0lPX1dSSVRFX1dJRFRIKHgpCV9TQl9HRVRWQUxVRSh4LFNfSU9fV1JJVEVfV0lEVEgsTV9JT19XUklURV9XSURUSCkKKworI2RlZmluZSBTX0lPX0lETEVfQ1lDTEUJCTgKKyNkZWZpbmUgTV9JT19JRExFX0NZQ0xFCQlfU0JfTUFLRU1BU0soNCxTX0lPX0lETEVfQ1lDTEUpCisjZGVmaW5lIFZfSU9fSURMRV9DWUNMRSh4KQlfU0JfTUFLRVZBTFVFKHgsU19JT19JRExFX0NZQ0xFKQorI2RlZmluZSBHX0lPX0lETEVfQ1lDTEUoeCkJX1NCX0dFVFZBTFVFKHgsU19JT19JRExFX0NZQ0xFLE1fSU9fSURMRV9DWUNMRSkKKworI2RlZmluZSBTX0lPX09FX1RPX0NTCQkxMgorI2RlZmluZSBNX0lPX09FX1RPX0NTCQlfU0JfTUFLRU1BU0soMixTX0lPX09FX1RPX0NTKQorI2RlZmluZSBWX0lPX09FX1RPX0NTKHgpCV9TQl9NQUtFVkFMVUUoeCxTX0lPX09FX1RPX0NTKQorI2RlZmluZSBHX0lPX09FX1RPX0NTKHgpCV9TQl9HRVRWQUxVRSh4LFNfSU9fT0VfVE9fQ1MsTV9JT19PRV9UT19DUykKKworI2RlZmluZSBTX0lPX0NTX1RPX09FCQkxNAorI2RlZmluZSBNX0lPX0NTX1RPX09FCQlfU0JfTUFLRU1BU0soMixTX0lPX0NTX1RPX09FKQorI2RlZmluZSBWX0lPX0NTX1RPX09FKHgpCV9TQl9NQUtFVkFMVUUoeCxTX0lPX0NTX1RPX09FKQorI2RlZmluZSBHX0lPX0NTX1RPX09FKHgpCV9TQl9HRVRWQUxVRSh4LFNfSU9fQ1NfVE9fT0UsTV9JT19DU19UT19PRSkKKworLyoKKyAqIEdlbmVyaWMgQnVzIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKFRhYmxlIDExLTkpCisgKi8KKworI2RlZmluZSBNX0lPX0NTX0VSUl9JTlQJCV9TQl9NQUtFTUFTSygwLDgpCisjZGVmaW5lIE1fSU9fQ1MwX0VSUl9JTlQJX1NCX01BS0VNQVNLMSgwKQorI2RlZmluZSBNX0lPX0NTMV9FUlJfSU5UCV9TQl9NQUtFTUFTSzEoMSkKKyNkZWZpbmUgTV9JT19DUzJfRVJSX0lOVAlfU0JfTUFLRU1BU0sxKDIpCisjZGVmaW5lIE1fSU9fQ1MzX0VSUl9JTlQJX1NCX01BS0VNQVNLMSgzKQorI2RlZmluZSBNX0lPX0NTNF9FUlJfSU5UCV9TQl9NQUtFTUFTSzEoNCkKKyNkZWZpbmUgTV9JT19DUzVfRVJSX0lOVAlfU0JfTUFLRU1BU0sxKDUpCisjZGVmaW5lIE1fSU9fQ1M2X0VSUl9JTlQJX1NCX01BS0VNQVNLMSg2KQorI2RlZmluZSBNX0lPX0NTN19FUlJfSU5UCV9TQl9NQUtFTUFTSzEoNykKKworI2RlZmluZSBNX0lPX1JEX1BBUl9JTlQJCV9TQl9NQUtFTUFTSzEoOSkKKyNkZWZpbmUgTV9JT19USU1FT1VUX0lOVAlfU0JfTUFLRU1BU0sxKDEwKQorI2RlZmluZSBNX0lPX0lMTF9BRERSX0lOVAlfU0JfTUFLRU1BU0sxKDExKQorI2RlZmluZSBNX0lPX01VTFRfQ1NfSU5UCV9TQl9NQUtFTUFTSzEoMTIpCisjaWYgU0lCWVRFX0hEUl9GRUFUVVJFKDEyNTAsIFBBU1MyKSB8fCBTSUJZVEVfSERSX0ZFQVRVUkUoMTEyeCwgUEFTUzEpCisjZGVmaW5lIE1fSU9fQ09IX0VSUgkgICAgICAgIF9TQl9NQUtFTUFTSzEoMTQpCisjZW5kaWYgLyogMTI1MCBQQVNTMiB8fCAxMTJ4IFBBU1MxICovCisKKy8qCisgKiBQQ01DSUEgY29uZmlndXJhdGlvbiByZWdpc3RlciAoVGFibGUgMTItNikKKyAqLworCisjZGVmaW5lIE1fUENNQ0lBX0NGR19BVFRSTUVNCV9TQl9NQUtFTUFTSzEoMCkKKyNkZWZpbmUgTV9QQ01DSUFfQ0ZHXzNWRU4JX1NCX01BS0VNQVNLMSgxKQorI2RlZmluZSBNX1BDTUNJQV9DRkdfNVZFTglfU0JfTUFLRU1BU0sxKDIpCisjZGVmaW5lIE1fUENNQ0lBX0NGR19WUFBFTglfU0JfTUFLRU1BU0sxKDMpCisjZGVmaW5lIE1fUENNQ0lBX0NGR19SRVNFVAlfU0JfTUFLRU1BU0sxKDQpCisjZGVmaW5lIE1fUENNQ0lBX0NGR19BUFdST05FTglfU0JfTUFLRU1BU0sxKDUpCisjZGVmaW5lIE1fUENNQ0lBX0NGR19DRE1BU0sJX1NCX01BS0VNQVNLMSg2KQorI2RlZmluZSBNX1BDTUNJQV9DRkdfV1BNQVNLCV9TQl9NQUtFTUFTSzEoNykKKyNkZWZpbmUgTV9QQ01DSUFfQ0ZHX1JEWU1BU0sJX1NCX01BS0VNQVNLMSg4KQorI2RlZmluZSBNX1BDTUNJQV9DRkdfUFdSQ1RMCV9TQl9NQUtFTUFTSzEoOSkKKworLyoKKyAqIFBDTUNJQSBzdGF0dXMgcmVnaXN0ZXIgKFRhYmxlIDEyLTcpCisgKi8KKworI2RlZmluZSBNX1BDTUNJQV9TVEFUVVNfQ0QxCV9TQl9NQUtFTUFTSzEoMCkKKyNkZWZpbmUgTV9QQ01DSUFfU1RBVFVTX0NEMglfU0JfTUFLRU1BU0sxKDEpCisjZGVmaW5lIE1fUENNQ0lBX1NUQVRVU19WUzEJX1NCX01BS0VNQVNLMSgyKQorI2RlZmluZSBNX1BDTUNJQV9TVEFUVVNfVlMyCV9TQl9NQUtFTUFTSzEoMykKKyNkZWZpbmUgTV9QQ01DSUFfU1RBVFVTX1dQCV9TQl9NQUtFTUFTSzEoNCkKKyNkZWZpbmUgTV9QQ01DSUFfU1RBVFVTX1JEWQlfU0JfTUFLRU1BU0sxKDUpCisjZGVmaW5lIE1fUENNQ0lBX1NUQVRVU18zVkVOCV9TQl9NQUtFTUFTSzEoNikKKyNkZWZpbmUgTV9QQ01DSUFfU1RBVFVTXzVWRU4JX1NCX01BS0VNQVNLMSg3KQorI2RlZmluZSBNX1BDTUNJQV9TVEFUVVNfQ0RDSEcJX1NCX01BS0VNQVNLMSg4KQorI2RlZmluZSBNX1BDTUNJQV9TVEFUVVNfV1BDSEcJX1NCX01BS0VNQVNLMSg5KQorI2RlZmluZSBNX1BDTUNJQV9TVEFUVVNfUkRZQ0hHCV9TQl9NQUtFTUFTSzEoMTApCisKKy8qCisgKiBHUElPIEludGVycnVwdCBUeXBlIFJlZ2lzdGVyICh0YWJsZSAxMy0zKQorICovCisKKyNkZWZpbmUgS19HUElPX0lOVFJfRElTQUJMRQkwCisjZGVmaW5lIEtfR1BJT19JTlRSX0VER0UJMQorI2RlZmluZSBLX0dQSU9fSU5UUl9MRVZFTAkyCisjZGVmaW5lIEtfR1BJT19JTlRSX1NQTElUCTMKKworI2RlZmluZSBTX0dQSU9fSU5UUl9UWVBFWChuKQkoKChuKS8yKSoyKQorI2RlZmluZSBNX0dQSU9fSU5UUl9UWVBFWChuKQlfU0JfTUFLRU1BU0soMixTX0dQSU9fSU5UUl9UWVBFWChuKSkKKyNkZWZpbmUgVl9HUElPX0lOVFJfVFlQRVgobix4KQlfU0JfTUFLRVZBTFVFKHgsU19HUElPX0lOVFJfVFlQRVgobikpCisjZGVmaW5lIEdfR1BJT19JTlRSX1RZUEVYKG4seCkJX1NCX0dFVFZBTFVFKHgsU19HUElPX0lOVFJfVFlQRVgobiksTV9HUElPX0lOVFJfVFlQRVgobikpCisKKyNkZWZpbmUgU19HUElPX0lOVFJfVFlQRTAJMAorI2RlZmluZSBNX0dQSU9fSU5UUl9UWVBFMAlfU0JfTUFLRU1BU0soMixTX0dQSU9fSU5UUl9UWVBFMCkKKyNkZWZpbmUgVl9HUElPX0lOVFJfVFlQRTAoeCkJX1NCX01BS0VWQUxVRSh4LFNfR1BJT19JTlRSX1RZUEUwKQorI2RlZmluZSBHX0dQSU9fSU5UUl9UWVBFMCh4KQlfU0JfR0VUVkFMVUUoeCxTX0dQSU9fSU5UUl9UWVBFMCxNX0dQSU9fSU5UUl9UWVBFMCkKKworI2RlZmluZSBTX0dQSU9fSU5UUl9UWVBFMgkyCisjZGVmaW5lIE1fR1BJT19JTlRSX1RZUEUyCV9TQl9NQUtFTUFTSygyLFNfR1BJT19JTlRSX1RZUEUyKQorI2RlZmluZSBWX0dQSU9fSU5UUl9UWVBFMih4KQlfU0JfTUFLRVZBTFVFKHgsU19HUElPX0lOVFJfVFlQRTIpCisjZGVmaW5lIEdfR1BJT19JTlRSX1RZUEUyKHgpCV9TQl9HRVRWQUxVRSh4LFNfR1BJT19JTlRSX1RZUEUyLE1fR1BJT19JTlRSX1RZUEUyKQorCisjZGVmaW5lIFNfR1BJT19JTlRSX1RZUEU0CTQKKyNkZWZpbmUgTV9HUElPX0lOVFJfVFlQRTQJX1NCX01BS0VNQVNLKDIsU19HUElPX0lOVFJfVFlQRTQpCisjZGVmaW5lIFZfR1BJT19JTlRSX1RZUEU0KHgpCV9TQl9NQUtFVkFMVUUoeCxTX0dQSU9fSU5UUl9UWVBFNCkKKyNkZWZpbmUgR19HUElPX0lOVFJfVFlQRTQoeCkJX1NCX0dFVFZBTFVFKHgsU19HUElPX0lOVFJfVFlQRTQsTV9HUElPX0lOVFJfVFlQRTQpCisKKyNkZWZpbmUgU19HUElPX0lOVFJfVFlQRTYJNgorI2RlZmluZSBNX0dQSU9fSU5UUl9UWVBFNglfU0JfTUFLRU1BU0soMixTX0dQSU9fSU5UUl9UWVBFNikKKyNkZWZpbmUgVl9HUElPX0lOVFJfVFlQRTYoeCkJX1NCX01BS0VWQUxVRSh4LFNfR1BJT19JTlRSX1RZUEU2KQorI2RlZmluZSBHX0dQSU9fSU5UUl9UWVBFNih4KQlfU0JfR0VUVkFMVUUoeCxTX0dQSU9fSU5UUl9UWVBFNixNX0dQSU9fSU5UUl9UWVBFNikKKworI2RlZmluZSBTX0dQSU9fSU5UUl9UWVBFOAk4CisjZGVmaW5lIE1fR1BJT19JTlRSX1RZUEU4CV9TQl9NQUtFTUFTSygyLFNfR1BJT19JTlRSX1RZUEU4KQorI2RlZmluZSBWX0dQSU9fSU5UUl9UWVBFOCh4KQlfU0JfTUFLRVZBTFVFKHgsU19HUElPX0lOVFJfVFlQRTgpCisjZGVmaW5lIEdfR1BJT19JTlRSX1RZUEU4KHgpCV9TQl9HRVRWQUxVRSh4LFNfR1BJT19JTlRSX1RZUEU4LE1fR1BJT19JTlRSX1RZUEU4KQorCisjZGVmaW5lIFNfR1BJT19JTlRSX1RZUEUxMAkxMAorI2RlZmluZSBNX0dQSU9fSU5UUl9UWVBFMTAJX1NCX01BS0VNQVNLKDIsU19HUElPX0lOVFJfVFlQRTEwKQorI2RlZmluZSBWX0dQSU9fSU5UUl9UWVBFMTAoeCkJX1NCX01BS0VWQUxVRSh4LFNfR1BJT19JTlRSX1RZUEUxMCkKKyNkZWZpbmUgR19HUElPX0lOVFJfVFlQRTEwKHgpCV9TQl9HRVRWQUxVRSh4LFNfR1BJT19JTlRSX1RZUEUxMCxNX0dQSU9fSU5UUl9UWVBFMTApCisKKyNkZWZpbmUgU19HUElPX0lOVFJfVFlQRTEyCTEyCisjZGVmaW5lIE1fR1BJT19JTlRSX1RZUEUxMglfU0JfTUFLRU1BU0soMixTX0dQSU9fSU5UUl9UWVBFMTIpCisjZGVmaW5lIFZfR1BJT19JTlRSX1RZUEUxMih4KQlfU0JfTUFLRVZBTFVFKHgsU19HUElPX0lOVFJfVFlQRTEyKQorI2RlZmluZSBHX0dQSU9fSU5UUl9UWVBFMTIoeCkJX1NCX0dFVFZBTFVFKHgsU19HUElPX0lOVFJfVFlQRTEyLE1fR1BJT19JTlRSX1RZUEUxMikKKworI2RlZmluZSBTX0dQSU9fSU5UUl9UWVBFMTQJMTQKKyNkZWZpbmUgTV9HUElPX0lOVFJfVFlQRTE0CV9TQl9NQUtFTUFTSygyLFNfR1BJT19JTlRSX1RZUEUxNCkKKyNkZWZpbmUgVl9HUElPX0lOVFJfVFlQRTE0KHgpCV9TQl9NQUtFVkFMVUUoeCxTX0dQSU9fSU5UUl9UWVBFMTQpCisjZGVmaW5lIEdfR1BJT19JTlRSX1RZUEUxNCh4KQlfU0JfR0VUVkFMVUUoeCxTX0dQSU9fSU5UUl9UWVBFMTQsTV9HUElPX0lOVFJfVFlQRTE0KQorCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zaWJ5dGUvc2IxMjUwX2ludC5oIGIvaW5jbHVkZS9hc20tbWlwcy9zaWJ5dGUvc2IxMjUwX2ludC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzZjc0ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NpYnl0ZS9zYjEyNTBfaW50LmgKQEAgLTAsMCArMSwyNDcgQEAKKy8qICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAqICBTQjEyNTAgQm9hcmQgU3VwcG9ydCBQYWNrYWdlCisgICAgKiAgCisgICAgKiAgSW50ZXJydXB0IE1hcHBlciBkZWZpbml0aW9ucwkJRmlsZTogc2IxMjUwX2ludC5oCisgICAgKiAgCisgICAgKiAgVGhpcyBtb2R1bGUgY29udGFpbnMgY29uc3RhbnRzIGZvciBtYW5pcHVsYXRpbmcgdGhlIFNCMTI1MCdzCisgICAgKiAgaW50ZXJydXB0IG1hcHBlciBhbmQgZGVmaW5pdGlvbnMgZm9yIHRoZSBpbnRlcnJ1cHQgc291cmNlcy4KKyAgICAqICAKKyAgICAqICBTQjEyNTAgc3BlY2lmaWNhdGlvbiBsZXZlbDogIFVzZXIncyBtYW51YWwgMS8wMi8wMgorICAgICogIAorICAgICogIEF1dGhvcjogIE1pdGNoIExpY2h0ZW5iZXJnCisgICAgKiAgCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICAKKyAgICAqCisgICAgKiAgQ29weXJpZ2h0IDIwMDAsMjAwMSwyMDAyLDIwMDMKKyAgICAqICBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgICAqICAKKyAgICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIAorICAgICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIAorICAgICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIAorICAgICogIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICAgICoKKyAgICAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgICoKKyAgICAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgCisgICAgKiAgTUEgMDIxMTEtMTMwNyBVU0EKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworCisjaWZuZGVmIF9TQjEyNTBfSU5UX0gKKyNkZWZpbmUgX1NCMTI1MF9JTlRfSAorCisjaW5jbHVkZSAic2IxMjUwX2RlZnMuaCIKKworLyogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICogIEludGVycnVwdCBNYXBwZXIgQ29uc3RhbnRzCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKy8qCisgKiBJbnRlcnJ1cHQgc291cmNlcyAoVGFibGUgNC04LCBVTSAwLjIpCisgKiAKKyAqIEZpcnN0LCB0aGUgaW50ZXJydXB0IG51bWJlcnMuCisgKi8KKworI2RlZmluZSBLX0lOVF9XQVRDSERPR19USU1FUl8wICAgICAgMAorI2RlZmluZSBLX0lOVF9XQVRDSERPR19USU1FUl8xICAgICAgMQorI2RlZmluZSBLX0lOVF9USU1FUl8wICAgICAgICAgICAgICAgMgorI2RlZmluZSBLX0lOVF9USU1FUl8xICAgICAgICAgICAgICAgMworI2RlZmluZSBLX0lOVF9USU1FUl8yICAgICAgICAgICAgICAgNAorI2RlZmluZSBLX0lOVF9USU1FUl8zICAgICAgICAgICAgICAgNQorI2RlZmluZSBLX0lOVF9TTUJfMCAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBLX0lOVF9TTUJfMSAgICAgICAgICAgICAgICAgNworI2RlZmluZSBLX0lOVF9VQVJUXzAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBLX0lOVF9VQVJUXzEgICAgICAgICAgICAgICAgOQorI2RlZmluZSBLX0lOVF9TRVJfMCAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgS19JTlRfU0VSXzEgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lIEtfSU5UX1BDTUNJQSAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBLX0lOVF9BRERSX1RSQVAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgS19JTlRfUEVSRl9DTlQgICAgICAgICAgICAgIDE0CisjZGVmaW5lIEtfSU5UX1RSQUNFX0ZSRUVaRSAgICAgICAgICAxNQorI2RlZmluZSBLX0lOVF9CQURfRUNDICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgS19JTlRfQ09SX0VDQyAgICAgICAgICAgICAgIDE3CisjZGVmaW5lIEtfSU5UX0lPX0JVUyAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBLX0lOVF9NQUNfMCAgICAgICAgICAgICAgICAgMTkKKyNkZWZpbmUgS19JTlRfTUFDXzEgICAgICAgICAgICAgICAgIDIwCisjZGVmaW5lIEtfSU5UX01BQ18yICAgICAgICAgICAgICAgICAyMQorI2RlZmluZSBLX0lOVF9ETV9DSF8wICAgICAgICAgICAgICAgMjIKKyNkZWZpbmUgS19JTlRfRE1fQ0hfMSAgICAgICAgICAgICAgIDIzCisjZGVmaW5lIEtfSU5UX0RNX0NIXzIgICAgICAgICAgICAgICAyNAorI2RlZmluZSBLX0lOVF9ETV9DSF8zICAgICAgICAgICAgICAgMjUKKyNkZWZpbmUgS19JTlRfTUJPWF8wICAgICAgICAgICAgICAgIDI2CisjZGVmaW5lIEtfSU5UX01CT1hfMSAgICAgICAgICAgICAgICAyNworI2RlZmluZSBLX0lOVF9NQk9YXzIgICAgICAgICAgICAgICAgMjgKKyNkZWZpbmUgS19JTlRfTUJPWF8zICAgICAgICAgICAgICAgIDI5CisjaWYgU0lCWVRFX0hEUl9GRUFUVVJFKDEyNTAsIFBBU1MyKSB8fCBTSUJZVEVfSERSX0ZFQVRVUkUoMTEyeCwgUEFTUzEpCisjZGVmaW5lIEtfSU5UX0NZQ0xFX0NQMF9JTlQJICAgIDMwCisjZGVmaW5lIEtfSU5UX0NZQ0xFX0NQMV9JTlQJICAgIDMxCisjZW5kaWYgLyogMTI1MCBQQVNTMiB8fCAxMTJ4IFBBU1MxICovCisjZGVmaW5lIEtfSU5UX0dQSU9fMCAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBLX0lOVF9HUElPXzEgICAgICAgICAgICAgICAgMzMKKyNkZWZpbmUgS19JTlRfR1BJT18yICAgICAgICAgICAgICAgIDM0CisjZGVmaW5lIEtfSU5UX0dQSU9fMyAgICAgICAgICAgICAgICAzNQorI2RlZmluZSBLX0lOVF9HUElPXzQgICAgICAgICAgICAgICAgMzYKKyNkZWZpbmUgS19JTlRfR1BJT181ICAgICAgICAgICAgICAgIDM3CisjZGVmaW5lIEtfSU5UX0dQSU9fNiAgICAgICAgICAgICAgICAzOAorI2RlZmluZSBLX0lOVF9HUElPXzcgICAgICAgICAgICAgICAgMzkKKyNkZWZpbmUgS19JTlRfR1BJT184ICAgICAgICAgICAgICAgIDQwCisjZGVmaW5lIEtfSU5UX0dQSU9fOSAgICAgICAgICAgICAgICA0MQorI2RlZmluZSBLX0lOVF9HUElPXzEwICAgICAgICAgICAgICAgNDIKKyNkZWZpbmUgS19JTlRfR1BJT18xMSAgICAgICAgICAgICAgIDQzCisjZGVmaW5lIEtfSU5UX0dQSU9fMTIgICAgICAgICAgICAgICA0NAorI2RlZmluZSBLX0lOVF9HUElPXzEzICAgICAgICAgICAgICAgNDUKKyNkZWZpbmUgS19JTlRfR1BJT18xNCAgICAgICAgICAgICAgIDQ2CisjZGVmaW5lIEtfSU5UX0dQSU9fMTUgICAgICAgICAgICAgICA0NworI2RlZmluZSBLX0lOVF9MRFRfRkFUQUwgICAgICAgICAgICAgNDgKKyNkZWZpbmUgS19JTlRfTERUX05PTkZBVEFMICAgICAgICAgIDQ5CisjZGVmaW5lIEtfSU5UX0xEVF9TTUkgICAgICAgICAgICAgICA1MAorI2RlZmluZSBLX0lOVF9MRFRfTk1JICAgICAgICAgICAgICAgNTEKKyNkZWZpbmUgS19JTlRfTERUX0lOSVQgICAgICAgICAgICAgIDUyCisjZGVmaW5lIEtfSU5UX0xEVF9TVEFSVFVQICAgICAgICAgICA1MworI2RlZmluZSBLX0lOVF9MRFRfRVhUICAgICAgICAgICAgICAgNTQKKyNkZWZpbmUgS19JTlRfUENJX0VSUk9SICAgICAgICAgICAgIDU1CisjZGVmaW5lIEtfSU5UX1BDSV9JTlRBICAgICAgICAgICAgICA1NgorI2RlZmluZSBLX0lOVF9QQ0lfSU5UQiAgICAgICAgICAgICAgNTcKKyNkZWZpbmUgS19JTlRfUENJX0lOVEMgICAgICAgICAgICAgIDU4CisjZGVmaW5lIEtfSU5UX1BDSV9JTlREICAgICAgICAgICAgICA1OQorI2RlZmluZSBLX0lOVF9TUEFSRV8yICAgICAgICAgICAgICAgNjAKKyNpZiBTSUJZVEVfSERSX0ZFQVRVUkUoMTI1MCwgUEFTUzIpIHx8IFNJQllURV9IRFJfRkVBVFVSRSgxMTJ4LCBQQVNTMSkKKyNkZWZpbmUgS19JTlRfTUFDXzBfQ0gxCQkgICAgNjEKKyNkZWZpbmUgS19JTlRfTUFDXzFfQ0gxCQkgICAgNjIKKyNkZWZpbmUgS19JTlRfTUFDXzJfQ0gxCQkgICAgNjMKKyNlbmRpZiAvKiAxMjUwIFBBU1MyIHx8IDExMnggUEFTUzEgKi8KKworLyoKKyAqIE1hc2sgdmFsdWVzIGZvciBlYWNoIGludGVycnVwdAorICovCisKKyNkZWZpbmUgTV9JTlRfV0FUQ0hET0dfVElNRVJfMCAgICAgIF9TQl9NQUtFTUFTSzEoS19JTlRfV0FUQ0hET0dfVElNRVJfMCkKKyNkZWZpbmUgTV9JTlRfV0FUQ0hET0dfVElNRVJfMSAgICAgIF9TQl9NQUtFTUFTSzEoS19JTlRfV0FUQ0hET0dfVElNRVJfMSkKKyNkZWZpbmUgTV9JTlRfVElNRVJfMCAgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoS19JTlRfVElNRVJfMCkKKyNkZWZpbmUgTV9JTlRfVElNRVJfMSAgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoS19JTlRfVElNRVJfMSkKKyNkZWZpbmUgTV9JTlRfVElNRVJfMiAgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoS19JTlRfVElNRVJfMikKKyNkZWZpbmUgTV9JTlRfVElNRVJfMyAgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoS19JTlRfVElNRVJfMykKKyNkZWZpbmUgTV9JTlRfU01CXzAgICAgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoS19JTlRfU01CXzApCisjZGVmaW5lIE1fSU5UX1NNQl8xICAgICAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKEtfSU5UX1NNQl8xKQorI2RlZmluZSBNX0lOVF9VQVJUXzAgICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLMShLX0lOVF9VQVJUXzApCisjZGVmaW5lIE1fSU5UX1VBUlRfMSAgICAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKEtfSU5UX1VBUlRfMSkKKyNkZWZpbmUgTV9JTlRfU0VSXzAgICAgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoS19JTlRfU0VSXzApCisjZGVmaW5lIE1fSU5UX1NFUl8xICAgICAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKEtfSU5UX1NFUl8xKQorI2RlZmluZSBNX0lOVF9QQ01DSUEgICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLMShLX0lOVF9QQ01DSUEpCisjZGVmaW5lIE1fSU5UX0FERFJfVFJBUCAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKEtfSU5UX0FERFJfVFJBUCkKKyNkZWZpbmUgTV9JTlRfUEVSRl9DTlQgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoS19JTlRfUEVSRl9DTlQpCisjZGVmaW5lIE1fSU5UX1RSQUNFX0ZSRUVaRSAgICAgICAgICBfU0JfTUFLRU1BU0sxKEtfSU5UX1RSQUNFX0ZSRUVaRSkKKyNkZWZpbmUgTV9JTlRfQkFEX0VDQyAgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoS19JTlRfQkFEX0VDQykKKyNkZWZpbmUgTV9JTlRfQ09SX0VDQyAgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoS19JTlRfQ09SX0VDQykKKyNkZWZpbmUgTV9JTlRfSU9fQlVTICAgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoS19JTlRfSU9fQlVTKQorI2RlZmluZSBNX0lOVF9NQUNfMCAgICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLMShLX0lOVF9NQUNfMCkKKyNkZWZpbmUgTV9JTlRfTUFDXzEgICAgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoS19JTlRfTUFDXzEpCisjZGVmaW5lIE1fSU5UX01BQ18yICAgICAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKEtfSU5UX01BQ18yKQorI2RlZmluZSBNX0lOVF9ETV9DSF8wICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLMShLX0lOVF9ETV9DSF8wKQorI2RlZmluZSBNX0lOVF9ETV9DSF8xICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLMShLX0lOVF9ETV9DSF8xKQorI2RlZmluZSBNX0lOVF9ETV9DSF8yICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLMShLX0lOVF9ETV9DSF8yKQorI2RlZmluZSBNX0lOVF9ETV9DSF8zICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLMShLX0lOVF9ETV9DSF8zKQorI2RlZmluZSBNX0lOVF9NQk9YXzAgICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLMShLX0lOVF9NQk9YXzApCisjZGVmaW5lIE1fSU5UX01CT1hfMSAgICAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKEtfSU5UX01CT1hfMSkKKyNkZWZpbmUgTV9JTlRfTUJPWF8yICAgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoS19JTlRfTUJPWF8yKQorI2RlZmluZSBNX0lOVF9NQk9YXzMgICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLMShLX0lOVF9NQk9YXzMpCisjaWYgU0lCWVRFX0hEUl9GRUFUVVJFKDEyNTAsIFBBU1MyKSB8fCBTSUJZVEVfSERSX0ZFQVRVUkUoMTEyeCwgUEFTUzEpCisjZGVmaW5lIE1fSU5UX0NZQ0xFX0NQMF9JTlQJICAgIF9TQl9NQUtFTUFTSzEoS19JTlRfQ1lDTEVfQ1AwX0lOVCkKKyNkZWZpbmUgTV9JTlRfQ1lDTEVfQ1AxX0lOVAkgICAgX1NCX01BS0VNQVNLMShLX0lOVF9DWUNMRV9DUDFfSU5UKQorI2VuZGlmIC8qIDEyNTAgUEFTUzIgfHwgMTEyeCBQQVNTMSAqLworI2RlZmluZSBNX0lOVF9HUElPXzAgICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLMShLX0lOVF9HUElPXzApCisjZGVmaW5lIE1fSU5UX0dQSU9fMSAgICAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKEtfSU5UX0dQSU9fMSkKKyNkZWZpbmUgTV9JTlRfR1BJT18yICAgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoS19JTlRfR1BJT18yKQorI2RlZmluZSBNX0lOVF9HUElPXzMgICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLMShLX0lOVF9HUElPXzMpCisjZGVmaW5lIE1fSU5UX0dQSU9fNCAgICAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKEtfSU5UX0dQSU9fNCkKKyNkZWZpbmUgTV9JTlRfR1BJT181ICAgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoS19JTlRfR1BJT181KQorI2RlZmluZSBNX0lOVF9HUElPXzYgICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLMShLX0lOVF9HUElPXzYpCisjZGVmaW5lIE1fSU5UX0dQSU9fNyAgICAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKEtfSU5UX0dQSU9fNykKKyNkZWZpbmUgTV9JTlRfR1BJT184ICAgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoS19JTlRfR1BJT184KQorI2RlZmluZSBNX0lOVF9HUElPXzkgICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLMShLX0lOVF9HUElPXzkpCisjZGVmaW5lIE1fSU5UX0dQSU9fMTAgICAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKEtfSU5UX0dQSU9fMTApCisjZGVmaW5lIE1fSU5UX0dQSU9fMTEgICAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKEtfSU5UX0dQSU9fMTEpCisjZGVmaW5lIE1fSU5UX0dQSU9fMTIgICAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKEtfSU5UX0dQSU9fMTIpCisjZGVmaW5lIE1fSU5UX0dQSU9fMTMgICAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKEtfSU5UX0dQSU9fMTMpCisjZGVmaW5lIE1fSU5UX0dQSU9fMTQgICAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKEtfSU5UX0dQSU9fMTQpCisjZGVmaW5lIE1fSU5UX0dQSU9fMTUgICAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKEtfSU5UX0dQSU9fMTUpCisjZGVmaW5lIE1fSU5UX0xEVF9GQVRBTCAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKEtfSU5UX0xEVF9GQVRBTCkKKyNkZWZpbmUgTV9JTlRfTERUX05PTkZBVEFMICAgICAgICAgIF9TQl9NQUtFTUFTSzEoS19JTlRfTERUX05PTkZBVEFMKQorI2RlZmluZSBNX0lOVF9MRFRfU01JICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLMShLX0lOVF9MRFRfU01JKQorI2RlZmluZSBNX0lOVF9MRFRfTk1JICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLMShLX0lOVF9MRFRfTk1JKQorI2RlZmluZSBNX0lOVF9MRFRfSU5JVCAgICAgICAgICAgICAgX1NCX01BS0VNQVNLMShLX0lOVF9MRFRfSU5JVCkKKyNkZWZpbmUgTV9JTlRfTERUX1NUQVJUVVAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoS19JTlRfTERUX1NUQVJUVVApCisjZGVmaW5lIE1fSU5UX0xEVF9FWFQgICAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKEtfSU5UX0xEVF9FWFQpCisjZGVmaW5lIE1fSU5UX1BDSV9FUlJPUiAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKEtfSU5UX1BDSV9FUlJPUikKKyNkZWZpbmUgTV9JTlRfUENJX0lOVEEgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoS19JTlRfUENJX0lOVEEpCisjZGVmaW5lIE1fSU5UX1BDSV9JTlRCICAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKEtfSU5UX1BDSV9JTlRCKQorI2RlZmluZSBNX0lOVF9QQ0lfSU5UQyAgICAgICAgICAgICAgX1NCX01BS0VNQVNLMShLX0lOVF9QQ0lfSU5UQykKKyNkZWZpbmUgTV9JTlRfUENJX0lOVEQgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoS19JTlRfUENJX0lOVEQpCisjZGVmaW5lIE1fSU5UX1NQQVJFXzIgICAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKEtfSU5UX1NQQVJFXzIpCisjaWYgU0lCWVRFX0hEUl9GRUFUVVJFKDEyNTAsIFBBU1MyKSB8fCBTSUJZVEVfSERSX0ZFQVRVUkUoMTEyeCwgUEFTUzEpCisjZGVmaW5lIE1fSU5UX01BQ18wX0NIMQkJICAgIF9TQl9NQUtFTUFTSzEoS19JTlRfTUFDXzBfQ0gxKQorI2RlZmluZSBNX0lOVF9NQUNfMV9DSDEJCSAgICBfU0JfTUFLRU1BU0sxKEtfSU5UX01BQ18xX0NIMSkKKyNkZWZpbmUgTV9JTlRfTUFDXzJfQ0gxCQkgICAgX1NCX01BS0VNQVNLMShLX0lOVF9NQUNfMl9DSDEpCisjZW5kaWYgLyogMTI1MCBQQVNTMiB8fCAxMTJ4IFBBU1MxICovCisKKy8qCisgKiBJbnRlcnJ1cHQgbWFwcGluZ3MKKyAqLworCisjZGVmaW5lIEtfSU5UX01BUF9JMAkwCQkvKiBpbnRlcnJ1cHQgcGlucyBvbiBwcm9jZXNzb3IgKi8KKyNkZWZpbmUgS19JTlRfTUFQX0kxCTEKKyNkZWZpbmUgS19JTlRfTUFQX0kyCTIKKyNkZWZpbmUgS19JTlRfTUFQX0kzCTMKKyNkZWZpbmUgS19JTlRfTUFQX0k0CTQKKyNkZWZpbmUgS19JTlRfTUFQX0k1CTUKKyNkZWZpbmUgS19JTlRfTUFQX05NSQk2CQkvKiBub25tYXNrYWJsZSAqLworI2RlZmluZSBLX0lOVF9NQVBfRElOVAk3CQkvKiBkZWJ1ZyBpbnRlcnJ1cHQgKi8KKworLyoKKyAqIExEVCBJbnRlcnJ1cHQgU2V0IFJlZ2lzdGVyICh0YWJsZSA0LTUpCisgKi8KKworI2RlZmluZSBTX0lOVF9MRFRfSU5UTVNHCSAgICAgIDAKKyNkZWZpbmUgTV9JTlRfTERUX0lOVE1TRyAgICAgICAgICAgICAgX1NCX01BS0VNQVNLKDMsU19JTlRfTERUX0lOVE1TRykKKyNkZWZpbmUgVl9JTlRfTERUX0lOVE1TRyh4KSAgICAgICAgICAgX1NCX01BS0VWQUxVRSh4LFNfSU5UX0xEVF9JTlRNU0cpCisjZGVmaW5lIEdfSU5UX0xEVF9JTlRNU0coeCkgICAgICAgICAgIF9TQl9HRVRWQUxVRSh4LFNfSU5UX0xEVF9JTlRNU0csTV9JTlRfTERUX0lOVE1TRykKKworI2RlZmluZSBLX0lOVF9MRFRfSU5UTVNHX0ZJWEVECSAgICAgIDAKKyNkZWZpbmUgS19JTlRfTERUX0lOVE1TR19BUkJJVFJBVEVEICAgMQorI2RlZmluZSBLX0lOVF9MRFRfSU5UTVNHX1NNSQkgICAgICAyCisjZGVmaW5lIEtfSU5UX0xEVF9JTlRNU0dfTk1JCSAgICAgIDMKKyNkZWZpbmUgS19JTlRfTERUX0lOVE1TR19JTklUCSAgICAgIDQKKyNkZWZpbmUgS19JTlRfTERUX0lOVE1TR19TVEFSVFVQICAgICAgNQorI2RlZmluZSBLX0lOVF9MRFRfSU5UTVNHX0VYVElOVAkgICAgICA2CisjZGVmaW5lIEtfSU5UX0xEVF9JTlRNU0dfUkVTRVJWRUQgICAgIDcKKworI2RlZmluZSBNX0lOVF9MRFRfRURHRVRSSUdHRVIgICAgICAgICAwCisjZGVmaW5lIE1fSU5UX0xEVF9MRVZFTFRSSUdHRVIgICAgICAgIF9TQl9NQUtFTUFTSzEoMykKKworI2RlZmluZSBNX0lOVF9MRFRfUEhZU0lDQUxERVNUICAgICAgICAwCisjZGVmaW5lIE1fSU5UX0xEVF9MT0dJQ0FMREVTVCAgICAgICAgIF9TQl9NQUtFTUFTSzEoNCkKKworI2RlZmluZSBTX0lOVF9MRFRfSU5UREVTVCAgICAgICAgICAgICA1CisjZGVmaW5lIE1fSU5UX0xEVF9JTlRERVNUICAgICAgICAgICAgIF9TQl9NQUtFTUFTSygxMCxTX0lOVF9MRFRfSU5UREVTVCkKKyNkZWZpbmUgVl9JTlRfTERUX0lOVERFU1QoeCkgICAgICAgICAgX1NCX01BS0VWQUxVRSh4LFNfSU5UX0xEVF9JTlRERVNUKQorI2RlZmluZSBHX0lOVF9MRFRfSU5UREVTVCh4KSAgICAgICAgICBfU0JfR0VUVkFMVUUoeCxTX0lOVF9MRFRfSU5UREVTVCxNX0lOVF9MRFRfSU5UREVTVCkKKworI2RlZmluZSBTX0lOVF9MRFRfVkVDVE9SICAgICAgICAgICAgICAxMworI2RlZmluZSBNX0lOVF9MRFRfVkVDVE9SICAgICAgICAgICAgICBfU0JfTUFLRU1BU0soOCxTX0lOVF9MRFRfVkVDVE9SKQorI2RlZmluZSBWX0lOVF9MRFRfVkVDVE9SKHgpICAgICAgICAgICBfU0JfTUFLRVZBTFVFKHgsU19JTlRfTERUX1ZFQ1RPUikKKyNkZWZpbmUgR19JTlRfTERUX1ZFQ1RPUih4KSAgICAgICAgICAgX1NCX0dFVFZBTFVFKHgsU19JTlRfTERUX1ZFQ1RPUixNX0lOVF9MRFRfVkVDVE9SKQorCisvKgorICogVmVjdG9yIGZvcm1hdCAoVGFibGUgNC02KQorICovCisKKyNkZWZpbmUgTV9MRFRWRUNUX1JBSVNFSU5UCQkweDAwCisjZGVmaW5lIE1fTERUVkVDVF9SQUlTRU1CT1ggICAgICAgICAgICAgMHg0MAorCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zaWJ5dGUvc2IxMjUwX2wyYy5oIGIvaW5jbHVkZS9hc20tbWlwcy9zaWJ5dGUvc2IxMjUwX2wyYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5OWRiODIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NpYnl0ZS9zYjEyNTBfbDJjLmgKQEAgLTAsMCArMSwxMjggQEAKKy8qICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAqICBTQjEyNTAgQm9hcmQgU3VwcG9ydCBQYWNrYWdlCisgICAgKiAgCisgICAgKiAgTDIgQ2FjaGUgY29uc3RhbnRzIGFuZCBtYWNyb3MJCUZpbGU6IHNiMTI1MF9sMmMuaAorICAgICogIAorICAgICogIFRoaXMgbW9kdWxlIGNvbnRhaW5zIGNvbnN0YW50cyB1c2VmdWwgZm9yIG1hbmlwdWxhdGluZyB0aGUKKyAgICAqICBsZXZlbCAyIGNhY2hlLgorICAgICogIAorICAgICogIFNCMTI1MCBzcGVjaWZpY2F0aW9uIGxldmVsOiAgVXNlcidzIG1hbnVhbCAxLzAyLzAyCisgICAgKiAgCisgICAgKiAgQXV0aG9yOiAgTWl0Y2ggTGljaHRlbmJlcmcKKyAgICAqICAKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIAorICAgICoKKyAgICAqICBDb3B5cmlnaHQgMjAwMCwyMDAxLDIwMDIsMjAwMworICAgICogIEJyb2FkY29tIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICAgICogIAorICAgICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgCisgICAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgCisgICAgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgCisgICAgKiAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgICAgKgorICAgICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICAgKgorICAgICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCAKKyAgICAqICBNQSAwMjExMS0xMzA3IFVTQQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisKKyNpZm5kZWYgX1NCMTI1MF9MMkNfSAorI2RlZmluZSBfU0IxMjUwX0wyQ19ICisKKyNpbmNsdWRlICJzYjEyNTBfZGVmcy5oIgorCisvKgorICogTGV2ZWwgMiBDYWNoZSBUYWcgcmVnaXN0ZXIgKFRhYmxlIDUtMykKKyAqLworCisjZGVmaW5lIFNfTDJDX1RBR19NQlogICAgICAgICAgICAgICAwCisjZGVmaW5lIE1fTDJDX1RBR19NQlogICAgICAgICAgICAgICBfU0JfTUFLRU1BU0soNSxTX0wyQ19UQUdfTUJaKQorCisjZGVmaW5lIFNfTDJDX1RBR19JTkRFWCAgICAgICAgICAgICA1CisjZGVmaW5lIE1fTDJDX1RBR19JTkRFWCAgICAgICAgICAgICBfU0JfTUFLRU1BU0soMTIsU19MMkNfVEFHX0lOREVYKQorI2RlZmluZSBWX0wyQ19UQUdfSU5ERVgoeCkgICAgICAgICAgX1NCX01BS0VWQUxVRSh4LFNfTDJDX1RBR19JTkRFWCkKKyNkZWZpbmUgR19MMkNfVEFHX0lOREVYKHgpICAgICAgICAgIF9TQl9HRVRWQUxVRSh4LFNfTDJDX1RBR19JTkRFWCxNX0wyQ19UQUdfSU5ERVgpCisKKyNkZWZpbmUgU19MMkNfVEFHX1RBRyAgICAgICAgICAgICAgIDE3CisjZGVmaW5lIE1fTDJDX1RBR19UQUcgICAgICAgICAgICAgICBfU0JfTUFLRU1BU0soMjMsU19MMkNfVEFHX1RBRykKKyNkZWZpbmUgVl9MMkNfVEFHX1RBRyh4KSAgICAgICAgICAgIF9TQl9NQUtFVkFMVUUoeCxTX0wyQ19UQUdfVEFHKQorI2RlZmluZSBHX0wyQ19UQUdfVEFHKHgpICAgICAgICAgICAgX1NCX0dFVFZBTFVFKHgsU19MMkNfVEFHX1RBRyxNX0wyQ19UQUdfVEFHKQorCisjZGVmaW5lIFNfTDJDX1RBR19FQ0MgICAgICAgICAgICAgICA0MAorI2RlZmluZSBNX0wyQ19UQUdfRUNDICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLKDYsU19MMkNfVEFHX0VDQykKKyNkZWZpbmUgVl9MMkNfVEFHX0VDQyh4KSAgICAgICAgICAgIF9TQl9NQUtFVkFMVUUoeCxTX0wyQ19UQUdfRUNDKQorI2RlZmluZSBHX0wyQ19UQUdfRUNDKHgpICAgICAgICAgICAgX1NCX0dFVFZBTFVFKHgsU19MMkNfVEFHX0VDQyxNX0wyQ19UQUdfRUNDKQorCisjZGVmaW5lIFNfTDJDX1RBR19XQVkgICAgICAgICAgICAgICA0NgorI2RlZmluZSBNX0wyQ19UQUdfV0FZICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLKDIsU19MMkNfVEFHX1dBWSkKKyNkZWZpbmUgVl9MMkNfVEFHX1dBWSh4KSAgICAgICAgICAgIF9TQl9NQUtFVkFMVUUoeCxTX0wyQ19UQUdfV0FZKQorI2RlZmluZSBHX0wyQ19UQUdfV0FZKHgpICAgICAgICAgICAgX1NCX0dFVFZBTFVFKHgsU19MMkNfVEFHX1dBWSxNX0wyQ19UQUdfV0FZKQorCisjZGVmaW5lIE1fTDJDX1RBR19ESVJUWSAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDQ4KQorI2RlZmluZSBNX0wyQ19UQUdfVkFMSUQgICAgICAgICAgICAgX1NCX01BS0VNQVNLMSg0OSkKKworLyoKKyAqIEZvcm1hdCBvZiBsZXZlbCAyIGNhY2hlIG1hbmFnZW1lbnQgYWRkcmVzcyAodGFibGUgNS0yKQorICovCisKKyNkZWZpbmUgU19MMkNfTUdNVF9JTkRFWCAgICAgICAgICAgIDUKKyNkZWZpbmUgTV9MMkNfTUdNVF9JTkRFWCAgICAgICAgICAgIF9TQl9NQUtFTUFTSygxMixTX0wyQ19NR01UX0lOREVYKQorI2RlZmluZSBWX0wyQ19NR01UX0lOREVYKHgpICAgICAgICAgX1NCX01BS0VWQUxVRSh4LFNfTDJDX01HTVRfSU5ERVgpCisjZGVmaW5lIEdfTDJDX01HTVRfSU5ERVgoeCkgICAgICAgICBfU0JfR0VUVkFMVUUoeCxTX0wyQ19NR01UX0lOREVYLE1fTDJDX01HTVRfSU5ERVgpCisKKyNkZWZpbmUgU19MMkNfTUdNVF9RVUFEUkFOVCAgICAgICAgIDE1CisjZGVmaW5lIE1fTDJDX01HTVRfUVVBRFJBTlQgICAgICAgICBfU0JfTUFLRU1BU0soMixTX0wyQ19NR01UX1FVQURSQU5UKQorI2RlZmluZSBWX0wyQ19NR01UX1FVQURSQU5UKHgpICAgICAgX1NCX01BS0VWQUxVRSh4LFNfTDJDX01HTVRfUVVBRFJBTlQpCisjZGVmaW5lIEdfTDJDX01HTVRfUVVBRFJBTlQoeCkgICAgICBfU0JfR0VUVkFMVUUoeCxTX0wyQ19NR01UX1FVQURSQU5ULE1fTDJDX01HTVRfUVVBRFJBTlQpCisKKyNkZWZpbmUgU19MMkNfTUdNVF9IQUxGCQkgICAgMTYKKyNkZWZpbmUgTV9MMkNfTUdNVF9IQUxGCSAgICAgICAgICAgIF9TQl9NQUtFTUFTSygxLFNfTDJDX01HTVRfSEFMRikKKworI2RlZmluZSBTX0wyQ19NR01UX1dBWSAgICAgICAgICAgICAgMTcKKyNkZWZpbmUgTV9MMkNfTUdNVF9XQVkgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSygyLFNfTDJDX01HTVRfV0FZKQorI2RlZmluZSBWX0wyQ19NR01UX1dBWSh4KSAgICAgICAgICAgX1NCX01BS0VWQUxVRSh4LFNfTDJDX01HTVRfV0FZKQorI2RlZmluZSBHX0wyQ19NR01UX1dBWSh4KSAgICAgICAgICAgX1NCX0dFVFZBTFVFKHgsU19MMkNfTUdNVF9XQVksTV9MMkNfTUdNVF9XQVkpCisKKyNkZWZpbmUgU19MMkNfTUdNVF9UQUcgICAgICAgICAgICAgIDIxCisjZGVmaW5lIE1fTDJDX01HTVRfVEFHICAgICAgICAgICAgICBfU0JfTUFLRU1BU0soNixTX0wyQ19NR01UX1RBRykKKyNkZWZpbmUgVl9MMkNfTUdNVF9UQUcoeCkgICAgICAgICAgIF9TQl9NQUtFVkFMVUUoeCxTX0wyQ19NR01UX1RBRykKKyNkZWZpbmUgR19MMkNfTUdNVF9UQUcoeCkgICAgICAgICAgIF9TQl9HRVRWQUxVRSh4LFNfTDJDX01HTVRfVEFHLE1fTDJDX01HTVRfVEFHKQorCisjZGVmaW5lIE1fTDJDX01HTVRfRElSVFkgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDE5KQorI2RlZmluZSBNX0wyQ19NR01UX1ZBTElEICAgICAgICAgICAgX1NCX01BS0VNQVNLMSgyMCkKKworI2RlZmluZSBBX0wyQ19NR01UX1RBR19CQVNFICAgICAgICAgMHgwMEQwMDAwMDAwCisKKyNkZWZpbmUgTDJDX0VOVFJJRVNfUEVSX1dBWSAgICAgICA0MDk2CisjZGVmaW5lIEwyQ19OVU1fV0FZUyAgICAgICAgICAgICAgNAorCisKKyNpZiBTSUJZVEVfSERSX0ZFQVRVUkUoMTI1MCwgUEFTUzMpIHx8IFNJQllURV9IRFJfRkVBVFVSRSgxMTJ4LCBQQVNTMSkKKy8qCisgKiBMMiBSZWFkIE1pc2MuIHJlZ2lzdGVyIChBX0wyX1JFQURfTUlTQykKKyAqLworI2RlZmluZSBTX0wyQ19NSVNDX05PX1dBWQkJMTAKKyNkZWZpbmUgTV9MMkNfTUlTQ19OT19XQVkJCV9TQl9NQUtFTUFTSyg0LFNfTDJDX01JU0NfTk9fV0FZKQorI2RlZmluZSBWX0wyQ19NSVNDX05PX1dBWSh4KQkJX1NCX01BS0VWQUxVRSh4LFNfTDJDX01JU0NfTk9fV0FZKQorI2RlZmluZSBHX0wyQ19NSVNDX05PX1dBWSh4KQkJX1NCX0dFVFZBTFVFKHgsU19MMkNfTUlTQ19OT19XQVksTV9MMkNfTUlTQ19OT19XQVkpCisKKyNkZWZpbmUgTV9MMkNfTUlTQ19FQ0NfQ0xFQU5VUF9ESVMJX1NCX01BS0VNQVNLMSg5KQorI2RlZmluZSBNX0wyQ19NSVNDX01DX1BSSU9fTE9XCQlfU0JfTUFLRU1BU0sxKDgpCisjZGVmaW5lIE1fTDJDX01JU0NfU09GVF9ESVNBQkxFX1QJX1NCX01BS0VNQVNLMSg3KQorI2RlZmluZSBNX0wyQ19NSVNDX1NPRlRfRElTQUJMRV9CCV9TQl9NQUtFTUFTSzEoNikKKyNkZWZpbmUgTV9MMkNfTUlTQ19TT0ZUX0RJU0FCTEVfUglfU0JfTUFLRU1BU0sxKDUpCisjZGVmaW5lIE1fTDJDX01JU0NfU09GVF9ESVNBQkxFX0wJX1NCX01BS0VNQVNLMSg0KQorI2RlZmluZSBNX0wyQ19NSVNDX1NDQUNIRV9ESVNBQkxFX1QJX1NCX01BS0VNQVNLMSgzKQorI2RlZmluZSBNX0wyQ19NSVNDX1NDQUNIRV9ESVNBQkxFX0IJX1NCX01BS0VNQVNLMSgyKQorI2RlZmluZSBNX0wyQ19NSVNDX1NDQUNIRV9ESVNBQkxFX1IJX1NCX01BS0VNQVNLMSgxKQorI2RlZmluZSBNX0wyQ19NSVNDX1NDQUNIRV9ESVNBQkxFX0wJX1NCX01BS0VNQVNLMSgwKQorI2VuZGlmIC8qIDEyNTAgUEFTUzMgfHwgMTEyeCBQQVNTMSAqLworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zaWJ5dGUvc2IxMjUwX2xkdC5oIGIvaW5jbHVkZS9hc20tbWlwcy9zaWJ5dGUvc2IxMjUwX2xkdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4NzUzODgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NpYnl0ZS9zYjEyNTBfbGR0LmgKQEAgLTAsMCArMSw0MjUgQEAKKy8qICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAqICBTQjEyNTAgQm9hcmQgU3VwcG9ydCBQYWNrYWdlCisgICAgKiAgCisgICAgKiAgTERUIGNvbnN0YW50cwkJCQlGaWxlOiBzYjEyNTBfbGR0LmgKKyAgICAqICAKKyAgICAqICBUaGlzIG1vZHVsZSBjb250YWlucyBjb25zdGFudHMgYW5kIG1hY3JvcyB0byBkZXNjcmliZSAKKyAgICAqICB0aGUgTERUIGludGVyZmFjZSBvbiB0aGUgU0IxMjUwLiAgCisgICAgKiAgCisgICAgKiAgU0IxMjUwIHNwZWNpZmljYXRpb24gbGV2ZWw6ICBVc2VyJ3MgbWFudWFsIDEvMDIvMDIKKyAgICAqICAKKyAgICAqICBBdXRob3I6ICBNaXRjaCBMaWNodGVuYmVyZworICAgICogIAorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAgCisgICAgKgorICAgICogIENvcHlyaWdodCAyMDAwLDIwMDEsMjAwMiwyMDAzCisgICAgKiAgQnJvYWRjb20gQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICAgKiAgCisgICAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAKKyAgICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyAKKyAgICAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiAKKyAgICAqICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgICAqCisgICAgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgICAqCisgICAgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIAorICAgICogIE1BIDAyMTExLTEzMDcgVVNBCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKworI2lmbmRlZiBfU0IxMjUwX0xEVF9ICisjZGVmaW5lIF9TQjEyNTBfTERUX0gKKworI2luY2x1ZGUgInNiMTI1MF9kZWZzLmgiCisKKyNkZWZpbmUgS19MRFRfVkVORE9SX1NJQllURQkweDE2NkQKKyNkZWZpbmUgS19MRFRfREVWSUNFX1NCMTI1MAkweDAwMDIKKworLyoKKyAqIExEVCBJbnRlcmZhY2UgVHlwZSAxIChicmlkZ2UpIGNvbmZpZ3VyYXRpb24gaGVhZGVyCisgKi8KKworI2RlZmluZSBSX0xEVF9UWVBFMV9ERVZJQ0VJRAkweDAwMDAKKyNkZWZpbmUgUl9MRFRfVFlQRTFfQ01EU1RBVFVTCTB4MDAwNAorI2RlZmluZSBSX0xEVF9UWVBFMV9DTEFTU1JFVgkweDAwMDgKKyNkZWZpbmUgUl9MRFRfVFlQRTFfREVWSERSCTB4MDAwQworI2RlZmluZSBSX0xEVF9UWVBFMV9CQVIwCTB4MDAxMAkvKiBub3QgdXNlZCAqLworI2RlZmluZSBSX0xEVF9UWVBFMV9CQVIxCTB4MDAxNAkvKiBub3QgdXNlZCAqLworCisjZGVmaW5lIFJfTERUX1RZUEUxX0JVU0lECTB4MDAxOAkvKiBidXMgSUQgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUl9MRFRfVFlQRTFfU0VDU1RBVFVTCTB4MDAxQwkvKiBzZWNvbmRhcnkgc3RhdHVzIC8gSS9PIGJhc2UvbGltaXQgKi8KKyNkZWZpbmUgUl9MRFRfVFlQRTFfTUVNTElNSVQJMHgwMDIwCisjZGVmaW5lIFJfTERUX1RZUEUxX1BSRUZFVENICTB4MDAyNAorI2RlZmluZSBSX0xEVF9UWVBFMV9QUkVGX0JBU0UJMHgwMDI4CisjZGVmaW5lIFJfTERUX1RZUEUxX1BSRUZfTElNSVQJMHgwMDJDCisjZGVmaW5lIFJfTERUX1RZUEUxX0lPTElNSVQJMHgwMDMwCisjZGVmaW5lIFJfTERUX1RZUEUxX0NBUFBUUgkweDAwMzQKKyNkZWZpbmUgUl9MRFRfVFlQRTFfUk9NQUREUgkweDAwMzgKKyNkZWZpbmUgUl9MRFRfVFlQRTFfQlJDVEwJMHgwMDNDCisjZGVmaW5lIFJfTERUX1RZUEUxX0NNRAkJMHgwMDQwCisjZGVmaW5lIFJfTERUX1RZUEUxX0xJTktDVFJMCTB4MDA0NAorI2RlZmluZSBSX0xEVF9UWVBFMV9MSU5LRlJFUQkweDAwNDgKKyNkZWZpbmUgUl9MRFRfVFlQRTFfUkVTRVJWRUQxCTB4MDA0QworI2RlZmluZSBSX0xEVF9UWVBFMV9TUklDTUQJMHgwMDUwCisjZGVmaW5lIFJfTERUX1RZUEUxX1NSSVRYTlVNCTB4MDA1NAorI2RlZmluZSBSX0xEVF9UWVBFMV9TUklSWE5VTQkweDAwNTgKKyNkZWZpbmUgUl9MRFRfVFlQRTFfRVJSU1RBVFVTICAgMHgwMDY4CisjZGVmaW5lIFJfTERUX1RZUEUxX1NSSUNUUkwJMHgwMDZDCisjaWYgU0lCWVRFX0hEUl9GRUFUVVJFKDEyNTAsIFBBU1MyKSB8fCBTSUJZVEVfSERSX0ZFQVRVUkUoMTEyeCwgUEFTUzEpCisjZGVmaW5lIFJfTERUX1RZUEUxX0FERFNUQVRVUwkweDAwNzAKKyNlbmRpZiAvKiAxMjUwIFBBU1MyIHx8IDExMnggUEFTUzEgKi8KKyNkZWZpbmUgUl9MRFRfVFlQRTFfVFhCVUZDTlQJMHgwMEM4CisjZGVmaW5lIFJfTERUX1RZUEUxX0VYUENSQwkweDAwREMKKyNkZWZpbmUgUl9MRFRfVFlQRTFfUlhDUkMJMHgwMEYwCisKKworLyoKKyAqIExEVCBEZXZpY2UgSUQgcmVnaXN0ZXIKKyAqLworCisjZGVmaW5lIFNfTERUX0RFVklDRUlEX1ZFTkRPUgkJMAorI2RlZmluZSBNX0xEVF9ERVZJQ0VJRF9WRU5ET1IJCV9TQl9NQUtFTUFTS18zMigxNixTX0xEVF9ERVZJQ0VJRF9WRU5ET1IpCisjZGVmaW5lIFZfTERUX0RFVklDRUlEX1ZFTkRPUih4KQlfU0JfTUFLRVZBTFVFXzMyKHgsU19MRFRfREVWSUNFSURfVkVORE9SKQorI2RlZmluZSBHX0xEVF9ERVZJQ0VJRF9WRU5ET1IoeCkJX1NCX0dFVFZBTFVFXzMyKHgsU19MRFRfREVWSUNFSURfVkVORE9SLE1fTERUX0RFVklDRUlEX1ZFTkRPUikKKworI2RlZmluZSBTX0xEVF9ERVZJQ0VJRF9ERVZJQ0VJRAkJMTYKKyNkZWZpbmUgTV9MRFRfREVWSUNFSURfREVWSUNFSUQJCV9TQl9NQUtFTUFTS18zMigxNixTX0xEVF9ERVZJQ0VJRF9ERVZJQ0VJRCkKKyNkZWZpbmUgVl9MRFRfREVWSUNFSURfREVWSUNFSUQoeCkJX1NCX01BS0VWQUxVRV8zMih4LFNfTERUX0RFVklDRUlEX0RFVklDRUlEKQorI2RlZmluZSBHX0xEVF9ERVZJQ0VJRF9ERVZJQ0VJRCh4KQlfU0JfR0VUVkFMVUVfMzIoeCxTX0xEVF9ERVZJQ0VJRF9ERVZJQ0VJRCxNX0xEVF9ERVZJQ0VJRF9ERVZJQ0VJRCkKKworCisvKgorICogTERUIENvbW1hbmQgUmVnaXN0ZXIgKFRhYmxlIDgtMTMpCisgKi8KKworI2RlZmluZSBNX0xEVF9DTURfSU9TUEFDRV9FTgkJX1NCX01BS0VNQVNLMV8zMigwKQorI2RlZmluZSBNX0xEVF9DTURfTUVNU1BBQ0VfRU4JCV9TQl9NQUtFTUFTSzFfMzIoMSkKKyNkZWZpbmUgTV9MRFRfQ01EX01BU1RFUl9FTgkJX1NCX01BS0VNQVNLMV8zMigyKQorI2RlZmluZSBNX0xEVF9DTURfU1BFQ0NZQ19FTgkJX1NCX01BS0VNQVNLMV8zMigzKQorI2RlZmluZSBNX0xEVF9DTURfTUVNV1JJTlZfRU4JCV9TQl9NQUtFTUFTSzFfMzIoNCkKKyNkZWZpbmUgTV9MRFRfQ01EX1ZHQVBBTFNOUF9FTgkJX1NCX01BS0VNQVNLMV8zMig1KQorI2RlZmluZSBNX0xEVF9DTURfUEFSRVJSUkVTUAkJX1NCX01BS0VNQVNLMV8zMig2KQorI2RlZmluZSBNX0xEVF9DTURfV0FJVENZQ0NUUkwJCV9TQl9NQUtFTUFTSzFfMzIoNykKKyNkZWZpbmUgTV9MRFRfQ01EX1NFUlJfRU4JCV9TQl9NQUtFTUFTSzFfMzIoOCkKKyNkZWZpbmUgTV9MRFRfQ01EX0ZBU1RCMkJfRU4JCV9TQl9NQUtFTUFTSzFfMzIoOSkKKworLyoKKyAqIExEVCBjbGFzcyBhbmQgcmV2aXNpb24gcmVnaXN0ZXJzCisgKi8KKworI2RlZmluZSBTX0xEVF9DTEFTU1JFVl9SRVYJCTAKKyNkZWZpbmUgTV9MRFRfQ0xBU1NSRVZfUkVWCQlfU0JfTUFLRU1BU0tfMzIoOCxTX0xEVF9DTEFTU1JFVl9SRVYpCisjZGVmaW5lIFZfTERUX0NMQVNTUkVWX1JFVih4KQkJX1NCX01BS0VWQUxVRV8zMih4LFNfTERUX0NMQVNTUkVWX1JFVikKKyNkZWZpbmUgR19MRFRfQ0xBU1NSRVZfUkVWKHgpCQlfU0JfR0VUVkFMVUVfMzIoeCxTX0xEVF9DTEFTU1JFVl9SRVYsTV9MRFRfQ0xBU1NSRVZfUkVWKQorCisjZGVmaW5lIFNfTERUX0NMQVNTUkVWX0NMQVNTCQk4CisjZGVmaW5lIE1fTERUX0NMQVNTUkVWX0NMQVNTCQlfU0JfTUFLRU1BU0tfMzIoMjQsU19MRFRfQ0xBU1NSRVZfQ0xBU1MpCisjZGVmaW5lIFZfTERUX0NMQVNTUkVWX0NMQVNTKHgpCQlfU0JfTUFLRVZBTFVFXzMyKHgsU19MRFRfQ0xBU1NSRVZfQ0xBU1MpCisjZGVmaW5lIEdfTERUX0NMQVNTUkVWX0NMQVNTKHgpCQlfU0JfR0VUVkFMVUVfMzIoeCxTX0xEVF9DTEFTU1JFVl9DTEFTUyxNX0xEVF9DTEFTU1JFVl9DTEFTUykKKworI2RlZmluZSBLX0xEVF9SRVYJCQkweDAxCisjZGVmaW5lIEtfTERUX0NMQVNTCQkJMHgwNjAwMDAKKworLyoKKyAqIERldmljZSBIZWFkZXIgKG9mZnNldCAweDBDKQorICovCisKKyNkZWZpbmUgU19MRFRfREVWSERSX0NMSU5FU1oJCTAKKyNkZWZpbmUgTV9MRFRfREVWSERSX0NMSU5FU1oJCV9TQl9NQUtFTUFTS18zMig4LFNfTERUX0RFVkhEUl9DTElORVNaKQorI2RlZmluZSBWX0xEVF9ERVZIRFJfQ0xJTkVTWih4KQkJX1NCX01BS0VWQUxVRV8zMih4LFNfTERUX0RFVkhEUl9DTElORVNaKQorI2RlZmluZSBHX0xEVF9ERVZIRFJfQ0xJTkVTWih4KQkJX1NCX0dFVFZBTFVFXzMyKHgsU19MRFRfREVWSERSX0NMSU5FU1osTV9MRFRfREVWSERSX0NMSU5FU1opCisKKyNkZWZpbmUgU19MRFRfREVWSERSX0xBVFRNUgkJOAorI2RlZmluZSBNX0xEVF9ERVZIRFJfTEFUVE1SCQlfU0JfTUFLRU1BU0tfMzIoOCxTX0xEVF9ERVZIRFJfTEFUVE1SKQorI2RlZmluZSBWX0xEVF9ERVZIRFJfTEFUVE1SKHgpCQlfU0JfTUFLRVZBTFVFXzMyKHgsU19MRFRfREVWSERSX0xBVFRNUikKKyNkZWZpbmUgR19MRFRfREVWSERSX0xBVFRNUih4KQkJX1NCX0dFVFZBTFVFXzMyKHgsU19MRFRfREVWSERSX0xBVFRNUixNX0xEVF9ERVZIRFJfTEFUVE1SKQorCisjZGVmaW5lIFNfTERUX0RFVkhEUl9IRFJUWVBFCQkxNgorI2RlZmluZSBNX0xEVF9ERVZIRFJfSERSVFlQRQkJX1NCX01BS0VNQVNLXzMyKDgsU19MRFRfREVWSERSX0hEUlRZUEUpCisjZGVmaW5lIFZfTERUX0RFVkhEUl9IRFJUWVBFKHgpCQlfU0JfTUFLRVZBTFVFXzMyKHgsU19MRFRfREVWSERSX0hEUlRZUEUpCisjZGVmaW5lIEdfTERUX0RFVkhEUl9IRFJUWVBFKHgpCQlfU0JfR0VUVkFMVUVfMzIoeCxTX0xEVF9ERVZIRFJfSERSVFlQRSxNX0xEVF9ERVZIRFJfSERSVFlQRSkKKworI2RlZmluZSBLX0xEVF9ERVZIRFJfSERSVFlQRV9UWVBFMQkxCisKKyNkZWZpbmUgU19MRFRfREVWSERSX0JJU1QJCTI0CisjZGVmaW5lIE1fTERUX0RFVkhEUl9CSVNUCQlfU0JfTUFLRU1BU0tfMzIoOCxTX0xEVF9ERVZIRFJfQklTVCkKKyNkZWZpbmUgVl9MRFRfREVWSERSX0JJU1QoeCkJCV9TQl9NQUtFVkFMVUVfMzIoeCxTX0xEVF9ERVZIRFJfQklTVCkKKyNkZWZpbmUgR19MRFRfREVWSERSX0JJU1QoeCkJCV9TQl9HRVRWQUxVRV8zMih4LFNfTERUX0RFVkhEUl9CSVNULE1fTERUX0RFVkhEUl9CSVNUKQorCisKKworLyoKKyAqIExEVCBTdGF0dXMgUmVnaXN0ZXIgKFRhYmxlIDgtMTQpLiAgTm90ZSB0aGF0IHRoZXNlIGNvbnN0YW50cworICogYXNzdW1lIHlvdSd2ZSByZWFkIHRoZSBjb21tYW5kIGFuZCBzdGF0dXMgcmVnaXN0ZXIgCisgKiB0b2dldGhlciAoMzItYml0IHJlYWQgYXQgb2Zmc2V0IDB4MDQpCisgKgorICogVGhlc2UgYml0cyBhbHNvIGFwcGx5IHRvIHRoZSBzZWNvbmRhcnkgc3RhdHVzCisgKiByZWdpc3RlciAoVGFibGUgOC0xNSksIG9mZnNldCAweDFDCisgKi8KKworI2lmIFNJQllURV9IRFJfRkVBVFVSRSgxMjUwLCBQQVNTMikgfHwgU0lCWVRFX0hEUl9GRUFUVVJFKDExMngsIFBBU1MxKQorI2RlZmluZSBNX0xEVF9TVEFUVVNfVkdBRU4JCV9TQl9NQUtFTUFTSzFfMzIoMykKKyNlbmRpZiAvKiAxMjUwIFBBU1MyIHx8IDExMnggUEFTUzEgKi8KKyNkZWZpbmUgTV9MRFRfU1RBVFVTX0NBUExJU1QJCV9TQl9NQUtFTUFTSzFfMzIoMjApCisjZGVmaW5lIE1fTERUX1NUQVRVU182Nk1IWkNBUAkJX1NCX01BS0VNQVNLMV8zMigyMSkKKyNkZWZpbmUgTV9MRFRfU1RBVFVTX1JFU0VSVkVEMgkJX1NCX01BS0VNQVNLMV8zMigyMikKKyNkZWZpbmUgTV9MRFRfU1RBVFVTX0ZBU1RCMkJDQVAJCV9TQl9NQUtFTUFTSzFfMzIoMjMpCisjZGVmaW5lIE1fTERUX1NUQVRVU19NU1RSRFBBUkVSUglfU0JfTUFLRU1BU0sxXzMyKDI0KQorCisjZGVmaW5lIFNfTERUX1NUQVRVU19ERVZTRUxUSU1JTkcJMjUKKyNkZWZpbmUgTV9MRFRfU1RBVFVTX0RFVlNFTFRJTUlORwlfU0JfTUFLRU1BU0tfMzIoMixTX0xEVF9TVEFUVVNfREVWU0VMVElNSU5HKQorI2RlZmluZSBWX0xEVF9TVEFUVVNfREVWU0VMVElNSU5HKHgpCV9TQl9NQUtFVkFMVUVfMzIoeCxTX0xEVF9TVEFUVVNfREVWU0VMVElNSU5HKQorI2RlZmluZSBHX0xEVF9TVEFUVVNfREVWU0VMVElNSU5HKHgpCV9TQl9HRVRWQUxVRV8zMih4LFNfTERUX1NUQVRVU19ERVZTRUxUSU1JTkcsTV9MRFRfU1RBVFVTX0RFVlNFTFRJTUlORykKKworI2RlZmluZSBNX0xEVF9TVEFUVVNfU0lHRFRHVEFCT1JUCV9TQl9NQUtFTUFTSzFfMzIoMjcpCisjZGVmaW5lIE1fTERUX1NUQVRVU19SQ1ZEVEdUQUJPUlQJX1NCX01BS0VNQVNLMV8zMigyOCkKKyNkZWZpbmUgTV9MRFRfU1RBVFVTX1JDVkRNU1RSQUJPUlQJX1NCX01BS0VNQVNLMV8zMigyOSkKKyNkZWZpbmUgTV9MRFRfU1RBVFVTX1NJR0RTRVJSCQlfU0JfTUFLRU1BU0sxXzMyKDMwKQorI2RlZmluZSBNX0xEVF9TVEFUVVNfREVUUEFSRVJSCQlfU0JfTUFLRU1BU0sxXzMyKDMxKQorCisvKgorICogQnJpZGdlIENvbnRyb2wgUmVnaXN0ZXIgKFRhYmxlIDgtMTYpLiAgTm90ZSB0aGF0IHRoZXNlIAorICogY29uc3RhbnRzIGFzc3VtZSB5b3UndmUgcmVhZCB0aGUgcmVnaXN0ZXIgYXMgYSAzMi1iaXQgCisgKiByZWFkIChvZmZzZXQgMHgzQykKKyAqLworCisjZGVmaW5lIE1fTERUX0JSQ1RMX1BBUkVSUlJFU1BfRU4JX1NCX01BS0VNQVNLMV8zMigxNikKKyNkZWZpbmUgTV9MRFRfQlJDVExfU0VSUl9FTgkJX1NCX01BS0VNQVNLMV8zMigxNykKKyNkZWZpbmUgTV9MRFRfQlJDVExfSVNBX0VOCQlfU0JfTUFLRU1BU0sxXzMyKDE4KQorI2RlZmluZSBNX0xEVF9CUkNUTF9WR0FfRU4JCV9TQl9NQUtFTUFTSzFfMzIoMTkpCisjZGVmaW5lIE1fTERUX0JSQ1RMX01TVFJBQk9SVE1PREUJX1NCX01BS0VNQVNLMV8zMigyMSkKKyNkZWZpbmUgTV9MRFRfQlJDVExfU0VDQlVTUkVTRVQJCV9TQl9NQUtFTUFTSzFfMzIoMjIpCisjZGVmaW5lIE1fTERUX0JSQ1RMX0ZBU1RCMkJfRU4JCV9TQl9NQUtFTUFTSzFfMzIoMjMpCisjZGVmaW5lIE1fTERUX0JSQ1RMX1BSSURJU0NBUkQJCV9TQl9NQUtFTUFTSzFfMzIoMjQpCisjZGVmaW5lIE1fTERUX0JSQ1RMX1NFQ0RJU0NBUkQJCV9TQl9NQUtFTUFTSzFfMzIoMjUpCisjZGVmaW5lIE1fTERUX0JSQ1RMX0RJU0NBUkRTVEFUCQlfU0JfTUFLRU1BU0sxXzMyKDI2KQorI2RlZmluZSBNX0xEVF9CUkNUTF9ESVNDQVJEU0VSUl9FTglfU0JfTUFLRU1BU0sxXzMyKDI3KQorCisvKgorICogTERUIENvbW1hbmQgUmVnaXN0ZXIgKFRhYmxlIDgtMTcpLiAgTm90ZSB0aGF0IHRoZXNlIGNvbnN0YW50cworICogYXNzdW1lIHlvdSd2ZSByZWFkIHRoZSBjb21tYW5kIGFuZCBzdGF0dXMgcmVnaXN0ZXIgdG9nZXRoZXIKKyAqIDMyLWJpdCByZWFkIGF0IG9mZnNldCAweDQwCisgKi8KKworI2RlZmluZSBNX0xEVF9DTURfV0FSTVJFU0VUCQlfU0JfTUFLRU1BU0sxXzMyKDE2KQorI2RlZmluZSBNX0xEVF9DTURfRE9VQkxFRU5ERUQJCV9TQl9NQUtFTUFTSzFfMzIoMTcpCisKKyNkZWZpbmUgU19MRFRfQ01EX0NBUFRZUEUJCTI5CisjZGVmaW5lIE1fTERUX0NNRF9DQVBUWVBFCQlfU0JfTUFLRU1BU0tfMzIoMyxTX0xEVF9DTURfQ0FQVFlQRSkKKyNkZWZpbmUgVl9MRFRfQ01EX0NBUFRZUEUoeCkJCV9TQl9NQUtFVkFMVUVfMzIoeCxTX0xEVF9DTURfQ0FQVFlQRSkKKyNkZWZpbmUgR19MRFRfQ01EX0NBUFRZUEUoeCkJCV9TQl9HRVRWQUxVRV8zMih4LFNfTERUX0NNRF9DQVBUWVBFLE1fTERUX0NNRF9DQVBUWVBFKQorCisvKgorICogTERUIGxpbmsgY29udHJvbCByZWdpc3RlciAoVGFibGUgOC0xOCksIGFuZCAoVGFibGUgOC0xOSkKKyAqLworCisjZGVmaW5lIE1fTERUX0xJTktDVFJMX0NBUFNZTkNGTE9PRF9FTglfU0JfTUFLRU1BU0sxXzMyKDEpCisjZGVmaW5lIE1fTERUX0xJTktDVFJMX0NSQ1NUQVJUVEVTVAlfU0JfTUFLRU1BU0sxXzMyKDIpCisjZGVmaW5lIE1fTERUX0xJTktDVFJMX0NSQ0ZPUkNFRVJSCV9TQl9NQUtFTUFTSzFfMzIoMykKKyNkZWZpbmUgTV9MRFRfTElOS0NUUkxfTElOS0ZBSUwJCV9TQl9NQUtFTUFTSzFfMzIoNCkKKyNkZWZpbmUgTV9MRFRfTElOS0NUUkxfSU5JVERPTkUJCV9TQl9NQUtFTUFTSzFfMzIoNSkKKyNkZWZpbmUgTV9MRFRfTElOS0NUUkxfRU9DCQlfU0JfTUFLRU1BU0sxXzMyKDYpCisjZGVmaW5lIE1fTERUX0xJTktDVFJMX1hNSVRPRkYJCV9TQl9NQUtFTUFTSzFfMzIoNykKKworI2RlZmluZSBTX0xEVF9MSU5LQ1RSTF9DUkNFUlIJCTgKKyNkZWZpbmUgTV9MRFRfTElOS0NUUkxfQ1JDRVJSCQlfU0JfTUFLRU1BU0tfMzIoNCxTX0xEVF9MSU5LQ1RSTF9DUkNFUlIpCisjZGVmaW5lIFZfTERUX0xJTktDVFJMX0NSQ0VSUih4KQlfU0JfTUFLRVZBTFVFXzMyKHgsU19MRFRfTElOS0NUUkxfQ1JDRVJSKQorI2RlZmluZSBHX0xEVF9MSU5LQ1RSTF9DUkNFUlIoeCkJX1NCX0dFVFZBTFVFXzMyKHgsU19MRFRfTElOS0NUUkxfQ1JDRVJSLE1fTERUX0xJTktDVFJMX0NSQ0VSUikKKworI2RlZmluZSBTX0xEVF9MSU5LQ1RSTF9NQVhJTgkJMTYKKyNkZWZpbmUgTV9MRFRfTElOS0NUUkxfTUFYSU4JCV9TQl9NQUtFTUFTS18zMigzLFNfTERUX0xJTktDVFJMX01BWElOKQorI2RlZmluZSBWX0xEVF9MSU5LQ1RSTF9NQVhJTih4KQkJX1NCX01BS0VWQUxVRV8zMih4LFNfTERUX0xJTktDVFJMX01BWElOKQorI2RlZmluZSBHX0xEVF9MSU5LQ1RSTF9NQVhJTih4KQkJX1NCX0dFVFZBTFVFXzMyKHgsU19MRFRfTElOS0NUUkxfTUFYSU4sTV9MRFRfTElOS0NUUkxfTUFYSU4pCisKKyNkZWZpbmUgTV9MRFRfTElOS0NUUkxfRFdGQ0xOCQlfU0JfTUFLRU1BU0sxXzMyKDE5KQorCisjZGVmaW5lIFNfTERUX0xJTktDVFJMX01BWE9VVAkJMjAKKyNkZWZpbmUgTV9MRFRfTElOS0NUUkxfTUFYT1VUCQlfU0JfTUFLRU1BU0tfMzIoMyxTX0xEVF9MSU5LQ1RSTF9NQVhPVVQpCisjZGVmaW5lIFZfTERUX0xJTktDVFJMX01BWE9VVCh4KQlfU0JfTUFLRVZBTFVFXzMyKHgsU19MRFRfTElOS0NUUkxfTUFYT1VUKQorI2RlZmluZSBHX0xEVF9MSU5LQ1RSTF9NQVhPVVQoeCkJX1NCX0dFVFZBTFVFXzMyKHgsU19MRFRfTElOS0NUUkxfTUFYT1VULE1fTERUX0xJTktDVFJMX01BWE9VVCkKKworI2RlZmluZSBNX0xEVF9MSU5LQ1RSTF9EV0ZDT1VUCQlfU0JfTUFLRU1BU0sxXzMyKDIzKQorCisjZGVmaW5lIFNfTERUX0xJTktDVFJMX1dJRFRISU4JCTI0CisjZGVmaW5lIE1fTERUX0xJTktDVFJMX1dJRFRISU4JCV9TQl9NQUtFTUFTS18zMigzLFNfTERUX0xJTktDVFJMX1dJRFRISU4pCisjZGVmaW5lIFZfTERUX0xJTktDVFJMX1dJRFRISU4oeCkJX1NCX01BS0VWQUxVRV8zMih4LFNfTERUX0xJTktDVFJMX1dJRFRISU4pCisjZGVmaW5lIEdfTERUX0xJTktDVFJMX1dJRFRISU4oeCkJX1NCX0dFVFZBTFVFXzMyKHgsU19MRFRfTElOS0NUUkxfV0lEVEhJTixNX0xEVF9MSU5LQ1RSTF9XSURUSElOKQorCisjZGVmaW5lIE1fTERUX0xJTktDVFJMX0RXRkNMSU5fRU4JX1NCX01BS0VNQVNLMV8zMigyNykKKworI2RlZmluZSBTX0xEVF9MSU5LQ1RSTF9XSURUSE9VVAkJMjgKKyNkZWZpbmUgTV9MRFRfTElOS0NUUkxfV0lEVEhPVVQJCV9TQl9NQUtFTUFTS18zMigzLFNfTERUX0xJTktDVFJMX1dJRFRIT1VUKQorI2RlZmluZSBWX0xEVF9MSU5LQ1RSTF9XSURUSE9VVCh4KQlfU0JfTUFLRVZBTFVFXzMyKHgsU19MRFRfTElOS0NUUkxfV0lEVEhPVVQpCisjZGVmaW5lIEdfTERUX0xJTktDVFJMX1dJRFRIT1VUKHgpCV9TQl9HRVRWQUxVRV8zMih4LFNfTERUX0xJTktDVFJMX1dJRFRIT1VULE1fTERUX0xJTktDVFJMX1dJRFRIT1VUKQorCisjZGVmaW5lIE1fTERUX0xJTktDVFJMX0RXRkNPVVRfRU4JX1NCX01BS0VNQVNLMV8zMigzMSkKKworLyoKKyAqIExEVCBMaW5rIGZyZXF1ZW5jeSByZWdpc3RlciAgKFRhYmxlIDgtMjApIG9mZnNldCAweDQ4CisgKi8KKworI2RlZmluZSBTX0xEVF9MSU5LRlJFUV9GUkVRCQk4CisjZGVmaW5lIE1fTERUX0xJTktGUkVRX0ZSRVEJCV9TQl9NQUtFTUFTS18zMig0LFNfTERUX0xJTktGUkVRX0ZSRVEpCisjZGVmaW5lIFZfTERUX0xJTktGUkVRX0ZSRVEoeCkJCV9TQl9NQUtFVkFMVUVfMzIoeCxTX0xEVF9MSU5LRlJFUV9GUkVRKQorI2RlZmluZSBHX0xEVF9MSU5LRlJFUV9GUkVRKHgpCQlfU0JfR0VUVkFMVUVfMzIoeCxTX0xEVF9MSU5LRlJFUV9GUkVRLE1fTERUX0xJTktGUkVRX0ZSRVEpCisKKyNkZWZpbmUgS19MRFRfTElOS0ZSRVFfMjAwTUhaCQkwCisjZGVmaW5lIEtfTERUX0xJTktGUkVRXzMwME1IWgkJMQorI2RlZmluZSBLX0xEVF9MSU5LRlJFUV80MDBNSFoJCTIKKyNkZWZpbmUgS19MRFRfTElOS0ZSRVFfNTAwTUhaCQkzCisjZGVmaW5lIEtfTERUX0xJTktGUkVRXzYwME1IWgkJNAorI2RlZmluZSBLX0xEVF9MSU5LRlJFUV84MDBNSFoJCTUKKyNkZWZpbmUgS19MRFRfTElOS0ZSRVFfMTAwME1IWgkJNgorCisvKgorICogTERUIFNSSSBDb21tYW5kIFJlZ2lzdGVyIChUYWJsZSA4LTIxKS4gIE5vdGUgdGhhdCB0aGVzZSBjb25zdGFudHMKKyAqIGFzc3VtZSB5b3UndmUgcmVhZCB0aGUgY29tbWFuZCBhbmQgc3RhdHVzIHJlZ2lzdGVyIHRvZ2V0aGVyCisgKiAzMi1iaXQgcmVhZCBhdCBvZmZzZXQgMHg1MAorICovCisKKyNkZWZpbmUgTV9MRFRfU1JJQ01EX1NJUFJFQURZCQlfU0JfTUFLRU1BU0sxXzMyKDE2KQorI2RlZmluZSBNX0xEVF9TUklDTURfU1lOQ1BUUkNUTAkJX1NCX01BS0VNQVNLMV8zMigxNykKKyNkZWZpbmUgTV9MRFRfU1JJQ01EX1JFRFVDRVNZTkNaRVJPCV9TQl9NQUtFTUFTSzFfMzIoMTgpCisjaWYgU0lCWVRFX0hEUl9GRUFUVVJFX1VQX1RPKDEyNTAsIFBBU1MxKQorI2RlZmluZSBNX0xEVF9TUklDTURfRElTU1RBUlZBVElPTkNOVAlfU0JfTUFLRU1BU0sxXzMyKDE5KQkvKiBQQVNTMSAqLworI2VuZGlmIC8qIHVwIHRvIDEyNTAgUEFTUzEgKi8KKyNpZiBTSUJZVEVfSERSX0ZFQVRVUkUoMTI1MCwgUEFTUzIpIHx8IFNJQllURV9IRFJfRkVBVFVSRSgxMTJ4LCBQQVNTMSkKKyNkZWZpbmUgTV9MRFRfU1JJQ01EX0RJU01VTFRUWFZMRAlfU0JfTUFLRU1BU0sxXzMyKDE5KQorI2RlZmluZSBNX0xEVF9TUklDTURfRVhQRU5ESUFOCQlfU0JfTUFLRU1BU0sxXzMyKDI2KQorI2VuZGlmIC8qIDEyNTAgUEFTUzIgfHwgMTEyeCBQQVNTMSAqLworCisKKyNkZWZpbmUgU19MRFRfU1JJQ01EX1JYTUFSR0lOCQkyMAorI2RlZmluZSBNX0xEVF9TUklDTURfUlhNQVJHSU4JCV9TQl9NQUtFTUFTS18zMig1LFNfTERUX1NSSUNNRF9SWE1BUkdJTikKKyNkZWZpbmUgVl9MRFRfU1JJQ01EX1JYTUFSR0lOKHgpCV9TQl9NQUtFVkFMVUVfMzIoeCxTX0xEVF9TUklDTURfUlhNQVJHSU4pCisjZGVmaW5lIEdfTERUX1NSSUNNRF9SWE1BUkdJTih4KQlfU0JfR0VUVkFMVUVfMzIoeCxTX0xEVF9TUklDTURfUlhNQVJHSU4sTV9MRFRfU1JJQ01EX1JYTUFSR0lOKQorCisjZGVmaW5lIE1fTERUX1NSSUNNRF9MRFRQTExDT01QQVQJX1NCX01BS0VNQVNLMV8zMigyNSkKKworI2RlZmluZSBTX0xEVF9TUklDTURfVFhJTklUSUFMT0ZGU0VUCTI4CisjZGVmaW5lIE1fTERUX1NSSUNNRF9UWElOSVRJQUxPRkZTRVQJX1NCX01BS0VNQVNLXzMyKDMsU19MRFRfU1JJQ01EX1RYSU5JVElBTE9GRlNFVCkKKyNkZWZpbmUgVl9MRFRfU1JJQ01EX1RYSU5JVElBTE9GRlNFVCh4KQlfU0JfTUFLRVZBTFVFXzMyKHgsU19MRFRfU1JJQ01EX1RYSU5JVElBTE9GRlNFVCkKKyNkZWZpbmUgR19MRFRfU1JJQ01EX1RYSU5JVElBTE9GRlNFVCh4KQlfU0JfR0VUVkFMVUVfMzIoeCxTX0xEVF9TUklDTURfVFhJTklUSUFMT0ZGU0VULE1fTERUX1NSSUNNRF9UWElOSVRJQUxPRkZTRVQpCisKKyNkZWZpbmUgTV9MRFRfU1JJQ01EX0xJTktGUkVRRElSRUNUCV9TQl9NQUtFTUFTSzFfMzIoMzEpCisKKy8qCisgKiBMRFQgRXJyb3IgY29udHJvbCBhbmQgc3RhdHVzIHJlZ2lzdGVyIChUYWJsZSA4LTIyKSAoVGFibGUgOC0yMykKKyAqLworCisjZGVmaW5lIE1fTERUX0VSUkNUTF9QUk9URkFUQUxfRU4JX1NCX01BS0VNQVNLMV8zMigwKQorI2RlZmluZSBNX0xEVF9FUlJDVExfUFJPVE5PTkZBVEFMX0VOCV9TQl9NQUtFTUFTSzFfMzIoMSkKKyNkZWZpbmUgTV9MRFRfRVJSQ1RMX1BST1RTWU5DRkxPT0RfRU4JX1NCX01BS0VNQVNLMV8zMigyKQorI2RlZmluZSBNX0xEVF9FUlJDVExfT1ZGRkFUQUxfRU4JX1NCX01BS0VNQVNLMV8zMigzKQorI2RlZmluZSBNX0xEVF9FUlJDVExfT1ZGTk9ORkFUQUxfRU4JX1NCX01BS0VNQVNLMV8zMig0KQorI2RlZmluZSBNX0xEVF9FUlJDVExfT1ZGU1lOQ0ZMT09EX0VOCV9TQl9NQUtFTUFTSzFfMzIoNSkKKyNkZWZpbmUgTV9MRFRfRVJSQ1RMX0VPQ05YQUZBVEFMX0VOCV9TQl9NQUtFTUFTSzFfMzIoNikKKyNkZWZpbmUgTV9MRFRfRVJSQ1RMX0VPQ05YQU5PTkZBVEFMX0VOCV9TQl9NQUtFTUFTSzFfMzIoNykKKyNkZWZpbmUgTV9MRFRfRVJSQ1RMX0VPQ05YQVNZTkNGTE9PRF9FTglfU0JfTUFLRU1BU0sxXzMyKDgpCisjZGVmaW5lIE1fTERUX0VSUkNUTF9DUkNGQVRBTF9FTglfU0JfTUFLRU1BU0sxXzMyKDkpCisjZGVmaW5lIE1fTERUX0VSUkNUTF9DUkNOT05GQVRBTF9FTglfU0JfTUFLRU1BU0sxXzMyKDEwKQorI2RlZmluZSBNX0xEVF9FUlJDVExfU0VSUkZBVEFMX0VOCV9TQl9NQUtFTUFTSzFfMzIoMTEpCisjZGVmaW5lIE1fTERUX0VSUkNUTF9TUkNUQUdGQVRBTF9FTglfU0JfTUFLRU1BU0sxXzMyKDEyKQorI2RlZmluZSBNX0xEVF9FUlJDVExfU1JDVEFHTk9ORkFUQUxfRU4JX1NCX01BS0VNQVNLMV8zMigxMykKKyNkZWZpbmUgTV9MRFRfRVJSQ1RMX1NSQ1RBR1NZTkNGTE9PRF9FTglfU0JfTUFLRU1BU0sxXzMyKDE0KQorI2RlZmluZSBNX0xEVF9FUlJDVExfTUFQTlhBRkFUQUxfRU4JX1NCX01BS0VNQVNLMV8zMigxNSkKKyNkZWZpbmUgTV9MRFRfRVJSQ1RMX01BUE5YQU5PTkZBVEFMX0VOCV9TQl9NQUtFTUFTSzFfMzIoMTYpCisjZGVmaW5lIE1fTERUX0VSUkNUTF9NQVBOWEFTWU5DRkxPT0RfRU4JX1NCX01BS0VNQVNLMV8zMigxNykKKworI2RlZmluZSBNX0xEVF9FUlJDVExfUFJPVE9FUlIJCV9TQl9NQUtFTUFTSzFfMzIoMjQpCisjZGVmaW5lIE1fTERUX0VSUkNUTF9PVkZFUlIJCV9TQl9NQUtFTUFTSzFfMzIoMjUpCisjZGVmaW5lIE1fTERUX0VSUkNUTF9FT0NOWEFFUlIJCV9TQl9NQUtFTUFTSzFfMzIoMjYpCisjZGVmaW5lIE1fTERUX0VSUkNUTF9TUkNUQUdFUlIJCV9TQl9NQUtFTUFTSzFfMzIoMjcpCisjZGVmaW5lIE1fTERUX0VSUkNUTF9NQVBOWEFFUlIJCV9TQl9NQUtFTUFTSzFfMzIoMjgpCisKKy8qCisgKiBTUkkgQ29udHJvbCByZWdpc3RlciAoVGFibGUgOC0yNCwgOC0yNSkgIE9mZnNldCAweDZDCisgKi8KKworI2RlZmluZSBTX0xEVF9TUklDVFJMX05FRURSRVNQCQkwCisjZGVmaW5lIE1fTERUX1NSSUNUUkxfTkVFRFJFU1AJCV9TQl9NQUtFTUFTS18zMigyLFNfTERUX1NSSUNUUkxfTkVFRFJFU1ApCisjZGVmaW5lIFZfTERUX1NSSUNUUkxfTkVFRFJFU1AoeCkJX1NCX01BS0VWQUxVRV8zMih4LFNfTERUX1NSSUNUUkxfTkVFRFJFU1ApCisjZGVmaW5lIEdfTERUX1NSSUNUUkxfTkVFRFJFU1AoeCkJX1NCX0dFVFZBTFVFXzMyKHgsU19MRFRfU1JJQ1RSTF9ORUVEUkVTUCxNX0xEVF9TUklDVFJMX05FRURSRVNQKQorCisjZGVmaW5lIFNfTERUX1NSSUNUUkxfTkVFRE5QUkVRCQkyCisjZGVmaW5lIE1fTERUX1NSSUNUUkxfTkVFRE5QUkVRCQlfU0JfTUFLRU1BU0tfMzIoMixTX0xEVF9TUklDVFJMX05FRUROUFJFUSkKKyNkZWZpbmUgVl9MRFRfU1JJQ1RSTF9ORUVETlBSRVEoeCkJX1NCX01BS0VWQUxVRV8zMih4LFNfTERUX1NSSUNUUkxfTkVFRE5QUkVRKQorI2RlZmluZSBHX0xEVF9TUklDVFJMX05FRUROUFJFUSh4KQlfU0JfR0VUVkFMVUVfMzIoeCxTX0xEVF9TUklDVFJMX05FRUROUFJFUSxNX0xEVF9TUklDVFJMX05FRUROUFJFUSkKKworI2RlZmluZSBTX0xEVF9TUklDVFJMX05FRURQUkVRCQk0CisjZGVmaW5lIE1fTERUX1NSSUNUUkxfTkVFRFBSRVEJCV9TQl9NQUtFTUFTS18zMigyLFNfTERUX1NSSUNUUkxfTkVFRFBSRVEpCisjZGVmaW5lIFZfTERUX1NSSUNUUkxfTkVFRFBSRVEoeCkJX1NCX01BS0VWQUxVRV8zMih4LFNfTERUX1NSSUNUUkxfTkVFRFBSRVEpCisjZGVmaW5lIEdfTERUX1NSSUNUUkxfTkVFRFBSRVEoeCkJX1NCX0dFVFZBTFVFXzMyKHgsU19MRFRfU1JJQ1RSTF9ORUVEUFJFUSxNX0xEVF9TUklDVFJMX05FRURQUkVRKQorCisjZGVmaW5lIFNfTERUX1NSSUNUUkxfV0FOVFJFU1AJCTgKKyNkZWZpbmUgTV9MRFRfU1JJQ1RSTF9XQU5UUkVTUAkJX1NCX01BS0VNQVNLXzMyKDIsU19MRFRfU1JJQ1RSTF9XQU5UUkVTUCkKKyNkZWZpbmUgVl9MRFRfU1JJQ1RSTF9XQU5UUkVTUCh4KQlfU0JfTUFLRVZBTFVFXzMyKHgsU19MRFRfU1JJQ1RSTF9XQU5UUkVTUCkKKyNkZWZpbmUgR19MRFRfU1JJQ1RSTF9XQU5UUkVTUCh4KQlfU0JfR0VUVkFMVUVfMzIoeCxTX0xEVF9TUklDVFJMX1dBTlRSRVNQLE1fTERUX1NSSUNUUkxfV0FOVFJFU1ApCisKKyNkZWZpbmUgU19MRFRfU1JJQ1RSTF9XQU5UTlBSRVEJCTEwCisjZGVmaW5lIE1fTERUX1NSSUNUUkxfV0FOVE5QUkVRCQlfU0JfTUFLRU1BU0tfMzIoMixTX0xEVF9TUklDVFJMX1dBTlROUFJFUSkKKyNkZWZpbmUgVl9MRFRfU1JJQ1RSTF9XQU5UTlBSRVEoeCkJX1NCX01BS0VWQUxVRV8zMih4LFNfTERUX1NSSUNUUkxfV0FOVE5QUkVRKQorI2RlZmluZSBHX0xEVF9TUklDVFJMX1dBTlROUFJFUSh4KQlfU0JfR0VUVkFMVUVfMzIoeCxTX0xEVF9TUklDVFJMX1dBTlROUFJFUSxNX0xEVF9TUklDVFJMX1dBTlROUFJFUSkKKworI2RlZmluZSBTX0xEVF9TUklDVFJMX1dBTlRQUkVRCQkxMgorI2RlZmluZSBNX0xEVF9TUklDVFJMX1dBTlRQUkVRCQlfU0JfTUFLRU1BU0tfMzIoMixTX0xEVF9TUklDVFJMX1dBTlRQUkVRKQorI2RlZmluZSBWX0xEVF9TUklDVFJMX1dBTlRQUkVRKHgpCV9TQl9NQUtFVkFMVUVfMzIoeCxTX0xEVF9TUklDVFJMX1dBTlRQUkVRKQorI2RlZmluZSBHX0xEVF9TUklDVFJMX1dBTlRQUkVRKHgpCV9TQl9HRVRWQUxVRV8zMih4LFNfTERUX1NSSUNUUkxfV0FOVFBSRVEsTV9MRFRfU1JJQ1RSTF9XQU5UUFJFUSkKKworI2RlZmluZSBTX0xEVF9TUklDVFJMX0JVRlJFTFNQQUNFCTE2CisjZGVmaW5lIE1fTERUX1NSSUNUUkxfQlVGUkVMU1BBQ0UJX1NCX01BS0VNQVNLXzMyKDQsU19MRFRfU1JJQ1RSTF9CVUZSRUxTUEFDRSkKKyNkZWZpbmUgVl9MRFRfU1JJQ1RSTF9CVUZSRUxTUEFDRSh4KQlfU0JfTUFLRVZBTFVFXzMyKHgsU19MRFRfU1JJQ1RSTF9CVUZSRUxTUEFDRSkKKyNkZWZpbmUgR19MRFRfU1JJQ1RSTF9CVUZSRUxTUEFDRSh4KQlfU0JfR0VUVkFMVUVfMzIoeCxTX0xEVF9TUklDVFJMX0JVRlJFTFNQQUNFLE1fTERUX1NSSUNUUkxfQlVGUkVMU1BBQ0UpCisKKy8qCisgKiBMRFQgU1JJIFRyYW5zbWl0IEJ1ZmZlciBDb3VudCByZWdpc3RlciAoVGFibGUgOC0yNikKKyAqLworCisjZGVmaW5lIFNfTERUX1RYQlVGQ05UX1BDTUQJCTAKKyNkZWZpbmUgTV9MRFRfVFhCVUZDTlRfUENNRAkJX1NCX01BS0VNQVNLXzMyKDQsU19MRFRfVFhCVUZDTlRfUENNRCkKKyNkZWZpbmUgVl9MRFRfVFhCVUZDTlRfUENNRCh4KQkJX1NCX01BS0VWQUxVRV8zMih4LFNfTERUX1RYQlVGQ05UX1BDTUQpCisjZGVmaW5lIEdfTERUX1RYQlVGQ05UX1BDTUQoeCkJCV9TQl9HRVRWQUxVRV8zMih4LFNfTERUX1RYQlVGQ05UX1BDTUQsTV9MRFRfVFhCVUZDTlRfUENNRCkKKworI2RlZmluZSBTX0xEVF9UWEJVRkNOVF9QREFUQQkJNAorI2RlZmluZSBNX0xEVF9UWEJVRkNOVF9QREFUQQkJX1NCX01BS0VNQVNLXzMyKDQsU19MRFRfVFhCVUZDTlRfUERBVEEpCisjZGVmaW5lIFZfTERUX1RYQlVGQ05UX1BEQVRBKHgpCQlfU0JfTUFLRVZBTFVFXzMyKHgsU19MRFRfVFhCVUZDTlRfUERBVEEpCisjZGVmaW5lIEdfTERUX1RYQlVGQ05UX1BEQVRBKHgpCQlfU0JfR0VUVkFMVUVfMzIoeCxTX0xEVF9UWEJVRkNOVF9QREFUQSxNX0xEVF9UWEJVRkNOVF9QREFUQSkKKworI2RlZmluZSBTX0xEVF9UWEJVRkNOVF9OUENNRAkJOAorI2RlZmluZSBNX0xEVF9UWEJVRkNOVF9OUENNRAkJX1NCX01BS0VNQVNLXzMyKDQsU19MRFRfVFhCVUZDTlRfTlBDTUQpCisjZGVmaW5lIFZfTERUX1RYQlVGQ05UX05QQ01EKHgpCQlfU0JfTUFLRVZBTFVFXzMyKHgsU19MRFRfVFhCVUZDTlRfTlBDTUQpCisjZGVmaW5lIEdfTERUX1RYQlVGQ05UX05QQ01EKHgpCQlfU0JfR0VUVkFMVUVfMzIoeCxTX0xEVF9UWEJVRkNOVF9OUENNRCxNX0xEVF9UWEJVRkNOVF9OUENNRCkKKworI2RlZmluZSBTX0xEVF9UWEJVRkNOVF9OUERBVEEJCTEyCisjZGVmaW5lIE1fTERUX1RYQlVGQ05UX05QREFUQQkJX1NCX01BS0VNQVNLXzMyKDQsU19MRFRfVFhCVUZDTlRfTlBEQVRBKQorI2RlZmluZSBWX0xEVF9UWEJVRkNOVF9OUERBVEEoeCkJX1NCX01BS0VWQUxVRV8zMih4LFNfTERUX1RYQlVGQ05UX05QREFUQSkKKyNkZWZpbmUgR19MRFRfVFhCVUZDTlRfTlBEQVRBKHgpCV9TQl9HRVRWQUxVRV8zMih4LFNfTERUX1RYQlVGQ05UX05QREFUQSxNX0xEVF9UWEJVRkNOVF9OUERBVEEpCisKKyNkZWZpbmUgU19MRFRfVFhCVUZDTlRfUkNNRAkJMTYKKyNkZWZpbmUgTV9MRFRfVFhCVUZDTlRfUkNNRAkJX1NCX01BS0VNQVNLXzMyKDQsU19MRFRfVFhCVUZDTlRfUkNNRCkKKyNkZWZpbmUgVl9MRFRfVFhCVUZDTlRfUkNNRCh4KQkJX1NCX01BS0VWQUxVRV8zMih4LFNfTERUX1RYQlVGQ05UX1JDTUQpCisjZGVmaW5lIEdfTERUX1RYQlVGQ05UX1JDTUQoeCkJCV9TQl9HRVRWQUxVRV8zMih4LFNfTERUX1RYQlVGQ05UX1JDTUQsTV9MRFRfVFhCVUZDTlRfUkNNRCkKKworI2RlZmluZSBTX0xEVF9UWEJVRkNOVF9SREFUQQkJMjAKKyNkZWZpbmUgTV9MRFRfVFhCVUZDTlRfUkRBVEEJCV9TQl9NQUtFTUFTS18zMig0LFNfTERUX1RYQlVGQ05UX1JEQVRBKQorI2RlZmluZSBWX0xEVF9UWEJVRkNOVF9SREFUQSh4KQkJX1NCX01BS0VWQUxVRV8zMih4LFNfTERUX1RYQlVGQ05UX1JEQVRBKQorI2RlZmluZSBHX0xEVF9UWEJVRkNOVF9SREFUQSh4KQkJX1NCX0dFVFZBTFVFXzMyKHgsU19MRFRfVFhCVUZDTlRfUkRBVEEsTV9MRFRfVFhCVUZDTlRfUkRBVEEpCisKKyNpZiBTSUJZVEVfSERSX0ZFQVRVUkUoMTI1MCwgUEFTUzIpIHx8IFNJQllURV9IRFJfRkVBVFVSRSgxMTJ4LCBQQVNTMSkKKy8qCisgKiBBZGRpdGlvbmFsIFN0YXR1cyBSZWdpc3RlcgorICovCisKKyNkZWZpbmUgU19MRFRfQUREU1RBVFVTX1RHVERPTkUJCTAKKyNkZWZpbmUgTV9MRFRfQUREU1RBVFVTX1RHVERPTkUJCV9TQl9NQUtFTUFTS18zMig4LFNfTERUX0FERFNUQVRVU19UR1RET05FKQorI2RlZmluZSBWX0xEVF9BRERTVEFUVVNfVEdURE9ORSh4KQlfU0JfTUFLRVZBTFVFXzMyKHgsU19MRFRfQUREU1RBVFVTX1RHVERPTkUpCisjZGVmaW5lIEdfTERUX0FERFNUQVRVU19UR1RET05FKHgpCV9TQl9HRVRWQUxVRV8zMih4LFNfTERUX0FERFNUQVRVU19UR1RET05FLE1fTERUX0FERFNUQVRVU19UR1RET05FKQorI2VuZGlmIC8qIDEyNTAgUEFTUzIgfHwgMTEyeCBQQVNTMSAqLworCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zaWJ5dGUvc2IxMjUwX21hYy5oIGIvaW5jbHVkZS9hc20tbWlwcy9zaWJ5dGUvc2IxMjUwX21hYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxZjYwM2YKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NpYnl0ZS9zYjEyNTBfbWFjLmgKQEAgLTAsMCArMSw2NDMgQEAKKy8qICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAqICBTQjEyNTAgQm9hcmQgU3VwcG9ydCBQYWNrYWdlCisgICAgKiAgCisgICAgKiAgTUFDIGNvbnN0YW50cyBhbmQgbWFjcm9zCQkJRmlsZTogc2IxMjUwX21hYy5oCisgICAgKiAgCisgICAgKiAgVGhpcyBtb2R1bGUgY29udGFpbnMgY29uc3RhbnRzIGFuZCBtYWNyb3MgZm9yIHRoZSBTQjEyNTAncworICAgICogIGV0aGVybmV0IGNvbnRyb2xsZXJzLgorICAgICogIAorICAgICogIFNCMTI1MCBzcGVjaWZpY2F0aW9uIGxldmVsOiAgVXNlcidzIG1hbnVhbCAxLzAyLzAyCisgICAgKiAgCisgICAgKiAgQXV0aG9yOiAgTWl0Y2ggTGljaHRlbmJlcmcKKyAgICAqICAKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIAorICAgICoKKyAgICAqICBDb3B5cmlnaHQgMjAwMCwyMDAxLDIwMDIsMjAwMworICAgICogIEJyb2FkY29tIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICAgICogIAorICAgICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgCisgICAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgCisgICAgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgCisgICAgKiAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgICAgKgorICAgICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICAgKgorICAgICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCAKKyAgICAqICBNQSAwMjExMS0xMzA3IFVTQQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisKKyNpZm5kZWYgX1NCMTI1MF9NQUNfSAorI2RlZmluZSBfU0IxMjUwX01BQ19ICisKKyNpbmNsdWRlICJzYjEyNTBfZGVmcy5oIgorCisvKiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgKiAgRXRoZXJuZXQgTUFDIFJlZ2lzdGVycworICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisvKgorICogTUFDIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKFRhYmxlIDktMTMpCisgKiBSZWdpc3RlcjogTUFDX0NGR18wCisgKiBSZWdpc3RlcjogTUFDX0NGR18xCisgKiBSZWdpc3RlcjogTUFDX0NGR18yCisgKi8KKworCisjZGVmaW5lIE1fTUFDX1JFU0VSVkVEMCAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDApCisjZGVmaW5lIE1fTUFDX1RYX0hPTERfU09QX0VOICAgICAgICBfU0JfTUFLRU1BU0sxKDEpCisjZGVmaW5lIE1fTUFDX1JFVFJZX0VOICAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDIpCisjZGVmaW5lIE1fTUFDX1JFVF9EUlBSRVFfRU4gICAgICAgICBfU0JfTUFLRU1BU0sxKDMpCisjZGVmaW5lIE1fTUFDX1JFVF9VRkxfRU4gICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDQpCisjZGVmaW5lIE1fTUFDX0JVUlNUX0VOICAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDUpCisKKyNkZWZpbmUgU19NQUNfVFhfUEFVU0UgICAgICAgICAgICAgIF9TQl9NQUtFNjQoNikKKyNkZWZpbmUgTV9NQUNfVFhfUEFVU0VfQ05UICAgICAgICAgIF9TQl9NQUtFTUFTSygzLFNfTUFDX1RYX1BBVVNFKQorI2RlZmluZSBWX01BQ19UWF9QQVVTRV9DTlQoeCkgICAgICAgX1NCX01BS0VWQUxVRSh4LFNfTUFDX1RYX1BBVVNFKQorCisjZGVmaW5lIEtfTUFDX1RYX1BBVVNFX0NOVF81MTIgICAgICAwCisjZGVmaW5lIEtfTUFDX1RYX1BBVVNFX0NOVF8xSyAgICAgICAxCisjZGVmaW5lIEtfTUFDX1RYX1BBVVNFX0NOVF8ySyAgICAgICAyCisjZGVmaW5lIEtfTUFDX1RYX1BBVVNFX0NOVF80SyAgICAgICAzCisjZGVmaW5lIEtfTUFDX1RYX1BBVVNFX0NOVF84SyAgICAgICA0CisjZGVmaW5lIEtfTUFDX1RYX1BBVVNFX0NOVF8xNksgICAgICA1CisjZGVmaW5lIEtfTUFDX1RYX1BBVVNFX0NOVF8zMksgICAgICA2CisjZGVmaW5lIEtfTUFDX1RYX1BBVVNFX0NOVF82NEsgICAgICA3CisKKyNkZWZpbmUgVl9NQUNfVFhfUEFVU0VfQ05UXzUxMiAgICAgIFZfTUFDX1RYX1BBVVNFX0NOVChLX01BQ19UWF9QQVVTRV9DTlRfNTEyKQorI2RlZmluZSBWX01BQ19UWF9QQVVTRV9DTlRfMUsgICAgICAgVl9NQUNfVFhfUEFVU0VfQ05UKEtfTUFDX1RYX1BBVVNFX0NOVF8xSykKKyNkZWZpbmUgVl9NQUNfVFhfUEFVU0VfQ05UXzJLICAgICAgIFZfTUFDX1RYX1BBVVNFX0NOVChLX01BQ19UWF9QQVVTRV9DTlRfMkspCisjZGVmaW5lIFZfTUFDX1RYX1BBVVNFX0NOVF80SyAgICAgICBWX01BQ19UWF9QQVVTRV9DTlQoS19NQUNfVFhfUEFVU0VfQ05UXzRLKQorI2RlZmluZSBWX01BQ19UWF9QQVVTRV9DTlRfOEsgICAgICAgVl9NQUNfVFhfUEFVU0VfQ05UKEtfTUFDX1RYX1BBVVNFX0NOVF84SykKKyNkZWZpbmUgVl9NQUNfVFhfUEFVU0VfQ05UXzE2SyAgICAgIFZfTUFDX1RYX1BBVVNFX0NOVChLX01BQ19UWF9QQVVTRV9DTlRfMTZLKQorI2RlZmluZSBWX01BQ19UWF9QQVVTRV9DTlRfMzJLICAgICAgVl9NQUNfVFhfUEFVU0VfQ05UKEtfTUFDX1RYX1BBVVNFX0NOVF8zMkspCisjZGVmaW5lIFZfTUFDX1RYX1BBVVNFX0NOVF82NEsgICAgICBWX01BQ19UWF9QQVVTRV9DTlQoS19NQUNfVFhfUEFVU0VfQ05UXzY0SykKKworI2RlZmluZSBNX01BQ19SRVNFUlZFRDEgICAgICAgICAgICAgX1NCX01BS0VNQVNLKDgsOSkKKworI2RlZmluZSBNX01BQ19BUF9TVEFUX0VOICAgICAgICAgICAgX1NCX01BS0VNQVNLMSgxNykKKyNkZWZpbmUgTV9NQUNfUkVTRVJWRUQyCQkgICAgX1NCX01BS0VNQVNLMSgxOCkKKyNkZWZpbmUgTV9NQUNfRFJQX0VSUlBLVF9FTiAgICAgICAgIF9TQl9NQUtFTUFTSzEoMTkpCisjZGVmaW5lIE1fTUFDX0RSUF9GQ1NFUlJQS1RfRU4gICAgICBfU0JfTUFLRU1BU0sxKDIwKQorI2RlZmluZSBNX01BQ19EUlBfQ09ERUVSUlBLVF9FTiAgICAgX1NCX01BS0VNQVNLMSgyMSkKKyNkZWZpbmUgTV9NQUNfRFJQX0RSQkxFUlJQS1RfRU4gICAgIF9TQl9NQUtFTUFTSzEoMjIpCisjZGVmaW5lIE1fTUFDX0RSUF9STlRQS1RfRU4gICAgICAgICBfU0JfTUFLRU1BU0sxKDIzKQorI2RlZmluZSBNX01BQ19EUlBfT1NaUEtUX0VOICAgICAgICAgX1NCX01BS0VNQVNLMSgyNCkKKyNkZWZpbmUgTV9NQUNfRFJQX0xFTkVSUlBLVF9FTiAgICAgIF9TQl9NQUtFTUFTSzEoMjUpCisKKyNkZWZpbmUgTV9NQUNfUkVTRVJWRUQzICAgICAgICAgICAgIF9TQl9NQUtFTUFTSyg2LDI2KQorCisjZGVmaW5lIE1fTUFDX0JZUEFTU19TRUwgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDMyKQorI2RlZmluZSBNX01BQ19IRFhfRU4gICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLMSgzMykKKworI2RlZmluZSBTX01BQ19TUEVFRF9TRUwgICAgICAgICAgICAgX1NCX01BS0U2NCgzNCkKKyNkZWZpbmUgTV9NQUNfU1BFRURfU0VMICAgICAgICAgICAgIF9TQl9NQUtFTUFTSygyLFNfTUFDX1NQRUVEX1NFTCkKKyNkZWZpbmUgVl9NQUNfU1BFRURfU0VMKHgpCSAgICBfU0JfTUFLRVZBTFVFKHgsU19NQUNfU1BFRURfU0VMKQorI2RlZmluZSBHX01BQ19TUEVFRF9TRUwoeCkJICAgIF9TQl9HRVRWQUxVRSh4LFNfTUFDX1NQRUVEX1NFTCxNX01BQ19TUEVFRF9TRUwpCisKKyNkZWZpbmUgS19NQUNfU1BFRURfU0VMXzEwTUJQUyAgICAgIDAKKyNkZWZpbmUgS19NQUNfU1BFRURfU0VMXzEwME1CUFMgICAgIDEKKyNkZWZpbmUgS19NQUNfU1BFRURfU0VMXzEwMDBNQlBTICAgIDIKKyNkZWZpbmUgS19NQUNfU1BFRURfU0VMX1JFU0VSVkVEICAgIDMKKworI2RlZmluZSBWX01BQ19TUEVFRF9TRUxfMTBNQlBTICAgICAgVl9NQUNfU1BFRURfU0VMKEtfTUFDX1NQRUVEX1NFTF8xME1CUFMpCisjZGVmaW5lIFZfTUFDX1NQRUVEX1NFTF8xMDBNQlBTICAgICBWX01BQ19TUEVFRF9TRUwoS19NQUNfU1BFRURfU0VMXzEwME1CUFMpCisjZGVmaW5lIFZfTUFDX1NQRUVEX1NFTF8xMDAwTUJQUyAgICBWX01BQ19TUEVFRF9TRUwoS19NQUNfU1BFRURfU0VMXzEwMDBNQlBTKQorI2RlZmluZSBWX01BQ19TUEVFRF9TRUxfUkVTRVJWRUQgICAgVl9NQUNfU1BFRURfU0VMKEtfTUFDX1NQRUVEX1NFTF9SRVNFUlZFRCkKKworI2RlZmluZSBNX01BQ19UWF9DTEtfRURHRV9TRUwgICAgICAgX1NCX01BS0VNQVNLMSgzNikKKyNkZWZpbmUgTV9NQUNfTE9PUEJBQ0tfU0VMICAgICAgICAgIF9TQl9NQUtFTUFTSzEoMzcpCisjZGVmaW5lIE1fTUFDX0ZBU1RfU1lOQyAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDM4KQorI2RlZmluZSBNX01BQ19TU19FTiAgICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLMSgzOSkKKworI2RlZmluZSBTX01BQ19CWVBBU1NfQ0ZHCSAgICBfU0JfTUFLRTY0KDQwKQorI2RlZmluZSBNX01BQ19CWVBBU1NfQ0ZHICAgICAgICAgICAgX1NCX01BS0VNQVNLKDIsU19NQUNfQllQQVNTX0NGRykKKyNkZWZpbmUgVl9NQUNfQllQQVNTX0NGRyh4KSAgICAgICAgIF9TQl9NQUtFVkFMVUUoeCxTX01BQ19CWVBBU1NfQ0ZHKQorI2RlZmluZSBHX01BQ19CWVBBU1NfQ0ZHKHgpICAgICAgICAgX1NCX0dFVFZBTFVFKHgsU19NQUNfQllQQVNTX0NGRyxNX01BQ19CWVBBU1NfQ0ZHKQorCisjZGVmaW5lIEtfTUFDX0JZUEFTU19HTUlJCSAgICAwCisjZGVmaW5lIEtfTUFDX0JZUEFTU19FTkNPREVEICAgICAgICAxCisjZGVmaW5lIEtfTUFDX0JZUEFTU19TT1AgICAgICAgICAgICAyCisjZGVmaW5lIEtfTUFDX0JZUEFTU19FT1AgICAgICAgICAgICAzCisKKyNkZWZpbmUgTV9NQUNfQllQQVNTXzE2ICAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoNDIpCisjZGVmaW5lIE1fTUFDX0JZUEFTU19GQ1NfQ0hLCSAgICBfU0JfTUFLRU1BU0sxKDQzKQorCisjaWYgU0lCWVRFX0hEUl9GRUFUVVJFKDEyNTAsIFBBU1MyKSB8fCBTSUJZVEVfSERSX0ZFQVRVUkUoMTEyeCwgUEFTUzEpCisjZGVmaW5lIE1fTUFDX1JYX0NIX1NFTF9NU0IJICAgIF9TQl9NQUtFTUFTSzEoNDQpCisjZW5kaWYgLyogMTI1MCBQQVNTMiB8fCAxMTJ4IFBBU1MxICovCisKKyNpZiBTSUJZVEVfSERSX0ZFQVRVUkUoMTI1MCwgUEFTUzMpIHx8IFNJQllURV9IRFJfRkVBVFVSRSgxMTJ4LCBQQVNTMSkKKyNkZWZpbmUgTV9NQUNfU1BMSVRfQ0hfU0VMCSAgICBfU0JfTUFLRU1BU0sxKDQ1KQorI2VuZGlmIC8qIDEyNTAgUEFTUzMgfHwgMTEyeCBQQVNTMSAqLworCisjZGVmaW5lIFNfTUFDX0JZUEFTU19JRkcgICAgICAgICAgICBfU0JfTUFLRTY0KDQ2KQorI2RlZmluZSBNX01BQ19CWVBBU1NfSUZHICAgICAgICAgICAgX1NCX01BS0VNQVNLKDgsU19NQUNfQllQQVNTX0lGRykKKyNkZWZpbmUgVl9NQUNfQllQQVNTX0lGRyh4KQkgICAgX1NCX01BS0VWQUxVRSh4LFNfTUFDX0JZUEFTU19JRkcpCisjZGVmaW5lIEdfTUFDX0JZUEFTU19JRkcoeCkJICAgIF9TQl9HRVRWQUxVRSh4LFNfTUFDX0JZUEFTU19JRkcsTV9NQUNfQllQQVNTX0lGRykKKworI2RlZmluZSBLX01BQ19GQ19DTURfRElTQUJMRUQgICAgICAgMAorI2RlZmluZSBLX01BQ19GQ19DTURfRU5BQkxFRCAgICAgICAgMQorI2RlZmluZSBLX01BQ19GQ19DTURfRU5BQl9GQUxTRUNBUlIgMgorCisjZGVmaW5lIFZfTUFDX0ZDX0NNRF9ESVNBQkxFRCAgICAgICBWX01BQ19GQ19DTUQoS19NQUNfRkNfQ01EX0RJU0FCTEVEKQorI2RlZmluZSBWX01BQ19GQ19DTURfRU5BQkxFRCAgICAgICAgVl9NQUNfRkNfQ01EKEtfTUFDX0ZDX0NNRF9FTkFCTEVEKQorI2RlZmluZSBWX01BQ19GQ19DTURfRU5BQl9GQUxTRUNBUlIgVl9NQUNfRkNfQ01EKEtfTUFDX0ZDX0NNRF9FTkFCX0ZBTFNFQ0FSUikKKworI2RlZmluZSBNX01BQ19GQ19TRUwgICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLMSg1NCkKKworI2RlZmluZSBTX01BQ19GQ19DTUQgICAgICAgICAgICAgICAgX1NCX01BS0U2NCg1NSkKKyNkZWZpbmUgTV9NQUNfRkNfQ01EICAgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSygyLFNfTUFDX0ZDX0NNRCkKKyNkZWZpbmUgVl9NQUNfRkNfQ01EKHgpCSAgICAgICAgICAgIF9TQl9NQUtFVkFMVUUoeCxTX01BQ19GQ19DTUQpCisjZGVmaW5lIEdfTUFDX0ZDX0NNRCh4KQkgICAgICAgICAgICBfU0JfR0VUVkFMVUUoeCxTX01BQ19GQ19DTUQsTV9NQUNfRkNfQ01EKQorCisjZGVmaW5lIFNfTUFDX1JYX0NIX1NFTCAgICAgICAgICAgICBfU0JfTUFLRTY0KDU3KQorI2RlZmluZSBNX01BQ19SWF9DSF9TRUwgICAgICAgICAgICAgX1NCX01BS0VNQVNLKDcsU19NQUNfUlhfQ0hfU0VMKQorI2RlZmluZSBWX01BQ19SWF9DSF9TRUwoeCkgICAgICAgICAgX1NCX01BS0VWQUxVRSh4LFNfTUFDX1JYX0NIX1NFTCkKKyNkZWZpbmUgR19NQUNfUlhfQ0hfU0VMKHgpICAgICAgICAgIF9TQl9HRVRWQUxVRSh4LFNfTUFDX1JYX0NIX1NFTCxNX01BQ19SWF9DSF9TRUwpCisKKworLyoKKyAqIE1BQyBFbmFibGUgUmVnaXN0ZXJzCisgKiBSZWdpc3RlcjogTUFDX0VOQUJMRV8wCisgKiBSZWdpc3RlcjogTUFDX0VOQUJMRV8xCisgKiBSZWdpc3RlcjogTUFDX0VOQUJMRV8yCisgKi8KKworI2RlZmluZSBNX01BQ19SWERNQV9FTjAJICAgICAgICAgICAgX1NCX01BS0VNQVNLMSgwKQorI2RlZmluZSBNX01BQ19SWERNQV9FTjEJICAgICAgICAgICAgX1NCX01BS0VNQVNLMSgxKQorI2RlZmluZSBNX01BQ19UWERNQV9FTjAJICAgICAgICAgICAgX1NCX01BS0VNQVNLMSg0KQorI2RlZmluZSBNX01BQ19UWERNQV9FTjEJICAgICAgICAgICAgX1NCX01BS0VNQVNLMSg1KQorCisjZGVmaW5lIE1fTUFDX1BPUlRfUkVTRVQgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDgpCisKKyNkZWZpbmUgTV9NQUNfUlhfRU5BQkxFICAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoMTApCisjZGVmaW5lIE1fTUFDX1RYX0VOQUJMRSAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDExKQorI2RlZmluZSBNX01BQ19CWVBfUlhfRU5BQkxFICAgICAgICAgX1NCX01BS0VNQVNLMSgxMikKKyNkZWZpbmUgTV9NQUNfQllQX1RYX0VOQUJMRSAgICAgICAgIF9TQl9NQUtFTUFTSzEoMTMpCisKKy8qCisgKiBNQUMgRE1BIENvbnRyb2wgUmVnaXN0ZXIKKyAqIFJlZ2lzdGVyOiBNQUNfVFhEX0NUTF8wCisgKiBSZWdpc3RlcjogTUFDX1RYRF9DVExfMQorICogUmVnaXN0ZXI6IE1BQ19UWERfQ1RMXzIKKyAqLworCisjZGVmaW5lIFNfTUFDX1RYRF9XRUlHSFQwCSAgICBfU0JfTUFLRTY0KDApCisjZGVmaW5lIE1fTUFDX1RYRF9XRUlHSFQwCSAgICBfU0JfTUFLRU1BU0soNCxTX01BQ19UWERfV0VJR0hUMCkKKyNkZWZpbmUgVl9NQUNfVFhEX1dFSUdIVDAoeCkgICAgICAgIF9TQl9NQUtFVkFMVUUoeCxTX01BQ19UWERfV0VJR0hUMCkKKyNkZWZpbmUgR19NQUNfVFhEX1dFSUdIVDAoeCkgICAgICAgIF9TQl9HRVRWQUxVRSh4LFNfTUFDX1RYRF9XRUlHSFQwLE1fTUFDX1RYRF9XRUlHSFQwKQorCisjZGVmaW5lIFNfTUFDX1RYRF9XRUlHSFQxCSAgICBfU0JfTUFLRTY0KDQpCisjZGVmaW5lIE1fTUFDX1RYRF9XRUlHSFQxCSAgICBfU0JfTUFLRU1BU0soNCxTX01BQ19UWERfV0VJR0hUMSkKKyNkZWZpbmUgVl9NQUNfVFhEX1dFSUdIVDEoeCkgICAgICAgIF9TQl9NQUtFVkFMVUUoeCxTX01BQ19UWERfV0VJR0hUMSkKKyNkZWZpbmUgR19NQUNfVFhEX1dFSUdIVDEoeCkgICAgICAgIF9TQl9HRVRWQUxVRSh4LFNfTUFDX1RYRF9XRUlHSFQxLE1fTUFDX1RYRF9XRUlHSFQxKQorCisvKgorICogTUFDIEZpZm8gVGhyZXNoaG9sZCByZWdpc3RlcnMgKFRhYmxlIDktMTQpCisgKiBSZWdpc3RlcjogTUFDX1RIUlNIX0NGR18wCisgKiBSZWdpc3RlcjogTUFDX1RIUlNIX0NGR18xCisgKiBSZWdpc3RlcjogTUFDX1RIUlNIX0NGR18yCisgKi8KKworI2RlZmluZSBTX01BQ19UWF9XUl9USFJTSCAgICAgICAgICAgX1NCX01BS0U2NCgwKQorI2lmIFNJQllURV9IRFJfRkVBVFVSRV9VUF9UTygxMjUwLCBQQVNTMSkKKy8qIFhYWDogQ2FuJ3QgZW5hYmxlLCBhcyBpdCBoYXMgdGhlIHNhbWUgbmFtZSBhcyBhIHBhc3MyKyBkZWZpbmUgYmVsb3cuICAqLworLyogI2RlZmluZSBNX01BQ19UWF9XUl9USFJTSCAgICAgICAgICAgX1NCX01BS0VNQVNLKDYsU19NQUNfVFhfV1JfVEhSU0gpICovCisjZW5kaWYgLyogdXAgdG8gMTI1MCBQQVNTMSAqLworI2lmIFNJQllURV9IRFJfRkVBVFVSRSgxMjUwLCBQQVNTMikgfHwgU0lCWVRFX0hEUl9GRUFUVVJFKDExMngsIFBBU1MxKQorI2RlZmluZSBNX01BQ19UWF9XUl9USFJTSCAgICAgICAgICAgX1NCX01BS0VNQVNLKDcsU19NQUNfVFhfV1JfVEhSU0gpCisjZW5kaWYgLyogMTI1MCBQQVNTMiB8fCAxMTJ4IFBBU1MxICovCisjZGVmaW5lIFZfTUFDX1RYX1dSX1RIUlNIKHgpICAgICAgICBfU0JfTUFLRVZBTFVFKHgsU19NQUNfVFhfV1JfVEhSU0gpCisjZGVmaW5lIEdfTUFDX1RYX1dSX1RIUlNIKHgpICAgICAgICBfU0JfR0VUVkFMVUUoeCxTX01BQ19UWF9XUl9USFJTSCxNX01BQ19UWF9XUl9USFJTSCkKKworI2RlZmluZSBTX01BQ19UWF9SRF9USFJTSCAgICAgICAgICAgX1NCX01BS0U2NCg4KQorI2lmIFNJQllURV9IRFJfRkVBVFVSRV9VUF9UTygxMjUwLCBQQVNTMSkKKy8qIFhYWDogQ2FuJ3QgZW5hYmxlLCBhcyBpdCBoYXMgdGhlIHNhbWUgbmFtZSBhcyBhIHBhc3MyKyBkZWZpbmUgYmVsb3cuICAqLworLyogI2RlZmluZSBNX01BQ19UWF9SRF9USFJTSCAgICAgICAgICAgX1NCX01BS0VNQVNLKDYsU19NQUNfVFhfUkRfVEhSU0gpICovCisjZW5kaWYgLyogdXAgdG8gMTI1MCBQQVNTMSAqLworI2lmIFNJQllURV9IRFJfRkVBVFVSRSgxMjUwLCBQQVNTMikgfHwgU0lCWVRFX0hEUl9GRUFUVVJFKDExMngsIFBBU1MxKQorI2RlZmluZSBNX01BQ19UWF9SRF9USFJTSCAgICAgICAgICAgX1NCX01BS0VNQVNLKDcsU19NQUNfVFhfUkRfVEhSU0gpCisjZW5kaWYgLyogMTI1MCBQQVNTMiB8fCAxMTJ4IFBBU1MxICovCisjZGVmaW5lIFZfTUFDX1RYX1JEX1RIUlNIKHgpICAgICAgICBfU0JfTUFLRVZBTFVFKHgsU19NQUNfVFhfUkRfVEhSU0gpCisjZGVmaW5lIEdfTUFDX1RYX1JEX1RIUlNIKHgpICAgICAgICBfU0JfR0VUVkFMVUUoeCxTX01BQ19UWF9SRF9USFJTSCxNX01BQ19UWF9SRF9USFJTSCkKKworI2RlZmluZSBTX01BQ19UWF9STF9USFJTSCAgICAgICAgICAgX1NCX01BS0U2NCgxNikKKyNkZWZpbmUgTV9NQUNfVFhfUkxfVEhSU0ggICAgICAgICAgIF9TQl9NQUtFTUFTSyg0LFNfTUFDX1RYX1JMX1RIUlNIKQorI2RlZmluZSBWX01BQ19UWF9STF9USFJTSCh4KSAgICAgICAgX1NCX01BS0VWQUxVRSh4LFNfTUFDX1RYX1JMX1RIUlNIKQorI2RlZmluZSBHX01BQ19UWF9STF9USFJTSCh4KSAgICAgICAgX1NCX0dFVFZBTFVFKHgsU19NQUNfVFhfUkxfVEhSU0gsTV9NQUNfVFhfUkxfVEhSU0gpCisKKyNkZWZpbmUgU19NQUNfUlhfUExfVEhSU0ggICAgICAgICAgIF9TQl9NQUtFNjQoMjQpCisjZGVmaW5lIE1fTUFDX1JYX1BMX1RIUlNIICAgICAgICAgICBfU0JfTUFLRU1BU0soNixTX01BQ19SWF9QTF9USFJTSCkKKyNkZWZpbmUgVl9NQUNfUlhfUExfVEhSU0goeCkgICAgICAgIF9TQl9NQUtFVkFMVUUoeCxTX01BQ19SWF9QTF9USFJTSCkKKyNkZWZpbmUgR19NQUNfUlhfUExfVEhSU0goeCkgICAgICAgIF9TQl9HRVRWQUxVRSh4LFNfTUFDX1JYX1BMX1RIUlNILE1fTUFDX1JYX1BMX1RIUlNIKQorCisjZGVmaW5lIFNfTUFDX1JYX1JEX1RIUlNIICAgICAgICAgICBfU0JfTUFLRTY0KDMyKQorI2RlZmluZSBNX01BQ19SWF9SRF9USFJTSCAgICAgICAgICAgX1NCX01BS0VNQVNLKDYsU19NQUNfUlhfUkRfVEhSU0gpCisjZGVmaW5lIFZfTUFDX1JYX1JEX1RIUlNIKHgpICAgICAgICBfU0JfTUFLRVZBTFVFKHgsU19NQUNfUlhfUkRfVEhSU0gpCisjZGVmaW5lIEdfTUFDX1JYX1JEX1RIUlNIKHgpICAgICAgICBfU0JfR0VUVkFMVUUoeCxTX01BQ19SWF9SRF9USFJTSCxNX01BQ19SWF9SRF9USFJTSCkKKworI2RlZmluZSBTX01BQ19SWF9STF9USFJTSCAgICAgICAgICAgX1NCX01BS0U2NCg0MCkKKyNkZWZpbmUgTV9NQUNfUlhfUkxfVEhSU0ggICAgICAgICAgIF9TQl9NQUtFTUFTSyg2LFNfTUFDX1JYX1JMX1RIUlNIKQorI2RlZmluZSBWX01BQ19SWF9STF9USFJTSCh4KSAgICAgICAgX1NCX01BS0VWQUxVRSh4LFNfTUFDX1JYX1JMX1RIUlNIKQorI2RlZmluZSBHX01BQ19SWF9STF9USFJTSCh4KSAgICAgICAgX1NCX0dFVFZBTFVFKHgsU19NQUNfUlhfUkxfVEhSU0gsTV9NQUNfUlhfUkxfVEhSU0gpCisKKyNpZiBTSUJZVEVfSERSX0ZFQVRVUkUoMTI1MCwgUEFTUzIpIHx8IFNJQllURV9IRFJfRkVBVFVSRSgxMTJ4LCBQQVNTMSkKKyNkZWZpbmUgU19NQUNfRU5DX0ZDX1RIUlNIICAgICAgICAgICBfU0JfTUFLRTY0KDU2KQorI2RlZmluZSBNX01BQ19FTkNfRkNfVEhSU0ggICAgICAgICAgIF9TQl9NQUtFTUFTSyg2LFNfTUFDX0VOQ19GQ19USFJTSCkKKyNkZWZpbmUgVl9NQUNfRU5DX0ZDX1RIUlNIKHgpICAgICAgICBfU0JfTUFLRVZBTFVFKHgsU19NQUNfRU5DX0ZDX1RIUlNIKQorI2RlZmluZSBHX01BQ19FTkNfRkNfVEhSU0goeCkgICAgICAgIF9TQl9HRVRWQUxVRSh4LFNfTUFDX0VOQ19GQ19USFJTSCxNX01BQ19FTkNfRkNfVEhSU0gpCisjZW5kaWYgLyogMTI1MCBQQVNTMiB8fCAxMTJ4IFBBU1MxICovCisKKy8qCisgKiBNQUMgRnJhbWUgQ29uZmlndXJhdGlvbiBSZWdpc3RlcnMgKFRhYmxlIDktMTUpCisgKiBSZWdpc3RlcjogTUFDX0ZSQU1FX0NGR18wCisgKiBSZWdpc3RlcjogTUFDX0ZSQU1FX0NGR18xCisgKiBSZWdpc3RlcjogTUFDX0ZSQU1FX0NGR18yCisgKi8KKworLyogWFhYQ0dEOiA/Pz8gVW51c2VkIGluIHBhc3MyPyAqLworI2RlZmluZSBTX01BQ19JRkdfUlggICAgICAgICAgICAgICAgX1NCX01BS0U2NCgwKQorI2RlZmluZSBNX01BQ19JRkdfUlggICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLKDYsU19NQUNfSUZHX1JYKQorI2RlZmluZSBWX01BQ19JRkdfUlgoeCkgICAgICAgICAgICAgX1NCX01BS0VWQUxVRSh4LFNfTUFDX0lGR19SWCkKKyNkZWZpbmUgR19NQUNfSUZHX1JYKHgpICAgICAgICAgICAgIF9TQl9HRVRWQUxVRSh4LFNfTUFDX0lGR19SWCxNX01BQ19JRkdfUlgpCisKKyNpZiBTSUJZVEVfSERSX0ZFQVRVUkUoMTI1MCwgUEFTUzMpIHx8IFNJQllURV9IRFJfRkVBVFVSRSgxMTJ4LCBQQVNTMSkKKyNkZWZpbmUgU19NQUNfUFJFX0xFTiAgICAgICAgICAgICAgIF9TQl9NQUtFNjQoMCkKKyNkZWZpbmUgTV9NQUNfUFJFX0xFTiAgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSyg2LFNfTUFDX1BSRV9MRU4pCisjZGVmaW5lIFZfTUFDX1BSRV9MRU4oeCkgICAgICAgICAgICBfU0JfTUFLRVZBTFVFKHgsU19NQUNfUFJFX0xFTikKKyNkZWZpbmUgR19NQUNfUFJFX0xFTih4KSAgICAgICAgICAgIF9TQl9HRVRWQUxVRSh4LFNfTUFDX1BSRV9MRU4sTV9NQUNfUFJFX0xFTikKKyNlbmRpZiAvKiAxMjUwIFBBU1MzIHx8IDExMnggUEFTUzEgKi8KKworI2RlZmluZSBTX01BQ19JRkdfVFggICAgICAgICAgICAgICAgX1NCX01BS0U2NCg2KQorI2RlZmluZSBNX01BQ19JRkdfVFggICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLKDYsU19NQUNfSUZHX1RYKQorI2RlZmluZSBWX01BQ19JRkdfVFgoeCkgICAgICAgICAgICAgX1NCX01BS0VWQUxVRSh4LFNfTUFDX0lGR19UWCkKKyNkZWZpbmUgR19NQUNfSUZHX1RYKHgpICAgICAgICAgICAgIF9TQl9HRVRWQUxVRSh4LFNfTUFDX0lGR19UWCxNX01BQ19JRkdfVFgpCisKKyNkZWZpbmUgU19NQUNfSUZHX1RIUlNIICAgICAgICAgICAgIF9TQl9NQUtFNjQoMTIpCisjZGVmaW5lIE1fTUFDX0lGR19USFJTSCAgICAgICAgICAgICBfU0JfTUFLRU1BU0soNixTX01BQ19JRkdfVEhSU0gpCisjZGVmaW5lIFZfTUFDX0lGR19USFJTSCh4KSAgICAgICAgICBfU0JfTUFLRVZBTFVFKHgsU19NQUNfSUZHX1RIUlNIKQorI2RlZmluZSBHX01BQ19JRkdfVEhSU0goeCkgICAgICAgICAgX1NCX0dFVFZBTFVFKHgsU19NQUNfSUZHX1RIUlNILE1fTUFDX0lGR19USFJTSCkKKworI2RlZmluZSBTX01BQ19CQUNLT0ZGX1NFTCAgICAgICAgICAgX1NCX01BS0U2NCgxOCkKKyNkZWZpbmUgTV9NQUNfQkFDS09GRl9TRUwgICAgICAgICAgIF9TQl9NQUtFTUFTSyg0LFNfTUFDX0JBQ0tPRkZfU0VMKQorI2RlZmluZSBWX01BQ19CQUNLT0ZGX1NFTCh4KSAgICAgICAgX1NCX01BS0VWQUxVRSh4LFNfTUFDX0JBQ0tPRkZfU0VMKQorI2RlZmluZSBHX01BQ19CQUNLT0ZGX1NFTCh4KSAgICAgICAgX1NCX0dFVFZBTFVFKHgsU19NQUNfQkFDS09GRl9TRUwsTV9NQUNfQkFDS09GRl9TRUwpCisKKyNkZWZpbmUgU19NQUNfTEZTUl9TRUVEICAgICAgICAgICAgIF9TQl9NQUtFNjQoMjIpCisjZGVmaW5lIE1fTUFDX0xGU1JfU0VFRCAgICAgICAgICAgICBfU0JfTUFLRU1BU0soOCxTX01BQ19MRlNSX1NFRUQpCisjZGVmaW5lIFZfTUFDX0xGU1JfU0VFRCh4KSAgICAgICAgICBfU0JfTUFLRVZBTFVFKHgsU19NQUNfTEZTUl9TRUVEKQorI2RlZmluZSBHX01BQ19MRlNSX1NFRUQoeCkgICAgICAgICAgX1NCX0dFVFZBTFVFKHgsU19NQUNfTEZTUl9TRUVELE1fTUFDX0xGU1JfU0VFRCkKKworI2RlZmluZSBTX01BQ19TTE9UX1NJWkUgICAgICAgICAgICAgX1NCX01BS0U2NCgzMCkKKyNkZWZpbmUgTV9NQUNfU0xPVF9TSVpFICAgICAgICAgICAgIF9TQl9NQUtFTUFTSygxMCxTX01BQ19TTE9UX1NJWkUpCisjZGVmaW5lIFZfTUFDX1NMT1RfU0laRSh4KSAgICAgICAgICBfU0JfTUFLRVZBTFVFKHgsU19NQUNfU0xPVF9TSVpFKQorI2RlZmluZSBHX01BQ19TTE9UX1NJWkUoeCkgICAgICAgICAgX1NCX0dFVFZBTFVFKHgsU19NQUNfU0xPVF9TSVpFLE1fTUFDX1NMT1RfU0laRSkKKworI2RlZmluZSBTX01BQ19NSU5fRlJBTUVTWiAgICAgICAgICAgX1NCX01BS0U2NCg0MCkKKyNkZWZpbmUgTV9NQUNfTUlOX0ZSQU1FU1ogICAgICAgICAgIF9TQl9NQUtFTUFTSyg4LFNfTUFDX01JTl9GUkFNRVNaKQorI2RlZmluZSBWX01BQ19NSU5fRlJBTUVTWih4KSAgICAgICAgX1NCX01BS0VWQUxVRSh4LFNfTUFDX01JTl9GUkFNRVNaKQorI2RlZmluZSBHX01BQ19NSU5fRlJBTUVTWih4KSAgICAgICAgX1NCX0dFVFZBTFVFKHgsU19NQUNfTUlOX0ZSQU1FU1osTV9NQUNfTUlOX0ZSQU1FU1opCisKKyNkZWZpbmUgU19NQUNfTUFYX0ZSQU1FU1ogICAgICAgICAgIF9TQl9NQUtFNjQoNDgpCisjZGVmaW5lIE1fTUFDX01BWF9GUkFNRVNaICAgICAgICAgICBfU0JfTUFLRU1BU0soMTYsU19NQUNfTUFYX0ZSQU1FU1opCisjZGVmaW5lIFZfTUFDX01BWF9GUkFNRVNaKHgpICAgICAgICBfU0JfTUFLRVZBTFVFKHgsU19NQUNfTUFYX0ZSQU1FU1opCisjZGVmaW5lIEdfTUFDX01BWF9GUkFNRVNaKHgpICAgICAgICBfU0JfR0VUVkFMVUUoeCxTX01BQ19NQVhfRlJBTUVTWixNX01BQ19NQVhfRlJBTUVTWikKKworLyoKKyAqIFRoZXNlIGNvbnN0YW50cyBhcmUgdXNlZCB0byBjb25maWd1cmUgdGhlIGZpZWxkcyB3aXRoaW4gdGhlIEZyYW1lCisgKiBDb25maWd1cmF0aW9uIFJlZ2lzdGVyLiAgCisgKi8KKworI2RlZmluZSBLX01BQ19JRkdfUlhfMTAgICAgICAgICAgICAgX1NCX01BS0U2NCgwKQkvKiBTZWUgdGFibGUgMTc2LCBub3QgdXNlZCAqLworI2RlZmluZSBLX01BQ19JRkdfUlhfMTAwICAgICAgICAgICAgX1NCX01BS0U2NCgwKQorI2RlZmluZSBLX01BQ19JRkdfUlhfMTAwMCAgICAgICAgICAgX1NCX01BS0U2NCgwKQorCisjZGVmaW5lIEtfTUFDX0lGR19UWF8xMCAgICAgICAgICAgICBfU0JfTUFLRTY0KDIwKQorI2RlZmluZSBLX01BQ19JRkdfVFhfMTAwICAgICAgICAgICAgX1NCX01BS0U2NCgyMCkKKyNkZWZpbmUgS19NQUNfSUZHX1RYXzEwMDAgICAgICAgICAgIF9TQl9NQUtFNjQoOCkKKworI2RlZmluZSBLX01BQ19JRkdfVEhSU0hfMTAgICAgICAgICAgX1NCX01BS0U2NCg0KQorI2RlZmluZSBLX01BQ19JRkdfVEhSU0hfMTAwICAgICAgICAgX1NCX01BS0U2NCg0KQorI2RlZmluZSBLX01BQ19JRkdfVEhSU0hfMTAwMCAgICAgICAgX1NCX01BS0U2NCgwKQorCisjZGVmaW5lIEtfTUFDX1NMT1RfU0laRV8xMCAgICAgICAgICBfU0JfTUFLRTY0KDApCisjZGVmaW5lIEtfTUFDX1NMT1RfU0laRV8xMDAgICAgICAgICBfU0JfTUFLRTY0KDApCisjZGVmaW5lIEtfTUFDX1NMT1RfU0laRV8xMDAwICAgICAgICBfU0JfTUFLRTY0KDApCisKKyNkZWZpbmUgVl9NQUNfSUZHX1JYXzEwICAgICAgICBWX01BQ19JRkdfUlgoS19NQUNfSUZHX1JYXzEwKQorI2RlZmluZSBWX01BQ19JRkdfUlhfMTAwICAgICAgIFZfTUFDX0lGR19SWChLX01BQ19JRkdfUlhfMTAwKQorI2RlZmluZSBWX01BQ19JRkdfUlhfMTAwMCAgICAgIFZfTUFDX0lGR19SWChLX01BQ19JRkdfUlhfMTAwMCkKKworI2RlZmluZSBWX01BQ19JRkdfVFhfMTAgICAgICAgIFZfTUFDX0lGR19UWChLX01BQ19JRkdfVFhfMTApCisjZGVmaW5lIFZfTUFDX0lGR19UWF8xMDAgICAgICAgVl9NQUNfSUZHX1RYKEtfTUFDX0lGR19UWF8xMDApCisjZGVmaW5lIFZfTUFDX0lGR19UWF8xMDAwICAgICAgVl9NQUNfSUZHX1RYKEtfTUFDX0lGR19UWF8xMDAwKQorCisjZGVmaW5lIFZfTUFDX0lGR19USFJTSF8xMCAgICAgVl9NQUNfSUZHX1RIUlNIKEtfTUFDX0lGR19USFJTSF8xMCkKKyNkZWZpbmUgVl9NQUNfSUZHX1RIUlNIXzEwMCAgICBWX01BQ19JRkdfVEhSU0goS19NQUNfSUZHX1RIUlNIXzEwMCkKKyNkZWZpbmUgVl9NQUNfSUZHX1RIUlNIXzEwMDAgICBWX01BQ19JRkdfVEhSU0goS19NQUNfSUZHX1RIUlNIXzEwMDApCisKKyNkZWZpbmUgVl9NQUNfU0xPVF9TSVpFXzEwICAgICBWX01BQ19TTE9UX1NJWkUoS19NQUNfU0xPVF9TSVpFXzEwKQorI2RlZmluZSBWX01BQ19TTE9UX1NJWkVfMTAwICAgIFZfTUFDX1NMT1RfU0laRShLX01BQ19TTE9UX1NJWkVfMTAwKQorI2RlZmluZSBWX01BQ19TTE9UX1NJWkVfMTAwMCAgIFZfTUFDX1NMT1RfU0laRShLX01BQ19TTE9UX1NJWkVfMTAwMCkKKworI2RlZmluZSBLX01BQ19NSU5fRlJBTUVTWl9GSUZPICAgICAgX1NCX01BS0U2NCg5KQorI2RlZmluZSBLX01BQ19NSU5fRlJBTUVTWl9ERUZBVUxUICAgX1NCX01BS0U2NCg2NCkKKyNkZWZpbmUgS19NQUNfTUFYX0ZSQU1FU1pfREVGQVVMVCAgIF9TQl9NQUtFNjQoMTUxOCkKKyNkZWZpbmUgS19NQUNfTUFYX0ZSQU1FU1pfSlVNQk8gICAgIF9TQl9NQUtFNjQoOTIxNikKKworI2RlZmluZSBWX01BQ19NSU5fRlJBTUVTWl9GSUZPICAgICAgVl9NQUNfTUlOX0ZSQU1FU1ooS19NQUNfTUlOX0ZSQU1FU1pfRklGTykKKyNkZWZpbmUgVl9NQUNfTUlOX0ZSQU1FU1pfREVGQVVMVCAgIFZfTUFDX01JTl9GUkFNRVNaKEtfTUFDX01JTl9GUkFNRVNaX0RFRkFVTFQpCisjZGVmaW5lIFZfTUFDX01BWF9GUkFNRVNaX0RFRkFVTFQgICBWX01BQ19NQVhfRlJBTUVTWihLX01BQ19NQVhfRlJBTUVTWl9ERUZBVUxUKQorI2RlZmluZSBWX01BQ19NQVhfRlJBTUVTWl9KVU1CTyAgICAgVl9NQUNfTUFYX0ZSQU1FU1ooS19NQUNfTUFYX0ZSQU1FU1pfSlVNQk8pCisKKy8qCisgKiBNQUMgVkxBTiBUYWcgUmVnaXN0ZXJzIChUYWJsZSA5LTE2KQorICogUmVnaXN0ZXI6IE1BQ19WTEFOVEFHXzAKKyAqIFJlZ2lzdGVyOiBNQUNfVkxBTlRBR18xCisgKiBSZWdpc3RlcjogTUFDX1ZMQU5UQUdfMgorICovCisKKyNkZWZpbmUgU19NQUNfVkxBTl9UQUcgICAgICAgICAgIF9TQl9NQUtFNjQoMCkKKyNkZWZpbmUgTV9NQUNfVkxBTl9UQUcgICAgICAgICAgIF9TQl9NQUtFTUFTSygzMixTX01BQ19WTEFOX1RBRykKKyNkZWZpbmUgVl9NQUNfVkxBTl9UQUcoeCkgICAgICAgIF9TQl9NQUtFVkFMVUUoeCxTX01BQ19WTEFOX1RBRykKKyNkZWZpbmUgR19NQUNfVkxBTl9UQUcoeCkgICAgICAgIF9TQl9HRVRWQUxVRSh4LFNfTUFDX1ZMQU5fVEFHLE1fTUFDX1ZMQU5fVEFHKQorCisjaWYgU0lCWVRFX0hEUl9GRUFUVVJFKDEyNTAsIFBBU1MzKSB8fCBTSUJZVEVfSERSX0ZFQVRVUkUoMTEyeCwgUEFTUzEpCisjZGVmaW5lIFNfTUFDX1RYX1BLVF9PRkZTRVQgICAgICBfU0JfTUFLRTY0KDMyKQorI2RlZmluZSBNX01BQ19UWF9QS1RfT0ZGU0VUICAgICAgX1NCX01BS0VNQVNLKDgsU19NQUNfVFhfUEtUX09GRlNFVCkKKyNkZWZpbmUgVl9NQUNfVFhfUEtUX09GRlNFVCh4KSAgIF9TQl9NQUtFVkFMVUUoeCxTX01BQ19UWF9QS1RfT0ZGU0VUKQorI2RlZmluZSBHX01BQ19UWF9QS1RfT0ZGU0VUKHgpICAgX1NCX0dFVFZBTFVFKHgsU19NQUNfVFhfUEtUX09GRlNFVCxNX01BQ19UWF9QS1RfT0ZGU0VUKQorCisjZGVmaW5lIFNfTUFDX1RYX0NSQ19PRkZTRVQgICAgICBfU0JfTUFLRTY0KDQwKQorI2RlZmluZSBNX01BQ19UWF9DUkNfT0ZGU0VUICAgICAgX1NCX01BS0VNQVNLKDgsU19NQUNfVFhfQ1JDX09GRlNFVCkKKyNkZWZpbmUgVl9NQUNfVFhfQ1JDX09GRlNFVCh4KSAgIF9TQl9NQUtFVkFMVUUoeCxTX01BQ19UWF9DUkNfT0ZGU0VUKQorI2RlZmluZSBHX01BQ19UWF9DUkNfT0ZGU0VUKHgpICAgX1NCX0dFVFZBTFVFKHgsU19NQUNfVFhfQ1JDX09GRlNFVCxNX01BQ19UWF9DUkNfT0ZGU0VUKQorCisjZGVmaW5lIE1fTUFDX0NIX0JBU0VfRkNfRU4gICAgICBfU0JfTUFLRU1BU0sxKDQ4KQorI2VuZGlmIC8qIDEyNTAgUEFTUzMgfHwgMTEyeCBQQVNTMSAqLworCisvKgorICogTUFDIFN0YXR1cyBSZWdpc3RlcnMgKFRhYmxlIDktMTcpCisgKiBBbHNvIHVzZWQgZm9yIHRoZSBNQUMgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKFRhYmxlIDktMTgpCisgKiBSZWdpc3RlcjogTUFDX1NUQVRVU18wCisgKiBSZWdpc3RlcjogTUFDX1NUQVRVU18xCisgKiBSZWdpc3RlcjogTUFDX1NUQVRVU18yCisgKiBSZWdpc3RlcjogTUFDX0lOVF9NQVNLXzAKKyAqIFJlZ2lzdGVyOiBNQUNfSU5UX01BU0tfMQorICogUmVnaXN0ZXI6IE1BQ19JTlRfTUFTS18yCisgKi8KKworLyogCisgKiBVc2UgdGhlc2UgY29uc3RhbnRzIHRvIHNoaWZ0IHRoZSBhcHByb3ByaWF0ZSBjaGFubmVsCisgKiBpbnRvIHRoZSBDSDAgcG9zaXRpb24gc28gdGhlIHNhbWUgdGVzdHMgY2FuIGJlIHVzZWQKKyAqIG9uIGVhY2ggY2hhbm5lbC4KKyAqLworCisjZGVmaW5lIFNfTUFDX1JYX0NIMCAgICAgICAgICAgICAgICBfU0JfTUFLRTY0KDApCisjZGVmaW5lIFNfTUFDX1JYX0NIMSAgICAgICAgICAgICAgICBfU0JfTUFLRTY0KDgpCisjZGVmaW5lIFNfTUFDX1RYX0NIMCAgICAgICAgICAgICAgICBfU0JfTUFLRTY0KDE2KQorI2RlZmluZSBTX01BQ19UWF9DSDEgICAgICAgICAgICAgICAgX1NCX01BS0U2NCgyNCkKKworI2RlZmluZSBTX01BQ19UWENIQU5ORUxTCSAgICBfU0JfTUFLRTY0KDE2KQkvKiB0aGlzIGlzIDFzdCBUWCBjaGFuICovCisjZGVmaW5lIFNfTUFDX0NIQU5XSURUSCAgICAgICAgICAgICBfU0JfTUFLRTY0KDgpCS8qIGJpdHMgYmV0d2VlbiBjaGFubmVscyAqLworCisvKgorICogIFRoZXNlIGFyZSB0aGUgc2FtZSBhcyBSWCBjaGFubmVsIDAuICBUaGUgaWRlYSBoZXJlCisgKiAgaXMgdGhhdCB5b3UnbGwgdXNlIG9uZSBvZiB0aGUgIlNfIiB0aGluZ3MgYWJvdmUKKyAqICBhbmQgcGFzcyBqdXN0IHRoZSBzaXggYml0cyB0byBhIERNQS1jaGFubmVsLXNwZWNpZmljIElTUgorICovCisjZGVmaW5lIE1fTUFDX0lOVF9DSEFOTkVMICAgICAgICAgICBfU0JfTUFLRU1BU0soOCwwKQorI2RlZmluZSBNX01BQ19JTlRfRU9QX0NPVU5UICAgICAgICAgX1NCX01BS0VNQVNLMSgwKQorI2RlZmluZSBNX01BQ19JTlRfRU9QX1RJTUVSICAgICAgICAgX1NCX01BS0VNQVNLMSgxKQorI2RlZmluZSBNX01BQ19JTlRfRU9QX1NFRU4gICAgICAgICAgX1NCX01BS0VNQVNLMSgyKQorI2RlZmluZSBNX01BQ19JTlRfSFdNICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLMSgzKQorI2RlZmluZSBNX01BQ19JTlRfTFdNICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLMSg0KQorI2RlZmluZSBNX01BQ19JTlRfRFNDUiAgICAgICAgICAgICAgX1NCX01BS0VNQVNLMSg1KQorI2RlZmluZSBNX01BQ19JTlRfRVJSICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLMSg2KQorI2RlZmluZSBNX01BQ19JTlRfRFpFUk8gICAgICAgICAgICAgX1NCX01BS0VNQVNLMSg3KQkvKiBvbmx5IGZvciBUWCBjaGFubmVscyAqLworI2RlZmluZSBNX01BQ19JTlRfRFJPUCAgICAgICAgICAgICAgX1NCX01BS0VNQVNLMSg3KQkvKiBvbmx5IGZvciBSWCBjaGFubmVscyAqLworCisvKgorICogSW4gdGhlIGZvbGxvd2luZyBkZWZpbml0aW9ucyB3ZSB1c2UgY2ggKDAvMSkgYW5kIHR4cnggKFRYPTEsIFJYPTAsIHNlZQorICogYWxzbyBETUFfVFgvRE1BX1JYIGluIHNiX3JlZ3MuaCkuCisgKi8KKyNkZWZpbmUgU19NQUNfU1RBVFVTX0NIX09GRlNFVChjaCx0eHJ4KSBfU0JfTUFLRTY0KCgoY2gpICsgMiAqICh0eHJ4KSkgKiBTX01BQ19DSEFOV0lEVEgpCisKKyNkZWZpbmUgTV9NQUNfU1RBVFVTX0NIQU5ORUwoY2gsdHhyeCkgICBfU0JfTUFLRVZBTFVFKF9TQl9NQUtFTUFTSyg4LDApLFNfTUFDX1NUQVRVU19DSF9PRkZTRVQoY2gsdHhyeCkpCisjZGVmaW5lIE1fTUFDX1NUQVRVU19FT1BfQ09VTlQoY2gsdHhyeCkgX1NCX01BS0VWQUxVRShNX01BQ19JTlRfRU9QX0NPVU5ULFNfTUFDX1NUQVRVU19DSF9PRkZTRVQoY2gsdHhyeCkpCisjZGVmaW5lIE1fTUFDX1NUQVRVU19FT1BfVElNRVIoY2gsdHhyeCkgX1NCX01BS0VWQUxVRShNX01BQ19JTlRfRU9QX1RJTUVSLFNfTUFDX1NUQVRVU19DSF9PRkZTRVQoY2gsdHhyeCkpCisjZGVmaW5lIE1fTUFDX1NUQVRVU19FT1BfU0VFTihjaCx0eHJ4KSAgX1NCX01BS0VWQUxVRShNX01BQ19JTlRfRU9QX1NFRU4sU19NQUNfU1RBVFVTX0NIX09GRlNFVChjaCx0eHJ4KSkKKyNkZWZpbmUgTV9NQUNfU1RBVFVTX0hXTShjaCx0eHJ4KSAgICAgICBfU0JfTUFLRVZBTFVFKE1fTUFDX0lOVF9IV00sU19NQUNfU1RBVFVTX0NIX09GRlNFVChjaCx0eHJ4KSkKKyNkZWZpbmUgTV9NQUNfU1RBVFVTX0xXTShjaCx0eHJ4KSAgICAgICBfU0JfTUFLRVZBTFVFKE1fTUFDX0lOVF9MV00sU19NQUNfU1RBVFVTX0NIX09GRlNFVChjaCx0eHJ4KSkKKyNkZWZpbmUgTV9NQUNfU1RBVFVTX0RTQ1IoY2gsdHhyeCkgICAgICBfU0JfTUFLRVZBTFVFKE1fTUFDX0lOVF9EU0NSLFNfTUFDX1NUQVRVU19DSF9PRkZTRVQoY2gsdHhyeCkpCisjZGVmaW5lIE1fTUFDX1NUQVRVU19FUlIoY2gsdHhyeCkgICAgICAgX1NCX01BS0VWQUxVRShNX01BQ19JTlRfRVJSLFNfTUFDX1NUQVRVU19DSF9PRkZTRVQoY2gsdHhyeCkpCisjZGVmaW5lIE1fTUFDX1NUQVRVU19EWkVSTyhjaCx0eHJ4KSAgICAgX1NCX01BS0VWQUxVRShNX01BQ19JTlRfRFpFUk8sU19NQUNfU1RBVFVTX0NIX09GRlNFVChjaCx0eHJ4KSkKKyNkZWZpbmUgTV9NQUNfU1RBVFVTX0RST1AoY2gsdHhyeCkgICAgICBfU0JfTUFLRVZBTFVFKE1fTUFDX0lOVF9EUk9QLFNfTUFDX1NUQVRVU19DSF9PRkZTRVQoY2gsdHhyeCkpCisjZGVmaW5lIE1fTUFDX1NUQVRVU19PVEhFUl9FUlIgICAgICAgICAgX1NCX01BS0VWQUxVRShfU0JfTUFLRU1BU0soNywwKSw0MCkKKworCisjZGVmaW5lIE1fTUFDX1JYX1VORFJGTCAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDQwKQorI2RlZmluZSBNX01BQ19SWF9PVlJGTCAgICAgICAgICAgICAgX1NCX01BS0VNQVNLMSg0MSkKKyNkZWZpbmUgTV9NQUNfVFhfVU5EUkZMICAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoNDIpCisjZGVmaW5lIE1fTUFDX1RYX09WUkZMICAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDQzKQorI2RlZmluZSBNX01BQ19MVENPTF9FUlIgICAgICAgICAgICAgX1NCX01BS0VNQVNLMSg0NCkKKyNkZWZpbmUgTV9NQUNfRVhDT0xfRVJSICAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoNDUpCisjZGVmaW5lIE1fTUFDX0NOVFJfT1ZSRkxfRVJSICAgICAgICBfU0JfTUFLRU1BU0sxKDQ2KQorI2lmIFNJQllURV9IRFJfRkVBVFVSRSgxMjUwLCBQQVNTMikgfHwgU0lCWVRFX0hEUl9GRUFUVVJFKDExMngsIFBBU1MxKQorI2RlZmluZSBNX01BQ19TUExJVF9FTgkJICAgIF9TQl9NQUtFTUFTSzEoNDcpIAkvKiBpbnRlcnJ1cHQgbWFzayBvbmx5ICovCisjZW5kaWYgLyogMTI1MCBQQVNTMiB8fCAxMTJ4IFBBU1MxICovCisKKyNkZWZpbmUgU19NQUNfQ09VTlRFUl9BRERSICAgICAgICAgIF9TQl9NQUtFNjQoNDcpCisjZGVmaW5lIE1fTUFDX0NPVU5URVJfQUREUiAgICAgICAgICBfU0JfTUFLRU1BU0soNSxTX01BQ19DT1VOVEVSX0FERFIpCisjZGVmaW5lIFZfTUFDX0NPVU5URVJfQUREUih4KSAgICAgICBfU0JfTUFLRVZBTFVFKHgsU19NQUNfQ09VTlRFUl9BRERSKQorI2RlZmluZSBHX01BQ19DT1VOVEVSX0FERFIoeCkgICAgICAgX1NCX0dFVFZBTFVFKHgsU19NQUNfQ09VTlRFUl9BRERSLE1fTUFDX0NPVU5URVJfQUREUikKKworI2lmIFNJQllURV9IRFJfRkVBVFVSRSgxMjUwLCBQQVNTMykgfHwgU0lCWVRFX0hEUl9GRUFUVVJFKDExMngsIFBBU1MxKQorI2RlZmluZSBNX01BQ19UWF9QQVVTRV9PTgkgICAgX1NCX01BS0VNQVNLMSg1MikKKyNlbmRpZiAvKiAxMjUwIFBBU1MzIHx8IDExMnggUEFTUzEgKi8KKworLyoKKyAqIE1BQyBGaWZvIFBvaW50ZXIgUmVnaXN0ZXJzIChUYWJsZSA5LTE5KSAgICBbRGVidWcgcmVnaXN0ZXJdCisgKiBSZWdpc3RlcjogTUFDX0ZJRk9fUFRSU18wCisgKiBSZWdpc3RlcjogTUFDX0ZJRk9fUFRSU18xCisgKiBSZWdpc3RlcjogTUFDX0ZJRk9fUFRSU18yCisgKi8KKworI2RlZmluZSBTX01BQ19UWF9XUlBUUiAgICAgICAgICAgICAgX1NCX01BS0U2NCgwKQorI2RlZmluZSBNX01BQ19UWF9XUlBUUiAgICAgICAgICAgICAgX1NCX01BS0VNQVNLKDYsU19NQUNfVFhfV1JQVFIpCisjZGVmaW5lIFZfTUFDX1RYX1dSUFRSKHgpICAgICAgICAgICBfU0JfTUFLRVZBTFVFKHgsU19NQUNfVFhfV1JQVFIpCisjZGVmaW5lIEdfTUFDX1RYX1dSUFRSKHgpICAgICAgICAgICBfU0JfR0VUVkFMVUUoeCxTX01BQ19UWF9XUlBUUixNX01BQ19UWF9XUlBUUikKKworI2RlZmluZSBTX01BQ19UWF9SRFBUUiAgICAgICAgICAgICAgX1NCX01BS0U2NCg4KQorI2RlZmluZSBNX01BQ19UWF9SRFBUUiAgICAgICAgICAgICAgX1NCX01BS0VNQVNLKDYsU19NQUNfVFhfUkRQVFIpCisjZGVmaW5lIFZfTUFDX1RYX1JEUFRSKHgpICAgICAgICAgICBfU0JfTUFLRVZBTFVFKHgsU19NQUNfVFhfUkRQVFIpCisjZGVmaW5lIEdfTUFDX1RYX1JEUFRSKHgpICAgICAgICAgICBfU0JfR0VUVkFMVUUoeCxTX01BQ19UWF9SRFBUUixNX01BQ19UWF9SRFBUUikKKworI2RlZmluZSBTX01BQ19SWF9XUlBUUiAgICAgICAgICAgICAgX1NCX01BS0U2NCgxNikKKyNkZWZpbmUgTV9NQUNfUlhfV1JQVFIgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSyg2LFNfTUFDX1JYX1dSUFRSKQorI2RlZmluZSBWX01BQ19SWF9XUlBUUih4KSAgICAgICAgICAgX1NCX01BS0VWQUxVRSh4LFNfTUFDX1JYX1dSUFRSKQorI2RlZmluZSBHX01BQ19SWF9XUlBUUih4KSAgICAgICAgICAgX1NCX0dFVFZBTFVFKHgsU19NQUNfUlhfV1JQVFIsTV9NQUNfVFhfV1JQVFIpCisKKyNkZWZpbmUgU19NQUNfUlhfUkRQVFIgICAgICAgICAgICAgIF9TQl9NQUtFNjQoMjQpCisjZGVmaW5lIE1fTUFDX1JYX1JEUFRSICAgICAgICAgICAgICBfU0JfTUFLRU1BU0soNixTX01BQ19SWF9SRFBUUikKKyNkZWZpbmUgVl9NQUNfUlhfUkRQVFIoeCkgICAgICAgICAgIF9TQl9NQUtFVkFMVUUoeCxTX01BQ19SWF9SRFBUUikKKyNkZWZpbmUgR19NQUNfUlhfUkRQVFIoeCkgICAgICAgICAgIF9TQl9HRVRWQUxVRSh4LFNfTUFDX1JYX1JEUFRSLE1fTUFDX1RYX1JEUFRSKQorCisvKgorICogTUFDIEZpZm8gRW5kIE9mIFBhY2tldCBDb3VudCBSZWdpc3RlcnMgKFRhYmxlIDktMjApICBbRGVidWcgcmVnaXN0ZXJdCisgKiBSZWdpc3RlcjogTUFDX0VPUENOVF8wCisgKiBSZWdpc3RlcjogTUFDX0VPUENOVF8xCisgKiBSZWdpc3RlcjogTUFDX0VPUENOVF8yCisgKi8KKworI2RlZmluZSBTX01BQ19UWF9FT1BfQ09VTlRFUiAgICAgICAgX1NCX01BS0U2NCgwKQorI2RlZmluZSBNX01BQ19UWF9FT1BfQ09VTlRFUiAgICAgICAgX1NCX01BS0VNQVNLKDYsU19NQUNfVFhfRU9QX0NPVU5URVIpCisjZGVmaW5lIFZfTUFDX1RYX0VPUF9DT1VOVEVSKHgpICAgICBfU0JfTUFLRVZBTFVFKHgsU19NQUNfVFhfRU9QX0NPVU5URVIpCisjZGVmaW5lIEdfTUFDX1RYX0VPUF9DT1VOVEVSKHgpICAgICBfU0JfR0VUVkFMVUUoeCxTX01BQ19UWF9FT1BfQ09VTlRFUixNX01BQ19UWF9FT1BfQ09VTlRFUikKKworI2RlZmluZSBTX01BQ19SWF9FT1BfQ09VTlRFUiAgICAgICAgX1NCX01BS0U2NCg4KQorI2RlZmluZSBNX01BQ19SWF9FT1BfQ09VTlRFUiAgICAgICAgX1NCX01BS0VNQVNLKDYsU19NQUNfUlhfRU9QX0NPVU5URVIpCisjZGVmaW5lIFZfTUFDX1JYX0VPUF9DT1VOVEVSKHgpICAgICBfU0JfTUFLRVZBTFVFKHgsU19NQUNfUlhfRU9QX0NPVU5URVIpCisjZGVmaW5lIEdfTUFDX1JYX0VPUF9DT1VOVEVSKHgpICAgICBfU0JfR0VUVkFMVUUoeCxTX01BQ19SWF9FT1BfQ09VTlRFUixNX01BQ19SWF9FT1BfQ09VTlRFUikKKworLyoKKyAqIE1BQyBSZWNpZXZlIEFkZHJlc3MgRmlsdGVyIEV4YWN0IE1hdGNoIFJlZ2lzdGVycyAoVGFibGUgOS0yMSkKKyAqIFJlZ2lzdGVyczogTUFDX0FERFIwXzAgdGhyb3VnaCBNQUNfQUREUjdfMAorICogUmVnaXN0ZXJzOiBNQUNfQUREUjBfMSB0aHJvdWdoIE1BQ19BRERSN18xCisgKiBSZWdpc3RlcnM6IE1BQ19BRERSMF8yIHRocm91Z2ggTUFDX0FERFI3XzIKKyAqLworCisvKiBObyBiaXRmaWVsZHMgKi8KKworLyoKKyAqIE1BQyBSZWNlaXZlIEFkZHJlc3MgRmlsdGVyIE1hc2sgUmVnaXN0ZXJzCisgKiBSZWdpc3RlcnM6IE1BQ19BRERSTUFTSzBfMCBhbmQgTUFDX0FERFJNQVNLMF8xCisgKiBSZWdpc3RlcnM6IE1BQ19BRERSTUFTSzFfMCBhbmQgTUFDX0FERFJNQVNLMV8xCisgKiBSZWdpc3RlcnM6IE1BQ19BRERSTUFTSzJfMCBhbmQgTUFDX0FERFJNQVNLMl8xCisgKi8KKworLyogTm8gYml0ZmllbGRzICovCisKKy8qCisgKiBNQUMgUmVjaWV2ZSBBZGRyZXNzIEZpbHRlciBIYXNoIE1hdGNoIFJlZ2lzdGVycyAoVGFibGUgOS0yMikKKyAqIFJlZ2lzdGVyczogTUFDX0hBU0gwXzAgdGhyb3VnaCBNQUNfSEFTSDdfMAorICogUmVnaXN0ZXJzOiBNQUNfSEFTSDBfMSB0aHJvdWdoIE1BQ19IQVNIN18xCisgKiBSZWdpc3RlcnM6IE1BQ19IQVNIMF8yIHRocm91Z2ggTUFDX0hBU0g3XzIKKyAqLworCisvKiBObyBiaXRmaWVsZHMgKi8KKworLyoKKyAqIE1BQyBUcmFuc21pdCBTb3VyY2UgQWRkcmVzcyBSZWdpc3RlcnMgKFRhYmxlIDktMjMpCisgKiBSZWdpc3RlcjogTUFDX0VUSEVSTkVUX0FERFJfMAorICogUmVnaXN0ZXI6IE1BQ19FVEhFUk5FVF9BRERSXzEKKyAqIFJlZ2lzdGVyOiBNQUNfRVRIRVJORVRfQUREUl8yCisgKi8KKworLyogTm8gYml0ZmllbGRzICovCisKKy8qCisgKiBNQUMgUGFja2V0IFR5cGUgQ29uZmlndXJhdGlvbiBSZWdpc3RlcgorICogUmVnaXN0ZXI6IE1BQ19UWVBFX0NGR18wCisgKiBSZWdpc3RlcjogTUFDX1RZUEVfQ0ZHXzEKKyAqIFJlZ2lzdGVyOiBNQUNfVFlQRV9DRkdfMgorICovCisKKyNkZWZpbmUgU19UWVBFQ0ZHX1RZUEVTSVpFICAgICAgX1NCX01BS0U2NCgxNikKKworI2RlZmluZSBTX1RZUEVDRkdfVFlQRTAJCV9TQl9NQUtFNjQoMCkKKyNkZWZpbmUgTV9UWVBFQ0ZHX1RZUEUwICAgICAgICAgX1NCX01BS0VNQVNLKDE2LFNfVFlQRUNGR19UWVBFMCkKKyNkZWZpbmUgVl9UWVBFQ0ZHX1RZUEUwKHgpICAgICAgX1NCX01BS0VWQUxVRSh4LFNfVFlQRUNGR19UWVBFMCkKKyNkZWZpbmUgR19UWVBFQ0ZHX1RZUEUwKHgpICAgICAgX1NCX0dFVFZBTFVFKHgsU19UWVBFQ0ZHX1RZUEUwLE1fVFlQRUNGR19UWVBFMCkKKworI2RlZmluZSBTX1RZUEVDRkdfVFlQRTEJCV9TQl9NQUtFNjQoMCkKKyNkZWZpbmUgTV9UWVBFQ0ZHX1RZUEUxICAgICAgICAgX1NCX01BS0VNQVNLKDE2LFNfVFlQRUNGR19UWVBFMSkKKyNkZWZpbmUgVl9UWVBFQ0ZHX1RZUEUxKHgpICAgICAgX1NCX01BS0VWQUxVRSh4LFNfVFlQRUNGR19UWVBFMSkKKyNkZWZpbmUgR19UWVBFQ0ZHX1RZUEUxKHgpICAgICAgX1NCX0dFVFZBTFVFKHgsU19UWVBFQ0ZHX1RZUEUxLE1fVFlQRUNGR19UWVBFMSkKKworI2RlZmluZSBTX1RZUEVDRkdfVFlQRTIJCV9TQl9NQUtFNjQoMCkKKyNkZWZpbmUgTV9UWVBFQ0ZHX1RZUEUyICAgICAgICAgX1NCX01BS0VNQVNLKDE2LFNfVFlQRUNGR19UWVBFMikKKyNkZWZpbmUgVl9UWVBFQ0ZHX1RZUEUyKHgpICAgICAgX1NCX01BS0VWQUxVRSh4LFNfVFlQRUNGR19UWVBFMikKKyNkZWZpbmUgR19UWVBFQ0ZHX1RZUEUyKHgpICAgICAgX1NCX0dFVFZBTFVFKHgsU19UWVBFQ0ZHX1RZUEUyLE1fVFlQRUNGR19UWVBFMikKKworI2RlZmluZSBTX1RZUEVDRkdfVFlQRTMJCV9TQl9NQUtFNjQoMCkKKyNkZWZpbmUgTV9UWVBFQ0ZHX1RZUEUzICAgICAgICAgX1NCX01BS0VNQVNLKDE2LFNfVFlQRUNGR19UWVBFMykKKyNkZWZpbmUgVl9UWVBFQ0ZHX1RZUEUzKHgpICAgICAgX1NCX01BS0VWQUxVRSh4LFNfVFlQRUNGR19UWVBFMykKKyNkZWZpbmUgR19UWVBFQ0ZHX1RZUEUzKHgpICAgICAgX1NCX0dFVFZBTFVFKHgsU19UWVBFQ0ZHX1RZUEUzLE1fVFlQRUNGR19UWVBFMykKKworLyoKKyAqIE1BQyBSZWNlaXZlIEFkZHJlc3MgRmlsdGVyIENvbnRyb2wgUmVnaXN0ZXJzIChUYWJsZSA5LTI0KQorICogUmVnaXN0ZXI6IE1BQ19BREZJTFRFUl9DRkdfMAorICogUmVnaXN0ZXI6IE1BQ19BREZJTFRFUl9DRkdfMQorICogUmVnaXN0ZXI6IE1BQ19BREZJTFRFUl9DRkdfMgorICovCisKKyNkZWZpbmUgTV9NQUNfQUxMUEtUX0VOCSAgICAgICAgX1NCX01BS0VNQVNLMSgwKQorI2RlZmluZSBNX01BQ19VQ0FTVF9FTiAgICAgICAgICBfU0JfTUFLRU1BU0sxKDEpCisjZGVmaW5lIE1fTUFDX1VDQVNUX0lOViAgICAgICAgIF9TQl9NQUtFTUFTSzEoMikKKyNkZWZpbmUgTV9NQUNfTUNBU1RfRU4gICAgICAgICAgX1NCX01BS0VNQVNLMSgzKQorI2RlZmluZSBNX01BQ19NQ0FTVF9JTlYgICAgICAgICBfU0JfTUFLRU1BU0sxKDQpCisjZGVmaW5lIE1fTUFDX0JDQVNUX0VOICAgICAgICAgIF9TQl9NQUtFTUFTSzEoNSkKKyNkZWZpbmUgTV9NQUNfRElSRUNUX0lOViAgICAgICAgX1NCX01BS0VNQVNLMSg2KQorI2lmIFNJQllURV9IRFJfRkVBVFVSRSgxMjUwLCBQQVNTMikgfHwgU0lCWVRFX0hEUl9GRUFUVVJFKDExMngsIFBBU1MxKQorI2RlZmluZSBNX01BQ19BTExNQ0FTVF9FTglfU0JfTUFLRU1BU0sxKDcpCisjZW5kaWYgLyogMTI1MCBQQVNTMiB8fCAxMTJ4IFBBU1MxICovCisKKyNkZWZpbmUgU19NQUNfSVBIRFJfT0ZGU0VUICAgICAgX1NCX01BS0U2NCg4KQorI2RlZmluZSBNX01BQ19JUEhEUl9PRkZTRVQgICAgICBfU0JfTUFLRU1BU0soOCxTX01BQ19JUEhEUl9PRkZTRVQpCisjZGVmaW5lIFZfTUFDX0lQSERSX09GRlNFVCh4KQlfU0JfTUFLRVZBTFVFKHgsU19NQUNfSVBIRFJfT0ZGU0VUKQorI2RlZmluZSBHX01BQ19JUEhEUl9PRkZTRVQoeCkJX1NCX0dFVFZBTFVFKHgsU19NQUNfSVBIRFJfT0ZGU0VULE1fTUFDX0lQSERSX09GRlNFVCkKKworI2lmIFNJQllURV9IRFJfRkVBVFVSRSgxMjUwLCBQQVNTMykgfHwgU0lCWVRFX0hEUl9GRUFUVVJFKDExMngsIFBBU1MxKQorI2RlZmluZSBTX01BQ19SWF9DUkNfT0ZGU0VUICAgICBfU0JfTUFLRTY0KDE2KQorI2RlZmluZSBNX01BQ19SWF9DUkNfT0ZGU0VUICAgICBfU0JfTUFLRU1BU0soOCxTX01BQ19SWF9DUkNfT0ZGU0VUKQorI2RlZmluZSBWX01BQ19SWF9DUkNfT0ZGU0VUKHgpCV9TQl9NQUtFVkFMVUUoeCxTX01BQ19SWF9DUkNfT0ZGU0VUKQorI2RlZmluZSBHX01BQ19SWF9DUkNfT0ZGU0VUKHgpCV9TQl9HRVRWQUxVRSh4LFNfTUFDX1JYX0NSQ19PRkZTRVQsTV9NQUNfUlhfQ1JDX09GRlNFVCkKKworI2RlZmluZSBTX01BQ19SWF9QS1RfT0ZGU0VUICAgICBfU0JfTUFLRTY0KDI0KQorI2RlZmluZSBNX01BQ19SWF9QS1RfT0ZGU0VUICAgICBfU0JfTUFLRU1BU0soOCxTX01BQ19SWF9QS1RfT0ZGU0VUKQorI2RlZmluZSBWX01BQ19SWF9QS1RfT0ZGU0VUKHgpCV9TQl9NQUtFVkFMVUUoeCxTX01BQ19SWF9QS1RfT0ZGU0VUKQorI2RlZmluZSBHX01BQ19SWF9QS1RfT0ZGU0VUKHgpCV9TQl9HRVRWQUxVRSh4LFNfTUFDX1JYX1BLVF9PRkZTRVQsTV9NQUNfUlhfUEtUX09GRlNFVCkKKworI2RlZmluZSBNX01BQ19GV0RQQVVTRV9FTglfU0JfTUFLRU1BU0sxKDMyKQorI2RlZmluZSBNX01BQ19WTEFOX0RFVF9FTglfU0JfTUFLRU1BU0sxKDMzKQorCisjZGVmaW5lIFNfTUFDX1JYX0NIX01TTl9TRUwgICAgIF9TQl9NQUtFNjQoMzQpCisjZGVmaW5lIE1fTUFDX1JYX0NIX01TTl9TRUwgICAgIF9TQl9NQUtFTUFTSyg4LFNfTUFDX1JYX0NIX01TTl9TRUwpCisjZGVmaW5lIFZfTUFDX1JYX0NIX01TTl9TRUwoeCkJX1NCX01BS0VWQUxVRSh4LFNfTUFDX1JYX0NIX01TTl9TRUwpCisjZGVmaW5lIEdfTUFDX1JYX0NIX01TTl9TRUwoeCkJX1NCX0dFVFZBTFVFKHgsU19NQUNfUlhfQ0hfTVNOX1NFTCxNX01BQ19SWF9DSF9NU05fU0VMKQorI2VuZGlmIC8qIDEyNTAgUEFTUzMgfHwgMTEyeCBQQVNTMSAqLworCisvKgorICogTUFDIFJlY2VpdmUgQ2hhbm5lbCBTZWxlY3QgUmVnaXN0ZXJzIChUYWJsZSA5LTI1KQorICovCisKKy8qIG5vIGJpdGZpZWxkcyAqLworCisvKgorICogTUFDIE1JSSBNYW5hZ2VtZW50IEludGVyZmFjZSBSZWdpc3RlcnMgKFRhYmxlIDktMjYpCisgKiBSZWdpc3RlcjogTUFDX01ESU9fMAorICogUmVnaXN0ZXI6IE1BQ19NRElPXzEKKyAqIFJlZ2lzdGVyOiBNQUNfTURJT18yCisgKi8KKworI2RlZmluZSBTX01BQ19NREMJCTAKKyNkZWZpbmUgU19NQUNfTURJT19ESVIJCTEKKyNkZWZpbmUgU19NQUNfTURJT19PVVQJCTIKKyNkZWZpbmUgU19NQUNfR0VOQwkJMworI2RlZmluZSBTX01BQ19NRElPX0lOCQk0CisKKyNkZWZpbmUgTV9NQUNfTURDCQlfU0JfTUFLRU1BU0sxKFNfTUFDX01EQykKKyNkZWZpbmUgTV9NQUNfTURJT19ESVIJCV9TQl9NQUtFTUFTSzEoU19NQUNfTURJT19ESVIpCisjZGVmaW5lIE1fTUFDX01ESU9fRElSX0lOUFVUCV9TQl9NQUtFTUFTSzEoU19NQUNfTURJT19ESVIpCisjZGVmaW5lIE1fTUFDX01ESU9fT1VUCQlfU0JfTUFLRU1BU0sxKFNfTUFDX01ESU9fT1VUKQorI2RlZmluZSBNX01BQ19HRU5DCQlfU0JfTUFLRU1BU0sxKFNfTUFDX0dFTkMpCisjZGVmaW5lIE1fTUFDX01ESU9fSU4JCV9TQl9NQUtFTUFTSzEoU19NQUNfTURJT19JTikKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NpYnl0ZS9zYjEyNTBfbWMuaCBiL2luY2x1ZGUvYXNtLW1pcHMvc2lieXRlL3NiMTI1MF9tYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzYTQ4MzMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NpYnl0ZS9zYjEyNTBfbWMuaApAQCAtMCwwICsxLDU0OCBAQAorLyogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICogIFNCMTI1MCBCb2FyZCBTdXBwb3J0IFBhY2thZ2UKKyAgICAqICAKKyAgICAqICBNZW1vcnkgQ29udHJvbGxlciBjb25zdGFudHMgICAgICAgICAgICAgIEZpbGU6IHNiMTI1MF9tYy5oICAgICAgIAorICAgICogIAorICAgICogIFRoaXMgbW9kdWxlIGNvbnRhaW5zIGNvbnN0YW50cyBhbmQgbWFjcm9zIHVzZWZ1bCBmb3IKKyAgICAqICBwcm9ncmFtbWluZyB0aGUgbWVtb3J5IGNvbnRyb2xsZXIuCisgICAgKiAgCisgICAgKiAgU0IxMjUwIHNwZWNpZmljYXRpb24gbGV2ZWw6ICBVc2VyJ3MgbWFudWFsIDEvMDIvMDIKKyAgICAqICAKKyAgICAqICBBdXRob3I6ICBNaXRjaCBMaWNodGVuYmVyZworICAgICogIAorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAgCisgICAgKgorICAgICogIENvcHlyaWdodCAyMDAwLDIwMDEsMjAwMiwyMDAzCisgICAgKiAgQnJvYWRjb20gQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICAgKiAgCisgICAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAKKyAgICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyAKKyAgICAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiAKKyAgICAqICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgICAqCisgICAgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgICAqCisgICAgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIAorICAgICogIE1BIDAyMTExLTEzMDcgVVNBCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKworI2lmbmRlZiBfU0IxMjUwX01DX0gKKyNkZWZpbmUgX1NCMTI1MF9NQ19ICisKKyNpbmNsdWRlICJzYjEyNTBfZGVmcy5oIgorCisvKgorICogTWVtb3J5IENoYW5uZWwgQ29uZmlnIFJlZ2lzdGVyICh0YWJsZSA2LTE0KQorICovCisKKyNkZWZpbmUgU19NQ19SRVNFUlZFRDAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgTV9NQ19SRVNFUlZFRDAgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSyg4LFNfTUNfUkVTRVJWRUQwKQorCisjZGVmaW5lIFNfTUNfQ0hBTk5FTF9TRUwgICAgICAgICAgICA4CisjZGVmaW5lIE1fTUNfQ0hBTk5FTF9TRUwgICAgICAgICAgICBfU0JfTUFLRU1BU0soOCxTX01DX0NIQU5ORUxfU0VMKQorI2RlZmluZSBWX01DX0NIQU5ORUxfU0VMKHgpICAgICAgICAgX1NCX01BS0VWQUxVRSh4LFNfTUNfQ0hBTk5FTF9TRUwpCisjZGVmaW5lIEdfTUNfQ0hBTk5FTF9TRUwoeCkgICAgICAgICBfU0JfR0VUVkFMVUUoeCxTX01DX0NIQU5ORUxfU0VMLE1fTUNfQ0hBTk5FTF9TRUwpCisKKyNkZWZpbmUgU19NQ19CQU5LMF9NQVAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIE1fTUNfQkFOSzBfTUFQICAgICAgICAgICAgICBfU0JfTUFLRU1BU0soNCxTX01DX0JBTkswX01BUCkKKyNkZWZpbmUgVl9NQ19CQU5LMF9NQVAoeCkgICAgICAgICAgIF9TQl9NQUtFVkFMVUUoeCxTX01DX0JBTkswX01BUCkKKyNkZWZpbmUgR19NQ19CQU5LMF9NQVAoeCkgICAgICAgICAgIF9TQl9HRVRWQUxVRSh4LFNfTUNfQkFOSzBfTUFQLE1fTUNfQkFOSzBfTUFQKQorCisjZGVmaW5lIEtfTUNfQkFOSzBfTUFQX0RFRkFVTFQgICAgICAweDAwCisjZGVmaW5lIFZfTUNfQkFOSzBfTUFQX0RFRkFVTFQgICAgICBWX01DX0JBTkswX01BUChLX01DX0JBTkswX01BUF9ERUZBVUxUKQorCisjZGVmaW5lIFNfTUNfQkFOSzFfTUFQICAgICAgICAgICAgICAyMAorI2RlZmluZSBNX01DX0JBTksxX01BUCAgICAgICAgICAgICAgX1NCX01BS0VNQVNLKDQsU19NQ19CQU5LMV9NQVApCisjZGVmaW5lIFZfTUNfQkFOSzFfTUFQKHgpICAgICAgICAgICBfU0JfTUFLRVZBTFVFKHgsU19NQ19CQU5LMV9NQVApCisjZGVmaW5lIEdfTUNfQkFOSzFfTUFQKHgpICAgICAgICAgICBfU0JfR0VUVkFMVUUoeCxTX01DX0JBTksxX01BUCxNX01DX0JBTksxX01BUCkKKworI2RlZmluZSBLX01DX0JBTksxX01BUF9ERUZBVUxUICAgICAgMHgwOAorI2RlZmluZSBWX01DX0JBTksxX01BUF9ERUZBVUxUICAgICAgVl9NQ19CQU5LMV9NQVAoS19NQ19CQU5LMV9NQVBfREVGQVVMVCkKKworI2RlZmluZSBTX01DX0JBTksyX01BUCAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgTV9NQ19CQU5LMl9NQVAgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSyg0LFNfTUNfQkFOSzJfTUFQKQorI2RlZmluZSBWX01DX0JBTksyX01BUCh4KSAgICAgICAgICAgX1NCX01BS0VWQUxVRSh4LFNfTUNfQkFOSzJfTUFQKQorI2RlZmluZSBHX01DX0JBTksyX01BUCh4KSAgICAgICAgICAgX1NCX0dFVFZBTFVFKHgsU19NQ19CQU5LMl9NQVAsTV9NQ19CQU5LMl9NQVApCisKKyNkZWZpbmUgS19NQ19CQU5LMl9NQVBfREVGQVVMVCAgICAgIDB4MDkKKyNkZWZpbmUgVl9NQ19CQU5LMl9NQVBfREVGQVVMVCAgICAgIFZfTUNfQkFOSzJfTUFQKEtfTUNfQkFOSzJfTUFQX0RFRkFVTFQpCisKKyNkZWZpbmUgU19NQ19CQU5LM19NQVAgICAgICAgICAgICAgIDI4CisjZGVmaW5lIE1fTUNfQkFOSzNfTUFQICAgICAgICAgICAgICBfU0JfTUFLRU1BU0soNCxTX01DX0JBTkszX01BUCkKKyNkZWZpbmUgVl9NQ19CQU5LM19NQVAoeCkgICAgICAgICAgIF9TQl9NQUtFVkFMVUUoeCxTX01DX0JBTkszX01BUCkKKyNkZWZpbmUgR19NQ19CQU5LM19NQVAoeCkgICAgICAgICAgIF9TQl9HRVRWQUxVRSh4LFNfTUNfQkFOSzNfTUFQLE1fTUNfQkFOSzNfTUFQKQorCisjZGVmaW5lIEtfTUNfQkFOSzNfTUFQX0RFRkFVTFQgICAgICAweDBDCisjZGVmaW5lIFZfTUNfQkFOSzNfTUFQX0RFRkFVTFQgICAgICBWX01DX0JBTkszX01BUChLX01DX0JBTkszX01BUF9ERUZBVUxUKQorCisjZGVmaW5lIE1fTUNfUkVTRVJWRUQxICAgICAgICAgICAgICBfU0JfTUFLRU1BU0soOCwzMikKKworI2RlZmluZSBTX01DX1FVRVVFX1NJWkUJCSAgICA0MAorI2RlZmluZSBNX01DX1FVRVVFX1NJWkUgICAgICAgICAgICAgX1NCX01BS0VNQVNLKDQsU19NQ19RVUVVRV9TSVpFKQorI2RlZmluZSBWX01DX1FVRVVFX1NJWkUoeCkgICAgICAgICAgX1NCX01BS0VWQUxVRSh4LFNfTUNfUVVFVUVfU0laRSkKKyNkZWZpbmUgR19NQ19RVUVVRV9TSVpFKHgpICAgICAgICAgIF9TQl9HRVRWQUxVRSh4LFNfTUNfUVVFVUVfU0laRSxNX01DX1FVRVVFX1NJWkUpCisjZGVmaW5lIFZfTUNfUVVFVUVfU0laRV9ERUZBVUxUICAgICBWX01DX1FVRVVFX1NJWkUoMHgwQSkKKworI2RlZmluZSBTX01DX0FHRV9MSU1JVCAgICAgICAgICAgICAgNDQKKyNkZWZpbmUgTV9NQ19BR0VfTElNSVQgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSyg0LFNfTUNfQUdFX0xJTUlUKQorI2RlZmluZSBWX01DX0FHRV9MSU1JVCh4KSAgICAgICAgICAgX1NCX01BS0VWQUxVRSh4LFNfTUNfQUdFX0xJTUlUKQorI2RlZmluZSBHX01DX0FHRV9MSU1JVCh4KSAgICAgICAgICAgX1NCX0dFVFZBTFVFKHgsU19NQ19BR0VfTElNSVQsTV9NQ19BR0VfTElNSVQpCisjZGVmaW5lIFZfTUNfQUdFX0xJTUlUX0RFRkFVTFQgICAgICBWX01DX0FHRV9MSU1JVCg4KQorCisjZGVmaW5lIFNfTUNfV1JfTElNSVQgICAgICAgICAgICAgICA0OAorI2RlZmluZSBNX01DX1dSX0xJTUlUICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLKDQsU19NQ19XUl9MSU1JVCkKKyNkZWZpbmUgVl9NQ19XUl9MSU1JVCh4KSAgICAgICAgICAgIF9TQl9NQUtFVkFMVUUoeCxTX01DX1dSX0xJTUlUKQorI2RlZmluZSBHX01DX1dSX0xJTUlUKHgpICAgICAgICAgICAgX1NCX0dFVFZBTFVFKHgsU19NQ19XUl9MSU1JVCxNX01DX1dSX0xJTUlUKQorI2RlZmluZSBWX01DX1dSX0xJTUlUX0RFRkFVTFQgICAgICAgVl9NQ19XUl9MSU1JVCg1KQorCisjZGVmaW5lIE1fTUNfSU9CMUhJR0hQUklPUklUWQkgICAgX1NCX01BS0VNQVNLMSg1MikKKworI2RlZmluZSBNX01DX1JFU0VSVkVEMiAgICAgICAgICAgICAgX1NCX01BS0VNQVNLKDMsNTMpCisKKyNkZWZpbmUgU19NQ19DU19NT0RFICAgICAgICAgICAgICAgIDU2CisjZGVmaW5lIE1fTUNfQ1NfTU9ERSAgICAgICAgICAgICAgICBfU0JfTUFLRU1BU0soNCxTX01DX0NTX01PREUpCisjZGVmaW5lIFZfTUNfQ1NfTU9ERSh4KSAgICAgICAgICAgICBfU0JfTUFLRVZBTFVFKHgsU19NQ19DU19NT0RFKQorI2RlZmluZSBHX01DX0NTX01PREUoeCkgICAgICAgICAgICAgX1NCX0dFVFZBTFVFKHgsU19NQ19DU19NT0RFLE1fTUNfQ1NfTU9ERSkKKworI2RlZmluZSBLX01DX0NTX01PREVfTVNCX0NTICAgICAgICAgMAorI2RlZmluZSBLX01DX0NTX01PREVfSU5UTFZfQ1MgICAgICAgMTUKKyNkZWZpbmUgS19NQ19DU19NT0RFX01JWEVEX0NTXzEwICAgIDEyCisjZGVmaW5lIEtfTUNfQ1NfTU9ERV9NSVhFRF9DU18zMCAgICA2CisjZGVmaW5lIEtfTUNfQ1NfTU9ERV9NSVhFRF9DU18zMiAgICAzCisKKyNkZWZpbmUgVl9NQ19DU19NT0RFX01TQl9DUyAgICAgICAgIFZfTUNfQ1NfTU9ERShLX01DX0NTX01PREVfTVNCX0NTKQorI2RlZmluZSBWX01DX0NTX01PREVfSU5UTFZfQ1MgICAgICAgVl9NQ19DU19NT0RFKEtfTUNfQ1NfTU9ERV9JTlRMVl9DUykKKyNkZWZpbmUgVl9NQ19DU19NT0RFX01JWEVEX0NTXzEwICAgIFZfTUNfQ1NfTU9ERShLX01DX0NTX01PREVfTUlYRURfQ1NfMTApCisjZGVmaW5lIFZfTUNfQ1NfTU9ERV9NSVhFRF9DU18zMCAgICBWX01DX0NTX01PREUoS19NQ19DU19NT0RFX01JWEVEX0NTXzMwKQorI2RlZmluZSBWX01DX0NTX01PREVfTUlYRURfQ1NfMzIgICAgVl9NQ19DU19NT0RFKEtfTUNfQ1NfTU9ERV9NSVhFRF9DU18zMikKKworI2RlZmluZSBNX01DX0VDQ19ESVNBQkxFICAgICAgICAgICAgX1NCX01BS0VNQVNLMSg2MCkKKyNkZWZpbmUgTV9NQ19CRVJSX0RJU0FCTEUgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoNjEpCisjZGVmaW5lIE1fTUNfRk9SQ0VfU0VRICAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDYyKQorI2RlZmluZSBNX01DX0RFQlVHICAgICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLMSg2MykKKworI2RlZmluZSBWX01DX0NPTkZJR19ERUZBVUxUICAgICBWX01DX1dSX0xJTUlUX0RFRkFVTFQgfCBWX01DX0FHRV9MSU1JVF9ERUZBVUxUIHwgXAorCQkJCVZfTUNfQkFOSzBfTUFQX0RFRkFVTFQgfCBWX01DX0JBTksxX01BUF9ERUZBVUxUIHwgXAorCQkJCVZfTUNfQkFOSzJfTUFQX0RFRkFVTFQgfCBWX01DX0JBTkszX01BUF9ERUZBVUxUIHwgVl9NQ19DSEFOTkVMX1NFTCgwKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTV9NQ19JT0IxSElHSFBSSU9SSVRZIHwgVl9NQ19RVUVVRV9TSVpFX0RFRkFVTFQKKworCisvKgorICogTWVtb3J5IGNsb2NrIGNvbmZpZyByZWdpc3RlciAoVGFibGUgNi0xNSkKKyAqCisgKiBOb3RlOiB0aGlzIGZpZWxkIGhhcyBiZWVuIHVwZGF0ZWQgdG8gYmUgY29uc2lzdGVudCB3aXRoIHRoZSBlcnJhdGEgdG8gMC4yCisgKi8KKworI2RlZmluZSBTX01DX0NMS19SQVRJTyAgICAgICAgICAgICAgMAorI2RlZmluZSBNX01DX0NMS19SQVRJTyAgICAgICAgICAgICAgX1NCX01BS0VNQVNLKDQsU19NQ19DTEtfUkFUSU8pCisjZGVmaW5lIFZfTUNfQ0xLX1JBVElPKHgpICAgICAgICAgICBfU0JfTUFLRVZBTFVFKHgsU19NQ19DTEtfUkFUSU8pCisjZGVmaW5lIEdfTUNfQ0xLX1JBVElPKHgpICAgICAgICAgICBfU0JfR0VUVkFMVUUoeCxTX01DX0NMS19SQVRJTyxNX01DX0NMS19SQVRJTykKKworI2RlZmluZSBLX01DX0NMS19SQVRJT18yWCAgICAgICAgICAgNAorI2RlZmluZSBLX01DX0NMS19SQVRJT18yNVggICAgICAgICAgNQorI2RlZmluZSBLX01DX0NMS19SQVRJT18zWCAgICAgICAgICAgNgorI2RlZmluZSBLX01DX0NMS19SQVRJT18zNVggICAgICAgICAgNworI2RlZmluZSBLX01DX0NMS19SQVRJT180WCAgICAgICAgICAgOAorI2RlZmluZSBLX01DX0NMS19SQVRJT180NVgJICAgIDkKKworI2RlZmluZSBWX01DX0NMS19SQVRJT18yWAkgICAgVl9NQ19DTEtfUkFUSU8oS19NQ19DTEtfUkFUSU9fMlgpCisjZGVmaW5lIFZfTUNfQ0xLX1JBVElPXzI1WCAgICAgICAgICBWX01DX0NMS19SQVRJTyhLX01DX0NMS19SQVRJT18yNVgpCisjZGVmaW5lIFZfTUNfQ0xLX1JBVElPXzNYICAgICAgICAgICBWX01DX0NMS19SQVRJTyhLX01DX0NMS19SQVRJT18zWCkKKyNkZWZpbmUgVl9NQ19DTEtfUkFUSU9fMzVYICAgICAgICAgIFZfTUNfQ0xLX1JBVElPKEtfTUNfQ0xLX1JBVElPXzM1WCkKKyNkZWZpbmUgVl9NQ19DTEtfUkFUSU9fNFggICAgICAgICAgIFZfTUNfQ0xLX1JBVElPKEtfTUNfQ0xLX1JBVElPXzRYKQorI2RlZmluZSBWX01DX0NMS19SQVRJT180NVggICAgICAgICAgVl9NQ19DTEtfUkFUSU8oS19NQ19DTEtfUkFUSU9fNDVYKQorI2RlZmluZSBWX01DX0NMS19SQVRJT19ERUZBVUxUICAgICAgVl9NQ19DTEtfUkFUSU9fMjVYCisKKyNkZWZpbmUgU19NQ19SRUZfUkFURSAgICAgICAgICAgICAgICA4CisjZGVmaW5lIE1fTUNfUkVGX1JBVEUgICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLKDgsU19NQ19SRUZfUkFURSkKKyNkZWZpbmUgVl9NQ19SRUZfUkFURSh4KSAgICAgICAgICAgICBfU0JfTUFLRVZBTFVFKHgsU19NQ19SRUZfUkFURSkKKyNkZWZpbmUgR19NQ19SRUZfUkFURSh4KSAgICAgICAgICAgICBfU0JfR0VUVkFMVUUoeCxTX01DX1JFRl9SQVRFLE1fTUNfUkVGX1JBVEUpCisKKyNkZWZpbmUgS19NQ19SRUZfUkFURV8xMDBNSHogICAgICAgICAweDYyCisjZGVmaW5lIEtfTUNfUkVGX1JBVEVfMTMzTUh6ICAgICAgICAgMHg4MQorI2RlZmluZSBLX01DX1JFRl9SQVRFXzIwME1IeiAgICAgICAgIDB4QzQgCisKKyNkZWZpbmUgVl9NQ19SRUZfUkFURV8xMDBNSHogICAgICAgICBWX01DX1JFRl9SQVRFKEtfTUNfUkVGX1JBVEVfMTAwTUh6KQorI2RlZmluZSBWX01DX1JFRl9SQVRFXzEzM01IeiAgICAgICAgIFZfTUNfUkVGX1JBVEUoS19NQ19SRUZfUkFURV8xMzNNSHopCisjZGVmaW5lIFZfTUNfUkVGX1JBVEVfMjAwTUh6ICAgICAgICAgVl9NQ19SRUZfUkFURShLX01DX1JFRl9SQVRFXzIwME1IeikKKyNkZWZpbmUgVl9NQ19SRUZfUkFURV9ERUZBVUxUICAgICAgICBWX01DX1JFRl9SQVRFXzEwME1IegorCisjZGVmaW5lIFNfTUNfQ0xPQ0tfRFJJVkUgICAgICAgICAgICAgMTYKKyNkZWZpbmUgTV9NQ19DTE9DS19EUklWRSAgICAgICAgICAgICBfU0JfTUFLRU1BU0soNCxTX01DX0NMT0NLX0RSSVZFKQorI2RlZmluZSBWX01DX0NMT0NLX0RSSVZFKHgpICAgICAgICAgIF9TQl9NQUtFVkFMVUUoeCxTX01DX0NMT0NLX0RSSVZFKQorI2RlZmluZSBHX01DX0NMT0NLX0RSSVZFKHgpICAgICAgICAgIF9TQl9HRVRWQUxVRSh4LFNfTUNfQ0xPQ0tfRFJJVkUsTV9NQ19DTE9DS19EUklWRSkKKyNkZWZpbmUgVl9NQ19DTE9DS19EUklWRV9ERUZBVUxUICAgICBWX01DX0NMT0NLX0RSSVZFKDB4RikKKworI2RlZmluZSBTX01DX0RBVEFfRFJJVkUgICAgICAgICAgICAgIDIwCisjZGVmaW5lIE1fTUNfREFUQV9EUklWRSAgICAgICAgICAgICAgX1NCX01BS0VNQVNLKDQsU19NQ19EQVRBX0RSSVZFKQorI2RlZmluZSBWX01DX0RBVEFfRFJJVkUoeCkgICAgICAgICAgIF9TQl9NQUtFVkFMVUUoeCxTX01DX0RBVEFfRFJJVkUpCisjZGVmaW5lIEdfTUNfREFUQV9EUklWRSh4KSAgICAgICAgICAgX1NCX0dFVFZBTFVFKHgsU19NQ19EQVRBX0RSSVZFLE1fTUNfREFUQV9EUklWRSkKKyNkZWZpbmUgVl9NQ19EQVRBX0RSSVZFX0RFRkFVTFQgICAgICBWX01DX0RBVEFfRFJJVkUoMHgwKQorCisjZGVmaW5lIFNfTUNfQUREUl9EUklWRSAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgTV9NQ19BRERSX0RSSVZFICAgICAgICAgICAgICBfU0JfTUFLRU1BU0soNCxTX01DX0FERFJfRFJJVkUpCisjZGVmaW5lIFZfTUNfQUREUl9EUklWRSh4KSAgICAgICAgICAgX1NCX01BS0VWQUxVRSh4LFNfTUNfQUREUl9EUklWRSkKKyNkZWZpbmUgR19NQ19BRERSX0RSSVZFKHgpICAgICAgICAgICBfU0JfR0VUVkFMVUUoeCxTX01DX0FERFJfRFJJVkUsTV9NQ19BRERSX0RSSVZFKQorI2RlZmluZSBWX01DX0FERFJfRFJJVkVfREVGQVVMVCAgICAgIFZfTUNfQUREUl9EUklWRSgweDApCisKKyNpZiBTSUJZVEVfSERSX0ZFQVRVUkUoMTI1MCwgUEFTUzMpIHx8IFNJQllURV9IRFJfRkVBVFVSRSgxMTJ4LCBQQVNTMSkKKyNkZWZpbmUgTV9NQ19SRUZfRElTQUJMRSAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDMwKQorI2VuZGlmIC8qIDEyNTAgUEFTUzMgfHwgMTEyeCBQQVNTMSAqLworCisjZGVmaW5lIE1fTUNfRExMX0JZUEFTUyAgICAgICAgICAgICAgX1NCX01BS0VNQVNLMSgzMSkKKworI2RlZmluZSBTX01DX0RRSV9TS0VXICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgTV9NQ19EUUlfU0tFVyAgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSyg4LFNfTUNfRFFJX1NLRVcpCisjZGVmaW5lIFZfTUNfRFFJX1NLRVcoeCkgICAgICAgICAgICBfU0JfTUFLRVZBTFVFKHgsU19NQ19EUUlfU0tFVykKKyNkZWZpbmUgR19NQ19EUUlfU0tFVyh4KSAgICAgICAgICAgIF9TQl9HRVRWQUxVRSh4LFNfTUNfRFFJX1NLRVcsTV9NQ19EUUlfU0tFVykKKyNkZWZpbmUgVl9NQ19EUUlfU0tFV19ERUZBVUxUICAgICAgIFZfTUNfRFFJX1NLRVcoMCkKKworI2RlZmluZSBTX01DX0RRT19TS0VXICAgICAgICAgICAgICAgNDAKKyNkZWZpbmUgTV9NQ19EUU9fU0tFVyAgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSyg4LFNfTUNfRFFPX1NLRVcpCisjZGVmaW5lIFZfTUNfRFFPX1NLRVcoeCkgICAgICAgICAgICBfU0JfTUFLRVZBTFVFKHgsU19NQ19EUU9fU0tFVykKKyNkZWZpbmUgR19NQ19EUU9fU0tFVyh4KSAgICAgICAgICAgIF9TQl9HRVRWQUxVRSh4LFNfTUNfRFFPX1NLRVcsTV9NQ19EUU9fU0tFVykKKyNkZWZpbmUgVl9NQ19EUU9fU0tFV19ERUZBVUxUICAgICAgIFZfTUNfRFFPX1NLRVcoMCkKKworI2RlZmluZSBTX01DX0FERFJfU0tFVyAgICAgICAgICAgICAgIDQ4CisjZGVmaW5lIE1fTUNfQUREUl9TS0VXICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLKDgsU19NQ19BRERSX1NLRVcpCisjZGVmaW5lIFZfTUNfQUREUl9TS0VXKHgpICAgICAgICAgICAgX1NCX01BS0VWQUxVRSh4LFNfTUNfQUREUl9TS0VXKQorI2RlZmluZSBHX01DX0FERFJfU0tFVyh4KSAgICAgICAgICAgIF9TQl9HRVRWQUxVRSh4LFNfTUNfQUREUl9TS0VXLE1fTUNfQUREUl9TS0VXKQorI2RlZmluZSBWX01DX0FERFJfU0tFV19ERUZBVUxUICAgICAgIFZfTUNfQUREUl9TS0VXKDB4MEYpCisKKyNkZWZpbmUgU19NQ19ETExfREVGQVVMVCAgICAgICAgICAgICA1NgorI2RlZmluZSBNX01DX0RMTF9ERUZBVUxUICAgICAgICAgICAgIF9TQl9NQUtFTUFTSyg4LFNfTUNfRExMX0RFRkFVTFQpCisjZGVmaW5lIFZfTUNfRExMX0RFRkFVTFQoeCkgICAgICAgICAgX1NCX01BS0VWQUxVRSh4LFNfTUNfRExMX0RFRkFVTFQpCisjZGVmaW5lIEdfTUNfRExMX0RFRkFVTFQoeCkgICAgICAgICAgX1NCX0dFVFZBTFVFKHgsU19NQ19ETExfREVGQVVMVCxNX01DX0RMTF9ERUZBVUxUKQorI2RlZmluZSBWX01DX0RMTF9ERUZBVUxUX0RFRkFVTFQgICAgIFZfTUNfRExMX0RFRkFVTFQoMHgxMCkKKworI2RlZmluZSBWX01DX0NMS0NPTkZJR19ERUZBVUxUICAgICAgIFZfTUNfRExMX0RFRkFVTFRfREVGQVVMVCB8ICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVl9NQ19BRERSX1NLRVdfREVGQVVMVCB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWX01DX0RRT19TS0VXX0RFRkFVTFQgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVl9NQ19EUUlfU0tFV19ERUZBVUxUIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZfTUNfQUREUl9EUklWRV9ERUZBVUxUIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZfTUNfREFUQV9EUklWRV9ERUZBVUxUIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZfTUNfQ0xPQ0tfRFJJVkVfREVGQVVMVCB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWX01DX1JFRl9SQVRFX0RFRkFVTFQgCisKKworCisvKgorICogRFJBTSBDb21tYW5kIFJlZ2lzdGVyIChUYWJsZSA2LTEzKQorICovCisKKyNkZWZpbmUgU19NQ19DT01NQU5EICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgTV9NQ19DT01NQU5EICAgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSyg0LFNfTUNfQ09NTUFORCkKKyNkZWZpbmUgVl9NQ19DT01NQU5EKHgpICAgICAgICAgICAgIF9TQl9NQUtFVkFMVUUoeCxTX01DX0NPTU1BTkQpCisjZGVmaW5lIEdfTUNfQ09NTUFORCh4KSAgICAgICAgICAgICBfU0JfR0VUVkFMVUUoeCxTX01DX0NPTU1BTkQsTV9NQ19DT01NQU5EKQorCisjZGVmaW5lIEtfTUNfQ09NTUFORF9FTVJTICAgICAgICAgICAwCisjZGVmaW5lIEtfTUNfQ09NTUFORF9NUlMgICAgICAgICAgICAxCisjZGVmaW5lIEtfTUNfQ09NTUFORF9QUkUgICAgICAgICAgICAyCisjZGVmaW5lIEtfTUNfQ09NTUFORF9BUiAgICAgICAgICAgICAzCisjZGVmaW5lIEtfTUNfQ09NTUFORF9TRVRSRlNIICAgICAgICA0CisjZGVmaW5lIEtfTUNfQ09NTUFORF9DTFJSRlNIICAgICAgICA1CisjZGVmaW5lIEtfTUNfQ09NTUFORF9TRVRQV1JETiAgICAgICA2CisjZGVmaW5lIEtfTUNfQ09NTUFORF9DTFJQV1JETiAgICAgICA3CisKKyNkZWZpbmUgVl9NQ19DT01NQU5EX0VNUlMgICAgICAgICAgIFZfTUNfQ09NTUFORChLX01DX0NPTU1BTkRfRU1SUykKKyNkZWZpbmUgVl9NQ19DT01NQU5EX01SUyAgICAgICAgICAgIFZfTUNfQ09NTUFORChLX01DX0NPTU1BTkRfTVJTKQorI2RlZmluZSBWX01DX0NPTU1BTkRfUFJFICAgICAgICAgICAgVl9NQ19DT01NQU5EKEtfTUNfQ09NTUFORF9QUkUpCisjZGVmaW5lIFZfTUNfQ09NTUFORF9BUiAgICAgICAgICAgICBWX01DX0NPTU1BTkQoS19NQ19DT01NQU5EX0FSKQorI2RlZmluZSBWX01DX0NPTU1BTkRfU0VUUkZTSCAgICAgICAgVl9NQ19DT01NQU5EKEtfTUNfQ09NTUFORF9TRVRSRlNIKQorI2RlZmluZSBWX01DX0NPTU1BTkRfQ0xSUkZTSCAgICAgICAgVl9NQ19DT01NQU5EKEtfTUNfQ09NTUFORF9DTFJSRlNIKQorI2RlZmluZSBWX01DX0NPTU1BTkRfU0VUUFdSRE4gICAgICAgVl9NQ19DT01NQU5EKEtfTUNfQ09NTUFORF9TRVRQV1JETikKKyNkZWZpbmUgVl9NQ19DT01NQU5EX0NMUlBXUkROICAgICAgIFZfTUNfQ09NTUFORChLX01DX0NPTU1BTkRfQ0xSUFdSRE4pCisKKyNkZWZpbmUgTV9NQ19DUzAgICAgICAgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoNCkKKyNkZWZpbmUgTV9NQ19DUzEgICAgICAgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoNSkKKyNkZWZpbmUgTV9NQ19DUzIgICAgICAgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoNikKKyNkZWZpbmUgTV9NQ19DUzMgICAgICAgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoNykKKworLyoKKyAqIERSQU0gTW9kZSBSZWdpc3RlciAoVGFibGUgNi0xNCkKKyAqLworCisjZGVmaW5lIFNfTUNfRU1PREUgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIE1fTUNfRU1PREUgICAgICAgICAgICAgICAgICBfU0JfTUFLRU1BU0soMTUsU19NQ19FTU9ERSkKKyNkZWZpbmUgVl9NQ19FTU9ERSh4KSAgICAgICAgICAgICAgIF9TQl9NQUtFVkFMVUUoeCxTX01DX0VNT0RFKQorI2RlZmluZSBHX01DX0VNT0RFKHgpICAgICAgICAgICAgICAgX1NCX0dFVFZBTFVFKHgsU19NQ19FTU9ERSxNX01DX0VNT0RFKQorI2RlZmluZSBWX01DX0VNT0RFX0RFRkFVTFQgICAgICAgICAgVl9NQ19FTU9ERSgwKQorCisjZGVmaW5lIFNfTUNfTU9ERSAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBNX01DX01PREUgICAgICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLKDE1LFNfTUNfTU9ERSkKKyNkZWZpbmUgVl9NQ19NT0RFKHgpICAgICAgICAgICAgICAgIF9TQl9NQUtFVkFMVUUoeCxTX01DX01PREUpCisjZGVmaW5lIEdfTUNfTU9ERSh4KSAgICAgICAgICAgICAgICBfU0JfR0VUVkFMVUUoeCxTX01DX01PREUsTV9NQ19NT0RFKQorI2RlZmluZSBWX01DX01PREVfREVGQVVMVCAgICAgICAgICAgVl9NQ19NT0RFKDB4MjIpCisKKyNkZWZpbmUgU19NQ19EUkFNX1RZUEUgICAgICAgICAgICAgIDMyCisjZGVmaW5lIE1fTUNfRFJBTV9UWVBFICAgICAgICAgICAgICBfU0JfTUFLRU1BU0soMyxTX01DX0RSQU1fVFlQRSkKKyNkZWZpbmUgVl9NQ19EUkFNX1RZUEUoeCkgICAgICAgICAgIF9TQl9NQUtFVkFMVUUoeCxTX01DX0RSQU1fVFlQRSkKKyNkZWZpbmUgR19NQ19EUkFNX1RZUEUoeCkgICAgICAgICAgIF9TQl9HRVRWQUxVRSh4LFNfTUNfRFJBTV9UWVBFLE1fTUNfRFJBTV9UWVBFKQorCisjZGVmaW5lIEtfTUNfRFJBTV9UWVBFX0pFREVDICAgICAgICAwCisjZGVmaW5lIEtfTUNfRFJBTV9UWVBFX0ZDUkFNICAgICAgICAxCisjZGVmaW5lIEtfTUNfRFJBTV9UWVBFX1NHUkFNCSAgICAyCisKKyNkZWZpbmUgVl9NQ19EUkFNX1RZUEVfSkVERUMgICAgICAgIFZfTUNfRFJBTV9UWVBFKEtfTUNfRFJBTV9UWVBFX0pFREVDKQorI2RlZmluZSBWX01DX0RSQU1fVFlQRV9GQ1JBTSAgICAgICAgVl9NQ19EUkFNX1RZUEUoS19NQ19EUkFNX1RZUEVfRkNSQU0pCisjZGVmaW5lIFZfTUNfRFJBTV9UWVBFX1NHUkFNICAgICAgICBWX01DX0RSQU1fVFlQRShLX01DX0RSQU1fVFlQRV9TR1JBTSkKKworI2RlZmluZSBNX01DX0VYVEVSTkFMREVDT0RFCSAgICBfU0JfTUFLRU1BU0sxKDM1KQorCisjaWYgU0lCWVRFX0hEUl9GRUFUVVJFKDEyNTAsIFBBU1MzKSB8fCBTSUJZVEVfSERSX0ZFQVRVUkUoMTEyeCwgUEFTUzEpCisjZGVmaW5lIE1fTUNfUFJFX09OX0E4ICAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDM2KQorI2RlZmluZSBNX01DX1JBTV9XSVRIX0ExMyAgICAgICAgICAgX1NCX01BS0VNQVNLMSgzOCkKKyNlbmRpZiAvKiAxMjUwIFBBU1MzIHx8IDExMnggUEFTUzEgKi8KKworCisKKy8qCisgKiBTRFJBTSBUaW1pbmcgUmVnaXN0ZXIgIChUYWJsZSA2LTE1KQorICovCisKKyNkZWZpbmUgTV9NQ193MnJJRExFX1RXT0NZQ0xFUwkgIF9TQl9NQUtFTUFTSzEoNjApCisjZGVmaW5lIE1fTUNfcjJ3SURMRV9UV09DWUNMRVMJICBfU0JfTUFLRU1BU0sxKDYxKQorI2RlZmluZSBNX01DX3IycklETEVfVFdPQ1lDTEVTCSAgX1NCX01BS0VNQVNLMSg2MikKKworI2RlZmluZSBTX01DX3RGSUZPICAgICAgICAgICAgICAgIDU2CisjZGVmaW5lIE1fTUNfdEZJRk8gICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLKDQsU19NQ190RklGTykKKyNkZWZpbmUgVl9NQ190RklGTyh4KSAgICAgICAgICAgICBfU0JfTUFLRVZBTFVFKHgsU19NQ190RklGTykKKyNkZWZpbmUgR19NQ190RklGTyh4KSAgICAgICAgICAgICBfU0JfR0VUVkFMVUUoeCxTX01DX3RGSUZPLE1fTUNfdEZJRk8pCisjZGVmaW5lIEtfTUNfdEZJRk9fREVGQVVMVCAgICAgICAgMQorI2RlZmluZSBWX01DX3RGSUZPX0RFRkFVTFQgICAgICAgIFZfTUNfdEZJRk8oS19NQ190RklGT19ERUZBVUxUKQorCisjZGVmaW5lIFNfTUNfdFJGQyAgICAgICAgICAgICAgICAgNTIKKyNkZWZpbmUgTV9NQ190UkZDICAgICAgICAgICAgICAgICBfU0JfTUFLRU1BU0soNCxTX01DX3RSRkMpCisjZGVmaW5lIFZfTUNfdFJGQyh4KSAgICAgICAgICAgICAgX1NCX01BS0VWQUxVRSh4LFNfTUNfdFJGQykKKyNkZWZpbmUgR19NQ190UkZDKHgpICAgICAgICAgICAgICBfU0JfR0VUVkFMVUUoeCxTX01DX3RSRkMsTV9NQ190UkZDKQorI2RlZmluZSBLX01DX3RSRkNfREVGQVVMVCAgICAgICAgIDEyCisjZGVmaW5lIFZfTUNfdFJGQ19ERUZBVUxUICAgICAgICAgVl9NQ190UkZDKEtfTUNfdFJGQ19ERUZBVUxUKQorCisjZGVmaW5lIFNfTUNfdEN3Q3IgICAgICAgICAgICAgICAgNDAKKyNkZWZpbmUgTV9NQ190Q3dDciAgICAgICAgICAgICAgICBfU0JfTUFLRU1BU0soNCxTX01DX3RDd0NyKQorI2RlZmluZSBWX01DX3RDd0NyKHgpICAgICAgICAgICAgIF9TQl9NQUtFVkFMVUUoeCxTX01DX3RDd0NyKQorI2RlZmluZSBHX01DX3RDd0NyKHgpICAgICAgICAgICAgIF9TQl9HRVRWQUxVRSh4LFNfTUNfdEN3Q3IsTV9NQ190Q3dDcikKKyNkZWZpbmUgS19NQ190Q3dDcl9ERUZBVUxUICAgICAgICA0CisjZGVmaW5lIFZfTUNfdEN3Q3JfREVGQVVMVCAgICAgICAgVl9NQ190Q3dDcihLX01DX3RDd0NyX0RFRkFVTFQpCisKKyNkZWZpbmUgU19NQ190UkNyICAgICAgICAgICAgICAgICAyOAorI2RlZmluZSBNX01DX3RSQ3IgICAgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSyg0LFNfTUNfdFJDcikKKyNkZWZpbmUgVl9NQ190UkNyKHgpICAgICAgICAgICAgICBfU0JfTUFLRVZBTFVFKHgsU19NQ190UkNyKQorI2RlZmluZSBHX01DX3RSQ3IoeCkgICAgICAgICAgICAgIF9TQl9HRVRWQUxVRSh4LFNfTUNfdFJDcixNX01DX3RSQ3IpCisjZGVmaW5lIEtfTUNfdFJDcl9ERUZBVUxUICAgICAgICAgOQorI2RlZmluZSBWX01DX3RSQ3JfREVGQVVMVCAgICAgICAgIFZfTUNfdFJDcihLX01DX3RSQ3JfREVGQVVMVCkKKworI2RlZmluZSBTX01DX3RSQ3cgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIE1fTUNfdFJDdyAgICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLKDQsU19NQ190UkN3KQorI2RlZmluZSBWX01DX3RSQ3coeCkgICAgICAgICAgICAgIF9TQl9NQUtFVkFMVUUoeCxTX01DX3RSQ3cpCisjZGVmaW5lIEdfTUNfdFJDdyh4KSAgICAgICAgICAgICAgX1NCX0dFVFZBTFVFKHgsU19NQ190UkN3LE1fTUNfdFJDdykKKyNkZWZpbmUgS19NQ190UkN3X0RFRkFVTFQgICAgICAgICAxMAorI2RlZmluZSBWX01DX3RSQ3dfREVGQVVMVCAgICAgICAgIFZfTUNfdFJDdyhLX01DX3RSQ3dfREVGQVVMVCkKKworI2RlZmluZSBTX01DX3RSUkQgICAgICAgICAgICAgICAgIDIwCisjZGVmaW5lIE1fTUNfdFJSRCAgICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLKDQsU19NQ190UlJEKQorI2RlZmluZSBWX01DX3RSUkQoeCkgICAgICAgICAgICAgIF9TQl9NQUtFVkFMVUUoeCxTX01DX3RSUkQpCisjZGVmaW5lIEdfTUNfdFJSRCh4KSAgICAgICAgICAgICAgX1NCX0dFVFZBTFVFKHgsU19NQ190UlJELE1fTUNfdFJSRCkKKyNkZWZpbmUgS19NQ190UlJEX0RFRkFVTFQgICAgICAgICAyCisjZGVmaW5lIFZfTUNfdFJSRF9ERUZBVUxUICAgICAgICAgVl9NQ190UlJEKEtfTUNfdFJSRF9ERUZBVUxUKQorCisjZGVmaW5lIFNfTUNfdFJQICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgTV9NQ190UlAgICAgICAgICAgICAgICAgICBfU0JfTUFLRU1BU0soNCxTX01DX3RSUCkKKyNkZWZpbmUgVl9NQ190UlAoeCkgICAgICAgICAgICAgICBfU0JfTUFLRVZBTFVFKHgsU19NQ190UlApCisjZGVmaW5lIEdfTUNfdFJQKHgpICAgICAgICAgICAgICAgX1NCX0dFVFZBTFVFKHgsU19NQ190UlAsTV9NQ190UlApCisjZGVmaW5lIEtfTUNfdFJQX0RFRkFVTFQgICAgICAgICAgNAorI2RlZmluZSBWX01DX3RSUF9ERUZBVUxUICAgICAgICAgIFZfTUNfdFJQKEtfTUNfdFJQX0RFRkFVTFQpCisKKyNkZWZpbmUgU19NQ190Q3dEICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIE1fTUNfdEN3RCAgICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLKDQsU19NQ190Q3dEKQorI2RlZmluZSBWX01DX3RDd0QoeCkgICAgICAgICAgICAgIF9TQl9NQUtFVkFMVUUoeCxTX01DX3RDd0QpCisjZGVmaW5lIEdfTUNfdEN3RCh4KSAgICAgICAgICAgICAgX1NCX0dFVFZBTFVFKHgsU19NQ190Q3dELE1fTUNfdEN3RCkKKyNkZWZpbmUgS19NQ190Q3dEX0RFRkFVTFQgICAgICAgICAxCisjZGVmaW5lIFZfTUNfdEN3RF9ERUZBVUxUICAgICAgICAgVl9NQ190Q3dEKEtfTUNfdEN3RF9ERUZBVUxUKQorCisjZGVmaW5lIE1fdENyRGggICAgICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLMSg3KQorI2RlZmluZSBNX01DX3RDckRoCQkgIE1fdENyRGgKKworI2RlZmluZSBTX01DX3RDckQgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgTV9NQ190Q3JEICAgICAgICAgICAgICAgICBfU0JfTUFLRU1BU0soMyxTX01DX3RDckQpCisjZGVmaW5lIFZfTUNfdENyRCh4KSAgICAgICAgICAgICAgX1NCX01BS0VWQUxVRSh4LFNfTUNfdENyRCkKKyNkZWZpbmUgR19NQ190Q3JEKHgpICAgICAgICAgICAgICBfU0JfR0VUVkFMVUUoeCxTX01DX3RDckQsTV9NQ190Q3JEKQorI2RlZmluZSBLX01DX3RDckRfREVGQVVMVCAgICAgICAgIDIKKyNkZWZpbmUgVl9NQ190Q3JEX0RFRkFVTFQgICAgICAgICBWX01DX3RDckQoS19NQ190Q3JEX0RFRkFVTFQpCisKKyNkZWZpbmUgU19NQ190UkNEICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIE1fTUNfdFJDRCAgICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLKDQsU19NQ190UkNEKQorI2RlZmluZSBWX01DX3RSQ0QoeCkgICAgICAgICAgICAgIF9TQl9NQUtFVkFMVUUoeCxTX01DX3RSQ0QpCisjZGVmaW5lIEdfTUNfdFJDRCh4KSAgICAgICAgICAgICAgX1NCX0dFVFZBTFVFKHgsU19NQ190UkNELE1fTUNfdFJDRCkKKyNkZWZpbmUgS19NQ190UkNEX0RFRkFVTFQgICAgICAgICAzCisjZGVmaW5lIFZfTUNfdFJDRF9ERUZBVUxUICAgICAgICAgVl9NQ190UkNEKEtfTUNfdFJDRF9ERUZBVUxUKQorCisjZGVmaW5lIFZfTUNfVElNSU5HX0RFRkFVTFQgICAgIFZfTUNfdEZJRk8oS19NQ190RklGT19ERUZBVUxUKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVl9NQ190UkZDKEtfTUNfdFJGQ19ERUZBVUxUKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVl9NQ190Q3dDcihLX01DX3RDd0NyX0RFRkFVTFQpIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWX01DX3RSQ3IoS19NQ190UkNyX0RFRkFVTFQpIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWX01DX3RSQ3coS19NQ190UkN3X0RFRkFVTFQpIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWX01DX3RSUkQoS19NQ190UlJEX0RFRkFVTFQpIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWX01DX3RSUChLX01DX3RSUF9ERUZBVUxUKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVl9NQ190Q3dEKEtfTUNfdEN3RF9ERUZBVUxUKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVl9NQ190Q3JEKEtfTUNfdENyRF9ERUZBVUxUKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVl9NQ190UkNEKEtfTUNfdFJDRF9ERUZBVUxUKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTV9NQ19yMnJJRExFX1RXT0NZQ0xFUworCisvKgorICogRXJyYXRhIHNheXMgdGhlc2UgYXJlIG5vdCB0aGUgZGVmYXVsdAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTV9NQ193MnJJRExFX1RXT0NZQ0xFUyB8IFwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1fTUNfcjJ3SURMRV9UV09DWUNMRVMgfCBcCisgKi8KKworCisvKgorICogQ2hpcCBTZWxlY3QgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAoVGFibGUgNi0xNykKKyAqLworCisjZGVmaW5lIFNfTUNfQ1MwX1NUQVJUICAgICAgICAgICAgICAwCisjZGVmaW5lIE1fTUNfQ1MwX1NUQVJUICAgICAgICAgICAgICBfU0JfTUFLRU1BU0soMTYsU19NQ19DUzBfU1RBUlQpCisjZGVmaW5lIFZfTUNfQ1MwX1NUQVJUKHgpICAgICAgICAgICBfU0JfTUFLRVZBTFVFKHgsU19NQ19DUzBfU1RBUlQpCisjZGVmaW5lIEdfTUNfQ1MwX1NUQVJUKHgpICAgICAgICAgICBfU0JfR0VUVkFMVUUoeCxTX01DX0NTMF9TVEFSVCxNX01DX0NTMF9TVEFSVCkKKworI2RlZmluZSBTX01DX0NTMV9TVEFSVCAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgTV9NQ19DUzFfU1RBUlQgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSygxNixTX01DX0NTMV9TVEFSVCkKKyNkZWZpbmUgVl9NQ19DUzFfU1RBUlQoeCkgICAgICAgICAgIF9TQl9NQUtFVkFMVUUoeCxTX01DX0NTMV9TVEFSVCkKKyNkZWZpbmUgR19NQ19DUzFfU1RBUlQoeCkgICAgICAgICAgIF9TQl9HRVRWQUxVRSh4LFNfTUNfQ1MxX1NUQVJULE1fTUNfQ1MxX1NUQVJUKQorCisjZGVmaW5lIFNfTUNfQ1MyX1NUQVJUICAgICAgICAgICAgICAzMgorI2RlZmluZSBNX01DX0NTMl9TVEFSVCAgICAgICAgICAgICAgX1NCX01BS0VNQVNLKDE2LFNfTUNfQ1MyX1NUQVJUKQorI2RlZmluZSBWX01DX0NTMl9TVEFSVCh4KSAgICAgICAgICAgX1NCX01BS0VWQUxVRSh4LFNfTUNfQ1MyX1NUQVJUKQorI2RlZmluZSBHX01DX0NTMl9TVEFSVCh4KSAgICAgICAgICAgX1NCX0dFVFZBTFVFKHgsU19NQ19DUzJfU1RBUlQsTV9NQ19DUzJfU1RBUlQpCisKKyNkZWZpbmUgU19NQ19DUzNfU1RBUlQgICAgICAgICAgICAgIDQ4CisjZGVmaW5lIE1fTUNfQ1MzX1NUQVJUICAgICAgICAgICAgICBfU0JfTUFLRU1BU0soMTYsU19NQ19DUzNfU1RBUlQpCisjZGVmaW5lIFZfTUNfQ1MzX1NUQVJUKHgpICAgICAgICAgICBfU0JfTUFLRVZBTFVFKHgsU19NQ19DUzNfU1RBUlQpCisjZGVmaW5lIEdfTUNfQ1MzX1NUQVJUKHgpICAgICAgICAgICBfU0JfR0VUVkFMVUUoeCxTX01DX0NTM19TVEFSVCxNX01DX0NTM19TVEFSVCkKKworLyoKKyAqIENoaXAgU2VsZWN0IEVuZCBBZGRyZXNzIFJlZ2lzdGVyIChUYWJsZSA2LTE4KQorICovCisKKyNkZWZpbmUgU19NQ19DUzBfRU5EICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgTV9NQ19DUzBfRU5EICAgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSygxNixTX01DX0NTMF9FTkQpCisjZGVmaW5lIFZfTUNfQ1MwX0VORCh4KSAgICAgICAgICAgICBfU0JfTUFLRVZBTFVFKHgsU19NQ19DUzBfRU5EKQorI2RlZmluZSBHX01DX0NTMF9FTkQoeCkgICAgICAgICAgICAgX1NCX0dFVFZBTFVFKHgsU19NQ19DUzBfRU5ELE1fTUNfQ1MwX0VORCkKKworI2RlZmluZSBTX01DX0NTMV9FTkQgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgTV9NQ19DUzFfRU5EICAgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSygxNixTX01DX0NTMV9FTkQpCisjZGVmaW5lIFZfTUNfQ1MxX0VORCh4KSAgICAgICAgICAgICBfU0JfTUFLRVZBTFVFKHgsU19NQ19DUzFfRU5EKQorI2RlZmluZSBHX01DX0NTMV9FTkQoeCkgICAgICAgICAgICAgX1NCX0dFVFZBTFVFKHgsU19NQ19DUzFfRU5ELE1fTUNfQ1MxX0VORCkKKworI2RlZmluZSBTX01DX0NTMl9FTkQgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgTV9NQ19DUzJfRU5EICAgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSygxNixTX01DX0NTMl9FTkQpCisjZGVmaW5lIFZfTUNfQ1MyX0VORCh4KSAgICAgICAgICAgICBfU0JfTUFLRVZBTFVFKHgsU19NQ19DUzJfRU5EKQorI2RlZmluZSBHX01DX0NTMl9FTkQoeCkgICAgICAgICAgICAgX1NCX0dFVFZBTFVFKHgsU19NQ19DUzJfRU5ELE1fTUNfQ1MyX0VORCkKKworI2RlZmluZSBTX01DX0NTM19FTkQgICAgICAgICAgICAgICAgNDgKKyNkZWZpbmUgTV9NQ19DUzNfRU5EICAgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSygxNixTX01DX0NTM19FTkQpCisjZGVmaW5lIFZfTUNfQ1MzX0VORCh4KSAgICAgICAgICAgICBfU0JfTUFLRVZBTFVFKHgsU19NQ19DUzNfRU5EKQorI2RlZmluZSBHX01DX0NTM19FTkQoeCkgICAgICAgICAgICAgX1NCX0dFVFZBTFVFKHgsU19NQ19DUzNfRU5ELE1fTUNfQ1MzX0VORCkKKworLyoKKyAqIENoaXAgU2VsZWN0IEludGVybGVhdmUgUmVnaXN0ZXIgKFRhYmxlIDYtMTkpCisgKi8KKworI2RlZmluZSBTX01DX0lOVExWX1JFU0VSVkVEICAgICAgICAgMAorI2RlZmluZSBNX01DX0lOVExWX1JFU0VSVkVEICAgICAgICAgX1NCX01BS0VNQVNLKDUsU19NQ19JTlRMVl9SRVNFUlZFRCkKKworI2RlZmluZSBTX01DX0lOVEVSTEVBVkUgICAgICAgICAgICAgNworI2RlZmluZSBNX01DX0lOVEVSTEVBVkUgICAgICAgICAgICAgX1NCX01BS0VNQVNLKDE4LFNfTUNfSU5URVJMRUFWRSkKKyNkZWZpbmUgVl9NQ19JTlRFUkxFQVZFKHgpICAgICAgICAgIF9TQl9NQUtFVkFMVUUoeCxTX01DX0lOVEVSTEVBVkUpCisKKyNkZWZpbmUgU19NQ19JTlRMVl9NQlogICAgICAgICAgICAgIDI1CisjZGVmaW5lIE1fTUNfSU5UTFZfTUJaICAgICAgICAgICAgICBfU0JfTUFLRU1BU0soMzksU19NQ19JTlRMVl9NQlopCisKKy8qCisgKiBSb3cgQWRkcmVzcyBCaXRzIFJlZ2lzdGVyIChUYWJsZSA2LTIwKQorICovCisKKyNkZWZpbmUgU19NQ19SQVNfUkVTRVJWRUQgICAgICAgICAgIDAKKyNkZWZpbmUgTV9NQ19SQVNfUkVTRVJWRUQgICAgICAgICAgIF9TQl9NQUtFTUFTSyg1LFNfTUNfUkFTX1JFU0VSVkVEKQorCisjZGVmaW5lIFNfTUNfUkFTX1NFTEVDVCAgICAgICAgICAgICAxMgorI2RlZmluZSBNX01DX1JBU19TRUxFQ1QgICAgICAgICAgICAgX1NCX01BS0VNQVNLKDI1LFNfTUNfUkFTX1NFTEVDVCkKKyNkZWZpbmUgVl9NQ19SQVNfU0VMRUNUKHgpICAgICAgICAgIF9TQl9NQUtFVkFMVUUoeCxTX01DX1JBU19TRUxFQ1QpCisKKyNkZWZpbmUgU19NQ19SQVNfTUJaICAgICAgICAgICAgICAgIDM3CisjZGVmaW5lIE1fTUNfUkFTX01CWiAgICAgICAgICAgICAgICBfU0JfTUFLRU1BU0soMjcsU19NQ19SQVNfTUJaKQorCisKKy8qCisgKiBDb2x1bW4gQWRkcmVzcyBCaXRzIFJlZ2lzdGVyIChUYWJsZSA2LTIxKQorICovCisKKyNkZWZpbmUgU19NQ19DQVNfUkVTRVJWRUQgICAgICAgICAgIDAKKyNkZWZpbmUgTV9NQ19DQVNfUkVTRVJWRUQgICAgICAgICAgIF9TQl9NQUtFTUFTSyg1LFNfTUNfQ0FTX1JFU0VSVkVEKQorCisjZGVmaW5lIFNfTUNfQ0FTX1NFTEVDVCAgICAgICAgICAgICA1CisjZGVmaW5lIE1fTUNfQ0FTX1NFTEVDVCAgICAgICAgICAgICBfU0JfTUFLRU1BU0soMTgsU19NQ19DQVNfU0VMRUNUKQorI2RlZmluZSBWX01DX0NBU19TRUxFQ1QoeCkgICAgICAgICAgX1NCX01BS0VWQUxVRSh4LFNfTUNfQ0FTX1NFTEVDVCkKKworI2RlZmluZSBTX01DX0NBU19NQlogICAgICAgICAgICAgICAgMjMKKyNkZWZpbmUgTV9NQ19DQVNfTUJaICAgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSyg0MSxTX01DX0NBU19NQlopCisKKworLyoKKyAqIEJhbmsgQWRkcmVzcyBBZGRyZXNzIEJpdHMgUmVnaXN0ZXIgKFRhYmxlIDYtMjIpCisgKi8KKworI2RlZmluZSBTX01DX0JBX1JFU0VSVkVEICAgICAgICAgICAgMAorI2RlZmluZSBNX01DX0JBX1JFU0VSVkVEICAgICAgICAgICAgX1NCX01BS0VNQVNLKDUsU19NQ19CQV9SRVNFUlZFRCkKKworI2RlZmluZSBTX01DX0JBX1NFTEVDVCAgICAgICAgICAgICAgNQorI2RlZmluZSBNX01DX0JBX1NFTEVDVCAgICAgICAgICAgICAgX1NCX01BS0VNQVNLKDIwLFNfTUNfQkFfU0VMRUNUKQorI2RlZmluZSBWX01DX0JBX1NFTEVDVCh4KSAgICAgICAgICAgX1NCX01BS0VWQUxVRSh4LFNfTUNfQkFfU0VMRUNUKQorCisjZGVmaW5lIFNfTUNfQkFfTUJaICAgICAgICAgICAgICAgICAyNQorI2RlZmluZSBNX01DX0JBX01CWiAgICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLKDM5LFNfTUNfQkFfTUJaKQorCisvKgorICogQ2hpcCBTZWxlY3QgQXR0cmlidXRlIFJlZ2lzdGVyIChUYWJsZSA2LTIzKQorICovCisKKyNkZWZpbmUgS19NQ19DU19BVFRSX0NMT1NFRCAgICAgICAgIDAKKyNkZWZpbmUgS19NQ19DU19BVFRSX0NBU0NIRUNLICAgICAgIDEKKyNkZWZpbmUgS19NQ19DU19BVFRSX0hJTlQgICAgICAgICAgIDIKKyNkZWZpbmUgS19NQ19DU19BVFRSX09QRU4gICAgICAgICAgIDMKKworI2RlZmluZSBTX01DX0NTMF9QQUdFICAgICAgICAgICAgICAgMAorI2RlZmluZSBNX01DX0NTMF9QQUdFICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLKDIsU19NQ19DUzBfUEFHRSkKKyNkZWZpbmUgVl9NQ19DUzBfUEFHRSh4KSAgICAgICAgICAgIF9TQl9NQUtFVkFMVUUoeCxTX01DX0NTMF9QQUdFKQorI2RlZmluZSBHX01DX0NTMF9QQUdFKHgpICAgICAgICAgICAgX1NCX0dFVFZBTFVFKHgsU19NQ19DUzBfUEFHRSxNX01DX0NTMF9QQUdFKQorCisjZGVmaW5lIFNfTUNfQ1MxX1BBR0UgICAgICAgICAgICAgICAxNgorI2RlZmluZSBNX01DX0NTMV9QQUdFICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLKDIsU19NQ19DUzFfUEFHRSkKKyNkZWZpbmUgVl9NQ19DUzFfUEFHRSh4KSAgICAgICAgICAgIF9TQl9NQUtFVkFMVUUoeCxTX01DX0NTMV9QQUdFKQorI2RlZmluZSBHX01DX0NTMV9QQUdFKHgpICAgICAgICAgICAgX1NCX0dFVFZBTFVFKHgsU19NQ19DUzFfUEFHRSxNX01DX0NTMV9QQUdFKQorCisjZGVmaW5lIFNfTUNfQ1MyX1BBR0UgICAgICAgICAgICAgICAzMgorI2RlZmluZSBNX01DX0NTMl9QQUdFICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLKDIsU19NQ19DUzJfUEFHRSkKKyNkZWZpbmUgVl9NQ19DUzJfUEFHRSh4KSAgICAgICAgICAgIF9TQl9NQUtFVkFMVUUoeCxTX01DX0NTMl9QQUdFKQorI2RlZmluZSBHX01DX0NTMl9QQUdFKHgpICAgICAgICAgICAgX1NCX0dFVFZBTFVFKHgsU19NQ19DUzJfUEFHRSxNX01DX0NTMl9QQUdFKQorCisjZGVmaW5lIFNfTUNfQ1MzX1BBR0UgICAgICAgICAgICAgICA0OAorI2RlZmluZSBNX01DX0NTM19QQUdFICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLKDIsU19NQ19DUzNfUEFHRSkKKyNkZWZpbmUgVl9NQ19DUzNfUEFHRSh4KSAgICAgICAgICAgIF9TQl9NQUtFVkFMVUUoeCxTX01DX0NTM19QQUdFKQorI2RlZmluZSBHX01DX0NTM19QQUdFKHgpICAgICAgICAgICAgX1NCX0dFVFZBTFVFKHgsU19NQ19DUzNfUEFHRSxNX01DX0NTM19QQUdFKQorCisvKgorICogRUNDIFRlc3QgRUNDIFJlZ2lzdGVyIChUYWJsZSA2LTI1KQorICovCisKKyNkZWZpbmUgU19NQ19FQ0NfSU5WRVJUICAgICAgICAgICAgIDAKKyNkZWZpbmUgTV9NQ19FQ0NfSU5WRVJUICAgICAgICAgICAgIF9TQl9NQUtFTUFTSyg4LFNfTUNfRUNDX0lOVkVSVCkKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc2lieXRlL3NiMTI1MF9yZWdzLmggYi9pbmNsdWRlL2FzbS1taXBzL3NpYnl0ZS9zYjEyNTBfcmVncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkNDk2YzYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NpYnl0ZS9zYjEyNTBfcmVncy5oCkBAIC0wLDAgKzEsODM2IEBACisvKiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgKiAgU0IxMjUwIEJvYXJkIFN1cHBvcnQgUGFja2FnZQorICAgICogIAorICAgICogIFJlZ2lzdGVyIERlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgRmlsZTogc2IxMjUwX3JlZ3MuaAorICAgICogIAorICAgICogIFRoaXMgbW9kdWxlIGNvbnRhaW5zIHRoZSBhZGRyZXNzZXMgb2YgdGhlIG9uLWNoaXAgcGVyaXBoZXJhbHMKKyAgICAqICBvbiB0aGUgU0IxMjUwLgorICAgICogIAorICAgICogIFNCMTI1MCBzcGVjaWZpY2F0aW9uIGxldmVsOiAgMDEvMDIvMjAwMgorICAgICogIAorICAgICogIEF1dGhvcjogIE1pdGNoIExpY2h0ZW5iZXJnCisgICAgKiAgCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICAKKyAgICAqCisgICAgKiAgQ29weXJpZ2h0IDIwMDAsMjAwMSwyMDAyLDIwMDMKKyAgICAqICBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgICAqICAKKyAgICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIAorICAgICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIAorICAgICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIAorICAgICogIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICAgICoKKyAgICAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgICoKKyAgICAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgCisgICAgKiAgTUEgMDIxMTEtMTMwNyBVU0EKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworCisjaWZuZGVmIF9TQjEyNTBfUkVHU19ICisjZGVmaW5lIF9TQjEyNTBfUkVHU19ICisKKyNpbmNsdWRlICJzYjEyNTBfZGVmcy5oIgorCisKKy8qICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAqICBTb21lIGdlbmVyYWwgbm90ZXM6CisgICAgKiAgCisgICAgKiAgRm9yIHRoZSBtb3N0IHBhcnQsIHdoZW4gdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBwZXJpcGhlcmFsCisgICAgKiAgb2YgdGhlIHNhbWUgdHlwZSBvbiB0aGUgU09DLCB0aGUgY29uc3RhbnRzIGJlbG93IHdpbGwgYmUKKyAgICAqICBvZmZzZXRzIGZyb20gdGhlIGJhc2Ugb2YgZWFjaCBwZXJpcGhlcmFsLiAgRm9yIGV4YW1wbGUsCisgICAgKiAgdGhlIE1BQyByZWdpc3RlcnMgYXJlIGRlc2NyaWJlZCBhcyBvZmZzZXRzIGZyb20gdGhlIGZpcnN0CisgICAgKiAgTUFDIHJlZ2lzdGVyLCBhbmQgdGhlcmUgd2lsbCBiZSBhIE1BQ19SRUdJU1RFUigpIG1hY3JvCisgICAgKiAgdG8gY2FsY3VsYXRlIHRoZSBiYXNlIGFkZHJlc3Mgb2YgYSBnaXZlbiBNQUMuICAKKyAgICAqICAKKyAgICAqICBUaGUgaW5mb3JtYXRpb24gaW4gdGhpcyBmaWxlIGlzIGJhc2VkIG9uIHRoZSBTQjEyNTAgU09DCisgICAgKiAgbWFudWFsIHZlcnNpb24gMC4yLCBKdWx5IDIwMDAuCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKworLyogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAgICAqIE1lbW9yeSBDb250cm9sbGVyIFJlZ2lzdGVycworICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisvKgorICogWFhYOiBjYW4ndCByZW1vdmUgTUMgYmFzZSAwIGlmIDExMngsIHNpbmNlIGl0J3MgdXNlZCBieSBvdGhlciBtYWNyb3MsCisgKiBzaW5jZSB0aGVyZSBpcyBvbmUgcmVnIHRoZXJlIChidXQgaXQgY291bGQgZ2V0IGl0cyBhZGRyL29mZnNldCBjb25zdGFudCkuCisgKi8KKyNkZWZpbmUgQV9NQ19CQVNFXzAgICAgICAgICAgICAgICAgIDB4MDAxMDA1MTAwMAorI2RlZmluZSBBX01DX0JBU0VfMSAgICAgICAgICAgICAgICAgMHgwMDEwMDUyMDAwCisjZGVmaW5lIE1DX1JFR0lTVEVSX1NQQUNJTkcgICAgICAgICAweDEwMDAKKworI2RlZmluZSBBX01DX0JBU0UoY3RsaWQpICAgICAgICAgICAgKChjdGxpZCkqTUNfUkVHSVNURVJfU1BBQ0lORytBX01DX0JBU0VfMCkKKyNkZWZpbmUgQV9NQ19SRUdJU1RFUihjdGxpZCxyZWcpICAgIChBX01DX0JBU0UoY3RsaWQpKyhyZWcpKQorCisjZGVmaW5lIFJfTUNfQ09ORklHICAgICAgICAgICAgICAgICAweDAwMDAwMDAxMDAKKyNkZWZpbmUgUl9NQ19EUkFNQ01EICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEyMAorI2RlZmluZSBSX01DX0RSQU1NT0RFICAgICAgICAgICAgICAgMHgwMDAwMDAwMTQwCisjZGVmaW5lIFJfTUNfVElNSU5HMSAgICAgICAgICAgICAgICAweDAwMDAwMDAxNjAKKyNkZWZpbmUgUl9NQ19USU1JTkcyICAgICAgICAgICAgICAgIDB4MDAwMDAwMDE4MAorI2RlZmluZSBSX01DX0NTX1NUQVJUICAgICAgICAgICAgICAgMHgwMDAwMDAwMUEwCisjZGVmaW5lIFJfTUNfQ1NfRU5EICAgICAgICAgICAgICAgICAweDAwMDAwMDAxQzAKKyNkZWZpbmUgUl9NQ19DU19JTlRFUkxFQVZFICAgICAgICAgIDB4MDAwMDAwMDFFMAorI2RlZmluZSBTX01DX0NTX1NUQVJURU5EICAgICAgICAgICAgMTYKKworI2RlZmluZSBSX01DX0NTWF9CQVNFICAgICAgICAgICAgICAgMHgwMDAwMDAwMjAwCisjZGVmaW5lIFJfTUNfQ1NYX1JPVyAgICAgICAgICAgICAgICAweDAwMDAwMDAwMDAJLyogcmVsYXRpdmUgdG8gQ1NYX0JBU0UsIGFib3ZlICovCisjZGVmaW5lIFJfTUNfQ1NYX0NPTCAgICAgICAgICAgICAgICAweDAwMDAwMDAwMjAJLyogcmVsYXRpdmUgdG8gQ1NYX0JBU0UsIGFib3ZlICovCisjZGVmaW5lIFJfTUNfQ1NYX0JBICAgICAgICAgICAgICAgICAweDAwMDAwMDAwNDAJLyogcmVsYXRpdmUgdG8gQ1NYX0JBU0UsIGFib3ZlICovCisjZGVmaW5lIE1DX0NTWF9TUEFDSU5HICAgICAgICAgICAgICAweDAwMDAwMDAwNjAJLyogcmVsYXRpdmUgdG8gQ1NYX0JBU0UsIGFib3ZlICovCisKKyNkZWZpbmUgUl9NQ19DUzBfUk9XICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIwMAorI2RlZmluZSBSX01DX0NTMF9DT0wgICAgICAgICAgICAgICAgMHgwMDAwMDAwMjIwCisjZGVmaW5lIFJfTUNfQ1MwX0JBICAgICAgICAgICAgICAgICAweDAwMDAwMDAyNDAKKyNkZWZpbmUgUl9NQ19DUzFfUk9XICAgICAgICAgICAgICAgIDB4MDAwMDAwMDI2MAorI2RlZmluZSBSX01DX0NTMV9DT0wgICAgICAgICAgICAgICAgMHgwMDAwMDAwMjgwCisjZGVmaW5lIFJfTUNfQ1MxX0JBICAgICAgICAgICAgICAgICAweDAwMDAwMDAyQTAKKyNkZWZpbmUgUl9NQ19DUzJfUk9XICAgICAgICAgICAgICAgIDB4MDAwMDAwMDJDMAorI2RlZmluZSBSX01DX0NTMl9DT0wgICAgICAgICAgICAgICAgMHgwMDAwMDAwMkUwCisjZGVmaW5lIFJfTUNfQ1MyX0JBICAgICAgICAgICAgICAgICAweDAwMDAwMDAzMDAKKyNkZWZpbmUgUl9NQ19DUzNfUk9XICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMyMAorI2RlZmluZSBSX01DX0NTM19DT0wgICAgICAgICAgICAgICAgMHgwMDAwMDAwMzQwCisjZGVmaW5lIFJfTUNfQ1MzX0JBICAgICAgICAgICAgICAgICAweDAwMDAwMDAzNjAKKyNkZWZpbmUgUl9NQ19DU19BVFRSICAgICAgICAgICAgICAgIDB4MDAwMDAwMDM4MAorI2RlZmluZSBSX01DX1RFU1RfREFUQSAgICAgICAgICAgICAgMHgwMDAwMDAwNDAwCisjZGVmaW5lIFJfTUNfVEVTVF9FQ0MgICAgICAgICAgICAgICAweDAwMDAwMDA0MjAKKyNkZWZpbmUgUl9NQ19NQ0xLX0NGRyAgICAgICAgICAgICAgIDB4MDAwMDAwMDUwMAorCisvKiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICAgICogTDIgQ2FjaGUgQ29udHJvbCBSZWdpc3RlcnMKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworI2RlZmluZSBBX0wyX1JFQURfVEFHICAgICAgICAgICAgICAgMHgwMDEwMDQwMDE4CisjZGVmaW5lIEFfTDJfRUNDX1RBRyAgICAgICAgICAgICAgICAweDAwMTAwNDAwMzgKKyNpZiBTSUJZVEVfSERSX0ZFQVRVUkUoMTI1MCwgUEFTUzMpIHx8IFNJQllURV9IRFJfRkVBVFVSRSgxMTJ4LCBQQVNTMSkKKyNkZWZpbmUgQV9MMl9SRUFEX01JU0MgICAgICAgICAgICAgIDB4MDAxMDA0MDA1OAorI2VuZGlmIC8qIDEyNTAgUEFTUzMgfHwgMTEyeCBQQVNTMSAqLworI2RlZmluZSBBX0wyX1dBWV9ESVNBQkxFICAgICAgICAgICAgMHgwMDEwMDQxMDAwCisjZGVmaW5lIEFfTDJfTUFLRURJU0FCTEUoeCkgICAgICAgICAoQV9MMl9XQVlfRElTQUJMRSB8ICgoKH4oeCkpJjB4MEYpIDw8IDgpKQorI2RlZmluZSBBX0wyX01HTVRfVEFHX0JBU0UgICAgICAgICAgMHgwMEQwMDAwMDAwCisKKyNpZiBTSUJZVEVfSERSX0ZFQVRVUkUoMTI1MCwgUEFTUzIpIHx8IFNJQllURV9IRFJfRkVBVFVSRSgxMTJ4LCBQQVNTMSkKKyNkZWZpbmUgQV9MMl9DQUNIRV9ESVNBQkxFCSAgIDB4MDAxMDA0MjAwMAorI2RlZmluZSBBX0wyX01BS0VDQUNIRURJU0FCTEUoeCkgICAoQV9MMl9DQUNIRV9ESVNBQkxFIHwgKCgoeCkmMHgwRikgPDwgOCkpCisjZGVmaW5lIEFfTDJfTUlTQ19DT05GSUcJICAgMHgwMDEwMDQzMDAwCisjZW5kaWYgLyogMTI1MCBQQVNTMiB8fCAxMTJ4IFBBU1MxICovCisKKy8qIEJhY2t3YXJkLWNvbXBhdGliaWxpdHkgZGVmaW5pdGlvbnMuICAqLworLyogWFhYOiBkaXNjb3VyYWdlIHBlb3BsZSBmcm9tIHVzaW5nIHRoZXNlIGNvbnN0YW50cy4gICovCisjZGVmaW5lIEFfTDJfUkVBRF9BRERSRVNTICAgICAgICAgICBBX0wyX1JFQURfVEFHCisjZGVmaW5lIEFfTDJfRUVDX0FERFJFU1MgICAgICAgICAgICBBX0wyX0VDQ19UQUcKKworCisvKiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICAgICogUENJIEludGVyZmFjZSBSZWdpc3RlcnMKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworI2RlZmluZSBBX1BDSV9UWVBFMDBfSEVBREVSICAgICAgICAgMHgwMERFMDAwMDAwCisjZGVmaW5lIEFfUENJX1RZUEUwMV9IRUFERVIgICAgICAgICAweDAwREUwMDA4MDAKKworCisvKiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICAgICogRXRoZXJuZXQgRE1BIGFuZCBNQUNzCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKyNkZWZpbmUgQV9NQUNfQkFTRV8wICAgICAgICAgICAgICAgIDB4MDAxMDA2NDAwMAorI2RlZmluZSBBX01BQ19CQVNFXzEgICAgICAgICAgICAgICAgMHgwMDEwMDY1MDAwCisjaWYgU0lCWVRFX0hEUl9GRUFUVVJFX0NISVAoMTI1MCkKKyNkZWZpbmUgQV9NQUNfQkFTRV8yICAgICAgICAgICAgICAgIDB4MDAxMDA2NjAwMAorI2VuZGlmIC8qIDEyNTAgKi8KKworI2RlZmluZSBNQUNfU1BBQ0lORyAgICAgICAgICAgICAgICAgMHgxMDAwCisjZGVmaW5lIE1BQ19ETUFfVFhSWF9TUEFDSU5HICAgICAgICAweDA0MDAKKyNkZWZpbmUgTUFDX0RNQV9DSEFOTkVMX1NQQUNJTkcgICAgIDB4MDEwMAorI2RlZmluZSBETUFfUlggICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBETUFfVFggICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBNQUNfTlVNX0RNQUNIQU4JCSAgICAyCQkgICAgLyogY2hhbm5lbHMgcGVyIGRpcmVjdGlvbiAqLworCisvKiBYWFg6IG5vdCBjb3JyZWN0OyBkZXBlbmRzIG9uIFNPQyB0eXBlLiAgKi8KKyNkZWZpbmUgTUFDX05VTV9QT1JUUyAgICAgICAgICAgICAgIDMKKworI2RlZmluZSBBX01BQ19DSEFOTkVMX0JBU0UobWFjbnVtKSAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIChBX01BQ19CQVNFXzAgKyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgTUFDX1NQQUNJTkcqKG1hY251bSkpCisKKyNkZWZpbmUgQV9NQUNfUkVHSVNURVIobWFjbnVtLHJlZykgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAoQV9NQUNfQkFTRV8wICsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgIE1BQ19TUEFDSU5HKihtYWNudW0pICsgKHJlZykpCisKKworI2RlZmluZSBSX01BQ19ETUFfQ0hBTk5FTFMJCTB4ODAwIC8qIFJlbGF0aXZlIHRvIEFfTUFDX0NIQU5ORUxfQkFTRSAqLworCisjZGVmaW5lIEFfTUFDX0RNQV9DSEFOTkVMX0JBU0UobWFjbnVtLHR4cngsY2hhbikgICAgXAorICAgICAgICAgICAgICgoQV9NQUNfQ0hBTk5FTF9CQVNFKG1hY251bSkpICsgICAgICAgIFwKKyAgICAgICAgICAgICBSX01BQ19ETUFfQ0hBTk5FTFMgKyAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgKE1BQ19ETUFfVFhSWF9TUEFDSU5HKih0eHJ4KSkgKyAgICAgICAgXAorICAgICAgICAgICAgIChNQUNfRE1BX0NIQU5ORUxfU1BBQ0lORyooY2hhbikpKQorCisjZGVmaW5lIFJfTUFDX0RNQV9DSEFOTkVMX0JBU0UodHhyeCxjaGFuKSAgICBcCisgICAgICAgICAgICAgKFJfTUFDX0RNQV9DSEFOTkVMUyArICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAoTUFDX0RNQV9UWFJYX1NQQUNJTkcqKHR4cngpKSArICAgICAgICBcCisgICAgICAgICAgICAgKE1BQ19ETUFfQ0hBTk5FTF9TUEFDSU5HKihjaGFuKSkpCisKKyNkZWZpbmUgQV9NQUNfRE1BX1JFR0lTVEVSKG1hY251bSx0eHJ4LGNoYW4scmVnKSAgICAgICAgICAgXAorICAgICAgICAgICAgKEFfTUFDX0RNQV9DSEFOTkVMX0JBU0UobWFjbnVtLHR4cngsY2hhbikgKyAgICBcCisgICAgICAgICAgICAocmVnKSkKKworI2RlZmluZSBSX01BQ19ETUFfUkVHSVNURVIodHhyeCxjaGFuLHJlZykgICAgICAgICAgIFwKKyAgICAgICAgICAgIChSX01BQ19ETUFfQ0hBTk5FTF9CQVNFKHR4cngsY2hhbikgKyAgICBcCisgICAgICAgICAgICAocmVnKSkKKworLyogCisgKiBETUEgY2hhbm5lbCByZWdpc3RlcnMsIHJlbGF0aXZlIHRvIEFfTUFDX0RNQV9DSEFOTkVMX0JBU0UKKyAqLworCisjZGVmaW5lIFJfTUFDX0RNQV9DT05GSUcwICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBSX01BQ19ETUFfQ09ORklHMSAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgUl9NQUNfRE1BX0RTQ1JfQkFTRSAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIFJfTUFDX0RNQV9EU0NSX0NOVCAgICAgICAgICAgICAgMHgwMDAwMDAxOAorI2RlZmluZSBSX01BQ19ETUFfQ1VSX0RTQ1JBICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgUl9NQUNfRE1BX0NVUl9EU0NSQiAgICAgICAgICAgICAweDAwMDAwMDI4CisjZGVmaW5lIFJfTUFDX0RNQV9DVVJfRFNDUkFERFIgICAgICAgICAgMHgwMDAwMDAzMAorI2lmIFNJQllURV9IRFJfRkVBVFVSRSgxMjUwLCBQQVNTMykgfHwgU0lCWVRFX0hEUl9GRUFUVVJFKDExMngsIFBBU1MxKQorI2RlZmluZSBSX01BQ19ETUFfT09EUEtUTE9TVF9SWCAgICAgICAgIDB4MDAwMDAwMzgJLyogcnggb25seSAqLworI2VuZGlmIC8qIDEyNTAgUEFTUzMgfHwgMTEyeCBQQVNTMSAqLworCisvKgorICogUk1PTiBDb3VudGVycworICovCisKKyNkZWZpbmUgUl9NQUNfUk1PTl9UWF9CWVRFUyAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIFJfTUFDX1JNT05fQ09MTElTSU9OUyAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBSX01BQ19STU9OX0xBVEVfQ09MICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgUl9NQUNfUk1PTl9FWF9DT0wgICAgICAgICAgICAgICAweDAwMDAwMDE4CisjZGVmaW5lIFJfTUFDX1JNT05fRkNTX0VSUk9SICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBSX01BQ19STU9OX1RYX0FCT1JUICAgICAgICAgICAgIDB4MDAwMDAwMjgKKy8qIENvdW50ZXIgIzYgKDB4MzApIG5vdyByZXNlcnZlZCAqLworI2RlZmluZSBSX01BQ19STU9OX1RYX0JBRCAgICAgICAgICAgICAgIDB4MDAwMDAwMzgKKyNkZWZpbmUgUl9NQUNfUk1PTl9UWF9HT09EICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIFJfTUFDX1JNT05fVFhfUlVOVCAgICAgICAgICAgICAgMHgwMDAwMDA0OAorI2RlZmluZSBSX01BQ19STU9OX1RYX09WRVJTSVpFICAgICAgICAgIDB4MDAwMDAwNTAKKyNkZWZpbmUgUl9NQUNfUk1PTl9SWF9CWVRFUyAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIFJfTUFDX1JNT05fUlhfTUNBU1QgICAgICAgICAgICAgMHgwMDAwMDA4OAorI2RlZmluZSBSX01BQ19STU9OX1JYX0JDQVNUICAgICAgICAgICAgIDB4MDAwMDAwOTAKKyNkZWZpbmUgUl9NQUNfUk1PTl9SWF9CQUQgICAgICAgICAgICAgICAweDAwMDAwMDk4CisjZGVmaW5lIFJfTUFDX1JNT05fUlhfR09PRCAgICAgICAgICAgICAgMHgwMDAwMDBBMAorI2RlZmluZSBSX01BQ19STU9OX1JYX1JVTlQgICAgICAgICAgICAgIDB4MDAwMDAwQTgKKyNkZWZpbmUgUl9NQUNfUk1PTl9SWF9PVkVSU0laRSAgICAgICAgICAweDAwMDAwMEIwCisjZGVmaW5lIFJfTUFDX1JNT05fUlhfRkNTX0VSUk9SICAgICAgICAgMHgwMDAwMDBCOAorI2RlZmluZSBSX01BQ19STU9OX1JYX0xFTkdUSF9FUlJPUiAgICAgIDB4MDAwMDAwQzAKKyNkZWZpbmUgUl9NQUNfUk1PTl9SWF9DT0RFX0VSUk9SICAgICAgICAweDAwMDAwMEM4CisjZGVmaW5lIFJfTUFDX1JNT05fUlhfQUxJR05fRVJST1IgICAgICAgMHgwMDAwMDBEMAorCisvKiBVcGRhdGVkIHRvIHNwZWMgMC4yICovCisjZGVmaW5lIFJfTUFDX0NGRyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBSX01BQ19USFJTSF9DRkcgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDgKKyNkZWZpbmUgUl9NQUNfVkxBTlRBRyAgICAgICAgICAgICAgICAgICAweDAwMDAwMTEwCisjZGVmaW5lIFJfTUFDX0ZSQU1FQ0ZHICAgICAgICAgICAgICAgICAgMHgwMDAwMDExOAorI2RlZmluZSBSX01BQ19FT1BDTlQgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMjAKKyNkZWZpbmUgUl9NQUNfRklGT19QVFJTICAgICAgICAgICAgICAgICAweDAwMDAwMTMwCisjZGVmaW5lIFJfTUFDX0FERklMVEVSX0NGRyAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBSX01BQ19FVEhFUk5FVF9BRERSICAgICAgICAgICAgIDB4MDAwMDAyMDgKKyNkZWZpbmUgUl9NQUNfUEtUX1RZUEUgICAgICAgICAgICAgICAgICAweDAwMDAwMjEwCisjaWYgU0lCWVRFX0hEUl9GRUFUVVJFKDEyNTAsIFBBU1MzKSB8fCBTSUJZVEVfSERSX0ZFQVRVUkUoMTEyeCwgUEFTUzEpCisjZGVmaW5lIFJfTUFDX0FETUFTSzAJCQkweDAwMDAwMjE4CisjZGVmaW5lIFJfTUFDX0FETUFTSzEJCQkweDAwMDAwMjIwCisjZW5kaWYgLyogMTI1MCBQQVNTMyB8fCAxMTJ4IFBBU1MxICovCisjZGVmaW5lIFJfTUFDX0hBU0hfQkFTRSAgICAgICAgICAgICAgICAgMHgwMDAwMDI0MAorI2RlZmluZSBSX01BQ19BRERSX0JBU0UgICAgICAgICAgICAgICAgIDB4MDAwMDAyODAKKyNkZWZpbmUgUl9NQUNfQ0hMTzBfQkFTRSAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIFJfTUFDX0NIVVAwX0JBU0UgICAgICAgICAgICAgICAgMHgwMDAwMDMyMAorI2RlZmluZSBSX01BQ19FTkFCTEUgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgUl9NQUNfU1RBVFVTICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDA4CisjZGVmaW5lIFJfTUFDX0lOVF9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDAwMDQxMAorI2RlZmluZSBSX01BQ19UWERfQ1RMICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MjAKKyNkZWZpbmUgUl9NQUNfTURJTyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDI4CisjaWYgU0lCWVRFX0hEUl9GRUFUVVJFKDEyNTAsIFBBU1MyKSB8fCBTSUJZVEVfSERSX0ZFQVRVUkUoMTEyeCwgUEFTUzEpCisjZGVmaW5lIFJfTUFDX1NUQVRVUzEJCSAgICAgICAgMHgwMDAwMDQzMAorI2VuZGlmIC8qIDEyNTAgUEFTUzIgfHwgMTEyeCBQQVNTMSAqLworI2RlZmluZSBSX01BQ19ERUJVR19TVEFUVVMgICAgICAgICAgICAgIDB4MDAwMDA0NDgKKworI2RlZmluZSBNQUNfSEFTSF9DT1VOVAkJCTgKKyNkZWZpbmUgTUFDX0FERFJfQ09VTlQJCQk4CisjZGVmaW5lIE1BQ19DSE1BUF9DT1VOVAkJCTQKKworCisvKiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICAgICogRFVBUlQgUmVnaXN0ZXJzCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKworI2RlZmluZSBSX0RVQVJUX05VTV9QT1JUUyAgICAgICAgICAgMgorCisjZGVmaW5lIEFfRFVBUlQgICAgICAgICAgICAgICAgICAgICAweDAwMTAwNjAwMDAKKworI2RlZmluZSBBX0RVQVJUX1JFRyhyKQorCisjZGVmaW5lIERVQVJUX0NIQU5SRUdfU1BBQ0lORyAgICAgICAweDEwMAorI2RlZmluZSBBX0RVQVJUX0NIQU5SRUcoY2hhbixyZWcpICAgKEFfRFVBUlQgKyBEVUFSVF9DSEFOUkVHX1NQQUNJTkcqKGNoYW4pICsgKHJlZykpCisjZGVmaW5lIFJfRFVBUlRfQ0hBTlJFRyhjaGFuLHJlZykgICAoRFVBUlRfQ0hBTlJFR19TUEFDSU5HKihjaGFuKSArIChyZWcpKQorCisjZGVmaW5lIFJfRFVBUlRfTU9ERV9SRUdfMQkgICAgMHgxMDAKKyNkZWZpbmUgUl9EVUFSVF9NT0RFX1JFR18yCSAgICAweDExMAorI2RlZmluZSBSX0RVQVJUX1NUQVRVUyAgICAgICAgICAgICAgMHgxMjAKKyNkZWZpbmUgUl9EVUFSVF9DTEtfU0VMICAgICAgICAgICAgIDB4MTMwCisjZGVmaW5lIFJfRFVBUlRfQ01EICAgICAgICAgICAgICAgICAweDE1MAorI2RlZmluZSBSX0RVQVJUX1JYX0hPTEQgICAgICAgICAgICAgMHgxNjAKKyNkZWZpbmUgUl9EVUFSVF9UWF9IT0xEICAgICAgICAgICAgIDB4MTcwCisKKyNpZiBTSUJZVEVfSERSX0ZFQVRVUkUoMTI1MCwgUEFTUzIpIHx8IFNJQllURV9IRFJfRkVBVFVSRSgxMTJ4LCBQQVNTMSkKKyNkZWZpbmUgUl9EVUFSVF9GVUxMX0NUTAkgICAgMHgxNDAKKyNkZWZpbmUgUl9EVUFSVF9PUENSX1gJCSAgICAweDE4MAorI2RlZmluZSBSX0RVQVJUX0FVWENUTF9YCSAgICAweDE5MAorI2VuZGlmIC8qIDEyNTAgUEFTUzIgfHwgMTEyeCBQQVNTMSAqLworCisKKy8qCisgKiBUaGUgSU1SIGFuZCBJU1IgY2FuJ3QgYmUgYWRkcmVzc2VkIHdpdGggQV9EVUFSVF9DSEFOUkVHLAorICogc28gdXNlIHRoaXMgbWFjcm8gaW5zdGVhZC4KKyAqLworCisjZGVmaW5lIFJfRFVBUlRfQVVYX0NUUkwgICAgICAgICAgICAweDMxMAorI2RlZmluZSBSX0RVQVJUX0lTUl9BICAgICAgICAgICAgICAgMHgzMjAKKyNkZWZpbmUgUl9EVUFSVF9JTVJfQSAgICAgICAgICAgICAgIDB4MzMwCisjZGVmaW5lIFJfRFVBUlRfSVNSX0IgICAgICAgICAgICAgICAweDM0MAorI2RlZmluZSBSX0RVQVJUX0lNUl9CICAgICAgICAgICAgICAgMHgzNTAKKyNkZWZpbmUgUl9EVUFSVF9PVVRfUE9SVCAgICAgICAgICAgIDB4MzYwCisjZGVmaW5lIFJfRFVBUlRfT1BDUiAgICAgICAgICAgICAgICAweDM3MAorCisjZGVmaW5lIFJfRFVBUlRfU0VUX09QUgkJICAgIDB4M0IwCisjZGVmaW5lIFJfRFVBUlRfQ0xFQVJfT1BSCSAgICAweDNDMAorCisjZGVmaW5lIERVQVJUX0lNUklTUl9TUEFDSU5HICAgICAgICAweDIwCisKKyNkZWZpbmUgUl9EVUFSVF9JTVJSRUcoY2hhbikJICAgIChSX0RVQVJUX0lNUl9BICsgKGNoYW4pKkRVQVJUX0lNUklTUl9TUEFDSU5HKQorI2RlZmluZSBSX0RVQVJUX0lTUlJFRyhjaGFuKQkgICAgKFJfRFVBUlRfSVNSX0EgKyAoY2hhbikqRFVBUlRfSU1SSVNSX1NQQUNJTkcpCisKKyNkZWZpbmUgQV9EVUFSVF9JTVJSRUcoY2hhbikJICAgIChBX0RVQVJUICsgUl9EVUFSVF9JTVJSRUcoY2hhbikpCisjZGVmaW5lIEFfRFVBUlRfSVNSUkVHKGNoYW4pCSAgICAoQV9EVUFSVCArIFJfRFVBUlRfSVNSUkVHKGNoYW4pKQorCisKKworCisvKgorICogVGhlc2UgY29uc3RhbnRzIGFyZSB0aGUgYWJzb2x1dGUgYWRkcmVzc2VzLgorICovCisKKyNkZWZpbmUgQV9EVUFSVF9NT0RFX1JFR18xX0EgICAgICAgIDB4MDAxMDA2MDEwMAorI2RlZmluZSBBX0RVQVJUX01PREVfUkVHXzJfQSAgICAgICAgMHgwMDEwMDYwMTEwCisjZGVmaW5lIEFfRFVBUlRfU1RBVFVTX0EgICAgICAgICAgICAweDAwMTAwNjAxMjAKKyNkZWZpbmUgQV9EVUFSVF9DTEtfU0VMX0EgICAgICAgICAgIDB4MDAxMDA2MDEzMAorI2RlZmluZSBBX0RVQVJUX0NNRF9BICAgICAgICAgICAgICAgMHgwMDEwMDYwMTUwCisjZGVmaW5lIEFfRFVBUlRfUlhfSE9MRF9BICAgICAgICAgICAweDAwMTAwNjAxNjAKKyNkZWZpbmUgQV9EVUFSVF9UWF9IT0xEX0EgICAgICAgICAgIDB4MDAxMDA2MDE3MAorCisjZGVmaW5lIEFfRFVBUlRfTU9ERV9SRUdfMV9CICAgICAgICAweDAwMTAwNjAyMDAKKyNkZWZpbmUgQV9EVUFSVF9NT0RFX1JFR18yX0IgICAgICAgIDB4MDAxMDA2MDIxMAorI2RlZmluZSBBX0RVQVJUX1NUQVRVU19CICAgICAgICAgICAgMHgwMDEwMDYwMjIwCisjZGVmaW5lIEFfRFVBUlRfQ0xLX1NFTF9CICAgICAgICAgICAweDAwMTAwNjAyMzAKKyNkZWZpbmUgQV9EVUFSVF9DTURfQiAgICAgICAgICAgICAgIDB4MDAxMDA2MDI1MAorI2RlZmluZSBBX0RVQVJUX1JYX0hPTERfQiAgICAgICAgICAgMHgwMDEwMDYwMjYwCisjZGVmaW5lIEFfRFVBUlRfVFhfSE9MRF9CICAgICAgICAgICAweDAwMTAwNjAyNzAKKworI2RlZmluZSBBX0RVQVJUX0lOUE9SVF9DSE5HICAgICAgICAgMHgwMDEwMDYwMzAwCisjZGVmaW5lIEFfRFVBUlRfQVVYX0NUUkwgICAgICAgICAgICAweDAwMTAwNjAzMTAKKyNkZWZpbmUgQV9EVUFSVF9JU1JfQSAgICAgICAgICAgICAgIDB4MDAxMDA2MDMyMAorI2RlZmluZSBBX0RVQVJUX0lNUl9BICAgICAgICAgICAgICAgMHgwMDEwMDYwMzMwCisjZGVmaW5lIEFfRFVBUlRfSVNSX0IgICAgICAgICAgICAgICAweDAwMTAwNjAzNDAKKyNkZWZpbmUgQV9EVUFSVF9JTVJfQiAgICAgICAgICAgICAgIDB4MDAxMDA2MDM1MAorI2RlZmluZSBBX0RVQVJUX09VVF9QT1JUICAgICAgICAgICAgMHgwMDEwMDYwMzYwCisjZGVmaW5lIEFfRFVBUlRfT1BDUiAgICAgICAgICAgICAgICAweDAwMTAwNjAzNzAKKyNkZWZpbmUgQV9EVUFSVF9JTl9QT1JUICAgICAgICAgICAgIDB4MDAxMDA2MDM4MAorI2RlZmluZSBBX0RVQVJUX0lTUiAgICAgICAgICAgICAgICAgMHgwMDEwMDYwMzkwCisjZGVmaW5lIEFfRFVBUlRfSU1SICAgICAgICAgICAgICAgICAweDAwMTAwNjAzQTAKKyNkZWZpbmUgQV9EVUFSVF9TRVRfT1BSICAgICAgICAgICAgIDB4MDAxMDA2MDNCMAorI2RlZmluZSBBX0RVQVJUX0NMRUFSX09QUiAgICAgICAgICAgMHgwMDEwMDYwM0MwCisjZGVmaW5lIEFfRFVBUlRfSU5QT1JUX0NITkdfQSAgICAgICAweDAwMTAwNjAzRDAKKyNkZWZpbmUgQV9EVUFSVF9JTlBPUlRfQ0hOR19CICAgICAgIDB4MDAxMDA2MDNFMAorCisjaWYgU0lCWVRFX0hEUl9GRUFUVVJFKDEyNTAsIFBBU1MyKSB8fCBTSUJZVEVfSERSX0ZFQVRVUkUoMTEyeCwgUEFTUzEpCisjZGVmaW5lIEFfRFVBUlRfRlVMTF9DVExfQQkgICAgMHgwMDEwMDYwMTQwCisjZGVmaW5lIEFfRFVBUlRfRlVMTF9DVExfQgkgICAgMHgwMDEwMDYwMjQwCisKKyNkZWZpbmUgQV9EVUFSVF9PUENSX0EJICAJICAgIDB4MDAxMDA2MDE4MAorI2RlZmluZSBBX0RVQVJUX09QQ1JfQgkgIAkgICAgMHgwMDEwMDYwMjgwCisKKyNkZWZpbmUgQV9EVUFSVF9JTlBPUlRfQ0hOR19ERUJVRyAgIDB4MDAxMDA2MDNGMAorI2VuZGlmIC8qIDEyNTAgUEFTUzIgfHwgMTEyeCBQQVNTMSAqLworCisKKy8qICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgICAgKiBTeW5jaHJvbm91cyBTZXJpYWwgUmVnaXN0ZXJzCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKworI2RlZmluZSBBX1NFUl9CQVNFXzAgICAgICAgICAgICAgICAgMHgwMDEwMDYwNDAwCisjZGVmaW5lIEFfU0VSX0JBU0VfMSAgICAgICAgICAgICAgICAweDAwMTAwNjA4MDAKKyNkZWZpbmUgU0VSX1NQQUNJTkcgICAgICAgICAgICAgICAgIDB4NDAwCisKKyNkZWZpbmUgU0VSX0RNQV9UWFJYX1NQQUNJTkcgICAgICAgIDB4ODAKKworI2RlZmluZSBTRVJfTlVNX1BPUlRTICAgICAgICAgICAgICAgMgorCisjZGVmaW5lIEFfU0VSX0NIQU5ORUxfQkFTRShzZXJudW0pICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgKEFfU0VSX0JBU0VfMCArICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICBTRVJfU1BBQ0lORyooc2VybnVtKSkKKworI2RlZmluZSBBX1NFUl9SRUdJU1RFUihzZXJudW0scmVnKSAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIChBX1NFUl9CQVNFXzAgKyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgU0VSX1NQQUNJTkcqKHNlcm51bSkgKyAocmVnKSkKKworCisjZGVmaW5lIFJfU0VSX0RNQV9DSEFOTkVMUwkJMCAgIC8qIFJlbGF0aXZlIHRvIEFfU0VSX0JBU0VfeCAqLworCisjZGVmaW5lIEFfU0VSX0RNQV9DSEFOTkVMX0JBU0Uoc2VybnVtLHR4cngpICAgIFwKKyAgICAgICAgICAgICAoKEFfU0VSX0NIQU5ORUxfQkFTRShzZXJudW0pKSArICAgICAgICBcCisgICAgICAgICAgICAgUl9TRVJfRE1BX0NIQU5ORUxTICsgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgIChTRVJfRE1BX1RYUlhfU1BBQ0lORyoodHhyeCkpKQorCisjZGVmaW5lIEFfU0VSX0RNQV9SRUdJU1RFUihzZXJudW0sdHhyeCxyZWcpICAgICAgICAgICBcCisgICAgICAgICAgICAoQV9TRVJfRE1BX0NIQU5ORUxfQkFTRShzZXJudW0sdHhyeCkgKyAgICBcCisgICAgICAgICAgICAocmVnKSkKKworCisvKiAKKyAqIERNQSBjaGFubmVsIHJlZ2lzdGVycywgcmVsYXRpdmUgdG8gQV9TRVJfRE1BX0NIQU5ORUxfQkFTRQorICovCisKKyNkZWZpbmUgUl9TRVJfRE1BX0NPTkZJRzAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgUl9TRVJfRE1BX0NPTkZJRzEgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgUl9TRVJfRE1BX0RTQ1JfQkFTRSAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgUl9TRVJfRE1BX0RTQ1JfQ05UICAgICAgICAgIDB4MDAwMDAwMTgKKyNkZWZpbmUgUl9TRVJfRE1BX0NVUl9EU0NSQSAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgUl9TRVJfRE1BX0NVUl9EU0NSQiAgICAgICAgIDB4MDAwMDAwMjgKKyNkZWZpbmUgUl9TRVJfRE1BX0NVUl9EU0NSQUREUiAgICAgIDB4MDAwMDAwMzAKKworI2RlZmluZSBSX1NFUl9ETUFfQ09ORklHMF9SWCAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBSX1NFUl9ETUFfQ09ORklHMV9SWCAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBSX1NFUl9ETUFfRFNDUl9CQVNFX1JYICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBSX1NFUl9ETUFfRFNDUl9DT1VOVF9SWCAgICAgMHgwMDAwMDAxOAorI2RlZmluZSBSX1NFUl9ETUFfQ1VSX0RTQ1JfQV9SWCAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBSX1NFUl9ETUFfQ1VSX0RTQ1JfQl9SWCAgICAgMHgwMDAwMDAyOAorI2RlZmluZSBSX1NFUl9ETUFfQ1VSX0RTQ1JfQUREUl9SWCAgMHgwMDAwMDAzMAorCisjZGVmaW5lIFJfU0VSX0RNQV9DT05GSUcwX1RYICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIFJfU0VSX0RNQV9DT05GSUcxX1RYICAgICAgICAweDAwMDAwMDg4CisjZGVmaW5lIFJfU0VSX0RNQV9EU0NSX0JBU0VfVFggICAgICAweDAwMDAwMDkwCisjZGVmaW5lIFJfU0VSX0RNQV9EU0NSX0NPVU5UX1RYICAgICAweDAwMDAwMDk4CisjZGVmaW5lIFJfU0VSX0RNQV9DVVJfRFNDUl9BX1RYICAgICAweDAwMDAwMEEwCisjZGVmaW5lIFJfU0VSX0RNQV9DVVJfRFNDUl9CX1RYICAgICAweDAwMDAwMEE4CisjZGVmaW5lIFJfU0VSX0RNQV9DVVJfRFNDUl9BRERSX1RYICAweDAwMDAwMEIwCisKKyNkZWZpbmUgUl9TRVJfTU9ERSAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgUl9TRVJfTUlORlJNX1NaICAgICAgICAgICAgIDB4MDAwMDAxMDgKKyNkZWZpbmUgUl9TRVJfTUFYRlJNX1NaICAgICAgICAgICAgIDB4MDAwMDAxMTAKKyNkZWZpbmUgUl9TRVJfQUREUiAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMTgKKyNkZWZpbmUgUl9TRVJfVVNSMF9BRERSICAgICAgICAgICAgIDB4MDAwMDAxMjAKKyNkZWZpbmUgUl9TRVJfVVNSMV9BRERSICAgICAgICAgICAgIDB4MDAwMDAxMjgKKyNkZWZpbmUgUl9TRVJfVVNSMl9BRERSICAgICAgICAgICAgIDB4MDAwMDAxMzAKKyNkZWZpbmUgUl9TRVJfVVNSM19BRERSICAgICAgICAgICAgIDB4MDAwMDAxMzgKKyNkZWZpbmUgUl9TRVJfQ01EICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxNDAKKyNkZWZpbmUgUl9TRVJfVFhfUkRfVEhSU0ggICAgICAgICAgIDB4MDAwMDAxNjAKKyNkZWZpbmUgUl9TRVJfVFhfV1JfVEhSU0ggICAgICAgICAgIDB4MDAwMDAxNjgKKyNkZWZpbmUgUl9TRVJfUlhfUkRfVEhSU0ggICAgICAgICAgIDB4MDAwMDAxNzAKKyNkZWZpbmUgUl9TRVJfTElORV9NT0RFCQkgICAgMHgwMDAwMDE3OAorI2RlZmluZSBSX1NFUl9ETUFfRU5BQkxFICAgICAgICAgICAgMHgwMDAwMDE4MAorI2RlZmluZSBSX1NFUl9JTlRfTUFTSyAgICAgICAgICAgICAgMHgwMDAwMDE5MAorI2RlZmluZSBSX1NFUl9TVEFUVVMgICAgICAgICAgICAgICAgMHgwMDAwMDE4OAorI2RlZmluZSBSX1NFUl9TVEFUVVNfREVCVUcgICAgICAgICAgMHgwMDAwMDFBOAorI2RlZmluZSBSX1NFUl9SWF9UQUJMRV9CQVNFICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBTRVJfUlhfVEFCTEVfQ09VTlQgICAgICAgICAgMTYKKyNkZWZpbmUgUl9TRVJfVFhfVEFCTEVfQkFTRSAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgU0VSX1RYX1RBQkxFX0NPVU5UICAgICAgICAgIDE2CisKKy8qIFJNT04gQ291bnRlcnMgKi8KKyNkZWZpbmUgUl9TRVJfUk1PTl9UWF9CWVRFX0xPICAgICAgIDB4MDAwMDAxQzAKKyNkZWZpbmUgUl9TRVJfUk1PTl9UWF9CWVRFX0hJICAgICAgIDB4MDAwMDAxQzgKKyNkZWZpbmUgUl9TRVJfUk1PTl9SWF9CWVRFX0xPICAgICAgIDB4MDAwMDAxRDAKKyNkZWZpbmUgUl9TRVJfUk1PTl9SWF9CWVRFX0hJICAgICAgIDB4MDAwMDAxRDgKKyNkZWZpbmUgUl9TRVJfUk1PTl9UWF9VTkRFUlJVTiAgICAgIDB4MDAwMDAxRTAKKyNkZWZpbmUgUl9TRVJfUk1PTl9SWF9PVkVSRkxPVyAgICAgIDB4MDAwMDAxRTgKKyNkZWZpbmUgUl9TRVJfUk1PTl9SWF9FUlJPUlMgICAgICAgIDB4MDAwMDAxRjAKKyNkZWZpbmUgUl9TRVJfUk1PTl9SWF9CQURBRERSICAgICAgIDB4MDAwMDAxRjgKKworLyogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAgICAqIEdlbmVyaWMgQnVzIFJlZ2lzdGVycworICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisjZGVmaW5lIElPX0VYVF9DRkdfQ09VTlQgICAgICAgICAgICA4CisKKyNkZWZpbmUgQV9JT19FWFRfQkFTRQkJICAgIDB4MDAxMDA2MTAwMAorI2RlZmluZSBBX0lPX0VYVF9SRUcocikJCSAgICAoQV9JT19FWFRfQkFTRSArIChyKSkKKworI2RlZmluZSBBX0lPX0VYVF9DRkdfQkFTRSAgICAgICAgICAgMHgwMDEwMDYxMDAwCisjZGVmaW5lIEFfSU9fRVhUX01VTFRfU0laRV9CQVNFICAgICAweDAwMTAwNjExMDAKKyNkZWZpbmUgQV9JT19FWFRfU1RBUlRfQUREUl9CQVNFICAgIDB4MDAxMDA2MTIwMAorI2RlZmluZSBBX0lPX0VYVF9USU1FX0NGRzBfQkFTRSAgICAgMHgwMDEwMDYxNjAwCisjZGVmaW5lIEFfSU9fRVhUX1RJTUVfQ0ZHMV9CQVNFICAgICAweDAwMTAwNjE3MDAKKworI2RlZmluZSBJT19FWFRfUkVHSVNURVJfU1BBQ0lORwkgICAgOAorI2RlZmluZSBBX0lPX0VYVF9DU19CQVNFKGNzKQkgICAgKEFfSU9fRVhUX0NGR19CQVNFK0lPX0VYVF9SRUdJU1RFUl9TUEFDSU5HKihjcykpCisjZGVmaW5lIFJfSU9fRVhUX1JFRyhyZWcsY3MpCSAgICAoKGNzKSpJT19FWFRfUkVHSVNURVJfU1BBQ0lORyArIChyZWcpKQorCisjZGVmaW5lIFJfSU9fRVhUX0NGRwkJICAgIDB4MDAwMAorI2RlZmluZSBSX0lPX0VYVF9NVUxUX1NJWkUgICAgICAgICAgMHgwMTAwCisjZGVmaW5lIFJfSU9fRVhUX1NUQVJUX0FERFIJICAgIDB4MDIwMAorI2RlZmluZSBSX0lPX0VYVF9USU1FX0NGRzAgICAgICAgICAgMHgwNjAwCisjZGVmaW5lIFJfSU9fRVhUX1RJTUVfQ0ZHMSAgICAgICAgICAweDA3MDAKKworCisjZGVmaW5lIEFfSU9fSU5URVJSVVBUX1NUQVRVUyAgICAgICAweDAwMTAwNjFBMDAKKyNkZWZpbmUgQV9JT19JTlRFUlJVUFRfREFUQTAgICAgICAgIDB4MDAxMDA2MUExMAorI2RlZmluZSBBX0lPX0lOVEVSUlVQVF9EQVRBMSAgICAgICAgMHgwMDEwMDYxQTE4CisjZGVmaW5lIEFfSU9fSU5URVJSVVBUX0RBVEEyICAgICAgICAweDAwMTAwNjFBMjAKKyNkZWZpbmUgQV9JT19JTlRFUlJVUFRfREFUQTMgICAgICAgIDB4MDAxMDA2MUEyOAorI2RlZmluZSBBX0lPX0lOVEVSUlVQVF9BRERSMCAgICAgICAgMHgwMDEwMDYxQTMwCisjZGVmaW5lIEFfSU9fSU5URVJSVVBUX0FERFIxICAgICAgICAweDAwMTAwNjFBNDAKKyNkZWZpbmUgQV9JT19JTlRFUlJVUFRfUEFSSVRZICAgICAgIDB4MDAxMDA2MUE1MAorI2RlZmluZSBBX0lPX1BDTUNJQV9DRkcgICAgICAgICAgICAgMHgwMDEwMDYxQTYwCisjZGVmaW5lIEFfSU9fUENNQ0lBX1NUQVRVUyAgICAgICAgICAweDAwMTAwNjFBNzAKKyNkZWZpbmUgQV9JT19EUklWRV8wCQkgICAgMHgwMDEwMDYxMzAwCisjZGVmaW5lIEFfSU9fRFJJVkVfMQkJICAgIDB4MDAxMDA2MTMwOAorI2RlZmluZSBBX0lPX0RSSVZFXzIJCSAgICAweDAwMTAwNjEzMTAKKyNkZWZpbmUgQV9JT19EUklWRV8zCQkgICAgMHgwMDEwMDYxMzE4CisjZGVmaW5lIEFfSU9fRFJJVkVfQkFTRQkJICAgIEFfSU9fRFJJVkVfMAorI2RlZmluZSBJT19EUklWRV9SRUdJU1RFUl9TUEFDSU5HICAgOAorI2RlZmluZSBSX0lPX0RSSVZFKHgpCQkgICAgKCh4KSpJT19EUklWRV9SRUdJU1RFUl9TUEFDSU5HKQorI2RlZmluZSBBX0lPX0RSSVZFKHgpCQkgICAgKEFfSU9fRFJJVkVfQkFTRSArIFJfSU9fRFJJVkUoeCkpCisKKyNkZWZpbmUgUl9JT19JTlRFUlJVUFRfU1RBVFVTICAgICAgIDB4MEEwMAorI2RlZmluZSBSX0lPX0lOVEVSUlVQVF9EQVRBMCAgICAgICAgMHgwQTEwCisjZGVmaW5lIFJfSU9fSU5URVJSVVBUX0RBVEExICAgICAgICAweDBBMTgKKyNkZWZpbmUgUl9JT19JTlRFUlJVUFRfREFUQTIgICAgICAgIDB4MEEyMAorI2RlZmluZSBSX0lPX0lOVEVSUlVQVF9EQVRBMyAgICAgICAgMHgwQTI4CisjZGVmaW5lIFJfSU9fSU5URVJSVVBUX0FERFIwICAgICAgICAweDBBMzAKKyNkZWZpbmUgUl9JT19JTlRFUlJVUFRfQUREUjEgICAgICAgIDB4MEE0MAorI2RlZmluZSBSX0lPX0lOVEVSUlVQVF9QQVJJVFkgICAgICAgMHgwQTUwCisjZGVmaW5lIFJfSU9fUENNQ0lBX0NGRyAgICAgICAgICAgICAweDBBNjAKKyNkZWZpbmUgUl9JT19QQ01DSUFfU1RBVFVTICAgICAgICAgIDB4MEE3MAorCisvKiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICAgICogR1BJTyBSZWdpc3RlcnMKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworI2RlZmluZSBBX0dQSU9fQ0xSX0VER0UgICAgICAgICAgICAgMHgwMDEwMDYxQTgwCisjZGVmaW5lIEFfR1BJT19JTlRfVFlQRSAgICAgICAgICAgICAweDAwMTAwNjFBODgKKyNkZWZpbmUgQV9HUElPX0lOUFVUX0lOVkVSVCAgICAgICAgIDB4MDAxMDA2MUE5MAorI2RlZmluZSBBX0dQSU9fR0xJVENIICAgICAgICAgICAgICAgMHgwMDEwMDYxQTk4CisjZGVmaW5lIEFfR1BJT19SRUFEICAgICAgICAgICAgICAgICAweDAwMTAwNjFBQTAKKyNkZWZpbmUgQV9HUElPX0RJUkVDVElPTiAgICAgICAgICAgIDB4MDAxMDA2MUFBOAorI2RlZmluZSBBX0dQSU9fUElOX0NMUiAgICAgICAgICAgICAgMHgwMDEwMDYxQUIwCisjZGVmaW5lIEFfR1BJT19QSU5fU0VUICAgICAgICAgICAgICAweDAwMTAwNjFBQjgKKworI2RlZmluZSBBX0dQSU9fQkFTRQkJICAgIDB4MDAxMDA2MUE4MAorCisjZGVmaW5lIFJfR1BJT19DTFJfRURHRSAgICAgICAgICAgICAweDAwCisjZGVmaW5lIFJfR1BJT19JTlRfVFlQRSAgICAgICAgICAgICAweDA4CisjZGVmaW5lIFJfR1BJT19JTlBVVF9JTlZFUlQgICAgICAgICAweDEwCisjZGVmaW5lIFJfR1BJT19HTElUQ0ggICAgICAgICAgICAgICAweDE4CisjZGVmaW5lIFJfR1BJT19SRUFEICAgICAgICAgICAgICAgICAweDIwCisjZGVmaW5lIFJfR1BJT19ESVJFQ1RJT04gICAgICAgICAgICAweDI4CisjZGVmaW5lIFJfR1BJT19QSU5fQ0xSICAgICAgICAgICAgICAweDMwCisjZGVmaW5lIFJfR1BJT19QSU5fU0VUICAgICAgICAgICAgICAweDM4CisKKy8qICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgICAgKiBTTUJ1cyBSZWdpc3RlcnMKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworI2RlZmluZSBBX1NNQl9YVFJBXzAgICAgICAgICAgICAgICAgMHgwMDEwMDYwMDAwCisjZGVmaW5lIEFfU01CX1hUUkFfMSAgICAgICAgICAgICAgICAweDAwMTAwNjAwMDgKKyNkZWZpbmUgQV9TTUJfRlJFUV8wICAgICAgICAgICAgICAgIDB4MDAxMDA2MDAxMAorI2RlZmluZSBBX1NNQl9GUkVRXzEgICAgICAgICAgICAgICAgMHgwMDEwMDYwMDE4CisjZGVmaW5lIEFfU01CX1NUQVRVU18wICAgICAgICAgICAgICAweDAwMTAwNjAwMjAKKyNkZWZpbmUgQV9TTUJfU1RBVFVTXzEgICAgICAgICAgICAgIDB4MDAxMDA2MDAyOAorI2RlZmluZSBBX1NNQl9DTURfMCAgICAgICAgICAgICAgICAgMHgwMDEwMDYwMDMwCisjZGVmaW5lIEFfU01CX0NNRF8xICAgICAgICAgICAgICAgICAweDAwMTAwNjAwMzgKKyNkZWZpbmUgQV9TTUJfU1RBUlRfMCAgICAgICAgICAgICAgIDB4MDAxMDA2MDA0MAorI2RlZmluZSBBX1NNQl9TVEFSVF8xICAgICAgICAgICAgICAgMHgwMDEwMDYwMDQ4CisjZGVmaW5lIEFfU01CX0RBVEFfMCAgICAgICAgICAgICAgICAweDAwMTAwNjAwNTAKKyNkZWZpbmUgQV9TTUJfREFUQV8xICAgICAgICAgICAgICAgIDB4MDAxMDA2MDA1OAorI2RlZmluZSBBX1NNQl9DT05UUk9MXzAgICAgICAgICAgICAgMHgwMDEwMDYwMDYwCisjZGVmaW5lIEFfU01CX0NPTlRST0xfMSAgICAgICAgICAgICAweDAwMTAwNjAwNjgKKyNkZWZpbmUgQV9TTUJfUEVDXzAgICAgICAgICAgICAgICAgIDB4MDAxMDA2MDA3MAorI2RlZmluZSBBX1NNQl9QRUNfMSAgICAgICAgICAgICAgICAgMHgwMDEwMDYwMDc4CisKKyNkZWZpbmUgQV9TTUJfMCAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDA2MDAwMAorI2RlZmluZSBBX1NNQl8xICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDYwMDA4CisjZGVmaW5lIFNNQl9SRUdJU1RFUl9TUEFDSU5HICAgICAgICAweDgKKyNkZWZpbmUgQV9TTUJfQkFTRShpZHgpICAgICAgICAgICAgIChBX1NNQl8wKyhpZHgpKlNNQl9SRUdJU1RFUl9TUEFDSU5HKQorI2RlZmluZSBBX1NNQl9SRUdJU1RFUihpZHgscmVnKSAgICAgKEFfU01CX0JBU0UoaWR4KSsocmVnKSkKKworI2RlZmluZSBSX1NNQl9YVFJBICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMDAwCisjZGVmaW5lIFJfU01CX0ZSRVEgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMTAKKyNkZWZpbmUgUl9TTUJfU1RBVFVTICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAyMAorI2RlZmluZSBSX1NNQl9DTUQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMDMwCisjZGVmaW5lIFJfU01CX1NUQVJUICAgICAgICAgICAgICAgICAweDAwMDAwMDAwNDAKKyNkZWZpbmUgUl9TTUJfREFUQSAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDA1MAorI2RlZmluZSBSX1NNQl9DT05UUk9MICAgICAgICAgICAgICAgMHgwMDAwMDAwMDYwCisjZGVmaW5lIFJfU01CX1BFQyAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwNzAKKworLyogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAgICAqIFRpbWVyIFJlZ2lzdGVycworICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisvKgorICogV2F0Y2hkb2cgdGltZXJzCisgKi8KKworI2RlZmluZSBBX1NDRF9XRE9HXzAJCSAgICAweDAwMTAwMjAwNTAKKyNkZWZpbmUgQV9TQ0RfV0RPR18xICAgICAgICAgICAgICAgIDB4MDAxMDAyMDE1MAorI2RlZmluZSBTQ0RfV0RPR19TUEFDSU5HICAgICAgICAgICAgMHgxMDAKKyNkZWZpbmUgU0NEX05VTV9XRE9HUwkJICAgIDIKKyNkZWZpbmUgQV9TQ0RfV0RPR19CQVNFKHcpICAgICAgICAgIChBX1NDRF9XRE9HXzArU0NEX1dET0dfU1BBQ0lORyoodykpCisjZGVmaW5lIEFfU0NEX1dET0dfUkVHSVNURVIodyxyKSAgICAoQV9TQ0RfV0RPR19CQVNFKHcpICsgKHIpKQorCisjZGVmaW5lIFJfU0NEX1dET0dfSU5JVAkJICAgIDB4MDAwMDAwMDAwMAorI2RlZmluZSBSX1NDRF9XRE9HX0NOVAkJICAgIDB4MDAwMDAwMDAwOAorI2RlZmluZSBSX1NDRF9XRE9HX0NGRwkJICAgIDB4MDAwMDAwMDAxMAorCisjZGVmaW5lIEFfU0NEX1dET0dfSU5JVF8wICAgICAgICAgICAweDAwMTAwMjAwNTAKKyNkZWZpbmUgQV9TQ0RfV0RPR19DTlRfMCAgICAgICAgICAgIDB4MDAxMDAyMDA1OAorI2RlZmluZSBBX1NDRF9XRE9HX0NGR18wICAgICAgICAgICAgMHgwMDEwMDIwMDYwCisKKyNkZWZpbmUgQV9TQ0RfV0RPR19JTklUXzEgICAgICAgICAgIDB4MDAxMDAyMDE1MAorI2RlZmluZSBBX1NDRF9XRE9HX0NOVF8xICAgICAgICAgICAgMHgwMDEwMDIwMTU4CisjZGVmaW5lIEFfU0NEX1dET0dfQ0ZHXzEgICAgICAgICAgICAweDAwMTAwMjAxNjAKKworLyoKKyAqIEdlbmVyaWMgdGltZXJzCisgKi8KKworI2RlZmluZSBBX1NDRF9USU1FUl8wCQkgICAgMHgwMDEwMDIwMDcwCisjZGVmaW5lIEFfU0NEX1RJTUVSXzEgICAgICAgICAgICAgICAweDAwMTAwMjAwNzgKKyNkZWZpbmUgQV9TQ0RfVElNRVJfMgkJICAgIDB4MDAxMDAyMDE3MAorI2RlZmluZSBBX1NDRF9USU1FUl8zICAgICAgICAgICAgICAgMHgwMDEwMDIwMTc4CisjZGVmaW5lIFNDRF9OVU1fVElNRVJTCQkgICAgNAorI2RlZmluZSBBX1NDRF9USU1FUl9CQVNFKHcpICAgICAgICAgKEFfU0NEX1RJTUVSXzArMHgwOCooKHcpJjEpKzB4MTAwKigoKHcpJjIpPj4xKSkKKyNkZWZpbmUgQV9TQ0RfVElNRVJfUkVHSVNURVIodyxyKSAgIChBX1NDRF9USU1FUl9CQVNFKHcpICsgKHIpKQorCisjZGVmaW5lIFJfU0NEX1RJTUVSX0lOSVQJICAgIDB4MDAwMDAwMDAwMAorI2RlZmluZSBSX1NDRF9USU1FUl9DTlQJCSAgICAweDAwMDAwMDAwMTAKKyNkZWZpbmUgUl9TQ0RfVElNRVJfQ0ZHCQkgICAgMHgwMDAwMDAwMDIwCisKKyNkZWZpbmUgQV9TQ0RfVElNRVJfSU5JVF8wICAgICAgICAgIDB4MDAxMDAyMDA3MAorI2RlZmluZSBBX1NDRF9USU1FUl9DTlRfMCAgICAgICAgICAgMHgwMDEwMDIwMDgwCisjZGVmaW5lIEFfU0NEX1RJTUVSX0NGR18wICAgICAgICAgICAweDAwMTAwMjAwOTAKKworI2RlZmluZSBBX1NDRF9USU1FUl9JTklUXzEgICAgICAgICAgMHgwMDEwMDIwMDc4CisjZGVmaW5lIEFfU0NEX1RJTUVSX0NOVF8xICAgICAgICAgICAweDAwMTAwMjAwODgKKyNkZWZpbmUgQV9TQ0RfVElNRVJfQ0ZHXzEgICAgICAgICAgIDB4MDAxMDAyMDA5OAorCisjZGVmaW5lIEFfU0NEX1RJTUVSX0lOSVRfMiAgICAgICAgICAweDAwMTAwMjAxNzAKKyNkZWZpbmUgQV9TQ0RfVElNRVJfQ05UXzIgICAgICAgICAgIDB4MDAxMDAyMDE4MAorI2RlZmluZSBBX1NDRF9USU1FUl9DRkdfMiAgICAgICAgICAgMHgwMDEwMDIwMTkwCisKKyNkZWZpbmUgQV9TQ0RfVElNRVJfSU5JVF8zICAgICAgICAgIDB4MDAxMDAyMDE3OAorI2RlZmluZSBBX1NDRF9USU1FUl9DTlRfMyAgICAgICAgICAgMHgwMDEwMDIwMTg4CisjZGVmaW5lIEFfU0NEX1RJTUVSX0NGR18zICAgICAgICAgICAweDAwMTAwMjAxOTgKKworI2lmIFNJQllURV9IRFJfRkVBVFVSRSgxMjUwLCBQQVNTMikgfHwgU0lCWVRFX0hEUl9GRUFUVVJFKDExMngsIFBBU1MxKQorI2RlZmluZSBBX1NDRF9TQ1JBVENICQkgICAweDAwMTAwMjBDMTAKKworI2RlZmluZSBBX1NDRF9aQkJVU19DWUNMRV9DT1VOVAkgICAweDAwMTAwMzAwMDAKKyNkZWZpbmUgQV9TQ0RfWkJCVVNfQ1lDTEVfQ1AwCSAgIDB4MDAxMDAyMEMwMAorI2RlZmluZSBBX1NDRF9aQkJVU19DWUNMRV9DUDEJICAgMHgwMDEwMDIwQzA4CisjZW5kaWYgLyogMTI1MCBQQVNTMiB8fCAxMTJ4IFBBU1MxICovCisKKworLyogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAgICAqIFN5c3RlbSBDb250cm9sIFJlZ2lzdGVycworICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisjZGVmaW5lIEFfU0NEX1NZU1RFTV9SRVZJU0lPTiAgICAgICAweDAwMTAwMjAwMDAKKyNkZWZpbmUgQV9TQ0RfU1lTVEVNX0NGRyAgICAgICAgICAgIDB4MDAxMDAyMDAwOAorI2RlZmluZSBBX1NDRF9TWVNURU1fTUFOVUYgICAgICAgICAgMHgwMDEwMDM4MDAwCisKKy8qICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgICAgKiBTeXN0ZW0gQWRkcmVzcyBUcmFwIFJlZ2lzdGVycworICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisjZGVmaW5lIEFfQUREUl9UUkFQX0lOREVYICAgICAgICAgICAweDAwMTAwMjAwQjAKKyNkZWZpbmUgQV9BRERSX1RSQVBfUkVHICAgICAgICAgICAgIDB4MDAxMDAyMDBCOAorI2RlZmluZSBBX0FERFJfVFJBUF9VUF8wICAgICAgICAgICAgMHgwMDEwMDIwNDAwCisjZGVmaW5lIEFfQUREUl9UUkFQX1VQXzEgICAgICAgICAgICAweDAwMTAwMjA0MDgKKyNkZWZpbmUgQV9BRERSX1RSQVBfVVBfMiAgICAgICAgICAgIDB4MDAxMDAyMDQxMAorI2RlZmluZSBBX0FERFJfVFJBUF9VUF8zICAgICAgICAgICAgMHgwMDEwMDIwNDE4CisjZGVmaW5lIEFfQUREUl9UUkFQX0RPV05fMCAgICAgICAgICAweDAwMTAwMjA0MjAKKyNkZWZpbmUgQV9BRERSX1RSQVBfRE9XTl8xICAgICAgICAgIDB4MDAxMDAyMDQyOAorI2RlZmluZSBBX0FERFJfVFJBUF9ET1dOXzIgICAgICAgICAgMHgwMDEwMDIwNDMwCisjZGVmaW5lIEFfQUREUl9UUkFQX0RPV05fMyAgICAgICAgICAweDAwMTAwMjA0MzgKKyNkZWZpbmUgQV9BRERSX1RSQVBfQ0ZHXzAgICAgICAgICAgIDB4MDAxMDAyMDQ0MAorI2RlZmluZSBBX0FERFJfVFJBUF9DRkdfMSAgICAgICAgICAgMHgwMDEwMDIwNDQ4CisjZGVmaW5lIEFfQUREUl9UUkFQX0NGR18yICAgICAgICAgICAweDAwMTAwMjA0NTAKKyNkZWZpbmUgQV9BRERSX1RSQVBfQ0ZHXzMgICAgICAgICAgIDB4MDAxMDAyMDQ1OAorI2lmIFNJQllURV9IRFJfRkVBVFVSRSgxMjUwLCBQQVNTMikgfHwgU0lCWVRFX0hEUl9GRUFUVVJFKDExMngsIFBBU1MxKQorI2RlZmluZSBBX0FERFJfVFJBUF9SRUdfREVCVUcJICAgIDB4MDAxMDAyMDQ2MAorI2VuZGlmIC8qIDEyNTAgUEFTUzIgfHwgMTEyeCBQQVNTMSAqLworCisKKy8qICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgICAgKiBTeXN0ZW0gSW50ZXJydXB0IE1hcHBlciBSZWdpc3RlcnMKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworI2RlZmluZSBBX0lNUl9DUFUwX0JBU0UgICAgICAgICAgICAgICAgIDB4MDAxMDAyMDAwMAorI2RlZmluZSBBX0lNUl9DUFUxX0JBU0UgICAgICAgICAgICAgICAgIDB4MDAxMDAyMjAwMAorI2RlZmluZSBJTVJfUkVHSVNURVJfU1BBQ0lORyAgICAgICAgICAgIDB4MjAwMAorI2RlZmluZSBJTVJfUkVHSVNURVJfU1BBQ0lOR19TSElGVCAgICAgIDEzCisKKyNkZWZpbmUgQV9JTVJfTUFQUEVSKGNwdSkgKEFfSU1SX0NQVTBfQkFTRSsoY3B1KSpJTVJfUkVHSVNURVJfU1BBQ0lORykKKyNkZWZpbmUgQV9JTVJfUkVHSVNURVIoY3B1LHJlZykgKEFfSU1SX01BUFBFUihjcHUpKyhyZWcpKQorCisjZGVmaW5lIFJfSU1SX0lOVEVSUlVQVF9ESUFHICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIFJfSU1SX0lOVEVSUlVQVF9NQVNLICAgICAgICAgICAgMHgwMDI4CisjZGVmaW5lIFJfSU1SX0lOVEVSUlVQVF9UUkFDRSAgICAgICAgICAgMHgwMDM4CisjZGVmaW5lIFJfSU1SX0lOVEVSUlVQVF9TT1VSQ0VfU1RBVFVTICAgMHgwMDQwCisjZGVmaW5lIFJfSU1SX0xEVF9JTlRFUlJVUFRfU0VUICAgICAgICAgMHgwMDQ4CisjZGVmaW5lIFJfSU1SX0xEVF9JTlRFUlJVUFQgICAgICAgICAgICAgMHgwMDE4CisjZGVmaW5lIFJfSU1SX0xEVF9JTlRFUlJVUFRfQ0xSICAgICAgICAgMHgwMDIwCisjZGVmaW5lIFJfSU1SX01BSUxCT1hfQ1BVICAgICAgICAgICAgICAgMHgwMGMwCisjZGVmaW5lIFJfSU1SX0FMSUFTX01BSUxCT1hfQ1BVICAgICAgICAgMHgxMDAwCisjZGVmaW5lIFJfSU1SX01BSUxCT1hfU0VUX0NQVSAgICAgICAgICAgMHgwMEM4CisjZGVmaW5lIFJfSU1SX0FMSUFTX01BSUxCT1hfU0VUX0NQVSAgICAgMHgxMDA4CisjZGVmaW5lIFJfSU1SX01BSUxCT1hfQ0xSX0NQVSAgICAgICAgICAgMHgwMEQwCisjZGVmaW5lIFJfSU1SX0lOVEVSUlVQVF9TVEFUVVNfQkFTRSAgICAgMHgwMTAwCisjZGVmaW5lIFJfSU1SX0lOVEVSUlVQVF9TVEFUVVNfQ09VTlQgICAgNworI2RlZmluZSBSX0lNUl9JTlRFUlJVUFRfTUFQX0JBU0UgICAgICAgIDB4MDIwMAorI2RlZmluZSBSX0lNUl9JTlRFUlJVUFRfTUFQX0NPVU5UICAgICAgIDY0CisKKy8qICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgICAgKiBTeXN0ZW0gUGVyZm9ybWFuY2UgQ291bnRlciBSZWdpc3RlcnMKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworI2RlZmluZSBBX1NDRF9QRVJGX0NOVF9DRkcgICAgICAgICAgMHgwMDEwMDIwNEMwCisjZGVmaW5lIEFfU0NEX1BFUkZfQ05UXzAgICAgICAgICAgICAweDAwMTAwMjA0RDAKKyNkZWZpbmUgQV9TQ0RfUEVSRl9DTlRfMSAgICAgICAgICAgIDB4MDAxMDAyMDREOAorI2RlZmluZSBBX1NDRF9QRVJGX0NOVF8yICAgICAgICAgICAgMHgwMDEwMDIwNEUwCisjZGVmaW5lIEFfU0NEX1BFUkZfQ05UXzMgICAgICAgICAgICAweDAwMTAwMjA0RTgKKworLyogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAgICAqIFN5c3RlbSBCdXMgV2F0Y2hlciBSZWdpc3RlcnMKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworI2RlZmluZSBBX1NDRF9CVVNfRVJSX1NUQVRVUyAgICAgICAgMHgwMDEwMDIwODgwCisjaWYgU0lCWVRFX0hEUl9GRUFUVVJFKDEyNTAsIFBBU1MyKSB8fCBTSUJZVEVfSERSX0ZFQVRVUkUoMTEyeCwgUEFTUzEpCisjZGVmaW5lIEFfU0NEX0JVU19FUlJfU1RBVFVTX0RFQlVHICAweDAwMTAwMjA4RDAKKyNlbmRpZiAvKiAxMjUwIFBBU1MyIHx8IDExMnggUEFTUzEgKi8KKyNkZWZpbmUgQV9CVVNfRVJSX0RBVEFfMCAgICAgICAgICAgIDB4MDAxMDAyMDhBMAorI2RlZmluZSBBX0JVU19FUlJfREFUQV8xICAgICAgICAgICAgMHgwMDEwMDIwOEE4CisjZGVmaW5lIEFfQlVTX0VSUl9EQVRBXzIgICAgICAgICAgICAweDAwMTAwMjA4QjAKKyNkZWZpbmUgQV9CVVNfRVJSX0RBVEFfMyAgICAgICAgICAgIDB4MDAxMDAyMDhCOAorI2RlZmluZSBBX0JVU19MMl9FUlJPUlMgICAgICAgICAgICAgMHgwMDEwMDIwOEMwCisjZGVmaW5lIEFfQlVTX01FTV9JT19FUlJPUlMgICAgICAgICAweDAwMTAwMjA4QzgKKworLyogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAgICAqIFN5c3RlbSBEZWJ1ZyBDb250cm9sbGVyIFJlZ2lzdGVycworICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisjZGVmaW5lIEFfU0NEX0pUQUdfQkFTRSAgICAgICAgICAgICAweDAwMTAwMDAwMDAKKworLyogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAgICAqIFN5c3RlbSBUcmFjZSBCdWZmZXIgUmVnaXN0ZXJzCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKyNkZWZpbmUgQV9TQ0RfVFJBQ0VfQ0ZHICAgICAgICAgICAgIDB4MDAxMDAyMEEwMAorI2RlZmluZSBBX1NDRF9UUkFDRV9SRUFEICAgICAgICAgICAgMHgwMDEwMDIwQTA4CisjZGVmaW5lIEFfU0NEX1RSQUNFX0VWRU5UXzAgICAgICAgICAweDAwMTAwMjBBMjAKKyNkZWZpbmUgQV9TQ0RfVFJBQ0VfRVZFTlRfMSAgICAgICAgIDB4MDAxMDAyMEEyOAorI2RlZmluZSBBX1NDRF9UUkFDRV9FVkVOVF8yICAgICAgICAgMHgwMDEwMDIwQTMwCisjZGVmaW5lIEFfU0NEX1RSQUNFX0VWRU5UXzMgICAgICAgICAweDAwMTAwMjBBMzgKKyNkZWZpbmUgQV9TQ0RfVFJBQ0VfU0VRVUVOQ0VfMCAgICAgIDB4MDAxMDAyMEE0MAorI2RlZmluZSBBX1NDRF9UUkFDRV9TRVFVRU5DRV8xICAgICAgMHgwMDEwMDIwQTQ4CisjZGVmaW5lIEFfU0NEX1RSQUNFX1NFUVVFTkNFXzIgICAgICAweDAwMTAwMjBBNTAKKyNkZWZpbmUgQV9TQ0RfVFJBQ0VfU0VRVUVOQ0VfMyAgICAgIDB4MDAxMDAyMEE1OAorI2RlZmluZSBBX1NDRF9UUkFDRV9FVkVOVF80ICAgICAgICAgMHgwMDEwMDIwQTYwCisjZGVmaW5lIEFfU0NEX1RSQUNFX0VWRU5UXzUgICAgICAgICAweDAwMTAwMjBBNjgKKyNkZWZpbmUgQV9TQ0RfVFJBQ0VfRVZFTlRfNiAgICAgICAgIDB4MDAxMDAyMEE3MAorI2RlZmluZSBBX1NDRF9UUkFDRV9FVkVOVF83ICAgICAgICAgMHgwMDEwMDIwQTc4CisjZGVmaW5lIEFfU0NEX1RSQUNFX1NFUVVFTkNFXzQgICAgICAweDAwMTAwMjBBODAKKyNkZWZpbmUgQV9TQ0RfVFJBQ0VfU0VRVUVOQ0VfNSAgICAgIDB4MDAxMDAyMEE4OAorI2RlZmluZSBBX1NDRF9UUkFDRV9TRVFVRU5DRV82ICAgICAgMHgwMDEwMDIwQTkwCisjZGVmaW5lIEFfU0NEX1RSQUNFX1NFUVVFTkNFXzcgICAgICAweDAwMTAwMjBBOTgKKworLyogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAgICAqIFN5c3RlbSBHZW5lcmljIERNQSBSZWdpc3RlcnMKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworI2RlZmluZSBBX0RNXzAJCSAgCSAgICAweDAwMTAwMjBCMDAKKyNkZWZpbmUgQV9ETV8xCQkgIAkgICAgMHgwMDEwMDIwQjIwCisjZGVmaW5lIEFfRE1fMgkJCSAgICAweDAwMTAwMjBCNDAKKyNkZWZpbmUgQV9ETV8zCQkJICAgIDB4MDAxMDAyMEI2MAorI2RlZmluZSBETV9SRUdJU1RFUl9TUEFDSU5HCSAgICAweDIwCisjZGVmaW5lIERNX05VTV9DSEFOTkVMUwkJICAgIDQKKyNkZWZpbmUgQV9ETV9CQVNFKGlkeCkgKEFfRE1fMCArICgoaWR4KSAqIERNX1JFR0lTVEVSX1NQQUNJTkcpKQorI2RlZmluZSBBX0RNX1JFR0lTVEVSKGlkeCxyZWcpIChBX0RNX0JBU0UoaWR4KSArIChyZWcpKQorCisjZGVmaW5lIFJfRE1fRFNDUl9CQVNFCQkgICAgMHgwMDAwMDAwMDAwCisjZGVmaW5lIFJfRE1fRFNDUl9DT1VOVAkJICAgIDB4MDAwMDAwMDAwOAorI2RlZmluZSBSX0RNX0NVUl9EU0NSX0FERFIJICAgIDB4MDAwMDAwMDAxMAorI2RlZmluZSBSX0RNX0RTQ1JfQkFTRV9ERUJVRwkgICAgMHgwMDAwMDAwMDE4CisKKyNpZiBTSUJZVEVfSERSX0ZFQVRVUkUoMTI1MCwgUEFTUzMpIHx8IFNJQllURV9IRFJfRkVBVFVSRSgxMTJ4LCBQQVNTMSkKKyNkZWZpbmUgQV9ETV9QQVJUSUFMXzAJCSAgICAweDAwMTAwMjBiYTAKKyNkZWZpbmUgQV9ETV9QQVJUSUFMXzEJCSAgICAweDAwMTAwMjBiYTgKKyNkZWZpbmUgQV9ETV9QQVJUSUFMXzIJCSAgICAweDAwMTAwMjBiYjAKKyNkZWZpbmUgQV9ETV9QQVJUSUFMXzMJCSAgICAweDAwMTAwMjBiYjgKKyNkZWZpbmUgRE1fUEFSVElBTF9SRUdJU1RFUl9TUEFDSU5HIDB4OAorI2RlZmluZSBBX0RNX1BBUlRJQUwoaWR4KQkgICAgKEFfRE1fUEFSVElBTF8wICsgKChpZHgpICogRE1fUEFSVElBTF9SRUdJU1RFUl9TUEFDSU5HKSkKKyNlbmRpZiAvKiAxMjUwIFBBU1MzIHx8IDExMnggUEFTUzEgKi8KKworI2lmIFNJQllURV9IRFJfRkVBVFVSRSgxMjUwLCBQQVNTMykgfHwgU0lCWVRFX0hEUl9GRUFUVVJFKDExMngsIFBBU1MxKQorI2RlZmluZSBBX0RNX0NSQ18wCQkgICAgMHgwMDEwMDIwYjgwCisjZGVmaW5lIEFfRE1fQ1JDXzEJCSAgICAweDAwMTAwMjBiOTAKKyNkZWZpbmUgRE1fQ1JDX1JFR0lTVEVSX1NQQUNJTkcJICAgIDB4MTAKKyNkZWZpbmUgRE1fQ1JDX05VTV9DSEFOTkVMUwkgICAgMgorI2RlZmluZSBBX0RNX0NSQ19CQVNFKGlkeCkJICAgIChBX0RNX0NSQ18wICsgKChpZHgpICogRE1fQ1JDX1JFR0lTVEVSX1NQQUNJTkcpKQorI2RlZmluZSBBX0RNX0NSQ19SRUdJU1RFUihpZHgscmVnKSAgKEFfRE1fQ1JDX0JBU0UoaWR4KSArIChyZWcpKQorCisjZGVmaW5lIFJfQ1JDX0RFRl8wCQkgICAgMHgwMAorI2RlZmluZSBSX0NUQ1BfREVGXzAJCSAgICAweDA4CisjZW5kaWYgLyogMTI1MCBQQVNTMyB8fCAxMTJ4IFBBU1MxICovCisKKy8qICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAqICBQaHlzaWNhbCBBZGRyZXNzIE1hcAorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisjZGVmaW5lIEFfUEhZU19NRU1PUllfMCAgICAgICAgICAgICAgICAgX1NCX01BS0U2NCgweDAwMDAwMDAwMDApCisjZGVmaW5lIEFfUEhZU19NRU1PUllfU0laRSAgICAgICAgICAgICAgX1NCX01BS0U2NCgoMjU2KjEwMjQqMTAyNCkpCisjZGVmaW5lIEFfUEhZU19TWVNURU1fQ1RMICAgICAgICAgICAgICAgX1NCX01BS0U2NCgweDAwMTAwMDAwMDApCisjZGVmaW5lIEFfUEhZU19JT19TWVNURU0gICAgICAgICAgICAgICAgX1NCX01BS0U2NCgweDAwMTAwNjAwMDApCisjZGVmaW5lIEFfUEhZU19HRU5CVVMJCQlfU0JfTUFLRTY0KDB4MDAxMDA5MDAwMCkKKyNkZWZpbmUgQV9QSFlTX0dFTkJVU19FTkQJCV9TQl9NQUtFNjQoMHgwMDQwMDAwMDAwKQorI2RlZmluZSBBX1BIWVNfTERUUENJX0lPX01BVENIX0JZVEVTXzMyIF9TQl9NQUtFNjQoMHgwMDQwMDAwMDAwKQorI2RlZmluZSBBX1BIWVNfTERUUENJX0lPX01BVENIX0JJVFNfMzIgIF9TQl9NQUtFNjQoMHgwMDYwMDAwMDAwKQorI2RlZmluZSBBX1BIWVNfTUVNT1JZXzEgICAgICAgICAgICAgICAgIF9TQl9NQUtFNjQoMHgwMDgwMDAwMDAwKQorI2RlZmluZSBBX1BIWVNfTUVNT1JZXzIgICAgICAgICAgICAgICAgIF9TQl9NQUtFNjQoMHgwMDkwMDAwMDAwKQorI2RlZmluZSBBX1BIWVNfTUVNT1JZXzMgICAgICAgICAgICAgICAgIF9TQl9NQUtFNjQoMHgwMEMwMDAwMDAwKQorI2RlZmluZSBBX1BIWVNfTDJfQ0FDSEVfVEVTVCAgICAgICAgICAgIF9TQl9NQUtFNjQoMHgwMEQwMDAwMDAwKQorI2RlZmluZSBBX1BIWVNfTERUX1NQRUNJQUxfTUFUQ0hfQllURVMgIF9TQl9NQUtFNjQoMHgwMEQ4MDAwMDAwKQorI2RlZmluZSBBX1BIWVNfTERUUENJX0lPX01BVENIX0JZVEVTICAgIF9TQl9NQUtFNjQoMHgwMERDMDAwMDAwKQorI2RlZmluZSBBX1BIWVNfTERUUENJX0NGR19NQVRDSF9CWVRFUyAgIF9TQl9NQUtFNjQoMHgwMERFMDAwMDAwKQorI2RlZmluZSBBX1BIWVNfTERUX1NQRUNJQUxfTUFUQ0hfQklUUyAgIF9TQl9NQUtFNjQoMHgwMEY4MDAwMDAwKQorI2RlZmluZSBBX1BIWVNfTERUUENJX0lPX01BVENIX0JJVFMgICAgIF9TQl9NQUtFNjQoMHgwMEZDMDAwMDAwKQorI2RlZmluZSBBX1BIWVNfTERUUENJX0NGR19NQVRDSF9CSVRTICAgIF9TQl9NQUtFNjQoMHgwMEZFMDAwMDAwKQorI2RlZmluZSBBX1BIWVNfTUVNT1JZX0VYUCAgICAgICAgICAgICAgIF9TQl9NQUtFNjQoMHgwMTAwMDAwMDAwKQorI2RlZmluZSBBX1BIWVNfTUVNT1JZX0VYUF9TSVpFICAgICAgICAgIF9TQl9NQUtFNjQoKDUwOCoxMDI0KjEwMjQqMTAyNCkpCisjZGVmaW5lIEFfUEhZU19MRFRfRVhQICAgICAgICAgICAgICAgICAgX1NCX01BS0U2NCgweDgwMDAwMDAwMDApCisjZGVmaW5lIEFfUEhZU19QQ0lfRlVMTEFDQ0VTU19CWVRFUyAgICAgX1NCX01BS0U2NCgweEYwMDAwMDAwMDApCisjZGVmaW5lIEFfUEhZU19QQ0lfRlVMTEFDQ0VTU19CSVRTICAgICAgX1NCX01BS0U2NCgweEYxMDAwMDAwMDApCisjZGVmaW5lIEFfUEhZU19SRVNFUlZFRCAgICAgICAgICAgICAgICAgX1NCX01BS0U2NCgweEYyMDAwMDAwMDApCisjZGVmaW5lIEFfUEhZU19SRVNFUlZFRF9TUEVDSUFMX0xEVCAgICAgX1NCX01BS0U2NCgweEZEMDAwMDAwMDApCisKKyNkZWZpbmUgQV9QSFlTX0wyQ0FDSEVfV0FZX1NJWkUgICAgICAgICBfU0JfTUFLRTY0KDB4MDAwMDAyMDAwMCkKKyNkZWZpbmUgUEhZU19MMkNBQ0hFX05VTV9XQVlTICAgICAgICAgICA0CisjZGVmaW5lIEFfUEhZU19MMkNBQ0hFX1RPVEFMX1NJWkUgICAgICAgX1NCX01BS0U2NCgweDAwMDAwODAwMDApCisjZGVmaW5lIEFfUEhZU19MMkNBQ0hFX1dBWTAgICAgICAgICAgICAgX1NCX01BS0U2NCgweDAwRDAxODAwMDApCisjZGVmaW5lIEFfUEhZU19MMkNBQ0hFX1dBWTEgICAgICAgICAgICAgX1NCX01BS0U2NCgweDAwRDAxQTAwMDApCisjZGVmaW5lIEFfUEhZU19MMkNBQ0hFX1dBWTIgICAgICAgICAgICAgX1NCX01BS0U2NCgweDAwRDAxQzAwMDApCisjZGVmaW5lIEFfUEhZU19MMkNBQ0hFX1dBWTMgICAgICAgICAgICAgX1NCX01BS0U2NCgweDAwRDAxRTAwMDApCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NpYnl0ZS9zYjEyNTBfc2NkLmggYi9pbmNsdWRlL2FzbS1taXBzL3NpYnl0ZS9zYjEyNTBfc2NkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJlODA0MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc2lieXRlL3NiMTI1MF9zY2QuaApAQCAtMCwwICsxLDU4MiBAQAorLyogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICogIFNCMTI1MCBCb2FyZCBTdXBwb3J0IFBhY2thZ2UKKyAgICAqICAKKyAgICAqICBTQ0QgQ29uc3RhbnRzIGFuZCBNYWNyb3MJCQlGaWxlOiBzYjEyNTBfc2NkLmgKKyAgICAqICAKKyAgICAqICBUaGlzIG1vZHVsZSBjb250YWlucyBjb25zdGFudHMgYW5kIG1hY3JvcyB1c2VmdWwgZm9yCisgICAgKiAgbWFuaXB1bGF0aW5nIHRoZSBTeXN0ZW0gQ29udHJvbCBhbmQgRGVidWcgbW9kdWxlIG9uIHRoZSAxMjUwLgorICAgICogIAorICAgICogIFNCMTI1MCBzcGVjaWZpY2F0aW9uIGxldmVsOiAgVXNlcidzIG1hbnVhbCAxLzAyLzAyCisgICAgKiAgCisgICAgKiAgQXV0aG9yOiAgTWl0Y2ggTGljaHRlbmJlcmcKKyAgICAqICAKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIAorICAgICoKKyAgICAqICBDb3B5cmlnaHQgMjAwMCwyMDAxLDIwMDIsMjAwMworICAgICogIEJyb2FkY29tIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICAgICogIAorICAgICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgCisgICAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgCisgICAgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgCisgICAgKiAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgICAgKgorICAgICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICAgKgorICAgICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCAKKyAgICAqICBNQSAwMjExMS0xMzA3IFVTQQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisjaWZuZGVmIF9TQjEyNTBfU0NEX0gKKyNkZWZpbmUgX1NCMTI1MF9TQ0RfSAorCisjaW5jbHVkZSAic2IxMjUwX2RlZnMuaCIKKworLyogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICogIFN5c3RlbSBjb250cm9sL2RlYnVnIHJlZ2lzdGVycworICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisvKgorICogU3lzdGVtIFJldmlzaW9uIFJlZ2lzdGVyIChUYWJsZSA0LTEpCisgKi8KKworI2RlZmluZSBNX1NZU19SRVNFUlZFRAkJICAgIF9TQl9NQUtFTUFTSyg4LDApCisKKyNkZWZpbmUgU19TWVNfUkVWSVNJT04gICAgICAgICAgICAgIF9TQl9NQUtFNjQoOCkKKyNkZWZpbmUgTV9TWVNfUkVWSVNJT04gICAgICAgICAgICAgIF9TQl9NQUtFTUFTSyg4LFNfU1lTX1JFVklTSU9OKQorI2RlZmluZSBWX1NZU19SRVZJU0lPTih4KSAgICAgICAgICAgX1NCX01BS0VWQUxVRSh4LFNfU1lTX1JFVklTSU9OKQorI2RlZmluZSBHX1NZU19SRVZJU0lPTih4KSAgICAgICAgICAgX1NCX0dFVFZBTFVFKHgsU19TWVNfUkVWSVNJT04sTV9TWVNfUkVWSVNJT04pCisKKyNpZiBTSUJZVEVfSERSX0ZFQVRVUkVfQ0hJUCgxMjUwKQorI2RlZmluZSBLX1NZU19SRVZJU0lPTl9CQ00xMjUwX1BBU1MxCTEKKyNkZWZpbmUgS19TWVNfUkVWSVNJT05fQkNNMTI1MF9QQVNTMgkzCisjZGVmaW5lIEtfU1lTX1JFVklTSU9OX0JDTTEyNTBfQTEwCTExCisjZGVmaW5lIEtfU1lTX1JFVklTSU9OX0JDTTEyNTBfUEFTUzJfMgkxNgorI2RlZmluZSBLX1NZU19SRVZJU0lPTl9CQ00xMjUwX0IyCTE3CisjZGVmaW5lIEtfU1lTX1JFVklTSU9OX0JDTTEyNTBfUEFTUzMJMzIKKyNkZWZpbmUgS19TWVNfUkVWSVNJT05fQkNNMTI1MF9DMQkzMworCisvKiBYWFg6IGRpc2NvdXJhZ2UgcGVvcGxlIGZyb20gdXNpbmcgdGhlc2UgY29uc3RhbnRzLiAgKi8KKyNkZWZpbmUgS19TWVNfUkVWSVNJT05fUEFTUzEJICAgIEtfU1lTX1JFVklTSU9OX0JDTTEyNTBfUEFTUzEKKyNkZWZpbmUgS19TWVNfUkVWSVNJT05fUEFTUzIJICAgIEtfU1lTX1JFVklTSU9OX0JDTTEyNTBfUEFTUzIKKyNkZWZpbmUgS19TWVNfUkVWSVNJT05fUEFTUzJfMgkgICAgS19TWVNfUkVWSVNJT05fQkNNMTI1MF9QQVNTMl8yCisjZGVmaW5lIEtfU1lTX1JFVklTSU9OX1BBU1MzCSAgICBLX1NZU19SRVZJU0lPTl9CQ00xMjUwX1BBU1MzCisjZW5kaWYgLyogMTI1MCAqLworCisjaWYgU0lCWVRFX0hEUl9GRUFUVVJFX0NISVAoMTEyeCkKKyNkZWZpbmUgS19TWVNfUkVWSVNJT05fQkNNMTEyeF9BMQkzMgorI2RlZmluZSBLX1NZU19SRVZJU0lPTl9CQ00xMTJ4X0EyCTMzCisjZW5kaWYgLyogMTEyeCAqLworCisvKiBYWFg6IGRpc2NvdXJhZ2UgcGVvcGxlIGZyb20gdXNpbmcgdGhlc2UgY29uc3RhbnRzLiAgKi8KKyNkZWZpbmUgU19TWVNfUEFSVCAgICAgICAgICAgICAgICAgIF9TQl9NQUtFNjQoMTYpCisjZGVmaW5lIE1fU1lTX1BBUlQgICAgICAgICAgICAgICAgICBfU0JfTUFLRU1BU0soMTYsU19TWVNfUEFSVCkKKyNkZWZpbmUgVl9TWVNfUEFSVCh4KSAgICAgICAgICAgICAgIF9TQl9NQUtFVkFMVUUoeCxTX1NZU19QQVJUKQorI2RlZmluZSBHX1NZU19QQVJUKHgpICAgICAgICAgICAgICAgX1NCX0dFVFZBTFVFKHgsU19TWVNfUEFSVCxNX1NZU19QQVJUKQorCisvKiBYWFg6IGRpc2NvdXJhZ2UgcGVvcGxlIGZyb20gdXNpbmcgdGhlc2UgY29uc3RhbnRzLiAgKi8KKyNkZWZpbmUgS19TWVNfUEFSVF9TQjEyNTAgICAgICAgICAgIDB4MTI1MAorI2RlZmluZSBLX1NZU19QQVJUX0JDTTExMjAgICAgICAgICAgMHgxMTIxCisjZGVmaW5lIEtfU1lTX1BBUlRfQkNNMTEyNSAgICAgICAgICAweDExMjMKKyNkZWZpbmUgS19TWVNfUEFSVF9CQ00xMTI1SCAgICAgICAgIDB4MTEyNAorCisvKiBUaGUgInBlcmlwaGVyYWwgc2V0IiAoU09DIHR5cGUpIGlzIHRoZSBsb3cgNCBiaXRzIG9mIHRoZSAicGFydCIgZmllbGQuICAqLworI2RlZmluZSBTX1NZU19TT0NfVFlQRSAgICAgICAgICAgICAgX1NCX01BS0U2NCgxNikKKyNkZWZpbmUgTV9TWVNfU09DX1RZUEUgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSyg0LFNfU1lTX1NPQ19UWVBFKQorI2RlZmluZSBWX1NZU19TT0NfVFlQRSh4KSAgICAgICAgICAgX1NCX01BS0VWQUxVRSh4LFNfU1lTX1NPQ19UWVBFKQorI2RlZmluZSBHX1NZU19TT0NfVFlQRSh4KSAgICAgICAgICAgX1NCX0dFVFZBTFVFKHgsU19TWVNfU09DX1RZUEUsTV9TWVNfU09DX1RZUEUpCisKKyNkZWZpbmUgS19TWVNfU09DX1RZUEVfQkNNMTI1MCAgICAgIDB4MAorI2RlZmluZSBLX1NZU19TT0NfVFlQRV9CQ00xMTIwICAgICAgMHgxCisjZGVmaW5lIEtfU1lTX1NPQ19UWVBFX0JDTTEyNTBfQUxUICAweDIJCS8qIDEyNTBwYXNzMiB3LyAxLzQgTDIuICAqLworI2RlZmluZSBLX1NZU19TT0NfVFlQRV9CQ00xMTI1ICAgICAgMHgzCisjZGVmaW5lIEtfU1lTX1NPQ19UWVBFX0JDTTExMjVIICAgICAweDQKKyNkZWZpbmUgS19TWVNfU09DX1RZUEVfQkNNMTI1MF9BTFQyIDB4NQkJLyogMTI1MHBhc3MyIHcvIDEvMiBMMi4gICovCisKKy8qCisgKiBDYWxjdWxhdGUgY29ycmVjdCBTT0MgdHlwZSBnaXZlbiBhIGNvcHkgb2Ygc3lzdGVtIHJldmlzaW9uIHJlZ2lzdGVyLgorICoKKyAqIChGb3IgdGhlIGFzc2VtYmxlciB2ZXJzaW9uLCBzeXNyZXYgYW5kIGRlc3QgbWF5IGJlIHRoZSBzYW1lIHJlZ2lzdGVyLgorICogQWxzbywgaXQgY2xvYmJlcnMgQVQuKQorICovCisjaWZkZWYgX19BU1NFTUJMRVJfXworI2RlZmluZSBTWVNfU09DX1RZUEUoZGVzdCwgc3lzcmV2KQkJCQkJXAorCS5zZXQgcHVzaCA7CQkJCQkJCVwKKwkuc2V0IHJlb3JkZXIgOwkJCQkJCQlcCisJZHNybAlkZXN0LCBzeXNyZXYsIFNfU1lTX1NPQ19UWVBFIDsJCQkJXAorCWFuZGkJZGVzdCwgZGVzdCwgKE1fU1lTX1NPQ19UWVBFID4+IFNfU1lTX1NPQ19UWVBFKTsJCVwKKwliZXEJZGVzdCwgS19TWVNfU09DX1RZUEVfQkNNMTI1MF9BTFQsIDk5MWYgOwkJXAorCWJlcQlkZXN0LCBLX1NZU19TT0NfVFlQRV9CQ00xMjUwX0FMVDIsIDk5MWYJIDsJCVwKKwliCTk5MmYgOwkJCQkJCQlcCis5OTE6CWxpCWRlc3QsIEtfU1lTX1NPQ19UWVBFX0JDTTEyNTAgOwkJCQlcCis5OTI6CQkJCQkJCQkJXAorCS5zZXQgcG9wCisjZWxzZQorI2RlZmluZSBTWVNfU09DX1RZUEUoc3lzcmV2KQkJCQkJCVwKKwkoKEdfU1lTX1NPQ19UWVBFKHN5c3JldikgPT0gS19TWVNfU09DX1RZUEVfQkNNMTI1MF9BTFQJCVwKKwkgIHx8IEdfU1lTX1NPQ19UWVBFKHN5c3JldikgPT0gS19TWVNfU09DX1RZUEVfQkNNMTI1MF9BTFQyKQlcCisJID8gS19TWVNfU09DX1RZUEVfQkNNMTI1MCA6IEdfU1lTX1NPQ19UWVBFKHN5c3JldikpCisjZW5kaWYKKworI2RlZmluZSBTX1NZU19XSUQgICAgICAgICAgICAgICAgICAgX1NCX01BS0U2NCgzMikKKyNkZWZpbmUgTV9TWVNfV0lEICAgICAgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSygzMixTX1NZU19XSUQpCisjZGVmaW5lIFZfU1lTX1dJRCh4KSAgICAgICAgICAgICAgICBfU0JfTUFLRVZBTFVFKHgsU19TWVNfV0lEKQorI2RlZmluZSBHX1NZU19XSUQoeCkgICAgICAgICAgICAgICAgX1NCX0dFVFZBTFVFKHgsU19TWVNfV0lELE1fU1lTX1dJRCkKKworLyogU3lzdGVtIE1hbnVmYWN0dXJpbmcgUmVnaXN0ZXIKKyogUmVnaXN0ZXI6IFNDRF9TWVNURU1fTUFOVUYKKyovCisgCisvKiBXYWZlciBJRDogYml0cyAzMTowICovCisjZGVmaW5lIFNfU1lTX1dBRkVSSUQxXzIwMCAgICAgICAgX1NCX01BS0U2NCgwKQorI2RlZmluZSBNX1NZU19XQUZFUklEMV8yMDAgICAgICAgIF9TQl9NQUtFTUFTSygzMixTX1NZU19XQUZFUklEMV8yMDApCisjZGVmaW5lIFZfU1lTX1dBRkVSSUQxXzIwMCh4KSAgICAgX1NCX01BS0VWQUxVRSh4LFNfU1lTX1dBRkVSSUQxXzIwMCkKKyNkZWZpbmUgR19TWVNfV0FGRVJJRDFfMjAwKHgpICAgICBfU0JfR0VUVkFMVUUoeCxTX1NZU19XQUZFUklEMV8yMDAsTV9TWVNfV0FGRVJJRDFfMjAwKQorIAorI2RlZmluZSBTX1NZU19CSU4gICAgICAgICAgICAgICAgIF9TQl9NQUtFNjQoMzIpCisjZGVmaW5lIE1fU1lTX0JJTiAgICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLKDQsU19TWVNfQklOKQorI2RlZmluZSBWX1NZU19CSU4gICAgICAgICAgICAgICAgIF9TQl9NQUtFVkFMVUUoeCxTX1NZU19CSU4pCisjZGVmaW5lIEdfU1lTX0JJTiAgICAgICAgICAgICAgICAgX1NCX0dFVFZBTFVFKHgsU19TWVNfQklOLE1fU1lTX0JJTikKKyAKKy8qIFdhZmVyIElEOiBiaXRzIDM5OjM2ICovCisjZGVmaW5lIFNfU1lTX1dBRkVSSUQyXzIwMCAgICAgICAgX1NCX01BS0U2NCgzNikKKyNkZWZpbmUgTV9TWVNfV0FGRVJJRDJfMjAwICAgICAgICBfU0JfTUFLRU1BU0soNCxTX1NZU19XQUZFUklEMl8yMDApCisjZGVmaW5lIFZfU1lTX1dBRkVSSUQyXzIwMCh4KSAgICAgX1NCX01BS0VWQUxVRSh4LFNfU1lTX1dBRkVSSUQyXzIwMCkKKyNkZWZpbmUgR19TWVNfV0FGRVJJRDJfMjAwKHgpICAgICBfU0JfR0VUVkFMVUUoeCxTX1NZU19XQUZFUklEMl8yMDAsTV9TWVNfV0FGRVJJRDJfMjAwKQorIAorLyogV2FmZXIgSUQ6IGJpdHMgMzk6MCAqLworI2RlZmluZSBTX1NZU19XQUZFUklEXzMwMCAgICAgICAgIF9TQl9NQUtFNjQoMCkKKyNkZWZpbmUgTV9TWVNfV0FGRVJJRF8zMDAgICAgICAgICBfU0JfTUFLRU1BU0soNDAsU19TWVNfV0FGRVJJRF8zMDApCisjZGVmaW5lIFZfU1lTX1dBRkVSSURfMzAwKHgpICAgICAgX1NCX01BS0VWQUxVRSh4LFNfU1lTX1dBRkVSSURfMzAwKQorI2RlZmluZSBHX1NZU19XQUZFUklEXzMwMCh4KSAgICAgIF9TQl9HRVRWQUxVRSh4LFNfU1lTX1dBRkVSSURfMzAwLE1fU1lTX1dBRkVSSURfMzAwKQorIAorI2RlZmluZSBTX1NZU19YUE9TICAgICAgICAgICAgICAgIF9TQl9NQUtFNjQoNDApCisjZGVmaW5lIE1fU1lTX1hQT1MgICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLKDYsU19TWVNfWFBPUykKKyNkZWZpbmUgVl9TWVNfWFBPUyh4KSAgICAgICAgICAgICBfU0JfTUFLRVZBTFVFKHgsU19TWVNfWFBPUykKKyNkZWZpbmUgR19TWVNfWFBPUyh4KSAgICAgICAgICAgICBfU0JfR0VUVkFMVUUoeCxTX1NZU19YUE9TLE1fU1lTX1hQT1MpCisgCisjZGVmaW5lIFNfU1lTX1lQT1MgICAgICAgICAgICAgICAgX1NCX01BS0U2NCg0NikKKyNkZWZpbmUgTV9TWVNfWVBPUyAgICAgICAgICAgICAgICBfU0JfTUFLRU1BU0soNixTX1NZU19ZUE9TKQorI2RlZmluZSBWX1NZU19ZUE9TKHgpICAgICAgICAgICAgIF9TQl9NQUtFVkFMVUUoeCxTX1NZU19ZUE9TKQorI2RlZmluZSBHX1NZU19ZUE9TKHgpICAgICAgICAgICAgIF9TQl9HRVRWQUxVRSh4LFNfU1lTX1lQT1MsTV9TWVNfWVBPUykKKyAKKy8qCisgKiBTeXN0ZW0gQ29uZmlnIFJlZ2lzdGVyIChUYWJsZSA0LTIpCisgKiBSZWdpc3RlcjogU0NEX1NZU1RFTV9DRkcKKyAqLworCisjZGVmaW5lIE1fU1lTX0xEVF9QTExfQllQICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDMpCisjZGVmaW5lIE1fU1lTX1BDSV9TWU5DX1RFU1RfTU9ERSAgICBfU0JfTUFLRU1BU0sxKDQpCisjZGVmaW5lIE1fU1lTX0lPQjBfRElWICAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDUpCisjZGVmaW5lIE1fU1lTX0lPQjFfRElWICAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDYpCisKKyNkZWZpbmUgU19TWVNfUExMX0RJViAgICAgICAgICAgICAgIF9TQl9NQUtFNjQoNykKKyNkZWZpbmUgTV9TWVNfUExMX0RJViAgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSyg1LFNfU1lTX1BMTF9ESVYpCisjZGVmaW5lIFZfU1lTX1BMTF9ESVYoeCkgICAgICAgICAgICBfU0JfTUFLRVZBTFVFKHgsU19TWVNfUExMX0RJVikKKyNkZWZpbmUgR19TWVNfUExMX0RJVih4KSAgICAgICAgICAgIF9TQl9HRVRWQUxVRSh4LFNfU1lTX1BMTF9ESVYsTV9TWVNfUExMX0RJVikKKworI2RlZmluZSBNX1NZU19TRVIwX0VOQUJMRSAgICAgICAgICAgX1NCX01BS0VNQVNLMSgxMikKKyNkZWZpbmUgTV9TWVNfU0VSMF9SU1RCX0VOICAgICAgICAgIF9TQl9NQUtFTUFTSzEoMTMpCisjZGVmaW5lIE1fU1lTX1NFUjFfRU5BQkxFICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDE0KQorI2RlZmluZSBNX1NZU19TRVIxX1JTVEJfRU4gICAgICAgICAgX1NCX01BS0VNQVNLMSgxNSkKKyNkZWZpbmUgTV9TWVNfUENNQ0lBX0VOQUJMRSAgICAgICAgIF9TQl9NQUtFTUFTSzEoMTYpCisKKyNkZWZpbmUgU19TWVNfQk9PVF9NT0RFICAgICAgICAgICAgIF9TQl9NQUtFNjQoMTcpCisjZGVmaW5lIE1fU1lTX0JPT1RfTU9ERSAgICAgICAgICAgICBfU0JfTUFLRU1BU0soMixTX1NZU19CT09UX01PREUpCisjZGVmaW5lIFZfU1lTX0JPT1RfTU9ERSh4KSAgICAgICAgICBfU0JfTUFLRVZBTFVFKHgsU19TWVNfQk9PVF9NT0RFKQorI2RlZmluZSBHX1NZU19CT09UX01PREUoeCkgICAgICAgICAgX1NCX0dFVFZBTFVFKHgsU19TWVNfQk9PVF9NT0RFLE1fU1lTX0JPT1RfTU9ERSkKKyNkZWZpbmUgS19TWVNfQk9PVF9NT0RFX1JPTTMyICAgICAgIDAKKyNkZWZpbmUgS19TWVNfQk9PVF9NT0RFX1JPTTggICAgICAgIDEKKyNkZWZpbmUgS19TWVNfQk9PVF9NT0RFX1NNQlVTX1NNQUxMIDIKKyNkZWZpbmUgS19TWVNfQk9PVF9NT0RFX1NNQlVTX0JJRyAgIDMKKworI2RlZmluZSBNX1NZU19QQ0lfSE9TVCAgICAgICAgICAgICAgX1NCX01BS0VNQVNLMSgxOSkKKyNkZWZpbmUgTV9TWVNfUENJX0FSQklURVIgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoMjApCisjZGVmaW5lIE1fU1lTX1NPVVRIX09OX0xEVCAgICAgICAgICBfU0JfTUFLRU1BU0sxKDIxKQorI2RlZmluZSBNX1NZU19CSUdfRU5ESUFOICAgICAgICAgICAgX1NCX01BS0VNQVNLMSgyMikKKyNkZWZpbmUgTV9TWVNfR0VOQ0xLX0VOICAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoMjMpCisjZGVmaW5lIE1fU1lTX0xEVF9URVNUX0VOICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDI0KQorI2RlZmluZSBNX1NZU19HRU5fUEFSSVRZX0VOICAgICAgICAgX1NCX01BS0VNQVNLMSgyNSkKKworI2RlZmluZSBTX1NZU19DT05GSUcgICAgICAgICAgICAgICAgMjYKKyNkZWZpbmUgTV9TWVNfQ09ORklHICAgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSyg2LFNfU1lTX0NPTkZJRykKKyNkZWZpbmUgVl9TWVNfQ09ORklHKHgpICAgICAgICAgICAgIF9TQl9NQUtFVkFMVUUoeCxTX1NZU19DT05GSUcpCisjZGVmaW5lIEdfU1lTX0NPTkZJRyh4KSAgICAgICAgICAgICBfU0JfR0VUVkFMVUUoeCxTX1NZU19DT05GSUcsTV9TWVNfQ09ORklHKQorCisvKiBUaGUgZm9sbG93aW5nIGJpdHMgYXJlIHdyaXRlYWJsZSBieSBKVEFHIG9ubHkuICovCisKKyNkZWZpbmUgTV9TWVNfQ0xLU1RPUCAgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoMzIpCisjZGVmaW5lIE1fU1lTX0NMS1NURVAgICAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDMzKQorCisjZGVmaW5lIFNfU1lTX0NMS0NPVU5UICAgICAgICAgICAgICAzNAorI2RlZmluZSBNX1NZU19DTEtDT1VOVCAgICAgICAgICAgICAgX1NCX01BS0VNQVNLKDgsU19TWVNfQ0xLQ09VTlQpCisjZGVmaW5lIFZfU1lTX0NMS0NPVU5UKHgpICAgICAgICAgICBfU0JfTUFLRVZBTFVFKHgsU19TWVNfQ0xLQ09VTlQpCisjZGVmaW5lIEdfU1lTX0NMS0NPVU5UKHgpICAgICAgICAgICBfU0JfR0VUVkFMVUUoeCxTX1NZU19DTEtDT1VOVCxNX1NZU19DTEtDT1VOVCkKKworI2RlZmluZSBNX1NZU19QTExfQllQQVNTICAgICAgICAgICAgX1NCX01BS0VNQVNLMSg0MikKKworI2RlZmluZSBTX1NZU19QTExfSVJFRgkJICAgIDQzCisjZGVmaW5lIE1fU1lTX1BMTF9JUkVGCQkgICAgX1NCX01BS0VNQVNLKDIsU19TWVNfUExMX0lSRUYpCisKKyNkZWZpbmUgU19TWVNfUExMX1ZDTwkJICAgIDQ1CisjZGVmaW5lIE1fU1lTX1BMTF9WQ08JCSAgICBfU0JfTUFLRU1BU0soMixTX1NZU19QTExfVkNPKQorCisjZGVmaW5lIFNfU1lTX1BMTF9WUkVHCQkgICAgNDcKKyNkZWZpbmUgTV9TWVNfUExMX1ZSRUcJCSAgICBfU0JfTUFLRU1BU0soMixTX1NZU19QTExfVlJFRykKKworI2RlZmluZSBNX1NZU19NRU1fUkVTRVQgICAgICAgICAgICAgX1NCX01BS0VNQVNLMSg0OSkKKyNkZWZpbmUgTV9TWVNfTDJDX1JFU0VUICAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoNTApCisjZGVmaW5lIE1fU1lTX0lPX1JFU0VUXzAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDUxKQorI2RlZmluZSBNX1NZU19JT19SRVNFVF8xICAgICAgICAgICAgX1NCX01BS0VNQVNLMSg1MikKKyNkZWZpbmUgTV9TWVNfU0NEX1JFU0VUICAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoNTMpCisKKy8qIEVuZCBvZiBiaXRzIHdyaXRhYmxlIGJ5IEpUQUcgb25seS4gKi8KKworI2RlZmluZSBNX1NZU19DUFVfUkVTRVRfMCAgICAgICAgICAgX1NCX01BS0VNQVNLMSg1NCkKKyNkZWZpbmUgTV9TWVNfQ1BVX1JFU0VUXzEgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoNTUpCisKKyNkZWZpbmUgTV9TWVNfVU5JQ1BVMCAgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoNTYpCisjZGVmaW5lIE1fU1lTX1VOSUNQVTEgICAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDU3KQorCisjZGVmaW5lIE1fU1lTX1NCX1NPRlRSRVMgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDU4KQorI2RlZmluZSBNX1NZU19FWFRfUkVTRVQgICAgICAgICAgICAgX1NCX01BS0VNQVNLMSg1OSkKKyNkZWZpbmUgTV9TWVNfU1lTVEVNX1JFU0VUICAgICAgICAgIF9TQl9NQUtFTUFTSzEoNjApCisKKyNkZWZpbmUgTV9TWVNfTUlTUl9NT0RFICAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoNjEpCisjZGVmaW5lIE1fU1lTX01JU1JfUkVTRVQgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDYyKQorCisjaWYgU0lCWVRFX0hEUl9GRUFUVVJFKDEyNTAsIFBBU1MyKSB8fCBTSUJZVEVfSERSX0ZFQVRVUkUoMTEyeCwgUEFTUzEpCisjZGVmaW5lIE1fU1lTX1NXX0ZMQUcJCSAgICBfU0JfTUFLRU1BU0sxKDYzKQorI2VuZGlmIC8qIDEyNTAgUEFTUzIgfHwgMTEyeCBQQVNTMSAqLworCisKKy8qCisgKiBNYWlsYm94IFJlZ2lzdGVycyAoVGFibGUgNC0zKQorICogUmVnaXN0ZXJzOiBTQ0RfTUJPWF9DUFVfeAorICovCisKKyNkZWZpbmUgU19NQk9YX0lOVF8zICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgTV9NQk9YX0lOVF8zICAgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSygxNixTX01CT1hfSU5UXzMpCisjZGVmaW5lIFNfTUJPWF9JTlRfMiAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBNX01CT1hfSU5UXzIgICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLKDE2LFNfTUJPWF9JTlRfMikKKyNkZWZpbmUgU19NQk9YX0lOVF8xICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIE1fTUJPWF9JTlRfMSAgICAgICAgICAgICAgICBfU0JfTUFLRU1BU0soMTYsU19NQk9YX0lOVF8xKQorI2RlZmluZSBTX01CT1hfSU5UXzAgICAgICAgICAgICAgICAgNDgKKyNkZWZpbmUgTV9NQk9YX0lOVF8wICAgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSygxNixTX01CT1hfSU5UXzApCisKKy8qCisgKiBXYXRjaGRvZyBSZWdpc3RlcnMgKFRhYmxlIDQtOCkgKFRhYmxlIDQtOSkgKFRhYmxlIDQtMTApCisgKiBSZWdpc3RlcnM6IFNDRF9XRE9HX0lOSVRfQ05UX3gKKyAqLworCisjZGVmaW5lIFZfU0NEX1dET0dfRlJFUSAgICAgICAgICAgICAxMDAwMDAwCisKKyNkZWZpbmUgU19TQ0RfV0RPR19JTklUICAgICAgICAgICAgIDAKKyNkZWZpbmUgTV9TQ0RfV0RPR19JTklUICAgICAgICAgICAgIF9TQl9NQUtFTUFTSygyMyxTX1NDRF9XRE9HX0lOSVQpCisKKyNkZWZpbmUgU19TQ0RfV0RPR19DTlQgICAgICAgICAgICAgIDAKKyNkZWZpbmUgTV9TQ0RfV0RPR19DTlQgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSygyMyxTX1NDRF9XRE9HX0NOVCkKKworI2RlZmluZSBTX1NDRF9XRE9HX0VOQUJMRSAgICAgICAgICAgMAorI2RlZmluZSBNX1NDRF9XRE9HX0VOQUJMRSAgICAgICAgICAgX1NCX01BS0VNQVNLMShTX1NDRF9XRE9HX0VOQUJMRSkKKworI2RlZmluZSBTX1NDRF9XRE9HX1JFU0VUX1RZUEUgICAgICAgMgorI2RlZmluZSBNX1NDRF9XRE9HX1JFU0VUX1RZUEUgICAgICAgX1NCX01BS0VNQVNLKDMsU19TQ0RfV0RPR19SRVNFVF9UWVBFKQorI2RlZmluZSBWX1NDRF9XRE9HX1JFU0VUX1RZUEUoeCkgICAgX1NCX01BS0VWQUxVRSh4LFNfU0NEX1dET0dfUkVTRVRfVFlQRSkKKyNkZWZpbmUgR19TQ0RfV0RPR19SRVNFVF9UWVBFKHgpICAgIF9TQl9HRVRWQUxVRSh4LFNfU0NEX1dET0dfUkVTRVRfVFlQRSxNX1NDRF9XRE9HX1JFU0VUX1RZUEUpCisKKyNkZWZpbmUgS19TQ0RfV0RPR19SRVNFVF9GVUxMICAgICAgIDAJLyogYWN0dWFsbHksICh4ICYgMSkgPT0gMCAgKi8KKyNkZWZpbmUgS19TQ0RfV0RPR19SRVNFVF9TT0ZUICAgICAgIDEKKyNkZWZpbmUgS19TQ0RfV0RPR19SRVNFVF9DUFUwICAgICAgIDMKKyNkZWZpbmUgS19TQ0RfV0RPR19SRVNFVF9DUFUxICAgICAgIDUKKyNkZWZpbmUgS19TQ0RfV0RPR19SRVNFVF9CT1RIX0NQVVMgIDcKKworLyogVGhpcyBmZWF0dXJlIGlzIHByZXNlbnQgaW4gMTI1MCBDMCBhbmQgbGF0ZXIsIGJ1dCAqbm90KiBpbiAxMTJ4IEEgcmV2cy4gICovCisjaWYgU0lCWVRFX0hEUl9GRUFUVVJFKDEyNTAsIFBBU1MzKQorI2RlZmluZSBTX1NDRF9XRE9HX0hBU19SRVNFVCAgICAgICAgOAorI2RlZmluZSBNX1NDRF9XRE9HX0hBU19SRVNFVCAgICAgICAgX1NCX01BS0VNQVNLMShTX1NDRF9XRE9HX0hBU19SRVNFVCkKKyNlbmRpZgorCisKKy8qCisgKiBUaW1lciBSZWdpc3RlcnMgKFRhYmxlIDQtMTEpIChUYWJsZSA0LTEyKSAoVGFibGUgNC0xMykKKyAqLworCisjZGVmaW5lIFZfU0NEX1RJTUVSX0ZSRVEgICAgICAgICAgICAxMDAwMDAwCisKKyNkZWZpbmUgU19TQ0RfVElNRVJfSU5JVCAgICAgICAgICAgIDAKKyNkZWZpbmUgTV9TQ0RfVElNRVJfSU5JVCAgICAgICAgICAgIF9TQl9NQUtFTUFTSygyMCxTX1NDRF9USU1FUl9JTklUKQorI2RlZmluZSBWX1NDRF9USU1FUl9JTklUKHgpICAgICAgICAgX1NCX01BS0VWQUxVRSh4LFNfU0NEX1RJTUVSX0lOSVQpCisjZGVmaW5lIEdfU0NEX1RJTUVSX0lOSVQoeCkgICAgICAgICBfU0JfR0VUVkFMVUUoeCxTX1NDRF9USU1FUl9JTklULE1fU0NEX1RJTUVSX0lOSVQpCisKKyNkZWZpbmUgU19TQ0RfVElNRVJfQ05UICAgICAgICAgICAgIDAKKyNkZWZpbmUgTV9TQ0RfVElNRVJfQ05UICAgICAgICAgICAgIF9TQl9NQUtFTUFTSygyMCxTX1NDRF9USU1FUl9DTlQpCisjZGVmaW5lIFZfU0NEX1RJTUVSX0NOVCh4KSAgICAgICAgIF9TQl9NQUtFVkFMVUUoeCxTX1NDRF9USU1FUl9DTlQpCisjZGVmaW5lIEdfU0NEX1RJTUVSX0NOVCh4KSAgICAgICAgIF9TQl9HRVRWQUxVRSh4LFNfU0NEX1RJTUVSX0NOVCxNX1NDRF9USU1FUl9DTlQpCisKKyNkZWZpbmUgTV9TQ0RfVElNRVJfRU5BQkxFICAgICAgICAgIF9TQl9NQUtFTUFTSzEoMCkKKyNkZWZpbmUgTV9TQ0RfVElNRVJfTU9ERSAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoMSkKKyNkZWZpbmUgTV9TQ0RfVElNRVJfTU9ERV9DT05USU5VT1VTIE1fU0NEX1RJTUVSX01PREUKKworLyoKKyAqIFN5c3RlbSBQZXJmb3JtYW5jZSBDb3VudGVycworICovCisKKyNkZWZpbmUgU19TUENfQ0ZHX1NSQzAgICAgICAgICAgICAwCisjZGVmaW5lIE1fU1BDX0NGR19TUkMwICAgICAgICAgICAgX1NCX01BS0VNQVNLKDgsU19TUENfQ0ZHX1NSQzApCisjZGVmaW5lIFZfU1BDX0NGR19TUkMwKHgpICAgICAgICAgX1NCX01BS0VWQUxVRSh4LFNfU1BDX0NGR19TUkMwKQorI2RlZmluZSBHX1NQQ19DRkdfU1JDMCh4KSAgICAgICAgIF9TQl9HRVRWQUxVRSh4LFNfU1BDX0NGR19TUkMwLE1fU1BDX0NGR19TUkMwKQorCisjZGVmaW5lIFNfU1BDX0NGR19TUkMxICAgICAgICAgICAgOAorI2RlZmluZSBNX1NQQ19DRkdfU1JDMSAgICAgICAgICAgIF9TQl9NQUtFTUFTSyg4LFNfU1BDX0NGR19TUkMxKQorI2RlZmluZSBWX1NQQ19DRkdfU1JDMSh4KSAgICAgICAgIF9TQl9NQUtFVkFMVUUoeCxTX1NQQ19DRkdfU1JDMSkKKyNkZWZpbmUgR19TUENfQ0ZHX1NSQzEoeCkgICAgICAgICBfU0JfR0VUVkFMVUUoeCxTX1NQQ19DRkdfU1JDMSxNX1NQQ19DRkdfU1JDMSkKKworI2RlZmluZSBTX1NQQ19DRkdfU1JDMiAgICAgICAgICAgIDE2CisjZGVmaW5lIE1fU1BDX0NGR19TUkMyICAgICAgICAgICAgX1NCX01BS0VNQVNLKDgsU19TUENfQ0ZHX1NSQzIpCisjZGVmaW5lIFZfU1BDX0NGR19TUkMyKHgpICAgICAgICAgX1NCX01BS0VWQUxVRSh4LFNfU1BDX0NGR19TUkMyKQorI2RlZmluZSBHX1NQQ19DRkdfU1JDMih4KSAgICAgICAgIF9TQl9HRVRWQUxVRSh4LFNfU1BDX0NGR19TUkMyLE1fU1BDX0NGR19TUkMyKQorCisjZGVmaW5lIFNfU1BDX0NGR19TUkMzICAgICAgICAgICAgMjQKKyNkZWZpbmUgTV9TUENfQ0ZHX1NSQzMgICAgICAgICAgICBfU0JfTUFLRU1BU0soOCxTX1NQQ19DRkdfU1JDMykKKyNkZWZpbmUgVl9TUENfQ0ZHX1NSQzMoeCkgICAgICAgICBfU0JfTUFLRVZBTFVFKHgsU19TUENfQ0ZHX1NSQzMpCisjZGVmaW5lIEdfU1BDX0NGR19TUkMzKHgpICAgICAgICAgX1NCX0dFVFZBTFVFKHgsU19TUENfQ0ZHX1NSQzMsTV9TUENfQ0ZHX1NSQzMpCisKKyNkZWZpbmUgTV9TUENfQ0ZHX0NMRUFSCQlfU0JfTUFLRU1BU0sxKDMyKQorI2RlZmluZSBNX1NQQ19DRkdfRU5BQkxFCV9TQl9NQUtFTUFTSzEoMzMpCisKKworLyoKKyAqIEJ1cyBXYXRjaGVyCisgKi8KKworI2RlZmluZSBTX1NDRF9CRVJSX1RJRCAgICAgICAgICAgIDgKKyNkZWZpbmUgTV9TQ0RfQkVSUl9USUQgICAgICAgICAgICBfU0JfTUFLRU1BU0soMTAsU19TQ0RfQkVSUl9USUQpCisjZGVmaW5lIFZfU0NEX0JFUlJfVElEKHgpICAgICAgICAgX1NCX01BS0VWQUxVRSh4LFNfU0NEX0JFUlJfVElEKQorI2RlZmluZSBHX1NDRF9CRVJSX1RJRCh4KSAgICAgICAgIF9TQl9HRVRWQUxVRSh4LFNfU0NEX0JFUlJfVElELE1fU0NEX0JFUlJfVElEKQorCisjZGVmaW5lIFNfU0NEX0JFUlJfUklEICAgICAgICAgICAgMTgKKyNkZWZpbmUgTV9TQ0RfQkVSUl9SSUQgICAgICAgICAgICBfU0JfTUFLRU1BU0soNCxTX1NDRF9CRVJSX1JJRCkKKyNkZWZpbmUgVl9TQ0RfQkVSUl9SSUQoeCkgICAgICAgICBfU0JfTUFLRVZBTFVFKHgsU19TQ0RfQkVSUl9SSUQpCisjZGVmaW5lIEdfU0NEX0JFUlJfUklEKHgpICAgICAgICAgX1NCX0dFVFZBTFVFKHgsU19TQ0RfQkVSUl9SSUQsTV9TQ0RfQkVSUl9SSUQpCisKKyNkZWZpbmUgU19TQ0RfQkVSUl9EQ09ERSAgICAgICAgICAyMgorI2RlZmluZSBNX1NDRF9CRVJSX0RDT0RFICAgICAgICAgIF9TQl9NQUtFTUFTSygzLFNfU0NEX0JFUlJfRENPREUpCisjZGVmaW5lIFZfU0NEX0JFUlJfRENPREUoeCkgICAgICAgX1NCX01BS0VWQUxVRSh4LFNfU0NEX0JFUlJfRENPREUpCisjZGVmaW5lIEdfU0NEX0JFUlJfRENPREUoeCkgICAgICAgX1NCX0dFVFZBTFVFKHgsU19TQ0RfQkVSUl9EQ09ERSxNX1NDRF9CRVJSX0RDT0RFKQorCisjZGVmaW5lIE1fU0NEX0JFUlJfTVVMVEVSUlMgICAgICAgX1NCX01BS0VNQVNLMSgzMCkKKworCisjZGVmaW5lIFNfU0NEX0wyRUNDX0NPUlJfRCAgICAgICAgMAorI2RlZmluZSBNX1NDRF9MMkVDQ19DT1JSX0QgICAgICAgIF9TQl9NQUtFTUFTSyg4LFNfU0NEX0wyRUNDX0NPUlJfRCkKKyNkZWZpbmUgVl9TQ0RfTDJFQ0NfQ09SUl9EKHgpICAgICBfU0JfTUFLRVZBTFVFKHgsU19TQ0RfTDJFQ0NfQ09SUl9EKQorI2RlZmluZSBHX1NDRF9MMkVDQ19DT1JSX0QoeCkgICAgIF9TQl9HRVRWQUxVRSh4LFNfU0NEX0wyRUNDX0NPUlJfRCxNX1NDRF9MMkVDQ19DT1JSX0QpCisKKyNkZWZpbmUgU19TQ0RfTDJFQ0NfQkFEX0QgICAgICAgICA4CisjZGVmaW5lIE1fU0NEX0wyRUNDX0JBRF9EICAgICAgICAgX1NCX01BS0VNQVNLKDgsU19TQ0RfTDJFQ0NfQkFEX0QpCisjZGVmaW5lIFZfU0NEX0wyRUNDX0JBRF9EKHgpICAgICAgX1NCX01BS0VWQUxVRSh4LFNfU0NEX0wyRUNDX0JBRF9EKQorI2RlZmluZSBHX1NDRF9MMkVDQ19CQURfRCh4KSAgICAgIF9TQl9HRVRWQUxVRSh4LFNfU0NEX0wyRUNDX0JBRF9ELE1fU0NEX0wyRUNDX0JBRF9EKQorCisjZGVmaW5lIFNfU0NEX0wyRUNDX0NPUlJfVCAgICAgICAgMTYKKyNkZWZpbmUgTV9TQ0RfTDJFQ0NfQ09SUl9UICAgICAgICBfU0JfTUFLRU1BU0soOCxTX1NDRF9MMkVDQ19DT1JSX1QpCisjZGVmaW5lIFZfU0NEX0wyRUNDX0NPUlJfVCh4KSAgICAgX1NCX01BS0VWQUxVRSh4LFNfU0NEX0wyRUNDX0NPUlJfVCkKKyNkZWZpbmUgR19TQ0RfTDJFQ0NfQ09SUl9UKHgpICAgICBfU0JfR0VUVkFMVUUoeCxTX1NDRF9MMkVDQ19DT1JSX1QsTV9TQ0RfTDJFQ0NfQ09SUl9UKQorCisjZGVmaW5lIFNfU0NEX0wyRUNDX0JBRF9UICAgICAgICAgMjQKKyNkZWZpbmUgTV9TQ0RfTDJFQ0NfQkFEX1QgICAgICAgICBfU0JfTUFLRU1BU0soOCxTX1NDRF9MMkVDQ19CQURfVCkKKyNkZWZpbmUgVl9TQ0RfTDJFQ0NfQkFEX1QoeCkgICAgICBfU0JfTUFLRVZBTFVFKHgsU19TQ0RfTDJFQ0NfQkFEX1QpCisjZGVmaW5lIEdfU0NEX0wyRUNDX0JBRF9UKHgpICAgICAgX1NCX0dFVFZBTFVFKHgsU19TQ0RfTDJFQ0NfQkFEX1QsTV9TQ0RfTDJFQ0NfQkFEX1QpCisKKyNkZWZpbmUgU19TQ0RfTUVNX0VDQ19DT1JSICAgICAgICAwCisjZGVmaW5lIE1fU0NEX01FTV9FQ0NfQ09SUiAgICAgICAgX1NCX01BS0VNQVNLKDgsU19TQ0RfTUVNX0VDQ19DT1JSKQorI2RlZmluZSBWX1NDRF9NRU1fRUNDX0NPUlIoeCkgICAgIF9TQl9NQUtFVkFMVUUoeCxTX1NDRF9NRU1fRUNDX0NPUlIpCisjZGVmaW5lIEdfU0NEX01FTV9FQ0NfQ09SUih4KSAgICAgX1NCX0dFVFZBTFVFKHgsU19TQ0RfTUVNX0VDQ19DT1JSLE1fU0NEX01FTV9FQ0NfQ09SUikKKworI2RlZmluZSBTX1NDRF9NRU1fRUNDX0JBRCAgICAgICAgIDgKKyNkZWZpbmUgTV9TQ0RfTUVNX0VDQ19CQUQgICAgICAgICBfU0JfTUFLRU1BU0soOCxTX1NDRF9NRU1fRUNDX0JBRCkKKyNkZWZpbmUgVl9TQ0RfTUVNX0VDQ19CQUQoeCkgICAgICBfU0JfTUFLRVZBTFVFKHgsU19TQ0RfTUVNX0VDQ19CQUQpCisjZGVmaW5lIEdfU0NEX01FTV9FQ0NfQkFEKHgpICAgICAgX1NCX0dFVFZBTFVFKHgsU19TQ0RfTUVNX0VDQ19CQUQsTV9TQ0RfTUVNX0VDQ19CQUQpCisKKyNkZWZpbmUgU19TQ0RfTUVNX0JVU0VSUiAgICAgICAgICAxNgorI2RlZmluZSBNX1NDRF9NRU1fQlVTRVJSICAgICAgICAgIF9TQl9NQUtFTUFTSyg4LFNfU0NEX01FTV9CVVNFUlIpCisjZGVmaW5lIFZfU0NEX01FTV9CVVNFUlIoeCkgICAgICAgX1NCX01BS0VWQUxVRSh4LFNfU0NEX01FTV9CVVNFUlIpCisjZGVmaW5lIEdfU0NEX01FTV9CVVNFUlIoeCkgICAgICAgX1NCX0dFVFZBTFVFKHgsU19TQ0RfTUVNX0JVU0VSUixNX1NDRF9NRU1fQlVTRVJSKQorCisKKy8qCisgKiBBZGRyZXNzIFRyYXAgUmVnaXN0ZXJzCisgKi8KKworI2RlZmluZSBNX0FUUkFQX0lOREVYCQkgIF9TQl9NQUtFTUFTSyg0LDApCisjZGVmaW5lIE1fQVRSQVBfQUREUkVTUwkJICBfU0JfTUFLRU1BU0soNDAsMCkKKworI2RlZmluZSBTX0FUUkFQX0NGR19DTlQgICAgICAgICAgICAwCisjZGVmaW5lIE1fQVRSQVBfQ0ZHX0NOVCAgICAgICAgICAgIF9TQl9NQUtFTUFTSygzLFNfQVRSQVBfQ0ZHX0NOVCkKKyNkZWZpbmUgVl9BVFJBUF9DRkdfQ05UKHgpICAgICAgICAgX1NCX01BS0VWQUxVRSh4LFNfQVRSQVBfQ0ZHX0NOVCkKKyNkZWZpbmUgR19BVFJBUF9DRkdfQ05UKHgpICAgICAgICAgX1NCX0dFVFZBTFVFKHgsU19BVFJBUF9DRkdfQ05ULE1fQVRSQVBfQ0ZHX0NOVCkKKworI2RlZmluZSBNX0FUUkFQX0NGR19XUklURQkgICBfU0JfTUFLRU1BU0sxKDMpCisjZGVmaW5lIE1fQVRSQVBfQ0ZHX0FMTAkgIAkgICBfU0JfTUFLRU1BU0sxKDQpCisjZGVmaW5lIE1fQVRSQVBfQ0ZHX0lOVgkgICAJICAgX1NCX01BS0VNQVNLMSg1KQorI2RlZmluZSBNX0FUUkFQX0NGR19VU0VTUkMJICAgX1NCX01BS0VNQVNLMSg2KQorI2RlZmluZSBNX0FUUkFQX0NGR19TUkNJTlYJICAgX1NCX01BS0VNQVNLMSg3KQorCisjZGVmaW5lIFNfQVRSQVBfQ0ZHX0FHRU5USUQgICAgIDgKKyNkZWZpbmUgTV9BVFJBUF9DRkdfQUdFTlRJRCAgICAgX1NCX01BS0VNQVNLKDQsU19BVFJBUF9DRkdfQUdFTlRJRCkKKyNkZWZpbmUgVl9BVFJBUF9DRkdfQUdFTlRJRCh4KSAgX1NCX01BS0VWQUxVRSh4LFNfQVRSQVBfQ0ZHX0FHRU5USUQpCisjZGVmaW5lIEdfQVRSQVBfQ0ZHX0FHRU5USUQoeCkgIF9TQl9HRVRWQUxVRSh4LFNfQVRSQVBfQ0ZHX0FHRU5USUQsTV9BVFJBUF9DRkdfQUdFTlRJRCkKKworI2RlZmluZSBLX0JVU19BR0VOVF9DUFUwCTAKKyNkZWZpbmUgS19CVVNfQUdFTlRfQ1BVMQkxCisjZGVmaW5lIEtfQlVTX0FHRU5UX0lPQjAJMgorI2RlZmluZSBLX0JVU19BR0VOVF9JT0IxCTMKKyNkZWZpbmUgS19CVVNfQUdFTlRfU0NECTQKKyNkZWZpbmUgS19CVVNfQUdFTlRfUkVTRVJWRUQJNQorI2RlZmluZSBLX0JVU19BR0VOVF9MMkMJNgorI2RlZmluZSBLX0JVU19BR0VOVF9NQwk3CisKKyNkZWZpbmUgU19BVFJBUF9DRkdfQ0FUVFIgICAgIDEyCisjZGVmaW5lIE1fQVRSQVBfQ0ZHX0NBVFRSICAgICBfU0JfTUFLRU1BU0soMyxTX0FUUkFQX0NGR19DQVRUUikKKyNkZWZpbmUgVl9BVFJBUF9DRkdfQ0FUVFIoeCkgIF9TQl9NQUtFVkFMVUUoeCxTX0FUUkFQX0NGR19DQVRUUikKKyNkZWZpbmUgR19BVFJBUF9DRkdfQ0FUVFIoeCkgIF9TQl9HRVRWQUxVRSh4LFNfQVRSQVBfQ0ZHX0NBVFRSLE1fQVRSQVBfQ0ZHX0NBVFRSKQorCisjZGVmaW5lIEtfQVRSQVBfQ0ZHX0NBVFRSX0lHTk9SRQkwCisjZGVmaW5lIEtfQVRSQVBfQ0ZHX0NBVFRSX1VOQyAgICAJMQorI2RlZmluZSBLX0FUUkFQX0NGR19DQVRUUl9DQUNIRUFCTEUJMgorI2RlZmluZSBLX0FUUkFQX0NGR19DQVRUUl9OT05DT0ggIAkzCisjZGVmaW5lIEtfQVRSQVBfQ0ZHX0NBVFRSX0NPSEVSRU5UCTQKKyNkZWZpbmUgS19BVFJBUF9DRkdfQ0FUVFJfTk9UVU5DCTUKKyNkZWZpbmUgS19BVFJBUF9DRkdfQ0FUVFJfTk9UTk9OQ09ICTYKKyNkZWZpbmUgS19BVFJBUF9DRkdfQ0FUVFJfTk9UQ09IRVJFTlQgICA3CisKKy8qCisgKiBUcmFjZSBCdWZmZXIgQ29uZmlnIHJlZ2lzdGVyCisgKi8KKworI2RlZmluZSBNX1NDRF9UUkFDRV9DRkdfUkVTRVQgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoMCkKKyNkZWZpbmUgTV9TQ0RfVFJBQ0VfQ0ZHX1NUQVJUX1JFQUQgICAgICBfU0JfTUFLRU1BU0sxKDEpCisjZGVmaW5lIE1fU0NEX1RSQUNFX0NGR19TVEFSVCAgICAgICAgICAgX1NCX01BS0VNQVNLMSgyKQorI2RlZmluZSBNX1NDRF9UUkFDRV9DRkdfU1RPUCAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoMykKKyNkZWZpbmUgTV9TQ0RfVFJBQ0VfQ0ZHX0ZSRUVaRSAgICAgICAgICBfU0JfTUFLRU1BU0sxKDQpCisjZGVmaW5lIE1fU0NEX1RSQUNFX0NGR19GUkVFWkVfRlVMTCAgICAgX1NCX01BS0VNQVNLMSg1KQorI2RlZmluZSBNX1NDRF9UUkFDRV9DRkdfREVCVUdfRlVMTCAgICAgIF9TQl9NQUtFTUFTSzEoNikKKyNkZWZpbmUgTV9TQ0RfVFJBQ0VfQ0ZHX0ZVTEwgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDcpCisjaWYgU0lCWVRFX0hEUl9GRUFUVVJFKDEyNTAsIFBBU1MyKSB8fCBTSUJZVEVfSERSX0ZFQVRVUkUoMTEyeCwgUEFTUzEpCisjZGVmaW5lIE1fU0NEX1RSQUNFX0NGR19GT1JDRUNOVCAgICAgICAgX1NCX01BS0VNQVNLMSg4KQorI2VuZGlmIC8qIDEyNTAgUEFTUzIgfHwgMTEyeCBQQVNTMSAqLworCisjZGVmaW5lIFNfU0NEX1RSQUNFX0NGR19DVVJfQUREUiAgICAgICAgMTAKKyNkZWZpbmUgTV9TQ0RfVFJBQ0VfQ0ZHX0NVUl9BRERSICAgICAgICBfU0JfTUFLRU1BU0soOCxTX1NDRF9UUkFDRV9DRkdfQ1VSX0FERFIpCisjZGVmaW5lIFZfU0NEX1RSQUNFX0NGR19DVVJfQUREUih4KSAgICAgX1NCX01BS0VWQUxVRSh4LFNfU0NEX1RSQUNFX0NGR19DVVJfQUREUikKKyNkZWZpbmUgR19TQ0RfVFJBQ0VfQ0ZHX0NVUl9BRERSKHgpICAgICBfU0JfR0VUVkFMVUUoeCxTX1NDRF9UUkFDRV9DRkdfQ1VSX0FERFIsTV9TQ0RfVFJBQ0VfQ0ZHX0NVUl9BRERSKQorCisvKgorICogVHJhY2UgRXZlbnQgcmVnaXN0ZXJzCisgKi8KKworI2RlZmluZSBTX1NDRF9UUkVWVF9BRERSX01BVENIICAgICAgICAgIDAKKyNkZWZpbmUgTV9TQ0RfVFJFVlRfQUREUl9NQVRDSCAgICAgICAgICBfU0JfTUFLRU1BU0soNCxTX1NDRF9UUkVWVF9BRERSX01BVENIKQorI2RlZmluZSBWX1NDRF9UUkVWVF9BRERSX01BVENIKHgpICAgICAgIF9TQl9NQUtFVkFMVUUoeCxTX1NDRF9UUkVWVF9BRERSX01BVENIKQorI2RlZmluZSBHX1NDRF9UUkVWVF9BRERSX01BVENIKHgpICAgICAgIF9TQl9HRVRWQUxVRSh4LFNfU0NEX1RSRVZUX0FERFJfTUFUQ0gsTV9TQ0RfVFJFVlRfQUREUl9NQVRDSCkKKworI2RlZmluZSBNX1NDRF9UUkVWVF9SRVFJRF9NQVRDSCAgICAgICAgIF9TQl9NQUtFTUFTSzEoNCkKKyNkZWZpbmUgTV9TQ0RfVFJFVlRfREFUQUlEX01BVENIICAgICAgICBfU0JfTUFLRU1BU0sxKDUpCisjZGVmaW5lIE1fU0NEX1RSRVZUX1JFU1BJRF9NQVRDSCAgICAgICAgX1NCX01BS0VNQVNLMSg2KQorI2RlZmluZSBNX1NDRF9UUkVWVF9JTlRFUlJVUFQgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoNykKKyNkZWZpbmUgTV9TQ0RfVFJFVlRfREVCVUdfUElOICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDkpCisjZGVmaW5lIE1fU0NEX1RSRVZUX1dSSVRFICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLMSgxMCkKKyNkZWZpbmUgTV9TQ0RfVFJFVlRfUkVBRCAgICAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDExKQorCisjZGVmaW5lIFNfU0NEX1RSRVZUX1JFUUlEICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgTV9TQ0RfVFJFVlRfUkVRSUQgICAgICAgICAgICAgICBfU0JfTUFLRU1BU0soNCxTX1NDRF9UUkVWVF9SRVFJRCkKKyNkZWZpbmUgVl9TQ0RfVFJFVlRfUkVRSUQoeCkgICAgICAgICAgICBfU0JfTUFLRVZBTFVFKHgsU19TQ0RfVFJFVlRfUkVRSUQpCisjZGVmaW5lIEdfU0NEX1RSRVZUX1JFUUlEKHgpICAgICAgICAgICAgX1NCX0dFVFZBTFVFKHgsU19TQ0RfVFJFVlRfUkVRSUQsTV9TQ0RfVFJFVlRfUkVRSUQpCisKKyNkZWZpbmUgU19TQ0RfVFJFVlRfUkVTUElEICAgICAgICAgICAgICAxNgorI2RlZmluZSBNX1NDRF9UUkVWVF9SRVNQSUQgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSyg0LFNfU0NEX1RSRVZUX1JFU1BJRCkKKyNkZWZpbmUgVl9TQ0RfVFJFVlRfUkVTUElEKHgpICAgICAgICAgICBfU0JfTUFLRVZBTFVFKHgsU19TQ0RfVFJFVlRfUkVTUElEKQorI2RlZmluZSBHX1NDRF9UUkVWVF9SRVNQSUQoeCkgICAgICAgICAgIF9TQl9HRVRWQUxVRSh4LFNfU0NEX1RSRVZUX1JFU1BJRCxNX1NDRF9UUkVWVF9SRVNQSUQpCisKKyNkZWZpbmUgU19TQ0RfVFJFVlRfREFUQUlEICAgICAgICAgICAgICAyMAorI2RlZmluZSBNX1NDRF9UUkVWVF9EQVRBSUQgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSyg0LFNfU0NEX1RSRVZUX0RBVEFJRCkKKyNkZWZpbmUgVl9TQ0RfVFJFVlRfREFUQUlEKHgpICAgICAgICAgICBfU0JfTUFLRVZBTFVFKHgsU19TQ0RfVFJFVlRfREFUQUlEKQorI2RlZmluZSBHX1NDRF9UUkVWVF9EQVRBSUQoeCkgICAgICAgICAgIF9TQl9HRVRWQUxVRSh4LFNfU0NEX1RSRVZUX0RBVEFJRCxNX1NDRF9UUkVWVF9EQVRJRCkKKworI2RlZmluZSBTX1NDRF9UUkVWVF9DT1VOVCAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIE1fU0NEX1RSRVZUX0NPVU5UICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLKDgsU19TQ0RfVFJFVlRfQ09VTlQpCisjZGVmaW5lIFZfU0NEX1RSRVZUX0NPVU5UKHgpICAgICAgICAgICAgX1NCX01BS0VWQUxVRSh4LFNfU0NEX1RSRVZUX0NPVU5UKQorI2RlZmluZSBHX1NDRF9UUkVWVF9DT1VOVCh4KSAgICAgICAgICAgIF9TQl9HRVRWQUxVRSh4LFNfU0NEX1RSRVZUX0NPVU5ULE1fU0NEX1RSRVZUX0NPVU5UKQorCisvKgorICogVHJhY2UgU2VxdWVuY2UgcmVnaXN0ZXJzCisgKi8KKworI2RlZmluZSBTX1NDRF9UUlNFUV9FVkVOVDQgICAgICAgICAgICAgIDAKKyNkZWZpbmUgTV9TQ0RfVFJTRVFfRVZFTlQ0ICAgICAgICAgICAgICBfU0JfTUFLRU1BU0soNCxTX1NDRF9UUlNFUV9FVkVOVDQpCisjZGVmaW5lIFZfU0NEX1RSU0VRX0VWRU5UNCh4KSAgICAgICAgICAgX1NCX01BS0VWQUxVRSh4LFNfU0NEX1RSU0VRX0VWRU5UNCkKKyNkZWZpbmUgR19TQ0RfVFJTRVFfRVZFTlQ0KHgpICAgICAgICAgICBfU0JfR0VUVkFMVUUoeCxTX1NDRF9UUlNFUV9FVkVOVDQsTV9TQ0RfVFJTRVFfRVZFTlQ0KQorCisjZGVmaW5lIFNfU0NEX1RSU0VRX0VWRU5UMyAgICAgICAgICAgICAgNAorI2RlZmluZSBNX1NDRF9UUlNFUV9FVkVOVDMgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSyg0LFNfU0NEX1RSU0VRX0VWRU5UMykKKyNkZWZpbmUgVl9TQ0RfVFJTRVFfRVZFTlQzKHgpICAgICAgICAgICBfU0JfTUFLRVZBTFVFKHgsU19TQ0RfVFJTRVFfRVZFTlQzKQorI2RlZmluZSBHX1NDRF9UUlNFUV9FVkVOVDMoeCkgICAgICAgICAgIF9TQl9HRVRWQUxVRSh4LFNfU0NEX1RSU0VRX0VWRU5UMyxNX1NDRF9UUlNFUV9FVkVOVDMpCisKKyNkZWZpbmUgU19TQ0RfVFJTRVFfRVZFTlQyICAgICAgICAgICAgICA4CisjZGVmaW5lIE1fU0NEX1RSU0VRX0VWRU5UMiAgICAgICAgICAgICAgX1NCX01BS0VNQVNLKDQsU19TQ0RfVFJTRVFfRVZFTlQyKQorI2RlZmluZSBWX1NDRF9UUlNFUV9FVkVOVDIoeCkgICAgICAgICAgIF9TQl9NQUtFVkFMVUUoeCxTX1NDRF9UUlNFUV9FVkVOVDIpCisjZGVmaW5lIEdfU0NEX1RSU0VRX0VWRU5UMih4KSAgICAgICAgICAgX1NCX0dFVFZBTFVFKHgsU19TQ0RfVFJTRVFfRVZFTlQyLE1fU0NEX1RSU0VRX0VWRU5UMikKKworI2RlZmluZSBTX1NDRF9UUlNFUV9FVkVOVDEgICAgICAgICAgICAgIDEyCisjZGVmaW5lIE1fU0NEX1RSU0VRX0VWRU5UMSAgICAgICAgICAgICAgX1NCX01BS0VNQVNLKDQsU19TQ0RfVFJTRVFfRVZFTlQxKQorI2RlZmluZSBWX1NDRF9UUlNFUV9FVkVOVDEoeCkgICAgICAgICAgIF9TQl9NQUtFVkFMVUUoeCxTX1NDRF9UUlNFUV9FVkVOVDEpCisjZGVmaW5lIEdfU0NEX1RSU0VRX0VWRU5UMSh4KSAgICAgICAgICAgX1NCX0dFVFZBTFVFKHgsU19TQ0RfVFJTRVFfRVZFTlQxLE1fU0NEX1RSU0VRX0VWRU5UMSkKKworI2RlZmluZSBLX1NDRF9UUlNFUV9FMCAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgS19TQ0RfVFJTRVFfRTEgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEtfU0NEX1RSU0VRX0UyICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBLX1NDRF9UUlNFUV9FMyAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgS19TQ0RfVFJTRVFfRTBfRTEgICAgICAgICAgICAgICA0CisjZGVmaW5lIEtfU0NEX1RSU0VRX0UxX0UyICAgICAgICAgICAgICAgNQorI2RlZmluZSBLX1NDRF9UUlNFUV9FMl9FMyAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgS19TQ0RfVFJTRVFfRTBfRTFfRTIgICAgICAgICAgICA3CisjZGVmaW5lIEtfU0NEX1RSU0VRX0UwX0UxX0UyX0UzICAgICAgICAgOAorI2RlZmluZSBLX1NDRF9UUlNFUV9FMEUxICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgS19TQ0RfVFJTRVFfRTBFMUUyICAgICAgICAgICAgICAxMAorI2RlZmluZSBLX1NDRF9UUlNFUV9FMEUxRTJFMyAgICAgICAgICAgIDExCisjZGVmaW5lIEtfU0NEX1RSU0VRX0UwRTFfRTIgICAgICAgICAgICAgMTIKKyNkZWZpbmUgS19TQ0RfVFJTRVFfRTBFMV9FMkUzICAgICAgICAgICAxMworI2RlZmluZSBLX1NDRF9UUlNFUV9FMEUxX0UyX0UzICAgICAgICAgIDE0CisjZGVmaW5lIEtfU0NEX1RSU0VRX0lHTk9SRUQgICAgICAgICAgICAgMTUKKworI2RlZmluZSBLX1NDRF9UUlNFUV9UUklHR0VSX0FMTCAgICAgICAgIChWX1NDRF9UUlNFUV9FVkVOVDEoS19TQ0RfVFJTRVFfSUdOT1JFRCkgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZfU0NEX1RSU0VRX0VWRU5UMihLX1NDRF9UUlNFUV9JR05PUkVEKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVl9TQ0RfVFJTRVFfRVZFTlQzKEtfU0NEX1RSU0VRX0lHTk9SRUQpIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWX1NDRF9UUlNFUV9FVkVOVDQoS19TQ0RfVFJTRVFfSUdOT1JFRCkpCisKKyNkZWZpbmUgU19TQ0RfVFJTRVFfRlVOQ1RJT04gICAgICAgICAgICAxNgorI2RlZmluZSBNX1NDRF9UUlNFUV9GVU5DVElPTiAgICAgICAgICAgIF9TQl9NQUtFTUFTSyg0LFNfU0NEX1RSU0VRX0ZVTkNUSU9OKQorI2RlZmluZSBWX1NDRF9UUlNFUV9GVU5DVElPTih4KSAgICAgICAgIF9TQl9NQUtFVkFMVUUoeCxTX1NDRF9UUlNFUV9GVU5DVElPTikKKyNkZWZpbmUgR19TQ0RfVFJTRVFfRlVOQ1RJT04oeCkgICAgICAgICBfU0JfR0VUVkFMVUUoeCxTX1NDRF9UUlNFUV9GVU5DVElPTixNX1NDRF9UUlNFUV9GVU5DVElPTikKKworI2RlZmluZSBLX1NDRF9UUlNFUV9GVU5DX05PUCAgICAgICAgICAgIDAKKyNkZWZpbmUgS19TQ0RfVFJTRVFfRlVOQ19TVEFSVCAgICAgICAgICAxCisjZGVmaW5lIEtfU0NEX1RSU0VRX0ZVTkNfU1RPUCAgICAgICAgICAgMgorI2RlZmluZSBLX1NDRF9UUlNFUV9GVU5DX0ZSRUVaRSAgICAgICAgIDMKKworI2RlZmluZSBWX1NDRF9UUlNFUV9GVU5DX05PUCAgICAgICAgICAgIFZfU0NEX1RSU0VRX0ZVTkNUSU9OKEtfU0NEX1RSU0VRX0ZVTkNfTk9QKQorI2RlZmluZSBWX1NDRF9UUlNFUV9GVU5DX1NUQVJUICAgICAgICAgIFZfU0NEX1RSU0VRX0ZVTkNUSU9OKEtfU0NEX1RSU0VRX0ZVTkNfU1RBUlQpCisjZGVmaW5lIFZfU0NEX1RSU0VRX0ZVTkNfU1RPUCAgICAgICAgICAgVl9TQ0RfVFJTRVFfRlVOQ1RJT04oS19TQ0RfVFJTRVFfRlVOQ19TVE9QKQorI2RlZmluZSBWX1NDRF9UUlNFUV9GVU5DX0ZSRUVaRSAgICAgICAgIFZfU0NEX1RSU0VRX0ZVTkNUSU9OKEtfU0NEX1RSU0VRX0ZVTkNfRlJFRVpFKQorCisjZGVmaW5lIE1fU0NEX1RSU0VRX0FTQU1QTEUgICAgICAgICAgICAgX1NCX01BS0VNQVNLMSgxOCkKKyNkZWZpbmUgTV9TQ0RfVFJTRVFfRFNBTVBMRSAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDE5KQorI2RlZmluZSBNX1NDRF9UUlNFUV9ERUJVR1BJTiAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoMjApCisjZGVmaW5lIE1fU0NEX1RSU0VRX0RFQlVHQ1BVICAgICAgICAgICAgX1NCX01BS0VNQVNLMSgyMSkKKyNkZWZpbmUgTV9TQ0RfVFJTRVFfQ0xFQVJVU0UgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDIyKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc2lieXRlL3NiMTI1MF9zbWJ1cy5oIGIvaW5jbHVkZS9hc20tbWlwcy9zaWJ5dGUvc2IxMjUwX3NtYnVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg3Y2JmZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc2lieXRlL3NiMTI1MF9zbWJ1cy5oCkBAIC0wLDAgKzEsMTcwIEBACisvKiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgKiAgU0IxMjUwIEJvYXJkIFN1cHBvcnQgUGFja2FnZQorICAgICogIAorICAgICogIFNNQlVTIENvbnN0YW50cyAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsZTogc2IxMjUwX3NtYnVzLmgKKyAgICAqICAKKyAgICAqICBUaGlzIG1vZHVsZSBjb250YWlucyBjb25zdGFudHMgYW5kIG1hY3JvcyB1c2VmdWwgZm9yIAorICAgICogIG1hbmlwdWxhdGluZyB0aGUgU0IxMjUwJ3MgU01idXMgZGV2aWNlcy4KKyAgICAqICAKKyAgICAqICBTQjEyNTAgc3BlY2lmaWNhdGlvbiBsZXZlbDogIDAxLzAyLzIwMDIKKyAgICAqICAKKyAgICAqICBBdXRob3I6ICBNaXRjaCBMaWNodGVuYmVyZworICAgICogIAorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAgCisgICAgKgorICAgICogIENvcHlyaWdodCAyMDAwLDIwMDEsMjAwMiwyMDAzCisgICAgKiAgQnJvYWRjb20gQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICAgKiAgCisgICAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAKKyAgICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyAKKyAgICAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiAKKyAgICAqICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgICAqCisgICAgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgICAqCisgICAgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIAorICAgICogIE1BIDAyMTExLTEzMDcgVVNBCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKworI2lmbmRlZiBfU0IxMjUwX1NNQlVTX0gKKyNkZWZpbmUgX1NCMTI1MF9TTUJVU19ICisKKyNpbmNsdWRlICJzYjEyNTBfZGVmcy5oIgorCisvKgorICogU01CdXMgQ2xvY2sgRnJlcXVlbmN5IFJlZ2lzdGVyIChUYWJsZSAxNC0yKQorICovCisKKyNkZWZpbmUgU19TTUJfRlJFUV9ESVYgICAgICAgICAgICAgIDAKKyNkZWZpbmUgTV9TTUJfRlJFUV9ESVYgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSygxMyxTX1NNQl9GUkVRX0RJVikKKyNkZWZpbmUgVl9TTUJfRlJFUV9ESVYoeCkgICAgICAgICAgIF9TQl9NQUtFVkFMVUUoeCxTX1NNQl9GUkVRX0RJVikKKworI2RlZmluZSBLX1NNQl9GUkVRXzQwMEtIWgkgICAgMHgxRgorI2RlZmluZSBLX1NNQl9GUkVRXzEwMEtIWgkgICAgMHg3RAorCisjZGVmaW5lIFNfU01CX0NNRCAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIE1fU01CX0NNRCAgICAgICAgICAgICAgICAgICBfU0JfTUFLRU1BU0soOCxTX1NNQl9DTUQpCisjZGVmaW5lIFZfU01CX0NNRCh4KSAgICAgICAgICAgICAgICBfU0JfTUFLRVZBTFVFKHgsU19TTUJfQ01EKQorCisvKgorICogU01CdXMgY29udHJvbCByZWdpc3RlciAoVGFibGUgMTQtNCkKKyAqLworCisjZGVmaW5lIE1fU01CX0VSUl9JTlRSICAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDApCisjZGVmaW5lIE1fU01CX0ZJTklTSF9JTlRSICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDEpCisjZGVmaW5lIE1fU01CX0RBVEFfT1VUICAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDQpCisjZGVmaW5lIE1fU01CX0RBVEFfRElSICAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDUpCisjZGVmaW5lIE1fU01CX0RBVEFfRElSX09VVFBVVCAgICAgICBNX1NNQl9EQVRBX0RJUgorI2RlZmluZSBNX1NNQl9DTEtfT1VUICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLMSg2KQorI2RlZmluZSBNX1NNQl9ESVJFQ1RfRU5BQkxFICAgICAgICAgX1NCX01BS0VNQVNLMSg3KQorCisvKgorICogU01CdXMgc3RhdHVzIHJlZ2lzdGVycyAoVGFibGUgMTQtNSkKKyAqLworCisjZGVmaW5lIE1fU01CX0JVU1kgICAgICAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDApCisjZGVmaW5lIE1fU01CX0VSUk9SICAgICAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDEpCisjZGVmaW5lIE1fU01CX0VSUk9SX1RZUEUgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDIpCisjZGVmaW5lIE1fU01CX1JFRiAgICAgICAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDYpCisjZGVmaW5lIE1fU01CX0RBVEFfSU4gICAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDcpCisKKy8qCisgKiBTTUJ1cyBTdGFydC9Db21tYW5kIHJlZ2lzdGVycyAoVGFibGUgMTQtOSkKKyAqLworCisjZGVmaW5lIFNfU01CX0FERFIgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIE1fU01CX0FERFIgICAgICAgICAgICAgICAgICBfU0JfTUFLRU1BU0soNyxTX1NNQl9BRERSKQorI2RlZmluZSBWX1NNQl9BRERSKHgpICAgICAgICAgICAgICAgX1NCX01BS0VWQUxVRSh4LFNfU01CX0FERFIpCisjZGVmaW5lIEdfU01CX0FERFIoeCkgICAgICAgICAgICAgICBfU0JfR0VUVkFMVUUoeCxTX1NNQl9BRERSLE1fU01CX0FERFIpCisKKyNkZWZpbmUgTV9TTUJfUURBVEEgICAgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoNykKKworI2RlZmluZSBTX1NNQl9UVCAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBNX1NNQl9UVCAgICAgICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLKDMsU19TTUJfVFQpCisjZGVmaW5lIFZfU01CX1RUKHgpICAgICAgICAgICAgICAgICBfU0JfTUFLRVZBTFVFKHgsU19TTUJfVFQpCisjZGVmaW5lIEdfU01CX1RUKHgpICAgICAgICAgICAgICAgICBfU0JfR0VUVkFMVUUoeCxTX1NNQl9UVCxNX1NNQl9UVCkKKworI2RlZmluZSBLX1NNQl9UVF9XUjFCWVRFICAgICAgICAgICAgMAorI2RlZmluZSBLX1NNQl9UVF9XUjJCWVRFICAgICAgICAgICAgMQorI2RlZmluZSBLX1NNQl9UVF9XUjNCWVRFICAgICAgICAgICAgMgorI2RlZmluZSBLX1NNQl9UVF9DTURfUkQxQllURSAgICAgICAgMworI2RlZmluZSBLX1NNQl9UVF9DTURfUkQyQllURSAgICAgICAgNAorI2RlZmluZSBLX1NNQl9UVF9SRDFCWVRFICAgICAgICAgICAgNQorI2RlZmluZSBLX1NNQl9UVF9RVUlDS0NNRCAgICAgICAgICAgNgorI2RlZmluZSBLX1NNQl9UVF9FRVBST01SRUFEICAgICAgICAgNworCisjZGVmaW5lIFZfU01CX1RUX1dSMUJZVEUJICAgIFZfU01CX1RUKEtfU01CX1RUX1dSMUJZVEUpCisjZGVmaW5lIFZfU01CX1RUX1dSMkJZVEUJICAgIFZfU01CX1RUKEtfU01CX1RUX1dSMkJZVEUpCisjZGVmaW5lIFZfU01CX1RUX1dSM0JZVEUJICAgIFZfU01CX1RUKEtfU01CX1RUX1dSM0JZVEUpCisjZGVmaW5lIFZfU01CX1RUX0NNRF9SRDFCWVRFCSAgICBWX1NNQl9UVChLX1NNQl9UVF9DTURfUkQxQllURSkKKyNkZWZpbmUgVl9TTUJfVFRfQ01EX1JEMkJZVEUJICAgIFZfU01CX1RUKEtfU01CX1RUX0NNRF9SRDJCWVRFKQorI2RlZmluZSBWX1NNQl9UVF9SRDFCWVRFCSAgICBWX1NNQl9UVChLX1NNQl9UVF9SRDFCWVRFKQorI2RlZmluZSBWX1NNQl9UVF9RVUlDS0NNRAkgICAgVl9TTUJfVFQoS19TTUJfVFRfUVVJQ0tDTUQpCisjZGVmaW5lIFZfU01CX1RUX0VFUFJPTVJFQUQJICAgIFZfU01CX1RUKEtfU01CX1RUX0VFUFJPTVJFQUQpCisKKyNkZWZpbmUgTV9TTUJfUEVDICAgICAgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoMTUpCisKKy8qCisgKiBTTUJ1cyBEYXRhIFJlZ2lzdGVyIChUYWJsZSAxNC02KSBhbmQgU01CdXMgRXh0cmEgUmVnaXN0ZXIgKFRhYmxlIDE0LTcpCisgKi8KKworI2RlZmluZSBTX1NNQl9MQiAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBNX1NNQl9MQiAgICAgICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLKDgsU19TTUJfTEIpCisjZGVmaW5lIFZfU01CX0xCKHgpICAgICAgICAgICAgICAgICBfU0JfTUFLRVZBTFVFKHgsU19TTUJfTEIpCisKKyNkZWZpbmUgU19TTUJfTUIgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgTV9TTUJfTUIgICAgICAgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSyg4LFNfU01CX01CKQorI2RlZmluZSBWX1NNQl9NQih4KSAgICAgICAgICAgICAgICAgX1NCX01BS0VWQUxVRSh4LFNfU01CX01CKQorCisKKy8qCisgKiBTTUJ1cyBQYWNrZXQgRXJyb3IgQ2hlY2sgcmVnaXN0ZXIgKFRhYmxlIDE0LTgpCisgKi8KKworI2RlZmluZSBTX1NQRUNfUEVDICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBNX1NQRUNfUEVDICAgICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLKDgsU19TUEVDX1BFQykKKyNkZWZpbmUgVl9TUEVDX01CKHgpICAgICAgICAgICAgICAgIF9TQl9NQUtFVkFMVUUoeCxTX1NQRUNfUEVDKQorCisKKyNpZiBTSUJZVEVfSERSX0ZFQVRVUkUoMTI1MCwgUEFTUzIpIHx8IFNJQllURV9IRFJfRkVBVFVSRSgxMTJ4LCBQQVNTMSkKKworI2RlZmluZSBTX1NNQl9DTURIICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBNX1NNQl9DTURIICAgICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLKDgsU19TTUJIX0NNRCkKKyNkZWZpbmUgVl9TTUJfQ01ESCh4KSAgICAgICAgICAgICAgIF9TQl9NQUtFVkFMVUUoeCxTX1NNQkhfQ01EKQorCisjZGVmaW5lIE1fU01CX0VYVEVORAkJICAgIF9TQl9NQUtFTUFTSzEoMTQpCisKKyNkZWZpbmUgTV9TTUJfRElSCQkgICAgX1NCX01BS0VNQVNLMSgxMykKKworI2RlZmluZSBTX1NNQl9ERk1UICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBNX1NNQl9ERk1UICAgICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLKDMsU19TTUJfREZNVCkKKyNkZWZpbmUgVl9TTUJfREZNVCh4KSAgICAgICAgICAgICAgIF9TQl9NQUtFVkFMVUUoeCxTX1NNQl9ERk1UKQorI2RlZmluZSBHX1NNQl9ERk1UKHgpICAgICAgICAgICAgICAgX1NCX0dFVFZBTFVFKHgsU19TTUJfREZNVCxNX1NNQl9ERk1UKQorCisjZGVmaW5lIEtfU01CX0RGTVRfMUJZVEUgICAgICAgICAgICAwCisjZGVmaW5lIEtfU01CX0RGTVRfMkJZVEUgICAgICAgICAgICAxCisjZGVmaW5lIEtfU01CX0RGTVRfM0JZVEUgICAgICAgICAgICAyCisjZGVmaW5lIEtfU01CX0RGTVRfNEJZVEUgICAgICAgICAgICAzCisjZGVmaW5lIEtfU01CX0RGTVRfTk9EQVRBICAgICAgICAgICA0CisjZGVmaW5lIEtfU01CX0RGTVRfQ01ENEJZVEUgICAgICAgICA1CisjZGVmaW5lIEtfU01CX0RGTVRfQ01ENUJZVEUgICAgICAgICA2CisjZGVmaW5lIEtfU01CX0RGTVRfUkVTRVJWRUQgICAgICAgICA3CisKKyNkZWZpbmUgVl9TTUJfREZNVF8xQllURQkgICAgVl9TTUJfREZNVChLX1NNQl9ERk1UXzFCWVRFKQorI2RlZmluZSBWX1NNQl9ERk1UXzJCWVRFCSAgICBWX1NNQl9ERk1UKEtfU01CX0RGTVRfMkJZVEUpCisjZGVmaW5lIFZfU01CX0RGTVRfM0JZVEUJICAgIFZfU01CX0RGTVQoS19TTUJfREZNVF8zQllURSkKKyNkZWZpbmUgVl9TTUJfREZNVF80QllURQkgICAgVl9TTUJfREZNVChLX1NNQl9ERk1UXzRCWVRFKQorI2RlZmluZSBWX1NNQl9ERk1UX05PREFUQQkgICAgVl9TTUJfREZNVChLX1NNQl9ERk1UX05PREFUQSkKKyNkZWZpbmUgVl9TTUJfREZNVF9DTUQ0QllURQkgICAgVl9TTUJfREZNVChLX1NNQl9ERk1UX0NNRDRCWVRFKQorI2RlZmluZSBWX1NNQl9ERk1UX0NNRDVCWVRFCSAgICBWX1NNQl9ERk1UKEtfU01CX0RGTVRfQ01ENUJZVEUpCisjZGVmaW5lIFZfU01CX0RGTVRfUkVTRVJWRUQJICAgIFZfU01CX0RGTVQoS19TTUJfREZNVF9SRVNFUlZFRCkKKworI2VuZGlmIC8qIDEyNTAgUEFTUzIgfHwgMTEyeCBQQVNTMSAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc2lieXRlL3NiMTI1MF9zeW5jc2VyLmggYi9pbmNsdWRlL2FzbS1taXBzL3NpYnl0ZS9zYjEyNTBfc3luY3Nlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkNWU4ZWRkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zaWJ5dGUvc2IxMjUwX3N5bmNzZXIuaApAQCAtMCwwICsxLDE0OCBAQAorLyogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICogIFNCMTI1MCBCb2FyZCBTdXBwb3J0IFBhY2thZ2UKKyAgICAqCisgICAgKiAgU3luY2hyb25vdXMgU2VyaWFsIENvbnN0YW50cyAgICAgICAgICAgICAgRmlsZTogc2IxMjUwX3N5bmNzZXIuaAorICAgICoKKyAgICAqICBUaGlzIG1vZHVsZSBjb250YWlucyBjb25zdGFudHMgYW5kIG1hY3JvcyB1c2VmdWwgZm9yCisgICAgKiAgbWFuaXB1bGF0aW5nIHRoZSBTQjEyNTAncyBTeW5jaHJvbm91cyBTZXJpYWwKKyAgICAqCisgICAgKiAgU0IxMjUwIHNwZWNpZmljYXRpb24gbGV2ZWw6ICBVc2VyJ3MgbWFudWFsIDEvMDIvMDIKKyAgICAqICAKKyAgICAqICBBdXRob3I6ICBNaXRjaCBMaWNodGVuYmVyZworICAgICoKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAqCisgICAgKiAgQ29weXJpZ2h0IDIwMDAsMjAwMSwyMDAyLDIwMDMKKyAgICAqICBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgICAqICAKKyAgICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIAorICAgICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIAorICAgICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIAorICAgICogIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICAgICoKKyAgICAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgICoKKyAgICAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgCisgICAgKiAgTUEgMDIxMTEtMTMwNyBVU0EKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworCisjaWZuZGVmIF9TQjEyNTBfU1lOQ1NFUl9ICisjZGVmaW5lIF9TQjEyNTBfU1lOQ1NFUl9ICisKKyNpbmNsdWRlICJzYjEyNTBfZGVmcy5oIgorCisvKgorICogU2VyaWFsIE1vZGUgQ29uZmlndXJhdGlvbiBSZWdpc3RlcgorICovCisKKyNkZWZpbmUgTV9TWU5DU0VSX0NSQ19NT0RFICAgICAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDApCisjZGVmaW5lIE1fU1lOQ1NFUl9NU0JfRklSU1QgICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLMSgxKQorCisjZGVmaW5lIFNfU1lOQ1NFUl9GTEFHX05VTSAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBNX1NZTkNTRVJfRkxBR19OVU0gICAgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSyg0LFNfU1lOQ1NFUl9GTEFHX05VTSkKKyNkZWZpbmUgVl9TWU5DU0VSX0ZMQUdfTlVNICAgICAgICAgICAgICAgICBfU0JfTUFLRVZBTFVFKHgsU19TWU5DU0VSX0ZMQUdfTlVNKQorCisjZGVmaW5lIE1fU1lOQ1NFUl9GTEFHX0VOICAgICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLMSg2KQorI2RlZmluZSBNX1NZTkNTRVJfSERMQ19FTiAgICAgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoNykKKyNkZWZpbmUgTV9TWU5DU0VSX0xPT1BfTU9ERSAgICAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDgpCisjZGVmaW5lIE1fU1lOQ1NFUl9MT09QQkFDSyAgICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLMSg5KQorCisvKgorICogU2VyaWFsIENsb2NrIFNvdXJjZSBhbmQgTGluZSBJbnRlcmZhY2UgTW9kZSBSZWdpc3RlcgorICovCisKKyNkZWZpbmUgTV9TWU5DU0VSX1JYQ0xLX0lOViAgICAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDApCisjZGVmaW5lIE1fU1lOQ1NFUl9SWENMS19FWFQgICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLMSgxKQorCisjZGVmaW5lIFNfU1lOQ1NFUl9SWFNZTkNfRExZICAgICAgICAgICAgICAgMgorI2RlZmluZSBNX1NZTkNTRVJfUlhTWU5DX0RMWSAgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSygyLFNfU1lOQ1NFUl9SWFNZTkNfRExZKQorI2RlZmluZSBWX1NZTkNTRVJfUlhTWU5DX0RMWSh4KSAgICAgICAgICAgIF9TQl9NQUtFVkFMVUUoeCxTX1NZTkNTRVJfUlhTWU5DX0RMWSkKKworI2RlZmluZSBNX1NZTkNTRVJfUlhTWU5DX0xPVyAgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoNCkKKyNkZWZpbmUgTV9TWU5DU0VSX1JYU1RSQl9MT1cgICAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDUpCisKKyNkZWZpbmUgTV9TWU5DU0VSX1JYU1lOQ19FREdFICAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDYpCisjZGVmaW5lIE1fU1lOQ1NFUl9SWFNZTkNfSU5UICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLMSg3KQorCisjZGVmaW5lIE1fU1lOQ1NFUl9UWENMS19JTlYgICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLMSg4KQorI2RlZmluZSBNX1NZTkNTRVJfVFhDTEtfRVhUICAgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoOSkKKworI2RlZmluZSBTX1NZTkNTRVJfVFhTWU5DX0RMWSAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIE1fU1lOQ1NFUl9UWFNZTkNfRExZICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLKDIsU19TWU5DU0VSX1RYU1lOQ19ETFkpCisjZGVmaW5lIFZfU1lOQ1NFUl9UWFNZTkNfRExZKHgpICAgICAgICAgICAgX1NCX01BS0VWQUxVRSh4LFNfU1lOQ1NFUl9UWFNZTkNfRExZKQorCisjZGVmaW5lIE1fU1lOQ1NFUl9UWFNZTkNfTE9XICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLMSgxMikKKyNkZWZpbmUgTV9TWU5DU0VSX1RYU1RSQl9MT1cgICAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDEzKQorCisjZGVmaW5lIE1fU1lOQ1NFUl9UWFNZTkNfRURHRSAgICAgICAgICAgICAgX1NCX01BS0VNQVNLMSgxNCkKKyNkZWZpbmUgTV9TWU5DU0VSX1RYU1lOQ19JTlQgICAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDE1KQorCisvKgorICogU2VyaWFsIENvbW1hbmQgUmVnaXN0ZXIKKyAqLworCisjZGVmaW5lIE1fU1lOQ1NFUl9DTURfUlhfRU4gICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLMSgwKQorI2RlZmluZSBNX1NZTkNTRVJfQ01EX1RYX0VOICAgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoMSkKKyNkZWZpbmUgTV9TWU5DU0VSX0NNRF9SWF9SRVNFVCAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDIpCisjZGVmaW5lIE1fU1lOQ1NFUl9DTURfVFhfUkVTRVQgICAgICAgICAgICAgX1NCX01BS0VNQVNLMSgzKQorI2RlZmluZSBNX1NZTkNTRVJfQ01EX1RYX1BBVVNFICAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoNSkKKworLyoKKyAqIFNlcmlhbCBETUEgRW5hYmxlIFJlZ2lzdGVyCisgKi8KKworI2RlZmluZSBNX1NZTkNTRVJfRE1BX1JYX0VOICAgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoMCkKKyNkZWZpbmUgTV9TWU5DU0VSX0RNQV9UWF9FTiAgICAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDQpCisKKy8qCisgKiBTZXJpYWwgU3RhdHVzIFJlZ2lzdGVyCisgKi8KKworI2RlZmluZSBNX1NZTkNTRVJfUlhfQ1JDRVJSICAgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoMCkKKyNkZWZpbmUgTV9TWU5DU0VSX1JYX0FCT1JUICAgICAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDEpCisjZGVmaW5lIE1fU1lOQ1NFUl9SWF9PQ1RFVCAgICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLMSgyKQorI2RlZmluZSBNX1NZTkNTRVJfUlhfTE9OR0ZSTSAgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoMykKKyNkZWZpbmUgTV9TWU5DU0VSX1JYX1NIT1JURlJNICAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDQpCisjZGVmaW5lIE1fU1lOQ1NFUl9SWF9PVkVSUlVOICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLMSg1KQorI2RlZmluZSBNX1NZTkNTRVJfUlhfU1lOQ19FUlIgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoNikKKyNkZWZpbmUgTV9TWU5DU0VSX1RYX0NSQ0VSUiAgICAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDgpCisjZGVmaW5lIE1fU1lOQ1NFUl9UWF9VTkRFUlJVTiAgICAgICAgICAgICAgX1NCX01BS0VNQVNLMSg5KQorI2RlZmluZSBNX1NZTkNTRVJfVFhfU1lOQ19FUlIgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoMTApCisjZGVmaW5lIE1fU1lOQ1NFUl9UWF9QQVVTRV9DT01QTEVURSAgICAgICAgX1NCX01BS0VNQVNLMSgxMSkKKyNkZWZpbmUgTV9TWU5DU0VSX1JYX0VPUF9DT1VOVCAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDE2KQorI2RlZmluZSBNX1NZTkNTRVJfUlhfRU9QX1RJTUVSICAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoMTcpCisjZGVmaW5lIE1fU1lOQ1NFUl9SWF9FT1BfU0VFTiAgICAgICAgICAgICAgX1NCX01BS0VNQVNLMSgxOCkKKyNkZWZpbmUgTV9TWU5DU0VSX1JYX0hXTSAgICAgICAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDE5KQorI2RlZmluZSBNX1NZTkNTRVJfUlhfTFdNICAgICAgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoMjApCisjZGVmaW5lIE1fU1lOQ1NFUl9SWF9EU0NSICAgICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLMSgyMSkKKyNkZWZpbmUgTV9TWU5DU0VSX1JYX0RFUlIgICAgICAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDIyKQorI2RlZmluZSBNX1NZTkNTRVJfVFhfRU9QX0NPVU5UICAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoMjQpCisjZGVmaW5lIE1fU1lOQ1NFUl9UWF9FT1BfVElNRVIgICAgICAgICAgICAgX1NCX01BS0VNQVNLMSgyNSkKKyNkZWZpbmUgTV9TWU5DU0VSX1RYX0VPUF9TRUVOICAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDI2KQorI2RlZmluZSBNX1NZTkNTRVJfVFhfSFdNICAgICAgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoMjcpCisjZGVmaW5lIE1fU1lOQ1NFUl9UWF9MV00gICAgICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLMSgyOCkKKyNkZWZpbmUgTV9TWU5DU0VSX1RYX0RTQ1IgICAgICAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDI5KQorI2RlZmluZSBNX1NZTkNTRVJfVFhfREVSUiAgICAgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoMzApCisjZGVmaW5lIE1fU1lOQ1NFUl9UWF9EWkVSTyAgICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLMSgzMSkKKworLyoKKyAqIFNlcXVlbmNlciBUYWJsZSBFbnRyeSBmb3JtYXQKKyAqLworCisjZGVmaW5lIE1fU1lOQ1NFUl9TRVFfTEFTVCAgICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLMSgwKQorI2RlZmluZSBNX1NZTkNTRVJfU0VRX0JZVEUgICAgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoMSkKKworI2RlZmluZSBTX1NZTkNTRVJfU0VRX0NPVU5UICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgTV9TWU5DU0VSX1NFUV9DT1VOVCAgICAgICAgICAgICAgICBfU0JfTUFLRU1BU0soNCxTX1NZTkNTRVJfU0VRX0NPVU5UKQorI2RlZmluZSBWX1NZTkNTRVJfU0VRX0NPVU5UKHgpICAgICAgICAgICAgIF9TQl9NQUtFVkFMVUUoeCxTX1NZTkNTRVJfU0VRX0NPVU5UKQorCisjZGVmaW5lIE1fU1lOQ1NFUl9TRVFfRU5BQkxFICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLMSg2KQorI2RlZmluZSBNX1NZTkNTRVJfU0VRX1NUUk9CRSAgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoNykKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NpYnl0ZS9zYjEyNTBfdWFydC5oIGIvaW5jbHVkZS9hc20tbWlwcy9zaWJ5dGUvc2IxMjUwX3VhcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjU1ZDY5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zaWJ5dGUvc2IxMjUwX3VhcnQuaApAQCAtMCwwICsxLDM1NCBAQAorLyogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICogIFNCMTI1MCBCb2FyZCBTdXBwb3J0IFBhY2thZ2UKKyAgICAqICAKKyAgICAqICBVQVJUIENvbnN0YW50cwkJCQlGaWxlOiBzYjEyNTBfdWFydC5oCisgICAgKiAgCisgICAgKiAgVGhpcyBtb2R1bGUgY29udGFpbnMgY29uc3RhbnRzIGFuZCBtYWNyb3MgdXNlZnVsIGZvciAKKyAgICAqICBtYW5pcHVsYXRpbmcgdGhlIFNCMTI1MCdzIFVBUlRzCisgICAgKgorICAgICogIFNCMTI1MCBzcGVjaWZpY2F0aW9uIGxldmVsOiAgVXNlcidzIG1hbnVhbCAxLzAyLzAyCisgICAgKiAgCisgICAgKiAgQXV0aG9yOiAgTWl0Y2ggTGljaHRlbmJlcmcKKyAgICAqICAKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIAorICAgICoKKyAgICAqICBDb3B5cmlnaHQgMjAwMCwyMDAxLDIwMDIsMjAwMworICAgICogIEJyb2FkY29tIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICAgICogIAorICAgICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgCisgICAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgCisgICAgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgCisgICAgKiAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgICAgKgorICAgICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICAgKgorICAgICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCAKKyAgICAqICBNQSAwMjExMS0xMzA3IFVTQQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisKKyNpZm5kZWYgX1NCMTI1MF9VQVJUX0gKKyNkZWZpbmUgX1NCMTI1MF9VQVJUX0gKKworI2luY2x1ZGUgInNiMTI1MF9kZWZzLmgiCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgICAqIERVQVJUIFJlZ2lzdGVycworICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisvKgorICogRFVBUlQgTW9kZSBSZWdpc3RlciAjMSAoVGFibGUgMTAtMykKKyAqIFJlZ2lzdGVyOiBEVUFSVF9NT0RFX1JFR18xX0EKKyAqIFJlZ2lzdGVyOiBEVUFSVF9NT0RFX1JFR18xX0IKKyAqLworCisjZGVmaW5lIFNfRFVBUlRfQklUU19QRVJfQ0hBUiAgICAgICAwCisjZGVmaW5lIE1fRFVBUlRfQklUU19QRVJfQ0hBUiAgICAgICBfU0JfTUFLRU1BU0soMixTX0RVQVJUX0JJVFNfUEVSX0NIQVIpCisjZGVmaW5lIFZfRFVBUlRfQklUU19QRVJfQ0hBUih4KSAgICBfU0JfTUFLRVZBTFVFKHgsU19EVUFSVF9CSVRTX1BFUl9DSEFSKQorCisjZGVmaW5lIEtfRFVBUlRfQklUU19QRVJfQ0hBUl9SU1YwICAwCisjZGVmaW5lIEtfRFVBUlRfQklUU19QRVJfQ0hBUl9SU1YxICAxCisjZGVmaW5lIEtfRFVBUlRfQklUU19QRVJfQ0hBUl83ICAgICAyCisjZGVmaW5lIEtfRFVBUlRfQklUU19QRVJfQ0hBUl84ICAgICAzCisKKyNkZWZpbmUgVl9EVUFSVF9CSVRTX1BFUl9DSEFSX1JTVjAgIFZfRFVBUlRfQklUU19QRVJfQ0hBUihLX0RVQVJUX0JJVFNfUEVSX0NIQVJfUlNWMCkKKyNkZWZpbmUgVl9EVUFSVF9CSVRTX1BFUl9DSEFSX1JTVjEgIFZfRFVBUlRfQklUU19QRVJfQ0hBUihLX0RVQVJUX0JJVFNfUEVSX0NIQVJfUlNWMSkKKyNkZWZpbmUgVl9EVUFSVF9CSVRTX1BFUl9DSEFSXzcgICAgIFZfRFVBUlRfQklUU19QRVJfQ0hBUihLX0RVQVJUX0JJVFNfUEVSX0NIQVJfNykKKyNkZWZpbmUgVl9EVUFSVF9CSVRTX1BFUl9DSEFSXzggICAgIFZfRFVBUlRfQklUU19QRVJfQ0hBUihLX0RVQVJUX0JJVFNfUEVSX0NIQVJfOCkKKworCisjZGVmaW5lIE1fRFVBUlRfUEFSSVRZX1RZUEVfRVZFTiAgICAweDAwCisjZGVmaW5lIE1fRFVBUlRfUEFSSVRZX1RZUEVfT0REICAgICBfU0JfTUFLRU1BU0sxKDIpCisKKyNkZWZpbmUgU19EVUFSVF9QQVJJVFlfTU9ERSAgICAgICAgICAzCisjZGVmaW5lIE1fRFVBUlRfUEFSSVRZX01PREUgICAgICAgICBfU0JfTUFLRU1BU0soMixTX0RVQVJUX1BBUklUWV9NT0RFKQorI2RlZmluZSBWX0RVQVJUX1BBUklUWV9NT0RFKHgpICAgICAgX1NCX01BS0VWQUxVRSh4LFNfRFVBUlRfUEFSSVRZX01PREUpCisKKyNkZWZpbmUgS19EVUFSVF9QQVJJVFlfTU9ERV9BREQgICAgICAgMAorI2RlZmluZSBLX0RVQVJUX1BBUklUWV9NT0RFX0FERF9GSVhFRCAxCisjZGVmaW5lIEtfRFVBUlRfUEFSSVRZX01PREVfTk9ORSAgICAgIDIKKworI2RlZmluZSBWX0RVQVJUX1BBUklUWV9NT0RFX0FERCAgICAgICBWX0RVQVJUX1BBUklUWV9NT0RFKEtfRFVBUlRfUEFSSVRZX01PREVfQUREKQorI2RlZmluZSBWX0RVQVJUX1BBUklUWV9NT0RFX0FERF9GSVhFRCBWX0RVQVJUX1BBUklUWV9NT0RFKEtfRFVBUlRfUEFSSVRZX01PREVfQUREX0ZJWEVEKQorI2RlZmluZSBWX0RVQVJUX1BBUklUWV9NT0RFX05PTkUgICAgICBWX0RVQVJUX1BBUklUWV9NT0RFKEtfRFVBUlRfUEFSSVRZX01PREVfTk9ORSkKKworI2RlZmluZSBNX0RVQVJUX0VSUl9NT0RFICAgICAgICAgICAgX1NCX01BS0VNQVNLMSg1KSAgICAvKiBtdXN0IGJlIHplcm8gKi8KKworI2RlZmluZSBNX0RVQVJUX1JYX0lSUV9TRUxfUlhSRFkgICAgMAorI2RlZmluZSBNX0RVQVJUX1JYX0lSUV9TRUxfUlhGVUxMICAgX1NCX01BS0VNQVNLMSg2KQorCisjZGVmaW5lIE1fRFVBUlRfUlhfUlRTX0VOQSAgICAgICAgICBfU0JfTUFLRU1BU0sxKDcpCisKKy8qCisgKiBEVUFSVCBNb2RlIFJlZ2lzdGVyICMyIChUYWJsZSAxMC00KQorICogUmVnaXN0ZXI6IERVQVJUX01PREVfUkVHXzJfQQorICogUmVnaXN0ZXI6IERVQVJUX01PREVfUkVHXzJfQgorICovCisKKyNkZWZpbmUgTV9EVUFSVF9NT0RFX1JFU0VSVkVEMSAgICAgIF9TQl9NQUtFTUFTSygzLDApICAgLyogaWdub3JlZCAqLworCisjZGVmaW5lIE1fRFVBUlRfU1RPUF9CSVRfTEVOXzIgICAgICBfU0JfTUFLRU1BU0sxKDMpCisjZGVmaW5lIE1fRFVBUlRfU1RPUF9CSVRfTEVOXzEgICAgICAwCisKKyNkZWZpbmUgTV9EVUFSVF9UWF9DVFNfRU5BICAgICAgICAgIF9TQl9NQUtFTUFTSzEoNCkKKworCisjZGVmaW5lIE1fRFVBUlRfTU9ERV9SRVNFUlZFRDIgICAgICBfU0JfTUFLRU1BU0sxKDUpICAgIC8qIG11c3QgYmUgemVybyAqLworCisjZGVmaW5lIFNfRFVBUlRfQ0hBTl9NT0RFCSAgICA2CisjZGVmaW5lIE1fRFVBUlRfQ0hBTl9NT0RFICAgICAgICAgICBfU0JfTUFLRU1BU0soMixTX0RVQVJUX0NIQU5fTU9ERSkKKyNkZWZpbmUgVl9EVUFSVF9DSEFOX01PREUoeCkJICAgIF9TQl9NQUtFVkFMVUUoeCxTX0RVQVJUX0NIQU5fTU9ERSkKKworI2RlZmluZSBLX0RVQVJUX0NIQU5fTU9ERV9OT1JNQUwgICAgMAorI2RlZmluZSBLX0RVQVJUX0NIQU5fTU9ERV9MQ0xfTE9PUCAgMgorI2RlZmluZSBLX0RVQVJUX0NIQU5fTU9ERV9SRU1fTE9PUCAgMworCisjZGVmaW5lIFZfRFVBUlRfQ0hBTl9NT0RFX05PUk1BTCAgICBWX0RVQVJUX0NIQU5fTU9ERShLX0RVQVJUX0NIQU5fTU9ERV9OT1JNQUwpCisjZGVmaW5lIFZfRFVBUlRfQ0hBTl9NT0RFX0xDTF9MT09QICBWX0RVQVJUX0NIQU5fTU9ERShLX0RVQVJUX0NIQU5fTU9ERV9MQ0xfTE9PUCkKKyNkZWZpbmUgVl9EVUFSVF9DSEFOX01PREVfUkVNX0xPT1AgIFZfRFVBUlRfQ0hBTl9NT0RFKEtfRFVBUlRfQ0hBTl9NT0RFX1JFTV9MT09QKQorCisvKgorICogRFVBUlQgQ29tbWFuZCBSZWdpc3RlciAoVGFibGUgMTAtNSkKKyAqIFJlZ2lzdGVyOiBEVUFSVF9DTURfQQorICogUmVnaXN0ZXI6IERVQVJUX0NNRF9CCisgKi8KKworI2RlZmluZSBNX0RVQVJUX1JYX0VOICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLMSgwKQorI2RlZmluZSBNX0RVQVJUX1JYX0RJUyAgICAgICAgICAgICAgX1NCX01BS0VNQVNLMSgxKQorI2RlZmluZSBNX0RVQVJUX1RYX0VOICAgICAgICAgICAgICAgX1NCX01BS0VNQVNLMSgyKQorI2RlZmluZSBNX0RVQVJUX1RYX0RJUyAgICAgICAgICAgICAgX1NCX01BS0VNQVNLMSgzKQorCisjZGVmaW5lIFNfRFVBUlRfTUlTQ19DTUQJICAgIDQKKyNkZWZpbmUgTV9EVUFSVF9NSVNDX0NNRCAgICAgICAgICAgIF9TQl9NQUtFTUFTSygzLFNfRFVBUlRfTUlTQ19DTUQpCisjZGVmaW5lIFZfRFVBUlRfTUlTQ19DTUQoeCkgICAgICAgICBfU0JfTUFLRVZBTFVFKHgsU19EVUFSVF9NSVNDX0NNRCkKKworI2RlZmluZSBLX0RVQVJUX01JU0NfQ01EX05PQUNUSU9OMCAgICAgICAwCisjZGVmaW5lIEtfRFVBUlRfTUlTQ19DTURfTk9BQ1RJT04xICAgICAgIDEKKyNkZWZpbmUgS19EVUFSVF9NSVNDX0NNRF9SRVNFVF9SWCAgICAgICAgMgorI2RlZmluZSBLX0RVQVJUX01JU0NfQ01EX1JFU0VUX1RYICAgICAgICAzCisjZGVmaW5lIEtfRFVBUlRfTUlTQ19DTURfTk9BQ1RJT040ICAgICAgIDQKKyNkZWZpbmUgS19EVUFSVF9NSVNDX0NNRF9SRVNFVF9CUkVBS19JTlQgNQorI2RlZmluZSBLX0RVQVJUX01JU0NfQ01EX1NUQVJUX0JSRUFLICAgICA2CisjZGVmaW5lIEtfRFVBUlRfTUlTQ19DTURfU1RPUF9CUkVBSyAgICAgIDcKKworI2RlZmluZSBWX0RVQVJUX01JU0NfQ01EX05PQUNUSU9OMCAgICAgICBWX0RVQVJUX01JU0NfQ01EKEtfRFVBUlRfTUlTQ19DTURfTk9BQ1RJT04wKQorI2RlZmluZSBWX0RVQVJUX01JU0NfQ01EX05PQUNUSU9OMSAgICAgICBWX0RVQVJUX01JU0NfQ01EKEtfRFVBUlRfTUlTQ19DTURfTk9BQ1RJT04xKQorI2RlZmluZSBWX0RVQVJUX01JU0NfQ01EX1JFU0VUX1JYICAgICAgICBWX0RVQVJUX01JU0NfQ01EKEtfRFVBUlRfTUlTQ19DTURfUkVTRVRfUlgpCisjZGVmaW5lIFZfRFVBUlRfTUlTQ19DTURfUkVTRVRfVFggICAgICAgIFZfRFVBUlRfTUlTQ19DTUQoS19EVUFSVF9NSVNDX0NNRF9SRVNFVF9UWCkKKyNkZWZpbmUgVl9EVUFSVF9NSVNDX0NNRF9OT0FDVElPTjQgICAgICAgVl9EVUFSVF9NSVNDX0NNRChLX0RVQVJUX01JU0NfQ01EX05PQUNUSU9ONCkKKyNkZWZpbmUgVl9EVUFSVF9NSVNDX0NNRF9SRVNFVF9CUkVBS19JTlQgVl9EVUFSVF9NSVNDX0NNRChLX0RVQVJUX01JU0NfQ01EX1JFU0VUX0JSRUFLX0lOVCkKKyNkZWZpbmUgVl9EVUFSVF9NSVNDX0NNRF9TVEFSVF9CUkVBSyAgICAgVl9EVUFSVF9NSVNDX0NNRChLX0RVQVJUX01JU0NfQ01EX1NUQVJUX0JSRUFLKQorI2RlZmluZSBWX0RVQVJUX01JU0NfQ01EX1NUT1BfQlJFQUsgICAgICBWX0RVQVJUX01JU0NfQ01EKEtfRFVBUlRfTUlTQ19DTURfU1RPUF9CUkVBSykKKworI2RlZmluZSBNX0RVQVJUX0NNRF9SRVNFUlZFRCAgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDcpIAorCisvKgorICogRFVBUlQgU3RhdHVzIFJlZ2lzdGVyIChUYWJsZSAxMC02KQorICogUmVnaXN0ZXI6IERVQVJUX1NUQVRVU19BCisgKiBSZWdpc3RlcjogRFVBUlRfU1RBVFVTX0IKKyAqIFJFQUQtT05MWQorICovCisKKyNkZWZpbmUgTV9EVUFSVF9SWF9SRFkgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoMCkKKyNkZWZpbmUgTV9EVUFSVF9SWF9GRlVMICAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoMSkKKyNkZWZpbmUgTV9EVUFSVF9UWF9SRFkgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoMikKKyNkZWZpbmUgTV9EVUFSVF9UWF9FTVQgICAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoMykKKyNkZWZpbmUgTV9EVUFSVF9PVlJVTl9FUlIgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoNCkKKyNkZWZpbmUgTV9EVUFSVF9QQVJJVFlfRVJSICAgICAgICAgIF9TQl9NQUtFTUFTSzEoNSkKKyNkZWZpbmUgTV9EVUFSVF9GUk1fRVJSICAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoNikKKyNkZWZpbmUgTV9EVUFSVF9SQ1ZEX0JSSyAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoNykKKworLyoKKyAqIERVQVJUIEJhdWQgUmF0ZSBSZWdpc3RlciAoVGFibGUgMTAtNykKKyAqIFJlZ2lzdGVyOiBEVUFSVF9DTEtfU0VMX0EgCisgKiBSZWdpc3RlcjogRFVBUlRfQ0xLX1NFTF9CCisgKi8KKworI2RlZmluZSBNX0RVQVJUX0NMS19DT1VOVEVSICAgICAgICAgX1NCX01BS0VNQVNLKDEyLDApCisjZGVmaW5lIFZfRFVBUlRfQkFVRF9SQVRFKHgpICAgICAgICAoMTAwMDAwMDAwLygoeCkqMjApLTEpCisKKy8qCisgKiBEVUFSVCBEYXRhIFJlZ2lzdGVycyAoVGFibGUgMTAtOCBhbmQgMTAtOSkKKyAqIFJlZ2lzdGVyOiBEVUFSVF9SWF9IT0xEX0EKKyAqIFJlZ2lzdGVyOiBEVUFSVF9SWF9IT0xEX0IKKyAqIFJlZ2lzdGVyOiBEVUFSVF9UWF9IT0xEX0EKKyAqIFJlZ2lzdGVyOiBEVUFSVF9UWF9IT0xEX0IKKyAqLworCisjZGVmaW5lIE1fRFVBUlRfUlhfREFUQSAgICAgICAgICAgICBfU0JfTUFLRU1BU0soOCwwKQorI2RlZmluZSBNX0RVQVJUX1RYX0RBVEEgICAgICAgICAgICAgX1NCX01BS0VNQVNLKDgsMCkKKworLyoKKyAqIERVQVJUIElucHV0IFBvcnQgUmVnaXN0ZXIgKFRhYmxlIDEwLTEwKQorICogUmVnaXN0ZXI6IERVQVJUX0lOX1BPUlQKKyAqLworCisjZGVmaW5lIE1fRFVBUlRfSU5fUElOMF9WQUwgICAgICAgICBfU0JfTUFLRU1BU0sxKDApCisjZGVmaW5lIE1fRFVBUlRfSU5fUElOMV9WQUwgICAgICAgICBfU0JfTUFLRU1BU0sxKDEpCisjZGVmaW5lIE1fRFVBUlRfSU5fUElOMl9WQUwgICAgICAgICBfU0JfTUFLRU1BU0sxKDIpCisjZGVmaW5lIE1fRFVBUlRfSU5fUElOM19WQUwgICAgICAgICBfU0JfTUFLRU1BU0sxKDMpCisjZGVmaW5lIE1fRFVBUlRfSU5fUElONF9WQUwgICAgICAgICBfU0JfTUFLRU1BU0sxKDQpCisjZGVmaW5lIE1fRFVBUlRfSU5fUElONV9WQUwgICAgICAgICBfU0JfTUFLRU1BU0sxKDUpCisjZGVmaW5lIE1fRFVBUlRfUklOMF9QSU4gICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDYpCisjZGVmaW5lIE1fRFVBUlRfUklOMV9QSU4gICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDcpCisKKy8qCisgKiBEVUFSVCBJbnB1dCBQb3J0IENoYW5nZSBTdGF0dXMgUmVnaXN0ZXIgKFRhYmxlcyAxMC0xMSwgMTAtMTIsIGFuZCAxMC0xMykKKyAqIFJlZ2lzdGVyOiBEVUFSVF9JTlBPUlRfQ0hORworICovCisKKyNkZWZpbmUgU19EVUFSVF9JTl9QSU5fVkFMICAgICAgICAgIDAKKyNkZWZpbmUgTV9EVUFSVF9JTl9QSU5fVkFMICAgICAgICAgIF9TQl9NQUtFTUFTSyg0LFNfRFVBUlRfSU5fUElOX1ZBTCkKKworI2RlZmluZSBTX0RVQVJUX0lOX1BJTl9DSE5HICAgICAgICAgNAorI2RlZmluZSBNX0RVQVJUX0lOX1BJTl9DSE5HICAgICAgICAgX1NCX01BS0VNQVNLKDQsU19EVUFSVF9JTl9QSU5fQ0hORykKKworCisvKgorICogRFVBUlQgT3V0cHV0IHBvcnQgY29udHJvbCByZWdpc3RlciAoVGFibGUgMTAtMTQpCisgKiBSZWdpc3RlcjogRFVBUlRfT1BDUgorICovCisKKyNkZWZpbmUgTV9EVUFSVF9PUENSX1JFU0VSVkVEMCAgICAgIF9TQl9NQUtFTUFTSzEoMCkgICAvKiBtdXN0IGJlIHplcm8gKi8KKyNkZWZpbmUgTV9EVUFSVF9PUEMyX1NFTCAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoMSkKKyNkZWZpbmUgTV9EVUFSVF9PUENSX1JFU0VSVkVEMSAgICAgIF9TQl9NQUtFTUFTSzEoMikgICAvKiBtdXN0IGJlIHplcm8gKi8KKyNkZWZpbmUgTV9EVUFSVF9PUEMzX1NFTCAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoMykKKyNkZWZpbmUgTV9EVUFSVF9PUENSX1JFU0VSVkVEMiAgICAgIF9TQl9NQUtFTUFTSyg0LDQpICAvKiBtdXN0IGJlIHplcm8gKi8KKworLyoKKyAqIERVQVJUIEF1eCBDb250cm9sIFJlZ2lzdGVyIChUYWJsZSAxMC0xNSkKKyAqIFJlZ2lzdGVyOiBEVUFSVF9BVVhfQ1RSTAorICovCisKKyNkZWZpbmUgTV9EVUFSVF9JUDBfQ0hOR19FTkEgICAgICAgIF9TQl9NQUtFTUFTSzEoMCkKKyNkZWZpbmUgTV9EVUFSVF9JUDFfQ0hOR19FTkEgICAgICAgIF9TQl9NQUtFTUFTSzEoMSkKKyNkZWZpbmUgTV9EVUFSVF9JUDJfQ0hOR19FTkEgICAgICAgIF9TQl9NQUtFTUFTSzEoMikKKyNkZWZpbmUgTV9EVUFSVF9JUDNfQ0hOR19FTkEgICAgICAgIF9TQl9NQUtFTUFTSzEoMykKKyNkZWZpbmUgTV9EVUFSVF9BQ1JfUkVTRVJWRUQgICAgICAgIF9TQl9NQUtFTUFTSyg0LDQpCisKKyNkZWZpbmUgTV9EVUFSVF9DVFNfQ0hOR19FTkEgICAgICAgIF9TQl9NQUtFTUFTSzEoMCkKKyNkZWZpbmUgTV9EVUFSVF9DSU5fQ0hOR19FTkEgICAgICAgIF9TQl9NQUtFTUFTSzEoMikKKworLyoKKyAqIERVQVJUIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKFRhYmxlIDEwLTE2KQorICogUmVnaXN0ZXI6IERVQVJUX0lTUgorICovCisKKyNkZWZpbmUgTV9EVUFSVF9JU1JfVFhfQSAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoMCkKKyNkZWZpbmUgTV9EVUFSVF9JU1JfUlhfQSAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoMSkKKyNkZWZpbmUgTV9EVUFSVF9JU1JfQlJLX0EgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoMikKKyNkZWZpbmUgTV9EVUFSVF9JU1JfSU5fQSAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoMykKKyNkZWZpbmUgTV9EVUFSVF9JU1JfVFhfQiAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoNCkKKyNkZWZpbmUgTV9EVUFSVF9JU1JfUlhfQiAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoNSkKKyNkZWZpbmUgTV9EVUFSVF9JU1JfQlJLX0IgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoNikKKyNkZWZpbmUgTV9EVUFSVF9JU1JfSU5fQiAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoNykKKworLyoKKyAqIERVQVJUIENoYW5uZWwgQSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIChUYWJsZSAxMC0xNykKKyAqIERVQVJUIENoYW5uZWwgQiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIChUYWJsZSAxMC0xOCkKKyAqIFJlZ2lzdGVyOiBEVUFSVF9JU1JfQQorICogUmVnaXN0ZXI6IERVQVJUX0lTUl9CCisgKi8KKworI2RlZmluZSBNX0RVQVJUX0lTUl9UWCAgICAgICAgICAgICAgX1NCX01BS0VNQVNLMSgwKQorI2RlZmluZSBNX0RVQVJUX0lTUl9SWCAgICAgICAgICAgICAgX1NCX01BS0VNQVNLMSgxKQorI2RlZmluZSBNX0RVQVJUX0lTUl9CUksgICAgICAgICAgICAgX1NCX01BS0VNQVNLMSgyKQorI2RlZmluZSBNX0RVQVJUX0lTUl9JTiAgICAgICAgICAgICAgX1NCX01BS0VNQVNLMSgzKQorI2RlZmluZSBNX0RVQVJUX0lTUl9SRVNFUlZFRCAgICAgICAgX1NCX01BS0VNQVNLKDQsNCkKKworLyoKKyAqIERVQVJUIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIChUYWJsZSAxMC0xOSkKKyAqIFJlZ2lzdGVyOiBEVUFSVF9JTVIKKyAqLworCisjZGVmaW5lIE1fRFVBUlRfSU1SX1RYX0EgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDApCisjZGVmaW5lIE1fRFVBUlRfSU1SX1JYX0EgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDEpCisjZGVmaW5lIE1fRFVBUlRfSU1SX0JSS19BICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDIpCisjZGVmaW5lIE1fRFVBUlRfSU1SX0lOX0EgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDMpCisjZGVmaW5lIE1fRFVBUlRfSU1SX0FMTF9BCSAgICBfU0JfTUFLRU1BU0soNCwwKQorCisjZGVmaW5lIE1fRFVBUlRfSU1SX1RYX0IgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDQpCisjZGVmaW5lIE1fRFVBUlRfSU1SX1JYX0IgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDUpCisjZGVmaW5lIE1fRFVBUlRfSU1SX0JSS19CICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDYpCisjZGVmaW5lIE1fRFVBUlRfSU1SX0lOX0IgICAgICAgICAgICBfU0JfTUFLRU1BU0sxKDcpCisjZGVmaW5lIE1fRFVBUlRfSU1SX0FMTF9CICAgICAgICAgICBfU0JfTUFLRU1BU0soNCw0KQorCisvKgorICogRFVBUlQgQ2hhbm5lbCBBIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIChUYWJsZSAxMC0yMCkKKyAqIERVQVJUIENoYW5uZWwgQiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAoVGFibGUgMTAtMjEpCisgKiBSZWdpc3RlcjogRFVBUlRfSU1SX0EKKyAqIFJlZ2lzdGVyOiBEVUFSVF9JTVJfQgorICovCisKKyNkZWZpbmUgTV9EVUFSVF9JTVJfVFggICAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoMCkKKyNkZWZpbmUgTV9EVUFSVF9JTVJfUlggICAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoMSkKKyNkZWZpbmUgTV9EVUFSVF9JTVJfQlJLICAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoMikKKyNkZWZpbmUgTV9EVUFSVF9JTVJfSU4gICAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoMykKKyNkZWZpbmUgTV9EVUFSVF9JTVJfQUxMCQkgICAgX1NCX01BS0VNQVNLKDQsMCkKKyNkZWZpbmUgTV9EVUFSVF9JTVJfUkVTRVJWRUQgICAgICAgIF9TQl9NQUtFTUFTSyg0LDQpCisKKworLyoKKyAqIERVQVJUIE91dHB1dCBQb3J0IFNldCBSZWdpc3RlciAoVGFibGUgMTAtMjIpCisgKiBSZWdpc3RlcjogRFVBUlRfU0VUX09QUgorICovCisKKyNkZWZpbmUgTV9EVUFSVF9TRVRfT1BSMCAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoMCkKKyNkZWZpbmUgTV9EVUFSVF9TRVRfT1BSMSAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoMSkKKyNkZWZpbmUgTV9EVUFSVF9TRVRfT1BSMiAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoMikKKyNkZWZpbmUgTV9EVUFSVF9TRVRfT1BSMyAgICAgICAgICAgIF9TQl9NQUtFTUFTSzEoMykKKyNkZWZpbmUgTV9EVUFSVF9PUFNSX1JFU0VSVkVEICAgICAgIF9TQl9NQUtFTUFTSyg0LDQpCisKKy8qCisgKiBEVUFSVCBPdXRwdXQgUG9ydCBDbGVhciBSZWdpc3RlciAoVGFibGUgMTAtMjMpCisgKiBSZWdpc3RlcjogRFVBUlRfQ0xFQVJfT1BSCisgKi8KKworI2RlZmluZSBNX0RVQVJUX0NMUl9PUFIwICAgICAgICAgICAgX1NCX01BS0VNQVNLMSgwKQorI2RlZmluZSBNX0RVQVJUX0NMUl9PUFIxICAgICAgICAgICAgX1NCX01BS0VNQVNLMSgxKQorI2RlZmluZSBNX0RVQVJUX0NMUl9PUFIyICAgICAgICAgICAgX1NCX01BS0VNQVNLMSgyKQorI2RlZmluZSBNX0RVQVJUX0NMUl9PUFIzICAgICAgICAgICAgX1NCX01BS0VNQVNLMSgzKQorI2RlZmluZSBNX0RVQVJUX09QQ1JfUkVTRVJWRUQgICAgICAgX1NCX01BS0VNQVNLKDQsNCkKKworLyoKKyAqIERVQVJUIE91dHB1dCBQb3J0IFJUUyBSZWdpc3RlciAoVGFibGUgMTAtMjQpCisgKiBSZWdpc3RlcjogRFVBUlRfT1VUX1BPUlQKKyAqLworCisjZGVmaW5lIE1fRFVBUlRfT1VUX1BJTl9TRVQwICAgICAgICBfU0JfTUFLRU1BU0sxKDApCisjZGVmaW5lIE1fRFVBUlRfT1VUX1BJTl9TRVQxICAgICAgICBfU0JfTUFLRU1BU0sxKDEpCisjZGVmaW5lIE1fRFVBUlRfT1VUX1BJTl9DTFIwICAgICAgICBfU0JfTUFLRU1BU0sxKDIpCisjZGVmaW5lIE1fRFVBUlRfT1VUX1BJTl9DTFIxICAgICAgICBfU0JfTUFLRU1BU0sxKDMpCisjZGVmaW5lIE1fRFVBUlRfT1BSUl9SRVNFUlZFRCAgICAgICBfU0JfTUFLRU1BU0soNCw0KQorCisjZGVmaW5lIE1fRFVBUlRfT1VUX1BJTl9TRVQoY2hhbikgXAorICAgIChjaGFuID09IDAgPyBNX0RVQVJUX09VVF9QSU5fU0VUMCA6IE1fRFVBUlRfT1VUX1BJTl9TRVQxKQorI2RlZmluZSBNX0RVQVJUX09VVF9QSU5fQ0xSKGNoYW4pIFwKKyAgICAoY2hhbiA9PSAwID8gTV9EVUFSVF9PVVRfUElOX0NMUjAgOiBNX0RVQVJUX09VVF9QSU5fQ0xSMSkKKworI2lmIFNJQllURV9IRFJfRkVBVFVSRSgxMjUwLCBQQVNTMikgfHwgU0lCWVRFX0hEUl9GRUFUVVJFKDExMngsIFBBU1MxKQorLyogCisgKiBGdWxsIEludGVycnVwdCBDb250cm9sIFJlZ2lzdGVyCisgKi8KKworI2RlZmluZSBTX0RVQVJUX1NJR19GVUxMICAgICAgICAgICBfU0JfTUFLRTY0KDApCisjZGVmaW5lIE1fRFVBUlRfU0lHX0ZVTEwgICAgICAgICAgIF9TQl9NQUtFTUFTSyg0LFNfRFVBUlRfU0lHX0ZVTEwpCisjZGVmaW5lIFZfRFVBUlRfU0lHX0ZVTEwoeCkgICAgICAgIF9TQl9NQUtFVkFMVUUoeCxTX0RVQVJUX1NJR19GVUxMKQorI2RlZmluZSBHX0RVQVJUX1NJR19GVUxMKHgpICAgICAgICBfU0JfR0VUVkFMVUUoeCxTX0RVQVJUX1NJR19GVUxMLE1fRFVBUlRfU0lHX0ZVTEwpCisKKyNkZWZpbmUgU19EVUFSVF9JTlRfVElNRSAgICAgICAgICAgX1NCX01BS0U2NCg0KQorI2RlZmluZSBNX0RVQVJUX0lOVF9USU1FICAgICAgICAgICBfU0JfTUFLRU1BU0soNCxTX0RVQVJUX0lOVF9USU1FKQorI2RlZmluZSBWX0RVQVJUX0lOVF9USU1FKHgpICAgICAgICBfU0JfTUFLRVZBTFVFKHgsU19EVUFSVF9JTlRfVElNRSkKKyNkZWZpbmUgR19EVUFSVF9JTlRfVElNRSh4KSAgICAgICAgX1NCX0dFVFZBTFVFKHgsU19EVUFSVF9JTlRfVElNRSxNX0RVQVJUX0lOVF9USU1FKQorI2VuZGlmIC8qIDEyNTAgUEFTUzIgfHwgMTEyeCBQQVNTMSAqLworCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc2lieXRlL3NlbnRvc2EuaCBiL2luY2x1ZGUvYXNtLW1pcHMvc2lieXRlL3NlbnRvc2EuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjQ2MDU4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zaWJ5dGUvc2VudG9zYS5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEgQnJvYWRjb20gQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4KKyAqLworI2lmbmRlZiBfX0FTTV9TSUJZVEVfU0VOVE9TQV9ICisjZGVmaW5lIF9fQVNNX1NJQllURV9TRU5UT1NBX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS9zaWJ5dGUvc2IxMjUwLmg+CisjaW5jbHVkZSA8YXNtL3NpYnl0ZS9zYjEyNTBfaW50Lmg+CisKKyNpZmRlZiBDT05GSUdfU0lCWVRFX1NFTlRPU0EKKyNkZWZpbmUgU0lCWVRFX0JPQVJEX05BTUUgIkJDTTkxMjUwRSAoU2VudG9zYSkiCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfU0lCWVRFX1JIT05FCisjZGVmaW5lIFNJQllURV9CT0FSRF9OQU1FICJCQ005MTEyNUUgKFJob25lKSIKKyNlbmRpZgorCisvKiBHZW5lcmljIGJ1cyBjaGlwIHNlbGVjdHMgKi8KKyNpZmRlZiBDT05GSUdfU0lCWVRFX1JIT05FCisjZGVmaW5lIExFRFNfQ1MgICAgICAgICA2CisjZGVmaW5lIExFRFNfUEhZUyAgICAgICAweDFkMGEwMDAwCisjZW5kaWYKKworLyogR1BJT3MgKi8KKyNkZWZpbmUgS19HUElPX0RCR19MRUQgIDAKKworI2VuZGlmIC8qIF9fQVNNX1NJQllURV9TRU5UT1NBX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc2lieXRlL3N3YXJtLmggYi9pbmNsdWRlL2FzbS1taXBzL3NpYnl0ZS9zd2FybS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3ZmEwNDkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NpYnl0ZS9zd2FybS5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMgQnJvYWRjb20gQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4KKyAqLworI2lmbmRlZiBfX0FTTV9TSUJZVEVfU1dBUk1fSAorI2RlZmluZSBfX0FTTV9TSUJZVEVfU1dBUk1fSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL3NpYnl0ZS9zYjEyNTAuaD4KKyNpbmNsdWRlIDxhc20vc2lieXRlL3NiMTI1MF9pbnQuaD4KKworI2lmZGVmIENPTkZJR19TSUJZVEVfU1dBUk0KKyNkZWZpbmUgU0lCWVRFX0JPQVJEX05BTUUgIkJDTTkxMjUwQSAoU1dBUk0pIgorI2RlZmluZSBTSUJZVEVfSEFWRV9QQ01DSUEgMQorI2RlZmluZSBTSUJZVEVfSEFWRV9JREUgICAgMQorI2VuZGlmCisjaWZkZWYgQ09ORklHX1NJQllURV9QVFNXQVJNCisjZGVmaW5lIFNJQllURV9CT0FSRF9OQU1FICJQVFNXQVJNIgorI2RlZmluZSBTSUJZVEVfSEFWRV9QQ01DSUEgMQorI2RlZmluZSBTSUJZVEVfSEFWRV9JREUgICAgMQorI2RlZmluZSBTSUJZVEVfREVGQVVMVF9DT05TT0xFICJ0dHlTMCwxMTUyMDAiCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfU0lCWVRFX0xJVFRMRVNVUgorI2RlZmluZSBTSUJZVEVfQk9BUkRfTkFNRSAiQkNNMTI1MEMyIChMaXR0bGVTdXIpIgorI2RlZmluZSBTSUJZVEVfSEFWRV9QQ01DSUEgMAorI2RlZmluZSBTSUJZVEVfSEFWRV9JREUgICAgMQorI2RlZmluZSBTSUJZVEVfREVGQVVMVF9DT05TT0xFICJjZmUwIgorI2VuZGlmCisjaWZkZWYgQ09ORklHX1NJQllURV9DUkhPTkUKKyNkZWZpbmUgU0lCWVRFX0JPQVJEX05BTUUgIkJDTTkxMTI1QyAoQ1Job25lKSIKKyNkZWZpbmUgU0lCWVRFX0hBVkVfUENNQ0lBIDAKKyNkZWZpbmUgU0lCWVRFX0hBVkVfSURFICAgIDAKKyNlbmRpZgorI2lmZGVmIENPTkZJR19TSUJZVEVfQ1JISU5FCisjZGVmaW5lIFNJQllURV9CT0FSRF9OQU1FICJCQ005MTEyMEMgKENSaGluZSkiCisjZGVmaW5lIFNJQllURV9IQVZFX1BDTUNJQSAwCisjZGVmaW5lIFNJQllURV9IQVZFX0lERSAgICAwCisjZW5kaWYKKworLyogR2VuZXJpYyBidXMgY2hpcCBzZWxlY3RzICovCisjZGVmaW5lIExFRFNfQ1MgICAgICAgICAzCisjZGVmaW5lIExFRFNfUEhZUyAgICAgICAweDEwMGEwMDAwCisKKyNpZmRlZiBTSUJZVEVfSEFWRV9JREUKKyNkZWZpbmUgSURFX0NTICAgICAgICAgIDQKKyNkZWZpbmUgSURFX1BIWVMgICAgICAgIDB4MTAwYjAwMDAKKyNkZWZpbmUgS19HUElPX0dCX0lERSAgIDQKKyNkZWZpbmUgS19JTlRfR0JfSURFICAgIChLX0lOVF9HUElPXzAgKyBLX0dQSU9fR0JfSURFKQorI2VuZGlmCisKKyNpZmRlZiBTSUJZVEVfSEFWRV9QQ01DSUEKKyNkZWZpbmUgUENNQ0lBX0NTICAgICAgIDYKKyNkZWZpbmUgUENNQ0lBX1BIWVMgICAgIDB4MTEwMDAwMDAKKyNkZWZpbmUgS19HUElPX1BDX1JFQURZIDkKKyNkZWZpbmUgS19JTlRfUENfUkVBRFkgIChLX0lOVF9HUElPXzAgKyBLX0dQSU9fUENfUkVBRFkpCisjZW5kaWYKKworI2VuZGlmIC8qIF9fQVNNX1NJQllURV9TV0FSTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NpYnl0ZS90cmFjZV9wcm9mLmggYi9pbmNsdWRlL2FzbS1taXBzL3NpYnl0ZS90cmFjZV9wcm9mLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU3NzkyMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc2lieXRlL3RyYWNlX3Byb2YuaApAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMSBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgX19BU01fU0lCWVRFX1RSQUNFX1BST0ZfSAorI2RlZmluZSBfX0FTTV9TSUJZVEVfVFJBQ0VfUFJPRl9ICisKKyN1bmRlZiBEQkcKKyNpZiBTQlBST0ZfVEJfREVCVUcKKyNkZWZpbmUgREJHKGEpIGEKKyNlbHNlCisjZGVmaW5lIERCRyhhKQorI2VuZGlmCisKKyNkZWZpbmUgU0JQUk9GX1RCX01BSk9SIDI0MAorI2RlZmluZSBERVZOQU1FICJiY20xMjUwX3RicHJvZiIKKwordHlwZWRlZiB1X2ludDY0X3QgdGJfc2FtcGxlX3RbNioyNTZdOworCitzdHJ1Y3Qgc2Jwcm9mX3RiIHsKKwlpbnQgICAgICAgICAgb3BlbjsKKwl0Yl9zYW1wbGVfdCAqc2Jwcm9mX3RiYnVmOworCWludCAgICAgICAgICBuZXh0X3RiX3NhbXBsZTsKKworCXZvbGF0aWxlIGludCB0Yl9lbmFibGU7CisJdm9sYXRpbGUgaW50IHRiX2FybWVkOworCisJd2FpdF9xdWV1ZV9oZWFkX3QgdGJfc3luYzsKKwl3YWl0X3F1ZXVlX2hlYWRfdCB0Yl9yZWFkOworfTsKKworI2RlZmluZSBNQVhfU0FNUExFX0JZVEVTICgyNCoxMDI0KjEwMjQpCisjZGVmaW5lIE1BWF9UQlNBTVBMRV9CWVRFUyAoMTIqMTAyNCoxMDI0KQorCisjZGVmaW5lIE1BWF9TQU1QTEVTIChNQVhfU0FNUExFX0JZVEVTL3NpemVvZih1X2ludDMyX3QpKQorI2RlZmluZSBUQl9TQU1QTEVfU0laRSAoc2l6ZW9mKHRiX3NhbXBsZV90KSkKKyNkZWZpbmUgTUFYX1RCX1NBTVBMRVMgKE1BWF9UQlNBTVBMRV9CWVRFUy9UQl9TQU1QTEVfU0laRSkKKworLyogSU9DVExzICovCisjZGVmaW5lIFNCUFJPRl9aQlNUQVJUCQlfSU9XKCdzJywgMCwgaW50KQorI2RlZmluZSBTQlBST0ZfWkJTVE9QCQlfSU9XKCdzJywgMSwgaW50KQorI2RlZmluZSBTQlBST0ZfWkJXQUlURlVMTAlfSU9XKCdzJywgMiwgaW50KQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSb3V0aW5lcyBmb3IgZ2F0aGVyaW5nIFpCYnVzIHByb2ZpbGVzIHVzaW5nIHRyYWNlIGJ1ZmZlcgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogUmVxdWlyZXM6IEFscmVhZHkgY2FsbGVkIHpjbGtfdGltZXJfaW5pdCB3aXRoIGEgdmFsdWUgdGhhdCB3b24ndAorCSAgICAgc2F0dXJhdGUgNDAgYml0cy4gIE5vIHN1YnNlcXVlbnQgdXNlIG9mIFNDRCBwZXJmb3JtYW5jZSBjb3VudGVycworCSAgICAgb3IgdHJhY2UgYnVmZmVyLgorICAgRWZmZWN0OiAgIFN0YXJ0cyBnYXRoZXJpbmcgcmFuZG9tIFpCYnVzIHByb2ZpbGVzIHVzaW5nIHRyYWNlIGJ1ZmZlci4gKi8KK2V4dGVybiBpbnQgc2Jwcm9mX3picHJvZl9zdGFydChzdHJ1Y3QgZmlsZSAqZmlscCk7CisKKy8qIEVmZmVjdDogU3RvcHMgY29sbGVjdGlvbiBvZiBaQmJ1cyBwcm9maWxlcyAqLworZXh0ZXJuIGludCBzYnByb2ZfemJwcm9mX3N0b3Aodm9pZCk7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUm91dGluZXMgZm9yIHVzaW5nIDQwLWJpdCBTQ0QgY3ljbGUgY291bnRlcgorICoKKyAqIENsaWVudCByZXNwb25zaWJsZSBmb3IgZWl0aGVyIGhhbmRsaW5nIGludGVycnVwdHMgb3IgbWFraW5nIHN1cmUKKyAqIHRoZSBjeWNsZXMgY291bnRlciBuZXZlciBzYXR1cmF0ZXMsIGUuZy4sIGJ5IGRvaW5nCisgKiB6Y2xrX3RpbWVyX2luaXQoMCkgYXQgbGVhc3QgZXZlcnkgMl40MCAtIDEgWkNMS3MuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBDb25maWd1cmVzIFNDRCBjb3VudGVyIDAgdG8gY291bnQgWkNMS3Mgc3RhcnRpbmcgZnJvbSB2YWw7CisgICBDb25maWd1cmVzIFNDRCBjb3VudGVyczEsMiwzIHRvIGNvdW50IG5vdGhpbmcuCisgICBNdXN0IG5vdCBiZSBjYWxsZWQgd2hpbGUgZ2F0aGVyaW5nIFpCYnVzIHByb2ZpbGVzLgorCit1bnNpZ25lZCBsb25nIGxvbmcgdmFsOyAqLworI2RlZmluZSB6Y2xrX3RpbWVyX2luaXQodmFsKSBcCisgIF9fYXNtX18gX192b2xhdGlsZV9fICgiLnNldCBwdXNoOyIgXAorCQkJIi5zZXQgbWlwczY0OyIgXAorCQkJImxhICAgJDgsIDB4YjAwMjA0YzA7IiAvKiBTQ0QgcGVyZl9jbnRfY2ZnICovIFwKKwkJCSJzZCAgICUwLCAweDEwKCQ4KTsiICAgLyogd3JpdGUgdmFsIHRvIGNvdW50ZXIwICovIFwKKwkJCSJzZCAgICUxLCAwKCQ4KTsiICAgICAgLyogY29uZmlnIGNvdW50ZXIwIGZvciB6Y2xrcyovIFwKKwkJCSIuc2V0IHBvcCIgXAorCQkJOiAvKiBubyBvdXRwdXRzICovIFwKKwkJCQkJCSAgICAgLyogZW5hYmxlLCBjb3VudGVyMCAqLyBcCisJCQk6IC8qIGlucHV0cyAqLyAiciIodmFsKSwgInIiICgoMVVMTCA8PCAzMykgfCAxVUxMKSBcCisJCQk6IC8qIG1vZGlmaWVzICovICIkOCIgKQorCisKKy8qIFJlYWRzIFNDRCBjb3VudGVyIDAgYW5kIHB1dHMgcmVzdWx0IGluIHZhbHVlCisgICB1bnNpZ25lZCBsb25nIGxvbmcgdmFsOyAqLworI2RlZmluZSB6Y2xrX2dldCh2YWwpIFwKKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCIuc2V0IHB1c2g7IiBcCisJCQkiLnNldCBtaXBzNjQ7IiBcCisJCQkibGEgICAkOCwgMHhiMDAyMDRjMDsiIC8qIFNDRCBwZXJmX2NudF9jZmcgKi8gXAorCQkJImxkICAgJTAsIDB4MTAoJDgpOyIgICAvKiB3cml0ZSB2YWwgdG8gY291bnRlcjAgKi8gXAorCQkJIi5zZXQgcG9wIiBcCisJCQk6IC8qIG91dHB1dHMgKi8gIj1yIih2YWwpIFwKKwkJCTogLyogaW5wdXRzICovIFwKKwkJCTogLyogbW9kaWZpZXMgKi8gIiQ4IiApCisKKyNlbmRpZiAvKiBfX0FTTV9TSUJZVEVfVFJBQ0VfUFJPRl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NpZ2NvbnRleHQuaCBiL2luY2x1ZGUvYXNtLW1pcHMvc2lnY29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4OTM5ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NpZ2NvbnRleHQuaApAQCAtMCwwICsxLDkzIEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk5IGJ5IFJhbGYgQmFlY2hsZQorICogQ29weXJpZ2h0IChDKSAxOTk5IFNpbGljb24gR3JhcGhpY3MsIEluYy4KKyAqLworI2lmbmRlZiBfQVNNX1NJR0NPTlRFWFRfSAorI2RlZmluZSBfQVNNX1NJR0NPTlRFWFRfSAorCisjaW5jbHVkZSA8YXNtL3NnaWRlZnMuaD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisjaWYgX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkkzMgorCisvKgorICogS2VlcCB0aGlzIHN0cnVjdCBkZWZpbml0aW9uIGluIHN5bmMgd2l0aCB0aGUgc2lnY29udGV4dCBmcmFnbWVudAorICogaW4gYXJjaC9taXBzL3Rvb2xzL29mZnNldC5jCisgKi8KK3N0cnVjdCBzaWdjb250ZXh0IHsKKwl1bnNpZ25lZCBpbnQJCXNjX3JlZ21hc2s7CS8qIFVudXNlZCAqLworCXVuc2lnbmVkIGludAkJc2Nfc3RhdHVzOworCXVuc2lnbmVkIGxvbmcgbG9uZwlzY19wYzsKKwl1bnNpZ25lZCBsb25nIGxvbmcJc2NfcmVnc1szMl07CisJdW5zaWduZWQgbG9uZyBsb25nCXNjX2ZwcmVnc1szMl07CisJdW5zaWduZWQgaW50CQlzY19vd25lZGZwOwkvKiBVbnVzZWQgKi8KKwl1bnNpZ25lZCBpbnQJCXNjX2ZwY19jc3I7CisJdW5zaWduZWQgaW50CQlzY19mcGNfZWlyOwkvKiBVbnVzZWQgKi8KKwl1bnNpZ25lZCBpbnQJCXNjX3VzZWRfbWF0aDsKKwl1bnNpZ25lZCBpbnQJCXNjX3NzZmxhZ3M7CS8qIFVudXNlZCAqLworCXVuc2lnbmVkIGxvbmcgbG9uZwlzY19tZGhpOworCXVuc2lnbmVkIGxvbmcgbG9uZwlzY19tZGxvOworCisJdW5zaWduZWQgaW50CQlzY19jYXVzZTsJLyogVW51c2VkICovCisJdW5zaWduZWQgaW50CQlzY19iYWR2YWRkcjsJLyogVW51c2VkICovCisKKwl1bnNpZ25lZCBsb25nCQlzY19zaWdzZXRbNF07CS8qIGtlcm5lbCdzIHNpZ3NldF90ICovCit9OworCisjZW5kaWYgLyogX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkkzMiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyNpZiBfTUlQU19TSU0gPT0gX01JUFNfU0lNX0FCSTY0IHx8IF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fTkFCSTMyCisKKy8qCisgKiBLZWVwIHRoaXMgc3RydWN0IGRlZmluaXRpb24gaW4gc3luYyB3aXRoIHRoZSBzaWdjb250ZXh0IGZyYWdtZW50CisgKiBpbiBhcmNoL21pcHMvdG9vbHMvb2Zmc2V0LmMKKyAqCisgKiBXYXJuaW5nOiB0aGlzIHN0cnVjdHVyZSBpbGxkZWZpbmVkIHdpdGggc2NfYmFkdmFkZHIgYmVpbmcganVzdCBhbiB1bnNpZ25lZAorICogaW50IHNvIGl0IHdhcyBjaGFuZ2VkIHRvIHVuc2lnbmVkIGxvbmcgaW4gMi42LjAtdGVzdDEuICBUaGlzIG1heSBicmVhaworICogYmluYXJ5IGNvbXBhdGliaWxpdHkgLSBubyBwcmlzb25lcnMuCisgKi8KK3N0cnVjdCBzaWdjb250ZXh0IHsKKwl1bnNpZ25lZCBsb25nCXNjX3JlZ3NbMzJdOworCXVuc2lnbmVkIGxvbmcJc2NfZnByZWdzWzMyXTsKKwl1bnNpZ25lZCBsb25nCXNjX21kaGk7CisJdW5zaWduZWQgbG9uZwlzY19tZGxvOworCXVuc2lnbmVkIGxvbmcJc2NfcGM7CisJdW5zaWduZWQgbG9uZwlzY19iYWR2YWRkcjsKKwl1bnNpZ25lZCBpbnQJc2Nfc3RhdHVzOworCXVuc2lnbmVkIGludAlzY19mcGNfY3NyOworCXVuc2lnbmVkIGludAlzY19mcGNfZWlyOworCXVuc2lnbmVkIGludAlzY191c2VkX21hdGg7CisJdW5zaWduZWQgaW50CXNjX2NhdXNlOworfTsKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L3Bvc2l4X3R5cGVzLmg+CisKK3N0cnVjdCBzaWdjb250ZXh0MzIgeworCV9fdTMyCXNjX3JlZ21hc2s7CQkvKiBVbnVzZWQgKi8KKwlfX3UzMglzY19zdGF0dXM7CisJX191NjQJc2NfcGM7CisJX191NjQJc2NfcmVnc1szMl07CisJX191NjQJc2NfZnByZWdzWzMyXTsKKwlfX3UzMglzY19vd25lZGZwOwkJLyogVW51c2VkICovCisJX191MzIJc2NfZnBjX2NzcjsKKwlfX3UzMglzY19mcGNfZWlyOwkJLyogVW51c2VkICovCisJX191MzIJc2NfdXNlZF9tYXRoOworCV9fdTMyCXNjX3NzZmxhZ3M7CQkvKiBVbnVzZWQgKi8KKwlfX3U2NAlzY19tZGhpOworCV9fdTY0CXNjX21kbG87CisKKwlfX3UzMglzY19jYXVzZTsJCS8qIFVudXNlZCAqLworCV9fdTMyCXNjX2JhZHZhZGRyOwkJLyogVW51c2VkICovCisKKwlfX3UzMglzY19zaWdzZXRbNF07CQkvKiBrZXJuZWwncyBzaWdzZXRfdCAqLworfTsKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfTUlQU19TSU0gPT0gX01JUFNfU0lNX0FCSTY0IHx8IF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fTkFCSTMyICovCisKKyNlbmRpZiAvKiBfQVNNX1NJR0NPTlRFWFRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zaWdpbmZvLmggYi9pbmNsdWRlL2FzbS1taXBzL3NpZ2luZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGRkM2M5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zaWdpbmZvLmgKQEAgLTAsMCArMSwxMzIgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTksIDIwMDEsIDIwMDMgUmFsZiBCYWVjaGxlCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEgU2lsaWNvbiBHcmFwaGljcywgSW5jLgorICovCisjaWZuZGVmIF9BU01fU0lHSU5GT19ICisjZGVmaW5lIF9BU01fU0lHSU5GT19ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2RlZmluZSBTSUdFVl9IRUFEX1NJWkUJKHNpemVvZihsb25nKSArIDIqc2l6ZW9mKGludCkpCisjZGVmaW5lIFNJR0VWX1BBRF9TSVpFCSgoU0lHRVZfTUFYX1NJWkUtU0lHRVZfSEVBRF9TSVpFKSAvIHNpemVvZihpbnQpKQorI3VuZGVmIF9fQVJDSF9TSV9UUkFQTk8JLyogZXhjZXB0aW9uIGNvZGUgbmVlZHMgdG8gZmlsbCB0aGlzIC4uLiAgKi8KKworI2RlZmluZSBIQVZFX0FSQ0hfU0lHSU5GT19UCisKKy8qCisgKiBXZSBkdXBsaWNhdGUgdGhlIGdlbmVyaWMgdmVyc2lvbnMgLSA8YXNtLWdlbmVyaWMvc2lnaW5mby5oPiBpcyBqdXN0IGJvcmtlZAorICogYnkgZGVzaWduIC4uLgorICovCisjZGVmaW5lIEhBVkVfQVJDSF9DT1BZX1NJR0lORk8KK3N0cnVjdCBzaWdpbmZvOworCisvKgorICogQ2FyZWZ1bCB0byBrZWVwIHVuaW9uIF9zaWZpZWxkcyBmcm9tIHNoaWZ0aW5nIC4uLgorICovCisjaWZkZWYgQ09ORklHX01JUFMzMgorI2RlZmluZSBfX0FSQ0hfU0lfUFJFQU1CTEVfU0laRSAoMyAqIHNpemVvZihpbnQpKQorI2VuZGlmCisjaWZkZWYgQ09ORklHX01JUFM2NAorI2RlZmluZSBfX0FSQ0hfU0lfUFJFQU1CTEVfU0laRSAoNCAqIHNpemVvZihpbnQpKQorI2VuZGlmCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zaWdpbmZvLmg+CisKK3R5cGVkZWYgc3RydWN0IHNpZ2luZm8geworCWludCBzaV9zaWdubzsKKwlpbnQgc2lfY29kZTsKKwlpbnQgc2lfZXJybm87CisJaW50IF9fcGFkMFtTSV9NQVhfU0laRSAvIHNpemVvZihpbnQpIC0gU0lfUEFEX1NJWkUgLSAzXTsKKworCXVuaW9uIHsKKwkJaW50IF9wYWRbU0lfUEFEX1NJWkVdOworCisJCS8qIGtpbGwoKSAqLworCQlzdHJ1Y3QgeworCQkJcGlkX3QgX3BpZDsJCS8qIHNlbmRlcidzIHBpZCAqLworCQkJX19BUkNIX1NJX1VJRF9UIF91aWQ7CS8qIHNlbmRlcidzIHVpZCAqLworCQl9IF9raWxsOworCisJCS8qIFBPU0lYLjFiIHRpbWVycyAqLworCQlzdHJ1Y3QgeworCQkJdGltZXJfdCBfdGlkOwkJLyogdGltZXIgaWQgKi8KKwkJCWludCBfb3ZlcnJ1bjsJCS8qIG92ZXJydW4gY291bnQgKi8KKwkJCWNoYXIgX3BhZFtzaXplb2YoIF9fQVJDSF9TSV9VSURfVCkgLSBzaXplb2YoaW50KV07CisJCQlzaWd2YWxfdCBfc2lndmFsOwkvKiBzYW1lIGFzIGJlbG93ICovCisJCQlpbnQgX3N5c19wcml2YXRlOyAgICAgICAvKiBub3QgdG8gYmUgcGFzc2VkIHRvIHVzZXIgKi8KKwkJfSBfdGltZXI7CisKKwkJLyogUE9TSVguMWIgc2lnbmFscyAqLworCQlzdHJ1Y3QgeworCQkJcGlkX3QgX3BpZDsJCS8qIHNlbmRlcidzIHBpZCAqLworCQkJX19BUkNIX1NJX1VJRF9UIF91aWQ7CS8qIHNlbmRlcidzIHVpZCAqLworCQkJc2lndmFsX3QgX3NpZ3ZhbDsKKwkJfSBfcnQ7CisKKwkJLyogU0lHQ0hMRCAqLworCQlzdHJ1Y3QgeworCQkJcGlkX3QgX3BpZDsJCS8qIHdoaWNoIGNoaWxkICovCisJCQlfX0FSQ0hfU0lfVUlEX1QgX3VpZDsJLyogc2VuZGVyJ3MgdWlkICovCisJCQlpbnQgX3N0YXR1czsJCS8qIGV4aXQgY29kZSAqLworCQkJY2xvY2tfdCBfdXRpbWU7CisJCQljbG9ja190IF9zdGltZTsKKwkJfSBfc2lnY2hsZDsKKworCQkvKiBJUklYIFNJR0NITEQgKi8KKwkJc3RydWN0IHsKKwkJCXBpZF90IF9waWQ7CQkvKiB3aGljaCBjaGlsZCAqLworCQkJY2xvY2tfdCBfdXRpbWU7CisJCQlpbnQgX3N0YXR1czsJCS8qIGV4aXQgY29kZSAqLworCQkJY2xvY2tfdCBfc3RpbWU7CisJCX0gX2lyaXhfc2lnY2hsZDsKKworCQkvKiBTSUdJTEwsIFNJR0ZQRSwgU0lHU0VHViwgU0lHQlVTICovCisJCXN0cnVjdCB7CisJCQl2b2lkIF9fdXNlciAqX2FkZHI7IC8qIGZhdWx0aW5nIGluc24vbWVtb3J5IHJlZi4gKi8KKyNpZmRlZiBfX0FSQ0hfU0lfVFJBUE5PCisJCQlpbnQgX3RyYXBubzsJLyogVFJBUCAjIHdoaWNoIGNhdXNlZCB0aGUgc2lnbmFsICovCisjZW5kaWYKKwkJfSBfc2lnZmF1bHQ7CisKKwkJLyogU0lHUE9MTCwgU0lHWEZTWiAoVG8gZG8gLi4uKSAgKi8KKwkJc3RydWN0IHsKKwkJCV9fQVJDSF9TSV9CQU5EX1QgX2JhbmQ7CS8qIFBPTExfSU4sIFBPTExfT1VULCBQT0xMX01TRyAqLworCQkJaW50IF9mZDsKKwkJfSBfc2lncG9sbDsKKwl9IF9zaWZpZWxkczsKK30gc2lnaW5mb190OworCisvKgorICogc2lfY29kZSB2YWx1ZXMKKyAqIEFnYWluIHRoZXNlIGhhdmUgYmVlbiBjaG9vc2VuIHRvIGJlIElSSVggY29tcGF0aWJsZS4KKyAqLworI3VuZGVmIFNJX0FTWU5DSU8KKyN1bmRlZiBTSV9USU1FUgorI3VuZGVmIFNJX01FU0dRCisjZGVmaW5lIFNJX0FTWU5DSU8JLTIJLyogc2VudCBieSBBSU8gY29tcGxldGlvbiAqLworI2RlZmluZSBTSV9USU1FUiBfX1NJX0NPREUoX19TSV9USU1FUiwtMykgLyogc2VudCBieSB0aW1lciBleHBpcmF0aW9uICovCisjZGVmaW5lIFNJX01FU0dRIF9fU0lfQ09ERShfX1NJX01FU0dRLC00KSAvKiBzZW50IGJ5IHJlYWwgdGltZSBtZXNxIHN0YXRlIGNoYW5nZSAqLworCisjaWZkZWYgX19LRVJORUxfXworCisvKgorICogRHVwbGljYXRlZCBoZXJlIGJlY2F1c2Ugb2YgPGFzbS1nZW5lcmljL3NpZ2luZm8uaD4gYnJhaW5kYW1hZ2UgLi4uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKworc3RhdGljIGlubGluZSB2b2lkIGNvcHlfc2lnaW5mbyhzdHJ1Y3Qgc2lnaW5mbyAqdG8sIHN0cnVjdCBzaWdpbmZvICpmcm9tKQoreworCWlmIChmcm9tLT5zaV9jb2RlIDwgMCkKKwkJbWVtY3B5KHRvLCBmcm9tLCBzaXplb2YoKnRvKSk7CisJZWxzZQorCQkvKiBfc2lnY2hsZCBpcyBjdXJyZW50bHkgdGhlIGxhcmdlc3Qga25vdyB1bmlvbiBtZW1iZXIgKi8KKwkJbWVtY3B5KHRvLCBmcm9tLCAzKnNpemVvZihpbnQpICsgc2l6ZW9mKGZyb20tPl9zaWZpZWxkcy5fc2lnY2hsZCkpOworfQorCisjZW5kaWYKKworI2VuZGlmIC8qIF9BU01fU0lHSU5GT19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NpZ25hbC5oIGIvaW5jbHVkZS9hc20tbWlwcy9zaWduYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTQ5ODdkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zaWduYWwuaApAQCAtMCwwICsxLDE3OCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NSwgOTYsIDk3LCA5OCwgOTksIDIwMDMgYnkgUmFsZiBCYWVjaGxlCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgU2lsaWNvbiBHcmFwaGljcywgSW5jLgorICovCisjaWZuZGVmIF9BU01fU0lHTkFMX0gKKyNkZWZpbmUgX0FTTV9TSUdOQUxfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2RlZmluZSBfTlNJRwkJMTI4CisjZGVmaW5lIF9OU0lHX0JQVwkoc2l6ZW9mKHVuc2lnbmVkIGxvbmcpICogOCkKKyNkZWZpbmUgX05TSUdfV09SRFMJKF9OU0lHIC8gX05TSUdfQlBXKQorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgbG9uZyBzaWdbX05TSUdfV09SRFNdOworfSBzaWdzZXRfdDsKKwordHlwZWRlZiB1bnNpZ25lZCBsb25nIG9sZF9zaWdzZXRfdDsJCS8qIGF0IGxlYXN0IDMyIGJpdHMgKi8KKworI2RlZmluZSBTSUdIVVAJCSAxCS8qIEhhbmd1cCAoUE9TSVgpLiAgKi8KKyNkZWZpbmUgU0lHSU5UCQkgMgkvKiBJbnRlcnJ1cHQgKEFOU0kpLiAgKi8KKyNkZWZpbmUgU0lHUVVJVAkJIDMJLyogUXVpdCAoUE9TSVgpLiAgKi8KKyNkZWZpbmUgU0lHSUxMCQkgNAkvKiBJbGxlZ2FsIGluc3RydWN0aW9uIChBTlNJKS4gICovCisjZGVmaW5lIFNJR1RSQVAJCSA1CS8qIFRyYWNlIHRyYXAgKFBPU0lYKS4gICovCisjZGVmaW5lIFNJR0lPVAkJIDYJLyogSU9UIHRyYXAgKDQuMiBCU0QpLiAgKi8KKyNkZWZpbmUgU0lHQUJSVAkJIFNJR0lPVAkvKiBBYm9ydCAoQU5TSSkuICAqLworI2RlZmluZSBTSUdFTVQJCSA3CisjZGVmaW5lIFNJR0ZQRQkJIDgJLyogRmxvYXRpbmctcG9pbnQgZXhjZXB0aW9uIChBTlNJKS4gICovCisjZGVmaW5lIFNJR0tJTEwJCSA5CS8qIEtpbGwsIHVuYmxvY2thYmxlIChQT1NJWCkuICAqLworI2RlZmluZSBTSUdCVVMJCTEwCS8qIEJVUyBlcnJvciAoNC4yIEJTRCkuICAqLworI2RlZmluZSBTSUdTRUdWCQkxMQkvKiBTZWdtZW50YXRpb24gdmlvbGF0aW9uIChBTlNJKS4gICovCisjZGVmaW5lIFNJR1NZUwkJMTIKKyNkZWZpbmUgU0lHUElQRQkJMTMJLyogQnJva2VuIHBpcGUgKFBPU0lYKS4gICovCisjZGVmaW5lIFNJR0FMUk0JCTE0CS8qIEFsYXJtIGNsb2NrIChQT1NJWCkuICAqLworI2RlZmluZSBTSUdURVJNCQkxNQkvKiBUZXJtaW5hdGlvbiAoQU5TSSkuICAqLworI2RlZmluZSBTSUdVU1IxCQkxNgkvKiBVc2VyLWRlZmluZWQgc2lnbmFsIDEgKFBPU0lYKS4gICovCisjZGVmaW5lIFNJR1VTUjIJCTE3CS8qIFVzZXItZGVmaW5lZCBzaWduYWwgMiAoUE9TSVgpLiAgKi8KKyNkZWZpbmUgU0lHQ0hMRAkJMTgJLyogQ2hpbGQgc3RhdHVzIGhhcyBjaGFuZ2VkIChQT1NJWCkuICAqLworI2RlZmluZSBTSUdDTEQJCVNJR0NITEQJLyogU2FtZSBhcyBTSUdDSExEIChTeXN0ZW0gVikuICAqLworI2RlZmluZSBTSUdQV1IJCTE5CS8qIFBvd2VyIGZhaWx1cmUgcmVzdGFydCAoU3lzdGVtIFYpLiAgKi8KKyNkZWZpbmUgU0lHV0lOQ0gJMjAJLyogV2luZG93IHNpemUgY2hhbmdlICg0LjMgQlNELCBTdW4pLiAgKi8KKyNkZWZpbmUgU0lHVVJHCQkyMQkvKiBVcmdlbnQgY29uZGl0aW9uIG9uIHNvY2tldCAoNC4yIEJTRCkuICAqLworI2RlZmluZSBTSUdJTwkJMjIJLyogSS9PIG5vdyBwb3NzaWJsZSAoNC4yIEJTRCkuICAqLworI2RlZmluZSBTSUdQT0xMCQlTSUdJTwkvKiBQb2xsYWJsZSBldmVudCBvY2N1cnJlZCAoU3lzdGVtIFYpLiAgKi8KKyNkZWZpbmUgU0lHU1RPUAkJMjMJLyogU3RvcCwgdW5ibG9ja2FibGUgKFBPU0lYKS4gICovCisjZGVmaW5lIFNJR1RTVFAJCTI0CS8qIEtleWJvYXJkIHN0b3AgKFBPU0lYKS4gICovCisjZGVmaW5lIFNJR0NPTlQJCTI1CS8qIENvbnRpbnVlIChQT1NJWCkuICAqLworI2RlZmluZSBTSUdUVElOCQkyNgkvKiBCYWNrZ3JvdW5kIHJlYWQgZnJvbSB0dHkgKFBPU0lYKS4gICovCisjZGVmaW5lIFNJR1RUT1UJCTI3CS8qIEJhY2tncm91bmQgd3JpdGUgdG8gdHR5IChQT1NJWCkuICAqLworI2RlZmluZSBTSUdWVEFMUk0JMjgJLyogVmlydHVhbCBhbGFybSBjbG9jayAoNC4yIEJTRCkuICAqLworI2RlZmluZSBTSUdQUk9GCQkyOQkvKiBQcm9maWxpbmcgYWxhcm0gY2xvY2sgKDQuMiBCU0QpLiAgKi8KKyNkZWZpbmUgU0lHWENQVQkJMzAJLyogQ1BVIGxpbWl0IGV4Y2VlZGVkICg0LjIgQlNEKS4gICovCisjZGVmaW5lIFNJR1hGU1oJCTMxCS8qIEZpbGUgc2l6ZSBsaW1pdCBleGNlZWRlZCAoNC4yIEJTRCkuICAqLworCisvKiBUaGVzZSBzaG91bGQgbm90IGJlIGNvbnNpZGVyZWQgY29uc3RhbnRzIGZyb20gdXNlcmxhbmQuICAqLworI2RlZmluZSBTSUdSVE1JTgkzMgorI2RlZmluZSBTSUdSVE1BWAlfTlNJRworCisvKgorICogU0FfRkxBR1MgdmFsdWVzOgorICoKKyAqIFNBX09OU1RBQ0sgaW5kaWNhdGVzIHRoYXQgYSByZWdpc3RlcmVkIHN0YWNrX3Qgd2lsbCBiZSB1c2VkLgorICogU0FfSU5URVJSVVBUIGlzIGEgbm8tb3AsIGJ1dCBsZWZ0IGR1ZSB0byBoaXN0b3JpY2FsIHJlYXNvbnMuIFVzZSB0aGUKKyAqIFNBX1JFU1RBUlQgZmxhZyB0byBnZXQgcmVzdGFydGluZyBzaWduYWxzICh3aGljaCB3ZXJlIHRoZSBkZWZhdWx0IGxvbmcgYWdvKQorICogU0FfTk9DTERTVE9QIGZsYWcgdG8gdHVybiBvZmYgU0lHQ0hMRCB3aGVuIGNoaWxkcmVuIHN0b3AuCisgKiBTQV9SRVNFVEhBTkQgY2xlYXJzIHRoZSBoYW5kbGVyIHdoZW4gdGhlIHNpZ25hbCBpcyBkZWxpdmVyZWQuCisgKiBTQV9OT0NMRFdBSVQgZmxhZyBvbiBTSUdDSExEIHRvIGluaGliaXQgem9tYmllcy4KKyAqIFNBX05PREVGRVIgcHJldmVudHMgdGhlIGN1cnJlbnQgc2lnbmFsIGZyb20gYmVpbmcgbWFza2VkIGluIHRoZSBoYW5kbGVyLgorICoKKyAqIFNBX09ORVNIT1QgYW5kIFNBX05PTUFTSyBhcmUgdGhlIGhpc3RvcmljYWwgTGludXggbmFtZXMgZm9yIHRoZSBTaW5nbGUKKyAqIFVuaXggbmFtZXMgUkVTRVRIQU5EIGFuZCBOT0RFRkVSIHJlc3BlY3RpdmVseS4KKyAqLworI2RlZmluZSBTQV9PTlNUQUNLCTB4MDgwMDAwMDAKKyNkZWZpbmUgU0FfUkVTRVRIQU5ECTB4ODAwMDAwMDAKKyNkZWZpbmUgU0FfUkVTVEFSVAkweDEwMDAwMDAwCisjZGVmaW5lIFNBX1NJR0lORk8JMHgwMDAwMDAwOAorI2RlZmluZSBTQV9OT0RFRkVSCTB4NDAwMDAwMDAKKyNkZWZpbmUgU0FfTk9DTERXQUlUCTB4MDAwMTAwMDAKKyNkZWZpbmUgU0FfTk9DTERTVE9QCTB4MDAwMDAwMDEKKworI2RlZmluZSBTQV9OT01BU0sJU0FfTk9ERUZFUgorI2RlZmluZSBTQV9PTkVTSE9UCVNBX1JFU0VUSEFORAorI2RlZmluZSBTQV9JTlRFUlJVUFQJMHgyMDAwMDAwMAkvKiBkdW1teSAtLSBpZ25vcmVkICovCisKKyNkZWZpbmUgU0FfUkVTVE9SRVIJMHgwNDAwMDAwMAkvKiBPbmx5IGZvciBvMzIgKi8KKworLyoKKyAqIHNpZ2FsdHN0YWNrIGNvbnRyb2xzCisgKi8KKyNkZWZpbmUgU1NfT05TVEFDSyAgICAgMQorI2RlZmluZSBTU19ESVNBQkxFICAgICAyCisKKyNkZWZpbmUgTUlOU0lHU1RLU1ogICAgMjA0OAorI2RlZmluZSBTSUdTVEtTWiAgICAgICA4MTkyCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKy8qCisgKiBUaGVzZSB2YWx1ZXMgb2Ygc2FfZmxhZ3MgYXJlIHVzZWQgb25seSBieSB0aGUga2VybmVsIGFzIHBhcnQgb2YgdGhlCisgKiBpcnEgaGFuZGxpbmcgcm91dGluZXMuCisgKgorICogU0FfSU5URVJSVVBUIGlzIGFsc28gdXNlZCBieSB0aGUgaXJxIGhhbmRsaW5nIHJvdXRpbmVzLgorICogU0FfU0hJUlEgZmxhZyBpcyBmb3Igc2hhcmVkIGludGVycnVwdCBzdXBwb3J0IG9uIFBDSSBhbmQgRUlTQS4KKyAqLworI2RlZmluZSBTQV9QUk9CRQkJU0FfT05FU0hPVAorI2RlZmluZSBTQV9TQU1QTEVfUkFORE9NCVNBX1JFU1RBUlQKKyNkZWZpbmUgU0FfU0hJUlEJCTB4MDIwMDAwMDAKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2RlZmluZSBTSUdfQkxPQ0sJMQkvKiBmb3IgYmxvY2tpbmcgc2lnbmFscyAqLworI2RlZmluZSBTSUdfVU5CTE9DSwkyCS8qIGZvciB1bmJsb2NraW5nIHNpZ25hbHMgKi8KKyNkZWZpbmUgU0lHX1NFVE1BU0sJMwkvKiBmb3Igc2V0dGluZyB0aGUgc2lnbmFsIG1hc2sgKi8KKyNkZWZpbmUgU0lHX1NFVE1BU0szMgkyNTYJLyogR29vZGllIGZyb20gU0dJIGZvciBCU0QgY29tcGF0aWJpbGl0eToKKwkJCQkgICBzZXQgb25seSB0aGUgbG93IDMyIGJpdCBvZiB0aGUgc2lnc2V0LiAgKi8KKworLyogVHlwZSBvZiBhIHNpZ25hbCBoYW5kbGVyLiAgKi8KK3R5cGVkZWYgdm9pZCAoKl9fc2lnaGFuZGxlcl90KShpbnQpOworCisvKiBGYWtlIHNpZ25hbCBmdW5jdGlvbnMgKi8KKyNkZWZpbmUgU0lHX0RGTAkoKF9fc2lnaGFuZGxlcl90KTApCS8qIGRlZmF1bHQgc2lnbmFsIGhhbmRsaW5nICovCisjZGVmaW5lIFNJR19JR04JKChfX3NpZ2hhbmRsZXJfdCkxKQkvKiBpZ25vcmUgc2lnbmFsICovCisjZGVmaW5lIFNJR19FUlIJKChfX3NpZ2hhbmRsZXJfdCktMSkJLyogZXJyb3IgcmV0dXJuIGZyb20gc2lnbmFsICovCisKK3N0cnVjdCBzaWdhY3Rpb24geworCXVuc2lnbmVkIGludAlzYV9mbGFnczsKKwlfX3NpZ2hhbmRsZXJfdAlzYV9oYW5kbGVyOworCXNpZ3NldF90CXNhX21hc2s7Cit9OworCitzdHJ1Y3Qga19zaWdhY3Rpb24geworCXN0cnVjdCBzaWdhY3Rpb24gc2E7CisjaWZkZWYgQ09ORklHX0JJTkZNVF9JUklYCisJdm9pZAkJKCpzYV9yZXN0b3Jlcikodm9pZCk7CisjZW5kaWYKK307CisKKy8qIElSSVggY29tcGF0aWJsZSBzdGFja190ICAqLwordHlwZWRlZiBzdHJ1Y3Qgc2lnYWx0c3RhY2sgeworCXZvaWQgKnNzX3NwOworCXNpemVfdCBzc19zaXplOworCWludCBzc19mbGFnczsKK30gc3RhY2tfdDsKKworI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxhc20vc2lnY29udGV4dC5oPgorCisvKgorICogVGhlIGZvbGxvd2luZyBicmVhayBjb2RlcyBhcmUgb3Igd2VyZSBpbiB1c2UgZm9yIHNwZWNpZmljIHB1cnBvc2VzIGluCisgKiBvdGhlciBNSVBTIG9wZXJhdGluZyBzeXN0ZW1zLiAgTGludXgvTUlQUyBkb2Vzbid0IHVzZSBhbGwgb2YgdGhlbS4gIFRoZQorICogdW51c2VkIG9uZXMgYXJlIGhlcmUgYXMgcGxhY2Vob2xkZXJzOyB3ZSBtaWdodCBlbmNvdW50ZXIgdGhlbSBpbgorICogbm9uLUxpbnV4L01JUFMgb2JqZWN0IGZpbGVzIG9yIG1ha2UgdXNlIG9mIHRoZW0gaW4gdGhlIGZ1dHVyZS4KKyAqLworI2RlZmluZSBCUktfVVNFUkJQCTAJLyogVXNlciBicCAodXNlZCBieSBkZWJ1Z2dlcnMpICovCisjZGVmaW5lIEJSS19LRVJORUxCUAkxCS8qIEJyZWFrIGluIHRoZSBrZXJuZWwgKi8KKyNkZWZpbmUgQlJLX0FCT1JUCTIJLyogU29tZXRpbWVzIHVzZWQgYnkgYWJvcnQoMykgdG8gU0lHSU9UICovCisjZGVmaW5lIEJSS19CRF9UQUtFTgkzCS8qIEZvciBiZCBzbG90IGVtdWxhdGlvbiAtIG5vdCBpbXBsZW1lbnRlZCAqLworI2RlZmluZSBCUktfQkRfTk9UVEFLRU4JNAkvKiBGb3IgYmQgc2xvdCBlbXVsYXRpb24gLSBub3QgaW1wbGVtZW50ZWQgKi8KKyNkZWZpbmUgQlJLX1NTVEVQQlAJNQkvKiBVc2VyIGJwICh1c2VkIGJ5IGRlYnVnZ2VycykgKi8KKyNkZWZpbmUgQlJLX09WRVJGTE9XCTYJLyogT3ZlcmZsb3cgY2hlY2sgKi8KKyNkZWZpbmUgQlJLX0RJVlpFUk8JNwkvKiBEaXZpZGUgYnkgemVybyBjaGVjayAqLworI2RlZmluZSBCUktfUkFOR0UJOAkvKiBSYW5nZSBlcnJvciBjaGVjayAqLworI2RlZmluZSBCUktfU1RBQ0tPVkVSRkxPVyA5CS8qIEZvciBBZGEgc3RhY2tjaGVja2luZyAqLworI2RlZmluZSBCUktfTk9STEQJMTAJLyogTm8gcmxkIGZvdW5kIC0gbm90IHVzZWQgYnkgTGludXgvTUlQUyAqLworI2RlZmluZSBfQlJLX1RIUkVBREJQCTExCS8qIEZvciB0aHJlYWRzLCB1c2VyIGJwICh1c2VkIGJ5IGRlYnVnZ2VycykgKi8KKyNkZWZpbmUgQlJLX01VTE9WRgkxMDIzCS8qIE11bHRpcGx5IG92ZXJmbG93ICovCisjZGVmaW5lIEJSS19CVUcJCTUxMgkvKiBVc2VkIGJ5IEJVRygpICovCisKKyNkZWZpbmUgcHRyYWNlX3NpZ25hbF9kZWxpdmVyKHJlZ3MsIGNvb2tpZSkgZG8geyB9IHdoaWxlICgwKQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX0FTTV9TSUdOQUxfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zaW0uaCBiL2luY2x1ZGUvYXNtLW1pcHMvc2ltLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjMzMzE2OQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc2ltLmgKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMyBSYWxmIEJhZWNobGUKKyAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCisgKi8KKyNpZm5kZWYgX0FTTV9TSU1fSAorI2RlZmluZSBfQVNNX1NJTV9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2luY2x1ZGUgPGFzbS9vZmZzZXQuaD4KKworI2RlZmluZSBfX3N0cjIoeCkgI3gKKyNkZWZpbmUgX19zdHIoeCkgX19zdHIyKHgpCisKKyNpZmRlZiBDT05GSUdfTUlQUzMyCisKKyNkZWZpbmUgc2F2ZV9zdGF0aWNfZnVuY3Rpb24oc3ltYm9sKQkJCQkJXAorX19hc21fXyAoCQkJCQkJCQlcCisJIi50ZXh0XG5cdCIJCQkJCQkJXAorCSIuZ2xvYmxcdCIgI3N5bWJvbCAiXG5cdCIJCQkJCVwKKwkiLmFsaWduXHQyXG5cdCIJCQkJCQkJXAorCSIudHlwZVx0IiAjc3ltYm9sICIsIEBmdW5jdGlvblxuXHQiCQkJCVwKKwkiLmVudFx0IiAjc3ltYm9sICIsIDBcbiIJCQkJCVwKKwkjc3ltYm9sIjpcblx0IgkJCQkJCQlcCisJIi5mcmFtZVx0JDI5LCAwLCAkMzFcblx0IgkJCQkJXAorCSJzd1x0JDE2LCJfX3N0cihQVF9SMTYpIigkMjkpXHRcdFx0IyBzYXZlX3N0YXRpY19mdW5jdGlvblxuXHQiCVwKKwkic3dcdCQxNywiX19zdHIoUFRfUjE3KSIoJDI5KVxuXHQiCQkJCVwKKwkic3dcdCQxOCwiX19zdHIoUFRfUjE4KSIoJDI5KVxuXHQiCQkJCVwKKwkic3dcdCQxOSwiX19zdHIoUFRfUjE5KSIoJDI5KVxuXHQiCQkJCVwKKwkic3dcdCQyMCwiX19zdHIoUFRfUjIwKSIoJDI5KVxuXHQiCQkJCVwKKwkic3dcdCQyMSwiX19zdHIoUFRfUjIxKSIoJDI5KVxuXHQiCQkJCVwKKwkic3dcdCQyMiwiX19zdHIoUFRfUjIyKSIoJDI5KVxuXHQiCQkJCVwKKwkic3dcdCQyMywiX19zdHIoUFRfUjIzKSIoJDI5KVxuXHQiCQkJCVwKKwkic3dcdCQzMCwiX19zdHIoUFRfUjMwKSIoJDI5KVxuXHQiCQkJCVwKKwkialx0XyIgI3N5bWJvbCAiXG5cdCIJCQkJCQlcCisJIi5lbmRcdCIgI3N5bWJvbCAiXG5cdCIJCQkJCQlcCisJIi5zaXplXHQiICNzeW1ib2wiLC4gLSAiICNzeW1ib2wpCisKKyNkZWZpbmUgbmFiaV9ub19yZWdhcmdzCisKKyNlbmRpZiAvKiBDT05GSUdfTUlQUzMyICovCisKKyNpZmRlZiBDT05GSUdfTUlQUzY0CisKKyNkZWZpbmUgc2F2ZV9zdGF0aWNfZnVuY3Rpb24oc3ltYm9sKQkJCQkJXAorX19hc21fXyAoCQkJCQkJCQlcCisJIi50ZXh0XG5cdCIJCQkJCQkJXAorCSIuZ2xvYmxcdCIgI3N5bWJvbCAiXG5cdCIJCQkJCVwKKwkiLmFsaWduXHQyXG5cdCIJCQkJCQkJXAorCSIudHlwZVx0IiAjc3ltYm9sICIsIEBmdW5jdGlvblxuXHQiCQkJCVwKKwkiLmVudFx0IiAjc3ltYm9sICIsIDBcbiIJCQkJCVwKKwkjc3ltYm9sIjpcblx0IgkJCQkJCQlcCisJIi5mcmFtZVx0JDI5LCAwLCAkMzFcblx0IgkJCQkJXAorCSJzZFx0JDE2LCJfX3N0cihQVF9SMTYpIigkMjkpXHRcdFx0IyBzYXZlX3N0YXRpY19mdW5jdGlvblxuXHQiCVwKKwkic2RcdCQxNywiX19zdHIoUFRfUjE3KSIoJDI5KVxuXHQiCQkJCVwKKwkic2RcdCQxOCwiX19zdHIoUFRfUjE4KSIoJDI5KVxuXHQiCQkJCVwKKwkic2RcdCQxOSwiX19zdHIoUFRfUjE5KSIoJDI5KVxuXHQiCQkJCVwKKwkic2RcdCQyMCwiX19zdHIoUFRfUjIwKSIoJDI5KVxuXHQiCQkJCVwKKwkic2RcdCQyMSwiX19zdHIoUFRfUjIxKSIoJDI5KVxuXHQiCQkJCVwKKwkic2RcdCQyMiwiX19zdHIoUFRfUjIyKSIoJDI5KVxuXHQiCQkJCVwKKwkic2RcdCQyMywiX19zdHIoUFRfUjIzKSIoJDI5KVxuXHQiCQkJCVwKKwkic2RcdCQzMCwiX19zdHIoUFRfUjMwKSIoJDI5KVxuXHQiCQkJCVwKKwkialx0XyIgI3N5bWJvbCAiXG5cdCIJCQkJCQlcCisJIi5lbmRcdCIgI3N5bWJvbCAiXG5cdCIJCQkJCQlcCisJIi5zaXplXHQiICNzeW1ib2wiLC4gLSAiICNzeW1ib2wpCisKKyNkZWZpbmUgbmFiaV9ub19yZWdhcmdzCQkJCQkJCVwKKwl1bnNpZ25lZCBsb25nIF9fZHVtbXkwLAkJCQkJCVwKKwl1bnNpZ25lZCBsb25nIF9fZHVtbXkxLAkJCQkJCVwKKwl1bnNpZ25lZCBsb25nIF9fZHVtbXkyLAkJCQkJCVwKKwl1bnNpZ25lZCBsb25nIF9fZHVtbXkzLAkJCQkJCVwKKwl1bnNpZ25lZCBsb25nIF9fZHVtbXk0LAkJCQkJCVwKKwl1bnNpZ25lZCBsb25nIF9fZHVtbXk1LAkJCQkJCVwKKwl1bnNpZ25lZCBsb25nIF9fZHVtbXk2LAkJCQkJCVwKKwl1bnNpZ25lZCBsb25nIF9fZHVtbXk3LAorCisjZW5kaWYgLyogQ09ORklHX01JUFM2NCAqLworCisjZW5kaWYgLyogX0FTTV9TSU1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zbXAuaCBiL2luY2x1ZGUvYXNtLW1pcHMvc21wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJhMzcwZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc21wLmgKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMKKyAqIGFyY2hpdmUgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDAxIGJ5IEthbm9qIFNhcmNhciAoa2Fub2pAc2dpLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDEgYnkgU2lsaWNvbiBHcmFwaGljcywgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAyIFJhbGYgQmFlY2hsZQorICogQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxIEJyb2FkY29tIENvcnBvcmF0aW9uCisgKi8KKyNpZm5kZWYgX19BU01fU01QX0gKKyNkZWZpbmUgX19BU01fU01QX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjaWZkZWYgQ09ORklHX1NNUAorCisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorCisjZGVmaW5lIHNtcF9wcm9jZXNzb3JfaWQoKQkoY3VycmVudF90aHJlYWRfaW5mbygpLT5jcHUpCisKKy8qIE1hcCBmcm9tIGNwdSBpZCB0byBzZXF1ZW50aWFsIGxvZ2ljYWwgY3B1IG51bWJlci4gIFRoaXMgd2lsbCBvbmx5CisgICBub3QgYmUgaWRlbXBvdGVudCB3aGVuIGNwdXMgZmFpbGVkIHRvIGNvbWUgb24tbGluZS4gICovCitleHRlcm4gaW50IF9fY3B1X251bWJlcl9tYXBbTlJfQ1BVU107CisjZGVmaW5lIGNwdV9udW1iZXJfbWFwKGNwdSkgIF9fY3B1X251bWJlcl9tYXBbY3B1XQorCisvKiBUaGUgcmV2ZXJzZSBtYXAgZnJvbSBzZXF1ZW50aWFsIGxvZ2ljYWwgY3B1IG51bWJlciB0byBjcHUgaWQuICAqLworZXh0ZXJuIGludCBfX2NwdV9sb2dpY2FsX21hcFtOUl9DUFVTXTsKKyNkZWZpbmUgY3B1X2xvZ2ljYWxfbWFwKGNwdSkgIF9fY3B1X2xvZ2ljYWxfbWFwW2NwdV0KKworI2RlZmluZSBOT19QUk9DX0lECSgtMSkKKworc3RydWN0IGNhbGxfZGF0YV9zdHJ1Y3QgeworCXZvaWQJCSgqZnVuYykodm9pZCAqKTsKKwl2b2lkCQkqaW5mbzsKKwlhdG9taWNfdAlzdGFydGVkOworCWF0b21pY190CWZpbmlzaGVkOworCWludAkJd2FpdDsKK307CisKK2V4dGVybiBzdHJ1Y3QgY2FsbF9kYXRhX3N0cnVjdCAqY2FsbF9kYXRhOworCisjZGVmaW5lIFNNUF9SRVNDSEVEVUxFX1lPVVJTRUxGCTB4MQkvKiBYWFggYnJhaW5kZWFkICovCisjZGVmaW5lIFNNUF9DQUxMX0ZVTkNUSU9OCTB4MgorCitleHRlcm4gY3B1bWFza190IHBoeXNfY3B1X3ByZXNlbnRfbWFwOworZXh0ZXJuIGNwdW1hc2tfdCBjcHVfb25saW5lX21hcDsKKyNkZWZpbmUgY3B1X3Bvc3NpYmxlX21hcAlwaHlzX2NwdV9wcmVzZW50X21hcAorCitleHRlcm4gY3B1bWFza190IGNwdV9jYWxsb3V0X21hcDsKKy8qIFdlIGRvbid0IG1hcmsgQ1BVcyBvbmxpbmUgdW50aWwgX19jcHVfdXAoKSwgc28gd2UgbmVlZCBhbm90aGVyIG1lYXN1cmUgKi8KK3N0YXRpYyBpbmxpbmUgaW50IG51bV9ib290aW5nX2NwdXModm9pZCkKK3sKKwlyZXR1cm4gY3B1c193ZWlnaHQoY3B1X2NhbGxvdXRfbWFwKTsKK30KKworLyogVGhlc2UgYXJlIGRlZmluZWQgYnkgdGhlIGJvYXJkLXNwZWNpZmljIGNvZGUuICovCisKKy8qCisgKiBDYXVzZSB0aGUgZnVuY3Rpb24gZGVzY3JpYmVkIGJ5IGNhbGxfZGF0YSB0byBiZSBleGVjdXRlZCBvbiB0aGUgcGFzc2VkCisgKiBjcHUuICBXaGVuIHRoZSBmdW5jdGlvbiBoYXMgZmluaXNoZWQsIGluY3JlbWVudCB0aGUgZmluaXNoZWQgZmllbGQgb2YKKyAqIGNhbGxfZGF0YS4KKyAqLworZXh0ZXJuIHZvaWQgY29yZV9zZW5kX2lwaShpbnQgY3B1LCB1bnNpZ25lZCBpbnQgYWN0aW9uKTsKKworLyoKKyAqIEZpcm13YXJlIENQVSBzdGFydHVwIGhvb2sKKyAqLworZXh0ZXJuIHZvaWQgcHJvbV9ib290X3NlY29uZGFyeShpbnQgY3B1LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmlkbGUpOworCisvKgorICogIEFmdGVyIHdlJ3ZlIGRvbmUgaW5pdGlhbCBib290LCB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBhbGxvdyB0aGUKKyAqICBib2FyZCBjb2RlIHRvIGNsZWFuIHVwIHN0YXRlLCBpZiBuZWVkZWQKKyAqLworZXh0ZXJuIHZvaWQgcHJvbV9pbml0X3NlY29uZGFyeSh2b2lkKTsKKworLyoKKyAqIERldGVjdCBhdmFpbGFibGUgQ1BVcywgcG9wdWxhdGUgcGh5c19jcHVfcHJlc2VudF9tYXAgYmVmb3JlIHNtcF9pbml0CisgKi8KK2V4dGVybiB2b2lkIHByb21fcHJlcGFyZV9jcHVzKHVuc2lnbmVkIGludCBtYXhfY3B1cyk7CisKKy8qCisgKiBMYXN0IGNoYW5jZSBmb3IgdGhlIGJvYXJkIGNvZGUgdG8gZmluaXNoIFNNUCBpbml0aWFsaXphdGlvbiBiZWZvcmUKKyAqIHRoZSBDUFUgaXMgIm9ubGluZSIuCisgKi8KK2V4dGVybiB2b2lkIHByb21fc21wX2ZpbmlzaCh2b2lkKTsKKworLyogSG9vayBmb3IgYWZ0ZXIgYWxsIENQVXMgYXJlIG9ubGluZSAqLworZXh0ZXJuIHZvaWQgcHJvbV9jcHVzX2RvbmUodm9pZCk7CisKK2V4dGVybiB2b2lkIGFzbWxpbmthZ2Ugc21wX2Jvb3RzdHJhcCh2b2lkKTsKKworLyoKKyAqIHRoaXMgZnVuY3Rpb24gc2VuZHMgYSAncmVzY2hlZHVsZScgSVBJIHRvIGFub3RoZXIgQ1BVLgorICogaXQgZ29lcyBzdHJhaWdodCB0aHJvdWdoIGFuZCB3YXN0ZXMgbm8gdGltZSBzZXJpYWxpemluZworICogYW55dGhpbmcuIFdvcnN0IGNhc2UgaXMgdGhhdCB3ZSBsb3NlIGEgcmVzY2hlZHVsZSAuLi4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHNtcF9zZW5kX3Jlc2NoZWR1bGUoaW50IGNwdSkKK3sKKwljb3JlX3NlbmRfaXBpKGNwdSwgU01QX1JFU0NIRURVTEVfWU9VUlNFTEYpOworfQorCitleHRlcm4gYXNtbGlua2FnZSB2b2lkIHNtcF9jYWxsX2Z1bmN0aW9uX2ludGVycnVwdCh2b2lkKTsKKworI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KKworI2VuZGlmIC8qIF9fQVNNX1NNUF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NuL2FkZHJzLmggYi9pbmNsdWRlL2FzbS1taXBzL3NuL2FkZHJzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI1Y2VmMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc24vYWRkcnMuaApAQCAtMCwwICsxLDQ1OCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5MiAtIDE5OTcsIDE5OTksIDIwMDAgU2lsaWNvbiBHcmFwaGljcywgSW5jLgorICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwIGJ5IFJhbGYgQmFlY2hsZQorICovCisjaWZuZGVmIF9BU01fU05fQUREUlNfSAorI2RlZmluZSBfQVNNX1NOX0FERFJTX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisjaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgorI2luY2x1ZGUgPGFzbS9zbi9rbGRpci5oPgorCisjaWYgZGVmaW5lZChDT05GSUdfU0dJX0lQMjcpCisjaW5jbHVkZSA8YXNtL3NuL3NuMC9hZGRycy5oPgorI2VsaWYgZGVmaW5lZChDT05GSUdfU0dJX0lQMzUpCisjaW5jbHVkZSA8YXNtL3NuL3NuMS9hZGRycy5oPgorI2VuZGlmCisKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworI2lmIGRlZmluZWQoQ09ORklHX1NHSV9JTykJLyogRklYTUUgKi8KKyNkZWZpbmUgUFNfVUlOVF9DQVNUCQkoX19wc3Vuc2lnbmVkX3QpCisjZGVmaW5lIFVJTlQ2NF9DQVNUCQkoX191aW50NjRfdCkKKyNlbHNlCS8qIENPTkZJR19TR0lfSU8gKi8KKyNkZWZpbmUgUFNfVUlOVF9DQVNUCQkodW5zaWduZWQgbG9uZykKKyNkZWZpbmUgVUlOVDY0X0NBU1QJCSh1bnNpZ25lZCBsb25nKQorI2VuZGlmCS8qIENPTkZJR19TR0lfSU8gKi8KKworI2RlZmluZSBIVUJSRUdfQ0FTVAkJKHZvbGF0aWxlIGh1YnJlZ190ICopCisKKyNlbHNlIC8qIF9fQVNTRU1CTFlfXyAqLworCisjZGVmaW5lIFBTX1VJTlRfQ0FTVAorI2RlZmluZSBVSU5UNjRfQ0FTVAorI2RlZmluZSBIVUJSRUdfQ0FTVAorCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKworI2RlZmluZSBOQVNJRF9HRVRfTUVUQShfbikJKChfbikgPj4gTkFTSURfTE9DQUxfQklUUykKKyNpZmRlZiBDT05GSUdfU0dJX0lQMjcKKyNkZWZpbmUgTkFTSURfR0VUX0xPQ0FMKF9uKQkoKF9uKSAmIDB4ZikKKyNlbmRpZgorI2RlZmluZSBOQVNJRF9NQUtFKF9tLCBfbCkJKCgoX20pIDw8IE5BU0lEX0xPQ0FMX0JJVFMpIHwgKF9sKSkKKworI2RlZmluZSBOT0RFX0FERFJTUEFDRV9NQVNLCShOT0RFX0FERFJTUEFDRV9TSVpFIC0gMSkKKyNkZWZpbmUgVE9fTk9ERV9BRERSU1BBQ0UoX3BhKQkoVUlOVDY0X0NBU1QgKF9wYSkgJiBOT0RFX0FERFJTUEFDRV9NQVNLKQorCisjZGVmaW5lIENIQU5HRV9BRERSX05BU0lEKF9wYSwgX25hc2lkKQlcCisJCSgoVUlOVDY0X0NBU1QgKF9wYSkgJiB+TkFTSURfTUFTSykgfCBcCisJCSAoVUlOVDY0X0NBU1QoX25hc2lkKSA8PCAgTkFTSURfU0hGVCkpCisKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgbWFjcm9zIGFyZSB1c2VkIHRvIGluZGV4IHRvIHRoZSBiZWdpbm5pbmcgb2YgYSBzcGVjaWZpYworICogbm9kZSdzIGFkZHJlc3Mgc3BhY2UuCisgKi8KKworI2RlZmluZSBOT0RFX09GRlNFVChfbikJCShVSU5UNjRfQ0FTVCAoX24pIDw8IE5PREVfU0laRV9CSVRTKQorCisjZGVmaW5lIE5PREVfQ0FDX0JBU0UoX24pCShDQUNfQkFTRSAgICsgTk9ERV9PRkZTRVQoX24pKQorI2RlZmluZSBOT0RFX0hTUEVDX0JBU0UoX24pCShIU1BFQ19CQVNFICsgTk9ERV9PRkZTRVQoX24pKQorI2RlZmluZSBOT0RFX0lPX0JBU0UoX24pCShJT19CQVNFICAgICsgTk9ERV9PRkZTRVQoX24pKQorI2RlZmluZSBOT0RFX01TUEVDX0JBU0UoX24pCShNU1BFQ19CQVNFICsgTk9ERV9PRkZTRVQoX24pKQorI2RlZmluZSBOT0RFX1VOQ0FDX0JBU0UoX24pCShVTkNBQ19CQVNFICsgTk9ERV9PRkZTRVQoX24pKQorCisjZGVmaW5lIFRPX05PREUoX24sIF94KQkJKE5PREVfT0ZGU0VUKF9uKSAgICAgfCAoKF94KQkJICAgKSkKKyNkZWZpbmUgVE9fTk9ERV9DQUMoX24sIF94KQkoTk9ERV9DQUNfQkFTRShfbikgICB8ICgoX3gpICYgVE9fUEhZU19NQVNLKSkKKyNkZWZpbmUgVE9fTk9ERV9VTkNBQyhfbiwgX3gpCShOT0RFX1VOQ0FDX0JBU0UoX24pIHwgKChfeCkgJiBUT19QSFlTX01BU0spKQorI2RlZmluZSBUT19OT0RFX01TUEVDKF9uLCBfeCkJKE5PREVfTVNQRUNfQkFTRShfbikgfCAoKF94KSAmIFRPX1BIWVNfTUFTSykpCisjZGVmaW5lIFRPX05PREVfSFNQRUMoX24sIF94KQkoTk9ERV9IU1BFQ19CQVNFKF9uKSB8ICgoX3gpICYgVE9fUEhZU19NQVNLKSkKKworCisjZGVmaW5lIFJBV19OT0RFX1NXSU5fQkFTRShuYXNpZCwgd2lkZ2V0KQkJCQlcCisJKE5PREVfSU9fQkFTRShuYXNpZCkgKyAoVUlOVDY0X0NBU1QgKHdpZGdldCkgPDwgU1dJTl9TSVpFX0JJVFMpKQorCisjZGVmaW5lIFdJREdFVElEX0dFVChhZGRyKQkoKHVuc2lnbmVkIGNoYXIpKChhZGRyID4+IFNXSU5fU0laRV9CSVRTKSAmIDB4ZmYpKQorCisvKgorICogVGhlIGZvbGxvd2luZyBkZWZpbml0aW9ucyBwZXJ0YWluIHRvIHRoZSBJTyBzcGVjaWFsIGFkZHJlc3MKKyAqIHNwYWNlLiAgVGhleSBkZWZpbmUgdGhlIGxvY2F0aW9uIG9mIHRoZSBiaWcgYW5kIGxpdHRsZSB3aW5kb3dzCisgKiBvZiBhbnkgZ2l2ZW4gbm9kZS4KKyAqLworCisjZGVmaW5lIFNXSU5fU0laRV9CSVRTCQkyNAorI2RlZmluZSBTV0lOX1NJWkUJCShVSU5UNjRfQ0FTVCAxIDw8IDI0KQorI2RlZmluZQlTV0lOX1NJWkVNQVNLCQkoU1dJTl9TSVpFIC0gMSkKKyNkZWZpbmUJU1dJTl9XSURHRVRfTUFTSwkweEYKKworLyoKKyAqIENvbnZlcnQgc21hbGx3aW5kb3cgYWRkcmVzcyB0byB4dGFsayBhZGRyZXNzLgorICoKKyAqICdhZGRyJyBjYW4gYmUgcGh5c2ljYWwgb3IgdmlydHVhbCBhZGRyZXNzLCBidXQgd2lsbCBiZSBjb252ZXJ0ZWQKKyAqIHRvIFh0YWxrIGFkZHJlc3MgaW4gdGhlIHJhbmdlIDAgLT4gU1dJTlpfU0laRU1BU0sKKyAqLworI2RlZmluZQlTV0lOX1dJREdFVEFERFIoYWRkcikJKChhZGRyKSAmIFNXSU5fU0laRU1BU0spCisjZGVmaW5lCVNXSU5fV0lER0VUTlVNKGFkZHIpCSgoKGFkZHIpICA+PiBTV0lOX1NJWkVfQklUUykgJiBTV0lOX1dJREdFVF9NQVNLKQorLyoKKyAqIFZlcmlmeSBpZiBhZGRyIGJlbG9uZ3MgdG8gc21hbGwgd2luZG93IGFkZHJlc3Mgb24gbm9kZSB3aXRoICJuYXNpZCIKKyAqCisgKgorICogTk9URTogImFkZHIiIGlzIGV4cGVjdGVkIHRvIGJlIFhLUEhZUyBhZGRyZXNzLCBhbmQgTk9UIHBoeXNpY2FsCisgKiBhZGRyZXNzCisgKgorICoKKyAqLworI2RlZmluZQlOT0RFX1NXSU5fQUREUihuYXNpZCwgYWRkcikJXAorCQkoKChhZGRyKSA+PSBOT0RFX1NXSU5fQkFTRShuYXNpZCwgMCkpICAmJiBcCisJCSAoKGFkZHIpIDwgIChOT0RFX1NXSU5fQkFTRShuYXNpZCwgSFVCX05VTV9XSURHRVQpICsgU1dJTl9TSVpFKVwKKwkJICkpCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGRlZmluZSB0aGUgbWFqb3IgcG9zaXRpb24taW5kZXBlbmRlbnQgYWxpYXNlcyB1c2VkCisgKiBpbiBTTi4KKyAqCVVBTElBUyAtLSAyNTZNQiBpbiBzaXplLCByZWFkcyBpbiB0aGUgVUFMSUFTIHJlc3VsdCBpbgorICoJCQl1bmNhY2hlZCByZWZlcmVuY2VzIHRvIHRoZSBtZW1vcnkgb2YgdGhlIHJlYWRlcidzIG5vZGUuCisgKglDUFVfVUFMSUFTIC0tIDEyOGtiIGluIHNpemUsIHRoZSBib3R0b20gcGFydCBvZiBVQUxJQVMgaXMgZmxpcHBlZAorICoJCQlkZXBlbmRpbmcgb24gd2hpY2ggQ1BVIGRvZXMgdGhlIGFjY2VzcyB0byBwcm92aWRlCisgKgkJCWFsbCBDUFVzIHdpdGggdW5pcXVlIHVuY2FjaGVkIG1lbW9yeSBhdCBsb3cgYWRkcmVzc2VzLgorICoJTEJPT1QgIC0tIDI1Nk1CIGluIHNpemUsIHJlYWRzIGluIHRoZSBMQk9PVCBhcmVhIHJlc3VsdCBpbgorICoJCQl1bmNhY2hlZCByZWZlcmVuY2VzIHRvIHRoZSBsb2NhbCBodWIncyBib290IHByb20gYW5kCisgKgkJCW90aGVyIGRpcmVjdG9yeS1idXMgY29ubmVjdGVkIGRldmljZXMuCisgKglJQUxJQVMgLS0gOE1CIGluIHNpemUsIHJlYWRzIGluIHRoZSBJQUxJQVMgcmVzdWx0IGluIHVuY2FjaGVkCisgKgkJCXJlZmVyZW5jZXMgdG8gdGhlIGxvY2FsIGh1YidzIHJlZ2lzdGVycy4KKyAqLworCisjZGVmaW5lIFVBTElBU19CQVNFCQlIU1BFQ19CQVNFCisjZGVmaW5lIFVBTElBU19TSVpFCQkweDEwMDAwMDAwCS8qIDI1NiBNZWdhYnl0ZXMgKi8KKyNkZWZpbmUgVUFMSUFTX0xJTUlUCQkoVUFMSUFTX0JBU0UgKyBVQUxJQVNfU0laRSkKKworLyoKKyAqIFRoZSBib3R0b20gb2YgdWFsaWFzIHNwYWNlIGlzIGZsaXBwZWQgZGVwZW5kaW5nIG9uIHdoZXRoZXIgeW91J3JlCisgKiBwcm9jZXNzb3IgMCBvciAxIHdpdGhpbiBhIG5vZGUuCisgKi8KKyNpZmRlZiBDT05GSUdfU0dJX0lQMjcKKyNkZWZpbmUgVUFMSUFTX0ZMSVBfQkFTRQlVQUxJQVNfQkFTRQorI2RlZmluZSBVQUxJQVNfRkxJUF9TSVpFCTB4MjAwMDAKKyNkZWZpbmUgVUFMSUFTX0ZMSVBfQklUCQkweDEwMDAwCisjZGVmaW5lIFVBTElBU19GTElQX0FERFIoX3gpCShjcHV0b3NsaWNlKHNtcF9wcm9jZXNzb3JfaWQoKSkgPyBcCisJCQkJIChfeCkgXiBVQUxJQVNfRkxJUF9CSVQgOiAoX3gpKQorCisjZGVmaW5lIExCT09UX0JBU0UJCShIU1BFQ19CQVNFICsgMHgxMDAwMDAwMCkKKyNkZWZpbmUgTEJPT1RfU0laRQkJMHgxMDAwMDAwMAorI2RlZmluZSBMQk9PVF9MSU1JVAkJKExCT09UX0JBU0UgKyBMQk9PVF9TSVpFKQorI2RlZmluZSBMQk9PVF9TVFJJREUJCTAJCS8qIElQMjcgaGFzIG9ubHkgb25lIENQVSBQUk9NICovCisKKyNlbmRpZgorCisjZGVmaW5lCUhVQl9SRUdJU1RFUl9XSURHRVQJMQorI2RlZmluZSBJQUxJQVNfQkFTRQkJTk9ERV9TV0lOX0JBU0UoMCwgSFVCX1JFR0lTVEVSX1dJREdFVCkKKyNkZWZpbmUgSUFMSUFTX1NJWkUJCTB4ODAwMDAwCS8qIDggTWVnYWJ5dGVzICovCisjZGVmaW5lIElTX0lBTElBUyhfYSkJCSgoKF9hKSA+PSBJQUxJQVNfQkFTRSkgJiYJCVwKKwkJCQkgKChfYSkgPCAoSUFMSUFTX0JBU0UgKyBJQUxJQVNfU0laRSkpKQorCisvKgorICogTWFjcm8gZm9yIHJlZmVycmluZyB0byBIdWIncyBSQk9PVCBzcGFjZQorICovCisKKyNpZmRlZiBDT05GSUdfU0dJX0lQMjcKKyNkZWZpbmUgUkJPT1RfU0laRQkJMHgxMDAwMDAwMAkvKiAyNTYgTWVnYWJ5dGVzICovCisjZGVmaW5lIE5PREVfUkJPT1RfQkFTRShfbikJKE5PREVfSFNQRUNfQkFTRShfbikgKyAweDMwMDAwMDAwKQorI2RlZmluZSBOT0RFX1JCT09UX0xJTUlUKF9uKQkoTk9ERV9SQk9PVF9CQVNFKF9uKSArIFJCT09UX1NJWkUpCisKKyNlbmRpZgorCisvKgorICogTWFjcm9zIGZvciByZWZlcnJpbmcgdGhlIEh1YidzIGJhY2sgZG9vciBzcGFjZQorICoKKyAqICAgVGhlc2UgbWFjcm9zIGNvcnJlY3RseSBwcm9jZXNzIGFkZHJlc3NlcyBpbiBhbnkgbm9kZSdzIHNwYWNlLgorICogICBXQVJOSU5HOiBUaGV5IHdvbid0IHdvcmsgaW4gYXNzZW1ibGVyLgorICoKKyAqICAgQkRESVJfRU5UUllfTE8gcmV0dXJucyB0aGUgYWRkcmVzcyBvZiB0aGUgbG93IGRvdWJsZS13b3JkIG9mIHRoZSBkaXIKKyAqICAgICAgICAgICAgICAgICAgZW50cnkgY29ycmVzcG9uZGluZyB0byBhIHBoeXNpY2FsIChDYWMgb3IgVW5jYWMpIGFkZHJlc3MuCisgKiAgIEJERElSX0VOVFJZX0hJIHJldHVybnMgdGhlIGFkZHJlc3Mgb2YgdGhlIGhpZ2ggZG91YmxlLXdvcmQgb2YgdGhlIGVudHJ5LgorICogICBCRFBSVF9FTlRSWSAgICByZXR1cm5zIHRoZSBhZGRyZXNzIG9mIHRoZSBkb3VibGUtd29yZCBwcm90ZWN0aW9uIGVudHJ5CisgKiAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHBhZ2UgY29udGFpbmluZyB0aGUgcGh5c2ljYWwgYWRkcmVzcy4KKyAqICAgQkRQUlRfRU5UUllfUyAgU3RvcmVzIHRoZSB2YWx1ZSBpbnRvIHRoZSBwcm90ZWN0aW9uIGVudHJ5LgorICogICBCRFBSVF9FTlRSWV9MICBMb2FkIHRoZSB2YWx1ZSBmcm9tIHRoZSBwcm90ZWN0aW9uIGVudHJ5LgorICogICBCREVDQ19FTlRSWSAgICByZXR1cm5zIHRoZSBhZGRyZXNzIG9mIHRoZSBFQ0MgYnl0ZSBjb3JyZXNwb25kaW5nIHRvIGEKKyAqICAgICAgICAgICAgICAgICAgZG91YmxlLXdvcmQgYXQgYSBzcGVjaWZpZWQgcGh5c2ljYWwgYWRkcmVzcy4KKyAqICAgQkRFQ0NfRU5UUllfSCAgcmV0dXJucyB0aGUgYWRkcmVzcyBvZiB0aGUgdHdvIEVDQyBieXRlcyBjb3JyZXNwb25kaW5nIHRvIGEKKyAqICAgICAgICAgICAgICAgICAgcXVhZC13b3JkIGF0IGEgc3BlY2lmaWVkIHBoeXNpY2FsIGFkZHJlc3MuCisgKi8KKyNkZWZpbmUgTk9ERV9CRE9PUl9CQVNFKF9uKQkoTk9ERV9IU1BFQ19CQVNFKF9uKSArIChOT0RFX0FERFJTUEFDRV9TSVpFLzIpKQorCisjZGVmaW5lIE5PREVfQkRFQ0NfQkFTRShfbikJKE5PREVfQkRPT1JfQkFTRShfbikpCisjZGVmaW5lIE5PREVfQkRESVJfQkFTRShfbikJKE5PREVfQkRPT1JfQkFTRShfbikgKyAoTk9ERV9BRERSU1BBQ0VfU0laRS80KSkKKyNpZmRlZiBDT05GSUdfU0dJX0lQMjcKKyNkZWZpbmUgQkRESVJfRU5UUllfTE8oX3BhKQkoKEhTUEVDX0JBU0UgKwkJCQkgICAgICBcCisJCQkJICBOT0RFX0FERFJTUEFDRV9TSVpFICogMyAvIDQgKwkJICAgICAgXAorCQkJCSAgMHgyMDApCQkJCSAgICB8IFwKKwkJCQkgVUlOVDY0X0NBU1QgKF9wYSkJICYgTkFTSURfTUFTSwkgICAgfCBcCisJCQkJIFVJTlQ2NF9DQVNUIChfcGEpID4+IDIgJiBCRERJUl9VUFBFUl9NQVNLICB8IFwKKwkJCQkgVUlOVDY0X0NBU1QgKF9wYSkgPj4gMyAmIDB4MWYgPDwgNCkKKworI2RlZmluZSBCRERJUl9FTlRSWV9ISShfcGEpCSgoSFNQRUNfQkFTRSArCQkJCSAgICAgIFwKKwkJCQkgIE5PREVfQUREUlNQQUNFX1NJWkUgKiAzIC8gNCArCQkgICAgICBcCisJCQkJICAweDIwOCkJCQkJICAgIHwgXAorCQkJCSBVSU5UNjRfQ0FTVCAoX3BhKQkgJiBOQVNJRF9NQVNLCSAgICB8IFwKKwkJCQkgVUlOVDY0X0NBU1QgKF9wYSkgPj4gMiAmIEJERElSX1VQUEVSX01BU0sgIHwgXAorCQkJCSBVSU5UNjRfQ0FTVCAoX3BhKSA+PiAzICYgMHgxZiA8PCA0KQorCisjZGVmaW5lIEJEUFJUX0VOVFJZKF9wYSwgX3JnbikJKChIU1BFQ19CQVNFICsJCQkJICAgICAgXAorCQkJCSAgTk9ERV9BRERSU1BBQ0VfU0laRSAqIDMgLyA0KQkJICAgIHwgXAorCQkJCSBVSU5UNjRfQ0FTVCAoX3BhKQkgJiBOQVNJRF9NQVNLCSAgICB8IFwKKwkJCQkgVUlOVDY0X0NBU1QgKF9wYSkgPj4gMiAmIEJERElSX1VQUEVSX01BU0sgIHwgXAorCQkJCSAoX3JnbikgPDwgMykKKyNkZWZpbmUgQkRQUlRfRU5UUllfQUREUihfcGEsX3JnbikgKEJEUFJUX0VOVFJZKChfcGEpLChfcmduKSkpCisjZGVmaW5lIEJEUFJUX0VOVFJZX1MoX3BhLF9yZ24sX3ZhbCkgKCooX19wc3Vuc2lnbmVkX3QgKilCRFBSVF9FTlRSWSgoX3BhKSwoX3JnbikpPShfdmFsKSkKKyNkZWZpbmUgQkRQUlRfRU5UUllfTChfcGEsX3JnbikJKCooX19wc3Vuc2lnbmVkX3QgKilCRFBSVF9FTlRSWSgoX3BhKSwoX3JnbikpKQorCisjZGVmaW5lIEJERUNDX0VOVFJZKF9wYSkJKChIU1BFQ19CQVNFICsJCQkJICAgICAgXAorCQkJCSAgTk9ERV9BRERSU1BBQ0VfU0laRSAvIDIpCQkgICAgfCBcCisJCQkJIFVJTlQ2NF9DQVNUIChfcGEpCSAmIE5BU0lEX01BU0sJICAgIHwgXAorCQkJCSBVSU5UNjRfQ0FTVCAoX3BhKSA+PiAyICYgQkRFQ0NfVVBQRVJfTUFTSyAgfCBcCisJCQkJIFVJTlQ2NF9DQVNUIChfcGEpID4+IDMgJiAzKQorCisvKgorICogTWFjcm8gdG8gY29udmVydCBhIGJhY2sgZG9vciBkaXJlY3Rvcnkgb3IgcHJvdGVjdGlvbiBhZGRyZXNzIGludG8gdGhlCisgKiAgIHJhdyBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBhc3NvY2lhdGVkIGNhY2hlIGxpbmUgb3IgcHJvdGVjdGlvbiBwYWdlLgorICovCisjZGVmaW5lIEJEQUREUl9JU19ESVIoX2JhKQkoKFVJTlQ2NF9DQVNUICAoX2JhKSAmIDB4MjAwKSAhPSAwKQorI2RlZmluZSBCREFERFJfSVNfUFJUKF9iYSkJKChVSU5UNjRfQ0FTVCAgKF9iYSkgJiAweDIwMCkgPT0gMCkKKworI2RlZmluZSBCRERJUl9UT19NRU0oX2JhKQkoVUlOVDY0X0NBU1QgIChfYmEpICYgTkFTSURfTUFTSyAgICAgICAgICAgIHwgXAorCQkJCSAoVUlOVDY0X0NBU1QgKF9iYSkgJiBCRERJUl9VUFBFUl9NQVNLKTw8MiAgfCBcCisJCQkJIChVSU5UNjRfQ0FTVCAoX2JhKSAmIDB4MWYgPDwgNCkgPDwgMykKKworI2RlZmluZSBCRFBSVF9UT19NRU0oX2JhKSAJKFVJTlQ2NF9DQVNUICAoX2JhKSAmIE5BU0lEX01BU0sJICAgIHwgXAorCQkJCSAoVUlOVDY0X0NBU1QgKF9iYSkgJiBCRERJUl9VUFBFUl9NQVNLKTw8MikKKworI2RlZmluZSBCREVDQ19UT19NRU0oX2JhKQkoVUlOVDY0X0NBU1QgIChfYmEpICYgTkFTSURfTUFTSwkgICAgfCBcCisJCQkJIChVSU5UNjRfQ0FTVCAoX2JhKSAmIEJERUNDX1VQUEVSX01BU0spPDwyICB8IFwKKwkJCQkgKFVJTlQ2NF9DQVNUIChfYmEpICYgMykgPDwgMykKKyNlbmRpZiAvKiBDT05GSUdfU0dJX0lQMjcgKi8KKworCisvKgorICogVGhlIGZvbGxvd2luZyBtYWNyb3MgcHJvZHVjZSB0aGUgY29ycmVjdCBiYXNlIHZpcnR1YWwgYWRkcmVzcyBmb3IKKyAqIHRoZSBodWIgcmVnaXN0ZXJzLiAgVGhlIExPQ0FMX0hVQl8qIG1hY3JvcyBwcm9kdWNlIHRoZSBhcHByb3ByaWF0ZQorICogYWRkcmVzcyBmb3IgdGhlIGxvY2FsIHJlZ2lzdGVycy4gIFRoZSBSRU1PVEVfSFVCXyogbWFjcm8gcHJvZHVjZQorICogdGhlIGFkZHJlc3MgZm9yIHRoZSBzcGVjaWZpZWQgaHViJ3MgcmVnaXN0ZXJzLiAgVGhlIGludGVudCBpcworICogdGhhdCB0aGUgYXBwcm9wcmlhdGUgUEksIE1ELCBOSSwgb3IgSUkgcmVnaXN0ZXIgd291bGQgYmUgc3Vic3RpdHV0ZWQKKyAqIGZvciBfeC4KKyAqLworCisjaWZkZWYgX1NUQU5EQUxPTkUKKworLyogRE8gTk9UIFVTRSBUSEVTRSBESVJFQ1RMWSBJTiBUSEUgS0VSTkVMLiBTRUUgQkVMT1cuICovCisjZGVmaW5lIExPQ0FMX0hVQihfeCkJCShIVUJSRUdfQ0FTVCAoSUFMSUFTX0JBU0UgKyAoX3gpKSkKKyNkZWZpbmUgUkVNT1RFX0hVQihfbiwgX3gpCShIVUJSRUdfQ0FTVCAoTk9ERV9TV0lOX0JBU0UoX24sIDEpICsJXAorCQkJCQkgICAgICAweDgwMDAwMCArIChfeCkpKQorI2VuZGlmIC8qIF9TVEFOREFMT05FICovCisKKy8qCisgKiBXQVJOSU5HOgorICoJV2hlbiBjZXJ0YWluIEh1YiBjaGlwIHdvcmthcm91bmQgYXJlIGRlZmluZWQsIGl0J3Mgbm90IHN1ZmZpY2llbnQKKyAqCXRvIGRlcmVmZXJlbmNlIHRoZSAqX0hVQl9BRERSKCkgbWFjcm9zLiAgWW91IHNob3VsZCBpbnN0ZWFkIHVzZQorICoJSFVCX0woKSBhbmQgSFVCX1MoKSBpZiB5b3UgbXVzdCBkZWFsIHdpdGggcG9pbnRlcnMgdG8gaHViIHJlZ2lzdGVycy4KKyAqCU90aGVyd2lzZSwgdGhlIHJlY29tbWVuZGVkIGFwcHJvYWNoIGlzIHRvIHVzZSAqX0hVQl9MKCkgYW5kICpfSFVCX1MoKS4KKyAqCVRoZXkncmUgYWx3YXlzIHNhZmUuCisgKi8KKyNkZWZpbmUgTE9DQUxfSFVCX0FERFIoX3gpCShIVUJSRUdfQ0FTVCAoSUFMSUFTX0JBU0UgKyAoX3gpKSkKKyNkZWZpbmUgUkVNT1RFX0hVQl9BRERSKF9uLCBfeCkJKEhVQlJFR19DQVNUIChOT0RFX1NXSU5fQkFTRShfbiwgMSkgKwlcCisJCQkJCSAgICAgIDB4ODAwMDAwICsgKF94KSkpCisjaWZkZWYgQ09ORklHX1NHSV9JUDI3CisjZGVmaW5lIFJFTU9URV9IVUJfUElfQUREUihfbiwgX3NuLCBfeCkJKEhVQlJFR19DQVNUIChOT0RFX1NXSU5fQkFTRShfbiwgMSkgKwlcCisJCQkJCSAgICAgIDB4ODAwMDAwICsgKF94KSkpCisjZW5kaWYgLyogQ09ORklHX1NHSV9JUDI3ICovCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNkZWZpbmUgSFVCX0woX2EpCQkJKihfYSkKKyNkZWZpbmUJSFVCX1MoX2EsIF9kKQkJCSooX2EpID0gKF9kKQorCisjZGVmaW5lIExPQ0FMX0hVQl9MKF9yKQkJCUhVQl9MKExPQ0FMX0hVQl9BRERSKF9yKSkKKyNkZWZpbmUgTE9DQUxfSFVCX1MoX3IsIF9kKQkJSFVCX1MoTE9DQUxfSFVCX0FERFIoX3IpLCAoX2QpKQorI2RlZmluZSBSRU1PVEVfSFVCX0woX24sIF9yKQkJSFVCX0woUkVNT1RFX0hVQl9BRERSKChfbiksIChfcikpKQorI2RlZmluZSBSRU1PVEVfSFVCX1MoX24sIF9yLCBfZCkJSFVCX1MoUkVNT1RFX0hVQl9BRERSKChfbiksIChfcikpLCAoX2QpKQorI2RlZmluZSBSRU1PVEVfSFVCX1BJX0woX24sIF9zbiwgX3IpCUhVQl9MKFJFTU9URV9IVUJfUElfQUREUigoX24pLCAoX3NuKSwgKF9yKSkpCisjZGVmaW5lIFJFTU9URV9IVUJfUElfUyhfbiwgX3NuLCBfciwgX2QpIEhVQl9TKFJFTU9URV9IVUJfUElfQUREUigoX24pLCAoX3NuKSwgKF9yKSksIChfZCkpCisKKyNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIG1hY3JvcyBhcmUgdXNlZCB0byBnZXQgdG8gYSBodWIvYnJpZGdlIHJlZ2lzdGVyLCBnaXZlbgorICogdGhlIGJhc2Ugb2YgdGhlIHJlZ2lzdGVyIHNwYWNlLgorICovCisjZGVmaW5lIEhVQl9SRUdfUFRSKF9iYXNlLCBfb2ZmKQlcCisJKEhVQlJFR19DQVNUICgoX19wc3Vuc2lnbmVkX3QpKF9iYXNlKSArIChfX3BzdW5zaWduZWRfdCkoX29mZikpKQorCisjZGVmaW5lIEhVQl9SRUdfUFRSX0woX2Jhc2UsIF9vZmYpCVwKKwlIVUJfTChIVUJfUkVHX1BUUigoX2Jhc2UpLCAoX29mZikpKQorCisjZGVmaW5lIEhVQl9SRUdfUFRSX1MoX2Jhc2UsIF9vZmYsIF9kYXRhKQlcCisJSFVCX1MoSFVCX1JFR19QVFIoKF9iYXNlKSwgKF9vZmYpKSwgKF9kYXRhKSkKKworLyoKKyAqIFNvZnR3YXJlIHN0cnVjdHVyZSBsb2NhdGlvbnMgLS0gcGVybWFuZW50bHkgZml4ZWQKKyAqICAgIFNlZSBkaWFncmFtIGluIGtsZGlyLmgKKyAqLworCisjZGVmaW5lIFBIWVNfUkFNQkFTRQkJMHgwCisjZGVmaW5lIEswX1JBTUJBU0UJCVBIWVNfVE9fSzAoUEhZU19SQU1CQVNFKQorCisjZGVmaW5lIEVYX0hBTkRMRVJfT0ZGU0VUKHNsaWNlKSAoKHNsaWNlKSA8PCAxNikKKyNkZWZpbmUgRVhfSEFORExFUl9BRERSKG5hc2lkLCBzbGljZSkJCQkJCVwKKwlQSFlTX1RPX0swKE5PREVfT0ZGU0VUKG5hc2lkKSB8IEVYX0hBTkRMRVJfT0ZGU0VUKHNsaWNlKSkKKyNkZWZpbmUgRVhfSEFORExFUl9TSVpFCQkweDA0MDAKKworI2RlZmluZSBFWF9GUkFNRV9PRkZTRVQoc2xpY2UpCSgoc2xpY2UpIDw8IDE2IHwgMHg0MDApCisjZGVmaW5lIEVYX0ZSQU1FX0FERFIobmFzaWQsIHNsaWNlKQkJCQkJXAorCVBIWVNfVE9fSzAoTk9ERV9PRkZTRVQobmFzaWQpIHwgRVhfRlJBTUVfT0ZGU0VUKHNsaWNlKSkKKyNkZWZpbmUgRVhfRlJBTUVfU0laRQkJMHgwYzAwCisKKyNkZWZpbmUgQVJDU19TUEJfT0ZGU0VUCQkweDEwMDAKKyNkZWZpbmUgQVJDU19TUEJfQUREUihuYXNpZCkJCQkJCQlcCisJUEhZU19UT19LMChOT0RFX09GRlNFVChuYXNpZCkgfCBBUkNTX1NQQl9PRkZTRVQpCisjZGVmaW5lIEFSQ1NfU1BCX1NJWkUJCTB4MDQwMAorCisjaWZkZWYgX1NUQU5EQUxPTkUKKworI2RlZmluZSBBUkNTX1RWRUNUT1JfT0ZGU0VUCTB4MjgwMAorI2RlZmluZSBBUkNTX1BWRUNUT1JfT0ZGU0VUCTB4MmMwMAorCisvKgorICogVGhlc2UgYWRkcmVzc2VzIGFyZSB1c2VkIGJ5IHRoZSBtYXN0ZXIgQ1BVIHRvIGluc3RhbGwgdGhlIHRyYW5zZmVyCisgKiBhbmQgcHJpdmF0ZSB2ZWN0b3JzLiAgQWxsIG90aGVycyB1c2UgdGhlIFNQQiB0byBmaW5kIHRoZW0uCisgKi8KKyNkZWZpbmUgVFZBRERSCShOT0RFX0NBQ19CQVNFKGdldF9uYXNpZCgpKSArIEFSQ1NfVFZFQ1RPUl9PRkZTRVQpCisjZGVmaW5lIFBWQUREUgkoTk9ERV9DQUNfQkFTRShnZXRfbmFzaWQoKSkgKyBBUkNTX1BWRUNUT1JfT0ZGU0VUKQorCisjZW5kaWYgLyogX1NUQU5EQUxPTkUgKi8KKworI2RlZmluZSBLTERJUl9PRkZTRVQJCTB4MjAwMAorI2RlZmluZSBLTERJUl9BRERSKG5hc2lkKQkJCQkJCVwKKwlUT19OT0RFX1VOQ0FDKChuYXNpZCksIEtMRElSX09GRlNFVCkKKyNkZWZpbmUgS0xESVJfU0laRQkJMHgwNDAwCisKKworLyoKKyAqIFNvZnR3YXJlIHN0cnVjdHVyZSBsb2NhdGlvbnMgLS0gaW5kaXJlY3RlZCB0aHJvdWdoIEtMRElSCisgKiAgICBTZWUgZGlhZ3JhbSBpbiBrbGRpci5oCisgKgorICogSW1wb3J0YW50OglBbGwgbG93IG1lbW9yeSBzdHJ1Y3R1cmVzIG11c3Qgb25seSBiZSBhY2Nlc3NlZAorICoJCXVuY2FjaGVkLCBleGNlcHQgZm9yIHRoZSBzeW1tb24gc3RhY2tzLgorICovCisKKyNkZWZpbmUgS0xJX0xBVU5DSAkJMAkJLyogRGlyLiBlbnRyaWVzICovCisjZGVmaW5lIEtMSV9LTENPTkZJRwkJMQorI2RlZmluZQlLTElfTk1JCQkJMgorI2RlZmluZSBLTElfR0RBCQkJMworI2RlZmluZSBLTElfRlJFRU1FTQkJNAorI2RlZmluZQlLTElfU1lNTU9OX1NUSwkJNQorI2RlZmluZSBLTElfUElfRVJST1IJCTYKKyNkZWZpbmUgS0xJX0tFUk5fVkFSUwkJNworI2RlZmluZQlLTElfS0VSTl9YUAkJOAorI2RlZmluZQlLTElfS0VSTl9QQVJUSUQJCTkKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworI2RlZmluZSBLTERfQkFTRShuYXNpZCkJCSgoa2xkaXJfZW50X3QgKikgS0xESVJfQUREUihuYXNpZCkpCisjZGVmaW5lIEtMRF9MQVVOQ0gobmFzaWQpCShLTERfQkFTRShuYXNpZCkgKyBLTElfTEFVTkNIKQorI2RlZmluZSBLTERfTk1JKG5hc2lkKQkJKEtMRF9CQVNFKG5hc2lkKSArIEtMSV9OTUkpCisjZGVmaW5lIEtMRF9LTENPTkZJRyhuYXNpZCkJKEtMRF9CQVNFKG5hc2lkKSArIEtMSV9LTENPTkZJRykKKyNkZWZpbmUgS0xEX1BJX0VSUk9SKG5hc2lkKQkoS0xEX0JBU0UobmFzaWQpICsgS0xJX1BJX0VSUk9SKQorI2RlZmluZSBLTERfR0RBKG5hc2lkKQkJKEtMRF9CQVNFKG5hc2lkKSArIEtMSV9HREEpCisjZGVmaW5lIEtMRF9TWU1NT05fU1RLKG5hc2lkKQkoS0xEX0JBU0UobmFzaWQpICsgS0xJX1NZTU1PTl9TVEspCisjZGVmaW5lIEtMRF9GUkVFTUVNKG5hc2lkKQkoS0xEX0JBU0UobmFzaWQpICsgS0xJX0ZSRUVNRU0pCisjZGVmaW5lIEtMRF9LRVJOX1ZBUlMobmFzaWQpCShLTERfQkFTRShuYXNpZCkgKyBLTElfS0VSTl9WQVJTKQorI2RlZmluZQlLTERfS0VSTl9YUChuYXNpZCkJKEtMRF9CQVNFKG5hc2lkKSArIEtMSV9LRVJOX1hQKQorI2RlZmluZQlLTERfS0VSTl9QQVJUSUQobmFzaWQpCShLTERfQkFTRShuYXNpZCkgKyBLTElfS0VSTl9QQVJUSUQpCisKKyNkZWZpbmUgTEFVTkNIX09GRlNFVChuYXNpZCwgc2xpY2UpCQkJCQlcCisJKEtMRF9MQVVOQ0gobmFzaWQpLT5vZmZzZXQgKwkJCQkJXAorCSBLTERfTEFVTkNIKG5hc2lkKS0+c3RyaWRlICogKHNsaWNlKSkKKyNkZWZpbmUgTEFVTkNIX0FERFIobmFzaWQsIHNsaWNlKQkJCQkJXAorCVRPX05PREVfVU5DQUMoKG5hc2lkKSwgTEFVTkNIX09GRlNFVChuYXNpZCwgc2xpY2UpKQorI2RlZmluZSBMQVVOQ0hfU0laRShuYXNpZCkJS0xEX0xBVU5DSChuYXNpZCktPnNpemUKKworI2RlZmluZSBOTUlfT0ZGU0VUKG5hc2lkLCBzbGljZSkJCQkJCVwKKwkoS0xEX05NSShuYXNpZCktPm9mZnNldCArCQkJCQlcCisJIEtMRF9OTUkobmFzaWQpLT5zdHJpZGUgKiAoc2xpY2UpKQorI2RlZmluZSBOTUlfQUREUihuYXNpZCwgc2xpY2UpCQkJCQkJXAorCVRPX05PREVfVU5DQUMoKG5hc2lkKSwgTk1JX09GRlNFVChuYXNpZCwgc2xpY2UpKQorI2RlZmluZSBOTUlfU0laRShuYXNpZCkJS0xEX05NSShuYXNpZCktPnNpemUKKworI2RlZmluZSBLTENPTkZJR19PRkZTRVQobmFzaWQpCUtMRF9LTENPTkZJRyhuYXNpZCktPm9mZnNldAorI2RlZmluZSBLTENPTkZJR19BRERSKG5hc2lkKQkJCQkJCVwKKwlUT19OT0RFX1VOQ0FDKChuYXNpZCksIEtMQ09ORklHX09GRlNFVChuYXNpZCkpCisjZGVmaW5lIEtMQ09ORklHX1NJWkUobmFzaWQpCUtMRF9LTENPTkZJRyhuYXNpZCktPnNpemUKKworI2RlZmluZSBHREFfQUREUihuYXNpZCkJCUtMRF9HREEobmFzaWQpLT5wb2ludGVyCisjZGVmaW5lIEdEQV9TSVpFKG5hc2lkKQkJS0xEX0dEQShuYXNpZCktPnNpemUKKworI2RlZmluZSBTWU1NT05fU1RLX09GRlNFVChuYXNpZCwgc2xpY2UpCQkJCQlcCisJKEtMRF9TWU1NT05fU1RLKG5hc2lkKS0+b2Zmc2V0ICsJCQkJXAorCSBLTERfU1lNTU9OX1NUSyhuYXNpZCktPnN0cmlkZSAqIChzbGljZSkpCisjZGVmaW5lIFNZTU1PTl9TVEtfU1RSSURFKG5hc2lkKQlLTERfU1lNTU9OX1NUSyhuYXNpZCktPnN0cmlkZQorCisjZGVmaW5lIFNZTU1PTl9TVEtfQUREUihuYXNpZCwgc2xpY2UpCQkJCQlcCisJVE9fTk9ERV9DQUMoKG5hc2lkKSwgU1lNTU9OX1NUS19PRkZTRVQobmFzaWQsIHNsaWNlKSkKKworI2RlZmluZSBTWU1NT05fU1RLX1NJWkUobmFzaWQpCUtMRF9TWU1NT05fU1RLKG5hc2lkKS0+c3RyaWRlCisKKyNkZWZpbmUgU1lNTU9OX1NUS19FTkQobmFzaWQpCShTWU1NT05fU1RLX0FERFIobmFzaWQsIDApICsgS0xEX1NZTU1PTl9TVEsobmFzaWQpLT5zaXplKQorCisvKiBsb2FkaW5nIHN5bW1vbiA0ayBiZWxvdyBVTklYLiB0aGUgYXJjcyBsb2FkZXIgbmVlZHMgdGhlIHRvcGFkZHIgZm9yIGEKKyAqIHJlbG9jYXRhYmxlIHByb2dyYW0KKyAqLworI2RlZmluZQlVTklYX0RFQlVHX0xPQURBRERSCTB4MzAwMDAwCisjZGVmaW5lCVNZTU1PTl9MT0FEQUREUihuYXNpZCkJCQkJCQlcCisJVE9fTk9ERShuYXNpZCwgUEhZU19UT19LMChVTklYX0RFQlVHX0xPQURBRERSIC0gMHgxMDAwKSkKKworI2RlZmluZSBGUkVFTUVNX09GRlNFVChuYXNpZCkJS0xEX0ZSRUVNRU0obmFzaWQpLT5vZmZzZXQKKyNkZWZpbmUgRlJFRU1FTV9BRERSKG5hc2lkKQlTWU1NT05fU1RLX0VORChuYXNpZCkKKy8qCisgKiBYWFgKKyAqIEZpeCB0aGlzLiBGUkVFTUVNX0FERFIgc2hvdWxkIGJlIGF3YXJlIG9mIGlmIHN5bW1vbiBpcyBsb2FkZWQuCisgKiBBbHNvLCBpdCBzaG91bGQgdGFrZSBpbnRvIGFjY291bnQgd2hhdCBwcm9tIHRoaW5rcyB0byBiZSBhIHNhZmUKKyAqIGFkZHJlc3MKKwlQSFlTX1RPX0swKE5PREVfT0ZGU0VUKG5hc2lkKSArIEZSRUVNRU1fT0ZGU0VUKG5hc2lkKSkKKyAqLworI2RlZmluZSBGUkVFTUVNX1NJWkUobmFzaWQpCUtMRF9GUkVFTUVNKG5hc2lkKS0+c2l6ZQorCisjZGVmaW5lIFBJX0VSUk9SX09GRlNFVChuYXNpZCkJS0xEX1BJX0VSUk9SKG5hc2lkKS0+b2Zmc2V0CisjZGVmaW5lIFBJX0VSUk9SX0FERFIobmFzaWQpCQkJCQkJXAorCVRPX05PREVfVU5DQUMoKG5hc2lkKSwgUElfRVJST1JfT0ZGU0VUKG5hc2lkKSkKKyNkZWZpbmUgUElfRVJST1JfU0laRShuYXNpZCkJS0xEX1BJX0VSUk9SKG5hc2lkKS0+c2l6ZQorCisjZGVmaW5lIE5PREVfT0ZGU0VUX1RPX0swKF9uYXNpZCwgX29mZikJCQkJCVwKKwlQSFlTX1RPX0swKChOT0RFX09GRlNFVChfbmFzaWQpICsgKF9vZmYpKSB8IENBQ19CQVNFKQorI2RlZmluZSBOT0RFX09GRlNFVF9UT19LMShfbmFzaWQsIF9vZmYpCQkJCQlcCisJVE9fVU5DQUMoKE5PREVfT0ZGU0VUKF9uYXNpZCkgKyAoX29mZikpIHwgVU5DQUNfQkFTRSkKKyNkZWZpbmUgSzBfVE9fTk9ERV9PRkZTRVQoX2swYWRkcikJCQkJCVwKKwkoKF9fcHN1bnNpZ25lZF90KShfazBhZGRyKSAmIE5PREVfQUREUlNQQUNFX01BU0spCisKKyNkZWZpbmUgS0VSTl9WQVJTX0FERFIobmFzaWQpCUtMRF9LRVJOX1ZBUlMobmFzaWQpLT5wb2ludGVyCisjZGVmaW5lIEtFUk5fVkFSU19TSVpFKG5hc2lkKQlLTERfS0VSTl9WQVJTKG5hc2lkKS0+c2l6ZQorCisjZGVmaW5lCUtFUk5fWFBfQUREUihuYXNpZCkJS0xEX0tFUk5fWFAobmFzaWQpLT5wb2ludGVyCisjZGVmaW5lCUtFUk5fWFBfU0laRShuYXNpZCkJS0xEX0tFUk5fWFAobmFzaWQpLT5zaXplCisKKyNkZWZpbmUgR1BEQV9BRERSKG5hc2lkKQlUT19OT0RFX0NBQyhuYXNpZCwgR1BEQV9PRkZTRVQpCisKKyNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCisKKworI2VuZGlmIC8qIF9BU01fU05fQUREUlNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zbi9hZ2VudC5oIGIvaW5jbHVkZS9hc20tbWlwcy9zbi9hZ2VudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2ZGYxM2EKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NuL2FnZW50LmgKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFRoaXMgZmlsZSBoYXMgZGVmaW5pdGlvbnMgZm9yIHRoZSBodWIgYW5kIHNuYWMgaW50ZXJmYWNlcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTIgLSAxOTk3LCAxOTk5LCAyMDAwIFNpbGNvbiBHcmFwaGljcywgSW5jLgorICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwIFJhbGYgQmFlY2hsZSAocmFsZkBnbnUub3JnKQorICovCisjaWZuZGVmIF9BU01fU0dJX1NOX0FHRU5UX0gKKyNkZWZpbmUgX0FTTV9TR0lfU05fQUdFTlRfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvdG9wb2xvZ3kuaD4KKyNpbmNsdWRlIDxhc20vc24vYWRkcnMuaD4KKyNpbmNsdWRlIDxhc20vc24vYXJjaC5oPgorCisjaWYgZGVmaW5lZChDT05GSUdfU0dJX0lQMjcpCisjaW5jbHVkZSA8YXNtL3NuL3NuMC9odWIuaD4KKyNlbGlmIGRlZmluZWQoQ09ORklHX1NHSV9JUDM1KQorI2luY2x1ZGUgPGFzbS9zbi9zbjEvaHViLmg+CisjZW5kaWYJLyogIUNPTkZJR19TR0lfSVAyNyAmJiAhQ09ORklHX1NHSV9JUDM1ICovCisKKy8qCisgKiBOSUMgcmVnaXN0ZXIgbWFjcm9zCisgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1NHSV9JUDI3KQorI2RlZmluZSBIVUJfTklDX0FERFIoX2NwdWlkKSAJCQkJCQkgICBcCisJUkVNT1RFX0hVQl9BRERSKENPTVBBQ1RfVE9fTkFTSURfTk9ERUlEKGNwdV90b19ub2RlKF9jcHVpZCkpLCAgICAgICBcCisJCU1EX01MQU5fQ1RMKQorI2VuZGlmCisKKyNkZWZpbmUgU0VUX0hVQl9OSUMoX215X2NwdWlkLCBfdmFsKSAJCQkJICAJICAgXAorCShIVUJfUyhIVUJfTklDX0FERFIoX215X2NwdWlkKSwgKF92YWwpKSkKKworI2RlZmluZSBTRVRfTVlfSFVCX05JQyhfdikgCQkJCQkgICAgICAgICAgIFwKKwlTRVRfSFVCX05JQyhjcHVpZCgpLCAoX3YpKQorCisjZGVmaW5lIEdFVF9IVUJfTklDKF9teV9jcHVpZCkgCQkJCQkJICAgXAorCShIVUJfTChIVUJfTklDX0FERFIoX215X2NwdWlkKSkpCisKKyNkZWZpbmUgR0VUX01ZX0hVQl9OSUMoKSAJCQkJCQkgICBcCisJR0VUX0hVQl9OSUMoY3B1aWQoKSkKKworI2VuZGlmIC8qIF9BU01fU0dJX1NOX0FHRU5UX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc24vYXJjaC5oIGIvaW5jbHVkZS9hc20tbWlwcy9zbi9hcmNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI0N2E4MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc24vYXJjaC5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBTR0kgc3BlY2lmaWMgc2V0dXAuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1IC0gMTk5NywgMTk5OSBTaWxjb24gR3JhcGhpY3MsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMTk5OSBSYWxmIEJhZWNobGUgKHJhbGZAZ251Lm9yZykKKyAqLworI2lmbmRlZiBfQVNNX1NOX0FSQ0hfSAorI2RlZmluZSBfQVNNX1NOX0FSQ0hfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vc24vdHlwZXMuaD4KKyNpZmRlZiBDT05GSUdfU0dJX0lQMjcKKyNpbmNsdWRlIDxhc20vc24vc24wL2FyY2guaD4KKyNlbmRpZgorCit0eXBlZGVmIHU2NAlodWJyZWdfdDsKK3R5cGVkZWYgdTY0CW5pY190OworCisjZGVmaW5lIGNwdXRvbmFzaWQoY3B1KQkJCShjcHVfZGF0YVsoY3B1KV0ucF9uYXNpZCkKKyNkZWZpbmUgY3B1dG9zbGljZShjcHUpCQkJKGNwdV9kYXRhWyhjcHUpXS5wX3NsaWNlKQorI2RlZmluZSBtYWtlc3BudW0oX25hc2lkLCBfc2xpY2UpCQkJCQlcCisJCSgoKF9uYXNpZCkgPDwgQ1BVU19QRVJfTk9ERV9TSEZUKSB8IChfc2xpY2UpKQorCisjZGVmaW5lIElOVkFMSURfTkFTSUQJCShuYXNpZF90KS0xCisjZGVmaW5lIElOVkFMSURfQ05PREVJRAkJKGNub2RlaWRfdCktMQorI2RlZmluZSBJTlZBTElEX1BOT0RFSUQJCShwbm9kZWlkX3QpLTEKKyNkZWZpbmUgSU5WQUxJRF9NT0RVTEUJCShtb2R1bGVpZF90KS0xCisjZGVmaW5lCUlOVkFMSURfUEFSVElECQkocGFydGlkX3QpLTEKKworZXh0ZXJuIG5hc2lkX3QgZ2V0X25hc2lkKHZvaWQpOworZXh0ZXJuIGNub2RlaWRfdCBnZXRfY3B1X2Nub2RlKGNwdWlkX3QpOworZXh0ZXJuIGludCBnZXRfY3B1X3NsaWNlKGNwdWlkX3QpOworCisvKgorICogTk8gT05FIHNob3VsZCBhY2Nlc3MgdGhlc2UgYXJyYXlzIGRpcmVjdGx5LiAgVGhlIG9ubHkgcmVhc29uIHdlIHJlZmVyIHRvCisgKiB0aGVtIGhlcmUgaXMgdG8gYXZvaWQgdGhlIHByb2NlZHVyZSBjYWxsIHRoYXQgd291bGQgYmUgcmVxdWlyZWQgaW4gdGhlCisgKiBtYWNyb3MgYmVsb3cuICAoUmVhbGx5IHdhbnQgcHJpdmF0ZSBkYXRhIG1lbWJlcnMgaGVyZSA6LSkKKyAqLworZXh0ZXJuIGNub2RlaWRfdCBuYXNpZF90b19jb21wYWN0X25vZGVbTUFYX05BU0lEU107CitleHRlcm4gbmFzaWRfdCBjb21wYWN0X3RvX25hc2lkX25vZGVbTUFYX0NPTVBBQ1RfTk9ERVNdOworCisvKgorICogVGhlc2UgbWFjcm9zIGFyZSB1c2VkIGJ5IHZhcmlvdXMgcGFydHMgb2YgdGhlIGtlcm5lbCB0byBjb252ZXJ0CisgKiBiZXR3ZWVuIHRoZSB0aHJlZSBkaWZmZXJlbnQga2luZHMgb2Ygbm9kZSBudW1iZXJpbmcuICAgQXQgbGVhc3Qgc29tZQorICogb2YgdGhlbSBtYXkgY2hhbmdlIHRvIHByb2NlZHVyZSBjYWxscyBpbiB0aGUgZnV0dXJlLCBidXQgdGhlIG1hY3JvcworICogd2lsbCBjb250aW51ZSB0byB3b3JrLiAgRG9uJ3QgdXNlIHRoZSBhcnJheXMgYWJvdmUgZGlyZWN0bHkuCisgKi8KKworI2RlZmluZQlOQVNJRF9UT19SRUdJT04obm5vZGUpCSAgICAgIAlcCisgICAgKChubm9kZSkgPj4gXAorICAgICAoaXNfZmluZV9kaXJtb2RlKCkgPyBOQVNJRF9UT19GSU5FUkVHX1NIRlQgOiBOQVNJRF9UT19DT0FSU0VSRUdfU0hGVCkpCisKK2V4dGVybiBjbm9kZWlkX3QgbmFzaWRfdG9fY29tcGFjdF9ub2RlW01BWF9OQVNJRFNdOworZXh0ZXJuIG5hc2lkX3QgY29tcGFjdF90b19uYXNpZF9ub2RlW01BWF9DT01QQUNUX05PREVTXTsKK2V4dGVybiBjbm9kZWlkX3QgY3B1aWRfdG9fY29tcGFjdF9ub2RlW01BWENQVVNdOworCisjZGVmaW5lIE5BU0lEX1RPX0NPTVBBQ1RfTk9ERUlEKG5ub2RlKQkobmFzaWRfdG9fY29tcGFjdF9ub2RlW25ub2RlXSkKKyNkZWZpbmUgQ09NUEFDVF9UT19OQVNJRF9OT0RFSUQoY25vZGUpCShjb21wYWN0X3RvX25hc2lkX25vZGVbY25vZGVdKQorI2RlZmluZSBDUFVJRF9UT19DT01QQUNUX05PREVJRChjcHUpCShjcHVpZF90b19jb21wYWN0X25vZGVbKGNwdSldKQorCisjZW5kaWYgLyogX0FTTV9TTl9BUkNIX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc24vZ2RhLmggYi9pbmNsdWRlL2FzbS1taXBzL3NuL2dkYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljYjZmZjcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NuL2dkYS5oCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogRGVyaXZlZCBmcm9tIElSSVggPHN5cy9TTi9nZGEuaD4uCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkyIC0gMTk5NywgMjAwMCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCisgKgorICogZ2RhLmggLS0gQ29udGFpbnMgdGhlIGRhdGEgc3RydWN0dXJlIGZvciB0aGUgZ2xvYmFsIGRhdGEgYXJlYSwKKyAqIAlUaGUgR0RBIGNvbnRhaW5zIGluZm9ybWF0aW9uIGNvbW11bmljYXRlZCBiZXR3ZWVuIHRoZQorICoJUFJPTSwgU1lNTU9OLCBhbmQgdGhlIGtlcm5lbC4KKyAqLworI2lmbmRlZiBfQVNNX1NOX0dEQV9ICisjZGVmaW5lIF9BU01fU05fR0RBX0gKKworI2luY2x1ZGUgPGFzbS9zbi9hZGRycy5oPgorCisjZGVmaW5lIEdEQV9NQUdJQwkweDU4NDY0NTUyCisKKy8qCisgKiBHREEgVmVyc2lvbiBIaXN0b3J5CisgKgorICogVmVyc2lvbiAjCXwgQ2hhbmdlCisgKiAtLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIAkxCXwgSW5pdGlhbCBTTjAgdmVyc2lvbgorICogCTIJfCBQcm9tIHNldHMgZ19wYXJ0aWQgZmllbGQgdG8gdGhlIHBhcnRpdGlvbiBudW1iZXIuIDAgSVMKKyAqCQl8IGEgdmFsaWQgcGFydGl0aW9uICMuCisgKi8KKworI2RlZmluZSBHREFfVkVSU0lPTgkyCS8qIEN1cnJlbnQgR0RBIHZlcnNpb24gIyAqLworCisjZGVmaW5lIEdfTUFHSUNPRkYJMAorI2RlZmluZSBHX1ZFUlNJT05PRkYJNAorI2RlZmluZSBHX1BST01PUE9GRgk2CisjZGVmaW5lIEdfTUFTVEVST0ZGCTgKKyNkZWZpbmUgR19WRFNPRkYJMTIKKyNkZWZpbmUgR19IS0ROT1JNT0ZGCTE2CisjZGVmaW5lIEdfSEtEVVRMQk9GRgkyNAorI2RlZmluZSBHX0hLRFhVVExCT0ZGCTMyCisjZGVmaW5lIEdfUEFSVElET0ZGCTQwCisjZGVmaW5lIEdfVEFCTEVPRkYJMTI4CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK3R5cGVkZWYgc3RydWN0IGdkYSB7CisJdTMyCWdfbWFnaWM7CS8qIEdEQSBtYWdpYyBudW1iZXIgKi8KKwl1MTYJZ192ZXJzaW9uOwkvKiBWZXJzaW9uIG9mIHRoaXMgc3RydWN0dXJlICovCisJdTE2CWdfbWFzdGVyaWQ7CS8qIFRoZSBOQVNJRDpDUFVOVU0gb2YgdGhlIG1hc3RlciBjcHUgKi8KKwl1MzIJZ19wcm9tb3A7CS8qIFBhc3NlcyByZXF1ZXN0cyBmcm9tIHRoZSBrZXJuZWwgdG8gcHJvbSAqLworCXUzMglnX3ZkczsJCS8qIFN0b3JlIHRoZSB2aXJ0dWFsIGRpcHN3aXRjaGVzIGhlcmUgKi8KKwl2b2lkCSoqZ19ob29rZWRfbm9ybTsvKiBwdHIgdG8gcGRhIGxvYyBmb3Igbm9ybSBobmRsciAqLworCXZvaWQJKipnX2hvb2tlZF91dGxiOy8qIHB0ciB0byBwZGEgbG9jIGZvciB1dGxiIGhuZGxyICovCisJdm9pZAkqKmdfaG9va2VkX3h0bGI7LyogcHRyIHRvIHBkYSBsb2MgZm9yIHh0bGIgaG5kbHIgKi8KKwlpbnQJZ19wYXJ0aWQ7CS8qIHBhcnRpdGlvbiBpZCAqLworCWludAlnX3N5bW1heDsJLyogTWF4IHN5bWJvbHMgaW4gbmFtZSB0YWJsZS4gKi8KKwl2b2lkCSpnX2Ric3RhYjsJLyogQWRkcmVzcyBvZiBpZGJnIHN5bWJvbCB0YWJsZSAqLworCWNoYXIJKmdfbmFtZXRhYjsJLyogQWRkcmVzcyBvZiBpZGJnIG5hbWUgdGFibGUgKi8KKwl2b2lkCSpnX2t0ZXh0X3JlcG1hc2s7CisJCQkJLyogUG9pbnRlciB0byBhIG1hc2sgb2Ygbm9kZXMgd2l0aCBjb3BpZXMKKwkJCQkgKiBvZiB0aGUga2VybmVsLiAqLworCWNoYXIJZ19wYWRkaW5nWzU2XTsJLyogcGFkIG91dCB0byAxMjggYnl0ZXMgKi8KKwluYXNpZF90CWdfbmFzaWR0YWJsZVtNQVhfQ09NUEFDVF9OT0RFU107IC8qIE5BU0lEIG9mIGVhY2ggbm9kZSwKKwkJCQkJCSAgKiBpbmRleGVkIGJ5IGNub2RlaWQuCisJCQkJCQkgICovCit9IGdkYV90OworCisjZGVmaW5lIEdEQSAoKGdkYV90KikgR0RBX0FERFIoZ2V0X25hc2lkKCkpKQorCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworLyoKKyAqIERlZmluZToJUEFSVF9HREFfVkVSU0lPTgorICogUHVycG9zZToJRGVmaW5lIHRoZSBtaW5pbXVtIHZlcnNpb24gb2YgdGhlIEdEQSByZXF1aXJlZCwgbG93ZXIKKyAqCQlyZXZpc2lvbnMgYXNzdW1lIEdEQSBpcyBOT1Qgc2V0IHVwLCBhbmQgcmVhZCBwYXJ0aXRpb24KKyAqCQlpbmZvcm1hdGlvbiBmcm9tIHRoZSBib2FyZCBpbmZvLgorICovCisjZGVmaW5lCVBBUlRfR0RBX1ZFUlNJT04JMgorCisvKgorICogVGhlIGZvbGxvd2luZyByZXF1ZXN0cyBjYW4gYmUgc2VudCB0byB0aGUgUFJPTSBkdXJpbmcgc3RhcnR1cC4KKyAqLworCisjZGVmaW5lIFBST01PUF9NQUdJQwkJMHgwZWFkMDAwMAorI2RlZmluZSBQUk9NT1BfTUFHSUNfTUFTSwkweDBmZmYwMDAwCisKKyNkZWZpbmUgUFJPTU9QX0JJU1RfU0hJRlQgICAgICAgMTEKKyNkZWZpbmUgUFJPTU9QX0JJU1RfTUFTSyAgICAgICAgKDB4MyA8PCAxMSkKKworI2RlZmluZSBQUk9NT1BfUkVHCQlQSV9FUlJfU1RBQ0tfQUREUl9BCisKKyNkZWZpbmUgUFJPTU9QX0lOVkFMSUQJCShQUk9NT1BfTUFHSUMgfCAweDAwKQorI2RlZmluZSBQUk9NT1BfSEFMVCAgICAgICAgICAgICAoUFJPTU9QX01BR0lDIHwgMHgxMCkKKyNkZWZpbmUgUFJPTU9QX1BPV0VSRE9XTiAgICAgICAgKFBST01PUF9NQUdJQyB8IDB4MjApCisjZGVmaW5lIFBST01PUF9SRVNUQVJUICAgICAgICAgIChQUk9NT1BfTUFHSUMgfCAweDMwKQorI2RlZmluZSBQUk9NT1BfUkVCT09UICAgICAgICAgICAoUFJPTU9QX01BR0lDIHwgMHg0MCkKKyNkZWZpbmUgUFJPTU9QX0lNT0RFICAgICAgICAgICAgKFBST01PUF9NQUdJQyB8IDB4NTApCisKKyNkZWZpbmUgUFJPTU9QX0NNRF9NQVNLCQkweDAwZjAKKyNkZWZpbmUgUFJPTU9QX09QVElPTlNfTUFTSwkweGZmZjAKKworI2RlZmluZSBQUk9NT1BfU0tJUF9ESUFHUwkweDAxMDAJCS8qIGRvbid0IGJvdGhlciBydW5uaW5nIGRpYWdzICovCisjZGVmaW5lIFBST01PUF9TS0lQX01FTUlOSVQJMHgwMjAwCQkvKiBkb24ndCBib3RoZXIgaW5pdGluZyBtZW1vcnkgKi8KKyNkZWZpbmUgUFJPTU9QX1NLSVBfREVWSU5JVAkweDA0MDAJCS8qIGRvbid0IGJvdGhlciBpbml0aW5nIGRldmljZXMgKi8KKyNkZWZpbmUgUFJPTU9QX0JJU1QxCQkweDA4MDAJCS8qIGtlZXAgdHJhY2sgb2Ygd2hpY2ggQklTVCByYW4gKi8KKyNkZWZpbmUgUFJPTU9QX0JJU1QyCQkweDEwMDAJCS8qIGtlZXAgdHJhY2sgb2Ygd2hpY2ggQklTVCByYW4gKi8KKworI2VuZGlmIC8qIF9BU01fU05fR0RBX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc24vaHViLmggYi9pbmNsdWRlL2FzbS1taXBzL3NuL2h1Yi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5OTJkOTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NuL2h1Yi5oCkBAIC0wLDAgKzEsMTYgQEAKKyNpZm5kZWYgX19BU01fU05fSFVCX0gKKyNkZWZpbmUgX19BU01fU05fSFVCX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgorI2luY2x1ZGUgPGFzbS9zbi90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9zbi9pby5oPgorI2luY2x1ZGUgPGFzbS9zbi9rbGtlcm52YXJzLmg+CisjaW5jbHVkZSA8YXNtL3h0YWxrL3h0YWxrLmg+CisKKy8qIGlwMjctaHViaW8uYyAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaHViX3Bpb19tYXAoY25vZGVpZF90IGNub2RlLCB4d2lkZ2V0bnVtX3Qgd2lkZ2V0LAorCQkJICB1bnNpZ25lZCBsb25nIHh0YWxrX2FkZHIsIHNpemVfdCBzaXplKTsKK2V4dGVybiB2b2lkIGh1Yl9waW9faW5pdChjbm9kZWlkX3QgY25vZGUpOworCisjZW5kaWYgLyogX19BU01fU05fSFVCX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc24vaW50ci5oIGIvaW5jbHVkZS9hc20tbWlwcy9zbi9pbnRyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjcxOGI2NAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc24vaW50ci5oCkBAIC0wLDAgKzEsMTI5IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkyIC0gMTk5NyBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCisgKi8KKyNpZm5kZWYgX19BU01fU05fSU5UUl9ICisjZGVmaW5lIF9fQVNNX1NOX0lOVFJfSAorCisvKiBOdW1iZXIgb2YgaW50ZXJydXB0IGxldmVscyBhc3NvY2lhdGVkIHdpdGggZWFjaCBpbnRlcnJ1cHQgcmVnaXN0ZXIuICovCisjZGVmaW5lIE5fSU5UUEVORF9CSVRTCQk2NAorCisjZGVmaW5lIElOVF9QRU5EMF9CQVNFTFZMCTAKKyNkZWZpbmUgSU5UX1BFTkQxX0JBU0VMVkwJNjQKKworI2RlZmluZQlOX0lOVFBFTkRKVU5LX0JJVFMJOAorI2RlZmluZQlJTlRQRU5ESlVOS19DTFJCSVQJMHg4MAorCisvKgorICogTWFjcm9zIHRvIG1hbmlwdWxhdGUgdGhlIGludGVycnVwdCByZWdpc3RlciBvbiB0aGUgY2FsbGluZyBodWIgY2hpcC4KKyAqLworCisjZGVmaW5lIExPQ0FMX0hVQl9TRU5EX0lOVFIobGV2ZWwpCQkJCVwKKwlMT0NBTF9IVUJfUyhQSV9JTlRfUEVORF9NT0QsICgweDEwMCB8IChsZXZlbCkpKQorI2RlZmluZSBSRU1PVEVfSFVCX1NFTkRfSU5UUihodWIsIGxldmVsKQkJCVwKKwlSRU1PVEVfSFVCX1MoKGh1YiksIFBJX0lOVF9QRU5EX01PRCwgKDB4MTAwIHwgKGxldmVsKSkpCisKKy8qCisgKiBXaGVuIGNsZWFyaW5nIHRoZSBpbnRlcnJ1cHQsIG1ha2Ugc3VyZSB0aGlzIGNsZWFyIGRvZXMgbWFrZSBpdAorICogdG8gdGhlIGh1Yi4gT3RoZXJ3aXNlIHdlIGNvdWxkIGVuZCB1cCBsb3NpbmcgaW50ZXJydXB0cy4KKyAqIFdlIGRvIGFuIHVuY2FjaGVkIGxvYWQgb2YgdGhlIGludF9wZW5kMCByZWdpc3RlciB0byBlbnN1cmUgdGhpcy4KKyAqLworCisjZGVmaW5lIExPQ0FMX0hVQl9DTFJfSU5UUihsZXZlbCkJICAJCQlcCitkbyB7CQkJCQkJCQlcCisJTE9DQUxfSFVCX1MoUElfSU5UX1BFTkRfTU9ELCAobGV2ZWwpKTsJCQlcCisJTE9DQUxfSFVCX0woUElfSU5UX1BFTkQwKTsJCQkJXAorfSB3aGlsZSAoMCk7CisKKyNkZWZpbmUgUkVNT1RFX0hVQl9DTFJfSU5UUihodWIsIGxldmVsKQkJCQlcCitkbyB7CQkJCQkJCQlcCisJbmFzaWRfdCAgX19odWIgPSAoaHViKTsJCQkJCVwKKwkJCQkJCQkJXAorCVJFTU9URV9IVUJfUyhfX2h1YiwgUElfSU5UX1BFTkRfTU9ELCAobGV2ZWwpKTsJCVwKKwlSRU1PVEVfSFVCX0woX19odWIsIFBJX0lOVF9QRU5EMCk7CQkJXAorfSB3aGlsZSAoMCk7CisKKy8qCisgKiBIYXJkLWNvZGVkIGludGVycnVwdCBsZXZlbHM6CisgKi8KKworLyoKKyAqCUwwID0gU1cxCisgKglMMSA9IFNXMgorICoJTDIgPSBJTlRfUEVORDAKKyAqCUwzID0gSU5UX1BFTkQxCisgKglMNCA9IFJUQworICoJTDUgPSBQcm9maWxpbmcgVGltZXIKKyAqCUw2ID0gSHViIEVycm9ycworICoJTDcgPSBDb3VudC9Db21wYXJlIChUNSBjb3VudGVycykKKyAqLworCisKKy8qCisgKiBJTlRfUEVORDAgaGFyZC1jb2RlZCBiaXRzLgorICovCisKKy8qCisgKiBJTlRfUEVORDAgYml0cyBkZXRlcm1pbmVkIGJ5IGhhcmR3YXJlOgorICovCisjZGVmaW5lIFJFU0VSVkVEX0lOVFIJCSAwCS8qIFdoYXQgaXMgdGhpcyBiaXQ/ICovCisjZGVmaW5lIEdGWF9JTlRSX0EJCSAxCisjZGVmaW5lIEdGWF9JTlRSX0IJCSAyCisjZGVmaW5lIFBHX01JR19JTlRSCQkgMworI2RlZmluZSBVQVJUX0lOVFIJCSA0CisjZGVmaW5lIENDX1BFTkRfQQkJIDUKKyNkZWZpbmUgQ0NfUEVORF9CCQkgNgorCisvKgorICogSU5UX1BFTkQwIHVzZWQgYnkgdGhlIGtlcm5lbCBmb3IgaXRzZWxmIC4uLgorICovCisjZGVmaW5lIENQVV9SRVNDSEVEX0FfSVJRCSA3CisjZGVmaW5lIENQVV9SRVNDSEVEX0JfSVJRCSA4CisjZGVmaW5lIENQVV9DQUxMX0FfSVJRCQkgOQorI2RlZmluZSBDUFVfQ0FMTF9CX0lSUQkJMTAKKyNkZWZpbmUgTVNDX01FU0dfSU5UUgkJMTEKKyNkZWZpbmUgQkFTRV9QQ0lfSVJRCQkxMgorCisvKgorICogSU5UX1BFTkQwIGFnYWluLCBiaXRzIGRldGVybWluZWQgYnkgaGFyZHdhcmUgLyBoYXJkY29kZWQ6CisgKi8KKyNkZWZpbmUgU0RJU0tfSU5UUgkJNjMJLyogU0FCTEUgbmFtZSAqLworI2RlZmluZSBJUF9QRU5EMF82XzYzCQk2MwkvKiBXaGF0IGlzIHRoaXMgYml0PyAqLworCisvKgorICogSU5UX1BFTkQxIGhhcmQtY29kZWQgYml0czoKKyAqLworI2RlZmluZSBOSV9CUkRDQVNUX0VSUl9BCTM5CisjZGVmaW5lIE5JX0JSRENBU1RfRVJSX0IJNDAKKworI2RlZmluZSBMTFBfUEZBSUxfSU5UUl9BCTQxCS8qIHNlZSBtbC9TTi9TTjAvc3lzY3Rsci5jICovCisjZGVmaW5lIExMUF9QRkFJTF9JTlRSX0IJNDIKKworI2RlZmluZQlUTEJfSU5UUl9BCQk0MwkvKiB1c2VkIGZvciB0bGIgZmx1c2ggcmFuZG9tICovCisjZGVmaW5lCVRMQl9JTlRSX0IJCTQ0CisKKyNkZWZpbmUgSVAyN19JTlRSXzAJCTQ1CS8qIFJlc2VydmVkIGZvciBQUk9NIHVzZSAqLworI2RlZmluZSBJUDI3X0lOVFJfMQkJNDYJLyogZG8gbm90IHVzZSBpbiBLZXJuZWwgKi8KKyNkZWZpbmUgSVAyN19JTlRSXzIJCTQ3CisjZGVmaW5lIElQMjdfSU5UUl8zCQk0OAorI2RlZmluZSBJUDI3X0lOVFJfNAkJNDkKKyNkZWZpbmUgSVAyN19JTlRSXzUJCTUwCisjZGVmaW5lIElQMjdfSU5UUl82CQk1MQorI2RlZmluZSBJUDI3X0lOVFJfNwkJNTIKKworI2RlZmluZSBCUklER0VfRVJST1JfSU5UUgk1MwkvKiBTZXR1cCBieSBQUk9NIHRvIGNhdGNoCSovCisJCQkJCS8qIEJyaWRnZSBFcnJvcnMgKi8KKyNkZWZpbmUJREVCVUdfSU5UUl9BCQk1NAorI2RlZmluZQlERUJVR19JTlRSX0IJCTU1CS8qIFVzZWQgYnkgc3ltbW9uIHRvIHN0b3AgYWxsIGNwdXMgKi8KKyNkZWZpbmUgSU9fRVJST1JfSU5UUgkJNTcJLyogU2V0dXAgYnkgUFJPTSAqLworI2RlZmluZSBDTEtfRVJSX0lOVFIJCTU4CisjZGVmaW5lIENPUl9FUlJfSU5UUl9BCQk1OQorI2RlZmluZSBDT1JfRVJSX0lOVFJfQgkJNjAKKyNkZWZpbmUgTURfQ09SX0VSUl9JTlRSCQk2MQorI2RlZmluZSBOSV9FUlJPUl9JTlRSCQk2MgorI2RlZmluZSBNU0NfUEFOSUNfSU5UUgkJNjMKKworI2VuZGlmIC8qIF9fQVNNX1NOX0lOVFJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zbi9pby5oIGIvaW5jbHVkZS9hc20tbWlwcy9zbi9pby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMzI2NDUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NuL2lvLmgKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMyBSYWxmIEJhZWNobGUKKyAqIENvcHlyaWdodCAoQykgMjAwMCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCisgKi8KKyNpZm5kZWYgX0FTTV9TTl9JT19ICisjZGVmaW5lIF9BU01fU05fSU9fSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaWYgZGVmaW5lZCAoQ09ORklHX1NHSV9JUDI3KQorI2luY2x1ZGUgPGFzbS9zbi9zbjAvaHViaW8uaD4KKyNlbmRpZgorCisKKyNkZWZpbmUgSUlPX0lUVEVfQkFTRQkJMHg0MDAxNjAgLyogYmFzZSBvZiB0cmFuc2xhdGlvbiB0YWJsZSBlbnRyaWVzICovCisjZGVmaW5lIElJT19JVFRFKGJpZ3dpbikJKElJT19JVFRFX0JBU0UgKyA4KihiaWd3aW4pKQorCisjZGVmaW5lIElJT19JVFRFX09GRlNFVF9CSVRTCTUJLyogc2l6ZSBvZiBvZmZzZXQgZmllbGQgKi8KKyNkZWZpbmUgSUlPX0lUVEVfT0ZGU0VUX01BU0sJKCgxPDxJSU9fSVRURV9PRkZTRVRfQklUUyktMSkKKyNkZWZpbmUgSUlPX0lUVEVfT0ZGU0VUX1NISUZUCTAKKworI2RlZmluZSBJSU9fSVRURV9XSURHRVRfQklUUwk0CS8qIHNpemUgb2Ygd2lkZ2V0IGZpZWxkICovCisjZGVmaW5lIElJT19JVFRFX1dJREdFVF9NQVNLCSgoMTw8SUlPX0lUVEVfV0lER0VUX0JJVFMpLTEpCisjZGVmaW5lIElJT19JVFRFX1dJREdFVF9TSElGVAk4CisKKyNkZWZpbmUgSUlPX0lUVEVfSU9TUAkJMQkvKiBJL08gU3BhY2UgYml0ICovCisjZGVmaW5lIElJT19JVFRFX0lPU1BfTUFTSwkxCisjZGVmaW5lIElJT19JVFRFX0lPU1BfU0hJRlQJMTIKKyNkZWZpbmUgSFVCX1BJT19NQVBfVE9fTUVNCTAKKyNkZWZpbmUgSFVCX1BJT19NQVBfVE9fSU8JMQorCisjZGVmaW5lIElJT19JVFRFX0lOVkFMSURfV0lER0VUCTMJLyogYW4gaW52YWxpZCB3aWRnZXQgICovCisKKyNkZWZpbmUgSUlPX0lUVEVfUFVUKG5hc2lkLCBiaWd3aW4sIGlvX29yX21lbSwgd2lkZ2V0LCBhZGRyKSBcCisJUkVNT1RFX0hVQl9TKChuYXNpZCksIElJT19JVFRFKGJpZ3dpbiksIFwKKwkJKCgoKChhZGRyKSA+PiBCV0lOX1NJWkVfQklUUykgJiBcCisJCSAgIElJT19JVFRFX09GRlNFVF9NQVNLKSA8PCBJSU9fSVRURV9PRkZTRVRfU0hJRlQpIHwgXAorCQkoaW9fb3JfbWVtIDw8IElJT19JVFRFX0lPU1BfU0hJRlQpIHwgXAorCQkoKCh3aWRnZXQpICYgSUlPX0lUVEVfV0lER0VUX01BU0spIDw8IElJT19JVFRFX1dJREdFVF9TSElGVCkpKQorCisjZGVmaW5lIElJT19JVFRFX0RJU0FCTEUobmFzaWQsIGJpZ3dpbikgXAorCUlJT19JVFRFX1BVVCgobmFzaWQpLCBIVUJfUElPX01BUF9UT19NRU0sIFwKKwkJICAgICAoYmlnd2luKSwgSUlPX0lUVEVfSU5WQUxJRF9XSURHRVQsIDApCisKKyNkZWZpbmUgSUlPX0lUVEVfR0VUKG5hc2lkLCBiaWd3aW4pIFJFTU9URV9IVUJfQUREUigobmFzaWQpLCBJSU9fSVRURShiaWd3aW4pKQorCisvKgorICogTWFjcm8gd2hpY2ggdGFrZXMgdGhlIHdpZGdldCBudW1iZXIsIGFuZCByZXR1cm5zIHRoZQorICogSU8gUFJCIGFkZHJlc3Mgb2YgdGhhdCB3aWRnZXQuCisgKiB2YWx1ZSBfeCBpcyBleHBlY3RlZCB0byBiZSBhIHdpZGdldCBudW1iZXIgaW4gdGhlIHJhbmdlCisgKiAwLCA4IC0gMHhGCisgKi8KKyNkZWZpbmUJSUlPX0lPUFJCKF94KQkoSUlPX0lPUFJCXzAgKyAoICggKF94KSA8IEhVQl9XSURHRVRfSURfTUlOID8gXAorCQkJKF94KSA6IFwKKwkJCShfeCkgLSAoSFVCX1dJREdFVF9JRF9NSU4tMSkpIDw8IDMpICkKKworI2VuZGlmIC8qIF9BU01fU05fSU9fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zbi9pb2MzLmggYi9pbmNsdWRlL2FzbS1taXBzL3NuL2lvYzMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2Q1MzBmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zbi9pb2MzLmgKQEAgLTAsMCArMSw2NjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAgUmFsZiBCYWVjaGxlCisgKiBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAgU2lsaWNvbiBHcmFwaGljcywgSW5jLgorICovCisjaWZuZGVmIF9JT0MzX0gKKyNkZWZpbmUgX0lPQzNfSAorCisvKiBTVVBFUklPIHVhcnQgcmVnaXN0ZXIgbWFwICovCit0eXBlZGVmIHZvbGF0aWxlIHN0cnVjdCBpb2MzX3VhcnRyZWdzIHsKKwl1bmlvbiB7CisJCXZvbGF0aWxlIHU4CXJicjsJLyogcmVhZCBvbmx5LCBETEFCID09IDAgKi8KKwkJdm9sYXRpbGUgdTgJdGhyOwkvKiB3cml0ZSBvbmx5LCBETEFCID09IDAgKi8KKwkJdm9sYXRpbGUgdTgJZGxsOwkvKiBETEFCID09IDEgKi8KKwl9IHUxOworCXVuaW9uIHsKKwkJdm9sYXRpbGUgdTgJaWVyOwkvKiBETEFCID09IDAgKi8KKwkJdm9sYXRpbGUgdTgJZGxtOwkvKiBETEFCID09IDEgKi8KKwl9IHUyOworCXVuaW9uIHsKKwkJdm9sYXRpbGUgdTgJaWlyOwkvKiByZWFkIG9ubHkgKi8KKwkJdm9sYXRpbGUgdTgJZmNyOwkvKiB3cml0ZSBvbmx5ICovCisJfSB1MzsKKwl2b2xhdGlsZSB1OAkgICAgaXVfbGNyOworCXZvbGF0aWxlIHU4CSAgICBpdV9tY3I7CisJdm9sYXRpbGUgdTgJICAgIGl1X2xzcjsKKwl2b2xhdGlsZSB1OAkgICAgaXVfbXNyOworCXZvbGF0aWxlIHU4CSAgICBpdV9zY3I7Cit9IGlvYzNfdXJlZ3NfdDsKKworI2RlZmluZSBpdV9yYnIgdTEucmJyCisjZGVmaW5lIGl1X3RociB1MS50aHIKKyNkZWZpbmUgaXVfZGxsIHUxLmRsbAorI2RlZmluZSBpdV9pZXIgdTIuaWVyCisjZGVmaW5lIGl1X2RsbSB1Mi5kbG0KKyNkZWZpbmUgaXVfaWlyIHUzLmlpcgorI2RlZmluZSBpdV9mY3IgdTMuZmNyCisKK3N0cnVjdCBpb2MzX3Npb3JlZ3MgeworCXZvbGF0aWxlIHU4CQlmaWxsWzB4MTQxXTsJLyogc3RhcnRzIGF0IDB4MTQxICovCisKKwl2b2xhdGlsZSB1OAkJdWFydGM7CisJdm9sYXRpbGUgdTgJCWtiZGNnOworCisJdm9sYXRpbGUgdTgJCWZpbGwwWzB4MTUwIC0gMHgxNDIgLSAxXTsKKworCXZvbGF0aWxlIHU4CQlwcF9kYXRhOworCXZvbGF0aWxlIHU4CQlwcF9kc3I7CisJdm9sYXRpbGUgdTgJCXBwX2RjcjsKKworCXZvbGF0aWxlIHU4CQlmaWxsMVsweDE1OCAtIDB4MTUyIC0gMV07CisKKwl2b2xhdGlsZSB1OAkJcHBfZmlmYTsKKwl2b2xhdGlsZSB1OAkJcHBfY2ZnYjsKKwl2b2xhdGlsZSB1OAkJcHBfZWNyOworCisJdm9sYXRpbGUgdTgJCWZpbGwyWzB4MTY4IC0gMHgxNWEgLSAxXTsKKworCXZvbGF0aWxlIHU4CQlydGNhZDsKKwl2b2xhdGlsZSB1OAkJcnRjZGF0OworCisJdm9sYXRpbGUgdTgJCWZpbGwzWzB4MTcwIC0gMHgxNjkgLSAxXTsKKworCXN0cnVjdCBpb2MzX3VhcnRyZWdzICAgIHVhcnRiOwkvKiAweDIwMTcwICAqLworCXN0cnVjdCBpb2MzX3VhcnRyZWdzICAgIHVhcnRhOwkvKiAweDIwMTc4ICAqLworfTsKKworLyogUmVnaXN0ZXIgbGF5b3V0IG9mIElPQzMgaW4gY29uZmlndXJhdGlvbiBzcGFjZS4gICovCitzdHJ1Y3QgaW9jMyB7CisJdm9sYXRpbGUgdTMyCXBhZDBbN107CS8qIDB4MDAwMDAgICovCisJdm9sYXRpbGUgdTMyCXNpb19pcjsJCS8qIDB4MDAwMWMgICovCisJdm9sYXRpbGUgdTMyCXNpb19pZXM7CS8qIDB4MDAwMjAgICovCisJdm9sYXRpbGUgdTMyCXNpb19pZWM7CS8qIDB4MDAwMjQgICovCisJdm9sYXRpbGUgdTMyCXNpb19jcjsJCS8qIDB4MDAwMjggICovCisJdm9sYXRpbGUgdTMyCWludF9vdXQ7CS8qIDB4MDAwMmMgICovCisJdm9sYXRpbGUgdTMyCW1jcjsJCS8qIDB4MDAwMzAgICovCisKKwkvKiBHZW5lcmFsIFB1cnBvc2UgSS9PIHJlZ2lzdGVycyAgKi8KKwl2b2xhdGlsZSB1MzIJZ3Bjcl9zOwkJLyogMHgwMDAzNCAgKi8KKwl2b2xhdGlsZSB1MzIJZ3Bjcl9jOwkJLyogMHgwMDAzOCAgKi8KKwl2b2xhdGlsZSB1MzIJZ3BkcjsJCS8qIDB4MDAwM2MgICovCisJdm9sYXRpbGUgdTMyCWdwcHJfMDsJCS8qIDB4MDAwNDAgICovCisJdm9sYXRpbGUgdTMyCWdwcHJfMTsJCS8qIDB4MDAwNDQgICovCisJdm9sYXRpbGUgdTMyCWdwcHJfMjsJCS8qIDB4MDAwNDggICovCisJdm9sYXRpbGUgdTMyCWdwcHJfMzsJCS8qIDB4MDAwNGMgICovCisJdm9sYXRpbGUgdTMyCWdwcHJfNDsJCS8qIDB4MDAwNTAgICovCisJdm9sYXRpbGUgdTMyCWdwcHJfNTsJCS8qIDB4MDAwNTQgICovCisJdm9sYXRpbGUgdTMyCWdwcHJfNjsJCS8qIDB4MDAwNTggICovCisJdm9sYXRpbGUgdTMyCWdwcHJfNzsJCS8qIDB4MDAwNWMgICovCisJdm9sYXRpbGUgdTMyCWdwcHJfODsJCS8qIDB4MDAwNjAgICovCisJdm9sYXRpbGUgdTMyCWdwcHJfOTsJCS8qIDB4MDAwNjQgICovCisJdm9sYXRpbGUgdTMyCWdwcHJfMTA7CS8qIDB4MDAwNjggICovCisJdm9sYXRpbGUgdTMyCWdwcHJfMTE7CS8qIDB4MDAwNmMgICovCisJdm9sYXRpbGUgdTMyCWdwcHJfMTI7CS8qIDB4MDAwNzAgICovCisJdm9sYXRpbGUgdTMyCWdwcHJfMTM7CS8qIDB4MDAwNzQgICovCisJdm9sYXRpbGUgdTMyCWdwcHJfMTQ7CS8qIDB4MDAwNzggICovCisJdm9sYXRpbGUgdTMyCWdwcHJfMTU7CS8qIDB4MDAwN2MgICovCisKKwkvKiBQYXJhbGxlbCBQb3J0IFJlZ2lzdGVycyAgKi8KKwl2b2xhdGlsZSB1MzIJcHBicl9oX2E7CS8qIDB4MDAwODAgICovCisJdm9sYXRpbGUgdTMyCXBwYnJfbF9hOwkvKiAweDAwMDg0ICAqLworCXZvbGF0aWxlIHUzMglwcGNyX2E7CQkvKiAweDAwMDg4ICAqLworCXZvbGF0aWxlIHUzMglwcGNyOwkJLyogMHgwMDA4YyAgKi8KKwl2b2xhdGlsZSB1MzIJcHBicl9oX2I7CS8qIDB4MDAwOTAgICovCisJdm9sYXRpbGUgdTMyCXBwYnJfbF9iOwkvKiAweDAwMDk0ICAqLworCXZvbGF0aWxlIHUzMglwcGNyX2I7CQkvKiAweDAwMDk4ICAqLworCisJLyogS2V5Ym9hcmQgYW5kIE1vdXNlIFJlZ2lzdGVycyAgKi8KKwl2b2xhdGlsZSB1MzIJa21fY3NyOwkJLyogMHgwMDA5YyAgKi8KKwl2b2xhdGlsZSB1MzIJa19yZDsJCS8qIDB4MDAwYTAgICovCisJdm9sYXRpbGUgdTMyCW1fcmQ7CQkvKiAweDAwMGE0ICAqLworCXZvbGF0aWxlIHUzMglrX3dkOwkJLyogMHgwMDBhOCAgKi8KKwl2b2xhdGlsZSB1MzIJbV93ZDsJCS8qIDB4MDAwYWMgICovCisKKwkvKiBTZXJpYWwgUG9ydCBSZWdpc3RlcnMgICovCisJdm9sYXRpbGUgdTMyCXNiYnJfaDsJCS8qIDB4MDAwYjAgICovCisJdm9sYXRpbGUgdTMyCXNiYnJfbDsJCS8qIDB4MDAwYjQgICovCisJdm9sYXRpbGUgdTMyCXNzY3JfYTsJCS8qIDB4MDAwYjggICovCisJdm9sYXRpbGUgdTMyCXN0cGlyX2E7CS8qIDB4MDAwYmMgICovCisJdm9sYXRpbGUgdTMyCXN0Y2lyX2E7CS8qIDB4MDAwYzAgICovCisJdm9sYXRpbGUgdTMyCXNycGlyX2E7CS8qIDB4MDAwYzQgICovCisJdm9sYXRpbGUgdTMyCXNyY2lyX2E7CS8qIDB4MDAwYzggICovCisJdm9sYXRpbGUgdTMyCXNydHJfYTsJCS8qIDB4MDAwY2MgICovCisJdm9sYXRpbGUgdTMyCXNoYWRvd19hOwkvKiAweDAwMGQwICAqLworCXZvbGF0aWxlIHUzMglzc2NyX2I7CQkvKiAweDAwMGQ0ICAqLworCXZvbGF0aWxlIHUzMglzdHBpcl9iOwkvKiAweDAwMGQ4ICAqLworCXZvbGF0aWxlIHUzMglzdGNpcl9iOwkvKiAweDAwMGRjICAqLworCXZvbGF0aWxlIHUzMglzcnBpcl9iOwkvKiAweDAwMGUwICAqLworCXZvbGF0aWxlIHUzMglzcmNpcl9iOwkvKiAweDAwMGU0ICAqLworCXZvbGF0aWxlIHUzMglzcnRyX2I7CQkvKiAweDAwMGU4ICAqLworCXZvbGF0aWxlIHUzMglzaGFkb3dfYjsJLyogMHgwMDBlYyAgKi8KKworCS8qIEV0aGVybmV0IFJlZ2lzdGVycyAgKi8KKwl2b2xhdGlsZSB1MzIJZW1jcjsJCS8qIDB4MDAwZjAgICovCisJdm9sYXRpbGUgdTMyCWVpc3I7CQkvKiAweDAwMGY0ICAqLworCXZvbGF0aWxlIHUzMgllaWVyOwkJLyogMHgwMDBmOCAgKi8KKwl2b2xhdGlsZSB1MzIJZXJjc3I7CQkvKiAweDAwMGZjICAqLworCXZvbGF0aWxlIHUzMgllcmJyX2g7CQkvKiAweDAwMTAwICAqLworCXZvbGF0aWxlIHUzMgllcmJyX2w7CQkvKiAweDAwMTA0ICAqLworCXZvbGF0aWxlIHUzMgllcmJhcjsJCS8qIDB4MDAxMDggICovCisJdm9sYXRpbGUgdTMyCWVyY2lyOwkJLyogMHgwMDEwYyAgKi8KKwl2b2xhdGlsZSB1MzIJZXJwaXI7CQkvKiAweDAwMTEwICAqLworCXZvbGF0aWxlIHUzMgllcnRyOwkJLyogMHgwMDExNCAgKi8KKwl2b2xhdGlsZSB1MzIJZXRjc3I7CQkvKiAweDAwMTE4ICAqLworCXZvbGF0aWxlIHUzMgllcnNyOwkJLyogMHgwMDExYyAgKi8KKwl2b2xhdGlsZSB1MzIJZXRjZGM7CQkvKiAweDAwMTIwICAqLworCXZvbGF0aWxlIHUzMgllYmlyOwkJLyogMHgwMDEyNCAgKi8KKwl2b2xhdGlsZSB1MzIJZXRicl9oOwkJLyogMHgwMDEyOCAgKi8KKwl2b2xhdGlsZSB1MzIJZXRicl9sOwkJLyogMHgwMDEyYyAgKi8KKwl2b2xhdGlsZSB1MzIJZXRjaXI7CQkvKiAweDAwMTMwICAqLworCXZvbGF0aWxlIHUzMglldHBpcjsJCS8qIDB4MDAxMzQgICovCisJdm9sYXRpbGUgdTMyCWVtYXJfaDsJCS8qIDB4MDAxMzggICovCisJdm9sYXRpbGUgdTMyCWVtYXJfbDsJCS8qIDB4MDAxM2MgICovCisJdm9sYXRpbGUgdTMyCWVoYXJfaDsJCS8qIDB4MDAxNDAgICovCisJdm9sYXRpbGUgdTMyCWVoYXJfbDsJCS8qIDB4MDAxNDQgICovCisJdm9sYXRpbGUgdTMyCW1pY3I7CQkvKiAweDAwMTQ4ICAqLworCXZvbGF0aWxlIHUzMgltaWRyX3I7CQkvKiAweDAwMTRjICAqLworCXZvbGF0aWxlIHUzMgltaWRyX3c7CQkvKiAweDAwMTUwICAqLworCXZvbGF0aWxlIHUzMglwYWQxWygweDIwMDAwIC0gMHgwMDE1NCkgLyA0XTsKKworCS8qIFN1cGVySU8gUmVnaXN0ZXJzICBYWFggKi8KKwlzdHJ1Y3QgaW9jM19zaW9yZWdzCXNyZWdzOwkvKiAweDIwMDAwICovCisJdm9sYXRpbGUgdTMyCXBhZDJbKDB4NDAwMDAgLSAweDIwMTgwKSAvIDRdOworCisJLyogU1NSQU0gRGlhZ25vc3RpYyBBY2Nlc3MgKi8KKwl2b2xhdGlsZSB1MzIJc3NyYW1bKDB4ODAwMDAgLSAweDQwMDAwKSAvIDRdOworCisJLyogQnl0ZWJ1cyBkZXZpY2Ugb2Zmc2V0cworCSAgIDB4ODAwMDAgLSAgIEFjY2VzcyB0byB0aGUgZ2VuZXJpYyBkZXZpY2VzIHNlbGVjdGVkIHdpdGggICBERVYwCisJICAgMHg5RkZGRiAgICAgYnl0ZWJ1cyBERVZfU0VMXzAKKwkgICAweEEwMDAwIC0gICBBY2Nlc3MgdG8gdGhlIGdlbmVyaWMgZGV2aWNlcyBzZWxlY3RlZCB3aXRoICAgREVWMQorCSAgIDB4QkZGRkYgICAgIGJ5dGVidXMgREVWX1NFTF8xCisJICAgMHhDMDAwMCAtICAgQWNjZXNzIHRvIHRoZSBnZW5lcmljIGRldmljZXMgc2VsZWN0ZWQgd2l0aCAgIERFVjIKKwkgICAweERGRkZGICAgICBieXRlYnVzIERFVl9TRUxfMgorCSAgIDB4RTAwMDAgLSAgIEFjY2VzcyB0byB0aGUgZ2VuZXJpYyBkZXZpY2VzIHNlbGVjdGVkIHdpdGggICBERVYzCisJICAgMHhGRkZGRiAgICAgYnl0ZWJ1cyBERVZfU0VMXzMgICovCit9OworCisvKgorICogRXRoZXJuZXQgUlggQnVmZmVyCisgKi8KK3N0cnVjdCBpb2MzX2VyeGJ1ZiB7CisJdTMyCXcwOwkJCS8qIGZpcnN0IHdvcmQgKHZhbGlkLGJjbnQsY2tzdW0pICovCisJdTMyCWVycjsJCQkvKiBzZWNvbmQgd29yZCB2YXJpb3VzIGVycm9ycyAqLworCS8qIG5leHQgY29tZXMgbiBieXRlcyBvZiBwYWRkaW5nICovCisJLyogdGhlbiB0aGUgcmVjZWl2ZWQgZXRoZXJuZXQgZnJhbWUgaXRzZWxmICovCit9OworCisjZGVmaW5lIEVSWEJVRl9JUENLU1VNX01BU0sJMHgwMDAwZmZmZgorI2RlZmluZSBFUlhCVUZfQllURUNOVF9NQVNLCTB4MDdmZjAwMDAKKyNkZWZpbmUgRVJYQlVGX0JZVEVDTlRfU0hJRlQJMTYKKyNkZWZpbmUgRVJYQlVGX1YJCTB4ODAwMDAwMDAKKworI2RlZmluZSBFUlhCVUZfQ1JDRVJSCQkweDAwMDAwMDAxCS8qIGFrYSBSU1YxNSAqLworI2RlZmluZSBFUlhCVUZfRlJBTUVSUgkJMHgwMDAwMDAwMgkvKiBha2EgUlNWMTQgKi8KKyNkZWZpbmUgRVJYQlVGX0NPREVSUgkJMHgwMDAwMDAwNAkvKiBha2EgUlNWMTMgKi8KKyNkZWZpbmUgRVJYQlVGX0lOVlBSRUFNQgkweDAwMDAwMDA4CS8qIGFrYSBSU1YxOCAqLworI2RlZmluZSBFUlhCVUZfTE9MRU4JCTB4MDAwMDcwMDAJLyogYWthIFJTVjJfMCAqLworI2RlZmluZSBFUlhCVUZfSElMRU4JCTB4MDNmZjAwMDAJLyogYWthIFJTVjEyXzMgKi8KKyNkZWZpbmUgRVJYQlVGX01VTFRJQ0FTVAkweDA0MDAwMDAwCS8qIGFrYSBSU1YxNiAqLworI2RlZmluZSBFUlhCVUZfQlJPQURDQVNUCTB4MDgwMDAwMDAJLyogYWthIFJTVjE3ICovCisjZGVmaW5lIEVSWEJVRl9MT05HRVZFTlQJMHgxMDAwMDAwMAkvKiBha2EgUlNWMTkgKi8KKyNkZWZpbmUgRVJYQlVGX0JBRFBLVAkJMHgyMDAwMDAwMAkvKiBha2EgUlNWMjAgKi8KKyNkZWZpbmUgRVJYQlVGX0dPT0RQS1QJCTB4NDAwMDAwMDAJLyogYWthIFJTVjIxICovCisjZGVmaW5lIEVSWEJVRl9DQVJSSUVSCQkweDgwMDAwMDAwCS8qIGFrYSBSU1YyMiAqLworCisvKgorICogRXRoZXJuZXQgVFggRGVzY3JpcHRvcgorICovCisjZGVmaW5lIEVUWERfREFUQUxFTiAgICAxMDQKK3N0cnVjdCBpb2MzX2V0eGQgeworCXUzMgljbWQ7CQkJCS8qIGNvbW1hbmQgZmllbGQgKi8KKwl1MzIJYnVmY250OwkJCQkvKiBidWZmZXIgY291bnRzIGZpZWxkICovCisJdTY0CXAxOwkJCQkvKiBidWZmZXIgcG9pbnRlciAxICovCisJdTY0CXAyOwkJCQkvKiBidWZmZXIgcG9pbnRlciAyICovCisJdTgJZGF0YVtFVFhEX0RBVEFMRU5dOwkJLyogb3B0LiB0eCBkYXRhICovCit9OworCisjZGVmaW5lIEVUWERfQllURUNOVF9NQVNLCTB4MDAwMDA3ZmYJLyogdG90YWwgYnl0ZSBjb3VudCAqLworI2RlZmluZSBFVFhEX0lOVFdIRU5ET05FCTB4MDAwMDEwMDAJLyogaW50ciB3aGVuIGRvbmUgKi8KKyNkZWZpbmUgRVRYRF9EMFYJCTB4MDAwMTAwMDAJLyogZGF0YSAwIHZhbGlkICovCisjZGVmaW5lIEVUWERfQjFWCQkweDAwMDIwMDAwCS8qIGJ1ZiAxIHZhbGlkICovCisjZGVmaW5lIEVUWERfQjJWCQkweDAwMDQwMDAwCS8qIGJ1ZiAyIHZhbGlkICovCisjZGVmaW5lIEVUWERfRE9DSEVDS1NVTQkJMHgwMDA4MDAwMAkvKiBpbnNlcnQgaXAgY2tzdW0gKi8KKyNkZWZpbmUgRVRYRF9DSEtPRkZfTUFTSwkweDA3ZjAwMDAwCS8qIGNrc3VtIGJ5dGUgb2Zmc2V0ICovCisjZGVmaW5lIEVUWERfQ0hLT0ZGX1NISUZUCTIwCisKKyNkZWZpbmUgRVRYRF9EMENOVF9NQVNLCQkweDAwMDAwMDdmCisjZGVmaW5lIEVUWERfQjFDTlRfTUFTSwkJMHgwMDA3ZmYwMAorI2RlZmluZSBFVFhEX0IxQ05UX1NISUZUCTgKKyNkZWZpbmUgRVRYRF9CMkNOVF9NQVNLCQkweDdmZjAwMDAwCisjZGVmaW5lIEVUWERfQjJDTlRfU0hJRlQJMjAKKworLyoKKyAqIEJ5dGVidXMgZGV2aWNlIHNwYWNlCisgKi8KKyNkZWZpbmUgSU9DM19CWVRFQlVTX0RFVjAJMHg4MDAwMEwKKyNkZWZpbmUgSU9DM19CWVRFQlVTX0RFVjEJMHhhMDAwMEwKKyNkZWZpbmUgSU9DM19CWVRFQlVTX0RFVjIJMHhjMDAwMEwKKyNkZWZpbmUgSU9DM19CWVRFQlVTX0RFVjMJMHhlMDAwMEwKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBTdXBlcmlvIFJlZ2lzdGVycyAoUElPIEFjY2VzcykgKi8KKyNkZWZpbmUgSU9DM19TSU9fQkFTRQkJMHgyMDAwMAorI2RlZmluZSBJT0MzX1NJT19VQVJUQwkJKElPQzNfU0lPX0JBU0UrMHgxNDEpCS8qIFVBUlQgQ29uZmlnICovCisjZGVmaW5lIElPQzNfU0lPX0tCRENHCQkoSU9DM19TSU9fQkFTRSsweDE0MikJLyogS0JEIENvbmZpZyAqLworI2RlZmluZSBJT0MzX1NJT19QUF9CQVNFCShJT0MzX1NJT19CQVNFK1BQX0JBU0UpCQkvKiBQYXJhbGxlbCBQb3J0ICovCisjZGVmaW5lIElPQzNfU0lPX1JUQ19CQVNFCShJT0MzX1NJT19CQVNFKzB4MTY4KQkvKiBSZWFsIFRpbWUgQ2xvY2sgKi8KKyNkZWZpbmUgSU9DM19TSU9fVUJfQkFTRQkoSU9DM19TSU9fQkFTRStVQVJUQl9CQVNFKQkvKiBVQVJUIEIgKi8KKyNkZWZpbmUgSU9DM19TSU9fVUFfQkFTRQkoSU9DM19TSU9fQkFTRStVQVJUQV9CQVNFKQkvKiBVQVJUIEEgKi8KKworLyogU1NSQU0gRGlhZ25vc3RpYyBBY2Nlc3MgKi8KKyNkZWZpbmUgSU9DM19TU1JBTQlJT0MzX1JBTV9PRkYJLyogYmFzZSBvZiBTU1JBTSBkaWFnbm9zdGljIGFjY2VzcyAqLworI2RlZmluZSBJT0MzX1NTUkFNX0xFTgkweDQwMDAwIC8qIDI1NmtiIChhZGRyZXNzIHNwYWNlIHNpemUsIG1heSBub3QgYmUgZnVsbHkgcG9wdWxhdGVkKSAqLworI2RlZmluZSBJT0MzX1NTUkFNX0RNCTB4MDAwMGZmZmYJLyogZGF0YSBtYXNrICovCisjZGVmaW5lIElPQzNfU1NSQU1fUE0JMHgwMDAxMDAwMAkvKiBwYXJpdHkgbWFzayAqLworCisvKiBiaXRtYXNrcyBmb3IgUENJX1NDUiAqLworI2RlZmluZSBQQ0lfU0NSX1BBUl9SRVNQX0VOCTB4MDAwMDAwNDAJLyogZW5iIFBDSSBwYXJpdHkgY2hlY2tpbmcgKi8KKyNkZWZpbmUgUENJX1NDUl9TRVJSX0VOCQkweDAwMDAwMTAwCS8qIGVuYWJsZSB0aGUgU0VSUiMgZHJpdmVyICovCisjZGVmaW5lIFBDSV9TQ1JfRFJPUF9NT0RFX0VOCTB4MDAwMDgwMDAJLyogZHJvcCBwaW9zIG9uIHBhcml0eSBlcnIgKi8KKyNkZWZpbmUgUENJX1NDUl9SWF9TRVJSCQkoMHgxIDw8IDE2KQorI2RlZmluZSBQQ0lfU0NSX0RST1BfTU9ERQkoMHgxIDw8IDE3KQorI2RlZmluZSBQQ0lfU0NSX1NJR19QQVJfRVJSCSgweDEgPDwgMjQpCisjZGVmaW5lIFBDSV9TQ1JfU0lHX1RBUl9BQlJUCSgweDEgPDwgMjcpCisjZGVmaW5lIFBDSV9TQ1JfUlhfVEFSX0FCUlQJKDB4MSA8PCAyOCkKKyNkZWZpbmUgUENJX1NDUl9TSUdfTVNUX0FCUlQJKDB4MSA8PCAyOSkKKyNkZWZpbmUgUENJX1NDUl9TSUdfU0VSUgkoMHgxIDw8IDMwKQorI2RlZmluZSBQQ0lfU0NSX1BBUl9FUlIJCSgweDEgPDwgMzEpCisKKy8qIGJpdG1hc2tzIGZvciBJT0MzX0tNX0NTUiAqLworI2RlZmluZSBLTV9DU1JfS19XUlRfUEVORCAweDAwMDAwMDAxCS8qIGtiZCBwb3J0IHhtaXR0aW5nIG9yIHJlc2V0dGluZyAqLworI2RlZmluZSBLTV9DU1JfTV9XUlRfUEVORCAweDAwMDAwMDAyCS8qIG1vdXNlIHBvcnQgeG1pdHRpbmcgb3IgcmVzZXR0aW5nICovCisjZGVmaW5lIEtNX0NTUl9LX0xDQgkgIDB4MDAwMDAwMDQJLyogTGluZSBDbnRybCBCaXQgZm9yIGxhc3QgS0JEIHdyaXRlICovCisjZGVmaW5lIEtNX0NTUl9NX0xDQgkgIDB4MDAwMDAwMDgJLyogc2FtZSBmb3IgbW91c2UgKi8KKyNkZWZpbmUgS01fQ1NSX0tfREFUQQkgIDB4MDAwMDAwMTAJLyogc3RhdGUgb2Yga2JkIGRhdGEgbGluZSAqLworI2RlZmluZSBLTV9DU1JfS19DTEsJICAweDAwMDAwMDIwCS8qIHN0YXRlIG9mIGtiZCBjbG9jayBsaW5lICovCisjZGVmaW5lIEtNX0NTUl9LX1BVTExfREFUQSAweDAwMDAwMDQwCS8qIHB1bGwga2JkIGRhdGEgbGluZSBsb3cgKi8KKyNkZWZpbmUgS01fQ1NSX0tfUFVMTF9DTEsgMHgwMDAwMDA4MAkvKiBwdWxsIGtiZCBjbG9jayBsaW5lIGxvdyAqLworI2RlZmluZSBLTV9DU1JfTV9EQVRBCSAgMHgwMDAwMDEwMAkvKiBzdGF0ZSBvZiBtcyBkYXRhIGxpbmUgKi8KKyNkZWZpbmUgS01fQ1NSX01fQ0xLCSAgMHgwMDAwMDIwMAkvKiBzdGF0ZSBvZiBtcyBjbG9jayBsaW5lICovCisjZGVmaW5lIEtNX0NTUl9NX1BVTExfREFUQSAweDAwMDAwNDAwCS8qIHB1bGwgbXMgZGF0YSBsaW5lIGxvdyAqLworI2RlZmluZSBLTV9DU1JfTV9QVUxMX0NMSyAweDAwMDAwODAwCS8qIHB1bGwgbXMgY2xvY2sgbGluZSBsb3cgKi8KKyNkZWZpbmUgS01fQ1NSX0VNTV9NT0RFCSAgMHgwMDAwMTAwMAkvKiBlbXVsYXRpb24gbW9kZSAqLworI2RlZmluZSBLTV9DU1JfU0lNX01PREUJICAweDAwMDAyMDAwCS8qIGNsb2NrIFg4ICovCisjZGVmaW5lIEtNX0NTUl9LX1NNX0lETEUgIDB4MDAwMDQwMDAJLyogS2V5Ym9hcmQgaXMgaWRsZSAqLworI2RlZmluZSBLTV9DU1JfTV9TTV9JRExFICAweDAwMDA4MDAwCS8qIE1vdXNlIGlzIGlkbGUgKi8KKyNkZWZpbmUgS01fQ1NSX0tfVE8JICAweDAwMDEwMDAwCS8qIEtleWJvYXJkIHRyeWluZyB0byBzZW5kL3JlY2VpdmUgKi8KKyNkZWZpbmUgS01fQ1NSX01fVE8JICAweDAwMDIwMDAwCS8qIE1vdXNlIHRyeWluZyB0byBzZW5kL3JlY2VpdmUgKi8KKyNkZWZpbmUgS01fQ1NSX0tfVE9fRU4JICAweDAwMDQwMDAwCS8qIEtNX0NTUl9LX1RPICsgS01fQ1NSX0tfVE9fRU4gPSBjYXVzZQorCQkJCQkgICBTSU9fSVIgdG8gYXNzZXJ0ICovCisjZGVmaW5lIEtNX0NTUl9NX1RPX0VOCSAgMHgwMDA4MDAwMAkvKiBLTV9DU1JfTV9UTyArIEtNX0NTUl9NX1RPX0VOID0gY2F1c2UKKwkJCQkJICAgU0lPX0lSIHRvIGFzc2VydCAqLworI2RlZmluZSBLTV9DU1JfS19DTEFNUF9PTkUJMHgwMDEwMDAwMAkvKiBQdWxsIEtfQ0xLIGxvdyBhZnRlciByZWMuIG9uZSBjaGFyICovCisjZGVmaW5lIEtNX0NTUl9NX0NMQU1QX09ORQkweDAwMjAwMDAwCS8qIFB1bGwgTV9DTEsgbG93IGFmdGVyIHJlYy4gb25lIGNoYXIgKi8KKyNkZWZpbmUgS01fQ1NSX0tfQ0xBTVBfVEhSRUUJMHgwMDQwMDAwMAkvKiBQdWxsIEtfQ0xLIGxvdyBhZnRlciByZWMuIHRocmVlIGNoYXJzICovCisjZGVmaW5lIEtNX0NTUl9NX0NMQU1QX1RIUkVFCTB4MDA4MDAwMDAJLyogUHVsbCBNX0NMSyBsb3cgYWZ0ZXIgcmVjLiB0aHJlZSBjaGFyICovCisKKy8qIGJpdG1hc2tzIGZvciBJT0MzX0tfUkQgYW5kIElPQzNfTV9SRCAqLworI2RlZmluZSBLTV9SRF9EQVRBXzIJMHgwMDAwMDBmZgkvKiAzcmQgY2hhciByZWN2ZCBzaW5jZSBsYXN0IHJlYWQgKi8KKyNkZWZpbmUgS01fUkRfREFUQV8yX1NISUZUIDAKKyNkZWZpbmUgS01fUkRfREFUQV8xCTB4MDAwMGZmMDAJLyogMm5kIGNoYXIgcmVjdmQgc2luY2UgbGFzdCByZWFkICovCisjZGVmaW5lIEtNX1JEX0RBVEFfMV9TSElGVCA4CisjZGVmaW5lIEtNX1JEX0RBVEFfMAkweDAwZmYwMDAwCS8qIDFzdCBjaGFyIHJlY3ZkIHNpbmNlIGxhc3QgcmVhZCAqLworI2RlZmluZSBLTV9SRF9EQVRBXzBfU0hJRlQgMTYKKyNkZWZpbmUgS01fUkRfRlJBTUVfRVJSXzIgMHgwMTAwMDAwMAkvKiAgZnJhbWluZyBvciBwYXJpdHkgZXJyb3IgaW4gYnl0ZSAyICovCisjZGVmaW5lIEtNX1JEX0ZSQU1FX0VSUl8xIDB4MDIwMDAwMDAJLyogc2FtZSBmb3IgYnl0ZSAxICovCisjZGVmaW5lIEtNX1JEX0ZSQU1FX0VSUl8wIDB4MDQwMDAwMDAJLyogc2FtZSBmb3IgYnl0ZSAwICovCisKKyNkZWZpbmUgS01fUkRfS0JEX01TRQkweDA4MDAwMDAwCS8qIDAgaWYgZnJvbSBrYmQsIDEgaWYgZnJvbSBtb3VzZSAqLworI2RlZmluZSBLTV9SRF9PRkxPCTB4MTAwMDAwMDAJLyogNHRoIGNoYXIgcmVjdmQgYmVmb3JlIHRoaXMgcmVhZCAqLworI2RlZmluZSBLTV9SRF9WQUxJRF8yCTB4MjAwMDAwMDAJLyogREFUQV8yIHZhbGlkICovCisjZGVmaW5lIEtNX1JEX1ZBTElEXzEJMHg0MDAwMDAwMAkvKiBEQVRBXzEgdmFsaWQgKi8KKyNkZWZpbmUgS01fUkRfVkFMSURfMAkweDgwMDAwMDAwCS8qIERBVEFfMCB2YWxpZCAqLworI2RlZmluZSBLTV9SRF9WQUxJRF9BTEwgKEtNX1JEX1ZBTElEXzB8S01fUkRfVkFMSURfMXxLTV9SRF9WQUxJRF8yKQorCisvKiBiaXRtYXNrcyBmb3IgSU9DM19LX1dEICYgSU9DM19NX1dEICovCisjZGVmaW5lIEtNX1dEX1dSVF9EQVRBCTB4MDAwMDAwZmYJLyogd3JpdGUgdG8ga2V5Ym9hcmQvbW91c2UgcG9ydCAqLworI2RlZmluZSBLTV9XRF9XUlRfREFUQV9TSElGVCAwCisKKy8qIGJpdG1hc2tzIGZvciBzZXJpYWwgUlggc3RhdHVzIGJ5dGUgKi8KKyNkZWZpbmUgUlhTQl9PVkVSUlVOCTB4MDEJLyogY2hhcihzKSBsb3N0ICovCisjZGVmaW5lIFJYU0JfUEFSX0VSUgkweDAyCS8qIHBhcml0eSBlcnJvciAqLworI2RlZmluZSBSWFNCX0ZSQU1FX0VSUgkweDA0CS8qIGZyYW1pbmcgZXJyb3IgKi8KKyNkZWZpbmUgUlhTQl9CUkVBSwkweDA4CS8qIGJyZWFrIGNoYXJhY3RlciAqLworI2RlZmluZSBSWFNCX0NUUwkweDEwCS8qIHN0YXRlIG9mIENUUyAqLworI2RlZmluZSBSWFNCX0RDRAkweDIwCS8qIHN0YXRlIG9mIERDRCAqLworI2RlZmluZSBSWFNCX01PREVNX1ZBTElEIDB4NDAJLyogRENELCBDVFMgYW5kIE9WRVJSVU4gYXJlIHZhbGlkICovCisjZGVmaW5lIFJYU0JfREFUQV9WQUxJRCAweDgwCS8qIGRhdGEgYnl0ZSwgRlJBTUVfRVJSIFBBUl9FUlIgJiBCUkVBSyB2YWxpZCAqLworCisvKiBiaXRtYXNrcyBmb3Igc2VyaWFsIFRYIGNvbnRyb2wgYnl0ZSAqLworI2RlZmluZSBUWENCX0lOVF9XSEVOX0RPTkUgMHgyMCAvKiBpbnRlcnJ1cHQgYWZ0ZXIgdGhpcyBieXRlIGlzIHNlbnQgKi8KKyNkZWZpbmUgVFhDQl9JTlZBTElECTB4MDAJLyogYnl0ZSBpcyBpbnZhbGlkICovCisjZGVmaW5lIFRYQ0JfVkFMSUQJMHg0MAkvKiBieXRlIGlzIHZhbGlkICovCisjZGVmaW5lIFRYQ0JfTUNSCTB4ODAJLyogZGF0YTw3OjA+IHRvIG1vZGVtIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgVFhDQl9ERUxBWQkweGMwCS8qIGRlbGF5IGRhdGE8NzowPiBtU2VjICovCisKKy8qIGJpdG1hc2tzIGZvciBJT0MzX1NCQlJfTCAqLworI2RlZmluZSBTQkJSX0xfU0laRQkweDAwMDAwMDAxCS8qIDAgPT0gMUtCIHJpbmdzLCAxID09IDRLQiByaW5ncyAqLworI2RlZmluZSBTQkJSX0xfQkFTRQkweGZmZmZmMDAwCS8qIGxvd2VyIHNlcmlhbCByaW5nIGJhc2UgYWRkciAqLworCisvKiBiaXRtYXNrcyBmb3IgSU9DM19TU0NSXzxBOkI+ICovCisjZGVmaW5lIFNTQ1JfUlhfVEhSRVNIT0xEIDB4MDAwMDAxZmYJLyogaGl3YXRlciBtYXJrICovCisjZGVmaW5lIFNTQ1JfVFhfVElNRVJfQlVTWSAweDAwMDEwMDAwCS8qIFRYIHRpbWVyIGluIHByb2dyZXNzICovCisjZGVmaW5lIFNTQ1JfSEZDX0VOCTB4MDAwMjAwMDAJLyogaGFyZHdhcmUgZmxvdyBjb250cm9sIGVuYWJsZWQgKi8KKyNkZWZpbmUgU1NDUl9SWF9SSU5HX0RDRCAweDAwMDQwMDAwCS8qIHBvc3QgUlggcmVjb3JkIG9uIGRlbHRhLURDRCAqLworI2RlZmluZSBTU0NSX1JYX1JJTkdfQ1RTIDB4MDAwODAwMDAJLyogcG9zdCBSWCByZWNvcmQgb24gZGVsdGEtQ1RTICovCisjZGVmaW5lIFNTQ1JfSElHSF9TUEQJMHgwMDEwMDAwMAkvKiA0WCBzcGVlZCAqLworI2RlZmluZSBTU0NSX0RJQUcJMHgwMDIwMDAwMAkvKiBieXBhc3MgY2xvY2sgZGl2aWRlciBmb3Igc2ltICovCisjZGVmaW5lIFNTQ1JfUlhfRFJBSU4JMHgwODAwMDAwMAkvKiBkcmFpbiBSWCBidWZmZXIgdG8gbWVtb3J5ICovCisjZGVmaW5lIFNTQ1JfRE1BX0VOCTB4MTAwMDAwMDAJLyogZW5hYmxlIHJpbmcgYnVmZmVyIERNQSAqLworI2RlZmluZSBTU0NSX0RNQV9QQVVTRQkweDIwMDAwMDAwCS8qIHBhdXNlIERNQSAqLworI2RlZmluZSBTU0NSX1BBVVNFX1NUQVRFIDB4NDAwMDAwMDAJLyogc2V0cyB3aGVuIFBBVVNFIHRha2VzIGVmZmVjdCAqLworI2RlZmluZSBTU0NSX1JFU0VUCTB4ODAwMDAwMDAJLyogcmVzZXQgRE1BIGNoYW5uZWxzICovCisKKy8qIGFsbCBwcm9kdWNlci9jb21zdW1lciBwb2ludGVycyBhcmUgdGhlIHNhbWUgYml0ZmllbGQgKi8KKyNkZWZpbmUgUFJPRF9DT05TX1BUUl80SyAweDAwMDAwZmY4CS8qIGZvciA0SyBidWZmZXJzICovCisjZGVmaW5lIFBST0RfQ09OU19QVFJfMUsgMHgwMDAwMDNmOAkvKiBmb3IgMUsgYnVmZmVycyAqLworI2RlZmluZSBQUk9EX0NPTlNfUFRSX09GRiAzCisKKy8qIGJpdG1hc2tzIGZvciBJT0MzX1NSQ0lSXzxBOkI+ICovCisjZGVmaW5lIFNSQ0lSX0FSTQkweDgwMDAwMDAwCS8qIGFybSBSWCB0aW1lciAqLworCisvKiBiaXRtYXNrcyBmb3IgSU9DM19TUlBJUl88QTpCPiAqLworI2RlZmluZSBTUlBJUl9CWVRFX0NOVAkweDA3MDAwMDAwCS8qIGJ5dGVzIGluIHBhY2tlciAqLworI2RlZmluZSBTUlBJUl9CWVRFX0NOVF9TSElGVCAyNAorCisvKiBiaXRtYXNrcyBmb3IgSU9DM19TVENJUl88QTpCPiAqLworI2RlZmluZSBTVENJUl9CWVRFX0NOVAkweDBmMDAwMDAwCS8qIGJ5dGVzIGluIHVucGFja2VyICovCisjZGVmaW5lIFNUQ0lSX0JZVEVfQ05UX1NISUZUIDI0CisKKy8qIGJpdG1hc2tzIGZvciBJT0MzX1NIQURPV188QTpCPiAqLworI2RlZmluZSBTSEFET1dfRFIJMHgwMDAwMDAwMQkvKiBkYXRhIHJlYWR5ICovCisjZGVmaW5lIFNIQURPV19PRQkweDAwMDAwMDAyCS8qIG92ZXJydW4gZXJyb3IgKi8KKyNkZWZpbmUgU0hBRE9XX1BFCTB4MDAwMDAwMDQJLyogcGFyaXR5IGVycm9yICovCisjZGVmaW5lIFNIQURPV19GRQkweDAwMDAwMDA4CS8qIGZyYW1pbmcgZXJyb3IgKi8KKyNkZWZpbmUgU0hBRE9XX0JJCTB4MDAwMDAwMTAJLyogYnJlYWsgaW50ZXJydXB0ICovCisjZGVmaW5lIFNIQURPV19USFJFCTB4MDAwMDAwMjAJLyogdHJhbnNtaXQgaG9sZGluZyByZWdpc3RlciBlbXB0eSAqLworI2RlZmluZSBTSEFET1dfVEVNVAkweDAwMDAwMDQwCS8qIHRyYW5zbWl0IHNoaWZ0IHJlZ2lzdGVyIGVtcHR5ICovCisjZGVmaW5lIFNIQURPV19SRkNFCTB4MDAwMDAwODAJLyogY2hhciBpbiBSWCBmaWZvIGhhcyBhbiBlcnJvciAqLworI2RlZmluZSBTSEFET1dfRENUUwkweDAwMDEwMDAwCS8qIGRlbHRhIGNsZWFyIHRvIHNlbmQgKi8KKyNkZWZpbmUgU0hBRE9XX0REQ0QJMHgwMDA4MDAwMAkvKiBkZWx0YSBkYXRhIGNhcnJpZXIgZGV0ZWN0ICovCisjZGVmaW5lIFNIQURPV19DVFMJMHgwMDEwMDAwMAkvKiBjbGVhciB0byBzZW5kICovCisjZGVmaW5lIFNIQURPV19EQ0QJMHgwMDgwMDAwMAkvKiBkYXRhIGNhcnJpZXIgZGV0ZWN0ICovCisjZGVmaW5lIFNIQURPV19EVFIJMHgwMTAwMDAwMAkvKiBkYXRhIHRlcm1pbmFsIHJlYWR5ICovCisjZGVmaW5lIFNIQURPV19SVFMJMHgwMjAwMDAwMAkvKiByZXF1ZXN0IHRvIHNlbmQgKi8KKyNkZWZpbmUgU0hBRE9XX09VVDEJMHgwNDAwMDAwMAkvKiAxNjU1MCBPVVQxIGJpdCAqLworI2RlZmluZSBTSEFET1dfT1VUMgkweDA4MDAwMDAwCS8qIDE2NTUwIE9VVDIgYml0ICovCisjZGVmaW5lIFNIQURPV19MT09QCTB4MTAwMDAwMDAJLyogbG9vcGJhY2sgZW5hYmxlZCAqLworCisvKiBiaXRtYXNrcyBmb3IgSU9DM19TUlRSXzxBOkI+ICovCisjZGVmaW5lIFNSVFJfQ05UCTB4MDAwMDBmZmYJLyogcmVsb2FkIHZhbHVlIGZvciBSWCB0aW1lciAqLworI2RlZmluZSBTUlRSX0NOVF9WQUwJMHgwZmZmMDAwMAkvKiBjdXJyZW50IHZhbHVlIG9mIFJYIHRpbWVyICovCisjZGVmaW5lIFNSVFJfQ05UX1ZBTF9TSElGVCAxNgorI2RlZmluZSBTUlRSX0haCQkxNjAwMAkvKiBTUlRSIGNsb2NrIGZyZXF1ZW5jeSAqLworCisvKiBiaXRtYXNrcyBmb3IgSU9DM19TSU9fSVIsIElPQzNfU0lPX0lFQyBhbmQgSU9DM19TSU9fSUVTICAqLworI2RlZmluZSBTSU9fSVJfU0FfVFhfTVQJCTB4MDAwMDAwMDEJLyogU2VyaWFsIHBvcnQgQSBUWCBlbXB0eSAqLworI2RlZmluZSBTSU9fSVJfU0FfUlhfRlVMTAkweDAwMDAwMDAyCS8qIHBvcnQgQSBSWCBidWYgZnVsbCAqLworI2RlZmluZSBTSU9fSVJfU0FfUlhfSElHSAkweDAwMDAwMDA0CS8qIHBvcnQgQSBSWCBoaXdhdCAqLworI2RlZmluZSBTSU9fSVJfU0FfUlhfVElNRVIJMHgwMDAwMDAwOAkvKiBwb3J0IEEgUlggdGltZW91dCAqLworI2RlZmluZSBTSU9fSVJfU0FfREVMVEFfRENECTB4MDAwMDAwMTAJLyogcG9ydCBBIGRlbHRhIERDRCAqLworI2RlZmluZSBTSU9fSVJfU0FfREVMVEFfQ1RTCTB4MDAwMDAwMjAJLyogcG9ydCBBIGRlbHRhIENUUyAqLworI2RlZmluZSBTSU9fSVJfU0FfSU5UCQkweDAwMDAwMDQwCS8qIHBvcnQgQSBwYXNzLXRocnUgaW50ciAqLworI2RlZmluZSBTSU9fSVJfU0FfVFhfRVhQTElDSVQJMHgwMDAwMDA4MAkvKiBwb3J0IEEgZXhwbGljaXQgVFggdGhydSAqLworI2RlZmluZSBTSU9fSVJfU0FfTUVNRVJSCTB4MDAwMDAxMDAJLyogcG9ydCBBIFBDSSBlcnJvciAqLworI2RlZmluZSBTSU9fSVJfU0JfVFhfTVQJCTB4MDAwMDAyMDAJLyogKi8KKyNkZWZpbmUgU0lPX0lSX1NCX1JYX0ZVTEwJMHgwMDAwMDQwMAkvKiAqLworI2RlZmluZSBTSU9fSVJfU0JfUlhfSElHSAkweDAwMDAwODAwCS8qICovCisjZGVmaW5lIFNJT19JUl9TQl9SWF9USU1FUgkweDAwMDAxMDAwCS8qICovCisjZGVmaW5lIFNJT19JUl9TQl9ERUxUQV9EQ0QJMHgwMDAwMjAwMAkvKiAqLworI2RlZmluZSBTSU9fSVJfU0JfREVMVEFfQ1RTCTB4MDAwMDQwMDAJLyogKi8KKyNkZWZpbmUgU0lPX0lSX1NCX0lOVAkJMHgwMDAwODAwMAkvKiAqLworI2RlZmluZSBTSU9fSVJfU0JfVFhfRVhQTElDSVQJMHgwMDAxMDAwMAkvKiAqLworI2RlZmluZSBTSU9fSVJfU0JfTUVNRVJSCTB4MDAwMjAwMDAJLyogKi8KKyNkZWZpbmUgU0lPX0lSX1BQX0lOVAkJMHgwMDA0MDAwMAkvKiBQIHBvcnQgcGFzcy10aHJ1IGludHIgKi8KKyNkZWZpbmUgU0lPX0lSX1BQX0lOVEEJCTB4MDAwODAwMDAJLyogUFAgY29udGV4dCBBIHRocnUgKi8KKyNkZWZpbmUgU0lPX0lSX1BQX0lOVEIJCTB4MDAxMDAwMDAJLyogUFAgY29udGV4dCBCIHRocnUgKi8KKyNkZWZpbmUgU0lPX0lSX1BQX01FTUVSUgkweDAwMjAwMDAwCS8qIFBQIFBDSSBlcnJvciAqLworI2RlZmluZSBTSU9fSVJfS0JEX0lOVAkJMHgwMDQwMDAwMAkvKiBrYmQvbW91c2UgaW50ciAqLworI2RlZmluZSBTSU9fSVJfUlRfSU5UCQkweDA4MDAwMDAwCS8qIFJUIG91dHB1dCBwdWxzZSAqLworI2RlZmluZSBTSU9fSVJfR0VOX0lOVDEJCTB4MTAwMDAwMDAJLyogUlQgaW5wdXQgcHVsc2UgKi8KKyNkZWZpbmUgU0lPX0lSX0dFTl9JTlRfU0hJRlQJMjgKKworLyogcGVyIGRldmljZSBpbnRlcnJ1cHQgbWFza3MgKi8KKyNkZWZpbmUgU0lPX0lSX1NBCQkoU0lPX0lSX1NBX1RYX01UIHwgU0lPX0lSX1NBX1JYX0ZVTEwgfCBcCisJCQkJIFNJT19JUl9TQV9SWF9ISUdIIHwgU0lPX0lSX1NBX1JYX1RJTUVSIHwgXAorCQkJCSBTSU9fSVJfU0FfREVMVEFfRENEIHwgU0lPX0lSX1NBX0RFTFRBX0NUUyB8IFwKKwkJCQkgU0lPX0lSX1NBX0lOVCB8IFNJT19JUl9TQV9UWF9FWFBMSUNJVCB8IFwKKwkJCQkgU0lPX0lSX1NBX01FTUVSUikKKyNkZWZpbmUgU0lPX0lSX1NCCQkoU0lPX0lSX1NCX1RYX01UIHwgU0lPX0lSX1NCX1JYX0ZVTEwgfCBcCisJCQkJIFNJT19JUl9TQl9SWF9ISUdIIHwgU0lPX0lSX1NCX1JYX1RJTUVSIHwgXAorCQkJCSBTSU9fSVJfU0JfREVMVEFfRENEIHwgU0lPX0lSX1NCX0RFTFRBX0NUUyB8IFwKKwkJCQkgU0lPX0lSX1NCX0lOVCB8IFNJT19JUl9TQl9UWF9FWFBMSUNJVCB8IFwKKwkJCQkgU0lPX0lSX1NCX01FTUVSUikKKyNkZWZpbmUgU0lPX0lSX1BQCQkoU0lPX0lSX1BQX0lOVCB8IFNJT19JUl9QUF9JTlRBIHwgXAorCQkJCSBTSU9fSVJfUFBfSU5UQiB8IFNJT19JUl9QUF9NRU1FUlIpCisjZGVmaW5lIFNJT19JUl9SVAkJKFNJT19JUl9SVF9JTlQgfCBTSU9fSVJfR0VOX0lOVDEpCisKKy8qIG1hY3JvIHRvIGxvYWQgcGVuZGluZyBpbnRlcnJ1cHRzICovCisjZGVmaW5lIElPQzNfUEVORElOR19JTlRSUyhtZW0pIChQQ0lfSU5XKCYoKG1lbSktPnNpb19pcikpICYgXAorCQkJCSBQQ0lfSU5XKCYoKG1lbSktPnNpb19pZXNfcm8pKSkKKworLyogYml0bWFza3MgZm9yIFNJT19DUiAqLworI2RlZmluZSBTSU9fQ1JfU0lPX1JFU0VUCTB4MDAwMDAwMDEJLyogcmVzZXQgdGhlIFNJTyAqLworI2RlZmluZSBTSU9fQ1JfU0VSX0FfQkFTRQkweDAwMDAwMGZlCS8qIERNQSBwb2xsIGFkZHIgcG9ydCBBICovCisjZGVmaW5lIFNJT19DUl9TRVJfQV9CQVNFX1NISUZUIDEKKyNkZWZpbmUgU0lPX0NSX1NFUl9CX0JBU0UJMHgwMDAwN2YwMAkvKiBETUEgcG9sbCBhZGRyIHBvcnQgQiAqLworI2RlZmluZSBTSU9fQ1JfU0VSX0JfQkFTRV9TSElGVCA4CisjZGVmaW5lIFNJT19TUl9DTURfUFVMU0UJMHgwMDA3ODAwMAkvKiBieXRlIGJ1cyBzdHJvYmUgbGVuZ3RoICovCisjZGVmaW5lIFNJT19DUl9DTURfUFVMU0VfU0hJRlQJMTUKKyNkZWZpbmUgU0lPX0NSX0FSQl9ESUFHCQkweDAwMzgwMDAwCS8qIGN1ciAhZW5ldCBQQ0kgcmVxdWV0IChybykgKi8KKyNkZWZpbmUgU0lPX0NSX0FSQl9ESUFHX1RYQQkweDAwMDAwMDAwCisjZGVmaW5lIFNJT19DUl9BUkJfRElBR19SWEEJMHgwMDA4MDAwMAorI2RlZmluZSBTSU9fQ1JfQVJCX0RJQUdfVFhCCTB4MDAxMDAwMDAKKyNkZWZpbmUgU0lPX0NSX0FSQl9ESUFHX1JYQgkweDAwMTgwMDAwCisjZGVmaW5lIFNJT19DUl9BUkJfRElBR19QUAkweDAwMjAwMDAwCisjZGVmaW5lIFNJT19DUl9BUkJfRElBR19JRExFCTB4MDA0MDAwMDAJLyogMCAtPiBhY3RpdmUgcmVxdWVzdCAocm8pICovCisKKy8qIGJpdG1hc2tzIGZvciBJTlRfT1VUICovCisjZGVmaW5lIElOVF9PVVRfQ09VTlQJMHgwMDAwZmZmZgkvKiBwdWxzZSBpbnRlcnZhbCB0aW1lciAqLworI2RlZmluZSBJTlRfT1VUX01PREUJMHgwMDA3MDAwMAkvKiBtb2RlIG1hc2sgKi8KKyNkZWZpbmUgSU5UX09VVF9NT0RFXzAJMHgwMDAwMDAwMAkvKiBzZXQgb3V0cHV0IHRvIDAgKi8KKyNkZWZpbmUgSU5UX09VVF9NT0RFXzEJMHgwMDA0MDAwMAkvKiBzZXQgb3V0cHV0IHRvIDEgKi8KKyNkZWZpbmUgSU5UX09VVF9NT0RFXzFQVUxTRSAweDAwMDUwMDAwCS8qIHNlbmQgMSBwdWxzZSAqLworI2RlZmluZSBJTlRfT1VUX01PREVfUFVMU0VTIDB4MDAwNjAwMDAJLyogc2VuZCAxIHB1bHNlIGV2ZXJ5IGludGVydmFsICovCisjZGVmaW5lIElOVF9PVVRfTU9ERV9TUVcgMHgwMDA3MDAwMAkvKiB0b2dnbGUgb3V0cHV0IGV2ZXJ5IGludGVydmFsICovCisjZGVmaW5lIElOVF9PVVRfRElBRwkweDQwMDAwMDAwCS8qIGRpYWcgbW9kZSAqLworI2RlZmluZSBJTlRfT1VUX0lOVF9PVVQgMHg4MDAwMDAwMAkvKiBjdXJyZW50IHN0YXRlIG9mIElOVF9PVVQgKi8KKworLyogdGltZSBjb25zdGFudHMgZm9yIElOVF9PVVQgKi8KKyNkZWZpbmUgSU5UX09VVF9OU19QRVJfVElDSyAoMzAgKiAyNjApCS8qIDMwIG5zIFBDSSBjbG9jaywgZGl2aXNvcj0yNjAgKi8KKyNkZWZpbmUgSU5UX09VVF9USUNLU19QRVJfUFVMU0UgMwkvKiBvdXRnb2luZyBwdWxzZSBsYXN0cyAzIHRpY2tzICovCisjZGVmaW5lIElOVF9PVVRfVVNfVE9fQ09VTlQoeCkJCS8qIGNvbnZlcnQgdVMgdG8gYSBjb3VudCB2YWx1ZSAqLyBcCisJKCgoeCkgKiAxMCArIElOVF9PVVRfTlNfUEVSX1RJQ0sgLyAyMDApICoJXAorCSAxMDAgLyBJTlRfT1VUX05TX1BFUl9USUNLIC0gMSkKKyNkZWZpbmUgSU5UX09VVF9DT1VOVF9UT19VUyh4KQkJLyogY29udmVydCBjb3VudCB2YWx1ZSB0byB1UyAqLyBcCisJKCgoeCkgKyAxKSAqIElOVF9PVVRfTlNfUEVSX1RJQ0sgLyAxMDAwKQorI2RlZmluZSBJTlRfT1VUX01JTl9USUNLUyAzCS8qIG1pbiBwZXJpb2QgaXMgd2lkdGggb2YgcHVsc2UgaW4gInRpY2tzIiAqLworI2RlZmluZSBJTlRfT1VUX01BWF9USUNLUyBJTlRfT1VUX0NPVU5UCQkvKiBsYXJnZXN0IHBvc3NpYmxlIGNvdW50ICovCisKKy8qIGJpdG1hc2tzIGZvciBHUENSICovCisjZGVmaW5lIEdQQ1JfRElSCTB4MDAwMDAwZmYJLyogdHJpc3RhdGUgcGluIGlucHV0IG9yIG91dHB1dCAqLworI2RlZmluZSBHUENSX0RJUl9QSU4oeCkgKDE8PCh4KSkJLyogYWNjZXNzIG9uZSBvZiB0aGUgRElSIGJpdHMgKi8KKyNkZWZpbmUgR1BDUl9FREdFCTB4MDAwZjAwMDAJLyogZXh0aW50IGVkZ2Ugb3IgbGV2ZWwgc2Vuc2l0aXZlICovCisjZGVmaW5lIEdQQ1JfRURHRV9QSU4oeCkgKDE8PCgoeCkrMTUpKQkvKiBhY2Nlc3Mgb25lIG9mIHRoZSBFREdFIGJpdHMgKi8KKworLyogdmFsdWVzIGZvciBHUENSICovCisjZGVmaW5lIEdQQ1JfSU5UX09VVF9FTiAweDAwMTAwMDAwCS8qIGVuYWJsZSBJTlRfT1VUIHRvIHBpbiAwICovCisjZGVmaW5lIEdQQ1JfTUxBTl9FTgkweDAwMjAwMDAwCS8qIGVuYWJsZSBNQ1IgdG8gcGluIDggKi8KKyNkZWZpbmUgR1BDUl9ESVJfU0VSQV9YQ1ZSIDB4MDAwMDAwODAJLyogUG9ydCBBIFRyYW5zY2VpdmVyIHNlbGVjdCBlbmFibGUgKi8KKyNkZWZpbmUgR1BDUl9ESVJfU0VSQl9YQ1ZSIDB4MDAwMDAwNDAJLyogUG9ydCBCIFRyYW5zY2VpdmVyIHNlbGVjdCBlbmFibGUgKi8KKyNkZWZpbmUgR1BDUl9ESVJfUEhZX1JTVCAgIDB4MDAwMDAwMjAJLyogZXRoZXJuZXQgUEhZIHJlc2V0IGVuYWJsZSAqLworCisvKiBkZWZzIGZvciBzb21lIG9mIHRoZSBnZW5lcmljIEkvTyBwaW5zICovCisjZGVmaW5lIEdQQ1JfUEhZX1JFU0VUCQkweDIwCS8qIHBpbiBpcyBvdXRwdXQgdG8gUEhZIHJlc2V0ICovCisjZGVmaW5lIEdQQ1JfVUFSVEJfTU9ERVNFTAkweDQwCS8qIHBpbiBpcyBvdXRwdXQgdG8gcG9ydCBCIG1vZGUgc2VsICovCisjZGVmaW5lIEdQQ1JfVUFSVEFfTU9ERVNFTAkweDgwCS8qIHBpbiBpcyBvdXRwdXQgdG8gcG9ydCBBIG1vZGUgc2VsICovCisKKyNkZWZpbmUgR1BQUl9QSFlfUkVTRVRfUElOCTUJLyogR0lPIHBpbiBjb250cm9sbGluZyBwaHkgcmVzZXQgKi8KKyNkZWZpbmUgR1BQUl9VQVJUQl9NT0RFU0VMX1BJTgk2CS8qIEdJTyBwaW4gY29udHJvbGxpbmcgdWFydCBiIG1vZGUgc2VsZWN0ICovCisjZGVmaW5lIEdQUFJfVUFSVEFfTU9ERVNFTF9QSU4JNwkvKiBHSU8gcGluIGNvbnRyb2xsaW5nIHVhcnQgYSBtb2RlIHNlbGVjdCAqLworCisjZGVmaW5lIEVNQ1JfRFVQTEVYCQkweDAwMDAwMDAxCisjZGVmaW5lIEVNQ1JfUFJPTUlTQwkJMHgwMDAwMDAwMgorI2RlZmluZSBFTUNSX1BBREVOCQkweDAwMDAwMDA0CisjZGVmaW5lIEVNQ1JfUlhPRkZfTUFTSwkJMHgwMDAwMDFmOAorI2RlZmluZSBFTUNSX1JYT0ZGX1NISUZUCTMKKyNkZWZpbmUgRU1DUl9SQU1QQVIJCTB4MDAwMDAyMDAKKyNkZWZpbmUgRU1DUl9CQURQQVIJCTB4MDAwMDA4MDAKKyNkZWZpbmUgRU1DUl9CVUZTSVoJCTB4MDAwMDEwMDAKKyNkZWZpbmUgRU1DUl9UWERNQUVOCQkweDAwMDAyMDAwCisjZGVmaW5lIEVNQ1JfVFhFTgkJMHgwMDAwNDAwMAorI2RlZmluZSBFTUNSX1JYRE1BRU4JCTB4MDAwMDgwMDAKKyNkZWZpbmUgRU1DUl9SWEVOCQkweDAwMDEwMDAwCisjZGVmaW5lIEVNQ1JfTE9PUEJBQ0sJCTB4MDAwMjAwMDAKKyNkZWZpbmUgRU1DUl9BUkJfRElBRwkJMHgwMDFjMDAwMAorI2RlZmluZSBFTUNSX0FSQl9ESUFHX0lETEUJMHgwMDIwMDAwMAorI2RlZmluZSBFTUNSX1JTVAkJMHg4MDAwMDAwMAorCisjZGVmaW5lIEVJU1JfUlhUSU1FUklOVAkJMHgwMDAwMDAwMQorI2RlZmluZSBFSVNSX1JYVEhSRVNISU5UCTB4MDAwMDAwMDIKKyNkZWZpbmUgRUlTUl9SWE9GTE8JCTB4MDAwMDAwMDQKKyNkZWZpbmUgRUlTUl9SWEJVRk9GTE8JCTB4MDAwMDAwMDgKKyNkZWZpbmUgRUlTUl9SWE1FTUVSUgkJMHgwMDAwMDAxMAorI2RlZmluZSBFSVNSX1JYUEFSRVJSCQkweDAwMDAwMDIwCisjZGVmaW5lIEVJU1JfVFhFTVBUWQkJMHgwMDAxMDAwMAorI2RlZmluZSBFSVNSX1RYUlRSWQkJMHgwMDAyMDAwMAorI2RlZmluZSBFSVNSX1RYRVhERUYJCTB4MDAwNDAwMDAKKyNkZWZpbmUgRUlTUl9UWExDT0wJCTB4MDAwODAwMDAKKyNkZWZpbmUgRUlTUl9UWEdJQU5UCQkweDAwMTAwMDAwCisjZGVmaW5lIEVJU1JfVFhCVUZVRkxPCQkweDAwMjAwMDAwCisjZGVmaW5lIEVJU1JfVFhFWFBMSUNJVAkJMHgwMDQwMDAwMAorI2RlZmluZSBFSVNSX1RYQ09MTFdSQVAJCTB4MDA4MDAwMDAKKyNkZWZpbmUgRUlTUl9UWERFRkVSV1JBUAkweDAxMDAwMDAwCisjZGVmaW5lIEVJU1JfVFhNRU1FUlIJCTB4MDIwMDAwMDAKKyNkZWZpbmUgRUlTUl9UWFBBUkVSUgkJMHgwNDAwMDAwMAorCisjZGVmaW5lIEVSQ1NSX1RIUkVTSF9NQVNLCTB4MDAwMDAxZmYJLyogZW5ldCBSWCB0aHJlc2hvbGQgKi8KKyNkZWZpbmUgRVJDU1JfUlhfVE1SCQkweDQwMDAwMDAwCS8qIHNpbXVsYXRpb24gb25seSAqLworI2RlZmluZSBFUkNTUl9ESUFHX09GTE8JCTB4ODAwMDAwMDAJLyogc2ltdWxhdGlvbiBvbmx5ICovCisKKyNkZWZpbmUgRVJCUl9BTElHTk1FTlQJCTQwOTYKKyNkZWZpbmUgRVJCUl9MX1JYUklOR0JBU0VfTUFTSwkweGZmZmZmMDAwCisKKyNkZWZpbmUgRVJCQVJfQkFSUklFUl9CSVQJMHgwMTAwCisjZGVmaW5lIEVSQkFSX1JYQkFSUl9NQVNLCTB4ZmZmZjAwMDAKKyNkZWZpbmUgRVJCQVJfUlhCQVJSX1NISUZUCTE2CisKKyNkZWZpbmUgRVJDSVJfUlhDT05TVU1FX01BU0sJMHgwMDAwMGZmZgorCisjZGVmaW5lIEVSUElSX1JYUFJPRFVDRV9NQVNLCTB4MDAwMDBmZmYKKyNkZWZpbmUgRVJQSVJfQVJNCQkweDgwMDAwMDAwCisKKyNkZWZpbmUgRVJUUl9DTlRfTUFTSwkJMHgwMDAwMDdmZgorCisjZGVmaW5lIEVUQ1NSX0lQR1RfTUFTSwkJMHgwMDAwMDA3ZgorI2RlZmluZSBFVENTUl9JUEdSMV9NQVNLCTB4MDAwMDdmMDAKKyNkZWZpbmUgRVRDU1JfSVBHUjFfU0hJRlQJOAorI2RlZmluZSBFVENTUl9JUEdSMl9NQVNLCTB4MDA3ZjAwMDAKKyNkZWZpbmUgRVRDU1JfSVBHUjJfU0hJRlQJMTYKKyNkZWZpbmUgRVRDU1JfTk9UWENMSwkJMHg4MDAwMDAwMAorCisjZGVmaW5lIEVUQ0RDX0NPTExDTlRfTUFTSwkweDAwMDBmZmZmCisjZGVmaW5lIEVUQ0RDX0RFRkVSQ05UX01BU0sJMHhmZmZmMDAwMAorI2RlZmluZSBFVENEQ19ERUZFUkNOVF9TSElGVAkxNgorCisjZGVmaW5lIEVUQlJfQUxJR05NRU5UCQkoNjQqMTAyNCkKKyNkZWZpbmUgRVRCUl9MX1JJTkdTWl9NQVNLCTB4MDAwMDAwMDEKKyNkZWZpbmUgRVRCUl9MX1JJTkdTWjEyOAkwCisjZGVmaW5lIEVUQlJfTF9SSU5HU1o1MTIJMQorI2RlZmluZSBFVEJSX0xfVFhSSU5HQkFTRV9NQVNLCTB4ZmZmZmMwMDAKKworI2RlZmluZSBFVENJUl9UWENPTlNVTUVfTUFTSwkweDAwMDBmZmZmCisjZGVmaW5lIEVUQ0lSX0lETEUJCTB4ODAwMDAwMDAKKworI2RlZmluZSBFVFBJUl9UWFBST0RVQ0VfTUFTSwkweDAwMDBmZmZmCisKKyNkZWZpbmUgRUJJUl9UWEJVRlBST0RfTUFTSwkweDAwMDAwMDFmCisjZGVmaW5lIEVCSVJfVFhCVUZDT05TX01BU0sJMHgwMDAwMWYwMAorI2RlZmluZSBFQklSX1RYQlVGQ09OU19TSElGVAk4CisjZGVmaW5lIEVCSVJfUlhCVUZQUk9EX01BU0sJMHgwMDdmYzAwMAorI2RlZmluZSBFQklSX1JYQlVGUFJPRF9TSElGVAkxNAorI2RlZmluZSBFQklSX1JYQlVGQ09OU19NQVNLCTB4ZmY4MDAwMDAKKyNkZWZpbmUgRUJJUl9SWEJVRkNPTlNfU0hJRlQJMjMKKworI2RlZmluZSBNSUNSX1JFR0FERFJfTUFTSwkweDAwMDAwMDFmCisjZGVmaW5lIE1JQ1JfUEhZQUREUl9NQVNLCTB4MDAwMDAzZTAKKyNkZWZpbmUgTUlDUl9QSFlBRERSX1NISUZUCTUKKyNkZWZpbmUgTUlDUl9SRUFEVFJJRwkJMHgwMDAwMDQwMAorI2RlZmluZSBNSUNSX0JVU1kJCTB4MDAwMDA4MDAKKworI2RlZmluZSBNSURSX0RBVEFfTUFTSwkJMHgwMDAwZmZmZgorCisjZGVmaW5lIEVSWEJVRl9JUENLU1VNX01BU0sJMHgwMDAwZmZmZgorI2RlZmluZSBFUlhCVUZfQllURUNOVF9NQVNLCTB4MDdmZjAwMDAKKyNkZWZpbmUgRVJYQlVGX0JZVEVDTlRfU0hJRlQJMTYKKyNkZWZpbmUgRVJYQlVGX1YJCTB4ODAwMDAwMDAKKworI2RlZmluZSBFUlhCVUZfQ1JDRVJSCQkweDAwMDAwMDAxCS8qIGFrYSBSU1YxNSAqLworI2RlZmluZSBFUlhCVUZfRlJBTUVSUgkJMHgwMDAwMDAwMgkvKiBha2EgUlNWMTQgKi8KKyNkZWZpbmUgRVJYQlVGX0NPREVSUgkJMHgwMDAwMDAwNAkvKiBha2EgUlNWMTMgKi8KKyNkZWZpbmUgRVJYQlVGX0lOVlBSRUFNQgkweDAwMDAwMDA4CS8qIGFrYSBSU1YxOCAqLworI2RlZmluZSBFUlhCVUZfTE9MRU4JCTB4MDAwMDcwMDAJLyogYWthIFJTVjJfMCAqLworI2RlZmluZSBFUlhCVUZfSElMRU4JCTB4MDNmZjAwMDAJLyogYWthIFJTVjEyXzMgKi8KKyNkZWZpbmUgRVJYQlVGX01VTFRJQ0FTVAkweDA0MDAwMDAwCS8qIGFrYSBSU1YxNiAqLworI2RlZmluZSBFUlhCVUZfQlJPQURDQVNUCTB4MDgwMDAwMDAJLyogYWthIFJTVjE3ICovCisjZGVmaW5lIEVSWEJVRl9MT05HRVZFTlQJMHgxMDAwMDAwMAkvKiBha2EgUlNWMTkgKi8KKyNkZWZpbmUgRVJYQlVGX0JBRFBLVAkJMHgyMDAwMDAwMAkvKiBha2EgUlNWMjAgKi8KKyNkZWZpbmUgRVJYQlVGX0dPT0RQS1QJCTB4NDAwMDAwMDAJLyogYWthIFJTVjIxICovCisjZGVmaW5lIEVSWEJVRl9DQVJSSUVSCQkweDgwMDAwMDAwCS8qIGFrYSBSU1YyMiAqLworCisjZGVmaW5lIEVUWERfQllURUNOVF9NQVNLCTB4MDAwMDA3ZmYJLyogdG90YWwgYnl0ZSBjb3VudCAqLworI2RlZmluZSBFVFhEX0lOVFdIRU5ET05FCTB4MDAwMDEwMDAJLyogaW50ciB3aGVuIGRvbmUgKi8KKyNkZWZpbmUgRVRYRF9EMFYJCTB4MDAwMTAwMDAJLyogZGF0YSAwIHZhbGlkICovCisjZGVmaW5lIEVUWERfQjFWCQkweDAwMDIwMDAwCS8qIGJ1ZiAxIHZhbGlkICovCisjZGVmaW5lIEVUWERfQjJWCQkweDAwMDQwMDAwCS8qIGJ1ZiAyIHZhbGlkICovCisjZGVmaW5lIEVUWERfRE9DSEVDS1NVTQkJMHgwMDA4MDAwMAkvKiBpbnNlcnQgaXAgY2tzdW0gKi8KKyNkZWZpbmUgRVRYRF9DSEtPRkZfTUFTSwkweDA3ZjAwMDAwCS8qIGNrc3VtIGJ5dGUgb2Zmc2V0ICovCisjZGVmaW5lIEVUWERfQ0hLT0ZGX1NISUZUCTIwCisKKyNkZWZpbmUgRVRYRF9EMENOVF9NQVNLCQkweDAwMDAwMDdmCisjZGVmaW5lIEVUWERfQjFDTlRfTUFTSwkJMHgwMDA3ZmYwMAorI2RlZmluZSBFVFhEX0IxQ05UX1NISUZUCTgKKyNkZWZpbmUgRVRYRF9CMkNOVF9NQVNLCQkweDdmZjAwMDAwCisjZGVmaW5lIEVUWERfQjJDTlRfU0hJRlQJMjAKKwordHlwZWRlZiBlbnVtIGlvYzNfc3ViZGV2c19lIHsKKyAgICBpb2MzX3N1YmRldl9ldGhlciwKKyAgICBpb2MzX3N1YmRldl9nZW5lcmljLAorICAgIGlvYzNfc3ViZGV2X25pYywKKyAgICBpb2MzX3N1YmRldl9rYm1zLAorICAgIGlvYzNfc3ViZGV2X3R0eWEsCisgICAgaW9jM19zdWJkZXZfdHR5YiwKKyAgICBpb2MzX3N1YmRldl9lY3BwLAorICAgIGlvYzNfc3ViZGV2X3J0LAorICAgIGlvYzNfbnN1YmRldnMKK30gaW9jM19zdWJkZXZfdDsKKworLyogc3ViZGV2aWNlIGRpc2FibGUgYml0cywKKyAqIGZyb20gdGhlIHN0YW5kYXJkIElORk9fTEJMX1NVQkRFVlMKKyAqLworI2RlZmluZSBJT0MzX1NEQl9FVEhFUgkJKDE8PGlvYzNfc3ViZGV2X2V0aGVyKQorI2RlZmluZSBJT0MzX1NEQl9HRU5FUklDCSgxPDxpb2MzX3N1YmRldl9nZW5lcmljKQorI2RlZmluZSBJT0MzX1NEQl9OSUMJCSgxPDxpb2MzX3N1YmRldl9uaWMpCisjZGVmaW5lIElPQzNfU0RCX0tCTVMJCSgxPDxpb2MzX3N1YmRldl9rYm1zKQorI2RlZmluZSBJT0MzX1NEQl9UVFlBCQkoMTw8aW9jM19zdWJkZXZfdHR5YSkKKyNkZWZpbmUgSU9DM19TREJfVFRZQgkJKDE8PGlvYzNfc3ViZGV2X3R0eWIpCisjZGVmaW5lIElPQzNfU0RCX0VDUFAJCSgxPDxpb2MzX3N1YmRldl9lY3BwKQorI2RlZmluZSBJT0MzX1NEQl9SVAkJKDE8PGlvYzNfc3ViZGV2X3J0KQorCisjZGVmaW5lIElPQzNfQUxMX1NVQkRFVlMJKCgxPDxpb2MzX25zdWJkZXZzKS0xKQorCisjZGVmaW5lIElPQzNfU0RCX1NFUklBTAkJKElPQzNfU0RCX1RUWUF8SU9DM19TREJfVFRZQikKKworI2RlZmluZSBJT0MzX1NURF9TVUJERVZTCUlPQzNfQUxMX1NVQkRFVlMKKworI2RlZmluZSBJT0MzX0lOVEFfU1VCREVWUwlJT0MzX1NEQl9FVEhFUgorI2RlZmluZSBJT0MzX0lOVEJfU1VCREVWUwkoSU9DM19TREJfR0VORVJJQ3xJT0MzX1NEQl9LQk1TfElPQzNfU0RCX1NFUklBTHxJT0MzX1NEQl9FQ1BQfElPQzNfU0RCX1JUKQorCisjZW5kaWYgLyogX0lPQzNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zbi9rbGNvbmZpZy5oIGIvaW5jbHVkZS9hc20tbWlwcy9zbi9rbGNvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwMjhlMjgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NuL2tsY29uZmlnLmgKQEAgLTAsMCArMSw5ODAgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBEZXJpdmVkIGZyb20gSVJJWCA8c3lzL1NOL2tsY29uZmlnLmg+LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5MiAtIDE5OTcsIDE5OTksIDIwMDAgU2lsaWNvbiBHcmFwaGljcywgSW5jLgorICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwIGJ5IFJhbGYgQmFlY2hsZQorICovCisjaWZuZGVmCV9BU01fU05fS0xDT05GSUdfSAorI2RlZmluZQlfQVNNX1NOX0tMQ09ORklHX0gKKworLyoKKyAqIFRoZSBLTENPTkZJRyBzdHJ1Y3R1cmVzIHN0b3JlIGluZm8gYWJvdXQgdGhlIHZhcmlvdXMgQk9BUkRzIGZvdW5kCisgKiBkdXJpbmcgSGFyZHdhcmUgRGlzY292ZXJ5LiBJbiBhZGRpdGlvbiwgaXQgc3RvcmVzIGluZm8gYWJvdXQgdGhlCisgKiBjb21wb25lbnRzIGZvdW5kIG9uIHRoZSBCT0FSRHMuCisgKi8KKworLyoKKyAqIFdBUk5JTkc6CisgKglDZXJ0YWluIGFzc2VtYmx5IGxhbmd1YWdlIHJvdXRpbmVzIChub3RhYmx5IHh4eHh4LnMpIGluIHRoZSBJUDI3UFJPTQorICoJd2lsbCBkZXBlbmQgb24gdGhlIGZvcm1hdCBvZiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGluIHRoaXMgZmlsZS4gIEluCisgKiAgICAgIG1vc3QgY2FzZXMsIHJlYXJyYW5naW5nIHRoZSBmaWVsZHMgY2FuIHNlcmlvdXNseSBicmVhayB0aGluZ3MuCisgKiAgICAgIEFkZGluZyBmaWVsZHMgaW4gdGhlIGJlZ2lubmluZyBvciBtaWRkbGUgY2FuIGFsc28gYnJlYWsgdGhpbmdzLgorICogICAgICBBZGQgZmllbGRzIGlmIG5lY2Vzc2FyeSwgdG8gdGhlIGVuZCBvZiBhIHN0cnVjdCBpbiBzdWNoIGEgd2F5CisgKiAgICAgIHRoYXQgb2Zmc2V0cyBvZiBleGlzdGluZyBmaWVsZHMgZG8gbm90IGNoYW5nZS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vc24vdHlwZXMuaD4KKworI2lmIGRlZmluZWQoQ09ORklHX1NHSV9JUDI3KQorCisjaW5jbHVkZSA8YXNtL3NuL3NuMC9hZGRycy5oPgorLy8jaW5jbHVkZSA8c3lzL1NOL3JvdXRlci5oPgorLy8gWFhYIFN0b2xlbiBmcm9tIDxzeXMvU04vcm91dGVyLmg+OgorI2RlZmluZSBNQVhfUk9VVEVSX1BPUlRTICg2KSAgICAvKiBNYXguIG51bWJlciBvZiBwb3J0cyBvbiBhIHJvdXRlciAqLworI2luY2x1ZGUgPGFzbS9zbi9zbjAvc24wX2ZydS5oPgorLy8jaW5jbHVkZSA8c3lzL2dyYXBoLmg+CisvLyNpbmNsdWRlIDxzeXMveHRhbGsveGJvdy5oPgorCisjZWxpZiBkZWZpbmVkKENPTkZJR19TR0lfSVAzNSkKKworI2luY2x1ZGUgPGFzbS9zbi9zbjEvYWRkcnMuaD4KKyNpbmNsdWRlIDxzeXMvc24vcm91dGVyLmg+CisjaW5jbHVkZSA8c3lzL2dyYXBoLmg+CisjaW5jbHVkZSA8YXNtL3h0YWxrL3hib3cuaD4KKworI2VuZGlmIC8qICFDT05GSUdfU0dJX0lQMjcgJiYgIUNPTkZJR19TR0lfSVAzNSAqLworCisjaWYgZGVmaW5lZChDT05GSUdfU0dJX0lQMjcpIHx8IGRlZmluZWQoQ09ORklHX1NHSV9JUDM1KQorI2luY2x1ZGUgPGFzbS9zbi9hZ2VudC5oPgorI2luY2x1ZGUgPGFzbS9hcmMvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vYXJjL2hpbnYuaD4KKyNpZiBkZWZpbmVkKENPTkZJR19TR0lfSU8pIHx8IGRlZmluZWQoQ09ORklHX1NHSV9JUDM1KQorLy8gVGhlIGhhY2sgZmlsZSBoYXMgdG8gYmUgYmVmb3JlIHZlY3RvciBhbmQgYWZ0ZXIgc24wX2ZydS4uLi4KKyNpbmNsdWRlIDxhc20vaGFjay5oPgorI2luY2x1ZGUgPGFzbS9zbi92ZWN0b3IuaD4KKyNpbmNsdWRlIDxhc20veHRhbGsveHRhbGsuaD4KKyNlbmRpZiAvKiBDT05GSUdfU0dJX0lPIHx8IENPTkZJR19TR0lfSVAzNSAqLworI2VuZGlmIC8qIENPTkZJR19TR0lfSVAyNyB8fCBDT05GSUdfU0dJX0lQMzUgKi8KKworI2RlZmluZSBLTENGR0lORk9fTUFHSUMJMHhiZWVkYmFiZQorCisjaWZkZWYgRlJVVEVTVAordHlwZWRlZiB1NjQga2xjb25mX29mZl90OworI2Vsc2UKK3R5cGVkZWYgczMyIGtsY29uZl9vZmZfdDsKKyNlbmRpZgorCisvKgorICogU29tZSBJTVBPUlRBTlQgT0ZGU0VUUy4gVGhlc2UgYXJlIHRoZSBvZmZzZXRzIG9uIGFsbCBOT0RFUy4KKyAqLworI2lmIDAKKyNkZWZpbmUgUkFNQkFTRSAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBUkNTU1BCX09GRiAgICAgICAgICAgICAweDEwMDAgLyogc2hpZnQgaXQgdG8gc3lzL2FyY3Mvc3BiLmggKi8KKworI2RlZmluZSBPRkZfSFdHUkFQSCAJCTAKKyNlbmRpZgorCisjZGVmaW5lCU1BWF9NT0RVTEVfSUQJCTI1NQorI2RlZmluZSBTSVpFX1BBRAkJNDA5NiAvKiA0ayBwYWRkaW5nIGZvciBzdHJ1Y3R1cmVzICovCisvKgorICogMSBOT0RFIGJyZCwgMiBSb3V0ZXIgYnJkICgxIDhwLCAxIG1ldGEpLCA2IFdpZGdldHMsCisgKiAyIE1pZHBsYW5lcyBhc3N1bWluZyBubyBwY2kgY2FyZCBjYWdlcworICovCisjZGVmaW5lIE1BWF9TTE9UU19QRVJfTk9ERQkoMSArIDIgKyA2ICsgMikKKworLyogWFhYIGlmIGVhY2ggbm9kZSBpcyBndXJhbnRlZWQgdG8gaGF2ZSBzb21lIG1lbW9yeSAqLworCisjZGVmaW5lIE1BWF9QQ0lfREVWUwkJOAorCisvKiBsYm9hcmRfdC0+YnJkX2ZsYWdzIGZpZWxkcyAqLworLyogQWxsIGJpdHMgaW4gdGhpcyBmaWVsZCBhcmUgY3VycmVudGx5IHVzZWQuIFRyeSB0aGUgcGFkIGZpZWxkcyBpZgorICAgeW91IG5lZWQgbW9yZSBmbGFnIGJpdHMgKi8KKworI2RlZmluZSBFTkFCTEVfQk9BUkQgCQkweDAxCisjZGVmaW5lIEZBSUxFRF9CT0FSRCAgCQkweDAyCisjZGVmaW5lIERVUExJQ0FURV9CT0FSRCAJMHgwNCAgICAvKiBCb2FyZHMgbGlrZSBtaWRwbGFuZXMvcm91dGVycyB3aGljaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJICAgYXJlIGRpc2NvdmVyZWQgdHdpY2UuIFVzZSBvbmUgb2YgdGhlbSAqLworI2RlZmluZSBWSVNJVEVEX0JPQVJECQkweDA4CS8qIFVzZWQgZm9yIGNvbXBhY3QgaHViIG51bWJlcmluZy4gKi8KKyNkZWZpbmUgTE9DQUxfTUFTVEVSX0lPNgkweDEwIAkvKiBtYXN0ZXIgaW82IGZvciB0aGF0IG5vZGUgKi8KKyNkZWZpbmUgR0xPQkFMX01BU1RFUl9JTzYJMHgyMAorI2RlZmluZSBUSElSRF9OSUNfUFJFU0VOVCAJMHg0MCAgCS8qIGZvciBmdXR1cmUgdXNlICovCisjZGVmaW5lIFNFQ09ORF9OSUNfUFJFU0VOVCAJMHg4MCAJLyogYWRkb25zIGxpa2UgTUlPIGFyZSBwcmVzZW50ICovCisKKy8qIGtsaW5mby0+ZmxhZ3MgZmllbGRzICovCisKKyNkZWZpbmUgS0xJTkZPX0VOQUJMRSAJCTB4MDEgICAgLyogVGhpcyBjb21wb25lbnQgaXMgZW5hYmxlZCAqLworI2RlZmluZSBLTElORk9fRkFJTEVEICAgCTB4MDIgCS8qIFRoaXMgY29tcG9uZW50IGZhaWxlZCAqLworI2RlZmluZSBLTElORk9fREVWSUNFICAgCTB4MDQgCS8qIFRoaXMgY29tcG9uZW50IGlzIGEgZGV2aWNlICovCisjZGVmaW5lIEtMSU5GT19WSVNJVEVEICAJMHgwOCAJLyogVGhpcyBjb21wb25lbnQgaGFzIGJlZW4gdmlzaXRlZCAqLworI2RlZmluZSBLTElORk9fQ09OVFJPTExFUiAgIAkweDEwIAkvKiBUaGlzIGNvbXBvbmVudCBpcyBhIGRldmljZSBjb250cm9sbGVyICovCisjZGVmaW5lIEtMSU5GT19JTlNUQUxMICAgCTB4MjAgIAkvKiBJbnN0YWxsIGEgZHJpdmVyICovCisjZGVmaW5lCUtMSU5GT19IRUFETEVTUwkJMHg0MAkvKiBIZWFkbGVzcyAob3IgaHVibGVzcykgY29tcG9uZW50ICovCisjZGVmaW5lIElTX0NPTlNPTEVfSU9DMyhpKQkoKCgoa2xpbmZvX3QgKilpKS0+ZmxhZ3MpICYgS0xJTkZPX0lOU1RBTEwpCisKKyNkZWZpbmUgR0IyCQkweDgwMDAwMDAwCisKKyNkZWZpbmUgTUFYX1JTVl9QVFJTCTMyCisKKy8qIFN0cnVjdHVyZXMgdG8gbWFuYWdlIHZhcmlvdXMgZGF0YSBzdG9yYWdlIGFyZWFzICovCisvKiBUaGUgbnVtYmVycyBtdXN0IGJlIGNvbnRpZ3VvdXMgc2luY2UgdGhlIGFycmF5IGluZGV4IGkKKyAgIGlzIHVzZWQgaW4gdGhlIGNvZGUgdG8gYWxsb2NhdGUgdmFyaW91cyBhcmVhcy4KKyovCisKKyNkZWZpbmUgQk9BUkRfU1RSVUNUIAkJMAorI2RlZmluZSBDT01QT05FTlRfU1RSVUNUIAkxCisjZGVmaW5lIEVSUklORk9fU1RSVUNUIAkJMgorI2RlZmluZSBLTE1BTExPQ19UWVBFX01BWCAJKEVSUklORk9fU1RSVUNUICsgMSkKKyNkZWZpbmUgREVWSUNFX1NUUlVDVCAJCTMKKworCit0eXBlZGVmIHN0cnVjdCBjb25zb2xlX3MgeworI2lmIGRlZmluZWQoQ09ORklHX1NHSV9JTykJLyogRklYTUUgKi8KKwlfX3BzdW5zaWduZWRfdCAJdWFydF9iYXNlOworCV9fcHN1bnNpZ25lZF90IAljb25maWdfYmFzZTsKKwlfX3BzdW5zaWduZWRfdCAJbWVtb3J5X2Jhc2U7CisjZWxzZQorCXVuc2lnbmVkIGxvbmcgCXVhcnRfYmFzZTsKKwl1bnNpZ25lZCBsb25nIAljb25maWdfYmFzZTsKKwl1bnNpZ25lZCBsb25nIAltZW1vcnlfYmFzZTsKKyNlbmRpZgorCXNob3J0CQliYXVkOworCXNob3J0CQlmbGFnOworCWludAkJdHlwZTsKKwluYXNpZF90CQluYXNpZDsKKwljaGFyCQl3aWQ7CisJY2hhciAJCW5wY2k7CisJbmljX3QJCWJhc2Vpb19uaWM7Cit9IGNvbnNvbGVfdDsKKwordHlwZWRlZiBzdHJ1Y3Qga2xjX21hbGxvY19oZHIgeworICAgICAgICBrbGNvbmZfb2ZmX3Qga21fYmFzZTsKKyAgICAgICAga2xjb25mX29mZl90IGttX2xpbWl0OworICAgICAgICBrbGNvbmZfb2ZmX3Qga21fY3VycmVudDsKK30ga2xjX21hbGxvY19oZHJfdDsKKworLyogRnVuY3Rpb25zL21hY3JvcyBuZWVkZWQgdG8gdXNlIHRoaXMgc3RydWN0dXJlICovCisKK3R5cGVkZWYgc3RydWN0IGtsX2NvbmZpZ19oZHIgeworCXU2NAkJY2hfbWFnaWM7CS8qIHNldCB0aGlzIHRvIEtMQ0ZHSU5GT19NQUdJQyAqLworCXUzMgkJY2hfdmVyc2lvbjsgICAgLyogc3RydWN0dXJlIHZlcnNpb24gbnVtYmVyICovCisJa2xjb25mX29mZl90CWNoX21hbGxvY19oZHJfb2ZmOyAvKiBvZmZzZXQgb2YgY2hfbWFsbG9jX2hkciAqLworCWtsY29uZl9vZmZfdAljaF9jb25zX29mZjsgICAgICAgLyogb2Zmc2V0IG9mIGNoX2NvbnMgKi8KKwlrbGNvbmZfb2ZmX3QJY2hfYm9hcmRfaW5mbzsJLyogdGhlIGxpbmsgbGlzdCBvZiBib2FyZHMgKi8KKwljb25zb2xlX3QJY2hfY29uc19pbmZvOwkvKiBhZGRyZXNzIGluZm8gb2YgdGhlIGNvbnNvbGUgKi8KKwlrbGNfbWFsbG9jX2hkcl90IGNoX21hbGxvY19oZHJbS0xNQUxMT0NfVFlQRV9NQVhdOworCWNvbmZpZGVuY2VfdAljaF9zd19iZWxpZWY7CS8qIGNvbmZpZGVuY2UgdGhhdCBzb2Z0d2FyZSBpcyBiYWQqLworCWNvbmZpZGVuY2VfdAljaF9zbjBuZXRfYmVsaWVmOyAvKiBjb25maWRlbmNlIHRoYXQgc24wbmV0IGlzIGJhZCAqLworfSBrbF9jb25maWdfaGRyX3Q7CisKKworI2RlZmluZSBLTF9DT05GSUdfSERSKF9uYXNpZCkgCSgoa2xfY29uZmlnX2hkcl90ICopKEtMQ09ORklHX0FERFIoX25hc2lkKSkpCisjaWYgMAorI2RlZmluZSBLTF9DT05GSUdfTUFMTE9DX0hEUihfbmFzaWQpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEtMX0NPTkZJR19IRFIoX25hc2lkKS0+Y2hfbWFsbG9jX2hkcikKKyNlbmRpZgorI2RlZmluZSBLTF9DT05GSUdfSU5GT19PRkZTRVQoX25hc2lkKQkJCQkJXAorICAgICAgICAoS0xfQ09ORklHX0hEUihfbmFzaWQpLT5jaF9ib2FyZF9pbmZvKQorI2RlZmluZSBLTF9DT05GSUdfSU5GT19TRVRfT0ZGU0VUKF9uYXNpZCwgX29mZikJCQkJXAorICAgICAgICAoS0xfQ09ORklHX0hEUihfbmFzaWQpLT5jaF9ib2FyZF9pbmZvID0gKF9vZmYpKQorCisjZGVmaW5lIEtMX0NPTkZJR19JTkZPKF9uYXNpZCkgCQkJCQkJXAorICAgICAgICAobGJvYXJkX3QgKikoKEtMX0NPTkZJR19IRFIoX25hc2lkKS0+Y2hfYm9hcmRfaW5mbykgPwkJXAorCSBOT0RFX09GRlNFVF9UT19LMSgoX25hc2lkKSwgS0xfQ09ORklHX0hEUihfbmFzaWQpLT5jaF9ib2FyZF9pbmZvKSA6IFwKKwkgMCkKKyNkZWZpbmUgS0xfQ09ORklHX01BR0lDKF9uYXNpZCkJCShLTF9DT05GSUdfSERSKF9uYXNpZCktPmNoX21hZ2ljKQorCisjZGVmaW5lIEtMX0NPTkZJR19DSEVDS19NQUdJQyhfbmFzaWQpCQkJCQlcCisgICAgICAgIChLTF9DT05GSUdfSERSKF9uYXNpZCktPmNoX21hZ2ljID09IEtMQ0ZHSU5GT19NQUdJQykKKworI2RlZmluZSBLTF9DT05GSUdfSERSX0lOSVRfTUFHSUMoX25hc2lkKQlcCisgICAgICAgICAgICAgICAgICAoS0xfQ09ORklHX0hEUihfbmFzaWQpLT5jaF9tYWdpYyA9IEtMQ0ZHSU5GT19NQUdJQykKKworLyogLS0tIE5ldyBNYWNyb3MgZm9yIHRoZSBjaGFuZ2VkIGtsX2NvbmZpZ19oZHJfdCBzdHJ1Y3R1cmUgLS0tICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19TR0lfSU8pCisjZGVmaW5lIFBUUl9DSF9NQUxMT0NfSERSKF9rKSAgICgoa2xjX21hbGxvY19oZHJfdCAqKVwKKwkJCSgoX19wc3Vuc2lnbmVkX3QpX2sgKyAoX2stPmNoX21hbGxvY19oZHJfb2ZmKSkpCisjZWxzZQorI2RlZmluZSBQVFJfQ0hfTUFMTE9DX0hEUihfaykgICAoKGtsY19tYWxsb2NfaGRyX3QgKilcCisJCQkodW5zaWduZWQgbG9uZylfayArIChfay0+Y2hfbWFsbG9jX2hkcl9vZmYpKSkKKyNlbmRpZgorCisjZGVmaW5lIEtMX0NPTkZJR19DSF9NQUxMT0NfSERSKF9uKSAgIFBUUl9DSF9NQUxMT0NfSERSKEtMX0NPTkZJR19IRFIoX24pKQorCisjaWYgZGVmaW5lZChDT05GSUdfU0dJX0lPKQorI2RlZmluZSBQVFJfQ0hfQ09OU19JTkZPKF9rKQkoKGNvbnNvbGVfdCAqKVwKKwkJCSgoX19wc3Vuc2lnbmVkX3QpX2sgKyAoX2stPmNoX2NvbnNfb2ZmKSkpCisjZWxzZQorI2RlZmluZSBQVFJfQ0hfQ09OU19JTkZPKF9rKQkoKGNvbnNvbGVfdCAqKVwKKwkJCSgodW5zaWduZWQgbG9uZylfayArIChfay0+Y2hfY29uc19vZmYpKSkKKyNlbmRpZgorCisjZGVmaW5lIEtMX0NPTkZJR19DSF9DT05TX0lORk8oX24pICAgUFRSX0NIX0NPTlNfSU5GTyhLTF9DT05GSUdfSERSKF9uKSkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEtMX0NPTkZJR19JTkZPX1NUQVJUKF9uYXNpZCkJXAorICAgICAgICAoa2xjb25mX29mZl90KShLTENPTkZJR19PRkZTRVQoX25hc2lkKSArIHNpemVvZihrbF9jb25maWdfaGRyX3QpKQorCisjZGVmaW5lIEtMX0NPTkZJR19CT0FSRF9OQVNJRChfYnJkKQkoKF9icmQpLT5icmRfbmFzaWQpCisjZGVmaW5lIEtMX0NPTkZJR19CT0FSRF9TRVRfTkVYVChfYnJkLCBfb2ZmKQkoKF9icmQpLT5icmRfbmV4dCA9IChfb2ZmKSkKKworI2RlZmluZSBLTF9DT05GSUdfRFVQTElDQVRFX0JPQVJEKF9icmQpCSgoX2JyZCktPmJyZF9mbGFncyAmIERVUExJQ0FURV9CT0FSRCkKKworI2RlZmluZSBYQk9XX1BPUlRfVFlQRV9IVUIoX3hib3dwLCBfbGluaykgCVwKKyAgICAgICAgICAgICAgICgoX3hib3dwKS0+eGJvd19wb3J0X2luZm9bKF9saW5rKSAtIEJBU0VfWEJPV19QT1JUXS5wb3J0X2ZsYWcgJiBYQk9XX1BPUlRfSFVCKQorI2RlZmluZSBYQk9XX1BPUlRfVFlQRV9JTyhfeGJvd3AsIF9saW5rKSAJXAorICAgICAgICAgICAgICAgKChfeGJvd3ApLT54Ym93X3BvcnRfaW5mb1soX2xpbmspIC0gQkFTRV9YQk9XX1BPUlRdLnBvcnRfZmxhZyAmIFhCT1dfUE9SVF9JTykKKworI2RlZmluZSBYQk9XX1BPUlRfSVNfRU5BQkxFRChfeGJvd3AsIF9saW5rKSAJXAorICAgICAgICAgICAgICAgKChfeGJvd3ApLT54Ym93X3BvcnRfaW5mb1soX2xpbmspIC0gQkFTRV9YQk9XX1BPUlRdLnBvcnRfZmxhZyAmIFhCT1dfUE9SVF9FTkFCTEUpCisjZGVmaW5lIFhCT1dfUE9SVF9OQVNJRChfeGJvd3AsIF9saW5rKSAJXAorICAgICAgICAgICAgICAgKChfeGJvd3ApLT54Ym93X3BvcnRfaW5mb1soX2xpbmspIC0gQkFTRV9YQk9XX1BPUlRdLnBvcnRfbmFzaWQpCisKKyNkZWZpbmUgWEJPV19QT1JUX0lPICAgICAweDEKKyNkZWZpbmUgWEJPV19QT1JUX0hVQiAgICAweDIKKyNkZWZpbmUgWEJPV19QT1JUX0VOQUJMRSAweDQKKworI2RlZmluZQlTTjBfUE9SVF9GRU5DRV9TSEZUCTAKKyNkZWZpbmUJU04wX1BPUlRfRkVOQ0VfTUFTSwkoMSA8PCBTTjBfUE9SVF9GRU5DRV9TSEZUKQorCisvKgorICogVGhlIEtMQ09ORklHIGFyZWEgaXMgb3JnYW5pemVkIGFzIGEgTElOS0VEIExJU1Qgb2YgQk9BUkRzLiBBIEJPQVJECisgKiBjYW4gYmUgZWl0aGVyICdMT0NBTCcgb3IgJ1JFTU9URScuIExPQ0FMIG1lYW5zIGl0IGlzIGF0dGFjaGVkIHRvCisgKiB0aGUgTE9DQUwvY3VycmVudCBOT0RFLiBSRU1PVEUgbWVhbnMgaXQgaXMgYXR0YWNoZWQgdG8gYSBkaWZmZXJlbnQKKyAqIG5vZGUuKFRCRCAtIE5lZWQgYSB3YXkgdG8gdHJlYXQgUk9VVEVSIGJvYXJkcy4pCisgKgorICogVGhlcmUgYXJlIDIgZGlmZmVyZW50IHN0cnVjdHVyZXMgdG8gcmVwcmVzZW50IHRoZXNlIGJvYXJkcyAtCisgKiBsYm9hcmQgLSBMb2NhbCBib2FyZCwgcmJvYXJkIC0gcmVtb3RlIGJvYXJkLiBUaGVzZSAyIHN0cnVjdHVyZXMKKyAqIGNhbiBiZSBhcmJpdHJhcmlseSBtaXhlZCBpbiB0aGUgTElOS0VEIExJU1Qgb2YgQk9BUkRzLiAoUmVmZXIKKyAqIEZpZ3VyZSBiZWxvdykuIFRoZSBmaXJzdCBieXRlIG9mIHRoZSByYm9hcmQgb3IgbGJvYXJkIHN0cnVjdHVyZQorICogaXMgdXNlZCB0byBmaW5kIG91dCBpdHMgdHlwZSAtIG5vIHVuaW9ucyBhcmUgdXNlZC4KKyAqIElmIGl0IGlzIGEgbGJvYXJkLCB0aGVuIHRoZSBjb25maWcgaW5mbyBvZiB0aGlzIGJvYXJkIHdpbGwgYmUgZm91bmQKKyAqIG9uIHRoZSBsb2NhbCBub2RlLiAoTE9DQUwgTk9ERSBCQVNFICsgb2Zmc2V0IHZhbHVlIGdpdmVzIHBvaW50ZXIgdG8KKyAqIHRoZSBzdHJ1Y3R1cmUuCisgKiBJZiBpdCBpcyBhIHJib2FyZCwgdGhlIGxvY2FsIHN0cnVjdHVyZSBjb250YWlucyB0aGUgbm9kZSBudW1iZXIKKyAqIGFuZCB0aGUgb2Zmc2V0IG9mIHRoZSBiZWdpbm5pbmcgb2YgdGhlIExJTktFRCBMSVNUIG9uIHRoZSByZW1vdGUgbm9kZS4KKyAqIFRoZSBkZXRhaWxzIG9mIHRoZSBoYXJkd2FyZSBvbiBhIHJlbW90ZSBub2RlIGNhbiBiZSBidWlsdCBsb2NhbGx5LAorICogaWYgcmVxdWlyZWQsIGJ5IHJlYWRpbmcgdGhlIExJTktFRCBMSVNUIG9uIHRoZSByZW1vdGUgbm9kZSBhbmQKKyAqIGlnbm9yaW5nIGFsbCB0aGUgcmJvYXJkcyBvbiB0aGF0IG5vZGUuCisgKgorICogVGhlIGxvY2FsIG5vZGUgdXNlcyB0aGUgUkVNT1RFIE5PREUgTlVNQkVSICsgT0ZGU0VUIHRvIHBvaW50IHRvIHRoZQorICogRmlyc3QgYm9hcmQgaW5mbyBvbiB0aGUgcmVtb3RlIG5vZGUuIFRoZSByZW1vdGUgbm9kZSBsaXN0IGlzCisgKiB0cmF2ZXJzZWQgYXMgdGhlIGxvY2FsIGxpc3QsIHVzaW5nIHRoZSBSRU1PVEUgQkFTRSBBRERSRVNTIGFuZCBub3QKKyAqIHRoZSBsb2NhbCBiYXNlIGFkZHJlc3MgYW5kIGlnbm9yaW5nIGFsbCByYm9hcmQgdmFsdWVzLgorICoKKyAqCisgS0xDT05GSUcKKworICstLS0tLS0tLS0tLS0rICAgICAgKy0tLS0tLS0tLS0tLSsgICAgICArLS0tLS0tLS0tLS0tKyAgICAgICstLS0tLS0tLS0tLS0rCisgfCAgbGJvYXJkICAgIHwgICstLT58ICAgbGJvYXJkICAgfCAgKy0tPnwgICByYm9hcmQgICB8ICArLS0+fCAgIGxib2FyZCAgIHwKKyArLS0tLS0tLS0tLS0tKyAgfCAgICstLS0tLS0tLS0tLS0rICB8ICAgKy0tLS0tLS0tLS0tLSsgIHwgICArLS0tLS0tLS0tLS0tKworIHwgYm9hcmQgaW5mbyB8ICB8ICAgfCBib2FyZCBpbmZvIHwgIHwgICB8ZXJyaW5mbyxicHRyfCAgfCAgIHwgYm9hcmQgaW5mbyB8CisgKy0tLS0tLS0tLS0tLSsgIHwgICArLS0tLS0tLS0tLS0tKyAgfCAgICstLS0tLS0tLS0tLS0rICB8ICAgKy0tLS0tLS0tLS0tLSsKKyB8IG9mZnNldCAgICAgfC0tKyAgIHwgIG9mZnNldCAgICB8LS0rICAgfCAgb2Zmc2V0ICAgIHwtLSsgICB8b2Zmc2V0PU5VTEwgfAorICstLS0tLS0tLS0tLS0rICAgICAgKy0tLS0tLS0tLS0tLSsgICAgICArLS0tLS0tLS0tLS0tKyAgICAgICstLS0tLS0tLS0tLS0rCisKKworICstLS0tLS0tLS0tLS0rCisgfCBib2FyZCBpbmZvIHwKKyArLS0tLS0tLS0tLS0tKyAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgfCBjb21wdCAxICAgIHwtLS0tLS0+fCB0eXBlLCByZXYsIGRpYWdpbmZvLCBzaXplIC4uLiAgfCAgKENQVSkKKyArLS0tLS0tLS0tLS0tKyAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgfCBjb21wdCAyICAgIHwtLSsKKyArLS0tLS0tLS0tLS0tKyAgfCAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgfCAgLi4uICAgICAgIHwgICstLS0+fCB0eXBlLCByZXYsIGRpYWdpbmZvLCBzaXplIC4uLiAgfCAgKE1FTV9CQU5LKQorICstLS0tLS0tLS0tLS0rICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyB8IGVycmluZm8gICAgfC0tKworICstLS0tLS0tLS0tLS0rICB8ICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgKy0tLT58ci9sIGJyZCBlcnJpbmZvLGNvbXB0IGVyciBmbGFncyB8CisgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisgKgorICogRWFjaCBCT0FSRCBjb25zaXN0cyBvZiBDT01QT05FTlRzIGFuZCB0aGUgQk9BUkQgc3RydWN0dXJlIGhhcworICogcG9pbnRlcnMgKG9mZnNldHMpIHRvIGl0cyBDT01QT05FTlQgc3RydWN0dXJlLgorICogVGhlIENPTVBPTkVOVCBzdHJ1Y3R1cmUgaGFzIHZlcnNpb24gaW5mbywgc2l6ZSBhbmQgc3BlZWQgaW5mbywgcmV2aXNpb24sCisgKiBlcnJvciBpbmZvIGFuZCB0aGUgTklDIGluZm8uIFRoaXMgc3RydWN0dXJlIGNhbiBhY2NvbW1vZGF0ZSBhbnkKKyAqIEJPQVJEIHdpdGggYXJiaXRyYXJ5IENPTVBPTkVOVCBjb21wb3NpdGlvbi4KKyAqCisgKiBUaGUgRVJST1JJTkZPIHBhcnQgb2YgZWFjaCBCT0FSRCBoYXMgZXJyb3IgaW5mb3JtYXRpb24KKyAqIHRoYXQgZGVzY3JpYmVzIGVycm9ycyBhYm91dCB0aGUgQk9BUkQgaXRzZWxmLiBJdCBhbHNvIGhhcyBmbGFncyB0bworICogaW5kaWNhdGUgdGhlIENPTVBPTkVOVChzKSBvbiB0aGUgYm9hcmQgdGhhdCBoYXZlIGVycm9ycy4gVGhlIGVycm9yCisgKiBpbmZvcm1hdGlvbiBzcGVjaWZpYyB0byB0aGUgQ09NUE9ORU5UIGlzIHByZXNlbnQgaW4gdGhlIHJlc3BlY3RpdmUKKyAqIENPTVBPTkVOVCBzdHJ1Y3R1cmUuCisgKgorICogVGhlIEVSUk9SSU5GTyBzdHJ1Y3R1cmUgaXMgYWxzbyB0cmVhdGVkIGxpa2UgYSBDT01QT05FTlQsIGllLiB0aGUKKyAqIEJPQVJEIGhhcyBwb2ludGVycyhvZmZzZXQpIHRvIHRoZSBFUlJPUklORk8gc3RydWN0dXJlLiBUaGUgcmJvYXJkCisgKiBzdHJ1Y3R1cmUgYWxzbyBoYXMgYSBwb2ludGVyIHRvIHRoZSBFUlJPUklORk8gc3RydWN0dXJlLiBUaGlzIGlzCisgKiB0aGUgcGxhY2UgdG8gc3RvcmUgRVJST1JJTkZPIGFib3V0IGEgUkVNT1RFIE5PREUsIGlmIHRoZSBIVUIgb24KKyAqIHRoYXQgTk9ERSBpcyBub3Qgd29ya2luZyBvciBpZiB0aGUgUkVNT1RFIE1FTU9SWSBpcyBCQUQuIEluIGNhc2VzIHdoZXJlCisgKiBvbmx5IHRoZSBDUFUgb2YgdGhlIFJFTU9URSBOT0RFIGlzIGRpc2FibGVkLCB0aGUgRVJST1JJTkZPIHBvaW50ZXIgY2FuCisgKiBiZSBhIE5PREUgTlVNQkVSLCBSRU1PVEUgT0ZGU0VUIGNvbWJpbmF0aW9uLCBwb2ludGluZyB0byBlcnJvciBpbmZvCisgKiB3aGljaCBpcyBwcmVzZW50IG9uIHRoZSBSRU1PVEUgTk9ERS4oVEJEKQorICogUkVNT1RFIEVSUklORk8gY2FuIGJlIHN0b3JlZCBvbiBhbnkgb2YgdGhlIG5lYXJlc3Qgbm9kZXMKKyAqIG9yIG9uIGFsbCB0aGUgbmVhcmVzdCBub2Rlcy4oVEJEKQorICogTGlrZSBCT0FSRCBzdHJ1Y3R1cmVzLCBSRU1PVEUgRVJSSU5GTyBzdHJ1Y3R1cmVzIGNhbiBiZSBidWlsdCBsb2NhbGx5CisgKiB1c2luZyB0aGUgcmJvYXJkIGVycmluZm8gcG9pbnRlci4KKyAqCisgKiBJbiBvcmRlciB0byBnZXQgdXNlZnVsIGluZm9ybWF0aW9uIGZyb20gdGhpcyBEYXRhIG9yZ2FuaXphdGlvbiwgYSBzZXQgb2YKKyAqIGludGVyZmFjZSByb3V0aW5lcyBhcmUgcHJvdmlkZWQgKFRCRCkuIFRoZSBpbXBvcnRhbnQgdGhpbmcgdG8gcmVtZW1iZXIgd2hpbGUKKyAqIG1hbmlwdWxhdGluZyB0aGUgc3RydWN0dXJlcywgaXMgdGhhdCwgdGhlIE5PREUgbnVtYmVyIGluZm9ybWF0aW9uIHNob3VsZAorICogYmUgdXNlZC4gSWYgdGhlIE5PREUgaXMgbm9uLXplcm8gKHJlbW90ZSkgdGhlbiBlYWNoIG9mZnNldCBzaG91bGQKKyAqIGJlIGFkZGVkIHRvIHRoZSBSRU1PVEUgQkFTRSBBRERSIGVsc2UgaXQgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSBMT0NBTCBCQVNFIEFERFIuCisgKiBUaGlzIGluY2x1ZGVzIG9mZnNldHMgZm9yIEJPQVJEUywgQ09NUE9ORU5UUyBhbmQgRVJST1JJTkZPLgorICoKKyAqIE5vdGUgdGhhdCB0aGVzZSBzdHJ1Y3R1cmVzIGRvIG5vdCBwcm92aWRlIG11Y2ggaW5mbyBhYm91dCBjb25uZWN0aXZpdHkuCisgKiBUaGF0IGluZm8gd2lsbCBiZSBwYXJ0IG9mIEhXR1JBUEgsIHdoaWNoIGlzIGFuIGV4dGVuc2lvbiBvZiB0aGUgY2ZnX3QKKyAqIGRhdGEgc3RydWN0dXJlLiAocmVmIElQMjdwcm9tL2NmZy5oKSBJdCBoYXMgdG8gYmUgZXh0ZW5kZWQgdG8gaW5jbHVkZQorICogdGhlIElPIHBhcnQgb2YgdGhlIE5ldHdvcmsoVEJEKS4KKyAqCisgKiBUaGUgZGF0YSBzdHJ1Y3R1cmVzIGJlbG93IGRlZmluZSB0aGUgYWJvdmUgY29uY2VwdHMuCisgKi8KKworLyoKKyAqIFZhbHVlcyBmb3IgQ1BVIHR5cGVzCisgKi8KKyNkZWZpbmUgS0xfQ1BVX1I0MDAwCQkweDEJLyogU3RhbmRhcmQgUjQwMDAgKi8KKyNkZWZpbmUgS0xfQ1BVX1RGUAkJMHgyCS8qIFRGUCBwcm9jZXNzb3IgKi8KKyNkZWZpbmUJS0xfQ1BVX1IxMDAwMAkJMHgzCS8qIFIxMDAwMCAoVDUpICovCisjZGVmaW5lIEtMX0NQVV9OT05FCQkoLTEpCS8qIG5vIGNwdSBwcmVzZW50IGluIHNsb3QgKi8KKworLyoKKyAqIElQMjcgQk9BUkQgY2xhc3NlcworICovCisKKyNkZWZpbmUgS0xDTEFTU19NQVNLCTB4ZjAKKyNkZWZpbmUgS0xDTEFTU19OT05FCTB4MDAKKyNkZWZpbmUgS0xDTEFTU19OT0RFCTB4MTAgICAgICAgICAgICAgLyogQ1BVLCBNZW1vcnkgYW5kIEhVQiBib2FyZCAqLworI2RlZmluZSBLTENMQVNTX0NQVQlLTENMQVNTX05PREUKKyNkZWZpbmUgS0xDTEFTU19JTwkweDIwICAgICAgICAgICAgIC8qIEJhc2VJTywgNCBjaCBTQ1NJLCBldGhlcm5ldCwgRkRESQorCQkJCQkgICAgYW5kIHRoZSBub24tZ3JhcGhpY3Mgd2lkZ2V0IGJvYXJkcyAqLworI2RlZmluZSBLTENMQVNTX1JPVVRFUgkweDMwICAgICAgICAgICAgIC8qIFJvdXRlciBib2FyZCAqLworI2RlZmluZSBLTENMQVNTX01JRFBMQU5FIDB4NDAgICAgICAgICAgICAvKiBXZSBuZWVkIHRvIHRyZWF0IHRoaXMgYXMgYSBib2FyZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbyB0aGF0IHdlIGNhbiByZWNvcmQgZXJyb3IgaW5mbyAqLworI2RlZmluZSBLTENMQVNTX0dGWAkweDUwCQkvKiBncmFwaGljcyBib2FyZHMgKi8KKworI2RlZmluZSBLTENMQVNTX1BTRVVET19HRlgJMHg2MAkvKiBIRFRWIHR5cGUgY2FyZHMgdGhhdCB1c2UgYSBnZngKKwkJCQkJICogaHcgaWZjIHRvIHh0YWxrIGFuZCBhcmUgbm90IGdmeAorCQkJCQkgKiBjbGFzcyBmb3Igc3cgcHVycG9zZXMgKi8KKworI2RlZmluZSBLTENMQVNTX01BWAk3CQkvKiBCdW1wIHRoaXMgaWYgYSBuZXcgQ0xBU1MgaXMgYWRkZWQgKi8KKyNkZWZpbmUgS0xUWVBFX01BWAkxMAkJLyogQnVtcCB0aGlzIGlmIGEgbmV3IENMQVNTIGlzIGFkZGVkICovCisKKyNkZWZpbmUgS0xDTEFTU19VTktOT1dOCTB4ZjAKKworI2RlZmluZSBLTENMQVNTKF94KSAoKF94KSAmIEtMQ0xBU1NfTUFTSykKKworLyoKKyAqIElQMjcgYm9hcmQgdHlwZXMKKyAqLworCisjZGVmaW5lIEtMVFlQRV9NQVNLCTB4MGYKKyNkZWZpbmUgS0xUWVBFX05PTkUJMHgwMAorI2RlZmluZSBLTFRZUEVfRU1QVFkJMHgwMAorCisjZGVmaW5lIEtMVFlQRV9XRUlSRENQVSAoS0xDTEFTU19DUFUgfCAweDApCisjZGVmaW5lIEtMVFlQRV9JUDI3CShLTENMQVNTX0NQVSB8IDB4MSkgLyogMiBDUFVzKFIxMEspIHBlciBib2FyZCAqLworCisjZGVmaW5lIEtMVFlQRV9XRUlSRElPCShLTENMQVNTX0lPICB8IDB4MCkKKyNkZWZpbmUgS0xUWVBFX0JBU0VJTwkoS0xDTEFTU19JTyAgfCAweDEpIC8qIElPQzMsIFN1cGVySU8sIEJyaWRnZSwgU0NTSSAqLworI2RlZmluZSBLTFRZUEVfSU82CUtMVFlQRV9CQVNFSU8gICAgICAgLyogQWRkaXRpb25hbCBuYW1lICovCisjZGVmaW5lIEtMVFlQRV80Q0hTQ1NJCShLTENMQVNTX0lPICB8IDB4MikKKyNkZWZpbmUgS0xUWVBFX01TQ1NJCUtMVFlQRV80Q0hTQ1NJICAgICAgLyogQWRkaXRpb25hbCBuYW1lICovCisjZGVmaW5lIEtMVFlQRV9FVEhFUk5FVAkoS0xDTEFTU19JTyAgfCAweDMpCisjZGVmaW5lIEtMVFlQRV9NRU5FVAlLTFRZUEVfRVRIRVJORVQgICAgIC8qIEFkZGl0aW9uYWwgbmFtZSAqLworI2RlZmluZSBLTFRZUEVfRkRESSAgCShLTENMQVNTX0lPICB8IDB4NCkKKyNkZWZpbmUgS0xUWVBFX1VOVVNFRAkoS0xDTEFTU19JTyAgfCAweDUpIC8qIFhYWCBVTlVTRUQgKi8KKyNkZWZpbmUgS0xUWVBFX0hBUk9MRCAgIChLTENMQVNTX0lPICB8IDB4NikgLyogUENJIFNIT0UgQk9YICovCisjZGVmaW5lIEtMVFlQRV9QQ0kJS0xUWVBFX0hBUk9MRAorI2RlZmluZSBLTFRZUEVfVk1FICAgICAgKEtMQ0xBU1NfSU8gIHwgMHg3KSAvKiBBbnkgM3JkIHBhcnR5IFZNRSBjYXJkICovCisjZGVmaW5lIEtMVFlQRV9NSU8gICAJKEtMQ0xBU1NfSU8gIHwgMHg4KQorI2RlZmluZSBLTFRZUEVfRkMgICAgCShLTENMQVNTX0lPICB8IDB4OSkKKyNkZWZpbmUgS0xUWVBFX0xJTkMgICAgCShLTENMQVNTX0lPICB8IDB4QSkKKyNkZWZpbmUgS0xUWVBFX1RQVSAgICAJKEtMQ0xBU1NfSU8gIHwgMHhCKSAvKiBUZW5zb3IgUHJvY2Vzc2luZyBVbml0ICovCisjZGVmaW5lIEtMVFlQRV9HU05fQSAgIAkoS0xDTEFTU19JTyAgfCAweEMpIC8qIE1haW4gR1NOIGJvYXJkICovCisjZGVmaW5lIEtMVFlQRV9HU05fQiAgIAkoS0xDTEFTU19JTyAgfCAweEQpIC8qIEF1eGlsaWFyeSBHU04gYm9hcmQgKi8KKworI2RlZmluZSBLTFRZUEVfR0ZYCShLTENMQVNTX0dGWCB8IDB4MCkgLyogdW5rbm93biBncmFwaGljcyB0eXBlICovCisjZGVmaW5lIEtMVFlQRV9HRlhfS09OQSAoS0xDTEFTU19HRlggfCAweDEpIC8qIEtPTkEgZ3JhcGhpY3Mgb24gSVAyNyAqLworI2RlZmluZSBLTFRZUEVfR0ZYX01HUkEgKEtMQ0xBU1NfR0ZYIHwgMHgzKSAvKiBNR1JBUyBncmFwaGljcyBvbiBJUDI3ICovCisKKyNkZWZpbmUgS0xUWVBFX1dFSVJEUk9VVEVSIChLTENMQVNTX1JPVVRFUiB8IDB4MCkKKyNkZWZpbmUgS0xUWVBFX1JPVVRFUiAgICAgKEtMQ0xBU1NfUk9VVEVSIHwgMHgxKQorI2RlZmluZSBLTFRZUEVfUk9VVEVSMiAgICBLTFRZUEVfUk9VVEVSCQkvKiBPYnNvbGV0ZSEgKi8KKyNkZWZpbmUgS0xUWVBFX05VTExfUk9VVEVSIChLTENMQVNTX1JPVVRFUiB8IDB4MikKKyNkZWZpbmUgS0xUWVBFX01FVEFfUk9VVEVSIChLTENMQVNTX1JPVVRFUiB8IDB4MykKKworI2RlZmluZSBLTFRZUEVfV0VJUkRNSURQTEFORSAoS0xDTEFTU19NSURQTEFORSB8IDB4MCkKKyNkZWZpbmUgS0xUWVBFX01JRFBMQU5FOCAgKEtMQ0xBU1NfTUlEUExBTkUgfCAweDEpIC8qIDggc2xvdCBiYWNrcGxhbmUgKi8KKyNkZWZpbmUgS0xUWVBFX01JRFBMQU5FICAgIEtMVFlQRV9NSURQTEFORTgKKyNkZWZpbmUgS0xUWVBFX1BCUklDS19YQk9XCShLTENMQVNTX01JRFBMQU5FIHwgMHgyKQorCisjZGVmaW5lIEtMVFlQRV9JT0JSSUNLCQkoS0xDTEFTU19JT0JSSUNLIHwgMHgwKQorI2RlZmluZSBLTFRZUEVfSUJSSUNLCQkoS0xDTEFTU19JT0JSSUNLIHwgMHgxKQorI2RlZmluZSBLTFRZUEVfUEJSSUNLCQkoS0xDTEFTU19JT0JSSUNLIHwgMHgyKQorI2RlZmluZSBLTFRZUEVfWEJSSUNLCQkoS0xDTEFTU19JT0JSSUNLIHwgMHgzKQorCisjZGVmaW5lIEtMVFlQRV9QQlJJQ0tfQlJJREdFCUtMVFlQRV9QQlJJQ0sKKworLyogVGhlIHZhbHVlIG9mIHR5cGUgc2hvdWxkIGJlIG1vcmUgdGhhbiA4IHNvIHRoYXQgaGludiBwcmludHMKKyAqIG91dCB0aGUgYm9hcmQgbmFtZSBmcm9tIHRoZSBOSUMgc3RyaW5nLiBGb3IgdmFsdWVzIGxlc3MgdGhhbgorICogOCB0aGUgbmFtZSBvZiB0aGUgYm9hcmQgbmVlZHMgdG8gYmUgaGFyZCBjb2RlZCBpbiBhIGZldyBwbGFjZXMuCisgKiBXaGVuIGJyaW5ndXAgc3RhcnRlZCBuaWMgbmFtZXMgaGFkIG5vdCBzdGFuZGFyZGl6ZWQgYW5kIHNvIHdlCisgKiBoYWQgdG8gaGFyZCBjb2RlLiAoRm9yIHBlb3BsZSBpbnRlcmVzdGVkIGluIGhpc3RvcnkuKQorICovCisjZGVmaW5lIEtMVFlQRV9YVEhEICAgCShLTENMQVNTX1BTRVVET19HRlggfCAweDkpCisKKyNkZWZpbmUgS0xUWVBFX1VOS05PV04JKEtMQ0xBU1NfVU5LTk9XTiB8IDB4ZikKKworI2RlZmluZSBLTFRZUEUoX3gpIAkoKF94KSAmIEtMVFlQRV9NQVNLKQorI2RlZmluZSBJU19NSU9fUFJFU0VOVChsKQkoKGwtPmJyZF90eXBlID09IEtMVFlQRV9CQVNFSU8pICYmIFwKKwkJCQkgKGwtPmJyZF9mbGFncyAmIFNFQ09ORF9OSUNfUFJFU0VOVCkpCisjZGVmaW5lIElTX01JT19JT0MzKGwsbikJKElTX01JT19QUkVTRU5UKGwpICYmIChuID4gMikpCisKKy8qCisgKiBib2FyZCBzdHJ1Y3R1cmVzCisgKi8KKworI2RlZmluZSBNQVhfQ09NUFRTX1BFUl9CUkQgMjQKKworI2RlZmluZSBMT0NBTF9CT0FSRCAxCisjZGVmaW5lIFJFTU9URV9CT0FSRCAyCisKKyNkZWZpbmUgTEJPQVJEX1NUUlVDVF9WRVJTSU9OIAkyCisKK3R5cGVkZWYgc3RydWN0IGxib2FyZF9zIHsKKwlrbGNvbmZfb2ZmX3QgCWJyZF9uZXh0OyAgICAgICAgIC8qIE5leHQgQk9BUkQgKi8KKwl1bnNpZ25lZCBjaGFyIAlzdHJ1Y3RfdHlwZTsgICAgICAvKiB0eXBlIG9mIHN0cnVjdHVyZSwgbG9jYWwgb3IgcmVtb3RlICovCisJdW5zaWduZWQgY2hhciAJYnJkX3R5cGU7ICAgICAgICAgLyogdHlwZStjbGFzcyAqLworCXVuc2lnbmVkIGNoYXIgCWJyZF9zdmVyc2lvbjsgICAgIC8qIHZlcnNpb24gb2YgdGhpcyBzdHJ1Y3R1cmUgKi8KKyAgICAgICAgdW5zaWduZWQgY2hhciAJYnJkX2JyZXZpc2lvbjsgICAgLyogYm9hcmQgcmV2aXNpb24gKi8KKyAgICAgICAgdW5zaWduZWQgY2hhciAJYnJkX3Byb212ZXI7ICAgICAgLyogYm9hcmQgcHJvbSB2ZXJzaW9uLCBpZiBhbnkgKi8KKyAJdW5zaWduZWQgY2hhciAJYnJkX2ZsYWdzOyAgICAgICAgLyogRW5hYmxlZCwgRGlzYWJsZWQgZXRjICovCisJdW5zaWduZWQgY2hhciAJYnJkX3Nsb3Q7ICAgICAgICAgLyogc2xvdCBudW1iZXIgKi8KKwl1bnNpZ25lZCBzaG9ydAlicmRfZGVidWdzdzsgICAgICAvKiBEZWJ1ZyBzd2l0Y2hlcyAqLworCW1vZHVsZWlkX3QJYnJkX21vZHVsZTsgICAgICAgLyogbW9kdWxlIHRvIHdoaWNoIGl0IGJlbG9uZ3MgKi8KKwlwYXJ0aWRfdCAJYnJkX3BhcnRpdGlvbjsgICAgLyogUGFydGl0aW9uIG51bWJlciAqLworICAgICAgICB1bnNpZ25lZCBzaG9ydCAJYnJkX2RpYWd2YWw7ICAgICAgLyogZGlhZ25vc3RpYyB2YWx1ZSAqLworICAgICAgICB1bnNpZ25lZCBzaG9ydCAJYnJkX2RpYWdwYXJtOyAgICAgLyogZGlhZ25vc3RpYyBwYXJhbWV0ZXIgKi8KKyAgICAgICAgdW5zaWduZWQgY2hhciAJYnJkX2ludmVudG9yeTsgICAgLyogaW52ZW50b3J5IGhpc3RvcnkgKi8KKyAgICAgICAgdW5zaWduZWQgY2hhciAJYnJkX251bWNvbXB0czsgICAgLyogTnVtYmVyIG9mIGNvbXBvbmVudHMgKi8KKyAgICAgICAgbmljX3QgICAgICAgICAJYnJkX25pYzsgICAgICAgICAgLyogTnVtYmVyIGluIENBTiAqLworCW5hc2lkX3QJCWJyZF9uYXNpZDsgICAgICAgIC8qIHBhc3NlZCBwYXJhbWV0ZXIgKi8KKwlrbGNvbmZfb2ZmX3QgCWJyZF9jb21wdHNbTUFYX0NPTVBUU19QRVJfQlJEXTsgLyogcG9pbnRlcnMgdG8gQ09NUE9ORU5UUyAqLworCWtsY29uZl9vZmZfdCAJYnJkX2VycmluZm87ICAgICAgLyogQm9hcmQncyBlcnJvciBpbmZvcm1hdGlvbiAqLworCXN0cnVjdCBsYm9hcmRfcyAqYnJkX3BhcmVudDsJICAvKiBMb2dpY2FsIHBhcmVudCBmb3IgdGhpcyBicmQgKi8KKwl2ZXJ0ZXhfaGRsX3QJYnJkX2dyYXBoX2xpbms7ICAgLyogdmVydGV4IGhkbCB0byBjb25uZWN0IGV4dGVybiBjb21wdHMgKi8KKwljb25maWRlbmNlX3QJYnJkX2NvbmZpZGVuY2U7CSAgLyogY29uZmlkZW5jZSB0aGF0IHRoZSBib2FyZCBpcyBiYWQgKi8KKwluYXNpZF90CQlicmRfb3duZXI7ICAgICAgICAvKiB3aG8gb3ducyB0aGlzIGJvYXJkICovCisJdW5zaWduZWQgY2hhciAJYnJkX25pY19mbGFnczsgICAgLyogVG8gaGFuZGxlIDggbW9yZSBOSUNzICovCisJY2hhcgkJYnJkX25hbWVbMzJdOworfSBsYm9hcmRfdDsKKworCisvKgorICoJTWFrZSBzdXJlIHdlIHBhc3MgYmFjayB0aGUgY2FsaWFzIHNwYWNlIGFkZHJlc3MgZm9yIGxvY2FsIGJvYXJkcy4KKyAqCWtsY29uZmlnIGJvYXJkIHRyYXZlcnNhbCBhbmQgZXJyb3Igc3RydWN0dXJlIGV4dHJhY3Rpb24gZGVmaW5lcy4KKyAqLworCisjZGVmaW5lIEJPQVJEX1NMT1QoX2JyZCkJKChfYnJkKS0+YnJkX3Nsb3QpCisKKyNkZWZpbmUgS0xDRl9DTEFTUyhfYnJkKQlLTENMQVNTKChfYnJkKS0+YnJkX3R5cGUpCisjZGVmaW5lIEtMQ0ZfVFlQRShfYnJkKQkJS0xUWVBFKChfYnJkKS0+YnJkX3R5cGUpCisjZGVmaW5lIEtMQ0ZfUkVNT1RFKF9icmQpICAJKCgoX2JyZCktPnN0cnVjdF90eXBlICYgTE9DQUxfQk9BUkQpID8gMCA6IDEpCisjZGVmaW5lIEtMQ0ZfTlVNX0NPTVBTKF9icmQpCSgoX2JyZCktPmJyZF9udW1jb21wdHMpCisjZGVmaW5lIEtMQ0ZfTU9EVUxFX0lEKF9icmQpCSgoX2JyZCktPmJyZF9tb2R1bGUpCisKKyNpZmRlZiBGUlVURVNUCisKKyNkZWZpbmUgS0xDRl9ORVhUKF9icmQpIAkJKChfYnJkKS0+YnJkX25leHQgPyAobGJvYXJkX3QgKikoKF9icmQpLT5icmRfbmV4dCk6ICBOVUxMKQorI2RlZmluZSBLTENGX0NPTVAoX2JyZCwgX25keCkgICAJKGtsaW5mb190ICopKChfYnJkKS0+YnJkX2NvbXB0c1soX25keCldKQorI2RlZmluZSBLTENGX0NPTVBfRVJST1IoX2JyZCwgX2NvbXApICAgCShfYnJkID0gX2JyZCAsIChfY29tcCktPmVycmluZm8pCisKKyNlbHNlCisKKyNkZWZpbmUgS0xDRl9ORVhUKF9icmQpIAlcCisgICAgICAgICgoX2JyZCktPmJyZF9uZXh0ID8gCVwKKwkgKGxib2FyZF90ICopKE5PREVfT0ZGU0VUX1RPX0sxKE5BU0lEX0dFVChfYnJkKSwgKF9icmQpLT5icmRfbmV4dCkpOlwKKwkgTlVMTCkKKyNkZWZpbmUgS0xDRl9DT01QKF9icmQsIF9uZHgpICAgXAorICAgICAgICAgICAgICAgIChrbGluZm9fdCAqKShOT0RFX09GRlNFVF9UT19LMShOQVNJRF9HRVQoX2JyZCksCVwKKwkJCQkJICAgICAgIChfYnJkKS0+YnJkX2NvbXB0c1soX25keCldKSkKKworI2RlZmluZSBLTENGX0NPTVBfRVJST1IoX2JyZCwgX2NvbXApCVwKKyAgICAgICAgICAgICAgIChOT0RFX09GRlNFVF9UT19LMShOQVNJRF9HRVQoX2JyZCksIChfY29tcCktPmVycmluZm8pKQorCisjZW5kaWYKKworI2RlZmluZSBLTENGX0NPTVBfVFlQRShfY29tcCkJKChfY29tcCktPnN0cnVjdF90eXBlKQorI2RlZmluZSBLTENGX0JSSURHRV9XX0lEKF9jb21wKQkoKF9jb21wKS0+cGh5c2lkKQkvKiBXaWRnZXQgSUQgKi8KKworCisKKy8qCisgKiBHZW5lcmljIGluZm8gc3RydWN0dXJlLiBUaGlzIHN0b3JlcyBjb21tb24gaW5mbyBhYm91dCBhCisgKiBjb21wb25lbnQuCisgKi8KKwordHlwZWRlZiBzdHJ1Y3Qga2xpbmZvX3MgeyAgICAgICAgICAgICAgICAgIC8qIEdlbmVyaWMgaW5mbyAqLworICAgICAgICB1bnNpZ25lZCBjaGFyICAgc3RydWN0X3R5cGU7ICAgICAgIC8qIHR5cGUgb2YgdGhpcyBzdHJ1Y3R1cmUgKi8KKyAgICAgICAgdW5zaWduZWQgY2hhciAgIHN0cnVjdF92ZXJzaW9uOyAgICAvKiB2ZXJzaW9uIG9mIHRoaXMgc3RydWN0dXJlICovCisgICAgICAgIHVuc2lnbmVkIGNoYXIgICBmbGFnczsgICAgICAgICAgICAvKiBFbmFibGVkLCBkaXNhYmxlZCBldGMgKi8KKyAgICAgICAgdW5zaWduZWQgY2hhciAgIHJldmlzaW9uOyAgICAgICAgIC8qIGNvbXBvbmVudCByZXZpc2lvbiAqLworICAgICAgICB1bnNpZ25lZCBzaG9ydCAgZGlhZ3ZhbDsgICAgICAgICAgLyogcmVzdWx0IG9mIGRpYWdub3N0aWNzICovCisgICAgICAgIHVuc2lnbmVkIHNob3J0ICBkaWFncGFybTsgICAgICAgICAvKiBkaWFnbm9zdGljIHBhcmFtZXRlciAqLworICAgICAgICB1bnNpZ25lZCBjaGFyICAgaW52ZW50b3J5OyAgICAgICAgLyogcHJldmlvdXMgaW52ZW50b3J5IHN0YXR1cyAqLworCW5pY190IAkJbmljOyAgICAgICAgICAgICAgLyogTVVzdCBiZSBhbGlnbmVkIHByb3Blcmx5ICovCisgICAgICAgIHVuc2lnbmVkIGNoYXIgICBwaHlzaWQ7ICAgICAgICAgICAvKiBwaHlzaWNhbCBpZCBvZiBjb21wb25lbnQgKi8KKyAgICAgICAgdW5zaWduZWQgaW50ICAgIHZpcnRpZDsgICAgICAgICAgIC8qIHZpcnR1YWwgaWQgYXMgc2VlbiBieSBzeXN0ZW0gKi8KKwl1bnNpZ25lZCBjaGFyCXdpZGlkOwkgICAgICAgICAgLyogV2lkZ2V0IGlkIC0gaWYgYXBwbGljYWJsZSAqLworCW5hc2lkX3QJCW5hc2lkOyAgICAgICAgICAgIC8qIG5vZGUgbnVtYmVyIC0gZnJvbSBwYXJlbnQgKi8KKwljaGFyCQlwYWQxOwkJICAvKiBwYWQgb3V0IHN0cnVjdHVyZS4gKi8KKwljaGFyCQlwYWQyOwkJICAvKiBwYWQgb3V0IHN0cnVjdHVyZS4gKi8KKwlDT01QT05FTlQJKmFyY3NfY29tcHQ7ICAgICAgLyogcHRyIHRvIHRoZSBhcmNzIHN0cnVjdCBmb3IgZWFzZSovCisgICAgICAgIGtsY29uZl9vZmZfdAllcnJpbmZvOyAgICAgICAgICAvKiBjb21wb25lbnQgc3BlY2lmaWMgZXJyb3JzICovCisgICAgICAgIHVuc2lnbmVkIHNob3J0ICBwYWQzOyAgICAgICAgICAgICAvKiBwY2kgZmllbGRzIGhhdmUgbW92ZWQgb3ZlciB0byAqLworICAgICAgICB1bnNpZ25lZCBzaG9ydCAgcGFkNDsgICAgICAgICAgICAgLyoga2xicmlfdCAqLworfSBrbGluZm9fdCA7CisKKyNkZWZpbmUgS0xDT05GSUdfSU5GT19FTkFCTEVEKF9pKQkoKF9pKS0+ZmxhZ3MgJiBLTElORk9fRU5BQkxFKQorLyoKKyAqIENvbXBvbmVudCBzdHJ1Y3R1cmVzLgorICogRm9sbG93aW5nIGFyZSB0aGUgY3VycmVudGx5IGlkZW50aWZpZWQgY29tcG9uZW50czoKKyAqIAlDUFUsIEhVQiwgTUVNX0JBTkssCisgKiAJWEJPVyhjb25zaXN0cyBvZiAxNiBXSURHRVRzLCBlYWNoIG9mIHdoaWNoIGNhbiBiZSBIVUIgb3IgR1JBUEhJQ1Mgb3IgQlJJREdFKQorICogCUJSSURHRSwgSU9DMywgU3VwZXJJTywgU0NTSSwgRkRESQorICogCVJPVVRFUgorICogCUdSQVBISUNTCisgKi8KKyNkZWZpbmUgS0xTVFJVQ1RfVU5LTk9XTgkwCisjZGVmaW5lIEtMU1RSVUNUX0NQVSAgCQkxCisjZGVmaW5lIEtMU1RSVUNUX0hVQiAgCQkyCisjZGVmaW5lIEtMU1RSVUNUX01FTUJOSyAJMworI2RlZmluZSBLTFNUUlVDVF9YQk9XIAkJNAorI2RlZmluZSBLTFNUUlVDVF9CUkkgCQk1CisjZGVmaW5lIEtMU1RSVUNUX0lPQzMgCQk2CisjZGVmaW5lIEtMU1RSVUNUX1BDSSAJCTcKKyNkZWZpbmUgS0xTVFJVQ1RfVk1FIAkJOAorI2RlZmluZSBLTFNUUlVDVF9ST1UJCTkKKyNkZWZpbmUgS0xTVFJVQ1RfR0ZYIAkJMTAKKyNkZWZpbmUgS0xTVFJVQ1RfU0NTSSAJCTExCisjZGVmaW5lIEtMU1RSVUNUX0ZEREkgCQkxMgorI2RlZmluZSBLTFNUUlVDVF9NSU8gCQkxMworI2RlZmluZSBLTFNUUlVDVF9ESVNLIAkJMTQKKyNkZWZpbmUgS0xTVFJVQ1RfVEFQRSAJCTE1CisjZGVmaW5lIEtMU1RSVUNUX0NEUk9NIAkJMTYKKyNkZWZpbmUgS0xTVFJVQ1RfSFVCX1VBUlQgCTE3CisjZGVmaW5lIEtMU1RSVUNUX0lPQzNFTkVUIAkxOAorI2RlZmluZSBLTFNUUlVDVF9JT0MzVUFSVCAJMTkKKyNkZWZpbmUgS0xTVFJVQ1RfVU5VU0VECQkyMCAvKiBYWFggVU5VU0VEICovCisjZGVmaW5lIEtMU1RSVUNUX0lPQzNQQ0tNICAgICAgIDIxCisjZGVmaW5lIEtMU1RSVUNUX1JBRCAgICAgICAgCTIyCisjZGVmaW5lIEtMU1RSVUNUX0hVQl9UVFkgICAgICAgIDIzCisjZGVmaW5lIEtMU1RSVUNUX0lPQzNfVFRZIAkyNAorCisvKiBFYXJseSBBY2Nlc3MgSU8gcHJvbXMgYXJlIGNvbXBhdGlibGUKKyAgIG9ubHkgd2l0aCBLTFNUUlVDVCB2YWx1ZXMgdXB0byAyNC4gKi8KKworI2RlZmluZSBLTFNUUlVDVF9GSUJFUkNIQU5ORUwgCTI1CisjZGVmaW5lIEtMU1RSVUNUX01PRF9TRVJJQUxfTlVNIDI2CisjZGVmaW5lIEtMU1RSVUNUX0lPQzNNUyAgICAgICAgIDI3CisjZGVmaW5lIEtMU1RSVUNUX1RQVSAgICAgICAgICAgIDI4CisjZGVmaW5lIEtMU1RSVUNUX0dTTl9BICAgICAgICAgIDI5CisjZGVmaW5lIEtMU1RSVUNUX0dTTl9CICAgICAgICAgIDMwCisjZGVmaW5lIEtMU1RSVUNUX1hUSEQgICAgICAgICAgIDMxCisKKy8qCisgKiBUaGVzZSBhcmUgdGhlIGluZGljZXMgb2YgdmFyaW91cyBjb21wb25lbnRzIHdpdGhpbiBhIGxib2FyZCBzdHJ1Y3R1cmUuCisgKi8KKworI2RlZmluZSBJUDI3X0NQVTBfSU5ERVggMAorI2RlZmluZSBJUDI3X0NQVTFfSU5ERVggMQorI2RlZmluZSBJUDI3X0hVQl9JTkRFWCAyCisjZGVmaW5lIElQMjdfTUVNX0lOREVYIDMKKworI2RlZmluZSBCQVNFSU9fQlJJREdFX0lOREVYIDAKKyNkZWZpbmUgQkFTRUlPX0lPQzNfSU5ERVggMQorI2RlZmluZSBCQVNFSU9fU0NTSTFfSU5ERVggMgorI2RlZmluZSBCQVNFSU9fU0NTSTJfSU5ERVggMworCisjZGVmaW5lIE1JRFBMQU5FX1hCT1dfSU5ERVggMAorI2RlZmluZSBST1VURVJfQ09NUE9ORU5UX0lOREVYIDAKKworI2RlZmluZSBDSDRTQ1NJX0JSSURHRV9JTkRFWCAwCisKKy8qIEluZm8gaG9sZGVycyBmb3IgdmFyaW91cyBoYXJkd2FyZSBjb21wb25lbnRzICovCisKK3R5cGVkZWYgdTY0ICpwY2lfdDsKK3R5cGVkZWYgdTY0ICp2bWViX3Q7Cit0eXBlZGVmIHU2NCAqdm1lZF90OwordHlwZWRlZiB1NjQgKmZkZGlfdDsKK3R5cGVkZWYgdTY0ICpzY3NpX3Q7Cit0eXBlZGVmIHU2NCAqbWlvX3Q7Cit0eXBlZGVmIHU2NCAqZ3JhcGhpY3NfdDsKK3R5cGVkZWYgdTY0ICpyb3V0ZXJfdDsKKworLyoKKyAqIFRoZSBwb3J0IGluZm8gaW4gaXAyN19jZmcgYXJlYSB0cmFuc2xhdGVzIHRvIGEgbGJvYXJ0X3QgaW4gdGhlCisgKiBLTENPTkZJRyBhcmVhLiBCdXQgc2luY2UgS0xDT05GSUcgZG9lcyBub3QgdXNlIHBvaW50ZXJzLCBsYm9hcnRfdAorICogaXMgc3RvcmVkIGluIHRlcm1zIG9mIGEgbmFzaWQgYW5kIGEgb2Zmc2V0IGZyb20gc3RhcnQgb2YgS0xDT05GSUcKKyAqIGFyZWEgIG9uIHRoYXQgbmFzaWQuCisgKi8KK3R5cGVkZWYgc3RydWN0IGtscG9ydF9zIHsKKwluYXNpZF90CQlwb3J0X25hc2lkOworCXVuc2lnbmVkIGNoYXIJcG9ydF9mbGFnOworCWtsY29uZl9vZmZfdAlwb3J0X29mZnNldDsKK30ga2xwb3J0X3Q7CisKKyNpZiAwCisvKgorICogVGhpcyBpcyB2ZXJ5IHNpbWlsYXIgdG8gdGhlIGtscG9ydF9zIGJ1dCBpbnN0ZWFkIG9mIGhhdmluZyBhIGNvbXBvbmFudAorICogb2Zmc2V0IGl0IGhhcyBhIGJvYXJkIG9mZnNldC4KKyAqLwordHlwZWRlZiBzdHJ1Y3Qga2x4Ym93X3BvcnRfcyB7CisJbmFzaWRfdAkJcG9ydF9uYXNpZDsKKwl1bnNpZ25lZCBjaGFyCXBvcnRfZmxhZzsKKwlrbGNvbmZfb2ZmX3QJYm9hcmRfb2Zmc2V0OworfSBrbHhib3dfcG9ydF90OworI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IGtsY3B1X3MgeyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ1BVICovCisJa2xpbmZvX3QgCWNwdV9pbmZvOworCXVuc2lnbmVkIHNob3J0IAljcHVfcHJpZDsJLyogUHJvY2Vzc29yIFBSSUQgdmFsdWUgKi8KKwl1bnNpZ25lZCBzaG9ydCAJY3B1X2ZwaXJyOwkvKiBGUFUgSVJSIHZhbHVlICovCisgICAgCXVuc2lnbmVkIHNob3J0IAljcHVfc3BlZWQ7CS8qIFNwZWVkIGluIE1IWiAqLworICAgIAl1bnNpZ25lZCBzaG9ydCAJY3B1X3NjYWNoZXN6OwkvKiBzZWNvbmRhcnkgY2FjaGUgc2l6ZSBpbiBNQiAqLworICAgIAl1bnNpZ25lZCBzaG9ydCAJY3B1X3NjYWNoZXNwZWVkOy8qIHNlY29uZGFyeSBjYWNoZSBzcGVlZCBpbiBNSHogKi8KK30ga2xjcHVfdCA7CisKKyNkZWZpbmUgQ1BVX1NUUlVDVF9WRVJTSU9OICAgMgorCit0eXBlZGVmIHN0cnVjdCBrbGh1Yl9zIHsJCQkvKiBIVUIgKi8KKwlrbGluZm9fdCAJaHViX2luZm87CisJdWludCAJCWh1Yl9mbGFnczsJCS8qIFBDRkdfSFVCX3h4eCBmbGFncyAqLworCWtscG9ydF90CWh1Yl9wb3J0OwkJLyogaHViIGlzIGNvbm5lY3RlZCB0byB0aGlzICovCisJbmljX3QJCWh1Yl9ib3hfbmljOwkJLyogbmljIG9mIGNvbnRhaW5pbmcgYm94ICovCisJa2xjb25mX29mZl90CWh1Yl9tZmdfbmljOwkJLyogTUZHIE5JQyBzdHJpbmcgKi8KKwl1NjQJCWh1Yl9zcGVlZDsJCS8qIFNwZWVkIG9mIGh1YiBpbiBIWiAqLworfSBrbGh1Yl90IDsKKwordHlwZWRlZiBzdHJ1Y3Qga2xodWJfdWFydF9zIHsJCQkvKiBIVUIgKi8KKwlrbGluZm9fdCAJaHVidWFydF9pbmZvOworCXVpbnQgCQlodWJ1YXJ0X2ZsYWdzOwkJLyogUENGR19IVUJfeHh4IGZsYWdzICovCisJbmljX3QJCWh1YnVhcnRfYm94X25pYzsJLyogbmljIG9mIGNvbnRhaW5pbmcgYm94ICovCit9IGtsaHViX3VhcnRfdCA7CisKKyNkZWZpbmUgTUVNT1JZX1NUUlVDVF9WRVJTSU9OICAgMgorCit0eXBlZGVmIHN0cnVjdCBrbG1lbWJua19zIHsJCQkvKiBNRU1PUlkgQkFOSyAqLworCWtsaW5mb190IAltZW1ibmtfaW5mbzsKKyAgICAJc2hvcnQgCQltZW1ibmtfbWVtc3o7CQkvKiBUb3RhbCBtZW1vcnkgaW4gbWVnYWJ5dGVzICovCisJc2hvcnQJCW1lbWJua19kaW1tX3NlbGVjdDsgLyogYmFuayB0byBwaHlzaWNhbCBhZGRyIG1hcHBpbmcqLworCXNob3J0CQltZW1ibmtfYm5rc3pbTURfTUVNX0JBTktTXTsgLyogTWVtb3J5IGJhbmsgc2l6ZXMgKi8KKwlzaG9ydAkJbWVtYm5rX2F0dHI7Cit9IGtsbWVtYm5rX3QgOworCisjZGVmaW5lIEtMQ09ORklHX01FTUJOS19TSVpFKF9pbmZvLCBfYmFuaykJXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX2luZm8pLT5tZW1ibmtfYm5rc3pbKF9iYW5rKV0pCisKKworI2RlZmluZSBNRU1CTktfUFJFTUlVTSAxCisjZGVmaW5lIEtMQ09ORklHX01FTUJOS19QUkVNSVVNKF9pbmZvLCBfYmFuaykJXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX2luZm8pLT5tZW1ibmtfYXR0ciAmIChNRU1CTktfUFJFTUlVTSA8PCAoX2JhbmspKSkKKworI2RlZmluZSBNQVhfU0VSSUFMX05VTV9TSVpFIDEwCisKK3R5cGVkZWYgc3RydWN0IGtsbW9kX3NlcmlhbF9udW1fcyB7CisgICAgICBrbGluZm9fdCAgICAgICAgc251bV9pbmZvOworICAgICAgdW5pb24geworICAgICAgICAgICAgICBjaGFyIHNudW1fc3RyW01BWF9TRVJJQUxfTlVNX1NJWkVdOworICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgICAgICAgc251bV9pbnQ7CisgICAgICB9IHNudW07Cit9IGtsbW9kX3NlcmlhbF9udW1fdDsKKworLyogTWFjcm9zIG5lZWRlZCB0byBhY2Nlc3Mgc2VyaWFsIG51bWJlciBzdHJ1Y3R1cmUgaW4gbGJvYXJkX3QuCisgICBIYXJkIGNvZGVkIHZhbHVlcyBhcmUgbmVjZXNzYXJ5IHNpbmNlIHdlIGNhbm5vdCB0cmVhdAorICAgc2VyaWFsIG51bWJlciBzdHJ1Y3QgYXMgYSBjb21wb25lbnQgd2l0aG91dCBsb3NpbmcgY29tcGF0aWJpbGl0eQorICAgYmV0d2VlbiBwcm9tIHZlcnNpb25zLiAqLworCisjZGVmaW5lIEdFVF9TTlVNX0NPTVAoX2wpIAkoKGtsbW9kX3NlcmlhbF9udW1fdCAqKVwKKwkJCQlLTENGX0NPTVAoX2wsIF9sLT5icmRfbnVtY29tcHRzKSkKKworI2RlZmluZSBNQVhfWEJPV19MSU5LUyAxNgorCit0eXBlZGVmIHN0cnVjdCBrbHhib3dfcyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBYQk9XICovCisJa2xpbmZvX3QgCXhib3dfaW5mbyA7CisgICAgCWtscG9ydF90CXhib3dfcG9ydF9pbmZvW01BWF9YQk9XX0xJTktTXSA7IC8qIE1vZHVsZSBudW1iZXIgKi8KKyAgICAgICAgaW50CQl4Ym93X21hc3Rlcl9odWJfbGluazsKKyAgICAgICAgLyogdHlwZSBvZiBicmQgY29ubmVjdGVkK2NvbXBvbmVudCBzdHJ1Y3QgcHRyK2ZsYWdzICovCit9IGtseGJvd190IDsKKworI2RlZmluZSBNQVhfUENJX1NMT1RTIDgKKwordHlwZWRlZiBzdHJ1Y3Qga2xwY2lfZGV2aWNlX3MgeworCXMzMglwY2lfZGV2aWNlX2lkOwkvKiAzMiBiaXRzIG9mIHZlbmRvci9kZXZpY2UgSUQuICovCisJczMyCXBjaV9kZXZpY2VfcGFkOwkvKiAzMiBiaXRzIG9mIHBhZGRpbmcuICovCit9IGtscGNpX2RldmljZV90OworCisjZGVmaW5lIEJSSURHRV9TVFJVQ1RfVkVSU0lPTgkyCisKK3R5cGVkZWYgc3RydWN0IGtsYnJpX3MgeyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQlJJREdFICovCisJa2xpbmZvX3QgCWJyaV9pbmZvIDsKKyAgICAJdW5zaWduZWQgY2hhcglicmlfZXByb21pbmZvIDsgICAgLyogSU82cHJvbSBjb25uZWN0ZWQgdG8gYnJpZGdlICovCisgICAgCXVuc2lnbmVkIGNoYXIJYnJpX2J1c3R5cGUgOyAgICAgIC8qIFBDSS9WTUUgQlVTIGJyaWRnZS9HSU8gKi8KKyAgICAJcGNpX3QgICAgCXBjaV9zcGVjaWZpYyAgOyAgICAvKiBQQ0kgQm9hcmQgY29uZmlnIGluZm8gKi8KKwlrbHBjaV9kZXZpY2VfdAlicmlfZGV2aWNlc1tNQVhfUENJX0RFVlNdIDsJLyogUENJIElEcyAqLworCWtsY29uZl9vZmZfdAlicmlfbWZnX25pYyA7Cit9IGtsYnJpX3QgOworCisjZGVmaW5lIE1BWF9JT0MzX1RUWQkyCisKK3R5cGVkZWYgc3RydWN0IGtsaW9jM19zIHsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElPQzMgKi8KKwlrbGluZm9fdCAJaW9jM19pbmZvIDsKKyAgICAJdW5zaWduZWQgY2hhcglpb2MzX3NzcmFtIDsgICAgICAgIC8qIEluZm8gYWJvdXQgc3NyYW0gKi8KKyAgICAJdW5zaWduZWQgY2hhcglpb2MzX252cmFtIDsgICAgICAgIC8qIEluZm8gYWJvdXQgbnZyYW0gKi8KKyAgICAJa2xpbmZvX3QJaW9jM19zdXBlcmlvIDsgICAgICAvKiBJbmZvIGFib3V0IHN1cGVyaW8gKi8KKwlrbGNvbmZfb2ZmX3QJaW9jM190dHlfb2ZmIDsKKwlrbGluZm9fdAlpb2MzX2VuZXQgOworCWtsY29uZl9vZmZfdAlpb2MzX2VuZXRfb2ZmIDsKKwlrbGNvbmZfb2ZmX3QJaW9jM19rYmRfb2ZmIDsKK30ga2xpb2MzX3QgOworCisjZGVmaW5lIE1BWF9WTUVfU0xPVFMgOAorCit0eXBlZGVmIHN0cnVjdCBrbHZtZWJfcyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBWTUUgQlJJREdFIC0gUENJIENUTFIgKi8KKwlrbGluZm9fdCAJdm1lYl9pbmZvIDsKKwl2bWViX3QJCXZtZWJfc3BlY2lmaWMgOworICAgIAlrbGNvbmZfb2ZmX3QgICAJdm1lYl9icmRpbmZvW01BWF9WTUVfU0xPVFNdICAgOyAgICAvKiBWTUUgQm9hcmQgY29uZmlnIGluZm8gKi8KK30ga2x2bWViX3QgOworCit0eXBlZGVmIHN0cnVjdCBrbHZtZWRfcyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBWTUUgREVWSUNFIC0gVk1FIEJPQVJEICovCisJa2xpbmZvX3QJdm1lZF9pbmZvIDsKKwl2bWVkX3QJCXZtZWRfc3BlY2lmaWMgOworICAgIAlrbGNvbmZfb2ZmX3QgICAJdm1lZF9icmRpbmZvW01BWF9WTUVfU0xPVFNdICAgOyAgICAvKiBWTUUgQm9hcmQgY29uZmlnIGluZm8gKi8KK30ga2x2bWVkX3QgOworCisjZGVmaW5lIFJPVVRFUl9WRUNUT1JfVkVSUwkyCisKKy8qIFhYWCAtIERvbid0IHdlIG5lZWQgdGhlIG51bWJlciBvZiBwb3J0cyBoZXJlPyE/ICovCit0eXBlZGVmIHN0cnVjdCBrbHJvdV9zIHsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJPVVRFUiAqLworCWtsaW5mb190IAlyb3VfaW5mbyA7CisJdWludAkJcm91X2ZsYWdzIDsgICAgICAgICAgIC8qIFBDRkdfUk9VVEVSX3h4eCBmbGFncyAqLworCW5pY190CQlyb3VfYm94X25pYyA7ICAgICAgICAgLyogbmljIG9mIHRoZSBjb250YWluaW5nIG1vZHVsZSAqLworICAgIAlrbHBvcnRfdCAJcm91X3BvcnRbTUFYX1JPVVRFUl9QT1JUUyArIDFdIDsgLyogYXJyYXkgaW5kZXggMSB0byA2ICovCisJa2xjb25mX29mZl90CXJvdV9tZmdfbmljIDsgICAgIC8qIE1GRyBOSUMgc3RyaW5nICovCisJdTY0CXJvdV92ZWN0b3I7CSAgLyogdmVjdG9yIGZyb20gbWFzdGVyIG5vZGUgKi8KK30ga2xyb3VfdCA7CisKKy8qCisgKiAgR3JhcGhpY3MgQ29udHJvbGxlci9EZXZpY2UKKyAqCisgKiAgKElQMjcvSU82KSBQcm9tIHZlcnNpb25zIDYuMTMgKGFuZCA2LjUuMSBrZXJuZWxzKSBhbmQgZWFybGllcgorICogIHVzZWQgYSBjb3VwbGUgZGlmZmVyZW50IHN0cnVjdHVyZXMgdG8gc3RvcmUgZ3JhcGhpY3MgaW5mb3JtYXRpb24uCisgKiAgRm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucywgdGhlIG5ld2VyIGRhdGEgc3RydWN0dXJlIHByZXNlcnZlcyBzb21lCisgKiAgb2YgdGhlIGxheW91dCBzbyB0aGF0IGZpZWxkcyB0aGF0IGFyZSB1c2VkIGluIHRoZSBvbGQgdmVyc2lvbnMgcmVtYWluCisgKiAgaW4gdGhlIHNhbWUgcGxhY2UgKHdpdGggdGhlIHNhbWUgaW5mbykuICBEZXRlcm1pbmF0aW9uIG9mIHdoYXQgdmVyc2lvbgorICogIG9mIHRoaXMgc3RydWN0dXJlIHdlIGhhdmUgaXMgZG9uZSBieSBjaGVja2luZyB0aGUgY29va2llIGZpZWxkLgorICovCisjZGVmaW5lIEtMR0ZYX0NPT0tJRQkweDBjMGRlMDAwCisKK3R5cGVkZWYgc3RydWN0IGtsZ2Z4X3MgewkJLyogR1JBUEhJQ1MgRGV2aWNlICovCisJa2xpbmZvX3QgCWdmeF9pbmZvOworCWtsY29uZl9vZmZfdCAgICBvbGRfZ25kZXZzOwkvKiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIHByb21zICovCisJa2xjb25mX29mZl90ICAgIG9sZF9nZG9mZjA7CS8qIGZvciBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgcHJvbXMgKi8KKwl1aW50CQljb29raWU7CQkvKiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIHByb21zICovCisJdWludAkJbW9kdWxlc2xvdDsKKwlzdHJ1Y3Qga2xnZnhfcwkqZ2Z4X25leHRfcGlwZTsKKwlncmFwaGljc190CWdmeF9zcGVjaWZpYzsKKwlrbGNvbmZfb2ZmX3QgICAgcGFkMDsJCS8qIGZvciBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgcHJvbXMgKi8KKwlrbGNvbmZfb2ZmX3QgICAgZ2Z4X21mZ19uaWM7Cit9IGtsZ2Z4X3Q7CisKK3R5cGVkZWYgc3RydWN0IGtseHRoZF9zIHsKKwlrbGluZm9fdCAJeHRoZF9pbmZvIDsKKwlrbGNvbmZfb2ZmX3QJeHRoZF9tZmdfbmljIDsgICAgICAgIC8qIE1GRyBOSUMgc3RyaW5nICovCit9IGtseHRoZF90IDsKKwordHlwZWRlZiBzdHJ1Y3Qga2x0cHVfcyB7ICAgICAgICAgICAgICAgICAgICAgLyogVFBVIGJvYXJkICovCisJa2xpbmZvX3QgCXRwdV9pbmZvIDsKKwlrbGNvbmZfb2ZmX3QJdHB1X21mZ19uaWMgOyAgICAgICAgLyogTUZHIE5JQyBzdHJpbmcgKi8KK30ga2x0cHVfdCA7CisKK3R5cGVkZWYgc3RydWN0IGtsZ3NuX3MgeyAgICAgICAgICAgICAgICAgICAgIC8qIEdTTiBib2FyZCAqLworCWtsaW5mb190IAlnc25faW5mbyA7CisJa2xjb25mX29mZl90CWdzbl9tZmdfbmljIDsgICAgICAgIC8qIE1GRyBOSUMgc3RyaW5nICovCit9IGtsZ3NuX3QgOworCisjZGVmaW5lIE1BWF9TQ1NJX0RFVlMgMTYKKworLyoKKyAqIE5PVEU6IFRIaXMgaXMgdGhlIG1heCBzaXplZCBrbCogc3RydWN0dXJlIGFuZCBpcyB1c2VkIGluIGtsbWFsbG9jLmMKKyAqIHRvIGFsbG9jYXRlIHNwYWNlIG9mIHR5cGUgQ09NUE9ORU5ULiBNYWtlIHN1cmUgdGhhdCBpZiB0aGUgc2l6ZSBvZgorICogYW55IG90aGVyIGNvbXBvbmVudCBzdHJ1Y3QgYmVjb21lcyBtb3JlIHRoYW4gdGhpcywgdGhlbiByZWRlZmluZQorICogdGhhdCBhcyB0aGUgc2l6ZSB0byBiZSBrbG1hbGxvY2VkLgorICovCisKK3R5cGVkZWYgc3RydWN0IGtsc2NzaV9zIHsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNDU0kgQ29udHJvbGxlciAqLworCWtsaW5mb190IAlzY3NpX2luZm8gOworICAgIAlzY3NpX3QgICAgICAgCXNjc2lfc3BlY2lmaWMgICA7CisJdW5zaWduZWQgY2hhciAJc2NzaV9udW1kZXZzIDsKKwlrbGNvbmZfb2ZmX3QJc2NzaV9kZXZpbmZvW01BWF9TQ1NJX0RFVlNdIDsKK30ga2xzY3NpX3QgOworCit0eXBlZGVmIHN0cnVjdCBrbHNjZGV2X3MgeyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU0NTSSBkZXZpY2UgKi8KKwlrbGluZm9fdCAJc2NkZXZfaW5mbyA7CisJc3RydWN0IHNjc2lkaXNrX2RhdGEgKnNjZGV2X2NmZyA7IC8qIGRyaXZlciBmaWxscyB1cCB0aGlzICovCit9IGtsc2NkZXZfdCA7CisKK3R5cGVkZWYgc3RydWN0IGtsdHR5ZGV2X3MgeyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVFRZIGRldmljZSAqLworCWtsaW5mb190IAl0dHlkZXZfaW5mbyA7CisJc3RydWN0IHRlcm1pbmFsX2RhdGEgKnR0eWRldl9jZmcgOyAvKiBkcml2ZXIgZmlsbHMgdXAgdGhpcyAqLworfSBrbHR0eWRldl90IDsKKwordHlwZWRlZiBzdHJ1Y3Qga2xlbmV0ZGV2X3MgeyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRU5FVCBkZXZpY2UgKi8KKwlrbGluZm9fdCAJZW5ldGRldl9pbmZvIDsKKwlzdHJ1Y3QgbmV0X2RhdGEgKmVuZXRkZXZfY2ZnIDsgLyogZHJpdmVyIGZpbGxzIHVwIHRoaXMgKi8KK30ga2xlbmV0ZGV2X3QgOworCit0eXBlZGVmIHN0cnVjdCBrbGtiZGRldl9zIHsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEtCRCBkZXZpY2UgKi8KKwlrbGluZm9fdCAJa2JkZGV2X2luZm8gOworCXN0cnVjdCBrZXlib2FyZF9kYXRhICprYmRkZXZfY2ZnIDsgLyogZHJpdmVyIGZpbGxzIHVwIHRoaXMgKi8KK30ga2xrYmRkZXZfdCA7CisKK3R5cGVkZWYgc3RydWN0IGtsbXNkZXZfcyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBtb3VzZSBkZXZpY2UgKi8KKyAgICAgICAga2xpbmZvX3QgICAgICAgIG1zZGV2X2luZm8gOworICAgICAgICB2b2lkIAkJKm1zZGV2X2NmZyA7Cit9IGtsbXNkZXZfdCA7CisKKyNkZWZpbmUgTUFYX0ZERElfREVWUyAxMCAvKiBYWFggSXMgdGhpcyB0cnVlICovCisKK3R5cGVkZWYgc3RydWN0IGtsZmRkaV9zIHsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZEREkgKi8KKwlrbGluZm9fdCAJZmRkaV9pbmZvIDsKKyAgICAJZmRkaV90ICAgICAgICAJZmRkaV9zcGVjaWZpYyA7CisJa2xjb25mX29mZl90CWZkZGlfZGV2aW5mb1tNQVhfRkRESV9ERVZTXSA7Cit9IGtsZmRkaV90IDsKKwordHlwZWRlZiBzdHJ1Y3Qga2xtaW9fcyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNSU8gKi8KKwlrbGluZm9fdCAJbWlvX2luZm8gOworICAgIAltaW9fdCAgICAgICAJbWlvX3NwZWNpZmljICAgOworfSBrbG1pb190IDsKKworCit0eXBlZGVmIHVuaW9uIGtsY29tcF9zIHsKKwlrbGNwdV90CQlrY19jcHU7CisJa2xodWJfdAkJa2NfaHViOworCWtsbWVtYm5rX3QgCWtjX21lbTsKKwlrbHhib3dfdCAgCWtjX3hib3c7CisJa2xicmlfdAkJa2NfYnJpOworCWtsaW9jM190CWtjX2lvYzM7CisJa2x2bWViX3QJa2Nfdm1lYjsKKwlrbHZtZWRfdAlrY192bWVkOworCWtscm91X3QJCWtjX3JvdTsKKwlrbGdmeF90CQlrY19nZng7CisJa2xzY3NpX3QJa2Nfc2NzaTsKKwlrbHNjZGV2X3QJa2Nfc2NzaV9kZXY7CisJa2xmZGRpX3QJa2NfZmRkaTsKKwlrbG1pb190CQlrY19taW87CisJa2xtb2Rfc2VyaWFsX251bV90IGtjX3NudW0gOworfSBrbGNvbXBfdDsKKwordHlwZWRlZiB1bmlvbiBrbGRldl9zIHsgICAgICAvKiBmb3IgZGV2aWNlIHN0cnVjdHVyZSBhbGxvY2F0aW9uICovCisJa2xzY2Rldl90CWtjX3Njc2lfZGV2IDsKKwlrbHR0eWRldl90CWtjX3R0eV9kZXYgOworCWtsZW5ldGRldl90CWtjX2VuZXRfZGV2IDsKKwlrbGtiZGRldl90IAlrY19rYmRfZGV2IDsKK30ga2xkZXZfdCA7CisKKy8qIERhdGEgc3RydWN0dXJlIGludGVyZmFjZSByb3V0aW5lcy4gVEJEICovCisKKy8qIEluY2x1ZGUgbGF1bmNoIGluZm8gaW4gdGhpcyBmaWxlIGl0c2VsZj8gVEJEICovCisKKy8qCisgKiBUQkQgLSBDYW4gdGhlIEFSQ1MgYW5kIGRldmljZSBkcml2ZXIgcmVsYXRlZCBpbmZvIGFsc28gYmUgaW5jbHVkZWQgaW4gdGhlCisgKiBLTENPTkZJRyBhcmVhLiBPbiB0aGUgSU80UFJPTSwgcHJvbSBkZXZpY2UgZHJpdmVyIGluZm8gaXMgcGFydCBvZiBjZmdub2RlX3QKKyAqIHN0cnVjdHVyZSwgdml6IHByaXZhdGUgdG8gdGhlIElPNHByb20uCisgKi8KKworLyoKKyAqIFRCRCAtIEFsbG9jYXRpb24gaXNzdWVzLgorICoKKyAqIERvIHdlIG5lZWQgdG8gTWFyayBvZmYgc2VwYXRhdGUgaGVhcHMgZm9yIGxib2FyZF90LCByYm9hcmRfdCwgY29tcG9uZW50LAorICogZXJyaW5mbyBhbmQgYWxsb2NhdGUgZnJvbSB0aGVtLCBvciBoYXZlIGEgc2luZ2xlIGhlYXAgYW5kIGFsbG9jYXRlIGFsbAorICogc3RydWN0dXJlcyBmcm9tIGl0LiBEZWJ1ZyBpcyBlYXNpZXIgaW4gdGhlIGZvcm1lciBtZXRob2Qgc2luY2Ugd2UgY2FuCisgKiBkdW1wIGFsbCBzaW1pbGFyIHN0cnVjdHMgaW4gb25lIGNvbW1hbmQsIGJ1dCB0aGVyZSB3aWxsIGJlIGxvdHMgb2YgaG9sZXMsCisgKiBpbiBtZW1vcnkgYW5kIG1heCBsaW1pdHMgYXJlIG5lZWRlZCBmb3IgbnVtYmVyIG9mIHN0cnVjdHVyZXMuCisgKiBBbm90aGVyIHdheSB0byBtYWtlIGl0IG9yZ2FuaXplZCwgaXMgdG8gaGF2ZSBhIHVuaW9uIG9mIGFsbCBjb21wb25lbnRzCisgKiBhbmQgYWxsb2NhdGUgYSBhbGlnbmVkIGNodW5rIG9mIG1lbW9yeSBncmVhdGVyIHRoYW4gdGhlIGJpZ2dlc3QKKyAqIGNvbXBvbmVudC4KKyAqLworCit0eXBlZGVmIHVuaW9uIHsKKwlsYm9hcmRfdCAqbGJpbmZvIDsKK30gYmlwdHJfdCA7CisKKworI2RlZmluZSBCUklfUEVSX1hCT1cgNgorI2RlZmluZSBQQ0lfUEVSX0JSSSAgOAorI2RlZmluZSBERVZfUEVSX1BDSSAgMTYKKworCisvKiBWaXJ0dWFsIGRpcHN3aXRjaCB2YWx1ZXMgKHN0YXJ0aW5nIGZyb20gc3dpdGNoICI3Iik6ICovCisKKyNkZWZpbmUgVkRTX05PR0ZYCQkweDgwMDAJLyogRG9uJ3QgZW5hYmxlIGdmeCBhbmQgYXV0b2Jvb3QgKi8KKyNkZWZpbmUgVkRTX05PTVAJCTB4MTAwCS8qIERvbid0IHN0YXJ0IHNsYXZlIHByb2Nlc3NvcnMgKi8KKyNkZWZpbmUgVkRTX01BTlVNT0RFCQkweDgwCS8qIE1hbnVmYWN0dXJpbmcgbW9kZSAqLworI2RlZmluZSBWRFNfTk9BUkIJCTB4NDAJLyogTm8gYm9vdG1hc3RlciBhcmJpdHJhdGlvbiAqLworI2RlZmluZSBWRFNfUE9ETU9ERQkJMHgyMAkvKiBHbyBzdHJhaWdodCB0byBQT0QgbW9kZSAqLworI2RlZmluZSBWRFNfTk9fRElBR1MJCTB4MTAJLyogRG9uJ3QgcnVuIGFueSBkaWFncyBhZnRlciBCTSBhcmIgKi8KKyNkZWZpbmUgVkRTX0RFRkFVTFRTCQkweDA4CS8qIFVzZSBkZWZhdWx0IGVudmlyb25tZW50IHZhbHVlcyAqLworI2RlZmluZSBWRFNfTk9NRU1DTEVBUgkJMHgwNAkvKiBEb24ndCBydW4gbWVtIGNmZyBjb2RlICovCisjZGVmaW5lIFZEU18yTkRfSU80CQkweDAyCS8qIEJvb3QgZnJvbSB0aGUgc2Vjb25kIElPNCAqLworI2RlZmluZSBWRFNfREVCVUdfUFJPTQkJMHgwMQkvKiBQcmludCBQUk9NIGRlYnVnZ2luZyBtZXNzYWdlcyAqLworCisvKiBleHRlcm5hbCBkZWNsYXJhdGlvbnMgb2YgTGludXgga2VybmVsIGZ1bmN0aW9ucy4gKi8KKworZXh0ZXJuIGxib2FyZF90ICpmaW5kX2xib2FyZChsYm9hcmRfdCAqc3RhcnQsIHVuc2lnbmVkIGNoYXIgdHlwZSk7CitleHRlcm4ga2xpbmZvX3QgKmZpbmRfY29tcG9uZW50KGxib2FyZF90ICpicmQsIGtsaW5mb190ICprbGksIHVuc2lnbmVkIGNoYXIgdHlwZSk7CitleHRlcm4ga2xpbmZvX3QgKmZpbmRfZmlyc3RfY29tcG9uZW50KGxib2FyZF90ICpicmQsIHVuc2lnbmVkIGNoYXIgdHlwZSk7CitleHRlcm4ga2xjcHVfdCAqbmFzaWRfc2xpY2VfdG9fY3B1aW5mbyhuYXNpZF90LCBpbnQpOworZXh0ZXJuIGxib2FyZF90ICpmaW5kX2xib2FyZF9jbGFzcyhsYm9hcmRfdCAqc3RhcnQsIHVuc2lnbmVkIGNoYXIgYnJkX2NsYXNzKTsKKworCisjaWYgZGVmaW5lZChDT05GSUdfU0dJX0lPKQorZXh0ZXJuIHh3aWRnZXRudW1fdCBub2RldmVydGV4X3dpZGdldG51bV9nZXQodmVydGV4X2hkbF90IG5vZGVfdnR4KTsKK2V4dGVybiB2ZXJ0ZXhfaGRsX3Qgbm9kZXZlcnRleF94Ym93X3BlZXJfZ2V0KHZlcnRleF9oZGxfdCBub2RlX3Z0eCk7CitleHRlcm4gbGJvYXJkX3QgKmZpbmRfZ2Z4cGlwZShpbnQgcGlwZW51bSk7CitleHRlcm4gdm9pZCBzZXR1cF9nZnhwaXBlX2xpbmsodmVydGV4X2hkbF90IHZoZGwsaW50IHBpcGVudW0pOworZXh0ZXJuIGxib2FyZF90ICpmaW5kX2xib2FyZF9tb2R1bGVfY2xhc3MobGJvYXJkX3QgKnN0YXJ0LCBtb2R1bGVpZF90IG1vZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBicmRfY2xhc3MpOworZXh0ZXJuIGxib2FyZF90ICpmaW5kX25pY19sYm9hcmQobGJvYXJkX3QgKiwgbmljX3QpOworZXh0ZXJuIGxib2FyZF90ICpmaW5kX25pY190eXBlX2xib2FyZChuYXNpZF90LCB1bnNpZ25lZCBjaGFyLCBuaWNfdCk7CitleHRlcm4gbGJvYXJkX3QgKmZpbmRfbGJvYXJkX21vZHNsb3QobGJvYXJkX3QgKnN0YXJ0LCBtb2R1bGVpZF90IG1vZCwgc2xvdGlkX3Qgc2xvdCk7CitleHRlcm4gbGJvYXJkX3QgKmZpbmRfbGJvYXJkX21vZHVsZShsYm9hcmRfdCAqc3RhcnQsIG1vZHVsZWlkX3QgbW9kKTsKK2V4dGVybiBsYm9hcmRfdCAqZ2V0X2JvYXJkX25hbWUobmFzaWRfdCBuYXNpZCwgbW9kdWxlaWRfdCBtb2QsIHNsb3RpZF90IHNsb3QsIGNoYXIgKm5hbWUpOworZXh0ZXJuIGludAljb25maWdfZmluZF9uaWNfcm91dGVyKG5hc2lkX3QsIG5pY190LCBsYm9hcmRfdCAqKiwga2xyb3VfdCoqKTsKK2V4dGVybiBpbnQJY29uZmlnX2ZpbmRfbmljX2h1YihuYXNpZF90LCBuaWNfdCwgbGJvYXJkX3QgKiosIGtsaHViX3QqKik7CitleHRlcm4gaW50CWNvbmZpZ19maW5kX3hib3cobmFzaWRfdCwgbGJvYXJkX3QgKiosIGtseGJvd190KiopOworZXh0ZXJuIGtsY3B1X3QgKmdldF9jcHVpbmZvKGNwdWlkX3QgY3B1KTsKK2V4dGVybiBpbnQgCXVwZGF0ZV9rbGNmZ19jcHVpbmZvKG5hc2lkX3QsIGludCk7CitleHRlcm4gdm9pZCAJYm9hcmRfdG9fcGF0aChsYm9hcmRfdCAqYnJkLCBjaGFyICpwYXRoKTsKK2V4dGVybiBtb2R1bGVpZF90IGdldF9tb2R1bGVfaWQobmFzaWRfdCBuYXNpZCk7CitleHRlcm4gdm9pZCAJbmljX25hbWVfY29udmVydChjaGFyICpvbGRfbmFtZSwgY2hhciAqbmV3X25hbWUpOworZXh0ZXJuIGludCAJbW9kdWxlX2JyZHMobmFzaWRfdCBuYXNpZCwgbGJvYXJkX3QgKiptb2R1bGVfYnJkcywgaW50IG4pOworZXh0ZXJuIGxib2FyZF90ICpicmRfZnJvbV9rZXkodWxvbmdfdCBrZXkpOworZXh0ZXJuIHZvaWQgCWRldmljZV9jb21wb25lbnRfY2Fub25pY2FsX25hbWVfZ2V0KGxib2FyZF90ICosa2xpbmZvX3QgKiwKKwkJCQkJCSAgICBjaGFyICopOworZXh0ZXJuIGludAlib2FyZF9zZXJpYWxfbnVtYmVyX2dldChsYm9hcmRfdCAqLGNoYXIgKik7CitleHRlcm4gaW50CWlzX21hc3Rlcl9iYXNlaW8obmFzaWRfdCxtb2R1bGVpZF90LHNsb3RpZF90KTsKK2V4dGVybiBuYXNpZF90CWdldF9hY3R1YWxfbmFzaWQobGJvYXJkX3QgKmJyZCkgOworZXh0ZXJuIG5ldF92ZWNfdCBrbGNmZ19kaXNjb3Zlcl9yb3V0ZShsYm9hcmRfdCAqLCBsYm9hcmRfdCAqLCBpbnQpOworI2Vsc2UJLyogQ09ORklHX1NHSV9JTyAqLworZXh0ZXJuIGtsY3B1X3QgKnNuX2dldF9jcHVpbmZvKGNwdWlkX3QgY3B1KTsKKyNlbmRpZgkvKiBDT05GSUdfU0dJX0lPICovCisKKyNlbmRpZiAvKiBfQVNNX1NOX0tMQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc24va2xkaXIuaCBiL2luY2x1ZGUvYXNtLW1pcHMvc24va2xkaXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGVmYWIxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zbi9rbGRpci5oCkBAIC0wLDAgKzEsMjQ4IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogRGVyaXZlZCBmcm9tIElSSVggPHN5cy9TTi9rbGRpci5oPiwgcmV2aXNpb24gMS4yMS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTIgLSAxOTk3LCAxOTk5LCAyMDAwIFNpbGljb24gR3JhcGhpY3MsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCBieSBSYWxmIEJhZWNobGUKKyAqLworI2lmbmRlZiBfQVNNX1NOX0tMRElSX0gKKyNkZWZpbmUgX0FTTV9TTl9LTERJUl9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2lmIGRlZmluZWQoQ09ORklHX1NHSV9JTykKKyNpbmNsdWRlIDxhc20vaGFjay5oPgorI2VuZGlmCisKKy8qCisgKiBUaGUga2xkaXIgbWVtb3J5IGFyZWEgcmVzaWRlcyBhdCBhIGZpeGVkIHBsYWNlIGluIGVhY2ggbm9kZSdzIG1lbW9yeSBhbmQKKyAqIHByb3ZpZGVzIHBvaW50ZXJzIHRvIG1vc3Qgb3RoZXIgSVAyNyBtZW1vcnkgYXJlYXMuICBUaGlzIGFsbG93cyB1cyB0bworICogcmVzaXplIGFuZC9vciByZWxvY2F0ZSBtZW1vcnkgYXJlYXMgYXQgYSBsYXRlciB0aW1lIHdpdGhvdXQgYnJlYWtpbmcgYWxsCisgKiBmaXJtd2FyZSBhbmQga2VybmVscyB0aGF0IHVzZSB0aGVtLiAgSW5kaWNlcyBpbiB0aGUgYXJyYXkgYXJlCisgKiBwZXJtYW5lbnRseSBkZWRpY2F0ZWQgdG8gYXJlYXMgbGlzdGVkIGJlbG93LiAgU29tZSBtZW1vcnkgYXJlYXMgKG1hcmtlZAorICogYmVsb3cpIHJlc2lkZSBhdCBhIHBlcm1hbmVudGx5IGZpeGVkIGxvY2F0aW9uLCBidXQgYXJlIGluY2x1ZGVkIGluIHRoZQorICogZGlyZWN0b3J5IGZvciBjb21wbGV0ZW5lc3MuCisgKi8KKworI2RlZmluZSBLTERJUl9NQUdJQwkJMHg0MzRkNWY1MzUwNWY1MzU3CisKKy8qCisgKiBUaGUgdXBwZXIgcG9ydGlvbiBvZiB0aGUgbWVtb3J5IG1hcCBhcHBsaWVzIGR1cmluZyBib290CisgKiBvbmx5IGFuZCBpcyBvdmVyd3JpdHRlbiBieSBJUklYL1NZTU1PTi4KKyAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1FTU9SWSBNQVAgUEVSIE5PREUKKyAqCisgKiAweDIwMDAwMDAgKDMyTSkgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgKiAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgSU82IEJVRkZFUlMgRk9SIEZMQVNIIEVORVQgSU9DMyAgICB8CisgKiAweDFGODAwMDAgKDMxLjVNKSAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgKiAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgSU82IFRFWFQvREFUQS9CU1Mvc3RhY2sgICAgICAgICAgICB8CisgKiAweDFDMDAwMDAgKDMwTSkgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgKiAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgSU82IFBST00gREVCVUcgVEVYVC9EQVRBL0JTUy9zdGFjayB8CisgKiAweDA4MDAwMDAgKDI4TSkgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgKiAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgSVAyNyBQUk9NIFRFWFQvREFUQS9CU1Mvc3RhY2sgICAgICB8CisgKiAweDFCMDAwMDAgKDI3TSkgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgKiAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgSVAyNyBDRkcgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKiAweDFBMDAwMDAgKDI2TSkgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgKiAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgR3JhcGhpY3MgUFJPTSAgICAgICAgICAgICAgICAgICAgICB8CisgKiAweDE4MDAwMDAgKDI0TSkgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgKiAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgM3JkIFBhcnR5IFBST00gZHJpdmVycyAgICAgICAgICAgICB8CisgKiAweDE2MDAwMDAgKDIyTSkgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgKiAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgRnJlZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgKiAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgVU5JWCBERUJVRyBWZXJzaW9uICAgICAgICAgICAgICAgICB8CisgKiAweDE5MDAwMCAoMk0tLSkgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgKiAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgU1lNTU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgKEZvciBVTklYIERlYnVnIG9ubHkpICAgICAgICAgICAgICB8CisgKiAweDM0MDAwICgyMDhLKSAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgKiAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgU1lNTU9OIFNUQUNLIFtOVU1fQ1BVX1BFUl9OT0RFXSAgICB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgKEZvciBVTklYIERlYnVnIG9ubHkpICAgICAgICAgICAgICB8CisgKiAweDI1MDAwICgxNDhLKSAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgKiAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgS0xDT05GSUcgLSBJSSAodGVtcCkgICAgICAgICAgICAgICB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgICB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgVU5JWCBOT04tREVCVUcgVmVyc2lvbiAgICAgICAgICAgICB8CisgKiAweDE5MDAwICgxMDBLKSAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgKgorICoKKyAqIFRoZSBsb3dlciBwb3J0aW9uIG9mIHRoZSBtZW1vcnkgbWFwIGNvbnRhaW5zIGluZm9ybWF0aW9uIHRoYXQgaXMKKyAqIHBlcm1hbmVudCBhbmQgaXMgdXNlZCBieSB0aGUgSVAyN1BST00sIElPNlBST00gYW5kIElSSVguCisgKgorICogMHgxOTAwMCAoMTAwSykgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICogICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgIFBJIEVycm9yIFNwb29scyAoMzJLKSAgICAgICAgICAgICAgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogMHgxMjAwMCAoNzJLKSAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICogICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgIFVudXNlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogMHgxMWMwMCAoNzFLKSAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICogICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgIENQVSAxIE5NSSBFZnJhbWUgYXJlYSAgICAgICAJICAgICB8CisgKiAweDExYTAwICg3MC41SykgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgKiAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgQ1BVIDAgTk1JIEVmcmFtZSBhcmVhICAgICAgIAkgICAgIHwKKyAqIDB4MTE4MDAgKDcwSykgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICBDUFUgMSBOTUkgUmVnaXN0ZXIgc2F2ZSBhcmVhICAgICAgIHwKKyAqIDB4MTE2MDAgKDY5LjVLKSAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICBDUFUgMCBOTUkgUmVnaXN0ZXIgc2F2ZSBhcmVhICAgICAgIHwKKyAqIDB4MTE0MDAgKDY5SykgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICBHREEgKDFrKSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqIDB4MTEwMDAgKDY4SykgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICBFYXJseSBjYWNoZSBFeGNlcHRpb24gc3RhY2sgICAgICAgIHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgYW5kL29yICAgICAgICAgICAgICAgICAgICAgIHwKKyAqCQkJICAgfCAgICAgIGtlcm5lbC9pbzZwcm9tIG5taSByZWdpc3RlcnMJICAgICB8CisgKiAweDEwODAwICAoNjZrKQkgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgKgkJCSAgIHwgICAgICBjYWNoZSBlcnJvciBlZnJhbWUgICAJIAkgICAgIHwKKyAqIDB4MTA0MDAgKDY1SykgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICBFeGNlcHRpb24gSGFuZGxlcnMgKFVBTElBUyBjb3B5KSAgIHwKKyAqIDB4MTAwMDAgKDY0SykgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICBLTENPTkZJRyAtIEkgKHBlcm1hbmVudCkgKDQ4SykgICAgIHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqIDB4NDAwMCAoMTZLKSAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICBOTUkgSGFuZGxlciAoUHJvdGVjdGVkIFBhZ2UpICAgICAgIHwKKyAqIDB4MzAwMCAoMTJLKSAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICBBUkNTIFBWRUNUT1JTIChtYXN0ZXIgbm9kZSBvbmx5KSAgIHwKKyAqIDB4MmMwMCAoMTFLKSAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICBBUkNTIFRWRUNUT1JTIChtYXN0ZXIgbm9kZSBvbmx5KSAgIHwKKyAqIDB4MjgwMCAoMTBLKSAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICBMQVVOQ0ggW05VTV9DUFVdICAgICAgICAgICAgICAgICAgIHwKKyAqIDB4MjQwMCAoOUspICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICBMb3cgbWVtb3J5IGRpcmVjdG9yeSAoS0xESVIpICAgICAgIHwKKyAqIDB4MjAwMCAoOEspICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICBBUkNTIFNQQiAoMUspICAgICAgICAgICAgICAgICAgICAgIHwKKyAqIDB4MTAwMCAoNEspICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICBFYXJseSBjYWNoZSBFeGNlcHRpb24gc3RhY2sgICAgICAgIHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgYW5kL29yICAgICAgICAgICAgICAgICAgICAgIHwKKyAqCQkJICAgfCAgICAgIGtlcm5lbC9pbzZwcm9tIG5taSByZWdpc3RlcnMJICAgICB8CisgKiAweDgwMCAgKDJrKQkgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqCQkJICAgfCAgICAgIGNhY2hlIGVycm9yIGVmcmFtZSAgIAkgCSAgICAgfAorICogMHg0MDAgKDFLKSAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICogICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgIEV4Y2VwdGlvbiBIYW5kbGVycyAgICAgICAgICAgICAgICAgfAorICogMHgwICAgKDBLKSAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICovCisKKyNpZmRlZiBfX0FTU0VNQkxZX18KKyNkZWZpbmUgS0xESVJfT0ZGX01BR0lDCQkJMHgwMAorI2RlZmluZSBLTERJUl9PRkZfT0ZGU0VUCQkweDA4CisjZGVmaW5lIEtMRElSX09GRl9QT0lOVEVSCQkweDEwCisjZGVmaW5lIEtMRElSX09GRl9TSVpFCQkJMHgxOAorI2RlZmluZSBLTERJUl9PRkZfQ09VTlQJCQkweDIwCisjZGVmaW5lIEtMRElSX09GRl9TVFJJREUJCTB4MjgKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworI2lmICFkZWZpbmVkKENPTkZJR19TR0lfSU8pCisKKy8qCisgKiBUaGlzIGlzIGRlZmluZWQgaGVyZSBiZWNhdXNlIElQMjdfU1lNTU9OX1NUS19TSVpFIG11c3QgYmUgYXQgbGVhc3Qgd2hhdAorICogd2UgZGVmaW5lIGhlcmUuICBTaW5jZSBpdCdzIHNldCB1cCBpbiB0aGUgcHJvbS4gIFdlIGNhbid0IHJlZGVmaW5lIGl0IGxhdGVyCisgKiBhbmQgZXhwZWN0IG1vcmUgc3BhY2UgdG8gYmUgYWxsb2NhdGVkLiAgVGhlIHdheSB0byBmaW5kIG91dCB0aGUgdHJ1ZSBzaXplCisgKiBvZiB0aGUgc3ltbW9uIHN0YWNrcyBpcyB0byBkaXZpZGUgU1lNTU9OX1NUS19TSVpFIGJ5IFNZTU1PTl9TVEtfU1RSSURFCisgKiBmb3IgYSBwYXJ0aWN1bGFyIG5vZGUuCisgKi8KKyNkZWZpbmUgU1lNTU9OX1NUQUNLX1NJWkUJCTB4ODAwMAorCisjaWYgZGVmaW5lZCAoUFJPTSkgfHwgZGVmaW5lZCAoU0FCTEUpCisKKy8qCisgKiBUaGVzZSBkZWZpbmVzIGFyZSBwcm9tIHZlcnNpb24gZGVwZW5kZW50LiAgTm8gY29kZSBvdGhlciB0aGFuIHRoZSBJUDI3CisgKiBwcm9tIHNob3VsZCBhdHRlbXB0IHRvIHVzZSB0aGVzZSB2YWx1ZXMuCisgKi8KKyNkZWZpbmUgSVAyN19MQVVOQ0hfT0ZGU0VUCQkweDI0MDAKKyNkZWZpbmUgSVAyN19MQVVOQ0hfU0laRQkJMHg0MDAKKyNkZWZpbmUgSVAyN19MQVVOQ0hfQ09VTlQJCTIKKyNkZWZpbmUgSVAyN19MQVVOQ0hfU1RSSURFCQkweDIwMAorCisjZGVmaW5lIElQMjdfS0xDT05GSUdfT0ZGU0VUCQkweDQwMDAKKyNkZWZpbmUgSVAyN19LTENPTkZJR19TSVpFCQkweGMwMDAKKyNkZWZpbmUgSVAyN19LTENPTkZJR19DT1VOVAkJMQorI2RlZmluZSBJUDI3X0tMQ09ORklHX1NUUklERQkJMAorCisjZGVmaW5lIElQMjdfTk1JX09GRlNFVAkJCTB4MzAwMAorI2RlZmluZSBJUDI3X05NSV9TSVpFCQkJMHg0MAorI2RlZmluZSBJUDI3X05NSV9DT1VOVAkJCTIKKyNkZWZpbmUgSVAyN19OTUlfU1RSSURFCQkJMHg0MAorCisjZGVmaW5lIElQMjdfUElfRVJST1JfT0ZGU0VUCQkweDEyMDAwCisjZGVmaW5lIElQMjdfUElfRVJST1JfU0laRQkJMHg0MDAwCisjZGVmaW5lIElQMjdfUElfRVJST1JfQ09VTlQJCTEKKyNkZWZpbmUgSVAyN19QSV9FUlJPUl9TVFJJREUJCTAKKworI2RlZmluZSBJUDI3X1NZTU1PTl9TVEtfT0ZGU0VUCQkweDI1MDAwCisjZGVmaW5lIElQMjdfU1lNTU9OX1NUS19TSVpFCQkweGUwMDAKKyNkZWZpbmUgSVAyN19TWU1NT05fU1RLX0NPVU5UCQkyCisvKiBJUDI3X1NZTU1PTl9TVEtfU1RSSURFIG11c3QgYmUgPj0gU1lNTU9OX1NUQUNLX1NJWkUgKi8KKyNkZWZpbmUgSVAyN19TWU1NT05fU1RLX1NUUklERQkJMHg3MDAwCisKKyNkZWZpbmUgSVAyN19GUkVFTUVNX09GRlNFVAkJMHgxOTAwMAorI2RlZmluZSBJUDI3X0ZSRUVNRU1fU0laRQkJLTEKKyNkZWZpbmUgSVAyN19GUkVFTUVNX0NPVU5UCQkxCisjZGVmaW5lIElQMjdfRlJFRU1FTV9TVFJJREUJCTAKKworI2VuZGlmIC8qIFBST00gfHwgU0FCTEUqLworLyoKKyAqIFRoZXJlIHdpbGwgYmUgb25seSBvbmUgb2YgdGhlc2UgaW4gYSBwYXJ0aXRpb24gc28gdGhlIElPNiBtdXN0IHNldCBpdCB1cC4KKyAqLworI2RlZmluZSBJTzZfR0RBX09GRlNFVAkJCTB4MTEwMDAKKyNkZWZpbmUgSU82X0dEQV9TSVpFCQkJMHg0MDAKKyNkZWZpbmUgSU82X0dEQV9DT1VOVAkJCTEKKyNkZWZpbmUgSU82X0dEQV9TVFJJREUJCQkwCisKKy8qCisgKiBzYXZlIGFyZWEgb2Yga2VybmVsIG5taSByZWdzIGluIHRoZSBwcm9tIGZvcm1hdAorICovCisjZGVmaW5lIElQMjdfTk1JX0tSRUdTX09GRlNFVAkJMHgxMTQwMAorI2RlZmluZSBJUDI3X05NSV9LUkVHU19DUFVfU0laRQkJMHgyMDAKKy8qCisgKiBzYXZlIGFyZWEgb2Yga2VybmVsIG5taSByZWdzIGluIGVmcmFtZSBmb3JtYXQKKyAqLworI2RlZmluZSBJUDI3X05NSV9FRlJBTUVfT0ZGU0VUCQkweDExODAwCisjZGVmaW5lIElQMjdfTk1JX0VGUkFNRV9TSVpFCQkweDIwMAorCisjZGVmaW5lIEtMRElSX0VOVF9TSVpFCQkJMHg0MAorI2RlZmluZSBLTERJUl9NQVhfRU5UUklFUwkJKDB4NDAwIC8gMHg0MCkKKworI2VuZGlmCS8qICFDT05GSUdfU0dJX0lPICovCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCit0eXBlZGVmIHN0cnVjdCBrbGRpcl9lbnRfcyB7CisJdTY0CQltYWdpYzsJCS8qIEluZGljYXRlcyB2YWxpZGl0eSBvZiBlbnRyeSAgICAgICovCisJb2ZmX3QJCW9mZnNldDsJCS8qIE9mZnNldCBmcm9tIHN0YXJ0IG9mIG5vZGUgc3BhY2UgICovCisjaWYgZGVmaW5lZChDT05GSUdfU0dJX0lPKQkvKiBGSVhNRSAqLworCV9fcHN1bnNpZ25lZF90CXBvaW50ZXI7CS8qIFBvaW50ZXIgdG8gYXJlYSBpbiBzb21lIGNhc2VzICAgICovCisjZWxzZQorCXVuc2lnbmVkIGxvbmcJcG9pbnRlcjsJLyogUG9pbnRlciB0byBhcmVhIGluIHNvbWUgY2FzZXMgICAgKi8KKyNlbmRpZgorCXNpemVfdAkJc2l6ZTsJCS8qIFNpemUgaW4gYnl0ZXMgCQkgICAgKi8KKwl1NjQJCWNvdW50OwkJLyogUmVwZWF0IGNvdW50IGlmIGFycmF5LCAxIGlmIG5vdCAgKi8KKwlzaXplX3QJCXN0cmlkZTsJCS8qIFN0cmlkZSBpZiBhcnJheSwgMCBpZiBub3QgICAgICAgICovCisJY2hhcgkJcnN2ZFsxNl07CS8qIFBhZCBlbnRyeSB0byAweDQwIGJ5dGVzICAgICAgICAgICovCisJLyogTk9URTogVGhlc2UgMTYgYnl0ZXMgYXJlIHVzZWQgaW4gdGhlIFBhcnRpdGlvbiBLTERJUgorCSAgIGVudHJ5IHRvIHN0b3JlIHBhcnRpdGlvbiBpbmZvLiBSZWZlciB0byBrbHBhcnQuaCBmb3IgdGhpcy4gKi8KK30ga2xkaXJfZW50X3Q7CisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisjaWYgZGVmaW5lZChDT05GSUdfU0dJX0lPKQorCisjZGVmaW5lIEtMRElSX0VOVF9TSVpFCQkJMHg0MAorI2RlZmluZSBLTERJUl9NQVhfRU5UUklFUwkJKDB4NDAwIC8gMHg0MCkKKworLyoKKyAqIFRoZSBhY3R1YWwgb2Zmc2V0cyBvZiBlYWNoIG1lbW9yeSBhcmVhIGFyZSBtYWNoaW5lLWRlcGVuZGVudAorICovCisjaWZkZWYgQ09ORklHX1NHSV9JUDI3CisvLyBOb3QgeWV0ICNpbmNsdWRlIDxhc20vc24vc24wL2tsZGlyLmg+CisjZWxpZiBkZWZpbmVkKENPTkZJR19TR0lfSVAzNSkKKyNpbmNsdWRlIDxhc20vc24vc24xL2tsZGlyLmg+CisjZWxzZQorI2Vycm9yICJrbGRpci5oIGlzIGN1cnJlbnRseSBkZWZpbmVkIGZvciBJUDI3IGFuZCBJUDM1IHBsYXRmb3JtcyBvbmx5IgorI2VuZGlmCisKKyNlbmRpZgkvKiBDT05GSUdfU0dJX0lPICovCisKKyNlbmRpZiAvKiBfQVNNX1NOX0tMRElSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc24va2xrZXJudmFycy5oIGIvaW5jbHVkZS9hc20tbWlwcy9zbi9rbGtlcm52YXJzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRlNGM1ZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc24va2xrZXJudmFycy5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiBGaWxlIHBvcnRlZCBmcm9tIElSSVggdG8gTGludXggYnkgS2Fub2ogU2FyY2FyLCAwNi8wOC8wMC4KKyAqIENvcHlyaWdodCAyMDAwIFNpbGljb24gR3JhcGhpY3MsIEluYy4KKyAqLworI2lmbmRlZiBfX0FTTV9TTl9LTEtFUk5WQVJTX0gKKyNkZWZpbmUgX19BU01fU05fS0xLRVJOVkFSU19ICisKKyNkZWZpbmUgS1ZfTUFHSUNfT0ZGU0VUCQkweDAKKyNkZWZpbmUgS1ZfUk9fTkFTSURfT0ZGU0VUCTB4NAorI2RlZmluZSBLVl9SV19OQVNJRF9PRkZTRVQJMHg2CisKKyNkZWZpbmUgS1ZfTUFHSUMJCTB4NWY0YjU2NWYKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworI2luY2x1ZGUgPGFzbS9zbi90eXBlcy5oPgorCit0eXBlZGVmIHN0cnVjdCBrZXJuX3ZhcnNfcyB7CisJaW50CQlrdl9tYWdpYzsKKwluYXNpZF90CQlrdl9yb19uYXNpZDsKKwluYXNpZF90CQlrdl9yd19uYXNpZDsKKwl1bnNpZ25lZCBsb25nCWt2X3JvX2Jhc2VhZGRyOworCXVuc2lnbmVkIGxvbmcJa3ZfcndfYmFzZWFkZHI7Cit9IGtlcm5fdmFyc190OworCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYgLyogX19BU01fU05fS0xLRVJOVkFSU19IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc24vbGF1bmNoLmggYi9pbmNsdWRlL2FzbS1taXBzL3NuL2xhdW5jaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2NzY5OWMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NuL2xhdW5jaC5oCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkyIC0gMTk5NywgMjAwMCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgYnkgQ29saW4gTmdhbQorICovCisjaWZuZGVmIF9BU01fU05fTEFVTkNIX0gKKyNkZWZpbmUgX0FTTV9TTl9MQVVOQ0hfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL3NuL3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3NuL2FkZHJzLmg+CisKKy8qCisgKiBUaGUgbGF1bmNoIGRhdGEgc3RydWN0dXJlIHJlc2lkZXMgYXQgYSBmaXhlZCBwbGFjZSBpbiBlYWNoIG5vZGUncyBtZW1vcnkKKyAqIGFuZCBpcyB1c2VkIHRvIGNvbW11bmljYXRlIGJldHdlZW4gdGhlIG1hc3RlciBwcm9jZXNzb3IgYW5kIHRoZSBzbGF2ZQorICogcHJvY2Vzc29ycy4KKyAqCisgKiBUaGUgbWFzdGVyIHN0b3JlcyBsYXVuY2ggcGFyYW1ldGVycyBpbiB0aGUgbGF1bmNoIHN0cnVjdHVyZQorICogY29ycmVzcG9uZGluZyB0byBhIHRhcmdldCBwcm9jZXNzb3IgdGhhdCBpcyBpbiBhIHNsYXZlIGxvb3AsIHRoZW4gc2VuZHMKKyAqIGFuIGludGVycnVwdCB0byB0aGUgc2xhdmUgcHJvY2Vzc29yLiAgVGhlIHNsYXZlIGNhbGxzIHRoZSBkZXNpcmVkCisgKiBmdW5jdGlvbiwgdGhlbiByZXR1cm5zIHRvIHRoZSBzbGF2ZSBsb29wLiAgVGhlIG1hc3RlciBtYXkgcG9sbCBvciB3YWl0CisgKiBmb3IgdGhlIHNsYXZlcyB0byBmaW5pc2guCisgKgorICogVGhlcmUgaXMgYW4gYXJyYXkgb2YgbGF1bmNoIHN0cnVjdHVyZXMsIG9uZSBwZXIgQ1BVIG9uIHRoZSBub2RlLiAgT25lCisgKiBpbnRlcnJ1cHQgbGV2ZWwgaXMgdXNlZCBwZXIgbG9jYWwgQ1BVLgorICovCisKKyNkZWZpbmUgTEFVTkNIX01BR0lDCQkweGFkZGJlYWQyYWRkYmVhZDMKKyNpZmRlZiBDT05GSUdfU0dJX0lQMjcKKyNkZWZpbmUgTEFVTkNIX1NJWkVPRgkJMHgxMDAKKyNkZWZpbmUgTEFVTkNIX1BBRFNaCQkweGEwCisjZW5kaWYKKworI2RlZmluZSBMQVVOQ0hfT0ZGX01BR0lDCTB4MDAJLyogU3RydWN0IG9mZnNldHMgZm9yIGFzc2VtYmx5ICAgICAgKi8KKyNkZWZpbmUgTEFVTkNIX09GRl9CVVNZCQkweDA4CisjZGVmaW5lIExBVU5DSF9PRkZfQ0FMTAkJMHgxMAorI2RlZmluZSBMQVVOQ0hfT0ZGX0NBTExDCTB4MTgKKyNkZWZpbmUgTEFVTkNIX09GRl9DQUxMUEFSTQkweDIwCisjZGVmaW5lIExBVU5DSF9PRkZfU1RBQ0sJMHgyOAorI2RlZmluZSBMQVVOQ0hfT0ZGX0dQCQkweDMwCisjZGVmaW5lIExBVU5DSF9PRkZfQkVWVVRMQgkweDM4CisjZGVmaW5lIExBVU5DSF9PRkZfQkVWTk9STUFMCTB4NDAKKyNkZWZpbmUgTEFVTkNIX09GRl9CRVZFQ0MJMHg0OAorCisjZGVmaW5lIExBVU5DSF9TVEFURV9ET05FCTAJLyogUmV0dXJuIHZhbHVlIG9mIExBVU5DSF9QT0xMICAgICAgKi8KKyNkZWZpbmUgTEFVTkNIX1NUQVRFX1NFTlQJMQorI2RlZmluZSBMQVVOQ0hfU1RBVEVfUkVDRAkyCisKKy8qCisgKiBUaGUgbGF1bmNoIHJvdXRpbmUgaXMgY2FsbGVkIG9ubHkgaWYgdGhlIGNvbXBsZW1lbnQgYWRkcmVzcyBpcyBjb3JyZWN0LgorICoKKyAqIEJlZm9yZSBjb250cm9sIGlzIHRyYW5zZmVycmVkIHRvIGEgcm91dGluZSwgdGhlIGNvbXBsZW1lbnQgYWRkcmVzcworICogaXMgemVyb2VkIChpbnZhbGlkYXRlZCkgdG8gcHJldmVudCBhbiBhY2NpZGVudGFsIGNhbGwgZnJvbSBhIHNwdXJpb3VzCisgKiBpbnRlcnJ1cHQuCisgKgorICogVGhlIHNsYXZlX2xhdW5jaCByb3V0aW5lIHR1cm5zIG9uIHRoZSBCVVNZIGZsYWcsIGFuZCB0aGUgc2xhdmUgbG9vcAorICogY2xlYXJzIHRoZSBCVVNZIGZsYWcgYWZ0ZXIgY29udHJvbCBpcyByZXR1cm5lZCB0byBpdC4KKyAqLworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCit0eXBlZGVmIGludCBsYXVuY2hfc3RhdGVfdDsKK3R5cGVkZWYgdm9pZCAoKmxhdW5jaF9wcm9jX3QpKHU2NCBjYWxsX3Bhcm0pOworCit0eXBlZGVmIHN0cnVjdCBsYXVuY2hfcyB7CisJdm9sYXRpbGUgdTY0CQltYWdpYzsJLyogTWFnaWMgbnVtYmVyICAgICAgICAgICAgICAgICAgICAgKi8KKwl2b2xhdGlsZSB1NjQJCWJ1c3k7CS8qIFNsYXZlIGN1cnJlbnRseSBhY3RpdmUgICAgICAgICAgICovCisJdm9sYXRpbGUgbGF1bmNoX3Byb2NfdAljYWxsX2FkZHI7CS8qIEZ1bmMuIGZvciBzbGF2ZSB0byBjYWxsICAqLworCXZvbGF0aWxlIHU2NAkJY2FsbF9hZGRyX2M7CS8qIDEncyBjb21wbGVtZW50IG9mIGNhbGxfYWRkciovCisJdm9sYXRpbGUgdTY0CQljYWxsX3Bhcm07CS8qIFNpbmdsZSBwYXJtIHBhc3NlZCB0byBjYWxsKi8KKwl2b2xhdGlsZSB2b2lkICpzdGFja19hZGRyOwkvKiBTdGFjayBwb2ludGVyIGZvciBzbGF2ZSBmdW5jdGlvbiAqLworCXZvbGF0aWxlIHZvaWQgKmdwX2FkZHI7CQkvKiBHbG9iYWwgcG9pbnRlciBmb3Igc2xhdmUgZnVuYy4gICAqLworCXZvbGF0aWxlIGNoYXIgCQkqYmV2dXRsYjsvKiBBZGRyZXNzIG9mIGJldiB1dGxiIGV4IGhhbmRsZXIgICAqLworCXZvbGF0aWxlIGNoYXIgCQkqYmV2bm9ybWFsOy8qQWRkcmVzcyBvZiBiZXYgbm9ybWFsIGV4IGhhbmRsZXIgKi8KKwl2b2xhdGlsZSBjaGFyIAkJKmJldmVjYzsvKiBBZGRyZXNzIG9mIGJldiBjYWNoZSBlcnIgaGFuZGxlciAqLworCXZvbGF0aWxlIGNoYXIJCXBhZFsxNjBdOwkvKiBQYWQgdG8gTEFVTkNIX1NJWkVPRgkgICAgKi8KK30gbGF1bmNoX3Q7CisKKy8qCisgKiBQUk9NIGVudHJ5IHBvaW50cyBmb3IgbGF1bmNoIHJvdXRpbmVzIGFyZSBkZXRlcm1pbmVkIGJ5IElQeHhwcm9tL3N0YXJ0LnMKKyAqLworCisjZGVmaW5lIExBVU5DSF9TTEFWRQkoKih2b2lkICgqKShpbnQgbmFzaWQsIGludCBjcHUsIFwKKwkJCQkgICAgbGF1bmNoX3Byb2NfdCBjYWxsX2FkZHIsIFwKKwkJCQkgICAgdTY0IGNhbGxfcGFybSwgXAorCQkJCSAgICB2b2lkICpzdGFja19hZGRyLCBcCisJCQkJICAgIHZvaWQgKmdwX2FkZHIpKSBcCisJCQkgSVAyN1BST01fTEFVTkNIU0xBVkUpCisKKyNkZWZpbmUgTEFVTkNIX1dBSVQJKCoodm9pZCAoKikoaW50IG5hc2lkLCBpbnQgY3B1LCBpbnQgdGltZW91dF9tc2VjKSkgXAorCQkJIElQMjdQUk9NX1dBSVRTTEFWRSkKKworI2RlZmluZSBMQVVOQ0hfUE9MTAkoKihsYXVuY2hfc3RhdGVfdCAoKikoaW50IG5hc2lkLCBpbnQgY3B1KSkgXAorCQkJIElQMjdQUk9NX1BPTExTTEFWRSkKKworI2RlZmluZSBMQVVOQ0hfTE9PUAkoKih2b2lkICgqKSh2b2lkKSkgXAorCQkJIElQMjdQUk9NX1NMQVZFTE9PUCkKKworI2RlZmluZSBMQVVOQ0hfRkxBU0gJKCoodm9pZCAoKikodm9pZCkpIFwKKwkJCSBJUDI3UFJPTV9GTEFTSExFRFMpCisKKyNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiBfQVNNX1NOX0xBVU5DSF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NuL21hcHBlZF9rZXJuZWwuaCBiL2luY2x1ZGUvYXNtLW1pcHMvc24vbWFwcGVkX2tlcm5lbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhMTc4NDZkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zbi9tYXBwZWRfa2VybmVsLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIEZpbGUgY3JlYXRlZCBieSBLYW5vaiBTYXJjYXIgMDYvMDYvMDAuCisgKiBDb3B5cmlnaHQgMjAwMCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCisgKi8KKyNpZm5kZWYgX19BU01fU05fTUFQUEVEX0tFUk5FTF9ICisjZGVmaW5lIF9fQVNNX1NOX01BUFBFRF9LRVJORUxfSAorCisvKgorICogTm90ZSBvbiBob3cgbWFwcGVkIGtlcm5lbHMgd29yazogdGhlIHRleHQgYW5kIGRhdGEgc2VjdGlvbiBpcworICogY29tcGlsZWQgYXQgY2tzc2VnIHNlZ21lbnQgKExPQURBRERSID0gMHhjMDAxYzAwMCksIGFuZCB0aGUKKyAqIGluaXQvc2V0dXAvZGF0YSBzZWN0aW9uIGdldHMgYSAxNk0gdmlydHVhbCBhZGRyZXNzIGJ1bXAgaW4gdGhlCisgKiBsZC5zY3JpcHQgZmlsZSAoc28gdGhhdCB0bGJsbzAgYW5kIHRsYmxvMSBtYXBzIHRoZSBzZWN0aW9ucykuCisgKiBUaGUgdm1saW51eC42NCBzZWN0aW9uIGFkZHJlc3NlcyBhcmUgcHV0IGluIHRoZSB4a3NlZyByYW5nZQorICogdXNpbmcgdGhlIGNoYW5nZS1hZGRyZXNzZXMgbWFrZWZpbGUgb3B0aW9uLiBVc2UgZWxmZHVtcCAtb2YKKyAqIG9uIElSSVggdG8gc2VlIHdoZXJlIHRoZSBzZWN0aW9ucyBnby4gVGhlIE9yaWdpbiBsb2FkZXIgbG9hZHMKKyAqIHRoZSB0d28gc2VjdGlvbnMgY29udGlndW91c2x5IGluIHBoeXNpY2FsIG1lbW9yeS4gVGhlIGxvYWRlcgorICogc2V0cyB0aGUgZW50cnkgcG9pbnQgaW50byBrZXJuZWxfZW50cnkgdXNpbmcgYSB4a3BoeXMgYWRkcmVzcywKKyAqIGJ1dCBpbnN0ZWFkIG9mIHVzaW5nIDB4YTgwMDAwMDAwMTE2MDAwMCwgaXQgdXNlcyB0aGUgYWRkcmVzcworICogMHhhODAwMDAwMDAwMTYwMDAwLCB3aGljaCBpcyB3aGVyZSBpdCBwaHlzaWNhbGx5IGxvYWRlZCB0aGF0CisgKiBjb2RlLiBTbyBubyBqdW1wcyBjYW4gYmUgZG9uZSBiZWZvcmUgd2UgaGF2ZSBzd2l0Y2hlZCB0byB1c2luZworICogY2tzc2VnIGFkZHJlc3Nlcy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KKworI2lmZGVmIENPTkZJR19CVUlMRF9FTEY2NAorI2RlZmluZSBSRVBfQkFTRQlDQUNfQkFTRQorI2Vsc2UKKyNkZWZpbmUgUkVQX0JBU0UJQ0tTRUcwCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NQVBQRURfS0VSTkVMCisKKyNkZWZpbmUgTUFQUEVEX0FERFJfUk9fVE9fUEhZUyh4KQkoeCAtIFJFUF9CQVNFKQorI2RlZmluZSBNQVBQRURfQUREUl9SV19UT19QSFlTKHgpCSh4IC0gUkVQX0JBU0UgLSAxNjc3NzIxNikKKworI2RlZmluZSBNQVBQRURfS0VSTl9ST19QSFlTQkFTRShuKSBcCisJCQkoUExBVF9OT0RFX0RBVEEobiktPmtlcm5fdmFycy5rdl9yb19iYXNlYWRkcikKKyNkZWZpbmUgTUFQUEVEX0tFUk5fUldfUEhZU0JBU0UobikgXAorCQkJKFBMQVRfTk9ERV9EQVRBKG4pLT5rZXJuX3ZhcnMua3ZfcndfYmFzZWFkZHIpCisKKyNkZWZpbmUgTUFQUEVEX0tFUk5fUk9fVE9fUEhZUyh4KSBcCisJCQkJKCh1bnNpZ25lZCBsb25nKU1BUFBFRF9BRERSX1JPX1RPX1BIWVMoeCkgfCBcCisJCQkJTUFQUEVEX0tFUk5fUk9fUEhZU0JBU0UoZ2V0X2NvbXBhY3Rfbm9kZWlkKCkpKQorI2RlZmluZSBNQVBQRURfS0VSTl9SV19UT19QSFlTKHgpIFwKKwkJCQkoKHVuc2lnbmVkIGxvbmcpTUFQUEVEX0FERFJfUldfVE9fUEhZUyh4KSB8IFwKKwkJCQlNQVBQRURfS0VSTl9SV19QSFlTQkFTRShnZXRfY29tcGFjdF9ub2RlaWQoKSkpCisKKyNlbHNlIC8qIENPTkZJR19NQVBQRURfS0VSTkVMICovCisKKyNkZWZpbmUgTUFQUEVEX0tFUk5fUk9fVE9fUEhZUyh4KQkoeCAtIFJFUF9CQVNFKQorI2RlZmluZSBNQVBQRURfS0VSTl9SV19UT19QSFlTKHgpCSh4IC0gUkVQX0JBU0UpCisKKyNlbmRpZiAvKiBDT05GSUdfTUFQUEVEX0tFUk5FTCAqLworCisjZGVmaW5lIE1BUFBFRF9LRVJOX1JPX1RPX0swKHgpCVBIWVNfVE9fSzAoTUFQUEVEX0tFUk5fUk9fVE9fUEhZUyh4KSkKKyNkZWZpbmUgTUFQUEVEX0tFUk5fUldfVE9fSzAoeCkJUEhZU19UT19LMChNQVBQRURfS0VSTl9SV19UT19QSFlTKHgpKQorCisjZW5kaWYgLyogX19BU01fU05fTUFQUEVEX0tFUk5FTF9IICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zbi9ubWkuaCBiL2luY2x1ZGUvYXNtLW1pcHMvc24vbm1pLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI3YjBiNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc24vbm1pLmgKQEAgLTAsMCArMSwxMjUgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTIgLSAxOTk3IFNpbGljb24gR3JhcGhpY3MsIEluYy4KKyAqLworI2lmbmRlZiBfX0FTTV9TTl9OTUlfSAorI2RlZmluZSBfX0FTTV9TTl9OTUlfSAorCisjaWRlbnQgIiRSZXZpc2lvbjogMS41ICQiCisKKyNpbmNsdWRlIDxhc20vc24vYWRkcnMuaD4KKworLyoKKyAqIFRoZSBsYXVuY2ggZGF0YSBzdHJ1Y3R1cmUgcmVzaWRlcyBhdCBhIGZpeGVkIHBsYWNlIGluIGVhY2ggbm9kZSdzIG1lbW9yeQorICogYW5kIGlzIHVzZWQgdG8gY29tbXVuaWNhdGUgYmV0d2VlbiB0aGUgbWFzdGVyIHByb2Nlc3NvciBhbmQgdGhlIHNsYXZlCisgKiBwcm9jZXNzb3JzLgorICoKKyAqIFRoZSBtYXN0ZXIgc3RvcmVzIGxhdW5jaCBwYXJhbWV0ZXJzIGluIHRoZSBsYXVuY2ggc3RydWN0dXJlCisgKiBjb3JyZXNwb25kaW5nIHRvIGEgdGFyZ2V0IHByb2Nlc3NvciB0aGF0IGlzIGluIGEgc2xhdmUgbG9vcCwgdGhlbiBzZW5kcworICogYW4gaW50ZXJydXB0IHRvIHRoZSBzbGF2ZSBwcm9jZXNzb3IuICBUaGUgc2xhdmUgY2FsbHMgdGhlIGRlc2lyZWQKKyAqIGZ1bmN0aW9uLCBmb2xsb3dlZCBieSBhbiBvcHRpb25hbCByZW5kZXp2b3VzIGZ1bmN0aW9uLCB0aGVuIHJldHVybnMgdG8KKyAqIHRoZSBzbGF2ZSBsb29wLiAgVGhlIG1hc3RlciBkb2VzIG5vdCB3YWl0IGZvciB0aGUgc2xhdmVzIGJlZm9yZQorICogcmV0dXJuaW5nLgorICoKKyAqIFRoZXJlIGlzIGFuIGFycmF5IG9mIGxhdW5jaCBzdHJ1Y3R1cmVzLCBvbmUgcGVyIENQVSBvbiB0aGUgbm9kZS4gIE9uZQorICogaW50ZXJydXB0IGxldmVsIGlzIHVzZWQgcGVyIENQVS4KKyAqLworCisjZGVmaW5lIE5NSV9NQUdJQwkJMHg0ODQxNGQ0ZDQ1NTIwMQorI2RlZmluZSBOTUlfU0laRU9GCQkweDQwCisKKyNkZWZpbmUgTk1JX09GRl9NQUdJQwkJMHgwMAkvKiBTdHJ1Y3Qgb2Zmc2V0cyBmb3IgYXNzZW1ibHkgICAgICAqLworI2RlZmluZSBOTUlfT0ZGX0ZMQUdTCQkweDA4CisjZGVmaW5lIE5NSV9PRkZfQ0FMTAkJMHgxMAorI2RlZmluZSBOTUlfT0ZGX0NBTExDCQkweDE4CisjZGVmaW5lIE5NSV9PRkZfQ0FMTFBBUk0JMHgyMAorI2RlZmluZSBOTUlfT0ZGX0dNQVNURVIJCTB4MjgKKworLyoKKyAqIFRoZSBOTUkgcm91dGluZSBpcyBjYWxsZWQgb25seSBpZiB0aGUgY29tcGxlbWVudCBhZGRyZXNzIGlzCisgKiBjb3JyZWN0LgorICoKKyAqIEJlZm9yZSBjb250cm9sIGlzIHRyYW5zZmVycmVkIHRvIGEgcm91dGluZSwgdGhlIGNvbXBsZW1lbnQgYWRkcmVzcworICogaXMgemVyb2VkIChpbnZhbGlkYXRlZCkgdG8gcHJldmVudCBhbiBhY2NpZGVudGFsIGNhbGwgZnJvbSBhIHNwdXJpb3VzCisgKiBpbnRlcnJ1cHQuCisgKgorICovCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK3R5cGVkZWYgc3RydWN0IG5taV9zIHsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nCSBtYWdpYzsJCS8qIE1hZ2ljIG51bWJlciAqLworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcJIGZsYWdzOwkJLyogQ29tYmluYXRpb24gb2YgZmxhZ3MgYWJvdmUgKi8KKwl2b2xhdGlsZSB2b2lkICpjYWxsX2FkZHI7CS8qIFJvdXRpbmUgZm9yIHNsYXZlIHRvIGNhbGwgICAgICAgICovCisJdm9sYXRpbGUgdm9pZCAqY2FsbF9hZGRyX2M7CS8qIDEncyBjb21wbGVtZW50IG9mIGFkZHJlc3MgICAgICAgICovCisJdm9sYXRpbGUgdm9pZCAqY2FsbF9wYXJtOwkvKiBTaW5nbGUgcGFybSBwYXNzZWQgdG8gY2FsbAkgICAgKi8KKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nCSBnbWFzdGVyOwkvKiBGbGFnIHRydWUgb25seSBvbiBnbG9iYWwgbWFzdGVyKi8KK30gbm1pX3Q7CisKKyNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCisKKy8qIEZvbGxvd2luZyBkZWZpbml0aW9ucyBhcmUgbmVlZGVkIGJvdGggaW4gdGhlIHByb20gJiB0aGUga2VybmVsCisgKiB0byBpZGVudGlmeSB0aGUgZm9ybWF0IG9mIHRoZSBubWkgY3B1IHJlZ2lzdGVyIHNhdmUgYXJlYSBpbiB0aGUKKyAqIGxvdyBtZW1vcnkgb24gZWFjaCBub2RlLgorICovCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCitzdHJ1Y3QgcmVnX3N0cnVjdCB7CisJdW5zaWduZWQgbG9uZwlncHJbMzJdOworCXVuc2lnbmVkIGxvbmcJc3I7CisJdW5zaWduZWQgbG9uZwljYXVzZTsKKwl1bnNpZ25lZCBsb25nCWVwYzsKKwl1bnNpZ25lZCBsb25nCWJhZHZhOworCXVuc2lnbmVkIGxvbmcJZXJyb3JfZXBjOworCXVuc2lnbmVkIGxvbmcJY2FjaGVfZXJyOworCXVuc2lnbmVkIGxvbmcJbm1pX3NyOworfTsKKworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKworLyogVGhlc2UgYXJlIHRoZSBhc3NlbWJseSBsYW5ndWFnZSBvZmZzZXRzIGludG8gdGhlIHJlZ19zdHJ1Y3Qgc3RydWN0dXJlICovCisKKyNkZWZpbmUgUjBfT0ZGCQkweDAKKyNkZWZpbmUgUjFfT0ZGCQkweDgKKyNkZWZpbmUgUjJfT0ZGCQkweDEwCisjZGVmaW5lIFIzX09GRgkJMHgxOAorI2RlZmluZSBSNF9PRkYJCTB4MjAKKyNkZWZpbmUgUjVfT0ZGCQkweDI4CisjZGVmaW5lIFI2X09GRgkJMHgzMAorI2RlZmluZSBSN19PRkYJCTB4MzgKKyNkZWZpbmUgUjhfT0ZGCQkweDQwCisjZGVmaW5lIFI5X09GRgkJMHg0OAorI2RlZmluZSBSMTBfT0ZGCQkweDUwCisjZGVmaW5lIFIxMV9PRkYJCTB4NTgKKyNkZWZpbmUgUjEyX09GRgkJMHg2MAorI2RlZmluZSBSMTNfT0ZGCQkweDY4CisjZGVmaW5lIFIxNF9PRkYJCTB4NzAKKyNkZWZpbmUgUjE1X09GRgkJMHg3OAorI2RlZmluZSBSMTZfT0ZGCQkweDgwCisjZGVmaW5lIFIxN19PRkYJCTB4ODgKKyNkZWZpbmUgUjE4X09GRgkJMHg5MAorI2RlZmluZSBSMTlfT0ZGCQkweDk4CisjZGVmaW5lIFIyMF9PRkYJCTB4YTAKKyNkZWZpbmUgUjIxX09GRgkJMHhhOAorI2RlZmluZSBSMjJfT0ZGCQkweGIwCisjZGVmaW5lIFIyM19PRkYJCTB4YjgKKyNkZWZpbmUgUjI0X09GRgkJMHhjMAorI2RlZmluZSBSMjVfT0ZGCQkweGM4CisjZGVmaW5lIFIyNl9PRkYJCTB4ZDAKKyNkZWZpbmUgUjI3X09GRgkJMHhkOAorI2RlZmluZSBSMjhfT0ZGCQkweGUwCisjZGVmaW5lIFIyOV9PRkYJCTB4ZTgKKyNkZWZpbmUgUjMwX09GRgkJMHhmMAorI2RlZmluZSBSMzFfT0ZGCQkweGY4CisjZGVmaW5lIFNSX09GRgkJMHgxMDAKKyNkZWZpbmUgQ0FVU0VfT0ZGCTB4MTA4CisjZGVmaW5lIEVQQ19PRkYJCTB4MTEwCisjZGVmaW5lIEJBRFZBX09GRgkweDExOAorI2RlZmluZSBFUlJPUl9FUENfT0ZGCTB4MTIwCisjZGVmaW5lIENBQ0hFX0VSUl9PRkYJMHgxMjgKKyNkZWZpbmUgTk1JU1JfT0ZGCTB4MTMwCisKKyNlbmRpZiAvKiBfX0FTTV9TTl9OTUlfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zbi9zbjAvYWRkcnMuaCBiL2luY2x1ZGUvYXNtLW1pcHMvc24vc24wL2FkZHJzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk4ODE1NgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc24vc24wL2FkZHJzLmgKQEAgLTAsMCArMSwzNjQgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBEZXJpdmVkIGZyb20gSVJJWCA8c3lzL1NOL1NOMC9hZGRycy5oPiwgcmV2aXNpb24gMS4xMjYuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkyIC0gMTk5NywgMTk5OSBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgYnkgUmFsZiBCYWVjaGxlCisgKi8KKyNpZm5kZWYgX0FTTV9TTl9TTjBfQUREUlNfSAorI2RlZmluZSBfQVNNX1NOX1NOMF9BRERSU19ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworLyoKKyAqIFNOMCAob24gYSBUNSkgQWRkcmVzcyBtYXAKKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgYSBzZXQgb2YgZGVmaW5pdGlvbnMgYW5kIG1hY3JvcyB3aGljaCBhcmUgdXNlZAorICogdG8gcmVmZXJlbmNlIGludG8gdGhlIG1ham9yIGFkZHJlc3Mgc3BhY2VzIChDQUMsIEhTUEVDLCBJTywgTVNQRUMsCisgKiBhbmQgVU5DQUMpIHVzZWQgYnkgdGhlIFNOMCBhcmNoaXRlY3R1cmUuICBJdCBhbHNvIGNvbnRhaW5zIGFkZHJlc3NlcworICogZm9yICJtYWpvciIgc3RhdGljYWxseSBsb2NhdGFibGUgUFJPTS9LZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzLCBzdWNoIGFzCisgKiB0aGUgcGFydGl0aW9uIHRhYmxlLCB0aGUgY29uZmlndXJhdGlvbiBkYXRhIHN0cnVjdHVyZSwgZXRjLgorICogV2UgbWFrZSBhbiBpbXBsaWNpdCBhc3N1bXB0aW9uIHRoYXQgdGhlIHByb2Nlc3NvciB1c2luZyB0aGlzIGZpbGUKKyAqIGZvbGxvd3MgdGhlIFIxMEsncyBwcm92aXNpb25zIGZvciBzcGVjaWZ5aW5nIHVuY2FjaGVkIGF0dHJpYnV0ZXM7CisgKiBzaG91bGQgdGhpcyBjaGFuZ2UsIHRoZSBiYXNlIHJlZ2lzdGVycyBtYXkgdmVyeSB3ZWxsIGJlY29tZSBwcm9jZXNzb3ItCisgKiBkZXBlbmRlbnQuCisgKgorICogRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIGFkZHJlc3Mgc3BhY2VzLCBzZWUgdGhlICJMb2NhbCBSZXNvdXJjZXMiCisgKiBjaGFwdGVyIG9mIHRoZSBIdWIgc3BlY2lmaWNhdGlvbi4KKyAqCisgKiBOT1RFOiBUaGlzIGhlYWRlciBmaWxlIGlzIGluY2x1ZGVkIGJvdGggYnkgQyBhbmQgYnkgYXNzZW1ibGVyIHNvdXJjZQorICoJIGZpbGVzLiAgUGxlYXNlIGJyYWNrZXQgYW55IGxhbmd1YWdlLWRlcGVuZGVudCBkZWZpbml0aW9ucworICoJIGFwcHJvcHJpYXRlbHkuCisgKi8KKworLyoKKyAqIFNvbWUgb2YgdGhlIG1hY3JvcyBoZXJlIG5lZWQgdG8gYmUgY2FzdGVkIHRvIGFwcHJvcHJpYXRlIHR5cGVzIHdoZW4gdXNlZAorICogZnJvbSBDLiAgVGhleSBkZWZpbml0ZWx5IG11c3Qgbm90IGJlIGNhc3RlZCBmcm9tIGFzc2VtYmx5IGxhbmd1YWdlIHNvIHdlCisgKiB1c2Ugc29tZSBuZXcgQU5TSSBwcmVwcm9jZXNzb3Igc3R1ZmYgdG8gcGFzdGUgdGhlc2Ugb24gd2hlcmUgbmVlZGVkLgorICovCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGNvdXBsZSBvZiBkZWZpbml0aW9ucyB3aWxsIGV2ZW50dWFsbHkgbmVlZCB0byBiZSB2YXJpYWJsZXMsCisgKiBzaW5jZSB0aGUgYW1vdW50IG9mIGFkZHJlc3Mgc3BhY2UgYXNzaWduZWQgdG8gZWFjaCBub2RlIGRlcGVuZHMgb24KKyAqIHdoZXRoZXIgdGhlIHN5c3RlbSBpcyBydW5uaW5nIGluIE4tbW9kZSAobW9yZSBub2RlcyB3aXRoIGxlc3MgbWVtb3J5KQorICogb3IgTS1tb2RlIChmZXdlciBub2RlcyB3aXRoIG1vcmUgbWVtb3J5KS4gIFdlIGV4cGVjdCB0aGF0IGl0IHdpbGwKKyAqIGJlIGEgd2hpbGUgYmVmb3JlIHdlIG5lZWQgdG8gbWFrZSB0aGlzIGRlY2lzaW9uIGR5bmFtaWNhbGx5LCB0aG91Z2gsCisgKiBzbyBmb3Igbm93IHdlIGp1c3QgdXNlIGRlZmluZXMgYnJhY2tldGVkIGJ5IGFuIGlmZGVmLgorICovCisKKyNpZmRlZiBDT05GSUdfU0dJX1NOMF9OX01PREUKKworI2RlZmluZSBOT0RFX1NJWkVfQklUUwkJMzEKKyNkZWZpbmUgQldJTl9TSVpFX0JJVFMJCTI4CisKKyNkZWZpbmUgTkFTSURfQklUUwkJOQorI2RlZmluZSBOQVNJRF9CSVRNQVNLCQkoMHgxZmZMTCkKKyNkZWZpbmUgTkFTSURfU0hGVAkJMzEKKyNkZWZpbmUgTkFTSURfTUVUQV9CSVRTCQk1CisjZGVmaW5lIE5BU0lEX0xPQ0FMX0JJVFMJNAorCisjZGVmaW5lIEJERElSX1VQUEVSX01BU0sJKFVJTlQ2NF9DQVNUIDB4N2ZmZmYgPDwgMTApCisjZGVmaW5lIEJERUNDX1VQUEVSX01BU0sJKFVJTlQ2NF9DQVNUIDB4M2ZmZmZmZiA8PCAzKQorCisjZWxzZSAvKiAhZGVmaW5lZChDT05GSUdfU0dJX1NOMF9OX01PREUpLCBhc3N1bWUgdGhhdCBNLW1vZGUgaXMgZGVzaXJlZCAqLworCisjZGVmaW5lIE5PREVfU0laRV9CSVRTCQkzMgorI2RlZmluZSBCV0lOX1NJWkVfQklUUwkJMjkKKworI2RlZmluZSBOQVNJRF9CSVRNQVNLCQkoMHhmZkxMKQorI2RlZmluZSBOQVNJRF9CSVRTCQk4CisjZGVmaW5lIE5BU0lEX1NIRlQJCTMyCisjZGVmaW5lIE5BU0lEX01FVEFfQklUUwkJNAorI2RlZmluZSBOQVNJRF9MT0NBTF9CSVRTCTQKKworI2RlZmluZSBCRERJUl9VUFBFUl9NQVNLCShVSU5UNjRfQ0FTVCAweGZmZmZmIDw8IDEwKQorI2RlZmluZSBCREVDQ19VUFBFUl9NQVNLCShVSU5UNjRfQ0FTVCAweDdmZmZmZmYgPDwgMykKKworI2VuZGlmIC8qICFkZWZpbmVkKENPTkZJR19TR0lfU04wX05fTU9ERSkgKi8KKworI2RlZmluZSBOT0RFX0FERFJTUEFDRV9TSVpFCShVSU5UNjRfQ0FTVCAxIDw8IE5PREVfU0laRV9CSVRTKQorCisjZGVmaW5lIE5BU0lEX01BU0sJCShVSU5UNjRfQ0FTVCBOQVNJRF9CSVRNQVNLIDw8IE5BU0lEX1NIRlQpCisjZGVmaW5lIE5BU0lEX0dFVChfcGEpCQkoaW50KSAoKFVJTlQ2NF9DQVNUIChfcGEpID4+CQlcCisJCQkJCU5BU0lEX1NIRlQpICYgTkFTSURfQklUTUFTSykKKworI2lmICFkZWZpbmVkKF9fQVNTRU1CTFlfXykgJiYgIWRlZmluZWQoX1NUQU5EQUxPTkUpCisKKyNkZWZpbmUgTk9ERV9TV0lOX0JBU0UobmFzaWQsIHdpZGdldCkJCQkJCVwKKwkoKHdpZGdldCA9PSAwKSA/IE5PREVfQldJTl9CQVNFKChuYXNpZCksIFNXSU4wX0JJR1dJTikJCVwKKwk6IFJBV19OT0RFX1NXSU5fQkFTRShuYXNpZCwgd2lkZ2V0KSkKKyNlbHNlIC8qIF9fQVNTRU1CTFlfXyB8fCBfU1RBTkRBTE9ORSAqLworI2RlZmluZSBOT0RFX1NXSU5fQkFTRShuYXNpZCwgd2lkZ2V0KSBcCisgICAgIChOT0RFX0lPX0JBU0UobmFzaWQpICsgKFVJTlQ2NF9DQVNUICh3aWRnZXQpIDw8IFNXSU5fU0laRV9CSVRTKSkKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gfHwgX1NUQU5EQUxPTkUgKi8KKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbnMgcGVydGFpbiB0byB0aGUgSU8gc3BlY2lhbCBhZGRyZXNzCisgKiBzcGFjZS4gIFRoZXkgZGVmaW5lIHRoZSBsb2NhdGlvbiBvZiB0aGUgYmlnIGFuZCBsaXR0bGUgd2luZG93cworICogb2YgYW55IGdpdmVuIG5vZGUuCisgKi8KKworI2RlZmluZSBCV0lOX0lOREVYX0JJVFMJCTMKKyNkZWZpbmUgQldJTl9TSVpFCQkoVUlOVDY0X0NBU1QgMSA8PCBCV0lOX1NJWkVfQklUUykKKyNkZWZpbmUJQldJTl9TSVpFTUFTSwkJKEJXSU5fU0laRSAtIDEpCisjZGVmaW5lCUJXSU5fV0lER0VUX01BU0sJMHg3CisjZGVmaW5lIE5PREVfQldJTl9CQVNFMChuYXNpZCkJKE5PREVfSU9fQkFTRShuYXNpZCkgKyBCV0lOX1NJWkUpCisjZGVmaW5lIE5PREVfQldJTl9CQVNFKG5hc2lkLCBiaWd3aW4pCShOT0RFX0JXSU5fQkFTRTAobmFzaWQpICsgCVwKKwkJCShVSU5UNjRfQ0FTVCAoYmlnd2luKSA8PCBCV0lOX1NJWkVfQklUUykpCisKKyNkZWZpbmUJQldJTl9XSURHRVRBRERSKGFkZHIpCSgoYWRkcikgJiBCV0lOX1NJWkVNQVNLKQorI2RlZmluZQlCV0lOX1dJTkRPV05VTShhZGRyKQkoKChhZGRyKSA+PiBCV0lOX1NJWkVfQklUUykgJiBCV0lOX1dJREdFVF9NQVNLKQorLyoKKyAqIFZlcmlmeSBpZiBhZGRyIGJlbG9uZ3MgdG8gbGFyZ2Ugd2luZG93IGFkZHJlc3Mgb2Ygbm9kZSB3aXRoICJuYXNpZCIKKyAqCisgKgorICogTk9URTogImFkZHIiIGlzIGV4cGVjdGVkIHRvIGJlIFhLUEhZUyBhZGRyZXNzLCBhbmQgTk9UIHBoeXNpY2FsCisgKiBhZGRyZXNzCisgKgorICoKKyAqLworCisjZGVmaW5lCU5PREVfQldJTl9BRERSKG5hc2lkLCBhZGRyKQlcCisJCSgoKGFkZHIpID49IE5PREVfQldJTl9CQVNFMChuYXNpZCkpICYmIFwKKwkJICgoYWRkcikgPCAoTk9ERV9CV0lOX0JBU0UobmFzaWQsIEhVQl9OVU1fQklHX1dJTkRPVykgKyBcCisJCQkJQldJTl9TSVpFKSkpCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGRlZmluZSB0aGUgbWFqb3IgcG9zaXRpb24taW5kZXBlbmRlbnQgYWxpYXNlcyB1c2VkCisgKiBpbiBTTjAuCisgKglDQUxJQVMgLS0gVmFyaWVzIGluIHNpemUsIHBvaW50cyB0byB0aGUgZmlyc3QgbiBieXRlcyBvZiBtZW1vcnkKKyAqCQkgIAlvbiB0aGUgcmVhZGVyJ3Mgbm9kZS4KKyAqLworCisjZGVmaW5lIENBTElBU19CQVNFCQlDQUNfQkFTRQorCisKKworI2RlZmluZSBCUklER0VfUkVHX1BUUihfYmFzZSwgX29mZikJKCh2b2xhdGlsZSBicmlkZ2VyZWdfdCAqKSBcCisJKChfX3BzdW5zaWduZWRfdCkoX2Jhc2UpICsgKF9fcHN1bnNpZ25lZF90KShfb2ZmKSkpCisKKyNkZWZpbmUgU04wX1dJREdFVF9CQVNFKF9uYXNpZCwgX3dpZCkJKE5PREVfU1dJTl9CQVNFKChfbmFzaWQpLCAoX3dpZCkpKQorCisvKiBUdXJuIG9uIHNhYmxlIGxvZ2dpbmcgZm9yIHRoZSBwcm9jZXNzb3JzIHdob3NlIGJpdHMgYXJlIHNldC4gKi8KKyNpZmRlZiBTQUJMRQorI2RlZmluZSBTQUJMRV9MT0dfVFJJR0dFUihfbWFwKQlcCisJCSooKHZvbGF0aWxlIGh1YnJlZ190ICopKElPX0JBU0UgKyAweDE3ZmZmZjApKSA9IChfbWFwKQorI2Vsc2UKKyNkZWZpbmUgU0FCTEVfTE9HX1RSSUdHRVIoX21hcCkKKyNlbmRpZiAvKiBTQUJMRSAqLworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2RlZmluZSBLRVJOX05NSV9BRERSKG5hc2lkLCBzbGljZSkJCQkJCVwKKyAgICAgICAgICAgICAgICAgICAgVE9fTk9ERV9VTkNBQygobmFzaWQpLCBJUDI3X05NSV9LUkVHU19PRkZTRVQgKyAJXAorCQkJCSAgKElQMjdfTk1JX0tSRUdTX0NQVV9TSVpFICogKHNsaWNlKSkpCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisjaWZkZWYgUFJPTQorCisjZGVmaW5lIE1JU0NfUFJPTV9CQVNFCQlQSFlTX1RPX0swKDB4MDEzMDAwMDApCisjZGVmaW5lIE1JU0NfUFJPTV9TSVpFCQkweDIwMDAwMAorCisjZGVmaW5lIERJQUdfQkFTRQkJUEhZU19UT19LMCgweDAxNTAwMDAwKQorI2RlZmluZSBESUFHX1NJWkUJCTB4MzAwMDAwCisKKyNkZWZpbmUgUk9VVEVfQkFTRQkJUEhZU19UT19LMCgweDAxODAwMDAwKQorI2RlZmluZSBST1VURV9TSVpFCQkweDIwMDAwMAorCisjZGVmaW5lIElQMjdQUk9NX0ZMQVNIX0hEUglQSFlTX1RPX0swKDB4MDEzMDAwMDApCisjZGVmaW5lIElQMjdQUk9NX0ZMQVNIX0RBVEEJUEhZU19UT19LMCgweDAxMzAxMDAwKQorI2RlZmluZSBJUDI3UFJPTV9DT1JQX01BWAkzMgorI2RlZmluZSBJUDI3UFJPTV9DT1JQCQlQSFlTX1RPX0swKDB4MDE4MDAwMDApCisjZGVmaW5lIElQMjdQUk9NX0NPUlBfU0laRQkweDEwMDAwCisjZGVmaW5lIElQMjdQUk9NX0NPUlBfU1RLCVBIWVNfVE9fSzAoMHgwMTgxMDAwMCkKKyNkZWZpbmUgSVAyN1BST01fQ09SUF9TVEtTSVpFCTB4MjAwMAorI2RlZmluZSBJUDI3UFJPTV9ERUNPTVBfQlVGCVBIWVNfVE9fSzAoMHgwMTkwMDAwMCkKKyNkZWZpbmUgSVAyN1BST01fREVDT01QX1NJWkUJMHhmZmYwMAorCisjZGVmaW5lIElQMjdQUk9NX0JBU0UJCVBIWVNfVE9fSzAoMHgwMWEwMDAwMCkKKyNkZWZpbmUgSVAyN1BST01fQkFTRV9NQVBQRUQJKFVOQ0FDX0JBU0UgfCAweDFmYzAwMDAwKQorI2RlZmluZSBJUDI3UFJPTV9TSVpFX01BWAkweDEwMDAwMAorCisjZGVmaW5lIElQMjdQUk9NX1BDRkcJCVBIWVNfVE9fSzAoMHgwMWIwMDAwMCkKKyNkZWZpbmUgSVAyN1BST01fUENGR19TSVpFCTB4ZDAwMDAKKyNkZWZpbmUgSVAyN1BST01fRVJSRE1QCQlQSFlTX1RPX0sxKDB4MDFiZDAwMDApCisjZGVmaW5lIElQMjdQUk9NX0VSUkRNUF9TSVpFCTB4ZjAwMAorCisjZGVmaW5lIElQMjdQUk9NX0lOSVRfU1RBUlQJUEhZU19UT19LMSgweDAxYmQwMDAwKQorI2RlZmluZSBJUDI3UFJPTV9DT05TT0xFCVBIWVNfVE9fSzEoMHgwMWJkZjAwMCkKKyNkZWZpbmUgSVAyN1BST01fQ09OU09MRV9TSVpFCTB4MjAwCisjZGVmaW5lIElQMjdQUk9NX05FVFVBUlQJUEhZU19UT19LMSgweDAxYmRmMjAwKQorI2RlZmluZSBJUDI3UFJPTV9ORVRVQVJUX1NJWkUJMHgxMDAKKyNkZWZpbmUgSVAyN1BST01fVU5VU0VEMQlQSFlTX1RPX0sxKDB4MDFiZGYzMDApCisjZGVmaW5lIElQMjdQUk9NX1VOVVNFRDFfU0laRQkweDUwMAorI2RlZmluZSBJUDI3UFJPTV9FTFNDX0JBU0VfQQlQSFlTX1RPX0swKDB4MDFiZGY4MDApCisjZGVmaW5lIElQMjdQUk9NX0VMU0NfQkFTRV9CCVBIWVNfVE9fSzAoMHgwMWJkZmMwMCkKKyNkZWZpbmUgSVAyN1BST01fU1RBQ0tfQQlQSFlTX1RPX0swKDB4MDFiZTAwMDApCisjZGVmaW5lIElQMjdQUk9NX1NUQUNLX0IJUEhZU19UT19LMCgweDAxYmYwMDAwKQorI2RlZmluZSBJUDI3UFJPTV9TVEFDS19TSEZUCTE2CisjZGVmaW5lIElQMjdQUk9NX1NUQUNLX1NJWkUJKDEgPDwgSVAyN1BST01fU1RBQ0tfU0hGVCkKKyNkZWZpbmUgSVAyN1BST01fSU5JVF9FTkQJUEhZU19UT19LMCgweDAxYzAwMDAwKQorCisjZGVmaW5lIFNMQVZFU1RBQ0tfQkFTRQkJUEhZU19UT19LMCgweDAxNTgwMDAwKQorI2RlZmluZSBTTEFWRVNUQUNLX1NJWkUJCTB4NDAwMDAKKworI2RlZmluZSBFTkVUQlVGU19CQVNFCQlQSFlTX1RPX0swKDB4MDFmODAwMDApCisjZGVmaW5lIEVORVRCVUZTX1NJWkUJCTB4MjAwMDAKKworI2RlZmluZSBJTzZQUk9NX0JBU0UJCVBIWVNfVE9fSzAoMHgwMWMwMDAwMCkKKyNkZWZpbmUgSU82UFJPTV9TSVpFCQkweDQwMDAwMAorI2RlZmluZQlJTzZQUk9NX0JBU0VfTUFQUEVECShVTkNBQ19CQVNFIHwgMHgxMWMwMDAwMCkKKyNkZWZpbmUgSU82RFBST01fQkFTRQkJUEhZU19UT19LMCgweDAxYzAwMDAwKQorI2RlZmluZSBJTzZEUFJPTV9TSVpFCQkweDIwMDAwMAorCisjZGVmaW5lIE5PREVCVUdVTklYX0FERFIJUEhZU19UT19LMCgweDAwMDE5MDAwKQorI2RlZmluZSBERUJVR1VOSVhfQUREUgkJUEhZU19UT19LMCgweDAwMTAwMDAwKQorCisjZGVmaW5lIElQMjdQUk9NX0lOVF9MQVVOQ0gJMTAJLyogYW5kIDExICovCisjZGVmaW5lIElQMjdQUk9NX0lOVF9ORVRVQVJUCTEyCS8qIHRocm91Z2ggMTcgKi8KKworI2VuZGlmIC8qIFBST00gKi8KKworLyoKKyAqIG5lZWRlZCBieSBzeW1tb24gc28gaXQgbmVlZHMgdG8gYmUgb3V0c2lkZSAjaWYgUFJPTQorICovCisjZGVmaW5lIElQMjdQUk9NX0VMU0NfU0hGVAkxMAorI2RlZmluZSBJUDI3UFJPTV9FTFNDX1NJWkUJKDEgPDwgSVAyN1BST01fRUxTQ19TSEZUKQorCisvKgorICogVGhpcyBhZGRyZXNzIGlzIHVzZWQgYnkgSU82UFJPTSB0byBidWlsZCBNZW1vcnlEZXNjcmlwdG9ycyBvZgorICogZnJlZSBtZW1vcnkuIFRoaXMgYWRkcmVzcyBpcyBpbXBvcnRhbnQgc2luY2UgdW5peCBnZXRzIGxvYWRlZAorICogYXQgdGhpcyBhZGRyZXNzLCBhbmQgdGhpcyBtZW1vcnkgaGFzIHRvIGJlIEZSRUUgaWYgdW5peCBpcyB0bworICogYmUgbG9hZGVkLgorICovCisKKyNkZWZpbmUgRlJFRU1FTV9CQVNFCQlQSFlTX1RPX0swKDB4MjAwMDAwMCkKKworI2RlZmluZSBJTzZQUk9NX1NUQUNLX1NIRlQJMTQJLyogc3RhY2sgcGVyIGNwdSAqLworI2RlZmluZSBJTzZQUk9NX1NUQUNLX1NJWkUJKDEgPDwgSU82UFJPTV9TVEFDS19TSEZUKQorCisvKgorICogSVAyNyBQUk9NIHZlY3RvcnMKKyAqLworCisjZGVmaW5lIElQMjdQUk9NX0VOVFJZCQlQSFlTX1RPX0NPTVBBVEsxKDB4MWZjMDAwMDApCisjZGVmaW5lIElQMjdQUk9NX1JFU1RBUlQJUEhZU19UT19DT01QQVRLMSgweDFmYzAwMDA4KQorI2RlZmluZSBJUDI3UFJPTV9TTEFWRUxPT1AJUEhZU19UT19DT01QQVRLMSgweDFmYzAwMDEwKQorI2RlZmluZSBJUDI3UFJPTV9QT0RNT0RFCVBIWVNfVE9fQ09NUEFUSzEoMHgxZmMwMDAxOCkKKyNkZWZpbmUgSVAyN1BST01fSU9DM1VBUlRQT0QJUEhZU19UT19DT01QQVRLMSgweDFmYzAwMDIwKQorI2RlZmluZSBJUDI3UFJPTV9GTEFTSExFRFMJUEhZU19UT19DT01QQVRLMSgweDFmYzAwMDI4KQorI2RlZmluZSBJUDI3UFJPTV9SRVBPRAkJUEhZU19UT19DT01QQVRLMSgweDFmYzAwMDMwKQorI2RlZmluZSBJUDI3UFJPTV9MQVVOQ0hTTEFWRQlQSFlTX1RPX0NPTVBBVEsxKDB4MWZjMDAwMzgpCisjZGVmaW5lIElQMjdQUk9NX1dBSVRTTEFWRQlQSFlTX1RPX0NPTVBBVEsxKDB4MWZjMDAwNDApCisjZGVmaW5lIElQMjdQUk9NX1BPTExTTEFWRQlQSFlTX1RPX0NPTVBBVEsxKDB4MWZjMDAwNDgpCisKKyNkZWZpbmUgS0xfVUFSVF9CQVNFCUxPQ0FMX0hVQl9BRERSKE1EX1VSRUcwXzApCS8qIGJhc2Ugb2YgVUFSVCByZWdzICovCisjZGVmaW5lIEtMX1VBUlRfQ01ECUxPQ0FMX0hVQl9BRERSKE1EX1VSRUcwXzApCS8qIFVBUlQgY29tbWFuZCByZWcgKi8KKyNkZWZpbmUgS0xfVUFSVF9EQVRBCUxPQ0FMX0hVQl9BRERSKE1EX1VSRUcwXzEpCS8qIFVBUlQgZGF0YSByZWcgKi8KKyNkZWZpbmUgS0xfSTJDX1JFRwlNRF9VUkVHMF8wCQkJLyogSTJDIHJlZyAqLworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisvKiBBZGRyZXNzIDB4NDAwIHRvIDB4MTAwMCB1YWxpYXMgcG9pbnRzIHRvIGNhY2hlIGVycm9yIGVmcmFtZSArIG1pc2MKKyAqIENBQ0hFX0VSUl9TUF9QVFIgY291bGQgZWl0aGVyIGNvbnRhaW4gYW4gYWRkcmVzcyB0byB0aGUgc3RhY2ssIG9yCisgKiB0aGUgc3RhY2sgY291bGQgc3RhcnQgYXQgQ0FDSEVfRVJSX1NQX1BUUgorICovCisjaWYgZGVmaW5lZCAoSFVCX0VSUl9TVFNfV0FSKQorI2RlZmluZSBDQUNIRV9FUlJfRUZSQU1FCTB4NDgwCisjZWxzZSAvKiBIVUJfRVJSX1NUU19XQVIgKi8KKyNkZWZpbmUgQ0FDSEVfRVJSX0VGUkFNRQkweDQwMAorI2VuZGlmIC8qIEhVQl9FUlJfU1RTX1dBUiAqLworCisjZGVmaW5lIENBQ0hFX0VSUl9FQ0NGUkFNRQkoQ0FDSEVfRVJSX0VGUkFNRSArIEVGX1NJWkUpCisjZGVmaW5lIENBQ0hFX0VSUl9TUF9QVFIJKDB4MTAwMCAtIDMyKQkvKiB3aHkgLTMyPyBUQkQgKi8KKyNkZWZpbmUgQ0FDSEVfRVJSX0lCQVNFX1BUUgkoMHgxMDAwIC0gNDApCisjZGVmaW5lIENBQ0hFX0VSUl9TUAkJKENBQ0hFX0VSUl9TUF9QVFIgLSAxNikKKyNkZWZpbmUgQ0FDSEVfRVJSX0FSRUFfU0laRQkoQVJDU19TUEJfT0ZGU0VUIC0gQ0FDSEVfRVJSX0VGUkFNRSkKKworI2VuZGlmCS8qICFfX0FTU0VNQkxZX18gKi8KKworI2RlZmluZSBfQVJDU1BST00KKworI2lmZGVmIF9TVEFOREFMT05FCisKKy8qCisgKiBUaGUgUFJPTSBuZWVkcyB0byBwYXNzIHRoZSBkZXZpY2UgYmFzZSBhZGRyZXNzIGFuZCB0aGUKKyAqIGRldmljZSBwY2kgY2ZnIHNwYWNlIGFkZHJlc3MgdG8gdGhlIGRldmljZSBkcml2ZXJzIGR1cmluZworICogaW5zdGFsbC4gVGhlIENPTVBPTkVOVC0+S2V5IGZpZWxkIGlzIHVzZWQgZm9yIHRoaXMgcHVycG9zZS4KKyAqIE1hY3JvcyBuZWVkZWQgYnkgU04wIGRldmljZSBkcml2ZXJzIHRvIGNvbnZlcnQgdGhlCisgKiBDT01QT05FTlQtPktleSBmaWVsZCB0byB0aGUgcmVzcGVjdGl2ZSBiYXNlIGFkZHJlc3MuCisgKiBLZXkgZmllbGQgbG9va3MgYXMgZm9sbG93czoKKyAqCisgKiAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgKiAgfGRldm5hc2lkIHwgd2lkZ2V0ICB8cGNpaWQgfGh1YndpZGlkfGhzdG5hc2lkIHwgYWRhcCB8CisgKiAgfCAgIDIgICAgIHwgICAxICAgICB8ICAxICAgfCAgIDEgICAgfCAgICAyICAgIHwgICAxICB8CisgKiAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgKiAgfCAgICAgICAgIHwgICAgICAgICB8ICAgICAgfCAgICAgICAgfCAgICAgICAgIHwgICAgICB8CisgKiAgNjQgICAgICAgIDQ4ICAgICAgICA0MCAgICAgMzIgICAgICAgMjQgICAgICAgIDggICAgICAwCisgKgorICogVGhlc2UgYXJlIHVzZWQgYnkgc3RhbmRhbG9uZSBkcml2ZXJzIHRpbGwgdGhlIGlvIGluZnJhc3RydWN0dXJlCisgKiBpcyBpbiBwbGFjZS4KKyAqLworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjZGVmaW5lIHVjaGFyIHVuc2lnbmVkIGNoYXIKKworI2RlZmluZSBLRVlfREVWTkFTSURfU0hGVCAgNDgKKyNkZWZpbmUgS0VZX1dJRElEX1NIRlQJICAgNDAKKyNkZWZpbmUgS0VZX1BDSUlEX1NIRlQJICAgMzIKKyNkZWZpbmUgS0VZX0hVQldJRF9TSEZUCSAgIDI0CisjZGVmaW5lIEtFWV9IU1ROQVNJRF9TSEZUICA4CisKKyNkZWZpbmUgTUtfU04wX0tFWShuYXNpZCwgd2lkaWQsIHBjaWlkKSBcCisJCQkoKCgoX19wc3Vuc2lnbmVkX3QpbmFzaWQpPDwgS0VZX0RFVk5BU0lEX1NIRlQgfFwKKwkJCQkoKF9fcHN1bnNpZ25lZF90KXdpZGlkKSA8PCBLRVlfV0lESURfU0hGVCkgfFwKKwkJCQkoKF9fcHN1bnNpZ25lZF90KXBjaWlkKSA8PCBLRVlfUENJSURfU0hGVCkKKworI2RlZmluZSBBRERfSFVCV0lEX0tFWShrZXksaHVid2lkKVwKKwkJCShrZXl8PSgoX19wc3Vuc2lnbmVkX3QpaHVid2lkIDw8IEtFWV9IVUJXSURfU0hGVCkpCisKKyNkZWZpbmUgQUREX0hTVE5BU0lEX0tFWShrZXksaHN0bmFzaWQpXAorCQkJKGtleXw9KChfX3BzdW5zaWduZWRfdCloc3RuYXNpZCA8PCBLRVlfSFNUTkFTSURfU0hGVCkpCisKKyNkZWZpbmUgR0VUX0RFVk5BU0lEX0ZST01fS0VZKGtleSkJKChzaG9ydCkoa2V5ID4+IEtFWV9ERVZOQVNJRF9TSEZUKSkKKyNkZWZpbmUgR0VUX1dJRElEX0ZST01fS0VZKGtleSkJCSgodWNoYXIpKGtleSA+PiBLRVlfV0lESURfU0hGVCkpCisjZGVmaW5lIEdFVF9QQ0lJRF9GUk9NX0tFWShrZXkpCQkoKHVjaGFyKShrZXkgPj4gS0VZX1BDSUlEX1NIRlQpKQorI2RlZmluZSBHRVRfSFVCV0lEX0ZST01fS0VZKGtleSkJKCh1Y2hhcikoa2V5ID4+IEtFWV9IVUJXSURfU0hGVCkpCisjZGVmaW5lIEdFVF9IU1ROQVNJRF9GUk9NX0tFWShrZXkpCSgoc2hvcnQpKGtleSA+PiBLRVlfSFNUTkFTSURfU0hGVCkpCisKKyNkZWZpbmUgUENJXzY0X1RBUkdJRF9TSEZUCQk2MAorCisjZGVmaW5lIEdFVF9QQ0lCQVNFX0ZST01fS0VZKGtleSkgIChOT0RFX1NXSU5fQkFTRShHRVRfREVWTkFTSURfRlJPTV9LRVkoa2V5KSxcCisJCQkJCUdFVF9XSURJRF9GUk9NX0tFWShrZXkpKVwKKwkJCQkJfCBCUklER0VfREVWSU8oR0VUX1BDSUlEX0ZST01fS0VZKGtleSkpKQorCisjZGVmaW5lIEdFVF9QQ0lDRkdCQVNFX0ZST01fS0VZKGtleSkgXAorCQkJKE5PREVfU1dJTl9CQVNFKEdFVF9ERVZOQVNJRF9GUk9NX0tFWShrZXkpLFwKKwkJCSAgICAgIEdFVF9XSURJRF9GUk9NX0tFWShrZXkpKVwKKwkJCXwgQlJJREdFX1RZUEUwX0NGR19ERVYoR0VUX1BDSUlEX0ZST01fS0VZKGtleSkpKQorCisjZGVmaW5lIEdFVF9XSURCQVNFX0ZST01fS0VZKGtleSkgXAorICAgICAgICAgICAgICAgICAgICAgICAgKE5PREVfU1dJTl9CQVNFKEdFVF9ERVZOQVNJRF9GUk9NX0tFWShrZXkpLFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFVF9XSURJRF9GUk9NX0tFWShrZXkpKSkKKworI2RlZmluZSBQVVRfSU5TVEFMTF9TVEFUVVMoYyxzKQkJYy0+UmV2aXNpb24gPSBzCisjZGVmaW5lIEdFVF9JTlNUQUxMX1NUQVRVUyhjKQkJYy0+UmV2aXNpb24KKworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKworI2VuZGlmIC8qIF9TVEFOREFMT05FICovCisKKyNpZiBkZWZpbmVkIChIVUJfRVJSX1NUU19XQVIpCisKKyNkZWZpbmUgRVJSX1NUU19XQVJfUkVHSVNURVIJSUlPX0lJQlVTRVJSCisjZGVmaW5lIEVSUl9TVFNfV0FSX0FERFIJTE9DQUxfSFVCX0FERFIoSUlPX0lJQlVTRVJSKQorI2RlZmluZSBFUlJfU1RTX1dBUl9QSFlTQUREUglUT19QSFlTKChfX3BzdW5zaWduZWRfdClFUlJfU1RTX1dBUl9BRERSKQorCQkJCS8qIFVzZWQgdG8gbWF0Y2ggYWRkciBpbiBlcnJvciByZWcuICovCisjZGVmaW5lIE9MRF9FUlJfU1RTX1dBUl9PRkZTRVQJKChNRF9NRU1fQkFOS1MgKiBNRF9CQU5LX1NJWkUpIC0gMHgxMDApCisKKyNlbmRpZiAvKiBIVUJfRVJSX1NUU19XQVIgKi8KKworI2VuZGlmIC8qIF9BU01fU05fU04wX0FERFJTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc24vc24wL2FyY2guaCBiL2luY2x1ZGUvYXNtLW1pcHMvc24vc24wL2FyY2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTAwZGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zbi9zbjAvYXJjaC5oCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBTR0kgSVAyNyBzcGVjaWZpYyBzZXR1cC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUgLSAxOTk3LCAxOTk5IFNpbGNvbiBHcmFwaGljcywgSW5jLgorICogQ29weXJpZ2h0IChDKSAxOTk5IFJhbGYgQmFlY2hsZSAocmFsZkBnbnUub3JnKQorICovCisjaWZuZGVmIF9BU01fU05fU04wX0FSQ0hfSAorI2RlZmluZSBfQVNNX1NOX1NOMF9BUkNIX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjaWZuZGVmIFNBQkxFCisKKyNpZm5kZWYgU04wWFhMICAvKiAxMjggY3B1IFNNUCBtYXggKi8KKy8qCisgKiBUaGlzIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBub2RlcyB0aGF0IGNhbiBiZSBwYXJ0IG9mIGEga2VybmVsLgorICogRWZmZWN0aXZlbHksIGl0J3MgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNvbXBhY3Qgbm9kZSBpZHMgKGNub2RlaWRfdCkuCisgKi8KKyNkZWZpbmUgTUFYX0NPTVBBQ1RfTk9ERVMgICAgICAgNjQKKworLyoKKyAqIE1BWENQVVMgcmVmZXJzIHRvIHRoZSBtYXhpbXVtIG51bWJlciBvZiBDUFVzIGluIGEgc2luZ2xlIGtlcm5lbC4KKyAqIFRoaXMgaXMgbm90IG5lY2Vzc2FyaWx5IHRoZSBzYW1lIGFzIE1BWE5PREVTICogQ1BVU19QRVJfTk9ERQorICovCisjZGVmaW5lIE1BWENQVVMgICAgICAgICAgICAgICAgIDEyOAorCisjZWxzZSAvKiBTTjBYWEwgc3lzdGVtICovCisKKyNkZWZpbmUgTUFYX0NPTVBBQ1RfTk9ERVMgICAgICAgMTI4CisjZGVmaW5lIE1BWENQVVMgICAgICAgICAgICAgICAgIDI1NgorCisjZW5kaWYgLyogU04wWFhMICovCisKKy8qCisgKiBUaGlzIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBOQVNJRFMgdGhhdCBjYW4gYmUgcHJlc2VudCBpbiBhIHN5c3RlbS4KKyAqIChIaWdoZXN0IE5BU0lEIHBsdXMgb25lLikKKyAqLworI2RlZmluZSBNQVhfTkFTSURTCQkyNTYKKworLyoKKyAqIE1BWF9SRUdJT05TIHJlZmVycyB0byB0aGUgbWF4aW11bSBudW1iZXIgb2YgaGFyZHdhcmUgcGFydGl0aW9uZWQgcmVnaW9ucy4KKyAqLworI2RlZmluZQlNQVhfUkVHSU9OUwkJNjQKKyNkZWZpbmUgTUFYX05PTlBSRU1JVU1fUkVHSU9OUyAgMTYKKyNkZWZpbmUgTUFYX1BSRU1JVU1fUkVHSU9OUyAgICAgTUFYX1JFR0lPTlMKKworLyoKKyAqIE1BWF9QQVJJVElPTlMgcmVmZXJzIHRvIHRoZSBtYXhpbXVtIG51bWJlciBvZiBsb2dpY2FsbHkgZGVmaW5lZAorICogcGFydGl0aW9ucyB0aGUgc3lzdGVtIGNhbiBzdXBwb3J0LgorICovCisjZGVmaW5lIE1BWF9QQVJUSVRJT05TCQlNQVhfUkVHSU9OUworCisKKyNlbHNlCisKKyNkZWZpbmUgTUFYX0NPTVBBQ1RfTk9ERVMJNAorI2RlZmluZSBNQVhfTkFTSURTCQk0CisjZGVmaW5lIE1BWENQVVMJCQk4CisKKyNlbmRpZgorCisjZGVmaW5lIE5BU0lEX01BU0tfQllURVMJKChNQVhfTkFTSURTICsgNykgLyA4KQorCisvKgorICogU2xvdCBjb25zdGFudHMgZm9yIFNOMAorICovCisjaWZkZWYgQ09ORklHX1NHSV9TTjBfTl9NT0RFCisjZGVmaW5lIE1BWF9NRU1fU0xPVFMgICAxNiAgICAgICAgICAgICAgICAgICAgICAvKiBtYXggc2xvdHMgcGVyIG5vZGUgKi8KKyNlbHNlIC8qICFDT05GSUdfU0dJX1NOMF9OX01PREUsIGFzc3VtZSBNX01PREUgKi8KKyNkZWZpbmUgTUFYX01FTV9TTE9UUyAgIDMyICAgICAgICAgICAgICAgICAgICAgIC8qIG1heCBzbG90cyBwZXIgbm9kZSAqLworI2VuZGlmIC8qIGRlZmluZWQoTl9NT0RFKSAqLworCisjaWYgU0FCTEVfUlRMCisjZGVmaW5lIFNMT1RfU0hJRlQgICAgICAJKDI4KQorI2RlZmluZSBTTE9UX01JTl9NRU1fU0laRQkoMTYqMTAyNCoxMDI0KQorI2Vsc2UKKyNkZWZpbmUgU0xPVF9TSElGVCAgICAgIAkoMjcpCisjZGVmaW5lIFNMT1RfTUlOX01FTV9TSVpFCSgzMioxMDI0KjEwMjQpCisjZW5kaWYKKworI2RlZmluZSBDUFVTX1BFUl9OT0RFCQkyCS8qIENQVXMgb24gYSBzaW5nbGUgaHViICovCisjZGVmaW5lIENQVVNfUEVSX05PREVfU0hGVAkxCS8qIEJpdHMgdG8gc2hpZnQgaW4gdGhlIG5vZGUgbnVtYmVyICovCisjZGVmaW5lIENQVVNfUEVSX1NVQk5PREUJMgkvKiBDUFVzIG9uIGEgc2luZ2xlIGh1YiBQSSAqLworCisjZW5kaWYgLyogX0FTTV9TTl9TTjBfQVJDSF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NuL3NuMC9odWIuaCBiL2luY2x1ZGUvYXNtLW1pcHMvc24vc24wL2h1Yi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1ZGJiYTYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NuL3NuMC9odWIuaApAQCAtMCwwICsxLDQ0IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkyIC0gMTk5NywgMTk5OSBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgYnkgUmFsZiBCYWVjaGxlCisgKi8KKyNpZm5kZWYgX0FTTV9TTl9TTjBfSFVCX0gKKyNkZWZpbmUgX0FTTV9TTl9TTjBfSFVCX0gKKworLyogVGhlIHNlY3JldCBwYXNzd29yZDsgdXNlZCB0byByZWxlYXNlIHByb3RlY3Rpb24gKi8KKyNkZWZpbmUgSFVCX1BBU1NXT1JECQkweDUzNDc0OTcyNzU2YzY1NzN1bGwKKworI2RlZmluZSBDSElQSURfSFVCCQkwCisjZGVmaW5lIENISVBJRF9ST1VURVIJCTEKKworI2RlZmluZSBIVUJfUkVWXzFfMAkJMQorI2RlZmluZSBIVUJfUkVWXzJfMAkJMgorI2RlZmluZSBIVUJfUkVWXzJfMQkJMworI2RlZmluZSBIVUJfUkVWXzJfMgkJNAorI2RlZmluZSBIVUJfUkVWXzJfMyAgICAgICAgICAgICA1CisjZGVmaW5lIEhVQl9SRVZfMl80ICAgICAgICAgICAgIDYKKworI2RlZmluZSBNQVhfSFVCX1BBVEgJCTgwCisKKyNpbmNsdWRlIDxhc20vc24vc24wL2FkZHJzLmg+CisjaW5jbHVkZSA8YXNtL3NuL3NuMC9odWJwaS5oPgorI2luY2x1ZGUgPGFzbS9zbi9zbjAvaHVibWQuaD4KKyNpbmNsdWRlIDxhc20vc24vc24wL2h1YmlvLmg+CisjaW5jbHVkZSA8YXNtL3NuL3NuMC9odWJuaS5oPgorLy8jaW5jbHVkZSA8YXNtL3NuL3NuMC9odWJjb3JlLmg+CisKKyNpZmRlZiBTQUJMRQorI2RlZmluZSBJUDI3X05PX0hVQlVBUlRfSU5UCTEKKyNlbmRpZgorCisvKiBUcmFuc2xhdGlvbiBvZiB1bmNhY2hlZCBhdHRyaWJ1dGVzICovCisjZGVmaW5lCVVBVFRSX0hTUEVDCTAKKyNkZWZpbmUJVUFUVFJfSU8JMQorI2RlZmluZQlVQVRUUl9NU1BFQwkyCisjZGVmaW5lCVVBVFRSX1VOQ0FDCTMKKworI2VuZGlmIC8qIF9BU01fU05fU04wX0hVQl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NuL3NuMC9odWJpby5oIGIvaW5jbHVkZS9hc20tbWlwcy9zbi9zbjAvaHViaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGNmNmE1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zbi9zbjAvaHViaW8uaApAQCAtMCwwICsxLDk4OCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIERlcml2ZWQgZnJvbSBJUklYIDxzeXMvU04vU04wL2h1YmlvLmg+LCBSZXZpc2lvbiAxLjgwLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5MiAtIDE5OTcsIDE5OTkgU2lsaWNvbiBHcmFwaGljcywgSW5jLgorICogQ29weXJpZ2h0IChDKSAxOTk5IGJ5IFJhbGYgQmFlY2hsZQorICovCisjaWZuZGVmCV9BU01fU0dJX1NOX1NOMF9IVUJJT19ICisjZGVmaW5lCV9BU01fU0dJX1NOX1NOMF9IVUJJT19ICisKKy8qCisgKiBIdWIgSS9PIGludGVyZmFjZSByZWdpc3RlcnMKKyAqCisgKiBBbGwgcmVnaXN0ZXJzIGluIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byBjaGFuZ2UgdW50aWwgSHViIGNoaXAgdGFwZW91dC4KKyAqIEluIGdlbmVyYWwsIHRoZSBsb25nZXIgc29mdHdhcmUgbmFtZSBzaG91bGQgYmUgdXNlZCB3aGVuIGF2YWlsYWJsZS4KKyAqLworCisvKgorICogU2xpZ2h0bHkgZnJpZW5kbGllciBuYW1lcyBmb3Igc29tZSBjb21tb24gcmVnaXN0ZXJzLgorICogVGhlIGhhcmR3YXJlIGRlZmluaXRpb25zIGZvbGxvdy4KKyAqLworI2RlZmluZSBJSU9fV0lER0VUCQlJSU9fV0lEICAgICAgLyogV2lkZ2V0IGlkZW50aWZpY2F0aW9uICovCisjZGVmaW5lIElJT19XSURHRVRfU1RBVAkJSUlPX1dTVEFUICAgIC8qIFdpZGdldCBzdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgSUlPX1dJREdFVF9DVFJMCQlJSU9fV0NSCSAgICAgLyogV2lkZ2V0IGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgSUlPX1dJREdFVF9UT1VUCQlJSU9fV1JUTyAgICAgLyogV2lkZ2V0IHJlcXVlc3QgdGltZW91dCAqLworI2RlZmluZSBJSU9fV0lER0VUX0ZMVVNICUlJT19XVEZSICAgICAvKiBXaWRnZXQgdGFyZ2V0IGZsdXNoICovCisjZGVmaW5lIElJT19QUk9URUNUCQlJSU9fSUxBUFIgICAgLyogSU8gaW50ZXJmYWNlIHByb3RlY3Rpb24gKi8KKyNkZWZpbmUgSUlPX1BST1RFQ1RfT1ZSUkQJSUlPX0lMQVBPICAgIC8qIElPIHByb3RlY3Qgb3ZlcnJpZGUgKi8KKyNkZWZpbmUgSUlPX09VVFdJREdFVF9BQ0NFU1MJSUlPX0lPV0EgICAgIC8qIE91dGJvdW5kIHdpZGdldCBhY2Nlc3MgKi8KKyNkZWZpbmUgSUlPX0lOV0lER0VUX0FDQ0VTUwlJSU9fSUlXQSAgICAgLyogSW5ib3VuZCB3aWRnZXQgYWNjZXNzICovCisjZGVmaW5lIElJT19JTkRFVl9FUlJfTUFTSwlJSU9fSUlERU0gICAgLyogSW5ib3VuZCBkZXZpY2UgZXJyb3IgbWFzayAqLworI2RlZmluZSBJSU9fTExQX0NTUgkJSUlPX0lMQ1NSICAgIC8qIExMUCBjb250cm9sIGFuZCBzdGF0dXMgKi8KKyNkZWZpbmUgSUlPX0xMUF9MT0cJCUlJT19JTExSICAgICAvKiBMTFAgbG9nICovCisjZGVmaW5lIElJT19YVEFMS0NDX1RPVVQJSUlPX0lYQ0MgICAgIC8qIFh0YWxrIGNyZWRpdCBjb3VudCB0aW1lb3V0Ki8KKyNkZWZpbmUgSUlPX1hUQUxLVFRfVE9VVAlJSU9fSVhUVCAgICAgLyogWHRhbGsgdGFpbCB0aW1lb3V0ICovCisjZGVmaW5lIElJT19JT19FUlJfQ0xSCQlJSU9fSUVDTFIgICAgLyogSU8gZXJyb3IgY2xlYXIgKi8KKyNkZWZpbmUgSUlPX0JURV9DUkJfQ05UICAgICAgICAgSUlPX0lCQ04gICAgIC8qIElPIEJURSBDUkIgY291bnQgKi8KKworI2RlZmluZSBJSU9fTExQX0NTUl9JU19VUAkJMHgwMDAwMjAwMAorI2RlZmluZQlJSU9fTExQX0NTUl9MTFBfU1RBVF9NQVNLCTB4MDAwMDMwMDAKKyNkZWZpbmUJSUlPX0xMUF9DU1JfTExQX1NUQVRfU0hGVAkxMgorCisvKiBrZXkgdG8gSUlPX1BST1RFQ1RfT1ZSUkQgKi8KKyNkZWZpbmUgSUlPX1BST1RFQ1RfT1ZSUkRfS0VZCTB4NTM0NzQ5NzI3NTZjNjU3M3VsbAkvKiAiU0dJcnVsZXMiICovCisKKy8qIEJURSByZWdpc3RlciBuYW1lcyAqLworI2RlZmluZSBJSU9fQlRFX1NUQVRfMAkJSUlPX0lCTFNfMCAgIC8qIEFsc28gQlRFIGxlbmd0aC9zdGF0dXMgMCAqLworI2RlZmluZSBJSU9fQlRFX1NSQ18wCQlJSU9fSUJTQV8wICAgLyogQWxzbyBCVEUgc291cmNlIGFkZHJlc3MgIDAgKi8KKyNkZWZpbmUgSUlPX0JURV9ERVNUXzAJCUlJT19JQkRBXzAgICAvKiBBbHNvIEJURSBkZXN0LiBhZGRyZXNzIDAgKi8KKyNkZWZpbmUgSUlPX0JURV9DVFJMXzAJCUlJT19JQkNUXzAgICAvKiBBbHNvIEJURSBjb250cm9sL3Rlcm1pbmF0ZSAwICovCisjZGVmaW5lIElJT19CVEVfTk9USUZZXzAgCUlJT19JQk5BXzAgICAvKiBBbHNvIEJURSBub3RpZmljYXRpb24gMCAqLworI2RlZmluZSBJSU9fQlRFX0lOVF8wCQlJSU9fSUJJQV8wICAgLyogQWxzbyBCVEUgaW50ZXJydXB0IDAgKi8KKyNkZWZpbmUgSUlPX0JURV9PRkZfMAkJMAkgICAgIC8qIEJhc2Ugb2Zmc2V0IGZyb20gQlRFIDAgcmVncy4gKi8KKyNkZWZpbmUgSUlPX0JURV9PRkZfMQlJSU9fSUJMU18xIC0gSUlPX0lCTFNfMCAvKiBPZmZzZXQgZnJvbSBiYXNlIHRvIEJURSAxICovCisKKy8qIEJURSByZWdpc3RlciBvZmZzZXRzIGZyb20gYmFzZSAqLworI2RlZmluZSBCVEVPRkZfU1RBVAkJMAorI2RlZmluZSBCVEVPRkZfU1JDCQkoSUlPX0JURV9TUkNfMCAtIElJT19CVEVfU1RBVF8wKQorI2RlZmluZSBCVEVPRkZfREVTVAkJKElJT19CVEVfREVTVF8wIC0gSUlPX0JURV9TVEFUXzApCisjZGVmaW5lIEJURU9GRl9DVFJMCQkoSUlPX0JURV9DVFJMXzAgLSBJSU9fQlRFX1NUQVRfMCkKKyNkZWZpbmUgQlRFT0ZGX05PVElGWQkJKElJT19CVEVfTk9USUZZXzAgLSBJSU9fQlRFX1NUQVRfMCkKKyNkZWZpbmUgQlRFT0ZGX0lOVAkJKElJT19CVEVfSU5UXzAgLSBJSU9fQlRFX1NUQVRfMCkKKworCisvKgorICogVGhlIGZvbGxvd2luZyBkZWZpbml0aW9ucyB1c2UgdGhlIG5hbWVzIGRlZmluZWQgaW4gdGhlIElPIGludGVyZmFjZQorICogZG9jdW1lbnQgZm9yIGVhc2Ugb2YgcmVmZXJlbmNlLiAgV2hlbiBwb3NzaWJsZSwgc29mdHdhcmUgc2hvdWxkCisgKiBnZW5lcmFsbHkgdXNlIHRoZSBsb25nZXIgYnV0IGNsZWFyZXIgbmFtZXMgZGVmaW5lZCBhYm92ZS4KKyAqLworCisjZGVmaW5lIElJT19CQVNFCTB4NDAwMDAwCisjZGVmaW5lIElJT19CQVNFX0JURTAJMHg0MTAwMDAKKyNkZWZpbmUgSUlPX0JBU0VfQlRFMQkweDQyMDAwMAorI2RlZmluZSBJSU9fQkFTRV9QRVJGCTB4NDMwMDAwCisjZGVmaW5lIElJT19QRVJGX0NOVAkweDQzMDAwOAorCisjZGVmaW5lIElPX1BFUkZfU0VUUwkzMgorCisjZGVmaW5lIElJT19XSUQJCTB4NDAwMDAwCS8qIFdpZGdldCBpZGVudGlmaWNhdGlvbiAqLworI2RlZmluZSBJSU9fV1NUQVQJMHg0MDAwMDgJLyogV2lkZ2V0IHN0YXR1cyAqLworI2RlZmluZSBJSU9fV0NSCQkweDQwMDAyMAkvKiBXaWRnZXQgY29udHJvbCAqLworCisjZGVmaW5lCUlJT19XU1RBVF9FQ1JBWlkJKDFVTEwgPDwgMzIpCS8qIEh1YiBnb25lIGNyYXp5ICovCisjZGVmaW5lCUlJT19XU1RBVF9UWFJFVFJZCSgxVUxMIDw8IDkpCS8qIEh1YiBUeCBSZXRyeSB0aW1lb3V0ICovCisjZGVmaW5lCUlJT19XU1RBVF9UWFJFVFJZX01BU0sJKDB4N0YpCisjZGVmaW5lCUlJT19XU1RBVF9UWFJFVFJZX1NIRlQJKDE2KQorI2RlZmluZQlJSU9fV1NUQVRfVFhSRVRSWV9DTlQodykJKCgodykgPj4gSUlPX1dTVEFUX1RYUkVUUllfU0hGVCkgJiBcCisJCQkJCSAgSUlPX1dTVEFUX1RYUkVUUllfTUFTSykKKworI2RlZmluZSBJSU9fSUxBUFIJMHg0MDAxMDAJLyogTG9jYWwgQWNjZXNzIFByb3RlY3Rpb24gKi8KKyNkZWZpbmUgSUlPX0lMQVBPCTB4NDAwMTA4CS8qIFByb3RlY3Rpb24gb3ZlcnJpZGUgKi8KKyNkZWZpbmUgSUlPX0lPV0EJMHg0MDAxMTAJLyogb3V0Ym91bmQgd2lkZ2V0IGFjY2VzcyAqLworI2RlZmluZSBJSU9fSUlXQQkweDQwMDExOAkvKiBpbmJvdW5kIHdpZGdldCBhY2Nlc3MgKi8KKyNkZWZpbmUgSUlPX0lJREVNCTB4NDAwMTIwCS8qIEluYm91bmQgRGV2aWNlIEVycm9yIE1hc2sgKi8KKyNkZWZpbmUgSUlPX0lMQ1NSCTB4NDAwMTI4CS8qIExMUCBjb250cm9sIGFuZCBzdGF0dXMgKi8KKyNkZWZpbmUgSUlPX0lMTFIJMHg0MDAxMzAJLyogTExQIExvZyAqLworI2RlZmluZSBJSU9fSUlEU1IJMHg0MDAxMzgJLyogSW50ZXJydXB0IGRlc3RpbmF0aW9uICovCisKKyNkZWZpbmUgSUlPX0lJQlVTRVJSCTB4MTQwMDIwOAkvKiBSZWFkcyBoZXJlIGNhdXNlIGEgYnVzIGVycm9yLiAqLworCisvKiBJTyBJbnRlcnJ1cHQgRGVzdGluYXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSUlPX0lJRFNSX1NFTlRfU0hJRlQJMjgKKyNkZWZpbmUgSUlPX0lJRFNSX1NFTlRfTUFTSwkweDEwMDAwMDAwCisjZGVmaW5lIElJT19JSURTUl9FTkJfU0hJRlQJMjQKKyNkZWZpbmUgSUlPX0lJRFNSX0VOQl9NQVNLCTB4MDEwMDAwMDAKKyNkZWZpbmUgSUlPX0lJRFNSX05PREVfU0hJRlQJOAorI2RlZmluZSBJSU9fSUlEU1JfTk9ERV9NQVNLCTB4MDAwMGZmMDAKKyNkZWZpbmUgSUlPX0lJRFNSX0xWTF9TSElGVAkwCisjZGVmaW5lIElJT19JSURTUl9MVkxfTUFTSwkweDAwMDAwMDNmCisKKworLyogR0ZYIEZsb3cgQ29udHJvbCBOb2RlL1dpZGdldCBSZWdpc3RlciAqLworI2RlZmluZSBJSU9fSUdGWF8wCTB4NDAwMTQwCS8qIGdmeCBub2RlL3dpZGdldCByZWdpc3RlciAwICovCisjZGVmaW5lIElJT19JR0ZYXzEJMHg0MDAxNDgJLyogZ2Z4IG5vZGUvd2lkZ2V0IHJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgSUlPX0lHRlhfV19OVU1fQklUUwk0CS8qIHNpemUgb2Ygd2lkZ2V0IG51bSBmaWVsZCAqLworI2RlZmluZSBJSU9fSUdGWF9XX05VTV9NQVNLCSgoMTw8SUlPX0lHRlhfV19OVU1fQklUUyktMSkKKyNkZWZpbmUgSUlPX0lHRlhfV19OVU1fU0hJRlQJMAorI2RlZmluZSBJSU9fSUdGWF9OX05VTV9CSVRTCTkJLyogc2l6ZSBvZiBub2RlIG51bSBmaWVsZCAqLworI2RlZmluZSBJSU9fSUdGWF9OX05VTV9NQVNLCSgoMTw8SUlPX0lHRlhfTl9OVU1fQklUUyktMSkKKyNkZWZpbmUgSUlPX0lHRlhfTl9OVU1fU0hJRlQJNAorI2RlZmluZSBJSU9fSUdGWF9QX05VTV9CSVRTCTEJLyogc2l6ZSBvZiBwcm9jZXNzb3IgbnVtIGZpZWxkICovCisjZGVmaW5lIElJT19JR0ZYX1BfTlVNX01BU0sJKCgxPDxJSU9fSUdGWF9QX05VTV9CSVRTKS0xKQorI2RlZmluZSBJSU9fSUdGWF9QX05VTV9TSElGVAkxNgorI2RlZmluZSBJSU9fSUdGWF9WTERfQklUUwkxCS8qIHNpemUgb2YgdmFsaWQgZmllbGQgKi8KKyNkZWZpbmUgSUlPX0lHRlhfVkxEX01BU0sJKCgxPDxJSU9fSUdGWF9WTERfQklUUyktMSkKKyNkZWZpbmUgSUlPX0lHRlhfVkxEX1NISUZUCTIwCisjZGVmaW5lIElJT19JR0ZYX0lOSVQod2lkZ2V0LCBub2RlLCBjcHUsIHZhbGlkKQkJCQkoXAorCSgoKHdpZGdldCkgJiBJSU9fSUdGWF9XX05VTV9NQVNLKSA8PCBJSU9fSUdGWF9XX05VTV9TSElGVCkgfAkgXAorCSgoKG5vZGUpICAgJiBJSU9fSUdGWF9OX05VTV9NQVNLKSA8PCBJSU9fSUdGWF9OX05VTV9TSElGVCkgfAkgXAorCSgoKGNwdSkgICAgJiBJSU9fSUdGWF9QX05VTV9NQVNLKSA8PCBJSU9fSUdGWF9QX05VTV9TSElGVCkgfAkgXAorCSgoKHZhbGlkKSAgJiBJSU9fSUdGWF9WTERfTUFTSykgICA8PCBJSU9fSUdGWF9WTERfU0hJRlQpCSApCisKKy8qIFNjcmF0Y2ggcmVnaXN0ZXJzIChub3QgYWxsIGJpdHMgYXZhaWxhYmxlKSAqLworI2RlZmluZSBJSU9fU0NSQVRDSF9SRUcwCTB4NDAwMTUwCisjZGVmaW5lCUlJT19TQ1JBVENIX1JFRzEJMHg0MDAxNTgKKyNkZWZpbmUgSUlPX1NDUkFUQ0hfTUFTSwkweDAwMDAwMDBmMDBmMTFmZmYKKworI2RlZmluZSBJSU9fU0NSQVRDSF9CSVQwXzAJMHgwMDAwMDAwODAwMDAwMDAwCisjZGVmaW5lIElJT19TQ1JBVENIX0JJVDBfMQkweDAwMDAwMDA0MDAwMDAwMDAKKyNkZWZpbmUgSUlPX1NDUkFUQ0hfQklUMF8yCTB4MDAwMDAwMDIwMDAwMDAwMAorI2RlZmluZSBJSU9fU0NSQVRDSF9CSVQwXzMJMHgwMDAwMDAwMTAwMDAwMDAwCisjZGVmaW5lIElJT19TQ1JBVENIX0JJVDBfNAkweDAwMDAwMDAwMDA4MDAwMDAKKyNkZWZpbmUgSUlPX1NDUkFUQ0hfQklUMF81CTB4MDAwMDAwMDAwMDQwMDAwMAorI2RlZmluZSBJSU9fU0NSQVRDSF9CSVQwXzYJMHgwMDAwMDAwMDAwMjAwMDAwCisjZGVmaW5lIElJT19TQ1JBVENIX0JJVDBfNwkweDAwMDAwMDAwMDAxMDAwMDAKKyNkZWZpbmUgSUlPX1NDUkFUQ0hfQklUMF84CTB4MDAwMDAwMDAwMDAxMDAwMAorI2RlZmluZSBJSU9fU0NSQVRDSF9CSVQwXzkJMHgwMDAwMDAwMDAwMDAxMDAwCisjZGVmaW5lIElJT19TQ1JBVENIX0JJVDBfUgkweDAwMDAwMDAwMDAwMDBmZmYKKworLyogSU8gVHJhbnNsYXRpb24gVGFibGUgRW50cmllcyAqLworI2RlZmluZSBJSU9fTlVNX0lUVEVTCTcJCS8qIElUVEVzIG51bWJlcmVkIDAuLjYgKi8KKwkJCQkJLyogSHcgbWFudWFscyBudW1iZXIgdGhlbSAxLi43ISAqLworCisvKgorICogQXMgYSBwZXJtYW5lbnQgd29ya2Fyb3VuZCBmb3IgYSBidWcgaW4gdGhlIFBJIHNpZGUgb2YgdGhlIGh1Yiwgd2UndmUKKyAqIHJlZGVmaW5lZCBiaWcgd2luZG93IDcgYXMgc21hbGwgd2luZG93IDAuCisgKi8KKyNkZWZpbmUgSFVCX05VTV9CSUdfV0lORE9XCUlJT19OVU1fSVRURVMgLSAxCisKKy8qCisgKiBVc2UgdGhlIHRvcCBiaWcgd2luZG93IGFzIGEgc3Vycm9nYXRlIGZvciB0aGUgZmlyc3Qgc21hbGwgd2luZG93CisgKi8KKyNkZWZpbmUgU1dJTjBfQklHV0lOCQlIVUJfTlVNX0JJR19XSU5ET1cKKworI2RlZmluZSBJTENTUl9XQVJNX1JFU0VUCTB4MTAwCisvKgorICogVGhlIElPIExMUCBjb250cm9sIHN0YXR1cyByZWdpc3RlciBhbmQgd2lkZ2V0IGNvbnRyb2wgcmVnaXN0ZXIKKyAqLworI2lmbmRlZiBfX0FTU0VNQkxZX18KKwordHlwZWRlZiB1bmlvbiBodWJpaV93aWRfdSB7CisJdTY0CXdpZF9yZWdfdmFsdWU7CisJc3RydWN0IHsKKwkJdTY0IAl3aWRfcnN2ZDogCTMyLAkvKiB1bnVzZWQgKi8KKyAgICAgICAgICAgICAgICAgICAJd2lkX3Jldl9udW06CSA0LAkvKiByZXZpc2lvbiBudW1iZXIgKi8KKyAgICAgICAgICAgICAgICAgICAJd2lkX3BhcnRfbnVtOgkxNiwJLyogdGhlIHdpZGdldCB0eXBlOiBodWI9YzEwMSAqLworICAgICAgICAgICAgICAgICAgIAl3aWRfbWZnX251bToJMTEsCS8qIE1hbnVmYWN0dXJlciBpZCAoSUJNKSAqLworICAgICAgICAgICAgICAgICAgIAl3aWRfcnN2ZDE6CSAxOwkvKiBSZXNlcnZlZCAqLworICAgICAgICB9IHdpZF9maWVsZHNfczsKK30gaHViaWlfd2lkX3Q7CisKKwordHlwZWRlZiB1bmlvbiBodWJpaV93Y3JfdSB7CisJdTY0CXdjcl9yZWdfdmFsdWU7CisJc3RydWN0IHsKKwkJdTY0IAl3Y3JfcnN2ZDogCTQxLAkvKiB1bnVzZWQgKi8KKyAgICAgICAgICAgICAgICAgICAJd2NyX2VfdGhyZXNoOgkgNSwJLyogZWxhc3RpY2l0eSB0aHJlc2hvbGQgKi8KKwkJCXdjcl9kaXJfY29uOgkgMSwJLyogd2lkZ2V0IGRpcmVjdCBjb25uZWN0ICovCisgICAgICAgICAgICAgICAgICAgCXdjcl9mX2JhZF9wa3Q6CSAxLAkvKiBGb3JjZSBiYWQgbGxwIHBrdCBlbmFibGUgKi8KKyAgICAgICAgICAgICAgICAgICAJd2NyX3hiYXJfY3JkOgkgMywJLyogTExQIGNyb3NzYmFyIGNyZWRpdCAqLworICAgICAgICAgICAgICAgICAgIAl3Y3JfcnN2ZDE6CSA4LAkvKiBSZXNlcnZlZCAqLworCQkJd2NyX3RhZ19tb2RlOiAgICAxLAkvKiBUYWcgbW9kZSAqLworICAgICAgICAgICAgICAgICAgIAl3Y3Jfd2lkZ2V0X2lkOgkgNDsJLyogTExQIGNyb3NzYmFyIGNyZWRpdCAqLworICAgICAgICB9IHdjcl9maWVsZHNfczsKK30gaHViaWlfd2NyX3Q7CisKKyNkZWZpbmUJaXdjcl9kaXJfY29uCXdjcl9maWVsZHNfcy53Y3JfZGlyX2NvbgorCit0eXBlZGVmIHVuaW9uIGh1YmlpX3dzdGF0X3UgeworCXU2NCAgICAgIHJlZ192YWx1ZTsKKwlzdHJ1Y3QgeworCQl1NjQJcnN2ZDE6CQkzMSwKKwkJCWNyYXp5OgkJIDEsCS8qIENyYXp5IGJpdAkJKi8KKwkJCXJzdmQyOgkJIDgsCisJCQlsbHBfdHhfY250OgkgOCwgCS8qIExMUCBYbWl0IHJldHJ5IGNvdW50ZXIgKi8KKwkJCXJzdmQzOgkJIDYsCisJCQl0eF9tYXhfcnRyeToJIDEsCS8qIExMUCBSZXRyeSBUaW1lb3V0IFNpZ25hbCAqLworCQkJcnN2ZDQ6CQkgMiwKKwkJCXh0X3RhaWxfdG86CSAxLAkvKiBYdGFsayBUYWlsIFRpbWVvdXQJKi8KKwkJCXh0X2NyZF90bzoJIDEsCS8qIFh0YWxrIENyZWRpdCBUaW1lb3V0CSovCisJCQlwZW5kaW5nOgkgNDsJLyogUGVuZGluZyBSZXF1ZXN0cwkqLworCX0gd3N0YXRfZmllbGRzX3M7Cit9IGh1YmlpX3dzdGF0X3Q7CisKKwordHlwZWRlZiB1bmlvbiBodWJpaV9pbGNzcl91IHsKKwl1NjQJaWNzcl9yZWdfdmFsdWU7CisJc3RydWN0IHsKKwkJdTY0IAlpY3NyX3JzdmQ6IAkyMiwJLyogdW51c2VkICovCisgICAgICAgICAgICAgICAgICAgCWljc3JfbWF4X2J1cnN0OgkxMCwJLyogbWF4IGJ1cnN0ICovCisgICAgICAgICAgICAgICAgICAgICAgICBpY3NyX3JzdmQ0OgkgNiwJLyogcmVzZXJ2ZWQgKi8KKyAgICAgICAgICAgICAgICAgICAJaWNzcl9tYXhfcmV0cnk6CTEwLAkvKiBtYXggcmV0cnkgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGljc3JfcnN2ZDM6CSAyLAkvKiByZXNlcnZlZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgaWNzcl9sbmtfc3RhdDoJIDIsCS8qIGxpbmsgc3RhdHVzICovCisgICAgICAgICAgICAgICAgICAgICAgICBpY3NyX2JtODoJIDEsCS8qIEJpdCBtb2RlIDggKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGljc3JfbGxwX2VuOgkgMSwJLyogTExQIGVuYWJsZSBiaXQgKi8KKyAgICAgICAgICAgICAgICAgCWljc3JfcnN2ZDI6CSAxLCAgICAgLyogcmVzZXJ2ZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGljc3Jfd3JtX3Jlc2V0OgkgMSwJLyogV2FybSByZXNldCBiaXQgKi8KKyAgICAJCQlpY3NyX3JzdmQxOgkgMiwJLyogRGF0YSByZWFkeSBvZmZzZXQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGljc3JfbnVsbF90bzoJIDY7CS8qIE51bGwgdGltZW91dCAgICovCisKKyAgICAgICAgfSBpY3NyX2ZpZWxkc19zOworfSBodWJpaV9pbGNzcl90OworCisKK3R5cGVkZWYgdW5pb24gaHViaWlfaW93YV91IHsKKwl1NjQJaW93YV9yZWdfdmFsdWU7CisJc3RydWN0IHsKKwkJdTY0IAlpb3dhX3JzdmQ6IAk0OCwJLyogdW51c2VkICovCisgICAgICAgICAgICAgICAgICAgICAgIAlpb3dhX3d4b2FjOgkgOCwJLyogeHRhbGsgd2lkZ2V0IGFjY2VzcyBiaXRzICovCisgICAgICAgICAgICAgICAgICAgCWlvd2FfcnN2ZDE6CSA3LAkvKiB4dGFsayB3aWRnZXQgYWNjZXNzIGJpdHMgKi8KKyAgICAgICAgICAgICAgICAgIAlpb3dhX3cwb2FjOgkgMTsJLyogeHRhbGsgd2lkZ2V0IGFjY2VzcyBiaXRzICovCisgICAgICAgIH0gaW93YV9maWVsZHNfczsKK30gaHViaWlfaW93YV90OworCit0eXBlZGVmIHVuaW9uIGh1YmlpX2lpd2FfdSB7CisJdTY0CWlpd2FfcmVnX3ZhbHVlOworCXN0cnVjdCB7CisJCXU2NCAJaWl3YV9yc3ZkOiAJNDgsCS8qIHVudXNlZCAqLworCQkJaWl3YV93eGlhYzoJIDgsCS8qIGh1YiB3aWQgYWNjZXNzIGJpdHMgKi8KKwkJCWlpd2FfcnN2ZDE6CSA3LAkvKiByZXNlcnZlZCAqLworCQkJaWl3YV93MGlhYzoJIDE7CS8qIGh1YiB3aWQwIGFjY2VzcyAqLworICAgICAgICB9IGlpd2FfZmllbGRzX3M7Cit9IGh1YmlpX2lpd2FfdDsKKwordHlwZWRlZiB1bmlvbglodWJpaV9pbGxyX3UgeworCXU2NAlpbGxyX3JlZ192YWx1ZTsKKwlzdHJ1Y3QgeworCQl1NjQgCWlsbHJfcnN2ZDogCTMyLAkvKiB1bnVzZWQgKi8KKwkJCWlsbHJfY2JfY250OgkxNiwJLyogY2hlY2tiaXQgZXJyb3IgY291bnQgKi8KKyAgICAgICAgICAgICAgICAgICAJaWxscl9zbl9jbnQ6CTE2OwkvKiBzZXF1ZW5jZSBudW1iZXIgY291bnQgKi8KKyAgICAgICAgfSBpbGxyX2ZpZWxkc19zOworfSBodWJpaV9pbGxyX3Q7CisKKy8qIFRoZSBzdHJ1Y3R1cmVzIGJlbG93IGFyZSBkZWZpbmVkIHRvIGV4dHJhY3QgYW5kIG1vZGlmeSB0aGUgaWkKK3BlcmZvcm1hbmNlIHJlZ2lzdGVycyAqLworCisvKiBpb19wZXJmX3NlbCBhbGxvd3MgdGhlIGNhbGxlciB0byBzcGVjaWZ5IHdoYXQgdGVzdHMgd2lsbCBiZQorICAgcGVyZm9ybWVkICovCit0eXBlZGVmIHVuaW9uIGlvX3BlcmZfc2VsIHsKKwl1NjQgcGVyZl9zZWxfcmVnOworCXN0cnVjdCB7CisJCXU2NCAJcGVyZl9yc3ZkICA6IDQ4LAorCQkgICAgICAgIHBlcmZfaWNjdCAgOiAgOCwKKwkJICAgICAgICBwZXJmX2lwcHIxIDogIDQsCisgIAkJICAgICAgICBwZXJmX2lwcHIwIDogIDQ7CisJfSBwZXJmX3NlbF9iaXRzOworfSBpb19wZXJmX3NlbF90OworCisvKiBpb19wZXJmX2NudCBpcyB0byBleHRyYWN0IHRoZSBjb3VudCBmcm9tIHRoZSBodWIgcmVnaXN0ZXJzLiBEdWUgdG8KKyAgIGhhcmR3YXJlIHByb2JsZW1zIHRoZXJlIGlzIG9ubHkgb25lIGNvdW50ZXIsIG5vdCB0d28uICovCisKK3R5cGVkZWYgdW5pb24gaW9fcGVyZl9jbnQgeworCXU2NAlwZXJmX2NudDsKKwlzdHJ1Y3QgeworCQl1NjQJcGVyZl9yc3ZkMSA6IDMyLAorICAJCQkgICAgICAgIHBlcmZfcnN2ZDIgOiAxMiwKKyAgCQkJICAgICAgICBwZXJmX2NudCAgIDogMjA7CisJfSBwZXJmX2NudF9iaXRzOworfSBpb19wZXJmX2NudF90OworCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisKKyNkZWZpbmUgTE5LX1NUQVRfV09SS0lORwkweDIKKworI2RlZmluZSBJSU9fTExQX0NCX01BWAkweGZmZmYKKyNkZWZpbmUgSUlPX0xMUF9TTl9NQVgJMHhmZmZmCisKKy8qIElPIFBSQiBFbnRyaWVzICovCisjZGVmaW5lCUlJT19OVU1fSVBSQlMJKDkpCisjZGVmaW5lIElJT19JT1BSQl8wCTB4NDAwMTk4CS8qIFBSQiBlbnRyeSAwICovCisjZGVmaW5lIElJT19JT1BSQl84CTB4NDAwMWEwCS8qIFBSQiBlbnRyeSA4ICovCisjZGVmaW5lIElJT19JT1BSQl85CTB4NDAwMWE4CS8qIFBSQiBlbnRyeSA5ICovCisjZGVmaW5lIElJT19JT1BSQl9BCTB4NDAwMWIwCS8qIFBSQiBlbnRyeSBhICovCisjZGVmaW5lIElJT19JT1BSQl9CCTB4NDAwMWI4CS8qIFBSQiBlbnRyeSBiICovCisjZGVmaW5lIElJT19JT1BSQl9DCTB4NDAwMWMwCS8qIFBSQiBlbnRyeSBjICovCisjZGVmaW5lIElJT19JT1BSQl9ECTB4NDAwMWM4CS8qIFBSQiBlbnRyeSBkICovCisjZGVmaW5lIElJT19JT1BSQl9FCTB4NDAwMWQwCS8qIFBSQiBlbnRyeSBlICovCisjZGVmaW5lIElJT19JT1BSQl9GCTB4NDAwMWQ4CS8qIFBSQiBlbnRyeSBmICovCisKKworI2RlZmluZSBJSU9fSVhDQwkweDQwMDFlMAkvKiBDcm9zc3RhbGsgY3JlZGl0IGNvdW50IHRpbWVvdXQgKi8KKyNkZWZpbmUgSUlPX0lYVENDCUlJT19JWENDCisjZGVmaW5lIElJT19JTUVNCTB4NDAwMWU4CS8qIE1pc2NlbGxhbmVvdXMgRW5hYmxlIE1hc2sgKi8KKyNkZWZpbmUgSUlPX0lYVFQJMHg0MDAxZjAJLyogQ3Jvc3N0YWxrIHRhaWwgdGltZW91dCAqLworI2RlZmluZSBJSU9fSUVDTFIJMHg0MDAxZjgJLyogSU8gZXJyb3IgY2xlYXIgKi8KKyNkZWZpbmUgSUlPX0lCQ04gICAgICAgIDB4NDAwMjAwICAgICAgICAvKiBJTyBCVEUgQ1JCIGNvdW50ICovCisKKy8qCisgKiBJSU9fSU1FTSBSZWdpc3RlciBmaWVsZHMuCisgKi8KKyNkZWZpbmUgSUlPX0lNRU1fVzBFU0QgIDB4MSAgICAgICAgICAgICAvKiBXaWRnZXQgMCBzaHV0IGRvd24gZHVlIHRvIGVycm9yICovCisjZGVmaW5lIElJT19JTUVNX0IwRVNEICAoMSA8PCA0KSAgICAgICAgLyogQlRFIDAgc2h1dCBkb3duIGR1ZSB0byBlcnJvciAqLworI2RlZmluZSBJSU9fSU1FTV9CMUVTRCAgKDEgPDwgOCkgICAgICAgIC8qIEJURSAxIFNodXQgZG93biBkdWUgdG8gZXJyb3IgKi8KKworLyogUElPIFJlYWQgYWRkcmVzcyBUYWJsZSBFbnRyaWVzICovCisjZGVmaW5lIElJT19JUENBCTB4NDAwMzAwCS8qIFBSQiBDb3VudGVyIGFkanVzdCAqLworI2RlZmluZSBJSU9fTlVNX1BSVEVTCTgJCS8qIFRvdGFsIG51bWJlciBvZiBQUkIgdGFibGUgZW50cmllcyAqLworI2RlZmluZSBJSU9fUFJURV8wCTB4NDAwMzA4CS8qIFBJTyBSZWFkIGFkZHJlc3MgdGFibGUgZW50cnkgMCAqLworI2RlZmluZSBJSU9fUFJURShfeCkJKElJT19QUlRFXzAgKyAoOCAqIChfeCkpKQorI2RlZmluZQlJSU9fV0lEUFJURSh4KQlJSU9fUFJURSgoKHgpIC0gOCkpIC8qIHdpZGdldCBJRCB0byBpdHMgUFJURSBudW0gKi8KKyNkZWZpbmUgSUlPX0lQRFIJMHg0MDAzODgJLyogUElPIHRhYmxlIGVudHJ5IGRlYWxsb2NhdGlvbiAqLworI2RlZmluZSBJSU9fSUNEUgkweDQwMDM5MAkvKiBDUkIgRW50cnkgRGVhbGxvY2F0aW9uICovCisjZGVmaW5lIElJT19JRkRSCTB4NDAwMzk4CS8qIElPUSBGSUZPIERlcHRoICovCisjZGVmaW5lIElJT19JSUFQCTB4NDAwM2EwCS8qIElJUSBBcmJpdHJhdGlvbiBQYXJhbWV0ZXJzICovCisjZGVmaW5lIElJT19JTU1SCUlJT19JSUFQCisjZGVmaW5lIElJT19JQ01SCTB4NDAwM2E4CS8qIENSQiBNYW5hZ21lbnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSUlPX0lDQ1IJMHg0MDAzYjAJLyogQ1JCIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSUlPX0lDVE8JMHg0MDAzYjgJLyogQ1JCIFRpbWUgT3V0IFJlZ2lzdGVyICovCisjZGVmaW5lIElJT19JQ1RQCTB4NDAwM2MwCS8qIENSQiBUaW1lIE91dCBQcmVzY2FsYXIgKi8KKworCisvKgorICogSUNNUiByZWdpc3RlciBmaWVsZHMKKyAqLworI2RlZmluZSBJSU9fSUNNUl9QQ19WTERfU0hGVAkzNgorI2RlZmluZSBJSU9fSUNNUl9QQ19WTERfTUFTSwkoMHg3ZmZmVUwgPDwgSUlPX0lDTVJfUENfVkxEX1NIRlQpCisKKyNkZWZpbmUgSUlPX0lDTVJfQ1JCX1ZMRF9TSEZUCTIwCisjZGVmaW5lIElJT19JQ01SX0NSQl9WTERfTUFTSwkoMHg3ZmZmVUwgPDwgSUlPX0lDTVJfQ1JCX1ZMRF9TSEZUKQorCisjZGVmaW5lIElJT19JQ01SX0ZDX0NOVF9TSEZUCTE2CisjZGVmaW5lIElJT19JQ01SX0ZDX0NOVF9NQVNLCSgweGYgPDwgSUlPX0lDTVJfRkNfQ05UX1NIRlQpCisKKyNkZWZpbmUgSUlPX0lDTVJfQ19DTlRfU0hGVAk0CisjZGVmaW5lIElJT19JQ01SX0NfQ05UX01BU0sJKDB4ZiA8PCBJSU9fSUNNUl9DX0NOVF9TSEZUKQorCisjZGVmaW5lIElJT19JQ01SX1BfQ05UX1NIRlQJMAorI2RlZmluZSBJSU9fSUNNUl9QX0NOVF9NQVNLCSgweGYgPDwgSUlPX0lDTVJfUF9DTlRfU0hGVCkKKworI2RlZmluZSBJSU9fSUNNUl9QUkVDSVNFCSgxVUwgPDwgNTIpCisjZGVmaW5lIElJT19JQ01SX0NMUl9SUFBECSgxVUwgPDwgMTMpCisjZGVmaW5lIElJT19JQ01SX0NMUl9SUVBECSgxVUwgPDwgMTIpCisKKy8qCisgKiBJSU8gUElPIERlYWxsb2NhdGlvbiByZWdpc3RlciBmaWVsZCBtYXNrcyA6IChJSU9fSVBEUikKKyAqLworI2RlZmluZQlJSU9fSVBEUl9QTkQJKDEgPDwgNCkKKworLyoKKyAqIElJTyBDUkIgZGVhbGxvY2F0aW9uIHJlZ2lzdGVyIGZpZWxkIG1hc2tzOiAoSUlPX0lDRFIpCisgKi8KKyNkZWZpbmUJSUlPX0lDRFJfUE5ECSgxIDw8IDQpCisKKy8qCisgKiBJSU8gQ1JCIGNvbnRyb2wgcmVnaXN0ZXIgRmllbGRzOiBJSU9fSUNDUgorICovCisjZGVmaW5lCUlJT19JQ0NSX1BFTkRJTkcJKDB4MTAwMDApCisjZGVmaW5lCUlJT19JQ0NSX0NNRF9NQVNLCSgweEZGKQorI2RlZmluZQlJSU9fSUNDUl9DTURfU0hGVAkoNykKKyNkZWZpbmUJSUlPX0lDQ1JfQ01EX05PUAkoMHgwKQkvKiBObyBPcCAqLworI2RlZmluZQlJSU9fSUNDUl9DTURfV0FLRQkoMHgxMDApIC8qIFJlYWN0aXZhdGUgQ1JCIGVudHJ5IGFuZCBwcm9jZXNzICovCisjZGVmaW5lCUlJT19JQ0NSX0NNRF9USU1FT1VUCSgweDIwMCkJLyogTWFrZSBDUkIgdGltZW91dCAmIG1hcmsgaW52YWxpZCAqLworI2RlZmluZQlJSU9fSUNDUl9DTURfRUpFQ1QJKDB4NDAwKQkvKiBDb250ZW50cyBvZiBlbnRyeSB3cml0dGVuIHRvIG1lbW9yeQorCQkJCQkgKiB2aWEgYSBXQgorCQkJCQkgKi8KKyNkZWZpbmUJSUlPX0lDQ1JfQ01EX0ZMVVNICSgweDgwMCkKKworLyoKKyAqIENSQiBtYW5pcHVsYXRpb24gbWFjcm9zCisgKglUaGUgQ1JCIG1hY3JvcyBhcmUgc2xpZ2h0bHkgY29tcGxpY2F0ZWQsIHNpbmNlIHRoZXJlIGFyZSB1cCB0bworICogCWZvdXIgcmVnaXN0ZXJzIGFzc29jaWF0ZWQgd2l0aCBlYWNoIENSQiBlbnRyeS4KKyAqLworI2RlZmluZSBJSU9fTlVNX0NSQlMJCTE1CS8qIE51bWJlciBvZiBDUkJzICovCisjZGVmaW5lIElJT19OVU1fTk9STUFMX0NSQlMgICAgIDEyCS8qIE51bWJlciBvZiByZWd1bGFyIENSQiBlbnRyaWVzICovCisjZGVmaW5lIElJT19OVU1fUENfQ1JCUyAJNAkvKiBOdW1iZXIgb2YgcGFydGlhbCBjYWNoZSBDUkJzICovCisjZGVmaW5lIElJT19JQ1JCX09GRlNFVAkJOAorI2RlZmluZSBJSU9fSUNSQl8wCQkweDQwMDQwMAorLyogWFhYIC0gVGhpcyBpcyBub3cgdHVuZWFibGU6CisJI2RlZmluZSBJSU9fRklSU1RfUENfRU5UUlkgMTIKKyAqLworCisjZGVmaW5lIElJT19JQ1JCX0EoX3gpCShJSU9fSUNSQl8wICsgKDQgKiBJSU9fSUNSQl9PRkZTRVQgKiAoX3gpKSkKKyNkZWZpbmUgSUlPX0lDUkJfQihfeCkgIChJSU9fSUNSQl9BKF94KSArIDEqSUlPX0lDUkJfT0ZGU0VUKQorI2RlZmluZSBJSU9fSUNSQl9DKF94KQkoSUlPX0lDUkJfQShfeCkgKyAyKklJT19JQ1JCX09GRlNFVCkKKyNkZWZpbmUgSUlPX0lDUkJfRChfeCkgIChJSU9fSUNSQl9BKF94KSArIDMqSUlPX0lDUkJfT0ZGU0VUKQorCisvKiBYWFggLSBJQlVFIHJlZ2lzdGVyIGNvbWluZyBmb3IgSHViIDIgKi8KKworLyoKKyAqCisgKiBDUkIgUmVnaXN0ZXIgZGVzY3JpcHRpb24uCisgKgorICogV0FSTklORyAqIFdBUk5JTkcgKiBXQVJOSU5HICogV0FSTklORyAqIFdBUk5JTkcgKiBXQVJOSU5HICogV0FSTklORworICogV0FSTklORyAqIFdBUk5JTkcgKiBXQVJOSU5HICogV0FSTklORyAqIFdBUk5JTkcgKiBXQVJOSU5HICogV0FSTklORworICogV0FSTklORyAqIFdBUk5JTkcgKiBXQVJOSU5HICogV0FSTklORyAqIFdBUk5JTkcgKiBXQVJOSU5HICogV0FSTklORworICogV0FSTklORyAqIFdBUk5JTkcgKiBXQVJOSU5HICogV0FSTklORyAqIFdBUk5JTkcgKiBXQVJOSU5HICogV0FSTklORworICogV0FSTklORyAqIFdBUk5JTkcgKiBXQVJOSU5HICogV0FSTklORyAqIFdBUk5JTkcgKiBXQVJOSU5HICogV0FSTklORworICoKKyAqIE1hbnkgb2YgdGhlIGZpZWxkcyBpbiBDUkIgYXJlIHN0YXR1cyBiaXRzIHVzZWQgYnkgaGFyZHdhcmUKKyAqIGZvciBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgcHJvdG9jb2wuIEl0J3MgdmVyeSBkYW5nZXJvdXMgdG8KKyAqIG1lc3MgYXJvdW5kIHdpdGggdGhlIENSQiByZWdpc3RlcnMuCisgKgorICogSXQncyBPSyB0byByZWFkIHRoZSBDUkIgcmVnaXN0ZXJzIGFuZCB0cnkgdG8gbWFrZSBzZW5zZSBvdXQgb2YgdGhlCisgKiBmaWVsZHMgaW4gQ1JCLgorICoKKyAqIFVwZGF0aW5nIENSQiByZXF1aXJlcyBhbGwgYWN0aXZpdGllcyBpbiBIdWIgSUlPIHRvIGJlIHF1aWVzY2VkLgorICogb3RoZXJ3aXNlLCBhIHdyaXRlIHRvIENSQiBjb3VsZCBjb3JydXB0IG90aGVyIENSQiBlbnRyaWVzLgorICogQ1JCcyBhcmUgaGVyZSBvbmx5IGFzIGEgYmFjayBkb29yIHBlZWsgdG8gaHViIElJTydzIHN0YXR1cy4KKyAqIFF1aWVzY2luZyBpbXBsaWVzICBubyBkbWFzIG5vIFBJT3MKKyAqIGVpdGhlciBkaXJlY3RseSBmcm9tIHRoZSBjcHUgb3IgZnJvbSBzbjBuZXQuCisgKiB0aGlzIGlzIG5vdCBzb21ldGhpbmcgdGhhdCBjYW4gYmUgZG9uZSBlYXNpbHkuIFNvLCBBVk9JRCB1cGRhdGluZworICogQ1JCcy4KKyAqLworCisvKgorICogRmllbGRzIGluIENSQiBSZWdpc3RlciBBCisgKi8KKyNpZm5kZWYgX19BU1NFTUJMWV9fCit0eXBlZGVmIHVuaW9uIGljcmJhX3UgeworCXU2NAlyZWdfdmFsdWU7CisJc3RydWN0IHsKKwkJdTY0IAlyZXN2ZDogCTYsCisJCQlzdGFsbF9idGUwOiAxLAkvKiBTdGFsbCBCVEUgMCAqLworCQkJc3RhbGxfYnRlMTogMSwJLyogU3RhbGwgQlRFIDEgKi8KKwkJCWVycm9yOgkxLAkvKiBDUkIgaGFzIGFuIGVycm9yCSovCisJCQllY29kZToJMywJLyogRXJyb3IgQ29kZSAJCSovCisJCQlsbmV0dWNlOiAxLAkvKiBTTjBuZXQgVW5jb3JyZWN0YWJsZSBlcnJvciAqLworCQkJbWFyazoJMSwJLyogQ1JCIEhhcyBiZWVuIG1hcmtlZCAJKi8KKwkJCXhlcnI6CTEsCS8qIEVycm9yIGJpdCBzZXQgaW4geHRhbGsgaGVhZGVyICovCisJCQlzaWRuOgk0LAkvKiBTSUROIGZpZWxkIGZyb20geHRhbGsJKi8KKwkJCXRudW06IAk1LAkvKiBUTlVNIGZpZWxkIGluIHh0YWxrCQkqLworCQkJYWRkcjoJMzgsCS8qIEFkZHJlc3Mgb2YgcmVxdWVzdAkqLworCQkJdmFsaWQ6CTEsCS8qIFZhbGlkIHN0YXR1cwkJKi8KKwkJCWlvdzoJMTsJLyogSU8gV3JpdGUgb3BlcmF0aW9uCSovCisJfSBpY3JiYV9maWVsZHNfczsKK30gaWNyYmFfdDsKKworLyogVGhpcyBpcyBhbiBhbHRlcm5hdGUgdHlwZWRlZiBmb3IgdGhlIEhVQjEgQ1JCIEEgaW4gb3JkZXIgdG8gYWxsb3cKKyAgIHJ1bnRpbWUgc2VsZWN0aW9uIG9mIHRoZSBmb3JtYXQgYmFzZWQgb24gdGhlIFJFVl9JRCBmaWVsZCBvZiB0aGUKKyAgIE5JX1NUQVRVU19SRVZfSUQgcmVnaXN0ZXIuICovCit0eXBlZGVmIHVuaW9uIGgxX2ljcmJhX3UgeworCXU2NAlyZWdfdmFsdWU7CisKKwlzdHJ1Y3QgeworCQl1NjQgCXJlc3ZkOiAJNiwKKwkJCXVudXNlZDoJMSwJLyogVW51c2VkIGJ1dCBSVyEhCSovCisJCQllcnJvcjoJMSwJLyogQ1JCIGhhcyBhbiBlcnJvcgkqLworCQkJZWNvZGU6CTQsCS8qIEVycm9yIENvZGUgCQkqLworCQkJbG5ldHVjZTogMSwJLyogU04wbmV0IFVuY29ycmVjdGFibGUgZXJyb3IgKi8KKwkJCW1hcms6CTEsCS8qIENSQiBIYXMgYmVlbiBtYXJrZWQgCSovCisJCQl4ZXJyOgkxLAkvKiBFcnJvciBiaXQgc2V0IGluIHh0YWxrIGhlYWRlciAqLworCQkJc2lkbjoJNCwJLyogU0lETiBmaWVsZCBmcm9tIHh0YWxrCSovCisJCQl0bnVtOiAJNSwJLyogVE5VTSBmaWVsZCBpbiB4dGFsawkJKi8KKwkJCWFkZHI6CTM4LAkvKiBBZGRyZXNzIG9mIHJlcXVlc3QJKi8KKwkJCXZhbGlkOgkxLAkvKiBWYWxpZCBzdGF0dXMJCSovCisJCQlpb3c6CTE7CS8qIElPIFdyaXRlIG9wZXJhdGlvbgkqLworCX0gaDFfaWNyYmFfZmllbGRzX3M7Cit9IGgxX2ljcmJhX3Q7CisKKy8qIFhYWCAtIElzIHRoaXMgc3RpbGwgcmlnaHQ/ICBDaGVjayB0aGUgc3BlYy4gKi8KKyNkZWZpbmUgSUNSQk5fQV9DRVJSX1NIRlQJNTQKKyNkZWZpbmUgSUNSQk5fQV9FUlJfTUFTSwkweDNmZgorCisjaWYgMAkvKiBEaXNhYmxlZCwgdGhpcyBjYXVzZXMgbmFtZXNwYWNlIHBvbHV0aW9uIGFuZCBicmVhayBhbGxtb2Rjb25maWcgKi8KKy8qCisgKiBFYXN5IGFjY2VzcyBtYWNyb3MuCisgKi8KKyNkZWZpbmUJYV9lcnJvcgkJaWNyYmFfZmllbGRzX3MuZXJyb3IKKyNkZWZpbmUJYV9lY29kZQkJaWNyYmFfZmllbGRzX3MuZWNvZGUKKyNkZWZpbmUJYV9sbmV0dWNlCWljcmJhX2ZpZWxkc19zLmxuZXR1Y2UKKyNkZWZpbmUJYV9tYXJrCQlpY3JiYV9maWVsZHNfcy5tYXJrCisjZGVmaW5lCWFfeGVycgkJaWNyYmFfZmllbGRzX3MueGVycgorI2RlZmluZQlhX3NpZG4JCWljcmJhX2ZpZWxkc19zLnNpZG4KKyNkZWZpbmUJYV90bnVtCQlpY3JiYV9maWVsZHNfcy50bnVtCisjZGVmaW5lCWFfYWRkcgkJaWNyYmFfZmllbGRzX3MuYWRkcgorI2RlZmluZQlhX3ZhbGlkCQlpY3JiYV9maWVsZHNfcy52YWxpZAorI2RlZmluZQlhX2lvdwkJaWNyYmFfZmllbGRzX3MuaW93CisjZW5kaWYKKworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKworI2RlZmluZQlJSU9fSUNSQl9BRERSX1NIRlQJMgkvKiBTaGlmdCB0byBnZXQgcHJvcGVyIGFkZHJlc3MgKi8KKworLyoKKyAqIHZhbHVlcyBmb3IgImVjb2RlIiBmaWVsZAorICovCisjZGVmaW5lCUlJT19JQ1JCX0VDT0RFX0RFUlIJMAkvKiBEaXJlY3RvcnkgZXJyb3IgZHVlIHRvIElJTyBhY2Nlc3MgKi8KKyNkZWZpbmUJSUlPX0lDUkJfRUNPREVfUEVSUgkxCS8qIFBvaXNvbiBlcnJvciBvbiBJTyBhY2Nlc3MgKi8KKyNkZWZpbmUJSUlPX0lDUkJfRUNPREVfV0VSUgkyCS8qIFdyaXRlIGVycm9yIGJ5IElJTyBhY2Nlc3MKKwkJCQkJICogZS5nLiBXSU5WIHRvIGEgUmVhZCBvbmx5IGxpbmUuCisJCQkJCSAqLworI2RlZmluZQlJSU9fSUNSQl9FQ09ERV9BRVJSCTMJLyogQWNjZXNzIGVycm9yIGNhdXNlZCBieSBJSU8gYWNjZXNzICovCisjZGVmaW5lCUlJT19JQ1JCX0VDT0RFX1BXRVJSCTQJLyogRXJyb3Igb24gcGFydGlhbCB3cml0ZQkqLworI2RlZmluZQlJSU9fSUNSQl9FQ09ERV9QUkVSUgk1CS8qIEVycm9yIG9uIHBhcnRpYWwgcmVhZAkqLworI2RlZmluZQlJSU9fSUNSQl9FQ09ERV9UT1VUCTYJLyogQ1JCIHRpbWVvdXQgYmVmb3JlIGRlYWxsb2NhdGluZyAqLworI2RlZmluZQlJSU9fSUNSQl9FQ09ERV9YVEVSUgk3CS8qIEluY29taW5nIHh0YWxrIHBrdCBoYWQgZXJyb3IgYml0ICovCisKKworCisvKgorICogRmllbGRzIGluIENSQiBSZWdpc3RlciBCCisgKi8KKyNpZm5kZWYgX19BU1NFTUJMWV9fCit0eXBlZGVmIHVuaW9uIGljcmJiX3UgeworCXU2NAlyZWdfdmFsdWU7CisJc3RydWN0IHsKKwkgICAgdTY0CXJzdmQxOgk1LAorCQlidGVudW06CTEsCS8qIEJURSB0byB3aGljaCBlbnRyeSBiZWxvbmdzIHRvICovCisJCWNvaHRyYW5zOiAxLAkvKiBDb2hlcmVudCB0cmFuc2FjdGlvbgkqLworCQl4dHNpemU6CTIsCS8qIFh0YWxrIG9wZXJhdGlvbiBzaXplCisJCQkJICogMDogRG91YmxlIFdvcmQKKwkJCQkgKiAxOiAzMiBCeXRlcy4KKwkJCQkgKiAyOiAxMjggQnl0ZXMsCisJCQkJICogMzogUmVzZXJ2ZWQuCisJCQkJICovCisJCXNyY25vZGU6IDksCS8qIFNvdXJjZSBOb2RlIElECQkqLworCQlzcmNpbml0OiAyLAkvKiBTb3VyY2UgSW5pdGlhdG9yOgorCQkJCSAqIFNlZSBiZWxvdyBmb3IgZmllbGQgdmFsdWVzLgorCQkJCSAqLworCQl1c2VvbGQ6CTEsCS8qIFVzZSBPTEQgY29tbWFuZCBmb3IgcHJvY2Vzc2luZyAqLworCQlpbXNndHlwZTogMiwJLyogSW5jb21pbmcgbWVzc2FnZSB0eXBlCisJCQkJICogc2VlIGJlbG93IGZvciBmaWVsZCB2YWx1ZXMKKwkJCQkgKi8KKwkJaW1zZzogCTgsCS8qIEluY29taW5nIG1lc3NhZ2UgCSovCisJCWluaXRhdG9yOiAzLAkvKiBJbml0aWF0b3Igb2Ygb3JpZ2luYWwgcmVxdWVzdAorCQkJCSAqIFNlZSBiZWxvdyBmb3IgZmllbGQgdmFsdWVzLgorCQkJCSAqLworCQlyZXF0eXBlOiA1LAkvKiBJZGVudGlmaWVzIHR5cGUgb2YgcmVxdWVzdAorCQkJCSAqIFNlZSBiZWxvdyBmb3IgZmllbGQgdmFsdWVzLgorCQkJCSAqLworCQlyc3ZkMjoJNywKKwkJYWNrY250OgkxMSwJLyogSW52YWxpZGF0ZSBhY2sgY291bnQJKi8KKwkJcmVzcDoJMSwJLyogZGF0YSByZXNwb25zZSAgZ2l2ZW4gdG8gcHJvY2Vzc29yICovCisJCWFjazogCTEsCS8qIGluZGljYXRlcyBkYXRhIGFjayByZWNlaXZlZCAJKi8KKwkJaG9sZDoJMSwJLyogZW50cnkgaXMgZ2F0aGVyaW5nIGludmFsIGFja3MgKi8KKwkJd2JfcGVuZDoxLAkvKiB3YWl0aW5nIGZvciB3cml0ZWJhY2sgdG8gY29tcGxldGUgKi8KKwkJaW50dm46IAkxLAkvKiBJbnRlcnZlbnRpb24gKi8KKwkJc3RhbGxfaWI6IDEsCS8qIFN0YWxsIElidWYgKGZyb20gY3Jvc3N0YWxrKSAqLworCQlzdGFsbF9pbnRyOiAxOwkvKiBTdGFsbCBpbnRlcm5hbCBpbnRlcnJ1cHRzICovCisJfSBpY3JiYl9maWVsZF9zOworfSBpY3JiYl90OworCisvKiBUaGlzIGlzIGFuIGFsdGVybmF0ZSB0eXBlZGVmIGZvciB0aGUgSFVCMSBDUkIgQiBpbiBvcmRlciB0byBhbGxvdworICAgcnVudGltZSBzZWxlY3Rpb24gb2YgdGhlIGZvcm1hdCBiYXNlZCBvbiB0aGUgUkVWX0lEIGZpZWxkIG9mIHRoZQorICAgTklfU1RBVFVTX1JFVl9JRCByZWdpc3Rlci4gKi8KK3R5cGVkZWYgdW5pb24gaDFfaWNyYmJfdSB7CisJdTY0CXJlZ192YWx1ZTsKKwlzdHJ1Y3QgeworCQl1NjQJcnN2ZDE6CTUsCisJCQlidGVudW06CTEsCS8qIEJURSB0byB3aGljaCBlbnRyeSBiZWxvbmdzIHRvICovCisJCQljb2h0cmFuczogMSwJLyogQ29oZXJlbnQgdHJhbnNhY3Rpb24JKi8KKwkJCXh0c2l6ZToJMiwJLyogWHRhbGsgb3BlcmF0aW9uIHNpemUKKwkJCQkJICogMDogRG91YmxlIFdvcmQKKwkJCQkJICogMTogMzIgQnl0ZXMuCisJCQkJCSAqIDI6IDEyOCBCeXRlcywKKwkJCQkJICogMzogUmVzZXJ2ZWQuCisJCQkJCSAqLworCQkJc3Jjbm9kZTogOSwJLyogU291cmNlIE5vZGUgSUQJCSovCisJCQlzcmNpbml0OiAyLAkvKiBTb3VyY2UgSW5pdGlhdG9yOgorCQkJCQkgKiBTZWUgYmVsb3cgZm9yIGZpZWxkIHZhbHVlcy4KKwkJCQkJICovCisJCQl1c2VvbGQ6CTEsCS8qIFVzZSBPTEQgY29tbWFuZCBmb3IgcHJvY2Vzc2luZyAqLworCQkJaW1zZ3R5cGU6IDIsCS8qIEluY29taW5nIG1lc3NhZ2UgdHlwZQorCQkJCQkgKiBzZWUgYmVsb3cgZm9yIGZpZWxkIHZhbHVlcworCQkJCQkgKi8KKwkJCWltc2c6IAk4LAkvKiBJbmNvbWluZyBtZXNzYWdlIAkqLworCQkJaW5pdGF0b3I6IDMsCS8qIEluaXRpYXRvciBvZiBvcmlnaW5hbCByZXF1ZXN0CisJCQkJCSAqIFNlZSBiZWxvdyBmb3IgZmllbGQgdmFsdWVzLgorCQkJCQkgKi8KKwkJCXJzdmQyOiAJMSwKKwkJCXBjYWNoZTogMSwJLyogZW50cnkgYmVsb25ncyB0byBwYXJ0aWFsIGNhY2hlICovCisJCQlyZXF0eXBlOiA1LAkvKiBJZGVudGlmaWVzIHR5cGUgb2YgcmVxdWVzdAorCQkJCQkgKiBTZWUgYmVsb3cgZm9yIGZpZWxkIHZhbHVlcy4KKwkJCQkJICovCisJCQlzdGxfaWI6CTEsCS8qIHN0YWxsIElidXMgY29taW5nIGZyb20geHRhbGsJKi8KKwkJCXN0bF9pbnRyOiAxLAkvKiBTdGFsbCBpbnRlcm5hbCBpbnRlcnJ1cHRzICovCisJCQlzdGxfYnRlMDogMSwJLyogU3RhbGwgQlRFIDAgCSovCisJCQlzdGxfYnRlMTogMSwJLyogU3RhbGwgQlRFIDEJKi8KKwkJCWludHJ2bjoJMSwJLyogUmVxIHdhcyB0YXJnZXQgb2YgaW50ZXJ2ZW50aW9uICovCisJCQlhY2tjbnQ6CTExLAkvKiBJbnZhbGlkYXRlIGFjayBjb3VudAkqLworCQkJcmVzcDoJMSwJLyogZGF0YSByZXNwb25zZSAgZ2l2ZW4gdG8gcHJvY2Vzc29yICovCisJCQlhY2s6IAkxLAkvKiBpbmRpY2F0ZXMgZGF0YSBhY2sgcmVjZWl2ZWQgCSovCisJCQlob2xkOgkxLAkvKiBlbnRyeSBpcyBnYXRoZXJpbmcgaW52YWwgYWNrcyAqLworCQkJd2JfcGVuZDoxLAkvKiB3YWl0aW5nIGZvciB3cml0ZWJhY2sgdG8gY29tcGxldGUgKi8KKwkJCXNsZWVwOiAJMSwJLyogeHRhbGsgcmVxIHNsZWVwaW5nIHRpbGwgSU8tc3luYyAqLworCQkJcG5kX3JlcGx5OiAxLAkvKiByZXBsaWVzIG5vdCBpc3NlZCBkdWUgdG8gSU9RIGZ1bGwgKi8KKwkJCXBuZF9yZXE6IDE7CS8qIHJlcXMgbm90IGlzc3VlZCBkdWUgdG8gSU9RIGZ1bGwgKi8KKwl9IGgxX2ljcmJiX2ZpZWxkX3M7Cit9IGgxX2ljcmJiX3Q7CisKKworI2RlZmluZQliX2ltc2d0eXBlCWljcmJiX2ZpZWxkX3MuaW1zZ3R5cGUKKyNkZWZpbmUJYl9idGVudW0JaWNyYmJfZmllbGRfcy5idGVudW0KKyNkZWZpbmUJYl9jb2h0cmFucwlpY3JiYl9maWVsZF9zLmNvaHRyYW5zCisjZGVmaW5lCWJfeHRzaXplCWljcmJiX2ZpZWxkX3MueHRzaXplCisjZGVmaW5lCWJfc3Jjbm9kZQlpY3JiYl9maWVsZF9zLnNyY25vZGUKKyNkZWZpbmUJYl9zcmNpbml0CWljcmJiX2ZpZWxkX3Muc3JjaW5pdAorI2RlZmluZQliX2ltc2d0eXBlCWljcmJiX2ZpZWxkX3MuaW1zZ3R5cGUKKyNkZWZpbmUJYl9pbXNnCQlpY3JiYl9maWVsZF9zLmltc2cKKyNkZWZpbmUJYl9pbml0aWF0b3IJaWNyYmJfZmllbGRfcy5pbml0aWF0b3IKKworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKworLyoKKyAqIHZhbHVlcyBmb3IgZmllbGQgeHRzaXplCisgKi8KKyNkZWZpbmUJSUlPX0lDUkJfWFRTSVpFX0RXCTAJLyogWHRhbGsgb3BlcmF0aW9uIHNpemUgaXMgOCBieXRlcyAgKi8KKyNkZWZpbmUJSUlPX0lDUkJfWFRTSVpFXzMyCTEJLyogWHRhbGsgb3BlcmF0aW9uIHNpemUgaXMgMzIgYnl0ZXMgKi8KKyNkZWZpbmUJSUlPX0lDUkJfWFRTSVpFXzEyOAkyCS8qIFh0YWxrIG9wZXJhdGlvbiBzaXplIGlzIDEyOCBieXRlcyAqLworCisvKgorICogdmFsdWVzIGZvciBmaWVsZCBzcmNpbml0CisgKi8KKyNkZWZpbmUJSUlPX0lDUkJfUFJPQzAJCTAJLyogU291cmNlIG9mIHJlcXVlc3QgaXMgUHJvYyAwICovCisjZGVmaW5lCUlJT19JQ1JCX1BST0MxCQkxCS8qIFNvdXJjZSBvZiByZXF1ZXN0IGlzIFByb2MgMSAqLworI2RlZmluZQlJSU9fSUNSQl9HQl9SRVEJCTIJLyogU291cmNlIGlzIEd1cmFudGVlZCBCVyByZXF1ZXN0ICovCisjZGVmaW5lCUlJT19JQ1JCX0lPX1JFUQkJMwkvKiBTb3VyY2UgaXMgTm9ybWFsIElPIHJlcXVlc3QJKi8KKworLyoKKyAqIFZhbHVlcyBmb3IgZmllbGQgaW1zZ3R5cGUKKyAqLworI2RlZmluZQlJSU9fSUNSQl9JTVNHVF9YVEFMSwkwCS8qIEluY29taW5nIE1lZXNzYWdlIGZyb20gWHRhbGsJKi8KKyNkZWZpbmUJSUlPX0lDUkJfSU1TR1RfQlRFCTEJLyogSW5jb21pbmcgbWVzc2FnZSBmcm9tIEJURSAJKi8KKyNkZWZpbmUJSUlPX0lDUkJfSU1TR1RfU04wTkVUCTIJLyogSW5jb21pbmcgbWVzc2FnZSBmcm9tIFNOMCBuZXQgKi8KKyNkZWZpbmUJSUlPX0lDUkJfSU1TR1RfQ1JCCTMJLyogSW5jb21pbmcgbWVzc2FnZSBmcm9tIENSQiA/Pz8gICovCisKKy8qCisgKiB2YWx1ZXMgZm9yIGZpZWxkIGluaXRpYXRvci4KKyAqLworI2RlZmluZQlJSU9fSUNSQl9JTklUX1hUQUxLCTAJLyogTWVzc2FnZSBvcmlnaW5hdGVkIGluIHh0YWxrCSovCisjZGVmaW5lCUlJT19JQ1JCX0lOSVRfQlRFMAkweDEJLyogTWVzc2FnZSBvcmlnaW5hdGVkIGluIEJURSAwCSovCisjZGVmaW5lCUlJT19JQ1JCX0lOSVRfU04wTkVUCTB4MgkvKiBNZXNzYWdlIG9yaWdpbmF0ZWQgaW4gU04wbmV0ICovCisjZGVmaW5lCUlJT19JQ1JCX0lOSVRfQ1JCCTB4MwkvKiBNZXNzYWdlIG9yaWdpbmF0ZWQgaW4gQ1JCID8gCSovCisjZGVmaW5lCUlJT19JQ1JCX0lOSVRfQlRFMQkweDUJLyogTUVzc2FnZSBvcmlnaW5hdGVkIGluIEJURSAxCSovCisKKy8qCisgKiBWYWx1ZXMgZm9yIGZpZWxkIHJlcXR5cGUuCisgKi8KKy8qIFhYWCAtIE5lZWQgdG8gZml4IHRoaXMgZm9yIEh1YiAyICovCisjZGVmaW5lCUlJT19JQ1JCX1JFUV9EV1JECTAJLyogUmVxdWVzdCB0eXBlIGRvdWJsZSB3b3JkCSovCisjZGVmaW5lCUlJT19JQ1JCX1JFUV9RQ0xSRAkxCS8qIFJlcXVlc3QgaXMgUXJ0ciBDYWNlaCBsaW5lIFJkICovCisjZGVmaW5lCUlJT19JQ1JCX1JFUV9CTEtSRAkyCS8qIFJlcXVlc3QgaXMgYmxvY2sgcmVhZAkqLworI2RlZmluZQlJSU9fSUNSQl9SRVFfUlNIVQk2CS8qIFJlcXVlc3QgaXMgQlRFIGJsb2NrIHJlYWQJKi8KKyNkZWZpbmUJSUlPX0lDUkJfUkVRX1JFWFUJNwkvKiByZXF1ZXN0IGlzIEJURSBFeGNsIFJlYWQJKi8KKyNkZWZpbmUJSUlPX0lDUkJfUkVRX1JERVgJOAkvKiBSZXF1ZXN0IGlzIFJlYWQgRXhjbHVzaXZlCSovCisjZGVmaW5lCUlJT19JQ1JCX1JFUV9XSU5DCTkJLyogUmVxdWVzdCBpcyBXcml0ZSBJbnZhbGlkYXRlIAkqLworI2RlZmluZQlJSU9fSUNSQl9SRVFfQldJTlYJMTAJLyogUmVxdWVzdCBpcyBCVEUgV2ludgkJKi8KKyNkZWZpbmUJSUlPX0lDUkJfUkVRX1BJT1JECTExCS8qIFJlcXVlc3QgaXMgUElPIHJlYWQJCSovCisjZGVmaW5lCUlJT19JQ1JCX1JFUV9QSU9XUgkxMgkvKiBSZXF1ZXN0IGlzIFBJTyBXcml0ZSAJKi8KKyNkZWZpbmUJSUlPX0lDUkJfUkVRX1BSRE0JMTMJLyogUmVxdWVzdCBpcyBGZXRjaCZPcAkJKi8KKyNkZWZpbmUJSUlPX0lDUkJfUkVRX1BXUk0JMTQJLyogUmVxdWVzdCBpcyBTdG9yZSAmT3AJCSovCisjZGVmaW5lCUlJT19JQ1JCX1JFUV9QVFBXUgkxNQkvKiBSZXF1ZXN0IGlzIFBlZXIgdG8gcGVlcgkqLworI2RlZmluZQlJSU9fSUNSQl9SRVFfV0IJCTE2CS8qIFJlcXVlc3QgaXMgV3JpdGUgYmFjawkqLworI2RlZmluZQlJSU9fSUNSQl9SRVFfREVYCTE3CS8qIFJldGFpbmVkIERFWCBDYWNoZSBsaW5lCSovCisKKy8qCisgKiBGaWVsZHMgaW4gQ1JCIFJlZ2lzdGVyIEMKKyAqLworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCit0eXBlZGVmIHVuaW9uIGljcmJjX3MgeworCXU2NAlyZWdfdmFsdWU7CisJc3RydWN0IHsKKwkJdTY0CXJzdmQ6CTYsCisJCQlzbGVlcDoJMSwKKwkJCXByaWNudDogNCwJLyogUHJpb3JpdHkgY291bnQgc2VudCB3aXRoIFJlYWQgcmVxICovCisJCQlwcmlwc2M6IDQsCS8qIFByaW9yaXR5IFByZSBzY2FsYXIgCSovCisJCQlidGVvcDoJMSwJLyogQlRFIE9wZXJhdGlvbiAJKi8KKwkJCXB1c2hfYmU6IDM0LAkvKiBQdXNoIGFkZHJlc3MgQnl0ZSBlbmFibGUKKwkJCQkJICogSG9sZHMgcHVzaCBhZGRyLCBpZiBDUkIgaXMgZm9yIEJURQorCQkJCQkgKiBJZiBDUkIgYmVsb25ncyB0byBQYXJ0aWFsIGNhY2hlLAorCQkJCQkgKiB0aGlzIGNvbnRhaW5zIGJ5dGUgZW5hYmxlcyBiaXRzCisJCQkJCSAqIChbNDc6NDZdID0gMCkKKwkJCQkJICovCisJCQlzdXBwbDoJMTEsCS8qIFN1cHBsZW1lbnRhbCBmaWVsZAkqLworCQkJYmFycm9wOiAxLAkvKiBCYXJyaWVyIE9wIGJpdCBzZXQgaW4geHRhbGsgcmVxICovCisJCQlkb3Jlc3A6IDEsCS8qIFh0YWxrIHJlcSBuZWVkcyBhIHJlc3BvbnNlIAkqLworCQkJZ2JyOgkxOwkvKiBHQlIgYml0IHNldCBpbiB4dGFsayBwYWNrZXQgCSovCisJfSBpY3JiY19maWVsZF9zOworfSBpY3JiY190OworCisjZGVmaW5lCWNfcHJpY250CWljcmJjX2ZpZWxkX3MucHJpY250CisjZGVmaW5lCWNfcHJpcHNjCWljcmJjX2ZpZWxkX3MucHJpcHNjCisjZGVmaW5lCWNfYnRlb3AJCWljcmJjX2ZpZWxkX3MuYnRlb3AKKyNkZWZpbmUJY19idGVhZGRyCWljcmJjX2ZpZWxkX3MucHVzaF9iZQkvKiBwdXNoX2JlIGZpZWxkIGhhcyAyIG5hbWVzICovCisjZGVmaW5lIGNfYmVuYWJsZSAJaWNyYmNfZmllbGRfcy5wdXNoX2JlCS8qIHB1c2hfYmUgZmllbGQgaGFzIDIgbmFtZXMgKi8KKyNkZWZpbmUJY19zdXBwbAkJaWNyYmNfZmllbGRfcy5zdXBwbAorI2RlZmluZQljX2JhcnJvcAlpY3JiY19maWVsZF9zLmJhcnJvcAorI2RlZmluZQljX2RvcmVzcAlpY3JiY19maWVsZF9zLmRvcmVzcAorI2RlZmluZQljX2dicglpY3JiY19maWVsZF9zLmdicgorI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKworLyoKKyAqIEZpZWxkcyBpbiBDUkIgUmVnaXN0ZXIgRAorICovCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCit0eXBlZGVmIHVuaW9uIGljcmJkX3MgeworCXU2NAlyZWdfdmFsdWU7CisJc3RydWN0IHsKKwkgICAgdTY0CXJzdmQ6CTM4LAorCQl0b3V0dmxkOiAxLAkvKiBUaW1lb3V0IGluIHByb2dyZXNzIGZvciB0aGlzIENSQiAqLworCQljdHh0dmxkOiAxLAkvKiBDb250ZXh0IGZpZWxkIGJlbG93IGlzIHZhbGlkCSovCisJCXJzdmQyOgkxLAorCQljb250ZXh0OiAxNSwgCS8qIEJpdCB2ZWN0b3I6CisJCQkJICogSGFzIGEgYml0IHNldCBmb3IgZWFjaCBDUkIgZW50cnkKKwkJCQkgKiB3aGljaCBuZWVkcyB0byBiZSBkZWFsbG9jYXRlZAorCQkJCSAqIGJlZm9yZSB0aGlzIENSQiBlbnRyeSBpcyBwcm9jZXNzZWQuCisJCQkJICogU2V0IG9ubHkgZm9yIGJhcnJpZXIgb3BlcmF0aW9ucy4KKwkJCQkgKi8KKwkJdGltZW91dDogODsJLyogVGltZW91dCBVcHBlciA4IGJpdHMJKi8KKwl9IGljcmJkX2ZpZWxkX3M7Cit9IGljcmJkX3Q7CisKKyNkZWZpbmUJaWNyYmRfdG91dHZsZAlpY3JiZF9maWVsZF9zLnRvdXR2bGQKKyNkZWZpbmUJaWNyYmRfY3R4dHZsZAlpY3JiZF9maWVsZF9zLmN0eHR2bGQKKyNkZWZpbmUJaWNyYmRfY29udGV4dAlpY3JiZF9maWVsZF9zLmNvbnRleHQKKworCit0eXBlZGVmIHVuaW9uIGh1YmlpX2lmZHJfdSB7CisJdTY0CWhpX2lmZHJfdmFsdWU7CisJc3RydWN0IHsKKwkJdTY0CWlmZHJfcnN2ZDoJNDksCisJICAgICAgICAgICAgICAgIGlmZHJfbWF4cnA6CSA3LAorCSAgICAgICAgICAgICAgICBpZmRyX3JzdmQxOgkgMSwKKyAgICAgICAgICAgICAgICAgICAgICAJaWZkcl9tYXhycToJIDc7CisJfSBoaV9pZmRyX2ZpZWxkczsKK30gaHViaWlfaWZkcl90OworCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisvKgorICogSGFyZHdhcmUgZGVzaWduZWQgbmFtZXMgZm9yIHRoZSBCVEUgY29udHJvbCByZWdpc3RlcnMuCisgKi8KKyNkZWZpbmUgSUlPX0lCTFNfMAkweDQxMDAwMAkvKiBCVEUgbGVuZ3RoL3N0YXR1cyAwICovCisjZGVmaW5lIElJT19JQlNBXzAJMHg0MTAwMDgJLyogQlRFIHNvdXJjZSBhZGRyZXNzIDAgKi8KKyNkZWZpbmUgSUlPX0lCREFfMAkweDQxMDAxMAkvKiBCVEUgZGVzdGluYXRpb24gYWRkcmVzcyAwICovCisjZGVmaW5lIElJT19JQkNUXzAJMHg0MTAwMTgJLyogQlRFIGNvbnRyb2wvdGVybWluYXRlIDAgKi8KKyNkZWZpbmUgSUlPX0lCTkFfMAkweDQxMDAyMAkvKiBCVEUgbm90aWZpY2F0aW9uIGFkZHJlc3MgMCAqLworI2RlZmluZSBJSU9fSUJOUl8wCUlJT19JQk5BXzAKKyNkZWZpbmUgSUlPX0lCSUFfMAkweDQxMDAyOAkvKiBCVEUgaW50ZXJydXB0IGFkZHJlc3MgMCAqLworCisjZGVmaW5lIElJT19JQkxTXzEJMHg0MjAwMDAJLyogQlRFIGxlbmd0aC9zdGF0dXMgMSAqLworI2RlZmluZSBJSU9fSUJTQV8xCTB4NDIwMDA4CS8qIEJURSBzb3VyY2UgYWRkcmVzcyAxICovCisjZGVmaW5lIElJT19JQkRBXzEJMHg0MjAwMTAJLyogQlRFIGRlc3RpbmF0aW9uIGFkZHJlc3MgMSAqLworI2RlZmluZSBJSU9fSUJDVF8xCTB4NDIwMDE4CS8qIEJURSBjb250cm9sL3Rlcm1pbmF0ZSAxICovCisjZGVmaW5lIElJT19JQk5BXzEJMHg0MjAwMjAJLyogQlRFIG5vdGlmaWNhdGlvbiBhZGRyZXNzIDEgKi8KKyNkZWZpbmUgSUlPX0lCTlJfMQlJSU9fSUJOQV8xCisjZGVmaW5lIElJT19JQklBXzEJMHg0MjAwMjgJLyogQlRFIGludGVycnVwdCBhZGRyZXNzIDEgKi8KKworLyoKKyAqIE1vcmUgbWlzY2VsbGFuZW91cyByZWdpc3RlcnMKKyAqLworI2RlZmluZSBJSU9fSVBDUgkweDQzMDAwMAkvKiBQZXJmb3JtYW5jZSBDb250cm9sICovCisjZGVmaW5lIElJT19JUFBSCTB4NDMwMDA4CS8qIFBlcmZvcm1hbmNlIFByb2ZpbGluZyAqLworCisvKgorICogSU8gRXJyb3IgQ2xlYXIgcmVnaXN0ZXIgYml0IGZpZWxkIGRlZmluaXRpb25zCisgKi8KKyNkZWZpbmUgSUVDTFJfQlRFMQkJKDEgPDwgMTgpICAvKiBjbGVhciBidGUgZXJyb3IgMSA/Pz8gKi8KKyNkZWZpbmUgSUVDTFJfQlRFMAkJKDEgPDwgMTcpICAvKiBjbGVhciBidGUgZXJyb3IgMCA/Pz8gKi8KKyNkZWZpbmUgSUVDTFJfQ1JBWlkJCSgxIDw8IDE2KSAgLyogY2xlYXIgY3JhenkgYml0IGluIHdzdGF0IHJlZyAqLworI2RlZmluZSBJRUNMUl9QUkJfRgkJKDEgPDwgMTUpICAvKiBjbGVhciBlcnIgYml0IGluIFBSQl9GIHJlZyAqLworI2RlZmluZSBJRUNMUl9QUkJfRQkJKDEgPDwgMTQpICAvKiBjbGVhciBlcnIgYml0IGluIFBSQl9FIHJlZyAqLworI2RlZmluZSBJRUNMUl9QUkJfRAkJKDEgPDwgMTMpICAvKiBjbGVhciBlcnIgYml0IGluIFBSQl9EIHJlZyAqLworI2RlZmluZSBJRUNMUl9QUkJfQwkJKDEgPDwgMTIpICAvKiBjbGVhciBlcnIgYml0IGluIFBSQl9DIHJlZyAqLworI2RlZmluZSBJRUNMUl9QUkJfQgkJKDEgPDwgMTEpICAvKiBjbGVhciBlcnIgYml0IGluIFBSQl9CIHJlZyAqLworI2RlZmluZSBJRUNMUl9QUkJfQQkJKDEgPDwgMTApICAvKiBjbGVhciBlcnIgYml0IGluIFBSQl9BIHJlZyAqLworI2RlZmluZSBJRUNMUl9QUkJfOQkJKDEgPDwgOSkgICAvKiBjbGVhciBlcnIgYml0IGluIFBSQl85IHJlZyAqLworI2RlZmluZSBJRUNMUl9QUkJfOAkJKDEgPDwgOCkgICAvKiBjbGVhciBlcnIgYml0IGluIFBSQl84IHJlZyAqLworI2RlZmluZSBJRUNMUl9QUkJfMAkJKDEgPDwgMCkgICAvKiBjbGVhciBlcnIgYml0IGluIFBSQl8wIHJlZyAqLworCisvKgorICogSU8gUElPIFJlYWQgVGFibGUgRW50cnkgZm9ybWF0CisgKi8KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKwordHlwZWRlZiB1bmlvbiBpcHJ0ZV9hIHsKKwl1NjQJZW50cnk7CisJc3RydWN0IHsKKwkgICAgdTY0CXJzdmQxICAgICA6IDcsICAvKiBSZXNlcnZlZCBmaWVsZCAJCSovCisJCXZhbGlkICAgICA6IDEsCS8qIE1hcHMgdG8gYSB0aW1lb3V0IGVudHJ5CSovCisJCXJzdmQyICAgICA6IDEsCisJCXNyY25vZGUgICA6IDksCS8qIE5vZGUgd2hpY2ggZGlkIHRoaXMgUElPCSovCisJCWluaXRpYXRvciA6IDIsCS8qIElmIFQ1QSBvciBUNUIgb3IgSU8gCQkqLworCQlyc3ZkMyAgICAgOiAzLAorCQlhZGRyICAgICAgOiAzOCwJLyogUGh5c2ljYWwgYWRkcmVzcyBvZiBQSU8JKi8KKwkJcnN2ZDQgICAgIDogMzsKKwl9IGlwcnRlX2ZpZWxkczsKK30gaXBydGVfYV90OworCisjZGVmaW5lCWlwcnRlX3ZhbGlkCWlwcnRlX2ZpZWxkcy52YWxpZAorI2RlZmluZQlpcHJ0ZV90aW1lb3V0CWlwcnRlX2ZpZWxkcy50aW1lb3V0CisjZGVmaW5lCWlwcnRlX3NyY25vZGUJaXBydGVfZmllbGRzLnNyY25vZGUKKyNkZWZpbmUJaXBydGVfaW5pdAlpcHJ0ZV9maWVsZHMuaW5pdGlhdG9yCisjZGVmaW5lCWlwcnRlX2FkZHIJaXBydGVfZmllbGRzLmFkZHIKKworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKworI2RlZmluZQlJUFJURV9BRERSU0hGVAkzCisKKy8qCisgKiBIdWIgSUlPIFBSQiBSZWdpc3RlciBmb3JtYXQuCisgKi8KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKy8qCisgKiBOb3RlOiBGaWVsZHMgYm5ha2N0ciwgYW5ha2N0ciwgeHRhbGtjdHJtb2RlLCBvdmZsb3cgZmllbGRzIGFyZQorICogIlN0YXR1cyIgZmllbGRzLCBhbmQgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbiBjYXNlIG9mIGNsZWFuIHVwIGFmdGVyIGVycm9ycy4KKyAqLworCit0eXBlZGVmIHVuaW9uIGlwcmJfdSB7CisJdTY0CXJlZ192YWx1ZTsKKwlzdHJ1Y3QgeworCSAgICB1NjQJcnN2ZDE6CTE1LAorCQllcnJvcjoJMSwJLyogV2lkZ2V0IHJjdmQgd3IgcmVzcCBwa3Qgdy8gZXJyb3IgKi8KKwkJb3ZmbG93Ogk1LAkvKiBPdmVyIGZsb3cgY291bnQuIHBlcmYgbWVhc3VyZW1lbnQgKi8KKwkJZmlyZV9hbmRfZm9yZ2V0OiAxLCAvKiBMYXVuY2ggV3JpdGUgd2l0aG91dCByZXNwb25zZSAqLworCQltb2RlOgkyLAkvKiBXaWRnZXQgb3BlcmF0aW9uIE1vZGUJKi8KKwkJcnN2ZDI6CTIsCisJCWJuYWtjdHI6IDE0LAorCQlyc3ZkMzogCTIsCisJCWFuYWtjdHI6IDE0LAorCQl4dGFsa2N0cjogODsKKwl9IGlwcmJfZmllbGRzX3M7Cit9IGlwcmJfdDsKKworI2RlZmluZSBpcHJiX3JlZ3ZhbAlyZWdfdmFsdWUKKworI2RlZmluZQlpcHJiX2Vycm9yCWlwcmJfZmllbGRzX3MuZXJyb3IKKyNkZWZpbmUJaXByYl9vdmZsb3cJaXByYl9maWVsZHNfcy5vdmZsb3cKKyNkZWZpbmUJaXByYl9mZgkJaXByYl9maWVsZHNfcy5maXJlX2FuZF9mb3JnZXQKKyNkZWZpbmUJaXByYl9tb2RlCWlwcmJfZmllbGRzX3MubW9kZQorI2RlZmluZQlpcHJiX2JuYWtjdHIJaXByYl9maWVsZHNfcy5ibmFrY3RyCisjZGVmaW5lCWlwcmJfYW5ha2N0cglpcHJiX2ZpZWxkc19zLmFuYWtjdHIKKyNkZWZpbmUJaXByYl94dGFsa2N0cglpcHJiX2ZpZWxkc19zLnh0YWxrY3RyCisKKyNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCisKKy8qCisgKiB2YWx1ZXMgZm9yIG1vZGUgZmllbGQgaW4gaXByYl90LgorICogRm9yIGRldGFpbHMgb2YgdGhlIG1lYW5pbmdzIG9mIE5BSyBhbmQgQWNjZXB0LCByZWZlciB0aGUgUElPIGZsb3cKKyAqIGRvY3VtZW50CisgKi8KKyNkZWZpbmUJSVBSQl9NT0RFX05PUk1BTAkoMCkKKyNkZWZpbmUJSVBSQl9NT0RFX0NPTExFQ1RfQQkoMSkJLyogUFJCIGluIGNvbGxlY3QgQSBtb2RlICovCisjZGVmaW5lCUlQUkJfTU9ERV9TRVJWSUNFX0EJKDIpCS8qIE5BSyBCIGFuZCBBY2NlcHQgQSAqLworI2RlZmluZQlJUFJCX01PREVfU0VSVklDRV9CCSgzKQkvKiBOQUsgQSBhbmQgQWNjZXB0IEIgKi8KKworLyoKKyAqIElPIENSQiBlbnRyeSBDX0EgdG8gRV9BIDogUGFydGlhbCAoY2FjaGUpIENSQlMKKyAqLworI2lmbmRlZiBfX0FTU0VNQkxZX18KK3R5cGVkZWYgdW5pb24gaWNyYnBfYSB7CisJdTY0ICAgaXBfcmVnOwkgICAgLyogdGhlIGVudGlyZSByZWdpc3RlciB2YWx1ZQkqLworCXN0cnVjdCB7CisJICAgICB1NjQgZXJyb3I6CTEsICAvKiAgICA2MywgZXJyb3Igb2NjdXJyZWQJCSovCisJCWxuX3VjZToJMSwgIC8qICAgIDYyOiB1bmNvcnJlY3RhYmxlIG1lbW9yeSAJKi8KKwkJbG5fYWU6CTEsICAvKiAgICA2MTogcHJvdGVjdGlvbiB2aW9sYXRpb24gCSovCisJCWxuX3dlcnI6MSwgIC8qICAgIDYwOiB3cml0ZSBhY2Nlc3MgZXJyb3IgCSovCisJCWxuX2FlcnI6MSwgIC8qICAgIDU5OiBzbjBuZXQ6IEFkZHJlc3MgZXJyb3IJKi8KKwkJbG5fcGVycjoxLCAgLyogICAgNTg6IHNuMG5ldDogcG9pc29uIGVycm9yCSovCisJCXRpbWVvdXQ6MSwgIC8qICAgIDU3OiBDUkIgdGltZWQgb3V0CQkqLworCQlsX2JkcGt0OjEsICAvKiAgICA1NjogdHJ1bmNhdGVkIHBrdCBvbiBzbjBuZXQJKi8KKwkJY19iZHBrdDoxLCAgLyogICAgNTU6IHRydW5jYXRlZCBwa3Qgb24geHRhbGsJKi8KKwkJY19lcnI6CTEsICAvKiAgICA1NDogaW5jb21pbmcgeHRhbGsgcmVxLCBlcnIgc2V0Ki8KKwkJcnN2ZDE6IDEyLCAgLyogNTMtNDI6IHJlc2VydmVkCQkJKi8KKwkJdmFsaWQ6CTEsICAvKiAgICA0MTogVmFsaWQgc3RhdHVzCQkqLworCQlzaWRuOgk0LCAgLyogNDAtMzc6IFNJRE4gZmllbGQgb2YgeHRhbGsgcnFzdAkqLworCQl0bnVtOgk1LCAgLyogMzYtMzI6IFROVU0gb2YgeHRhbGsgcmVxdWVzdAkqLworCQlibzoJMSwgIC8qICAgIDMxOiBiYXJyaWVyIG9wIHNldCBpbiB4dGFsayBycXN0Ki8KKwkJcmVzcHJxZDoxLCAgLyogICAgMzA6IHh0YWxrIHJxc3QgcmVxdWlyZXMgcmVzcG9uc2UqLworCQlnYnI6CTEsICAvKiAgICAyOTogZ2JyIGJpdCBzZXQgaW4geHRhbGsgcnFzdAkqLworCQlzaXplOgkyLCAgLyogMjgtMjc6IHNpemUgb2YgeHRhbGsgcmVxdWVzdAkqLworCQlleGNsOgk0LCAgLyogMjYtMjM6IGV4Y2x1c2l2ZSBiaXQocykJCSovCisJCXN0YWxsOgkzLCAgLyogMjItMjA6IHN0YWxsICh4dGFsaywgYnRlIDAvMSkJKi8KKwkJaW50dm46CTEsICAvKiAgICAxOTogcnFzdCB0YXJnZXQgb2YgaW50ZXJ2ZW50aW9uKi8KKwkJcmVzcDoJMSwgIC8qICAgIDE4OiBEYXRhIHJlc3BvbnNlIGdpdmVuIHRvIHQ1CSovCisJCWFjazoJMSwgIC8qICAgIDE3OiBEYXRhIGFjayByZWNlaXZlZC4JKi8KKwkJaG9sZDoJMSwgIC8qICAgIDE2OiBjcmIgZ2F0aGVyaW5nIGludmFsaWRhdGUgYWNrcyovCisJCXdiOgkxLCAgLyogICAgMTU6IHdyaXRlYmFjayBwZW5kaW5nLgkqLworCQlhY2tfY250OjExLCAvKiAxNC0wNDogY291bnRlciBvZiBpbnZhbGlkYXRlIGFja3MqLworCQl0c2NhbGVyOjQ7ICAvKiAwMy0wMDogVGltZW91dCBwcmVzY2FsZXIJCSovCisJfSBpcF9mbXQ7Cit9IGljcmJwX2FfdDsKKworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKworLyoKKyAqIEEgY291cGxlIG9mIGRlZmluZXMgdG8gZ28gd2l0aCB0aGUgYWJvdmUgc3RydWN0dXJlLgorICovCisjZGVmaW5lIElDUkJQX0FfQ0VSUl9TSEZUCTU0CisjZGVmaW5lIElDUkJQX0FfRVJSX01BU0sJMHgzZmYKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK3R5cGVkZWYgdW5pb24gaHViaWlfaWRzciB7CisJdTY0IGlpbl9yZWc7CisJc3RydWN0IHsKKwkJdTY0IHJzdmQxIDogMzUsCisJICAgICAgICAgICAgaXNlbnQgOiAxLAorCSAgICAgICAgICAgIHJzdmQyIDogMywKKwkgICAgICAgICAgICBpZW5hYmxlOiAxLAorCSAgICAgICAgICAgIHJzdmQgIDogNywKKwkgICAgICAgICAgICBub2RlICA6IDksCisJICAgICAgICAgICAgcnN2ZDQgOiAxLAorCSAgICAgICAgICAgIGxldmVsIDogNzsKKwl9IGlpbl9mbXQ7Cit9IGh1YmlpX2lkc3JfdDsKKyNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCisKKy8qCisgKiBJTyBCVEUgTGVuZ3RoL1N0YXR1cyAoSUlPX0lCTFMpIHJlZ2lzdGVyIGJpdCBmaWVsZCBkZWZpbml0aW9ucworICovCisjZGVmaW5lIElCTFNfQlVTWQkJKDB4MSA8PCAyMCkKKyNkZWZpbmUgSUJMU19FUlJPUl9TSEZUCQkxNgorI2RlZmluZSBJQkxTX0VSUk9SCQkoMHgxIDw8IElCTFNfRVJST1JfU0hGVCkKKyNkZWZpbmUgSUJMU19MRU5HVEhfTUFTSwkweGZmZmYKKworLyoKKyAqIElPIEJURSBDb250cm9sL1Rlcm1pbmF0ZSByZWdpc3RlciAoSUJDVCkgcmVnaXN0ZXIgYml0IGZpZWxkIGRlZmluaXRpb25zCisgKi8KKyNkZWZpbmUgSUJDVF9QT0lTT04JCSgweDEgPDwgOCkKKyNkZWZpbmUgSUJDVF9OT1RJRlkJCSgweDEgPDwgNCkKKyNkZWZpbmUgSUJDVF9aRklMX01PREUJCSgweDEgPDwgMCkKKworLyoKKyAqIElPIEJURSBJbnRlcnJ1cHQgQWRkcmVzcyBSZWdpc3RlciAoSUJJQSkgcmVnaXN0ZXIgYml0IGZpZWxkIGRlZmluaXRpb25zCisgKi8KKyNkZWZpbmUgSUJJQV9MRVZFTF9TSEZUCQkxNgorI2RlZmluZSBJQklBX0xFVkVMX01BU0sJCSgweDdmIDw8IElCSUFfTEVWRUxfU0hGVCkKKyNkZWZpbmUgSUJJQV9OT0RFX0lEX1NIRlQJMAorI2RlZmluZSBJQklBX05PREVfSURfTUFTSwkoMHgxZmYpCisKKy8qCisgKiBNaXNjZWxsYW5lb3VzIGh1YiBjb25zdGFudHMKKyAqLworCisvKiBOdW1iZXIgb2Ygd2lkZ2V0cyBzdXBwb3J0ZWQgYnkgaHViICovCisjZGVmaW5lIEhVQl9OVU1fV0lER0VUCQk5CisjZGVmaW5lIEhVQl9XSURHRVRfSURfTUlOCTB4OAorI2RlZmluZSBIVUJfV0lER0VUX0lEX01BWAkweGYKKworI2RlZmluZSBIVUJfV0lER0VUX1BBUlRfTlVNCTB4YzEwMQorI2RlZmluZSBNQVhfSFVCU19QRVJfWEJPVwkyCisKKy8qCisgKiBHZXQgYSBodWIncyB3aWRnZXQgaWQgZnJvbSB3aWRnZXQgY29udHJvbCByZWdpc3RlcgorICovCisjZGVmaW5lIElJT19XQ1JfV0lEX0dFVChuYXNpZCkJKFJFTU9URV9IVUJfTChuYXNpZCwgSUlJX1dDUikgJiAweGYpCisjZGVmaW5lIElJT19XU1RfRVJST1JfTUFTSwkoVUlOVDY0X0NBU1QgMSA8PCAzMikgLyogV2lkZ2V0IHN0YXR1cyBlcnJvciAqLworCisvKgorICogTnVtYmVyIG9mIGNyZWRpdHMgSHViIHdpZGdldCBoYXMgd2hpbGUgc2VuZGluZyByZXEvcmVzcG9uc2UgdG8KKyAqIHhib3cuCisgKiBWYWx1ZSBvZiAzIGlzIHJlcXVpcmVkIGJ5IFhib3cgMS4xCisgKiBXZSBtYXkgYmUgYWJsZSB0byBpbmNyZWFzZSB0aGlzIHRvIDQgd2l0aCBYYm93IDEuMi4KKyAqLworI2RlZmluZSAgICAgICBIVUJJSV9YQk9XX0NSRURJVCAgICAgICAzCisjZGVmaW5lCSAgICAgIEhVQklJX1hCT1dfUkVWMl9DUkVESVQgIDQKKworI2VuZGlmIC8qIF9BU01fU0dJX1NOX1NOMF9IVUJJT19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NuL3NuMC9odWJtZC5oIGIvaW5jbHVkZS9hc20tbWlwcy9zbi9zbjAvaHVibWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjZkZWY0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zbi9zbjAvaHVibWQuaApAQCAtMCwwICsxLDc5MCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIERlcml2ZWQgZnJvbSBJUklYIDxzeXMvU04vU04wL2h1Ym1kLmg+LCByZXZpc2lvbiAxLjU5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5MiAtIDE5OTcsIDE5OTkgU2lsaWNvbiBHcmFwaGljcywgSW5jLgorICogQ29weXJpZ2h0IChDKSAxOTk5IGJ5IFJhbGYgQmFlY2hsZQorICovCisjaWZuZGVmCV9BU01fU05fU04wX0hVQk1EX0gKKyNkZWZpbmUJX0FTTV9TTl9TTjBfSFVCTURfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKy8qCisgKiBIdWIgTWVtb3J5L0RpcmVjdG9yeSBpbnRlcmZhY2UgcmVnaXN0ZXJzCisgKi8KKyNkZWZpbmUgQ0FDSEVfU0xJTkVfU0laRSAgICAgICAgMTI4CS8qIFNlY29uZGFyeSBjYWNoZSBsaW5lIHNpemUgb24gU04wICovCisKKyNkZWZpbmUJTUFYX1JFR0lPTlMJCTY0CisKKy8qIEhhcmR3YXJlIHBhZ2Ugc2l6ZSBhbmQgc2hpZnQgKi8KKworI2RlZmluZSBNRF9QQUdFX1NJWkUJCTQwOTYJIC8qIFBhZ2Ugc2l6ZSBpbiBieXRlcwkJICAgICovCisjZGVmaW5lIE1EX1BBR0VfTlVNX1NIRlQJMTIJIC8qIEFkZHJlc3MgdG8gcGFnZSBudW1iZXIgc2hpZnQgICAgKi8KKworLyogUmVnaXN0ZXIgb2Zmc2V0cyBmcm9tIExPQ0FMX0hVQiBvciBSRU1PVEVfSFVCICovCisKKyNkZWZpbmUgTURfQkFTRQkJCTB4MjAwMDAwCisjZGVmaW5lIE1EX0JBU0VfUEVSRgkJMHgyMTAwMDAKKyNkZWZpbmUgTURfQkFTRV9KVU5LCQkweDIyMDAwMAorCisjZGVmaW5lIE1EX0lPX1BST1RFQ1QJCTB4MjAwMDAwIC8qIE1EIGFuZCBjb3JlIHJlZ2lzdGVyIHByb3RlY3Rpb24gKi8KKyNkZWZpbmUgTURfSU9fUFJPVF9PVlJSRAkweDIwMDAwOCAvKiBDbGVhciBteSBiaXQgaW4gTURfSU9fUFJPVEVDVCAgICovCisjZGVmaW5lIE1EX0hTUEVDX1BST1RFQ1QJMHgyMDAwMTAgLyogQkRESVIsIExCT09ULCBSQk9PVCBwcm90ZWN0aW9uICAqLworI2RlZmluZSBNRF9NRU1PUllfQ09ORklHCTB4MjAwMDE4IC8qIE1lbW9yeS9EaXJlY3RvcnkgRElNTSBjb250cm9sICAgKi8KKyNkZWZpbmUJTURfUkVGUkVTSF9DT05UUk9MCTB4MjAwMDIwIC8qIE1lbW9yeS9EaXJlY3RvcnkgcmVmcmVzaCBjdHJsICAgKi8KKyNkZWZpbmUJTURfRkFORE9QX0NBQ19TVEFUCTB4MjAwMDI4IC8qIEZldGNoLWFuZC1vcCBjYWNoZSBzdGF0dXMgCSAgICAqLworI2RlZmluZQlNRF9NSUdfRElGRl9USFJFU0gJMHgyMDAwMzAgLyogUGFnZSBtaWdyLiBjb3VudCBkaWZmIHRocmVzaC4gICAqLworI2RlZmluZQlNRF9NSUdfVkFMVUVfVEhSRVNICTB4MjAwMDM4IC8qIFBhZ2UgbWlnci4gY291bnQgYWJzLiB0aHJlc2guICAgKi8KKyNkZWZpbmUJTURfTUlHX0NBTkRJREFURQkweDIwMDA0MCAvKiBMYXRlc3QgcGFnZSBtaWdyYXRpb24gY2FuZGlkYXRlICovCisjZGVmaW5lCU1EX01JR19DQU5ESURBVEVfQ0xSCTB4MjAwMDQ4IC8qIENsZWFyIHBhZ2UgbWlncmF0aW9uIGNhbmRpZGF0ZSAgKi8KKyNkZWZpbmUgTURfRElSX0VSUk9SCQkweDIwMDA1MCAvKiBEaXJlY3RvcnkgRElNTSBlcnJvciAJICAgICovCisjZGVmaW5lIE1EX0RJUl9FUlJPUl9DTFIJMHgyMDAwNTggLyogRGlyZWN0b3J5IERJTU0gZXJyb3IgY2xlYXIgCSAgICAqLworI2RlZmluZSBNRF9QUk9UT0NPTF9FUlJPUgkweDIwMDA2MCAvKiBEaXJlY3RvcnkgcHJvdG9jb2wgZXJyb3IgCSAgICAqLworI2RlZmluZSBNRF9QUk9UT0NPTF9FUlJPUl9DTFIJMHgyMDAwNjggLyogRGlyZWN0b3J5IHByb3RvY29sIGVycm9yIGNsZWFyICAqLworI2RlZmluZSBNRF9NRU1fRVJST1IJCTB4MjAwMDcwIC8qIE1lbW9yeSBESU1NIGVycm9yIAkJICAgICovCisjZGVmaW5lIE1EX01FTV9FUlJPUl9DTFIJMHgyMDAwNzggLyogTWVtb3J5IERJTU0gZXJyb3IgY2xlYXIgCSAgICAqLworI2RlZmluZSBNRF9NSVNDX0VSUk9SCQkweDIwMDA4MCAvKiBNaXNjZWxsYW5lb3VzIE1EIGVycm9yIAkgICAgKi8KKyNkZWZpbmUgTURfTUlTQ19FUlJPUl9DTFIJMHgyMDAwODggLyogTWlzY2VsbGFuZW91cyBNRCBlcnJvciBjbGVhciAgICAqLworI2RlZmluZSBNRF9NRU1fRElNTV9JTklUCTB4MjAwMDkwIC8qIE1lbW9yeSBESU1NIG1vZGUgaW5pdGl6YXRpb24uICAgKi8KKyNkZWZpbmUgTURfRElSX0RJTU1fSU5JVAkweDIwMDA5OCAvKiBEaXJlY3RvcnkgRElNTSBtb2RlIGluaXQuIAkgICAgKi8KKyNkZWZpbmUgTURfTU9RX1NJWkUJCTB4MjAwMGEwIC8qIE1EIG91dGdvaW5nIHF1ZXVlIHNpemUgCSAgICAqLworI2RlZmluZSBNRF9NTEFOX0NUTAkJMHgyMDAwYTggLyogTklDIChNaWNyb2xhbikgY29udHJvbCByZWdpc3RlciAqLworCisjZGVmaW5lIE1EX1BFUkZfU0VMCQkweDIxMDAwMCAvKiBTZWxlY3QgcGVyZiBtb25pdG9yIGV2ZW50cyAJICAgICovCisjZGVmaW5lIE1EX1BFUkZfQ05UMAkJMHgyMTAwMTAgLyogUGVyZm9ybWFuY2UgY291bnRlciAwIAkgICAgKi8KKyNkZWZpbmUgTURfUEVSRl9DTlQxCQkweDIxMDAxOCAvKiBQZXJmb3JtYW5jZSBjb3VudGVyIDEgCSAgICAqLworI2RlZmluZSBNRF9QRVJGX0NOVDIJCTB4MjEwMDIwIC8qIFBlcmZvcm1hbmNlIGNvdW50ZXIgMiAJICAgICovCisjZGVmaW5lIE1EX1BFUkZfQ05UMwkJMHgyMTAwMjggLyogUGVyZm9ybWFuY2UgY291bnRlciAzIAkgICAgKi8KKyNkZWZpbmUgTURfUEVSRl9DTlQ0CQkweDIxMDAzMCAvKiBQZXJmb3JtYW5jZSBjb3VudGVyIDQgCSAgICAqLworI2RlZmluZSBNRF9QRVJGX0NOVDUJCTB4MjEwMDM4IC8qIFBlcmZvcm1hbmNlIGNvdW50ZXIgNSAJICAgICovCisKKyNkZWZpbmUgTURfVVJFRzBfMAkJMHgyMjAwMDAgLyogdUNvbnRyb2xsZXIvVUFSVCAwIHJlZ2lzdGVyICAgICAqLworI2RlZmluZSBNRF9VUkVHMF8xCQkweDIyMDAwOCAvKiB1Q29udHJvbGxlci9VQVJUIDAgcmVnaXN0ZXIgICAgICovCisjZGVmaW5lIE1EX1VSRUcwXzIJCTB4MjIwMDEwIC8qIHVDb250cm9sbGVyL1VBUlQgMCByZWdpc3RlciAgICAgKi8KKyNkZWZpbmUgTURfVVJFRzBfMwkJMHgyMjAwMTggLyogdUNvbnRyb2xsZXIvVUFSVCAwIHJlZ2lzdGVyICAgICAqLworI2RlZmluZSBNRF9VUkVHMF80CQkweDIyMDAyMCAvKiB1Q29udHJvbGxlci9VQVJUIDAgcmVnaXN0ZXIgICAgICovCisjZGVmaW5lIE1EX1VSRUcwXzUJCTB4MjIwMDI4IC8qIHVDb250cm9sbGVyL1VBUlQgMCByZWdpc3RlciAgICAgKi8KKyNkZWZpbmUgTURfVVJFRzBfNgkJMHgyMjAwMzAgLyogdUNvbnRyb2xsZXIvVUFSVCAwIHJlZ2lzdGVyICAgICAqLworI2RlZmluZSBNRF9VUkVHMF83CQkweDIyMDAzOCAvKiB1Q29udHJvbGxlci9VQVJUIDAgcmVnaXN0ZXIgICAgICovCisKKyNkZWZpbmUgTURfU0xPVElEX1VTVEFUCQkweDIyMDA0OCAvKiBIdWIgc2xvdCBJRCAmIFVBUlQvdUN0bHIgc3RhdHVzICovCisjZGVmaW5lIE1EX0xFRDAJCQkweDIyMDA1MCAvKiBFaWdodC1iaXQgTEVEIGZvciBDUFUgQSAJICAgICovCisjZGVmaW5lIE1EX0xFRDEJCQkweDIyMDA1OCAvKiBFaWdodC1iaXQgTEVEIGZvciBDUFUgQiAJICAgICovCisKKyNkZWZpbmUgTURfVVJFRzFfMAkJMHgyMjAwODAgLyogdUNvbnRyb2xsZXIvVUFSVCAxIHJlZ2lzdGVyICAgICAqLworI2RlZmluZSBNRF9VUkVHMV8xCQkweDIyMDA4OCAvKiB1Q29udHJvbGxlci9VQVJUIDEgcmVnaXN0ZXIgICAgICovCisjZGVmaW5lIE1EX1VSRUcxXzIJCTB4MjIwMDkwIC8qIHVDb250cm9sbGVyL1VBUlQgMSByZWdpc3RlciAgICAgKi8KKyNkZWZpbmUgTURfVVJFRzFfMwkJMHgyMjAwOTggLyogdUNvbnRyb2xsZXIvVUFSVCAxIHJlZ2lzdGVyICAgICAqLworI2RlZmluZSBNRF9VUkVHMV80CQkweDIyMDBhMCAvKiB1Q29udHJvbGxlci9VQVJUIDEgcmVnaXN0ZXIgICAgICovCisjZGVmaW5lIE1EX1VSRUcxXzUJCTB4MjIwMGE4IC8qIHVDb250cm9sbGVyL1VBUlQgMSByZWdpc3RlciAgICAgKi8KKyNkZWZpbmUgTURfVVJFRzFfNgkJMHgyMjAwYjAgLyogdUNvbnRyb2xsZXIvVUFSVCAxIHJlZ2lzdGVyICAgICAqLworI2RlZmluZSBNRF9VUkVHMV83CQkweDIyMDBiOCAvKiB1Q29udHJvbGxlci9VQVJUIDEgcmVnaXN0ZXIgICAgICovCisjZGVmaW5lIE1EX1VSRUcxXzgJCTB4MjIwMGMwIC8qIHVDb250cm9sbGVyL1VBUlQgMSByZWdpc3RlciAgICAgKi8KKyNkZWZpbmUgTURfVVJFRzFfOQkJMHgyMjAwYzggLyogdUNvbnRyb2xsZXIvVUFSVCAxIHJlZ2lzdGVyICAgICAqLworI2RlZmluZSBNRF9VUkVHMV8xMAkJMHgyMjAwZDAgLyogdUNvbnRyb2xsZXIvVUFSVCAxIHJlZ2lzdGVyICAgICAqLworI2RlZmluZSBNRF9VUkVHMV8xMQkJMHgyMjAwZDggLyogdUNvbnRyb2xsZXIvVUFSVCAxIHJlZ2lzdGVyICAgICAqLworI2RlZmluZSBNRF9VUkVHMV8xMgkJMHgyMjAwZTAgLyogdUNvbnRyb2xsZXIvVUFSVCAxIHJlZ2lzdGVyICAgICAqLworI2RlZmluZSBNRF9VUkVHMV8xMwkJMHgyMjAwZTggLyogdUNvbnRyb2xsZXIvVUFSVCAxIHJlZ2lzdGVyICAgICAqLworI2RlZmluZSBNRF9VUkVHMV8xNAkJMHgyMjAwZjAgLyogdUNvbnRyb2xsZXIvVUFSVCAxIHJlZ2lzdGVyICAgICAqLworI2RlZmluZSBNRF9VUkVHMV8xNQkJMHgyMjAwZjggLyogdUNvbnRyb2xsZXIvVUFSVCAxIHJlZ2lzdGVyICAgICAqLworCisjaWZkZWYgQ09ORklHX1NHSV9TTjBfTl9NT0RFCisjZGVmaW5lIE1EX01FTV9CQU5LUwkJNAkgLyogNCBiYW5rcyBvZiBtZW1vcnkgbWF4IGluIE4gbW9kZSAqLworI2Vsc2UKKyNkZWZpbmUgTURfTUVNX0JBTktTCQk4CSAvKiA4IGJhbmtzIG9mIG1lbW9yeSBtYXggaW4gTSBtb2RlICovCisjZW5kaWYKKworLyoKKyAqIE1EX01FTU9SWV9DT05GSUcgZmllbGRzCisgKgorICogICBNRF9TSVpFX3h4eCBhcmUgdXNlZnVsIGZvciByZXByZXNlbnRpbmcgdGhlIHNpemUgb2YgYSBTSU1NIG9yIGJhbmsKKyAqICAgKFNJTU0gcGFpcikuICBUaGV5IGNvcnJlc3BvbmQgdG8gdGhlIHZhbHVlcyBuZWVkZWQgZm9yIHRoZSBiaXQKKyAqICAgdHJpcGxldHMgKE1NQ19CQU5LX01BU0spIGluIHRoZSBNRF9NRU1PUllfQ09ORklHIHJlZ2lzdGVyIGZvciBiYW5rIHNpemUuCisgKiAgIEJpdHMgbm90IHVzZWQgYnkgdGhlIE1EIGFyZSB1c2VkIGJ5IHNvZnR3YXJlLgorICovCisKKyNkZWZpbmUgTURfU0laRV9FTVBUWQkJMAkvKiBWYWxpZCBpbiBNRU1PUllfQ09ORklHICAgICAgICAgICAqLworI2RlZmluZSBNRF9TSVpFXzhNQgkJMQorI2RlZmluZSBNRF9TSVpFXzE2TUIJCTIKKyNkZWZpbmUgTURfU0laRV8zMk1CCQkzCS8qIEJyb2tlbiBpbiBIdWIgMQkJICAgICovCisjZGVmaW5lIE1EX1NJWkVfNjRNQgkJNAkvKiBWYWxpZCBpbiBNRU1PUllfQ09ORklHICAgICAgICAgICAqLworI2RlZmluZSBNRF9TSVpFXzEyOE1CCQk1CS8qIFZhbGlkIGluIE1FTU9SWV9DT05GSUcgICAgICAgICAgICovCisjZGVmaW5lIE1EX1NJWkVfMjU2TUIJCTYKKyNkZWZpbmUgTURfU0laRV81MTJNQgkJNwkvKiBWYWxpZCBpbiBNRU1PUllfQ09ORklHICAgICAgICAgICAqLworI2RlZmluZSBNRF9TSVpFXzFHQgkJOAorI2RlZmluZSBNRF9TSVpFXzJHQgkJOQorI2RlZmluZSBNRF9TSVpFXzRHQgkJMTAKKworI2RlZmluZSBNRF9TSVpFX0JZVEVTKHNpemUpCSgoc2l6ZSkgPT0gMCA/IDAgOiAweDQwMDAwMEwgPDwgKHNpemUpKQorI2RlZmluZSBNRF9TSVpFX01CWVRFUyhzaXplKQkoKHNpemUpID09IDAgPyAwIDogICA0CSAgICAgPDwgKHNpemUpKQorCisjZGVmaW5lIE1NQ19GUFJPTV9DWUNfU0hGVAk0OQkvKiBIYXZlIHRvIHVzZSBVSU5UNjRfQ0FTVCwgaW5zdGVhZCAqLworI2RlZmluZSBNTUNfRlBST01fQ1lDX01BU0sJKFVJTlQ2NF9DQVNUIDMxIDw8IDQ5KQkvKiBvZiAnTCcgc3VmZml4LCAgICovCisjZGVmaW5lIE1NQ19GUFJPTV9XUl9TSEZUCTQ0CQkJLyogZm9yIGFzc2VtYmxlciAgICAqLworI2RlZmluZSBNTUNfRlBST01fV1JfTUFTSwkoVUlOVDY0X0NBU1QgMzEgPDwgNDQpCisjZGVmaW5lIE1NQ19VQ1RMUl9DWUNfU0hGVAkzOQorI2RlZmluZSBNTUNfVUNUTFJfQ1lDX01BU0sJKFVJTlQ2NF9DQVNUIDMxIDw8IDM5KQorI2RlZmluZSBNTUNfVUNUTFJfV1JfU0hGVAkzNAorI2RlZmluZSBNTUNfVUNUTFJfV1JfTUFTSwkoVUlOVDY0X0NBU1QgMzEgPDwgMzQpCisjZGVmaW5lIE1NQ19ESU1NMF9TRUxfU0hGVAkzMgorI2RlZmluZSBNTUNfRElNTTBfU0VMX01BU0sJKFVJTlQ2NF9DQVNUIDMgPDwgMzIpCisjZGVmaW5lIE1NQ19JT19QUk9UX0VOX1NIRlQJMzEKKyNkZWZpbmUgTU1DX0lPX1BST1RfRU5fTUFTSwkoVUlOVDY0X0NBU1QgMSA8PCAzMSkKKyNkZWZpbmUgTU1DX0lPX1BST1QJCShVSU5UNjRfQ0FTVCAxIDw8IDMxKQorI2RlZmluZSBNTUNfQVJCX01MU1NfU0hGVAkzMAorI2RlZmluZSBNTUNfQVJCX01MU1NfTUFTSwkoVUlOVDY0X0NBU1QgMSA8PCAzMCkKKyNkZWZpbmUgTU1DX0FSQl9NTFNTCQkoVUlOVDY0X0NBU1QgMSA8PCAzMCkKKyNkZWZpbmUgTU1DX0lHTk9SRV9FQ0NfU0hGVAkyOQorI2RlZmluZSBNTUNfSUdOT1JFX0VDQ19NQVNLCShVSU5UNjRfQ0FTVCAxIDw8IDI5KQorI2RlZmluZSBNTUNfSUdOT1JFX0VDQwkJKFVJTlQ2NF9DQVNUIDEgPDwgMjkpCisjZGVmaW5lIE1NQ19ESVJfUFJFTUlVTV9TSEZUCTI4CisjZGVmaW5lIE1NQ19ESVJfUFJFTUlVTV9NQVNLCShVSU5UNjRfQ0FTVCAxIDw8IDI4KQorI2RlZmluZSBNTUNfRElSX1BSRU1JVU0JCShVSU5UNjRfQ0FTVCAxIDw8IDI4KQorI2RlZmluZSBNTUNfUkVQTFlfR1VBUl9TSEZUCTI0CisjZGVmaW5lIE1NQ19SRVBMWV9HVUFSX01BU0sJKFVJTlQ2NF9DQVNUIDE1IDw8IDI0KQorI2RlZmluZSBNTUNfQkFOS19TSEZUKF9iKQkoKF9iKSAqIDMpCisjZGVmaW5lIE1NQ19CQU5LX01BU0soX2IpCShVSU5UNjRfQ0FTVCA3IDw8IE1NQ19CQU5LX1NIRlQoX2IpKQorI2RlZmluZSBNTUNfQkFOS19BTExfTUFTSwkweGZmZmZmZgorI2RlZmluZSBNTUNfUkVTRVRfREVGQVVMVFMJKFVJTlQ2NF9DQVNUIDB4MGYgPDwgTU1DX0ZQUk9NX0NZQ19TSEZUIHwgXAorCQkJCSBVSU5UNjRfQ0FTVCAweDA3IDw8IE1NQ19GUFJPTV9XUl9TSEZUIHwgXAorCQkJCSBVSU5UNjRfQ0FTVCAweDFmIDw8IE1NQ19VQ1RMUl9DWUNfU0hGVCB8IFwKKwkJCQkgVUlOVDY0X0NBU1QgMHgwZiA8PCBNTUNfVUNUTFJfV1JfU0hGVCB8IFwKKwkJCQkgTU1DX0lHTk9SRV9FQ0MgfCBNTUNfRElSX1BSRU1JVU0gfCBcCisJCQkJIFVJTlQ2NF9DQVNUIDB4MGYgPDwgTU1DX1JFUExZX0dVQVJfU0hGVCB8IFwKKwkJCQkgTU1DX0JBTktfQUxMX01BU0spCisKKy8qIE1EX1JFRlJFU0hfQ09OVFJPTCBmaWVsZHMgKi8KKworI2RlZmluZSBNUkNfRU5BQkxFX1NIRlQJCTYzCisjZGVmaW5lIE1SQ19FTkFCTEVfTUFTSwkJKFVJTlQ2NF9DQVNUIDEgPDwgNjMpCisjZGVmaW5lIE1SQ19FTkFCTEUJCShVSU5UNjRfQ0FTVCAxIDw8IDYzKQorI2RlZmluZSBNUkNfQ09VTlRFUl9TSEZUCTEyCisjZGVmaW5lIE1SQ19DT1VOVEVSX01BU0sJKFVJTlQ2NF9DQVNUIDB4ZmZmIDw8IDEyKQorI2RlZmluZSBNUkNfQ05UX1RIUkVTSF9NQVNLCTB4ZmZmCisjZGVmaW5lIE1SQ19SRVNFVF9ERUZBVUxUUwkoVUlOVDY0X0NBU1QgMHg0MDApCisKKy8qIE1EX01FTV9ESU1NX0lOSVQgYW5kIE1EX0RJUl9ESU1NX0lOSVQgZmllbGRzICovCisKKyNkZWZpbmUgTURJX1NFTEVDVF9TSEZUCQkzMgorI2RlZmluZSBNRElfU0VMRUNUX01BU0sJCShVSU5UNjRfQ0FTVCAweDBmIDw8IDMyKQorI2RlZmluZSBNRElfRElNTV9NT0RFX01BU0sJKFVJTlQ2NF9DQVNUIDB4ZmZmKQorCisvKiBNRF9NT1FfU0laRSBmaWVsZHMgKi8KKworI2RlZmluZSBNTVNfUlBfU0laRV9TSEZUCTgKKyNkZWZpbmUgTU1TX1JQX1NJWkVfTUFTSwkoVUlOVDY0X0NBU1QgMHgzZiA8PCA4KQorI2RlZmluZSBNTVNfUlFfU0laRV9TSEZUCTAKKyNkZWZpbmUgTU1TX1JRX1NJWkVfTUFTSwkoVUlOVDY0X0NBU1QgMHgxZikKKyNkZWZpbmUgTU1TX1JFU0VUX0RFRkFVTFRTCSgweDMyIDw8IDggfCAweDEyKQorCisvKiBNRF9GQU5ET1BfQ0FDX1NUQVQgZmllbGRzICovCisKKyNkZWZpbmUgTUZDX1ZBTElEX1NIRlQJCTYzCisjZGVmaW5lIE1GQ19WQUxJRF9NQVNLCQkoVUlOVDY0X0NBU1QgMSA8PCA2MykKKyNkZWZpbmUgTUZDX1ZBTElECQkoVUlOVDY0X0NBU1QgMSA8PCA2MykKKyNkZWZpbmUgTUZDX0FERFJfU0hGVAkJNgorI2RlZmluZSBNRkNfQUREUl9NQVNLCQkoVUlOVDY0X0NBU1QgMHgzZmZmZmZmKQorCisvKiBNRF9NTEFOX0NUTCBmaWVsZHMgKi8KKworI2RlZmluZSBNTEFOX1BISTFfU0hGVAkJMjcKKyNkZWZpbmUgTUxBTl9QSEkxX01BU0sJCShVSU5UNjRfQ0FTVCAweDdmIDw8IDI3KQorI2RlZmluZSBNTEFOX1BISTBfU0hGVAkJMjAKKyNkZWZpbmUgTUxBTl9QSEkwX01BU0sJCShVSU5UNjRfQ0FTVCAweDdmIDw8IDI3KQorI2RlZmluZSBNTEFOX1BVTFNFX1NIRlQJCTEwCisjZGVmaW5lIE1MQU5fUFVMU0VfTUFTSwkJKFVJTlQ2NF9DQVNUIDB4M2ZmIDw8IDEwKQorI2RlZmluZSBNTEFOX1NBTVBMRV9TSEZUCTIKKyNkZWZpbmUgTUxBTl9TQU1QTEVfTUFTSwkoVUlOVDY0X0NBU1QgMHhmZiA8PCAyKQorI2RlZmluZSBNTEFOX0RPTkVfU0hGVAkJMQorI2RlZmluZSBNTEFOX0RPTkVfTUFTSwkJMgorI2RlZmluZSBNTEFOX0RPTkUJCShVSU5UNjRfQ0FTVCAweDAyKQorI2RlZmluZSBNTEFOX1JEX0RBVEEJCShVSU5UNjRfQ0FTVCAweDAxKQorI2RlZmluZSBNTEFOX1JFU0VUX0RFRkFVTFRTCShVSU5UNjRfQ0FTVCAweDMxIDw8IE1MQU5fUEhJMV9TSEZUIHwgXAorCQkJCSBVSU5UNjRfQ0FTVCAweDMxIDw8IE1MQU5fUEhJMF9TSEZUKQorCisvKiBNRF9TTE9USURfVVNUQVQgYml0IGRlZmluaXRpb25zICovCisKKyNkZWZpbmUgTVNVX0NPUkVDTEtfVFNUX1NIRlQJNwkvKiBZb3UgZG9uJ3Qgd2FubmEga25vdyAgICAgICAgICAgICAqLworI2RlZmluZSBNU1VfQ09SRUNMS19UU1RfTUFTSwkoVUlOVDY0X0NBU1QgMSA8PCA3KQorI2RlZmluZSBNU1VfQ09SRUNMS19UU1QJCShVSU5UNjRfQ0FTVCAxIDw8IDcpCisjZGVmaW5lIE1TVV9DT1JFQ0xLX1NIRlQJNgkvKiBZb3UgZG9uJ3Qgd2FubmEga25vdyAgICAgICAgICAgICAqLworI2RlZmluZSBNU1VfQ09SRUNMS19NQVNLCShVSU5UNjRfQ0FTVCAxIDw8IDYpCisjZGVmaW5lIE1TVV9DT1JFQ0xLCQkoVUlOVDY0X0NBU1QgMSA8PCA2KQorI2RlZmluZSBNU1VfTkVUU1lOQ19TSEZUCTUJLyogWW91IGRvbid0IHdhbm5hIGtub3cgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTVNVX05FVFNZTkNfTUFTSwkoVUlOVDY0X0NBU1QgMSA8PCA1KQorI2RlZmluZSBNU1VfTkVUU1lOQwkJKFVJTlQ2NF9DQVNUIDEgPDwgNSkKKyNkZWZpbmUgTVNVX0ZQUk9NUkRZX1NIRlQJNAkvKiBGbGFzaCBQUk9NIHJlYWR5IGJpdCAJICAgICovCisjZGVmaW5lIE1TVV9GUFJPTVJEWV9NQVNLCShVSU5UNjRfQ0FTVCAxIDw8IDQpCisjZGVmaW5lIE1TVV9GUFJPTVJEWQkJKFVJTlQ2NF9DQVNUIDEgPDwgNCkKKyNkZWZpbmUgTVNVX0kyQ0lOVFJfU0hGVAkJMwkvKiBJMkMgaW50ZXJydXB0IGJpdCAgICovCisjZGVmaW5lIE1TVV9JMkNJTlRSX01BU0sJCShVSU5UNjRfQ0FTVCAxIDw8IDMpCisjZGVmaW5lIE1TVV9JMkNJTlRSCQkoVUlOVDY0X0NBU1QgMSA8PCAzKQorI2RlZmluZSBNU1VfU0xPVElEX01BU0sJCTB4ZmYKKyNkZWZpbmUgTVNVX1NOMF9TTE9USURfU0hGVAkwCS8qIFNsb3QgSUQJCQkgICAgKi8KKyNkZWZpbmUgTVNVX1NOMF9TTE9USURfTUFTSwkoVUlOVDY0X0NBU1QgNykKKyNkZWZpbmUgTVNVX1NOMDBfU0xPVElEX1NIRlQJNworI2RlZmluZSBNU1VfU04wMF9TTE9USURfTUFTSwkoVUlOVDY0X0NBU1QgMHg4MCkKKworI2RlZmluZQlNU1VfUElNTV9QU0NfU0hGVAk0CisjZGVmaW5lCU1TVV9QSU1NX1BTQ19NQVNLCSgweGYgPDwgTVNVX1BJTU1fUFNDX1NIRlQpCisKKy8qIE1EX01JR19ESUZGX1RIUkVTSCBiaXQgZGVmaW5pdGlvbnMgKi8KKworI2RlZmluZSBNRF9NSUdfRElGRl9USFJFU19WQUxJRF9NQVNLIChVSU5UNjRfQ0FTVCAweDEgPDwgNjMpCisjZGVmaW5lIE1EX01JR19ESUZGX1RIUkVTX1ZBTElEX1NIRlQgNjMKKyNkZWZpbmUgTURfTUlHX0RJRkZfVEhSRVNfVkFMVUVfTUFTSyAoVUlOVDY0X0NBU1QgMHhmZmZmZikKKworLyogTURfTUlHX1ZBTFVFX1RIUkVTSCBiaXQgZGVmaW5pdGlvbnMgKi8KKworI2RlZmluZSBNRF9NSUdfVkFMVUVfVEhSRVNfVkFMSURfTUFTSyAoVUlOVDY0X0NBU1QgMHgxIDw8IDYzKQorI2RlZmluZSBNRF9NSUdfVkFMVUVfVEhSRVNfVkFMSURfU0hGVCA2MworI2RlZmluZSBNRF9NSUdfVkFMVUVfVEhSRVNfVkFMVUVfTUFTSyAoVUlOVDY0X0NBU1QgMHhmZmZmZikKKworLyogTURfTUlHX0NBTkRJREFURSBiaXQgZGVmaW5pdGlvbnMgKi8KKworI2RlZmluZSBNRF9NSUdfQ0FORElEQVRFX1ZBTElEX01BU0sgKFVJTlQ2NF9DQVNUIDB4MSA8PCA2MykKKyNkZWZpbmUgTURfTUlHX0NBTkRJREFURV9WQUxJRF9TSEZUIDYzCisjZGVmaW5lIE1EX01JR19DQU5ESURBVEVfVFlQRV9NQVNLIChVSU5UNjRfQ0FTVCAweDEgPDwgMzApCisjZGVmaW5lIE1EX01JR19DQU5ESURBVEVfVFlQRV9TSEZUIDMwCisjZGVmaW5lIE1EX01JR19DQU5ESURBVEVfT1ZFUlJVTl9NQVNLIChVSU5UNjRfQ0FTVCAweDEgPDwgMjkpCisjZGVmaW5lIE1EX01JR19DQU5ESURBVEVfT1ZFUlJVTl9TSEZUIDI5CisjZGVmaW5lIE1EX01JR19DQU5ESURBVEVfSU5JVElBVE9SX01BU0sgKFVJTlQ2NF9DQVNUIDB4N2ZmIDw8IDE4KQorI2RlZmluZSBNRF9NSUdfQ0FORElEQVRFX0lOSVRJQVRPUl9TSEZUIDE4CisjZGVmaW5lIE1EX01JR19DQU5ESURBVEVfTk9ERUlEX01BU0sgKFVJTlQ2NF9DQVNUIDB4MWZmIDw8IDIwKQorI2RlZmluZSBNRF9NSUdfQ0FORElEQVRFX05PREVJRF9TSEZUIDIwCisjZGVmaW5lIE1EX01JR19DQU5ESURBVEVfQUREUl9NQVNLIChVSU5UNjRfQ0FTVCAweDNmZmZmKQorI2RlZmluZSBNRF9NSUdfQ0FORElEQVRFX0FERFJfU0hGVCAxNCAgLyogVGhlIGFkZHJlc3Mgc3RhcnRzIGF0IGJpdCAxNCAqLworCisvKiBPdGhlciBNRCBkZWZpbml0aW9ucyAqLworCisjZGVmaW5lIE1EX0JBTktfU0hGVAkJMjkJCQkvKiBsb2cyKDUxMiBNQikgICAgICovCisjZGVmaW5lIE1EX0JBTktfTUFTSwkJKFVJTlQ2NF9DQVNUIDcgPDwgMjkpCisjZGVmaW5lIE1EX0JBTktfU0laRQkJKFVJTlQ2NF9DQVNUIDEgPDwgTURfQkFOS19TSEZUKQkgIC8qIDUxMiBNQiAqLworI2RlZmluZSBNRF9CQU5LX09GRlNFVChfYikJKFVJTlQ2NF9DQVNUIChfYikgPDwgTURfQkFOS19TSEZUKQorCisvKgorICogVGhlIGZvbGxvd2luZyBkZWZpbml0aW9ucyBjb3ZlciB0aGUgYml0IGZpZWxkIGRlZmluaXRpb25zIGZvciB0aGUKKyAqIHZhcmlvdXMgTUQgcmVnaXN0ZXJzLiAgRm9yIG11bHRpLWJpdCByZWdpc3RlcnMsIHdlIGRlZmluZSBib3RoCisgKiBhIHNoaWZ0IGFtb3VudCBhbmQgYSBtYXNrIHZhbHVlLiAgQnkgY29udmVudGlvbiwgaWYgeW91IHdhbnQgdG8KKyAqIGlzb2xhdGUgYSBmaWVsZCwgeW91IHNob3VsZCBtYXNrIHRoZSBmaWVsZCBhbmQgdGhlbiBzaGlmdCBpdCBkb3duLAorICogc2luY2UgdGhpcyBtYWtlcyB0aGUgbWFza3MgdXNlZnVsIHdpdGhvdXQgYSBzaGlmdC4KKyAqLworCisvKiBEaXJlY3RvcnkgZW50cnkgc3RhdGVzIGZvciBib3RoIHByZW1pdW0gYW5kIHN0YW5kYXJkIFNJTU1zLiAqLworCisjZGVmaW5lIE1EX0RJUl9TSEFSRUQJCShVSU5UNjRfQ0FTVCAweDApCS8qIDAwMCAqLworI2RlZmluZSBNRF9ESVJfUE9JU09ORUQJCShVSU5UNjRfQ0FTVCAweDEpCS8qIDAwMSAqLworI2RlZmluZSBNRF9ESVJfRVhDTFVTSVZFCShVSU5UNjRfQ0FTVCAweDIpCS8qIDAxMCAqLworI2RlZmluZSBNRF9ESVJfQlVTWV9TSEFSRUQJKFVJTlQ2NF9DQVNUIDB4MykJLyogMDExICovCisjZGVmaW5lIE1EX0RJUl9CVVNZX0VYQ0wJKFVJTlQ2NF9DQVNUIDB4NCkJLyogMTAwICovCisjZGVmaW5lIE1EX0RJUl9XQUlUCQkoVUlOVDY0X0NBU1QgMHg1KQkvKiAxMDEgKi8KKyNkZWZpbmUgTURfRElSX1VOT1dORUQJCShVSU5UNjRfQ0FTVCAweDcpCS8qIDExMSAqLworCisvKgorICogVGhlIE1EX0RJUl9GT1JDRV9FQ0MgYml0IGNhbiBiZSBhZGRlZCBkaXJlY3RvcnkgZW50cnkgd3JpdGUgZGF0YQorICogdG8gZm9yY2luZyB0aGUgRUNDIHRvIGJlIHdyaXR0ZW4gYXMtaXMgaW5zdGVhZCBvZiByZWNhbGN1bGF0ZWQuCisgKi8KKworI2RlZmluZSBNRF9ESVJfRk9SQ0VfRUNDCShVSU5UNjRfQ0FTVCAxIDw8IDYzKQorCisvKgorICogUHJlbWl1bSBTSU1NIGRpcmVjdG9yeSBlbnRyeSBzaGlmdHMgYW5kIG1hc2tzLiAgRWFjaCBpcyB2YWxpZCBvbmx5IGluIHRoZQorICogY29udGV4dChzKSBpbmRpY2F0ZWQsIHdoZXJlIEEsIEIsIGFuZCBDIGluZGljYXRlIHRoZSBkaXJlY3RvcnkgZW50cnkgZm9ybWF0CisgKiBhcyBzaG93biwgYW5kIGxvdyBhbmQvb3IgaGlnaCBpbmRpY2F0ZXMgd2hpY2ggZG91YmxlLXdvcmQgb2YgdGhlIGVudHJ5LgorICoKKyAqIEZvcm1hdCBBOiAgU1RBVEUgPSBzaGFyZWQsIEZJTkUgPSAxCisgKiBGb3JtYXQgQjogIFNUQVRFID0gc2hhcmVkLCBGSU5FID0gMAorICogRm9ybWF0IEM6ICBTVEFURSAhPSBzaGFyZWQgKEZJTkUgbXVzdCBiZSAwKQorICovCisKKyNkZWZpbmUgTURfUERJUl9NQVNLCQkweGZmZmZmZmZmZmZmZgkJLyogV2hvbGUgZW50cnkgCSAgICAqLworI2RlZmluZSBNRF9QRElSX0VDQ19TSEZUCTAJCQkvKiBBQkMgbG93IG9yIGhpZ2ggICovCisjZGVmaW5lIE1EX1BESVJfRUNDX01BU0sJMHg3ZgorI2RlZmluZSBNRF9QRElSX1BSSU9fU0hGVAk4CQkJLyogQUJDIGxvdyAJICAgICovCisjZGVmaW5lIE1EX1BESVJfUFJJT19NQVNLCSgweGYgPDwgOCkKKyNkZWZpbmUgTURfUERJUl9BWF9TSEZUCQk3CQkJLyogQUJDIGxvdyAJICAgICovCisjZGVmaW5lIE1EX1BESVJfQVhfTUFTSwkJKDEgPDwgNykKKyNkZWZpbmUgTURfUERJUl9BWAkJKDEgPDwgNykKKyNkZWZpbmUgTURfUERJUl9GSU5FX1NIRlQJMTIJCQkvKiBBQkMgbG93IAkgICAgKi8KKyNkZWZpbmUgTURfUERJUl9GSU5FX01BU0sJKDEgPDwgMTIpCisjZGVmaW5lIE1EX1BESVJfRklORQkJKDEgPDwgMTIpCisjZGVmaW5lIE1EX1BESVJfT0NUX1NIRlQJMTMJCQkvKiBBIGxvdyAJICAgICovCisjZGVmaW5lIE1EX1BESVJfT0NUX01BU0sJKDcgPDwgMTMpCisjZGVmaW5lIE1EX1BESVJfU1RBVEVfU0hGVAkxMwkJCS8qIEJDIGxvdyAJICAgICovCisjZGVmaW5lIE1EX1BESVJfU1RBVEVfTUFTSwkoNyA8PCAxMykKKyNkZWZpbmUgTURfUERJUl9PTkVDTlRfU0hGVAkxNgkJCS8qIEJDIGxvdyAJICAgICovCisjZGVmaW5lIE1EX1BESVJfT05FQ05UX01BU0sJKDB4M2YgPDwgMTYpCisjZGVmaW5lIE1EX1BESVJfUFRSX1NIRlQJMjIJCQkvKiBDIGxvdyAJICAgICovCisjZGVmaW5lIE1EX1BESVJfUFRSX01BU0sJKFVJTlQ2NF9DQVNUIDB4N2ZmIDw8IDIyKQorI2RlZmluZSBNRF9QRElSX1ZFQ01TQl9TSEZUCTIyCQkJLyogQUIgbG93IAkgICAgKi8KKyNkZWZpbmUgTURfUERJUl9WRUNNU0JfQklUTUFTSwkweDNmZmZmZmYKKyNkZWZpbmUgTURfUERJUl9WRUNNU0JfQklUU0hGVAkyNworI2RlZmluZSBNRF9QRElSX1ZFQ01TQl9NQVNLCShVSU5UNjRfQ0FTVCBNRF9QRElSX1ZFQ01TQl9CSVRNQVNLIDw8IDIyKQorI2RlZmluZSBNRF9QRElSX0NXT0ZGX1NIRlQJNwkJCS8qIEMgaGlnaCAJICAgICovCisjZGVmaW5lIE1EX1BESVJfQ1dPRkZfTUFTSwkoNyA8PCA3KQorI2RlZmluZSBNRF9QRElSX1ZFQ0xTQl9TSEZUCTEwCQkJLyogQUIgaGlnaCAJICAgICovCisjZGVmaW5lIE1EX1BESVJfVkVDTFNCX0JJVE1BU0sJKFVJTlQ2NF9DQVNUIDB4M2ZmZmZmZmZmZikKKyNkZWZpbmUgTURfUERJUl9WRUNMU0JfQklUU0hGVAkwCisjZGVmaW5lIE1EX1BESVJfVkVDTFNCX01BU0sJKE1EX1BESVJfVkVDTFNCX0JJVE1BU0sgPDwgMTApCisKKy8qCisgKiBEaXJlY3RvcnkgaW5pdGlhbGl6YXRpb24gdmFsdWVzCisgKi8KKworI2RlZmluZSBNRF9QRElSX0lOSVRfTE8JCShNRF9ESVJfVU5PV05FRCA8PCBNRF9QRElSX1NUQVRFX1NIRlQgfCBcCisJCQkJIE1EX1BESVJfQVgpCisjZGVmaW5lIE1EX1BESVJfSU5JVF9ISQkJMAorI2RlZmluZSBNRF9QRElSX0lOSVRfUFJPVAkoTURfUFJPVF9SVyA8PCBNRF9QUFJPVF9JT19TSEZUIHwgXAorCQkJCSBNRF9QUk9UX1JXIDw8IE1EX1BQUk9UX1NIRlQpCisKKy8qCisgKiBTdGFuZGFyZCBTSU1NIGRpcmVjdG9yeSBlbnRyeSBzaGlmdHMgYW5kIG1hc2tzLiAgRWFjaCBpcyB2YWxpZCBvbmx5IGluIHRoZQorICogY29udGV4dChzKSBpbmRpY2F0ZWQsIHdoZXJlIEEgYW5kIEMgaW5kaWNhdGUgdGhlIGRpcmVjdG9yeSBlbnRyeSBmb3JtYXQKKyAqIGFzIHNob3duLCBhbmQgbG93IGFuZC9vciBoaWdoIGluZGljYXRlcyB3aGljaCBkb3VibGUtd29yZCBvZiB0aGUgZW50cnkuCisgKgorICogRm9ybWF0IEE6ICBTVEFURSA9PSBzaGFyZWQKKyAqIEZvcm1hdCBDOiAgU1RBVEUgIT0gc2hhcmVkCisgKi8KKworI2RlZmluZSBNRF9TRElSX01BU0sJCTB4ZmZmZgkJCS8qIFdob2xlIGVudHJ5IAkgICAgKi8KKyNkZWZpbmUgTURfU0RJUl9FQ0NfU0hGVAkwCQkJLyogQUMgbG93IG9yIGhpZ2ggICAqLworI2RlZmluZSBNRF9TRElSX0VDQ19NQVNLCTB4MWYKKyNkZWZpbmUgTURfU0RJUl9QUklPX1NIRlQJNgkJCS8qIEFDIGxvdyAJICAgICovCisjZGVmaW5lIE1EX1NESVJfUFJJT19NQVNLCSgxIDw8IDYpCisjZGVmaW5lIE1EX1NESVJfQVhfU0hGVAkJNQkJCS8qIEFDIGxvdyAJICAgICovCisjZGVmaW5lIE1EX1NESVJfQVhfTUFTSwkJKDEgPDwgNSkKKyNkZWZpbmUgTURfU0RJUl9BWAkJKDEgPDwgNSkKKyNkZWZpbmUgTURfU0RJUl9TVEFURV9TSEZUCTcJCQkvKiBBQyBsb3cgCSAgICAqLworI2RlZmluZSBNRF9TRElSX1NUQVRFX01BU0sJKDcgPDwgNykKKyNkZWZpbmUgTURfU0RJUl9QVFJfU0hGVAkxMAkJCS8qIEMgbG93IAkgICAgKi8KKyNkZWZpbmUgTURfU0RJUl9QVFJfTUFTSwkoMHgzZiA8PCAxMCkKKyNkZWZpbmUgTURfU0RJUl9DV09GRl9TSEZUCTUJCQkvKiBDIGhpZ2ggCSAgICAqLworI2RlZmluZSBNRF9TRElSX0NXT0ZGX01BU0sJKDcgPDwgNSkKKyNkZWZpbmUgTURfU0RJUl9WRUNNU0JfU0hGVAkxMQkJCS8qIEEgbG93IAkgICAgKi8KKyNkZWZpbmUgTURfU0RJUl9WRUNNU0JfQklUTUFTSwkweDFmCisjZGVmaW5lIE1EX1NESVJfVkVDTVNCX0JJVFNIRlQJNworI2RlZmluZSBNRF9TRElSX1ZFQ01TQl9NQVNLCShNRF9TRElSX1ZFQ01TQl9CSVRNQVNLIDw8IDExKQorI2RlZmluZSBNRF9TRElSX1ZFQ0xTQl9TSEZUCTUJCQkvKiBBIGhpZ2ggCSAgICAqLworI2RlZmluZSBNRF9TRElSX1ZFQ0xTQl9CSVRNQVNLCTB4N2ZmCisjZGVmaW5lIE1EX1NESVJfVkVDTFNCX0JJVFNIRlQJMAorI2RlZmluZSBNRF9TRElSX1ZFQ0xTQl9NQVNLCShNRF9TRElSX1ZFQ0xTQl9CSVRNQVNLIDw8IDUpCisKKy8qCisgKiBEaXJlY3RvcnkgaW5pdGlhbGl6YXRpb24gdmFsdWVzCisgKi8KKworI2RlZmluZSBNRF9TRElSX0lOSVRfTE8JCShNRF9ESVJfVU5PV05FRCA8PCBNRF9TRElSX1NUQVRFX1NIRlQgfCBcCisJCQkJIE1EX1NESVJfQVgpCisjZGVmaW5lIE1EX1NESVJfSU5JVF9ISQkJMAorI2RlZmluZSBNRF9TRElSX0lOSVRfUFJPVAkoTURfUFJPVF9SVyA8PCBNRF9TUFJPVF9TSEZUKQorCisvKiBQcm90ZWN0aW9uIGFuZCBtaWdyYXRpb24gZmllbGQgdmFsdWVzICovCisKKyNkZWZpbmUgTURfUFJPVF9SVwkJKFVJTlQ2NF9DQVNUIDB4NikKKyNkZWZpbmUgTURfUFJPVF9STwkJKFVJTlQ2NF9DQVNUIDB4MykKKyNkZWZpbmUgTURfUFJPVF9OTwkJKFVJTlQ2NF9DQVNUIDB4MCkKKyNkZWZpbmUgTURfUFJPVF9CQUQJCShVSU5UNjRfQ0FTVCAweDUpCisKKy8qIFByZW1pdW0gU0lNTSBwcm90ZWN0aW9uIGVudHJ5IHNoaWZ0cyBhbmQgbWFza3MuICovCisKKyNkZWZpbmUgTURfUFBST1RfU0hGVAkJMAkJCS8qIFByb3QuIGZpZWxkIAkgICAgKi8KKyNkZWZpbmUgTURfUFBST1RfTUFTSwkJNworI2RlZmluZSBNRF9QUFJPVF9NSUdNRF9TSEZUCTMJCQkvKiBNaWdyYXRpb24gbW9kZSAgICovCisjZGVmaW5lIE1EX1BQUk9UX01JR01EX01BU0sJKDMgPDwgMykKKyNkZWZpbmUgTURfUFBST1RfUkVGQ05UX1NIRlQJNQkJCS8qIFJlZmVyZW5jZSBjb3VudCAgKi8KKyNkZWZpbmUgTURfUFBST1RfUkVGQ05UX1dJRFRICTB4N2ZmZmYKKyNkZWZpbmUgTURfUFBST1RfUkVGQ05UX01BU0sJKE1EX1BQUk9UX1JFRkNOVF9XSURUSCA8PCA1KQorCisjZGVmaW5lIE1EX1BQUk9UX0lPX1NIRlQJNDUJCQkvKiBJL08gUHJvdCBmaWVsZCAgICovCisjZGVmaW5lIE1EX1BQUk9UX0lPX01BU0sJKFVJTlQ2NF9DQVNUIDcgPDwgNDUpCisKKy8qIFN0YW5kYXJkIFNJTU0gcHJvdGVjdGlvbiBlbnRyeSBzaGlmdHMgYW5kIG1hc2tzLiAqLworCisjZGVmaW5lIE1EX1NQUk9UX1NIRlQJCTAJCQkvKiBQcm90LiBmaWVsZCAJICAgICovCisjZGVmaW5lIE1EX1NQUk9UX01BU0sJCTcKKyNkZWZpbmUgTURfU1BST1RfTUlHTURfU0hGVAkzCQkJLyogTWlncmF0aW9uIG1vZGUgICAqLworI2RlZmluZSBNRF9TUFJPVF9NSUdNRF9NQVNLCSgzIDw8IDMpCisjZGVmaW5lIE1EX1NQUk9UX1JFRkNOVF9TSEZUCTUJCQkvKiBSZWZlcmVuY2UgY291bnQgICovCisjZGVmaW5lIE1EX1NQUk9UX1JFRkNOVF9XSURUSAkweDdmZgorI2RlZmluZSBNRF9TUFJPVF9SRUZDTlRfTUFTSwkoTURfU1BST1RfUkVGQ05UX1dJRFRIIDw8IDUpCisKKy8qIE1pZ3JhdGlvbiBtb2RlcyB1c2VkIGluIHByb3RlY3Rpb24gZW50cmllcyAqLworCisjZGVmaW5lIE1EX1BST1RfTUlHTURfSVJFTAkoVUlOVDY0X0NBU1QgMHgzIDw8IDMpCisjZGVmaW5lIE1EX1BST1RfTUlHTURfSUFCUwkoVUlOVDY0X0NBU1QgMHgyIDw8IDMpCisjZGVmaW5lIE1EX1BST1RfTUlHTURfUFJFTAkoVUlOVDY0X0NBU1QgMHgxIDw8IDMpCisjZGVmaW5lIE1EX1BST1RfTUlHTURfT0ZGCShVSU5UNjRfQ0FTVCAweDAgPDwgMykKKworCisvKgorICogT3BlcmF0aW9ucyBvbiBwYWdlIG1pZ3JhdGlvbiB0aHJlc2hvbGQgcmVnaXN0ZXIKKyAqLworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisvKgorICogTEVEIHJlZ2lzdGVyIG1hY3JvcworICovCisKKyNkZWZpbmUgQ1BVX0xFRF9BRERSKF9uYXNpZCwgX3NsaWNlKQkJCQkJICAgXAorCShwcml2YXRlLnBfc24wMCA/CQkJCQkJICAgXAorCSBSRU1PVEVfSFVCX0FERFIoKF9uYXNpZCksIE1EX1VSRUcxXzAgKwkoKF9zbGljZSkgPDwgNSkpIDoJICAgXAorCSBSRU1PVEVfSFVCX0FERFIoKF9uYXNpZCksIE1EX0xFRDAgICAgKyAoKF9zbGljZSkgPDwgMykpKQorCisjZGVmaW5lIFNFVF9DUFVfTEVEUyhfbmFzaWQsIF9zbGljZSwgIF92YWwpCQkJCSAgIFwKKwkoSFVCX1MoQ1BVX0xFRF9BRERSKF9uYXNpZCwgX3NsaWNlKSwgKF92YWwpKSkKKworI2RlZmluZSBTRVRfTVlfTEVEUyhfdikgCQkJCQkJICAgXAorCVNFVF9DUFVfTEVEUyhnZXRfbmFzaWQoKSwgZ2V0X3NsaWNlKCksIChfdikpCisKKy8qCisgKiBPcGVyYXRpb25zIG9uIE1lbW9yeS9EaXJlY3RvcnkgRElNTSBjb250cm9sIHJlZ2lzdGVyCisgKi8KKworI2RlZmluZSBESVJUWVBFX1BSRU1JVU0gMQorI2RlZmluZSBESVJUWVBFX1NUQU5EQVJEIDAKKyNkZWZpbmUgTURfTUVNT1JZX0NPTkZJR19ESVJfVFlQRV9HRVQocmVnaW9uKSAoXAorCShSRU1PVEVfSFVCX0wocmVnaW9uLCBNRF9NRU1PUllfQ09ORklHKSAmIE1NQ19ESVJfUFJFTUlVTV9NQVNLKSA+PiBcCisJTU1DX0RJUl9QUkVNSVVNX1NIRlQpCisKKworLyoKKyAqIE9wZXJhdGlvbnMgb24gcGFnZSBtaWdyYXRpb24gY291bnQgZGlmZmVyZW5jZSBhbmQgYWJzb2x1dGUgdGhyZXNob2xkCisgKiByZWdpc3RlcnMKKyAqLworCisjZGVmaW5lIE1EX01JR19ESUZGX1RIUkVTSF9HRVQocmVnaW9uKSAoIFwKKwlSRU1PVEVfSFVCX0woKHJlZ2lvbiksIE1EX01JR19ESUZGX1RIUkVTSCkgJiBcCisJTURfTUlHX0RJRkZfVEhSRVNfVkFMVUVfTUFTSykKKworI2RlZmluZSBNRF9NSUdfRElGRl9USFJFU0hfU0VUKHJlZ2lvbiwgdmFsdWUpICgJCQkJXAorCVJFTU9URV9IVUJfUygocmVnaW9uKSwgTURfTUlHX0RJRkZfVEhSRVNILAkJCVwKKwkJTURfTUlHX0RJRkZfVEhSRVNfVkFMSURfTUFTSyB8ICh2YWx1ZSkpKQorCisjZGVmaW5lIE1EX01JR19ESUZGX1RIUkVTSF9ESVNBQkxFKHJlZ2lvbikgKAkJCVwKKwlSRU1PVEVfSFVCX1MoKHJlZ2lvbiksIE1EX01JR19ESUZGX1RIUkVTSCwJCQlcCisJCVJFTU9URV9IVUJfTCgocmVnaW9uKSwgTURfTUlHX0RJRkZfVEhSRVNIKQkJXAorCQkJICAgICAmIH5NRF9NSUdfRElGRl9USFJFU19WQUxJRF9NQVNLKSkKKworI2RlZmluZSBNRF9NSUdfRElGRl9USFJFU0hfRU5BQkxFKHJlZ2lvbikgKAkJCVwKKwlSRU1PVEVfSFVCX1MoKHJlZ2lvbiksIE1EX01JR19ESUZGX1RIUkVTSCwJCQlcCisJCVJFTU9URV9IVUJfTCgocmVnaW9uKSwgTURfTUlHX0RJRkZfVEhSRVNIKQkJXAorCQkJICAgICB8IE1EX01JR19ESUZGX1RIUkVTX1ZBTElEX01BU0spKQorCisjZGVmaW5lIE1EX01JR19ESUZGX1RIUkVTSF9JU19FTkFCTEVEKHJlZ2lvbikgKAkJCQlcCisJUkVNT1RFX0hVQl9MKChyZWdpb24pLCBNRF9NSUdfRElGRl9USFJFU0gpICYJCQlcCisJICAgICAgIE1EX01JR19ESUZGX1RIUkVTX1ZBTElEX01BU0spCisKKyNkZWZpbmUgTURfTUlHX1ZBTFVFX1RIUkVTSF9HRVQocmVnaW9uKSAoCQkJCVwKKwlSRU1PVEVfSFVCX0woKHJlZ2lvbiksIE1EX01JR19WQUxVRV9USFJFU0gpICYgIFwKKwlNRF9NSUdfVkFMVUVfVEhSRVNfVkFMVUVfTUFTSykKKworI2RlZmluZSBNRF9NSUdfVkFMVUVfVEhSRVNIX1NFVChyZWdpb24sIHZhbHVlKSAoCQkJXAorCVJFTU9URV9IVUJfUygocmVnaW9uKSwgTURfTUlHX1ZBTFVFX1RIUkVTSCwJCQlcCisJCU1EX01JR19WQUxVRV9USFJFU19WQUxJRF9NQVNLIHwgKHZhbHVlKSkpCisKKyNkZWZpbmUgTURfTUlHX1ZBTFVFX1RIUkVTSF9ESVNBQkxFKHJlZ2lvbikgKAkJCVwKKwlSRU1PVEVfSFVCX1MoKHJlZ2lvbiksIE1EX01JR19WQUxVRV9USFJFU0gsCQkJXAorCQlSRU1PVEVfSFVCX0wocmVnaW9uLCBNRF9NSUdfVkFMVUVfVEhSRVNIKQkJXAorCQkJICAgICAmIH5NRF9NSUdfVkFMVUVfVEhSRVNfVkFMSURfTUFTSykpCisKKyNkZWZpbmUgTURfTUlHX1ZBTFVFX1RIUkVTSF9FTkFCTEUocmVnaW9uKSAoCQkJXAorCVJFTU9URV9IVUJfUygocmVnaW9uKSwgTURfTUlHX1ZBTFVFX1RIUkVTSCwJCQlcCisJCVJFTU9URV9IVUJfTCgocmVnaW9uKSwgTURfTUlHX1ZBTFVFX1RIUkVTSCkJCVwKKwkJCSAgICAgfCBNRF9NSUdfVkFMVUVfVEhSRVNfVkFMSURfTUFTSykpCisKKyNkZWZpbmUgTURfTUlHX1ZBTFVFX1RIUkVTSF9JU19FTkFCTEVEKHJlZ2lvbikgKAkJCVwKKwlSRU1PVEVfSFVCX0woKHJlZ2lvbiksIE1EX01JR19WQUxVRV9USFJFU0gpICYJCQkgXAorCSAgICAgICBNRF9NSUdfVkFMVUVfVEhSRVNfVkFMSURfTUFTSykKKworLyoKKyAqIE9wZXJhdGlvbnMgb24gcGFnZSBtaWdyYXRpb24gY2FuZGlkYXRlIHJlZ2lzdGVyCisgKi8KKworI2RlZmluZSBNRF9NSUdfQ0FORElEQVRFX0dFVChteV9yZWdpb25faWQpICggXAorCVJFTU9URV9IVUJfTCgobXlfcmVnaW9uX2lkKSwgTURfTUlHX0NBTkRJREFURV9DTFIpKQorCisjZGVmaW5lIE1EX01JR19DQU5ESURBVEVfSFdQRk4odmFsdWUpICgodmFsdWUpICYgTURfTUlHX0NBTkRJREFURV9BRERSX01BU0spCisKKyNkZWZpbmUgTURfTUlHX0NBTkRJREFURV9OT0RFSUQodmFsdWUpICggXAorCSgodmFsdWUpICYgTURfTUlHX0NBTkRJREFURV9OT0RFSURfTUFTSykgPj4gTURfTUlHX0NBTkRJREFURV9OT0RFSURfU0hGVCkKKworI2RlZmluZSBNRF9NSUdfQ0FORElEQVRFX1RZUEUodmFsdWUpICggXAorCSgodmFsdWUpICYgTURfTUlHX0NBTkRJREFURV9UWVBFX01BU0spID4+IE1EX01JR19DQU5ESURBVEVfVFlQRV9TSEZUKQorCisjZGVmaW5lIE1EX01JR19DQU5ESURBVEVfVkFMSUQodmFsdWUpICggXAorCSgodmFsdWUpICYgTURfTUlHX0NBTkRJREFURV9WQUxJRF9NQVNLKSA+PiBNRF9NSUdfQ0FORElEQVRFX1ZBTElEX1NIRlQpCisKKy8qCisgKiBNYWNyb3MgdG8gcmV0cmlldmUgZmllbGRzIGluIHRoZSBwcm90ZWN0aW9uIGVudHJ5CisgKi8KKworLyogZm9yIFByZW1pdW0gU0lNTSAqLworI2RlZmluZSBNRF9QUFJPVF9SRUZDTlRfR0VUKHZhbHVlKSAoIFwKKwkoKHZhbHVlKSAmIE1EX1BQUk9UX1JFRkNOVF9NQVNLKSA+PiBNRF9QUFJPVF9SRUZDTlRfU0hGVCkKKworI2RlZmluZSBNRF9QUFJPVF9NSUdNRF9HRVQodmFsdWUpICggXAorCSgodmFsdWUpICYgTURfUFBST1RfTUlHTURfTUFTSykgPj4gTURfUFBST1RfTUlHTURfU0hGVCkKKworLyogZm9yIFN0YW5kYXJkIFNJTU0gKi8KKyNkZWZpbmUgTURfU1BST1RfUkVGQ05UX0dFVCh2YWx1ZSkgKCBcCisJKCh2YWx1ZSkgJiBNRF9TUFJPVF9SRUZDTlRfTUFTSykgPj4gTURfU1BST1RfUkVGQ05UX1NIRlQpCisKKyNkZWZpbmUgTURfU1BST1RfTUlHTURfR0VUKHZhbHVlKSAoIFwKKwkoKHZhbHVlKSAmIE1EX1NQUk9UX01JR01EX01BU0spID4+IE1EX1NQUk9UX01JR01EX1NIRlQpCisKKy8qCisgKiBGb3JtYXQgb2YgZGlyX2Vycm9yLCBtZW1fZXJyb3IsIHByb3RvY29sX2Vycm9yIGFuZCBtaXNjX2Vycm9yIHJlZ2lzdGVycworICovCisKK3N0cnVjdCBkaXJfZXJyb3JfcmVnIHsKKwl1NjQJdWNlX3ZsZDogICAxLAkvKiAgICA2MzogdmFsaWQgZGlyZWN0b3J5IHVjZSAJKi8KKwkJYWVfdmxkOgkgICAxLAkvKiAgICA2MjogdmFsaWQgZGlyIHByb3QgZWNjIGVycm9yICovCisJCWNlX3ZsZDoJICAgMSwJLyogICAgNjE6IHZhbGlkIGNvcnJlY3RhYmxlIEVDQyBlcnIqLworCQlyc3ZkMToJICAxOSwJLyogNjAtNDI6IHJlc2VydmVkCQkqLworCQliYWRfcHJvdDogIDMsCS8qIDQxLTM5OiBlbmNvZGluZywgYmFkIGFjY2VzcyByaWdodHMqLworCQliYWRfc3luOiAgIDcsCS8qIDM4LTMyOiBiYWQgZGlyIHN5bmRyb21lCSovCisJCXJzdmQyOgkgICAyLAkvKiAzMS0zMDogcmVzZXJ2ZWQJCSovCisJCWhzcGVjX2FkZHI6MjcsCS8qIDI5LTAzOiBiZGRpciBzcGFjZSBiYWQgZW50cnkgKi8KKwkJdWNlX292cjogICAxLAkvKiAgICAgMjogbXVsdGlwbGUgZGlyIHVjZSdzCSovCisJCWFlX292cjoJICAgMSwJLyogICAgIDE6IG11bHRpcGxlIHByb3QgZWNjIGVycnMqLworCQljZV9vdnI6CSAgIDE7CS8qICAgICAwOiBtdWx0aXBsZSBjb3JyZWN0YWJsZSBlcnJzICovCit9OworCit0eXBlZGVmIHVuaW9uIG1kX2Rpcl9lcnJvciB7CisJdTY0CWRlcnJfcmVnOwkvKiB0aGUgZW50aXJlIHJlZ2lzdGVyIAkJKi8KKwlzdHJ1Y3QgZGlyX2Vycm9yX3JlZyBkZXJyX2ZtdDsJLyogdGhlIHJlZ2lzdGVyIGZvcm1hdAkJKi8KK30gbWRfZGlyX2Vycm9yX3Q7CisKKworc3RydWN0IG1lbV9lcnJvcl9yZWcgeworCXU2NAl1Y2VfdmxkOiAgIDEsCS8qICAgIDYzOiB2YWxpZCBtZW1vcnkgdWNlIAkqLworCQljZV92bGQ6CSAgIDEsCS8qICAgIDYyOiB2YWxpZCBjb3JyZWN0YWJsZSBFQ0MgZXJyKi8KKwkJcnN2ZDE6CSAgMjIsCS8qIDYxLTQwOiByZXNlcnZlZAkJKi8KKwkJYmFkX3N5bjogICA4LAkvKiAzOS0zMjogYmFkIG1lbSBlY2Mgc3luZHJvbWUJKi8KKwkJYWRkcmVzczogIDI5LAkvKiAzMS0wMzogYmFkIGVudHJ5IHBvaW50ZXIJKi8KKwkJcnN2ZDI6CSAgIDEsCS8qICAgICAyOiByZXNlcnZlZAkJKi8KKwkJdWNlX292cjogICAxLAkvKiAgICAgMTogbXVsdGlwbGUgbWVtIHVjZSdzCSovCisJCWNlX292cjoJICAgMTsJLyogICAgIDA6IG11bHRpcGxlIGNvcnJlY3RhYmxlIGVycnMgKi8KK307CisKKwordHlwZWRlZiB1bmlvbiBtZF9tZW1fZXJyb3IgeworCXU2NAltZXJyX3JlZzsJLyogdGhlIGVudGlyZSByZWdpc3RlciAJCSovCisJc3RydWN0IG1lbV9lcnJvcl9yZWcgIG1lcnJfZm10OyAvKiBmb3JtYXQgb2YgdGhlIG1lbV9lcnJvciByZWcgICovCit9IG1kX21lbV9lcnJvcl90OworCisKK3N0cnVjdCBwcm90b19lcnJvcl9yZWcgeworCXU2NAl2YWxpZDoJICAgMSwJLyogICAgNjM6IHZhbGlkIHByb3RvY29sIGVycm9yCSovCisJCXJzdmQxOgkgICAyLAkvKiA2Mi02MTogcmVzZXJ2ZWQJCSovCisJCWluaXRpYXRvcjoxMSwJLyogNjAtNTA6IGlkIG9mIHJlcXVlc3QgaW5pdGlhdG9yKi8KKwkJYmFja29mZjogICAyLAkvKiA0OS00ODogYmFja29mZiBjb250cm9sCSovCisJCW1zZ190eXBlOiAgOCwJLyogNDctNDA6IHR5cGUgb2YgcmVxdWVzdAkqLworCQlhY2Nlc3M6CSAgIDIsCS8qIDM5LTM4OiBhY2Nlc3MgcmlnaHRzIG9mIGluaXRpYXRvciovCisJCXByaW9yaXR5OiAgMSwJLyogICAgMzc6IHByaW9yaXR5IGxldmVsIG9mIHJlcXVlc3RvciovCisJCWRpcl9zdGF0ZTogNCwJLyogMzYtMzM6IHN0YXRlIG9mIGRpcmVjdG9yeQkqLworCQlwb2ludGVyX21lOjEsCS8qICAgIDMyOiBpbml0aWF0b3Igc2FtZSBhcyBkaXIgcHRyICovCisJCWFkZHJlc3M6ICAyOSwJLyogMzEtMDM6IHJlcXVlc3QgYWRkcmVzcwkqLworCQlyc3ZkMjoJICAgMiwJLyogMDItMDE6IHJlc2VydmVkCQkqLworCQlvdmVycnVuOiAgIDE7CS8qICAgICAwOiBtdWx0aXBsZSBwcm90b2NvbCBlcnJzICovCit9OworCit0eXBlZGVmIHVuaW9uIG1kX3Byb3RvX2Vycm9yIHsKKwl1NjQJcGVycl9yZWc7CS8qIHRoZSBlbnRpcmUgcmVnaXN0ZXIgCQkqLworCXN0cnVjdCBwcm90b19lcnJvcl9yZWcJcGVycl9mbXQ7IC8qIGZvcm1hdCBvZiB0aGUgcmVnaXN0ZXIJKi8KK30gbWRfcHJvdG9fZXJyb3JfdDsKKworCitzdHJ1Y3QgbWRfc2Rpcl9oaWdoX2ZtdCB7CisJdW5zaWduZWQgc2hvcnQgc2RfaGlfYnZlYyA6IDExLAorCQkgICAgICAgc2RfaGlfZWNjICA6IDU7Cit9OworCisKK3R5cGVkZWYgdW5pb24gbWRfc2Rpcl9oaWdoIHsKKwkvKiBUaGUgMTYgYml0cyBvZiBzdGFuZGFyZCBkaXJlY3RvcnksIHVwcGVyIHdvcmQgKi8KKwl1bnNpZ25lZCBzaG9ydCBzZF9oaV92YWw7CisJc3RydWN0CW1kX3NkaXJfaGlnaF9mbXQgc2RfaGlfZm10OworfW1kX3NkaXJfaGlnaF90OworCisKK3N0cnVjdCBtZF9zZGlyX2xvd19zaGFyZWRfZm10IHsKKwkvKiBUaGUgbWVhbmluZyBvZiBsb3dlciBkaXJlY3RvcnksIHNoYXJlZCAqLworCXVuc2lnbmVkIHNob3J0CXNkc19sb19idmVjICA6IDUsCisJCQlzZHNfbG9fdW51c2VkOiAxLAorCQkJc2RzX2xvX3N0YXRlIDogMywKKwkJCXNkc19sb19wcmlvICA6IDEsCisJCQlzZHNfbG9fYXggICAgOiAxLAorCQkJc2RzX2xvX2VjYyAgIDogNTsKK307CisKK3N0cnVjdCBtZF9zZGlyX2xvd19leGNsdXNpdmVfZm10IHsKKwkvKiBUaGUgbWVhbmluZyBvZiBsb3dlciBkaXJlY3RvcnksIGV4Y2x1c2l2ZSAqLworCXVuc2lnbmVkIHNob3J0CXNkZV9sb19wdHIgICA6IDYsCisJCQlzZGVfbG9fc3RhdGUgOiAzLAorCQkJc2RlX2xvX3ByaW8gIDogMSwKKwkJCXNkZV9sb19heCAgICA6IDEsCisJCQlzZGVfbG9fZWNjICAgOiA1OworfTsKKworCit0eXBlZGVmIHVuaW9uIG1kX3NkaXJfbG93IHsKKwkvKiBUaGUgMTYgYml0cyBvZiBzdGFuZGFyZCBkaXJlY3RvcnksIGxvd2VyIHdvcmQgKi8KKwl1bnNpZ25lZCBzaG9ydAlzZF9sb192YWw7CisJc3RydWN0CW1kX3NkaXJfbG93X2V4Y2x1c2l2ZV9mbXQgc2RlX2xvX2ZtdDsKKwlzdHJ1Y3QJbWRfc2Rpcl9sb3dfc2hhcmVkX2ZtdCBzZHNfbG9fZm10OworfW1kX3NkaXJfbG93X3Q7CisKKworCitzdHJ1Y3QgbWRfcGRpcl9oaWdoX2ZtdCB7CisJdTY0CXBkX2hpX3VudXNlZCAgIDogMTYsCisJCXBkX2hpX2J2ZWMgICAgIDogMzgsCisJCXBkX2hpX3VudXNlZDEgIDogMywKKwkJcGRfaGlfZWNjICAgICAgOiA3OworfTsKKworCit0eXBlZGVmIHVuaW9uIG1kX3BkaXJfaGlnaCB7CisJLyogVGhlIDQ4IGJpdHMgb2Ygc3RhbmRhcmQgZGlyZWN0b3J5LCB1cHBlciB3b3JkICovCisJdTY0CXBkX2hpX3ZhbDsKKwlzdHJ1Y3QgbWRfcGRpcl9oaWdoX2ZtdCBwZF9oaV9mbXQ7Cit9bWRfcGRpcl9oaWdoX3Q7CisKKworc3RydWN0IG1kX3BkaXJfbG93X3NoYXJlZF9mbXQgeworCS8qIFRoZSBtZWFuaW5nIG9mIGxvd2VyIGRpcmVjdG9yeSwgc2hhcmVkICovCisJdTY0CXBkc19sb191bnVzZWQJOiAxNiwKKwkJcGRzX2xvX2J2ZWMJOiAyNiwKKwkJcGRzX2xvX2NudAk6ICA2LAorCQlwZHNfbG9fc3RhdGUJOiAgMywKKwkJcGRzX2xvX3N0ZQk6ICAxLAorCQlwZHNfbG9fcHJpbwk6ICA0LAorCQlwZHNfbG9fYXgJOiAgMSwKKwkJcGRzX2xvX2VjYwk6ICA3OworfTsKKworc3RydWN0IG1kX3BkaXJfbG93X2V4Y2x1c2l2ZV9mbXQgeworCS8qIFRoZSBtZWFuaW5nIG9mIGxvd2VyIGRpcmVjdG9yeSwgZXhjbHVzaXZlICovCisJdTY0CXBkZV9sb191bnVzZWQJOiAzMSwKKwkJcGRlX2xvX3B0cgk6IDExLAorCQlwZGVfbG9fdW51c2VkMQk6ICA2LAorCQlwZGVfbG9fc3RhdGUJOiAgMywKKwkJcGRlX2xvX3N0ZQk6ICAxLAorCQlwZGVfbG9fcHJpbwk6ICA0LAorCQlwZGVfbG9fYXgJOiAgMSwKKwkJcGRlX2xvX2VjYwk6ICA3OworfTsKKworCit0eXBlZGVmIHVuaW9uIG1kX3BkaXJfbG9lbnQgeworCS8qIFRoZSA0OCBiaXRzIG9mIHByZW1pdW0gZGlyZWN0b3J5LCBsb3dlciB3b3JkICovCisJdTY0CXBkX2xvX3ZhbDsKKwlzdHJ1Y3QgbWRfcGRpcl9sb3dfZXhjbHVzaXZlX2ZtdCBwZGVfbG9fZm10OworCXN0cnVjdCBtZF9wZGlyX2xvd19zaGFyZWRfZm10CXBkc19sb19mbXQ7Cit9bWRfcGRpcl9sb3dfdDsKKworCisvKgorICogICB0aGUgZm9sbG93aW5nIHR3byAidW5pb24iIGRlZmluaXRpb25zIGFuZCB0d28KKyAqICAgInN0cnVjdCIgZGVmaW5pdGlvbnMgYXJlIHVzZWQgaW4gdm1kdW1wLmMgdG8KKyAqICAgcmVwcmVzZW50IGRpcmVjdG9yeSBtZW1vcnkgaW5mb3JtYXRpb24uCisgKi8KKwordHlwZWRlZgl1bmlvbgltZF9kaXJfaGlnaAl7CisgICAgICAgIG1kX3NkaXJfaGlnaF90CW1kX3NkaXJfaGlnaDsKKyAgICAgICAgbWRfcGRpcl9oaWdoX3QJbWRfcGRpcl9oaWdoOworfSBtZF9kaXJfaGlnaF90OworCit0eXBlZGVmCXVuaW9uCW1kX2Rpcl9sb3cJeworICAgICAgICBtZF9zZGlyX2xvd190CW1kX3NkaXJfbG93OworICAgICAgICBtZF9wZGlyX2xvd190CW1kX3BkaXJfbG93OworfSBtZF9kaXJfbG93X3Q7CisKK3R5cGVkZWYJc3RydWN0CWJkZGlyX2VudHJ5CXsKKyAgICAgICAgbWRfZGlyX2xvd190CW1kX2Rpcl9sb3c7CisgICAgICAgIG1kX2Rpcl9oaWdoX3QJbWRfZGlyX2hpZ2g7Cit9IGJkZGlyX2VudHJ5X3Q7CisKK3R5cGVkZWYgc3RydWN0CWRpcl9tZW1fZW50cnkJeworICAgICAgICB1NjQJCXByY3BmW01BWF9SRUdJT05TXTsKKyAgICAgICAgYmRkaXJfZW50cnlfdAlkaXJlY3Rvcnlfd29yZHNbTURfUEFHRV9TSVpFL0NBQ0hFX1NMSU5FX1NJWkVdOworfSBkaXJfbWVtX2VudHJ5X3Q7CisKKworCit0eXBlZGVmIHVuaW9uIG1kX3BlcmZfc2VsIHsKKwl1NjQgCXBlcmZfc2VsX3JlZzsKKwlzdHJ1Y3QJeworCQl1NjQJcGVyZl9yc3ZkIDogNjAsCisJCSAgICAgICAgcGVyZl9lbiAgIDogIDEsCisJCQlwZXJmX3NlbCAgOiAgMzsKKwl9IHBlcmZfc2VsX2JpdHM7Cit9IG1kX3BlcmZfc2VsX3Q7CisKK3R5cGVkZWYgdW5pb24gbWRfcGVyZl9jbnQgeworCXU2NAlwZXJmX2NudDsKKwlzdHJ1Y3QJeworCQl1NjQJcGVyZl9yc3ZkIDogNDQsCisJICAgICAgICAgICAgICAgIHBlcmZfY250ICA6IDIwOworCX0gcGVyZl9jbnRfYml0czsKK30gbWRfcGVyZl9jbnRfdDsKKworCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisKKyNkZWZpbmUgRElSX0VSUk9SX1ZBTElEX01BU0sJMHhlMDAwMDAwMDAwMDAwMDAwCisjZGVmaW5lIERJUl9FUlJPUl9WQUxJRF9TSEZUCTYxCisjZGVmaW5lIERJUl9FUlJPUl9WQUxJRF9VQ0UJMHg4MDAwMDAwMDAwMDAwMDAwCisjZGVmaW5lIERJUl9FUlJPUl9WQUxJRF9BRQkweDQwMDAwMDAwMDAwMDAwMDAKKyNkZWZpbmUgRElSX0VSUk9SX1ZBTElEX0NFCTB4MjAwMDAwMDAwMDAwMDAwMAorCisjZGVmaW5lIE1FTV9FUlJPUl9WQUxJRF9NQVNLCTB4YzAwMDAwMDAwMDAwMDAwMAorI2RlZmluZSBNRU1fRVJST1JfVkFMSURfU0hGVAk2MgorI2RlZmluZSBNRU1fRVJST1JfVkFMSURfVUNFCTB4ODAwMDAwMDAwMDAwMDAwMAorI2RlZmluZSBNRU1fRVJST1JfVkFMSURfQ0UJMHg0MDAwMDAwMDAwMDAwMDAwCisKKyNkZWZpbmUgUFJPVE9fRVJST1JfVkFMSURfTUFTSwkweDgwMDAwMDAwMDAwMDAwMDAKKworI2RlZmluZSBNSVNDX0VSUk9SX1ZBTElEX01BU0sJMHgzZmYKKworLyoKKyAqIE1hc2sgZm9yIGhzcGVjIGFkZHJlc3MgdGhhdCBpcyBzdG9yZWQgaW4gdGhlIGRpciBlcnJvciByZWdpc3Rlci4KKyAqIFRoaXMgcmVwcmVzZW50cyBiaXRzIDI5IHRocm91Z2ggMy4KKyAqLworI2RlZmluZSBESVJfRVJSX0hTUEVDX01BU0sJMHgzZmZmZmZmOAorI2RlZmluZSBFUlJPUl9IU1BFQ19NQVNLCTB4M2ZmZmZmZjgKKyNkZWZpbmUgRVJST1JfSFNQRUNfU0hGVAkzCisjZGVmaW5lIEVSUk9SX0FERFJfTUFTSwkJMHhmZmZmZmZmOAorI2RlZmluZSBFUlJPUl9BRERSX1NIRlQJCTMKKworLyoKKyAqIE1EX01JU0NfRVJST1IgcmVnaXN0ZXIgZGVmaW5lcy4KKyAqLworCisjZGVmaW5lIE1NQ0VfVkFMSURfTUFTSwkJMHgzZmYKKyNkZWZpbmUgTU1DRV9JTExfTVNHX1NIRlQJOAorI2RlZmluZSBNTUNFX0lMTF9NU0dfTUFTSwkoVUlOVDY0X0NBU1QgMHgwMyA8PCBNTUNFX0lMTF9NU0dfU0hGVCkKKyNkZWZpbmUgTU1DRV9JTExfUkVWX1NIRlQJNgorI2RlZmluZSBNTUNFX0lMTF9SRVZfTUFTSwkoVUlOVDY0X0NBU1QgMHgwMyA8PCBNTUNFX0lMTF9SRVZfU0hGVCkKKyNkZWZpbmUgTU1DRV9MT05HX1BBQ0tfU0hGVAk0CisjZGVmaW5lIE1NQ0VfTE9OR19QQUNLX01BU0sJKFVJTlQ2NF9DQVNUIDB4MDMgPDwgTU1DRV9sT05HX1BBQ0tfU0hGVCkKKyNkZWZpbmUgTU1DRV9TSE9SVF9QQUNLX1NIRlQJMgorI2RlZmluZSBNTUNFX1NIT1JUX1BBQ0tfTUFTSwkoVUlOVDY0X0NBU1QgMHgwMyA8PCBNTUNFX1NIT1JUX1BBQ0tfU0hGVCkKKyNkZWZpbmUgTU1DRV9CQURfREFUQV9TSEZUCTAKKyNkZWZpbmUgTU1DRV9CQURfREFUQV9NQVNLCShVSU5UNjRfQ0FTVCAweDAzIDw8IE1NQ0VfQkFEX0RBVEFfU0hGVCkKKworCisjZGVmaW5lIE1EX1BFUkZfQ09VTlRFUlMJNgorI2RlZmluZSBNRF9QRVJGX1NFVFMJCTYKKworI2RlZmluZSBNRU1fRElNTV9NQVNLCQkJCTB4ZTAwMDAwMDAKKyNkZWZpbmUgTUVNX0RJTU1fU0hGVAkJCQkyOQorCisjZW5kaWYgLyogX0FTTV9TTl9TTjBfSFVCTURfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zbi9zbjAvaHVibmkuaCBiL2luY2x1ZGUvYXNtLW1pcHMvc24vc24wL2h1Ym5pLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQwZDNlZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc24vc24wL2h1Ym5pLmgKQEAgLTAsMCArMSwyNTUgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBEZXJpdmVkIGZyb20gSVJJWCA8c3lzL1NOL1NOMC9odWJuaS5oPiwgUmV2aXNpb24gMS4yNy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTItMTk5NywgMTk5OSBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgYnkgUmFsZiBCYWVjaGxlCisgKi8KKyNpZm5kZWYgX0FTTV9TR0lfU04wX0hVQk5JX0gKKyNkZWZpbmUgX0FTTV9TR0lfU04wX0hVQk5JX0gKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2VuZGlmCisKKy8qCisgKiBIdWIgTmV0d29yayBJbnRlcmZhY2UgcmVnaXN0ZXJzCisgKgorICogQWxsIHJlZ2lzdGVycyBpbiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gY2hhbmdlIHVudGlsIEh1YiBjaGlwIHRhcGVvdXQuCisgKi8KKworI2RlZmluZSBOSV9CQVNFCQkJMHg2MDAwMDAKKyNkZWZpbmUgTklfQkFTRV9UQUJMRVMJCTB4NjMwMDAwCisKKyNkZWZpbmUgTklfU1RBVFVTX1JFVl9JRAkweDYwMDAwMCAvKiBIdWIgbmV0d29yayBzdGF0dXMsIHJldiwgYW5kIElEICovCisjZGVmaW5lIE5JX1BPUlRfUkVTRVQJCTB4NjAwMDA4IC8qIFJlc2V0IHRoZSBuZXR3b3JrIGludGVyZmFjZSAgICAgKi8KKyNkZWZpbmUgTklfUFJPVEVDVElPTgkJMHg2MDAwMTAgLyogTkkgcmVnaXN0ZXIgYWNjZXNzIHBlcm1pc3Npb25zICAqLworI2RlZmluZSBOSV9HTE9CQUxfUEFSTVMJCTB4NjAwMDE4IC8qIExMUCBwYXJhbWV0ZXJzIAkJICAgICovCisjZGVmaW5lIE5JX1NDUkFUQ0hfUkVHMAkJMHg2MDAxMDAgLyogU2NyYXRjaCByZWdpc3RlciAwICg2NCBiaXRzKSAgICAqLworI2RlZmluZSBOSV9TQ1JBVENIX1JFRzEJCTB4NjAwMTA4IC8qIFNjcmF0Y2ggcmVnaXN0ZXIgMSAoNjQgYml0cykgICAgKi8KKyNkZWZpbmUgTklfRElBR19QQVJNUwkJMHg2MDAxMTAgLyogUGFyYW1ldGVycyBmb3IgZGlhZ3MJICAgICovCisKKyNkZWZpbmUgTklfVkVDVE9SX1BBUk1TCQkweDYwMDIwMCAvKiBWZWN0b3IgUElPIHJvdXRpbmcgcGFyYW1ldGVycyAgICovCisjZGVmaW5lIE5JX1ZFQ1RPUgkJMHg2MDAyMDggLyogVmVjdG9yIFBJTyByb3V0ZSAJCSAgICAqLworI2RlZmluZSBOSV9WRUNUT1JfREFUQQkJMHg2MDAyMTAgLyogVmVjdG9yIFBJTyBkYXRhIAkJICAgICovCisjZGVmaW5lIE5JX1ZFQ1RPUl9TVEFUVVMJMHg2MDAzMDAgLyogVmVjdG9yIFBJTyByZXR1cm4gc3RhdHVzIAkgICAgKi8KKyNkZWZpbmUgTklfUkVUVVJOX1ZFQ1RPUgkweDYwMDMwOCAvKiBWZWN0b3IgUElPIHJldHVybiB2ZWN0b3IgCSAgICAqLworI2RlZmluZSBOSV9WRUNUT1JfUkVBRF9EQVRBCTB4NjAwMzEwIC8qIFZlY3RvciBQSU8gcmVhZCBkYXRhIAkgICAgKi8KKyNkZWZpbmUgTklfVkVDVE9SX0NMRUFSCQkweDYwMDM4MCAvKiBWZWN0b3IgUElPIHJlYWQgJiBjbGVhciBzdGF0dXMgICovCisKKyNkZWZpbmUgTklfSU9fUFJPVEVDVAkJMHg2MDA0MDAgLyogUElPIHByb3RlY3Rpb24gYml0cyAJICAgICovCisjZGVmaW5lIE5JX0lPX1BST1RfT1ZSUkQJMHg2MDA0MDggLyogUElPIHByb3RlY3Rpb24gYml0IG92ZXJyaWRlICAgICAqLworCisjZGVmaW5lIE5JX0FHRV9DUFUwX01FTU9SWQkweDYwMDUwMCAvKiBDUFUgMCBtZW1vcnkgYWdlIGNvbnRyb2wgCSAgICAqLworI2RlZmluZSBOSV9BR0VfQ1BVMF9QSU8JCTB4NjAwNTA4IC8qIENQVSAwIFBJTyBhZ2UgY29udHJvbCAJICAgICovCisjZGVmaW5lIE5JX0FHRV9DUFUxX01FTU9SWQkweDYwMDUxMCAvKiBDUFUgMSBtZW1vcnkgYWdlIGNvbnRyb2wgCSAgICAqLworI2RlZmluZSBOSV9BR0VfQ1BVMV9QSU8JCTB4NjAwNTE4IC8qIENQVSAxIFBJTyBhZ2UgY29udHJvbCAJICAgICovCisjZGVmaW5lIE5JX0FHRV9HQlJfTUVNT1JZCTB4NjAwNTIwIC8qIEdCUiBtZW1vcnkgYWdlIGNvbnRyb2wgCSAgICAqLworI2RlZmluZSBOSV9BR0VfR0JSX1BJTwkJMHg2MDA1MjggLyogR0JSIFBJTyBhZ2UgY29udHJvbCAJICAgICovCisjZGVmaW5lIE5JX0FHRV9JT19NRU1PUlkJMHg2MDA1MzAgLyogSU8gbWVtb3J5IGFnZSBjb250cm9sIAkgICAgKi8KKyNkZWZpbmUgTklfQUdFX0lPX1BJTwkJMHg2MDA1MzggLyogSU8gUElPIGFnZSBjb250cm9sIAkJICAgICovCisjZGVmaW5lIE5JX0FHRV9SRUdfTUlOCQlOSV9BR0VfQ1BVMF9NRU1PUlkKKyNkZWZpbmUgTklfQUdFX1JFR19NQVgJCU5JX0FHRV9JT19QSU8KKworI2RlZmluZSBOSV9QT1JUX1BBUk1TCQkweDYwODAwMCAvKiBMTFAgUGFyYW1ldGVycyAJCSAgICAqLworI2RlZmluZSBOSV9QT1JUX0VSUk9SCQkweDYwODAwOCAvKiBMTFAgRXJyb3JzIAkJCSAgICAqLworI2RlZmluZSBOSV9QT1JUX0VSUk9SX0NMRUFSCTB4NjA4MDg4IC8qIENsZWFyIHRoZSBlcnJvciBiaXRzIAkgICAgKi8KKworI2RlZmluZSBOSV9NRVRBX1RBQkxFMAkJMHg2MzgwMDAgLyogRmlyc3QgbWV0YSByb3V0aW5nIHRhYmxlIGVudHJ5ICAqLworI2RlZmluZSBOSV9NRVRBX1RBQkxFKF94KQkoTklfTUVUQV9UQUJMRTAgKyAoOCAqIChfeCkpKQorI2RlZmluZSBOSV9NRVRBX0VOVFJJRVMJCTMyCisKKyNkZWZpbmUgTklfTE9DQUxfVEFCTEUwCQkweDYzODEwMCAvKiBGaXJzdCBsb2NhbCByb3V0aW5nIHRhYmxlIGVudHJ5ICovCisjZGVmaW5lIE5JX0xPQ0FMX1RBQkxFKF94KQkoTklfTE9DQUxfVEFCTEUwICsgKDggKiAoX3gpKSkKKyNkZWZpbmUgTklfTE9DQUxfRU5UUklFUwkxNgorCisvKgorICogTklfU1RBVFVTX1JFVl9JRCBtYXNrIGFuZCBzaGlmdCBkZWZpbml0aW9ucworICogSGF2ZSB0byB1c2UgVUlOVDY0X0NBU1QgaW5zdGVhZCBvZiAnTCcgc3VmZml4LCBmb3IgYXNzZW1ibGVyLgorICovCisKKyNkZWZpbmUgTlNSSV84QklUTU9ERV9TSEZUCTMwCisjZGVmaW5lIE5TUklfOEJJVE1PREVfTUFTSwkoVUlOVDY0X0NBU1QgMHgxIDw8IDMwKQorI2RlZmluZSBOU1JJX0xJTktVUF9TSEZUCTI5CisjZGVmaW5lIE5TUklfTElOS1VQX01BU0sJKFVJTlQ2NF9DQVNUIDB4MSA8PCAyOSkKKyNkZWZpbmUgTlNSSV9ET1dOUkVBU09OX1NIRlQJMjgJCS8qIDA9ZmFpbGVkLCAxPW5ldmVyIGNhbWUgICAqLworI2RlZmluZSBOU1JJX0RPV05SRUFTT05fTUFTSwkoVUlOVDY0X0NBU1QgMHgxIDw8IDI4KQkvKiAgICBvdXQgb2YgcmVzZXQuICovCisjZGVmaW5lIE5TUklfTU9SRU5PREVTX1NIRlQJMTgKKyNkZWZpbmUgTlNSSV9NT1JFTk9ERVNfTUFTSwkoVUlOVDY0X0NBU1QgMSA8PCAxOCkJLyogTWF4LiAjIG9mIG5vZGVzICAqLworI2RlZmluZQkgTU9SRV9NRU1PUlkJCTAKKyNkZWZpbmUJIE1PUkVfTk9ERVMJCTEKKyNkZWZpbmUgTlNSSV9SRUdJT05TSVpFX1NIRlQJMTcKKyNkZWZpbmUgTlNSSV9SRUdJT05TSVpFX01BU0sJKFVJTlQ2NF9DQVNUIDEgPDwgMTcpCS8qIEdyYW51bGFyaXR5IAkgICAgKi8KKyNkZWZpbmUJIFJFR0lPTlNJWkVfRklORQkxCisjZGVmaW5lCSBSRUdJT05TSVpFX0NPQVJTRQkwCisjZGVmaW5lIE5TUklfTk9ERUlEX1NIRlQJOAorI2RlZmluZSBOU1JJX05PREVJRF9NQVNLCShVSU5UNjRfQ0FTVCAweDFmZiA8PCA4KS8qIE5vZGUgKEh1YikgSUQgICAgKi8KKyNkZWZpbmUgTlNSSV9SRVZfU0hGVAkJNAorI2RlZmluZSBOU1JJX1JFVl9NQVNLCQkoVUlOVDY0X0NBU1QgMHhmIDw8IDQpCS8qIENoaXAgUmV2aXNpb24gICAgKi8KKyNkZWZpbmUgTlNSSV9DSElQSURfU0hGVAkwCisjZGVmaW5lIE5TUklfQ0hJUElEX01BU0sJKFVJTlQ2NF9DQVNUIDB4ZikJLyogQ2hpcCB0eXBlIElEICAgICAqLworCisvKgorICogSW4gZmluZSBtb2RlLCBlYWNoIG5vZGUgaXMgYSByZWdpb24uICBJbiBjb2Fyc2UgbW9kZSwgdGhlcmUgYXJlCisgKiBlaWdodCBub2RlcyBwZXIgcmVnaW9uLgorICovCisjZGVmaW5lIE5BU0lEX1RPX0ZJTkVSRUdfU0hGVAkwCisjZGVmaW5lIE5BU0lEX1RPX0NPQVJTRVJFR19TSEZUCTMKKworLyogTklfUE9SVF9SRVNFVCBtYXNrIGRlZmluaXRpb25zICovCisKKyNkZWZpbmUgTlBSX1BPUlRSRVNFVAkJKFVJTlQ2NF9DQVNUIDEgPDwgNykJLyogU2VuZCB3YXJtIHJlc2V0ICAqLworI2RlZmluZSBOUFJfTElOS1JFU0VUCQkoVUlOVDY0X0NBU1QgMSA8PCAxKQkvKiBTZW5kIGxpbmsgcmVzZXQgICovCisjZGVmaW5lIE5QUl9MT0NBTFJFU0VUCQkoVUlOVDY0X0NBU1QgMSkJCS8qIFJlc2V0IGVudGlyZSBodWIgKi8KKworLyogTklfUFJPVEVDVElPTiBtYXNrIGFuZCBzaGlmdCBkZWZpbml0aW9ucyAqLworCisjZGVmaW5lIE5QUk9UX1JFU0VUT0sJCShVSU5UNjRfQ0FTVCAxKQorCisvKiBOSV9HTE9CQUxfUEFSTVMgbWFzayBhbmQgc2hpZnQgZGVmaW5pdGlvbnMgKi8KKworI2RlZmluZSBOR1BfTUFYUkVUUllfU0hGVAk0OAkJLyogTWF4aW11bSByZXRyaWVzICAJICAgICovCisjZGVmaW5lIE5HUF9NQVhSRVRSWV9NQVNLCShVSU5UNjRfQ0FTVCAweDNmZiA8PCA0OCkKKyNkZWZpbmUgTkdQX1RBSUxUT1dSQVBfU0hGVAkzMgkJLyogVGFpbCB0aW1lb3V0IHdyYXAgCSAgICAqLworI2RlZmluZSBOR1BfVEFJTFRPV1JBUF9NQVNLCShVSU5UNjRfQ0FTVCAweGZmZmYgPDwgMzIpCisKKyNkZWZpbmUgTkdQX0NSRURJVFRPVkFMX1NIRlQJMTYJCS8qIFRhaWwgdGltZW91dCB3cmFwIAkgICAgKi8KKyNkZWZpbmUgTkdQX0NSRURJVFRPVkFMX01BU0sJKFVJTlQ2NF9DQVNUIDB4ZiA8PCAxNikKKyNkZWZpbmUgTkdQX1RBSUxUT1ZBTF9TSEZUCTQJCS8qIFRhaWwgdGltZW91dCB2YWx1ZSAJICAgICovCisjZGVmaW5lIE5HUF9UQUlMVE9WQUxfTUFTSwkoVUlOVDY0X0NBU1QgMHhmIDw8IDQpCisKKy8qIE5JX0RJQUdfUEFSTVMgbWFzayBhbmQgc2hpZnQgZGVmaW5pdGlvbnMgKi8KKworI2RlZmluZSBORFBfUE9SVFRPUkVTRVQJCShVSU5UNjRfQ0FTVCAxIDw8IDE4KQkvKiBQb3J0IHRtb3V0IHJlc2V0ICovCisjZGVmaW5lIE5EUF9MTFA4QklUTU9ERQkJKFVJTlQ2NF9DQVNUIDEgPDwgMTIpCS8qIExMUCA4LWJpdCBtb2RlICAgKi8KKyNkZWZpbmUgTkRQX1BPUlRESVNBQkxFCQkoVUlOVDY0X0NBU1QgMSA8PCAgNikJLyogUG9ydCBkaXNhYmxlICAgICAqLworI2RlZmluZSBORFBfU0VOREVSUk9SCQkoVUlOVDY0X0NBU1QgMSkJCS8qIFNlbmQgZGF0YSBlcnJvciAgKi8KKworLyoKKyAqIE5JX1ZFQ1RPUl9QQVJNUyBtYXNrIGFuZCBzaGlmdCBkZWZpbml0aW9ucy4KKyAqIFRZUEUgbWF5IGJlIGFueSBvZiB0aGUgZmlyc3QgZm91ciBQSU9UWVBFcyBkZWZpbmVkIHVuZGVyIE5JX1ZFQ1RPUl9TVEFUVVMuCisgKi8KKworI2RlZmluZSBOVlBfUElPSURfU0hGVAkJNDAKKyNkZWZpbmUgTlZQX1BJT0lEX01BU0sJCShVSU5UNjRfQ0FTVCAweDNmZiA8PCA0MCkKKyNkZWZpbmUgTlZQX1dSSVRFSURfU0hGVAkzMgorI2RlZmluZSBOVlBfV1JJVEVJRF9NQVNLCShVSU5UNjRfQ0FTVCAweGZmIDw8IDMyKQorI2RlZmluZSBOVlBfQUREUkVTU19NQVNLCShVSU5UNjRfQ0FTVCAweGZmZmY4KQkvKiBCaXRzIDE5OjMgCSAgICAqLworI2RlZmluZSBOVlBfVFlQRV9TSEZUCQkwCisjZGVmaW5lIE5WUF9UWVBFX01BU0sJCShVSU5UNjRfQ0FTVCAweDMpCisKKy8qIE5JX1ZFQ1RPUl9TVEFUVVMgbWFzayBhbmQgc2hpZnQgZGVmaW5pdGlvbnMgKi8KKworI2RlZmluZSBOVlNfVkFMSUQJCShVSU5UNjRfQ0FTVCAxIDw8IDYzKQorI2RlZmluZSBOVlNfT1ZFUlJVTgkJKFVJTlQ2NF9DQVNUIDEgPDwgNjIpCisjZGVmaW5lIE5WU19UQVJHRVRfU0hGVAkJNTEKKyNkZWZpbmUgTlZTX1RBUkdFVF9NQVNLCQkoVUlOVDY0X0NBU1QgMHgzZmYgPDwgNTEpCisjZGVmaW5lIE5WU19QSU9JRF9TSEZUCQk0MAorI2RlZmluZSBOVlNfUElPSURfTUFTSwkJKFVJTlQ2NF9DQVNUIDB4M2ZmIDw8IDQwKQorI2RlZmluZSBOVlNfV1JJVEVJRF9TSEZUCTMyCisjZGVmaW5lIE5WU19XUklURUlEX01BU0sJKFVJTlQ2NF9DQVNUIDB4ZmYgPDwgMzIpCisjZGVmaW5lIE5WU19BRERSRVNTX01BU0sJKFVJTlQ2NF9DQVNUIDB4ZmZmZmZmZjgpICAgLyogQml0cyAzMTozICAgICAqLworI2RlZmluZSBOVlNfVFlQRV9TSEZUCQkwCisjZGVmaW5lIE5WU19UWVBFX01BU0sJCShVSU5UNjRfQ0FTVCAweDcpCisjZGVmaW5lIE5WU19FUlJPUl9NQVNLCQkoVUlOVDY0X0NBU1QgMHg0KSAgLyogYml0IHNldCBtZWFucyBlcnJvciAqLworCisKKyNkZWZpbmUJIFBJT1RZUEVfUkVBRAkJMAkvKiBWRUNUT1JfUEFSTVMgYW5kIFZFQ1RPUl9TVEFUVVMgICAqLworI2RlZmluZQkgUElPVFlQRV9XUklURQkJMQkvKiBWRUNUT1JfUEFSTVMgYW5kIFZFQ1RPUl9TVEFUVVMgICAqLworI2RlZmluZQkgUElPVFlQRV9VTkRFRklORUQJMgkvKiBWRUNUT1JfUEFSTVMgYW5kIFZFQ1RPUl9TVEFUVVMgICAqLworI2RlZmluZQkgUElPVFlQRV9FWENIQU5HRQkzCS8qIFZFQ1RPUl9QQVJNUyBhbmQgVkVDVE9SX1NUQVRVUyAgICovCisjZGVmaW5lCSBQSU9UWVBFX0FERFJfRVJSCTQJLyogVkVDVE9SX1NUQVRVUyBvbmx5IAkJICAgICovCisjZGVmaW5lCSBQSU9UWVBFX0NNRF9FUlIJNQkvKiBWRUNUT1JfU1RBVFVTIG9ubHkgCQkgICAgKi8KKyNkZWZpbmUJIFBJT1RZUEVfUFJPVF9FUlIJNgkvKiBWRUNUT1JfU1RBVFVTIG9ubHkgCQkgICAgKi8KKyNkZWZpbmUJIFBJT1RZUEVfVU5LTk9XTgk3CS8qIFZFQ1RPUl9TVEFUVVMgb25seSAJCSAgICAqLworCisvKiBOSV9BR0VfWFhYIG1hc2sgYW5kIHNoaWZ0IGRlZmluaXRpb25zICovCisKKyNkZWZpbmUgTkFHRV9WQ0hfU0hGVAkJMTAKKyNkZWZpbmUgTkFHRV9WQ0hfTUFTSwkJKFVJTlQ2NF9DQVNUIDMgPDwgMTApCisjZGVmaW5lIE5BR0VfQ0NfU0hGVAkJOAorI2RlZmluZSBOQUdFX0NDX01BU0sJCShVSU5UNjRfQ0FTVCAzIDw8IDgpCisjZGVmaW5lIE5BR0VfQUdFX1NIRlQJCTAKKyNkZWZpbmUgTkFHRV9BR0VfTUFTSwkJKFVJTlQ2NF9DQVNUIDB4ZmYpCisjZGVmaW5lIE5BR0VfTUFTSwkJKE5BR0VfVkNIX01BU0sgfCBOQUdFX0NDX01BU0sgfCBOQUdFX0FHRV9NQVNLKQorCisjZGVmaW5lCSBWQ0hBTk5FTF9BCQkwCisjZGVmaW5lCSBWQ0hBTk5FTF9CCQkxCisjZGVmaW5lCSBWQ0hBTk5FTF9BTlkJCTIKKworLyogTklfUE9SVF9QQVJNUyBtYXNrIGFuZCBzaGlmdCBkZWZpbml0aW9ucyAqLworCisjZGVmaW5lIE5QUF9OVUxMVE9fU0hGVAkJMTAKKyNkZWZpbmUgTlBQX05VTExUT19NQVNLCQkoVUlOVDY0X0NBU1QgMHgzZiA8PCAxNikKKyNkZWZpbmUgTlBQX01BWEJVUlNUX1NIRlQJMAorI2RlZmluZSBOUFBfTUFYQlVSU1RfTUFTSwkoVUlOVDY0X0NBU1QgMHgzZmYpCisjZGVmaW5lIE5QUF9SRVNFVF9ERkxUX0hVQjIwCSgoVUlOVDY0X0NBU1QgMQkgICAgPDwgTlBQX05VTExUT19TSEZUKSB8IFwKKwkJCQkgKFVJTlQ2NF9DQVNUIDB4M2YwIDw8IE5QUF9NQVhCVVJTVF9TSEZUKSkKKyNkZWZpbmUgTlBQX1JFU0VUX0RFRkFVTFRTCSgoVUlOVDY0X0NBU1QgNgkgICAgPDwgTlBQX05VTExUT19TSEZUKSB8IFwKKwkJCQkgKFVJTlQ2NF9DQVNUIDB4M2YwIDw8IE5QUF9NQVhCVVJTVF9TSEZUKSkKKworCisvKiBOSV9QT1JUX0VSUk9SIG1hc2sgYW5kIHNoaWZ0IGRlZmluaXRpb25zICovCisKKyNkZWZpbmUgTlBFX0xJTktSRVNFVAkJKFVJTlQ2NF9DQVNUIDEgPDwgMzcpCisjZGVmaW5lIE5QRV9JTlRFUk5BTEVSUk9SCShVSU5UNjRfQ0FTVCAxIDw8IDM2KQorI2RlZmluZSBOUEVfQkFETUVTU0FHRQkJKFVJTlQ2NF9DQVNUIDEgPDwgMzUpCisjZGVmaW5lIE5QRV9CQURERVNUCQkoVUlOVDY0X0NBU1QgMSA8PCAzNCkKKyNkZWZpbmUgTlBFX0ZJRk9PVkVSRkxPVwkoVUlOVDY0X0NBU1QgMSA8PCAzMykKKyNkZWZpbmUgTlBFX0NSRURJVFRPX1NIRlQJMjgKKyNkZWZpbmUgTlBFX0NSRURJVFRPX01BU0sJKFVJTlQ2NF9DQVNUIDB4ZiA8PCAyOCkKKyNkZWZpbmUgTlBFX1RBSUxUT19TSEZUCQkyNAorI2RlZmluZSBOUEVfVEFJTFRPX01BU0sJCShVSU5UNjRfQ0FTVCAweGYgPDwgMjQpCisjZGVmaW5lIE5QRV9SRVRSWUNPVU5UX1NIRlQJMTYKKyNkZWZpbmUgTlBFX1JFVFJZQ09VTlRfTUFTSwkoVUlOVDY0X0NBU1QgMHhmZiA8PCAxNikKKyNkZWZpbmUgTlBFX0NCRVJSQ09VTlRfU0hGVAk4CisjZGVmaW5lIE5QRV9DQkVSUkNPVU5UX01BU0sJKFVJTlQ2NF9DQVNUIDB4ZmYgPDwgOCkKKyNkZWZpbmUgTlBFX1NORVJSQ09VTlRfU0hGVAkwCisjZGVmaW5lIE5QRV9TTkVSUkNPVU5UX01BU0sJKFVJTlQ2NF9DQVNUIDB4ZmYgPDwgMCkKKyNkZWZpbmUgTlBFX01BU0sJCTB4M2VmZmZmZmZmZgorCisjZGVmaW5lIE5QRV9DT1VOVF9NQVgJCTB4ZmYKKworI2RlZmluZSBOUEVfRkFUQUxfRVJST1JTCShOUEVfTElOS1JFU0VUIHwgTlBFX0lOVEVSTkFMRVJST1IgfAlcCisJCQkJIE5QRV9CQURNRVNTQUdFIHwgTlBFX0JBRERFU1QgfAkJXAorCQkJCSBOUEVfRklGT09WRVJGTE9XIHwgTlBFX0NSRURJVFRPX01BU0sgfAlcCisJCQkJIE5QRV9UQUlMVE9fTUFTSykKKworLyogTklfTUVUQV9UQUJMRSBtYXNrIGFuZCBzaGlmdCBkZWZpbml0aW9ucyAqLworCisjZGVmaW5lIE5NVF9FWElUX1BPUlRfTUFTSyAoVUlOVDY0X0NBU1QgMHhmKQorCisvKiBOSV9MT0NBTF9UQUJMRSBtYXNrIGFuZCBzaGlmdCBkZWZpbml0aW9ucyAqLworCisjZGVmaW5lIE5MVF9FWElUX1BPUlRfTUFTSyAoVUlOVDY0X0NBU1QgMHhmKQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCit0eXBlZGVmIHVuaW9uCWh1Ym5pX3BvcnRfZXJyb3JfdSB7CisJdTY0CW5pcGVfcmVnX3ZhbHVlOworCXN0cnVjdCB7CisJICAgIHU2NAluaXBlX3JzdmQ6CTI2LAkvKiB1bnVzZWQgKi8KKwkJbmlwZV9sbmtfcmVzZXQ6CSAxLAkvKiBsaW5rIHJlc2V0ICovCisJCW5pcGVfaW50bF9lcnI6CSAxLAkvKiBpbnRlcm5hbCBlcnJvciAqLworCQluaXBlX2JhZF9tc2c6CSAxLAkvKiBiYWQgbWVzc2FnZSAqLworCQluaXBlX2JhZF9kZXN0OgkgMSwJLyogYmFkIGRlc3QJKi8KKwkJbmlwZV9maWZvX292Zmw6CSAxLAkvKiBmaWZvIG92ZXJmbG93ICovCisJCW5pcGVfcnN2ZDE6CSAxLAkvKiB1bnVzZWQgKi8KKwkJbmlwZV9jcmVkaXRfdG86CSA0LAkvKiBjcmVkaXQgdGltZW91dCAqLworCQluaXBlX3RhaWxfdG86CSA0LAkvKiB0YWlsIHRpbWVvdXQgKi8KKwkJbmlwZV9yZXRyeV9jbnQ6CSA4LAkvKiByZXRyeSBlcnJvciBjb3VudCAqLworCQluaXBlX2NiX2NudDoJIDgsCS8qIGNoZWNrYml0IGVycm9yIGNvdW50ICovCisJCW5pcGVfc25fY250OgkgODsJLyogc2VxdWVuY2UgbnVtYmVyIGNvdW50ICovCisJfSBuaXBlX2ZpZWxkc19zOworfSBodWJuaV9wb3J0X2Vycm9yX3Q7CisKKyNkZWZpbmUgTklfTExQX1JFVFJZX01BWAkweGZmCisjZGVmaW5lIE5JX0xMUF9DQl9NQVgJCTB4ZmYKKyNkZWZpbmUgTklfTExQX1NOX01BWAkJMHhmZgorCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYgLyogX0FTTV9TR0lfU04wX0hVQk5JX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc24vc24wL2h1YnBpLmggYi9pbmNsdWRlL2FzbS1taXBzL3NuL3NuMC9odWJwaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1NWJiYTgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NuL3NuMC9odWJwaS5oCkBAIC0wLDAgKzEsNDI3IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogRGVyaXZlZCBmcm9tIElSSVggPHN5cy9TTi9TTjAvaHVicGkuaD4sIHJldmlzaW9uIDEuMjguCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkyIC0gMTk5NywgMTk5OSBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgYnkgUmFsZiBCYWVjaGxlCisgKi8KKyNpZm5kZWYJX0FTTV9TTl9TTjBfSFVCUElfSAorI2RlZmluZQlfQVNNX1NOX1NOMF9IVUJQSV9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKgorICogSHViIEkvTyBpbnRlcmZhY2UgcmVnaXN0ZXJzCisgKgorICogQWxsIHJlZ2lzdGVycyBpbiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gY2hhbmdlIHVudGlsIEh1YiBjaGlwIHRhcGVvdXQuCisgKiBBbGwgcmVnaXN0ZXIgImFkZHJlc3NlcyIgYXJlIGFjdHVhbGx5IG9mZnNldHMuICBVc2UgdGhlIExPQ0FMX0hVQgorICogb3IgUkVNT1RFX0hVQiBtYWNyb3MgdG8gc3ludGhlc2l6ZSBhbiBhY3R1YWwgYWRkcmVzcworICovCisKKyNkZWZpbmUgUElfQkFTRQkJCTB4MDAwMDAwCisKKy8qIEdlbmVyYWwgcHJvdGVjdGlvbiBhbmQgY29udHJvbCByZWdpc3RlcnMgKi8KKworI2RlZmluZSBQSV9DUFVfUFJPVEVDVAkJMHgwMDAwMDAgLyogQ1BVIFByb3RlY3Rpb24gCQkgICAgKi8KKyNkZWZpbmUgUElfUFJPVF9PVkVSUkQJCTB4MDAwMDA4IC8qIENsZWFyIENQVSBQcm90ZWN0aW9uIGJpdCAJICAgICovCisjZGVmaW5lCVBJX0lPX1BST1RFQ1QJCTB4MDAwMDEwIC8qIEludGVycnVwdCBQZW5kaW5nIFByb3RlY3Rpb24gICAgKi8KKyNkZWZpbmUgUElfUkVHSU9OX1BSRVNFTlQJMHgwMDAwMTggLyogSW5kaWNhdGVzIHdoZXRoZXIgcmVnaW9uIGV4aXN0cyAqLworI2RlZmluZSBQSV9DUFVfTlVNCQkweDAwMDAyMCAvKiBDUFUgTnVtYmVyIElEIAkJICAgICovCisjZGVmaW5lIFBJX0NBTElBU19TSVpFCQkweDAwMDAyOCAvKiBDYWNoZWQgQWxpYXMgU2l6ZSAJCSAgICAqLworI2RlZmluZSBQSV9NQVhfQ1JCX1RJTUVPVVQJMHgwMDAwMzAgLyogTWF4aW11bSBUaW1lb3V0IGZvciBDUkIgCSAgICAqLworI2RlZmluZSBQSV9DUkJfU0ZBQ1RPUgkJMHgwMDAwMzggLyogU2NhbGUgZmFjdG9yIGZvciBDUkIgdGltZW91dCAgICAqLworCisvKiBDQUxJQVMgdmFsdWVzICovCisjZGVmaW5lIFBJX0NBTElBU19TSVpFXzAJMAorI2RlZmluZSBQSV9DQUxJQVNfU0laRV80SwkxCisjZGVmaW5lIFBJX0NBTElBU19TSVpFXzhLCTIKKyNkZWZpbmUgUElfQ0FMSUFTX1NJWkVfMTZLCTMKKyNkZWZpbmUgUElfQ0FMSUFTX1NJWkVfMzJLCTQKKyNkZWZpbmUgUElfQ0FMSUFTX1NJWkVfNjRLCTUKKyNkZWZpbmUgUElfQ0FMSUFTX1NJWkVfMTI4Swk2CisjZGVmaW5lIFBJX0NBTElBU19TSVpFXzI1NksJNworI2RlZmluZSBQSV9DQUxJQVNfU0laRV81MTJLCTgKKyNkZWZpbmUgUElfQ0FMSUFTX1NJWkVfMU0JOQorI2RlZmluZSBQSV9DQUxJQVNfU0laRV8yTQkxMAorI2RlZmluZSBQSV9DQUxJQVNfU0laRV80TQkxMQorI2RlZmluZSBQSV9DQUxJQVNfU0laRV84TQkxMgorI2RlZmluZSBQSV9DQUxJQVNfU0laRV8xNk0JMTMKKyNkZWZpbmUgUElfQ0FMSUFTX1NJWkVfMzJNCTE0CisjZGVmaW5lIFBJX0NBTElBU19TSVpFXzY0TQkxNQorCisvKiBQcm9jZXNzb3IgY29udHJvbCBhbmQgc3RhdHVzIGNoZWNraW5nICovCisKKyNkZWZpbmUgUElfQ1BVX1BSRVNFTlRfQQkweDAwMDA0MCAvKiBDUFUgUHJlc2VudCBBIAkJICAgICovCisjZGVmaW5lIFBJX0NQVV9QUkVTRU5UX0IJMHgwMDAwNDggLyogQ1BVIFByZXNlbnQgQiAJCSAgICAqLworI2RlZmluZSBQSV9DUFVfRU5BQkxFX0EJCTB4MDAwMDUwIC8qIENQVSBFbmFibGUgQSAJCSAgICAqLworI2RlZmluZSBQSV9DUFVfRU5BQkxFX0IJCTB4MDAwMDU4IC8qIENQVSBFbmFibGUgQiAJCSAgICAqLworI2RlZmluZSBQSV9SRVBMWV9MRVZFTAkJMHgwMDAwNjAgLyogUmVwbHkgTGV2ZWwJCSAJICAgICovCisjZGVmaW5lIFBJX0hBUkRSRVNFVF9CSVQJMHgwMjAwNjggLyogQml0IGNsZWFyZWQgYnkgcy93IG9uIFNSCSAgICAqLworI2RlZmluZSBQSV9OTUlfQQkJMHgwMDAwNzAgLyogTk1JIHRvIENQVSBBIAkJICAgICovCisjZGVmaW5lIFBJX05NSV9CCQkweDAwMDA3OCAvKiBOTUkgdG8gQ1BVIEIgCQkgICAgKi8KKyNkZWZpbmUgUElfTk1JX09GRlNFVAkJKFBJX05NSV9CIC0gUElfTk1JX0EpCisjZGVmaW5lIFBJX1NPRlRSRVNFVAkJMHgwMDAwODAgLyogU29mdHJlc2V0ICh0byBib3RoIENQVXMpIAkgICAgKi8KKworLyogUmVndWxhciBJbnRlcnJ1cHQgcmVnaXN0ZXIgY2hlY2tpbmcuICAqLworCisjZGVmaW5lIFBJX0lOVF9QRU5EX01PRAkJMHgwMDAwOTAgLyogV3JpdGUgdG8gc2V0IHBlbmRpbmcgaW50cwkgICAgKi8KKyNkZWZpbmUgUElfSU5UX1BFTkQwCQkweDAwMDA5OCAvKiBSZWFkIHRvIGdldCBwZW5kaW5nIGludHMgCSAgICAqLworI2RlZmluZSBQSV9JTlRfUEVORDEJCTB4MDAwMGEwIC8qIFJlYWQgdG8gZ2V0IHBlbmRpbmcgaW50cyAJICAgICovCisjZGVmaW5lIFBJX0lOVF9NQVNLMF9BCQkweDAwMDBhOCAvKiBJbnRlcnJ1cHQgTWFzayAwIGZvciBDUFUgQSAJICAgICovCisjZGVmaW5lIFBJX0lOVF9NQVNLMV9BCQkweDAwMDBiMCAvKiBJbnRlcnJ1cHQgTWFzayAxIGZvciBDUFUgQSAJICAgICovCisjZGVmaW5lIFBJX0lOVF9NQVNLMF9CCQkweDAwMDBiOCAvKiBJbnRlcnJ1cHQgTWFzayAwIGZvciBDUFUgQiAJICAgICovCisjZGVmaW5lIFBJX0lOVF9NQVNLMV9CCQkweDAwMDBjMCAvKiBJbnRlcnJ1cHQgTWFzayAxIGZvciBDUFUgQiAJICAgICovCisKKyNkZWZpbmUgUElfSU5UX01BU0tfT0ZGU0VUCTB4MTAJIC8qIE9mZnNldCBmcm9tIEEgdG8gQiAJCSAgICAqLworCisvKiBDcm9zc2NhbGwgaW50ZXJydXB0cyAqLworCisjZGVmaW5lIFBJX0NDX1BFTkRfU0VUX0EJMHgwMDAwYzggLyogQ0MgSW50ZXJydXB0IFBlbmRpbmcgU2V0LCBDUFUgQSAqLworI2RlZmluZSBQSV9DQ19QRU5EX1NFVF9CCTB4MDAwMGQwIC8qIENDIEludGVycnVwdCBQZW5kaW5nIFNldCwgQ1BVIEIgKi8KKyNkZWZpbmUgUElfQ0NfUEVORF9DTFJfQQkweDAwMDBkOCAvKiBDQyBJbnRlcnJ1cHQgUGVuZGluZyBDbHIsIENQVSBBICovCisjZGVmaW5lIFBJX0NDX1BFTkRfQ0xSX0IJMHgwMDAwZTAgLyogQ0MgSW50ZXJydXB0IFBlbmRpbmcgQ2xyLCBDUFUgQiAqLworI2RlZmluZSBQSV9DQ19NQVNLCQkweDAwMDBlOCAvKiBDQyBJbnRlcnJ1cHQgbWFzayAJCSAgICAqLworCisjZGVmaW5lIFBJX0lOVF9TRVRfT0ZGU0VUCTB4MDgJIC8qIE9mZnNldCBmcm9tIEEgdG8gQiAJCSAgICAqLworCisvKiBSZWFsdGltZSBDb3VudGVyIGFuZCBQcm9maWxlciBjb250cm9sIHJlZ2lzdGVycyAqLworCisjZGVmaW5lIFBJX1JUX0NPVU5UCQkweDAzMDEwMCAvKiBSZWFsIFRpbWUgQ291bnRlciAJCSAgICAqLworI2RlZmluZSBQSV9SVF9DT01QQVJFX0EJCTB4MDAwMTA4IC8qIFJlYWwgVGltZSBDb21wYXJlIEEgCSAgICAqLworI2RlZmluZSBQSV9SVF9DT01QQVJFX0IJCTB4MDAwMTEwIC8qIFJlYWwgVGltZSBDb21wYXJlIEIgCSAgICAqLworI2RlZmluZSBQSV9QUk9GSUxFX0NPTVBBUkUJMHgwMDAxMTggLyogTDUgaW50IHRvIGJvdGggY3B1cyB3aGVuID09IFJUQyAqLworI2RlZmluZSBQSV9SVF9QRU5EX0EJCTB4MDAwMTIwIC8qIFNldCBpZiBSVCBpbnQgZm9yIEEgcGVuZGluZyAgICAgKi8KKyNkZWZpbmUgUElfUlRfUEVORF9CCQkweDAwMDEyOCAvKiBTZXQgaWYgUlQgaW50IGZvciBCIHBlbmRpbmcgICAgICovCisjZGVmaW5lIFBJX1BST0ZfUEVORF9BCQkweDAwMDEzMCAvKiBTZXQgaWYgUHJvZiBpbnQgZm9yIEEgcGVuZGluZyAgICovCisjZGVmaW5lIFBJX1BST0ZfUEVORF9CCQkweDAwMDEzOCAvKiBTZXQgaWYgUHJvZiBpbnQgZm9yIEIgcGVuZGluZyAgICovCisjZGVmaW5lIFBJX1JUX0VOX0EJCTB4MDAwMTQwIC8qIFJUIGludCBmb3IgQ1BVIEEgZW5hYmxlIAkgICAgKi8KKyNkZWZpbmUgUElfUlRfRU5fQgkJMHgwMDAxNDggLyogUlQgaW50IGZvciBDUFUgQiBlbmFibGUgCSAgICAqLworI2RlZmluZSBQSV9QUk9GX0VOX0EJCTB4MDAwMTUwIC8qIFBST0YgaW50IGZvciBDUFUgQSBlbmFibGUgCSAgICAqLworI2RlZmluZSBQSV9QUk9GX0VOX0IJCTB4MDAwMTU4IC8qIFBST0YgaW50IGZvciBDUFUgQiBlbmFibGUgCSAgICAqLworI2RlZmluZSBQSV9SVF9MT0NBTF9DVFJMCTB4MDAwMTYwIC8qIFJUIGNvbnRyb2wgcmVnaXN0ZXIgCSAgICAqLworI2RlZmluZSBQSV9SVF9GSUxURVJfQ1RSTAkweDAwMDE2OCAvKiBHQ0xLIEZpbHRlciBjb250cm9sIHJlZ2lzdGVyICAgICovCisKKyNkZWZpbmUgUElfQ09VTlRfT0ZGU0VUCQkweDA4CSAvKiBBIHRvIEIgb2Zmc2V0IGZvciBhbGwgY291bnRzICAgICovCisKKy8qIEJ1aWx0LUluIFNlbGYgVGVzdCBzdXBwb3J0ICovCisKKyNkZWZpbmUgUElfQklTVF9XUklURV9EQVRBCTB4MDAwMjAwIC8qIEJJU1Qgd3JpdGUgZGF0YSAJCSAgICAqLworI2RlZmluZSBQSV9CSVNUX1JFQURfREFUQQkweDAwMDIwOCAvKiBCSVNUIHJlYWQgZGF0YSAJCSAgICAqLworI2RlZmluZSBQSV9CSVNUX0NPVU5UX1RBUkcJMHgwMDAyMTAgLyogQklTVCBDb3VudCBhbmQgVGFyZ2V0IAkgICAgKi8KKyNkZWZpbmUgUElfQklTVF9SRUFEWQkJMHgwMDAyMTggLyogQklTVCBSZWFkeSBpbmRpY2F0b3IgCSAgICAqLworI2RlZmluZSBQSV9CSVNUX1NISUZUX0xPQUQJMHgwMDAyMjAgLyogQklTVCBjb250cm9sIAkJICAgICovCisjZGVmaW5lIFBJX0JJU1RfU0hJRlRfVU5MT0FECTB4MDAwMjI4IC8qIEJJU1QgY29udHJvbCAJCSAgICAqLworI2RlZmluZSBQSV9CSVNUX0VOVEVSX1JVTgkweDAwMDIzMCAvKiBCSVNUIGNvbnRyb2wgCQkgICAgKi8KKworLyogR3JhcGhpY3MgY29udHJvbCByZWdpc3RlcnMgKi8KKworI2RlZmluZSBQSV9HRlhfUEFHRV9BCQkweDAwMDMwMCAvKiBHcmFwaGljcyBwYWdlIEEgCQkgICAgKi8KKyNkZWZpbmUgUElfR0ZYX0NSRURJVF9DTlRSX0EJMHgwMDAzMDggLyogR3JhcGhpY3MgY3JlZGl0IGNvdW50ZXIgQSAJICAgICovCisjZGVmaW5lIFBJX0dGWF9CSUFTX0EJCTB4MDAwMzEwIC8qIEdyYXBoaWNzIGJpYXMgQSAJCSAgICAqLworI2RlZmluZSBQSV9HRlhfSU5UX0NOVFJfQQkweDAwMDMxOCAvKiBHcmFwaGljcyBpbnRlcnJ1cHQgY291bnRlciBBICAgICovCisjZGVmaW5lIFBJX0dGWF9JTlRfQ01QX0EJMHgwMDAzMjAgLyogR3JhcGhpY3MgaW50ZXJydXB0IGNvbXBhcmF0b3IgQSAqLworI2RlZmluZSBQSV9HRlhfUEFHRV9CCQkweDAwMDMyOCAvKiBHcmFwaGljcyBwYWdlIEIgCQkgICAgKi8KKyNkZWZpbmUgUElfR0ZYX0NSRURJVF9DTlRSX0IJMHgwMDAzMzAgLyogR3JhcGhpY3MgY3JlZGl0IGNvdW50ZXIgQiAJICAgICovCisjZGVmaW5lIFBJX0dGWF9CSUFTX0IJCTB4MDAwMzM4IC8qIEdyYXBoaWNzIGJpYXMgQiAJCSAgICAqLworI2RlZmluZSBQSV9HRlhfSU5UX0NOVFJfQgkweDAwMDM0MCAvKiBHcmFwaGljcyBpbnRlcnJ1cHQgY291bnRlciBCICAgICovCisjZGVmaW5lIFBJX0dGWF9JTlRfQ01QX0IJMHgwMDAzNDggLyogR3JhcGhpY3MgaW50ZXJydXB0IGNvbXBhcmF0b3IgQiAqLworCisjZGVmaW5lIFBJX0dGWF9PRkZTRVQJCShQSV9HRlhfUEFHRV9CIC0gUElfR0ZYX1BBR0VfQSkKKyNkZWZpbmUgUElfR0ZYX1BBR0VfRU5BQkxFCTB4MDAwMDAxMDAwMDAwMDAwMExMCisKKy8qIEVycm9yIGFuZCB0aW1lb3V0IHJlZ2lzdGVycyAqLworI2RlZmluZSBQSV9FUlJfSU5UX1BFTkQJCTB4MDAwNDAwIC8qIEVycm9yIEludGVycnVwdCBQZW5kaW5nCSAgICAqLworI2RlZmluZSBQSV9FUlJfSU5UX01BU0tfQQkweDAwMDQwOCAvKiBFcnJvciBJbnRlcnJ1cHQgbWFzayBmb3IgQ1BVIEEgICovCisjZGVmaW5lIFBJX0VSUl9JTlRfTUFTS19CCTB4MDAwNDEwIC8qIEVycm9yIEludGVycnVwdCBtYXNrIGZvciBDUFUgQiAgKi8KKyNkZWZpbmUgUElfRVJSX1NUQUNLX0FERFJfQQkweDAwMDQxOCAvKiBFcnJvciBzdGFjayBhZGRyZXNzIGZvciBDUFUgQSAgICovCisjZGVmaW5lIFBJX0VSUl9TVEFDS19BRERSX0IJMHgwMDA0MjAgLyogRXJyb3Igc3RhY2sgYWRkcmVzcyBmb3IgQ1BVIEIgICAqLworI2RlZmluZSBQSV9FUlJfU1RBQ0tfU0laRQkweDAwMDQyOCAvKiBFcnJvciBTdGFjayBTaXplIAkJICAgICovCisjZGVmaW5lIFBJX0VSUl9TVEFUVVMwX0EJMHgwMDA0MzAgLyogRXJyb3IgU3RhdHVzIDBBIAkJICAgICovCisjZGVmaW5lIFBJX0VSUl9TVEFUVVMwX0FfUkNMUgkweDAwMDQzOCAvKiBFcnJvciBTdGF0dXMgMEEgY2xlYXIgb24gcmVhZCAgICovCisjZGVmaW5lIFBJX0VSUl9TVEFUVVMxX0EJMHgwMDA0NDAgLyogRXJyb3IgU3RhdHVzIDFBIAkJICAgICovCisjZGVmaW5lIFBJX0VSUl9TVEFUVVMxX0FfUkNMUgkweDAwMDQ0OCAvKiBFcnJvciBTdGF0dXMgMUEgY2xlYXIgb24gcmVhZCAgICovCisjZGVmaW5lIFBJX0VSUl9TVEFUVVMwX0IJMHgwMDA0NTAgLyogRXJyb3IgU3RhdHVzIDBCIAkJICAgICovCisjZGVmaW5lIFBJX0VSUl9TVEFUVVMwX0JfUkNMUgkweDAwMDQ1OCAvKiBFcnJvciBTdGF0dXMgMEIgY2xlYXIgb24gcmVhZCAgICovCisjZGVmaW5lIFBJX0VSUl9TVEFUVVMxX0IJMHgwMDA0NjAgLyogRXJyb3IgU3RhdHVzIDFCIAkJICAgICovCisjZGVmaW5lIFBJX0VSUl9TVEFUVVMxX0JfUkNMUgkweDAwMDQ2OCAvKiBFcnJvciBTdGF0dXMgMUIgY2xlYXIgb24gcmVhZCAgICovCisjZGVmaW5lIFBJX1NQT09MX0NNUF9BCQkweDAwMDQ3MCAvKiBTcG9vbCBjb21wYXJlIGZvciBDUFUgQSAJICAgICovCisjZGVmaW5lIFBJX1NQT09MX0NNUF9CCQkweDAwMDQ3OCAvKiBTcG9vbCBjb21wYXJlIGZvciBDUFUgQiAJICAgICovCisjZGVmaW5lIFBJX0NSQl9USU1FT1VUX0EJMHgwMDA0ODAgLyogVGltZWQgb3V0IENSQiBlbnRyaWVzIGZvciBBICAgICAqLworI2RlZmluZSBQSV9DUkJfVElNRU9VVF9CCTB4MDAwNDg4IC8qIFRpbWVkIG91dCBDUkIgZW50cmllcyBmb3IgQiAgICAgKi8KKyNkZWZpbmUgUElfU1lTQURfRVJSQ0hLX0VOCTB4MDAwNDkwIC8qIEVuYWJsZXMgU1lTQUQgZXJyb3IgY2hlY2tpbmcgICAgKi8KKyNkZWZpbmUgUElfQkFEX0NIRUNLX0JJVF9BCTB4MDAwNDk4IC8qIEZvcmNlIFNZU0FEIGNoZWNrIGJpdCBlcnJvciAgICAgKi8KKyNkZWZpbmUgUElfQkFEX0NIRUNLX0JJVF9CCTB4MDAwNGEwIC8qIEZvcmNlIFNZU0FEIGNoZWNrIGJpdCBlcnJvciAgICAgKi8KKyNkZWZpbmUgUElfTkFDS19DTlRfQQkJMHgwMDA0YTggLyogQ29uc2VjdXRpdmUgTkFDSyBjb3VudGVyIAkgICAgKi8KKyNkZWZpbmUgUElfTkFDS19DTlRfQgkJMHgwMDA0YjAgLyogCSIJIiBmb3IgQ1BVIEIgCSAgICAqLworI2RlZmluZSBQSV9OQUNLX0NNUAkJMHgwMDA0YjggLyogTkFDSyBjb3VudCBjb21wYXJlCQkgICAgKi8KKyNkZWZpbmUgUElfU1RBQ0tBRERSX09GRlNFVAkoUElfRVJSX1NUQUNLX0FERFJfQiAtIFBJX0VSUl9TVEFDS19BRERSX0EpCisjZGVmaW5lIFBJX0VSUlNUQVRfT0ZGU0VUCShQSV9FUlJfU1RBVFVTMF9CIC0gUElfRVJSX1NUQVRVUzBfQSkKKyNkZWZpbmUgUElfUkRDTFJfT0ZGU0VUCQkoUElfRVJSX1NUQVRVUzBfQV9SQ0xSIC0gUElfRVJSX1NUQVRVUzBfQSkKKworLyogQml0cyBpbiBQSV9FUlJfSU5UX1BFTkQgKi8KKyNkZWZpbmUgUElfRVJSX1NQT09MX0NNUF9CCTB4MDAwMDAwMDEJLyogU3Bvb2wgZW5kIGhpdCBoaWdoIHdhdGVyICovCisjZGVmaW5lIFBJX0VSUl9TUE9PTF9DTVBfQQkweDAwMDAwMDAyCisjZGVmaW5lIFBJX0VSUl9TUFVSX01TR19CCTB4MDAwMDAwMDQJLyogU3B1cmlvdXMgbWVzc2FnZSBpbnRyLiAgICovCisjZGVmaW5lIFBJX0VSUl9TUFVSX01TR19BCTB4MDAwMDAwMDgKKyNkZWZpbmUgUElfRVJSX1dSQl9URVJSX0IJMHgwMDAwMDAxMAkvKiBXUkIgVEVSUgkJICAgICovCisjZGVmaW5lIFBJX0VSUl9XUkJfVEVSUl9BCTB4MDAwMDAwMjAKKyNkZWZpbmUgUElfRVJSX1dSQl9XRVJSX0IJMHgwMDAwMDA0MAkvKiBXUkIgV0VSUiAJCSAgICAqLworI2RlZmluZSBQSV9FUlJfV1JCX1dFUlJfQQkweDAwMDAwMDgwCisjZGVmaW5lIFBJX0VSUl9TWVNTVEFURV9CCTB4MDAwMDAxMDAJLyogU3lzU3RhdGUgcGFyaXR5IGVycm9yICAgICovCisjZGVmaW5lIFBJX0VSUl9TWVNTVEFURV9BCTB4MDAwMDAyMDAKKyNkZWZpbmUgUElfRVJSX1NZU0FEX0RBVEFfQgkweDAwMDAwNDAwCS8qIFN5c0FEIGRhdGEgcGFyaXR5IGVycm9yICAqLworI2RlZmluZSBQSV9FUlJfU1lTQURfREFUQV9BCTB4MDAwMDA4MDAKKyNkZWZpbmUgUElfRVJSX1NZU0FEX0FERFJfQgkweDAwMDAxMDAwCS8qIFN5c0FEIGFkZHIgcGFyaXR5IGVycm9yICAqLworI2RlZmluZSBQSV9FUlJfU1lTQURfQUREUl9BCTB4MDAwMDIwMDAKKyNkZWZpbmUgUElfRVJSX1NZU0NNRF9EQVRBX0IJMHgwMDAwNDAwMAkvKiBTeXNDbWQgZGF0YSBwYXJpdHkgZXJyb3IgKi8KKyNkZWZpbmUgUElfRVJSX1NZU0NNRF9EQVRBX0EJMHgwMDAwODAwMAorI2RlZmluZSBQSV9FUlJfU1lTQ01EX0FERFJfQgkweDAwMDEwMDAwCS8qIFN5c0NtZCBhZGRyIHBhcml0eSBlcnJvciAqLworI2RlZmluZSBQSV9FUlJfU1lTQ01EX0FERFJfQQkweDAwMDIwMDAwCisjZGVmaW5lIFBJX0VSUl9CQURfU1BPT0xfQgkweDAwMDQwMDAwCS8qIEVycm9yIHNwb29saW5nIHRvIG1lbW9yeSAqLworI2RlZmluZSBQSV9FUlJfQkFEX1NQT09MX0EJMHgwMDA4MDAwMAorI2RlZmluZSBQSV9FUlJfVU5DQUNfVU5DT1JSX0IJMHgwMDEwMDAwMAkvKiBVbmNhY2hlZCB1bmNvcnJlY3RhYmxlICAgKi8KKyNkZWZpbmUgUElfRVJSX1VOQ0FDX1VOQ09SUl9BCTB4MDAyMDAwMDAKKyNkZWZpbmUgUElfRVJSX1NZU1NUQVRFX1RBR19CCTB4MDA0MDAwMDAJLyogU3lzU3RhdGUgdGFnIHBhcml0eSBlcnJvciAqLworI2RlZmluZSBQSV9FUlJfU1lTU1RBVEVfVEFHX0EJMHgwMDgwMDAwMAorI2RlZmluZSBQSV9FUlJfTURfVU5DT1JSCTB4MDEwMDAwMDAJLyogTXVzdCBiZSBjbGVhcmVkIGluIE1EICAgICovCisKKyNkZWZpbmUgUElfRVJSX0NMRUFSX0FMTF9BCTB4MDBhYWFhYWEKKyNkZWZpbmUgUElfRVJSX0NMRUFSX0FMTF9CCTB4MDA1NTU1NTUKKworCisvKgorICogVGhlIGZvbGxvd2luZyB0aHJlZSBtYWNyb3MgZGVmaW5lIGFsbCBwb3NzaWJsZSBlcnJvciBpbnQgcGVuZHMuCisgKi8KKworI2RlZmluZSBQSV9GQVRBTF9FUlJfQ1BVX0EJKFBJX0VSUl9TWVNTVEFURV9UQUdfQSAJfCBcCisJCQkJIFBJX0VSUl9CQURfU1BPT0xfQSAJfCBcCisJCQkJIFBJX0VSUl9TWVNDTURfQUREUl9BIAl8IFwKKwkJCQkgUElfRVJSX1NZU0NNRF9EQVRBX0EgCXwgXAorCQkJCSBQSV9FUlJfU1lTQURfQUREUl9BIAl8IFwKKwkJCQkgUElfRVJSX1NZU0FEX0RBVEFfQQl8IFwKKwkJCQkgUElfRVJSX1NZU1NUQVRFX0EpCisKKyNkZWZpbmUgUElfTUlTQ19FUlJfQ1BVX0EJKFBJX0VSUl9VTkNBQ19VTkNPUlJfQSAJfCBcCisJCQkJIFBJX0VSUl9XUkJfV0VSUl9BIAl8IFwKKwkJCQkgUElfRVJSX1dSQl9URVJSX0EgCXwgXAorCQkJCSBQSV9FUlJfU1BVUl9NU0dfQSAJfCBcCisJCQkJIFBJX0VSUl9TUE9PTF9DTVBfQSkKKworI2RlZmluZSBQSV9GQVRBTF9FUlJfQ1BVX0IJKFBJX0VSUl9TWVNTVEFURV9UQUdfQiAJfCBcCisJCQkJIFBJX0VSUl9CQURfU1BPT0xfQiAJfCBcCisJCQkJIFBJX0VSUl9TWVNDTURfQUREUl9CIAl8IFwKKwkJCQkgUElfRVJSX1NZU0NNRF9EQVRBX0IgCXwgXAorCQkJCSBQSV9FUlJfU1lTQURfQUREUl9CIAl8IFwKKwkJCQkgUElfRVJSX1NZU0FEX0RBVEFfQgl8IFwKKwkJCQkgUElfRVJSX1NZU1NUQVRFX0IpCisKKyNkZWZpbmUgUElfTUlTQ19FUlJfQ1BVX0IgCShQSV9FUlJfVU5DQUNfVU5DT1JSX0IgIHwgXAorCQkJCSBQSV9FUlJfV1JCX1dFUlJfQiAJfCBcCisJCQkJIFBJX0VSUl9XUkJfVEVSUl9CIAl8IFwKKwkJCQkgUElfRVJSX1NQVVJfTVNHX0IgCXwgXAorCQkJCSBQSV9FUlJfU1BPT0xfQ01QX0IpCisKKyNkZWZpbmUgUElfRVJSX0dFTkVSSUMJKFBJX0VSUl9NRF9VTkNPUlIpCisKKy8qCisgKiBFcnJvciB0eXBlcyBmb3IgUElfRVJSX1NUQVRVUzBfW0FCXSBhbmQgZXJyb3Igc3RhY2s6CisgKiBVc2UgdGhlIHdyaXRlIHR5cGVzIGlmIFdSQlJSQiBpcyAxIGVsc2UgdXNlIHRoZSByZWFkIHR5cGVzCisgKi8KKworLyogRmllbGRzIGluIFBJX0VSUl9TVEFUVVMwX1tBQl0gKi8KKyNkZWZpbmUgUElfRVJSX1NUMF9UWVBFX01BU0sJMHgwMDAwMDAwMDAwMDAwMDA3CisjZGVmaW5lIFBJX0VSUl9TVDBfVFlQRV9TSEZUCTAKKyNkZWZpbmUgUElfRVJSX1NUMF9SRVFOVU1fTUFTSwkweDAwMDAwMDAwMDAwMDAwMzgKKyNkZWZpbmUgUElfRVJSX1NUMF9SRVFOVU1fU0hGVAkzCisjZGVmaW5lIFBJX0VSUl9TVDBfU1VQUExfTUFTSwkweDAwMDAwMDAwMDAwMWZmYzAKKyNkZWZpbmUgUElfRVJSX1NUMF9TVVBQTF9TSEZUCTYKKyNkZWZpbmUgUElfRVJSX1NUMF9DTURfTUFTSwkweDAwMDAwMDAwMDFmZTAwMDAKKyNkZWZpbmUgUElfRVJSX1NUMF9DTURfU0hGVAkxNworI2RlZmluZSBQSV9FUlJfU1QwX0FERFJfTUFTSwkweDNmZmZmZmZmZmUwMDAwMDAKKyNkZWZpbmUgUElfRVJSX1NUMF9BRERSX1NIRlQJMjUKKyNkZWZpbmUgUElfRVJSX1NUMF9PVkVSUlVOX01BU0sJMHg0MDAwMDAwMDAwMDAwMDAwCisjZGVmaW5lIFBJX0VSUl9TVDBfT1ZFUlJVTl9TSEZUCTYyCisjZGVmaW5lIFBJX0VSUl9TVDBfVkFMSURfTUFTSwkweDgwMDAwMDAwMDAwMDAwMDAKKyNkZWZpbmUgUElfRVJSX1NUMF9WQUxJRF9TSEZUCTYzCisKKy8qIEZpZWxkcyBpbiBQSV9FUlJfU1RBVFVTMV9bQUJdICovCisjZGVmaW5lIFBJX0VSUl9TVDFfU1BPT0xfTUFTSwkweDAwMDAwMDAwMDAxZmZmZmYKKyNkZWZpbmUgUElfRVJSX1NUMV9TUE9PTF9TSEZUCTAKKyNkZWZpbmUgUElfRVJSX1NUMV9UT1VUQ05UX01BU0sJMHgwMDAwMDAwMDFmZTAwMDAwCisjZGVmaW5lIFBJX0VSUl9TVDFfVE9VVENOVF9TSEZUCTIxCisjZGVmaW5lIFBJX0VSUl9TVDFfSU5WQ05UX01BU0sJMHgwMDAwMDA3ZmUwMDAwMDAwCisjZGVmaW5lIFBJX0VSUl9TVDFfSU5WQ05UX1NIRlQJMjkKKyNkZWZpbmUgUElfRVJSX1NUMV9DUkJOVU1fTUFTSwkweDAwMDAwMzgwMDAwMDAwMDAKKyNkZWZpbmUgUElfRVJSX1NUMV9DUkJOVU1fU0hGVAkzOQorI2RlZmluZSBQSV9FUlJfU1QxX1dSQlJSQl9NQVNLCTB4MDAwMDA0MDAwMDAwMDAwMAorI2RlZmluZSBQSV9FUlJfU1QxX1dSQlJSQl9TSEZUCTQyCisjZGVmaW5lIFBJX0VSUl9TVDFfQ1JCU1RBVF9NQVNLCTB4MDAxZmY4MDAwMDAwMDAwMAorI2RlZmluZSBQSV9FUlJfU1QxX0NSQlNUQVRfU0hGVAk0MworI2RlZmluZSBQSV9FUlJfU1QxX01TR1NSQ19NQVNLCTB4ZmZlMDAwMDAwMDAwMDAwMAorI2RlZmluZSBQSV9FUlJfU1QxX01TR1NSQ19TSEZUCTUzCisKKy8qIEZpZWxkcyBpbiB0aGUgZXJyb3Igc3RhY2sgKi8KKyNkZWZpbmUgUElfRVJSX1NUS19UWVBFX01BU0sJMHgwMDAwMDAwMDAwMDAwMDAzCisjZGVmaW5lIFBJX0VSUl9TVEtfVFlQRV9TSEZUCTAKKyNkZWZpbmUgUElfRVJSX1NUS19TVVBQTF9NQVNLCTB4MDAwMDAwMDAwMDAwMDAzOAorI2RlZmluZSBQSV9FUlJfU1RLX1NVUFBMX1NIRlQJMworI2RlZmluZSBQSV9FUlJfU1RLX1JFUU5VTV9NQVNLCTB4MDAwMDAwMDAwMDAwMDFjMAorI2RlZmluZSBQSV9FUlJfU1RLX1JFUU5VTV9TSEZUCTYKKyNkZWZpbmUgUElfRVJSX1NUS19DUkJOVU1fTUFTSwkweDAwMDAwMDAwMDAwMDBlMDAKKyNkZWZpbmUgUElfRVJSX1NUS19DUkJOVU1fU0hGVAk5CisjZGVmaW5lIFBJX0VSUl9TVEtfV1JCUlJCX01BU0sJMHgwMDAwMDAwMDAwMDAxMDAwCisjZGVmaW5lIFBJX0VSUl9TVEtfV1JCUlJCX1NIRlQJMTIKKyNkZWZpbmUgUElfRVJSX1NUS19DUkJTVEFUX01BU0sJMHgwMDAwMDAwMDAwN2ZlMDAwCisjZGVmaW5lIFBJX0VSUl9TVEtfQ1JCU1RBVF9TSEZUCTEzCisjZGVmaW5lIFBJX0VSUl9TVEtfQ01EX01BU0sJMHgwMDAwMDAwMDdmODAwMDAwCisjZGVmaW5lIFBJX0VSUl9TVEtfQ01EX1NIRlQJMjMKKyNkZWZpbmUgUElfRVJSX1NUS19BRERSX01BU0sJMHhmZmZmZmZmZjgwMDAwMDAwCisjZGVmaW5lIFBJX0VSUl9TVEtfQUREUl9TSEZUCTMxCisKKy8qIEVycm9yIHR5cGUgaW4gdGhlIGVycm9yIHN0YXR1cyBvciBzdGFjayBvbiBSZWFkIENSQnMgKi8KKyNkZWZpbmUgUElfRVJSX1JEX1BSRVJSCQkxCisjZGVmaW5lIFBJX0VSUl9SRF9ERVJSCQkyCisjZGVmaW5lIFBJX0VSUl9SRF9URVJSCQkzCisKKy8qIEVycm9yIHR5cGUgaW4gdGhlIGVycm9yIHN0YXR1cyBvciBzdGFjayBvbiBXcml0ZSBDUkJzICovCisjZGVmaW5lIFBJX0VSUl9XUl9XRVJSCQkwCisjZGVmaW5lIFBJX0VSUl9XUl9QV0VSUgkJMQorI2RlZmluZSBQSV9FUlJfV1JfVEVSUgkJMworCisvKiBSZWFkIG9yIFdyaXRlIENSQiBpbiBlcnJvciBzdGF0dXMgb3Igc3RhY2sgKi8KKyNkZWZpbmUgUElfRVJSX1JSQgkwCisjZGVmaW5lIFBJX0VSUl9XUkIJMQorI2RlZmluZSBQSV9FUlJfQU5ZX0NSQgkyCisKKy8qIEFkZHJlc3MgbWFza3MgaW4gdGhlIGVycm9yIHN0YXR1cyBhbmQgZXJyb3Igc3RhY2sgYXJlIG5vdCB0aGUgc2FtZSAqLworI2RlZmluZSBFUlJfU1RLX0FERFJfU0hGVAk3CisjZGVmaW5lIEVSUl9TVEFUMF9BRERSX1NIRlQJMworCisjZGVmaW5lIFBJX01JTl9TVEFDS19TSVpFIDQwOTYJLyogRm9yIGZpZ3VyaW5nIG91dCB0aGUgc2l6ZSB0byBzZXQgKi8KKyNkZWZpbmUgUElfU1RBQ0tfU0laRV9TSEZUCTEyCS8qIDRrICovCisKKyNkZWZpbmUgRVJSX1NUQUNLX1NJWkVfQllURVMoX3N6KSBcCisgICAgICAgKChfc3opID8gKFBJX01JTl9TVEFDS19TSVpFIDw8ICgoX3N6KSAtIDEpKSA6IDApCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisvKgorICogZm9ybWF0IG9mIGVycm9yIHN0YWNrIGFuZCBlcnJvciBzdGF0dXMgcmVnaXN0ZXJzLgorICovCisKK3N0cnVjdCBlcnJfc3RhY2tfZm9ybWF0IHsKKwl1NjQJc2tfYWRkcgkgICA6IDMzLCAgIC8qIGFkZHJlc3MgKi8KKwkJc2tfY21kCSAgIDogIDgsICAgLyogbWVzc2FnZSBjb21tYW5kICovCisJCXNrX2NyYl9zdHMgOiAxMCwgICAvKiBzdGF0dXMgZnJvbSBSUkIgb3IgV1JCICovCisJCXNrX3J3X3JiICAgOiAgMSwgICAvKiBSUkIgPT0gMCwgV1JCID09IDEgKi8KKwkJc2tfY3JiX251bSA6ICAzLCAgIC8qIFdSQiAoMCB0byA3KSBvciBSUkIgKDAgdG8gNCkgKi8KKwkJc2tfdDVfcmVxICA6ICAzLCAgIC8qIFJSQiBUNSByZXF1ZXN0IG51bWJlciAqLworCQlza19zdXBwbCAgIDogIDMsICAgLyogbG93ZXN0IDMgYml0IG9mIHN1cHBsZW1lbnRhbCAqLworCQlza19lcnJfdHlwZTogIDM7ICAgLyogZXJyb3IgdHlwZQkqLworfTsKKwordHlwZWRlZiB1bmlvbiBwaV9lcnJfc3RhY2sgeworCXU2NAlwaV9zdGtfd29yZDsKKwlzdHJ1Y3QJZXJyX3N0YWNrX2Zvcm1hdCBwaV9zdGtfZm10OworfSBwaV9lcnJfc3RhY2tfdDsKKworc3RydWN0IGVycl9zdGF0dXMwX2Zvcm1hdCB7CisJdTY0CXMwX3ZhbGlkICAgOiAgMSwgICAvKiBWYWxpZCAqLworCQlzMF9vdnJfcnVuIDogIDEsICAgLyogT3ZlcnJ1biwgc3Bvb2xlZCB0byBtZW1vcnkgKi8KKwkJczBfYWRkcgkgICA6IDM3LCAgIC8qIGFkZHJlc3MgKi8KKwkJczBfY21kCSAgIDogIDgsICAgLyogbWVzc2FnZSBjb21tYW5kICovCisJCXMwX3N1cGwJICAgOiAxMSwgICAvKiBtZXNzYWdlIHN1cHBsZW1lbnRhbCBmaWVsZCAqLworCQlzMF90NV9yZXEgIDogIDMsICAgLyogUlJCIFQ1IHJlcXVlc3QgbnVtYmVyICovCisJCXMwX2Vycl90eXBlOiAgMzsgICAvKiBlcnJvciB0eXBlICovCit9OworCit0eXBlZGVmIHVuaW9uIHBpX2Vycl9zdGF0MCB7CisJdTY0CXBpX3N0YXQwX3dvcmQ7CisJc3RydWN0IGVycl9zdGF0dXMwX2Zvcm1hdCBwaV9zdGF0MF9mbXQ7Cit9IHBpX2Vycl9zdGF0MF90OworCitzdHJ1Y3QgZXJyX3N0YXR1czFfZm9ybWF0IHsKKwl1NjQJczFfc3JjCSAgIDogMTEsICAgLyogbWVzc2FnZSBzb3VyY2UgKi8KKwkJczFfY3JiX3N0cyA6IDEwLCAgIC8qIHN0YXR1cyBmcm9tIFJSQiBvciBXUkIgKi8KKwkJczFfcndfcmIgICA6ICAxLCAgIC8qIFJSQiA9PSAwLCBXUkIgPT0gMSAqLworCQlzMV9jcmJfbnVtIDogIDMsICAgLyogV1JCICgwIHRvIDcpIG9yIFJSQiAoMCB0byA0KSAqLworCQlzMV9pbnZhbF9jbnQ6MTAsICAgLyogc2lnbmVkIGludmFsaWRhdGUgY291bnRlciBSUkIgKi8KKwkJczFfdG9fY250ICA6ICA4LCAgIC8qIGNyYiB0aW1lb3V0IGNvdW50ZXIgKi8KKwkJczFfc3BsX2NudCA6IDIxOyAgIC8qIG51bWJlciBzcG9vbGVkIHRvIG1lbW9yeSAqLworfTsKKwordHlwZWRlZiB1bmlvbiBwaV9lcnJfc3RhdDEgeworCXU2NAlwaV9zdGF0MV93b3JkOworCXN0cnVjdCBlcnJfc3RhdHVzMV9mb3JtYXQgcGlfc3RhdDFfZm10OworfSBwaV9lcnJfc3RhdDFfdDsKKwordHlwZWRlZiB1NjQJcnRjX3RpbWVfdDsKKworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKworCisvKiBCaXRzIGluIFBJX1NZU0FEX0VSUkNIS19FTiAqLworI2RlZmluZSBQSV9TWVNBRF9FUlJDSEtfRUNDR0VOCTB4MDEJLyogRW5hYmxlIEVDQyBnZW5lcmF0aW9uCSAgICAqLworI2RlZmluZSBQSV9TWVNBRF9FUlJDSEtfUVVBTEdFTgkweDAyCS8qIEVuYWJsZSBkYXRhIHF1YWxpdHkgc2lnbmFsIGdlbi4gICovCisjZGVmaW5lIFBJX1NZU0FEX0VSUkNIS19TQURQCTB4MDQJLyogRW5hYmxlIFN5c0FEIHBhcml0eSBjaGVja2luZyAgICAgKi8KKyNkZWZpbmUgUElfU1lTQURfRVJSQ0hLX0NNRFAJMHgwOAkvKiBFbmFibGUgU3lzQ21kIHBhcml0eSBjaGVja2luZyAgICAqLworI2RlZmluZSBQSV9TWVNBRF9FUlJDSEtfU1RBVEUJMHgxMAkvKiBFbmFibGUgU3lzU3RhdGUgcGFyaXR5IGNoZWNraW5nICAqLworI2RlZmluZSBQSV9TWVNBRF9FUlJDSEtfUVVBTAkweDIwCS8qIEVuYWJsZSBkYXRhIHF1YWxpdHkgY2hlY2tpbmcgICAgICovCisjZGVmaW5lIFBJX1NZU0FEX0NIRUNLX0FMTAkweDNmCS8qIEdlbmVyYXRlIGFuZCBjaGVjayBhbGwgc2lnbmFscy4gICovCisKKy8qIEludGVycnVwdCBwZW5kaW5nIGJpdHMgb24gUjEwMDAwICovCisKKyNkZWZpbmUgSFVCX0lQX1BFTkQwCQkweDA0MDAKKyNkZWZpbmUgSFVCX0lQX1BFTkQxX0NDCQkweDA4MDAKKyNkZWZpbmUgSFVCX0lQX1JUCQkweDEwMDAKKyNkZWZpbmUgSFVCX0lQX1BST0YJCTB4MjAwMAorI2RlZmluZSBIVUJfSVBfRVJST1IJCTB4NDAwMAorI2RlZmluZSBIVUJfSVBfTUFTSwkJMHg3YzAwCisKKy8qIFBJX1JUX0xPQ0FMX0NUUkwgbWFzayBhbmQgc2hpZnQgZGVmaW5pdGlvbnMgKi8KKworI2RlZmluZSBQUkxDX1VTRV9JTlRfU0hGVAkxNgorI2RlZmluZSBQUkxDX1VTRV9JTlRfTUFTSwkoVUlOVDY0X0NBU1QgMSA8PCAxNikKKyNkZWZpbmUgUFJMQ19VU0VfSU5UCQkoVUlOVDY0X0NBU1QgMSA8PCAxNikKKyNkZWZpbmUgUFJMQ19HQ0xLX1NIRlQJCTE1CisjZGVmaW5lIFBSTENfR0NMS19NQVNLCQkoVUlOVDY0X0NBU1QgMSA8PCAxNSkKKyNkZWZpbmUgUFJMQ19HQ0xLCQkoVUlOVDY0X0NBU1QgMSA8PCAxNSkKKyNkZWZpbmUgUFJMQ19HQ0xLX0NPVU5UX1NIRlQJOAorI2RlZmluZSBQUkxDX0dDTEtfQ09VTlRfTUFTSwkoVUlOVDY0X0NBU1QgMHg3ZiA8PCA4KQorI2RlZmluZSBQUkxDX01BWF9DT1VOVF9TSEZUCTEKKyNkZWZpbmUgUFJMQ19NQVhfQ09VTlRfTUFTSwkoVUlOVDY0X0NBU1QgMHg3ZiA8PCAxKQorI2RlZmluZSBQUkxDX0dDTEtfRU5fU0hGVAkwCisjZGVmaW5lIFBSTENfR0NMS19FTl9NQVNLCShVSU5UNjRfQ0FTVCAxKQorI2RlZmluZSBQUkxDX0dDTEtfRU4JCShVSU5UNjRfQ0FTVCAxKQorCisvKiBQSV9SVF9GSUxURVJfQ1RSTCBtYXNrIGFuZCBzaGlmdCBkZWZpbml0aW9ucyAqLworCisjaWYgMAorLyoKKyAqIFhYWCAtIFRoaXMgcmVnaXN0ZXIncyBkZWZpbml0aW9uIGhhcyBjaGFuZ2VkLCBidXQgaXQncyBvbmx5IGltcGxlbWVudGVkCisgKiBpbiBIdWIgMi4KKyAqLworI2RlZmluZSBQUkZDX0RST1BfQ09VTlRfU0hGVAkyNworI2RlZmluZSBQUkZDX0RST1BfQ09VTlRfTUFTSwkoVUlOVDY0X0NBU1QgMHgzZmYgPDwgMjcpCisjZGVmaW5lIFBSRkNfRFJPUF9DVFJfU0hGVAkxOAorI2RlZmluZSBQUkZDX0RST1BfQ1RSX01BU0sJKFVJTlQ2NF9DQVNUIDB4MWZmIDw8IDE4KQorI2RlZmluZSBQUkZDX01BU0tfRU5BQkxFX1NIRlQJMTAKKyNkZWZpbmUgUFJGQ19NQVNLX0VOQUJMRV9NQVNLCShVSU5UNjRfQ0FTVCAweDdmIDw8IDEwKQorI2RlZmluZSBQUkZDX01BU0tfQ1RSX1NIRlQJMgorI2RlZmluZSBQUkZDX01BU0tfQ1RSX01BU0sJKFVJTlQ2NF9DQVNUIDB4ZmYgPDwgMikKKyNkZWZpbmUgUFJGQ19PRkZTRVRfU0hGVAkwCisjZGVmaW5lIFBSRkNfT0ZGU0VUX01BU0sJKFVJTlQ2NF9DQVNUIDMpCisjZW5kaWYgLyogMCAqLworCisKKy8qCisgKiBCaXRzIGZvciBOQUNLX0NOVF9BL0IgYW5kIE5BQ0tfQ01QCisgKi8KKyNkZWZpbmUgUElfTkFDS19DTlRfRU5fU0hGVAkyMAorI2RlZmluZSBQSV9OQUNLX0NOVF9FTl9NQVNLCTB4MTAwMDAwCisjZGVmaW5lIFBJX05BQ0tfQ05UX01BU0sJMHgwZmZmZmYKKyNkZWZpbmUgUElfTkFDS19DTlRfTUFYCQkweDBmZmZmZgorCisjZW5kaWYgLyogX0FTTV9TTl9TTjBfSFVCUElfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zbi9zbjAvaXAyNy5oIGIvaW5jbHVkZS9hc20tbWlwcy9zbi9zbjAvaXAyNy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkZTBlOTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NuL3NuMC9pcDI3LmgKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIERlcml2ZWQgZnJvbSBJUklYIDxzeXMvU04vU04wL0lQMjcuaD4uCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkyIC0gMTk5NywgMTk5OSBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgYnkgUmFsZiBCYWVjaGxlCisgKi8KKyNpZm5kZWYgX0FTTV9TTl9TTjBfSVAyN19ICisjZGVmaW5lIF9BU01fU05fU04wX0lQMjdfSAorCisjaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+CisKKy8qCisgKiBTaW1wbGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBtYXNrcyB3aGljaCByZW1vdmUgU1cgYml0cyBmcm9tIHB0ZS4KKyAqLworCisjZGVmaW5lIFRMQkxPX0hXQklUU0hJRlQJMAkJLyogU2hpZnQgdmFsdWUsIGZvciBtYXNraW5nICovCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNkZWZpbmUgQ0FVU0VfQkVSUklOVFIgCQlJRV9JUlE1CisKKyNkZWZpbmUgRUNDRl9DQUNIRV9FUlIgIDAKKyNkZWZpbmUgRUNDRl9UQUdMTyAgICAgIDEKKyNkZWZpbmUgRUNDRl9FQ0MgICAgICAgIDIKKyNkZWZpbmUgRUNDRl9FUlJPUkVQQyAgIDMKKyNkZWZpbmUgRUNDRl9QQUREUiAgICAgIDQKKyNkZWZpbmUgRUNDRl9TSVpFICAgICAgICg1ICogc2l6ZW9mKGxvbmcpKQorCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisjaWZkZWYgX19BU1NFTUJMWV9fCisKKy8qCisgKiBLTF9HRVRfQ1BVTlVNIChzaW1pbGFyIHRvIEVWX0dFVF9TUE5VTSBmb3IgRVZFUkVTVCBwbGF0Zm9ybSkgcmVhZHMKKyAqIHRoZSBwcm9jZXNzb3IgbnVtYmVyIG9mIHRoZSBjYWxsaW5nIHByb2Nlc3Nvci4gIFRoZSBwcm9jIHBhcmFtZXRlcnMKKyAqIG11c3QgYmUgYSByZWdpc3Rlci4KKyAqLworI2RlZmluZSBLTF9HRVRfQ1BVTlVNKHByb2MpIAkJCQlcCisJZGxpCXByb2MsIExPQ0FMX0hVQigwKTsgCQkJXAorCWxkCXByb2MsIFBJX0NQVV9OVU0ocHJvYykKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisvKgorICogUjEwMDAwIHN0YXR1cyByZWdpc3RlciBpbnRlcnJ1cHQgYml0IG1hc2sgdXNhZ2UgZm9yIElQMjcuCisgKi8KKyNkZWZpbmUgU1JCX1NXVElNTwlJRV9TVzAJCS8qIDB4MDEwMCAqLworI2RlZmluZSBTUkJfTkVUCQlJRV9TVzEJCS8qIDB4MDIwMCAqLworI2RlZmluZSBTUkJfREVWMAlJRV9JUlEwCQkvKiAweDA0MDAgKi8KKyNkZWZpbmUgU1JCX0RFVjEJSUVfSVJRMQkJLyogMHgwODAwICovCisjZGVmaW5lIFNSQl9USU1PQ0xLCUlFX0lSUTIJCS8qIDB4MTAwMCAqLworI2RlZmluZSBTUkJfUFJPRkNMSwlJRV9JUlEzCQkvKiAweDIwMDAgKi8KKyNkZWZpbmUgU1JCX0VSUgkJSUVfSVJRNAkJLyogMHg0MDAwICovCisjZGVmaW5lIFNSQl9TQ0hFRENMSwlJRV9JUlE1CQkvKiAweDgwMDAgKi8KKworI2RlZmluZSBTUl9JQklUX0hJCVNSQl9ERVYwCisjZGVmaW5lIFNSX0lCSVRfUFJPRglTUkJfUFJPRkNMSworCisjZGVmaW5lIFNSQl9TV1RJTU9fSURYCQkwCisjZGVmaW5lIFNSQl9ORVRfSURYCQkxCisjZGVmaW5lIFNSQl9ERVYwX0lEWAkJMgorI2RlZmluZSBTUkJfREVWMV9JRFgJCTMKKyNkZWZpbmUgU1JCX1RJTU9DTEtfSURYCQk0CisjZGVmaW5lIFNSQl9QUk9GQ0xLX0lEWAkJNQorI2RlZmluZSBTUkJfRVJSX0lEWAkJNgorI2RlZmluZSBTUkJfU0NIRURDTEtfSURYCTcKKworI2RlZmluZSBOVU1fQ0FVU0VfSU5UUlMJCTgKKworI2RlZmluZSBTQ0FDSEVfTElORVNJWkUJMTI4CisjZGVmaW5lIFNDQUNIRV9MSU5FTUFTSwkoU0NBQ0hFX0xJTkVTSVpFIC0gMSkKKworI2luY2x1ZGUgPGFzbS9zbi9hZGRycy5oPgorCisjZGVmaW5lIExFRF9DWUNMRV9NQVNLICAweDBmCisjZGVmaW5lIExFRF9DWUNMRV9TSEZUICA0CisKKyNkZWZpbmUgU0VORF9OTUkoX25hc2lkLCBfc2xpY2UpCVwKKyAgICAgICAgICBSRU1PVEVfSFVCX1MoKF9uYXNpZCksICAoUElfTk1JX0EgKyAoKF9zbGljZSkgKiBQSV9OTUlfT0ZGU0VUKSksIDEpCisKKy8qIFNhbml0eSBoYXp6YXJkIC4uLiAgQmVsb3cgYWxsIHRoZSBPcmlnaW4gaGFja3MgYXJlIGZvbGxvd2luZy4gICovCisKKyNkZWZpbmUgU04wMF9CUklER0UJCTB4OTIwMDAwMDAwODAwMDAwMAorI2RlZmluZSBTTjAwSV9CUklER0UwCQkweDkyMDAwMDAwMGIwMDAwMDAKKyNkZWZpbmUgU04wMElfQlJJREdFMQkJMHg5MjAwMDAwMDBlMDAwMDAwCisjZGVmaW5lIFNOMDBJX0JSSURHRTIJCTB4OTIwMDAwMDAwZjAwMDAwMAorCisjZW5kaWYgLyogX0FTTV9TTl9TTjBfSVAyN19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NuL3NuMC9zbjBfZnJ1LmggYi9pbmNsdWRlL2FzbS1taXBzL3NuL3NuMC9zbjBfZnJ1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJjNjM3NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc24vc24wL3NuMF9mcnUuaApAQCAtMCwwICsxLDQ0IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogRGVyaXZlZCBmcm9tIElSSVggPHN5cy9TTi9TTjAvc24wX2ZydS5oPgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5MiAtIDE5OTcsIDE5OTkgU2lsY29uIEdyYXBoaWNzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgUmFsZiBCYWVjaGxlIChyYWxmQGdudS5vcmcpCisgKi8KKyNpZm5kZWYgX0FTTV9TTl9TTjBfU04wX0ZSVV9ICisjZGVmaW5lIF9BU01fU05fU04wX1NOMF9GUlVfSAorCisjZGVmaW5lIE1BWF9ESU1NUwkJCTgJIC8qIG1heCAjIG9mIGRpbW0gYmFua3MgKi8KKyNkZWZpbmUgTUFYX1BDSURFVgkJCTgJIC8qIG1heCAjIG9mIHBjaSBkZXZpY2VzIG9uIGEgcGNpIGJ1cyAqLworCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgY29uZmlkZW5jZV90OworCit0eXBlZGVmIHN0cnVjdCBrZl9tZW1fcyB7CisJY29uZmlkZW5jZV90IGttX2NvbmZpZGVuY2U7IC8qIGNvbmZpZGVuY2UgbGV2ZWwgdGhhdCB0aGUgbWVtb3J5IGlzIGJhZAorCQkJCSAgICAgKiBpcyB0aGlzIG5lY2Vzc2FyeSA/CisJCQkJICAgICAqLworCWNvbmZpZGVuY2VfdCBrbV9kaW1tW01BWF9ESU1NU107CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbmZpZGVuY2UgbGV2ZWwgdGhhdCBkaW1tW2ldIGlzIGJhZAorCQkJCSAgICAgKkkgdGhpbmsgdGhpcyBpcyB0aGUgcmlnaHQgbnVtYmVyCisJCQkJICAgICAqLworCit9IGtmX21lbV90OworCit0eXBlZGVmIHN0cnVjdCBrZl9jcHVfcyB7CisJY29uZmlkZW5jZV90ICAJa2NfY29uZmlkZW5jZTsgLyogY29uZmlkZW5jZSBsZXZlbCB0aGF0IGNwdSBpcyBiYWQgKi8KKwljb25maWRlbmNlX3QgIAlrY19pY2FjaGU7IC8qIGNvbmZpZGVuY2UgbGV2ZWwgdGhhdCBpbnN0ci4gY2FjaGUgaXMgYmFkICovCisJY29uZmlkZW5jZV90ICAJa2NfZGNhY2hlOyAvKiBjb25maWRlbmNlIGxldmVsIHRoYXQgZGF0YSAgIGNhY2hlIGlzIGJhZCAqLworCWNvbmZpZGVuY2VfdCAgCWtjX3NjYWNoZTsgLyogY29uZmlkZW5jZSBsZXZlbCB0aGF0IHNlYy4gICBjYWNoZSBpcyBiYWQgKi8KKwljb25maWRlbmNlX3QJa2Nfc3lzYnVzOyAvKiBjb25maWRlbmNlIGxldmVsIHRoYXQgc3lzYWQvY21kL3N0YXRlIGJ1cyBpcyBiYWQgKi8KK30ga2ZfY3B1X3Q7CisKK3R5cGVkZWYgc3RydWN0IGtmX3BjaV9idXNfcyB7CisJY29uZmlkZW5jZV90CWtwYl9iZWxpZWY7CS8qIGNvbmZpZGVuY2UgbGV2ZWwgIHRoYXQgdGhlICBwY2kgYnVzIGlzIGJhZCAqLworCWNvbmZpZGVuY2VfdAlrcGJfcGNpZGV2X2JlbGllZltNQVhfUENJREVWXTsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbmZpZGVuY2UgbGV2ZWwgdGhhdCB0aGUgcGNpIGRldiBpcyBiYWQgKi8KK30ga2ZfcGNpX2J1c190OworCisjZW5kaWYgLyogX0FTTV9TTl9TTjBfU04wX0ZSVV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NuL3NuX3ByaXZhdGUuaCBiL2luY2x1ZGUvYXNtLW1pcHMvc24vc25fcHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMmMzMDIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NuL3NuX3ByaXZhdGUuaApAQCAtMCwwICsxLDE5IEBACisjaWZuZGVmIF9fQVNNX1NOX1NOX1BSSVZBVEVfSAorI2RlZmluZSBfX0FTTV9TTl9TTl9QUklWQVRFX0gKKworI2luY2x1ZGUgPGFzbS9zbi90eXBlcy5oPgorCitleHRlcm4gbmFzaWRfdCBtYXN0ZXJfbmFzaWQ7CisKK2V4dGVybiB2b2lkIGNwdV9ub2RlX3Byb2JlKHZvaWQpOworZXh0ZXJuIGNub2RlaWRfdCBnZXRfY29tcGFjdF9ub2RlaWQodm9pZCk7CitleHRlcm4gdm9pZCBodWJfcnRjX2luaXQoY25vZGVpZF90KTsKK2V4dGVybiB2b2lkIGNwdV90aW1lX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBwZXJfY3B1X2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBpbnN0YWxsX2NwdV9ubWlfaGFuZGxlcihpbnQgc2xpY2UpOworZXh0ZXJuIHZvaWQgaW5zdGFsbF9pcGkodm9pZCk7CitleHRlcm4gdm9pZCBzZXR1cF9yZXBsaWNhdGlvbl9tYXNrKHZvaWQpOworZXh0ZXJuIHZvaWQgcmVwbGljYXRlX2tlcm5lbF90ZXh0KHZvaWQpOworZXh0ZXJuIHBmbl90IG5vZGVfZ2V0Zmlyc3RmcmVlKGNub2RlaWRfdCk7CisKKyNlbmRpZiAvKiBfX0FTTV9TTl9TTl9QUklWQVRFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc24vdHlwZXMuaCBiL2luY2x1ZGUvYXNtLW1pcHMvc24vdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGQwYmIyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zbi90eXBlcy5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgU2lsaWNvbiBHcmFwaGljcywgSW5jLgorICogQ29weXJpZ2h0IChDKSAxOTk5IGJ5IFJhbGYgQmFlY2hsZQorICovCisjaWZuZGVmIF9BU01fU05fVFlQRVNfSAorI2RlZmluZSBfQVNNX1NOX1RZUEVTX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyAJY3B1aWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZwljbm9kZW1hc2tfdDsKK3R5cGVkZWYgc2lnbmVkIHNob3J0CW5hc2lkX3Q7CS8qIG5vZGUgaWQgaW4gbnVtYS1hcy1pZCBzcGFjZSAqLwordHlwZWRlZiBzaWduZWQgc2hvcnQJY25vZGVpZF90OwkvKiBub2RlIGlkIGluIGNvbXBhY3QtaWQgc3BhY2UgKi8KK3R5cGVkZWYgc2lnbmVkIGNoYXIJcGFydGlkX3Q7CS8qIHBhcnRpdGlvbiBJRCB0eXBlICovCit0eXBlZGVmIHNpZ25lZCBzaG9ydAltb2R1bGVpZF90OwkvKiB1c2VyLXZpc2libGUgbW9kdWxlIG51bWJlciB0eXBlICovCit0eXBlZGVmIHNpZ25lZCBzaG9ydAljbW9kdWxlaWRfdDsJLyoga2VybmVsIGNvbXBhY3QgbW9kdWxlIGlkIHR5cGUgKi8KK3R5cGVkZWYgdW5zaWduZWQgY2hhcgljbHVzdGVyaWRfdDsJLyogQ2x1c3RlcmlkIG9mIHRoZSBjZWxsICovCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgCXBmbl90OworCit0eXBlZGVmIGRldl90CQl2ZXJ0ZXhfaGRsX3Q7CS8qIGhhcmR3YXJlIGdyYXBoIHZlcnRleCBoYW5kbGUgKi8KKworI2VuZGlmIC8qIF9BU01fU05fVFlQRVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zbmkuaCBiL2luY2x1ZGUvYXNtLW1pcHMvc25pLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNiYzY5OAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc25pLmgKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiBTTkkgc3BlY2lmaWMgZGVmaW5pdGlvbnMKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTggYnkgUmFsZiBCYWVjaGxlCisgKi8KKyNpZm5kZWYgX19BU01fU05JX0gKKyNkZWZpbmUgX19BU01fU05JX0gKKworI2RlZmluZSBTTklfUE9SVF9CQVNFCQkweGI0MDAwMDAwCisKKy8qCisgKiBBU0lDIFBDSSByZWdpc3RlcnMgZm9yIGxpdHRsZSBlbmRpYW4gY29uZmlndXJhdGlvbi4KKyAqLworI2lmbmRlZiBfX01JUFNFTF9fCisjZXJyb3IgIkZpeCBtZSBmb3IgYmlnIGVuZGlhbiIKKyNlbmRpZgorI2RlZmluZSBQQ0lNVF9VQ09ORgkJMHhiZmZmMDAwMAorI2RlZmluZSBQQ0lNVF9JT0FEVElNRU9VVDIJMHhiZmZmMDAwOAorI2RlZmluZSBQQ0lNVF9JT01FTUNPTkYJCTB4YmZmZjAwMTAKKyNkZWZpbmUgUENJTVRfSU9NTVUJCTB4YmZmZjAwMTgKKyNkZWZpbmUgUENJTVRfSU9BRFRJTUVPVVQxCTB4YmZmZjAwMjAKKyNkZWZpbmUgUENJTVRfRE1BQUNDRVNTCQkweGJmZmYwMDI4CisjZGVmaW5lIFBDSU1UX0RNQUhJVAkJMHhiZmZmMDAzMAorI2RlZmluZSBQQ0lNVF9FUlJTVEFUVVMJCTB4YmZmZjAwMzgKKyNkZWZpbmUgUENJTVRfRVJSQUREUgkJMHhiZmZmMDA0MAorI2RlZmluZSBQQ0lNVF9TWU5EUk9NRQkJMHhiZmZmMDA0OAorI2RlZmluZSBQQ0lNVF9JVFBFTkQJCTB4YmZmZjAwNTAKKyNkZWZpbmUgIElUX0lOVDIJCTB4MDEKKyNkZWZpbmUgIElUX0lOVEQJCTB4MDIKKyNkZWZpbmUgIElUX0lOVEMJCTB4MDQKKyNkZWZpbmUgIElUX0lOVEIJCTB4MDgKKyNkZWZpbmUgIElUX0lOVEEJCTB4MTAKKyNkZWZpbmUgIElUX0VJU0EJCTB4MjAKKyNkZWZpbmUgIElUX1NDU0kJCTB4NDAKKyNkZWZpbmUgIElUX0VUSAkJCTB4ODAKKyNkZWZpbmUgUENJTVRfSVJRU0VMCQkweGJmZmYwMDU4CisjZGVmaW5lIFBDSU1UX1RFU1RNRU0JCTB4YmZmZjAwNjAKKyNkZWZpbmUgUENJTVRfRUNDUkVHCQkweGJmZmYwMDY4CisjZGVmaW5lIFBDSU1UX0NPTkZJR19BRERSRVNTCTB4YmZmZjAwNzAKKyNkZWZpbmUgUENJTVRfQVNJQ19JRAkJMHhiZmZmMDA3OAkvKiByZWFkICovCisjZGVmaW5lIFBDSU1UX1NPRlRfUkVTRVQJMHhiZmZmMDA3OAkvKiB3cml0ZSAqLworI2RlZmluZSBQQ0lNVF9QSUFfT0UJCTB4YmZmZjAwODAKKyNkZWZpbmUgUENJTVRfUElBX0RBVEFPVVQJMHhiZmZmMDA4OAorI2RlZmluZSBQQ0lNVF9QSUFfREFUQUlOCTB4YmZmZjAwOTAKKyNkZWZpbmUgUENJTVRfQ0FDSEVDT05GCQkweGJmZmYwMDk4CisjZGVmaW5lIFBDSU1UX0lOVlNQQUNFCQkweGJmZmYwMGEwCisjZGVmaW5lIFBDSU1UX1BDSV9DT05GCQkweGJmZmYwMTAwCisKKy8qCisgKiBEYXRhIHBvcnQgZm9yIHRoZSBQQ0kgYnVzLgorICovCisjZGVmaW5lIFBDSU1UX0NPTkZJR19EQVRBCTB4YjQwMDBjZmMKKworLyoKKyAqIEJvYXJkIHNwZWNpZmljIHJlZ2lzdGVycworICovCisjZGVmaW5lIFBDSU1UX0NTTVNSCQkweGJmZDAwMDAwCisjZGVmaW5lIFBDSU1UX0NTU1dJVENICQkweGJmZDEwMDAwCisjZGVmaW5lIFBDSU1UX0NTSVRQRU5ECQkweGJmZDIwMDAwCisjZGVmaW5lIFBDSU1UX0FVVE9fUE9fRU4JMHhiZmQzMDAwMAorI2RlZmluZSBQQ0lNVF9DTFJfVEVNUAkJMHhiZmQ0MDAwMAorI2RlZmluZSBQQ0lNVF9BVVRPX1BPX0RJUwkweGJmZDUwMDAwCisjZGVmaW5lIFBDSU1UX0VYTVNSCQkweGJmZDYwMDAwCisjZGVmaW5lIFBDSU1UX1VOVVNFRDEJCTB4YmZkNzAwMDAKKyNkZWZpbmUgUENJTVRfQ1NXQ1NNCQkweGJmZDgwMDAwCisjZGVmaW5lIFBDSU1UX1VOVVNFRDIJCTB4YmZkOTAwMDAKKyNkZWZpbmUgUENJTVRfQ1NMRUQJCTB4YmZkYTAwMDAKKyNkZWZpbmUgUENJTVRfQ1NNQVBJU0EJCTB4YmZkYjAwMDAKKyNkZWZpbmUgUENJTVRfQ1NSU1RCUAkJMHhiZmRjMDAwMAorI2RlZmluZSBQQ0lNVF9DTFJQT0ZGCQkweGJmZGQwMDAwCisjZGVmaW5lIFBDSU1UX0NTVElNRVIJCTB4YmZkZTAwMDAKKyNkZWZpbmUgUENJTVRfUFdETgkJMHhiZmRmMDAwMAorCisvKgorICogSW50ZXJydXB0IDAtMTYgYXJlIEVJU0EgaW50ZXJydXB0cy4gIEludGVycnVwdHMgZnJvbSAxNiBvbiBhcmUgYXNzaWduZWQKKyAqIHRvIHRoZSBvdGhlciBpbnRlcnJ1cHRzIGdlbmVyYXRlZCBieSBBU0lDIFBDSS4KKyAqCisgKiBJTlQyIGlzIGEgd2lyZWQtb3Igb2YgdGhlIHB1c2ggYnV0dG9uIGludGVycnVwdCwgaGlnaCB0ZW1wZXJhdHVyZSBpbnRlcnJ1cHQKKyAqIEFTSUMgUENJIGludGVycnVwdC4KKyAqLworI2RlZmluZSBQQ0lNVF9LRVlCT0FSRF9JUlEJIDEKKyNkZWZpbmUgUENJTVRfSVJRX0lOVDIJCTE2CisjZGVmaW5lIFBDSU1UX0lSUV9JTlRECQkxNworI2RlZmluZSBQQ0lNVF9JUlFfSU5UQwkJMTgKKyNkZWZpbmUgUENJTVRfSVJRX0lOVEIJCTE5CisjZGVmaW5lIFBDSU1UX0lSUV9JTlRBCQkyMAorI2RlZmluZSBQQ0lNVF9JUlFfRUlTQQkJMjEKKyNkZWZpbmUgUENJTVRfSVJRX1NDU0kJCTIyCisjZGVmaW5lIFBDSU1UX0lSUV9FVEhFUk5FVAkyMworI2RlZmluZSBQQ0lNVF9JUlFfVEVNUEVSQVRVUkUJMjQKKyNkZWZpbmUgUENJTVRfSVJRX0VJU0FfTk1JCTI1CisjZGVmaW5lIFBDSU1UX0lSUV9QT1dFUl9PRkYJMjYKKyNkZWZpbmUgUENJTVRfSVJRX0JVVFRPTgkyNworCisvKgorICogQmFzZSBhZGRyZXNzIGZvciB0aGUgbWFwcGVkIDE2bWIgRUlTQSBidXMgc2VnbWVudC4KKyAqLworI2RlZmluZSBQQ0lNVF9FSVNBX0JBU0UJCTB4YjAwMDAwMDAKKworLyogUENJIEVJU0EgSW50ZXJydXB0IGFja25vd2xlZGdlICAqLworI2RlZmluZSBQQ0lNVF9JTlRfQUNLTk9XTEVER0UJMHhiYTAwMDAwMAorCisjZW5kaWYgLyogX19BU01fU05JX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc29ja2V0LmggYi9pbmNsdWRlL2FzbS1taXBzL3NvY2tldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyMGI0ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NvY2tldC5oCkBAIC0wLDAgKzEsMTAyIEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk3LCAxOTk5LCAyMDAwLCAyMDAxIFJhbGYgQmFlY2hsZQorICogQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxIFNpbGljb24gR3JhcGhpY3MsIEluYy4KKyAqLworI2lmbmRlZiBfQVNNX1NPQ0tFVF9ICisjZGVmaW5lIF9BU01fU09DS0VUX0gKKworI2luY2x1ZGUgPGFzbS9zb2NraW9zLmg+CisKKy8qCisgKiBGb3Igc2V0c29ja29wdCgyKQorICoKKyAqIFRoaXMgZGVmaW5lcyBhcmUgQUJJIGNvbmZvcm1hbnQgYXMgZmFyIGFzIExpbnV4IHN1cHBvcnRzIHRoZXNlIC4uLgorICovCisjZGVmaW5lIFNPTF9TT0NLRVQJMHhmZmZmCisKKyNkZWZpbmUgU09fREVCVUcJMHgwMDAxCS8qIFJlY29yZCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uICAqLworI2RlZmluZSBTT19SRVVTRUFERFIJMHgwMDA0CS8qIEFsbG93IHJldXNlIG9mIGxvY2FsIGFkZHJlc3Nlcy4gICovCisjZGVmaW5lIFNPX0tFRVBBTElWRQkweDAwMDgJLyogS2VlcCBjb25uZWN0aW9ucyBhbGl2ZSBhbmQgc2VuZAorCQkJCSAgIFNJR1BJUEUgd2hlbiB0aGV5IGRpZS4gICovCisjZGVmaW5lIFNPX0RPTlRST1VURQkweDAwMTAJLyogRG9uJ3QgZG8gbG9jYWwgcm91dGluZy4gICovCisjZGVmaW5lIFNPX0JST0FEQ0FTVAkweDAwMjAJLyogQWxsb3cgdHJhbnNtaXNzaW9uIG9mCisJCQkJICAgYnJvYWRjYXN0IG1lc3NhZ2VzLiAgKi8KKyNkZWZpbmUgU09fTElOR0VSCTB4MDA4MAkvKiBCbG9jayBvbiBjbG9zZSBvZiBhIHJlbGlhYmxlCisJCQkJICAgc29ja2V0IHRvIHRyYW5zbWl0IHBlbmRpbmcgZGF0YS4gICovCisjZGVmaW5lIFNPX09PQklOTElORSAweDAxMDAJLyogUmVjZWl2ZSBvdXQtb2YtYmFuZCBkYXRhIGluLWJhbmQuICAqLworI2lmIDAKK1RvIGFkZDogI2RlZmluZSBTT19SRVVTRVBPUlQgMHgwMjAwCS8qIEFsbG93IGxvY2FsIGFkZHJlc3MgYW5kIHBvcnQgcmV1c2UuICAqLworI2VuZGlmCisKKyNkZWZpbmUgU09fVFlQRQkJMHgxMDA4CS8qIENvbXBhdGlibGUgbmFtZSBmb3IgU09fU1RZTEUuICAqLworI2RlZmluZSBTT19TVFlMRQlTT19UWVBFCS8qIFN5bm9ueW0gKi8KKyNkZWZpbmUgU09fRVJST1IJMHgxMDA3CS8qIGdldCBlcnJvciBzdGF0dXMgYW5kIGNsZWFyICovCisjZGVmaW5lIFNPX1NOREJVRgkweDEwMDEJLyogU2VuZCBidWZmZXIgc2l6ZS4gKi8KKyNkZWZpbmUgU09fUkNWQlVGCTB4MTAwMgkvKiBSZWNlaXZlIGJ1ZmZlci4gKi8KKyNkZWZpbmUgU09fU05ETE9XQVQJMHgxMDAzCS8qIHNlbmQgbG93LXdhdGVyIG1hcmsgKi8KKyNkZWZpbmUgU09fUkNWTE9XQVQJMHgxMDA0CS8qIHJlY2VpdmUgbG93LXdhdGVyIG1hcmsgKi8KKyNkZWZpbmUgU09fU05EVElNRU8JMHgxMDA1CS8qIHNlbmQgdGltZW91dCAqLworI2RlZmluZSBTT19SQ1ZUSU1FTyAJMHgxMDA2CS8qIHJlY2VpdmUgdGltZW91dCAqLworI2RlZmluZSBTT19BQ0NFUFRDT05OCTB4MTAwOQorCisvKiBsaW51eC1zcGVjaWZpYywgbWlnaHQgYXMgd2VsbCBiZSB0aGUgc2FtZSBhcyBvbiBpMzg2ICovCisjZGVmaW5lIFNPX05PX0NIRUNLCTExCisjZGVmaW5lIFNPX1BSSU9SSVRZCTEyCisjZGVmaW5lIFNPX0JTRENPTVBBVAkxNAorCisjZGVmaW5lIFNPX1BBU1NDUkVECTE3CisjZGVmaW5lIFNPX1BFRVJDUkVECTE4CisKKy8qIFNlY3VyaXR5IGxldmVscyAtIGFzIHBlciBOUkwgSVB2NiAtIGRvbid0IGFjdHVhbGx5IGRvIGFueXRoaW5nICovCisjZGVmaW5lIFNPX1NFQ1VSSVRZX0FVVEhFTlRJQ0FUSU9OCQkyMgorI2RlZmluZSBTT19TRUNVUklUWV9FTkNSWVBUSU9OX1RSQU5TUE9SVAkyMworI2RlZmluZSBTT19TRUNVUklUWV9FTkNSWVBUSU9OX05FVFdPUksJCTI0CisKKyNkZWZpbmUgU09fQklORFRPREVWSUNFCQkyNQorCisvKiBTb2NrZXQgZmlsdGVyaW5nICovCisjZGVmaW5lIFNPX0FUVEFDSF9GSUxURVIgICAgICAgIDI2CisjZGVmaW5lIFNPX0RFVEFDSF9GSUxURVIgICAgICAgIDI3CisKKyNkZWZpbmUgU09fUEVFUk5BTUUgICAgICAgICAgICAgMjgKKyNkZWZpbmUgU09fVElNRVNUQU1QCQkyOQorI2RlZmluZSBTQ01fVElNRVNUQU1QCQlTT19USU1FU1RBTVAKKworI2RlZmluZSBTT19QRUVSU0VDCQkzMAorCisjaWZkZWYgX19LRVJORUxfXworCisvKiogc29ja190eXBlIC0gU29ja2V0IHR5cGVzCisgKgorICogUGxlYXNlIG5vdGljZSB0aGF0IGZvciBiaW5hcnkgY29tcGF0IHJlYXNvbnMgTUlQUyBoYXMgdG8KKyAqIG92ZXJyaWRlIHRoZSBlbnVtIHNvY2tfdHlwZSBpbiBpbmNsdWRlL2xpbnV4L25ldC5oLCBzbworICogd2UgZGVmaW5lIEFSQ0hfSEFTX1NPQ0tFVF9UWVBFUyBoZXJlLgorICoKKyAqIEBTT0NLX0RHUkFNIC0gZGF0YWdyYW0gKGNvbm4ubGVzcykgc29ja2V0CisgKiBAU09DS19TVFJFQU0gLSBzdHJlYW0gKGNvbm5lY3Rpb24pIHNvY2tldAorICogQFNPQ0tfUkFXIC0gcmF3IHNvY2tldAorICogQFNPQ0tfUkRNIC0gcmVsaWFibHktZGVsaXZlcmVkIG1lc3NhZ2UKKyAqIEBTT0NLX1NFUVBBQ0tFVCAtIHNlcXVlbnRpYWwgcGFja2V0IHNvY2tldCAKKyAqIEBTT0NLX1BBQ0tFVCAtIGxpbnV4IHNwZWNpZmljIHdheSBvZiBnZXR0aW5nIHBhY2tldHMgYXQgdGhlIGRldiBsZXZlbC4KKyAqCQkgIEZvciB3cml0aW5nIHJhcnAgYW5kIG90aGVyIHNpbWlsYXIgdGhpbmdzIG9uIHRoZSB1c2VyIGxldmVsLgorICovCitlbnVtIHNvY2tfdHlwZSB7CisJU09DS19ER1JBTQk9IDEsCisJU09DS19TVFJFQU0JPSAyLAorCVNPQ0tfUkFXCT0gMywKKwlTT0NLX1JETQk9IDQsCisJU09DS19TRVFQQUNLRVQJPSA1LAorCVNPQ0tfUEFDS0VUCT0gMTAsCit9OworCisjZGVmaW5lIFNPQ0tfTUFYIChTT0NLX1BBQ0tFVCArIDEpCisKKyNkZWZpbmUgQVJDSF9IQVNfU09DS0VUX1RZUEVTIDEKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9BU01fU09DS0VUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc29ja2lvcy5oIGIvaW5jbHVkZS9hc20tbWlwcy9zb2NraW9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdhNTBiZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc29ja2lvcy5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBTb2NrZXQtbGV2ZWwgSS9PIGNvbnRyb2wgY2FsbHMuCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1IGJ5IFJhbGYgQmFlY2hsZQorICovCisjaWZuZGVmIF9BU01fU09DS0lPU19ICisjZGVmaW5lIF9BU01fU09DS0lPU19ICisKKyNpbmNsdWRlIDxhc20vaW9jdGwuaD4KKworLyogU29ja2V0LWxldmVsIEkvTyBjb250cm9sIGNhbGxzLiAqLworI2RlZmluZSBGSU9HRVRPV04JX0lPUignZicsIDEyMywgaW50KQorI2RlZmluZSBGSU9TRVRPV04gCV9JT1coJ2YnLCAxMjQsIGludCkKKworI2RlZmluZSBTSU9DQVRNQVJLCV9JT1IoJ3MnLCA3LCBpbnQpCisjZGVmaW5lIFNJT0NTUEdSUAlfSU9XKCdzJywgOCwgcGlkX3QpCisjZGVmaW5lIFNJT0NHUEdSUAlfSU9SKCdzJywgOSwgcGlkX3QpCisKKyNkZWZpbmUgU0lPQ0dTVEFNUAkweDg5MDYJCQkvKiBHZXQgc3RhbXAgLSBsaW51eC1zcGVjaWZpYyAqLworCisjZW5kaWYgLyogX0FTTV9TT0NLSU9TX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc3BpbmxvY2suaCBiL2luY2x1ZGUvYXNtLW1pcHMvc3BpbmxvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTRkM2ViCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zcGlubG9jay5oCkBAIC0wLDAgKzEsMjk5IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwIGJ5IFJhbGYgQmFlY2hsZQorICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwIFNpbGljb24gR3JhcGhpY3MsIEluYy4KKyAqLworI2lmbmRlZiBfQVNNX1NQSU5MT0NLX0gKKyNkZWZpbmUgX0FTTV9TUElOTE9DS19ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxhc20vd2FyLmg+CisKKy8qCisgKiBZb3VyIGJhc2ljIFNNUCBzcGlubG9ja3MsIGFsbG93aW5nIG9ubHkgYSBzaW5nbGUgQ1BVIGFueXdoZXJlCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworCXZvbGF0aWxlIHVuc2lnbmVkIGludCBsb2NrOworI2lmZGVmIENPTkZJR19QUkVFTVBUCisJdW5zaWduZWQgaW50IGJyZWFrX2xvY2s7CisjZW5kaWYKK30gc3BpbmxvY2tfdDsKKworI2RlZmluZSBTUElOX0xPQ0tfVU5MT0NLRUQgKHNwaW5sb2NrX3QpIHsgMCB9CisKKyNkZWZpbmUgc3Bpbl9sb2NrX2luaXQoeCkJZG8geyAoeCktPmxvY2sgPSAwOyB9IHdoaWxlKDApCisKKyNkZWZpbmUgc3Bpbl9pc19sb2NrZWQoeCkJKCh4KS0+bG9jayAhPSAwKQorI2RlZmluZSBzcGluX3VubG9ja193YWl0KHgpCWRvIHsgYmFycmllcigpOyB9IHdoaWxlICgoeCktPmxvY2spCisjZGVmaW5lIF9yYXdfc3Bpbl9sb2NrX2ZsYWdzKGxvY2ssIGZsYWdzKSBfcmF3X3NwaW5fbG9jayhsb2NrKQorCisvKgorICogU2ltcGxlIHNwaW4gbG9jayBvcGVyYXRpb25zLiAgVGhlcmUgYXJlIHR3byB2YXJpYW50cywgb25lIGNsZWFycyBJUlEncworICogb24gdGhlIGxvY2FsIHByb2Nlc3Nvciwgb25lIGRvZXMgbm90LgorICoKKyAqIFdlIG1ha2Ugbm8gZmFpcm5lc3MgYXNzdW1wdGlvbnMuICBUaGV5IGhhdmUgYSBjb3N0LgorICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfcmF3X3NwaW5fbG9jayhzcGlubG9ja190ICpsb2NrKQoreworCXVuc2lnbmVkIGludCB0bXA7CisKKwlpZiAoUjEwMDAwX0xMU0NfV0FSKSB7CisJCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkiCS5zZXQJbm9yZW9yZGVyCSMgX3Jhd19zcGluX2xvY2sJXG4iCisJCSIxOglsbAklMSwgJTIJCQkJCVxuIgorCQkiCWJuZXoJJTEsIDFiCQkJCQlcbiIKKwkJIgkgbGkJJTEsIDEJCQkJCVxuIgorCQkiCXNjCSUxLCAlMAkJCQkJXG4iCisJCSIJYmVxemwJJTEsIDFiCQkJCQlcbiIKKwkJIgkgbm9wCQkJCQkJXG4iCisJCSIJc3luYwkJCQkJCVxuIgorCQkiCS5zZXQJcmVvcmRlcgkJCQkJXG4iCisJCTogIj1tIiAobG9jay0+bG9jayksICI9JnIiICh0bXApCisJCTogIm0iIChsb2NrLT5sb2NrKQorCQk6ICJtZW1vcnkiKTsKKwl9IGVsc2UgeworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJIgkuc2V0CW5vcmVvcmRlcgkjIF9yYXdfc3Bpbl9sb2NrCVxuIgorCQkiMToJbGwJJTEsICUyCQkJCQlcbiIKKwkJIglibmV6CSUxLCAxYgkJCQkJXG4iCisJCSIJIGxpCSUxLCAxCQkJCQlcbiIKKwkJIglzYwklMSwgJTAJCQkJCVxuIgorCQkiCWJlcXoJJTEsIDFiCQkJCQlcbiIKKwkJIgkgc3luYwkJCQkJCVxuIgorCQkiCS5zZXQJcmVvcmRlcgkJCQkJXG4iCisJCTogIj1tIiAobG9jay0+bG9jayksICI9JnIiICh0bXApCisJCTogIm0iIChsb2NrLT5sb2NrKQorCQk6ICJtZW1vcnkiKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfcmF3X3NwaW5fdW5sb2NrKHNwaW5sb2NrX3QgKmxvY2spCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJIgkuc2V0CW5vcmVvcmRlcgkjIF9yYXdfc3Bpbl91bmxvY2sJXG4iCisJIglzeW5jCQkJCQkJXG4iCisJIglzdwkkMCwgJTAJCQkJCVxuIgorCSIJLnNldFx0cmVvcmRlcgkJCQkJXG4iCisJOiAiPW0iIChsb2NrLT5sb2NrKQorCTogIm0iIChsb2NrLT5sb2NrKQorCTogIm1lbW9yeSIpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBfcmF3X3NwaW5fdHJ5bG9jayhzcGlubG9ja190ICpsb2NrKQoreworCXVuc2lnbmVkIGludCB0ZW1wLCByZXM7CisKKwlpZiAoUjEwMDAwX0xMU0NfV0FSKSB7CisJCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkiCS5zZXQJbm9yZW9yZGVyCSMgX3Jhd19zcGluX3RyeWxvY2sJXG4iCisJCSIxOglsbAklMCwgJTMJCQkJCVxuIgorCQkiCW9yaQklMiwgJTAsIDEJCQkJXG4iCisJCSIJc2MJJTIsICUxCQkJCQlcbiIKKwkJIgliZXF6bAklMiwgMWIJCQkJCVxuIgorCQkiCSBub3AJCQkJCQlcbiIKKwkJIglhbmRpCSUyLCAlMCwgMQkJCQlcbiIKKwkJIglzeW5jCQkJCQkJXG4iCisJCSIJLnNldAlyZW9yZGVyIgorCQk6ICI9JnIiICh0ZW1wKSwgIj1tIiAobG9jay0+bG9jayksICI9JnIiIChyZXMpCisJCTogIm0iIChsb2NrLT5sb2NrKQorCQk6ICJtZW1vcnkiKTsKKwl9IGVsc2UgeworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJIgkuc2V0CW5vcmVvcmRlcgkjIF9yYXdfc3Bpbl90cnlsb2NrCVxuIgorCQkiMToJbGwJJTAsICUzCQkJCQlcbiIKKwkJIglvcmkJJTIsICUwLCAxCQkJCVxuIgorCQkiCXNjCSUyLCAlMQkJCQkJXG4iCisJCSIJYmVxegklMiwgMWIJCQkJCVxuIgorCQkiCSBhbmRpCSUyLCAlMCwgMQkJCQlcbiIKKwkJIglzeW5jCQkJCQkJXG4iCisJCSIJLnNldAlyZW9yZGVyIgorCQk6ICI9JnIiICh0ZW1wKSwgIj1tIiAobG9jay0+bG9jayksICI9JnIiIChyZXMpCisJCTogIm0iIChsb2NrLT5sb2NrKQorCQk6ICJtZW1vcnkiKTsKKwl9CisKKwlyZXR1cm4gcmVzID09IDA7Cit9CisKKy8qCisgKiBSZWFkLXdyaXRlIHNwaW5sb2NrcywgYWxsb3dpbmcgbXVsdGlwbGUgcmVhZGVycyBidXQgb25seSBvbmUgd3JpdGVyLgorICoKKyAqIE5PVEUhIGl0IGlzIHF1aXRlIGNvbW1vbiB0byBoYXZlIHJlYWRlcnMgaW4gaW50ZXJydXB0cyBidXQgbm8gaW50ZXJydXB0CisgKiB3cml0ZXJzLiBGb3IgdGhvc2UgY2lyY3Vtc3RhbmNlcyB3ZSBjYW4gIm1peCIgaXJxLXNhZmUgbG9ja3MgLSBhbnkgd3JpdGVyCisgKiBuZWVkcyB0byBnZXQgYSBpcnEtc2FmZSB3cml0ZS1sb2NrLCBidXQgcmVhZGVycyBjYW4gZ2V0IG5vbi1pcnFzYWZlCisgKiByZWFkLWxvY2tzLgorICovCisKK3R5cGVkZWYgc3RydWN0IHsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbG9jazsKKyNpZmRlZiBDT05GSUdfUFJFRU1QVAorCXVuc2lnbmVkIGludCBicmVha19sb2NrOworI2VuZGlmCit9IHJ3bG9ja190OworCisjZGVmaW5lIFJXX0xPQ0tfVU5MT0NLRUQgKHJ3bG9ja190KSB7IDAgfQorCisjZGVmaW5lIHJ3bG9ja19pbml0KHgpICBkbyB7ICooeCkgPSBSV19MT0NLX1VOTE9DS0VEOyB9IHdoaWxlKDApCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfcmF3X3JlYWRfbG9jayhyd2xvY2tfdCAqcncpCit7CisJdW5zaWduZWQgaW50IHRtcDsKKworCWlmIChSMTAwMDBfTExTQ19XQVIpIHsKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSIJLnNldAlub3Jlb3JkZXIJIyBfcmF3X3JlYWRfbG9jawlcbiIKKwkJIjE6CWxsCSUxLCAlMgkJCQkJXG4iCisJCSIJYmx0egklMSwgMWIJCQkJCVxuIgorCQkiCSBhZGR1CSUxLCAxCQkJCQlcbiIKKwkJIglzYwklMSwgJTAJCQkJCVxuIgorCQkiCWJlcXpsCSUxLCAxYgkJCQkJXG4iCisJCSIJIG5vcAkJCQkJCVxuIgorCQkiCXN5bmMJCQkJCQlcbiIKKwkJIgkuc2V0CXJlb3JkZXIJCQkJCVxuIgorCQk6ICI9bSIgKHJ3LT5sb2NrKSwgIj0mciIgKHRtcCkKKwkJOiAibSIgKHJ3LT5sb2NrKQorCQk6ICJtZW1vcnkiKTsKKwl9IGVsc2UgeworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJIgkuc2V0CW5vcmVvcmRlcgkjIF9yYXdfcmVhZF9sb2NrCVxuIgorCQkiMToJbGwJJTEsICUyCQkJCQlcbiIKKwkJIglibHR6CSUxLCAxYgkJCQkJXG4iCisJCSIJIGFkZHUJJTEsIDEJCQkJCVxuIgorCQkiCXNjCSUxLCAlMAkJCQkJXG4iCisJCSIJYmVxegklMSwgMWIJCQkJCVxuIgorCQkiCSBzeW5jCQkJCQkJXG4iCisJCSIJLnNldAlyZW9yZGVyCQkJCQlcbiIKKwkJOiAiPW0iIChydy0+bG9jayksICI9JnIiICh0bXApCisJCTogIm0iIChydy0+bG9jaykKKwkJOiAibWVtb3J5Iik7CisJfQorfQorCisvKiBOb3RlIHRoZSB1c2Ugb2Ygc3ViLCBub3Qgc3VidSB3aGljaCB3aWxsIG1ha2UgdGhlIGtlcm5lbCBkaWUgd2l0aCBhbgorICAgb3ZlcmZsb3cgZXhjZXB0aW9uIGlmIHdlIGV2ZXIgdHJ5IHRvIHVubG9jayBhbiByd2xvY2sgdGhhdCBpcyBhbHJlYWR5CisgICB1bmxvY2tlZCBvciBpcyBiZWluZyBoZWxkIGJ5IGEgd3JpdGVyLiAgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfcmF3X3JlYWRfdW5sb2NrKHJ3bG9ja190ICpydykKK3sKKwl1bnNpZ25lZCBpbnQgdG1wOworCisJaWYgKFIxMDAwMF9MTFNDX1dBUikgeworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJIjE6CWxsCSUxLCAlMgkJIyBfcmF3X3JlYWRfdW5sb2NrCVxuIgorCQkiCXN1YgklMSwgMQkJCQkJXG4iCisJCSIJc2MJJTEsICUwCQkJCQlcbiIKKwkJIgliZXF6bAklMSwgMWIJCQkJCVxuIgorCQkiCXN5bmMJCQkJCQlcbiIKKwkJOiAiPW0iIChydy0+bG9jayksICI9JnIiICh0bXApCisJCTogIm0iIChydy0+bG9jaykKKwkJOiAibWVtb3J5Iik7CisJfSBlbHNlIHsKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSIJLnNldAlub3Jlb3JkZXIJIyBfcmF3X3JlYWRfdW5sb2NrCVxuIgorCQkiMToJbGwJJTEsICUyCQkJCQlcbiIKKwkJIglzdWIJJTEsIDEJCQkJCVxuIgorCQkiCXNjCSUxLCAlMAkJCQkJXG4iCisJCSIJYmVxegklMSwgMWIJCQkJCVxuIgorCQkiCSBzeW5jCQkJCQkJXG4iCisJCSIJLnNldAlyZW9yZGVyCQkJCQlcbiIKKwkJOiAiPW0iIChydy0+bG9jayksICI9JnIiICh0bXApCisJCTogIm0iIChydy0+bG9jaykKKwkJOiAibWVtb3J5Iik7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX3Jhd193cml0ZV9sb2NrKHJ3bG9ja190ICpydykKK3sKKwl1bnNpZ25lZCBpbnQgdG1wOworCisJaWYgKFIxMDAwMF9MTFNDX1dBUikgeworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJIgkuc2V0CW5vcmVvcmRlcgkjIF9yYXdfd3JpdGVfbG9jawlcbiIKKwkJIjE6CWxsCSUxLCAlMgkJCQkJXG4iCisJCSIJYm5legklMSwgMWIJCQkJCVxuIgorCQkiCSBsdWkJJTEsIDB4ODAwMAkJCQlcbiIKKwkJIglzYwklMSwgJTAJCQkJCVxuIgorCQkiCWJlcXpsCSUxLCAxYgkJCQkJXG4iCisJCSIJIG5vcAkJCQkJCVxuIgorCQkiCXN5bmMJCQkJCQlcbiIKKwkJIgkuc2V0CXJlb3JkZXIJCQkJCVxuIgorCQk6ICI9bSIgKHJ3LT5sb2NrKSwgIj0mciIgKHRtcCkKKwkJOiAibSIgKHJ3LT5sb2NrKQorCQk6ICJtZW1vcnkiKTsKKwl9IGVsc2UgeworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJIgkuc2V0CW5vcmVvcmRlcgkjIF9yYXdfd3JpdGVfbG9jawlcbiIKKwkJIjE6CWxsCSUxLCAlMgkJCQkJXG4iCisJCSIJYm5legklMSwgMWIJCQkJCVxuIgorCQkiCSBsdWkJJTEsIDB4ODAwMAkJCQlcbiIKKwkJIglzYwklMSwgJTAJCQkJCVxuIgorCQkiCWJlcXoJJTEsIDFiCQkJCQlcbiIKKwkJIgkgbm9wCQkJCQkJXG4iCisJCSIJc3luYwkJCQkJCVxuIgorCQkiCS5zZXQJcmVvcmRlcgkJCQkJXG4iCisJCTogIj1tIiAocnctPmxvY2spLCAiPSZyIiAodG1wKQorCQk6ICJtIiAocnctPmxvY2spCisJCTogIm1lbW9yeSIpOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIF9yYXdfd3JpdGVfdW5sb2NrKHJ3bG9ja190ICpydykKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkiCXN5bmMJCQkjIF9yYXdfd3JpdGVfdW5sb2NrCVxuIgorCSIJc3cJJDAsICUwCQkJCQlcbiIKKwk6ICI9bSIgKHJ3LT5sb2NrKQorCTogIm0iIChydy0+bG9jaykKKwk6ICJtZW1vcnkiKTsKK30KKworI2RlZmluZSBfcmF3X3JlYWRfdHJ5bG9jayhsb2NrKSBnZW5lcmljX3Jhd19yZWFkX3RyeWxvY2sobG9jaykKKworc3RhdGljIGlubGluZSBpbnQgX3Jhd193cml0ZV90cnlsb2NrKHJ3bG9ja190ICpydykKK3sKKwl1bnNpZ25lZCBpbnQgdG1wOworCWludCByZXQ7CisKKwlpZiAoUjEwMDAwX0xMU0NfV0FSKSB7CisJCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkiCS5zZXQJbm9yZW9yZGVyCSMgX3Jhd193cml0ZV90cnlsb2NrCVxuIgorCQkiCWxpCSUyLCAwCQkJCQlcbiIKKwkJIjE6CWxsCSUxLCAlMwkJCQkJXG4iCisJCSIJYm5legklMSwgMmYJCQkJCVxuIgorCQkiCSBsdWkJJTEsIDB4ODAwMAkJCQlcbiIKKwkJIglzYwklMSwgJTAJCQkJCVxuIgorCQkiCWJlcXpsCSUxLCAxYgkJCQkJXG4iCisJCSIJIG5vcAkJCQkJCVxuIgorCQkiCXN5bmMJCQkJCQlcbiIKKwkJIglsaQklMiwgMQkJCQkJXG4iCisJCSIJLnNldAlyZW9yZGVyCQkJCQlcbiIKKwkJIjI6CQkJCQkJCVxuIgorCQk6ICI9bSIgKHJ3LT5sb2NrKSwgIj0mciIgKHRtcCksICI9JnIiIChyZXQpCisJCTogIm0iIChydy0+bG9jaykKKwkJOiAibWVtb3J5Iik7CisJfSBlbHNlIHsKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSIJLnNldAlub3Jlb3JkZXIJIyBfcmF3X3dyaXRlX3RyeWxvY2sJXG4iCisJCSIJbGkJJTIsIDAJCQkJCVxuIgorCQkiMToJbGwJJTEsICUzCQkJCQlcbiIKKwkJIglibmV6CSUxLCAyZgkJCQkJXG4iCisJCSIJbHVpCSUxLCAweDgwMDAJCQkJXG4iCisJCSIJc2MJJTEsICUwCQkJCQlcbiIKKwkJIgliZXF6CSUxLCAxYgkJCQkJXG4iCisJCSIJIHN5bmMJCQkJCQlcbiIKKwkJIglsaQklMiwgMQkJCQkJXG4iCisJCSIJLnNldAlyZW9yZGVyCQkJCQlcbiIKKwkJIjI6CQkJCQkJCVxuIgorCQk6ICI9bSIgKHJ3LT5sb2NrKSwgIj0mciIgKHRtcCksICI9JnIiIChyZXQpCisJCTogIm0iIChydy0+bG9jaykKKwkJOiAibWVtb3J5Iik7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworI2VuZGlmIC8qIF9BU01fU1BJTkxPQ0tfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zdGFja2ZyYW1lLmggYi9pbmNsdWRlL2FzbS1taXBzL3N0YWNrZnJhbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjI4M2MyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zdGFja2ZyYW1lLmgKQEAgLTAsMCArMSwzNDYgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTQsIDk1LCA5NiwgOTksIDIwMDEgUmFsZiBCYWVjaGxlCisgKiBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYgUGF1bCBNLiBBbnRvaW5lLgorICogQ29weXJpZ2h0IChDKSAxOTk5IFNpbGljb24gR3JhcGhpY3MsIEluYy4KKyAqLworI2lmbmRlZiBfQVNNX1NUQUNLRlJBTUVfSAorI2RlZmluZSBfQVNNX1NUQUNLRlJBTUVfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorCisjaW5jbHVkZSA8YXNtL2FzbS5oPgorI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgorI2luY2x1ZGUgPGFzbS9vZmZzZXQuaD4KKworCQkubWFjcm8JU0FWRV9BVAorCQkuc2V0CXB1c2gKKwkJLnNldAlub2F0CisJCUxPTkdfUwkkMSwgUFRfUjEoc3ApCisJCS5zZXQJcG9wCisJCS5lbmRtCisKKwkJLm1hY3JvCVNBVkVfVEVNUAorCQltZmhpCXYxCisjaWZkZWYgQ09ORklHX01JUFMzMgorCQlMT05HX1MJJDgsIFBUX1I4KHNwKQorCQlMT05HX1MJJDksIFBUX1I5KHNwKQorI2VuZGlmCisJCUxPTkdfUwl2MSwgUFRfSEkoc3ApCisJCW1mbG8JdjEKKwkJTE9OR19TCSQxMCwgUFRfUjEwKHNwKQorCQlMT05HX1MJJDExLCBQVF9SMTEoc3ApCisJCUxPTkdfUwl2MSwgIFBUX0xPKHNwKQorCQlMT05HX1MJJDEyLCBQVF9SMTIoc3ApCisJCUxPTkdfUwkkMTMsIFBUX1IxMyhzcCkKKwkJTE9OR19TCSQxNCwgUFRfUjE0KHNwKQorCQlMT05HX1MJJDE1LCBQVF9SMTUoc3ApCisJCUxPTkdfUwkkMjQsIFBUX1IyNChzcCkKKwkJLmVuZG0KKworCQkubWFjcm8JU0FWRV9TVEFUSUMKKwkJTE9OR19TCSQxNiwgUFRfUjE2KHNwKQorCQlMT05HX1MJJDE3LCBQVF9SMTcoc3ApCisJCUxPTkdfUwkkMTgsIFBUX1IxOChzcCkKKwkJTE9OR19TCSQxOSwgUFRfUjE5KHNwKQorCQlMT05HX1MJJDIwLCBQVF9SMjAoc3ApCisJCUxPTkdfUwkkMjEsIFBUX1IyMShzcCkKKwkJTE9OR19TCSQyMiwgUFRfUjIyKHNwKQorCQlMT05HX1MJJDIzLCBQVF9SMjMoc3ApCisJCUxPTkdfUwkkMzAsIFBUX1IzMChzcCkKKwkJLmVuZG0KKworI2lmZGVmIENPTkZJR19TTVAKKwkJLm1hY3JvCWdldF9zYXZlZF9zcAkvKiBTTVAgdmFyaWF0aW9uICovCisjaWZkZWYgQ09ORklHX01JUFMzMgorCQltZmMwCWswLCBDUDBfQ09OVEVYVAorCQlsdWkJazEsICVoaShrZXJuZWxzcCkKKwkJc3JsCWswLCBrMCwgMjMKKwkJc2xsCWswLCBrMCwgMgorCQlhZGR1CWsxLCBrMAorCQlMT05HX0wJazEsICVsbyhrZXJuZWxzcCkoazEpCisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19NSVBTNjQpICYmICFkZWZpbmVkKENPTkZJR19CVUlMRF9FTEY2NCkKKwkJTUZDMAlrMSwgQ1AwX0NPTlRFWFQKKwkJZHNyYQlrMSwgMjMKKwkJbHVpCWswLCAlaGkocGdkX2N1cnJlbnQpCisJCWFkZGl1CWswLCAlbG8ocGdkX2N1cnJlbnQpCisJCWRzdWJ1CWsxLCBrMAorCQlsdWkJazAsICVoaShrZXJuZWxzcCkKKwkJZGFkZHUJazEsIGswCisJCUxPTkdfTAlrMSwgJWxvKGtlcm5lbHNwKShrMSkKKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX01JUFM2NCkgJiYgZGVmaW5lZChDT05GSUdfQlVJTERfRUxGNjQpCisJCU1GQzAJazEsIENQMF9DT05URVhUCisJCWRzcmwJazEsIDIzCisJCWRzbGwJazEsIGsxLCAzCisJCUxPTkdfTAlrMSwga2VybmVsc3AoazEpCisjZW5kaWYKKwkJLmVuZG0KKworCQkubWFjcm8Jc2V0X3NhdmVkX3NwIHN0YWNrcCB0ZW1wIHRlbXAyCisjaWZkZWYgQ09ORklHX01JUFMzMgorCQltZmMwCVx0ZW1wLCBDUDBfQ09OVEVYVAorCQlzcmwJXHRlbXAsIDIzCisJCXNsbAlcdGVtcCwgMgorCQlMT05HX1MJXHN0YWNrcCwga2VybmVsc3AoXHRlbXApCisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19NSVBTNjQpICYmICFkZWZpbmVkKENPTkZJR19CVUlMRF9FTEY2NCkKKwkJbHcJXHRlbXAsIFRJX0NQVShncCkKKwkJZHNsbAlcdGVtcCwgMworCQlsdWkJXHRlbXAyLCAlaGkoa2VybmVsc3ApCisJCWRhZGR1CVx0ZW1wLCBcdGVtcDIKKwkJTE9OR19TCVxzdGFja3AsICVsbyhrZXJuZWxzcCkoXHRlbXApCisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19NSVBTNjQpICYmIGRlZmluZWQoQ09ORklHX0JVSUxEX0VMRjY0KQorCQlsdwlcdGVtcCwgVElfQ1BVKGdwKQorCQlkc2xsCVx0ZW1wLCAzCisJCUxPTkdfUwlcc3RhY2twLCBrZXJuZWxzcChcdGVtcCkKKyNlbmRpZgorCQkuZW5kbQorI2Vsc2UKKwkJLm1hY3JvCWdldF9zYXZlZF9zcAkvKiBVbmlwcm9jZXNzb3IgdmFyaWF0aW9uICovCisJCWx1aQlrMSwgJWhpKGtlcm5lbHNwKQorCQlMT05HX0wJazEsICVsbyhrZXJuZWxzcCkoazEpCisJCS5lbmRtCisKKwkJLm1hY3JvCXNldF9zYXZlZF9zcCBzdGFja3AgdGVtcCB0ZW1wMgorCQlMT05HX1MJXHN0YWNrcCwga2VybmVsc3AKKwkJLmVuZG0KKyNlbmRpZgorCisJCS5tYWNybwlTQVZFX1NPTUUKKwkJLnNldAlwdXNoCisJCS5zZXQJbm9hdAorCQkuc2V0CXJlb3JkZXIKKwkJbWZjMAlrMCwgQ1AwX1NUQVRVUworCQlzbGwJazAsIDMJCS8qIGV4dHJhY3QgY3UwIGJpdCAqLworCQkuc2V0CW5vcmVvcmRlcgorCQlibHR6CWswLCA4ZgorCQkgbW92ZQlrMSwgc3AKKwkJLnNldAlyZW9yZGVyCisJCS8qIENhbGxlZCBmcm9tIHVzZXIgbW9kZSwgbmV3IHN0YWNrLiAqLworCQlnZXRfc2F2ZWRfc3AKKzg6CQltb3ZlCWswLCBzcAorCQlQVFJfU1VCVSBzcCwgazEsIFBUX1NJWkUKKwkJTE9OR19TCWswLCBQVF9SMjkoc3ApCisJCUxPTkdfUwkkMywgUFRfUjMoc3ApCisJCUxPTkdfUwkkMCwgUFRfUjAoc3ApCisJCW1mYzAJdjEsIENQMF9TVEFUVVMKKwkJTE9OR19TCSQyLCBQVF9SMihzcCkKKwkJTE9OR19TCXYxLCBQVF9TVEFUVVMoc3ApCisJCUxPTkdfUwkkNCwgUFRfUjQoc3ApCisJCW1mYzAJdjEsIENQMF9DQVVTRQorCQlMT05HX1MJJDUsIFBUX1I1KHNwKQorCQlMT05HX1MJdjEsIFBUX0NBVVNFKHNwKQorCQlMT05HX1MJJDYsIFBUX1I2KHNwKQorCQlNRkMwCXYxLCBDUDBfRVBDCisJCUxPTkdfUwkkNywgUFRfUjcoc3ApCisjaWZkZWYgQ09ORklHX01JUFM2NAorCQlMT05HX1MJJDgsIFBUX1I4KHNwKQorCQlMT05HX1MJJDksIFBUX1I5KHNwKQorI2VuZGlmCisJCUxPTkdfUwl2MSwgUFRfRVBDKHNwKQorCQlMT05HX1MJJDI1LCBQVF9SMjUoc3ApCisJCUxPTkdfUwkkMjgsIFBUX1IyOChzcCkKKwkJTE9OR19TCSQzMSwgUFRfUjMxKHNwKQorCQlvcmkJJDI4LCBzcCwgX1RIUkVBRF9NQVNLCisJCXhvcmkJJDI4LCBfVEhSRUFEX01BU0sKKwkJLnNldAlwb3AKKwkJLmVuZG0KKworCQkubWFjcm8JU0FWRV9BTEwKKwkJU0FWRV9TT01FCisJCVNBVkVfQVQKKwkJU0FWRV9URU1QCisJCVNBVkVfU1RBVElDCisJCS5lbmRtCisKKwkJLm1hY3JvCVJFU1RPUkVfQVQKKwkJLnNldAlwdXNoCisJCS5zZXQJbm9hdAorCQlMT05HX0wJJDEsICBQVF9SMShzcCkKKwkJLnNldAlwb3AKKwkJLmVuZG0KKworCQkubWFjcm8JUkVTVE9SRV9URU1QCisJCUxPTkdfTAkkMjQsIFBUX0xPKHNwKQorI2lmZGVmIENPTkZJR19NSVBTMzIKKwkJTE9OR19MCSQ4LCBQVF9SOChzcCkKKwkJTE9OR19MCSQ5LCBQVF9SOShzcCkKKyNlbmRpZgorCQltdGxvCSQyNAorCQlMT05HX0wJJDI0LCBQVF9ISShzcCkKKwkJTE9OR19MCSQxMCwgUFRfUjEwKHNwKQorCQlMT05HX0wJJDExLCBQVF9SMTEoc3ApCisJCW10aGkJJDI0CisJCUxPTkdfTAkkMTIsIFBUX1IxMihzcCkKKwkJTE9OR19MCSQxMywgUFRfUjEzKHNwKQorCQlMT05HX0wJJDE0LCBQVF9SMTQoc3ApCisJCUxPTkdfTAkkMTUsIFBUX1IxNShzcCkKKwkJTE9OR19MCSQyNCwgUFRfUjI0KHNwKQorCQkuZW5kbQorCisJCS5tYWNybwlSRVNUT1JFX1NUQVRJQworCQlMT05HX0wJJDE2LCBQVF9SMTYoc3ApCisJCUxPTkdfTAkkMTcsIFBUX1IxNyhzcCkKKwkJTE9OR19MCSQxOCwgUFRfUjE4KHNwKQorCQlMT05HX0wJJDE5LCBQVF9SMTkoc3ApCisJCUxPTkdfTAkkMjAsIFBUX1IyMChzcCkKKwkJTE9OR19MCSQyMSwgUFRfUjIxKHNwKQorCQlMT05HX0wJJDIyLCBQVF9SMjIoc3ApCisJCUxPTkdfTAkkMjMsIFBUX1IyMyhzcCkKKwkJTE9OR19MCSQzMCwgUFRfUjMwKHNwKQorCQkuZW5kbQorCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1IzMDAwKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfVFgzOVhYKQorCisJCS5tYWNybwlSRVNUT1JFX1NPTUUKKwkJLnNldAlwdXNoCisJCS5zZXQJcmVvcmRlcgorCQkuc2V0CW5vYXQKKwkJbWZjMAlhMCwgQ1AwX1NUQVRVUworCQlvcmkJYTAsIDB4MWYKKwkJeG9yaQlhMCwgMHgxZgorCQltdGMwCWEwLCBDUDBfU1RBVFVTCisJCWxpCXYxLCAweGZmMDAKKwkJYW5kCWEwLCB2MQorCQlMT05HX0wJdjAsIFBUX1NUQVRVUyhzcCkKKwkJbm9yCXYxLCAkMCwgdjEKKwkJYW5kCXYwLCB2MQorCQlvcgl2MCwgYTAKKwkJbXRjMAl2MCwgQ1AwX1NUQVRVUworCQlMT05HX0wJJDMxLCBQVF9SMzEoc3ApCisJCUxPTkdfTAkkMjgsIFBUX1IyOChzcCkKKwkJTE9OR19MCSQyNSwgUFRfUjI1KHNwKQorI2lmZGVmIENPTkZJR19NSVBTNjQKKwkJTE9OR19MCSQ4LCBQVF9SOChzcCkKKwkJTE9OR19MCSQ5LCBQVF9SOShzcCkKKyNlbmRpZgorCQlMT05HX0wJJDcsICBQVF9SNyhzcCkKKwkJTE9OR19MCSQ2LCAgUFRfUjYoc3ApCisJCUxPTkdfTAkkNSwgIFBUX1I1KHNwKQorCQlMT05HX0wJJDQsICBQVF9SNChzcCkKKwkJTE9OR19MCSQzLCAgUFRfUjMoc3ApCisJCUxPTkdfTAkkMiwgIFBUX1IyKHNwKQorCQkuc2V0CXBvcAorCQkuZW5kbQorCisJCS5tYWNybwlSRVNUT1JFX1NQX0FORF9SRVQKKwkJLnNldAlwdXNoCisJCS5zZXQJbm9yZW9yZGVyCisJCUxPTkdfTAlrMCwgUFRfRVBDKHNwKQorCQlMT05HX0wJc3AsIFBUX1IyOShzcCkKKwkJanIJazAKKwkJIHJmZQorCQkuc2V0CXBvcAorCQkuZW5kbQorCisjZWxzZQorCisJCS5tYWNybwlSRVNUT1JFX1NPTUUKKwkJLnNldAlwdXNoCisJCS5zZXQJcmVvcmRlcgorCQkuc2V0CW5vYXQKKwkJbWZjMAlhMCwgQ1AwX1NUQVRVUworCQlvcmkJYTAsIDB4MWYKKwkJeG9yaQlhMCwgMHgxZgorCQltdGMwCWEwLCBDUDBfU1RBVFVTCisJCWxpCXYxLCAweGZmMDAKKwkJYW5kCWEwLCB2MQorCQlMT05HX0wJdjAsIFBUX1NUQVRVUyhzcCkKKwkJbm9yCXYxLCAkMCwgdjEKKwkJYW5kCXYwLCB2MQorCQlvcgl2MCwgYTAKKwkJbXRjMAl2MCwgQ1AwX1NUQVRVUworCQlMT05HX0wJdjEsIFBUX0VQQyhzcCkKKwkJTVRDMAl2MSwgQ1AwX0VQQworCQlMT05HX0wJJDMxLCBQVF9SMzEoc3ApCisJCUxPTkdfTAkkMjgsIFBUX1IyOChzcCkKKwkJTE9OR19MCSQyNSwgUFRfUjI1KHNwKQorI2lmZGVmIENPTkZJR19NSVBTNjQKKwkJTE9OR19MCSQ4LCBQVF9SOChzcCkKKwkJTE9OR19MCSQ5LCBQVF9SOShzcCkKKyNlbmRpZgorCQlMT05HX0wJJDcsICBQVF9SNyhzcCkKKwkJTE9OR19MCSQ2LCAgUFRfUjYoc3ApCisJCUxPTkdfTAkkNSwgIFBUX1I1KHNwKQorCQlMT05HX0wJJDQsICBQVF9SNChzcCkKKwkJTE9OR19MCSQzLCAgUFRfUjMoc3ApCisJCUxPTkdfTAkkMiwgIFBUX1IyKHNwKQorCQkuc2V0CXBvcAorCQkuZW5kbQorCisJCS5tYWNybwlSRVNUT1JFX1NQX0FORF9SRVQKKwkJTE9OR19MCXNwLCBQVF9SMjkoc3ApCisJCS5zZXQJbWlwczMKKwkJZXJldAorCQkuc2V0CW1pcHMwCisJCS5lbmRtCisKKyNlbmRpZgorCisJCS5tYWNybwlSRVNUT1JFX1NQCisJCUxPTkdfTAlzcCwgUFRfUjI5KHNwKQorCQkuZW5kbQorCisJCS5tYWNybwlSRVNUT1JFX0FMTAorCQlSRVNUT1JFX1RFTVAKKwkJUkVTVE9SRV9TVEFUSUMKKwkJUkVTVE9SRV9BVAorCQlSRVNUT1JFX1NPTUUKKwkJUkVTVE9SRV9TUAorCQkuZW5kbQorCisJCS5tYWNybwlSRVNUT1JFX0FMTF9BTkRfUkVUCisJCVJFU1RPUkVfVEVNUAorCQlSRVNUT1JFX1NUQVRJQworCQlSRVNUT1JFX0FUCisJCVJFU1RPUkVfU09NRQorCQlSRVNUT1JFX1NQX0FORF9SRVQKKwkJLmVuZG0KKworLyoKKyAqIE1vdmUgdG8ga2VybmVsIG1vZGUgYW5kIGRpc2FibGUgaW50ZXJydXB0cy4KKyAqIFNldCBjcDAgZW5hYmxlIGJpdCBhcyBzaWduIHRoYXQgd2UncmUgcnVubmluZyBvbiB0aGUga2VybmVsIHN0YWNrCisgKi8KKwkJLm1hY3JvCUNMSQorCQltZmMwCXQwLCBDUDBfU1RBVFVTCisJCWxpCXQxLCBTVDBfQ1UwIHwgMHgxZgorCQlvcgl0MCwgdDEKKwkJeG9yaQl0MCwgMHgxZgorCQltdGMwCXQwLCBDUDBfU1RBVFVTCisJCWlycV9kaXNhYmxlX2hhemFyZAorCQkuZW5kbQorCisvKgorICogTW92ZSB0byBrZXJuZWwgbW9kZSBhbmQgZW5hYmxlIGludGVycnVwdHMuCisgKiBTZXQgY3AwIGVuYWJsZSBiaXQgYXMgc2lnbiB0aGF0IHdlJ3JlIHJ1bm5pbmcgb24gdGhlIGtlcm5lbCBzdGFjaworICovCisJCS5tYWNybwlTVEkKKwkJbWZjMAl0MCwgQ1AwX1NUQVRVUworCQlsaQl0MSwgU1QwX0NVMCB8IDB4MWYKKwkJb3IJdDAsIHQxCisJCXhvcmkJdDAsIDB4MWUKKwkJbXRjMAl0MCwgQ1AwX1NUQVRVUworCQlpcnFfZW5hYmxlX2hhemFyZAorCQkuZW5kbQorCisvKgorICogSnVzdCBtb3ZlIHRvIGtlcm5lbCBtb2RlIGFuZCBsZWF2ZSBpbnRlcnJ1cHRzIGFzIHRoZXkgYXJlLgorICogU2V0IGNwMCBlbmFibGUgYml0IGFzIHNpZ24gdGhhdCB3ZSdyZSBydW5uaW5nIG9uIHRoZSBrZXJuZWwgc3RhY2sKKyAqLworCQkubWFjcm8JS01PREUKKwkJbWZjMAl0MCwgQ1AwX1NUQVRVUworCQlsaQl0MSwgU1QwX0NVMCB8IDB4MWUKKwkJb3IJdDAsIHQxCisJCXhvcmkJdDAsIDB4MWUKKwkJbXRjMAl0MCwgQ1AwX1NUQVRVUworCQlpcnFfZGlzYWJsZV9oYXphcmQKKwkJLmVuZG0KKworI2VuZGlmIC8qIF9BU01fU1RBQ0tGUkFNRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3N0YXQuaCBiL2luY2x1ZGUvYXNtLW1pcHMvc3RhdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlMDBmNzUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3N0YXQuaApAQCAtMCwwICsxLDEzMiBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NSwgMTk5OSwgMjAwMCBSYWxmIEJhZWNobGUKKyAqIENvcHlyaWdodCAoQykgMjAwMCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCisgKi8KKyNpZm5kZWYgX0FTTV9TVEFUX0gKKyNkZWZpbmUgX0FTTV9TVEFUX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNpbmNsdWRlIDxhc20vc2dpZGVmcy5oPgorCisjaWYgKF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fQUJJMzIpIHx8IChfTUlQU19TSU0gPT0gX01JUFNfU0lNX05BQkkzMikKKworc3RydWN0IHN0YXQgeworCXVuc2lnbmVkCXN0X2RldjsKKwlsb25nCQlzdF9wYWQxWzNdOwkJLyogUmVzZXJ2ZWQgZm9yIG5ldHdvcmsgaWQgKi8KKwlpbm9fdAkJc3RfaW5vOworCW1vZGVfdAkJc3RfbW9kZTsKKwlubGlua190CQlzdF9ubGluazsKKwl1aWRfdAkJc3RfdWlkOworCWdpZF90CQlzdF9naWQ7CisJdW5zaWduZWQgCXN0X3JkZXY7CisJbG9uZwkJc3RfcGFkMlsyXTsKKwlvZmZfdAkJc3Rfc2l6ZTsKKwlsb25nCQlzdF9wYWQzOworCS8qCisJICogQWN0dWFsbHkgdGhpcyBzaG91bGQgYmUgdGltZXN0cnVjX3Qgc3RfYXRpbWUsIHN0X210aW1lIGFuZCBzdF9jdGltZQorCSAqIGJ1dCB3ZSBkb24ndCBoYXZlIGl0IHVuZGVyIExpbnV4LgorCSAqLworCXRpbWVfdAkJc3RfYXRpbWU7CisJbG9uZwkJc3RfYXRpbWVfbnNlYzsKKwl0aW1lX3QJCXN0X210aW1lOworCWxvbmcJCXN0X210aW1lX25zZWM7CisJdGltZV90CQlzdF9jdGltZTsKKwlsb25nCQlzdF9jdGltZV9uc2VjOworCWxvbmcJCXN0X2Jsa3NpemU7CisJbG9uZwkJc3RfYmxvY2tzOworCWxvbmcJCXN0X3BhZDRbMTRdOworfTsKKworLyoKKyAqIFRoaXMgbWF0Y2hlcyBzdHJ1Y3Qgc3RhdDY0IGluIGdsaWJjMi4xLCBoZW5jZSB0aGUgYWJzb2x1dGVseSBpbnNhbmUKKyAqIGFtb3VudHMgb2YgcGFkZGluZyBhcm91bmQgZGV2X3Qncy4gIFRoZSBtZW1vcnkgbGF5b3V0IGlzIHRoZSBzYW1lIGFzIG9mCisgKiBzdHJ1Y3Qgc3RhdCBvZiB0aGUgNjQtYml0IGtlcm5lbC4KKyAqLworCitzdHJ1Y3Qgc3RhdDY0IHsKKwl1bnNpZ25lZCBsb25nCXN0X2RldjsKKwl1bnNpZ25lZCBsb25nCXN0X3BhZDBbM107CS8qIFJlc2VydmVkIGZvciBzdF9kZXYgZXhwYW5zaW9uICAqLworCisJdW5zaWduZWQgbG9uZyBsb25nCXN0X2lubzsKKworCW1vZGVfdAkJc3RfbW9kZTsKKwlubGlua190CQlzdF9ubGluazsKKworCXVpZF90CQlzdF91aWQ7CisJZ2lkX3QJCXN0X2dpZDsKKworCXVuc2lnbmVkIGxvbmcJc3RfcmRldjsKKwl1bnNpZ25lZCBsb25nCXN0X3BhZDFbM107CS8qIFJlc2VydmVkIGZvciBzdF9yZGV2IGV4cGFuc2lvbiAgKi8KKworCWxvbmcgbG9uZwlzdF9zaXplOworCisJLyoKKwkgKiBBY3R1YWxseSB0aGlzIHNob3VsZCBiZSB0aW1lc3RydWNfdCBzdF9hdGltZSwgc3RfbXRpbWUgYW5kIHN0X2N0aW1lCisJICogYnV0IHdlIGRvbid0IGhhdmUgaXQgdW5kZXIgTGludXguCisJICovCisJdGltZV90CQlzdF9hdGltZTsKKwl1bnNpZ25lZCBsb25nCXN0X2F0aW1lX25zZWM7CS8qIFJlc2VydmVkIGZvciBzdF9hdGltZSBleHBhbnNpb24gICovCisKKwl0aW1lX3QJCXN0X210aW1lOworCXVuc2lnbmVkIGxvbmcJc3RfbXRpbWVfbnNlYzsJLyogUmVzZXJ2ZWQgZm9yIHN0X210aW1lIGV4cGFuc2lvbiAgKi8KKworCXRpbWVfdAkJc3RfY3RpbWU7CisJdW5zaWduZWQgbG9uZwlzdF9jdGltZV9uc2VjOwkvKiBSZXNlcnZlZCBmb3Igc3RfY3RpbWUgZXhwYW5zaW9uICAqLworCisJdW5zaWduZWQgbG9uZwlzdF9ibGtzaXplOworCXVuc2lnbmVkIGxvbmcJc3RfcGFkMjsKKworCWxvbmcgbG9uZwlzdF9ibG9ja3M7Cit9OworCisjZW5kaWYgLyogX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkkzMiAqLworCisjaWYgX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkk2NAorCisvKiBUaGUgbWVtb3J5IGxheW91dCBpcyB0aGUgc2FtZSBhcyBvZiBzdHJ1Y3Qgc3RhdDY0IG9mIHRoZSAzMi1iaXQga2VybmVsLiAgKi8KK3N0cnVjdCBzdGF0IHsKKwl1bnNpZ25lZCBpbnQJCXN0X2RldjsKKwl1bnNpZ25lZCBpbnQJCXN0X3BhZDBbM107IC8qIFJlc2VydmVkIGZvciBzdF9kZXYgZXhwYW5zaW9uICovCisKKwl1bnNpZ25lZCBsb25nCQlzdF9pbm87CisKKwltb2RlX3QJCQlzdF9tb2RlOworCW5saW5rX3QJCQlzdF9ubGluazsKKworCXVpZF90CQkJc3RfdWlkOworCWdpZF90CQkJc3RfZ2lkOworCisJdW5zaWduZWQgaW50CQlzdF9yZGV2OworCXVuc2lnbmVkIGludAkJc3RfcGFkMVszXTsgLyogUmVzZXJ2ZWQgZm9yIHN0X3JkZXYgZXhwYW5zaW9uICovCisKKwlvZmZfdAkJCXN0X3NpemU7CisKKwkvKgorCSAqIEFjdHVhbGx5IHRoaXMgc2hvdWxkIGJlIHRpbWVzdHJ1Y190IHN0X2F0aW1lLCBzdF9tdGltZSBhbmQgc3RfY3RpbWUKKwkgKiBidXQgd2UgZG9uJ3QgaGF2ZSBpdCB1bmRlciBMaW51eC4KKwkgKi8KKwl1bnNpZ25lZCBpbnQJCXN0X2F0aW1lOworCXVuc2lnbmVkIGludAkJc3RfYXRpbWVfbnNlYzsKKworCXVuc2lnbmVkIGludAkJc3RfbXRpbWU7CisJdW5zaWduZWQgaW50CQlzdF9tdGltZV9uc2VjOworCisJdW5zaWduZWQgaW50CQlzdF9jdGltZTsKKwl1bnNpZ25lZCBpbnQJCXN0X2N0aW1lX25zZWM7CisKKwl1bnNpZ25lZCBpbnQJCXN0X2Jsa3NpemU7CisJdW5zaWduZWQgaW50CQlzdF9wYWQyOworCisJdW5zaWduZWQgbG9uZwkJc3RfYmxvY2tzOworfTsKKworI2VuZGlmIC8qIF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fQUJJNjQgKi8KKworI2RlZmluZSBTVEFUX0hBVkVfTlNFQyAxCisKKyNlbmRpZiAvKiBfQVNNX1NUQVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zdGF0ZnMuaCBiL2luY2x1ZGUvYXNtLW1pcHMvc3RhdGZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA3NmZlYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc3RhdGZzLmgKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NSwgMTk5OSBieSBSYWxmIEJhZWNobGUKKyAqLworI2lmbmRlZiBfQVNNX1NUQVRGU19ICisjZGVmaW5lIF9BU01fU1RBVEZTX0gKKworI2luY2x1ZGUgPGxpbnV4L3Bvc2l4X3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3NnaWRlZnMuaD4KKworI2lmbmRlZiBfX0tFUk5FTF9TVFJJQ1RfTkFNRVMKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3R5cGVkZWYgX19rZXJuZWxfZnNpZF90ICAgICAgICBmc2lkX3Q7CisKKyNlbmRpZgorCitzdHJ1Y3Qgc3RhdGZzIHsKKwlsb25nCQlmX3R5cGU7CisjZGVmaW5lIGZfZnN0eXAgZl90eXBlCisJbG9uZwkJZl9ic2l6ZTsKKwlsb25nCQlmX2Zyc2l6ZTsJLyogRnJhZ21lbnQgc2l6ZSAtIHVuc3VwcG9ydGVkICovCisJbG9uZwkJZl9ibG9ja3M7CisJbG9uZwkJZl9iZnJlZTsKKwlsb25nCQlmX2ZpbGVzOworCWxvbmcJCWZfZmZyZWU7CisJbG9uZwkJZl9iYXZhaWw7CisKKwkvKiBMaW51eCBzcGVjaWFscyAqLworCV9fa2VybmVsX2ZzaWRfdAlmX2ZzaWQ7CisJbG9uZwkJZl9uYW1lbGVuOworCWxvbmcJCWZfc3BhcmVbNl07Cit9OworCisjaWYgKF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fQUJJMzIpIHx8IChfTUlQU19TSU0gPT0gX01JUFNfU0lNX05BQkkzMikKKworLyoKKyAqIFVubGlrZSB0aGUgdHJhZGl0aW9uYWwgdmVyc2lvbiB0aGUgTEZBUEkgdmVyc2lvbiBoYXMgbm9uZSBvZiB0aGUgQUJJIGp1bmsKKyAqLworc3RydWN0IHN0YXRmczY0IHsKKwlfX3UzMglmX3R5cGU7CisJX191MzIJZl9ic2l6ZTsKKwlfX3UzMglmX2Zyc2l6ZTsJLyogRnJhZ21lbnQgc2l6ZSAtIHVuc3VwcG9ydGVkICovCisJX191MzIJX19wYWQ7CisJX191NjQJZl9ibG9ja3M7CisJX191NjQJZl9iZnJlZTsKKwlfX3U2NAlmX2ZpbGVzOworCV9fdTY0CWZfZmZyZWU7CisJX191NjQJZl9iYXZhaWw7CisJX19rZXJuZWxfZnNpZF90IGZfZnNpZDsKKwlfX3UzMglmX25hbWVsZW47CisJX191MzIJZl9zcGFyZVs2XTsKK307CisKKyNlbmRpZiAvKiBfTUlQU19TSU0gPT0gX01JUFNfU0lNX0FCSTMyICovCisgCisjaWYgX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkk2NAorCitzdHJ1Y3Qgc3RhdGZzNjQgewkJCS8qIFNhbWUgYXMgc3RydWN0IHN0YXRmcyAqLworCWxvbmcJCWZfdHlwZTsKKwlsb25nCQlmX2JzaXplOworCWxvbmcJCWZfZnJzaXplOwkvKiBGcmFnbWVudCBzaXplIC0gdW5zdXBwb3J0ZWQgKi8KKwlsb25nCQlmX2Jsb2NrczsKKwlsb25nCQlmX2JmcmVlOworCWxvbmcJCWZfZmlsZXM7CisJbG9uZwkJZl9mZnJlZTsKKwlsb25nCQlmX2JhdmFpbDsKKworCS8qIExpbnV4IHNwZWNpYWxzICovCisJX19rZXJuZWxfZnNpZF90CWZfZnNpZDsKKwlsb25nCQlmX25hbWVsZW47CisJbG9uZwkJZl9zcGFyZVs2XTsKK307CisKK3N0cnVjdCBjb21wYXRfc3RhdGZzNjQgeworCV9fdTMyCWZfdHlwZTsKKwlfX3UzMglmX2JzaXplOworCV9fdTMyCWZfZnJzaXplOwkvKiBGcmFnbWVudCBzaXplIC0gdW5zdXBwb3J0ZWQgKi8KKwlfX3UzMglfX3BhZDsKKwlfX3U2NAlmX2Jsb2NrczsKKwlfX3U2NAlmX2JmcmVlOworCV9fdTY0CWZfZmlsZXM7CisJX191NjQJZl9mZnJlZTsKKwlfX3U2NAlmX2JhdmFpbDsKKwlfX2tlcm5lbF9mc2lkX3QgZl9mc2lkOworCV9fdTMyCWZfbmFtZWxlbjsKKwlfX3UzMglmX3NwYXJlWzZdOworfTsKKworI2VuZGlmIC8qIF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fQUJJNjQgKi8KKworI2VuZGlmIC8qIF9BU01fU1RBVEZTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc3RyaW5nLmggYi9pbmNsdWRlL2FzbS1taXBzL3N0cmluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxODM0NTUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3N0cmluZy5oCkBAIC0wLDAgKzEsMTY2IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk0LCA5NSwgOTYsIDk3LCA5OCwgMjAwMCwgMDEgUmFsZiBCYWVjaGxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMDAgYnkgU2lsaWNvbiBHcmFwaGljcywgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDAxIE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuCisgKi8KKyNpZm5kZWYgX0FTTV9TVFJJTkdfSAorI2RlZmluZSBfQVNNX1NUUklOR19ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworLyoKKyAqIE1vc3Qgb2YgdGhlIGlubGluZSBmdW5jdGlvbnMgYXJlIHJhdGhlciBuYWl2ZSBpbXBsZW1lbnRhdGlvbnMgc28gSSBqdXN0CisgKiBkaWRuJ3QgYm90aGVyIHVwZGF0aW5nIHRoZW0gZm9yIDY0LWJpdCAuLi4KKyAqLworI2lmZGVmIENPTkZJR19NSVBTMzIKKworI2lmbmRlZiBJTl9TVFJJTkdfQworCisjZGVmaW5lIF9fSEFWRV9BUkNIX1NUUkNQWQorc3RhdGljIF9faW5saW5lX18gY2hhciAqc3RyY3B5KGNoYXIgKl9fZGVzdCwgX19jb25zdF9fIGNoYXIgKl9fc3JjKQoreworICBjaGFyICpfX3hkZXN0ID0gX19kZXN0OworCisgIF9fYXNtX18gX192b2xhdGlsZV9fKAorCSIuc2V0XHRub3Jlb3JkZXJcblx0IgorCSIuc2V0XHRub2F0XG4iCisJIjE6XHRsYnVcdCQxLCglMSlcblx0IgorCSJhZGRpdVx0JTEsMVxuXHQiCisJInNiXHQkMSwoJTApXG5cdCIKKwkiYm5lelx0JDEsMWJcblx0IgorCSJhZGRpdVx0JTAsMVxuXHQiCisJIi5zZXRcdGF0XG5cdCIKKwkiLnNldFx0cmVvcmRlciIKKwk6ICI9ciIgKF9fZGVzdCksICI9ciIgKF9fc3JjKQorICAgICAgICA6ICIwIiAoX19kZXN0KSwgIjEiIChfX3NyYykKKwk6ICJtZW1vcnkiKTsKKworICByZXR1cm4gX194ZGVzdDsKK30KKworI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJOQ1BZCitzdGF0aWMgX19pbmxpbmVfXyBjaGFyICpzdHJuY3B5KGNoYXIgKl9fZGVzdCwgX19jb25zdF9fIGNoYXIgKl9fc3JjLCBzaXplX3QgX19uKQoreworICBjaGFyICpfX3hkZXN0ID0gX19kZXN0OworCisgIGlmIChfX24gPT0gMCkKKyAgICByZXR1cm4gX194ZGVzdDsKKworICBfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkiLnNldFx0bm9yZW9yZGVyXG5cdCIKKwkiLnNldFx0bm9hdFxuIgorCSIxOlx0bGJ1XHQkMSwoJTEpXG5cdCIKKwkic3VidVx0JTIsMVxuXHQiCisJInNiXHQkMSwoJTApXG5cdCIKKwkiYmVxelx0JDEsMmZcblx0IgorCSJhZGRpdVx0JTAsMVxuXHQiCisJImJuZXpcdCUyLDFiXG5cdCIKKwkiYWRkaXVcdCUxLDFcbiIKKwkiMjpcblx0IgorCSIuc2V0XHRhdFxuXHQiCisJIi5zZXRcdHJlb3JkZXIiCisgICAgICAgIDogIj1yIiAoX19kZXN0KSwgIj1yIiAoX19zcmMpLCAiPXIiIChfX24pCisgICAgICAgIDogIjAiIChfX2Rlc3QpLCAiMSIgKF9fc3JjKSwgIjIiIChfX24pCisgICAgICAgIDogIm1lbW9yeSIpOworCisgIHJldHVybiBfX3hkZXN0OworfQorCisjZGVmaW5lIF9fSEFWRV9BUkNIX1NUUkNNUAorc3RhdGljIF9faW5saW5lX18gaW50IHN0cmNtcChfX2NvbnN0X18gY2hhciAqX19jcywgX19jb25zdF9fIGNoYXIgKl9fY3QpCit7CisgIGludCBfX3JlczsKKworICBfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkiLnNldFx0bm9yZW9yZGVyXG5cdCIKKwkiLnNldFx0bm9hdFxuXHQiCisJImxidVx0JTIsKCUwKVxuIgorCSIxOlx0bGJ1XHQkMSwoJTEpXG5cdCIKKwkiYWRkaXVcdCUwLDFcblx0IgorCSJibmVcdCQxLCUyLDJmXG5cdCIKKwkiYWRkaXVcdCUxLDFcblx0IgorCSJibmV6XHQlMiwxYlxuXHQiCisJImxidVx0JTIsKCUwKVxuXHQiCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1IzMDAwKQorCSJub3Bcblx0IgorI2VuZGlmCisJIm1vdmVcdCUyLCQxXG4iCisJIjI6XHRzdWJ1XHQlMiwkMVxuIgorCSIzOlx0LnNldFx0YXRcblx0IgorCSIuc2V0XHRyZW9yZGVyIgorCTogIj1yIiAoX19jcyksICI9ciIgKF9fY3QpLCAiPXIiIChfX3JlcykKKwk6ICIwIiAoX19jcyksICIxIiAoX19jdCkpOworCisgIHJldHVybiBfX3JlczsKK30KKworI2VuZGlmIC8qICFkZWZpbmVkKElOX1NUUklOR19DKSAqLworCisjZGVmaW5lIF9fSEFWRV9BUkNIX1NUUk5DTVAKK3N0YXRpYyBfX2lubGluZV9fIGludAorc3RybmNtcChfX2NvbnN0X18gY2hhciAqX19jcywgX19jb25zdF9fIGNoYXIgKl9fY3QsIHNpemVfdCBfX2NvdW50KQoreworCWludCBfX3JlczsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCSIuc2V0XHRub3Jlb3JkZXJcblx0IgorCSIuc2V0XHRub2F0XG4iCisJIjE6XHRsYnVcdCUzLCglMClcblx0IgorCSJiZXF6XHQlMiwyZlxuXHQiCisJImxidVx0JDEsKCUxKVxuXHQiCisJInN1YnVcdCUyLDFcblx0IgorCSJibmVcdCQxLCUzLDNmXG5cdCIKKwkiYWRkaXVcdCUwLDFcblx0IgorCSJibmV6XHQlMywxYlxuXHQiCisJImFkZGl1XHQlMSwxXG4iCisJIjI6XG5cdCIKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfUjMwMDApCisJIm5vcFxuXHQiCisjZW5kaWYKKwkibW92ZVx0JTMsJDFcbiIKKwkiMzpcdHN1YnVcdCUzLCQxXG5cdCIKKwkiLnNldFx0YXRcblx0IgorCSIuc2V0XHRyZW9yZGVyIgorCTogIj1yIiAoX19jcyksICI9ciIgKF9fY3QpLCAiPXIiIChfX2NvdW50KSwgIj1yIiAoX19yZXMpCisJOiAiMCIgKF9fY3MpLCAiMSIgKF9fY3QpLCAiMiIgKF9fY291bnQpKTsKKworCXJldHVybiBfX3JlczsKK30KKyNlbmRpZiAvKiBDT05GSUdfTUlQUzMyICovCisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNU0VUCitleHRlcm4gdm9pZCAqbWVtc2V0KHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fY291bnQpOworCisjZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNQWQorZXh0ZXJuIHZvaWQgKm1lbWNweSh2b2lkICpfX3RvLCBfX2NvbnN0X18gdm9pZCAqX19mcm9tLCBzaXplX3QgX19uKTsKKworI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1NT1ZFCitleHRlcm4gdm9pZCAqbWVtbW92ZSh2b2lkICpfX2Rlc3QsIF9fY29uc3RfXyB2b2lkICpfX3NyYywgc2l6ZV90IF9fbik7CisKKyNpZmRlZiBDT05GSUdfTUlQUzMyCisjZGVmaW5lIF9fSEFWRV9BUkNIX01FTVNDQU4KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgKm1lbXNjYW4odm9pZCAqX19hZGRyLCBpbnQgX19jLCBzaXplX3QgX19zaXplKQoreworCWNoYXIgKl9fZW5kID0gKGNoYXIgKilfX2FkZHIgKyBfX3NpemU7CisJdW5zaWduZWQgY2hhciBfX3VjID0gKHVuc2lnbmVkIGNoYXIpIF9fYzsKKworCV9fYXNtX18oIi5zZXRcdHB1c2hcblx0IgorCQkiLnNldFx0bm9hdFxuXHQiCisJCSIuc2V0XHRyZW9yZGVyXG5cdCIKKwkJIjE6XHRiZXFcdCUwLCUxLDJmXG5cdCIKKwkJImFkZGl1XHQlMCwxXG5cdCIKKwkJImxidVx0JDEsLTEoJTApXG5cdCIKKwkJImJuZVx0JDEsJXo0LDFiXG4iCisJCSIyOlx0LnNldFx0cG9wIgorCQk6ICI9ciIgKF9fYWRkciksICI9ciIgKF9fZW5kKQorCQk6ICIwIiAoX19hZGRyKSwgIjEiIChfX2VuZCksICJKciIgKF9fdWMpKTsKKworCXJldHVybiBfX2FkZHI7Cit9CisjZW5kaWYgLyogQ09ORklHX01JUFMzMiAqLworCisjZW5kaWYgLyogX0FTTV9TVFJJTkdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zdXNwZW5kLmggYi9pbmNsdWRlL2FzbS1taXBzL3N1c3BlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTYyZjhmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zdXNwZW5kLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fQVNNX1NVU1BFTkRfSAorI2RlZmluZSBfX0FTTV9TVVNQRU5EX0gKKworLyogU29tZXdoZW4uLi4gIE1heWJlIDotKSAgKi8KKworI2VuZGlmIC8qIF9fQVNNX1NVU1BFTkRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zeXNtaXBzLmggYi9pbmNsdWRlL2FzbS1taXBzL3N5c21pcHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjQ3YjdkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zeXNtaXBzLmgKQEAgLTAsMCArMSwyNSBAQAorLyoKKyAqIERlZmluaXRpb25zIGZvciB0aGUgTUlQUyBzeXNtaXBzKDIpIGNhbGwKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUgYnkgUmFsZiBCYWVjaGxlCisgKi8KKyNpZm5kZWYgX0FTTV9TWVNNSVBTX0gKKyNkZWZpbmUgX0FTTV9TWVNNSVBTX0gKKworLyoKKyAqIENvbW1hbmRzIGZvciB0aGUgc3lzbWlwcygyKSBjYWxsCisgKgorICogc3lzbWlwcygyKSBpcyBkZXByZWNhdGVkIC0gdGhvdWdoIHNvbWUgZXhpc3Rpbmcgc29mdHdhcmUgdXNlcyBpdC4KKyAqIFdlIG9ubHkgc3VwcG9ydCB0aGUgZm9sbG93aW5nIGNvbW1hbmRzLgorICovCisjZGVmaW5lIFNFVE5BTUUgICAgICAgICAgICAgICAgICAgIDEJLyogc2V0IGhvc3RuYW1lICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRkxVU0hfQ0FDSEUJCSAgIDMJLyogd3JpdGViYWNrIGFuZCBpbnZhbGlkYXRlIGNhY2hlcyAqLworI2RlZmluZSBNSVBTX0ZJWEFERSAgICAgICAgICAgICAgICA3CS8qIGNvbnRyb2wgYWRkcmVzcyBlcnJvciBmaXhpbmcgICovCisjZGVmaW5lIE1JUFNfUkROVlJBTSAgICAgICAgICAgICAgMTAJLyogcmVhZCBOVlJBTSAqLworI2RlZmluZSBNSVBTX0FUT01JQ19TRVQJCTIwMDEJLyogYXRvbWljYWxseSBzZXQgdmFyaWFibGUgICAgICAgKi8KKworI2VuZGlmIC8qIF9BU01fU1lTTUlQU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tbWlwcy9zeXN0ZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODhmZDg5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zeXN0ZW0uaApAQCAtMCwwICsxLDQzOCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NCwgOTUsIDk2LCA5NywgOTgsIDk5LCAyMDAzIGJ5IFJhbGYgQmFlY2hsZQorICogQ29weXJpZ2h0IChDKSAxOTk2IGJ5IFBhdWwgTS4gQW50b2luZQorICogQ29weXJpZ2h0IChDKSAxOTk5IFNpbGljb24gR3JhcGhpY3MKKyAqIEtldmluIEQuIEtpc3NlbGwsIGtldmlua0BtaXBzLm9yZyBhbmQgQ2Fyc3RlbiBMYW5nZ2FhcmQsIGNhcnN0ZW5sQG1pcHMuY29tCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4KKyAqLworI2lmbmRlZiBfQVNNX1NZU1RFTV9ICisjZGVmaW5lIF9BU01fU1lTVEVNX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CisjaW5jbHVkZSA8YXNtL2NwdS1mZWF0dXJlcy5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vd2FyLmg+CisjaW5jbHVkZSA8YXNtL2ludGVycnVwdC5oPgorCisvKgorICogcmVhZF9iYXJyaWVyX2RlcGVuZHMgLSBGbHVzaCBhbGwgcGVuZGluZyByZWFkcyB0aGF0IHN1YnNlcXVlbnRzIHJlYWRzCisgKiBkZXBlbmQgb24uCisgKgorICogTm8gZGF0YS1kZXBlbmRlbnQgcmVhZHMgZnJvbSBtZW1vcnktbGlrZSByZWdpb25zIGFyZSBldmVyIHJlb3JkZXJlZAorICogb3ZlciB0aGlzIGJhcnJpZXIuICBBbGwgcmVhZHMgcHJlY2VkaW5nIHRoaXMgcHJpbWl0aXZlIGFyZSBndWFyYW50ZWVkCisgKiB0byBhY2Nlc3MgbWVtb3J5IChidXQgbm90IG5lY2Vzc2FyaWx5IG90aGVyIENQVXMnIGNhY2hlcykgYmVmb3JlIGFueQorICogcmVhZHMgZm9sbG93aW5nIHRoaXMgcHJpbWl0aXZlIHRoYXQgZGVwZW5kIG9uIHRoZSBkYXRhIHJldHVybiBieQorICogYW55IG9mIHRoZSBwcmVjZWRpbmcgcmVhZHMuICBUaGlzIHByaW1pdGl2ZSBpcyBtdWNoIGxpZ2h0ZXIgd2VpZ2h0IHRoYW4KKyAqIHJtYigpIG9uIG1vc3QgQ1BVcywgYW5kIGlzIG5ldmVyIGhlYXZpZXIgd2VpZ2h0IHRoYW4gaXMKKyAqIHJtYigpLgorICoKKyAqIFRoZXNlIG9yZGVyaW5nIGNvbnN0cmFpbnRzIGFyZSByZXNwZWN0ZWQgYnkgYm90aCB0aGUgbG9jYWwgQ1BVCisgKiBhbmQgdGhlIGNvbXBpbGVyLgorICoKKyAqIE9yZGVyaW5nIGlzIG5vdCBndWFyYW50ZWVkIGJ5IGFueXRoaW5nIG90aGVyIHRoYW4gdGhlc2UgcHJpbWl0aXZlcywKKyAqIG5vdCBldmVuIGJ5IGRhdGEgZGVwZW5kZW5jaWVzLiAgU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvcgorICogbWVtb3J5X2JhcnJpZXIoKSBmb3IgZXhhbXBsZXMgYW5kIFVSTHMgdG8gbW9yZSBpbmZvcm1hdGlvbi4KKyAqCisgKiBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBjb2RlIHdvdWxkIGZvcmNlIG9yZGVyaW5nICh0aGUgaW5pdGlhbAorICogdmFsdWUgb2YgImEiIGlzIHplcm8sICJiIiBpcyBvbmUsIGFuZCAicCIgaXMgIiZhIik6CisgKgorICogPHByb2dyYW1saXN0aW5nPgorICoJQ1BVIDAJCQkJQ1BVIDEKKyAqCisgKgliID0gMjsKKyAqCW1lbW9yeV9iYXJyaWVyKCk7CisgKglwID0gJmI7CQkJCXEgPSBwOworICoJCQkJCXJlYWRfYmFycmllcl9kZXBlbmRzKCk7CisgKgkJCQkJZCA9ICpxOworICogPC9wcm9ncmFtbGlzdGluZz4KKyAqCisgKiBiZWNhdXNlIHRoZSByZWFkIG9mICIqcSIgZGVwZW5kcyBvbiB0aGUgcmVhZCBvZiAicCIgYW5kIHRoZXNlCisgKiB0d28gcmVhZHMgYXJlIHNlcGFyYXRlZCBieSBhIHJlYWRfYmFycmllcl9kZXBlbmRzKCkuICBIb3dldmVyLAorICogdGhlIGZvbGxvd2luZyBjb2RlLCB3aXRoIHRoZSBzYW1lIGluaXRpYWwgdmFsdWVzIGZvciAiYSIgYW5kICJiIjoKKyAqCisgKiA8cHJvZ3JhbWxpc3Rpbmc+CisgKglDUFUgMAkJCQlDUFUgMQorICoKKyAqCWEgPSAyOworICoJbWVtb3J5X2JhcnJpZXIoKTsKKyAqCWIgPSAzOwkJCQl5ID0gYjsKKyAqCQkJCQlyZWFkX2JhcnJpZXJfZGVwZW5kcygpOworICoJCQkJCXggPSBhOworICogPC9wcm9ncmFtbGlzdGluZz4KKyAqCisgKiBkb2VzIG5vdCBlbmZvcmNlIG9yZGVyaW5nLCBzaW5jZSB0aGVyZSBpcyBubyBkYXRhIGRlcGVuZGVuY3kgYmV0d2VlbgorICogdGhlIHJlYWQgb2YgImEiIGFuZCB0aGUgcmVhZCBvZiAiYiIuICBUaGVyZWZvcmUsIG9uIHNvbWUgQ1BVcywgc3VjaAorICogYXMgQWxwaGEsICJ5IiBjb3VsZCBiZSBzZXQgdG8gMyBhbmQgIngiIHRvIDAuICBVc2Ugcm1iKCkKKyAqIGluIGNhc2VzIGxpa2UgdGhpc3doZXJlIHRoZXJlIGFyZSBubyBkYXRhIGRlcGVuZGVuY2llcy4KKyAqLworCisjZGVmaW5lIHJlYWRfYmFycmllcl9kZXBlbmRzKCkJZG8geyB9IHdoaWxlKDApCisKKyNpZmRlZiBDT05GSUdfQ1BVX0hBU19TWU5DCisjZGVmaW5lIF9fc3luYygpCQkJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQlcCisJCSIuc2V0CXB1c2hcblx0IgkJXAorCQkiLnNldAlub3Jlb3JkZXJcblx0IgkJXAorCQkiLnNldAltaXBzMlxuXHQiCQlcCisJCSJzeW5jXG5cdCIJCQlcCisJCSIuc2V0CXBvcCIJCQlcCisJCTogLyogbm8gb3V0cHV0ICovCQlcCisJCTogLyogbm8gaW5wdXQgKi8JCVwKKwkJOiAibWVtb3J5IikKKyNlbHNlCisjZGVmaW5lIF9fc3luYygpCWRvIHsgfSB3aGlsZSgwKQorI2VuZGlmCisKKyNkZWZpbmUgX19mYXN0X2lvYigpCQkJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQlcCisJCSIuc2V0CXB1c2hcblx0IgkJXAorCQkiLnNldAlub3Jlb3JkZXJcblx0IgkJXAorCQkibHcJJDAsJTBcblx0IgkJXAorCQkibm9wXG5cdCIJCQlcCisJCSIuc2V0CXBvcCIJCQlcCisJCTogLyogbm8gb3V0cHV0ICovCQlcCisJCTogIm0iICgqKGludCAqKUNLU0VHMSkJCVwKKwkJOiAibWVtb3J5IikKKworI2RlZmluZSBmYXN0X3dtYigpCV9fc3luYygpCisjZGVmaW5lIGZhc3Rfcm1iKCkJX19zeW5jKCkKKyNkZWZpbmUgZmFzdF9tYigpCV9fc3luYygpCisjZGVmaW5lIGZhc3RfaW9iKCkJCQkJXAorCWRvIHsJCQkJCVwKKwkJX19zeW5jKCk7CQkJXAorCQlfX2Zhc3RfaW9iKCk7CQkJXAorCX0gd2hpbGUgKDApCisKKyNpZmRlZiBDT05GSUdfQ1BVX0hBU19XQgorCisjaW5jbHVkZSA8YXNtL3diZmx1c2guaD4KKworI2RlZmluZSB3bWIoKQkJZmFzdF93bWIoKQorI2RlZmluZSBybWIoKQkJZmFzdF9ybWIoKQorI2RlZmluZSBtYigpCQl3YmZsdXNoKCkKKyNkZWZpbmUgaW9iKCkJCXdiZmx1c2goKQorCisjZWxzZSAvKiAhQ09ORklHX0NQVV9IQVNfV0IgKi8KKworI2RlZmluZSB3bWIoKQkJZmFzdF93bWIoKQorI2RlZmluZSBybWIoKQkJZmFzdF9ybWIoKQorI2RlZmluZSBtYigpCQlmYXN0X21iKCkKKyNkZWZpbmUgaW9iKCkJCWZhc3RfaW9iKCkKKworI2VuZGlmIC8qICFDT05GSUdfQ1BVX0hBU19XQiAqLworCisjaWZkZWYgQ09ORklHX1NNUAorI2RlZmluZSBzbXBfbWIoKQltYigpCisjZGVmaW5lIHNtcF9ybWIoKQlybWIoKQorI2RlZmluZSBzbXBfd21iKCkJd21iKCkKKyNkZWZpbmUgc21wX3JlYWRfYmFycmllcl9kZXBlbmRzKCkJcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQorI2Vsc2UKKyNkZWZpbmUgc21wX21iKCkJYmFycmllcigpCisjZGVmaW5lIHNtcF9ybWIoKQliYXJyaWVyKCkKKyNkZWZpbmUgc21wX3dtYigpCWJhcnJpZXIoKQorI2RlZmluZSBzbXBfcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQlkbyB7IH0gd2hpbGUoMCkKKyNlbmRpZgorCisjZGVmaW5lIHNldF9tYih2YXIsIHZhbHVlKSBcCitkbyB7IHZhciA9IHZhbHVlOyBtYigpOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIHNldF93bWIodmFyLCB2YWx1ZSkgXAorZG8geyB2YXIgPSB2YWx1ZTsgd21iKCk7IH0gd2hpbGUgKDApCisKKy8qCisgKiBzd2l0Y2hfdG8obikgc2hvdWxkIHN3aXRjaCB0YXNrcyB0byB0YXNrIG5yIG4sIGZpcnN0CisgKiBjaGVja2luZyB0aGF0IG4gaXNuJ3QgdGhlIGN1cnJlbnQgdGFzaywgaW4gd2hpY2ggY2FzZSBpdCBkb2VzIG5vdGhpbmcuCisgKi8KK2V4dGVybiBhc21saW5rYWdlIHZvaWQgKnJlc3VtZSh2b2lkICpsYXN0LCB2b2lkICpuZXh0LCB2b2lkICpuZXh0X3RpKTsKKworc3RydWN0IHRhc2tfc3RydWN0OworCisjZGVmaW5lIHN3aXRjaF90byhwcmV2LG5leHQsbGFzdCkgXAorZG8geyBcCisJKGxhc3QpID0gcmVzdW1lKHByZXYsIG5leHQsIG5leHQtPnRocmVhZF9pbmZvKTsgXAorfSB3aGlsZSgwKQorCisjZGVmaW5lIFJPVF9JTl9QSUVDRVMJCQkJCQkJXAorCSIJLnNldAlub3Jlb3JkZXIJXG4iCQkJCVwKKwkiCS5zZXQJcmVvcmRlcgkJXG4iCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX3hjaGdfdTMyKHZvbGF0aWxlIGludCAqIG0sIHVuc2lnbmVkIGludCB2YWwpCit7CisJX191MzIgcmV0dmFsOworCisJaWYgKGNwdV9oYXNfbGxzYyAmJiBSMTAwMDBfTExTQ19XQVIpIHsKKwkJdW5zaWduZWQgbG9uZyBkdW1teTsKKworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJIjE6CWxsCSUwLCAlMwkJCSMgeGNoZ191MzIJXG4iCisJCSIJbW92ZQklMiwgJXo0CQkJCQlcbiIKKwkJIglzYwklMiwgJTEJCQkJCVxuIgorCQkiCWJlcXpsCSUyLCAxYgkJCQkJXG4iCisJCVJPVF9JTl9QSUVDRVMKKyNpZmRlZiBDT05GSUdfU01QCisJCSIJc3luYwkJCQkJCVxuIgorI2VuZGlmCisJCTogIj0mciIgKHJldHZhbCksICI9bSIgKCptKSwgIj0mciIgKGR1bW15KQorCQk6ICJSIiAoKm0pLCAiSnIiICh2YWwpCisJCTogIm1lbW9yeSIpOworCX0gZWxzZSBpZiAoY3B1X2hhc19sbHNjKSB7CisJCXVuc2lnbmVkIGxvbmcgZHVtbXk7CisKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSIxOglsbAklMCwgJTMJCQkjIHhjaGdfdTMyCVxuIgorCQkiCW1vdmUJJTIsICV6NAkJCQkJXG4iCisJCSIJc2MJJTIsICUxCQkJCQlcbiIKKwkJIgliZXF6CSUyLCAxYgkJCQkJXG4iCisjaWZkZWYgQ09ORklHX1NNUAorCQkiCXN5bmMJCQkJCQlcbiIKKyNlbmRpZgorCQk6ICI9JnIiIChyZXR2YWwpLCAiPW0iICgqbSksICI9JnIiIChkdW1teSkKKwkJOiAiUiIgKCptKSwgIkpyIiAodmFsKQorCQk6ICJtZW1vcnkiKTsKKwl9IGVsc2UgeworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJcmV0dmFsID0gKm07CisJCSptID0gdmFsOworCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CS8qIGltcGxpZXMgbWVtb3J5IGJhcnJpZXIgICovCisJfQorCisJcmV0dXJuIHJldHZhbDsKK30KKworI2lmZGVmIENPTkZJR19NSVBTNjQKK3N0YXRpYyBpbmxpbmUgX191NjQgX194Y2hnX3U2NCh2b2xhdGlsZSBfX3U2NCAqIG0sIF9fdTY0IHZhbCkKK3sKKwlfX3U2NCByZXR2YWw7CisKKwlpZiAoY3B1X2hhc19sbHNjICYmIFIxMDAwMF9MTFNDX1dBUikgeworCQl1bnNpZ25lZCBsb25nIGR1bW15OworCisJCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkiMToJbGxkCSUwLCAlMwkJCSMgeGNoZ191NjQJXG4iCisJCSIJbW92ZQklMiwgJXo0CQkJCQlcbiIKKwkJIglzY2QJJTIsICUxCQkJCQlcbiIKKwkJIgliZXF6bAklMiwgMWIJCQkJCVxuIgorCQlST1RfSU5fUElFQ0VTCisjaWZkZWYgQ09ORklHX1NNUAorCQkiCXN5bmMJCQkJCQlcbiIKKyNlbmRpZgorCQk6ICI9JnIiIChyZXR2YWwpLCAiPW0iICgqbSksICI9JnIiIChkdW1teSkKKwkJOiAiUiIgKCptKSwgIkpyIiAodmFsKQorCQk6ICJtZW1vcnkiKTsKKwl9IGVsc2UgaWYgKGNwdV9oYXNfbGxzYykgeworCQl1bnNpZ25lZCBsb25nIGR1bW15OworCisJCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkiMToJbGxkCSUwLCAlMwkJCSMgeGNoZ191NjQJXG4iCisJCSIJbW92ZQklMiwgJXo0CQkJCQlcbiIKKwkJIglzY2QJJTIsICUxCQkJCQlcbiIKKwkJIgliZXF6CSUyLCAxYgkJCQkJXG4iCisjaWZkZWYgQ09ORklHX1NNUAorCQkiCXN5bmMJCQkJCQlcbiIKKyNlbmRpZgorCQk6ICI9JnIiIChyZXR2YWwpLCAiPW0iICgqbSksICI9JnIiIChkdW1teSkKKwkJOiAiUiIgKCptKSwgIkpyIiAodmFsKQorCQk6ICJtZW1vcnkiKTsKKwl9IGVsc2UgeworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJcmV0dmFsID0gKm07CisJCSptID0gdmFsOworCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CS8qIGltcGxpZXMgbWVtb3J5IGJhcnJpZXIgICovCisJfQorCisJcmV0dXJuIHJldHZhbDsKK30KKyNlbHNlCitleHRlcm4gX191NjQgX194Y2hnX3U2NF91bnN1cHBvcnRlZF9vbl8zMmJpdF9rZXJuZWxzKHZvbGF0aWxlIF9fdTY0ICogbSwgX191NjQgdmFsKTsKKyNkZWZpbmUgX194Y2hnX3U2NCBfX3hjaGdfdTY0X3Vuc3VwcG9ydGVkX29uXzMyYml0X2tlcm5lbHMKKyNlbmRpZgorCisvKiBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgZXhpc3QsIHNvIHlvdSdsbCBnZXQgYSBsaW5rZXIgZXJyb3IKKyAgIGlmIHNvbWV0aGluZyB0cmllcyB0byBkbyBhbiBpbnZhbGlkIHhjaGcoKS4gICovCitleHRlcm4gdm9pZCBfX3hjaGdfY2FsbGVkX3dpdGhfYmFkX3BvaW50ZXIodm9pZCk7CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX3hjaGcodW5zaWduZWQgbG9uZyB4LCB2b2xhdGlsZSB2b2lkICogcHRyLCBpbnQgc2l6ZSkKK3sKKwlzd2l0Y2ggKHNpemUpIHsKKwkJY2FzZSA0OgorCQkJcmV0dXJuIF9feGNoZ191MzIocHRyLCB4KTsKKwkJY2FzZSA4OgorCQkJcmV0dXJuIF9feGNoZ191NjQocHRyLCB4KTsKKwl9CisJX194Y2hnX2NhbGxlZF93aXRoX2JhZF9wb2ludGVyKCk7CisJcmV0dXJuIHg7Cit9CisKKyNkZWZpbmUgeGNoZyhwdHIseCkgKChfX3R5cGVvZl9fKCoocHRyKSkpX194Y2hnKCh1bnNpZ25lZCBsb25nKSh4KSwocHRyKSxzaXplb2YoKihwdHIpKSkpCisjZGVmaW5lIHRhcyhwdHIpICh4Y2hnKChwdHIpLDEpKQorCisjZGVmaW5lIF9fSEFWRV9BUkNIX0NNUFhDSEcgMQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19jbXB4Y2hnX3UzMih2b2xhdGlsZSBpbnQgKiBtLCB1bnNpZ25lZCBsb25nIG9sZCwKKwl1bnNpZ25lZCBsb25nIG5ldykKK3sKKwlfX3UzMiByZXR2YWw7CisKKwlpZiAoY3B1X2hhc19sbHNjICYmIFIxMDAwMF9MTFNDX1dBUikgeworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJIgkuc2V0CW5vYXQJCQkJCVxuIgorCQkiMToJbGwJJTAsICUyCQkJIyBfX2NtcHhjaGdfdTMyCVxuIgorCQkiCWJuZQklMCwgJXozLCAyZgkJCQlcbiIKKwkJIgltb3ZlCSQxLCAlejQJCQkJCVxuIgorCQkiCXNjCSQxLCAlMQkJCQkJXG4iCisJCSIJYmVxemwJJDEsIDFiCQkJCQlcbiIKKwkJUk9UX0lOX1BJRUNFUworI2lmZGVmIENPTkZJR19TTVAKKwkJIglzeW5jCQkJCQkJXG4iCisjZW5kaWYKKwkJIjI6CQkJCQkJCVxuIgorCQkiCS5zZXQJYXQJCQkJCVxuIgorCQk6ICI9JnIiIChyZXR2YWwpLCAiPW0iICgqbSkKKwkJOiAiUiIgKCptKSwgIkpyIiAob2xkKSwgIkpyIiAobmV3KQorCQk6ICJtZW1vcnkiKTsKKwl9IGVsc2UgaWYgKGNwdV9oYXNfbGxzYykgeworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJIgkuc2V0CW5vYXQJCQkJCVxuIgorCQkiMToJbGwJJTAsICUyCQkJIyBfX2NtcHhjaGdfdTMyCVxuIgorCQkiCWJuZQklMCwgJXozLCAyZgkJCQlcbiIKKwkJIgltb3ZlCSQxLCAlejQJCQkJCVxuIgorCQkiCXNjCSQxLCAlMQkJCQkJXG4iCisJCSIJYmVxegkkMSwgMWIJCQkJCVxuIgorI2lmZGVmIENPTkZJR19TTVAKKwkJIglzeW5jCQkJCQkJXG4iCisjZW5kaWYKKwkJIjI6CQkJCQkJCVxuIgorCQkiCS5zZXQJYXQJCQkJCVxuIgorCQk6ICI9JnIiIChyZXR2YWwpLCAiPW0iICgqbSkKKwkJOiAiUiIgKCptKSwgIkpyIiAob2xkKSwgIkpyIiAobmV3KQorCQk6ICJtZW1vcnkiKTsKKwl9IGVsc2UgeworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJcmV0dmFsID0gKm07CisJCWlmIChyZXR2YWwgPT0gb2xkKQorCQkJKm0gPSBuZXc7CisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsJLyogaW1wbGllcyBtZW1vcnkgYmFycmllciAgKi8KKwl9CisKKwlyZXR1cm4gcmV0dmFsOworfQorCisjaWZkZWYgQ09ORklHX01JUFM2NAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fY21weGNoZ191NjQodm9sYXRpbGUgaW50ICogbSwgdW5zaWduZWQgbG9uZyBvbGQsCisJdW5zaWduZWQgbG9uZyBuZXcpCit7CisJX191NjQgcmV0dmFsOworCisJaWYgKGNwdV9oYXNfbGxzYykgeworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJIgkuc2V0CW5vYXQJCQkJCVxuIgorCQkiMToJbGxkCSUwLCAlMgkJCSMgX19jbXB4Y2hnX3U2NAlcbiIKKwkJIglibmUJJTAsICV6MywgMmYJCQkJXG4iCisJCSIJbW92ZQkkMSwgJXo0CQkJCQlcbiIKKwkJIglzY2QJJDEsICUxCQkJCQlcbiIKKwkJIgliZXF6bAkkMSwgMWIJCQkJCVxuIgorCQlST1RfSU5fUElFQ0VTCisjaWZkZWYgQ09ORklHX1NNUAorCQkiCXN5bmMJCQkJCQlcbiIKKyNlbmRpZgorCQkiMjoJCQkJCQkJXG4iCisJCSIJLnNldAlhdAkJCQkJXG4iCisJCTogIj0mciIgKHJldHZhbCksICI9bSIgKCptKQorCQk6ICJSIiAoKm0pLCAiSnIiIChvbGQpLCAiSnIiIChuZXcpCisJCTogIm1lbW9yeSIpOworCX0gZWxzZSBpZiAoY3B1X2hhc19sbHNjKSB7CisJCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkiCS5zZXQJbm9hdAkJCQkJXG4iCisJCSIxOglsbGQJJTAsICUyCQkJIyBfX2NtcHhjaGdfdTY0CVxuIgorCQkiCWJuZQklMCwgJXozLCAyZgkJCQlcbiIKKwkJIgltb3ZlCSQxLCAlejQJCQkJCVxuIgorCQkiCXNjZAkkMSwgJTEJCQkJCVxuIgorCQkiCWJlcXoJJDEsIDFiCQkJCQlcbiIKKyNpZmRlZiBDT05GSUdfU01QCisJCSIJc3luYwkJCQkJCVxuIgorI2VuZGlmCisJCSIyOgkJCQkJCQlcbiIKKwkJIgkuc2V0CWF0CQkJCQlcbiIKKwkJOiAiPSZyIiAocmV0dmFsKSwgIj1tIiAoKm0pCisJCTogIlIiICgqbSksICJKciIgKG9sZCksICJKciIgKG5ldykKKwkJOiAibWVtb3J5Iik7CisJfSBlbHNlIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJCXJldHZhbCA9ICptOworCQlpZiAocmV0dmFsID09IG9sZCkKKwkJCSptID0gbmV3OworCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CS8qIGltcGxpZXMgbWVtb3J5IGJhcnJpZXIgICovCisJfQorCisJcmV0dXJuIHJldHZhbDsKK30KKyNlbHNlCitleHRlcm4gdW5zaWduZWQgbG9uZyBfX2NtcHhjaGdfdTY0X3Vuc3VwcG9ydGVkX29uXzMyYml0X2tlcm5lbHMoCisJdm9sYXRpbGUgaW50ICogbSwgdW5zaWduZWQgbG9uZyBvbGQsIHVuc2lnbmVkIGxvbmcgbmV3KTsKKyNkZWZpbmUgX19jbXB4Y2hnX3U2NCBfX2NtcHhjaGdfdTY0X3Vuc3VwcG9ydGVkX29uXzMyYml0X2tlcm5lbHMKKyNlbmRpZgorCisvKiBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgZXhpc3QsIHNvIHlvdSdsbCBnZXQgYSBsaW5rZXIgZXJyb3IKKyAgIGlmIHNvbWV0aGluZyB0cmllcyB0byBkbyBhbiBpbnZhbGlkIGNtcHhjaGcoKS4gICovCitleHRlcm4gdm9pZCBfX2NtcHhjaGdfY2FsbGVkX3dpdGhfYmFkX3BvaW50ZXIodm9pZCk7CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX2NtcHhjaGcodm9sYXRpbGUgdm9pZCAqIHB0ciwgdW5zaWduZWQgbG9uZyBvbGQsCisJdW5zaWduZWQgbG9uZyBuZXcsIGludCBzaXplKQoreworCXN3aXRjaCAoc2l6ZSkgeworCWNhc2UgNDoKKwkJcmV0dXJuIF9fY21weGNoZ191MzIocHRyLCBvbGQsIG5ldyk7CisJY2FzZSA4OgorCQlyZXR1cm4gX19jbXB4Y2hnX3U2NChwdHIsIG9sZCwgbmV3KTsKKwl9CisJX19jbXB4Y2hnX2NhbGxlZF93aXRoX2JhZF9wb2ludGVyKCk7CisJcmV0dXJuIG9sZDsKK30KKworI2RlZmluZSBjbXB4Y2hnKHB0cixvbGQsbmV3KSAoKF9fdHlwZW9mX18oKihwdHIpKSlfX2NtcHhjaGcoKHB0ciksICh1bnNpZ25lZCBsb25nKShvbGQpLCAodW5zaWduZWQgbG9uZykobmV3KSxzaXplb2YoKihwdHIpKSkpCisKK2V4dGVybiB2b2lkICpzZXRfZXhjZXB0X3ZlY3RvcihpbnQgbiwgdm9pZCAqYWRkcik7CitleHRlcm4gdm9pZCBwZXJfY3B1X3RyYXBfaW5pdCh2b2lkKTsKKworZXh0ZXJuIE5PUkVUX1RZUEUgdm9pZCBfX2RpZShjb25zdCBjaGFyICosIHN0cnVjdCBwdF9yZWdzICosIGNvbnN0IGNoYXIgKmZpbGUsCisJY29uc3QgY2hhciAqZnVuYywgdW5zaWduZWQgbG9uZyBsaW5lKTsKK2V4dGVybiB2b2lkIF9fZGllX2lmX2tlcm5lbChjb25zdCBjaGFyICosIHN0cnVjdCBwdF9yZWdzICosIGNvbnN0IGNoYXIgKmZpbGUsCisJY29uc3QgY2hhciAqZnVuYywgdW5zaWduZWQgbG9uZyBsaW5lKTsKKworI2RlZmluZSBkaWUobXNnLCByZWdzKQkJCQkJCQlcCisJX19kaWUobXNnLCByZWdzLCBfX0ZJTEVfXyAiOiIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18pCisjZGVmaW5lIGRpZV9pZl9rZXJuZWwobXNnLCByZWdzKQkJCQkJXAorCV9fZGllX2lmX2tlcm5lbChtc2csIHJlZ3MsIF9fRklMRV9fICI6IiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXykKKworZXh0ZXJuIGludCBzdG9wX2FfZW5hYmxlZDsKKworLyoKKyAqIFRha2VuIGZyb20gaW5jbHVkZS9hc20taWE2NC9zeXN0ZW0uaDsgcHJldmVudHMgZGVhZGxvY2sgb24gU01QCisgKiBzeXN0ZW1zLgorICovCisjZGVmaW5lIHByZXBhcmVfYXJjaF9zd2l0Y2gocnEsIG5leHQpCQlcCitkbyB7CQkJCQkJXAorCXNwaW5fbG9jaygmKG5leHQpLT5zd2l0Y2hfbG9jayk7CVwKKwlzcGluX3VubG9jaygmKHJxKS0+bG9jayk7CQlcCit9IHdoaWxlICgwKQorI2RlZmluZSBmaW5pc2hfYXJjaF9zd2l0Y2gocnEsIHByZXYpCXNwaW5fdW5sb2NrX2lycSgmKHByZXYpLT5zd2l0Y2hfbG9jaykKKyNkZWZpbmUgdGFza19ydW5uaW5nKHJxLCBwKSAJCSgocnEpLT5jdXJyID09IChwKSB8fCBzcGluX2lzX2xvY2tlZCgmKHApLT5zd2l0Y2hfbG9jaykpCisKKyNkZWZpbmUgYXJjaF9hbGlnbl9zdGFjayh4KSAoeCkKKworI2VuZGlmIC8qIF9BU01fU1lTVEVNX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvdGVybWJpdHMuaCBiL2luY2x1ZGUvYXNtLW1pcHMvdGVybWJpdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjljNjViCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy90ZXJtYml0cy5oCkBAIC0wLDAgKzEsMjA3IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2LCAxOTk5LCAyMDAxIFJhbGYgQmFlY2hsZQorICogQ29weXJpZ2h0IChDKSAxOTk5IFNpbGljb24gR3JhcGhpY3MsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMSBNSVBTIFRlY2hub2xvZ2llcywgSW5jLgorICovCisjaWZuZGVmIF9BU01fVEVSTUJJVFNfSAorI2RlZmluZSBfQVNNX1RFUk1CSVRTX0gKKworI2luY2x1ZGUgPGxpbnV4L3Bvc2l4X3R5cGVzLmg+CisKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBjY190OworI2lmIChfTUlQU19TWkxPTkcgPT0gMzIpCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgc3BlZWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyB0Y2ZsYWdfdDsKKyNlbmRpZgorI2lmIChfTUlQU19TWkxPTkcgPT0gNjQpCit0eXBlZGVmIF9fdTMyIHNwZWVkX3Q7Cit0eXBlZGVmIF9fdTMyIHRjZmxhZ190OworI2VuZGlmCisKKy8qCisgKiBUaGUgQUJJIHNheXMgbm90aGluZyBhYm91dCBOQ0MgYnV0IHNlZW1zIHRvIHVzZSBOQ0NTIGFzCisgKiByZXBsYWNlbWVudCBmb3IgaXQgaW4gc3RydWN0IHRlcm1pbworICovCisjZGVmaW5lIE5DQ1MJMjMKK3N0cnVjdCB0ZXJtaW9zIHsKKwl0Y2ZsYWdfdCBjX2lmbGFnOwkJLyogaW5wdXQgbW9kZSBmbGFncyAqLworCXRjZmxhZ190IGNfb2ZsYWc7CQkvKiBvdXRwdXQgbW9kZSBmbGFncyAqLworCXRjZmxhZ190IGNfY2ZsYWc7CQkvKiBjb250cm9sIG1vZGUgZmxhZ3MgKi8KKwl0Y2ZsYWdfdCBjX2xmbGFnOwkJLyogbG9jYWwgbW9kZSBmbGFncyAqLworCWNjX3QgY19saW5lOwkJCS8qIGxpbmUgZGlzY2lwbGluZSAqLworCWNjX3QgY19jY1tOQ0NTXTsJCS8qIGNvbnRyb2wgY2hhcmFjdGVycyAqLworfTsKKworLyogY19jYyBjaGFyYWN0ZXJzICovCisjZGVmaW5lIFZJTlRSCQkgMAkJLyogSW50ZXJydXB0IGNoYXJhY3RlciBbSVNJR10uICAqLworI2RlZmluZSBWUVVJVAkJIDEJCS8qIFF1aXQgY2hhcmFjdGVyIFtJU0lHXS4gICovCisjZGVmaW5lIFZFUkFTRQkJIDIJCS8qIEVyYXNlIGNoYXJhY3RlciBbSUNBTk9OXS4gICovCisjZGVmaW5lIFZLSUxMCQkgMwkJLyogS2lsbC1saW5lIGNoYXJhY3RlciBbSUNBTk9OXS4gICovCisjZGVmaW5lIFZNSU4JCSA0CQkvKiBNaW5pbXVtIG51bWJlciBvZiBieXRlcyByZWFkIGF0IG9uY2UgWyFJQ0FOT05dLiAgKi8KKyNkZWZpbmUgVlRJTUUJCSA1CQkvKiBUaW1lLW91dCB2YWx1ZSAodGVudGhzIG9mIGEgc2Vjb25kKSBbIUlDQU5PTl0uICAqLworI2RlZmluZSBWRU9MMgkJIDYJCS8qIFNlY29uZCBFT0wgY2hhcmFjdGVyIFtJQ0FOT05dLiAgKi8KKyNkZWZpbmUgVlNXVEMJCSA3CQkvKiA/Pz8gKi8KKyNkZWZpbmUgVlNXVENICQlWU1dUQworI2RlZmluZSBWU1RBUlQJCSA4CQkvKiBTdGFydCAoWC1PTikgY2hhcmFjdGVyIFtJWE9OLCBJWE9GRl0uICAqLworI2RlZmluZSBWU1RPUAkJIDkJCS8qIFN0b3AgKFgtT0ZGKSBjaGFyYWN0ZXIgW0lYT04sIElYT0ZGXS4gICovCisjZGVmaW5lIFZTVVNQCQkxMAkJLyogU3VzcGVuZCBjaGFyYWN0ZXIgW0lTSUddLiAgKi8KKyNpZiAwCisvKgorICogVkRTVVNQIGlzIG5vdCBzdXBwb3J0ZWQKKyAqLworI2RlZmluZSBWRFNVU1AJCTExCQkvKiBEZWxheWVkIHN1c3BlbmQgY2hhcmFjdGVyIFtJU0lHXS4gICovCisjZW5kaWYKKyNkZWZpbmUgVlJFUFJJTlQJMTIJCS8qIFJlcHJpbnQtbGluZSBjaGFyYWN0ZXIgW0lDQU5PTl0uICAqLworI2RlZmluZSBWRElTQ0FSRAkxMwkJLyogRGlzY2FyZCBjaGFyYWN0ZXIgW0lFWFRFTl0uICAqLworI2RlZmluZSBWV0VSQVNFCQkxNAkJLyogV29yZC1lcmFzZSBjaGFyYWN0ZXIgW0lDQU5PTl0uICAqLworI2RlZmluZSBWTE5FWFQJCTE1CQkvKiBMaXRlcmFsLW5leHQgY2hhcmFjdGVyIFtJRVhURU5dLiAgKi8KKyNkZWZpbmUgVkVPRgkJMTYJCS8qIEVuZC1vZi1maWxlIGNoYXJhY3RlciBbSUNBTk9OXS4gICovCisjZGVmaW5lIFZFT0wJCTE3CQkvKiBFbmQtb2YtbGluZSBjaGFyYWN0ZXIgW0lDQU5PTl0uICAqLworCisvKiBjX2lmbGFnIGJpdHMgKi8KKyNkZWZpbmUgSUdOQlJLCTAwMDAwMDEJCS8qIElnbm9yZSBicmVhayBjb25kaXRpb24uICAqLworI2RlZmluZSBCUktJTlQJMDAwMDAwMgkJLyogU2lnbmFsIGludGVycnVwdCBvbiBicmVhay4gICovCisjZGVmaW5lIElHTlBBUgkwMDAwMDA0CQkvKiBJZ25vcmUgY2hhcmFjdGVycyB3aXRoIHBhcml0eSBlcnJvcnMuICAqLworI2RlZmluZSBQQVJNUksJMDAwMDAxMAkJLyogTWFyayBwYXJpdHkgYW5kIGZyYW1pbmcgZXJyb3JzLiAgKi8KKyNkZWZpbmUgSU5QQ0sJMDAwMDAyMAkJLyogRW5hYmxlIGlucHV0IHBhcml0eSBjaGVjay4gICovCisjZGVmaW5lIElTVFJJUAkwMDAwMDQwCQkvKiBTdHJpcCA4dGggYml0IG9mZiBjaGFyYWN0ZXJzLiAgKi8KKyNkZWZpbmUgSU5MQ1IJMDAwMDEwMAkJLyogTWFwIE5MIHRvIENSIG9uIGlucHV0LiAgKi8KKyNkZWZpbmUgSUdOQ1IJMDAwMDIwMAkJLyogSWdub3JlIENSLiAgKi8KKyNkZWZpbmUgSUNSTkwJMDAwMDQwMAkJLyogTWFwIENSIHRvIE5MIG9uIGlucHV0LiAgKi8KKyNkZWZpbmUgSVVDTEMJMDAwMTAwMAkJLyogTWFwIHVwcGVyIGNhc2UgdG8gbG93ZXIgY2FzZSBvbiBpbnB1dC4gICovCisjZGVmaW5lIElYT04JMDAwMjAwMAkJLyogRW5hYmxlIHN0YXJ0L3N0b3Agb3V0cHV0IGNvbnRyb2wuICAqLworI2RlZmluZSBJWEFOWQkwMDA0MDAwCQkvKiBBbnkgY2hhcmFjdGVyIHdpbGwgcmVzdGFydCBhZnRlciBzdG9wLiAgKi8KKyNkZWZpbmUgSVhPRkYJMDAxMDAwMAkJLyogRW5hYmxlIHN0YXJ0L3N0b3AgaW5wdXQgY29udHJvbC4gICovCisjZGVmaW5lIElNQVhCRUwJMDAyMDAwMAkJLyogUmluZyBiZWxsIHdoZW4gaW5wdXQgcXVldWUgaXMgZnVsbC4gICovCisjZGVmaW5lIElVVEY4CTAwNDAwMDAJCS8qIElucHV0IGlzIFVURjggKi8KKworLyogY19vZmxhZyBiaXRzICovCisjZGVmaW5lIE9QT1NUCTAwMDAwMDEJCS8qIFBlcmZvcm0gb3V0cHV0IHByb2Nlc3NpbmcuICAqLworI2RlZmluZSBPTENVQwkwMDAwMDAyCQkvKiBNYXAgbG93ZXIgY2FzZSB0byB1cHBlciBjYXNlIG9uIG91dHB1dC4gICovCisjZGVmaW5lIE9OTENSCTAwMDAwMDQJCS8qIE1hcCBOTCB0byBDUi1OTCBvbiBvdXRwdXQuICAqLworI2RlZmluZSBPQ1JOTAkwMDAwMDEwCisjZGVmaW5lIE9OT0NSCTAwMDAwMjAKKyNkZWZpbmUgT05MUkVUCTAwMDAwNDAKKyNkZWZpbmUgT0ZJTEwJMDAwMDEwMAorI2RlZmluZSBPRkRFTAkwMDAwMjAwCisjZGVmaW5lIE5MRExZCTAwMDA0MDAKKyNkZWZpbmUgICBOTDAJMDAwMDAwMAorI2RlZmluZSAgIE5MMQkwMDAwNDAwCisjZGVmaW5lIENSRExZCTAwMDMwMDAKKyNkZWZpbmUgICBDUjAJMDAwMDAwMAorI2RlZmluZSAgIENSMQkwMDAxMDAwCisjZGVmaW5lICAgQ1IyCTAwMDIwMDAKKyNkZWZpbmUgICBDUjMJMDAwMzAwMAorI2RlZmluZSBUQUJETFkJMDAxNDAwMAorI2RlZmluZSAgIFRBQjAJMDAwMDAwMAorI2RlZmluZSAgIFRBQjEJMDAwNDAwMAorI2RlZmluZSAgIFRBQjIJMDAxMDAwMAorI2RlZmluZSAgIFRBQjMJMDAxNDAwMAorI2RlZmluZSAgIFhUQUJTCTAwMTQwMDAKKyNkZWZpbmUgQlNETFkJMDAyMDAwMAorI2RlZmluZSAgIEJTMAkwMDAwMDAwCisjZGVmaW5lICAgQlMxCTAwMjAwMDAKKyNkZWZpbmUgVlRETFkJMDA0MDAwMAorI2RlZmluZSAgIFZUMAkwMDAwMDAwCisjZGVmaW5lICAgVlQxCTAwNDAwMDAKKyNkZWZpbmUgRkZETFkJMDEwMDAwMAorI2RlZmluZSAgIEZGMAkwMDAwMDAwCisjZGVmaW5lICAgRkYxCTAxMDAwMDAKKy8qCisjZGVmaW5lIFBBR0VPVVQgPz8/CisjZGVmaW5lIFdSQVAgICAgPz8/CisgKi8KKworLyogY19jZmxhZyBiaXQgbWVhbmluZyAqLworI2RlZmluZSBDQkFVRAkwMDEwMDE3CisjZGVmaW5lICBCMAkwMDAwMDAwCQkvKiBoYW5nIHVwICovCisjZGVmaW5lICBCNTAJMDAwMDAwMQorI2RlZmluZSAgQjc1CTAwMDAwMDIKKyNkZWZpbmUgIEIxMTAJMDAwMDAwMworI2RlZmluZSAgQjEzNAkwMDAwMDA0CisjZGVmaW5lICBCMTUwCTAwMDAwMDUKKyNkZWZpbmUgIEIyMDAJMDAwMDAwNgorI2RlZmluZSAgQjMwMAkwMDAwMDA3CisjZGVmaW5lICBCNjAwCTAwMDAwMTAKKyNkZWZpbmUgIEIxMjAwCTAwMDAwMTEKKyNkZWZpbmUgIEIxODAwCTAwMDAwMTIKKyNkZWZpbmUgIEIyNDAwCTAwMDAwMTMKKyNkZWZpbmUgIEI0ODAwCTAwMDAwMTQKKyNkZWZpbmUgIEI5NjAwCTAwMDAwMTUKKyNkZWZpbmUgIEIxOTIwMAkwMDAwMDE2CisjZGVmaW5lICBCMzg0MDAJMDAwMDAxNworI2RlZmluZSBFWFRBIEIxOTIwMAorI2RlZmluZSBFWFRCIEIzODQwMAorI2RlZmluZSBDU0laRQkwMDAwMDYwCQkvKiBOdW1iZXIgb2YgYml0cyBwZXIgYnl0ZSAobWFzaykuICAqLworI2RlZmluZSAgIENTNQkwMDAwMDAwCQkvKiA1IGJpdHMgcGVyIGJ5dGUuICAqLworI2RlZmluZSAgIENTNgkwMDAwMDIwCQkvKiA2IGJpdHMgcGVyIGJ5dGUuICAqLworI2RlZmluZSAgIENTNwkwMDAwMDQwCQkvKiA3IGJpdHMgcGVyIGJ5dGUuICAqLworI2RlZmluZSAgIENTOAkwMDAwMDYwCQkvKiA4IGJpdHMgcGVyIGJ5dGUuICAqLworI2RlZmluZSBDU1RPUEIJMDAwMDEwMAkJLyogVHdvIHN0b3AgYml0cyBpbnN0ZWFkIG9mIG9uZS4gICovCisjZGVmaW5lIENSRUFECTAwMDAyMDAJCS8qIEVuYWJsZSByZWNlaXZlci4gICovCisjZGVmaW5lIFBBUkVOQgkwMDAwNDAwCQkvKiBQYXJpdHkgZW5hYmxlLiAgKi8KKyNkZWZpbmUgUEFST0RECTAwMDEwMDAJCS8qIE9kZCBwYXJpdHkgaW5zdGVhZCBvZiBldmVuLiAgKi8KKyNkZWZpbmUgSFVQQ0wJMDAwMjAwMAkJLyogSGFuZyB1cCBvbiBsYXN0IGNsb3NlLiAgKi8KKyNkZWZpbmUgQ0xPQ0FMCTAwMDQwMDAJCS8qIElnbm9yZSBtb2RlbSBzdGF0dXMgbGluZXMuICAqLworI2RlZmluZSBDQkFVREVYIDAwMTAwMDAKKyNkZWZpbmUgICAgQjU3NjAwIDAwMTAwMDEKKyNkZWZpbmUgICBCMTE1MjAwIDAwMTAwMDIKKyNkZWZpbmUgICBCMjMwNDAwIDAwMTAwMDMKKyNkZWZpbmUgICBCNDYwODAwIDAwMTAwMDQKKyNkZWZpbmUgICBCNTAwMDAwIDAwMTAwMDUKKyNkZWZpbmUgICBCNTc2MDAwIDAwMTAwMDYKKyNkZWZpbmUgICBCOTIxNjAwIDAwMTAwMDcKKyNkZWZpbmUgIEIxMDAwMDAwIDAwMTAwMTAKKyNkZWZpbmUgIEIxMTUyMDAwIDAwMTAwMTEKKyNkZWZpbmUgIEIxNTAwMDAwIDAwMTAwMTIKKyNkZWZpbmUgIEIyMDAwMDAwIDAwMTAwMTMKKyNkZWZpbmUgIEIyNTAwMDAwIDAwMTAwMTQKKyNkZWZpbmUgIEIzMDAwMDAwIDAwMTAwMTUKKyNkZWZpbmUgIEIzNTAwMDAwIDAwMTAwMTYKKyNkZWZpbmUgIEI0MDAwMDAwIDAwMTAwMTcKKyNkZWZpbmUgQ0lCQVVECSAgMDAyMDAzNjAwMDAwCS8qIGlucHV0IGJhdWQgcmF0ZSAobm90IHVzZWQpICovCisjZGVmaW5lIENNU1BBUiAgICAwMTAwMDAwMDAwMDAJLyogbWFyayBvciBzcGFjZSAoc3RpY2spIHBhcml0eSAqLworI2RlZmluZSBDUlRTQ1RTCSAgMDIwMDAwMDAwMDAwCQkvKiBmbG93IGNvbnRyb2wgKi8KKworLyogY19sZmxhZyBiaXRzICovCisjZGVmaW5lIElTSUcJMDAwMDAwMQkJLyogRW5hYmxlIHNpZ25hbHMuICAqLworI2RlZmluZSBJQ0FOT04JMDAwMDAwMgkJLyogRG8gZXJhc2UgYW5kIGtpbGwgcHJvY2Vzc2luZy4gICovCisjZGVmaW5lIFhDQVNFCTAwMDAwMDQKKyNkZWZpbmUgRUNITwkwMDAwMDEwCQkvKiBFbmFibGUgZWNoby4gICovCisjZGVmaW5lIEVDSE9FCTAwMDAwMjAJCS8qIFZpc3VhbCBlcmFzZSBmb3IgRVJBU0UuICAqLworI2RlZmluZSBFQ0hPSwkwMDAwMDQwCQkvKiBFY2hvIE5MIGFmdGVyIEtJTEwuICAqLworI2RlZmluZSBFQ0hPTkwJMDAwMDEwMAkJLyogRWNobyBOTCBldmVuIGlmIEVDSE8gaXMgb2ZmLiAgKi8KKyNkZWZpbmUgTk9GTFNICTAwMDAyMDAJCS8qIERpc2FibGUgZmx1c2ggYWZ0ZXIgaW50ZXJydXB0LiAgKi8KKyNkZWZpbmUgSUVYVEVOCTAwMDA0MDAJCS8qIEVuYWJsZSBESVNDQVJEIGFuZCBMTkVYVC4gICovCisjZGVmaW5lIEVDSE9DVEwJMDAwMTAwMAkJLyogRWNobyBjb250cm9sIGNoYXJhY3RlcnMgYXMgXlguICAqLworI2RlZmluZSBFQ0hPUFJUCTAwMDIwMDAJCS8qIEhhcmRjb3B5IHZpc3VhbCBlcmFzZS4gICovCisjZGVmaW5lIEVDSE9LRQkwMDA0MDAwCQkvKiBWaXN1YWwgZXJhc2UgZm9yIEtJTEwuICAqLworI2RlZmluZSBGTFVTSE8JMDAyMDAwMAorI2RlZmluZSBQRU5ESU4JMDA0MDAwMAkJLyogUmV0eXBlIHBlbmRpbmcgaW5wdXQgKHN0YXRlKS4gICovCisjZGVmaW5lIFRPU1RPUAkwMTAwMDAwCQkvKiBTZW5kIFNJR1RUT1UgZm9yIGJhY2tncm91bmQgb3V0cHV0LiAgKi8KKyNkZWZpbmUgSVRPU1RPUAlUT1NUT1AKKworLyogaW9jdGwgKGZkLCBUSU9DU0VSR0VUTFNSLCAmcmVzdWx0KSB3aGVyZSByZXN1bHQgbWF5IGJlIGFzIGJlbG93ICovCisjZGVmaW5lIFRJT0NTRVJfVEVNVCAgICAweDAxCS8qIFRyYW5zbWl0dGVyIHBoeXNpY2FsbHkgZW1wdHkgKi8KKworLyogdGNmbG93KCkgYW5kIFRDWE9OQyB1c2UgdGhlc2UgKi8KKyNkZWZpbmUJVENPT0ZGCQkwCS8qIFN1c3BlbmQgb3V0cHV0LiAgKi8KKyNkZWZpbmUJVENPT04JCTEJLyogUmVzdGFydCBzdXNwZW5kZWQgb3V0cHV0LiAgKi8KKyNkZWZpbmUJVENJT0ZGCQkyCS8qIFNlbmQgYSBTVE9QIGNoYXJhY3Rlci4gICovCisjZGVmaW5lCVRDSU9OCQkzCS8qIFNlbmQgYSBTVEFSVCBjaGFyYWN0ZXIuICAqLworCisvKiB0Y2ZsdXNoKCkgYW5kIFRDRkxTSCB1c2UgdGhlc2UgKi8KKyNkZWZpbmUJVENJRkxVU0gJMAkvKiBEaXNjYXJkIGRhdGEgcmVjZWl2ZWQgYnV0IG5vdCB5ZXQgcmVhZC4gICovCisjZGVmaW5lCVRDT0ZMVVNICTEJLyogRGlzY2FyZCBkYXRhIHdyaXR0ZW4gYnV0IG5vdCB5ZXQgc2VudC4gICovCisjZGVmaW5lCVRDSU9GTFVTSAkyCS8qIERpc2NhcmQgYWxsIHBlbmRpbmcgZGF0YS4gICovCisKKy8qIHRjc2V0YXR0ciB1c2VzIHRoZXNlICovCisjZGVmaW5lCVRDU0FOT1cJCVRDU0VUUwkvKiBDaGFuZ2UgaW1tZWRpYXRlbHkuICAqLworI2RlZmluZQlUQ1NBRFJBSU4JVENTRVRTVwkvKiBDaGFuZ2Ugd2hlbiBwZW5kaW5nIG91dHB1dCBpcyB3cml0dGVuLiAgKi8KKyNkZWZpbmUJVENTQUZMVVNICVRDU0VUU0YJLyogRmx1c2ggcGVuZGluZyBpbnB1dCBiZWZvcmUgY2hhbmdpbmcuICAqLworCisjZW5kaWYgLyogX0FTTV9URVJNQklUU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3Rlcm1pb3MuaCBiL2luY2x1ZGUvYXNtLW1pcHMvdGVybWlvcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5MDYyMDQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3Rlcm1pb3MuaApAQCAtMCwwICsxLDE0OCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiwgMjAwMCwgMjAwMSBieSBSYWxmIEJhZWNobGUKKyAqIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCisgKi8KKyNpZm5kZWYgX0FTTV9URVJNSU9TX0gKKyNkZWZpbmUgX0FTTV9URVJNSU9TX0gKKworI2luY2x1ZGUgPGFzbS90ZXJtYml0cy5oPgorI2luY2x1ZGUgPGFzbS9pb2N0bHMuaD4KKworc3RydWN0IHNndHR5YiB7CisJY2hhcglzZ19pc3BlZWQ7CisJY2hhcglzZ19vc3BlZWQ7CisJY2hhcglzZ19lcmFzZTsKKwljaGFyCXNnX2tpbGw7CisJaW50CXNnX2ZsYWdzOwkvKiBTR0kgc3BlY2lhbCAtIGludCwgbm90IHNob3J0ICovCit9OworCitzdHJ1Y3QgdGNoYXJzIHsKKwljaGFyCXRfaW50cmM7CisJY2hhcgl0X3F1aXRjOworCWNoYXIJdF9zdGFydGM7CisJY2hhcgl0X3N0b3BjOworCWNoYXIJdF9lb2ZjOworCWNoYXIJdF9icmtjOworfTsKKworc3RydWN0IGx0Y2hhcnMgeworICAgICAgICBjaGFyICAgIHRfc3VzcGM7ICAgICAgICAvKiBzdG9wIHByb2Nlc3Mgc2lnbmFsICovCisgICAgICAgIGNoYXIgICAgdF9kc3VzcGM7ICAgICAgIC8qIGRlbGF5ZWQgc3RvcCBwcm9jZXNzIHNpZ25hbCAqLworICAgICAgICBjaGFyICAgIHRfcnBybnRjOyAgICAgICAvKiByZXByaW50IGxpbmUgKi8KKyAgICAgICAgY2hhciAgICB0X2ZsdXNoYzsgICAgICAgLyogZmx1c2ggb3V0cHV0ICh0b2dnbGVzKSAqLworICAgICAgICBjaGFyICAgIHRfd2VyYXNjOyAgICAgICAvKiB3b3JkIGVyYXNlICovCisgICAgICAgIGNoYXIgICAgdF9sbmV4dGM7ICAgICAgIC8qIGxpdGVyYWwgbmV4dCBjaGFyYWN0ZXIgKi8KK307CisKKy8qIFRJT0NHU0laRSwgVElPQ1NTSVpFIG5vdCBkZWZpbmVkIHlldC4gIE9ubHkgbmVlZGVkIGZvciBTdW5PUyBzb3VyY2UKKyAgIGNvbXBhdGliaWxpdHkgYW55d2F5IC4uLiAqLworCitzdHJ1Y3Qgd2luc2l6ZSB7CisJdW5zaWduZWQgc2hvcnQgd3Nfcm93OworCXVuc2lnbmVkIHNob3J0IHdzX2NvbDsKKwl1bnNpZ25lZCBzaG9ydCB3c194cGl4ZWw7CisJdW5zaWduZWQgc2hvcnQgd3NfeXBpeGVsOworfTsKKworI2RlZmluZSBOQ0MJOAorc3RydWN0IHRlcm1pbyB7CisJdW5zaWduZWQgc2hvcnQgY19pZmxhZzsJCS8qIGlucHV0IG1vZGUgZmxhZ3MgKi8KKwl1bnNpZ25lZCBzaG9ydCBjX29mbGFnOwkJLyogb3V0cHV0IG1vZGUgZmxhZ3MgKi8KKwl1bnNpZ25lZCBzaG9ydCBjX2NmbGFnOwkJLyogY29udHJvbCBtb2RlIGZsYWdzICovCisJdW5zaWduZWQgc2hvcnQgY19sZmxhZzsJCS8qIGxvY2FsIG1vZGUgZmxhZ3MgKi8KKwljaGFyIGNfbGluZTsJCQkvKiBsaW5lIGRpc2NpcGxpbmUgKi8KKwl1bnNpZ25lZCBjaGFyIGNfY2NbTkNDU107CS8qIGNvbnRyb2wgY2hhcmFjdGVycyAqLworfTsKKworI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworLyoKKyAqCWludHI9XkMJCXF1aXQ9XlwJCWVyYXNlPWRlbAlraWxsPV5VCisgKgl2bWluPVwxCQl2dGltZT1cMAllb2wyPVwwCQlzd3RjPVwwCisgKglzdGFydD1eUQlzdG9wPV5TCQlzdXNwPV5aCQl2ZHN1c3A9CisgKglyZXByaW50PV5SCWRpc2NhcmQ9XlUJd2VyYXNlPV5XCWxuZXh0PV5WCisgKgllb2Y9XkQJCWVvbD1cMAorICovCisjZGVmaW5lIElOSVRfQ19DQyAiXDAwM1wwMzRcMTc3XDAyNVwxXDBcMFwwXDAyMVwwMjNcMDMyXDBcMDIyXDAxN1wwMjdcMDI2XDAwNFwwIgorI2VuZGlmCisKKy8qIG1vZGVtIGxpbmVzICovCisjZGVmaW5lIFRJT0NNX0xFCTB4MDAxCQkvKiBsaW5lIGVuYWJsZSAqLworI2RlZmluZSBUSU9DTV9EVFIJMHgwMDIJCS8qIGRhdGEgdGVybWluYWwgcmVhZHkgKi8KKyNkZWZpbmUgVElPQ01fUlRTCTB4MDA0CQkvKiByZXF1ZXN0IHRvIHNlbmQgKi8KKyNkZWZpbmUgVElPQ01fU1QJMHgwMTAJCS8qIHNlY29uZGFyeSB0cmFuc21pdCAqLworI2RlZmluZSBUSU9DTV9TUgkweDAyMAkJLyogc2Vjb25kYXJ5IHJlY2VpdmUgKi8KKyNkZWZpbmUgVElPQ01fQ1RTCTB4MDQwCQkvKiBjbGVhciB0byBzZW5kICovCisjZGVmaW5lIFRJT0NNX0NBUgkweDEwMAkJLyogY2FycmllciBkZXRlY3QgKi8KKyNkZWZpbmUgVElPQ01fQ0QJVElPQ01fQ0FSCisjZGVmaW5lIFRJT0NNX1JORwkweDIwMAkJLyogcmluZyAqLworI2RlZmluZSBUSU9DTV9SSQlUSU9DTV9STkcKKyNkZWZpbmUgVElPQ01fRFNSCTB4NDAwCQkvKiBkYXRhIHNldCByZWFkeSAqLworI2RlZmluZSBUSU9DTV9PVVQxCTB4MjAwMAorI2RlZmluZSBUSU9DTV9PVVQyCTB4NDAwMAorI2RlZmluZSBUSU9DTV9MT09QCTB4ODAwMAorCisvKiBsaW5lIGRpc2NpcGxpbmVzICovCisjZGVmaW5lIE5fVFRZCQkwCisjZGVmaW5lIE5fU0xJUAkJMQorI2RlZmluZSBOX01PVVNFCQkyCisjZGVmaW5lIE5fUFBQCQkzCisjZGVmaW5lIE5fU1RSSVAJCTQKKyNkZWZpbmUgTl9BWDI1CQk1CisjZGVmaW5lIE5fWDI1CQk2CQkvKiBYLjI1IGFzeW5jICovCisjZGVmaW5lIE5fNlBBQ0sJCTcKKyNkZWZpbmUgTl9NQVNDCQk4CS8qIFJlc2VydmVkIGZvIE1vYml0ZXggbW9kdWxlIDxrYXpAY2FmZS5uZXQ+ICovCisjZGVmaW5lIE5fUjM5NjQJCTkJLyogUmVzZXJ2ZWQgZm9yIFNpbWF0aWMgUjM5NjQgbW9kdWxlICovCisjZGVmaW5lIE5fUFJPRklCVVNfRkRMCTEwCS8qIFJlc2VydmVkIGZvciBQcm9maWJ1cyA8RGF2ZUBtdmhpLmNvbT4gKi8KKyNkZWZpbmUgTl9JUkRBCQkxMQkvKiBMaW51eCBJckRhIC0gaHR0cDovL2lyZGEuc291cmNlZm9yZ2UubmV0LyAqLworI2RlZmluZSBOX1NNU0JMT0NLCTEyCS8qIFNNUyBibG9jayBtb2RlIC0gZm9yIHRhbGtpbmcgdG8gR1NNIGRhdGEgY2FyZHMgYWJvdXQgU01TIG1lc3NhZ2VzICovCisjZGVmaW5lIE5fSERMQwkJMTMJLyogc3luY2hyb25vdXMgSERMQyAqLworI2RlZmluZSBOX1NZTkNfUFBQCTE0CS8qIHN5bmNocm9ub3VzIFBQUCAqLworI2RlZmluZSBOX0hDSQkJMTUJLyogQmx1ZXRvb3RoIEhDSSBVQVJUICovCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKworLyoKKyAqIFRyYW5zbGF0ZSBhICJ0ZXJtaW8iIHN0cnVjdHVyZSBpbnRvIGEgInRlcm1pb3MiLiBVZ2guCisgKi8KKyNkZWZpbmUgdXNlcl90ZXJtaW9fdG9fa2VybmVsX3Rlcm1pb3ModGVybWlvcywgdGVybWlvKSBcCisoeyBcCisJdW5zaWduZWQgc2hvcnQgdG1wOyBcCisJZ2V0X3VzZXIodG1wLCAmKHRlcm1pbyktPmNfaWZsYWcpOyBcCisJKHRlcm1pb3MpLT5jX2lmbGFnID0gKDB4ZmZmZjAwMDAgJiAoKHRlcm1pb3MpLT5jX2lmbGFnKSkgfCB0bXA7IFwKKwlnZXRfdXNlcih0bXAsICYodGVybWlvKS0+Y19vZmxhZyk7IFwKKwkodGVybWlvcyktPmNfb2ZsYWcgPSAoMHhmZmZmMDAwMCAmICgodGVybWlvcyktPmNfb2ZsYWcpKSB8IHRtcDsgXAorCWdldF91c2VyKHRtcCwgJih0ZXJtaW8pLT5jX2NmbGFnKTsgXAorCSh0ZXJtaW9zKS0+Y19jZmxhZyA9ICgweGZmZmYwMDAwICYgKCh0ZXJtaW9zKS0+Y19jZmxhZykpIHwgdG1wOyBcCisJZ2V0X3VzZXIodG1wLCAmKHRlcm1pbyktPmNfbGZsYWcpOyBcCisJKHRlcm1pb3MpLT5jX2xmbGFnID0gKDB4ZmZmZjAwMDAgJiAoKHRlcm1pb3MpLT5jX2xmbGFnKSkgfCB0bXA7IFwKKwlnZXRfdXNlcigodGVybWlvcyktPmNfbGluZSwgJih0ZXJtaW8pLT5jX2xpbmUpOyBcCisJY29weV9mcm9tX3VzZXIoKHRlcm1pb3MpLT5jX2NjLCAodGVybWlvKS0+Y19jYywgTkNDKTsgXAorfSkKKworLyoKKyAqIFRyYW5zbGF0ZSBhICJ0ZXJtaW9zIiBzdHJ1Y3R1cmUgaW50byBhICJ0ZXJtaW8iLiBVZ2guCisgKi8KKyNkZWZpbmUga2VybmVsX3Rlcm1pb3NfdG9fdXNlcl90ZXJtaW8odGVybWlvLCB0ZXJtaW9zKSBcCisoeyBcCisJcHV0X3VzZXIoKHRlcm1pb3MpLT5jX2lmbGFnLCAmKHRlcm1pbyktPmNfaWZsYWcpOyBcCisJcHV0X3VzZXIoKHRlcm1pb3MpLT5jX29mbGFnLCAmKHRlcm1pbyktPmNfb2ZsYWcpOyBcCisJcHV0X3VzZXIoKHRlcm1pb3MpLT5jX2NmbGFnLCAmKHRlcm1pbyktPmNfY2ZsYWcpOyBcCisJcHV0X3VzZXIoKHRlcm1pb3MpLT5jX2xmbGFnLCAmKHRlcm1pbyktPmNfbGZsYWcpOyBcCisJcHV0X3VzZXIoKHRlcm1pb3MpLT5jX2xpbmUsICYodGVybWlvKS0+Y19saW5lKTsgXAorCWNvcHlfdG9fdXNlcigodGVybWlvKS0+Y19jYywgKHRlcm1pb3MpLT5jX2NjLCBOQ0MpOyBcCit9KQorCisjZGVmaW5lIHVzZXJfdGVybWlvc190b19rZXJuZWxfdGVybWlvcyhrLCB1KSBjb3B5X2Zyb21fdXNlcihrLCB1LCBzaXplb2Yoc3RydWN0IHRlcm1pb3MpKQorI2RlZmluZSBrZXJuZWxfdGVybWlvc190b191c2VyX3Rlcm1pb3ModSwgaykgY29weV90b191c2VyKHUsIGssIHNpemVvZihzdHJ1Y3QgdGVybWlvcykpCisKKyNlbmRpZiAvKiBkZWZpbmVkKF9fS0VSTkVMX18pICovCisKKyNlbmRpZiAvKiBfQVNNX1RFUk1JT1NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy90aHJlYWRfaW5mby5oIGIvaW5jbHVkZS9hc20tbWlwcy90aHJlYWRfaW5mby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2ODkwMDMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3RocmVhZF9pbmZvLmgKQEAgLTAsMCArMSwxMzcgQEAKKy8qIHRocmVhZF9pbmZvLmg6IE1JUFMgbG93LWxldmVsIHRocmVhZCBpbmZvcm1hdGlvbgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMiAgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqIC0gSW5jb3Jwb3JhdGluZyBzdWdnZXN0aW9ucyBtYWRlIGJ5IExpbnVzIFRvcnZhbGRzIGFuZCBEYXZlIE1pbGxlcgorICovCisKKyNpZm5kZWYgX0FTTV9USFJFQURfSU5GT19ICisjZGVmaW5lIF9BU01fVEhSRUFEX0lORk9fSAorCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisKKy8qCisgKiBsb3cgbGV2ZWwgdGFzayBkYXRhIHRoYXQgZW50cnkuUyBuZWVkcyBpbW1lZGlhdGUgYWNjZXNzIHRvCisgKiAtIHRoaXMgc3RydWN0IHNob3VsZCBmaXQgZW50aXJlbHkgaW5zaWRlIG9mIG9uZSBjYWNoZSBsaW5lCisgKiAtIHRoaXMgc3RydWN0IHNoYXJlcyB0aGUgc3VwZXJ2aXNvciBzdGFjayBwYWdlcworICogLSBpZiB0aGUgY29udGVudHMgb2YgdGhpcyBzdHJ1Y3R1cmUgYXJlIGNoYW5nZWQsIHRoZSBhc3NlbWJseSBjb25zdGFudHMKKyAqICAgbXVzdCBhbHNvIGJlIGNoYW5nZWQKKyAqLworc3RydWN0IHRocmVhZF9pbmZvIHsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QJKnRhc2s7CQkvKiBtYWluIHRhc2sgc3RydWN0dXJlICovCisJc3RydWN0IGV4ZWNfZG9tYWluCSpleGVjX2RvbWFpbjsJLyogZXhlY3V0aW9uIGRvbWFpbiAqLworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwkJLyogbG93IGxldmVsIGZsYWdzICovCisJX191MzIJCQljcHU7CQkvKiBjdXJyZW50IENQVSAqLworCV9fczMyCQkJcHJlZW1wdF9jb3VudDsgLyogMCA9PiBwcmVlbXB0YWJsZSwgPDAgPT4gQlVHICovCisKKwltbV9zZWdtZW50X3QJCWFkZHJfbGltaXQ7CS8qIHRocmVhZCBhZGRyZXNzIHNwYWNlOgorCQkJCQkgCSAgIDAtMHhCRkZGRkZGRiBmb3IgdXNlci10aGVhZAorCQkJCQkJICAgMC0weEZGRkZGRkZGIGZvciBrZXJuZWwtdGhyZWFkCisJCQkJCQkqLworCXN0cnVjdCByZXN0YXJ0X2Jsb2NrCXJlc3RhcnRfYmxvY2s7Cit9OworCisvKgorICogbWFjcm9zL2Z1bmN0aW9ucyBmb3IgZ2FpbmluZyBhY2Nlc3MgdG8gdGhlIHRocmVhZCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUKKyAqCisgKiBwcmVlbXB0X2NvdW50IG5lZWRzIHRvIGJlIDEgaW5pdGlhbGx5LCB1bnRpbCB0aGUgc2NoZWR1bGVyIGlzIGZ1bmN0aW9uYWwuCisgKi8KKyNkZWZpbmUgSU5JVF9USFJFQURfSU5GTyh0c2spCQkJXAorewkJCQkJCVwKKwkudGFzawkJPSAmdHNrLAkJCVwKKwkuZXhlY19kb21haW4JPSAmZGVmYXVsdF9leGVjX2RvbWFpbiwJXAorCS5mbGFncwkJPSAwLAkJCVwKKwkuY3B1CQk9IDAsCQkJXAorCS5wcmVlbXB0X2NvdW50CT0gMSwJCQlcCisJLmFkZHJfbGltaXQJPSBLRVJORUxfRFMsCQlcCisJLnJlc3RhcnRfYmxvY2sJPSB7CQkJXAorCQkuZm4gPSBkb19ub19yZXN0YXJ0X3N5c2NhbGwsCVwKKwl9LAkJCQkJXAorfQorCisjZGVmaW5lIGluaXRfdGhyZWFkX2luZm8JKGluaXRfdGhyZWFkX3VuaW9uLnRocmVhZF9pbmZvKQorI2RlZmluZSBpbml0X3N0YWNrCQkoaW5pdF90aHJlYWRfdW5pb24uc3RhY2spCisKKy8qIEhvdyB0byBnZXQgdGhlIHRocmVhZCBpbmZvcm1hdGlvbiBzdHJ1Y3QgZnJvbSBDLiAgKi8KK3JlZ2lzdGVyIHN0cnVjdCB0aHJlYWRfaW5mbyAqX19jdXJyZW50X3RocmVhZF9pbmZvIF9fYXNtX18oIiQyOCIpOworI2RlZmluZSBjdXJyZW50X3RocmVhZF9pbmZvKCkgIF9fY3VycmVudF90aHJlYWRfaW5mbworCisvKiB0aHJlYWQgaW5mb3JtYXRpb24gYWxsb2NhdGlvbiAqLworI2lmIGRlZmluZWQoQ09ORklHX1BBR0VfU0laRV80S0IpICYmIGRlZmluZWQoQ09ORklHX01JUFMzMikKKyNkZWZpbmUgVEhSRUFEX1NJWkVfT1JERVIgKDEpCisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19QQUdFX1NJWkVfNEtCKSAmJiBkZWZpbmVkKENPTkZJR19NSVBTNjQpCisjZGVmaW5lIFRIUkVBRF9TSVpFX09SREVSICgyKQorI2VuZGlmCisjaWZkZWYgQ09ORklHX1BBR0VfU0laRV84S0IKKyNkZWZpbmUgVEhSRUFEX1NJWkVfT1JERVIgKDEpCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfUEFHRV9TSVpFXzE2S0IKKyNkZWZpbmUgVEhSRUFEX1NJWkVfT1JERVIgKDApCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfUEFHRV9TSVpFXzY0S0IKKyNkZWZpbmUgVEhSRUFEX1NJWkVfT1JERVIgKDApCisjZW5kaWYKKworI2RlZmluZSBUSFJFQURfU0laRSAoUEFHRV9TSVpFIDw8IFRIUkVBRF9TSVpFX09SREVSKQorI2RlZmluZSBUSFJFQURfTUFTSyAoVEhSRUFEX1NJWkUgLSAxVUwpCisKKyNpZmRlZiBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UKKyNkZWZpbmUgYWxsb2NfdGhyZWFkX2luZm8odHNrKQkJCQkJXAorKHsJCQkJCQkJCVwKKwlzdHJ1Y3QgdGhyZWFkX2luZm8gKnJldDsJCQkJXAorCQkJCQkJCQlcCisJcmV0ID0ga21hbGxvYyhUSFJFQURfU0laRSwgR0ZQX0tFUk5FTCk7CQkJXAorCWlmIChyZXQpCQkJCQkJXAorCQltZW1zZXQocmV0LCAwLCBUSFJFQURfU0laRSk7CQkJXAorCXJldDsJCQkJCQkJXAorfSkKKyNlbHNlCisjZGVmaW5lIGFsbG9jX3RocmVhZF9pbmZvKHRzaykga21hbGxvYyhUSFJFQURfU0laRSwgR0ZQX0tFUk5FTCkKKyNlbmRpZgorCisjZGVmaW5lIGZyZWVfdGhyZWFkX2luZm8oaW5mbykga2ZyZWUoaW5mbykKKyNkZWZpbmUgZ2V0X3RocmVhZF9pbmZvKHRpKSBnZXRfdGFza19zdHJ1Y3QoKHRpKS0+dGFzaykKKyNkZWZpbmUgcHV0X3RocmVhZF9pbmZvKHRpKSBwdXRfdGFza19zdHJ1Y3QoKHRpKS0+dGFzaykKKworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKworI2RlZmluZSBQUkVFTVBUX0FDVElWRQkJMHgxMDAwMDAwMAorCisvKgorICogdGhyZWFkIGluZm9ybWF0aW9uIGZsYWdzCisgKiAtIHRoZXNlIGFyZSBwcm9jZXNzIHN0YXRlIGZsYWdzIHRoYXQgdmFyaW91cyBhc3NlbWJseSBmaWxlcyBtYXkgbmVlZCB0bworICogICBhY2Nlc3MKKyAqIC0gcGVuZGluZyB3b3JrLXRvLWJlLWRvbmUgZmxhZ3MgYXJlIGluIExTVworICogLSBvdGhlciBmbGFncyBpbiBNU1cKKyAqLworI2RlZmluZSBUSUZfTk9USUZZX1JFU1VNRQkxCS8qIHJlc3VtcHRpb24gbm90aWZpY2F0aW9uIHJlcXVlc3RlZCAqLworI2RlZmluZSBUSUZfU0lHUEVORElORwkJMgkvKiBzaWduYWwgcGVuZGluZyAqLworI2RlZmluZSBUSUZfTkVFRF9SRVNDSEVECTMJLyogcmVzY2hlZHVsaW5nIG5lY2Vzc2FyeSAqLworI2RlZmluZSBUSUZfU1lTQ0FMTF9BVURJVAk0CS8qIHN5c2NhbGwgYXVkaXRpbmcgYWN0aXZlICovCisjZGVmaW5lIFRJRl9VU0VERlBVCQkxNgkvKiBGUFUgd2FzIHVzZWQgYnkgdGhpcyB0YXNrIHRoaXMgcXVhbnR1bSAoU01QKSAqLworI2RlZmluZSBUSUZfUE9MTElOR19OUkZMQUcJMTcJLyogdHJ1ZSBpZiBwb2xsX2lkbGUoKSBpcyBwb2xsaW5nIFRJRl9ORUVEX1JFU0NIRUQgKi8KKyNkZWZpbmUgVElGX01FTURJRQkJMTgKKyNkZWZpbmUgVElGX1NZU0NBTExfVFJBQ0UJMzEJLyogc3lzY2FsbCB0cmFjZSBhY3RpdmUgKi8KKworI2RlZmluZSBfVElGX1NZU0NBTExfVFJBQ0UJKDE8PFRJRl9TWVNDQUxMX1RSQUNFKQorI2RlZmluZSBfVElGX05PVElGWV9SRVNVTUUJKDE8PFRJRl9OT1RJRllfUkVTVU1FKQorI2RlZmluZSBfVElGX1NJR1BFTkRJTkcJCSgxPDxUSUZfU0lHUEVORElORykKKyNkZWZpbmUgX1RJRl9ORUVEX1JFU0NIRUQJKDE8PFRJRl9ORUVEX1JFU0NIRUQpCisjZGVmaW5lIF9USUZfU1lTQ0FMTF9BVURJVAkoMTw8VElGX1NZU0NBTExfQVVESVQpCisjZGVmaW5lIF9USUZfVVNFREZQVQkJKDE8PFRJRl9VU0VERlBVKQorI2RlZmluZSBfVElGX1BPTExJTkdfTlJGTEFHCSgxPDxUSUZfUE9MTElOR19OUkZMQUcpCisKKyNkZWZpbmUgX1RJRl9XT1JLX01BU0sJCTB4MDAwMGZmZWYJLyogd29yayB0byBkbyBvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0L2V4Y2VwdGlvbiByZXR1cm4gKi8KKyNkZWZpbmUgX1RJRl9BTExXT1JLX01BU0sJMHg4MDAwZmZmZgkvKiB3b3JrIHRvIGRvIG9uIGFueSByZXR1cm4gdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUtc3BhY2UgKi8KKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9BU01fVEhSRUFEX0lORk9fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy90aW1lLmggYi9pbmNsdWRlL2FzbS1taXBzL3RpbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjJhMjA2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy90aW1lLmgKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCisgKiBBdXRob3I6IEp1biBTdW4sIGpzdW5AbXZpc3RhLmNvbSBvciBqc3VuQGp1bnN1bi5uZXQKKyAqIENvcHlyaWdodCAoYykgMjAwMyAgTWFjaWVqIFcuIFJvenlja2kKKyAqCisgKiBpbmNsdWRlL2FzbS1taXBzL3RpbWUuaAorICogICAgIGhlYWRlciBmaWxlIGZvciB0aGUgbmV3IHN0eWxlIHRpbWUuYyBmaWxlIGFuZCB0aW1lIHNlcnZpY2VzLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogUGxlYXNlIHJlZmVyIHRvIERvY3VtZW50YXRpb24vbWlwcy90aW1lLlJFQURNRS4KKyAqLworI2lmbmRlZiBfQVNNX1RJTUVfSAorI2RlZmluZSBfQVNNX1RJTUVfSAorCisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgorCisvKgorICogUlRDIG9wcy4gIEJ5IGRlZmF1bHQsIHRoZXkgcG9pbnQgdG8gbm8tUlRDIGZ1bmN0aW9ucy4KKyAqCXJ0Y19nZXRfdGltZSAtIG1rdGltZSh5ZWFyLCBtb24sIGRheSwgaG91ciwgbWluLCBzZWMpIGluIHNlY29uZHMuCisgKglydGNfc2V0X3RpbWUgLSByZXZlcnNlIHRoZSBhYm92ZSB0cmFuc2xhdGlvbiBhbmQgc2V0IHRpbWUgdG8gUlRDLgorICoJcnRjX3NldF9tbXNzIC0gc2ltaWxhciB0byBydGNfc2V0X3RpbWUsIGJ1dCBvbmx5IG1pbiBhbmQgc2VjIG5lZWQKKyAqCQkJdG8gYmUgc2V0LiAgVXNlZCBieSBSVEMgc3luYy11cC4KKyAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgKCpydGNfZ2V0X3RpbWUpKHZvaWQpOworZXh0ZXJuIGludCAoKnJ0Y19zZXRfdGltZSkodW5zaWduZWQgbG9uZyk7CitleHRlcm4gaW50ICgqcnRjX3NldF9tbXNzKSh1bnNpZ25lZCBsb25nKTsKKworLyoKKyAqIFRpbWVyIGludGVycnVwdCBmdW5jdGlvbnMuCisgKiBtaXBzX3RpbWVyX3N0YXRlIGlzIG5lZWRlZCBmb3IgaGlnaCBwcmVjaXNpb24gdGltZXIgY2FsaWJyYXRpb24uCisgKiBtaXBzX3RpbWVyX2FjayBtYXkgYmUgTlVMTCBpZiB0aGUgaW50ZXJydXB0IGlzIHNlbGYtcmVjb3ZlcmFibGUuCisgKi8KK2V4dGVybiBpbnQgKCptaXBzX3RpbWVyX3N0YXRlKSh2b2lkKTsKK2V4dGVybiB2b2lkICgqbWlwc190aW1lcl9hY2spKHZvaWQpOworCisvKgorICogSGlnaCBwcmVjaXNpb24gdGltZXIgZnVuY3Rpb25zLgorICogSWYgbWlwc19ocHRfcmVhZCBpcyBOVUxMLCBhbiBSNGstY29tcGF0aWJsZSB0aW1lciBzZXR1cCBpcyBhdHRlbXB0ZWQuCisgKi8KK2V4dGVybiB1bnNpZ25lZCBpbnQgKCptaXBzX2hwdF9yZWFkKSh2b2lkKTsKK2V4dGVybiB2b2lkICgqbWlwc19ocHRfaW5pdCkodW5zaWduZWQgaW50KTsKKworLyoKKyAqIHRvX3RtKCkgY29udmVydHMgc3lzdGVtIHRpbWUgYmFjayB0byAoeWVhciwgbW9uLCBkYXksIGhvdXIsIG1pbiwgc2VjKS4KKyAqIEl0IGlzIGludGVuZGVkIHRvIGhlbHAgaW1wbGVtZW50IHJ0Y19zZXRfdGltZSgpIGZ1bmN0aW9ucy4KKyAqIENvcGllZCBmcm9tIFBQQyBpbXBsZW1lbnRhdGlvbi4KKyAqLworZXh0ZXJuIHZvaWQgdG9fdG0odW5zaWduZWQgbG9uZyB0aW0sIHN0cnVjdCBydGNfdGltZSAqdG0pOworCisvKgorICogZG9fZ2V0dGltZW9mZnNldCgpLiBCeSBkZWZhdWx0LCB0aGlzIGZ1bmMgcG9pbnRlciBwb2ludHMgdG8KKyAqIGRvX251bGxfZ2V0dGltZW9mZnNldCgpLCB3aGljaCBsZWFkcyB0byB0aGUgc2FtZSByZXNvbHV0aW9uIGFzIEhaLgorICogSGlnaGVyIHJlc29sdXRpb24gdmVyc2lvbnMgYXJlIGF2YWlsYWJsZSwgd2hpY2ggZ2l2ZSB+MXVzIHJlc29sdXRpb24uCisgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nICgqZG9fZ2V0dGltZW9mZnNldCkodm9pZCk7CisKKy8qCisgKiBoaWdoLWxldmVsIHRpbWVyIGludGVycnVwdCByb3V0aW5lcy4KKyAqLworZXh0ZXJuIGlycXJldHVybl90IHRpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworLyoKKyAqIHRoZSBjb3JyZXNwb25kaW5nIGxvdy1sZXZlbCB0aW1lciBpbnRlcnJ1cHQgcm91dGluZS4KKyAqLworZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBsbF90aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCisvKgorICogcHJvZmlsaW5nIGFuZCBwcm9jZXNzIGFjY291dGluZyBpcyBkb25lIHNlcGFyYXRlbHkgaW4gbG9jYWxfdGltZXJfaW50ZXJydXB0CisgKi8KK2V4dGVybiB2b2lkIGxvY2FsX3RpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2V4dGVybiBhc21saW5rYWdlIHZvaWQgbGxfbG9jYWxfdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworLyoKKyAqIGJvYXJkIHNwZWNpZmljIHJvdXRpbmVzIHJlcXVpcmVkIGJ5IHRpbWVfaW5pdCgpLgorICogYm9hcmRfdGltZV9pbml0IGlzIGRlZmF1bHRlZCB0byBOVUxMIGFuZCBjYW4gcmVtYWluIHNvLgorICogYm9hcmRfdGltZXJfc2V0dXAgbXVzdCBiZSBzZXR1cCBwcm9wZXJseSBpbiBtYWNoaW5lIHNldHVwIHJvdXRpbmUuCisgKi8KK3N0cnVjdCBpcnFhY3Rpb247CitleHRlcm4gdm9pZCAoKmJvYXJkX3RpbWVfaW5pdCkodm9pZCk7CitleHRlcm4gdm9pZCAoKmJvYXJkX3RpbWVyX3NldHVwKShzdHJ1Y3QgaXJxYWN0aW9uICppcnEpOworCisvKgorICogbWlwc19ocHRfZnJlcXVlbmN5IC0gbXVzdCBiZSBzZXQgaWYgeW91IGludGVuZCB0byB1c2UgYW4gUjRrLWNvbXBhdGlibGUKKyAqIGNvdW50ZXIgYXMgYSB0aW1lciBpbnRlcnJ1cHQgc291cmNlOyBvdGhlcndpc2UgaXQgY2FuIGJlIHNldCB1cAorICogYXV0b21hZ2ljYWxseSB3aXRoIGFuIGFpZCBvZiBtaXBzX3RpbWVyX3N0YXRlLgorICovCitleHRlcm4gdW5zaWduZWQgaW50IG1pcHNfaHB0X2ZyZXF1ZW5jeTsKKworI2VuZGlmIC8qIF9BU01fVElNRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3RpbWV4LmggYi9pbmNsdWRlL2FzbS1taXBzL3RpbWV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThhYTczNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvdGltZXguaApAQCAtMCwwICsxLDU0IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAzIGJ5IFJhbGYgQmFlY2hsZQorICovCisjaWZuZGVmIF9BU01fVElNRVhfSAorI2RlZmluZSBfQVNNX1RJTUVYX0gKKworI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgorCisvKgorICogVGhpcyBpcyB0aGUgZnJlcXVlbmN5IG9mIHRoZSB0aW1lciB1c2VkIGZvciBMaW51eCdzIHRpbWVyIGludGVycnVwdC4KKyAqIFRoZSB2YWx1ZSBzaG91bGQgYmUgZGVmaW5lZCBhcyBhY2N1cmF0ZSBhcyBwb3NzaWJsZSBvciB1bmRlciBjZXJ0YWluCisgKiBjaXJjdW1zdGFuY2VzIExpbnV4IHRpbWVrZWVwaW5nIG1pZ2h0IGJlY29tZSBpbmFjY3VyYXRlIG9yIGZhaWwuCisgKgorICogRm9yIG1hbnkgc3lzdGVtIHRoZSBleGFjdCBjbG9ja3JhdGUgb2YgdGhlIHRpbWVyIGlzbid0IGtub3duIGJ1dCBkdWUgdG8KKyAqIHRoZSB3YXkgdGhpcyB2YWx1ZSBpcyB1c2VkIHdlIGNhbiBnZXQgYXdheSB3aXRoIGEgd3JvbmcgdmFsdWUgYXMgbG9uZworICogYXMgdGhpcyB2YWx1ZSBpczoKKyAqCisgKiAgLSBhIG11bHRpcGxlIG9mIEhaCisgKiAgLSBhIGRpdmlzb3Igb2YgdGhlIGFjdHVhbCByYXRlCisgKgorICogNTAwMDAwIGlzIGEgZ29vZCBzdWNoIGNoZWF0IHZhbHVlLgorICoKKyAqIFRoZSBvYnNjdXJlIG51bWJlciAxMTkzMTgyIGlzIHRoZSBzYW1lIGFzIHVzZWQgYnkgdGhlIG9yaWdpbmFsIGk4MjU0CisgKiB0aW1lIGluIGxlZ2FjeSBQQyBoYXJkd2FyZTsgdGhlIGNoaXAgdW5mb3J0dW5hdGVseSBhbHNvIGZvdW5kIGluIGEKKyAqIGJ1bmNoIG9mIE1JUFMgc3lzdGVtcy4gIFRoZSBsYXN0IHJlbWFpbmluZyB1c2VyIG9mIHRoZSBpODI1NCBmb3IgdGhlCisgKiB0aW1lciBpbnRlcnJ1cHQgaXMgdGhlIFJNMjAwOyBpdCdzIGEgdmVyeSBzdGFuZGFyZCBzeXN0ZW0gc28gdGhlcmUgaXMKKyAqIG5vIHJlYXNvbiB0byBtYWtlIHRoaXMgYSBzZXBhcmF0ZSBhcmNoaXRlY3R1cmUuCisgKi8KKworI2luY2x1ZGUgPHRpbWV4Lmg+CisKKy8qCisgKiBTdGFuZGFyZCB3YXkgdG8gYWNjZXNzIHRoZSBjeWNsZSBjb3VudGVyLgorICogQ3VycmVudGx5IG9ubHkgdXNlZCBvbiBTTVAgZm9yIHNjaGVkdWxpbmcuCisgKgorICogT25seSB0aGUgbG93IDMyIGJpdHMgYXJlIGF2YWlsYWJsZSBhcyBhIGNvbnRpbnVvdXNseSBjb3VudGluZyBlbnRpdHkuCisgKiBCdXQgdGhpcyBvbmx5IG1lYW5zIHdlJ2xsIGZvcmNlIGEgcmVzY2hlZHVsZSBldmVyeSA4IHNlY29uZHMgb3Igc28sCisgKiB3aGljaCBpc24ndCBhbiBldmlsIHRoaW5nLgorICoKKyAqIFdlIGtub3cgdGhhdCBhbGwgU01QIGNhcGFibGUgQ1BVcyBoYXZlIGN5Y2xlIGNvdW50ZXJzLgorICovCisKK3R5cGVkZWYgdW5zaWduZWQgaW50IGN5Y2xlc190OworCitzdGF0aWMgaW5saW5lIGN5Y2xlc190IGdldF9jeWNsZXMgKHZvaWQpCit7CisJcmV0dXJuIHJlYWRfYzBfY291bnQoKTsKK30KKworI2VuZGlmIC8qICBfQVNNX1RJTUVYX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvdGl0YW5fZGVwLmggYi9pbmNsdWRlL2FzbS1taXBzL3RpdGFuX2RlcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkOTU5OWUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3RpdGFuX2RlcC5oCkBAIC0wLDAgKzEsMjMxIEBACisvKgorICogQ29weXJpZ2h0IDIwMDMgUE1DLVNpZXJyYQorICogQXV0aG9yOiBNYW5pc2ggTGFjaHdhbmkgKGxhY2h3YW5pQHBtYy1zaWVycmEuY29tKQorICoKKyAqIEJvYXJkIHNwZWNpZmljIGRlZmluaXRpdGlvbnMgZm9yIHRoZSBQTUMtU2llcnJhIFlvc2VtaXRlCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9fVElUQU5fREVQX0hfXworI2RlZmluZSBfX1RJVEFOX0RFUF9IX18KKworI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4gICAgICAgICAgICAgIC8qIGZvciBLU0VHMUFERFIoKSAqLworI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4gICAgICAgICAgICAgIC8qIGZvciBjcHVfdG9fbGUzMigpICovCisKKyNkZWZpbmUgVElUQU5fUkVBRChvZnMpCQkJCQkJCVwKKwkoKih2b2xhdGlsZSB1MzIgKikob2NkX2Jhc2UrKG9mcykpKQorI2RlZmluZSBUSVRBTl9SRUFEXzE2KG9mcykJCQkJCQlcCisJKCoodm9sYXRpbGUgdTE2ICopKG9jZF9iYXNlKyhvZnMpKSkKKyNkZWZpbmUgVElUQU5fUkVBRF84KG9mcykJCQkJCQlcCisJKCoodm9sYXRpbGUgdTggKikob2NkX2Jhc2UrKG9mcykpKQorCisjZGVmaW5lIFRJVEFOX1dSSVRFKG9mcywgZGF0YSkJCQkJCQlcCisJZG8geyAqKHZvbGF0aWxlIHUzMiAqKShvY2RfYmFzZSsob2ZzKSkgPSAoZGF0YSk7IH0gd2hpbGUgKDApCisjZGVmaW5lIFRJVEFOX1dSSVRFXzE2KG9mcywgZGF0YSkJCQkJCVwKKwlkbyB7ICoodm9sYXRpbGUgdTE2ICopKG9jZF9iYXNlKyhvZnMpKSA9IChkYXRhKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgVElUQU5fV1JJVEVfOChvZnMsIGRhdGEpCQkJCQlcCisJZG8geyAqKHZvbGF0aWxlIHU4ICopKG9jZF9iYXNlKyhvZnMpKSA9IChkYXRhKTsgfSB3aGlsZSAoMCkKKworLyoKKyAqIFBDSSBzcGVjaWZpYyBkZWZpbmVzCisgKi8KKyNkZWZpbmUJVElUQU5fUENJXzBfQ09ORklHX0FERFJFU1MJMHg3ODAKKyNkZWZpbmUJVElUQU5fUENJXzBfQ09ORklHX0RBVEEJCTB4Nzg0CisKKy8qCisgKiBIVCBzcGVjaWZpYyBkZWZpbmVzCisgKi8KKyNkZWZpbmUgUk05MDAweDJfSFRMSU5LX1JFRwkJMHhiYjAwMDY0NAorI2RlZmluZSBSTTkwMDB4Ml9CQVNFX0FERFIJCTB4YmIwMDAwMDAKKworI2RlZmluZSBPQ0RfQkFTRQkJCTB4ZmIwMDAwMDBVTAorI2RlZmluZSBPQ0RfU0laRQkJCTB4MzAwMFVMCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIG9jZF9iYXNlOworCisvKgorICogT0NEIFJlZ2lzdGVycworICovCisjZGVmaW5lIFJNOTAwMHgyX09DRF9MS0I1CQkweDAxMjgJCS8qIEV0aGVybmV0ICovCisjZGVmaW5lIFJNOTAwMHgyX09DRF9MS001CQkweDAxMmMKKworI2RlZmluZSBSTTkwMDB4Ml9PQ0RfTEtCNwkJMHgwMTM4CQkvKiBIVCBSZWdpb24gMCAqLworI2RlZmluZSBSTTkwMDB4Ml9PQ0RfTEtNNwkJMHgwMTNjCisjZGVmaW5lIFJNOTAwMHgyX09DRF9MS0I4CQkweDAxNDAJCS8qIEhUIFJlZ2lvbiAxICovCisjZGVmaW5lIFJNOTAwMHgyX09DRF9MS004CQkweDAxNDQKKworI2RlZmluZSBSTTkwMDB4Ml9PQ0RfTEtCOQkJMHgwMTQ4CQkvKiBMb2NhbCBCdXMgKi8KKyNkZWZpbmUgUk05MDAweDJfT0NEX0xLTTkJCTB4MDE0YworI2RlZmluZSBSTTkwMDB4Ml9PQ0RfTEtCMTAJCTB4MDE1MAorI2RlZmluZSBSTTkwMDB4Ml9PQ0RfTEtNMTAJCTB4MDE1NAorI2RlZmluZSBSTTkwMDB4Ml9PQ0RfTEtCMTEJCTB4MDE1OAorI2RlZmluZSBSTTkwMDB4Ml9PQ0RfTEtNMTEJCTB4MDE1YworI2RlZmluZSBSTTkwMDB4Ml9PQ0RfTEtCMTIJCTB4MDE2MAorI2RlZmluZSBSTTkwMDB4Ml9PQ0RfTEtNMTIJCTB4MDE2NAorCisjZGVmaW5lIFJNOTAwMHgyX09DRF9MS0IxMwkJMHgwMTY4CQkvKiBTY3JhdGNoIFJBTSAqLworI2RlZmluZSBSTTkwMDB4Ml9PQ0RfTEtNMTMJCTB4MDE2YworCisjZGVmaW5lIFJNOTAwMHgyX09DRF9MUEQwCQkweDAyMDAJCS8qIExvY2FsIEJ1cyAqLworI2RlZmluZSBSTTkwMDB4Ml9PQ0RfTFBEMQkJMHgwMjEwCisjZGVmaW5lIFJNOTAwMHgyX09DRF9MUEQyCQkweDAyMjAKKyNkZWZpbmUgUk05MDAweDJfT0NEX0xQRDMJCTB4MDIzMAorCisjZGVmaW5lIFJNOTAwMHgyX09DRF9IVERWSUQJCTB4MDYwMAkvKiBIVCBEZXZpY2UgSGVhZGVyICovCisjZGVmaW5lIFJNOTAwMHgyX09DRF9IVFNDCQkweDA2MDQKKyNkZWZpbmUgUk05MDAweDJfT0NEX0hUQ0NSCQkweDA2MDgKKyNkZWZpbmUgUk05MDAweDJfT0NEX0hUQkhMCQkweDA2MGMKKyNkZWZpbmUgUk05MDAweDJfT0NEX0hUQkFSMAkJMHgwNjEwCisjZGVmaW5lIFJNOTAwMHgyX09DRF9IVEJBUjEJCTB4MDYxNAorI2RlZmluZSBSTTkwMDB4Ml9PQ0RfSFRCQVIyCQkweDA2MTgKKyNkZWZpbmUgUk05MDAweDJfT0NEX0hUQkFSMwkJMHgwNjFjCisjZGVmaW5lIFJNOTAwMHgyX09DRF9IVEJBUjQJCTB4MDYyMAorI2RlZmluZSBSTTkwMDB4Ml9PQ0RfSFRCQVI1CQkweDA2MjQKKyNkZWZpbmUgUk05MDAweDJfT0NEX0hUQ0JDUFQJCTB4MDYyOAorI2RlZmluZSBSTTkwMDB4Ml9PQ0RfSFRTRFZJRAkJMHgwNjJjCisjZGVmaW5lIFJNOTAwMHgyX09DRF9IVFhSQQkJMHgwNjMwCisjZGVmaW5lIFJNOTAwMHgyX09DRF9IVENBUDEJCTB4MDYzNAorI2RlZmluZSBSTTkwMDB4Ml9PQ0RfSFRJTAkJMHgwNjNjCisKKyNkZWZpbmUgUk05MDAweDJfT0NEX0hUTENDCQkweDA2NDAJLyogSFQgQ2FwYWJpbGl0eSBCbG9jayAqLworI2RlZmluZSBSTTkwMDB4Ml9PQ0RfSFRMSU5LCQkweDA2NDQKKyNkZWZpbmUgUk05MDAweDJfT0NEX0hURlFSRVYJCTB4MDY0OAorCisjZGVmaW5lIFJNOTAwMHgyX09DRF9IVEVSQ1RMCQkweDA2NjgJLyogSFQgQ29udHJvbGxlciAqLworI2RlZmluZSBSTTkwMDB4Ml9PQ0RfSFRSWERCCQkweDA2NmMKKyNkZWZpbmUgUk05MDAweDJfT0NEX0hUSU1QRUQJCTB4MDY3MAorI2RlZmluZSBSTTkwMDB4Ml9PQ0RfSFRTV0lNUAkJMHgwNjc0CisjZGVmaW5lIFJNOTAwMHgyX09DRF9IVENBTAkJMHgwNjc4CisKKyNkZWZpbmUgUk05MDAweDJfT0NEX0hUQkFBMzAJCTB4MDY4MAorI2RlZmluZSBSTTkwMDB4Ml9PQ0RfSFRCQUE1NAkJMHgwNjg0CisjZGVmaW5lIFJNOTAwMHgyX09DRF9IVE1BU0swCQkweDA2ODgKKyNkZWZpbmUgUk05MDAweDJfT0NEX0hUTUFTSzEJCTB4MDY4YworI2RlZmluZSBSTTkwMDB4Ml9PQ0RfSFRNQVNLMgkJMHgwNjkwCisjZGVmaW5lIFJNOTAwMHgyX09DRF9IVE1BU0szCQkweDA2OTQKKyNkZWZpbmUgUk05MDAweDJfT0NEX0hUTUFTSzQJCTB4MDY5OAorI2RlZmluZSBSTTkwMDB4Ml9PQ0RfSFRNQVNLNQkJMHgwNjljCisKKyNkZWZpbmUgUk05MDAweDJfT0NEX0hUSUZDVEwJCTB4MDZhMAorI2RlZmluZSBSTTkwMDB4Ml9PQ0RfSFRQTEwJCTB4MDZhNAorCisjZGVmaW5lIFJNOTAwMHgyX09DRF9IVFNSSQkJMHgwNmIwCisjZGVmaW5lIFJNOTAwMHgyX09DRF9IVFJYTlVNCQkweDA2YjQKKyNkZWZpbmUgUk05MDAweDJfT0NEX0hUVFhOVU0JCTB4MDZiOAorCisjZGVmaW5lIFJNOTAwMHgyX09DRF9IVFRYQ05UCQkweDA2YzgKKworI2RlZmluZSBSTTkwMDB4Ml9PQ0RfSFRFUlJPUgkJMHgwNmQ4CisjZGVmaW5lIFJNOTAwMHgyX09DRF9IVFJDUkNFCQkweDA2ZGMKKyNkZWZpbmUgUk05MDAweDJfT0NEX0hURU9JCQkweDA2ZTAKKworI2RlZmluZSBSTTkwMDB4Ml9PQ0RfQ1JDUgkJMHgwNmYwCisKKyNkZWZpbmUgUk05MDAweDJfT0NEX0hUQ0ZHQQkJMHgwNmY4CisjZGVmaW5lIFJNOTAwMHgyX09DRF9IVENGR0QJCTB4MDZmYworCisjZGVmaW5lIFJNOTAwMHgyX09DRF9JTlRNU0cJCTB4MGEwMAorCisjZGVmaW5lIFJNOTAwMHgyX09DRF9JTlRQSU4wCQkweDBhNDAKKyNkZWZpbmUgUk05MDAweDJfT0NEX0lOVFBJTjEJCTB4MGE0NAorI2RlZmluZSBSTTkwMDB4Ml9PQ0RfSU5UUElOMgkJMHgwYTQ4CisjZGVmaW5lIFJNOTAwMHgyX09DRF9JTlRQSU4zCQkweDBhNGMKKyNkZWZpbmUgUk05MDAweDJfT0NEX0lOVFBJTjQJCTB4MGE1MAorI2RlZmluZSBSTTkwMDB4Ml9PQ0RfSU5UUElONQkJMHgwYTU0CisjZGVmaW5lIFJNOTAwMHgyX09DRF9JTlRQSU42CQkweDBhNTgKKyNkZWZpbmUgUk05MDAweDJfT0NEX0lOVFBJTjcJCTB4MGE1YworI2RlZmluZSBSTTkwMDB4Ml9PQ0RfU0VNCQkweDBhNjAKKyNkZWZpbmUgUk05MDAweDJfT0NEX1NFTVNFVAkJMHgwYTY0CisjZGVmaW5lIFJNOTAwMHgyX09DRF9TRU1DTFIJCTB4MGE2OAorCisjZGVmaW5lIFJNOTAwMHgyX09DRF9US1QJCTB4MGE3MAorI2RlZmluZSBSTTkwMDB4Ml9PQ0RfVEtUSU5DCQkweDBhNzQKKworI2RlZmluZSBSTTkwMDB4Ml9PQ0RfTk1JQ09ORklHCQkweDBhYzAJCS8qIEludGVycnVwdHMgKi8KKyNkZWZpbmUgUk05MDAweDJfT0NEX0lOVFAwUFJJCQkweDFhODAKKyNkZWZpbmUgUk05MDAweDJfT0NEX0lOVFAxUFJJCQkweDFhODAKKyNkZWZpbmUgUk05MDAweDJfT0NEX0lOVFAwU1RBVFVTMAkweDFiMDAKKyNkZWZpbmUgUk05MDAweDJfT0NEX0lOVFAwTUFTSzAJCTB4MWIwNAorI2RlZmluZSBSTTkwMDB4Ml9PQ0RfSU5UUDBTRVQwCQkweDFiMDgKKyNkZWZpbmUgUk05MDAweDJfT0NEX0lOVFAwQ0xFQVIwCTB4MWIwYworI2RlZmluZSBSTTkwMDB4Ml9PQ0RfSU5UUDBTVEFUVVMxCTB4MWIxMAorI2RlZmluZSBSTTkwMDB4Ml9PQ0RfSU5UUDBNQVNLMQkJMHgxYjE0CisjZGVmaW5lIFJNOTAwMHgyX09DRF9JTlRQMFNFVDEJCTB4MWIxOAorI2RlZmluZSBSTTkwMDB4Ml9PQ0RfSU5UUDBDTEVBUjEJMHgxYjFjCisjZGVmaW5lIFJNOTAwMHgyX09DRF9JTlRQMFNUQVRVUzIJMHgxYjIwCisjZGVmaW5lIFJNOTAwMHgyX09DRF9JTlRQME1BU0syCQkweDFiMjQKKyNkZWZpbmUgUk05MDAweDJfT0NEX0lOVFAwU0VUMgkJMHgxYjI4CisjZGVmaW5lIFJNOTAwMHgyX09DRF9JTlRQMENMRUFSMgkweDFiMmMKKyNkZWZpbmUgUk05MDAweDJfT0NEX0lOVFAwU1RBVFVTMwkweDFiMzAKKyNkZWZpbmUgUk05MDAweDJfT0NEX0lOVFAwTUFTSzMJCTB4MWIzNAorI2RlZmluZSBSTTkwMDB4Ml9PQ0RfSU5UUDBTRVQzCQkweDFiMzgKKyNkZWZpbmUgUk05MDAweDJfT0NEX0lOVFAwQ0xFQVIzCTB4MWIzYworI2RlZmluZSBSTTkwMDB4Ml9PQ0RfSU5UUDBTVEFUVVM0CTB4MWI0MAorI2RlZmluZSBSTTkwMDB4Ml9PQ0RfSU5UUDBNQVNLNAkJMHgxYjQ0CisjZGVmaW5lIFJNOTAwMHgyX09DRF9JTlRQMFNFVDQJCTB4MWI0OAorI2RlZmluZSBSTTkwMDB4Ml9PQ0RfSU5UUDBDTEVBUjQJMHgxYjRjCisjZGVmaW5lIFJNOTAwMHgyX09DRF9JTlRQMFNUQVRVUzUJMHgxYjUwCisjZGVmaW5lIFJNOTAwMHgyX09DRF9JTlRQME1BU0s1CQkweDFiNTQKKyNkZWZpbmUgUk05MDAweDJfT0NEX0lOVFAwU0VUNQkJMHgxYjU4CisjZGVmaW5lIFJNOTAwMHgyX09DRF9JTlRQMENMRUFSNQkweDFiNWMKKyNkZWZpbmUgUk05MDAweDJfT0NEX0lOVFAwU1RBVFVTNgkweDFiNjAKKyNkZWZpbmUgUk05MDAweDJfT0NEX0lOVFAwTUFTSzYJCTB4MWI2NAorI2RlZmluZSBSTTkwMDB4Ml9PQ0RfSU5UUDBTRVQ2CQkweDFiNjgKKyNkZWZpbmUgUk05MDAweDJfT0NEX0lOVFAwQ0xFQVI2CTB4MWI2YworI2RlZmluZSBSTTkwMDB4Ml9PQ0RfSU5UUDBTVEFUVVM3CTB4MWI3MAorI2RlZmluZSBSTTkwMDB4Ml9PQ0RfSU5UUDBNQVNLNwkJMHgxYjc0CisjZGVmaW5lIFJNOTAwMHgyX09DRF9JTlRQMFNFVDcJCTB4MWI3OAorI2RlZmluZSBSTTkwMDB4Ml9PQ0RfSU5UUDBDTEVBUjcJMHgxYjdjCisjZGVmaW5lIFJNOTAwMHgyX09DRF9JTlRQMVNUQVRVUzAJMHgyYjAwCisjZGVmaW5lIFJNOTAwMHgyX09DRF9JTlRQMU1BU0swCQkweDJiMDQKKyNkZWZpbmUgUk05MDAweDJfT0NEX0lOVFAxU0VUMAkJMHgyYjA4CisjZGVmaW5lIFJNOTAwMHgyX09DRF9JTlRQMUNMRUFSMAkweDJiMGMKKyNkZWZpbmUgUk05MDAweDJfT0NEX0lOVFAxU1RBVFVTMQkweDJiMTAKKyNkZWZpbmUgUk05MDAweDJfT0NEX0lOVFAxTUFTSzEJCTB4MmIxNAorI2RlZmluZSBSTTkwMDB4Ml9PQ0RfSU5UUDFTRVQxCQkweDJiMTgKKyNkZWZpbmUgUk05MDAweDJfT0NEX0lOVFAxQ0xFQVIxCTB4MmIxYworI2RlZmluZSBSTTkwMDB4Ml9PQ0RfSU5UUDFTVEFUVVMyCTB4MmIyMAorI2RlZmluZSBSTTkwMDB4Ml9PQ0RfSU5UUDFNQVNLMgkJMHgyYjI0CisjZGVmaW5lIFJNOTAwMHgyX09DRF9JTlRQMVNFVDIJCTB4MmIyOAorI2RlZmluZSBSTTkwMDB4Ml9PQ0RfSU5UUDFDTEVBUjIJMHgyYjJjCisjZGVmaW5lIFJNOTAwMHgyX09DRF9JTlRQMVNUQVRVUzMJMHgyYjMwCisjZGVmaW5lIFJNOTAwMHgyX09DRF9JTlRQMU1BU0szCQkweDJiMzQKKyNkZWZpbmUgUk05MDAweDJfT0NEX0lOVFAxU0VUMwkJMHgyYjM4CisjZGVmaW5lIFJNOTAwMHgyX09DRF9JTlRQMUNMRUFSMwkweDJiM2MKKyNkZWZpbmUgUk05MDAweDJfT0NEX0lOVFAxU1RBVFVTNAkweDJiNDAKKyNkZWZpbmUgUk05MDAweDJfT0NEX0lOVFAxTUFTSzQJCTB4MmI0NAorI2RlZmluZSBSTTkwMDB4Ml9PQ0RfSU5UUDFTRVQ0CQkweDJiNDgKKyNkZWZpbmUgUk05MDAweDJfT0NEX0lOVFAxQ0xFQVI0CTB4MmI0YworI2RlZmluZSBSTTkwMDB4Ml9PQ0RfSU5UUDFTVEFUVVM1CTB4MmI1MAorI2RlZmluZSBSTTkwMDB4Ml9PQ0RfSU5UUDFNQVNLNQkJMHgyYjU0CisjZGVmaW5lIFJNOTAwMHgyX09DRF9JTlRQMVNFVDUJCTB4MmI1OAorI2RlZmluZSBSTTkwMDB4Ml9PQ0RfSU5UUDFDTEVBUjUJMHgyYjVjCisjZGVmaW5lIFJNOTAwMHgyX09DRF9JTlRQMVNUQVRVUzYJMHgyYjYwCisjZGVmaW5lIFJNOTAwMHgyX09DRF9JTlRQMU1BU0s2CQkweDJiNjQKKyNkZWZpbmUgUk05MDAweDJfT0NEX0lOVFAxU0VUNgkJMHgyYjY4CisjZGVmaW5lIFJNOTAwMHgyX09DRF9JTlRQMUNMRUFSNgkweDJiNmMKKyNkZWZpbmUgUk05MDAweDJfT0NEX0lOVFAxU1RBVFVTNwkweDJiNzAKKyNkZWZpbmUgUk05MDAweDJfT0NEX0lOVFAxTUFTSzcJCTB4MmI3NAorI2RlZmluZSBSTTkwMDB4Ml9PQ0RfSU5UUDFTRVQ3CQkweDJiNzgKKyNkZWZpbmUgUk05MDAweDJfT0NEX0lOVFAxQ0xFQVI3CTB4MmI3YworCisjZGVmaW5lIE9DRF9SRUFEKHJlZykJCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKShvY2RfYmFzZSArIChyZWcpKSkKKyNkZWZpbmUgT0NEX1dSSVRFKHJlZywgdmFsKQkJCQkJXAorCWRvIHsgKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikob2NkX2Jhc2UgKyAocmVnKSkgPSAodmFsKTsgfSB3aGlsZSAoMCkKKworLyoKKyAqIEh5cGVydHJhbnNwb3J0IHNwZWNpZmljIG1hY3JvcworICovCisjZGVmaW5lIFJNOUtfV1JJVEUob2ZzLCBkYXRhKSAgICoodm9sYXRpbGUgdV9pbnQzMl90ICopKFJNOTAwMHgyX0JBU0VfQUREUitvZnMpID0gZGF0YQorI2RlZmluZSBSTTlLX1dSSVRFXzgob2ZzLCBkYXRhKSAqKHZvbGF0aWxlIHU4ICopKFJNOTAwMHgyX0JBU0VfQUREUitvZnMpID0gZGF0YQorI2RlZmluZSBSTTlLX1dSSVRFXzE2KG9mcywgZGF0YSkgKih2b2xhdGlsZSB1MTYgKikoUk05MDAweDJfQkFTRV9BRERSK29mcykgPSBkYXRhCisKKyNkZWZpbmUgUk05S19SRUFEKG9mcywgdmFsKSAgICAgKih2YWwpID0gKih2b2xhdGlsZSB1X2ludDMyX3QgKikoUk05MDAweDJfQkFTRV9BRERSK29mcykKKyNkZWZpbmUgUk05S19SRUFEXzgob2ZzLCB2YWwpICAgKih2YWwpID0gKih2b2xhdGlsZSB1OCAqKShSTTkwMDB4Ml9CQVNFX0FERFIrb2ZzKQorI2RlZmluZSBSTTlLX1JFQURfMTYob2ZzLCB2YWwpICAqKHZhbCkgPSAqKHZvbGF0aWxlIHUxNiAqKShSTTkwMDB4Ml9CQVNFX0FERFIrb2ZzKQorCisjZW5kaWYgCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3RsYi5oIGIvaW5jbHVkZS9hc20tbWlwcy90bGIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGQ5ZGZjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy90bGIuaApAQCAtMCwwICsxLDIzIEBACisjaWZuZGVmIF9fQVNNX1RMQl9ICisjZGVmaW5lIF9fQVNNX1RMQl9ICisKKy8qCisgKiBNSVBTIGRvZXNuJ3QgbmVlZCBhbnkgc3BlY2lhbCBwZXItcHRlIG9yIHBlci12bWEgaGFuZGxpbmcsIGV4Y2VwdAorICogd2UgbmVlZCB0byBmbHVzaCBjYWNoZSBmb3IgYXJlYSB0byBiZSB1bm1hcHBlZC4KKyAqLworI2RlZmluZSB0bGJfc3RhcnRfdm1hKHRsYiwgdm1hKSAJCQkJXAorCWRvIHsJCQkJCQkJXAorCQlpZiAoIXRsYi0+ZnVsbG1tKQkJCQlcCisJCQlmbHVzaF9jYWNoZV9yYW5nZSh2bWEsIHZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fZW5kKTsgXAorCX0gIHdoaWxlICgwKQorI2RlZmluZSB0bGJfZW5kX3ZtYSh0bGIsIHZtYSkgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBfX3RsYl9yZW1vdmVfdGxiX2VudHJ5KHRsYiwgcHRlcCwgYWRkcmVzcykgZG8geyB9IHdoaWxlICgwKQorCisvKgorICogLi4gYmVjYXVzZSB3ZSBmbHVzaCB0aGUgd2hvbGUgbW0gd2hlbiBpdCBmaWxscyB1cC4KKyAqLworI2RlZmluZSB0bGJfZmx1c2godGxiKSBmbHVzaF90bGJfbW0oKHRsYiktPm1tKQorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdGxiLmg+CisKKyNlbmRpZiAvKiBfX0FTTV9UTEJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy90bGJkZWJ1Zy5oIGIvaW5jbHVkZS9hc20tbWlwcy90bGJkZWJ1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmZjdhNzMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3RsYmRlYnVnLmgKQEAgLTAsMCArMSwyMCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMiBieSBSYWxmIEJhZWNobGUKKyAqLworI2lmbmRlZiBfX0FTTV9UTEJERUJVR19ICisjZGVmaW5lIF9fQVNNX1RMQkRFQlVHX0gKKworLyoKKyAqIFRMQiBkZWJ1Z2dpbmcgZnVuY3Rpb25zOgorICovCitleHRlcm4gdm9pZCBkdW1wX3RsYihpbnQgZmlyc3QsIGludCBsYXN0KTsKK2V4dGVybiB2b2lkIGR1bXBfdGxiX2FsbCh2b2lkKTsKK2V4dGVybiB2b2lkIGR1bXBfdGxiX3dpcmVkKHZvaWQpOworZXh0ZXJuIHZvaWQgZHVtcF90bGJfYWRkcih1bnNpZ25lZCBsb25nIGFkZHIpOworZXh0ZXJuIHZvaWQgZHVtcF90bGJfbm9ud2lyZWQodm9pZCk7CisKKyNlbmRpZiAvKiBfX0FTTV9UTEJERUJVR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3RsYmZsdXNoLmggYi9pbmNsdWRlL2FzbS1taXBzL3RsYmZsdXNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI0YWUzYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvdGxiZmx1c2guaApAQCAtMCwwICsxLDU1IEBACisjaWZuZGVmIF9fQVNNX1RMQkZMVVNIX0gKKyNkZWZpbmUgX19BU01fVExCRkxVU0hfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKworLyoKKyAqIFRMQiBmbHVzaGluZzoKKyAqCisgKiAgLSBmbHVzaF90bGJfYWxsKCkgZmx1c2hlcyBhbGwgcHJvY2Vzc2VzIFRMQiBlbnRyaWVzCisgKiAgLSBmbHVzaF90bGJfbW0obW0pIGZsdXNoZXMgdGhlIHNwZWNpZmllZCBtbSBjb250ZXh0IFRMQiBlbnRyaWVzCisgKiAgLSBmbHVzaF90bGJfcGFnZSh2bWEsIHZtYWRkcikgZmx1c2hlcyBvbmUgcGFnZQorICogIC0gZmx1c2hfdGxiX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCkgZmx1c2hlcyBhIHJhbmdlIG9mIHBhZ2VzCisgKiAgLSBmbHVzaF90bGJfa2VybmVsX3JhbmdlKHN0YXJ0LCBlbmQpIGZsdXNoZXMgYSByYW5nZSBvZiBrZXJuZWwgcGFnZXMKKyAqICAtIGZsdXNoX3RsYl9wZ3RhYmxlcyhtbSwgc3RhcnQsIGVuZCkgZmx1c2hlcyBhIHJhbmdlIG9mIHBhZ2UgdGFibGVzCisgKi8KK2V4dGVybiB2b2lkIGxvY2FsX2ZsdXNoX3RsYl9hbGwodm9pZCk7CitleHRlcm4gdm9pZCBsb2NhbF9mbHVzaF90bGJfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pOworZXh0ZXJuIHZvaWQgbG9jYWxfZmx1c2hfdGxiX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCXVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTsKK2V4dGVybiB2b2lkIGxvY2FsX2ZsdXNoX3RsYl9rZXJuZWxfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwKKwl1bnNpZ25lZCBsb25nIGVuZCk7CitleHRlcm4gdm9pZCBsb2NhbF9mbHVzaF90bGJfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwl1bnNpZ25lZCBsb25nIHBhZ2UpOworZXh0ZXJuIHZvaWQgbG9jYWxfZmx1c2hfdGxiX29uZSh1bnNpZ25lZCBsb25nIHZhZGRyKTsKKworI2lmZGVmIENPTkZJR19TTVAKKworZXh0ZXJuIHZvaWQgZmx1c2hfdGxiX2FsbCh2b2lkKTsKK2V4dGVybiB2b2lkIGZsdXNoX3RsYl9tbShzdHJ1Y3QgbW1fc3RydWN0ICopOworZXh0ZXJuIHZvaWQgZmx1c2hfdGxiX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nLAorCXVuc2lnbmVkIGxvbmcpOworZXh0ZXJuIHZvaWQgZmx1c2hfdGxiX2tlcm5lbF9yYW5nZSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKK2V4dGVybiB2b2lkIGZsdXNoX3RsYl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nKTsKK2V4dGVybiB2b2lkIGZsdXNoX3RsYl9vbmUodW5zaWduZWQgbG9uZyB2YWRkcik7CisKKyNlbHNlIC8qIENPTkZJR19TTVAgKi8KKworI2RlZmluZSBmbHVzaF90bGJfYWxsKCkJCQlsb2NhbF9mbHVzaF90bGJfYWxsKCkKKyNkZWZpbmUgZmx1c2hfdGxiX21tKG1tKQkJbG9jYWxfZmx1c2hfdGxiX21tKG1tKQorI2RlZmluZSBmbHVzaF90bGJfcmFuZ2Uodm1hLHZtYWRkcixlbmQpCWxvY2FsX2ZsdXNoX3RsYl9yYW5nZSh2bWEsIHZtYWRkciwgZW5kKQorI2RlZmluZSBmbHVzaF90bGJfa2VybmVsX3JhbmdlKHZtYWRkcixlbmQpIFwKKwlsb2NhbF9mbHVzaF90bGJfa2VybmVsX3JhbmdlKHZtYWRkciwgZW5kKQorI2RlZmluZSBmbHVzaF90bGJfcGFnZSh2bWEscGFnZSkJbG9jYWxfZmx1c2hfdGxiX3BhZ2Uodm1hLCBwYWdlKQorI2RlZmluZSBmbHVzaF90bGJfb25lKHZhZGRyKQkJbG9jYWxfZmx1c2hfdGxiX29uZSh2YWRkcikKKworI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KKworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9wZ3RhYmxlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwl1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwkvKiBOb3RoaW5nIHRvIGRvIG9uIE1JUFMuICAqLworfQorCisjZW5kaWYgLyogX19BU01fVExCRkxVU0hfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy90b3BvbG9neS5oIGIvaW5jbHVkZS9hc20tbWlwcy90b3BvbG9neS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0NDBmYjkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3RvcG9sb2d5LmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPHRvcG9sb2d5Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3RyYXBzLmggYi9pbmNsdWRlL2FzbS1taXBzL3RyYXBzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc5MDEyMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvdHJhcHMuaApAQCAtMCwwICsxLDI0IEBACisvKgorICoJVHJhcCBoYW5kbGluZyBkZWZpbml0aW9ucy4KKyAqCisgKglDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMgIE1hY2llaiBXLiBSb3p5Y2tpCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICoJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2lmbmRlZiBfQVNNX1RSQVBTX0gKKyNkZWZpbmUgX0FTTV9UUkFQU19ICisKKy8qCisgKiBQb3NzaWJsZSBzdGF0dXMgcmVzcG9uc2VzIGZvciBhIGJvYXJkX2JlX2hhbmRsZXIgYmFja2VuZC4KKyAqLworI2RlZmluZSBNSVBTX0JFX0RJU0NBUkQJMAkJLyogcmV0dXJuIHdpdGggbm8gYWN0aW9uICovCisjZGVmaW5lIE1JUFNfQkVfRklYVVAJMQkJLyogcmV0dXJuIHRvIHRoZSBmaXh1cCBjb2RlICovCisjZGVmaW5lIE1JUFNfQkVfRkFUQUwJMgkJLyogdHJlYXQgYXMgYW4gdW5yZWNvdmVyYWJsZSBlcnJvciAqLworCitleHRlcm4gdm9pZCAoKmJvYXJkX2JlX2luaXQpKHZvaWQpOworZXh0ZXJuIGludCAoKmJvYXJkX2JlX2hhbmRsZXIpKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgaXNfZml4dXApOworCisjZW5kaWYgLyogX0FTTV9UUkFQU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3R4MzkxMi5oIGIvaW5jbHVkZS9hc20tbWlwcy90eDM5MTIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzA5ZDg3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy90eDM5MTIuaApAQCAtMCwwICsxLDM2MSBAQAorLyoKKyAqICBpbmNsdWRlL2FzbS1taXBzL3R4MzkxMi5oCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMSBTdGV2ZW4gSi4gSGlsbCAoc2poaWxsQHJlYWxpdHlkaWx1dGVkLmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBSZWdpc3RlcnMgZm9yIFRNUFIzOTEyLzA1IGFuZCBQUjMxNzAwIHByb2Nlc3NvcnMKKyAqLworI2lmbmRlZiBfVFgzOTEyX0hfCisjZGVmaW5lIF9UWDM5MTJfSF8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKglDbG9jayBTdWJzeXN0ZW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgktLS0tLS0tLS0tLS0tLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKglDaGFwdGVyIDYgaW4gUGhpbGlwcyBQUjMxNzAwIGFuZCBUb3NoaWJhIFRNUFIzOTA1LzEyIFVzZXIgTWFudWFscyAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFRYMzkxMl9DTEtfQ1RSTAkJCQkJMHgwMWMwCisKKy8qCisgKiBDbG9jayBjb250cm9sIHJlZ2lzdGVyIHZhbHVlcworICovCisjZGVmaW5lIFRYMzkxMl9DTEtfQ1RSTF9DSElDTEtESVZfTUFTSwkJCTB4ZmYwMDAwMDAKKyNkZWZpbmUgVFgzOTEyX0NMS19DVFJMX0VOQ0xLVEVTVAkJCTB4MDA4MDAwMDAKKyNkZWZpbmUgVFgzOTEyX0NMS19DVFJMX0NMS1RFU1RTRUxTSUIJCQkweDAwNDAwMDAwCisjZGVmaW5lIFRYMzkxMl9DTEtfQ1RSTF9DSElNQ0xLU0VMCQkJMHgwMDIwMDAwMAorI2RlZmluZSBUWDM5MTJfQ0xLX0NUUkxfQ0hJQ0xLRElSCQkJMHgwMDEwMDAwMAorI2RlZmluZSBUWDM5MTJfQ0xLX0NUUkxfRU5DSElNQ0xLCQkJMHgwMDA4MDAwMAorI2RlZmluZSBUWDM5MTJfQ0xLX0NUUkxfRU5WSURDTEsJCQkweDAwMDQwMDAwCisjZGVmaW5lIFRYMzkxMl9DTEtfQ1RSTF9FTk1CVVNDTEsJCQkweDAwMDIwMDAwCisjZGVmaW5lIFRYMzkxMl9DTEtfQ1RSTF9FTlNQSUNMSwkJCTB4MDAwMTAwMDAKKyNkZWZpbmUgVFgzOTEyX0NMS19DVFJMX0VOVElNRVJDTEsJCQkweDAwMDA4MDAwCisjZGVmaW5lIFRYMzkxMl9DTEtfQ1RSTF9FTkZBU1RUSU1FUkNMSwkJCTB4MDAwMDQwMDAKKyNkZWZpbmUgVFgzOTEyX0NMS19DVFJMX1NJQk1DTEtESVIJCQkweDAwMDAyMDAwCisjZGVmaW5lIFRYMzkxMl9DTEtfQ1RSTF9yZXNlcnZlZDEJCQkweDAwMDAxMDAwCisjZGVmaW5lIFRYMzkxMl9DTEtfQ1RSTF9FTlNJQk1DTEsJCQkweDAwMDAwODAwCisjZGVmaW5lIFRYMzkxMl9DTEtfQ1RSTF9TSUJNQ0xLRElWXzYJCQkweDAwMDAwNjAwCisjZGVmaW5lIFRYMzkxMl9DTEtfQ1RSTF9TSUJNQ0xLRElWXzUJCQkweDAwMDAwNTAwCisjZGVmaW5lIFRYMzkxMl9DTEtfQ1RSTF9TSUJNQ0xLRElWXzQJCQkweDAwMDAwNDAwCisjZGVmaW5lIFRYMzkxMl9DTEtfQ1RSTF9TSUJNQ0xLRElWXzMJCQkweDAwMDAwMzAwCisjZGVmaW5lIFRYMzkxMl9DTEtfQ1RSTF9TSUJNQ0xLRElWXzIJCQkweDAwMDAwMjAwCisjZGVmaW5lIFRYMzkxMl9DTEtfQ1RSTF9TSUJNQ0xLRElWXzEJCQkweDAwMDAwMTAwCisjZGVmaW5lIFRYMzkxMl9DTEtfQ1RSTF9DU0VSU0VMCQkJCTB4MDAwMDAwODAKKyNkZWZpbmUgVFgzOTEyX0NMS19DVFJMX0NTRVJESVZfNgkJCTB4MDAwMDAwNjAKKyNkZWZpbmUgVFgzOTEyX0NMS19DVFJMX0NTRVJESVZfNQkJCTB4MDAwMDAwNTAKKyNkZWZpbmUgVFgzOTEyX0NMS19DVFJMX0NTRVJESVZfNAkJCTB4MDAwMDAwNDAKKyNkZWZpbmUgVFgzOTEyX0NMS19DVFJMX0NTRVJESVZfMwkJCTB4MDAwMDAwMzAKKyNkZWZpbmUgVFgzOTEyX0NMS19DVFJMX0NTRVJESVZfMgkJCTB4MDAwMDAwMjAKKyNkZWZpbmUgVFgzOTEyX0NMS19DVFJMX0NTRVJESVZfMQkJCTB4MDAwMDAwMTAKKyNkZWZpbmUgVFgzOTEyX0NMS19DVFJMX0VOQ1NFUkNMSwkJCTB4MDAwMDAwMDgKKyNkZWZpbmUgVFgzOTEyX0NMS19DVFJMX0VOSVJDTEsJCQkJMHgwMDAwMDAwNAorI2RlZmluZSBUWDM5MTJfQ0xLX0NUUkxfRU5VQVJUQUNMSwkJCTB4MDAwMDAwMDIKKyNkZWZpbmUgVFgzOTEyX0NMS19DVFJMX0VOVUFSVEJDTEsJCQkweDAwMDAwMDAxCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKglJbnRlcnJ1cHQgU3Vic3lzdGVtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgktLS0tLS0tLS0tLS0tLS0tLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKglDaGFwdGVyIDggaW4gUGhpbGlwcyBQUjMxNzAwIGFuZCBUb3NoaWJhIFRNUFIzOTA1LzEyIFVzZXIgTWFudWFscyAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFRYMzkxMl9JTlQxX0NMRUFSCQkJCTB4MDEwMAorI2RlZmluZSBUWDM5MTJfSU5UMl9DTEVBUgkJCQkweDAxMDQKKyNkZWZpbmUgVFgzOTEyX0lOVDNfQ0xFQVIJCQkJMHgwMTA4CisjZGVmaW5lIFRYMzkxMl9JTlQ0X0NMRUFSCQkJCTB4MDEwYworI2RlZmluZSBUWDM5MTJfSU5UNV9DTEVBUgkJCQkweDAxMTAKKyNkZWZpbmUgVFgzOTEyX0lOVDFfRU5BQkxFCQkJCTB4MDExOAorI2RlZmluZSBUWDM5MTJfSU5UMl9FTkFCTEUJCQkJMHgwMTFjCisjZGVmaW5lIFRYMzkxMl9JTlQzX0VOQUJMRQkJCQkweDAxMjAKKyNkZWZpbmUgVFgzOTEyX0lOVDRfRU5BQkxFCQkJCTB4MDEyNAorI2RlZmluZSBUWDM5MTJfSU5UNV9FTkFCTEUJCQkJMHgwMTI4CisjZGVmaW5lIFRYMzkxMl9JTlQ2X0VOQUJMRQkJCQkweDAxMmMKKyNkZWZpbmUgVFgzOTEyX0lOVDFfU1RBVFVTCQkJCTB4MDEwMAorI2RlZmluZSBUWDM5MTJfSU5UMl9TVEFUVVMJCQkJMHgwMTA0CisjZGVmaW5lIFRYMzkxMl9JTlQzX1NUQVRVUwkJCQkweDAxMDgKKyNkZWZpbmUgVFgzOTEyX0lOVDRfU1RBVFVTCQkJCTB4MDEwYworI2RlZmluZSBUWDM5MTJfSU5UNV9TVEFUVVMJCQkJMHgwMTEwCisjZGVmaW5lIFRYMzkxMl9JTlQ2X1NUQVRVUwkJCQkweDAxMTQKKworLyoKKyAqIEludGVycnVwdCAyIHJlZ2lzdGVyIHZhbHVlcworICovCisjZGVmaW5lIFRYMzkxMl9JTlQyX1VBUlRBUlhJTlQJCQkJMHg4MDAwMDAwMAorI2RlZmluZSBUWDM5MTJfSU5UMl9VQVJUQVJYT1ZFUlJVTklOVAkJCTB4NDAwMDAwMDAKKyNkZWZpbmUgVFgzOTEyX0lOVDJfVUFSVEFGUkFNRUVSUklOVAkJCTB4MjAwMDAwMDAKKyNkZWZpbmUgVFgzOTEyX0lOVDJfVUFSVEFCUkVBS0lOVAkJCTB4MTAwMDAwMDAKKyNkZWZpbmUgVFgzOTEyX0lOVDJfVUFSVEFQQVJJVFlJTlQJCQkweDA4MDAwMDAwCisjZGVmaW5lIFRYMzkxMl9JTlQyX1VBUlRBVFhJTlQJCQkJMHgwNDAwMDAwMAorI2RlZmluZSBUWDM5MTJfSU5UMl9VQVJUQVRYT1ZFUlJVTklOVAkJCTB4MDIwMDAwMDAKKyNkZWZpbmUgVFgzOTEyX0lOVDJfVUFSVEFFTVBUWUlOVAkJCTB4MDEwMDAwMDAKKyNkZWZpbmUgVFgzOTEyX0lOVDJfVUFSVEFETUFGVUxMSU5UCQkJMHgwMDgwMDAwMAorI2RlZmluZSBUWDM5MTJfSU5UMl9VQVJUQURNQUhBTEZJTlQJCQkweDAwNDAwMDAwCisjZGVmaW5lIFRYMzkxMl9JTlQyX1VBUlRCUlhJTlQJCQkJMHgwMDIwMDAwMAorI2RlZmluZSBUWDM5MTJfSU5UMl9VQVJUQlJYT1ZFUlJVTklOVAkJCTB4MDAxMDAwMDAKKyNkZWZpbmUgVFgzOTEyX0lOVDJfVUFSVEJGUkFNRUVSUklOVAkJCTB4MDAwODAwMDAKKyNkZWZpbmUgVFgzOTEyX0lOVDJfVUFSVEJCUkVBS0lOVAkJCTB4MDAwNDAwMDAKKyNkZWZpbmUgVFgzOTEyX0lOVDJfVUFSVEJQQVJJVFlJTlQJCQkweDAwMDIwMDAwCisjZGVmaW5lIFRYMzkxMl9JTlQyX1VBUlRCVFhJTlQJCQkJMHgwMDAxMDAwMAorI2RlZmluZSBUWDM5MTJfSU5UMl9VQVJUQlRYT1ZFUlJVTklOVAkJCTB4MDAwMDgwMDAKKyNkZWZpbmUgVFgzOTEyX0lOVDJfVUFSVEJFTVBUWUlOVAkJCTB4MDAwMDQwMDAKKyNkZWZpbmUgVFgzOTEyX0lOVDJfVUFSVEJETUFGVUxMSU5UCQkJMHgwMDAwMjAwMAorI2RlZmluZSBUWDM5MTJfSU5UMl9VQVJUQkRNQUhBTEZJTlQJCQkweDAwMDAxMDAwCisjZGVmaW5lIFRYMzkxMl9JTlQyX1VBUlRBX1JYX0JJVFMJCQkweGY4MDAwMDAwCisjZGVmaW5lIFRYMzkxMl9JTlQyX1VBUlRBX1RYX0JJVFMJCQkweDA3YzAwMDAwCisjZGVmaW5lIFRYMzkxMl9JTlQyX1VBUlRCX1JYX0JJVFMJCQkweDAwM2UwMDAwCisjZGVmaW5lIFRYMzkxMl9JTlQyX1VBUlRCX1RYX0JJVFMJCQkweDAwMDFmMDAwCisKKy8qCisgKiBJbnRlcnJ1cHQgNSByZWdpc3RlciB2YWx1ZXMKKyAqLworI2RlZmluZSBUWDM5MTJfSU5UNV9SVENJTlQJCQkJMHg4MDAwMDAwMAorI2RlZmluZSBUWDM5MTJfSU5UNV9BTEFSTUlOVAkJCQkweDQwMDAwMDAwCisjZGVmaW5lIFRYMzkxMl9JTlQ1X1BFUklOVAkJCQkweDIwMDAwMDAwCisjZGVmaW5lIFRYMzkxMl9JTlQ1X1NUUFRJTUVSSU5UCQkJCTB4MTAwMDAwMDAKKyNkZWZpbmUgVFgzOTEyX0lOVDVfUE9TUFdSSU5UCQkJCTB4MDgwMDAwMDAKKyNkZWZpbmUgVFgzOTEyX0lOVDVfTkVHUFdSSU5UCQkJCTB4MDQwMDAwMDAKKyNkZWZpbmUgVFgzOTEyX0lOVDVfUE9TUFdST0tJTlQJCQkJMHgwMjAwMDAwMAorI2RlZmluZSBUWDM5MTJfSU5UNV9ORUdQV1JPS0lOVAkJCQkweDAxMDAwMDAwCisjZGVmaW5lIFRYMzkxMl9JTlQ1X1BPU09OQlVUSU5UCQkJCTB4MDA4MDAwMDAKKyNkZWZpbmUgVFgzOTEyX0lOVDVfTkVHT05CVVRJTlQJCQkJMHgwMDQwMDAwMAorI2RlZmluZSBUWDM5MTJfSU5UNV9TUElCVUZBVkFJTElOVAkJCTB4MDAyMDAwMDAKKyNkZWZpbmUgVFgzOTEyX0lOVDVfU1BJRVJSSU5UCQkJCTB4MDAxMDAwMDAKKyNkZWZpbmUgVFgzOTEyX0lOVDVfU1BJUkNWSU5UCQkJCTB4MDAwODAwMDAKKyNkZWZpbmUgVFgzOTEyX0lOVDVfU1BJRU1QVFlJTlQJCQkJMHgwMDA0MDAwMAorI2RlZmluZSBUWDM5MTJfSU5UNV9JUkNPTlNNSU5UCQkJCTB4MDAwMjAwMDAKKyNkZWZpbmUgVFgzOTEyX0lOVDVfQ0FSU1RJTlQJCQkJMHgwMDAxMDAwMAorI2RlZmluZSBUWDM5MTJfSU5UNV9QT1NDQVJJTlQJCQkJMHgwMDAwODAwMAorI2RlZmluZSBUWDM5MTJfSU5UNV9ORUdDQVJJTlQJCQkJMHgwMDAwNDAwMAorI2RlZmluZSBUWDM5MTJfSU5UNV9JT1BPU0lOVDYJCQkJMHgwMDAwMjAwMAorI2RlZmluZSBUWDM5MTJfSU5UNV9JT1BPU0lOVDUJCQkJMHgwMDAwMTAwMAorI2RlZmluZSBUWDM5MTJfSU5UNV9JT1BPU0lOVDQJCQkJMHgwMDAwMDgwMAorI2RlZmluZSBUWDM5MTJfSU5UNV9JT1BPU0lOVDMJCQkJMHgwMDAwMDQwMAorI2RlZmluZSBUWDM5MTJfSU5UNV9JT1BPU0lOVDIJCQkJMHgwMDAwMDIwMAorI2RlZmluZSBUWDM5MTJfSU5UNV9JT1BPU0lOVDEJCQkJMHgwMDAwMDEwMAorI2RlZmluZSBUWDM5MTJfSU5UNV9JT1BPU0lOVDAJCQkJMHgwMDAwMDA4MAorI2RlZmluZSBUWDM5MTJfSU5UNV9JT05FR0lOVDYJCQkJMHgwMDAwMDA0MAorI2RlZmluZSBUWDM5MTJfSU5UNV9JT05FR0lOVDUJCQkJMHgwMDAwMDAyMAorI2RlZmluZSBUWDM5MTJfSU5UNV9JT05FR0lOVDQJCQkJMHgwMDAwMDAxMAorI2RlZmluZSBUWDM5MTJfSU5UNV9JT05FR0lOVDMJCQkJMHgwMDAwMDAwOAorI2RlZmluZSBUWDM5MTJfSU5UNV9JT05FR0lOVDIJCQkJMHgwMDAwMDAwNAorI2RlZmluZSBUWDM5MTJfSU5UNV9JT05FR0lOVDEJCQkJMHgwMDAwMDAwMgorI2RlZmluZSBUWDM5MTJfSU5UNV9JT05FR0lOVDAJCQkJMHgwMDAwMDAwMQorCisvKgorICogSW50ZXJydXB0IDYgc3RhdHVzIHJlZ2lzdGVyIHZhbHVlcworICovCisjZGVmaW5lIFRYMzkxMl9JTlQ2X1NUQVRVU19JUlFISUdICQkJMHg4MDAwMDAwMAorI2RlZmluZSBUWDM5MTJfSU5UNl9TVEFUVVNfSVJRTE9XCQkJMHg0MDAwMDAwMAorI2RlZmluZSBUWDM5MTJfSU5UNl9TVEFUVVNfcmVzZXJ2ZWQ2CQkJMHgzZmZmZmZjMAorI2RlZmluZSBUWDM5MTJfSU5UNl9TVEFUVVNfSU5UVkVDX1BPU05FR1BXUk9LSU5UCTB4MDAwMDAwM2MKKyNkZWZpbmUgVFgzOTEyX0lOVDZfU1RBVFVTX0lOVFZFQ19BTEFSTUlOVAkJMHgwMDAwMDAzOAorI2RlZmluZSBUWDM5MTJfSU5UNl9TVEFUVVNfSU5UVkVDX1BFUklOVAkJMHgwMDAwMDAzNAorI2RlZmluZSBUWDM5MTJfSU5UNl9TVEFUVVNfSU5UVkVDX3Jlc2VydmVkNQkJMHgwMDAwMDAzMAorI2RlZmluZSBUWDM5MTJfSU5UNl9TVEFUVVNfSU5UVkVDX1VBUlRBUlhJTlQJCTB4MDAwMDAwMmMKKyNkZWZpbmUgVFgzOTEyX0lOVDZfU1RBVFVTX0lOVFZFQ19VQVJUQlJYSU5UCQkweDAwMDAwMDI4CisjZGVmaW5lIFRYMzkxMl9JTlQ2X1NUQVRVU19JTlRWRUNfcmVzZXJ2ZWQ0CQkweDAwMDAwMDI0CisjZGVmaW5lIFRYMzkxMl9JTlQ2X1NUQVRVU19JTlRWRUNfSU9QT1NJTlQ2NQkJMHgwMDAwMDAyMAorI2RlZmluZSBUWDM5MTJfSU5UNl9TVEFUVVNfSU5UVkVDX3Jlc2VydmVkMwkJMHgwMDAwMDAxYworI2RlZmluZSBUWDM5MTJfSU5UNl9TVEFUVVNfSU5UVkVDX0lPTkVHSU5UNjUJCTB4MDAwMDAwMTgKKyNkZWZpbmUgVFgzOTEyX0lOVDZfU1RBVFVTX0lOVFZFQ19yZXNlcnZlZDIJCTB4MDAwMDAwMTQKKyNkZWZpbmUgVFgzOTEyX0lOVDZfU1RBVFVTX0lOVFZFQ19TTkRETUFDTlRJTlQJCTB4MDAwMDAwMTAKKyNkZWZpbmUgVFgzOTEyX0lOVDZfU1RBVFVTX0lOVFZFQ19URUxETUFDTlRJTlQJCTB4MDAwMDAwMGMKKyNkZWZpbmUgVFgzOTEyX0lOVDZfU1RBVFVTX0lOVFZFQ19DSElETUFDTlRJTlQJCTB4MDAwMDAwMDgKKyNkZWZpbmUgVFgzOTEyX0lOVDZfU1RBVFVTX0lOVFZFQ19JT1BPU05FR0lOVDAJCTB4MDAwMDAwMDQKKyNkZWZpbmUgVFgzOTEyX0lOVDZfU1RBVFVTX0lOVFZFQ19TVERIQU5ETEVSCQkweDAwMDAwMDAwCisjZGVmaW5lIFRYMzkxMl9JTlQ2X1NUQVRVU19yZXNlcnZlZDEJCQkweDAwMDAwMDAzCisKKy8qCisgKiBJbnRlcnJ1cHQgNiBlbmFibGUgcmVnaXN0ZXIgdmFsdWVzCisgKi8KKyNkZWZpbmUgVFgzOTEyX0lOVDZfRU5BQkxFX3Jlc2VydmVkNQkJCTB4ZmZmODAwMDAKKyNkZWZpbmUgVFgzOTEyX0lOVDZfRU5BQkxFX0dMT0JBTEVOCQkJMHgwMDA0MDAwMAorI2RlZmluZSBUWDM5MTJfSU5UNl9FTkFCTEVfSVJRUFJJVEVTVAkJCTB4MDAwMjAwMDAKKyNkZWZpbmUgVFgzOTEyX0lOVDZfRU5BQkxFX0lSUVRFU1QJCQkweDAwMDEwMDAwCisjZGVmaW5lIFRYMzkxMl9JTlQ2X0VOQUJMRV9QUklPUklUWU1BU0tfUE9TTkVHUFdST0tJTlQJMHgwMDAwODAwMAorI2RlZmluZSBUWDM5MTJfSU5UNl9FTkFCTEVfUFJJT1JJVFlNQVNLX0FMQVJNSU5UCTB4MDAwMDQwMDAKKyNkZWZpbmUgVFgzOTEyX0lOVDZfRU5BQkxFX1BSSU9SSVRZTUFTS19QRVJJTlQJCTB4MDAwMDIwMDAKKyNkZWZpbmUgVFgzOTEyX0lOVDZfRU5BQkxFX1BSSU9SSVRZTUFTS19yZXNlcnZlZDQJMHgwMDAwMTAwMAorI2RlZmluZSBUWDM5MTJfSU5UNl9FTkFCTEVfUFJJT1JJVFlNQVNLX1VBUlRBUlhJTlQJMHgwMDAwMDgwMAorI2RlZmluZSBUWDM5MTJfSU5UNl9FTkFCTEVfUFJJT1JJVFlNQVNLX1VBUlRCUlhJTlQJMHgwMDAwMDQwMAorI2RlZmluZSBUWDM5MTJfSU5UNl9FTkFCTEVfUFJJT1JJVFlNQVNLX3Jlc2VydmVkMwkweDAwMDAwMjAwCisjZGVmaW5lIFRYMzkxMl9JTlQ2X0VOQUJMRV9QUklPUklUWU1BU0tfSU9QT1NJTlQ2NQkweDAwMDAwMTAwCisjZGVmaW5lIFRYMzkxMl9JTlQ2X0VOQUJMRV9QUklPUklUWU1BU0tfcmVzZXJ2ZWQyCTB4MDAwMDAwODAKKyNkZWZpbmUgVFgzOTEyX0lOVDZfRU5BQkxFX1BSSU9SSVRZTUFTS19JT05FR0lOVDY1CTB4MDAwMDAwNDAKKyNkZWZpbmUgVFgzOTEyX0lOVDZfRU5BQkxFX1BSSU9SSVRZTUFTS19yZXNlcnZlZDEJMHgwMDAwMDAyMAorI2RlZmluZSBUWDM5MTJfSU5UNl9FTkFCTEVfUFJJT1JJVFlNQVNLX1NORERNQUNOVElOVAkweDAwMDAwMDEwCisjZGVmaW5lIFRYMzkxMl9JTlQ2X0VOQUJMRV9QUklPUklUWU1BU0tfVEVMRE1BQ05USU5UCTB4MDAwMDAwMDgKKyNkZWZpbmUgVFgzOTEyX0lOVDZfRU5BQkxFX1BSSU9SSVRZTUFTS19DSElETUFDTlRJTlQJMHgwMDAwMDAwNAorI2RlZmluZSBUWDM5MTJfSU5UNl9FTkFCTEVfUFJJT1JJVFlNQVNLX0lPUE9TTkVHSU5UMAkweDAwMDAwMDAyCisjZGVmaW5lIFRYMzkxMl9JTlQ2X0VOQUJMRV9QUklPUklUWU1BU0tfU1RESEFORExFUgkweDAwMDAwMDAxCisjZGVmaW5lIFRYMzkxMl9JTlQ2X0VOQUJMRV9ISUdIX1BSSU9SSVRZCQkweDAwMDBmZmZmCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKglQb3dlciBTdWJzeXN0ZW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgktLS0tLS0tLS0tLS0tLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKglDaGFwdGVyIDExIGluIFBoaWxpcHMgUFIzMTcwMCBVc2VyIE1hbnVhbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKglDaGFwdGVyIDEyIGluIFRvc2hpYmEgVE1QUjM5MDUvMTIgVXNlciBNYW51YWwgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFRYMzkxMl9QT1dFUl9DVFJMCQkJCTB4MDFjNAorCisvKgorICogUG93ZXIgY29udHJvbCByZWdpc3RlciB2YWx1ZXMKKyAqLworI2RlZmluZSBUWDM5MTJfUE9XRVJfQ1RSTF9PTkJVVE4JCQkweDgwMDAwMDAwCisjZGVmaW5lIFRYMzkxMl9QT1dFUl9DVFJMX1BXUklOVAkJCTB4NDAwMDAwMDAKKyNkZWZpbmUgVFgzOTEyX1BPV0VSX0NUUkxfUFdST0sJCQkJMHgyMDAwMDAwMAorI2RlZmluZSBUWDM5MTJfUE9XRVJfQ1RSTF9WSURSRl9NQVNLCQkJMHgxODAwMDAwMAorI2RlZmluZSBUWDM5MTJfUE9XRVJfQ1RSTF9TTE9XQlVTCQkJMHgwNDAwMDAwMAorI2RlZmluZSBUWDM5MTJfUE9XRVJfQ1RSTF9ESVZNT0QJCQkweDAyMDAwMDAwCisjZGVmaW5lIFRYMzkxMl9QT1dFUl9DVFJMX3Jlc2VydmVkMgkJCTB4MDFmZjAwMDAKKyNkZWZpbmUgVFgzOTEyX1BPV0VSX0NUUkxfU1RQVElNRVJWQUxfTUFTSwkJMHgwMDAwZjAwMAorI2RlZmluZSBUWDM5MTJfUE9XRVJfQ1RSTF9FTlNUUFRJTUVSCQkJMHgwMDAwMDgwMAorI2RlZmluZSBUWDM5MTJfUE9XRVJfQ1RSTF9FTkZPUkNFU0hVVERXTgkJMHgwMDAwMDQwMAorI2RlZmluZSBUWDM5MTJfUE9XRVJfQ1RSTF9GT1JDRVNIVVREV04JCQkweDAwMDAwMjAwCisjZGVmaW5lIFRYMzkxMl9QT1dFUl9DVFJMX0ZPUkNFU0hVVERXTk9DQwkJMHgwMDAwMDEwMAorI2RlZmluZSBUWDM5MTJfUE9XRVJfQ1RSTF9TRUxDMk1TCQkJMHgwMDAwMDA4MAorI2RlZmluZSBUWDM5MTJfUE9XRVJfQ1RSTF9yZXNlcnZlZDEJCQkweDAwMDAwMDQwCisjZGVmaW5lIFRYMzkxMl9QT1dFUl9DVFJMX0JQREJWQ0MzCQkJMHgwMDAwMDAyMAorI2RlZmluZSBUWDM5MTJfUE9XRVJfQ1RSTF9TVE9QQ1BVCQkJMHgwMDAwMDAxMAorI2RlZmluZSBUWDM5MTJfUE9XRVJfQ1RSTF9EQk5DT05CVVROCQkJMHgwMDAwMDAwOAorI2RlZmluZSBUWDM5MTJfUE9XRVJfQ1RSTF9DT0xEU1RBUlQJCQkweDAwMDAwMDA0CisjZGVmaW5lIFRYMzkxMl9QT1dFUl9DVFJMX1BXUkNTCQkJCTB4MDAwMDAwMDIKKyNkZWZpbmUgVFgzOTEyX1BPV0VSX0NUUkxfVkNDT04JCQkJMHgwMDAwMDAwMQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoJVGltZXIgU3Vic3lzdGVtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoJLS0tLS0tLS0tLS0tLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoJQ2hhcHRlciAxNCBpbiBQaGlsaXBzIFBSMzE3MDAgVXNlciBNYW51YWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoJQ2hhcHRlciAxNSBpbiBUb3NoaWJhIFRNUFIzOTA1LzEyIFVzZXIgTWFudWFsICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBUWDM5MTJfUlRDX0hJR0gJCQkJCTB4MDE0MAorI2RlZmluZSBUWDM5MTJfUlRDX0xPVwkJCQkJMHgwMTQ0CisjZGVmaW5lIFRYMzkxMl9SVENfQUxBUk1fSElHSAkJCQkweDAxNDgKKyNkZWZpbmUgVFgzOTEyX1JUQ19BTEFSTV9MT1cJCQkJMHgwMTRjCisjZGVmaW5lIFRYMzkxMl9USU1FUl9DVFJMCQkJCTB4MDE1MAorI2RlZmluZSBUWDM5MTJfVElNRVJfUEVSSU9ECQkJCTB4MDE1NAorCisvKgorICogVGltZXIgY29udHJvbCByZWdpc3RlciB2YWx1ZXMKKyAqLworI2RlZmluZSBUWDM5MTJfVElNRVJfQ1RSTF9GUkVFWkVQUkUJCQkweDAwMDAwMDgwCisjZGVmaW5lIFRYMzkxMl9USU1FUl9DVFJMX0ZSRUVaRVJUQwkJCTB4MDAwMDAwNDAKKyNkZWZpbmUgVFgzOTEyX1RJTUVSX0NUUkxfRlJFRVpFVElNRVIJCQkweDAwMDAwMDIwCisjZGVmaW5lIFRYMzkxMl9USU1FUl9DVFJMX0VOUEVSVElNRVIJCQkweDAwMDAwMDEwCisjZGVmaW5lIFRYMzkxMl9USU1FUl9DVFJMX1JUQ0NMRUFSCQkJMHgwMDAwMDAwOAorI2RlZmluZSBUWDM5MTJfVElNRVJfQ1RSTF9URVNUQzhNUwkJCTB4MDAwMDAwMDQKKyNkZWZpbmUgVFgzOTEyX1RJTUVSX0NUUkxfRU5URVNUQ0xLCQkJMHgwMDAwMDAwMgorI2RlZmluZSBUWDM5MTJfVElNRVJfQ1RSTF9FTlJUQ1RTVAkJCTB4MDAwMDAwMDEKKworLyoKKyAqIFRoZSBwZXJpb2RpYyB0aW1lciBoYXMgZ3JhbnVsYXJpdHkgb2YgODY4IG5hbm9zZWNvbmRzIHdoaWNoCisgKiByZXN1bHRzIGluIGEgY291bnQgb2YgKDEuMTUyIHggMTBeNiAvIDEwMCkgaW4gb3JkZXIgdG8gYWNoaWV2ZQorICogYSAxMCBtaWxsaXNlY29uZCBwZXJpb2RpYyBzeXN0ZW0gY2xvY2suCisgKi8KKyNkZWZpbmUgVFgzOTEyX1NZU19USU1FUl9WQUxVRQkJCQkoMTE1MjAwMC9IWikKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCVVBUlQgU3Vic3lzdGVtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqCS0tLS0tLS0tLS0tLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqCUNoYXB0ZXIgMTUgaW4gUGhpbGlwcyBQUjMxNzAwIFVzZXIgTWFudWFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqCUNoYXB0ZXIgMTYgaW4gVG9zaGliYSBUTVBSMzkwNS8xMiBVc2VyIE1hbnVhbCAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgVFgzOTEyX1VBUlRBX0NUUkwxCQkJCTB4MDBiMAorI2RlZmluZSBUWDM5MTJfVUFSVEFfQ1RSTDIJCQkJMHgwMGI0CisjZGVmaW5lIFRYMzkxMl9VQVJUQV9ETUFfQ1RSTDEJCQkJMHgwMGI4CisjZGVmaW5lIFRYMzkxMl9VQVJUQV9ETUFfQ1RSTDIJCQkJMHgwMGJjCisjZGVmaW5lIFRYMzkxMl9VQVJUQV9ETUFfQ05UCQkJCTB4MDBjMAorI2RlZmluZSBUWDM5MTJfVUFSVEFfREFUQQkJCQkweDAwYzQKKyNkZWZpbmUgVFgzOTEyX1VBUlRCX0NUUkwxCQkJCTB4MDBjOAorI2RlZmluZSBUWDM5MTJfVUFSVEJfQ1RSTDIJCQkJMHgwMGNjCisjZGVmaW5lIFRYMzkxMl9VQVJUQl9ETUFfQ1RSTDEJCQkJMHgwMGQwCisjZGVmaW5lIFRYMzkxMl9VQVJUQl9ETUFfQ1RSTDIJCQkJMHgwMGQ0CisjZGVmaW5lIFRYMzkxMl9VQVJUQl9ETUFfQ05UCQkJCTB4MDBkOAorI2RlZmluZSBUWDM5MTJfVUFSVEJfREFUQQkJCQkweDAwZGMKKworLyoKKyAqIFVBUlQgQ29udHJvbCBSZWdpc3RlciAxIHZhbHVlcworICovCisjZGVmaW5lIFRYMzkxMl9VQVJUX0NUUkwxX1VBUlRPTgkJCTB4ODAwMDAwMDAKKyNkZWZpbmUgVFgzOTEyX1VBUlRfQ1RSTDFfRU1QVFkJCQkJMHg0MDAwMDAwMAorI2RlZmluZSBUWDM5MTJfVUFSVF9DVFJMMV9QUlhIT0xERlVMTAkJCTB4MjAwMDAwMDAKKyNkZWZpbmUgVFgzOTEyX1VBUlRfQ1RSTDFfUlhIT0xERlVMTAkJCTB4MTAwMDAwMDAKKyNkZWZpbmUgVFgzOTEyX1VBUlRfQ1RSTDFfcmVzZXJ2ZWQxCQkJMHgwZmZmMDAwMAorI2RlZmluZSBUWDM5MTJfVUFSVF9DVFJMMV9FTkRNQVJYCQkJMHgwMDAwODAwMAorI2RlZmluZSBUWDM5MTJfVUFSVF9DVFJMMV9FTkRNQVRYCQkJMHgwMDAwNDAwMAorI2RlZmluZSBUWDM5MTJfVUFSVF9DVFJMMV9URVNUTU9ERQkJCTB4MDAwMDIwMDAKKyNkZWZpbmUgVFgzOTEyX1VBUlRfQ1RSTDFfRU5CUkVBS0hBTFQJCQkweDAwMDAxMDAwCisjZGVmaW5lIFRYMzkxMl9VQVJUX0NUUkwxX0VORE1BVEVTVAkJCTB4MDAwMDA4MDAKKyNkZWZpbmUgVFgzOTEyX1VBUlRfQ1RSTDFfRU5ETUFMT09QCQkJMHgwMDAwMDQwMAorI2RlZmluZSBUWDM5MTJfVUFSVF9DVFJMMV9QVUxTRU9QVDEJCQkweDAwMDAwMjAwCisjZGVmaW5lIFRYMzkxMl9VQVJUX0NUUkwxX1BVTFNFT1BUMQkJCTB4MDAwMDAxMDAKKyNkZWZpbmUgVFgzOTEyX1VBUlRfQ1RSTDFfRFRJTlZFUlQJCQkweDAwMDAwMDgwCisjZGVmaW5lIFRYMzkxMl9VQVJUX0NUUkwxX0RJU1RYRAkJCTB4MDAwMDAwNDAKKyNkZWZpbmUgVFgzOTEyX1VBUlRfQ1RSTDFfVFdPU1RPUAkJCTB4MDAwMDAwMjAKKyNkZWZpbmUgVFgzOTEyX1VBUlRfQ1RSTDFfTE9PUEJBQ0sJCQkweDAwMDAwMDEwCisjZGVmaW5lIFRYMzkxMl9VQVJUX0NUUkwxX0JJVF83CQkJCTB4MDAwMDAwMDgKKyNkZWZpbmUgVFgzOTEyX1VBUlRfQ1RSTDFfRVZFTlBBUklUWQkJCTB4MDAwMDAwMDQKKyNkZWZpbmUgVFgzOTEyX1VBUlRfQ1RSTDFfRU5QQVJJVFkJCQkweDAwMDAwMDAyCisjZGVmaW5lIFRYMzkxMl9VQVJUX0NUUkwxX0VOVUFSVAkJCTB4MDAwMDAwMDEKKworLyoKKyAqIFVBUlQgQ29udHJvbCBSZWdpc3RlciAyIHZhbHVlcworICovCisjZGVmaW5lIFRYMzkxMl9VQVJUX0NUUkwyX0IyMzA0MDAJCQkweDAwMDAJLyogICAwICovCisjZGVmaW5lIFRYMzkxMl9VQVJUX0NUUkwyX0IxMTUyMDAJCQkweDAwMDEJLyogICAxICovCisjZGVmaW5lIFRYMzkxMl9VQVJUX0NUUkwyX0I3NjgwMAkJCTB4MDAwMgkvKiAgIDIgKi8KKyNkZWZpbmUgVFgzOTEyX1VBUlRfQ1RSTDJfQjU3NjAwCQkJMHgwMDAzCS8qICAgMyAqLworI2RlZmluZSBUWDM5MTJfVUFSVF9DVFJMMl9CMzg0MDAJCQkweDAwMDUJLyogICA1ICovCisjZGVmaW5lIFRYMzkxMl9VQVJUX0NUUkwyX0IxOTIwMAkJCTB4MDAwYgkvKiAgMTEgKi8KKyNkZWZpbmUgVFgzOTEyX1VBUlRfQ1RSTDJfQjk2MDAJCQkJMHgwMDE2CS8qICAyMiAqLworI2RlZmluZSBUWDM5MTJfVUFSVF9DVFJMMl9CNDgwMAkJCQkweDAwMmYJLyogIDQ3ICovCisjZGVmaW5lIFRYMzkxMl9VQVJUX0NUUkwyX0IyNDAwCQkJCTB4MDA1ZgkvKiAgOTUgKi8KKyNkZWZpbmUgVFgzOTEyX1VBUlRfQ1RSTDJfQjEyMDAJCQkJMHgwMGJmCS8qIDE5MSAqLworI2RlZmluZSBUWDM5MTJfVUFSVF9DVFJMMl9CNjAwCQkJCTB4MDE3ZgkvKiAzODMgKi8KKyNkZWZpbmUgVFgzOTEyX1VBUlRfQ1RSTDJfQjMwMAkJCQkweDAyZmYJLyogNzY3ICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoJVmlkZW8gU3Vic3lzdGVtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoJLS0tLS0tLS0tLS0tLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoJQ2hhcHRlciAxNiBpbiBQaGlsaXBzIFBSMzE3MDAgVXNlciBNYW51YWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoJQ2hhcHRlciAxNyBpbiBUb3NoaWJhIFRNUFIzOTA1LzEyIFVzZXIgTWFudWFsICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBUWDM5MTJfVklERU9fQ1RSTDEJCQkJMHgwMDI4CisjZGVmaW5lIFRYMzkxMl9WSURFT19DVFJMMgkJCQkweDAwMmMKKyNkZWZpbmUgVFgzOTEyX1ZJREVPX0NUUkwzCQkJCTB4MDAzMAorI2RlZmluZSBUWDM5MTJfVklERU9fQ1RSTDQJCQkJMHgwMDM0CisjZGVmaW5lIFRYMzkxMl9WSURFT19DVFJMNQkJCQkweDAwMzgKKyNkZWZpbmUgVFgzOTEyX1ZJREVPX0NUUkw2CQkJCTB4MDAzYworI2RlZmluZSBUWDM5MTJfVklERU9fQ1RSTDcJCQkJMHgwMDQwCisjZGVmaW5lIFRYMzkxMl9WSURFT19DVFJMOAkJCQkweDAwNDQKKyNkZWZpbmUgVFgzOTEyX1ZJREVPX0NUUkw5CQkJCTB4MDA0OAorI2RlZmluZSBUWDM5MTJfVklERU9fQ1RSTDEwCQkJCTB4MDA0YworI2RlZmluZSBUWDM5MTJfVklERU9fQ1RSTDExCQkJCTB4MDA1MAorI2RlZmluZSBUWDM5MTJfVklERU9fQ1RSTDEyCQkJCTB4MDA1NAorI2RlZmluZSBUWDM5MTJfVklERU9fQ1RSTDEzCQkJCTB4MDA1OAorI2RlZmluZSBUWDM5MTJfVklERU9fQ1RSTDE0CQkJCTB4MDA1YworCisvKgorICogVmlkZW8gQ29udHJvbCBSZWdpc3RlciAxIHZhbHVlcworICovCisjZGVmaW5lIFRYMzkxMl9WSURFT19DVFJMMV9MSU5FQ05UCQkJMHhmZmMwMDAwMAorI2RlZmluZSBUWDM5MTJfVklERU9fQ1RSTDFfTE9BRERMWQkJCTB4MDAyMDAwMDAKKyNkZWZpbmUgVFgzOTEyX1ZJREVPX0NUUkwxX0JBVURWQUwJCQkweDAwMWYwMDAwCisjZGVmaW5lIFRYMzkxMl9WSURFT19DVFJMMV9WSURET05FVkFMCQkJMHgwMDAwZmUwMAorI2RlZmluZSBUWDM5MTJfVklERU9fQ1RSTDFfRU5GUkVFWkVGUkFNRQkJMHgwMDAwMDEwMAorI2RlZmluZSBUWDM5MTJfVklERU9fQ1RSTDFfQklUU0VMX01BU0sJCQkweDAwMDAwMGMwCisjZGVmaW5lIFRYMzkxMl9WSURFT19DVFJMMV9CSVRTRUxfOEJJVF9DT0xPUgkJMHgwMDAwMDBjMAorI2RlZmluZSBUWDM5MTJfVklERU9fQ1RSTDFfQklUU0VMXzRCSVRfR1JBWQkJMHgwMDAwMDA4MAorI2RlZmluZSBUWDM5MTJfVklERU9fQ1RSTDFfQklUU0VMXzJCSVRfR1JBWQkJMHgwMDAwMDA0MAorI2RlZmluZSBUWDM5MTJfVklERU9fQ1RSTDFfRElTUFNQTElUCQkJMHgwMDAwMDAyMAorI2RlZmluZSBUWDM5MTJfVklERU9fQ1RSTDFfRElTUDgJCQkweDAwMDAwMDEwCisjZGVmaW5lIFRYMzkxMl9WSURFT19DVFJMMV9ERk1PREUJCQkweDAwMDAwMDA4CisjZGVmaW5lIFRYMzkxMl9WSURFT19DVFJMMV9JTlZWSUQJCQkweDAwMDAwMDA0CisjZGVmaW5lIFRYMzkxMl9WSURFT19DVFJMMV9ESVNQT04JCQkweDAwMDAwMDAyCisjZGVmaW5lIFRYMzkxMl9WSURFT19DVFJMMV9FTlZJRAkJCTB4MDAwMDAwMDEKKworI2VuZGlmCS8qIF9UWDM5MTJfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvdHg0OTI3L3Ntc2NfZmRjMzdtODF4LmggYi9pbmNsdWRlL2FzbS1taXBzL3R4NDkyNy9zbXNjX2ZkYzM3bTgxeC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkOTNiYWIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3R4NDkyNy9zbXNjX2ZkYzM3bTgxeC5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1taXBzL3R4NDkyNy9zbXNjX2ZkYzM3bTgxeC5oCisgKgorICogSW50ZXJmYWNlIGZvciBzbXNjIGZkYzQ4bTgxeCBTdXBlciBJTyBjaGlwCisgKgorICogQXV0aG9yOiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuIHNvdXJjZUBtdmlzdGEuY29tCisgKgorICogMjAwMS0yMDAzIChjKSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbQorICogaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzCisgKiBvciBpbXBsaWVkLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KKyAqIE1hbmlzaCBMYWNod2FuaSwgbWxhY2h3YW5pQG12aXN0YS5jb20KKyAqLworCisjaWZuZGVmIF9TTVNDX0ZEQzM3TTgxWF9IXworI2RlZmluZSBfU01TQ19GREMzN004MVhfSF8KKworLyogQ29tbW9uIFJlZ2lzdGVycyAqLworI2RlZmluZSBTTVNDX0ZEQzM3TTgxWF9DT05GSUdfSU5ERVggIDB4MDAKKyNkZWZpbmUgU01TQ19GREMzN004MVhfQ09ORklHX0RBVEEgICAweDAxCisjZGVmaW5lIFNNU0NfRkRDMzdNODFYX0NPTkYgICAgICAgICAgMHgwMgorI2RlZmluZSBTTVNDX0ZEQzM3TTgxWF9JTkRFWCAgICAgICAgIDB4MDMKKyNkZWZpbmUgU01TQ19GREMzN004MVhfRE5VTSAgICAgICAgICAweDA3CisjZGVmaW5lIFNNU0NfRkRDMzdNODFYX0RJRCAgICAgICAgICAgMHgyMAorI2RlZmluZSBTTVNDX0ZEQzM3TTgxWF9EUkVWICAgICAgICAgIDB4MjEKKyNkZWZpbmUgU01TQ19GREMzN004MVhfUENOVCAgICAgICAgICAweDIyCisjZGVmaW5lIFNNU0NfRkRDMzdNODFYX1BNR1QgICAgICAgICAgMHgyMworI2RlZmluZSBTTVNDX0ZEQzM3TTgxWF9PU0MgICAgICAgICAgIDB4MjQKKyNkZWZpbmUgU01TQ19GREMzN004MVhfQ09ORlBBMCAgICAgICAweDI2CisjZGVmaW5lIFNNU0NfRkRDMzdNODFYX0NPTkZQQTEgICAgICAgMHgyNworI2RlZmluZSBTTVNDX0ZEQzM3TTgxWF9URVNUNCAgICAgICAgIDB4MkIKKyNkZWZpbmUgU01TQ19GREMzN004MVhfVEVTVDUgICAgICAgICAweDJDCisjZGVmaW5lIFNNU0NfRkRDMzdNODFYX1RFU1QxICAgICAgICAgMHgyRAorI2RlZmluZSBTTVNDX0ZEQzM3TTgxWF9URVNUMiAgICAgICAgIDB4MkUKKyNkZWZpbmUgU01TQ19GREMzN004MVhfVEVTVDMgICAgICAgICAweDJGCisKKy8qIExvZ2ljYWwgZGV2aWNlIG51bWJlcnMgKi8KKyNkZWZpbmUgU01TQ19GREMzN004MVhfRkREICAgICAgICAgICAweDAwCisjZGVmaW5lIFNNU0NfRkRDMzdNODFYX1BBUkFMTEVMICAgICAgMHgwMworI2RlZmluZSBTTVNDX0ZEQzM3TTgxWF9TRVJJQUwxICAgICAgIDB4MDQKKyNkZWZpbmUgU01TQ19GREMzN004MVhfU0VSSUFMMiAgICAgICAweDA1CisjZGVmaW5lIFNNU0NfRkRDMzdNODFYX0tCRCAgICAgICAgICAgMHgwNworI2RlZmluZSBTTVNDX0ZEQzM3TTgxWF9BVVhJTyAgICAgICAgIDB4MDgKKyNkZWZpbmUgU01TQ19GREMzN004MVhfTk9ORSAgICAgICAgICAweGZmCisKKy8qIExvZ2ljYWwgZGV2aWNlIENvbmZpZyBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgU01TQ19GREMzN004MVhfQUNUSVZFICAgICAgICAweDMwCisjZGVmaW5lIFNNU0NfRkRDMzdNODFYX0JBU0VBRERSMCAgICAgMHg2MAorI2RlZmluZSBTTVNDX0ZEQzM3TTgxWF9CQVNFQUREUjEgICAgIDB4NjEKKyNkZWZpbmUgU01TQ19GREMzN004MVhfSU5UICAgICAgICAgICAweDcwCisjZGVmaW5lIFNNU0NfRkRDMzdNODFYX0lOVDIgICAgICAgICAgMHg3MgorI2RlZmluZSBTTVNDX0ZEQzM3TTgxWF9MRENSX0YwICAgICAgIDB4RjAKKworLyogQ2hpcCBDb25maWcgVmFsdWVzICovCisjZGVmaW5lIFNNU0NfRkRDMzdNODFYX0NPTkZJR19FTlRFUiAgMHg1NQorI2RlZmluZSBTTVNDX0ZEQzM3TTgxWF9DT05GSUdfRVhJVCAgIDB4YWEKKyNkZWZpbmUgU01TQ19GREMzN004MVhfQ0hJUF9JRCAgICAgICAweDRkCisKK3Vuc2lnbmVkIGxvbmcgX19pbml0IHNtc2NfZmRjMzdtODF4X2luaXQodW5zaWduZWQgbG9uZyBwb3J0KTsKKwordm9pZCBzbXNjX2ZkYzM3bTgxeF9jb25maWdfYmVnKHZvaWQpOworCit2b2lkIHNtc2NfZmRjMzdtODF4X2NvbmZpZ19lbmQodm9pZCk7CisKK3ZvaWQgc21zY19mZGMzN204MXhfY29uZmlnX3NldCh1OCByZWcsIHU4IHZhbCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy90eDQ5MjcvdG9zaGliYV9yYnR4NDkyNy5oIGIvaW5jbHVkZS9hc20tbWlwcy90eDQ5MjcvdG9zaGliYV9yYnR4NDkyNy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjZTFlOTQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3R4NDkyNy90b3NoaWJhX3JidHg0OTI3LmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIEF1dGhvcjogTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICogICAgICAgICBzb3VyY2VAbXZpc3RhLmNvbQorICoKKyAqIENvcHlyaWdodCAyMDAxLTIwMDIgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisgKiAgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqICBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IKKyAqICBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFCisgKiAgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworI2lmbmRlZiBfX0FTTV9UWDQ5MjdfVE9TSElCQV9SQlRYNDkyN19ICisjZGVmaW5lIF9fQVNNX1RYNDkyN19UT1NISUJBX1JCVFg0OTI3X0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS90eDQ5MjcvdHg0OTI3Lmg+CisjaW5jbHVkZSA8YXNtL3R4NDkyNy90eDQ5MjdfbWlwcy5oPgorI2lmZGVmIENPTkZJR19QQ0kKKyNpbmNsdWRlIDxhc20vdHg0OTI3L3R4NDkyN19wY2kuaD4KKyNlbmRpZgorCisjZGVmaW5lIFRPU0hJQkFfUkJUWDQ5MjdfV1IwOChhLGIpIGRvIHsgVFg0OTI3X1dSMDgoYSxiKTsgd2JmbHVzaCgpOyB9IHdoaWxlICggMCApCisKKworI2lmZGVmIENPTkZJR19QQ0kKKyNkZWZpbmUgVEJUWDQ5MjdfSVNBX0lPX09GRlNFVCBUWDQ5MjdfUENJSU8KKyNlbHNlCisjZGVmaW5lIFRCVFg0OTI3X0lTQV9JT19PRkZTRVQgMAorI2VuZGlmCisKKyNkZWZpbmUgUkJUWDQ5MjdfU1dfUkVTRVRfRE8gICAgICAgICAweGJjMDBmMDAwCisjZGVmaW5lIFJCVFg0OTI3X1NXX1JFU0VUX0RPX1NFVCAgICAgICAgICAgICAgICAweDAxCisKKyNkZWZpbmUgUkJUWDQ5MjdfU1dfUkVTRVRfRU5BQkxFICAgICAweGJjMDBmMDAyCisjZGVmaW5lIFJCVFg0OTI3X1NXX1JFU0VUX0VOQUJMRV9TRVQgICAgICAgICAgICAweDAxCisKKworI2RlZmluZSBSQlRYNDkyN19SVExfODAxOV9CQVNFICgweDFjMDIwMjgwLVRCVFg0OTI3X0lTQV9JT19PRkZTRVQpCisjZGVmaW5lIFJCVFg0OTI3X1JUTF84MDE5X0lSUSAgKDI5KQorCisjZW5kaWYgLyogX19BU01fVFg0OTI3X1RPU0hJQkFfUkJUWDQ5MjdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy90eDQ5MjcvdHg0OTI3LmggYi9pbmNsdWRlL2FzbS1taXBzL3R4NDkyNy90eDQ5MjcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDkzOWRiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy90eDQ5MjcvdHg0OTI3LmgKQEAgLTAsMCArMSw1MjUgQEAKKy8qCisgKiBBdXRob3I6IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqICAgICAgICAgc291cmNlQG12aXN0YS5jb20KKyAqCisgKiBDb3B5cmlnaHQgMjAwMS0yMDAyIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorICogIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiAgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqICBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqICBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCisgKiAgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRQorICogIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKyNpZm5kZWYgX19BU01fVFg0OTI3X1RYNDkyN19ICisjZGVmaW5lIF9fQVNNX1RYNDkyN19UWDQ5MjdfSAorCisjaW5jbHVkZSA8YXNtL3R4NDkyNy90eDQ5MjdfbWlwcy5oPgorCisvKgorIFRoaXMgcmVnaXN0ZXIgbmFtaW5nIGNhbWUgZnJvbSB0aGUgaW50ZXJncmF0ZSBjcHUvY29udHJvb2xlciBuYW1lIFRYNDkyNworIGZvbGxvd2VkIGJ5IHRoZSBkZXZpY2UgbmFtZSBmcm9tIHRhYmxlIDQuMi4yIG9uIHBhZ2UgNC0zIGFuZCB0aGVuIGZvbGxvd2VkCisgYnkgdGhlIHJlZ2lzdGVyIG5hbWUgZnJvbSB0YWJsZSA0LjIuMyBvbiBwYWdlcyA0LTQgdG8gNC04LiAgVGhlIG1hbmF1bAorIHVzZWQgaXMgIlRNUFI0OTI3QlQgUHJlbGltaW5hcnkgUmV2IDAuMSAyMC5KdWwuMjAwMSIuCisgKi8KKworI2RlZmluZSBUWDQ5MjdfU0lPXzBfQkFTRQorCisvKiBUWDQ5MjcgY29udHJvbGxlciAqLworI2RlZmluZSBUWDQ5MjdfQkFTRSAgICAgICAgICAgICAgICAgICAgIDB4ZmZmMWYwMDAwCisjZGVmaW5lIFRYNDkyN19CQVNFICAgICAgICAgICAgICAgICAgICAgMHhmZmYxZjAwMDAKKyNkZWZpbmUgVFg0OTI3X0xJTUlUICAgICAgICAgICAgICAgICAgICAweGZmZjFmZmZmZgorCisKKy8qIFRYNDkyNyBTRFJBTSBjb250cm9sbGVyICg2NC1iaXQgcmVnaXN0ZXJzKSAqLworI2RlZmluZSBUWDQ5MjdfU0RSQU1DX0JBU0UgICAgICAgICAgICAgIDB4ODAwMCAKKyNkZWZpbmUgVFg0OTI3X1NEUkFNQ19TRENDUjAgICAgICAgICAgICAweDgwMDAgCisjZGVmaW5lIFRYNDkyN19TRFJBTUNfU0RDQ1IxICAgICAgICAgICAgMHg4MDA4CisjZGVmaW5lIFRYNDkyN19TRFJBTUNfU0RDQ1IyICAgICAgICAgICAgMHg4MDEwCisjZGVmaW5lIFRYNDkyN19TRFJBTUNfU0RDQ1IzICAgICAgICAgICAgMHg4MDE4CisjZGVmaW5lIFRYNDkyN19TRFJBTUNfU0RDVFIgICAgICAgICAgICAgMHg4MDQwCisjZGVmaW5lIFRYNDkyN19TRFJBTUNfU0RDTUQgICAgICAgICAgICAgMHg4MDU4CisjZGVmaW5lIFRYNDkyN19TRFJBTUNfTElNSVQgICAgICAgICAgICAgMHg4ZmZmIAorCisKKy8qIFRYNDkyNyBleHRlcm5hbCBidXMgY29udHJvbGxlciAoNjQtYml0IHJlZ2lzdGVycykgKi8KKyNkZWZpbmUgVFg0OTI3X0VCVVNDX0JBU0UgICAgICAgICAgICAgICAweDkwMDAKKyNkZWZpbmUgVFg0OTI3X0VCVVNDX0VCQ0NSMCAgICAgICAgICAgICAweDkwMDAKKyNkZWZpbmUgVFg0OTI3X0VCVVNDX0VCQ0NSMSAgICAgICAgICAgICAweDkwMDgKKyNkZWZpbmUgVFg0OTI3X0VCVVNDX0VCQ0NSMiAgICAgICAgICAgICAweDkwMTAKKyNkZWZpbmUgVFg0OTI3X0VCVVNDX0VCQ0NSMyAgICAgICAgICAgICAweDkwMTgKKyNkZWZpbmUgVFg0OTI3X0VCVVNDX0VCQ0NSNCAgICAgICAgICAgICAweDkwMjAKKyNkZWZpbmUgVFg0OTI3X0VCVVNDX0VCQ0NSNSAgICAgICAgICAgICAweDkwMjgKKyNkZWZpbmUgVFg0OTI3X0VCVVNDX0VCQ0NSNiAgICAgICAgICAgICAweDkwMzAKKyNkZWZpbmUgVFg0OTI3X0VCVVNDX0VCQ0NSNyAgICAgICAgICAgICAweDkwMDgKKyNkZWZpbmUgVFg0OTI3X0VCVVNDX0xJTUlUICAgICAgICAgICAgICAweDlmZmYKKworCisvKiBUWDQ5MjcgU0RSUkFNIEVycm9yIENoZWNrIENvcnJlY3Rpb24gKDY0LWJpdCByZWdpc3RlcnMpICovCisjZGVmaW5lIFRYNDkyN19FQ0NfQkFTRSAgICAgICAgICAgICAgICAgMHhhMDAwCisjZGVmaW5lIFRYNDkyN19FQ0NfRUNDQ1IgICAgICAgICAgICAgICAgMHhhMDAwCisjZGVmaW5lIFRYNDkyN19FQ0NfRUNDU1IgICAgICAgICAgICAgICAgMHhhMDA4CisjZGVmaW5lIFRYNDkyN19FQ0NfTElNSVQgICAgICAgICAgICAgICAgMHhhZmZmCisKKworLyogVFg0OTI3IERNQSBDb250cm9sbGVyICg2NC1iaXQgcmVnaXN0ZXJzKSAqLworI2RlZmluZSBUWDQ5MjdfRE1BQ19CQVNFICAgICAgICAgICAgICAgIDB4YjAwMAorI2RlZmluZSBUWDQ5MjdfRE1BQ19UQkQgICAgICAgICAgICAgICAgIDB4YjAwMAorI2RlZmluZSBUWDQ5MjdfRE1BQ19MSU1JVCAgICAgICAgICAgICAgIDB4YmZmZgorCisKKy8qIFRYNDkyNyBQQ0kgQ29udHJvbGxlciAoMzItYml0IHJlZ2lzdGVycykgKi8KKyNkZWZpbmUgVFg0OTI3X1BDSUNfQkFTRSAgICAgICAgICAgICAgICAweGQwMDAKKyNkZWZpbmUgVFg0OTI3X1BDSUNfVEJEICAgICAgICAgICAgICAgICAweGIwMDAKKyNkZWZpbmUgVFg0OTI3X1BDSUNfTElNSVQgICAgICAgICAgICAgICAweGRmZmYKKworCisvKiBUWDQ5MjcgQ29uZmlndXJhdGlvbiByZWdpc3RlcnMgKDY0LWJpdCByZWdpc3RlcnMpICovCisjZGVmaW5lIFRYNDkyN19DT05GSUdfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgMHhlMDAwCisjZGVmaW5lIFRYNDkyN19DT05GSUdfQ0NGRyAgICAgICAgICAgICAgICAgICAgICAgMHhlMDAwCisjZGVmaW5lIFRYNDkyN19DT05GSUdfQ0NGR19SRVNFUlZFRF80Ml82MyAgICAgICAgICAgICAgICBCTV82M180MgorI2RlZmluZSBUWDQ5MjdfQ09ORklHX0NDRkdfV0RSU1QgICAgICAgICAgICAgICAgICAgICAgICAgQk1fNDFfNDEKKyNkZWZpbmUgVFg0OTI3X0NPTkZJR19DQ0ZHX1dEUkVYRU4gICAgICAgICAgICAgICAgICAgICAgIEJNXzQwXzQwCisjZGVmaW5lIFRYNDkyN19DT05GSUdfQ0NGR19CQ0ZHICAgICAgICAgICAgICAgICAgICAgICAgICBCTV8zOV8zMgorI2RlZmluZSBUWDQ5MjdfQ09ORklHX0NDRkdfUkVTRVJWRURfMjdfMzEgICAgICAgICAgICAgICAgQk1fMzFfMjcKKyNkZWZpbmUgVFg0OTI3X0NPTkZJR19DQ0ZHX0dUT1QgICAgICAgICAgICAgICAgICAgICAgICAgIEJNXzI2XzI1CisjZGVmaW5lIFRYNDkyN19DT05GSUdfQ0NGR19HVE9UXzQwOTYgICAgICAgICAgICAgICAgICAgICBCTV8yNl8yNQorI2RlZmluZSBUWDQ5MjdfQ09ORklHX0NDRkdfR1RPVF8yMDQ4ICAgICAgICAgICAgICAgICAgICAgQk1fMjZfMjYKKyNkZWZpbmUgVFg0OTI3X0NPTkZJR19DQ0ZHX0dUT1RfMTAyNCAgICAgICAgICAgICAgICAgICAgIEJNXzI1XzI1CisjZGVmaW5lIFRYNDkyN19DT05GSUdfQ0NGR19HVE9UXzA1MTIgICAgICAgICAgICAgICAgICAgKH5CTV8yNl8yNSkKKyNkZWZpbmUgVFg0OTI3X0NPTkZJR19DQ0ZHX1RJTlRESVMgICAgICAgICAgICAgICAgICAgICAgIEJNXzI0XzI0CisjZGVmaW5lIFRYNDkyN19DT05GSUdfQ0NGR19QQ0k2NiAgICAgICAgICAgICAgICAgICAgICAgICBCTV8yM18yMworI2RlZmluZSBUWDQ5MjdfQ09ORklHX0NDRkdfUENJTU9ERSAgICAgICAgICAgICAgICAgICAgICAgQk1fMjJfMjIKKyNkZWZpbmUgVFg0OTI3X0NPTkZJR19DQ0ZHX1JFU0VSVkVEXzIwXzIxICAgICAgICAgICAgICAgIEJNXzIxXzIwCisjZGVmaW5lIFRYNDkyN19DT05GSUdfQ0NGR19ESVZNT0RFICAgICAgICAgICAgICAgICAgICAgICBCTV8xOV8xNworI2RlZmluZSBUWDQ5MjdfQ09ORklHX0NDRkdfRElWTU9ERV8yXzAgICAgICAgICAgICAgICAgICAgQk1fMTlfMTkKKyNkZWZpbmUgVFg0OTI3X0NPTkZJR19DQ0ZHX0RJVk1PREVfM18wICAgICAgICAgICAgICAgICAgKEJNXzE5XzE5fEJNXzE3XzE3KQorI2RlZmluZSBUWDQ5MjdfQ09ORklHX0NDRkdfRElWTU9ERV80XzAgICAgICAgICAgICAgICAgICAgQk1fMTlfMTgKKyNkZWZpbmUgVFg0OTI3X0NPTkZJR19DQ0ZHX0RJVk1PREVfMl81ICAgICAgICAgICAgICAgICAgIEJNXzE5XzE3CisjZGVmaW5lIFRYNDkyN19DT05GSUdfQ0NGR19ESVZNT0RFXzhfMCAgICAgICAgICAgICAgICAgKH5CTV8xOV8xNykKKyNkZWZpbmUgVFg0OTI3X0NPTkZJR19DQ0ZHX0RJVk1PREVfMTJfMCAgICAgICAgICAgICAgICAgIEJNXzE3XzE3CisjZGVmaW5lIFRYNDkyN19DT05GSUdfQ0NGR19ESVZNT0RFXzE2XzAgICAgICAgICAgICAgICAgICBCTV8xOF8xOAorI2RlZmluZSBUWDQ5MjdfQ09ORklHX0NDRkdfRElWTU9ERV8xMF8wICAgICAgICAgICAgICAgICAgQk1fMThfMTcKKyNkZWZpbmUgVFg0OTI3X0NPTkZJR19DQ0ZHX0JFT1cgICAgICAgICAgICAgICAgICAgICAgICAgIEJNXzE2XzE2CisjZGVmaW5lIFRYNDkyN19DT05GSUdfQ0NGR19XUiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCTV8xNV8xNQorI2RlZmluZSBUWDQ5MjdfQ09ORklHX0NDRkdfVE9FICAgICAgICAgICAgICAgICAgICAgICAgICAgQk1fMTRfMTQKKyNkZWZpbmUgVFg0OTI3X0NPTkZJR19DQ0ZHX1BDSUFSQiAgICAgICAgICAgICAgICAgICAgICAgIEJNXzEzXzEzCisjZGVmaW5lIFRYNDkyN19DT05GSUdfQ0NGR19QQ0lESVZNT0RFICAgICAgICAgICAgICAgICAgICBCTV8xMl8xMQorI2RlZmluZSBUWDQ5MjdfQ09ORklHX0NDRkdfUkVTRVJWRURfMDhfMTAgICAgICAgICAgICAgICAgQk1fMTBfMDgKKyNkZWZpbmUgVFg0OTI3X0NPTkZJR19DQ0ZHX1NZU1NQICAgICAgICAgICAgICAgICAgICAgICAgIEJNXzA3XzA2CisjZGVmaW5lIFRYNDkyN19DT05GSUdfQ0NGR19SRVNFUlZFRF8wM18wNSAgICAgICAgICAgICAgICBCTV8wNV8wMworI2RlZmluZSBUWDQ5MjdfQ09ORklHX0NDRkdfRU5ESUFOICAgICAgICAgICAgICAgICAgICAgICAgQk1fMDJfMDIKKyNkZWZpbmUgVFg0OTI3X0NPTkZJR19DQ0ZHX0FSTU9ERSAgICAgICAgICAgICAgICAgICAgICAgIEJNXzAxXzAxCisjZGVmaW5lIFRYNDkyN19DT05GSUdfQ0NGR19BQ0VIT0xEICAgICAgICAgICAgICAgICAgICAgICBCTV8wMF8wMAorI2RlZmluZSBUWDQ5MjdfQ09ORklHX1JFVklEICAgICAgICAgICAgICAgICAgICAgIDB4ZTAwOAorI2RlZmluZSBUWDQ5MjdfQ09ORklHX1JFVklEX1JFU0VSVkVEXzMyXzYzICAgICAgICAgICAgICAgQk1fMzJfNjMKKyNkZWZpbmUgVFg0OTI3X0NPTkZJR19SRVZJRF9QQ09ERSAgICAgICAgICAgICAgICAgICAgICAgIEJNXzE2XzMxCisjZGVmaW5lIFRYNDkyN19DT05GSUdfUkVWSURfTUpFUlJFViAgICAgICAgICAgICAgICAgICAgICBCTV8xMl8xNQorI2RlZmluZSBUWDQ5MjdfQ09ORklHX1JFVklEX01JTkVSRVYgICAgICAgICAgICAgICAgICAgICAgQk1fMDhfMTEKKyNkZWZpbmUgVFg0OTI3X0NPTkZJR19SRVZJRF9NSlJFViAgICAgICAgICAgICAgICAgICAgICAgIEJNXzA0XzA3CisjZGVmaW5lIFRYNDkyN19DT05GSUdfUkVWSURfTUlOUkVWICAgICAgICAgICAgICAgICAgICAgICBCTV8wMF8wMworI2RlZmluZSBUWDQ5MjdfQ09ORklHX1BDRkcgICAgICAgICAgICAgICAgICAgICAgIDB4ZTAxMAorI2RlZmluZSBUWDQ5MjdfQ09ORklHX1BDRkdfUkVTRVJWRURfNTdfNjMgICAgICAgICAgICAgICAgQk1fNTdfNjMKKyNkZWZpbmUgVFg0OTI3X0NPTkZJR19QQ0ZHX0RSVkRBVEEgICAgICAgICAgICAgICAgICAgICAgIEJNXzU2XzU2CisjZGVmaW5lIFRYNDkyN19DT05GSUdfUENGR19EUlZDQiAgICAgICAgICAgICAgICAgICAgICAgICBCTV81NV81NQorI2RlZmluZSBUWDQ5MjdfQ09ORklHX1BDRkdfRFJWRFFNICAgICAgICAgICAgICAgICAgICAgICAgQk1fNTRfNTQKKyNkZWZpbmUgVFg0OTI3X0NPTkZJR19QQ0ZHX0RSVkFERFIgICAgICAgICAgICAgICAgICAgICAgIEJNXzUzXzUzCisjZGVmaW5lIFRYNDkyN19DT05GSUdfUENGR19EUlZDS0UgICAgICAgICAgICAgICAgICAgICAgICBCTV81Ml81MgorI2RlZmluZSBUWDQ5MjdfQ09ORklHX1BDRkdfRFJWUkFTICAgICAgICAgICAgICAgICAgICAgICAgQk1fNTFfNTEKKyNkZWZpbmUgVFg0OTI3X0NPTkZJR19QQ0ZHX0RSVkNBUyAgICAgICAgICAgICAgICAgICAgICAgIEJNXzUwXzUwCisjZGVmaW5lIFRYNDkyN19DT05GSUdfUENGR19EUlZXRSAgICAgICAgICAgICAgICAgICAgICAgICBCTV80OV80OQorI2RlZmluZSBUWDQ5MjdfQ09ORklHX1BDRkdfRFJWQ1MzICAgICAgICAgICAgICAgICAgICAgICAgQk1fNDhfNDgKKyNkZWZpbmUgVFg0OTI3X0NPTkZJR19QQ0ZHX0RSVkNTMiAgICAgICAgICAgICAgICAgICAgICAgIEJNXzQ3XzQ3CisjZGVmaW5lIFRYNDkyN19DT05GSUdfUENGR19EUlZDUzEgICAgICAgICAgICAgICAgICAgICAgICBCTV80Nl80aworI2RlZmluZSBUWDQ5MjdfQ09ORklHX1BDRkdfRFJWQ1MwICAgICAgICAgICAgICAgICAgICAgICAgQk1fNDVfNDUKKyNkZWZpbmUgVFg0OTI3X0NPTkZJR19QQ0ZHX0RSVkNLMyAgICAgICAgICAgICAgICAgICAgICAgIEJNXzQ0XzQ0CisjZGVmaW5lIFRYNDkyN19DT05GSUdfUENGR19EUlZDSzIgICAgICAgICAgICAgICAgICAgICAgICBCTV80M180MworI2RlZmluZSBUWDQ5MjdfQ09ORklHX1BDRkdfRFJWQ0sxICAgICAgICAgICAgICAgICAgICAgICAgQk1fNDJfNDIKKyNkZWZpbmUgVFg0OTI3X0NPTkZJR19QQ0ZHX0RSVkNLMCAgICAgICAgICAgICAgICAgICAgICAgIEJNXzQxXzQxCisjZGVmaW5lIFRYNDkyN19DT05GSUdfUENGR19EUlZDS0lOICAgICAgICAgICAgICAgICAgICAgICBCTV80MF80MAorI2RlZmluZSBUWDQ5MjdfQ09ORklHX1BDRkdfUkVTRVJWRURfMzNfMzkgICAgICAgICAgICAgICAgQk1fMzNfMzkKKyNkZWZpbmUgVFg0OTI3X0NPTkZJR19QQ0ZHX0JZUEFTU19QTEwgICAgICAgICAgICAgICAgICAgIEJNXzMyXzMyCisjZGVmaW5lIFRYNDkyN19DT05GSUdfUENGR19SRVNFUlZFRF8zMF8zMSAgICAgICAgICAgICAgICBCTV8zMF8zMQorI2RlZmluZSBUWDQ5MjdfQ09ORklHX1BDRkdfU0RDTEtETFkgICAgICAgICAgICAgICAgICAgICAgQk1fMjhfMjkKKyNkZWZpbmUgVFg0OTI3X0NPTkZJR19QQ0ZHX1NEQ0xLRExZX0RFTEFZXzEgICAgICAgICAgICAofkJNXzI4XzI5KQorI2RlZmluZSBUWDQ5MjdfQ09ORklHX1BDRkdfU0RDTEtETFlfREVMQVlfMiAgICAgICAgICAgICAgQk1fMjhfMjgKKyNkZWZpbmUgVFg0OTI3X0NPTkZJR19QQ0ZHX1NEQ0xLRExZX0RFTEFZXzMgICAgICAgICAgICAgIEJNXzI5XzI5CisjZGVmaW5lIFRYNDkyN19DT05GSUdfUENGR19TRENMS0RMWV9ERUxBWV80ICAgICAgICAgICAgICBCTV8yOF8yOQorI2RlZmluZSBUWDQ5MjdfQ09ORklHX1BDRkdfU1lTQ0xLRU4gICAgICAgICAgICAgICAgICAgICAgQk1fMjdfMjcKKyNkZWZpbmUgVFg0OTI3X0NPTkZJR19QQ0ZHX1NEQ0xLRU4zICAgICAgICAgICAgICAgICAgICAgIEJNXzI2XzI2CisjZGVmaW5lIFRYNDkyN19DT05GSUdfUENGR19TRENMS0VOMiAgICAgICAgICAgICAgICAgICAgICBCTV8yNV8yNQorI2RlZmluZSBUWDQ5MjdfQ09ORklHX1BDRkdfU0RDTEtFTjEgICAgICAgICAgICAgICAgICAgICAgQk1fMjRfMjQKKyNkZWZpbmUgVFg0OTI3X0NPTkZJR19QQ0ZHX1NEQ0xLRU4wICAgICAgICAgICAgICAgICAgICAgIEJNXzIzXzIzCisjZGVmaW5lIFRYNDkyN19DT05GSUdfUENGR19TRENMS0lORU4gICAgICAgICAgICAgICAgICAgICBCTV8yMl8yMgorI2RlZmluZSBUWDQ5MjdfQ09ORklHX1BDRkdfUENJQ0xLRU41ICAgICAgICAgICAgICAgICAgICAgQk1fMjFfMjEKKyNkZWZpbmUgVFg0OTI3X0NPTkZJR19QQ0ZHX1BDSUNMS0VONCAgICAgICAgICAgICAgICAgICAgIEJNXzIwXzIwCisjZGVmaW5lIFRYNDkyN19DT05GSUdfUENGR19QQ0lDTEtFTjMgICAgICAgICAgICAgICAgICAgICBCTV8xOV8xOQorI2RlZmluZSBUWDQ5MjdfQ09ORklHX1BDRkdfUENJQ0xLRU4yICAgICAgICAgICAgICAgICAgICAgQk1fMThfMTgKKyNkZWZpbmUgVFg0OTI3X0NPTkZJR19QQ0ZHX1BDSUNMS0VOMSAgICAgICAgICAgICAgICAgICAgIEJNXzE3XzE3CisjZGVmaW5lIFRYNDkyN19DT05GSUdfUENGR19QQ0lDTEtFTjAgICAgICAgICAgICAgICAgICAgICBCTV8xNl8xNgorI2RlZmluZSBUWDQ5MjdfQ09ORklHX1BDRkdfUkVTRVJWRURfMTBfMTUgICAgICAgICAgICAgICAgQk1fMTBfMTUKKyNkZWZpbmUgVFg0OTI3X0NPTkZJR19QQ0ZHX1NFTDIgICAgICAgICAgICAgICAgICAgICAgICAgIEJNXzA5XzA5CisjZGVmaW5lIFRYNDkyN19DT05GSUdfUENGR19TRUwxICAgICAgICAgICAgICAgICAgICAgICAgICBCTV8wOF8wOAorI2RlZmluZSBUWDQ5MjdfQ09ORklHX1BDRkdfRE1BU0VMMyAgICAgICAgICAgICAgICAgICAgICAgQk1fMDZfMDcKKyNkZWZpbmUgVFg0OTI3X0NPTkZJR19QQ0ZHX0RNQVNFTDNfRE1BUkVRMyAgICAgICAgICAgICAofkJNXzA2XzA3KQorI2RlZmluZSBUWDQ5MjdfQ09ORklHX1BDRkdfRE1BU0VMM19TSU8wICAgICAgICAgICAgICAgICAgQk1fMDZfMDYKKyNkZWZpbmUgVFg0OTI3X0NPTkZJR19QQ0ZHX0RNQVNFTDNfQUNMQzMgICAgICAgICAgICAgICAgIEJNXzA3XzA3CisjZGVmaW5lIFRYNDkyN19DT05GSUdfUENGR19ETUFTRUwzX0FDTEMxICAgICAgICAgICAgICAgICBCTV8wNl8wNworI2RlZmluZSBUWDQ5MjdfQ09ORklHX1BDRkdfRE1BU0VMMiAgICAgICAgICAgICAgICAgICAgICAgQk1fMDZfMDcKKyNkZWZpbmUgVFg0OTI3X0NPTkZJR19QQ0ZHX0RNQVNFTDJfU0VMMl8wX0RNQVJFUTIgICAgICAofkJNXzA2XzA3KQorI2RlZmluZSBUWDQ5MjdfQ09ORklHX1BDRkdfRE1BU0VMMl9TRUwyXzBfU0lPMCAgICAgICAgICAgQk1fMDZfMDYKKyNkZWZpbmUgVFg0OTI3X0NPTkZJR19QQ0ZHX0RNQVNFTDJfU0VMMl8wX1JFU0VSVkVEXzEwICAgIEJNXzA3XzA3CisjZGVmaW5lIFRYNDkyN19DT05GSUdfUENGR19ETUFTRUwyX1NFTDJfMF9SRVNFUlZFRF8xMSAgICBCTV8wNl8wNworI2RlZmluZSBUWDQ5MjdfQ09ORklHX1BDRkdfRE1BU0VMMl9TRUwyXzFfQUNMQzEgICAgICAgICh+Qk1fMDZfMDcpCisjZGVmaW5lIFRYNDkyN19DT05GSUdfUENGR19ETUFTRUwyX1NFTDJfMV9TSU8wICAgICAgICAgICBCTV8wNl8wNgorI2RlZmluZSBUWDQ5MjdfQ09ORklHX1BDRkdfRE1BU0VMMl9TRUwyXzFfQUNMQzIgICAgICAgICAgQk1fMDdfMDcKKyNkZWZpbmUgVFg0OTI3X0NPTkZJR19QQ0ZHX0RNQVNFTDJfU0VMMl8xX0FDTEMwICAgICAgICAgIEJNXzA2XzA3CisjZGVmaW5lIFRYNDkyN19DT05GSUdfUENGR19ETUFTRUwxICAgICAgICAgICAgICAgICAgICAgICBCTV8wMl8wMworI2RlZmluZSBUWDQ5MjdfQ09ORklHX1BDRkdfRE1BU0VMMV9ETUFSRVExICAgICAgICAgICAgICh+Qk1fMDJfMDMpCisjZGVmaW5lIFRYNDkyN19DT05GSUdfUENGR19ETUFTRUwxX1NJTzEgICAgICAgICAgICAgICAgICBCTV8wMl8wMgorI2RlZmluZSBUWDQ5MjdfQ09ORklHX1BDRkdfRE1BU0VMMV9BQ0xDMSAgICAgICAgICAgICAgICAgQk1fMDNfMDMKKyNkZWZpbmUgVFg0OTI3X0NPTkZJR19QQ0ZHX0RNQVNFTDFfQUNMQzMgICAgICAgICAgICAgICAgIEJNXzAyXzAzCisjZGVmaW5lIFRYNDkyN19DT05GSUdfUENGR19ETUFTRUwwICAgICAgICAgICAgICAgICAgICAgICBCTV8wMF8wMQorI2RlZmluZSBUWDQ5MjdfQ09ORklHX1BDRkdfRE1BU0VMMF9ETUFSRVEwICAgICAgICAgICAgICh+Qk1fMDBfMDEpCisjZGVmaW5lIFRYNDkyN19DT05GSUdfUENGR19ETUFTRUwwX1NJTzEgICAgICAgICAgICAgICAgICBCTV8wMF8wMAorI2RlZmluZSBUWDQ5MjdfQ09ORklHX1BDRkdfRE1BU0VMMF9BQ0xDMCAgICAgICAgICAgICAgICAgQk1fMDFfMDEKKyNkZWZpbmUgVFg0OTI3X0NPTkZJR19QQ0ZHX0RNQVNFTDBfQUNMQzIgICAgICAgICAgICAgICAgIEJNXzAwXzAxCisjZGVmaW5lIFRYNDkyN19DT05GSUdfVE9FQSAgICAgICAgICAgICAgICAgICAgICAgMHhlMDE4CisjZGVmaW5lIFRYNDkyN19DT05GSUdfVE9FQV9SRVNFUlZFRF8zNl82MyAgICAgICAgICAgICAgICBCTV8zNl82MworI2RlZmluZSBUWDQ5MjdfQ09ORklHX1RPRUFfVE9FQSAgICAgICAgICAgICAgICAgICAgICAgICAgQk1fMDBfMzUKKyNkZWZpbmUgVFg0OTI3X0NPTkZJR19DTEtDVFIgICAgICAgICAgICAgICAgICAgICAweGUwMjAKKyNkZWZpbmUgVFg0OTI3X0NPTkZJR19DTEtDVFJfUkVTRVJWRURfMjZfNjMgICAgICAgICAgICAgIEJNXzI2XzYzCisjZGVmaW5lIFRYNDkyN19DT05GSUdfQ0xLQ1RSX0FDTENLRCAgICAgICAgICAgICAgICAgICAgICBCTV8yNV8yNQorI2RlZmluZSBUWDQ5MjdfQ09ORklHX0NMS0NUUl9QSU9DS0QgICAgICAgICAgICAgICAgICAgICAgQk1fMjRfMjQKKyNkZWZpbmUgVFg0OTI3X0NPTkZJR19DTEtDVFJfRE1BQ0tEICAgICAgICAgICAgICAgICAgICAgIEJNXzIzXzIzCisjZGVmaW5lIFRYNDkyN19DT05GSUdfQ0xLQ1RSX1BDSUNLRCAgICAgICAgICAgICAgICAgICAgICBCTV8yMl8yMgorI2RlZmluZSBUWDQ5MjdfQ09ORklHX0NMS0NUUl9TRVRfMjEgICAgICAgICAgICAgICAgICAgICAgQk1fMjFfMjEKKyNkZWZpbmUgVFg0OTI3X0NPTkZJR19DTEtDVFJfVE0wQ0tEICAgICAgICAgICAgICAgICAgICAgIEJNXzIwXzIwCisjZGVmaW5lIFRYNDkyN19DT05GSUdfQ0xLQ1RSX1RNMUNLRCAgICAgICAgICAgICAgICAgICAgICBCTV8xOV8xOQorI2RlZmluZSBUWDQ5MjdfQ09ORklHX0NMS0NUUl9UTTJDS0QgICAgICAgICAgICAgICAgICAgICAgQk1fMThfMTgKKyNkZWZpbmUgVFg0OTI3X0NPTkZJR19DTEtDVFJfU0lPMENLRCAgICAgICAgICAgICAgICAgICAgIEJNXzE3XzE3CisjZGVmaW5lIFRYNDkyN19DT05GSUdfQ0xLQ1RSX1NJTzFDS0QgICAgICAgICAgICAgICAgICAgICBCTV8xNl8xNgorI2RlZmluZSBUWDQ5MjdfQ09ORklHX0NMS0NUUl9SRVNFUlZFRF8xMF8xNSAgICAgICAgICAgICAgQk1fMTBfMTUKKyNkZWZpbmUgVFg0OTI3X0NPTkZJR19DTEtDVFJfQUNMUlNUICAgICAgICAgICAgICAgICAgICAgIEJNXzA5XzA5CisjZGVmaW5lIFRYNDkyN19DT05GSUdfQ0xLQ1RSX1BJT1JTVCAgICAgICAgICAgICAgICAgICAgICBCTV8wOF8wOAorI2RlZmluZSBUWDQ5MjdfQ09ORklHX0NMS0NUUl9ETUFSU1QgICAgICAgICAgICAgICAgICAgICAgQk1fMDdfMDcKKyNkZWZpbmUgVFg0OTI3X0NPTkZJR19DTEtDVFJfUENJUlNUICAgICAgICAgICAgICAgICAgICAgIEJNXzA2XzA2CisjZGVmaW5lIFRYNDkyN19DT05GSUdfQ0xLQ1RSX1JFU0VSVkVEXzA1XzA1ICAgICAgICAgICAgICBCTV8wNV8wNQorI2RlZmluZSBUWDQ5MjdfQ09ORklHX0NMS0NUUl9UTTBSU1QgICAgICAgICAgICAgICAgICAgICAgQk1fMDRfMDQKKyNkZWZpbmUgVFg0OTI3X0NPTkZJR19DTEtDVFJfVE0xUlNUICAgICAgICAgICAgICAgICAgICAgIEJNXzAzXzAzCisjZGVmaW5lIFRYNDkyN19DT05GSUdfQ0xLQ1RSX1RNMlJTVCAgICAgICAgICAgICAgICAgICAgICBCTV8wMl8wMgorI2RlZmluZSBUWDQ5MjdfQ09ORklHX0NMS0NUUl9TSU8wUlNUICAgICAgICAgICAgICAgICAgICAgQk1fMDFfMDEKKyNkZWZpbmUgVFg0OTI3X0NPTkZJR19DTEtDVFJfU0lPMVJTVCAgICAgICAgICAgICAgICAgICAgIEJNXzAwXzAwCisjZGVmaW5lIFRYNDkyN19DT05GSUdfR0FSQkMgICAgICAgICAgICAgICAgICAgICAgMHhlMDMwCisjZGVmaW5lIFRYNDkyN19DT05GSUdfR0FSQkNfUkVTRVJWRURfMTBfNjMgICAgICAgICAgICAgICBCTV8xMF82MworI2RlZmluZSBUWDQ5MjdfQ09ORklHX0dBUkJDX1NFVF8wOSAgICAgICAgICAgICAgICAgICAgICAgQk1fMDlfMDkKKyNkZWZpbmUgVFg0OTI3X0NPTkZJR19HQVJCQ19BUkJNRCAgICAgICAgICAgICAgICAgICAgICAgIEJNXzA4XzA4CisjZGVmaW5lIFRYNDkyN19DT05GSUdfR0FSQkNfUkVTRVJWRURfMDZfMDcgICAgICAgICAgICAgICBCTV8wNl8wNworI2RlZmluZSBUWDQ5MjdfQ09ORklHX0dBUkJDX1BSSU9SSVRZX0gxICAgICAgICAgICAgICAgICAgQk1fMDRfMDUKKyNkZWZpbmUgVFg0OTI3X0NPTkZJR19HQVJCQ19QUklPUklUWV9IMV9QQ0kgICAgICAgICAgICAofkJNXzA0XzA1KQorI2RlZmluZSBUWDQ5MjdfQ09ORklHX0dBUkJDX1BSSU9SSVRZX0gxX1BETUFDICAgICAgICAgICAgQk1fMDRfMDQKKyNkZWZpbmUgVFg0OTI3X0NPTkZJR19HQVJCQ19QUklPUklUWV9IMV9ETUFDICAgICAgICAgICAgIEJNXzA1XzA1CisjZGVmaW5lIFRYNDkyN19DT05GSUdfR0FSQkNfUFJJT1JJVFlfSDFfQkFEX1ZBTFVFICAgICAgICBCTV8wNF8wNQorI2RlZmluZSBUWDQ5MjdfQ09ORklHX0dBUkJDX1BSSU9SSVRZX0gyICAgICAgICAgICAgICAgICAgQk1fMDJfMDMKKyNkZWZpbmUgVFg0OTI3X0NPTkZJR19HQVJCQ19QUklPUklUWV9IMl9QQ0kgICAgICAgICAgICAofkJNXzAyXzAzKQorI2RlZmluZSBUWDQ5MjdfQ09ORklHX0dBUkJDX1BSSU9SSVRZX0gyX1BETUFDICAgICAgICAgICAgQk1fMDJfMDIKKyNkZWZpbmUgVFg0OTI3X0NPTkZJR19HQVJCQ19QUklPUklUWV9IMl9ETUFDICAgICAgICAgICAgIEJNXzAzXzAzCisjZGVmaW5lIFRYNDkyN19DT05GSUdfR0FSQkNfUFJJT1JJVFlfSDJfQkFEX1ZBTFVFICAgICAgICBCTV8wMl8wMworI2RlZmluZSBUWDQ5MjdfQ09ORklHX0dBUkJDX1BSSU9SSVRZX0gzICAgICAgICAgICAgICAgICAgQk1fMDBfMDEKKyNkZWZpbmUgVFg0OTI3X0NPTkZJR19HQVJCQ19QUklPUklUWV9IM19QQ0kgICAgICAgICAgICAofkJNXzAwXzAxKQorI2RlZmluZSBUWDQ5MjdfQ09ORklHX0dBUkJDX1BSSU9SSVRZX0gzX1BETUFDICAgICAgICAgICAgQk1fMDBfMDAKKyNkZWZpbmUgVFg0OTI3X0NPTkZJR19HQVJCQ19QUklPUklUWV9IM19ETUFDICAgICAgICAgICAgIEJNXzAxXzAxCisjZGVmaW5lIFRYNDkyN19DT05GSUdfR0FSQkNfUFJJT1JJVFlfSDNfQkFEX1ZBTFVFICAgICAgICBCTV8wMF8wMQorI2RlZmluZSBUWDQ5MjdfQ09ORklHX1JBTVAgICAgICAgICAgICAgICAgICAgICAgIDB4ZTA0OAorI2RlZmluZSBUWDQ5MjdfQ09ORklHX1JBTVBfUkVTRVJWRURfMjBfNjMgICAgICAgICAgICAgICAgQk1fMjBfNjMKKyNkZWZpbmUgVFg0OTI3X0NPTkZJR19SQU1QX1JBTVAgICAgICAgICAgICAgICAgICAgICAgICAgIEJNXzAwXzE5CisjZGVmaW5lIFRYNDkyN19DT05GSUdfTElNSVQgICAgICAgICAgICAgICAgICAgICAgMHhlZmZmCisKKworLyogVFg0OTI3IFRpbWVyIDAgKDMyLWJpdCByZWdpc3RlcnMpICovCisjZGVmaW5lIFRYNDkyN19UTVIwX0JBU0UgICAgICAgICAgICAgICAgMHhmMDAwCisjZGVmaW5lIFRYNDkyN19UTVIwX1RNVENSMCAgICAgICAgICAgICAgMHhmMDA0CisjZGVmaW5lIFRYNDkyN19UTVIwX1RNVElTUjAgICAgICAgICAgICAgMHhmMDA4CisjZGVmaW5lIFRYNDkyN19UTVIwX1RNQ1BSQTAgICAgICAgICAgICAgMHhmMDA4CisjZGVmaW5lIFRYNDkyN19UTVIwX1RNQ1BSQjAgICAgICAgICAgICAgMHhmMDBjCisjZGVmaW5lIFRYNDkyN19UTVIwX1RNSVRNUjAgICAgICAgICAgICAgMHhmMDEwCisjZGVmaW5lIFRYNDkyN19UTVIwX1RNQ0NEUjAgICAgICAgICAgICAgMHhmMDIwCisjZGVmaW5lIFRYNDkyN19UTVIwX1RNUEdNUjAgICAgICAgICAgICAgMHhmMDMwCisjZGVmaW5lIFRYNDkyN19UTVIwX1RNVFJSMCAgICAgICAgICAgICAgMHhmMGYwCisjZGVmaW5lIFRYNDkyN19UTVIwX0xJTUlUICAgICAgICAgICAgICAgMHhmMGZmCisKKworLyogVFg0OTI3IFRpbWVyIDEgKDMyLWJpdCByZWdpc3RlcnMpICovCisjZGVmaW5lIFRYNDkyN19UTVIxX0JBU0UgICAgICAgICAgICAgICAgMHhmMTAwCisjZGVmaW5lIFRYNDkyN19UTVIxX1RNVENSMSAgICAgICAgICAgICAgMHhmMTA0CisjZGVmaW5lIFRYNDkyN19UTVIxX1RNVElTUjEgICAgICAgICAgICAgMHhmMTA4CisjZGVmaW5lIFRYNDkyN19UTVIxX1RNQ1BSQTEgICAgICAgICAgICAgMHhmMTA4CisjZGVmaW5lIFRYNDkyN19UTVIxX1RNQ1BSQjEgICAgICAgICAgICAgMHhmMTBjCisjZGVmaW5lIFRYNDkyN19UTVIxX1RNSVRNUjEgICAgICAgICAgICAgMHhmMTEwCisjZGVmaW5lIFRYNDkyN19UTVIxX1RNQ0NEUjEgICAgICAgICAgICAgMHhmMTIwCisjZGVmaW5lIFRYNDkyN19UTVIxX1RNUEdNUjEgICAgICAgICAgICAgMHhmMTMwCisjZGVmaW5lIFRYNDkyN19UTVIxX1RNVFJSMSAgICAgICAgICAgICAgMHhmMWYwCisjZGVmaW5lIFRYNDkyN19UTVIxX0xJTUlUICAgICAgICAgICAgICAgMHhmMWZmCisKKworLyogVFg0OTI3IFRpbWVyIDIgKDMyLWJpdCByZWdpc3RlcnMpICovCisjZGVmaW5lIFRYNDkyN19UTVIyX0JBU0UgICAgICAgICAgICAgICAgMHhmMjAwCisjZGVmaW5lIFRYNDkyN19UTVIyX1RNVENSMiAgICAgICAgICAgICAgMHhmMTA0CisjZGVmaW5lIFRYNDkyN19UTVIyX1RNVElTUjIgICAgICAgICAgICAgMHhmMjA4CisjZGVmaW5lIFRYNDkyN19UTVIyX1RNQ1BSQTIgICAgICAgICAgICAgMHhmMjA4CisjZGVmaW5lIFRYNDkyN19UTVIyX1RNQ1BSQjIgICAgICAgICAgICAgMHhmMjBjCisjZGVmaW5lIFRYNDkyN19UTVIyX1RNSVRNUjIgICAgICAgICAgICAgMHhmMjEwCisjZGVmaW5lIFRYNDkyN19UTVIyX1RNQ0NEUjIgICAgICAgICAgICAgMHhmMjIwCisjZGVmaW5lIFRYNDkyN19UTVIyX1RNUEdNUjIgICAgICAgICAgICAgMHhmMjMwCisjZGVmaW5lIFRYNDkyN19UTVIyX1RNVFJSMiAgICAgICAgICAgICAgMHhmMmYwCisjZGVmaW5lIFRYNDkyN19UTVIyX0xJTUlUICAgICAgICAgICAgICAgMHhmMmZmCisKKworLyogVFg0OTI3IHNlcmlhbCBwb3J0IDAgKDMyLWJpdCByZWdpc3RlcnMpICovCisjZGVmaW5lIFRYNDkyN19TSU8wX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgMHhmMzAwIAorI2RlZmluZSBUWDQ5MjdfU0lPMF9TSUxDUjAgICAgICAgICAgICAgICAgICAgICAgIDB4ZjMwMCAKKyNkZWZpbmUgVFg0OTI3X1NJTzBfU0lMQ1IwX1JFU0VSVkVEXzE2XzMxICAgICAgICAgICAgICAgIEJNXzE2XzMxCisjZGVmaW5lIFRYNDkyN19TSU8wX1NJTENSMF9SV1VCICAgICAgICAgICAgICAgICAgICAgICAgICBCTV8xNV8xNQorI2RlZmluZSBUWDQ5MjdfU0lPMF9TSUxDUjBfVFdVQiAgICAgICAgICAgICAgICAgICAgICAgICAgQk1fMTRfMTQKKyNkZWZpbmUgVFg0OTI3X1NJTzBfU0lMQ1IwX1VPREUgICAgICAgICAgICAgICAgICAgICAgICAgIEJNXzEzXzEzCisjZGVmaW5lIFRYNDkyN19TSU8wX1NJTENSMF9SRVNFUlZFRF8wN18xMiAgICAgICAgICAgICAgICBCTV8wN18xMgorI2RlZmluZSBUWDQ5MjdfU0lPMF9TSUxDUjBfU0NTICAgICAgICAgICAgICAgICAgICAgICAgICAgQk1fMDVfMDYKKyNkZWZpbmUgVFg0OTI3X1NJTzBfU0lMQ1IwX1NDU19JTUJVU0NMS19JQyAgICAgICAgICAgICAofkJNXzA1XzA2KQorI2RlZmluZSBUWDQ5MjdfU0lPMF9TSUxDUjBfU0NTX0lNQlVTQ0xLX0JSRyAgICAgICAgICAgICAgQk1fMDVfMDUKKyNkZWZpbmUgVFg0OTI3X1NJTzBfU0lMQ1IwX1NDU19TQ0xLX0VDICAgICAgICAgICAgICAgICAgIEJNXzA2XzA2CisjZGVmaW5lIFRYNDkyN19TSU8wX1NJTENSMF9TQ1NfU0NMS19CUkcgICAgICAgICAgICAgICAgICBCTV8wNV8wNgorI2RlZmluZSBUWDQ5MjdfU0lPMF9TSUxDUjBfVUVQUyAgICAgICAgICAgICAgICAgICAgICAgICAgQk1fMDRfMDQKKyNkZWZpbmUgVFg0OTI3X1NJTzBfU0lMQ1IwX1VQRU4gICAgICAgICAgICAgICAgICAgICAgICAgIEJNXzAzXzAzCisjZGVmaW5lIFRYNDkyN19TSU8wX1NJTENSMF9VU0JMICAgICAgICAgICAgICAgICAgICAgICAgICBCTV8wMl8wMgorI2RlZmluZSBUWDQ5MjdfU0lPMF9TSUxDUjBfVU1PREUgICAgICAgICAgICAgICAgICAgICAgICAgQk1fMDBfMDEKKyNkZWZpbmUgVFg0OTI3X1NJTzBfU0lMQ1IwX1VNT0RFX0RBVEFfOF9CSVQgICAgICAgICAgICAgIEJNXzAwXzAxCisjZGVmaW5lIFRYNDkyN19TSU8wX1NJTENSMF9VTU9ERV9EQVRBXzdfQklUICAgICAgICAgICAgKH5CTV8wMF8wMSkKKyNkZWZpbmUgVFg0OTI3X1NJTzBfU0lMQ1IwX1VNT0RFX0RBVEFfOF9CSVRfTUMgICAgICAgICAgIEJNXzAxXzAxCisjZGVmaW5lIFRYNDkyN19TSU8wX1NJTENSMF9VTU9ERV9EQVRBXzdfQklUX01DICAgICAgICAgICBCTV8wMF8wMQorI2RlZmluZSBUWDQ5MjdfU0lPMF9TSURJQ1IwICAgICAgICAgICAgICAgICAgICAgIDB4ZjMwNCAKKyNkZWZpbmUgVFg0OTI3X1NJTzBfU0lESUNSMF9SRVNFUlZFRF8xNl8zMSAgICAgICAgICAgICAgIEJNXzE2XzMxCisjZGVmaW5lIFRYNDkyN19TSU8wX1NJRElDUjBfVERFICAgICAgICAgICAgICAgICAgICAgICAgICBCTV8xNV8xNQorI2RlZmluZSBUWDQ5MjdfU0lPMF9TSURJQ1IwX1JERSAgICAgICAgICAgICAgICAgICAgICAgICAgQk1fMTRfMTQKKyNkZWZpbmUgVFg0OTI3X1NJTzBfU0lESUNSMF9USUUgICAgICAgICAgICAgICAgICAgICAgICAgIEJNXzEzXzEzCisjZGVmaW5lIFRYNDkyN19TSU8wX1NJRElDUjBfUklFICAgICAgICAgICAgICAgICAgICAgICAgICBCTV8xMl8xMgorI2RlZmluZSBUWDQ5MjdfU0lPMF9TSURJQ1IwX1NQSUUgICAgICAgICAgICAgICAgICAgICAgICAgQk1fMTFfMTEKKyNkZWZpbmUgVFg0OTI3X1NJTzBfU0lESUNSMF9DVFNBQyAgICAgICAgICAgICAgICAgICAgICAgIEJNXzA5XzEwCisjZGVmaW5lIFRYNDkyN19TSU8wX1NJRElDUjBfQ1RTQUNfTk9ORSAgICAgICAgICAgICAgICAgKH5CTV8wOV8xMCkKKyNkZWZpbmUgVFg0OTI3X1NJTzBfU0lESUNSMF9DVFNBQ19SSVNFICAgICAgICAgICAgICAgICAgIEJNXzA5XzA5CisjZGVmaW5lIFRYNDkyN19TSU8wX1NJRElDUjBfQ1RTQUNfRkFMTCAgICAgICAgICAgICAgICAgICBCTV8xMF8xMAorI2RlZmluZSBUWDQ5MjdfU0lPMF9TSURJQ1IwX0NUU0FDX0JPVEggICAgICAgICAgICAgICAgICAgQk1fMDlfMTAKKyNkZWZpbmUgVFg0OTI3X1NJTzBfU0lESUNSMF9SRVNFUlZFRF8wNl8wOCAgICAgICAgICAgICAgIEJNXzA2XzA4CisjZGVmaW5lIFRYNDkyN19TSU8wX1NJRElDUjBfU1RJRSAgICAgICAgICAgICAgICAgICAgICAgICBCTV8wMF8wNQorI2RlZmluZSBUWDQ5MjdfU0lPMF9TSURJQ1IwX1NUSUVfTk9ORSAgICAgICAgICAgICAgICAgICh+Qk1fMDBfMDUpCisjZGVmaW5lIFRYNDkyN19TSU8wX1NJRElDUjBfU1RJRV9PRVJTICAgICAgICAgICAgICAgICAgICBCTV8wNV8wNQorI2RlZmluZSBUWDQ5MjdfU0lPMF9TSURJQ1IwX1NUSUVfQ1RTQUMgICAgICAgICAgICAgICAgICAgQk1fMDRfMDQKKyNkZWZpbmUgVFg0OTI3X1NJTzBfU0lESUNSMF9TVElFX1JCUktEICAgICAgICAgICAgICAgICAgIEJNXzAzXzAzCisjZGVmaW5lIFRYNDkyN19TSU8wX1NJRElDUjBfU1RJRV9UUkRZICAgICAgICAgICAgICAgICAgICBCTV8wMl8wMgorI2RlZmluZSBUWDQ5MjdfU0lPMF9TSURJQ1IwX1NUSUVfVFhBTFMgICAgICAgICAgICAgICAgICAgQk1fMDFfMDEKKyNkZWZpbmUgVFg0OTI3X1NJTzBfU0lESUNSMF9TVElFX1VCUktEICAgICAgICAgICAgICAgICAgIEJNXzAwXzAwCisjZGVmaW5lIFRYNDkyN19TSU8wX1NJRElTUjAgICAgICAgICAgICAgICAgICAgICAgMHhmMzA4IAorI2RlZmluZSBUWDQ5MjdfU0lPMF9TSURJU1IwX1JFU0VSVkVEXzE2XzMxICAgICAgICAgICAgICAgQk1fMTZfMzEKKyNkZWZpbmUgVFg0OTI3X1NJTzBfU0lESVNSMF9VQlJLICAgICAgICAgICAgICAgICAgICAgICAgIEJNXzE1XzE1CisjZGVmaW5lIFRYNDkyN19TSU8wX1NJRElTUjBfVVZBTElEICAgICAgICAgICAgICAgICAgICAgICBCTV8xNF8xNAorI2RlZmluZSBUWDQ5MjdfU0lPMF9TSURJU1IwX1VGRVIgICAgICAgICAgICAgICAgICAgICAgICAgQk1fMTNfMTMKKyNkZWZpbmUgVFg0OTI3X1NJTzBfU0lESVNSMF9VUEVSICAgICAgICAgICAgICAgICAgICAgICAgIEJNXzEyXzEyCisjZGVmaW5lIFRYNDkyN19TSU8wX1NJRElTUjBfVU9FUiAgICAgICAgICAgICAgICAgICAgICAgICBCTV8xMV8xMQorI2RlZmluZSBUWDQ5MjdfU0lPMF9TSURJU1IwX0VSSSAgICAgICAgICAgICAgICAgICAgICAgICAgQk1fMTBfMTAKKyNkZWZpbmUgVFg0OTI3X1NJTzBfU0lESVNSMF9UT1VUICAgICAgICAgICAgICAgICAgICAgICAgIEJNXzA5XzA5CisjZGVmaW5lIFRYNDkyN19TSU8wX1NJRElTUjBfVERJUyAgICAgICAgICAgICAgICAgICAgICAgICBCTV8wOF8wOAorI2RlZmluZSBUWDQ5MjdfU0lPMF9TSURJU1IwX1JESVMgICAgICAgICAgICAgICAgICAgICAgICAgQk1fMDdfMDcKKyNkZWZpbmUgVFg0OTI3X1NJTzBfU0lESVNSMF9TVElTICAgICAgICAgICAgICAgICAgICAgICAgIEJNXzA2XzA2CisjZGVmaW5lIFRYNDkyN19TSU8wX1NJRElTUjBfUkVTRVJWRURfMDVfMDUgICAgICAgICAgICAgICBCTV8wNV8wNQorI2RlZmluZSBUWDQ5MjdfU0lPMF9TSURJU1IwX1JGRE4gICAgICAgICAgICAgICAgICAgICAgICAgQk1fMDBfMDQKKyNkZWZpbmUgVFg0OTI3X1NJTzBfU0lTQ0lTUjAgICAgICAgICAgICAgICAgICAgICAweGYzMGMgCisjZGVmaW5lIFRYNDkyN19TSU8wX1NJU0NJU1IwX1JFU0VSVkVEXzA2XzMxICAgICAgICAgICAgICBCTV8wNl8zMQorI2RlZmluZSBUWDQ5MjdfU0lPMF9TSVNDSVNSMF9PRVJTICAgICAgICAgICAgICAgICAgICAgICAgQk1fMDVfMDUKKyNkZWZpbmUgVFg0OTI3X1NJTzBfU0lTQ0lTUjBfQ1RTUyAgICAgICAgICAgICAgICAgICAgICAgIEJNXzA0XzA0CisjZGVmaW5lIFRYNDkyN19TSU8wX1NJU0NJU1IwX1JCUktEICAgICAgICAgICAgICAgICAgICAgICBCTV8wM18wMworI2RlZmluZSBUWDQ5MjdfU0lPMF9TSVNDSVNSMF9UUkRZICAgICAgICAgICAgICAgICAgICAgICAgQk1fMDJfMDIKKyNkZWZpbmUgVFg0OTI3X1NJTzBfU0lTQ0lTUjBfVFhBTFMgICAgICAgICAgICAgICAgICAgICAgIEJNXzAxXzAxCisjZGVmaW5lIFRYNDkyN19TSU8wX1NJU0NJU1IwX1VCUktEICAgICAgICAgICAgICAgICAgICAgICBCTV8wMF8wMAorI2RlZmluZSBUWDQ5MjdfU0lPMF9TSUZDUjAgICAgICAgICAgICAgICAgICAgICAgIDB4ZjMxMCAKKyNkZWZpbmUgVFg0OTI3X1NJTzBfU0lGQ1IwX1JFU0VSVkVEXzE2XzMxICAgICAgICAgICAgICAgIEJNXzE2XzMxCisjZGVmaW5lIFRYNDkyN19TSU8wX1NJRkNSMF9TV1JTVCAgICAgICAgICAgICAgICAgICAgICAgICBCTV8xNl8zMQorI2RlZmluZSBUWDQ5MjdfU0lPMF9TSUZDUjBfUkVTRVJWRURfMDlfMTQgICAgICAgICAgICAgICAgQk1fMDlfMTQKKyNkZWZpbmUgVFg0OTI3X1NJTzBfU0lGQ1IwX1JESUwgICAgICAgICAgICAgICAgICAgICAgICAgIEJNXzE2XzMxCisjZGVmaW5lIFRYNDkyN19TSU8wX1NJRkNSMF9SRElMX0JZVEVTXzEgICAgICAgICAgICAgICAgKH5CTV8wN18wOCkKKyNkZWZpbmUgVFg0OTI3X1NJTzBfU0lGQ1IwX1JESUxfQllURVNfNCAgICAgICAgICAgICAgICAgIEJNXzA3XzA3CisjZGVmaW5lIFRYNDkyN19TSU8wX1NJRkNSMF9SRElMX0JZVEVTXzggICAgICAgICAgICAgICAgICBCTV8wOF8wOAorI2RlZmluZSBUWDQ5MjdfU0lPMF9TSUZDUjBfUkRJTF9CWVRFU18xMiAgICAgICAgICAgICAgICAgQk1fMDdfMDgKKyNkZWZpbmUgVFg0OTI3X1NJTzBfU0lGQ1IwX1JFU0VSVkVEXzA1XzA2ICAgICAgICAgICAgICAgIEJNXzA1XzA2CisjZGVmaW5lIFRYNDkyN19TSU8wX1NJRkNSMF9URElMICAgICAgICAgICAgICAgICAgICAgICAgICBCTV8wM18wNAorI2RlZmluZSBUWDQ5MjdfU0lPMF9TSUZDUjBfVERJTF9CWVRFU18xICAgICAgICAgICAgICAgICh+Qk1fMDNfMDQpCisjZGVmaW5lIFRYNDkyN19TSU8wX1NJRkNSMF9URElMX0JZVEVTXzQgICAgICAgICAgICAgICAgICBCTV8wM18wMworI2RlZmluZSBUWDQ5MjdfU0lPMF9TSUZDUjBfVERJTF9CWVRFU184ICAgICAgICAgICAgICAgICAgQk1fMDRfMDQKKyNkZWZpbmUgVFg0OTI3X1NJTzBfU0lGQ1IwX1RESUxfQllURVNfMCAgICAgICAgICAgICAgICAgIEJNXzAzXzA0CisjZGVmaW5lIFRYNDkyN19TSU8wX1NJRkNSMF9URlJTVCAgICAgICAgICAgICAgICAgICAgICAgICBCTV8wMl8wMgorI2RlZmluZSBUWDQ5MjdfU0lPMF9TSUZDUjBfUkZSU1QgICAgICAgICAgICAgICAgICAgICAgICAgQk1fMDFfMDEKKyNkZWZpbmUgVFg0OTI3X1NJTzBfU0lGQ1IwX0ZSU1RFICAgICAgICAgICAgICAgICAgICAgICAgIEJNXzAwXzAwCisjZGVmaW5lIFRYNDkyN19TSU8wX1NJRkxDUjAgICAgICAgICAgICAgICAgICAgICAgMHhmMzE0IAorI2RlZmluZSBUWDQ5MjdfU0lPMF9TSUZMQ1IwX1JFU0VSVkVEXzEzXzMxICAgICAgICAgICAgICAgQk1fMTNfMzEKKyNkZWZpbmUgVFg0OTI3X1NJTzBfU0lGTENSMF9SQ1MgICAgICAgICAgICAgICAgICAgICAgICAgIEJNXzEyXzEyCisjZGVmaW5lIFRYNDkyN19TSU8wX1NJRkxDUjBfVEVTICAgICAgICAgICAgICAgICAgICAgICAgICBCTV8xMV8xMQorI2RlZmluZSBUWDQ5MjdfU0lPMF9TSUZMQ1IwX1JFU0VSVkVEXzEwXzEwICAgICAgICAgICAgICAgQk1fMTBfMTAKKyNkZWZpbmUgVFg0OTI3X1NJTzBfU0lGTENSMF9SVFNTQyAgICAgICAgICAgICAgICAgICAgICAgIEJNXzA5XzA5CisjZGVmaW5lIFRYNDkyN19TSU8wX1NJRkxDUjBfUlNERSAgICAgICAgICAgICAgICAgICAgICAgICBCTV8wOF8wOAorI2RlZmluZSBUWDQ5MjdfU0lPMF9TSUZMQ1IwX1RTREUgICAgICAgICAgICAgICAgICAgICAgICAgQk1fMDdfMDcKKyNkZWZpbmUgVFg0OTI3X1NJTzBfU0lGTENSMF9SRVNFUlZFRF8wNV8wNiAgICAgICAgICAgICAgIEJNXzA1XzA2CisjZGVmaW5lIFRYNDkyN19TSU8wX1NJRkxDUjBfUlRTVEwgICAgICAgICAgICAgICAgICAgICAgICBCTV8wMV8wNAorI2RlZmluZSBUWDQ5MjdfU0lPMF9TSUZMQ1IwX1RCUksgICAgICAgICAgICAgICAgICAgICAgICAgQk1fMDBfMDAKKyNkZWZpbmUgVFg0OTI3X1NJTzBfU0lCR1IwICAgICAgICAgICAgICAgICAgICAgICAweGYzMTggCisjZGVmaW5lIFRYNDkyN19TSU8wX1NJQkdSMF9SRVNFUlZFRF8xMF8zMSAgICAgICAgICAgICAgICBCTV8xMF8zMQorI2RlZmluZSBUWDQ5MjdfU0lPMF9TSUJHUjBfQkNMSyAgICAgICAgICAgICAgICAgICAgICAgICAgQk1fMDhfMDkKKyNkZWZpbmUgVFg0OTI3X1NJTzBfU0lCR1IwX0JDTEtfVDAgICAgICAgICAgICAgICAgICAgICAofkJNXzA4XzA5KQorI2RlZmluZSBUWDQ5MjdfU0lPMF9TSUJHUjBfQkNMS19UMiAgICAgICAgICAgICAgICAgICAgICAgQk1fMDhfMDgKKyNkZWZpbmUgVFg0OTI3X1NJTzBfU0lCR1IwX0JDTEtfVDQgICAgICAgICAgICAgICAgICAgICAgIEJNXzA5XzA5CisjZGVmaW5lIFRYNDkyN19TSU8wX1NJQkdSMF9CQ0xLX1Q2ICAgICAgICAgICAgICAgICAgICAgICBCTV8wOF8wOQorI2RlZmluZSBUWDQ5MjdfU0lPMF9TSUJHUjBfQlJEICAgICAgICAgICAgICAgICAgICAgICAgICAgQk1fMDBfMDcKKyNkZWZpbmUgVFg0OTI3X1NJTzBfU0lURklGMDAgICAgICAgICAgICAgICAgICAgICAweGYzMWMgCisjZGVmaW5lIFRYNDkyN19TSU8wX1NJVEZJRjAwX1JFU0VSVkVEXzA4XzMxICAgICAgICAgICAgICBCTV8wOF8zMQorI2RlZmluZSBUWDQ5MjdfU0lPMF9TSVRGSUYwMF9UWEQgICAgICAgICAgICAgICAgICAgICAgICAgQk1fMDBfMDcKKyNkZWZpbmUgVFg0OTI3X1NJTzBfU0lSRklGTzAgICAgICAgICAgICAgICAgICAgICAweGYzMjAgICAgICAgICAgCisjZGVmaW5lIFRYNDkyN19TSU8wX1NJUkZJRk8wX1JFU0VSVkVEXzA4XzMxICAgICAgICAgICAgICBCTV8wOF8zMQorI2RlZmluZSBUWDQ5MjdfU0lPMF9TSVJGSUZPMF9SWEQgICAgICAgICAgICAgICAgICAgICAgICAgQk1fMDBfMDcKKyNkZWZpbmUgVFg0OTI3X1NJTzBfU0lSRklGTzAgICAgICAgICAgICAgICAgICAgICAweGYzMjAgICAgICAgICAgCisjZGVmaW5lIFRYNDkyN19TSU8wX0xJTUlUICAgICAgICAgICAgICAgICAgICAgICAgMHhmM2ZmIAorCisKKy8qIFRYNDkyNyBzZXJpYWwgcG9ydCAxICgzMi1iaXQgcmVnaXN0ZXJzKSAqLworI2RlZmluZSBUWDQ5MjdfU0lPMV9CQVNFICAgICAgICAgICAgICAgIDB4ZjQwMCAKKyNkZWZpbmUgVFg0OTI3X1NJTzFfU0lMQ1IxICAgICAgICAgICAgICAweGY0MDAgCisjZGVmaW5lIFRYNDkyN19TSU8xX1NJRElDUjEgICAgICAgICAgICAgMHhmNDA0IAorI2RlZmluZSBUWDQ5MjdfU0lPMV9TSURJU1IxICAgICAgICAgICAgIDB4ZjQwOCAKKyNkZWZpbmUgVFg0OTI3X1NJTzFfU0lTQ0lTUjEgICAgICAgICAgICAweGY0MGMgCisjZGVmaW5lIFRYNDkyN19TSU8xX1NJRkNSMSAgICAgICAgICAgICAgMHhmNDEwIAorI2RlZmluZSBUWDQ5MjdfU0lPMV9TSUZMQ1IxICAgICAgICAgICAgIDB4ZjQxNCAKKyNkZWZpbmUgVFg0OTI3X1NJTzFfU0lCR1IxICAgICAgICAgICAgICAweGY0MTggCisjZGVmaW5lIFRYNDkyN19TSU8xX1NJVEZJRjAxICAgICAgICAgICAgMHhmNDFjIAorI2RlZmluZSBUWDQ5MjdfU0lPMV9TSVJGSUZPMSAgICAgICAgICAgIDB4ZjQyMCAKKyNkZWZpbmUgVFg0OTI3X1NJTzFfTElNSVQgICAgICAgICAgICAgICAweGY0ZmYgCisKKworLyogVFg0OTI3IHBhcmFsbGVsIHBvcnQgKDMyLWJpdCByZWdpc3RlcnMpICovCisjZGVmaW5lIFRYNDkyN19QSU9fQkFTRSAgICAgICAgICAgICAgICAgMHhmNTAwCisjZGVmaW5lIFRYNDkyN19QSU9fUElPRDAgICAgICAgICAgICAgICAgMHhmNTAwCisjZGVmaW5lIFRYNDkyN19QSU9fUElPREkgICAgICAgICAgICAgICAgMHhmNTA0CisjZGVmaW5lIFRYNDkyN19QSU9fUElPRElSICAgICAgICAgICAgICAgMHhmNTA4CisjZGVmaW5lIFRYNDkyN19QSU9fUElPT0QgICAgICAgICAgICAgICAgMHhmNTBjCisjZGVmaW5lIFRYNDkyN19QSU9fTElNSVQgICAgICAgICAgICAgICAgMHhmNTBmCisKKworLyogVFg0OTI3IEludGVycnVwdCBDb250cm9sbGVyICgzMi1iaXQgcmVnaXN0ZXJzKSAqLworI2RlZmluZSBUWDQ5MjdfSVJDX0JBU0UgICAgICAgICAgICAgICAgIDB4ZjUxMAorI2RlZmluZSBUWDQ5MjdfSVJDX0lSRkxBRzAgICAgICAgICAgICAgIDB4ZjUxMAorI2RlZmluZSBUWDQ5MjdfSVJDX0lSRkxBRzEgICAgICAgICAgICAgIDB4ZjUxNAorI2RlZmluZSBUWDQ5MjdfSVJDX0lSUE9MICAgICAgICAgICAgICAgIDB4ZjUxOAorI2RlZmluZSBUWDQ5MjdfSVJDX0lSUkNOVCAgICAgICAgICAgICAgIDB4ZjUxYworI2RlZmluZSBUWDQ5MjdfSVJDX0lSTUFTS0lOVCAgICAgICAgICAgIDB4ZjUyMAorI2RlZmluZSBUWDQ5MjdfSVJDX0lSTUFTS0VYVCAgICAgICAgICAgIDB4ZjUyNAorI2RlZmluZSBUWDQ5MjdfSVJDX0lSREVOICAgICAgICAgICAgICAgIDB4ZjYwMAorI2RlZmluZSBUWDQ5MjdfSVJDX0lSRE0wICAgICAgICAgICAgICAgIDB4ZjYwNAorI2RlZmluZSBUWDQ5MjdfSVJDX0lSRE0xICAgICAgICAgICAgICAgIDB4ZjYwOAorI2RlZmluZSBUWDQ5MjdfSVJDX0lSTFZMMCAgICAgICAgICAgICAgIDB4ZjYxMAorI2RlZmluZSBUWDQ5MjdfSVJDX0lSTFZMMSAgICAgICAgICAgICAgIDB4ZjYxNAorI2RlZmluZSBUWDQ5MjdfSVJDX0lSTFZMMiAgICAgICAgICAgICAgIDB4ZjYxOAorI2RlZmluZSBUWDQ5MjdfSVJDX0lSTFZMMyAgICAgICAgICAgICAgIDB4ZjYxYworI2RlZmluZSBUWDQ5MjdfSVJDX0lSTFZMNCAgICAgICAgICAgICAgIDB4ZjYyMAorI2RlZmluZSBUWDQ5MjdfSVJDX0lSTFZMNSAgICAgICAgICAgICAgIDB4ZjYyNAorI2RlZmluZSBUWDQ5MjdfSVJDX0lSTFZMNiAgICAgICAgICAgICAgIDB4ZjYyOAorI2RlZmluZSBUWDQ5MjdfSVJDX0lSTFZMNyAgICAgICAgICAgICAgIDB4ZjYyYworI2RlZmluZSBUWDQ5MjdfSVJDX0lSTVNLICAgICAgICAgICAgICAgIDB4ZjY0MAorI2RlZmluZSBUWDQ5MjdfSVJDX0lSRURDICAgICAgICAgICAgICAgIDB4ZjY2MAorI2RlZmluZSBUWDQ5MjdfSVJDX0lSUE5EICAgICAgICAgICAgICAgIDB4ZjY4MAorI2RlZmluZSBUWDQ5MjdfSVJDX0lSQ1MgICAgICAgICAgICAgICAgIDB4ZjZhMAorI2RlZmluZSBUWDQ5MjdfSVJDX0xJTUlUICAgICAgICAgICAgICAgIDB4ZjZmZgorCisKKy8qIFRYNDkyNyBBQy1saW5rIGNvbnRyb2xsZXIgKDMyLWJpdCByZWdpc3RlcnMpICovCisjZGVmaW5lIFRYNDkyN19BQ0xDX0JBU0UgICAgICAgICAgICAgICAgMHhmNzAwCisjZGVmaW5lIFRYNDkyN19BQ0xDX0FDQ1RMRU4gICAgICAgICAgICAgMHhmNzAwCisjZGVmaW5lIFRYNDkyN19BQ0xDX0FDQ1RMRElTICAgICAgICAgICAgMHhmNzA0CisjZGVmaW5lIFRYNDkyN19BQ0xDX0FDUkVHQUNDICAgICAgICAgICAgMHhmNzA4CisjZGVmaW5lIFRYNDkyN19BQ0xDX0FDSU5UU1RTICAgICAgICAgICAgMHhmNzEwCisjZGVmaW5lIFRYNDkyN19BQ0xDX0FDSU5UTVNUUyAgICAgICAgICAgMHhmNzE0CisjZGVmaW5lIFRYNDkyN19BQ0xDX0FDSU5URU4gICAgICAgICAgICAgMHhmNzE4CisjZGVmaW5lIFRYNDkyN19BQ0xDX0FDSU5URElTICAgICAgICAgICAgMHhmNzFjCisjZGVmaW5lIFRYNDkyN19BQ0xDX0FDU0VNQVBIICAgICAgICAgICAgMHhmNzIwCisjZGVmaW5lIFRYNDkyN19BQ0xDX0FDR1BJREFUICAgICAgICAgICAgMHhmNzQwCisjZGVmaW5lIFRYNDkyN19BQ0xDX0FDR1BPREFUICAgICAgICAgICAgMHhmNzQ0CisjZGVmaW5lIFRYNDkyN19BQ0xDX0FDU0xURU4gICAgICAgICAgICAgMHhmNzQ4CisjZGVmaW5lIFRYNDkyN19BQ0xDX0FDU0xURElTICAgICAgICAgICAgMHhmNzRjCisjZGVmaW5lIFRYNDkyN19BQ0xDX0FDRklGT1NUUyAgICAgICAgICAgMHhmNzUwCisjZGVmaW5lIFRYNDkyN19BQ0xDX0FDRE1BU1RTICAgICAgICAgICAgMHhmNzgwCisjZGVmaW5lIFRYNDkyN19BQ0xDX0FDRE1BU0VMICAgICAgICAgICAgMHhmNzg0CisjZGVmaW5lIFRYNDkyN19BQ0xDX0FDQVVET0RBVCAgICAgICAgICAgMHhmN2EwCisjZGVmaW5lIFRYNDkyN19BQ0xDX0FDU1VSUkRBVCAgICAgICAgICAgMHhmN2E0CisjZGVmaW5lIFRYNDkyN19BQ0xDX0FDQ0VOVERBVCAgICAgICAgICAgMHhmN2E4CisjZGVmaW5lIFRYNDkyN19BQ0xDX0FDTEZFREFUICAgICAgICAgICAgMHhmN2FjCisjZGVmaW5lIFRYNDkyN19BQ0xDX0FDQVVESURBVCAgICAgICAgICAgMHhmN2IwCisjZGVmaW5lIFRYNDkyN19BQ0xDX0FDTU9ET0RBVCAgICAgICAgICAgMHhmN2I4CisjZGVmaW5lIFRYNDkyN19BQ0xDX0FDTU9ESURBVCAgICAgICAgICAgMHhmN2JjCisjZGVmaW5lIFRYNDkyN19BQ0xDX0FDUkVWSUQgICAgICAgICAgICAgMHhmN2ZjCisjZGVmaW5lIFRYNDkyN19BQ0xDX0xJTUlUICAgICAgICAgICAgICAgMHhmN2ZmCisKKworI2RlZmluZSBUWDQ5MjdfUkVHKHgpICgoVFg0OTI3X0JBU0UpKyh4KSkKKworI2RlZmluZSBUWDQ5MjdfUkQwOCggcmVnICAgICAgKSAgICgqKHZ1MDgqKShyZWcpKQorI2RlZmluZSBUWDQ5MjdfV1IwOCggcmVnLCB2YWwgKSAgKCgqKHZ1MDgqKShyZWcpKT0odmFsKSkKKworI2RlZmluZSBUWDQ5MjdfUkQxNiggcmVnICAgICAgKSAgICgqKHZ1MTYqKShyZWcpKQorI2RlZmluZSBUWDQ5MjdfV1IxNiggcmVnLCB2YWwgKSAgKCgqKHZ1MTYqKShyZWcpKT0odmFsKSkKKworI2RlZmluZSBUWDQ5MjdfUkQzMiggcmVnICAgICAgKSAgICgqKHZ1MzIqKShyZWcpKQorI2RlZmluZSBUWDQ5MjdfV1IzMiggcmVnLCB2YWwgKSAgKCgqKHZ1MzIqKShyZWcpKT0odmFsKSkKKworI2RlZmluZSBUWDQ5MjdfUkQ2NCggcmVnICAgICAgKSAgICgqKHZ1NjQqKShyZWcpKQorI2RlZmluZSBUWDQ5MjdfV1I2NCggcmVnLCB2YWwgKSAgKCgqKHZ1NjQqKShyZWcpKT0odmFsKSkKKworI2RlZmluZSBUWDQ5MjdfUkQoIHJlZyAgICAgICkgVFg0OTI3X1JEMzIoIHJlZyApCisjZGVmaW5lIFRYNDkyN19XUiggcmVnLCB2YWwgKSBUWDQ5MjdfV1IzMiggcmVnLCB2YWwgKQorCisKKworCisKKyNkZWZpbmUgTUk4MjU5X0lSUV9JU0FfUkFXX0JFRyAgIDAgICAgLyogb3B0aW9uYWwgYmFja3BsYW5lIGk4MjU5ICovCisjZGVmaW5lIE1JODI1OV9JUlFfSVNBX1JBV19FTkQgIDE1CisjZGVmaW5lIFRYNDkyN19JUlFfQ1AwX1JBV19CRUcgICAwICAgIC8qIHR4NDkyNyBjcHUgYnVpbHQtaW4gY3AwICovCisjZGVmaW5lIFRYNDkyN19JUlFfQ1AwX1JBV19FTkQgICA3CisjZGVmaW5lIFRYNDkyN19JUlFfUElDX1JBV19CRUcgICAwICAgIC8qIHR4NDkyNyBjcHUgYnVpbGQtaW4gcGljICovCisjZGVmaW5lIFRYNDkyN19JUlFfUElDX1JBV19FTkQgIDMxCisKKworI2RlZmluZSBNSTgyNTlfSVJRX0lTQV9CRUcgICAgICAgICAgICAgICAgICAgICAgICAgIE1JODI1OV9JUlFfSVNBX1JBV19CRUcgICAvKiAgMCAqLworI2RlZmluZSBNSTgyNTlfSVJRX0lTQV9FTkQgICAgICAgICAgICAgICAgICAgICAgICAgIE1JODI1OV9JUlFfSVNBX1JBV19FTkQgICAvKiAxNSAqLworCisjZGVmaW5lIFRYNDkyN19JUlFfQ1AwX0JFRyAgKChNSTgyNTlfSVJRX0lTQV9FTkQrMSkrVFg0OTI3X0lSUV9DUDBfUkFXX0JFRykgIC8qIDE2ICovCisjZGVmaW5lIFRYNDkyN19JUlFfQ1AwX0VORCAgKChNSTgyNTlfSVJRX0lTQV9FTkQrMSkrVFg0OTI3X0lSUV9DUDBfUkFXX0VORCkgIC8qIDIzICovCisKKyNkZWZpbmUgVFg0OTI3X0lSUV9QSUNfQkVHICAoKFRYNDkyN19JUlFfQ1AwX0VORCsxKStUWDQ5MjdfSVJRX1BJQ19SQVdfQkVHKSAgLyogMjQgKi8KKyNkZWZpbmUgVFg0OTI3X0lSUV9QSUNfRU5EICAoKFRYNDkyN19JUlFfQ1AwX0VORCsxKStUWDQ5MjdfSVJRX1BJQ19SQVdfRU5EKSAgLyogNTUgKi8KKworCisjZGVmaW5lIFRYNDkyN19JUlFfVVNFUjAgICAgICAgICAgICAoVFg0OTI3X0lSUV9DUDBfQkVHKzApCisjZGVmaW5lIFRYNDkyN19JUlFfVVNFUjEgICAgICAgICAgICAoVFg0OTI3X0lSUV9DUDBfQkVHKzEpCisjZGVmaW5lIFRYNDkyN19JUlFfTkVTVF9QSUNfT05fQ1AwICAoVFg0OTI3X0lSUV9DUDBfQkVHKzIpCisjZGVmaW5lIFRYNDkyN19JUlFfQ1BVX1RJTUVSICAgICAgICAoVFg0OTI3X0lSUV9DUDBfQkVHKzcpCisKKyNkZWZpbmUgVFg0OTI3X0lSUV9ORVNUX0VYVF9PTl9QSUMgIChUWDQ5MjdfSVJRX1BJQ19CRUcrMykKKworI2VuZGlmIC8qIF9fQVNNX1RYNDkyN19UWDQ5MjdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy90eDQ5MjcvdHg0OTI3X21pcHMuaCBiL2luY2x1ZGUvYXNtLW1pcHMvdHg0OTI3L3R4NDkyN19taXBzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQyYWI5M2IKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3R4NDkyNy90eDQ5MjdfbWlwcy5oCkBAIC0wLDAgKzEsNDE3NyBAQAorLyoKKyAqIEF1dGhvcjogTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICogICAgICAgICBzb3VyY2VAbXZpc3RhLmNvbQorICoKKyAqIENvcHlyaWdodCAyMDAxLTIwMDIgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisgKiAgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqICBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IKKyAqICBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFCisgKiAgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworI2lmbmRlZiBfX0FTTV9UWDQ5MjdfVFg0OTI3X01JUFNfSAorI2RlZmluZSBfX0FTTV9UWDQ5MjdfVFg0OTI3X01JUFNfSAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCitzdGF0aWMgaW5saW5lIHZvaWQgYXNtX3dhaXQodm9pZCkKK3sKKwlfX2FzbV9fKCIuc2V0XHRtaXBzM1xuXHQiCisJCSJ3YWl0XG5cdCIKKwkJIi5zZXRcdG1pcHMwIik7Cit9CisKKyNkZWZpbmUgcmVnX3JkMDgocikgICAgKCh1OCApKCooKHZ1OCAqKShyKSkpKQorI2RlZmluZSByZWdfcmQxNihyKSAgICAoKHUxNikoKigodnUxNiopKHIpKSkpCisjZGVmaW5lIHJlZ19yZDMyKHIpICAgICgodTMyKSgqKCh2dTMyKikocikpKSkKKyNkZWZpbmUgcmVnX3JkNjQocikgICAgKCh1NjQpKCooKHZ1NjQqKShyKSkpKQorCisjZGVmaW5lIHJlZ193cjA4KHIsdikgICgoKigodnU4ICopKHIpKSk9KCh1OCApKHYpKSkKKyNkZWZpbmUgcmVnX3dyMTYocix2KSAgKCgqKCh2dTE2KikocikpKT0oKHUxNikodikpKQorI2RlZmluZSByZWdfd3IzMihyLHYpICAoKCooKHZ1MzIqKShyKSkpPSgodTMyKSh2KSkpCisjZGVmaW5lIHJlZ193cjY0KHIsdikgICgoKigodnU2NCopKHIpKSk9KCh1NjQpKHYpKSkKKwordHlwZWRlZiB2b2xhdGlsZSBfX3NpZ25lZCBjaGFyIHZzODsKK3R5cGVkZWYgdm9sYXRpbGUgdW5zaWduZWQgY2hhciB2dTg7CisKK3R5cGVkZWYgdm9sYXRpbGUgX19zaWduZWQgc2hvcnQgdnMxNjsKK3R5cGVkZWYgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgdnUxNjsKKwordHlwZWRlZiB2b2xhdGlsZSBfX3NpZ25lZCBpbnQgdnMzMjsKK3R5cGVkZWYgdm9sYXRpbGUgdW5zaWduZWQgaW50IHZ1MzI7CisKK3R5cGVkZWYgIHM4ICBzMDg7Cit0eXBlZGVmIHZzOCB2czA4OworCit0eXBlZGVmICB1OCAgdTA4OwordHlwZWRlZiB2dTggdnUwODsKKworCisjaWYgKF9NSVBTX1NaTE9ORyA9PSA2NCkKKwordHlwZWRlZiB2b2xhdGlsZSBfX3NpZ25lZF9fIGxvbmcgdnM2NDsKK3R5cGVkZWYgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyB2dTY0OworCisjZWxzZQorCit0eXBlZGVmIHZvbGF0aWxlIF9fc2lnbmVkX18gbG9uZyBsb25nIHZzNjQ7Cit0eXBlZGVmIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgbG9uZyB2dTY0OworCisjZW5kaWYKKworCisjZGVmaW5lIEJNXzAwXzAwIDB4MDAwMDAwMDAwMDAwMDAwMQorI2RlZmluZSBCTV8wMV8wMCAweDAwMDAwMDAwMDAwMDAwMDMKKyNkZWZpbmUgQk1fMDBfMDEgQk1fMDFfMDAKKyNkZWZpbmUgQk1fMDJfMDAgMHgwMDAwMDAwMDAwMDAwMDA3CisjZGVmaW5lIEJNXzAwXzAyIEJNXzAyXzAwCisjZGVmaW5lIEJNXzAzXzAwIDB4MDAwMDAwMDAwMDAwMDAwZgorI2RlZmluZSBCTV8wMF8wMyBCTV8wM18wMAorI2RlZmluZSBCTV8wNF8wMCAweDAwMDAwMDAwMDAwMDAwMWYKKyNkZWZpbmUgQk1fMDBfMDQgQk1fMDRfMDAKKyNkZWZpbmUgQk1fMDVfMDAgMHgwMDAwMDAwMDAwMDAwMDNmCisjZGVmaW5lIEJNXzAwXzA1IEJNXzA1XzAwCisjZGVmaW5lIEJNXzA2XzAwIDB4MDAwMDAwMDAwMDAwMDA3ZgorI2RlZmluZSBCTV8wMF8wNiBCTV8wNl8wMAorI2RlZmluZSBCTV8wN18wMCAweDAwMDAwMDAwMDAwMDAwZmYKKyNkZWZpbmUgQk1fMDBfMDcgQk1fMDdfMDAKKyNkZWZpbmUgQk1fMDhfMDAgMHgwMDAwMDAwMDAwMDAwMWZmCisjZGVmaW5lIEJNXzAwXzA4IEJNXzA4XzAwCisjZGVmaW5lIEJNXzA5XzAwIDB4MDAwMDAwMDAwMDAwMDNmZgorI2RlZmluZSBCTV8wMF8wOSBCTV8wOV8wMAorI2RlZmluZSBCTV8xMF8wMCAweDAwMDAwMDAwMDAwMDA3ZmYKKyNkZWZpbmUgQk1fMDBfMTAgQk1fMTBfMDAKKyNkZWZpbmUgQk1fMTFfMDAgMHgwMDAwMDAwMDAwMDAwZmZmCisjZGVmaW5lIEJNXzAwXzExIEJNXzExXzAwCisjZGVmaW5lIEJNXzEyXzAwIDB4MDAwMDAwMDAwMDAwMWZmZgorI2RlZmluZSBCTV8wMF8xMiBCTV8xMl8wMAorI2RlZmluZSBCTV8xM18wMCAweDAwMDAwMDAwMDAwMDNmZmYKKyNkZWZpbmUgQk1fMDBfMTMgQk1fMTNfMDAKKyNkZWZpbmUgQk1fMTRfMDAgMHgwMDAwMDAwMDAwMDA3ZmZmCisjZGVmaW5lIEJNXzAwXzE0IEJNXzE0XzAwCisjZGVmaW5lIEJNXzE1XzAwIDB4MDAwMDAwMDAwMDAwZmZmZgorI2RlZmluZSBCTV8wMF8xNSBCTV8xNV8wMAorI2RlZmluZSBCTV8xNl8wMCAweDAwMDAwMDAwMDAwMWZmZmYKKyNkZWZpbmUgQk1fMDBfMTYgQk1fMTZfMDAKKyNkZWZpbmUgQk1fMTdfMDAgMHgwMDAwMDAwMDAwMDNmZmZmCisjZGVmaW5lIEJNXzAwXzE3IEJNXzE3XzAwCisjZGVmaW5lIEJNXzE4XzAwIDB4MDAwMDAwMDAwMDA3ZmZmZgorI2RlZmluZSBCTV8wMF8xOCBCTV8xOF8wMAorI2RlZmluZSBCTV8xOV8wMCAweDAwMDAwMDAwMDAwZmZmZmYKKyNkZWZpbmUgQk1fMDBfMTkgQk1fMTlfMDAKKyNkZWZpbmUgQk1fMjBfMDAgMHgwMDAwMDAwMDAwMWZmZmZmCisjZGVmaW5lIEJNXzAwXzIwIEJNXzIwXzAwCisjZGVmaW5lIEJNXzIxXzAwIDB4MDAwMDAwMDAwMDNmZmZmZgorI2RlZmluZSBCTV8wMF8yMSBCTV8yMV8wMAorI2RlZmluZSBCTV8yMl8wMCAweDAwMDAwMDAwMDA3ZmZmZmYKKyNkZWZpbmUgQk1fMDBfMjIgQk1fMjJfMDAKKyNkZWZpbmUgQk1fMjNfMDAgMHgwMDAwMDAwMDAwZmZmZmZmCisjZGVmaW5lIEJNXzAwXzIzIEJNXzIzXzAwCisjZGVmaW5lIEJNXzI0XzAwIDB4MDAwMDAwMDAwMWZmZmZmZgorI2RlZmluZSBCTV8wMF8yNCBCTV8yNF8wMAorI2RlZmluZSBCTV8yNV8wMCAweDAwMDAwMDAwMDNmZmZmZmYKKyNkZWZpbmUgQk1fMDBfMjUgQk1fMjVfMDAKKyNkZWZpbmUgQk1fMjZfMDAgMHgwMDAwMDAwMDA3ZmZmZmZmCisjZGVmaW5lIEJNXzAwXzI2IEJNXzI2XzAwCisjZGVmaW5lIEJNXzI3XzAwIDB4MDAwMDAwMDAwZmZmZmZmZgorI2RlZmluZSBCTV8wMF8yNyBCTV8yN18wMAorI2RlZmluZSBCTV8yOF8wMCAweDAwMDAwMDAwMWZmZmZmZmYKKyNkZWZpbmUgQk1fMDBfMjggQk1fMjhfMDAKKyNkZWZpbmUgQk1fMjlfMDAgMHgwMDAwMDAwMDNmZmZmZmZmCisjZGVmaW5lIEJNXzAwXzI5IEJNXzI5XzAwCisjZGVmaW5lIEJNXzMwXzAwIDB4MDAwMDAwMDA3ZmZmZmZmZgorI2RlZmluZSBCTV8wMF8zMCBCTV8zMF8wMAorI2RlZmluZSBCTV8zMV8wMCAweDAwMDAwMDAwZmZmZmZmZmYKKyNkZWZpbmUgQk1fMDBfMzEgQk1fMzFfMDAKKyNkZWZpbmUgQk1fMzJfMDAgMHgwMDAwMDAwMWZmZmZmZmZmCisjZGVmaW5lIEJNXzAwXzMyIEJNXzMyXzAwCisjZGVmaW5lIEJNXzMzXzAwIDB4MDAwMDAwMDNmZmZmZmZmZgorI2RlZmluZSBCTV8wMF8zMyBCTV8zM18wMAorI2RlZmluZSBCTV8zNF8wMCAweDAwMDAwMDA3ZmZmZmZmZmYKKyNkZWZpbmUgQk1fMDBfMzQgQk1fMzRfMDAKKyNkZWZpbmUgQk1fMzVfMDAgMHgwMDAwMDAwZmZmZmZmZmZmCisjZGVmaW5lIEJNXzAwXzM1IEJNXzM1XzAwCisjZGVmaW5lIEJNXzM2XzAwIDB4MDAwMDAwMWZmZmZmZmZmZgorI2RlZmluZSBCTV8wMF8zNiBCTV8zNl8wMAorI2RlZmluZSBCTV8zN18wMCAweDAwMDAwMDNmZmZmZmZmZmYKKyNkZWZpbmUgQk1fMDBfMzcgQk1fMzdfMDAKKyNkZWZpbmUgQk1fMzhfMDAgMHgwMDAwMDA3ZmZmZmZmZmZmCisjZGVmaW5lIEJNXzAwXzM4IEJNXzM4XzAwCisjZGVmaW5lIEJNXzM5XzAwIDB4MDAwMDAwZmZmZmZmZmZmZgorI2RlZmluZSBCTV8wMF8zOSBCTV8zOV8wMAorI2RlZmluZSBCTV80MF8wMCAweDAwMDAwMWZmZmZmZmZmZmYKKyNkZWZpbmUgQk1fMDBfNDAgQk1fNDBfMDAKKyNkZWZpbmUgQk1fNDFfMDAgMHgwMDAwMDNmZmZmZmZmZmZmCisjZGVmaW5lIEJNXzAwXzQxIEJNXzQxXzAwCisjZGVmaW5lIEJNXzQyXzAwIDB4MDAwMDA3ZmZmZmZmZmZmZgorI2RlZmluZSBCTV8wMF80MiBCTV80Ml8wMAorI2RlZmluZSBCTV80M18wMCAweDAwMDAwZmZmZmZmZmZmZmYKKyNkZWZpbmUgQk1fMDBfNDMgQk1fNDNfMDAKKyNkZWZpbmUgQk1fNDRfMDAgMHgwMDAwMWZmZmZmZmZmZmZmCisjZGVmaW5lIEJNXzAwXzQ0IEJNXzQ0XzAwCisjZGVmaW5lIEJNXzQ1XzAwIDB4MDAwMDNmZmZmZmZmZmZmZgorI2RlZmluZSBCTV8wMF80NSBCTV80NV8wMAorI2RlZmluZSBCTV80Nl8wMCAweDAwMDA3ZmZmZmZmZmZmZmYKKyNkZWZpbmUgQk1fMDBfNDYgQk1fNDZfMDAKKyNkZWZpbmUgQk1fNDdfMDAgMHgwMDAwZmZmZmZmZmZmZmZmCisjZGVmaW5lIEJNXzAwXzQ3IEJNXzQ3XzAwCisjZGVmaW5lIEJNXzQ4XzAwIDB4MDAwMWZmZmZmZmZmZmZmZgorI2RlZmluZSBCTV8wMF80OCBCTV80OF8wMAorI2RlZmluZSBCTV80OV8wMCAweDAwMDNmZmZmZmZmZmZmZmYKKyNkZWZpbmUgQk1fMDBfNDkgQk1fNDlfMDAKKyNkZWZpbmUgQk1fNTBfMDAgMHgwMDA3ZmZmZmZmZmZmZmZmCisjZGVmaW5lIEJNXzAwXzUwIEJNXzUwXzAwCisjZGVmaW5lIEJNXzUxXzAwIDB4MDAwZmZmZmZmZmZmZmZmZgorI2RlZmluZSBCTV8wMF81MSBCTV81MV8wMAorI2RlZmluZSBCTV81Ml8wMCAweDAwMWZmZmZmZmZmZmZmZmYKKyNkZWZpbmUgQk1fMDBfNTIgQk1fNTJfMDAKKyNkZWZpbmUgQk1fNTNfMDAgMHgwMDNmZmZmZmZmZmZmZmZmCisjZGVmaW5lIEJNXzAwXzUzIEJNXzUzXzAwCisjZGVmaW5lIEJNXzU0XzAwIDB4MDA3ZmZmZmZmZmZmZmZmZgorI2RlZmluZSBCTV8wMF81NCBCTV81NF8wMAorI2RlZmluZSBCTV81NV8wMCAweDAwZmZmZmZmZmZmZmZmZmYKKyNkZWZpbmUgQk1fMDBfNTUgQk1fNTVfMDAKKyNkZWZpbmUgQk1fNTZfMDAgMHgwMWZmZmZmZmZmZmZmZmZmCisjZGVmaW5lIEJNXzAwXzU2IEJNXzU2XzAwCisjZGVmaW5lIEJNXzU3XzAwIDB4MDNmZmZmZmZmZmZmZmZmZgorI2RlZmluZSBCTV8wMF81NyBCTV81N18wMAorI2RlZmluZSBCTV81OF8wMCAweDA3ZmZmZmZmZmZmZmZmZmYKKyNkZWZpbmUgQk1fMDBfNTggQk1fNThfMDAKKyNkZWZpbmUgQk1fNTlfMDAgMHgwZmZmZmZmZmZmZmZmZmZmCisjZGVmaW5lIEJNXzAwXzU5IEJNXzU5XzAwCisjZGVmaW5lIEJNXzYwXzAwIDB4MWZmZmZmZmZmZmZmZmZmZgorI2RlZmluZSBCTV8wMF82MCBCTV82MF8wMAorI2RlZmluZSBCTV82MV8wMCAweDNmZmZmZmZmZmZmZmZmZmYKKyNkZWZpbmUgQk1fMDBfNjEgQk1fNjFfMDAKKyNkZWZpbmUgQk1fNjJfMDAgMHg3ZmZmZmZmZmZmZmZmZmZmCisjZGVmaW5lIEJNXzAwXzYyIEJNXzYyXzAwCisjZGVmaW5lIEJNXzYzXzAwIDB4ZmZmZmZmZmZmZmZmZmZmZgorI2RlZmluZSBCTV8wMF82MyBCTV82M18wMAorI2RlZmluZSBCTV8wMV8wMSAweDAwMDAwMDAwMDAwMDAwMDIKKyNkZWZpbmUgQk1fMDJfMDEgMHgwMDAwMDAwMDAwMDAwMDA2CisjZGVmaW5lIEJNXzAxXzAyIEJNXzAyXzAxCisjZGVmaW5lIEJNXzAzXzAxIDB4MDAwMDAwMDAwMDAwMDAwZQorI2RlZmluZSBCTV8wMV8wMyBCTV8wM18wMQorI2RlZmluZSBCTV8wNF8wMSAweDAwMDAwMDAwMDAwMDAwMWUKKyNkZWZpbmUgQk1fMDFfMDQgQk1fMDRfMDEKKyNkZWZpbmUgQk1fMDVfMDEgMHgwMDAwMDAwMDAwMDAwMDNlCisjZGVmaW5lIEJNXzAxXzA1IEJNXzA1XzAxCisjZGVmaW5lIEJNXzA2XzAxIDB4MDAwMDAwMDAwMDAwMDA3ZQorI2RlZmluZSBCTV8wMV8wNiBCTV8wNl8wMQorI2RlZmluZSBCTV8wN18wMSAweDAwMDAwMDAwMDAwMDAwZmUKKyNkZWZpbmUgQk1fMDFfMDcgQk1fMDdfMDEKKyNkZWZpbmUgQk1fMDhfMDEgMHgwMDAwMDAwMDAwMDAwMWZlCisjZGVmaW5lIEJNXzAxXzA4IEJNXzA4XzAxCisjZGVmaW5lIEJNXzA5XzAxIDB4MDAwMDAwMDAwMDAwMDNmZQorI2RlZmluZSBCTV8wMV8wOSBCTV8wOV8wMQorI2RlZmluZSBCTV8xMF8wMSAweDAwMDAwMDAwMDAwMDA3ZmUKKyNkZWZpbmUgQk1fMDFfMTAgQk1fMTBfMDEKKyNkZWZpbmUgQk1fMTFfMDEgMHgwMDAwMDAwMDAwMDAwZmZlCisjZGVmaW5lIEJNXzAxXzExIEJNXzExXzAxCisjZGVmaW5lIEJNXzEyXzAxIDB4MDAwMDAwMDAwMDAwMWZmZQorI2RlZmluZSBCTV8wMV8xMiBCTV8xMl8wMQorI2RlZmluZSBCTV8xM18wMSAweDAwMDAwMDAwMDAwMDNmZmUKKyNkZWZpbmUgQk1fMDFfMTMgQk1fMTNfMDEKKyNkZWZpbmUgQk1fMTRfMDEgMHgwMDAwMDAwMDAwMDA3ZmZlCisjZGVmaW5lIEJNXzAxXzE0IEJNXzE0XzAxCisjZGVmaW5lIEJNXzE1XzAxIDB4MDAwMDAwMDAwMDAwZmZmZQorI2RlZmluZSBCTV8wMV8xNSBCTV8xNV8wMQorI2RlZmluZSBCTV8xNl8wMSAweDAwMDAwMDAwMDAwMWZmZmUKKyNkZWZpbmUgQk1fMDFfMTYgQk1fMTZfMDEKKyNkZWZpbmUgQk1fMTdfMDEgMHgwMDAwMDAwMDAwMDNmZmZlCisjZGVmaW5lIEJNXzAxXzE3IEJNXzE3XzAxCisjZGVmaW5lIEJNXzE4XzAxIDB4MDAwMDAwMDAwMDA3ZmZmZQorI2RlZmluZSBCTV8wMV8xOCBCTV8xOF8wMQorI2RlZmluZSBCTV8xOV8wMSAweDAwMDAwMDAwMDAwZmZmZmUKKyNkZWZpbmUgQk1fMDFfMTkgQk1fMTlfMDEKKyNkZWZpbmUgQk1fMjBfMDEgMHgwMDAwMDAwMDAwMWZmZmZlCisjZGVmaW5lIEJNXzAxXzIwIEJNXzIwXzAxCisjZGVmaW5lIEJNXzIxXzAxIDB4MDAwMDAwMDAwMDNmZmZmZQorI2RlZmluZSBCTV8wMV8yMSBCTV8yMV8wMQorI2RlZmluZSBCTV8yMl8wMSAweDAwMDAwMDAwMDA3ZmZmZmUKKyNkZWZpbmUgQk1fMDFfMjIgQk1fMjJfMDEKKyNkZWZpbmUgQk1fMjNfMDEgMHgwMDAwMDAwMDAwZmZmZmZlCisjZGVmaW5lIEJNXzAxXzIzIEJNXzIzXzAxCisjZGVmaW5lIEJNXzI0XzAxIDB4MDAwMDAwMDAwMWZmZmZmZQorI2RlZmluZSBCTV8wMV8yNCBCTV8yNF8wMQorI2RlZmluZSBCTV8yNV8wMSAweDAwMDAwMDAwMDNmZmZmZmUKKyNkZWZpbmUgQk1fMDFfMjUgQk1fMjVfMDEKKyNkZWZpbmUgQk1fMjZfMDEgMHgwMDAwMDAwMDA3ZmZmZmZlCisjZGVmaW5lIEJNXzAxXzI2IEJNXzI2XzAxCisjZGVmaW5lIEJNXzI3XzAxIDB4MDAwMDAwMDAwZmZmZmZmZQorI2RlZmluZSBCTV8wMV8yNyBCTV8yN18wMQorI2RlZmluZSBCTV8yOF8wMSAweDAwMDAwMDAwMWZmZmZmZmUKKyNkZWZpbmUgQk1fMDFfMjggQk1fMjhfMDEKKyNkZWZpbmUgQk1fMjlfMDEgMHgwMDAwMDAwMDNmZmZmZmZlCisjZGVmaW5lIEJNXzAxXzI5IEJNXzI5XzAxCisjZGVmaW5lIEJNXzMwXzAxIDB4MDAwMDAwMDA3ZmZmZmZmZQorI2RlZmluZSBCTV8wMV8zMCBCTV8zMF8wMQorI2RlZmluZSBCTV8zMV8wMSAweDAwMDAwMDAwZmZmZmZmZmUKKyNkZWZpbmUgQk1fMDFfMzEgQk1fMzFfMDEKKyNkZWZpbmUgQk1fMzJfMDEgMHgwMDAwMDAwMWZmZmZmZmZlCisjZGVmaW5lIEJNXzAxXzMyIEJNXzMyXzAxCisjZGVmaW5lIEJNXzMzXzAxIDB4MDAwMDAwMDNmZmZmZmZmZQorI2RlZmluZSBCTV8wMV8zMyBCTV8zM18wMQorI2RlZmluZSBCTV8zNF8wMSAweDAwMDAwMDA3ZmZmZmZmZmUKKyNkZWZpbmUgQk1fMDFfMzQgQk1fMzRfMDEKKyNkZWZpbmUgQk1fMzVfMDEgMHgwMDAwMDAwZmZmZmZmZmZlCisjZGVmaW5lIEJNXzAxXzM1IEJNXzM1XzAxCisjZGVmaW5lIEJNXzM2XzAxIDB4MDAwMDAwMWZmZmZmZmZmZQorI2RlZmluZSBCTV8wMV8zNiBCTV8zNl8wMQorI2RlZmluZSBCTV8zN18wMSAweDAwMDAwMDNmZmZmZmZmZmUKKyNkZWZpbmUgQk1fMDFfMzcgQk1fMzdfMDEKKyNkZWZpbmUgQk1fMzhfMDEgMHgwMDAwMDA3ZmZmZmZmZmZlCisjZGVmaW5lIEJNXzAxXzM4IEJNXzM4XzAxCisjZGVmaW5lIEJNXzM5XzAxIDB4MDAwMDAwZmZmZmZmZmZmZQorI2RlZmluZSBCTV8wMV8zOSBCTV8zOV8wMQorI2RlZmluZSBCTV80MF8wMSAweDAwMDAwMWZmZmZmZmZmZmUKKyNkZWZpbmUgQk1fMDFfNDAgQk1fNDBfMDEKKyNkZWZpbmUgQk1fNDFfMDEgMHgwMDAwMDNmZmZmZmZmZmZlCisjZGVmaW5lIEJNXzAxXzQxIEJNXzQxXzAxCisjZGVmaW5lIEJNXzQyXzAxIDB4MDAwMDA3ZmZmZmZmZmZmZQorI2RlZmluZSBCTV8wMV80MiBCTV80Ml8wMQorI2RlZmluZSBCTV80M18wMSAweDAwMDAwZmZmZmZmZmZmZmUKKyNkZWZpbmUgQk1fMDFfNDMgQk1fNDNfMDEKKyNkZWZpbmUgQk1fNDRfMDEgMHgwMDAwMWZmZmZmZmZmZmZlCisjZGVmaW5lIEJNXzAxXzQ0IEJNXzQ0XzAxCisjZGVmaW5lIEJNXzQ1XzAxIDB4MDAwMDNmZmZmZmZmZmZmZQorI2RlZmluZSBCTV8wMV80NSBCTV80NV8wMQorI2RlZmluZSBCTV80Nl8wMSAweDAwMDA3ZmZmZmZmZmZmZmUKKyNkZWZpbmUgQk1fMDFfNDYgQk1fNDZfMDEKKyNkZWZpbmUgQk1fNDdfMDEgMHgwMDAwZmZmZmZmZmZmZmZlCisjZGVmaW5lIEJNXzAxXzQ3IEJNXzQ3XzAxCisjZGVmaW5lIEJNXzQ4XzAxIDB4MDAwMWZmZmZmZmZmZmZmZQorI2RlZmluZSBCTV8wMV80OCBCTV80OF8wMQorI2RlZmluZSBCTV80OV8wMSAweDAwMDNmZmZmZmZmZmZmZmUKKyNkZWZpbmUgQk1fMDFfNDkgQk1fNDlfMDEKKyNkZWZpbmUgQk1fNTBfMDEgMHgwMDA3ZmZmZmZmZmZmZmZlCisjZGVmaW5lIEJNXzAxXzUwIEJNXzUwXzAxCisjZGVmaW5lIEJNXzUxXzAxIDB4MDAwZmZmZmZmZmZmZmZmZQorI2RlZmluZSBCTV8wMV81MSBCTV81MV8wMQorI2RlZmluZSBCTV81Ml8wMSAweDAwMWZmZmZmZmZmZmZmZmUKKyNkZWZpbmUgQk1fMDFfNTIgQk1fNTJfMDEKKyNkZWZpbmUgQk1fNTNfMDEgMHgwMDNmZmZmZmZmZmZmZmZlCisjZGVmaW5lIEJNXzAxXzUzIEJNXzUzXzAxCisjZGVmaW5lIEJNXzU0XzAxIDB4MDA3ZmZmZmZmZmZmZmZmZQorI2RlZmluZSBCTV8wMV81NCBCTV81NF8wMQorI2RlZmluZSBCTV81NV8wMSAweDAwZmZmZmZmZmZmZmZmZmUKKyNkZWZpbmUgQk1fMDFfNTUgQk1fNTVfMDEKKyNkZWZpbmUgQk1fNTZfMDEgMHgwMWZmZmZmZmZmZmZmZmZlCisjZGVmaW5lIEJNXzAxXzU2IEJNXzU2XzAxCisjZGVmaW5lIEJNXzU3XzAxIDB4MDNmZmZmZmZmZmZmZmZmZQorI2RlZmluZSBCTV8wMV81NyBCTV81N18wMQorI2RlZmluZSBCTV81OF8wMSAweDA3ZmZmZmZmZmZmZmZmZmUKKyNkZWZpbmUgQk1fMDFfNTggQk1fNThfMDEKKyNkZWZpbmUgQk1fNTlfMDEgMHgwZmZmZmZmZmZmZmZmZmZlCisjZGVmaW5lIEJNXzAxXzU5IEJNXzU5XzAxCisjZGVmaW5lIEJNXzYwXzAxIDB4MWZmZmZmZmZmZmZmZmZmZQorI2RlZmluZSBCTV8wMV82MCBCTV82MF8wMQorI2RlZmluZSBCTV82MV8wMSAweDNmZmZmZmZmZmZmZmZmZmUKKyNkZWZpbmUgQk1fMDFfNjEgQk1fNjFfMDEKKyNkZWZpbmUgQk1fNjJfMDEgMHg3ZmZmZmZmZmZmZmZmZmZlCisjZGVmaW5lIEJNXzAxXzYyIEJNXzYyXzAxCisjZGVmaW5lIEJNXzYzXzAxIDB4ZmZmZmZmZmZmZmZmZmZmZQorI2RlZmluZSBCTV8wMV82MyBCTV82M18wMQorI2RlZmluZSBCTV8wMl8wMiAweDAwMDAwMDAwMDAwMDAwMDQKKyNkZWZpbmUgQk1fMDNfMDIgMHgwMDAwMDAwMDAwMDAwMDBjCisjZGVmaW5lIEJNXzAyXzAzIEJNXzAzXzAyCisjZGVmaW5lIEJNXzA0XzAyIDB4MDAwMDAwMDAwMDAwMDAxYworI2RlZmluZSBCTV8wMl8wNCBCTV8wNF8wMgorI2RlZmluZSBCTV8wNV8wMiAweDAwMDAwMDAwMDAwMDAwM2MKKyNkZWZpbmUgQk1fMDJfMDUgQk1fMDVfMDIKKyNkZWZpbmUgQk1fMDZfMDIgMHgwMDAwMDAwMDAwMDAwMDdjCisjZGVmaW5lIEJNXzAyXzA2IEJNXzA2XzAyCisjZGVmaW5lIEJNXzA3XzAyIDB4MDAwMDAwMDAwMDAwMDBmYworI2RlZmluZSBCTV8wMl8wNyBCTV8wN18wMgorI2RlZmluZSBCTV8wOF8wMiAweDAwMDAwMDAwMDAwMDAxZmMKKyNkZWZpbmUgQk1fMDJfMDggQk1fMDhfMDIKKyNkZWZpbmUgQk1fMDlfMDIgMHgwMDAwMDAwMDAwMDAwM2ZjCisjZGVmaW5lIEJNXzAyXzA5IEJNXzA5XzAyCisjZGVmaW5lIEJNXzEwXzAyIDB4MDAwMDAwMDAwMDAwMDdmYworI2RlZmluZSBCTV8wMl8xMCBCTV8xMF8wMgorI2RlZmluZSBCTV8xMV8wMiAweDAwMDAwMDAwMDAwMDBmZmMKKyNkZWZpbmUgQk1fMDJfMTEgQk1fMTFfMDIKKyNkZWZpbmUgQk1fMTJfMDIgMHgwMDAwMDAwMDAwMDAxZmZjCisjZGVmaW5lIEJNXzAyXzEyIEJNXzEyXzAyCisjZGVmaW5lIEJNXzEzXzAyIDB4MDAwMDAwMDAwMDAwM2ZmYworI2RlZmluZSBCTV8wMl8xMyBCTV8xM18wMgorI2RlZmluZSBCTV8xNF8wMiAweDAwMDAwMDAwMDAwMDdmZmMKKyNkZWZpbmUgQk1fMDJfMTQgQk1fMTRfMDIKKyNkZWZpbmUgQk1fMTVfMDIgMHgwMDAwMDAwMDAwMDBmZmZjCisjZGVmaW5lIEJNXzAyXzE1IEJNXzE1XzAyCisjZGVmaW5lIEJNXzE2XzAyIDB4MDAwMDAwMDAwMDAxZmZmYworI2RlZmluZSBCTV8wMl8xNiBCTV8xNl8wMgorI2RlZmluZSBCTV8xN18wMiAweDAwMDAwMDAwMDAwM2ZmZmMKKyNkZWZpbmUgQk1fMDJfMTcgQk1fMTdfMDIKKyNkZWZpbmUgQk1fMThfMDIgMHgwMDAwMDAwMDAwMDdmZmZjCisjZGVmaW5lIEJNXzAyXzE4IEJNXzE4XzAyCisjZGVmaW5lIEJNXzE5XzAyIDB4MDAwMDAwMDAwMDBmZmZmYworI2RlZmluZSBCTV8wMl8xOSBCTV8xOV8wMgorI2RlZmluZSBCTV8yMF8wMiAweDAwMDAwMDAwMDAxZmZmZmMKKyNkZWZpbmUgQk1fMDJfMjAgQk1fMjBfMDIKKyNkZWZpbmUgQk1fMjFfMDIgMHgwMDAwMDAwMDAwM2ZmZmZjCisjZGVmaW5lIEJNXzAyXzIxIEJNXzIxXzAyCisjZGVmaW5lIEJNXzIyXzAyIDB4MDAwMDAwMDAwMDdmZmZmYworI2RlZmluZSBCTV8wMl8yMiBCTV8yMl8wMgorI2RlZmluZSBCTV8yM18wMiAweDAwMDAwMDAwMDBmZmZmZmMKKyNkZWZpbmUgQk1fMDJfMjMgQk1fMjNfMDIKKyNkZWZpbmUgQk1fMjRfMDIgMHgwMDAwMDAwMDAxZmZmZmZjCisjZGVmaW5lIEJNXzAyXzI0IEJNXzI0XzAyCisjZGVmaW5lIEJNXzI1XzAyIDB4MDAwMDAwMDAwM2ZmZmZmYworI2RlZmluZSBCTV8wMl8yNSBCTV8yNV8wMgorI2RlZmluZSBCTV8yNl8wMiAweDAwMDAwMDAwMDdmZmZmZmMKKyNkZWZpbmUgQk1fMDJfMjYgQk1fMjZfMDIKKyNkZWZpbmUgQk1fMjdfMDIgMHgwMDAwMDAwMDBmZmZmZmZjCisjZGVmaW5lIEJNXzAyXzI3IEJNXzI3XzAyCisjZGVmaW5lIEJNXzI4XzAyIDB4MDAwMDAwMDAxZmZmZmZmYworI2RlZmluZSBCTV8wMl8yOCBCTV8yOF8wMgorI2RlZmluZSBCTV8yOV8wMiAweDAwMDAwMDAwM2ZmZmZmZmMKKyNkZWZpbmUgQk1fMDJfMjkgQk1fMjlfMDIKKyNkZWZpbmUgQk1fMzBfMDIgMHgwMDAwMDAwMDdmZmZmZmZjCisjZGVmaW5lIEJNXzAyXzMwIEJNXzMwXzAyCisjZGVmaW5lIEJNXzMxXzAyIDB4MDAwMDAwMDBmZmZmZmZmYworI2RlZmluZSBCTV8wMl8zMSBCTV8zMV8wMgorI2RlZmluZSBCTV8zMl8wMiAweDAwMDAwMDAxZmZmZmZmZmMKKyNkZWZpbmUgQk1fMDJfMzIgQk1fMzJfMDIKKyNkZWZpbmUgQk1fMzNfMDIgMHgwMDAwMDAwM2ZmZmZmZmZjCisjZGVmaW5lIEJNXzAyXzMzIEJNXzMzXzAyCisjZGVmaW5lIEJNXzM0XzAyIDB4MDAwMDAwMDdmZmZmZmZmYworI2RlZmluZSBCTV8wMl8zNCBCTV8zNF8wMgorI2RlZmluZSBCTV8zNV8wMiAweDAwMDAwMDBmZmZmZmZmZmMKKyNkZWZpbmUgQk1fMDJfMzUgQk1fMzVfMDIKKyNkZWZpbmUgQk1fMzZfMDIgMHgwMDAwMDAxZmZmZmZmZmZjCisjZGVmaW5lIEJNXzAyXzM2IEJNXzM2XzAyCisjZGVmaW5lIEJNXzM3XzAyIDB4MDAwMDAwM2ZmZmZmZmZmYworI2RlZmluZSBCTV8wMl8zNyBCTV8zN18wMgorI2RlZmluZSBCTV8zOF8wMiAweDAwMDAwMDdmZmZmZmZmZmMKKyNkZWZpbmUgQk1fMDJfMzggQk1fMzhfMDIKKyNkZWZpbmUgQk1fMzlfMDIgMHgwMDAwMDBmZmZmZmZmZmZjCisjZGVmaW5lIEJNXzAyXzM5IEJNXzM5XzAyCisjZGVmaW5lIEJNXzQwXzAyIDB4MDAwMDAxZmZmZmZmZmZmYworI2RlZmluZSBCTV8wMl80MCBCTV80MF8wMgorI2RlZmluZSBCTV80MV8wMiAweDAwMDAwM2ZmZmZmZmZmZmMKKyNkZWZpbmUgQk1fMDJfNDEgQk1fNDFfMDIKKyNkZWZpbmUgQk1fNDJfMDIgMHgwMDAwMDdmZmZmZmZmZmZjCisjZGVmaW5lIEJNXzAyXzQyIEJNXzQyXzAyCisjZGVmaW5lIEJNXzQzXzAyIDB4MDAwMDBmZmZmZmZmZmZmYworI2RlZmluZSBCTV8wMl80MyBCTV80M18wMgorI2RlZmluZSBCTV80NF8wMiAweDAwMDAxZmZmZmZmZmZmZmMKKyNkZWZpbmUgQk1fMDJfNDQgQk1fNDRfMDIKKyNkZWZpbmUgQk1fNDVfMDIgMHgwMDAwM2ZmZmZmZmZmZmZjCisjZGVmaW5lIEJNXzAyXzQ1IEJNXzQ1XzAyCisjZGVmaW5lIEJNXzQ2XzAyIDB4MDAwMDdmZmZmZmZmZmZmYworI2RlZmluZSBCTV8wMl80NiBCTV80Nl8wMgorI2RlZmluZSBCTV80N18wMiAweDAwMDBmZmZmZmZmZmZmZmMKKyNkZWZpbmUgQk1fMDJfNDcgQk1fNDdfMDIKKyNkZWZpbmUgQk1fNDhfMDIgMHgwMDAxZmZmZmZmZmZmZmZjCisjZGVmaW5lIEJNXzAyXzQ4IEJNXzQ4XzAyCisjZGVmaW5lIEJNXzQ5XzAyIDB4MDAwM2ZmZmZmZmZmZmZmYworI2RlZmluZSBCTV8wMl80OSBCTV80OV8wMgorI2RlZmluZSBCTV81MF8wMiAweDAwMDdmZmZmZmZmZmZmZmMKKyNkZWZpbmUgQk1fMDJfNTAgQk1fNTBfMDIKKyNkZWZpbmUgQk1fNTFfMDIgMHgwMDBmZmZmZmZmZmZmZmZjCisjZGVmaW5lIEJNXzAyXzUxIEJNXzUxXzAyCisjZGVmaW5lIEJNXzUyXzAyIDB4MDAxZmZmZmZmZmZmZmZmYworI2RlZmluZSBCTV8wMl81MiBCTV81Ml8wMgorI2RlZmluZSBCTV81M18wMiAweDAwM2ZmZmZmZmZmZmZmZmMKKyNkZWZpbmUgQk1fMDJfNTMgQk1fNTNfMDIKKyNkZWZpbmUgQk1fNTRfMDIgMHgwMDdmZmZmZmZmZmZmZmZjCisjZGVmaW5lIEJNXzAyXzU0IEJNXzU0XzAyCisjZGVmaW5lIEJNXzU1XzAyIDB4MDBmZmZmZmZmZmZmZmZmYworI2RlZmluZSBCTV8wMl81NSBCTV81NV8wMgorI2RlZmluZSBCTV81Nl8wMiAweDAxZmZmZmZmZmZmZmZmZmMKKyNkZWZpbmUgQk1fMDJfNTYgQk1fNTZfMDIKKyNkZWZpbmUgQk1fNTdfMDIgMHgwM2ZmZmZmZmZmZmZmZmZjCisjZGVmaW5lIEJNXzAyXzU3IEJNXzU3XzAyCisjZGVmaW5lIEJNXzU4XzAyIDB4MDdmZmZmZmZmZmZmZmZmYworI2RlZmluZSBCTV8wMl81OCBCTV81OF8wMgorI2RlZmluZSBCTV81OV8wMiAweDBmZmZmZmZmZmZmZmZmZmMKKyNkZWZpbmUgQk1fMDJfNTkgQk1fNTlfMDIKKyNkZWZpbmUgQk1fNjBfMDIgMHgxZmZmZmZmZmZmZmZmZmZjCisjZGVmaW5lIEJNXzAyXzYwIEJNXzYwXzAyCisjZGVmaW5lIEJNXzYxXzAyIDB4M2ZmZmZmZmZmZmZmZmZmYworI2RlZmluZSBCTV8wMl82MSBCTV82MV8wMgorI2RlZmluZSBCTV82Ml8wMiAweDdmZmZmZmZmZmZmZmZmZmMKKyNkZWZpbmUgQk1fMDJfNjIgQk1fNjJfMDIKKyNkZWZpbmUgQk1fNjNfMDIgMHhmZmZmZmZmZmZmZmZmZmZjCisjZGVmaW5lIEJNXzAyXzYzIEJNXzYzXzAyCisjZGVmaW5lIEJNXzAzXzAzIDB4MDAwMDAwMDAwMDAwMDAwOAorI2RlZmluZSBCTV8wNF8wMyAweDAwMDAwMDAwMDAwMDAwMTgKKyNkZWZpbmUgQk1fMDNfMDQgQk1fMDRfMDMKKyNkZWZpbmUgQk1fMDVfMDMgMHgwMDAwMDAwMDAwMDAwMDM4CisjZGVmaW5lIEJNXzAzXzA1IEJNXzA1XzAzCisjZGVmaW5lIEJNXzA2XzAzIDB4MDAwMDAwMDAwMDAwMDA3OAorI2RlZmluZSBCTV8wM18wNiBCTV8wNl8wMworI2RlZmluZSBCTV8wN18wMyAweDAwMDAwMDAwMDAwMDAwZjgKKyNkZWZpbmUgQk1fMDNfMDcgQk1fMDdfMDMKKyNkZWZpbmUgQk1fMDhfMDMgMHgwMDAwMDAwMDAwMDAwMWY4CisjZGVmaW5lIEJNXzAzXzA4IEJNXzA4XzAzCisjZGVmaW5lIEJNXzA5XzAzIDB4MDAwMDAwMDAwMDAwMDNmOAorI2RlZmluZSBCTV8wM18wOSBCTV8wOV8wMworI2RlZmluZSBCTV8xMF8wMyAweDAwMDAwMDAwMDAwMDA3ZjgKKyNkZWZpbmUgQk1fMDNfMTAgQk1fMTBfMDMKKyNkZWZpbmUgQk1fMTFfMDMgMHgwMDAwMDAwMDAwMDAwZmY4CisjZGVmaW5lIEJNXzAzXzExIEJNXzExXzAzCisjZGVmaW5lIEJNXzEyXzAzIDB4MDAwMDAwMDAwMDAwMWZmOAorI2RlZmluZSBCTV8wM18xMiBCTV8xMl8wMworI2RlZmluZSBCTV8xM18wMyAweDAwMDAwMDAwMDAwMDNmZjgKKyNkZWZpbmUgQk1fMDNfMTMgQk1fMTNfMDMKKyNkZWZpbmUgQk1fMTRfMDMgMHgwMDAwMDAwMDAwMDA3ZmY4CisjZGVmaW5lIEJNXzAzXzE0IEJNXzE0XzAzCisjZGVmaW5lIEJNXzE1XzAzIDB4MDAwMDAwMDAwMDAwZmZmOAorI2RlZmluZSBCTV8wM18xNSBCTV8xNV8wMworI2RlZmluZSBCTV8xNl8wMyAweDAwMDAwMDAwMDAwMWZmZjgKKyNkZWZpbmUgQk1fMDNfMTYgQk1fMTZfMDMKKyNkZWZpbmUgQk1fMTdfMDMgMHgwMDAwMDAwMDAwMDNmZmY4CisjZGVmaW5lIEJNXzAzXzE3IEJNXzE3XzAzCisjZGVmaW5lIEJNXzE4XzAzIDB4MDAwMDAwMDAwMDA3ZmZmOAorI2RlZmluZSBCTV8wM18xOCBCTV8xOF8wMworI2RlZmluZSBCTV8xOV8wMyAweDAwMDAwMDAwMDAwZmZmZjgKKyNkZWZpbmUgQk1fMDNfMTkgQk1fMTlfMDMKKyNkZWZpbmUgQk1fMjBfMDMgMHgwMDAwMDAwMDAwMWZmZmY4CisjZGVmaW5lIEJNXzAzXzIwIEJNXzIwXzAzCisjZGVmaW5lIEJNXzIxXzAzIDB4MDAwMDAwMDAwMDNmZmZmOAorI2RlZmluZSBCTV8wM18yMSBCTV8yMV8wMworI2RlZmluZSBCTV8yMl8wMyAweDAwMDAwMDAwMDA3ZmZmZjgKKyNkZWZpbmUgQk1fMDNfMjIgQk1fMjJfMDMKKyNkZWZpbmUgQk1fMjNfMDMgMHgwMDAwMDAwMDAwZmZmZmY4CisjZGVmaW5lIEJNXzAzXzIzIEJNXzIzXzAzCisjZGVmaW5lIEJNXzI0XzAzIDB4MDAwMDAwMDAwMWZmZmZmOAorI2RlZmluZSBCTV8wM18yNCBCTV8yNF8wMworI2RlZmluZSBCTV8yNV8wMyAweDAwMDAwMDAwMDNmZmZmZjgKKyNkZWZpbmUgQk1fMDNfMjUgQk1fMjVfMDMKKyNkZWZpbmUgQk1fMjZfMDMgMHgwMDAwMDAwMDA3ZmZmZmY4CisjZGVmaW5lIEJNXzAzXzI2IEJNXzI2XzAzCisjZGVmaW5lIEJNXzI3XzAzIDB4MDAwMDAwMDAwZmZmZmZmOAorI2RlZmluZSBCTV8wM18yNyBCTV8yN18wMworI2RlZmluZSBCTV8yOF8wMyAweDAwMDAwMDAwMWZmZmZmZjgKKyNkZWZpbmUgQk1fMDNfMjggQk1fMjhfMDMKKyNkZWZpbmUgQk1fMjlfMDMgMHgwMDAwMDAwMDNmZmZmZmY4CisjZGVmaW5lIEJNXzAzXzI5IEJNXzI5XzAzCisjZGVmaW5lIEJNXzMwXzAzIDB4MDAwMDAwMDA3ZmZmZmZmOAorI2RlZmluZSBCTV8wM18zMCBCTV8zMF8wMworI2RlZmluZSBCTV8zMV8wMyAweDAwMDAwMDAwZmZmZmZmZjgKKyNkZWZpbmUgQk1fMDNfMzEgQk1fMzFfMDMKKyNkZWZpbmUgQk1fMzJfMDMgMHgwMDAwMDAwMWZmZmZmZmY4CisjZGVmaW5lIEJNXzAzXzMyIEJNXzMyXzAzCisjZGVmaW5lIEJNXzMzXzAzIDB4MDAwMDAwMDNmZmZmZmZmOAorI2RlZmluZSBCTV8wM18zMyBCTV8zM18wMworI2RlZmluZSBCTV8zNF8wMyAweDAwMDAwMDA3ZmZmZmZmZjgKKyNkZWZpbmUgQk1fMDNfMzQgQk1fMzRfMDMKKyNkZWZpbmUgQk1fMzVfMDMgMHgwMDAwMDAwZmZmZmZmZmY4CisjZGVmaW5lIEJNXzAzXzM1IEJNXzM1XzAzCisjZGVmaW5lIEJNXzM2XzAzIDB4MDAwMDAwMWZmZmZmZmZmOAorI2RlZmluZSBCTV8wM18zNiBCTV8zNl8wMworI2RlZmluZSBCTV8zN18wMyAweDAwMDAwMDNmZmZmZmZmZjgKKyNkZWZpbmUgQk1fMDNfMzcgQk1fMzdfMDMKKyNkZWZpbmUgQk1fMzhfMDMgMHgwMDAwMDA3ZmZmZmZmZmY4CisjZGVmaW5lIEJNXzAzXzM4IEJNXzM4XzAzCisjZGVmaW5lIEJNXzM5XzAzIDB4MDAwMDAwZmZmZmZmZmZmOAorI2RlZmluZSBCTV8wM18zOSBCTV8zOV8wMworI2RlZmluZSBCTV80MF8wMyAweDAwMDAwMWZmZmZmZmZmZjgKKyNkZWZpbmUgQk1fMDNfNDAgQk1fNDBfMDMKKyNkZWZpbmUgQk1fNDFfMDMgMHgwMDAwMDNmZmZmZmZmZmY4CisjZGVmaW5lIEJNXzAzXzQxIEJNXzQxXzAzCisjZGVmaW5lIEJNXzQyXzAzIDB4MDAwMDA3ZmZmZmZmZmZmOAorI2RlZmluZSBCTV8wM180MiBCTV80Ml8wMworI2RlZmluZSBCTV80M18wMyAweDAwMDAwZmZmZmZmZmZmZjgKKyNkZWZpbmUgQk1fMDNfNDMgQk1fNDNfMDMKKyNkZWZpbmUgQk1fNDRfMDMgMHgwMDAwMWZmZmZmZmZmZmY4CisjZGVmaW5lIEJNXzAzXzQ0IEJNXzQ0XzAzCisjZGVmaW5lIEJNXzQ1XzAzIDB4MDAwMDNmZmZmZmZmZmZmOAorI2RlZmluZSBCTV8wM180NSBCTV80NV8wMworI2RlZmluZSBCTV80Nl8wMyAweDAwMDA3ZmZmZmZmZmZmZjgKKyNkZWZpbmUgQk1fMDNfNDYgQk1fNDZfMDMKKyNkZWZpbmUgQk1fNDdfMDMgMHgwMDAwZmZmZmZmZmZmZmY4CisjZGVmaW5lIEJNXzAzXzQ3IEJNXzQ3XzAzCisjZGVmaW5lIEJNXzQ4XzAzIDB4MDAwMWZmZmZmZmZmZmZmOAorI2RlZmluZSBCTV8wM180OCBCTV80OF8wMworI2RlZmluZSBCTV80OV8wMyAweDAwMDNmZmZmZmZmZmZmZjgKKyNkZWZpbmUgQk1fMDNfNDkgQk1fNDlfMDMKKyNkZWZpbmUgQk1fNTBfMDMgMHgwMDA3ZmZmZmZmZmZmZmY4CisjZGVmaW5lIEJNXzAzXzUwIEJNXzUwXzAzCisjZGVmaW5lIEJNXzUxXzAzIDB4MDAwZmZmZmZmZmZmZmZmOAorI2RlZmluZSBCTV8wM181MSBCTV81MV8wMworI2RlZmluZSBCTV81Ml8wMyAweDAwMWZmZmZmZmZmZmZmZjgKKyNkZWZpbmUgQk1fMDNfNTIgQk1fNTJfMDMKKyNkZWZpbmUgQk1fNTNfMDMgMHgwMDNmZmZmZmZmZmZmZmY4CisjZGVmaW5lIEJNXzAzXzUzIEJNXzUzXzAzCisjZGVmaW5lIEJNXzU0XzAzIDB4MDA3ZmZmZmZmZmZmZmZmOAorI2RlZmluZSBCTV8wM181NCBCTV81NF8wMworI2RlZmluZSBCTV81NV8wMyAweDAwZmZmZmZmZmZmZmZmZjgKKyNkZWZpbmUgQk1fMDNfNTUgQk1fNTVfMDMKKyNkZWZpbmUgQk1fNTZfMDMgMHgwMWZmZmZmZmZmZmZmZmY4CisjZGVmaW5lIEJNXzAzXzU2IEJNXzU2XzAzCisjZGVmaW5lIEJNXzU3XzAzIDB4MDNmZmZmZmZmZmZmZmZmOAorI2RlZmluZSBCTV8wM181NyBCTV81N18wMworI2RlZmluZSBCTV81OF8wMyAweDA3ZmZmZmZmZmZmZmZmZjgKKyNkZWZpbmUgQk1fMDNfNTggQk1fNThfMDMKKyNkZWZpbmUgQk1fNTlfMDMgMHgwZmZmZmZmZmZmZmZmZmY4CisjZGVmaW5lIEJNXzAzXzU5IEJNXzU5XzAzCisjZGVmaW5lIEJNXzYwXzAzIDB4MWZmZmZmZmZmZmZmZmZmOAorI2RlZmluZSBCTV8wM182MCBCTV82MF8wMworI2RlZmluZSBCTV82MV8wMyAweDNmZmZmZmZmZmZmZmZmZjgKKyNkZWZpbmUgQk1fMDNfNjEgQk1fNjFfMDMKKyNkZWZpbmUgQk1fNjJfMDMgMHg3ZmZmZmZmZmZmZmZmZmY4CisjZGVmaW5lIEJNXzAzXzYyIEJNXzYyXzAzCisjZGVmaW5lIEJNXzYzXzAzIDB4ZmZmZmZmZmZmZmZmZmZmOAorI2RlZmluZSBCTV8wM182MyBCTV82M18wMworI2RlZmluZSBCTV8wNF8wNCAweDAwMDAwMDAwMDAwMDAwMTAKKyNkZWZpbmUgQk1fMDVfMDQgMHgwMDAwMDAwMDAwMDAwMDMwCisjZGVmaW5lIEJNXzA0XzA1IEJNXzA1XzA0CisjZGVmaW5lIEJNXzA2XzA0IDB4MDAwMDAwMDAwMDAwMDA3MAorI2RlZmluZSBCTV8wNF8wNiBCTV8wNl8wNAorI2RlZmluZSBCTV8wN18wNCAweDAwMDAwMDAwMDAwMDAwZjAKKyNkZWZpbmUgQk1fMDRfMDcgQk1fMDdfMDQKKyNkZWZpbmUgQk1fMDhfMDQgMHgwMDAwMDAwMDAwMDAwMWYwCisjZGVmaW5lIEJNXzA0XzA4IEJNXzA4XzA0CisjZGVmaW5lIEJNXzA5XzA0IDB4MDAwMDAwMDAwMDAwMDNmMAorI2RlZmluZSBCTV8wNF8wOSBCTV8wOV8wNAorI2RlZmluZSBCTV8xMF8wNCAweDAwMDAwMDAwMDAwMDA3ZjAKKyNkZWZpbmUgQk1fMDRfMTAgQk1fMTBfMDQKKyNkZWZpbmUgQk1fMTFfMDQgMHgwMDAwMDAwMDAwMDAwZmYwCisjZGVmaW5lIEJNXzA0XzExIEJNXzExXzA0CisjZGVmaW5lIEJNXzEyXzA0IDB4MDAwMDAwMDAwMDAwMWZmMAorI2RlZmluZSBCTV8wNF8xMiBCTV8xMl8wNAorI2RlZmluZSBCTV8xM18wNCAweDAwMDAwMDAwMDAwMDNmZjAKKyNkZWZpbmUgQk1fMDRfMTMgQk1fMTNfMDQKKyNkZWZpbmUgQk1fMTRfMDQgMHgwMDAwMDAwMDAwMDA3ZmYwCisjZGVmaW5lIEJNXzA0XzE0IEJNXzE0XzA0CisjZGVmaW5lIEJNXzE1XzA0IDB4MDAwMDAwMDAwMDAwZmZmMAorI2RlZmluZSBCTV8wNF8xNSBCTV8xNV8wNAorI2RlZmluZSBCTV8xNl8wNCAweDAwMDAwMDAwMDAwMWZmZjAKKyNkZWZpbmUgQk1fMDRfMTYgQk1fMTZfMDQKKyNkZWZpbmUgQk1fMTdfMDQgMHgwMDAwMDAwMDAwMDNmZmYwCisjZGVmaW5lIEJNXzA0XzE3IEJNXzE3XzA0CisjZGVmaW5lIEJNXzE4XzA0IDB4MDAwMDAwMDAwMDA3ZmZmMAorI2RlZmluZSBCTV8wNF8xOCBCTV8xOF8wNAorI2RlZmluZSBCTV8xOV8wNCAweDAwMDAwMDAwMDAwZmZmZjAKKyNkZWZpbmUgQk1fMDRfMTkgQk1fMTlfMDQKKyNkZWZpbmUgQk1fMjBfMDQgMHgwMDAwMDAwMDAwMWZmZmYwCisjZGVmaW5lIEJNXzA0XzIwIEJNXzIwXzA0CisjZGVmaW5lIEJNXzIxXzA0IDB4MDAwMDAwMDAwMDNmZmZmMAorI2RlZmluZSBCTV8wNF8yMSBCTV8yMV8wNAorI2RlZmluZSBCTV8yMl8wNCAweDAwMDAwMDAwMDA3ZmZmZjAKKyNkZWZpbmUgQk1fMDRfMjIgQk1fMjJfMDQKKyNkZWZpbmUgQk1fMjNfMDQgMHgwMDAwMDAwMDAwZmZmZmYwCisjZGVmaW5lIEJNXzA0XzIzIEJNXzIzXzA0CisjZGVmaW5lIEJNXzI0XzA0IDB4MDAwMDAwMDAwMWZmZmZmMAorI2RlZmluZSBCTV8wNF8yNCBCTV8yNF8wNAorI2RlZmluZSBCTV8yNV8wNCAweDAwMDAwMDAwMDNmZmZmZjAKKyNkZWZpbmUgQk1fMDRfMjUgQk1fMjVfMDQKKyNkZWZpbmUgQk1fMjZfMDQgMHgwMDAwMDAwMDA3ZmZmZmYwCisjZGVmaW5lIEJNXzA0XzI2IEJNXzI2XzA0CisjZGVmaW5lIEJNXzI3XzA0IDB4MDAwMDAwMDAwZmZmZmZmMAorI2RlZmluZSBCTV8wNF8yNyBCTV8yN18wNAorI2RlZmluZSBCTV8yOF8wNCAweDAwMDAwMDAwMWZmZmZmZjAKKyNkZWZpbmUgQk1fMDRfMjggQk1fMjhfMDQKKyNkZWZpbmUgQk1fMjlfMDQgMHgwMDAwMDAwMDNmZmZmZmYwCisjZGVmaW5lIEJNXzA0XzI5IEJNXzI5XzA0CisjZGVmaW5lIEJNXzMwXzA0IDB4MDAwMDAwMDA3ZmZmZmZmMAorI2RlZmluZSBCTV8wNF8zMCBCTV8zMF8wNAorI2RlZmluZSBCTV8zMV8wNCAweDAwMDAwMDAwZmZmZmZmZjAKKyNkZWZpbmUgQk1fMDRfMzEgQk1fMzFfMDQKKyNkZWZpbmUgQk1fMzJfMDQgMHgwMDAwMDAwMWZmZmZmZmYwCisjZGVmaW5lIEJNXzA0XzMyIEJNXzMyXzA0CisjZGVmaW5lIEJNXzMzXzA0IDB4MDAwMDAwMDNmZmZmZmZmMAorI2RlZmluZSBCTV8wNF8zMyBCTV8zM18wNAorI2RlZmluZSBCTV8zNF8wNCAweDAwMDAwMDA3ZmZmZmZmZjAKKyNkZWZpbmUgQk1fMDRfMzQgQk1fMzRfMDQKKyNkZWZpbmUgQk1fMzVfMDQgMHgwMDAwMDAwZmZmZmZmZmYwCisjZGVmaW5lIEJNXzA0XzM1IEJNXzM1XzA0CisjZGVmaW5lIEJNXzM2XzA0IDB4MDAwMDAwMWZmZmZmZmZmMAorI2RlZmluZSBCTV8wNF8zNiBCTV8zNl8wNAorI2RlZmluZSBCTV8zN18wNCAweDAwMDAwMDNmZmZmZmZmZjAKKyNkZWZpbmUgQk1fMDRfMzcgQk1fMzdfMDQKKyNkZWZpbmUgQk1fMzhfMDQgMHgwMDAwMDA3ZmZmZmZmZmYwCisjZGVmaW5lIEJNXzA0XzM4IEJNXzM4XzA0CisjZGVmaW5lIEJNXzM5XzA0IDB4MDAwMDAwZmZmZmZmZmZmMAorI2RlZmluZSBCTV8wNF8zOSBCTV8zOV8wNAorI2RlZmluZSBCTV80MF8wNCAweDAwMDAwMWZmZmZmZmZmZjAKKyNkZWZpbmUgQk1fMDRfNDAgQk1fNDBfMDQKKyNkZWZpbmUgQk1fNDFfMDQgMHgwMDAwMDNmZmZmZmZmZmYwCisjZGVmaW5lIEJNXzA0XzQxIEJNXzQxXzA0CisjZGVmaW5lIEJNXzQyXzA0IDB4MDAwMDA3ZmZmZmZmZmZmMAorI2RlZmluZSBCTV8wNF80MiBCTV80Ml8wNAorI2RlZmluZSBCTV80M18wNCAweDAwMDAwZmZmZmZmZmZmZjAKKyNkZWZpbmUgQk1fMDRfNDMgQk1fNDNfMDQKKyNkZWZpbmUgQk1fNDRfMDQgMHgwMDAwMWZmZmZmZmZmZmYwCisjZGVmaW5lIEJNXzA0XzQ0IEJNXzQ0XzA0CisjZGVmaW5lIEJNXzQ1XzA0IDB4MDAwMDNmZmZmZmZmZmZmMAorI2RlZmluZSBCTV8wNF80NSBCTV80NV8wNAorI2RlZmluZSBCTV80Nl8wNCAweDAwMDA3ZmZmZmZmZmZmZjAKKyNkZWZpbmUgQk1fMDRfNDYgQk1fNDZfMDQKKyNkZWZpbmUgQk1fNDdfMDQgMHgwMDAwZmZmZmZmZmZmZmYwCisjZGVmaW5lIEJNXzA0XzQ3IEJNXzQ3XzA0CisjZGVmaW5lIEJNXzQ4XzA0IDB4MDAwMWZmZmZmZmZmZmZmMAorI2RlZmluZSBCTV8wNF80OCBCTV80OF8wNAorI2RlZmluZSBCTV80OV8wNCAweDAwMDNmZmZmZmZmZmZmZjAKKyNkZWZpbmUgQk1fMDRfNDkgQk1fNDlfMDQKKyNkZWZpbmUgQk1fNTBfMDQgMHgwMDA3ZmZmZmZmZmZmZmYwCisjZGVmaW5lIEJNXzA0XzUwIEJNXzUwXzA0CisjZGVmaW5lIEJNXzUxXzA0IDB4MDAwZmZmZmZmZmZmZmZmMAorI2RlZmluZSBCTV8wNF81MSBCTV81MV8wNAorI2RlZmluZSBCTV81Ml8wNCAweDAwMWZmZmZmZmZmZmZmZjAKKyNkZWZpbmUgQk1fMDRfNTIgQk1fNTJfMDQKKyNkZWZpbmUgQk1fNTNfMDQgMHgwMDNmZmZmZmZmZmZmZmYwCisjZGVmaW5lIEJNXzA0XzUzIEJNXzUzXzA0CisjZGVmaW5lIEJNXzU0XzA0IDB4MDA3ZmZmZmZmZmZmZmZmMAorI2RlZmluZSBCTV8wNF81NCBCTV81NF8wNAorI2RlZmluZSBCTV81NV8wNCAweDAwZmZmZmZmZmZmZmZmZjAKKyNkZWZpbmUgQk1fMDRfNTUgQk1fNTVfMDQKKyNkZWZpbmUgQk1fNTZfMDQgMHgwMWZmZmZmZmZmZmZmZmYwCisjZGVmaW5lIEJNXzA0XzU2IEJNXzU2XzA0CisjZGVmaW5lIEJNXzU3XzA0IDB4MDNmZmZmZmZmZmZmZmZmMAorI2RlZmluZSBCTV8wNF81NyBCTV81N18wNAorI2RlZmluZSBCTV81OF8wNCAweDA3ZmZmZmZmZmZmZmZmZjAKKyNkZWZpbmUgQk1fMDRfNTggQk1fNThfMDQKKyNkZWZpbmUgQk1fNTlfMDQgMHgwZmZmZmZmZmZmZmZmZmYwCisjZGVmaW5lIEJNXzA0XzU5IEJNXzU5XzA0CisjZGVmaW5lIEJNXzYwXzA0IDB4MWZmZmZmZmZmZmZmZmZmMAorI2RlZmluZSBCTV8wNF82MCBCTV82MF8wNAorI2RlZmluZSBCTV82MV8wNCAweDNmZmZmZmZmZmZmZmZmZjAKKyNkZWZpbmUgQk1fMDRfNjEgQk1fNjFfMDQKKyNkZWZpbmUgQk1fNjJfMDQgMHg3ZmZmZmZmZmZmZmZmZmYwCisjZGVmaW5lIEJNXzA0XzYyIEJNXzYyXzA0CisjZGVmaW5lIEJNXzYzXzA0IDB4ZmZmZmZmZmZmZmZmZmZmMAorI2RlZmluZSBCTV8wNF82MyBCTV82M18wNAorI2RlZmluZSBCTV8wNV8wNSAweDAwMDAwMDAwMDAwMDAwMjAKKyNkZWZpbmUgQk1fMDZfMDUgMHgwMDAwMDAwMDAwMDAwMDYwCisjZGVmaW5lIEJNXzA1XzA2IEJNXzA2XzA1CisjZGVmaW5lIEJNXzA3XzA1IDB4MDAwMDAwMDAwMDAwMDBlMAorI2RlZmluZSBCTV8wNV8wNyBCTV8wN18wNQorI2RlZmluZSBCTV8wOF8wNSAweDAwMDAwMDAwMDAwMDAxZTAKKyNkZWZpbmUgQk1fMDVfMDggQk1fMDhfMDUKKyNkZWZpbmUgQk1fMDlfMDUgMHgwMDAwMDAwMDAwMDAwM2UwCisjZGVmaW5lIEJNXzA1XzA5IEJNXzA5XzA1CisjZGVmaW5lIEJNXzEwXzA1IDB4MDAwMDAwMDAwMDAwMDdlMAorI2RlZmluZSBCTV8wNV8xMCBCTV8xMF8wNQorI2RlZmluZSBCTV8xMV8wNSAweDAwMDAwMDAwMDAwMDBmZTAKKyNkZWZpbmUgQk1fMDVfMTEgQk1fMTFfMDUKKyNkZWZpbmUgQk1fMTJfMDUgMHgwMDAwMDAwMDAwMDAxZmUwCisjZGVmaW5lIEJNXzA1XzEyIEJNXzEyXzA1CisjZGVmaW5lIEJNXzEzXzA1IDB4MDAwMDAwMDAwMDAwM2ZlMAorI2RlZmluZSBCTV8wNV8xMyBCTV8xM18wNQorI2RlZmluZSBCTV8xNF8wNSAweDAwMDAwMDAwMDAwMDdmZTAKKyNkZWZpbmUgQk1fMDVfMTQgQk1fMTRfMDUKKyNkZWZpbmUgQk1fMTVfMDUgMHgwMDAwMDAwMDAwMDBmZmUwCisjZGVmaW5lIEJNXzA1XzE1IEJNXzE1XzA1CisjZGVmaW5lIEJNXzE2XzA1IDB4MDAwMDAwMDAwMDAxZmZlMAorI2RlZmluZSBCTV8wNV8xNiBCTV8xNl8wNQorI2RlZmluZSBCTV8xN18wNSAweDAwMDAwMDAwMDAwM2ZmZTAKKyNkZWZpbmUgQk1fMDVfMTcgQk1fMTdfMDUKKyNkZWZpbmUgQk1fMThfMDUgMHgwMDAwMDAwMDAwMDdmZmUwCisjZGVmaW5lIEJNXzA1XzE4IEJNXzE4XzA1CisjZGVmaW5lIEJNXzE5XzA1IDB4MDAwMDAwMDAwMDBmZmZlMAorI2RlZmluZSBCTV8wNV8xOSBCTV8xOV8wNQorI2RlZmluZSBCTV8yMF8wNSAweDAwMDAwMDAwMDAxZmZmZTAKKyNkZWZpbmUgQk1fMDVfMjAgQk1fMjBfMDUKKyNkZWZpbmUgQk1fMjFfMDUgMHgwMDAwMDAwMDAwM2ZmZmUwCisjZGVmaW5lIEJNXzA1XzIxIEJNXzIxXzA1CisjZGVmaW5lIEJNXzIyXzA1IDB4MDAwMDAwMDAwMDdmZmZlMAorI2RlZmluZSBCTV8wNV8yMiBCTV8yMl8wNQorI2RlZmluZSBCTV8yM18wNSAweDAwMDAwMDAwMDBmZmZmZTAKKyNkZWZpbmUgQk1fMDVfMjMgQk1fMjNfMDUKKyNkZWZpbmUgQk1fMjRfMDUgMHgwMDAwMDAwMDAxZmZmZmUwCisjZGVmaW5lIEJNXzA1XzI0IEJNXzI0XzA1CisjZGVmaW5lIEJNXzI1XzA1IDB4MDAwMDAwMDAwM2ZmZmZlMAorI2RlZmluZSBCTV8wNV8yNSBCTV8yNV8wNQorI2RlZmluZSBCTV8yNl8wNSAweDAwMDAwMDAwMDdmZmZmZTAKKyNkZWZpbmUgQk1fMDVfMjYgQk1fMjZfMDUKKyNkZWZpbmUgQk1fMjdfMDUgMHgwMDAwMDAwMDBmZmZmZmUwCisjZGVmaW5lIEJNXzA1XzI3IEJNXzI3XzA1CisjZGVmaW5lIEJNXzI4XzA1IDB4MDAwMDAwMDAxZmZmZmZlMAorI2RlZmluZSBCTV8wNV8yOCBCTV8yOF8wNQorI2RlZmluZSBCTV8yOV8wNSAweDAwMDAwMDAwM2ZmZmZmZTAKKyNkZWZpbmUgQk1fMDVfMjkgQk1fMjlfMDUKKyNkZWZpbmUgQk1fMzBfMDUgMHgwMDAwMDAwMDdmZmZmZmUwCisjZGVmaW5lIEJNXzA1XzMwIEJNXzMwXzA1CisjZGVmaW5lIEJNXzMxXzA1IDB4MDAwMDAwMDBmZmZmZmZlMAorI2RlZmluZSBCTV8wNV8zMSBCTV8zMV8wNQorI2RlZmluZSBCTV8zMl8wNSAweDAwMDAwMDAxZmZmZmZmZTAKKyNkZWZpbmUgQk1fMDVfMzIgQk1fMzJfMDUKKyNkZWZpbmUgQk1fMzNfMDUgMHgwMDAwMDAwM2ZmZmZmZmUwCisjZGVmaW5lIEJNXzA1XzMzIEJNXzMzXzA1CisjZGVmaW5lIEJNXzM0XzA1IDB4MDAwMDAwMDdmZmZmZmZlMAorI2RlZmluZSBCTV8wNV8zNCBCTV8zNF8wNQorI2RlZmluZSBCTV8zNV8wNSAweDAwMDAwMDBmZmZmZmZmZTAKKyNkZWZpbmUgQk1fMDVfMzUgQk1fMzVfMDUKKyNkZWZpbmUgQk1fMzZfMDUgMHgwMDAwMDAxZmZmZmZmZmUwCisjZGVmaW5lIEJNXzA1XzM2IEJNXzM2XzA1CisjZGVmaW5lIEJNXzM3XzA1IDB4MDAwMDAwM2ZmZmZmZmZlMAorI2RlZmluZSBCTV8wNV8zNyBCTV8zN18wNQorI2RlZmluZSBCTV8zOF8wNSAweDAwMDAwMDdmZmZmZmZmZTAKKyNkZWZpbmUgQk1fMDVfMzggQk1fMzhfMDUKKyNkZWZpbmUgQk1fMzlfMDUgMHgwMDAwMDBmZmZmZmZmZmUwCisjZGVmaW5lIEJNXzA1XzM5IEJNXzM5XzA1CisjZGVmaW5lIEJNXzQwXzA1IDB4MDAwMDAxZmZmZmZmZmZlMAorI2RlZmluZSBCTV8wNV80MCBCTV80MF8wNQorI2RlZmluZSBCTV80MV8wNSAweDAwMDAwM2ZmZmZmZmZmZTAKKyNkZWZpbmUgQk1fMDVfNDEgQk1fNDFfMDUKKyNkZWZpbmUgQk1fNDJfMDUgMHgwMDAwMDdmZmZmZmZmZmUwCisjZGVmaW5lIEJNXzA1XzQyIEJNXzQyXzA1CisjZGVmaW5lIEJNXzQzXzA1IDB4MDAwMDBmZmZmZmZmZmZlMAorI2RlZmluZSBCTV8wNV80MyBCTV80M18wNQorI2RlZmluZSBCTV80NF8wNSAweDAwMDAxZmZmZmZmZmZmZTAKKyNkZWZpbmUgQk1fMDVfNDQgQk1fNDRfMDUKKyNkZWZpbmUgQk1fNDVfMDUgMHgwMDAwM2ZmZmZmZmZmZmUwCisjZGVmaW5lIEJNXzA1XzQ1IEJNXzQ1XzA1CisjZGVmaW5lIEJNXzQ2XzA1IDB4MDAwMDdmZmZmZmZmZmZlMAorI2RlZmluZSBCTV8wNV80NiBCTV80Nl8wNQorI2RlZmluZSBCTV80N18wNSAweDAwMDBmZmZmZmZmZmZmZTAKKyNkZWZpbmUgQk1fMDVfNDcgQk1fNDdfMDUKKyNkZWZpbmUgQk1fNDhfMDUgMHgwMDAxZmZmZmZmZmZmZmUwCisjZGVmaW5lIEJNXzA1XzQ4IEJNXzQ4XzA1CisjZGVmaW5lIEJNXzQ5XzA1IDB4MDAwM2ZmZmZmZmZmZmZlMAorI2RlZmluZSBCTV8wNV80OSBCTV80OV8wNQorI2RlZmluZSBCTV81MF8wNSAweDAwMDdmZmZmZmZmZmZmZTAKKyNkZWZpbmUgQk1fMDVfNTAgQk1fNTBfMDUKKyNkZWZpbmUgQk1fNTFfMDUgMHgwMDBmZmZmZmZmZmZmZmUwCisjZGVmaW5lIEJNXzA1XzUxIEJNXzUxXzA1CisjZGVmaW5lIEJNXzUyXzA1IDB4MDAxZmZmZmZmZmZmZmZlMAorI2RlZmluZSBCTV8wNV81MiBCTV81Ml8wNQorI2RlZmluZSBCTV81M18wNSAweDAwM2ZmZmZmZmZmZmZmZTAKKyNkZWZpbmUgQk1fMDVfNTMgQk1fNTNfMDUKKyNkZWZpbmUgQk1fNTRfMDUgMHgwMDdmZmZmZmZmZmZmZmUwCisjZGVmaW5lIEJNXzA1XzU0IEJNXzU0XzA1CisjZGVmaW5lIEJNXzU1XzA1IDB4MDBmZmZmZmZmZmZmZmZlMAorI2RlZmluZSBCTV8wNV81NSBCTV81NV8wNQorI2RlZmluZSBCTV81Nl8wNSAweDAxZmZmZmZmZmZmZmZmZTAKKyNkZWZpbmUgQk1fMDVfNTYgQk1fNTZfMDUKKyNkZWZpbmUgQk1fNTdfMDUgMHgwM2ZmZmZmZmZmZmZmZmUwCisjZGVmaW5lIEJNXzA1XzU3IEJNXzU3XzA1CisjZGVmaW5lIEJNXzU4XzA1IDB4MDdmZmZmZmZmZmZmZmZlMAorI2RlZmluZSBCTV8wNV81OCBCTV81OF8wNQorI2RlZmluZSBCTV81OV8wNSAweDBmZmZmZmZmZmZmZmZmZTAKKyNkZWZpbmUgQk1fMDVfNTkgQk1fNTlfMDUKKyNkZWZpbmUgQk1fNjBfMDUgMHgxZmZmZmZmZmZmZmZmZmUwCisjZGVmaW5lIEJNXzA1XzYwIEJNXzYwXzA1CisjZGVmaW5lIEJNXzYxXzA1IDB4M2ZmZmZmZmZmZmZmZmZlMAorI2RlZmluZSBCTV8wNV82MSBCTV82MV8wNQorI2RlZmluZSBCTV82Ml8wNSAweDdmZmZmZmZmZmZmZmZmZTAKKyNkZWZpbmUgQk1fMDVfNjIgQk1fNjJfMDUKKyNkZWZpbmUgQk1fNjNfMDUgMHhmZmZmZmZmZmZmZmZmZmUwCisjZGVmaW5lIEJNXzA1XzYzIEJNXzYzXzA1CisjZGVmaW5lIEJNXzA2XzA2IDB4MDAwMDAwMDAwMDAwMDA0MAorI2RlZmluZSBCTV8wN18wNiAweDAwMDAwMDAwMDAwMDAwYzAKKyNkZWZpbmUgQk1fMDZfMDcgQk1fMDdfMDYKKyNkZWZpbmUgQk1fMDhfMDYgMHgwMDAwMDAwMDAwMDAwMWMwCisjZGVmaW5lIEJNXzA2XzA4IEJNXzA4XzA2CisjZGVmaW5lIEJNXzA5XzA2IDB4MDAwMDAwMDAwMDAwMDNjMAorI2RlZmluZSBCTV8wNl8wOSBCTV8wOV8wNgorI2RlZmluZSBCTV8xMF8wNiAweDAwMDAwMDAwMDAwMDA3YzAKKyNkZWZpbmUgQk1fMDZfMTAgQk1fMTBfMDYKKyNkZWZpbmUgQk1fMTFfMDYgMHgwMDAwMDAwMDAwMDAwZmMwCisjZGVmaW5lIEJNXzA2XzExIEJNXzExXzA2CisjZGVmaW5lIEJNXzEyXzA2IDB4MDAwMDAwMDAwMDAwMWZjMAorI2RlZmluZSBCTV8wNl8xMiBCTV8xMl8wNgorI2RlZmluZSBCTV8xM18wNiAweDAwMDAwMDAwMDAwMDNmYzAKKyNkZWZpbmUgQk1fMDZfMTMgQk1fMTNfMDYKKyNkZWZpbmUgQk1fMTRfMDYgMHgwMDAwMDAwMDAwMDA3ZmMwCisjZGVmaW5lIEJNXzA2XzE0IEJNXzE0XzA2CisjZGVmaW5lIEJNXzE1XzA2IDB4MDAwMDAwMDAwMDAwZmZjMAorI2RlZmluZSBCTV8wNl8xNSBCTV8xNV8wNgorI2RlZmluZSBCTV8xNl8wNiAweDAwMDAwMDAwMDAwMWZmYzAKKyNkZWZpbmUgQk1fMDZfMTYgQk1fMTZfMDYKKyNkZWZpbmUgQk1fMTdfMDYgMHgwMDAwMDAwMDAwMDNmZmMwCisjZGVmaW5lIEJNXzA2XzE3IEJNXzE3XzA2CisjZGVmaW5lIEJNXzE4XzA2IDB4MDAwMDAwMDAwMDA3ZmZjMAorI2RlZmluZSBCTV8wNl8xOCBCTV8xOF8wNgorI2RlZmluZSBCTV8xOV8wNiAweDAwMDAwMDAwMDAwZmZmYzAKKyNkZWZpbmUgQk1fMDZfMTkgQk1fMTlfMDYKKyNkZWZpbmUgQk1fMjBfMDYgMHgwMDAwMDAwMDAwMWZmZmMwCisjZGVmaW5lIEJNXzA2XzIwIEJNXzIwXzA2CisjZGVmaW5lIEJNXzIxXzA2IDB4MDAwMDAwMDAwMDNmZmZjMAorI2RlZmluZSBCTV8wNl8yMSBCTV8yMV8wNgorI2RlZmluZSBCTV8yMl8wNiAweDAwMDAwMDAwMDA3ZmZmYzAKKyNkZWZpbmUgQk1fMDZfMjIgQk1fMjJfMDYKKyNkZWZpbmUgQk1fMjNfMDYgMHgwMDAwMDAwMDAwZmZmZmMwCisjZGVmaW5lIEJNXzA2XzIzIEJNXzIzXzA2CisjZGVmaW5lIEJNXzI0XzA2IDB4MDAwMDAwMDAwMWZmZmZjMAorI2RlZmluZSBCTV8wNl8yNCBCTV8yNF8wNgorI2RlZmluZSBCTV8yNV8wNiAweDAwMDAwMDAwMDNmZmZmYzAKKyNkZWZpbmUgQk1fMDZfMjUgQk1fMjVfMDYKKyNkZWZpbmUgQk1fMjZfMDYgMHgwMDAwMDAwMDA3ZmZmZmMwCisjZGVmaW5lIEJNXzA2XzI2IEJNXzI2XzA2CisjZGVmaW5lIEJNXzI3XzA2IDB4MDAwMDAwMDAwZmZmZmZjMAorI2RlZmluZSBCTV8wNl8yNyBCTV8yN18wNgorI2RlZmluZSBCTV8yOF8wNiAweDAwMDAwMDAwMWZmZmZmYzAKKyNkZWZpbmUgQk1fMDZfMjggQk1fMjhfMDYKKyNkZWZpbmUgQk1fMjlfMDYgMHgwMDAwMDAwMDNmZmZmZmMwCisjZGVmaW5lIEJNXzA2XzI5IEJNXzI5XzA2CisjZGVmaW5lIEJNXzMwXzA2IDB4MDAwMDAwMDA3ZmZmZmZjMAorI2RlZmluZSBCTV8wNl8zMCBCTV8zMF8wNgorI2RlZmluZSBCTV8zMV8wNiAweDAwMDAwMDAwZmZmZmZmYzAKKyNkZWZpbmUgQk1fMDZfMzEgQk1fMzFfMDYKKyNkZWZpbmUgQk1fMzJfMDYgMHgwMDAwMDAwMWZmZmZmZmMwCisjZGVmaW5lIEJNXzA2XzMyIEJNXzMyXzA2CisjZGVmaW5lIEJNXzMzXzA2IDB4MDAwMDAwMDNmZmZmZmZjMAorI2RlZmluZSBCTV8wNl8zMyBCTV8zM18wNgorI2RlZmluZSBCTV8zNF8wNiAweDAwMDAwMDA3ZmZmZmZmYzAKKyNkZWZpbmUgQk1fMDZfMzQgQk1fMzRfMDYKKyNkZWZpbmUgQk1fMzVfMDYgMHgwMDAwMDAwZmZmZmZmZmMwCisjZGVmaW5lIEJNXzA2XzM1IEJNXzM1XzA2CisjZGVmaW5lIEJNXzM2XzA2IDB4MDAwMDAwMWZmZmZmZmZjMAorI2RlZmluZSBCTV8wNl8zNiBCTV8zNl8wNgorI2RlZmluZSBCTV8zN18wNiAweDAwMDAwMDNmZmZmZmZmYzAKKyNkZWZpbmUgQk1fMDZfMzcgQk1fMzdfMDYKKyNkZWZpbmUgQk1fMzhfMDYgMHgwMDAwMDA3ZmZmZmZmZmMwCisjZGVmaW5lIEJNXzA2XzM4IEJNXzM4XzA2CisjZGVmaW5lIEJNXzM5XzA2IDB4MDAwMDAwZmZmZmZmZmZjMAorI2RlZmluZSBCTV8wNl8zOSBCTV8zOV8wNgorI2RlZmluZSBCTV80MF8wNiAweDAwMDAwMWZmZmZmZmZmYzAKKyNkZWZpbmUgQk1fMDZfNDAgQk1fNDBfMDYKKyNkZWZpbmUgQk1fNDFfMDYgMHgwMDAwMDNmZmZmZmZmZmMwCisjZGVmaW5lIEJNXzA2XzQxIEJNXzQxXzA2CisjZGVmaW5lIEJNXzQyXzA2IDB4MDAwMDA3ZmZmZmZmZmZjMAorI2RlZmluZSBCTV8wNl80MiBCTV80Ml8wNgorI2RlZmluZSBCTV80M18wNiAweDAwMDAwZmZmZmZmZmZmYzAKKyNkZWZpbmUgQk1fMDZfNDMgQk1fNDNfMDYKKyNkZWZpbmUgQk1fNDRfMDYgMHgwMDAwMWZmZmZmZmZmZmMwCisjZGVmaW5lIEJNXzA2XzQ0IEJNXzQ0XzA2CisjZGVmaW5lIEJNXzQ1XzA2IDB4MDAwMDNmZmZmZmZmZmZjMAorI2RlZmluZSBCTV8wNl80NSBCTV80NV8wNgorI2RlZmluZSBCTV80Nl8wNiAweDAwMDA3ZmZmZmZmZmZmYzAKKyNkZWZpbmUgQk1fMDZfNDYgQk1fNDZfMDYKKyNkZWZpbmUgQk1fNDdfMDYgMHgwMDAwZmZmZmZmZmZmZmMwCisjZGVmaW5lIEJNXzA2XzQ3IEJNXzQ3XzA2CisjZGVmaW5lIEJNXzQ4XzA2IDB4MDAwMWZmZmZmZmZmZmZjMAorI2RlZmluZSBCTV8wNl80OCBCTV80OF8wNgorI2RlZmluZSBCTV80OV8wNiAweDAwMDNmZmZmZmZmZmZmYzAKKyNkZWZpbmUgQk1fMDZfNDkgQk1fNDlfMDYKKyNkZWZpbmUgQk1fNTBfMDYgMHgwMDA3ZmZmZmZmZmZmZmMwCisjZGVmaW5lIEJNXzA2XzUwIEJNXzUwXzA2CisjZGVmaW5lIEJNXzUxXzA2IDB4MDAwZmZmZmZmZmZmZmZjMAorI2RlZmluZSBCTV8wNl81MSBCTV81MV8wNgorI2RlZmluZSBCTV81Ml8wNiAweDAwMWZmZmZmZmZmZmZmYzAKKyNkZWZpbmUgQk1fMDZfNTIgQk1fNTJfMDYKKyNkZWZpbmUgQk1fNTNfMDYgMHgwMDNmZmZmZmZmZmZmZmMwCisjZGVmaW5lIEJNXzA2XzUzIEJNXzUzXzA2CisjZGVmaW5lIEJNXzU0XzA2IDB4MDA3ZmZmZmZmZmZmZmZjMAorI2RlZmluZSBCTV8wNl81NCBCTV81NF8wNgorI2RlZmluZSBCTV81NV8wNiAweDAwZmZmZmZmZmZmZmZmYzAKKyNkZWZpbmUgQk1fMDZfNTUgQk1fNTVfMDYKKyNkZWZpbmUgQk1fNTZfMDYgMHgwMWZmZmZmZmZmZmZmZmMwCisjZGVmaW5lIEJNXzA2XzU2IEJNXzU2XzA2CisjZGVmaW5lIEJNXzU3XzA2IDB4MDNmZmZmZmZmZmZmZmZjMAorI2RlZmluZSBCTV8wNl81NyBCTV81N18wNgorI2RlZmluZSBCTV81OF8wNiAweDA3ZmZmZmZmZmZmZmZmYzAKKyNkZWZpbmUgQk1fMDZfNTggQk1fNThfMDYKKyNkZWZpbmUgQk1fNTlfMDYgMHgwZmZmZmZmZmZmZmZmZmMwCisjZGVmaW5lIEJNXzA2XzU5IEJNXzU5XzA2CisjZGVmaW5lIEJNXzYwXzA2IDB4MWZmZmZmZmZmZmZmZmZjMAorI2RlZmluZSBCTV8wNl82MCBCTV82MF8wNgorI2RlZmluZSBCTV82MV8wNiAweDNmZmZmZmZmZmZmZmZmYzAKKyNkZWZpbmUgQk1fMDZfNjEgQk1fNjFfMDYKKyNkZWZpbmUgQk1fNjJfMDYgMHg3ZmZmZmZmZmZmZmZmZmMwCisjZGVmaW5lIEJNXzA2XzYyIEJNXzYyXzA2CisjZGVmaW5lIEJNXzYzXzA2IDB4ZmZmZmZmZmZmZmZmZmZjMAorI2RlZmluZSBCTV8wNl82MyBCTV82M18wNgorI2RlZmluZSBCTV8wN18wNyAweDAwMDAwMDAwMDAwMDAwODAKKyNkZWZpbmUgQk1fMDhfMDcgMHgwMDAwMDAwMDAwMDAwMTgwCisjZGVmaW5lIEJNXzA3XzA4IEJNXzA4XzA3CisjZGVmaW5lIEJNXzA5XzA3IDB4MDAwMDAwMDAwMDAwMDM4MAorI2RlZmluZSBCTV8wN18wOSBCTV8wOV8wNworI2RlZmluZSBCTV8xMF8wNyAweDAwMDAwMDAwMDAwMDA3ODAKKyNkZWZpbmUgQk1fMDdfMTAgQk1fMTBfMDcKKyNkZWZpbmUgQk1fMTFfMDcgMHgwMDAwMDAwMDAwMDAwZjgwCisjZGVmaW5lIEJNXzA3XzExIEJNXzExXzA3CisjZGVmaW5lIEJNXzEyXzA3IDB4MDAwMDAwMDAwMDAwMWY4MAorI2RlZmluZSBCTV8wN18xMiBCTV8xMl8wNworI2RlZmluZSBCTV8xM18wNyAweDAwMDAwMDAwMDAwMDNmODAKKyNkZWZpbmUgQk1fMDdfMTMgQk1fMTNfMDcKKyNkZWZpbmUgQk1fMTRfMDcgMHgwMDAwMDAwMDAwMDA3ZjgwCisjZGVmaW5lIEJNXzA3XzE0IEJNXzE0XzA3CisjZGVmaW5lIEJNXzE1XzA3IDB4MDAwMDAwMDAwMDAwZmY4MAorI2RlZmluZSBCTV8wN18xNSBCTV8xNV8wNworI2RlZmluZSBCTV8xNl8wNyAweDAwMDAwMDAwMDAwMWZmODAKKyNkZWZpbmUgQk1fMDdfMTYgQk1fMTZfMDcKKyNkZWZpbmUgQk1fMTdfMDcgMHgwMDAwMDAwMDAwMDNmZjgwCisjZGVmaW5lIEJNXzA3XzE3IEJNXzE3XzA3CisjZGVmaW5lIEJNXzE4XzA3IDB4MDAwMDAwMDAwMDA3ZmY4MAorI2RlZmluZSBCTV8wN18xOCBCTV8xOF8wNworI2RlZmluZSBCTV8xOV8wNyAweDAwMDAwMDAwMDAwZmZmODAKKyNkZWZpbmUgQk1fMDdfMTkgQk1fMTlfMDcKKyNkZWZpbmUgQk1fMjBfMDcgMHgwMDAwMDAwMDAwMWZmZjgwCisjZGVmaW5lIEJNXzA3XzIwIEJNXzIwXzA3CisjZGVmaW5lIEJNXzIxXzA3IDB4MDAwMDAwMDAwMDNmZmY4MAorI2RlZmluZSBCTV8wN18yMSBCTV8yMV8wNworI2RlZmluZSBCTV8yMl8wNyAweDAwMDAwMDAwMDA3ZmZmODAKKyNkZWZpbmUgQk1fMDdfMjIgQk1fMjJfMDcKKyNkZWZpbmUgQk1fMjNfMDcgMHgwMDAwMDAwMDAwZmZmZjgwCisjZGVmaW5lIEJNXzA3XzIzIEJNXzIzXzA3CisjZGVmaW5lIEJNXzI0XzA3IDB4MDAwMDAwMDAwMWZmZmY4MAorI2RlZmluZSBCTV8wN18yNCBCTV8yNF8wNworI2RlZmluZSBCTV8yNV8wNyAweDAwMDAwMDAwMDNmZmZmODAKKyNkZWZpbmUgQk1fMDdfMjUgQk1fMjVfMDcKKyNkZWZpbmUgQk1fMjZfMDcgMHgwMDAwMDAwMDA3ZmZmZjgwCisjZGVmaW5lIEJNXzA3XzI2IEJNXzI2XzA3CisjZGVmaW5lIEJNXzI3XzA3IDB4MDAwMDAwMDAwZmZmZmY4MAorI2RlZmluZSBCTV8wN18yNyBCTV8yN18wNworI2RlZmluZSBCTV8yOF8wNyAweDAwMDAwMDAwMWZmZmZmODAKKyNkZWZpbmUgQk1fMDdfMjggQk1fMjhfMDcKKyNkZWZpbmUgQk1fMjlfMDcgMHgwMDAwMDAwMDNmZmZmZjgwCisjZGVmaW5lIEJNXzA3XzI5IEJNXzI5XzA3CisjZGVmaW5lIEJNXzMwXzA3IDB4MDAwMDAwMDA3ZmZmZmY4MAorI2RlZmluZSBCTV8wN18zMCBCTV8zMF8wNworI2RlZmluZSBCTV8zMV8wNyAweDAwMDAwMDAwZmZmZmZmODAKKyNkZWZpbmUgQk1fMDdfMzEgQk1fMzFfMDcKKyNkZWZpbmUgQk1fMzJfMDcgMHgwMDAwMDAwMWZmZmZmZjgwCisjZGVmaW5lIEJNXzA3XzMyIEJNXzMyXzA3CisjZGVmaW5lIEJNXzMzXzA3IDB4MDAwMDAwMDNmZmZmZmY4MAorI2RlZmluZSBCTV8wN18zMyBCTV8zM18wNworI2RlZmluZSBCTV8zNF8wNyAweDAwMDAwMDA3ZmZmZmZmODAKKyNkZWZpbmUgQk1fMDdfMzQgQk1fMzRfMDcKKyNkZWZpbmUgQk1fMzVfMDcgMHgwMDAwMDAwZmZmZmZmZjgwCisjZGVmaW5lIEJNXzA3XzM1IEJNXzM1XzA3CisjZGVmaW5lIEJNXzM2XzA3IDB4MDAwMDAwMWZmZmZmZmY4MAorI2RlZmluZSBCTV8wN18zNiBCTV8zNl8wNworI2RlZmluZSBCTV8zN18wNyAweDAwMDAwMDNmZmZmZmZmODAKKyNkZWZpbmUgQk1fMDdfMzcgQk1fMzdfMDcKKyNkZWZpbmUgQk1fMzhfMDcgMHgwMDAwMDA3ZmZmZmZmZjgwCisjZGVmaW5lIEJNXzA3XzM4IEJNXzM4XzA3CisjZGVmaW5lIEJNXzM5XzA3IDB4MDAwMDAwZmZmZmZmZmY4MAorI2RlZmluZSBCTV8wN18zOSBCTV8zOV8wNworI2RlZmluZSBCTV80MF8wNyAweDAwMDAwMWZmZmZmZmZmODAKKyNkZWZpbmUgQk1fMDdfNDAgQk1fNDBfMDcKKyNkZWZpbmUgQk1fNDFfMDcgMHgwMDAwMDNmZmZmZmZmZjgwCisjZGVmaW5lIEJNXzA3XzQxIEJNXzQxXzA3CisjZGVmaW5lIEJNXzQyXzA3IDB4MDAwMDA3ZmZmZmZmZmY4MAorI2RlZmluZSBCTV8wN180MiBCTV80Ml8wNworI2RlZmluZSBCTV80M18wNyAweDAwMDAwZmZmZmZmZmZmODAKKyNkZWZpbmUgQk1fMDdfNDMgQk1fNDNfMDcKKyNkZWZpbmUgQk1fNDRfMDcgMHgwMDAwMWZmZmZmZmZmZjgwCisjZGVmaW5lIEJNXzA3XzQ0IEJNXzQ0XzA3CisjZGVmaW5lIEJNXzQ1XzA3IDB4MDAwMDNmZmZmZmZmZmY4MAorI2RlZmluZSBCTV8wN180NSBCTV80NV8wNworI2RlZmluZSBCTV80Nl8wNyAweDAwMDA3ZmZmZmZmZmZmODAKKyNkZWZpbmUgQk1fMDdfNDYgQk1fNDZfMDcKKyNkZWZpbmUgQk1fNDdfMDcgMHgwMDAwZmZmZmZmZmZmZjgwCisjZGVmaW5lIEJNXzA3XzQ3IEJNXzQ3XzA3CisjZGVmaW5lIEJNXzQ4XzA3IDB4MDAwMWZmZmZmZmZmZmY4MAorI2RlZmluZSBCTV8wN180OCBCTV80OF8wNworI2RlZmluZSBCTV80OV8wNyAweDAwMDNmZmZmZmZmZmZmODAKKyNkZWZpbmUgQk1fMDdfNDkgQk1fNDlfMDcKKyNkZWZpbmUgQk1fNTBfMDcgMHgwMDA3ZmZmZmZmZmZmZjgwCisjZGVmaW5lIEJNXzA3XzUwIEJNXzUwXzA3CisjZGVmaW5lIEJNXzUxXzA3IDB4MDAwZmZmZmZmZmZmZmY4MAorI2RlZmluZSBCTV8wN181MSBCTV81MV8wNworI2RlZmluZSBCTV81Ml8wNyAweDAwMWZmZmZmZmZmZmZmODAKKyNkZWZpbmUgQk1fMDdfNTIgQk1fNTJfMDcKKyNkZWZpbmUgQk1fNTNfMDcgMHgwMDNmZmZmZmZmZmZmZjgwCisjZGVmaW5lIEJNXzA3XzUzIEJNXzUzXzA3CisjZGVmaW5lIEJNXzU0XzA3IDB4MDA3ZmZmZmZmZmZmZmY4MAorI2RlZmluZSBCTV8wN181NCBCTV81NF8wNworI2RlZmluZSBCTV81NV8wNyAweDAwZmZmZmZmZmZmZmZmODAKKyNkZWZpbmUgQk1fMDdfNTUgQk1fNTVfMDcKKyNkZWZpbmUgQk1fNTZfMDcgMHgwMWZmZmZmZmZmZmZmZjgwCisjZGVmaW5lIEJNXzA3XzU2IEJNXzU2XzA3CisjZGVmaW5lIEJNXzU3XzA3IDB4MDNmZmZmZmZmZmZmZmY4MAorI2RlZmluZSBCTV8wN181NyBCTV81N18wNworI2RlZmluZSBCTV81OF8wNyAweDA3ZmZmZmZmZmZmZmZmODAKKyNkZWZpbmUgQk1fMDdfNTggQk1fNThfMDcKKyNkZWZpbmUgQk1fNTlfMDcgMHgwZmZmZmZmZmZmZmZmZjgwCisjZGVmaW5lIEJNXzA3XzU5IEJNXzU5XzA3CisjZGVmaW5lIEJNXzYwXzA3IDB4MWZmZmZmZmZmZmZmZmY4MAorI2RlZmluZSBCTV8wN182MCBCTV82MF8wNworI2RlZmluZSBCTV82MV8wNyAweDNmZmZmZmZmZmZmZmZmODAKKyNkZWZpbmUgQk1fMDdfNjEgQk1fNjFfMDcKKyNkZWZpbmUgQk1fNjJfMDcgMHg3ZmZmZmZmZmZmZmZmZjgwCisjZGVmaW5lIEJNXzA3XzYyIEJNXzYyXzA3CisjZGVmaW5lIEJNXzYzXzA3IDB4ZmZmZmZmZmZmZmZmZmY4MAorI2RlZmluZSBCTV8wN182MyBCTV82M18wNworI2RlZmluZSBCTV8wOF8wOCAweDAwMDAwMDAwMDAwMDAxMDAKKyNkZWZpbmUgQk1fMDlfMDggMHgwMDAwMDAwMDAwMDAwMzAwCisjZGVmaW5lIEJNXzA4XzA5IEJNXzA5XzA4CisjZGVmaW5lIEJNXzEwXzA4IDB4MDAwMDAwMDAwMDAwMDcwMAorI2RlZmluZSBCTV8wOF8xMCBCTV8xMF8wOAorI2RlZmluZSBCTV8xMV8wOCAweDAwMDAwMDAwMDAwMDBmMDAKKyNkZWZpbmUgQk1fMDhfMTEgQk1fMTFfMDgKKyNkZWZpbmUgQk1fMTJfMDggMHgwMDAwMDAwMDAwMDAxZjAwCisjZGVmaW5lIEJNXzA4XzEyIEJNXzEyXzA4CisjZGVmaW5lIEJNXzEzXzA4IDB4MDAwMDAwMDAwMDAwM2YwMAorI2RlZmluZSBCTV8wOF8xMyBCTV8xM18wOAorI2RlZmluZSBCTV8xNF8wOCAweDAwMDAwMDAwMDAwMDdmMDAKKyNkZWZpbmUgQk1fMDhfMTQgQk1fMTRfMDgKKyNkZWZpbmUgQk1fMTVfMDggMHgwMDAwMDAwMDAwMDBmZjAwCisjZGVmaW5lIEJNXzA4XzE1IEJNXzE1XzA4CisjZGVmaW5lIEJNXzE2XzA4IDB4MDAwMDAwMDAwMDAxZmYwMAorI2RlZmluZSBCTV8wOF8xNiBCTV8xNl8wOAorI2RlZmluZSBCTV8xN18wOCAweDAwMDAwMDAwMDAwM2ZmMDAKKyNkZWZpbmUgQk1fMDhfMTcgQk1fMTdfMDgKKyNkZWZpbmUgQk1fMThfMDggMHgwMDAwMDAwMDAwMDdmZjAwCisjZGVmaW5lIEJNXzA4XzE4IEJNXzE4XzA4CisjZGVmaW5lIEJNXzE5XzA4IDB4MDAwMDAwMDAwMDBmZmYwMAorI2RlZmluZSBCTV8wOF8xOSBCTV8xOV8wOAorI2RlZmluZSBCTV8yMF8wOCAweDAwMDAwMDAwMDAxZmZmMDAKKyNkZWZpbmUgQk1fMDhfMjAgQk1fMjBfMDgKKyNkZWZpbmUgQk1fMjFfMDggMHgwMDAwMDAwMDAwM2ZmZjAwCisjZGVmaW5lIEJNXzA4XzIxIEJNXzIxXzA4CisjZGVmaW5lIEJNXzIyXzA4IDB4MDAwMDAwMDAwMDdmZmYwMAorI2RlZmluZSBCTV8wOF8yMiBCTV8yMl8wOAorI2RlZmluZSBCTV8yM18wOCAweDAwMDAwMDAwMDBmZmZmMDAKKyNkZWZpbmUgQk1fMDhfMjMgQk1fMjNfMDgKKyNkZWZpbmUgQk1fMjRfMDggMHgwMDAwMDAwMDAxZmZmZjAwCisjZGVmaW5lIEJNXzA4XzI0IEJNXzI0XzA4CisjZGVmaW5lIEJNXzI1XzA4IDB4MDAwMDAwMDAwM2ZmZmYwMAorI2RlZmluZSBCTV8wOF8yNSBCTV8yNV8wOAorI2RlZmluZSBCTV8yNl8wOCAweDAwMDAwMDAwMDdmZmZmMDAKKyNkZWZpbmUgQk1fMDhfMjYgQk1fMjZfMDgKKyNkZWZpbmUgQk1fMjdfMDggMHgwMDAwMDAwMDBmZmZmZjAwCisjZGVmaW5lIEJNXzA4XzI3IEJNXzI3XzA4CisjZGVmaW5lIEJNXzI4XzA4IDB4MDAwMDAwMDAxZmZmZmYwMAorI2RlZmluZSBCTV8wOF8yOCBCTV8yOF8wOAorI2RlZmluZSBCTV8yOV8wOCAweDAwMDAwMDAwM2ZmZmZmMDAKKyNkZWZpbmUgQk1fMDhfMjkgQk1fMjlfMDgKKyNkZWZpbmUgQk1fMzBfMDggMHgwMDAwMDAwMDdmZmZmZjAwCisjZGVmaW5lIEJNXzA4XzMwIEJNXzMwXzA4CisjZGVmaW5lIEJNXzMxXzA4IDB4MDAwMDAwMDBmZmZmZmYwMAorI2RlZmluZSBCTV8wOF8zMSBCTV8zMV8wOAorI2RlZmluZSBCTV8zMl8wOCAweDAwMDAwMDAxZmZmZmZmMDAKKyNkZWZpbmUgQk1fMDhfMzIgQk1fMzJfMDgKKyNkZWZpbmUgQk1fMzNfMDggMHgwMDAwMDAwM2ZmZmZmZjAwCisjZGVmaW5lIEJNXzA4XzMzIEJNXzMzXzA4CisjZGVmaW5lIEJNXzM0XzA4IDB4MDAwMDAwMDdmZmZmZmYwMAorI2RlZmluZSBCTV8wOF8zNCBCTV8zNF8wOAorI2RlZmluZSBCTV8zNV8wOCAweDAwMDAwMDBmZmZmZmZmMDAKKyNkZWZpbmUgQk1fMDhfMzUgQk1fMzVfMDgKKyNkZWZpbmUgQk1fMzZfMDggMHgwMDAwMDAxZmZmZmZmZjAwCisjZGVmaW5lIEJNXzA4XzM2IEJNXzM2XzA4CisjZGVmaW5lIEJNXzM3XzA4IDB4MDAwMDAwM2ZmZmZmZmYwMAorI2RlZmluZSBCTV8wOF8zNyBCTV8zN18wOAorI2RlZmluZSBCTV8zOF8wOCAweDAwMDAwMDdmZmZmZmZmMDAKKyNkZWZpbmUgQk1fMDhfMzggQk1fMzhfMDgKKyNkZWZpbmUgQk1fMzlfMDggMHgwMDAwMDBmZmZmZmZmZjAwCisjZGVmaW5lIEJNXzA4XzM5IEJNXzM5XzA4CisjZGVmaW5lIEJNXzQwXzA4IDB4MDAwMDAxZmZmZmZmZmYwMAorI2RlZmluZSBCTV8wOF80MCBCTV80MF8wOAorI2RlZmluZSBCTV80MV8wOCAweDAwMDAwM2ZmZmZmZmZmMDAKKyNkZWZpbmUgQk1fMDhfNDEgQk1fNDFfMDgKKyNkZWZpbmUgQk1fNDJfMDggMHgwMDAwMDdmZmZmZmZmZjAwCisjZGVmaW5lIEJNXzA4XzQyIEJNXzQyXzA4CisjZGVmaW5lIEJNXzQzXzA4IDB4MDAwMDBmZmZmZmZmZmYwMAorI2RlZmluZSBCTV8wOF80MyBCTV80M18wOAorI2RlZmluZSBCTV80NF8wOCAweDAwMDAxZmZmZmZmZmZmMDAKKyNkZWZpbmUgQk1fMDhfNDQgQk1fNDRfMDgKKyNkZWZpbmUgQk1fNDVfMDggMHgwMDAwM2ZmZmZmZmZmZjAwCisjZGVmaW5lIEJNXzA4XzQ1IEJNXzQ1XzA4CisjZGVmaW5lIEJNXzQ2XzA4IDB4MDAwMDdmZmZmZmZmZmYwMAorI2RlZmluZSBCTV8wOF80NiBCTV80Nl8wOAorI2RlZmluZSBCTV80N18wOCAweDAwMDBmZmZmZmZmZmZmMDAKKyNkZWZpbmUgQk1fMDhfNDcgQk1fNDdfMDgKKyNkZWZpbmUgQk1fNDhfMDggMHgwMDAxZmZmZmZmZmZmZjAwCisjZGVmaW5lIEJNXzA4XzQ4IEJNXzQ4XzA4CisjZGVmaW5lIEJNXzQ5XzA4IDB4MDAwM2ZmZmZmZmZmZmYwMAorI2RlZmluZSBCTV8wOF80OSBCTV80OV8wOAorI2RlZmluZSBCTV81MF8wOCAweDAwMDdmZmZmZmZmZmZmMDAKKyNkZWZpbmUgQk1fMDhfNTAgQk1fNTBfMDgKKyNkZWZpbmUgQk1fNTFfMDggMHgwMDBmZmZmZmZmZmZmZjAwCisjZGVmaW5lIEJNXzA4XzUxIEJNXzUxXzA4CisjZGVmaW5lIEJNXzUyXzA4IDB4MDAxZmZmZmZmZmZmZmYwMAorI2RlZmluZSBCTV8wOF81MiBCTV81Ml8wOAorI2RlZmluZSBCTV81M18wOCAweDAwM2ZmZmZmZmZmZmZmMDAKKyNkZWZpbmUgQk1fMDhfNTMgQk1fNTNfMDgKKyNkZWZpbmUgQk1fNTRfMDggMHgwMDdmZmZmZmZmZmZmZjAwCisjZGVmaW5lIEJNXzA4XzU0IEJNXzU0XzA4CisjZGVmaW5lIEJNXzU1XzA4IDB4MDBmZmZmZmZmZmZmZmYwMAorI2RlZmluZSBCTV8wOF81NSBCTV81NV8wOAorI2RlZmluZSBCTV81Nl8wOCAweDAxZmZmZmZmZmZmZmZmMDAKKyNkZWZpbmUgQk1fMDhfNTYgQk1fNTZfMDgKKyNkZWZpbmUgQk1fNTdfMDggMHgwM2ZmZmZmZmZmZmZmZjAwCisjZGVmaW5lIEJNXzA4XzU3IEJNXzU3XzA4CisjZGVmaW5lIEJNXzU4XzA4IDB4MDdmZmZmZmZmZmZmZmYwMAorI2RlZmluZSBCTV8wOF81OCBCTV81OF8wOAorI2RlZmluZSBCTV81OV8wOCAweDBmZmZmZmZmZmZmZmZmMDAKKyNkZWZpbmUgQk1fMDhfNTkgQk1fNTlfMDgKKyNkZWZpbmUgQk1fNjBfMDggMHgxZmZmZmZmZmZmZmZmZjAwCisjZGVmaW5lIEJNXzA4XzYwIEJNXzYwXzA4CisjZGVmaW5lIEJNXzYxXzA4IDB4M2ZmZmZmZmZmZmZmZmYwMAorI2RlZmluZSBCTV8wOF82MSBCTV82MV8wOAorI2RlZmluZSBCTV82Ml8wOCAweDdmZmZmZmZmZmZmZmZmMDAKKyNkZWZpbmUgQk1fMDhfNjIgQk1fNjJfMDgKKyNkZWZpbmUgQk1fNjNfMDggMHhmZmZmZmZmZmZmZmZmZjAwCisjZGVmaW5lIEJNXzA4XzYzIEJNXzYzXzA4CisjZGVmaW5lIEJNXzA5XzA5IDB4MDAwMDAwMDAwMDAwMDIwMAorI2RlZmluZSBCTV8xMF8wOSAweDAwMDAwMDAwMDAwMDA2MDAKKyNkZWZpbmUgQk1fMDlfMTAgQk1fMTBfMDkKKyNkZWZpbmUgQk1fMTFfMDkgMHgwMDAwMDAwMDAwMDAwZTAwCisjZGVmaW5lIEJNXzA5XzExIEJNXzExXzA5CisjZGVmaW5lIEJNXzEyXzA5IDB4MDAwMDAwMDAwMDAwMWUwMAorI2RlZmluZSBCTV8wOV8xMiBCTV8xMl8wOQorI2RlZmluZSBCTV8xM18wOSAweDAwMDAwMDAwMDAwMDNlMDAKKyNkZWZpbmUgQk1fMDlfMTMgQk1fMTNfMDkKKyNkZWZpbmUgQk1fMTRfMDkgMHgwMDAwMDAwMDAwMDA3ZTAwCisjZGVmaW5lIEJNXzA5XzE0IEJNXzE0XzA5CisjZGVmaW5lIEJNXzE1XzA5IDB4MDAwMDAwMDAwMDAwZmUwMAorI2RlZmluZSBCTV8wOV8xNSBCTV8xNV8wOQorI2RlZmluZSBCTV8xNl8wOSAweDAwMDAwMDAwMDAwMWZlMDAKKyNkZWZpbmUgQk1fMDlfMTYgQk1fMTZfMDkKKyNkZWZpbmUgQk1fMTdfMDkgMHgwMDAwMDAwMDAwMDNmZTAwCisjZGVmaW5lIEJNXzA5XzE3IEJNXzE3XzA5CisjZGVmaW5lIEJNXzE4XzA5IDB4MDAwMDAwMDAwMDA3ZmUwMAorI2RlZmluZSBCTV8wOV8xOCBCTV8xOF8wOQorI2RlZmluZSBCTV8xOV8wOSAweDAwMDAwMDAwMDAwZmZlMDAKKyNkZWZpbmUgQk1fMDlfMTkgQk1fMTlfMDkKKyNkZWZpbmUgQk1fMjBfMDkgMHgwMDAwMDAwMDAwMWZmZTAwCisjZGVmaW5lIEJNXzA5XzIwIEJNXzIwXzA5CisjZGVmaW5lIEJNXzIxXzA5IDB4MDAwMDAwMDAwMDNmZmUwMAorI2RlZmluZSBCTV8wOV8yMSBCTV8yMV8wOQorI2RlZmluZSBCTV8yMl8wOSAweDAwMDAwMDAwMDA3ZmZlMDAKKyNkZWZpbmUgQk1fMDlfMjIgQk1fMjJfMDkKKyNkZWZpbmUgQk1fMjNfMDkgMHgwMDAwMDAwMDAwZmZmZTAwCisjZGVmaW5lIEJNXzA5XzIzIEJNXzIzXzA5CisjZGVmaW5lIEJNXzI0XzA5IDB4MDAwMDAwMDAwMWZmZmUwMAorI2RlZmluZSBCTV8wOV8yNCBCTV8yNF8wOQorI2RlZmluZSBCTV8yNV8wOSAweDAwMDAwMDAwMDNmZmZlMDAKKyNkZWZpbmUgQk1fMDlfMjUgQk1fMjVfMDkKKyNkZWZpbmUgQk1fMjZfMDkgMHgwMDAwMDAwMDA3ZmZmZTAwCisjZGVmaW5lIEJNXzA5XzI2IEJNXzI2XzA5CisjZGVmaW5lIEJNXzI3XzA5IDB4MDAwMDAwMDAwZmZmZmUwMAorI2RlZmluZSBCTV8wOV8yNyBCTV8yN18wOQorI2RlZmluZSBCTV8yOF8wOSAweDAwMDAwMDAwMWZmZmZlMDAKKyNkZWZpbmUgQk1fMDlfMjggQk1fMjhfMDkKKyNkZWZpbmUgQk1fMjlfMDkgMHgwMDAwMDAwMDNmZmZmZTAwCisjZGVmaW5lIEJNXzA5XzI5IEJNXzI5XzA5CisjZGVmaW5lIEJNXzMwXzA5IDB4MDAwMDAwMDA3ZmZmZmUwMAorI2RlZmluZSBCTV8wOV8zMCBCTV8zMF8wOQorI2RlZmluZSBCTV8zMV8wOSAweDAwMDAwMDAwZmZmZmZlMDAKKyNkZWZpbmUgQk1fMDlfMzEgQk1fMzFfMDkKKyNkZWZpbmUgQk1fMzJfMDkgMHgwMDAwMDAwMWZmZmZmZTAwCisjZGVmaW5lIEJNXzA5XzMyIEJNXzMyXzA5CisjZGVmaW5lIEJNXzMzXzA5IDB4MDAwMDAwMDNmZmZmZmUwMAorI2RlZmluZSBCTV8wOV8zMyBCTV8zM18wOQorI2RlZmluZSBCTV8zNF8wOSAweDAwMDAwMDA3ZmZmZmZlMDAKKyNkZWZpbmUgQk1fMDlfMzQgQk1fMzRfMDkKKyNkZWZpbmUgQk1fMzVfMDkgMHgwMDAwMDAwZmZmZmZmZTAwCisjZGVmaW5lIEJNXzA5XzM1IEJNXzM1XzA5CisjZGVmaW5lIEJNXzM2XzA5IDB4MDAwMDAwMWZmZmZmZmUwMAorI2RlZmluZSBCTV8wOV8zNiBCTV8zNl8wOQorI2RlZmluZSBCTV8zN18wOSAweDAwMDAwMDNmZmZmZmZlMDAKKyNkZWZpbmUgQk1fMDlfMzcgQk1fMzdfMDkKKyNkZWZpbmUgQk1fMzhfMDkgMHgwMDAwMDA3ZmZmZmZmZTAwCisjZGVmaW5lIEJNXzA5XzM4IEJNXzM4XzA5CisjZGVmaW5lIEJNXzM5XzA5IDB4MDAwMDAwZmZmZmZmZmUwMAorI2RlZmluZSBCTV8wOV8zOSBCTV8zOV8wOQorI2RlZmluZSBCTV80MF8wOSAweDAwMDAwMWZmZmZmZmZlMDAKKyNkZWZpbmUgQk1fMDlfNDAgQk1fNDBfMDkKKyNkZWZpbmUgQk1fNDFfMDkgMHgwMDAwMDNmZmZmZmZmZTAwCisjZGVmaW5lIEJNXzA5XzQxIEJNXzQxXzA5CisjZGVmaW5lIEJNXzQyXzA5IDB4MDAwMDA3ZmZmZmZmZmUwMAorI2RlZmluZSBCTV8wOV80MiBCTV80Ml8wOQorI2RlZmluZSBCTV80M18wOSAweDAwMDAwZmZmZmZmZmZlMDAKKyNkZWZpbmUgQk1fMDlfNDMgQk1fNDNfMDkKKyNkZWZpbmUgQk1fNDRfMDkgMHgwMDAwMWZmZmZmZmZmZTAwCisjZGVmaW5lIEJNXzA5XzQ0IEJNXzQ0XzA5CisjZGVmaW5lIEJNXzQ1XzA5IDB4MDAwMDNmZmZmZmZmZmUwMAorI2RlZmluZSBCTV8wOV80NSBCTV80NV8wOQorI2RlZmluZSBCTV80Nl8wOSAweDAwMDA3ZmZmZmZmZmZlMDAKKyNkZWZpbmUgQk1fMDlfNDYgQk1fNDZfMDkKKyNkZWZpbmUgQk1fNDdfMDkgMHgwMDAwZmZmZmZmZmZmZTAwCisjZGVmaW5lIEJNXzA5XzQ3IEJNXzQ3XzA5CisjZGVmaW5lIEJNXzQ4XzA5IDB4MDAwMWZmZmZmZmZmZmUwMAorI2RlZmluZSBCTV8wOV80OCBCTV80OF8wOQorI2RlZmluZSBCTV80OV8wOSAweDAwMDNmZmZmZmZmZmZlMDAKKyNkZWZpbmUgQk1fMDlfNDkgQk1fNDlfMDkKKyNkZWZpbmUgQk1fNTBfMDkgMHgwMDA3ZmZmZmZmZmZmZTAwCisjZGVmaW5lIEJNXzA5XzUwIEJNXzUwXzA5CisjZGVmaW5lIEJNXzUxXzA5IDB4MDAwZmZmZmZmZmZmZmUwMAorI2RlZmluZSBCTV8wOV81MSBCTV81MV8wOQorI2RlZmluZSBCTV81Ml8wOSAweDAwMWZmZmZmZmZmZmZlMDAKKyNkZWZpbmUgQk1fMDlfNTIgQk1fNTJfMDkKKyNkZWZpbmUgQk1fNTNfMDkgMHgwMDNmZmZmZmZmZmZmZTAwCisjZGVmaW5lIEJNXzA5XzUzIEJNXzUzXzA5CisjZGVmaW5lIEJNXzU0XzA5IDB4MDA3ZmZmZmZmZmZmZmUwMAorI2RlZmluZSBCTV8wOV81NCBCTV81NF8wOQorI2RlZmluZSBCTV81NV8wOSAweDAwZmZmZmZmZmZmZmZlMDAKKyNkZWZpbmUgQk1fMDlfNTUgQk1fNTVfMDkKKyNkZWZpbmUgQk1fNTZfMDkgMHgwMWZmZmZmZmZmZmZmZTAwCisjZGVmaW5lIEJNXzA5XzU2IEJNXzU2XzA5CisjZGVmaW5lIEJNXzU3XzA5IDB4MDNmZmZmZmZmZmZmZmUwMAorI2RlZmluZSBCTV8wOV81NyBCTV81N18wOQorI2RlZmluZSBCTV81OF8wOSAweDA3ZmZmZmZmZmZmZmZlMDAKKyNkZWZpbmUgQk1fMDlfNTggQk1fNThfMDkKKyNkZWZpbmUgQk1fNTlfMDkgMHgwZmZmZmZmZmZmZmZmZTAwCisjZGVmaW5lIEJNXzA5XzU5IEJNXzU5XzA5CisjZGVmaW5lIEJNXzYwXzA5IDB4MWZmZmZmZmZmZmZmZmUwMAorI2RlZmluZSBCTV8wOV82MCBCTV82MF8wOQorI2RlZmluZSBCTV82MV8wOSAweDNmZmZmZmZmZmZmZmZlMDAKKyNkZWZpbmUgQk1fMDlfNjEgQk1fNjFfMDkKKyNkZWZpbmUgQk1fNjJfMDkgMHg3ZmZmZmZmZmZmZmZmZTAwCisjZGVmaW5lIEJNXzA5XzYyIEJNXzYyXzA5CisjZGVmaW5lIEJNXzYzXzA5IDB4ZmZmZmZmZmZmZmZmZmUwMAorI2RlZmluZSBCTV8wOV82MyBCTV82M18wOQorI2RlZmluZSBCTV8xMF8xMCAweDAwMDAwMDAwMDAwMDA0MDAKKyNkZWZpbmUgQk1fMTFfMTAgMHgwMDAwMDAwMDAwMDAwYzAwCisjZGVmaW5lIEJNXzEwXzExIEJNXzExXzEwCisjZGVmaW5lIEJNXzEyXzEwIDB4MDAwMDAwMDAwMDAwMWMwMAorI2RlZmluZSBCTV8xMF8xMiBCTV8xMl8xMAorI2RlZmluZSBCTV8xM18xMCAweDAwMDAwMDAwMDAwMDNjMDAKKyNkZWZpbmUgQk1fMTBfMTMgQk1fMTNfMTAKKyNkZWZpbmUgQk1fMTRfMTAgMHgwMDAwMDAwMDAwMDA3YzAwCisjZGVmaW5lIEJNXzEwXzE0IEJNXzE0XzEwCisjZGVmaW5lIEJNXzE1XzEwIDB4MDAwMDAwMDAwMDAwZmMwMAorI2RlZmluZSBCTV8xMF8xNSBCTV8xNV8xMAorI2RlZmluZSBCTV8xNl8xMCAweDAwMDAwMDAwMDAwMWZjMDAKKyNkZWZpbmUgQk1fMTBfMTYgQk1fMTZfMTAKKyNkZWZpbmUgQk1fMTdfMTAgMHgwMDAwMDAwMDAwMDNmYzAwCisjZGVmaW5lIEJNXzEwXzE3IEJNXzE3XzEwCisjZGVmaW5lIEJNXzE4XzEwIDB4MDAwMDAwMDAwMDA3ZmMwMAorI2RlZmluZSBCTV8xMF8xOCBCTV8xOF8xMAorI2RlZmluZSBCTV8xOV8xMCAweDAwMDAwMDAwMDAwZmZjMDAKKyNkZWZpbmUgQk1fMTBfMTkgQk1fMTlfMTAKKyNkZWZpbmUgQk1fMjBfMTAgMHgwMDAwMDAwMDAwMWZmYzAwCisjZGVmaW5lIEJNXzEwXzIwIEJNXzIwXzEwCisjZGVmaW5lIEJNXzIxXzEwIDB4MDAwMDAwMDAwMDNmZmMwMAorI2RlZmluZSBCTV8xMF8yMSBCTV8yMV8xMAorI2RlZmluZSBCTV8yMl8xMCAweDAwMDAwMDAwMDA3ZmZjMDAKKyNkZWZpbmUgQk1fMTBfMjIgQk1fMjJfMTAKKyNkZWZpbmUgQk1fMjNfMTAgMHgwMDAwMDAwMDAwZmZmYzAwCisjZGVmaW5lIEJNXzEwXzIzIEJNXzIzXzEwCisjZGVmaW5lIEJNXzI0XzEwIDB4MDAwMDAwMDAwMWZmZmMwMAorI2RlZmluZSBCTV8xMF8yNCBCTV8yNF8xMAorI2RlZmluZSBCTV8yNV8xMCAweDAwMDAwMDAwMDNmZmZjMDAKKyNkZWZpbmUgQk1fMTBfMjUgQk1fMjVfMTAKKyNkZWZpbmUgQk1fMjZfMTAgMHgwMDAwMDAwMDA3ZmZmYzAwCisjZGVmaW5lIEJNXzEwXzI2IEJNXzI2XzEwCisjZGVmaW5lIEJNXzI3XzEwIDB4MDAwMDAwMDAwZmZmZmMwMAorI2RlZmluZSBCTV8xMF8yNyBCTV8yN18xMAorI2RlZmluZSBCTV8yOF8xMCAweDAwMDAwMDAwMWZmZmZjMDAKKyNkZWZpbmUgQk1fMTBfMjggQk1fMjhfMTAKKyNkZWZpbmUgQk1fMjlfMTAgMHgwMDAwMDAwMDNmZmZmYzAwCisjZGVmaW5lIEJNXzEwXzI5IEJNXzI5XzEwCisjZGVmaW5lIEJNXzMwXzEwIDB4MDAwMDAwMDA3ZmZmZmMwMAorI2RlZmluZSBCTV8xMF8zMCBCTV8zMF8xMAorI2RlZmluZSBCTV8zMV8xMCAweDAwMDAwMDAwZmZmZmZjMDAKKyNkZWZpbmUgQk1fMTBfMzEgQk1fMzFfMTAKKyNkZWZpbmUgQk1fMzJfMTAgMHgwMDAwMDAwMWZmZmZmYzAwCisjZGVmaW5lIEJNXzEwXzMyIEJNXzMyXzEwCisjZGVmaW5lIEJNXzMzXzEwIDB4MDAwMDAwMDNmZmZmZmMwMAorI2RlZmluZSBCTV8xMF8zMyBCTV8zM18xMAorI2RlZmluZSBCTV8zNF8xMCAweDAwMDAwMDA3ZmZmZmZjMDAKKyNkZWZpbmUgQk1fMTBfMzQgQk1fMzRfMTAKKyNkZWZpbmUgQk1fMzVfMTAgMHgwMDAwMDAwZmZmZmZmYzAwCisjZGVmaW5lIEJNXzEwXzM1IEJNXzM1XzEwCisjZGVmaW5lIEJNXzM2XzEwIDB4MDAwMDAwMWZmZmZmZmMwMAorI2RlZmluZSBCTV8xMF8zNiBCTV8zNl8xMAorI2RlZmluZSBCTV8zN18xMCAweDAwMDAwMDNmZmZmZmZjMDAKKyNkZWZpbmUgQk1fMTBfMzcgQk1fMzdfMTAKKyNkZWZpbmUgQk1fMzhfMTAgMHgwMDAwMDA3ZmZmZmZmYzAwCisjZGVmaW5lIEJNXzEwXzM4IEJNXzM4XzEwCisjZGVmaW5lIEJNXzM5XzEwIDB4MDAwMDAwZmZmZmZmZmMwMAorI2RlZmluZSBCTV8xMF8zOSBCTV8zOV8xMAorI2RlZmluZSBCTV80MF8xMCAweDAwMDAwMWZmZmZmZmZjMDAKKyNkZWZpbmUgQk1fMTBfNDAgQk1fNDBfMTAKKyNkZWZpbmUgQk1fNDFfMTAgMHgwMDAwMDNmZmZmZmZmYzAwCisjZGVmaW5lIEJNXzEwXzQxIEJNXzQxXzEwCisjZGVmaW5lIEJNXzQyXzEwIDB4MDAwMDA3ZmZmZmZmZmMwMAorI2RlZmluZSBCTV8xMF80MiBCTV80Ml8xMAorI2RlZmluZSBCTV80M18xMCAweDAwMDAwZmZmZmZmZmZjMDAKKyNkZWZpbmUgQk1fMTBfNDMgQk1fNDNfMTAKKyNkZWZpbmUgQk1fNDRfMTAgMHgwMDAwMWZmZmZmZmZmYzAwCisjZGVmaW5lIEJNXzEwXzQ0IEJNXzQ0XzEwCisjZGVmaW5lIEJNXzQ1XzEwIDB4MDAwMDNmZmZmZmZmZmMwMAorI2RlZmluZSBCTV8xMF80NSBCTV80NV8xMAorI2RlZmluZSBCTV80Nl8xMCAweDAwMDA3ZmZmZmZmZmZjMDAKKyNkZWZpbmUgQk1fMTBfNDYgQk1fNDZfMTAKKyNkZWZpbmUgQk1fNDdfMTAgMHgwMDAwZmZmZmZmZmZmYzAwCisjZGVmaW5lIEJNXzEwXzQ3IEJNXzQ3XzEwCisjZGVmaW5lIEJNXzQ4XzEwIDB4MDAwMWZmZmZmZmZmZmMwMAorI2RlZmluZSBCTV8xMF80OCBCTV80OF8xMAorI2RlZmluZSBCTV80OV8xMCAweDAwMDNmZmZmZmZmZmZjMDAKKyNkZWZpbmUgQk1fMTBfNDkgQk1fNDlfMTAKKyNkZWZpbmUgQk1fNTBfMTAgMHgwMDA3ZmZmZmZmZmZmYzAwCisjZGVmaW5lIEJNXzEwXzUwIEJNXzUwXzEwCisjZGVmaW5lIEJNXzUxXzEwIDB4MDAwZmZmZmZmZmZmZmMwMAorI2RlZmluZSBCTV8xMF81MSBCTV81MV8xMAorI2RlZmluZSBCTV81Ml8xMCAweDAwMWZmZmZmZmZmZmZjMDAKKyNkZWZpbmUgQk1fMTBfNTIgQk1fNTJfMTAKKyNkZWZpbmUgQk1fNTNfMTAgMHgwMDNmZmZmZmZmZmZmYzAwCisjZGVmaW5lIEJNXzEwXzUzIEJNXzUzXzEwCisjZGVmaW5lIEJNXzU0XzEwIDB4MDA3ZmZmZmZmZmZmZmMwMAorI2RlZmluZSBCTV8xMF81NCBCTV81NF8xMAorI2RlZmluZSBCTV81NV8xMCAweDAwZmZmZmZmZmZmZmZjMDAKKyNkZWZpbmUgQk1fMTBfNTUgQk1fNTVfMTAKKyNkZWZpbmUgQk1fNTZfMTAgMHgwMWZmZmZmZmZmZmZmYzAwCisjZGVmaW5lIEJNXzEwXzU2IEJNXzU2XzEwCisjZGVmaW5lIEJNXzU3XzEwIDB4MDNmZmZmZmZmZmZmZmMwMAorI2RlZmluZSBCTV8xMF81NyBCTV81N18xMAorI2RlZmluZSBCTV81OF8xMCAweDA3ZmZmZmZmZmZmZmZjMDAKKyNkZWZpbmUgQk1fMTBfNTggQk1fNThfMTAKKyNkZWZpbmUgQk1fNTlfMTAgMHgwZmZmZmZmZmZmZmZmYzAwCisjZGVmaW5lIEJNXzEwXzU5IEJNXzU5XzEwCisjZGVmaW5lIEJNXzYwXzEwIDB4MWZmZmZmZmZmZmZmZmMwMAorI2RlZmluZSBCTV8xMF82MCBCTV82MF8xMAorI2RlZmluZSBCTV82MV8xMCAweDNmZmZmZmZmZmZmZmZjMDAKKyNkZWZpbmUgQk1fMTBfNjEgQk1fNjFfMTAKKyNkZWZpbmUgQk1fNjJfMTAgMHg3ZmZmZmZmZmZmZmZmYzAwCisjZGVmaW5lIEJNXzEwXzYyIEJNXzYyXzEwCisjZGVmaW5lIEJNXzYzXzEwIDB4ZmZmZmZmZmZmZmZmZmMwMAorI2RlZmluZSBCTV8xMF82MyBCTV82M18xMAorI2RlZmluZSBCTV8xMV8xMSAweDAwMDAwMDAwMDAwMDA4MDAKKyNkZWZpbmUgQk1fMTJfMTEgMHgwMDAwMDAwMDAwMDAxODAwCisjZGVmaW5lIEJNXzExXzEyIEJNXzEyXzExCisjZGVmaW5lIEJNXzEzXzExIDB4MDAwMDAwMDAwMDAwMzgwMAorI2RlZmluZSBCTV8xMV8xMyBCTV8xM18xMQorI2RlZmluZSBCTV8xNF8xMSAweDAwMDAwMDAwMDAwMDc4MDAKKyNkZWZpbmUgQk1fMTFfMTQgQk1fMTRfMTEKKyNkZWZpbmUgQk1fMTVfMTEgMHgwMDAwMDAwMDAwMDBmODAwCisjZGVmaW5lIEJNXzExXzE1IEJNXzE1XzExCisjZGVmaW5lIEJNXzE2XzExIDB4MDAwMDAwMDAwMDAxZjgwMAorI2RlZmluZSBCTV8xMV8xNiBCTV8xNl8xMQorI2RlZmluZSBCTV8xN18xMSAweDAwMDAwMDAwMDAwM2Y4MDAKKyNkZWZpbmUgQk1fMTFfMTcgQk1fMTdfMTEKKyNkZWZpbmUgQk1fMThfMTEgMHgwMDAwMDAwMDAwMDdmODAwCisjZGVmaW5lIEJNXzExXzE4IEJNXzE4XzExCisjZGVmaW5lIEJNXzE5XzExIDB4MDAwMDAwMDAwMDBmZjgwMAorI2RlZmluZSBCTV8xMV8xOSBCTV8xOV8xMQorI2RlZmluZSBCTV8yMF8xMSAweDAwMDAwMDAwMDAxZmY4MDAKKyNkZWZpbmUgQk1fMTFfMjAgQk1fMjBfMTEKKyNkZWZpbmUgQk1fMjFfMTEgMHgwMDAwMDAwMDAwM2ZmODAwCisjZGVmaW5lIEJNXzExXzIxIEJNXzIxXzExCisjZGVmaW5lIEJNXzIyXzExIDB4MDAwMDAwMDAwMDdmZjgwMAorI2RlZmluZSBCTV8xMV8yMiBCTV8yMl8xMQorI2RlZmluZSBCTV8yM18xMSAweDAwMDAwMDAwMDBmZmY4MDAKKyNkZWZpbmUgQk1fMTFfMjMgQk1fMjNfMTEKKyNkZWZpbmUgQk1fMjRfMTEgMHgwMDAwMDAwMDAxZmZmODAwCisjZGVmaW5lIEJNXzExXzI0IEJNXzI0XzExCisjZGVmaW5lIEJNXzI1XzExIDB4MDAwMDAwMDAwM2ZmZjgwMAorI2RlZmluZSBCTV8xMV8yNSBCTV8yNV8xMQorI2RlZmluZSBCTV8yNl8xMSAweDAwMDAwMDAwMDdmZmY4MDAKKyNkZWZpbmUgQk1fMTFfMjYgQk1fMjZfMTEKKyNkZWZpbmUgQk1fMjdfMTEgMHgwMDAwMDAwMDBmZmZmODAwCisjZGVmaW5lIEJNXzExXzI3IEJNXzI3XzExCisjZGVmaW5lIEJNXzI4XzExIDB4MDAwMDAwMDAxZmZmZjgwMAorI2RlZmluZSBCTV8xMV8yOCBCTV8yOF8xMQorI2RlZmluZSBCTV8yOV8xMSAweDAwMDAwMDAwM2ZmZmY4MDAKKyNkZWZpbmUgQk1fMTFfMjkgQk1fMjlfMTEKKyNkZWZpbmUgQk1fMzBfMTEgMHgwMDAwMDAwMDdmZmZmODAwCisjZGVmaW5lIEJNXzExXzMwIEJNXzMwXzExCisjZGVmaW5lIEJNXzMxXzExIDB4MDAwMDAwMDBmZmZmZjgwMAorI2RlZmluZSBCTV8xMV8zMSBCTV8zMV8xMQorI2RlZmluZSBCTV8zMl8xMSAweDAwMDAwMDAxZmZmZmY4MDAKKyNkZWZpbmUgQk1fMTFfMzIgQk1fMzJfMTEKKyNkZWZpbmUgQk1fMzNfMTEgMHgwMDAwMDAwM2ZmZmZmODAwCisjZGVmaW5lIEJNXzExXzMzIEJNXzMzXzExCisjZGVmaW5lIEJNXzM0XzExIDB4MDAwMDAwMDdmZmZmZjgwMAorI2RlZmluZSBCTV8xMV8zNCBCTV8zNF8xMQorI2RlZmluZSBCTV8zNV8xMSAweDAwMDAwMDBmZmZmZmY4MDAKKyNkZWZpbmUgQk1fMTFfMzUgQk1fMzVfMTEKKyNkZWZpbmUgQk1fMzZfMTEgMHgwMDAwMDAxZmZmZmZmODAwCisjZGVmaW5lIEJNXzExXzM2IEJNXzM2XzExCisjZGVmaW5lIEJNXzM3XzExIDB4MDAwMDAwM2ZmZmZmZjgwMAorI2RlZmluZSBCTV8xMV8zNyBCTV8zN18xMQorI2RlZmluZSBCTV8zOF8xMSAweDAwMDAwMDdmZmZmZmY4MDAKKyNkZWZpbmUgQk1fMTFfMzggQk1fMzhfMTEKKyNkZWZpbmUgQk1fMzlfMTEgMHgwMDAwMDBmZmZmZmZmODAwCisjZGVmaW5lIEJNXzExXzM5IEJNXzM5XzExCisjZGVmaW5lIEJNXzQwXzExIDB4MDAwMDAxZmZmZmZmZjgwMAorI2RlZmluZSBCTV8xMV80MCBCTV80MF8xMQorI2RlZmluZSBCTV80MV8xMSAweDAwMDAwM2ZmZmZmZmY4MDAKKyNkZWZpbmUgQk1fMTFfNDEgQk1fNDFfMTEKKyNkZWZpbmUgQk1fNDJfMTEgMHgwMDAwMDdmZmZmZmZmODAwCisjZGVmaW5lIEJNXzExXzQyIEJNXzQyXzExCisjZGVmaW5lIEJNXzQzXzExIDB4MDAwMDBmZmZmZmZmZjgwMAorI2RlZmluZSBCTV8xMV80MyBCTV80M18xMQorI2RlZmluZSBCTV80NF8xMSAweDAwMDAxZmZmZmZmZmY4MDAKKyNkZWZpbmUgQk1fMTFfNDQgQk1fNDRfMTEKKyNkZWZpbmUgQk1fNDVfMTEgMHgwMDAwM2ZmZmZmZmZmODAwCisjZGVmaW5lIEJNXzExXzQ1IEJNXzQ1XzExCisjZGVmaW5lIEJNXzQ2XzExIDB4MDAwMDdmZmZmZmZmZjgwMAorI2RlZmluZSBCTV8xMV80NiBCTV80Nl8xMQorI2RlZmluZSBCTV80N18xMSAweDAwMDBmZmZmZmZmZmY4MDAKKyNkZWZpbmUgQk1fMTFfNDcgQk1fNDdfMTEKKyNkZWZpbmUgQk1fNDhfMTEgMHgwMDAxZmZmZmZmZmZmODAwCisjZGVmaW5lIEJNXzExXzQ4IEJNXzQ4XzExCisjZGVmaW5lIEJNXzQ5XzExIDB4MDAwM2ZmZmZmZmZmZjgwMAorI2RlZmluZSBCTV8xMV80OSBCTV80OV8xMQorI2RlZmluZSBCTV81MF8xMSAweDAwMDdmZmZmZmZmZmY4MDAKKyNkZWZpbmUgQk1fMTFfNTAgQk1fNTBfMTEKKyNkZWZpbmUgQk1fNTFfMTEgMHgwMDBmZmZmZmZmZmZmODAwCisjZGVmaW5lIEJNXzExXzUxIEJNXzUxXzExCisjZGVmaW5lIEJNXzUyXzExIDB4MDAxZmZmZmZmZmZmZjgwMAorI2RlZmluZSBCTV8xMV81MiBCTV81Ml8xMQorI2RlZmluZSBCTV81M18xMSAweDAwM2ZmZmZmZmZmZmY4MDAKKyNkZWZpbmUgQk1fMTFfNTMgQk1fNTNfMTEKKyNkZWZpbmUgQk1fNTRfMTEgMHgwMDdmZmZmZmZmZmZmODAwCisjZGVmaW5lIEJNXzExXzU0IEJNXzU0XzExCisjZGVmaW5lIEJNXzU1XzExIDB4MDBmZmZmZmZmZmZmZjgwMAorI2RlZmluZSBCTV8xMV81NSBCTV81NV8xMQorI2RlZmluZSBCTV81Nl8xMSAweDAxZmZmZmZmZmZmZmY4MDAKKyNkZWZpbmUgQk1fMTFfNTYgQk1fNTZfMTEKKyNkZWZpbmUgQk1fNTdfMTEgMHgwM2ZmZmZmZmZmZmZmODAwCisjZGVmaW5lIEJNXzExXzU3IEJNXzU3XzExCisjZGVmaW5lIEJNXzU4XzExIDB4MDdmZmZmZmZmZmZmZjgwMAorI2RlZmluZSBCTV8xMV81OCBCTV81OF8xMQorI2RlZmluZSBCTV81OV8xMSAweDBmZmZmZmZmZmZmZmY4MDAKKyNkZWZpbmUgQk1fMTFfNTkgQk1fNTlfMTEKKyNkZWZpbmUgQk1fNjBfMTEgMHgxZmZmZmZmZmZmZmZmODAwCisjZGVmaW5lIEJNXzExXzYwIEJNXzYwXzExCisjZGVmaW5lIEJNXzYxXzExIDB4M2ZmZmZmZmZmZmZmZjgwMAorI2RlZmluZSBCTV8xMV82MSBCTV82MV8xMQorI2RlZmluZSBCTV82Ml8xMSAweDdmZmZmZmZmZmZmZmY4MDAKKyNkZWZpbmUgQk1fMTFfNjIgQk1fNjJfMTEKKyNkZWZpbmUgQk1fNjNfMTEgMHhmZmZmZmZmZmZmZmZmODAwCisjZGVmaW5lIEJNXzExXzYzIEJNXzYzXzExCisjZGVmaW5lIEJNXzEyXzEyIDB4MDAwMDAwMDAwMDAwMTAwMAorI2RlZmluZSBCTV8xM18xMiAweDAwMDAwMDAwMDAwMDMwMDAKKyNkZWZpbmUgQk1fMTJfMTMgQk1fMTNfMTIKKyNkZWZpbmUgQk1fMTRfMTIgMHgwMDAwMDAwMDAwMDA3MDAwCisjZGVmaW5lIEJNXzEyXzE0IEJNXzE0XzEyCisjZGVmaW5lIEJNXzE1XzEyIDB4MDAwMDAwMDAwMDAwZjAwMAorI2RlZmluZSBCTV8xMl8xNSBCTV8xNV8xMgorI2RlZmluZSBCTV8xNl8xMiAweDAwMDAwMDAwMDAwMWYwMDAKKyNkZWZpbmUgQk1fMTJfMTYgQk1fMTZfMTIKKyNkZWZpbmUgQk1fMTdfMTIgMHgwMDAwMDAwMDAwMDNmMDAwCisjZGVmaW5lIEJNXzEyXzE3IEJNXzE3XzEyCisjZGVmaW5lIEJNXzE4XzEyIDB4MDAwMDAwMDAwMDA3ZjAwMAorI2RlZmluZSBCTV8xMl8xOCBCTV8xOF8xMgorI2RlZmluZSBCTV8xOV8xMiAweDAwMDAwMDAwMDAwZmYwMDAKKyNkZWZpbmUgQk1fMTJfMTkgQk1fMTlfMTIKKyNkZWZpbmUgQk1fMjBfMTIgMHgwMDAwMDAwMDAwMWZmMDAwCisjZGVmaW5lIEJNXzEyXzIwIEJNXzIwXzEyCisjZGVmaW5lIEJNXzIxXzEyIDB4MDAwMDAwMDAwMDNmZjAwMAorI2RlZmluZSBCTV8xMl8yMSBCTV8yMV8xMgorI2RlZmluZSBCTV8yMl8xMiAweDAwMDAwMDAwMDA3ZmYwMDAKKyNkZWZpbmUgQk1fMTJfMjIgQk1fMjJfMTIKKyNkZWZpbmUgQk1fMjNfMTIgMHgwMDAwMDAwMDAwZmZmMDAwCisjZGVmaW5lIEJNXzEyXzIzIEJNXzIzXzEyCisjZGVmaW5lIEJNXzI0XzEyIDB4MDAwMDAwMDAwMWZmZjAwMAorI2RlZmluZSBCTV8xMl8yNCBCTV8yNF8xMgorI2RlZmluZSBCTV8yNV8xMiAweDAwMDAwMDAwMDNmZmYwMDAKKyNkZWZpbmUgQk1fMTJfMjUgQk1fMjVfMTIKKyNkZWZpbmUgQk1fMjZfMTIgMHgwMDAwMDAwMDA3ZmZmMDAwCisjZGVmaW5lIEJNXzEyXzI2IEJNXzI2XzEyCisjZGVmaW5lIEJNXzI3XzEyIDB4MDAwMDAwMDAwZmZmZjAwMAorI2RlZmluZSBCTV8xMl8yNyBCTV8yN18xMgorI2RlZmluZSBCTV8yOF8xMiAweDAwMDAwMDAwMWZmZmYwMDAKKyNkZWZpbmUgQk1fMTJfMjggQk1fMjhfMTIKKyNkZWZpbmUgQk1fMjlfMTIgMHgwMDAwMDAwMDNmZmZmMDAwCisjZGVmaW5lIEJNXzEyXzI5IEJNXzI5XzEyCisjZGVmaW5lIEJNXzMwXzEyIDB4MDAwMDAwMDA3ZmZmZjAwMAorI2RlZmluZSBCTV8xMl8zMCBCTV8zMF8xMgorI2RlZmluZSBCTV8zMV8xMiAweDAwMDAwMDAwZmZmZmYwMDAKKyNkZWZpbmUgQk1fMTJfMzEgQk1fMzFfMTIKKyNkZWZpbmUgQk1fMzJfMTIgMHgwMDAwMDAwMWZmZmZmMDAwCisjZGVmaW5lIEJNXzEyXzMyIEJNXzMyXzEyCisjZGVmaW5lIEJNXzMzXzEyIDB4MDAwMDAwMDNmZmZmZjAwMAorI2RlZmluZSBCTV8xMl8zMyBCTV8zM18xMgorI2RlZmluZSBCTV8zNF8xMiAweDAwMDAwMDA3ZmZmZmYwMDAKKyNkZWZpbmUgQk1fMTJfMzQgQk1fMzRfMTIKKyNkZWZpbmUgQk1fMzVfMTIgMHgwMDAwMDAwZmZmZmZmMDAwCisjZGVmaW5lIEJNXzEyXzM1IEJNXzM1XzEyCisjZGVmaW5lIEJNXzM2XzEyIDB4MDAwMDAwMWZmZmZmZjAwMAorI2RlZmluZSBCTV8xMl8zNiBCTV8zNl8xMgorI2RlZmluZSBCTV8zN18xMiAweDAwMDAwMDNmZmZmZmYwMDAKKyNkZWZpbmUgQk1fMTJfMzcgQk1fMzdfMTIKKyNkZWZpbmUgQk1fMzhfMTIgMHgwMDAwMDA3ZmZmZmZmMDAwCisjZGVmaW5lIEJNXzEyXzM4IEJNXzM4XzEyCisjZGVmaW5lIEJNXzM5XzEyIDB4MDAwMDAwZmZmZmZmZjAwMAorI2RlZmluZSBCTV8xMl8zOSBCTV8zOV8xMgorI2RlZmluZSBCTV80MF8xMiAweDAwMDAwMWZmZmZmZmYwMDAKKyNkZWZpbmUgQk1fMTJfNDAgQk1fNDBfMTIKKyNkZWZpbmUgQk1fNDFfMTIgMHgwMDAwMDNmZmZmZmZmMDAwCisjZGVmaW5lIEJNXzEyXzQxIEJNXzQxXzEyCisjZGVmaW5lIEJNXzQyXzEyIDB4MDAwMDA3ZmZmZmZmZjAwMAorI2RlZmluZSBCTV8xMl80MiBCTV80Ml8xMgorI2RlZmluZSBCTV80M18xMiAweDAwMDAwZmZmZmZmZmYwMDAKKyNkZWZpbmUgQk1fMTJfNDMgQk1fNDNfMTIKKyNkZWZpbmUgQk1fNDRfMTIgMHgwMDAwMWZmZmZmZmZmMDAwCisjZGVmaW5lIEJNXzEyXzQ0IEJNXzQ0XzEyCisjZGVmaW5lIEJNXzQ1XzEyIDB4MDAwMDNmZmZmZmZmZjAwMAorI2RlZmluZSBCTV8xMl80NSBCTV80NV8xMgorI2RlZmluZSBCTV80Nl8xMiAweDAwMDA3ZmZmZmZmZmYwMDAKKyNkZWZpbmUgQk1fMTJfNDYgQk1fNDZfMTIKKyNkZWZpbmUgQk1fNDdfMTIgMHgwMDAwZmZmZmZmZmZmMDAwCisjZGVmaW5lIEJNXzEyXzQ3IEJNXzQ3XzEyCisjZGVmaW5lIEJNXzQ4XzEyIDB4MDAwMWZmZmZmZmZmZjAwMAorI2RlZmluZSBCTV8xMl80OCBCTV80OF8xMgorI2RlZmluZSBCTV80OV8xMiAweDAwMDNmZmZmZmZmZmYwMDAKKyNkZWZpbmUgQk1fMTJfNDkgQk1fNDlfMTIKKyNkZWZpbmUgQk1fNTBfMTIgMHgwMDA3ZmZmZmZmZmZmMDAwCisjZGVmaW5lIEJNXzEyXzUwIEJNXzUwXzEyCisjZGVmaW5lIEJNXzUxXzEyIDB4MDAwZmZmZmZmZmZmZjAwMAorI2RlZmluZSBCTV8xMl81MSBCTV81MV8xMgorI2RlZmluZSBCTV81Ml8xMiAweDAwMWZmZmZmZmZmZmYwMDAKKyNkZWZpbmUgQk1fMTJfNTIgQk1fNTJfMTIKKyNkZWZpbmUgQk1fNTNfMTIgMHgwMDNmZmZmZmZmZmZmMDAwCisjZGVmaW5lIEJNXzEyXzUzIEJNXzUzXzEyCisjZGVmaW5lIEJNXzU0XzEyIDB4MDA3ZmZmZmZmZmZmZjAwMAorI2RlZmluZSBCTV8xMl81NCBCTV81NF8xMgorI2RlZmluZSBCTV81NV8xMiAweDAwZmZmZmZmZmZmZmYwMDAKKyNkZWZpbmUgQk1fMTJfNTUgQk1fNTVfMTIKKyNkZWZpbmUgQk1fNTZfMTIgMHgwMWZmZmZmZmZmZmZmMDAwCisjZGVmaW5lIEJNXzEyXzU2IEJNXzU2XzEyCisjZGVmaW5lIEJNXzU3XzEyIDB4MDNmZmZmZmZmZmZmZjAwMAorI2RlZmluZSBCTV8xMl81NyBCTV81N18xMgorI2RlZmluZSBCTV81OF8xMiAweDA3ZmZmZmZmZmZmZmYwMDAKKyNkZWZpbmUgQk1fMTJfNTggQk1fNThfMTIKKyNkZWZpbmUgQk1fNTlfMTIgMHgwZmZmZmZmZmZmZmZmMDAwCisjZGVmaW5lIEJNXzEyXzU5IEJNXzU5XzEyCisjZGVmaW5lIEJNXzYwXzEyIDB4MWZmZmZmZmZmZmZmZjAwMAorI2RlZmluZSBCTV8xMl82MCBCTV82MF8xMgorI2RlZmluZSBCTV82MV8xMiAweDNmZmZmZmZmZmZmZmYwMDAKKyNkZWZpbmUgQk1fMTJfNjEgQk1fNjFfMTIKKyNkZWZpbmUgQk1fNjJfMTIgMHg3ZmZmZmZmZmZmZmZmMDAwCisjZGVmaW5lIEJNXzEyXzYyIEJNXzYyXzEyCisjZGVmaW5lIEJNXzYzXzEyIDB4ZmZmZmZmZmZmZmZmZjAwMAorI2RlZmluZSBCTV8xMl82MyBCTV82M18xMgorI2RlZmluZSBCTV8xM18xMyAweDAwMDAwMDAwMDAwMDIwMDAKKyNkZWZpbmUgQk1fMTRfMTMgMHgwMDAwMDAwMDAwMDA2MDAwCisjZGVmaW5lIEJNXzEzXzE0IEJNXzE0XzEzCisjZGVmaW5lIEJNXzE1XzEzIDB4MDAwMDAwMDAwMDAwZTAwMAorI2RlZmluZSBCTV8xM18xNSBCTV8xNV8xMworI2RlZmluZSBCTV8xNl8xMyAweDAwMDAwMDAwMDAwMWUwMDAKKyNkZWZpbmUgQk1fMTNfMTYgQk1fMTZfMTMKKyNkZWZpbmUgQk1fMTdfMTMgMHgwMDAwMDAwMDAwMDNlMDAwCisjZGVmaW5lIEJNXzEzXzE3IEJNXzE3XzEzCisjZGVmaW5lIEJNXzE4XzEzIDB4MDAwMDAwMDAwMDA3ZTAwMAorI2RlZmluZSBCTV8xM18xOCBCTV8xOF8xMworI2RlZmluZSBCTV8xOV8xMyAweDAwMDAwMDAwMDAwZmUwMDAKKyNkZWZpbmUgQk1fMTNfMTkgQk1fMTlfMTMKKyNkZWZpbmUgQk1fMjBfMTMgMHgwMDAwMDAwMDAwMWZlMDAwCisjZGVmaW5lIEJNXzEzXzIwIEJNXzIwXzEzCisjZGVmaW5lIEJNXzIxXzEzIDB4MDAwMDAwMDAwMDNmZTAwMAorI2RlZmluZSBCTV8xM18yMSBCTV8yMV8xMworI2RlZmluZSBCTV8yMl8xMyAweDAwMDAwMDAwMDA3ZmUwMDAKKyNkZWZpbmUgQk1fMTNfMjIgQk1fMjJfMTMKKyNkZWZpbmUgQk1fMjNfMTMgMHgwMDAwMDAwMDAwZmZlMDAwCisjZGVmaW5lIEJNXzEzXzIzIEJNXzIzXzEzCisjZGVmaW5lIEJNXzI0XzEzIDB4MDAwMDAwMDAwMWZmZTAwMAorI2RlZmluZSBCTV8xM18yNCBCTV8yNF8xMworI2RlZmluZSBCTV8yNV8xMyAweDAwMDAwMDAwMDNmZmUwMDAKKyNkZWZpbmUgQk1fMTNfMjUgQk1fMjVfMTMKKyNkZWZpbmUgQk1fMjZfMTMgMHgwMDAwMDAwMDA3ZmZlMDAwCisjZGVmaW5lIEJNXzEzXzI2IEJNXzI2XzEzCisjZGVmaW5lIEJNXzI3XzEzIDB4MDAwMDAwMDAwZmZmZTAwMAorI2RlZmluZSBCTV8xM18yNyBCTV8yN18xMworI2RlZmluZSBCTV8yOF8xMyAweDAwMDAwMDAwMWZmZmUwMDAKKyNkZWZpbmUgQk1fMTNfMjggQk1fMjhfMTMKKyNkZWZpbmUgQk1fMjlfMTMgMHgwMDAwMDAwMDNmZmZlMDAwCisjZGVmaW5lIEJNXzEzXzI5IEJNXzI5XzEzCisjZGVmaW5lIEJNXzMwXzEzIDB4MDAwMDAwMDA3ZmZmZTAwMAorI2RlZmluZSBCTV8xM18zMCBCTV8zMF8xMworI2RlZmluZSBCTV8zMV8xMyAweDAwMDAwMDAwZmZmZmUwMDAKKyNkZWZpbmUgQk1fMTNfMzEgQk1fMzFfMTMKKyNkZWZpbmUgQk1fMzJfMTMgMHgwMDAwMDAwMWZmZmZlMDAwCisjZGVmaW5lIEJNXzEzXzMyIEJNXzMyXzEzCisjZGVmaW5lIEJNXzMzXzEzIDB4MDAwMDAwMDNmZmZmZTAwMAorI2RlZmluZSBCTV8xM18zMyBCTV8zM18xMworI2RlZmluZSBCTV8zNF8xMyAweDAwMDAwMDA3ZmZmZmUwMDAKKyNkZWZpbmUgQk1fMTNfMzQgQk1fMzRfMTMKKyNkZWZpbmUgQk1fMzVfMTMgMHgwMDAwMDAwZmZmZmZlMDAwCisjZGVmaW5lIEJNXzEzXzM1IEJNXzM1XzEzCisjZGVmaW5lIEJNXzM2XzEzIDB4MDAwMDAwMWZmZmZmZTAwMAorI2RlZmluZSBCTV8xM18zNiBCTV8zNl8xMworI2RlZmluZSBCTV8zN18xMyAweDAwMDAwMDNmZmZmZmUwMDAKKyNkZWZpbmUgQk1fMTNfMzcgQk1fMzdfMTMKKyNkZWZpbmUgQk1fMzhfMTMgMHgwMDAwMDA3ZmZmZmZlMDAwCisjZGVmaW5lIEJNXzEzXzM4IEJNXzM4XzEzCisjZGVmaW5lIEJNXzM5XzEzIDB4MDAwMDAwZmZmZmZmZTAwMAorI2RlZmluZSBCTV8xM18zOSBCTV8zOV8xMworI2RlZmluZSBCTV80MF8xMyAweDAwMDAwMWZmZmZmZmUwMDAKKyNkZWZpbmUgQk1fMTNfNDAgQk1fNDBfMTMKKyNkZWZpbmUgQk1fNDFfMTMgMHgwMDAwMDNmZmZmZmZlMDAwCisjZGVmaW5lIEJNXzEzXzQxIEJNXzQxXzEzCisjZGVmaW5lIEJNXzQyXzEzIDB4MDAwMDA3ZmZmZmZmZTAwMAorI2RlZmluZSBCTV8xM180MiBCTV80Ml8xMworI2RlZmluZSBCTV80M18xMyAweDAwMDAwZmZmZmZmZmUwMDAKKyNkZWZpbmUgQk1fMTNfNDMgQk1fNDNfMTMKKyNkZWZpbmUgQk1fNDRfMTMgMHgwMDAwMWZmZmZmZmZlMDAwCisjZGVmaW5lIEJNXzEzXzQ0IEJNXzQ0XzEzCisjZGVmaW5lIEJNXzQ1XzEzIDB4MDAwMDNmZmZmZmZmZTAwMAorI2RlZmluZSBCTV8xM180NSBCTV80NV8xMworI2RlZmluZSBCTV80Nl8xMyAweDAwMDA3ZmZmZmZmZmUwMDAKKyNkZWZpbmUgQk1fMTNfNDYgQk1fNDZfMTMKKyNkZWZpbmUgQk1fNDdfMTMgMHgwMDAwZmZmZmZmZmZlMDAwCisjZGVmaW5lIEJNXzEzXzQ3IEJNXzQ3XzEzCisjZGVmaW5lIEJNXzQ4XzEzIDB4MDAwMWZmZmZmZmZmZTAwMAorI2RlZmluZSBCTV8xM180OCBCTV80OF8xMworI2RlZmluZSBCTV80OV8xMyAweDAwMDNmZmZmZmZmZmUwMDAKKyNkZWZpbmUgQk1fMTNfNDkgQk1fNDlfMTMKKyNkZWZpbmUgQk1fNTBfMTMgMHgwMDA3ZmZmZmZmZmZlMDAwCisjZGVmaW5lIEJNXzEzXzUwIEJNXzUwXzEzCisjZGVmaW5lIEJNXzUxXzEzIDB4MDAwZmZmZmZmZmZmZTAwMAorI2RlZmluZSBCTV8xM181MSBCTV81MV8xMworI2RlZmluZSBCTV81Ml8xMyAweDAwMWZmZmZmZmZmZmUwMDAKKyNkZWZpbmUgQk1fMTNfNTIgQk1fNTJfMTMKKyNkZWZpbmUgQk1fNTNfMTMgMHgwMDNmZmZmZmZmZmZlMDAwCisjZGVmaW5lIEJNXzEzXzUzIEJNXzUzXzEzCisjZGVmaW5lIEJNXzU0XzEzIDB4MDA3ZmZmZmZmZmZmZTAwMAorI2RlZmluZSBCTV8xM181NCBCTV81NF8xMworI2RlZmluZSBCTV81NV8xMyAweDAwZmZmZmZmZmZmZmUwMDAKKyNkZWZpbmUgQk1fMTNfNTUgQk1fNTVfMTMKKyNkZWZpbmUgQk1fNTZfMTMgMHgwMWZmZmZmZmZmZmZlMDAwCisjZGVmaW5lIEJNXzEzXzU2IEJNXzU2XzEzCisjZGVmaW5lIEJNXzU3XzEzIDB4MDNmZmZmZmZmZmZmZTAwMAorI2RlZmluZSBCTV8xM181NyBCTV81N18xMworI2RlZmluZSBCTV81OF8xMyAweDA3ZmZmZmZmZmZmZmUwMDAKKyNkZWZpbmUgQk1fMTNfNTggQk1fNThfMTMKKyNkZWZpbmUgQk1fNTlfMTMgMHgwZmZmZmZmZmZmZmZlMDAwCisjZGVmaW5lIEJNXzEzXzU5IEJNXzU5XzEzCisjZGVmaW5lIEJNXzYwXzEzIDB4MWZmZmZmZmZmZmZmZTAwMAorI2RlZmluZSBCTV8xM182MCBCTV82MF8xMworI2RlZmluZSBCTV82MV8xMyAweDNmZmZmZmZmZmZmZmUwMDAKKyNkZWZpbmUgQk1fMTNfNjEgQk1fNjFfMTMKKyNkZWZpbmUgQk1fNjJfMTMgMHg3ZmZmZmZmZmZmZmZlMDAwCisjZGVmaW5lIEJNXzEzXzYyIEJNXzYyXzEzCisjZGVmaW5lIEJNXzYzXzEzIDB4ZmZmZmZmZmZmZmZmZTAwMAorI2RlZmluZSBCTV8xM182MyBCTV82M18xMworI2RlZmluZSBCTV8xNF8xNCAweDAwMDAwMDAwMDAwMDQwMDAKKyNkZWZpbmUgQk1fMTVfMTQgMHgwMDAwMDAwMDAwMDBjMDAwCisjZGVmaW5lIEJNXzE0XzE1IEJNXzE1XzE0CisjZGVmaW5lIEJNXzE2XzE0IDB4MDAwMDAwMDAwMDAxYzAwMAorI2RlZmluZSBCTV8xNF8xNiBCTV8xNl8xNAorI2RlZmluZSBCTV8xN18xNCAweDAwMDAwMDAwMDAwM2MwMDAKKyNkZWZpbmUgQk1fMTRfMTcgQk1fMTdfMTQKKyNkZWZpbmUgQk1fMThfMTQgMHgwMDAwMDAwMDAwMDdjMDAwCisjZGVmaW5lIEJNXzE0XzE4IEJNXzE4XzE0CisjZGVmaW5lIEJNXzE5XzE0IDB4MDAwMDAwMDAwMDBmYzAwMAorI2RlZmluZSBCTV8xNF8xOSBCTV8xOV8xNAorI2RlZmluZSBCTV8yMF8xNCAweDAwMDAwMDAwMDAxZmMwMDAKKyNkZWZpbmUgQk1fMTRfMjAgQk1fMjBfMTQKKyNkZWZpbmUgQk1fMjFfMTQgMHgwMDAwMDAwMDAwM2ZjMDAwCisjZGVmaW5lIEJNXzE0XzIxIEJNXzIxXzE0CisjZGVmaW5lIEJNXzIyXzE0IDB4MDAwMDAwMDAwMDdmYzAwMAorI2RlZmluZSBCTV8xNF8yMiBCTV8yMl8xNAorI2RlZmluZSBCTV8yM18xNCAweDAwMDAwMDAwMDBmZmMwMDAKKyNkZWZpbmUgQk1fMTRfMjMgQk1fMjNfMTQKKyNkZWZpbmUgQk1fMjRfMTQgMHgwMDAwMDAwMDAxZmZjMDAwCisjZGVmaW5lIEJNXzE0XzI0IEJNXzI0XzE0CisjZGVmaW5lIEJNXzI1XzE0IDB4MDAwMDAwMDAwM2ZmYzAwMAorI2RlZmluZSBCTV8xNF8yNSBCTV8yNV8xNAorI2RlZmluZSBCTV8yNl8xNCAweDAwMDAwMDAwMDdmZmMwMDAKKyNkZWZpbmUgQk1fMTRfMjYgQk1fMjZfMTQKKyNkZWZpbmUgQk1fMjdfMTQgMHgwMDAwMDAwMDBmZmZjMDAwCisjZGVmaW5lIEJNXzE0XzI3IEJNXzI3XzE0CisjZGVmaW5lIEJNXzI4XzE0IDB4MDAwMDAwMDAxZmZmYzAwMAorI2RlZmluZSBCTV8xNF8yOCBCTV8yOF8xNAorI2RlZmluZSBCTV8yOV8xNCAweDAwMDAwMDAwM2ZmZmMwMDAKKyNkZWZpbmUgQk1fMTRfMjkgQk1fMjlfMTQKKyNkZWZpbmUgQk1fMzBfMTQgMHgwMDAwMDAwMDdmZmZjMDAwCisjZGVmaW5lIEJNXzE0XzMwIEJNXzMwXzE0CisjZGVmaW5lIEJNXzMxXzE0IDB4MDAwMDAwMDBmZmZmYzAwMAorI2RlZmluZSBCTV8xNF8zMSBCTV8zMV8xNAorI2RlZmluZSBCTV8zMl8xNCAweDAwMDAwMDAxZmZmZmMwMDAKKyNkZWZpbmUgQk1fMTRfMzIgQk1fMzJfMTQKKyNkZWZpbmUgQk1fMzNfMTQgMHgwMDAwMDAwM2ZmZmZjMDAwCisjZGVmaW5lIEJNXzE0XzMzIEJNXzMzXzE0CisjZGVmaW5lIEJNXzM0XzE0IDB4MDAwMDAwMDdmZmZmYzAwMAorI2RlZmluZSBCTV8xNF8zNCBCTV8zNF8xNAorI2RlZmluZSBCTV8zNV8xNCAweDAwMDAwMDBmZmZmZmMwMDAKKyNkZWZpbmUgQk1fMTRfMzUgQk1fMzVfMTQKKyNkZWZpbmUgQk1fMzZfMTQgMHgwMDAwMDAxZmZmZmZjMDAwCisjZGVmaW5lIEJNXzE0XzM2IEJNXzM2XzE0CisjZGVmaW5lIEJNXzM3XzE0IDB4MDAwMDAwM2ZmZmZmYzAwMAorI2RlZmluZSBCTV8xNF8zNyBCTV8zN18xNAorI2RlZmluZSBCTV8zOF8xNCAweDAwMDAwMDdmZmZmZmMwMDAKKyNkZWZpbmUgQk1fMTRfMzggQk1fMzhfMTQKKyNkZWZpbmUgQk1fMzlfMTQgMHgwMDAwMDBmZmZmZmZjMDAwCisjZGVmaW5lIEJNXzE0XzM5IEJNXzM5XzE0CisjZGVmaW5lIEJNXzQwXzE0IDB4MDAwMDAxZmZmZmZmYzAwMAorI2RlZmluZSBCTV8xNF80MCBCTV80MF8xNAorI2RlZmluZSBCTV80MV8xNCAweDAwMDAwM2ZmZmZmZmMwMDAKKyNkZWZpbmUgQk1fMTRfNDEgQk1fNDFfMTQKKyNkZWZpbmUgQk1fNDJfMTQgMHgwMDAwMDdmZmZmZmZjMDAwCisjZGVmaW5lIEJNXzE0XzQyIEJNXzQyXzE0CisjZGVmaW5lIEJNXzQzXzE0IDB4MDAwMDBmZmZmZmZmYzAwMAorI2RlZmluZSBCTV8xNF80MyBCTV80M18xNAorI2RlZmluZSBCTV80NF8xNCAweDAwMDAxZmZmZmZmZmMwMDAKKyNkZWZpbmUgQk1fMTRfNDQgQk1fNDRfMTQKKyNkZWZpbmUgQk1fNDVfMTQgMHgwMDAwM2ZmZmZmZmZjMDAwCisjZGVmaW5lIEJNXzE0XzQ1IEJNXzQ1XzE0CisjZGVmaW5lIEJNXzQ2XzE0IDB4MDAwMDdmZmZmZmZmYzAwMAorI2RlZmluZSBCTV8xNF80NiBCTV80Nl8xNAorI2RlZmluZSBCTV80N18xNCAweDAwMDBmZmZmZmZmZmMwMDAKKyNkZWZpbmUgQk1fMTRfNDcgQk1fNDdfMTQKKyNkZWZpbmUgQk1fNDhfMTQgMHgwMDAxZmZmZmZmZmZjMDAwCisjZGVmaW5lIEJNXzE0XzQ4IEJNXzQ4XzE0CisjZGVmaW5lIEJNXzQ5XzE0IDB4MDAwM2ZmZmZmZmZmYzAwMAorI2RlZmluZSBCTV8xNF80OSBCTV80OV8xNAorI2RlZmluZSBCTV81MF8xNCAweDAwMDdmZmZmZmZmZmMwMDAKKyNkZWZpbmUgQk1fMTRfNTAgQk1fNTBfMTQKKyNkZWZpbmUgQk1fNTFfMTQgMHgwMDBmZmZmZmZmZmZjMDAwCisjZGVmaW5lIEJNXzE0XzUxIEJNXzUxXzE0CisjZGVmaW5lIEJNXzUyXzE0IDB4MDAxZmZmZmZmZmZmYzAwMAorI2RlZmluZSBCTV8xNF81MiBCTV81Ml8xNAorI2RlZmluZSBCTV81M18xNCAweDAwM2ZmZmZmZmZmZmMwMDAKKyNkZWZpbmUgQk1fMTRfNTMgQk1fNTNfMTQKKyNkZWZpbmUgQk1fNTRfMTQgMHgwMDdmZmZmZmZmZmZjMDAwCisjZGVmaW5lIEJNXzE0XzU0IEJNXzU0XzE0CisjZGVmaW5lIEJNXzU1XzE0IDB4MDBmZmZmZmZmZmZmYzAwMAorI2RlZmluZSBCTV8xNF81NSBCTV81NV8xNAorI2RlZmluZSBCTV81Nl8xNCAweDAxZmZmZmZmZmZmZmMwMDAKKyNkZWZpbmUgQk1fMTRfNTYgQk1fNTZfMTQKKyNkZWZpbmUgQk1fNTdfMTQgMHgwM2ZmZmZmZmZmZmZjMDAwCisjZGVmaW5lIEJNXzE0XzU3IEJNXzU3XzE0CisjZGVmaW5lIEJNXzU4XzE0IDB4MDdmZmZmZmZmZmZmYzAwMAorI2RlZmluZSBCTV8xNF81OCBCTV81OF8xNAorI2RlZmluZSBCTV81OV8xNCAweDBmZmZmZmZmZmZmZmMwMDAKKyNkZWZpbmUgQk1fMTRfNTkgQk1fNTlfMTQKKyNkZWZpbmUgQk1fNjBfMTQgMHgxZmZmZmZmZmZmZmZjMDAwCisjZGVmaW5lIEJNXzE0XzYwIEJNXzYwXzE0CisjZGVmaW5lIEJNXzYxXzE0IDB4M2ZmZmZmZmZmZmZmYzAwMAorI2RlZmluZSBCTV8xNF82MSBCTV82MV8xNAorI2RlZmluZSBCTV82Ml8xNCAweDdmZmZmZmZmZmZmZmMwMDAKKyNkZWZpbmUgQk1fMTRfNjIgQk1fNjJfMTQKKyNkZWZpbmUgQk1fNjNfMTQgMHhmZmZmZmZmZmZmZmZjMDAwCisjZGVmaW5lIEJNXzE0XzYzIEJNXzYzXzE0CisjZGVmaW5lIEJNXzE1XzE1IDB4MDAwMDAwMDAwMDAwODAwMAorI2RlZmluZSBCTV8xNl8xNSAweDAwMDAwMDAwMDAwMTgwMDAKKyNkZWZpbmUgQk1fMTVfMTYgQk1fMTZfMTUKKyNkZWZpbmUgQk1fMTdfMTUgMHgwMDAwMDAwMDAwMDM4MDAwCisjZGVmaW5lIEJNXzE1XzE3IEJNXzE3XzE1CisjZGVmaW5lIEJNXzE4XzE1IDB4MDAwMDAwMDAwMDA3ODAwMAorI2RlZmluZSBCTV8xNV8xOCBCTV8xOF8xNQorI2RlZmluZSBCTV8xOV8xNSAweDAwMDAwMDAwMDAwZjgwMDAKKyNkZWZpbmUgQk1fMTVfMTkgQk1fMTlfMTUKKyNkZWZpbmUgQk1fMjBfMTUgMHgwMDAwMDAwMDAwMWY4MDAwCisjZGVmaW5lIEJNXzE1XzIwIEJNXzIwXzE1CisjZGVmaW5lIEJNXzIxXzE1IDB4MDAwMDAwMDAwMDNmODAwMAorI2RlZmluZSBCTV8xNV8yMSBCTV8yMV8xNQorI2RlZmluZSBCTV8yMl8xNSAweDAwMDAwMDAwMDA3ZjgwMDAKKyNkZWZpbmUgQk1fMTVfMjIgQk1fMjJfMTUKKyNkZWZpbmUgQk1fMjNfMTUgMHgwMDAwMDAwMDAwZmY4MDAwCisjZGVmaW5lIEJNXzE1XzIzIEJNXzIzXzE1CisjZGVmaW5lIEJNXzI0XzE1IDB4MDAwMDAwMDAwMWZmODAwMAorI2RlZmluZSBCTV8xNV8yNCBCTV8yNF8xNQorI2RlZmluZSBCTV8yNV8xNSAweDAwMDAwMDAwMDNmZjgwMDAKKyNkZWZpbmUgQk1fMTVfMjUgQk1fMjVfMTUKKyNkZWZpbmUgQk1fMjZfMTUgMHgwMDAwMDAwMDA3ZmY4MDAwCisjZGVmaW5lIEJNXzE1XzI2IEJNXzI2XzE1CisjZGVmaW5lIEJNXzI3XzE1IDB4MDAwMDAwMDAwZmZmODAwMAorI2RlZmluZSBCTV8xNV8yNyBCTV8yN18xNQorI2RlZmluZSBCTV8yOF8xNSAweDAwMDAwMDAwMWZmZjgwMDAKKyNkZWZpbmUgQk1fMTVfMjggQk1fMjhfMTUKKyNkZWZpbmUgQk1fMjlfMTUgMHgwMDAwMDAwMDNmZmY4MDAwCisjZGVmaW5lIEJNXzE1XzI5IEJNXzI5XzE1CisjZGVmaW5lIEJNXzMwXzE1IDB4MDAwMDAwMDA3ZmZmODAwMAorI2RlZmluZSBCTV8xNV8zMCBCTV8zMF8xNQorI2RlZmluZSBCTV8zMV8xNSAweDAwMDAwMDAwZmZmZjgwMDAKKyNkZWZpbmUgQk1fMTVfMzEgQk1fMzFfMTUKKyNkZWZpbmUgQk1fMzJfMTUgMHgwMDAwMDAwMWZmZmY4MDAwCisjZGVmaW5lIEJNXzE1XzMyIEJNXzMyXzE1CisjZGVmaW5lIEJNXzMzXzE1IDB4MDAwMDAwMDNmZmZmODAwMAorI2RlZmluZSBCTV8xNV8zMyBCTV8zM18xNQorI2RlZmluZSBCTV8zNF8xNSAweDAwMDAwMDA3ZmZmZjgwMDAKKyNkZWZpbmUgQk1fMTVfMzQgQk1fMzRfMTUKKyNkZWZpbmUgQk1fMzVfMTUgMHgwMDAwMDAwZmZmZmY4MDAwCisjZGVmaW5lIEJNXzE1XzM1IEJNXzM1XzE1CisjZGVmaW5lIEJNXzM2XzE1IDB4MDAwMDAwMWZmZmZmODAwMAorI2RlZmluZSBCTV8xNV8zNiBCTV8zNl8xNQorI2RlZmluZSBCTV8zN18xNSAweDAwMDAwMDNmZmZmZjgwMDAKKyNkZWZpbmUgQk1fMTVfMzcgQk1fMzdfMTUKKyNkZWZpbmUgQk1fMzhfMTUgMHgwMDAwMDA3ZmZmZmY4MDAwCisjZGVmaW5lIEJNXzE1XzM4IEJNXzM4XzE1CisjZGVmaW5lIEJNXzM5XzE1IDB4MDAwMDAwZmZmZmZmODAwMAorI2RlZmluZSBCTV8xNV8zOSBCTV8zOV8xNQorI2RlZmluZSBCTV80MF8xNSAweDAwMDAwMWZmZmZmZjgwMDAKKyNkZWZpbmUgQk1fMTVfNDAgQk1fNDBfMTUKKyNkZWZpbmUgQk1fNDFfMTUgMHgwMDAwMDNmZmZmZmY4MDAwCisjZGVmaW5lIEJNXzE1XzQxIEJNXzQxXzE1CisjZGVmaW5lIEJNXzQyXzE1IDB4MDAwMDA3ZmZmZmZmODAwMAorI2RlZmluZSBCTV8xNV80MiBCTV80Ml8xNQorI2RlZmluZSBCTV80M18xNSAweDAwMDAwZmZmZmZmZjgwMDAKKyNkZWZpbmUgQk1fMTVfNDMgQk1fNDNfMTUKKyNkZWZpbmUgQk1fNDRfMTUgMHgwMDAwMWZmZmZmZmY4MDAwCisjZGVmaW5lIEJNXzE1XzQ0IEJNXzQ0XzE1CisjZGVmaW5lIEJNXzQ1XzE1IDB4MDAwMDNmZmZmZmZmODAwMAorI2RlZmluZSBCTV8xNV80NSBCTV80NV8xNQorI2RlZmluZSBCTV80Nl8xNSAweDAwMDA3ZmZmZmZmZjgwMDAKKyNkZWZpbmUgQk1fMTVfNDYgQk1fNDZfMTUKKyNkZWZpbmUgQk1fNDdfMTUgMHgwMDAwZmZmZmZmZmY4MDAwCisjZGVmaW5lIEJNXzE1XzQ3IEJNXzQ3XzE1CisjZGVmaW5lIEJNXzQ4XzE1IDB4MDAwMWZmZmZmZmZmODAwMAorI2RlZmluZSBCTV8xNV80OCBCTV80OF8xNQorI2RlZmluZSBCTV80OV8xNSAweDAwMDNmZmZmZmZmZjgwMDAKKyNkZWZpbmUgQk1fMTVfNDkgQk1fNDlfMTUKKyNkZWZpbmUgQk1fNTBfMTUgMHgwMDA3ZmZmZmZmZmY4MDAwCisjZGVmaW5lIEJNXzE1XzUwIEJNXzUwXzE1CisjZGVmaW5lIEJNXzUxXzE1IDB4MDAwZmZmZmZmZmZmODAwMAorI2RlZmluZSBCTV8xNV81MSBCTV81MV8xNQorI2RlZmluZSBCTV81Ml8xNSAweDAwMWZmZmZmZmZmZjgwMDAKKyNkZWZpbmUgQk1fMTVfNTIgQk1fNTJfMTUKKyNkZWZpbmUgQk1fNTNfMTUgMHgwMDNmZmZmZmZmZmY4MDAwCisjZGVmaW5lIEJNXzE1XzUzIEJNXzUzXzE1CisjZGVmaW5lIEJNXzU0XzE1IDB4MDA3ZmZmZmZmZmZmODAwMAorI2RlZmluZSBCTV8xNV81NCBCTV81NF8xNQorI2RlZmluZSBCTV81NV8xNSAweDAwZmZmZmZmZmZmZjgwMDAKKyNkZWZpbmUgQk1fMTVfNTUgQk1fNTVfMTUKKyNkZWZpbmUgQk1fNTZfMTUgMHgwMWZmZmZmZmZmZmY4MDAwCisjZGVmaW5lIEJNXzE1XzU2IEJNXzU2XzE1CisjZGVmaW5lIEJNXzU3XzE1IDB4MDNmZmZmZmZmZmZmODAwMAorI2RlZmluZSBCTV8xNV81NyBCTV81N18xNQorI2RlZmluZSBCTV81OF8xNSAweDA3ZmZmZmZmZmZmZjgwMDAKKyNkZWZpbmUgQk1fMTVfNTggQk1fNThfMTUKKyNkZWZpbmUgQk1fNTlfMTUgMHgwZmZmZmZmZmZmZmY4MDAwCisjZGVmaW5lIEJNXzE1XzU5IEJNXzU5XzE1CisjZGVmaW5lIEJNXzYwXzE1IDB4MWZmZmZmZmZmZmZmODAwMAorI2RlZmluZSBCTV8xNV82MCBCTV82MF8xNQorI2RlZmluZSBCTV82MV8xNSAweDNmZmZmZmZmZmZmZjgwMDAKKyNkZWZpbmUgQk1fMTVfNjEgQk1fNjFfMTUKKyNkZWZpbmUgQk1fNjJfMTUgMHg3ZmZmZmZmZmZmZmY4MDAwCisjZGVmaW5lIEJNXzE1XzYyIEJNXzYyXzE1CisjZGVmaW5lIEJNXzYzXzE1IDB4ZmZmZmZmZmZmZmZmODAwMAorI2RlZmluZSBCTV8xNV82MyBCTV82M18xNQorI2RlZmluZSBCTV8xNl8xNiAweDAwMDAwMDAwMDAwMTAwMDAKKyNkZWZpbmUgQk1fMTdfMTYgMHgwMDAwMDAwMDAwMDMwMDAwCisjZGVmaW5lIEJNXzE2XzE3IEJNXzE3XzE2CisjZGVmaW5lIEJNXzE4XzE2IDB4MDAwMDAwMDAwMDA3MDAwMAorI2RlZmluZSBCTV8xNl8xOCBCTV8xOF8xNgorI2RlZmluZSBCTV8xOV8xNiAweDAwMDAwMDAwMDAwZjAwMDAKKyNkZWZpbmUgQk1fMTZfMTkgQk1fMTlfMTYKKyNkZWZpbmUgQk1fMjBfMTYgMHgwMDAwMDAwMDAwMWYwMDAwCisjZGVmaW5lIEJNXzE2XzIwIEJNXzIwXzE2CisjZGVmaW5lIEJNXzIxXzE2IDB4MDAwMDAwMDAwMDNmMDAwMAorI2RlZmluZSBCTV8xNl8yMSBCTV8yMV8xNgorI2RlZmluZSBCTV8yMl8xNiAweDAwMDAwMDAwMDA3ZjAwMDAKKyNkZWZpbmUgQk1fMTZfMjIgQk1fMjJfMTYKKyNkZWZpbmUgQk1fMjNfMTYgMHgwMDAwMDAwMDAwZmYwMDAwCisjZGVmaW5lIEJNXzE2XzIzIEJNXzIzXzE2CisjZGVmaW5lIEJNXzI0XzE2IDB4MDAwMDAwMDAwMWZmMDAwMAorI2RlZmluZSBCTV8xNl8yNCBCTV8yNF8xNgorI2RlZmluZSBCTV8yNV8xNiAweDAwMDAwMDAwMDNmZjAwMDAKKyNkZWZpbmUgQk1fMTZfMjUgQk1fMjVfMTYKKyNkZWZpbmUgQk1fMjZfMTYgMHgwMDAwMDAwMDA3ZmYwMDAwCisjZGVmaW5lIEJNXzE2XzI2IEJNXzI2XzE2CisjZGVmaW5lIEJNXzI3XzE2IDB4MDAwMDAwMDAwZmZmMDAwMAorI2RlZmluZSBCTV8xNl8yNyBCTV8yN18xNgorI2RlZmluZSBCTV8yOF8xNiAweDAwMDAwMDAwMWZmZjAwMDAKKyNkZWZpbmUgQk1fMTZfMjggQk1fMjhfMTYKKyNkZWZpbmUgQk1fMjlfMTYgMHgwMDAwMDAwMDNmZmYwMDAwCisjZGVmaW5lIEJNXzE2XzI5IEJNXzI5XzE2CisjZGVmaW5lIEJNXzMwXzE2IDB4MDAwMDAwMDA3ZmZmMDAwMAorI2RlZmluZSBCTV8xNl8zMCBCTV8zMF8xNgorI2RlZmluZSBCTV8zMV8xNiAweDAwMDAwMDAwZmZmZjAwMDAKKyNkZWZpbmUgQk1fMTZfMzEgQk1fMzFfMTYKKyNkZWZpbmUgQk1fMzJfMTYgMHgwMDAwMDAwMWZmZmYwMDAwCisjZGVmaW5lIEJNXzE2XzMyIEJNXzMyXzE2CisjZGVmaW5lIEJNXzMzXzE2IDB4MDAwMDAwMDNmZmZmMDAwMAorI2RlZmluZSBCTV8xNl8zMyBCTV8zM18xNgorI2RlZmluZSBCTV8zNF8xNiAweDAwMDAwMDA3ZmZmZjAwMDAKKyNkZWZpbmUgQk1fMTZfMzQgQk1fMzRfMTYKKyNkZWZpbmUgQk1fMzVfMTYgMHgwMDAwMDAwZmZmZmYwMDAwCisjZGVmaW5lIEJNXzE2XzM1IEJNXzM1XzE2CisjZGVmaW5lIEJNXzM2XzE2IDB4MDAwMDAwMWZmZmZmMDAwMAorI2RlZmluZSBCTV8xNl8zNiBCTV8zNl8xNgorI2RlZmluZSBCTV8zN18xNiAweDAwMDAwMDNmZmZmZjAwMDAKKyNkZWZpbmUgQk1fMTZfMzcgQk1fMzdfMTYKKyNkZWZpbmUgQk1fMzhfMTYgMHgwMDAwMDA3ZmZmZmYwMDAwCisjZGVmaW5lIEJNXzE2XzM4IEJNXzM4XzE2CisjZGVmaW5lIEJNXzM5XzE2IDB4MDAwMDAwZmZmZmZmMDAwMAorI2RlZmluZSBCTV8xNl8zOSBCTV8zOV8xNgorI2RlZmluZSBCTV80MF8xNiAweDAwMDAwMWZmZmZmZjAwMDAKKyNkZWZpbmUgQk1fMTZfNDAgQk1fNDBfMTYKKyNkZWZpbmUgQk1fNDFfMTYgMHgwMDAwMDNmZmZmZmYwMDAwCisjZGVmaW5lIEJNXzE2XzQxIEJNXzQxXzE2CisjZGVmaW5lIEJNXzQyXzE2IDB4MDAwMDA3ZmZmZmZmMDAwMAorI2RlZmluZSBCTV8xNl80MiBCTV80Ml8xNgorI2RlZmluZSBCTV80M18xNiAweDAwMDAwZmZmZmZmZjAwMDAKKyNkZWZpbmUgQk1fMTZfNDMgQk1fNDNfMTYKKyNkZWZpbmUgQk1fNDRfMTYgMHgwMDAwMWZmZmZmZmYwMDAwCisjZGVmaW5lIEJNXzE2XzQ0IEJNXzQ0XzE2CisjZGVmaW5lIEJNXzQ1XzE2IDB4MDAwMDNmZmZmZmZmMDAwMAorI2RlZmluZSBCTV8xNl80NSBCTV80NV8xNgorI2RlZmluZSBCTV80Nl8xNiAweDAwMDA3ZmZmZmZmZjAwMDAKKyNkZWZpbmUgQk1fMTZfNDYgQk1fNDZfMTYKKyNkZWZpbmUgQk1fNDdfMTYgMHgwMDAwZmZmZmZmZmYwMDAwCisjZGVmaW5lIEJNXzE2XzQ3IEJNXzQ3XzE2CisjZGVmaW5lIEJNXzQ4XzE2IDB4MDAwMWZmZmZmZmZmMDAwMAorI2RlZmluZSBCTV8xNl80OCBCTV80OF8xNgorI2RlZmluZSBCTV80OV8xNiAweDAwMDNmZmZmZmZmZjAwMDAKKyNkZWZpbmUgQk1fMTZfNDkgQk1fNDlfMTYKKyNkZWZpbmUgQk1fNTBfMTYgMHgwMDA3ZmZmZmZmZmYwMDAwCisjZGVmaW5lIEJNXzE2XzUwIEJNXzUwXzE2CisjZGVmaW5lIEJNXzUxXzE2IDB4MDAwZmZmZmZmZmZmMDAwMAorI2RlZmluZSBCTV8xNl81MSBCTV81MV8xNgorI2RlZmluZSBCTV81Ml8xNiAweDAwMWZmZmZmZmZmZjAwMDAKKyNkZWZpbmUgQk1fMTZfNTIgQk1fNTJfMTYKKyNkZWZpbmUgQk1fNTNfMTYgMHgwMDNmZmZmZmZmZmYwMDAwCisjZGVmaW5lIEJNXzE2XzUzIEJNXzUzXzE2CisjZGVmaW5lIEJNXzU0XzE2IDB4MDA3ZmZmZmZmZmZmMDAwMAorI2RlZmluZSBCTV8xNl81NCBCTV81NF8xNgorI2RlZmluZSBCTV81NV8xNiAweDAwZmZmZmZmZmZmZjAwMDAKKyNkZWZpbmUgQk1fMTZfNTUgQk1fNTVfMTYKKyNkZWZpbmUgQk1fNTZfMTYgMHgwMWZmZmZmZmZmZmYwMDAwCisjZGVmaW5lIEJNXzE2XzU2IEJNXzU2XzE2CisjZGVmaW5lIEJNXzU3XzE2IDB4MDNmZmZmZmZmZmZmMDAwMAorI2RlZmluZSBCTV8xNl81NyBCTV81N18xNgorI2RlZmluZSBCTV81OF8xNiAweDA3ZmZmZmZmZmZmZjAwMDAKKyNkZWZpbmUgQk1fMTZfNTggQk1fNThfMTYKKyNkZWZpbmUgQk1fNTlfMTYgMHgwZmZmZmZmZmZmZmYwMDAwCisjZGVmaW5lIEJNXzE2XzU5IEJNXzU5XzE2CisjZGVmaW5lIEJNXzYwXzE2IDB4MWZmZmZmZmZmZmZmMDAwMAorI2RlZmluZSBCTV8xNl82MCBCTV82MF8xNgorI2RlZmluZSBCTV82MV8xNiAweDNmZmZmZmZmZmZmZjAwMDAKKyNkZWZpbmUgQk1fMTZfNjEgQk1fNjFfMTYKKyNkZWZpbmUgQk1fNjJfMTYgMHg3ZmZmZmZmZmZmZmYwMDAwCisjZGVmaW5lIEJNXzE2XzYyIEJNXzYyXzE2CisjZGVmaW5lIEJNXzYzXzE2IDB4ZmZmZmZmZmZmZmZmMDAwMAorI2RlZmluZSBCTV8xNl82MyBCTV82M18xNgorI2RlZmluZSBCTV8xN18xNyAweDAwMDAwMDAwMDAwMjAwMDAKKyNkZWZpbmUgQk1fMThfMTcgMHgwMDAwMDAwMDAwMDYwMDAwCisjZGVmaW5lIEJNXzE3XzE4IEJNXzE4XzE3CisjZGVmaW5lIEJNXzE5XzE3IDB4MDAwMDAwMDAwMDBlMDAwMAorI2RlZmluZSBCTV8xN18xOSBCTV8xOV8xNworI2RlZmluZSBCTV8yMF8xNyAweDAwMDAwMDAwMDAxZTAwMDAKKyNkZWZpbmUgQk1fMTdfMjAgQk1fMjBfMTcKKyNkZWZpbmUgQk1fMjFfMTcgMHgwMDAwMDAwMDAwM2UwMDAwCisjZGVmaW5lIEJNXzE3XzIxIEJNXzIxXzE3CisjZGVmaW5lIEJNXzIyXzE3IDB4MDAwMDAwMDAwMDdlMDAwMAorI2RlZmluZSBCTV8xN18yMiBCTV8yMl8xNworI2RlZmluZSBCTV8yM18xNyAweDAwMDAwMDAwMDBmZTAwMDAKKyNkZWZpbmUgQk1fMTdfMjMgQk1fMjNfMTcKKyNkZWZpbmUgQk1fMjRfMTcgMHgwMDAwMDAwMDAxZmUwMDAwCisjZGVmaW5lIEJNXzE3XzI0IEJNXzI0XzE3CisjZGVmaW5lIEJNXzI1XzE3IDB4MDAwMDAwMDAwM2ZlMDAwMAorI2RlZmluZSBCTV8xN18yNSBCTV8yNV8xNworI2RlZmluZSBCTV8yNl8xNyAweDAwMDAwMDAwMDdmZTAwMDAKKyNkZWZpbmUgQk1fMTdfMjYgQk1fMjZfMTcKKyNkZWZpbmUgQk1fMjdfMTcgMHgwMDAwMDAwMDBmZmUwMDAwCisjZGVmaW5lIEJNXzE3XzI3IEJNXzI3XzE3CisjZGVmaW5lIEJNXzI4XzE3IDB4MDAwMDAwMDAxZmZlMDAwMAorI2RlZmluZSBCTV8xN18yOCBCTV8yOF8xNworI2RlZmluZSBCTV8yOV8xNyAweDAwMDAwMDAwM2ZmZTAwMDAKKyNkZWZpbmUgQk1fMTdfMjkgQk1fMjlfMTcKKyNkZWZpbmUgQk1fMzBfMTcgMHgwMDAwMDAwMDdmZmUwMDAwCisjZGVmaW5lIEJNXzE3XzMwIEJNXzMwXzE3CisjZGVmaW5lIEJNXzMxXzE3IDB4MDAwMDAwMDBmZmZlMDAwMAorI2RlZmluZSBCTV8xN18zMSBCTV8zMV8xNworI2RlZmluZSBCTV8zMl8xNyAweDAwMDAwMDAxZmZmZTAwMDAKKyNkZWZpbmUgQk1fMTdfMzIgQk1fMzJfMTcKKyNkZWZpbmUgQk1fMzNfMTcgMHgwMDAwMDAwM2ZmZmUwMDAwCisjZGVmaW5lIEJNXzE3XzMzIEJNXzMzXzE3CisjZGVmaW5lIEJNXzM0XzE3IDB4MDAwMDAwMDdmZmZlMDAwMAorI2RlZmluZSBCTV8xN18zNCBCTV8zNF8xNworI2RlZmluZSBCTV8zNV8xNyAweDAwMDAwMDBmZmZmZTAwMDAKKyNkZWZpbmUgQk1fMTdfMzUgQk1fMzVfMTcKKyNkZWZpbmUgQk1fMzZfMTcgMHgwMDAwMDAxZmZmZmUwMDAwCisjZGVmaW5lIEJNXzE3XzM2IEJNXzM2XzE3CisjZGVmaW5lIEJNXzM3XzE3IDB4MDAwMDAwM2ZmZmZlMDAwMAorI2RlZmluZSBCTV8xN18zNyBCTV8zN18xNworI2RlZmluZSBCTV8zOF8xNyAweDAwMDAwMDdmZmZmZTAwMDAKKyNkZWZpbmUgQk1fMTdfMzggQk1fMzhfMTcKKyNkZWZpbmUgQk1fMzlfMTcgMHgwMDAwMDBmZmZmZmUwMDAwCisjZGVmaW5lIEJNXzE3XzM5IEJNXzM5XzE3CisjZGVmaW5lIEJNXzQwXzE3IDB4MDAwMDAxZmZmZmZlMDAwMAorI2RlZmluZSBCTV8xN180MCBCTV80MF8xNworI2RlZmluZSBCTV80MV8xNyAweDAwMDAwM2ZmZmZmZTAwMDAKKyNkZWZpbmUgQk1fMTdfNDEgQk1fNDFfMTcKKyNkZWZpbmUgQk1fNDJfMTcgMHgwMDAwMDdmZmZmZmUwMDAwCisjZGVmaW5lIEJNXzE3XzQyIEJNXzQyXzE3CisjZGVmaW5lIEJNXzQzXzE3IDB4MDAwMDBmZmZmZmZlMDAwMAorI2RlZmluZSBCTV8xN180MyBCTV80M18xNworI2RlZmluZSBCTV80NF8xNyAweDAwMDAxZmZmZmZmZTAwMDAKKyNkZWZpbmUgQk1fMTdfNDQgQk1fNDRfMTcKKyNkZWZpbmUgQk1fNDVfMTcgMHgwMDAwM2ZmZmZmZmUwMDAwCisjZGVmaW5lIEJNXzE3XzQ1IEJNXzQ1XzE3CisjZGVmaW5lIEJNXzQ2XzE3IDB4MDAwMDdmZmZmZmZlMDAwMAorI2RlZmluZSBCTV8xN180NiBCTV80Nl8xNworI2RlZmluZSBCTV80N18xNyAweDAwMDBmZmZmZmZmZTAwMDAKKyNkZWZpbmUgQk1fMTdfNDcgQk1fNDdfMTcKKyNkZWZpbmUgQk1fNDhfMTcgMHgwMDAxZmZmZmZmZmUwMDAwCisjZGVmaW5lIEJNXzE3XzQ4IEJNXzQ4XzE3CisjZGVmaW5lIEJNXzQ5XzE3IDB4MDAwM2ZmZmZmZmZlMDAwMAorI2RlZmluZSBCTV8xN180OSBCTV80OV8xNworI2RlZmluZSBCTV81MF8xNyAweDAwMDdmZmZmZmZmZTAwMDAKKyNkZWZpbmUgQk1fMTdfNTAgQk1fNTBfMTcKKyNkZWZpbmUgQk1fNTFfMTcgMHgwMDBmZmZmZmZmZmUwMDAwCisjZGVmaW5lIEJNXzE3XzUxIEJNXzUxXzE3CisjZGVmaW5lIEJNXzUyXzE3IDB4MDAxZmZmZmZmZmZlMDAwMAorI2RlZmluZSBCTV8xN181MiBCTV81Ml8xNworI2RlZmluZSBCTV81M18xNyAweDAwM2ZmZmZmZmZmZTAwMDAKKyNkZWZpbmUgQk1fMTdfNTMgQk1fNTNfMTcKKyNkZWZpbmUgQk1fNTRfMTcgMHgwMDdmZmZmZmZmZmUwMDAwCisjZGVmaW5lIEJNXzE3XzU0IEJNXzU0XzE3CisjZGVmaW5lIEJNXzU1XzE3IDB4MDBmZmZmZmZmZmZlMDAwMAorI2RlZmluZSBCTV8xN181NSBCTV81NV8xNworI2RlZmluZSBCTV81Nl8xNyAweDAxZmZmZmZmZmZmZTAwMDAKKyNkZWZpbmUgQk1fMTdfNTYgQk1fNTZfMTcKKyNkZWZpbmUgQk1fNTdfMTcgMHgwM2ZmZmZmZmZmZmUwMDAwCisjZGVmaW5lIEJNXzE3XzU3IEJNXzU3XzE3CisjZGVmaW5lIEJNXzU4XzE3IDB4MDdmZmZmZmZmZmZlMDAwMAorI2RlZmluZSBCTV8xN181OCBCTV81OF8xNworI2RlZmluZSBCTV81OV8xNyAweDBmZmZmZmZmZmZmZTAwMDAKKyNkZWZpbmUgQk1fMTdfNTkgQk1fNTlfMTcKKyNkZWZpbmUgQk1fNjBfMTcgMHgxZmZmZmZmZmZmZmUwMDAwCisjZGVmaW5lIEJNXzE3XzYwIEJNXzYwXzE3CisjZGVmaW5lIEJNXzYxXzE3IDB4M2ZmZmZmZmZmZmZlMDAwMAorI2RlZmluZSBCTV8xN182MSBCTV82MV8xNworI2RlZmluZSBCTV82Ml8xNyAweDdmZmZmZmZmZmZmZTAwMDAKKyNkZWZpbmUgQk1fMTdfNjIgQk1fNjJfMTcKKyNkZWZpbmUgQk1fNjNfMTcgMHhmZmZmZmZmZmZmZmUwMDAwCisjZGVmaW5lIEJNXzE3XzYzIEJNXzYzXzE3CisjZGVmaW5lIEJNXzE4XzE4IDB4MDAwMDAwMDAwMDA0MDAwMAorI2RlZmluZSBCTV8xOV8xOCAweDAwMDAwMDAwMDAwYzAwMDAKKyNkZWZpbmUgQk1fMThfMTkgQk1fMTlfMTgKKyNkZWZpbmUgQk1fMjBfMTggMHgwMDAwMDAwMDAwMWMwMDAwCisjZGVmaW5lIEJNXzE4XzIwIEJNXzIwXzE4CisjZGVmaW5lIEJNXzIxXzE4IDB4MDAwMDAwMDAwMDNjMDAwMAorI2RlZmluZSBCTV8xOF8yMSBCTV8yMV8xOAorI2RlZmluZSBCTV8yMl8xOCAweDAwMDAwMDAwMDA3YzAwMDAKKyNkZWZpbmUgQk1fMThfMjIgQk1fMjJfMTgKKyNkZWZpbmUgQk1fMjNfMTggMHgwMDAwMDAwMDAwZmMwMDAwCisjZGVmaW5lIEJNXzE4XzIzIEJNXzIzXzE4CisjZGVmaW5lIEJNXzI0XzE4IDB4MDAwMDAwMDAwMWZjMDAwMAorI2RlZmluZSBCTV8xOF8yNCBCTV8yNF8xOAorI2RlZmluZSBCTV8yNV8xOCAweDAwMDAwMDAwMDNmYzAwMDAKKyNkZWZpbmUgQk1fMThfMjUgQk1fMjVfMTgKKyNkZWZpbmUgQk1fMjZfMTggMHgwMDAwMDAwMDA3ZmMwMDAwCisjZGVmaW5lIEJNXzE4XzI2IEJNXzI2XzE4CisjZGVmaW5lIEJNXzI3XzE4IDB4MDAwMDAwMDAwZmZjMDAwMAorI2RlZmluZSBCTV8xOF8yNyBCTV8yN18xOAorI2RlZmluZSBCTV8yOF8xOCAweDAwMDAwMDAwMWZmYzAwMDAKKyNkZWZpbmUgQk1fMThfMjggQk1fMjhfMTgKKyNkZWZpbmUgQk1fMjlfMTggMHgwMDAwMDAwMDNmZmMwMDAwCisjZGVmaW5lIEJNXzE4XzI5IEJNXzI5XzE4CisjZGVmaW5lIEJNXzMwXzE4IDB4MDAwMDAwMDA3ZmZjMDAwMAorI2RlZmluZSBCTV8xOF8zMCBCTV8zMF8xOAorI2RlZmluZSBCTV8zMV8xOCAweDAwMDAwMDAwZmZmYzAwMDAKKyNkZWZpbmUgQk1fMThfMzEgQk1fMzFfMTgKKyNkZWZpbmUgQk1fMzJfMTggMHgwMDAwMDAwMWZmZmMwMDAwCisjZGVmaW5lIEJNXzE4XzMyIEJNXzMyXzE4CisjZGVmaW5lIEJNXzMzXzE4IDB4MDAwMDAwMDNmZmZjMDAwMAorI2RlZmluZSBCTV8xOF8zMyBCTV8zM18xOAorI2RlZmluZSBCTV8zNF8xOCAweDAwMDAwMDA3ZmZmYzAwMDAKKyNkZWZpbmUgQk1fMThfMzQgQk1fMzRfMTgKKyNkZWZpbmUgQk1fMzVfMTggMHgwMDAwMDAwZmZmZmMwMDAwCisjZGVmaW5lIEJNXzE4XzM1IEJNXzM1XzE4CisjZGVmaW5lIEJNXzM2XzE4IDB4MDAwMDAwMWZmZmZjMDAwMAorI2RlZmluZSBCTV8xOF8zNiBCTV8zNl8xOAorI2RlZmluZSBCTV8zN18xOCAweDAwMDAwMDNmZmZmYzAwMDAKKyNkZWZpbmUgQk1fMThfMzcgQk1fMzdfMTgKKyNkZWZpbmUgQk1fMzhfMTggMHgwMDAwMDA3ZmZmZmMwMDAwCisjZGVmaW5lIEJNXzE4XzM4IEJNXzM4XzE4CisjZGVmaW5lIEJNXzM5XzE4IDB4MDAwMDAwZmZmZmZjMDAwMAorI2RlZmluZSBCTV8xOF8zOSBCTV8zOV8xOAorI2RlZmluZSBCTV80MF8xOCAweDAwMDAwMWZmZmZmYzAwMDAKKyNkZWZpbmUgQk1fMThfNDAgQk1fNDBfMTgKKyNkZWZpbmUgQk1fNDFfMTggMHgwMDAwMDNmZmZmZmMwMDAwCisjZGVmaW5lIEJNXzE4XzQxIEJNXzQxXzE4CisjZGVmaW5lIEJNXzQyXzE4IDB4MDAwMDA3ZmZmZmZjMDAwMAorI2RlZmluZSBCTV8xOF80MiBCTV80Ml8xOAorI2RlZmluZSBCTV80M18xOCAweDAwMDAwZmZmZmZmYzAwMDAKKyNkZWZpbmUgQk1fMThfNDMgQk1fNDNfMTgKKyNkZWZpbmUgQk1fNDRfMTggMHgwMDAwMWZmZmZmZmMwMDAwCisjZGVmaW5lIEJNXzE4XzQ0IEJNXzQ0XzE4CisjZGVmaW5lIEJNXzQ1XzE4IDB4MDAwMDNmZmZmZmZjMDAwMAorI2RlZmluZSBCTV8xOF80NSBCTV80NV8xOAorI2RlZmluZSBCTV80Nl8xOCAweDAwMDA3ZmZmZmZmYzAwMDAKKyNkZWZpbmUgQk1fMThfNDYgQk1fNDZfMTgKKyNkZWZpbmUgQk1fNDdfMTggMHgwMDAwZmZmZmZmZmMwMDAwCisjZGVmaW5lIEJNXzE4XzQ3IEJNXzQ3XzE4CisjZGVmaW5lIEJNXzQ4XzE4IDB4MDAwMWZmZmZmZmZjMDAwMAorI2RlZmluZSBCTV8xOF80OCBCTV80OF8xOAorI2RlZmluZSBCTV80OV8xOCAweDAwMDNmZmZmZmZmYzAwMDAKKyNkZWZpbmUgQk1fMThfNDkgQk1fNDlfMTgKKyNkZWZpbmUgQk1fNTBfMTggMHgwMDA3ZmZmZmZmZmMwMDAwCisjZGVmaW5lIEJNXzE4XzUwIEJNXzUwXzE4CisjZGVmaW5lIEJNXzUxXzE4IDB4MDAwZmZmZmZmZmZjMDAwMAorI2RlZmluZSBCTV8xOF81MSBCTV81MV8xOAorI2RlZmluZSBCTV81Ml8xOCAweDAwMWZmZmZmZmZmYzAwMDAKKyNkZWZpbmUgQk1fMThfNTIgQk1fNTJfMTgKKyNkZWZpbmUgQk1fNTNfMTggMHgwMDNmZmZmZmZmZmMwMDAwCisjZGVmaW5lIEJNXzE4XzUzIEJNXzUzXzE4CisjZGVmaW5lIEJNXzU0XzE4IDB4MDA3ZmZmZmZmZmZjMDAwMAorI2RlZmluZSBCTV8xOF81NCBCTV81NF8xOAorI2RlZmluZSBCTV81NV8xOCAweDAwZmZmZmZmZmZmYzAwMDAKKyNkZWZpbmUgQk1fMThfNTUgQk1fNTVfMTgKKyNkZWZpbmUgQk1fNTZfMTggMHgwMWZmZmZmZmZmZmMwMDAwCisjZGVmaW5lIEJNXzE4XzU2IEJNXzU2XzE4CisjZGVmaW5lIEJNXzU3XzE4IDB4MDNmZmZmZmZmZmZjMDAwMAorI2RlZmluZSBCTV8xOF81NyBCTV81N18xOAorI2RlZmluZSBCTV81OF8xOCAweDA3ZmZmZmZmZmZmYzAwMDAKKyNkZWZpbmUgQk1fMThfNTggQk1fNThfMTgKKyNkZWZpbmUgQk1fNTlfMTggMHgwZmZmZmZmZmZmZmMwMDAwCisjZGVmaW5lIEJNXzE4XzU5IEJNXzU5XzE4CisjZGVmaW5lIEJNXzYwXzE4IDB4MWZmZmZmZmZmZmZjMDAwMAorI2RlZmluZSBCTV8xOF82MCBCTV82MF8xOAorI2RlZmluZSBCTV82MV8xOCAweDNmZmZmZmZmZmZmYzAwMDAKKyNkZWZpbmUgQk1fMThfNjEgQk1fNjFfMTgKKyNkZWZpbmUgQk1fNjJfMTggMHg3ZmZmZmZmZmZmZmMwMDAwCisjZGVmaW5lIEJNXzE4XzYyIEJNXzYyXzE4CisjZGVmaW5lIEJNXzYzXzE4IDB4ZmZmZmZmZmZmZmZjMDAwMAorI2RlZmluZSBCTV8xOF82MyBCTV82M18xOAorI2RlZmluZSBCTV8xOV8xOSAweDAwMDAwMDAwMDAwODAwMDAKKyNkZWZpbmUgQk1fMjBfMTkgMHgwMDAwMDAwMDAwMTgwMDAwCisjZGVmaW5lIEJNXzE5XzIwIEJNXzIwXzE5CisjZGVmaW5lIEJNXzIxXzE5IDB4MDAwMDAwMDAwMDM4MDAwMAorI2RlZmluZSBCTV8xOV8yMSBCTV8yMV8xOQorI2RlZmluZSBCTV8yMl8xOSAweDAwMDAwMDAwMDA3ODAwMDAKKyNkZWZpbmUgQk1fMTlfMjIgQk1fMjJfMTkKKyNkZWZpbmUgQk1fMjNfMTkgMHgwMDAwMDAwMDAwZjgwMDAwCisjZGVmaW5lIEJNXzE5XzIzIEJNXzIzXzE5CisjZGVmaW5lIEJNXzI0XzE5IDB4MDAwMDAwMDAwMWY4MDAwMAorI2RlZmluZSBCTV8xOV8yNCBCTV8yNF8xOQorI2RlZmluZSBCTV8yNV8xOSAweDAwMDAwMDAwMDNmODAwMDAKKyNkZWZpbmUgQk1fMTlfMjUgQk1fMjVfMTkKKyNkZWZpbmUgQk1fMjZfMTkgMHgwMDAwMDAwMDA3ZjgwMDAwCisjZGVmaW5lIEJNXzE5XzI2IEJNXzI2XzE5CisjZGVmaW5lIEJNXzI3XzE5IDB4MDAwMDAwMDAwZmY4MDAwMAorI2RlZmluZSBCTV8xOV8yNyBCTV8yN18xOQorI2RlZmluZSBCTV8yOF8xOSAweDAwMDAwMDAwMWZmODAwMDAKKyNkZWZpbmUgQk1fMTlfMjggQk1fMjhfMTkKKyNkZWZpbmUgQk1fMjlfMTkgMHgwMDAwMDAwMDNmZjgwMDAwCisjZGVmaW5lIEJNXzE5XzI5IEJNXzI5XzE5CisjZGVmaW5lIEJNXzMwXzE5IDB4MDAwMDAwMDA3ZmY4MDAwMAorI2RlZmluZSBCTV8xOV8zMCBCTV8zMF8xOQorI2RlZmluZSBCTV8zMV8xOSAweDAwMDAwMDAwZmZmODAwMDAKKyNkZWZpbmUgQk1fMTlfMzEgQk1fMzFfMTkKKyNkZWZpbmUgQk1fMzJfMTkgMHgwMDAwMDAwMWZmZjgwMDAwCisjZGVmaW5lIEJNXzE5XzMyIEJNXzMyXzE5CisjZGVmaW5lIEJNXzMzXzE5IDB4MDAwMDAwMDNmZmY4MDAwMAorI2RlZmluZSBCTV8xOV8zMyBCTV8zM18xOQorI2RlZmluZSBCTV8zNF8xOSAweDAwMDAwMDA3ZmZmODAwMDAKKyNkZWZpbmUgQk1fMTlfMzQgQk1fMzRfMTkKKyNkZWZpbmUgQk1fMzVfMTkgMHgwMDAwMDAwZmZmZjgwMDAwCisjZGVmaW5lIEJNXzE5XzM1IEJNXzM1XzE5CisjZGVmaW5lIEJNXzM2XzE5IDB4MDAwMDAwMWZmZmY4MDAwMAorI2RlZmluZSBCTV8xOV8zNiBCTV8zNl8xOQorI2RlZmluZSBCTV8zN18xOSAweDAwMDAwMDNmZmZmODAwMDAKKyNkZWZpbmUgQk1fMTlfMzcgQk1fMzdfMTkKKyNkZWZpbmUgQk1fMzhfMTkgMHgwMDAwMDA3ZmZmZjgwMDAwCisjZGVmaW5lIEJNXzE5XzM4IEJNXzM4XzE5CisjZGVmaW5lIEJNXzM5XzE5IDB4MDAwMDAwZmZmZmY4MDAwMAorI2RlZmluZSBCTV8xOV8zOSBCTV8zOV8xOQorI2RlZmluZSBCTV80MF8xOSAweDAwMDAwMWZmZmZmODAwMDAKKyNkZWZpbmUgQk1fMTlfNDAgQk1fNDBfMTkKKyNkZWZpbmUgQk1fNDFfMTkgMHgwMDAwMDNmZmZmZjgwMDAwCisjZGVmaW5lIEJNXzE5XzQxIEJNXzQxXzE5CisjZGVmaW5lIEJNXzQyXzE5IDB4MDAwMDA3ZmZmZmY4MDAwMAorI2RlZmluZSBCTV8xOV80MiBCTV80Ml8xOQorI2RlZmluZSBCTV80M18xOSAweDAwMDAwZmZmZmZmODAwMDAKKyNkZWZpbmUgQk1fMTlfNDMgQk1fNDNfMTkKKyNkZWZpbmUgQk1fNDRfMTkgMHgwMDAwMWZmZmZmZjgwMDAwCisjZGVmaW5lIEJNXzE5XzQ0IEJNXzQ0XzE5CisjZGVmaW5lIEJNXzQ1XzE5IDB4MDAwMDNmZmZmZmY4MDAwMAorI2RlZmluZSBCTV8xOV80NSBCTV80NV8xOQorI2RlZmluZSBCTV80Nl8xOSAweDAwMDA3ZmZmZmZmODAwMDAKKyNkZWZpbmUgQk1fMTlfNDYgQk1fNDZfMTkKKyNkZWZpbmUgQk1fNDdfMTkgMHgwMDAwZmZmZmZmZjgwMDAwCisjZGVmaW5lIEJNXzE5XzQ3IEJNXzQ3XzE5CisjZGVmaW5lIEJNXzQ4XzE5IDB4MDAwMWZmZmZmZmY4MDAwMAorI2RlZmluZSBCTV8xOV80OCBCTV80OF8xOQorI2RlZmluZSBCTV80OV8xOSAweDAwMDNmZmZmZmZmODAwMDAKKyNkZWZpbmUgQk1fMTlfNDkgQk1fNDlfMTkKKyNkZWZpbmUgQk1fNTBfMTkgMHgwMDA3ZmZmZmZmZjgwMDAwCisjZGVmaW5lIEJNXzE5XzUwIEJNXzUwXzE5CisjZGVmaW5lIEJNXzUxXzE5IDB4MDAwZmZmZmZmZmY4MDAwMAorI2RlZmluZSBCTV8xOV81MSBCTV81MV8xOQorI2RlZmluZSBCTV81Ml8xOSAweDAwMWZmZmZmZmZmODAwMDAKKyNkZWZpbmUgQk1fMTlfNTIgQk1fNTJfMTkKKyNkZWZpbmUgQk1fNTNfMTkgMHgwMDNmZmZmZmZmZjgwMDAwCisjZGVmaW5lIEJNXzE5XzUzIEJNXzUzXzE5CisjZGVmaW5lIEJNXzU0XzE5IDB4MDA3ZmZmZmZmZmY4MDAwMAorI2RlZmluZSBCTV8xOV81NCBCTV81NF8xOQorI2RlZmluZSBCTV81NV8xOSAweDAwZmZmZmZmZmZmODAwMDAKKyNkZWZpbmUgQk1fMTlfNTUgQk1fNTVfMTkKKyNkZWZpbmUgQk1fNTZfMTkgMHgwMWZmZmZmZmZmZjgwMDAwCisjZGVmaW5lIEJNXzE5XzU2IEJNXzU2XzE5CisjZGVmaW5lIEJNXzU3XzE5IDB4MDNmZmZmZmZmZmY4MDAwMAorI2RlZmluZSBCTV8xOV81NyBCTV81N18xOQorI2RlZmluZSBCTV81OF8xOSAweDA3ZmZmZmZmZmZmODAwMDAKKyNkZWZpbmUgQk1fMTlfNTggQk1fNThfMTkKKyNkZWZpbmUgQk1fNTlfMTkgMHgwZmZmZmZmZmZmZjgwMDAwCisjZGVmaW5lIEJNXzE5XzU5IEJNXzU5XzE5CisjZGVmaW5lIEJNXzYwXzE5IDB4MWZmZmZmZmZmZmY4MDAwMAorI2RlZmluZSBCTV8xOV82MCBCTV82MF8xOQorI2RlZmluZSBCTV82MV8xOSAweDNmZmZmZmZmZmZmODAwMDAKKyNkZWZpbmUgQk1fMTlfNjEgQk1fNjFfMTkKKyNkZWZpbmUgQk1fNjJfMTkgMHg3ZmZmZmZmZmZmZjgwMDAwCisjZGVmaW5lIEJNXzE5XzYyIEJNXzYyXzE5CisjZGVmaW5lIEJNXzYzXzE5IDB4ZmZmZmZmZmZmZmY4MDAwMAorI2RlZmluZSBCTV8xOV82MyBCTV82M18xOQorI2RlZmluZSBCTV8yMF8yMCAweDAwMDAwMDAwMDAxMDAwMDAKKyNkZWZpbmUgQk1fMjFfMjAgMHgwMDAwMDAwMDAwMzAwMDAwCisjZGVmaW5lIEJNXzIwXzIxIEJNXzIxXzIwCisjZGVmaW5lIEJNXzIyXzIwIDB4MDAwMDAwMDAwMDcwMDAwMAorI2RlZmluZSBCTV8yMF8yMiBCTV8yMl8yMAorI2RlZmluZSBCTV8yM18yMCAweDAwMDAwMDAwMDBmMDAwMDAKKyNkZWZpbmUgQk1fMjBfMjMgQk1fMjNfMjAKKyNkZWZpbmUgQk1fMjRfMjAgMHgwMDAwMDAwMDAxZjAwMDAwCisjZGVmaW5lIEJNXzIwXzI0IEJNXzI0XzIwCisjZGVmaW5lIEJNXzI1XzIwIDB4MDAwMDAwMDAwM2YwMDAwMAorI2RlZmluZSBCTV8yMF8yNSBCTV8yNV8yMAorI2RlZmluZSBCTV8yNl8yMCAweDAwMDAwMDAwMDdmMDAwMDAKKyNkZWZpbmUgQk1fMjBfMjYgQk1fMjZfMjAKKyNkZWZpbmUgQk1fMjdfMjAgMHgwMDAwMDAwMDBmZjAwMDAwCisjZGVmaW5lIEJNXzIwXzI3IEJNXzI3XzIwCisjZGVmaW5lIEJNXzI4XzIwIDB4MDAwMDAwMDAxZmYwMDAwMAorI2RlZmluZSBCTV8yMF8yOCBCTV8yOF8yMAorI2RlZmluZSBCTV8yOV8yMCAweDAwMDAwMDAwM2ZmMDAwMDAKKyNkZWZpbmUgQk1fMjBfMjkgQk1fMjlfMjAKKyNkZWZpbmUgQk1fMzBfMjAgMHgwMDAwMDAwMDdmZjAwMDAwCisjZGVmaW5lIEJNXzIwXzMwIEJNXzMwXzIwCisjZGVmaW5lIEJNXzMxXzIwIDB4MDAwMDAwMDBmZmYwMDAwMAorI2RlZmluZSBCTV8yMF8zMSBCTV8zMV8yMAorI2RlZmluZSBCTV8zMl8yMCAweDAwMDAwMDAxZmZmMDAwMDAKKyNkZWZpbmUgQk1fMjBfMzIgQk1fMzJfMjAKKyNkZWZpbmUgQk1fMzNfMjAgMHgwMDAwMDAwM2ZmZjAwMDAwCisjZGVmaW5lIEJNXzIwXzMzIEJNXzMzXzIwCisjZGVmaW5lIEJNXzM0XzIwIDB4MDAwMDAwMDdmZmYwMDAwMAorI2RlZmluZSBCTV8yMF8zNCBCTV8zNF8yMAorI2RlZmluZSBCTV8zNV8yMCAweDAwMDAwMDBmZmZmMDAwMDAKKyNkZWZpbmUgQk1fMjBfMzUgQk1fMzVfMjAKKyNkZWZpbmUgQk1fMzZfMjAgMHgwMDAwMDAxZmZmZjAwMDAwCisjZGVmaW5lIEJNXzIwXzM2IEJNXzM2XzIwCisjZGVmaW5lIEJNXzM3XzIwIDB4MDAwMDAwM2ZmZmYwMDAwMAorI2RlZmluZSBCTV8yMF8zNyBCTV8zN18yMAorI2RlZmluZSBCTV8zOF8yMCAweDAwMDAwMDdmZmZmMDAwMDAKKyNkZWZpbmUgQk1fMjBfMzggQk1fMzhfMjAKKyNkZWZpbmUgQk1fMzlfMjAgMHgwMDAwMDBmZmZmZjAwMDAwCisjZGVmaW5lIEJNXzIwXzM5IEJNXzM5XzIwCisjZGVmaW5lIEJNXzQwXzIwIDB4MDAwMDAxZmZmZmYwMDAwMAorI2RlZmluZSBCTV8yMF80MCBCTV80MF8yMAorI2RlZmluZSBCTV80MV8yMCAweDAwMDAwM2ZmZmZmMDAwMDAKKyNkZWZpbmUgQk1fMjBfNDEgQk1fNDFfMjAKKyNkZWZpbmUgQk1fNDJfMjAgMHgwMDAwMDdmZmZmZjAwMDAwCisjZGVmaW5lIEJNXzIwXzQyIEJNXzQyXzIwCisjZGVmaW5lIEJNXzQzXzIwIDB4MDAwMDBmZmZmZmYwMDAwMAorI2RlZmluZSBCTV8yMF80MyBCTV80M18yMAorI2RlZmluZSBCTV80NF8yMCAweDAwMDAxZmZmZmZmMDAwMDAKKyNkZWZpbmUgQk1fMjBfNDQgQk1fNDRfMjAKKyNkZWZpbmUgQk1fNDVfMjAgMHgwMDAwM2ZmZmZmZjAwMDAwCisjZGVmaW5lIEJNXzIwXzQ1IEJNXzQ1XzIwCisjZGVmaW5lIEJNXzQ2XzIwIDB4MDAwMDdmZmZmZmYwMDAwMAorI2RlZmluZSBCTV8yMF80NiBCTV80Nl8yMAorI2RlZmluZSBCTV80N18yMCAweDAwMDBmZmZmZmZmMDAwMDAKKyNkZWZpbmUgQk1fMjBfNDcgQk1fNDdfMjAKKyNkZWZpbmUgQk1fNDhfMjAgMHgwMDAxZmZmZmZmZjAwMDAwCisjZGVmaW5lIEJNXzIwXzQ4IEJNXzQ4XzIwCisjZGVmaW5lIEJNXzQ5XzIwIDB4MDAwM2ZmZmZmZmYwMDAwMAorI2RlZmluZSBCTV8yMF80OSBCTV80OV8yMAorI2RlZmluZSBCTV81MF8yMCAweDAwMDdmZmZmZmZmMDAwMDAKKyNkZWZpbmUgQk1fMjBfNTAgQk1fNTBfMjAKKyNkZWZpbmUgQk1fNTFfMjAgMHgwMDBmZmZmZmZmZjAwMDAwCisjZGVmaW5lIEJNXzIwXzUxIEJNXzUxXzIwCisjZGVmaW5lIEJNXzUyXzIwIDB4MDAxZmZmZmZmZmYwMDAwMAorI2RlZmluZSBCTV8yMF81MiBCTV81Ml8yMAorI2RlZmluZSBCTV81M18yMCAweDAwM2ZmZmZmZmZmMDAwMDAKKyNkZWZpbmUgQk1fMjBfNTMgQk1fNTNfMjAKKyNkZWZpbmUgQk1fNTRfMjAgMHgwMDdmZmZmZmZmZjAwMDAwCisjZGVmaW5lIEJNXzIwXzU0IEJNXzU0XzIwCisjZGVmaW5lIEJNXzU1XzIwIDB4MDBmZmZmZmZmZmYwMDAwMAorI2RlZmluZSBCTV8yMF81NSBCTV81NV8yMAorI2RlZmluZSBCTV81Nl8yMCAweDAxZmZmZmZmZmZmMDAwMDAKKyNkZWZpbmUgQk1fMjBfNTYgQk1fNTZfMjAKKyNkZWZpbmUgQk1fNTdfMjAgMHgwM2ZmZmZmZmZmZjAwMDAwCisjZGVmaW5lIEJNXzIwXzU3IEJNXzU3XzIwCisjZGVmaW5lIEJNXzU4XzIwIDB4MDdmZmZmZmZmZmYwMDAwMAorI2RlZmluZSBCTV8yMF81OCBCTV81OF8yMAorI2RlZmluZSBCTV81OV8yMCAweDBmZmZmZmZmZmZmMDAwMDAKKyNkZWZpbmUgQk1fMjBfNTkgQk1fNTlfMjAKKyNkZWZpbmUgQk1fNjBfMjAgMHgxZmZmZmZmZmZmZjAwMDAwCisjZGVmaW5lIEJNXzIwXzYwIEJNXzYwXzIwCisjZGVmaW5lIEJNXzYxXzIwIDB4M2ZmZmZmZmZmZmYwMDAwMAorI2RlZmluZSBCTV8yMF82MSBCTV82MV8yMAorI2RlZmluZSBCTV82Ml8yMCAweDdmZmZmZmZmZmZmMDAwMDAKKyNkZWZpbmUgQk1fMjBfNjIgQk1fNjJfMjAKKyNkZWZpbmUgQk1fNjNfMjAgMHhmZmZmZmZmZmZmZjAwMDAwCisjZGVmaW5lIEJNXzIwXzYzIEJNXzYzXzIwCisjZGVmaW5lIEJNXzIxXzIxIDB4MDAwMDAwMDAwMDIwMDAwMAorI2RlZmluZSBCTV8yMl8yMSAweDAwMDAwMDAwMDA2MDAwMDAKKyNkZWZpbmUgQk1fMjFfMjIgQk1fMjJfMjEKKyNkZWZpbmUgQk1fMjNfMjEgMHgwMDAwMDAwMDAwZTAwMDAwCisjZGVmaW5lIEJNXzIxXzIzIEJNXzIzXzIxCisjZGVmaW5lIEJNXzI0XzIxIDB4MDAwMDAwMDAwMWUwMDAwMAorI2RlZmluZSBCTV8yMV8yNCBCTV8yNF8yMQorI2RlZmluZSBCTV8yNV8yMSAweDAwMDAwMDAwMDNlMDAwMDAKKyNkZWZpbmUgQk1fMjFfMjUgQk1fMjVfMjEKKyNkZWZpbmUgQk1fMjZfMjEgMHgwMDAwMDAwMDA3ZTAwMDAwCisjZGVmaW5lIEJNXzIxXzI2IEJNXzI2XzIxCisjZGVmaW5lIEJNXzI3XzIxIDB4MDAwMDAwMDAwZmUwMDAwMAorI2RlZmluZSBCTV8yMV8yNyBCTV8yN18yMQorI2RlZmluZSBCTV8yOF8yMSAweDAwMDAwMDAwMWZlMDAwMDAKKyNkZWZpbmUgQk1fMjFfMjggQk1fMjhfMjEKKyNkZWZpbmUgQk1fMjlfMjEgMHgwMDAwMDAwMDNmZTAwMDAwCisjZGVmaW5lIEJNXzIxXzI5IEJNXzI5XzIxCisjZGVmaW5lIEJNXzMwXzIxIDB4MDAwMDAwMDA3ZmUwMDAwMAorI2RlZmluZSBCTV8yMV8zMCBCTV8zMF8yMQorI2RlZmluZSBCTV8zMV8yMSAweDAwMDAwMDAwZmZlMDAwMDAKKyNkZWZpbmUgQk1fMjFfMzEgQk1fMzFfMjEKKyNkZWZpbmUgQk1fMzJfMjEgMHgwMDAwMDAwMWZmZTAwMDAwCisjZGVmaW5lIEJNXzIxXzMyIEJNXzMyXzIxCisjZGVmaW5lIEJNXzMzXzIxIDB4MDAwMDAwMDNmZmUwMDAwMAorI2RlZmluZSBCTV8yMV8zMyBCTV8zM18yMQorI2RlZmluZSBCTV8zNF8yMSAweDAwMDAwMDA3ZmZlMDAwMDAKKyNkZWZpbmUgQk1fMjFfMzQgQk1fMzRfMjEKKyNkZWZpbmUgQk1fMzVfMjEgMHgwMDAwMDAwZmZmZTAwMDAwCisjZGVmaW5lIEJNXzIxXzM1IEJNXzM1XzIxCisjZGVmaW5lIEJNXzM2XzIxIDB4MDAwMDAwMWZmZmUwMDAwMAorI2RlZmluZSBCTV8yMV8zNiBCTV8zNl8yMQorI2RlZmluZSBCTV8zN18yMSAweDAwMDAwMDNmZmZlMDAwMDAKKyNkZWZpbmUgQk1fMjFfMzcgQk1fMzdfMjEKKyNkZWZpbmUgQk1fMzhfMjEgMHgwMDAwMDA3ZmZmZTAwMDAwCisjZGVmaW5lIEJNXzIxXzM4IEJNXzM4XzIxCisjZGVmaW5lIEJNXzM5XzIxIDB4MDAwMDAwZmZmZmUwMDAwMAorI2RlZmluZSBCTV8yMV8zOSBCTV8zOV8yMQorI2RlZmluZSBCTV80MF8yMSAweDAwMDAwMWZmZmZlMDAwMDAKKyNkZWZpbmUgQk1fMjFfNDAgQk1fNDBfMjEKKyNkZWZpbmUgQk1fNDFfMjEgMHgwMDAwMDNmZmZmZTAwMDAwCisjZGVmaW5lIEJNXzIxXzQxIEJNXzQxXzIxCisjZGVmaW5lIEJNXzQyXzIxIDB4MDAwMDA3ZmZmZmUwMDAwMAorI2RlZmluZSBCTV8yMV80MiBCTV80Ml8yMQorI2RlZmluZSBCTV80M18yMSAweDAwMDAwZmZmZmZlMDAwMDAKKyNkZWZpbmUgQk1fMjFfNDMgQk1fNDNfMjEKKyNkZWZpbmUgQk1fNDRfMjEgMHgwMDAwMWZmZmZmZTAwMDAwCisjZGVmaW5lIEJNXzIxXzQ0IEJNXzQ0XzIxCisjZGVmaW5lIEJNXzQ1XzIxIDB4MDAwMDNmZmZmZmUwMDAwMAorI2RlZmluZSBCTV8yMV80NSBCTV80NV8yMQorI2RlZmluZSBCTV80Nl8yMSAweDAwMDA3ZmZmZmZlMDAwMDAKKyNkZWZpbmUgQk1fMjFfNDYgQk1fNDZfMjEKKyNkZWZpbmUgQk1fNDdfMjEgMHgwMDAwZmZmZmZmZTAwMDAwCisjZGVmaW5lIEJNXzIxXzQ3IEJNXzQ3XzIxCisjZGVmaW5lIEJNXzQ4XzIxIDB4MDAwMWZmZmZmZmUwMDAwMAorI2RlZmluZSBCTV8yMV80OCBCTV80OF8yMQorI2RlZmluZSBCTV80OV8yMSAweDAwMDNmZmZmZmZlMDAwMDAKKyNkZWZpbmUgQk1fMjFfNDkgQk1fNDlfMjEKKyNkZWZpbmUgQk1fNTBfMjEgMHgwMDA3ZmZmZmZmZTAwMDAwCisjZGVmaW5lIEJNXzIxXzUwIEJNXzUwXzIxCisjZGVmaW5lIEJNXzUxXzIxIDB4MDAwZmZmZmZmZmUwMDAwMAorI2RlZmluZSBCTV8yMV81MSBCTV81MV8yMQorI2RlZmluZSBCTV81Ml8yMSAweDAwMWZmZmZmZmZlMDAwMDAKKyNkZWZpbmUgQk1fMjFfNTIgQk1fNTJfMjEKKyNkZWZpbmUgQk1fNTNfMjEgMHgwMDNmZmZmZmZmZTAwMDAwCisjZGVmaW5lIEJNXzIxXzUzIEJNXzUzXzIxCisjZGVmaW5lIEJNXzU0XzIxIDB4MDA3ZmZmZmZmZmUwMDAwMAorI2RlZmluZSBCTV8yMV81NCBCTV81NF8yMQorI2RlZmluZSBCTV81NV8yMSAweDAwZmZmZmZmZmZlMDAwMDAKKyNkZWZpbmUgQk1fMjFfNTUgQk1fNTVfMjEKKyNkZWZpbmUgQk1fNTZfMjEgMHgwMWZmZmZmZmZmZTAwMDAwCisjZGVmaW5lIEJNXzIxXzU2IEJNXzU2XzIxCisjZGVmaW5lIEJNXzU3XzIxIDB4MDNmZmZmZmZmZmUwMDAwMAorI2RlZmluZSBCTV8yMV81NyBCTV81N18yMQorI2RlZmluZSBCTV81OF8yMSAweDA3ZmZmZmZmZmZlMDAwMDAKKyNkZWZpbmUgQk1fMjFfNTggQk1fNThfMjEKKyNkZWZpbmUgQk1fNTlfMjEgMHgwZmZmZmZmZmZmZTAwMDAwCisjZGVmaW5lIEJNXzIxXzU5IEJNXzU5XzIxCisjZGVmaW5lIEJNXzYwXzIxIDB4MWZmZmZmZmZmZmUwMDAwMAorI2RlZmluZSBCTV8yMV82MCBCTV82MF8yMQorI2RlZmluZSBCTV82MV8yMSAweDNmZmZmZmZmZmZlMDAwMDAKKyNkZWZpbmUgQk1fMjFfNjEgQk1fNjFfMjEKKyNkZWZpbmUgQk1fNjJfMjEgMHg3ZmZmZmZmZmZmZTAwMDAwCisjZGVmaW5lIEJNXzIxXzYyIEJNXzYyXzIxCisjZGVmaW5lIEJNXzYzXzIxIDB4ZmZmZmZmZmZmZmUwMDAwMAorI2RlZmluZSBCTV8yMV82MyBCTV82M18yMQorI2RlZmluZSBCTV8yMl8yMiAweDAwMDAwMDAwMDA0MDAwMDAKKyNkZWZpbmUgQk1fMjNfMjIgMHgwMDAwMDAwMDAwYzAwMDAwCisjZGVmaW5lIEJNXzIyXzIzIEJNXzIzXzIyCisjZGVmaW5lIEJNXzI0XzIyIDB4MDAwMDAwMDAwMWMwMDAwMAorI2RlZmluZSBCTV8yMl8yNCBCTV8yNF8yMgorI2RlZmluZSBCTV8yNV8yMiAweDAwMDAwMDAwMDNjMDAwMDAKKyNkZWZpbmUgQk1fMjJfMjUgQk1fMjVfMjIKKyNkZWZpbmUgQk1fMjZfMjIgMHgwMDAwMDAwMDA3YzAwMDAwCisjZGVmaW5lIEJNXzIyXzI2IEJNXzI2XzIyCisjZGVmaW5lIEJNXzI3XzIyIDB4MDAwMDAwMDAwZmMwMDAwMAorI2RlZmluZSBCTV8yMl8yNyBCTV8yN18yMgorI2RlZmluZSBCTV8yOF8yMiAweDAwMDAwMDAwMWZjMDAwMDAKKyNkZWZpbmUgQk1fMjJfMjggQk1fMjhfMjIKKyNkZWZpbmUgQk1fMjlfMjIgMHgwMDAwMDAwMDNmYzAwMDAwCisjZGVmaW5lIEJNXzIyXzI5IEJNXzI5XzIyCisjZGVmaW5lIEJNXzMwXzIyIDB4MDAwMDAwMDA3ZmMwMDAwMAorI2RlZmluZSBCTV8yMl8zMCBCTV8zMF8yMgorI2RlZmluZSBCTV8zMV8yMiAweDAwMDAwMDAwZmZjMDAwMDAKKyNkZWZpbmUgQk1fMjJfMzEgQk1fMzFfMjIKKyNkZWZpbmUgQk1fMzJfMjIgMHgwMDAwMDAwMWZmYzAwMDAwCisjZGVmaW5lIEJNXzIyXzMyIEJNXzMyXzIyCisjZGVmaW5lIEJNXzMzXzIyIDB4MDAwMDAwMDNmZmMwMDAwMAorI2RlZmluZSBCTV8yMl8zMyBCTV8zM18yMgorI2RlZmluZSBCTV8zNF8yMiAweDAwMDAwMDA3ZmZjMDAwMDAKKyNkZWZpbmUgQk1fMjJfMzQgQk1fMzRfMjIKKyNkZWZpbmUgQk1fMzVfMjIgMHgwMDAwMDAwZmZmYzAwMDAwCisjZGVmaW5lIEJNXzIyXzM1IEJNXzM1XzIyCisjZGVmaW5lIEJNXzM2XzIyIDB4MDAwMDAwMWZmZmMwMDAwMAorI2RlZmluZSBCTV8yMl8zNiBCTV8zNl8yMgorI2RlZmluZSBCTV8zN18yMiAweDAwMDAwMDNmZmZjMDAwMDAKKyNkZWZpbmUgQk1fMjJfMzcgQk1fMzdfMjIKKyNkZWZpbmUgQk1fMzhfMjIgMHgwMDAwMDA3ZmZmYzAwMDAwCisjZGVmaW5lIEJNXzIyXzM4IEJNXzM4XzIyCisjZGVmaW5lIEJNXzM5XzIyIDB4MDAwMDAwZmZmZmMwMDAwMAorI2RlZmluZSBCTV8yMl8zOSBCTV8zOV8yMgorI2RlZmluZSBCTV80MF8yMiAweDAwMDAwMWZmZmZjMDAwMDAKKyNkZWZpbmUgQk1fMjJfNDAgQk1fNDBfMjIKKyNkZWZpbmUgQk1fNDFfMjIgMHgwMDAwMDNmZmZmYzAwMDAwCisjZGVmaW5lIEJNXzIyXzQxIEJNXzQxXzIyCisjZGVmaW5lIEJNXzQyXzIyIDB4MDAwMDA3ZmZmZmMwMDAwMAorI2RlZmluZSBCTV8yMl80MiBCTV80Ml8yMgorI2RlZmluZSBCTV80M18yMiAweDAwMDAwZmZmZmZjMDAwMDAKKyNkZWZpbmUgQk1fMjJfNDMgQk1fNDNfMjIKKyNkZWZpbmUgQk1fNDRfMjIgMHgwMDAwMWZmZmZmYzAwMDAwCisjZGVmaW5lIEJNXzIyXzQ0IEJNXzQ0XzIyCisjZGVmaW5lIEJNXzQ1XzIyIDB4MDAwMDNmZmZmZmMwMDAwMAorI2RlZmluZSBCTV8yMl80NSBCTV80NV8yMgorI2RlZmluZSBCTV80Nl8yMiAweDAwMDA3ZmZmZmZjMDAwMDAKKyNkZWZpbmUgQk1fMjJfNDYgQk1fNDZfMjIKKyNkZWZpbmUgQk1fNDdfMjIgMHgwMDAwZmZmZmZmYzAwMDAwCisjZGVmaW5lIEJNXzIyXzQ3IEJNXzQ3XzIyCisjZGVmaW5lIEJNXzQ4XzIyIDB4MDAwMWZmZmZmZmMwMDAwMAorI2RlZmluZSBCTV8yMl80OCBCTV80OF8yMgorI2RlZmluZSBCTV80OV8yMiAweDAwMDNmZmZmZmZjMDAwMDAKKyNkZWZpbmUgQk1fMjJfNDkgQk1fNDlfMjIKKyNkZWZpbmUgQk1fNTBfMjIgMHgwMDA3ZmZmZmZmYzAwMDAwCisjZGVmaW5lIEJNXzIyXzUwIEJNXzUwXzIyCisjZGVmaW5lIEJNXzUxXzIyIDB4MDAwZmZmZmZmZmMwMDAwMAorI2RlZmluZSBCTV8yMl81MSBCTV81MV8yMgorI2RlZmluZSBCTV81Ml8yMiAweDAwMWZmZmZmZmZjMDAwMDAKKyNkZWZpbmUgQk1fMjJfNTIgQk1fNTJfMjIKKyNkZWZpbmUgQk1fNTNfMjIgMHgwMDNmZmZmZmZmYzAwMDAwCisjZGVmaW5lIEJNXzIyXzUzIEJNXzUzXzIyCisjZGVmaW5lIEJNXzU0XzIyIDB4MDA3ZmZmZmZmZmMwMDAwMAorI2RlZmluZSBCTV8yMl81NCBCTV81NF8yMgorI2RlZmluZSBCTV81NV8yMiAweDAwZmZmZmZmZmZjMDAwMDAKKyNkZWZpbmUgQk1fMjJfNTUgQk1fNTVfMjIKKyNkZWZpbmUgQk1fNTZfMjIgMHgwMWZmZmZmZmZmYzAwMDAwCisjZGVmaW5lIEJNXzIyXzU2IEJNXzU2XzIyCisjZGVmaW5lIEJNXzU3XzIyIDB4MDNmZmZmZmZmZmMwMDAwMAorI2RlZmluZSBCTV8yMl81NyBCTV81N18yMgorI2RlZmluZSBCTV81OF8yMiAweDA3ZmZmZmZmZmZjMDAwMDAKKyNkZWZpbmUgQk1fMjJfNTggQk1fNThfMjIKKyNkZWZpbmUgQk1fNTlfMjIgMHgwZmZmZmZmZmZmYzAwMDAwCisjZGVmaW5lIEJNXzIyXzU5IEJNXzU5XzIyCisjZGVmaW5lIEJNXzYwXzIyIDB4MWZmZmZmZmZmZmMwMDAwMAorI2RlZmluZSBCTV8yMl82MCBCTV82MF8yMgorI2RlZmluZSBCTV82MV8yMiAweDNmZmZmZmZmZmZjMDAwMDAKKyNkZWZpbmUgQk1fMjJfNjEgQk1fNjFfMjIKKyNkZWZpbmUgQk1fNjJfMjIgMHg3ZmZmZmZmZmZmYzAwMDAwCisjZGVmaW5lIEJNXzIyXzYyIEJNXzYyXzIyCisjZGVmaW5lIEJNXzYzXzIyIDB4ZmZmZmZmZmZmZmMwMDAwMAorI2RlZmluZSBCTV8yMl82MyBCTV82M18yMgorI2RlZmluZSBCTV8yM18yMyAweDAwMDAwMDAwMDA4MDAwMDAKKyNkZWZpbmUgQk1fMjRfMjMgMHgwMDAwMDAwMDAxODAwMDAwCisjZGVmaW5lIEJNXzIzXzI0IEJNXzI0XzIzCisjZGVmaW5lIEJNXzI1XzIzIDB4MDAwMDAwMDAwMzgwMDAwMAorI2RlZmluZSBCTV8yM18yNSBCTV8yNV8yMworI2RlZmluZSBCTV8yNl8yMyAweDAwMDAwMDAwMDc4MDAwMDAKKyNkZWZpbmUgQk1fMjNfMjYgQk1fMjZfMjMKKyNkZWZpbmUgQk1fMjdfMjMgMHgwMDAwMDAwMDBmODAwMDAwCisjZGVmaW5lIEJNXzIzXzI3IEJNXzI3XzIzCisjZGVmaW5lIEJNXzI4XzIzIDB4MDAwMDAwMDAxZjgwMDAwMAorI2RlZmluZSBCTV8yM18yOCBCTV8yOF8yMworI2RlZmluZSBCTV8yOV8yMyAweDAwMDAwMDAwM2Y4MDAwMDAKKyNkZWZpbmUgQk1fMjNfMjkgQk1fMjlfMjMKKyNkZWZpbmUgQk1fMzBfMjMgMHgwMDAwMDAwMDdmODAwMDAwCisjZGVmaW5lIEJNXzIzXzMwIEJNXzMwXzIzCisjZGVmaW5lIEJNXzMxXzIzIDB4MDAwMDAwMDBmZjgwMDAwMAorI2RlZmluZSBCTV8yM18zMSBCTV8zMV8yMworI2RlZmluZSBCTV8zMl8yMyAweDAwMDAwMDAxZmY4MDAwMDAKKyNkZWZpbmUgQk1fMjNfMzIgQk1fMzJfMjMKKyNkZWZpbmUgQk1fMzNfMjMgMHgwMDAwMDAwM2ZmODAwMDAwCisjZGVmaW5lIEJNXzIzXzMzIEJNXzMzXzIzCisjZGVmaW5lIEJNXzM0XzIzIDB4MDAwMDAwMDdmZjgwMDAwMAorI2RlZmluZSBCTV8yM18zNCBCTV8zNF8yMworI2RlZmluZSBCTV8zNV8yMyAweDAwMDAwMDBmZmY4MDAwMDAKKyNkZWZpbmUgQk1fMjNfMzUgQk1fMzVfMjMKKyNkZWZpbmUgQk1fMzZfMjMgMHgwMDAwMDAxZmZmODAwMDAwCisjZGVmaW5lIEJNXzIzXzM2IEJNXzM2XzIzCisjZGVmaW5lIEJNXzM3XzIzIDB4MDAwMDAwM2ZmZjgwMDAwMAorI2RlZmluZSBCTV8yM18zNyBCTV8zN18yMworI2RlZmluZSBCTV8zOF8yMyAweDAwMDAwMDdmZmY4MDAwMDAKKyNkZWZpbmUgQk1fMjNfMzggQk1fMzhfMjMKKyNkZWZpbmUgQk1fMzlfMjMgMHgwMDAwMDBmZmZmODAwMDAwCisjZGVmaW5lIEJNXzIzXzM5IEJNXzM5XzIzCisjZGVmaW5lIEJNXzQwXzIzIDB4MDAwMDAxZmZmZjgwMDAwMAorI2RlZmluZSBCTV8yM180MCBCTV80MF8yMworI2RlZmluZSBCTV80MV8yMyAweDAwMDAwM2ZmZmY4MDAwMDAKKyNkZWZpbmUgQk1fMjNfNDEgQk1fNDFfMjMKKyNkZWZpbmUgQk1fNDJfMjMgMHgwMDAwMDdmZmZmODAwMDAwCisjZGVmaW5lIEJNXzIzXzQyIEJNXzQyXzIzCisjZGVmaW5lIEJNXzQzXzIzIDB4MDAwMDBmZmZmZjgwMDAwMAorI2RlZmluZSBCTV8yM180MyBCTV80M18yMworI2RlZmluZSBCTV80NF8yMyAweDAwMDAxZmZmZmY4MDAwMDAKKyNkZWZpbmUgQk1fMjNfNDQgQk1fNDRfMjMKKyNkZWZpbmUgQk1fNDVfMjMgMHgwMDAwM2ZmZmZmODAwMDAwCisjZGVmaW5lIEJNXzIzXzQ1IEJNXzQ1XzIzCisjZGVmaW5lIEJNXzQ2XzIzIDB4MDAwMDdmZmZmZjgwMDAwMAorI2RlZmluZSBCTV8yM180NiBCTV80Nl8yMworI2RlZmluZSBCTV80N18yMyAweDAwMDBmZmZmZmY4MDAwMDAKKyNkZWZpbmUgQk1fMjNfNDcgQk1fNDdfMjMKKyNkZWZpbmUgQk1fNDhfMjMgMHgwMDAxZmZmZmZmODAwMDAwCisjZGVmaW5lIEJNXzIzXzQ4IEJNXzQ4XzIzCisjZGVmaW5lIEJNXzQ5XzIzIDB4MDAwM2ZmZmZmZjgwMDAwMAorI2RlZmluZSBCTV8yM180OSBCTV80OV8yMworI2RlZmluZSBCTV81MF8yMyAweDAwMDdmZmZmZmY4MDAwMDAKKyNkZWZpbmUgQk1fMjNfNTAgQk1fNTBfMjMKKyNkZWZpbmUgQk1fNTFfMjMgMHgwMDBmZmZmZmZmODAwMDAwCisjZGVmaW5lIEJNXzIzXzUxIEJNXzUxXzIzCisjZGVmaW5lIEJNXzUyXzIzIDB4MDAxZmZmZmZmZjgwMDAwMAorI2RlZmluZSBCTV8yM181MiBCTV81Ml8yMworI2RlZmluZSBCTV81M18yMyAweDAwM2ZmZmZmZmY4MDAwMDAKKyNkZWZpbmUgQk1fMjNfNTMgQk1fNTNfMjMKKyNkZWZpbmUgQk1fNTRfMjMgMHgwMDdmZmZmZmZmODAwMDAwCisjZGVmaW5lIEJNXzIzXzU0IEJNXzU0XzIzCisjZGVmaW5lIEJNXzU1XzIzIDB4MDBmZmZmZmZmZjgwMDAwMAorI2RlZmluZSBCTV8yM181NSBCTV81NV8yMworI2RlZmluZSBCTV81Nl8yMyAweDAxZmZmZmZmZmY4MDAwMDAKKyNkZWZpbmUgQk1fMjNfNTYgQk1fNTZfMjMKKyNkZWZpbmUgQk1fNTdfMjMgMHgwM2ZmZmZmZmZmODAwMDAwCisjZGVmaW5lIEJNXzIzXzU3IEJNXzU3XzIzCisjZGVmaW5lIEJNXzU4XzIzIDB4MDdmZmZmZmZmZjgwMDAwMAorI2RlZmluZSBCTV8yM181OCBCTV81OF8yMworI2RlZmluZSBCTV81OV8yMyAweDBmZmZmZmZmZmY4MDAwMDAKKyNkZWZpbmUgQk1fMjNfNTkgQk1fNTlfMjMKKyNkZWZpbmUgQk1fNjBfMjMgMHgxZmZmZmZmZmZmODAwMDAwCisjZGVmaW5lIEJNXzIzXzYwIEJNXzYwXzIzCisjZGVmaW5lIEJNXzYxXzIzIDB4M2ZmZmZmZmZmZjgwMDAwMAorI2RlZmluZSBCTV8yM182MSBCTV82MV8yMworI2RlZmluZSBCTV82Ml8yMyAweDdmZmZmZmZmZmY4MDAwMDAKKyNkZWZpbmUgQk1fMjNfNjIgQk1fNjJfMjMKKyNkZWZpbmUgQk1fNjNfMjMgMHhmZmZmZmZmZmZmODAwMDAwCisjZGVmaW5lIEJNXzIzXzYzIEJNXzYzXzIzCisjZGVmaW5lIEJNXzI0XzI0IDB4MDAwMDAwMDAwMTAwMDAwMAorI2RlZmluZSBCTV8yNV8yNCAweDAwMDAwMDAwMDMwMDAwMDAKKyNkZWZpbmUgQk1fMjRfMjUgQk1fMjVfMjQKKyNkZWZpbmUgQk1fMjZfMjQgMHgwMDAwMDAwMDA3MDAwMDAwCisjZGVmaW5lIEJNXzI0XzI2IEJNXzI2XzI0CisjZGVmaW5lIEJNXzI3XzI0IDB4MDAwMDAwMDAwZjAwMDAwMAorI2RlZmluZSBCTV8yNF8yNyBCTV8yN18yNAorI2RlZmluZSBCTV8yOF8yNCAweDAwMDAwMDAwMWYwMDAwMDAKKyNkZWZpbmUgQk1fMjRfMjggQk1fMjhfMjQKKyNkZWZpbmUgQk1fMjlfMjQgMHgwMDAwMDAwMDNmMDAwMDAwCisjZGVmaW5lIEJNXzI0XzI5IEJNXzI5XzI0CisjZGVmaW5lIEJNXzMwXzI0IDB4MDAwMDAwMDA3ZjAwMDAwMAorI2RlZmluZSBCTV8yNF8zMCBCTV8zMF8yNAorI2RlZmluZSBCTV8zMV8yNCAweDAwMDAwMDAwZmYwMDAwMDAKKyNkZWZpbmUgQk1fMjRfMzEgQk1fMzFfMjQKKyNkZWZpbmUgQk1fMzJfMjQgMHgwMDAwMDAwMWZmMDAwMDAwCisjZGVmaW5lIEJNXzI0XzMyIEJNXzMyXzI0CisjZGVmaW5lIEJNXzMzXzI0IDB4MDAwMDAwMDNmZjAwMDAwMAorI2RlZmluZSBCTV8yNF8zMyBCTV8zM18yNAorI2RlZmluZSBCTV8zNF8yNCAweDAwMDAwMDA3ZmYwMDAwMDAKKyNkZWZpbmUgQk1fMjRfMzQgQk1fMzRfMjQKKyNkZWZpbmUgQk1fMzVfMjQgMHgwMDAwMDAwZmZmMDAwMDAwCisjZGVmaW5lIEJNXzI0XzM1IEJNXzM1XzI0CisjZGVmaW5lIEJNXzM2XzI0IDB4MDAwMDAwMWZmZjAwMDAwMAorI2RlZmluZSBCTV8yNF8zNiBCTV8zNl8yNAorI2RlZmluZSBCTV8zN18yNCAweDAwMDAwMDNmZmYwMDAwMDAKKyNkZWZpbmUgQk1fMjRfMzcgQk1fMzdfMjQKKyNkZWZpbmUgQk1fMzhfMjQgMHgwMDAwMDA3ZmZmMDAwMDAwCisjZGVmaW5lIEJNXzI0XzM4IEJNXzM4XzI0CisjZGVmaW5lIEJNXzM5XzI0IDB4MDAwMDAwZmZmZjAwMDAwMAorI2RlZmluZSBCTV8yNF8zOSBCTV8zOV8yNAorI2RlZmluZSBCTV80MF8yNCAweDAwMDAwMWZmZmYwMDAwMDAKKyNkZWZpbmUgQk1fMjRfNDAgQk1fNDBfMjQKKyNkZWZpbmUgQk1fNDFfMjQgMHgwMDAwMDNmZmZmMDAwMDAwCisjZGVmaW5lIEJNXzI0XzQxIEJNXzQxXzI0CisjZGVmaW5lIEJNXzQyXzI0IDB4MDAwMDA3ZmZmZjAwMDAwMAorI2RlZmluZSBCTV8yNF80MiBCTV80Ml8yNAorI2RlZmluZSBCTV80M18yNCAweDAwMDAwZmZmZmYwMDAwMDAKKyNkZWZpbmUgQk1fMjRfNDMgQk1fNDNfMjQKKyNkZWZpbmUgQk1fNDRfMjQgMHgwMDAwMWZmZmZmMDAwMDAwCisjZGVmaW5lIEJNXzI0XzQ0IEJNXzQ0XzI0CisjZGVmaW5lIEJNXzQ1XzI0IDB4MDAwMDNmZmZmZjAwMDAwMAorI2RlZmluZSBCTV8yNF80NSBCTV80NV8yNAorI2RlZmluZSBCTV80Nl8yNCAweDAwMDA3ZmZmZmYwMDAwMDAKKyNkZWZpbmUgQk1fMjRfNDYgQk1fNDZfMjQKKyNkZWZpbmUgQk1fNDdfMjQgMHgwMDAwZmZmZmZmMDAwMDAwCisjZGVmaW5lIEJNXzI0XzQ3IEJNXzQ3XzI0CisjZGVmaW5lIEJNXzQ4XzI0IDB4MDAwMWZmZmZmZjAwMDAwMAorI2RlZmluZSBCTV8yNF80OCBCTV80OF8yNAorI2RlZmluZSBCTV80OV8yNCAweDAwMDNmZmZmZmYwMDAwMDAKKyNkZWZpbmUgQk1fMjRfNDkgQk1fNDlfMjQKKyNkZWZpbmUgQk1fNTBfMjQgMHgwMDA3ZmZmZmZmMDAwMDAwCisjZGVmaW5lIEJNXzI0XzUwIEJNXzUwXzI0CisjZGVmaW5lIEJNXzUxXzI0IDB4MDAwZmZmZmZmZjAwMDAwMAorI2RlZmluZSBCTV8yNF81MSBCTV81MV8yNAorI2RlZmluZSBCTV81Ml8yNCAweDAwMWZmZmZmZmYwMDAwMDAKKyNkZWZpbmUgQk1fMjRfNTIgQk1fNTJfMjQKKyNkZWZpbmUgQk1fNTNfMjQgMHgwMDNmZmZmZmZmMDAwMDAwCisjZGVmaW5lIEJNXzI0XzUzIEJNXzUzXzI0CisjZGVmaW5lIEJNXzU0XzI0IDB4MDA3ZmZmZmZmZjAwMDAwMAorI2RlZmluZSBCTV8yNF81NCBCTV81NF8yNAorI2RlZmluZSBCTV81NV8yNCAweDAwZmZmZmZmZmYwMDAwMDAKKyNkZWZpbmUgQk1fMjRfNTUgQk1fNTVfMjQKKyNkZWZpbmUgQk1fNTZfMjQgMHgwMWZmZmZmZmZmMDAwMDAwCisjZGVmaW5lIEJNXzI0XzU2IEJNXzU2XzI0CisjZGVmaW5lIEJNXzU3XzI0IDB4MDNmZmZmZmZmZjAwMDAwMAorI2RlZmluZSBCTV8yNF81NyBCTV81N18yNAorI2RlZmluZSBCTV81OF8yNCAweDA3ZmZmZmZmZmYwMDAwMDAKKyNkZWZpbmUgQk1fMjRfNTggQk1fNThfMjQKKyNkZWZpbmUgQk1fNTlfMjQgMHgwZmZmZmZmZmZmMDAwMDAwCisjZGVmaW5lIEJNXzI0XzU5IEJNXzU5XzI0CisjZGVmaW5lIEJNXzYwXzI0IDB4MWZmZmZmZmZmZjAwMDAwMAorI2RlZmluZSBCTV8yNF82MCBCTV82MF8yNAorI2RlZmluZSBCTV82MV8yNCAweDNmZmZmZmZmZmYwMDAwMDAKKyNkZWZpbmUgQk1fMjRfNjEgQk1fNjFfMjQKKyNkZWZpbmUgQk1fNjJfMjQgMHg3ZmZmZmZmZmZmMDAwMDAwCisjZGVmaW5lIEJNXzI0XzYyIEJNXzYyXzI0CisjZGVmaW5lIEJNXzYzXzI0IDB4ZmZmZmZmZmZmZjAwMDAwMAorI2RlZmluZSBCTV8yNF82MyBCTV82M18yNAorI2RlZmluZSBCTV8yNV8yNSAweDAwMDAwMDAwMDIwMDAwMDAKKyNkZWZpbmUgQk1fMjZfMjUgMHgwMDAwMDAwMDA2MDAwMDAwCisjZGVmaW5lIEJNXzI1XzI2IEJNXzI2XzI1CisjZGVmaW5lIEJNXzI3XzI1IDB4MDAwMDAwMDAwZTAwMDAwMAorI2RlZmluZSBCTV8yNV8yNyBCTV8yN18yNQorI2RlZmluZSBCTV8yOF8yNSAweDAwMDAwMDAwMWUwMDAwMDAKKyNkZWZpbmUgQk1fMjVfMjggQk1fMjhfMjUKKyNkZWZpbmUgQk1fMjlfMjUgMHgwMDAwMDAwMDNlMDAwMDAwCisjZGVmaW5lIEJNXzI1XzI5IEJNXzI5XzI1CisjZGVmaW5lIEJNXzMwXzI1IDB4MDAwMDAwMDA3ZTAwMDAwMAorI2RlZmluZSBCTV8yNV8zMCBCTV8zMF8yNQorI2RlZmluZSBCTV8zMV8yNSAweDAwMDAwMDAwZmUwMDAwMDAKKyNkZWZpbmUgQk1fMjVfMzEgQk1fMzFfMjUKKyNkZWZpbmUgQk1fMzJfMjUgMHgwMDAwMDAwMWZlMDAwMDAwCisjZGVmaW5lIEJNXzI1XzMyIEJNXzMyXzI1CisjZGVmaW5lIEJNXzMzXzI1IDB4MDAwMDAwMDNmZTAwMDAwMAorI2RlZmluZSBCTV8yNV8zMyBCTV8zM18yNQorI2RlZmluZSBCTV8zNF8yNSAweDAwMDAwMDA3ZmUwMDAwMDAKKyNkZWZpbmUgQk1fMjVfMzQgQk1fMzRfMjUKKyNkZWZpbmUgQk1fMzVfMjUgMHgwMDAwMDAwZmZlMDAwMDAwCisjZGVmaW5lIEJNXzI1XzM1IEJNXzM1XzI1CisjZGVmaW5lIEJNXzM2XzI1IDB4MDAwMDAwMWZmZTAwMDAwMAorI2RlZmluZSBCTV8yNV8zNiBCTV8zNl8yNQorI2RlZmluZSBCTV8zN18yNSAweDAwMDAwMDNmZmUwMDAwMDAKKyNkZWZpbmUgQk1fMjVfMzcgQk1fMzdfMjUKKyNkZWZpbmUgQk1fMzhfMjUgMHgwMDAwMDA3ZmZlMDAwMDAwCisjZGVmaW5lIEJNXzI1XzM4IEJNXzM4XzI1CisjZGVmaW5lIEJNXzM5XzI1IDB4MDAwMDAwZmZmZTAwMDAwMAorI2RlZmluZSBCTV8yNV8zOSBCTV8zOV8yNQorI2RlZmluZSBCTV80MF8yNSAweDAwMDAwMWZmZmUwMDAwMDAKKyNkZWZpbmUgQk1fMjVfNDAgQk1fNDBfMjUKKyNkZWZpbmUgQk1fNDFfMjUgMHgwMDAwMDNmZmZlMDAwMDAwCisjZGVmaW5lIEJNXzI1XzQxIEJNXzQxXzI1CisjZGVmaW5lIEJNXzQyXzI1IDB4MDAwMDA3ZmZmZTAwMDAwMAorI2RlZmluZSBCTV8yNV80MiBCTV80Ml8yNQorI2RlZmluZSBCTV80M18yNSAweDAwMDAwZmZmZmUwMDAwMDAKKyNkZWZpbmUgQk1fMjVfNDMgQk1fNDNfMjUKKyNkZWZpbmUgQk1fNDRfMjUgMHgwMDAwMWZmZmZlMDAwMDAwCisjZGVmaW5lIEJNXzI1XzQ0IEJNXzQ0XzI1CisjZGVmaW5lIEJNXzQ1XzI1IDB4MDAwMDNmZmZmZTAwMDAwMAorI2RlZmluZSBCTV8yNV80NSBCTV80NV8yNQorI2RlZmluZSBCTV80Nl8yNSAweDAwMDA3ZmZmZmUwMDAwMDAKKyNkZWZpbmUgQk1fMjVfNDYgQk1fNDZfMjUKKyNkZWZpbmUgQk1fNDdfMjUgMHgwMDAwZmZmZmZlMDAwMDAwCisjZGVmaW5lIEJNXzI1XzQ3IEJNXzQ3XzI1CisjZGVmaW5lIEJNXzQ4XzI1IDB4MDAwMWZmZmZmZTAwMDAwMAorI2RlZmluZSBCTV8yNV80OCBCTV80OF8yNQorI2RlZmluZSBCTV80OV8yNSAweDAwMDNmZmZmZmUwMDAwMDAKKyNkZWZpbmUgQk1fMjVfNDkgQk1fNDlfMjUKKyNkZWZpbmUgQk1fNTBfMjUgMHgwMDA3ZmZmZmZlMDAwMDAwCisjZGVmaW5lIEJNXzI1XzUwIEJNXzUwXzI1CisjZGVmaW5lIEJNXzUxXzI1IDB4MDAwZmZmZmZmZTAwMDAwMAorI2RlZmluZSBCTV8yNV81MSBCTV81MV8yNQorI2RlZmluZSBCTV81Ml8yNSAweDAwMWZmZmZmZmUwMDAwMDAKKyNkZWZpbmUgQk1fMjVfNTIgQk1fNTJfMjUKKyNkZWZpbmUgQk1fNTNfMjUgMHgwMDNmZmZmZmZlMDAwMDAwCisjZGVmaW5lIEJNXzI1XzUzIEJNXzUzXzI1CisjZGVmaW5lIEJNXzU0XzI1IDB4MDA3ZmZmZmZmZTAwMDAwMAorI2RlZmluZSBCTV8yNV81NCBCTV81NF8yNQorI2RlZmluZSBCTV81NV8yNSAweDAwZmZmZmZmZmUwMDAwMDAKKyNkZWZpbmUgQk1fMjVfNTUgQk1fNTVfMjUKKyNkZWZpbmUgQk1fNTZfMjUgMHgwMWZmZmZmZmZlMDAwMDAwCisjZGVmaW5lIEJNXzI1XzU2IEJNXzU2XzI1CisjZGVmaW5lIEJNXzU3XzI1IDB4MDNmZmZmZmZmZTAwMDAwMAorI2RlZmluZSBCTV8yNV81NyBCTV81N18yNQorI2RlZmluZSBCTV81OF8yNSAweDA3ZmZmZmZmZmUwMDAwMDAKKyNkZWZpbmUgQk1fMjVfNTggQk1fNThfMjUKKyNkZWZpbmUgQk1fNTlfMjUgMHgwZmZmZmZmZmZlMDAwMDAwCisjZGVmaW5lIEJNXzI1XzU5IEJNXzU5XzI1CisjZGVmaW5lIEJNXzYwXzI1IDB4MWZmZmZmZmZmZTAwMDAwMAorI2RlZmluZSBCTV8yNV82MCBCTV82MF8yNQorI2RlZmluZSBCTV82MV8yNSAweDNmZmZmZmZmZmUwMDAwMDAKKyNkZWZpbmUgQk1fMjVfNjEgQk1fNjFfMjUKKyNkZWZpbmUgQk1fNjJfMjUgMHg3ZmZmZmZmZmZlMDAwMDAwCisjZGVmaW5lIEJNXzI1XzYyIEJNXzYyXzI1CisjZGVmaW5lIEJNXzYzXzI1IDB4ZmZmZmZmZmZmZTAwMDAwMAorI2RlZmluZSBCTV8yNV82MyBCTV82M18yNQorI2RlZmluZSBCTV8yNl8yNiAweDAwMDAwMDAwMDQwMDAwMDAKKyNkZWZpbmUgQk1fMjdfMjYgMHgwMDAwMDAwMDBjMDAwMDAwCisjZGVmaW5lIEJNXzI2XzI3IEJNXzI3XzI2CisjZGVmaW5lIEJNXzI4XzI2IDB4MDAwMDAwMDAxYzAwMDAwMAorI2RlZmluZSBCTV8yNl8yOCBCTV8yOF8yNgorI2RlZmluZSBCTV8yOV8yNiAweDAwMDAwMDAwM2MwMDAwMDAKKyNkZWZpbmUgQk1fMjZfMjkgQk1fMjlfMjYKKyNkZWZpbmUgQk1fMzBfMjYgMHgwMDAwMDAwMDdjMDAwMDAwCisjZGVmaW5lIEJNXzI2XzMwIEJNXzMwXzI2CisjZGVmaW5lIEJNXzMxXzI2IDB4MDAwMDAwMDBmYzAwMDAwMAorI2RlZmluZSBCTV8yNl8zMSBCTV8zMV8yNgorI2RlZmluZSBCTV8zMl8yNiAweDAwMDAwMDAxZmMwMDAwMDAKKyNkZWZpbmUgQk1fMjZfMzIgQk1fMzJfMjYKKyNkZWZpbmUgQk1fMzNfMjYgMHgwMDAwMDAwM2ZjMDAwMDAwCisjZGVmaW5lIEJNXzI2XzMzIEJNXzMzXzI2CisjZGVmaW5lIEJNXzM0XzI2IDB4MDAwMDAwMDdmYzAwMDAwMAorI2RlZmluZSBCTV8yNl8zNCBCTV8zNF8yNgorI2RlZmluZSBCTV8zNV8yNiAweDAwMDAwMDBmZmMwMDAwMDAKKyNkZWZpbmUgQk1fMjZfMzUgQk1fMzVfMjYKKyNkZWZpbmUgQk1fMzZfMjYgMHgwMDAwMDAxZmZjMDAwMDAwCisjZGVmaW5lIEJNXzI2XzM2IEJNXzM2XzI2CisjZGVmaW5lIEJNXzM3XzI2IDB4MDAwMDAwM2ZmYzAwMDAwMAorI2RlZmluZSBCTV8yNl8zNyBCTV8zN18yNgorI2RlZmluZSBCTV8zOF8yNiAweDAwMDAwMDdmZmMwMDAwMDAKKyNkZWZpbmUgQk1fMjZfMzggQk1fMzhfMjYKKyNkZWZpbmUgQk1fMzlfMjYgMHgwMDAwMDBmZmZjMDAwMDAwCisjZGVmaW5lIEJNXzI2XzM5IEJNXzM5XzI2CisjZGVmaW5lIEJNXzQwXzI2IDB4MDAwMDAxZmZmYzAwMDAwMAorI2RlZmluZSBCTV8yNl80MCBCTV80MF8yNgorI2RlZmluZSBCTV80MV8yNiAweDAwMDAwM2ZmZmMwMDAwMDAKKyNkZWZpbmUgQk1fMjZfNDEgQk1fNDFfMjYKKyNkZWZpbmUgQk1fNDJfMjYgMHgwMDAwMDdmZmZjMDAwMDAwCisjZGVmaW5lIEJNXzI2XzQyIEJNXzQyXzI2CisjZGVmaW5lIEJNXzQzXzI2IDB4MDAwMDBmZmZmYzAwMDAwMAorI2RlZmluZSBCTV8yNl80MyBCTV80M18yNgorI2RlZmluZSBCTV80NF8yNiAweDAwMDAxZmZmZmMwMDAwMDAKKyNkZWZpbmUgQk1fMjZfNDQgQk1fNDRfMjYKKyNkZWZpbmUgQk1fNDVfMjYgMHgwMDAwM2ZmZmZjMDAwMDAwCisjZGVmaW5lIEJNXzI2XzQ1IEJNXzQ1XzI2CisjZGVmaW5lIEJNXzQ2XzI2IDB4MDAwMDdmZmZmYzAwMDAwMAorI2RlZmluZSBCTV8yNl80NiBCTV80Nl8yNgorI2RlZmluZSBCTV80N18yNiAweDAwMDBmZmZmZmMwMDAwMDAKKyNkZWZpbmUgQk1fMjZfNDcgQk1fNDdfMjYKKyNkZWZpbmUgQk1fNDhfMjYgMHgwMDAxZmZmZmZjMDAwMDAwCisjZGVmaW5lIEJNXzI2XzQ4IEJNXzQ4XzI2CisjZGVmaW5lIEJNXzQ5XzI2IDB4MDAwM2ZmZmZmYzAwMDAwMAorI2RlZmluZSBCTV8yNl80OSBCTV80OV8yNgorI2RlZmluZSBCTV81MF8yNiAweDAwMDdmZmZmZmMwMDAwMDAKKyNkZWZpbmUgQk1fMjZfNTAgQk1fNTBfMjYKKyNkZWZpbmUgQk1fNTFfMjYgMHgwMDBmZmZmZmZjMDAwMDAwCisjZGVmaW5lIEJNXzI2XzUxIEJNXzUxXzI2CisjZGVmaW5lIEJNXzUyXzI2IDB4MDAxZmZmZmZmYzAwMDAwMAorI2RlZmluZSBCTV8yNl81MiBCTV81Ml8yNgorI2RlZmluZSBCTV81M18yNiAweDAwM2ZmZmZmZmMwMDAwMDAKKyNkZWZpbmUgQk1fMjZfNTMgQk1fNTNfMjYKKyNkZWZpbmUgQk1fNTRfMjYgMHgwMDdmZmZmZmZjMDAwMDAwCisjZGVmaW5lIEJNXzI2XzU0IEJNXzU0XzI2CisjZGVmaW5lIEJNXzU1XzI2IDB4MDBmZmZmZmZmYzAwMDAwMAorI2RlZmluZSBCTV8yNl81NSBCTV81NV8yNgorI2RlZmluZSBCTV81Nl8yNiAweDAxZmZmZmZmZmMwMDAwMDAKKyNkZWZpbmUgQk1fMjZfNTYgQk1fNTZfMjYKKyNkZWZpbmUgQk1fNTdfMjYgMHgwM2ZmZmZmZmZjMDAwMDAwCisjZGVmaW5lIEJNXzI2XzU3IEJNXzU3XzI2CisjZGVmaW5lIEJNXzU4XzI2IDB4MDdmZmZmZmZmYzAwMDAwMAorI2RlZmluZSBCTV8yNl81OCBCTV81OF8yNgorI2RlZmluZSBCTV81OV8yNiAweDBmZmZmZmZmZmMwMDAwMDAKKyNkZWZpbmUgQk1fMjZfNTkgQk1fNTlfMjYKKyNkZWZpbmUgQk1fNjBfMjYgMHgxZmZmZmZmZmZjMDAwMDAwCisjZGVmaW5lIEJNXzI2XzYwIEJNXzYwXzI2CisjZGVmaW5lIEJNXzYxXzI2IDB4M2ZmZmZmZmZmYzAwMDAwMAorI2RlZmluZSBCTV8yNl82MSBCTV82MV8yNgorI2RlZmluZSBCTV82Ml8yNiAweDdmZmZmZmZmZmMwMDAwMDAKKyNkZWZpbmUgQk1fMjZfNjIgQk1fNjJfMjYKKyNkZWZpbmUgQk1fNjNfMjYgMHhmZmZmZmZmZmZjMDAwMDAwCisjZGVmaW5lIEJNXzI2XzYzIEJNXzYzXzI2CisjZGVmaW5lIEJNXzI3XzI3IDB4MDAwMDAwMDAwODAwMDAwMAorI2RlZmluZSBCTV8yOF8yNyAweDAwMDAwMDAwMTgwMDAwMDAKKyNkZWZpbmUgQk1fMjdfMjggQk1fMjhfMjcKKyNkZWZpbmUgQk1fMjlfMjcgMHgwMDAwMDAwMDM4MDAwMDAwCisjZGVmaW5lIEJNXzI3XzI5IEJNXzI5XzI3CisjZGVmaW5lIEJNXzMwXzI3IDB4MDAwMDAwMDA3ODAwMDAwMAorI2RlZmluZSBCTV8yN18zMCBCTV8zMF8yNworI2RlZmluZSBCTV8zMV8yNyAweDAwMDAwMDAwZjgwMDAwMDAKKyNkZWZpbmUgQk1fMjdfMzEgQk1fMzFfMjcKKyNkZWZpbmUgQk1fMzJfMjcgMHgwMDAwMDAwMWY4MDAwMDAwCisjZGVmaW5lIEJNXzI3XzMyIEJNXzMyXzI3CisjZGVmaW5lIEJNXzMzXzI3IDB4MDAwMDAwMDNmODAwMDAwMAorI2RlZmluZSBCTV8yN18zMyBCTV8zM18yNworI2RlZmluZSBCTV8zNF8yNyAweDAwMDAwMDA3ZjgwMDAwMDAKKyNkZWZpbmUgQk1fMjdfMzQgQk1fMzRfMjcKKyNkZWZpbmUgQk1fMzVfMjcgMHgwMDAwMDAwZmY4MDAwMDAwCisjZGVmaW5lIEJNXzI3XzM1IEJNXzM1XzI3CisjZGVmaW5lIEJNXzM2XzI3IDB4MDAwMDAwMWZmODAwMDAwMAorI2RlZmluZSBCTV8yN18zNiBCTV8zNl8yNworI2RlZmluZSBCTV8zN18yNyAweDAwMDAwMDNmZjgwMDAwMDAKKyNkZWZpbmUgQk1fMjdfMzcgQk1fMzdfMjcKKyNkZWZpbmUgQk1fMzhfMjcgMHgwMDAwMDA3ZmY4MDAwMDAwCisjZGVmaW5lIEJNXzI3XzM4IEJNXzM4XzI3CisjZGVmaW5lIEJNXzM5XzI3IDB4MDAwMDAwZmZmODAwMDAwMAorI2RlZmluZSBCTV8yN18zOSBCTV8zOV8yNworI2RlZmluZSBCTV80MF8yNyAweDAwMDAwMWZmZjgwMDAwMDAKKyNkZWZpbmUgQk1fMjdfNDAgQk1fNDBfMjcKKyNkZWZpbmUgQk1fNDFfMjcgMHgwMDAwMDNmZmY4MDAwMDAwCisjZGVmaW5lIEJNXzI3XzQxIEJNXzQxXzI3CisjZGVmaW5lIEJNXzQyXzI3IDB4MDAwMDA3ZmZmODAwMDAwMAorI2RlZmluZSBCTV8yN180MiBCTV80Ml8yNworI2RlZmluZSBCTV80M18yNyAweDAwMDAwZmZmZjgwMDAwMDAKKyNkZWZpbmUgQk1fMjdfNDMgQk1fNDNfMjcKKyNkZWZpbmUgQk1fNDRfMjcgMHgwMDAwMWZmZmY4MDAwMDAwCisjZGVmaW5lIEJNXzI3XzQ0IEJNXzQ0XzI3CisjZGVmaW5lIEJNXzQ1XzI3IDB4MDAwMDNmZmZmODAwMDAwMAorI2RlZmluZSBCTV8yN180NSBCTV80NV8yNworI2RlZmluZSBCTV80Nl8yNyAweDAwMDA3ZmZmZjgwMDAwMDAKKyNkZWZpbmUgQk1fMjdfNDYgQk1fNDZfMjcKKyNkZWZpbmUgQk1fNDdfMjcgMHgwMDAwZmZmZmY4MDAwMDAwCisjZGVmaW5lIEJNXzI3XzQ3IEJNXzQ3XzI3CisjZGVmaW5lIEJNXzQ4XzI3IDB4MDAwMWZmZmZmODAwMDAwMAorI2RlZmluZSBCTV8yN180OCBCTV80OF8yNworI2RlZmluZSBCTV80OV8yNyAweDAwMDNmZmZmZjgwMDAwMDAKKyNkZWZpbmUgQk1fMjdfNDkgQk1fNDlfMjcKKyNkZWZpbmUgQk1fNTBfMjcgMHgwMDA3ZmZmZmY4MDAwMDAwCisjZGVmaW5lIEJNXzI3XzUwIEJNXzUwXzI3CisjZGVmaW5lIEJNXzUxXzI3IDB4MDAwZmZmZmZmODAwMDAwMAorI2RlZmluZSBCTV8yN181MSBCTV81MV8yNworI2RlZmluZSBCTV81Ml8yNyAweDAwMWZmZmZmZjgwMDAwMDAKKyNkZWZpbmUgQk1fMjdfNTIgQk1fNTJfMjcKKyNkZWZpbmUgQk1fNTNfMjcgMHgwMDNmZmZmZmY4MDAwMDAwCisjZGVmaW5lIEJNXzI3XzUzIEJNXzUzXzI3CisjZGVmaW5lIEJNXzU0XzI3IDB4MDA3ZmZmZmZmODAwMDAwMAorI2RlZmluZSBCTV8yN181NCBCTV81NF8yNworI2RlZmluZSBCTV81NV8yNyAweDAwZmZmZmZmZjgwMDAwMDAKKyNkZWZpbmUgQk1fMjdfNTUgQk1fNTVfMjcKKyNkZWZpbmUgQk1fNTZfMjcgMHgwMWZmZmZmZmY4MDAwMDAwCisjZGVmaW5lIEJNXzI3XzU2IEJNXzU2XzI3CisjZGVmaW5lIEJNXzU3XzI3IDB4MDNmZmZmZmZmODAwMDAwMAorI2RlZmluZSBCTV8yN181NyBCTV81N18yNworI2RlZmluZSBCTV81OF8yNyAweDA3ZmZmZmZmZjgwMDAwMDAKKyNkZWZpbmUgQk1fMjdfNTggQk1fNThfMjcKKyNkZWZpbmUgQk1fNTlfMjcgMHgwZmZmZmZmZmY4MDAwMDAwCisjZGVmaW5lIEJNXzI3XzU5IEJNXzU5XzI3CisjZGVmaW5lIEJNXzYwXzI3IDB4MWZmZmZmZmZmODAwMDAwMAorI2RlZmluZSBCTV8yN182MCBCTV82MF8yNworI2RlZmluZSBCTV82MV8yNyAweDNmZmZmZmZmZjgwMDAwMDAKKyNkZWZpbmUgQk1fMjdfNjEgQk1fNjFfMjcKKyNkZWZpbmUgQk1fNjJfMjcgMHg3ZmZmZmZmZmY4MDAwMDAwCisjZGVmaW5lIEJNXzI3XzYyIEJNXzYyXzI3CisjZGVmaW5lIEJNXzYzXzI3IDB4ZmZmZmZmZmZmODAwMDAwMAorI2RlZmluZSBCTV8yN182MyBCTV82M18yNworI2RlZmluZSBCTV8yOF8yOCAweDAwMDAwMDAwMTAwMDAwMDAKKyNkZWZpbmUgQk1fMjlfMjggMHgwMDAwMDAwMDMwMDAwMDAwCisjZGVmaW5lIEJNXzI4XzI5IEJNXzI5XzI4CisjZGVmaW5lIEJNXzMwXzI4IDB4MDAwMDAwMDA3MDAwMDAwMAorI2RlZmluZSBCTV8yOF8zMCBCTV8zMF8yOAorI2RlZmluZSBCTV8zMV8yOCAweDAwMDAwMDAwZjAwMDAwMDAKKyNkZWZpbmUgQk1fMjhfMzEgQk1fMzFfMjgKKyNkZWZpbmUgQk1fMzJfMjggMHgwMDAwMDAwMWYwMDAwMDAwCisjZGVmaW5lIEJNXzI4XzMyIEJNXzMyXzI4CisjZGVmaW5lIEJNXzMzXzI4IDB4MDAwMDAwMDNmMDAwMDAwMAorI2RlZmluZSBCTV8yOF8zMyBCTV8zM18yOAorI2RlZmluZSBCTV8zNF8yOCAweDAwMDAwMDA3ZjAwMDAwMDAKKyNkZWZpbmUgQk1fMjhfMzQgQk1fMzRfMjgKKyNkZWZpbmUgQk1fMzVfMjggMHgwMDAwMDAwZmYwMDAwMDAwCisjZGVmaW5lIEJNXzI4XzM1IEJNXzM1XzI4CisjZGVmaW5lIEJNXzM2XzI4IDB4MDAwMDAwMWZmMDAwMDAwMAorI2RlZmluZSBCTV8yOF8zNiBCTV8zNl8yOAorI2RlZmluZSBCTV8zN18yOCAweDAwMDAwMDNmZjAwMDAwMDAKKyNkZWZpbmUgQk1fMjhfMzcgQk1fMzdfMjgKKyNkZWZpbmUgQk1fMzhfMjggMHgwMDAwMDA3ZmYwMDAwMDAwCisjZGVmaW5lIEJNXzI4XzM4IEJNXzM4XzI4CisjZGVmaW5lIEJNXzM5XzI4IDB4MDAwMDAwZmZmMDAwMDAwMAorI2RlZmluZSBCTV8yOF8zOSBCTV8zOV8yOAorI2RlZmluZSBCTV80MF8yOCAweDAwMDAwMWZmZjAwMDAwMDAKKyNkZWZpbmUgQk1fMjhfNDAgQk1fNDBfMjgKKyNkZWZpbmUgQk1fNDFfMjggMHgwMDAwMDNmZmYwMDAwMDAwCisjZGVmaW5lIEJNXzI4XzQxIEJNXzQxXzI4CisjZGVmaW5lIEJNXzQyXzI4IDB4MDAwMDA3ZmZmMDAwMDAwMAorI2RlZmluZSBCTV8yOF80MiBCTV80Ml8yOAorI2RlZmluZSBCTV80M18yOCAweDAwMDAwZmZmZjAwMDAwMDAKKyNkZWZpbmUgQk1fMjhfNDMgQk1fNDNfMjgKKyNkZWZpbmUgQk1fNDRfMjggMHgwMDAwMWZmZmYwMDAwMDAwCisjZGVmaW5lIEJNXzI4XzQ0IEJNXzQ0XzI4CisjZGVmaW5lIEJNXzQ1XzI4IDB4MDAwMDNmZmZmMDAwMDAwMAorI2RlZmluZSBCTV8yOF80NSBCTV80NV8yOAorI2RlZmluZSBCTV80Nl8yOCAweDAwMDA3ZmZmZjAwMDAwMDAKKyNkZWZpbmUgQk1fMjhfNDYgQk1fNDZfMjgKKyNkZWZpbmUgQk1fNDdfMjggMHgwMDAwZmZmZmYwMDAwMDAwCisjZGVmaW5lIEJNXzI4XzQ3IEJNXzQ3XzI4CisjZGVmaW5lIEJNXzQ4XzI4IDB4MDAwMWZmZmZmMDAwMDAwMAorI2RlZmluZSBCTV8yOF80OCBCTV80OF8yOAorI2RlZmluZSBCTV80OV8yOCAweDAwMDNmZmZmZjAwMDAwMDAKKyNkZWZpbmUgQk1fMjhfNDkgQk1fNDlfMjgKKyNkZWZpbmUgQk1fNTBfMjggMHgwMDA3ZmZmZmYwMDAwMDAwCisjZGVmaW5lIEJNXzI4XzUwIEJNXzUwXzI4CisjZGVmaW5lIEJNXzUxXzI4IDB4MDAwZmZmZmZmMDAwMDAwMAorI2RlZmluZSBCTV8yOF81MSBCTV81MV8yOAorI2RlZmluZSBCTV81Ml8yOCAweDAwMWZmZmZmZjAwMDAwMDAKKyNkZWZpbmUgQk1fMjhfNTIgQk1fNTJfMjgKKyNkZWZpbmUgQk1fNTNfMjggMHgwMDNmZmZmZmYwMDAwMDAwCisjZGVmaW5lIEJNXzI4XzUzIEJNXzUzXzI4CisjZGVmaW5lIEJNXzU0XzI4IDB4MDA3ZmZmZmZmMDAwMDAwMAorI2RlZmluZSBCTV8yOF81NCBCTV81NF8yOAorI2RlZmluZSBCTV81NV8yOCAweDAwZmZmZmZmZjAwMDAwMDAKKyNkZWZpbmUgQk1fMjhfNTUgQk1fNTVfMjgKKyNkZWZpbmUgQk1fNTZfMjggMHgwMWZmZmZmZmYwMDAwMDAwCisjZGVmaW5lIEJNXzI4XzU2IEJNXzU2XzI4CisjZGVmaW5lIEJNXzU3XzI4IDB4MDNmZmZmZmZmMDAwMDAwMAorI2RlZmluZSBCTV8yOF81NyBCTV81N18yOAorI2RlZmluZSBCTV81OF8yOCAweDA3ZmZmZmZmZjAwMDAwMDAKKyNkZWZpbmUgQk1fMjhfNTggQk1fNThfMjgKKyNkZWZpbmUgQk1fNTlfMjggMHgwZmZmZmZmZmYwMDAwMDAwCisjZGVmaW5lIEJNXzI4XzU5IEJNXzU5XzI4CisjZGVmaW5lIEJNXzYwXzI4IDB4MWZmZmZmZmZmMDAwMDAwMAorI2RlZmluZSBCTV8yOF82MCBCTV82MF8yOAorI2RlZmluZSBCTV82MV8yOCAweDNmZmZmZmZmZjAwMDAwMDAKKyNkZWZpbmUgQk1fMjhfNjEgQk1fNjFfMjgKKyNkZWZpbmUgQk1fNjJfMjggMHg3ZmZmZmZmZmYwMDAwMDAwCisjZGVmaW5lIEJNXzI4XzYyIEJNXzYyXzI4CisjZGVmaW5lIEJNXzYzXzI4IDB4ZmZmZmZmZmZmMDAwMDAwMAorI2RlZmluZSBCTV8yOF82MyBCTV82M18yOAorI2RlZmluZSBCTV8yOV8yOSAweDAwMDAwMDAwMjAwMDAwMDAKKyNkZWZpbmUgQk1fMzBfMjkgMHgwMDAwMDAwMDYwMDAwMDAwCisjZGVmaW5lIEJNXzI5XzMwIEJNXzMwXzI5CisjZGVmaW5lIEJNXzMxXzI5IDB4MDAwMDAwMDBlMDAwMDAwMAorI2RlZmluZSBCTV8yOV8zMSBCTV8zMV8yOQorI2RlZmluZSBCTV8zMl8yOSAweDAwMDAwMDAxZTAwMDAwMDAKKyNkZWZpbmUgQk1fMjlfMzIgQk1fMzJfMjkKKyNkZWZpbmUgQk1fMzNfMjkgMHgwMDAwMDAwM2UwMDAwMDAwCisjZGVmaW5lIEJNXzI5XzMzIEJNXzMzXzI5CisjZGVmaW5lIEJNXzM0XzI5IDB4MDAwMDAwMDdlMDAwMDAwMAorI2RlZmluZSBCTV8yOV8zNCBCTV8zNF8yOQorI2RlZmluZSBCTV8zNV8yOSAweDAwMDAwMDBmZTAwMDAwMDAKKyNkZWZpbmUgQk1fMjlfMzUgQk1fMzVfMjkKKyNkZWZpbmUgQk1fMzZfMjkgMHgwMDAwMDAxZmUwMDAwMDAwCisjZGVmaW5lIEJNXzI5XzM2IEJNXzM2XzI5CisjZGVmaW5lIEJNXzM3XzI5IDB4MDAwMDAwM2ZlMDAwMDAwMAorI2RlZmluZSBCTV8yOV8zNyBCTV8zN18yOQorI2RlZmluZSBCTV8zOF8yOSAweDAwMDAwMDdmZTAwMDAwMDAKKyNkZWZpbmUgQk1fMjlfMzggQk1fMzhfMjkKKyNkZWZpbmUgQk1fMzlfMjkgMHgwMDAwMDBmZmUwMDAwMDAwCisjZGVmaW5lIEJNXzI5XzM5IEJNXzM5XzI5CisjZGVmaW5lIEJNXzQwXzI5IDB4MDAwMDAxZmZlMDAwMDAwMAorI2RlZmluZSBCTV8yOV80MCBCTV80MF8yOQorI2RlZmluZSBCTV80MV8yOSAweDAwMDAwM2ZmZTAwMDAwMDAKKyNkZWZpbmUgQk1fMjlfNDEgQk1fNDFfMjkKKyNkZWZpbmUgQk1fNDJfMjkgMHgwMDAwMDdmZmUwMDAwMDAwCisjZGVmaW5lIEJNXzI5XzQyIEJNXzQyXzI5CisjZGVmaW5lIEJNXzQzXzI5IDB4MDAwMDBmZmZlMDAwMDAwMAorI2RlZmluZSBCTV8yOV80MyBCTV80M18yOQorI2RlZmluZSBCTV80NF8yOSAweDAwMDAxZmZmZTAwMDAwMDAKKyNkZWZpbmUgQk1fMjlfNDQgQk1fNDRfMjkKKyNkZWZpbmUgQk1fNDVfMjkgMHgwMDAwM2ZmZmUwMDAwMDAwCisjZGVmaW5lIEJNXzI5XzQ1IEJNXzQ1XzI5CisjZGVmaW5lIEJNXzQ2XzI5IDB4MDAwMDdmZmZlMDAwMDAwMAorI2RlZmluZSBCTV8yOV80NiBCTV80Nl8yOQorI2RlZmluZSBCTV80N18yOSAweDAwMDBmZmZmZTAwMDAwMDAKKyNkZWZpbmUgQk1fMjlfNDcgQk1fNDdfMjkKKyNkZWZpbmUgQk1fNDhfMjkgMHgwMDAxZmZmZmUwMDAwMDAwCisjZGVmaW5lIEJNXzI5XzQ4IEJNXzQ4XzI5CisjZGVmaW5lIEJNXzQ5XzI5IDB4MDAwM2ZmZmZlMDAwMDAwMAorI2RlZmluZSBCTV8yOV80OSBCTV80OV8yOQorI2RlZmluZSBCTV81MF8yOSAweDAwMDdmZmZmZTAwMDAwMDAKKyNkZWZpbmUgQk1fMjlfNTAgQk1fNTBfMjkKKyNkZWZpbmUgQk1fNTFfMjkgMHgwMDBmZmZmZmUwMDAwMDAwCisjZGVmaW5lIEJNXzI5XzUxIEJNXzUxXzI5CisjZGVmaW5lIEJNXzUyXzI5IDB4MDAxZmZmZmZlMDAwMDAwMAorI2RlZmluZSBCTV8yOV81MiBCTV81Ml8yOQorI2RlZmluZSBCTV81M18yOSAweDAwM2ZmZmZmZTAwMDAwMDAKKyNkZWZpbmUgQk1fMjlfNTMgQk1fNTNfMjkKKyNkZWZpbmUgQk1fNTRfMjkgMHgwMDdmZmZmZmUwMDAwMDAwCisjZGVmaW5lIEJNXzI5XzU0IEJNXzU0XzI5CisjZGVmaW5lIEJNXzU1XzI5IDB4MDBmZmZmZmZlMDAwMDAwMAorI2RlZmluZSBCTV8yOV81NSBCTV81NV8yOQorI2RlZmluZSBCTV81Nl8yOSAweDAxZmZmZmZmZTAwMDAwMDAKKyNkZWZpbmUgQk1fMjlfNTYgQk1fNTZfMjkKKyNkZWZpbmUgQk1fNTdfMjkgMHgwM2ZmZmZmZmUwMDAwMDAwCisjZGVmaW5lIEJNXzI5XzU3IEJNXzU3XzI5CisjZGVmaW5lIEJNXzU4XzI5IDB4MDdmZmZmZmZlMDAwMDAwMAorI2RlZmluZSBCTV8yOV81OCBCTV81OF8yOQorI2RlZmluZSBCTV81OV8yOSAweDBmZmZmZmZmZTAwMDAwMDAKKyNkZWZpbmUgQk1fMjlfNTkgQk1fNTlfMjkKKyNkZWZpbmUgQk1fNjBfMjkgMHgxZmZmZmZmZmUwMDAwMDAwCisjZGVmaW5lIEJNXzI5XzYwIEJNXzYwXzI5CisjZGVmaW5lIEJNXzYxXzI5IDB4M2ZmZmZmZmZlMDAwMDAwMAorI2RlZmluZSBCTV8yOV82MSBCTV82MV8yOQorI2RlZmluZSBCTV82Ml8yOSAweDdmZmZmZmZmZTAwMDAwMDAKKyNkZWZpbmUgQk1fMjlfNjIgQk1fNjJfMjkKKyNkZWZpbmUgQk1fNjNfMjkgMHhmZmZmZmZmZmUwMDAwMDAwCisjZGVmaW5lIEJNXzI5XzYzIEJNXzYzXzI5CisjZGVmaW5lIEJNXzMwXzMwIDB4MDAwMDAwMDA0MDAwMDAwMAorI2RlZmluZSBCTV8zMV8zMCAweDAwMDAwMDAwYzAwMDAwMDAKKyNkZWZpbmUgQk1fMzBfMzEgQk1fMzFfMzAKKyNkZWZpbmUgQk1fMzJfMzAgMHgwMDAwMDAwMWMwMDAwMDAwCisjZGVmaW5lIEJNXzMwXzMyIEJNXzMyXzMwCisjZGVmaW5lIEJNXzMzXzMwIDB4MDAwMDAwMDNjMDAwMDAwMAorI2RlZmluZSBCTV8zMF8zMyBCTV8zM18zMAorI2RlZmluZSBCTV8zNF8zMCAweDAwMDAwMDA3YzAwMDAwMDAKKyNkZWZpbmUgQk1fMzBfMzQgQk1fMzRfMzAKKyNkZWZpbmUgQk1fMzVfMzAgMHgwMDAwMDAwZmMwMDAwMDAwCisjZGVmaW5lIEJNXzMwXzM1IEJNXzM1XzMwCisjZGVmaW5lIEJNXzM2XzMwIDB4MDAwMDAwMWZjMDAwMDAwMAorI2RlZmluZSBCTV8zMF8zNiBCTV8zNl8zMAorI2RlZmluZSBCTV8zN18zMCAweDAwMDAwMDNmYzAwMDAwMDAKKyNkZWZpbmUgQk1fMzBfMzcgQk1fMzdfMzAKKyNkZWZpbmUgQk1fMzhfMzAgMHgwMDAwMDA3ZmMwMDAwMDAwCisjZGVmaW5lIEJNXzMwXzM4IEJNXzM4XzMwCisjZGVmaW5lIEJNXzM5XzMwIDB4MDAwMDAwZmZjMDAwMDAwMAorI2RlZmluZSBCTV8zMF8zOSBCTV8zOV8zMAorI2RlZmluZSBCTV80MF8zMCAweDAwMDAwMWZmYzAwMDAwMDAKKyNkZWZpbmUgQk1fMzBfNDAgQk1fNDBfMzAKKyNkZWZpbmUgQk1fNDFfMzAgMHgwMDAwMDNmZmMwMDAwMDAwCisjZGVmaW5lIEJNXzMwXzQxIEJNXzQxXzMwCisjZGVmaW5lIEJNXzQyXzMwIDB4MDAwMDA3ZmZjMDAwMDAwMAorI2RlZmluZSBCTV8zMF80MiBCTV80Ml8zMAorI2RlZmluZSBCTV80M18zMCAweDAwMDAwZmZmYzAwMDAwMDAKKyNkZWZpbmUgQk1fMzBfNDMgQk1fNDNfMzAKKyNkZWZpbmUgQk1fNDRfMzAgMHgwMDAwMWZmZmMwMDAwMDAwCisjZGVmaW5lIEJNXzMwXzQ0IEJNXzQ0XzMwCisjZGVmaW5lIEJNXzQ1XzMwIDB4MDAwMDNmZmZjMDAwMDAwMAorI2RlZmluZSBCTV8zMF80NSBCTV80NV8zMAorI2RlZmluZSBCTV80Nl8zMCAweDAwMDA3ZmZmYzAwMDAwMDAKKyNkZWZpbmUgQk1fMzBfNDYgQk1fNDZfMzAKKyNkZWZpbmUgQk1fNDdfMzAgMHgwMDAwZmZmZmMwMDAwMDAwCisjZGVmaW5lIEJNXzMwXzQ3IEJNXzQ3XzMwCisjZGVmaW5lIEJNXzQ4XzMwIDB4MDAwMWZmZmZjMDAwMDAwMAorI2RlZmluZSBCTV8zMF80OCBCTV80OF8zMAorI2RlZmluZSBCTV80OV8zMCAweDAwMDNmZmZmYzAwMDAwMDAKKyNkZWZpbmUgQk1fMzBfNDkgQk1fNDlfMzAKKyNkZWZpbmUgQk1fNTBfMzAgMHgwMDA3ZmZmZmMwMDAwMDAwCisjZGVmaW5lIEJNXzMwXzUwIEJNXzUwXzMwCisjZGVmaW5lIEJNXzUxXzMwIDB4MDAwZmZmZmZjMDAwMDAwMAorI2RlZmluZSBCTV8zMF81MSBCTV81MV8zMAorI2RlZmluZSBCTV81Ml8zMCAweDAwMWZmZmZmYzAwMDAwMDAKKyNkZWZpbmUgQk1fMzBfNTIgQk1fNTJfMzAKKyNkZWZpbmUgQk1fNTNfMzAgMHgwMDNmZmZmZmMwMDAwMDAwCisjZGVmaW5lIEJNXzMwXzUzIEJNXzUzXzMwCisjZGVmaW5lIEJNXzU0XzMwIDB4MDA3ZmZmZmZjMDAwMDAwMAorI2RlZmluZSBCTV8zMF81NCBCTV81NF8zMAorI2RlZmluZSBCTV81NV8zMCAweDAwZmZmZmZmYzAwMDAwMDAKKyNkZWZpbmUgQk1fMzBfNTUgQk1fNTVfMzAKKyNkZWZpbmUgQk1fNTZfMzAgMHgwMWZmZmZmZmMwMDAwMDAwCisjZGVmaW5lIEJNXzMwXzU2IEJNXzU2XzMwCisjZGVmaW5lIEJNXzU3XzMwIDB4MDNmZmZmZmZjMDAwMDAwMAorI2RlZmluZSBCTV8zMF81NyBCTV81N18zMAorI2RlZmluZSBCTV81OF8zMCAweDA3ZmZmZmZmYzAwMDAwMDAKKyNkZWZpbmUgQk1fMzBfNTggQk1fNThfMzAKKyNkZWZpbmUgQk1fNTlfMzAgMHgwZmZmZmZmZmMwMDAwMDAwCisjZGVmaW5lIEJNXzMwXzU5IEJNXzU5XzMwCisjZGVmaW5lIEJNXzYwXzMwIDB4MWZmZmZmZmZjMDAwMDAwMAorI2RlZmluZSBCTV8zMF82MCBCTV82MF8zMAorI2RlZmluZSBCTV82MV8zMCAweDNmZmZmZmZmYzAwMDAwMDAKKyNkZWZpbmUgQk1fMzBfNjEgQk1fNjFfMzAKKyNkZWZpbmUgQk1fNjJfMzAgMHg3ZmZmZmZmZmMwMDAwMDAwCisjZGVmaW5lIEJNXzMwXzYyIEJNXzYyXzMwCisjZGVmaW5lIEJNXzYzXzMwIDB4ZmZmZmZmZmZjMDAwMDAwMAorI2RlZmluZSBCTV8zMF82MyBCTV82M18zMAorI2RlZmluZSBCTV8zMV8zMSAweDAwMDAwMDAwODAwMDAwMDAKKyNkZWZpbmUgQk1fMzJfMzEgMHgwMDAwMDAwMTgwMDAwMDAwCisjZGVmaW5lIEJNXzMxXzMyIEJNXzMyXzMxCisjZGVmaW5lIEJNXzMzXzMxIDB4MDAwMDAwMDM4MDAwMDAwMAorI2RlZmluZSBCTV8zMV8zMyBCTV8zM18zMQorI2RlZmluZSBCTV8zNF8zMSAweDAwMDAwMDA3ODAwMDAwMDAKKyNkZWZpbmUgQk1fMzFfMzQgQk1fMzRfMzEKKyNkZWZpbmUgQk1fMzVfMzEgMHgwMDAwMDAwZjgwMDAwMDAwCisjZGVmaW5lIEJNXzMxXzM1IEJNXzM1XzMxCisjZGVmaW5lIEJNXzM2XzMxIDB4MDAwMDAwMWY4MDAwMDAwMAorI2RlZmluZSBCTV8zMV8zNiBCTV8zNl8zMQorI2RlZmluZSBCTV8zN18zMSAweDAwMDAwMDNmODAwMDAwMDAKKyNkZWZpbmUgQk1fMzFfMzcgQk1fMzdfMzEKKyNkZWZpbmUgQk1fMzhfMzEgMHgwMDAwMDA3ZjgwMDAwMDAwCisjZGVmaW5lIEJNXzMxXzM4IEJNXzM4XzMxCisjZGVmaW5lIEJNXzM5XzMxIDB4MDAwMDAwZmY4MDAwMDAwMAorI2RlZmluZSBCTV8zMV8zOSBCTV8zOV8zMQorI2RlZmluZSBCTV80MF8zMSAweDAwMDAwMWZmODAwMDAwMDAKKyNkZWZpbmUgQk1fMzFfNDAgQk1fNDBfMzEKKyNkZWZpbmUgQk1fNDFfMzEgMHgwMDAwMDNmZjgwMDAwMDAwCisjZGVmaW5lIEJNXzMxXzQxIEJNXzQxXzMxCisjZGVmaW5lIEJNXzQyXzMxIDB4MDAwMDA3ZmY4MDAwMDAwMAorI2RlZmluZSBCTV8zMV80MiBCTV80Ml8zMQorI2RlZmluZSBCTV80M18zMSAweDAwMDAwZmZmODAwMDAwMDAKKyNkZWZpbmUgQk1fMzFfNDMgQk1fNDNfMzEKKyNkZWZpbmUgQk1fNDRfMzEgMHgwMDAwMWZmZjgwMDAwMDAwCisjZGVmaW5lIEJNXzMxXzQ0IEJNXzQ0XzMxCisjZGVmaW5lIEJNXzQ1XzMxIDB4MDAwMDNmZmY4MDAwMDAwMAorI2RlZmluZSBCTV8zMV80NSBCTV80NV8zMQorI2RlZmluZSBCTV80Nl8zMSAweDAwMDA3ZmZmODAwMDAwMDAKKyNkZWZpbmUgQk1fMzFfNDYgQk1fNDZfMzEKKyNkZWZpbmUgQk1fNDdfMzEgMHgwMDAwZmZmZjgwMDAwMDAwCisjZGVmaW5lIEJNXzMxXzQ3IEJNXzQ3XzMxCisjZGVmaW5lIEJNXzQ4XzMxIDB4MDAwMWZmZmY4MDAwMDAwMAorI2RlZmluZSBCTV8zMV80OCBCTV80OF8zMQorI2RlZmluZSBCTV80OV8zMSAweDAwMDNmZmZmODAwMDAwMDAKKyNkZWZpbmUgQk1fMzFfNDkgQk1fNDlfMzEKKyNkZWZpbmUgQk1fNTBfMzEgMHgwMDA3ZmZmZjgwMDAwMDAwCisjZGVmaW5lIEJNXzMxXzUwIEJNXzUwXzMxCisjZGVmaW5lIEJNXzUxXzMxIDB4MDAwZmZmZmY4MDAwMDAwMAorI2RlZmluZSBCTV8zMV81MSBCTV81MV8zMQorI2RlZmluZSBCTV81Ml8zMSAweDAwMWZmZmZmODAwMDAwMDAKKyNkZWZpbmUgQk1fMzFfNTIgQk1fNTJfMzEKKyNkZWZpbmUgQk1fNTNfMzEgMHgwMDNmZmZmZjgwMDAwMDAwCisjZGVmaW5lIEJNXzMxXzUzIEJNXzUzXzMxCisjZGVmaW5lIEJNXzU0XzMxIDB4MDA3ZmZmZmY4MDAwMDAwMAorI2RlZmluZSBCTV8zMV81NCBCTV81NF8zMQorI2RlZmluZSBCTV81NV8zMSAweDAwZmZmZmZmODAwMDAwMDAKKyNkZWZpbmUgQk1fMzFfNTUgQk1fNTVfMzEKKyNkZWZpbmUgQk1fNTZfMzEgMHgwMWZmZmZmZjgwMDAwMDAwCisjZGVmaW5lIEJNXzMxXzU2IEJNXzU2XzMxCisjZGVmaW5lIEJNXzU3XzMxIDB4MDNmZmZmZmY4MDAwMDAwMAorI2RlZmluZSBCTV8zMV81NyBCTV81N18zMQorI2RlZmluZSBCTV81OF8zMSAweDA3ZmZmZmZmODAwMDAwMDAKKyNkZWZpbmUgQk1fMzFfNTggQk1fNThfMzEKKyNkZWZpbmUgQk1fNTlfMzEgMHgwZmZmZmZmZjgwMDAwMDAwCisjZGVmaW5lIEJNXzMxXzU5IEJNXzU5XzMxCisjZGVmaW5lIEJNXzYwXzMxIDB4MWZmZmZmZmY4MDAwMDAwMAorI2RlZmluZSBCTV8zMV82MCBCTV82MF8zMQorI2RlZmluZSBCTV82MV8zMSAweDNmZmZmZmZmODAwMDAwMDAKKyNkZWZpbmUgQk1fMzFfNjEgQk1fNjFfMzEKKyNkZWZpbmUgQk1fNjJfMzEgMHg3ZmZmZmZmZjgwMDAwMDAwCisjZGVmaW5lIEJNXzMxXzYyIEJNXzYyXzMxCisjZGVmaW5lIEJNXzYzXzMxIDB4ZmZmZmZmZmY4MDAwMDAwMAorI2RlZmluZSBCTV8zMV82MyBCTV82M18zMQorI2RlZmluZSBCTV8zMl8zMiAweDAwMDAwMDAxMDAwMDAwMDAKKyNkZWZpbmUgQk1fMzNfMzIgMHgwMDAwMDAwMzAwMDAwMDAwCisjZGVmaW5lIEJNXzMyXzMzIEJNXzMzXzMyCisjZGVmaW5lIEJNXzM0XzMyIDB4MDAwMDAwMDcwMDAwMDAwMAorI2RlZmluZSBCTV8zMl8zNCBCTV8zNF8zMgorI2RlZmluZSBCTV8zNV8zMiAweDAwMDAwMDBmMDAwMDAwMDAKKyNkZWZpbmUgQk1fMzJfMzUgQk1fMzVfMzIKKyNkZWZpbmUgQk1fMzZfMzIgMHgwMDAwMDAxZjAwMDAwMDAwCisjZGVmaW5lIEJNXzMyXzM2IEJNXzM2XzMyCisjZGVmaW5lIEJNXzM3XzMyIDB4MDAwMDAwM2YwMDAwMDAwMAorI2RlZmluZSBCTV8zMl8zNyBCTV8zN18zMgorI2RlZmluZSBCTV8zOF8zMiAweDAwMDAwMDdmMDAwMDAwMDAKKyNkZWZpbmUgQk1fMzJfMzggQk1fMzhfMzIKKyNkZWZpbmUgQk1fMzlfMzIgMHgwMDAwMDBmZjAwMDAwMDAwCisjZGVmaW5lIEJNXzMyXzM5IEJNXzM5XzMyCisjZGVmaW5lIEJNXzQwXzMyIDB4MDAwMDAxZmYwMDAwMDAwMAorI2RlZmluZSBCTV8zMl80MCBCTV80MF8zMgorI2RlZmluZSBCTV80MV8zMiAweDAwMDAwM2ZmMDAwMDAwMDAKKyNkZWZpbmUgQk1fMzJfNDEgQk1fNDFfMzIKKyNkZWZpbmUgQk1fNDJfMzIgMHgwMDAwMDdmZjAwMDAwMDAwCisjZGVmaW5lIEJNXzMyXzQyIEJNXzQyXzMyCisjZGVmaW5lIEJNXzQzXzMyIDB4MDAwMDBmZmYwMDAwMDAwMAorI2RlZmluZSBCTV8zMl80MyBCTV80M18zMgorI2RlZmluZSBCTV80NF8zMiAweDAwMDAxZmZmMDAwMDAwMDAKKyNkZWZpbmUgQk1fMzJfNDQgQk1fNDRfMzIKKyNkZWZpbmUgQk1fNDVfMzIgMHgwMDAwM2ZmZjAwMDAwMDAwCisjZGVmaW5lIEJNXzMyXzQ1IEJNXzQ1XzMyCisjZGVmaW5lIEJNXzQ2XzMyIDB4MDAwMDdmZmYwMDAwMDAwMAorI2RlZmluZSBCTV8zMl80NiBCTV80Nl8zMgorI2RlZmluZSBCTV80N18zMiAweDAwMDBmZmZmMDAwMDAwMDAKKyNkZWZpbmUgQk1fMzJfNDcgQk1fNDdfMzIKKyNkZWZpbmUgQk1fNDhfMzIgMHgwMDAxZmZmZjAwMDAwMDAwCisjZGVmaW5lIEJNXzMyXzQ4IEJNXzQ4XzMyCisjZGVmaW5lIEJNXzQ5XzMyIDB4MDAwM2ZmZmYwMDAwMDAwMAorI2RlZmluZSBCTV8zMl80OSBCTV80OV8zMgorI2RlZmluZSBCTV81MF8zMiAweDAwMDdmZmZmMDAwMDAwMDAKKyNkZWZpbmUgQk1fMzJfNTAgQk1fNTBfMzIKKyNkZWZpbmUgQk1fNTFfMzIgMHgwMDBmZmZmZjAwMDAwMDAwCisjZGVmaW5lIEJNXzMyXzUxIEJNXzUxXzMyCisjZGVmaW5lIEJNXzUyXzMyIDB4MDAxZmZmZmYwMDAwMDAwMAorI2RlZmluZSBCTV8zMl81MiBCTV81Ml8zMgorI2RlZmluZSBCTV81M18zMiAweDAwM2ZmZmZmMDAwMDAwMDAKKyNkZWZpbmUgQk1fMzJfNTMgQk1fNTNfMzIKKyNkZWZpbmUgQk1fNTRfMzIgMHgwMDdmZmZmZjAwMDAwMDAwCisjZGVmaW5lIEJNXzMyXzU0IEJNXzU0XzMyCisjZGVmaW5lIEJNXzU1XzMyIDB4MDBmZmZmZmYwMDAwMDAwMAorI2RlZmluZSBCTV8zMl81NSBCTV81NV8zMgorI2RlZmluZSBCTV81Nl8zMiAweDAxZmZmZmZmMDAwMDAwMDAKKyNkZWZpbmUgQk1fMzJfNTYgQk1fNTZfMzIKKyNkZWZpbmUgQk1fNTdfMzIgMHgwM2ZmZmZmZjAwMDAwMDAwCisjZGVmaW5lIEJNXzMyXzU3IEJNXzU3XzMyCisjZGVmaW5lIEJNXzU4XzMyIDB4MDdmZmZmZmYwMDAwMDAwMAorI2RlZmluZSBCTV8zMl81OCBCTV81OF8zMgorI2RlZmluZSBCTV81OV8zMiAweDBmZmZmZmZmMDAwMDAwMDAKKyNkZWZpbmUgQk1fMzJfNTkgQk1fNTlfMzIKKyNkZWZpbmUgQk1fNjBfMzIgMHgxZmZmZmZmZjAwMDAwMDAwCisjZGVmaW5lIEJNXzMyXzYwIEJNXzYwXzMyCisjZGVmaW5lIEJNXzYxXzMyIDB4M2ZmZmZmZmYwMDAwMDAwMAorI2RlZmluZSBCTV8zMl82MSBCTV82MV8zMgorI2RlZmluZSBCTV82Ml8zMiAweDdmZmZmZmZmMDAwMDAwMDAKKyNkZWZpbmUgQk1fMzJfNjIgQk1fNjJfMzIKKyNkZWZpbmUgQk1fNjNfMzIgMHhmZmZmZmZmZjAwMDAwMDAwCisjZGVmaW5lIEJNXzMyXzYzIEJNXzYzXzMyCisjZGVmaW5lIEJNXzMzXzMzIDB4MDAwMDAwMDIwMDAwMDAwMAorI2RlZmluZSBCTV8zNF8zMyAweDAwMDAwMDA2MDAwMDAwMDAKKyNkZWZpbmUgQk1fMzNfMzQgQk1fMzRfMzMKKyNkZWZpbmUgQk1fMzVfMzMgMHgwMDAwMDAwZTAwMDAwMDAwCisjZGVmaW5lIEJNXzMzXzM1IEJNXzM1XzMzCisjZGVmaW5lIEJNXzM2XzMzIDB4MDAwMDAwMWUwMDAwMDAwMAorI2RlZmluZSBCTV8zM18zNiBCTV8zNl8zMworI2RlZmluZSBCTV8zN18zMyAweDAwMDAwMDNlMDAwMDAwMDAKKyNkZWZpbmUgQk1fMzNfMzcgQk1fMzdfMzMKKyNkZWZpbmUgQk1fMzhfMzMgMHgwMDAwMDA3ZTAwMDAwMDAwCisjZGVmaW5lIEJNXzMzXzM4IEJNXzM4XzMzCisjZGVmaW5lIEJNXzM5XzMzIDB4MDAwMDAwZmUwMDAwMDAwMAorI2RlZmluZSBCTV8zM18zOSBCTV8zOV8zMworI2RlZmluZSBCTV80MF8zMyAweDAwMDAwMWZlMDAwMDAwMDAKKyNkZWZpbmUgQk1fMzNfNDAgQk1fNDBfMzMKKyNkZWZpbmUgQk1fNDFfMzMgMHgwMDAwMDNmZTAwMDAwMDAwCisjZGVmaW5lIEJNXzMzXzQxIEJNXzQxXzMzCisjZGVmaW5lIEJNXzQyXzMzIDB4MDAwMDA3ZmUwMDAwMDAwMAorI2RlZmluZSBCTV8zM180MiBCTV80Ml8zMworI2RlZmluZSBCTV80M18zMyAweDAwMDAwZmZlMDAwMDAwMDAKKyNkZWZpbmUgQk1fMzNfNDMgQk1fNDNfMzMKKyNkZWZpbmUgQk1fNDRfMzMgMHgwMDAwMWZmZTAwMDAwMDAwCisjZGVmaW5lIEJNXzMzXzQ0IEJNXzQ0XzMzCisjZGVmaW5lIEJNXzQ1XzMzIDB4MDAwMDNmZmUwMDAwMDAwMAorI2RlZmluZSBCTV8zM180NSBCTV80NV8zMworI2RlZmluZSBCTV80Nl8zMyAweDAwMDA3ZmZlMDAwMDAwMDAKKyNkZWZpbmUgQk1fMzNfNDYgQk1fNDZfMzMKKyNkZWZpbmUgQk1fNDdfMzMgMHgwMDAwZmZmZTAwMDAwMDAwCisjZGVmaW5lIEJNXzMzXzQ3IEJNXzQ3XzMzCisjZGVmaW5lIEJNXzQ4XzMzIDB4MDAwMWZmZmUwMDAwMDAwMAorI2RlZmluZSBCTV8zM180OCBCTV80OF8zMworI2RlZmluZSBCTV80OV8zMyAweDAwMDNmZmZlMDAwMDAwMDAKKyNkZWZpbmUgQk1fMzNfNDkgQk1fNDlfMzMKKyNkZWZpbmUgQk1fNTBfMzMgMHgwMDA3ZmZmZTAwMDAwMDAwCisjZGVmaW5lIEJNXzMzXzUwIEJNXzUwXzMzCisjZGVmaW5lIEJNXzUxXzMzIDB4MDAwZmZmZmUwMDAwMDAwMAorI2RlZmluZSBCTV8zM181MSBCTV81MV8zMworI2RlZmluZSBCTV81Ml8zMyAweDAwMWZmZmZlMDAwMDAwMDAKKyNkZWZpbmUgQk1fMzNfNTIgQk1fNTJfMzMKKyNkZWZpbmUgQk1fNTNfMzMgMHgwMDNmZmZmZTAwMDAwMDAwCisjZGVmaW5lIEJNXzMzXzUzIEJNXzUzXzMzCisjZGVmaW5lIEJNXzU0XzMzIDB4MDA3ZmZmZmUwMDAwMDAwMAorI2RlZmluZSBCTV8zM181NCBCTV81NF8zMworI2RlZmluZSBCTV81NV8zMyAweDAwZmZmZmZlMDAwMDAwMDAKKyNkZWZpbmUgQk1fMzNfNTUgQk1fNTVfMzMKKyNkZWZpbmUgQk1fNTZfMzMgMHgwMWZmZmZmZTAwMDAwMDAwCisjZGVmaW5lIEJNXzMzXzU2IEJNXzU2XzMzCisjZGVmaW5lIEJNXzU3XzMzIDB4MDNmZmZmZmUwMDAwMDAwMAorI2RlZmluZSBCTV8zM181NyBCTV81N18zMworI2RlZmluZSBCTV81OF8zMyAweDA3ZmZmZmZlMDAwMDAwMDAKKyNkZWZpbmUgQk1fMzNfNTggQk1fNThfMzMKKyNkZWZpbmUgQk1fNTlfMzMgMHgwZmZmZmZmZTAwMDAwMDAwCisjZGVmaW5lIEJNXzMzXzU5IEJNXzU5XzMzCisjZGVmaW5lIEJNXzYwXzMzIDB4MWZmZmZmZmUwMDAwMDAwMAorI2RlZmluZSBCTV8zM182MCBCTV82MF8zMworI2RlZmluZSBCTV82MV8zMyAweDNmZmZmZmZlMDAwMDAwMDAKKyNkZWZpbmUgQk1fMzNfNjEgQk1fNjFfMzMKKyNkZWZpbmUgQk1fNjJfMzMgMHg3ZmZmZmZmZTAwMDAwMDAwCisjZGVmaW5lIEJNXzMzXzYyIEJNXzYyXzMzCisjZGVmaW5lIEJNXzYzXzMzIDB4ZmZmZmZmZmUwMDAwMDAwMAorI2RlZmluZSBCTV8zM182MyBCTV82M18zMworI2RlZmluZSBCTV8zNF8zNCAweDAwMDAwMDA0MDAwMDAwMDAKKyNkZWZpbmUgQk1fMzVfMzQgMHgwMDAwMDAwYzAwMDAwMDAwCisjZGVmaW5lIEJNXzM0XzM1IEJNXzM1XzM0CisjZGVmaW5lIEJNXzM2XzM0IDB4MDAwMDAwMWMwMDAwMDAwMAorI2RlZmluZSBCTV8zNF8zNiBCTV8zNl8zNAorI2RlZmluZSBCTV8zN18zNCAweDAwMDAwMDNjMDAwMDAwMDAKKyNkZWZpbmUgQk1fMzRfMzcgQk1fMzdfMzQKKyNkZWZpbmUgQk1fMzhfMzQgMHgwMDAwMDA3YzAwMDAwMDAwCisjZGVmaW5lIEJNXzM0XzM4IEJNXzM4XzM0CisjZGVmaW5lIEJNXzM5XzM0IDB4MDAwMDAwZmMwMDAwMDAwMAorI2RlZmluZSBCTV8zNF8zOSBCTV8zOV8zNAorI2RlZmluZSBCTV80MF8zNCAweDAwMDAwMWZjMDAwMDAwMDAKKyNkZWZpbmUgQk1fMzRfNDAgQk1fNDBfMzQKKyNkZWZpbmUgQk1fNDFfMzQgMHgwMDAwMDNmYzAwMDAwMDAwCisjZGVmaW5lIEJNXzM0XzQxIEJNXzQxXzM0CisjZGVmaW5lIEJNXzQyXzM0IDB4MDAwMDA3ZmMwMDAwMDAwMAorI2RlZmluZSBCTV8zNF80MiBCTV80Ml8zNAorI2RlZmluZSBCTV80M18zNCAweDAwMDAwZmZjMDAwMDAwMDAKKyNkZWZpbmUgQk1fMzRfNDMgQk1fNDNfMzQKKyNkZWZpbmUgQk1fNDRfMzQgMHgwMDAwMWZmYzAwMDAwMDAwCisjZGVmaW5lIEJNXzM0XzQ0IEJNXzQ0XzM0CisjZGVmaW5lIEJNXzQ1XzM0IDB4MDAwMDNmZmMwMDAwMDAwMAorI2RlZmluZSBCTV8zNF80NSBCTV80NV8zNAorI2RlZmluZSBCTV80Nl8zNCAweDAwMDA3ZmZjMDAwMDAwMDAKKyNkZWZpbmUgQk1fMzRfNDYgQk1fNDZfMzQKKyNkZWZpbmUgQk1fNDdfMzQgMHgwMDAwZmZmYzAwMDAwMDAwCisjZGVmaW5lIEJNXzM0XzQ3IEJNXzQ3XzM0CisjZGVmaW5lIEJNXzQ4XzM0IDB4MDAwMWZmZmMwMDAwMDAwMAorI2RlZmluZSBCTV8zNF80OCBCTV80OF8zNAorI2RlZmluZSBCTV80OV8zNCAweDAwMDNmZmZjMDAwMDAwMDAKKyNkZWZpbmUgQk1fMzRfNDkgQk1fNDlfMzQKKyNkZWZpbmUgQk1fNTBfMzQgMHgwMDA3ZmZmYzAwMDAwMDAwCisjZGVmaW5lIEJNXzM0XzUwIEJNXzUwXzM0CisjZGVmaW5lIEJNXzUxXzM0IDB4MDAwZmZmZmMwMDAwMDAwMAorI2RlZmluZSBCTV8zNF81MSBCTV81MV8zNAorI2RlZmluZSBCTV81Ml8zNCAweDAwMWZmZmZjMDAwMDAwMDAKKyNkZWZpbmUgQk1fMzRfNTIgQk1fNTJfMzQKKyNkZWZpbmUgQk1fNTNfMzQgMHgwMDNmZmZmYzAwMDAwMDAwCisjZGVmaW5lIEJNXzM0XzUzIEJNXzUzXzM0CisjZGVmaW5lIEJNXzU0XzM0IDB4MDA3ZmZmZmMwMDAwMDAwMAorI2RlZmluZSBCTV8zNF81NCBCTV81NF8zNAorI2RlZmluZSBCTV81NV8zNCAweDAwZmZmZmZjMDAwMDAwMDAKKyNkZWZpbmUgQk1fMzRfNTUgQk1fNTVfMzQKKyNkZWZpbmUgQk1fNTZfMzQgMHgwMWZmZmZmYzAwMDAwMDAwCisjZGVmaW5lIEJNXzM0XzU2IEJNXzU2XzM0CisjZGVmaW5lIEJNXzU3XzM0IDB4MDNmZmZmZmMwMDAwMDAwMAorI2RlZmluZSBCTV8zNF81NyBCTV81N18zNAorI2RlZmluZSBCTV81OF8zNCAweDA3ZmZmZmZjMDAwMDAwMDAKKyNkZWZpbmUgQk1fMzRfNTggQk1fNThfMzQKKyNkZWZpbmUgQk1fNTlfMzQgMHgwZmZmZmZmYzAwMDAwMDAwCisjZGVmaW5lIEJNXzM0XzU5IEJNXzU5XzM0CisjZGVmaW5lIEJNXzYwXzM0IDB4MWZmZmZmZmMwMDAwMDAwMAorI2RlZmluZSBCTV8zNF82MCBCTV82MF8zNAorI2RlZmluZSBCTV82MV8zNCAweDNmZmZmZmZjMDAwMDAwMDAKKyNkZWZpbmUgQk1fMzRfNjEgQk1fNjFfMzQKKyNkZWZpbmUgQk1fNjJfMzQgMHg3ZmZmZmZmYzAwMDAwMDAwCisjZGVmaW5lIEJNXzM0XzYyIEJNXzYyXzM0CisjZGVmaW5lIEJNXzYzXzM0IDB4ZmZmZmZmZmMwMDAwMDAwMAorI2RlZmluZSBCTV8zNF82MyBCTV82M18zNAorI2RlZmluZSBCTV8zNV8zNSAweDAwMDAwMDA4MDAwMDAwMDAKKyNkZWZpbmUgQk1fMzZfMzUgMHgwMDAwMDAxODAwMDAwMDAwCisjZGVmaW5lIEJNXzM1XzM2IEJNXzM2XzM1CisjZGVmaW5lIEJNXzM3XzM1IDB4MDAwMDAwMzgwMDAwMDAwMAorI2RlZmluZSBCTV8zNV8zNyBCTV8zN18zNQorI2RlZmluZSBCTV8zOF8zNSAweDAwMDAwMDc4MDAwMDAwMDAKKyNkZWZpbmUgQk1fMzVfMzggQk1fMzhfMzUKKyNkZWZpbmUgQk1fMzlfMzUgMHgwMDAwMDBmODAwMDAwMDAwCisjZGVmaW5lIEJNXzM1XzM5IEJNXzM5XzM1CisjZGVmaW5lIEJNXzQwXzM1IDB4MDAwMDAxZjgwMDAwMDAwMAorI2RlZmluZSBCTV8zNV80MCBCTV80MF8zNQorI2RlZmluZSBCTV80MV8zNSAweDAwMDAwM2Y4MDAwMDAwMDAKKyNkZWZpbmUgQk1fMzVfNDEgQk1fNDFfMzUKKyNkZWZpbmUgQk1fNDJfMzUgMHgwMDAwMDdmODAwMDAwMDAwCisjZGVmaW5lIEJNXzM1XzQyIEJNXzQyXzM1CisjZGVmaW5lIEJNXzQzXzM1IDB4MDAwMDBmZjgwMDAwMDAwMAorI2RlZmluZSBCTV8zNV80MyBCTV80M18zNQorI2RlZmluZSBCTV80NF8zNSAweDAwMDAxZmY4MDAwMDAwMDAKKyNkZWZpbmUgQk1fMzVfNDQgQk1fNDRfMzUKKyNkZWZpbmUgQk1fNDVfMzUgMHgwMDAwM2ZmODAwMDAwMDAwCisjZGVmaW5lIEJNXzM1XzQ1IEJNXzQ1XzM1CisjZGVmaW5lIEJNXzQ2XzM1IDB4MDAwMDdmZjgwMDAwMDAwMAorI2RlZmluZSBCTV8zNV80NiBCTV80Nl8zNQorI2RlZmluZSBCTV80N18zNSAweDAwMDBmZmY4MDAwMDAwMDAKKyNkZWZpbmUgQk1fMzVfNDcgQk1fNDdfMzUKKyNkZWZpbmUgQk1fNDhfMzUgMHgwMDAxZmZmODAwMDAwMDAwCisjZGVmaW5lIEJNXzM1XzQ4IEJNXzQ4XzM1CisjZGVmaW5lIEJNXzQ5XzM1IDB4MDAwM2ZmZjgwMDAwMDAwMAorI2RlZmluZSBCTV8zNV80OSBCTV80OV8zNQorI2RlZmluZSBCTV81MF8zNSAweDAwMDdmZmY4MDAwMDAwMDAKKyNkZWZpbmUgQk1fMzVfNTAgQk1fNTBfMzUKKyNkZWZpbmUgQk1fNTFfMzUgMHgwMDBmZmZmODAwMDAwMDAwCisjZGVmaW5lIEJNXzM1XzUxIEJNXzUxXzM1CisjZGVmaW5lIEJNXzUyXzM1IDB4MDAxZmZmZjgwMDAwMDAwMAorI2RlZmluZSBCTV8zNV81MiBCTV81Ml8zNQorI2RlZmluZSBCTV81M18zNSAweDAwM2ZmZmY4MDAwMDAwMDAKKyNkZWZpbmUgQk1fMzVfNTMgQk1fNTNfMzUKKyNkZWZpbmUgQk1fNTRfMzUgMHgwMDdmZmZmODAwMDAwMDAwCisjZGVmaW5lIEJNXzM1XzU0IEJNXzU0XzM1CisjZGVmaW5lIEJNXzU1XzM1IDB4MDBmZmZmZjgwMDAwMDAwMAorI2RlZmluZSBCTV8zNV81NSBCTV81NV8zNQorI2RlZmluZSBCTV81Nl8zNSAweDAxZmZmZmY4MDAwMDAwMDAKKyNkZWZpbmUgQk1fMzVfNTYgQk1fNTZfMzUKKyNkZWZpbmUgQk1fNTdfMzUgMHgwM2ZmZmZmODAwMDAwMDAwCisjZGVmaW5lIEJNXzM1XzU3IEJNXzU3XzM1CisjZGVmaW5lIEJNXzU4XzM1IDB4MDdmZmZmZjgwMDAwMDAwMAorI2RlZmluZSBCTV8zNV81OCBCTV81OF8zNQorI2RlZmluZSBCTV81OV8zNSAweDBmZmZmZmY4MDAwMDAwMDAKKyNkZWZpbmUgQk1fMzVfNTkgQk1fNTlfMzUKKyNkZWZpbmUgQk1fNjBfMzUgMHgxZmZmZmZmODAwMDAwMDAwCisjZGVmaW5lIEJNXzM1XzYwIEJNXzYwXzM1CisjZGVmaW5lIEJNXzYxXzM1IDB4M2ZmZmZmZjgwMDAwMDAwMAorI2RlZmluZSBCTV8zNV82MSBCTV82MV8zNQorI2RlZmluZSBCTV82Ml8zNSAweDdmZmZmZmY4MDAwMDAwMDAKKyNkZWZpbmUgQk1fMzVfNjIgQk1fNjJfMzUKKyNkZWZpbmUgQk1fNjNfMzUgMHhmZmZmZmZmODAwMDAwMDAwCisjZGVmaW5lIEJNXzM1XzYzIEJNXzYzXzM1CisjZGVmaW5lIEJNXzM2XzM2IDB4MDAwMDAwMTAwMDAwMDAwMAorI2RlZmluZSBCTV8zN18zNiAweDAwMDAwMDMwMDAwMDAwMDAKKyNkZWZpbmUgQk1fMzZfMzcgQk1fMzdfMzYKKyNkZWZpbmUgQk1fMzhfMzYgMHgwMDAwMDA3MDAwMDAwMDAwCisjZGVmaW5lIEJNXzM2XzM4IEJNXzM4XzM2CisjZGVmaW5lIEJNXzM5XzM2IDB4MDAwMDAwZjAwMDAwMDAwMAorI2RlZmluZSBCTV8zNl8zOSBCTV8zOV8zNgorI2RlZmluZSBCTV80MF8zNiAweDAwMDAwMWYwMDAwMDAwMDAKKyNkZWZpbmUgQk1fMzZfNDAgQk1fNDBfMzYKKyNkZWZpbmUgQk1fNDFfMzYgMHgwMDAwMDNmMDAwMDAwMDAwCisjZGVmaW5lIEJNXzM2XzQxIEJNXzQxXzM2CisjZGVmaW5lIEJNXzQyXzM2IDB4MDAwMDA3ZjAwMDAwMDAwMAorI2RlZmluZSBCTV8zNl80MiBCTV80Ml8zNgorI2RlZmluZSBCTV80M18zNiAweDAwMDAwZmYwMDAwMDAwMDAKKyNkZWZpbmUgQk1fMzZfNDMgQk1fNDNfMzYKKyNkZWZpbmUgQk1fNDRfMzYgMHgwMDAwMWZmMDAwMDAwMDAwCisjZGVmaW5lIEJNXzM2XzQ0IEJNXzQ0XzM2CisjZGVmaW5lIEJNXzQ1XzM2IDB4MDAwMDNmZjAwMDAwMDAwMAorI2RlZmluZSBCTV8zNl80NSBCTV80NV8zNgorI2RlZmluZSBCTV80Nl8zNiAweDAwMDA3ZmYwMDAwMDAwMDAKKyNkZWZpbmUgQk1fMzZfNDYgQk1fNDZfMzYKKyNkZWZpbmUgQk1fNDdfMzYgMHgwMDAwZmZmMDAwMDAwMDAwCisjZGVmaW5lIEJNXzM2XzQ3IEJNXzQ3XzM2CisjZGVmaW5lIEJNXzQ4XzM2IDB4MDAwMWZmZjAwMDAwMDAwMAorI2RlZmluZSBCTV8zNl80OCBCTV80OF8zNgorI2RlZmluZSBCTV80OV8zNiAweDAwMDNmZmYwMDAwMDAwMDAKKyNkZWZpbmUgQk1fMzZfNDkgQk1fNDlfMzYKKyNkZWZpbmUgQk1fNTBfMzYgMHgwMDA3ZmZmMDAwMDAwMDAwCisjZGVmaW5lIEJNXzM2XzUwIEJNXzUwXzM2CisjZGVmaW5lIEJNXzUxXzM2IDB4MDAwZmZmZjAwMDAwMDAwMAorI2RlZmluZSBCTV8zNl81MSBCTV81MV8zNgorI2RlZmluZSBCTV81Ml8zNiAweDAwMWZmZmYwMDAwMDAwMDAKKyNkZWZpbmUgQk1fMzZfNTIgQk1fNTJfMzYKKyNkZWZpbmUgQk1fNTNfMzYgMHgwMDNmZmZmMDAwMDAwMDAwCisjZGVmaW5lIEJNXzM2XzUzIEJNXzUzXzM2CisjZGVmaW5lIEJNXzU0XzM2IDB4MDA3ZmZmZjAwMDAwMDAwMAorI2RlZmluZSBCTV8zNl81NCBCTV81NF8zNgorI2RlZmluZSBCTV81NV8zNiAweDAwZmZmZmYwMDAwMDAwMDAKKyNkZWZpbmUgQk1fMzZfNTUgQk1fNTVfMzYKKyNkZWZpbmUgQk1fNTZfMzYgMHgwMWZmZmZmMDAwMDAwMDAwCisjZGVmaW5lIEJNXzM2XzU2IEJNXzU2XzM2CisjZGVmaW5lIEJNXzU3XzM2IDB4MDNmZmZmZjAwMDAwMDAwMAorI2RlZmluZSBCTV8zNl81NyBCTV81N18zNgorI2RlZmluZSBCTV81OF8zNiAweDA3ZmZmZmYwMDAwMDAwMDAKKyNkZWZpbmUgQk1fMzZfNTggQk1fNThfMzYKKyNkZWZpbmUgQk1fNTlfMzYgMHgwZmZmZmZmMDAwMDAwMDAwCisjZGVmaW5lIEJNXzM2XzU5IEJNXzU5XzM2CisjZGVmaW5lIEJNXzYwXzM2IDB4MWZmZmZmZjAwMDAwMDAwMAorI2RlZmluZSBCTV8zNl82MCBCTV82MF8zNgorI2RlZmluZSBCTV82MV8zNiAweDNmZmZmZmYwMDAwMDAwMDAKKyNkZWZpbmUgQk1fMzZfNjEgQk1fNjFfMzYKKyNkZWZpbmUgQk1fNjJfMzYgMHg3ZmZmZmZmMDAwMDAwMDAwCisjZGVmaW5lIEJNXzM2XzYyIEJNXzYyXzM2CisjZGVmaW5lIEJNXzYzXzM2IDB4ZmZmZmZmZjAwMDAwMDAwMAorI2RlZmluZSBCTV8zNl82MyBCTV82M18zNgorI2RlZmluZSBCTV8zN18zNyAweDAwMDAwMDIwMDAwMDAwMDAKKyNkZWZpbmUgQk1fMzhfMzcgMHgwMDAwMDA2MDAwMDAwMDAwCisjZGVmaW5lIEJNXzM3XzM4IEJNXzM4XzM3CisjZGVmaW5lIEJNXzM5XzM3IDB4MDAwMDAwZTAwMDAwMDAwMAorI2RlZmluZSBCTV8zN18zOSBCTV8zOV8zNworI2RlZmluZSBCTV80MF8zNyAweDAwMDAwMWUwMDAwMDAwMDAKKyNkZWZpbmUgQk1fMzdfNDAgQk1fNDBfMzcKKyNkZWZpbmUgQk1fNDFfMzcgMHgwMDAwMDNlMDAwMDAwMDAwCisjZGVmaW5lIEJNXzM3XzQxIEJNXzQxXzM3CisjZGVmaW5lIEJNXzQyXzM3IDB4MDAwMDA3ZTAwMDAwMDAwMAorI2RlZmluZSBCTV8zN180MiBCTV80Ml8zNworI2RlZmluZSBCTV80M18zNyAweDAwMDAwZmUwMDAwMDAwMDAKKyNkZWZpbmUgQk1fMzdfNDMgQk1fNDNfMzcKKyNkZWZpbmUgQk1fNDRfMzcgMHgwMDAwMWZlMDAwMDAwMDAwCisjZGVmaW5lIEJNXzM3XzQ0IEJNXzQ0XzM3CisjZGVmaW5lIEJNXzQ1XzM3IDB4MDAwMDNmZTAwMDAwMDAwMAorI2RlZmluZSBCTV8zN180NSBCTV80NV8zNworI2RlZmluZSBCTV80Nl8zNyAweDAwMDA3ZmUwMDAwMDAwMDAKKyNkZWZpbmUgQk1fMzdfNDYgQk1fNDZfMzcKKyNkZWZpbmUgQk1fNDdfMzcgMHgwMDAwZmZlMDAwMDAwMDAwCisjZGVmaW5lIEJNXzM3XzQ3IEJNXzQ3XzM3CisjZGVmaW5lIEJNXzQ4XzM3IDB4MDAwMWZmZTAwMDAwMDAwMAorI2RlZmluZSBCTV8zN180OCBCTV80OF8zNworI2RlZmluZSBCTV80OV8zNyAweDAwMDNmZmUwMDAwMDAwMDAKKyNkZWZpbmUgQk1fMzdfNDkgQk1fNDlfMzcKKyNkZWZpbmUgQk1fNTBfMzcgMHgwMDA3ZmZlMDAwMDAwMDAwCisjZGVmaW5lIEJNXzM3XzUwIEJNXzUwXzM3CisjZGVmaW5lIEJNXzUxXzM3IDB4MDAwZmZmZTAwMDAwMDAwMAorI2RlZmluZSBCTV8zN181MSBCTV81MV8zNworI2RlZmluZSBCTV81Ml8zNyAweDAwMWZmZmUwMDAwMDAwMDAKKyNkZWZpbmUgQk1fMzdfNTIgQk1fNTJfMzcKKyNkZWZpbmUgQk1fNTNfMzcgMHgwMDNmZmZlMDAwMDAwMDAwCisjZGVmaW5lIEJNXzM3XzUzIEJNXzUzXzM3CisjZGVmaW5lIEJNXzU0XzM3IDB4MDA3ZmZmZTAwMDAwMDAwMAorI2RlZmluZSBCTV8zN181NCBCTV81NF8zNworI2RlZmluZSBCTV81NV8zNyAweDAwZmZmZmUwMDAwMDAwMDAKKyNkZWZpbmUgQk1fMzdfNTUgQk1fNTVfMzcKKyNkZWZpbmUgQk1fNTZfMzcgMHgwMWZmZmZlMDAwMDAwMDAwCisjZGVmaW5lIEJNXzM3XzU2IEJNXzU2XzM3CisjZGVmaW5lIEJNXzU3XzM3IDB4MDNmZmZmZTAwMDAwMDAwMAorI2RlZmluZSBCTV8zN181NyBCTV81N18zNworI2RlZmluZSBCTV81OF8zNyAweDA3ZmZmZmUwMDAwMDAwMDAKKyNkZWZpbmUgQk1fMzdfNTggQk1fNThfMzcKKyNkZWZpbmUgQk1fNTlfMzcgMHgwZmZmZmZlMDAwMDAwMDAwCisjZGVmaW5lIEJNXzM3XzU5IEJNXzU5XzM3CisjZGVmaW5lIEJNXzYwXzM3IDB4MWZmZmZmZTAwMDAwMDAwMAorI2RlZmluZSBCTV8zN182MCBCTV82MF8zNworI2RlZmluZSBCTV82MV8zNyAweDNmZmZmZmUwMDAwMDAwMDAKKyNkZWZpbmUgQk1fMzdfNjEgQk1fNjFfMzcKKyNkZWZpbmUgQk1fNjJfMzcgMHg3ZmZmZmZlMDAwMDAwMDAwCisjZGVmaW5lIEJNXzM3XzYyIEJNXzYyXzM3CisjZGVmaW5lIEJNXzYzXzM3IDB4ZmZmZmZmZTAwMDAwMDAwMAorI2RlZmluZSBCTV8zN182MyBCTV82M18zNworI2RlZmluZSBCTV8zOF8zOCAweDAwMDAwMDQwMDAwMDAwMDAKKyNkZWZpbmUgQk1fMzlfMzggMHgwMDAwMDBjMDAwMDAwMDAwCisjZGVmaW5lIEJNXzM4XzM5IEJNXzM5XzM4CisjZGVmaW5lIEJNXzQwXzM4IDB4MDAwMDAxYzAwMDAwMDAwMAorI2RlZmluZSBCTV8zOF80MCBCTV80MF8zOAorI2RlZmluZSBCTV80MV8zOCAweDAwMDAwM2MwMDAwMDAwMDAKKyNkZWZpbmUgQk1fMzhfNDEgQk1fNDFfMzgKKyNkZWZpbmUgQk1fNDJfMzggMHgwMDAwMDdjMDAwMDAwMDAwCisjZGVmaW5lIEJNXzM4XzQyIEJNXzQyXzM4CisjZGVmaW5lIEJNXzQzXzM4IDB4MDAwMDBmYzAwMDAwMDAwMAorI2RlZmluZSBCTV8zOF80MyBCTV80M18zOAorI2RlZmluZSBCTV80NF8zOCAweDAwMDAxZmMwMDAwMDAwMDAKKyNkZWZpbmUgQk1fMzhfNDQgQk1fNDRfMzgKKyNkZWZpbmUgQk1fNDVfMzggMHgwMDAwM2ZjMDAwMDAwMDAwCisjZGVmaW5lIEJNXzM4XzQ1IEJNXzQ1XzM4CisjZGVmaW5lIEJNXzQ2XzM4IDB4MDAwMDdmYzAwMDAwMDAwMAorI2RlZmluZSBCTV8zOF80NiBCTV80Nl8zOAorI2RlZmluZSBCTV80N18zOCAweDAwMDBmZmMwMDAwMDAwMDAKKyNkZWZpbmUgQk1fMzhfNDcgQk1fNDdfMzgKKyNkZWZpbmUgQk1fNDhfMzggMHgwMDAxZmZjMDAwMDAwMDAwCisjZGVmaW5lIEJNXzM4XzQ4IEJNXzQ4XzM4CisjZGVmaW5lIEJNXzQ5XzM4IDB4MDAwM2ZmYzAwMDAwMDAwMAorI2RlZmluZSBCTV8zOF80OSBCTV80OV8zOAorI2RlZmluZSBCTV81MF8zOCAweDAwMDdmZmMwMDAwMDAwMDAKKyNkZWZpbmUgQk1fMzhfNTAgQk1fNTBfMzgKKyNkZWZpbmUgQk1fNTFfMzggMHgwMDBmZmZjMDAwMDAwMDAwCisjZGVmaW5lIEJNXzM4XzUxIEJNXzUxXzM4CisjZGVmaW5lIEJNXzUyXzM4IDB4MDAxZmZmYzAwMDAwMDAwMAorI2RlZmluZSBCTV8zOF81MiBCTV81Ml8zOAorI2RlZmluZSBCTV81M18zOCAweDAwM2ZmZmMwMDAwMDAwMDAKKyNkZWZpbmUgQk1fMzhfNTMgQk1fNTNfMzgKKyNkZWZpbmUgQk1fNTRfMzggMHgwMDdmZmZjMDAwMDAwMDAwCisjZGVmaW5lIEJNXzM4XzU0IEJNXzU0XzM4CisjZGVmaW5lIEJNXzU1XzM4IDB4MDBmZmZmYzAwMDAwMDAwMAorI2RlZmluZSBCTV8zOF81NSBCTV81NV8zOAorI2RlZmluZSBCTV81Nl8zOCAweDAxZmZmZmMwMDAwMDAwMDAKKyNkZWZpbmUgQk1fMzhfNTYgQk1fNTZfMzgKKyNkZWZpbmUgQk1fNTdfMzggMHgwM2ZmZmZjMDAwMDAwMDAwCisjZGVmaW5lIEJNXzM4XzU3IEJNXzU3XzM4CisjZGVmaW5lIEJNXzU4XzM4IDB4MDdmZmZmYzAwMDAwMDAwMAorI2RlZmluZSBCTV8zOF81OCBCTV81OF8zOAorI2RlZmluZSBCTV81OV8zOCAweDBmZmZmZmMwMDAwMDAwMDAKKyNkZWZpbmUgQk1fMzhfNTkgQk1fNTlfMzgKKyNkZWZpbmUgQk1fNjBfMzggMHgxZmZmZmZjMDAwMDAwMDAwCisjZGVmaW5lIEJNXzM4XzYwIEJNXzYwXzM4CisjZGVmaW5lIEJNXzYxXzM4IDB4M2ZmZmZmYzAwMDAwMDAwMAorI2RlZmluZSBCTV8zOF82MSBCTV82MV8zOAorI2RlZmluZSBCTV82Ml8zOCAweDdmZmZmZmMwMDAwMDAwMDAKKyNkZWZpbmUgQk1fMzhfNjIgQk1fNjJfMzgKKyNkZWZpbmUgQk1fNjNfMzggMHhmZmZmZmZjMDAwMDAwMDAwCisjZGVmaW5lIEJNXzM4XzYzIEJNXzYzXzM4CisjZGVmaW5lIEJNXzM5XzM5IDB4MDAwMDAwODAwMDAwMDAwMAorI2RlZmluZSBCTV80MF8zOSAweDAwMDAwMTgwMDAwMDAwMDAKKyNkZWZpbmUgQk1fMzlfNDAgQk1fNDBfMzkKKyNkZWZpbmUgQk1fNDFfMzkgMHgwMDAwMDM4MDAwMDAwMDAwCisjZGVmaW5lIEJNXzM5XzQxIEJNXzQxXzM5CisjZGVmaW5lIEJNXzQyXzM5IDB4MDAwMDA3ODAwMDAwMDAwMAorI2RlZmluZSBCTV8zOV80MiBCTV80Ml8zOQorI2RlZmluZSBCTV80M18zOSAweDAwMDAwZjgwMDAwMDAwMDAKKyNkZWZpbmUgQk1fMzlfNDMgQk1fNDNfMzkKKyNkZWZpbmUgQk1fNDRfMzkgMHgwMDAwMWY4MDAwMDAwMDAwCisjZGVmaW5lIEJNXzM5XzQ0IEJNXzQ0XzM5CisjZGVmaW5lIEJNXzQ1XzM5IDB4MDAwMDNmODAwMDAwMDAwMAorI2RlZmluZSBCTV8zOV80NSBCTV80NV8zOQorI2RlZmluZSBCTV80Nl8zOSAweDAwMDA3ZjgwMDAwMDAwMDAKKyNkZWZpbmUgQk1fMzlfNDYgQk1fNDZfMzkKKyNkZWZpbmUgQk1fNDdfMzkgMHgwMDAwZmY4MDAwMDAwMDAwCisjZGVmaW5lIEJNXzM5XzQ3IEJNXzQ3XzM5CisjZGVmaW5lIEJNXzQ4XzM5IDB4MDAwMWZmODAwMDAwMDAwMAorI2RlZmluZSBCTV8zOV80OCBCTV80OF8zOQorI2RlZmluZSBCTV80OV8zOSAweDAwMDNmZjgwMDAwMDAwMDAKKyNkZWZpbmUgQk1fMzlfNDkgQk1fNDlfMzkKKyNkZWZpbmUgQk1fNTBfMzkgMHgwMDA3ZmY4MDAwMDAwMDAwCisjZGVmaW5lIEJNXzM5XzUwIEJNXzUwXzM5CisjZGVmaW5lIEJNXzUxXzM5IDB4MDAwZmZmODAwMDAwMDAwMAorI2RlZmluZSBCTV8zOV81MSBCTV81MV8zOQorI2RlZmluZSBCTV81Ml8zOSAweDAwMWZmZjgwMDAwMDAwMDAKKyNkZWZpbmUgQk1fMzlfNTIgQk1fNTJfMzkKKyNkZWZpbmUgQk1fNTNfMzkgMHgwMDNmZmY4MDAwMDAwMDAwCisjZGVmaW5lIEJNXzM5XzUzIEJNXzUzXzM5CisjZGVmaW5lIEJNXzU0XzM5IDB4MDA3ZmZmODAwMDAwMDAwMAorI2RlZmluZSBCTV8zOV81NCBCTV81NF8zOQorI2RlZmluZSBCTV81NV8zOSAweDAwZmZmZjgwMDAwMDAwMDAKKyNkZWZpbmUgQk1fMzlfNTUgQk1fNTVfMzkKKyNkZWZpbmUgQk1fNTZfMzkgMHgwMWZmZmY4MDAwMDAwMDAwCisjZGVmaW5lIEJNXzM5XzU2IEJNXzU2XzM5CisjZGVmaW5lIEJNXzU3XzM5IDB4MDNmZmZmODAwMDAwMDAwMAorI2RlZmluZSBCTV8zOV81NyBCTV81N18zOQorI2RlZmluZSBCTV81OF8zOSAweDA3ZmZmZjgwMDAwMDAwMDAKKyNkZWZpbmUgQk1fMzlfNTggQk1fNThfMzkKKyNkZWZpbmUgQk1fNTlfMzkgMHgwZmZmZmY4MDAwMDAwMDAwCisjZGVmaW5lIEJNXzM5XzU5IEJNXzU5XzM5CisjZGVmaW5lIEJNXzYwXzM5IDB4MWZmZmZmODAwMDAwMDAwMAorI2RlZmluZSBCTV8zOV82MCBCTV82MF8zOQorI2RlZmluZSBCTV82MV8zOSAweDNmZmZmZjgwMDAwMDAwMDAKKyNkZWZpbmUgQk1fMzlfNjEgQk1fNjFfMzkKKyNkZWZpbmUgQk1fNjJfMzkgMHg3ZmZmZmY4MDAwMDAwMDAwCisjZGVmaW5lIEJNXzM5XzYyIEJNXzYyXzM5CisjZGVmaW5lIEJNXzYzXzM5IDB4ZmZmZmZmODAwMDAwMDAwMAorI2RlZmluZSBCTV8zOV82MyBCTV82M18zOQorI2RlZmluZSBCTV80MF80MCAweDAwMDAwMTAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNDFfNDAgMHgwMDAwMDMwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzQwXzQxIEJNXzQxXzQwCisjZGVmaW5lIEJNXzQyXzQwIDB4MDAwMDA3MDAwMDAwMDAwMAorI2RlZmluZSBCTV80MF80MiBCTV80Ml80MAorI2RlZmluZSBCTV80M180MCAweDAwMDAwZjAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNDBfNDMgQk1fNDNfNDAKKyNkZWZpbmUgQk1fNDRfNDAgMHgwMDAwMWYwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzQwXzQ0IEJNXzQ0XzQwCisjZGVmaW5lIEJNXzQ1XzQwIDB4MDAwMDNmMDAwMDAwMDAwMAorI2RlZmluZSBCTV80MF80NSBCTV80NV80MAorI2RlZmluZSBCTV80Nl80MCAweDAwMDA3ZjAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNDBfNDYgQk1fNDZfNDAKKyNkZWZpbmUgQk1fNDdfNDAgMHgwMDAwZmYwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzQwXzQ3IEJNXzQ3XzQwCisjZGVmaW5lIEJNXzQ4XzQwIDB4MDAwMWZmMDAwMDAwMDAwMAorI2RlZmluZSBCTV80MF80OCBCTV80OF80MAorI2RlZmluZSBCTV80OV80MCAweDAwMDNmZjAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNDBfNDkgQk1fNDlfNDAKKyNkZWZpbmUgQk1fNTBfNDAgMHgwMDA3ZmYwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzQwXzUwIEJNXzUwXzQwCisjZGVmaW5lIEJNXzUxXzQwIDB4MDAwZmZmMDAwMDAwMDAwMAorI2RlZmluZSBCTV80MF81MSBCTV81MV80MAorI2RlZmluZSBCTV81Ml80MCAweDAwMWZmZjAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNDBfNTIgQk1fNTJfNDAKKyNkZWZpbmUgQk1fNTNfNDAgMHgwMDNmZmYwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzQwXzUzIEJNXzUzXzQwCisjZGVmaW5lIEJNXzU0XzQwIDB4MDA3ZmZmMDAwMDAwMDAwMAorI2RlZmluZSBCTV80MF81NCBCTV81NF80MAorI2RlZmluZSBCTV81NV80MCAweDAwZmZmZjAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNDBfNTUgQk1fNTVfNDAKKyNkZWZpbmUgQk1fNTZfNDAgMHgwMWZmZmYwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzQwXzU2IEJNXzU2XzQwCisjZGVmaW5lIEJNXzU3XzQwIDB4MDNmZmZmMDAwMDAwMDAwMAorI2RlZmluZSBCTV80MF81NyBCTV81N180MAorI2RlZmluZSBCTV81OF80MCAweDA3ZmZmZjAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNDBfNTggQk1fNThfNDAKKyNkZWZpbmUgQk1fNTlfNDAgMHgwZmZmZmYwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzQwXzU5IEJNXzU5XzQwCisjZGVmaW5lIEJNXzYwXzQwIDB4MWZmZmZmMDAwMDAwMDAwMAorI2RlZmluZSBCTV80MF82MCBCTV82MF80MAorI2RlZmluZSBCTV82MV80MCAweDNmZmZmZjAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNDBfNjEgQk1fNjFfNDAKKyNkZWZpbmUgQk1fNjJfNDAgMHg3ZmZmZmYwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzQwXzYyIEJNXzYyXzQwCisjZGVmaW5lIEJNXzYzXzQwIDB4ZmZmZmZmMDAwMDAwMDAwMAorI2RlZmluZSBCTV80MF82MyBCTV82M180MAorI2RlZmluZSBCTV80MV80MSAweDAwMDAwMjAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNDJfNDEgMHgwMDAwMDYwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzQxXzQyIEJNXzQyXzQxCisjZGVmaW5lIEJNXzQzXzQxIDB4MDAwMDBlMDAwMDAwMDAwMAorI2RlZmluZSBCTV80MV80MyBCTV80M180MQorI2RlZmluZSBCTV80NF80MSAweDAwMDAxZTAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNDFfNDQgQk1fNDRfNDEKKyNkZWZpbmUgQk1fNDVfNDEgMHgwMDAwM2UwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzQxXzQ1IEJNXzQ1XzQxCisjZGVmaW5lIEJNXzQ2XzQxIDB4MDAwMDdlMDAwMDAwMDAwMAorI2RlZmluZSBCTV80MV80NiBCTV80Nl80MQorI2RlZmluZSBCTV80N180MSAweDAwMDBmZTAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNDFfNDcgQk1fNDdfNDEKKyNkZWZpbmUgQk1fNDhfNDEgMHgwMDAxZmUwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzQxXzQ4IEJNXzQ4XzQxCisjZGVmaW5lIEJNXzQ5XzQxIDB4MDAwM2ZlMDAwMDAwMDAwMAorI2RlZmluZSBCTV80MV80OSBCTV80OV80MQorI2RlZmluZSBCTV81MF80MSAweDAwMDdmZTAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNDFfNTAgQk1fNTBfNDEKKyNkZWZpbmUgQk1fNTFfNDEgMHgwMDBmZmUwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzQxXzUxIEJNXzUxXzQxCisjZGVmaW5lIEJNXzUyXzQxIDB4MDAxZmZlMDAwMDAwMDAwMAorI2RlZmluZSBCTV80MV81MiBCTV81Ml80MQorI2RlZmluZSBCTV81M180MSAweDAwM2ZmZTAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNDFfNTMgQk1fNTNfNDEKKyNkZWZpbmUgQk1fNTRfNDEgMHgwMDdmZmUwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzQxXzU0IEJNXzU0XzQxCisjZGVmaW5lIEJNXzU1XzQxIDB4MDBmZmZlMDAwMDAwMDAwMAorI2RlZmluZSBCTV80MV81NSBCTV81NV80MQorI2RlZmluZSBCTV81Nl80MSAweDAxZmZmZTAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNDFfNTYgQk1fNTZfNDEKKyNkZWZpbmUgQk1fNTdfNDEgMHgwM2ZmZmUwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzQxXzU3IEJNXzU3XzQxCisjZGVmaW5lIEJNXzU4XzQxIDB4MDdmZmZlMDAwMDAwMDAwMAorI2RlZmluZSBCTV80MV81OCBCTV81OF80MQorI2RlZmluZSBCTV81OV80MSAweDBmZmZmZTAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNDFfNTkgQk1fNTlfNDEKKyNkZWZpbmUgQk1fNjBfNDEgMHgxZmZmZmUwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzQxXzYwIEJNXzYwXzQxCisjZGVmaW5lIEJNXzYxXzQxIDB4M2ZmZmZlMDAwMDAwMDAwMAorI2RlZmluZSBCTV80MV82MSBCTV82MV80MQorI2RlZmluZSBCTV82Ml80MSAweDdmZmZmZTAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNDFfNjIgQk1fNjJfNDEKKyNkZWZpbmUgQk1fNjNfNDEgMHhmZmZmZmUwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzQxXzYzIEJNXzYzXzQxCisjZGVmaW5lIEJNXzQyXzQyIDB4MDAwMDA0MDAwMDAwMDAwMAorI2RlZmluZSBCTV80M180MiAweDAwMDAwYzAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNDJfNDMgQk1fNDNfNDIKKyNkZWZpbmUgQk1fNDRfNDIgMHgwMDAwMWMwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzQyXzQ0IEJNXzQ0XzQyCisjZGVmaW5lIEJNXzQ1XzQyIDB4MDAwMDNjMDAwMDAwMDAwMAorI2RlZmluZSBCTV80Ml80NSBCTV80NV80MgorI2RlZmluZSBCTV80Nl80MiAweDAwMDA3YzAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNDJfNDYgQk1fNDZfNDIKKyNkZWZpbmUgQk1fNDdfNDIgMHgwMDAwZmMwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzQyXzQ3IEJNXzQ3XzQyCisjZGVmaW5lIEJNXzQ4XzQyIDB4MDAwMWZjMDAwMDAwMDAwMAorI2RlZmluZSBCTV80Ml80OCBCTV80OF80MgorI2RlZmluZSBCTV80OV80MiAweDAwMDNmYzAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNDJfNDkgQk1fNDlfNDIKKyNkZWZpbmUgQk1fNTBfNDIgMHgwMDA3ZmMwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzQyXzUwIEJNXzUwXzQyCisjZGVmaW5lIEJNXzUxXzQyIDB4MDAwZmZjMDAwMDAwMDAwMAorI2RlZmluZSBCTV80Ml81MSBCTV81MV80MgorI2RlZmluZSBCTV81Ml80MiAweDAwMWZmYzAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNDJfNTIgQk1fNTJfNDIKKyNkZWZpbmUgQk1fNTNfNDIgMHgwMDNmZmMwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzQyXzUzIEJNXzUzXzQyCisjZGVmaW5lIEJNXzU0XzQyIDB4MDA3ZmZjMDAwMDAwMDAwMAorI2RlZmluZSBCTV80Ml81NCBCTV81NF80MgorI2RlZmluZSBCTV81NV80MiAweDAwZmZmYzAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNDJfNTUgQk1fNTVfNDIKKyNkZWZpbmUgQk1fNTZfNDIgMHgwMWZmZmMwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzQyXzU2IEJNXzU2XzQyCisjZGVmaW5lIEJNXzU3XzQyIDB4MDNmZmZjMDAwMDAwMDAwMAorI2RlZmluZSBCTV80Ml81NyBCTV81N180MgorI2RlZmluZSBCTV81OF80MiAweDA3ZmZmYzAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNDJfNTggQk1fNThfNDIKKyNkZWZpbmUgQk1fNTlfNDIgMHgwZmZmZmMwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzQyXzU5IEJNXzU5XzQyCisjZGVmaW5lIEJNXzYwXzQyIDB4MWZmZmZjMDAwMDAwMDAwMAorI2RlZmluZSBCTV80Ml82MCBCTV82MF80MgorI2RlZmluZSBCTV82MV80MiAweDNmZmZmYzAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNDJfNjEgQk1fNjFfNDIKKyNkZWZpbmUgQk1fNjJfNDIgMHg3ZmZmZmMwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzQyXzYyIEJNXzYyXzQyCisjZGVmaW5lIEJNXzYzXzQyIDB4ZmZmZmZjMDAwMDAwMDAwMAorI2RlZmluZSBCTV80Ml82MyBCTV82M180MgorI2RlZmluZSBCTV80M180MyAweDAwMDAwODAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNDRfNDMgMHgwMDAwMTgwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzQzXzQ0IEJNXzQ0XzQzCisjZGVmaW5lIEJNXzQ1XzQzIDB4MDAwMDM4MDAwMDAwMDAwMAorI2RlZmluZSBCTV80M180NSBCTV80NV80MworI2RlZmluZSBCTV80Nl80MyAweDAwMDA3ODAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNDNfNDYgQk1fNDZfNDMKKyNkZWZpbmUgQk1fNDdfNDMgMHgwMDAwZjgwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzQzXzQ3IEJNXzQ3XzQzCisjZGVmaW5lIEJNXzQ4XzQzIDB4MDAwMWY4MDAwMDAwMDAwMAorI2RlZmluZSBCTV80M180OCBCTV80OF80MworI2RlZmluZSBCTV80OV80MyAweDAwMDNmODAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNDNfNDkgQk1fNDlfNDMKKyNkZWZpbmUgQk1fNTBfNDMgMHgwMDA3ZjgwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzQzXzUwIEJNXzUwXzQzCisjZGVmaW5lIEJNXzUxXzQzIDB4MDAwZmY4MDAwMDAwMDAwMAorI2RlZmluZSBCTV80M181MSBCTV81MV80MworI2RlZmluZSBCTV81Ml80MyAweDAwMWZmODAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNDNfNTIgQk1fNTJfNDMKKyNkZWZpbmUgQk1fNTNfNDMgMHgwMDNmZjgwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzQzXzUzIEJNXzUzXzQzCisjZGVmaW5lIEJNXzU0XzQzIDB4MDA3ZmY4MDAwMDAwMDAwMAorI2RlZmluZSBCTV80M181NCBCTV81NF80MworI2RlZmluZSBCTV81NV80MyAweDAwZmZmODAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNDNfNTUgQk1fNTVfNDMKKyNkZWZpbmUgQk1fNTZfNDMgMHgwMWZmZjgwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzQzXzU2IEJNXzU2XzQzCisjZGVmaW5lIEJNXzU3XzQzIDB4MDNmZmY4MDAwMDAwMDAwMAorI2RlZmluZSBCTV80M181NyBCTV81N180MworI2RlZmluZSBCTV81OF80MyAweDA3ZmZmODAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNDNfNTggQk1fNThfNDMKKyNkZWZpbmUgQk1fNTlfNDMgMHgwZmZmZjgwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzQzXzU5IEJNXzU5XzQzCisjZGVmaW5lIEJNXzYwXzQzIDB4MWZmZmY4MDAwMDAwMDAwMAorI2RlZmluZSBCTV80M182MCBCTV82MF80MworI2RlZmluZSBCTV82MV80MyAweDNmZmZmODAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNDNfNjEgQk1fNjFfNDMKKyNkZWZpbmUgQk1fNjJfNDMgMHg3ZmZmZjgwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzQzXzYyIEJNXzYyXzQzCisjZGVmaW5lIEJNXzYzXzQzIDB4ZmZmZmY4MDAwMDAwMDAwMAorI2RlZmluZSBCTV80M182MyBCTV82M180MworI2RlZmluZSBCTV80NF80NCAweDAwMDAxMDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNDVfNDQgMHgwMDAwMzAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzQ0XzQ1IEJNXzQ1XzQ0CisjZGVmaW5lIEJNXzQ2XzQ0IDB4MDAwMDcwMDAwMDAwMDAwMAorI2RlZmluZSBCTV80NF80NiBCTV80Nl80NAorI2RlZmluZSBCTV80N180NCAweDAwMDBmMDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNDRfNDcgQk1fNDdfNDQKKyNkZWZpbmUgQk1fNDhfNDQgMHgwMDAxZjAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzQ0XzQ4IEJNXzQ4XzQ0CisjZGVmaW5lIEJNXzQ5XzQ0IDB4MDAwM2YwMDAwMDAwMDAwMAorI2RlZmluZSBCTV80NF80OSBCTV80OV80NAorI2RlZmluZSBCTV81MF80NCAweDAwMDdmMDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNDRfNTAgQk1fNTBfNDQKKyNkZWZpbmUgQk1fNTFfNDQgMHgwMDBmZjAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzQ0XzUxIEJNXzUxXzQ0CisjZGVmaW5lIEJNXzUyXzQ0IDB4MDAxZmYwMDAwMDAwMDAwMAorI2RlZmluZSBCTV80NF81MiBCTV81Ml80NAorI2RlZmluZSBCTV81M180NCAweDAwM2ZmMDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNDRfNTMgQk1fNTNfNDQKKyNkZWZpbmUgQk1fNTRfNDQgMHgwMDdmZjAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzQ0XzU0IEJNXzU0XzQ0CisjZGVmaW5lIEJNXzU1XzQ0IDB4MDBmZmYwMDAwMDAwMDAwMAorI2RlZmluZSBCTV80NF81NSBCTV81NV80NAorI2RlZmluZSBCTV81Nl80NCAweDAxZmZmMDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNDRfNTYgQk1fNTZfNDQKKyNkZWZpbmUgQk1fNTdfNDQgMHgwM2ZmZjAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzQ0XzU3IEJNXzU3XzQ0CisjZGVmaW5lIEJNXzU4XzQ0IDB4MDdmZmYwMDAwMDAwMDAwMAorI2RlZmluZSBCTV80NF81OCBCTV81OF80NAorI2RlZmluZSBCTV81OV80NCAweDBmZmZmMDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNDRfNTkgQk1fNTlfNDQKKyNkZWZpbmUgQk1fNjBfNDQgMHgxZmZmZjAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzQ0XzYwIEJNXzYwXzQ0CisjZGVmaW5lIEJNXzYxXzQ0IDB4M2ZmZmYwMDAwMDAwMDAwMAorI2RlZmluZSBCTV80NF82MSBCTV82MV80NAorI2RlZmluZSBCTV82Ml80NCAweDdmZmZmMDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNDRfNjIgQk1fNjJfNDQKKyNkZWZpbmUgQk1fNjNfNDQgMHhmZmZmZjAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzQ0XzYzIEJNXzYzXzQ0CisjZGVmaW5lIEJNXzQ1XzQ1IDB4MDAwMDIwMDAwMDAwMDAwMAorI2RlZmluZSBCTV80Nl80NSAweDAwMDA2MDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNDVfNDYgQk1fNDZfNDUKKyNkZWZpbmUgQk1fNDdfNDUgMHgwMDAwZTAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzQ1XzQ3IEJNXzQ3XzQ1CisjZGVmaW5lIEJNXzQ4XzQ1IDB4MDAwMWUwMDAwMDAwMDAwMAorI2RlZmluZSBCTV80NV80OCBCTV80OF80NQorI2RlZmluZSBCTV80OV80NSAweDAwMDNlMDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNDVfNDkgQk1fNDlfNDUKKyNkZWZpbmUgQk1fNTBfNDUgMHgwMDA3ZTAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzQ1XzUwIEJNXzUwXzQ1CisjZGVmaW5lIEJNXzUxXzQ1IDB4MDAwZmUwMDAwMDAwMDAwMAorI2RlZmluZSBCTV80NV81MSBCTV81MV80NQorI2RlZmluZSBCTV81Ml80NSAweDAwMWZlMDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNDVfNTIgQk1fNTJfNDUKKyNkZWZpbmUgQk1fNTNfNDUgMHgwMDNmZTAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzQ1XzUzIEJNXzUzXzQ1CisjZGVmaW5lIEJNXzU0XzQ1IDB4MDA3ZmUwMDAwMDAwMDAwMAorI2RlZmluZSBCTV80NV81NCBCTV81NF80NQorI2RlZmluZSBCTV81NV80NSAweDAwZmZlMDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNDVfNTUgQk1fNTVfNDUKKyNkZWZpbmUgQk1fNTZfNDUgMHgwMWZmZTAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzQ1XzU2IEJNXzU2XzQ1CisjZGVmaW5lIEJNXzU3XzQ1IDB4MDNmZmUwMDAwMDAwMDAwMAorI2RlZmluZSBCTV80NV81NyBCTV81N180NQorI2RlZmluZSBCTV81OF80NSAweDA3ZmZlMDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNDVfNTggQk1fNThfNDUKKyNkZWZpbmUgQk1fNTlfNDUgMHgwZmZmZTAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzQ1XzU5IEJNXzU5XzQ1CisjZGVmaW5lIEJNXzYwXzQ1IDB4MWZmZmUwMDAwMDAwMDAwMAorI2RlZmluZSBCTV80NV82MCBCTV82MF80NQorI2RlZmluZSBCTV82MV80NSAweDNmZmZlMDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNDVfNjEgQk1fNjFfNDUKKyNkZWZpbmUgQk1fNjJfNDUgMHg3ZmZmZTAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzQ1XzYyIEJNXzYyXzQ1CisjZGVmaW5lIEJNXzYzXzQ1IDB4ZmZmZmUwMDAwMDAwMDAwMAorI2RlZmluZSBCTV80NV82MyBCTV82M180NQorI2RlZmluZSBCTV80Nl80NiAweDAwMDA0MDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNDdfNDYgMHgwMDAwYzAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzQ2XzQ3IEJNXzQ3XzQ2CisjZGVmaW5lIEJNXzQ4XzQ2IDB4MDAwMWMwMDAwMDAwMDAwMAorI2RlZmluZSBCTV80Nl80OCBCTV80OF80NgorI2RlZmluZSBCTV80OV80NiAweDAwMDNjMDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNDZfNDkgQk1fNDlfNDYKKyNkZWZpbmUgQk1fNTBfNDYgMHgwMDA3YzAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzQ2XzUwIEJNXzUwXzQ2CisjZGVmaW5lIEJNXzUxXzQ2IDB4MDAwZmMwMDAwMDAwMDAwMAorI2RlZmluZSBCTV80Nl81MSBCTV81MV80NgorI2RlZmluZSBCTV81Ml80NiAweDAwMWZjMDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNDZfNTIgQk1fNTJfNDYKKyNkZWZpbmUgQk1fNTNfNDYgMHgwMDNmYzAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzQ2XzUzIEJNXzUzXzQ2CisjZGVmaW5lIEJNXzU0XzQ2IDB4MDA3ZmMwMDAwMDAwMDAwMAorI2RlZmluZSBCTV80Nl81NCBCTV81NF80NgorI2RlZmluZSBCTV81NV80NiAweDAwZmZjMDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNDZfNTUgQk1fNTVfNDYKKyNkZWZpbmUgQk1fNTZfNDYgMHgwMWZmYzAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzQ2XzU2IEJNXzU2XzQ2CisjZGVmaW5lIEJNXzU3XzQ2IDB4MDNmZmMwMDAwMDAwMDAwMAorI2RlZmluZSBCTV80Nl81NyBCTV81N180NgorI2RlZmluZSBCTV81OF80NiAweDA3ZmZjMDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNDZfNTggQk1fNThfNDYKKyNkZWZpbmUgQk1fNTlfNDYgMHgwZmZmYzAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzQ2XzU5IEJNXzU5XzQ2CisjZGVmaW5lIEJNXzYwXzQ2IDB4MWZmZmMwMDAwMDAwMDAwMAorI2RlZmluZSBCTV80Nl82MCBCTV82MF80NgorI2RlZmluZSBCTV82MV80NiAweDNmZmZjMDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNDZfNjEgQk1fNjFfNDYKKyNkZWZpbmUgQk1fNjJfNDYgMHg3ZmZmYzAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzQ2XzYyIEJNXzYyXzQ2CisjZGVmaW5lIEJNXzYzXzQ2IDB4ZmZmZmMwMDAwMDAwMDAwMAorI2RlZmluZSBCTV80Nl82MyBCTV82M180NgorI2RlZmluZSBCTV80N180NyAweDAwMDA4MDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNDhfNDcgMHgwMDAxODAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzQ3XzQ4IEJNXzQ4XzQ3CisjZGVmaW5lIEJNXzQ5XzQ3IDB4MDAwMzgwMDAwMDAwMDAwMAorI2RlZmluZSBCTV80N180OSBCTV80OV80NworI2RlZmluZSBCTV81MF80NyAweDAwMDc4MDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNDdfNTAgQk1fNTBfNDcKKyNkZWZpbmUgQk1fNTFfNDcgMHgwMDBmODAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzQ3XzUxIEJNXzUxXzQ3CisjZGVmaW5lIEJNXzUyXzQ3IDB4MDAxZjgwMDAwMDAwMDAwMAorI2RlZmluZSBCTV80N181MiBCTV81Ml80NworI2RlZmluZSBCTV81M180NyAweDAwM2Y4MDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNDdfNTMgQk1fNTNfNDcKKyNkZWZpbmUgQk1fNTRfNDcgMHgwMDdmODAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzQ3XzU0IEJNXzU0XzQ3CisjZGVmaW5lIEJNXzU1XzQ3IDB4MDBmZjgwMDAwMDAwMDAwMAorI2RlZmluZSBCTV80N181NSBCTV81NV80NworI2RlZmluZSBCTV81Nl80NyAweDAxZmY4MDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNDdfNTYgQk1fNTZfNDcKKyNkZWZpbmUgQk1fNTdfNDcgMHgwM2ZmODAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzQ3XzU3IEJNXzU3XzQ3CisjZGVmaW5lIEJNXzU4XzQ3IDB4MDdmZjgwMDAwMDAwMDAwMAorI2RlZmluZSBCTV80N181OCBCTV81OF80NworI2RlZmluZSBCTV81OV80NyAweDBmZmY4MDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNDdfNTkgQk1fNTlfNDcKKyNkZWZpbmUgQk1fNjBfNDcgMHgxZmZmODAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzQ3XzYwIEJNXzYwXzQ3CisjZGVmaW5lIEJNXzYxXzQ3IDB4M2ZmZjgwMDAwMDAwMDAwMAorI2RlZmluZSBCTV80N182MSBCTV82MV80NworI2RlZmluZSBCTV82Ml80NyAweDdmZmY4MDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNDdfNjIgQk1fNjJfNDcKKyNkZWZpbmUgQk1fNjNfNDcgMHhmZmZmODAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzQ3XzYzIEJNXzYzXzQ3CisjZGVmaW5lIEJNXzQ4XzQ4IDB4MDAwMTAwMDAwMDAwMDAwMAorI2RlZmluZSBCTV80OV80OCAweDAwMDMwMDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNDhfNDkgQk1fNDlfNDgKKyNkZWZpbmUgQk1fNTBfNDggMHgwMDA3MDAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzQ4XzUwIEJNXzUwXzQ4CisjZGVmaW5lIEJNXzUxXzQ4IDB4MDAwZjAwMDAwMDAwMDAwMAorI2RlZmluZSBCTV80OF81MSBCTV81MV80OAorI2RlZmluZSBCTV81Ml80OCAweDAwMWYwMDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNDhfNTIgQk1fNTJfNDgKKyNkZWZpbmUgQk1fNTNfNDggMHgwMDNmMDAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzQ4XzUzIEJNXzUzXzQ4CisjZGVmaW5lIEJNXzU0XzQ4IDB4MDA3ZjAwMDAwMDAwMDAwMAorI2RlZmluZSBCTV80OF81NCBCTV81NF80OAorI2RlZmluZSBCTV81NV80OCAweDAwZmYwMDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNDhfNTUgQk1fNTVfNDgKKyNkZWZpbmUgQk1fNTZfNDggMHgwMWZmMDAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzQ4XzU2IEJNXzU2XzQ4CisjZGVmaW5lIEJNXzU3XzQ4IDB4MDNmZjAwMDAwMDAwMDAwMAorI2RlZmluZSBCTV80OF81NyBCTV81N180OAorI2RlZmluZSBCTV81OF80OCAweDA3ZmYwMDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNDhfNTggQk1fNThfNDgKKyNkZWZpbmUgQk1fNTlfNDggMHgwZmZmMDAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzQ4XzU5IEJNXzU5XzQ4CisjZGVmaW5lIEJNXzYwXzQ4IDB4MWZmZjAwMDAwMDAwMDAwMAorI2RlZmluZSBCTV80OF82MCBCTV82MF80OAorI2RlZmluZSBCTV82MV80OCAweDNmZmYwMDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNDhfNjEgQk1fNjFfNDgKKyNkZWZpbmUgQk1fNjJfNDggMHg3ZmZmMDAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzQ4XzYyIEJNXzYyXzQ4CisjZGVmaW5lIEJNXzYzXzQ4IDB4ZmZmZjAwMDAwMDAwMDAwMAorI2RlZmluZSBCTV80OF82MyBCTV82M180OAorI2RlZmluZSBCTV80OV80OSAweDAwMDIwMDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNTBfNDkgMHgwMDA2MDAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzQ5XzUwIEJNXzUwXzQ5CisjZGVmaW5lIEJNXzUxXzQ5IDB4MDAwZTAwMDAwMDAwMDAwMAorI2RlZmluZSBCTV80OV81MSBCTV81MV80OQorI2RlZmluZSBCTV81Ml80OSAweDAwMWUwMDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNDlfNTIgQk1fNTJfNDkKKyNkZWZpbmUgQk1fNTNfNDkgMHgwMDNlMDAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzQ5XzUzIEJNXzUzXzQ5CisjZGVmaW5lIEJNXzU0XzQ5IDB4MDA3ZTAwMDAwMDAwMDAwMAorI2RlZmluZSBCTV80OV81NCBCTV81NF80OQorI2RlZmluZSBCTV81NV80OSAweDAwZmUwMDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNDlfNTUgQk1fNTVfNDkKKyNkZWZpbmUgQk1fNTZfNDkgMHgwMWZlMDAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzQ5XzU2IEJNXzU2XzQ5CisjZGVmaW5lIEJNXzU3XzQ5IDB4MDNmZTAwMDAwMDAwMDAwMAorI2RlZmluZSBCTV80OV81NyBCTV81N180OQorI2RlZmluZSBCTV81OF80OSAweDA3ZmUwMDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNDlfNTggQk1fNThfNDkKKyNkZWZpbmUgQk1fNTlfNDkgMHgwZmZlMDAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzQ5XzU5IEJNXzU5XzQ5CisjZGVmaW5lIEJNXzYwXzQ5IDB4MWZmZTAwMDAwMDAwMDAwMAorI2RlZmluZSBCTV80OV82MCBCTV82MF80OQorI2RlZmluZSBCTV82MV80OSAweDNmZmUwMDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNDlfNjEgQk1fNjFfNDkKKyNkZWZpbmUgQk1fNjJfNDkgMHg3ZmZlMDAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzQ5XzYyIEJNXzYyXzQ5CisjZGVmaW5lIEJNXzYzXzQ5IDB4ZmZmZTAwMDAwMDAwMDAwMAorI2RlZmluZSBCTV80OV82MyBCTV82M180OQorI2RlZmluZSBCTV81MF81MCAweDAwMDQwMDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNTFfNTAgMHgwMDBjMDAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzUwXzUxIEJNXzUxXzUwCisjZGVmaW5lIEJNXzUyXzUwIDB4MDAxYzAwMDAwMDAwMDAwMAorI2RlZmluZSBCTV81MF81MiBCTV81Ml81MAorI2RlZmluZSBCTV81M181MCAweDAwM2MwMDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNTBfNTMgQk1fNTNfNTAKKyNkZWZpbmUgQk1fNTRfNTAgMHgwMDdjMDAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzUwXzU0IEJNXzU0XzUwCisjZGVmaW5lIEJNXzU1XzUwIDB4MDBmYzAwMDAwMDAwMDAwMAorI2RlZmluZSBCTV81MF81NSBCTV81NV81MAorI2RlZmluZSBCTV81Nl81MCAweDAxZmMwMDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNTBfNTYgQk1fNTZfNTAKKyNkZWZpbmUgQk1fNTdfNTAgMHgwM2ZjMDAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzUwXzU3IEJNXzU3XzUwCisjZGVmaW5lIEJNXzU4XzUwIDB4MDdmYzAwMDAwMDAwMDAwMAorI2RlZmluZSBCTV81MF81OCBCTV81OF81MAorI2RlZmluZSBCTV81OV81MCAweDBmZmMwMDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNTBfNTkgQk1fNTlfNTAKKyNkZWZpbmUgQk1fNjBfNTAgMHgxZmZjMDAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzUwXzYwIEJNXzYwXzUwCisjZGVmaW5lIEJNXzYxXzUwIDB4M2ZmYzAwMDAwMDAwMDAwMAorI2RlZmluZSBCTV81MF82MSBCTV82MV81MAorI2RlZmluZSBCTV82Ml81MCAweDdmZmMwMDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNTBfNjIgQk1fNjJfNTAKKyNkZWZpbmUgQk1fNjNfNTAgMHhmZmZjMDAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzUwXzYzIEJNXzYzXzUwCisjZGVmaW5lIEJNXzUxXzUxIDB4MDAwODAwMDAwMDAwMDAwMAorI2RlZmluZSBCTV81Ml81MSAweDAwMTgwMDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNTFfNTIgQk1fNTJfNTEKKyNkZWZpbmUgQk1fNTNfNTEgMHgwMDM4MDAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzUxXzUzIEJNXzUzXzUxCisjZGVmaW5lIEJNXzU0XzUxIDB4MDA3ODAwMDAwMDAwMDAwMAorI2RlZmluZSBCTV81MV81NCBCTV81NF81MQorI2RlZmluZSBCTV81NV81MSAweDAwZjgwMDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNTFfNTUgQk1fNTVfNTEKKyNkZWZpbmUgQk1fNTZfNTEgMHgwMWY4MDAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzUxXzU2IEJNXzU2XzUxCisjZGVmaW5lIEJNXzU3XzUxIDB4MDNmODAwMDAwMDAwMDAwMAorI2RlZmluZSBCTV81MV81NyBCTV81N181MQorI2RlZmluZSBCTV81OF81MSAweDA3ZjgwMDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNTFfNTggQk1fNThfNTEKKyNkZWZpbmUgQk1fNTlfNTEgMHgwZmY4MDAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzUxXzU5IEJNXzU5XzUxCisjZGVmaW5lIEJNXzYwXzUxIDB4MWZmODAwMDAwMDAwMDAwMAorI2RlZmluZSBCTV81MV82MCBCTV82MF81MQorI2RlZmluZSBCTV82MV81MSAweDNmZjgwMDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNTFfNjEgQk1fNjFfNTEKKyNkZWZpbmUgQk1fNjJfNTEgMHg3ZmY4MDAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzUxXzYyIEJNXzYyXzUxCisjZGVmaW5lIEJNXzYzXzUxIDB4ZmZmODAwMDAwMDAwMDAwMAorI2RlZmluZSBCTV81MV82MyBCTV82M181MQorI2RlZmluZSBCTV81Ml81MiAweDAwMTAwMDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNTNfNTIgMHgwMDMwMDAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzUyXzUzIEJNXzUzXzUyCisjZGVmaW5lIEJNXzU0XzUyIDB4MDA3MDAwMDAwMDAwMDAwMAorI2RlZmluZSBCTV81Ml81NCBCTV81NF81MgorI2RlZmluZSBCTV81NV81MiAweDAwZjAwMDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNTJfNTUgQk1fNTVfNTIKKyNkZWZpbmUgQk1fNTZfNTIgMHgwMWYwMDAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzUyXzU2IEJNXzU2XzUyCisjZGVmaW5lIEJNXzU3XzUyIDB4MDNmMDAwMDAwMDAwMDAwMAorI2RlZmluZSBCTV81Ml81NyBCTV81N181MgorI2RlZmluZSBCTV81OF81MiAweDA3ZjAwMDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNTJfNTggQk1fNThfNTIKKyNkZWZpbmUgQk1fNTlfNTIgMHgwZmYwMDAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzUyXzU5IEJNXzU5XzUyCisjZGVmaW5lIEJNXzYwXzUyIDB4MWZmMDAwMDAwMDAwMDAwMAorI2RlZmluZSBCTV81Ml82MCBCTV82MF81MgorI2RlZmluZSBCTV82MV81MiAweDNmZjAwMDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNTJfNjEgQk1fNjFfNTIKKyNkZWZpbmUgQk1fNjJfNTIgMHg3ZmYwMDAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzUyXzYyIEJNXzYyXzUyCisjZGVmaW5lIEJNXzYzXzUyIDB4ZmZmMDAwMDAwMDAwMDAwMAorI2RlZmluZSBCTV81Ml82MyBCTV82M181MgorI2RlZmluZSBCTV81M181MyAweDAwMjAwMDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNTRfNTMgMHgwMDYwMDAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzUzXzU0IEJNXzU0XzUzCisjZGVmaW5lIEJNXzU1XzUzIDB4MDBlMDAwMDAwMDAwMDAwMAorI2RlZmluZSBCTV81M181NSBCTV81NV81MworI2RlZmluZSBCTV81Nl81MyAweDAxZTAwMDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNTNfNTYgQk1fNTZfNTMKKyNkZWZpbmUgQk1fNTdfNTMgMHgwM2UwMDAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzUzXzU3IEJNXzU3XzUzCisjZGVmaW5lIEJNXzU4XzUzIDB4MDdlMDAwMDAwMDAwMDAwMAorI2RlZmluZSBCTV81M181OCBCTV81OF81MworI2RlZmluZSBCTV81OV81MyAweDBmZTAwMDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNTNfNTkgQk1fNTlfNTMKKyNkZWZpbmUgQk1fNjBfNTMgMHgxZmUwMDAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzUzXzYwIEJNXzYwXzUzCisjZGVmaW5lIEJNXzYxXzUzIDB4M2ZlMDAwMDAwMDAwMDAwMAorI2RlZmluZSBCTV81M182MSBCTV82MV81MworI2RlZmluZSBCTV82Ml81MyAweDdmZTAwMDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNTNfNjIgQk1fNjJfNTMKKyNkZWZpbmUgQk1fNjNfNTMgMHhmZmUwMDAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzUzXzYzIEJNXzYzXzUzCisjZGVmaW5lIEJNXzU0XzU0IDB4MDA0MDAwMDAwMDAwMDAwMAorI2RlZmluZSBCTV81NV81NCAweDAwYzAwMDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNTRfNTUgQk1fNTVfNTQKKyNkZWZpbmUgQk1fNTZfNTQgMHgwMWMwMDAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzU0XzU2IEJNXzU2XzU0CisjZGVmaW5lIEJNXzU3XzU0IDB4MDNjMDAwMDAwMDAwMDAwMAorI2RlZmluZSBCTV81NF81NyBCTV81N181NAorI2RlZmluZSBCTV81OF81NCAweDA3YzAwMDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNTRfNTggQk1fNThfNTQKKyNkZWZpbmUgQk1fNTlfNTQgMHgwZmMwMDAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzU0XzU5IEJNXzU5XzU0CisjZGVmaW5lIEJNXzYwXzU0IDB4MWZjMDAwMDAwMDAwMDAwMAorI2RlZmluZSBCTV81NF82MCBCTV82MF81NAorI2RlZmluZSBCTV82MV81NCAweDNmYzAwMDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNTRfNjEgQk1fNjFfNTQKKyNkZWZpbmUgQk1fNjJfNTQgMHg3ZmMwMDAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzU0XzYyIEJNXzYyXzU0CisjZGVmaW5lIEJNXzYzXzU0IDB4ZmZjMDAwMDAwMDAwMDAwMAorI2RlZmluZSBCTV81NF82MyBCTV82M181NAorI2RlZmluZSBCTV81NV81NSAweDAwODAwMDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNTZfNTUgMHgwMTgwMDAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzU1XzU2IEJNXzU2XzU1CisjZGVmaW5lIEJNXzU3XzU1IDB4MDM4MDAwMDAwMDAwMDAwMAorI2RlZmluZSBCTV81NV81NyBCTV81N181NQorI2RlZmluZSBCTV81OF81NSAweDA3ODAwMDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNTVfNTggQk1fNThfNTUKKyNkZWZpbmUgQk1fNTlfNTUgMHgwZjgwMDAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzU1XzU5IEJNXzU5XzU1CisjZGVmaW5lIEJNXzYwXzU1IDB4MWY4MDAwMDAwMDAwMDAwMAorI2RlZmluZSBCTV81NV82MCBCTV82MF81NQorI2RlZmluZSBCTV82MV81NSAweDNmODAwMDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNTVfNjEgQk1fNjFfNTUKKyNkZWZpbmUgQk1fNjJfNTUgMHg3ZjgwMDAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzU1XzYyIEJNXzYyXzU1CisjZGVmaW5lIEJNXzYzXzU1IDB4ZmY4MDAwMDAwMDAwMDAwMAorI2RlZmluZSBCTV81NV82MyBCTV82M181NQorI2RlZmluZSBCTV81Nl81NiAweDAxMDAwMDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNTdfNTYgMHgwMzAwMDAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzU2XzU3IEJNXzU3XzU2CisjZGVmaW5lIEJNXzU4XzU2IDB4MDcwMDAwMDAwMDAwMDAwMAorI2RlZmluZSBCTV81Nl81OCBCTV81OF81NgorI2RlZmluZSBCTV81OV81NiAweDBmMDAwMDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNTZfNTkgQk1fNTlfNTYKKyNkZWZpbmUgQk1fNjBfNTYgMHgxZjAwMDAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzU2XzYwIEJNXzYwXzU2CisjZGVmaW5lIEJNXzYxXzU2IDB4M2YwMDAwMDAwMDAwMDAwMAorI2RlZmluZSBCTV81Nl82MSBCTV82MV81NgorI2RlZmluZSBCTV82Ml81NiAweDdmMDAwMDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNTZfNjIgQk1fNjJfNTYKKyNkZWZpbmUgQk1fNjNfNTYgMHhmZjAwMDAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzU2XzYzIEJNXzYzXzU2CisjZGVmaW5lIEJNXzU3XzU3IDB4MDIwMDAwMDAwMDAwMDAwMAorI2RlZmluZSBCTV81OF81NyAweDA2MDAwMDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNTdfNTggQk1fNThfNTcKKyNkZWZpbmUgQk1fNTlfNTcgMHgwZTAwMDAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzU3XzU5IEJNXzU5XzU3CisjZGVmaW5lIEJNXzYwXzU3IDB4MWUwMDAwMDAwMDAwMDAwMAorI2RlZmluZSBCTV81N182MCBCTV82MF81NworI2RlZmluZSBCTV82MV81NyAweDNlMDAwMDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNTdfNjEgQk1fNjFfNTcKKyNkZWZpbmUgQk1fNjJfNTcgMHg3ZTAwMDAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzU3XzYyIEJNXzYyXzU3CisjZGVmaW5lIEJNXzYzXzU3IDB4ZmUwMDAwMDAwMDAwMDAwMAorI2RlZmluZSBCTV81N182MyBCTV82M181NworI2RlZmluZSBCTV81OF81OCAweDA0MDAwMDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNTlfNTggMHgwYzAwMDAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzU4XzU5IEJNXzU5XzU4CisjZGVmaW5lIEJNXzYwXzU4IDB4MWMwMDAwMDAwMDAwMDAwMAorI2RlZmluZSBCTV81OF82MCBCTV82MF81OAorI2RlZmluZSBCTV82MV81OCAweDNjMDAwMDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNThfNjEgQk1fNjFfNTgKKyNkZWZpbmUgQk1fNjJfNTggMHg3YzAwMDAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzU4XzYyIEJNXzYyXzU4CisjZGVmaW5lIEJNXzYzXzU4IDB4ZmMwMDAwMDAwMDAwMDAwMAorI2RlZmluZSBCTV81OF82MyBCTV82M181OAorI2RlZmluZSBCTV81OV81OSAweDA4MDAwMDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNjBfNTkgMHgxODAwMDAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzU5XzYwIEJNXzYwXzU5CisjZGVmaW5lIEJNXzYxXzU5IDB4MzgwMDAwMDAwMDAwMDAwMAorI2RlZmluZSBCTV81OV82MSBCTV82MV81OQorI2RlZmluZSBCTV82Ml81OSAweDc4MDAwMDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNTlfNjIgQk1fNjJfNTkKKyNkZWZpbmUgQk1fNjNfNTkgMHhmODAwMDAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzU5XzYzIEJNXzYzXzU5CisjZGVmaW5lIEJNXzYwXzYwIDB4MTAwMDAwMDAwMDAwMDAwMAorI2RlZmluZSBCTV82MV82MCAweDMwMDAwMDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNjBfNjEgQk1fNjFfNjAKKyNkZWZpbmUgQk1fNjJfNjAgMHg3MDAwMDAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzYwXzYyIEJNXzYyXzYwCisjZGVmaW5lIEJNXzYzXzYwIDB4ZjAwMDAwMDAwMDAwMDAwMAorI2RlZmluZSBCTV82MF82MyBCTV82M182MAorI2RlZmluZSBCTV82MV82MSAweDIwMDAwMDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNjJfNjEgMHg2MDAwMDAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzYxXzYyIEJNXzYyXzYxCisjZGVmaW5lIEJNXzYzXzYxIDB4ZTAwMDAwMDAwMDAwMDAwMAorI2RlZmluZSBCTV82MV82MyBCTV82M182MQorI2RlZmluZSBCTV82Ml82MiAweDQwMDAwMDAwMDAwMDAwMDAKKyNkZWZpbmUgQk1fNjNfNjIgMHhjMDAwMDAwMDAwMDAwMDAwCisjZGVmaW5lIEJNXzYyXzYzIEJNXzYzXzYyCisjZGVmaW5lIEJNXzYzXzYzIDB4ODAwMDAwMDAwMDAwMDAwMAorCisjZW5kaWYKKworI2VuZGlmIC8qIF9fQVNNX1RYNDkyN19UWDQ5MjdfTUlQU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3R4NDkyNy90eDQ5MjdfcGNpLmggYi9pbmNsdWRlL2FzbS1taXBzL3R4NDkyNy90eDQ5MjdfcGNpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTcwNDMzNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvdHg0OTI3L3R4NDkyN19wY2kuaApAQCAtMCwwICsxLDI3NSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMC0yMDAxIFRvc2hpYmEgQ29ycG9yYXRpb24KKyAqLworI2lmbmRlZiBfX0FTTV9UWDQ5MjdfVFg0OTI3X1BDSV9IIAorI2RlZmluZSBfX0FTTV9UWDQ5MjdfVFg0OTI3X1BDSV9IIAorCisjZGVmaW5lIFRYNDkyN19DQ0ZHX1RPRSAweDAwMDA0MDAwCisKKyNkZWZpbmUgVFg0OTI3X1BDSU1FTSAgICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgVFg0OTI3X1BDSU1FTV9TSVpFIDB4MDgwMDAwMDAKKyNkZWZpbmUgVFg0OTI3X1BDSUlPICAgICAgIDB4MTYwMDAwMDAKKyNkZWZpbmUgVFg0OTI3X1BDSUlPX1NJWkUgIDB4MDEwMDAwMDAKKworI2RlZmluZSBUWDQ5MjdfU0RSQU1DX1JFRyAgICAgICAweGZmMWY4MDAwCisjZGVmaW5lIFRYNDkyN19FQlVTQ19SRUcgICAgICAgIDB4ZmYxZjkwMDAKKyNkZWZpbmUgVFg0OTI3X1BDSUNfUkVHICAgICAgICAgMHhmZjFmZDAwMAorI2RlZmluZSBUWDQ5MjdfQ0NGR19SRUcgICAgICAgICAweGZmMWZlMDAwCisjZGVmaW5lIFRYNDkyN19JUkNfUkVHICAgICAgICAgIDB4ZmYxZmY2MDAKKyNkZWZpbmUgVFg0OTI3X0NFMyAgICAgIDB4MTdmMDAwMDAgICAgICAvKiAxTSAqLworI2RlZmluZSBUWDQ5MjdfUENJUkVTRVRfQUREUiAgICAweGJjMDBmMDA2CisjZGVmaW5lIFRYNDkyN19QQ0lfQ0xLX0FERFIgICAgIChLU0VHMSArIFRYNDkyN19DRTMgKyAweDAwMDQwMDIwKQorCisjZGVmaW5lIFRYNDkyN19JTVNUQVRfQUREUihuKSAgIChLU0VHMSArIFRYNDkyN19DRTMgKyAweDAwMDQwMDFhICsgKG4pKQorI2RlZmluZSB0eDQ5MjdfaW1zdGF0X3B0cihuKSAgICBcCisgICAgICAgICgodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKVRYNDkyN19JTVNUQVRfQUREUihuKSkKKworLyogYml0cyBmb3IgSVNUQVQzL0lNQVNLMy9JTVNUQVQzICovCisjZGVmaW5lIFRYNDkyN19JTlQzQl9QQ0lEICAgICAgIDAKKyNkZWZpbmUgVFg0OTI3X0lOVDNCX1BDSUMgICAgICAgMQorI2RlZmluZSBUWDQ5MjdfSU5UM0JfUENJQiAgICAgICAyCisjZGVmaW5lIFRYNDkyN19JTlQzQl9QQ0lBICAgICAgIDMKKyNkZWZpbmUgVFg0OTI3X0lOVDNGX1BDSUQgICAgICAgKDEgPDwgVFg0OTI3X0lOVDNCX1BDSUQpCisjZGVmaW5lIFRYNDkyN19JTlQzRl9QQ0lDICAgICAgICgxIDw8IFRYNDkyN19JTlQzQl9QQ0lDKQorI2RlZmluZSBUWDQ5MjdfSU5UM0ZfUENJQiAgICAgICAoMSA8PCBUWDQ5MjdfSU5UM0JfUENJQikKKyNkZWZpbmUgVFg0OTI3X0lOVDNGX1BDSUEgICAgICAgKDEgPDwgVFg0OTI3X0lOVDNCX1BDSUEpCisKKy8qIGJpdHMgZm9yIFBDSV9DTEsgKFM2KSAqLworI2RlZmluZSBUWDQ5MjdfUENJX0NMS19IT1NUICAgICAweDgwCisjZGVmaW5lIFRYNDkyN19QQ0lfQ0xLX01BU0sgICAgICgweDBmIDw8IDMpCisjZGVmaW5lIFRYNDkyN19QQ0lfQ0xLXzMzICAgICAgICgweDAxIDw8IDMpCisjZGVmaW5lIFRYNDkyN19QQ0lfQ0xLXzI1ICAgICAgICgweDA0IDw8IDMpCisjZGVmaW5lIFRYNDkyN19QQ0lfQ0xLXzY2ICAgICAgICgweDA5IDw8IDMpCisjZGVmaW5lIFRYNDkyN19QQ0lfQ0xLXzUwICAgICAgICgweDBjIDw8IDMpCisjZGVmaW5lIFRYNDkyN19QQ0lfQ0xLX0FDSyAgICAgIDB4MDQKKyNkZWZpbmUgVFg0OTI3X1BDSV9DTEtfQUNFICAgICAgMHgwMgorI2RlZmluZSBUWDQ5MjdfUENJX0NMS19FTkRJQU4gICAweDAxCisjZGVmaW5lIFRYNDkyN19OUl9JUlFfTE9DQUwgICAgICg4KzE2KQorI2RlZmluZSBUWDQ5MjdfTlJfSVJRX0lSQyAgICAgICAzMiAgICAgIC8qIE9uLUNoaXAgSVJDICovCisKKyNkZWZpbmUgVFg0OTI3X0lSX1BDSUMgIAkxNgorI2RlZmluZSBUWDQ5MjdfSVJfUENJRVJSICAgICAgICAyMgorI2RlZmluZSBUWDQ5MjdfSVJfUENJUE1BICAgICAgICAyMworI2RlZmluZSBUWDQ5MjdfSVJRX0lSQ19QQ0lDICAgICAoVFg0OTI3X05SX0lSUV9MT0NBTCArIFRYNDkyN19JUl9QQ0lDKQorI2RlZmluZSBUWDQ5MjdfSVJRX0lSQ19QQ0lFUlIgICAoVFg0OTI3X05SX0lSUV9MT0NBTCArIFRYNDkyN19JUl9QQ0lFUlIpCisjZGVmaW5lIFRYNDkyN19JUlFfSU9DMSAgICAgICAgIChUWDQ5MjdfTlJfSVJRX0xPQ0FMICsgVFg0OTI3X05SX0lSUV9JUkMpCisjZGVmaW5lIFRYNDkyN19JUlFfSU9DX1BDSUQgICAgIChUWDQ5MjdfSVJRX0lPQzEgKyBUWDQ5MjdfSU5UM0JfUENJRCkKKyNkZWZpbmUgVFg0OTI3X0lSUV9JT0NfUENJQyAgICAgKFRYNDkyN19JUlFfSU9DMSArIFRYNDkyN19JTlQzQl9QQ0lDKQorI2RlZmluZSBUWDQ5MjdfSVJRX0lPQ19QQ0lCICAgICAoVFg0OTI3X0lSUV9JT0MxICsgVFg0OTI3X0lOVDNCX1BDSUIpCisjZGVmaW5lIFRYNDkyN19JUlFfSU9DX1BDSUEgICAgIChUWDQ5MjdfSVJRX0lPQzEgKyBUWDQ5MjdfSU5UM0JfUENJQSkKKworI2lmZGVmIF9MQU5HVUFHRV9BU1NFTUJMWQorI2RlZmluZSBfQ09OU1Q2NChjKSAgICAgYworI2Vsc2UKKyNkZWZpbmUgX0NPTlNUNjQoYykgICAgIGMjI3VsbAorCisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorCisjZGVmaW5lIHR4NDkyN19wY2lyZXNldF9wdHIgICAgIFwKKyAgICAgICAgKCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopVFg0OTI3X1BDSVJFU0VUX0FERFIpCisjZGVmaW5lIHR4NDkyN19wY2lfY2xrX3B0ciAgICAgIFwKKyAgICAgICAgKCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopVFg0OTI3X1BDSV9DTEtfQUREUikKKworc3RydWN0IHR4NDkyN19zZHJhbWNfcmVnIHsKKyAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBsb25nIGNyWzRdOworICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGxvbmcgdW51c2VkMFs0XTsKKyAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBsb25nIHRyOworICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGxvbmcgdW51c2VkMVsyXTsKKyAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBsb25nIGNtZDsKK307CisKK3N0cnVjdCB0eDQ5MjdfZWJ1c2NfcmVnIHsKKyAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBsb25nIGNyWzhdOworfTsKKworc3RydWN0IHR4NDkyN19jY2ZnX3JlZyB7CisgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgbG9uZyBjY2ZnOworICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGxvbmcgY3JpcjsKKyAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBsb25nIHBjZmc7CisgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgbG9uZyB0ZWFyOworICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGxvbmcgY2xrY3RyOworICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGxvbmcgdW51c2VkMDsKKyAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBsb25nIGdhcmJjOworICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGxvbmcgdW51c2VkMTsKKyAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBsb25nIHVudXNlZDI7CisgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgbG9uZyByYW1wOworfTsKKworc3RydWN0IHR4NDkyN19pcmNfcmVnIHsKKyAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBjZXI7CisgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgY3JbMl07CisgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgdW51c2VkMDsKKyAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBpbHJbOF07CisgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgdW51c2VkMVs0XTsKKyAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBpbXI7CisgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgdW51c2VkMls3XTsKKyAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBzY3I7CisgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgdW51c2VkM1s3XTsKKyAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBzc3I7CisgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgdW51c2VkNFs3XTsKKyAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBjc3I7Cit9OworCitzdHJ1Y3QgdHg0OTI3X3BjaWNfcmVnIHsKKyAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBwY2lpZDsKKyAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBwY2lzdGF0dXM7CisgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgcGNpY2NyZXY7CisgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgcGNpY2ZnMTsKKyAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBwMmdtMHBsYmFzZTsgICAgICAgICAgICAgLyogKzEwICovCisgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgcDJnbTBwdWJhc2U7CisgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgcDJnbTFwbGJhc2U7CisgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgcDJnbTFwdWJhc2U7CisgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgcDJnbTJwYmFzZTsgICAgICAgICAgICAgIC8qICsyMCAqLworICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nIHAyZ2lvcGJhc2U7CisgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgdW51c2VkMDsKKyAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBwY2lzaWQ7CisgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgdW51c2VkMTsgICAgICAgICAvKiArMzAgKi8KKyAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBwY2ljYXBwdHI7CisgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgdW51c2VkMjsKKyAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBwY2ljZmcyOworICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGcycHRvY250OyAgICAgICAgICAgICAgICAvKiArNDAgKi8KKyAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyB1bnVzZWQzWzE1XTsKKyAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBnMnBzdGF0dXM7ICAgICAgICAgICAgICAgLyogKzgwICovCisgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgZzJwbWFzazsKKyAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBwY2lzc3RhdHVzOworICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nIHBjaW1hc2s7CisgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgcDJnY2ZnOyAgICAgICAgICAvKiArOTAgKi8KKyAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBwMmdzdGF0dXM7CisgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgcDJnbWFzazsKKyAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBwMmdjY21kOworICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nIHVudXNlZDRbMjRdOyAgICAgICAgICAgICAvKiArYTAgKi8KKyAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBwYmFyZXFwb3J0OyAgICAgICAgICAgICAgLyogKzEwMCAqLworICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nIHBiYWNmZzsKKyAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBwYmFzdGF0dXM7CisgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgcGJhbWFzazsKKyAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBwYmFibTsgICAgICAgICAgIC8qICsxMTAgKi8KKyAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBwYmFjcmVxOworICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nIHBiYWNnbnQ7CisgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgcGJhY3N0YXRlOworICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGxvbmcgZzJwbWdiYXNlWzNdOyAgICAgICAgICAgICAgIC8qICsxMjAgKi8KKyAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBsb25nIGcycGlvZ2Jhc2U7CisgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgZzJwbW1hc2tbM107ICAgICAgICAgICAgIC8qICsxNDAgKi8KKyAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBnMnBpb21hc2s7CisgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgbG9uZyBnMnBtcGJhc2VbM107ICAgICAgICAgICAgICAgLyogKzE1MCAqLworICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGxvbmcgZzJwaW9wYmFzZTsKKyAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBwY2ljY2ZnOyAgICAgICAgIC8qICsxNzAgKi8KKyAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBwY2ljc3RhdHVzOworICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nIHBjaWNtYXNrOworICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nIHVudXNlZDU7CisgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgbG9uZyBwMmdtZ2Jhc2VbM107ICAgICAgICAgICAgICAgLyogKzE4MCAqLworICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGxvbmcgcDJnaW9nYmFzZTsKKyAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBnMnBjZmdhZHJzOyAgICAgICAgICAgICAgLyogKzFhMCAqLworICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGcycGNmZ2RhdGE7CisgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgdW51c2VkNls4XTsKKyAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBnMnBpbnRhY2s7CisgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgZzJwc3BjOworICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nIHVudXNlZDdbMTJdOyAgICAgICAgICAgICAvKiArMWQwICovCisgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgbG9uZyBwZG1jYTsgICAgICAgICAgICAgIC8qICsyMDAgKi8KKyAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBsb25nIHBkbWdhOworICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGxvbmcgcGRtcGE7CisgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgbG9uZyBwZG1jdXQ7CisgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgbG9uZyBwZG1jbnQ7ICAgICAgICAgICAgIC8qICsyMjAgKi8KKyAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBsb25nIHBkbXN0czsKKyAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBsb25nIHVudXNlZDhbMl07CisgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgbG9uZyBwZG1kYls0XTsgICAgICAgICAgIC8qICsyNDAgKi8KKyAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBsb25nIHBkbXRkaDsgICAgICAgICAgICAgLyogKzI2MCAqLworICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGxvbmcgcGRtZG1zOworfTsKKworI2VuZGlmIC8qIF9MQU5HVUFHRV9BU1NFTUJMWSAqLworCisvKiBJUkNTUiA6IEludC4gQ3VycmVudCBTdGF0dXMgKi8KKyNkZWZpbmUgVFg0OTI3X0lSQ1NSX0lGICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBUWDQ5MjdfSVJDU1JfSUxWX01BU0sgICAweDAwMDAwNzAwCisjZGVmaW5lIFRYNDkyN19JUkNTUl9JVkxfTUFTSyAgIDB4MDAwMDAwMWYKKworLyoKKyAqIFBDSUMKKyAqLworCisvKiBiaXRzIGZvciBHMlBTVEFUVVMvRzJQTUFTSyAqLworI2RlZmluZSBUWDQ5MjdfUENJQ19HMlBTVEFUVVNfQUxMICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgVFg0OTI3X1BDSUNfRzJQU1RBVFVTX1RUT0UgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFRYNDkyN19QQ0lDX0cyUFNUQVRVU19SVE9FICAgICAgMHgwMDAwMDAwMQorCisvKiBiaXRzIGZvciBQQ0lNQVNLIChzZWUgYWxzbyBQQ0lfU1RBVFVTX1hYWCBpbiBsaW51eC9wY2kuaCAqLworI2RlZmluZSBUWDQ5MjdfUENJQ19QQ0lTVEFUVVNfQUxMICAgICAgIDB4MDAwMGY5MDAKKworLyogYml0cyBmb3IgUEJBQ0ZHICovCisjZGVmaW5lIFRYNDkyN19QQ0lDX1BCQUNGR19SUEJBIDB4MDAwMDAwMDQKKyNkZWZpbmUgVFg0OTI3X1BDSUNfUEJBQ0ZHX1BCQUVOICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFRYNDkyN19QQ0lDX1BCQUNGR19CTUNFTiAgICAgICAgMHgwMDAwMDAwMQorCisvKiBiaXRzIGZvciBHMlBNbkdCQVNFICovCisjZGVmaW5lIFRYNDkyN19QQ0lDX0cyUE1uR0JBU0VfQlNESVMgICAgX0NPTlNUNjQoMHgwMDAwMDAyMDAwMDAwMDAwKQorI2RlZmluZSBUWDQ5MjdfUENJQ19HMlBNbkdCQVNFX0VDSEcgICAgIF9DT05TVDY0KDB4MDAwMDAwMTAwMDAwMDAwMCkKKworLyogYml0cyBmb3IgRzJQSU9HQkFTRSAqLworI2RlZmluZSBUWDQ5MjdfUENJQ19HMlBJT0dCQVNFX0JTRElTICAgIF9DT05TVDY0KDB4MDAwMDAwMjAwMDAwMDAwMCkKKyNkZWZpbmUgVFg0OTI3X1BDSUNfRzJQSU9HQkFTRV9FQ0hHICAgICBfQ09OU1Q2NCgweDAwMDAwMDEwMDAwMDAwMDApCisKKy8qIGJpdHMgZm9yIFBDSUNTVEFUVVMvUENJQ01BU0sgKi8KKyNkZWZpbmUgVFg0OTI3X1BDSUNfUENJQ1NUQVRVU19BTEwgICAgICAweDAwMDAwN2RjCisKKy8qIGJpdHMgZm9yIFBDSUNDRkcgKi8KKyNkZWZpbmUgVFg0OTI3X1BDSUNfUENJQ0NGR19MQldDX01BU0sgICAweDBmZmYwMDAwCisjZGVmaW5lIFRYNDkyN19QQ0lDX1BDSUNDRkdfSFJTVCAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBUWDQ5MjdfUENJQ19QQ0lDQ0ZHX1NSU1QgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgVFg0OTI3X1BDSUNfUENJQ0NGR19JUkJFUiAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIFRYNDkyN19QQ0lDX1BDSUNDRkdfSU1TRTAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBUWDQ5MjdfUENJQ19QQ0lDQ0ZHX0lNU0UxICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgVFg0OTI3X1BDSUNfUENJQ0NGR19JTVNFMiAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIFRYNDkyN19QQ0lDX1BDSUNDRkdfSUlTRSAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBUWDQ5MjdfUENJQ19QQ0lDQ0ZHX0FUUiAweDAwMDAwMDEwCisjZGVmaW5lIFRYNDkyN19QQ0lDX1BDSUNDRkdfSUNBRSAgICAgICAgMHgwMDAwMDAwOAorCisvKiBiaXRzIGZvciBQMkdNbkdCQVNFICovCisjZGVmaW5lIFRYNDkyN19QQ0lDX1AyR01uR0JBU0VfVE1FTUVOICAgX0NPTlNUNjQoMHgwMDAwMDA0MDAwMDAwMDAwKQorI2RlZmluZSBUWDQ5MjdfUENJQ19QMkdNbkdCQVNFX1RCU0RJUyAgIF9DT05TVDY0KDB4MDAwMDAwMjAwMDAwMDAwMCkKKyNkZWZpbmUgVFg0OTI3X1BDSUNfUDJHTW5HQkFTRV9URUNIRyAgICBfQ09OU1Q2NCgweDAwMDAwMDEwMDAwMDAwMDApCisKKy8qIGJpdHMgZm9yIFAyR0lPR0JBU0UgKi8KKyNkZWZpbmUgVFg0OTI3X1BDSUNfUDJHSU9HQkFTRV9USU9FTiAgICBfQ09OU1Q2NCgweDAwMDAwMDQwMDAwMDAwMDApCisjZGVmaW5lIFRYNDkyN19QQ0lDX1AyR0lPR0JBU0VfVEJTRElTICAgX0NPTlNUNjQoMHgwMDAwMDAyMDAwMDAwMDAwKQorI2RlZmluZSBUWDQ5MjdfUENJQ19QMkdJT0dCQVNFX1RFQ0hHICAgIF9DT05TVDY0KDB4MDAwMDAwMTAwMDAwMDAwMCkKKworI2RlZmluZSBUWDQ5MjdfUENJQ19JRFNFTF9BRF9UT19TTE9UKGFkKSAgICAgICAgKChhZCkgLSAxMSkKKyNkZWZpbmUgVFg0OTI3X1BDSUNfTUFYX0RFVk5VICAgVFg0OTI3X1BDSUNfSURTRUxfQURfVE9fU0xPVCgzMikKKworLyoKKyAqIENDRkcKKyAqLworLyogQ0NGRyA6IENoaXAgQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSBUWDQ5MjdfQ0NGR19QQ0k2NiAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIFRYNDkyN19DQ0ZHX1BDSU1JREUgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgVFg0OTI3X0NDRkdfUENJWEFSQiAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBUWDQ5MjdfQ0NGR19QQ0lESVZNT0RFX01BU0sgICAgIDB4MDAwMDE4MDAKKyNkZWZpbmUgVFg0OTI3X0NDRkdfUENJRElWTU9ERV8yXzUgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIFRYNDkyN19DQ0ZHX1BDSURJVk1PREVfMyAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBUWDQ5MjdfQ0NGR19QQ0lESVZNT0RFXzUgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgVFg0OTI3X0NDRkdfUENJRElWTU9ERV82ICAgICAgICAweDAwMDAxODAwCisKKy8qIFBDRkcgOiBQaW4gQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSBUWDQ5MjdfUENGR19QQ0lDTEtFTl9BTEwgICAgICAgIDB4MDAzZjAwMDAKKyNkZWZpbmUgVFg0OTI3X1BDRkdfUENJQ0xLRU4oY2gpICAgICAgICAoMHgwMDAxMDAwMDw8KGNoKSkKKworLyogQ0xLQ1RSIDogQ2xvY2sgQ29udHJvbCAqLworI2RlZmluZSBUWDQ5MjdfQ0xLQ1RSX1BDSUNLRCAgICAweDAwNDAwMDAwCisjZGVmaW5lIFRYNDkyN19DTEtDVFJfUENJUlNUICAgIDB4MDAwMDAwNDAKKworCisjaWZuZGVmIF9MQU5HVUFHRV9BU1NFTUJMWQorCisjZGVmaW5lIHR4NDkyN19zZHJhbWNwdHIgICAgICAgICgoc3RydWN0IHR4NDkyN19zZHJhbWNfcmVnICopVFg0OTI3X1NEUkFNQ19SRUcpCisjZGVmaW5lIHR4NDkyN19wY2ljcHRyICAgICAgICAgICgoc3RydWN0IHR4NDkyN19wY2ljX3JlZyAqKVRYNDkyN19QQ0lDX1JFRykKKyNkZWZpbmUgdHg0OTI3X2NjZmdwdHIgICAgICAgICAgKChzdHJ1Y3QgdHg0OTI3X2NjZmdfcmVnICopVFg0OTI3X0NDRkdfUkVHKQorI2RlZmluZSB0eDQ5MjdfZWJ1c2NwdHIgICAgICAgICAoKHN0cnVjdCB0eDQ5MjdfZWJ1c2NfcmVnICopVFg0OTI3X0VCVVNDX1JFRykKKyNkZWZpbmUgdHg0OTI3X2lyY3B0ciAgICAgICAgICAgKChzdHJ1Y3QgdHg0OTI3X2lyY19yZWcgKilUWDQ5MjdfSVJDX1JFRykKKworI2VuZGlmIC8qIF9MQU5HVUFHRV9BU1NFTUJMWSAqLworCisjZW5kaWYgLyogX19BU01fVFg0OTI3X1RYNDkyN19QQ0lfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy90eXBlcy5oIGIvaW5jbHVkZS9hc20tbWlwcy90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyZjBjNzYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3R5cGVzLmgKQEAgLTAsMCArMSwxMDggQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTkgYnkgUmFsZiBCYWVjaGxlCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgU2lsaWNvbiBHcmFwaGljcywgSW5jLgorICovCisjaWZuZGVmIF9BU01fVFlQRVNfSAorI2RlZmluZSBfQVNNX1RZUEVTX0gKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1bW9kZV90OworCisvKgorICogX194eCBpcyBvazogaXQgZG9lc24ndCBwb2xsdXRlIHRoZSBQT1NJWCBuYW1lc3BhY2UuIFVzZSB0aGVzZSBpbiB0aGUKKyAqIGhlYWRlciBmaWxlcyBleHBvcnRlZCB0byB1c2VyIHNwYWNlCisgKi8KKwordHlwZWRlZiBfX3NpZ25lZF9fIGNoYXIgX19zODsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBfX3U4OworCit0eXBlZGVmIF9fc2lnbmVkX18gc2hvcnQgX19zMTY7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fdTE2OworCit0eXBlZGVmIF9fc2lnbmVkX18gaW50IF9fczMyOwordHlwZWRlZiB1bnNpZ25lZCBpbnQgX191MzI7CisKKyNpZiAoX01JUFNfU1pMT05HID09IDY0KQorCit0eXBlZGVmIF9fc2lnbmVkX18gbG9uZyBfX3M2NDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBfX3U2NDsKKworI2Vsc2UKKworI2lmIGRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykKK3R5cGVkZWYgX19zaWduZWRfXyBsb25nIGxvbmcgX19zNjQ7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3U2NDsKKyNlbmRpZgorCisjZW5kaWYKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisvKgorICogVGhlc2UgYXJlbid0IGV4cG9ydGVkIG91dHNpZGUgdGhlIGtlcm5lbCB0byBhdm9pZCBuYW1lIHNwYWNlIGNsYXNoZXMKKyAqLworI2lmZGVmIF9fS0VSTkVMX18KKworI2RlZmluZSBCSVRTX1BFUl9MT05HIF9NSVBTX1NaTE9ORworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKK3R5cGVkZWYgX19zaWduZWQgY2hhciBzODsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciB1ODsKKwordHlwZWRlZiBfX3NpZ25lZCBzaG9ydCBzMTY7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHUxNjsKKwordHlwZWRlZiBfX3NpZ25lZCBpbnQgczMyOwordHlwZWRlZiB1bnNpZ25lZCBpbnQgdTMyOworCisjaWYgKF9NSVBTX1NaTE9ORyA9PSA2NCkKKwordHlwZWRlZiBfX3NpZ25lZF9fIGxvbmcgczY0OwordHlwZWRlZiB1bnNpZ25lZCBsb25nIHU2NDsKKworI2Vsc2UKKworI2lmIGRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykKK3R5cGVkZWYgX19zaWduZWRfXyBsb25nIGxvbmcgczY0OwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdTY0OworI2VuZGlmCisKKyNlbmRpZgorCisjaWYgKGRlZmluZWQoQ09ORklHX0hJR0hNRU0pICYmIGRlZmluZWQoQ09ORklHXzY0QklUX1BIWVNfQUREUikpIFwKKyAgICB8fCBkZWZpbmVkKENPTkZJR19NSVBTNjQpCit0eXBlZGVmIHU2NCBkbWFfYWRkcl90OworI2Vsc2UKK3R5cGVkZWYgdTMyIGRtYV9hZGRyX3Q7CisjZW5kaWYKK3R5cGVkZWYgdTY0IGRtYTY0X2FkZHJfdDsKKworLyoKKyAqIERvbid0IHVzZSBwaHlzX3QuICBZb3UndmUgYmVlbiB3YXJuZWQuCisgKi8KKyNpZmRlZiBDT05GSUdfNjRCSVRfUEhZU19BRERSCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBwaHlzX3Q7CisjZWxzZQordHlwZWRlZiB1bnNpZ25lZCBsb25nIHBoeXNfdDsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0xCRAordHlwZWRlZiB1NjQgc2VjdG9yX3Q7CisjZGVmaW5lIEhBVkVfU0VDVE9SX1QKKyNlbmRpZgorCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGttZW1fYnVmY3RsX3Q7CisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9BU01fVFlQRVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy91YWNjZXNzLmggYi9pbmNsdWRlL2FzbS1taXBzL3VhY2Nlc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzExNDg5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy91YWNjZXNzLmgKQEAgLTAsMCArMSw4MzAgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDAzLCAwNCBieSBSYWxmIEJhZWNobGUKKyAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCisgKi8KKyNpZm5kZWYgX0FTTV9VQUNDRVNTX0gKKyNkZWZpbmUgX0FTTV9VQUNDRVNTX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvdGhyZWFkX2luZm8uaD4KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy91YWNjZXNzLmg+CisKKy8qCisgKiBUaGUgZnMgdmFsdWUgZGV0ZXJtaW5lcyB3aGV0aGVyIGFyZ3VtZW50IHZhbGlkaXR5IGNoZWNraW5nIHNob3VsZCBiZQorICogcGVyZm9ybWVkIG9yIG5vdC4gIElmIGdldF9mcygpID09IFVTRVJfRFMsIGNoZWNraW5nIGlzIHBlcmZvcm1lZCwgd2l0aAorICogZ2V0X2ZzKCkgPT0gS0VSTkVMX0RTLCBjaGVja2luZyBpcyBieXBhc3NlZC4KKyAqCisgKiBGb3IgaGlzdG9yaWNhbCByZWFzb25zLCB0aGVzZSBtYWNyb3MgYXJlIGdyb3NzbHkgbWlzbmFtZWQuCisgKi8KKyNpZmRlZiBDT05GSUdfTUlQUzMyCisKKyNkZWZpbmUgX19VQV9MSU1JVAkweDgwMDAwMDAwVUwKKworI2RlZmluZSBfX1VBX0FERFIJIi53b3JkIgorI2RlZmluZSBfX1VBX0xBCQkibGEiCisjZGVmaW5lIF9fVUFfQUREVQkiYWRkdSIKKyNkZWZpbmUgX19VQV90MAkJIiQ4IgorI2RlZmluZSBfX1VBX3QxCQkiJDkiCisKKyNlbmRpZiAvKiBDT05GSUdfTUlQUzMyICovCisKKyNpZmRlZiBDT05GSUdfTUlQUzY0CisKKyNkZWZpbmUgX19VQV9MSU1JVAkoLSBUQVNLX1NJWkUpCisKKyNkZWZpbmUgX19VQV9BRERSCSIuZHdvcmQiCisjZGVmaW5lIF9fVUFfTEEJCSJkbGEiCisjZGVmaW5lIF9fVUFfQUREVQkiZGFkZHUiCisjZGVmaW5lIF9fVUFfdDAJCSIkMTIiCisjZGVmaW5lIF9fVUFfdDEJCSIkMTMiCisKKyNlbmRpZiAvKiBDT05GSUdfTUlQUzY0ICovCisKKy8qCisgKiBVU0VSX0RTIGlzIGEgYml0bWFzayB0aGF0IGhhcyB0aGUgYml0cyBzZXQgdGhhdCBtYXkgbm90IGJlIHNldCBpbiBhIHZhbGlkCisgKiB1c2Vyc3BhY2UgYWRkcmVzcy4gIE5vdGUgdGhhdCB3ZSBsaW1pdCAzMi1iaXQgdXNlcnNwYWNlIHRvIDB4N2ZmZjgwMDAgYnV0CisgKiB0aGUgYXJpdGhtZXRpYyB3ZSdyZSBkb2luZyBvbmx5IHdvcmtzIGlmIHRoZSBsaW1pdCBpcyBhIHBvd2VyIG9mIHR3bywgc28KKyAqIHdlIHVzZSAweDgwMDAwMDAwIGhlcmUgb24gMzItYml0IGtlcm5lbHMuICBJZiBhIHByb2Nlc3MgcGFzc2VzIGFuIGludmFsaWQKKyAqIGFkZHJlc3MgaW4gdGhpcyByYW5nZSBpdCdzIHRoZSBwcm9jZXNzJ3MgcHJvYmxlbSwgbm90IG91cnMgOi0pCisgKi8KKworI2RlZmluZSBLRVJORUxfRFMJKChtbV9zZWdtZW50X3QpIHsgMFVMIH0pCisjZGVmaW5lIFVTRVJfRFMJCSgobW1fc2VnbWVudF90KSB7IF9fVUFfTElNSVQgfSkKKworI2RlZmluZSBWRVJJRllfUkVBRCAgICAwCisjZGVmaW5lIFZFUklGWV9XUklURSAgIDEKKworI2RlZmluZSBnZXRfZHMoKQkoS0VSTkVMX0RTKQorI2RlZmluZSBnZXRfZnMoKQkoY3VycmVudF90aHJlYWRfaW5mbygpLT5hZGRyX2xpbWl0KQorI2RlZmluZSBzZXRfZnMoeCkJKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+YWRkcl9saW1pdCA9ICh4KSkKKworI2RlZmluZSBzZWdtZW50X2VxKGEsYikJKChhKS5zZWcgPT0gKGIpLnNlZykKKworCisvKgorICogSXMgYSBhZGRyZXNzIHZhbGlkPyBUaGlzIGRvZXMgYSBzdHJhaWdoZm9yd2FyZCBjYWxjdWxhdGlvbiByYXRoZXIKKyAqIHRoYW4gdGVzdHMuCisgKgorICogQWRkcmVzcyB2YWxpZCBpZjoKKyAqICAtICJhZGRyIiBkb2Vzbid0IGhhdmUgYW55IGhpZ2gtYml0cyBzZXQKKyAqICAtIEFORCAic2l6ZSIgZG9lc24ndCBoYXZlIGFueSBoaWdoLWJpdHMgc2V0CisgKiAgLSBBTkQgImFkZHIrc2l6ZSIgZG9lc24ndCBoYXZlIGFueSBoaWdoLWJpdHMgc2V0CisgKiAgLSBPUiB3ZSBhcmUgaW4ga2VybmVsIG1vZGUuCisgKgorICogX191YV9zaXplKCkgaXMgYSB0cmljayB0byBhdm9pZCBydW50aW1lIGNoZWNraW5nIG9mIHBvc2l0aXZlIGNvbnN0YW50CisgKiBzaXplczsgZm9yIHRob3NlIHdlIGFscmVhZHkga25vdyBhdCBjb21waWxlIHRpbWUgdGhhdCB0aGUgc2l6ZSBpcyBvay4KKyAqLworI2RlZmluZSBfX3VhX3NpemUoc2l6ZSkJCQkJCQkJXAorCSgoX19idWlsdGluX2NvbnN0YW50X3Aoc2l6ZSkgJiYgKHNpZ25lZCBsb25nKSAoc2l6ZSkgPiAwKSA/IDAgOiAoc2l6ZSkpCisKKy8qCisgKiBhY2Nlc3Nfb2s6IC0gQ2hlY2tzIGlmIGEgdXNlciBzcGFjZSBwb2ludGVyIGlzIHZhbGlkCisgKiBAdHlwZTogVHlwZSBvZiBhY2Nlc3M6ICVWRVJJRllfUkVBRCBvciAlVkVSSUZZX1dSSVRFLiAgTm90ZSB0aGF0CisgKiAgICAgICAgJVZFUklGWV9XUklURSBpcyBhIHN1cGVyc2V0IG9mICVWRVJJRllfUkVBRCAtIGlmIGl0IGlzIHNhZmUKKyAqICAgICAgICB0byB3cml0ZSB0byBhIGJsb2NrLCBpdCBpcyBhbHdheXMgc2FmZSB0byByZWFkIGZyb20gaXQuCisgKiBAYWRkcjogVXNlciBzcGFjZSBwb2ludGVyIHRvIHN0YXJ0IG9mIGJsb2NrIHRvIGNoZWNrCisgKiBAc2l6ZTogU2l6ZSBvZiBibG9jayB0byBjaGVjaworICoKKyAqIENvbnRleHQ6IFVzZXIgY29udGV4dCBvbmx5LiAgVGhpcyBmdW5jdGlvbiBtYXkgc2xlZXAuCisgKgorICogQ2hlY2tzIGlmIGEgcG9pbnRlciB0byBhIGJsb2NrIG9mIG1lbW9yeSBpbiB1c2VyIHNwYWNlIGlzIHZhbGlkLgorICoKKyAqIFJldHVybnMgdHJ1ZSAobm9uemVybykgaWYgdGhlIG1lbW9yeSBibG9jayBtYXkgYmUgdmFsaWQsIGZhbHNlICh6ZXJvKQorICogaWYgaXQgaXMgZGVmaW5pdGVseSBpbnZhbGlkLgorICoKKyAqIE5vdGUgdGhhdCwgZGVwZW5kaW5nIG9uIGFyY2hpdGVjdHVyZSwgdGhpcyBmdW5jdGlvbiBwcm9iYWJseSBqdXN0CisgKiBjaGVja3MgdGhhdCB0aGUgcG9pbnRlciBpcyBpbiB0aGUgdXNlciBzcGFjZSByYW5nZSAtIGFmdGVyIGNhbGxpbmcKKyAqIHRoaXMgZnVuY3Rpb24sIG1lbW9yeSBhY2Nlc3MgZnVuY3Rpb25zIG1heSBzdGlsbCByZXR1cm4gLUVGQVVMVC4KKyAqLworCisjZGVmaW5lIF9fYWNjZXNzX21hc2sgZ2V0X2ZzKCkuc2VnCisKKyNkZWZpbmUgX19hY2Nlc3Nfb2soYWRkciwgc2l6ZSwgbWFzaykJCQkJCVwKKwkoKChzaWduZWQgbG9uZykoKG1hc2spICYgKChhZGRyKSB8ICgoYWRkcikgKyAoc2l6ZSkpIHwgX191YV9zaXplKHNpemUpKSkpID09IDApCisKKyNkZWZpbmUgYWNjZXNzX29rKHR5cGUsIGFkZHIsIHNpemUpCQkJCQlcCisJbGlrZWx5KF9fYWNjZXNzX29rKCh1bnNpZ25lZCBsb25nKShhZGRyKSwgKHNpemUpLF9fYWNjZXNzX21hc2spKQorCisvKgorICogdmVyaWZ5X2FyZWE6IC0gT2Jzb2xldGUvZGVwcmVjYXRlZCBhbmQgd2lsbCBnbyBhd2F5IHNvb24sCisgKiB1c2UgYWNjZXNzX29rKCkgaW5zdGVhZC4KKyAqIEB0eXBlOiBUeXBlIG9mIGFjY2VzczogJVZFUklGWV9SRUFEIG9yICVWRVJJRllfV1JJVEUKKyAqIEBhZGRyOiBVc2VyIHNwYWNlIHBvaW50ZXIgdG8gc3RhcnQgb2YgYmxvY2sgdG8gY2hlY2sKKyAqIEBzaXplOiBTaXplIG9mIGJsb2NrIHRvIGNoZWNrCisgKgorICogQ29udGV4dDogVXNlciBjb250ZXh0IG9ubHkuICBUaGlzIGZ1bmN0aW9uIG1heSBzbGVlcC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGhhcyBiZWVuIHJlcGxhY2VkIGJ5IGFjY2Vzc19vaygpLgorICoKKyAqIENoZWNrcyBpZiBhIHBvaW50ZXIgdG8gYSBibG9jayBvZiBtZW1vcnkgaW4gdXNlciBzcGFjZSBpcyB2YWxpZC4KKyAqCisgKiBSZXR1cm5zIHplcm8gaWYgdGhlIG1lbW9yeSBibG9jayBtYXkgYmUgdmFsaWQsIC1FRkFVTFQKKyAqIGlmIGl0IGlzIGRlZmluaXRlbHkgaW52YWxpZC4KKyAqCisgKiBTZWUgYWNjZXNzX29rKCkgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworc3RhdGljIGlubGluZSBpbnQgX19kZXByZWNhdGVkIHZlcmlmeV9hcmVhKGludCB0eXBlLCBjb25zdCB2b2lkICogYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXJldHVybiBhY2Nlc3Nfb2sodHlwZSwgYWRkciwgc2l6ZSkgPyAwIDogLUVGQVVMVDsKK30KKworLyoKKyAqIHB1dF91c2VyOiAtIFdyaXRlIGEgc2ltcGxlIHZhbHVlIGludG8gdXNlciBzcGFjZS4KKyAqIEB4OiAgIFZhbHVlIHRvIGNvcHkgdG8gdXNlciBzcGFjZS4KKyAqIEBwdHI6IERlc3RpbmF0aW9uIGFkZHJlc3MsIGluIHVzZXIgc3BhY2UuCisgKgorICogQ29udGV4dDogVXNlciBjb250ZXh0IG9ubHkuICBUaGlzIGZ1bmN0aW9uIG1heSBzbGVlcC4KKyAqCisgKiBUaGlzIG1hY3JvIGNvcGllcyBhIHNpbmdsZSBzaW1wbGUgdmFsdWUgZnJvbSBrZXJuZWwgc3BhY2UgdG8gdXNlcgorICogc3BhY2UuICBJdCBzdXBwb3J0cyBzaW1wbGUgdHlwZXMgbGlrZSBjaGFyIGFuZCBpbnQsIGJ1dCBub3QgbGFyZ2VyCisgKiBkYXRhIHR5cGVzIGxpa2Ugc3RydWN0dXJlcyBvciBhcnJheXMuCisgKgorICogQHB0ciBtdXN0IGhhdmUgcG9pbnRlci10by1zaW1wbGUtdmFyaWFibGUgdHlwZSwgYW5kIEB4IG11c3QgYmUgYXNzaWduYWJsZQorICogdG8gdGhlIHJlc3VsdCBvZiBkZXJlZmVyZW5jaW5nIEBwdHIuCisgKgorICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIG9yIC1FRkFVTFQgb24gZXJyb3IuCisgKi8KKyNkZWZpbmUgcHV0X3VzZXIoeCxwdHIpCVwKKwlfX3B1dF91c2VyX2NoZWNrKCh4KSwocHRyKSxzaXplb2YoKihwdHIpKSkKKworLyoKKyAqIGdldF91c2VyOiAtIEdldCBhIHNpbXBsZSB2YXJpYWJsZSBmcm9tIHVzZXIgc3BhY2UuCisgKiBAeDogICBWYXJpYWJsZSB0byBzdG9yZSByZXN1bHQuCisgKiBAcHRyOiBTb3VyY2UgYWRkcmVzcywgaW4gdXNlciBzcGFjZS4KKyAqCisgKiBDb250ZXh0OiBVc2VyIGNvbnRleHQgb25seS4gIFRoaXMgZnVuY3Rpb24gbWF5IHNsZWVwLgorICoKKyAqIFRoaXMgbWFjcm8gY29waWVzIGEgc2luZ2xlIHNpbXBsZSB2YXJpYWJsZSBmcm9tIHVzZXIgc3BhY2UgdG8ga2VybmVsCisgKiBzcGFjZS4gIEl0IHN1cHBvcnRzIHNpbXBsZSB0eXBlcyBsaWtlIGNoYXIgYW5kIGludCwgYnV0IG5vdCBsYXJnZXIKKyAqIGRhdGEgdHlwZXMgbGlrZSBzdHJ1Y3R1cmVzIG9yIGFycmF5cy4KKyAqCisgKiBAcHRyIG11c3QgaGF2ZSBwb2ludGVyLXRvLXNpbXBsZS12YXJpYWJsZSB0eXBlLCBhbmQgdGhlIHJlc3VsdCBvZgorICogZGVyZWZlcmVuY2luZyBAcHRyIG11c3QgYmUgYXNzaWduYWJsZSB0byBAeCB3aXRob3V0IGEgY2FzdC4KKyAqCisgKiBSZXR1cm5zIHplcm8gb24gc3VjY2Vzcywgb3IgLUVGQVVMVCBvbiBlcnJvci4KKyAqIE9uIGVycm9yLCB0aGUgdmFyaWFibGUgQHggaXMgc2V0IHRvIHplcm8uCisgKi8KKyNkZWZpbmUgZ2V0X3VzZXIoeCxwdHIpIFwKKwlfX2dldF91c2VyX2NoZWNrKCh4KSwocHRyKSxzaXplb2YoKihwdHIpKSkKKworLyoKKyAqIF9fcHV0X3VzZXI6IC0gV3JpdGUgYSBzaW1wbGUgdmFsdWUgaW50byB1c2VyIHNwYWNlLCB3aXRoIGxlc3MgY2hlY2tpbmcuCisgKiBAeDogICBWYWx1ZSB0byBjb3B5IHRvIHVzZXIgc3BhY2UuCisgKiBAcHRyOiBEZXN0aW5hdGlvbiBhZGRyZXNzLCBpbiB1c2VyIHNwYWNlLgorICoKKyAqIENvbnRleHQ6IFVzZXIgY29udGV4dCBvbmx5LiAgVGhpcyBmdW5jdGlvbiBtYXkgc2xlZXAuCisgKgorICogVGhpcyBtYWNybyBjb3BpZXMgYSBzaW5nbGUgc2ltcGxlIHZhbHVlIGZyb20ga2VybmVsIHNwYWNlIHRvIHVzZXIKKyAqIHNwYWNlLiAgSXQgc3VwcG9ydHMgc2ltcGxlIHR5cGVzIGxpa2UgY2hhciBhbmQgaW50LCBidXQgbm90IGxhcmdlcgorICogZGF0YSB0eXBlcyBsaWtlIHN0cnVjdHVyZXMgb3IgYXJyYXlzLgorICoKKyAqIEBwdHIgbXVzdCBoYXZlIHBvaW50ZXItdG8tc2ltcGxlLXZhcmlhYmxlIHR5cGUsIGFuZCBAeCBtdXN0IGJlIGFzc2lnbmFibGUKKyAqIHRvIHRoZSByZXN1bHQgb2YgZGVyZWZlcmVuY2luZyBAcHRyLgorICoKKyAqIENhbGxlciBtdXN0IGNoZWNrIHRoZSBwb2ludGVyIHdpdGggYWNjZXNzX29rKCkgYmVmb3JlIGNhbGxpbmcgdGhpcworICogZnVuY3Rpb24uCisgKgorICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIG9yIC1FRkFVTFQgb24gZXJyb3IuCisgKi8KKyNkZWZpbmUgX19wdXRfdXNlcih4LHB0cikgXAorCV9fcHV0X3VzZXJfbm9jaGVjaygoeCksKHB0ciksc2l6ZW9mKCoocHRyKSkpCisKKy8qCisgKiBfX2dldF91c2VyOiAtIEdldCBhIHNpbXBsZSB2YXJpYWJsZSBmcm9tIHVzZXIgc3BhY2UsIHdpdGggbGVzcyBjaGVja2luZy4KKyAqIEB4OiAgIFZhcmlhYmxlIHRvIHN0b3JlIHJlc3VsdC4KKyAqIEBwdHI6IFNvdXJjZSBhZGRyZXNzLCBpbiB1c2VyIHNwYWNlLgorICoKKyAqIENvbnRleHQ6IFVzZXIgY29udGV4dCBvbmx5LiAgVGhpcyBmdW5jdGlvbiBtYXkgc2xlZXAuCisgKgorICogVGhpcyBtYWNybyBjb3BpZXMgYSBzaW5nbGUgc2ltcGxlIHZhcmlhYmxlIGZyb20gdXNlciBzcGFjZSB0byBrZXJuZWwKKyAqIHNwYWNlLiAgSXQgc3VwcG9ydHMgc2ltcGxlIHR5cGVzIGxpa2UgY2hhciBhbmQgaW50LCBidXQgbm90IGxhcmdlcgorICogZGF0YSB0eXBlcyBsaWtlIHN0cnVjdHVyZXMgb3IgYXJyYXlzLgorICoKKyAqIEBwdHIgbXVzdCBoYXZlIHBvaW50ZXItdG8tc2ltcGxlLXZhcmlhYmxlIHR5cGUsIGFuZCB0aGUgcmVzdWx0IG9mCisgKiBkZXJlZmVyZW5jaW5nIEBwdHIgbXVzdCBiZSBhc3NpZ25hYmxlIHRvIEB4IHdpdGhvdXQgYSBjYXN0LgorICoKKyAqIENhbGxlciBtdXN0IGNoZWNrIHRoZSBwb2ludGVyIHdpdGggYWNjZXNzX29rKCkgYmVmb3JlIGNhbGxpbmcgdGhpcworICogZnVuY3Rpb24uCisgKgorICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIG9yIC1FRkFVTFQgb24gZXJyb3IuCisgKiBPbiBlcnJvciwgdGhlIHZhcmlhYmxlIEB4IGlzIHNldCB0byB6ZXJvLgorICovCisjZGVmaW5lIF9fZ2V0X3VzZXIoeCxwdHIpIFwKKwlfX2dldF91c2VyX25vY2hlY2soKHgpLChwdHIpLHNpemVvZigqKHB0cikpKQorCitzdHJ1Y3QgX19sYXJnZV9zdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIGJ1ZlsxMDBdOyB9OworI2RlZmluZSBfX20oeCkgKCooc3RydWN0IF9fbGFyZ2Vfc3RydWN0ICopKHgpKQorCisvKgorICogWXVjay4gIFdlIG5lZWQgdHdvIHZhcmlhbnRzLCBvbmUgZm9yIDY0Yml0IG9wZXJhdGlvbiBhbmQgb25lCisgKiBmb3IgMzIgYml0IG1vZGUgYW5kIG9sZCBpcm9uLgorICovCisjaWZkZWYgX19taXBzNjQKKyNkZWZpbmUgX19HRVRfVVNFUl9EVyhfX2d1X2VycikgX19nZXRfdXNlcl9hc20oImxkIiwgX19ndV9lcnIpCisjZWxzZQorI2RlZmluZSBfX0dFVF9VU0VSX0RXKF9fZ3VfZXJyKSBfX2dldF91c2VyX2FzbV9sbDMyKF9fZ3VfZXJyKQorI2VuZGlmCisKKyNkZWZpbmUgX19nZXRfdXNlcl9ub2NoZWNrKHgscHRyLHNpemUpCQkJCQlcCisoewkJCQkJCQkJCVwKKwlfX3R5cGVvZigqKHB0cikpIF9fZ3VfdmFsID0gMDsJCQkJCVwKKwlsb25nIF9fZ3VfYWRkcjsJCQkJCQkJXAorCWxvbmcgX19ndV9lcnIgPSAwOwkJCQkJCVwKKwkJCQkJCQkJCVwKKwltaWdodF9zbGVlcCgpOwkJCQkJCQlcCisJX19ndV9hZGRyID0gKGxvbmcpIChwdHIpOwkJCQkJXAorCXN3aXRjaCAoc2l6ZSkgewkJCQkJCQlcCisJY2FzZSAxOiBfX2dldF91c2VyX2FzbSgibGIiLCBfX2d1X2Vycik7IGJyZWFrOwkJCVwKKwljYXNlIDI6IF9fZ2V0X3VzZXJfYXNtKCJsaCIsIF9fZ3VfZXJyKTsgYnJlYWs7CQkJXAorCWNhc2UgNDogX19nZXRfdXNlcl9hc20oImx3IiwgX19ndV9lcnIpOyBicmVhazsJCQlcCisJY2FzZSA4OiBfX0dFVF9VU0VSX0RXKF9fZ3VfZXJyKTsgYnJlYWs7CQkJCVwKKwlkZWZhdWx0OiBfX2dldF91c2VyX3Vua25vd24oKTsgYnJlYWs7CQkJCVwKKwl9CQkJCQkJCQlcCisJeCA9IChfX3R5cGVvZl9fKCoocHRyKSkpIF9fZ3VfdmFsOwkJCQlcCisJX19ndV9lcnI7CQkJCQkJCVwKK30pCisKKyNkZWZpbmUgX19nZXRfdXNlcl9jaGVjayh4LHB0cixzaXplKQkJCQkJXAorKHsJCQkJCQkJCQlcCisJX190eXBlb2ZfXygqKHB0cikpIF9fZ3VfdmFsID0gMDsJCQkJXAorCWxvbmcgX19ndV9hZGRyOwkJCQkJCQlcCisJbG9uZyBfX2d1X2VycjsJCQkJCQkJXAorCQkJCQkJCQkJXAorCW1pZ2h0X3NsZWVwKCk7CQkJCQkJCVwKKwlfX2d1X2FkZHIgPSAobG9uZykgKHB0cik7CQkJCQlcCisJX19ndV9lcnIgPSBhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsICh2b2lkICopIF9fZ3VfYWRkciwgc2l6ZSkJXAorCQkJCT8gMCA6IC1FRkFVTFQ7CQkJCVwKKwkJCQkJCQkJCVwKKwlpZiAobGlrZWx5KCFfX2d1X2VycikpIHsJCQkJCVwKKwkJc3dpdGNoIChzaXplKSB7CQkJCQkJXAorCQljYXNlIDE6IF9fZ2V0X3VzZXJfYXNtKCJsYiIsIF9fZ3VfZXJyKTsgYnJlYWs7CQlcCisJCWNhc2UgMjogX19nZXRfdXNlcl9hc20oImxoIiwgX19ndV9lcnIpOyBicmVhazsJCVwKKwkJY2FzZSA0OiBfX2dldF91c2VyX2FzbSgibHciLCBfX2d1X2Vycik7IGJyZWFrOwkJXAorCQljYXNlIDg6IF9fR0VUX1VTRVJfRFcoX19ndV9lcnIpOyBicmVhazsJCQlcCisJCWRlZmF1bHQ6IF9fZ2V0X3VzZXJfdW5rbm93bigpOyBicmVhazsJCQlcCisJCX0JCQkJCQkJXAorCX0JCQkJCQkJCVwKKwl4ID0gKF9fdHlwZW9mX18oKihwdHIpKSkgX19ndV92YWw7CQkJCVwKKwlfX2d1X2VycjsJCQkJCQkJXAorfSkKKworI2RlZmluZSBfX2dldF91c2VyX2FzbShpbnNuLF9fZ3VfZXJyKQkJCQkJXAorKHsJCQkJCQkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAorCSIxOgkiIGluc24gIgklMSwgJTMJCQkJXG4iCVwKKwkiMjoJCQkJCQkJXG4iCVwKKwkiCS5zZWN0aW9uIC5maXh1cCxcImF4XCIJCQkJXG4iCVwKKwkiMzoJbGkJJTAsICU0CQkJCQlcbiIJXAorCSIJagkyYgkJCQkJXG4iCVwKKwkiCS5wcmV2aW91cwkJCQkJXG4iCVwKKwkiCS5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCIJCQlcbiIJXAorCSIJIl9fVUFfQUREUiAiXHQxYiwgM2IJCQkJXG4iCVwKKwkiCS5wcmV2aW91cwkJCQkJXG4iCVwKKwk6ICI9ciIgKF9fZ3VfZXJyKSwgIj1yIiAoX19ndV92YWwpCQkJCVwKKwk6ICIwIiAoX19ndV9lcnIpLCAibyIgKF9fbShfX2d1X2FkZHIpKSwgImkiICgtRUZBVUxUKSk7CQlcCit9KQorCisvKgorICogR2V0IGEgbG9uZyBsb25nIDY0IHVzaW5nIDMyIGJpdCByZWdpc3RlcnMuCisgKi8KKyNkZWZpbmUgX19nZXRfdXNlcl9hc21fbGwzMihfX2d1X2VycikJCQkJCVwKKyh7CQkJCQkJCQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCVwKKwkiMToJbHcJJTEsICUzCQkJCQlcbiIJXAorCSIyOglsdwklRDEsICU0CQkJCQlcbiIJXAorCSIJbW92ZQklMCwgJDAJCQkJCVxuIglcCisJIjM6CS5zZWN0aW9uCS5maXh1cCxcImF4XCIJCQlcbiIJXAorCSI0OglsaQklMCwgJTUJCQkJCVxuIglcCisJIgltb3ZlCSUxLCAkMAkJCQkJXG4iCVwKKwkiCW1vdmUJJUQxLCAkMAkJCQkJXG4iCVwKKwkiCWoJM2IJCQkJCVxuIglcCisJIgkucHJldmlvdXMJCQkJCVxuIglcCisJIgkuc2VjdGlvbglfX2V4X3RhYmxlLFwiYVwiCQlcbiIJXAorCSIJIiBfX1VBX0FERFIgIgkxYiwgNGIJCQkJXG4iCVwKKwkiCSIgX19VQV9BRERSICIJMmIsIDRiCQkJCVxuIglcCisJIgkucHJldmlvdXMJCQkJCVxuIglcCisJOiAiPXIiIChfX2d1X2VyciksICI9JnIiIChfX2d1X3ZhbCkJCQkJXAorCTogIjAiIChfX2d1X2VyciksICJvIiAoX19tKF9fZ3VfYWRkcikpLAkJCQlcCisJICAibyIgKF9fbShfX2d1X2FkZHIgKyA0KSksICJpIiAoLUVGQVVMVCkpOwkJCVwKK30pCisKK2V4dGVybiB2b2lkIF9fZ2V0X3VzZXJfdW5rbm93bih2b2lkKTsKKworLyoKKyAqIFl1Y2suICBXZSBuZWVkIHR3byB2YXJpYW50cywgb25lIGZvciA2NGJpdCBvcGVyYXRpb24gYW5kIG9uZQorICogZm9yIDMyIGJpdCBtb2RlIGFuZCBvbGQgaXJvbi4KKyAqLworI2lmZGVmIF9fbWlwczY0CisjZGVmaW5lIF9fUFVUX1VTRVJfRFcoX19wdV92YWwpIF9fcHV0X3VzZXJfYXNtKCJzZCIsIF9fcHVfdmFsKQorI2Vsc2UKKyNkZWZpbmUgX19QVVRfVVNFUl9EVyhfX3B1X3ZhbCkgX19wdXRfdXNlcl9hc21fbGwzMihfX3B1X3ZhbCkKKyNlbmRpZgorCisjZGVmaW5lIF9fcHV0X3VzZXJfbm9jaGVjayh4LHB0cixzaXplKQkJCQkJXAorKHsJCQkJCQkJCQlcCisJX190eXBlb2ZfXygqKHB0cikpIF9fcHVfdmFsOwkJCQkJXAorCWxvbmcgX19wdV9hZGRyOwkJCQkJCQlcCisJbG9uZyBfX3B1X2VyciA9IDA7CQkJCQkJXAorCQkJCQkJCQkJXAorCW1pZ2h0X3NsZWVwKCk7CQkJCQkJCVwKKwlfX3B1X3ZhbCA9ICh4KTsJCQkJCQkJXAorCV9fcHVfYWRkciA9IChsb25nKSAocHRyKTsJCQkJCVwKKwlzd2l0Y2ggKHNpemUpIHsJCQkJCQkJXAorCWNhc2UgMTogX19wdXRfdXNlcl9hc20oInNiIiwgX19wdV92YWwpOyBicmVhazsJCQlcCisJY2FzZSAyOiBfX3B1dF91c2VyX2FzbSgic2giLCBfX3B1X3ZhbCk7IGJyZWFrOwkJCVwKKwljYXNlIDQ6IF9fcHV0X3VzZXJfYXNtKCJzdyIsIF9fcHVfdmFsKTsgYnJlYWs7CQkJXAorCWNhc2UgODogX19QVVRfVVNFUl9EVyhfX3B1X3ZhbCk7IGJyZWFrOwkJCQlcCisJZGVmYXVsdDogX19wdXRfdXNlcl91bmtub3duKCk7IGJyZWFrOwkJCQlcCisJfQkJCQkJCQkJXAorCV9fcHVfZXJyOwkJCQkJCQlcCit9KQorCisjZGVmaW5lIF9fcHV0X3VzZXJfY2hlY2soeCxwdHIsc2l6ZSkJCQkJCVwKKyh7CQkJCQkJCQkJXAorCV9fdHlwZW9mX18oKihwdHIpKSBfX3B1X3ZhbDsJCQkJCVwKKwlsb25nIF9fcHVfYWRkcjsJCQkJCQkJXAorCWxvbmcgX19wdV9lcnI7CQkJCQkJCVwKKwkJCQkJCQkJCVwKKwltaWdodF9zbGVlcCgpOwkJCQkJCQlcCisJX19wdV92YWwgPSAoeCk7CQkJCQkJCVwKKwlfX3B1X2FkZHIgPSAobG9uZykgKHB0cik7CQkJCQlcCisJX19wdV9lcnIgPSBhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCAodm9pZCAqKSBfX3B1X2FkZHIsIHNpemUpCVwKKwkJCQk/IDAgOiAtRUZBVUxUOwkJCQlcCisJCQkJCQkJCQlcCisJaWYgKGxpa2VseSghX19wdV9lcnIpKSB7CQkJCQlcCisJCXN3aXRjaCAoc2l6ZSkgewkJCQkJCVwKKwkJY2FzZSAxOiBfX3B1dF91c2VyX2FzbSgic2IiLCBfX3B1X3ZhbCk7IGJyZWFrOwkJXAorCQljYXNlIDI6IF9fcHV0X3VzZXJfYXNtKCJzaCIsIF9fcHVfdmFsKTsgYnJlYWs7CQlcCisJCWNhc2UgNDogX19wdXRfdXNlcl9hc20oInN3IiwgX19wdV92YWwpOyBicmVhazsJCVwKKwkJY2FzZSA4OiBfX1BVVF9VU0VSX0RXKF9fcHVfdmFsKTsgYnJlYWs7CQkJXAorCQlkZWZhdWx0OiBfX3B1dF91c2VyX3Vua25vd24oKTsgYnJlYWs7CQkJXAorCQl9CQkJCQkJCVwKKwl9CQkJCQkJCQlcCisJX19wdV9lcnI7CQkJCQkJCVwKK30pCisKKyNkZWZpbmUgX19wdXRfdXNlcl9hc20oaW5zbiwgX19wdV92YWwpCQkJCQlcCisoewkJCQkJCQkJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQlcCisJIjE6CSIgaW5zbiAiCSV6MiwgJTMJCSMgX19wdXRfdXNlcl9hc21cbiIJXAorCSIyOgkJCQkJCQlcbiIJXAorCSIJLnNlY3Rpb24JLmZpeHVwLFwiYXhcIgkJCVxuIglcCisJIjM6CWxpCSUwLCAlNAkJCQkJXG4iCVwKKwkiCWoJMmIJCQkJCVxuIglcCisJIgkucHJldmlvdXMJCQkJCVxuIglcCisJIgkuc2VjdGlvbglfX2V4X3RhYmxlLFwiYVwiCQlcbiIJXAorCSIJIiBfX1VBX0FERFIgIgkxYiwgM2IJCQkJXG4iCVwKKwkiCS5wcmV2aW91cwkJCQkJXG4iCVwKKwk6ICI9ciIgKF9fcHVfZXJyKQkJCQkJCVwKKwk6ICIwIiAoX19wdV9lcnIpLCAiSnIiIChfX3B1X3ZhbCksICJvIiAoX19tKF9fcHVfYWRkcikpLAlcCisJICAiaSIgKC1FRkFVTFQpKTsJCQkJCQlcCit9KQorCisjZGVmaW5lIF9fcHV0X3VzZXJfYXNtX2xsMzIoX19wdV92YWwpCQkJCQlcCisoewkJCQkJCQkJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQlcCisJIjE6CXN3CSUyLCAlMwkJIyBfX3B1dF91c2VyX2FzbV9sbDMyCVxuIglcCisJIjI6CXN3CSVEMiwgJTQJCQkJCVxuIglcCisJIjM6CQkJCQkJCVxuIglcCisJIgkuc2VjdGlvbgkuZml4dXAsXCJheFwiCQkJXG4iCVwKKwkiNDoJbGkJJTAsICU1CQkJCQlcbiIJXAorCSIJagkzYgkJCQkJXG4iCVwKKwkiCS5wcmV2aW91cwkJCQkJXG4iCVwKKwkiCS5zZWN0aW9uCV9fZXhfdGFibGUsXCJhXCIJCVxuIglcCisJIgkiIF9fVUFfQUREUiAiCTFiLCA0YgkJCQlcbiIJXAorCSIJIiBfX1VBX0FERFIgIgkyYiwgNGIJCQkJXG4iCVwKKwkiCS5wcmV2aW91cyIJCQkJCQlcCisJOiAiPXIiIChfX3B1X2VycikJCQkJCQlcCisJOiAiMCIgKF9fcHVfZXJyKSwgInIiIChfX3B1X3ZhbCksICJvIiAoX19tKF9fcHVfYWRkcikpLAkJXAorCSAgIm8iIChfX20oX19wdV9hZGRyICsgNCkpLCAiaSIgKC1FRkFVTFQpKTsJCQlcCit9KQorCitleHRlcm4gdm9pZCBfX3B1dF91c2VyX3Vua25vd24odm9pZCk7CisKKy8qCisgKiBXZSdyZSBnZW5lcmF0aW5nIGp1bXAgdG8gc3Vicm91dGluZXMgd2hpY2ggd2lsbCBiZSBvdXRzaWRlIHRoZSByYW5nZSBvZgorICoganVtcCBpbnN0cnVjdGlvbnMKKyAqLworI2lmZGVmIE1PRFVMRQorI2RlZmluZSBfX01PRFVMRV9KQUwoZGVzdGluYXRpb24pCQkJCQlcCisJIi5zZXRcdG5vYXRcblx0IgkJCQkJCVwKKwlfX1VBX0xBICJcdCQxLCAiICNkZXN0aW5hdGlvbiAiXG5cdCIgCQkJCVwKKwkiamFsclx0JDFcblx0IgkJCQkJCQlcCisJIi5zZXRcdGF0XG5cdCIKKyNlbHNlCisjZGVmaW5lIF9fTU9EVUxFX0pBTChkZXN0aW5hdGlvbikJCQkJCVwKKwkiamFsXHQiICNkZXN0aW5hdGlvbiAiXG5cdCIKKyNlbmRpZgorCitleHRlcm4gc2l6ZV90IF9fY29weV91c2VyKHZvaWQgKl9fdG8sIGNvbnN0IHZvaWQgKl9fZnJvbSwgc2l6ZV90IF9fbik7CisKKyNkZWZpbmUgX19pbnZva2VfY29weV90b191c2VyKHRvLGZyb20sbikJCQkJXAorKHsJCQkJCQkJCQlcCisJcmVnaXN0ZXIgdm9pZCAqX19jdV90b19yIF9fYXNtX18gKCIkNCIpOwkJCVwKKwlyZWdpc3RlciBjb25zdCB2b2lkICpfX2N1X2Zyb21fciBfX2FzbV9fICgiJDUiKTsJCVwKKwlyZWdpc3RlciBsb25nIF9fY3VfbGVuX3IgX19hc21fXyAoIiQ2Iik7CQkJXAorCQkJCQkJCQkJXAorCV9fY3VfdG9fciA9ICh0byk7CQkJCQkJXAorCV9fY3VfZnJvbV9yID0gKGZyb20pOwkJCQkJCVwKKwlfX2N1X2xlbl9yID0gKG4pOwkJCQkJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQlcCisJX19NT0RVTEVfSkFMKF9fY29weV91c2VyKQkJCQkJXAorCTogIityIiAoX19jdV90b19yKSwgIityIiAoX19jdV9mcm9tX3IpLCAiK3IiIChfX2N1X2xlbl9yKQlcCisJOgkJCQkJCQkJXAorCTogIiQ4IiwgIiQ5IiwgIiQxMCIsICIkMTEiLCAiJDEyIiwgIiQxNSIsICIkMjQiLCAiJDMxIiwJCVwKKwkgICJtZW1vcnkiKTsJCQkJCQkJXAorCV9fY3VfbGVuX3I7CQkJCQkJCVwKK30pCisKKy8qCisgKiBfX2NvcHlfdG9fdXNlcjogLSBDb3B5IGEgYmxvY2sgb2YgZGF0YSBpbnRvIHVzZXIgc3BhY2UsIHdpdGggbGVzcyBjaGVja2luZy4KKyAqIEB0bzogICBEZXN0aW5hdGlvbiBhZGRyZXNzLCBpbiB1c2VyIHNwYWNlLgorICogQGZyb206IFNvdXJjZSBhZGRyZXNzLCBpbiBrZXJuZWwgc3BhY2UuCisgKiBAbjogICAgTnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkuCisgKgorICogQ29udGV4dDogVXNlciBjb250ZXh0IG9ubHkuICBUaGlzIGZ1bmN0aW9uIG1heSBzbGVlcC4KKyAqCisgKiBDb3B5IGRhdGEgZnJvbSBrZXJuZWwgc3BhY2UgdG8gdXNlciBzcGFjZS4gIENhbGxlciBtdXN0IGNoZWNrCisgKiB0aGUgc3BlY2lmaWVkIGJsb2NrIHdpdGggYWNjZXNzX29rKCkgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKyAqCisgKiBSZXR1cm5zIG51bWJlciBvZiBieXRlcyB0aGF0IGNvdWxkIG5vdCBiZSBjb3BpZWQuCisgKiBPbiBzdWNjZXNzLCB0aGlzIHdpbGwgYmUgemVyby4KKyAqLworI2RlZmluZSBfX2NvcHlfdG9fdXNlcih0byxmcm9tLG4pCQkJCQlcCisoewkJCQkJCQkJCVwKKwl2b2lkICpfX2N1X3RvOwkJCQkJCQlcCisJY29uc3Qgdm9pZCAqX19jdV9mcm9tOwkJCQkJCVwKKwlsb25nIF9fY3VfbGVuOwkJCQkJCQlcCisJCQkJCQkJCQlcCisJbWlnaHRfc2xlZXAoKTsJCQkJCQkJXAorCV9fY3VfdG8gPSAodG8pOwkJCQkJCQlcCisJX19jdV9mcm9tID0gKGZyb20pOwkJCQkJCVwKKwlfX2N1X2xlbiA9IChuKTsJCQkJCQkJXAorCV9fY3VfbGVuID0gX19pbnZva2VfY29weV90b191c2VyKF9fY3VfdG8sIF9fY3VfZnJvbSwgX19jdV9sZW4pOwlcCisJX19jdV9sZW47CQkJCQkJCVwKK30pCisKKyNkZWZpbmUgX19jb3B5X3RvX3VzZXJfaW5hdG9taWMgX19jb3B5X3RvX3VzZXIKKyNkZWZpbmUgX19jb3B5X2Zyb21fdXNlcl9pbmF0b21pYyBfX2NvcHlfZnJvbV91c2VyCisKKy8qCisgKiBjb3B5X3RvX3VzZXI6IC0gQ29weSBhIGJsb2NrIG9mIGRhdGEgaW50byB1c2VyIHNwYWNlLgorICogQHRvOiAgIERlc3RpbmF0aW9uIGFkZHJlc3MsIGluIHVzZXIgc3BhY2UuCisgKiBAZnJvbTogU291cmNlIGFkZHJlc3MsIGluIGtlcm5lbCBzcGFjZS4KKyAqIEBuOiAgICBOdW1iZXIgb2YgYnl0ZXMgdG8gY29weS4KKyAqCisgKiBDb250ZXh0OiBVc2VyIGNvbnRleHQgb25seS4gIFRoaXMgZnVuY3Rpb24gbWF5IHNsZWVwLgorICoKKyAqIENvcHkgZGF0YSBmcm9tIGtlcm5lbCBzcGFjZSB0byB1c2VyIHNwYWNlLgorICoKKyAqIFJldHVybnMgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgY291bGQgbm90IGJlIGNvcGllZC4KKyAqIE9uIHN1Y2Nlc3MsIHRoaXMgd2lsbCBiZSB6ZXJvLgorICovCisjZGVmaW5lIGNvcHlfdG9fdXNlcih0byxmcm9tLG4pCQkJCQkJXAorKHsJCQkJCQkJCQlcCisJdm9pZCAqX19jdV90bzsJCQkJCQkJXAorCWNvbnN0IHZvaWQgKl9fY3VfZnJvbTsJCQkJCQlcCisJbG9uZyBfX2N1X2xlbjsJCQkJCQkJXAorCQkJCQkJCQkJXAorCW1pZ2h0X3NsZWVwKCk7CQkJCQkJCVwKKwlfX2N1X3RvID0gKHRvKTsJCQkJCQkJXAorCV9fY3VfZnJvbSA9IChmcm9tKTsJCQkJCQlcCisJX19jdV9sZW4gPSAobik7CQkJCQkJCVwKKwlpZiAoYWNjZXNzX29rKFZFUklGWV9XUklURSwgX19jdV90bywgX19jdV9sZW4pKQkJCVwKKwkJX19jdV9sZW4gPSBfX2ludm9rZV9jb3B5X3RvX3VzZXIoX19jdV90bywgX19jdV9mcm9tLAlcCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY3VfbGVuKTsJCVwKKwlfX2N1X2xlbjsJCQkJCQkJXAorfSkKKworI2RlZmluZSBfX2ludm9rZV9jb3B5X2Zyb21fdXNlcih0byxmcm9tLG4pCQkJCVwKKyh7CQkJCQkJCQkJXAorCXJlZ2lzdGVyIHZvaWQgKl9fY3VfdG9fciBfX2FzbV9fICgiJDQiKTsJCQlcCisJcmVnaXN0ZXIgY29uc3Qgdm9pZCAqX19jdV9mcm9tX3IgX19hc21fXyAoIiQ1Iik7CQlcCisJcmVnaXN0ZXIgbG9uZyBfX2N1X2xlbl9yIF9fYXNtX18gKCIkNiIpOwkJCVwKKwkJCQkJCQkJCVwKKwlfX2N1X3RvX3IgPSAodG8pOwkJCQkJCVwKKwlfX2N1X2Zyb21fciA9IChmcm9tKTsJCQkJCQlcCisJX19jdV9sZW5fciA9IChuKTsJCQkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAorCSIuc2V0XHRub3Jlb3JkZXJcblx0IgkJCQkJCVwKKwlfX01PRFVMRV9KQUwoX19jb3B5X3VzZXIpCQkJCQlcCisJIi5zZXRcdG5vYXRcblx0IgkJCQkJCVwKKwlfX1VBX0FERFUgIlx0JDEsICUxLCAlMlxuXHQiCQkJCQlcCisJIi5zZXRcdGF0XG5cdCIJCQkJCQkJXAorCSIuc2V0XHRyZW9yZGVyIgkJCQkJCQlcCisJOiAiK3IiIChfX2N1X3RvX3IpLCAiK3IiIChfX2N1X2Zyb21fciksICIrciIgKF9fY3VfbGVuX3IpCVwKKwk6CQkJCQkJCQlcCisJOiAiJDgiLCAiJDkiLCAiJDEwIiwgIiQxMSIsICIkMTIiLCAiJDE1IiwgIiQyNCIsICIkMzEiLAkJXAorCSAgIm1lbW9yeSIpOwkJCQkJCQlcCisJX19jdV9sZW5fcjsJCQkJCQkJXAorfSkKKworLyoKKyAqIF9fY29weV9mcm9tX3VzZXI6IC0gQ29weSBhIGJsb2NrIG9mIGRhdGEgZnJvbSB1c2VyIHNwYWNlLCB3aXRoIGxlc3MgY2hlY2tpbmcuICogQHRvOiAgIERlc3RpbmF0aW9uIGFkZHJlc3MsIGluIGtlcm5lbCBzcGFjZS4KKyAqIEBmcm9tOiBTb3VyY2UgYWRkcmVzcywgaW4gdXNlciBzcGFjZS4KKyAqIEBuOiAgICBOdW1iZXIgb2YgYnl0ZXMgdG8gY29weS4KKyAqCisgKiBDb250ZXh0OiBVc2VyIGNvbnRleHQgb25seS4gIFRoaXMgZnVuY3Rpb24gbWF5IHNsZWVwLgorICoKKyAqIENvcHkgZGF0YSBmcm9tIHVzZXIgc3BhY2UgdG8ga2VybmVsIHNwYWNlLiAgQ2FsbGVyIG11c3QgY2hlY2sKKyAqIHRoZSBzcGVjaWZpZWQgYmxvY2sgd2l0aCBhY2Nlc3Nfb2soKSBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorICoKKyAqIFJldHVybnMgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgY291bGQgbm90IGJlIGNvcGllZC4KKyAqIE9uIHN1Y2Nlc3MsIHRoaXMgd2lsbCBiZSB6ZXJvLgorICoKKyAqIElmIHNvbWUgZGF0YSBjb3VsZCBub3QgYmUgY29waWVkLCB0aGlzIGZ1bmN0aW9uIHdpbGwgcGFkIHRoZSBjb3BpZWQKKyAqIGRhdGEgdG8gdGhlIHJlcXVlc3RlZCBzaXplIHVzaW5nIHplcm8gYnl0ZXMuCisgKi8KKyNkZWZpbmUgX19jb3B5X2Zyb21fdXNlcih0byxmcm9tLG4pCQkJCQlcCisoewkJCQkJCQkJCVwKKwl2b2lkICpfX2N1X3RvOwkJCQkJCQlcCisJY29uc3Qgdm9pZCAqX19jdV9mcm9tOwkJCQkJCVwKKwlsb25nIF9fY3VfbGVuOwkJCQkJCQlcCisJCQkJCQkJCQlcCisJbWlnaHRfc2xlZXAoKTsJCQkJCQkJXAorCV9fY3VfdG8gPSAodG8pOwkJCQkJCQlcCisJX19jdV9mcm9tID0gKGZyb20pOwkJCQkJCVwKKwlfX2N1X2xlbiA9IChuKTsJCQkJCQkJXAorCV9fY3VfbGVuID0gX19pbnZva2VfY29weV9mcm9tX3VzZXIoX19jdV90bywgX19jdV9mcm9tLAkJXAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jdV9sZW4pOwkJCVwKKwlfX2N1X2xlbjsJCQkJCQkJXAorfSkKKworLyoKKyAqIGNvcHlfZnJvbV91c2VyOiAtIENvcHkgYSBibG9jayBvZiBkYXRhIGZyb20gdXNlciBzcGFjZS4KKyAqIEB0bzogICBEZXN0aW5hdGlvbiBhZGRyZXNzLCBpbiBrZXJuZWwgc3BhY2UuCisgKiBAZnJvbTogU291cmNlIGFkZHJlc3MsIGluIHVzZXIgc3BhY2UuCisgKiBAbjogICAgTnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkuCisgKgorICogQ29udGV4dDogVXNlciBjb250ZXh0IG9ubHkuICBUaGlzIGZ1bmN0aW9uIG1heSBzbGVlcC4KKyAqCisgKiBDb3B5IGRhdGEgZnJvbSB1c2VyIHNwYWNlIHRvIGtlcm5lbCBzcGFjZS4KKyAqCisgKiBSZXR1cm5zIG51bWJlciBvZiBieXRlcyB0aGF0IGNvdWxkIG5vdCBiZSBjb3BpZWQuCisgKiBPbiBzdWNjZXNzLCB0aGlzIHdpbGwgYmUgemVyby4KKyAqCisgKiBJZiBzb21lIGRhdGEgY291bGQgbm90IGJlIGNvcGllZCwgdGhpcyBmdW5jdGlvbiB3aWxsIHBhZCB0aGUgY29waWVkCisgKiBkYXRhIHRvIHRoZSByZXF1ZXN0ZWQgc2l6ZSB1c2luZyB6ZXJvIGJ5dGVzLgorICovCisjZGVmaW5lIGNvcHlfZnJvbV91c2VyKHRvLGZyb20sbikJCQkJCVwKKyh7CQkJCQkJCQkJXAorCXZvaWQgKl9fY3VfdG87CQkJCQkJCVwKKwljb25zdCB2b2lkICpfX2N1X2Zyb207CQkJCQkJXAorCWxvbmcgX19jdV9sZW47CQkJCQkJCVwKKwkJCQkJCQkJCVwKKwltaWdodF9zbGVlcCgpOwkJCQkJCQlcCisJX19jdV90byA9ICh0byk7CQkJCQkJCVwKKwlfX2N1X2Zyb20gPSAoZnJvbSk7CQkJCQkJXAorCV9fY3VfbGVuID0gKG4pOwkJCQkJCQlcCisJaWYgKGFjY2Vzc19vayhWRVJJRllfUkVBRCwgX19jdV9mcm9tLCBfX2N1X2xlbikpCQlcCisJCV9fY3VfbGVuID0gX19pbnZva2VfY29weV9mcm9tX3VzZXIoX19jdV90bywgX19jdV9mcm9tLAlcCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jdV9sZW4pOwkJXAorCV9fY3VfbGVuOwkJCQkJCQlcCit9KQorCisjZGVmaW5lIF9fY29weV9pbl91c2VyKHRvLCBmcm9tLCBuKQlfX2NvcHlfZnJvbV91c2VyKHRvLCBmcm9tLCBuKQorCisjZGVmaW5lIGNvcHlfaW5fdXNlcih0byxmcm9tLG4pCQkJCQkJXAorKHsJCQkJCQkJCQlcCisJdm9pZCAqX19jdV90bzsJCQkJCQkJXAorCWNvbnN0IHZvaWQgKl9fY3VfZnJvbTsJCQkJCQlcCisJbG9uZyBfX2N1X2xlbjsJCQkJCQkJXAorCQkJCQkJCQkJXAorCW1pZ2h0X3NsZWVwKCk7CQkJCQkJCVwKKwlfX2N1X3RvID0gKHRvKTsJCQkJCQkJXAorCV9fY3VfZnJvbSA9IChmcm9tKTsJCQkJCQlcCisJX19jdV9sZW4gPSAobik7CQkJCQkJCVwKKwlpZiAobGlrZWx5KGFjY2Vzc19vayhWRVJJRllfUkVBRCwgX19jdV9mcm9tLCBfX2N1X2xlbikgJiYJXAorCSAgICAgICAgICAgYWNjZXNzX29rKFZFUklGWV9XUklURSwgX19jdV90bywgX19jdV9sZW4pKSkJCVwKKwkJX19jdV9sZW4gPSBfX2ludm9rZV9jb3B5X2Zyb21fdXNlcihfX2N1X3RvLCBfX2N1X2Zyb20sCVwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2N1X2xlbik7CQlcCisJX19jdV9sZW47CQkJCQkJCVwKK30pCisKKy8qCisgKiBfX2NsZWFyX3VzZXI6IC0gWmVybyBhIGJsb2NrIG9mIG1lbW9yeSBpbiB1c2VyIHNwYWNlLCB3aXRoIGxlc3MgY2hlY2tpbmcuCisgKiBAdG86ICAgRGVzdGluYXRpb24gYWRkcmVzcywgaW4gdXNlciBzcGFjZS4KKyAqIEBuOiAgICBOdW1iZXIgb2YgYnl0ZXMgdG8gemVyby4KKyAqCisgKiBaZXJvIGEgYmxvY2sgb2YgbWVtb3J5IGluIHVzZXIgc3BhY2UuICBDYWxsZXIgbXVzdCBjaGVjaworICogdGhlIHNwZWNpZmllZCBibG9jayB3aXRoIGFjY2Vzc19vaygpIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisgKgorICogUmV0dXJucyBudW1iZXIgb2YgYnl0ZXMgdGhhdCBjb3VsZCBub3QgYmUgY2xlYXJlZC4KKyAqIE9uIHN1Y2Nlc3MsIHRoaXMgd2lsbCBiZSB6ZXJvLgorICovCitzdGF0aWMgaW5saW5lIF9fa2VybmVsX3NpemVfdAorX19jbGVhcl91c2VyKHZvaWQgKmFkZHIsIF9fa2VybmVsX3NpemVfdCBzaXplKQoreworCV9fa2VybmVsX3NpemVfdCByZXM7CisKKwltaWdodF9zbGVlcCgpOworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkibW92ZVx0JDQsICUxXG5cdCIKKwkJIm1vdmVcdCQ1LCAkMFxuXHQiCisJCSJtb3ZlXHQkNiwgJTJcblx0IgorCQlfX01PRFVMRV9KQUwoX19iemVybykKKwkJIm1vdmVcdCUwLCAkNiIKKwkJOiAiPXIiIChyZXMpCisJCTogInIiIChhZGRyKSwgInIiIChzaXplKQorCQk6ICIkNCIsICIkNSIsICIkNiIsIF9fVUFfdDAsIF9fVUFfdDEsICIkMzEiKTsKKworCXJldHVybiByZXM7Cit9CisKKyNkZWZpbmUgY2xlYXJfdXNlcihhZGRyLG4pCQkJCQkJXAorKHsJCQkJCQkJCQlcCisJdm9pZCAqIF9fY2xfYWRkciA9IChhZGRyKTsJCQkJCVwKKwl1bnNpZ25lZCBsb25nIF9fY2xfc2l6ZSA9IChuKTsJCQkJCVwKKwlpZiAoX19jbF9zaXplICYmIGFjY2Vzc19vayhWRVJJRllfV1JJVEUsCQkJXAorCQkoKHVuc2lnbmVkIGxvbmcpKF9fY2xfYWRkcikpLCBfX2NsX3NpemUpKQkJXAorCQlfX2NsX3NpemUgPSBfX2NsZWFyX3VzZXIoX19jbF9hZGRyLCBfX2NsX3NpemUpOwkJXAorCV9fY2xfc2l6ZTsJCQkJCQkJXAorfSkKKworLyoKKyAqIF9fc3RybmNweV9mcm9tX3VzZXI6IC0gQ29weSBhIE5VTCB0ZXJtaW5hdGVkIHN0cmluZyBmcm9tIHVzZXJzcGFjZSwgd2l0aCBsZXNzIGNoZWNraW5nLgorICogQGRzdDogICBEZXN0aW5hdGlvbiBhZGRyZXNzLCBpbiBrZXJuZWwgc3BhY2UuICBUaGlzIGJ1ZmZlciBtdXN0IGJlIGF0CisgKiAgICAgICAgIGxlYXN0IEBjb3VudCBieXRlcyBsb25nLgorICogQHNyYzogICBTb3VyY2UgYWRkcmVzcywgaW4gdXNlciBzcGFjZS4KKyAqIEBjb3VudDogTWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gY29weSwgaW5jbHVkaW5nIHRoZSB0cmFpbGluZyBOVUwuCisgKgorICogQ29waWVzIGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIGZyb20gdXNlcnNwYWNlIHRvIGtlcm5lbCBzcGFjZS4KKyAqIENhbGxlciBtdXN0IGNoZWNrIHRoZSBzcGVjaWZpZWQgYmxvY2sgd2l0aCBhY2Nlc3Nfb2soKSBiZWZvcmUgY2FsbGluZworICogdGhpcyBmdW5jdGlvbi4KKyAqCisgKiBPbiBzdWNjZXNzLCByZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyAobm90IGluY2x1ZGluZyB0aGUgdHJhaWxpbmcKKyAqIE5VTCkuCisgKgorICogSWYgYWNjZXNzIHRvIHVzZXJzcGFjZSBmYWlscywgcmV0dXJucyAtRUZBVUxUIChzb21lIGRhdGEgbWF5IGhhdmUgYmVlbgorICogY29waWVkKS4KKyAqCisgKiBJZiBAY291bnQgaXMgc21hbGxlciB0aGFuIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZywgY29waWVzIEBjb3VudCBieXRlcworICogYW5kIHJldHVybnMgQGNvdW50LgorICovCitzdGF0aWMgaW5saW5lIGxvbmcKK19fc3RybmNweV9mcm9tX3VzZXIoY2hhciAqX190bywgY29uc3QgY2hhciAqX19mcm9tLCBsb25nIF9fbGVuKQoreworCWxvbmcgcmVzOworCisJbWlnaHRfc2xlZXAoKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJIm1vdmVcdCQ0LCAlMVxuXHQiCisJCSJtb3ZlXHQkNSwgJTJcblx0IgorCQkibW92ZVx0JDYsICUzXG5cdCIKKwkJX19NT0RVTEVfSkFMKF9fc3RybmNweV9mcm9tX3VzZXJfbm9jaGVja19hc20pCisJCSJtb3ZlXHQlMCwgJDIiCisJCTogIj1yIiAocmVzKQorCQk6ICJyIiAoX190byksICJyIiAoX19mcm9tKSwgInIiIChfX2xlbikKKwkJOiAiJDIiLCAiJDMiLCAiJDQiLCAiJDUiLCAiJDYiLCBfX1VBX3QwLCAiJDMxIiwgIm1lbW9yeSIpOworCisJcmV0dXJuIHJlczsKK30KKworLyoKKyAqIHN0cm5jcHlfZnJvbV91c2VyOiAtIENvcHkgYSBOVUwgdGVybWluYXRlZCBzdHJpbmcgZnJvbSB1c2Vyc3BhY2UuCisgKiBAZHN0OiAgIERlc3RpbmF0aW9uIGFkZHJlc3MsIGluIGtlcm5lbCBzcGFjZS4gIFRoaXMgYnVmZmVyIG11c3QgYmUgYXQKKyAqICAgICAgICAgbGVhc3QgQGNvdW50IGJ5dGVzIGxvbmcuCisgKiBAc3JjOiAgIFNvdXJjZSBhZGRyZXNzLCBpbiB1c2VyIHNwYWNlLgorICogQGNvdW50OiBNYXhpbXVtIG51bWJlciBvZiBieXRlcyB0byBjb3B5LCBpbmNsdWRpbmcgdGhlIHRyYWlsaW5nIE5VTC4KKyAqCisgKiBDb3BpZXMgYSBOVUwtdGVybWluYXRlZCBzdHJpbmcgZnJvbSB1c2Vyc3BhY2UgdG8ga2VybmVsIHNwYWNlLgorICoKKyAqIE9uIHN1Y2Nlc3MsIHJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIChub3QgaW5jbHVkaW5nIHRoZSB0cmFpbGluZworICogTlVMKS4KKyAqCisgKiBJZiBhY2Nlc3MgdG8gdXNlcnNwYWNlIGZhaWxzLCByZXR1cm5zIC1FRkFVTFQgKHNvbWUgZGF0YSBtYXkgaGF2ZSBiZWVuCisgKiBjb3BpZWQpLgorICoKKyAqIElmIEBjb3VudCBpcyBzbWFsbGVyIHRoYW4gdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nLCBjb3BpZXMgQGNvdW50IGJ5dGVzCisgKiBhbmQgcmV0dXJucyBAY291bnQuCisgKi8KK3N0YXRpYyBpbmxpbmUgbG9uZworc3RybmNweV9mcm9tX3VzZXIoY2hhciAqX190bywgY29uc3QgY2hhciAqX19mcm9tLCBsb25nIF9fbGVuKQoreworCWxvbmcgcmVzOworCisJbWlnaHRfc2xlZXAoKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJIm1vdmVcdCQ0LCAlMVxuXHQiCisJCSJtb3ZlXHQkNSwgJTJcblx0IgorCQkibW92ZVx0JDYsICUzXG5cdCIKKwkJX19NT0RVTEVfSkFMKF9fc3RybmNweV9mcm9tX3VzZXJfYXNtKQorCQkibW92ZVx0JTAsICQyIgorCQk6ICI9ciIgKHJlcykKKwkJOiAiciIgKF9fdG8pLCAiciIgKF9fZnJvbSksICJyIiAoX19sZW4pCisJCTogIiQyIiwgIiQzIiwgIiQ0IiwgIiQ1IiwgIiQ2IiwgX19VQV90MCwgIiQzMSIsICJtZW1vcnkiKTsKKworCXJldHVybiByZXM7Cit9CisKKy8qIFJldHVybnM6IDAgaWYgYmFkLCBzdHJpbmcgbGVuZ3RoKzEgKG1lbW9yeSBzaXplKSBvZiBzdHJpbmcgaWYgb2sgKi8KK3N0YXRpYyBpbmxpbmUgbG9uZyBfX3N0cmxlbl91c2VyKGNvbnN0IGNoYXIgKnMpCit7CisJbG9uZyByZXM7CisKKwltaWdodF9zbGVlcCgpOworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkibW92ZVx0JDQsICUxXG5cdCIKKwkJX19NT0RVTEVfSkFMKF9fc3RybGVuX3VzZXJfbm9jaGVja19hc20pCisJCSJtb3ZlXHQlMCwgJDIiCisJCTogIj1yIiAocmVzKQorCQk6ICJyIiAocykKKwkJOiAiJDIiLCAiJDQiLCBfX1VBX3QwLCAiJDMxIik7CisKKwlyZXR1cm4gcmVzOworfQorCisvKgorICogc3RybGVuX3VzZXI6IC0gR2V0IHRoZSBzaXplIG9mIGEgc3RyaW5nIGluIHVzZXIgc3BhY2UuCisgKiBAc3RyOiBUaGUgc3RyaW5nIHRvIG1lYXN1cmUuCisgKgorICogQ29udGV4dDogVXNlciBjb250ZXh0IG9ubHkuICBUaGlzIGZ1bmN0aW9uIG1heSBzbGVlcC4KKyAqCisgKiBHZXQgdGhlIHNpemUgb2YgYSBOVUwtdGVybWluYXRlZCBzdHJpbmcgaW4gdXNlciBzcGFjZS4KKyAqCisgKiBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBzdHJpbmcgSU5DTFVESU5HIHRoZSB0ZXJtaW5hdGluZyBOVUwuCisgKiBPbiBleGNlcHRpb24sIHJldHVybnMgMC4KKyAqCisgKiBJZiB0aGVyZSBpcyBhIGxpbWl0IG9uIHRoZSBsZW5ndGggb2YgYSB2YWxpZCBzdHJpbmcsIHlvdSBtYXkgd2lzaCB0bworICogY29uc2lkZXIgdXNpbmcgc3Rybmxlbl91c2VyKCkgaW5zdGVhZC4KKyAqLworc3RhdGljIGlubGluZSBsb25nIHN0cmxlbl91c2VyKGNvbnN0IGNoYXIgKnMpCit7CisJbG9uZyByZXM7CisKKwltaWdodF9zbGVlcCgpOworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkibW92ZVx0JDQsICUxXG5cdCIKKwkJX19NT0RVTEVfSkFMKF9fc3RybGVuX3VzZXJfYXNtKQorCQkibW92ZVx0JTAsICQyIgorCQk6ICI9ciIgKHJlcykKKwkJOiAiciIgKHMpCisJCTogIiQyIiwgIiQ0IiwgX19VQV90MCwgIiQzMSIpOworCisJcmV0dXJuIHJlczsKK30KKworLyogUmV0dXJuczogMCBpZiBiYWQsIHN0cmluZyBsZW5ndGgrMSAobWVtb3J5IHNpemUpIG9mIHN0cmluZyBpZiBvayAqLworc3RhdGljIGlubGluZSBsb25nIF9fc3Rybmxlbl91c2VyKGNvbnN0IGNoYXIgKnMsIGxvbmcgbikKK3sKKwlsb25nIHJlczsKKworCW1pZ2h0X3NsZWVwKCk7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSJtb3ZlXHQkNCwgJTFcblx0IgorCQkibW92ZVx0JDUsICUyXG5cdCIKKwkJX19NT0RVTEVfSkFMKF9fc3Rybmxlbl91c2VyX25vY2hlY2tfYXNtKQorCQkibW92ZVx0JTAsICQyIgorCQk6ICI9ciIgKHJlcykKKwkJOiAiciIgKHMpLCAiciIgKG4pCisJCTogIiQyIiwgIiQ0IiwgIiQ1IiwgX19VQV90MCwgIiQzMSIpOworCisJcmV0dXJuIHJlczsKK30KKworLyoKKyAqIHN0cmxlbl91c2VyOiAtIEdldCB0aGUgc2l6ZSBvZiBhIHN0cmluZyBpbiB1c2VyIHNwYWNlLgorICogQHN0cjogVGhlIHN0cmluZyB0byBtZWFzdXJlLgorICoKKyAqIENvbnRleHQ6IFVzZXIgY29udGV4dCBvbmx5LiAgVGhpcyBmdW5jdGlvbiBtYXkgc2xlZXAuCisgKgorICogR2V0IHRoZSBzaXplIG9mIGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIGluIHVzZXIgc3BhY2UuCisgKgorICogUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgc3RyaW5nIElOQ0xVRElORyB0aGUgdGVybWluYXRpbmcgTlVMLgorICogT24gZXhjZXB0aW9uLCByZXR1cm5zIDAuCisgKgorICogSWYgdGhlcmUgaXMgYSBsaW1pdCBvbiB0aGUgbGVuZ3RoIG9mIGEgdmFsaWQgc3RyaW5nLCB5b3UgbWF5IHdpc2ggdG8KKyAqIGNvbnNpZGVyIHVzaW5nIHN0cm5sZW5fdXNlcigpIGluc3RlYWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgbG9uZyBzdHJubGVuX3VzZXIoY29uc3QgY2hhciAqcywgbG9uZyBuKQoreworCWxvbmcgcmVzOworCisJbWlnaHRfc2xlZXAoKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJIm1vdmVcdCQ0LCAlMVxuXHQiCisJCSJtb3ZlXHQkNSwgJTJcblx0IgorCQlfX01PRFVMRV9KQUwoX19zdHJubGVuX3VzZXJfYXNtKQorCQkibW92ZVx0JTAsICQyIgorCQk6ICI9ciIgKHJlcykKKwkJOiAiciIgKHMpLCAiciIgKG4pCisJCTogIiQyIiwgIiQ0IiwgIiQ1IiwgX19VQV90MCwgIiQzMSIpOworCisJcmV0dXJuIHJlczsKK30KKworc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeQoreworCXVuc2lnbmVkIGxvbmcgaW5zbjsKKwl1bnNpZ25lZCBsb25nIG5leHRpbnNuOworfTsKKworZXh0ZXJuIGludCBmaXh1cF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCisjZW5kaWYgLyogX0FTTV9VQUNDRVNTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvdWNvbnRleHQuaCBiL2luY2x1ZGUvYXNtLW1pcHMvdWNvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTRiMjBlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy91Y29udGV4dC5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBMb3cgbGV2ZWwgZXhjZXB0aW9uIGhhbmRsaW5nCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5IGJ5IFJhbGYgQmFlY2hsZQorICovCisjaWZuZGVmIF9BU01fVUNPTlRFWFRfSAorI2RlZmluZSBfQVNNX1VDT05URVhUX0gKKworc3RydWN0IHVjb250ZXh0IHsKKwl1bnNpZ25lZCBsb25nCSAgdWNfZmxhZ3M7CisJc3RydWN0IHVjb250ZXh0ICAqdWNfbGluazsKKwlzdGFja190CQkgIHVjX3N0YWNrOworCXN0cnVjdCBzaWdjb250ZXh0IHVjX21jb250ZXh0OworCXNpZ3NldF90CSAgdWNfc2lnbWFzazsJLyogbWFzayBsYXN0IGZvciBleHRlbnNpYmlsaXR5ICovCit9OworCisjZW5kaWYgLyogX0FTTV9VQ09OVEVYVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3VuYWxpZ25lZC5oIGIvaW5jbHVkZS9hc20tbWlwcy91bmFsaWduZWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDA0MjU2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy91bmFsaWduZWQuaApAQCAtMCwwICsxLDE0IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzIGJ5IFJhbGYgQmFlY2hsZQorICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAxIFNpbGljb24gR3JhcGhpY3MsIEluYy4KKyAqLworI2lmbmRlZiBfQVNNX1VOQUxJR05FRF9ICisjZGVmaW5lIF9BU01fVU5BTElHTkVEX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3VuYWxpZ25lZC5oPgorCisjZW5kaWYgLyogX0FTTV9VTkFMSUdORURfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLW1pcHMvdW5pc3RkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQyMWNjOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvdW5pc3RkLmgKQEAgLTAsMCArMSwxMTg1IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LCA5NiwgOTcsIDk4LCA5OSwgMjAwMCBieSBSYWxmIEJhZWNobGUKKyAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCisgKgorICogQ2hhbmdlZCBzeXN0ZW0gY2FsbHMgbWFjcm9zIF9zeXNjYWxsNSAtIF9zeXNjYWxsNyB0byBwdXNoIGFyZ3MgNSB0byA3IG9udG8KKyAqIHRoZSBzdGFjay4gUm9iaW4gRmFyaW5lIGZvciBBQ04gUy5BLCBDb3B5cmlnaHQgKEMpIDE5OTYgYnkgQUNOIFMuQQorICovCisjaWZuZGVmIF9BU01fVU5JU1REX0gKKyNkZWZpbmUgX0FTTV9VTklTVERfSAorCisjaW5jbHVkZSA8YXNtL3NnaWRlZnMuaD4KKworI2lmIF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fQUJJMzIKKworLyoKKyAqIExpbnV4IG8zMiBzdHlsZSBzeXNjYWxscyBhcmUgaW4gdGhlIHJhbmdlIGZyb20gNDAwMCB0byA0OTk5LgorICovCisjZGVmaW5lIF9fTlJfTGludXgJCQk0MDAwCisjZGVmaW5lIF9fTlJfc3lzY2FsbAkJCShfX05SX0xpbnV4ICsgICAwKQorI2RlZmluZSBfX05SX2V4aXQJCQkoX19OUl9MaW51eCArICAgMSkKKyNkZWZpbmUgX19OUl9mb3JrCQkJKF9fTlJfTGludXggKyAgIDIpCisjZGVmaW5lIF9fTlJfcmVhZAkJCShfX05SX0xpbnV4ICsgICAzKQorI2RlZmluZSBfX05SX3dyaXRlCQkJKF9fTlJfTGludXggKyAgIDQpCisjZGVmaW5lIF9fTlJfb3BlbgkJCShfX05SX0xpbnV4ICsgICA1KQorI2RlZmluZSBfX05SX2Nsb3NlCQkJKF9fTlJfTGludXggKyAgIDYpCisjZGVmaW5lIF9fTlJfd2FpdHBpZAkJCShfX05SX0xpbnV4ICsgICA3KQorI2RlZmluZSBfX05SX2NyZWF0CQkJKF9fTlJfTGludXggKyAgIDgpCisjZGVmaW5lIF9fTlJfbGluawkJCShfX05SX0xpbnV4ICsgICA5KQorI2RlZmluZSBfX05SX3VubGluawkJCShfX05SX0xpbnV4ICsgIDEwKQorI2RlZmluZSBfX05SX2V4ZWN2ZQkJCShfX05SX0xpbnV4ICsgIDExKQorI2RlZmluZSBfX05SX2NoZGlyCQkJKF9fTlJfTGludXggKyAgMTIpCisjZGVmaW5lIF9fTlJfdGltZQkJCShfX05SX0xpbnV4ICsgIDEzKQorI2RlZmluZSBfX05SX21rbm9kCQkJKF9fTlJfTGludXggKyAgMTQpCisjZGVmaW5lIF9fTlJfY2htb2QJCQkoX19OUl9MaW51eCArICAxNSkKKyNkZWZpbmUgX19OUl9sY2hvd24JCQkoX19OUl9MaW51eCArICAxNikKKyNkZWZpbmUgX19OUl9icmVhawkJCShfX05SX0xpbnV4ICsgIDE3KQorI2RlZmluZSBfX05SX3VudXNlZDE4CQkJKF9fTlJfTGludXggKyAgMTgpCisjZGVmaW5lIF9fTlJfbHNlZWsJCQkoX19OUl9MaW51eCArICAxOSkKKyNkZWZpbmUgX19OUl9nZXRwaWQJCQkoX19OUl9MaW51eCArICAyMCkKKyNkZWZpbmUgX19OUl9tb3VudAkJCShfX05SX0xpbnV4ICsgIDIxKQorI2RlZmluZSBfX05SX3Vtb3VudAkJCShfX05SX0xpbnV4ICsgIDIyKQorI2RlZmluZSBfX05SX3NldHVpZAkJCShfX05SX0xpbnV4ICsgIDIzKQorI2RlZmluZSBfX05SX2dldHVpZAkJCShfX05SX0xpbnV4ICsgIDI0KQorI2RlZmluZSBfX05SX3N0aW1lCQkJKF9fTlJfTGludXggKyAgMjUpCisjZGVmaW5lIF9fTlJfcHRyYWNlCQkJKF9fTlJfTGludXggKyAgMjYpCisjZGVmaW5lIF9fTlJfYWxhcm0JCQkoX19OUl9MaW51eCArICAyNykKKyNkZWZpbmUgX19OUl91bnVzZWQyOAkJCShfX05SX0xpbnV4ICsgIDI4KQorI2RlZmluZSBfX05SX3BhdXNlCQkJKF9fTlJfTGludXggKyAgMjkpCisjZGVmaW5lIF9fTlJfdXRpbWUJCQkoX19OUl9MaW51eCArICAzMCkKKyNkZWZpbmUgX19OUl9zdHR5CQkJKF9fTlJfTGludXggKyAgMzEpCisjZGVmaW5lIF9fTlJfZ3R0eQkJCShfX05SX0xpbnV4ICsgIDMyKQorI2RlZmluZSBfX05SX2FjY2VzcwkJCShfX05SX0xpbnV4ICsgIDMzKQorI2RlZmluZSBfX05SX25pY2UJCQkoX19OUl9MaW51eCArICAzNCkKKyNkZWZpbmUgX19OUl9mdGltZQkJCShfX05SX0xpbnV4ICsgIDM1KQorI2RlZmluZSBfX05SX3N5bmMJCQkoX19OUl9MaW51eCArICAzNikKKyNkZWZpbmUgX19OUl9raWxsCQkJKF9fTlJfTGludXggKyAgMzcpCisjZGVmaW5lIF9fTlJfcmVuYW1lCQkJKF9fTlJfTGludXggKyAgMzgpCisjZGVmaW5lIF9fTlJfbWtkaXIJCQkoX19OUl9MaW51eCArICAzOSkKKyNkZWZpbmUgX19OUl9ybWRpcgkJCShfX05SX0xpbnV4ICsgIDQwKQorI2RlZmluZSBfX05SX2R1cAkJCShfX05SX0xpbnV4ICsgIDQxKQorI2RlZmluZSBfX05SX3BpcGUJCQkoX19OUl9MaW51eCArICA0MikKKyNkZWZpbmUgX19OUl90aW1lcwkJCShfX05SX0xpbnV4ICsgIDQzKQorI2RlZmluZSBfX05SX3Byb2YJCQkoX19OUl9MaW51eCArICA0NCkKKyNkZWZpbmUgX19OUl9icmsJCQkoX19OUl9MaW51eCArICA0NSkKKyNkZWZpbmUgX19OUl9zZXRnaWQJCQkoX19OUl9MaW51eCArICA0NikKKyNkZWZpbmUgX19OUl9nZXRnaWQJCQkoX19OUl9MaW51eCArICA0NykKKyNkZWZpbmUgX19OUl9zaWduYWwJCQkoX19OUl9MaW51eCArICA0OCkKKyNkZWZpbmUgX19OUl9nZXRldWlkCQkJKF9fTlJfTGludXggKyAgNDkpCisjZGVmaW5lIF9fTlJfZ2V0ZWdpZAkJCShfX05SX0xpbnV4ICsgIDUwKQorI2RlZmluZSBfX05SX2FjY3QJCQkoX19OUl9MaW51eCArICA1MSkKKyNkZWZpbmUgX19OUl91bW91bnQyCQkJKF9fTlJfTGludXggKyAgNTIpCisjZGVmaW5lIF9fTlJfbG9jawkJCShfX05SX0xpbnV4ICsgIDUzKQorI2RlZmluZSBfX05SX2lvY3RsCQkJKF9fTlJfTGludXggKyAgNTQpCisjZGVmaW5lIF9fTlJfZmNudGwJCQkoX19OUl9MaW51eCArICA1NSkKKyNkZWZpbmUgX19OUl9tcHgJCQkoX19OUl9MaW51eCArICA1NikKKyNkZWZpbmUgX19OUl9zZXRwZ2lkCQkJKF9fTlJfTGludXggKyAgNTcpCisjZGVmaW5lIF9fTlJfdWxpbWl0CQkJKF9fTlJfTGludXggKyAgNTgpCisjZGVmaW5lIF9fTlJfdW51c2VkNTkJCQkoX19OUl9MaW51eCArICA1OSkKKyNkZWZpbmUgX19OUl91bWFzawkJCShfX05SX0xpbnV4ICsgIDYwKQorI2RlZmluZSBfX05SX2Nocm9vdAkJCShfX05SX0xpbnV4ICsgIDYxKQorI2RlZmluZSBfX05SX3VzdGF0CQkJKF9fTlJfTGludXggKyAgNjIpCisjZGVmaW5lIF9fTlJfZHVwMgkJCShfX05SX0xpbnV4ICsgIDYzKQorI2RlZmluZSBfX05SX2dldHBwaWQJCQkoX19OUl9MaW51eCArICA2NCkKKyNkZWZpbmUgX19OUl9nZXRwZ3JwCQkJKF9fTlJfTGludXggKyAgNjUpCisjZGVmaW5lIF9fTlJfc2V0c2lkCQkJKF9fTlJfTGludXggKyAgNjYpCisjZGVmaW5lIF9fTlJfc2lnYWN0aW9uCQkJKF9fTlJfTGludXggKyAgNjcpCisjZGVmaW5lIF9fTlJfc2dldG1hc2sJCQkoX19OUl9MaW51eCArICA2OCkKKyNkZWZpbmUgX19OUl9zc2V0bWFzawkJCShfX05SX0xpbnV4ICsgIDY5KQorI2RlZmluZSBfX05SX3NldHJldWlkCQkJKF9fTlJfTGludXggKyAgNzApCisjZGVmaW5lIF9fTlJfc2V0cmVnaWQJCQkoX19OUl9MaW51eCArICA3MSkKKyNkZWZpbmUgX19OUl9zaWdzdXNwZW5kCQkJKF9fTlJfTGludXggKyAgNzIpCisjZGVmaW5lIF9fTlJfc2lncGVuZGluZwkJCShfX05SX0xpbnV4ICsgIDczKQorI2RlZmluZSBfX05SX3NldGhvc3RuYW1lCQkoX19OUl9MaW51eCArICA3NCkKKyNkZWZpbmUgX19OUl9zZXRybGltaXQJCQkoX19OUl9MaW51eCArICA3NSkKKyNkZWZpbmUgX19OUl9nZXRybGltaXQJCQkoX19OUl9MaW51eCArICA3NikKKyNkZWZpbmUgX19OUl9nZXRydXNhZ2UJCQkoX19OUl9MaW51eCArICA3NykKKyNkZWZpbmUgX19OUl9nZXR0aW1lb2ZkYXkJCShfX05SX0xpbnV4ICsgIDc4KQorI2RlZmluZSBfX05SX3NldHRpbWVvZmRheQkJKF9fTlJfTGludXggKyAgNzkpCisjZGVmaW5lIF9fTlJfZ2V0Z3JvdXBzCQkJKF9fTlJfTGludXggKyAgODApCisjZGVmaW5lIF9fTlJfc2V0Z3JvdXBzCQkJKF9fTlJfTGludXggKyAgODEpCisjZGVmaW5lIF9fTlJfcmVzZXJ2ZWQ4MgkJCShfX05SX0xpbnV4ICsgIDgyKQorI2RlZmluZSBfX05SX3N5bWxpbmsJCQkoX19OUl9MaW51eCArICA4MykKKyNkZWZpbmUgX19OUl91bnVzZWQ4NAkJCShfX05SX0xpbnV4ICsgIDg0KQorI2RlZmluZSBfX05SX3JlYWRsaW5rCQkJKF9fTlJfTGludXggKyAgODUpCisjZGVmaW5lIF9fTlJfdXNlbGliCQkJKF9fTlJfTGludXggKyAgODYpCisjZGVmaW5lIF9fTlJfc3dhcG9uCQkJKF9fTlJfTGludXggKyAgODcpCisjZGVmaW5lIF9fTlJfcmVib290CQkJKF9fTlJfTGludXggKyAgODgpCisjZGVmaW5lIF9fTlJfcmVhZGRpcgkJCShfX05SX0xpbnV4ICsgIDg5KQorI2RlZmluZSBfX05SX21tYXAJCQkoX19OUl9MaW51eCArICA5MCkKKyNkZWZpbmUgX19OUl9tdW5tYXAJCQkoX19OUl9MaW51eCArICA5MSkKKyNkZWZpbmUgX19OUl90cnVuY2F0ZQkJCShfX05SX0xpbnV4ICsgIDkyKQorI2RlZmluZSBfX05SX2Z0cnVuY2F0ZQkJCShfX05SX0xpbnV4ICsgIDkzKQorI2RlZmluZSBfX05SX2ZjaG1vZAkJCShfX05SX0xpbnV4ICsgIDk0KQorI2RlZmluZSBfX05SX2ZjaG93bgkJCShfX05SX0xpbnV4ICsgIDk1KQorI2RlZmluZSBfX05SX2dldHByaW9yaXR5CQkoX19OUl9MaW51eCArICA5NikKKyNkZWZpbmUgX19OUl9zZXRwcmlvcml0eQkJKF9fTlJfTGludXggKyAgOTcpCisjZGVmaW5lIF9fTlJfcHJvZmlsCQkJKF9fTlJfTGludXggKyAgOTgpCisjZGVmaW5lIF9fTlJfc3RhdGZzCQkJKF9fTlJfTGludXggKyAgOTkpCisjZGVmaW5lIF9fTlJfZnN0YXRmcwkJCShfX05SX0xpbnV4ICsgMTAwKQorI2RlZmluZSBfX05SX2lvcGVybQkJCShfX05SX0xpbnV4ICsgMTAxKQorI2RlZmluZSBfX05SX3NvY2tldGNhbGwJCQkoX19OUl9MaW51eCArIDEwMikKKyNkZWZpbmUgX19OUl9zeXNsb2cJCQkoX19OUl9MaW51eCArIDEwMykKKyNkZWZpbmUgX19OUl9zZXRpdGltZXIJCQkoX19OUl9MaW51eCArIDEwNCkKKyNkZWZpbmUgX19OUl9nZXRpdGltZXIJCQkoX19OUl9MaW51eCArIDEwNSkKKyNkZWZpbmUgX19OUl9zdGF0CQkJKF9fTlJfTGludXggKyAxMDYpCisjZGVmaW5lIF9fTlJfbHN0YXQJCQkoX19OUl9MaW51eCArIDEwNykKKyNkZWZpbmUgX19OUl9mc3RhdAkJCShfX05SX0xpbnV4ICsgMTA4KQorI2RlZmluZSBfX05SX3VudXNlZDEwOQkJCShfX05SX0xpbnV4ICsgMTA5KQorI2RlZmluZSBfX05SX2lvcGwJCQkoX19OUl9MaW51eCArIDExMCkKKyNkZWZpbmUgX19OUl92aGFuZ3VwCQkJKF9fTlJfTGludXggKyAxMTEpCisjZGVmaW5lIF9fTlJfaWRsZQkJCShfX05SX0xpbnV4ICsgMTEyKQorI2RlZmluZSBfX05SX3ZtODYJCQkoX19OUl9MaW51eCArIDExMykKKyNkZWZpbmUgX19OUl93YWl0NAkJCShfX05SX0xpbnV4ICsgMTE0KQorI2RlZmluZSBfX05SX3N3YXBvZmYJCQkoX19OUl9MaW51eCArIDExNSkKKyNkZWZpbmUgX19OUl9zeXNpbmZvCQkJKF9fTlJfTGludXggKyAxMTYpCisjZGVmaW5lIF9fTlJfaXBjCQkJKF9fTlJfTGludXggKyAxMTcpCisjZGVmaW5lIF9fTlJfZnN5bmMJCQkoX19OUl9MaW51eCArIDExOCkKKyNkZWZpbmUgX19OUl9zaWdyZXR1cm4JCQkoX19OUl9MaW51eCArIDExOSkKKyNkZWZpbmUgX19OUl9jbG9uZQkJCShfX05SX0xpbnV4ICsgMTIwKQorI2RlZmluZSBfX05SX3NldGRvbWFpbm5hbWUJCShfX05SX0xpbnV4ICsgMTIxKQorI2RlZmluZSBfX05SX3VuYW1lCQkJKF9fTlJfTGludXggKyAxMjIpCisjZGVmaW5lIF9fTlJfbW9kaWZ5X2xkdAkJCShfX05SX0xpbnV4ICsgMTIzKQorI2RlZmluZSBfX05SX2FkanRpbWV4CQkJKF9fTlJfTGludXggKyAxMjQpCisjZGVmaW5lIF9fTlJfbXByb3RlY3QJCQkoX19OUl9MaW51eCArIDEyNSkKKyNkZWZpbmUgX19OUl9zaWdwcm9jbWFzawkJKF9fTlJfTGludXggKyAxMjYpCisjZGVmaW5lIF9fTlJfY3JlYXRlX21vZHVsZQkJKF9fTlJfTGludXggKyAxMjcpCisjZGVmaW5lIF9fTlJfaW5pdF9tb2R1bGUJCShfX05SX0xpbnV4ICsgMTI4KQorI2RlZmluZSBfX05SX2RlbGV0ZV9tb2R1bGUJCShfX05SX0xpbnV4ICsgMTI5KQorI2RlZmluZSBfX05SX2dldF9rZXJuZWxfc3ltcwkJKF9fTlJfTGludXggKyAxMzApCisjZGVmaW5lIF9fTlJfcXVvdGFjdGwJCQkoX19OUl9MaW51eCArIDEzMSkKKyNkZWZpbmUgX19OUl9nZXRwZ2lkCQkJKF9fTlJfTGludXggKyAxMzIpCisjZGVmaW5lIF9fTlJfZmNoZGlyCQkJKF9fTlJfTGludXggKyAxMzMpCisjZGVmaW5lIF9fTlJfYmRmbHVzaAkJCShfX05SX0xpbnV4ICsgMTM0KQorI2RlZmluZSBfX05SX3N5c2ZzCQkJKF9fTlJfTGludXggKyAxMzUpCisjZGVmaW5lIF9fTlJfcGVyc29uYWxpdHkJCShfX05SX0xpbnV4ICsgMTM2KQorI2RlZmluZSBfX05SX2Fmc19zeXNjYWxsCQkoX19OUl9MaW51eCArIDEzNykgLyogU3lzY2FsbCBmb3IgQW5kcmV3IEZpbGUgU3lzdGVtICovCisjZGVmaW5lIF9fTlJfc2V0ZnN1aWQJCQkoX19OUl9MaW51eCArIDEzOCkKKyNkZWZpbmUgX19OUl9zZXRmc2dpZAkJCShfX05SX0xpbnV4ICsgMTM5KQorI2RlZmluZSBfX05SX19sbHNlZWsJCQkoX19OUl9MaW51eCArIDE0MCkKKyNkZWZpbmUgX19OUl9nZXRkZW50cwkJCShfX05SX0xpbnV4ICsgMTQxKQorI2RlZmluZSBfX05SX19uZXdzZWxlY3QJCQkoX19OUl9MaW51eCArIDE0MikKKyNkZWZpbmUgX19OUl9mbG9jawkJCShfX05SX0xpbnV4ICsgMTQzKQorI2RlZmluZSBfX05SX21zeW5jCQkJKF9fTlJfTGludXggKyAxNDQpCisjZGVmaW5lIF9fTlJfcmVhZHYJCQkoX19OUl9MaW51eCArIDE0NSkKKyNkZWZpbmUgX19OUl93cml0ZXYJCQkoX19OUl9MaW51eCArIDE0NikKKyNkZWZpbmUgX19OUl9jYWNoZWZsdXNoCQkJKF9fTlJfTGludXggKyAxNDcpCisjZGVmaW5lIF9fTlJfY2FjaGVjdGwJCQkoX19OUl9MaW51eCArIDE0OCkKKyNkZWZpbmUgX19OUl9zeXNtaXBzCQkJKF9fTlJfTGludXggKyAxNDkpCisjZGVmaW5lIF9fTlJfdW51c2VkMTUwCQkJKF9fTlJfTGludXggKyAxNTApCisjZGVmaW5lIF9fTlJfZ2V0c2lkCQkJKF9fTlJfTGludXggKyAxNTEpCisjZGVmaW5lIF9fTlJfZmRhdGFzeW5jCQkJKF9fTlJfTGludXggKyAxNTIpCisjZGVmaW5lIF9fTlJfX3N5c2N0bAkJCShfX05SX0xpbnV4ICsgMTUzKQorI2RlZmluZSBfX05SX21sb2NrCQkJKF9fTlJfTGludXggKyAxNTQpCisjZGVmaW5lIF9fTlJfbXVubG9jawkJCShfX05SX0xpbnV4ICsgMTU1KQorI2RlZmluZSBfX05SX21sb2NrYWxsCQkJKF9fTlJfTGludXggKyAxNTYpCisjZGVmaW5lIF9fTlJfbXVubG9ja2FsbAkJCShfX05SX0xpbnV4ICsgMTU3KQorI2RlZmluZSBfX05SX3NjaGVkX3NldHBhcmFtCQkoX19OUl9MaW51eCArIDE1OCkKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRwYXJhbQkJKF9fTlJfTGludXggKyAxNTkpCisjZGVmaW5lIF9fTlJfc2NoZWRfc2V0c2NoZWR1bGVyCQkoX19OUl9MaW51eCArIDE2MCkKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRzY2hlZHVsZXIJCShfX05SX0xpbnV4ICsgMTYxKQorI2RlZmluZSBfX05SX3NjaGVkX3lpZWxkCQkoX19OUl9MaW51eCArIDE2MikKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4CShfX05SX0xpbnV4ICsgMTYzKQorI2RlZmluZSBfX05SX3NjaGVkX2dldF9wcmlvcml0eV9taW4JKF9fTlJfTGludXggKyAxNjQpCisjZGVmaW5lIF9fTlJfc2NoZWRfcnJfZ2V0X2ludGVydmFsCShfX05SX0xpbnV4ICsgMTY1KQorI2RlZmluZSBfX05SX25hbm9zbGVlcAkJCShfX05SX0xpbnV4ICsgMTY2KQorI2RlZmluZSBfX05SX21yZW1hcAkJCShfX05SX0xpbnV4ICsgMTY3KQorI2RlZmluZSBfX05SX2FjY2VwdAkJCShfX05SX0xpbnV4ICsgMTY4KQorI2RlZmluZSBfX05SX2JpbmQJCQkoX19OUl9MaW51eCArIDE2OSkKKyNkZWZpbmUgX19OUl9jb25uZWN0CQkJKF9fTlJfTGludXggKyAxNzApCisjZGVmaW5lIF9fTlJfZ2V0cGVlcm5hbWUJCShfX05SX0xpbnV4ICsgMTcxKQorI2RlZmluZSBfX05SX2dldHNvY2tuYW1lCQkoX19OUl9MaW51eCArIDE3MikKKyNkZWZpbmUgX19OUl9nZXRzb2Nrb3B0CQkJKF9fTlJfTGludXggKyAxNzMpCisjZGVmaW5lIF9fTlJfbGlzdGVuCQkJKF9fTlJfTGludXggKyAxNzQpCisjZGVmaW5lIF9fTlJfcmVjdgkJCShfX05SX0xpbnV4ICsgMTc1KQorI2RlZmluZSBfX05SX3JlY3Zmcm9tCQkJKF9fTlJfTGludXggKyAxNzYpCisjZGVmaW5lIF9fTlJfcmVjdm1zZwkJCShfX05SX0xpbnV4ICsgMTc3KQorI2RlZmluZSBfX05SX3NlbmQJCQkoX19OUl9MaW51eCArIDE3OCkKKyNkZWZpbmUgX19OUl9zZW5kbXNnCQkJKF9fTlJfTGludXggKyAxNzkpCisjZGVmaW5lIF9fTlJfc2VuZHRvCQkJKF9fTlJfTGludXggKyAxODApCisjZGVmaW5lIF9fTlJfc2V0c29ja29wdAkJCShfX05SX0xpbnV4ICsgMTgxKQorI2RlZmluZSBfX05SX3NodXRkb3duCQkJKF9fTlJfTGludXggKyAxODIpCisjZGVmaW5lIF9fTlJfc29ja2V0CQkJKF9fTlJfTGludXggKyAxODMpCisjZGVmaW5lIF9fTlJfc29ja2V0cGFpcgkJCShfX05SX0xpbnV4ICsgMTg0KQorI2RlZmluZSBfX05SX3NldHJlc3VpZAkJCShfX05SX0xpbnV4ICsgMTg1KQorI2RlZmluZSBfX05SX2dldHJlc3VpZAkJCShfX05SX0xpbnV4ICsgMTg2KQorI2RlZmluZSBfX05SX3F1ZXJ5X21vZHVsZQkJKF9fTlJfTGludXggKyAxODcpCisjZGVmaW5lIF9fTlJfcG9sbAkJCShfX05SX0xpbnV4ICsgMTg4KQorI2RlZmluZSBfX05SX25mc3NlcnZjdGwJCQkoX19OUl9MaW51eCArIDE4OSkKKyNkZWZpbmUgX19OUl9zZXRyZXNnaWQJCQkoX19OUl9MaW51eCArIDE5MCkKKyNkZWZpbmUgX19OUl9nZXRyZXNnaWQJCQkoX19OUl9MaW51eCArIDE5MSkKKyNkZWZpbmUgX19OUl9wcmN0bAkJCShfX05SX0xpbnV4ICsgMTkyKQorI2RlZmluZSBfX05SX3J0X3NpZ3JldHVybgkJKF9fTlJfTGludXggKyAxOTMpCisjZGVmaW5lIF9fTlJfcnRfc2lnYWN0aW9uCQkoX19OUl9MaW51eCArIDE5NCkKKyNkZWZpbmUgX19OUl9ydF9zaWdwcm9jbWFzawkJKF9fTlJfTGludXggKyAxOTUpCisjZGVmaW5lIF9fTlJfcnRfc2lncGVuZGluZwkJKF9fTlJfTGludXggKyAxOTYpCisjZGVmaW5lIF9fTlJfcnRfc2lndGltZWR3YWl0CQkoX19OUl9MaW51eCArIDE5NykKKyNkZWZpbmUgX19OUl9ydF9zaWdxdWV1ZWluZm8JCShfX05SX0xpbnV4ICsgMTk4KQorI2RlZmluZSBfX05SX3J0X3NpZ3N1c3BlbmQJCShfX05SX0xpbnV4ICsgMTk5KQorI2RlZmluZSBfX05SX3ByZWFkNjQJCQkoX19OUl9MaW51eCArIDIwMCkKKyNkZWZpbmUgX19OUl9wd3JpdGU2NAkJCShfX05SX0xpbnV4ICsgMjAxKQorI2RlZmluZSBfX05SX2Nob3duCQkJKF9fTlJfTGludXggKyAyMDIpCisjZGVmaW5lIF9fTlJfZ2V0Y3dkCQkJKF9fTlJfTGludXggKyAyMDMpCisjZGVmaW5lIF9fTlJfY2FwZ2V0CQkJKF9fTlJfTGludXggKyAyMDQpCisjZGVmaW5lIF9fTlJfY2Fwc2V0CQkJKF9fTlJfTGludXggKyAyMDUpCisjZGVmaW5lIF9fTlJfc2lnYWx0c3RhY2sJCShfX05SX0xpbnV4ICsgMjA2KQorI2RlZmluZSBfX05SX3NlbmRmaWxlCQkJKF9fTlJfTGludXggKyAyMDcpCisjZGVmaW5lIF9fTlJfZ2V0cG1zZwkJCShfX05SX0xpbnV4ICsgMjA4KQorI2RlZmluZSBfX05SX3B1dHBtc2cJCQkoX19OUl9MaW51eCArIDIwOSkKKyNkZWZpbmUgX19OUl9tbWFwMgkJCShfX05SX0xpbnV4ICsgMjEwKQorI2RlZmluZSBfX05SX3RydW5jYXRlNjQJCQkoX19OUl9MaW51eCArIDIxMSkKKyNkZWZpbmUgX19OUl9mdHJ1bmNhdGU2NAkJKF9fTlJfTGludXggKyAyMTIpCisjZGVmaW5lIF9fTlJfc3RhdDY0CQkJKF9fTlJfTGludXggKyAyMTMpCisjZGVmaW5lIF9fTlJfbHN0YXQ2NAkJCShfX05SX0xpbnV4ICsgMjE0KQorI2RlZmluZSBfX05SX2ZzdGF0NjQJCQkoX19OUl9MaW51eCArIDIxNSkKKyNkZWZpbmUgX19OUl9waXZvdF9yb290CQkJKF9fTlJfTGludXggKyAyMTYpCisjZGVmaW5lIF9fTlJfbWluY29yZQkJCShfX05SX0xpbnV4ICsgMjE3KQorI2RlZmluZSBfX05SX21hZHZpc2UJCQkoX19OUl9MaW51eCArIDIxOCkKKyNkZWZpbmUgX19OUl9nZXRkZW50czY0CQkJKF9fTlJfTGludXggKyAyMTkpCisjZGVmaW5lIF9fTlJfZmNudGw2NAkJCShfX05SX0xpbnV4ICsgMjIwKQorI2RlZmluZSBfX05SX3Jlc2VydmVkMjIxCQkoX19OUl9MaW51eCArIDIyMSkKKyNkZWZpbmUgX19OUl9nZXR0aWQJCQkoX19OUl9MaW51eCArIDIyMikKKyNkZWZpbmUgX19OUl9yZWFkYWhlYWQJCQkoX19OUl9MaW51eCArIDIyMykKKyNkZWZpbmUgX19OUl9zZXR4YXR0cgkJCShfX05SX0xpbnV4ICsgMjI0KQorI2RlZmluZSBfX05SX2xzZXR4YXR0cgkJCShfX05SX0xpbnV4ICsgMjI1KQorI2RlZmluZSBfX05SX2ZzZXR4YXR0cgkJCShfX05SX0xpbnV4ICsgMjI2KQorI2RlZmluZSBfX05SX2dldHhhdHRyCQkJKF9fTlJfTGludXggKyAyMjcpCisjZGVmaW5lIF9fTlJfbGdldHhhdHRyCQkJKF9fTlJfTGludXggKyAyMjgpCisjZGVmaW5lIF9fTlJfZmdldHhhdHRyCQkJKF9fTlJfTGludXggKyAyMjkpCisjZGVmaW5lIF9fTlJfbGlzdHhhdHRyCQkJKF9fTlJfTGludXggKyAyMzApCisjZGVmaW5lIF9fTlJfbGxpc3R4YXR0cgkJCShfX05SX0xpbnV4ICsgMjMxKQorI2RlZmluZSBfX05SX2ZsaXN0eGF0dHIJCQkoX19OUl9MaW51eCArIDIzMikKKyNkZWZpbmUgX19OUl9yZW1vdmV4YXR0cgkJKF9fTlJfTGludXggKyAyMzMpCisjZGVmaW5lIF9fTlJfbHJlbW92ZXhhdHRyCQkoX19OUl9MaW51eCArIDIzNCkKKyNkZWZpbmUgX19OUl9mcmVtb3ZleGF0dHIJCShfX05SX0xpbnV4ICsgMjM1KQorI2RlZmluZSBfX05SX3RraWxsCQkJKF9fTlJfTGludXggKyAyMzYpCisjZGVmaW5lIF9fTlJfc2VuZGZpbGU2NAkJCShfX05SX0xpbnV4ICsgMjM3KQorI2RlZmluZSBfX05SX2Z1dGV4CQkJKF9fTlJfTGludXggKyAyMzgpCisjZGVmaW5lIF9fTlJfc2NoZWRfc2V0YWZmaW5pdHkJCShfX05SX0xpbnV4ICsgMjM5KQorI2RlZmluZSBfX05SX3NjaGVkX2dldGFmZmluaXR5CQkoX19OUl9MaW51eCArIDI0MCkKKyNkZWZpbmUgX19OUl9pb19zZXR1cAkJCShfX05SX0xpbnV4ICsgMjQxKQorI2RlZmluZSBfX05SX2lvX2Rlc3Ryb3kJCQkoX19OUl9MaW51eCArIDI0MikKKyNkZWZpbmUgX19OUl9pb19nZXRldmVudHMJCShfX05SX0xpbnV4ICsgMjQzKQorI2RlZmluZSBfX05SX2lvX3N1Ym1pdAkJCShfX05SX0xpbnV4ICsgMjQ0KQorI2RlZmluZSBfX05SX2lvX2NhbmNlbAkJCShfX05SX0xpbnV4ICsgMjQ1KQorI2RlZmluZSBfX05SX2V4aXRfZ3JvdXAJCQkoX19OUl9MaW51eCArIDI0NikKKyNkZWZpbmUgX19OUl9sb29rdXBfZGNvb2tpZQkJKF9fTlJfTGludXggKyAyNDcpCisjZGVmaW5lIF9fTlJfZXBvbGxfY3JlYXRlCQkoX19OUl9MaW51eCArIDI0OCkKKyNkZWZpbmUgX19OUl9lcG9sbF9jdGwJCQkoX19OUl9MaW51eCArIDI0OSkKKyNkZWZpbmUgX19OUl9lcG9sbF93YWl0CQkJKF9fTlJfTGludXggKyAyNTApCisjZGVmaW5lIF9fTlJfcmVtYXBfZmlsZV9wYWdlcwkJKF9fTlJfTGludXggKyAyNTEpCisjZGVmaW5lIF9fTlJfc2V0X3RpZF9hZGRyZXNzCQkoX19OUl9MaW51eCArIDI1MikKKyNkZWZpbmUgX19OUl9yZXN0YXJ0X3N5c2NhbGwJCShfX05SX0xpbnV4ICsgMjUzKQorI2RlZmluZSBfX05SX2ZhZHZpc2U2NAkJCShfX05SX0xpbnV4ICsgMjU0KQorI2RlZmluZSBfX05SX3N0YXRmczY0CQkJKF9fTlJfTGludXggKyAyNTUpCisjZGVmaW5lIF9fTlJfZnN0YXRmczY0CQkJKF9fTlJfTGludXggKyAyNTYpCisjZGVmaW5lIF9fTlJfdGltZXJfY3JlYXRlCQkoX19OUl9MaW51eCArIDI1NykKKyNkZWZpbmUgX19OUl90aW1lcl9zZXR0aW1lCQkoX19OUl9MaW51eCArIDI1OCkKKyNkZWZpbmUgX19OUl90aW1lcl9nZXR0aW1lCQkoX19OUl9MaW51eCArIDI1OSkKKyNkZWZpbmUgX19OUl90aW1lcl9nZXRvdmVycnVuCQkoX19OUl9MaW51eCArIDI2MCkKKyNkZWZpbmUgX19OUl90aW1lcl9kZWxldGUJCShfX05SX0xpbnV4ICsgMjYxKQorI2RlZmluZSBfX05SX2Nsb2NrX3NldHRpbWUJCShfX05SX0xpbnV4ICsgMjYyKQorI2RlZmluZSBfX05SX2Nsb2NrX2dldHRpbWUJCShfX05SX0xpbnV4ICsgMjYzKQorI2RlZmluZSBfX05SX2Nsb2NrX2dldHJlcwkJKF9fTlJfTGludXggKyAyNjQpCisjZGVmaW5lIF9fTlJfY2xvY2tfbmFub3NsZWVwCQkoX19OUl9MaW51eCArIDI2NSkKKyNkZWZpbmUgX19OUl90Z2tpbGwJCQkoX19OUl9MaW51eCArIDI2NikKKyNkZWZpbmUgX19OUl91dGltZXMJCQkoX19OUl9MaW51eCArIDI2NykKKyNkZWZpbmUgX19OUl9tYmluZAkJCShfX05SX0xpbnV4ICsgMjY4KQorI2RlZmluZSBfX05SX2dldF9tZW1wb2xpY3kJCShfX05SX0xpbnV4ICsgMjY5KQorI2RlZmluZSBfX05SX3NldF9tZW1wb2xpY3kJCShfX05SX0xpbnV4ICsgMjcwKQorI2RlZmluZSBfX05SX21xX29wZW4JCQkoX19OUl9MaW51eCArIDI3MSkKKyNkZWZpbmUgX19OUl9tcV91bmxpbmsJCQkoX19OUl9MaW51eCArIDI3MikKKyNkZWZpbmUgX19OUl9tcV90aW1lZHNlbmQJCShfX05SX0xpbnV4ICsgMjczKQorI2RlZmluZSBfX05SX21xX3RpbWVkcmVjZWl2ZQkJKF9fTlJfTGludXggKyAyNzQpCisjZGVmaW5lIF9fTlJfbXFfbm90aWZ5CQkJKF9fTlJfTGludXggKyAyNzUpCisjZGVmaW5lIF9fTlJfbXFfZ2V0c2V0YXR0cgkJKF9fTlJfTGludXggKyAyNzYpCisjZGVmaW5lIF9fTlJfdnNlcnZlcgkJCShfX05SX0xpbnV4ICsgMjc3KQorI2RlZmluZSBfX05SX3dhaXRpZAkJCShfX05SX0xpbnV4ICsgMjc4KQorLyogI2RlZmluZSBfX05SX3N5c19zZXRhbHRyb290CQkoX19OUl9MaW51eCArIDI3OSkgKi8KKyNkZWZpbmUgX19OUl9hZGRfa2V5CQkJKF9fTlJfTGludXggKyAyODApCisjZGVmaW5lIF9fTlJfcmVxdWVzdF9rZXkJCShfX05SX0xpbnV4ICsgMjgxKQorI2RlZmluZSBfX05SX2tleWN0bAkJCShfX05SX0xpbnV4ICsgMjgyKQorCisvKgorICogT2Zmc2V0IG9mIHRoZSBsYXN0IExpbnV4IG8zMiBmbGF2b3VyZWQgc3lzY2FsbAorICovCisjZGVmaW5lIF9fTlJfTGludXhfc3lzY2FsbHMJCTI4MgorCisjZW5kaWYgLyogX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkkzMiAqLworCisjZGVmaW5lIF9fTlJfTzMyX0xpbnV4CQkJNDAwMAorI2RlZmluZSBfX05SX08zMl9MaW51eF9zeXNjYWxscwkJMjgyCisKKyNpZiBfTUlQU19TSU0gPT0gX01JUFNfU0lNX0FCSTY0CisKKy8qCisgKiBMaW51eCA2NC1iaXQgc3lzY2FsbHMgYXJlIGluIHRoZSByYW5nZSBmcm9tIDUwMDAgdG8gNTk5OS4KKyAqLworI2RlZmluZSBfX05SX0xpbnV4CQkJNTAwMAorI2RlZmluZSBfX05SX3JlYWQJCQkoX19OUl9MaW51eCArICAgMCkKKyNkZWZpbmUgX19OUl93cml0ZQkJCShfX05SX0xpbnV4ICsgICAxKQorI2RlZmluZSBfX05SX29wZW4JCQkoX19OUl9MaW51eCArICAgMikKKyNkZWZpbmUgX19OUl9jbG9zZQkJCShfX05SX0xpbnV4ICsgICAzKQorI2RlZmluZSBfX05SX3N0YXQJCQkoX19OUl9MaW51eCArICAgNCkKKyNkZWZpbmUgX19OUl9mc3RhdAkJCShfX05SX0xpbnV4ICsgICA1KQorI2RlZmluZSBfX05SX2xzdGF0CQkJKF9fTlJfTGludXggKyAgIDYpCisjZGVmaW5lIF9fTlJfcG9sbAkJCShfX05SX0xpbnV4ICsgICA3KQorI2RlZmluZSBfX05SX2xzZWVrCQkJKF9fTlJfTGludXggKyAgIDgpCisjZGVmaW5lIF9fTlJfbW1hcAkJCShfX05SX0xpbnV4ICsgICA5KQorI2RlZmluZSBfX05SX21wcm90ZWN0CQkJKF9fTlJfTGludXggKyAgMTApCisjZGVmaW5lIF9fTlJfbXVubWFwCQkJKF9fTlJfTGludXggKyAgMTEpCisjZGVmaW5lIF9fTlJfYnJrCQkJKF9fTlJfTGludXggKyAgMTIpCisjZGVmaW5lIF9fTlJfcnRfc2lnYWN0aW9uCQkoX19OUl9MaW51eCArICAxMykKKyNkZWZpbmUgX19OUl9ydF9zaWdwcm9jbWFzawkJKF9fTlJfTGludXggKyAgMTQpCisjZGVmaW5lIF9fTlJfaW9jdGwJCQkoX19OUl9MaW51eCArICAxNSkKKyNkZWZpbmUgX19OUl9wcmVhZDY0CQkJKF9fTlJfTGludXggKyAgMTYpCisjZGVmaW5lIF9fTlJfcHdyaXRlNjQJCQkoX19OUl9MaW51eCArICAxNykKKyNkZWZpbmUgX19OUl9yZWFkdgkJCShfX05SX0xpbnV4ICsgIDE4KQorI2RlZmluZSBfX05SX3dyaXRldgkJCShfX05SX0xpbnV4ICsgIDE5KQorI2RlZmluZSBfX05SX2FjY2VzcwkJCShfX05SX0xpbnV4ICsgIDIwKQorI2RlZmluZSBfX05SX3BpcGUJCQkoX19OUl9MaW51eCArICAyMSkKKyNkZWZpbmUgX19OUl9fbmV3c2VsZWN0CQkJKF9fTlJfTGludXggKyAgMjIpCisjZGVmaW5lIF9fTlJfc2NoZWRfeWllbGQJCShfX05SX0xpbnV4ICsgIDIzKQorI2RlZmluZSBfX05SX21yZW1hcAkJCShfX05SX0xpbnV4ICsgIDI0KQorI2RlZmluZSBfX05SX21zeW5jCQkJKF9fTlJfTGludXggKyAgMjUpCisjZGVmaW5lIF9fTlJfbWluY29yZQkJCShfX05SX0xpbnV4ICsgIDI2KQorI2RlZmluZSBfX05SX21hZHZpc2UJCQkoX19OUl9MaW51eCArICAyNykKKyNkZWZpbmUgX19OUl9zaG1nZXQJCQkoX19OUl9MaW51eCArICAyOCkKKyNkZWZpbmUgX19OUl9zaG1hdAkJCShfX05SX0xpbnV4ICsgIDI5KQorI2RlZmluZSBfX05SX3NobWN0bAkJCShfX05SX0xpbnV4ICsgIDMwKQorI2RlZmluZSBfX05SX2R1cAkJCShfX05SX0xpbnV4ICsgIDMxKQorI2RlZmluZSBfX05SX2R1cDIJCQkoX19OUl9MaW51eCArICAzMikKKyNkZWZpbmUgX19OUl9wYXVzZQkJCShfX05SX0xpbnV4ICsgIDMzKQorI2RlZmluZSBfX05SX25hbm9zbGVlcAkJCShfX05SX0xpbnV4ICsgIDM0KQorI2RlZmluZSBfX05SX2dldGl0aW1lcgkJCShfX05SX0xpbnV4ICsgIDM1KQorI2RlZmluZSBfX05SX3NldGl0aW1lcgkJCShfX05SX0xpbnV4ICsgIDM2KQorI2RlZmluZSBfX05SX2FsYXJtCQkJKF9fTlJfTGludXggKyAgMzcpCisjZGVmaW5lIF9fTlJfZ2V0cGlkCQkJKF9fTlJfTGludXggKyAgMzgpCisjZGVmaW5lIF9fTlJfc2VuZGZpbGUJCQkoX19OUl9MaW51eCArICAzOSkKKyNkZWZpbmUgX19OUl9zb2NrZXQJCQkoX19OUl9MaW51eCArICA0MCkKKyNkZWZpbmUgX19OUl9jb25uZWN0CQkJKF9fTlJfTGludXggKyAgNDEpCisjZGVmaW5lIF9fTlJfYWNjZXB0CQkJKF9fTlJfTGludXggKyAgNDIpCisjZGVmaW5lIF9fTlJfc2VuZHRvCQkJKF9fTlJfTGludXggKyAgNDMpCisjZGVmaW5lIF9fTlJfcmVjdmZyb20JCQkoX19OUl9MaW51eCArICA0NCkKKyNkZWZpbmUgX19OUl9zZW5kbXNnCQkJKF9fTlJfTGludXggKyAgNDUpCisjZGVmaW5lIF9fTlJfcmVjdm1zZwkJCShfX05SX0xpbnV4ICsgIDQ2KQorI2RlZmluZSBfX05SX3NodXRkb3duCQkJKF9fTlJfTGludXggKyAgNDcpCisjZGVmaW5lIF9fTlJfYmluZAkJCShfX05SX0xpbnV4ICsgIDQ4KQorI2RlZmluZSBfX05SX2xpc3RlbgkJCShfX05SX0xpbnV4ICsgIDQ5KQorI2RlZmluZSBfX05SX2dldHNvY2tuYW1lCQkoX19OUl9MaW51eCArICA1MCkKKyNkZWZpbmUgX19OUl9nZXRwZWVybmFtZQkJKF9fTlJfTGludXggKyAgNTEpCisjZGVmaW5lIF9fTlJfc29ja2V0cGFpcgkJCShfX05SX0xpbnV4ICsgIDUyKQorI2RlZmluZSBfX05SX3NldHNvY2tvcHQJCQkoX19OUl9MaW51eCArICA1MykKKyNkZWZpbmUgX19OUl9nZXRzb2Nrb3B0CQkJKF9fTlJfTGludXggKyAgNTQpCisjZGVmaW5lIF9fTlJfY2xvbmUJCQkoX19OUl9MaW51eCArICA1NSkKKyNkZWZpbmUgX19OUl9mb3JrCQkJKF9fTlJfTGludXggKyAgNTYpCisjZGVmaW5lIF9fTlJfZXhlY3ZlCQkJKF9fTlJfTGludXggKyAgNTcpCisjZGVmaW5lIF9fTlJfZXhpdAkJCShfX05SX0xpbnV4ICsgIDU4KQorI2RlZmluZSBfX05SX3dhaXQ0CQkJKF9fTlJfTGludXggKyAgNTkpCisjZGVmaW5lIF9fTlJfa2lsbAkJCShfX05SX0xpbnV4ICsgIDYwKQorI2RlZmluZSBfX05SX3VuYW1lCQkJKF9fTlJfTGludXggKyAgNjEpCisjZGVmaW5lIF9fTlJfc2VtZ2V0CQkJKF9fTlJfTGludXggKyAgNjIpCisjZGVmaW5lIF9fTlJfc2Vtb3AJCQkoX19OUl9MaW51eCArICA2MykKKyNkZWZpbmUgX19OUl9zZW1jdGwJCQkoX19OUl9MaW51eCArICA2NCkKKyNkZWZpbmUgX19OUl9zaG1kdAkJCShfX05SX0xpbnV4ICsgIDY1KQorI2RlZmluZSBfX05SX21zZ2dldAkJCShfX05SX0xpbnV4ICsgIDY2KQorI2RlZmluZSBfX05SX21zZ3NuZAkJCShfX05SX0xpbnV4ICsgIDY3KQorI2RlZmluZSBfX05SX21zZ3JjdgkJCShfX05SX0xpbnV4ICsgIDY4KQorI2RlZmluZSBfX05SX21zZ2N0bAkJCShfX05SX0xpbnV4ICsgIDY5KQorI2RlZmluZSBfX05SX2ZjbnRsCQkJKF9fTlJfTGludXggKyAgNzApCisjZGVmaW5lIF9fTlJfZmxvY2sJCQkoX19OUl9MaW51eCArICA3MSkKKyNkZWZpbmUgX19OUl9mc3luYwkJCShfX05SX0xpbnV4ICsgIDcyKQorI2RlZmluZSBfX05SX2ZkYXRhc3luYwkJCShfX05SX0xpbnV4ICsgIDczKQorI2RlZmluZSBfX05SX3RydW5jYXRlCQkJKF9fTlJfTGludXggKyAgNzQpCisjZGVmaW5lIF9fTlJfZnRydW5jYXRlCQkJKF9fTlJfTGludXggKyAgNzUpCisjZGVmaW5lIF9fTlJfZ2V0ZGVudHMJCQkoX19OUl9MaW51eCArICA3NikKKyNkZWZpbmUgX19OUl9nZXRjd2QJCQkoX19OUl9MaW51eCArICA3NykKKyNkZWZpbmUgX19OUl9jaGRpcgkJCShfX05SX0xpbnV4ICsgIDc4KQorI2RlZmluZSBfX05SX2ZjaGRpcgkJCShfX05SX0xpbnV4ICsgIDc5KQorI2RlZmluZSBfX05SX3JlbmFtZQkJCShfX05SX0xpbnV4ICsgIDgwKQorI2RlZmluZSBfX05SX21rZGlyCQkJKF9fTlJfTGludXggKyAgODEpCisjZGVmaW5lIF9fTlJfcm1kaXIJCQkoX19OUl9MaW51eCArICA4MikKKyNkZWZpbmUgX19OUl9jcmVhdAkJCShfX05SX0xpbnV4ICsgIDgzKQorI2RlZmluZSBfX05SX2xpbmsJCQkoX19OUl9MaW51eCArICA4NCkKKyNkZWZpbmUgX19OUl91bmxpbmsJCQkoX19OUl9MaW51eCArICA4NSkKKyNkZWZpbmUgX19OUl9zeW1saW5rCQkJKF9fTlJfTGludXggKyAgODYpCisjZGVmaW5lIF9fTlJfcmVhZGxpbmsJCQkoX19OUl9MaW51eCArICA4NykKKyNkZWZpbmUgX19OUl9jaG1vZAkJCShfX05SX0xpbnV4ICsgIDg4KQorI2RlZmluZSBfX05SX2ZjaG1vZAkJCShfX05SX0xpbnV4ICsgIDg5KQorI2RlZmluZSBfX05SX2Nob3duCQkJKF9fTlJfTGludXggKyAgOTApCisjZGVmaW5lIF9fTlJfZmNob3duCQkJKF9fTlJfTGludXggKyAgOTEpCisjZGVmaW5lIF9fTlJfbGNob3duCQkJKF9fTlJfTGludXggKyAgOTIpCisjZGVmaW5lIF9fTlJfdW1hc2sJCQkoX19OUl9MaW51eCArICA5MykKKyNkZWZpbmUgX19OUl9nZXR0aW1lb2ZkYXkJCShfX05SX0xpbnV4ICsgIDk0KQorI2RlZmluZSBfX05SX2dldHJsaW1pdAkJCShfX05SX0xpbnV4ICsgIDk1KQorI2RlZmluZSBfX05SX2dldHJ1c2FnZQkJCShfX05SX0xpbnV4ICsgIDk2KQorI2RlZmluZSBfX05SX3N5c2luZm8JCQkoX19OUl9MaW51eCArICA5NykKKyNkZWZpbmUgX19OUl90aW1lcwkJCShfX05SX0xpbnV4ICsgIDk4KQorI2RlZmluZSBfX05SX3B0cmFjZQkJCShfX05SX0xpbnV4ICsgIDk5KQorI2RlZmluZSBfX05SX2dldHVpZAkJCShfX05SX0xpbnV4ICsgMTAwKQorI2RlZmluZSBfX05SX3N5c2xvZwkJCShfX05SX0xpbnV4ICsgMTAxKQorI2RlZmluZSBfX05SX2dldGdpZAkJCShfX05SX0xpbnV4ICsgMTAyKQorI2RlZmluZSBfX05SX3NldHVpZAkJCShfX05SX0xpbnV4ICsgMTAzKQorI2RlZmluZSBfX05SX3NldGdpZAkJCShfX05SX0xpbnV4ICsgMTA0KQorI2RlZmluZSBfX05SX2dldGV1aWQJCQkoX19OUl9MaW51eCArIDEwNSkKKyNkZWZpbmUgX19OUl9nZXRlZ2lkCQkJKF9fTlJfTGludXggKyAxMDYpCisjZGVmaW5lIF9fTlJfc2V0cGdpZAkJCShfX05SX0xpbnV4ICsgMTA3KQorI2RlZmluZSBfX05SX2dldHBwaWQJCQkoX19OUl9MaW51eCArIDEwOCkKKyNkZWZpbmUgX19OUl9nZXRwZ3JwCQkJKF9fTlJfTGludXggKyAxMDkpCisjZGVmaW5lIF9fTlJfc2V0c2lkCQkJKF9fTlJfTGludXggKyAxMTApCisjZGVmaW5lIF9fTlJfc2V0cmV1aWQJCQkoX19OUl9MaW51eCArIDExMSkKKyNkZWZpbmUgX19OUl9zZXRyZWdpZAkJCShfX05SX0xpbnV4ICsgMTEyKQorI2RlZmluZSBfX05SX2dldGdyb3VwcwkJCShfX05SX0xpbnV4ICsgMTEzKQorI2RlZmluZSBfX05SX3NldGdyb3VwcwkJCShfX05SX0xpbnV4ICsgMTE0KQorI2RlZmluZSBfX05SX3NldHJlc3VpZAkJCShfX05SX0xpbnV4ICsgMTE1KQorI2RlZmluZSBfX05SX2dldHJlc3VpZAkJCShfX05SX0xpbnV4ICsgMTE2KQorI2RlZmluZSBfX05SX3NldHJlc2dpZAkJCShfX05SX0xpbnV4ICsgMTE3KQorI2RlZmluZSBfX05SX2dldHJlc2dpZAkJCShfX05SX0xpbnV4ICsgMTE4KQorI2RlZmluZSBfX05SX2dldHBnaWQJCQkoX19OUl9MaW51eCArIDExOSkKKyNkZWZpbmUgX19OUl9zZXRmc3VpZAkJCShfX05SX0xpbnV4ICsgMTIwKQorI2RlZmluZSBfX05SX3NldGZzZ2lkCQkJKF9fTlJfTGludXggKyAxMjEpCisjZGVmaW5lIF9fTlJfZ2V0c2lkCQkJKF9fTlJfTGludXggKyAxMjIpCisjZGVmaW5lIF9fTlJfY2FwZ2V0CQkJKF9fTlJfTGludXggKyAxMjMpCisjZGVmaW5lIF9fTlJfY2Fwc2V0CQkJKF9fTlJfTGludXggKyAxMjQpCisjZGVmaW5lIF9fTlJfcnRfc2lncGVuZGluZwkJKF9fTlJfTGludXggKyAxMjUpCisjZGVmaW5lIF9fTlJfcnRfc2lndGltZWR3YWl0CQkoX19OUl9MaW51eCArIDEyNikKKyNkZWZpbmUgX19OUl9ydF9zaWdxdWV1ZWluZm8JCShfX05SX0xpbnV4ICsgMTI3KQorI2RlZmluZSBfX05SX3J0X3NpZ3N1c3BlbmQJCShfX05SX0xpbnV4ICsgMTI4KQorI2RlZmluZSBfX05SX3NpZ2FsdHN0YWNrCQkoX19OUl9MaW51eCArIDEyOSkKKyNkZWZpbmUgX19OUl91dGltZQkJCShfX05SX0xpbnV4ICsgMTMwKQorI2RlZmluZSBfX05SX21rbm9kCQkJKF9fTlJfTGludXggKyAxMzEpCisjZGVmaW5lIF9fTlJfcGVyc29uYWxpdHkJCShfX05SX0xpbnV4ICsgMTMyKQorI2RlZmluZSBfX05SX3VzdGF0CQkJKF9fTlJfTGludXggKyAxMzMpCisjZGVmaW5lIF9fTlJfc3RhdGZzCQkJKF9fTlJfTGludXggKyAxMzQpCisjZGVmaW5lIF9fTlJfZnN0YXRmcwkJCShfX05SX0xpbnV4ICsgMTM1KQorI2RlZmluZSBfX05SX3N5c2ZzCQkJKF9fTlJfTGludXggKyAxMzYpCisjZGVmaW5lIF9fTlJfZ2V0cHJpb3JpdHkJCShfX05SX0xpbnV4ICsgMTM3KQorI2RlZmluZSBfX05SX3NldHByaW9yaXR5CQkoX19OUl9MaW51eCArIDEzOCkKKyNkZWZpbmUgX19OUl9zY2hlZF9zZXRwYXJhbQkJKF9fTlJfTGludXggKyAxMzkpCisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0cGFyYW0JCShfX05SX0xpbnV4ICsgMTQwKQorI2RlZmluZSBfX05SX3NjaGVkX3NldHNjaGVkdWxlcgkJKF9fTlJfTGludXggKyAxNDEpCisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0c2NoZWR1bGVyCQkoX19OUl9MaW51eCArIDE0MikKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4CShfX05SX0xpbnV4ICsgMTQzKQorI2RlZmluZSBfX05SX3NjaGVkX2dldF9wcmlvcml0eV9taW4JKF9fTlJfTGludXggKyAxNDQpCisjZGVmaW5lIF9fTlJfc2NoZWRfcnJfZ2V0X2ludGVydmFsCShfX05SX0xpbnV4ICsgMTQ1KQorI2RlZmluZSBfX05SX21sb2NrCQkJKF9fTlJfTGludXggKyAxNDYpCisjZGVmaW5lIF9fTlJfbXVubG9jawkJCShfX05SX0xpbnV4ICsgMTQ3KQorI2RlZmluZSBfX05SX21sb2NrYWxsCQkJKF9fTlJfTGludXggKyAxNDgpCisjZGVmaW5lIF9fTlJfbXVubG9ja2FsbAkJCShfX05SX0xpbnV4ICsgMTQ5KQorI2RlZmluZSBfX05SX3ZoYW5ndXAJCQkoX19OUl9MaW51eCArIDE1MCkKKyNkZWZpbmUgX19OUl9waXZvdF9yb290CQkJKF9fTlJfTGludXggKyAxNTEpCisjZGVmaW5lIF9fTlJfX3N5c2N0bAkJCShfX05SX0xpbnV4ICsgMTUyKQorI2RlZmluZSBfX05SX3ByY3RsCQkJKF9fTlJfTGludXggKyAxNTMpCisjZGVmaW5lIF9fTlJfYWRqdGltZXgJCQkoX19OUl9MaW51eCArIDE1NCkKKyNkZWZpbmUgX19OUl9zZXRybGltaXQJCQkoX19OUl9MaW51eCArIDE1NSkKKyNkZWZpbmUgX19OUl9jaHJvb3QJCQkoX19OUl9MaW51eCArIDE1NikKKyNkZWZpbmUgX19OUl9zeW5jCQkJKF9fTlJfTGludXggKyAxNTcpCisjZGVmaW5lIF9fTlJfYWNjdAkJCShfX05SX0xpbnV4ICsgMTU4KQorI2RlZmluZSBfX05SX3NldHRpbWVvZmRheQkJKF9fTlJfTGludXggKyAxNTkpCisjZGVmaW5lIF9fTlJfbW91bnQJCQkoX19OUl9MaW51eCArIDE2MCkKKyNkZWZpbmUgX19OUl91bW91bnQyCQkJKF9fTlJfTGludXggKyAxNjEpCisjZGVmaW5lIF9fTlJfc3dhcG9uCQkJKF9fTlJfTGludXggKyAxNjIpCisjZGVmaW5lIF9fTlJfc3dhcG9mZgkJCShfX05SX0xpbnV4ICsgMTYzKQorI2RlZmluZSBfX05SX3JlYm9vdAkJCShfX05SX0xpbnV4ICsgMTY0KQorI2RlZmluZSBfX05SX3NldGhvc3RuYW1lCQkoX19OUl9MaW51eCArIDE2NSkKKyNkZWZpbmUgX19OUl9zZXRkb21haW5uYW1lCQkoX19OUl9MaW51eCArIDE2NikKKyNkZWZpbmUgX19OUl9jcmVhdGVfbW9kdWxlCQkoX19OUl9MaW51eCArIDE2NykKKyNkZWZpbmUgX19OUl9pbml0X21vZHVsZQkJKF9fTlJfTGludXggKyAxNjgpCisjZGVmaW5lIF9fTlJfZGVsZXRlX21vZHVsZQkJKF9fTlJfTGludXggKyAxNjkpCisjZGVmaW5lIF9fTlJfZ2V0X2tlcm5lbF9zeW1zCQkoX19OUl9MaW51eCArIDE3MCkKKyNkZWZpbmUgX19OUl9xdWVyeV9tb2R1bGUJCShfX05SX0xpbnV4ICsgMTcxKQorI2RlZmluZSBfX05SX3F1b3RhY3RsCQkJKF9fTlJfTGludXggKyAxNzIpCisjZGVmaW5lIF9fTlJfbmZzc2VydmN0bAkJCShfX05SX0xpbnV4ICsgMTczKQorI2RlZmluZSBfX05SX2dldHBtc2cJCQkoX19OUl9MaW51eCArIDE3NCkKKyNkZWZpbmUgX19OUl9wdXRwbXNnCQkJKF9fTlJfTGludXggKyAxNzUpCisjZGVmaW5lIF9fTlJfYWZzX3N5c2NhbGwJCShfX05SX0xpbnV4ICsgMTc2KQorI2RlZmluZSBfX05SX3Jlc2VydmVkMTc3CQkoX19OUl9MaW51eCArIDE3NykKKyNkZWZpbmUgX19OUl9nZXR0aWQJCQkoX19OUl9MaW51eCArIDE3OCkKKyNkZWZpbmUgX19OUl9yZWFkYWhlYWQJCQkoX19OUl9MaW51eCArIDE3OSkKKyNkZWZpbmUgX19OUl9zZXR4YXR0cgkJCShfX05SX0xpbnV4ICsgMTgwKQorI2RlZmluZSBfX05SX2xzZXR4YXR0cgkJCShfX05SX0xpbnV4ICsgMTgxKQorI2RlZmluZSBfX05SX2ZzZXR4YXR0cgkJCShfX05SX0xpbnV4ICsgMTgyKQorI2RlZmluZSBfX05SX2dldHhhdHRyCQkJKF9fTlJfTGludXggKyAxODMpCisjZGVmaW5lIF9fTlJfbGdldHhhdHRyCQkJKF9fTlJfTGludXggKyAxODQpCisjZGVmaW5lIF9fTlJfZmdldHhhdHRyCQkJKF9fTlJfTGludXggKyAxODUpCisjZGVmaW5lIF9fTlJfbGlzdHhhdHRyCQkJKF9fTlJfTGludXggKyAxODYpCisjZGVmaW5lIF9fTlJfbGxpc3R4YXR0cgkJCShfX05SX0xpbnV4ICsgMTg3KQorI2RlZmluZSBfX05SX2ZsaXN0eGF0dHIJCQkoX19OUl9MaW51eCArIDE4OCkKKyNkZWZpbmUgX19OUl9yZW1vdmV4YXR0cgkJKF9fTlJfTGludXggKyAxODkpCisjZGVmaW5lIF9fTlJfbHJlbW92ZXhhdHRyCQkoX19OUl9MaW51eCArIDE5MCkKKyNkZWZpbmUgX19OUl9mcmVtb3ZleGF0dHIJCShfX05SX0xpbnV4ICsgMTkxKQorI2RlZmluZSBfX05SX3RraWxsCQkJKF9fTlJfTGludXggKyAxOTIpCisjZGVmaW5lIF9fTlJfcmVzZXJ2ZWQxOTMJCShfX05SX0xpbnV4ICsgMTkzKQorI2RlZmluZSBfX05SX2Z1dGV4CQkJKF9fTlJfTGludXggKyAxOTQpCisjZGVmaW5lIF9fTlJfc2NoZWRfc2V0YWZmaW5pdHkJCShfX05SX0xpbnV4ICsgMTk1KQorI2RlZmluZSBfX05SX3NjaGVkX2dldGFmZmluaXR5CQkoX19OUl9MaW51eCArIDE5NikKKyNkZWZpbmUgX19OUl9jYWNoZWZsdXNoCQkJKF9fTlJfTGludXggKyAxOTcpCisjZGVmaW5lIF9fTlJfY2FjaGVjdGwJCQkoX19OUl9MaW51eCArIDE5OCkKKyNkZWZpbmUgX19OUl9zeXNtaXBzCQkJKF9fTlJfTGludXggKyAxOTkpCisjZGVmaW5lIF9fTlJfaW9fc2V0dXAJCQkoX19OUl9MaW51eCArIDIwMCkKKyNkZWZpbmUgX19OUl9pb19kZXN0cm95CQkJKF9fTlJfTGludXggKyAyMDEpCisjZGVmaW5lIF9fTlJfaW9fZ2V0ZXZlbnRzCQkoX19OUl9MaW51eCArIDIwMikKKyNkZWZpbmUgX19OUl9pb19zdWJtaXQJCQkoX19OUl9MaW51eCArIDIwMykKKyNkZWZpbmUgX19OUl9pb19jYW5jZWwJCQkoX19OUl9MaW51eCArIDIwNCkKKyNkZWZpbmUgX19OUl9leGl0X2dyb3VwCQkJKF9fTlJfTGludXggKyAyMDUpCisjZGVmaW5lIF9fTlJfbG9va3VwX2Rjb29raWUJCShfX05SX0xpbnV4ICsgMjA2KQorI2RlZmluZSBfX05SX2Vwb2xsX2NyZWF0ZQkJKF9fTlJfTGludXggKyAyMDcpCisjZGVmaW5lIF9fTlJfZXBvbGxfY3RsCQkJKF9fTlJfTGludXggKyAyMDgpCisjZGVmaW5lIF9fTlJfZXBvbGxfd2FpdAkJCShfX05SX0xpbnV4ICsgMjA5KQorI2RlZmluZSBfX05SX3JlbWFwX2ZpbGVfcGFnZXMJCShfX05SX0xpbnV4ICsgMjEwKQorI2RlZmluZSBfX05SX3J0X3NpZ3JldHVybgkJKF9fTlJfTGludXggKyAyMTEpCisjZGVmaW5lIF9fTlJfc2V0X3RpZF9hZGRyZXNzCQkoX19OUl9MaW51eCArIDIxMikKKyNkZWZpbmUgX19OUl9yZXN0YXJ0X3N5c2NhbGwJCShfX05SX0xpbnV4ICsgMjEzKQorI2RlZmluZSBfX05SX3NlbXRpbWVkb3AJCQkoX19OUl9MaW51eCArIDIxNCkKKyNkZWZpbmUgX19OUl9mYWR2aXNlNjQJCQkoX19OUl9MaW51eCArIDIxNSkKKyNkZWZpbmUgX19OUl90aW1lcl9jcmVhdGUJCShfX05SX0xpbnV4ICsgMjE2KQorI2RlZmluZSBfX05SX3RpbWVyX3NldHRpbWUJCShfX05SX0xpbnV4ICsgMjE3KQorI2RlZmluZSBfX05SX3RpbWVyX2dldHRpbWUJCShfX05SX0xpbnV4ICsgMjE4KQorI2RlZmluZSBfX05SX3RpbWVyX2dldG92ZXJydW4JCShfX05SX0xpbnV4ICsgMjE5KQorI2RlZmluZSBfX05SX3RpbWVyX2RlbGV0ZQkJKF9fTlJfTGludXggKyAyMjApCisjZGVmaW5lIF9fTlJfY2xvY2tfc2V0dGltZQkJKF9fTlJfTGludXggKyAyMjEpCisjZGVmaW5lIF9fTlJfY2xvY2tfZ2V0dGltZQkJKF9fTlJfTGludXggKyAyMjIpCisjZGVmaW5lIF9fTlJfY2xvY2tfZ2V0cmVzCQkoX19OUl9MaW51eCArIDIyMykKKyNkZWZpbmUgX19OUl9jbG9ja19uYW5vc2xlZXAJCShfX05SX0xpbnV4ICsgMjI0KQorI2RlZmluZSBfX05SX3Rna2lsbAkJCShfX05SX0xpbnV4ICsgMjI1KQorI2RlZmluZSBfX05SX3V0aW1lcwkJCShfX05SX0xpbnV4ICsgMjI2KQorI2RlZmluZSBfX05SX21iaW5kCQkJKF9fTlJfTGludXggKyAyMjcpCisjZGVmaW5lIF9fTlJfZ2V0X21lbXBvbGljeQkJKF9fTlJfTGludXggKyAyMjgpCisjZGVmaW5lIF9fTlJfc2V0X21lbXBvbGljeQkJKF9fTlJfTGludXggKyAyMjkpCisjZGVmaW5lIF9fTlJfbXFfb3BlbgkJCShfX05SX0xpbnV4ICsgMjMwKQorI2RlZmluZSBfX05SX21xX3VubGluawkJCShfX05SX0xpbnV4ICsgMjMxKQorI2RlZmluZSBfX05SX21xX3RpbWVkc2VuZAkJKF9fTlJfTGludXggKyAyMzIpCisjZGVmaW5lIF9fTlJfbXFfdGltZWRyZWNlaXZlCQkoX19OUl9MaW51eCArIDIzMykKKyNkZWZpbmUgX19OUl9tcV9ub3RpZnkJCQkoX19OUl9MaW51eCArIDIzNCkKKyNkZWZpbmUgX19OUl9tcV9nZXRzZXRhdHRyCQkoX19OUl9MaW51eCArIDIzNSkKKyNkZWZpbmUgX19OUl92c2VydmVyCQkJKF9fTlJfTGludXggKyAyMzYpCisjZGVmaW5lIF9fTlJfd2FpdGlkCQkJKF9fTlJfTGludXggKyAyMzcpCisvKiAjZGVmaW5lIF9fTlJfc3lzX3NldGFsdHJvb3QJCShfX05SX0xpbnV4ICsgMjM4KSAqLworI2RlZmluZSBfX05SX2FkZF9rZXkJCQkoX19OUl9MaW51eCArIDIzOSkKKyNkZWZpbmUgX19OUl9yZXF1ZXN0X2tleQkJKF9fTlJfTGludXggKyAyNDApCisjZGVmaW5lIF9fTlJfa2V5Y3RsCQkJKF9fTlJfTGludXggKyAyNDEpCisKKy8qCisgKiBPZmZzZXQgb2YgdGhlIGxhc3QgTGludXggNjQtYml0IGZsYXZvdXJlZCBzeXNjYWxsCisgKi8KKyNkZWZpbmUgX19OUl9MaW51eF9zeXNjYWxscwkJMjQxCisKKyNlbmRpZiAvKiBfTUlQU19TSU0gPT0gX01JUFNfU0lNX0FCSTY0ICovCisKKyNkZWZpbmUgX19OUl82NF9MaW51eAkJCTUwMDAKKyNkZWZpbmUgX19OUl82NF9MaW51eF9zeXNjYWxscwkJMjQxCisKKyNpZiBfTUlQU19TSU0gPT0gX01JUFNfU0lNX05BQkkzMgorCisvKgorICogTGludXggTjMyIHN5c2NhbGxzIGFyZSBpbiB0aGUgcmFuZ2UgZnJvbSA2MDAwIHRvIDY5OTkuCisgKi8KKyNkZWZpbmUgX19OUl9MaW51eAkJCTYwMDAKKyNkZWZpbmUgX19OUl9yZWFkCQkJKF9fTlJfTGludXggKyAgIDApCisjZGVmaW5lIF9fTlJfd3JpdGUJCQkoX19OUl9MaW51eCArICAgMSkKKyNkZWZpbmUgX19OUl9vcGVuCQkJKF9fTlJfTGludXggKyAgIDIpCisjZGVmaW5lIF9fTlJfY2xvc2UJCQkoX19OUl9MaW51eCArICAgMykKKyNkZWZpbmUgX19OUl9zdGF0CQkJKF9fTlJfTGludXggKyAgIDQpCisjZGVmaW5lIF9fTlJfZnN0YXQJCQkoX19OUl9MaW51eCArICAgNSkKKyNkZWZpbmUgX19OUl9sc3RhdAkJCShfX05SX0xpbnV4ICsgICA2KQorI2RlZmluZSBfX05SX3BvbGwJCQkoX19OUl9MaW51eCArICAgNykKKyNkZWZpbmUgX19OUl9sc2VlawkJCShfX05SX0xpbnV4ICsgICA4KQorI2RlZmluZSBfX05SX21tYXAJCQkoX19OUl9MaW51eCArICAgOSkKKyNkZWZpbmUgX19OUl9tcHJvdGVjdAkJCShfX05SX0xpbnV4ICsgIDEwKQorI2RlZmluZSBfX05SX211bm1hcAkJCShfX05SX0xpbnV4ICsgIDExKQorI2RlZmluZSBfX05SX2JyawkJCShfX05SX0xpbnV4ICsgIDEyKQorI2RlZmluZSBfX05SX3J0X3NpZ2FjdGlvbgkJKF9fTlJfTGludXggKyAgMTMpCisjZGVmaW5lIF9fTlJfcnRfc2lncHJvY21hc2sJCShfX05SX0xpbnV4ICsgIDE0KQorI2RlZmluZSBfX05SX2lvY3RsCQkJKF9fTlJfTGludXggKyAgMTUpCisjZGVmaW5lIF9fTlJfcHJlYWQ2NAkJCShfX05SX0xpbnV4ICsgIDE2KQorI2RlZmluZSBfX05SX3B3cml0ZTY0CQkJKF9fTlJfTGludXggKyAgMTcpCisjZGVmaW5lIF9fTlJfcmVhZHYJCQkoX19OUl9MaW51eCArICAxOCkKKyNkZWZpbmUgX19OUl93cml0ZXYJCQkoX19OUl9MaW51eCArICAxOSkKKyNkZWZpbmUgX19OUl9hY2Nlc3MJCQkoX19OUl9MaW51eCArICAyMCkKKyNkZWZpbmUgX19OUl9waXBlCQkJKF9fTlJfTGludXggKyAgMjEpCisjZGVmaW5lIF9fTlJfX25ld3NlbGVjdAkJCShfX05SX0xpbnV4ICsgIDIyKQorI2RlZmluZSBfX05SX3NjaGVkX3lpZWxkCQkoX19OUl9MaW51eCArICAyMykKKyNkZWZpbmUgX19OUl9tcmVtYXAJCQkoX19OUl9MaW51eCArICAyNCkKKyNkZWZpbmUgX19OUl9tc3luYwkJCShfX05SX0xpbnV4ICsgIDI1KQorI2RlZmluZSBfX05SX21pbmNvcmUJCQkoX19OUl9MaW51eCArICAyNikKKyNkZWZpbmUgX19OUl9tYWR2aXNlCQkJKF9fTlJfTGludXggKyAgMjcpCisjZGVmaW5lIF9fTlJfc2htZ2V0CQkJKF9fTlJfTGludXggKyAgMjgpCisjZGVmaW5lIF9fTlJfc2htYXQJCQkoX19OUl9MaW51eCArICAyOSkKKyNkZWZpbmUgX19OUl9zaG1jdGwJCQkoX19OUl9MaW51eCArICAzMCkKKyNkZWZpbmUgX19OUl9kdXAJCQkoX19OUl9MaW51eCArICAzMSkKKyNkZWZpbmUgX19OUl9kdXAyCQkJKF9fTlJfTGludXggKyAgMzIpCisjZGVmaW5lIF9fTlJfcGF1c2UJCQkoX19OUl9MaW51eCArICAzMykKKyNkZWZpbmUgX19OUl9uYW5vc2xlZXAJCQkoX19OUl9MaW51eCArICAzNCkKKyNkZWZpbmUgX19OUl9nZXRpdGltZXIJCQkoX19OUl9MaW51eCArICAzNSkKKyNkZWZpbmUgX19OUl9zZXRpdGltZXIJCQkoX19OUl9MaW51eCArICAzNikKKyNkZWZpbmUgX19OUl9hbGFybQkJCShfX05SX0xpbnV4ICsgIDM3KQorI2RlZmluZSBfX05SX2dldHBpZAkJCShfX05SX0xpbnV4ICsgIDM4KQorI2RlZmluZSBfX05SX3NlbmRmaWxlCQkJKF9fTlJfTGludXggKyAgMzkpCisjZGVmaW5lIF9fTlJfc29ja2V0CQkJKF9fTlJfTGludXggKyAgNDApCisjZGVmaW5lIF9fTlJfY29ubmVjdAkJCShfX05SX0xpbnV4ICsgIDQxKQorI2RlZmluZSBfX05SX2FjY2VwdAkJCShfX05SX0xpbnV4ICsgIDQyKQorI2RlZmluZSBfX05SX3NlbmR0bwkJCShfX05SX0xpbnV4ICsgIDQzKQorI2RlZmluZSBfX05SX3JlY3Zmcm9tCQkJKF9fTlJfTGludXggKyAgNDQpCisjZGVmaW5lIF9fTlJfc2VuZG1zZwkJCShfX05SX0xpbnV4ICsgIDQ1KQorI2RlZmluZSBfX05SX3JlY3Ztc2cJCQkoX19OUl9MaW51eCArICA0NikKKyNkZWZpbmUgX19OUl9zaHV0ZG93bgkJCShfX05SX0xpbnV4ICsgIDQ3KQorI2RlZmluZSBfX05SX2JpbmQJCQkoX19OUl9MaW51eCArICA0OCkKKyNkZWZpbmUgX19OUl9saXN0ZW4JCQkoX19OUl9MaW51eCArICA0OSkKKyNkZWZpbmUgX19OUl9nZXRzb2NrbmFtZQkJKF9fTlJfTGludXggKyAgNTApCisjZGVmaW5lIF9fTlJfZ2V0cGVlcm5hbWUJCShfX05SX0xpbnV4ICsgIDUxKQorI2RlZmluZSBfX05SX3NvY2tldHBhaXIJCQkoX19OUl9MaW51eCArICA1MikKKyNkZWZpbmUgX19OUl9zZXRzb2Nrb3B0CQkJKF9fTlJfTGludXggKyAgNTMpCisjZGVmaW5lIF9fTlJfZ2V0c29ja29wdAkJCShfX05SX0xpbnV4ICsgIDU0KQorI2RlZmluZSBfX05SX2Nsb25lCQkJKF9fTlJfTGludXggKyAgNTUpCisjZGVmaW5lIF9fTlJfZm9yawkJCShfX05SX0xpbnV4ICsgIDU2KQorI2RlZmluZSBfX05SX2V4ZWN2ZQkJCShfX05SX0xpbnV4ICsgIDU3KQorI2RlZmluZSBfX05SX2V4aXQJCQkoX19OUl9MaW51eCArICA1OCkKKyNkZWZpbmUgX19OUl93YWl0NAkJCShfX05SX0xpbnV4ICsgIDU5KQorI2RlZmluZSBfX05SX2tpbGwJCQkoX19OUl9MaW51eCArICA2MCkKKyNkZWZpbmUgX19OUl91bmFtZQkJCShfX05SX0xpbnV4ICsgIDYxKQorI2RlZmluZSBfX05SX3NlbWdldAkJCShfX05SX0xpbnV4ICsgIDYyKQorI2RlZmluZSBfX05SX3NlbW9wCQkJKF9fTlJfTGludXggKyAgNjMpCisjZGVmaW5lIF9fTlJfc2VtY3RsCQkJKF9fTlJfTGludXggKyAgNjQpCisjZGVmaW5lIF9fTlJfc2htZHQJCQkoX19OUl9MaW51eCArICA2NSkKKyNkZWZpbmUgX19OUl9tc2dnZXQJCQkoX19OUl9MaW51eCArICA2NikKKyNkZWZpbmUgX19OUl9tc2dzbmQJCQkoX19OUl9MaW51eCArICA2NykKKyNkZWZpbmUgX19OUl9tc2dyY3YJCQkoX19OUl9MaW51eCArICA2OCkKKyNkZWZpbmUgX19OUl9tc2djdGwJCQkoX19OUl9MaW51eCArICA2OSkKKyNkZWZpbmUgX19OUl9mY250bAkJCShfX05SX0xpbnV4ICsgIDcwKQorI2RlZmluZSBfX05SX2Zsb2NrCQkJKF9fTlJfTGludXggKyAgNzEpCisjZGVmaW5lIF9fTlJfZnN5bmMJCQkoX19OUl9MaW51eCArICA3MikKKyNkZWZpbmUgX19OUl9mZGF0YXN5bmMJCQkoX19OUl9MaW51eCArICA3MykKKyNkZWZpbmUgX19OUl90cnVuY2F0ZQkJCShfX05SX0xpbnV4ICsgIDc0KQorI2RlZmluZSBfX05SX2Z0cnVuY2F0ZQkJCShfX05SX0xpbnV4ICsgIDc1KQorI2RlZmluZSBfX05SX2dldGRlbnRzCQkJKF9fTlJfTGludXggKyAgNzYpCisjZGVmaW5lIF9fTlJfZ2V0Y3dkCQkJKF9fTlJfTGludXggKyAgNzcpCisjZGVmaW5lIF9fTlJfY2hkaXIJCQkoX19OUl9MaW51eCArICA3OCkKKyNkZWZpbmUgX19OUl9mY2hkaXIJCQkoX19OUl9MaW51eCArICA3OSkKKyNkZWZpbmUgX19OUl9yZW5hbWUJCQkoX19OUl9MaW51eCArICA4MCkKKyNkZWZpbmUgX19OUl9ta2RpcgkJCShfX05SX0xpbnV4ICsgIDgxKQorI2RlZmluZSBfX05SX3JtZGlyCQkJKF9fTlJfTGludXggKyAgODIpCisjZGVmaW5lIF9fTlJfY3JlYXQJCQkoX19OUl9MaW51eCArICA4MykKKyNkZWZpbmUgX19OUl9saW5rCQkJKF9fTlJfTGludXggKyAgODQpCisjZGVmaW5lIF9fTlJfdW5saW5rCQkJKF9fTlJfTGludXggKyAgODUpCisjZGVmaW5lIF9fTlJfc3ltbGluawkJCShfX05SX0xpbnV4ICsgIDg2KQorI2RlZmluZSBfX05SX3JlYWRsaW5rCQkJKF9fTlJfTGludXggKyAgODcpCisjZGVmaW5lIF9fTlJfY2htb2QJCQkoX19OUl9MaW51eCArICA4OCkKKyNkZWZpbmUgX19OUl9mY2htb2QJCQkoX19OUl9MaW51eCArICA4OSkKKyNkZWZpbmUgX19OUl9jaG93bgkJCShfX05SX0xpbnV4ICsgIDkwKQorI2RlZmluZSBfX05SX2ZjaG93bgkJCShfX05SX0xpbnV4ICsgIDkxKQorI2RlZmluZSBfX05SX2xjaG93bgkJCShfX05SX0xpbnV4ICsgIDkyKQorI2RlZmluZSBfX05SX3VtYXNrCQkJKF9fTlJfTGludXggKyAgOTMpCisjZGVmaW5lIF9fTlJfZ2V0dGltZW9mZGF5CQkoX19OUl9MaW51eCArICA5NCkKKyNkZWZpbmUgX19OUl9nZXRybGltaXQJCQkoX19OUl9MaW51eCArICA5NSkKKyNkZWZpbmUgX19OUl9nZXRydXNhZ2UJCQkoX19OUl9MaW51eCArICA5NikKKyNkZWZpbmUgX19OUl9zeXNpbmZvCQkJKF9fTlJfTGludXggKyAgOTcpCisjZGVmaW5lIF9fTlJfdGltZXMJCQkoX19OUl9MaW51eCArICA5OCkKKyNkZWZpbmUgX19OUl9wdHJhY2UJCQkoX19OUl9MaW51eCArICA5OSkKKyNkZWZpbmUgX19OUl9nZXR1aWQJCQkoX19OUl9MaW51eCArIDEwMCkKKyNkZWZpbmUgX19OUl9zeXNsb2cJCQkoX19OUl9MaW51eCArIDEwMSkKKyNkZWZpbmUgX19OUl9nZXRnaWQJCQkoX19OUl9MaW51eCArIDEwMikKKyNkZWZpbmUgX19OUl9zZXR1aWQJCQkoX19OUl9MaW51eCArIDEwMykKKyNkZWZpbmUgX19OUl9zZXRnaWQJCQkoX19OUl9MaW51eCArIDEwNCkKKyNkZWZpbmUgX19OUl9nZXRldWlkCQkJKF9fTlJfTGludXggKyAxMDUpCisjZGVmaW5lIF9fTlJfZ2V0ZWdpZAkJCShfX05SX0xpbnV4ICsgMTA2KQorI2RlZmluZSBfX05SX3NldHBnaWQJCQkoX19OUl9MaW51eCArIDEwNykKKyNkZWZpbmUgX19OUl9nZXRwcGlkCQkJKF9fTlJfTGludXggKyAxMDgpCisjZGVmaW5lIF9fTlJfZ2V0cGdycAkJCShfX05SX0xpbnV4ICsgMTA5KQorI2RlZmluZSBfX05SX3NldHNpZAkJCShfX05SX0xpbnV4ICsgMTEwKQorI2RlZmluZSBfX05SX3NldHJldWlkCQkJKF9fTlJfTGludXggKyAxMTEpCisjZGVmaW5lIF9fTlJfc2V0cmVnaWQJCQkoX19OUl9MaW51eCArIDExMikKKyNkZWZpbmUgX19OUl9nZXRncm91cHMJCQkoX19OUl9MaW51eCArIDExMykKKyNkZWZpbmUgX19OUl9zZXRncm91cHMJCQkoX19OUl9MaW51eCArIDExNCkKKyNkZWZpbmUgX19OUl9zZXRyZXN1aWQJCQkoX19OUl9MaW51eCArIDExNSkKKyNkZWZpbmUgX19OUl9nZXRyZXN1aWQJCQkoX19OUl9MaW51eCArIDExNikKKyNkZWZpbmUgX19OUl9zZXRyZXNnaWQJCQkoX19OUl9MaW51eCArIDExNykKKyNkZWZpbmUgX19OUl9nZXRyZXNnaWQJCQkoX19OUl9MaW51eCArIDExOCkKKyNkZWZpbmUgX19OUl9nZXRwZ2lkCQkJKF9fTlJfTGludXggKyAxMTkpCisjZGVmaW5lIF9fTlJfc2V0ZnN1aWQJCQkoX19OUl9MaW51eCArIDEyMCkKKyNkZWZpbmUgX19OUl9zZXRmc2dpZAkJCShfX05SX0xpbnV4ICsgMTIxKQorI2RlZmluZSBfX05SX2dldHNpZAkJCShfX05SX0xpbnV4ICsgMTIyKQorI2RlZmluZSBfX05SX2NhcGdldAkJCShfX05SX0xpbnV4ICsgMTIzKQorI2RlZmluZSBfX05SX2NhcHNldAkJCShfX05SX0xpbnV4ICsgMTI0KQorI2RlZmluZSBfX05SX3J0X3NpZ3BlbmRpbmcJCShfX05SX0xpbnV4ICsgMTI1KQorI2RlZmluZSBfX05SX3J0X3NpZ3RpbWVkd2FpdAkJKF9fTlJfTGludXggKyAxMjYpCisjZGVmaW5lIF9fTlJfcnRfc2lncXVldWVpbmZvCQkoX19OUl9MaW51eCArIDEyNykKKyNkZWZpbmUgX19OUl9ydF9zaWdzdXNwZW5kCQkoX19OUl9MaW51eCArIDEyOCkKKyNkZWZpbmUgX19OUl9zaWdhbHRzdGFjawkJKF9fTlJfTGludXggKyAxMjkpCisjZGVmaW5lIF9fTlJfdXRpbWUJCQkoX19OUl9MaW51eCArIDEzMCkKKyNkZWZpbmUgX19OUl9ta25vZAkJCShfX05SX0xpbnV4ICsgMTMxKQorI2RlZmluZSBfX05SX3BlcnNvbmFsaXR5CQkoX19OUl9MaW51eCArIDEzMikKKyNkZWZpbmUgX19OUl91c3RhdAkJCShfX05SX0xpbnV4ICsgMTMzKQorI2RlZmluZSBfX05SX3N0YXRmcwkJCShfX05SX0xpbnV4ICsgMTM0KQorI2RlZmluZSBfX05SX2ZzdGF0ZnMJCQkoX19OUl9MaW51eCArIDEzNSkKKyNkZWZpbmUgX19OUl9zeXNmcwkJCShfX05SX0xpbnV4ICsgMTM2KQorI2RlZmluZSBfX05SX2dldHByaW9yaXR5CQkoX19OUl9MaW51eCArIDEzNykKKyNkZWZpbmUgX19OUl9zZXRwcmlvcml0eQkJKF9fTlJfTGludXggKyAxMzgpCisjZGVmaW5lIF9fTlJfc2NoZWRfc2V0cGFyYW0JCShfX05SX0xpbnV4ICsgMTM5KQorI2RlZmluZSBfX05SX3NjaGVkX2dldHBhcmFtCQkoX19OUl9MaW51eCArIDE0MCkKKyNkZWZpbmUgX19OUl9zY2hlZF9zZXRzY2hlZHVsZXIJCShfX05SX0xpbnV4ICsgMTQxKQorI2RlZmluZSBfX05SX3NjaGVkX2dldHNjaGVkdWxlcgkJKF9fTlJfTGludXggKyAxNDIpCisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21heAkoX19OUl9MaW51eCArIDE0MykKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWluCShfX05SX0xpbnV4ICsgMTQ0KQorI2RlZmluZSBfX05SX3NjaGVkX3JyX2dldF9pbnRlcnZhbAkoX19OUl9MaW51eCArIDE0NSkKKyNkZWZpbmUgX19OUl9tbG9jawkJCShfX05SX0xpbnV4ICsgMTQ2KQorI2RlZmluZSBfX05SX211bmxvY2sJCQkoX19OUl9MaW51eCArIDE0NykKKyNkZWZpbmUgX19OUl9tbG9ja2FsbAkJCShfX05SX0xpbnV4ICsgMTQ4KQorI2RlZmluZSBfX05SX211bmxvY2thbGwJCQkoX19OUl9MaW51eCArIDE0OSkKKyNkZWZpbmUgX19OUl92aGFuZ3VwCQkJKF9fTlJfTGludXggKyAxNTApCisjZGVmaW5lIF9fTlJfcGl2b3Rfcm9vdAkJCShfX05SX0xpbnV4ICsgMTUxKQorI2RlZmluZSBfX05SX19zeXNjdGwJCQkoX19OUl9MaW51eCArIDE1MikKKyNkZWZpbmUgX19OUl9wcmN0bAkJCShfX05SX0xpbnV4ICsgMTUzKQorI2RlZmluZSBfX05SX2FkanRpbWV4CQkJKF9fTlJfTGludXggKyAxNTQpCisjZGVmaW5lIF9fTlJfc2V0cmxpbWl0CQkJKF9fTlJfTGludXggKyAxNTUpCisjZGVmaW5lIF9fTlJfY2hyb290CQkJKF9fTlJfTGludXggKyAxNTYpCisjZGVmaW5lIF9fTlJfc3luYwkJCShfX05SX0xpbnV4ICsgMTU3KQorI2RlZmluZSBfX05SX2FjY3QJCQkoX19OUl9MaW51eCArIDE1OCkKKyNkZWZpbmUgX19OUl9zZXR0aW1lb2ZkYXkJCShfX05SX0xpbnV4ICsgMTU5KQorI2RlZmluZSBfX05SX21vdW50CQkJKF9fTlJfTGludXggKyAxNjApCisjZGVmaW5lIF9fTlJfdW1vdW50MgkJCShfX05SX0xpbnV4ICsgMTYxKQorI2RlZmluZSBfX05SX3N3YXBvbgkJCShfX05SX0xpbnV4ICsgMTYyKQorI2RlZmluZSBfX05SX3N3YXBvZmYJCQkoX19OUl9MaW51eCArIDE2MykKKyNkZWZpbmUgX19OUl9yZWJvb3QJCQkoX19OUl9MaW51eCArIDE2NCkKKyNkZWZpbmUgX19OUl9zZXRob3N0bmFtZQkJKF9fTlJfTGludXggKyAxNjUpCisjZGVmaW5lIF9fTlJfc2V0ZG9tYWlubmFtZQkJKF9fTlJfTGludXggKyAxNjYpCisjZGVmaW5lIF9fTlJfY3JlYXRlX21vZHVsZQkJKF9fTlJfTGludXggKyAxNjcpCisjZGVmaW5lIF9fTlJfaW5pdF9tb2R1bGUJCShfX05SX0xpbnV4ICsgMTY4KQorI2RlZmluZSBfX05SX2RlbGV0ZV9tb2R1bGUJCShfX05SX0xpbnV4ICsgMTY5KQorI2RlZmluZSBfX05SX2dldF9rZXJuZWxfc3ltcwkJKF9fTlJfTGludXggKyAxNzApCisjZGVmaW5lIF9fTlJfcXVlcnlfbW9kdWxlCQkoX19OUl9MaW51eCArIDE3MSkKKyNkZWZpbmUgX19OUl9xdW90YWN0bAkJCShfX05SX0xpbnV4ICsgMTcyKQorI2RlZmluZSBfX05SX25mc3NlcnZjdGwJCQkoX19OUl9MaW51eCArIDE3MykKKyNkZWZpbmUgX19OUl9nZXRwbXNnCQkJKF9fTlJfTGludXggKyAxNzQpCisjZGVmaW5lIF9fTlJfcHV0cG1zZwkJCShfX05SX0xpbnV4ICsgMTc1KQorI2RlZmluZSBfX05SX2Fmc19zeXNjYWxsCQkoX19OUl9MaW51eCArIDE3NikKKyNkZWZpbmUgX19OUl9yZXNlcnZlZDE3NwkJKF9fTlJfTGludXggKyAxNzcpCisjZGVmaW5lIF9fTlJfZ2V0dGlkCQkJKF9fTlJfTGludXggKyAxNzgpCisjZGVmaW5lIF9fTlJfcmVhZGFoZWFkCQkJKF9fTlJfTGludXggKyAxNzkpCisjZGVmaW5lIF9fTlJfc2V0eGF0dHIJCQkoX19OUl9MaW51eCArIDE4MCkKKyNkZWZpbmUgX19OUl9sc2V0eGF0dHIJCQkoX19OUl9MaW51eCArIDE4MSkKKyNkZWZpbmUgX19OUl9mc2V0eGF0dHIJCQkoX19OUl9MaW51eCArIDE4MikKKyNkZWZpbmUgX19OUl9nZXR4YXR0cgkJCShfX05SX0xpbnV4ICsgMTgzKQorI2RlZmluZSBfX05SX2xnZXR4YXR0cgkJCShfX05SX0xpbnV4ICsgMTg0KQorI2RlZmluZSBfX05SX2ZnZXR4YXR0cgkJCShfX05SX0xpbnV4ICsgMTg1KQorI2RlZmluZSBfX05SX2xpc3R4YXR0cgkJCShfX05SX0xpbnV4ICsgMTg2KQorI2RlZmluZSBfX05SX2xsaXN0eGF0dHIJCQkoX19OUl9MaW51eCArIDE4NykKKyNkZWZpbmUgX19OUl9mbGlzdHhhdHRyCQkJKF9fTlJfTGludXggKyAxODgpCisjZGVmaW5lIF9fTlJfcmVtb3ZleGF0dHIJCShfX05SX0xpbnV4ICsgMTg5KQorI2RlZmluZSBfX05SX2xyZW1vdmV4YXR0cgkJKF9fTlJfTGludXggKyAxOTApCisjZGVmaW5lIF9fTlJfZnJlbW92ZXhhdHRyCQkoX19OUl9MaW51eCArIDE5MSkKKyNkZWZpbmUgX19OUl90a2lsbAkJCShfX05SX0xpbnV4ICsgMTkyKQorI2RlZmluZSBfX05SX3Jlc2VydmVkMTkzCQkoX19OUl9MaW51eCArIDE5MykKKyNkZWZpbmUgX19OUl9mdXRleAkJCShfX05SX0xpbnV4ICsgMTk0KQorI2RlZmluZSBfX05SX3NjaGVkX3NldGFmZmluaXR5CQkoX19OUl9MaW51eCArIDE5NSkKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRhZmZpbml0eQkJKF9fTlJfTGludXggKyAxOTYpCisjZGVmaW5lIF9fTlJfY2FjaGVmbHVzaAkJCShfX05SX0xpbnV4ICsgMTk3KQorI2RlZmluZSBfX05SX2NhY2hlY3RsCQkJKF9fTlJfTGludXggKyAxOTgpCisjZGVmaW5lIF9fTlJfc3lzbWlwcwkJCShfX05SX0xpbnV4ICsgMTk5KQorI2RlZmluZSBfX05SX2lvX3NldHVwCQkJKF9fTlJfTGludXggKyAyMDApCisjZGVmaW5lIF9fTlJfaW9fZGVzdHJveQkJCShfX05SX0xpbnV4ICsgMjAxKQorI2RlZmluZSBfX05SX2lvX2dldGV2ZW50cwkJKF9fTlJfTGludXggKyAyMDIpCisjZGVmaW5lIF9fTlJfaW9fc3VibWl0CQkJKF9fTlJfTGludXggKyAyMDMpCisjZGVmaW5lIF9fTlJfaW9fY2FuY2VsCQkJKF9fTlJfTGludXggKyAyMDQpCisjZGVmaW5lIF9fTlJfZXhpdF9ncm91cAkJCShfX05SX0xpbnV4ICsgMjA1KQorI2RlZmluZSBfX05SX2xvb2t1cF9kY29va2llCQkoX19OUl9MaW51eCArIDIwNikKKyNkZWZpbmUgX19OUl9lcG9sbF9jcmVhdGUJCShfX05SX0xpbnV4ICsgMjA3KQorI2RlZmluZSBfX05SX2Vwb2xsX2N0bAkJCShfX05SX0xpbnV4ICsgMjA4KQorI2RlZmluZSBfX05SX2Vwb2xsX3dhaXQJCQkoX19OUl9MaW51eCArIDIwOSkKKyNkZWZpbmUgX19OUl9yZW1hcF9maWxlX3BhZ2VzCQkoX19OUl9MaW51eCArIDIxMCkKKyNkZWZpbmUgX19OUl9ydF9zaWdyZXR1cm4JCShfX05SX0xpbnV4ICsgMjExKQorI2RlZmluZSBfX05SX2ZjbnRsNjQJCQkoX19OUl9MaW51eCArIDIxMikKKyNkZWZpbmUgX19OUl9zZXRfdGlkX2FkZHJlc3MJCShfX05SX0xpbnV4ICsgMjEzKQorI2RlZmluZSBfX05SX3Jlc3RhcnRfc3lzY2FsbAkJKF9fTlJfTGludXggKyAyMTQpCisjZGVmaW5lIF9fTlJfc2VtdGltZWRvcAkJCShfX05SX0xpbnV4ICsgMjE1KQorI2RlZmluZSBfX05SX2ZhZHZpc2U2NAkJCShfX05SX0xpbnV4ICsgMjE2KQorI2RlZmluZSBfX05SX3N0YXRmczY0CQkJKF9fTlJfTGludXggKyAyMTcpCisjZGVmaW5lIF9fTlJfZnN0YXRmczY0CQkJKF9fTlJfTGludXggKyAyMTgpCisjZGVmaW5lIF9fTlJfc2VuZGZpbGU2NAkJCShfX05SX0xpbnV4ICsgMjE5KQorI2RlZmluZSBfX05SX3RpbWVyX2NyZWF0ZQkJKF9fTlJfTGludXggKyAyMjApCisjZGVmaW5lIF9fTlJfdGltZXJfc2V0dGltZQkJKF9fTlJfTGludXggKyAyMjEpCisjZGVmaW5lIF9fTlJfdGltZXJfZ2V0dGltZQkJKF9fTlJfTGludXggKyAyMjIpCisjZGVmaW5lIF9fTlJfdGltZXJfZ2V0b3ZlcnJ1bgkJKF9fTlJfTGludXggKyAyMjMpCisjZGVmaW5lIF9fTlJfdGltZXJfZGVsZXRlCQkoX19OUl9MaW51eCArIDIyNCkKKyNkZWZpbmUgX19OUl9jbG9ja19zZXR0aW1lCQkoX19OUl9MaW51eCArIDIyNSkKKyNkZWZpbmUgX19OUl9jbG9ja19nZXR0aW1lCQkoX19OUl9MaW51eCArIDIyNikKKyNkZWZpbmUgX19OUl9jbG9ja19nZXRyZXMJCShfX05SX0xpbnV4ICsgMjI3KQorI2RlZmluZSBfX05SX2Nsb2NrX25hbm9zbGVlcAkJKF9fTlJfTGludXggKyAyMjgpCisjZGVmaW5lIF9fTlJfdGdraWxsCQkJKF9fTlJfTGludXggKyAyMjkpCisjZGVmaW5lIF9fTlJfdXRpbWVzCQkJKF9fTlJfTGludXggKyAyMzApCisjZGVmaW5lIF9fTlJfbWJpbmQJCQkoX19OUl9MaW51eCArIDIzMSkKKyNkZWZpbmUgX19OUl9nZXRfbWVtcG9saWN5CQkoX19OUl9MaW51eCArIDIzMikKKyNkZWZpbmUgX19OUl9zZXRfbWVtcG9saWN5CQkoX19OUl9MaW51eCArIDIzMykKKyNkZWZpbmUgX19OUl9tcV9vcGVuCQkJKF9fTlJfTGludXggKyAyMzQpCisjZGVmaW5lIF9fTlJfbXFfdW5saW5rCQkJKF9fTlJfTGludXggKyAyMzUpCisjZGVmaW5lIF9fTlJfbXFfdGltZWRzZW5kCQkoX19OUl9MaW51eCArIDIzNikKKyNkZWZpbmUgX19OUl9tcV90aW1lZHJlY2VpdmUJCShfX05SX0xpbnV4ICsgMjM3KQorI2RlZmluZSBfX05SX21xX25vdGlmeQkJCShfX05SX0xpbnV4ICsgMjM4KQorI2RlZmluZSBfX05SX21xX2dldHNldGF0dHIJCShfX05SX0xpbnV4ICsgMjM5KQorI2RlZmluZSBfX05SX3ZzZXJ2ZXIJCQkoX19OUl9MaW51eCArIDI0MCkKKyNkZWZpbmUgX19OUl93YWl0aWQJCQkoX19OUl9MaW51eCArIDI0MSkKKy8qICNkZWZpbmUgX19OUl9zeXNfc2V0YWx0cm9vdAkJKF9fTlJfTGludXggKyAyNDIpICovCisjZGVmaW5lIF9fTlJfYWRkX2tleQkJCShfX05SX0xpbnV4ICsgMjQzKQorI2RlZmluZSBfX05SX3JlcXVlc3Rfa2V5CQkoX19OUl9MaW51eCArIDI0NCkKKyNkZWZpbmUgX19OUl9rZXljdGwJCQkoX19OUl9MaW51eCArIDI0NSkKKworLyoKKyAqIE9mZnNldCBvZiB0aGUgbGFzdCBOMzIgZmxhdm91cmVkIHN5c2NhbGwKKyAqLworI2RlZmluZSBfX05SX0xpbnV4X3N5c2NhbGxzCQkyNDUKKworI2VuZGlmIC8qIF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fTkFCSTMyICovCisKKyNkZWZpbmUgX19OUl9OMzJfTGludXgJCQk2MDAwCisjZGVmaW5lIF9fTlJfTjMyX0xpbnV4X3N5c2NhbGxzCQkyNDUKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworLyogWFhYIC0gX2ZvbyBuZWVkcyB0byBiZSBfX2Zvbywgd2hpbGUgX19OUl9iYXIgY291bGQgYmUgX05SX2Jhci4gKi8KKyNkZWZpbmUgX3N5c2NhbGwwKHR5cGUsbmFtZSkgXAordHlwZSBuYW1lKHZvaWQpIFwKK3sgXAorCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19hMyBhc20oIiQ3Iik7IFwKKwl1bnNpZ25lZCBsb25nIF9fdjA7IFwKKwlcCisJX19hc21fXyB2b2xhdGlsZSAoIFwKKwkiLnNldFx0bm9yZW9yZGVyXG5cdCIgXAorCSJsaVx0JDIsICUyXHRcdFx0IyAiICNuYW1lICJcblx0IiBcCisJInN5c2NhbGxcblx0IiBcCisJIm1vdmVcdCUwLCAkMlxuXHQiIFwKKwkiLnNldFx0cmVvcmRlciIgXAorCTogIj0mciIgKF9fdjApLCAiPXIiIChfX2EzKSBcCisJOiAiaSIgKF9fTlJfIyNuYW1lKSBcCisJOiAiJDIiLCAiJDgiLCAiJDkiLCAiJDEwIiwgIiQxMSIsICIkMTIiLCAiJDEzIiwgIiQxNCIsICIkMTUiLCAiJDI0IiwgXAorCSAgIm1lbW9yeSIpOyBcCisJXAorCWlmIChfX2EzID09IDApIFwKKwkJcmV0dXJuICh0eXBlKSBfX3YwOyBcCisJZXJybm8gPSBfX3YwOyBcCisJcmV0dXJuICh0eXBlKSAtMTsgXAorfQorCisvKgorICogREFOR0VSOiBUaGlzIG1hY3JvIGlzbid0IHVzYWJsZSBmb3IgdGhlIHBpcGUoMikgY2FsbAorICogd2hpY2ggaGFzIGEgdW51c3VhbCByZXR1cm4gY29udmVudGlvbi4KKyAqLworI2RlZmluZSBfc3lzY2FsbDEodHlwZSxuYW1lLGF0eXBlLGEpIFwKK3R5cGUgbmFtZShhdHlwZSBhKSBcCit7IFwKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTAgYXNtKCIkNCIpID0gKHVuc2lnbmVkIGxvbmcpIGE7IFwKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTMgYXNtKCIkNyIpOyBcCisJdW5zaWduZWQgbG9uZyBfX3YwOyBcCisJXAorCV9fYXNtX18gdm9sYXRpbGUgKCBcCisJIi5zZXRcdG5vcmVvcmRlclxuXHQiIFwKKwkibGlcdCQyLCAlM1x0XHRcdCMgIiAjbmFtZSAiXG5cdCIgXAorCSJzeXNjYWxsXG5cdCIgXAorCSJtb3ZlXHQlMCwgJDJcblx0IiBcCisJIi5zZXRcdHJlb3JkZXIiIFwKKwk6ICI9JnIiIChfX3YwKSwgIj1yIiAoX19hMykgXAorCTogInIiIChfX2EwKSwgImkiIChfX05SXyMjbmFtZSkgXAorCTogIiQyIiwgIiQ4IiwgIiQ5IiwgIiQxMCIsICIkMTEiLCAiJDEyIiwgIiQxMyIsICIkMTQiLCAiJDE1IiwgIiQyNCIsIFwKKwkgICJtZW1vcnkiKTsgXAorCVwKKwlpZiAoX19hMyA9PSAwKSBcCisJCXJldHVybiAodHlwZSkgX192MDsgXAorCWVycm5vID0gX192MDsgXAorCXJldHVybiAodHlwZSkgLTE7IFwKK30KKworI2RlZmluZSBfc3lzY2FsbDIodHlwZSxuYW1lLGF0eXBlLGEsYnR5cGUsYikgXAordHlwZSBuYW1lKGF0eXBlIGEsIGJ0eXBlIGIpIFwKK3sgXAorCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19hMCBhc20oIiQ0IikgPSAodW5zaWduZWQgbG9uZykgYTsgXAorCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19hMSBhc20oIiQ1IikgPSAodW5zaWduZWQgbG9uZykgYjsgXAorCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19hMyBhc20oIiQ3Iik7IFwKKwl1bnNpZ25lZCBsb25nIF9fdjA7IFwKKwlcCisJX19hc21fXyB2b2xhdGlsZSAoIFwKKwkiLnNldFx0bm9yZW9yZGVyXG5cdCIgXAorCSJsaVx0JDIsICU0XHRcdFx0IyAiICNuYW1lICJcblx0IiBcCisJInN5c2NhbGxcblx0IiBcCisJIm1vdmVcdCUwLCAkMlxuXHQiIFwKKwkiLnNldFx0cmVvcmRlciIgXAorCTogIj0mciIgKF9fdjApLCAiPXIiIChfX2EzKSBcCisJOiAiciIgKF9fYTApLCAiciIgKF9fYTEpLCAiaSIgKF9fTlJfIyNuYW1lKSBcCisJOiAiJDIiLCAiJDgiLCAiJDkiLCAiJDEwIiwgIiQxMSIsICIkMTIiLCAiJDEzIiwgIiQxNCIsICIkMTUiLCAiJDI0IiwgXAorCSAgIm1lbW9yeSIpOyBcCisJXAorCWlmIChfX2EzID09IDApIFwKKwkJcmV0dXJuICh0eXBlKSBfX3YwOyBcCisJZXJybm8gPSBfX3YwOyBcCisJcmV0dXJuICh0eXBlKSAtMTsgXAorfQorCisjZGVmaW5lIF9zeXNjYWxsMyh0eXBlLG5hbWUsYXR5cGUsYSxidHlwZSxiLGN0eXBlLGMpIFwKK3R5cGUgbmFtZShhdHlwZSBhLCBidHlwZSBiLCBjdHlwZSBjKSBcCit7IFwKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTAgYXNtKCIkNCIpID0gKHVuc2lnbmVkIGxvbmcpIGE7IFwKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTEgYXNtKCIkNSIpID0gKHVuc2lnbmVkIGxvbmcpIGI7IFwKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTIgYXNtKCIkNiIpID0gKHVuc2lnbmVkIGxvbmcpIGM7IFwKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTMgYXNtKCIkNyIpOyBcCisJdW5zaWduZWQgbG9uZyBfX3YwOyBcCisJXAorCV9fYXNtX18gdm9sYXRpbGUgKCBcCisJIi5zZXRcdG5vcmVvcmRlclxuXHQiIFwKKwkibGlcdCQyLCAlNVx0XHRcdCMgIiAjbmFtZSAiXG5cdCIgXAorCSJzeXNjYWxsXG5cdCIgXAorCSJtb3ZlXHQlMCwgJDJcblx0IiBcCisJIi5zZXRcdHJlb3JkZXIiIFwKKwk6ICI9JnIiIChfX3YwKSwgIj1yIiAoX19hMykgXAorCTogInIiIChfX2EwKSwgInIiIChfX2ExKSwgInIiIChfX2EyKSwgImkiIChfX05SXyMjbmFtZSkgXAorCTogIiQyIiwgIiQ4IiwgIiQ5IiwgIiQxMCIsICIkMTEiLCAiJDEyIiwgIiQxMyIsICIkMTQiLCAiJDE1IiwgIiQyNCIsIFwKKwkgICJtZW1vcnkiKTsgXAorCVwKKwlpZiAoX19hMyA9PSAwKSBcCisJCXJldHVybiAodHlwZSkgX192MDsgXAorCWVycm5vID0gX192MDsgXAorCXJldHVybiAodHlwZSkgLTE7IFwKK30KKworI2RlZmluZSBfc3lzY2FsbDQodHlwZSxuYW1lLGF0eXBlLGEsYnR5cGUsYixjdHlwZSxjLGR0eXBlLGQpIFwKK3R5cGUgbmFtZShhdHlwZSBhLCBidHlwZSBiLCBjdHlwZSBjLCBkdHlwZSBkKSBcCit7IFwKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTAgYXNtKCIkNCIpID0gKHVuc2lnbmVkIGxvbmcpIGE7IFwKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTEgYXNtKCIkNSIpID0gKHVuc2lnbmVkIGxvbmcpIGI7IFwKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTIgYXNtKCIkNiIpID0gKHVuc2lnbmVkIGxvbmcpIGM7IFwKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTMgYXNtKCIkNyIpID0gKHVuc2lnbmVkIGxvbmcpIGQ7IFwKKwl1bnNpZ25lZCBsb25nIF9fdjA7IFwKKwlcCisJX19hc21fXyB2b2xhdGlsZSAoIFwKKwkiLnNldFx0bm9yZW9yZGVyXG5cdCIgXAorCSJsaVx0JDIsICU1XHRcdFx0IyAiICNuYW1lICJcblx0IiBcCisJInN5c2NhbGxcblx0IiBcCisJIm1vdmVcdCUwLCAkMlxuXHQiIFwKKwkiLnNldFx0cmVvcmRlciIgXAorCTogIj0mciIgKF9fdjApLCAiK3IiIChfX2EzKSBcCisJOiAiciIgKF9fYTApLCAiciIgKF9fYTEpLCAiciIgKF9fYTIpLCAiaSIgKF9fTlJfIyNuYW1lKSBcCisJOiAiJDIiLCAiJDgiLCAiJDkiLCAiJDEwIiwgIiQxMSIsICIkMTIiLCAiJDEzIiwgIiQxNCIsICIkMTUiLCAiJDI0IiwgXAorCSAgIm1lbW9yeSIpOyBcCisJXAorCWlmIChfX2EzID09IDApIFwKKwkJcmV0dXJuICh0eXBlKSBfX3YwOyBcCisJZXJybm8gPSBfX3YwOyBcCisJcmV0dXJuICh0eXBlKSAtMTsgXAorfQorCisjaWYgKF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fQUJJMzIpCisKKy8qCisgKiBVc2luZyB0aG9zZSBtZWFucyB5b3VyIGJyYWluIG5lZWRzIG1vcmUgdGhhbiBhbiBvaWwgY2hhbmdlIDstKQorICovCisKKyNkZWZpbmUgX3N5c2NhbGw1KHR5cGUsbmFtZSxhdHlwZSxhLGJ0eXBlLGIsY3R5cGUsYyxkdHlwZSxkLGV0eXBlLGUpIFwKK3R5cGUgbmFtZShhdHlwZSBhLCBidHlwZSBiLCBjdHlwZSBjLCBkdHlwZSBkLCBldHlwZSBlKSBcCit7IFwKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTAgYXNtKCIkNCIpID0gKHVuc2lnbmVkIGxvbmcpIGE7IFwKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTEgYXNtKCIkNSIpID0gKHVuc2lnbmVkIGxvbmcpIGI7IFwKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTIgYXNtKCIkNiIpID0gKHVuc2lnbmVkIGxvbmcpIGM7IFwKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTMgYXNtKCIkNyIpID0gKHVuc2lnbmVkIGxvbmcpIGQ7IFwKKwl1bnNpZ25lZCBsb25nIF9fdjA7IFwKKwlcCisJX19hc21fXyB2b2xhdGlsZSAoIFwKKwkiLnNldFx0bm9yZW9yZGVyXG5cdCIgXAorCSJsd1x0JDIsICU2XG5cdCIgXAorCSJzdWJ1XHQkMjksIDMyXG5cdCIgXAorCSJzd1x0JDIsIDE2KCQyOSlcblx0IiBcCisJImxpXHQkMiwgJTVcdFx0XHQjICIgI25hbWUgIlxuXHQiIFwKKwkic3lzY2FsbFxuXHQiIFwKKwkibW92ZVx0JTAsICQyXG5cdCIgXAorCSJhZGRpdVx0JDI5LCAzMlxuXHQiIFwKKwkiLnNldFx0cmVvcmRlciIgXAorCTogIj0mciIgKF9fdjApLCAiK3IiIChfX2EzKSBcCisJOiAiciIgKF9fYTApLCAiciIgKF9fYTEpLCAiciIgKF9fYTIpLCAiaSIgKF9fTlJfIyNuYW1lKSwgXAorCSAgIm0iICgodW5zaWduZWQgbG9uZyllKSBcCisJOiAiJDIiLCAiJDgiLCAiJDkiLCAiJDEwIiwgIiQxMSIsICIkMTIiLCAiJDEzIiwgIiQxNCIsICIkMTUiLCAiJDI0IiwgXAorCSAgIm1lbW9yeSIpOyBcCisJXAorCWlmIChfX2EzID09IDApIFwKKwkJcmV0dXJuICh0eXBlKSBfX3YwOyBcCisJZXJybm8gPSBfX3YwOyBcCisJcmV0dXJuICh0eXBlKSAtMTsgXAorfQorCisjZGVmaW5lIF9zeXNjYWxsNih0eXBlLG5hbWUsYXR5cGUsYSxidHlwZSxiLGN0eXBlLGMsZHR5cGUsZCxldHlwZSxlLGZ0eXBlLGYpIFwKK3R5cGUgbmFtZShhdHlwZSBhLCBidHlwZSBiLCBjdHlwZSBjLCBkdHlwZSBkLCBldHlwZSBlLCBmdHlwZSBmKSBcCit7IFwKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTAgYXNtKCIkNCIpID0gKHVuc2lnbmVkIGxvbmcpIGE7IFwKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTEgYXNtKCIkNSIpID0gKHVuc2lnbmVkIGxvbmcpIGI7IFwKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTIgYXNtKCIkNiIpID0gKHVuc2lnbmVkIGxvbmcpIGM7IFwKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTMgYXNtKCIkNyIpID0gKHVuc2lnbmVkIGxvbmcpIGQ7IFwKKwl1bnNpZ25lZCBsb25nIF9fdjA7IFwKKwlcCisJX19hc21fXyB2b2xhdGlsZSAoIFwKKwkiLnNldFx0bm9yZW9yZGVyXG5cdCIgXAorCSJsd1x0JDIsICU2XG5cdCIgXAorCSJsd1x0JDgsICU3XG5cdCIgXAorCSJzdWJ1XHQkMjksIDMyXG5cdCIgXAorCSJzd1x0JDIsIDE2KCQyOSlcblx0IiBcCisJInN3XHQkOCwgMjAoJDI5KVxuXHQiIFwKKwkibGlcdCQyLCAlNVx0XHRcdCMgIiAjbmFtZSAiXG5cdCIgXAorCSJzeXNjYWxsXG5cdCIgXAorCSJtb3ZlXHQlMCwgJDJcblx0IiBcCisJImFkZGl1XHQkMjksIDMyXG5cdCIgXAorCSIuc2V0XHRyZW9yZGVyIiBcCisJOiAiPSZyIiAoX192MCksICIrciIgKF9fYTMpIFwKKwk6ICJyIiAoX19hMCksICJyIiAoX19hMSksICJyIiAoX19hMiksICJpIiAoX19OUl8jI25hbWUpLCBcCisJICAibSIgKCh1bnNpZ25lZCBsb25nKWUpLCAibSIgKCh1bnNpZ25lZCBsb25nKWYpIFwKKwk6ICIkMiIsICIkOCIsICIkOSIsICIkMTAiLCAiJDExIiwgIiQxMiIsICIkMTMiLCAiJDE0IiwgIiQxNSIsICIkMjQiLCBcCisJICAibWVtb3J5Iik7IFwKKwlcCisJaWYgKF9fYTMgPT0gMCkgXAorCQlyZXR1cm4gKHR5cGUpIF9fdjA7IFwKKwllcnJubyA9IF9fdjA7IFwKKwlyZXR1cm4gKHR5cGUpIC0xOyBcCit9CisKKyNlbmRpZiAvKiAoX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkkzMikgKi8KKworI2lmIChfTUlQU19TSU0gPT0gX01JUFNfU0lNX05BQkkzMikgfHwgKF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fQUJJNjQpCisKKyNkZWZpbmUgX3N5c2NhbGw1KHR5cGUsbmFtZSxhdHlwZSxhLGJ0eXBlLGIsY3R5cGUsYyxkdHlwZSxkLGV0eXBlLGUpIFwKK3R5cGUgbmFtZSAoYXR5cGUgYSxidHlwZSBiLGN0eXBlIGMsZHR5cGUgZCxldHlwZSBlKSBcCit7IFwKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTAgYXNtKCIkNCIpID0gKHVuc2lnbmVkIGxvbmcpIGE7IFwKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTEgYXNtKCIkNSIpID0gKHVuc2lnbmVkIGxvbmcpIGI7IFwKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTIgYXNtKCIkNiIpID0gKHVuc2lnbmVkIGxvbmcpIGM7IFwKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTMgYXNtKCIkNyIpID0gKHVuc2lnbmVkIGxvbmcpIGQ7IFwKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTQgYXNtKCIkOCIpID0gKHVuc2lnbmVkIGxvbmcpIGU7IFwKKwl1bnNpZ25lZCBsb25nIF9fdjA7IFwKKwlcCisJX19hc21fXyB2b2xhdGlsZSAoIFwKKwkiLnNldFx0bm9yZW9yZGVyXG5cdCIgXAorCSJsaVx0JDIsICU2XHRcdFx0IyAiICNuYW1lICJcblx0IiBcCisJInN5c2NhbGxcblx0IiBcCisJIm1vdmVcdCUwLCAkMlxuXHQiIFwKKwkiLnNldFx0cmVvcmRlciIgXAorCTogIj0mciIgKF9fdjApLCAiK3IiIChfX2EzKSBcCisJOiAiciIgKF9fYTApLCAiciIgKF9fYTEpLCAiciIgKF9fYTIpLCAiciIgKF9fYTQpLCAiaSIgKF9fTlJfIyNuYW1lKSBcCisJOiAiJDIiLCAiJDkiLCAiJDEwIiwgIiQxMSIsICIkMTIiLCAiJDEzIiwgIiQxNCIsICIkMTUiLCAiJDI0IiwgXAorCSAgIm1lbW9yeSIpOyBcCisJXAorCWlmIChfX2EzID09IDApIFwKKwkJcmV0dXJuICh0eXBlKSBfX3YwOyBcCisJZXJybm8gPSBfX3YwOyBcCisJcmV0dXJuICh0eXBlKSAtMTsgXAorfQorCisjZGVmaW5lIF9zeXNjYWxsNih0eXBlLG5hbWUsYXR5cGUsYSxidHlwZSxiLGN0eXBlLGMsZHR5cGUsZCxldHlwZSxlLGZ0eXBlLGYpIFwKK3R5cGUgbmFtZSAoYXR5cGUgYSxidHlwZSBiLGN0eXBlIGMsZHR5cGUgZCxldHlwZSBlLGZ0eXBlIGYpIFwKK3sgXAorCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19hMCBhc20oIiQ0IikgPSAodW5zaWduZWQgbG9uZykgYTsgXAorCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19hMSBhc20oIiQ1IikgPSAodW5zaWduZWQgbG9uZykgYjsgXAorCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19hMiBhc20oIiQ2IikgPSAodW5zaWduZWQgbG9uZykgYzsgXAorCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19hMyBhc20oIiQ3IikgPSAodW5zaWduZWQgbG9uZykgZDsgXAorCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19hNCBhc20oIiQ4IikgPSAodW5zaWduZWQgbG9uZykgZTsgXAorCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19hNSBhc20oIiQ5IikgPSAodW5zaWduZWQgbG9uZykgZjsgXAorCXVuc2lnbmVkIGxvbmcgX192MDsgXAorCVwKKwlfX2FzbV9fIHZvbGF0aWxlICggXAorCSIuc2V0XHRub3Jlb3JkZXJcblx0IiBcCisJImxpXHQkMiwgJTdcdFx0XHQjICIgI25hbWUgIlxuXHQiIFwKKwkic3lzY2FsbFxuXHQiIFwKKwkibW92ZVx0JTAsICQyXG5cdCIgXAorCSIuc2V0XHRyZW9yZGVyIiBcCisJOiAiPSZyIiAoX192MCksICIrciIgKF9fYTMpIFwKKwk6ICJyIiAoX19hMCksICJyIiAoX19hMSksICJyIiAoX19hMiksICJyIiAoX19hNCksICJyIiAoX19hNSksIFwKKwkgICJpIiAoX19OUl8jI25hbWUpIFwKKwk6ICIkMiIsICIkOSIsICIkMTAiLCAiJDExIiwgIiQxMiIsICIkMTMiLCAiJDE0IiwgIiQxNSIsICIkMjQiLCBcCisJICAibWVtb3J5Iik7IFwKKwlcCisJaWYgKF9fYTMgPT0gMCkgXAorCQlyZXR1cm4gKHR5cGUpIF9fdjA7IFwKKwllcnJubyA9IF9fdjA7IFwKKwlyZXR1cm4gKHR5cGUpIC0xOyBcCit9CisKKyNlbmRpZiAvKiAoX01JUFNfU0lNID09IF9NSVBTX1NJTV9OQUJJMzIpIHx8IChfTUlQU19TSU0gPT0gX01JUFNfU0lNX0FCSTY0KSAqLworCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNkZWZpbmUgX19BUkNIX1dBTlRfSVBDX1BBUlNFX1ZFUlNJT04KKyNkZWZpbmUgX19BUkNIX1dBTlRfT0xEX1JFQURESVIKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0FMQVJNCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19HRVRIT1NUTkFNRQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfUEFVU0UKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NHRVRNQVNLCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19VVElNRQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfV0FJVFBJRAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU09DS0VUQ0FMTAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfRkFEVklTRTY0CisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19HRVRQR1JQCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19MTFNFRUsKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX05JQ0UKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX09MRF9HRVRSTElNSVQKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX09MRFVNT1VOVAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUEVORElORworI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUFJPQ01BU0sKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1JUX1NJR0FDVElPTgorIyBpZm5kZWYgX19taXBzNjQKKyMgIGRlZmluZSBfX0FSQ0hfV0FOVF9TVEFUNjQKKyMgZW5kaWYKKyMgaWZkZWYgQ09ORklHX01JUFMzMgorIyAgZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19USU1FCisjIGVuZGlmCisjIGlmZGVmIENPTkZJR19NSVBTMzJfTzMyCisjICBkZWZpbmUgX19BUkNIX1dBTlRfQ09NUEFUX1NZU19USU1FCisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIF9fS0VSTkVMX1NZU0NBTExTX18KKworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS9zaW0uaD4KKworLyoKKyAqIHdlIG5lZWQgdGhpcyBpbmxpbmUgLSBmb3JraW5nIGZyb20ga2VybmVsIHNwYWNlIHdpbGwgcmVzdWx0CisgKiBpbiBOTyBDT1BZIE9OIFdSSVRFICghISEpLCB1bnRpbCBhbiBleGVjdmUgaXMgZXhlY3V0ZWQuIFRoaXMKKyAqIGlzIG5vIHByb2JsZW0sIGJ1dCBmb3IgdGhlIHN0YWNrLiBUaGlzIGlzIGhhbmRsZWQgYnkgbm90IGxldHRpbmcKKyAqIG1haW4oKSB1c2UgdGhlIHN0YWNrIGF0IGFsbCBhZnRlciBmb3JrKCkuIFRodXMsIG5vIGZ1bmN0aW9uCisgKiBjYWxscyAtIHdoaWNoIG1lYW5zIGlubGluZSBjb2RlIGZvciBmb3JrIHRvbywgYXMgb3RoZXJ3aXNlIHdlCisgKiB3b3VsZCB1c2UgdGhlIHN0YWNrIHVwb24gZXhpdCBmcm9tICdmb3JrKCknLgorICoKKyAqIEFjdHVhbGx5IG9ubHkgcGF1c2UgYW5kIGZvcmsgYXJlIG5lZWRlZCBpbmxpbmUsIHNvIHRoYXQgdGhlcmUKKyAqIHdvbid0IGJlIGFueSBtZXNzaW5nIHdpdGggdGhlIHN0YWNrIGZyb20gbWFpbigpLCBidXQgd2UgZGVmaW5lCisgKiBzb21lIG90aGVycyB0b28uCisgKi8KK3N0YXRpYyBpbmxpbmUgX3N5c2NhbGwzKGludCxleGVjdmUsY29uc3QgY2hhciAqLGZpbGUsY2hhciAqKixhcmd2LGNoYXIgKiosZW52cCkKKworYXNtbGlua2FnZSB1bnNpZ25lZCBsb25nIHN5c19tbWFwKAorCQkJCXVuc2lnbmVkIGxvbmcgYWRkciwgc2l6ZV90IGxlbiwKKwkJCQlpbnQgcHJvdCwgaW50IGZsYWdzLAorCQkJCWludCBmZCwgb2ZmX3Qgb2Zmc2V0KTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfbW1hcDIoCisJCQl1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLAorCQkJdW5zaWduZWQgbG9uZyBwcm90LCB1bnNpZ25lZCBsb25nIGZsYWdzLAorCQkJdW5zaWduZWQgbG9uZyBmZCwgdW5zaWduZWQgbG9uZyBwZ29mZik7Cithc21saW5rYWdlIGludCBzeXNfZXhlY3ZlKG5hYmlfbm9fcmVnYXJncyBzdHJ1Y3QgcHRfcmVncyByZWdzKTsKK2FzbWxpbmthZ2UgaW50IHN5c19waXBlKG5hYmlfbm9fcmVnYXJncyBzdHJ1Y3QgcHRfcmVncyByZWdzKTsKK2FzbWxpbmthZ2UgaW50IHN5c19wdHJhY2UobG9uZyByZXF1ZXN0LCBsb25nIHBpZCwgbG9uZyBhZGRyLCBsb25nIGRhdGEpOworc3RydWN0IHNpZ2FjdGlvbjsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfcnRfc2lnYWN0aW9uKGludCBzaWcsCisJCQkJY29uc3Qgc3RydWN0IHNpZ2FjdGlvbiBfX3VzZXIgKmFjdCwKKwkJCQlzdHJ1Y3Qgc2lnYWN0aW9uIF9fdXNlciAqb2FjdCwKKwkJCQlzaXplX3Qgc2lnc2V0c2l6ZSk7CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9TWVNDQUxMU19fICovCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisvKgorICogIkNvbmRpdGlvbmFsIiBzeXNjYWxscworICoKKyAqIFdoYXQgd2Ugd2FudCBpcyBfX2F0dHJpYnV0ZV9fKCh3ZWFrLGFsaWFzKCJzeXNfbmlfc3lzY2FsbCIpKSksCisgKiBidXQgaXQgZG9lc24ndCB3b3JrIG9uIGFsbCB0b29sY2hhaW5zLCBzbyB3ZSBqdXN0IGRvIGl0IGJ5IGhhbmQKKyAqLworI2RlZmluZSBjb25kX3N5c2NhbGwoeCkgYXNtKCIud2Vha1x0IiAjeCAiXG4iICN4ICJcdD1cdHN5c19uaV9zeXNjYWxsIikKKworI2VuZGlmIC8qIF9BU01fVU5JU1REX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvdXNlci5oIGIvaW5jbHVkZS9hc20tbWlwcy91c2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODliZjhiNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvdXNlci5oCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTkgYnkgUmFsZiBCYWVjaGxlCisgKi8KKyNpZm5kZWYgX0FTTV9VU0VSX0gKKyNkZWZpbmUgX0FTTV9VU0VSX0gKKworI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3JlZy5oPgorCisvKgorICogQ29yZSBmaWxlIGZvcm1hdDogVGhlIGNvcmUgZmlsZSBpcyB3cml0dGVuIGluIHN1Y2ggYSB3YXkgdGhhdCBnZGIKKyAqIGNhbiB1bmRlcnN0YW5kIGl0IGFuZCBwcm92aWRlIHVzZWZ1bCBpbmZvcm1hdGlvbiB0byB0aGUgdXNlciAodW5kZXIKKyAqIGxpbnV4IHdlIHVzZSB0aGUgYHRyYWQtY29yZScgYmZkLCBOT1QgdGhlIGlyaXgtY29yZSkuICBUaGUgZmlsZQorICogY29udGVudHMgYXJlIGFzIGZvbGxvd3M6CisgKgorICogIHVwYWdlOiAxIHBhZ2UgY29uc2lzdGluZyBvZiBhIHVzZXIgc3RydWN0IHRoYXQgdGVsbHMgZ2RiCisgKgl3aGF0IGlzIHByZXNlbnQgaW4gdGhlIGZpbGUuICBEaXJlY3RseSBhZnRlciB0aGlzIGlzIGEKKyAqCWNvcHkgb2YgdGhlIHRhc2tfc3RydWN0LCB3aGljaCBpcyBjdXJyZW50bHkgbm90IHVzZWQgYnkgZ2RiLAorICoJYnV0IGl0IG1heSBjb21lIGluIGhhbmR5IGF0IHNvbWUgcG9pbnQuICBBbGwgb2YgdGhlIHJlZ2lzdGVycworICoJYXJlIHN0b3JlZCBhcyBwYXJ0IG9mIHRoZSB1cGFnZS4gIFRoZSB1cGFnZSBzaG91bGQgYWx3YXlzIGJlCisgKglvbmx5IG9uZSBwYWdlIGxvbmcuCisgKiAgZGF0YTogVGhlIGRhdGEgc2VnbWVudCBmb2xsb3dzIG5leHQuICBXZSB1c2UgY3VycmVudC0+ZW5kX3RleHQgdG8KKyAqCWN1cnJlbnQtPmJyayB0byBwaWNrIHVwIGFsbCBvZiB0aGUgdXNlciB2YXJpYWJsZXMsIHBsdXMgYW55IG1lbW9yeQorICoJdGhhdCBtYXkgaGF2ZSBiZWVuIHNicmsnZWQuICBObyBhdHRlbXB0IGlzIG1hZGUgdG8gZGV0ZXJtaW5lIGlmIGEKKyAqCXBhZ2UgaXMgZGVtYW5kLXplcm8gb3IgaWYgYSBwYWdlIGlzIHRvdGFsbHkgdW51c2VkLCB3ZSBqdXN0IGNvdmVyCisgKgl0aGUgZW50aXJlIHJhbmdlLiAgQWxsIG9mIHRoZSBhZGRyZXNzZXMgYXJlIHJvdW5kZWQgaW4gc3VjaCBhIHdheQorICoJdGhhdCBhbiBpbnRlZ3JhbCBudW1iZXIgb2YgcGFnZXMgaXMgd3JpdHRlbi4KKyAqICBzdGFjazogV2UgbmVlZCB0aGUgc3RhY2sgaW5mb3JtYXRpb24gaW4gb3JkZXIgdG8gZ2V0IGEgbWVhbmluZ2Z1bAorICoJYmFja3RyYWNlLiAgV2UgbmVlZCB0byB3cml0ZSB0aGUgZGF0YSBmcm9tIHVzcCB0bworICoJY3VycmVudC0+c3RhcnRfc3RhY2ssIHNvIHdlIHJvdW5kIGVhY2ggb2YgdGhlc2UgaW4gb3JkZXIgdG8gYmUgYWJsZQorICoJdG8gd3JpdGUgYW4gaW50ZWdlciBudW1iZXIgb2YgcGFnZXMuCisgKi8KK3N0cnVjdCB1c2VyIHsKKwl1bnNpZ25lZCBsb25nCXJlZ3NbRUZfU0laRSAvCQkvKiBpbnRlZ2VyIGFuZCBmcCByZWdzICovCisJCQlzaXplb2YodW5zaWduZWQgbG9uZykgKyA2NF07CisJc2l6ZV90CQl1X3RzaXplOwkJLyogdGV4dCBzaXplIChwYWdlcykgKi8KKwlzaXplX3QJCXVfZHNpemU7CQkvKiBkYXRhIHNpemUgKHBhZ2VzKSAqLworCXNpemVfdAkJdV9zc2l6ZTsJCS8qIHN0YWNrIHNpemUgKHBhZ2VzKSAqLworCXVuc2lnbmVkIGxvbmcJc3RhcnRfY29kZTsJCS8qIHRleHQgc3RhcnRpbmcgYWRkcmVzcyAqLworCXVuc2lnbmVkIGxvbmcJc3RhcnRfZGF0YTsJCS8qIGRhdGEgc3RhcnRpbmcgYWRkcmVzcyAqLworCXVuc2lnbmVkIGxvbmcJc3RhcnRfc3RhY2s7CQkvKiBzdGFjayBzdGFydGluZyBhZGRyZXNzICovCisJbG9uZyBpbnQJc2lnbmFsOwkJCS8qIHNpZ25hbCBjYXVzaW5nIGNvcmUgZHVtcCAqLworCXN0cnVjdCByZWdzICoJdV9hcjA7CQkJLyogaGVscCBnZGIgZmluZCByZWdpc3RlcnMgKi8KKwl1bnNpZ25lZCBsb25nCW1hZ2ljOwkJCS8qIGlkZW50aWZpZXMgYSBjb3JlIGZpbGUgKi8KKwljaGFyCQl1X2NvbW1bMzJdOwkJLyogdXNlciBjb21tYW5kIG5hbWUgKi8KK307CisKKyNkZWZpbmUgTkJQRwkJCVBBR0VfU0laRQorI2RlZmluZSBVUEFHRVMJCQkxCisjZGVmaW5lIEhPU1RfVEVYVF9TVEFSVF9BRERSCSh1LnN0YXJ0X2NvZGUpCisjZGVmaW5lIEhPU1RfREFUQV9TVEFSVF9BRERSCSh1LnN0YXJ0X2RhdGEpCisjZGVmaW5lIEhPU1RfU1RBQ0tfRU5EX0FERFIJKHUuc3RhcnRfc3RhY2sgKyB1LnVfc3NpemUgKiBOQlBHKQorCisjZW5kaWYgLyogX0FTTV9VU0VSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvdmdhLmggYi9pbmNsdWRlL2FzbS1taXBzL3ZnYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiMzVjZjAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3ZnYS5oCkBAIC0wLDAgKzEsMTkgQEAKKy8qCisgKglBY2Nlc3MgdG8gVkdBIHZpZGVvcmFtCisgKgorICoJKGMpIDE5OTggTWFydGluIE1hcmVzIDxtakB1Y3cuY3o+CisgKi8KKyNpZm5kZWYgX0FTTV9WR0FfSAorI2RlZmluZSBfQVNNX1ZHQV9ICisKKy8qCisgKglPbiB0aGUgUEMsIHdlIGNhbiBqdXN0IHJlY2FsY3VsYXRlIGFkZHJlc3NlcyBhbmQgdGhlbgorICoJYWNjZXNzIHRoZSB2aWRlb3JhbSBkaXJlY3RseSB3aXRob3V0IGFueSBibGFjayBtYWdpYy4KKyAqLworCisjZGVmaW5lIFZHQV9NQVBfTUVNKHgpCSgweGIwMDAwMDAwTCArICh1bnNpZ25lZCBsb25nKSh4KSkKKworI2RlZmluZSB2Z2FfcmVhZGIoeCkJKCooeCkpCisjZGVmaW5lIHZnYV93cml0ZWIoeCx5KQkoKih5KSA9ICh4KSkKKworI2VuZGlmIC8qIF9BU01fVkdBX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvdnI0MTgxL2lycS5oIGIvaW5jbHVkZS9hc20tbWlwcy92cjQxODEvaXJxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJmMGVhOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvdnI0MTgxL2lycS5oCkBAIC0wLDAgKzEsMTIyIEBACisvKgorICogTWFjcm9zIGZvciB2cjQxODEgSVJRIG51bWJlcnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAxIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgorICogQXV0aG9yOiBKdW4gU3VuLCBqc3VuQG12aXN0YS5jb20gb3IganN1bkBqdW5zdW4ubmV0CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworLyoKKyAqIFN0cmF0ZWd5OgorICoKKyAqIFZyNDE4MSBoYXMgY29uY2VwdHVhbGx5IHRocmVlIGxldmVscyBvZiBpbnRlcnJ1cHQgY29udHJvbGxlcnM6CisgKiAgMS4gdGhlIENQVSBpdHNlbGYgd2l0aCA4IGludHIgbGV2ZWwuCisgKiAgMi4gc3lzdGVtIGludGVycnVwdCBjb250cm9sbGVyLCBjYXNjYWRlZCBmcm9tIGludDAgcGluIGluIENQVSwgMzIgaW50cnMKKyAqICAzLiBHUElPIGludGVycnVwdHMgOiBmb3J3YXJkaW5nIGV4dGVybmFsIGludGVycnVwdHMgdG8gc3lzIGludHIgY29udHJvbGxlcgorICovCisKKy8qIGRlY2lkZSB0aGUgaXJxIGJsb2NrIGFzc2lnbm1lbnQgKi8KKyNkZWZpbmUJVlI0MTgxX05VTV9DUFVfSVJRCTgKKyNkZWZpbmUJVlI0MTgxX05VTV9TWVNfSVJRCTMyCisjZGVmaW5lCVZSNDE4MV9OVU1fR1BJT19JUlEJMTYKKworI2RlZmluZQlWUjQxODFfSVJRX0JBU0UJCTAKKworI2RlZmluZQlWUjQxODFfQ1BVX0lSUV9CQVNFCVZSNDE4MV9JUlFfQkFTRQorI2RlZmluZQlWUjQxODFfU1lTX0lSUV9CQVNFCShWUjQxODFfQ1BVX0lSUV9CQVNFICsgVlI0MTgxX05VTV9DUFVfSVJRKQorI2RlZmluZQlWUjQxODFfR1BJT19JUlFfQkFTRQkoVlI0MTgxX1NZU19JUlFfQkFTRSArIFZSNDE4MV9OVU1fU1lTX0lSUSkKKworLyogQ1BVIGludGVycnVwdHMgKi8KKworLyoKKyAgIElQMCAtIFNvZnR3YXJlIGludGVycnVwdAorICAgSVAxIC0gU29mdHdhcmUgaW50ZXJydXB0CisgICBJUDIgLSBBbGwgYnV0IGJhdHRlcnksIGhpZ2ggc3BlZWQgbW9kZW0sIGFuZCByZWFsIHRpbWUgY2xvY2sKKyAgIElQMyAtIFJUQyBMb25nMSAoc3lzdGVtIHRpbWVyKQorICAgSVA0IC0gUlRDIExvbmcyCisgICBJUDUgLSBIaWdoIFNwZWVkIE1vZGVtICh1bnVzZWQgb24gVlI0MTgxKQorICAgSVA2IC0gVW51c2VkCisgICBJUDcgLSBUaW1lciBpbnRlcnJ1cHQgZnJvbSBDUE9fQ09NUEFSRQorKi8KKworI2RlZmluZSBWUjQxODFfSVJRX1NXMSAgICAgICAoVlI0MTgxX0NQVV9JUlFfQkFTRSArIDApCisjZGVmaW5lIFZSNDE4MV9JUlFfU1cyICAgICAgIChWUjQxODFfQ1BVX0lSUV9CQVNFICsgMSkKKyNkZWZpbmUgVlI0MTgxX0lSUV9JTlQwICAgICAgKFZSNDE4MV9DUFVfSVJRX0JBU0UgKyAyKQorI2RlZmluZSBWUjQxODFfSVJRX0lOVDEgICAgICAoVlI0MTgxX0NQVV9JUlFfQkFTRSArIDMpCisjZGVmaW5lIFZSNDE4MV9JUlFfSU5UMiAgICAgIChWUjQxODFfQ1BVX0lSUV9CQVNFICsgNCkKKyNkZWZpbmUgVlI0MTgxX0lSUV9JTlQzICAgICAgKFZSNDE4MV9DUFVfSVJRX0JBU0UgKyA1KQorI2RlZmluZSBWUjQxODFfSVJRX0lOVDQgICAgICAoVlI0MTgxX0NQVV9JUlFfQkFTRSArIDYpCisjZGVmaW5lIFZSNDE4MV9JUlFfVElNRVIgICAgIChWUjQxODFfQ1BVX0lSUV9CQVNFICsgNykKKworCisvKiBDYXNjYWRlZCBmcm9tIFZSNDE4MV9JUlFfSU5UMCAoSUNVIG1hcHBlZCBpbnRlcnJ1cHRzKSAqLworCisvKgorICAgSVAyIC0gc2FtZSBhcyBWUjQxODFfSVJRX0lOVDEKKyAgIElQOCAtIFRoaXMgaXMgYSBjYXNjYWRlIHRvIEdQSU8gSVJRJ3MuIERvIG5vdCB1c2UuCisgICBJUDE2IC0gc2FtZSBhcyBWUjQxODFfSVJRX0lOVDIKKyAgIElQMTggLSBDb21wYWN0Rmxhc2gKKyovCisKKyNkZWZpbmUgVlI0MTgxX0lSUV9CQVRURVJZICAgKFZSNDE4MV9TWVNfSVJRX0JBU0UgKyAwKQorI2RlZmluZSBWUjQxODFfSVJRX1BPV0VSICAgICAoVlI0MTgxX1NZU19JUlFfQkFTRSArIDEpCisjZGVmaW5lIFZSNDE4MV9JUlFfUlRDTDEgICAgIChWUjQxODFfU1lTX0lSUV9CQVNFICsgMikKKyNkZWZpbmUgVlI0MTgxX0lSUV9FVElNRVIgICAgKFZSNDE4MV9TWVNfSVJRX0JBU0UgKyAzKQorI2RlZmluZSBWUjQxODFfSVJRX1JGVTEyICAgICAoVlI0MTgxX1NZU19JUlFfQkFTRSArIDQpCisjZGVmaW5lIFZSNDE4MV9JUlFfUElVICAgICAgIChWUjQxODFfU1lTX0lSUV9CQVNFICsgNSkKKyNkZWZpbmUgVlI0MTgxX0lSUV9BSVUgICAgICAgKFZSNDE4MV9TWVNfSVJRX0JBU0UgKyA2KQorI2RlZmluZSBWUjQxODFfSVJRX0tJVSAgICAgICAoVlI0MTgxX1NZU19JUlFfQkFTRSArIDcpCisjZGVmaW5lIFZSNDE4MV9JUlFfR0lVICAgICAgIChWUjQxODFfU1lTX0lSUV9CQVNFICsgOCkKKyNkZWZpbmUgVlI0MTgxX0lSUV9TSVUgICAgICAgKFZSNDE4MV9TWVNfSVJRX0JBU0UgKyA5KQorI2RlZmluZSBWUjQxODFfSVJRX1JGVTE4ICAgICAoVlI0MTgxX1NZU19JUlFfQkFTRSArIDEwKQorI2RlZmluZSBWUjQxODFfSVJRX1NPRlQgICAgICAoVlI0MTgxX1NZU19JUlFfQkFTRSArIDExKQorI2RlZmluZSBWUjQxODFfSVJRX1JGVTIwICAgICAoVlI0MTgxX1NZU19JUlFfQkFTRSArIDEyKQorI2RlZmluZSBWUjQxODFfSVJRX0RPWkVQSVUgICAoVlI0MTgxX1NZU19JUlFfQkFTRSArIDEzKQorI2RlZmluZSBWUjQxODFfSVJRX1JGVTIyICAgICAoVlI0MTgxX1NZU19JUlFfQkFTRSArIDE0KQorI2RlZmluZSBWUjQxODFfSVJRX1JGVTIzICAgICAoVlI0MTgxX1NZU19JUlFfQkFTRSArIDE1KQorI2RlZmluZSBWUjQxODFfSVJRX1JUQ0wyICAgICAoVlI0MTgxX1NZU19JUlFfQkFTRSArIDE2KQorI2RlZmluZSBWUjQxODFfSVJRX0xFRCAgICAgICAoVlI0MTgxX1NZU19JUlFfQkFTRSArIDE3KQorI2RlZmluZSBWUjQxODFfSVJRX0VDVSAgICAgICAoVlI0MTgxX1NZU19JUlFfQkFTRSArIDE4KQorI2RlZmluZSBWUjQxODFfSVJRX0NTVSAgICAgICAoVlI0MTgxX1NZU19JUlFfQkFTRSArIDE5KQorI2RlZmluZSBWUjQxODFfSVJRX1VTQiAgICAgICAoVlI0MTgxX1NZU19JUlFfQkFTRSArIDIwKQorI2RlZmluZSBWUjQxODFfSVJRX0RNQSAgICAgICAoVlI0MTgxX1NZU19JUlFfQkFTRSArIDIxKQorI2RlZmluZSBWUjQxODFfSVJRX0xDRCAgICAgICAoVlI0MTgxX1NZU19JUlFfQkFTRSArIDIyKQorI2RlZmluZSBWUjQxODFfSVJRX1JGVTMxICAgICAoVlI0MTgxX1NZU19JUlFfQkFTRSArIDIzKQorI2RlZmluZSBWUjQxODFfSVJRX1JGVTMyICAgICAoVlI0MTgxX1NZU19JUlFfQkFTRSArIDI0KQorI2RlZmluZSBWUjQxODFfSVJRX1JGVTMzICAgICAoVlI0MTgxX1NZU19JUlFfQkFTRSArIDI1KQorI2RlZmluZSBWUjQxODFfSVJRX1JGVTM0ICAgICAoVlI0MTgxX1NZU19JUlFfQkFTRSArIDI2KQorI2RlZmluZSBWUjQxODFfSVJRX1JGVTM1ICAgICAoVlI0MTgxX1NZU19JUlFfQkFTRSArIDI3KQorI2RlZmluZSBWUjQxODFfSVJRX1JGVTM2ICAgICAoVlI0MTgxX1NZU19JUlFfQkFTRSArIDI4KQorI2RlZmluZSBWUjQxODFfSVJRX1JGVTM3ICAgICAoVlI0MTgxX1NZU19JUlFfQkFTRSArIDI5KQorI2RlZmluZSBWUjQxODFfSVJRX1JGVTM4ICAgICAoVlI0MTgxX1NZU19JUlFfQkFTRSArIDMwKQorI2RlZmluZSBWUjQxODFfSVJRX1JGVTM5ICAgICAoVlI0MTgxX1NZU19JUlFfQkFTRSArIDMxKQorCisvKiBDYXNjYWRlZCBmcm9tIFZSNDE4MV9JUlFfR0lVICovCisjZGVmaW5lIFZSNDE4MV9JUlFfR1BJTzAgICAgIChWUjQxODFfR1BJT19JUlFfQkFTRSArIDApCisjZGVmaW5lIFZSNDE4MV9JUlFfR1BJTzEgICAgIChWUjQxODFfR1BJT19JUlFfQkFTRSArIDEpCisjZGVmaW5lIFZSNDE4MV9JUlFfR1BJTzIgICAgIChWUjQxODFfR1BJT19JUlFfQkFTRSArIDIpCisjZGVmaW5lIFZSNDE4MV9JUlFfR1BJTzMgICAgIChWUjQxODFfR1BJT19JUlFfQkFTRSArIDMpCisjZGVmaW5lIFZSNDE4MV9JUlFfR1BJTzQgICAgIChWUjQxODFfR1BJT19JUlFfQkFTRSArIDQpCisjZGVmaW5lIFZSNDE4MV9JUlFfR1BJTzUgICAgIChWUjQxODFfR1BJT19JUlFfQkFTRSArIDUpCisjZGVmaW5lIFZSNDE4MV9JUlFfR1BJTzYgICAgIChWUjQxODFfR1BJT19JUlFfQkFTRSArIDYpCisjZGVmaW5lIFZSNDE4MV9JUlFfR1BJTzcgICAgIChWUjQxODFfR1BJT19JUlFfQkFTRSArIDcpCisjZGVmaW5lIFZSNDE4MV9JUlFfR1BJTzggICAgIChWUjQxODFfR1BJT19JUlFfQkFTRSArIDgpCisjZGVmaW5lIFZSNDE4MV9JUlFfR1BJTzkgICAgIChWUjQxODFfR1BJT19JUlFfQkFTRSArIDkpCisjZGVmaW5lIFZSNDE4MV9JUlFfR1BJTzEwICAgIChWUjQxODFfR1BJT19JUlFfQkFTRSArIDEwKQorI2RlZmluZSBWUjQxODFfSVJRX0dQSU8xMSAgICAoVlI0MTgxX0dQSU9fSVJRX0JBU0UgKyAxMSkKKyNkZWZpbmUgVlI0MTgxX0lSUV9HUElPMTIgICAgKFZSNDE4MV9HUElPX0lSUV9CQVNFICsgMTIpCisjZGVmaW5lIFZSNDE4MV9JUlFfR1BJTzEzICAgIChWUjQxODFfR1BJT19JUlFfQkFTRSArIDEzKQorI2RlZmluZSBWUjQxODFfSVJRX0dQSU8xNCAgICAoVlI0MTgxX0dQSU9fSVJRX0JBU0UgKyAxNCkKKyNkZWZpbmUgVlI0MTgxX0lSUV9HUElPMTUgICAgKFZSNDE4MV9HUElPX0lSUV9CQVNFICsgMTUpCisKKworLy8gQWx0ZXJuYXRpdmUgdG8gYWJvdmUgR1BJTyBJUlEgZGVmaW5lcworI2RlZmluZSBWUjQxODFfSVJRX0dQSU8ocGluKSAoKFZSNDE4MV9JUlFfR1BJTzApICsgKHBpbikpCisKKyNkZWZpbmUgVlI0MTgxX0lSUV9NQVggICAgICAgKFZSNDE4MV9JUlFfQkFTRSArIFZSNDE4MV9OVU1fQ1BVX0lSUSArIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZSNDE4MV9OVU1fU1lTX0lSUSArIFZSNDE4MV9OVU1fR1BJT19JUlEpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3ZyNDE4MS92cjQxODEuaCBiL2luY2x1ZGUvYXNtLW1pcHMvdnI0MTgxL3ZyNDE4MS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjNWQ2MDcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3ZyNDE4MS92cjQxODEuaApAQCAtMCwwICsxLDQxMyBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBieSBNaWNoYWVsIEtsYXIKKyAqCisgKiBDb3B5cmlnaHQgMjAwMSBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KKyAqIEF1dGhvcjoganN1bkBtdmlzdGEuY29tIG9yIGpzdW5AanVuc3VuLm5ldAorICoKKyAqLworI2lmbmRlZiBfX0FTTV9WUjQxODFfVlI0MTgxX0gKKyNkZWZpbmUgX19BU01fVlI0MTgxX1ZSNDE4MV9ICisKKyNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CisKKyNpbmNsdWRlIDxhc20vdnI0MTgxL2lycS5oPgorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2RlZmluZSBfX3ByZWc4CQkodm9sYXRpbGUgdW5zaWduZWQgY2hhciopCisjZGVmaW5lIF9fcHJlZzE2CSh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCopCisjZGVmaW5lIF9fcHJlZzMyCSh2b2xhdGlsZSB1bnNpZ25lZCBpbnQqKQorI2Vsc2UKKyNkZWZpbmUgX19wcmVnOAorI2RlZmluZSBfX3ByZWcxNgorI2RlZmluZSBfX3ByZWczMgorI2VuZGlmCisKKy8vIEVtYmVkZGVkIENQVSBwZXJpcGhlcmFsIHJlZ2lzdGVycworLy8gTm90ZSB0aGF0IG1hbnkgb2YgdGhlIHJlZ2lzdGVycyBoYXZlIGRpZmZlcmVudCBwaHlzaWNhbCBhZGRyZXNzIGZvciBWUjQxODEKKworLy8gQnVzIENvbnRyb2wgVW5pdCAoQkNVKQorI2RlZmluZSBWUjQxODFfQkNVQ05UUkVHMQlfX3ByZWcxNihLU0VHMSArIDB4MEEwMDAwMDApCS8qIEJDVSBjb250cm9sIHJlZ2lzdGVyIDEgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX0NNVUNMS01TSwlfX3ByZWcxNihLU0VHMSArIDB4MEEwMDAwMDQpCS8qIENsb2NrIG1hc2sgcmVnaXN0ZXIgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX0NNVUNMS01TS19NU0tDU1VQQ0xLICAweDAwNDAKKyNkZWZpbmUgVlI0MTgxX0NNVUNMS01TS19NU0tBSVVQQ0xLICAweDAwMjAKKyNkZWZpbmUgVlI0MTgxX0NNVUNMS01TS19NU0tQSVVQQ0xLICAweDAwMTAKKyNkZWZpbmUgVlI0MTgxX0NNVUNMS01TS19NU0tBRFVQQ0xLICAweDAwMDgKKyNkZWZpbmUgVlI0MTgxX0NNVUNMS01TS19NU0tTSVUxOE0gICAweDAwMDQKKyNkZWZpbmUgVlI0MTgxX0NNVUNMS01TS19NU0tBRFUxOE0gICAweDAwMDIKKyNkZWZpbmUgVlI0MTgxX0NNVUNMS01TS19NU0tVU0IgICAgICAweDAwMDEKKyNkZWZpbmUgVlI0MTgxX0NNVUNMS01TS19NU0tTSVUgICAgICBWUjQxODFfQ01VQ0xLTVNLX01TS1NJVTE4TQorI2RlZmluZSBWUjQxODFfQkNVU1BFRURSRUcJX19wcmVnMTYoS1NFRzEgKyAweDBBMDAwMDBDKQkvKiBCQ1UgYWNjZXNzIHRpbWUgcGFyYW1ldGVyIChSL1cpICovCisjZGVmaW5lIFZSNDE4MV9CQ1VSRkNOVFJFRwlfX3ByZWcxNihLU0VHMSArIDB4MEEwMDAwMTApCS8qIEJDVSByZWZyZXNoIGNvbnRyb2wgcmVnaXN0ZXIgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX1JFVklEUkVHCQlfX3ByZWcxNihLU0VHMSArIDB4MEEwMDAwMTQpCS8qIFJldmlzaW9uIElEIHJlZ2lzdGVyIChSKSAqLworI2RlZmluZSBWUjQxODFfQ0xLU1BFRURSRUcJX19wcmVnMTYoS1NFRzEgKyAweDBBMDAwMDE4KQkvKiBDbG9jayBzcGVlZCByZWdpc3RlciAoUikgKi8KKyNkZWZpbmUgVlI0MTgxX0VET01DWVRSRUcJX19wcmVnMTYoS1NFRzEgKyAweDBBMDAwMzAwKQkvKiBNZW1vcnkgY3ljbGUgdGltaW5nIHJlZ2lzdGVyIChSL1cpICovCisjZGVmaW5lIFZSNDE4MV9NRU1DRkdfUkVHCV9fcHJlZzE2KEtTRUcxICsgMHgwQTAwMDMwNCkJLyogTWVtb3J5IGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX01PREVfUkVHCQlfX3ByZWcxNihLU0VHMSArIDB4MEEwMDAzMDgpCS8qIFNEUkFNIG1vZGUgcmVnaXN0ZXIgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX1NEVElNSU5HUkVHCV9fcHJlZzE2KEtTRUcxICsgMHgwQTAwMDMwQykJLyogU0RSQU0gdGltaW5nIHJlZ2lzdGVyIChSL1cpICovCisKKy8vIERNQSBDb250cm9sIFVuaXQgKERDVSkKKyNkZWZpbmUgVlI0MTgxX01JQ0RFU1QxUkVHMQlfX3ByZWcxNihLU0VHMSArIDB4MEEwMDAwMjApCS8qIE1pY3JvcGhvbmUgZGVzdGluYXRpb24gMSBhZGRyZXNzIHJlZ2lzdGVyIDEgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX01JQ0RFU1QxUkVHMglfX3ByZWcxNihLU0VHMSArIDB4MEEwMDAwMjIpCS8qIE1pY3JvcGhvbmUgZGVzdGluYXRpb24gMSBhZGRyZXNzIHJlZ2lzdGVyIDIgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX01JQ0RFU1QyUkVHMQlfX3ByZWcxNihLU0VHMSArIDB4MEEwMDAwMjQpCS8qIE1pY3JvcGhvbmUgZGVzdGluYXRpb24gMiBhZGRyZXNzIHJlZ2lzdGVyIDEgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX01JQ0RFU1QyUkVHMglfX3ByZWcxNihLU0VHMSArIDB4MEEwMDAwMjYpCS8qIE1pY3JvcGhvbmUgZGVzdGluYXRpb24gMiBhZGRyZXNzIHJlZ2lzdGVyIDIgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX1NQS1JSQzFSRUcxCV9fcHJlZzE2KEtTRUcxICsgMHgwQTAwMDAyOCkJLyogU3BlYWtlciBTb3VyY2UgMSBhZGRyZXNzIHJlZ2lzdGVyIDEgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX1NQS1JSQzFSRUcyCV9fcHJlZzE2KEtTRUcxICsgMHgwQTAwMDAyQSkJLyogU3BlYWtlciBTb3VyY2UgMSBhZGRyZXNzIHJlZ2lzdGVyIDIgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX1NQS1JSQzJSRUcxCV9fcHJlZzE2KEtTRUcxICsgMHgwQTAwMDAyQykJLyogU3BlYWtlciBTb3VyY2UgMiBhZGRyZXNzIHJlZ2lzdGVyIDEgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX1NQS1JSQzJSRUcyCV9fcHJlZzE2KEtTRUcxICsgMHgwQTAwMDAyRSkJLyogU3BlYWtlciBTb3VyY2UgMiBhZGRyZXNzIHJlZ2lzdGVyIDIgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX0RNQVJTVFJFRwlfX3ByZWcxNihLU0VHMSArIDB4MEEwMDAwNDApCS8qIERNQSBSZXNldCByZWdpc3RlciAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfQUlVRE1BTVNLUkVHCV9fcHJlZzE2KEtTRUcxICsgMHgwQTAwMDA0NikJLyogQXVkaW8gRE1BIG1hc2sgcmVnaXN0ZXIgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX1VTQkRNQU1TS1JFRwlfX3ByZWcxNihLU0VHMSArIDB4MEEwMDA2MDApCS8qIFVTQiBETUEgTWFzayByZWdpc3RlciAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfVVNCUlhTMUFSRUcxCV9fcHJlZzE2KEtTRUcxICsgMHgwQTAwMDYwMikJLyogVVNCIFJ4IHNvdXJjZSAxIGFkZHJlc3MgcmVnaXN0ZXIgMSAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfVVNCUlhTMUFSRUcyCV9fcHJlZzE2KEtTRUcxICsgMHgwQTAwMDYwNCkJLyogVVNCIFJ4IHNvdXJjZSAxIGFkZHJlc3MgcmVnaXN0ZXIgMiAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfVVNCUlhTMkFSRUcxCV9fcHJlZzE2KEtTRUcxICsgMHgwQTAwMDYwNikJLyogVVNCIFJ4IHNvdXJjZSAyIGFkZHJlc3MgcmVnaXN0ZXIgMSAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfVVNCUlhTMkFSRUcyCV9fcHJlZzE2KEtTRUcxICsgMHgwQTAwMDYwOCkJLyogVVNCIFJ4IHNvdXJjZSAyIGFkZHJlc3MgcmVnaXN0ZXIgMiAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfVVNCVFhTMUFSRUcxCV9fcHJlZzE2KEtTRUcxICsgMHgwQTAwMDYwQSkJLyogVVNCIFR4IHNvdXJjZSAxIGFkZHJlc3MgcmVnaXN0ZXIgMSAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfVVNCVFhTMUFSRUcyCV9fcHJlZzE2KEtTRUcxICsgMHgwQTAwMDYwQykJLyogVVNCIFR4IHNvdXJjZSAxIGFkZHJlc3MgcmVnaXN0ZXIgMiAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfVVNCVFhTMkFSRUcxCV9fcHJlZzE2KEtTRUcxICsgMHgwQTAwMDYwRSkJLyogVVNCIFR4IHNvdXJjZSAyIGFkZHJlc3MgcmVnaXN0ZXIgMSAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfVVNCVFhTMkFSRUcyCV9fcHJlZzE2KEtTRUcxICsgMHgwQTAwMDYxMCkJLyogVVNCIFR4IHNvdXJjZSAyIGFkZHJlc3MgcmVnaXN0ZXIgMiAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfVVNCUlhEMUFSRUcxCV9fcHJlZzE2KEtTRUcxICsgMHgwQTAwMDYyQSkJLyogVVNCIFJ4IGRlc3RpbmF0aW9uIDEgYWRkcmVzcyByZWdpc3RlciAxIChSL1cpICovCisjZGVmaW5lIFZSNDE4MV9VU0JSWEQxQVJFRzIJX19wcmVnMTYoS1NFRzEgKyAweDBBMDAwNjJDKQkvKiBVU0IgUnggZGVzdGluYXRpb24gMSBhZGRyZXNzIHJlZ2lzdGVyIDIgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX1VTQlJYRDJBUkVHMQlfX3ByZWcxNihLU0VHMSArIDB4MEEwMDA2MkUpCS8qIFVTQiBSeCBkZXN0aW5hdGlvbiAyIGFkZHJlc3MgcmVnaXN0ZXIgMSAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfVVNCUlhEMkFSRUcyCV9fcHJlZzE2KEtTRUcxICsgMHgwQTAwMDYzMCkJLyogVVNCIFJ4IGRlc3RpbmF0aW9uIDIgYWRkcmVzcyByZWdpc3RlciAyIChSL1cpICovCisjZGVmaW5lIFZSNDE4MV9VU0JUWEQxQVJFRzEJX19wcmVnMTYoS1NFRzEgKyAweDBBMDAwNjMyKQkvKiBVU0IgVHggZGVzdGluYXRpb24gMSBhZGRyZXNzIHJlZ2lzdGVyIDEgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX1VTQlRYRDFBUkVHMglfX3ByZWcxNihLU0VHMSArIDB4MEEwMDA2MzQpCS8qIFVTQiBUeCBkZXN0aW5hdGlvbiAxIGFkZHJlc3MgcmVnaXN0ZXIgMiAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfVVNCVFhEMkFSRUcxCV9fcHJlZzE2KEtTRUcxICsgMHgwQTAwMDYzNikJLyogVVNCIFR4IGRlc3RpbmF0aW9uIDIgYWRkcmVzcyByZWdpc3RlciAxIChSL1cpICovCisjZGVmaW5lIFZSNDE4MV9VU0JUWEQyQVJFRzIJX19wcmVnMTYoS1NFRzEgKyAweDBBMDAwNjM4KQkvKiBVU0IgVHggZGVzdGluYXRpb24gMiBhZGRyZXNzIHJlZ2lzdGVyIDIgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX1J4UkNMRU5SRUcJX19wcmVnMTYoS1NFRzEgKyAweDBBMDAwNjUyKQkvKiBVU0IgUnggcmVjb3JkIGxlbmd0aCByZWdpc3RlciAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfVHhSQ0xFTlJFRwlfX3ByZWcxNihLU0VHMSArIDB4MEEwMDA2NTQpCS8qIFVTQiBUeCByZWNvcmQgbGVuZ3RoIHJlZ2lzdGVyIChSL1cpICovCisjZGVmaW5lIFZSNDE4MV9NSUNSQ0xFTlJFRwlfX3ByZWcxNihLU0VHMSArIDB4MEEwMDA2NTgpCS8qIE1pY3JvcGhvbmUgcmVjb3JkIGxlbmd0aCByZWdpc3RlciAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfU1BLUkNMRU5SRUcJX19wcmVnMTYoS1NFRzEgKyAweDBBMDAwNjVBKQkvKiBTcGVha2VyIHJlY29yZCBsZW5ndGggcmVnaXN0ZXIgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX1VTQkNGR1JFRwlfX3ByZWcxNihLU0VHMSArIDB4MEEwMDA2NUMpCS8qIFVTQiBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIChSL1cpICovCisjZGVmaW5lIFZSNDE4MV9NSUNETUFDRkdSRUcJX19wcmVnMTYoS1NFRzEgKyAweDBBMDAwNjVFKQkvKiBNaWNyb3Bob25lIERNQSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIChSL1cpICovCisjZGVmaW5lIFZSNDE4MV9TUEtETUFDRkdSRUcJX19wcmVnMTYoS1NFRzEgKyAweDBBMDAwNjYwKQkvKiBTcGVha2VyIERNQSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIChSL1cpICovCisjZGVmaW5lIFZSNDE4MV9ETUFJVFJRUkVHCV9fcHJlZzE2KEtTRUcxICsgMHgwQTAwMDY2MikJLyogRE1BIGludGVycnVwdCByZXF1ZXN0IHJlZ2lzdGVyIChSL1cpICovCisjZGVmaW5lIFZSNDE4MV9ETUFDTFRSRUcJX19wcmVnMTYoS1NFRzEgKyAweDBBMDAwNjY0KQkvKiBETUEgY29udHJvbCByZWdpc3RlciAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfRE1BSVRNS1JFRwlfX3ByZWcxNihLU0VHMSArIDB4MEEwMDA2NjYpCS8qIERNQSBpbnRlcnJ1cHQgbWFzayByZWdpc3RlciAoUi9XKSAqLworCisvLyBJU0EgQnJpZGdlCisjZGVmaW5lIFZSNDE4MV9JU0FCUkdDVEwJX19wcmVnMTYoS1NFRzEgKyAweDBCMDAwMkMwKQkvKiBJU0EgQnJpZGdlIENvbnRyb2wgUmVnaXN0ZXIgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX0lTQUJSR1NUUwlfX3ByZWcxNihLU0VHMSArIDB4MEIwMDAyQzIpCS8qIElTQSBCcmlkZ2UgU3RhdHVzIFJlZ2lzdGVyIChSL1cpICovCisjZGVmaW5lIFZSNDE4MV9YSVNBQ1RMCQlfX3ByZWcxNihLU0VHMSArIDB4MEIwMDAyQzQpCS8qIEV4dGVybmFsIElTQSBDb250cm9sIFJlZ2lzdGVyIChSL1cpICovCisKKy8vIENsb2NrZWQgU2VyaWFsIEludGVyZmFjZSAoQ1NJKQorI2RlZmluZSBWUjQxODFfQ1NJTU9ERQkJX19wcmVnMTYoS1NFRzEgKyAweDBCMDAwOTAwKQkvKiBDU0kgTW9kZSBSZWdpc3RlciAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfQ1NJUlhEQVRBCV9fcHJlZzE2KEtTRUcxICsgMHgwQjAwMDkwMikJLyogQ1NJIFJlY2VpdmUgRGF0YSBSZWdpc3RlciAoUikgKi8KKyNkZWZpbmUgVlI0MTgxX0NTSVRYREFUQQlfX3ByZWcxNihLU0VHMSArIDB4MEIwMDA5MDQpCS8qIENTSSBUcmFuc21pdCBEYXRhIFJlZ2lzdGVyIChSL1cpICovCisjZGVmaW5lIFZSNDE4MV9DU0lMU1RBVAkJX19wcmVnMTYoS1NFRzEgKyAweDBCMDAwOTA2KQkvKiBDU0kgTGluZSBTdGF0dXMgUmVnaXN0ZXIgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX0NTSUlOVE1TSwlfX3ByZWcxNihLU0VHMSArIDB4MEIwMDA5MDgpCS8qIENTSSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfQ1NJSU5UU1RBVAlfX3ByZWcxNihLU0VHMSArIDB4MEIwMDA5MGEpCS8qIENTSSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIChSL1cpICovCisjZGVmaW5lIFZSNDE4MV9DU0lUWEJMRU4JX19wcmVnMTYoS1NFRzEgKyAweDBCMDAwOTBjKQkvKiBDU0kgVHJhbnNtaXQgQnVyc3QgTGVuZ3RoIFJlZ2lzdGVyIChSL1cpICovCisjZGVmaW5lIFZSNDE4MV9DU0lSWEJMRU4JX19wcmVnMTYoS1NFRzEgKyAweDBCMDAwOTBlKQkvKiBDU0kgUmVjZWl2ZSBCdXJzdCBMZW5ndGggUmVnaXN0ZXIgKFIvVykgKi8KKworLy8gSW50ZXJydXB0IENvbnRyb2wgVW5pdCAoSUNVKQorI2RlZmluZSBWUjQxODFfU1lTSU5UMVJFRwlfX3ByZWcxNihLU0VHMSArIDB4MEEwMDAwODApCS8qIExldmVsIDEgU3lzdGVtIGludGVycnVwdCByZWdpc3RlciAxIChSKSAqLworI2RlZmluZSBWUjQxODFfTVNZU0lOVDFSRUcJX19wcmVnMTYoS1NFRzEgKyAweDBBMDAwMDhDKQkvKiBMZXZlbCAxIG1hc2sgc3lzdGVtIGludGVycnVwdCByZWdpc3RlciAxIChSL1cpICovCisjZGVmaW5lIFZSNDE4MV9OTUlSRUcJCV9fcHJlZzE2KEtTRUcxICsgMHgwQTAwMDA5OCkJLyogTk1JIHJlZ2lzdGVyIChSL1cpICovCisjZGVmaW5lIFZSNDE4MV9TT0ZUSU5UUkVHCV9fcHJlZzE2KEtTRUcxICsgMHgwQTAwMDA5QSkJLyogU29mdHdhcmUgaW50ZXJydXB0IHJlZ2lzdGVyIChSL1cpICovCisjZGVmaW5lIFZSNDE4MV9TWVNJTlQyUkVHCV9fcHJlZzE2KEtTRUcxICsgMHgwQTAwMDIwMCkJLyogTGV2ZWwgMSBTeXN0ZW0gaW50ZXJydXB0IHJlZ2lzdGVyIDIgKFIpICovCisjZGVmaW5lIFZSNDE4MV9NU1lTSU5UMlJFRwlfX3ByZWcxNihLU0VHMSArIDB4MEEwMDAyMDYpCS8qIExldmVsIDEgbWFzayBzeXN0ZW0gaW50ZXJydXB0IHJlZ2lzdGVyIDIgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX1BJVUlOVFJFR3JvCV9fcHJlZzE2KEtTRUcxICsgMHgwQjAwMDA4MikJLyogTGV2ZWwgMiBQSVUgaW50ZXJydXB0IHJlZ2lzdGVyIChSKSAqLworI2RlZmluZSBWUjQxODFfQUlVSU5UUkVHCV9fcHJlZzE2KEtTRUcxICsgMHgwQjAwMDA4NCkJLyogTGV2ZWwgMiBBSVUgaW50ZXJydXB0IHJlZ2lzdGVyIChSKSAqLworI2RlZmluZSBWUjQxODFfTVBJVUlOVFJFRwlfX3ByZWcxNihLU0VHMSArIDB4MEIwMDAwOEUpCS8qIExldmVsIDIgbWFzayBQSVUgaW50ZXJydXB0IHJlZ2lzdGVyIChSL1cpICovCisjZGVmaW5lIFZSNDE4MV9NQUlVSU5UUkVHCV9fcHJlZzE2KEtTRUcxICsgMHgwQjAwMDA5MCkJLyogTGV2ZWwgMiBtYXNrIEFJVSBpbnRlcnJ1cHQgcmVnaXN0ZXIgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX01LSVVJTlRSRUcJX19wcmVnMTYoS1NFRzEgKyAweDBCMDAwMDkyKQkvKiBMZXZlbCAyIG1hc2sgS0lVIGludGVycnVwdCByZWdpc3RlciAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfS0lVSU5UUkVHCV9fcHJlZzE2KEtTRUcxICsgMHgwQjAwMDE5OCkJLyogTGV2ZWwgMiBLSVUgaW50ZXJydXB0IHJlZ2lzdGVyIChSKSAqLworCisvLyBQb3dlciBNYW5hZ2VtZW50IFVuaXQgKFBNVSkKKyNkZWZpbmUgVlI0MTgxX1BNVUlOVFJFRwlfX3ByZWcxNihLU0VHMSArIDB4MEIwMDAwQTApCS8qIFBNVSBTdGF0dXMgUmVnaXN0ZXIgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX1BNVUlOVF9QT1dFUlNXICAweDEJLyogUG93ZXIgc3dpdGNoICovCisjZGVmaW5lIFZSNDE4MV9QTVVJTlRfQkFUVCAgICAgMHgyCS8qIExvdyBiYXR0IGR1cmluZyBub3JtYWwgb3BlcmF0aW9uICovCisjZGVmaW5lIFZSNDE4MV9QTVVJTlRfREVBRE1BTiAgMHg0CS8qIERlYWRtYW4ncyBzd2l0Y2ggKi8KKyNkZWZpbmUgVlI0MTgxX1BNVUlOVF9SRVNFVCAgICAweDgJLyogUmVzZXQgc3dpdGNoICovCisjZGVmaW5lIFZSNDE4MV9QTVVJTlRfUlRDUkVTRVQgMHgxMAkvKiBSVEMgUmVzZXQgKi8KKyNkZWZpbmUgVlI0MTgxX1BNVUlOVF9USU1FT1VUICAweDIwCS8qIEhBTCBUaW1lciBSZXNldCAqLworI2RlZmluZSBWUjQxODFfUE1VSU5UX0JBVFRMT1cgIDB4MTAwCS8qIEJhdHRlcnkgbG93ICovCisjZGVmaW5lIFZSNDE4MV9QTVVJTlRfUlRDICAgICAgMHgyMDAJLyogUlRDIEFsYXJtICovCisjZGVmaW5lIFZSNDE4MV9QTVVJTlRfRENEICAgICAgMHg0MDAJLyogRENEIyAqLworI2RlZmluZSBWUjQxODFfUE1VSU5UX0dQSU8wICAgIDB4MTAwMAkvKiBHUElPMCAqLworI2RlZmluZSBWUjQxODFfUE1VSU5UX0dQSU8xICAgIDB4MjAwMAkvKiBHUElPMSAqLworI2RlZmluZSBWUjQxODFfUE1VSU5UX0dQSU8yICAgIDB4NDAwMAkvKiBHUElPMiAqLworI2RlZmluZSBWUjQxODFfUE1VSU5UX0dQSU8zICAgIDB4ODAwMAkvKiBHUElPMyAqLworCisjZGVmaW5lIFZSNDE4MV9QTVVDTlRSRUcJX19wcmVnMTYoS1NFRzEgKyAweDBCMDAwMEEyKQkvKiBQTVUgQ29udHJvbCBSZWdpc3RlciAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfUE1VV0FJVFJFRwlfX3ByZWcxNihLU0VHMSArIDB4MEIwMDAwQTgpCS8qIFBNVSBXYWl0IENvdW50ZXIgUmVnaXN0ZXIgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX1BNVURJVlJFRwlfX3ByZWcxNihLU0VHMSArIDB4MEIwMDAwQUMpCS8qIFBNVSBEaXZpZGUgTW9kZSBSZWdpc3RlciAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfRFJBTUhJQkNUTAlfX3ByZWcxNihLU0VHMSArIDB4MEIwMDAwQjIpCS8qIERSQU0gSGliZXJuYXRlIENvbnRyb2wgUmVnaXN0ZXIgKFIvVykgKi8KKworLy8gUmVhbCBUaW1lIENsb2NrIFVuaXQgKFJUQykKKyNkZWZpbmUgVlI0MTgxX0VUSU1FTFJFRwlfX3ByZWcxNihLU0VHMSArIDB4MEIwMDAwQzApCS8qIEVsYXBzZWQgVGltZSBMIFJlZ2lzdGVyIChSL1cpICovCisjZGVmaW5lIFZSNDE4MV9FVElNRU1SRUcJX19wcmVnMTYoS1NFRzEgKyAweDBCMDAwMEMyKQkvKiBFbGFwc2VkIFRpbWUgTSBSZWdpc3RlciAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfRVRJTUVIUkVHCV9fcHJlZzE2KEtTRUcxICsgMHgwQjAwMDBDNCkJLyogRWxhcHNlZCBUaW1lIEggUmVnaXN0ZXIgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX0VDTVBMUkVHCQlfX3ByZWcxNihLU0VHMSArIDB4MEIwMDAwQzgpCS8qIEVsYXBzZWQgQ29tcGFyZSBMIFJlZ2lzdGVyIChSL1cpICovCisjZGVmaW5lIFZSNDE4MV9FQ01QTVJFRwkJX19wcmVnMTYoS1NFRzEgKyAweDBCMDAwMENBKQkvKiBFbGFwc2VkIENvbXBhcmUgTSBSZWdpc3RlciAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfRUNNUEhSRUcJCV9fcHJlZzE2KEtTRUcxICsgMHgwQjAwMDBDQykJLyogRWxhcHNlZCBDb21wYXJlIEggUmVnaXN0ZXIgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX1JUQ0wxTFJFRwlfX3ByZWcxNihLU0VHMSArIDB4MEIwMDAwRDApCS8qIFJUQyBMb25nIDEgTCBSZWdpc3RlciAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfUlRDTDFIUkVHCV9fcHJlZzE2KEtTRUcxICsgMHgwQjAwMDBEMikJLyogUlRDIExvbmcgMSBIIFJlZ2lzdGVyIChSL1cpICovCisjZGVmaW5lIFZSNDE4MV9SVENMMUNOVExSRUcJX19wcmVnMTYoS1NFRzEgKyAweDBCMDAwMEQ0KQkvKiBSVEMgTG9uZyAxIENvdW50IEwgUmVnaXN0ZXIgKFIpICovCisjZGVmaW5lIFZSNDE4MV9SVENMMUNOVEhSRUcJX19wcmVnMTYoS1NFRzEgKyAweDBCMDAwMEQ2KQkvKiBSVEMgTG9uZyAxIENvdW50IEggUmVnaXN0ZXIgKFIpICovCisjZGVmaW5lIFZSNDE4MV9SVENMMkxSRUcJX19wcmVnMTYoS1NFRzEgKyAweDBCMDAwMEQ4KQkvKiBSVEMgTG9uZyAyIEwgUmVnaXN0ZXIgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX1JUQ0wySFJFRwlfX3ByZWcxNihLU0VHMSArIDB4MEIwMDAwREEpCS8qIFJUQyBMb25nIDIgSCBSZWdpc3RlciAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfUlRDTDJDTlRMUkVHCV9fcHJlZzE2KEtTRUcxICsgMHgwQjAwMDBEQykJLyogUlRDIExvbmcgMiBDb3VudCBMIFJlZ2lzdGVyIChSKSAqLworI2RlZmluZSBWUjQxODFfUlRDTDJDTlRIUkVHCV9fcHJlZzE2KEtTRUcxICsgMHgwQjAwMDBERSkJLyogUlRDIExvbmcgMiBDb3VudCBIIFJlZ2lzdGVyIChSKSAqLworI2RlZmluZSBWUjQxODFfUlRDSU5UUkVHCV9fcHJlZzE2KEtTRUcxICsgMHgwQjAwMDFERSkJLyogUlRDIEludGVycnVwdCBSZWdpc3RlciAoUi9XKSAqLworCisvLyBEZWFkbWFuJ3MgU3dpdGNoIFVuaXQgKERTVSkKKyNkZWZpbmUgVlI0MTgxX0RTVUNOVFJFRwlfX3ByZWcxNihLU0VHMSArIDB4MEIwMDAwRTApCS8qIERTVSBDb250cm9sIFJlZ2lzdGVyIChSL1cpICovCisjZGVmaW5lIFZSNDE4MV9EU1VTRVRSRUcJX19wcmVnMTYoS1NFRzEgKyAweDBCMDAwMEUyKQkvKiBEU1UgRGVhZCBUaW1lIFNldCBSZWdpc3RlciAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfRFNVQ0xSUkVHCV9fcHJlZzE2KEtTRUcxICsgMHgwQjAwMDBFNCkJLyogRFNVIENsZWFyIFJlZ2lzdGVyIChXKSAqLworI2RlZmluZSBWUjQxODFfRFNVVElNUkVHCV9fcHJlZzE2KEtTRUcxICsgMHgwQjAwMDBFNikJLyogRFNVIEVsYXBzZWQgVGltZSBSZWdpc3RlciAoUi9XKSAqLworCisvLyBHZW5lcmFsIFB1cnBvc2UgSS9PIFVuaXQgKEdJVSkKKyNkZWZpbmUgVlI0MTgxX0dQTUQwUkVHCQlfX3ByZWcxNihLU0VHMSArIDB4MEIwMDAzMDApCS8qIEdQSU8gTW9kZSAwIFJlZ2lzdGVyIChSL1cpICovCisjZGVmaW5lIFZSNDE4MV9HUE1EMVJFRwkJX19wcmVnMTYoS1NFRzEgKyAweDBCMDAwMzAyKQkvKiBHUElPIE1vZGUgMSBSZWdpc3RlciAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfR1BNRDJSRUcJCV9fcHJlZzE2KEtTRUcxICsgMHgwQjAwMDMwNCkJLyogR1BJTyBNb2RlIDIgUmVnaXN0ZXIgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX0dQTUQzUkVHCQlfX3ByZWcxNihLU0VHMSArIDB4MEIwMDAzMDYpCS8qIEdQSU8gTW9kZSAzIFJlZ2lzdGVyIChSL1cpICovCisjZGVmaW5lIFZSNDE4MV9HUERBVEhSRUcJX19wcmVnMTYoS1NFRzEgKyAweDBCMDAwMzA4KQkvKiBHUElPIERhdGEgSGlnaCBSZWdpc3RlciAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfR1BEQVRIUkVHX0dQSU8xNiAgMHgwMDAxCisjZGVmaW5lIFZSNDE4MV9HUERBVEhSRUdfR1BJTzE3ICAweDAwMDIKKyNkZWZpbmUgVlI0MTgxX0dQREFUSFJFR19HUElPMTggIDB4MDAwNAorI2RlZmluZSBWUjQxODFfR1BEQVRIUkVHX0dQSU8xOSAgMHgwMDA4CisjZGVmaW5lIFZSNDE4MV9HUERBVEhSRUdfR1BJTzIwICAweDAwMTAKKyNkZWZpbmUgVlI0MTgxX0dQREFUSFJFR19HUElPMjEgIDB4MDAyMAorI2RlZmluZSBWUjQxODFfR1BEQVRIUkVHX0dQSU8yMiAgMHgwMDQwCisjZGVmaW5lIFZSNDE4MV9HUERBVEhSRUdfR1BJTzIzICAweDAwODAKKyNkZWZpbmUgVlI0MTgxX0dQREFUSFJFR19HUElPMjQgIDB4MDEwMAorI2RlZmluZSBWUjQxODFfR1BEQVRIUkVHX0dQSU8yNSAgMHgwMjAwCisjZGVmaW5lIFZSNDE4MV9HUERBVEhSRUdfR1BJTzI2ICAweDA0MDAKKyNkZWZpbmUgVlI0MTgxX0dQREFUSFJFR19HUElPMjcgIDB4MDgwMAorI2RlZmluZSBWUjQxODFfR1BEQVRIUkVHX0dQSU8yOCAgMHgxMDAwCisjZGVmaW5lIFZSNDE4MV9HUERBVEhSRUdfR1BJTzI5ICAweDIwMDAKKyNkZWZpbmUgVlI0MTgxX0dQREFUSFJFR19HUElPMzAgIDB4NDAwMAorI2RlZmluZSBWUjQxODFfR1BEQVRIUkVHX0dQSU8zMSAgMHg4MDAwCisjZGVmaW5lIFZSNDE4MV9HUERBVExSRUcJX19wcmVnMTYoS1NFRzEgKyAweDBCMDAwMzBBKQkvKiBHUElPIERhdGEgTG93IFJlZ2lzdGVyIChSL1cpICovCisjZGVmaW5lIFZSNDE4MV9HUERBVExSRUdfR1BJTzAgICAweDAwMDEKKyNkZWZpbmUgVlI0MTgxX0dQREFUTFJFR19HUElPMSAgIDB4MDAwMgorI2RlZmluZSBWUjQxODFfR1BEQVRMUkVHX0dQSU8yICAgMHgwMDA0CisjZGVmaW5lIFZSNDE4MV9HUERBVExSRUdfR1BJTzMgICAweDAwMDgKKyNkZWZpbmUgVlI0MTgxX0dQREFUTFJFR19HUElPNCAgIDB4MDAxMAorI2RlZmluZSBWUjQxODFfR1BEQVRMUkVHX0dQSU81ICAgMHgwMDIwCisjZGVmaW5lIFZSNDE4MV9HUERBVExSRUdfR1BJTzYgICAweDAwNDAKKyNkZWZpbmUgVlI0MTgxX0dQREFUTFJFR19HUElPNyAgIDB4MDA4MAorI2RlZmluZSBWUjQxODFfR1BEQVRMUkVHX0dQSU84ICAgMHgwMTAwCisjZGVmaW5lIFZSNDE4MV9HUERBVExSRUdfR1BJTzkgICAweDAyMDAKKyNkZWZpbmUgVlI0MTgxX0dQREFUTFJFR19HUElPMTAgIDB4MDQwMAorI2RlZmluZSBWUjQxODFfR1BEQVRMUkVHX0dQSU8xMSAgMHgwODAwCisjZGVmaW5lIFZSNDE4MV9HUERBVExSRUdfR1BJTzEyICAweDEwMDAKKyNkZWZpbmUgVlI0MTgxX0dQREFUTFJFR19HUElPMTMgIDB4MjAwMAorI2RlZmluZSBWUjQxODFfR1BEQVRMUkVHX0dQSU8xNCAgMHg0MDAwCisjZGVmaW5lIFZSNDE4MV9HUERBVExSRUdfR1BJTzE1ICAweDgwMDAKKyNkZWZpbmUgVlI0MTgxX0dQSU5URU4JCV9fcHJlZzE2KEtTRUcxICsgMHgwQjAwMDMwQykJLyogR1BJTyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIChSL1cpICovCisjZGVmaW5lIFZSNDE4MV9HUElOVE1TSwkJX19wcmVnMTYoS1NFRzEgKyAweDBCMDAwMzBFKQkvKiBHUElPIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIChSL1cpICovCisjZGVmaW5lIFZSNDE4MV9HUElOVFRZUEgJX19wcmVnMTYoS1NFRzEgKyAweDBCMDAwMzEwKQkvKiBHUElPIEludGVycnVwdCBUeXBlIEhpZ2ggUmVnaXN0ZXIgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX0dQSU5UVFlQTAlfX3ByZWcxNihLU0VHMSArIDB4MEIwMDAzMTIpCS8qIEdQSU8gSW50ZXJydXB0IFR5cGUgTG93IFJlZ2lzdGVyIChSL1cpICovCisjZGVmaW5lIFZSNDE4MV9HUElOVFNUQVQJX19wcmVnMTYoS1NFRzEgKyAweDBCMDAwMzE0KQkvKiBHUElPIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX0dQSElCU1RICQlfX3ByZWcxNihLU0VHMSArIDB4MEIwMDAzMTYpCS8qIEdQSU8gSGliZXJuYXRlIFBpbiBTdGF0ZSBIaWdoIFJlZ2lzdGVyIChSL1cpICovCisjZGVmaW5lIFZSNDE4MV9HUEhJQlNUTAkJX19wcmVnMTYoS1NFRzEgKyAweDBCMDAwMzE4KQkvKiBHUElPIEhpYmVybmF0ZSBQaW4gU3RhdGUgTG93IFJlZ2lzdGVyIChSL1cpICovCisjZGVmaW5lIFZSNDE4MV9HUFNJQ1RMCQlfX3ByZWcxNihLU0VHMSArIDB4MEIwMDAzMUEpCS8qIEdQSU8gU2VyaWFsIEludGVyZmFjZSBDb250cm9sIFJlZ2lzdGVyIChSL1cpICovCisjZGVmaW5lIFZSNDE4MV9LRVlFTgkJX19wcmVnMTYoS1NFRzEgKyAweDBCMDAwMzFDKQkvKiBLZXlib2FyZCBTY2FuIFBpbiBFbmFibGUgUmVnaXN0ZXIgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX1BDUzBTVFJBCQlfX3ByZWcxNihLU0VHMSArIDB4MEIwMDAzMjApCS8qIFByb2dyYW1tYWJsZSBDaGlwIFNlbGVjdCBbMF0gU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfUENTMFNUUEEJCV9fcHJlZzE2KEtTRUcxICsgMHgwQjAwMDMyMikJLyogUHJvZ3JhbW1hYmxlIENoaXAgU2VsZWN0IFswXSBTdG9wIEFkZHJlc3MgUmVnaXN0ZXIgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX1BDUzBISUEJCV9fcHJlZzE2KEtTRUcxICsgMHgwQjAwMDMyNCkJLyogUHJvZ3JhbW1hYmxlIENoaXAgU2VsZWN0IFswXSBIaWdoIEFkZHJlc3MgUmVnaXN0ZXIgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX1BDUzFTVFJBCQlfX3ByZWcxNihLU0VHMSArIDB4MEIwMDAzMjYpCS8qIFByb2dyYW1tYWJsZSBDaGlwIFNlbGVjdCBbMV0gU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfUENTMVNUUEEJCV9fcHJlZzE2KEtTRUcxICsgMHgwQjAwMDMyOCkJLyogUHJvZ3JhbW1hYmxlIENoaXAgU2VsZWN0IFsxXSBTdG9wIEFkZHJlc3MgUmVnaXN0ZXIgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX1BDUzFISUEJCV9fcHJlZzE2KEtTRUcxICsgMHgwQjAwMDMyQSkJLyogUHJvZ3JhbW1hYmxlIENoaXAgU2VsZWN0IFsxXSBIaWdoIEFkZHJlc3MgUmVnaXN0ZXIgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX1BDU01PREUJCV9fcHJlZzE2KEtTRUcxICsgMHgwQjAwMDMyQykJLyogUHJvZ3JhbW1hYmxlIENoaXAgU2VsZWN0IE1vZGUgUmVnaXN0ZXIgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX0xDREdQTU9ERQlfX3ByZWcxNihLU0VHMSArIDB4MEIwMDAzMkUpCS8qIExDRCBHZW5lcmFsIFB1cnBvc2UgTW9kZSBSZWdpc3RlciAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfTUlTQ1JFRzAJCV9fcHJlZzE2KEtTRUcxICsgMHgwQjAwMDMzMCkJLyogTWlzYy4gUi9XIEJhdHRlcnkgQmFja2VkIFJlZ2lzdGVycyBmb3IgTm9uLVZvbGF0aWxlIFN0b3JhZ2UgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX01JU0NSRUcxCQlfX3ByZWcxNihLU0VHMSArIDB4MEIwMDAzMzIpCS8qIE1pc2MuIFIvVyBCYXR0ZXJ5IEJhY2tlZCBSZWdpc3RlcnMgZm9yIE5vbi1Wb2xhdGlsZSBTdG9yYWdlIChSL1cpICovCisjZGVmaW5lIFZSNDE4MV9NSVNDUkVHMgkJX19wcmVnMTYoS1NFRzEgKyAweDBCMDAwMzM0KQkvKiBNaXNjLiBSL1cgQmF0dGVyeSBCYWNrZWQgUmVnaXN0ZXJzIGZvciBOb24tVm9sYXRpbGUgU3RvcmFnZSAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfTUlTQ1JFRzMJCV9fcHJlZzE2KEtTRUcxICsgMHgwQjAwMDMzNikJLyogTWlzYy4gUi9XIEJhdHRlcnkgQmFja2VkIFJlZ2lzdGVycyBmb3IgTm9uLVZvbGF0aWxlIFN0b3JhZ2UgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX01JU0NSRUc0CQlfX3ByZWcxNihLU0VHMSArIDB4MEIwMDAzMzgpCS8qIE1pc2MuIFIvVyBCYXR0ZXJ5IEJhY2tlZCBSZWdpc3RlcnMgZm9yIE5vbi1Wb2xhdGlsZSBTdG9yYWdlIChSL1cpICovCisjZGVmaW5lIFZSNDE4MV9NSVNDUkVHNQkJX19wcmVnMTYoS1NFRzEgKyAweDBCMDAwMzNBKQkvKiBNaXNjLiBSL1cgQmF0dGVyeSBCYWNrZWQgUmVnaXN0ZXJzIGZvciBOb24tVm9sYXRpbGUgU3RvcmFnZSAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfTUlTQ1JFRzYJCV9fcHJlZzE2KEtTRUcxICsgMHgwQjAwMDMzQykJLyogTWlzYy4gUi9XIEJhdHRlcnkgQmFja2VkIFJlZ2lzdGVycyBmb3IgTm9uLVZvbGF0aWxlIFN0b3JhZ2UgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX01JU0NSRUc3CQlfX3ByZWcxNihLU0VHMSArIDB4MEIwMDAzM0QpCS8qIE1pc2MuIFIvVyBCYXR0ZXJ5IEJhY2tlZCBSZWdpc3RlcnMgZm9yIE5vbi1Wb2xhdGlsZSBTdG9yYWdlIChSL1cpICovCisjZGVmaW5lIFZSNDE4MV9NSVNDUkVHOAkJX19wcmVnMTYoS1NFRzEgKyAweDBCMDAwMzQwKQkvKiBNaXNjLiBSL1cgQmF0dGVyeSBCYWNrZWQgUmVnaXN0ZXJzIGZvciBOb24tVm9sYXRpbGUgU3RvcmFnZSAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfTUlTQ1JFRzkJCV9fcHJlZzE2KEtTRUcxICsgMHgwQjAwMDM0MikJLyogTWlzYy4gUi9XIEJhdHRlcnkgQmFja2VkIFJlZ2lzdGVycyBmb3IgTm9uLVZvbGF0aWxlIFN0b3JhZ2UgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX01JU0NSRUcxMAlfX3ByZWcxNihLU0VHMSArIDB4MEIwMDAzNDQpCS8qIE1pc2MuIFIvVyBCYXR0ZXJ5IEJhY2tlZCBSZWdpc3RlcnMgZm9yIE5vbi1Wb2xhdGlsZSBTdG9yYWdlIChSL1cpICovCisjZGVmaW5lIFZSNDE4MV9NSVNDUkVHMTEJX19wcmVnMTYoS1NFRzEgKyAweDBCMDAwMzQ2KQkvKiBNaXNjLiBSL1cgQmF0dGVyeSBCYWNrZWQgUmVnaXN0ZXJzIGZvciBOb24tVm9sYXRpbGUgU3RvcmFnZSAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfTUlTQ1JFRzEyCV9fcHJlZzE2KEtTRUcxICsgMHgwQjAwMDM0OCkJLyogTWlzYy4gUi9XIEJhdHRlcnkgQmFja2VkIFJlZ2lzdGVycyBmb3IgTm9uLVZvbGF0aWxlIFN0b3JhZ2UgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX01JU0NSRUcxMwlfX3ByZWcxNihLU0VHMSArIDB4MEIwMDAzNEEpCS8qIE1pc2MuIFIvVyBCYXR0ZXJ5IEJhY2tlZCBSZWdpc3RlcnMgZm9yIE5vbi1Wb2xhdGlsZSBTdG9yYWdlIChSL1cpICovCisjZGVmaW5lIFZSNDE4MV9NSVNDUkVHMTQJX19wcmVnMTYoS1NFRzEgKyAweDBCMDAwMzRDKQkvKiBNaXNjLiBSL1cgQmF0dGVyeSBCYWNrZWQgUmVnaXN0ZXJzIGZvciBOb24tVm9sYXRpbGUgU3RvcmFnZSAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfTUlTQ1JFRzE1CV9fcHJlZzE2KEtTRUcxICsgMHgwQjAwMDM0RSkJLyogTWlzYy4gUi9XIEJhdHRlcnkgQmFja2VkIFJlZ2lzdGVycyBmb3IgTm9uLVZvbGF0aWxlIFN0b3JhZ2UgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX1NFQ0lSUU1BU0tMCVZSNDE4MV9HUElOVEVOCisvLyBObyBTRUNJUlFNQVNLSCBmb3IgVlI0MTgxCisKKy8vIFRvdWNoIFBhbmVsIEludGVyZmFjZSBVbml0IChQSVUpCisjZGVmaW5lIFZSNDE4MV9QSVVDTlRSRUcJX19wcmVnMTYoS1NFRzEgKyAweDBCMDAwMTIyKQkvKiBQSVUgQ29udHJvbCByZWdpc3RlciAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfUElVQ05UUkVHX1BJVVNFUUVOCTB4MDAwNAorI2RlZmluZSBWUjQxODFfUElVQ05UUkVHX1BJVVBXUgkJMHgwMDAyCisjZGVmaW5lIFZSNDE4MV9QSVVDTlRSRUdfUEFEUlNUCQkweDAwMDEKKworI2RlZmluZSBWUjQxODFfUElVSU5UUkVHCV9fcHJlZzE2KEtTRUcxICsgMHgwQjAwMDEyNCkJLyogUElVIEludGVycnVwdCBjYXVzZSByZWdpc3RlciAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfUElVSU5UUkVHX09WUAkJMHg4MDAwCisjZGVmaW5lIFZSNDE4MV9QSVVJTlRSRUdfUEFEQ01ECQkweDAwNDAKKyNkZWZpbmUgVlI0MTgxX1BJVUlOVFJFR19QQURBRFAJCTB4MDAyMAorI2RlZmluZSBWUjQxODFfUElVSU5UUkVHX1BBRFBBR0UxCTB4MDAxMAorI2RlZmluZSBWUjQxODFfUElVSU5UUkVHX1BBRFBBR0UwCTB4MDAwOAorI2RlZmluZSBWUjQxODFfUElVSU5UUkVHX1BBRERMT1NUCTB4MDAwNAorI2RlZmluZSBWUjQxODFfUElVSU5UUkVHX1BFTkNIRwkJMHgwMDAxCisKKyNkZWZpbmUgVlI0MTgxX1BJVVNJVkxSRUcJX19wcmVnMTYoS1NFRzEgKyAweDBCMDAwMTI2KQkvKiBQSVUgRGF0YSBzYW1wbGluZyBpbnRlcnZhbCByZWdpc3RlciAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfUElVU1RCTFJFRwlfX3ByZWcxNihLU0VHMSArIDB4MEIwMDAxMjgpCS8qIFBJVSBBL0QgY29udmVydGVyIHN0YXJ0IGRlbGF5IHJlZ2lzdGVyIChSL1cpICovCisjZGVmaW5lIFZSNDE4MV9QSVVDTURSRUcJX19wcmVnMTYoS1NFRzEgKyAweDBCMDAwMTJBKQkvKiBQSVUgQS9EIGNvbW1hbmQgcmVnaXN0ZXIgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX1BJVUFTQ05SRUcJX19wcmVnMTYoS1NFRzEgKyAweDBCMDAwMTMwKQkvKiBQSVUgQS9EIHBvcnQgc2NhbiByZWdpc3RlciAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfUElVQU1TS1JFRwlfX3ByZWcxNihLU0VHMSArIDB4MEIwMDAxMzIpCS8qIFBJVSBBL0Qgc2NhbiBtYXNrIHJlZ2lzdGVyIChSL1cpICovCisjZGVmaW5lIFZSNDE4MV9QSVVDSVZMUkVHCV9fcHJlZzE2KEtTRUcxICsgMHgwQjAwMDEzRSkJLyogUElVIENoZWNrIGludGVydmFsIHJlZ2lzdGVyIChSKSAqLworI2RlZmluZSBWUjQxODFfUElVUEIwMFJFRwlfX3ByZWcxNihLU0VHMSArIDB4MEIwMDAyQTApCS8qIFBJVSBQYWdlIDAgQnVmZmVyIDAgcmVnaXN0ZXIgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX1BJVVBCMDFSRUcJX19wcmVnMTYoS1NFRzEgKyAweDBCMDAwMkEyKQkvKiBQSVUgUGFnZSAwIEJ1ZmZlciAxIHJlZ2lzdGVyIChSL1cpICovCisjZGVmaW5lIFZSNDE4MV9QSVVQQjAyUkVHCV9fcHJlZzE2KEtTRUcxICsgMHgwQjAwMDJBNCkJLyogUElVIFBhZ2UgMCBCdWZmZXIgMiByZWdpc3RlciAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfUElVUEIwM1JFRwlfX3ByZWcxNihLU0VHMSArIDB4MEIwMDAyQTYpCS8qIFBJVSBQYWdlIDAgQnVmZmVyIDMgcmVnaXN0ZXIgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX1BJVVBCMTBSRUcJX19wcmVnMTYoS1NFRzEgKyAweDBCMDAwMkE4KQkvKiBQSVUgUGFnZSAxIEJ1ZmZlciAwIHJlZ2lzdGVyIChSL1cpICovCisjZGVmaW5lIFZSNDE4MV9QSVVQQjExUkVHCV9fcHJlZzE2KEtTRUcxICsgMHgwQjAwMDJBQSkJLyogUElVIFBhZ2UgMSBCdWZmZXIgMSByZWdpc3RlciAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfUElVUEIxMlJFRwlfX3ByZWcxNihLU0VHMSArIDB4MEIwMDAyQUMpCS8qIFBJVSBQYWdlIDEgQnVmZmVyIDIgcmVnaXN0ZXIgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX1BJVVBCMTNSRUcJX19wcmVnMTYoS1NFRzEgKyAweDBCMDAwMkFFKQkvKiBQSVUgUGFnZSAxIEJ1ZmZlciAzIHJlZ2lzdGVyIChSL1cpICovCisjZGVmaW5lIFZSNDE4MV9QSVVBQjBSRUcJX19wcmVnMTYoS1NFRzEgKyAweDBCMDAwMkIwKQkvKiBQSVUgQS9EIHNjYW4gQnVmZmVyIDAgcmVnaXN0ZXIgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX1BJVUFCMVJFRwlfX3ByZWcxNihLU0VHMSArIDB4MEIwMDAyQjIpCS8qIFBJVSBBL0Qgc2NhbiBCdWZmZXIgMSByZWdpc3RlciAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfUElVQUIyUkVHCV9fcHJlZzE2KEtTRUcxICsgMHgwQjAwMDJCNCkJLyogUElVIEEvRCBzY2FuIEJ1ZmZlciAyIHJlZ2lzdGVyIChSL1cpICovCisjZGVmaW5lIFZSNDE4MV9QSVVBQjNSRUcJX19wcmVnMTYoS1NFRzEgKyAweDBCMDAwMkI2KQkvKiBQSVUgQS9EIHNjYW4gQnVmZmVyIDMgcmVnaXN0ZXIgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX1BJVVBCMDRSRUcJX19wcmVnMTYoS1NFRzEgKyAweDBCMDAwMkJDKQkvKiBQSVUgUGFnZSAwIEJ1ZmZlciA0IHJlZ2lzdGVyIChSL1cpICovCisjZGVmaW5lIFZSNDE4MV9QSVVQQjE0UkVHCV9fcHJlZzE2KEtTRUcxICsgMHgwQjAwMDJCRSkJLyogUElVIFBhZ2UgMSBCdWZmZXIgNCByZWdpc3RlciAoUi9XKSAqLworCisvLyBBdWRpbyBJbnRlcmZhY2UgVW5pdCAoQUlVKQorI2RlZmluZSBWUjQxODFfU09EQVRSRUcJCV9fcHJlZzE2KEtTRUcxICsgMHgwQjAwMDE2NikJLyogU3BlYWtlciBPdXRwdXQgRGF0YSBSZWdpc3RlciAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfU0NOVFJFRwkJX19wcmVnMTYoS1NFRzEgKyAweDBCMDAwMTY4KQkvKiBTcGVha2VyIE91dHB1dCBDb250cm9sIFJlZ2lzdGVyIChSL1cpICovCisjZGVmaW5lIFZSNDE4MV9NSURBVFJFRwkJX19wcmVnMTYoS1NFRzEgKyAweDBCMDAwMTcwKQkvKiBNaWtlIElucHV0IERhdGEgUmVnaXN0ZXIgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX01DTlRSRUcJCV9fcHJlZzE2KEtTRUcxICsgMHgwQjAwMDE3MikJLyogTWlrZSBJbnB1dCBDb250cm9sIFJlZ2lzdGVyIChSL1cpICovCisjZGVmaW5lIFZSNDE4MV9EVkFMSURSRUcJX19wcmVnMTYoS1NFRzEgKyAweDBCMDAwMTc4KQkvKiBEYXRhIFZhbGlkIFJlZ2lzdGVyIChSL1cpICovCisjZGVmaW5lIFZSNDE4MV9TRVFSRUcJCV9fcHJlZzE2KEtTRUcxICsgMHgwQjAwMDE3QSkJLyogU2VxdWVudGlhbCBSZWdpc3RlciAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfSU5UUkVHCQlfX3ByZWcxNihLU0VHMSArIDB4MEIwMDAxN0MpCS8qIEludGVycnVwdCBSZWdpc3RlciAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfU0RNQURBVFJFRwlfX3ByZWcxNihLU0VHMSArIDB4MEIwMDAxNjApCS8qIFNwZWFrZXIgRE1BIERhdGEgUmVnaXN0ZXIgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX01ETUFEQVRSRUcJX19wcmVnMTYoS1NFRzEgKyAweDBCMDAwMTYyKQkvKiBNaWNyb3Bob25lIERNQSBEYXRhIFJlZ2lzdGVyIChSL1cpICovCisjZGVmaW5lIFZSNDE4MV9EQVZSRUZfU0VUVVAJX19wcmVnMTYoS1NFRzEgKyAweDBCMDAwMTY0KQkvKiBEQUMgVnJlZiBzZXR1cCByZWdpc3RlciAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfU0NOVkNfRU5ECV9fcHJlZzE2KEtTRUcxICsgMHgwQjAwMDE2RSkJLyogU3BlYWtlciBzYW1wbGUgcmF0ZSBjb250cm9sIChSL1cpICovCisjZGVmaW5lIFZSNDE4MV9NSURBVFJFRwkJX19wcmVnMTYoS1NFRzEgKyAweDBCMDAwMTcwKQkvKiBNaWNyb3Bob25lIElucHV0IERhdGEgUmVnaXN0ZXIgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX01DTlRSRUcJCV9fcHJlZzE2KEtTRUcxICsgMHgwQjAwMDE3MikJLyogTWljcm9waG9uZSBJbnB1dCBDb250cm9sIFJlZ2lzdGVyIChSL1cpICovCisjZGVmaW5lIFZSNDE4MV9NQ05WQ19FTkQJX19wcmVnMTYoS1NFRzEgKyAweDBCMDAwMTdFKQkvKiBNaWNyb3Bob25lIHNhbXBsZSByYXRlIGNvbnRyb2wgKFIvVykgKi8KKworLy8gS2V5Ym9hcmQgSW50ZXJmYWNlIFVuaXQgKEtJVSkKKyNkZWZpbmUgVlI0MTgxX0tJVURBVDAJCV9fcHJlZzE2KEtTRUcxICsgMHgwQjAwMDE4MCkJLyogS0lVIERhdGEwIFJlZ2lzdGVyIChSL1cpICovCisjZGVmaW5lIFZSNDE4MV9LSVVEQVQxCQlfX3ByZWcxNihLU0VHMSArIDB4MEIwMDAxODIpCS8qIEtJVSBEYXRhMSBSZWdpc3RlciAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfS0lVREFUMgkJX19wcmVnMTYoS1NFRzEgKyAweDBCMDAwMTg0KQkvKiBLSVUgRGF0YTIgUmVnaXN0ZXIgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX0tJVURBVDMJCV9fcHJlZzE2KEtTRUcxICsgMHgwQjAwMDE4NikJLyogS0lVIERhdGEzIFJlZ2lzdGVyIChSL1cpICovCisjZGVmaW5lIFZSNDE4MV9LSVVEQVQ0CQlfX3ByZWcxNihLU0VHMSArIDB4MEIwMDAxODgpCS8qIEtJVSBEYXRhNCBSZWdpc3RlciAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfS0lVREFUNQkJX19wcmVnMTYoS1NFRzEgKyAweDBCMDAwMThBKQkvKiBLSVUgRGF0YTUgUmVnaXN0ZXIgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX0tJVVNDQU5SRVAJX19wcmVnMTYoS1NFRzEgKyAweDBCMDAwMTkwKQkvKiBLSVUgU2Nhbi9SZXBlYXQgUmVnaXN0ZXIgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX0tJVVNDQU5SRVBfS0VZRU4gICAgICAweDgwMDAKKyNkZWZpbmUgVlI0MTgxX0tJVVNDQU5SRVBfU0NBTlNUUCAgICAweDAwMDgKKyNkZWZpbmUgVlI0MTgxX0tJVVNDQU5SRVBfU0NBTlNUQVJUICAweDAwMDQKKyNkZWZpbmUgVlI0MTgxX0tJVVNDQU5SRVBfQVRTVFAgICAgICAweDAwMDIKKyNkZWZpbmUgVlI0MTgxX0tJVVNDQU5SRVBfQVRTQ0FOICAgICAweDAwMDEKKyNkZWZpbmUgVlI0MTgxX0tJVVNDQU5TCQlfX3ByZWcxNihLU0VHMSArIDB4MEIwMDAxOTIpCS8qIEtJVSBTY2FuIFN0YXR1cyBSZWdpc3RlciAoUikgKi8KKyNkZWZpbmUgVlI0MTgxX0tJVVdLUwkJX19wcmVnMTYoS1NFRzEgKyAweDBCMDAwMTk0KQkvKiBLSVUgV2FpdCBLZXlzY2FuIFN0YWJsZSBSZWdpc3RlciAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfS0lVV0tJCQlfX3ByZWcxNihLU0VHMSArIDB4MEIwMDAxOTYpCS8qIEtJVSBXYWl0IEtleXNjYW4gSW50ZXJ2YWwgUmVnaXN0ZXIgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX0tJVUlOVAkJX19wcmVnMTYoS1NFRzEgKyAweDBCMDAwMTk4KQkvKiBLSVUgSW50ZXJydXB0IFJlZ2lzdGVyIChSL1cpICovCisjZGVmaW5lIFZSNDE4MV9LSVVJTlRfS0RBVExPU1QgICAgICAgMHgwMDA0CisjZGVmaW5lIFZSNDE4MV9LSVVJTlRfS0RBVFJEWSAgICAgICAgMHgwMDAyCisjZGVmaW5lIFZSNDE4MV9LSVVJTlRfU0NBTklOVCAgICAgICAgMHgwMDAxCisjZGVmaW5lIFZSNDE4MV9LSVVEQVQ2CQlfX3ByZWcxNihLU0VHMSArIDB4MEIwMDAxOEMpCS8qIFNjYW4gTGluZSA2IEtleSBEYXRhIFJlZ2lzdGVyIChSKSAqLworI2RlZmluZSBWUjQxODFfS0lVREFUNwkJX19wcmVnMTYoS1NFRzEgKyAweDBCMDAwMThFKQkvKiBTY2FuIExpbmUgNyBLZXkgRGF0YSBSZWdpc3RlciAoUikgKi8KKworLy8gQ29tcGFjdEZsYXNoIENvbnRyb2xsZXIKKyNkZWZpbmUgVlI0MTgxX1BDQ0FSRElOREVYCV9fcHJlZzgoS1NFRzEgKyAweDBCMDAwOEUwKQkvKiBQQyBDYXJkIENvbnRyb2xsZXIgSW5kZXggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVlI0MTgxX1BDQ0FSRERBVEEJX19wcmVnOChLU0VHMSArIDB4MEIwMDA4RTEpCS8qIFBDIENhcmQgQ29udHJvbGxlciBEYXRhIFJlZ2lzdGVyICovCisjZGVmaW5lIFZSNDE4MV9JTlRTVEFUUkVHCV9fcHJlZzE2KEtTRUcxICsgMHgwQjAwMDhGOCkJLyogSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfSU5UTVNLUkVHCV9fcHJlZzE2KEtTRUcxICsgMHgwQjAwMDhGQSkJLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX0NGR19SRUdfMQlfX3ByZWcxNihLU0VHMSArIDB4MEIwMDA4RkUpCS8qIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMSAqLworCisvLyBMRUQgQ29udHJvbCBVbml0IChMRUQpCisjZGVmaW5lIFZSNDE4MV9MRURIVFNSRUcJX19wcmVnMTYoS1NFRzEgKyAweDBCMDAwMjQwKQkvKiBMRUQgSCBUaW1lIFNldCByZWdpc3RlciAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfTEVETFRTUkVHCV9fcHJlZzE2KEtTRUcxICsgMHgwQjAwMDI0MikJLyogTEVEIEwgVGltZSBTZXQgcmVnaXN0ZXIgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX0xFRENOVFJFRwlfX3ByZWcxNihLU0VHMSArIDB4MEIwMDAyNDgpCS8qIExFRCBDb250cm9sIHJlZ2lzdGVyIChSL1cpICovCisjZGVmaW5lIFZSNDE4MV9MRURBU1RDUkVHCV9fcHJlZzE2KEtTRUcxICsgMHgwQjAwMDI0QSkJLyogTEVEIEF1dG8gU3RvcCBUaW1lIENvdW50IHJlZ2lzdGVyIChSL1cpICovCisjZGVmaW5lIFZSNDE4MV9MRURJTlRSRUcJX19wcmVnMTYoS1NFRzEgKyAweDBCMDAwMjRDKQkvKiBMRUQgSW50ZXJydXB0IHJlZ2lzdGVyIChSL1cpICovCisKKy8vIFNlcmlhbCBJbnRlcmZhY2UgVW5pdCAoU0lVIC8gU0lVMSBhbmQgU0lVMikKKyNkZWZpbmUgVlI0MTgxX1NJVVJCCQlfX3ByZWc4KEtTRUcxICsgMHgwQzAwMDAxMCkJLyogUmVjZWl2ZXIgQnVmZmVyIFJlZ2lzdGVyIChSZWFkKSBETEFCID0gMCAoUikgKi8KKyNkZWZpbmUgVlI0MTgxX1NJVVRICQlfX3ByZWc4KEtTRUcxICsgMHgwQzAwMDAxMCkJLyogVHJhbnNtaXR0ZXIgSG9sZGluZyBSZWdpc3RlciAoV3JpdGUpIERMQUIgPSAwIChXKSAqLworI2RlZmluZSBWUjQxODFfU0lVRExMCQlfX3ByZWc4KEtTRUcxICsgMHgwQzAwMDAxMCkJLyogRGl2aXNvciBMYXRjaCAoTGVhc3QgU2lnbmlmaWNhbnQgQnl0ZSkgRExBQiA9IDEgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX1NJVUlFCQlfX3ByZWc4KEtTRUcxICsgMHgwQzAwMDAxMSkJLyogSW50ZXJydXB0IEVuYWJsZSBETEFCID0gMCAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfU0lVRExNCQlfX3ByZWc4KEtTRUcxICsgMHgwQzAwMDAxMSkJLyogRGl2aXNvciBMYXRjaCAoTW9zdCBTaWduaWZpY2FudCBCeXRlKSBETEFCID0gMSAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfU0lVSUlECQlfX3ByZWc4KEtTRUcxICsgMHgwQzAwMDAxMikJLyogSW50ZXJydXB0IElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyIChSZWFkKSAoUikgKi8KKyNkZWZpbmUgVlI0MTgxX1NJVUZDCQlfX3ByZWc4KEtTRUcxICsgMHgwQzAwMDAxMikJLyogRklGTyBDb250cm9sIFJlZ2lzdGVyIChXcml0ZSkgKFcpICovCisjZGVmaW5lIFZSNDE4MV9TSVVMQwkJX19wcmVnOChLU0VHMSArIDB4MEMwMDAwMTMpCS8qIExpbmUgQ29udHJvbCBSZWdpc3RlciAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfU0lVTUMJCV9fcHJlZzgoS1NFRzEgKyAweDBDMDAwMDE0KQkvKiBNT0RFTSBDb250cm9sIFJlZ2lzdGVyIChSL1cpICovCisjZGVmaW5lIFZSNDE4MV9TSVVMUwkJX19wcmVnOChLU0VHMSArIDB4MEMwMDAwMTUpCS8qIExpbmUgU3RhdHVzIFJlZ2lzdGVyIChSL1cpICovCisjZGVmaW5lIFZSNDE4MV9TSVVNUwkJX19wcmVnOChLU0VHMSArIDB4MEMwMDAwMTYpCS8qIE1PREVNIFN0YXR1cyBSZWdpc3RlciAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfU0lVU0MJCV9fcHJlZzgoS1NFRzEgKyAweDBDMDAwMDE3KQkvKiBTY3JhdGNoIFJlZ2lzdGVyIChSL1cpICovCisjZGVmaW5lIFZSNDE4MV9TSVVSRVNFVAkJX19wcmVnOChLU0VHMSArIDB4MEMwMDAwMTkpCS8qIFNJVSBSZXNldCBSZWdpc3RlciAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfU0lVQUNUTVNLCV9fcHJlZzgoS1NFRzEgKyAweDBDMDAwMDFDKQkvKiBTSVUgQWN0aXZpdHkgTWFzayAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfU0lVQUNUVE1SCV9fcHJlZzgoS1NFRzEgKyAweDBDMDAwMDFFKQkvKiBTSVUgQWN0aXZpdHkgVGltZXIgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX1NJVVJCXzIJCV9fcHJlZzgoS1NFRzEgKyAweDBDMDAwMDAwKQkvKiBSZWNlaXZlIEJ1ZmZlciBSZWdpc3RlciAoUmVhZCkgKFIpICovCisjZGVmaW5lIFZSNDE4MV9TSVVUSF8yCQlfX3ByZWc4KEtTRUcxICsgMHgwQzAwMDAwMCkJLyogVHJhbnNtaXR0ZXIgSG9sZGluZyBSZWdpc3RlciAoV3JpdGUpIChXKSAqLworI2RlZmluZSBWUjQxODFfU0lVRExMXzIJCV9fcHJlZzgoS1NFRzEgKyAweDBDMDAwMDAwKQkvKiBEaXZpc29yIExhdGNoIChMZWFzdCBTaWduaWZpY2FudCBCeXRlKSAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfU0lVSUVfMgkJX19wcmVnOChLU0VHMSArIDB4MEMwMDAwMDEpCS8qIEludGVycnVwdCBFbmFibGUgKERMQUIgPSAwKSAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfU0lVRExNXzIJCV9fcHJlZzgoS1NFRzEgKyAweDBDMDAwMDAxKQkvKiBEaXZpc29yIExhdGNoIChNb3N0IFNpZ25pZmljYW50IEJ5dGUpIChETEFCID0gMSkgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX1NJVUlJRF8yCQlfX3ByZWc4KEtTRUcxICsgMHgwQzAwMDAwMikJLyogSW50ZXJydXB0IElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyIChSZWFkKSAoUikgKi8KKyNkZWZpbmUgVlI0MTgxX1NJVUZDXzIJCV9fcHJlZzgoS1NFRzEgKyAweDBDMDAwMDAyKQkvKiBGSUZPIENvbnRyb2wgUmVnaXN0ZXIgKFdyaXRlKSAoVykgKi8KKyNkZWZpbmUgVlI0MTgxX1NJVUxDXzIJCV9fcHJlZzgoS1NFRzEgKyAweDBDMDAwMDAzKQkvKiBMaW5lIENvbnRyb2wgUmVnaXN0ZXIgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX1NJVU1DXzIJCV9fcHJlZzgoS1NFRzEgKyAweDBDMDAwMDA0KQkvKiBNb2RlbSBDb250cm9sIFJlZ2lzdGVyIChSL1cpICovCisjZGVmaW5lIFZSNDE4MV9TSVVMU18yCQlfX3ByZWc4KEtTRUcxICsgMHgwQzAwMDAwNSkJLyogTGluZSBTdGF0dXMgUmVnaXN0ZXIgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX1NJVU1TXzIJCV9fcHJlZzgoS1NFRzEgKyAweDBDMDAwMDA2KQkvKiBNb2RlbSBTdGF0dXMgUmVnaXN0ZXIgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX1NJVVNDXzIJCV9fcHJlZzgoS1NFRzEgKyAweDBDMDAwMDA3KQkvKiBTY3JhdGNoIFJlZ2lzdGVyIChSL1cpICovCisjZGVmaW5lIFZSNDE4MV9TSVVJUlNFTF8yCV9fcHJlZzgoS1NFRzEgKyAweDBDMDAwMDA4KQkvKiBTSVUgSXJEQSBTZWxlY3RvdCAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfU0lVUkVTRVRfMglfX3ByZWc4KEtTRUcxICsgMHgwQzAwMDAwOSkJLyogU0lVIFJlc2V0IFJlZ2lzdGVyIChSL1cpICovCisjZGVmaW5lIFZSNDE4MV9TSVVDU0VMXzIJX19wcmVnOChLU0VHMSArIDB4MEMwMDAwMEEpCS8qIElyREEgRWNoby1iYWNrIENvbnRyb2wgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX1NJVUFDVE1TS18yCV9fcHJlZzgoS1NFRzEgKyAweDBDMDAwMDBDKQkvKiBTSVUgQWN0aXZpdHkgTWFzayBSZWdpc3RlciAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfU0lVQUNUVE1SXzIJX19wcmVnOChLU0VHMSArIDB4MEMwMDAwMEUpCS8qIFNJVSBBY3Rpdml0eSBUaW1lciBSZWdpc3RlciAoUi9XKSAqLworCisKKy8vIFVTQiBNb2R1bGUKKyNkZWZpbmUgVlI0MTgxX1VTQklORklGTwlfX3ByZWcxNihLU0VHMSArIDB4MEIwMDA3ODApCS8qIFVTQiBCdWxrIElucHV0IEZJRk8gKEJ1bGsgSW4gRW5kIFBvaW50KSAoVykgKi8KKyNkZWZpbmUgVlI0MTgxX1VTQk9VVEZJRk8JX19wcmVnMTYoS1NFRzEgKyAweDBCMDAwNzgyKQkvKiBVU0IgQnVsayBPdXRwdXQgRklGTyAoQnVsayBPdXQgRW5kIFBvaW50KSAoUikgKi8KKyNkZWZpbmUgVlI0MTgxX1VTQkNUTEZJRk8JX19wcmVnMTYoS1NFRzEgKyAweDBCMDAwNzg0KQkvKiBVU0IgQ29udHJvbCBGSUZPIChDb250cm9sIEVuZCBQb2ludCkgKFcpICovCisjZGVmaW5lIFZSNDE4MV9VU0JTVEFUCQlfX3ByZWcxNihLU0VHMSArIDB4MEIwMDA3ODYpCS8qIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX1VTQklOVE1TSwlfX3ByZWcxNihLU0VHMSArIDB4MEIwMDA3ODgpCS8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIChSL1cpICovCisjZGVmaW5lIFZSNDE4MV9VU0JDVExSRUcJX19wcmVnMTYoS1NFRzEgKyAweDBCMDAwNzhBKQkvKiBDb250cm9sIFJlZ2lzdGVyIChSL1cpICovCisjZGVmaW5lIFZSNDE4MV9VU0JTVFBSRUcJX19wcmVnMTYoS1NFRzEgKyAweDBCMDAwNzhDKQkvKiBVU0IgVHJhbnNmZXIgU3RvcCBSZWdpc3RlciAoUi9XKSAqLworCisvLyBMQ0QgQ29udHJvbGxlcgorI2RlZmluZSBWUjQxODFfSFJUT1RBTFJFRwlfX3ByZWcxNihLU0VHMSArIDB4MEEwMDA0MDApCS8qIEhvcml6b250YWwgdG90YWwgUmVnaXN0ZXIgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX0hSVklTSUJSRUcJX19wcmVnMTYoS1NFRzEgKyAweDBBMDAwNDAyKQkvKiBIb3Jpem9udGFsIFZpc2libGUgUmVnaXN0ZXIgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX0xEQ0xLU1RSRUcJX19wcmVnMTYoS1NFRzEgKyAweDBBMDAwNDA0KQkvKiBMb2FkIGNsb2NrIHN0YXJ0IFJlZ2lzdGVyIChSL1cpICovCisjZGVmaW5lIFZSNDE4MV9MRENMS05EUkVHCV9fcHJlZzE2KEtTRUcxICsgMHgwQTAwMDQwNikJLyogTG9hZCBjbG9jayBlbmQgUmVnaXN0ZXIgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX1ZSVE9UQUxSRUcJX19wcmVnMTYoS1NFRzEgKyAweDBBMDAwNDA4KQkvKiBWZXJ0aWNhbCBUb3RhbCBSZWdpc3RlciAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfVlJWSVNJQlJFRwlfX3ByZWcxNihLU0VHMSArIDB4MEEwMDA0MEEpCS8qIFZlcnRpY2FsIFZpc2libGUgUmVnaXN0ZXIgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX0ZWU1RBUlRSRUcJX19wcmVnMTYoS1NFRzEgKyAweDBBMDAwNDBDKQkvKiBGTE0gdmVydGljYWwgc3RhcnQgUmVnaXN0ZXIgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX0ZWRU5EUkVHCQlfX3ByZWcxNihLU0VHMSArIDB4MEEwMDA0MEUpCS8qIEZMTSB2ZXJ0aWNhbCBlbmQgUmVnaXN0ZXIgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX0xDRENUUkxSRUcJX19wcmVnMTYoS1NFRzEgKyAweDBBMDAwNDEwKQkvKiBMQ0QgY29udHJvbCBSZWdpc3RlciAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfTENESU5SUVJFRwlfX3ByZWcxNihLU0VHMSArIDB4MEEwMDA0MTIpCS8qIExDRCBJbnRlcnJ1cHQgcmVxdWVzdCBSZWdpc3RlciAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfTENEQ0ZHUkVHMAlfX3ByZWcxNihLU0VHMSArIDB4MEEwMDA0MTQpCS8qIExDRCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDAgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX0xDRENGR1JFRzEJX19wcmVnMTYoS1NFRzEgKyAweDBBMDAwNDE2KQkvKiBMQ0QgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxIChSL1cpICovCisjZGVmaW5lIFZSNDE4MV9GQlNUQUQxUkVHCV9fcHJlZzE2KEtTRUcxICsgMHgwQTAwMDQxOCkJLyogRnJhbWUgQnVmZmVyIFN0YXJ0IEFkZHJlc3MgMSBSZWdpc3RlciAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfRkJTVEFEMlJFRwlfX3ByZWcxNihLU0VHMSArIDB4MEEwMDA0MUEpCS8qIEZyYW1lIEJ1ZmZlciBTdGFydCBBZGRyZXNzIDIgUmVnaXN0ZXIgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX0ZCTkRBRDFSRUcJX19wcmVnMTYoS1NFRzEgKyAweDBBMDAwNDIwKQkvKiBGcmFtZSBCdWZmZXIgRW5kIEFkZHJlc3MgMSBSZWdpc3RlciAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfRkJOREFEMlJFRwlfX3ByZWcxNihLU0VHMSArIDB4MEEwMDA0MjIpCS8qIEZyYW1lIEJ1ZmZlciBFbmQgQWRkcmVzcyAyIHJlZ2lzdGVyIChSL1cpICovCisjZGVmaW5lIFZSNDE4MV9GSFNUQVJUUkVHCV9fcHJlZzE2KEtTRUcxICsgMHgwQTAwMDQyNCkJLyogRkxNIGhvcml6b250YWwgU3RhcnQgUmVnaXN0ZXIgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX0ZIRU5EUkVHCQlfX3ByZWcxNihLU0VHMSArIDB4MEEwMDA0MjYpCS8qIEZMTSBob3Jpem9udGFsIEVuZCBSZWdpc3RlciAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfUFdSQ09OUkVHMQlfX3ByZWcxNihLU0VHMSArIDB4MEEwMDA0MzApCS8qIFBvd2VyIENvbnRyb2wgcmVnaXN0ZXIgMSAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfUFdSQ09OUkVHMglfX3ByZWcxNihLU0VHMSArIDB4MEEwMDA0MzIpCS8qIFBvd2VyIENvbnRyb2wgcmVnaXN0ZXIgMiAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfTENESU1TS1JFRwlfX3ByZWcxNihLU0VHMSArIDB4MEEwMDA0MzQpCS8qIExDRCBJbnRlcnJ1cHQgTWFzayByZWdpc3RlciAoUi9XKSAqLworI2RlZmluZSBWUjQxODFfQ1BJTkRDVFJFRwlfX3ByZWcxNihLU0VHMSArIDB4MEEwMDA0N0UpCS8qIENvbG9yIHBhbGV0dGUgSW5kZXggYW5kIGNvbnRyb2wgUmVnaXN0ZXIgKFIvVykgKi8KKyNkZWZpbmUgVlI0MTgxX0NQQUxEQVRSRUcJX19wcmVnMzIoS1NFRzEgKyAweDBBMDAwNDgwKQkvKiBDb2xvciBwYWxldHRlIGRhdGEgcmVnaXN0ZXIgKDMyYml0cyBSZWdpc3RlcikgKFIvVykgKi8KKworLy8gcGh5c2ljYWwgYWRkcmVzcyBzcGFjZXMKKyNkZWZpbmUgVlI0MTgxX0xDRCAgICAgICAgICAgICAweDBhMDAwMDAwCisjZGVmaW5lIFZSNDE4MV9JTlRFUk5BTF9JT18yICAgMHgwYjAwMDAwMAorI2RlZmluZSBWUjQxODFfSU5URVJOQUxfSU9fMSAgIDB4MGMwMDAwMDAKKyNkZWZpbmUgVlI0MTgxX0lTQV9NRU0gICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIFZSNDE4MV9JU0FfSU8gICAgICAgICAgMHgxNDAwMDAwMAorI2RlZmluZSBWUjQxODFfUk9NICAgICAgICAgICAgIDB4MTgwMDAwMDAKKworLy8gVGhpcyBpcyB0aGUgYmFzZSBhZGRyZXNzIGZvciBJTyBwb3J0IGRlY29kaW5nIHRvIHdoaWNoIHRoZSAxNiBiaXQgSU8gcG9ydCBhZGRyZXNzCisvLyBpcyBhZGRlZC4gIERlZmluaW5nIGl0IHRvIDAgd2lsbCB1c3VhbGx5IGNhdXNlIGEga2VybmVsIG9vcHMgYW55IHRpbWUgcG9ydCBJTyBpcworLy8gYXR0ZW1wdGVkLCB3aGljaCBjYW4gYmUgaGFuZHkgZm9yIHR1cm5pbmcgdXAgcGFydHMgb2YgdGhlIGtlcm5lbCB0aGF0IG1ha2UKKy8vIGluY29ycmVjdCBhcmNoaXRlY3R1cmUgYXNzdW1wdGlvbnMgKGJ5IGFzc3VtaW5nIHRoYXQgZXZlcnl0aGluZyBhY3RzIGxpa2UgYSBQQyksCisvLyBidXQgd2UgbmVlZCBpdCBjb3JyZWN0bHkgZGVmaW5lZCB0byB1c2UgdGhlIFBDTUNJQS9DRiBjb250cm9sbGVyOgorI2RlZmluZSBWUjQxODFfUE9SVF9CQVNFCShLU0VHMSArIFZSNDE4MV9JU0FfSU8pCisjZGVmaW5lIFZSNDE4MV9JU0FNRU1fQkFTRQkoS1NFRzEgKyBWUjQxODFfSVNBX01FTSkKKworI2VuZGlmIC8qIF9fQVNNX1ZSNDE4MV9WUjQxODFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy92cjQxeHgvY2FwY2VsbGEuaCBiL2luY2x1ZGUvYXNtLW1pcHMvdnI0MXh4L2NhcGNlbGxhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI1NTA4MwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvdnI0MXh4L2NhcGNlbGxhLmgKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqICBjYXBjZWxsYS5oLCBJbmNsdWRlIGZpbGUgZm9yIFpBTyBOZXR3b3JrcyBDYXBjZWxsYS4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDQgIFlvaWNoaSBZdWFzYSA8eXVhc2FAaGguaWlqNHUub3IuanA+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKyNpZm5kZWYgX19aQU9fQ0FQQ0VMTEFfSAorI2RlZmluZSBfX1pBT19DQVBDRUxMQV9ICisKKyNpbmNsdWRlIDxhc20vdnI0MXh4L3ZyNDF4eC5oPgorCisvKgorICogR2VuZXJhbC1QdXJwb3NlIEkvTyBQaW4gTnVtYmVyCisgKi8KKyNkZWZpbmUgUEMxMDRQTFVTX0lOVEFfUElOCQkyCisjZGVmaW5lIFBDMTA0UExVU19JTlRCX1BJTgkJMworI2RlZmluZSBQQzEwNFBMVVNfSU5UQ19QSU4JCTQKKyNkZWZpbmUgUEMxMDRQTFVTX0lOVERfUElOCQk1CisKKy8qCisgKiBJbnRlcnJ1cHQgTnVtYmVyCisgKi8KKyNkZWZpbmUgUlRMODEzOV8xX0lSUQkJCUdJVV9JUlEoUEMxMDRQTFVTX0lOVENfUElOKQorI2RlZmluZSBSVEw4MTM5XzJfSVJRCQkJR0lVX0lSUShQQzEwNFBMVVNfSU5URF9QSU4pCisjZGVmaW5lIFBDMTA0UExVU19JTlRBX0lSUQkJR0lVX0lSUShQQzEwNFBMVVNfSU5UQV9QSU4pCisjZGVmaW5lIFBDMTA0UExVU19JTlRCX0lSUQkJR0lVX0lSUShQQzEwNFBMVVNfSU5UQl9QSU4pCisjZGVmaW5lIFBDMTA0UExVU19JTlRDX0lSUQkJR0lVX0lSUShQQzEwNFBMVVNfSU5UQ19QSU4pCisjZGVmaW5lIFBDMTA0UExVU19JTlREX0lSUQkJR0lVX0lSUShQQzEwNFBMVVNfSU5URF9QSU4pCisKKyNlbmRpZiAvKiBfX1pBT19DQVBDRUxMQV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3ZyNDF4eC9jbWJ2cjQxMzMuaCBiL2luY2x1ZGUvYXNtLW1pcHMvdnI0MXh4L2NtYnZyNDEzMy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyYWYzODkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3ZyNDF4eC9jbWJ2cjQxMzMuaApAQCAtMCwwICsxLDYxIEBACisvKgorICogaW5jbHVkZS9hc20tbWlwcy92cjQxeHgvY21idnI0MTMzLmgKKyAqCisgKiBJbmNsdWRlIGZpbGUgZm9yIE5FQyBDTUItVlI0MTMzLgorICoKKyAqIEF1dGhvcjogWW9pY2hpIFl1YXNhIDx5eXVhc2FAbXZpc3RhLmNvbSwgb3Igc291cmNlQG12aXN0YS5jb20+IGFuZAorICogICAgICAgICBKdW4gU3VuIDxqc3VuQG12aXN0YS5jb20sIG9yIHNvdXJjZUBtdmlzdGEuY29tPiBhbmQKKyAqICAgICAgICAgQWxleCBTYXBrb3YgPGFzYXBrb3ZAcnUubXZpc3RhLmNvbT4KKyAqCisgKiAyMDAyLTIwMDQgKGMpIE1vbnRhVmlzdGEsIFNvZnR3YXJlLCBJbmMuIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbQorICogaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzCisgKiBvciBpbXBsaWVkLgorICovCisjaWZuZGVmIF9fTkVDX0NNQlZSNDEzM19ICisjZGVmaW5lIF9fTkVDX0NNQlZSNDEzM19ICisKKyNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CisjaW5jbHVkZSA8YXNtL3ZyNDF4eC92cjQxeHguaD4KKworLyoKKyAqIEdlbmVyYWwtUHVycG9zZSBJL08gUGluIE51bWJlcgorICovCisjZGVmaW5lIENNQlZSNDFYWF9JTlRBX1BJTgkJMQorI2RlZmluZSBDTUJWUjQxWFhfSU5UQl9QSU4JCTEKKyNkZWZpbmUgQ01CVlI0MVhYX0lOVENfUElOCQkzCisjZGVmaW5lIENNQlZSNDFYWF9JTlREX1BJTgkJMQorI2RlZmluZSBDTUJWUjQxWFhfSU5URV9QSU4JCTEKKworLyoKKyAqIEludGVycnVwdCBOdW1iZXIKKyAqLworI2RlZmluZSBDTUJWUjQxWFhfSU5UQV9JUlEJCUdJVV9JUlEoQ01CVlI0MVhYX0lOVEFfUElOKQorI2RlZmluZSBDTUJWUjQxWFhfSU5UQl9JUlEJCUdJVV9JUlEoQ01CVlI0MVhYX0lOVEJfUElOKQorI2RlZmluZSBDTUJWUjQxWFhfSU5UQ19JUlEJCUdJVV9JUlEoQ01CVlI0MVhYX0lOVENfUElOKQorI2RlZmluZSBDTUJWUjQxWFhfSU5URF9JUlEJCUdJVV9JUlEoQ01CVlI0MVhYX0lOVERfUElOKQorI2RlZmluZSBDTUJWUjQxWFhfSU5URV9JUlEJCUdJVV9JUlEoQ01CVlI0MVhYX0lOVEVfUElOKQorCisjZGVmaW5lIEk4MjU5X0lSUV9CQVNFCQkJNzIKKyNkZWZpbmUgSTgyNTlfSVJRKHgpCQkJKEk4MjU5X0lSUV9CQVNFICsgKHgpKQorI2RlZmluZSBUSU1FUl9JUlEJCQlJODI1OV9JUlEoMCkKKyNkZWZpbmUgS0VZQk9BUkRfSVJRCQkJSTgyNTlfSVJRKDEpCisjZGVmaW5lIEk4MjU5X1NMQVZFX0lSUQkJCUk4MjU5X0lSUSgyKQorI2RlZmluZSBVQVJUM19JUlEJCQlJODI1OV9JUlEoMykKKyNkZWZpbmUgVUFSVDFfSVJRCQkJSTgyNTlfSVJRKDQpCisjZGVmaW5lIFVBUlQyX0lSUQkJCUk4MjU5X0lSUSg1KQorI2RlZmluZSBGRENfSVJRCQkJCUk4MjU5X0lSUSg2KQorI2RlZmluZSBQQVJQT1JUX0lSUQkJCUk4MjU5X0lSUSg3KQorI2RlZmluZSBSVENfSVJRCQkJCUk4MjU5X0lSUSg4KQorI2RlZmluZSBVU0JfSVJRCQkJCUk4MjU5X0lSUSg5KQorI2RlZmluZSBJODI1OV9JTlRBX0lSUQkJCUk4MjU5X0lSUSgxMCkKKyNkZWZpbmUgQVVESU9fSVJRCQkJSTgyNTlfSVJRKDExKQorI2RlZmluZSBBVVhfSVJRCQkJCUk4MjU5X0lSUSgxMikKKyNkZWZpbmUgSURFX1BSSU1BUllfSVJRCQkJSTgyNTlfSVJRKDE0KQorI2RlZmluZSBJREVfU0VDT05EQVJZX0lSUQkJSTgyNTlfSVJRKDE1KQorI2RlZmluZSBJODI1OV9JUlFfTEFTVAkJCUlERV9TRUNPTkRBUllfSVJRCisKKyNkZWZpbmUgUlRDX1BPUlQoeCkJKDB4YWYwMDAxMDAgKyAoeCkpCisjZGVmaW5lIFJUQ19JT19FWFRFTlQJMHgxNDAKKworI2VuZGlmIC8qIF9fTkVDX0NNQlZSNDEzM19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3ZyNDF4eC9lNTUuaCBiL2luY2x1ZGUvYXNtLW1pcHMvdnI0MXh4L2U1NS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhMzdiNTYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3ZyNDF4eC9lNTUuaApAQCAtMCwwICsxLDQzIEBACisvKgorICogIGU1NS5oLCBJbmNsdWRlIGZpbGUgZm9yIENBU0lPIENBU1NJT1BFSUEgRS0xMC8xNS81NS82NS4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDQgIFlvaWNoaSBZdWFzYSA8eXVhc2FAaGguaWlqNHUub3IuanA+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKyNpZm5kZWYgX19DQVNJT19FNTVfSAorI2RlZmluZSBfX0NBU0lPX0U1NV9ICisKKyNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CisjaW5jbHVkZSA8YXNtL3ZyNDF4eC92cjQxeHguaD4KKworLyoKKyAqIEJvYXJkIHNwZWNpZmljIGFkZHJlc3MgbWFwcGluZworICovCisjZGVmaW5lIFZSNDFYWF9JU0FfTUVNX0JBU0UJCTB4MTAwMDAwMDAKKyNkZWZpbmUgVlI0MVhYX0lTQV9NRU1fU0laRQkJMHgwNDAwMDAwMAorCisvKiBWUjQxWFhfSVNBX0lPX0JBU0UgaW5jbHVkZXMgb2Zmc2V0IGZyb20gcmVhbCBiYXNlLiAqLworI2RlZmluZSBWUjQxWFhfSVNBX0lPX0JBU0UJCTB4MTQwMGMwMDAKKyNkZWZpbmUgVlI0MVhYX0lTQV9JT19TSVpFCQkweDAzZmY0MDAwCisKKyNkZWZpbmUgSVNBX0JVU19JT19CQVNFCQkJMAorI2RlZmluZSBJU0FfQlVTX0lPX1NJWkUJCQlWUjQxWFhfSVNBX0lPX1NJWkUKKworI2RlZmluZSBJT19QT1JUX0JBU0UJCQlLU0VHMUFERFIoVlI0MVhYX0lTQV9JT19CQVNFKQorI2RlZmluZSBJT19QT1JUX1JFU09VUkNFX1NUQVJUCQlJU0FfQlVTX0lPX0JBU0UKKyNkZWZpbmUgSU9fUE9SVF9SRVNPVVJDRV9FTkQJCShJU0FfQlVTX0lPX0JBU0UgKyBJU0FfQlVTX0lPX1NJWkUgLSAxKQorCisjZW5kaWYgLyogX19DQVNJT19FNTVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy92cjQxeHgvbXBjMzB4LmggYi9pbmNsdWRlL2FzbS1taXBzL3ZyNDF4eC9tcGMzMHguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmFjM2M4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy92cjQxeHgvbXBjMzB4LmgKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqICBtcGMzMHguaCwgSW5jbHVkZSBmaWxlIGZvciBWaWN0b3IgTVAtQzMwMy8zMDQuCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMi0yMDA0ICBZb2ljaGkgWXVhc2EgPHl1YXNhQGhoLmlpajR1Lm9yLmpwPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisjaWZuZGVmIF9fVklDVE9SX01QQzMwWF9ICisjZGVmaW5lIF9fVklDVE9SX01QQzMwWF9ICisKKyNpbmNsdWRlIDxhc20vdnI0MXh4L3ZyNDF4eC5oPgorCisvKgorICogR2VuZXJhbC1QdXJwb3NlIEkvTyBQaW4gTnVtYmVyCisgKi8KKyNkZWZpbmUgVlJDNDE3M19QSU4JCQkxCisjZGVmaW5lIE1RMjAwX1BJTgkJCTQKKworLyoKKyAqIEludGVycnVwdCBOdW1iZXIKKyAqLworI2RlZmluZSBWUkM0MTczX0NBU0NBREVfSVJRCQlHSVVfSVJRKFZSQzQxNzNfUElOKQorI2RlZmluZSBNUTIwMF9JUlEJCQlHSVVfSVJRKE1RMjAwX1BJTikKKworI2VuZGlmIC8qIF9fVklDVE9SX01QQzMwWF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3ZyNDF4eC9zaXUuaCBiL2luY2x1ZGUvYXNtLW1pcHMvdnI0MXh4L3NpdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2NWNjMDcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3ZyNDF4eC9zaXUuaApAQCAtMCwwICsxLDUwIEBACisvKgorICogIEluY2x1ZGUgZmlsZSBmb3IgTkVDIFZSNDEwMCBzZXJpZXMgU2VyaWFsIEludGVyZmFjZSBVbml0LgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUgIFlvaWNoaSBZdWFzYSA8eXVhc2FAaGguaWlqNHUub3IuanA+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKyNpZm5kZWYgX19ORUNfVlI0MVhYX1NJVV9ICisjZGVmaW5lIF9fTkVDX1ZSNDFYWF9TSVVfSAorCit0eXBlZGVmIGVudW0geworCVNJVV9JTlRFUkZBQ0VfUlMyMzJDLAorCVNJVV9JTlRFUkZBQ0VfSVJEQSwKK30gc2l1X2ludGVyZmFjZV90OworCitleHRlcm4gdm9pZCB2cjQxeHhfc2VsZWN0X3NpdV9pbnRlcmZhY2Uoc2l1X2ludGVyZmFjZV90IGludGVyZmFjZSk7CisKK3R5cGVkZWYgZW51bSB7CisJU0lVX1VTRV9JUkRBLAorCUZJUl9VU0VfSVJEQSwKK30gaXJkYV91c2VfdDsKKworZXh0ZXJuIHZvaWQgdnI0MXh4X3VzZV9pcmRhKGlyZGFfdXNlX3QgdXNlKTsKKwordHlwZWRlZiBlbnVtIHsKKwlTSEFSUF9JUkRBLAorCVRFTUlDX0lSREEsCisJSFBfSVJEQSwKK30gaXJkYV9tb2R1bGVfdDsKKwordHlwZWRlZiBlbnVtIHsKKwlJUkRBX1RYXzFfNU1CUFMsCisJSVJEQV9UWF80TUJQUywKK30gaXJkYV9zcGVlZF90OworCitleHRlcm4gdm9pZCB2cjQxeHhfc2VsZWN0X2lyZGFfbW9kdWxlKGlyZGFfbW9kdWxlX3QgbW9kdWxlLCBpcmRhX3NwZWVkX3Qgc3BlZWQpOworCisjZW5kaWYgLyogX19ORUNfVlI0MVhYX1NJVV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3ZyNDF4eC90YjAyMTkuaCBiL2luY2x1ZGUvYXNtLW1pcHMvdnI0MXh4L3RiMDIxOS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3M2M2MzkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3ZyNDF4eC90YjAyMTkuaApAQCAtMCwwICsxLDQyIEBACisvKgorICogIHRiMDIxOS5oLCBJbmNsdWRlIGZpbGUgZm9yIFRBTkJBQyBUQjAyMTkuCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMi0yMDA0ICBZb2ljaGkgWXVhc2EgPHl1YXNhQGhoLmlpajR1Lm9yLmpwPgorICoKKyAqICBNb2RpZmllZCBmb3IgVEFOQkFDIFRCMDIxOToKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMgTWVnYXNvbHV0aW9uIEluYy4gIDxtYXRzdUBtZWdhc29sdXRpb24uanA+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKyNpZm5kZWYgX19UQU5CQUNfVEIwMjE5X0gKKyNkZWZpbmUgX19UQU5CQUNfVEIwMjE5X0gKKworI2luY2x1ZGUgPGFzbS92cjQxeHgvdnI0MXh4Lmg+CisKKy8qCisgKiBHZW5lcmFsLVB1cnBvc2UgSS9PIFBpbiBOdW1iZXIKKyAqLworI2RlZmluZSBUQjAyMTlfUENJX1NMT1QxX1BJTgkJMgorI2RlZmluZSBUQjAyMTlfUENJX1NMT1QyX1BJTgkJMworI2RlZmluZSBUQjAyMTlfUENJX1NMT1QzX1BJTgkJNAorCisvKgorICogSW50ZXJydXB0IE51bWJlcgorICovCisjZGVmaW5lIFRCMDIxOV9QQ0lfU0xPVDFfSVJRCQlHSVVfSVJRKFRCMDIxOV9QQ0lfU0xPVDFfUElOKQorI2RlZmluZSBUQjAyMTlfUENJX1NMT1QyX0lSUQkJR0lVX0lSUShUQjAyMTlfUENJX1NMT1QyX1BJTikKKyNkZWZpbmUgVEIwMjE5X1BDSV9TTE9UM19JUlEJCUdJVV9JUlEoVEIwMjE5X1BDSV9TTE9UM19QSU4pCisKKyNlbmRpZiAvKiBfX1RBTkJBQ19UQjAyMTlfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy92cjQxeHgvdGIwMjI2LmggYi9pbmNsdWRlL2FzbS1taXBzL3ZyNDF4eC90YjAyMjYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmY5YTYwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy92cjQxeHgvdGIwMjI2LmgKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqICB0YjAyMjYuaCwgSW5jbHVkZSBmaWxlIGZvciBUQU5CQUMgVEIwMjI2LgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNCAgWW9pY2hpIFl1YXNhIDx5dWFzYUBoaC5paWo0dS5vci5qcD4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworI2lmbmRlZiBfX1RBTkJBQ19UQjAyMjZfSAorI2RlZmluZSBfX1RBTkJBQ19UQjAyMjZfSAorCisjaW5jbHVkZSA8YXNtL3ZyNDF4eC92cjQxeHguaD4KKworLyoKKyAqIEdlbmVyYWwtUHVycG9zZSBJL08gUGluIE51bWJlcgorICovCisjZGVmaW5lIEdEODI1NTlfMV9QSU4JCQkyCisjZGVmaW5lIEdEODI1NTlfMl9QSU4JCQkzCisjZGVmaW5lIFVQRDcyMDEwMF9JTlRBX1BJTgkJNAorI2RlZmluZSBVUEQ3MjAxMDBfSU5UQl9QSU4JCTgKKyNkZWZpbmUgVVBENzIwMTAwX0lOVENfUElOCQkxMworCisvKgorICogSW50ZXJydXB0IE51bWJlcgorICovCisjZGVmaW5lIEdEODI1NTlfMV9JUlEJCQlHSVVfSVJRKEdEODI1NTlfMV9QSU4pCisjZGVmaW5lIEdEODI1NTlfMl9JUlEJCQlHSVVfSVJRKEdEODI1NTlfMl9QSU4pCisjZGVmaW5lIFVQRDcyMDEwMF9JTlRBX0lSUQkJR0lVX0lSUShVUEQ3MjAxMDBfSU5UQV9QSU4pCisjZGVmaW5lIFVQRDcyMDEwMF9JTlRCX0lSUQkJR0lVX0lSUShVUEQ3MjAxMDBfSU5UQl9QSU4pCisjZGVmaW5lIFVQRDcyMDEwMF9JTlRDX0lSUQkJR0lVX0lSUShVUEQ3MjAxMDBfSU5UQ19QSU4pCisKKyNlbmRpZiAvKiBfX1RBTkJBQ19UQjAyMjZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy92cjQxeHgvdnI0MXh4LmggYi9pbmNsdWRlL2FzbS1taXBzL3ZyNDF4eC92cjQxeHguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWFjYWNlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy92cjQxeHgvdnI0MXh4LmgKQEAgLTAsMCArMSwzMjAgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1taXBzL3ZyNDF4eC92cjQxeHguaAorICoKKyAqIEluY2x1ZGUgZmlsZSBmb3IgTkVDIFZSNDEwMCBzZXJpZXMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5IE1pY2hhZWwgS2xhcgorICogQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyIFBhdWwgTXVuZHQKKyAqIENvcHlyaWdodCAoQykgMjAwMiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgVGltZVN5cyBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDQgWW9pY2hpIFl1YXNhIDx5dWFzYUBoaC5paWo0dS5vci5qcD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisjaWZuZGVmIF9fTkVDX1ZSNDFYWF9ICisjZGVmaW5lIF9fTkVDX1ZSNDFYWF9ICisKKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKworLyoKKyAqIENQVSBSZXZpc2lvbgorICovCisvKiBWUjQxMjIgMHgwMDAwMGM3MC0weDAwMDAwYzcyICovCisjZGVmaW5lIFBSSURfVlI0MTIyX1JFVjFfMAkweDAwMDAwYzcwCisjZGVmaW5lIFBSSURfVlI0MTIyX1JFVjJfMAkweDAwMDAwYzcwCisjZGVmaW5lIFBSSURfVlI0MTIyX1JFVjJfMQkweDAwMDAwYzcwCisjZGVmaW5lIFBSSURfVlI0MTIyX1JFVjNfMAkweDAwMDAwYzcxCisjZGVmaW5lIFBSSURfVlI0MTIyX1JFVjNfMQkweDAwMDAwYzcyCisKKy8qIFZSNDE4MUEgMHgwMDAwMGM3My0weDAwMDAwYzdmICovCisjZGVmaW5lIFBSSURfVlI0MTgxQV9SRVYxXzAJMHgwMDAwMGM3MworI2RlZmluZSBQUklEX1ZSNDE4MUFfUkVWMV8xCTB4MDAwMDBjNzQKKworLyogVlI0MTMxIDB4MDAwMDBjODAtMHgwMDAwMGM4MyAqLworI2RlZmluZSBQUklEX1ZSNDEzMV9SRVYxXzIJMHgwMDAwMGM4MAorI2RlZmluZSBQUklEX1ZSNDEzMV9SRVYyXzAJMHgwMDAwMGM4MQorI2RlZmluZSBQUklEX1ZSNDEzMV9SRVYyXzEJMHgwMDAwMGM4MgorI2RlZmluZSBQUklEX1ZSNDEzMV9SRVYyXzIJMHgwMDAwMGM4MworCisvKiBWUjQxMzMgMHgwMDAwMGM4NC0gKi8KKyNkZWZpbmUgUFJJRF9WUjQxMzMJCTB4MDAwMDBjODQKKworLyoKKyAqIEJ1cyBDb250cm9sIFVpbnQKKyAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdnI0MXh4X2NhbGN1bGF0ZV9jbG9ja19mcmVxdWVuY3kodm9pZCk7CitleHRlcm4gdW5zaWduZWQgbG9uZyB2cjQxeHhfZ2V0X3Z0Y2xvY2tfZnJlcXVlbmN5KHZvaWQpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdnI0MXh4X2dldF90Y2xvY2tfZnJlcXVlbmN5KHZvaWQpOworCisvKgorICogQ2xvY2sgTWFzayBVbml0CisgKi8KK3R5cGVkZWYgZW51bSB7CisJUElVX0NMT0NLLAorCVNJVV9DTE9DSywKKwlBSVVfQ0xPQ0ssCisJS0lVX0NMT0NLLAorCUZJUl9DTE9DSywKKwlEU0lVX0NMT0NLLAorCUNTSV9DTE9DSywKKwlQQ0lVX0NMT0NLLAorCUhTUF9DTE9DSywKKwlQQ0lfQ0xPQ0ssCisJQ0VVX0NMT0NLLAorCUVUSEVSMF9DTE9DSywKKwlFVEhFUjFfQ0xPQ0sKK30gdnI0MXh4X2Nsb2NrX3Q7CisKK2V4dGVybiB2b2lkIHZyNDF4eF9zdXBwbHlfY2xvY2sodnI0MXh4X2Nsb2NrX3QgY2xvY2spOworZXh0ZXJuIHZvaWQgdnI0MXh4X21hc2tfY2xvY2sodnI0MXh4X2Nsb2NrX3QgY2xvY2spOworCisvKgorICogSW50ZXJydXB0IENvbnRyb2wgVW5pdAorICovCisvKiBDUFUgY29yZSBJbnRlcnJ1cHQgTnVtYmVycyAqLworI2RlZmluZSBNSVBTX0NQVV9JUlFfQkFTRQkwCisjZGVmaW5lIE1JUFNfQ1BVX0lSUSh4KQkJKE1JUFNfQ1BVX0lSUV9CQVNFICsgKHgpKQorI2RlZmluZSBNSVBTX1NPRlRJTlQwX0lSUQlNSVBTX0NQVV9JUlEoMCkKKyNkZWZpbmUgTUlQU19TT0ZUSU5UMV9JUlEJTUlQU19DUFVfSVJRKDEpCisjZGVmaW5lIElOVDBfQ0FTQ0FERV9JUlEJTUlQU19DUFVfSVJRKDIpCisjZGVmaW5lIElOVDFfQ0FTQ0FERV9JUlEJTUlQU19DUFVfSVJRKDMpCisjZGVmaW5lIElOVDJfQ0FTQ0FERV9JUlEJTUlQU19DUFVfSVJRKDQpCisjZGVmaW5lIElOVDNfQ0FTQ0FERV9JUlEJTUlQU19DUFVfSVJRKDUpCisjZGVmaW5lIElOVDRfQ0FTQ0FERV9JUlEJTUlQU19DUFVfSVJRKDYpCisjZGVmaW5lIFRJTUVSX0lSUQkJTUlQU19DUFVfSVJRKDcpCisKKy8qIFNZSU5UMSBJbnRlcnJ1cHQgTnVtYmVycyAqLworI2RlZmluZSBTWVNJTlQxX0lSUV9CQVNFCTgKKyNkZWZpbmUgU1lTSU5UMV9JUlEoeCkJCShTWVNJTlQxX0lSUV9CQVNFICsgKHgpKQorI2RlZmluZSBCQVRUUllfSVJRCQlTWVNJTlQxX0lSUSgwKQorI2RlZmluZSBQT1dFUl9JUlEJCVNZU0lOVDFfSVJRKDEpCisjZGVmaW5lIFJUQ0xPTkcxX0lSUQkJU1lTSU5UMV9JUlEoMikKKyNkZWZpbmUgRUxBUFNFRFRJTUVfSVJRCQlTWVNJTlQxX0lSUSgzKQorLyogUkZVICovCisjZGVmaW5lIFBJVV9JUlEJCQlTWVNJTlQxX0lSUSg1KQorI2RlZmluZSBBSVVfSVJRCQkJU1lTSU5UMV9JUlEoNikKKyNkZWZpbmUgS0lVX0lSUQkJCVNZU0lOVDFfSVJRKDcpCisjZGVmaW5lIEdJVUlOVF9DQVNDQURFX0lSUQlTWVNJTlQxX0lSUSg4KQorI2RlZmluZSBTSVVfSVJRCQkJU1lTSU5UMV9JUlEoOSkKKyNkZWZpbmUgQlVTRVJSX0lSUQkJU1lTSU5UMV9JUlEoMTApCisjZGVmaW5lIFNPRlRJTlRfSVJRCQlTWVNJTlQxX0lSUSgxMSkKKyNkZWZpbmUgQ0xLUlVOX0lSUQkJU1lTSU5UMV9JUlEoMTIpCisjZGVmaW5lIERPWkVQSVVfSVJRCQlTWVNJTlQxX0lSUSgxMykKKyNkZWZpbmUgU1lTSU5UMV9JUlFfTEFTVAlET1pFUElVX0lSUQorCisvKiBTWVNJTlQyIEludGVycnVwdCBOdW1iZXJzICovCisjZGVmaW5lIFNZU0lOVDJfSVJRX0JBU0UJMjQKKyNkZWZpbmUgU1lTSU5UMl9JUlEoeCkJCShTWVNJTlQyX0lSUV9CQVNFICsgKHgpKQorI2RlZmluZSBSVENMT05HMl9JUlEJCVNZU0lOVDJfSVJRKDApCisjZGVmaW5lIExFRF9JUlEJCQlTWVNJTlQyX0lSUSgxKQorI2RlZmluZSBIU1BfSVJRCQkJU1lTSU5UMl9JUlEoMikKKyNkZWZpbmUgVENMT0NLX0lSUQkJU1lTSU5UMl9JUlEoMykKKyNkZWZpbmUgRklSX0lSUQkJCVNZU0lOVDJfSVJRKDQpCisjZGVmaW5lIENFVV9JUlEJCQlTWVNJTlQyX0lSUSg0KQkvKiBzYW1lIG51bWJlciBhcyBGSVJfSVJRICovCisjZGVmaW5lIERTSVVfSVJRCQlTWVNJTlQyX0lSUSg1KQorI2RlZmluZSBQQ0lfSVJRCQkJU1lTSU5UMl9JUlEoNikKKyNkZWZpbmUgU0NVX0lSUQkJCVNZU0lOVDJfSVJRKDcpCisjZGVmaW5lIENTSV9JUlEJCQlTWVNJTlQyX0lSUSg4KQorI2RlZmluZSBCQ1VfSVJRCQkJU1lTSU5UMl9JUlEoOSkKKyNkZWZpbmUgRVRIRVJORVRfSVJRCQlTWVNJTlQyX0lSUSgxMCkKKyNkZWZpbmUgU1lTSU5UMl9JUlFfTEFTVAlFVEhFUk5FVF9JUlEKKworLyogR0lVIEludGVycnVwdCBOdW1iZXJzICovCisjZGVmaW5lIEdJVV9JUlFfQkFTRQkJNDAKKyNkZWZpbmUgR0lVX0lSUSh4KQkJKEdJVV9JUlFfQkFTRSArICh4KSkJLyogSVJRIDQwLTcxICovCisjZGVmaW5lIEdJVV9JUlFfTEFTVAkJR0lVX0lSUSgzMSkKKyNkZWZpbmUgR0lVX0lSUV9UT19QSU4oeCkJKCh4KSAtIEdJVV9JUlFfQkFTRSkJLyogUGluIDAtMzEgKi8KKworZXh0ZXJuIGludCB2cjQxeHhfc2V0X2ludGFzc2lnbih1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBjaGFyIGludGFzc2lnbik7CitleHRlcm4gaW50IHZyNDF4eF9jYXNjYWRlX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBpbnQgKCpnZXRfaXJxX251bWJlcikoaW50IGlycSkpOworCisjZGVmaW5lIFBJVUlOVF9DT01NQU5ECQkweDAwNDAKKyNkZWZpbmUgUElVSU5UX0RBVEEJCTB4MDAyMAorI2RlZmluZSBQSVVJTlRfUEFHRTEJCTB4MDAxMAorI2RlZmluZSBQSVVJTlRfUEFHRTAJCTB4MDAwOAorI2RlZmluZSBQSVVJTlRfREFUQUxPU1QJCTB4MDAwNAorI2RlZmluZSBQSVVJTlRfU1RBVFVTQ0hBTkdFCTB4MDAwMQorCitleHRlcm4gdm9pZCB2cjQxeHhfZW5hYmxlX3BpdWludCh1aW50MTZfdCBtYXNrKTsKK2V4dGVybiB2b2lkIHZyNDF4eF9kaXNhYmxlX3BpdWludCh1aW50MTZfdCBtYXNrKTsKKworI2RlZmluZSBBSVVJTlRfSU5QVVRfRE1BRU5ECTB4MDgwMAorI2RlZmluZSBBSVVJTlRfSU5QVVRfRE1BSEFMVAkweDA0MDAKKyNkZWZpbmUgQUlVSU5UX0lOUFVUX0RBVEFMT1NUCTB4MDIwMAorI2RlZmluZSBBSVVJTlRfSU5QVVRfREFUQQkweDAxMDAKKyNkZWZpbmUgQUlVSU5UX09VVFBVVF9ETUFFTkQJMHgwMDA4CisjZGVmaW5lIEFJVUlOVF9PVVRQVVRfRE1BSEFMVAkweDAwMDQKKyNkZWZpbmUgQUlVSU5UX09VVFBVVF9OT0RBVEEJMHgwMDAyCisKK2V4dGVybiB2b2lkIHZyNDF4eF9lbmFibGVfYWl1aW50KHVpbnQxNl90IG1hc2spOworZXh0ZXJuIHZvaWQgdnI0MXh4X2Rpc2FibGVfYWl1aW50KHVpbnQxNl90IG1hc2spOworCisjZGVmaW5lIEtJVUlOVF9EQVRBTE9TVAkJMHgwMDA0CisjZGVmaW5lIEtJVUlOVF9EQVRBUkVBRFkJMHgwMDAyCisjZGVmaW5lIEtJVUlOVF9TQ0FOCQkweDAwMDEKKworZXh0ZXJuIHZvaWQgdnI0MXh4X2VuYWJsZV9raXVpbnQodWludDE2X3QgbWFzayk7CitleHRlcm4gdm9pZCB2cjQxeHhfZGlzYWJsZV9raXVpbnQodWludDE2X3QgbWFzayk7CisKKyNkZWZpbmUgRFNJVUlOVF9DVFMJCTB4MDgwMAorI2RlZmluZSBEU0lVSU5UX1JYRVJSCQkweDA0MDAKKyNkZWZpbmUgRFNJVUlOVF9SWAkJMHgwMjAwCisjZGVmaW5lIERTSVVJTlRfVFgJCTB4MDEwMAorI2RlZmluZSBEU0lVSU5UX0FMTAkJMHgwZjAwCisKK2V4dGVybiB2b2lkIHZyNDF4eF9lbmFibGVfZHNpdWludCh1aW50MTZfdCBtYXNrKTsKK2V4dGVybiB2b2lkIHZyNDF4eF9kaXNhYmxlX2RzaXVpbnQodWludDE2X3QgbWFzayk7CisKKyNkZWZpbmUgRklSSU5UX1VOSVQJCTB4MDAxMAorI2RlZmluZSBGSVJJTlRfUlhfRE1BRU5ECTB4MDAwOAorI2RlZmluZSBGSVJJTlRfUlhfRE1BSEFMVAkweDAwMDQKKyNkZWZpbmUgRklSSU5UX1RYX0RNQUVORAkweDAwMDIKKyNkZWZpbmUgRklSSU5UX1RYX0RNQUhBTFQJMHgwMDAxCisKK2V4dGVybiB2b2lkIHZyNDF4eF9lbmFibGVfZmlyaW50KHVpbnQxNl90IG1hc2spOworZXh0ZXJuIHZvaWQgdnI0MXh4X2Rpc2FibGVfZmlyaW50KHVpbnQxNl90IG1hc2spOworCitleHRlcm4gdm9pZCB2cjQxeHhfZW5hYmxlX3BjaWludCh2b2lkKTsKK2V4dGVybiB2b2lkIHZyNDF4eF9kaXNhYmxlX3BjaWludCh2b2lkKTsKKworZXh0ZXJuIHZvaWQgdnI0MXh4X2VuYWJsZV9zY3VpbnQodm9pZCk7CitleHRlcm4gdm9pZCB2cjQxeHhfZGlzYWJsZV9zY3VpbnQodm9pZCk7CisKKyNkZWZpbmUgQ1NJSU5UX1RYX0RNQUVORAkweDAwNDAKKyNkZWZpbmUgQ1NJSU5UX1RYX0RNQUhBTFQJMHgwMDIwCisjZGVmaW5lIENTSUlOVF9UWF9EQVRBCQkweDAwMTAKKyNkZWZpbmUgQ1NJSU5UX1RYX0ZJRk9FTVBUWQkweDAwMDgKKyNkZWZpbmUgQ1NJSU5UX1JYX0RNQUVORAkweDAwMDQKKyNkZWZpbmUgQ1NJSU5UX1JYX0RNQUhBTFQJMHgwMDAyCisjZGVmaW5lIENTSUlOVF9SWF9GSUZPRU1QVFkJMHgwMDAxCisKK2V4dGVybiB2b2lkIHZyNDF4eF9lbmFibGVfY3NpaW50KHVpbnQxNl90IG1hc2spOworZXh0ZXJuIHZvaWQgdnI0MXh4X2Rpc2FibGVfY3NpaW50KHVpbnQxNl90IG1hc2spOworCitleHRlcm4gdm9pZCB2cjQxeHhfZW5hYmxlX2JjdWludCh2b2lkKTsKK2V4dGVybiB2b2lkIHZyNDF4eF9kaXNhYmxlX2JjdWludCh2b2lkKTsKKworLyoKKyAqIFBvd2VyIE1hbmFnZW1lbnQgVW5pdAorICovCisKKy8qCisgKiBSVEMKKyAqLworZXh0ZXJuIHZvaWQgdnI0MXh4X3NldF9ydGNsb25nMV9jeWNsZSh1aW50MzJfdCBjeWNsZXMpOworZXh0ZXJuIHVpbnQzMl90IHZyNDF4eF9yZWFkX3J0Y2xvbmcxX2NvdW50ZXIodm9pZCk7CisKK2V4dGVybiB2b2lkIHZyNDF4eF9zZXRfcnRjbG9uZzJfY3ljbGUodWludDMyX3QgY3ljbGVzKTsKK2V4dGVybiB1aW50MzJfdCB2cjQxeHhfcmVhZF9ydGNsb25nMl9jb3VudGVyKHZvaWQpOworCitleHRlcm4gdm9pZCB2cjQxeHhfc2V0X3RjbG9ja19jeWNsZSh1aW50MzJfdCBjeWNsZXMpOworZXh0ZXJuIHVpbnQzMl90IHZyNDF4eF9yZWFkX3RjbG9ja19jb3VudGVyKHZvaWQpOworCisvKgorICogR2VuZXJhbC1QdXJwb3NlIEkvTyBVbml0CisgKi8KK2VudW0geworCVRSSUdHRVJfTEVWRUwsCisJVFJJR0dFUl9FREdFLAorCVRSSUdHRVJfRURHRV9GQUxMSU5HLAorCVRSSUdHRVJfRURHRV9SSVNJTkcKK307CisKK2VudW0geworCVNJR05BTF9USFJPVUdILAorCVNJR05BTF9IT0xECit9OworCitleHRlcm4gdm9pZCB2cjQxeHhfc2V0X2lycV90cmlnZ2VyKGludCBwaW4sIGludCB0cmlnZ2VyLCBpbnQgaG9sZCk7CisKK2VudW0geworCUxFVkVMX0xPVywKKwlMRVZFTF9ISUdICit9OworCitleHRlcm4gdm9pZCB2cjQxeHhfc2V0X2lycV9sZXZlbChpbnQgcGluLCBpbnQgbGV2ZWwpOworCitlbnVtIHsKKwlQSU9fSU5QVVQsCisJUElPX09VVFBVVAorfTsKKworZW51bSB7CisJREFUQV9MT1csCisJREFUQV9ISUdICit9OworCisvKgorICogUENJIENvbnRyb2wgVW5pdAorICovCisjZGVmaW5lIFBDSV9NQVNURVJfQUREUkVTU19NQVNLCTB4N2ZmZmZmZmZVCisKK3N0cnVjdCBwY2lfbWFzdGVyX2FkZHJlc3NfY29udmVyc2lvbiB7CisJdWludDMyX3QgYnVzX2Jhc2VfYWRkcmVzczsKKwl1aW50MzJfdCBhZGRyZXNzX21hc2s7CisJdWludDMyX3QgcGNpX2Jhc2VfYWRkcmVzczsKK307CisKK3N0cnVjdCBwY2lfdGFyZ2V0X2FkZHJlc3NfY29udmVyc2lvbiB7CisJdWludDMyX3QgYWRkcmVzc19tYXNrOworCXVpbnQzMl90IGJ1c19iYXNlX2FkZHJlc3M7Cit9OworCit0eXBlZGVmIGVudW0geworCUNBTk5PVF9MT0NLX0ZST01fREVWSUNFLAorCUNBTl9MT0NLX0ZST01fREVWSUNFLAorfSBwY2lfZXhjbHVzaXZlX2FjY2Vzc190OworCitzdHJ1Y3QgcGNpX21haWxib3hfYWRkcmVzcyB7CisJdWludDMyX3QgYmFzZV9hZGRyZXNzOworfTsKKworc3RydWN0IHBjaV90YXJnZXRfYWRkcmVzc193aW5kb3cgeworCXVpbnQzMl90IGJhc2VfYWRkcmVzczsKK307CisKK3R5cGVkZWYgZW51bSB7CisJUENJX0FSQklUUkFUSU9OX01PREVfRkFJUiwKKwlQQ0lfQVJCSVRSQVRJT05fTU9ERV9BTFRFUk5BVEVfMCwKKwlQQ0lfQVJCSVRSQVRJT05fTU9ERV9BTFRFUk5BVEVfQiwKK30gcGNpX2FyYml0ZXJfcHJpb3JpdHlfY29udHJvbF90OworCit0eXBlZGVmIGVudW0geworCVBDSV9UQUtFX0FXQVlfR05UX0RJU0FCTEUsCisJUENJX1RBS0VfQVdBWV9HTlRfRU5BQkxFLAorfSBwY2lfdGFrZV9hd2F5X2dudF9tb2RlX3Q7CisKK3N0cnVjdCBwY2lfY29udHJvbGxlcl91bml0X3NldHVwIHsKKwlzdHJ1Y3QgcGNpX21hc3Rlcl9hZGRyZXNzX2NvbnZlcnNpb24gKm1hc3Rlcl9tZW1vcnkxOworCXN0cnVjdCBwY2lfbWFzdGVyX2FkZHJlc3NfY29udmVyc2lvbiAqbWFzdGVyX21lbW9yeTI7CisKKwlzdHJ1Y3QgcGNpX3RhcmdldF9hZGRyZXNzX2NvbnZlcnNpb24gKnRhcmdldF9tZW1vcnkxOworCXN0cnVjdCBwY2lfdGFyZ2V0X2FkZHJlc3NfY29udmVyc2lvbiAqdGFyZ2V0X21lbW9yeTI7CisKKwlzdHJ1Y3QgcGNpX21hc3Rlcl9hZGRyZXNzX2NvbnZlcnNpb24gKm1hc3Rlcl9pbzsKKworCXBjaV9leGNsdXNpdmVfYWNjZXNzX3QgZXhjbHVzaXZlX2FjY2VzczsKKworCXVpbnQzMl90IHBjaV9jbG9ja19tYXg7CisJdWludDhfdCB3YWl0X3RpbWVfbGltaXRfZnJvbV9pcmR5X3RvX3RyZHk7CS8qIE9ubHkgVlI0MTIyIGlzIHN1cHBvcnRlZCAqLworCisJc3RydWN0IHBjaV9tYWlsYm94X2FkZHJlc3MgKm1haWxib3g7CisJc3RydWN0IHBjaV90YXJnZXRfYWRkcmVzc193aW5kb3cgKnRhcmdldF93aW5kb3cxOworCXN0cnVjdCBwY2lfdGFyZ2V0X2FkZHJlc3Nfd2luZG93ICp0YXJnZXRfd2luZG93MjsKKworCXVpbnQ4X3QgbWFzdGVyX2xhdGVuY3lfdGltZXI7CisJdWludDhfdCByZXRyeV9saW1pdDsKKworCXBjaV9hcmJpdGVyX3ByaW9yaXR5X2NvbnRyb2xfdCBhcmJpdGVyX3ByaW9yaXR5X2NvbnRyb2w7CisJcGNpX3Rha2VfYXdheV9nbnRfbW9kZV90IHRha2VfYXdheV9nbnRfbW9kZTsKKworCXN0cnVjdCByZXNvdXJjZSAqbWVtX3Jlc291cmNlOworCXN0cnVjdCByZXNvdXJjZSAqaW9fcmVzb3VyY2U7Cit9OworCitleHRlcm4gdm9pZCB2cjQxeHhfcGNpdV9zZXR1cChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXJfdW5pdF9zZXR1cCAqc2V0dXApOworCisjZW5kaWYgLyogX19ORUNfVlI0MVhYX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvdnI0MXh4L3ZyYzQxNzMuaCBiL2luY2x1ZGUvYXNtLW1pcHMvdnI0MXh4L3ZyYzQxNzMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGUxOTNjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy92cjQxeHgvdnJjNDE3My5oCkBAIC0wLDAgKzEsMjIyIEBACisvKgorICogIHZyYzQxNzMuaCwgSW5jbHVkZSBmaWxlIGZvciBORUMgVlJDNDE3My4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwICBNaWNoYWVsIFIuIE1jRG9uYWxkCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDMgTW9udGF2aXN0YSBTb2Z0d2FyZSBJbmMuCisgKiAgICBBdXRob3I6IFlvaWNoaSBZdWFzYSA8eXl1YXNhQG12aXN0YS5jb20sIG9yIHNvdXJjZUBtdmlzdGEuY29tPgorICogIENvcHlyaWdodCAoQykgMjAwNCAgWW9pY2hpIFl1YXNhIDx5dWFzYUBoaC5paWo0dS5vci5qcD4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUgUmFsZiBCYWVjaGxlIChyYWxmQGxpbnV4LW1pcHMub3JnKQorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisjaWZuZGVmIF9fTkVDX1ZSQzQxNzNfSCAKKyNkZWZpbmUgX19ORUNfVlJDNDE3M19IIAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKy8qCisgKiBJbnRlcnJ1cHQgTnVtYmVyCisgKi8KKyNkZWZpbmUgVlJDNDE3M19JUlFfQkFTRQk3MgorI2RlZmluZSBWUkM0MTczX0lSUSh4KQkJKFZSQzQxNzNfSVJRX0JBU0UgKyAoeCkpCisjZGVmaW5lIFZSQzQxNzNfVVNCX0lSUQkJVlJDNDE3M19JUlEoMCkKKyNkZWZpbmUgVlJDNDE3M19QQ01DSUEyX0lSUQlWUkM0MTczX0lSUSgxKQorI2RlZmluZSBWUkM0MTczX1BDTUNJQTFfSVJRCVZSQzQxNzNfSVJRKDIpCisjZGVmaW5lIFZSQzQxNzNfUFMyQ0gyX0lSUQlWUkM0MTczX0lSUSgzKQorI2RlZmluZSBWUkM0MTczX1BTMkNIMV9JUlEJVlJDNDE3M19JUlEoNCkKKyNkZWZpbmUgVlJDNDE3M19QSVVfSVJRCQlWUkM0MTczX0lSUSg1KQorI2RlZmluZSBWUkM0MTczX0FJVV9JUlEJCVZSQzQxNzNfSVJRKDYpCisjZGVmaW5lIFZSQzQxNzNfS0lVX0lSUQkJVlJDNDE3M19JUlEoNykKKyNkZWZpbmUgVlJDNDE3M19HSVVfSVJRCQlWUkM0MTczX0lSUSg4KQorI2RlZmluZSBWUkM0MTczX0FDOTdfSVJRCVZSQzQxNzNfSVJRKDkpCisjZGVmaW5lIFZSQzQxNzNfQUM5N0lOVDFfSVJRCVZSQzQxNzNfSVJRKDEwKQorLyogUkZVICovCisjZGVmaW5lIFZSQzQxNzNfRE9aRVBJVV9JUlEJVlJDNDE3M19JUlEoMTMpCisjZGVmaW5lIFZSQzQxNzNfSVJRX0xBU1QJVlJDNDE3M19ET1pFUElVX0lSUQorCisvKgorICogUENJIEkvTyBhY2Nlc3NlcworICovCisjaWZkZWYgQ09ORklHX1ZSQzQxNzMKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdnJjNDE3M19pb19vZmZzZXQ7CisKKyNkZWZpbmUgc2V0X3ZyYzQxNzNfaW9fb2Zmc2V0KG9mZnNldCkJZG8geyB2cmM0MTczX2lvX29mZnNldCA9IChvZmZzZXQpOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIHZyYzQxNzNfb3V0Yih2YWwscG9ydCkJCW91dGIoKHZhbCksIHZyYzQxNzNfaW9fb2Zmc2V0Kyhwb3J0KSkKKyNkZWZpbmUgdnJjNDE3M19vdXR3KHZhbCxwb3J0KQkJb3V0dygodmFsKSwgdnJjNDE3M19pb19vZmZzZXQrKHBvcnQpKQorI2RlZmluZSB2cmM0MTczX291dGwodmFsLHBvcnQpCQlvdXRsKCh2YWwpLCB2cmM0MTczX2lvX29mZnNldCsocG9ydCkpCisjZGVmaW5lIHZyYzQxNzNfb3V0Yl9wKHZhbCxwb3J0KQlvdXRiX3AoKHZhbCksIHZyYzQxNzNfaW9fb2Zmc2V0Kyhwb3J0KSkKKyNkZWZpbmUgdnJjNDE3M19vdXR3X3AodmFsLHBvcnQpCW91dHdfcCgodmFsKSwgdnJjNDE3M19pb19vZmZzZXQrKHBvcnQpKQorI2RlZmluZSB2cmM0MTczX291dGxfcCh2YWwscG9ydCkJb3V0bF9wKCh2YWwpLCB2cmM0MTczX2lvX29mZnNldCsocG9ydCkpCisKKyNkZWZpbmUgdnJjNDE3M19pbmIocG9ydCkJCWluYih2cmM0MTczX2lvX29mZnNldCsocG9ydCkpCisjZGVmaW5lIHZyYzQxNzNfaW53KHBvcnQpCQlpbncodnJjNDE3M19pb19vZmZzZXQrKHBvcnQpKQorI2RlZmluZSB2cmM0MTczX2lubChwb3J0KQkJaW5sKHZyYzQxNzNfaW9fb2Zmc2V0Kyhwb3J0KSkKKyNkZWZpbmUgdnJjNDE3M19pbmJfcChwb3J0KQkJaW5iX3AodnJjNDE3M19pb19vZmZzZXQrKHBvcnQpKQorI2RlZmluZSB2cmM0MTczX2lud19wKHBvcnQpCQlpbndfcCh2cmM0MTczX2lvX29mZnNldCsocG9ydCkpCisjZGVmaW5lIHZyYzQxNzNfaW5sX3AocG9ydCkJCWlubF9wKHZyYzQxNzNfaW9fb2Zmc2V0Kyhwb3J0KSkKKworI2RlZmluZSB2cmM0MTczX291dHNiKHBvcnQsYWRkcixjb3VudCkJb3V0c2IodnJjNDE3M19pb19vZmZzZXQrKHBvcnQpLChhZGRyKSwoY291bnQpKQorI2RlZmluZSB2cmM0MTczX291dHN3KHBvcnQsYWRkcixjb3VudCkJb3V0c3codnJjNDE3M19pb19vZmZzZXQrKHBvcnQpLChhZGRyKSwoY291bnQpKQorI2RlZmluZSB2cmM0MTczX291dHNsKHBvcnQsYWRkcixjb3VudCkJb3V0c2wodnJjNDE3M19pb19vZmZzZXQrKHBvcnQpLChhZGRyKSwoY291bnQpKQorCisjZGVmaW5lIHZyYzQxNzNfaW5zYihwb3J0LGFkZHIsY291bnQpCWluc2IodnJjNDE3M19pb19vZmZzZXQrKHBvcnQpLChhZGRyKSwoY291bnQpKQorI2RlZmluZSB2cmM0MTczX2luc3cocG9ydCxhZGRyLGNvdW50KQlpbnN3KHZyYzQxNzNfaW9fb2Zmc2V0Kyhwb3J0KSwoYWRkciksKGNvdW50KSkKKyNkZWZpbmUgdnJjNDE3M19pbnNsKHBvcnQsYWRkcixjb3VudCkJaW5zbCh2cmM0MTczX2lvX29mZnNldCsocG9ydCksKGFkZHIpLChjb3VudCkpCisKKyNlbHNlCisKKyNkZWZpbmUgc2V0X3ZyYzQxNzNfaW9fb2Zmc2V0KG9mZnNldCkJZG8ge30gd2hpbGUgKDApCisKKyNkZWZpbmUgdnJjNDE3M19vdXRiKHZhbCxwb3J0KQkJZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIHZyYzQxNzNfb3V0dyh2YWwscG9ydCkJCWRvIHt9IHdoaWxlICgwKQorI2RlZmluZSB2cmM0MTczX291dGwodmFsLHBvcnQpCQlkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgdnJjNDE3M19vdXRiX3AodmFsLHBvcnQpCWRvIHt9IHdoaWxlICgwKQorI2RlZmluZSB2cmM0MTczX291dHdfcCh2YWwscG9ydCkJZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIHZyYzQxNzNfb3V0bF9wKHZhbCxwb3J0KQlkbyB7fSB3aGlsZSAoMCkKKworI2RlZmluZSB2cmM0MTczX2luYihwb3J0KQkJMAorI2RlZmluZSB2cmM0MTczX2ludyhwb3J0KQkJMAorI2RlZmluZSB2cmM0MTczX2lubChwb3J0KQkJMAorI2RlZmluZSB2cmM0MTczX2luYl9wKHBvcnQpCQkwCisjZGVmaW5lIHZyYzQxNzNfaW53X3AocG9ydCkJCTAKKyNkZWZpbmUgdnJjNDE3M19pbmxfcChwb3J0KQkJMAorCisjZGVmaW5lIHZyYzQxNzNfb3V0c2IocG9ydCxhZGRyLGNvdW50KQlkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgdnJjNDE3M19vdXRzdyhwb3J0LGFkZHIsY291bnQpCWRvIHt9IHdoaWxlICgwKQorI2RlZmluZSB2cmM0MTczX291dHNsKHBvcnQsYWRkcixjb3VudCkJZG8ge30gd2hpbGUgKDApCisKKyNkZWZpbmUgdnJjNDE3M19pbnNiKHBvcnQsYWRkcixjb3VudCkJZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIHZyYzQxNzNfaW5zdyhwb3J0LGFkZHIsY291bnQpCWRvIHt9IHdoaWxlICgwKQorI2RlZmluZSB2cmM0MTczX2luc2wocG9ydCxhZGRyLGNvdW50KQlkbyB7fSB3aGlsZSAoMCkKKworI2VuZGlmCisKKy8qCisgKiBDbG9jayBNYXNrIFVuaXQKKyAqLwordHlwZWRlZiBlbnVtIHZyYzQxNzNfY2xvY2sgeworCVZSQzQxNzNfUElVX0NMT0NLLAorCVZSQzQxNzNfS0lVX0NMT0NLLAorCVZSQzQxNzNfQUlVX0NMT0NLLAorCVZSQzQxNzNfUFMyX0NIMV9DTE9DSywKKwlWUkM0MTczX1BTMl9DSDJfQ0xPQ0ssCisJVlJDNDE3M19VU0JVX1BDSV9DTE9DSywKKwlWUkM0MTczX0NBUkRVMV9QQ0lfQ0xPQ0ssCisJVlJDNDE3M19DQVJEVTJfUENJX0NMT0NLLAorCVZSQzQxNzNfQUM5N1VfUENJX0NMT0NLLAorCVZSQzQxNzNfVVNCVV80OE1Iel9DTE9DSywKKwlWUkM0MTczX0VYVF80OE1Iel9DTE9DSywKKwlWUkM0MTczXzQ4TUh6X0NMT0NLLAorfSB2cmM0MTczX2Nsb2NrX3Q7CisKKyNpZmRlZiBDT05GSUdfVlJDNDE3MworCitleHRlcm4gdm9pZCB2cmM0MTczX3N1cHBseV9jbG9jayh2cmM0MTczX2Nsb2NrX3QgY2xvY2spOworZXh0ZXJuIHZvaWQgdnJjNDE3M19tYXNrX2Nsb2NrKHZyYzQxNzNfY2xvY2tfdCBjbG9jayk7CisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgdm9pZCB2cmM0MTczX3N1cHBseV9jbG9jayh2cmM0MTczX2Nsb2NrX3QgY2xvY2spIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgdnJjNDE3M19tYXNrX2Nsb2NrKHZyYzQxNzNfY2xvY2tfdCBjbG9jaykge30KKworI2VuZGlmCisKKy8qCisgKiBJbnRlcnVwdCBDb250cm9sIFVuaXQKKyAqLworCisjZGVmaW5lIFZSQzQxNzNfUElVSU5UX0NPTU1BTkQJCTB4MDA0MAorI2RlZmluZSBWUkM0MTczX1BJVUlOVF9EQVRBCQkweDAwMjAKKyNkZWZpbmUgVlJDNDE3M19QSVVJTlRfUEFHRTEJCTB4MDAxMAorI2RlZmluZSBWUkM0MTczX1BJVUlOVF9QQUdFMAkJMHgwMDA4CisjZGVmaW5lIFZSQzQxNzNfUElVSU5UX0RBVEFMT1NUCQkweDAwMDQKKyNkZWZpbmUgVlJDNDE3M19QSVVJTlRfU1RBVFVTQ0hBTkdFCTB4MDAwMQorCisjaWZkZWYgQ09ORklHX1ZSQzQxNzMKKworZXh0ZXJuIHZvaWQgdnJjNDE3M19lbmFibGVfcGl1aW50KHVpbnQxNl90IG1hc2spOworZXh0ZXJuIHZvaWQgdnJjNDE3M19kaXNhYmxlX3BpdWludCh1aW50MTZfdCBtYXNrKTsKKworI2Vsc2UKKworc3RhdGljIGlubGluZSB2b2lkIHZyYzQxNzNfZW5hYmxlX3BpdWludCh1aW50MTZfdCBtYXNrKSB7fQorc3RhdGljIGlubGluZSB2b2lkIHZyYzQxNzNfZGlzYWJsZV9waXVpbnQodWludDE2X3QgbWFzaykge30KKworI2VuZGlmCisKKyNkZWZpbmUgVlJDNDE3M19BSVVJTlRfSU5QVVRfRE1BRU5ECTB4MDgwMAorI2RlZmluZSBWUkM0MTczX0FJVUlOVF9JTlBVVF9ETUFIQUxUCTB4MDQwMAorI2RlZmluZSBWUkM0MTczX0FJVUlOVF9JTlBVVF9EQVRBTE9TVAkweDAyMDAKKyNkZWZpbmUgVlJDNDE3M19BSVVJTlRfSU5QVVRfREFUQQkweDAxMDAKKyNkZWZpbmUgVlJDNDE3M19BSVVJTlRfT1VUUFVUX0RNQUVORAkweDAwMDgKKyNkZWZpbmUgVlJDNDE3M19BSVVJTlRfT1VUUFVUX0RNQUhBTFQJMHgwMDA0CisjZGVmaW5lIFZSQzQxNzNfQUlVSU5UX09VVFBVVF9OT0RBVEEJMHgwMDAyCisKKyNpZmRlZiBDT05GSUdfVlJDNDE3MworCitleHRlcm4gdm9pZCB2cmM0MTczX2VuYWJsZV9haXVpbnQodWludDE2X3QgbWFzayk7CitleHRlcm4gdm9pZCB2cmM0MTczX2Rpc2FibGVfYWl1aW50KHVpbnQxNl90IG1hc2spOworCisjZWxzZQorCitzdGF0aWMgaW5saW5lIHZvaWQgdnJjNDE3M19lbmFibGVfYWl1aW50KHVpbnQxNl90IG1hc2spIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgdnJjNDE3M19kaXNhYmxlX2FpdWludCh1aW50MTZfdCBtYXNrKSB7fQorCisjZW5kaWYKKworI2RlZmluZSBWUkM0MTczX0tJVUlOVF9EQVRBTE9TVAkJMHgwMDA0CisjZGVmaW5lIFZSQzQxNzNfS0lVSU5UX0RBVEFSRUFEWQkweDAwMDIKKyNkZWZpbmUgVlJDNDE3M19LSVVJTlRfU0NBTgkJMHgwMDAxCisKKyNpZmRlZiBDT05GSUdfVlJDNDE3MworCitleHRlcm4gdm9pZCB2cmM0MTczX2VuYWJsZV9raXVpbnQodWludDE2X3QgbWFzayk7CitleHRlcm4gdm9pZCB2cmM0MTczX2Rpc2FibGVfa2l1aW50KHVpbnQxNl90IG1hc2spOworCisjZWxzZQorCitzdGF0aWMgaW5saW5lIHZvaWQgdnJjNDE3M19lbmFibGVfa2l1aW50KHVpbnQxNl90IG1hc2spIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgdnJjNDE3M19kaXNhYmxlX2tpdWludCh1aW50MTZfdCBtYXNrKSB7fQorCisjZW5kaWYKKworLyoKKyAqIEdlbmVyYWwtUHVycG9zZSBJL08gVW5pdAorICovCit0eXBlZGVmIGVudW0gdnJjNDE3M19mdW5jdGlvbiB7CisJUFMyX0NIQU5ORUwxLAorCVBTMl9DSEFOTkVMMiwKKwlUT1VDSFBBTkVMLAorCUtFWUJPQVJEXzhTQ0FOTElORVMsCisJS0VZQk9BUkRfMTBTQ0FOTElORVMsCisJS0VZQk9BUkRfMTJTQ0FOTElORVMsCisJR1BJT18wXzE1UElOUywKKwlHUElPXzE2XzIwUElOUywKK30gdnJjNDE3M19mdW5jdGlvbl90OworCisjaWZkZWYgQ09ORklHX1ZSQzQxNzMKKworZXh0ZXJuIHZvaWQgdnJjNDE3M19zZWxlY3RfZnVuY3Rpb24odnJjNDE3M19mdW5jdGlvbl90IGZ1bmN0aW9uKTsKKworI2Vsc2UKKworc3RhdGljIGlubGluZSB2b2lkIHZyYzQxNzNfc2VsZWN0X2Z1bmN0aW9uKHZyYzQxNzNfZnVuY3Rpb25fdCBmdW5jdGlvbikge30KKworI2VuZGlmCisKKyNlbmRpZiAvKiBfX05FQ19WUkM0MTczX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvdnI0MXh4L3dvcmtwYWQuaCBiL2luY2x1ZGUvYXNtLW1pcHMvdnI0MXh4L3dvcmtwYWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmUwMWI0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy92cjQxeHgvd29ya3BhZC5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiAgd29ya3BhZC5oLCBJbmNsdWRlIGZpbGUgZm9yIElCTSBXb3JrUGFkIHo1MC4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDQgIFlvaWNoaSBZdWFzYSA8eXVhc2FAaGguaWlqNHUub3IuanA+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKyNpZm5kZWYgX19JQk1fV09SS1BBRF9ICisjZGVmaW5lIF9fSUJNX1dPUktQQURfSAorCisjaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgorI2luY2x1ZGUgPGFzbS92cjQxeHgvdnI0MXh4Lmg+CisKKy8qCisgKiBCb2FyZCBzcGVjaWZpYyBhZGRyZXNzIG1hcHBpbmcKKyAqLworI2RlZmluZSBWUjQxWFhfSVNBX01FTV9CQVNFCQkweDEwMDAwMDAwCisjZGVmaW5lIFZSNDFYWF9JU0FfTUVNX1NJWkUJCTB4MDQwMDAwMDAKKworLyogVlI0MVhYX0lTQV9JT19CQVNFIGluY2x1ZGVzIG9mZnNldCBmcm9tIHJlYWwgYmFzZS4gKi8KKyNkZWZpbmUgVlI0MVhYX0lTQV9JT19CQVNFCQkweDE1MDAwMDAwCisjZGVmaW5lIFZSNDFYWF9JU0FfSU9fU0laRQkJMHgwMzAwMDAwMAorCisjZGVmaW5lIElTQV9CVVNfSU9fQkFTRQkJCTAKKyNkZWZpbmUgSVNBX0JVU19JT19TSVpFCQkJVlI0MVhYX0lTQV9JT19TSVpFCisKKyNkZWZpbmUgSU9fUE9SVF9CQVNFCQkJS1NFRzFBRERSKFZSNDFYWF9JU0FfSU9fQkFTRSkKKyNkZWZpbmUgSU9fUE9SVF9SRVNPVVJDRV9TVEFSVAkJSVNBX0JVU19JT19CQVNFCisjZGVmaW5lIElPX1BPUlRfUkVTT1VSQ0VfRU5ECQkoSVNBX0JVU19JT19CQVNFICsgSVNBX0JVU19JT19TSVpFIC0gMSkKKworI2VuZGlmIC8qIF9fSUJNX1dPUktQQURfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy93YXIuaCBiL2luY2x1ZGUvYXNtLW1pcHMvd2FyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRhNzA0MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvd2FyLmgKQEAgLTAsMCArMSwyMjQgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDQgYnkgUmFsZiBCYWVjaGxlCisgKi8KKyNpZm5kZWYgX0FTTV9XQVJfSAorI2RlZmluZSBfQVNNX1dBUl9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworLyoKKyAqIEFub3RoZXIgUjQ2MDAgZXJyYXR1bS4gIER1ZSB0byB0aGUgbGFjayBvZiBlcnJhdGEgaW5mb3JtYXRpb24gdGhlIGV4YWN0CisgKiB0ZWNobmljYWwgZGV0YWlscyBhcmVuJ3Qga25vd24uICBJJ3ZlIGV4cGVyaW1lbnRhbGx5IGZvdW5kIHRoYXQgZGlzYWJsaW5nCisgKiBpbnRlcnJ1cHRzIGR1cmluZyBpbmRleGVkIEktY2FjaGUgZmx1c2hlcyBzZWVtcyB0byBiZSBzdWZmaWNpZW50IHRvIGRlYWwKKyAqIHdpdGggdGhlIGlzc3VlLgorICoKKyAqICNkZWZpbmUgUjQ2MDBfVjFfSU5ERVhfSUNBQ0hFT1BfV0FSIDEKKyAqLworCisvKgorICogUGxlYXN1cmVzIG9mIHRoZSBSNDYwMCBWMS54LiAgQ2l0ZSBmcm9tIHRoZSBJRFQgUjQ2MDAgVjEuNyBlcnJhdGE6CisgKgorICogIDE4LiBUaGUgQ0FDSEUgaW5zdHJ1Y3Rpb25zIEhpdF9Xcml0ZWJhY2tfSW52YWxpZGF0ZV9ELCBIaXRfV3JpdGViYWNrX0QsCisgKiAgICAgIEhpdF9JbnZhbGlkYXRlX0QgYW5kIENyZWF0ZV9EaXJ0eV9FeGNsX0Qgc2hvdWxkIG9ubHkgYmUKKyAqICAgICAgZXhlY3V0ZWQgaWYgdGhlcmUgaXMgbm8gb3RoZXIgZGNhY2hlIGFjdGl2aXR5LiBJZiB0aGUgZGNhY2hlIGlzCisgKiAgICAgIGFjY2Vzc2VkIGZvciBhbm90aGVyIGluc3RydWN0aW9uIGltbWVpZGF0ZWx5IHByZWNlZGluZyB3aGVuIHRoZXNlCisgKiAgICAgIGNhY2hlIGluc3RydWN0aW9ucyBhcmUgZXhlY3V0aW5nLCBpdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBkY2FjaGUKKyAqICAgICAgdGFnIG1hdGNoIG91dHB1dHMgdXNlZCBieSB0aGVzZSBjYWNoZSBpbnN0cnVjdGlvbnMgd2lsbCBiZQorICogICAgICBpbmNvcnJlY3QuIFRoZXNlIGNhY2hlIGluc3RydWN0aW9ucyBzaG91bGQgYmUgcHJlY2VkZWQgYnkgYXQgbGVhc3QKKyAqICAgICAgZm91ciBpbnN0cnVjdGlvbnMgdGhhdCBhcmUgbm90IGFueSBraW5kIG9mIGxvYWQgb3Igc3RvcmUKKyAqICAgICAgaW5zdHJ1Y3Rpb24uCisgKgorICogICAgICBUaGlzIGlzIG5vdCBhbGxvd2VkOiAgICBsdworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3AKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9wCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZSAgICAgICBIaXRfV3JpdGViYWNrX0ludmFsaWRhdGVfRAorICoKKyAqICAgICAgVGhpcyBpcyBhbGxvd2VkOiAgICAgICAgbHcKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9wCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3AKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9wCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlICAgICAgIEhpdF9Xcml0ZWJhY2tfSW52YWxpZGF0ZV9ECisgKgorICogI2RlZmluZSBSNDYwMF9WMV9ISVRfQ0FDSEVPUF9XQVIgMQorICovCisKKworLyoKKyAqIFdyaXRlYmFjayBhbmQgaW52YWxpZGF0ZSB0aGUgcHJpbWFyeSBjYWNoZSBkY2FjaGUgYmVmb3JlIERNQS4KKyAqCisgKiBSNDYwMCB2Mi4wIGJ1ZzogIlRoZSBDQUNIRSBpbnN0cnVjdGlvbnMgSGl0X1dyaXRlYmFja19JbnZfRCwKKyAqIEhpdF9Xcml0ZWJhY2tfRCwgSGl0X0ludmFsaWRhdGVfRCBhbmQgQ3JlYXRlX0RpcnR5X0V4Y2x1c2l2ZV9EIHdpbGwgb25seQorICogb3BlcmF0ZSBjb3JyZWN0bHkgaWYgdGhlIGludGVybmFsIGRhdGEgY2FjaGUgcmVmaWxsIGJ1ZmZlciBpcyBlbXB0eS4gIFRoZXNlCisgKiBDQUNIRSBpbnN0cnVjdGlvbnMgc2hvdWxkIGJlIHNlcGFyYXRlZCBmcm9tIGFueSBwb3RlbnRpYWwgZGF0YSBjYWNoZSBtaXNzCisgKiBieSBhIGxvYWQgaW5zdHJ1Y3Rpb24gdG8gYW4gdW5jYWNoZWQgYWRkcmVzcyB0byBlbXB0eSB0aGUgcmVzcG9uc2UgYnVmZmVyLiIKKyAqIChSZXZpc2lvbiAyLjAgZGV2aWNlIGVycmF0YSBmcm9tIElEVCBhdmFpbGFibGUgb24gaHR0cDovL3d3dy5pZHQuY29tLworICogaW4gLnBkZiBmb3JtYXQuKQorICoKKyAqICNkZWZpbmUgUjQ2MDBfVjJfSElUX0NBQ0hFT1BfV0FSIDEKKyAqLworCisvKgorICogUjQ2MDAgQ1BVIG1vZHVsZXMgZm9yIHRoZSBJbmR5IGNvbWUgd2l0aCBib3RoIFYxLjcgYW5kIFYyLjAgcHJvY2Vzc29ycy4KKyAqLworI2lmZGVmIENPTkZJR19TR0lfSVAyMgorCisjZGVmaW5lIFI0NjAwX1YxX0lOREVYX0lDQUNIRU9QX1dBUgkxCisjZGVmaW5lIFI0NjAwX1YxX0hJVF9DQUNIRU9QX1dBUgkxCisjZGVmaW5lIFI0NjAwX1YyX0hJVF9DQUNIRU9QX1dBUgkxCisKKyNlbmRpZgorCisvKgorICogQnV0IHRoZSBSTTIwMEMgc2VlbXMgdG8gaGF2ZSBiZWVuIHNoaXBwZWQgb25seSB3aXRoIFYyLjAgUjQ2MDBzCisgKi8KKyNpZmRlZiBDT05GSUdfU05JX1JNMjAwX1BDSQorCisjZGVmaW5lIFI0NjAwX1YyX0hJVF9DQUNIRU9QX1dBUgkxCisKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9SNTQzMgorCisvKgorICogV2hlbiBhbiBpbnRlcnJ1cHQgaGFwcGVucyBvbiBhIENQMCByZWdpc3RlciByZWFkIGluc3RydWN0aW9uLCBDUFUgbWF5CisgKiBsb2NrIHVwIG9yIHJlYWQgY29ycnVwdGVkIHZhbHVlcyBvZiBDUDAgcmVnaXN0ZXJzIGFmdGVyIGl0IGVudGVycworICogdGhlIGV4Y2VwdGlvbiBoYW5kbGVyLgorICoKKyAqIFRoaXMgd29ya2Fyb3VuZCBtYWtlcyBzdXJlIHRoYXQgd2UgcmVhZCBhICJzYWZlIiBDUDAgcmVnaXN0ZXIgYXMgdGhlCisgKiBmaXJzdCB0aGluZyBpbiB0aGUgZXhjZXB0aW9uIGhhbmRsZXIsIHdoaWNoIGJyZWFrcyBvbmUgb2YgdGhlCisgKiBwcmUtY29uZGl0aW9ucyBmb3IgdGhpcyBwcm9ibGVtLgorICovCisjZGVmaW5lCVI1NDMyX0NQMF9JTlRFUlJVUFRfV0FSIDEKKworI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19TQjFfUEFTU18xX1dPUktBUk9VTkRTKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfU0IxX1BBU1NfMl9XT1JLQVJPVU5EUykKKworLyoKKyAqIFdvcmthcm91bmQgZm9yIHRoZSBTaWJ5dGUgTTMgZXJyYXRhIHRoZSB0ZXh0IG9mIHdoaWNoIGNhbiBiZSBmb3VuZCBhdAorICoKKyAqICAgaHR0cDovL3NpYnl0ZS5icm9hZGNvbS5jb20vaHcvYmNtMTI1MC9kb2NzL3Bhc3MyZXJyYXRhLnR4dAorICoKKyAqIFRoaXMgd2lsbCBlbmFibGUgdGhlIHVzZSBvZiBhIHNwZWNpYWwgVExCIHJlZmlsbCBoYW5kbGVyIHdoaWNoIGRvZXMgYQorICogY29uc2lzdGVuY3kgY2hlY2sgb24gdGhlIGluZm9ybWF0aW9uIGluIGMwX2JhZHZhZGRyIGFuZCBjMF9lbnRyeWhpIGFuZAorICogd2lsbCBqdXN0IHJldHVybiBhbmQgdGFrZSB0aGUgZXhjZXB0aW9uIGFnYWluIGlmIHRoZSBpbmZvcm1hdGlvbiB3YXMKKyAqIGZvdW5kIHRvIGJlIGluY29uc2lzdGVudC4KKyAqLworI2RlZmluZSBCQ00xMjUwX00zX1dBUiAxCisKKy8qIAorICogVGhpcyBpcyBhIERVQVJUIHdvcmthcm91bmQgcmVsYXRlZCB0byBnbGl0Y2hlcyBhcm91bmQgcmVnaXN0ZXIgYWNjZXNzZXMKKyAqLworI2RlZmluZSBTSUJZVEVfMTk1Nl9XQVIgMQorCisjZW5kaWYKKworLyoKKyAqIEZpbGwgYnVmZmVycyBub3QgZmx1c2hlZCBvbiBDQUNIRSBpbnN0cnVjdGlvbnMKKyAqIAorICogSGl0X0ludmFsaWRhdGVfSSBjYWNoZW9wcyBpbnZhbGlkYXRlIGFuIGljYWNoZSBsaW5lIGJ1dCB0aGUgcmVmaWxsCisgKiBmb3IgdGhhdCBsaW5lIGNhbiBnZXQgc3RhbGUgZGF0YSBmcm9tIHRoZSBmaWxsIGJ1ZmZlciBpbnN0ZWFkIG9mCisgKiBhY2Nlc3NpbmcgbWVtb3J5IGlmIHRoZSBwcmV2aW91cyBpY2FjaGUgbWlzcyB3YXMgYWxzbyB0byB0aGF0IGxpbmUuCisgKgorICogV29ya2Fyb3VuZDogZ2VuZXJhdGUgYW4gaWNhY2hlIHJlZmlsbCBmcm9tIGEgZGlmZmVyZW50IGxpbmUKKyAqCisgKiBBZmZlY3RzOgorICogIE1JUFMgNEsJCVJUTCByZXZpc2lvbiA8My4wLCBQUklEIHJldmlzaW9uIDw0CisgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19NSVBTX01BTFRBKSB8fCBkZWZpbmVkKENPTkZJR19NSVBTX0FUTEFTKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfTUlQU19TRUFEKQorI2RlZmluZSBNSVBTNEtfSUNBQ0hFX1JFRklMTF9XQVIgMQorI2VuZGlmCisKKy8qCisgKiBNaXNzaW5nIGltcGxpY2l0IGZvcmNlZCBmbHVzaCBvZiBldmljdGlvbnMgY2F1c2VkIGJ5IENBQ0hFCisgKiBpbnN0cnVjdGlvbgorICoKKyAqIEV2aWN0aW9ucyBjYXVzZWQgYnkgYSBDQUNIRSBpbnN0cnVjdGlvbnMgYXJlIG5vdCBmb3JjZWQgb24gdG8gdGhlCisgKiBidXMuIFRoZSBCSVUgZ2l2ZXMgaGlnaGVyIHByaW9yaXR5IHRvIGZldGNoZXMgdGhhbiB0byB0aGUgZGF0YSBmcm9tCisgKiB0aGUgZXZpY3Rpb24gYnVmZmVyIGFuZCBubyBjb2xsaXNpb24gZGV0ZWN0aW9uIGlzIHBlcmZvcm1lZCBiZXR3ZWVuCisgKiBmZXRjaGVzIGFuZCBwZW5kaW5nIGRhdGEgZnJvbSB0aGUgZXZpY3Rpb24gYnVmZmVyLgorICoKKyAqIFdvcmthcm91bmQ6IEV4ZWN1dGUgYSBTWU5DIGluc3RydWN0aW9uIGFmdGVyIHRoZSBjYWNoZSBpbnN0cnVjdGlvbgorICoKKyAqIEFmZmVjdHM6CisgKiAgIE1JUFMgNUtjLDVLZglSVEwgcmV2aXNpb24gPDIuMywgUFJJRCByZXZpc2lvbiA8OAorICogICBNSVBTIDIwS2MJCVJUTCByZXZpc2lvbiA8NC4wLCBQUklEIHJldmlzaW9uIDw/CisgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19NSVBTX01BTFRBKSB8fCBkZWZpbmVkKENPTkZJR19NSVBTX0FUTEFTKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfTUlQU19TRUFEKQorI2RlZmluZSBNSVBTX0NBQ0hFX1NZTkNfV0FSIDEKKyNlbmRpZgorCisvKgorICogRnJvbSBUWDQ5L0gyIG1hbnVhbDogIklmIHRoZSBpbnN0cnVjdGlvbiAoaS5lLiBDQUNIRSkgaXMgaXNzdWVkIGZvcgorICogdGhlIGxpbmUgd2hpY2ggdGhpcyBpbnN0cnVjdGlvbiBpdHNlbGYgZXhpc3RzLCB0aGUgZm9sbG93aW5nCisgKiBvcGVyYXRpb24gaXMgbm90IGd1YXJhbnRlZWQuIgorICoKKyAqIFdvcmthcm91bmQ6IGRvIHR3byBwaGFzZSBmbHVzaGluZyBmb3IgSW5kZXhfSW52YWxpZGF0ZV9JCisgKi8KKyNpZmRlZiBDT05GSUdfQ1BVX1RYNDlYWAorI2RlZmluZSBUWDQ5WFhfSUNBQ0hFX0lOREVYX0lOVl9XQVIgMQorI2VuZGlmCisKKy8qCisgKiBPbiB0aGUgUk05MDAwIHRoZXJlIGlzIGEgcHJvYmxlbSB3aGljaCBtYWtlcyB0aGUgQ3JlYXRlRGlydHlFeGNsdXNpdmUKKyAqIGNhY2hlIG9wZXJhdGlvbiB1bnVzYWJsZSBvbiBTTVAgc3lzdGVtcy4KKyAqLworI2lmIGRlZmluZWQoQ09ORklHX01PTUVOQ09fSkFHVUFSX0FUWCkgfHwgZGVmaW5lZChDT05GSUdfUE1DX1lPU0VNSVRFKQorI2RlZmluZSAgUk05MDAwX0NERVhfU01QX1dBUgkJMQorI2VuZGlmCisKKy8qCisgKiBPTiB0aGUgUjEwMDAwIHVwdG8gdmVyc2lvbiAyLjYgKG5vdCBzdXJlIGFib3V0IDIuNykgdGhlcmUgaXMgYSBidWcgdGhhdAorICogbWF5IGNhdXNlIGxsIC8gc2MgYW5kIGxsZCAvIHNjZCBzZXF1ZW5jZXMgdG8gZXhlY3V0ZSBub24tYXRvbWljYWxseS4KKyAqLworI2lmZGVmIENPTkZJR19TR0lfSVAyNworI2RlZmluZSBSMTAwMDBfTExTQ19XQVIgMQorI2VuZGlmCisKKy8qCisgKiBXb3JrYXJvdW5kcyBkZWZhdWx0IHRvIG9mZgorICovCisjaWZuZGVmIFI0NjAwX1YxX0lOREVYX0lDQUNIRU9QX1dBUgorI2RlZmluZSBSNDYwMF9WMV9JTkRFWF9JQ0FDSEVPUF9XQVIJMAorI2VuZGlmCisjaWZuZGVmIFI0NjAwX1YxX0hJVF9DQUNIRU9QX1dBUgorI2RlZmluZSBSNDYwMF9WMV9ISVRfQ0FDSEVPUF9XQVIJMAorI2VuZGlmCisjaWZuZGVmIFI0NjAwX1YyX0hJVF9DQUNIRU9QX1dBUgorI2RlZmluZSBSNDYwMF9WMl9ISVRfQ0FDSEVPUF9XQVIJMAorI2VuZGlmCisjaWZuZGVmIFI1NDMyX0NQMF9JTlRFUlJVUFRfV0FSCisjZGVmaW5lIFI1NDMyX0NQMF9JTlRFUlJVUFRfV0FSCQkwCisjZW5kaWYKKyNpZm5kZWYgQkNNMTI1MF9NM19XQVIKKyNkZWZpbmUgQkNNMTI1MF9NM19XQVIJCQkwCisjZW5kaWYKKyNpZm5kZWYgU0lCWVRFXzE5NTZfV0FSCisjZGVmaW5lIFNJQllURV8xOTU2X1dBUgkJCTAKKyNlbmRpZgorI2lmbmRlZiBNSVBTNEtfSUNBQ0hFX1JFRklMTF9XQVIKKyNkZWZpbmUgTUlQUzRLX0lDQUNIRV9SRUZJTExfV0FSCTAKKyNlbmRpZgorI2lmbmRlZiBNSVBTX0NBQ0hFX1NZTkNfV0FSCisjZGVmaW5lIE1JUFNfQ0FDSEVfU1lOQ19XQVIJCTAKKyNlbmRpZgorI2lmbmRlZiBUWDQ5WFhfSUNBQ0hFX0lOREVYX0lOVl9XQVIKKyNkZWZpbmUgVFg0OVhYX0lDQUNIRV9JTkRFWF9JTlZfV0FSCTAKKyNlbmRpZgorI2lmbmRlZiBSTTkwMDBfQ0RFWF9TTVBfV0FSCisjZGVmaW5lIFJNOTAwMF9DREVYX1NNUF9XQVIJCTAKKyNlbmRpZgorI2lmbmRlZiBSMTAwMDBfTExTQ19XQVIKKyNkZWZpbmUgUjEwMDAwX0xMU0NfV0FSCQkJMAorI2VuZGlmCisKKyNlbmRpZiAvKiBfQVNNX1dBUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3dhdGNoLmggYi9pbmNsdWRlL2FzbS1taXBzL3dhdGNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFhOTBjYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvd2F0Y2guaApAQCAtMCwwICsxLDM1IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAyMDAwLCAyMDAxIGJ5IFJhbGYgQmFlY2hsZQorICovCisjaWZuZGVmIF9BU01fV0FUQ0hfSAorI2RlZmluZSBfQVNNX1dBVENIX0gKKworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKworLyoKKyAqIFR5cGVzIG9mIHJlZmVyZW5jZSBmb3Igd2F0Y2hfc2V0KCkKKyAqLworZW51bSB3cmVmX3R5cGUgeworCXdyX3NhdmUgPSAxLAorCXdyX2xvYWQgPSAyCit9OworCitleHRlcm4gYXNtbGlua2FnZSB2b2lkIF9fd2F0Y2hfc2V0KHVuc2lnbmVkIGxvbmcgYWRkciwgZW51bSB3cmVmX3R5cGUgcmVmKTsKK2V4dGVybiBhc21saW5rYWdlIHZvaWQgX193YXRjaF9jbGVhcih2b2lkKTsKK2V4dGVybiBhc21saW5rYWdlIHZvaWQgX193YXRjaF9yZWVuYWJsZSh2b2lkKTsKKworI2RlZmluZSB3YXRjaF9zZXQoYWRkciwgcmVmKQkJCQkJXAorCWlmIChjcHVfaGFzX3dhdGNoKQkJCQkJXAorCQlfX3dhdGNoX3NldChhZGRyLCByZWYpCisjZGVmaW5lIHdhdGNoX2NsZWFyKCkJCQkJCQlcCisJaWYgKGNwdV9oYXNfd2F0Y2gpCQkJCQlcCisJCV9fd2F0Y2hfY2xlYXIoKQorI2RlZmluZSB3YXRjaF9yZWVuYWJsZSgpCQkJCQlcCisJaWYgKGNwdV9oYXNfd2F0Y2gpCQkJCQlcCisJCV9fd2F0Y2hfcmVlbmFibGUoKQorCisjZW5kaWYgLyogX0FTTV9XQVRDSF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3diZmx1c2guaCBiL2luY2x1ZGUvYXNtLW1pcHMvd2JmbHVzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzYmVmNTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3diZmx1c2guaApAQCAtMCwwICsxLDM1IEBACisvKgorICogSGVhZGVyIGZpbGUgZm9yIHVzaW5nIHRoZSB3YmZsdXNoIHJvdXRpbmUKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTggSGFyYWxkIEtvZXJmZ2VuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgTWFjaWVqIFcuIFJvenlja2kKKyAqLworI2lmbmRlZiBfQVNNX1dCRkxVU0hfSAorI2RlZmluZSBfQVNNX1dCRkxVU0hfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpZmRlZiBDT05GSUdfQ1BVX0hBU19XQgorCitleHRlcm4gdm9pZCAoKl9fd2JmbHVzaCkodm9pZCk7CitleHRlcm4gdm9pZCB3YmZsdXNoX3NldHVwKHZvaWQpOworCisjZGVmaW5lIHdiZmx1c2goKQkJCVwKKwlkbyB7CQkJCVwKKwkJX19zeW5jKCk7CQlcCisJCV9fd2JmbHVzaCgpOwkJXAorCX0gd2hpbGUgKDApCisKKyNlbHNlIC8qICFDT05GSUdfQ1BVX0hBU19XQiAqLworCisjZGVmaW5lIHdiZmx1c2hfc2V0dXAoKSBkbyB7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgd2JmbHVzaCgpIGZhc3RfaW9iKCkKKworI2VuZGlmIC8qICFDT05GSUdfQ1BVX0hBU19XQiAqLworCisjZW5kaWYgLyogX0FTTV9XQkZMVVNIX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMveG9yLmggYi9pbmNsdWRlL2FzbS1taXBzL3hvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4MmViMTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3hvci5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy94b3IuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMveHRhbGsveHRhbGsuaCBiL2luY2x1ZGUvYXNtLW1pcHMveHRhbGsveHRhbGsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTYwZjI3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy94dGFsay94dGFsay5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiB4dGFsay5oIC0tIHBsYXRmb3JtLWluZGVwZW5kZW50IGNyb3NzdGFsayBpbnRlcmZhY2UsIGRlcml2ZWQgZnJvbQorICogSVJJWCA8c3lzL1BDSS9icmlkZ2UuaD4sIHJldmlzaW9uIDEuMzguCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1IC0gMTk5NywgMTk5OSBTaWxjb24gR3JhcGhpY3MsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMTk5OSBSYWxmIEJhZWNobGUgKHJhbGZAZ251Lm9yZykKKyAqLworI2lmbmRlZiBfQVNNX1hUQUxLX1hUQUxLX0gKKyNkZWZpbmUgX0FTTV9YVEFMS19YVEFMS19ICisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisvKgorICogVXNlci1sZXZlbCBkZXZpY2UgZHJpdmVyIHZpc2libGUgdHlwZXMKKyAqLwordHlwZWRlZiBjaGFyICAgICAgICAgICAgeHdpZGdldG51bV90OwkvKiB4dGFsayB3aWRnZXQgbnVtYmVyICAoMC4uMTUpICovCisKKyNkZWZpbmUgWFdJREdFVF9OT05FCQktMQorCit0eXBlZGVmIGludCB4d2lkZ2V0X3BhcnRfbnVtX3Q7CS8qIHh0YWxrIHdpZGdldCBwYXJ0IG51bWJlciAqLworCisjZGVmaW5lIFhXSURHRVRfUEFSVF9OVU1fTk9ORQktMQorCit0eXBlZGVmIGludCAgICAgICAgICAgICB4d2lkZ2V0X3Jldl9udW1fdDsJLyogeHRhbGsgd2lkZ2V0IHJldmlzaW9uIG51bWJlciAqLworCisjZGVmaW5lIFhXSURHRVRfUkVWX05VTV9OT05FCS0xCisKK3R5cGVkZWYgaW50IHh3aWRnZXRfbWZnX251bV90OwkvKiB4dGFsayB3aWRnZXQgbWFudWZhY3R1cmluZyBJRCAqLworCisjZGVmaW5lIFhXSURHRVRfTUZHX05VTV9OT05FCS0xCisKK3R5cGVkZWYgc3RydWN0IHh0YWxrX3Bpb21hcF9zICp4dGFsa19waW9tYXBfdDsKKworLyogSXQgaXMgb2Z0ZW4gY29udmVuaWVudCB0byBmb2xkIHRoZSBYSU8gdGFyZ2V0IHBvcnQKKyAqIG51bWJlciBpbnRvIHRoZSBYSU8gYWRkcmVzcy4KKyAqLworI2RlZmluZQlYSU9fTk9XSEVSRQkoMHhGRkZGRkZGRkZGRkZGRkZGdWxsKQorI2RlZmluZQlYSU9fQUREUl9CSVRTCSgweDAwMDBGRkZGRkZGRkZGRkZ1bGwpCisjZGVmaW5lCVhJT19QT1JUX0JJVFMJKDB4RjAwMDAwMDAwMDAwMDAwMHVsbCkKKyNkZWZpbmUJWElPX1BPUlRfU0hJRlQJKDYwKQorCisjZGVmaW5lCVhJT19QQUNLRUQoeCkJKCgoeCkmWElPX1BPUlRfQklUUykgIT0gMCkKKyNkZWZpbmUJWElPX0FERFIoeCkJKCh4KSZYSU9fQUREUl9CSVRTKQorI2RlZmluZQlYSU9fUE9SVCh4KQkoKHh3aWRnZXRudW1fdCkoKCh4KSZYSU9fUE9SVF9CSVRTKSA+PiBYSU9fUE9SVF9TSElGVCkpCisjZGVmaW5lCVhJT19QQUNLKHAsbykJKCgoKHVpbnQ2NF90KShwKSk8PFhJT19QT1JUX1NISUZUKSB8ICgobykmWElPX0FERFJfQklUUykpCisKKyNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiBfQVNNX1hUQUxLX1hUQUxLX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMveHRhbGsveHdpZGdldC5oIGIvaW5jbHVkZS9hc20tbWlwcy94dGFsay94d2lkZ2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRhMTNkNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMveHRhbGsveHdpZGdldC5oCkBAIC0wLDAgKzEsMTY3IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogeHdpZGdldC5oIC0gZ2VuZXJpYyBjcm9zc3RhbGsgd2lkZ2V0IGhlYWRlciBmaWxlLCBkZXJpdmVkIGZyb20gSVJJWAorICogPHN5cy94dGFsay94dGFsa3dpZGdldC5oPiwgcmV2aXNpb24gMS4zMi4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTkgU2lsY29uIEdyYXBoaWNzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgUmFsZiBCYWVjaGxlIChyYWxmQGdudS5vcmcpCisgKi8KKyNpZm5kZWYgX0FTTV9YVEFMS19YV0lER0VUX0gKKyNkZWZpbmUgX0FTTV9YVEFMS19YV0lER0VUX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3h0YWxrL3h0YWxrLmg+CisKKyNkZWZpbmUgV0lER0VUX0lECQkJMHgwNAorI2RlZmluZSBXSURHRVRfU1RBVFVTCQkJMHgwYworI2RlZmluZSBXSURHRVRfRVJSX1VQUEVSX0FERFIJCTB4MTQKKyNkZWZpbmUgV0lER0VUX0VSUl9MT1dFUl9BRERSCQkweDFjCisjZGVmaW5lIFdJREdFVF9DT05UUk9MCQkJMHgyNAorI2RlZmluZSBXSURHRVRfUkVRX1RJTUVPVVQJCTB4MmMKKyNkZWZpbmUgV0lER0VUX0lOVERFU1RfVVBQRVJfQUREUgkweDM0CisjZGVmaW5lIFdJREdFVF9JTlRERVNUX0xPV0VSX0FERFIJMHgzYworI2RlZmluZSBXSURHRVRfRVJSX0NNRF9XT1JECQkweDQ0CisjZGVmaW5lIFdJREdFVF9MTFBfQ0ZHCQkJMHg0YworI2RlZmluZSBXSURHRVRfVEZMVVNICQkJMHg1NAorCisvKiBXSURHRVRfSUQgKi8KKyNkZWZpbmUgV0lER0VUX1JFVl9OVU0JCQkweGYwMDAwMDAwCisjZGVmaW5lIFdJREdFVF9QQVJUX05VTQkJCTB4MGZmZmYwMDAKKyNkZWZpbmUgV0lER0VUX01GR19OVU0JCQkweDAwMDAwZmZlCisjZGVmaW5lIFdJREdFVF9SRVZfTlVNX1NIRlQJCTI4CisjZGVmaW5lIFdJREdFVF9QQVJUX05VTV9TSEZUCQkxMgorI2RlZmluZSBXSURHRVRfTUZHX05VTV9TSEZUCQkxCisKKyNkZWZpbmUgWFdJREdFVF9QQVJUX05VTSh3aWRnZXRpZCkgKCgod2lkZ2V0aWQpICYgV0lER0VUX1BBUlRfTlVNKSA+PiBXSURHRVRfUEFSVF9OVU1fU0hGVCkKKyNkZWZpbmUgWFdJREdFVF9SRVZfTlVNKHdpZGdldGlkKSAoKCh3aWRnZXRpZCkgJiBXSURHRVRfUkVWX05VTSkgPj4gV0lER0VUX1JFVl9OVU1fU0hGVCkKKyNkZWZpbmUgWFdJREdFVF9NRkdfTlVNKHdpZGdldGlkKSAoKCh3aWRnZXRpZCkgJiBXSURHRVRfTUZHX05VTSkgPj4gV0lER0VUX01GR19OVU1fU0hGVCkKKworLyogV0lER0VUX1NUQVRVUyAqLworI2RlZmluZSBXSURHRVRfTExQX1JFQ19DTlQJCTB4ZmYwMDAwMDAKKyNkZWZpbmUgV0lER0VUX0xMUF9UWF9DTlQJCTB4MDBmZjAwMDAKKyNkZWZpbmUgV0lER0VUX1BFTkRJTkcJCQkweDAwMDAwMDFmCisKKy8qIFdJREdFVF9FUlJfVVBQRVJfQUREUiAqLworI2RlZmluZQlXSURHRVRfRVJSX1VQUEVSX0FERFJfT05MWQkweDAwMDBmZmZmCisKKy8qIFdJREdFVF9DT05UUk9MICovCisjZGVmaW5lIFdJREdFVF9GX0JBRF9QS1QJCTB4MDAwMTAwMDAKKyNkZWZpbmUgV0lER0VUX0xMUF9YQkFSX0NSRAkJMHgwMDAwZjAwMAorI2RlZmluZQlXSURHRVRfTExQX1hCQVJfQ1JEX1NIRlQJMTIKKyNkZWZpbmUgV0lER0VUX0NMUl9STExQX0NOVAkJMHgwMDAwMDgwMAorI2RlZmluZSBXSURHRVRfQ0xSX1RMTFBfQ05UCQkweDAwMDAwNDAwCisjZGVmaW5lIFdJREdFVF9TWVNfRU5ECQkJMHgwMDAwMDIwMAorI2RlZmluZSBXSURHRVRfTUFYX1RSQU5TCQkweDAwMDAwMWYwCisjZGVmaW5lIFdJREdFVF9XSURHRVRfSUQJCTB4MDAwMDAwMGYKKworLyogV0lER0VUX0lOVERFU1RfVVBQRVJfQUREUiAqLworI2RlZmluZSBXSURHRVRfSU5UX1ZFQ1RPUgkJMHhmZjAwMDAwMAorI2RlZmluZSBXSURHRVRfSU5UX1ZFQ1RPUl9TSEZUCQkyNAorI2RlZmluZSBXSURHRVRfVEFSR0VUX0lECQkweDAwMGYwMDAwCisjZGVmaW5lIFdJREdFVF9UQVJHRVRfSURfU0hGVAkJMTYKKyNkZWZpbmUgV0lER0VUX1VQUF9BRERSCQkJMHgwMDAwZmZmZgorCisvKiBXSURHRVRfRVJSX0NNRF9XT1JEICovCisjZGVmaW5lIFdJREdFVF9ESUROCQkJMHhmMDAwMDAwMAorI2RlZmluZSBXSURHRVRfU0lETgkJCTB4MGYwMDAwMDAKKyNkZWZpbmUgV0lER0VUX1BBQ1RZUAkJCTB4MDBmMDAwMDAKKyNkZWZpbmUgV0lER0VUX1ROVU0JCQkweDAwMGY4MDAwCisjZGVmaW5lIFdJREdFVF9DT0hFUkVOVAkJCTB4MDAwMDQwMDAKKyNkZWZpbmUgV0lER0VUX0RTCQkJMHgwMDAwMzAwMAorI2RlZmluZSBXSURHRVRfR0JSCQkJMHgwMDAwMDgwMAorI2RlZmluZSBXSURHRVRfVkJQTQkJCTB4MDAwMDA0MDAKKyNkZWZpbmUgV0lER0VUX0VSUk9SCQkJMHgwMDAwMDIwMAorI2RlZmluZSBXSURHRVRfQkFSUklFUgkJCTB4MDAwMDAxMDAKKworLyogV0lER0VUX0xMUF9DRkcgKi8KKyNkZWZpbmUgV0lER0VUX0xMUF9NQVhSRVRSWQkJMHgwM2ZmMDAwMAorI2RlZmluZSBXSURHRVRfTExQX01BWFJFVFJZX1NIRlQJMTYKKyNkZWZpbmUgV0lER0VUX0xMUF9OVUxMVElNRU9VVAkJMHgwMDAwZmMwMAorI2RlZmluZSBXSURHRVRfTExQX05VTExUSU1FT1VUX1NIRlQJMTAKKyNkZWZpbmUgV0lER0VUX0xMUF9NQVhCVVJTVAkJMHgwMDAwMDNmZgorI2RlZmluZSBXSURHRVRfTExQX01BWEJVUlNUX1NIRlQJMAorCisvKgorICogYWNjb3JkaW5nIHRvIHRoZSBjcm9zc3RhbGsgc3BlYywgb25seSAzMi1iaXRzIGFjY2VzcyB0byB0aGUgd2lkZ2V0CisgKiBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyBpcyBhbGxvd2VkLiAgc29tZSB3aWRnZXRzIG1heSBhbGxvdyA2NC1iaXRzCisgKiBhY2Nlc3MgYnV0IHNvZnR3YXJlIHNob3VsZCBub3QgZGVwZW5kIG9uIGl0LiAgcmVnaXN0ZXJzIGJleW9uZCB0aGUKKyAqIHdpZGdldCB0YXJnZXQgZmx1c2ggcmVnaXN0ZXIgYXJlIHdpZGdldCBkZXBlbmRlbnQgdGh1cyB3aWxsIG5vdCBiZQorICogZGVmaW5lZCBoZXJlCisgKi8KKyNpZm5kZWYgX19BU1NFTUJMWV9fCit0eXBlZGVmIHUzMiB3aWRnZXRyZWdfdDsKKworLyogd2lkZ2V0IGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzICovCit0eXBlZGVmIHZvbGF0aWxlIHN0cnVjdCB3aWRnZXRfY2ZnIHsKKwl3aWRnZXRyZWdfdAkJd19wYWRfMDsJCS8qIDB4MDAgKi8KKwl3aWRnZXRyZWdfdAkJd19pZDsJCQkvKiAweDA0ICovCisJd2lkZ2V0cmVnX3QJCXdfcGFkXzE7CQkvKiAweDA4ICovCisJd2lkZ2V0cmVnX3QJCXdfc3RhdHVzOwkJLyogMHgwYyAqLworCXdpZGdldHJlZ190CQl3X3BhZF8yOwkJLyogMHgxMCAqLworCXdpZGdldHJlZ190CQl3X2Vycl91cHBlcl9hZGRyOwkvKiAweDE0ICovCisJd2lkZ2V0cmVnX3QJCXdfcGFkXzM7CQkvKiAweDE4ICovCisJd2lkZ2V0cmVnX3QJCXdfZXJyX2xvd2VyX2FkZHI7CS8qIDB4MWMgKi8KKwl3aWRnZXRyZWdfdAkJd19wYWRfNDsJCS8qIDB4MjAgKi8KKwl3aWRnZXRyZWdfdAkJd19jb250cm9sOwkJLyogMHgyNCAqLworCXdpZGdldHJlZ190CQl3X3BhZF81OwkJLyogMHgyOCAqLworCXdpZGdldHJlZ190CQl3X3JlcV90aW1lb3V0OwkJLyogMHgyYyAqLworCXdpZGdldHJlZ190CQl3X3BhZF82OwkJLyogMHgzMCAqLworCXdpZGdldHJlZ190CQl3X2ludGRlc3RfdXBwZXJfYWRkcjsJLyogMHgzNCAqLworCXdpZGdldHJlZ190CQl3X3BhZF83OwkJLyogMHgzOCAqLworCXdpZGdldHJlZ190CQl3X2ludGRlc3RfbG93ZXJfYWRkcjsJLyogMHgzYyAqLworCXdpZGdldHJlZ190CQl3X3BhZF84OwkJLyogMHg0MCAqLworCXdpZGdldHJlZ190CQl3X2Vycl9jbWRfd29yZDsJCS8qIDB4NDQgKi8KKwl3aWRnZXRyZWdfdAkJd19wYWRfOTsJCS8qIDB4NDggKi8KKwl3aWRnZXRyZWdfdAkJd19sbHBfY2ZnOwkJLyogMHg0YyAqLworCXdpZGdldHJlZ190CQl3X3BhZF8xMDsJCS8qIDB4NTAgKi8KKwl3aWRnZXRyZWdfdAkJd190Zmx1c2g7CQkvKiAweDU0ICovCit9IHdpZGdldF9jZmdfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkCWRpZG46NDsKKwl1bnNpZ25lZAlzaWRuOjQ7CisJdW5zaWduZWQJcGFjdHlwOjQ7CisJdW5zaWduZWQJdG51bTo1OworCXVuc2lnbmVkCWN0OjE7CisJdW5zaWduZWQJZHM6MjsKKwl1bnNpZ25lZAlnYnI6MTsKKwl1bnNpZ25lZAl2YnBtOjE7CisJdW5zaWduZWQJZXJyb3I6MTsKKwl1bnNpZ25lZAlibzoxOworCXVuc2lnbmVkCW90aGVyOjg7Cit9IHdfZXJyX2NtZF93b3JkX2Y7CisKK3R5cGVkZWYgdW5pb24geworCXdpZGdldHJlZ190CQlyOworCXdfZXJyX2NtZF93b3JkX2YJZjsKK30gd19lcnJfY21kX3dvcmRfdTsKKwordHlwZWRlZiBzdHJ1Y3QgeHdpZGdldF9pbmZvX3MgKnh3aWRnZXRfaW5mb190OworCisvKgorICogQ3Jvc3N0YWxrIFdpZGdldCBIYXJkd2FyZSBJZGVudGlmaWNhdGlvbiwgYXMgZGVmaW5lZCBpbiB0aGUgQ3Jvc3N0YWxrIHNwZWMuCisgKi8KK3R5cGVkZWYgc3RydWN0IHh3aWRnZXRfaHdpZF9zIHsKKwl4d2lkZ2V0X3BhcnRfbnVtX3QJcGFydF9udW07CisJeHdpZGdldF9yZXZfbnVtX3QJcmV2X251bTsKKwl4d2lkZ2V0X21mZ19udW1fdAltZmdfbnVtOworfSAqeHdpZGdldF9od2lkX3Q7CisKKworLyoKKyAqIFJldHVybnMgMSBpZiBhIGRyaXZlciB0aGF0IGhhbmRsZXMgZGV2aWNlcyBkZXNjcmliZWQgYnkgaHdpZDEgaXMgYWJsZQorICogdG8gbWFuYWdlIGEgZGV2aWNlIHdpdGggaGFyZHdhcmVpZCBod2lkMi4gIE5PVEU6IFdlIGRvbid0IGNoZWNrIHJldgorICogbnVtYmVycyBhdCBhbGwuCisgKi8KKyNkZWZpbmUgWFdJREdFVF9IQVJEV0FSRV9JRF9NQVRDSChod2lkMSwgaHdpZDIpIFwKKwkoKChod2lkMSktPnBhcnRfbnVtID09IChod2lkMiktPnBhcnRfbnVtKSAmJiBcCisJKCgoaHdpZDEpLT5tZmdfbnVtID09IFhXSURHRVRfTUZHX05VTV9OT05FKSB8fCBcCisJKChod2lkMiktPm1mZ19udW0gPT0gWFdJREdFVF9NRkdfTlVNX05PTkUpIHx8IFwKKwkoKGh3aWQxKS0+bWZnX251bSA9PSAoaHdpZDIpLT5tZmdfbnVtKSkpCisKKyNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiBfQVNNX1hUQUxLX1hXSURHRVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy94eHMxNTAwLmggYi9pbmNsdWRlL2FzbS1taXBzL3h4czE1MDAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWMwZGRmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy94eHMxNTAwLmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIE15Q2FibGUgWFhTMTUwMCBSZWZlcnJlbmNlIEJvYXJkCisgKgorICogQ29weXJpZ2h0IDIwMDMgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCisgKiBBdXRob3I6IFBldGUgUG9wb3YsIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqICAgICAgICAgCXBwb3BvdkBtdmlzdGEuY29tIG9yIHNvdXJjZUBtdmlzdGEuY29tCisgKgorICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIGRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKKyAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqICA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgKgorICogCisgKi8KKyNpZm5kZWYgX19BU01fWFhTMTUwMF9ICisjZGVmaW5lIF9fQVNNX1hYUzE1MDBfSAorCisvKiBQQ01DSUEgWFhTMTUwMCBzcGVjaWZpYyBkZWZpbmVzICovCisjZGVmaW5lIFBDTUNJQV9NQVhfU09DSyAwCisjZGVmaW5lIFBDTUNJQV9OVU1fU09DS1MgKFBDTUNJQV9NQVhfU09DSysxKQorI2RlZmluZSBQQ01DSUFfSVJRIEFVMTAwMF9HUElPXzQKKworI2VuZGlmIC8qIF9fQVNNX1hYUzE1MDBfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvYS5vdXQuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9hLm91dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhNDkwY2MKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2MvYS5vdXQuaApAQCAtMCwwICsxLDI5IEBACisjaWZuZGVmIF9fUEFSSVNDX0FfT1VUX0hfXworI2RlZmluZSBfX1BBUklTQ19BX09VVF9IX18KKworc3RydWN0IGV4ZWMKK3sKKyAgdW5zaWduZWQgaW50IGFfaW5mbzsJCS8qIFVzZSBtYWNyb3MgTl9NQUdJQywgZXRjIGZvciBhY2Nlc3MgKi8KKyAgdW5zaWduZWQgYV90ZXh0OwkJLyogbGVuZ3RoIG9mIHRleHQsIGluIGJ5dGVzICovCisgIHVuc2lnbmVkIGFfZGF0YTsJCS8qIGxlbmd0aCBvZiBkYXRhLCBpbiBieXRlcyAqLworICB1bnNpZ25lZCBhX2JzczsJCS8qIGxlbmd0aCBvZiB1bmluaXRpYWxpemVkIGRhdGEgYXJlYSBmb3IgZmlsZSwgaW4gYnl0ZXMgKi8KKyAgdW5zaWduZWQgYV9zeW1zOwkJLyogbGVuZ3RoIG9mIHN5bWJvbCB0YWJsZSBkYXRhIGluIGZpbGUsIGluIGJ5dGVzICovCisgIHVuc2lnbmVkIGFfZW50cnk7CQkvKiBzdGFydCBhZGRyZXNzICovCisgIHVuc2lnbmVkIGFfdHJzaXplOwkJLyogbGVuZ3RoIG9mIHJlbG9jYXRpb24gaW5mbyBmb3IgdGV4dCwgaW4gYnl0ZXMgKi8KKyAgdW5zaWduZWQgYV9kcnNpemU7CQkvKiBsZW5ndGggb2YgcmVsb2NhdGlvbiBpbmZvIGZvciBkYXRhLCBpbiBieXRlcyAqLworfTsKKworI2RlZmluZSBOX1RSU0laRShhKQkoKGEpLmFfdHJzaXplKQorI2RlZmluZSBOX0RSU0laRShhKQkoKGEpLmFfZHJzaXplKQorI2RlZmluZSBOX1NZTVNJWkUoYSkJKChhKS5hX3N5bXMpCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKy8qIFhYWDogU1RBQ0tfVE9QIGFjdHVhbGx5IHNob3VsZCBiZSBTVEFDS19CT1RUT00gZm9yIHBhcmlzYy4KKyAqIHBydW1wZiAqLworCisjZGVmaW5lIFNUQUNLX1RPUAlUQVNLX1NJWkUKKworI2VuZGlmCisKKyNlbmRpZiAvKiBfX0FfT1VUX0dOVV9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9hc21yZWdzLmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvYXNtcmVncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5M2M2NDYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2MvYXNtcmVncy5oCkBAIC0wLDAgKzEsMTgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5IEhld2xldHQtUGFja2FyZCAoRnJhbmsgUm93YW5kKQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKglpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICoJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICoJYW55IGxhdGVyIHZlcnNpb24uCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKglidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICoJTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICoJR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKglZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICoJYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqCUZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX1BBUklTQ19BU01SRUdTX0gKKyNkZWZpbmUgX1BBUklTQ19BU01SRUdTX0gKKworOyEgR2VuZXJhbCBSZWdpc3RlcnMKKworcnA6CS5yZWcJJXIyCithcmczOgkucmVnCSVyMjMKK2FyZzI6CS5yZWcJJXIyNAorYXJnMToJLnJlZwklcjI1CithcmcwOgkucmVnCSVyMjYKK2RwOgkucmVnCSVyMjcKK3JldDA6CS5yZWcJJXIyOAorcmV0MToJLnJlZwklcjI5CitzbDoJLnJlZwklcjI5CitzcDoJLnJlZwklcjMwCisKKyNpZiAwCisvKiBQQTIwX1JFVklTSVQgKi8KK2FyZzc6CS5yZWcJcjE5Cithcmc2OgkucmVnCXIyMAorYXJnNToJLnJlZwlyMjEKK2FyZzQ6CS5yZWcJcjIyCitncDoJLnJlZwlyMjcKK2FwOgkucmVnCXIyOQorI2VuZGlmCisKKworcjA6CS5yZWcJJXIwCityMToJLnJlZwklcjEKK3IyOgkucmVnCSVyMgorcjM6CS5yZWcJJXIzCityNDoJLnJlZwklcjQKK3I1OgkucmVnCSVyNQorcjY6CS5yZWcJJXI2CityNzoJLnJlZwklcjcKK3I4OgkucmVnCSVyOAorcjk6CS5yZWcJJXI5CityMTA6CS5yZWcJJXIxMAorcjExOgkucmVnCSVyMTEKK3IxMjoJLnJlZwklcjEyCityMTM6CS5yZWcJJXIxMworcjE0OgkucmVnCSVyMTQKK3IxNToJLnJlZwklcjE1CityMTY6CS5yZWcJJXIxNgorcjE3OgkucmVnCSVyMTcKK3IxODoJLnJlZwklcjE4CityMTk6CS5yZWcJJXIxOQorcjIwOgkucmVnCSVyMjAKK3IyMToJLnJlZwklcjIxCityMjI6CS5yZWcJJXIyMgorcjIzOgkucmVnCSVyMjMKK3IyNDoJLnJlZwklcjI0CityMjU6CS5yZWcJJXIyNQorcjI2OgkucmVnCSVyMjYKK3IyNzoJLnJlZwklcjI3CityMjg6CS5yZWcJJXIyOAorcjI5OgkucmVnCSVyMjkKK3IzMDoJLnJlZwklcjMwCityMzE6CS5yZWcJJXIzMQorCisKKzshIFNwYWNlIFJlZ2lzdGVycworCitzcjA6CS5yZWcJJXNyMAorc3IxOgkucmVnCSVzcjEKK3NyMjoJLnJlZwklc3IyCitzcjM6CS5yZWcJJXNyMworc3I0OgkucmVnCSVzcjQKK3NyNToJLnJlZwklc3I1CitzcjY6CS5yZWcJJXNyNgorc3I3OgkucmVnCSVzcjcKKworCis7ISBGbG9hdGluZyBQb2ludCBSZWdpc3RlcnMKKworZnIwOgkucmVnCSVmcjAKK2ZyMToJLnJlZwklZnIxCitmcjI6CS5yZWcJJWZyMgorZnIzOgkucmVnCSVmcjMKK2ZyNDoJLnJlZwklZnI0CitmcjU6CS5yZWcJJWZyNQorZnI2OgkucmVnCSVmcjYKK2ZyNzoJLnJlZwklZnI3Citmcjg6CS5yZWcJJWZyOAorZnI5OgkucmVnCSVmcjkKK2ZyMTA6CS5yZWcJJWZyMTAKK2ZyMTE6CS5yZWcJJWZyMTEKK2ZyMTI6CS5yZWcJJWZyMTIKK2ZyMTM6CS5yZWcJJWZyMTMKK2ZyMTQ6CS5yZWcJJWZyMTQKK2ZyMTU6CS5yZWcJJWZyMTUKK2ZyMTY6CS5yZWcJJWZyMTYKK2ZyMTc6CS5yZWcJJWZyMTcKK2ZyMTg6CS5yZWcJJWZyMTgKK2ZyMTk6CS5yZWcJJWZyMTkKK2ZyMjA6CS5yZWcJJWZyMjAKK2ZyMjE6CS5yZWcJJWZyMjEKK2ZyMjI6CS5yZWcJJWZyMjIKK2ZyMjM6CS5yZWcJJWZyMjMKK2ZyMjQ6CS5yZWcJJWZyMjQKK2ZyMjU6CS5yZWcJJWZyMjUKK2ZyMjY6CS5yZWcJJWZyMjYKK2ZyMjc6CS5yZWcJJWZyMjcKK2ZyMjg6CS5yZWcJJWZyMjgKK2ZyMjk6CS5yZWcJJWZyMjkKK2ZyMzA6CS5yZWcJJWZyMzAKK2ZyMzE6CS5yZWcJJWZyMzEKKworCis7ISBDb250cm9sIFJlZ2lzdGVycworCityY3RyOgkucmVnCSVjcjAKK3BpZHIxOgkucmVnCSVjcjgKK3BpZHIyOgkucmVnCSVjcjkKK2NjcjoJLnJlZwklY3IxMAorc2FyOgkucmVnCSVjcjExCitwaWRyMzoJLnJlZwklY3IxMgorcGlkcjQ6CS5yZWcJJWNyMTMKK2l2YToJLnJlZwklY3IxNAorZWllbToJLnJlZwklY3IxNQoraXRtcjoJLnJlZwklY3IxNgorcGNzcToJLnJlZwklY3IxNworcGNvcToJLnJlZwklY3IxOAoraWlyOgkucmVnCSVjcjE5Citpc3I6CS5yZWcJJWNyMjAKK2lvcjoJLnJlZwklY3IyMQoraXBzdzoJLnJlZwklY3IyMgorZWlycjoJLnJlZwklY3IyMwordHIwOgkucmVnCSVjcjI0Cit0cjE6CS5yZWcJJWNyMjUKK3RyMjoJLnJlZwklY3IyNgordHIzOgkucmVnCSVjcjI3Cit0cjQ6CS5yZWcJJWNyMjgKK3RyNToJLnJlZwklY3IyOQordHI2OgkucmVnCSVjcjMwCit0cjc6CS5yZWcJJWNyMzEKKworCitjcjA6CS5yZWcJJWNyMAorY3I4OgkucmVnCSVjcjgKK2NyOToJLnJlZwklY3I5CitjcjEwOgkucmVnCSVjcjEwCitjcjExOgkucmVnCSVjcjExCitjcjEyOgkucmVnCSVjcjEyCitjcjEzOgkucmVnCSVjcjEzCitjcjE0OgkucmVnCSVjcjE0CitjcjE1OgkucmVnCSVjcjE1CitjcjE2OgkucmVnCSVjcjE2CitjcjE3OgkucmVnCSVjcjE3CitjcjE4OgkucmVnCSVjcjE4CitjcjE5OgkucmVnCSVjcjE5CitjcjIwOgkucmVnCSVjcjIwCitjcjIxOgkucmVnCSVjcjIxCitjcjIyOgkucmVnCSVjcjIyCitjcjIzOgkucmVnCSVjcjIzCitjcjI0OgkucmVnCSVjcjI0CitjcjI1OgkucmVnCSVjcjI1CitjcjI2OgkucmVnCSVjcjI2CitjcjI3OgkucmVnCSVjcjI3CitjcjI4OgkucmVnCSVjcjI4CitjcjI5OgkucmVnCSVjcjI5CitjcjMwOgkucmVnCSVjcjMwCitjcjMxOgkucmVnCSVjcjMxCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL2Fzc2VtYmx5LmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvYXNzZW1ibHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmMyODZmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL2Fzc2VtYmx5LmgKQEAgLTAsMCArMSw0NTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgSGV3bGV0dC1QYWNrYXJkIChGcmFuayBSb3dhbmQpCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgUGhpbGlwcCBSdW1wZiA8cHJ1bXBmQHR1eC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgU3VTRSBHbWJICisgKgorICogICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiAgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBfUEFSSVNDX0FTU0VNQkxZX0gKKyNkZWZpbmUgX1BBUklTQ19BU1NFTUJMWV9ICisKKyNpZmRlZiBfX0xQNjRfXworI2RlZmluZSBMRFJFRwlsZGQKKyNkZWZpbmUgU1RSRUcJc3RkCisjZGVmaW5lIExEUkVHWCAgbGRkLHMKKyNkZWZpbmUgTERSRUdNCWxkZCxtYgorI2RlZmluZSBTVFJFR00Jc3RkLG1hCisjZGVmaW5lIFNIUlJFRyAgc2hyZAorI2RlZmluZSBSUF9PRkZTRVQJMTYKKyNkZWZpbmUgRlJBTUVfU0laRQkxMjgKKyNkZWZpbmUgQ0FMTEVFX1NBVkVfRlJBTUVfU0laRQkxNDQKKyNlbHNlCisjZGVmaW5lIExEUkVHCWxkdworI2RlZmluZSBTVFJFRwlzdHcKKyNkZWZpbmUgTERSRUdYICBsZHd4LHMKKyNkZWZpbmUgTERSRUdNCWxkd20KKyNkZWZpbmUgU1RSRUdNCXN0d20KKyNkZWZpbmUgU0hSUkVHICBzaHIKKyNkZWZpbmUgUlBfT0ZGU0VUCTIwCisjZGVmaW5lIEZSQU1FX1NJWkUJNjQKKyNkZWZpbmUgQ0FMTEVFX1NBVkVfRlJBTUVfU0laRQkxMjgKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1BBMjAKKyNkZWZpbmUgQkwJCWIsbAorIyBpZmRlZiBDT05GSUdfNjRCSVQKKyMgIGRlZmluZSBMRVZFTAkJMi4wdworIyBlbHNlCisjICBkZWZpbmUgTEVWRUwJCTIuMAorIyBlbmRpZgorI2Vsc2UKKyNkZWZpbmUgQkwJCWJsCisjZGVmaW5lIExFVkVMCQkxLjEKKyNlbmRpZgorCisjaWZkZWYgX19BU1NFTUJMWV9fCisKKyNpZmRlZiBfX0xQNjRfXworLyogdGhlIDY0LWJpdCBwYSBnbnUgYXNzZW1ibGVyIHVuZm9ydHVuYXRlbHkgZGVmYXVsdHMgdG8gLmxldmVsIDEuMSBvciAyLjAgc28KKyAqIHdvcmsgYXJvdW5kIHRoYXQgZm9yIG5vdy4uLiAqLworCS5sZXZlbCAyLjB3CisjZW5kaWYKKworI2luY2x1ZGUgPGFzbS9vZmZzZXRzLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKworI2luY2x1ZGUgPGFzbS9hc21yZWdzLmg+CisKKwlzcAk9CTMwCisJZ3AJPQkyNworCWlwc3cJPQkyMgorCisJLyoKKwkgKiBXZSBwcm92aWRlIHR3byB2ZXJzaW9ucyBvZiBlYWNoIG1hY3JvIHRvIGNvbnZlcnQgZnJvbSBwaHlzaWNhbAorCSAqIHRvIHZpcnR1YWwgYW5kIHZpY2UgdmVyc2EuIFRoZSAiX3IxIiB2ZXJzaW9ucyB0YWtlIG9uZSBhcmd1bWVudAorCSAqIHJlZ2lzdGVyLCBidXQgdHJhc2hlcyByMSB0byBkbyB0aGUgY29udmVyc2lvbi4gVGhlIG90aGVyCisJICogdmVyc2lvbiB0YWtlcyB0d28gYXJndW1lbnRzOiBhIHNyYyBhbmQgZGVzdGluYXRpb24gcmVnaXN0ZXIuCisJICogSG93ZXZlciwgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gcmVnaXN0ZXJzIGNhbiBub3QgYmUKKwkgKiB0aGUgc2FtZSByZWdpc3Rlci4KKwkgKi8KKworCS5tYWNybyAgdG9waHlzICBncnZpcnQsIGdycGh5cworCWxkaWwgICAgTCUoX19QQUdFX09GRlNFVCksIFxncnBoeXMKKwlzdWIgICAgIFxncnZpcnQsIFxncnBoeXMsIFxncnBoeXMKKwkuZW5kbQorCQorCS5tYWNybyAgdG92aXJ0ICBncnBoeXMsIGdydmlydAorCWxkaWwgICAgTCUoX19QQUdFX09GRlNFVCksIFxncnZpcnQKKwlhZGQgICAgIFxncnBoeXMsIFxncnZpcnQsIFxncnZpcnQKKwkuZW5kbQorCisJLm1hY3JvICB0b3BoeXNfcjEgIGdyCisJbGRpbCAgICBMJShfX1BBR0VfT0ZGU0VUKSwgJXIxCisJc3ViICAgICBcZ3IsICVyMSwgXGdyCisJLmVuZG0KKwkKKwkubWFjcm8gIHRvdmlydF9yMSAgZ3IKKwlsZGlsICAgIEwlKF9fUEFHRV9PRkZTRVQpLCAlcjEKKwlhZGQgICAgIFxnciwgJXIxLCBcZ3IKKwkuZW5kbQorCisJLm1hY3JvIGRlbGF5IHZhbHVlCisJbGRpbAlMJVx2YWx1ZSwgMQorCWxkbwlSJVx2YWx1ZSgxKSwgMQorCWFkZGliLFVWLG4gLTEsMSwuCisJYWRkaWIsTlVWLG4gLTEsMSwuKzgKKwlub3AKKwkuZW5kbQorCisJLm1hY3JvCWRlYnVnIHZhbHVlCisJLmVuZG0KKworCisJLyogU2hpZnQgTGVmdCAtIG5vdGUgdGhlIHIgYW5kIHQgY2FuIE5PVCBiZSB0aGUgc2FtZSEgKi8KKwkubWFjcm8gc2hsIHIsIHNhLCB0CisJZGVwLHoJXHIsIDMxLVxzYSwgMzItXHNhLCBcdAorCS5lbmRtCisKKwkvKiBUaGUgUEEgMi4wIHNoaWZ0IGxlZnQgKi8KKwkubWFjcm8gc2hsdyByLCBzYSwgdAorCWRlcHcseglcciwgMzEtXHNhLCAzMi1cc2EsIFx0CisJLmVuZG0KKworCS8qIEFuZCB0aGUgUEEgMi4wVyBzaGlmdCBsZWZ0ICovCisJLm1hY3JvIHNobGQgciwgc2EsIHQKKwlkZXBkLHoJXHIsIDYzLVxzYSwgNjQtXHNhLCBcdAorCS5lbmRtCisKKwkvKiBTaGlmdCBSaWdodCAtIG5vdGUgdGhlIHIgYW5kIHQgY2FuIE5PVCBiZSB0aGUgc2FtZSEgKi8KKwkubWFjcm8gc2hyIHIsIHNhLCB0CisJZXh0cnUgXHIsIDMxLVxzYSwgMzItXHNhLCBcdAorCS5lbmRtCisKKwkvKiBwYTIwdyB2ZXJzaW9uIG9mIHNoaWZ0IHJpZ2h0ICovCisJLm1hY3JvIHNocmQgciwgc2EsIHQKKwlleHRyZCx1IFxyLCA2My1cc2EsIDY0LVxzYSwgXHQKKwkuZW5kbQorCisJLyogbG9hZCAzMi1iaXQgJ3ZhbHVlJyBpbnRvICdyZWcnIGNvbXBlbnNhdGluZyBmb3IgdGhlIGxkaWwKKwkgKiBzaWduLWV4dGVuc2lvbiB3aGVuIHJ1bm5pbmcgaW4gd2lkZSBtb2RlLgorCSAqIFdBUk5JTkchISBuZWl0aGVyICd2YWx1ZScgbm9yICdyZWcnIGNhbiBiZSBleHByZXNzaW9ucworCSAqIGNvbnRhaW5pbmcgJy4nISEhISAqLworCS5tYWNybwlsb2FkMzIgdmFsdWUsIHJlZworCWxkaWwJTCVcdmFsdWUsIFxyZWcKKwlsZG8JUiVcdmFsdWUoXHJlZyksIFxyZWcKKwkuZW5kbQorCisJLm1hY3JvIGxvYWRncAorI2lmZGVmIF9fTFA2NF9fCisJbGRpbAkJTCVfX2dwLCAlcjI3CisJbGRvCQlSJV9fZ3AoJXIyNyksICVyMjcKKyNlbHNlCisJbGRpbAkJTCUkZ2xvYmFsJCwgJXIyNworCWxkbwkJUiUkZ2xvYmFsJCglcjI3KSwgJXIyNworI2VuZGlmCisJLmVuZG0KKworI2RlZmluZSBTQVZFX1NQKHIsIHdoZXJlKSBtZnNwIHIsICVyMSAhIFNUUkVHICVyMSwgd2hlcmUKKyNkZWZpbmUgUkVTVF9TUChyLCB3aGVyZSkgTERSRUcgd2hlcmUsICVyMSAhIG10c3AgJXIxLCByCisjZGVmaW5lIFNBVkVfQ1Iociwgd2hlcmUpIG1mY3RsIHIsICVyMSAhIFNUUkVHICVyMSwgd2hlcmUKKyNkZWZpbmUgUkVTVF9DUihyLCB3aGVyZSkgTERSRUcgd2hlcmUsICVyMSAhIG10Y3RsICVyMSwgcgorCisJLm1hY3JvCXNhdmVfZ2VuZXJhbAlyZWdzCisJU1RSRUcgJXIxLCBQVF9HUjEgKFxyZWdzKQorCVNUUkVHICVyMiwgUFRfR1IyIChccmVncykKKwlTVFJFRyAlcjMsIFBUX0dSMyAoXHJlZ3MpCisJU1RSRUcgJXI0LCBQVF9HUjQgKFxyZWdzKQorCVNUUkVHICVyNSwgUFRfR1I1IChccmVncykKKwlTVFJFRyAlcjYsIFBUX0dSNiAoXHJlZ3MpCisJU1RSRUcgJXI3LCBQVF9HUjcgKFxyZWdzKQorCVNUUkVHICVyOCwgUFRfR1I4IChccmVncykKKwlTVFJFRyAlcjksIFBUX0dSOSAoXHJlZ3MpCisJU1RSRUcgJXIxMCwgUFRfR1IxMChccmVncykKKwlTVFJFRyAlcjExLCBQVF9HUjExKFxyZWdzKQorCVNUUkVHICVyMTIsIFBUX0dSMTIoXHJlZ3MpCisJU1RSRUcgJXIxMywgUFRfR1IxMyhccmVncykKKwlTVFJFRyAlcjE0LCBQVF9HUjE0KFxyZWdzKQorCVNUUkVHICVyMTUsIFBUX0dSMTUoXHJlZ3MpCisJU1RSRUcgJXIxNiwgUFRfR1IxNihccmVncykKKwlTVFJFRyAlcjE3LCBQVF9HUjE3KFxyZWdzKQorCVNUUkVHICVyMTgsIFBUX0dSMTgoXHJlZ3MpCisJU1RSRUcgJXIxOSwgUFRfR1IxOShccmVncykKKwlTVFJFRyAlcjIwLCBQVF9HUjIwKFxyZWdzKQorCVNUUkVHICVyMjEsIFBUX0dSMjEoXHJlZ3MpCisJU1RSRUcgJXIyMiwgUFRfR1IyMihccmVncykKKwlTVFJFRyAlcjIzLCBQVF9HUjIzKFxyZWdzKQorCVNUUkVHICVyMjQsIFBUX0dSMjQoXHJlZ3MpCisJU1RSRUcgJXIyNSwgUFRfR1IyNShccmVncykKKwkvKiByMjYgaXMgc2F2ZWQgaW4gZ2V0X3N0YWNrIGFuZCB1c2VkIHRvIHByZXNlcnZlIGEgdmFsdWUgYWNyb3NzIHZpcnRfbWFwICovCisJU1RSRUcgJXIyNywgUFRfR1IyNyhccmVncykKKwlTVFJFRyAlcjI4LCBQVF9HUjI4KFxyZWdzKQorCS8qIHIyOSBpcyBzYXZlZCBpbiBnZXRfc3RhY2sgYW5kIHVzZWQgdG8gcG9pbnQgdG8gc2F2ZWQgcmVnaXN0ZXJzICovCisJLyogcjMwIHN0YWNrIHBvaW50ZXIgc2F2ZWQgaW4gZ2V0X3N0YWNrICovCisJU1RSRUcgJXIzMSwgUFRfR1IzMShccmVncykKKwkuZW5kbQorCisJLm1hY3JvCXJlc3RfZ2VuZXJhbAlyZWdzCisJLyogcjEgdXNlZCBhcyBhIHRlbXAgaW4gcmVzdF9zdGFjayBhbmQgaXMgcmVzdG9yZWQgdGhlcmUgKi8KKwlMRFJFRyBQVF9HUjIgKFxyZWdzKSwgJXIyCisJTERSRUcgUFRfR1IzIChccmVncyksICVyMworCUxEUkVHIFBUX0dSNCAoXHJlZ3MpLCAlcjQKKwlMRFJFRyBQVF9HUjUgKFxyZWdzKSwgJXI1CisJTERSRUcgUFRfR1I2IChccmVncyksICVyNgorCUxEUkVHIFBUX0dSNyAoXHJlZ3MpLCAlcjcKKwlMRFJFRyBQVF9HUjggKFxyZWdzKSwgJXI4CisJTERSRUcgUFRfR1I5IChccmVncyksICVyOQorCUxEUkVHIFBUX0dSMTAoXHJlZ3MpLCAlcjEwCisJTERSRUcgUFRfR1IxMShccmVncyksICVyMTEKKwlMRFJFRyBQVF9HUjEyKFxyZWdzKSwgJXIxMgorCUxEUkVHIFBUX0dSMTMoXHJlZ3MpLCAlcjEzCisJTERSRUcgUFRfR1IxNChccmVncyksICVyMTQKKwlMRFJFRyBQVF9HUjE1KFxyZWdzKSwgJXIxNQorCUxEUkVHIFBUX0dSMTYoXHJlZ3MpLCAlcjE2CisJTERSRUcgUFRfR1IxNyhccmVncyksICVyMTcKKwlMRFJFRyBQVF9HUjE4KFxyZWdzKSwgJXIxOAorCUxEUkVHIFBUX0dSMTkoXHJlZ3MpLCAlcjE5CisJTERSRUcgUFRfR1IyMChccmVncyksICVyMjAKKwlMRFJFRyBQVF9HUjIxKFxyZWdzKSwgJXIyMQorCUxEUkVHIFBUX0dSMjIoXHJlZ3MpLCAlcjIyCisJTERSRUcgUFRfR1IyMyhccmVncyksICVyMjMKKwlMRFJFRyBQVF9HUjI0KFxyZWdzKSwgJXIyNAorCUxEUkVHIFBUX0dSMjUoXHJlZ3MpLCAlcjI1CisJTERSRUcgUFRfR1IyNihccmVncyksICVyMjYKKwlMRFJFRyBQVF9HUjI3KFxyZWdzKSwgJXIyNworCUxEUkVHIFBUX0dSMjgoXHJlZ3MpLCAlcjI4CisJLyogcjI5IHBvaW50cyB0byByZWdpc3RlciBzYXZlIGFyZWEsIGFuZCBpcyByZXN0b3JlZCBpbiByZXN0X3N0YWNrICovCisJLyogcjMwIHN0YWNrIHBvaW50ZXIgcmVzdG9yZWQgaW4gcmVzdF9zdGFjayAqLworCUxEUkVHIFBUX0dSMzEoXHJlZ3MpLCAlcjMxCisJLmVuZG0KKworCS5tYWNybwlzYXZlX2ZwIAlyZWdzCisJZnN0ZCxtYSAgJWZyMCwgOChccmVncykKKwlmc3RkLG1hCSAlZnIxLCA4KFxyZWdzKQorCWZzdGQsbWEJICVmcjIsIDgoXHJlZ3MpCisJZnN0ZCxtYQkgJWZyMywgOChccmVncykKKwlmc3RkLG1hCSAlZnI0LCA4KFxyZWdzKQorCWZzdGQsbWEJICVmcjUsIDgoXHJlZ3MpCisJZnN0ZCxtYQkgJWZyNiwgOChccmVncykKKwlmc3RkLG1hCSAlZnI3LCA4KFxyZWdzKQorCWZzdGQsbWEJICVmcjgsIDgoXHJlZ3MpCisJZnN0ZCxtYQkgJWZyOSwgOChccmVncykKKwlmc3RkLG1hCSVmcjEwLCA4KFxyZWdzKQorCWZzdGQsbWEJJWZyMTEsIDgoXHJlZ3MpCisJZnN0ZCxtYQklZnIxMiwgOChccmVncykKKwlmc3RkLG1hCSVmcjEzLCA4KFxyZWdzKQorCWZzdGQsbWEJJWZyMTQsIDgoXHJlZ3MpCisJZnN0ZCxtYQklZnIxNSwgOChccmVncykKKwlmc3RkLG1hCSVmcjE2LCA4KFxyZWdzKQorCWZzdGQsbWEJJWZyMTcsIDgoXHJlZ3MpCisJZnN0ZCxtYQklZnIxOCwgOChccmVncykKKwlmc3RkLG1hCSVmcjE5LCA4KFxyZWdzKQorCWZzdGQsbWEJJWZyMjAsIDgoXHJlZ3MpCisJZnN0ZCxtYQklZnIyMSwgOChccmVncykKKwlmc3RkLG1hCSVmcjIyLCA4KFxyZWdzKQorCWZzdGQsbWEJJWZyMjMsIDgoXHJlZ3MpCisJZnN0ZCxtYQklZnIyNCwgOChccmVncykKKwlmc3RkLG1hCSVmcjI1LCA4KFxyZWdzKQorCWZzdGQsbWEJJWZyMjYsIDgoXHJlZ3MpCisJZnN0ZCxtYQklZnIyNywgOChccmVncykKKwlmc3RkLG1hCSVmcjI4LCA4KFxyZWdzKQorCWZzdGQsbWEJJWZyMjksIDgoXHJlZ3MpCisJZnN0ZCxtYQklZnIzMCwgOChccmVncykKKwlmc3RkCSVmcjMxLCAwKFxyZWdzKQorCS5lbmRtCisKKwkubWFjcm8JcmVzdF9mcCAJcmVncworCWZsZGQJMChccmVncyksCSAlZnIzMQorCWZsZGQsbWIJLTgoXHJlZ3MpLCAgICAgICAlZnIzMAorCWZsZGQsbWIJLTgoXHJlZ3MpLCAgICAgICAlZnIyOQorCWZsZGQsbWIJLTgoXHJlZ3MpLCAgICAgICAlZnIyOAorCWZsZGQsbWIJLTgoXHJlZ3MpLCAgICAgICAlZnIyNworCWZsZGQsbWIJLTgoXHJlZ3MpLCAgICAgICAlZnIyNgorCWZsZGQsbWIJLTgoXHJlZ3MpLCAgICAgICAlZnIyNQorCWZsZGQsbWIJLTgoXHJlZ3MpLCAgICAgICAlZnIyNAorCWZsZGQsbWIJLTgoXHJlZ3MpLCAgICAgICAlZnIyMworCWZsZGQsbWIJLTgoXHJlZ3MpLCAgICAgICAlZnIyMgorCWZsZGQsbWIJLTgoXHJlZ3MpLCAgICAgICAlZnIyMQorCWZsZGQsbWIJLTgoXHJlZ3MpLCAgICAgICAlZnIyMAorCWZsZGQsbWIJLTgoXHJlZ3MpLCAgICAgICAlZnIxOQorCWZsZGQsbWIJLTgoXHJlZ3MpLCAgICAgICAlZnIxOAorCWZsZGQsbWIJLTgoXHJlZ3MpLCAgICAgICAlZnIxNworCWZsZGQsbWIJLTgoXHJlZ3MpLCAgICAgICAlZnIxNgorCWZsZGQsbWIJLTgoXHJlZ3MpLCAgICAgICAlZnIxNQorCWZsZGQsbWIJLTgoXHJlZ3MpLCAgICAgICAlZnIxNAorCWZsZGQsbWIJLTgoXHJlZ3MpLCAgICAgICAlZnIxMworCWZsZGQsbWIJLTgoXHJlZ3MpLCAgICAgICAlZnIxMgorCWZsZGQsbWIJLTgoXHJlZ3MpLCAgICAgICAlZnIxMQorCWZsZGQsbWIJLTgoXHJlZ3MpLCAgICAgICAlZnIxMAorCWZsZGQsbWIJLTgoXHJlZ3MpLCAgICAgICAlZnI5CisJZmxkZCxtYgktOChccmVncyksICAgICAgICVmcjgKKwlmbGRkLG1iCS04KFxyZWdzKSwgICAgICAgJWZyNworCWZsZGQsbWIJLTgoXHJlZ3MpLCAgICAgICAlZnI2CisJZmxkZCxtYgktOChccmVncyksICAgICAgICVmcjUKKwlmbGRkLG1iCS04KFxyZWdzKSwgICAgICAgJWZyNAorCWZsZGQsbWIJLTgoXHJlZ3MpLCAgICAgICAlZnIzCisJZmxkZCxtYgktOChccmVncyksICAgICAgICVmcjIKKwlmbGRkLG1iCS04KFxyZWdzKSwgICAgICAgJWZyMQorCWZsZGQsbWIJLTgoXHJlZ3MpLCAgICAgICAlZnIwCisJLmVuZG0KKworI2lmZGVmIF9fTFA2NF9fCisJLm1hY3JvCWNhbGxlZV9zYXZlCisJc3RkLG1hCSAgJXIzLAlDQUxMRUVfU0FWRV9GUkFNRV9TSVpFKCVyMzApCisJbWZjdGwJICAlY3IyNywgJXIzCisJc3RkCSAgJXI0LAktMTM2KCVyMzApCisJc3RkCSAgJXI1LAktMTI4KCVyMzApCisJc3RkCSAgJXI2LAktMTIwKCVyMzApCisJc3RkCSAgJXI3LAktMTEyKCVyMzApCisJc3RkCSAgJXI4LAktMTA0KCVyMzApCisJc3RkCSAgJXI5LAkgLTk2KCVyMzApCisJc3RkCSAlcjEwLAkgLTg4KCVyMzApCisJc3RkCSAlcjExLAkgLTgwKCVyMzApCisJc3RkCSAlcjEyLAkgLTcyKCVyMzApCisJc3RkCSAlcjEzLAkgLTY0KCVyMzApCisJc3RkCSAlcjE0LAkgLTU2KCVyMzApCisJc3RkCSAlcjE1LAkgLTQ4KCVyMzApCisJc3RkCSAlcjE2LAkgLTQwKCVyMzApCisJc3RkCSAlcjE3LAkgLTMyKCVyMzApCisJc3RkCSAlcjE4LAkgLTI0KCVyMzApCisJc3RkCSAgJXIzLAkgLTE2KCVyMzApCisJLmVuZG0KKworCS5tYWNybwljYWxsZWVfcmVzdAorCWxkZAkgLTE2KCVyMzApLCAgICAlcjMKKwlsZGQJIC0yNCglcjMwKSwgICAlcjE4CisJbGRkCSAtMzIoJXIzMCksICAgJXIxNworCWxkZAkgLTQwKCVyMzApLCAgICVyMTYKKwlsZGQJIC00OCglcjMwKSwgICAlcjE1CisJbGRkCSAtNTYoJXIzMCksICAgJXIxNAorCWxkZAkgLTY0KCVyMzApLCAgICVyMTMKKwlsZGQJIC03MiglcjMwKSwgICAlcjEyCisJbGRkCSAtODAoJXIzMCksICAgJXIxMQorCWxkZAkgLTg4KCVyMzApLCAgICVyMTAKKwlsZGQJIC05NiglcjMwKSwgICAgJXI5CisJbGRkCS0xMDQoJXIzMCksICAgICVyOAorCWxkZAktMTEyKCVyMzApLCAgICAlcjcKKwlsZGQJLTEyMCglcjMwKSwgICAgJXI2CisJbGRkCS0xMjgoJXIzMCksICAgICVyNQorCWxkZAktMTM2KCVyMzApLCAgICAlcjQKKwltdGN0bAklcjMsICVjcjI3CisJbGRkLG1iCS1DQUxMRUVfU0FWRV9GUkFNRV9TSVpFKCVyMzApLCAgICAlcjMKKwkuZW5kbQorCisjZWxzZSAvKiAhIF9fTFA2NF9fICovCisKKwkubWFjcm8JY2FsbGVlX3NhdmUKKwlzdHcsbWEJICVyMywJQ0FMTEVFX1NBVkVfRlJBTUVfU0laRSglcjMwKQorCW1mY3RsCSAlY3IyNywgJXIzCisJc3R3CSAlcjQsCS0xMjQoJXIzMCkKKwlzdHcJICVyNSwJLTEyMCglcjMwKQorCXN0dwkgJXI2LAktMTE2KCVyMzApCisJc3R3CSAlcjcsCS0xMTIoJXIzMCkKKwlzdHcJICVyOCwJLTEwOCglcjMwKQorCXN0dwkgJXI5LAktMTA0KCVyMzApCisJc3R3CSAlcjEwLAktMTAwKCVyMzApCisJc3R3CSAlcjExLAkgLTk2KCVyMzApCisJc3R3CSAlcjEyLAkgLTkyKCVyMzApCisJc3R3CSAlcjEzLAkgLTg4KCVyMzApCisJc3R3CSAlcjE0LAkgLTg0KCVyMzApCisJc3R3CSAlcjE1LAkgLTgwKCVyMzApCisJc3R3CSAlcjE2LAkgLTc2KCVyMzApCisJc3R3CSAlcjE3LAkgLTcyKCVyMzApCisJc3R3CSAlcjE4LAkgLTY4KCVyMzApCisJc3R3CSAgJXIzLAkgLTY0KCVyMzApCisJLmVuZG0KKworCS5tYWNybwljYWxsZWVfcmVzdAorCWxkdwkgLTY0KCVyMzApLCAgICAlcjMKKwlsZHcJIC02OCglcjMwKSwgICAlcjE4CisJbGR3CSAtNzIoJXIzMCksICAgJXIxNworCWxkdwkgLTc2KCVyMzApLCAgICVyMTYKKwlsZHcJIC04MCglcjMwKSwgICAlcjE1CisJbGR3CSAtODQoJXIzMCksICAgJXIxNAorCWxkdwkgLTg4KCVyMzApLCAgICVyMTMKKwlsZHcJIC05MiglcjMwKSwgICAlcjEyCisJbGR3CSAtOTYoJXIzMCksICAgJXIxMQorCWxkdwktMTAwKCVyMzApLCAgICVyMTAKKwlsZHcJLTEwNCglcjMwKSwgICAlcjkKKwlsZHcJLTEwOCglcjMwKSwgICAlcjgKKwlsZHcJLTExMiglcjMwKSwgICAlcjcKKwlsZHcJLTExNiglcjMwKSwgICAlcjYKKwlsZHcJLTEyMCglcjMwKSwgICAlcjUKKwlsZHcJLTEyNCglcjMwKSwgICAlcjQKKwltdGN0bAklcjMsICVjcjI3CisJbGR3LG1iCS1DQUxMRUVfU0FWRV9GUkFNRV9TSVpFKCVyMzApLCAgICVyMworCS5lbmRtCisjZW5kaWYgLyogISBfX0xQNjRfXyAqLworCisJLm1hY3JvCXNhdmVfc3BlY2lhbHMJcmVncworCisJU0FWRV9TUCAgKCVzcjAsIFBUX1NSMCAoXHJlZ3MpKQorCVNBVkVfU1AgICglc3IxLCBQVF9TUjEgKFxyZWdzKSkKKwlTQVZFX1NQICAoJXNyMiwgUFRfU1IyIChccmVncykpCisJU0FWRV9TUCAgKCVzcjMsIFBUX1NSMyAoXHJlZ3MpKQorCVNBVkVfU1AgICglc3I0LCBQVF9TUjQgKFxyZWdzKSkKKwlTQVZFX1NQICAoJXNyNSwgUFRfU1I1IChccmVncykpCisJU0FWRV9TUCAgKCVzcjYsIFBUX1NSNiAoXHJlZ3MpKQorCVNBVkVfU1AgICglc3I3LCBQVF9TUjcgKFxyZWdzKSkKKworCVNBVkVfQ1IgICglY3IxNywgUFRfSUFTUTAoXHJlZ3MpKQorCW10Y3RsCSAlcjAsCSVjcjE3CisJU0FWRV9DUiAgKCVjcjE3LCBQVF9JQVNRMShccmVncykpCisKKwlTQVZFX0NSICAoJWNyMTgsIFBUX0lBT1EwKFxyZWdzKSkKKwltdGN0bAkgJXIwLAklY3IxOAorCVNBVkVfQ1IgICglY3IxOCwgUFRfSUFPUTEoXHJlZ3MpKQorCisjaWZkZWYgX19MUDY0X18KKwkvKiBjcjExIChzYXIpIGlzIGEgZnVubnkgb25lLiAgNSBiaXRzIG9uIFBBMS4xIGFuZCA2IGJpdCBvbiBQQTIuMAorCSAqIEZvciBQQTIuMCBtdHNhciBvciBtdGN0bCBhbHdheXMgd3JpdGUgNiBiaXRzLCBidXQgbWZjdGwgb25seQorCSAqIHJlYWRzIDUgYml0cy4gIFVzZSBtZmN0bCx3IHRvIHJlYWQgYWxsIHNpeCBiaXRzLiAgT3RoZXJ3aXNlCisJICogd2UgbG9zZSB0aGUgNnRoIGJpdCBvbiBhIHNhdmUvcmVzdG9yZSBvdmVyIGludGVycnVwdC4KKwkgKi8KKwltZmN0bCx3ICAlY3IxMSwgJXIxCisJU1RSRUcgICAgJXIxLCBQVF9TQVIgKFxyZWdzKQorI2Vsc2UKKwlTQVZFX0NSICAoJWNyMTEsIFBUX1NBUiAgKFxyZWdzKSkKKyNlbmRpZgorCVNBVkVfQ1IgICglY3IxOSwgUFRfSUlSICAoXHJlZ3MpKQorCisJLyoKKwkgKiBDb2RlIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGlzIG1hY3JvIChpbiBpbnRyX3NhdmUpIHJlbGllcworCSAqIG9uIHI4IGNvbnRhaW5pbmcgaXBzdy4KKwkgKi8KKwltZmN0bCAgICAlY3IyMiwgJXI4CisJU1RSRUcgICAgJXI4LCAgIFBUX1BTVyhccmVncykKKwkuZW5kbQorCisJLm1hY3JvCXJlc3Rfc3BlY2lhbHMJcmVncworCisJUkVTVF9TUCAgKCVzcjAsIFBUX1NSMCAoXHJlZ3MpKQorCVJFU1RfU1AgICglc3IxLCBQVF9TUjEgKFxyZWdzKSkKKwlSRVNUX1NQICAoJXNyMiwgUFRfU1IyIChccmVncykpCisJUkVTVF9TUCAgKCVzcjMsIFBUX1NSMyAoXHJlZ3MpKQorCVJFU1RfU1AgICglc3I0LCBQVF9TUjQgKFxyZWdzKSkKKwlSRVNUX1NQICAoJXNyNSwgUFRfU1I1IChccmVncykpCisJUkVTVF9TUCAgKCVzcjYsIFBUX1NSNiAoXHJlZ3MpKQorCVJFU1RfU1AgICglc3I3LCBQVF9TUjcgKFxyZWdzKSkKKworCVJFU1RfQ1IJKCVjcjE3LCBQVF9JQVNRMChccmVncykpCisJUkVTVF9DUgkoJWNyMTcsIFBUX0lBU1ExKFxyZWdzKSkKKworCVJFU1RfQ1IJKCVjcjE4LCBQVF9JQU9RMChccmVncykpCisJUkVTVF9DUgkoJWNyMTgsIFBUX0lBT1ExKFxyZWdzKSkKKworCVJFU1RfQ1IgKCVjcjExLCBQVF9TQVIJKFxyZWdzKSkKKworCVJFU1RfQ1IJKCVjcjIyLCBQVF9QU1cJKFxyZWdzKSkKKwkuZW5kbQorCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9hdG9taWMuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9hdG9taWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjRmNzU3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL2F0b21pYy5oCkBAIC0wLDAgKzEsMTk5IEBACisjaWZuZGVmIF9BU01fUEFSSVNDX0FUT01JQ19IXworI2RlZmluZSBfQVNNX1BBUklTQ19BVE9NSUNfSF8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKy8qIENvcHlyaWdodCAoQykgMjAwMCBQaGlsaXBwIFJ1bXBmIDxwcnVtcGZAdHV4Lm9yZz4uICAqLworCisvKgorICogQXRvbWljIG9wZXJhdGlvbnMgdGhhdCBDIGNhbid0IGd1YXJhbnRlZSB1cy4gIFVzZWZ1bCBmb3IKKyAqIHJlc291cmNlIGNvdW50aW5nIGV0Yy4uCisgKgorICogQW5kIHByb2JhYmx5IGluY3JlZGlibHkgc2xvdyBvbiBwYXJpc2MuICBPVE9ILCB3ZSBkb24ndAorICogaGF2ZSB0byB3cml0ZSBhbnkgc2VyaW91cyBhc3NlbWJseS4gICBwcnVtcGYKKyAqLworCisjaWZkZWYgQ09ORklHX1NNUAorI2luY2x1ZGUgPGFzbS9zcGlubG9jay5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgkJLyogd2UgdXNlIEwxX0NBQ0hFX0JZVEVTICovCisKKy8qIFVzZSBhbiBhcnJheSBvZiBzcGlubG9ja3MgZm9yIG91ciBhdG9taWNfdHMuCisgKiBIYXNoIGZ1bmN0aW9uIHRvIGluZGV4IGludG8gYSBkaWZmZXJlbnQgU1BJTkxPQ0suCisgKiBTaW5jZSAiYSIgaXMgdXN1YWxseSBhbiBhZGRyZXNzLCB1c2Ugb25lIHNwaW5sb2NrIHBlciBjYWNoZWxpbmUuCisgKi8KKyMgIGRlZmluZSBBVE9NSUNfSEFTSF9TSVpFIDQKKyMgIGRlZmluZSBBVE9NSUNfSEFTSChhKSAoJihfX2F0b21pY19oYXNoWyAoKCh1bnNpZ25lZCBsb25nKSBhKS9MMV9DQUNIRV9CWVRFUykgJiAoQVRPTUlDX0hBU0hfU0laRS0xKSBdKSkKKworZXh0ZXJuIHNwaW5sb2NrX3QgX19hdG9taWNfaGFzaFtBVE9NSUNfSEFTSF9TSVpFXSBfX2xvY2tfYWxpZ25lZDsKKworLyogQ2FuJ3QgdXNlIF9yYXdfc3Bpbl9sb2NrX2lycSBiZWNhdXNlIG9mICNpbmNsdWRlIHByb2JsZW1zLCBzbworICogdGhpcyBpcyB0aGUgc3Vic3RpdHV0ZSAqLworI2RlZmluZSBfYXRvbWljX3NwaW5fbG9ja19pcnFzYXZlKGwsZikgZG8gewlcCisJc3BpbmxvY2tfdCAqcyA9IEFUT01JQ19IQVNIKGwpOwkJXAorCWxvY2FsX2lycV9zYXZlKGYpOwkJCVwKKwlfcmF3X3NwaW5fbG9jayhzKTsJCQlcCit9IHdoaWxlKDApCisKKyNkZWZpbmUgX2F0b21pY19zcGluX3VubG9ja19pcnFyZXN0b3JlKGwsZikgZG8gewlcCisJc3BpbmxvY2tfdCAqcyA9IEFUT01JQ19IQVNIKGwpOwkJCVwKKwlfcmF3X3NwaW5fdW5sb2NrKHMpOwkJCQlcCisJbG9jYWxfaXJxX3Jlc3RvcmUoZik7CQkJCVwKK30gd2hpbGUoMCkKKworCisjZWxzZQorIyAgZGVmaW5lIF9hdG9taWNfc3Bpbl9sb2NrX2lycXNhdmUobCxmKSBkbyB7IGxvY2FsX2lycV9zYXZlKGYpOyB9IHdoaWxlICgwKQorIyAgZGVmaW5lIF9hdG9taWNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShsLGYpIGRvIHsgbG9jYWxfaXJxX3Jlc3RvcmUoZik7IH0gd2hpbGUgKDApCisjZW5kaWYKKworLyogTm90ZSB0aGF0IHdlIG5lZWQgbm90IGxvY2sgcmVhZCBhY2Nlc3NlcyAtIGFsaWduZWQgd29yZCB3cml0ZXMvcmVhZHMKKyAqIGFyZSBhdG9taWMsIHNvIGEgcmVhZGVyIG5ldmVyIHNlZXMgdW5jb25zaXN0ZW50IHZhbHVlcy4KKyAqCisgKiBDYWNoZS1saW5lIGFsaWdubWVudCB3b3VsZCBjb25mbGljdCB3aXRoLCBmb3IgZXhhbXBsZSwgbGludXgvbW9kdWxlLmgKKyAqLworCit0eXBlZGVmIHN0cnVjdCB7IHZvbGF0aWxlIGludCBjb3VudGVyOyB9IGF0b21pY190OworCisKKy8qIFRoaXMgc2hvdWxkIGdldCBvcHRpbWl6ZWQgb3V0IHNpbmNlIGl0J3MgbmV2ZXIgY2FsbGVkLgorKiogT3IgZ2V0IGEgbGluayBlcnJvciBpZiB4Y2hnIGlzIHVzZWQgIndyb25nIi4KKyovCitleHRlcm4gdm9pZCBfX3hjaGdfY2FsbGVkX3dpdGhfYmFkX3BvaW50ZXIodm9pZCk7CisKKworLyogX194Y2hnMzIvNjQgZGVmaW5lZCBpbiBhcmNoL3BhcmlzYy9saWIvYml0b3BzLmMgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIF9feGNoZzgoY2hhciwgY2hhciAqKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9feGNoZzMyKGludCwgaW50ICopOworI2lmZGVmIF9fTFA2NF9fCitleHRlcm4gdW5zaWduZWQgbG9uZyBfX3hjaGc2NCh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nICopOworI2VuZGlmCisKKy8qIG9wdGltaXplciBiZXR0ZXIgZ2V0IHJpZCBvZiBzd2l0Y2ggc2luY2Ugc2l6ZSBpcyBhIGNvbnN0YW50ICovCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIF9feGNoZyh1bnNpZ25lZCBsb25nIHgsIF9fdm9sYXRpbGVfXyB2b2lkICogcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNpemUpCit7CisKKwlzd2l0Y2goc2l6ZSkgeworI2lmZGVmIF9fTFA2NF9fCisJY2FzZSA4OiByZXR1cm4gX194Y2hnNjQoeCwodW5zaWduZWQgbG9uZyAqKSBwdHIpOworI2VuZGlmCisJY2FzZSA0OiByZXR1cm4gX194Y2hnMzIoKGludCkgeCwgKGludCAqKSBwdHIpOworCWNhc2UgMTogcmV0dXJuIF9feGNoZzgoKGNoYXIpIHgsIChjaGFyICopIHB0cik7CisJfQorCV9feGNoZ19jYWxsZWRfd2l0aF9iYWRfcG9pbnRlcigpOworCXJldHVybiB4OworfQorCisKKy8qCisqKiBSRVZJU0lUIC0gQWJhbmRvbmVkIHVzZSBvZiBMRENXIGluIHhjaGcoKSBmb3Igbm93OgorKiogbyBuZWVkIHRvIHRlc3Qgc2l6ZW9mKCpwdHIpIHRvIGF2b2lkIGNsZWFyaW5nIGFkamFjZW50IGJ5dGVzCisqKiBvIGFuZCB3aGlsZSB3ZSBhcmUgYXQgaXQsIGNvdWxkIF9fTFA2NF9fIGNvZGUgdXNlIExEQ0QgdG9vPworKioKKyoqCWlmIChfX2J1aWx0aW5fY29uc3RhbnRfcCh4KSAmJiAoeCA9PSBOVUxMKSkKKyoqCQlpZiAoKCh1bnNpZ25lZCBsb25nKXAgJiAweGYpID09IDApCisqKgkJCXJldHVybiBfX2xkY3cocCk7CisqLworI2RlZmluZSB4Y2hnKHB0cix4KSBcCisJKChfX3R5cGVvZl9fKCoocHRyKSkpX194Y2hnKCh1bnNpZ25lZCBsb25nKSh4KSwocHRyKSxzaXplb2YoKihwdHIpKSkpCisKKworI2RlZmluZSBfX0hBVkVfQVJDSF9DTVBYQ0hHCTEKKworLyogYnVnIGNhdGNoZXIgZm9yIHdoZW4gdW5zdXBwb3J0ZWQgc2l6ZSBpcyB1c2VkIC0gd29uJ3QgbGluayAqLworZXh0ZXJuIHZvaWQgX19jbXB4Y2hnX2NhbGxlZF93aXRoX2JhZF9wb2ludGVyKHZvaWQpOworCisvKiBfX2NtcHhjaGdfdTMyL3U2NCBkZWZpbmVkIGluIGFyY2gvcGFyaXNjL2xpYi9iaXRvcHMuYyAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19jbXB4Y2hnX3UzMih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKm0sIHVuc2lnbmVkIGludCBvbGQsIHVuc2lnbmVkIGludCBuZXdfKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fY21weGNoZ191NjQodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqcHRyLCB1bnNpZ25lZCBsb25nIG9sZCwgdW5zaWduZWQgbG9uZyBuZXdfKTsKKworLyogZG9uJ3Qgd29ycnkuLi5vcHRpbWl6ZXIgd2lsbCBnZXQgcmlkIG9mIG1vc3Qgb2YgdGhpcyAqLworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZworX19jbXB4Y2hnKHZvbGF0aWxlIHZvaWQgKnB0ciwgdW5zaWduZWQgbG9uZyBvbGQsIHVuc2lnbmVkIGxvbmcgbmV3XywgaW50IHNpemUpCit7CisJc3dpdGNoKHNpemUpIHsKKyNpZmRlZiBfX0xQNjRfXworCWNhc2UgODogcmV0dXJuIF9fY21weGNoZ191NjQoKHVuc2lnbmVkIGxvbmcgKilwdHIsIG9sZCwgbmV3Xyk7CisjZW5kaWYKKwljYXNlIDQ6IHJldHVybiBfX2NtcHhjaGdfdTMyKCh1bnNpZ25lZCBpbnQgKilwdHIsICh1bnNpZ25lZCBpbnQpIG9sZCwgKHVuc2lnbmVkIGludCkgbmV3Xyk7CisJfQorCV9fY21weGNoZ19jYWxsZWRfd2l0aF9iYWRfcG9pbnRlcigpOworCXJldHVybiBvbGQ7Cit9CisKKyNkZWZpbmUgY21weGNoZyhwdHIsbyxuKQkJCQkJCSBcCisgICh7CQkJCQkJCQkJIFwKKyAgICAgX190eXBlb2ZfXygqKHB0cikpIF9vXyA9IChvKTsJCQkJCSBcCisgICAgIF9fdHlwZW9mX18oKihwdHIpKSBfbl8gPSAobik7CQkJCQkgXAorICAgICAoX190eXBlb2ZfXygqKHB0cikpKSBfX2NtcHhjaGcoKHB0ciksICh1bnNpZ25lZCBsb25nKV9vXywJCSBcCisJCQkJICAgICh1bnNpZ25lZCBsb25nKV9uXywgc2l6ZW9mKCoocHRyKSkpOyBcCisgIH0pCisKKworCisvKiBJdCdzIHBvc3NpYmxlIHRvIHJlZHVjZSBhbGwgYXRvbWljIG9wZXJhdGlvbnMgdG8gZWl0aGVyCisgKiBfX2F0b21pY19hZGRfcmV0dXJuLCBhdG9taWNfc2V0IGFuZCBhdG9taWNfcmVhZCAodGhlIGxhdHRlcgorICogaXMgdGhlcmUgb25seSBmb3IgY29uc2lzdGVuY3kpLgorICovCisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX2F0b21pY19hZGRfcmV0dXJuKGludCBpLCBhdG9taWNfdCAqdikKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJX2F0b21pY19zcGluX2xvY2tfaXJxc2F2ZSh2LCBmbGFncyk7CisKKwlyZXQgPSAodi0+Y291bnRlciArPSBpKTsKKworCV9hdG9taWNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSh2LCBmbGFncyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBhdG9taWNfc2V0KGF0b21pY190ICp2LCBpbnQgaSkgCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlfYXRvbWljX3NwaW5fbG9ja19pcnFzYXZlKHYsIGZsYWdzKTsKKworCXYtPmNvdW50ZXIgPSBpOworCisJX2F0b21pY19zcGluX3VubG9ja19pcnFyZXN0b3JlKHYsIGZsYWdzKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IGF0b21pY19yZWFkKGNvbnN0IGF0b21pY190ICp2KQoreworCXJldHVybiB2LT5jb3VudGVyOworfQorCisvKiBleHBvcnRlZCBpbnRlcmZhY2UgKi8KKworI2RlZmluZSBhdG9taWNfYWRkKGksdikJKCh2b2lkKShfX2F0b21pY19hZGRfcmV0dXJuKCAoKGludClpKSwodikpKSkKKyNkZWZpbmUgYXRvbWljX3N1YihpLHYpCSgodm9pZCkoX19hdG9taWNfYWRkX3JldHVybigtKChpbnQpaSksKHYpKSkpCisjZGVmaW5lIGF0b21pY19pbmModikJKCh2b2lkKShfX2F0b21pY19hZGRfcmV0dXJuKCAgIDEsKHYpKSkpCisjZGVmaW5lIGF0b21pY19kZWModikJKCh2b2lkKShfX2F0b21pY19hZGRfcmV0dXJuKCAgLTEsKHYpKSkpCisKKyNkZWZpbmUgYXRvbWljX2FkZF9yZXR1cm4oaSx2KQkoX19hdG9taWNfYWRkX3JldHVybiggKChpbnQpaSksKHYpKSkKKyNkZWZpbmUgYXRvbWljX3N1Yl9yZXR1cm4oaSx2KQkoX19hdG9taWNfYWRkX3JldHVybigtKChpbnQpaSksKHYpKSkKKyNkZWZpbmUgYXRvbWljX2luY19yZXR1cm4odikJKF9fYXRvbWljX2FkZF9yZXR1cm4oICAgMSwodikpKQorI2RlZmluZSBhdG9taWNfZGVjX3JldHVybih2KQkoX19hdG9taWNfYWRkX3JldHVybiggIC0xLCh2KSkpCisKKyNkZWZpbmUgYXRvbWljX2FkZF9uZWdhdGl2ZShhLCB2KQkoYXRvbWljX2FkZF9yZXR1cm4oKGEpLCAodikpIDwgMCkKKworLyoKKyAqIGF0b21pY19pbmNfYW5kX3Rlc3QgLSBpbmNyZW1lbnQgYW5kIHRlc3QKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqCisgKiBBdG9taWNhbGx5IGluY3JlbWVudHMgQHYgYnkgMQorICogYW5kIHJldHVybnMgdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIHplcm8sIG9yIGZhbHNlIGZvciBhbGwKKyAqIG90aGVyIGNhc2VzLgorICovCisjZGVmaW5lIGF0b21pY19pbmNfYW5kX3Rlc3QodikgKGF0b21pY19pbmNfcmV0dXJuKHYpID09IDApCisKKyNkZWZpbmUgYXRvbWljX2RlY19hbmRfdGVzdCh2KQkoYXRvbWljX2RlY19yZXR1cm4odikgPT0gMCkKKworI2RlZmluZSBBVE9NSUNfSU5JVChpKQl7IChpKSB9CisKKyNkZWZpbmUgc21wX21iX19iZWZvcmVfYXRvbWljX2RlYygpCXNtcF9tYigpCisjZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2RlYygpCXNtcF9tYigpCisjZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19pbmMoKQlzbXBfbWIoKQorI2RlZmluZSBzbXBfbWJfX2FmdGVyX2F0b21pY19pbmMoKQlzbXBfbWIoKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9iaXRvcHMuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9iaXRvcHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjhlNWVmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL2JpdG9wcy5oCkBAIC0wLDAgKzEsNTIwIEBACisjaWZuZGVmIF9QQVJJU0NfQklUT1BTX0gKKyNkZWZpbmUgX1BBUklTQ19CSVRPUFNfSAorCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKworLyoKKyAqIEhQLVBBUklTQyBzcGVjaWZpYyBiaXQgb3BlcmF0aW9ucworICogZm9yIGEgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgdGhlIGZ1bmN0aW9ucyBwbGVhc2UgcmVmZXIKKyAqIHRvIGluY2x1ZGUvYXNtLWkzODYvYml0b3BzLmggb3Iga2VybmVsZG9jCisgKi8KKworI2lmZGVmIF9fTFA2NF9fCisjICAgZGVmaW5lIFNISUZUX1BFUl9MT05HIDYKKyNpZm5kZWYgQklUU19QRVJfTE9ORworIyAgIGRlZmluZSBCSVRTX1BFUl9MT05HIDY0CisjZW5kaWYKKyNlbHNlCisjICAgZGVmaW5lIFNISUZUX1BFUl9MT05HIDUKKyNpZm5kZWYgQklUU19QRVJfTE9ORworIyAgIGRlZmluZSBCSVRTX1BFUl9MT05HIDMyCisjZW5kaWYKKyNlbmRpZgorCisjZGVmaW5lIENIT1BfU0hJRlRDT1VOVCh4KSAoKHgpICYgKEJJVFNfUEVSX0xPTkcgLSAxKSkKKworCisjZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpICAgICAgc21wX21iKCkKKyNkZWZpbmUgc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKSAgICAgICBzbXBfbWIoKQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHNldF9iaXQoaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICogYWRkcmVzcykKK3sKKwl1bnNpZ25lZCBsb25nIG1hc2s7CisJdW5zaWduZWQgbG9uZyAqYWRkciA9ICh1bnNpZ25lZCBsb25nICopIGFkZHJlc3M7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWFkZHIgKz0gKG5yID4+IFNISUZUX1BFUl9MT05HKTsKKwltYXNrID0gMUwgPDwgQ0hPUF9TSElGVENPVU5UKG5yKTsKKwlfYXRvbWljX3NwaW5fbG9ja19pcnFzYXZlKGFkZHIsIGZsYWdzKTsKKwkqYWRkciB8PSBtYXNrOworCV9hdG9taWNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShhZGRyLCBmbGFncyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19zZXRfYml0KGludCBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqIGFkZHJlc3MpCit7CisJdW5zaWduZWQgbG9uZyBtYXNrOworCXVuc2lnbmVkIGxvbmcgKmFkZHIgPSAodW5zaWduZWQgbG9uZyAqKSBhZGRyZXNzOworCisJYWRkciArPSAobnIgPj4gU0hJRlRfUEVSX0xPTkcpOworCW1hc2sgPSAxTCA8PCBDSE9QX1NISUZUQ09VTlQobnIpOworCSphZGRyIHw9IG1hc2s7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgY2xlYXJfYml0KGludCBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqIGFkZHJlc3MpCit7CisJdW5zaWduZWQgbG9uZyBtYXNrOworCXVuc2lnbmVkIGxvbmcgKmFkZHIgPSAodW5zaWduZWQgbG9uZyAqKSBhZGRyZXNzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlhZGRyICs9IChuciA+PiBTSElGVF9QRVJfTE9ORyk7CisJbWFzayA9IDFMIDw8IENIT1BfU0hJRlRDT1VOVChucik7CisJX2F0b21pY19zcGluX2xvY2tfaXJxc2F2ZShhZGRyLCBmbGFncyk7CisJKmFkZHIgJj0gfm1hc2s7CisJX2F0b21pY19zcGluX3VubG9ja19pcnFyZXN0b3JlKGFkZHIsIGZsYWdzKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX2NsZWFyX2JpdCh1bnNpZ25lZCBsb25nIG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICogYWRkcmVzcykKK3sKKwl1bnNpZ25lZCBsb25nIG1hc2s7CisJdW5zaWduZWQgbG9uZyAqYWRkciA9ICh1bnNpZ25lZCBsb25nICopIGFkZHJlc3M7CisKKwlhZGRyICs9IChuciA+PiBTSElGVF9QRVJfTE9ORyk7CisJbWFzayA9IDFMIDw8IENIT1BfU0hJRlRDT1VOVChucik7CisJKmFkZHIgJj0gfm1hc2s7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgY2hhbmdlX2JpdChpbnQgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKiBhZGRyZXNzKQoreworCXVuc2lnbmVkIGxvbmcgbWFzazsKKwl1bnNpZ25lZCBsb25nICphZGRyID0gKHVuc2lnbmVkIGxvbmcgKikgYWRkcmVzczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJYWRkciArPSAobnIgPj4gU0hJRlRfUEVSX0xPTkcpOworCW1hc2sgPSAxTCA8PCBDSE9QX1NISUZUQ09VTlQobnIpOworCV9hdG9taWNfc3Bpbl9sb2NrX2lycXNhdmUoYWRkciwgZmxhZ3MpOworCSphZGRyIF49IG1hc2s7CisJX2F0b21pY19zcGluX3VubG9ja19pcnFyZXN0b3JlKGFkZHIsIGZsYWdzKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX2NoYW5nZV9iaXQoaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICogYWRkcmVzcykKK3sKKwl1bnNpZ25lZCBsb25nIG1hc2s7CisJdW5zaWduZWQgbG9uZyAqYWRkciA9ICh1bnNpZ25lZCBsb25nICopIGFkZHJlc3M7CisKKwlhZGRyICs9IChuciA+PiBTSElGVF9QRVJfTE9ORyk7CisJbWFzayA9IDFMIDw8IENIT1BfU0hJRlRDT1VOVChucik7CisJKmFkZHIgXj0gbWFzazsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IHRlc3RfYW5kX3NldF9iaXQoaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICogYWRkcmVzcykKK3sKKwl1bnNpZ25lZCBsb25nIG1hc2s7CisJdW5zaWduZWQgbG9uZyAqYWRkciA9ICh1bnNpZ25lZCBsb25nICopIGFkZHJlc3M7CisJaW50IG9sZGJpdDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJYWRkciArPSAobnIgPj4gU0hJRlRfUEVSX0xPTkcpOworCW1hc2sgPSAxTCA8PCBDSE9QX1NISUZUQ09VTlQobnIpOworCV9hdG9taWNfc3Bpbl9sb2NrX2lycXNhdmUoYWRkciwgZmxhZ3MpOworCW9sZGJpdCA9ICgqYWRkciAmIG1hc2spID8gMSA6IDA7CisJKmFkZHIgfD0gbWFzazsKKwlfYXRvbWljX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoYWRkciwgZmxhZ3MpOworCisJcmV0dXJuIG9sZGJpdDsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fdGVzdF9hbmRfc2V0X2JpdChpbnQgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKiBhZGRyZXNzKQoreworCXVuc2lnbmVkIGxvbmcgbWFzazsKKwl1bnNpZ25lZCBsb25nICphZGRyID0gKHVuc2lnbmVkIGxvbmcgKikgYWRkcmVzczsKKwlpbnQgb2xkYml0OworCisJYWRkciArPSAobnIgPj4gU0hJRlRfUEVSX0xPTkcpOworCW1hc2sgPSAxTCA8PCBDSE9QX1NISUZUQ09VTlQobnIpOworCW9sZGJpdCA9ICgqYWRkciAmIG1hc2spID8gMSA6IDA7CisJKmFkZHIgfD0gbWFzazsKKworCXJldHVybiBvbGRiaXQ7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCB0ZXN0X2FuZF9jbGVhcl9iaXQoaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICogYWRkcmVzcykKK3sKKwl1bnNpZ25lZCBsb25nIG1hc2s7CisJdW5zaWduZWQgbG9uZyAqYWRkciA9ICh1bnNpZ25lZCBsb25nICopIGFkZHJlc3M7CisJaW50IG9sZGJpdDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJYWRkciArPSAobnIgPj4gU0hJRlRfUEVSX0xPTkcpOworCW1hc2sgPSAxTCA8PCBDSE9QX1NISUZUQ09VTlQobnIpOworCV9hdG9taWNfc3Bpbl9sb2NrX2lycXNhdmUoYWRkciwgZmxhZ3MpOworCW9sZGJpdCA9ICgqYWRkciAmIG1hc2spID8gMSA6IDA7CisJKmFkZHIgJj0gfm1hc2s7CisJX2F0b21pY19zcGluX3VubG9ja19pcnFyZXN0b3JlKGFkZHIsIGZsYWdzKTsKKworCXJldHVybiBvbGRiaXQ7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX3Rlc3RfYW5kX2NsZWFyX2JpdChpbnQgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKiBhZGRyZXNzKQoreworCXVuc2lnbmVkIGxvbmcgbWFzazsKKwl1bnNpZ25lZCBsb25nICphZGRyID0gKHVuc2lnbmVkIGxvbmcgKikgYWRkcmVzczsKKwlpbnQgb2xkYml0OworCisJYWRkciArPSAobnIgPj4gU0hJRlRfUEVSX0xPTkcpOworCW1hc2sgPSAxTCA8PCBDSE9QX1NISUZUQ09VTlQobnIpOworCW9sZGJpdCA9ICgqYWRkciAmIG1hc2spID8gMSA6IDA7CisJKmFkZHIgJj0gfm1hc2s7CisKKwlyZXR1cm4gb2xkYml0OworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgdGVzdF9hbmRfY2hhbmdlX2JpdChpbnQgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKiBhZGRyZXNzKQoreworCXVuc2lnbmVkIGxvbmcgbWFzazsKKwl1bnNpZ25lZCBsb25nICphZGRyID0gKHVuc2lnbmVkIGxvbmcgKikgYWRkcmVzczsKKwlpbnQgb2xkYml0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlhZGRyICs9IChuciA+PiBTSElGVF9QRVJfTE9ORyk7CisJbWFzayA9IDFMIDw8IENIT1BfU0hJRlRDT1VOVChucik7CisJX2F0b21pY19zcGluX2xvY2tfaXJxc2F2ZShhZGRyLCBmbGFncyk7CisJb2xkYml0ID0gKCphZGRyICYgbWFzaykgPyAxIDogMDsKKwkqYWRkciBePSBtYXNrOworCV9hdG9taWNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShhZGRyLCBmbGFncyk7CisKKwlyZXR1cm4gb2xkYml0OworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX190ZXN0X2FuZF9jaGFuZ2VfYml0KGludCBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqIGFkZHJlc3MpCit7CisJdW5zaWduZWQgbG9uZyBtYXNrOworCXVuc2lnbmVkIGxvbmcgKmFkZHIgPSAodW5zaWduZWQgbG9uZyAqKSBhZGRyZXNzOworCWludCBvbGRiaXQ7CisKKwlhZGRyICs9IChuciA+PiBTSElGVF9QRVJfTE9ORyk7CisJbWFzayA9IDFMIDw8IENIT1BfU0hJRlRDT1VOVChucik7CisJb2xkYml0ID0gKCphZGRyICYgbWFzaykgPyAxIDogMDsKKwkqYWRkciBePSBtYXNrOworCisJcmV0dXJuIG9sZGJpdDsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IHRlc3RfYml0KGludCBuciwgY29uc3Qgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcmVzcykKK3sKKwl1bnNpZ25lZCBsb25nIG1hc2s7CisJY29uc3QgdW5zaWduZWQgbG9uZyAqYWRkciA9IChjb25zdCB1bnNpZ25lZCBsb25nICopYWRkcmVzczsKKwkKKwlhZGRyICs9IChuciA+PiBTSElGVF9QRVJfTE9ORyk7CisJbWFzayA9IDFMIDw8IENIT1BfU0hJRlRDT1VOVChucik7CisJCisJcmV0dXJuICEhKCphZGRyICYgbWFzayk7Cit9CisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKy8qKgorICogX19mZnMgLSBmaW5kIGZpcnN0IGJpdCBpbiB3b3JkLiByZXR1cm5zIDAgdG8gIkJJVFNfUEVSX0xPTkctMSIuCisgKiBAd29yZDogVGhlIHdvcmQgdG8gc2VhcmNoCisgKgorICogX19mZnMoKSByZXR1cm4gaXMgdW5kZWZpbmVkIGlmIG5vIGJpdCBpcyBzZXQuCisgKgorICogMzItYml0IGZhc3QgX19mZnMgYnkgTGFNb250IEpvbmVzICJsYW1vbnQgQXQgaHAgY29tIi4KKyAqIDY0LWJpdCBlbmhhbmNlbWVudCBieSBHcmFudCBHcnVuZGxlciAiZ3J1bmRsZXIgQXQgcGFyaXNjLWxpbnV4IG9yZyIuCisgKiAod2l0aCBoZWxwIGZyb20gd2lsbHkvamVqYiB0byBnZXQgdGhlIHNlbWFudGljcyByaWdodCkKKyAqCisgKiBUaGlzIGFsZ29yaXRobSBhdm9pZHMgYnJhbmNoZXMgYnkgbWFraW5nIHVzZSBvZiBudWxsaWZpY2F0aW9uLgorICogT25lIHNpZGUgZWZmZWN0IG9mICJleHRyIiBpbnN0cnVjdGlvbnMgaXMgaXQgc2V0cyBQU1dbTl0gYml0LgorICogSG93IFBTV1tOXSAobnVsbGlmeSBuZXh0IGluc24pIGdldHMgc2V0IGlzIGRldGVybWluZWQgYnkgdGhlIAorICogImNvbmRpdGlvbiIgZmllbGQgKGVnICI8PiIgb3IgIlRSIiBiZWxvdykgaW4gdGhlIGV4dHIqIGluc24uCisgKiBPbmx5IHRoZSAxc3QgYW5kIG9uZSBvZiBlaXRoZXIgdGhlIDJjZCBvciAzcmQgaW5zbiB3aWxsIGdldCBleGVjdXRlZC4KKyAqIEVhY2ggc2V0IG9mIDMgaW5zbiB3aWxsIGdldCBleGVjdXRlZCBpbiAyIGN5Y2xlcyBvbiBQQTh4MDAgdnMgMTYgb3Igc28KKyAqIGN5Y2xlcyBmb3IgZWFjaCBtaXNwcmVkaWN0ZWQgYnJhbmNoLgorICovCisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgX19mZnModW5zaWduZWQgbG9uZyB4KQoreworCXVuc2lnbmVkIGxvbmcgcmV0OworCisJX19hc21fXygKKyNpZiBCSVRTX1BFUl9MT05HID4gMzIKKwkJIiBsZGkgICAgICAgNjMsJTFcbiIKKwkJIiBleHRyZCx1LCo8PiAgJTAsNjMsMzIsJSVyMFxuIgorCQkiIGV4dHJkLHUsKlRSICAlMCwzMSwzMiwlMFxuIgkvKiBtb3ZlIHRvcCAzMi1iaXRzIGRvd24gKi8KKwkJIiBhZGRpICAgIC0zMiwlMSwlMVxuIgorI2Vsc2UKKwkJIiBsZGkgICAgICAgMzEsJTFcbiIKKyNlbmRpZgorCQkiIGV4dHJ1LDw+ICAlMCwzMSwxNiwlJXIwXG4iCisJCSIgZXh0cnUsVFIgICUwLDE1LDE2LCUwXG4iCS8qIHh4eHgwMDAwIC0+IDAwMDB4eHh4ICovCisJCSIgYWRkaSAgICAtMTYsJTEsJTFcbiIKKwkJIiBleHRydSw8PiAgJTAsMzEsOCwlJXIwXG4iCisJCSIgZXh0cnUsVFIgICUwLDIzLDgsJTBcbiIJLyogMDAwMHh4MDAgLT4gMDAwMDAweHggKi8KKwkJIiBhZGRpICAgIC04LCUxLCUxXG4iCisJCSIgZXh0cnUsPD4gICUwLDMxLDQsJSVyMFxuIgorCQkiIGV4dHJ1LFRSICAlMCwyNyw0LCUwXG4iCS8qIDAwMDAwMHgwIC0+IDAwMDAwMDB4ICovCisJCSIgYWRkaSAgICAtNCwlMSwlMVxuIgorCQkiIGV4dHJ1LDw+ICAlMCwzMSwyLCUlcjBcbiIKKwkJIiBleHRydSxUUiAgJTAsMjksMiwlMFxuIgkvKiAwMDAwMDAweSwgMTEwMGIgLT4gMDAxMWIgKi8KKwkJIiBhZGRpICAgIC0yLCUxLCUxXG4iCisJCSIgZXh0cnUsPSAgJTAsMzEsMSwlJXIwXG4iCS8qIGNoZWNrIGxhc3QgYml0ICovCisJCSIgYWRkaSAgICAtMSwlMSwlMVxuIgorCQkJOiAiK3IiICh4KSwgIj1yIiAocmV0KSApOworCXJldHVybiByZXQ7Cit9CisKKy8qIFVuZGVmaW5lZCBpZiBubyBiaXQgaXMgemVyby4gKi8KKyNkZWZpbmUgZmZ6KHgpCV9fZmZzKH54KQorCisvKgorICogZmZzOiBmaW5kIGZpcnN0IGJpdCBzZXQuIHJldHVybnMgMSB0byBCSVRTX1BFUl9MT05HIG9yIDAgKGlmIG5vbmUgc2V0KQorICogVGhpcyBpcyBkZWZpbmVkIHRoZSBzYW1lIHdheSBhcyB0aGUgbGliYyBhbmQgY29tcGlsZXIgYnVpbHRpbgorICogZmZzIHJvdXRpbmVzLCB0aGVyZWZvcmUgZGlmZmVycyBpbiBzcGlyaXQgZnJvbSB0aGUgYWJvdmUgZmZ6IChtYW4gZmZzKS4KKyAqLworc3RhdGljIF9faW5saW5lX18gaW50IGZmcyhpbnQgeCkKK3sKKwlyZXR1cm4geCA/IChfX2ZmcygodW5zaWduZWQgbG9uZyl4KSArIDEpIDogMDsKK30KKworLyoKKyAqIGZsczogZmluZCBsYXN0IChtb3N0IHNpZ25pZmljYW50KSBiaXQgc2V0LgorICogZmxzKDApID0gMCwgZmxzKDEpID0gMSwgZmxzKDB4ODAwMDAwMDApID0gMzIuCisgKi8KKworc3RhdGljIF9faW5saW5lX18gaW50IGZscyhpbnQgeCkKK3sKKwlpbnQgcmV0OworCWlmICgheCkKKwkJcmV0dXJuIDA7CisKKwlfX2FzbV9fKAorCSIJbGRpCQkxLCUxXG4iCisJIglleHRydSw8PgklMCwxNSwxNiwlJXIwXG4iCisJIgl6ZGVwLFRSCQklMCwxNSwxNiwlMFxuIgkJLyogeHh4eDAwMDAgKi8KKwkiCWFkZGkJCTE2LCUxLCUxXG4iCisJIglleHRydSw8PgklMCw3LDgsJSVyMFxuIgorCSIJemRlcCxUUgkJJTAsMjMsMjQsJTBcbiIJCS8qIHh4MDAwMDAwICovCisJIglhZGRpCQk4LCUxLCUxXG4iCisJIglleHRydSw8PgklMCwzLDQsJSVyMFxuIgorCSIJemRlcCxUUgkJJTAsMjcsMjgsJTBcbiIJCS8qIHgwMDAwMDAwICovCisJIglhZGRpCQk0LCUxLCUxXG4iCisJIglleHRydSw8PgklMCwxLDIsJSVyMFxuIgorCSIJemRlcCxUUgkJJTAsMjksMzAsJTBcbiIJCS8qIHkwMDAwMDAwICh5JjMgPSAwKSAqLworCSIJYWRkaQkJMiwlMSwlMVxuIgorCSIJZXh0cnUsPQkJJTAsMCwxLCUlcjBcbiIKKwkiCWFkZGkJCTEsJTEsJTFcbiIJCS8qIGlmIHkgJiA4LCBhZGQgMSAqLworCQk6ICIrciIgKHgpLCAiPXIiIChyZXQpICk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogaHdlaWdodE46IHJldHVybnMgdGhlIGhhbW1pbmcgd2VpZ2h0IChpLmUuIHRoZSBudW1iZXIKKyAqIG9mIGJpdHMgc2V0KSBvZiBhIE4tYml0IHdvcmQKKyAqLworI2RlZmluZSBod2VpZ2h0NjQoeCkJCQkJCQlcCisoewkJCQkJCQkJXAorCXVuc2lnbmVkIGxvbmcgX194ID0gKHgpOwkJCQlcCisJdW5zaWduZWQgaW50IF9fdzsJCQkJCVwKKwlfX3cgPSBnZW5lcmljX2h3ZWlnaHQzMigodW5zaWduZWQgaW50KSBfX3gpOwkJXAorCV9fdyArPSBnZW5lcmljX2h3ZWlnaHQzMigodW5zaWduZWQgaW50KSAoX194Pj4zMikpOwlcCisJX193OwkJCQkJCQlcCit9KQorI2RlZmluZSBod2VpZ2h0MzIoeCkgZ2VuZXJpY19od2VpZ2h0MzIoeCkKKyNkZWZpbmUgaHdlaWdodDE2KHgpIGdlbmVyaWNfaHdlaWdodDE2KHgpCisjZGVmaW5lIGh3ZWlnaHQ4KHgpIGdlbmVyaWNfaHdlaWdodDgoeCkKKworLyoKKyAqIEV2ZXJ5IGFyY2hpdGVjdHVyZSBtdXN0IGRlZmluZSB0aGlzIGZ1bmN0aW9uLiBJdCdzIHRoZSBmYXN0ZXN0CisgKiB3YXkgb2Ygc2VhcmNoaW5nIGEgMTQwLWJpdCBiaXRtYXAgd2hlcmUgdGhlIGZpcnN0IDEwMCBiaXRzIGFyZQorICogdW5saWtlbHkgdG8gYmUgc2V0LiBJdCdzIGd1YXJhbnRlZWQgdGhhdCBhdCBsZWFzdCBvbmUgb2YgdGhlIDE0MAorICogYml0cyBpcyBjbGVhcmVkLgorICovCitzdGF0aWMgaW5saW5lIGludCBzY2hlZF9maW5kX2ZpcnN0X2JpdChjb25zdCB1bnNpZ25lZCBsb25nICpiKQoreworI2lmbmRlZiBfX0xQNjRfXworCWlmICh1bmxpa2VseShiWzBdKSkKKwkJcmV0dXJuIF9fZmZzKGJbMF0pOworCWlmICh1bmxpa2VseShiWzFdKSkKKwkJcmV0dXJuIF9fZmZzKGJbMV0pICsgMzI7CisJaWYgKHVubGlrZWx5KGJbMl0pKQorCQlyZXR1cm4gX19mZnMoYlsyXSkgKyA2NDsKKwlpZiAoYlszXSkKKwkJcmV0dXJuIF9fZmZzKGJbM10pICsgOTY7CisJcmV0dXJuIF9fZmZzKGJbNF0pICsgMTI4OworI2Vsc2UKKwlpZiAodW5saWtlbHkoYlswXSkpCisJCXJldHVybiBfX2ZmcyhiWzBdKTsKKwlpZiAodW5saWtlbHkoKCh1bnNpZ25lZCBpbnQpYlsxXSkpKQorCQlyZXR1cm4gX19mZnMoYlsxXSkgKyA2NDsKKwlpZiAoYlsxXSA+PiAzMikKKwkJcmV0dXJuIF9fZmZzKGJbMV0gPj4gMzIpICsgOTY7CisJcmV0dXJuIF9fZmZzKGJbMl0pICsgMTI4OworI2VuZGlmCit9CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKy8qCisgKiBUaGlzIGltcGxlbWVudGF0aW9uIG9mIGZpbmRfe2ZpcnN0LG5leHR9X3plcm9fYml0IHdhcyBzdG9sZW4gZnJvbQorICogTGludXMnIGFzbS1hbHBoYS9iaXRvcHMuaC4KKyAqLworI2RlZmluZSBmaW5kX2ZpcnN0X3plcm9fYml0KGFkZHIsIHNpemUpIFwKKwlmaW5kX25leHRfemVyb19iaXQoKGFkZHIpLCAoc2l6ZSksIDApCisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgZmluZF9uZXh0X3plcm9fYml0KGNvbnN0IHZvaWQgKiBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQoreworCWNvbnN0IHVuc2lnbmVkIGxvbmcgKiBwID0gKCh1bnNpZ25lZCBsb25nICopIGFkZHIpICsgKG9mZnNldCA+PiBTSElGVF9QRVJfTE9ORyk7CisJdW5zaWduZWQgbG9uZyByZXN1bHQgPSBvZmZzZXQgJiB+KEJJVFNfUEVSX0xPTkctMSk7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlpZiAob2Zmc2V0ID49IHNpemUpCisJCXJldHVybiBzaXplOworCXNpemUgLT0gcmVzdWx0OworCW9mZnNldCAmPSAoQklUU19QRVJfTE9ORy0xKTsKKwlpZiAob2Zmc2V0KSB7CisJCXRtcCA9ICoocCsrKTsKKwkJdG1wIHw9IH4wVUwgPj4gKEJJVFNfUEVSX0xPTkctb2Zmc2V0KTsKKwkJaWYgKHNpemUgPCBCSVRTX1BFUl9MT05HKQorCQkJZ290byBmb3VuZF9maXJzdDsKKwkJaWYgKH50bXApCisJCQlnb3RvIGZvdW5kX21pZGRsZTsKKwkJc2l6ZSAtPSBCSVRTX1BFUl9MT05HOworCQlyZXN1bHQgKz0gQklUU19QRVJfTE9ORzsKKwl9CisJd2hpbGUgKHNpemUgJiB+KEJJVFNfUEVSX0xPTkcgLTEpKSB7CisJCWlmICh+KHRtcCA9ICoocCsrKSkpCisJCQlnb3RvIGZvdW5kX21pZGRsZTsKKwkJcmVzdWx0ICs9IEJJVFNfUEVSX0xPTkc7CisJCXNpemUgLT0gQklUU19QRVJfTE9ORzsKKwl9CisJaWYgKCFzaXplKQorCQlyZXR1cm4gcmVzdWx0OworCXRtcCA9ICpwOworZm91bmRfZmlyc3Q6CisJdG1wIHw9IH4wVUwgPDwgc2l6ZTsKK2ZvdW5kX21pZGRsZToKKwlyZXR1cm4gcmVzdWx0ICsgZmZ6KHRtcCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgZmluZF9uZXh0X2JpdChjb25zdCB1bnNpZ25lZCBsb25nICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQoreworCWNvbnN0IHVuc2lnbmVkIGxvbmcgKnAgPSBhZGRyICsgKG9mZnNldCA+PiA2KTsKKwl1bnNpZ25lZCBsb25nIHJlc3VsdCA9IG9mZnNldCAmIH4oQklUU19QRVJfTE9ORy0xKTsKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCWlmIChvZmZzZXQgPj0gc2l6ZSkKKwkJcmV0dXJuIHNpemU7CisJc2l6ZSAtPSByZXN1bHQ7CisJb2Zmc2V0ICY9IChCSVRTX1BFUl9MT05HLTEpOworCWlmIChvZmZzZXQpIHsKKwkJdG1wID0gKihwKyspOworCQl0bXAgJj0gKH4wVUwgPDwgb2Zmc2V0KTsKKwkJaWYgKHNpemUgPCBCSVRTX1BFUl9MT05HKQorCQkJZ290byBmb3VuZF9maXJzdDsKKwkJaWYgKHRtcCkKKwkJCWdvdG8gZm91bmRfbWlkZGxlOworCQlzaXplIC09IEJJVFNfUEVSX0xPTkc7CisJCXJlc3VsdCArPSBCSVRTX1BFUl9MT05HOworCX0KKwl3aGlsZSAoc2l6ZSAmIH4oQklUU19QRVJfTE9ORy0xKSkgeworCQlpZiAoKHRtcCA9ICoocCsrKSkpCisJCQlnb3RvIGZvdW5kX21pZGRsZTsKKwkJcmVzdWx0ICs9IEJJVFNfUEVSX0xPTkc7CisJCXNpemUgLT0gQklUU19QRVJfTE9ORzsKKwl9CisJaWYgKCFzaXplKQorCQlyZXR1cm4gcmVzdWx0OworCXRtcCA9ICpwOworCitmb3VuZF9maXJzdDoKKwl0bXAgJj0gKH4wVUwgPj4gKEJJVFNfUEVSX0xPTkcgLSBzaXplKSk7CisJaWYgKHRtcCA9PSAwVUwpICAgICAgICAvKiBBcmUgYW55IGJpdHMgc2V0PyAqLworCQlyZXR1cm4gcmVzdWx0ICsgc2l6ZTsgLyogTm9wZS4gKi8KK2ZvdW5kX21pZGRsZToKKwlyZXR1cm4gcmVzdWx0ICsgX19mZnModG1wKTsKK30KKworLyoqCisgKiBmaW5kX2ZpcnN0X2JpdCAtIGZpbmQgdGhlIGZpcnN0IHNldCBiaXQgaW4gYSBtZW1vcnkgcmVnaW9uCisgKiBAYWRkcjogVGhlIGFkZHJlc3MgdG8gc3RhcnQgdGhlIHNlYXJjaCBhdAorICogQHNpemU6IFRoZSBtYXhpbXVtIHNpemUgdG8gc2VhcmNoCisgKgorICogUmV0dXJucyB0aGUgYml0LW51bWJlciBvZiB0aGUgZmlyc3Qgc2V0IGJpdCwgbm90IHRoZSBudW1iZXIgb2YgdGhlIGJ5dGUKKyAqIGNvbnRhaW5pbmcgYSBiaXQuCisgKi8KKyNkZWZpbmUgZmluZF9maXJzdF9iaXQoYWRkciwgc2l6ZSkgXAorICAgICAgICBmaW5kX25leHRfYml0KChhZGRyKSwgKHNpemUpLCAwKQorCisjZGVmaW5lIF9FWFQyX0hBVkVfQVNNX0JJVE9QU18KKworI2lmZGVmIF9fS0VSTkVMX18KKy8qCisgKiB0ZXN0X2FuZF97c2V0LGNsZWFyfV9iaXQgZ3VhcmFudGVlIGF0b21pY2l0eSB3aXRob3V0CisgKiBkaXNhYmxpbmcgaW50ZXJydXB0cy4KKyAqLworI2lmZGVmIF9fTFA2NF9fCisjZGVmaW5lIGV4dDJfc2V0X2JpdChuciwgYWRkcikJCV9fdGVzdF9hbmRfc2V0X2JpdCgobnIpIF4gMHgzOCwgKHVuc2lnbmVkIGxvbmcgKilhZGRyKQorI2RlZmluZSBleHQyX3NldF9iaXRfYXRvbWljKGwsbnIsYWRkcikgIHRlc3RfYW5kX3NldF9iaXQoKG5yKSBeIDB4MzgsICh1bnNpZ25lZCBsb25nICopYWRkcikKKyNkZWZpbmUgZXh0Ml9jbGVhcl9iaXQobnIsIGFkZHIpCV9fdGVzdF9hbmRfY2xlYXJfYml0KChucikgXiAweDM4LCAodW5zaWduZWQgbG9uZyAqKWFkZHIpCisjZGVmaW5lIGV4dDJfY2xlYXJfYml0X2F0b21pYyhsLG5yLGFkZHIpIHRlc3RfYW5kX2NsZWFyX2JpdCgobnIpIF4gMHgzOCwgKHVuc2lnbmVkIGxvbmcgKilhZGRyKQorI2Vsc2UKKyNkZWZpbmUgZXh0Ml9zZXRfYml0KG5yLCBhZGRyKQkJX190ZXN0X2FuZF9zZXRfYml0KChucikgXiAweDE4LCAodW5zaWduZWQgbG9uZyAqKWFkZHIpCisjZGVmaW5lIGV4dDJfc2V0X2JpdF9hdG9taWMobCxucixhZGRyKSAgdGVzdF9hbmRfc2V0X2JpdCgobnIpIF4gMHgxOCwgKHVuc2lnbmVkIGxvbmcgKilhZGRyKQorI2RlZmluZSBleHQyX2NsZWFyX2JpdChuciwgYWRkcikJX190ZXN0X2FuZF9jbGVhcl9iaXQoKG5yKSBeIDB4MTgsICh1bnNpZ25lZCBsb25nICopYWRkcikKKyNkZWZpbmUgZXh0Ml9jbGVhcl9iaXRfYXRvbWljKGwsbnIsYWRkcikgdGVzdF9hbmRfY2xlYXJfYml0KChucikgXiAweDE4LCAodW5zaWduZWQgbG9uZyAqKWFkZHIpCisjZW5kaWYKKworI2VuZGlmCS8qIF9fS0VSTkVMX18gKi8KKworc3RhdGljIF9faW5saW5lX18gaW50IGV4dDJfdGVzdF9iaXQoaW50IG5yLCBfX2NvbnN0X18gdm9pZCAqIGFkZHIpCit7CisJX19jb25zdF9fIHVuc2lnbmVkIGNoYXIJKkFERFIgPSAoX19jb25zdF9fIHVuc2lnbmVkIGNoYXIgKikgYWRkcjsKKworCXJldHVybiAoQUREUltuciA+PiAzXSA+PiAobnIgJiA3KSkgJiAxOworfQorCisvKgorICogVGhpcyBpbXBsZW1lbnRhdGlvbiBvZiBleHQyX2ZpbmRfe2ZpcnN0LG5leHR9X3plcm9fYml0IHdhcyBzdG9sZW4gZnJvbQorICogTGludXMnIGFzbS1hbHBoYS9iaXRvcHMuaCBhbmQgbW9kaWZpZWQgZm9yIGEgYmlnLWVuZGlhbiBtYWNoaW5lLgorICovCisKKyNkZWZpbmUgZXh0Ml9maW5kX2ZpcnN0X3plcm9fYml0KGFkZHIsIHNpemUpIFwKKyAgICAgICAgZXh0Ml9maW5kX25leHRfemVyb19iaXQoKGFkZHIpLCAoc2l6ZSksIDApCisKK2V4dGVybiBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgZXh0Ml9maW5kX25leHRfemVyb19iaXQodm9pZCAqYWRkciwKKwl1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQoreworCXVuc2lnbmVkIGludCAqcCA9ICgodW5zaWduZWQgaW50ICopIGFkZHIpICsgKG9mZnNldCA+PiA1KTsKKwl1bnNpZ25lZCBpbnQgcmVzdWx0ID0gb2Zmc2V0ICYgfjMxVUw7CisJdW5zaWduZWQgaW50IHRtcDsKKworCWlmIChvZmZzZXQgPj0gc2l6ZSkKKwkJcmV0dXJuIHNpemU7CisJc2l6ZSAtPSByZXN1bHQ7CisJb2Zmc2V0ICY9IDMxVUw7CisJaWYgKG9mZnNldCkgeworCQl0bXAgPSBjcHVfdG9fbGUzMnAocCsrKTsKKwkJdG1wIHw9IH4wVUwgPj4gKDMyLW9mZnNldCk7CisJCWlmIChzaXplIDwgMzIpCisJCQlnb3RvIGZvdW5kX2ZpcnN0OworCQlpZiAodG1wICE9IH4wVSkKKwkJCWdvdG8gZm91bmRfbWlkZGxlOworCQlzaXplIC09IDMyOworCQlyZXN1bHQgKz0gMzI7CisJfQorCXdoaWxlIChzaXplID49IDMyKSB7CisJCWlmICgodG1wID0gY3B1X3RvX2xlMzJwKHArKykpICE9IH4wVSkKKwkJCWdvdG8gZm91bmRfbWlkZGxlOworCQlyZXN1bHQgKz0gMzI7CisJCXNpemUgLT0gMzI7CisJfQorCWlmICghc2l6ZSkKKwkJcmV0dXJuIHJlc3VsdDsKKwl0bXAgPSBjcHVfdG9fbGUzMnAocCk7Citmb3VuZF9maXJzdDoKKwl0bXAgfD0gfjBVIDw8IHNpemU7Citmb3VuZF9taWRkbGU6CisJcmV0dXJuIHJlc3VsdCArIGZmeih0bXApOworfQorCisvKiBCaXRtYXAgZnVuY3Rpb25zIGZvciB0aGUgbWluaXggZmlsZXN5c3RlbS4gICovCisjZGVmaW5lIG1pbml4X3Rlc3RfYW5kX3NldF9iaXQobnIsYWRkcikgZXh0Ml9zZXRfYml0KG5yLGFkZHIpCisjZGVmaW5lIG1pbml4X3NldF9iaXQobnIsYWRkcikgKCh2b2lkKWV4dDJfc2V0X2JpdChucixhZGRyKSkKKyNkZWZpbmUgbWluaXhfdGVzdF9hbmRfY2xlYXJfYml0KG5yLGFkZHIpIGV4dDJfY2xlYXJfYml0KG5yLGFkZHIpCisjZGVmaW5lIG1pbml4X3Rlc3RfYml0KG5yLGFkZHIpIGV4dDJfdGVzdF9iaXQobnIsYWRkcikKKyNkZWZpbmUgbWluaXhfZmluZF9maXJzdF96ZXJvX2JpdChhZGRyLHNpemUpIGV4dDJfZmluZF9maXJzdF96ZXJvX2JpdChhZGRyLHNpemUpCisKKyNlbmRpZiAvKiBfUEFSSVNDX0JJVE9QU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvYnVnLmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvYnVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTcyZjZlMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9idWcuaApAQCAtMCwwICsxLDEyIEBACisjaWZuZGVmIF9QQVJJU0NfQlVHX0gKKyNkZWZpbmUgX1BBUklTQ19CVUdfSAorCisjZGVmaW5lIEhBVkVfQVJDSF9CVUcKKyNkZWZpbmUgQlVHKCkgZG8geyBcCisJcHJpbnRrKCJrZXJuZWwgQlVHIGF0ICVzOiVkIVxuIiwgX19GSUxFX18sIF9fTElORV9fKTsgXAorCWR1bXBfc3RhY2soKTsgXAorCXBhbmljKCJCVUchIik7IFwKK30gd2hpbGUgKDApCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9idWcuaD4KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL2J1Z3MuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9idWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU2Mjg0MzQyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL2J1Z3MuaApAQCAtMCwwICsxLDE5IEBACisvKgorICogIGluY2x1ZGUvYXNtLXBhcmlzYy9idWdzLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5CU1pa2UgU2hhdmVyCisgKi8KKworLyoKKyAqIFRoaXMgaXMgaW5jbHVkZWQgYnkgaW5pdC9tYWluLmMgdG8gY2hlY2sgZm9yIGFyY2hpdGVjdHVyZS1kZXBlbmRlbnQgYnVncy4KKyAqCisgKiBOZWVkczoKKyAqCXZvaWQgY2hlY2tfYnVncyh2b2lkKTsKKyAqLworCisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorCitzdGF0aWMgaW5saW5lIHZvaWQgY2hlY2tfYnVncyh2b2lkKQoreworLy8JaWRlbnRpZnlfY3B1KCZib290X2NwdV9kYXRhKTsKK30KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9ieXRlb3JkZXIuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9ieXRlb3JkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjE0ODMxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL2J5dGVvcmRlci5oCkBAIC0wLDAgKzEsODIgQEAKKyNpZm5kZWYgX1BBUklTQ19CWVRFT1JERVJfSAorI2RlZmluZSBfUEFSSVNDX0JZVEVPUkRFUl9ICisKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorCisjaWZkZWYgX19HTlVDX18KKworc3RhdGljIF9faW5saW5lX18gX19hdHRyaWJ1dGVfY29uc3RfXyBfX3UxNiBfX19hcmNoX19zd2FiMTYoX191MTYgeCkKK3sKKwlfX2FzbV9fKCJkZXAgJTAsIDE1LCA4LCAlMFxuXHQiCQkvKiBkZXBvc2l0IDAwYWIgLT4gMGJhYiAqLworCQkic2hkICUlcjAsICUwLCA4LCAlMCIJCS8qIHNoaWZ0IDAwMDAwMGFiIC0+IDAwYmEgKi8KKwkJOiAiPXIiICh4KQorCQk6ICIwIiAoeCkpOworCXJldHVybiB4OworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX2F0dHJpYnV0ZV9jb25zdF9fIF9fdTMyIF9fX2FyY2hfX3N3YWIyNChfX3UzMiB4KQoreworCV9fYXNtX18oInNoZCAlMCwgJTAsIDgsICUwXG5cdCIJCS8qIHNoaWZ0IHhhYmN4YWJjIC0+IGN4YWIgKi8KKwkJImRlcCAlMCwgMTUsIDgsICUwXG5cdCIJCS8qIGRlcG9zaXQgY3hhYiAtPiBjYmFiICovCisJCSJzaGQgJSVyMCwgJTAsIDgsICUwIgkJLyogc2hpZnQgMDAwMGNiYWIgLT4gMGNiYSAqLworCQk6ICI9ciIgKHgpCisJCTogIjAiICh4KSk7CisJcmV0dXJuIHg7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fYXR0cmlidXRlX2NvbnN0X18gX191MzIgX19fYXJjaF9fc3dhYjMyKF9fdTMyIHgpCit7CisJdW5zaWduZWQgaW50IHRlbXA7CisJX19hc21fXygic2hkICUwLCAlMCwgMTYsICUxXG5cdCIJLyogc2hpZnQgYWJjZGFiY2QgLT4gY2RhYiAqLworCQkiZGVwICUxLCAxNSwgOCwgJTFcblx0IgkJLyogZGVwb3NpdCBjZGFiIC0+IGNiYWIgKi8KKwkJInNoZCAlMCwgJTEsIDgsICUwIgkJLyogc2hpZnQgYWJjZGNiYWIgLT4gZGNiYSAqLworCQk6ICI9ciIgKHgpLCAiPSZyIiAodGVtcCkKKwkJOiAiMCIgKHgpKTsKKwlyZXR1cm4geDsKK30KKworCisjaWYgQklUU19QRVJfTE9ORyA+IDMyCisvKgorKiogRnJvbSAiUEEtUklTQyAyLjAgQXJjaGl0ZWN0dXJlIiwgSFAgUHJvZmVzc2lvbmFsIEJvb2tzLgorKiogU2VlIEFwcGVuZGl4IEkgcGFnZSA4ICwgIkVuZGlhbiBCeXRlIFN3YXBwaW5nIi4KKyoqCisqKiBQcmV0dHkgY29vbCBhbGdvcml0aG06ICgqID09IHplcm8nZCBiaXRzKQorKiogICAgICBQRVJNSCAgIDAxMjM0NTY3IC0+IDY3NDUyMzAxIGludG8gJTAKKyoqICAgICAgSFNITCAgICA2NzQ1MjMwMSAtPiA3KjUqMyoxKiBpbnRvICUxCisqKiAgICAgIEhTSFIgICAgNjc0NTIzMDEgLT4gKjYqNCoyKjAgaW50byAlMAorKiogICAgICBPUiAgICAgICUwIHwgJTEgIC0+IDc2NTQzMjEwIGludG8gJTAgKGFsbCBkb25lISkKKyovCitzdGF0aWMgX19pbmxpbmVfXyBfX2F0dHJpYnV0ZV9jb25zdF9fIF9fdTY0IF9fX2FyY2hfX3N3YWI2NChfX3U2NCB4KSB7CisJX191NjQgdGVtcDsKKwlfX2FzbV9fKCJwZXJtaCwzMjEwICUwLCAlMFxuXHQiCisJCSJoc2hsICUwLCA4LCAlMVxuXHQiCisJCSJoc2hyLHUgJTAsIDgsICUwXG5cdCIKKwkJIm9yICUxLCAlMCwgJTAiCisJCTogIj1yIiAoeCksICI9JnIiICh0ZW1wKQorCQk6ICIwIiAoeCkpOworCXJldHVybiB4OworfQorI2RlZmluZSBfX2FyY2hfX3N3YWI2NCh4KSBfX19hcmNoX19zd2FiNjQoeCkKKyNkZWZpbmUgX19CWVRFT1JERVJfSEFTX1U2NF9fCisjZWxpZiAhZGVmaW5lZChfX1NUUklDVF9BTlNJX18pCitzdGF0aWMgX19pbmxpbmVfXyBfX2F0dHJpYnV0ZV9jb25zdF9fIF9fdTY0IF9fX2FyY2hfX3N3YWI2NChfX3U2NCB4KQoreworCV9fdTMyIHQxID0gX19fYXJjaF9fc3dhYjMyKChfX3UzMikgeCk7CisJX191MzIgdDIgPSBfX19hcmNoX19zd2FiMzIoKF9fdTMyKSAoeCA+PiAzMikpOworCXJldHVybiAoKChfX3U2NCkgdDEgPDwgMzIpIHwgdDIpOworfQorI2RlZmluZSBfX2FyY2hfX3N3YWI2NCh4KSBfX19hcmNoX19zd2FiNjQoeCkKKyNkZWZpbmUgX19CWVRFT1JERVJfSEFTX1U2NF9fCisjZW5kaWYKKworI2RlZmluZSBfX2FyY2hfX3N3YWIxNih4KSBfX19hcmNoX19zd2FiMTYoeCkKKyNkZWZpbmUgX19hcmNoX19zd2FiMjQoeCkgX19fYXJjaF9fc3dhYjI0KHgpCisjZGVmaW5lIF9fYXJjaF9fc3dhYjMyKHgpIF9fX2FyY2hfX3N3YWIzMih4KQorCisjZW5kaWYgLyogX19HTlVDX18gKi8KKworI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9iaWdfZW5kaWFuLmg+CisKKyNlbmRpZiAvKiBfUEFSSVNDX0JZVEVPUkRFUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvY2FjaGUuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9jYWNoZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkYTcyZTMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2MvY2FjaGUuaApAQCAtMCwwICsxLDc5IEBACisvKgorICogaW5jbHVkZS9hc20tcGFyaXNjL2NhY2hlLmgKKyAqLworCisjaWZuZGVmIF9fQVJDSF9QQVJJU0NfQ0FDSEVfSAorI2RlZmluZSBfX0FSQ0hfUEFSSVNDX0NBQ0hFX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisvKgorICogUEEgMi4wIHByb2Nlc3NvcnMgaGF2ZSA2NC1ieXRlIGNhY2hlbGluZXM7IFBBIDEuMSBwcm9jZXNzb3JzIGhhdmUKKyAqIDMyLWJ5dGUgY2FjaGVsaW5lcy4gIFRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gaXMgbm90IGZvciBTTVAgYW55d2F5LAorICogc28gaWYgeW91J3JlIGJ1aWxkaW5nIGZvciBTTVAsIHlvdSBzaG91bGQgc2VsZWN0IHRoZSBhcHByb3ByaWF0ZQorICogcHJvY2Vzc29yIHR5cGUuICBUaGVyZSBpcyBhIHBvdGVudGlhbCBsaXZlbG9jayBkYW5nZXIgd2hlbiBydW5uaW5nCisgKiBhIG1hY2hpbmUgd2l0aCB0aGlzIHZhbHVlIHNldCB0b28gc21hbGwsIGJ1dCBpdCdzIG1vcmUgcHJvYmFibGUgeW91J2xsCisgKiBqdXN0IHJ1aW4gcGVyZm9ybWFuY2UuCisgKi8KKyNpZmRlZiBDT05GSUdfUEEyMAorI2RlZmluZSBMMV9DQUNIRV9CWVRFUyA2NAorI2RlZmluZSBMMV9DQUNIRV9TSElGVCA2CisjZWxzZQorI2RlZmluZSBMMV9DQUNIRV9CWVRFUyAzMgorI2RlZmluZSBMMV9DQUNIRV9TSElGVCA1CisjZW5kaWYKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworI2RlZmluZSBMMV9DQUNIRV9BTElHTih4KSAgICAgICAoKCh4KSsoTDFfQ0FDSEVfQllURVMtMSkpJn4oTDFfQ0FDSEVfQllURVMtMSkpCisKKyNkZWZpbmUgU01QX0NBQ0hFX0JZVEVTIEwxX0NBQ0hFX0JZVEVTCisjZGVmaW5lIEwxX0NBQ0hFX1NISUZUX01BWCA1CS8qIGxhcmdlc3QgTDEgd2hpY2ggdGhpcyBhcmNoIHN1cHBvcnRzICovCisKK2V4dGVybiB2b2lkIGZsdXNoX2RhdGFfY2FjaGVfbG9jYWwodm9pZCk7ICAvKiBmbHVzaGVzIGxvY2FsIGRhdGEtY2FjaGUgb25seSAqLworZXh0ZXJuIHZvaWQgZmx1c2hfaW5zdHJ1Y3Rpb25fY2FjaGVfbG9jYWwodm9pZCk7IC8qIGZsdXNoZXMgbG9jYWwgY29kZS1jYWNoZSBvbmx5ICovCisjaWZkZWYgQ09ORklHX1NNUAorZXh0ZXJuIHZvaWQgZmx1c2hfZGF0YV9jYWNoZSh2b2lkKTsgLyogZmx1c2hlcyBkYXRhLWNhY2hlIG9ubHkgKGFsbCBwcm9jZXNzb3JzKSAqLworZXh0ZXJuIHZvaWQgZmx1c2hfaW5zdHJ1Y3Rpb25fY2FjaGUodm9pZCk7IC8qIGZsdXNoZXMgaS1jYWNoZSBvbmx5IChhbGwgcHJvY2Vzc29ycykgKi8KKyNlbHNlCisjZGVmaW5lIGZsdXNoX2RhdGFfY2FjaGUgZmx1c2hfZGF0YV9jYWNoZV9sb2NhbAorI2RlZmluZSBmbHVzaF9pbnN0cnVjdGlvbl9jYWNoZSBmbHVzaF9pbnN0cnVjdGlvbl9jYWNoZV9sb2NhbAorI2VuZGlmCisKK2V4dGVybiB2b2lkIHBhcmlzY19jYWNoZV9pbml0KHZvaWQpOwkvKiBpbml0aWFsaXplcyBjYWNoZS1mbHVzaGluZyAqLworZXh0ZXJuIHZvaWQgZmx1c2hfYWxsX2NhY2hlcyh2b2lkKTsgICAgIC8qIGZsdXNoIGV2ZXJ5dGhpbmcgKHRsYiAmIGNhY2hlKSAqLworZXh0ZXJuIGludCBnZXRfY2FjaGVfaW5mbyhjaGFyICopOworZXh0ZXJuIHZvaWQgZmx1c2hfdXNlcl9pY2FjaGVfcmFuZ2VfYXNtKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuIHZvaWQgZmx1c2hfa2VybmVsX2ljYWNoZV9yYW5nZV9hc20odW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CitleHRlcm4gdm9pZCBmbHVzaF91c2VyX2RjYWNoZV9yYW5nZV9hc20odW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CitleHRlcm4gdm9pZCBmbHVzaF9rZXJuZWxfZGNhY2hlX3JhbmdlX2FzbSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKK2V4dGVybiB2b2lkIGZsdXNoX2tlcm5lbF9kY2FjaGVfcGFnZSh2b2lkICopOworZXh0ZXJuIHZvaWQgZmx1c2hfa2VybmVsX2ljYWNoZV9wYWdlKHZvaWQgKik7CitleHRlcm4gdm9pZCBkaXNhYmxlX3NyX2hhc2hpbmcodm9pZCk7ICAgLyogdHVybnMgb2ZmIHNwYWNlIHJlZ2lzdGVyIGhhc2hpbmcgKi8KK2V4dGVybiB2b2lkIGRpc2FibGVfc3JfaGFzaGluZ19hc20oaW50KTsgLyogbG93IGxldmVsIHN1cHBvcnQgZm9yIGFib3ZlICovCitleHRlcm4gdm9pZCBmcmVlX3NpZCh1bnNpZ25lZCBsb25nKTsKK3Vuc2lnbmVkIGxvbmcgYWxsb2Nfc2lkKHZvaWQpOworZXh0ZXJuIHZvaWQgZmx1c2hfdXNlcl9kY2FjaGVfcGFnZSh1bnNpZ25lZCBsb25nKTsKK2V4dGVybiB2b2lkIGZsdXNoX3VzZXJfaWNhY2hlX3BhZ2UodW5zaWduZWQgbG9uZyk7CisKK3N0cnVjdCBzZXFfZmlsZTsKK2V4dGVybiB2b2lkIHNob3dfY2FjaGVfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pOworCitleHRlcm4gaW50IHNwbGl0X3RsYjsKK2V4dGVybiBpbnQgZGNhY2hlX3N0cmlkZTsKK2V4dGVybiBpbnQgaWNhY2hlX3N0cmlkZTsKK2V4dGVybiBzdHJ1Y3QgcGRjX2NhY2hlX2luZm8gY2FjaGVfaW5mbzsKKworI2RlZmluZSBwZHRsYihhZGRyKSAgICAgICAgIGFzbSB2b2xhdGlsZSgicGR0bGIgMCglJXNyMSwlMCkiIDogOiAiciIgKGFkZHIpKTsKKyNkZWZpbmUgcGl0bGIoYWRkcikgICAgICAgICBhc20gdm9sYXRpbGUoInBpdGxiIDAoJSVzcjEsJTApIiA6IDogInIiIChhZGRyKSk7CisjZGVmaW5lIHBkdGxiX2tlcm5lbChhZGRyKSAgYXNtIHZvbGF0aWxlKCJwZHRsYiAwKCUwKSIgOiA6ICJyIiAoYWRkcikpOworCisjZW5kaWYgLyogISBfX0FTU0VNQkxZX18gKi8KKworLyogQ2xhc3NlcyBvZiBwcm9jZXNzb3Igd3J0OiBkaXNhYmxpbmcgc3BhY2UgcmVnaXN0ZXIgaGFzaGluZyAqLworCisjZGVmaW5lIFNSSEFTSF9QQ1hTVCAgICAwICAgLyogcGN4cywgcGN4dCwgcGN4dF8gKi8KKyNkZWZpbmUgU1JIQVNIX1BDWEwgICAgIDEgICAvKiBwY3hsICovCisjZGVmaW5lIFNSSEFTSF9QQTIwICAgICAyICAgLyogcGN4dSwgcGN4dV8sIHBjeHcsIHBjeHdfICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL2NhY2hlZmx1c2guaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9jYWNoZWZsdXNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY3MzI3MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9jYWNoZWZsdXNoLmgKQEAgLTAsMCArMSwxODIgQEAKKyNpZm5kZWYgX1BBUklTQ19DQUNIRUZMVVNIX0gKKyNkZWZpbmUgX1BBUklTQ19DQUNIRUZMVVNIX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisKKy8qIFRoZSB1c3VhbCBjb21tZW50IGlzICJDYWNoZXMgYXJlbid0IGJyYWluLWRlYWQgb24gdGhlIDxhcmNoaXRlY3R1cmU+Ii4KKyAqIFVuZm9ydHVuYXRlbHksIHRoYXQgZG9lc24ndCBhcHBseSB0byBQQS1SSVNDLiAqLworCisvKiBDYWNoZSBmbHVzaCBvcGVyYXRpb25zICovCisKKyNpZmRlZiBDT05GSUdfU01QCisjZGVmaW5lIGZsdXNoX2NhY2hlX21tKG1tKSBmbHVzaF9jYWNoZV9hbGwoKQorI2Vsc2UKKyNkZWZpbmUgZmx1c2hfY2FjaGVfbW0obW0pIGZsdXNoX2NhY2hlX2FsbF9sb2NhbCgpCisjZW5kaWYKKworI2RlZmluZSBmbHVzaF9rZXJuZWxfZGNhY2hlX3JhbmdlKHN0YXJ0LHNpemUpIFwKKwlmbHVzaF9rZXJuZWxfZGNhY2hlX3JhbmdlX2FzbSgoc3RhcnQpLCAoc3RhcnQpKyhzaXplKSk7CisKK2V4dGVybiB2b2lkIGZsdXNoX2NhY2hlX2FsbF9sb2NhbCh2b2lkKTsKKworc3RhdGljIGlubGluZSB2b2lkIGNhY2hlZmx1c2hfaF90bXBfZnVuY3Rpb24odm9pZCAqZHVtbXkpCit7CisJZmx1c2hfY2FjaGVfYWxsX2xvY2FsKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9jYWNoZV9hbGwodm9pZCkKK3sKKwlvbl9lYWNoX2NwdShjYWNoZWZsdXNoX2hfdG1wX2Z1bmN0aW9uLCBOVUxMLCAxLCAxKTsKK30KKworI2RlZmluZSBmbHVzaF9jYWNoZV92bWFwKHN0YXJ0LCBlbmQpCQlmbHVzaF9jYWNoZV9hbGwoKQorI2RlZmluZSBmbHVzaF9jYWNoZV92dW5tYXAoc3RhcnQsIGVuZCkJCWZsdXNoX2NhY2hlX2FsbCgpCisKK2V4dGVybiBpbnQgcGFyaXNjX2NhY2hlX2ZsdXNoX3RocmVzaG9sZDsKK3ZvaWQgcGFyaXNjX3NldHVwX2NhY2hlX3RpbWluZyh2b2lkKTsKKworc3RhdGljIGlubGluZSB2b2lkCitmbHVzaF91c2VyX2RjYWNoZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwlpZiAoKGVuZCAtIHN0YXJ0KSA8IHBhcmlzY19jYWNoZV9mbHVzaF90aHJlc2hvbGQpCisJCWZsdXNoX3VzZXJfZGNhY2hlX3JhbmdlX2FzbShzdGFydCxlbmQpOworCWVsc2UKKwkJZmx1c2hfZGF0YV9jYWNoZSgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2ZsdXNoX3VzZXJfaWNhY2hlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCWlmICgoZW5kIC0gc3RhcnQpIDwgcGFyaXNjX2NhY2hlX2ZsdXNoX3RocmVzaG9sZCkKKwkJZmx1c2hfdXNlcl9pY2FjaGVfcmFuZ2VfYXNtKHN0YXJ0LGVuZCk7CisJZWxzZQorCQlmbHVzaF9pbnN0cnVjdGlvbl9jYWNoZSgpOworfQorCitleHRlcm4gdm9pZCBmbHVzaF9kY2FjaGVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7CisKKyNkZWZpbmUgZmx1c2hfZGNhY2hlX21tYXBfbG9jayhtYXBwaW5nKSBcCisJd3JpdGVfbG9ja19pcnEoJihtYXBwaW5nKS0+dHJlZV9sb2NrKQorI2RlZmluZSBmbHVzaF9kY2FjaGVfbW1hcF91bmxvY2sobWFwcGluZykgXAorCXdyaXRlX3VubG9ja19pcnEoJihtYXBwaW5nKS0+dHJlZV9sb2NrKQorCisjZGVmaW5lIGZsdXNoX2ljYWNoZV9wYWdlKHZtYSxwYWdlKQlkbyB7IGZsdXNoX2tlcm5lbF9kY2FjaGVfcGFnZShwYWdlX2FkZHJlc3MocGFnZSkpOyBmbHVzaF9rZXJuZWxfaWNhY2hlX3BhZ2UocGFnZV9hZGRyZXNzKHBhZ2UpKTsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBmbHVzaF9pY2FjaGVfcmFuZ2UocyxlKQkJZG8geyBmbHVzaF9rZXJuZWxfZGNhY2hlX3JhbmdlX2FzbShzLGUpOyBmbHVzaF9rZXJuZWxfaWNhY2hlX3JhbmdlX2FzbShzLGUpOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIGNvcHlfdG9fdXNlcl9wYWdlKHZtYSwgcGFnZSwgdmFkZHIsIGRzdCwgc3JjLCBsZW4pIFwKK2RvIHsgXAorCWZsdXNoX2NhY2hlX3BhZ2Uodm1hLCB2YWRkciwgcGFnZV90b19wZm4ocGFnZSkpOyBcCisJbWVtY3B5KGRzdCwgc3JjLCBsZW4pOyBcCisJZmx1c2hfa2VybmVsX2RjYWNoZV9yYW5nZV9hc20oKHVuc2lnbmVkIGxvbmcpZHN0LCAodW5zaWduZWQgbG9uZylkc3QgKyBsZW4pOyBcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIGNvcHlfZnJvbV91c2VyX3BhZ2Uodm1hLCBwYWdlLCB2YWRkciwgZHN0LCBzcmMsIGxlbikgXAorZG8geyBcCisJZmx1c2hfY2FjaGVfcGFnZSh2bWEsIHZhZGRyLCBwYWdlX3RvX3BmbihwYWdlKSk7IFwKKwltZW1jcHkoZHN0LCBzcmMsIGxlbik7IFwKK30gd2hpbGUgKDApCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9jYWNoZV9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJaW50IHNyMzsKKworCWlmICghdm1hLT52bV9tbS0+Y29udGV4dCkgeworCQlCVUcoKTsKKwkJcmV0dXJuOworCX0KKworCXNyMyA9IG1mc3AoMyk7CisJaWYgKHZtYS0+dm1fbW0tPmNvbnRleHQgPT0gc3IzKSB7CisJCWZsdXNoX3VzZXJfZGNhY2hlX3JhbmdlKHN0YXJ0LGVuZCk7CisJCWZsdXNoX3VzZXJfaWNhY2hlX3JhbmdlKHN0YXJ0LGVuZCk7CisJfSBlbHNlIHsKKwkJZmx1c2hfY2FjaGVfYWxsKCk7CisJfQorfQorCisvKiBTaW1wbGUgZnVuY3Rpb24gdG8gd29yayBvdXQgaWYgd2UgaGF2ZSBhbiBleGlzdGluZyBhZGRyZXNzIHRyYW5zbGF0aW9uCisgKiBmb3IgYSB1c2VyIHNwYWNlIHZtYS4gKi8KK3N0YXRpYyBpbmxpbmUgcHRlX3QgKl9fdHJhbnNsYXRpb25fZXhpc3RzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJCQkgIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlwZ2RfdCAqcGdkID0gcGdkX29mZnNldChtbSwgYWRkcik7CisJcG1kX3QgKnBtZDsKKwlwdGVfdCAqcHRlOworCisJaWYocGdkX25vbmUoKnBnZCkpCisJCXJldHVybiBOVUxMOworCisJcG1kID0gcG1kX29mZnNldChwZ2QsIGFkZHIpOworCWlmKHBtZF9ub25lKCpwbWQpIHx8IHBtZF9iYWQoKnBtZCkpCisJCXJldHVybiBOVUxMOworCisJcHRlID0gcHRlX29mZnNldF9tYXAocG1kLCBhZGRyKTsKKworCS8qIFRoZSBQQSBmbHVzaCBtYXBwaW5ncyBzaG93IHVwIGFzIHB0ZV9ub25lLCBidXQgdGhleSdyZQorCSAqIHZhbGlkIG5vbmUgdGhlIGxlc3MgKi8KKwlpZihwdGVfbm9uZSgqcHRlKSAmJiAoKHB0ZV92YWwoKnB0ZSkgJiBfUEFHRV9GTFVTSCkgPT0gMCkpCisJCXJldHVybiBOVUxMOworCXJldHVybiBwdGU7Cit9CisjZGVmaW5lCXRyYW5zbGF0aW9uX2V4aXN0cyh2bWEsIGFkZHIpCV9fdHJhbnNsYXRpb25fZXhpc3RzKCh2bWEpLT52bV9tbSwgYWRkcikKKworCisvKiBQcml2YXRlIGZ1bmN0aW9uIHRvIGZsdXNoIGEgcGFnZSBmcm9tIHRoZSBjYWNoZSBvZiBhIG5vbi1jdXJyZW50CisgKiBwcm9jZXNzLiAgY3IyNSBjb250YWlucyB0aGUgUGFnZSBEaXJlY3Rvcnkgb2YgdGhlIGN1cnJlbnQgdXNlcgorICogcHJvY2Vzczsgd2UncmUgZ29pbmcgdG8gaGlqYWNrIGJvdGggaXQgYW5kIHRoZSB1c2VyIHNwYWNlICVzcjMgdG8KKyAqIHRlbXBvcmFyaWx5IG1ha2UgdGhlIG5vbi1jdXJyZW50IHByb2Nlc3MgY3VycmVudC4gIFdlIGhhdmUgdG8gZG8KKyAqIHRoaXMgYmVjYXVzZSBjYWNoZSBmbHVzaGluZyBtYXkgY2F1c2UgYSBub24tYWNjZXNzIHRsYiBtaXNzIHdoaWNoCisgKiB0aGUgaGFuZGxlcnMgaGF2ZSB0byBmaWxsIGluIGZyb20gdGhlIHBnZCBvZiB0aGUgbm9uLWN1cnJlbnQKKyAqIHByb2Nlc3MuICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2ZsdXNoX3VzZXJfY2FjaGVfcGFnZV9ub25fY3VycmVudChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgdm1hZGRyKQoreworCS8qIHNhdmUgdGhlIGN1cnJlbnQgcHJvY2VzcyBzcGFjZSBhbmQgcGdkICovCisJdW5zaWduZWQgbG9uZyBzcGFjZSA9IG1mc3AoMyksIHBnZCA9IG1mY3RsKDI1KTsKKworCS8qIHdlIGRvbid0IG1pbmQgdGFraW5nIGludGVycnVwcyBzaW5jZSB0aGV5IG1heSBub3QKKwkgKiBkbyBhbnl0aGluZyB3aXRoIHVzZXIgc3BhY2UsIGJ1dCB3ZSBjYW4ndAorCSAqIGJlIHByZWVtcHRlZCBoZXJlICovCisJcHJlZW1wdF9kaXNhYmxlKCk7CisKKwkvKiBtYWtlIHVzIGN1cnJlbnQgKi8KKwltdGN0bChfX3BhKHZtYS0+dm1fbW0tPnBnZCksIDI1KTsKKwltdHNwKHZtYS0+dm1fbW0tPmNvbnRleHQsIDMpOworCisJZmx1c2hfdXNlcl9kY2FjaGVfcGFnZSh2bWFkZHIpOworCWlmKHZtYS0+dm1fZmxhZ3MgJiBWTV9FWEVDKQorCQlmbHVzaF91c2VyX2ljYWNoZV9wYWdlKHZtYWRkcik7CisKKwkvKiBwdXQgdGhlIG9sZCBjdXJyZW50IHByb2Nlc3MgYmFjayAqLworCW10c3Aoc3BhY2UsIDMpOworCW10Y3RsKHBnZCwgMjUpOworCXByZWVtcHRfZW5hYmxlKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorX19mbHVzaF9jYWNoZV9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHZtYWRkcikKK3sKKwlpZiAobGlrZWx5KHZtYS0+dm1fbW0tPmNvbnRleHQgPT0gbWZzcCgzKSkpIHsKKwkJZmx1c2hfdXNlcl9kY2FjaGVfcGFnZSh2bWFkZHIpOworCQlpZiAodm1hLT52bV9mbGFncyAmIFZNX0VYRUMpCisJCQlmbHVzaF91c2VyX2ljYWNoZV9wYWdlKHZtYWRkcik7CisJfSBlbHNlIHsKKwkJZmx1c2hfdXNlcl9jYWNoZV9wYWdlX25vbl9jdXJyZW50KHZtYSwgdm1hZGRyKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZmx1c2hfY2FjaGVfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyB2bWFkZHIsIHVuc2lnbmVkIGxvbmcgcGZuKQoreworCUJVR19PTighdm1hLT52bV9tbS0+Y29udGV4dCk7CisKKwlpZihsaWtlbHkodHJhbnNsYXRpb25fZXhpc3RzKHZtYSwgdm1hZGRyKSkpCisJCV9fZmx1c2hfY2FjaGVfcGFnZSh2bWEsIHZtYWRkcik7CisKK30KKyNlbmRpZgorCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvY2hlY2tzdW0uaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9jaGVja3N1bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyOWNiNTYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2MvY2hlY2tzdW0uaApAQCAtMCwwICsxLDIxMyBAQAorI2lmbmRlZiBfUEFSSVNDX0NIRUNLU1VNX0gKKyNkZWZpbmUgX1BBUklTQ19DSEVDS1NVTV9ICisKKyNpbmNsdWRlIDxsaW51eC9pbjYuaD4KKworLyoKKyAqIGNvbXB1dGVzIHRoZSBjaGVja3N1bSBvZiBhIG1lbW9yeSBibG9jayBhdCBidWZmLCBsZW5ndGggbGVuLAorICogYW5kIGFkZHMgaW4gInN1bSIgKDMyLWJpdCkKKyAqCisgKiByZXR1cm5zIGEgMzItYml0IG51bWJlciBzdWl0YWJsZSBmb3IgZmVlZGluZyBpbnRvIGl0c2VsZgorICogb3IgY3N1bV90Y3B1ZHBfbWFnaWMKKyAqCisgKiB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGggZXZlbiBsZW5ndGhzLCBleGNlcHQKKyAqIGZvciB0aGUgbGFzdCBmcmFnbWVudCwgd2hpY2ggbWF5IGJlIG9kZAorICoKKyAqIGl0J3MgYmVzdCB0byBoYXZlIGJ1ZmYgYWxpZ25lZCBvbiBhIDMyLWJpdCBib3VuZGFyeQorICovCitleHRlcm4gdW5zaWduZWQgaW50IGNzdW1fcGFydGlhbChjb25zdCB1bnNpZ25lZCBjaGFyICosIGludCwgdW5zaWduZWQgaW50KTsKKworLyoKKyAqIFRoZSBzYW1lIGFzIGNzdW1fcGFydGlhbCwgYnV0IGNvcGllcyBmcm9tIHNyYyB3aGlsZSBpdCBjaGVja3N1bXMuCisgKgorICogSGVyZSBldmVuIG1vcmUgaW1wb3J0YW50IHRvIGFsaWduIHNyYyBhbmQgZHN0IG9uIGEgMzItYml0IChvciBldmVuCisgKiBiZXR0ZXIgNjQtYml0KSBib3VuZGFyeQorICovCitleHRlcm4gdW5zaWduZWQgaW50IGNzdW1fcGFydGlhbF9jb3B5X25vY2hlY2soY29uc3QgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICosCisJCQkJCSAgICAgIGludCwgdW5zaWduZWQgaW50KTsKKworLyoKKyAqIHRoaXMgaXMgYSBuZXcgdmVyc2lvbiBvZiB0aGUgYWJvdmUgdGhhdCByZWNvcmRzIGVycm9ycyBpdCBmaW5kcyBpbiAqZXJycCwKKyAqIGJ1dCBjb250aW51ZXMgYW5kIHplcm9zIHRoZSByZXN0IG9mIHRoZSBidWZmZXIuCisgKi8KK2V4dGVybiB1bnNpZ25lZCBpbnQgY3N1bV9wYXJ0aWFsX2NvcHlfZnJvbV91c2VyKGNvbnN0IHVuc2lnbmVkIGNoYXIgX191c2VyICpzcmMsCisJCXVuc2lnbmVkIGNoYXIgKmRzdCwgaW50IGxlbiwgdW5zaWduZWQgaW50IHN1bSwgaW50ICplcnJwKTsKKworLyoKKyAqCU9wdGltaXplZCBmb3IgSVAgaGVhZGVycywgd2hpY2ggYWx3YXlzIGNoZWNrc3VtIG9uIDQgb2N0ZXQgYm91bmRhcmllcy4KKyAqCisgKglXcml0dGVuIGJ5IFJhbmRvbHBoIENodW5nIDx0YXVzcUBkZWJpYW4ub3JnPiwgYW5kIHRoZW4gbXVja2VkIHdpdGggYnkKKyAqCUxhTW9udCBKb25lcyA8bGFtb250QGRlYmlhbi5vcmc+CisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgaXBfZmFzdF9jc3VtKHVuc2lnbmVkIGNoYXIgKiBpcGgsCisJCQkJCSAgdW5zaWduZWQgaW50IGlobCkgeworCXVuc2lnbmVkIGludCBzdW07CisKKworCV9fYXNtX18gX192b2xhdGlsZV9fICgKKyIJbGR3cyxtYQkJNCglMSksICUwXG4iCisiCWFkZGliLDw9CS00LCAlMiwgMmZcbiIKKyJcbiIKKyIJbGR3cwkJNCglMSksICUlcjIwXG4iCisiCWxkd3MJCTgoJTEpLCAlJXIyMVxuIgorIglhZGQJCSUwLCAlJXIyMCwgJTBcbiIKKyIJbGR3cyxtYQkJMTIoJTEpLCAlJXIxOVxuIgorIglhZGRjCQklMCwgJSVyMjEsICUwXG4iCisiCWFkZGMJCSUwLCAlJXIxOSwgJTBcbiIKKyIxOglsZHdzLG1hCQk0KCUxKSwgJSVyMTlcbiIKKyIJYWRkaWIsPAkJMCwgJTIsIDFiXG4iCisiCWFkZGMJCSUwLCAlJXIxOSwgJTBcbiIKKyJcbiIKKyIJZXh0cnUJCSUwLCAzMSwgMTYsICUlcjIwXG4iCisiCWV4dHJ1CQklMCwgMTUsIDE2LCAlJXIyMVxuIgorIglhZGRjCQklJXIyMCwgJSVyMjEsICUwXG4iCisiCWV4dHJ1CQklMCwgMTUsIDE2LCAlJXIyMVxuIgorIglhZGQJCSUwLCAlJXIyMSwgJTBcbiIKKyIJc3ViaQkJLTEsICUwLCAlMFxuIgorIjI6XG4iCisJOiAiPXIiIChzdW0pLCAiPXIiIChpcGgpLCAiPXIiIChpaGwpCisJOiAiMSIgKGlwaCksICIyIiAoaWhsKQorCTogInIxOSIsICJyMjAiLCAicjIxIiApOworCisJcmV0dXJuKHN1bSk7Cit9CisKKy8qCisgKglGb2xkIGEgcGFydGlhbCBjaGVja3N1bQorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjc3VtX2ZvbGQodW5zaWduZWQgaW50IHN1bSkKK3sKKwkvKiBhZGQgdGhlIHN3YXBwZWQgdHdvIDE2LWJpdCBoYWx2ZXMgb2Ygc3VtLAorCSAgIGEgcG9zc2libGUgY2FycnkgZnJvbSBhZGRpbmcgdGhlIHR3byAxNi1iaXQgaGFsdmVzLAorCSAgIHdpbGwgY2FycnkgZnJvbSB0aGUgbG93ZXIgaGFsZiBpbnRvIHRoZSB1cHBlciBoYWxmLAorCSAgIGdpdmluZyB1cyB0aGUgY29ycmVjdCBzdW0gaW4gdGhlIHVwcGVyIGhhbGYuICovCisJc3VtICs9IChzdW0gPDwgMTYpICsgKHN1bSA+PiAxNik7CisJcmV0dXJuICh+c3VtKSA+PiAxNjsKK30KKyAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjc3VtX3RjcHVkcF9ub2ZvbGQodW5zaWduZWQgbG9uZyBzYWRkciwKKwkJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgZGFkZHIsCisJCQkJCSAgICAgICB1bnNpZ25lZCBzaG9ydCBsZW4sCisJCQkJCSAgICAgICB1bnNpZ25lZCBzaG9ydCBwcm90bywKKwkJCQkJICAgICAgIHVuc2lnbmVkIGludCBzdW0pIAoreworCV9fYXNtX18oCisJIglhZGQgICUxLCAlMCwgJTBcbiIKKwkiCWFkZGMgJTIsICUwLCAlMFxuIgorCSIJYWRkYyAlMywgJTAsICUwXG4iCisJIglhZGRjICUlcjAsICUwLCAlMFxuIgorCQk6ICI9ciIgKHN1bSkKKwkJOiAiciIgKGRhZGRyKSwgInIiKHNhZGRyKSwgInIiKChwcm90bzw8MTYpK2xlbiksICIwIihzdW0pKTsKKyAgICByZXR1cm4gc3VtOworfQorCisvKgorICogY29tcHV0ZXMgdGhlIGNoZWNrc3VtIG9mIHRoZSBUQ1AvVURQIHBzZXVkby1oZWFkZXIKKyAqIHJldHVybnMgYSAxNi1iaXQgY2hlY2tzdW0sIGFscmVhZHkgY29tcGxlbWVudGVkCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgaW50IGNzdW1fdGNwdWRwX21hZ2ljKHVuc2lnbmVkIGxvbmcgc2FkZHIsCisJCQkJCQkgICB1bnNpZ25lZCBsb25nIGRhZGRyLAorCQkJCQkJICAgdW5zaWduZWQgc2hvcnQgbGVuLAorCQkJCQkJICAgdW5zaWduZWQgc2hvcnQgcHJvdG8sCisJCQkJCQkgICB1bnNpZ25lZCBpbnQgc3VtKSAKK3sKKwlyZXR1cm4gY3N1bV9mb2xkKGNzdW1fdGNwdWRwX25vZm9sZChzYWRkcixkYWRkcixsZW4scHJvdG8sc3VtKSk7Cit9CisKKy8qCisgKiB0aGlzIHJvdXRpbmUgaXMgdXNlZCBmb3IgbWlzY2VsbGFuZW91cyBJUC1saWtlIGNoZWNrc3VtcywgbWFpbmx5CisgKiBpbiBpY21wLmMKKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBpcF9jb21wdXRlX2NzdW0odW5zaWduZWQgY2hhciAqIGJ1ZiwgaW50IGxlbikgeworCSByZXR1cm4gY3N1bV9mb2xkIChjc3VtX3BhcnRpYWwoYnVmLCBsZW4sIDApKTsKK30KKworCisjZGVmaW5lIF9IQVZFX0FSQ0hfSVBWNl9DU1VNCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBzaG9ydCBpbnQgY3N1bV9pcHY2X21hZ2ljKHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsCisJCQkJCQkgICAgIHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCisJCQkJCQkgICAgIF9fdTE2IGxlbiwKKwkJCQkJCSAgICAgdW5zaWduZWQgc2hvcnQgcHJvdG8sCisJCQkJCQkgICAgIHVuc2lnbmVkIGludCBzdW0pIAoreworCV9fYXNtX18gX192b2xhdGlsZV9fICgKKworI2lmIEJJVFNfUEVSX0xPTkcgPiAzMgorCisJLyoKKwkqKiBXZSBjYW4gZXhlY3V0ZSB0d28gbG9hZHMgYW5kIHR3byBhZGRzIHBlciBjeWNsZSBvbiBQQSA4MDAwLgorCSoqIEJ1dCBhZGQgaW5zbidzIGdldCBzZXJpYWxpemVkIHdhaXRpbmcgZm9yIHRoZSBjYXJyeSBiaXQuCisJKiogVHJ5IHRvIGtlZXAgNCByZWdpc3RlcnMgd2l0aCAibGl2ZSIgdmFsdWVzIGFoZWFkIG9mIHRoZSBBTFUuCisJKi8KKworIglsZGQsbWEJCTgoJTEpLCAlJXIxOVxuIgkvKiBnZXQgMXN0IHNhZGRyIHdvcmQgKi8KKyIJbGRkLG1hCQk4KCUyKSwgJSVyMjBcbiIJLyogZ2V0IDFzdCBkYWRkciB3b3JkICovCisiCWFkZAkJJTgsICUzLCAlM1xuIi8qIGFkZCAxNi1iaXQgcHJvdG8gKyBsZW4gKi8KKyIJYWRkCQklJXIxOSwgJTAsICUwXG4iCisiCWxkZCxtYQkJOCglMSksICUlcjIxXG4iCS8qIDJjZCBzYWRkciAqLworIglsZGQsbWEJCTgoJTIpLCAlJXIyMlxuIgkvKiAyY2QgZGFkZHIgKi8KKyIJYWRkLGRjCQklJXIyMCwgJTAsICUwXG4iCisiCWFkZCxkYwkJJSVyMjEsICUwLCAlMFxuIgorIglhZGQsZGMJCSUlcjIyLCAlMCwgJTBcbiIKKyIJYWRkLGRjCQklMywgJTAsICUwXG4iICAvKiBmb2xkIGluIHByb3RvK2xlbiB8IGNhcnJ5IGJpdCAqLworIglleHRyZCx1CQklMCwgMzEsIDMyLCAlJXIxOVxuIgkvKiBjb3B5IHVwcGVyIGhhbGYgZG93biAqLworIglkZXBkaQkJMCwgMzEsIDMyLCAlMFxuIgkvKiBjbGVhciB1cHBlciBoYWxmICovCisiCWFkZAkJJSVyMTksICUwLCAlMFxuIgkvKiBmb2xkIGludG8gMzItYml0cyAqLworIglhZGRjCQkwLCAlMCwgJTBcbiIJCS8qIGFkZCBjYXJyeSAqLworCisjZWxzZQorCisJLyoKKwkqKiBGb3IgUEEgMS54LCB0aGUgaW5zbiBvcmRlciBkb2Vzbid0IG1hdHRlciBhcyBtdWNoLgorCSoqIEluc24gc3RyZWFtIGlzIHNlcmlhbGl6ZWQgb24gdGhlIGNhcnJ5IGJpdCBoZXJlIHRvby4KKwkqKiByZXN1bHQgZnJvbSB0aGUgcHJldmlvdXMgb3BlcmF0aW9uIChlZyByMCArIHgpCisJKi8KKworIglsZHcsbWEJCTQoJTEpLCAlJXIxOVxuIgkvKiBnZXQgMXN0IHNhZGRyIHdvcmQgKi8KKyIJbGR3LG1hCQk0KCUyKSwgJSVyMjBcbiIJLyogZ2V0IDFzdCBkYWRkciB3b3JkICovCisiCWFkZAkJJTgsICUzLCAlM1xuIgkvKiBhZGQgMTYtYml0IHByb3RvICsgbGVuICovCisiCWFkZAkJJSVyMTksICUwLCAlMFxuIgorIglsZHcsbWEJCTQoJTEpLCAlJXIyMVxuIgkvKiAyY2Qgc2FkZHIgKi8KKyIJYWRkYwkJJSVyMjAsICUwLCAlMFxuIgorIglsZHcsbWEJCTQoJTIpLCAlJXIyMlxuIgkvKiAyY2QgZGFkZHIgKi8KKyIJYWRkYwkJJSVyMjEsICUwLCAlMFxuIgorIglsZHcsbWEJCTQoJTEpLCAlJXIxOVxuIgkvKiAzcmQgc2FkZHIgKi8KKyIJYWRkYwkJJSVyMjIsICUwLCAlMFxuIgorIglsZHcsbWEJCTQoJTIpLCAlJXIyMFxuIgkvKiAzcmQgZGFkZHIgKi8KKyIJYWRkYwkJJSVyMTksICUwLCAlMFxuIgorIglsZHcsbWEJCTQoJTEpLCAlJXIyMVxuIgkvKiA0dGggc2FkZHIgKi8KKyIJYWRkYwkJJSVyMjAsICUwLCAlMFxuIgorIglsZHcsbWEJCTQoJTIpLCAlJXIyMlxuIgkvKiA0dGggZGFkZHIgKi8KKyIJYWRkYwkJJSVyMjEsICUwLCAlMFxuIgorIglhZGRjCQklJXIyMiwgJTAsICUwXG4iCisiCWFkZGMJCSUzLCAlMCwgJTBcbiIJLyogZm9sZCBpbiBwcm90bytsZW4sIGNhdGNoIGNhcnJ5ICovCisKKyNlbmRpZgorCTogIj1yIiAoc3VtKSwgIj1yIiAoc2FkZHIpLCAiPXIiIChkYWRkciksICI9ciIgKGxlbikKKwk6ICIwIiAoc3VtKSwgIjEiIChzYWRkciksICIyIiAoZGFkZHIpLCAiMyIgKGxlbiksICJyIiAocHJvdG8pCisJOiAicjE5IiwgInIyMCIsICJyMjEiLCAicjIyIik7CisJcmV0dXJuIGNzdW1fZm9sZChzdW0pOworfQorCisvKiAKKyAqCUNvcHkgYW5kIGNoZWNrc3VtIHRvIHVzZXIKKyAqLworI2RlZmluZSBIQVZFX0NTVU1fQ09QWV9VU0VSCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBpbnQgY3N1bV9hbmRfY29weV90b191c2VyIChjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMsCisJCQkJCQkgICAgICB1bnNpZ25lZCBjaGFyIF9fdXNlciAqZHN0LAorCQkJCQkJICAgICAgaW50IGxlbiwgaW50IHN1bSwgCisJCQkJCQkgICAgICBpbnQgKmVycl9wdHIpCit7CisJLyogY29kZSBzdG9sZW4gZnJvbSBpbmNsdWRlL2FzbS1taXBzNjQgKi8KKwlzdW0gPSBjc3VtX3BhcnRpYWwoc3JjLCBsZW4sIHN1bSk7CisJIAorCWlmIChjb3B5X3RvX3VzZXIoZHN0LCBzcmMsIGxlbikpIHsKKwkJKmVycl9wdHIgPSAtRUZBVUxUOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIHN1bTsKK30KKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9jb21wYXQuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9jb21wYXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTBlYWM2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL2NvbXBhdC5oCkBAIC0wLDAgKzEsMTQ1IEBACisjaWZuZGVmIF9BU01fUEFSSVNDX0NPTVBBVF9ICisjZGVmaW5lIF9BU01fUEFSSVNDX0NPTVBBVF9ICisvKgorICogQXJjaGl0ZWN0dXJlIHNwZWNpZmljIGNvbXBhdGliaWxpdHkgdHlwZXMKKyAqLworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKworI2RlZmluZSBDT01QQVRfVVNFUl9IWiAxMDAKKwordHlwZWRlZiB1MzIJY29tcGF0X3NpemVfdDsKK3R5cGVkZWYgczMyCWNvbXBhdF9zc2l6ZV90OwordHlwZWRlZiBzMzIJY29tcGF0X3RpbWVfdDsKK3R5cGVkZWYgczMyCWNvbXBhdF9jbG9ja190OwordHlwZWRlZiBzMzIJY29tcGF0X3BpZF90OwordHlwZWRlZiB1MzIJY29tcGF0X3VpZF90OwordHlwZWRlZiB1MzIJY29tcGF0X2dpZF90OwordHlwZWRlZiB1MTYJY29tcGF0X21vZGVfdDsKK3R5cGVkZWYgdTMyCWNvbXBhdF9pbm9fdDsKK3R5cGVkZWYgdTMyCWNvbXBhdF9kZXZfdDsKK3R5cGVkZWYgczMyCWNvbXBhdF9vZmZfdDsKK3R5cGVkZWYgczY0CWNvbXBhdF9sb2ZmX3Q7Cit0eXBlZGVmIHUxNgljb21wYXRfbmxpbmtfdDsKK3R5cGVkZWYgdTE2CWNvbXBhdF9pcGNfcGlkX3Q7Cit0eXBlZGVmIHMzMgljb21wYXRfZGFkZHJfdDsKK3R5cGVkZWYgdTMyCWNvbXBhdF9jYWRkcl90OwordHlwZWRlZiB1MzIJY29tcGF0X3RpbWVyX3Q7CisKK3R5cGVkZWYgczMyCWNvbXBhdF9pbnRfdDsKK3R5cGVkZWYgczMyCWNvbXBhdF9sb25nX3Q7Cit0eXBlZGVmIHUzMgljb21wYXRfdWludF90OwordHlwZWRlZiB1MzIJY29tcGF0X3Vsb25nX3Q7CisKK3N0cnVjdCBjb21wYXRfdGltZXNwZWMgeworCWNvbXBhdF90aW1lX3QJCXR2X3NlYzsKKwlzMzIJCQl0dl9uc2VjOworfTsKKworc3RydWN0IGNvbXBhdF90aW1ldmFsIHsKKwljb21wYXRfdGltZV90CQl0dl9zZWM7CisJczMyCQkJdHZfdXNlYzsKK307CisKK3N0cnVjdCBjb21wYXRfc3RhdCB7CisJY29tcGF0X2Rldl90CQlzdF9kZXY7CS8qIGRldl90IGlzIDMyIGJpdHMgb24gcGFyaXNjICovCisJY29tcGF0X2lub190CQlzdF9pbm87CS8qIDMyIGJpdHMgKi8KKwljb21wYXRfbW9kZV90CQlzdF9tb2RlOwkvKiAxNiBiaXRzICovCisJY29tcGF0X25saW5rX3QgIAlzdF9ubGluazsJLyogMTYgYml0cyAqLworCXUxNgkJCXN0X3Jlc2VydmVkMTsJLyogb2xkIHN0X3VpZCAqLworCXUxNgkJCXN0X3Jlc2VydmVkMjsJLyogb2xkIHN0X2dpZCAqLworCWNvbXBhdF9kZXZfdAkJc3RfcmRldjsKKwljb21wYXRfb2ZmX3QJCXN0X3NpemU7CisJY29tcGF0X3RpbWVfdAkJc3RfYXRpbWU7CisJdTMyCQkJc3RfYXRpbWVfbnNlYzsKKwljb21wYXRfdGltZV90CQlzdF9tdGltZTsKKwl1MzIJCQlzdF9tdGltZV9uc2VjOworCWNvbXBhdF90aW1lX3QJCXN0X2N0aW1lOworCXUzMgkJCXN0X2N0aW1lX25zZWM7CisJczMyCQkJc3RfYmxrc2l6ZTsKKwlzMzIJCQlzdF9ibG9ja3M7CisJdTMyCQkJX191bnVzZWQxOwkvKiBBQ0wgc3R1ZmYgKi8KKwljb21wYXRfZGV2X3QJCV9fdW51c2VkMjsJLyogbmV0d29yayAqLworCWNvbXBhdF9pbm9fdAkJX191bnVzZWQzOwkvKiBuZXR3b3JrICovCisJdTMyCQkJX191bnVzZWQ0OwkvKiBjbm9kZXMgKi8KKwl1MTYJCQlfX3VudXNlZDU7CS8qIG5ldHNpdGUgKi8KKwlzaG9ydAkJCXN0X2ZzdHlwZTsKKwljb21wYXRfZGV2X3QJCXN0X3JlYWxkZXY7CisJdTE2CQkJc3RfYmFzZW1vZGU7CisJdTE2CQkJc3Rfc3BhcmVzaG9ydDsKKwljb21wYXRfdWlkX3QJCXN0X3VpZDsKKwljb21wYXRfZ2lkX3QJCXN0X2dpZDsKKwl1MzIJCQlzdF9zcGFyZTRbM107Cit9OworCitzdHJ1Y3QgY29tcGF0X2Zsb2NrIHsKKwlzaG9ydAkJCWxfdHlwZTsKKwlzaG9ydAkJCWxfd2hlbmNlOworCWNvbXBhdF9vZmZfdAkJbF9zdGFydDsKKwljb21wYXRfb2ZmX3QJCWxfbGVuOworCWNvbXBhdF9waWRfdAkJbF9waWQ7Cit9OworCitzdHJ1Y3QgY29tcGF0X2Zsb2NrNjQgeworCXNob3J0CQkJbF90eXBlOworCXNob3J0CQkJbF93aGVuY2U7CisJY29tcGF0X2xvZmZfdAkJbF9zdGFydDsKKwljb21wYXRfbG9mZl90CQlsX2xlbjsKKwljb21wYXRfcGlkX3QJCWxfcGlkOworfTsKKworc3RydWN0IGNvbXBhdF9zdGF0ZnMgeworCXMzMgkJZl90eXBlOworCXMzMgkJZl9ic2l6ZTsKKwlzMzIJCWZfYmxvY2tzOworCXMzMgkJZl9iZnJlZTsKKwlzMzIJCWZfYmF2YWlsOworCXMzMgkJZl9maWxlczsKKwlzMzIJCWZfZmZyZWU7CisJX19rZXJuZWxfZnNpZF90CWZfZnNpZDsKKwlzMzIJCWZfbmFtZWxlbjsKKwlzMzIJCWZfZnJzaXplOworCXMzMgkJZl9zcGFyZVs1XTsKK307CisKK3N0cnVjdCBjb21wYXRfc2lnY29udGV4dCB7CisJY29tcGF0X2ludF90IHNjX2ZsYWdzOworCWNvbXBhdF9pbnRfdCBzY19nclszMl07IC8qIFBTVyBpbiBzY19nclswXSAqLworCXU2NCBzY19mclszMl07CisJY29tcGF0X2ludF90IHNjX2lhc3FbMl07CisJY29tcGF0X2ludF90IHNjX2lhb3FbMl07CisJY29tcGF0X2ludF90IHNjX3NhcjsgLyogY3IxMSAqLworfTsKKworI2RlZmluZSBDT01QQVRfUkxJTV9JTkZJTklUWSAweGZmZmZmZmZmCisKK3R5cGVkZWYgdTMyCQljb21wYXRfb2xkX3NpZ3NldF90OwkvKiBhdCBsZWFzdCAzMiBiaXRzICovCisKKyNkZWZpbmUgX0NPTVBBVF9OU0lHCQk2NAorI2RlZmluZSBfQ09NUEFUX05TSUdfQlBXCTMyCisKK3R5cGVkZWYgdTMyCQljb21wYXRfc2lnc2V0X3dvcmQ7CisKKyNkZWZpbmUgQ09NUEFUX09GRl9UX01BWAkweDdmZmZmZmZmCisjZGVmaW5lIENPTVBBVF9MT0ZGX1RfTUFYCTB4N2ZmZmZmZmZmZmZmZmZmZkwKKworLyoKKyAqIEEgcG9pbnRlciBwYXNzZWQgaW4gZnJvbSB1c2VyIG1vZGUuIFRoaXMgc2hvdWxkIG5vdAorICogYmUgdXNlZCBmb3Igc3lzY2FsbCBwYXJhbWV0ZXJzLCBqdXN0IGRlY2xhcmUgdGhlbQorICogYXMgcG9pbnRlcnMgYmVjYXVzZSB0aGUgc3lzY2FsbCBlbnRyeSBjb2RlIHdpbGwgaGF2ZQorICogYXBwcm9wcmlhdGVseSBjb212ZXJ0ZWQgdGhlbSBhbHJlYWR5LgorICovCit0eXBlZGVmCXUzMgkJY29tcGF0X3VwdHJfdDsKKworc3RhdGljIGlubGluZSB2b2lkIF9fdXNlciAqY29tcGF0X3B0cihjb21wYXRfdXB0cl90IHVwdHIpCit7CisJcmV0dXJuICh2b2lkIF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKXVwdHI7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX191c2VyICpjb21wYXRfYWxsb2NfdXNlcl9zcGFjZShsb25nIGxlbikKK3sKKwlzdHJ1Y3QgcHRfcmVncyAqcmVncyA9ICZjdXJyZW50LT50aHJlYWQucmVnczsKKwlyZXR1cm4gKHZvaWQgX191c2VyICopcmVncy0+Z3JbMzBdOworfQorCisjZW5kaWYgLyogX0FTTV9QQVJJU0NfQ09NUEFUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9jb21wYXRfcnRfc2lnZnJhbWUuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9jb21wYXRfcnRfc2lnZnJhbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWJlYzI4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL2NvbXBhdF9ydF9zaWdmcmFtZS5oCkBAIC0wLDAgKzEsNTAgQEAKKyNpbmNsdWRlPGxpbnV4L2NvbXBhdC5oPgorI2luY2x1ZGU8bGludXgvY29tcGF0X3NpZ2luZm8uaD4KKyNpbmNsdWRlPGFzbS9jb21wYXRfdWNvbnRleHQuaD4KKworI2lmbmRlZiBfQVNNX1BBUklTQ19DT01QQVRfUlRfU0lHRlJBTUVfSAorI2RlZmluZSBfQVNNX1BBUklTQ19DT01QQVRfUlRfU0lHRlJBTUVfSAorCisvKiBJbiBhIGRlZnQgbW92ZSBvZiB1YmVyLWhhY2tlcnksIHdlIGRlY2lkZSB0byBjYXJyeSB0aGUgdG9wIGhhbGYgb2YgYWxsCisgKiA2NC1iaXQgcmVnaXN0ZXJzIGluIGEgbm9uLXBvcnRhYmxlLCBub24tQUJJLCBoaWRkZW4gc3RydWN0dXJlLgorICogVXNlcnNwYWNlIGNhbiByZWFkIHRoZSBoaWRkZW4gc3RydWN0dXJlIGlmIGl0ICp3YW50cyogYnV0IGlzIG5ldmVyCisgKiBndWFyYW50ZWVkIHRvIGJlIGluIHRoZSBzYW1lIHBsYWNlLiBJbmZhY3QgdGhlIHVjX3NpZ21hc2sgZnJvbSB0aGUgCisgKiB1Y29udGV4dF90IHN0cnVjdHVyZSBtYXkgcHVzaCB0aGUgaGlkZGVuIHJlZ2lzdGVyIGZpbGUgZG93bmFyZHMKKyAqLworc3RydWN0IGNvbXBhdF9yZWdmaWxlIHsKKwkvKiBVcHBlciBoYWxmIG9mIGFsbCB0aGUgNjQtYml0IHJlZ2lzdGVycyB0aGF0IHdlcmUgdHJ1bmNhdGVkCisJICAgb24gYSBjb3B5IHRvIGEgMzItYml0IHVzZXJzcGFjZSAqLworCWNvbXBhdF9pbnRfdCByZl9nclszMl07CisJY29tcGF0X2ludF90IHJmX2lhc3FbMl07CisJY29tcGF0X2ludF90IHJmX2lhb3FbMl07CisJY29tcGF0X2ludF90IHJmX3NhcjsKK307CisKKyNkZWZpbmUgQ09NUEFUX1NJR1JFVFVSTl9UUkFNUCA0CisjZGVmaW5lIENPTVBBVF9TSUdSRVNUQVJUQkxPQ0tfVFJBTVAgNSAKKyNkZWZpbmUgQ09NUEFUX1RSQU1QX1NJWkUgKENPTVBBVF9TSUdSRVRVUk5fVFJBTVAgKyBDT01QQVRfU0lHUkVTVEFSVEJMT0NLX1RSQU1QKQorCitzdHJ1Y3QgY29tcGF0X3J0X3NpZ2ZyYW1lIHsKKwkvKiBYWFg6IE11c3QgbWF0Y2ggdHJhbXBvbGluZSBzaXplIGluIGFyY2gvcGFyaXNjL2tlcm5lbC9zaWduYWwuYyAKKwkgICAgICAgIFNlY29uZGFyeSB0byB0aGF0IGl0IG11c3QgcHJvdGVjdCB0aGUgRVJFU1RBUlRfUkVTVEFSVEJMT0NLCisJCXRyYW1wb2xpbmUgd2UgbGVmdCBvbiB0aGUgc3RhY2sgKHdlIHdlcmUgYmFkIGFuZCBkaWRuJ3QgCisJCWNoYW5nZSBzcCBzbyB3ZSBjb3VsZCBydW4gcmVhbGx5IGZhc3QuKSAqLworCWNvbXBhdF91aW50X3QgdHJhbXBbQ09NUEFUX1RSQU1QX1NJWkVdOworCWNvbXBhdF9zaWdpbmZvX3QgaW5mbzsKKwlzdHJ1Y3QgY29tcGF0X3Vjb250ZXh0IHVjOworCS8qIEhpZGRlbiBsb2NhdGlvbiBvZiB0cnVuY2F0ZWQgcmVnaXN0ZXJzLCAqbXVzdCogYmUgbGFzdC4gKi8KKwlzdHJ1Y3QgY29tcGF0X3JlZ2ZpbGUgcmVnczsgCit9OworCisvKgorICogVGhlIDMyLWJpdCBBQkkgd2FudHMgYXQgbGVhc3QgNDggYnl0ZXMgZm9yIGEgZnVuY3Rpb24gY2FsbCBmcmFtZToKKyAqIDE2IGJ5dGVzIGZvciBhcmcwLWFyZzMsIGFuZCAzMiBieXRlcyBmb3IgbWFnaWMgKHRoZSBvbmx5IHBhcnQgb2YKKyAqIHdoaWNoIExpbnV4L3BhcmlzYyB1c2VzIGlzIHNwLTIwIGZvciB0aGUgc2F2ZWQgcmV0dXJuIHBvaW50ZXIuLi4pCisgKiBUaGVuLCB0aGUgc3RhY2sgcG9pbnRlciBtdXN0IGJlIHJvdW5kZWQgdG8gYSBjYWNoZSBsaW5lICg2NCBieXRlcykuCisgKi8KKyNkZWZpbmUgU0lHRlJBTUUzMgkJNjQKKyNkZWZpbmUgRlVOQ1RJT05DQUxMRlJBTUUzMgk0OAorI2RlZmluZSBQQVJJU0NfUlRfU0lHRlJBTUVfU0laRTMyCQkJCQlcCisJKCgoc2l6ZW9mKHN0cnVjdCBjb21wYXRfcnRfc2lnZnJhbWUpICsgRlVOQ1RJT05DQUxMRlJBTUUzMikgKyBTSUdGUkFNRTMyKSAmIC1TSUdGUkFNRTMyKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9jb21wYXRfc2lnbmFsLmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvY29tcGF0X3NpZ25hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhZDAyYzMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2MvY29tcGF0X3NpZ25hbC5oCkBAIC0wLDAgKzEsMiBAQAorLyogVXNlIGdlbmVyaWMgKi8KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9jb21wYXRfc2lnbmFsLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvY29tcGF0X3Vjb250ZXh0LmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvY29tcGF0X3Vjb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTEyMjhhMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9jb21wYXRfdWNvbnRleHQuaApAQCAtMCwwICsxLDE4IEBACisjaWZuZGVmIF9BU01fUEFSSVNDX0NPTVBBVF9VQ09OVEVYVF9ICisjZGVmaW5lIF9BU01fUEFSSVNDX0NPTVBBVF9VQ09OVEVYVF9ICisKKyNpbmNsdWRlPGxpbnV4L2NvbXBhdC5oPgorI2luY2x1ZGU8YXNtL2NvbXBhdF9zaWduYWwuaD4KKworLyogMzItYml0IHVjb250ZXh0IGFzIHNlZW4gZnJvbSBhbiA2NC1iaXQga2VybmVsICovCitzdHJ1Y3QgY29tcGF0X3Vjb250ZXh0IHsKKwljb21wYXRfdWludF90IHVjX2ZsYWdzOworCWNvbXBhdF91cHRyX3QgdWNfbGluazsKKwljb21wYXRfc3RhY2tfdCB1Y19zdGFjazsJLyogc3RydWN0IGNvbXBhdF9zaWdhbHRzdGFjayAoMTIgYnl0ZXMpKi8JCisJLyogRklYTUU6IFBhZCBvdXQgdG8gZ2V0IHVjX21jb250ZXh0IHRvIHN0YXJ0IGF0IGFuIDgtYnl0ZSBhbGlnbmVkIGJvdW5kYXJ5ICovCisJY29tcGF0X3VpbnRfdCBwYWRbMV07CisJc3RydWN0IGNvbXBhdF9zaWdjb250ZXh0IHVjX21jb250ZXh0OworCWNvbXBhdF9zaWdzZXRfdCB1Y19zaWdtYXNrOwkvKiBtYXNrIGxhc3QgZm9yIGV4dGVuc2liaWxpdHkgKi8KK307CisKKyNlbmRpZiAvKiAhX0FTTV9QQVJJU0NfQ09NUEFUX1VDT05URVhUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9jcHV0aW1lLmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvY3B1dGltZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjZGYyZmIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2MvY3B1dGltZS5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfX1BBUklTQ19DUFVUSU1FX0gKKyNkZWZpbmUgX19QQVJJU0NfQ1BVVElNRV9ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9jcHV0aW1lLmg+CisKKyNlbmRpZiAvKiBfX1BBUklTQ19DUFVUSU1FX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9jdXJyZW50LmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvY3VycmVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmYjkzMzgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2MvY3VycmVudC5oCkBAIC0wLDAgKzEsMTUgQEAKKyNpZm5kZWYgX1BBUklTQ19DVVJSRU5UX0gKKyNkZWZpbmUgX1BBUklTQ19DVVJSRU5UX0gKKworI2luY2x1ZGUgPGxpbnV4L3RocmVhZF9pbmZvLmg+CisKK3N0cnVjdCB0YXNrX3N0cnVjdDsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBnZXRfY3VycmVudCh2b2lkKQoreworCXJldHVybiBjdXJyZW50X3RocmVhZF9pbmZvKCktPnRhc2s7Cit9CisgCisjZGVmaW5lIGN1cnJlbnQgZ2V0X2N1cnJlbnQoKQorCisjZW5kaWYgLyogIShfUEFSSVNDX0NVUlJFTlRfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9kZWxheS5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL2RlbGF5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E3NWU5OAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9kZWxheS5oCkBAIC0wLDAgKzEsNDMgQEAKKyNpZm5kZWYgX1BBUklTQ19ERUxBWV9ICisjZGVmaW5lIF9QQVJJU0NfREVMQVlfSAorCisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPiAgICAvKiBmb3IgbWZjdGwoKSAqLworI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4gLyogZm9yIGJvb3RfY3B1X2RhdGEgKi8KKworCisvKgorICogQ29weXJpZ2h0IChDKSAxOTkzIExpbnVzIFRvcnZhbGRzCisgKgorICogRGVsYXkgcm91dGluZXMKKyAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fZGVsYXkodW5zaWduZWQgbG9uZyBsb29wcykgeworCWFzbSB2b2xhdGlsZSgKKwkiCS5iYWxpZ25sCTY0LDB4MzQwMDAwMzRcbiIKKwkiCWFkZGliLFVWIC0xLCUwLC5cbiIKKwkiCW5vcFxuIgorCQk6ICI9ciIgKGxvb3BzKSA6ICIwIiAobG9vcHMpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX2NyMTZfZGVsYXkodW5zaWduZWQgbG9uZyBjbG9ja3MpIHsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0OworCisJLyoKKwkgKiBOb3RlOiBEdWUgdG8gdW5zaWduZWQgbWF0aCwgY3IxNiByb2xsb3ZlcnMgc2hvdWxkbid0IGJlCisJICogYSBwcm9ibGVtIGhlcmUuIEhvd2V2ZXIsIG9uIDMyIGJpdCwgd2UgbmVlZCB0byBtYWtlIHN1cmUKKwkgKiB3ZSBkb24ndCBwYXNzIGluIHRvbyBiaWcgYSB2YWx1ZS4gVGhlIGN1cnJlbnQgZGVmYXVsdAorCSAqIHZhbHVlIG9mIE1BWF9VREVMQVlfTVMgc2hvdWxkIGhlbHAgcHJldmVudCB0aGlzLgorCSAqLworCisJc3RhcnQgPSBtZmN0bCgxNik7CisJd2hpbGUgKChtZmN0bCgxNikgLSBzdGFydCkgPCBjbG9ja3MpCisJICAgIDsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX3VkZWxheSh1bnNpZ25lZCBsb25nIHVzZWNzKSB7CisJX19jcjE2X2RlbGF5KHVzZWNzICogKCh1bnNpZ25lZCBsb25nKWJvb3RfY3B1X2RhdGEuY3B1X2h6IC8gMTAwMDAwMFVMKSk7Cit9CisKKyNkZWZpbmUgdWRlbGF5KG4pIF9fdWRlbGF5KG4pCisKKyNlbmRpZiAvKiBkZWZpbmVkKF9QQVJJU0NfREVMQVlfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9kaXY2NC5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL2RpdjY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNkOTc4YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9kaXY2NC5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9kaXY2NC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL2RtYS1tYXBwaW5nLmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvZG1hLW1hcHBpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGI4NGY5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL2RtYS1tYXBwaW5nLmgKQEAgLTAsMCArMSwyNTQgQEAKKyNpZm5kZWYgX1BBUklTQ19ETUFfTUFQUElOR19ICisjZGVmaW5lIF9QQVJJU0NfRE1BX01BUFBJTkdfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9zY2F0dGVybGlzdC5oPgorCisvKiBTZWUgRG9jdW1lbnRhdGlvbi9ETUEtbWFwcGluZy50eHQgKi8KK3N0cnVjdCBocHBhX2RtYV9vcHMgeworCWludCAgKCpkbWFfc3VwcG9ydGVkKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBtYXNrKTsKKwl2b2lkICooKmFsbG9jX2NvbnNpc3RlbnQpKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgKmlvdmEsIGludCBmbGFnKTsKKwl2b2lkICooKmFsbG9jX25vbmNvaGVyZW50KShzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCBkbWFfYWRkcl90ICppb3ZhLCBpbnQgZmxhZyk7CisJdm9pZCAoKmZyZWVfY29uc2lzdGVudCkoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgdm9pZCAqdmFkZHIsIGRtYV9hZGRyX3QgaW92YSk7CisJZG1hX2FkZHJfdCAoKm1hcF9zaW5nbGUpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqYWRkciwgc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbik7CisJdm9pZCAoKnVubWFwX3NpbmdsZSkoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGlvdmEsIHNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pOworCWludCAgKCptYXBfc2cpKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbnRzLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pOworCXZvaWQgKCp1bm1hcF9zZykoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmh3ZW50cywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKTsKKwl2b2lkICgqZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUpKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBpb3ZhLCB1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbik7CisJdm9pZCAoKmRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgaW92YSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pOworCXZvaWQgKCpkbWFfc3luY19zZ19mb3JfY3B1KShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZWxlbXMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbik7CisJdm9pZCAoKmRtYV9zeW5jX3NnX2Zvcl9kZXZpY2UpKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbGVtcywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKTsKK307CisKKy8qCisqKiBXZSBjb3VsZCBsaXZlIHdpdGhvdXQgdGhlIGhwcGFfZG1hX29wcyBpbmRpcmVjdGlvbiBpZiB3ZSBkaWRuJ3Qgd2FudAorKiogdG8gc3VwcG9ydCA0IGRpZmZlcmVudCBjb2hlcmVudCBkbWEgbW9kZWxzIHdpdGggb25lIGJpbmFyeSAodGhleSB3aWxsCisqKiBzb21lZGF5IGJlIGxvYWRhYmxlIG1vZHVsZXMpOgorKiogICAgIEkvTyBNTVUgICAgICAgIGNvbnNpc3RlbnQgbWV0aG9kICAgICAgICAgICBkbWFfc3luYyBiZWhhdmlvcgorKiogID09PT09PT09PT09PT0gICA9PT09PT09PT09PT09PT09PT09PT09ICAgICAgID09PT09PT09PT09PT09PT09PT09PT09CisqKiAgYSkgUEEtN3gwMExDICAgIHVuY2FjaGFibGUgaG9zdCBtZW1vcnkgICAgICAgICAgZmx1c2gvcHVyZ2UKKyoqICBiKSBVMi9VdHVybiAgICAgIGNhY2hhYmxlIGhvc3QgbWVtb3J5ICAgICAgICAgICAgICBOT1AKKyoqICBjKSBJa2UvQXN0cm8gICAgIGNhY2hhYmxlIGhvc3QgbWVtb3J5ICAgICAgICAgICAgICBOT1AKKyoqICBkKSBFUElDL1NBR0EgICAgIG1lbW9yeSBvbiBFUElDL1NBR0EgICAgICAgICBmbHVzaC9yZXNldCBETUEgY2hhbm5lbAorKioKKyoqIFBBLTdbMTNdMDBMQyBwcm9jZXNzb3JzIGhhdmUgYSBHU0MgYnVzIGludGVyZmFjZSBhbmQgbm8gSS9PIE1NVS4KKyoqCisqKiBTeXN0ZW1zIChlZyBQQ1gtVCB3b3Jrc3RhdGlvbnMpIHRoYXQgZG9uJ3QgZmFsbCBpbnRvIHRoZSBhYm92ZQorKiogY2F0ZWdvcmllcyB3aWxsIG5lZWQgdG8gbW9kaWZ5IHRoZSBuZWVkZWQgZHJpdmVycyB0byBwZXJmb3JtCisqKiBmbHVzaC9wdXJnZSBhbmQgYWxsb2NhdGUgInJlZ3VsYXIiIGNhY2hlYWJsZSBwYWdlcyBmb3IgZXZlcnl0aGluZy4KKyovCisKKyNpZmRlZiBDT05GSUdfUEExMQorZXh0ZXJuIHN0cnVjdCBocHBhX2RtYV9vcHMgcGN4bF9kbWFfb3BzOworZXh0ZXJuIHN0cnVjdCBocHBhX2RtYV9vcHMgcGN4X2RtYV9vcHM7CisjZW5kaWYKKworZXh0ZXJuIHN0cnVjdCBocHBhX2RtYV9vcHMgKmhwcGFfZG1hX29wczsKKworc3RhdGljIGlubGluZSB2b2lkICoKK2RtYV9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLAorCQkgICBpbnQgZmxhZykKK3sKKwlyZXR1cm4gaHBwYV9kbWFfb3BzLT5hbGxvY19jb25zaXN0ZW50KGRldiwgc2l6ZSwgZG1hX2hhbmRsZSwgZmxhZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqCitkbWFfYWxsb2Nfbm9uY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwKKwkJICAgICAgaW50IGZsYWcpCit7CisJcmV0dXJuIGhwcGFfZG1hX29wcy0+YWxsb2Nfbm9uY29oZXJlbnQoZGV2LCBzaXplLCBkbWFfaGFuZGxlLCBmbGFnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitkbWFfZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCAKKwkJICAgIHZvaWQgKnZhZGRyLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUpCit7CisJaHBwYV9kbWFfb3BzLT5mcmVlX2NvbnNpc3RlbnQoZGV2LCBzaXplLCB2YWRkciwgZG1hX2hhbmRsZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZG1hX2ZyZWVfbm9uY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgCisJCSAgICB2b2lkICp2YWRkciwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlKQoreworCWhwcGFfZG1hX29wcy0+ZnJlZV9jb25zaXN0ZW50KGRldiwgc2l6ZSwgdmFkZHIsIGRtYV9oYW5kbGUpOworfQorCitzdGF0aWMgaW5saW5lIGRtYV9hZGRyX3QKK2RtYV9tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwKKwkgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCXJldHVybiBocHBhX2RtYV9vcHMtPm1hcF9zaW5nbGUoZGV2LCBwdHIsIHNpemUsIGRpcmVjdGlvbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZG1hX3VubWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIsIHNpemVfdCBzaXplLAorCQkgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCWhwcGFfZG1hX29wcy0+dW5tYXBfc2luZ2xlKGRldiwgZG1hX2FkZHIsIHNpemUsIGRpcmVjdGlvbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitkbWFfbWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbnRzLAorCSAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlyZXR1cm4gaHBwYV9kbWFfb3BzLT5tYXBfc2coZGV2LCBzZywgbmVudHMsIGRpcmVjdGlvbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZG1hX3VubWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5od2VudHJpZXMsCisJICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJaHBwYV9kbWFfb3BzLT51bm1hcF9zZyhkZXYsIHNnLCBuaHdlbnRyaWVzLCBkaXJlY3Rpb24pOworfQorCitzdGF0aWMgaW5saW5lIGRtYV9hZGRyX3QKK2RtYV9tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKKwkgICAgIHNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJcmV0dXJuIGRtYV9tYXBfc2luZ2xlKGRldiwgKHBhZ2VfYWRkcmVzcyhwYWdlKSArIChvZmZzZXQpKSwgc2l6ZSwgZGlyZWN0aW9uKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitkbWFfdW5tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHJlc3MsIHNpemVfdCBzaXplLAorCSAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJZG1hX3VubWFwX3NpbmdsZShkZXYsIGRtYV9hZGRyZXNzLCBzaXplLCBkaXJlY3Rpb24pOworfQorCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHNpemVfdCBzaXplLAorCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJaWYoaHBwYV9kbWFfb3BzLT5kbWFfc3luY19zaW5nbGVfZm9yX2NwdSkKKwkJaHBwYV9kbWFfb3BzLT5kbWFfc3luY19zaW5nbGVfZm9yX2NwdShkZXYsIGRtYV9oYW5kbGUsIDAsIHNpemUsIGRpcmVjdGlvbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHNpemVfdCBzaXplLAorCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJaWYoaHBwYV9kbWFfb3BzLT5kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZSkKKwkJaHBwYV9kbWFfb3BzLT5kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShkZXYsIGRtYV9oYW5kbGUsIDAsIHNpemUsIGRpcmVjdGlvbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZG1hX3N5bmNfc2luZ2xlX3JhbmdlX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCisJCSAgICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwKKwkJICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCWlmKGhwcGFfZG1hX29wcy0+ZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUpCisJCWhwcGFfZG1hX29wcy0+ZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoZGV2LCBkbWFfaGFuZGxlLCBvZmZzZXQsIHNpemUsIGRpcmVjdGlvbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZG1hX3N5bmNfc2luZ2xlX3JhbmdlX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCisJCSAgICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwKKwkJICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCWlmKGhwcGFfZG1hX29wcy0+ZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UpCisJCWhwcGFfZG1hX29wcy0+ZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoZGV2LCBkbWFfaGFuZGxlLCBvZmZzZXQsIHNpemUsIGRpcmVjdGlvbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZG1hX3N5bmNfc2dfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZWxlbXMsCisJCSBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJaWYoaHBwYV9kbWFfb3BzLT5kbWFfc3luY19zZ19mb3JfY3B1KQorCQlocHBhX2RtYV9vcHMtPmRtYV9zeW5jX3NnX2Zvcl9jcHUoZGV2LCBzZywgbmVsZW1zLCBkaXJlY3Rpb24pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2RtYV9zeW5jX3NnX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVsZW1zLAorCQkgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCWlmKGhwcGFfZG1hX29wcy0+ZG1hX3N5bmNfc2dfZm9yX2RldmljZSkKKwkJaHBwYV9kbWFfb3BzLT5kbWFfc3luY19zZ19mb3JfZGV2aWNlKGRldiwgc2csIG5lbGVtcywgZGlyZWN0aW9uKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2RtYV9zdXBwb3J0ZWQoc3RydWN0IGRldmljZSAqZGV2LCB1NjQgbWFzaykKK3sKKwlyZXR1cm4gaHBwYV9kbWFfb3BzLT5kbWFfc3VwcG9ydGVkKGRldiwgbWFzayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitkbWFfc2V0X21hc2soc3RydWN0IGRldmljZSAqZGV2LCB1NjQgbWFzaykKK3sKKwlpZighZGV2LT5kbWFfbWFzayB8fCAhZG1hX3N1cHBvcnRlZChkZXYsIG1hc2spKQorCQlyZXR1cm4gLUVJTzsKKworCSpkZXYtPmRtYV9tYXNrID0gbWFzazsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludAorZG1hX2dldF9jYWNoZV9hbGlnbm1lbnQodm9pZCkKK3sKKwlyZXR1cm4gZGNhY2hlX3N0cmlkZTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2RtYV9pc19jb25zaXN0ZW50KGRtYV9hZGRyX3QgZG1hX2FkZHIpCit7CisJcmV0dXJuIChocHBhX2RtYV9vcHMtPmRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1ID09IE5VTEwpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2RtYV9jYWNoZV9zeW5jKHZvaWQgKnZhZGRyLCBzaXplX3Qgc2l6ZSwKKwkgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCWlmKGhwcGFfZG1hX29wcy0+ZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUpCisJCWZsdXNoX2tlcm5lbF9kY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpdmFkZHIsIHNpemUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKgorcGFyaXNjX3dhbGtfdHJlZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRldmljZSAqb3RoZXJkZXY7CisJaWYobGlrZWx5KGRldi0+cGxhdGZvcm1fZGF0YSAhPSBOVUxMKSkKKwkJcmV0dXJuIGRldi0+cGxhdGZvcm1fZGF0YTsKKwkvKiBPSywganVzdCB0cmF2ZXJzZSB0aGUgYnVzIHRvIGZpbmQgaXQgKi8KKwlmb3Iob3RoZXJkZXYgPSBkZXYtPnBhcmVudDsgb3RoZXJkZXY7CisJICAgIG90aGVyZGV2ID0gb3RoZXJkZXYtPnBhcmVudCkgeworCQlpZihvdGhlcmRldi0+cGxhdGZvcm1fZGF0YSkgeworCQkJZGV2LT5wbGF0Zm9ybV9kYXRhID0gb3RoZXJkZXYtPnBsYXRmb3JtX2RhdGE7CisJCQlicmVhazsKKwkJfQorCX0KKwlCVUdfT04oIWRldi0+cGxhdGZvcm1fZGF0YSk7CisJcmV0dXJuIGRldi0+cGxhdGZvcm1fZGF0YTsKK30KKwkJCisjZGVmaW5lIEdFVF9JT0MoZGV2KSAoSEJBX0RBVEEocGFyaXNjX3dhbGtfdHJlZShkZXYpKS0+aW9tbXUpOwkKKwkKKworI2lmZGVmIENPTkZJR19JT01NVV9DQ0lPCitzdHJ1Y3QgcGFyaXNjX2RldmljZTsKK3N0cnVjdCBpb2M7Cit2b2lkICogY2Npb19nZXRfaW9tbXUoY29uc3Qgc3RydWN0IHBhcmlzY19kZXZpY2UgKmRldik7CitpbnQgY2Npb19yZXF1ZXN0X3Jlc291cmNlKGNvbnN0IHN0cnVjdCBwYXJpc2NfZGV2aWNlICpkZXYsCisJCXN0cnVjdCByZXNvdXJjZSAqcmVzKTsKK2ludCBjY2lvX2FsbG9jYXRlX3Jlc291cmNlKGNvbnN0IHN0cnVjdCBwYXJpc2NfZGV2aWNlICpkZXYsCisJCXN0cnVjdCByZXNvdXJjZSAqcmVzLCB1bnNpZ25lZCBsb25nIHNpemUsCisJCXVuc2lnbmVkIGxvbmcgbWluLCB1bnNpZ25lZCBsb25nIG1heCwgdW5zaWduZWQgbG9uZyBhbGlnbik7CisjZWxzZSAvKiAhQ09ORklHX0lPTU1VX0NDSU8gKi8KKyNkZWZpbmUgY2Npb19nZXRfaW9tbXUoZGV2KSBOVUxMCisjZGVmaW5lIGNjaW9fcmVxdWVzdF9yZXNvdXJjZShkZXYsIHJlcykgcmVxdWVzdF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsIHJlcykKKyNkZWZpbmUgY2Npb19hbGxvY2F0ZV9yZXNvdXJjZShkZXYsIHJlcywgc2l6ZSwgbWluLCBtYXgsIGFsaWduKSBcCisJCWFsbG9jYXRlX3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgcmVzLCBzaXplLCBtaW4sIG1heCwgXAorCQkJCWFsaWduLCBOVUxMLCBOVUxMKQorI2VuZGlmIC8qICFDT05GSUdfSU9NTVVfQ0NJTyAqLworCisjaWZkZWYgQ09ORklHX0lPTU1VX1NCQQorc3RydWN0IHBhcmlzY19kZXZpY2U7Cit2b2lkICogc2JhX2dldF9pb21tdShzdHJ1Y3QgcGFyaXNjX2RldmljZSAqZGV2KTsKKyNlbmRpZgorCisvKiBBdCB0aGUgbW9tZW50LCB3ZSBwYW5pYyBvbiBlcnJvciBmb3IgSU9NTVUgcmVzb3VyY2UgZXhhdXN0aW9uICovCisjZGVmaW5lIGRtYV9tYXBwaW5nX2Vycm9yKHgpCTAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvZG1hLmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFmZDEwZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9kbWEuaApAQCAtMCwwICsxLDE5MiBAQAorLyogJElkOiBkbWEuaCx2IDEuMiAxOTk5LzA0LzI3IDAwOjQ2OjE4IGRlbGxlciBFeHAgJAorICogbGludXgvaW5jbHVkZS9hc20vZG1hLmg6IERlZmluZXMgZm9yIHVzaW5nIGFuZCBhbGxvY2F0aW5nIGRtYSBjaGFubmVscy4KKyAqIFdyaXR0ZW4gYnkgSGVubnVzIEJlcmdtYW4sIDE5OTIuCisgKiBIaWdoIERNQSBjaGFubmVsIHN1cHBvcnQgJiBpbmZvIGJ5IEhhbm51IFNhdm9sYWluZW4KKyAqIGFuZCBKb2huIEJveWQsIE5vdi4gMTk5Mi4KKyAqIChjKSBDb3B5cmlnaHQgMjAwMCwgR3JhbnQgR3J1bmRsZXIKKyAqLworCisjaWZuZGVmIF9BU01fRE1BX0gKKyNkZWZpbmUgX0FTTV9ETUFfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CQkvKiBuZWVkIGJ5dGUgSU8gKi8KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CQorCisjZGVmaW5lIGRtYV9vdXRiCW91dGIKKyNkZWZpbmUgZG1hX2luYgkJaW5iCisKKy8qCisqKiBETUFfQ0hVTktfU0laRSBpcyB1c2VkIGJ5IHRoZSBTQ1NJIG1pZC1sYXllciB0byBicmVhayB1cAorKiogKG9yIHJhdGhlciBub3QgbWVyZ2UpIERNQSdzIGludG8gbWFuYWdhYmxlIGNodW5rcy4KKyoqIE9uIHBhcmlzYywgdGhpcyBpcyBtb3JlIG9mIHRoZSBzb2Z0d2FyZS90dW5pbmcgY29uc3RyYWludAorKiogcmF0aGVyIHRoYW4gdGhlIEhXLiBJL08gTU1VIGFsbG9jYXRpb24gYWxvZ29yaXRobXMgY2FuIGJlCisqKiBmYXN0ZXIgd2l0aCBzbWFsbGVyIHNpemUgaXMgKHRvIHNvbWUgZGVncmVlKS4KKyovCisjZGVmaW5lIERNQV9DSFVOS19TSVpFCShCSVRTX1BFUl9MT05HKlBBR0VfU0laRSkKKworLyogVGhlIG1heGltdW0gYWRkcmVzcyB0aGF0IHdlIGNhbiBwZXJmb3JtIGEgRE1BIHRyYW5zZmVyIHRvIG9uIHRoaXMgcGxhdGZvcm0KKyoqIE5ldyBkeW5hbWljIERNQSBpbnRlcmZhY2VzIHNob3VsZCBvYnNvbGV0ZSB0aGlzLi4uLgorKi8KKyNkZWZpbmUgTUFYX0RNQV9BRERSRVNTICh+MFVMKQorCisvKgorKiogV2UgZG9uJ3QgaGF2ZSBETUEgY2hhbm5lbHMuLi4gd2VsbCBWLWNsYXNzIGRvZXMgYnV0IHRoZQorKiogRHluYW1pYyBETUEgTWFwcGluZyBpbnRlcmZhY2Ugd2lsbCBzdXBwb3J0IHRoZW0uLi4gcmlnaHQ/IDpeKQorKiogTm90ZTogdGhpcyBpcyBub3QgcmVsZXZhbnQgcmlnaHQgbm93IGZvciBQQS1SSVNDLCBidXQgd2UgY2Fubm90IAorKiogbGVhdmUgdGhpcyBhcyB1bmRlZmluZWQgYmVjYXVzZSBzb21lIHRoaW5ncyAoZS5nLiBzb3VuZCkKKyoqIHdvbid0IGNvbXBpbGUgOi0oCisqLworI2RlZmluZSBNQVhfRE1BX0NIQU5ORUxTIDgKKyNkZWZpbmUgRE1BX01PREVfUkVBRAkweDQ0CS8qIEkvTyB0byBtZW1vcnksIG5vIGF1dG9pbml0LCBpbmNyZW1lbnQsIHNpbmdsZSBtb2RlICovCisjZGVmaW5lIERNQV9NT0RFX1dSSVRFCTB4NDgJLyogbWVtb3J5IHRvIEkvTywgbm8gYXV0b2luaXQsIGluY3JlbWVudCwgc2luZ2xlIG1vZGUgKi8KKyNkZWZpbmUgRE1BX01PREVfQ0FTQ0FERSAweEMwCS8qIHBhc3MgdGhydSBEUkVRLT5IUlEsIERBQ0s8LUhMREEgb25seSAqLworCisjZGVmaW5lIERNQV9BVVRPSU5JVAkweDEwCisKKy8qIDgyMzcgRE1BIGNvbnRyb2xsZXJzICovCisjZGVmaW5lIElPX0RNQTFfQkFTRQkweDAwCS8qIDggYml0IHNsYXZlIERNQSwgY2hhbm5lbHMgMC4uMyAqLworI2RlZmluZSBJT19ETUEyX0JBU0UJMHhDMAkvKiAxNiBiaXQgbWFzdGVyIERNQSwgY2ggNCg9c2xhdmUgaW5wdXQpLi43ICovCisKKy8qIERNQSBjb250cm9sbGVyIHJlZ2lzdGVycyAqLworI2RlZmluZSBETUExX0NNRF9SRUcJCTB4MDgJLyogY29tbWFuZCByZWdpc3RlciAodykgKi8KKyNkZWZpbmUgRE1BMV9TVEFUX1JFRwkJMHgwOAkvKiBzdGF0dXMgcmVnaXN0ZXIgKHIpICovCisjZGVmaW5lIERNQTFfUkVRX1JFRyAgICAgICAgICAgIDB4MDkgICAgLyogcmVxdWVzdCByZWdpc3RlciAodykgKi8KKyNkZWZpbmUgRE1BMV9NQVNLX1JFRwkJMHgwQQkvKiBzaW5nbGUtY2hhbm5lbCBtYXNrICh3KSAqLworI2RlZmluZSBETUExX01PREVfUkVHCQkweDBCCS8qIG1vZGUgcmVnaXN0ZXIgKHcpICovCisjZGVmaW5lIERNQTFfQ0xFQVJfRkZfUkVHCTB4MEMJLyogY2xlYXIgcG9pbnRlciBmbGlwLWZsb3AgKHcpICovCisjZGVmaW5lIERNQTFfVEVNUF9SRUcgICAgICAgICAgIDB4MEQgICAgLyogVGVtcG9yYXJ5IFJlZ2lzdGVyIChyKSAqLworI2RlZmluZSBETUExX1JFU0VUX1JFRwkJMHgwRAkvKiBNYXN0ZXIgQ2xlYXIgKHcpICovCisjZGVmaW5lIERNQTFfQ0xSX01BU0tfUkVHICAgICAgIDB4MEUgICAgLyogQ2xlYXIgTWFzayAqLworI2RlZmluZSBETUExX01BU0tfQUxMX1JFRyAgICAgICAweDBGICAgIC8qIGFsbC1jaGFubmVscyBtYXNrICh3KSAqLworI2RlZmluZSBETUExX0VYVF9NT0RFX1JFRwkoMHg0MDAgfCBETUExX01PREVfUkVHKQorCisjZGVmaW5lIERNQTJfQ01EX1JFRwkJMHhEMAkvKiBjb21tYW5kIHJlZ2lzdGVyICh3KSAqLworI2RlZmluZSBETUEyX1NUQVRfUkVHCQkweEQwCS8qIHN0YXR1cyByZWdpc3RlciAocikgKi8KKyNkZWZpbmUgRE1BMl9SRVFfUkVHICAgICAgICAgICAgMHhEMiAgICAvKiByZXF1ZXN0IHJlZ2lzdGVyICh3KSAqLworI2RlZmluZSBETUEyX01BU0tfUkVHCQkweEQ0CS8qIHNpbmdsZS1jaGFubmVsIG1hc2sgKHcpICovCisjZGVmaW5lIERNQTJfTU9ERV9SRUcJCTB4RDYJLyogbW9kZSByZWdpc3RlciAodykgKi8KKyNkZWZpbmUgRE1BMl9DTEVBUl9GRl9SRUcJMHhEOAkvKiBjbGVhciBwb2ludGVyIGZsaXAtZmxvcCAodykgKi8KKyNkZWZpbmUgRE1BMl9URU1QX1JFRyAgICAgICAgICAgMHhEQSAgICAvKiBUZW1wb3JhcnkgUmVnaXN0ZXIgKHIpICovCisjZGVmaW5lIERNQTJfUkVTRVRfUkVHCQkweERBCS8qIE1hc3RlciBDbGVhciAodykgKi8KKyNkZWZpbmUgRE1BMl9DTFJfTUFTS19SRUcgICAgICAgMHhEQyAgICAvKiBDbGVhciBNYXNrICovCisjZGVmaW5lIERNQTJfTUFTS19BTExfUkVHICAgICAgIDB4REUgICAgLyogYWxsLWNoYW5uZWxzIG1hc2sgKHcpICovCisjZGVmaW5lIERNQTJfRVhUX01PREVfUkVHCSgweDQwMCB8IERNQTJfTU9ERV9SRUcpCisKK2V4dGVybiBzcGlubG9ja190IGRtYV9zcGluX2xvY2s7CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgY2xhaW1fZG1hX2xvY2sodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXNwaW5fbG9ja19pcnFzYXZlKCZkbWFfc3Bpbl9sb2NrLCBmbGFncyk7CisJcmV0dXJuIGZsYWdzOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHJlbGVhc2VfZG1hX2xvY2sodW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkbWFfc3Bpbl9sb2NrLCBmbGFncyk7Cit9CisKKworLyogR2V0IERNQSByZXNpZHVlIGNvdW50LiBBZnRlciBhIERNQSB0cmFuc2ZlciwgdGhpcworICogc2hvdWxkIHJldHVybiB6ZXJvLiBSZWFkaW5nIHRoaXMgd2hpbGUgYSBETUEgdHJhbnNmZXIgaXMKKyAqIHN0aWxsIGluIHByb2dyZXNzIHdpbGwgcmV0dXJuIHVucHJlZGljdGFibGUgcmVzdWx0cy4KKyAqIElmIGNhbGxlZCBiZWZvcmUgdGhlIGNoYW5uZWwgaGFzIGJlZW4gdXNlZCwgaXQgbWF5IHJldHVybiAxLgorICogT3RoZXJ3aXNlLCBpdCByZXR1cm5zIHRoZSBudW1iZXIgb2YgX2J5dGVzXyBsZWZ0IHRvIHRyYW5zZmVyLgorICoKKyAqIEFzc3VtZXMgRE1BIGZsaXAtZmxvcCBpcyBjbGVhci4KKyAqLworc3RhdGljIF9faW5saW5lX18gaW50IGdldF9kbWFfcmVzaWR1ZSh1bnNpZ25lZCBpbnQgZG1hbnIpCit7CisJdW5zaWduZWQgaW50IGlvX3BvcnQgPSAoZG1hbnI8PTMpPyAoKGRtYW5yJjMpPDwxKSArIDEgKyBJT19ETUExX0JBU0UKKwkJCQkJIDogKChkbWFuciYzKTw8MikgKyAyICsgSU9fRE1BMl9CQVNFOworCisJLyogdXNpbmcgc2hvcnQgdG8gZ2V0IDE2LWJpdCB3cmFwIGFyb3VuZCAqLworCXVuc2lnbmVkIHNob3J0IGNvdW50OworCisJY291bnQgPSAxICsgZG1hX2luYihpb19wb3J0KTsKKwljb3VudCArPSBkbWFfaW5iKGlvX3BvcnQpIDw8IDg7CisJCisJcmV0dXJuIChkbWFucjw9Myk/IGNvdW50IDogKGNvdW50PDwxKTsKK30KKworLyogZW5hYmxlL2Rpc2FibGUgYSBzcGVjaWZpYyBETUEgY2hhbm5lbCAqLworc3RhdGljIF9faW5saW5lX18gdm9pZCBlbmFibGVfZG1hKHVuc2lnbmVkIGludCBkbWFucikKK3sKKyNpZmRlZiBDT05GSUdfU1VQRVJJTworCWlmIChkbWFucjw9MykKKwkJZG1hX291dGIoZG1hbnIsICBETUExX01BU0tfUkVHKTsKKwllbHNlCisJCWRtYV9vdXRiKGRtYW5yICYgMywgIERNQTJfTUFTS19SRUcpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgZGlzYWJsZV9kbWEodW5zaWduZWQgaW50IGRtYW5yKQoreworI2lmZGVmIENPTkZJR19TVVBFUklPCisJaWYgKGRtYW5yPD0zKQorCQlkbWFfb3V0YihkbWFuciB8IDQsICBETUExX01BU0tfUkVHKTsKKwllbHNlCisJCWRtYV9vdXRiKChkbWFuciAmIDMpIHwgNCwgIERNQTJfTUFTS19SRUcpOworI2VuZGlmCit9CisKKy8qIHJlc2VydmUgYSBETUEgY2hhbm5lbCAqLworI2RlZmluZSByZXF1ZXN0X2RtYShkbWFuciwgZGV2aWNlX2lkKQkoMCkKKworLyogQ2xlYXIgdGhlICdETUEgUG9pbnRlciBGbGlwIEZsb3AnLgorICogV3JpdGUgMCBmb3IgTFNCL01TQiwgMSBmb3IgTVNCL0xTQiBhY2Nlc3MuCisgKiBVc2UgdGhpcyBvbmNlIHRvIGluaXRpYWxpemUgdGhlIEZGIHRvIGEga25vd24gc3RhdGUuCisgKiBBZnRlciB0aGF0LCBrZWVwIHRyYWNrIG9mIGl0LiA6LSkKKyAqIC0tLSBJbiBvcmRlciB0byBkbyB0aGF0LCB0aGUgRE1BIHJvdXRpbmVzIGJlbG93IHNob3VsZCAtLS0KKyAqIC0tLSBvbmx5IGJlIHVzZWQgd2hpbGUgaG9sZGluZyB0aGUgRE1BIGxvY2sgISAtLS0KKyAqLworc3RhdGljIF9faW5saW5lX18gdm9pZCBjbGVhcl9kbWFfZmYodW5zaWduZWQgaW50IGRtYW5yKQoreworfQorCisvKiBzZXQgbW9kZSAoYWJvdmUpIGZvciBhIHNwZWNpZmljIERNQSBjaGFubmVsICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHNldF9kbWFfbW9kZSh1bnNpZ25lZCBpbnQgZG1hbnIsIGNoYXIgbW9kZSkKK3sKK30KKworLyogU2V0IG9ubHkgdGhlIHBhZ2UgcmVnaXN0ZXIgYml0cyBvZiB0aGUgdHJhbnNmZXIgYWRkcmVzcy4KKyAqIFRoaXMgaXMgdXNlZCBmb3Igc3VjY2Vzc2l2ZSB0cmFuc2ZlcnMgd2hlbiB3ZSBrbm93IHRoZSBjb250ZW50cyBvZgorICogdGhlIGxvd2VyIDE2IGJpdHMgb2YgdGhlIERNQSBjdXJyZW50IGFkZHJlc3MgcmVnaXN0ZXIsIGJ1dCBhIDY0ayBib3VuZGFyeQorICogbWF5IGhhdmUgYmVlbiBjcm9zc2VkLgorICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHNldF9kbWFfcGFnZSh1bnNpZ25lZCBpbnQgZG1hbnIsIGNoYXIgcGFnZW5yKQoreworfQorCisKKy8qIFNldCB0cmFuc2ZlciBhZGRyZXNzICYgcGFnZSBiaXRzIGZvciBzcGVjaWZpYyBETUEgY2hhbm5lbC4KKyAqIEFzc3VtZXMgZG1hIGZsaXBmbG9wIGlzIGNsZWFyLgorICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHNldF9kbWFfYWRkcih1bnNpZ25lZCBpbnQgZG1hbnIsIHVuc2lnbmVkIGludCBhKQoreworfQorCisKKy8qIFNldCB0cmFuc2ZlciBzaXplIChtYXggNjRrIGZvciBETUExLi4zLCAxMjhrIGZvciBETUE1Li43KSBmb3IKKyAqIGEgc3BlY2lmaWMgRE1BIGNoYW5uZWwuCisgKiBZb3UgbXVzdCBlbnN1cmUgdGhlIHBhcmFtZXRlcnMgYXJlIHZhbGlkLgorICogTk9URTogZnJvbSBhIG1hbnVhbDogInRoZSBudW1iZXIgb2YgdHJhbnNmZXJzIGlzIG9uZSBtb3JlCisgKiB0aGFuIHRoZSBpbml0aWFsIHdvcmQgY291bnQiISBUaGlzIGlzIHRha2VuIGludG8gYWNjb3VudC4KKyAqIEFzc3VtZXMgZG1hIGZsaXAtZmxvcCBpcyBjbGVhci4KKyAqIE5PVEUgMjogImNvdW50IiByZXByZXNlbnRzIF9ieXRlc18gYW5kIG11c3QgYmUgZXZlbiBmb3IgY2hhbm5lbHMgNS03LgorICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHNldF9kbWFfY291bnQodW5zaWduZWQgaW50IGRtYW5yLCB1bnNpZ25lZCBpbnQgY291bnQpCit7Cit9CisKKworI2RlZmluZSBmcmVlX2RtYShkbWFucikKKworI2lmZGVmIENPTkZJR19QQ0kKK2V4dGVybiBpbnQgaXNhX2RtYV9icmlkZ2VfYnVnZ3k7CisjZWxzZQorI2RlZmluZSBpc2FfZG1hX2JyaWRnZV9idWdneSAJKDApCisjZW5kaWYKKworI2VuZGlmIC8qIF9BU01fRE1BX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9laXNhX2J1cy5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL2Vpc2FfYnVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjAxMDg1ZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9laXNhX2J1cy5oCkBAIC0wLDAgKzEsMjMgQEAKKy8qCisgKiBlaXNhX2J1cy5oIGludGVyZmFjZSBiZXR3ZWVuIHRoZSBlaXNhIEJBIGRyaXZlciBhbmQgdGhlIGJ1cyBlbnVtZXJhdG9yCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIgRGFuaWVsIEVuZ3N0cm9tIDw1MTE2QHRlbGlhLmNvbT4KKyAqCisgKi8KKworI2lmbmRlZiBBU01fRUlTQV9ICisjZGVmaW5lIEFTTV9FSVNBX0gKKworZXh0ZXJuIHZvaWQgZWlzYV9tYWtlX2lycV9sZXZlbChpbnQgbnVtKTsKK2V4dGVybiB2b2lkIGVpc2FfbWFrZV9pcnFfZWRnZShpbnQgbnVtKTsKK2V4dGVybiBpbnQgZWlzYV9lbnVtZXJhdG9yKHVuc2lnbmVkIGxvbmcgZWVwcm9tX2FkZHIsCisJCQkgICBzdHJ1Y3QgcmVzb3VyY2UgKmlvX3BhcmVudCwgCisJCQkgICBzdHJ1Y3QgcmVzb3VyY2UgKm1lbV9wYXJlbnQpOworZXh0ZXJuIGludCBlaXNhX2VlcHJvbV9pbml0KHVuc2lnbmVkIGxvbmcgYWRkcik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL2Vpc2FfZWVwcm9tLmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvZWlzYV9lZXByb20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzlkYTk4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL2Vpc2FfZWVwcm9tLmgKQEAgLTAsMCArMSwxNTMgQEAKKy8qCisgKiBlaXNhX2VlcHJvbS5oIC0gcHJvdmlkZSBzdXBwb3J0IGZvciBFSVNBIGFkYXB0ZXJzIGluIFBBLVJJU0MgbWFjaGluZXMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwMiBEYW5pZWwgRW5nc3Ryb20gPDUxMTZAdGVsaWEuY29tPgorICoKKyAqLworCisjaWZuZGVmIEFTTV9FSVNBX0VFUFJPTV9ICisjZGVmaW5lIEFTTV9FSVNBX0VFUFJPTV9ICisKK2V4dGVybiB2b2lkIF9faW9tZW0gKmVpc2FfZWVwcm9tX2FkZHI7CisKKyNkZWZpbmUgSFBFRV9NQVhfTEVOR1RIICAgICAgIDB4MjAwMAkvKiBtYXhpbXVtIGVlcHJvbSBsZW5ndGggKi8KKworI2RlZmluZSBIUEVFX1NMT1RfSU5GTyhzbG90KSAoMjArKDQ4KnNsb3QpKQorCitzdHJ1Y3QgZWVwcm9tX2hlYWRlciAKK3sKKyAgIAorCXVfaW50MzJfdCBudW1fd3JpdGVzOyAgICAgICAvKiBudW1iZXIgb2Ygd3JpdGVzICovCisgCXVfaW50OF90ICBmbGFnczsgICAgICAgICAgICAvKiBmbGFncywgdXNhZ2U/ICovCisJdV9pbnQ4X3QgIHZlcl9tYWo7CisJdV9pbnQ4X3QgIHZlcl9taW47CisJdV9pbnQ4X3QgIG51bV9zbG90czsgICAgICAgIC8qIG51bWJlciBvZiBFSVNBIHNsb3RzIGluIHN5c3RlbSAqLworCXVfaW50MTZfdCBjc3VtOyAgICAgICAgICAgICAvKiBjaGVja3N1bSwgSSBkb24ndCBrbm93IGhvdyB0byBjYWx1bGF0ZSB0aGlzICovCisJdV9pbnQ4X3QgIHBhZFsxMF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworCitzdHJ1Y3QgZWVwcm9tX2Vpc2Ffc2xvdF9pbmZvCit7CisJdV9pbnQzMl90IGVpc2Ffc2xvdF9pZDsKKwl1X2ludDMyX3QgY29uZmlnX2RhdGFfb2Zmc2V0OworCXVfaW50MzJfdCBudW1fd3JpdGVzOworCXVfaW50MTZfdCBjc3VtOworCXVfaW50MTZfdCBudW1fZnVuY3Rpb25zOworCXVfaW50MTZfdCBjb25maWdfZGF0YV9sZW5ndGg7CisJCisJLyogYml0cyAwLi4zIGFyZSB0aGUgZHVwbGljYXRlIHNsb3QgaWQgKi8gCisjZGVmaW5lIEhQRUVfU0xPVF9JTkZPX0VNQkVEREVEICAweDEwCisjZGVmaW5lIEhQRUVfU0xPVF9JTkZPX1ZJUlRVQUwgICAweDIwCisjZGVmaW5lIEhQRUVfU0xPVF9JTkZPX05PX1JFQURJRCAweDQwCisjZGVmaW5lIEhQRUVfU0xPVF9JTkZPX0RVUExJQ0FURSAweDgwCisJdV9pbnQ4X3Qgc2xvdF9pbmZvOworCQorI2RlZmluZSBIUEVFX1NMT1RfRkVBVFVSRVNfRU5BQkxFICAgICAgICAgMHgwMQorI2RlZmluZSBIUEVFX1NMT1RfRkVBVFVSRVNfSU9DSEsgICAgICAgICAgMHgwMgorI2RlZmluZSBIUEVFX1NMT1RfRkVBVFVSRVNfQ0ZHX0lOQ09NUExFVEUgMHg4MAorCXVfaW50OF90IHNsb3RfZmVhdHVyZXM7CisJCisJdV9pbnQ4X3QgIHZlcl9taW47CisJdV9pbnQ4X3QgIHZlcl9tYWo7CisJCisjZGVmaW5lIEhQRUVfRlVOQ1RJT05fSU5GT19IQVZFX1RZUEUgICAgICAweDAxCisjZGVmaW5lIEhQRUVfRlVOQ1RJT05fSU5GT19IQVZFX01FTU9SWSAgICAweDAyCisjZGVmaW5lIEhQRUVfRlVOQ1RJT05fSU5GT19IQVZFX0lSUSAgICAgICAweDA0CisjZGVmaW5lIEhQRUVfRlVOQ1RJT05fSU5GT19IQVZFX0RNQSAgICAgICAweDA4CisjZGVmaW5lIEhQRUVfRlVOQ1RJT05fSU5GT19IQVZFX1BPUlQgICAgICAweDEwCisjZGVmaW5lIEhQRUVfRlVOQ1RJT05fSU5GT19IQVZFX1BPUlRfSU5JVCAweDIwCisvKiBJIHRoaW5rIHRoZXJlIGFyZSB0d28gc2xpZ2h0eSBkaWZmZXJlbnQgCisgKiB2ZXJzaW9ucyBvZiB0aGUgZnVuY3Rpb25faW5mbyBmaWVsZCAKKyAqIG9uZSBpbnQgdGhlIGZpeGVkIGhlYWRlciBhbmQgb25lIG9wdGlvbmFsIAorICogaW4gdGhlIHBhcnNlZCBzbG90IGRhdGEgYXJlYSAqLworI2RlZmluZSBIUEVFX0ZVTkNUSU9OX0lORk9fSEFWRV9GVU5DVElPTiAgMHgwMQorI2RlZmluZSBIUEVFX0ZVTkNUSU9OX0lORk9fRl9ESVNBQkxFRCAgICAgMHg4MAorI2RlZmluZSBIUEVFX0ZVTkNUSU9OX0lORk9fQ0ZHX0ZSRUVfRk9STSAgMHg0MAorCXVfaW50OF90ICBmdW5jdGlvbl9pbmZvOworCisjZGVmaW5lIEhQRUVfRkxBR19CT0FSRF9JU19JU0EJCSAgMHgwMSAvKiBmbGFnIGFuZCBtaW5vciB2ZXJzaW9uIGZvciBpc2EgYm9hcmQgKi8KKwl1X2ludDhfdCAgZmxhZ3M7CisJdV9pbnQ4X3QgIHBhZFsyNF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworCisjZGVmaW5lIEhQRUVfTUVNT1JZX01BWF9FTlQgICA5CisvKiBtZW1vcnkgZGVzY3JpcHRvcjogYnl0ZSAwICovCisjZGVmaW5lIEhQRUVfTUVNT1JZX1dSSVRBQkxFICAweDAxCisjZGVmaW5lIEhQRUVfTUVNT1JZX0NBQ0hBQkxFICAweDAyCisjZGVmaW5lIEhQRUVfTUVNT1JZX1RZUEVfTUFTSyAweDE4CisjZGVmaW5lIEhQRUVfTUVNT1JZX1RZUEVfU1lTICAweDAwCisjZGVmaW5lIEhQRUVfTUVNT1JZX1RZUEVfRVhQICAweDA4CisjZGVmaW5lIEhQRUVfTUVNT1JZX1RZUEVfVklSICAweDEwCisjZGVmaW5lIEhQRUVfTUVNT1JZX1RZUEVfT1RIICAweDE4CisjZGVmaW5lIEhQRUVfTUVNT1JZX1NIQVJFRCAgICAweDIwCisjZGVmaW5lIEhQRUVfTUVNT1JZX01PUkUgICAgICAweDgwCisKKy8qIG1lbW9yeSBkZXNjcmlwdG9yOiBieXRlIDEgKi8KKyNkZWZpbmUgSFBFRV9NRU1PUllfV0lEVEhfTUFTSyAweDAzCisjZGVmaW5lIEhQRUVfTUVNT1JZX1dJRFRIX0JZVEUgMHgwMAorI2RlZmluZSBIUEVFX01FTU9SWV9XSURUSF9XT1JEIDB4MDEKKyNkZWZpbmUgSFBFRV9NRU1PUllfV0lEVEhfRFdPUkQgMHgwMgorI2RlZmluZSBIUEVFX01FTU9SWV9ERUNPREVfTUFTSyAweDBjCisjZGVmaW5lIEhQRUVfTUVNT1JZX0RFQ09ERV8yMEJJVFMgMHgwMAorI2RlZmluZSBIUEVFX01FTU9SWV9ERUNPREVfMjRCSVRTIDB4MDQKKyNkZWZpbmUgSFBFRV9NRU1PUllfREVDT0RFXzMyQklUUyAweDA4CisvKiBieXRlIDIgYW5kIDMgYXJlIGEgMTZiaXQgTEUgdmFsdWUKKyAqIGNvbnRhaW5naW5nIHRoZSBtZW1vcnkgc2l6ZSBpbiBraWxvYnl0ZXMgKi8KKy8qIGJ5dGUgNCw1LDYgYXJlIGEgMjRiaXQgTEUgdmFsdWUKKyAqIGNvbnRhaW5pbmcgdGhlIG1lbW9yeSBiYXNlIGFkZHJlc3MgKi8KKworCisjZGVmaW5lIEhQRUVfSVJRX01BWF9FTlQgICAgICA3CisvKiBJbnRlcnJ1cHQgZW50cnk6IGJ5dGUgMCAqLworI2RlZmluZSBIUEVFX0lSUV9DSEFOTkVMX01BU0sgMHhmCisjZGVmaW5lIEhQRUVfSVJRX1RSSUdfTEVWRUwgICAweDIwCisjZGVmaW5lIEhQRUVfSVJRX01PUkUgICAgICAgICAweDgwCisvKiBieXRlIDEgc2VlbXMgdG8gYmUgdW51c2VkICovCisKKyNkZWZpbmUgSFBFRV9ETUFfTUFYX0VOVCAgICAgNAorCisvKiBkbWEgZW50cnk6IGJ5dGUgMCAqLworI2RlZmluZSBIUEVFX0RNQV9DSEFOTkVMX01BU0sgNworI2RlZmluZSBIUEVFX0RNQV9TSVpFX01BU0sJMHhjCisjZGVmaW5lIEhQRUVfRE1BX1NJWkVfQllURQkweDAKKyNkZWZpbmUgSFBFRV9ETUFfU0laRV9XT1JECTB4NAorI2RlZmluZSBIUEVFX0RNQV9TSVpFX0RXT1JECTB4OAorI2RlZmluZSBIUEVFX0RNQV9TSEFSRUQgICAgICAweDQwCisjZGVmaW5lIEhQRUVfRE1BX01PUkUgICAgICAgIDB4ODAKKworLyogZG1hIGVudHJ5OiBieXRlIDEgKi8KKyNkZWZpbmUgSFBFRV9ETUFfVElNSU5HX01BU0sgMHgzMAorI2RlZmluZSBIUEVFX0RNQV9USU1JTkdfSVNBCTB4MAorI2RlZmluZSBIUEVFX0RNQV9USU1JTkdfVFlQRUEgMHgxMAorI2RlZmluZSBIUEVFX0RNQV9USU1JTkdfVFlQRUIgMHgyMAorI2RlZmluZSBIUEVFX0RNQV9USU1JTkdfVFlQRUMgMHgzMAorCisjZGVmaW5lIEhQRUVfUE9SVF9NQVhfRU5UIDIwCisvKiBwb3J0IGVudHJ5IGJ5dGUgMCAqLworI2RlZmluZSBIUEVFX1BPUlRfU0laRV9NQVNLIDB4MWYKKyNkZWZpbmUgSFBFRV9QT1JUX1NIQVJFRCAgICAweDQwCisjZGVmaW5lIEhQRUVfUE9SVF9NT1JFICAgICAgMHg4MAorLyogYnl0ZSAxIGFuZCAyIGlzIGEgMTZiaXQgTEUgdmFsdWUKKyAqIGNvbmF0aW5nIHRoZSBzdGFydCBwb3J0IG51bWJlciAqLworCisjZGVmaW5lIEhQRUVfUE9SVF9JTklUX01BWF9MRU4gICAgIDYwIC8qIGluIGJ5dGVzIGhlcmUgKi8KKy8qIHBvcnQgaW5pdCBlbnRyeSBieXRlIDAgKi8KKyNkZWZpbmUgSFBFRV9QT1JUX0lOSVRfV0lEVEhfTUFTSyAgMHgzCisjZGVmaW5lIEhQRUVfUE9SVF9JTklUX1dJRFRIX0JZVEUgIDB4MAorI2RlZmluZSBIUEVFX1BPUlRfSU5JVF9XSURUSF9XT1JEICAweDEKKyNkZWZpbmUgSFBFRV9QT1JUX0lOSVRfV0lEVEhfRFdPUkQgMHgyCisjZGVmaW5lIEhQRUVfUE9SVF9JTklUX01BU0sgICAgICAgIDB4NAorI2RlZmluZSBIUEVFX1BPUlRfSU5JVF9NT1JFICAgICAgICAweDgwCisKKyNkZWZpbmUgSFBFRV9TRUxFQ1RJT05fTUFYX0VOVCAyNgorCisjZGVmaW5lIEhQRUVfVFlQRV9NQVhfTEVOICAgIDgwCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL2VsZi5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL2VsZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkZWE2NWYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2MvZWxmLmgKQEAgLTAsMCArMSwzNDcgQEAKKyNpZm5kZWYgX19BU01QQVJJU0NfRUxGX0gKKyNkZWZpbmUgX19BU01QQVJJU0NfRUxGX0gKKworLyoKKyAqIEVMRiByZWdpc3RlciBkZWZpbml0aW9ucy4uCisgKi8KKworI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKworI2RlZmluZSBFTV9QQVJJU0MgMTUKKworLyogSFBQQSBzcGVjaWZpYyBkZWZpbml0aW9ucy4gICovCisKKy8qIExlZ2FsIHZhbHVlcyBmb3IgZV9mbGFncyBmaWVsZCBvZiBFbGYzMl9FaGRyLiAgKi8KKworI2RlZmluZSBFRl9QQVJJU0NfVFJBUE5JTAkweDAwMDEwMDAwIC8qIFRyYXAgbmlsIHBvaW50ZXIgZGVyZWZlcmVuY2UuICAqLworI2RlZmluZSBFRl9QQVJJU0NfRVhUCQkweDAwMDIwMDAwIC8qIFByb2dyYW0gdXNlcyBhcmNoLiBleHRlbnNpb25zLiAqLworI2RlZmluZSBFRl9QQVJJU0NfTFNCCQkweDAwMDQwMDAwIC8qIFByb2dyYW0gZXhwZWN0cyBsaXR0bGUgZW5kaWFuLiAqLworI2RlZmluZSBFRl9QQVJJU0NfV0lERQkJMHgwMDA4MDAwMCAvKiBQcm9ncmFtIGV4cGVjdHMgd2lkZSBtb2RlLiAgKi8KKyNkZWZpbmUgRUZfUEFSSVNDX05PX0tBQlAJMHgwMDEwMDAwMCAvKiBObyBrZXJuZWwgYXNzaXN0ZWQgYnJhbmNoCisJCQkJCSAgICAgIHByZWRpY3Rpb24uICAqLworI2RlZmluZSBFRl9QQVJJU0NfTEFaWVNXQVAJMHgwMDQwMDAwMCAvKiBBbGxvdyBsYXp5IHN3YXBwaW5nLiAgKi8KKyNkZWZpbmUgRUZfUEFSSVNDX0FSQ0gJCTB4MDAwMGZmZmYgLyogQXJjaGl0ZWN0dXJlIHZlcnNpb24uICAqLworCisvKiBEZWZpbmVkIHZhbHVlcyBmb3IgYGVfZmxhZ3MgJiBFRl9QQVJJU0NfQVJDSCcgYXJlOiAgKi8KKworI2RlZmluZSBFRkFfUEFSSVNDXzFfMAkJICAgIDB4MDIwYiAvKiBQQS1SSVNDIDEuMCBiaWctZW5kaWFuLiAgKi8KKyNkZWZpbmUgRUZBX1BBUklTQ18xXzEJCSAgICAweDAyMTAgLyogUEEtUklTQyAxLjEgYmlnLWVuZGlhbi4gICovCisjZGVmaW5lIEVGQV9QQVJJU0NfMl8wCQkgICAgMHgwMjE0IC8qIFBBLVJJU0MgMi4wIGJpZy1lbmRpYW4uICAqLworCisvKiBBZGRpdGlvbmFsIHNlY3Rpb24gaW5kZWNlcy4gICovCisKKyNkZWZpbmUgU0hOX1BBUklTQ19BTlNJX0NPTU1PTgkweGZmMDAJICAgLyogU2VjdGlvbiBmb3IgdGVuYXRpdmVseSBkZWNsYXJlZAorCQkJCQkgICAgICBzeW1ib2xzIGluIEFOU0kgQy4gICovCisjZGVmaW5lIFNITl9QQVJJU0NfSFVHRV9DT01NT04JMHhmZjAxCSAgIC8qIENvbW1vbiBibG9ja3MgaW4gaHVnZSBtb2RlbC4gICovCisKKy8qIExlZ2FsIHZhbHVlcyBmb3Igc2hfdHlwZSBmaWVsZCBvZiBFbGYzMl9TaGRyLiAgKi8KKworI2RlZmluZSBTSFRfUEFSSVNDX0VYVAkJMHg3MDAwMDAwMCAvKiBDb250YWlucyBwcm9kdWN0IHNwZWNpZmljIGV4dC4gKi8KKyNkZWZpbmUgU0hUX1BBUklTQ19VTldJTkQJMHg3MDAwMDAwMSAvKiBVbndpbmQgaW5mb3JtYXRpb24uICAqLworI2RlZmluZSBTSFRfUEFSSVNDX0RPQwkJMHg3MDAwMDAwMiAvKiBEZWJ1ZyBpbmZvIGZvciBvcHRpbWl6ZWQgY29kZS4gKi8KKworLyogTGVnYWwgdmFsdWVzIGZvciBzaF9mbGFncyBmaWVsZCBvZiBFbGYzMl9TaGRyLiAgKi8KKworI2RlZmluZSBTSEZfUEFSSVNDX1NIT1JUCTB4MjAwMDAwMDAgLyogU2VjdGlvbiB3aXRoIHNob3J0IGFkZHJlc3NpbmcuICovCisjZGVmaW5lIFNIRl9QQVJJU0NfSFVHRQkJMHg0MDAwMDAwMCAvKiBTZWN0aW9uIGZhciBmcm9tIGdwLiAgKi8KKyNkZWZpbmUgU0hGX1BBUklTQ19TQlAJCTB4ODAwMDAwMDAgLyogU3RhdGljIGJyYW5jaCBwcmVkaWN0aW9uIGNvZGUuICovCisKKy8qIExlZ2FsIHZhbHVlcyBmb3IgU1RfVFlQRSBzdWJmaWVsZCBvZiBzdF9pbmZvIChzeW1ib2wgdHlwZSkuICAqLworCisjZGVmaW5lIFNUVF9QQVJJU0NfTUlMTElDT0RFCTEzCS8qIE1pbGxpY29kZSBmdW5jdGlvbiBlbnRyeSBwb2ludC4gICovCisKKyNkZWZpbmUgU1RUX0hQX09QQVFVRQkJKFNUVF9MT09TICsgMHgxKQorI2RlZmluZSBTVFRfSFBfU1RVQgkJKFNUVF9MT09TICsgMHgyKQorCisvKiBIUFBBIHJlbG9jcy4gICovCisKKyNkZWZpbmUgUl9QQVJJU0NfTk9ORQkJMAkvKiBObyByZWxvYy4gICovCisjZGVmaW5lIFJfUEFSSVNDX0RJUjMyCQkxCS8qIERpcmVjdCAzMi1iaXQgcmVmZXJlbmNlLiAgKi8KKyNkZWZpbmUgUl9QQVJJU0NfRElSMjFMCQkyCS8qIExlZnQgMjEgYml0cyBvZiBlZmYuIGFkZHJlc3MuICAqLworI2RlZmluZSBSX1BBUklTQ19ESVIxN1IJCTMJLyogUmlnaHQgMTcgYml0cyBvZiBlZmYuIGFkZHJlc3MuICAqLworI2RlZmluZSBSX1BBUklTQ19ESVIxN0YJCTQJLyogMTcgYml0cyBvZiBlZmYuIGFkZHJlc3MuICAqLworI2RlZmluZSBSX1BBUklTQ19ESVIxNFIJCTYJLyogUmlnaHQgMTQgYml0cyBvZiBlZmYuIGFkZHJlc3MuICAqLworI2RlZmluZSBSX1BBUklTQ19QQ1JFTDMyCTkJLyogMzItYml0IHJlbC4gYWRkcmVzcy4gICovCisjZGVmaW5lIFJfUEFSSVNDX1BDUkVMMjFMCTEwCS8qIExlZnQgMjEgYml0cyBvZiByZWwuIGFkZHJlc3MuICAqLworI2RlZmluZSBSX1BBUklTQ19QQ1JFTDE3UgkxMQkvKiBSaWdodCAxNyBiaXRzIG9mIHJlbC4gYWRkcmVzcy4gICovCisjZGVmaW5lIFJfUEFSSVNDX1BDUkVMMTdGCTEyCS8qIDE3IGJpdHMgb2YgcmVsLiBhZGRyZXNzLiAgKi8KKyNkZWZpbmUgUl9QQVJJU0NfUENSRUwxNFIJMTQJLyogUmlnaHQgMTQgYml0cyBvZiByZWwuIGFkZHJlc3MuICAqLworI2RlZmluZSBSX1BBUklTQ19EUFJFTDIxTAkxOAkvKiBMZWZ0IDIxIGJpdHMgb2YgcmVsLiBhZGRyZXNzLiAgKi8KKyNkZWZpbmUgUl9QQVJJU0NfRFBSRUwxNFIJMjIJLyogUmlnaHQgMTQgYml0cyBvZiByZWwuIGFkZHJlc3MuICAqLworI2RlZmluZSBSX1BBUklTQ19HUFJFTDIxTAkyNgkvKiBHUC1yZWxhdGl2ZSwgbGVmdCAyMSBiaXRzLiAgKi8KKyNkZWZpbmUgUl9QQVJJU0NfR1BSRUwxNFIJMzAJLyogR1AtcmVsYXRpdmUsIHJpZ2h0IDE0IGJpdHMuICAqLworI2RlZmluZSBSX1BBUklTQ19MVE9GRjIxTAkzNAkvKiBMVC1yZWxhdGl2ZSwgbGVmdCAyMSBiaXRzLiAgKi8KKyNkZWZpbmUgUl9QQVJJU0NfTFRPRkYxNFIJMzgJLyogTFQtcmVsYXRpdmUsIHJpZ2h0IDE0IGJpdHMuICAqLworI2RlZmluZSBSX1BBUklTQ19TRUNSRUwzMgk0MQkvKiAzMiBiaXRzIHNlY3Rpb24gcmVsLiBhZGRyZXNzLiAgKi8KKyNkZWZpbmUgUl9QQVJJU0NfU0VHQkFTRQk0OAkvKiBObyByZWxvY2F0aW9uLCBzZXQgc2VnbWVudCBiYXNlLiAgKi8KKyNkZWZpbmUgUl9QQVJJU0NfU0VHUkVMMzIJNDkJLyogMzIgYml0cyBzZWdtZW50IHJlbC4gYWRkcmVzcy4gICovCisjZGVmaW5lIFJfUEFSSVNDX1BMVE9GRjIxTAk1MAkvKiBQTFQgcmVsLiBhZGRyZXNzLCBsZWZ0IDIxIGJpdHMuICAqLworI2RlZmluZSBSX1BBUklTQ19QTFRPRkYxNFIJNTQJLyogUExUIHJlbC4gYWRkcmVzcywgcmlnaHQgMTQgYml0cy4gICovCisjZGVmaW5lIFJfUEFSSVNDX0xUT0ZGX0ZQVFIzMgk1NwkvKiAzMiBiaXRzIExULXJlbC4gZnVuY3Rpb24gcG9pbnRlci4gKi8KKyNkZWZpbmUgUl9QQVJJU0NfTFRPRkZfRlBUUjIxTAk1OAkvKiBMVC1yZWwuIGZjdCBwdHIsIGxlZnQgMjEgYml0cy4gKi8KKyNkZWZpbmUgUl9QQVJJU0NfTFRPRkZfRlBUUjE0Ugk2MgkvKiBMVC1yZWwuIGZjdCBwdHIsIHJpZ2h0IDE0IGJpdHMuICovCisjZGVmaW5lIFJfUEFSSVNDX0ZQVFI2NAkJNjQJLyogNjQgYml0cyBmdW5jdGlvbiBhZGRyZXNzLiAgKi8KKyNkZWZpbmUgUl9QQVJJU0NfUExBQkVMMzIJNjUJLyogMzIgYml0cyBmdW5jdGlvbiBhZGRyZXNzLiAgKi8KKyNkZWZpbmUgUl9QQVJJU0NfUENSRUw2NAk3MgkvKiA2NCBiaXRzIFBDLXJlbC4gYWRkcmVzcy4gICovCisjZGVmaW5lIFJfUEFSSVNDX1BDUkVMMjJGCTc0CS8qIDIyIGJpdHMgUEMtcmVsLiBhZGRyZXNzLiAgKi8KKyNkZWZpbmUgUl9QQVJJU0NfUENSRUwxNFdSCTc1CS8qIFBDLXJlbC4gYWRkcmVzcywgcmlnaHQgMTQgYml0cy4gICovCisjZGVmaW5lIFJfUEFSSVNDX1BDUkVMMTREUgk3NgkvKiBQQyByZWwuIGFkZHJlc3MsIHJpZ2h0IDE0IGJpdHMuICAqLworI2RlZmluZSBSX1BBUklTQ19QQ1JFTDE2Rgk3NwkvKiAxNiBiaXRzIFBDLXJlbC4gYWRkcmVzcy4gICovCisjZGVmaW5lIFJfUEFSSVNDX1BDUkVMMTZXRgk3OAkvKiAxNiBiaXRzIFBDLXJlbC4gYWRkcmVzcy4gICovCisjZGVmaW5lIFJfUEFSSVNDX1BDUkVMMTZERgk3OQkvKiAxNiBiaXRzIFBDLXJlbC4gYWRkcmVzcy4gICovCisjZGVmaW5lIFJfUEFSSVNDX0RJUjY0CQk4MAkvKiA2NCBiaXRzIG9mIGVmZi4gYWRkcmVzcy4gICovCisjZGVmaW5lIFJfUEFSSVNDX0RJUjE0V1IJODMJLyogMTQgYml0cyBvZiBlZmYuIGFkZHJlc3MuICAqLworI2RlZmluZSBSX1BBUklTQ19ESVIxNERSCTg0CS8qIDE0IGJpdHMgb2YgZWZmLiBhZGRyZXNzLiAgKi8KKyNkZWZpbmUgUl9QQVJJU0NfRElSMTZGCQk4NQkvKiAxNiBiaXRzIG9mIGVmZi4gYWRkcmVzcy4gICovCisjZGVmaW5lIFJfUEFSSVNDX0RJUjE2V0YJODYJLyogMTYgYml0cyBvZiBlZmYuIGFkZHJlc3MuICAqLworI2RlZmluZSBSX1BBUklTQ19ESVIxNkRGCTg3CS8qIDE2IGJpdHMgb2YgZWZmLiBhZGRyZXNzLiAgKi8KKyNkZWZpbmUgUl9QQVJJU0NfR1BSRUw2NAk4OAkvKiA2NCBiaXRzIG9mIEdQLXJlbC4gYWRkcmVzcy4gICovCisjZGVmaW5lIFJfUEFSSVNDX0dQUkVMMTRXUgk5MQkvKiBHUC1yZWwuIGFkZHJlc3MsIHJpZ2h0IDE0IGJpdHMuICAqLworI2RlZmluZSBSX1BBUklTQ19HUFJFTDE0RFIJOTIJLyogR1AtcmVsLiBhZGRyZXNzLCByaWdodCAxNCBiaXRzLiAgKi8KKyNkZWZpbmUgUl9QQVJJU0NfR1BSRUwxNkYJOTMJLyogMTYgYml0cyBHUC1yZWwuIGFkZHJlc3MuICAqLworI2RlZmluZSBSX1BBUklTQ19HUFJFTDE2V0YJOTQJLyogMTYgYml0cyBHUC1yZWwuIGFkZHJlc3MuICAqLworI2RlZmluZSBSX1BBUklTQ19HUFJFTDE2REYJOTUJLyogMTYgYml0cyBHUC1yZWwuIGFkZHJlc3MuICAqLworI2RlZmluZSBSX1BBUklTQ19MVE9GRjY0CTk2CS8qIDY0IGJpdHMgTFQtcmVsLiBhZGRyZXNzLiAgKi8KKyNkZWZpbmUgUl9QQVJJU0NfTFRPRkYxNFdSCTk5CS8qIExULXJlbC4gYWRkcmVzcywgcmlnaHQgMTQgYml0cy4gICovCisjZGVmaW5lIFJfUEFSSVNDX0xUT0ZGMTREUgkxMDAJLyogTFQtcmVsLiBhZGRyZXNzLCByaWdodCAxNCBiaXRzLiAgKi8KKyNkZWZpbmUgUl9QQVJJU0NfTFRPRkYxNkYJMTAxCS8qIDE2IGJpdHMgTFQtcmVsLiBhZGRyZXNzLiAgKi8KKyNkZWZpbmUgUl9QQVJJU0NfTFRPRkYxNldGCTEwMgkvKiAxNiBiaXRzIExULXJlbC4gYWRkcmVzcy4gICovCisjZGVmaW5lIFJfUEFSSVNDX0xUT0ZGMTZERgkxMDMJLyogMTYgYml0cyBMVC1yZWwuIGFkZHJlc3MuICAqLworI2RlZmluZSBSX1BBUklTQ19TRUNSRUw2NAkxMDQJLyogNjQgYml0cyBzZWN0aW9uIHJlbC4gYWRkcmVzcy4gICovCisjZGVmaW5lIFJfUEFSSVNDX1NFR1JFTDY0CTExMgkvKiA2NCBiaXRzIHNlZ21lbnQgcmVsLiBhZGRyZXNzLiAgKi8KKyNkZWZpbmUgUl9QQVJJU0NfUExUT0ZGMTRXUgkxMTUJLyogUExULXJlbC4gYWRkcmVzcywgcmlnaHQgMTQgYml0cy4gICovCisjZGVmaW5lIFJfUEFSSVNDX1BMVE9GRjE0RFIJMTE2CS8qIFBMVC1yZWwuIGFkZHJlc3MsIHJpZ2h0IDE0IGJpdHMuICAqLworI2RlZmluZSBSX1BBUklTQ19QTFRPRkYxNkYJMTE3CS8qIDE2IGJpdHMgTFQtcmVsLiBhZGRyZXNzLiAgKi8KKyNkZWZpbmUgUl9QQVJJU0NfUExUT0ZGMTZXRgkxMTgJLyogMTYgYml0cyBQTFQtcmVsLiBhZGRyZXNzLiAgKi8KKyNkZWZpbmUgUl9QQVJJU0NfUExUT0ZGMTZERgkxMTkJLyogMTYgYml0cyBQTFQtcmVsLiBhZGRyZXNzLiAgKi8KKyNkZWZpbmUgUl9QQVJJU0NfTFRPRkZfRlBUUjY0CTEyMAkvKiA2NCBiaXRzIExULXJlbC4gZnVuY3Rpb24gcHRyLiAgKi8KKyNkZWZpbmUgUl9QQVJJU0NfTFRPRkZfRlBUUjE0V1IJMTIzCS8qIExULXJlbC4gZmN0LiBwdHIuLCByaWdodCAxNCBiaXRzLiAqLworI2RlZmluZSBSX1BBUklTQ19MVE9GRl9GUFRSMTREUgkxMjQJLyogTFQtcmVsLiBmY3QuIHB0ci4sIHJpZ2h0IDE0IGJpdHMuICovCisjZGVmaW5lIFJfUEFSSVNDX0xUT0ZGX0ZQVFIxNkYJMTI1CS8qIDE2IGJpdHMgTFQtcmVsLiBmdW5jdGlvbiBwdHIuICAqLworI2RlZmluZSBSX1BBUklTQ19MVE9GRl9GUFRSMTZXRgkxMjYJLyogMTYgYml0cyBMVC1yZWwuIGZ1bmN0aW9uIHB0ci4gICovCisjZGVmaW5lIFJfUEFSSVNDX0xUT0ZGX0ZQVFIxNkRGCTEyNwkvKiAxNiBiaXRzIExULXJlbC4gZnVuY3Rpb24gcHRyLiAgKi8KKyNkZWZpbmUgUl9QQVJJU0NfTE9SRVNFUlZFCTEyOAorI2RlZmluZSBSX1BBUklTQ19DT1BZCQkxMjgJLyogQ29weSByZWxvY2F0aW9uLiAgKi8KKyNkZWZpbmUgUl9QQVJJU0NfSVBMVAkJMTI5CS8qIER5bmFtaWMgcmVsb2MsIGltcG9ydGVkIFBMVCAqLworI2RlZmluZSBSX1BBUklTQ19FUExUCQkxMzAJLyogRHluYW1pYyByZWxvYywgZXhwb3J0ZWQgUExUICovCisjZGVmaW5lIFJfUEFSSVNDX1RQUkVMMzIJMTUzCS8qIDMyIGJpdHMgVFAtcmVsLiBhZGRyZXNzLiAgKi8KKyNkZWZpbmUgUl9QQVJJU0NfVFBSRUwyMUwJMTU0CS8qIFRQLXJlbC4gYWRkcmVzcywgbGVmdCAyMSBiaXRzLiAgKi8KKyNkZWZpbmUgUl9QQVJJU0NfVFBSRUwxNFIJMTU4CS8qIFRQLXJlbC4gYWRkcmVzcywgcmlnaHQgMTQgYml0cy4gICovCisjZGVmaW5lIFJfUEFSSVNDX0xUT0ZGX1RQMjFMCTE2MgkvKiBMVC1UUC1yZWwuIGFkZHJlc3MsIGxlZnQgMjEgYml0cy4gKi8KKyNkZWZpbmUgUl9QQVJJU0NfTFRPRkZfVFAxNFIJMTY2CS8qIExULVRQLXJlbC4gYWRkcmVzcywgcmlnaHQgMTQgYml0cy4qLworI2RlZmluZSBSX1BBUklTQ19MVE9GRl9UUDE0RgkxNjcJLyogMTQgYml0cyBMVC1UUC1yZWwuIGFkZHJlc3MuICAqLworI2RlZmluZSBSX1BBUklTQ19UUFJFTDY0CTIxNgkvKiA2NCBiaXRzIFRQLXJlbC4gYWRkcmVzcy4gICovCisjZGVmaW5lIFJfUEFSSVNDX1RQUkVMMTRXUgkyMTkJLyogVFAtcmVsLiBhZGRyZXNzLCByaWdodCAxNCBiaXRzLiAgKi8KKyNkZWZpbmUgUl9QQVJJU0NfVFBSRUwxNERSCTIyMAkvKiBUUC1yZWwuIGFkZHJlc3MsIHJpZ2h0IDE0IGJpdHMuICAqLworI2RlZmluZSBSX1BBUklTQ19UUFJFTDE2RgkyMjEJLyogMTYgYml0cyBUUC1yZWwuIGFkZHJlc3MuICAqLworI2RlZmluZSBSX1BBUklTQ19UUFJFTDE2V0YJMjIyCS8qIDE2IGJpdHMgVFAtcmVsLiBhZGRyZXNzLiAgKi8KKyNkZWZpbmUgUl9QQVJJU0NfVFBSRUwxNkRGCTIyMwkvKiAxNiBiaXRzIFRQLXJlbC4gYWRkcmVzcy4gICovCisjZGVmaW5lIFJfUEFSSVNDX0xUT0ZGX1RQNjQJMjI0CS8qIDY0IGJpdHMgTFQtVFAtcmVsLiBhZGRyZXNzLiAgKi8KKyNkZWZpbmUgUl9QQVJJU0NfTFRPRkZfVFAxNFdSCTIyNwkvKiBMVC1UUC1yZWwuIGFkZHJlc3MsIHJpZ2h0IDE0IGJpdHMuKi8KKyNkZWZpbmUgUl9QQVJJU0NfTFRPRkZfVFAxNERSCTIyOAkvKiBMVC1UUC1yZWwuIGFkZHJlc3MsIHJpZ2h0IDE0IGJpdHMuKi8KKyNkZWZpbmUgUl9QQVJJU0NfTFRPRkZfVFAxNkYJMjI5CS8qIDE2IGJpdHMgTFQtVFAtcmVsLiBhZGRyZXNzLiAgKi8KKyNkZWZpbmUgUl9QQVJJU0NfTFRPRkZfVFAxNldGCTIzMAkvKiAxNiBiaXRzIExULVRQLXJlbC4gYWRkcmVzcy4gICovCisjZGVmaW5lIFJfUEFSSVNDX0xUT0ZGX1RQMTZERgkyMzEJLyogMTYgYml0cyBMVC1UUC1yZWwuIGFkZHJlc3MuICAqLworI2RlZmluZSBSX1BBUklTQ19ISVJFU0VSVkUJMjU1CisKKyNkZWZpbmUgUEFfUExBQkVMX0ZERVNDCQkweDAyCS8qIGJpdCBzZXQgaWYgUExBQkVMIHBvaW50cyB0bworCQkJCQkgKiBhIGZ1bmN0aW9uIGRlc2NyaXB0b3IsIG5vdAorCQkJCQkgKiBhbiBhZGRyZXNzICovCisKKy8qIFRoZSBmb2xsb3dpbmcgYXJlIFBBIGZ1bmN0aW9uIGRlc2NyaXB0b3JzIAorICoKKyAqIGFkZHI6CXRoZSBhYnNvbHV0ZSBhZGRyZXNzIG9mIHRoZSBmdW5jdGlvbgorICogZ3A6CQllaXRoZXIgdGhlIGRhdGEgcG9pbnRlciAocjI3KSBmb3Igbm9uLVBJQyBjb2RlIG9yIHRoZQorICoJCXRoZSBQTFQgcG9pbnRlciAocjE5KSBmb3IgUElDIGNvZGUgKi8KKworLyogRm9ybWF0IGZvciB0aGUgRWxmMzIgRnVuY3Rpb24gZGVzY3JpcHRvciAqLwordHlwZWRlZiBzdHJ1Y3QgZWxmMzJfZmRlc2MgeworCV9fdTMyCWFkZHI7CisJX191MzIJZ3A7Cit9IEVsZjMyX0ZkZXNjOworCisvKiBGb3JtYXQgZm9yIHRoZSBFbGY2NCBGdW5jdGlvbiBkZXNjcmlwdG9yICovCit0eXBlZGVmIHN0cnVjdCBlbGY2NF9mZGVzYyB7CisJX191NjQJZHVtbXlbMl07IC8qIEZJWE1FOiBub3RoaW5nIHVzZXMgdGhlc2UsIHdoeSB3YXN0ZQorCQkJICAgKiB0aGUgc3BhY2UgKi8KKwlfX3U2NAlhZGRyOworCV9fdTY0CWdwOworfSBFbGY2NF9GZGVzYzsKKworLyogTGVnYWwgdmFsdWVzIGZvciBwX3R5cGUgZmllbGQgb2YgRWxmMzJfUGhkci9FbGY2NF9QaGRyLiAgKi8KKworI2RlZmluZSBQVF9IUF9UTFMJCShQVF9MT09TICsgMHgwKQorI2RlZmluZSBQVF9IUF9DT1JFX05PTkUJCShQVF9MT09TICsgMHgxKQorI2RlZmluZSBQVF9IUF9DT1JFX1ZFUlNJT04JKFBUX0xPT1MgKyAweDIpCisjZGVmaW5lIFBUX0hQX0NPUkVfS0VSTkVMCShQVF9MT09TICsgMHgzKQorI2RlZmluZSBQVF9IUF9DT1JFX0NPTU0JCShQVF9MT09TICsgMHg0KQorI2RlZmluZSBQVF9IUF9DT1JFX1BST0MJCShQVF9MT09TICsgMHg1KQorI2RlZmluZSBQVF9IUF9DT1JFX0xPQURBQkxFCShQVF9MT09TICsgMHg2KQorI2RlZmluZSBQVF9IUF9DT1JFX1NUQUNLCShQVF9MT09TICsgMHg3KQorI2RlZmluZSBQVF9IUF9DT1JFX1NITQkJKFBUX0xPT1MgKyAweDgpCisjZGVmaW5lIFBUX0hQX0NPUkVfTU1GCQkoUFRfTE9PUyArIDB4OSkKKyNkZWZpbmUgUFRfSFBfUEFSQUxMRUwJCShQVF9MT09TICsgMHgxMCkKKyNkZWZpbmUgUFRfSFBfRkFTVEJJTkQJCShQVF9MT09TICsgMHgxMSkKKyNkZWZpbmUgUFRfSFBfT1BUX0FOTk9UCQkoUFRfTE9PUyArIDB4MTIpCisjZGVmaW5lIFBUX0hQX0hTTF9BTk5PVAkJKFBUX0xPT1MgKyAweDEzKQorI2RlZmluZSBQVF9IUF9TVEFDSwkJKFBUX0xPT1MgKyAweDE0KQorCisjZGVmaW5lIFBUX1BBUklTQ19BUkNIRVhUCTB4NzAwMDAwMDAKKyNkZWZpbmUgUFRfUEFSSVNDX1VOV0lORAkweDcwMDAwMDAxCisKKy8qIExlZ2FsIHZhbHVlcyBmb3IgcF9mbGFncyBmaWVsZCBvZiBFbGYzMl9QaGRyL0VsZjY0X1BoZHIuICAqLworCisjZGVmaW5lIFBGX1BBUklTQ19TQlAJCTB4MDgwMDAwMDAKKworI2RlZmluZSBQRl9IUF9QQUdFX1NJWkUJCTB4MDAxMDAwMDAKKyNkZWZpbmUgUEZfSFBfRkFSX1NIQVJFRAkweDAwMjAwMDAwCisjZGVmaW5lIFBGX0hQX05FQVJfU0hBUkVECTB4MDA0MDAwMDAKKyNkZWZpbmUgUEZfSFBfQ09ERQkJMHgwMTAwMDAwMAorI2RlZmluZSBQRl9IUF9NT0RJRlkJCTB4MDIwMDAwMDAKKyNkZWZpbmUgUEZfSFBfTEFaWVNXQVAJCTB4MDQwMDAwMDAKKyNkZWZpbmUgUEZfSFBfU0JQCQkweDA4MDAwMDAwCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGRlZmluaXRpb25zIGFyZSB0aG9zZSBmb3IgMzItYml0IEVMRiBiaW5hcmllcyBvbiBhIDMyLWJpdAorICoga2VybmVsIGFuZCBmb3IgNjQtYml0IGJpbmFyaWVzIG9uIGEgNjQtYml0IGtlcm5lbC4gIFRvIHJ1biAzMi1iaXQgYmluYXJpZXMKKyAqIG9uIGEgNjQtYml0IGtlcm5lbCwgYXJjaC9wYXJpc2M2NC9rZXJuZWwvYmluZm10X2VsZjMyLmMgZGVmaW5lcyB0aGVzZQorICogbWFjcm9zIGFwcHJvcHJpYXRlbHkgYW5kIHRoZW4gI2luY2x1ZGVzIGJpbmZtdF9lbGYuYywgd2hpY2ggdGhlbiBpbmNsdWRlcworICogdGhpcyBmaWxlLgorICovCisjaWZuZGVmIEVMRl9DTEFTUworCisvKgorICogVGhpcyBpcyB1c2VkIHRvIGVuc3VyZSB3ZSBkb24ndCBsb2FkIHNvbWV0aGluZyBmb3IgdGhlIHdyb25nIGFyY2hpdGVjdHVyZS4KKyAqCisgKiBOb3RlIHRoYXQgdGhpcyBoZWFkZXIgZmlsZSBpcyB1c2VkIGJ5IGRlZmF1bHQgaW4gZnMvYmluZm10X2VsZi5jLiBTbworICogdGhlIGZvbGxvd2luZyBtYWNyb3MgYXJlIGZvciB0aGUgZGVmYXVsdCBjYXNlLiBIb3dldmVyLCBmb3IgdGhlIDY0CisgKiBiaXQga2VybmVsIHdlIGFsc28gc3VwcG9ydCAzMiBiaXQgcGFyaXNjIGJpbmFyaWVzLiBUbyBkbyB0aGF0CisgKiBhcmNoL3BhcmlzYzY0L2tlcm5lbC9iaW5mbXRfZWxmMzIuYyBkZWZpbmVzIGl0cyBvd24gc2V0IG9mIHRoZXNlCisgKiBtYWNyb3MsIGFuZCB0aGVuIGl0IGluY2x1ZGVzIGZzL2JpbmZtdF9lbGYuYyB0byBwcm92aWRlIGFuIGFsdGVybmF0ZQorICogZWxmIGJpbmFyeSBoYW5kbGVyIGZvciAzMiBiaXQgYmluYXJpZXMgKG9uIHRoZSA2NCBiaXQga2VybmVsKS4KKyAqLworI2lmZGVmIF9fTFA2NF9fCisjZGVmaW5lIEVMRl9DTEFTUyAgICAgICBFTEZDTEFTUzY0CisjZWxzZQorI2RlZmluZSBFTEZfQ0xBU1MJRUxGQ0xBU1MzMgorI2VuZGlmCisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBlbGZfZ3JlZ190OworCisvKiBUaGlzIHlpZWxkcyBhIHN0cmluZyB0aGF0IGxkLnNvIHdpbGwgdXNlIHRvIGxvYWQgaW1wbGVtZW50YXRpb24KKyAgIHNwZWNpZmljIGxpYnJhcmllcyBmb3Igb3B0aW1pemF0aW9uLiAgVGhpcyBpcyBtb3JlIHNwZWNpZmljIGluCisgICBpbnRlbnQgdGhhbiBwb2tpbmcgYXQgdW5hbWUgb3IgL3Byb2MvY3B1aW5mby4KKworICAgRm9yIHRoZSBtb21lbnQsIHdlIGhhdmUgb25seSBvcHRpbWl6YXRpb25zIGZvciB0aGUgSW50ZWwgZ2VuZXJhdGlvbnMsCisgICBidXQgdGhhdCBjb3VsZCBjaGFuZ2UuLi4gKi8KKworI2RlZmluZSBFTEZfUExBVEZPUk0gICgiUEFSSVNDXDAiIC8qKygoYm9vdF9jcHVfZGF0YS54ODYtMykqNSkgKi8pCisKKyNpZmRlZiBfX0tFUk5FTF9fCisjZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCwgaWJjczIpIFwKKwljdXJyZW50LT5wZXJzb25hbGl0eSA9IFBFUl9MSU5VWDsgXAorCWN1cnJlbnQtPnRocmVhZC5tYXBfYmFzZSA9IERFRkFVTFRfTUFQX0JBU0U7IFwKKwljdXJyZW50LT50aHJlYWQudGFza19zaXplID0gREVGQVVMVF9UQVNLX1NJWkUgXAorCisjZW5kaWYKKworLyoKKyAqIEZpbGwgaW4gZ2VuZXJhbCByZWdpc3RlcnMgaW4gYSBjb3JlIGR1bXAuICBUaGlzIHNhdmVzIHByZXR0eQorICogbXVjaCB0aGUgc2FtZSByZWdpc3RlcnMgYXMgaHAtdXgsIGFsdGhvdWdoIGluIGEgZGlmZmVyZW50IG9yZGVyLgorICogUmVnaXN0ZXJzIG1hcmtlZCAjIGJlbG93IGFyZSBub3QgY3VycmVudGx5IHNhdmVkIGluIHB0X3JlZ3MsIHNvCisgKiB3ZSB1c2UgdGhlaXIgY3VycmVudCB2YWx1ZXMgaGVyZS4KKyAqCisgKiAJZ3IwLi5ncjMxCisgKiAJc3IwLi5zcjcKKyAqIAlpYW9xMC4uaWFvcTEKKyAqIAlpYXNxMC4uaWFzcTEKKyAqIAljcjExIChzYXIpCisgKiAJY3IxOSAoaWlyKQorICogCWNyMjAgKGlzcikKKyAqIAljcjIxIChpb3IpCisgKiAgIwljcjIyIChpcHN3KQorICogICMJY3IwIChyZWNvdmVyeSBjb3VudGVyKQorICogICMJY3IyNC4uY3IzMSAodGVtcG9yYXJ5IHJlZ2lzdGVycykKKyAqICAjCWNyOCw5LDEyLDEzIChwcm90ZWN0aW9uIElEcykKKyAqICAjCWNyMTAgKHNjci9jY3IpCisgKiAgIwljcjE1IChleHQgaW50IGVuYWJsZSBtYXNrKQorICoKKyAqLworCisjZGVmaW5lIEVMRl9DT1JFX0NPUFlfUkVHUyhkc3QsIHB0KQlcCisJbWVtc2V0KGRzdCwgMCwgc2l6ZW9mKGRzdCkpOwkvKiBkb24ndCBsZWFrIGFueSAicmFuZG9tIiBiaXRzICovIFwKKwltZW1jcHkoZHN0ICsgMCwgcHQtPmdyLCAzMiAqIHNpemVvZihlbGZfZ3JlZ190KSk7IFwKKwltZW1jcHkoZHN0ICsgMzIsIHB0LT5zciwgOCAqIHNpemVvZihlbGZfZ3JlZ190KSk7IFwKKwltZW1jcHkoZHN0ICsgNDAsIHB0LT5pYW9xLCAyICogc2l6ZW9mKGVsZl9ncmVnX3QpKTsgXAorCW1lbWNweShkc3QgKyA0MiwgcHQtPmlhc3EsIDIgKiBzaXplb2YoZWxmX2dyZWdfdCkpOyBcCisJZHN0WzQ0XSA9IHB0LT5zYXI7ICAgZHN0WzQ1XSA9IHB0LT5paXI7IFwKKwlkc3RbNDZdID0gcHQtPmlzcjsgICBkc3RbNDddID0gcHQtPmlvcjsgXAorCWRzdFs0OF0gPSBtZmN0bCgyMik7IGRzdFs0OV0gPSBtZmN0bCgwKTsgXAorCWRzdFs1MF0gPSBtZmN0bCgyNCk7IGRzdFs1MV0gPSBtZmN0bCgyNSk7IFwKKwlkc3RbNTJdID0gbWZjdGwoMjYpOyBkc3RbNTNdID0gbWZjdGwoMjcpOyBcCisJZHN0WzU0XSA9IG1mY3RsKDI4KTsgZHN0WzU1XSA9IG1mY3RsKDI5KTsgXAorCWRzdFs1Nl0gPSBtZmN0bCgzMCk7IGRzdFs1N10gPSBtZmN0bCgzMSk7IFwKKwlkc3RbNThdID0gbWZjdGwoIDgpOyBkc3RbNTldID0gbWZjdGwoIDkpOyBcCisJZHN0WzYwXSA9IG1mY3RsKDEyKTsgZHN0WzYxXSA9IG1mY3RsKDEzKTsgXAorCWRzdFs2Ml0gPSBtZmN0bCgxMCk7IGRzdFs2M10gPSBtZmN0bCgxNSk7CisKKyNlbmRpZiAvKiAhIEVMRl9DTEFTUyAqLworCisjZGVmaW5lIEVMRl9OR1JFRyA4MAkvKiBXZSBvbmx5IG5lZWQgNjQgYXQgcHJlc2VudCwgYnV0IGxlYXZlIHNwYWNlCisJCQkgICBmb3IgZXhwYW5zaW9uLiAqLwordHlwZWRlZiBlbGZfZ3JlZ190IGVsZl9ncmVnc2V0X3RbRUxGX05HUkVHXTsKKworI2RlZmluZSBFTEZfTkZQUkVHIDMyCit0eXBlZGVmIGRvdWJsZSBlbGZfZnByZWdfdDsKK3R5cGVkZWYgZWxmX2ZwcmVnX3QgZWxmX2ZwcmVnc2V0X3RbRUxGX05GUFJFR107CisKK3N0cnVjdCB0YXNrX3N0cnVjdDsKKworZXh0ZXJuIGludCBkdW1wX3Rhc2tfZnB1IChzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgZWxmX2ZwcmVnc2V0X3QgKik7CisjZGVmaW5lIEVMRl9DT1JFX0NPUFlfRlBSRUdTKHRzaywgZWxmX2ZwcmVncykgZHVtcF90YXNrX2ZwdSh0c2ssIGVsZl9mcHJlZ3MpCisKK3N0cnVjdCBwdF9yZWdzOwkvKiBmb3J3YXJkIGRlY2xhcmF0aW9uLi4uICovCisKKworI2RlZmluZSBlbGZfY2hlY2tfYXJjaCh4KSAoKHgpLT5lX21hY2hpbmUgPT0gRU1fUEFSSVNDICYmICh4KS0+ZV9pZGVudFtFSV9DTEFTU10gPT0gRUxGX0NMQVNTKQorCisvKgorICogVGhlc2UgYXJlIHVzZWQgdG8gc2V0IHBhcmFtZXRlcnMgaW4gdGhlIGNvcmUgZHVtcHMuCisgKi8KKyNkZWZpbmUgRUxGX0RBVEEJRUxGREFUQTJNU0IKKyNkZWZpbmUgRUxGX0FSQ0gJRU1fUEFSSVNDCisjZGVmaW5lIEVMRl9PU0FCSSAJRUxGT1NBQklfTElOVVgKKworLyogJXIyMyBpcyBzZXQgYnkgbGQuc28gdG8gYSBwb2ludGVyIHRvIGEgZnVuY3Rpb24gd2hpY2ggbWlnaHQgYmUgCisgICByZWdpc3RlcmVkIHVzaW5nIGF0ZXhpdC4gIFRoaXMgcHJvdmlkZXMgYSBtZWFuIGZvciB0aGUgZHluYW1pYworICAgbGlua2VyIHRvIGNhbGwgRFRfRklOSSBmdW5jdGlvbnMgZm9yIHNoYXJlZCBsaWJyYXJpZXMgdGhhdCBoYXZlCisgICBiZWVuIGxvYWRlZCBiZWZvcmUgdGhlIGNvZGUgcnVucy4KKworICAgU28gdGhhdCB3ZSBjYW4gdXNlIHRoZSBzYW1lIHN0YXJ0dXAgZmlsZSB3aXRoIHN0YXRpYyBleGVjdXRhYmxlcywKKyAgIHdlIHN0YXJ0IHByb2dyYW1zIHdpdGggYSB2YWx1ZSBvZiAwIHRvIGluZGljYXRlIHRoYXQgdGhlcmUgaXMgbm8KKyAgIHN1Y2ggZnVuY3Rpb24uICAqLworI2RlZmluZSBFTEZfUExBVF9JTklUKF9yLCBsb2FkX2FkZHIpICAgICAgIF9yLT5nclsyM10gPSAwCisKKyNkZWZpbmUgVVNFX0VMRl9DT1JFX0RVTVAKKyNkZWZpbmUgRUxGX0VYRUNfUEFHRVNJWkUJNDA5NgorCisvKiBUaGlzIGlzIHRoZSBsb2NhdGlvbiB0aGF0IGFuIEVUX0RZTiBwcm9ncmFtIGlzIGxvYWRlZCBpZiBleGVjJ2VkLiAgVHlwaWNhbAorICAgdXNlIG9mIHRoaXMgaXMgdG8gaW52b2tlICIuL2xkLnNvIHNvbWVwcm9nIiB0byB0ZXN0IG91dCBhIG5ldyB2ZXJzaW9uIG9mCisgICB0aGUgbG9hZGVyLiAgV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBpdCBpcyBvdXQgb2YgdGhlIHdheSBvZiB0aGUgcHJvZ3JhbQorICAgdGhhdCBpdCB3aWxsICJleGVjIiwgYW5kIHRoYXQgdGhlcmUgaXMgc3VmZmljaWVudCByb29tIGZvciB0aGUgYnJrLgorCisgICAoMiAqIFRBU0tfU0laRSAvIDMpIHR1cm5zIGludG8gc29tZXRoaW5nIHVuZGVmaW5lZCB3aGVuIHJ1biB0aHJvdWdoIGEKKyAgIDMyIGJpdCBwcmVwcm9jZXNzb3IgYW5kIGluIHNvbWUgY2FzZXMgcmVzdWx0cyBpbiB0aGUga2VybmVsIHRyeWluZyB0byBtYXAKKyAgIGxkLnNvIHRvIHRoZSBrZXJuZWwgdmlydHVhbCBiYXNlLiBVc2UgYSBzYW5lIHZhbHVlIGluc3RlYWQuIC9KZXMgCisgICovCisKKyNkZWZpbmUgRUxGX0VUX0RZTl9CQVNFICAgICAgICAgKFRBU0tfVU5NQVBQRURfQkFTRSArIDB4MDEwMDAwMDApCisKKy8qIFRoaXMgeWllbGRzIGEgbWFzayB0aGF0IHVzZXIgcHJvZ3JhbXMgY2FuIHVzZSB0byBmaWd1cmUgb3V0IHdoYXQKKyAgIGluc3RydWN0aW9uIHNldCB0aGlzIENQVSBzdXBwb3J0cy4gIFRoaXMgY291bGQgYmUgZG9uZSBpbiB1c2VyIHNwYWNlLAorICAgYnV0IGl0J3Mgbm90IGVhc3ksIGFuZCB3ZSd2ZSBhbHJlYWR5IGRvbmUgaXQgaGVyZS4gICovCisKKyNkZWZpbmUgRUxGX0hXQ0FQCTAKKy8qIChib290X2NwdV9kYXRhLng4Nl9jYXBhYmlsaXR5KSAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9lcnJuby5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL2Vycm5vLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTEwZjEwOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9lcnJuby5oCkBAIC0wLDAgKzEsMTE5IEBACisjaWZuZGVmIF9QQVJJU0NfRVJSTk9fSAorI2RlZmluZSBfUEFSSVNDX0VSUk5PX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2Vycm5vLWJhc2UuaD4KKworI2RlZmluZQlFTk9NU0cJCTM1CS8qIE5vIG1lc3NhZ2Ugb2YgZGVzaXJlZCB0eXBlICovCisjZGVmaW5lCUVJRFJNCQkzNgkvKiBJZGVudGlmaWVyIHJlbW92ZWQgKi8KKyNkZWZpbmUJRUNIUk5HCQkzNwkvKiBDaGFubmVsIG51bWJlciBvdXQgb2YgcmFuZ2UgKi8KKyNkZWZpbmUJRUwyTlNZTkMJMzgJLyogTGV2ZWwgMiBub3Qgc3luY2hyb25pemVkICovCisjZGVmaW5lCUVMM0hMVAkJMzkJLyogTGV2ZWwgMyBoYWx0ZWQgKi8KKyNkZWZpbmUJRUwzUlNUCQk0MAkvKiBMZXZlbCAzIHJlc2V0ICovCisjZGVmaW5lCUVMTlJORwkJNDEJLyogTGluayBudW1iZXIgb3V0IG9mIHJhbmdlICovCisjZGVmaW5lCUVVTkFUQ0gJCTQyCS8qIFByb3RvY29sIGRyaXZlciBub3QgYXR0YWNoZWQgKi8KKyNkZWZpbmUJRU5PQ1NJCQk0MwkvKiBObyBDU0kgc3RydWN0dXJlIGF2YWlsYWJsZSAqLworI2RlZmluZQlFTDJITFQJCTQ0CS8qIExldmVsIDIgaGFsdGVkICovCisjZGVmaW5lCUVERUFETEsJCTQ1CS8qIFJlc291cmNlIGRlYWRsb2NrIHdvdWxkIG9jY3VyICovCisjZGVmaW5lCUVERUFETE9DSwlFREVBRExLCisjZGVmaW5lCUVOT0xDSwkJNDYJLyogTm8gcmVjb3JkIGxvY2tzIGF2YWlsYWJsZSAqLworI2RlZmluZQlFSUxTRVEJCTQ3CS8qIElsbGVnYWwgYnl0ZSBzZXF1ZW5jZSAqLworCisjZGVmaW5lCUVOT05FVAkJNTAJLyogTWFjaGluZSBpcyBub3Qgb24gdGhlIG5ldHdvcmsgKi8KKyNkZWZpbmUJRU5PREFUQQkJNTEJLyogTm8gZGF0YSBhdmFpbGFibGUgKi8KKyNkZWZpbmUJRVRJTUUJCTUyCS8qIFRpbWVyIGV4cGlyZWQgKi8KKyNkZWZpbmUJRU5PU1IJCTUzCS8qIE91dCBvZiBzdHJlYW1zIHJlc291cmNlcyAqLworI2RlZmluZQlFTk9TVFIJCTU0CS8qIERldmljZSBub3QgYSBzdHJlYW0gKi8KKyNkZWZpbmUJRU5PUEtHCQk1NQkvKiBQYWNrYWdlIG5vdCBpbnN0YWxsZWQgKi8KKworI2RlZmluZQlFTk9MSU5LCQk1NwkvKiBMaW5rIGhhcyBiZWVuIHNldmVyZWQgKi8KKyNkZWZpbmUJRUFEVgkJNTgJLyogQWR2ZXJ0aXNlIGVycm9yICovCisjZGVmaW5lCUVTUk1OVAkJNTkJLyogU3Jtb3VudCBlcnJvciAqLworI2RlZmluZQlFQ09NTQkJNjAJLyogQ29tbXVuaWNhdGlvbiBlcnJvciBvbiBzZW5kICovCisjZGVmaW5lCUVQUk9UTwkJNjEJLyogUHJvdG9jb2wgZXJyb3IgKi8KKworI2RlZmluZQlFTVVMVElIT1AJNjQJLyogTXVsdGlob3AgYXR0ZW1wdGVkICovCisKKyNkZWZpbmUJRURPVERPVAkJNjYJLyogUkZTIHNwZWNpZmljIGVycm9yICovCisjZGVmaW5lCUVCQURNU0cJCTY3CS8qIE5vdCBhIGRhdGEgbWVzc2FnZSAqLworI2RlZmluZQlFVVNFUlMJCTY4CS8qIFRvbyBtYW55IHVzZXJzICovCisjZGVmaW5lCUVEUVVPVAkJNjkJLyogUXVvdGEgZXhjZWVkZWQgKi8KKyNkZWZpbmUJRVNUQUxFCQk3MAkvKiBTdGFsZSBORlMgZmlsZSBoYW5kbGUgKi8KKyNkZWZpbmUJRVJFTU9URQkJNzEJLyogT2JqZWN0IGlzIHJlbW90ZSAqLworI2RlZmluZQlFT1ZFUkZMT1cJNzIJLyogVmFsdWUgdG9vIGxhcmdlIGZvciBkZWZpbmVkIGRhdGEgdHlwZSAqLworCisvKiB0aGVzZSBlcnJub3MgYXJlIGRlZmluZWQgYnkgTGludXggYnV0IG5vdCBIUFVYLiAqLworCisjZGVmaW5lCUVCQURFCQkxNjAJLyogSW52YWxpZCBleGNoYW5nZSAqLworI2RlZmluZQlFQkFEUgkJMTYxCS8qIEludmFsaWQgcmVxdWVzdCBkZXNjcmlwdG9yICovCisjZGVmaW5lCUVYRlVMTAkJMTYyCS8qIEV4Y2hhbmdlIGZ1bGwgKi8KKyNkZWZpbmUJRU5PQU5PCQkxNjMJLyogTm8gYW5vZGUgKi8KKyNkZWZpbmUJRUJBRFJRQwkJMTY0CS8qIEludmFsaWQgcmVxdWVzdCBjb2RlICovCisjZGVmaW5lCUVCQURTTFQJCTE2NQkvKiBJbnZhbGlkIHNsb3QgKi8KKyNkZWZpbmUJRUJGT05UCQkxNjYJLyogQmFkIGZvbnQgZmlsZSBmb3JtYXQgKi8KKyNkZWZpbmUJRU5PVFVOSVEJMTY3CS8qIE5hbWUgbm90IHVuaXF1ZSBvbiBuZXR3b3JrICovCisjZGVmaW5lCUVCQURGRAkJMTY4CS8qIEZpbGUgZGVzY3JpcHRvciBpbiBiYWQgc3RhdGUgKi8KKyNkZWZpbmUJRVJFTUNIRwkJMTY5CS8qIFJlbW90ZSBhZGRyZXNzIGNoYW5nZWQgKi8KKyNkZWZpbmUJRUxJQkFDQwkJMTcwCS8qIENhbiBub3QgYWNjZXNzIGEgbmVlZGVkIHNoYXJlZCBsaWJyYXJ5ICovCisjZGVmaW5lCUVMSUJCQUQJCTE3MQkvKiBBY2Nlc3NpbmcgYSBjb3JydXB0ZWQgc2hhcmVkIGxpYnJhcnkgKi8KKyNkZWZpbmUJRUxJQlNDTgkJMTcyCS8qIC5saWIgc2VjdGlvbiBpbiBhLm91dCBjb3JydXB0ZWQgKi8KKyNkZWZpbmUJRUxJQk1BWAkJMTczCS8qIEF0dGVtcHRpbmcgdG8gbGluayBpbiB0b28gbWFueSBzaGFyZWQgbGlicmFyaWVzICovCisjZGVmaW5lCUVMSUJFWEVDCTE3NAkvKiBDYW5ub3QgZXhlYyBhIHNoYXJlZCBsaWJyYXJ5IGRpcmVjdGx5ICovCisjZGVmaW5lCUVSRVNUQVJUCTE3NQkvKiBJbnRlcnJ1cHRlZCBzeXN0ZW0gY2FsbCBzaG91bGQgYmUgcmVzdGFydGVkICovCisjZGVmaW5lCUVTVFJQSVBFCTE3NgkvKiBTdHJlYW1zIHBpcGUgZXJyb3IgKi8KKyNkZWZpbmUJRVVDTEVBTgkJMTc3CS8qIFN0cnVjdHVyZSBuZWVkcyBjbGVhbmluZyAqLworI2RlZmluZQlFTk9UTkFNCQkxNzgJLyogTm90IGEgWEVOSVggbmFtZWQgdHlwZSBmaWxlICovCisjZGVmaW5lCUVOQVZBSUwJCTE3OQkvKiBObyBYRU5JWCBzZW1hcGhvcmVzIGF2YWlsYWJsZSAqLworI2RlZmluZQlFSVNOQU0JCTE4MAkvKiBJcyBhIG5hbWVkIHR5cGUgZmlsZSAqLworI2RlZmluZQlFUkVNT1RFSU8JMTgxCS8qIFJlbW90ZSBJL08gZXJyb3IgKi8KKyNkZWZpbmUJRU5PTUVESVVNCTE4MgkvKiBObyBtZWRpdW0gZm91bmQgKi8KKyNkZWZpbmUJRU1FRElVTVRZUEUJMTgzCS8qIFdyb25nIG1lZGl1bSB0eXBlICovCisjZGVmaW5lCUVOT0tFWQkJMTg0CS8qIFJlcXVpcmVkIGtleSBub3QgYXZhaWxhYmxlICovCisjZGVmaW5lCUVLRVlFWFBJUkVECTE4NQkvKiBLZXkgaGFzIGV4cGlyZWQgKi8KKyNkZWZpbmUJRUtFWVJFVk9LRUQJMTg2CS8qIEtleSBoYXMgYmVlbiByZXZva2VkICovCisjZGVmaW5lCUVLRVlSRUpFQ1RFRAkxODcJLyogS2V5IHdhcyByZWplY3RlZCBieSBzZXJ2aWNlICovCisKKy8qIFdlIG5vdyByZXR1cm4geW91IHRvIHlvdXIgcmVndWxhcmx5IHNjaGVkdWxlZCBIUFVYLiAqLworCisjZGVmaW5lIEVOT1NZTQkJMjE1CS8qIHN5bWJvbCBkb2VzIG5vdCBleGlzdCBpbiBleGVjdXRhYmxlICovCisjZGVmaW5lCUVOT1RTT0NLCTIxNgkvKiBTb2NrZXQgb3BlcmF0aW9uIG9uIG5vbi1zb2NrZXQgKi8KKyNkZWZpbmUJRURFU1RBRERSUkVRCTIxNwkvKiBEZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkICovCisjZGVmaW5lCUVNU0dTSVpFCTIxOAkvKiBNZXNzYWdlIHRvbyBsb25nICovCisjZGVmaW5lCUVQUk9UT1RZUEUJMjE5CS8qIFByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldCAqLworI2RlZmluZQlFTk9QUk9UT09QVAkyMjAJLyogUHJvdG9jb2wgbm90IGF2YWlsYWJsZSAqLworI2RlZmluZQlFUFJPVE9OT1NVUFBPUlQJMjIxCS8qIFByb3RvY29sIG5vdCBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUJRVNPQ0tUTk9TVVBQT1JUCTIyMgkvKiBTb2NrZXQgdHlwZSBub3Qgc3VwcG9ydGVkICovCisjZGVmaW5lCUVPUE5PVFNVUFAJMjIzCS8qIE9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkIG9uIHRyYW5zcG9ydCBlbmRwb2ludCAqLworI2RlZmluZQlFUEZOT1NVUFBPUlQJMjI0CS8qIFByb3RvY29sIGZhbWlseSBub3Qgc3VwcG9ydGVkICovCisjZGVmaW5lCUVBRk5PU1VQUE9SVAkyMjUJLyogQWRkcmVzcyBmYW1pbHkgbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbCAqLworI2RlZmluZQlFQUREUklOVVNFCTIyNgkvKiBBZGRyZXNzIGFscmVhZHkgaW4gdXNlICovCisjZGVmaW5lCUVBRERSTk9UQVZBSUwJMjI3CS8qIENhbm5vdCBhc3NpZ24gcmVxdWVzdGVkIGFkZHJlc3MgKi8KKyNkZWZpbmUJRU5FVERPV04JMjI4CS8qIE5ldHdvcmsgaXMgZG93biAqLworI2RlZmluZQlFTkVUVU5SRUFDSAkyMjkJLyogTmV0d29yayBpcyB1bnJlYWNoYWJsZSAqLworI2RlZmluZQlFTkVUUkVTRVQJMjMwCS8qIE5ldHdvcmsgZHJvcHBlZCBjb25uZWN0aW9uIGJlY2F1c2Ugb2YgcmVzZXQgKi8KKyNkZWZpbmUJRUNPTk5BQk9SVEVECTIzMQkvKiBTb2Z0d2FyZSBjYXVzZWQgY29ubmVjdGlvbiBhYm9ydCAqLworI2RlZmluZQlFQ09OTlJFU0VUCTIzMgkvKiBDb25uZWN0aW9uIHJlc2V0IGJ5IHBlZXIgKi8KKyNkZWZpbmUJRU5PQlVGUwkJMjMzCS8qIE5vIGJ1ZmZlciBzcGFjZSBhdmFpbGFibGUgKi8KKyNkZWZpbmUJRUlTQ09OTgkJMjM0CS8qIFRyYW5zcG9ydCBlbmRwb2ludCBpcyBhbHJlYWR5IGNvbm5lY3RlZCAqLworI2RlZmluZQlFTk9UQ09OTgkyMzUJLyogVHJhbnNwb3J0IGVuZHBvaW50IGlzIG5vdCBjb25uZWN0ZWQgKi8KKyNkZWZpbmUJRVNIVVRET1dOCTIzNgkvKiBDYW5ub3Qgc2VuZCBhZnRlciB0cmFuc3BvcnQgZW5kcG9pbnQgc2h1dGRvd24gKi8KKyNkZWZpbmUJRVRPT01BTllSRUZTCTIzNwkvKiBUb28gbWFueSByZWZlcmVuY2VzOiBjYW5ub3Qgc3BsaWNlICovCisjZGVmaW5lIEVSRUZVU0VECUVDT05OUkVGVVNFRAkvKiBmb3IgSFAncyBORlMgYXBwYXJlbnRseSAqLworI2RlZmluZQlFVElNRURPVVQJMjM4CS8qIENvbm5lY3Rpb24gdGltZWQgb3V0ICovCisjZGVmaW5lCUVDT05OUkVGVVNFRAkyMzkJLyogQ29ubmVjdGlvbiByZWZ1c2VkICovCisjZGVmaW5lIEVSRU1PVEVSRUxFQVNFCTI0MAkvKiBSZW1vdGUgcGVlciByZWxlYXNlZCBjb25uZWN0aW9uICovCisjZGVmaW5lCUVIT1NURE9XTgkyNDEJLyogSG9zdCBpcyBkb3duICovCisjZGVmaW5lCUVIT1NUVU5SRUFDSAkyNDIJLyogTm8gcm91dGUgdG8gaG9zdCAqLworCisjZGVmaW5lCUVBTFJFQURZCTI0NAkvKiBPcGVyYXRpb24gYWxyZWFkeSBpbiBwcm9ncmVzcyAqLworI2RlZmluZQlFSU5QUk9HUkVTUwkyNDUJLyogT3BlcmF0aW9uIG5vdyBpbiBwcm9ncmVzcyAqLworI2RlZmluZQlFV09VTERCTE9DSwkyNDYJLyogT3BlcmF0aW9uIHdvdWxkIGJsb2NrIChMaW51eCByZXR1cm5zIEVBR0FJTikgKi8KKyNkZWZpbmUJRU5PVEVNUFRZCTI0NwkvKiBEaXJlY3Rvcnkgbm90IGVtcHR5ICovCisjZGVmaW5lCUVOQU1FVE9PTE9ORwkyNDgJLyogRmlsZSBuYW1lIHRvbyBsb25nICovCisjZGVmaW5lCUVMT09QCQkyNDkJLyogVG9vIG1hbnkgc3ltYm9saWMgbGlua3MgZW5jb3VudGVyZWQgKi8KKyNkZWZpbmUJRU5PU1lTCQkyNTEJLyogRnVuY3Rpb24gbm90IGltcGxlbWVudGVkICovCisKKyNkZWZpbmUgRU5PVFNVUAkJMjUyCS8qIEZ1bmN0aW9uIG5vdCBpbXBsZW1lbnRlZCAoUE9TSVguNCAvIEhQVVgpICovCisjZGVmaW5lIEVDQU5DRUxMRUQJMjUzCS8qIGFpbyByZXF1ZXN0IHdhcyBjYW5jZWxlZCBiZWZvcmUgY29tcGxldGUgKFBPU0lYLjQgLyBIUFVYKSAqLworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL2ZjbnRsLmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvZmNudGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZWYzNTIzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL2ZjbnRsLmgKQEAgLTAsMCArMSw5MiBAQAorI2lmbmRlZiBfUEFSSVNDX0ZDTlRMX0gKKyNkZWZpbmUgX1BBUklTQ19GQ05UTF9ICisKKy8qIG9wZW4vZmNudGwgLSBPX1NZTkMgaXMgb25seSBpbXBsZW1lbnRlZCBvbiBibG9ja3MgZGV2aWNlcyBhbmQgb24gZmlsZXMKKyAgIGxvY2F0ZWQgb24gYW4gZXh0MiBmaWxlIHN5c3RlbSAqLworI2RlZmluZSBPX0FDQ01PREUJMDAwMDAwMDMKKyNkZWZpbmUgT19SRE9OTFkJMDAwMDAwMDAKKyNkZWZpbmUgT19XUk9OTFkJMDAwMDAwMDEKKyNkZWZpbmUgT19SRFdSCQkwMDAwMDAwMgorI2RlZmluZSBPX0FQUEVORAkwMDAwMDAxMAorI2RlZmluZSBPX0JMS1NFRUsJMDAwMDAxMDAgLyogSFBVWCBvbmx5ICovCisjZGVmaW5lIE9fQ1JFQVQJCTAwMDAwNDAwIC8qIG5vdCBmY250bCAqLworI2RlZmluZSBPX1RSVU5DCQkwMDAwMTAwMCAvKiBub3QgZmNudGwgKi8KKyNkZWZpbmUgT19FWENMCQkwMDAwMjAwMCAvKiBub3QgZmNudGwgKi8KKyNkZWZpbmUgT19MQVJHRUZJTEUJMDAwMDQwMDAKKyNkZWZpbmUgT19TWU5DCQkwMDEwMDAwMAorI2RlZmluZSBPX05PTkJMT0NLCTAwMjAwMDA0IC8qIEhQVVggaGFzIHNlcGFyYXRlIE5ERUxBWSAmIE5PTkJMT0NLICovCisjZGVmaW5lIE9fTkRFTEFZCU9fTk9OQkxPQ0sKKyNkZWZpbmUgT19OT0NUVFkJMDA0MDAwMDAgLyogbm90IGZjbnRsICovCisjZGVmaW5lIE9fRFNZTkMJCTAxMDAwMDAwIC8qIEhQVVggb25seSAqLworI2RlZmluZSBPX1JTWU5DCQkwMjAwMDAwMCAvKiBIUFVYIG9ubHkgKi8KKyNkZWZpbmUgT19OT0FUSU1FCTA0MDAwMDAwCisKKyNkZWZpbmUgRkFTWU5DCQkwMDAyMDAwMCAvKiBmY250bCwgZm9yIEJTRCBjb21wYXRpYmlsaXR5ICovCisjZGVmaW5lIE9fRElSRUNUCTAwMDQwMDAwIC8qIGRpcmVjdCBkaXNrIGFjY2VzcyBoaW50IC0gY3VycmVudGx5IGlnbm9yZWQgKi8KKyNkZWZpbmUgT19ESVJFQ1RPUlkJMDAwMTAwMDAgLyogbXVzdCBiZSBhIGRpcmVjdG9yeSAqLworI2RlZmluZSBPX05PRk9MTE9XCTAwMDAwMjAwIC8qIGRvbid0IGZvbGxvdyBsaW5rcyAqLworI2RlZmluZSBPX0lOVklTSUJMRQkwNDAwMDAwMCAvKiBpbnZpc2libGUgSS9PLCBmb3IgRE1BUEkvWERTTSAqLworCisjZGVmaW5lIEZfRFVQRkQJCTAJLyogZHVwICovCisjZGVmaW5lIEZfR0VURkQJCTEJLyogZ2V0IGZfZmxhZ3MgKi8KKyNkZWZpbmUgRl9TRVRGRAkJMgkvKiBzZXQgZl9mbGFncyAqLworI2RlZmluZSBGX0dFVEZMCQkzCS8qIG1vcmUgZmxhZ3MgKGNsb2V4ZWMpICovCisjZGVmaW5lIEZfU0VURkwJCTQKKyNkZWZpbmUgRl9HRVRMSwkJNQorI2RlZmluZSBGX1NFVExLCQk2CisjZGVmaW5lIEZfU0VUTEtXCTcKKyNkZWZpbmUgRl9HRVRMSzY0CTgKKyNkZWZpbmUgRl9TRVRMSzY0CTkKKyNkZWZpbmUgRl9TRVRMS1c2NAkxMAorCisjZGVmaW5lIEZfR0VUT1dOCTExCS8qICBmb3Igc29ja2V0cy4gKi8KKyNkZWZpbmUgRl9TRVRPV04JMTIJLyogIGZvciBzb2NrZXRzLiAqLworI2RlZmluZSBGX1NFVFNJRwkxMwkvKiAgZm9yIHNvY2tldHMuICovCisjZGVmaW5lIEZfR0VUU0lHCTE0CS8qICBmb3Igc29ja2V0cy4gKi8KKworLyogZm9yIEZfW0dFVHxTRVRdRkwgKi8KKyNkZWZpbmUgRkRfQ0xPRVhFQwkxCS8qIGFjdHVhbGx5IGFueXRoaW5nIHdpdGggbG93IGJpdCBzZXQgZ29lcyAqLworCisvKiBmb3IgcG9zaXggZmNudGwoKSBhbmQgbG9ja2YoKSAqLworI2RlZmluZSBGX1JETENLCQkwMQorI2RlZmluZSBGX1dSTENLCQkwMgorI2RlZmluZSBGX1VOTENLCQkwMworCisvKiBmb3Igb2xkIGltcGxlbWVudGF0aW9uIG9mIGJzZCBmbG9jayAoKSAqLworI2RlZmluZSBGX0VYTENLCQk0CS8qIG9yIDMgKi8KKyNkZWZpbmUgRl9TSExDSwkJOAkvKiBvciA0ICovCisKKy8qIGZvciBsZWFzZXMgKi8KKyNkZWZpbmUgRl9JTlBST0dSRVNTCTE2CisKKy8qIG9wZXJhdGlvbnMgZm9yIGJzZCBmbG9jaygpLCBhbHNvIHVzZWQgYnkgdGhlIGtlcm5lbCBpbXBsZW1lbnRhdGlvbiAqLworI2RlZmluZSBMT0NLX1NICQkxCS8qIHNoYXJlZCBsb2NrICovCisjZGVmaW5lIExPQ0tfRVgJCTIJLyogZXhjbHVzaXZlIGxvY2sgKi8KKyNkZWZpbmUgTE9DS19OQgkJNAkvKiBvcidkIHdpdGggb25lIG9mIHRoZSBhYm92ZSB0byBwcmV2ZW50CisJCQkJICAgYmxvY2tpbmcgKi8KKyNkZWZpbmUgTE9DS19VTgkJOAkvKiByZW1vdmUgbG9jayAqLworCisjZGVmaW5lIExPQ0tfTUFORAkzMgkvKiBUaGlzIGlzIGEgbWFuZGF0b3J5IGZsb2NrICovCisjZGVmaW5lIExPQ0tfUkVBRAk2NAkvKiAuLi4gV2hpY2ggYWxsb3dzIGNvbmN1cnJlbnQgcmVhZCBvcGVyYXRpb25zICovCisjZGVmaW5lIExPQ0tfV1JJVEUJMTI4CS8qIC4uLiBXaGljaCBhbGxvd3MgY29uY3VycmVudCB3cml0ZSBvcGVyYXRpb25zICovCisjZGVmaW5lIExPQ0tfUlcJCTE5MgkvKiAuLi4gV2hpY2ggYWxsb3dzIGNvbmN1cnJlbnQgcmVhZCAmIHdyaXRlIG9wcyAqLworCitzdHJ1Y3QgZmxvY2sgeworCXNob3J0IGxfdHlwZTsKKwlzaG9ydCBsX3doZW5jZTsKKwlvZmZfdCBsX3N0YXJ0OworCW9mZl90IGxfbGVuOworCXBpZF90IGxfcGlkOworfTsKKworc3RydWN0IGZsb2NrNjQgeworCXNob3J0IGxfdHlwZTsKKwlzaG9ydCBsX3doZW5jZTsKKwlsb2ZmX3QgbF9zdGFydDsKKwlsb2ZmX3QgbF9sZW47CisJcGlkX3QgbF9waWQ7Cit9OworCisjZGVmaW5lIEZfTElOVVhfU1BFQ0lGSUNfQkFTRSAgMTAyNAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9maXhtYXAuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9maXhtYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWNhZjRiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL2ZpeG1hcC5oCkBAIC0wLDAgKzEsMjMgQEAKKyNpZm5kZWYgX0FTTV9GSVhNQVBfSAorI2RlZmluZSBfQVNNX0ZJWE1BUF9ICisKKy8qCisgKiBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgbG9jYXRpb25zIG9mIHRoZSBmaXhlZCBtYXBwaW5ncyBvbiBwYXJpc2MuCisgKgorICogQWxsIG9mIHRoZSB2YWx1ZXMgaW4gdGhpcyBmaWxlIGFyZSBtYWNoaW5lIHZpcnR1YWwgYWRkcmVzc2VzLgorICoKKyAqIEFsbCBvZiB0aGUgdmFsdWVzIGluIHRoaXMgZmlsZSBtdXN0IGJlIDw0R0IgKGJlY2F1c2Ugb2YgYXNzZW1ibHkKKyAqIGxvYWRpbmcgcmVzdHJpY3Rpb25zKS4gIElmIHlvdSBwbGFjZSB0aGlzIHJlZ2lvbiBhbnl3aGVyZSBhYm92ZQorICogX19QQUdFX09GRlNFVCwgeW91IG11c3QgYWRqdXN0IHRoZSBtZW1vcnkgbWFwIGFjY29yZGluZ2x5ICovCisKKy8qIFRoZSBhbGlhcyByZWdpb24gaXMgdXNlZCBpbiBrZXJuZWwgc3BhY2UgdG8gZG8gY29weS9jbGVhciB0byBvcgorICogZnJvbSBhcmVhcyBjb25ncnVlbnRseSBtYXBwZWQgd2l0aCB1c2VyIHNwYWNlLiAgSXQgaXMgOE1CIGxhcmdlCisgKiBhbmQgbXVzdCBiZSAxNk1CIGFsaWduZWQgKi8KKyNkZWZpbmUgVE1QQUxJQVNfTUFQX1NUQVJUCSgoX19QQUdFX09GRlNFVCkgLSAxNioxMDI0KjEwMjQpCisvKiBUaGlzIGlzIHRoZSBrZXJuZWwgYXJlYSBmb3IgYWxsIG1hcHMgKHZtYWxsb2MsIGRtYSBldGMuKSAgbW9zdAorICogdXN1YWxseSwgaXQgZXh0ZW5kcyB1cCB0byBUTVBBTElBU19NQVBfU1RBUlQuICBWaXJ0dWFsIGFkZHJlc3NlcworICogMC4uR0FURVdBWV9QQUdFX1NJWkUgYXJlIHJlc2VydmVkIGZvciB0aGUgZ2F0ZXdheSBwYWdlICovCisjZGVmaW5lIEtFUk5FTF9NQVBfU1RBUlQJKEdBVEVXQVlfUEFHRV9TSVpFKQorI2RlZmluZSBLRVJORUxfTUFQX0VORAkJKFRNUEFMSUFTX01BUF9TVEFSVCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvZmxvcHB5LmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvZmxvcHB5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdmNTNkZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9mbG9wcHkuaApAQCAtMCwwICsxLDI3NyBAQAorLyogICAgQXJjaGl0ZWN0dXJlIHNwZWNpZmljIHBhcnRzIG9mIHRoZSBGbG9wcHkgZHJpdmVyCisgKgorICogICAgTGludXgvUEEtUklTQyBQcm9qZWN0IChodHRwOi8vd3d3LnBhcmlzYy1saW51eC5vcmcvKQorICogICAgQ29weXJpZ2h0IChDKSAyMDAwIE1hdHRoZXcgV2lsY294ICh3aWxseSBhIGRlYmlhbiAuIG9yZykKKyAqICAgIENvcHlyaWdodCAoQykgMjAwMCBEYXZlIEtlbm5lZHkKKyAqCisgKiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKyNpZm5kZWYgX19BU01fUEFSSVNDX0ZMT1BQWV9ICisjZGVmaW5lIF9fQVNNX1BBUklTQ19GTE9QUFlfSAorCisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorCisKKy8qCisgKiBUaGUgRE1BIGNoYW5uZWwgdXNlZCBieSB0aGUgZmxvcHB5IGNvbnRyb2xsZXIgY2Fubm90IGFjY2VzcyBkYXRhIGF0CisgKiBhZGRyZXNzZXMgPj0gMTZNQgorICoKKyAqIFdlbnQgYmFjayB0byB0aGUgMU1CIGxpbWl0LCBhcyBzb21lIHBlb3BsZSBoYWQgcHJvYmxlbXMgd2l0aCB0aGUgZmxvcHB5CisgKiBkcml2ZXIgb3RoZXJ3aXNlLiBJdCBkb2Vzbid0IG1hdHRlciBtdWNoIGZvciBwZXJmb3JtYW5jZSBhbnl3YXksIGFzIG1vc3QKKyAqIGZsb3BweSBhY2Nlc3NlcyBnbyB0aHJvdWdoIHRoZSB0cmFjayBidWZmZXIuCisgKi8KKyNkZWZpbmUgX0NST1NTXzY0S0IoYSxzLHZkbWEpIFwKKyghdmRtYSAmJiAoKHVuc2lnbmVkIGxvbmcpKGEpL0tfNjQgIT0gKCh1bnNpZ25lZCBsb25nKShhKSArIChzKSAtIDEpIC8gS182NCkpCisKKyNkZWZpbmUgQ1JPU1NfNjRLQihhLHMpIF9DUk9TU182NEtCKGEscyx1c2VfdmlydHVhbF9kbWEgJiAxKQorCisKKyNkZWZpbmUgU1cgZmRfcm91dGluZVt1c2VfdmlydHVhbF9kbWEmMV0KKyNkZWZpbmUgQ1NXIGZkX3JvdXRpbmVbY2FuX3VzZV92aXJ0dWFsX2RtYSAmIDFdCisKKworI2RlZmluZSBmZF9pbmIocG9ydCkJCQlyZWFkYihwb3J0KQorI2RlZmluZSBmZF9vdXRiKHZhbHVlLCBwb3J0KQkJd3JpdGViKHZhbHVlLCBwb3J0KQorCisjZGVmaW5lIGZkX3JlcXVlc3RfZG1hKCkgICAgICAgIENTVy5fcmVxdWVzdF9kbWEoRkxPUFBZX0RNQSwiZmxvcHB5IikKKyNkZWZpbmUgZmRfZnJlZV9kbWEoKSAgICAgICAgICAgQ1NXLl9mcmVlX2RtYShGTE9QUFlfRE1BKQorI2RlZmluZSBmZF9lbmFibGVfaXJxKCkgICAgICAgICBlbmFibGVfaXJxKEZMT1BQWV9JUlEpCisjZGVmaW5lIGZkX2Rpc2FibGVfaXJxKCkgICAgICAgIGRpc2FibGVfaXJxKEZMT1BQWV9JUlEpCisjZGVmaW5lIGZkX2ZyZWVfaXJxKCkJCWZyZWVfaXJxKEZMT1BQWV9JUlEsIE5VTEwpCisjZGVmaW5lIGZkX2dldF9kbWFfcmVzaWR1ZSgpICAgIFNXLl9nZXRfZG1hX3Jlc2lkdWUoRkxPUFBZX0RNQSkKKyNkZWZpbmUgZmRfZG1hX21lbV9hbGxvYyhzaXplKQlTVy5fZG1hX21lbV9hbGxvYyhzaXplKQorI2RlZmluZSBmZF9kbWFfc2V0dXAoYWRkciwgc2l6ZSwgbW9kZSwgaW8pIFNXLl9kbWFfc2V0dXAoYWRkciwgc2l6ZSwgbW9kZSwgaW8pCisKKyNkZWZpbmUgRkxPUFBZX0NBTl9GQUxMQkFDS19PTl9OT0RNQQorCitzdGF0aWMgaW50IHZpcnR1YWxfZG1hX2NvdW50PTA7CitzdGF0aWMgaW50IHZpcnR1YWxfZG1hX3Jlc2lkdWU9MDsKK3N0YXRpYyBjaGFyICp2aXJ0dWFsX2RtYV9hZGRyPTA7CitzdGF0aWMgaW50IHZpcnR1YWxfZG1hX21vZGU9MDsKK3N0YXRpYyBpbnQgZG9pbmdfcGRtYT0wOworCitzdGF0aWMgdm9pZCBmbG9wcHlfaGFyZGludChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICogcmVncykKK3sKKwlyZWdpc3RlciB1bnNpZ25lZCBjaGFyIHN0OworCisjdW5kZWYgVFJBQ0VfRkxQWV9JTlQKKworI2lmZGVmIFRSQUNFX0ZMUFlfSU5UCisJc3RhdGljIGludCBjYWxscz0wOworCXN0YXRpYyBpbnQgYnl0ZXM9MDsKKwlzdGF0aWMgaW50IGRtYV93YWl0PTA7CisjZW5kaWYKKwlpZiAoIWRvaW5nX3BkbWEpIHsKKwkJZmxvcHB5X2ludGVycnVwdChpcnEsIGRldl9pZCwgcmVncyk7CisJCXJldHVybjsKKwl9CisKKyNpZmRlZiBUUkFDRV9GTFBZX0lOVAorCWlmKCFjYWxscykKKwkJYnl0ZXMgPSB2aXJ0dWFsX2RtYV9jb3VudDsKKyNlbmRpZgorCisJeworCQlyZWdpc3RlciBpbnQgbGNvdW50OworCQlyZWdpc3RlciBjaGFyICpscHRyID0gdmlydHVhbF9kbWFfYWRkcjsKKworCQlmb3IgKGxjb3VudCA9IHZpcnR1YWxfZG1hX2NvdW50OyBsY291bnQ7IGxjb3VudC0tKSB7CisJCQlzdCA9IGZkX2luYih2aXJ0dWFsX2RtYV9wb3J0KzQpICYgMHhhMCA7CisJCQlpZiAoc3QgIT0gMHhhMCkgCisJCQkJYnJlYWs7CisJCQlpZiAodmlydHVhbF9kbWFfbW9kZSkgeworCQkJCWZkX291dGIoKmxwdHIsIHZpcnR1YWxfZG1hX3BvcnQrNSk7CisJCQl9IGVsc2UgeworCQkJCSpscHRyID0gZmRfaW5iKHZpcnR1YWxfZG1hX3BvcnQrNSk7CisJCQl9CisJCQlscHRyKys7CisJCX0KKwkJdmlydHVhbF9kbWFfY291bnQgPSBsY291bnQ7CisJCXZpcnR1YWxfZG1hX2FkZHIgPSBscHRyOworCQlzdCA9IGZkX2luYih2aXJ0dWFsX2RtYV9wb3J0KzQpOworCX0KKworI2lmZGVmIFRSQUNFX0ZMUFlfSU5UCisJY2FsbHMrKzsKKyNlbmRpZgorCWlmIChzdCA9PSAweDIwKQorCQlyZXR1cm47CisJaWYgKCEoc3QgJiAweDIwKSkgeworCQl2aXJ0dWFsX2RtYV9yZXNpZHVlICs9IHZpcnR1YWxfZG1hX2NvdW50OworCQl2aXJ0dWFsX2RtYV9jb3VudCA9IDA7CisjaWZkZWYgVFJBQ0VfRkxQWV9JTlQKKwkJcHJpbnRrKCJjb3VudD0leCwgcmVzaWR1ZT0leCBjYWxscz0lZCBieXRlcz0lZCBkbWFfd2FpdD0lZFxuIiwgCisJCSAgICAgICB2aXJ0dWFsX2RtYV9jb3VudCwgdmlydHVhbF9kbWFfcmVzaWR1ZSwgY2FsbHMsIGJ5dGVzLAorCQkgICAgICAgZG1hX3dhaXQpOworCQljYWxscyA9IDA7CisJCWRtYV93YWl0PTA7CisjZW5kaWYKKwkJZG9pbmdfcGRtYSA9IDA7CisJCWZsb3BweV9pbnRlcnJ1cHQoaXJxLCBkZXZfaWQsIHJlZ3MpOworCQlyZXR1cm47CisJfQorI2lmZGVmIFRSQUNFX0ZMUFlfSU5UCisJaWYgKCF2aXJ0dWFsX2RtYV9jb3VudCkKKwkJZG1hX3dhaXQrKzsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBmZF9kaXNhYmxlX2RtYSh2b2lkKQoreworCWlmKCEgKGNhbl91c2VfdmlydHVhbF9kbWEgJiAxKSkKKwkJZGlzYWJsZV9kbWEoRkxPUFBZX0RNQSk7CisJZG9pbmdfcGRtYSA9IDA7CisJdmlydHVhbF9kbWFfcmVzaWR1ZSArPSB2aXJ0dWFsX2RtYV9jb3VudDsKKwl2aXJ0dWFsX2RtYV9jb3VudD0wOworfQorCitzdGF0aWMgaW50IHZkbWFfcmVxdWVzdF9kbWEodW5zaWduZWQgaW50IGRtYW5yLCBjb25zdCBjaGFyICogZGV2aWNlX2lkKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB2ZG1hX25vcCh1bnNpZ25lZCBpbnQgZHVtbXkpCit7Cit9CisKKworc3RhdGljIGludCB2ZG1hX2dldF9kbWFfcmVzaWR1ZSh1bnNpZ25lZCBpbnQgZHVtbXkpCit7CisJcmV0dXJuIHZpcnR1YWxfZG1hX2NvdW50ICsgdmlydHVhbF9kbWFfcmVzaWR1ZTsKK30KKworCitzdGF0aWMgaW50IGZkX3JlcXVlc3RfaXJxKHZvaWQpCit7CisJaWYoY2FuX3VzZV92aXJ0dWFsX2RtYSkKKwkJcmV0dXJuIHJlcXVlc3RfaXJxKEZMT1BQWV9JUlEsIGZsb3BweV9oYXJkaW50LFNBX0lOVEVSUlVQVCwKKwkJCQkJCSAgICJmbG9wcHkiLCBOVUxMKTsKKwllbHNlCisJCXJldHVybiByZXF1ZXN0X2lycShGTE9QUFlfSVJRLCBmbG9wcHlfaW50ZXJydXB0LAorCQkJCQkJICAgU0FfSU5URVJSVVBUfFNBX1NBTVBMRV9SQU5ET00sCisJCQkJCQkgICAiZmxvcHB5IiwgTlVMTCk7CQorCit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGRtYV9tZW1fYWxsb2ModW5zaWduZWQgbG9uZyBzaXplKQoreworCXJldHVybiBfX2dldF9kbWFfcGFnZXMoR0ZQX0tFUk5FTCwgZ2V0X29yZGVyKHNpemUpKTsKK30KKworCitzdGF0aWMgdW5zaWduZWQgbG9uZyB2ZG1hX21lbV9hbGxvYyh1bnNpZ25lZCBsb25nIHNpemUpCit7CisJcmV0dXJuICh1bnNpZ25lZCBsb25nKSB2bWFsbG9jKHNpemUpOworCit9CisKKyNkZWZpbmUgbm9kbWFfbWVtX2FsbG9jKHNpemUpIHZkbWFfbWVtX2FsbG9jKHNpemUpCisKK3N0YXRpYyB2b2lkIF9mZF9kbWFfbWVtX2ZyZWUodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJaWYoKHVuc2lnbmVkIGludCkgYWRkciA+PSAodW5zaWduZWQgaW50KSBoaWdoX21lbW9yeSkKKwkJcmV0dXJuIHZmcmVlKCh2b2lkICopYWRkcik7CisJZWxzZQorCQlmcmVlX3BhZ2VzKGFkZHIsIGdldF9vcmRlcihzaXplKSk7CQkKK30KKworI2RlZmluZSBmZF9kbWFfbWVtX2ZyZWUoYWRkciwgc2l6ZSkgIF9mZF9kbWFfbWVtX2ZyZWUoYWRkciwgc2l6ZSkgCisKK3N0YXRpYyB2b2lkIF9mZF9jaG9zZV9kbWFfbW9kZShjaGFyICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJaWYoY2FuX3VzZV92aXJ0dWFsX2RtYSA9PSAyKSB7CisJCWlmKCh1bnNpZ25lZCBpbnQpIGFkZHIgPj0gKHVuc2lnbmVkIGludCkgaGlnaF9tZW1vcnkgfHwKKwkJICAgdmlydF90b19idXMoYWRkcikgPj0gMHgxMDAwMDAwIHx8CisJCSAgIF9DUk9TU182NEtCKGFkZHIsIHNpemUsIDApKQorCQkJdXNlX3ZpcnR1YWxfZG1hID0gMTsKKwkJZWxzZQorCQkJdXNlX3ZpcnR1YWxfZG1hID0gMDsKKwl9IGVsc2UgeworCQl1c2VfdmlydHVhbF9kbWEgPSBjYW5fdXNlX3ZpcnR1YWxfZG1hICYgMTsKKwl9Cit9CisKKyNkZWZpbmUgZmRfY2hvc2VfZG1hX21vZGUoYWRkciwgc2l6ZSkgX2ZkX2Nob3NlX2RtYV9tb2RlKGFkZHIsIHNpemUpCisKKworc3RhdGljIGludCB2ZG1hX2RtYV9zZXR1cChjaGFyICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIGludCBtb2RlLCBpbnQgaW8pCit7CisJZG9pbmdfcGRtYSA9IDE7CisJdmlydHVhbF9kbWFfcG9ydCA9IGlvOworCXZpcnR1YWxfZG1hX21vZGUgPSAobW9kZSAgPT0gRE1BX01PREVfV1JJVEUpOworCXZpcnR1YWxfZG1hX2FkZHIgPSBhZGRyOworCXZpcnR1YWxfZG1hX2NvdW50ID0gc2l6ZTsKKwl2aXJ0dWFsX2RtYV9yZXNpZHVlID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoYXJkX2RtYV9zZXR1cChjaGFyICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIGludCBtb2RlLCBpbnQgaW8pCit7CisjaWZkZWYgRkxPUFBZX1NBTklUWV9DSEVDSworCWlmIChDUk9TU182NEtCKGFkZHIsIHNpemUpKSB7CisJCXByaW50aygiRE1BIGNyb3NzaW5nIDY0LUsgYm91bmRhcnkgJXAtJXBcbiIsIGFkZHIsIGFkZHIrc2l6ZSk7CisJCXJldHVybiAtMTsKKwl9CisjZW5kaWYKKwkvKiBhY3R1YWwsIHBoeXNpY2FsIERNQSAqLworCWRvaW5nX3BkbWEgPSAwOworCWNsZWFyX2RtYV9mZihGTE9QUFlfRE1BKTsKKwlzZXRfZG1hX21vZGUoRkxPUFBZX0RNQSxtb2RlKTsKKwlzZXRfZG1hX2FkZHIoRkxPUFBZX0RNQSx2aXJ0X3RvX2J1cyhhZGRyKSk7CisJc2V0X2RtYV9jb3VudChGTE9QUFlfRE1BLHNpemUpOworCWVuYWJsZV9kbWEoRkxPUFBZX0RNQSk7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBmZF9yb3V0aW5lX2wgeworCWludCAoKl9yZXF1ZXN0X2RtYSkodW5zaWduZWQgaW50IGRtYW5yLCBjb25zdCBjaGFyICogZGV2aWNlX2lkKTsKKwl2b2lkICgqX2ZyZWVfZG1hKSh1bnNpZ25lZCBpbnQgZG1hbnIpOworCWludCAoKl9nZXRfZG1hX3Jlc2lkdWUpKHVuc2lnbmVkIGludCBkdW1teSk7CisJdW5zaWduZWQgbG9uZyAoKl9kbWFfbWVtX2FsbG9jKSAodW5zaWduZWQgbG9uZyBzaXplKTsKKwlpbnQgKCpfZG1hX3NldHVwKShjaGFyICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIGludCBtb2RlLCBpbnQgaW8pOworfSBmZF9yb3V0aW5lW10gPSB7CisJeworCQlyZXF1ZXN0X2RtYSwKKwkJZnJlZV9kbWEsCisJCWdldF9kbWFfcmVzaWR1ZSwKKwkJZG1hX21lbV9hbGxvYywKKwkJaGFyZF9kbWFfc2V0dXAKKwl9LAorCXsKKwkJdmRtYV9yZXF1ZXN0X2RtYSwKKwkJdmRtYV9ub3AsCisJCXZkbWFfZ2V0X2RtYV9yZXNpZHVlLAorCQl2ZG1hX21lbV9hbGxvYywKKwkJdmRtYV9kbWFfc2V0dXAKKwl9Cit9OworCisKK3N0YXRpYyBpbnQgRkRDMSA9IDB4M2YwOyAvKiBMaWVzLiAgRmxvcHB5IGNvbnRyb2xsZXIgaXMgbWVtb3J5IG1hcHBlZCwgbm90IGlvIG1hcHBlZCAqLworc3RhdGljIGludCBGREMyID0gLTE7CisKKyNkZWZpbmUgRkxPUFBZMF9UWVBFCTAKKyNkZWZpbmUgRkxPUFBZMV9UWVBFCTAKKworI2RlZmluZSBOX0ZEQyAxCisjZGVmaW5lIE5fRFJJVkUgOAorCisjZGVmaW5lIEZMT1BQWV9NT1RPUl9NQVNLIDB4ZjAKKworI2RlZmluZSBBVVRPX0RNQQorCisjZGVmaW5lIEVYVFJBX0ZMT1BQWV9QQVJBTVMKKworI2VuZGlmIC8qIF9fQVNNX1BBUklTQ19GTE9QUFlfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL2dyZmlvY3RsLmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvZ3JmaW9jdGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2NmYzAxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL2dyZmlvY3RsLmgKQEAgLTAsMCArMSwxMTEgQEAKKy8qICBBcmNoaXRlY3R1cmUgc3BlY2lmaWMgcGFydHMgb2YgSFAncyBTVEkgKGZyYW1lYnVmZmVyKSBkcml2ZXIuCisgKiAgU3RydWN0dXJlcyBhcmUgSFAtVVggY29tcGF0aWJsZSBmb3IgWEZyZWU4NiB1c2FnZS4KKyAqIAorICogICAgTGludXgvUEEtUklTQyBQcm9qZWN0IChodHRwOi8vd3d3LnBhcmlzYy1saW51eC5vcmcvKQorICogICAgQ29weXJpZ2h0IChDKSAyMDAxIEhlbGdlIERlbGxlciAoZGVsbGVyIGEgcGFyaXNjLWxpbnV4IG9yZykKKyAqCisgKiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2lmbmRlZiBfX0FTTV9QQVJJU0NfR1JGSU9DVExfSAorI2RlZmluZSBfX0FTTV9QQVJJU0NfR1JGSU9DVExfSAorCisvKiB1cHBlciAzMiBiaXRzIG9mIGdyYXBoaWNzIGlkIChIUC9VWCBpZGVudGlmaWVyKSAqLworCisjZGVmaW5lIEdSRkdBVE9SCQk4CisjZGVmaW5lIFM5MDAwX0lEX1MzMDAJCTkKKyNkZWZpbmUgR1JGQk9CQ0FUCQk5CisjZGVmaW5lCUdSRkNBVFNFWUUJCTkKKyNkZWZpbmUgUzkwMDBfSURfOTg3MjAJCTEwCisjZGVmaW5lIEdSRlJCT1gJCQkxMAorI2RlZmluZSBTOTAwMF9JRF85ODU1MAkJMTEKKyNkZWZpbmUgR1JGRklSRUVZRQkJMTEKKyNkZWZpbmUgUzkwMDBfSURfQTEwOTZBCQkxMgorI2RlZmluZSBHUkZIWVBFUklPTgkJMTIKKyNkZWZpbmUgUzkwMDBfSURfRlJJCQkxMworI2RlZmluZSBTOTAwMF9JRF85ODczMAkJMTQKKyNkZWZpbmUgR1JGREFWSU5DSQkJMTQKKyNkZWZpbmUgUzkwMDBfSURfOTg3MDUJCTB4MjZDMDgwNzAJLyogVGlnZXJzaGFyayAqLworI2RlZmluZSBTOTAwMF9JRF85ODczNgkJMHgyNkQxNDhBQgorI2RlZmluZSBTOTAwMF9JRF9BMTY1OUEJCTB4MjZEMTQ4MkEJLyogQ1JYIDggcGxhbmUgY29sb3IgKD1FTEspICovCisjZGVmaW5lIFM5MDAwX0lEX0VMSwkJUzkwMDBfSURfQTE2NTlBCisjZGVmaW5lIFM5MDAwX0lEX0ExNDM5QQkJMHgyNkQxNDhFRQkvKiBDUlgyNCA9IENSWCsgKDI0LXBsYW5lIGNvbG9yKSAqLworI2RlZmluZSBTOTAwMF9JRF9BMTkyNEEJCTB4MjZEMTQ4OEMJLyogR1JYIGdyYXktc2NhbGUgKi8KKyNkZWZpbmUgUzkwMDBfSURfRUxNCQlTOTAwMF9JRF9BMTkyNEEKKyNkZWZpbmUgUzkwMDBfSURfOTg3NjUJCTB4Mjc0ODBERUYKKyNkZWZpbmUgUzkwMDBfSURfRUxLXzc2OAkweDI3NDgyMTAxCisjZGVmaW5lIFM5MDAwX0lEX1NUSU5HRVIJMHgyN0E0QTQwMgorI2RlZmluZSBTOTAwMF9JRF9USU1CRVIJCTB4MjdGMTIzOTIJLyogQnVzaG1hc3RlciAoNzEwKSBHcmFwaGljcyAqLworI2RlZmluZSBTOTAwMF9JRF9UT01DQVQJCTB4MjdGQ0NCNkQJLyogZHVhbC1oZWFkZWQgRUxLIChEdWFsIENSWCkgKi8KKyNkZWZpbmUgUzkwMDBfSURfQVJUSVNUCQkweDJCNERFRDZECS8qIEFydGlzdCAoR2Vja28vNzEyICYgNzE1KSBvbmJvYXJkIEdyYXBoaWNzICovCisjZGVmaW5lIFM5MDAwX0lEX0hDUlgJCTB4MkJDQjAxNUEJLyogSHlwZXJkcml2ZS9IeXBlcmJvd2wgKEE0MDcxQSkgR3JhcGhpY3MgKi8KKyNkZWZpbmUgQ1JYMjRfT1ZFUkxBWV9QTEFORVMJMHg5MjA4MjVBQQkvKiBPdmVybGF5IHBsYW5lcyBvbiBDUlgyNCAqLworCisjZGVmaW5lIENSVF9JRF9FTEtfMTAyNAkJUzkwMDBfSURfRUxLXzc2OCAvKiBFbGsgMTAyNHg3NjggIENSWCAqLworI2RlZmluZSBDUlRfSURfRUxLXzEyODAJCVM5MDAwX0lEX0ExNjU5QQkvKiBFbGsgMTI4MHgxMDI0IENSWCAqLworI2RlZmluZSBDUlRfSURfRUxLXzEwMjREQgkweDI3ODQ5Q0E1ICAgICAgLyogRWxrIDEwMjR4NzY4IGRvdWJsZSBidWZmZXIgKi8KKyNkZWZpbmUgQ1JUX0lEX0VMS19HUwkJUzkwMDBfSURfQTE5MjRBCS8qIEVsayAxMjgweDEwMjQgR3JleVNjYWxlICAgICovCisjZGVmaW5lIENSVF9JRF9DUlgyNAkJUzkwMDBfSURfQTE0MzlBCS8qIFBpcmFuaGEgKi8KKyNkZWZpbmUgQ1JUX0lEX1ZJU1VBTElaRV9FRwkweDJEMDhDMEE3ICAgICAgLyogR3JhZmZpdGkgKGJ1aWx0LWluIEIxMzIrL0IxNjBMKSAqLworI2RlZmluZSBDUlRfSURfVEhVTkRFUgkJMHgyRjIzRTVGQyAgICAgIC8qIFRodW5kZXIgMSBWSVNVQUxJWkUgNDgqLworI2RlZmluZSBDUlRfSURfVEhVTkRFUjIJCTB4MkY4RDU3MEUgICAgICAvKiBUaHVuZGVyIDIgVklTVUFMSVpFIDQ4IFhQKi8KKyNkZWZpbmUgQ1JUX0lEX0hDUlgJCVM5MDAwX0lEX0hDUlgJLyogSHlwZXJkcml2ZSBIQ1JYICovCisjZGVmaW5lIENSVF9JRF9DUlg0OFoJCVM5MDAwX0lEX1NUSU5HRVIgLyogU3RpbmdlciAqLworI2RlZmluZSBDUlRfSURfRFVBTF9DUlgJCVM5MDAwX0lEX1RPTUNBVAkvKiBUb21jYXQgKi8KKyNkZWZpbmUgQ1JUX0lEX1BWUlgJCVM5MDAwX0lEXzk4NzA1CS8qIFRpZ2Vyc2hhcmsgKi8KKyNkZWZpbmUgQ1JUX0lEX1RJTUJFUgkJUzkwMDBfSURfVElNQkVSCS8qIFRpbWJlciAoNzEwIGJ1aWx0aW4pICovCisjZGVmaW5lIENSVF9JRF9UVlJYCQlTOTAwMF9JRF85ODc2NQkvKiBUVlJYIChndG8vZmFsY29uKSAqLworI2RlZmluZSBDUlRfSURfQVJUSVNUCQlTOTAwMF9JRF9BUlRJU1QJLyogQXJ0aXN0ICovCisjZGVmaW5lIENSVF9JRF9TVU1NSVQJCTB4MkZDMTA2NkIgICAgICAvKiBTdW1taXQgRlgyLCBGWDQsIEZYNiAuLi4gKi8KKworLyogc3RydWN0dXJlIGZvciBpb2N0bChHQ0RFU0NSSUJFKSAqLworCisjZGVmaW5lIGdhZGRyX3QgdW5zaWduZWQgbG9uZwkvKiBGSVhNRTogUEEyLjAgKDY0Yml0KSBwb3J0YWJsZSA/ICovCisKK3N0cnVjdAlncmZfZmJpbmZvIHsKKwl1bnNpZ25lZCBpbnQJaWQ7CQkvKiB1cHBlciAzMiBiaXRzIG9mIGdyYXBoaWNzIGlkICovCisJdW5zaWduZWQgaW50CW1hcHNpemU7CS8qIG1hcHBlZCBzaXplIG9mIGZyYW1lYnVmZmVyICovCisJdW5zaWduZWQgaW50CWR3aWR0aCwgZGxlbmd0aDsvKiB4IGFuZCB5IHNpemVzICovCisJdW5zaWduZWQgaW50CXdpZHRoLCBsZW5ndGg7CS8qIHRvdGFsIHggYW5kIHRvdGFsIHkgc2l6ZSAqLworCXVuc2lnbmVkIGludAl4bGVuOwkJLyogeCBwaXRjaCBzaXplICovCisJdW5zaWduZWQgaW50CWJwcCwgYnBwdTsJLyogYml0cyBwZXIgcGl4ZWwgYW5kIHVzZWQgYnBwICovCisJdW5zaWduZWQgaW50CW5wbCwgbnBsYnl0ZXM7CS8qICMgb2YgcGxhbmVzIGFuZCBieXRlcyBwZXIgcGxhbmUgKi8KKwljaGFyCQluYW1lWzMyXTsJLyogbmFtZSBvZiB0aGUgZGV2aWNlIChmcm9tIFJPTSkgKi8KKwl1bnNpZ25lZCBpbnQJYXR0cjsJCS8qIGF0dHJpYnV0ZXMgKi8KKwlnYWRkcl90IAlmYmJhc2UsIHJlZ2Jhc2U7LyogZnJhbWVidWZmZXIgYW5kIHJlZ2lzdGVyIGJhc2UgYWRkciAqLworCWdhZGRyX3QJCXJlZ2lvbnNbNl07CS8qIHJlZ2lvbiBiYXNlcyAqLworfTsKKworI2RlZmluZQlHQ0lECQlfSU9SKCdHJywgMCwgaW50KQorI2RlZmluZQlHQ09OCQlfSU8oJ0cnLCAxKQorI2RlZmluZQlHQ09GRgkJX0lPKCdHJywgMikKKyNkZWZpbmUJR0NBT04JCV9JTygnRycsIDMpCisjZGVmaW5lCUdDQU9GRgkJX0lPKCdHJywgNCkKKyNkZWZpbmUJR0NNQVAJCV9JT1dSKCdHJywgNSwgaW50KQorI2RlZmluZQlHQ1VOTUFQCQlfSU9XUignRycsIDYsIGludCkKKyNkZWZpbmUJR0NNQVBfSFBVWAlfSU8oJ0cnLCA1KQorI2RlZmluZQlHQ1VOTUFQX0hQVVgJX0lPKCdHJywgNikKKyNkZWZpbmUJR0NMT0NLCQlfSU8oJ0cnLCA3KQorI2RlZmluZQlHQ1VOTE9DSwlfSU8oJ0cnLCA4KQorI2RlZmluZQlHQ0xPQ0tfTUlOSU1VTQlfSU8oJ0cnLCA5KQorI2RlZmluZQlHQ1VOTE9DS19NSU5JTVVNIF9JTygnRycsIDEwKQorI2RlZmluZQlHQ1NUQVRJQ19DTUFQCV9JTygnRycsIDExKQorI2RlZmluZQlHQ1ZBUklBQkxFX0NNQVAgX0lPKCdHJywgMTIpCisjZGVmaW5lIEdDVEVSTQkJX0lPV1IoJ0cnLDIwLGludCkJLyogbXVsdGktaGVhZGVkIFRvbWNhdCAqLyAKKyNkZWZpbmUgR0NERVNDUklCRQlfSU9SKCdHJywgMjEsIHN0cnVjdCBncmZfZmJpbmZvKQorI2RlZmluZSBHQ0ZBU1RMT0NLCV9JTygnRycsIDI2KQorCisjZW5kaWYgLyogX19BU01fUEFSSVNDX0dSRklPQ1RMX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL2hhcmRpcnEuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9oYXJkaXJxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U5MzEzMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9oYXJkaXJxLmgKQEAgLTAsMCArMSwyOSBAQAorLyogaGFyZGlycS5oOiBQQS1SSVNDIGhhcmQgSVJRIHN1cHBvcnQuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAxIE1hdHRoZXcgV2lsY294IDxtYXR0aGV3QHdpbC5jeD4KKyAqCisgKiBUaGUgbG9ja2luZyBpcyByZWFsbHkgcXVpdGUgaW50ZXJlc3RpbmcuICBUaGVyZSdzIGEgY3B1LWxvY2FsCisgKiBjb3VudCBvZiBob3cgbWFueSBpbnRlcnJ1cHRzIGFyZSBiZWluZyBoYW5kbGVkLCBhbmQgYSBnbG9iYWwKKyAqIGxvY2suICBBbiBpbnRlcnJ1cHQgY2FuIG9ubHkgYmUgc2VydmljZWQgaWYgdGhlIGdsb2JhbCBsb2NrCisgKiBpcyBmcmVlLiAgWW91IGNhbid0IGJlIHN1cmUgbm8gbW9yZSBpbnRlcnJ1cHRzIGFyZSBiZWluZworICogc2VydmljZWQgdW50aWwgeW91J3ZlIGFjcXVpcmVkIHRoZSBsb2NrIGFuZCB0aGVuIGNoZWNrZWQKKyAqIGFsbCB0aGUgcGVyLWNwdSBpbnRlcnJ1cHQgY291bnRzIGFyZSBhbGwgemVyby4gIEl0J3MgYSBzcGVjaWFsaXNlZAorICogYnJfbG9jaywgYW5kIHRoYXQncyBleGFjdGx5IGhvdyBTcGFyYyBkb2VzIGl0LiAgV2UgZG9uJ3QgYmVjYXVzZQorICogaXQncyBtb3JlIGxvY2tpbmcgZm9yIHVzLiAgVGhpcyB3YXkgaXMgbG9jay1mcmVlIGluIHRoZSBpbnRlcnJ1cHQgcGF0aC4KKyAqLworCisjaWZuZGVmIF9QQVJJU0NfSEFSRElSUV9ICisjZGVmaW5lIF9QQVJJU0NfSEFSRElSUV9ICisKKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBsb25nIF9fc29mdGlycV9wZW5kaW5nOyAvKiBzZXRfYml0IGlzIHVzZWQgb24gdGhpcyAqLworfSBfX19fY2FjaGVsaW5lX2FsaWduZWQgaXJxX2NwdXN0YXRfdDsKKworI2luY2x1ZGUgPGxpbnV4L2lycV9jcHVzdGF0Lmg+CS8qIFN0YW5kYXJkIG1hcHBpbmdzIGZvciBpcnFfY3B1c3RhdF90IGFib3ZlICovCisKK3ZvaWQgYWNrX2JhZF9pcnEodW5zaWduZWQgaW50IGlycSk7CisKKyNlbmRpZiAvKiBfUEFSSVNDX0hBUkRJUlFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL2hhcmR3YXJlLmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvaGFyZHdhcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDZkM2Y3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL2hhcmR3YXJlLmgKQEAgLTAsMCArMSwxMzIgQEAKKyNpZm5kZWYgX1BBUklTQ19IQVJEV0FSRV9ICisjZGVmaW5lIF9QQVJJU0NfSEFSRFdBUkVfSAorCisjaW5jbHVkZSA8YXNtL3BkYy5oPgorCitzdHJ1Y3QgcGFyaXNjX2RldmljZV9pZCB7CisJdW5zaWduZWQgY2hhcglod190eXBlOwkvKiA1IGJpdHMgdXNlZCAqLworCXVuc2lnbmVkIGNoYXIJaHZlcnNpb25fcmV2OwkvKiA0IGJpdHMgKi8KKwl1bnNpZ25lZCBzaG9ydAlodmVyc2lvbjsJLyogMTIgYml0cyAqLworCXVuc2lnbmVkIGludAlzdmVyc2lvbjsJLyogMjAgYml0cyAqLworfTsKKworI2RlZmluZSBIV1RZUEVfQU5ZX0lECTB4ZmYKKyNkZWZpbmUgSFZFUlNJT05fUkVWX0FOWV9JRAkweGZmCisjZGVmaW5lIEhWRVJTSU9OX0FOWV9JRAkweGZmZmYKKyNkZWZpbmUgU1ZFUlNJT05fQU5ZX0lECTB4ZmZmZmZmZmZVCisKK3N0cnVjdCBocF9oYXJkd2FyZSB7CisJdW5zaWduZWQgc2hvcnQJaHdfdHlwZTo1OwkvKiBIUEhXX3h4eCAqLworCXVuc2lnbmVkIHNob3J0CWh2ZXJzaW9uOworCXVuc2lnbmVkIGxvbmcJc3ZlcnNpb246Mjg7CisJdW5zaWduZWQgc2hvcnQJb3B0OworCWNvbnN0IGNoYXIJbmFtZVs4MF07CS8qIFRoZSBoYXJkd2FyZSBkZXNjcmlwdGlvbiAqLworfTsKKworc3RydWN0IHBhcmlzY19kZXZpY2U7CisKK2VudW0gY3B1X3R5cGUgeworCXBjeAk9IDAsIC8qIHBhNzAwMAkJcGEgMS4wICAqLworCXBjeHMJPSAxLCAvKiBwYTcwMDAJCXBhIDEuMWEgKi8KKwlwY3h0CT0gMiwgLyogcGE3MTAwCQlwYSAxLjFiICovCisJcGN4dF8JPSAzLCAvKiBwYTcyMDAJKHQnKQlwYSAxLjFjICovCisJcGN4bAk9IDQsIC8qIHBhNzEwMGxjCXBhIDEuMWQgKi8KKwlwY3hsMgk9IDUsIC8qIHBhNzMwMGxjCXBhIDEuMWUgKi8KKwlwY3h1CT0gNiwgLyogcGE4MDAwCQlwYSAyLjAgICovCisJcGN4dV8JPSA3LCAvKiBwYTgyMDAJKHUrKQlwYSAyLjAgICovCisJcGN4dwk9IDgsIC8qIHBhODUwMAkJcGEgMi4wICAqLworCXBjeHdfCT0gOSwgLyogcGE4NjAwCSh3KykJcGEgMi4wICAqLworCXBjeHcyCT0gMTAsIC8qIHBhODcwMAkJcGEgMi4wICAqLworCW1ha28JPSAxMSAgLyogcGE4ODAwCQlwYSAyLjAgICovCit9OworCitleHRlcm4gY2hhciAqY3B1X25hbWVfdmVyc2lvbltdWzJdOyAvKiBtYXBwaW5nIGZyb20gZW51bSBjcHVfdHlwZSB0byBzdHJpbmdzICovCisKK3N0cnVjdCBwYXJpc2NfZHJpdmVyOworCitzdHJ1Y3QgaW9fbW9kdWxlIHsKKyAgICAgICAgdm9sYXRpbGUgdWludDMyX3Qgbm90aGluZzsJCS8qIHJlZyAwICovCisgICAgICAgIHZvbGF0aWxlIHVpbnQzMl90IGlvX2VpbTsKKyAgICAgICAgdm9sYXRpbGUgdWludDMyX3QgaW9fZGNfYWRhdGE7CisgICAgICAgIHZvbGF0aWxlIHVpbnQzMl90IGlvX2lpX2NkYXRhOworICAgICAgICB2b2xhdGlsZSB1aW50MzJfdCBpb19kbWFfbGluazsJCS8qIHJlZyA0ICovCisgICAgICAgIHZvbGF0aWxlIHVpbnQzMl90IGlvX2RtYV9jb21tYW5kOworICAgICAgICB2b2xhdGlsZSB1aW50MzJfdCBpb19kbWFfYWRkcmVzczsKKyAgICAgICAgdm9sYXRpbGUgdWludDMyX3QgaW9fZG1hX2NvdW50OworICAgICAgICB2b2xhdGlsZSB1aW50MzJfdCBpb19mbGV4OwkJLyogcmVnIDggKi8KKyAgICAgICAgdm9sYXRpbGUgdWludDMyX3QgaW9fc3BhX2FkZHJlc3M7CisgICAgICAgIHZvbGF0aWxlIHVpbnQzMl90IHJlc2VydmVkMVsyXTsKKyAgICAgICAgdm9sYXRpbGUgdWludDMyX3QgaW9fY29tbWFuZDsJCS8qIHJlZyAxMiAqLworICAgICAgICB2b2xhdGlsZSB1aW50MzJfdCBpb19zdGF0dXM7CisgICAgICAgIHZvbGF0aWxlIHVpbnQzMl90IGlvX2NvbnRyb2w7CisgICAgICAgIHZvbGF0aWxlIHVpbnQzMl90IGlvX2RhdGE7CisgICAgICAgIHZvbGF0aWxlIHVpbnQzMl90IHJlc2VydmVkMjsJCS8qIHJlZyAxNiAqLworICAgICAgICB2b2xhdGlsZSB1aW50MzJfdCBjaGFpbl9hZGRyOworICAgICAgICB2b2xhdGlsZSB1aW50MzJfdCBzdWJfbWFza19jbHI7CisgICAgICAgIHZvbGF0aWxlIHVpbnQzMl90IHJlc2VydmVkM1sxM107CisgICAgICAgIHZvbGF0aWxlIHVpbnQzMl90IHVuZGVmaW5lZFs0ODBdOworICAgICAgICB2b2xhdGlsZSB1aW50MzJfdCB1bnByaXZbNTEyXTsKK307CisKK3N0cnVjdCBiY19tb2R1bGUgeworICAgICAgICB2b2xhdGlsZSB1aW50MzJfdCB1bnVzZWQxWzEyXTsKKyAgICAgICAgdm9sYXRpbGUgdWludDMyX3QgaW9fY29tbWFuZDsKKyAgICAgICAgdm9sYXRpbGUgdWludDMyX3QgaW9fc3RhdHVzOworICAgICAgICB2b2xhdGlsZSB1aW50MzJfdCBpb19jb250cm9sOworICAgICAgICB2b2xhdGlsZSB1aW50MzJfdCB1bnVzZWQyWzFdOworICAgICAgICB2b2xhdGlsZSB1aW50MzJfdCBpb19lcnJfcmVzcDsKKyAgICAgICAgdm9sYXRpbGUgdWludDMyX3QgaW9fZXJyX2luZm87CisgICAgICAgIHZvbGF0aWxlIHVpbnQzMl90IGlvX2Vycl9yZXE7CisgICAgICAgIHZvbGF0aWxlIHVpbnQzMl90IHVudXNlZDNbMTFdOworICAgICAgICB2b2xhdGlsZSB1aW50MzJfdCBpb19pb19sb3c7CisgICAgICAgIHZvbGF0aWxlIHVpbnQzMl90IGlvX2lvX2hpZ2g7Cit9OworCisjZGVmaW5lIEhQSFdfTlBST0MgICAgIDAgCisjZGVmaW5lIEhQSFdfTUVNT1JZICAgIDEgICAgICAgCisjZGVmaW5lIEhQSFdfQl9ETUEgICAgIDIKKyNkZWZpbmUgSFBIV19PQlNPTEVURSAgMworI2RlZmluZSBIUEhXX0FfRE1BICAgICA0CisjZGVmaW5lIEhQSFdfQV9ESVJFQ1QgIDUKKyNkZWZpbmUgSFBIV19PVEhFUiAgICAgNgorI2RlZmluZSBIUEhXX0JDUE9SVCAgICA3CisjZGVmaW5lIEhQSFdfQ0lPICAgICAgIDgKKyNkZWZpbmUgSFBIV19DT05TT0xFICAgOQorI2RlZmluZSBIUEhXX0ZJTyAgICAgICAxMAorI2RlZmluZSBIUEhXX0JBICAgICAgICAxMQorI2RlZmluZSBIUEhXX0lPQSAgICAgICAxMgorI2RlZmluZSBIUEhXX0JSSURHRSAgICAxMworI2RlZmluZSBIUEhXX0ZBQlJJQyAgICAxNAorI2RlZmluZSBIUEhXX01DCSAgICAgICAxNQorI2RlZmluZSBIUEhXX0ZBVUxUWSAgICAzMQorCisKKy8qIGhhcmR3YXJlLmM6ICovCitleHRlcm4gY29uc3QgY2hhciAqcGFyaXNjX2hhcmR3YXJlX2Rlc2NyaXB0aW9uKHN0cnVjdCBwYXJpc2NfZGV2aWNlX2lkICppZCk7CitleHRlcm4gZW51bSBjcHVfdHlwZSBwYXJpc2NfZ2V0X2NwdV90eXBlKHVuc2lnbmVkIGxvbmcgaHZlcnNpb24pOworCitzdHJ1Y3QgcGNpX2RldjsKKworLyogZHJpdmVycy5jOiAqLworZXh0ZXJuIHN0cnVjdCBwYXJpc2NfZGV2aWNlICphbGxvY19wYV9kZXYodW5zaWduZWQgbG9uZyBocGEsCisJCXN0cnVjdCBoYXJkd2FyZV9wYXRoICpwYXRoKTsKK2V4dGVybiBpbnQgcmVnaXN0ZXJfcGFyaXNjX2RldmljZShzdHJ1Y3QgcGFyaXNjX2RldmljZSAqZGV2KTsKK2V4dGVybiBpbnQgcmVnaXN0ZXJfcGFyaXNjX2RyaXZlcihzdHJ1Y3QgcGFyaXNjX2RyaXZlciAqZHJpdmVyKTsKK2V4dGVybiBpbnQgY291bnRfcGFyaXNjX2RyaXZlcihzdHJ1Y3QgcGFyaXNjX2RyaXZlciAqZHJpdmVyKTsKK2V4dGVybiBpbnQgdW5yZWdpc3Rlcl9wYXJpc2NfZHJpdmVyKHN0cnVjdCBwYXJpc2NfZHJpdmVyICpkcml2ZXIpOworZXh0ZXJuIHZvaWQgd2Fsa19jZW50cmFsX2J1cyh2b2lkKTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgcGFyaXNjX2RldmljZSAqZmluZF9wYV9wYXJlbnRfdHlwZShjb25zdCBzdHJ1Y3QgcGFyaXNjX2RldmljZSAqLCBpbnQpOworZXh0ZXJuIHZvaWQgcHJpbnRfcGFyaXNjX2RldmljZXModm9pZCk7CitleHRlcm4gY2hhciAqcHJpbnRfcGFfaHdwYXRoKHN0cnVjdCBwYXJpc2NfZGV2aWNlICpkZXYsIGNoYXIgKnBhdGgpOworZXh0ZXJuIGNoYXIgKnByaW50X3BjaV9od3BhdGgoc3RydWN0IHBjaV9kZXYgKmRldiwgY2hhciAqcGF0aCk7CitleHRlcm4gdm9pZCBnZXRfcGNpX25vZGVfcGF0aChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgaGFyZHdhcmVfcGF0aCAqcGF0aCk7CitleHRlcm4gdm9pZCBpbml0X3BhcmlzY19idXModm9pZCk7CitleHRlcm4gc3RydWN0IGRldmljZSAqaHdwYXRoX3RvX2RldmljZShzdHJ1Y3QgaGFyZHdhcmVfcGF0aCAqbW9kcGF0aCk7CitleHRlcm4gdm9pZCBkZXZpY2VfdG9faHdwYXRoKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGhhcmR3YXJlX3BhdGggKnBhdGgpOworCisKKy8qIGludmVudG9yeS5jOiAqLworZXh0ZXJuIHZvaWQgZG9fbWVtb3J5X2ludmVudG9yeSh2b2lkKTsKK2V4dGVybiB2b2lkIGRvX2RldmljZV9pbnZlbnRvcnkodm9pZCk7CisKKyNlbmRpZiAvKiBfUEFSSVNDX0hBUkRXQVJFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9oZHJlZy5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL2hkcmVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y3ZmQxYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9oZHJlZy5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9oZHJlZy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL2h3X2lycS5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL2h3X2lycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1MTQyNmUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2MvaHdfaXJxLmgKQEAgLTAsMCArMSwxNyBAQAorI2lmbmRlZiBfQVNNX0hXX0lSUV9ICisjZGVmaW5lIF9BU01fSFdfSVJRX0gKKworLyoKKyAqCWxpbnV4L2luY2x1ZGUvYXNtL2h3X2lycS5oCisgKgorICoJKEMpIDE5OTIsIDE5OTMgTGludXMgVG9ydmFsZHMsIChDKSAxOTk3IEluZ28gTW9sbmFyCisgKgorICoJbW92ZWQgc29tZSBvZiB0aGUgb2xkIGFyY2gvaTM4Ni9rZXJuZWwvaXJxLmggdG8gaGVyZS4gVlkKKyAqCisgKglJUlEvSVBJIGNoYW5nZXMgdGFrZW4gZnJvbSB3b3JrIGJ5IFRob21hcyBSYWRrZQorICoJPHRvbXNvZnRAaW5mb3JtYXRpay50dS1jaGVtbml0ei5kZT4KKyAqLworCitleHRlcm4gdm9pZCBod19yZXNlbmRfaXJxKHN0cnVjdCBod19pbnRlcnJ1cHRfdHlwZSAqLCB1bnNpZ25lZCBpbnQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9pZGUuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9pZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjQzY2YyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL2lkZS5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tcGFyaXNjL2lkZS5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NC0xOTk2ICBMaW51cyBUb3J2YWxkcyAmIGF1dGhvcnMKKyAqLworCisvKgorICogIFRoaXMgZmlsZSBjb250YWlucyB0aGUgUEFSSVNDIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBJREUgY29kZS4KKyAqLworCisjaWZuZGVmIF9fQVNNX1BBUklTQ19JREVfSAorI2RlZmluZSBfX0FTTV9QQVJJU0NfSURFX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2lmbmRlZiBNQVhfSFdJRlMKKyNkZWZpbmUgTUFYX0hXSUZTCTIKKyNlbmRpZgorCisjZGVmaW5lIElERV9BUkNIX09CU09MRVRFX0lOSVQKKyNkZWZpbmUgaWRlX2RlZmF1bHRfaW9fY3RsKGJhc2UpCSgoYmFzZSkgKyAweDIwNikgLyogb2Jzb2xldGUgKi8KKworI2RlZmluZSBpZGVfcmVxdWVzdF9pcnEoaXJxLGhhbmQsZmxnLGRldixpZCkJcmVxdWVzdF9pcnEoKGlycSksKGhhbmQpLChmbGcpLChkZXYpLChpZCkpCisjZGVmaW5lIGlkZV9mcmVlX2lycShpcnEsZGV2X2lkKQkJZnJlZV9pcnEoKGlycSksIChkZXZfaWQpKQorI2RlZmluZSBpZGVfY2hlY2tfcmVnaW9uKGZyb20sZXh0ZW50KQkJY2hlY2tfcmVnaW9uKChmcm9tKSwgKGV4dGVudCkpCisjZGVmaW5lIGlkZV9yZXF1ZXN0X3JlZ2lvbihmcm9tLGV4dGVudCxuYW1lKQlyZXF1ZXN0X3JlZ2lvbigoZnJvbSksIChleHRlbnQpLCAobmFtZSkpCisjZGVmaW5lIGlkZV9yZWxlYXNlX3JlZ2lvbihmcm9tLGV4dGVudCkJCXJlbGVhc2VfcmVnaW9uKChmcm9tKSwgKGV4dGVudCkpCisvKiBHZW5lcmljIEkvTyBhbmQgTUVNSU8gc3RyaW5nIG9wZXJhdGlvbnMuICAqLworCisjZGVmaW5lIF9faWRlX2luc3cJaW5zdworI2RlZmluZSBfX2lkZV9pbnNsCWluc2wKKyNkZWZpbmUgX19pZGVfb3V0c3cJb3V0c3cKKyNkZWZpbmUgX19pZGVfb3V0c2wJb3V0c2wKKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX2lkZV9tbV9pbnN3KHZvaWQgX19pb21lbSAqcG9ydCwgdm9pZCAqYWRkciwgdTMyIGNvdW50KQoreworCXdoaWxlIChjb3VudC0tKSB7CisJCSoodTE2ICopYWRkciA9IF9fcmF3X3JlYWR3KHBvcnQpOworCQlhZGRyICs9IDI7CisJfQorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9faWRlX21tX2luc2wodm9pZCBfX2lvbWVtICpwb3J0LCB2b2lkICphZGRyLCB1MzIgY291bnQpCit7CisJd2hpbGUgKGNvdW50LS0pIHsKKwkJKih1MzIgKilhZGRyID0gX19yYXdfcmVhZGwocG9ydCk7CisJCWFkZHIgKz0gNDsKKwl9Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19pZGVfbW1fb3V0c3codm9pZCBfX2lvbWVtICpwb3J0LCB2b2lkICphZGRyLCB1MzIgY291bnQpCit7CisJd2hpbGUgKGNvdW50LS0pIHsKKwkJX19yYXdfd3JpdGV3KCoodTE2ICopYWRkciwgcG9ydCk7CisJCWFkZHIgKz0gMjsKKwl9Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19pZGVfbW1fb3V0c2wodm9pZCBfX2lvbWVtICpwb3J0LCB2b2lkICphZGRyLCB1MzIgY291bnQpCit7CisJd2hpbGUgKGNvdW50LS0pIHsKKwkJX19yYXdfd3JpdGVsKCoodTMyICopYWRkciwgcG9ydCk7CisJCWFkZHIgKz0gNDsKKwl9Cit9CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfX0FTTV9QQVJJU0NfSURFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9pby5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL2lvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjliYjU5NAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9pby5oCkBAIC0wLDAgKzEsNDE4IEBACisjaWZuZGVmIF9BU01fSU9fSAorI2RlZmluZSBfQVNNX0lPX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGFyaXNjX3ZtZXJnZV9ib3VuZGFyeTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHBhcmlzY192bWVyZ2VfbWF4X3NpemU7CisKKyNkZWZpbmUgQklPX1ZNRVJHRV9CT1VOREFSWQlwYXJpc2Nfdm1lcmdlX2JvdW5kYXJ5CisjZGVmaW5lIEJJT19WTUVSR0VfTUFYX1NJWkUJcGFyaXNjX3ZtZXJnZV9tYXhfc2l6ZQorCisjZGVmaW5lIHZpcnRfdG9fcGh5cyhhKSAoKHVuc2lnbmVkIGxvbmcpX19wYShhKSkKKyNkZWZpbmUgcGh5c190b192aXJ0KGEpIF9fdmEoYSkKKyNkZWZpbmUgdmlydF90b19idXMgdmlydF90b19waHlzCisjZGVmaW5lIGJ1c190b192aXJ0IHBoeXNfdG9fdmlydAorCisvKgorICogTWVtb3J5IG1hcHBlZCBJL08KKyAqCisgKiByZWFkWCgpL3dyaXRlWCgpIGRvIGJ5dGVzd2FwcGluZyBhbmQgdGFrZSBhbiBpb3JlbWFwcGVkIGFkZHJlc3MKKyAqIF9fcmF3X3JlYWRYKCkvX19yYXdfd3JpdGVYKCkgZG9uJ3QgYnl0ZXN3YXAgYW5kIHRha2UgYW4gaW9yZW1hcHBlZCBhZGRyZXNzLgorICogZ3NjXyooKSBkb24ndCBieXRlc3dhcCBhbmQgb3BlcmF0ZSBvbiBwaHlzaWNhbCBhZGRyZXNzZXM7CisgKiAgIGVnIGRldi0+aHBhIG9yIDB4ZmVlMDAwMDAuCisgKi8KKworI2lmZGVmIENPTkZJR19ERUJVR19JT1JFTUFQCisjaWZkZWYgQ09ORklHXzY0QklUCisjZGVmaW5lIE5ZQkJMRV9TSElGVCA2MAorI2Vsc2UKKyNkZWZpbmUgTllCQkxFX1NISUZUIDI4CisjZW5kaWYKK2V4dGVybiB2b2lkIGdzY19iYWRfYWRkcih1bnNpZ25lZCBsb25nIGFkZHIpOworZXh0ZXJuIHZvaWQgX19yYXdfYmFkX2FkZHIoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKTsKKyNkZWZpbmUgZ3NjX2NoZWNrX2FkZHIoYWRkcikJCQkJCVwKKwlpZiAoKGFkZHIgPj4gTllCQkxFX1NISUZUKSAhPSAweGYpIHsJCQlcCisJCWdzY19iYWRfYWRkcihhZGRyKTsJCQkJXAorCQlhZGRyIHw9IDB4ZlVMIDw8IE5ZQkJMRV9TSElGVDsJCQlcCisJfQorI2RlZmluZSBfX3Jhd19jaGVja19hZGRyKGFkZHIpCQkJCQlcCisJaWYgKCgodW5zaWduZWQgbG9uZylhZGRyID4+IE5ZQkJMRV9TSElGVCkgIT0gMHhlKQlcCisJCV9fcmF3X2JhZF9hZGRyKGFkZHIpOwkJCVwKKwlhZGRyID0gKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpYWRkciB8ICgweGZVTCA8PCBOWUJCTEVfU0hJRlQpKTsKKyNlbHNlCisjZGVmaW5lIGdzY19jaGVja19hZGRyKGFkZHIpCisjZGVmaW5lIF9fcmF3X2NoZWNrX2FkZHIoYWRkcikKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgZ3NjX3JlYWRiKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlsb25nIGZsYWdzOworCXVuc2lnbmVkIGNoYXIgcmV0OworCisJZ3NjX2NoZWNrX2FkZHIoYWRkcik7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkiCXJzbQkyLCUwXG4iCisJIglsZGJ4CTAoJTIpLCUxXG4iCisJIgltdHNtCSUwXG4iCisJOiAiPSZyIiAoZmxhZ3MpLCAiPXIiIChyZXQpIDogInIiIChhZGRyKSApOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBnc2NfcmVhZHcodW5zaWduZWQgbG9uZyBhZGRyKQoreworCWxvbmcgZmxhZ3M7CisJdW5zaWduZWQgc2hvcnQgcmV0OworCisJZ3NjX2NoZWNrX2FkZHIoYWRkcik7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkiCXJzbQkyLCUwXG4iCisJIglsZGh4CTAoJTIpLCUxXG4iCisJIgltdHNtCSUwXG4iCisJOiAiPSZyIiAoZmxhZ3MpLCAiPXIiIChyZXQpIDogInIiIChhZGRyKSApOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ3NjX3JlYWRsKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwl1MzIgcmV0OworCisJZ3NjX2NoZWNrX2FkZHIoYWRkcik7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkiCWxkd2F4CTAoJTEpLCUwXG4iCisJOiAiPXIiIChyZXQpIDogInIiIChhZGRyKSApOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgZ3NjX3JlYWRxKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgcmV0OworCWdzY19jaGVja19hZGRyKGFkZHIpOworCisjaWZkZWYgX19MUDY0X18KKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkiCWxkZGEJMCglMSksJTBcbiIKKwk6ICAiPXIiIChyZXQpIDogInIiIChhZGRyKSApOworI2Vsc2UKKwkvKiB0d28gcmVhZHMgbWF5IGhhdmUgc2lkZSBlZmZlY3RzLi4gKi8KKwlyZXQgPSAoKHU2NCkgZ3NjX3JlYWRsKGFkZHIpKSA8PCAzMjsKKwlyZXQgfD0gZ3NjX3JlYWRsKGFkZHIrNCk7CisjZW5kaWYKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ3NjX3dyaXRlYih1bnNpZ25lZCBjaGFyIHZhbCwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCWxvbmcgZmxhZ3M7CisJZ3NjX2NoZWNrX2FkZHIoYWRkcik7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkiCXJzbQkyLCUwXG4iCisJIglzdGJzCSUxLDAoJTIpXG4iCisJIgltdHNtCSUwXG4iCisJOiAiPSZyIiAoZmxhZ3MpIDogICJyIiAodmFsKSwgInIiIChhZGRyKSApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ3NjX3dyaXRldyh1bnNpZ25lZCBzaG9ydCB2YWwsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlsb25nIGZsYWdzOworCWdzY19jaGVja19hZGRyKGFkZHIpOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJIglyc20JMiwlMFxuIgorCSIJc3RocwklMSwwKCUyKVxuIgorCSIJbXRzbQklMFxuIgorCTogIj0mciIgKGZsYWdzKSA6ICAiciIgKHZhbCksICJyIiAoYWRkcikgKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGdzY193cml0ZWwodW5zaWduZWQgaW50IHZhbCwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCWdzY19jaGVja19hZGRyKGFkZHIpOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJIglzdHdhcwklMCwwKCUxKVxuIgorCTogOiAgInIiICh2YWwpLCAiciIgKGFkZHIpICk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBnc2Nfd3JpdGVxKHVuc2lnbmVkIGxvbmcgbG9uZyB2YWwsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlnc2NfY2hlY2tfYWRkcihhZGRyKTsKKworI2lmZGVmIF9fTFA2NF9fCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJIglzdGRhCSUwLDAoJTEpXG4iCisJOiA6ICAiciIgKHZhbCksICJyIiAoYWRkcikgKTsKKyNlbHNlCisJLyogdHdvIHdyaXRlcyBtYXkgaGF2ZSBzaWRlIGVmZmVjdHMuLiAqLworCWdzY193cml0ZWwodmFsID4+IDMyLCBhZGRyKTsKKwlnc2Nfd3JpdGVsKHZhbCwgYWRkcis0KTsKKyNlbmRpZgorfQorCisvKgorICogVGhlIHN0YW5kYXJkIFBDSSBpb3JlbWFwIGludGVyZmFjZXMKKyAqLworCitleHRlcm4gdm9pZCBfX2lvbWVtICogX19pb3JlbWFwKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOworCitleHRlcm4gaW5saW5lIHZvaWQgX19pb21lbSAqIGlvcmVtYXAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlyZXR1cm4gX19pb3JlbWFwKG9mZnNldCwgc2l6ZSwgMCk7Cit9CisKKy8qCisgKiBUaGlzIG9uZSBtYXBzIGhpZ2ggYWRkcmVzcyBkZXZpY2UgbWVtb3J5IGFuZCB0dXJucyBvZmYgY2FjaGluZyBmb3IgdGhhdCBhcmVhLgorICogaXQncyB1c2VmdWwgaWYgc29tZSBjb250cm9sIHJlZ2lzdGVycyBhcmUgaW4gc3VjaCBhbiBhcmVhIGFuZCB3cml0ZSBjb21iaW5pbmcKKyAqIG9yIHJlYWQgY2FjaGluZyBpcyBub3QgZGVzaXJhYmxlOgorICovCitleHRlcm4gaW5saW5lIHZvaWQgKiBpb3JlbWFwX25vY2FjaGUodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKyAgICAgICAgcmV0dXJuIF9faW9yZW1hcChvZmZzZXQsIHNpemUsIF9QQUdFX05PX0NBQ0hFIC8qIF9QQUdFX1BDRCAqLyk7Cit9CisKK2V4dGVybiB2b2lkIGlvdW5tYXAodm9pZCBfX2lvbWVtICphZGRyKTsKKworLyoKKyAqIFVTRV9IUFBBX0lPUkVNQVAgaXMgdGhlIG1hZ2ljIGZsYWcgdG8gZW5hYmxlIG9yIGRpc2FibGUgcmVhbCBpb3JlbWFwKCkKKyAqIGZ1bmN0aW9uYWxpdHkuICBJdCdzIGN1cnJlbnRseSBkaXNhYmxlZCBiZWNhdXNlIGl0IG1heSBub3Qgd29yayBvbiBzb21lCisgKiBtYWNoaW5lcy4KKyAqLworI2RlZmluZSBVU0VfSFBQQV9JT1JFTUFQIDAKKworI2lmIFVTRV9IUFBBX0lPUkVNQVAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciBfX3Jhd19yZWFkYihjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJcmV0dXJuICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgX19mb3JjZSAqKSAoYWRkcikpOworfQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBfX3Jhd19yZWFkdyhjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJcmV0dXJuICoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgX19mb3JjZSAqKSBhZGRyOworfQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgX19yYXdfcmVhZGwoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCXJldHVybiAqKHZvbGF0aWxlIHVuc2lnbmVkIGludCBfX2ZvcmNlICopIGFkZHI7Cit9CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3Jhd19yZWFkcShjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJcmV0dXJuICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyBsb25nIF9fZm9yY2UgKikgYWRkcjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3dyaXRlYih1bnNpZ25lZCBjaGFyIGIsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwkqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgX19mb3JjZSAqKSBhZGRyID0gYjsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd193cml0ZXcodW5zaWduZWQgc2hvcnQgYiwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCSoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgX19mb3JjZSAqKSBhZGRyID0gYjsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd193cml0ZWwodW5zaWduZWQgaW50IGIsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwkqKHZvbGF0aWxlIHVuc2lnbmVkIGludCBfX2ZvcmNlICopIGFkZHIgPSBiOworfQorc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3dyaXRlcSh1bnNpZ25lZCBsb25nIGxvbmcgYiwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCSoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyBsb25nIF9fZm9yY2UgKikgYWRkciA9IGI7Cit9CisjZWxzZSAvKiAhVVNFX0hQUEFfSU9SRU1BUCAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIF9fcmF3X3JlYWRiKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlfX3Jhd19jaGVja19hZGRyKGFkZHIpOworCisJcmV0dXJuIGdzY19yZWFkYigodW5zaWduZWQgbG9uZykgYWRkcik7Cit9CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IF9fcmF3X3JlYWR3KGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlfX3Jhd19jaGVja19hZGRyKGFkZHIpOworCisJcmV0dXJuIGdzY19yZWFkdygodW5zaWduZWQgbG9uZykgYWRkcik7Cit9CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBfX3Jhd19yZWFkbChjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJX19yYXdfY2hlY2tfYWRkcihhZGRyKTsKKworCXJldHVybiBnc2NfcmVhZGwoKHVuc2lnbmVkIGxvbmcpIGFkZHIpOworfQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgX19yYXdfcmVhZHEoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCV9fcmF3X2NoZWNrX2FkZHIoYWRkcik7CisKKwlyZXR1cm4gZ3NjX3JlYWRxKCh1bnNpZ25lZCBsb25nKSBhZGRyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3dyaXRlYih1bnNpZ25lZCBjaGFyIGIsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlfX3Jhd19jaGVja19hZGRyKGFkZHIpOworCisJZ3NjX3dyaXRlYihiLCAodW5zaWduZWQgbG9uZykgYWRkcik7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfd3JpdGV3KHVuc2lnbmVkIHNob3J0IGIsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlfX3Jhd19jaGVja19hZGRyKGFkZHIpOworCisJZ3NjX3dyaXRldyhiLCAodW5zaWduZWQgbG9uZykgYWRkcik7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfd3JpdGVsKHVuc2lnbmVkIGludCBiLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJX19yYXdfY2hlY2tfYWRkcihhZGRyKTsKKworCWdzY193cml0ZWwoYiwgKHVuc2lnbmVkIGxvbmcpIGFkZHIpOworfQorc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3dyaXRlcSh1bnNpZ25lZCBsb25nIGxvbmcgYiwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCV9fcmF3X2NoZWNrX2FkZHIoYWRkcik7CisKKwlnc2Nfd3JpdGVxKGIsICh1bnNpZ25lZCBsb25nKSBhZGRyKTsKK30KKyNlbmRpZiAvKiAhVVNFX0hQUEFfSU9SRU1BUCAqLworCisvKiByZWFkYiBjYW4gbmV2ZXIgYmUgY29uc3QsIHNvIHVzZSBfX2Zzd2FiIGluc3RlYWQgb2YgbGUqX3RvX2NwdSAqLworI2RlZmluZSByZWFkYihhZGRyKSBfX3Jhd19yZWFkYihhZGRyKQorI2RlZmluZSByZWFkdyhhZGRyKSBfX2Zzd2FiMTYoX19yYXdfcmVhZHcoYWRkcikpCisjZGVmaW5lIHJlYWRsKGFkZHIpIF9fZnN3YWIzMihfX3Jhd19yZWFkbChhZGRyKSkKKyNkZWZpbmUgcmVhZHEoYWRkcikgX19mc3dhYjY0KF9fcmF3X3JlYWRxKGFkZHIpKQorI2RlZmluZSB3cml0ZWIoYiwgYWRkcikgX19yYXdfd3JpdGViKGIsIGFkZHIpCisjZGVmaW5lIHdyaXRldyhiLCBhZGRyKSBfX3Jhd193cml0ZXcoY3B1X3RvX2xlMTYoYiksIGFkZHIpCisjZGVmaW5lIHdyaXRlbChiLCBhZGRyKSBfX3Jhd193cml0ZWwoY3B1X3RvX2xlMzIoYiksIGFkZHIpCisjZGVmaW5lIHdyaXRlcShiLCBhZGRyKSBfX3Jhd193cml0ZXEoY3B1X3RvX2xlNjQoYiksIGFkZHIpCisKKyNkZWZpbmUgcmVhZGJfcmVsYXhlZChhZGRyKSByZWFkYihhZGRyKQorI2RlZmluZSByZWFkd19yZWxheGVkKGFkZHIpIHJlYWR3KGFkZHIpCisjZGVmaW5lIHJlYWRsX3JlbGF4ZWQoYWRkcikgcmVhZGwoYWRkcikKKyNkZWZpbmUgcmVhZHFfcmVsYXhlZChhZGRyKSByZWFkcShhZGRyKQorCisjZGVmaW5lIG1taW93YigpIGRvIHsgfSB3aGlsZSAoMCkKKwordm9pZCBtZW1zZXRfaW8odm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyLCB1bnNpZ25lZCBjaGFyIHZhbCwgaW50IGNvdW50KTsKK3ZvaWQgbWVtY3B5X2Zyb21pbyh2b2lkICpkc3QsIGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqc3JjLCBpbnQgY291bnQpOwordm9pZCBtZW1jcHlfdG9pbyh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBpbnQgY291bnQpOworCisvKiBTdXBwb3J0IG9sZCBkcml2ZXJzIHdoaWNoIGRvbid0IGlvcmVtYXAuCisgKiBOQiB0aGlzIGludGVyZmFjZSBpcyBzY2hlZHVsZWQgdG8gZGlzYXBwZWFyIGluIDIuNQorICovCisKKyNkZWZpbmUgX19pc2FfYWRkcih4KSAodm9pZCBfX2lvbWVtICopKEZfRVhURU5EKDB4ZmMwMDAwMDApIHwgKHgpKQorI2RlZmluZSBpc2FfcmVhZGIoYSkgcmVhZGIoX19pc2FfYWRkcihhKSkKKyNkZWZpbmUgaXNhX3JlYWR3KGEpIHJlYWR3KF9faXNhX2FkZHIoYSkpCisjZGVmaW5lIGlzYV9yZWFkbChhKSByZWFkbChfX2lzYV9hZGRyKGEpKQorI2RlZmluZSBpc2Ffd3JpdGViKGIsYSkgd3JpdGViKChiKSwgX19pc2FfYWRkcihhKSkKKyNkZWZpbmUgaXNhX3dyaXRldyhiLGEpIHdyaXRldygoYiksIF9faXNhX2FkZHIoYSkpCisjZGVmaW5lIGlzYV93cml0ZWwoYixhKSB3cml0ZWwoKGIpLCBfX2lzYV9hZGRyKGEpKQorI2RlZmluZSBpc2FfbWVtc2V0X2lvKGEsYixjKSBtZW1zZXRfaW8oX19pc2FfYWRkcihhKSwgKGIpLCAoYykpCisjZGVmaW5lIGlzYV9tZW1jcHlfZnJvbWlvKGEsYixjKSBtZW1jcHlfZnJvbWlvKChhKSwgX19pc2FfYWRkcihiKSwgKGMpKQorI2RlZmluZSBpc2FfbWVtY3B5X3RvaW8oYSxiLGMpIG1lbWNweV90b2lvKF9faXNhX2FkZHIoYSksIChiKSwgKGMpKQorCisKKy8qCisgKiBYWFggLSBXZSBkb24ndCBoYXZlIGNzdW1fcGFydGlhbF9jb3B5X2Zyb21pbygpIHlldCwgc28gd2UgY2hlYXQgaGVyZSBhbmQgCisgKiBqdXN0IGNvcHkgaXQuIFRoZSBuZXQgY29kZSB3aWxsIHRoZW4gZG8gdGhlIGNoZWNrc3VtIGxhdGVyLiBQcmVzZW50bHkgCisgKiBvbmx5IHVzZWQgYnkgc29tZSBzaGFyZWQgbWVtb3J5IDgzOTAgRXRoZXJuZXQgY2FyZHMgYW55d2F5LgorICovCisKKyNkZWZpbmUgZXRoX2lvX2NvcHlfYW5kX3N1bShza2Isc3JjLGxlbix1bnVzZWQpIFwKKyAgbWVtY3B5X2Zyb21pbygoc2tiKS0+ZGF0YSwoc3JjKSwobGVuKSkKKyNkZWZpbmUgaXNhX2V0aF9pb19jb3B5X2FuZF9zdW0oc2tiLHNyYyxsZW4sdW51c2VkKSBcCisgIGlzYV9tZW1jcHlfZnJvbWlvKChza2IpLT5kYXRhLChzcmMpLChsZW4pKQorCisvKiBQb3J0LXNwYWNlIElPICovCisKKyNkZWZpbmUgaW5iX3AgaW5iCisjZGVmaW5lIGlud19wIGludworI2RlZmluZSBpbmxfcCBpbmwKKyNkZWZpbmUgb3V0Yl9wIG91dGIKKyNkZWZpbmUgb3V0d19wIG91dHcKKyNkZWZpbmUgb3V0bF9wIG91dGwKKworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgZWlzYV9pbjgodW5zaWduZWQgc2hvcnQgcG9ydCk7CitleHRlcm4gdW5zaWduZWQgc2hvcnQgZWlzYV9pbjE2KHVuc2lnbmVkIHNob3J0IHBvcnQpOworZXh0ZXJuIHVuc2lnbmVkIGludCBlaXNhX2luMzIodW5zaWduZWQgc2hvcnQgcG9ydCk7CitleHRlcm4gdm9pZCBlaXNhX291dDgodW5zaWduZWQgY2hhciBkYXRhLCB1bnNpZ25lZCBzaG9ydCBwb3J0KTsKK2V4dGVybiB2b2lkIGVpc2Ffb3V0MTYodW5zaWduZWQgc2hvcnQgZGF0YSwgdW5zaWduZWQgc2hvcnQgcG9ydCk7CitleHRlcm4gdm9pZCBlaXNhX291dDMyKHVuc2lnbmVkIGludCBkYXRhLCB1bnNpZ25lZCBzaG9ydCBwb3J0KTsKKworI2lmIGRlZmluZWQoQ09ORklHX1BDSSkKK2V4dGVybiB1bnNpZ25lZCBjaGFyIGluYihpbnQgYWRkcik7CitleHRlcm4gdW5zaWduZWQgc2hvcnQgaW53KGludCBhZGRyKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgaW5sKGludCBhZGRyKTsKKworZXh0ZXJuIHZvaWQgb3V0Yih1bnNpZ25lZCBjaGFyIGIsIGludCBhZGRyKTsKK2V4dGVybiB2b2lkIG91dHcodW5zaWduZWQgc2hvcnQgYiwgaW50IGFkZHIpOworZXh0ZXJuIHZvaWQgb3V0bCh1bnNpZ25lZCBpbnQgYiwgaW50IGFkZHIpOworI2VsaWYgZGVmaW5lZChDT05GSUdfRUlTQSkKKyNkZWZpbmUgaW5iIGVpc2FfaW44CisjZGVmaW5lIGludyBlaXNhX2luMTYKKyNkZWZpbmUgaW5sIGVpc2FfaW4zMgorI2RlZmluZSBvdXRiIGVpc2Ffb3V0OAorI2RlZmluZSBvdXR3IGVpc2Ffb3V0MTYKKyNkZWZpbmUgb3V0bCBlaXNhX291dDMyCisjZWxzZQorc3RhdGljIGlubGluZSBjaGFyIGluYih1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJQlVHKCk7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW5saW5lIHNob3J0IGludyh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJQlVHKCk7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW5saW5lIGludCBpbmwodW5zaWduZWQgbG9uZyBhZGRyKQoreworCUJVRygpOworCXJldHVybiAtMTsKK30KKworI2RlZmluZSBvdXRiKHgsIHkpCUJVRygpCisjZGVmaW5lIG91dHcoeCwgeSkJQlVHKCkKKyNkZWZpbmUgb3V0bCh4LCB5KQlCVUcoKQorI2VuZGlmCisKKy8qCisgKiBTdHJpbmcgdmVyc2lvbnMgb2YgaW4vb3V0IG9wczoKKyAqLworZXh0ZXJuIHZvaWQgaW5zYiAodW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICpkc3QsIHVuc2lnbmVkIGxvbmcgY291bnQpOworZXh0ZXJuIHZvaWQgaW5zdyAodW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICpkc3QsIHVuc2lnbmVkIGxvbmcgY291bnQpOworZXh0ZXJuIHZvaWQgaW5zbCAodW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICpkc3QsIHVuc2lnbmVkIGxvbmcgY291bnQpOworZXh0ZXJuIHZvaWQgb3V0c2IgKHVuc2lnbmVkIGxvbmcgcG9ydCwgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKK2V4dGVybiB2b2lkIG91dHN3ICh1bnNpZ25lZCBsb25nIHBvcnQsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgbG9uZyBjb3VudCk7CitleHRlcm4gdm9pZCBvdXRzbCAodW5zaWduZWQgbG9uZyBwb3J0LCBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGxvbmcgY291bnQpOworCisKKy8qIElPIFBvcnQgc3BhY2UgaXMgOiAgICAgIEJCaWlpaSAgIHdoZXJlIEJCIGlzIEhCQSBudW1iZXIuICovCisjZGVmaW5lIElPX1NQQUNFX0xJTUlUIDB4MDBmZmZmZmYKKworCisjZGVmaW5lIGRtYV9jYWNoZV9pbnYoX3N0YXJ0LF9zaXplKQkJZG8geyBmbHVzaF9rZXJuZWxfZGNhY2hlX3JhbmdlKF9zdGFydCxfc2l6ZSk7IH0gd2hpbGUgKDApCisjZGVmaW5lIGRtYV9jYWNoZV93YmFjayhfc3RhcnQsX3NpemUpCQlkbyB7IGZsdXNoX2tlcm5lbF9kY2FjaGVfcmFuZ2UoX3N0YXJ0LF9zaXplKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZG1hX2NhY2hlX3diYWNrX2ludihfc3RhcnQsX3NpemUpCWRvIHsgZmx1c2hfa2VybmVsX2RjYWNoZV9yYW5nZShfc3RhcnQsX3NpemUpOyB9IHdoaWxlICgwKQorCisvKiBQQSBtYWNoaW5lcyBoYXZlIGFuIE1NIEkvTyBzcGFjZSBmcm9tIDB4ZjAwMDAwMDAtMHhmZmZmZmZmZiBpbiAzMgorICogYml0IG1vZGUgYW5kIGZyb20gMHhmZmZmZmZmZmYwMDAwMDAwLTB4ZmZmZmZmZmZmZmZmZmZmIGluIDY0IGJpdAorICogbW9kZSAoZXNzZW50aWFsbHkganVzdCBzaWduIGV4dGVuZGluZy4gIFRoaXMgbWFjcm8gdGFrZXMgaW4gYSAzMgorICogYml0IEkvTyBhZGRyZXNzIChzdGlsbCB3aXRoIHRoZSBsZWFkaW5nIGYpIGFuZCBvdXRwdXRzIHRoZSBjb3JyZWN0CisgKiB2YWx1ZSBmb3IgZWl0aGVyIDMyIG9yIDY0IGJpdCBtb2RlICovCisjZGVmaW5lIEZfRVhURU5EKHgpICgodW5zaWduZWQgbG9uZykoKHgpIHwgKDB4ZmZmZmZmZmYwMDAwMDAwMFVMTCkpKQorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvaW9tYXAuaD4KKworLyoKKyAqIENvbnZlcnQgYSBwaHlzaWNhbCBwb2ludGVyIHRvIGEgdmlydHVhbCBrZXJuZWwgcG9pbnRlciBmb3IgL2Rldi9tZW0KKyAqIGFjY2VzcworICovCisjZGVmaW5lIHhsYXRlX2Rldl9tZW1fcHRyKHApCV9fdmEocCkKKworLyoKKyAqIENvbnZlcnQgYSB2aXJ0dWFsIGNhY2hlZCBwb2ludGVyIHRvIGFuIHVuY2FjaGVkIHBvaW50ZXIKKyAqLworI2RlZmluZSB4bGF0ZV9kZXZfa21lbV9wdHIocCkJcAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9pb2N0bC5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL2lvY3RsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgzMzhkMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9pb2N0bC5oCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiAgICBMaW51eC9QQS1SSVNDIFByb2plY3QgKGh0dHA6Ly93d3cucGFyaXNjLWxpbnV4Lm9yZy8pCisgKiAgICBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMyBNYXR0aGV3IFdpbGNveCA8IHdpbGx5IGF0IGRlYmlhbiAuIG9yZyA+CisgKiAgICBwb3J0aW9ucyBmcm9tICJsaW51eC9pb2N0bC5oIGZvciBMaW51eCIgYnkgSC5ILiBCZXJnbWFuLgorICoKKyAqICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisKKyNpZm5kZWYgX0FTTV9QQVJJU0NfSU9DVExfSAorI2RlZmluZSBfQVNNX1BBUklTQ19JT0NUTF9ICisKKy8qIGlvY3RsIGNvbW1hbmQgZW5jb2Rpbmc6IDMyIGJpdHMgdG90YWwsIGNvbW1hbmQgaW4gbG93ZXIgMTYgYml0cywKKyAqIHNpemUgb2YgdGhlIHBhcmFtZXRlciBzdHJ1Y3R1cmUgaW4gdGhlIGxvd2VyIDE0IGJpdHMgb2YgdGhlCisgKiB1cHBlciAxNiBiaXRzLgorICogRW5jb2RpbmcgdGhlIHNpemUgb2YgdGhlIHBhcmFtZXRlciBzdHJ1Y3R1cmUgaW4gdGhlIGlvY3RsIHJlcXVlc3QKKyAqIGlzIHVzZWZ1bCBmb3IgY2F0Y2hpbmcgcHJvZ3JhbXMgY29tcGlsZWQgd2l0aCBvbGQgdmVyc2lvbnMKKyAqIGFuZCB0byBhdm9pZCBvdmVyd3JpdGluZyB1c2VyIHNwYWNlIG91dHNpZGUgdGhlIHVzZXIgYnVmZmVyIGFyZWEuCisgKiBUaGUgaGlnaGVzdCAyIGJpdHMgYXJlIHJlc2VydmVkIGZvciBpbmRpY2F0aW5nIHRoZSBgYGFjY2VzcyBtb2RlJycuCisgKiBOT1RFOiBUaGlzIGxpbWl0cyB0aGUgbWF4IHBhcmFtZXRlciBzaXplIHRvIDE2a0IgLTEgIQorICovCisKKyNkZWZpbmUgX0lPQ19OUkJJVFMJOAorI2RlZmluZSBfSU9DX1RZUEVCSVRTCTgKKyNkZWZpbmUgX0lPQ19TSVpFQklUUwkxNAorI2RlZmluZSBfSU9DX0RJUkJJVFMJMgorCisjZGVmaW5lIF9JT0NfTlJNQVNLCSgoMSA8PCBfSU9DX05SQklUUyktMSkKKyNkZWZpbmUgX0lPQ19UWVBFTUFTSwkoKDEgPDwgX0lPQ19UWVBFQklUUyktMSkKKyNkZWZpbmUgX0lPQ19TSVpFTUFTSwkoKDEgPDwgX0lPQ19TSVpFQklUUyktMSkKKyNkZWZpbmUgX0lPQ19ESVJNQVNLCSgoMSA8PCBfSU9DX0RJUkJJVFMpLTEpCisKKyNkZWZpbmUgX0lPQ19OUlNISUZUCTAKKyNkZWZpbmUgX0lPQ19UWVBFU0hJRlQJKF9JT0NfTlJTSElGVCtfSU9DX05SQklUUykKKyNkZWZpbmUgX0lPQ19TSVpFU0hJRlQJKF9JT0NfVFlQRVNISUZUK19JT0NfVFlQRUJJVFMpCisjZGVmaW5lIF9JT0NfRElSU0hJRlQJKF9JT0NfU0laRVNISUZUK19JT0NfU0laRUJJVFMpCisKKy8qCisgKiBEaXJlY3Rpb24gYml0cy4KKyAqLworI2RlZmluZSBfSU9DX05PTkUJMFUKKyNkZWZpbmUgX0lPQ19XUklURQkyVQorI2RlZmluZSBfSU9DX1JFQUQJMVUKKworI2RlZmluZSBfSU9DKGRpcix0eXBlLG5yLHNpemUpIFwKKwkoKChkaXIpICA8PCBfSU9DX0RJUlNISUZUKSB8IFwKKwkgKCh0eXBlKSA8PCBfSU9DX1RZUEVTSElGVCkgfCBcCisJICgobnIpICAgPDwgX0lPQ19OUlNISUZUKSB8IFwKKwkgKChzaXplKSA8PCBfSU9DX1NJWkVTSElGVCkpCisKKy8qIHByb3Zva2UgY29tcGlsZSBlcnJvciBmb3IgaW52YWxpZCB1c2VzIG9mIHNpemUgYXJndW1lbnQgKi8KK2V4dGVybiB1bnNpZ25lZCBpbnQgX19pbnZhbGlkX3NpemVfYXJndW1lbnRfZm9yX0lPQzsKKyNkZWZpbmUgX0lPQ19UWVBFQ0hFQ0sodCkgXAorCSgoc2l6ZW9mKHQpID09IHNpemVvZih0WzFdKSAmJiBcCisJICBzaXplb2YodCkgPCAoMSA8PCBfSU9DX1NJWkVCSVRTKSkgPyBcCisJICBzaXplb2YodCkgOiBfX2ludmFsaWRfc2l6ZV9hcmd1bWVudF9mb3JfSU9DKQorCisvKiB1c2VkIHRvIGNyZWF0ZSBudW1iZXJzICovCisjZGVmaW5lIF9JTyh0eXBlLG5yKQkJX0lPQyhfSU9DX05PTkUsKHR5cGUpLChuciksMCkKKyNkZWZpbmUgX0lPUih0eXBlLG5yLHNpemUpCV9JT0MoX0lPQ19SRUFELCh0eXBlKSwobnIpLChfSU9DX1RZUEVDSEVDSyhzaXplKSkpCisjZGVmaW5lIF9JT1codHlwZSxucixzaXplKQlfSU9DKF9JT0NfV1JJVEUsKHR5cGUpLChuciksKF9JT0NfVFlQRUNIRUNLKHNpemUpKSkKKyNkZWZpbmUgX0lPV1IodHlwZSxucixzaXplKQlfSU9DKF9JT0NfUkVBRHxfSU9DX1dSSVRFLCh0eXBlKSwobnIpLChfSU9DX1RZUEVDSEVDSyhzaXplKSkpCisjZGVmaW5lIF9JT1JfQkFEKHR5cGUsbnIsc2l6ZSkJX0lPQyhfSU9DX1JFQUQsKHR5cGUpLChuciksc2l6ZW9mKHNpemUpKQorI2RlZmluZSBfSU9XX0JBRCh0eXBlLG5yLHNpemUpCV9JT0MoX0lPQ19XUklURSwodHlwZSksKG5yKSxzaXplb2Yoc2l6ZSkpCisjZGVmaW5lIF9JT1dSX0JBRCh0eXBlLG5yLHNpemUpCV9JT0MoX0lPQ19SRUFEfF9JT0NfV1JJVEUsKHR5cGUpLChuciksc2l6ZW9mKHNpemUpKQorCisvKiB1c2VkIHRvIGRlY29kZSBpb2N0bCBudW1iZXJzLi4gKi8KKyNkZWZpbmUgX0lPQ19ESVIobnIpCQkoKChucikgPj4gX0lPQ19ESVJTSElGVCkgJiBfSU9DX0RJUk1BU0spCisjZGVmaW5lIF9JT0NfVFlQRShucikJCSgoKG5yKSA+PiBfSU9DX1RZUEVTSElGVCkgJiBfSU9DX1RZUEVNQVNLKQorI2RlZmluZSBfSU9DX05SKG5yKQkJKCgobnIpID4+IF9JT0NfTlJTSElGVCkgJiBfSU9DX05STUFTSykKKyNkZWZpbmUgX0lPQ19TSVpFKG5yKQkJKCgobnIpID4+IF9JT0NfU0laRVNISUZUKSAmIF9JT0NfU0laRU1BU0spCisKKy8qIC4uLmFuZCBmb3IgdGhlIGRyaXZlcnMvc291bmQgZmlsZXMuLi4gKi8KKworI2RlZmluZSBJT0NfSU4JCShfSU9DX1dSSVRFIDw8IF9JT0NfRElSU0hJRlQpCisjZGVmaW5lIElPQ19PVVQJCShfSU9DX1JFQUQgPDwgX0lPQ19ESVJTSElGVCkKKyNkZWZpbmUgSU9DX0lOT1VUCSgoX0lPQ19XUklURXxfSU9DX1JFQUQpIDw8IF9JT0NfRElSU0hJRlQpCisjZGVmaW5lIElPQ1NJWkVfTUFTSwkoX0lPQ19TSVpFTUFTSyA8PCBfSU9DX1NJWkVTSElGVCkKKyNkZWZpbmUgSU9DU0laRV9TSElGVAkoX0lPQ19TSVpFU0hJRlQpCisKKyNlbmRpZiAvKiBfQVNNX1BBUklTQ19JT0NUTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvaW9jdGxzLmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvaW9jdGxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU4NGU0MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9pb2N0bHMuaApAQCAtMCwwICsxLDg2IEBACisjaWZuZGVmIF9fQVJDSF9QQVJJU0NfSU9DVExTX0hfXworI2RlZmluZSBfX0FSQ0hfUEFSSVNDX0lPQ1RMU19IX18KKworI2luY2x1ZGUgPGFzbS9pb2N0bC5oPgorCisvKiAweDU0IGlzIGp1c3QgYSBtYWdpYyBudW1iZXIgdG8gbWFrZSB0aGVzZSByZWxhdGl2ZWx5IHVuaXF1ZSAoJ1QnKSAqLworCisjZGVmaW5lIFRDR0VUUwkJX0lPUignVCcsIDE2LCBzdHJ1Y3QgdGVybWlvcykgLyogVENHRVRBVFRSICovCisjZGVmaW5lIFRDU0VUUwkJX0lPVygnVCcsIDE3LCBzdHJ1Y3QgdGVybWlvcykgLyogVENTRVRBVFRSICovCisjZGVmaW5lIFRDU0VUU1cJCV9JT1coJ1QnLCAxOCwgc3RydWN0IHRlcm1pb3MpIC8qIFRDU0VUQVRUUkQgKi8KKyNkZWZpbmUgVENTRVRTRgkJX0lPVygnVCcsIDE5LCBzdHJ1Y3QgdGVybWlvcykgLyogVENTRVRBVFRSRiAqLworI2RlZmluZSBUQ0dFVEEJCV9JT1IoJ1QnLCAxLCBzdHJ1Y3QgdGVybWlvKQorI2RlZmluZSBUQ1NFVEEJCV9JT1coJ1QnLCAyLCBzdHJ1Y3QgdGVybWlvKQorI2RlZmluZSBUQ1NFVEFXCQlfSU9XKCdUJywgMywgc3RydWN0IHRlcm1pbykKKyNkZWZpbmUgVENTRVRBRgkJX0lPVygnVCcsIDQsIHN0cnVjdCB0ZXJtaW8pCisjZGVmaW5lIFRDU0JSSwkJX0lPKCdUJywgNSkKKyNkZWZpbmUgVENYT05DCQlfSU8oJ1QnLCA2KQorI2RlZmluZSBUQ0ZMU0gJCV9JTygnVCcsIDcpCisjZGVmaW5lIFRJT0NFWENMCTB4NTQwQworI2RlZmluZSBUSU9DTlhDTAkweDU0MEQKKyNkZWZpbmUgVElPQ1NDVFRZCTB4NTQwRQorI2RlZmluZSBUSU9DR1BHUlAJX0lPUignVCcsIDMwLCBpbnQpCisjZGVmaW5lIFRJT0NTUEdSUAlfSU9XKCdUJywgMjksIGludCkKKyNkZWZpbmUgVElPQ09VVFEJMHg1NDExCisjZGVmaW5lIFRJT0NTVEkJCTB4NTQxMgorI2RlZmluZSBUSU9DR1dJTlNaCTB4NTQxMworI2RlZmluZSBUSU9DU1dJTlNaCTB4NTQxNAorI2RlZmluZSBUSU9DTUdFVAkweDU0MTUKKyNkZWZpbmUgVElPQ01CSVMJMHg1NDE2CisjZGVmaW5lIFRJT0NNQklDCTB4NTQxNworI2RlZmluZSBUSU9DTVNFVAkweDU0MTgKKyNkZWZpbmUgVElPQ0dTT0ZUQ0FSCTB4NTQxOQorI2RlZmluZSBUSU9DU1NPRlRDQVIJMHg1NDFBCisjZGVmaW5lIEZJT05SRUFECTB4NTQxQgorI2RlZmluZSBUSU9DSU5RCQlGSU9OUkVBRAorI2RlZmluZSBUSU9DTElOVVgJMHg1NDFDCisjZGVmaW5lIFRJT0NDT05TCTB4NTQxRAorI2RlZmluZSBUSU9DR1NFUklBTAkweDU0MUUKKyNkZWZpbmUgVElPQ1NTRVJJQUwJMHg1NDFGCisjZGVmaW5lIFRJT0NQS1QJCTB4NTQyMAorI2RlZmluZSBGSU9OQklPCQkweDU0MjEKKyNkZWZpbmUgVElPQ05PVFRZCTB4NTQyMgorI2RlZmluZSBUSU9DU0VURAkweDU0MjMKKyNkZWZpbmUgVElPQ0dFVEQJMHg1NDI0CisjZGVmaW5lIFRDU0JSS1AJCTB4NTQyNQkvKiBOZWVkZWQgZm9yIFBPU0lYIHRjc2VuZGJyZWFrKCkgKi8KKyNkZWZpbmUgVElPQ1NCUksJMHg1NDI3ICAvKiBCU0QgY29tcGF0aWJpbGl0eSAqLworI2RlZmluZSBUSU9DQ0JSSwkweDU0MjggIC8qIEJTRCBjb21wYXRpYmlsaXR5ICovCisjZGVmaW5lIFRJT0NHU0lECV9JT1IoJ1QnLCAyMCwgaW50KSAvKiBSZXR1cm4gdGhlIHNlc3Npb24gSUQgb2YgRkQgKi8KKyNkZWZpbmUgVElPQ0dQVE4JX0lPUignVCcsMHgzMCwgdW5zaWduZWQgaW50KSAvKiBHZXQgUHR5IE51bWJlciAob2YgcHR5LW11eCBkZXZpY2UpICovCisjZGVmaW5lIFRJT0NTUFRMQ0sJX0lPVygnVCcsMHgzMSwgaW50KSAgLyogTG9jay91bmxvY2sgUHR5ICovCisKKyNkZWZpbmUgRklPTkNMRVgJMHg1NDUwICAvKiB0aGVzZSBudW1iZXJzIG5lZWQgdG8gYmUgYWRqdXN0ZWQuICovCisjZGVmaW5lIEZJT0NMRVgJCTB4NTQ1MQorI2RlZmluZSBGSU9BU1lOQwkweDU0NTIKKyNkZWZpbmUgVElPQ1NFUkNPTkZJRwkweDU0NTMKKyNkZWZpbmUgVElPQ1NFUkdXSUxECTB4NTQ1NAorI2RlZmluZSBUSU9DU0VSU1dJTEQJMHg1NDU1CisjZGVmaW5lIFRJT0NHTENLVFJNSU9TCTB4NTQ1NgorI2RlZmluZSBUSU9DU0xDS1RSTUlPUwkweDU0NTcKKyNkZWZpbmUgVElPQ1NFUkdTVFJVQ1QJMHg1NDU4IC8qIEZvciBkZWJ1Z2dpbmcgb25seSAqLworI2RlZmluZSBUSU9DU0VSR0VUTFNSICAgMHg1NDU5IC8qIEdldCBsaW5lIHN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBUSU9DU0VSR0VUTVVMVEkgMHg1NDVBIC8qIEdldCBtdWx0aXBvcnQgY29uZmlnICAqLworI2RlZmluZSBUSU9DU0VSU0VUTVVMVEkgMHg1NDVCIC8qIFNldCBtdWx0aXBvcnQgY29uZmlnICovCisKKyNkZWZpbmUgVElPQ01JV0FJVAkweDU0NUMJLyogd2FpdCBmb3IgYSBjaGFuZ2Ugb24gc2VyaWFsIGlucHV0IGxpbmUocykgKi8KKyNkZWZpbmUgVElPQ0dJQ09VTlQJMHg1NDVECS8qIHJlYWQgc2VyaWFsIHBvcnQgaW5saW5lIGludGVycnVwdCBjb3VudHMgKi8KKyNkZWZpbmUgVElPQ0dIQVlFU0VTUCAgIDB4NTQ1RSAgLyogR2V0IEhheWVzIEVTUCBjb25maWd1cmF0aW9uICovCisjZGVmaW5lIFRJT0NTSEFZRVNFU1AgICAweDU0NUYgIC8qIFNldCBIYXllcyBFU1AgY29uZmlndXJhdGlvbiAqLworI2RlZmluZSBGSU9RU0laRQkweDU0NjAJLyogR2V0IGV4YWN0IHNwYWNlIHVzZWQgYnkgcXVvdGEgKi8KKworI2RlZmluZSBUSU9DU1RBUlQJMHg1NDYxCisjZGVmaW5lIFRJT0NTVE9QCTB4NTQ2MgorI2RlZmluZSBUSU9DU0xUQwkweDU0NjIKKworLyogVXNlZCBmb3IgcGFja2V0IG1vZGUgKi8KKyNkZWZpbmUgVElPQ1BLVF9EQVRBCQkgMAorI2RlZmluZSBUSU9DUEtUX0ZMVVNIUkVBRAkgMQorI2RlZmluZSBUSU9DUEtUX0ZMVVNIV1JJVEUJIDIKKyNkZWZpbmUgVElPQ1BLVF9TVE9QCQkgNAorI2RlZmluZSBUSU9DUEtUX1NUQVJUCQkgOAorI2RlZmluZSBUSU9DUEtUX05PU1RPUAkJMTYKKyNkZWZpbmUgVElPQ1BLVF9ET1NUT1AJCTMyCisKKyNkZWZpbmUgVElPQ1NFUl9URU1UICAgIDB4MDEJLyogVHJhbnNtaXR0ZXIgcGh5c2ljYWxseSBlbXB0eSAqLworCisjZW5kaWYgLyogX0FTTV9QQVJJU0NfSU9DVExTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9pb3NhcGljLmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvaW9zYXBpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxMzM5MGUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2MvaW9zYXBpYy5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisqKiBUaGlzIGZpbGUgaXMgcHJpdmF0ZSB0byBpb3NhcGljIGRyaXZlci4KKyoqIElmIHN0dWZmIG5lZWRzIHRvIGJlIHVzZWQgYnkgYW5vdGhlciBkcml2ZXIsIG1vdmUgaXQgdG8gYSBjb21tb24gZmlsZS4KKyoqCisqKiBXQVJOSU5HOiBmaWVsZHMgbW9zdCBkYXRhIHN0cnVjdHVyZXMgaGVyZSBhcmUgb3JkZXJlZCB0byBtYWtlIHN1cmUKKyoqICAgICAgICAgIHRoZXkgcGFjayBuaWNlbHkgZm9yIDY0LWJpdCBjb21waWxhdGlvbi4gKGllIHNpemVvZihsb25nKSA9PSA4KQorKi8KKworCisvKgorKiogSS9PIFNBUElDIGluaXQgZnVuY3Rpb24KKyoqIENhbGxlciBrbm93cyB3aGVyZSBhbiBJL08gU0FQSUMgaXMuIExCQSBoYXMgYW4gaW50ZWdyYXRlZCBJL08gU0FQSUMuCisqKiBDYWxsIHNldHVwIGFzIHBhcnQgb2YgcGVyIGluc3RhbmNlIGluaXRpYWxpemF0aW9uLgorKiogKGllICpub3QqIGluaXRfbW9kdWxlKCkgZnVuY3Rpb24gdW5sZXNzIG9ubHkgb25lIGlzIHByZXNlbnQuKQorKiogZml4dXBfaXJxIGlzIHRvIGluaXRpYWxpemUgUENJIElSUSBsaW5lIHN1cHBvcnQgYW5kCisqKiB2aXJ0dWFsaXplIHBjaWRldi0+aXJxIHZhbHVlLiBUbyBiZSBjYWxsZWQgYnkgcGNpX2ZpeHVwX2J1cygpLgorKi8KK2V4dGVybiB2b2lkICppb3NhcGljX3JlZ2lzdGVyKHVuc2lnbmVkIGxvbmcgaHBhKTsKK2V4dGVybiBpbnQgaW9zYXBpY19maXh1cF9pcnEodm9pZCAqb2JqLCBzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2KTsKKworCisjaWZkZWYgX19JQTY0X18KKy8qCisqKiBQQTogUElCIChQcm9jZXNzb3IgSW50ZXJydXB0IEJsb2NrKSBpcyBoYW5kbGVkIGJ5IFJ1bndheSBidXMgYWRhcHRlci4KKyoqICAgICBhbmQgaXMgaGFyZGNvZGVkIHRvIDB4ZmVlTk5OTjAgd2hlcmUgTk5OTiBpcyBpZF9laWQgZmllbGQuCisqKgorKiogSUE2NDogUElCIGlzIGhhbmRsZWQgYnkgIkxvY2FsIFNBUElDIiAoaW50ZWdyYXRlZCBpbiB0aGUgcHJvY2Vzc29yKS4KKyovCitzdHJ1Y3QgbG9jYWxfc2FwaWNfaW5mbyB7CisJc3RydWN0IGxvY2FsX3NhcGljX2luZm8gKmxzaV9uZXh0OyAgICAgIC8qIHBvaW50IHRvIG5leHQgQ1BVIGluZm8gKi8KKwlpbnQgICAgICAgICAgICAgICAgICAgICAqbHNpX2NwdV9pZDsgICAgLyogcG9pbnQgdG8gbG9naWNhbCBDUFUgaWQgKi8KKwl1bnNpZ25lZCBsb25nICAgICAgICAgICAqbHNpX2lkX2VpZDsgICAgLyogcG9pbnQgdG8gSUEtNjQgQ1BVIGlkICovCisJaW50ICAgICAgICAgICAgICAgICAgICAgKmxzaV9zdGF0dXM7ICAgIC8qIHBvaW50IHRvIENQVSBzdGF0dXMgICAqLworCXZvaWQgICAgICAgICAgICAgICAgICAgICpsc2lfcHJpdmF0ZTsgICAvKiBwb2ludCB0byBzcGVjaWFsIGluZm8gKi8KK307CisKKy8qCisqKiAicm9vdCIgZGF0YSBzdHJ1Y3R1cmUgd2hpY2ggdGllcyBldmVyeXRoaW5nIHRvZ2V0aGVyLgorKiogU2hvdWxkIGFsd2F5cyBiZSBhYmxlIHRvIHN0YXJ0IHdpdGggc2FwaWNfcm9vdCBhbmQgbG9jYXRlCisqKiB0aGUgZGVzaXJlZCBpbmZvcm1hdGlvbi4KKyovCitzdHJ1Y3Qgc2FwaWNfaW5mbyB7CisJc3RydWN0IHNhcGljX2luZm8JKnNpX25leHQ7CS8qIGluZm8gaXMgcGVyIGNlbGwgKi8KKwlpbnQgICAgICAgICAgICAgICAgICAgICBzaV9jZWxsaWQ7ICAgICAgLyogY2VsbCBpZCAqLworCXVuc2lnbmVkIGludCAgICAgICAgICAgIHNpX3N0YXR1czsgICAgICAgLyogc3RhdHVzICAqLworCWNoYXIgICAgICAgICAgICAgICAgICAgICpzaV9waWJfYmFzZTsgICAvKiBpbnRyIGJsayBiYXNlIGFkZHJlc3MgKi8KKwlsb2NhbF9zYXBpY19pbmZvX3QgICAgICAqc2lfbG9jYWxfaW5mbzsKKwlpb19zYXBpY19pbmZvX3QgICAgICAgICAqc2lfaW9faW5mbzsKKwlleHRpbnRfaW5mb190ICAgICAgICAgICAqc2lfZXh0aW50X2luZm87LyogRXh0ZXJuYWwgSW50ciBpbmZvICAgICAgKi8KK307CisKKyNlbmRpZiAvKiBJQTY0ICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9pcGNidWYuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9pcGNidWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDk1NmM0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL2lwY2J1Zi5oCkBAIC0wLDAgKzEsMjcgQEAKKyNpZm5kZWYgX19QQVJJU0NfSVBDQlVGX0hfXworI2RlZmluZSBfX1BBUklTQ19JUENCVUZfSF9fCisKKy8qCisgKiBUaGUgaXBjNjRfcGVybSBzdHJ1Y3R1cmUgZm9yIFBBLVJJU0MgaXMgYWxtb3N0IGlkZW50aWNhbCB0bworICoga2Vybl9pcGNfcGVybSBhcyB3ZSBoYXZlIGFsd2F5cyBoYWQgMzItYml0IFVJRHMgYW5kIEdJRHMgaW4gdGhlIGtlcm5lbC4KKyAqICdzZXEnIGhhcyBiZWVuIGNoYW5nZWQgZnJvbSBsb25nIHRvIGludCBzbyB0aGF0IGl0J3MgdGhlIHNhbWUgc2l6ZQorICogb24gNjQtYml0IGtlcm5lbHMgYXMgb24gMzItYml0IG9uZXMuCisgKi8KKworc3RydWN0IGlwYzY0X3Blcm0KK3sKKwlrZXlfdCAgICAgICAgICAga2V5OworCXVpZF90ICAgICAgICAgICB1aWQ7CisJZ2lkX3QgICAgICAgICAgIGdpZDsKKwl1aWRfdCAgICAgICAgICAgY3VpZDsKKwlnaWRfdCAgICAgICAgICAgY2dpZDsKKwl1bnNpZ25lZCBzaG9ydCBpbnQJX19wYWQxOworCW1vZGVfdCAgICAgICAgICBtb2RlOworCXVuc2lnbmVkIHNob3J0IGludAlfX3BhZDI7CisJdW5zaWduZWQgc2hvcnQgaW50CXNlcTsKKwl1bnNpZ25lZCBpbnQJX19wYWQzOworCXVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191bnVzZWQxOworCXVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191bnVzZWQyOworfTsKKworI2VuZGlmIC8qIF9fUEFSSVNDX0lQQ0JVRl9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9pcnEuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9pcnEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTY1NGJhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL2lycS5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1wYXJpc2MvaXJxLmgKKyAqCisgKiBDb3B5cmlnaHQgMjAwNSBNYXR0aGV3IFdpbGNveCA8bWF0dGhld0B3aWwuY3g+CisgKi8KKworI2lmbmRlZiBfQVNNX1BBUklTQ19JUlFfSAorI2RlZmluZSBfQVNNX1BBUklTQ19JUlFfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisKKyNkZWZpbmUgTk9fSVJRCQkoLTEpCisKKyNpZmRlZiBDT05GSUdfR1NDCisjZGVmaW5lIEdTQ19JUlFfQkFTRQkxNgorI2RlZmluZSBHU0NfSVJRX01BWAk2MworI2RlZmluZSBDUFVfSVJRX0JBU0UJNjQKKyNlbHNlCisjZGVmaW5lIENQVV9JUlFfQkFTRQkxNgorI2VuZGlmCisKKyNkZWZpbmUgVElNRVJfSVJRCShDUFVfSVJRX0JBU0UgKyAwKQorI2RlZmluZQlJUElfSVJRCQkoQ1BVX0lSUV9CQVNFICsgMSkKKyNkZWZpbmUgQ1BVX0lSUV9NQVgJKENQVV9JUlFfQkFTRSArIChCSVRTX1BFUl9MT05HIC0gMSkpCisKKyNkZWZpbmUgTlJfSVJRUwkJKENQVV9JUlFfTUFYICsgMSkKKworc3RhdGljIF9faW5saW5lX18gaW50IGlycV9jYW5vbmljYWxpemUoaW50IGlycSkKK3sKKwlyZXR1cm4gKGlycSA9PSAyKSA/IDkgOiBpcnE7Cit9CisKK3N0cnVjdCBod19pbnRlcnJ1cHRfdHlwZTsKKworLyoKKyAqIFNvbWUgdXNlZnVsICJ3ZSBkb24ndCBoYXZlIHRvIGRvIGFueXRoaW5nIGhlcmUiIGhhbmRsZXJzLiAgU2hvdWxkCisgKiBwcm9iYWJseSBiZSBwcm92aWRlZCBieSB0aGUgZ2VuZXJpYyBjb2RlLgorICovCit2b2lkIG5vX2Fja19pcnEodW5zaWduZWQgaW50IGlycSk7Cit2b2lkIG5vX2VuZF9pcnEodW5zaWduZWQgaW50IGlycSk7CisKK2V4dGVybiBpbnQgdHhuX2FsbG9jX2lycSh1bnNpZ25lZCBpbnQgbmJpdHMpOworZXh0ZXJuIGludCB0eG5fY2xhaW1faXJxKGludCk7CitleHRlcm4gdW5zaWduZWQgaW50IHR4bl9hbGxvY19kYXRhKHVuc2lnbmVkIGludCk7CitleHRlcm4gdW5zaWduZWQgbG9uZyB0eG5fYWxsb2NfYWRkcih1bnNpZ25lZCBpbnQpOworCitleHRlcm4gaW50IGNwdV9jbGFpbV9pcnEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGh3X2ludGVycnVwdF90eXBlICosIHZvaWQgKik7CisKK2V4dGVybiBpbnQgY3B1X2NsYWltX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaHdfaW50ZXJydXB0X3R5cGUgKiwgdm9pZCAqKTsKKworLyogc29mdCBwb3dlciBzd2l0Y2ggc3VwcG9ydCAocG93ZXIuYykgKi8KK2V4dGVybiBzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgcG93ZXJfdGFza2xldDsKKworI2VuZGlmCS8qIF9BU01fUEFSSVNDX0lSUV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2Mva21hcF90eXBlcy5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL2ttYXBfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODg2YTBjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL2ttYXBfdHlwZXMuaApAQCAtMCwwICsxLDMxIEBACisjaWZuZGVmIF9BU01fS01BUF9UWVBFU19ICisjZGVmaW5lIF9BU01fS01BUF9UWVBFU19ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2lmZGVmIENPTkZJR19ERUJVR19ISUdITUVNCisjIGRlZmluZSBEKG4pIF9fS01fRkVOQ0VfIyNuICwKKyNlbHNlCisjIGRlZmluZSBEKG4pCisjZW5kaWYKKworZW51bSBrbV90eXBlIHsKK0QoMCkJS01fQk9VTkNFX1JFQUQsCitEKDEpCUtNX1NLQl9TVU5SUENfREFUQSwKK0QoMikJS01fU0tCX0RBVEFfU09GVElSUSwKK0QoMykJS01fVVNFUjAsCitEKDQpCUtNX1VTRVIxLAorRCg1KQlLTV9CSU9fU1JDX0lSUSwKK0QoNikJS01fQklPX0RTVF9JUlEsCitEKDcpCUtNX1BURTAsCitEKDgpCUtNX1BURTEsCitEKDkpCUtNX0lSUTAsCitEKDEwKQlLTV9JUlExLAorRCgxMSkJS01fU09GVElSUTAsCitEKDEyKQlLTV9TT0ZUSVJRMSwKK0QoMTMpCUtNX1RZUEVfTlIKK307CisKKyN1bmRlZiBECisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL2xlZC5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL2xlZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhYzhhYjYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2MvbGVkLmgKQEAgLTAsMCArMSw0NSBAQAorI2lmbmRlZiBMRURfSAorI2RlZmluZSBMRURfSAorCisjZGVmaW5lCUxFRDcJCTB4ODAJCS8qIHRvcCAob3IgZnVydGhlc3QgcmlnaHQpIExFRCAqLworI2RlZmluZQlMRUQ2CQkweDQwCisjZGVmaW5lCUxFRDUJCTB4MjAKKyNkZWZpbmUJTEVENAkJMHgxMAorI2RlZmluZQlMRUQzCQkweDA4CisjZGVmaW5lCUxFRDIJCTB4MDQKKyNkZWZpbmUJTEVEMQkJMHgwMgorI2RlZmluZQlMRUQwCQkweDAxCQkvKiBib3R0b20gKG9yIGZ1cnRoZXN0IGxlZnQpIExFRCAqLworCisjZGVmaW5lCUxFRF9MQU5fVFgJTEVEMAkJLyogZm9yIExBTiB0cmFuc21pdCBhY3Rpdml0eSAqLworI2RlZmluZQlMRURfTEFOX1JDVglMRUQxCQkvKiBmb3IgTEFOIHJlY2VpdmUgYWN0aXZpdHkgKi8KKyNkZWZpbmUJTEVEX0RJU0tfSU8JTEVEMgkJLyogZm9yIGRpc2sgYWN0aXZpdHkgKi8KKyNkZWZpbmUJTEVEX0hFQVJUQkVBVAlMRUQzCQkvKiBoZWFydGJlYXQgKi8KKworLyogdmFsdWVzIGZvciBwZGNfY2hhc3Npc19sY2RfaW5mb19yZXRfYmxvY2subW9kZWw6ICovCisjZGVmaW5lIERJU1BMQVlfTU9ERUxfTENEICAwCQkvKiBLaXR0eUhhd2sgTEVEIG9yIExDRCAqLworI2RlZmluZSBESVNQTEFZX01PREVMX05PTkUgMQkJLyogbm8gTEVEIG9yIExDRCAqLworI2RlZmluZSBESVNQTEFZX01PREVMX0xBU0kgMgkJLyogTEFTSSBzdHlsZSA4IGJpdCBMRUQgKi8KKyNkZWZpbmUgRElTUExBWV9NT0RFTF9PTERfQVNQIDB4N0YJLyogZmFrZWQ6IEFTUCBzdHlsZSA4IHggMSBiaXQgTEVEIChvbmx5IHZlcnkgb2xkIEFTUCB2ZXJzaW9ucykgKi8KKworI2RlZmluZSBMRURfQ01EX1JFR19OT05FIDAJCS8qIE5VTEwgPT0gbm8gYWRkciBmb3IgdGhlIGNtZCByZWdpc3RlciAqLworCisvKiBsZWQgdGFza2xldCBzdHJ1Y3QgKi8KK2V4dGVybiBzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgbGVkX3Rhc2tsZXQ7CisKKy8qIHJlZ2lzdGVyX2xlZF9kcml2ZXIoKSAqLworaW50IF9faW5pdCByZWdpc3Rlcl9sZWRfZHJpdmVyKGludCBtb2RlbCwgdW5zaWduZWQgbG9uZyBjbWRfcmVnLCB1bnNpZ25lZCBsb25nIGRhdGFfcmVnKTsKKworLyogcmVnaXN0ZXJzIHRoZSBMRUQgcmVnaW9ucyBmb3IgcHJvY2ZzICovCit2b2lkIF9faW5pdCByZWdpc3Rlcl9sZWRfcmVnaW9ucyh2b2lkKTsKKworI2lmZGVmIENPTkZJR19DSEFTU0lTX0xDRF9MRUQKKy8qIHdyaXRlcyBhIHN0cmluZyB0byB0aGUgTENEIGRpc3BsYXkgKGlmIHBvc3NpYmxlIG9uIHRoaXMgaC93KSAqLworaW50IGxjZF9wcmludChjaGFyICpzdHIpOworI2Vsc2UKKyNkZWZpbmUgbGNkX3ByaW50KHN0cikKKyNlbmRpZgorCisvKiBtYWluIExFRCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiAodXNlcyBQREMpICovIAoraW50IF9faW5pdCBsZWRfaW5pdCh2b2lkKTsKKworI2VuZGlmIC8qIExFRF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvbGlua2FnZS5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL2xpbmthZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTFjMmQwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL2xpbmthZ2UuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19BU01fTElOS0FHRV9ICisjZGVmaW5lIF9fQVNNX0xJTktBR0VfSAorCisvKiBOb3RoaW5nIHRvIHNlZSBoZXJlLi4uICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL2xvY2FsLmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvbG9jYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTJiM2IyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL2xvY2FsLmgKQEAgLTAsMCArMSw0MCBAQAorI2lmbmRlZiBfQVJDSF9QQVJJU0NfTE9DQUxfSAorI2RlZmluZSBfQVJDSF9QQVJJU0NfTE9DQUxfSAorCisjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorCit0eXBlZGVmIGF0b21pY190IGxvY2FsX3Q7CisKKyNkZWZpbmUgTE9DQUxfSU5JVChpKQlBVE9NSUNfSU5JVChpKQorI2RlZmluZSBsb2NhbF9yZWFkKHYpCWF0b21pY19yZWFkKHYpCisjZGVmaW5lIGxvY2FsX3NldCh2LGkpCWF0b21pY19zZXQodixpKQorCisjZGVmaW5lIGxvY2FsX2luYyh2KQlhdG9taWNfaW5jKHYpCisjZGVmaW5lIGxvY2FsX2RlYyh2KQlhdG9taWNfZGVjKHYpCisjZGVmaW5lIGxvY2FsX2FkZChpLCB2KQlhdG9taWNfYWRkKGksIHYpCisjZGVmaW5lIGxvY2FsX3N1YihpLCB2KQlhdG9taWNfc3ViKGksIHYpCisKKyNkZWZpbmUgX19sb2NhbF9pbmModikJCSgodiktPmNvdW50ZXIrKykKKyNkZWZpbmUgX19sb2NhbF9kZWModikJCSgodiktPmNvdW50ZXItLSkKKyNkZWZpbmUgX19sb2NhbF9hZGQoaSx2KQkoKHYpLT5jb3VudGVyKz0oaSkpCisjZGVmaW5lIF9fbG9jYWxfc3ViKGksdikJKCh2KS0+Y291bnRlci09KGkpKQorCisvKiBVc2UgdGhlc2UgZm9yIHBlci1jcHUgbG9jYWxfdCB2YXJpYWJsZXM6IG9uIHNvbWUgYXJjaHMgdGhleSBhcmUKKyAqIG11Y2ggbW9yZSBlZmZpY2llbnQgdGhhbiB0aGVzZSBuYWl2ZSBpbXBsZW1lbnRhdGlvbnMuICBOb3RlIHRoZXkgdGFrZQorICogYSB2YXJpYWJsZSwgbm90IGFuIGFkZHJlc3MuCisgKi8KKyNkZWZpbmUgY3B1X2xvY2FsX3JlYWQodikJbG9jYWxfcmVhZCgmX19nZXRfY3B1X3Zhcih2KSkKKyNkZWZpbmUgY3B1X2xvY2FsX3NldCh2LCBpKQlsb2NhbF9zZXQoJl9fZ2V0X2NwdV92YXIodiksIChpKSkKKworI2RlZmluZSBjcHVfbG9jYWxfaW5jKHYpCWxvY2FsX2luYygmX19nZXRfY3B1X3Zhcih2KSkKKyNkZWZpbmUgY3B1X2xvY2FsX2RlYyh2KQlsb2NhbF9kZWMoJl9fZ2V0X2NwdV92YXIodikpCisjZGVmaW5lIGNwdV9sb2NhbF9hZGQoaSwgdikJbG9jYWxfYWRkKChpKSwgJl9fZ2V0X2NwdV92YXIodikpCisjZGVmaW5lIGNwdV9sb2NhbF9zdWIoaSwgdikJbG9jYWxfc3ViKChpKSwgJl9fZ2V0X2NwdV92YXIodikpCisKKyNkZWZpbmUgX19jcHVfbG9jYWxfaW5jKHYpCV9fbG9jYWxfaW5jKCZfX2dldF9jcHVfdmFyKHYpKQorI2RlZmluZSBfX2NwdV9sb2NhbF9kZWModikJX19sb2NhbF9kZWMoJl9fZ2V0X2NwdV92YXIodikpCisjZGVmaW5lIF9fY3B1X2xvY2FsX2FkZChpLCB2KQlfX2xvY2FsX2FkZCgoaSksICZfX2dldF9jcHVfdmFyKHYpKQorI2RlZmluZSBfX2NwdV9sb2NhbF9zdWIoaSwgdikJX19sb2NhbF9zdWIoKGkpLCAmX19nZXRfY3B1X3Zhcih2KSkKKworI2VuZGlmIC8qIF9BUkNIX1BBUklTQ19MT0NBTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvbWFjaGRlcC5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL21hY2hkZXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjMxYzk3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL21hY2hkZXAuaApAQCAtMCwwICsxLDE2IEBACisjaWZuZGVmIF9QQVJJU0NfTUFDSERFUF9ICisjZGVmaW5lIF9QQVJJU0NfTUFDSERFUF9ICisKKyNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgorCisjZGVmaW5lCU1BQ0hfUkVTVEFSVAkxCisjZGVmaW5lCU1BQ0hfSEFMVAkyCisjZGVmaW5lIE1BQ0hfUE9XRVJfT04JMworI2RlZmluZQlNQUNIX1BPV0VSX09GRgk0CisKK2V4dGVybiBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm1hY2hfbm90aWZpZXI7CitleHRlcm4gdm9pZCBwYTczMDBsY19pbml0KHZvaWQpOworCitleHRlcm4gdm9pZCAoKmNwdV9scG1jKShpbnQsIHN0cnVjdCBwdF9yZWdzICopOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9tYzE0NjgxOHJ0Yy5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL21jMTQ2ODE4cnRjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRmNDE2MwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9tYzE0NjgxOHJ0Yy5oCkBAIC0wLDAgKzEsOSBAQAorLyoKKyAqIE1hY2hpbmUgZGVwZW5kZW50IGFjY2VzcyBmdW5jdGlvbnMgZm9yIFJUQyByZWdpc3RlcnMuCisgKi8KKyNpZm5kZWYgX0FTTV9NQzE0NjgxOFJUQ19ICisjZGVmaW5lIF9BU01fTUMxNDY4MThSVENfSAorCisvKiBlbXB0eSBpbmNsdWRlIGZpbGUgdG8gc2F0aXNmeSB0aGUgaW5jbHVkZSBpbiBnZW5ydGMuYyAqLworCisjZW5kaWYgLyogX0FTTV9NQzE0NjgxOFJUQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvbW1hbi5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL21tYW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODI5NjA3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL21tYW4uaApAQCAtMCwwICsxLDU3IEBACisjaWZuZGVmIF9fUEFSSVNDX01NQU5fSF9fCisjZGVmaW5lIF9fUEFSSVNDX01NQU5fSF9fCisKKyNkZWZpbmUgUFJPVF9SRUFECTB4MQkJLyogcGFnZSBjYW4gYmUgcmVhZCAqLworI2RlZmluZSBQUk9UX1dSSVRFCTB4MgkJLyogcGFnZSBjYW4gYmUgd3JpdHRlbiAqLworI2RlZmluZSBQUk9UX0VYRUMJMHg0CQkvKiBwYWdlIGNhbiBiZSBleGVjdXRlZCAqLworI2RlZmluZSBQUk9UX1NFTQkweDgJCS8qIHBhZ2UgbWF5IGJlIHVzZWQgZm9yIGF0b21pYyBvcHMgKi8KKyNkZWZpbmUgUFJPVF9OT05FCTB4MAkJLyogcGFnZSBjYW4gbm90IGJlIGFjY2Vzc2VkICovCisjZGVmaW5lIFBST1RfR1JPV1NET1dOCTB4MDEwMDAwMDAJLyogbXByb3RlY3QgZmxhZzogZXh0ZW5kIGNoYW5nZSB0byBzdGFydCBvZiBncm93c2Rvd24gdm1hICovCisjZGVmaW5lIFBST1RfR1JPV1NVUAkweDAyMDAwMDAwCS8qIG1wcm90ZWN0IGZsYWc6IGV4dGVuZCBjaGFuZ2UgdG8gZW5kIG9mIGdyb3dzdXAgdm1hICovCisKKyNkZWZpbmUgTUFQX1NIQVJFRAkweDAxCQkvKiBTaGFyZSBjaGFuZ2VzICovCisjZGVmaW5lIE1BUF9QUklWQVRFCTB4MDIJCS8qIENoYW5nZXMgYXJlIHByaXZhdGUgKi8KKyNkZWZpbmUgTUFQX1RZUEUJMHgwMwkJLyogTWFzayBmb3IgdHlwZSBvZiBtYXBwaW5nICovCisjZGVmaW5lIE1BUF9GSVhFRAkweDA0CQkvKiBJbnRlcnByZXQgYWRkciBleGFjdGx5ICovCisjZGVmaW5lIE1BUF9BTk9OWU1PVVMJMHgxMAkJLyogZG9uJ3QgdXNlIGEgZmlsZSAqLworCisjZGVmaW5lIE1BUF9ERU5ZV1JJVEUJMHgwODAwCQkvKiBFVFhUQlNZICovCisjZGVmaW5lIE1BUF9FWEVDVVRBQkxFCTB4MTAwMAkJLyogbWFyayBpdCBhcyBhbiBleGVjdXRhYmxlICovCisjZGVmaW5lIE1BUF9MT0NLRUQJMHgyMDAwCQkvKiBwYWdlcyBhcmUgbG9ja2VkICovCisjZGVmaW5lIE1BUF9OT1JFU0VSVkUJMHg0MDAwCQkvKiBkb24ndCBjaGVjayBmb3IgcmVzZXJ2YXRpb25zICovCisjZGVmaW5lIE1BUF9HUk9XU0RPV04JMHg4MDAwCQkvKiBzdGFjay1saWtlIHNlZ21lbnQgKi8KKyNkZWZpbmUgTUFQX1BPUFVMQVRFCTB4MTAwMDAJCS8qIHBvcHVsYXRlIChwcmVmYXVsdCkgcGFnZXRhYmxlcyAqLworI2RlZmluZSBNQVBfTk9OQkxPQ0sJMHgyMDAwMAkJLyogZG8gbm90IGJsb2NrIG9uIElPICovCisKKyNkZWZpbmUgTVNfU1lOQwkJMQkJLyogc3luY2hyb25vdXMgbWVtb3J5IHN5bmMgKi8KKyNkZWZpbmUgTVNfQVNZTkMJMgkJLyogc3luYyBtZW1vcnkgYXN5bmNocm9ub3VzbHkgKi8KKyNkZWZpbmUgTVNfSU5WQUxJREFURQk0CQkvKiBpbnZhbGlkYXRlIHRoZSBjYWNoZXMgKi8KKworI2RlZmluZSBNQ0xfQ1VSUkVOVAkxCQkvKiBsb2NrIGFsbCBjdXJyZW50IG1hcHBpbmdzICovCisjZGVmaW5lIE1DTF9GVVRVUkUJMgkJLyogbG9jayBhbGwgZnV0dXJlIG1hcHBpbmdzICovCisKKyNkZWZpbmUgTUFEVl9OT1JNQUwgICAgIDAgICAgICAgICAgICAgICAvKiBubyBmdXJ0aGVyIHNwZWNpYWwgdHJlYXRtZW50ICovCisjZGVmaW5lIE1BRFZfUkFORE9NICAgICAxICAgICAgICAgICAgICAgLyogZXhwZWN0IHJhbmRvbSBwYWdlIHJlZmVyZW5jZXMgKi8KKyNkZWZpbmUgTUFEVl9TRVFVRU5USUFMIDIgICAgICAgICAgICAgICAvKiBleHBlY3Qgc2VxdWVudGlhbCBwYWdlIHJlZmVyZW5jZXMgKi8KKyNkZWZpbmUgTUFEVl9XSUxMTkVFRCAgIDMgICAgICAgICAgICAgICAvKiB3aWxsIG5lZWQgdGhlc2UgcGFnZXMgKi8KKyNkZWZpbmUgTUFEVl9ET05UTkVFRCAgIDQgICAgICAgICAgICAgICAvKiBkb24ndCBuZWVkIHRoZXNlIHBhZ2VzICovCisjZGVmaW5lIE1BRFZfU1BBQ0VBVkFJTCA1ICAgICAgICAgICAgICAgLyogaW5zdXJlIHRoYXQgcmVzb3VyY2VzIGFyZSByZXNlcnZlZCAqLworI2RlZmluZSBNQURWX1ZQU19QVVJHRSAgNiAgICAgICAgICAgICAgIC8qIFB1cmdlIHBhZ2VzIGZyb20gVk0gcGFnZSBjYWNoZSAqLworI2RlZmluZSBNQURWX1ZQU19JTkhFUklUIDcgICAgICAgICAgICAgIC8qIEluaGVyaXQgcGFyZW50cyBwYWdlIHNpemUgKi8KKworLyogVGhlIHJhbmdlIDEyLTY0IGlzIHJlc2VydmVkIGZvciBwYWdlIHNpemUgc3BlY2lmaWNhdGlvbi4gKi8KKyNkZWZpbmUgTUFEVl80S19QQUdFUyAgIDEyICAgICAgICAgICAgICAvKiBVc2UgNEsgcGFnZXMgICovCisjZGVmaW5lIE1BRFZfMTZLX1BBR0VTICAxNCAgICAgICAgICAgICAgLyogVXNlIDE2SyBwYWdlcyAqLworI2RlZmluZSBNQURWXzY0S19QQUdFUyAgMTYgICAgICAgICAgICAgIC8qIFVzZSA2NEsgcGFnZXMgKi8KKyNkZWZpbmUgTUFEVl8yNTZLX1BBR0VTIDE4ICAgICAgICAgICAgICAvKiBVc2UgMjU2SyBwYWdlcyAqLworI2RlZmluZSBNQURWXzFNX1BBR0VTICAgMjAgICAgICAgICAgICAgIC8qIFVzZSAxIE1lZ2FieXRlIHBhZ2VzICovCisjZGVmaW5lIE1BRFZfNE1fUEFHRVMgICAyMiAgICAgICAgICAgICAgLyogVXNlIDQgTWVnYWJ5dGUgcGFnZXMgKi8KKyNkZWZpbmUgTUFEVl8xNk1fUEFHRVMgIDI0ICAgICAgICAgICAgICAvKiBVc2UgMTYgTWVnYWJ5dGUgcGFnZXMgKi8KKyNkZWZpbmUgTUFEVl82NE1fUEFHRVMgIDI2ICAgICAgICAgICAgICAvKiBVc2UgNjQgTWVnYWJ5dGUgcGFnZXMgKi8KKworLyogY29tcGF0aWJpbGl0eSBmbGFncyAqLworI2RlZmluZSBNQVBfQU5PTglNQVBfQU5PTllNT1VTCisjZGVmaW5lIE1BUF9GSUxFCTAKKyNkZWZpbmUgTUFQX1ZBUklBQkxFCTAKKworI2VuZGlmIC8qIF9fUEFSSVNDX01NQU5fSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvbW11LmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvbW11LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmEzMTBjZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9tbXUuaApAQCAtMCwwICsxLDcgQEAKKyNpZm5kZWYgX1BBUklTQ19NTVVfSF8KKyNkZWZpbmUgX1BBUklTQ19NTVVfSF8KKworLyogT24gcGFyaXNjLCB3ZSBzdG9yZSB0aGUgc3BhY2UgaWQgaGVyZSAqLwordHlwZWRlZiB1bnNpZ25lZCBsb25nIG1tX2NvbnRleHRfdDsKKworI2VuZGlmIC8qIF9QQVJJU0NfTU1VX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvbW11X2NvbnRleHQuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9tbXVfY29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljMDU4MzYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2MvbW11X2NvbnRleHQuaApAQCAtMCwwICsxLDczIEBACisjaWZuZGVmIF9fUEFSSVNDX01NVV9DT05URVhUX0gKKyNkZWZpbmUgX19QQVJJU0NfTU1VX0NPTlRFWFRfSAorCisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorCitzdGF0aWMgaW5saW5lIHZvaWQgZW50ZXJfbGF6eV90bGIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworfQorCisvKiBvbiBQQS1SSVNDLCB3ZSBhY3R1YWxseSBoYXZlIGVub3VnaCBjb250ZXh0cyB0byBqdXN0aWZ5IGFuIGFsbG9jYXRvcgorICogZm9yIHRoZW0uICBwcnVtcGYgKi8KKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgYWxsb2Nfc2lkKHZvaWQpOworZXh0ZXJuIHZvaWQgZnJlZV9zaWQodW5zaWduZWQgbG9uZyk7CisKK3N0YXRpYyBpbmxpbmUgaW50Citpbml0X25ld19jb250ZXh0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlCVUdfT04oYXRvbWljX3JlYWQoJm1tLT5tbV91c2VycykgIT0gMSk7CisKKwltbS0+Y29udGV4dCA9IGFsbG9jX3NpZCgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2Rlc3Ryb3lfY29udGV4dChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlmcmVlX3NpZChtbS0+Y29udGV4dCk7CisJbW0tPmNvbnRleHQgPSAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbG9hZF9jb250ZXh0KG1tX2NvbnRleHRfdCBjb250ZXh0KQoreworCW10c3AoY29udGV4dCwgMyk7CisjaWYgU1BBQ0VJRF9TSElGVCA9PSAwCisJbXRjdGwoY29udGV4dCA8PCAxLDgpOworI2Vsc2UKKwltdGN0bChjb250ZXh0ID4+IChTUEFDRUlEX1NISUZUIC0gMSksOCk7CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN3aXRjaF9tbShzdHJ1Y3QgbW1fc3RydWN0ICpwcmV2LCBzdHJ1Y3QgbW1fc3RydWN0ICpuZXh0LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKworCWlmIChwcmV2ICE9IG5leHQpIHsKKwkJbXRjdGwoX19wYShuZXh0LT5wZ2QpLCAyNSk7CisJCWxvYWRfY29udGV4dChuZXh0LT5jb250ZXh0KTsKKwl9Cit9CisKKyNkZWZpbmUgZGVhY3RpdmF0ZV9tbSh0c2ssbW0pCWRvIHsgfSB3aGlsZSAoMCkKKworc3RhdGljIGlubGluZSB2b2lkIGFjdGl2YXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKnByZXYsIHN0cnVjdCBtbV9zdHJ1Y3QgKm5leHQpCit7CisJLyoKKwkgKiBBY3RpdmF0ZV9tbSBpcyBvdXIgb25lIGNoYW5jZSB0byBhbGxvY2F0ZSBhIHNwYWNlIGlkCisJICogZm9yIGEgbmV3IG1tIGNyZWF0ZWQgaW4gdGhlIGV4ZWMgcGF0aC4gVGhlcmUncyBhbHNvCisJICogc29tZSBsYXp5IHRsYiBzdHVmZiwgd2hpY2ggaXMgY3VycmVudGx5IGRlYWQgY29kZSwgYnV0CisJICogd2Ugb25seSBhbGxvY2F0ZSBhIHNwYWNlIGlkIGlmIG9uZSBoYXNuJ3QgYmVlbiBhbGxvY2F0ZWQKKwkgKiBhbHJlYWR5LCBzbyB3ZSBzaG91bGQgYmUgT0suCisJICovCisKKwlCVUdfT04obmV4dCA9PSAmaW5pdF9tbSk7IC8qIFNob3VsZCBuZXZlciBoYXBwZW4gKi8KKworCWlmIChuZXh0LT5jb250ZXh0ID09IDApCisJICAgIG5leHQtPmNvbnRleHQgPSBhbGxvY19zaWQoKTsKKworCXN3aXRjaF9tbShwcmV2LG5leHQsY3VycmVudCk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9tbXpvbmUuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9tbXpvbmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjhiZjUwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL21tem9uZS5oCkBAIC0wLDAgKzEsMTAyIEBACisjaWZuZGVmIF9QQVJJU0NfTU1aT05FX0gKKyNkZWZpbmUgX1BBUklTQ19NTVpPTkVfSAorCisjaWZkZWYgQ09ORklHX0RJU0NPTlRJR01FTQorCisjZGVmaW5lIE1BWF9QSFlTTUVNX1JBTkdFUyA4IC8qIEZpeCB0aGUgc2l6ZSBmb3Igbm93IChjdXJyZW50IGtub3duIG1heCBpcyAzKSAqLworZXh0ZXJuIGludCBucG1lbV9yYW5nZXM7CisKK3N0cnVjdCBub2RlX21hcF9kYXRhIHsKKyAgICBwZ19kYXRhX3QgcGdfZGF0YTsKK307CisKK2V4dGVybiBzdHJ1Y3Qgbm9kZV9tYXBfZGF0YSBub2RlX2RhdGFbXTsKKworI2RlZmluZSBOT0RFX0RBVEEobmlkKSAgICAgICAgICAoJm5vZGVfZGF0YVtuaWRdLnBnX2RhdGEpCisKKy8qCisgKiBHaXZlbiBhIGtlcm5lbCBhZGRyZXNzLCBmaW5kIHRoZSBob21lIG5vZGUgb2YgdGhlIHVuZGVybHlpbmcgbWVtb3J5LgorICovCisjZGVmaW5lIGt2YWRkcl90b19uaWQoa2FkZHIpCXBmbl90b19uaWQoX19wYShrYWRkcikgPj4gUEFHRV9TSElGVCkKKworI2RlZmluZSBub2RlX21lbV9tYXAobmlkKQkoTk9ERV9EQVRBKG5pZCktPm5vZGVfbWVtX21hcCkKKyNkZWZpbmUgbm9kZV9zdGFydF9wZm4obmlkKQkoTk9ERV9EQVRBKG5pZCktPm5vZGVfc3RhcnRfcGZuKQorI2RlZmluZSBub2RlX2VuZF9wZm4obmlkKQkJCQkJCVwKKyh7CQkJCQkJCQkJXAorCXBnX2RhdGFfdCAqX19wZ2RhdCA9IE5PREVfREFUQShuaWQpOwkJCQlcCisJX19wZ2RhdC0+bm9kZV9zdGFydF9wZm4gKyBfX3BnZGF0LT5ub2RlX3NwYW5uZWRfcGFnZXM7CQlcCit9KQorI2RlZmluZSBub2RlX2xvY2FsbnIocGZuLCBuaWQpCQkoKHBmbikgLSBub2RlX3N0YXJ0X3BmbihuaWQpKQorCisjZGVmaW5lIGxvY2FsX21hcG5yKGt2YWRkcikJCQkJCQlcCisoewkJCQkJCQkJCVwKKwl1bnNpZ25lZCBsb25nIF9fcGZuID0gX19wYShrdmFkZHIpID4+IFBBR0VfU0hJRlQ7CQlcCisJKF9fcGZuIC0gbm9kZV9zdGFydF9wZm4ocGZuX3RvX25pZChfX3BmbikpKTsJCQlcCit9KQorCisjZGVmaW5lIHBmbl90b19wYWdlKHBmbikJCQkJCQlcCisoewkJCQkJCQkJCVwKKwl1bnNpZ25lZCBsb25nIF9fcGZuID0gKHBmbik7CQkJCQlcCisJaW50IF9fbm9kZSAgPSBwZm5fdG9fbmlkKF9fcGZuKTsJCQkJXAorCSZub2RlX21lbV9tYXAoX19ub2RlKVtub2RlX2xvY2FsbnIoX19wZm4sX19ub2RlKV07CQlcCit9KQorCisjZGVmaW5lIHBhZ2VfdG9fcGZuKHBnKQkJCQkJCQlcCisoewkJCQkJCQkJCVwKKwlzdHJ1Y3QgcGFnZSAqX19wYWdlID0gcGc7CQkJCQlcCisJc3RydWN0IHpvbmUgKl9fem9uZSA9IHBhZ2Vfem9uZShfX3BhZ2UpOwkJCVwKKwlCVUdfT04oX196b25lID09IE5VTEwpOwkJCQkJCVwKKwkodW5zaWduZWQgbG9uZykoX19wYWdlIC0gX196b25lLT56b25lX21lbV9tYXApCQkJXAorCQkrIF9fem9uZS0+em9uZV9zdGFydF9wZm47CQkJCVwKK30pCisKKy8qIFdlIGhhdmUgdGhlc2UgcG9zc2libGUgbWVtb3J5IG1hcCBsYXlvdXRzOgorICogQXN0cm86IDAtMy43NSwgNjcuNzUtNjgsIDQtNjQKKyAqIHp4MTogMC0xLCAyNTctMjYwLCA0LTI1NgorICogU3RyZXRjaCAoTi1jbGFzcyk6IDAtMiwgNC0zMiwgMzQteHh4CisgKi8KKworLyogU2luY2UgZWFjaCAxR0IgY2FuIG9ubHkgYmVsb25nIHRvIG9uZSByZWdpb24gKG5vZGUpLCB3ZSBjYW4gY3JlYXRlCisgKiBhbiBpbmRleCB0YWJsZSBmb3IgcGZuIHRvIG5pZCBsb29rdXA7IGVhY2ggZW50cnkgaW4gcGZubmlkX21hcCAKKyAqIHJlcHJlc2VudHMgMUdCLCBhbmQgY29udGFpbnMgdGhlIG5vZGUgdGhhdCB0aGUgbWVtb3J5IGJlbG9uZ3MgdG8uICovCisKKyNkZWZpbmUgUEZOTklEX1NISUZUICgzMCAtIFBBR0VfU0hJRlQpCisjZGVmaW5lIFBGTk5JRF9NQVBfTUFYICA1MTIgICAgIC8qIHN1cHBvcnQgNTEyR0IgKi8KK2V4dGVybiB1bnNpZ25lZCBjaGFyIHBmbm5pZF9tYXBbUEZOTklEX01BUF9NQVhdOworCisjaWZuZGVmIF9fTFA2NF9fCisjZGVmaW5lIHBmbl9pc19pbyhwZm4pICgocGZuICYgKDB4ZjAwMDAwMDBVTCA+PiBQQUdFX1NISUZUKSkgPT0gKDB4ZjAwMDAwMDBVTCA+PiBQQUdFX1NISUZUKSkKKyNlbHNlCisvKiBpbyBjYW4gYmUgMHhmMGYwZjBmMGYweHh4eHh4IG9yIDB4ZmZmZmZmZmZmMDAwMDAwMCAqLworI2RlZmluZSBwZm5faXNfaW8ocGZuKSAoKHBmbiAmICgweGYwMDAwMDAwMDAwMDAwMDBVTCA+PiBQQUdFX1NISUZUKSkgPT0gKDB4ZjAwMDAwMDAwMDAwMDAwMFVMID4+IFBBR0VfU0hJRlQpKQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgaW50IHBmbl90b19uaWQodW5zaWduZWQgbG9uZyBwZm4pCit7CisJdW5zaWduZWQgaW50IGk7CisJdW5zaWduZWQgY2hhciByOworCisJaWYgKHVubGlrZWx5KHBmbl9pc19pbyhwZm4pKSkKKwkJcmV0dXJuIDA7CisKKwlpID0gcGZuID4+IFBGTk5JRF9TSElGVDsKKwlCVUdfT04oaSA+PSBzaXplb2YocGZubmlkX21hcCkgLyBzaXplb2YocGZubmlkX21hcFswXSkpOworCXIgPSBwZm5uaWRfbWFwW2ldOworCUJVR19PTihyID09IDB4ZmYpOworCisJcmV0dXJuIChpbnQpcjsKK30KKworc3RhdGljIGlubGluZSBpbnQgcGZuX3ZhbGlkKGludCBwZm4pCit7CisJaW50IG5pZCA9IHBmbl90b19uaWQocGZuKTsKKworCWlmIChuaWQgPj0gMCkKKwkJcmV0dXJuIChwZm4gPCBub2RlX2VuZF9wZm4obmlkKSk7CisJcmV0dXJuIDA7Cit9CisKKyNlbHNlIC8qICFDT05GSUdfRElTQ09OVElHTUVNICovCisjZGVmaW5lIE1BWF9QSFlTTUVNX1JBTkdFUyAJMSAKKyNlbmRpZgorI2VuZGlmIC8qIF9QQVJJU0NfTU1aT05FX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9tb2R1bGUuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9tb2R1bGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGYwNjg4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL21vZHVsZS5oCkBAIC0wLDAgKzEsMzIgQEAKKyNpZm5kZWYgX0FTTV9QQVJJU0NfTU9EVUxFX0gKKyNkZWZpbmUgX0FTTV9QQVJJU0NfTU9EVUxFX0gKKy8qCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHBhcmlzYyBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgbW9kdWxlIGNvZGUuCisgKi8KKyNpZmRlZiBfX0xQNjRfXworI2RlZmluZSBFbGZfU2hkciBFbGY2NF9TaGRyCisjZGVmaW5lIEVsZl9TeW0gRWxmNjRfU3ltCisjZGVmaW5lIEVsZl9FaGRyIEVsZjY0X0VoZHIKKyNkZWZpbmUgRWxmX0FkZHIgRWxmNjRfQWRkcgorI2RlZmluZSBFbGZfUmVsYSBFbGY2NF9SZWxhCisjZWxzZQorI2RlZmluZSBFbGZfU2hkciBFbGYzMl9TaGRyCisjZGVmaW5lIEVsZl9TeW0gRWxmMzJfU3ltCisjZGVmaW5lIEVsZl9FaGRyIEVsZjMyX0VoZHIKKyNkZWZpbmUgRWxmX0FkZHIgRWxmMzJfQWRkcgorI2RlZmluZSBFbGZfUmVsYSBFbGYzMl9SZWxhCisjZW5kaWYKKworc3RydWN0IHVud2luZF90YWJsZTsKKworc3RydWN0IG1vZF9hcmNoX3NwZWNpZmljCit7CisJdW5zaWduZWQgbG9uZyBnb3Rfb2Zmc2V0LCBnb3RfY291bnQsIGdvdF9tYXg7CisJdW5zaWduZWQgbG9uZyBmZGVzY19vZmZzZXQsIGZkZXNjX2NvdW50LCBmZGVzY19tYXg7CisJdW5zaWduZWQgbG9uZyBzdHViX29mZnNldCwgc3R1Yl9jb3VudCwgc3R1Yl9tYXg7CisJdW5zaWduZWQgbG9uZyBpbml0X3N0dWJfb2Zmc2V0LCBpbml0X3N0dWJfY291bnQsIGluaXRfc3R1Yl9tYXg7CisJaW50IHVud2luZF9zZWN0aW9uOworCXN0cnVjdCB1bndpbmRfdGFibGUgKnVud2luZDsKK307CisKKyNlbmRpZiAvKiBfQVNNX1BBUklTQ19NT0RVTEVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL21zZ2J1Zi5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL21zZ2J1Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0ZmZjMjcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2MvbXNnYnVmLmgKQEAgLTAsMCArMSwzNyBAQAorI2lmbmRlZiBfUEFSSVNDX01TR0JVRl9ICisjZGVmaW5lIF9QQVJJU0NfTVNHQlVGX0gKKworLyogCisgKiBUaGUgbXNxaWQ2NF9kcyBzdHJ1Y3R1cmUgZm9yIHBhcmlzYyBhcmNoaXRlY3R1cmUsIGNvcGllZCBmcm9tIHNwYXJjLgorICogTm90ZSBleHRyYSBwYWRkaW5nIGJlY2F1c2UgdGhpcyBzdHJ1Y3R1cmUgaXMgcGFzc2VkIGJhY2sgYW5kIGZvcnRoCisgKiBiZXR3ZWVuIGtlcm5lbCBhbmQgdXNlciBzcGFjZS4KKyAqCisgKiBQYWQgc3BhY2UgaXMgbGVmdCBmb3I6CisgKiAtIDY0LWJpdCB0aW1lX3QgdG8gc29sdmUgeTIwMzggcHJvYmxlbQorICogLSAyIG1pc2NlbGxhbmVvdXMgMzItYml0IHZhbHVlcworICovCisKK3N0cnVjdCBtc3FpZDY0X2RzIHsKKwlzdHJ1Y3QgaXBjNjRfcGVybSBtc2dfcGVybTsKKyNpZm5kZWYgX19MUDY0X18KKwl1bnNpZ25lZCBpbnQgICBfX3BhZDE7CisjZW5kaWYKKwlfX2tlcm5lbF90aW1lX3QgbXNnX3N0aW1lOwkvKiBsYXN0IG1zZ3NuZCB0aW1lICovCisjaWZuZGVmIF9fTFA2NF9fCisJdW5zaWduZWQgaW50ICAgX19wYWQyOworI2VuZGlmCisJX19rZXJuZWxfdGltZV90IG1zZ19ydGltZTsJLyogbGFzdCBtc2dyY3YgdGltZSAqLworI2lmbmRlZiBfX0xQNjRfXworCXVuc2lnbmVkIGludCAgIF9fcGFkMzsKKyNlbmRpZgorCV9fa2VybmVsX3RpbWVfdCBtc2dfY3RpbWU7CS8qIGxhc3QgY2hhbmdlIHRpbWUgKi8KKwl1bnNpZ25lZCBpbnQgIG1zZ19jYnl0ZXM7CS8qIGN1cnJlbnQgbnVtYmVyIG9mIGJ5dGVzIG9uIHF1ZXVlICovCisJdW5zaWduZWQgaW50ICBtc2dfcW51bTsJLyogbnVtYmVyIG9mIG1lc3NhZ2VzIGluIHF1ZXVlICovCisJdW5zaWduZWQgaW50ICBtc2dfcWJ5dGVzOwkvKiBtYXggbnVtYmVyIG9mIGJ5dGVzIG9uIHF1ZXVlICovCisJX19rZXJuZWxfcGlkX3QgbXNnX2xzcGlkOwkvKiBwaWQgb2YgbGFzdCBtc2dzbmQgKi8KKwlfX2tlcm5lbF9waWRfdCBtc2dfbHJwaWQ7CS8qIGxhc3QgcmVjZWl2ZSBwaWQgKi8KKwl1bnNpZ25lZCBpbnQgIF9fdW51c2VkMTsKKwl1bnNpZ25lZCBpbnQgIF9fdW51c2VkMjsKK307CisKKyNlbmRpZiAvKiBfUEFSSVNDX01TR0JVRl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvbmFtZWkuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9uYW1laS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkMjliM2QKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2MvbmFtZWkuaApAQCAtMCwwICsxLDE3IEBACisvKiAkSWQ6IG5hbWVpLmgsdiAxLjEgMTk5Ni8xMi8xMyAxNDo0ODoyMSBqaiBFeHAgJAorICogbGludXgvaW5jbHVkZS9hc20tcGFyaXNjL25hbWVpLmgKKyAqCisgKiBJbmNsdWRlZCBmcm9tIGxpbnV4L2ZzL25hbWVpLmMKKyAqLworCisjaWZuZGVmIF9fUEFSSVNDX05BTUVJX0gKKyNkZWZpbmUgX19QQVJJU0NfTkFNRUlfSAorCisvKiBUaGlzIGR1bW15IHJvdXRpbmUgbWF5YmUgY2hhbmdlZCB0byBzb21ldGhpbmcgdXNlZnVsCisgKiBmb3IgL3Vzci9nbmVtdWwvIGVtdWxhdGlvbiBzdHVmZi4KKyAqIExvb2sgYXQgYXNtLXNwYXJjL25hbWVpLmggZm9yIGRldGFpbHMuCisgKi8KKworI2RlZmluZSBfX2VtdWxfcHJlZml4KCkgTlVMTAorCisjZW5kaWYgLyogX19QQVJJU0NfTkFNRUlfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL251bW5vZGVzLmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvbnVtbm9kZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzY3NjUxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL251bW5vZGVzLmgKQEAgLTAsMCArMSw3IEBACisjaWZuZGVmIF9BU01fTUFYX05VTU5PREVTX0gKKyNkZWZpbmUgX0FTTV9NQVhfTlVNTk9ERVNfSAorCisvKiBNYXggOCBOb2RlcyAqLworI2RlZmluZSBOT0RFU19TSElGVAkzCisKKyNlbmRpZiAvKiBfQVNNX01BWF9OVU1OT0RFU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvcGFnZS5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL3BhZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTEyNjkyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL3BhZ2UuaApAQCAtMCwwICsxLDE2MiBAQAorI2lmbmRlZiBfUEFSSVNDX1BBR0VfSAorI2RlZmluZSBfUEFSSVNDX1BBR0VfSAorCisvKiBQQUdFX1NISUZUIGRldGVybWluZXMgdGhlIHBhZ2Ugc2l6ZSAqLworI2RlZmluZSBQQUdFX1NISUZUCTEyCisjZGVmaW5lIFBBR0VfU0laRQkoMVVMIDw8IFBBR0VfU0hJRlQpCisjZGVmaW5lIFBBR0VfTUFTSwkofihQQUdFX1NJWkUtMSkpCisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CisKKyNkZWZpbmUgY2xlYXJfcGFnZShwYWdlKQltZW1zZXQoKHZvaWQgKikocGFnZSksIDAsIFBBR0VfU0laRSkKKyNkZWZpbmUgY29weV9wYWdlKHRvLGZyb20pICAgICAgY29weV91c2VyX3BhZ2VfYXNtKCh2b2lkICopKHRvKSwgKHZvaWQgKikoZnJvbSkpCisKK3N0cnVjdCBwYWdlOworCitleHRlcm4gdm9pZCBwdXJnZV9rZXJuZWxfZGNhY2hlX3BhZ2UodW5zaWduZWQgbG9uZyk7CitleHRlcm4gdm9pZCBjb3B5X3VzZXJfcGFnZV9hc20odm9pZCAqdG8sIHZvaWQgKmZyb20pOworZXh0ZXJuIHZvaWQgY2xlYXJfdXNlcl9wYWdlX2FzbSh2b2lkICpwYWdlLCB1bnNpZ25lZCBsb25nIHZhZGRyKTsKKworc3RhdGljIGlubGluZSB2b2lkCitjb3B5X3VzZXJfcGFnZSh2b2lkICp2dG8sIHZvaWQgKnZmcm9tLCB1bnNpZ25lZCBsb25nIHZhZGRyLCBzdHJ1Y3QgcGFnZSAqcGcpCit7CisJY29weV91c2VyX3BhZ2VfYXNtKHZ0bywgdmZyb20pOworCWZsdXNoX2tlcm5lbF9kY2FjaGVfcGFnZSh2dG8pOworCS8qIFhYWDogcHBjIGZsdXNoZXMgaWNhY2hlIHRvbywgc2hvdWxkIHdlPyAqLworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2NsZWFyX3VzZXJfcGFnZSh2b2lkICpwYWdlLCB1bnNpZ25lZCBsb25nIHZhZGRyLCBzdHJ1Y3QgcGFnZSAqcGcpCit7CisJcHVyZ2Vfa2VybmVsX2RjYWNoZV9wYWdlKCh1bnNpZ25lZCBsb25nKXBhZ2UpOworCWNsZWFyX3VzZXJfcGFnZV9hc20ocGFnZSwgdmFkZHIpOworfQorCisvKgorICogVGhlc2UgYXJlIHVzZWQgdG8gbWFrZSB1c2Ugb2YgQyB0eXBlLWNoZWNraW5nLi4KKyAqLworI2lmZGVmIF9fTFA2NF9fCit0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgcHRlOyB9IHB0ZV90OworI2Vsc2UKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBsb25nIHB0ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworfSBwdGVfdDsKKyNlbmRpZgorLyogTk9URTogZXZlbiBvbiA2NCBiaXRzLCB0aGVzZSBlbnRyaWVzIGFyZSBfX3UzMiBiZWNhdXNlIHdlIGFsbG9jYXRlCisgKiB0aGUgcG1kIGFuZCBwZ2QgaW4gWk9ORV9ETUEgKGkuZS4gdW5kZXIgNEdCKSAqLwordHlwZWRlZiBzdHJ1Y3QgeyBfX3UzMiBwbWQ7IH0gcG1kX3Q7Cit0eXBlZGVmIHN0cnVjdCB7IF9fdTMyIHBnZDsgfSBwZ2RfdDsKK3R5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBwZ3Byb3Q7IH0gcGdwcm90X3Q7CisKKyNkZWZpbmUgcHRlX3ZhbCh4KQkoKHgpLnB0ZSkKKyNpZmRlZiBfX0xQNjRfXworI2RlZmluZSBwdGVfZmxhZ3MoeCkJKCooX191MzIgKikmKCh4KS5wdGUpKQorI2Vsc2UKKyNkZWZpbmUgcHRlX2ZsYWdzKHgpCSgoeCkuZmxhZ3MpCisjZW5kaWYKKworLyogVGhlc2UgZG8gbm90IHdvcmsgbHZhbHVlcywgc28gbWFrZSBzdXJlIHdlIGRvbid0IHVzZSB0aGVtIGFzIHN1Y2guICovCisjZGVmaW5lIHBtZF92YWwoeCkJKCh4KS5wbWQgKyAwKQorI2RlZmluZSBwZ2RfdmFsKHgpCSgoeCkucGdkICsgMCkKKyNkZWZpbmUgcGdwcm90X3ZhbCh4KQkoKHgpLnBncHJvdCkKKworI2RlZmluZSBfX3BtZF92YWxfc2V0KHgsbikgKHgpLnBtZCA9IChuKQorI2RlZmluZSBfX3BnZF92YWxfc2V0KHgsbikgKHgpLnBnZCA9IChuKQorCisjZGVmaW5lIF9fcHRlKHgpCSgocHRlX3QpIHsgKHgpIH0gKQorI2RlZmluZSBfX3BtZCh4KQkoKHBtZF90KSB7ICh4KSB9ICkKKyNkZWZpbmUgX19wZ2QoeCkJKChwZ2RfdCkgeyAoeCkgfSApCisjZGVmaW5lIF9fcGdwcm90KHgpCSgocGdwcm90X3QpIHsgKHgpIH0gKQorCisvKiBQdXJlIDJebiB2ZXJzaW9uIG9mIGdldF9vcmRlciAqLworZXh0ZXJuIF9faW5saW5lX18gaW50IGdldF9vcmRlcih1bnNpZ25lZCBsb25nIHNpemUpCit7CisJaW50IG9yZGVyOworCisJc2l6ZSA9IChzaXplLTEpID4+IChQQUdFX1NISUZULTEpOworCW9yZGVyID0gLTE7CisJZG8geworCQlzaXplID4+PSAxOworCQlvcmRlcisrOworCX0gd2hpbGUgKHNpemUpOworCXJldHVybiBvcmRlcjsKK30KKwordHlwZWRlZiBzdHJ1Y3QgX19waHlzbWVtX3JhbmdlIHsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbjsKKwl1bnNpZ25lZCBsb25nIHBhZ2VzOyAgICAgICAvKiBQQUdFX1NJWkUgcGFnZXMgKi8KK30gcGh5c21lbV9yYW5nZV90OworCitleHRlcm4gcGh5c21lbV9yYW5nZV90IHBtZW1fcmFuZ2VzW107CitleHRlcm4gaW50IG5wbWVtX3JhbmdlczsKKworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKworLyogV0FSTklORzogVGhlIGRlZmluaXRpb25zIGJlbG93IG11c3QgbWF0Y2ggZXhhY3RseSB0byBzaXplb2YocHRlX3QpCisgKiBldGMKKyAqLworI2lmZGVmIF9fTFA2NF9fCisjZGVmaW5lIEJJVFNfUEVSX1BURV9FTlRSWQkzCisjZGVmaW5lIEJJVFNfUEVSX1BNRF9FTlRSWQkyCisjZGVmaW5lIEJJVFNfUEVSX1BHRF9FTlRSWQkyCisjZWxzZQorI2RlZmluZSBCSVRTX1BFUl9QVEVfRU5UUlkJMworI2RlZmluZSBCSVRTX1BFUl9QTURfRU5UUlkJMgorI2RlZmluZSBCSVRTX1BFUl9QR0RfRU5UUlkJQklUU19QRVJfUE1EX0VOVFJZCisjZW5kaWYKKyNkZWZpbmUgUEdEX0VOVFJZX1NJWkUJKDFVTCA8PCBCSVRTX1BFUl9QR0RfRU5UUlkpCisjZGVmaW5lIFBNRF9FTlRSWV9TSVpFCSgxVUwgPDwgQklUU19QRVJfUE1EX0VOVFJZKQorI2RlZmluZSBQVEVfRU5UUllfU0laRQkoMVVMIDw8IEJJVFNfUEVSX1BURV9FTlRSWSkKKworLyogdG8gYWxpZ24gdGhlIHBvaW50ZXIgdG8gdGhlIChuZXh0KSBwYWdlIGJvdW5kYXJ5ICovCisjZGVmaW5lIFBBR0VfQUxJR04oYWRkcikJKCgoYWRkcikrUEFHRV9TSVpFLTEpJlBBR0VfTUFTSykKKworCisjZGVmaW5lIExJTlVYX0dBVEVXQVlfU1BBQ0UgICAgIDAKKworLyogVGhpcyBnb3Zlcm5zIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB2aXJ0dWFsIGFuZCBwaHlzaWNhbCBhZGRyZXNzZXMuCisgKiBJZiB5b3UgYWx0ZXIgaXQsIG1ha2Ugc3VyZSB0byB0YWtlIGNhcmUgb2Ygb3VyIHZhcmlvdXMgZml4ZWQgbWFwcGluZworICogc2VnbWVudHMgaW4gZml4bWFwLmggKi8KKyNkZWZpbmUgX19QQUdFX09GRlNFVCAgICAgICAgICAgKDB4MTAwMDAwMDApCisKKyNkZWZpbmUgUEFHRV9PRkZTRVQJCSgodW5zaWduZWQgbG9uZylfX1BBR0VfT0ZGU0VUKQorCisvKiBUaGUgc2l6ZSBvZiB0aGUgZ2F0ZXdheSBwYWdlICh3ZSBsZWF2ZSBsb3RzIG9mIHJvb20gZm9yIGV4cGFuc2lvbikgKi8KKyNkZWZpbmUgR0FURVdBWV9QQUdFX1NJWkUJMHg0MDAwCisKKy8qIFRoZSBzdGFydCBvZiB0aGUgYWN0dWFsIGtlcm5lbCBiaW5hcnktLS11c2VkIGluIHZtbGludXgubGRzLlMKKyAqIExlYXZlIHNvbWUgc3BhY2UgYWZ0ZXIgX19QQUdFX09GRlNFVCBmb3IgZGV0ZWN0aW5nIGtlcm5lbCBudWxsCisgKiBwdHIgZGVyZWZzICovCisjZGVmaW5lIEtFUk5FTF9CSU5BUllfVEVYVF9TVEFSVAkoX19QQUdFX09GRlNFVCArIDB4MTAwMDAwKQorCisvKiBUaGVzZSBtYWNyb3MgZG9uJ3Qgd29yayBmb3IgNjQtYml0IEMgY29kZSAtLSBkb24ndCBhbGxvdyBpbiBDIGF0IGFsbCAqLworI2lmZGVmIF9fQVNTRU1CTFlfXworIyAgIGRlZmluZSBQQSh4KQkoKHgpLV9fUEFHRV9PRkZTRVQpCisjICAgZGVmaW5lIFZBKHgpCSgoeCkrX19QQUdFX09GRlNFVCkKKyNlbmRpZgorI2RlZmluZSBfX3BhKHgpCQkJKCh1bnNpZ25lZCBsb25nKSh4KS1QQUdFX09GRlNFVCkKKyNkZWZpbmUgX192YSh4KQkJCSgodm9pZCAqKSgodW5zaWduZWQgbG9uZykoeCkrUEFHRV9PRkZTRVQpKQorCisjaWZuZGVmIENPTkZJR19ESVNDT05USUdNRU0KKyNkZWZpbmUgcGZuX3RvX3BhZ2UocGZuKQkobWVtX21hcCArIChwZm4pKQorI2RlZmluZSBwYWdlX3RvX3BmbihwYWdlKQkoKHVuc2lnbmVkIGxvbmcpKChwYWdlKSAtIG1lbV9tYXApKQorI2RlZmluZSBwZm5fdmFsaWQocGZuKQkJKChwZm4pIDwgbWF4X21hcG5yKQorI2VuZGlmIC8qIENPTkZJR19ESVNDT05USUdNRU0gKi8KKworI2RlZmluZSB2aXJ0X2FkZHJfdmFsaWQoa2FkZHIpCXBmbl92YWxpZChfX3BhKGthZGRyKSA+PiBQQUdFX1NISUZUKQorCisjZGVmaW5lIHBhZ2VfdG9fcGh5cyhwYWdlKQkocGFnZV90b19wZm4ocGFnZSkgPDwgUEFHRV9TSElGVCkKKyNkZWZpbmUgdmlydF90b19wYWdlKGthZGRyKSAgICAgcGZuX3RvX3BhZ2UoX19wYShrYWRkcikgPj4gUEFHRV9TSElGVCkKKworI2RlZmluZSBWTV9EQVRBX0RFRkFVTFRfRkxBR1MJKFZNX1JFQUQgfCBWTV9XUklURSB8IFZNX0VYRUMgfCBcCisJCQkJIFZNX01BWVJFQUQgfCBWTV9NQVlXUklURSB8IFZNX01BWUVYRUMpCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfUEFSSVNDX1BBR0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3BhcmFtLmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDY5NGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL3BhcmFtLmgKQEAgLTAsMCArMSwyNyBAQAorI2lmbmRlZiBfQVNNUEFSSVNDX1BBUkFNX0gKKyNkZWZpbmUgX0FTTVBBUklTQ19QQVJBTV9ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjIGlmZGVmIENPTkZJR19QQTIwCisjICBkZWZpbmUgSFoJCTEwMDAJCS8qIEZhc3RlciBtYWNoaW5lcyAqLworIyBlbHNlCisjICBkZWZpbmUgSFoJCTEwMAkJLyogSW50ZXJuYWwga2VybmVsIHRpbWVyIGZyZXF1ZW5jeSAqLworIyBlbmRpZgorIyBkZWZpbmUgVVNFUl9IWgkxMDAJCS8qIC4uIHNvbWUgdXNlciBpbnRlcmZhY2VzIGFyZSBpbiAidGlja3MiICovCisjIGRlZmluZSBDTE9DS1NfUEVSX1NFQwkoVVNFUl9IWikJLyogbGlrZSB0aW1lcygpICovCisjZW5kaWYKKworI2lmbmRlZiBIWgorI2RlZmluZSBIWiAxMDAKKyNlbmRpZgorCisjZGVmaW5lIEVYRUNfUEFHRVNJWkUJNDA5NgorCisjaWZuZGVmIE5PR1JPVVAKKyNkZWZpbmUgTk9HUk9VUAkJKC0xKQorI2VuZGlmCisKKyNkZWZpbmUgTUFYSE9TVE5BTUVMRU4JNjQJLyogbWF4IGxlbmd0aCBvZiBob3N0bmFtZSAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9wYXJpc2MtZGV2aWNlLmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvcGFyaXNjLWRldmljZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmNjlhYjQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2MvcGFyaXNjLWRldmljZS5oCkBAIC0wLDAgKzEsNTQgQEAKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKworc3RydWN0IHBhcmlzY19kZXZpY2UgeworCXVuc2lnbmVkIGxvbmcgICBocGE7CQkvKiBIYXJkIFBoeXNpY2FsIEFkZHJlc3MgKi8KKwlzdHJ1Y3QgcGFyaXNjX2RldmljZV9pZCBpZDsKKwlzdHJ1Y3QgcGFyaXNjX2RyaXZlciAqZHJpdmVyOwkvKiBEcml2ZXIgZm9yIHRoaXMgZGV2aWNlICovCisJY2hhcgkJbmFtZVs4MF07CS8qIFRoZSBoYXJkd2FyZSBkZXNjcmlwdGlvbiAqLworCWludAkJaXJxOworCWludAkJYXV4X2lycTsJLyogU29tZSBkZXZpY2VzIGhhdmUgYSBzZWNvbmQgSVJRICovCisKKwljaGFyCQlod19wYXRoOyAgICAgICAgLyogVGhlIG1vZHVsZSBudW1iZXIgb24gdGhpcyBidXMgKi8KKwl1bnNpZ25lZCBpbnQJbnVtX2FkZHJzOwkvKiBzb21lIGRldmljZXMgaGF2ZSBhZGRpdGlvbmFsIGFkZHJlc3MgcmFuZ2VzLiAqLworCXVuc2lnbmVkIGxvbmcJKmFkZHI7ICAgICAgICAgIC8qIHdoaWNoIHdpbGwgYmUgc3RvcmVkIGhlcmUgKi8KKyAKKyNpZmRlZiBfX0xQNjRfXworCS8qIHBhcm1zIGZvciBwZGNfcGF0X2NlbGxfbW9kdWxlKCkgY2FsbCAqLworCXVuc2lnbmVkIGxvbmcJcGNlbGxfbG9jOwkvKiBQaHlzaWNhbCBDZWxsIGxvY2F0aW9uICovCisJdW5zaWduZWQgbG9uZwltb2RfaW5kZXg7CS8qIFBBVCBzcGVjaWZpYyAtIE1pc2MgTW9kdWxlIGluZm8gKi8KKworCS8qIGdlbmVyaWMgaW5mbyByZXR1cm5lZCBmcm9tIHBkY19wYXRfY2VsbF9tb2R1bGUoKSAqLworCXVuc2lnbmVkIGxvbmcJbW9kX2luZm87CS8qIFBBVCBzcGVjaWZpYyAtIE1pc2MgTW9kdWxlIGluZm8gKi8KKwl1bnNpZ25lZCBsb25nCXBtb2RfbG9jOwkvKiBwaHlzaWNhbCBNb2R1bGUgbG9jYXRpb24gKi8KKyNlbmRpZgorCXU2NAkJZG1hX21hc2s7CS8qIERNQSBtYXNrIGZvciBJL08gKi8KKwlzdHJ1Y3QgZGV2aWNlIAlkZXY7Cit9OworCitzdHJ1Y3QgcGFyaXNjX2RyaXZlciB7CisJc3RydWN0IHBhcmlzY19kcml2ZXIgKm5leHQ7CisJY2hhciAqbmFtZTsgCisJY29uc3Qgc3RydWN0IHBhcmlzY19kZXZpY2VfaWQgKmlkX3RhYmxlOworCWludCAoKnByb2JlKSAoc3RydWN0IHBhcmlzY19kZXZpY2UgKmRldik7IC8qIE5ldyBkZXZpY2UgZGlzY292ZXJlZCAqLworCWludCAoKnJlbW92ZSkgKHN0cnVjdCBwYXJpc2NfZGV2aWNlICpkZXYpOworCXN0cnVjdCBkZXZpY2VfZHJpdmVyIGRydjsKK307CisKKworI2RlZmluZSB0b19wYXJpc2NfZGV2aWNlKGQpCWNvbnRhaW5lcl9vZihkLCBzdHJ1Y3QgcGFyaXNjX2RldmljZSwgZGV2KQorI2RlZmluZSB0b19wYXJpc2NfZHJpdmVyKGQpCWNvbnRhaW5lcl9vZihkLCBzdHJ1Y3QgcGFyaXNjX2RyaXZlciwgZHJ2KQorI2RlZmluZSBwYXJpc2NfcGFyZW50KGQpCXRvX3BhcmlzY19kZXZpY2UoZC0+ZGV2LnBhcmVudCkKKworc3RhdGljIGlubGluZSB2b2lkCitwYXJpc2Nfc2V0X2RydmRhdGEoc3RydWN0IHBhcmlzY19kZXZpY2UgKmQsIHZvaWQgKnApCit7CisJZGV2X3NldF9kcnZkYXRhKCZkLT5kZXYsIHApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKgorcGFyaXNjX2dldF9kcnZkYXRhKHN0cnVjdCBwYXJpc2NfZGV2aWNlICpkKQoreworCXJldHVybiBkZXZfZ2V0X2RydmRhdGEoJmQtPmRldik7Cit9CisKK2V4dGVybiBzdHJ1Y3QgYnVzX3R5cGUgcGFyaXNjX2J1c190eXBlOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3BhcnBvcnQuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9wYXJwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBkOWNjMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9wYXJwb3J0LmgKQEAgLTAsMCArMSwxOCBAQAorLyogCisgKgorICogcGFycG9ydC5oOiBpYTMyLWNvbXBhdGlibGUgcGFycG9ydCBpbml0aWFsaXNhdGlvbgorICoKKyAqIFRoaXMgZmlsZSBzaG91bGQgb25seSBiZSBpbmNsdWRlZCBieSBkcml2ZXJzL3BhcnBvcnQvcGFycG9ydF9wYy5jLgorICovCisjaWZuZGVmIF9BU01fUEFSUE9SVF9ICisjZGVmaW5lIF9BU01fUEFSUE9SVF9IIDEKKworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBwYXJwb3J0X3BjX2ZpbmRfbm9ucGNpX3BvcnRzIChpbnQgYXV0b2lycSwgaW50IGF1dG9kbWEpCit7CisJLyogbm90aGluZyAhICovCisJcmV0dXJuIDA7Cit9CisKKworI2VuZGlmIC8qICEoX0FTTV9QQVJQT1JUX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvcGNpLmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvcGNpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc2M2MyOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9wY2kuaApAQCAtMCwwICsxLDI0MSBAQAorI2lmbmRlZiBfX0FTTV9QQVJJU0NfUENJX0gKKyNkZWZpbmUgX19BU01fUEFSSVNDX1BDSV9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxhc20vc2NhdHRlcmxpc3QuaD4KKworCisKKy8qCisqKiBIUCBQQ0kgcGxhdGZvcm1zIGdlbmVyYWxseSBzdXBwb3J0IG11bHRpcGxlIGJ1cyBhZGFwdGVycy4KKyoqICAgICh3b3Jrc3RhdGlvbnMgMS1+NCwgc2VydmVycyAyLX4zMikKKyoqCisqKiBOZXdlciBwbGF0Zm9ybXMgbnVtYmVyIHRoZSBidXNzZXMgYWNyb3NzIFBDSSBidXMgYWRhcHRlcnMgKnNwYXJzZWx5Ki4KKyoqIEUuZy4gMCwgOCwgMTYsIC4uLgorKioKKyoqIFVuZGVyIGEgUENJIGJ1cywgbW9zdCBIUCBwbGF0Zm9ybXMgc3VwcG9ydCBQUEJzIHVwIHRvIHR3byBvciB0aHJlZQorKiogbGV2ZWxzIGRlZXAuIFNlZSAiQml0MyIgcHJvZHVjdCBsaW5lLiAKKyovCisjZGVmaW5lIFBDSV9NQVhfQlVTU0VTCTI1NgorCisvKgorKiogcGNpX2hiYV9kYXRhIChha2EgSDJQX09CSkVDVCBpbiBIUC9VWCkKKyoqCisqKiBUaGlzIGlzIHRoZSAiY29tbW9uIiBvciAiYmFzZSIgZGF0YSBzdHJ1Y3R1cmUgd2hpY2ggSEJBIGRyaXZlcnMKKyoqIChlZyBEaW5vIG9yIExCQSkgYXJlIHJlcXVpcmVkIHRvIHBsYWNlIGF0IHRoZSB0b3Agb2YgdGhlaXIgb3duCisqKiBwbGF0Zm9ybV9kYXRhIHN0cnVjdHVyZS4gIEkndmUgaGVhcmQgdGhpcyBjYWxsZWQgIkMgaW5oZXJpdGFuY2UiIHRvby4KKyoqCisqKiBEYXRhIG5lZWRlZCBieSBwY2liaW9zIGxheWVyIGJlbG9uZ3MgaGVyZS4KKyovCitzdHJ1Y3QgcGNpX2hiYV9kYXRhIHsKKwl2b2lkIF9faW9tZW0gICAqYmFzZV9hZGRyOwkvKiBha2EgSG9zdCBQaHlzaWNhbCBBZGRyZXNzICovCisJY29uc3Qgc3RydWN0IHBhcmlzY19kZXZpY2UgKmRldjsgLyogZGV2aWNlIGZyb20gUEEgYnVzIHdhbGsgKi8KKwlzdHJ1Y3QgcGNpX2J1cyAqaGJhX2J1czsJLyogcHJpbWFyeSBQQ0kgYnVzIGJlbG93IEhCQSAqLworCWludAkJaGJhX251bTsJLyogSS9PIHBvcnQgc3BhY2UgYWNjZXNzICJrZXkiICovCisJc3RydWN0IHJlc291cmNlIGJ1c19udW07CS8qIFBDSSBidXMgbnVtYmVycyAqLworCXN0cnVjdCByZXNvdXJjZSBpb19zcGFjZTsJLyogUElPUCAqLworCXN0cnVjdCByZXNvdXJjZSBsbW1pb19zcGFjZTsJLyogYnVzIGFkZHJlc3NlcyA8IDRHYiAqLworCXN0cnVjdCByZXNvdXJjZSBlbG1taW9fc3BhY2U7CS8qIGFkZGl0aW9uYWwgYnVzIGFkZHJlc3NlcyA8IDRHYiAqLworCXN0cnVjdCByZXNvdXJjZSBnbW1pb19zcGFjZTsJLyogYnVzIGFkZHJlc3NlcyA+IDRHYiAqLworCisJLyogTk9URTogRGlubyBjb2RlIGFzc3VtZXMgaXQgY2FuIHVzZSAqYWxsKiBvZiB0aGUgbG1taW9fc3BhY2UsCisJICogZWxtbWlvX3NwYWNlIGFuZCBnbW1pb19zcGFjZSBhcyBhIGNvbnRpZ3VvdXMgYXJyYXkgb2YKKwkgKiByZXNvdXJjZXMuICBUaGlzICNkZWZpbmUgcmVwcmVzZW50cyB0aGUgYXJyYXkgc2l6ZSAqLworCSNkZWZpbmUgRElOT19NQVhfTE1NSU9fUkVTT1VSQ0VTCTMKKworCXVuc2lnbmVkIGxvbmcgICBsbW1pb19zcGFjZV9vZmZzZXQ7ICAvKiBDUFUgdmlldyAtIFBDSSB2aWV3ICovCisJdm9pZCAqICAgICAgICAgIGlvbW11OyAgICAgICAgICAvKiBJT01NVSB0aGlzIGRldmljZSBpcyB1bmRlciAqLworCS8qIFJFVklTSVQgLSBzcGlubG9jayB0byBwcm90ZWN0IHJlc291cmNlcz8gKi8KKworCSNkZWZpbmUgSEJBX05BTUVfU0laRSAxNgorCWNoYXIgaW9fbmFtZVtIQkFfTkFNRV9TSVpFXTsKKwljaGFyIGxtbWlvX25hbWVbSEJBX05BTUVfU0laRV07CisJY2hhciBlbG1taW9fbmFtZVtIQkFfTkFNRV9TSVpFXTsKKwljaGFyIGdtbWlvX25hbWVbSEJBX05BTUVfU0laRV07Cit9OworCisjZGVmaW5lIEhCQV9EQVRBKGQpCQkoKHN0cnVjdCBwY2lfaGJhX2RhdGEgKikgKGQpKQorCisvKiAKKyoqIFdlIHN1cHBvcnQgMl4xNiBJL08gcG9ydHMgcGVyIEhCQS4gIFRoZXNlIGFyZSBzZXQgdXAgaW4gdGhlIGZvcm0KKyoqIDB4YmJ4eHh4LCB3aGVyZSBiYiBpcyB0aGUgYnVzIG51bWJlciBhbmQgeHh4eCBpcyB0aGUgSS9PIHBvcnQKKyoqIHNwYWNlIGFkZHJlc3MuCisqLworI2RlZmluZSBIQkFfUE9SVF9TUEFDRV9CSVRTCTE2CisKKyNkZWZpbmUgSEJBX1BPUlRfQkFTRShoKQkoKGgpIDw8IEhCQV9QT1JUX1NQQUNFX0JJVFMpCisjZGVmaW5lIEhCQV9QT1JUX1NQQUNFX1NJWkUJKDFVTCA8PCBIQkFfUE9SVF9TUEFDRV9CSVRTKQorCisjZGVmaW5lIFBDSV9QT1JUX0hCQShhKQkJKChhKSA+PiBIQkFfUE9SVF9TUEFDRV9CSVRTKQorI2RlZmluZSBQQ0lfUE9SVF9BRERSKGEpCSgoYSkgJiAoSEJBX1BPUlRfU1BBQ0VfU0laRSAtIDEpKQorCisjaWYgQ09ORklHXzY0QklUCisjZGVmaW5lIFBDSV9GX0VYVEVORAkJMHhmZmZmZmZmZjAwMDAwMDAwVUwKKyNkZWZpbmUgUENJX0lTX0xNTUlPKGhiYSxhKQlwY2lfaXNfbG1taW8oaGJhLGEpCisKKy8qIFdlIG5lZWQgdG8ga25vdyBpZiBhbiBhZGRyZXNzIGlzIExNTU1JTyBvciBHTU1JTy4KKyAqIExNTUlPIHJlcXVpcmVzIG1hbmdsaW5nIGFuZCBHTU1JTyB3ZSBtdXN0IHVzZSBhcy1pcy4KKyAqLworc3RhdGljIF9faW5saW5lX18gIGludCBwY2lfaXNfbG1taW8oc3RydWN0IHBjaV9oYmFfZGF0YSAqaGJhLCB1bnNpZ25lZCBsb25nIGEpCit7CisJcmV0dXJuKCgoYSkgJiBQQ0lfRl9FWFRFTkQpID09IFBDSV9GX0VYVEVORCk7Cit9CisKKy8qCisqKiBDb252ZXJ0IGJldHdlZW4gUENJIChJT19WSUVXKSBhZGRyZXNzZXMgYW5kIHByb2Nlc3NvciAoUEFfVklFVykgYWRkcmVzc2VzLgorKiogU2VlIHBjaWJpb3MuYyBmb3IgbW9yZSBjb252ZXJzaW9ucyB1c2VkIGJ5IEdlbmVyaWMgUENJIGNvZGUuCisqLworI2RlZmluZSBQQ0lfQlVTX0FERFIoaGJhLGEpCShQQ0lfSVNfTE1NSU8oaGJhLGEpCVwKKwkJPyAgKChhKSAtIGhiYS0+bG1taW9fc3BhY2Vfb2Zmc2V0KQkvKiBtYW5nbGUgTE1NSU8gKi8gXAorCQk6IChhKSkJCQkJCS8qIEdNTUlPICovCisjZGVmaW5lIFBDSV9IT1NUX0FERFIoaGJhLGEpCSgoYSkgKyBoYmEtPmxtbWlvX3NwYWNlX29mZnNldCkKKworI2Vsc2UJLyogIUNPTkZJR182NEJJVCAqLworCisjZGVmaW5lIFBDSV9CVVNfQUREUihoYmEsYSkJKGEpCisjZGVmaW5lIFBDSV9IT1NUX0FERFIoaGJhLGEpCShhKQorI2RlZmluZSBQQ0lfRl9FWFRFTkQJCTBVTAorI2RlZmluZSBQQ0lfSVNfTE1NSU8oaGJhLGEpCSgxKQkvKiAzMi1iaXQgZG9lc24ndCBzdXBwb3J0IEdNTUlPICovCisKKyNlbmRpZiAvKiAhQ09ORklHXzY0QklUICovCisKKy8qCisqKiBLTFVHRTogbGludXgvcGNpLmggaW5jbHVkZSBhc20vcGNpLmggQkVGT1JFIGRlY2xhcmluZyBzdHJ1Y3QgcGNpX2J1cworKiogKFRoaXMgZWxpbWluYXRlcyBzb21lIG9mIHRoZSB3YXJuaW5ncykuCisqLworc3RydWN0IHBjaV9idXM7CitzdHJ1Y3QgcGNpX2RldjsKKworLyoKKyAqIElmIHRoZSBQQ0kgZGV2aWNlJ3MgdmlldyBvZiBtZW1vcnkgaXMgdGhlIHNhbWUgYXMgdGhlIENQVSdzIHZpZXcgb2YgbWVtb3J5LAorICogUENJX0RNQV9CVVNfSVNfUEhZUyBpcyB0cnVlLiAgVGhlIG5ldHdvcmtpbmcgYW5kIGJsb2NrIGRldmljZSBsYXllcnMgdXNlCisgKiB0aGlzIGJvb2xlYW4gZm9yIGJvdW5jZSBidWZmZXIgZGVjaXNpb25zLgorICovCisjaWZkZWYgQ09ORklHX1BBMjAKKy8qIEFsbCBQQS0yLjAgbWFjaGluZXMgaGF2ZSBhbiBJT01NVS4gKi8KKyNkZWZpbmUgUENJX0RNQV9CVVNfSVNfUEhZUwkwCisjZGVmaW5lIHBhcmlzY19oYXNfaW9tbXUoKQlkbyB7IH0gd2hpbGUgKDApCisjZWxzZQorCisjaWYgZGVmaW5lZChDT05GSUdfSU9NTVVfQ0NJTykgfHwgZGVmaW5lZChDT05GSUdfSU9NTVVfU0JBKQorZXh0ZXJuIGludCBwYXJpc2NfYnVzX2lzX3BoeXM7IAkvKiBpbiBhcmNoL3BhcmlzYy9rZXJuZWwvc2V0dXAuYyAqLworI2RlZmluZSBQQ0lfRE1BX0JVU19JU19QSFlTCXBhcmlzY19idXNfaXNfcGh5cworI2RlZmluZSBwYXJpc2NfaGFzX2lvbW11KCkJZG8geyBwYXJpc2NfYnVzX2lzX3BoeXMgPSAwOyB9IHdoaWxlICgwKQorI2Vsc2UKKyNkZWZpbmUgUENJX0RNQV9CVVNfSVNfUEhZUwkxCisjZGVmaW5lIHBhcmlzY19oYXNfaW9tbXUoKQlkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKworI2VuZGlmCS8qICFDT05GSUdfUEEyMCAqLworCisKKy8qCisqKiBNb3N0IFBDSSBkZXZpY2VzIChlZyBUdWxpcCwgTkNSNzIwKSBhbHNvIGV4cG9ydCB0aGUgc2FtZSByZWdpc3RlcnMKKyoqIHRvIGJvdGggTU1JTyBhbmQgSS9PIHBvcnQgc3BhY2UuICBEdWUgdG8gcG9vciBwZXJmb3JtYW5jZSBvZiBJL08gUG9ydAorKiogYWNjZXNzIHVuZGVyIEhQIFBDSSBidXMgYWRhcHRlcnMsIHN0cm9uZ2x5IHJlY2NvbWVuZCB1c2Ugb2YgTU1JTworKiogYWRkcmVzcyBzcGFjZS4KKyoqCisqKiBXaGlsZSBJJ20gYXQgaXQgbW9yZSBQQSBwcm9ncmFtbWluZyBub3RlczoKKyoqCisqKiAxKSBNTUlPIHN0b3JlcyAod3JpdGVzKSBhcmUgcG9zdGVkIG9wZXJhdGlvbnMuIFRoaXMgbWVhbnMgdGhlIHByb2Nlc3NvcgorKiogICAgZ2V0cyBhbiAiQUNLIiBiZWZvcmUgdGhlIHdyaXRlIGFjdHVhbGx5IGdldHMgdG8gdGhlIGRldmljZS4gQSByZWFkCisqKiAgICB0byB0aGUgc2FtZSBkZXZpY2UgKG9yIHR5cGljYWxseSB0aGUgYnVzIGFkYXB0ZXIgYWJvdmUgaXQpIHdpbGwKKyoqICAgIGZvcmNlIGluLWZsaWdodCB3cml0ZSB0cmFuc2FjdGlvbihzKSBvdXQgdG8gdGhlIHRhcmdldGVkIGRldmljZQorKiogICAgYmVmb3JlIHRoZSByZWFkIGNhbiBjb21wbGV0ZS4KKyoqCisqKiAyKSBUaGUgUHJvZ3JhbW1lZCBJL08gKFBJTykgZGF0YSBtYXkgbm90IGFsd2F5cyBiZSBzdHJvbmdseSBvcmRlcmVkIHdpdGgKKyoqICAgIHJlc3BlY3QgdG8gRE1BIG9uIGFsbCBwbGF0Zm9ybXMuIEllIFBJTyBkYXRhIGNhbiByZWFjaCB0aGUgcHJvY2Vzc29yCisqKiAgICBiZWZvcmUgaW4tZmxpZ2h0IERNQSByZWFjaGVzIG1lbW9yeS4gU2luY2UgbW9zdCBTTVAgUEEgcGxhdGZvcm1zCisqKiAgICBhcmUgSS9PIGNvaGVyZW50LCBpdCBnZW5lcmFsbHkgZG9lc24ndCBtYXR0ZXIuLi5idXQgc29tZXRpbWVzCisqKiAgICBpdCBkb2VzLgorKioKKyoqIEkndmUgaGVscGVkIGRldmljZSBkcml2ZXIgd3JpdGVycyBkZWJ1ZyBib3RoIHR5cGVzIG9mIHByb2JsZW1zLgorKi8KK3N0cnVjdCBwY2lfcG9ydF9vcHMgeworCSAgdTggKCppbmIpICAoc3RydWN0IHBjaV9oYmFfZGF0YSAqaGJhLCB1MTYgcG9ydCk7CisJIHUxNiAoKmludykgIChzdHJ1Y3QgcGNpX2hiYV9kYXRhICpoYmEsIHUxNiBwb3J0KTsKKwkgdTMyICgqaW5sKSAgKHN0cnVjdCBwY2lfaGJhX2RhdGEgKmhiYSwgdTE2IHBvcnQpOworCXZvaWQgKCpvdXRiKSAoc3RydWN0IHBjaV9oYmFfZGF0YSAqaGJhLCB1MTYgcG9ydCwgIHU4IGRhdGEpOworCXZvaWQgKCpvdXR3KSAoc3RydWN0IHBjaV9oYmFfZGF0YSAqaGJhLCB1MTYgcG9ydCwgdTE2IGRhdGEpOworCXZvaWQgKCpvdXRsKSAoc3RydWN0IHBjaV9oYmFfZGF0YSAqaGJhLCB1MTYgcG9ydCwgdTMyIGRhdGEpOworfTsKKworCitzdHJ1Y3QgcGNpX2Jpb3Nfb3BzIHsKKwl2b2lkICgqaW5pdCkodm9pZCk7CisJdm9pZCAoKmZpeHVwX2J1cykoc3RydWN0IHBjaV9idXMgKmJ1cyk7Cit9OworCisvKiBwY2lfdW5tYXBfe3NpbmdsZSxwYWdlfSBpcyBub3QgYSBub3AsIHRodXMuLi4gKi8KKyNkZWZpbmUgREVDTEFSRV9QQ0lfVU5NQVBfQUREUihBRERSX05BTUUpCVwKKwlkbWFfYWRkcl90IEFERFJfTkFNRTsKKyNkZWZpbmUgREVDTEFSRV9QQ0lfVU5NQVBfTEVOKExFTl9OQU1FKQkJXAorCV9fdTMyIExFTl9OQU1FOworI2RlZmluZSBwY2lfdW5tYXBfYWRkcihQVFIsIEFERFJfTkFNRSkJCQlcCisJKChQVFIpLT5BRERSX05BTUUpCisjZGVmaW5lIHBjaV91bm1hcF9hZGRyX3NldChQVFIsIEFERFJfTkFNRSwgVkFMKQkJXAorCSgoKFBUUiktPkFERFJfTkFNRSkgPSAoVkFMKSkKKyNkZWZpbmUgcGNpX3VubWFwX2xlbihQVFIsIExFTl9OQU1FKQkJCVwKKwkoKFBUUiktPkxFTl9OQU1FKQorI2RlZmluZSBwY2lfdW5tYXBfbGVuX3NldChQVFIsIExFTl9OQU1FLCBWQUwpCQlcCisJKCgoUFRSKS0+TEVOX05BTUUpID0gKFZBTCkpCisKKy8qCisqKiBTdHVmZiBkZWNsYXJlZCBpbiBhcmNoL3BhcmlzYy9rZXJuZWwvcGNpLmMKKyovCitleHRlcm4gc3RydWN0IHBjaV9wb3J0X29wcyAqcGNpX3BvcnQ7CitleHRlcm4gc3RydWN0IHBjaV9iaW9zX29wcyAqcGNpX2Jpb3M7CitleHRlcm4gaW50IHBjaV9wb3N0X3Jlc2V0X2RlbGF5OwkvKiBkZWxheSBhZnRlciBkZS1hc3NlcnRpbmcgI1JFU0VUICovCitleHRlcm4gaW50IHBjaV9oYmFfY291bnQ7CitleHRlcm4gc3RydWN0IHBjaV9oYmFfZGF0YSAqcGFyaXNjX3BjaV9oYmFbXTsKKworI2lmZGVmIENPTkZJR19QQ0kKK2V4dGVybiB2b2lkIHBjaWJpb3NfcmVnaXN0ZXJfaGJhKHN0cnVjdCBwY2lfaGJhX2RhdGEgKik7CitleHRlcm4gdm9pZCBwY2liaW9zX3NldF9tYXN0ZXIoc3RydWN0IHBjaV9kZXYgKik7CisjZWxzZQorZXh0ZXJuIGlubGluZSB2b2lkIHBjaWJpb3NfcmVnaXN0ZXJfaGJhKHN0cnVjdCBwY2lfaGJhX2RhdGEgKngpCit7Cit9CisjZW5kaWYKKworLyoKKyAqIHBjaWJpb3NfYXNzaWduX2FsbF9idXNzZXMoKSBpcyB1c2VkIGluIGRyaXZlcnMvcGNpL3BjaS5jOnBjaV9kb19zY2FuX2J1cygpCisgKiAgIDAgPT0gY2hlY2sgaWYgYnJpZGdlIGlzIG51bWJlcmVkIGJlZm9yZSByZS1udW1iZXJpbmcuCisgKiAgIDEgPT0gcGNpX2RvX3NjYW5fYnVzKCkgc2hvdWxkIGF1dG9tYXRpY2FsbHkgbnVtYmVyIGFsbCBQQ0ktUENJIGJyaWRnZXMuCisgKgorICogICBXZSAqc2hvdWxkKiBzZXQgdGhpcyB0byB6ZXJvIGZvciAibGVnYWN5IiBwbGF0Zm9ybXMgYW5kIG9uZQorICogICBmb3IgUEFUIHBsYXRmb3Jtcy4KKyAqCisgKiAgIEJ1dCBsZWdhY3kgcGxhdGZvcm1zIGFsc28gbmVlZCB0byByZW51bWJlciB0aGUgYnVzc2VzIGJlbG93IGEgSG9zdAorICogICBCdXMgY29udHJvbGxlci4gIEFkZGluZyBhIDQtcG9ydCBUdWxpcCBjYXJkIG9uIHRoZSBmaXJzdCBQQ0kgcm9vdAorICogICBidXMgb2YgYSBDMjAwIHJlc3VsdGVkIGluIHRoZSBzZWNvbmRhcnkgYnVzIGJlaW5nIG51bWJlcmVkIGFzIDEuCisgKiAgIFRoZSBzZWNvbmQgUENJIGhvc3QgYnVzIGNvbnRyb2xsZXIncyByb290IGJ1cyBoYWQgYWxyZWFkeSBiZWVuCisgKiAgIGFzc2lnbmVkIGJ1cyBudW1iZXIgMSBieSBmaXJtd2FyZSBhbmQgc3lzZnMgY29tcGxhaW5lZC4KKyAqCisgKiAgIEZpcm13YXJlIGlzbid0IGRvaW5nIGFueXRoaW5nIHdyb25nIGhlcmUgc2luY2UgZWFjaCBjb250cm9sbGVyCisgKiAgIGlzIGl0cyBvd24gUENJIGRvbWFpbi4gIEl0J3Mgc2ltcGxlciBhbmQgZWFzaWVyIGZvciB1cyB0byByZW51bWJlcgorICogICB0aGUgYnVzc2VzIHJhdGhlciB0aGFuIHRyZWF0IGVhY2ggRGlubyBhcyBhIHNlcGFyYXRlIFBDSSBkb21haW4uCisgKiAgIEV2ZW50dWFsbHksIHdlIG1heSB3YW50IHRvIGludHJvZHVjZSBQQ0kgZG9tYWlucyBmb3IgU3VwZXJkb21lIG9yCisgKiAgIHJwNzQyMC84NDIwIGJveGVzIGFuZCB0aGVuIHJldmlzaXQgdGhpcyBpc3N1ZS4KKyAqLworI2RlZmluZSBwY2liaW9zX2Fzc2lnbl9hbGxfYnVzc2VzKCkgICAgICgxKQorI2RlZmluZSBwY2liaW9zX3NjYW5fYWxsX2ZucyhhLCBiKQkoMCkKKworI2RlZmluZSBQQ0lCSU9TX01JTl9JTyAgICAgICAgICAweDEwCisjZGVmaW5lIFBDSUJJT1NfTUlOX01FTSAgICAgICAgIDB4MTAwMCAvKiBOQlBHIC0gYnV0IHBjaS9zZXR1cC1yZXMuYyBkaWVzICovCisKKy8qIERvbid0IHN1cHBvcnQgREFDIHlldC4gKi8KKyNkZWZpbmUgcGNpX2RhY19kbWFfc3VwcG9ydGVkKHBjaV9kZXYsIG1hc2spICAgKDApCisKKy8qIGV4cG9ydCB0aGUgcGNpXyBETUEgQVBJIGluIHRlcm1zIG9mIHRoZSBkbWFfIG9uZSAqLworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BjaS1kbWEtY29tcGF0Lmg+CisKK2V4dGVybiB2b2lkCitwY2liaW9zX3Jlc291cmNlX3RvX2J1cyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgcGNpX2J1c19yZWdpb24gKnJlZ2lvbiwKKwkJCSBzdHJ1Y3QgcmVzb3VyY2UgKnJlcyk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwY2liaW9zX2FkZF9wbGF0Zm9ybV9lbnRyaWVzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7Cit9CisKKyNlbmRpZiAvKiBfX0FTTV9QQVJJU0NfUENJX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9wZGMuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9wZGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTIzZTRjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL3BkYy5oCkBAIC0wLDAgKzEsNzgxIEBACisjaWZuZGVmIF9QQVJJU0NfUERDX0gKKyNkZWZpbmUgX1BBUklTQ19QRENfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKy8qCisgKglQREMgcmV0dXJuIHZhbHVlcyAuLi4KKyAqCUFsbCBQREMgY2FsbHMgcmV0dXJuIGEgc3Vic2V0IG9mIHRoZXNlIGVycm9ycy4gCisgKi8KKworI2RlZmluZSBQRENfV0FSTgkJICAzCS8qIENhbGwgY29tcGxldGVkIHdpdGggYSB3YXJuaW5nICovCisjZGVmaW5lIFBEQ19SRVFfRVJSXzEJCSAgMgkvKiBTZWUgYWJvdmUJCQkgKi8KKyNkZWZpbmUgUERDX1JFUV9FUlJfMAkJICAxCS8qIENhbGwgd291bGQgZ2VuZXJhdGUgYSByZXF1ZXN0b3IgZXJyb3IgKi8KKyNkZWZpbmUgUERDX09LCQkJICAwCS8qIENhbGwgY29tcGxldGVkIHN1Y2Nlc3NmdWxseQkqLworI2RlZmluZSBQRENfQkFEX1BST0MJCSAtMQkvKiBDYWxsZWQgbm9uLWV4aXN0ZW50IHByb2NlZHVyZSovCisjZGVmaW5lIFBEQ19CQURfT1BUSU9OCQkgLTIJLyogQ2FsbGVkIHdpdGggbm9uLWV4aXN0ZW50IG9wdGlvbiAqLworI2RlZmluZSBQRENfRVJST1IJCSAtMwkvKiBDYWxsIGNvdWxkIG5vdCBjb21wbGV0ZSB3aXRob3V0IGFuIGVycm9yICovCisjZGVmaW5lIFBEQ19ORV9NT0QJCSAtNQkvKiBNb2R1bGUgbm90IGZvdW5kCQkqLworI2RlZmluZSBQRENfTkVfQ0VMTF9NT0QJCSAtNwkvKiBDZWxsIG1vZHVsZSBub3QgZm91bmQJKi8KKyNkZWZpbmUgUERDX0lOVkFMSURfQVJHCQktMTAJLyogQ2FsbGVkIHdpdGggYW4gaW52YWxpZCBhcmd1bWVudCAqLworI2RlZmluZSBQRENfQlVTX1BPV19XQVJOCS0xMgkvKiBDYWxsIGNvdWxkIG5vdCBjb21wbGV0ZSBpbiBhbGxvd2VkIHBvd2VyIGJ1ZGdldCAqLworI2RlZmluZSBQRENfTk9UX05BUlJPVwkJLTE3CS8qIE5hcnJvdyBtb2RlIG5vdCBzdXBwb3J0ZWQJKi8KKworCisvKgorICoJUERDIGVudHJ5IHBvaW50cy4uLgorICovCisKKyNkZWZpbmUgUERDX1BPV19GQUlMCTEJCS8qIHBlcmZvcm0gYSBwb3dlci1mYWlsCQkqLworI2RlZmluZSBQRENfUE9XX0ZBSUxfUFJFUEFSRQkwCS8qIHByZXBhcmUgZm9yIHBvd2VyZmFpbAkqLworCisjZGVmaW5lIFBEQ19DSEFTU0lTCTIJCS8qIFBEQy1jaGFzc2lzIGZ1bmN0aW9ucwkqLworI2RlZmluZSBQRENfQ0hBU1NJU19ESVNQCTAJLyogdXBkYXRlIGNoYXNzaXMgZGlzcGxheQkqLworI2RlZmluZSBQRENfQ0hBU1NJU19XQVJOCTEJLyogcmV0dXJuIGNoYXNzaXMgd2FybmluZ3MJKi8KKyNkZWZpbmUgUERDX0NIQVNTSVNfRElTUFdBUk4JMgkvKiB1cGRhdGUmcmV0dXJuIGNoYXNzaXMgc3RhdHVzICovCisjZGVmaW5lIFBEQ19SRVRVUk5fQ0hBU1NJU19JTkZPIDEyOAkvKiBIVkVSU0lPTiBkZXBlbmRlbnQ6IHJldHVybiBjaGFzc2lzIExFRC9MQ0QgaW5mbyAgKi8KKworI2RlZmluZSBQRENfUElNICAgICAgICAgMyAgICAgICAgICAgICAgIC8qIEdldCBQSU0gZGF0YSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUERDX1BJTV9IUE1DICAgICAgICAgICAgMCAgICAgICAvKiBUcmFuc2ZlciBIUE1DIGRhdGEgICAgICAgICAgICovCisjZGVmaW5lIFBEQ19QSU1fUkVUVVJOX1NJWkUgICAgIDEgICAgICAgLyogR2V0IE1heCBidWZmZXIgbmVlZGVkIGZvciBQSU0qLworI2RlZmluZSBQRENfUElNX0xQTUMgICAgICAgICAgICAyICAgICAgIC8qIFRyYW5zZmVyIEhQTUMgZGF0YSAgICAgICAgICAgKi8KKyNkZWZpbmUgUERDX1BJTV9TT0ZUX0JPT1QgICAgICAgMyAgICAgICAvKiBUcmFuc2ZlciBTb2Z0IEJvb3QgZGF0YSAgICAgICovCisjZGVmaW5lIFBEQ19QSU1fVE9DICAgICAgICAgICAgIDQgICAgICAgLyogVHJhbnNmZXIgVE9DIGRhdGEgICAgICAgICAgICAqLworCisjZGVmaW5lIFBEQ19NT0RFTAk0CQkvKiBQREMgbW9kZWwgaW5mb3JtYXRpb24gY2FsbAkqLworI2RlZmluZSBQRENfTU9ERUxfSU5GTwkJMAkvKiByZXR1cm5zIGluZm9ybWF0aW9uIAkJKi8KKyNkZWZpbmUgUERDX01PREVMX0JPT1RJRAkxCS8qIHNldCB0aGUgQk9PVF9JRAkJKi8KKyNkZWZpbmUgUERDX01PREVMX1ZFUlNJT05TCTIJLyogcmV0dXJucyBjcHUtaW50ZXJuYWwgdmVyc2lvbnMqLworI2RlZmluZSBQRENfTU9ERUxfU1lTTU9ERUwJMwkvKiByZXR1cm4gc3lzdGVtIG1vZGVsIGluZm8JKi8KKyNkZWZpbmUgUERDX01PREVMX0VOU1BFQwk0CS8qIGVuYWJsZSBzcGVjaWZpYyBvcHRpb24JKi8KKyNkZWZpbmUgUERDX01PREVMX0RJU1BFQwk1CS8qIGRpc2FibGUgc3BlY2lmaWMgb3B0aW9uCSovCisjZGVmaW5lIFBEQ19NT0RFTF9DUFVfSUQJNgkvKiByZXR1cm5zIGNwdS1pZCAob25seSBuZXdlciBtYWNoaW5lcyEpICovCisjZGVmaW5lIFBEQ19NT0RFTF9DQVBBQklMSVRJRVMJNwkvKiByZXR1cm5zIE9TMzIvT1M2NC1mbGFncwkqLworI2RlZmluZSBQRENfTU9ERUxfR0VUX0JPT1RfX09QCTgJLyogcmV0dXJucyBib290IHRlc3Qgb3B0aW9ucwkqLworI2RlZmluZSBQRENfTU9ERUxfU0VUX0JPT1RfX09QCTkJLyogc2V0IGJvb3QgdGVzdCBvcHRpb25zCSovCisKKyNkZWZpbmUgUEE4OV9JTlNUUlVDVElPTl9TRVQJMHg0CS8qIGNhcGF0aWJpbGllcyByZXR1cm5lZAkqLworI2RlZmluZSBQQTkwX0lOU1RSVUNUSU9OX1NFVAkweDgKKworI2RlZmluZSBQRENfQ0FDSEUJNQkJLyogcmV0dXJuL3NldCBjYWNoZSAoJiBUTEIpIGluZm8qLworI2RlZmluZSBQRENfQ0FDSEVfSU5GTwkJMAkvKiByZXR1cm5zIGluZm9ybWF0aW9uIAkJKi8KKyNkZWZpbmUgUERDX0NBQ0hFX1NFVF9DT0gJMQkvKiBzZXQgY29oZXJlbmNlIHN0YXRlCQkqLworI2RlZmluZSBQRENfQ0FDSEVfUkVUX1NQSUQJMgkvKiByZXR1cm5zIHNwYWNlLUlEIGJpdHMJKi8KKworI2RlZmluZSBQRENfSFBBCQk2CQkvKiByZXR1cm4gSFBBIG9mIHByb2Nlc3NvcgkqLworI2RlZmluZSBQRENfSFBBX1BST0NFU1NPUgkwCisjZGVmaW5lIFBEQ19IUEFfTU9EVUxFUwkJMQorCisjZGVmaW5lIFBEQ19DT1BST0MJNwkJLyogQ28tUHJvY2Vzc29yICh1c3VhbGx5IEZQIHVuaXQocykpICovCisjZGVmaW5lIFBEQ19DT1BST0NfQ0ZHCQkwCS8qIENvLVByb2Nlc3NvciBDZmcgKEZQIHVuaXQocykgZW5hYmxlZD8pICovCisKKyNkZWZpbmUgUERDX0lPREMJOAkJLyogdGFsayB0byBJT0RDCQkJKi8KKyNkZWZpbmUgUERDX0lPRENfUkVBRAkJMAkvKiByZWFkIElPREMgZW50cnkgcG9pbnQJKi8KKy8qICAgICAgUERDX0lPRENfUklfCQkJICogSU5ERVggcGFyYW1ldGVyIG9mIFBEQ19JT0RDX1JFQUQgKi8KKyNkZWZpbmUgUERDX0lPRENfUklfREFUQV9CWVRFUwkwCS8qIElPREMgRGF0YSBCeXRlcwkJKi8KKy8qCQkJCTEsIDIJICAgb2Jzb2xldGUgLSBIVkVSU0lPTiBkZXBlbmRlbnQqLworI2RlZmluZSBQRENfSU9EQ19SSV9JTklUCTMJLyogSW5pdGlhbGl6ZSBtb2R1bGUJCSovCisjZGVmaW5lIFBEQ19JT0RDX1JJX0lPCQk0CS8qIE1vZHVsZSBpbnB1dC9vdXRwdXQJCSovCisjZGVmaW5lIFBEQ19JT0RDX1JJX1NQQQkJNQkvKiBNb2R1bGUgaW5wdXQvb3V0cHV0CQkqLworI2RlZmluZSBQRENfSU9EQ19SSV9DT05GSUcJNgkvKiBNb2R1bGUgaW5wdXQvb3V0cHV0CQkqLworLyoJCQkJNwkgIG9ic29sZXRlIC0gSFZFUlNJT04gZGVwZW5kZW50ICovCisjZGVmaW5lIFBEQ19JT0RDX1JJX1RFU1QJOAkvKiBNb2R1bGUgaW5wdXQvb3V0cHV0CQkqLworI2RlZmluZSBQRENfSU9EQ19SSV9UTEIJCTkJLyogTW9kdWxlIGlucHV0L291dHB1dAkJKi8KKyNkZWZpbmUgUERDX0lPRENfTklOSVQJCTIJLyogbm9uLWRlc3RydWN0aXZlIGluaXQJCSovCisjZGVmaW5lIFBEQ19JT0RDX0RJTklUCQkzCS8qIGRlc3RydWN0aXZlIGluaXQJCSovCisjZGVmaW5lIFBEQ19JT0RDX01FTUVSUgkJNAkvKiBjaGVjayBmb3IgbWVtb3J5IGVycm9ycwkqLworI2RlZmluZSBQRENfSU9EQ19JTkRFWF9EQVRBCTAJLyogZ2V0IGZpcnN0IDE2IGJ5dGVzIGZyb20gbW9kIElPREMgKi8KKyNkZWZpbmUgUERDX0lPRENfQlVTX0VSUk9SCS00CS8qIGJ1cyBlcnJvciByZXR1cm4gdmFsdWUJKi8KKyNkZWZpbmUgUERDX0lPRENfSU5WQUxJRF9JTkRFWAktNQkvKiBpbnZhbGlkIGluZGV4IHJldHVybiB2YWx1ZQkqLworI2RlZmluZSBQRENfSU9EQ19DT1VOVAkJLTYJLyogY291bnQgaXMgdG9vIHNtYWxsCQkqLworCisjZGVmaW5lIFBEQ19UT0QJCTkJCS8qIHRpbWUtb2YtZGF5IGNsb2NrIChUT0QpCSovCisjZGVmaW5lIFBEQ19UT0RfUkVBRAkJMAkvKiByZWFkIFRPRAkJCSovCisjZGVmaW5lIFBEQ19UT0RfV1JJVEUJCTEJLyogd3JpdGUgVE9ECQkJKi8KKyNkZWZpbmUgUERDX1RPRF9JVElNRVIJCTIJLyogY2FsaWJyYXRlIEludGVydmFsIFRpbWVyIChDUjE2KSAqLworCisjZGVmaW5lIFBEQ19TVEFCTEUJMTAJCS8qIHN0YWJsZSBzdG9yYWdlIChzcHJvY2tldHMpCSovCisjZGVmaW5lIFBEQ19TVEFCTEVfUkVBRAkJMAorI2RlZmluZSBQRENfU1RBQkxFX1dSSVRFCTEKKyNkZWZpbmUgUERDX1NUQUJMRV9SRVRVUk5fU0laRQkyCisjZGVmaW5lIFBEQ19TVEFCTEVfVkVSSUZZX0NPTlRFTlRTIDMKKyNkZWZpbmUgUERDX1NUQUJMRV9JTklUSUFMSVpFCTQKKworI2RlZmluZSBQRENfTlZPTEFUSUxFCTExCQkvKiBvZnRlbiBub3QgaW1wbGVtZW50ZWQJKi8KKworI2RlZmluZSBQRENfQUREX1ZBTElECTEyCQkvKiBNZW1vcnkgdmFsaWRhdGlvbiBQREMgY2FsbAkqLworI2RlZmluZSBQRENfQUREX1ZBTElEX1ZFUklGWQkwCS8qIE1ha2UgUERDX0FERF9WQUxJRCB2ZXJpZnkgcmVnaW9uICovCisKKyNkZWZpbmUgUERDX0lOU1RSCTE1CQkvKiBnZXQgaW5zdHIgdG8gaW52b2tlIFBEQ0VfQ0hFQ0soKSAqLworCisjZGVmaW5lIFBEQ19QUk9DCTE2CQkvKiAoc3Byb2NrZXRzKQkJCSovCisKKyNkZWZpbmUgUERDX0NPTkZJRwkxNgkJLyogKHNwcm9ja2V0cykJCQkqLworI2RlZmluZSBQRENfQ09ORklHX0RFQ09ORklHCTAKKyNkZWZpbmUgUERDX0NPTkZJR19EUkVDT05GSUcJMQorI2RlZmluZSBQRENfQ09ORklHX0RSRVRVUk5fQ09ORklHIDIKKworI2RlZmluZSBQRENfQkxPQ0tfVExCCTE4CQkvKiBtYW5hZ2UgaGFyZHdhcmUgYmxvY2stVExCCSovCisjZGVmaW5lIFBEQ19CVExCX0lORk8JCTAJLyogcmV0dXJucyBwYXJhbWV0ZXIgCQkqLworI2RlZmluZSBQRENfQlRMQl9JTlNFUlQJCTEJLyogaW5zZXJ0IEJUTEIgZW50cnkJCSovCisjZGVmaW5lIFBEQ19CVExCX1BVUkdFCQkyCS8qIHB1cmdlIEJUTEIgZW50cmllcyAJCSovCisjZGVmaW5lIFBEQ19CVExCX1BVUkdFX0FMTAkzCS8qIHB1cmdlIGFsbCBCVExCIGVudHJpZXMgCSovCisKKyNkZWZpbmUgUERDX1RMQgkJMTkJCS8qIG1hbmFnZSBoYXJkd2FyZSBUTEIgbWlzcyBoYW5kbGluZyAqLworI2RlZmluZSBQRENfVExCX0lORk8JCTAJLyogcmV0dXJucyBwYXJhbWV0ZXIgCQkqLworI2RlZmluZSBQRENfVExCX1NFVFVQCQkxCS8qIHNldCB1cCBtaXNzIGhhbmRsaW5nIAkqLworCisjZGVmaW5lIFBEQ19NRU0JCTIwCQkvKiBNYW5hZ2UgbWVtb3J5CQkqLworI2RlZmluZSBQRENfTUVNX01FTUlORk8JCTAKKyNkZWZpbmUgUERDX01FTV9BRERfUEFHRQkxCisjZGVmaW5lIFBEQ19NRU1fQ0xFQVJfUERUCTIKKyNkZWZpbmUgUERDX01FTV9SRUFEX1BEVAkzCisjZGVmaW5lIFBEQ19NRU1fUkVTRVRfQ0xFQVIJNAorI2RlZmluZSBQRENfTUVNX0dPT0RNRU0JCTUKKyNkZWZpbmUgUERDX01FTV9UQUJMRQkJMTI4CS8qIE5vbiBjb250aWcgbWVtIG1hcCAoc3Byb2NrZXRzKSAqLworI2RlZmluZSBQRENfTUVNX1JFVFVSTl9BRERSRVNTX1RBQkxFCVBEQ19NRU1fVEFCTEUKKyNkZWZpbmUgUERDX01FTV9HRVRfTUVNT1JZX1NZU1RFTV9UQUJMRVNfU0laRQkxMzEKKyNkZWZpbmUgUERDX01FTV9HRVRfTUVNT1JZX1NZU1RFTV9UQUJMRVMJMTMyCisjZGVmaW5lIFBEQ19NRU1fR0VUX1BIWVNJQ0FMX0xPQ0FUSU9OX0ZST01fTUVNT1JZX0FERFJFU1MgMTMzCisKKyNkZWZpbmUgUERDX01FTV9SRVRfU0JFX1JFUExBQ0VECTUJLyogUERDX01FTSByZXR1cm4gdmFsdWVzICovCisjZGVmaW5lIFBEQ19NRU1fUkVUX0RVUExJQ0FURV9FTlRSWQk0CisjZGVmaW5lIFBEQ19NRU1fUkVUX0JVRl9TSVpFX1NNQUxMCTEKKyNkZWZpbmUgUERDX01FTV9SRVRfUERUX0ZVTEwJCS0xMQorI2RlZmluZSBQRENfTUVNX1JFVF9JTlZBTElEX1BIWVNJQ0FMX0xPQ0FUSU9OIH4wVUxMCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCit0eXBlZGVmIHN0cnVjdCB7CisgICAgdW5zaWduZWQgbG9uZyBsb25nCWJhc2VBZGRyOworICAgIHVuc2lnbmVkIGludAlwYWdlczsKKyAgICB1bnNpZ25lZCBpbnQJcmVzZXJ2ZWQ7Cit9IE1lbUFkZHJUYWJsZV90OworI2VuZGlmCisKKworI2RlZmluZSBQRENfUFNXCQkyMQkJLyogR2V0L1NldCBkZWZhdWx0IFN5c3RlbSBNYXNrICAqLworI2RlZmluZSBQRENfUFNXX01BU0sJCTAJLyogUmV0dXJuIG1hc2sgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQRENfUFNXX0dFVF9ERUZBVUxUUwkxCS8qIFJldHVybiBkZWZhdWx0cyAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUERDX1BTV19TRVRfREVGQVVMVFMJMgkvKiBTZXQgZGVmYXVsdCAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBEQ19QU1dfRU5ESUFOX0JJVAkxCS8qIHNldCBmb3IgYmlnIGVuZGlhbiAgICAgICAgICAgKi8KKyNkZWZpbmUgUERDX1BTV19XSURFX0JJVAkyCS8qIHNldCBmb3Igd2lkZSBtb2RlICAgICAgICAgICAgKi8gCisKKyNkZWZpbmUgUERDX1NZU1RFTV9NQVAJMjIJCS8qIGZpbmQgc3lzdGVtIG1vZHVsZXMJCSovCisjZGVmaW5lIFBEQ19GSU5EX01PRFVMRSAJMAorI2RlZmluZSBQRENfRklORF9BRERSRVNTCTEKKyNkZWZpbmUgUERDX1RSQU5TTEFURV9QQVRICTIKKworI2RlZmluZSBQRENfU09GVF9QT1dFUgkyMwkJLyogc29mdCBwb3dlciBzd2l0Y2gJCSovCisjZGVmaW5lIFBEQ19TT0ZUX1BPV0VSX0lORk8JMAkvKiByZXR1cm4gaW5mbyBhYm91dCB0aGUgc29mdCBwb3dlciBzd2l0Y2ggKi8KKyNkZWZpbmUgUERDX1NPRlRfUE9XRVJfRU5BQkxFCTEJLyogZW5hYmxlL2Rpc2FibGUgc29mdCBwb3dlciBzd2l0Y2ggKi8KKworCisvKiBIVkVSU0lPTiBkZXBlbmRlbnQgKi8KKworLyogVGhlIFBEQ19NRU1fTUFQIGNhbGxzICovCisjZGVmaW5lIFBEQ19NRU1fTUFQCTEyOAkJLyogb24gczcwMDogcmV0dXJuIHBhZ2UgaW5mbwkqLworI2RlZmluZSBQRENfTUVNX01BUF9IUEEJCTAJLyogcmV0dXJucyBocGEgb2YgYSBtb2R1bGUJKi8KKworI2RlZmluZSBQRENfRUVQUk9NCTEyOQkJLyogRUVQUk9NIGFjY2VzcwkJKi8KKyNkZWZpbmUgUERDX0VFUFJPTV9SRUFEX1dPUkQJMAorI2RlZmluZSBQRENfRUVQUk9NX1dSSVRFX1dPUkQJMQorI2RlZmluZSBQRENfRUVQUk9NX1JFQURfQllURQkyCisjZGVmaW5lIFBEQ19FRVBST01fV1JJVEVfQllURQkzCisjZGVmaW5lIFBEQ19FRVBST01fRUVQUk9NX1BBU1NXT1JEIC0xMDAwCisKKyNkZWZpbmUgUERDX05WTQkJMTMwCQkvKiBOVk0gKG5vbi12b2xhdGlsZSBtZW1vcnkpIGFjY2VzcyAqLworI2RlZmluZSBQRENfTlZNX1JFQURfV09SRAkwCisjZGVmaW5lIFBEQ19OVk1fV1JJVEVfV09SRAkxCisjZGVmaW5lIFBEQ19OVk1fUkVBRF9CWVRFCTIKKyNkZWZpbmUgUERDX05WTV9XUklURV9CWVRFCTMKKworI2RlZmluZSBQRENfU0VFRF9FUlJPUgkxMzIJCS8qIChzcHJvY2tldHMpCQkJKi8KKworI2RlZmluZSBQRENfSU8JCTEzNQkJLyogbG9nIGVycm9yIGluZm8sIHJlc2V0IElPIHN5c3RlbSAqLworI2RlZmluZSBQRENfSU9fUkVBRF9BTkRfQ0xFQVJfRVJST1JTCTAKKyNkZWZpbmUgUERDX0lPX1JFU0VUCQkJMQorI2RlZmluZSBQRENfSU9fUkVTRVRfREVWSUNFUwkJMgorLyogc2V0cyBiaXRzIDYmNyAobGl0dGxlIGVuZGlhbikgb2YgdGhlIEhjQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBQRENfSU9fVVNCX1NVU1BFTkQJMHhDMDAwMDAwMDAwMDAwMDAwCisjZGVmaW5lIFBEQ19JT19FRVBST01fSU9fRVJSX1RBQkxFX0ZVTEwJLTUJLyogcmV0dXJuIHZhbHVlICovCisjZGVmaW5lIFBEQ19JT19OT19TVVNQRU5ECQktNgkvKiByZXR1cm4gdmFsdWUgKi8KKworI2RlZmluZSBQRENfQlJPQURDQVNUX1JFU0VUIDEzNgkJLyogcmVzZXQgYWxsIHByb2Nlc3NvcnMJCSovCisjZGVmaW5lIFBEQ19ET19SRVNFVAkJMAkvKiBvcHRpb246IHBlcmZvcm0gYSBicm9hZGNhc3QgcmVzZXQgKi8KKyNkZWZpbmUgUERDX0RPX0ZJUk1fVEVTVF9SRVNFVAkxCS8qIERvIGJyb2FkY2FzdCByZXNldCB3aXRoIGJpdG1hcCAqLworI2RlZmluZSBQRENfQlJfUkVDT05GSUdVUkFUSU9OCTIJLyogcmVzZXQgdy9yZWNvbmZpZ3VyYXRpb24JKi8KKyNkZWZpbmUgUERDX0ZJUk1fVEVTVF9NQUdJQwkweGFiOWVjMzZmVUwgICAgLyogZm9yIHRoaXMgcmVib290IG9ubHkJKi8KKworI2RlZmluZSBQRENfTEFOX1NUQVRJT05fSUQgMTM4CQkvKiBIdmVyc2lvbiBkZXBlbmRlbnQgbWVjaGFuaXNtIGZvciAqLworI2RlZmluZSBQRENfTEFOX1NUQVRJT05fSURfUkVBRAkwCS8qIGdldHRpbmcgdGhlIGxhbiBzdGF0aW9uIGFkZHJlc3MgICovCisKKyNkZWZpbmUJUERDX0xBTl9TVEFUSU9OX0lEX1NJWkUJNgorCisjZGVmaW5lIFBEQ19DSEVDS19SQU5HRVMgMTM5CQkvKiAoc3Byb2NrZXRzKQkJCSovCisKKyNkZWZpbmUgUERDX05WX1NFQ1RJT05TCTE0MQkJLyogKHNwcm9ja2V0cykJCQkqLworCisjZGVmaW5lIFBEQ19QRVJGT1JNQU5DRQkxNDIJCS8qIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcJKi8KKworI2RlZmluZSBQRENfU1lTVEVNX0lORk8JMTQzCQkvKiBzeXN0ZW0gaW5mb3JtYXRpb24JCSovCisjZGVmaW5lIFBEQ19TWVNJTkZPX1JFVFVSTl9JTkZPX1NJWkUJMAorI2RlZmluZSBQRENfU1lTSU5GT19SUkVUVVJOX1NZU19JTkZPCTEKKyNkZWZpbmUgUERDX1NZU0lORk9fUlJFVFVSTl9FUlJPUlMJMgorI2RlZmluZSBQRENfU1lTSU5GT19SUkVUVVJOX1dBUk5JTkdTCTMKKyNkZWZpbmUgUERDX1NZU0lORk9fUkVUVVJOX1JFVklTSU9OUwk0CisjZGVmaW5lIFBEQ19TWVNJTkZPX1JSRVRVUk5fRElBR05PU0UJNQorI2RlZmluZSBQRENfU1lTSU5GT19SUkVUVVJOX0hWX0RJQUdOT1NFCTEwMDUKKworI2RlZmluZSBQRENfUkRSCQkxNDQJCS8qIChzcHJvY2tldHMpCQkJKi8KKyNkZWZpbmUgUERDX1JEUl9SRUFEX0JVRkZFUgkwCisjZGVmaW5lIFBEQ19SRFJfUkVBRF9TSU5HTEUJMQorI2RlZmluZSBQRENfUkRSX1dSSVRFX1NJTkdMRQkyCisKKyNkZWZpbmUgUERDX0lOVFJJR1VFCTE0NSAJCS8qIChzcHJvY2tldHMpCQkJKi8KKyNkZWZpbmUgUERDX0lOVFJJR1VFX1dSSVRFX0JVRkZFUiAJIDAKKyNkZWZpbmUgUERDX0lOVFJJR1VFX0dFVF9TQ1JBVENIX0JVRlNJWkUgMQorI2RlZmluZSBQRENfSU5UUklHVUVfU1RBUlRfQ1BVX0NPVU5URVJTCSAyCisjZGVmaW5lIFBEQ19JTlRSSUdVRV9TVE9QX0NQVV9DT1VOVEVSUwkgMworCisjZGVmaW5lIFBEQ19TVEkJCTE0NiAJCS8qIFNUSSBhY2Nlc3MJCQkqLworLyogc2FtZSBhcyBQRENfUENJX1hYWCB2YWx1ZXMgKHNlZSBiZWxvdykgKi8KKworLyogTGVnYWN5IFBEQyBkZWZpbml0aW9ucyBmb3Igc2FtZSBzdHVmZiAqLworI2RlZmluZSBQRENfUENJX0lOREVYCTE0NworI2RlZmluZSBQRENfUENJX0lOVEVSRkFDRV9JTkZPCQkwCisjZGVmaW5lIFBEQ19QQ0lfU0xPVF9JTkZPCQkxCisjZGVmaW5lIFBEQ19QQ0lfSU5GTElHSFRfQllURVMJCTIKKyNkZWZpbmUgUERDX1BDSV9SRUFEX0NPTkZJRwkJMworI2RlZmluZSBQRENfUENJX1dSSVRFX0NPTkZJRwkJNAorI2RlZmluZSBQRENfUENJX1JFQURfUENJX0lPCQk1CisjZGVmaW5lIFBEQ19QQ0lfV1JJVEVfUENJX0lPCQk2CisjZGVmaW5lIFBEQ19QQ0lfUkVBRF9DT05GSUdfREVMQVkJNworI2RlZmluZSBQRENfUENJX1VQREFURV9DT05GSUdfREVMQVkJOAorI2RlZmluZSBQRENfUENJX1BDSV9QQVRIX1RPX1BDSV9IUEEJOQorI2RlZmluZSBQRENfUENJX1BDSV9IUEFfVE9fUENJX1BBVEgJMTAKKyNkZWZpbmUgUERDX1BDSV9QQ0lfUEFUSF9UT19QQ0lfQlVTCTExCisjZGVmaW5lIFBEQ19QQ0lfUENJX1JFU0VSVkVECQkxMgorI2RlZmluZSBQRENfUENJX1BDSV9JTlRfUk9VVEVfU0laRQkxMworI2RlZmluZSBQRENfUENJX0dFVF9JTlRfVEJMX1NJWkUJUERDX1BDSV9QQ0lfSU5UX1JPVVRFX1NJWkUKKyNkZWZpbmUgUERDX1BDSV9QQ0lfSU5UX1JPVVRFCQkxNAorI2RlZmluZSBQRENfUENJX0dFVF9JTlRfVEJMCQlQRENfUENJX1BDSV9JTlRfUk9VVEUgCisjZGVmaW5lIFBEQ19QQ0lfUkVBRF9NT05fVFlQRQkJMTUKKyNkZWZpbmUgUERDX1BDSV9XUklURV9NT05fVFlQRQkJMTYKKworCisvKiBHZXQgU0NTSSBJbnRlcmZhY2UgQ2FyZCBpbmZvOiAgU0RUUiwgU0NTSSBJRCwgbW9kZSAoU0UgdnMgTFZEKSAqLworI2RlZmluZSBQRENfSU5JVElBVE9SCTE2MworI2RlZmluZSBQRENfR0VUX0lOSVRJQVRPUgkwCisjZGVmaW5lIFBEQ19TRVRfSU5JVElBVE9SCTEKKyNkZWZpbmUgUERDX0RFTEVURV9JTklUSUFUT1IJMgorI2RlZmluZSBQRENfUkVUVVJOX1RBQkxFX1NJWkUJMworI2RlZmluZSBQRENfUkVUVVJOX1RBQkxFCTQKKworI2RlZmluZSBQRENfTElOSwkxNjUgCQkvKiAoc3Byb2NrZXRzKQkJCSovCisjZGVmaW5lIFBEQ19MSU5LX1BDSV9FTlRSWV9QT0lOVFMJMCAgLyogbGlzdCAoQXJnMSkgPSAwICovCisjZGVmaW5lIFBEQ19MSU5LX1VTQl9FTlRSWV9QT0lOVFMJMSAgLyogbGlzdCAoQXJnMSkgPSAxICovCisKKworLyogY29uc3RhbnRzIGZvciBPUyAoTlZNLi4uKSAqLworI2RlZmluZSBPU19JRF9OT05FCQkwCS8qIFVuZGVmaW5lZCBPUyBJRAkqLworI2RlZmluZSBPU19JRF9IUFVYCQkxCS8qIEhQLVVYIE9TCQkqLworI2RlZmluZSBPU19JRF9MSU5VWAkJT1NfSURfSFBVWCAvKiBqdXN0IHVzZSB0aGUgc2FtZSB2YWx1ZSBhcyBocHV4ICovCisjZGVmaW5lIE9TX0lEX01QRVhMCQkyCS8qIE1QRSBYTCBPUwkJKi8KKyNkZWZpbmUgT1NfSURfT1NGCQkzCS8qIE9TRiBPUwkJKi8KKyNkZWZpbmUgT1NfSURfSFBSVAkJNAkvKiBIUC1SVCBPUwkJKi8KKyNkZWZpbmUgT1NfSURfTk9WRUwJCTUJLyogTk9WRUxMIE9TCQkqLworI2RlZmluZSBPU19JRF9OVAkJNgkvKiBOVCBPUwkJKi8KKworCisvKiBjb25zdGFudHMgZm9yIFBEQ19DSEFTU0lTICovCisjZGVmaW5lIE9TVEFUX09GRgkJMAorI2RlZmluZSBPU1RBVF9GTFQJCTEgCisjZGVmaW5lIE9TVEFUX1RFU1QJCTIKKyNkZWZpbmUgT1NUQVRfSU5JVAkJMworI2RlZmluZSBPU1RBVF9TSFVUCQk0CisjZGVmaW5lIE9TVEFUX1dBUk4JCTUKKyNkZWZpbmUgT1NUQVRfUlVOCQk2CisjZGVmaW5lIE9TVEFUX09OCQk3CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitleHRlcm4gaW50IHBkY190eXBlOworCisvKiBWYWx1ZXMgZm9yIHBkY190eXBlICovCisjZGVmaW5lIFBEQ19UWVBFX0lMTEVHQUwJLTEKKyNkZWZpbmUgUERDX1RZUEVfUEFUCQkgMCAvKiA2NC1iaXQgUEFULVBEQyAqLworI2RlZmluZSBQRENfVFlQRV9TWVNURU1fTUFQCSAxIC8qIDMyLWJpdCwgYnV0IHN1cHBvcnRzIFBEQ19TWVNURU1fTUFQICovCisjZGVmaW5lIFBEQ19UWVBFX1NOQUtFCQkgMiAvKiBEb2Vzbid0IHN1cHBvcnQgU1lTVEVNX01BUCAqLworCitzdHJ1Y3QgcGRjX2NoYXNzaXNfaW5mbyB7ICAgICAgIC8qIGZvciBQRENfQ0hBU1NJU19JTkZPICovCisJdW5zaWduZWQgbG9uZyBhY3RjbnQ7ICAgLyogYWN0dWFsIG51bWJlciBvZiBieXRlcyByZXR1cm5lZCAqLworCXVuc2lnbmVkIGxvbmcgbWF4Y250OyAgIC8qIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRoYXQgY291bGQgYmUgcmV0dXJuZWQgKi8KK307CisKK3N0cnVjdCBwZGNfY29wcm9jX2NmZyB7ICAgICAgICAgLyogZm9yIFBEQ19DT1BST0NfQ0ZHICovCisgICAgICAgIHVuc2lnbmVkIGxvbmcgY2NyX2Z1bmN0aW9uYWw7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgY2NyX3ByZXNlbnQ7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgcmV2aXNpb247CisgICAgICAgIHVuc2lnbmVkIGxvbmcgbW9kZWw7Cit9OworCitzdHJ1Y3QgcGRjX21vZGVsIHsJCS8qIGZvciBQRENfTU9ERUwgKi8KKwl1bnNpZ25lZCBsb25nIGh2ZXJzaW9uOworCXVuc2lnbmVkIGxvbmcgc3ZlcnNpb247CisJdW5zaWduZWQgbG9uZyBod19pZDsKKwl1bnNpZ25lZCBsb25nIGJvb3RfaWQ7CisJdW5zaWduZWQgbG9uZyBzd19pZDsKKwl1bnNpZ25lZCBsb25nIHN3X2NhcDsKKwl1bnNpZ25lZCBsb25nIGFyY2hfcmV2OworCXVuc2lnbmVkIGxvbmcgcG90X2tleTsKKwl1bnNpZ25lZCBsb25nIGN1cnJfa2V5OworfTsKKworLyogVmFsdWVzIGZvciBQRENfTU9ERUxfQ0FQQUJJTElURVMgbm9uLWVxdWl2YWxlbnQgdmlydHVhbCBhbGlhc2luZyBzdXBwb3J0ICovCisKKyNkZWZpbmUgUERDX01PREVMX0lPUERJUl9GREMgICAgICAgICAgICAoMSA8PCAyKSAgICAgICAgLyogc2VlIHNiYV9pb21tdS5jICovCisjZGVmaW5lIFBEQ19NT0RFTF9OVkFfTUFTSwkJKDMgPDwgNCkKKyNkZWZpbmUgUERDX01PREVMX05WQV9TVVBQT1JURUQJCSgwIDw8IDQpCisjZGVmaW5lIFBEQ19NT0RFTF9OVkFfU0xPVwkJKDEgPDwgNCkKKyNkZWZpbmUgUERDX01PREVMX05WQV9VTlNVUFBPUlRFRAkoMyA8PCA0KQorCitzdHJ1Y3QgcGRjX2NhY2hlX2NmIHsJCS8qIGZvciBQRENfQ0FDSEUgIChJL0QtY2FjaGVzKSAqLworICAgIHVuc2lnbmVkIGxvbmcKKyNpZmRlZiBfX0xQNjRfXworCQljY19wYWRXOjMyLAorI2VuZGlmCisJCWNjX2FsaWFzOiA0LAkvKiBhbGlhcyBib3VuZGFyaWVzIGZvciB2aXJ0dWFsIGFkZHJlc3NlcyAgICovCisJCWNjX2Jsb2NrOiA0LAkvKiB0byBkZXRlcm1pbmUgbW9zdCBlZmZpY2llbnQgc3RyaWRlICovCisJCWNjX2xpbmUJOiAzLAkvKiBtYXhpbXVtIGFtb3VudCB3cml0dGVuIGJhY2sgYXMgYSByZXN1bHQgb2Ygc3RvcmUgKG11bHRpcGxlIG9mIDE2IGJ5dGVzKSAqLworCQljY19zaGlmdDogMiwJLyogaG93IG11Y2ggdG8gc2hpZnQgY2NfYmxvY2sgbGVmdCAqLworCQljY193dAk6IDEsCS8qIDAgPSBXVC1EY2FjaGUsIDEgPSBXQi1EY2FjaGUgKi8KKwkJY2Nfc2gJOiAyLAkvKiAwID0gc2VwYXJhdGUgSS9ELWNhY2hlLCBlbHNlIHNoYXJlZCBJL0QtY2FjaGUgKi8KKwkJY2NfY3N0ICA6IDMsCS8qIDAgPSBpbmNvaGVyZW50IEQtY2FjaGUsIDE9Y29oZXJlbnQgRC1jYWNoZSAqLworCQljY19wYWQxIDogNSwJLyogcmVzZXJ2ZWQgKi8KKwkJY2NfYXNzb2M6IDg7CS8qIGFzc29jaWF0aXZpdHkgb2YgSS9ELWNhY2hlICovCit9OworCitzdHJ1Y3QgcGRjX3RsYl9jZiB7CQkvKiBmb3IgUERDX0NBQ0hFIChJL0QtVExCJ3MpICovCisgICAgdW5zaWduZWQgbG9uZyB0Y19wYWQwOjEyLAkvKiByZXNlcnZlZCAqLworI2lmZGVmIF9fTFA2NF9fCisJCXRjX3BhZFc6MzIsCisjZW5kaWYKKwkJdGNfc2gJOiAyLAkvKiAwID0gc2VwYXJhdGUgSS9ELVRMQiwgZWxzZSBzaGFyZWQgSS9ELVRMQiAqLworCQl0Y19odiAgIDogMSwJLyogSFYgKi8KKwkJdGNfcGFnZSA6IDEsCS8qIDAgPSAySyBwYWdlLXNpemUtbWFjaGluZSwgMSA9IDRrIHBhZ2Ugc2l6ZSAqLworCQl0Y19jc3QgIDogMywJLyogMCA9IGluY29oZXJlbnQgb3BlcmF0aW9ucywgZWxzZSBjb2hlcmVudCBvcGVyYXRpb25zICovCisJCXRjX2FpZCAgOiA1LAkvKiBJVExCOiB3aWR0aCBvZiBhY2Nlc3MgaWRzIG9mIHByb2Nlc3NvciAoZW5jb2RlZCEpICovCisJCXRjX3BhZDEgOiA4OwkvKiBJVExCOiB3aWR0aCBvZiBzcGFjZS1yZWdpc3RlcnMgKGVuY29kZWQpICovCit9OworCitzdHJ1Y3QgcGRjX2NhY2hlX2luZm8gewkJLyogbWFpbi1QRENfQ0FDSEUtc3RydWN0dXJlIChjYWNoZXMgJiBUTEIncykgKi8KKwkvKiBJLWNhY2hlICovCisJdW5zaWduZWQgbG9uZwlpY19zaXplOwkvKiBzaXplIGluIGJ5dGVzICovCisJc3RydWN0IHBkY19jYWNoZV9jZiBpY19jb25mOwkvKiBjb25maWd1cmF0aW9uICovCisJdW5zaWduZWQgbG9uZwlpY19iYXNlOwkvKiBiYXNlLWFkZHIgKi8KKwl1bnNpZ25lZCBsb25nCWljX3N0cmlkZTsKKwl1bnNpZ25lZCBsb25nCWljX2NvdW50OworCXVuc2lnbmVkIGxvbmcJaWNfbG9vcDsKKwkvKiBELWNhY2hlICovCisJdW5zaWduZWQgbG9uZwlkY19zaXplOwkvKiBzaXplIGluIGJ5dGVzICovCisJc3RydWN0IHBkY19jYWNoZV9jZiBkY19jb25mOwkvKiBjb25maWd1cmF0aW9uICovCisJdW5zaWduZWQgbG9uZwlkY19iYXNlOwkvKiBiYXNlLWFkZHIgKi8KKwl1bnNpZ25lZCBsb25nCWRjX3N0cmlkZTsKKwl1bnNpZ25lZCBsb25nCWRjX2NvdW50OworCXVuc2lnbmVkIGxvbmcJZGNfbG9vcDsKKwkvKiBJbnN0cnVjdGlvbi1UTEIgKi8KKwl1bnNpZ25lZCBsb25nCWl0X3NpemU7CS8qIG51bWJlciBvZiBlbnRyaWVzIGluIEktVExCICovCisJc3RydWN0IHBkY190bGJfY2YgaXRfY29uZjsJLyogSS1UTEItY29uZmlndXJhdGlvbiAqLworCXVuc2lnbmVkIGxvbmcJaXRfc3BfYmFzZTsKKwl1bnNpZ25lZCBsb25nCWl0X3NwX3N0cmlkZTsKKwl1bnNpZ25lZCBsb25nCWl0X3NwX2NvdW50OworCXVuc2lnbmVkIGxvbmcJaXRfb2ZmX2Jhc2U7CisJdW5zaWduZWQgbG9uZwlpdF9vZmZfc3RyaWRlOworCXVuc2lnbmVkIGxvbmcJaXRfb2ZmX2NvdW50OworCXVuc2lnbmVkIGxvbmcJaXRfbG9vcDsKKwkvKiBkYXRhLVRMQiAqLworCXVuc2lnbmVkIGxvbmcJZHRfc2l6ZTsJLyogbnVtYmVyIG9mIGVudHJpZXMgaW4gRC1UTEIgKi8KKwlzdHJ1Y3QgcGRjX3RsYl9jZiBkdF9jb25mOwkvKiBELVRMQi1jb25maWd1cmF0aW9uICovCisJdW5zaWduZWQgbG9uZwlkdF9zcF9iYXNlOworCXVuc2lnbmVkIGxvbmcJZHRfc3Bfc3RyaWRlOworCXVuc2lnbmVkIGxvbmcJZHRfc3BfY291bnQ7CisJdW5zaWduZWQgbG9uZwlkdF9vZmZfYmFzZTsKKwl1bnNpZ25lZCBsb25nCWR0X29mZl9zdHJpZGU7CisJdW5zaWduZWQgbG9uZwlkdF9vZmZfY291bnQ7CisJdW5zaWduZWQgbG9uZwlkdF9sb29wOworfTsKKworI2lmIDAKKy8qIElmIHlvdSBzdGFydCB1c2luZyB0aGUgbmV4dCBzdHJ1Y3QsIHlvdSdsbCBoYXZlIHRvIGFkanVzdCBpdCB0bworICogd29yayB3aXRoIDY0LWJpdCBmaXJtd2FyZSBJIHRoaW5rIC1QQgorICovCitzdHJ1Y3QgcGRjX2lvZGMgeyAgICAgLyogUERDX0lPREMgKi8KKwl1bnNpZ25lZCBjaGFyICAgaHZlcnNpb25fbW9kZWw7CisJdW5zaWduZWQgY2hhciAJaHZlcnNpb247CisJdW5zaWduZWQgY2hhciAJc3BhOworCXVuc2lnbmVkIGNoYXIgCXR5cGU7CisJdW5zaWduZWQgaW50CXN2ZXJzaW9uX3Jldjo0OworCXVuc2lnbmVkIGludAlzdmVyc2lvbl9tb2RlbDoxOTsKKwl1bnNpZ25lZCBpbnQJc3ZlcnNpb25fb3B0Ojg7CisJdW5zaWduZWQgY2hhcglyZXY7CisJdW5zaWduZWQgY2hhcglkZXA7CisJdW5zaWduZWQgY2hhcglmZWF0dXJlczsKKwl1bnNpZ25lZCBjaGFyCXBhZDE7CisJdW5zaWduZWQgaW50CWNoZWNrc3VtOjE2OworCXVuc2lnbmVkIGludAlsZW5ndGg6MTY7CisJdW5zaWduZWQgaW50ICAgIHBhZFsxNV07Cit9IF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKSA7CisjZW5kaWYKKworI2lmbmRlZiBDT05GSUdfUEEyMAorLyogbm8gQkxUQnMgaW4gcGEyLjAgcHJvY2Vzc29ycyAqLworc3RydWN0IHBkY19idGxiX2luZm9fcmFuZ2UgeworCV9fdTggcmVzMDA7CisJX191OCBudW1faTsKKwlfX3U4IG51bV9kOworCV9fdTggbnVtX2NvbWI7Cit9OworCitzdHJ1Y3QgcGRjX2J0bGJfaW5mbyB7CS8qIFBEQ19CTE9DS19UTEIsIHJldHVybiBvZiBQRENfQlRMQl9JTkZPICovCisJdW5zaWduZWQgaW50IG1pbl9zaXplOwkvKiBtaW5pbXVtIHNpemUgb2YgQlRMQiBpbiBwYWdlcyAqLworCXVuc2lnbmVkIGludCBtYXhfc2l6ZTsJLyogbWF4aW11bSBzaXplIG9mIEJUTEIgaW4gcGFnZXMgKi8KKwlzdHJ1Y3QgcGRjX2J0bGJfaW5mb19yYW5nZSBmaXhlZF9yYW5nZV9pbmZvOworCXN0cnVjdCBwZGNfYnRsYl9pbmZvX3JhbmdlIHZhcmlhYmxlX3JhbmdlX2luZm87Cit9OworCisjZW5kaWYgLyogIUNPTkZJR19QQTIwICovCisKKyNpZmRlZiBfX0xQNjRfXworc3RydWN0IHBkY19tZW1vcnlfdGFibGVfcmFkZHIgeyAvKiBQRENfTUVNL1BEQ19NRU1fVEFCTEUgKHJldHVybiBpbmZvKSAqLworCXVuc2lnbmVkIGxvbmcgZW50cmllc19yZXR1cm5lZDsKKwl1bnNpZ25lZCBsb25nIGVudHJpZXNfdG90YWw7Cit9OworCitzdHJ1Y3QgcGRjX21lbW9yeV90YWJsZSB7ICAgICAgIC8qIFBEQ19NRU0vUERDX01FTV9UQUJMRSAoYXJndW1lbnRzKSAqLworCXVuc2lnbmVkIGxvbmcgcGFkZHI7CisJdW5zaWduZWQgaW50ICBwYWdlczsKKwl1bnNpZ25lZCBpbnQgIHJlc2VydmVkOworfTsKKyNlbmRpZiAvKiBfX0xQNjRfXyAqLworCitzdHJ1Y3QgcGRjX3N5c3RlbV9tYXBfbW9kX2luZm8geyAvKiBQRENfU1lTVEVNX01BUC9GSU5EX01PRFVMRSAqLworCXVuc2lnbmVkIGxvbmcgbW9kX2FkZHI7CisJdW5zaWduZWQgbG9uZyBtb2RfcGdzOworCXVuc2lnbmVkIGxvbmcgYWRkX2FkZHJzOworfTsKKworc3RydWN0IHBkY19zeXN0ZW1fbWFwX2FkZHJfaW5mbyB7IC8qIFBEQ19TWVNURU1fTUFQL0ZJTkRfQUREUkVTUyAqLworCXVuc2lnbmVkIGxvbmcgbW9kX2FkZHI7CisJdW5zaWduZWQgbG9uZyBtb2RfcGdzOworfTsKKworc3RydWN0IHBkY19pbml0aWF0b3IgeyAvKiBQRENfSU5JVElBVE9SICovCisJaW50IGhvc3RfaWQ7CisJaW50IGZhY3RvcjsKKwlpbnQgd2lkdGg7CisJaW50IG1vZGU7Cit9OworCitzdHJ1Y3QgaGFyZHdhcmVfcGF0aCB7CisJY2hhciAgZmxhZ3M7CS8qIHNlZSBiaXQgZGVmaW5pdGlvbnMgYmVsb3cgKi8KKwljaGFyICBiY1s2XTsJLyogQnVzIENvbnZlcnRlciByb3V0aW5nIGluZm8gdG8gYSBzcGVjaWZpYyAqLworCQkJLyogSS9PIGFkYXB0b3IgKDwgMCBtZWFucyBub25lLCA+IDYzIHJlc3ZkKSAqLworCWNoYXIgIG1vZDsJLyogZml4ZWQgZmllbGQgb2Ygc3BlY2lmaWVkIG1vZHVsZSAqLworfTsKKworLyoKKyAqIERldmljZSBwYXRoIHNwZWNpZmljYXRpb25zIHVzZWQgYnkgUERDLgorICovCitzdHJ1Y3QgcGRjX21vZHVsZV9wYXRoIHsKKwlzdHJ1Y3QgaGFyZHdhcmVfcGF0aCBwYXRoOworCXVuc2lnbmVkIGludCBsYXllcnNbNl07IC8qIGRldmljZS1zcGVjaWZpYyBpbmZvIChjdGxyICMsIHVuaXQgIyAuLi4pICovCit9OworCisjaWZuZGVmIENPTkZJR19QQTIwCisvKiBPbmx5IHVzZWQgb24gc29tZSBwcmUtUEEyLjAgYm94ZXMgKi8KK3N0cnVjdCBwZGNfbWVtb3J5X21hcCB7CQkvKiBQRENfTUVNT1JZX01BUCAqLworCXVuc2lnbmVkIGxvbmcgaHBhOwkvKiBtb2QncyByZWdpc3RlciBzZXQgYWRkcmVzcyAqLworCXVuc2lnbmVkIGxvbmcgbW9yZV9wZ3M7CS8qIG51bWJlciBvZiBhZGRpdGlvbmFsIEkvTyBwZ3MgKi8KK307CisjZW5kaWYKKworc3RydWN0IHBkY190b2QgeworCXVuc2lnbmVkIGxvbmcgdG9kX3NlYzsgCisJdW5zaWduZWQgbG9uZyB0b2RfdXNlYzsKK307CisKKy8qIGFyY2hpdGVjdGVkIHJlc3VsdHMgZnJvbSBQRENfUElNL3RyYW5zZmVyIGhwbWMgb24gYSBQQTEuMSBtYWNoaW5lICovCisKK3N0cnVjdCBwZGNfaHBtY19waW1fMTEgeyAvKiBQRENfUElNICovCisJX191MzIgZ3JbMzJdOworCV9fdTMyIGNyWzMyXTsKKwlfX3UzMiBzcls4XTsKKwlfX3UzMiBpYXNxX2JhY2s7CisJX191MzIgaWFvcV9iYWNrOworCV9fdTMyIGNoZWNrX3R5cGU7CisJX191MzIgY3B1X3N0YXRlOworCV9fdTMyIHJzdmQxOworCV9fdTMyIGNhY2hlX2NoZWNrOworCV9fdTMyIHRsYl9jaGVjazsKKwlfX3UzMiBidXNfY2hlY2s7CisJX191MzIgYXNzaXN0c19jaGVjazsKKwlfX3UzMiByc3ZkMjsKKwlfX3UzMiBhc3Npc3Rfc3RhdGU7CisJX191MzIgcmVzcG9uZGVyX2FkZHI7CisJX191MzIgcmVxdWVzdG9yX2FkZHI7CisJX191MzIgcGF0aF9pbmZvOworCV9fdTY0IGZyWzMyXTsKK307CisKKy8qCisgKiBhcmNoaXRlY3RlZCByZXN1bHRzIGZyb20gUERDX1BJTS90cmFuc2ZlciBocG1jIG9uIGEgUEEyLjAgbWFjaGluZQorICoKKyAqIE5vdGUgdGhhdCBQRENfUElNIGRvZXNuJ3QgY2FyZSB3aGV0aGVyIG9yIG5vdCB3aWRlIG1vZGUgd2FzIGVuYWJsZWQKKyAqIHNvIHRoZSByZXN1bHRzIGFyZSBkaWZmZXJlbnQgb24gIFBBMS4xIHZzLiBQQTIuMCB3aGVuIGluIG5hcnJvdyBtb2RlLgorICoKKyAqIE5vdGUgYWxzbyB0aGF0IHRoZXJlIGFyZSB1bmFyY2hpdGVjdGVkIHJlc3VsdHMgYXZhaWxhYmxlLCB3aGljaAorICogYXJlIGh2ZXJzaW9uIGRlcGVuZGVudC4gRG8gYSAic2VyIHBpbSAwIGhwbWMiIGFmdGVyIHJlYm9vdGluZywgc2luY2UKKyAqIHRoZSBmaXJtd2FyZSBpcyBwcm9iYWJseSB0aGUgYmVzdCB3YXkgb2YgcHJpbnRpbmcgaHZlcnNpb24gZGVwZW5kZW50CisgKiBkYXRhLgorICovCisKK3N0cnVjdCBwZGNfaHBtY19waW1fMjAgeyAvKiBQRENfUElNICovCisJX191NjQgZ3JbMzJdOworCV9fdTY0IGNyWzMyXTsKKwlfX3U2NCBzcls4XTsKKwlfX3U2NCBpYXNxX2JhY2s7CisJX191NjQgaWFvcV9iYWNrOworCV9fdTMyIGNoZWNrX3R5cGU7CisJX191MzIgY3B1X3N0YXRlOworCV9fdTMyIGNhY2hlX2NoZWNrOworCV9fdTMyIHRsYl9jaGVjazsKKwlfX3UzMiBidXNfY2hlY2s7CisJX191MzIgYXNzaXN0c19jaGVjazsKKwlfX3UzMiBhc3Npc3Rfc3RhdGU7CisJX191MzIgcGF0aF9pbmZvOworCV9fdTY0IHJlc3BvbmRlcl9hZGRyOworCV9fdTY0IHJlcXVlc3Rvcl9hZGRyOworCV9fdTY0IGZyWzMyXTsKK307CisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworLyogZmxhZ3Mgb2YgdGhlIGRldmljZV9wYXRoIChzZWUgYmVsb3cpICovCisjZGVmaW5lCVBGX0FVVE9CT09UCTB4ODAKKyNkZWZpbmUJUEZfQVVUT1NFQVJDSAkweDQwCisjZGVmaW5lCVBGX1RJTUVSCTB4MEYKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworc3RydWN0IGRldmljZV9wYXRoIHsJCS8qIHBhZ2UgMS02OSAqLworCXVuc2lnbmVkIGNoYXIgZmxhZ3M7CS8qIGZsYWdzIHNlZSBhYm92ZSEgKi8KKwl1bnNpZ25lZCBjaGFyIGJjWzZdOwkvKiBidXMgY29udmVydGVyIHJvdXRpbmcgaW5mbyAqLworCXVuc2lnbmVkIGNoYXIgbW9kOworCXVuc2lnbmVkIGludCAgbGF5ZXJzWzZdOy8qIGRldmljZS1zcGVjaWZpYyBsYXllci1pbmZvICovCit9IF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKSA7CisKK3N0cnVjdCBwel9kZXZpY2UgeworCXN0cnVjdAlkZXZpY2VfcGF0aCBkcDsJLyogc2VlIGFib3ZlICovCisJLyogc3RydWN0CWlvbW9kICpocGE7ICovCisJdW5zaWduZWQgaW50IGhwYTsJLyogSFBBIGJhc2UgYWRkcmVzcyAqLworCS8qIGNoYXIJKnNwYTsgKi8KKwl1bnNpZ25lZCBpbnQgc3BhOwkvKiBTUEEgYmFzZSBhZGRyZXNzICovCisJLyogaW50CSgqaW9kY19pbykoc3RydWN0IGlvbW9kKiwgLi4uKTsgKi8KKwl1bnNpZ25lZCBpbnQgaW9kY19pbzsJLyogZGV2aWNlIGVudHJ5IHBvaW50ICovCisJc2hvcnQJcGFkOwkJLyogcmVzZXJ2ZWQgKi8KKwl1bnNpZ25lZCBzaG9ydCBjbF9jbGFzczsvKiBzZWUgYmVsb3cgKi8KK30gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpIDsKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisvKiBjbF9jbGFzcworICogcGFnZSAzLTMzIG9mIElPLUZpcm13YXJlIEFSUworICogSU9EQyBFTlRSWV9JTklUKFNlYXJjaCBmaXJzdCkgUkVUWzFdCisgKi8KKyNkZWZpbmUJQ0xfTlVMTAkJMAkvKiBpbnZhbGlkICovCisjZGVmaW5lCUNMX1JBTkRPTQkxCS8qIHJhbmRvbSBhY2Nlc3MgKGFzIGRpc2spICovCisjZGVmaW5lCUNMX1NFUVUJCTIJLyogc2VxdWVudGlhbCBhY2Nlc3MgKGFzIHRhcGUpICovCisjZGVmaW5lCUNMX0RVUExFWAk3CS8qIGZ1bGwtZHVwbGV4IHBvaW50LXRvLXBvaW50IChSUy0yMzIsIE5ldCkgKi8KKyNkZWZpbmUJQ0xfS0VZQkQJOAkvKiBoYWxmLWR1cGxleCBjb25zb2xlIChISUwgS2V5Ym9hcmQpICovCisjZGVmaW5lCUNMX0RJU1BMCTkJLyogaGFsZi1kdXBsZXggY29uc29sZSAoZGlzcGxheSkgKi8KKyNkZWZpbmUJQ0xfRkMJCTEwCS8qIEZpYmVyQ2hhbm5lbCBhY2Nlc3MgbWVkaWEgKi8KKworI2lmIDAKKy8qIEZJWE1FOiBERVZDTEFTU18qIGR1cGxpY2F0ZXMgQ0xfKiAoYWJvdmUpLiAgRGVsZXRlIERFVkNMQVNTXyo/ICovCisjZGVmaW5lIERFVkNMQVNTX1JBTkRPTQkJMQorI2RlZmluZSBERVZDTEFTU19TRVFVCQkyCisjZGVmaW5lIERFVkNMQVNTX0RVUExFWAkJNworI2RlZmluZSBERVZDTEFTU19LRVlCRAkJOAorI2RlZmluZSBERVZDTEFTU19ESVNQCQk5CisjZW5kaWYKKworLyogSU9EQyBFTlRSWV9JTklUKCkgKi8KKyNkZWZpbmUgRU5UUllfSU5JVF9TUkNIX0ZSU1QJMgorI2RlZmluZSBFTlRSWV9JTklUX1NSQ0hfTkVYVAkzCisjZGVmaW5lIEVOVFJZX0lOSVRfTU9EX0RFVgk0CisjZGVmaW5lIEVOVFJZX0lOSVRfREVWCQk1CisjZGVmaW5lIEVOVFJZX0lOSVRfTU9ECQk2CisjZGVmaW5lIEVOVFJZX0lOSVRfTVNHCQk5CisKKy8qIElPREMgRU5UUllfSU8oKSAqLworI2RlZmluZSBFTlRSWV9JT19CT09USU4JCTAKKyNkZWZpbmUgRU5UUllfSU9fQk9PVE9VVAkxCisjZGVmaW5lIEVOVFJZX0lPX0NJTgkJMgorI2RlZmluZSBFTlRSWV9JT19DT1VUCQkzCisjZGVmaW5lIEVOVFJZX0lPX0NMT1NFCQk0CisjZGVmaW5lIEVOVFJZX0lPX0dFVE1TRwkJOQorI2RlZmluZSBFTlRSWV9JT19CQkxPQ0tfSU4JMTYKKyNkZWZpbmUgRU5UUllfSU9fQkJMT0NLX09VVAkxNworCisvKiBJT0RDIEVOVFJZX1NQQSgpICovCisKKy8qIElPREMgRU5UUllfQ09ORklHKCkgKi8KKworLyogSU9EQyBFTlRSWV9URVNUKCkgKi8KKworLyogSU9EQyBFTlRSWV9UTEIoKSAqLworCisKKy8qIERFRklOSVRJT04gT0YgVEhFIFpFUk8tUEFHRSAoUEFHMCkgKi8KKy8qIGJhc2VkIG9uIHdvcmsgYnkgSmFzb24gRWNraGFyZHQgKGphc29uQGVxdWF0b3IuY29tKSAqLworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjZGVmaW5lIFBBR0UwICAgKChzdHJ1Y3QgemVyb3BhZ2UgKilfX1BBR0VfT0ZGU0VUKQorCitzdHJ1Y3QgemVyb3BhZ2UgeworCS8qIFsweDAwMF0gaW5pdGlhbGl6ZSB2ZWN0b3JzIChWRUMpICovCisJdW5zaWduZWQgaW50CXZlY19zcGVjaWFsOwkJLyogbXVzdCBiZSB6ZXJvICovCisJLyogaW50CSgqdmVjX3Bvd19mYWlsKSh2b2lkKTsqLworCXVuc2lnbmVkIGludAl2ZWNfcG93X2ZhaWw7IC8qIHBvd2VyIGZhaWx1cmUgaGFuZGxlciAqLworCS8qIGludAkoKnZlY190b2MpKHZvaWQpOyAqLworCXVuc2lnbmVkIGludAl2ZWNfdG9jOworCXVuc2lnbmVkIGludAl2ZWNfdG9jbGVuOworCS8qIGludAkoKnZlY19yZW5keikodm9pZCk7ICovCisJdW5zaWduZWQgaW50IHZlY19yZW5kejsKKwlpbnQJdmVjX3Bvd19mYWlsX2ZsZW47CisJaW50CXZlY19wYWRbMTBdOwkJCisJCisJLyogWzB4MDQwXSByZXNlcnZlZCBwcm9jZXNzb3IgZGVwZW5kZW50ICovCisJaW50CXBhZDBbMTEyXTsKKworCS8qIFsweDIwMF0gcmVzZXJ2ZWQgKi8KKwlpbnQJcGFkMVs4NF07CisKKwkvKiBbMHgzNTBdIG1lbW9yeSBjb25maWd1cmF0aW9uIChNQykgKi8KKwlpbnQJbWVtY19jb250OwkJLyogY29udGlndW91cyBtZW0gc2l6ZSAoYnl0ZXMpICovCisJaW50CW1lbWNfcGhzaXplOwkJLyogcGh5c2ljYWwgbWVtb3J5IHNpemUgKi8KKwlpbnQJbWVtY19hZHNpemU7CQkvKiBhZGRpdGlvbmFsIG1lbSBzaXplLCBieXRlcyBvZiBTUEEgc3BhY2UgdXNlZCBieSBQREMgKi8KKwl1bnNpZ25lZCBpbnQgbWVtX3BkY19oaTsJLyogdXNlZCBmb3IgNjQtYml0ICovCisKKwkvKiBbMHgzNjBdIHZhcmlvdXMgcGFyYW1ldGVycyBmb3IgdGhlIGJvb3QtQ1BVICovCisJLyogdW5zaWduZWQgaW50ICptZW1fYm9vdGVycls4XTsgKi8KKwl1bnNpZ25lZCBpbnQgbWVtX2Jvb3RlcnJbOF07CS8qIHB0ciB0byBib290IGVycm9ycyAqLworCXVuc2lnbmVkIGludCBtZW1fZnJlZTsJCS8qIGZpcnN0IGxvY2F0aW9uLCB3aGVyZSBPUyBjYW4gYmUgbG9hZGVkICovCisJLyogc3RydWN0IGlvbW9kICptZW1faHBhOyAqLworCXVuc2lnbmVkIGludCBtZW1faHBhOwkJLyogSFBBIG9mIHRoZSBib290LUNQVSAqLworCS8qIGludCAoKm1lbV9wZGMpKGludCwgLi4uKTsgKi8KKwl1bnNpZ25lZCBpbnQgbWVtX3BkYzsJCS8qIFBEQyBlbnRyeSBwb2ludCAqLworCXVuc2lnbmVkIGludCBtZW1fMTBtc2VjOwkvKiBudW1iZXIgb2YgY2xvY2sgdGlja3MgaW4gMTBtc2VjICovCisKKwkvKiBbMHgzOTBdIGluaXRpYWwgbWVtb3J5IG1vZHVsZSAoSU1NKSAqLworCS8qIHN0cnVjdCBpb21vZCAqaW1tX2hwYTsgKi8KKwl1bnNpZ25lZCBpbnQgaW1tX2hwYTsJCS8qIEhQQSBvZiB0aGUgSU1NICovCisJaW50CWltbV9zb2Z0X2Jvb3Q7CQkvKiAwID0gd2FzIGhhcmQgYm9vdCwgMSA9IHdhcyBzb2Z0IGJvb3QgKi8KKwl1bnNpZ25lZCBpbnQJaW1tX3NwYV9zaXplOwkJLyogU1BBIHNpemUgb2YgdGhlIElNTSBpbiBieXRlcyAqLworCXVuc2lnbmVkIGludAlpbW1fbWF4X21lbTsJCS8qIGJ5dGVzIG9mIG1lbSBpbiBJTU0gKi8KKworCS8qIFsweDNBMF0gYm9vdCBjb25zb2xlLCBkaXNwbGF5IGRldmljZSBhbmQga2V5Ym9hcmQgKi8KKwlzdHJ1Y3QgcHpfZGV2aWNlIG1lbV9jb25zOwkvKiBkZXNjcmlwdGlvbiBvZiBjb25zb2xlIGRldmljZSAqLworCXN0cnVjdCBwel9kZXZpY2UgbWVtX2Jvb3Q7CS8qIGRlc2NyaXB0aW9uIG9mIGJvb3QgZGV2aWNlICovCisJc3RydWN0IHB6X2RldmljZSBtZW1fa2JkOwkvKiBkZXNjcmlwdGlvbiBvZiBrZXlib2FyZCBkZXZpY2UgKi8KKworCS8qIFsweDQzMF0gcmVzZXJ2ZWQgKi8KKwlpbnQJcGFkNDMwWzExNl07CisKKwkvKiBbMHg2MDBdIHByb2Nlc3NvciBkZXBlbmRlbnQgKi8KKwlfX3UzMglwYWQ2MDBbMV07CisJX191MzIJcHJvY19zdGk7CQkvKiBwb2ludGVyIHRvIFNUSSBST00gKi8KKwlfX3UzMglwYWQ2MDhbMTI2XTsKK307CisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworLyogUGFnZSBaZXJvIGNvbnN0YW50IG9mZnNldHMgdXNlZCBieSB0aGUgSFBNQyBoYW5kbGVyICovCisKKyNkZWZpbmUgQk9PVF9DT05TT0xFX0hQQV9PRkZTRVQgIDB4M2MwCisjZGVmaW5lIEJPT1RfQ09OU09MRV9TUEFfT0ZGU0VUICAweDNjNAorI2RlZmluZSBCT09UX0NPTlNPTEVfUEFUSF9PRkZTRVQgMHgzYTgKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK3ZvaWQgcGRjX2NvbnNvbGVfaW5pdCh2b2lkKTsJLyogaW4gcGRjX2NvbnNvbGUuYyAqLwordm9pZCBwZGNfY29uc29sZV9yZXN0YXJ0KHZvaWQpOworCit2b2lkIHNldHVwX3BkYyh2b2lkKTsJCS8qIGluIGludmVudG9yeS5jICovCisKKy8qIHdyYXBwZXItZnVuY3Rpb25zIGZyb20gcGRjLmMgKi8KKworaW50IHBkY19hZGRfdmFsaWQodW5zaWduZWQgbG9uZyBhZGRyZXNzKTsKK2ludCBwZGNfY2hhc3Npc19pbmZvKHN0cnVjdCBwZGNfY2hhc3Npc19pbmZvICpjaGFzc2lzX2luZm8sIHZvaWQgKmxlZF9pbmZvLCB1bnNpZ25lZCBsb25nIGxlbik7CitpbnQgcGRjX2NoYXNzaXNfZGlzcCh1bnNpZ25lZCBsb25nIGRpc3ApOworaW50IHBkY19jb3Byb2NfY2ZnKHN0cnVjdCBwZGNfY29wcm9jX2NmZyAqcGRjX2NvcHJvY19pbmZvKTsKK2ludCBwZGNfaW9kY19yZWFkKHVuc2lnbmVkIGxvbmcgKmFjdGNudCwgdW5zaWduZWQgbG9uZyBocGEsIHVuc2lnbmVkIGludCBpbmRleCwKKwkJICB2b2lkICppb2RjX2RhdGEsIHVuc2lnbmVkIGludCBpb2RjX2RhdGFfc2l6ZSk7CitpbnQgcGRjX3N5c3RlbV9tYXBfZmluZF9tb2RzKHN0cnVjdCBwZGNfc3lzdGVtX21hcF9tb2RfaW5mbyAqcGRjX21vZF9pbmZvLAorCQkJICAgICBzdHJ1Y3QgcGRjX21vZHVsZV9wYXRoICptb2RfcGF0aCwgbG9uZyBtb2RfaW5kZXgpOworaW50IHBkY19zeXN0ZW1fbWFwX2ZpbmRfYWRkcnMoc3RydWN0IHBkY19zeXN0ZW1fbWFwX2FkZHJfaW5mbyAqcGRjX2FkZHJfaW5mbywgCisJCQkgICAgICBsb25nIG1vZF9pbmRleCwgbG9uZyBhZGRyX2luZGV4KTsKK2ludCBwZGNfbW9kZWxfaW5mbyhzdHJ1Y3QgcGRjX21vZGVsICptb2RlbCk7CitpbnQgcGRjX21vZGVsX3N5c21vZGVsKGNoYXIgKm5hbWUpOworaW50IHBkY19tb2RlbF9jcHVpZCh1bnNpZ25lZCBsb25nICpjcHVfaWQpOworaW50IHBkY19tb2RlbF92ZXJzaW9ucyh1bnNpZ25lZCBsb25nICp2ZXJzaW9ucywgaW50IGlkKTsKK2ludCBwZGNfbW9kZWxfY2FwYWJpbGl0aWVzKHVuc2lnbmVkIGxvbmcgKmNhcGFiaWxpdGllcyk7CitpbnQgcGRjX2NhY2hlX2luZm8oc3RydWN0IHBkY19jYWNoZV9pbmZvICpjYWNoZSk7CisjaWZuZGVmIENPTkZJR19QQTIwCitpbnQgcGRjX2J0bGJfaW5mbyhzdHJ1Y3QgcGRjX2J0bGJfaW5mbyAqYnRsYik7CitpbnQgcGRjX21lbV9tYXBfaHBhKHN0cnVjdCBwZGNfbWVtb3J5X21hcCAqcl9hZGRyLCBzdHJ1Y3QgcGRjX21vZHVsZV9wYXRoICptb2RfcGF0aCk7CisjZW5kaWYgLyogIUNPTkZJR19QQTIwICovCitpbnQgcGRjX2xhbl9zdGF0aW9uX2lkKGNoYXIgKmxhbl9hZGRyLCB1bnNpZ25lZCBsb25nIG5ldF9ocGEpOworCitpbnQgcGRjX3N0YWJsZV9yZWFkKHVuc2lnbmVkIGxvbmcgc3RhZGRyLCB2b2lkICptZW1hZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKK2ludCBwZGNfc3RhYmxlX3dyaXRlKHVuc2lnbmVkIGxvbmcgc3RhZGRyLCB2b2lkICptZW1hZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKK2ludCBwZGNfc3RhYmxlX2dldF9zaXplKHVuc2lnbmVkIGxvbmcgKnNpemUpOworaW50IHBkY19zdGFibGVfdmVyaWZ5X2NvbnRlbnRzKHZvaWQpOworaW50IHBkY19zdGFibGVfaW5pdGlhbGl6ZSh2b2lkKTsKKworaW50IHBkY19wY2lfaXJ0X3NpemUodW5zaWduZWQgbG9uZyAqbnVtX2VudHJpZXMsIHVuc2lnbmVkIGxvbmcgaHBhKTsKK2ludCBwZGNfcGNpX2lydCh1bnNpZ25lZCBsb25nIG51bV9lbnRyaWVzLCB1bnNpZ25lZCBsb25nIGhwYSwgdm9pZCAqdGJsKTsKKworaW50IHBkY19nZXRfaW5pdGlhdG9yKHN0cnVjdCBoYXJkd2FyZV9wYXRoICosIHN0cnVjdCBwZGNfaW5pdGlhdG9yICopOworaW50IHBkY190b2RfcmVhZChzdHJ1Y3QgcGRjX3RvZCAqdG9kKTsKK2ludCBwZGNfdG9kX3NldCh1bnNpZ25lZCBsb25nIHNlYywgdW5zaWduZWQgbG9uZyB1c2VjKTsKKworI2lmZGVmIF9fTFA2NF9fCitpbnQgcGRjX21lbV9tZW1fdGFibGUoc3RydWN0IHBkY19tZW1vcnlfdGFibGVfcmFkZHIgKnJfYWRkciwKKwkJc3RydWN0IHBkY19tZW1vcnlfdGFibGUgKnRibCwgdW5zaWduZWQgbG9uZyBlbnRyaWVzKTsKKyNlbmRpZgorCit2b2lkIHNldF9maXJtd2FyZV93aWR0aCh2b2lkKTsKK2ludCBwZGNfZG9fZmlybV90ZXN0X3Jlc2V0KHVuc2lnbmVkIGxvbmcgZnRjX2JpdG1hcCk7CitpbnQgcGRjX2RvX3Jlc2V0KHZvaWQpOworaW50IHBkY19zb2Z0X3Bvd2VyX2luZm8odW5zaWduZWQgbG9uZyAqcG93ZXJfcmVnKTsKK2ludCBwZGNfc29mdF9wb3dlcl9idXR0b24oaW50IHN3X2NvbnRyb2wpOwordm9pZCBwZGNfaW9fcmVzZXQodm9pZCk7Cit2b2lkIHBkY19pb19yZXNldF9kZXZpY2VzKHZvaWQpOworaW50IHBkY19pb2RjX2dldGModm9pZCk7Cit2b2lkIHBkY19pb2RjX3B1dGModW5zaWduZWQgY2hhciBjKTsKK3ZvaWQgcGRjX2lvZGNfb3V0Yyh1bnNpZ25lZCBjaGFyIGMpOwordm9pZCBwZGNfcHJpbnRmKGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKKwordm9pZCBwZGNfZW1lcmdlbmN5X3VubG9jayh2b2lkKTsKK2ludCBwZGNfc3RpX2NhbGwodW5zaWduZWQgbG9uZyBmdW5jLCB1bnNpZ25lZCBsb25nIGZsYWdzLAorICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGlucHRyLCB1bnNpZ25lZCBsb25nIG91dHB1dHIsCisgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZ2xvYl9jZmcpOworCitleHRlcm4gdm9pZCBwZGNfaW5pdCh2b2lkKTsKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYgLyogX1BBUklTQ19QRENfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3BkY19jaGFzc2lzLmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvcGRjX2NoYXNzaXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGFjOWFjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL3BkY19jaGFzc2lzLmgKQEAgLTAsMCArMSwzODIgQEAKKy8qCisgKglpbmNsdWRlL2FzbS1wYXJpc2MvcGRjX2NoYXNzaXMuaAorICoKKyAqCUNvcHlyaWdodCAoQykgMjAwMiBMYXVyZW50IENhbmV0IDxjYW5ldGxAZXNpZWUuZnI+CisgKglDb3B5cmlnaHQgKEMpIDIwMDIgVGhpYmF1dCBWYXJlbmUgPHZhcmVuZXRAcGFyaXNjLWxpbnV4Lm9yZz4KKyAqCisgKgorICogICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiAgICAgIGFueSBsYXRlciB2ZXJzaW9uLgorICogICAgICAKKyAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqICAgICAgCisgKiAgICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqICAgICAgVE9ETzoJLSBoYW5kbGUgcHJvY2Vzc29yIG51bWJlciBvbiBTTVAgc3lzdGVtcyAoUmVwb3J0aW5nIEVudGl0eSBJRCkKKyAqICAgICAgCS0gaGFuZGxlIG1lc3NhZ2UgSUQKKyAqICAgICAgCS0gaGFuZGxlIHRpbWVzdGFtcHMKKyAqLworIAorCisjaWZuZGVmIF9QQVJJU0NfUERDX0NIQVNTSVNfSAorI2RlZmluZSBfUEFSSVNDX1BEQ19DSEFTU0lTX0gKKworLyoKKyAqIC0tLS0tLS0tLS0KKyAqIFByb3RvdHlwZXMKKyAqIC0tLS0tLS0tLS0KKyAqLworCitpbnQgcGRjX2NoYXNzaXNfc2VuZF9zdGF0dXMoaW50IG1lc3NhZ2UpOwordm9pZCBwYXJpc2NfcGRjX2NoYXNzaXNfaW5pdCh2b2lkKTsKKworCisvKgorICogLS0tLS0tLS0tLS0tLS0tLS0KKyAqIERpcmVjdCBjYWxsIG5hbWVzCisgKiAtLS0tLS0tLS0tLS0tLS0tLQorICogVGhleSBzZXR1cCBldmVyeXRoaW5nIGZvciB5b3UsIHRoZSBMb2cgbWVzc2FnZSBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgTEVEIHN0YXRlCisgKi8KKworI2RlZmluZSBQRENfQ0hBU1NJU19ESVJFQ1RfQlNUQVJUCTAKKyNkZWZpbmUgUERDX0NIQVNTSVNfRElSRUNUX0JDT01QTEVURQkxCisjZGVmaW5lIFBEQ19DSEFTU0lTX0RJUkVDVF9TSFVURE9XTgkyCisjZGVmaW5lIFBEQ19DSEFTU0lTX0RJUkVDVF9QQU5JQwkzCisjZGVmaW5lIFBEQ19DSEFTU0lTX0RJUkVDVF9IUE1DCQk0CisjZGVmaW5lIFBEQ19DSEFTU0lTX0RJUkVDVF9MUE1DCQk1CisjZGVmaW5lIFBEQ19DSEFTU0lTX0RJUkVDVF9EVU1QCQk2CS8qIG5vdCB5ZXQgaW1wbGVtZW50ZWQgKi8KKyNkZWZpbmUgUERDX0NIQVNTSVNfRElSRUNUX09PUFMJCTcJLyogbm90IHlldCBpbXBsZW1lbnRlZCAqLworCisKKy8qCisgKiAtLS0tLS0tLS0tLS0KKyAqIExFRHMgY29udHJvbAorICogLS0tLS0tLS0tLS0tCisgKiBTZXQgdGhlIHRocmVlIExFRHMgLS0gUnVuLCBBdHRuLCBhbmQgRmF1bHQuCisgKi8KKworLyogT2xkIFBEQyBMRUQgY29udHJvbCAqLworI2RlZmluZSBQRENfQ0hBU1NJU19ESVNQX0RBVEEodikJKCh1bnNpZ25lZCBsb25nKSh2KSA8PCAxNykKKworLyogCisgKiBBdmFpbGFibGUgUERDIFBBVCBMRUQgc3RhdGVzCisgKi8KKworI2RlZmluZSBQRENfQ0hBU1NJU19MRURfUlVOX09GRgkJKDBVTEwgPDwgNCkKKyNkZWZpbmUgUERDX0NIQVNTSVNfTEVEX1JVTl9GTEFTSAkoMVVMTCA8PCA0KQorI2RlZmluZSBQRENfQ0hBU1NJU19MRURfUlVOX09OCQkoMlVMTCA8PCA0KQorI2RlZmluZSBQRENfQ0hBU1NJU19MRURfUlVOX05DCQkoM1VMTCA8PCA0KQorI2RlZmluZSBQRENfQ0hBU1NJU19MRURfQVRUTl9PRkYJKDBVTEwgPDwgNikKKyNkZWZpbmUgUERDX0NIQVNTSVNfTEVEX0FUVE5fRkxBU0gJKDFVTEwgPDwgNikKKyNkZWZpbmUgUERDX0NIQVNTSVNfTEVEX0FUVE5fTkMJCSgzVUxMIDw8IDYpCS8qIEFUVE4gT04gaXMgaW52YWxpZCAqLworI2RlZmluZSBQRENfQ0hBU1NJU19MRURfRkFVTFRfT0ZGCSgwVUxMIDw8IDgpCisjZGVmaW5lIFBEQ19DSEFTU0lTX0xFRF9GQVVMVF9GTEFTSAkoMVVMTCA8PCA4KQorI2RlZmluZSBQRENfQ0hBU1NJU19MRURfRkFVTFRfT04JKDJVTEwgPDwgOCkKKyNkZWZpbmUgUERDX0NIQVNTSVNfTEVEX0ZBVUxUX05DCSgzVUxMIDw8IDgpCisjZGVmaW5lIFBEQ19DSEFTU0lTX0xFRF9WQUxJRAkJKDFVTEwgPDwgMTApCisKKy8qIAorICogVmFsaWQgUERDIFBBVCBMRUQgc3RhdGVzIGNvbWJpbmF0aW9ucworICovCisKKy8qIFN5c3RlbSBydW5uaW5nIG5vcm1hbGx5ICovCisjZGVmaW5lIFBEQ19DSEFTU0lTX0xTVEFURV9SVU5fTk9STUFMCShQRENfQ0hBU1NJU19MRURfUlVOX09OCQl8IFwKKwkJCQkJIFBEQ19DSEFTU0lTX0xFRF9BVFROX09GRgl8IFwKKwkJCQkJIFBEQ19DSEFTU0lTX0xFRF9GQVVMVF9PRkYJfCBcCisJCQkJCSBQRENfQ0hBU1NJU19MRURfVkFMSUQJCSkKKy8qIFN5c3RlbSBjcmFzaGVkIGFuZCByZWJvb3RlZCBpdHNlbGYgc3VjY2Vzc2Z1bGx5ICovCisjZGVmaW5lIFBEQ19DSEFTU0lTX0xTVEFURV9SVU5fQ1JBU0hSRUMJKFBEQ19DSEFTU0lTX0xFRF9SVU5fT04JCXwgXAorCQkJCQkgUERDX0NIQVNTSVNfTEVEX0FUVE5fT0ZGCXwgXAorCQkJCQkgUERDX0NIQVNTSVNfTEVEX0ZBVUxUX0ZMQVNICXwgXAorCQkJCQkgUERDX0NIQVNTSVNfTEVEX1ZBTElECQkpCisvKiBUaGVyZSB3YXMgYSBzeXN0ZW0gaW50ZXJydXB0aW9uIHRoYXQgZGlkIG5vdCB0YWtlIHRoZSBzeXN0ZW0gZG93biAqLworI2RlZmluZSBQRENfQ0hBU1NJU19MU1RBVEVfUlVOX1NZU0lOVAkoUERDX0NIQVNTSVNfTEVEX1JVTl9PTgkJfCBcCisJCQkJCSBQRENfQ0hBU1NJU19MRURfQVRUTl9GTEFTSAl8IFwKKwkJCQkJIFBEQ19DSEFTU0lTX0xFRF9GQVVMVF9PRkYJfCBcCisJCQkJCSBQRENfQ0hBU1NJU19MRURfVkFMSUQJCSkKKy8qIFN5c3RlbSBydW5uaW5nIGFuZCB1bmV4cGVjdGVkIHJlYm9vdCBvciBub24tY3JpdGljYWwgZXJyb3IgZGV0ZWN0ZWQgKi8KKyNkZWZpbmUgUERDX0NIQVNTSVNfTFNUQVRFX1JVTl9OQ1JJVAkoUERDX0NIQVNTSVNfTEVEX1JVTl9PTgkJfCBcCisJCQkJCSBQRENfQ0hBU1NJU19MRURfQVRUTl9GTEFTSAl8IFwKKwkJCQkJIFBEQ19DSEFTU0lTX0xFRF9GQVVMVF9GTEFTSAl8IFwKKwkJCQkJIFBEQ19DSEFTU0lTX0xFRF9WQUxJRAkJKQorLyogRXhlY3V0aW5nIG5vbi1PUyBjb2RlICovCisjZGVmaW5lIFBEQ19DSEFTU0lTX0xTVEFURV9OT05PUwkoUERDX0NIQVNTSVNfTEVEX1JVTl9GTEFTSAl8IFwKKwkJCQkJIFBEQ19DSEFTU0lTX0xFRF9BVFROX09GRgl8IFwKKwkJCQkJIFBEQ19DSEFTU0lTX0xFRF9GQVVMVF9PRkYJfCBcCisJCQkJCSBQRENfQ0hBU1NJU19MRURfVkFMSUQJCSkKKy8qIEJvb3QgZmFpbGVkIC0gRXhlY3V0aW5nIG5vbi1PUyBjb2RlICovCisjZGVmaW5lIFBEQ19DSEFTU0lTX0xTVEFURV9OT05PU19CRkFJTAkoUERDX0NIQVNTSVNfTEVEX1JVTl9GTEFTSAl8IFwKKwkJCQkJIFBEQ19DSEFTU0lTX0xFRF9BVFROX09GRgl8IFwKKwkJCQkJIFBEQ19DSEFTU0lTX0xFRF9GQVVMVF9PTgl8IFwKKwkJCQkJIFBEQ19DSEFTU0lTX0xFRF9WQUxJRAkJKQorLyogVW5leHBlY3RlZCByZWJvb3Qgb2NjdXJyZWQgLSBFeGVjdXRpbmcgbm9uLU9TIGNvZGUgKi8KKyNkZWZpbmUgUERDX0NIQVNTSVNfTFNUQVRFX05PTk9TX1VORVhQCShQRENfQ0hBU1NJU19MRURfUlVOX0ZMQVNICXwgXAorCQkJCQkgUERDX0NIQVNTSVNfTEVEX0FUVE5fT0ZGCXwgXAorCQkJCQkgUERDX0NIQVNTSVNfTEVEX0ZBVUxUX0ZMQVNICXwgXAorCQkJCQkgUERDX0NIQVNTSVNfTEVEX1ZBTElECQkpCisvKiBFeGVjdXRpbmcgbm9uLU9TIGNvZGUgLSBOb24tY3JpdGljYWwgZXJyb3IgZGV0ZWN0ZWQgKi8KKyNkZWZpbmUgUERDX0NIQVNTSVNfTFNUQVRFX05PTk9TX05DUklUCShQRENfQ0hBU1NJU19MRURfUlVOX0ZMQVNICXwgXAorCQkJCQkgUERDX0NIQVNTSVNfTEVEX0FUVE5fRkxBU0gJfCBcCisJCQkJCSBQRENfQ0hBU1NJU19MRURfRkFVTFRfT0ZGCXwgXAorCQkJCQkgUERDX0NIQVNTSVNfTEVEX1ZBTElECQkpCisvKiBCb290IGZhaWxlZCAtIEV4ZWN1dGluZyBub24tT1MgY29kZSAtIE5vbi1jcml0aWNhbCBlcnJvciBkZXRlY3RlZCAqLworI2RlZmluZSBQRENfQ0hBU1NJU19MU1RBVEVfQkZBSUxfTkNSSVQJKFBEQ19DSEFTU0lTX0xFRF9SVU5fRkxBU0gJfCBcCisJCQkJCSBQRENfQ0hBU1NJU19MRURfQVRUTl9GTEFTSAl8IFwKKwkJCQkJIFBEQ19DSEFTU0lTX0xFRF9GQVVMVF9PTgl8IFwKKwkJCQkJIFBEQ19DSEFTU0lTX0xFRF9WQUxJRAkJKQorLyogVW5leHBlY3RlZCByZWJvb3QvcmVjb3ZlcmluZyAtIEV4ZWN1dGluZyBub24tT1MgY29kZSAtIE5vbi1jcml0aWNhbCBlcnJvciBkZXRlY3RlZCAqLworI2RlZmluZSBQRENfQ0hBU1NJU19MU1RBVEVfVU5FWFBfTkNSSVQJKFBEQ19DSEFTU0lTX0xFRF9SVU5fRkxBU0gJfCBcCisJCQkJCSBQRENfQ0hBU1NJU19MRURfQVRUTl9GTEFTSAl8IFwKKwkJCQkJIFBEQ19DSEFTU0lTX0xFRF9GQVVMVF9GTEFTSAl8IFwKKwkJCQkJIFBEQ19DSEFTU0lTX0xFRF9WQUxJRAkJKQorLyogQ2Fubm90IGV4ZWN1dGUgUERDICovCisjZGVmaW5lIFBEQ19DSEFTU0lTX0xTVEFURV9DQU5OT1RfUERDCShQRENfQ0hBU1NJU19MRURfUlVOX09GRgl8IFwKKwkJCQkJIFBEQ19DSEFTU0lTX0xFRF9BVFROX09GRgl8IFwKKwkJCQkJIFBEQ19DSEFTU0lTX0xFRF9GQVVMVF9PRkYJfCBcCisJCQkJCSBQRENfQ0hBU1NJU19MRURfVkFMSUQJCSkKKy8qIEJvb3QgZmFpbGVkIC0gT1Mgbm90IHVwIC0gUERDIGhhcyBkZXRlY3RlZCBhIGZhaWx1cmUgdGhhdCBwcmV2ZW50cyBib290ICovCisjZGVmaW5lIFBEQ19DSEFTU0lTX0xTVEFURV9GQVRBTF9CRkFJTAkoUERDX0NIQVNTSVNfTEVEX1JVTl9PRkYJfCBcCisJCQkJCSBQRENfQ0hBU1NJU19MRURfQVRUTl9PRkYJfCBcCisJCQkJCSBQRENfQ0hBU1NJU19MRURfRkFVTFRfT04JfCBcCisJCQkJCSBQRENfQ0hBU1NJU19MRURfVkFMSUQJCSkKKy8qIE5vIGNvZGUgcnVubmluZyAtIE5vbi1jcml0aWNhbCBlcnJvciBkZXRlY3RlZCAoZG91YmxlIGZhdWx0IHNpdHVhdGlvbikgKi8KKyNkZWZpbmUgUERDX0NIQVNTSVNfTFNUQVRFX05PQ09ERV9OQ1JJVAkoUERDX0NIQVNTSVNfTEVEX1JVTl9PRkYJfCBcCisJCQkJCSBQRENfQ0hBU1NJU19MRURfQVRUTl9GTEFTSAl8IFwKKwkJCQkJIFBEQ19DSEFTU0lTX0xFRF9GQVVMVF9PRkYJfCBcCisJCQkJCSBQRENfQ0hBU1NJU19MRURfVkFMSUQJCSkKKy8qIEJvb3QgZmFpbGVkIC0gT1Mgbm90IHVwIC0gRmF0YWwgZmFpbHVyZSBkZXRlY3RlZCAtIE5vbi1jcml0aWNhbCBlcnJvciBkZXRlY3RlZCAqLworI2RlZmluZSBQRENfQ0hBU1NJU19MU1RBVEVfRkFUQUxfTkNSSVQJKFBEQ19DSEFTU0lTX0xFRF9SVU5fT0ZGCXwgXAorCQkJCQkgUERDX0NIQVNTSVNfTEVEX0FUVE5fRkxBU0gJfCBcCisJCQkJCSBQRENfQ0hBU1NJU19MRURfRkFVTFRfT04JfCBcCisJCQkJCSBQRENfQ0hBU1NJU19MRURfVkFMSUQJCSkKKy8qIEFsbCBvdGhlciBzdGF0ZXMgYXJlIGludmFsaWQgKi8KKworCisvKgorICogLS0tLS0tLS0tLS0tLS0KKyAqIFBEQyBMb2cgZXZlbnRzCisgKiAtLS0tLS0tLS0tLS0tLQorICogSGVyZSBmb2xsb3dzIGJpdHMgbmVlZGVkIHRvIGZpbGwgdXAgdGhlIGxvZyBldmVudCBzZW50IHRvIFBEQ19DSEFTU0lTCisgKiBUaGUgbG9nIG1lc3NhZ2UgY29udGFpbnM6IEFsZXJ0IGxldmVsLCBTb3VyY2UsIFNvdXJjZSBkZXRhaWwsCisgKiBTb3VyY2UgSUQsIFByb2JsZW0gZGV0YWlsLCBDYWxsZXIgYWN0aXZpdHksIEFjdGl2aXR5IHN0YXR1cywgCisgKiBDYWxsZXIgc3ViYWN0aXZpdHksIFJlcG9ydGluZyBlbnRpdHkgdHlwZSwgUmVwb3J0aW5nIGVudGl0eSBJRCwKKyAqIERhdGEgdHlwZSwgVW5pcXVlIG1lc3NhZ2UgSUQgYW5kIEVPTS4gCisgKi8KKworLyogQWxlcnQgbGV2ZWwgKi8KKyNkZWZpbmUgUERDX0NIQVNTSVNfQUxFUlRfRk9SV0FSRAkoMFVMTCA8PCAzNikJLyogbm8gZmFpbHVyZSBkZXRlY3RlZCAqLworI2RlZmluZSBQRENfQ0hBU1NJU19BTEVSVF9TRVJQUk9DCSgxVUxMIDw8IDM2KQkvKiBzZXJ2aWNlIHByb2MgLSBubyBmYWlsdXJlICovCisjZGVmaW5lIFBEQ19DSEFTU0lTX0FMRVJUX05VUkdFTlQJKDJVTEwgPDwgMzYpCS8qIG5vbi11cmdlbnQgb3BlcmF0b3IgYXR0biAqLworI2RlZmluZSBQRENfQ0hBU1NJU19BTEVSVF9CTE9DS0VECSgzVUxMIDw8IDM2KQkvKiBzeXN0ZW0gYmxvY2tlZCAqLworI2RlZmluZSBQRENfQ0hBU1NJU19BTEVSVF9DT05GX0NIRwkoNFVMTCA8PCAzNikJLyogdW5leHBlY3RlZCBjb25maWd1cmF0aW9uIGNoYW5nZSAqLworI2RlZmluZSBQRENfQ0hBU1NJU19BTEVSVF9FTlZfUEIJKDVVTEwgPDwgMzYpCS8qIGJvb3QgcG9zc2libGUsIGVudmlyb25tZW50YWwgcGIgKi8KKyNkZWZpbmUgUERDX0NIQVNTSVNfQUxFUlRfUEVORElORwkoNlVMTCA8PCAzNikJLyogYm9vdCBwb3NzaWJsZSwgcGVuZGluZyBmYWlsdXJlICovCisjZGVmaW5lIFBEQ19DSEFTU0lTX0FMRVJUX1BFUkZfSU1QCSg4VUxMIDw8IDM2KQkvKiBib290IHBvc3NpYmxlLCBwZXJmb3JtYW5jZSBpbXBhaXJlZCAqLworI2RlZmluZSBQRENfQ0hBU1NJU19BTEVSVF9GVU5DX0lNUAkoMTBVTEwgPDwgMzYpCS8qIGJvb3QgcG9zc2libGUsIGZ1bmN0aW9uYWxpdHkgaW1wYWlyZWQgKi8KKyNkZWZpbmUgUERDX0NIQVNTSVNfQUxFUlRfU09GVF9GQUlMCSgxMlVMTCA8PCAzNikJLyogc29mdHdhcmUgZmFpbHVyZSAqLworI2RlZmluZSBQRENfQ0hBU1NJU19BTEVSVF9IQU5HCQkoMTNVTEwgPDwgMzYpCS8qIHN5c3RlbSBoYW5nICovCisjZGVmaW5lIFBEQ19DSEFTU0lTX0FMRVJUX0VOVl9GQVRBTAkoMTRVTEwgPDwgMzYpCS8qIGZhdGFsIHBvd2VyIG9yIGVudmlyb25tZW50YWwgcGIgKi8KKyNkZWZpbmUgUERDX0NIQVNTSVNfQUxFUlRfSFdfRkFUQUwJKDE1VUxMIDw8IDM2KQkvKiBmYXRhbCBoYXJkd2FyZSBwcm9ibGVtICovCisKKy8qIFNvdXJjZSAqLworI2RlZmluZSBQRENfQ0hBU1NJU19TUkNfTk9ORQkJKDBVTEwgPDwgMjgpCS8qIHVua25vd24sIG5vIHNvdXJjZSBzdGF0ZWQgKi8KKyNkZWZpbmUgUERDX0NIQVNTSVNfU1JDX1BST0MJCSgxVUxMIDw8IDI4KQkvKiBwcm9jZXNzb3IgKi8KKy8qIEZvciBsYXRlciB1c2UgPyAqLworI2RlZmluZSBQRENfQ0hBU1NJU19TUkNfUFJPQ19DQUNIRQkoMlVMTCA8PCAyOCkJLyogcHJvY2Vzc29yIGNhY2hlKi8KKyNkZWZpbmUgUERDX0NIQVNTSVNfU1JDX1BESAkJKDNVTEwgPDwgMjgpCS8qIHByb2Nlc3NvciBkZXBlbmRlbnQgaGFyZHdhcmUgKi8KKyNkZWZpbmUgUERDX0NIQVNTSVNfU1JDX1BXUgkJKDRVTEwgPDwgMjgpCS8qIHBvd2VyICovCisjZGVmaW5lIFBEQ19DSEFTU0lTX1NSQ19GQUIJCSg1VUxMIDw8IDI4KQkvKiBmYWJyaWMgY29ubmVjdG9yICovCisjZGVmaW5lIFBEQ19DSEFTU0lTX1NSQ19QTEFUaQkJKDZVTEwgPDwgMjgpCS8qIHBsYXRmb3JtICovCisjZGVmaW5lIFBEQ19DSEFTU0lTX1NSQ19NRU0JCSg3VUxMIDw8IDI4KQkvKiBtZW1vcnkgKi8KKyNkZWZpbmUgUERDX0NIQVNTSVNfU1JDX0lPCQkoOFVMTCA8PCAyOCkJLyogSS9PICovCisjZGVmaW5lIFBEQ19DSEFTU0lTX1NSQ19DRUxMCQkoOVVMTCA8PCAyOCkJLyogY2VsbCAqLworI2RlZmluZSBQRENfQ0hBU1NJU19TUkNfUEQJCSgxMFVMTCA8PCAyOCkJLyogcHJvdGVjdGVkIGRvbWFpbiAqLworCisvKiBTb3VyY2UgZGV0YWlsIGZpZWxkICovCisjZGVmaW5lIFBEQ19DSEFTU0lTX1NSQ19EX1BST0MJCSgxVUxMIDw8IDI0KQkvKiBwcm9jZXNzb3IgZ2VuZXJhbCAqLworCisvKiBTb3VyY2UgSUQgLSBwbGF0Zm9ybSBkZXBlbmRlbnQgKi8KKyNkZWZpbmUgUERDX0NIQVNTSVNfU1JDX0lEX1VOU1BFQwkoMFVMTCA8PCAxNikKKworLyogUHJvYmxlbSBkZXRhaWwgLSBwcm9ibGVtIHNvdXJjZSBkZXBlbmRlbnQgKi8KKyNkZWZpbmUgUERDX0NIQVNTSVNfUEJfRF9QUk9DX05PTkUJKDBVTEwgPDwgMzIpCS8qIG5vIHByb2JsZW0gZGV0YWlsICovCisjZGVmaW5lIFBEQ19DSEFTU0lTX1BCX0RfUFJPQ19USU1FT1VUCSg0VUxMIDw8IDMyKQkvKiB0aW1lb3V0ICovCisKKy8qIENhbGxlciBhY3Rpdml0eSAqLworI2RlZmluZSBQRENfQ0hBU1NJU19DQUxMX0FDVF9IUFVYX0JMCSg3VUxMIDw8IDEyKQkvKiBCb290IExvYWRlciAqLworI2RlZmluZSBQRENfQ0hBU1NJU19DQUxMX0FDVF9IUFVYX1BECSg4VUxMIDw8IDEyKQkvKiBTQUxfUEQgYWN0aXZpdGllcyAqLworI2RlZmluZSBQRENfQ0hBU1NJU19DQUxMX0FDVF9IUFVYX0VWRU5UCSg5VUxMIDw8IDEyKQkvKiBTQUxfRVZFTlRTIGFjdGl2aXRpZXMgKi8KKyNkZWZpbmUgUERDX0NIQVNTSVNfQ0FMTF9BQ1RfSFBVWF9JTwkoMTBVTEwgPDwgMTIpCS8qIFNBTF9JTyBhY3Rpdml0aWVzICovCisjZGVmaW5lIFBEQ19DSEFTU0lTX0NBTExfQUNUX0hQVVhfUEFOSUMJKDExVUxMIDw8IDEyKQkvKiBTeXN0ZW0gcGFuaWMgKi8KKyNkZWZpbmUgUERDX0NIQVNTSVNfQ0FMTF9BQ1RfSFBVWF9JTklUCSgxMlVMTCA8PCAxMikJLyogU3lzdGVtIGluaXRpYWxpemF0aW9uICovCisjZGVmaW5lIFBEQ19DSEFTU0lTX0NBTExfQUNUX0hQVVhfU0hVVAkoMTNVTEwgPDwgMTIpCS8qIFN5c3RlbSBzaHV0ZG93biAqLworI2RlZmluZSBQRENfQ0hBU1NJU19DQUxMX0FDVF9IUFVYX1dBUk4JKDE0VUxMIDw8IDEyKQkvKiBTeXN0ZW0gd2FybmluZyAqLworI2RlZmluZSBQRENfQ0hBU1NJU19DQUxMX0FDVF9IUFVYX0RVCSgxNVVMTCA8PCAxMikJLyogRGlzcGxheV9BY3Rpdml0eSgpIHVwZGF0ZSAqLworCisvKiBBY3Rpdml0eSBzdGF0dXMgLSBpbXBsZW1lbnRhdGlvbiBkZXBlbmRlbnQgKi8KKyNkZWZpbmUgUERDX0NIQVNTSVNfQUNUX1NUQVRVU19VTlNQRUMJKDBVTEwgPDwgMCkKKworLyogQ2FsbGVyIHN1YmFjdGl2aXR5IC0gaW1wbGVtZW50YXRpb24gZGVwZW5kZW50ICovCisvKiBGSVhNRTogb3RoZXIgc3ViYWN0aXZpdGllcyA/ICovCisjZGVmaW5lIFBEQ19DSEFTU0lTX0NBTExfU0FDVF9VTlNQRUMJKDBVTEwgPDwgNCkJLyogaW1wbGVtZW50YXRpb24gZGVwZW5kZW50ICovCisKKy8qIFJlcG9ydGluZyBlbnRpdHkgdHlwZSAqLworI2RlZmluZSBQRENfQ0hBU1NJU19SRVRfR0VORVJJQ09TCSgxMlVMTCA8PCA1MikJLyogZ2VuZXJpYyBPU2VzICovCisjZGVmaW5lIFBEQ19DSEFTU0lTX1JFVF9JQTY0X05UCQkoMTNVTEwgPDwgNTIpCS8qIElBLTY0IE5UICovCisjZGVmaW5lIFBEQ19DSEFTU0lTX1JFVF9IUFVYCQkoMTRVTEwgPDwgNTIpCS8qIEhQLVVYICovCisjZGVmaW5lIFBEQ19DSEFTU0lTX1JFVF9ESUFHCQkoMTVVTEwgPDwgNTIpCS8qIG9mZmxpbmUgZGlhZ25vc3RpY3MgJiB1dGlsaXRpZXMgKi8KKworLyogUmVwb3J0aW5nIGVudGl0eSBJRCAqLworI2RlZmluZSBQRENfQ0hBU1NJU19SRUlEX1VOU1BFQwkJKDBVTEwgPDwgNDQpCisKKy8qIERhdGEgdHlwZSAqLworI2RlZmluZSBQRENfQ0hBU1NJU19EVF9OT05FCQkoMFVMTCA8PCA1OSkJLyogZGF0YSBmaWVsZCB1bnVzZWQgKi8KKy8qIEZvciBsYXRlciB1c2UgPyBEbyB3ZSBuZWVkIHRoZXNlID8gKi8KKyNkZWZpbmUgUERDX0NIQVNTSVNfRFRfUEhZU19BRERSCSgxVUxMIDw8IDU5KQkvKiBwaHlzaWNhbCBhZGRyZXNzICovCisjZGVmaW5lIFBEQ19DSEFTU0lTX0RUX0RBVEFfRVhQRUNUCSgyVUxMIDw8IDU5KQkvKiBleHBlY3RlZCBkYXRhICovCisjZGVmaW5lIFBEQ19DSEFTU0lTX0RUX0FDVFVBTAkJKDNVTEwgPDwgNTkpCS8qIGFjdHVhbCBkYXRhICovCisjZGVmaW5lIFBEQ19DSEFTU0lTX0RUX1BIWVNfTE9DCQkoNFVMTCA8PCA1OSkJLyogcGh5c2ljYWwgbG9jYXRpb24gKi8KKyNkZWZpbmUgUERDX0NIQVNTSVNfRFRfUEhZU19MT0NfRVhUCSg1VUxMIDw8IDU5KQkvKiBwaHlzaWNhbCBsb2NhdGlvbiBleHRlbnNpb24gKi8KKyNkZWZpbmUgUERDX0NIQVNTSVNfRFRfVEFHCQkoNlVMTCA8PCA1OSkJLyogdGFnICovCisjZGVmaW5lIFBEQ19DSEFTU0lTX0RUX1NZTkRST01FCQkoN1VMTCA8PCA1OSkJLyogc3luZHJvbWUgKi8KKyNkZWZpbmUgUERDX0NIQVNTSVNfRFRfQ09ERV9BRERSCSg4VUxMIDw8IDU5KQkvKiBjb2RlIGFkZHJlc3MgKi8KKyNkZWZpbmUgUERDX0NIQVNTSVNfRFRfQVNDSUlfTVNHCSg5VUxMIDw8IDU5KQkvKiBhc2NpaSBtZXNzYWdlICovCisjZGVmaW5lIFBEQ19DSEFTU0lTX0RUX1BPU1QJCSgxMFVMTCA8PCA1OSkJLyogUE9TVCBjb2RlICovCisjZGVmaW5lIFBEQ19DSEFTU0lTX0RUX1RJTUVTVEFNUAkoMTFVTEwgPDwgNTkpCS8qIHRpbWVzdGFtcCAqLworI2RlZmluZSBQRENfQ0hBU1NJU19EVF9ERVZfU1RBVAkJKDEyVUxMIDw8IDU5KQkvKiBkZXZpY2Ugc3RhdHVzICovCisjZGVmaW5lIFBEQ19DSEFTU0lTX0RUX0RFVl9UWVBFCQkoMTNVTEwgPDwgNTkpCS8qIGRldmljZSB0eXBlICovCisjZGVmaW5lIFBEQ19DSEFTU0lTX0RUX1BCX0RFVAkJKDE0VUxMIDw8IDU5KQkvKiBwcm9ibGVtIGRldGFpbCAqLworI2RlZmluZSBQRENfQ0hBU1NJU19EVF9BQ1RfTEVWCQkoMTVVTEwgPDwgNTkpCS8qIGFjdGl2aXR5IGxldmVsL3RpbWVvdXQgKi8KKyNkZWZpbmUgUERDX0NIQVNTSVNfRFRfU0VSX05VTQkJKDE2VUxMIDw8IDU5KQkvKiBzZXJpYWwgbnVtYmVyICovCisjZGVmaW5lIFBEQ19DSEFTU0lTX0RUX1JFVl9OVU0JCSgxN1VMTCA8PCA1OSkJLyogcmV2aXNpb24gbnVtYmVyICovCisjZGVmaW5lIFBEQ19DSEFTU0lTX0RUX0lOVEVSUlVQVAkoMThVTEwgPDwgNTkpCS8qIGludGVycnVwdGlvbiBpbmZvcm1hdGlvbiAqLworI2RlZmluZSBQRENfQ0hBU1NJU19EVF9URVNUX05VTQkJKDE5VUxMIDw8IDU5KQkvKiB0ZXN0IG51bWJlciAqLworI2RlZmluZSBQRENfQ0hBU1NJU19EVF9TVEFURV9DSEcJKDIwVUxMIDw8IDU5KQkvKiBtYWpvciBjaGFuZ2VzIGluIHN5c3RlbSBzdGF0ZSAqLworI2RlZmluZSBQRENfQ0hBU1NJU19EVF9QUk9DX0RFQUxMT0MJKDIxVUxMIDw8IDU5KQkvKiBwcm9jZXNzb3IgZGVhbGxvY2F0ZSAqLworI2RlZmluZSBQRENfQ0hBU1NJU19EVF9SRVNFVAkJKDMwVUxMIDw8IDU5KQkvKiByZXNldCB0eXBlIGFuZCBjYXVzZSAqLworI2RlZmluZSBQRENfQ0hBU1NJU19EVF9QQV9MRUdBQ1kJKDMxVUxMIDw8IDU5KQkvKiBsZWdhY3kgUEEgaGV4IGNoYXNzaXMgY29kZSAqLworCisvKiBTeXN0ZW0gc3RhdGVzIC0gcGFydCBvZiBtYWpvciBjaGFuZ2VzIGluIHN5c3RlbSBzdGF0ZSBkYXRhIGZpZWxkICovCisjZGVmaW5lIFBEQ19DSEFTU0lTX1NZU1RBVEVfQlNUQVJUCSgwVUxMIDw8IDApCS8qIGJvb3Qgc3RhcnQgKi8KKyNkZWZpbmUgUERDX0NIQVNTSVNfU1lTVEFURV9CQ09NUAkoMVVMTCA8PCAwKQkvKiBib290IGNvbXBsZXRlICovCisjZGVmaW5lIFBEQ19DSEFTU0lTX1NZU1RBVEVfQ0hBTkdFCSgyVUxMIDw8IDApCS8qIG1ham9yIGNoYW5nZSAqLworI2RlZmluZSBQRENfQ0hBU1NJU19TWVNUQVRFX0xFRAkJKDNVTEwgPDwgMCkJLyogTEVEIGNoYW5nZSAqLworI2RlZmluZSBQRENfQ0hBU1NJU19TWVNUQVRFX1BBTklDCSg5VUxMIDw8IDApCS8qIE9TIFBhbmljICovCisjZGVmaW5lIFBEQ19DSEFTU0lTX1NZU1RBVEVfRFVNUAkoMTBVTEwgPDwgMCkJLyogbWVtb3J5IGR1bXAgKi8KKyNkZWZpbmUgUERDX0NIQVNTSVNfU1lTVEFURV9IUE1DCSgxMVVMTCA8PCAwKQkvKiBwcm9jZXNzaW5nIEhQTUMgKi8KKyNkZWZpbmUgUERDX0NIQVNTSVNfU1lTVEFURV9IQUxUCSgxNVVMTCA8PCAwKQkvKiBzeXN0ZW0gaGFsdGVkICovCisKKy8qIE1lc3NhZ2UgSUQgKi8KKyNkZWZpbmUgUERDX0NIQVNTSVNfTVNHX0lECQkoMFVMTCA8PCA0MCkJLyogd2UgZG8gbm90IGhhbmRsZSBtc2cgSURzIGF0bSAqLworCisvKiBFT00gLSBzZXBhcmF0ZXMgbG9nIGVudHJpZXMgKi8KKyNkZWZpbmUgUERDX0NIQVNTSVNfRU9NX0NMRUFSCQkoMFVMTCA8PCA0MykKKyNkZWZpbmUgUERDX0NIQVNTSVNfRU9NX1NFVAkJKDFVTEwgPDwgNDMpCisKKy8qCisgKiBQcmVmb3JtYXRlZCB3ZWxsIGtub3duIG1lc3NhZ2VzCisgKi8KKworLyogQm9vdCBzdGFydGVkICovCisjZGVmaW5lIFBEQ19DSEFTU0lTX1BNU0dfQlNUQVJUCQkoUERDX0NIQVNTSVNfQUxFUlRfU0VSUFJPQwl8IFwKKwkJCQkJIFBEQ19DSEFTU0lTX1NSQ19QUk9DCQl8IFwKKwkJCQkJIFBEQ19DSEFTU0lTX1NSQ19EX1BST0MJCXwgXAorCQkJCQkgUERDX0NIQVNTSVNfU1JDX0lEX1VOU1BFQwl8IFwKKwkJCQkJIFBEQ19DSEFTU0lTX1BCX0RfUFJPQ19OT05FCXwgXAorCQkJCQkgUERDX0NIQVNTSVNfQ0FMTF9BQ1RfSFBVWF9JTklUCXwgXAorCQkJCQkgUERDX0NIQVNTSVNfQUNUX1NUQVRVU19VTlNQRUMJfCBcCisJCQkJCSBQRENfQ0hBU1NJU19DQUxMX1NBQ1RfVU5TUEVDCXwgXAorCQkJCQkgUERDX0NIQVNTSVNfUkVUX0hQVVgJCXwgXAorCQkJCQkgUERDX0NIQVNTSVNfUkVJRF9VTlNQRUMJfCBcCisJCQkJCSBQRENfQ0hBU1NJU19EVF9TVEFURV9DSEcJfCBcCisJCQkJCSBQRENfQ0hBU1NJU19TWVNUQVRFX0JTVEFSVAl8IFwKKwkJCQkJIFBEQ19DSEFTU0lTX01TR19JRAkJfCBcCisJCQkJCSBQRENfQ0hBU1NJU19FT01fU0VUCQkpCisKKy8qIEJvb3QgY29tcGxldGUgKi8KKyNkZWZpbmUgUERDX0NIQVNTSVNfUE1TR19CQ09NUExFVEUJKFBEQ19DSEFTU0lTX0FMRVJUX1NFUlBST0MJfCBcCisJCQkJCSBQRENfQ0hBU1NJU19TUkNfUFJPQwkJfCBcCisJCQkJCSBQRENfQ0hBU1NJU19TUkNfRF9QUk9DCQl8IFwKKwkJCQkJIFBEQ19DSEFTU0lTX1NSQ19JRF9VTlNQRUMJfCBcCisJCQkJCSBQRENfQ0hBU1NJU19QQl9EX1BST0NfTk9ORQl8IFwKKwkJCQkJIFBEQ19DSEFTU0lTX0NBTExfQUNUX0hQVVhfSU5JVAl8IFwKKwkJCQkJIFBEQ19DSEFTU0lTX0FDVF9TVEFUVVNfVU5TUEVDCXwgXAorCQkJCQkgUERDX0NIQVNTSVNfQ0FMTF9TQUNUX1VOU1BFQwl8IFwKKwkJCQkJIFBEQ19DSEFTU0lTX1JFVF9IUFVYCQl8IFwKKwkJCQkJIFBEQ19DSEFTU0lTX1JFSURfVU5TUEVDCXwgXAorCQkJCQkgUERDX0NIQVNTSVNfRFRfU1RBVEVfQ0hHCXwgXAorCQkJCQkgUERDX0NIQVNTSVNfU1lTVEFURV9CQ09NUAl8IFwKKwkJCQkJIFBEQ19DSEFTU0lTX01TR19JRAkJfCBcCisJCQkJCSBQRENfQ0hBU1NJU19FT01fU0VUCQkpCisKKy8qIFNodXRkb3duICovCisjZGVmaW5lIFBEQ19DSEFTU0lTX1BNU0dfU0hVVERPV04JKFBEQ19DSEFTU0lTX0FMRVJUX1NFUlBST0MJfCBcCisJCQkJCSBQRENfQ0hBU1NJU19TUkNfUFJPQwkJfCBcCisJCQkJCSBQRENfQ0hBU1NJU19TUkNfRF9QUk9DCQl8IFwKKwkJCQkJIFBEQ19DSEFTU0lTX1NSQ19JRF9VTlNQRUMJfCBcCisJCQkJCSBQRENfQ0hBU1NJU19QQl9EX1BST0NfTk9ORQl8IFwKKwkJCQkJIFBEQ19DSEFTU0lTX0NBTExfQUNUX0hQVVhfU0hVVAl8IFwKKwkJCQkJIFBEQ19DSEFTU0lTX0FDVF9TVEFUVVNfVU5TUEVDCXwgXAorCQkJCQkgUERDX0NIQVNTSVNfQ0FMTF9TQUNUX1VOU1BFQwl8IFwKKwkJCQkJIFBEQ19DSEFTU0lTX1JFVF9IUFVYCQl8IFwKKwkJCQkJIFBEQ19DSEFTU0lTX1JFSURfVU5TUEVDCXwgXAorCQkJCQkgUERDX0NIQVNTSVNfRFRfU1RBVEVfQ0hHCXwgXAorCQkJCQkgUERDX0NIQVNTSVNfU1lTVEFURV9IQUxUCXwgXAorCQkJCQkgUERDX0NIQVNTSVNfTVNHX0lECQl8IFwKKwkJCQkJIFBEQ19DSEFTU0lTX0VPTV9TRVQJCSkKKworLyogUGFuaWMgKi8KKyNkZWZpbmUgUERDX0NIQVNTSVNfUE1TR19QQU5JQwkJKFBEQ19DSEFTU0lTX0FMRVJUX1NPRlRfRkFJTAl8IFwKKwkJCQkJIFBEQ19DSEFTU0lTX1NSQ19QUk9DCQl8IFwKKwkJCQkJIFBEQ19DSEFTU0lTX1NSQ19EX1BST0MJCXwgXAorCQkJCQkgUERDX0NIQVNTSVNfU1JDX0lEX1VOU1BFQwl8IFwKKwkJCQkJIFBEQ19DSEFTU0lTX1BCX0RfUFJPQ19OT05FCXwgXAorCQkJCQkgUERDX0NIQVNTSVNfQ0FMTF9BQ1RfSFBVWF9QQU5JQ3wgXAorCQkJCQkgUERDX0NIQVNTSVNfQUNUX1NUQVRVU19VTlNQRUMJfCBcCisJCQkJCSBQRENfQ0hBU1NJU19DQUxMX1NBQ1RfVU5TUEVDCXwgXAorCQkJCQkgUERDX0NIQVNTSVNfUkVUX0hQVVgJCXwgXAorCQkJCQkgUERDX0NIQVNTSVNfUkVJRF9VTlNQRUMJfCBcCisJCQkJCSBQRENfQ0hBU1NJU19EVF9TVEFURV9DSEcJfCBcCisJCQkJCSBQRENfQ0hBU1NJU19TWVNUQVRFX1BBTklDCXwgXAorCQkJCQkgUERDX0NIQVNTSVNfTVNHX0lECQl8IFwKKwkJCQkJIFBEQ19DSEFTU0lTX0VPTV9TRVQJCSkKKworLy8gRklYTUU6IGV4dHJhcG9sYXRlZCBkYXRhCisvKiBIUE1DICovCisjZGVmaW5lIFBEQ19DSEFTU0lTX1BNU0dfSFBNQwkJKFBEQ19DSEFTU0lTX0FMRVJUX0NPTkZfQ0hHIC8qPyovCXwgXAorCQkJCQkgUERDX0NIQVNTSVNfU1JDX1BST0MJCXwgXAorCQkJCQkgUERDX0NIQVNTSVNfU1JDX0RfUFJPQwkJfCBcCisJCQkJCSBQRENfQ0hBU1NJU19TUkNfSURfVU5TUEVDCXwgXAorCQkJCQkgUERDX0NIQVNTSVNfUEJfRF9QUk9DX05PTkUJfCBcCisJCQkJCSBQRENfQ0hBU1NJU19DQUxMX0FDVF9IUFVYX1dBUk4JfCBcCisJCQkJCSBQRENfQ0hBU1NJU19SRVRfSFBVWAkJfCBcCisJCQkJCSBQRENfQ0hBU1NJU19EVF9TVEFURV9DSEcJfCBcCisJCQkJCSBQRENfQ0hBU1NJU19TWVNUQVRFX0hQTUMJfCBcCisJCQkJCSBQRENfQ0hBU1NJU19NU0dfSUQJCXwgXAorCQkJCQkgUERDX0NIQVNTSVNfRU9NX1NFVAkJKQorCisvKiBMUE1DICovCisjZGVmaW5lIFBEQ19DSEFTU0lTX1BNU0dfTFBNQwkJKFBEQ19DSEFTU0lTX0FMRVJUX0JMT0NLRUQgLyo/Ki98IFwKKwkJCQkJIFBEQ19DSEFTU0lTX1NSQ19QUk9DCQl8IFwKKwkJCQkJIFBEQ19DSEFTU0lTX1NSQ19EX1BST0MJCXwgXAorCQkJCQkgUERDX0NIQVNTSVNfU1JDX0lEX1VOU1BFQwl8IFwKKwkJCQkJIFBEQ19DSEFTU0lTX1BCX0RfUFJPQ19OT05FCXwgXAorCQkJCQkgUERDX0NIQVNTSVNfQ0FMTF9BQ1RfSFBVWF9XQVJOCXwgXAorCQkJCQkgUERDX0NIQVNTSVNfQUNUX1NUQVRVU19VTlNQRUMJfCBcCisJCQkJCSBQRENfQ0hBU1NJU19DQUxMX1NBQ1RfVU5TUEVDCXwgXAorCQkJCQkgUERDX0NIQVNTSVNfUkVUX0hQVVgJCXwgXAorCQkJCQkgUERDX0NIQVNTSVNfUkVJRF9VTlNQRUMJfCBcCisJCQkJCSBQRENfQ0hBU1NJU19EVF9TVEFURV9DSEcJfCBcCisJCQkJCSBQRENfQ0hBU1NJU19TWVNUQVRFX0NIQU5HRQl8IFwKKwkJCQkJIFBEQ19DSEFTU0lTX01TR19JRAkJfCBcCisJCQkJCSBQRENfQ0hBU1NJU19FT01fU0VUCQkpCisKKyNlbmRpZiAvKiBfUEFSSVNDX1BEQ19DSEFTU0lTX0ggKi8KKy8qIHZpbTogc2V0IHRzPTggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9wZGNwYXQuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9wZGNwYXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGIzNGMwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL3BkY3BhdC5oCkBAIC0wLDAgKzEsMzM3IEBACisjaWZuZGVmIF9fUEFSSVNDX1BBVFBEQ19ICisjZGVmaW5lIF9fUEFSSVNDX1BBVFBEQ19ICisKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgMjAwMCAoYykgSGV3bGV0dCBQYWNrYXJkIChQYXVsIEJhbWUgPGJhbWUoKXNwYW0ucGFyaXNjLWxpbnV4Lm9yZz4pCisgKiBDb3B5cmlnaHQgMjAwMCwyMDA0IChjKSBHcmFudCBHcnVuZGxlciA8Z3J1bmRsZXIoKW5haHNwYW0ucGFyaXNjLWxpbnV4Lm9yZz4KKyAqLworCisKKyNkZWZpbmUgUERDX1BBVF9DRUxMICAgICAgICAgICAJNjRMICAgLyogSW50ZXJmYWNlIGZvciBnYWluaW5nIGFuZCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBtYW5pcHVsYXRpbiBnIGNlbGwgc3RhdGUgd2l0aGluIFBEICovCisjZGVmaW5lIFBEQ19QQVRfQ0VMTF9HRVRfTlVNQkVSICAgIDBMICAgLyogUmV0dXJuIENlbGwgbnVtYmVyICovCisjZGVmaW5lIFBEQ19QQVRfQ0VMTF9HRVRfSU5GTyAgICAgIDFMICAgLyogUmV0dXJucyBpbmZvIGFib3V0IENlbGwgKi8KKyNkZWZpbmUgUERDX1BBVF9DRUxMX01PRFVMRSAgICAgICAgMkwgICAvKiBSZXR1cm5zIGluZm8gYWJvdXQgTW9kdWxlICovCisjZGVmaW5lIFBEQ19QQVRfQ0VMTF9TRVRfQVRURU5USU9OIDlMICAgLyogU2V0IENlbGwgQXR0ZW50aW9uIGluZGljYXRvciAqLworI2RlZmluZSBQRENfUEFUX0NFTExfTlVNQkVSX1RPX0xPQyAxMEwgICAvKiBDZWxsIE51bWJlciAtPiBMb2NhdGlvbiAqLworI2RlZmluZSBQRENfUEFUX0NFTExfV0FMS19GQUJSSUMgICAxMUwgICAvKiBXYWxrIHRoZSBGYWJyaWMgKi8KKyNkZWZpbmUgUERDX1BBVF9DRUxMX0dFVF9SRFRfU0laRSAgMTJMICAgLyogUmV0dXJuIFJvdXRlIERpc3RhbmNlIFRhYmxlIFNpemVzICovCisjZGVmaW5lIFBEQ19QQVRfQ0VMTF9HRVRfUkRUICAgICAgIDEzTCAgIC8qIFJldHVybiBSb3V0ZSBEaXN0YW5jZSBUYWJsZXMgKi8KKyNkZWZpbmUgUERDX1BBVF9DRUxMX0dFVF9MT0NBTF9QREhfU1ogMTRMIC8qIFJlYWQgTG9jYWwgUERIIEJ1ZmZlciBTaXplICovCisjZGVmaW5lIFBEQ19QQVRfQ0VMTF9TRVRfTE9DQUxfUERIICAgIDE1TCAgLyogV3JpdGUgTG9jYWwgUERIIEJ1ZmZlciAqLworI2RlZmluZSBQRENfUEFUX0NFTExfR0VUX1JFTU9URV9QREhfU1ogMTZMIC8qIFJldHVybiBSZW1vdGUgUERIIEJ1ZmZlciBTaXplICovCisjZGVmaW5lIFBEQ19QQVRfQ0VMTF9HRVRfUkVNT1RFX1BESCAxN0wgLyogUmVhZCBSZW1vdGUgUERIIEJ1ZmZlciAqLworI2RlZmluZSBQRENfUEFUX0NFTExfR0VUX0RCR19JTkZPICAgMTI4TCAgLyogUmV0dXJuIERCRyBCdWZmZXIgSW5mbyAqLworI2RlZmluZSBQRENfUEFUX0NFTExfQ0hBTkdFX0FMSUFTICAgMTI5TCAgLyogQ2hhbmdlIE5vbi1FcXVpdmFsZW50IEFsaWFzIENoYWNraW5nICovCisKKworLyoKKyoqIEFyZyB0byBQRENfUEFUX0NFTExfTU9EVUxFIG1lbWFkZHJbNF0KKyoqCisqKiBBZGRyZXNzZXMgb24gdGhlIE1lcmNlZCBCdXMgIT0gYWxsIFJ1bndheSBCdXMgYWRkcmVzc2VzLgorKiogVGhpcyBpcyBpbnRlbmRlZCBmb3IgcHJvZ3JhbW1pbmcgU0JBL0xCQSBjaGlwcyByYW5nZSByZWdpc3RlcnMuCisqLworI2RlZmluZSBJT19WSUVXICAgICAgMFVMCisjZGVmaW5lIFBBX1ZJRVcgICAgICAxVUwKKworLyogUERDX1BBVF9DRUxMX01PRFVMRSBlbnRpdHkgdHlwZSB2YWx1ZXMgKi8KKyNkZWZpbmUJUEFUX0VOVElUWV9DQQkwCS8qIGNlbnRyYWwgYWdlbnQgKi8KKyNkZWZpbmUJUEFUX0VOVElUWV9QUk9DCTEJLyogcHJvY2Vzc29yICovCisjZGVmaW5lCVBBVF9FTlRJVFlfTUVNCTIJLyogbWVtb3J5IGNvbnRyb2xsZXIgKi8KKyNkZWZpbmUJUEFUX0VOVElUWV9TQkEJMwkvKiBzeXN0ZW0gYnVzIGFkYXB0ZXIgKi8KKyNkZWZpbmUJUEFUX0VOVElUWV9MQkEJNAkvKiBsb2NhbCBidXMgYWRhcHRlciAqLworI2RlZmluZQlQQVRfRU5USVRZX1BCQwk1CS8qIHByb2Nlc3NvciBidXMgY29udmVydGVyICovCisjZGVmaW5lCVBBVF9FTlRJVFlfWEJDCTYJLyogY3Jvc3NiYXIgZmFicmljIGNvbm5lY3QgKi8KKyNkZWZpbmUJUEFUX0VOVElUWV9SQwk3CS8qIGZhYnJpYyBpbnRlcmNvbm5lY3QgKi8KKworLyogUERDX1BBVF9DRUxMX01PRFVMRSBhZGRyZXNzIHJhbmdlIHR5cGUgdmFsdWVzICovCisjZGVmaW5lIFBBVF9QQk5VTSAgICAgICAgICAgMCAgICAgICAgIC8qIFBDSSBCdXMgTnVtYmVyICovCisjZGVmaW5lIFBBVF9MTU1JTyAgICAgICAgICAgMSAgICAgICAgIC8qIDwgNEcgTU1JTyBTcGFjZSAqLworI2RlZmluZSBQQVRfR01NSU8gICAgICAgICAgIDIgICAgICAgICAvKiA+IDRHIE1NSU8gU3BhY2UgKi8KKyNkZWZpbmUgUEFUX05QSU9QICAgICAgICAgICAzICAgICAgICAgLyogTm9uIFBvc3RhYmxlIEkvTyBQb3J0IFNwYWNlICovCisjZGVmaW5lIFBBVF9QSU9QICAgICAgICAgICAgNCAgICAgICAgIC8qIFBvc3RhYmxlIEkvTyBQb3J0IFNwYWNlICovCisjZGVmaW5lIFBBVF9BSFBBICAgICAgICAgICAgNSAgICAgICAgIC8qIEFkZGlvbmFsIEhQQSBTcGFjZSAqLworI2RlZmluZSBQQVRfVUZPICAgICAgICAgICAgIDYgICAgICAgICAvKiBIUEEgU3BhY2UgKFVGTyBmb3IgTWFyaXBvc2EpICovCisjZGVmaW5lIFBBVF9HTklQICAgICAgICAgICAgNyAgICAgICAgIC8qIEdOSSBSZXNlcnZlZCBTcGFjZSAqLworCisKKworLyogUERDIFBBVCBDSEFTU0lTIExPRyAtLSBQbGF0Zm9ybSBsb2dnaW5nICYgZm9yd2FyZCBwcm9ncmVzcyBmdW5jdGlvbnMgKi8KKworI2RlZmluZSBQRENfUEFUX0NIQVNTSVNfTE9HCQk2NUwKKyNkZWZpbmUgUERDX1BBVF9DSEFTU0lTX1dSSVRFX0xPRyAgICAJMEwgLyogV3JpdGUgTG9nIEVudHJ5ICovCisjZGVmaW5lIFBEQ19QQVRfQ0hBU1NJU19SRUFEX0xPRyAgICAgCTFMIC8qIFJlYWQgIExvZyBFbnRyeSAqLworCisKKy8qIFBEQyBQQVQgQ1BVICAtLSBDUFUgY29uZmlndXJhdGlvbiB3aXRoaW4gdGhlIHByb3RlY3Rpb24gZG9tYWluICovCisKKyNkZWZpbmUgUERDX1BBVF9DUFUgICAgICAgICAgICAgICAgCTY3TAorI2RlZmluZSBQRENfUEFUX0NQVV9JTkZPICAgICAgICAgICAgCTBMIC8qIFJldHVybiBDUFUgY29uZmlnIGluZm8gKi8KKyNkZWZpbmUgUERDX1BBVF9DUFVfREVMRVRFICAgICAgICAgIAkxTCAvKiBEZWxldGUgQ1BVICovCisjZGVmaW5lIFBEQ19QQVRfQ1BVX0FERCAgICAgICAgICAgICAJMkwgLyogQWRkICAgIENQVSAqLworI2RlZmluZSBQRENfUEFUX0NQVV9HRVRfTlVNQkVSICAgICAgCTNMIC8qIFJldHVybiBDUFUgTnVtYmVyICovCisjZGVmaW5lIFBEQ19QQVRfQ1BVX0dFVF9IUEEgICAgICAgICAJNEwgLyogUmV0dXJuIENQVSBIUEEgKi8KKyNkZWZpbmUgUERDX1BBVF9DUFVfU1RPUCAgICAgICAgICAgIAk1TCAvKiBTdG9wICAgQ1BVICovCisjZGVmaW5lIFBEQ19QQVRfQ1BVX1JFTkRFWlZPVVMgICAgICAJNkwgLyogUmVuZGV6dm91cyBDUFUgKi8KKyNkZWZpbmUgUERDX1BBVF9DUFVfR0VUX0NMT0NLX0lORk8gIAk3TCAvKiBSZXR1cm4gQ1BVIENsb2NrIGluZm8gKi8KKyNkZWZpbmUgUERDX1BBVF9DUFVfR0VUX1JFTkRFWlZPVVNfU1RBVEUgOEwgLyogUmV0dXJuIFJlbmRlenZvdXMgU3RhdGUgKi8KKyNkZWZpbmUgUERDX1BBVF9DUFVfUExVTkdFX0ZBQlJJQyAJMTI4TCAvKiBQbHVuZ2UgRmFicmljICovCisjZGVmaW5lIFBEQ19QQVRfQ1BVX1VQREFURV9DQUNIRV9DTEVBTlNJTkcgMTI5TCAvKiBNYW5pcHVsYXRlIENhY2hlIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogQ2xlYW5zaW5nIE1vZGUgKi8KKy8qICBQREMgUEFUIEVWRU5UIC0tIFBsYXRmb3JtIEV2ZW50cyAqLworCisjZGVmaW5lIFBEQ19QQVRfRVZFTlQgICAgICAgICAgICAgIAk2OEwKKyNkZWZpbmUgUERDX1BBVF9FVkVOVF9HRVRfQ0FQUyAgICAgCTBMIC8qIEdldCBDYXBhYmlsaXRpZXMgKi8KKyNkZWZpbmUgUERDX1BBVF9FVkVOVF9TRVRfTU9ERSAgICAgCTFMIC8qIFNldCBOb3RpZmljYXRpb24gTW9kZSAqLworI2RlZmluZSBQRENfUEFUX0VWRU5UX1NDQU4gICAgICAgICAJMkwgLyogU2NhbiBFdmVudCAqLworI2RlZmluZSBQRENfUEFUX0VWRU5UX0hBTkRMRSAgICAgICAJM0wgLyogSGFuZGxlIEV2ZW50ICovCisjZGVmaW5lIFBEQ19QQVRfRVZFTlRfR0VUX05CX0NBTEwgIAk0TCAvKiBHZXQgTm9uLUJsb2NraW5nIGNhbGwgQXJncyAqLworCisvKiAgUERDIFBBVCBIUE1DIC0tIENhdXNlIHByb2Nlc3NvciB0byBnbyBpbnRvIHNwaW4gbG9vcCwgYW5kIHdhaXQKKyAqICAJCQlmb3Igd2FrZSB1cCBmcm9tIE1vbmFyY2ggUHJvY2Vzc29yLgorICovCisKKyNkZWZpbmUgUERDX1BBVF9IUE1DICAgICAgICAgICAgICAgNzBMCisjZGVmaW5lIFBEQ19QQVRfSFBNQ19SRU5ERVpfQ1BVICAgICAwTCAvKiBnbyBpbnRvIHNwaW4gbG9vcCAqLworI2RlZmluZSBQRENfUEFUX0hQTUNfU0VUX1BBUkFNUyAgICAgMUwgLyogQWxsb3dzIE9TIHRvIHNwZWNpZnkgaW50ciB3aGljaCBQREMgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB3aWxsIHVzZSB0byBpbnRlcnJ1cHQgT1MgZHVyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBtYWNoaW5lIGNoZWNrIHJlbmRlenZvdXMgKi8KKworLyogcGFyYW1ldGVycyBmb3IgUERDX1BBVF9IUE1DX1NFVF9QQVJBTVM6ICovCisjZGVmaW5lIEhQTUNfU0VUX1BBUkFNU19JTlRSIAkgICAgMUwgLyogUmVuZGV6dm91cyBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSFBNQ19TRVRfUEFSQU1TX1dBS0UgCSAgICAyTCAvKiBXYWtlIHVwIHByb2Nlc3NvciAqLworCisKKy8qICBQREMgUEFUIElPICAtLSBPbi1saW5lIHNlcnZpY2VzIGZvciBJL08gbW9kdWxlcyAqLworCisjZGVmaW5lIFBEQ19QQVRfSU8gICAgICAgICAgICAgICAgICA3MUwKKyNkZWZpbmUgUERDX1BBVF9JT19HRVRfU0xPVF9TVEFUVVMgICAJNUwgLyogR2V0IFNsb3QgU3RhdHVzIEluZm8qLworI2RlZmluZSBQRENfUEFUX0lPX0dFVF9MT0NfRlJPTV9IQVJEV0FSRSA2TCAvKiBHZXQgUGh5c2ljYWwgTG9jYXRpb24gZnJvbSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBIYXJkd2FyZSBQYXRoICovCisjZGVmaW5lIFBEQ19QQVRfSU9fR0VUX0hBUkRXQVJFX0ZST01fTE9DIDdMIC8qIEdldCBIYXJkd2FyZSBQYXRoIGZyb20gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIFBoeXNpY2FsIExvY2F0aW9uICovCisjZGVmaW5lIFBEQ19QQVRfSU9fR0VUX1BDSV9DT05GSUdfRlJPTV9IVyAxMUwgLyogR2V0IFBDSSBDb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogQWRkcmVzcyBmcm9tIEhhcmR3YXJlIFBhdGggKi8KKyNkZWZpbmUgUERDX1BBVF9JT19HRVRfSFdfRlJPTV9QQ0lfQ09ORklHIDEyTCAvKiBHZXQgSGFyZHdhcmUgUGF0aCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBmcm9tIFBDSSBDb25maWd1cmF0aW9uIEFkZHJlc3MgKi8KKyNkZWZpbmUgUERDX1BBVF9JT19SRUFEX0hPU1RfQlJJREdFX0lORk8gMTNMICAvKiBSZWFkIEhvc3QgQnJpZGdlIFN0YXRlIEluZm8gKi8KKyNkZWZpbmUgUERDX1BBVF9JT19DTEVBUl9IT1NUX0JSSURHRV9JTkZPIDE0TCAvKiBDbGVhciBIb3N0IEJyaWRnZSBTdGF0ZSBJbmZvKi8KKyNkZWZpbmUgUERDX1BBVF9JT19HRVRfUENJX1JPVVRJTkdfVEFCTEVfU0laRSAxNUwgLyogR2V0IFBDSSBJTlQgUm91dGluZyBUYWJsZSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogU2l6ZSAqLworI2RlZmluZSBQRENfUEFUX0lPX0dFVF9QQ0lfUk9VVElOR19UQUJMRSAgMTZMIC8qIEdldCBQQ0kgSU5UIFJvdXRpbmcgVGFibGUgKi8KKyNkZWZpbmUgUERDX1BBVF9JT19HRVRfSElOVF9UQUJMRV9TSVpFIAkxN0wgLyogR2V0IEhpbnQgVGFibGUgU2l6ZSAqLworI2RlZmluZSBQRENfUEFUX0lPX0dFVF9ISU5UX1RBQkxFICAgCTE4TCAvKiBHZXQgSGludCBUYWJsZSAqLworI2RlZmluZSBQRENfUEFUX0lPX1BDSV9DT05GSUdfUkVBRCAgCTE5TCAvKiBQQ0kgQ29uZmlnIFJlYWQgKi8KKyNkZWZpbmUgUERDX1BBVF9JT19QQ0lfQ09ORklHX1dSSVRFIAkyMEwgLyogUENJIENvbmZpZyBXcml0ZSAqLworI2RlZmluZSBQRENfUEFUX0lPX0dFVF9OVU1fSU9fU0xPVFMgCTIxTCAvKiBHZXQgTnVtYmVyIG9mIEkvTyBCYXkgU2xvdHMgaW4gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCSAgKiBDYWJpbmV0ICovCisjZGVmaW5lIFBEQ19QQVRfSU9fR0VUX0xPQ19JT19TTE9UUyAJMjJMIC8qIEdldCBQaHlzaWNhbCBMb2NhdGlvbiBvZiBJL08gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkgICAgIC8qIEJheSBTbG90cyBpbiBDYWJpbmV0ICovCisjZGVmaW5lIFBEQ19QQVRfSU9fQkFZX1NUQVRVU19JTkZPICAJMjhMIC8qIEdldCBJL08gQmF5IFNsb3QgU3RhdHVzIEluZm8gKi8KKyNkZWZpbmUgUERDX1BBVF9JT19HRVRfUFJPQ19WSUVXICAgICAgICAyOUwgLyogR2V0IFByb2Nlc3NvciB2aWV3IG9mIElPIGFkZHJlc3MgKi8KKyNkZWZpbmUgUERDX1BBVF9JT19QUk9HX1NCQV9ESVJfUkFOR0UgICAzMEwgLyogUHJvZ3JhbSBkaXJlY3RlZCByYW5nZSAqLworCisKKy8qIFBEQyBQQVQgTUVNICAtLSBNYW5hZ2UgbWVtb3J5IHBhZ2UgZGVhbGxvY2F0aW9uICovCisKKyNkZWZpbmUgUERDX1BBVF9NRU0gICAgICAgICAgICA3MkwKKyNkZWZpbmUgUERDX1BBVF9NRU1fUERfSU5GTyAgICAgCTBMIC8qIFJldHVybiBQRFQgaW5mbyBmb3IgUEQgICAgICAgKi8KKyNkZWZpbmUgUERDX1BBVF9NRU1fUERfQ0xFQVIgICAgCTFMIC8qIENsZWFyIFBEVCBmb3IgUEQgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUERDX1BBVF9NRU1fUERfUkVBRCAgICAgCTJMIC8qIFJlYWQgUERUIGVudHJpZXMgZm9yIFBEICAgICAgKi8KKyNkZWZpbmUgUERDX1BBVF9NRU1fUERfUkVTRVQgICAgCTNMIC8qIFJlc2V0IGNsZWFyIGJpdCBmb3IgUEQgICAgICAgKi8KKyNkZWZpbmUgUERDX1BBVF9NRU1fQ0VMTF9JTkZPICAgCTVMIC8qIFJldHVybiBQRFQgaW5mbyBGb3IgQ2VsbCAgICAgKi8KKyNkZWZpbmUgUERDX1BBVF9NRU1fQ0VMTF9DTEVBUiAgCTZMIC8qIENsZWFyIFBEVCBGb3IgQ2VsbCAgICAgICAgICAgKi8KKyNkZWZpbmUgUERDX1BBVF9NRU1fQ0VMTF9SRUFEICAgCTdMIC8qIFJlYWQgUERUIGVudHJpZXMgRm9yIENlbGwgICAgKi8KKyNkZWZpbmUgUERDX1BBVF9NRU1fQ0VMTF9SRVNFVCAgCThMIC8qIFJlc2V0IGNsZWFyIGJpdCBGb3IgQ2VsbCAgICAgKi8KKyNkZWZpbmUgUERDX1BBVF9NRU1fU0VUR00JICAJOUwgLyogU2V0IEdvbGRlbiBNZW1vcnkgdmFsdWUgICAgICAqLworI2RlZmluZSBQRENfUEFUX01FTV9BRERfUEFHRSAgICAJMTBMIC8qIEFERHMgYSBwYWdlIHRvIHRoZSBjZWxsICAgICAgKi8KKyNkZWZpbmUgUERDX1BBVF9NRU1fQUREUkVTUyAgICAgCTExTCAvKiBHZXQgUGh5c2ljYWwgTG9jYXRpb24gRnJvbSAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCSAvKiBNZW1vcnkgQWRkcmVzcyAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBEQ19QQVRfTUVNX0dFVF9UWFRfU0laRSAgIAkxMkwgLyogR2V0IEZvcm1hdHRlZCBUZXh0IFNpemUgICAqLworI2RlZmluZSBQRENfUEFUX01FTV9HRVRfUERfVFhUICAgICAJMTNMIC8qIEdldCBQRCBGb3JtYXR0ZWQgVGV4dCAgICAgKi8KKyNkZWZpbmUgUERDX1BBVF9NRU1fR0VUX0NFTExfVFhUICAgCTE0TCAvKiBHZXQgQ2VsbCBGb3JtYXR0ZWQgVGV4dCAgICovCisjZGVmaW5lIFBEQ19QQVRfTUVNX1JEX1NUQVRFX0lORk8gIAkxNUwgLyogUmVhZCBNZW0gTW9kdWxlIFN0YXRlIEluZm8qLworI2RlZmluZSBQRENfUEFUX01FTV9DTFJfU1RBVEVfSU5GTyAJMTZMIC8qQ2xlYXIgTWVtIE1vZHVsZSBTdGF0ZSBJbmZvKi8KKyNkZWZpbmUgUERDX1BBVF9NRU1fQ0xFQU5fUkFOR0UgICAgCTEyOEwgLypDbGVhbiBNZW0gaW4gc3BlY2lmaWMgcmFuZ2UqLworI2RlZmluZSBQRENfUEFUX01FTV9HRVRfVEJMX1NJWkUgICAJMTMxTCAvKiBHZXQgTWVtb3J5IFRhYmxlIFNpemUgICAgICovCisjZGVmaW5lIFBEQ19QQVRfTUVNX0dFVF9UQkwgICAgICAgIAkxMzJMIC8qIEdldCBNZW1vcnkgVGFibGUgICAgICAgICAgKi8KKworCisvKiBQREMgUEFUIE5WT0xBVElMRSAgLS0gIEFjY2VzcyBOb24tVm9sYXRpbGUgTWVtb3J5ICovCisKKyNkZWZpbmUgUERDX1BBVF9OVk9MQVRJTEUJNzNMCisjZGVmaW5lIFBEQ19QQVRfTlZPTEFUSUxFX1JFQUQJCTBMIC8qIFJlYWQgTm9uLVZvbGF0aWxlIE1lbW9yeSAgICovCisjZGVmaW5lIFBEQ19QQVRfTlZPTEFUSUxFX1dSSVRFCQkxTCAvKiBXcml0ZSBOb24tVm9sYXRpbGUgTWVtb3J5ICAqLworI2RlZmluZSBQRENfUEFUX05WT0xBVElMRV9HRVRfU0laRQkyTCAvKiBSZXR1cm4gc2l6ZSBvZiBOVk0gICAgICAgICAqLworI2RlZmluZSBQRENfUEFUX05WT0xBVElMRV9WRVJJRlkJM0wgLyogVmVyaWZ5IGNvbnRlbnRzIG9mIE5WTSAgICAgKi8KKyNkZWZpbmUgUERDX1BBVF9OVk9MQVRJTEVfSU5JVAkJNEwgLyogSW5pdGlhbGl6ZSBOVk0gICAgICAgICAgICAgKi8KKworLyogUERDIFBBVCBQRCAqLworI2RlZmluZSBQRENfUEFUX1BECQk3NEwgICAgICAgICAvKiBQcm90ZWN0aW9uIERvbWFpbiBJbmZvICAgKi8KKyNkZWZpbmUgUERDX1BBVF9QRF9HRVRfQUREUl9NQVAJCTBMICAvKiBHZXQgQWRkcmVzcyBNYXAgICAgICAgICAgKi8KKworLyogUERDX1BBVF9QRF9HRVRfQUREUl9NQVAgZW50cnkgdHlwZXMgKi8KKyNkZWZpbmUgUEFUX01FTU9SWV9ERVNDUklQVE9SCQkxICAgCisKKy8qIFBEQ19QQVRfUERfR0VUX0FERFJfTUFQIG1lbW9yeSB0eXBlcyAqLworI2RlZmluZSBQQVRfTUVNVFlQRV9NRU1PUlkJCTAKKyNkZWZpbmUgUEFUX01FTVRZUEVfRklSTVdBUkUJCTQKKworLyogUERDX1BBVF9QRF9HRVRfQUREUl9NQVAgbWVtb3J5IHVzYWdlICovCisjZGVmaW5lIFBBVF9NRU1VU0VfR0VORVJBTAkJMAorI2RlZmluZSBQQVRfTUVNVVNFX0dJCQkJMTI4CisjZGVmaW5lIFBBVF9NRU1VU0VfR05JCQkJMTI5CisKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjaWZkZWYgQ09ORklHXzY0QklUCisjZGVmaW5lIGlzX3BkY19wYXQoKQkoUERDX1RZUEVfUEFUID09IHBkY190eXBlKQorZXh0ZXJuIGludCBwZGNfcGF0X2dldF9pcnRfc2l6ZSh1bnNpZ25lZCBsb25nICpudW1fZW50cmllcywgdW5zaWduZWQgbG9uZyBjZWxsX251bSk7CitleHRlcm4gaW50IHBkY19wYXRfZ2V0X2lydCh2b2lkICpyX2FkZHIsIHVuc2lnbmVkIGxvbmcgY2VsbF9udW0pOworI2Vsc2UJLyogISBDT05GSUdfNjRCSVQgKi8KKy8qIE5vIFBBVCBzdXBwb3J0IGZvciAzMi1iaXQga2VybmVscy4uLnNvcnJ5ICovCisjZGVmaW5lIGlzX3BkY19wYXQoKQkoMCkKKyNkZWZpbmUgcGRjX3BhdF9nZXRfaXJ0X3NpemUobnVtX2VudHJpZXMsIGNlbGxfbnVtbikJUERDX0JBRF9QUk9DCisjZGVmaW5lIHBkY19wYXRfZ2V0X2lydChyX2FkZHIsIGNlbGxfbnVtKQkJUERDX0JBRF9QUk9DCisjZW5kaWYJLyogISBDT05GSUdfNjRCSVQgKi8KKworCitzdHJ1Y3QgcGRjX3BhdF9jZWxsX251bSB7CisJdW5zaWduZWQgbG9uZyBjZWxsX251bTsKKwl1bnNpZ25lZCBsb25nIGNlbGxfbG9jOworfTsKKworc3RydWN0IHBkY19wYXRfY3B1X251bSB7CisJdW5zaWduZWQgbG9uZyBjcHVfbnVtOworCXVuc2lnbmVkIGxvbmcgY3B1X2xvYzsKK307CisKK3N0cnVjdCBwZGNfcGF0X3BkX2FkZHJfbWFwX2VudHJ5IHsKKwl1bnNpZ25lZCBjaGFyIGVudHJ5X3R5cGU7ICAgICAgIC8qIDEgPSBNZW1vcnkgRGVzY3JpcHRvciBFbnRyeSBUeXBlICovCisJdW5zaWduZWQgY2hhciByZXNlcnZlMVs1XTsKKwl1bnNpZ25lZCBjaGFyIG1lbW9yeV90eXBlOworCXVuc2lnbmVkIGNoYXIgbWVtb3J5X3VzYWdlOworCXVuc2lnbmVkIGxvbmcgcGFkZHI7CisJdW5zaWduZWQgaW50ICBwYWdlczsgICAgICAgICAgICAvKiBMZW5ndGggaW4gNEsgcGFnZXMgKi8KKwl1bnNpZ25lZCBpbnQgIHJlc2VydmUyOworCXVuc2lnbmVkIGxvbmcgY2VsbF9tYXA7Cit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogUERDX1BBVF9DRUxMW1JldHVybiBDZWxsIE1vZHVsZV0gbWVtYWRkclswXSBjb25mX2Jhc2VfYWRkcgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIEJpdCAgMCB0byA1MSAtIGNvbmZfYmFzZV9hZGRyCisqIEJpdCA1MiB0byA2MiAtIHJlc2VydmVkCisqIEJpdCAgICAgICA2MyAtIGVuZGlhbmVzcyBiaXQKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBQQVRfR0VUX0NCQSh2YWx1ZSkgKCh2YWx1ZSkgJiAweGZmZmZmZmZmZmZmZmYwMDBVTCkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFBEQ19QQVRfQ0VMTFtSZXR1cm4gQ2VsbCBNb2R1bGVdIG1lbWFkZHJbMV0gbW9kX2luZm8KKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBCaXQgIDAgdG8gIDcgLSBlbnRpdHkgdHlwZQorKiAgICAwID0gY2VudHJhbCBhZ2VudCwgICAgICAgICAgICAxID0gcHJvY2Vzc29yLAorKiAgICAyID0gbWVtb3J5IGNvbnRyb2xsZXIsICAgICAgICAzID0gc3lzdGVtIGJ1cyBhZGFwdGVyLAorKiAgICA0ID0gbG9jYWwgYnVzIGFkYXB0ZXIsICAgICAgICA1ID0gcHJvY2Vzc29yIGJ1cyBjb252ZXJ0ZXIsCisqICAgIDYgPSBjcm9zc2JhciBmYWJyaWMgY29ubmVjdCwgIDcgPSBmYWJyaWMgaW50ZXJjb25uZWN0LAorKiAgICA4IHRvIDI1NCByZXNlcnZlZCwgICAgICAgICAgICAyNTUgPSB1bmtub3duLgorKiBCaXQgIDggdG8gMTUgLSBEVkkKKyogQml0IDE2IHRvIDIzIC0gSU9DIGZ1bmN0aW9ucworKiBCaXQgMjQgdG8gMzkgLSByZXNlcnZlZAorKiBCaXQgNDAgdG8gNjMgLSBtb2RfcGFnZXMKKyogICAgbnVtYmVyIG9mIDRLIHBhZ2VzIGEgbW9kdWxlIG9jY3VwaWVzIHN0YXJ0aW5nIGF0IGNvbmZfYmFzZV9hZGRyCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgUEFUX0dFVF9FTlRJVFkodmFsdWUpCSgoKHZhbHVlKSA+PiA1NikgJiAweGZmVUwpCisjZGVmaW5lIFBBVF9HRVRfRFZJKHZhbHVlKQkoKCh2YWx1ZSkgPj4gNDgpICYgMHhmZlVMKQorI2RlZmluZSBQQVRfR0VUX0lPQyh2YWx1ZSkJKCgodmFsdWUpID4+IDQwKSAmIDB4ZmZVTCkKKyNkZWZpbmUgUEFUX0dFVF9NT0RfUEFHRVModmFsdWUpKCgodmFsdWUpICYgMHhmZmZmZmZVTCkKKworCisvKgorKiogUERDX1BBVF9DRUxMX0dFVF9JTkZPIHJldHVybiBibG9jaworKi8KK3R5cGVkZWYgc3RydWN0IHBkY19wYXRfY2VsbF9pbmZvX3J0bl9ibG9jayB7CisJdW5zaWduZWQgbG9uZyBjcHVfaW5mbzsKKwl1bnNpZ25lZCBsb25nIGNlbGxfaW5mbzsKKwl1bnNpZ25lZCBsb25nIGNlbGxfbG9jYXRpb247CisJdW5zaWduZWQgbG9uZyByZW9fbG9jYXRpb247CisJdW5zaWduZWQgbG9uZyBtZW1fc2l6ZTsKKwl1bnNpZ25lZCBsb25nIGRpbW1fc3RhdHVzOworCXVuc2lnbmVkIGxvbmcgcGRjX3JldjsKKwl1bnNpZ25lZCBsb25nIGZhYnJpY19pbmZvMDsKKwl1bnNpZ25lZCBsb25nIGZhYnJpY19pbmZvMTsKKwl1bnNpZ25lZCBsb25nIGZhYnJpY19pbmZvMjsKKwl1bnNpZ25lZCBsb25nIGZhYnJpY19pbmZvMzsKKwl1bnNpZ25lZCBsb25nIHJlc2VydmVkWzIxXTsKK30gcGRjX3BhdF9jZWxsX2luZm9fcnRuX2Jsb2NrX3Q7CisKKworLyogRklYTUU6IG1vZFs1MDhdIHNob3VsZCByZWFsbHkgYmUgYSB1bmlvbiBvZiB0aGUgdmFyaW91cyBtb2QgY29tcG9uZW50cyAqLworc3RydWN0IHBkY19wYXRfY2VsbF9tb2RfbWFkZHJfYmxvY2sgewkvKiBQRENfUEFUX0NFTExfTU9EVUxFICovCisJdW5zaWduZWQgbG9uZyBjYmE7CQkvKiBmdW5jIDAgY2ZnIHNwYWNlIGFkZHJlc3MgKi8KKwl1bnNpZ25lZCBsb25nIG1vZF9pbmZvOwkJLyogbW9kdWxlIGluZm9ybWF0aW9uICovCisJdW5zaWduZWQgbG9uZyBtb2RfbG9jYXRpb247CS8qIHBoeXNpY2FsIGxvY2F0aW9uIG9mIHRoZSBtb2R1bGUgKi8KKwlzdHJ1Y3QgaGFyZHdhcmVfcGF0aCBtb2RfcGF0aDsJLyogbW9kdWxlIHBhdGggKGRldmljZSBwYXRoIC0gbGF5ZXJzKSAqLworCXVuc2lnbmVkIGxvbmcgbW9kWzUwOF07CQkvKiBQQVQgY2VsbCBtb2R1bGUgY29tcG9uZW50cyAqLworfSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSkgOworCit0eXBlZGVmIHN0cnVjdCBwZGNfcGF0X2NlbGxfbW9kX21hZGRyX2Jsb2NrIHBkY19wYXRfY2VsbF9tb2RfbWFkZHJfYmxvY2tfdDsKKworCitleHRlcm4gaW50IHBkY19wYXRfY2hhc3Npc19zZW5kX2xvZyh1bnNpZ25lZCBsb25nIHN0YXR1cywgdW5zaWduZWQgbG9uZyBkYXRhKTsKK2V4dGVybiBpbnQgcGRjX3BhdF9jZWxsX2dldF9udW1iZXIoc3RydWN0IHBkY19wYXRfY2VsbF9udW0gKmNlbGxfaW5mbyk7CitleHRlcm4gaW50IHBkY19wYXRfY2VsbF9tb2R1bGUodW5zaWduZWQgbG9uZyAqYWN0Y250LCB1bnNpZ25lZCBsb25nIHBsb2MsIHVuc2lnbmVkIGxvbmcgbW9kLCB1bnNpZ25lZCBsb25nIHZpZXdfdHlwZSwgdm9pZCAqbWVtX2FkZHIpOworZXh0ZXJuIGludCBwZGNfcGF0X2NlbGxfbnVtX3RvX2xvYyh2b2lkICosIHVuc2lnbmVkIGxvbmcpOworCitleHRlcm4gaW50IHBkY19wYXRfY3B1X2dldF9udW1iZXIoc3RydWN0IHBkY19wYXRfY3B1X251bSAqY3B1X2luZm8sIHZvaWQgKmhwYSk7CisKK2V4dGVybiBpbnQgcGRjX3BhdF9wZF9nZXRfYWRkcl9tYXAodW5zaWduZWQgbG9uZyAqYWN0dWFsX2xlbiwgdm9pZCAqbWVtX2FkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKKworCitleHRlcm4gaW50IHBkY19wYXRfaW9fcGNpX2NmZ19yZWFkKHVuc2lnbmVkIGxvbmcgcGNpX2FkZHIsIGludCBwY2lfc2l6ZSwgdTMyICp2YWwpOyAKK2V4dGVybiBpbnQgcGRjX3BhdF9pb19wY2lfY2ZnX3dyaXRlKHVuc2lnbmVkIGxvbmcgcGNpX2FkZHIsIGludCBwY2lfc2l6ZSwgdTMyIHZhbCk7IAorCisKKy8qIEZsYWcgdG8gaW5kaWNhdGUgdGhpcyBpcyBhIFBBVCBib3guLi5kb24ndCB1c2UgdGhpcyB1bmxlc3MgeW91CisqKiByZWFsbHkgaGF2ZSB0by4uLml0IG1pZ2h0IGdvIGF3YXkgc29tZSBkYXkuCisqLworZXh0ZXJuIGludCBwZGNfcGF0OyAgICAgLyogYXJjaC9wYXJpc2Mva2VybmVsL2ludmVudG9yeS5jICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBQRENfUEFUX0NFTExbUmV0dXJuIENlbGwgTW9kdWxlXSBtZW1hZGRyWzBdIGNvbmZfYmFzZV9hZGRyCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogQml0ICAwIHRvIDUxIC0gY29uZl9iYXNlX2FkZHIKKyogQml0IDUyIHRvIDYyIC0gcmVzZXJ2ZWQKKyogQml0ICAgICAgIDYzIC0gZW5kaWFuZXNzIGJpdAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFBBVF9HRVRfQ0JBKHZhbHVlKSAoKHZhbHVlKSAmIDB4ZmZmZmZmZmZmZmZmZjAwMFVMKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogUERDX1BBVF9DRUxMW1JldHVybiBDZWxsIE1vZHVsZV0gbWVtYWRkclsxXSBtb2RfaW5mbworKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIEJpdCAgMCB0byAgNyAtIGVudGl0eSB0eXBlCisqICAgIDAgPSBjZW50cmFsIGFnZW50LCAgICAgICAgICAgIDEgPSBwcm9jZXNzb3IsCisqICAgIDIgPSBtZW1vcnkgY29udHJvbGxlciwgICAgICAgIDMgPSBzeXN0ZW0gYnVzIGFkYXB0ZXIsCisqICAgIDQgPSBsb2NhbCBidXMgYWRhcHRlciwgICAgICAgIDUgPSBwcm9jZXNzb3IgYnVzIGNvbnZlcnRlciwKKyogICAgNiA9IGNyb3NzYmFyIGZhYnJpYyBjb25uZWN0LCAgNyA9IGZhYnJpYyBpbnRlcmNvbm5lY3QsCisqICAgIDggdG8gMjU0IHJlc2VydmVkLCAgICAgICAgICAgIDI1NSA9IHVua25vd24uCisqIEJpdCAgOCB0byAxNSAtIERWSQorKiBCaXQgMTYgdG8gMjMgLSBJT0MgZnVuY3Rpb25zCisqIEJpdCAyNCB0byAzOSAtIHJlc2VydmVkCisqIEJpdCA0MCB0byA2MyAtIG1vZF9wYWdlcworKiAgICBudW1iZXIgb2YgNEsgcGFnZXMgYSBtb2R1bGUgb2NjdXBpZXMgc3RhcnRpbmcgYXQgY29uZl9iYXNlX2FkZHIKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBQQVRfR0VUX0VOVElUWSh2YWx1ZSkJKCgodmFsdWUpID4+IDU2KSAmIDB4ZmZVTCkKKyNkZWZpbmUgUEFUX0dFVF9EVkkodmFsdWUpCSgoKHZhbHVlKSA+PiA0OCkgJiAweGZmVUwpCisjZGVmaW5lIFBBVF9HRVRfSU9DKHZhbHVlKQkoKCh2YWx1ZSkgPj4gNDApICYgMHhmZlVMKQorI2RlZmluZSBQQVRfR0VUX01PRF9QQUdFUyh2YWx1ZSkoKCh2YWx1ZSkgJiAweGZmZmZmZlVMKQorCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiAhIF9fUEFSSVNDX1BBVFBEQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvcGVyY3B1LmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvcGVyY3B1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBkY2QxOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9wZXJjcHUuaApAQCAtMCwwICsxLDcgQEAKKyNpZm5kZWYgX1BBUklTQ19QRVJDUFVfSAorI2RlZmluZSBfUEFSSVNDX1BFUkNQVV9ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wZXJjcHUuaD4KKworI2VuZGlmIAorCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvcGVyZi5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL3BlcmYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMThlMTE5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL3BlcmYuaApAQCAtMCwwICsxLDc0IEBACisjaWZuZGVmIF9BU01fUEVSRl9IXworI2RlZmluZSBfQVNNX1BFUkZfSF8KKworLyogaW9jdGxzICovCisjZGVmaW5lIFBBX1BFUkZfT04JX0lPKCdwJywgMSkKKyNkZWZpbmUgUEFfUEVSRl9PRkYJX0lPUigncCcsIDIsIHVuc2lnbmVkIGludCkKKyNkZWZpbmUgUEFfUEVSRl9WRVJTSU9OCV9JT1IoJ3AnLCAzLCBpbnQpCisKKyNkZWZpbmUgUEFfUEVSRl9ERVYJInBlcmYiCisjZGVmaW5lIFBBX1BFUkZfTUlOT1IJMTQ2CisKKy8qIEludGVyZmFjZSB0eXBlcyAqLworI2RlZmluZSBVTktOT1dOX0lOVEYgICAgMjU1CisjZGVmaW5lIE9OWVhfSU5URiAgICAgICAgIDAKKyNkZWZpbmUgQ1VEQV9JTlRGICAgICAgICAgMQorCisvKiBDb21tb24gT255eCBhbmQgQ3VkYSBpbWFnZXMgKi8KKyNkZWZpbmUgQ1BJICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEJVU1VUSUwgICAgICAgICAgICAgMQorI2RlZmluZSBUTEJNSVNTICAgICAgICAgICAgIDIKKyNkZWZpbmUgVExCSEFORE1JU1MgICAgICAgICAzCisjZGVmaW5lIFBUS04gICAgICAgICAgICAgICAgNAorI2RlZmluZSBQTlRLTiAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgSU1JU1MgICAgICAgICAgICAgICA2CisjZGVmaW5lIERNSVNTICAgICAgICAgICAgICAgNworI2RlZmluZSBETUlTU19BQ0NFU1MgICAgICAgIDggCisjZGVmaW5lIEJJR19DUEkgCSAgICA5CisjZGVmaW5lIEJJR19MUwkJICAgMTAgIAorI2RlZmluZSBCUl9BQk9SVAkgICAxMQorI2RlZmluZSBJU05UCQkgICAxMiAKKyNkZWZpbmUgUVVBRFJBTlQgICAgICAgICAgIDEzCisjZGVmaW5lIFJXX1BERkVUICAgICAgICAgICAxNAorI2RlZmluZSBSV19XREZFVCAgICAgICAgICAgMTUKKyNkZWZpbmUgU0hMSUJfQ1BJICAgICAgICAgIDE2CisKKy8qIEN1ZGEgb25seSBJbWFnZXMgKi8KKyNkZWZpbmUgRkxPUFMgICAgICAgICAgICAgIDE3CisjZGVmaW5lIENBQ0hFTUlTUyAgICAgICAgICAxOCAKKyNkZWZpbmUgQlJBTkNIRVMgICAgICAgICAgIDE5ICAgICAgICAgICAgIAorI2RlZmluZSBDUlNUQUNLICAgICAgICAgICAgMjAgCisjZGVmaW5lIElfQ0FDSEVfU1BFQyAgICAgICAyMSAKKyNkZWZpbmUgTUFYX0NVREFfSU1BR0VTICAgIDIyIAorCisvKiBPbnl4IG9ubHkgSW1hZ2VzICovCisjZGVmaW5lIEFERFJfSU5WX0FCT1JUX0FMVSAxNworI2RlZmluZSBCUkFEX1NUQUxMCSAgIDE4IAorI2RlZmluZSBDTlRMX0lOX1BJUEVMCSAgIDE5IAorI2RlZmluZSBEU05UX1hGSAkgICAyMCAKKyNkZWZpbmUgRkVUX1NJRzEJICAgMjEgCisjZGVmaW5lIEZFVF9TSUcyCSAgIDIyIAorI2RlZmluZSBHN18xCQkgICAyMyAKKyNkZWZpbmUgRzdfMgkJICAgMjQgCisjZGVmaW5lIEc3XzMgCQkgICAyNQorI2RlZmluZSBHN180CQkgICAyNgorI2RlZmluZSBNUEJfTEFCT1JUICAgICAgICAgMjcKKyNkZWZpbmUgUEFOSUMgICAgICAgICAgICAgIDI4CisjZGVmaW5lIFJBUkVfSU5TVCAgICAgICAgICAyOSAKKyNkZWZpbmUgUldfREZFVCAgICAgICAgICAgIDMwIAorI2RlZmluZSBSV19JRkVUICAgICAgICAgICAgMzEgCisjZGVmaW5lIFJXX1NERkVUICAgICAgICAgICAzMiAKKyNkZWZpbmUgU1BFQ19JRkVUICAgICAgICAgIDMzIAorI2RlZmluZSBTVF9DT05EMCAgICAgICAgICAgMzQgCisjZGVmaW5lIFNUX0NPTkQxICAgICAgICAgICAzNSAKKyNkZWZpbmUgU1RfQ09ORDIgICAgICAgICAgIDM2CisjZGVmaW5lIFNUX0NPTkQzICAgICAgICAgICAzNworI2RlZmluZSBTVF9DT05ENCAgICAgICAgICAgMzgKKyNkZWZpbmUgU1RfVU5QUkVEMCAgICAgICAgIDM5IAorI2RlZmluZSBTVF9VTlBSRUQxICAgICAgICAgNDAgCisjZGVmaW5lIFVOUFJFRCAgICAgICAgICAgICA0MSAKKyNkZWZpbmUgR09fU1RPUkUgICAgICAgICAgIDQyCisjZGVmaW5lIFNITElCX0NBTEwgICAgICAgICA0MworI2RlZmluZSBNQVhfT05ZWF9JTUFHRVMgICAgNDQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvcGdhbGxvYy5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL3BnYWxsb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjkxZDY2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL3BnYWxsb2MuaApAQCAtMCwwICsxLDE0MyBAQAorI2lmbmRlZiBfQVNNX1BHQUxMT0NfSAorI2RlZmluZSBfQVNNX1BHQUxMT0NfSAorCisjaW5jbHVkZSA8bGludXgvZ2ZwLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9maXhtYXAuaD4KKworI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgorCisvKiBBbGxvY2F0ZSB0aGUgdG9wIGxldmVsIHBnZCAocGFnZSBkaXJlY3RvcnkpCisgKgorICogSGVyZSAoZm9yIDY0IGJpdCBrZXJuZWxzKSB3ZSBpbXBsZW1lbnQgYSBIeWJyaWQgTDIvTDMgc2NoZW1lOiB3ZQorICogYWxsb2NhdGUgdGhlIGZpcnN0IHBtZCBhZGphY2VudCB0byB0aGUgcGdkLiAgVGhpcyBtZWFucyB0aGF0IHdlIGNhbgorICogc3VidHJhY3QgYSBjb25zdGFudCBvZmZzZXQgdG8gZ2V0IHRvIGl0LiAgVGhlIHBtZCBhbmQgcGdkIHNpemVzIGFyZQorICogYXJyYW5nZWQgc28gdGhhdCBhIHNpbmdsZSBwbWQgY292ZXJzIDRHQiAoZ2l2aW5nIGEgZnVsbCBMUDY0CisgKiBwcm9jZXNzIGFjY2VzcyB0byA4VEIpIHNvIG91ciBsb29rdXBzIGFyZSBlZmZlY3RpdmVseSBMMiBmb3IgdGhlCisgKiBmaXJzdCA0R0Igb2YgdGhlIGtlcm5lbCAoaS5lLiBmb3IgYWxsIElMUDMyIHByb2Nlc3NlcyBhbmQgYWxsIHRoZQorICoga2VybmVsIGZvciBtYWNoaW5lcyB3aXRoIHVuZGVyIDRHQiBvZiBtZW1vcnkpICovCitzdGF0aWMgaW5saW5lIHBnZF90ICpwZ2RfYWxsb2Moc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJcGdkX3QgKnBnZCA9IChwZ2RfdCAqKV9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwKKwkJCQkJICAgICAgIFBHRF9BTExPQ19PUkRFUik7CisJcGdkX3QgKmFjdHVhbF9wZ2QgPSBwZ2Q7CisKKwlpZiAobGlrZWx5KHBnZCAhPSBOVUxMKSkgeworCQltZW1zZXQocGdkLCAwLCBQQUdFX1NJWkU8PFBHRF9BTExPQ19PUkRFUik7CisjaWZkZWYgX19MUDY0X18KKwkJYWN0dWFsX3BnZCArPSBQVFJTX1BFUl9QR0Q7CisJCS8qIFBvcHVsYXRlIGZpcnN0IHBtZCB3aXRoIGFsbG9jYXRlZCBtZW1vcnkuICBXZSBtYXJrIGl0CisJCSAqIHdpdGggUHhEX0ZMQUdfQVRUQUNIRUQgYXMgYSBzaWduYWwgdG8gdGhlIHN5c3RlbSB0aGF0IHRoaXMKKwkJICogcG1kIGVudHJ5IG1heSBub3QgYmUgY2xlYXJlZC4gKi8KKwkJX19wZ2RfdmFsX3NldCgqYWN0dWFsX3BnZCwgKFB4RF9GTEFHX1BSRVNFTlQgfCAKKwkJCQkgICAgICAgIFB4RF9GTEFHX1ZBTElEIHwgCisJCQkJCVB4RF9GTEFHX0FUVEFDSEVEKSAKKwkJCSsgKF9fdTMyKShfX3BhKCh1bnNpZ25lZCBsb25nKXBnZCkgPj4gUHhEX1ZBTFVFX1NISUZUKSk7CisJCS8qIFRoZSBmaXJzdCBwbWQgZW50cnkgYWxzbyBpcyBtYXJrZWQgd2l0aCBfUEFHRV9HQVRFV0FZIGFzCisJCSAqIGEgc2lnbmFsIHRoYXQgdGhpcyBwbWQgbWF5IG5vdCBiZSBmcmVlZCAqLworCQlfX3BnZF92YWxfc2V0KCpwZ2QsIFB4RF9GTEFHX0FUVEFDSEVEKTsKKyNlbmRpZgorCX0KKwlyZXR1cm4gYWN0dWFsX3BnZDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBnZF9mcmVlKHBnZF90ICpwZ2QpCit7CisjaWZkZWYgX19MUDY0X18KKwlwZ2QgLT0gUFRSU19QRVJfUEdEOworI2VuZGlmCisJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZylwZ2QsIFBHRF9BTExPQ19PUkRFUik7Cit9CisKKyNpZiBQVF9OTEVWRUxTID09IDMKKworLyogVGhyZWUgTGV2ZWwgUGFnZSBUYWJsZSBTdXBwb3J0IGZvciBwbWQncyAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgcGdkX3BvcHVsYXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkLCBwbWRfdCAqcG1kKQoreworCV9fcGdkX3ZhbF9zZXQoKnBnZCwgKFB4RF9GTEFHX1BSRVNFTlQgfCBQeERfRkxBR19WQUxJRCkgKworCQkgICAgICAgIChfX3UzMikoX19wYSgodW5zaWduZWQgbG9uZylwbWQpID4+IFB4RF9WQUxVRV9TSElGVCkpOworfQorCitzdGF0aWMgaW5saW5lIHBtZF90ICpwbWRfYWxsb2Nfb25lKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisJcG1kX3QgKnBtZCA9IChwbWRfdCAqKV9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTHxfX0dGUF9SRVBFQVQsCisJCQkJCSAgICAgICBQTURfT1JERVIpOworCWlmIChwbWQpCisJCW1lbXNldChwbWQsIDAsIFBBR0VfU0laRTw8UE1EX09SREVSKTsKKwlyZXR1cm4gcG1kOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcG1kX2ZyZWUocG1kX3QgKnBtZCkKK3sKKyNpZmRlZiBfX0xQNjRfXworCWlmKHBtZF9mbGFnKCpwbWQpICYgUHhEX0ZMQUdfQVRUQUNIRUQpCisJCS8qIFRoaXMgaXMgdGhlIHBlcm1hbmVudCBwbWQgYXR0YWNoZWQgdG8gdGhlIHBnZDsKKwkJICogY2Fubm90IGZyZWUgaXQgKi8KKwkJcmV0dXJuOworI2VuZGlmCisJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZylwbWQsIFBNRF9PUkRFUik7Cit9CisKKyNlbHNlCisKKy8qIFR3byBMZXZlbCBQYWdlIFRhYmxlIFN1cHBvcnQgZm9yIHBtZCdzICovCisKKy8qCisgKiBhbGxvY2F0aW5nIGFuZCBmcmVlaW5nIGEgcG1kIGlzIHRyaXZpYWw6IHRoZSAxLWVudHJ5IHBtZCBpcworICogaW5zaWRlIHRoZSBwZ2QsIHNvIGhhcyBubyBleHRyYSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIGl0LgorICovCisKKyNkZWZpbmUgcG1kX2FsbG9jX29uZShtbSwgYWRkcikJCSh7IEJVRygpOyAoKHBtZF90ICopMik7IH0pCisjZGVmaW5lIHBtZF9mcmVlKHgpCQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBwZ2RfcG9wdWxhdGUobW0sIHBtZCwgcHRlKQlCVUcoKQorCisjZW5kaWYKKworc3RhdGljIGlubGluZSB2b2lkCitwbWRfcG9wdWxhdGVfa2VybmVsKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLCBwdGVfdCAqcHRlKQoreworI2lmZGVmIF9fTFA2NF9fCisJLyogcHJlc2VydmUgdGhlIGdhdGV3YXkgbWFya2VyIGlmIHRoaXMgaXMgdGhlIGJlZ2lubmluZyBvZgorCSAqIHRoZSBwZXJtYW5lbnQgcG1kICovCisJaWYocG1kX2ZsYWcoKnBtZCkgJiBQeERfRkxBR19BVFRBQ0hFRCkKKwkJX19wbWRfdmFsX3NldCgqcG1kLCAoUHhEX0ZMQUdfUFJFU0VOVCB8CisJCQkJIFB4RF9GTEFHX1ZBTElEIHwKKwkJCQkgUHhEX0ZMQUdfQVRUQUNIRUQpIAorCQkJKyAoX191MzIpKF9fcGEoKHVuc2lnbmVkIGxvbmcpcHRlKSA+PiBQeERfVkFMVUVfU0hJRlQpKTsKKwllbHNlCisjZW5kaWYKKwkJX19wbWRfdmFsX3NldCgqcG1kLCAoUHhEX0ZMQUdfUFJFU0VOVCB8IFB4RF9GTEFHX1ZBTElEKSAKKwkJCSsgKF9fdTMyKShfX3BhKCh1bnNpZ25lZCBsb25nKXB0ZSkgPj4gUHhEX1ZBTFVFX1NISUZUKSk7Cit9CisKKyNkZWZpbmUgcG1kX3BvcHVsYXRlKG1tLCBwbWQsIHB0ZV9wYWdlKSBcCisJcG1kX3BvcHVsYXRlX2tlcm5lbChtbSwgcG1kLCBwYWdlX2FkZHJlc3MocHRlX3BhZ2UpKQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICoKK3B0ZV9hbGxvY19vbmUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTHxfX0dGUF9SRVBFQVR8X19HRlBfWkVSTyk7CisJcmV0dXJuIHBhZ2U7Cit9CisKK3N0YXRpYyBpbmxpbmUgcHRlX3QgKgorcHRlX2FsbG9jX29uZV9rZXJuZWwoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlwdGVfdCAqcHRlID0gKHB0ZV90ICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUx8X19HRlBfUkVQRUFUfF9fR0ZQX1pFUk8pOworCXJldHVybiBwdGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdGVfZnJlZV9rZXJuZWwocHRlX3QgKnB0ZSkKK3sKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcHRlKTsKK30KKworI2RlZmluZSBwdGVfZnJlZShwYWdlKQlwdGVfZnJlZV9rZXJuZWwocGFnZV9hZGRyZXNzKHBhZ2UpKQorCitleHRlcm4gaW50IGRvX2NoZWNrX3BndF9jYWNoZShpbnQsIGludCk7CisjZGVmaW5lIGNoZWNrX3BndF9jYWNoZSgpCWRvIHsgfSB3aGlsZSAoMCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL3BndGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjM1M2E5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL3BndGFibGUuaApAQCAtMCwwICsxLDUyMiBAQAorI2lmbmRlZiBfUEFSSVNDX1BHVEFCTEVfSAorI2RlZmluZSBfUEFSSVNDX1BHVEFCTEVfSAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvNGxldmVsLWZpeHVwLmg+CisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxhc20vZml4bWFwLmg+CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisvKgorICogd2Ugc2ltdWxhdGUgYW4geDg2LXN0eWxlIHBhZ2UgdGFibGUgZm9yIHRoZSBsaW51eCBtbSBjb2RlCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgorI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KKworLyoKKyAqIGtlcm5fYWRkcl92YWxpZChBRERSKSB0ZXN0cyBpZiBBRERSIGlzIHBvaW50aW5nIHRvIHZhbGlkIGtlcm5lbAorICogbWVtb3J5LiAgRm9yIHRoZSByZXR1cm4gdmFsdWUgdG8gYmUgbWVhbmluZ2Z1bCwgQUREUiBtdXN0IGJlID49CisgKiBQQUdFX09GRlNFVC4gIFRoaXMgb3BlcmF0aW9uIGNhbiBiZSByZWxhdGl2ZWx5IGV4cGVuc2l2ZSAoZS5nLiwKKyAqIHJlcXVpcmUgYSBoYXNoLSwgb3IgbXVsdGktbGV2ZWwgdHJlZS1sb29rdXAgb3Igc29tZXRoaW5nIG9mIHRoYXQKKyAqIHNvcnQpIGJ1dCBpdCBndWFyYW50ZWVzIHRvIHJldHVybiBUUlVFIG9ubHkgaWYgYWNjZXNzaW5nIHRoZSBwYWdlCisgKiBhdCB0aGF0IGFkZHJlc3MgZG9lcyBub3QgY2F1c2UgYW4gZXJyb3IuICBOb3RlIHRoYXQgdGhlcmUgbWF5IGJlCisgKiBhZGRyZXNzZXMgZm9yIHdoaWNoIGtlcm5fYWRkcl92YWxpZCgpIHJldHVybnMgRkFMU0UgZXZlbiB0aG91Z2ggYW4KKyAqIGFjY2VzcyB3b3VsZCBub3QgY2F1c2UgYW4gZXJyb3IgKGUuZy4sIHRoaXMgaXMgdHlwaWNhbGx5IHRydWUgZm9yCisgKiBtZW1vcnkgbWFwcGVkIEkvTyByZWdpb25zLgorICoKKyAqIFhYWCBOZWVkIHRvIGltcGxlbWVudCB0aGlzIGZvciBwYXJpc2MuCisgKi8KKyNkZWZpbmUga2Vybl9hZGRyX3ZhbGlkKGFkZHIpCSgxKQorCisvKiBDZXJ0YWluIGFyY2hpdGVjdHVyZXMgbmVlZCB0byBkbyBzcGVjaWFsIHRoaW5ncyB3aGVuIFBURXMKKyAqIHdpdGhpbiBhIHBhZ2UgdGFibGUgYXJlIGRpcmVjdGx5IG1vZGlmaWVkLiAgVGh1cywgdGhlIGZvbGxvd2luZworICogaG9vayBpcyBtYWRlIGF2YWlsYWJsZS4KKyAqLworI2RlZmluZSBzZXRfcHRlKHB0ZXB0ciwgcHRldmFsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZG97ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgKihwdGVwdHIpID0gKHB0ZXZhbCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9IHdoaWxlKDApCisjZGVmaW5lIHNldF9wdGVfYXQobW0sYWRkcixwdGVwLHB0ZXZhbCkgc2V0X3B0ZShwdGVwLHB0ZXZhbCkKKworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKworI2RlZmluZSBwdGVfRVJST1IoZSkgXAorCXByaW50aygiJXM6JWQ6IGJhZCBwdGUgJTA4bHguXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sIHB0ZV92YWwoZSkpCisjZGVmaW5lIHBtZF9FUlJPUihlKSBcCisJcHJpbnRrKCIlczolZDogYmFkIHBtZCAlMDhseC5cbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgKHVuc2lnbmVkIGxvbmcpcG1kX3ZhbChlKSkKKyNkZWZpbmUgcGdkX0VSUk9SKGUpIFwKKwlwcmludGsoIiVzOiVkOiBiYWQgcGdkICUwOGx4LlxuIiwgX19GSUxFX18sIF9fTElORV9fLCAodW5zaWduZWQgbG9uZylwZ2RfdmFsKGUpKQorCisgLyogTm90ZTogSWYgeW91IGNoYW5nZSBJU1RBQ0tfU0laRSwgeW91IG5lZWQgdG8gY2hhbmdlIHRoZSBjb3JyZXNwb25kaW5nCisgICogdmFsdWVzIGluIHZtbGludXgubGRzIGFuZCB2bWxpbnV4NjQubGRzIChpbml0X2lzdGFjayBzZWN0aW9uKS4gQWxzbywKKyAgKiB0aGUgIm9yZGVyIiBhbmQgc2l6ZSBuZWVkIHRvIGFncmVlLgorICAqLworCisjZGVmaW5lICBJU1RBQ0tfU0laRSAgMzI3NjggLyogSW50ZXJydXB0IFN0YWNrIFNpemUgKi8KKyNkZWZpbmUgIElTVEFDS19PUkRFUiAzCisKKy8qIFRoaXMgaXMgdGhlIHNpemUgb2YgdGhlIGluaXRpYWxseSBtYXBwZWQga2VybmVsIG1lbW9yeSAoaS5lLiBjdXJyZW50bHkKKyAqIDAgdG8gMTw8MjMgPT0gOE1CICovCisjaWZkZWYgQ09ORklHXzY0QklUCisjZGVmaW5lIEtFUk5FTF9JTklUSUFMX09SREVSCTI0CisjZWxzZQorI2RlZmluZSBLRVJORUxfSU5JVElBTF9PUkRFUgkyMworI2VuZGlmCisjZGVmaW5lIEtFUk5FTF9JTklUSUFMX1NJWkUJKDEgPDwgS0VSTkVMX0lOSVRJQUxfT1JERVIpCisKKyNpZmRlZiBDT05GSUdfNjRCSVQKKyNkZWZpbmUgUFRfTkxFVkVMUwkzCisjZGVmaW5lIFBHRF9PUkRFUgkxIC8qIE51bWJlciBvZiBwYWdlcyBwZXIgcGdkICovCisjZGVmaW5lIFBNRF9PUkRFUgkxIC8qIE51bWJlciBvZiBwYWdlcyBwZXIgcG1kICovCisjZGVmaW5lIFBHRF9BTExPQ19PUkRFUgkyIC8qIGZpcnN0IHBnZCBjb250YWlucyBwbWQgKi8KKyNlbHNlCisjZGVmaW5lIFBUX05MRVZFTFMJMgorI2RlZmluZSBQR0RfT1JERVIJMSAvKiBOdW1iZXIgb2YgcGFnZXMgcGVyIHBnZCAqLworI2RlZmluZSBQR0RfQUxMT0NfT1JERVIJUEdEX09SREVSCisjZW5kaWYKKworLyogRGVmaW5pdGlvbnMgZm9yIDNyZCBsZXZlbCAod2UgdXNlIFBMRCBoZXJlIGZvciBQYWdlIExvd2VyIGRpcmVjdG9yeQorICogYmVjYXVzZSBQVEVfU0hJRlQgaXMgdXNlZCBsb3dlciBkb3duIHRvIG1lYW4gc2hpZnQgdGhhdCBoYXMgdG8gYmUKKyAqIGRvbmUgdG8gZ2V0IHVzYWJsZSBiaXRzIG91dCBvZiB0aGUgUFRFKSAqLworI2RlZmluZSBQTERfU0hJRlQJUEFHRV9TSElGVAorI2RlZmluZSBQTERfU0laRQlQQUdFX1NJWkUKKyNkZWZpbmUgQklUU19QRVJfUFRFCShQQUdFX1NISUZUIC0gQklUU19QRVJfUFRFX0VOVFJZKQorI2RlZmluZSBQVFJTX1BFUl9QVEUgICAgKDFVTCA8PCBCSVRTX1BFUl9QVEUpCisKKy8qIERlZmluaXRpb25zIGZvciAybmQgbGV2ZWwgKi8KKyNkZWZpbmUgcGd0YWJsZV9jYWNoZV9pbml0KCkJZG8geyB9IHdoaWxlICgwKQorCisjZGVmaW5lIFBNRF9TSElGVCAgICAgICAoUExEX1NISUZUICsgQklUU19QRVJfUFRFKQorI2RlZmluZSBQTURfU0laRQkoMVVMIDw8IFBNRF9TSElGVCkKKyNkZWZpbmUgUE1EX01BU0sJKH4oUE1EX1NJWkUtMSkpCisjaWYgUFRfTkxFVkVMUyA9PSAzCisjZGVmaW5lIEJJVFNfUEVSX1BNRAkoUEFHRV9TSElGVCArIFBNRF9PUkRFUiAtIEJJVFNfUEVSX1BNRF9FTlRSWSkKKyNlbHNlCisjZGVmaW5lIEJJVFNfUEVSX1BNRAkwCisjZW5kaWYKKyNkZWZpbmUgUFRSU19QRVJfUE1EICAgICgxVUwgPDwgQklUU19QRVJfUE1EKQorCisvKiBEZWZpbml0aW9ucyBmb3IgMXN0IGxldmVsICovCisjZGVmaW5lIFBHRElSX1NISUZUCShQTURfU0hJRlQgKyBCSVRTX1BFUl9QTUQpCisjZGVmaW5lIEJJVFNfUEVSX1BHRAkoUEFHRV9TSElGVCArIFBHRF9PUkRFUiAtIEJJVFNfUEVSX1BHRF9FTlRSWSkKKyNkZWZpbmUgUEdESVJfU0laRQkoMVVMIDw8IFBHRElSX1NISUZUKQorI2RlZmluZSBQR0RJUl9NQVNLCSh+KFBHRElSX1NJWkUtMSkpCisjZGVmaW5lIFBUUlNfUEVSX1BHRCAgICAoMVVMIDw8IEJJVFNfUEVSX1BHRCkKKyNkZWZpbmUgVVNFUl9QVFJTX1BFUl9QR0QgICAgICAgUFRSU19QRVJfUEdECisKKyNkZWZpbmUgTUFYX0FERFJCSVRTCShQR0RJUl9TSElGVCArIEJJVFNfUEVSX1BHRCkKKyNkZWZpbmUgTUFYX0FERFJFU1MJKDFVTCA8PCBNQVhfQUREUkJJVFMpCisKKyNkZWZpbmUgU1BBQ0VJRF9TSElGVCAoTUFYX0FERFJCSVRTIC0gMzIpCisKKy8qIFRoaXMgY2FsY3VsYXRlcyB0aGUgbnVtYmVyIG9mIGluaXRpYWwgcGFnZXMgd2UgbmVlZCBmb3IgdGhlIGluaXRpYWwKKyAqIHBhZ2UgdGFibGVzICovCisjZGVmaW5lIFBUX0lOSVRJQUwJKDEgPDwgKEtFUk5FTF9JTklUSUFMX09SREVSIC0gUE1EX1NISUZUKSkKKworLyoKKyAqIHBnZCBlbnRyaWVzIHVzZWQgdXAgYnkgdXNlci9rZXJuZWw6CisgKi8KKworI2RlZmluZSBGSVJTVF9VU0VSX1BHRF9OUgkwCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitleHRlcm4gIHZvaWQgKnZtYWxsb2Nfc3RhcnQ7CisjZGVmaW5lIFBDWExfRE1BX01BUF9TSVpFICAgKDgqMTAyNCoxMDI0KQorI2RlZmluZSBWTUFMTE9DX1NUQVJUICAgKCh1bnNpZ25lZCBsb25nKXZtYWxsb2Nfc3RhcnQpCisvKiB0aGlzIGlzIGEgZml4bWFwIHJlbW5hbnQsIHNlZSBmaXhtYXAuaCAqLworI2RlZmluZSBWTUFMTE9DX0VORAkoS0VSTkVMX01BUF9FTkQpCisjZW5kaWYKKworLyogTkI6IFRoZSB0bGIgbWlzcyBoYW5kbGVycyBtYWtlIGNlcnRhaW4gYXNzdW1wdGlvbnMgYWJvdXQgdGhlIG9yZGVyICovCisvKiAgICAgb2YgdGhlIGZvbGxvd2luZyBiaXRzLCBzbyBiZSBjYXJlZnVsIChPbmUgZXhhbXBsZSwgYml0cyAyNS0zMSAgKi8KKy8qICAgICBhcmUgbW92ZWQgdG9nZXRoZXIgaW4gb25lIGluc3RydWN0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIF9QQUdFX1JFQURfQklUICAgICAzMSAgIC8qICgweDAwMSkgcmVhZCBhY2Nlc3MgYWxsb3dlZCAqLworI2RlZmluZSBfUEFHRV9XUklURV9CSVQgICAgMzAgICAvKiAoMHgwMDIpIHdyaXRlIGFjY2VzcyBhbGxvd2VkICovCisjZGVmaW5lIF9QQUdFX0VYRUNfQklUICAgICAyOSAgIC8qICgweDAwNCkgZXhlY3V0ZSBhY2Nlc3MgYWxsb3dlZCAqLworI2RlZmluZSBfUEFHRV9HQVRFV0FZX0JJVCAgMjggICAvKiAoMHgwMDgpIHByaXZpbGVnZSBwcm9tb3Rpb24gYWxsb3dlZCAqLworI2RlZmluZSBfUEFHRV9ETUJfQklUICAgICAgMjcgICAvKiAoMHgwMTApIERhdGEgTWVtb3J5IEJyZWFrIGVuYWJsZSAoQiBiaXQpICovCisjZGVmaW5lIF9QQUdFX0RJUlRZX0JJVCAgICAyNiAgIC8qICgweDAyMCkgUGFnZSBEaXJ0eSAoRCBiaXQpICovCisjZGVmaW5lIF9QQUdFX0ZJTEVfQklUCV9QQUdFX0RJUlRZX0JJVAkvKiBvdmVybG9hZCB0aGlzIGJpdCAqLworI2RlZmluZSBfUEFHRV9SRUZUUkFQX0JJVCAgMjUgICAvKiAoMHgwNDApIFBhZ2UgUmVmLiBUcmFwIGVuYWJsZSAoVCBiaXQpICovCisjZGVmaW5lIF9QQUdFX05PX0NBQ0hFX0JJVCAyNCAgIC8qICgweDA4MCkgVW5jYWNoZWQgUGFnZSAoVSBiaXQpICovCisjZGVmaW5lIF9QQUdFX0FDQ0VTU0VEX0JJVCAyMyAgIC8qICgweDEwMCkgU29mdHdhcmU6IFBhZ2UgQWNjZXNzZWQgKi8KKyNkZWZpbmUgX1BBR0VfUFJFU0VOVF9CSVQgIDIyICAgLyogKDB4MjAwKSBTb2Z0d2FyZTogdHJhbnNsYXRpb24gdmFsaWQgKi8KKyNkZWZpbmUgX1BBR0VfRkxVU0hfQklUICAgIDIxICAgLyogKDB4NDAwKSBTb2Z0d2FyZTogdHJhbnNsYXRpb24gdmFsaWQgKi8KKwkJCQkvKiAgICAgICAgICAgICBmb3IgY2FjaGUgZmx1c2hpbmcgb25seSAqLworI2RlZmluZSBfUEFHRV9VU0VSX0JJVCAgICAgMjAgICAvKiAoMHg4MDApIFNvZnR3YXJlOiBVc2VyIGFjY2Vzc2libGUgcGFnZSAqLworCisvKiBOLkIuIFRoZSBiaXRzIGFyZSBkZWZpbmVkIGluIHRlcm1zIG9mIGEgMzIgYml0IHdvcmQgYWJvdmUsIHNvIHRoZSAqLworLyogICAgICBmb2xsb3dpbmcgbWFjcm8gaXMgb2sgZm9yIGJvdGggMzIgYW5kIDY0IGJpdC4gICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSB4bGF0ZV9wYWJpdCh4KSAoMzEgLSB4KQorCisvKiB0aGlzIGRlZmluZXMgdGhlIHNoaWZ0IHRvIHRoZSB1c2FibGUgYml0cyBpbiB0aGUgUFRFIGl0IGlzIHNldCBzbworICogdGhhdCB0aGUgdmFsaWQgYml0cyBfUEFHRV9QUkVTRU5UX0JJVCBhbmQgX1BBR0VfVVNFUl9CSVQgYXJlIHNldAorICogdG8gemVybyAqLworI2RlZmluZSBQVEVfU0hJRlQJICAgCXhsYXRlX3BhYml0KF9QQUdFX1VTRVJfQklUKQorCisvKiB0aGlzIGlzIGhvdyBtYW55IGJpdHMgbWF5IGJlIHVzZWQgYnkgdGhlIGZpbGUgZnVuY3Rpb25zICovCisjZGVmaW5lIFBURV9GSUxFX01BWF9CSVRTCShCSVRTX1BFUl9MT05HIC0gUFRFX1NISUZUKQorCisjZGVmaW5lIHB0ZV90b19wZ29mZihwdGUpIChwdGVfdmFsKHB0ZSkgPj4gUFRFX1NISUZUKQorI2RlZmluZSBwZ29mZl90b19wdGUob2ZmKSAoKHB0ZV90KSB7ICgob2ZmKSA8PCBQVEVfU0hJRlQpIHwgX1BBR0VfRklMRSB9KQorCisjZGVmaW5lIF9QQUdFX1JFQUQgICAgICgxIDw8IHhsYXRlX3BhYml0KF9QQUdFX1JFQURfQklUKSkKKyNkZWZpbmUgX1BBR0VfV1JJVEUgICAgKDEgPDwgeGxhdGVfcGFiaXQoX1BBR0VfV1JJVEVfQklUKSkKKyNkZWZpbmUgX1BBR0VfUlcgICAgICAgKF9QQUdFX1JFQUQgfCBfUEFHRV9XUklURSkKKyNkZWZpbmUgX1BBR0VfRVhFQyAgICAgKDEgPDwgeGxhdGVfcGFiaXQoX1BBR0VfRVhFQ19CSVQpKQorI2RlZmluZSBfUEFHRV9HQVRFV0FZICAoMSA8PCB4bGF0ZV9wYWJpdChfUEFHRV9HQVRFV0FZX0JJVCkpCisjZGVmaW5lIF9QQUdFX0RNQiAgICAgICgxIDw8IHhsYXRlX3BhYml0KF9QQUdFX0RNQl9CSVQpKQorI2RlZmluZSBfUEFHRV9ESVJUWSAgICAoMSA8PCB4bGF0ZV9wYWJpdChfUEFHRV9ESVJUWV9CSVQpKQorI2RlZmluZSBfUEFHRV9SRUZUUkFQICAoMSA8PCB4bGF0ZV9wYWJpdChfUEFHRV9SRUZUUkFQX0JJVCkpCisjZGVmaW5lIF9QQUdFX05PX0NBQ0hFICgxIDw8IHhsYXRlX3BhYml0KF9QQUdFX05PX0NBQ0hFX0JJVCkpCisjZGVmaW5lIF9QQUdFX0FDQ0VTU0VEICgxIDw8IHhsYXRlX3BhYml0KF9QQUdFX0FDQ0VTU0VEX0JJVCkpCisjZGVmaW5lIF9QQUdFX1BSRVNFTlQgICgxIDw8IHhsYXRlX3BhYml0KF9QQUdFX1BSRVNFTlRfQklUKSkKKyNkZWZpbmUgX1BBR0VfRkxVU0ggICAgKDEgPDwgeGxhdGVfcGFiaXQoX1BBR0VfRkxVU0hfQklUKSkKKyNkZWZpbmUgX1BBR0VfVVNFUiAgICAgKDEgPDwgeGxhdGVfcGFiaXQoX1BBR0VfVVNFUl9CSVQpKQorI2RlZmluZSBfUEFHRV9GSUxFICAgICAoMSA8PCB4bGF0ZV9wYWJpdChfUEFHRV9GSUxFX0JJVCkpCisKKyNkZWZpbmUgX1BBR0VfVEFCTEUJKF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SRUFEIHwgX1BBR0VfV1JJVEUgfCAgX1BBR0VfRElSVFkgfCBfUEFHRV9BQ0NFU1NFRCkKKyNkZWZpbmUgX1BBR0VfQ0hHX01BU0sJKFBBR0VfTUFTSyB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfRElSVFkpCisjZGVmaW5lIF9QQUdFX0tFUk5FTAkoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX0VYRUMgfCBfUEFHRV9SRUFEIHwgX1BBR0VfV1JJVEUgfCBfUEFHRV9ESVJUWSB8IF9QQUdFX0FDQ0VTU0VEKQorCisvKiBUaGUgcGdkL3BtZCBjb250YWlucyBhIHB0ciAoaW4gcGh5cyBhZGRyIHNwYWNlKTsgc2luY2UgYWxsIHBnZHMvcG1kcworICogYXJlIHBhZ2UtYWxpZ25lZCwgd2UgZG9uJ3QgY2FyZSBhYm91dCB0aGUgUEFHRV9PRkZTRVQgYml0cywgZXhjZXB0CisgKiBmb3IgYSBmZXcgbWV0YS1pbmZvcm1hdGlvbiBiaXRzLCBzbyB3ZSBzaGlmdCB0aGUgYWRkcmVzcyB0byBiZQorICogYWJsZSB0byBlZmZlY3RpdmVseSBhZGRyZXNzIDQwLWJpdHMgb2YgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZS4gKi8KKyNkZWZpbmUgX1B4RF9QUkVTRU5UX0JJVCAgIDMxCisjZGVmaW5lIF9QeERfQVRUQUNIRURfQklUICAzMAorI2RlZmluZSBfUHhEX1ZBTElEX0JJVCAgICAgMjkKKworI2RlZmluZSBQeERfRkxBR19QUkVTRU5UICAoMSA8PCB4bGF0ZV9wYWJpdChfUHhEX1BSRVNFTlRfQklUKSkKKyNkZWZpbmUgUHhEX0ZMQUdfQVRUQUNIRUQgKDEgPDwgeGxhdGVfcGFiaXQoX1B4RF9BVFRBQ0hFRF9CSVQpKQorI2RlZmluZSBQeERfRkxBR19WQUxJRCAgICAoMSA8PCB4bGF0ZV9wYWJpdChfUHhEX1ZBTElEX0JJVCkpCisjZGVmaW5lIFB4RF9GTEFHX01BU0sgICAgICgweGYpCisjZGVmaW5lIFB4RF9GTEFHX1NISUZUICAgICg0KQorI2RlZmluZSBQeERfVkFMVUVfU0hJRlQgICAoOCkKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworI2RlZmluZSBQQUdFX05PTkUJX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1VTRVIgfCBfUEFHRV9BQ0NFU1NFRCkKKyNkZWZpbmUgUEFHRV9TSEFSRUQJX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1VTRVIgfCBfUEFHRV9SRUFEIHwgX1BBR0VfV1JJVEUgfCBfUEFHRV9BQ0NFU1NFRCkKKy8qIE90aGVycyBzZWVtIHRvIG1ha2UgdGhpcyBleGVjdXRhYmxlLCBJIGRvbid0IGtub3cgaWYgdGhhdCdzIGNvcnJlY3QKKyAgIG9yIG5vdC4gIFRoZSBzdGFjayBpcyBtYXBwZWQgdGhpcyB3YXkgdGhvdWdoIHNvIHRoaXMgaXMgbmVjZXNzYXJ5CisgICBpbiB0aGUgc2hvcnQgdGVybSAtIGRoZEBsaW51eGNhcmUuY29tLCAyMDAwLTA4LTA4ICovCisjZGVmaW5lIFBBR0VfUkVBRE9OTFkJX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1VTRVIgfCBfUEFHRV9SRUFEIHwgX1BBR0VfQUNDRVNTRUQpCisjZGVmaW5lIFBBR0VfV1JJVEVPTkxZICBfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfVVNFUiB8IF9QQUdFX1dSSVRFIHwgX1BBR0VfQUNDRVNTRUQpCisjZGVmaW5lIFBBR0VfRVhFQ1JFQUQgICBfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfVVNFUiB8IF9QQUdFX1JFQUQgfCBfUEFHRV9FWEVDIHxfUEFHRV9BQ0NFU1NFRCkKKyNkZWZpbmUgUEFHRV9DT1BZICAgICAgIFBBR0VfRVhFQ1JFQUQKKyNkZWZpbmUgUEFHRV9SV1ggICAgICAgIF9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9VU0VSIHwgX1BBR0VfUkVBRCB8IF9QQUdFX1dSSVRFIHwgX1BBR0VfRVhFQyB8X1BBR0VfQUNDRVNTRUQpCisjZGVmaW5lIFBBR0VfS0VSTkVMCV9fcGdwcm90KF9QQUdFX0tFUk5FTCkKKyNkZWZpbmUgUEFHRV9LRVJORUxfUk8JX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX0VYRUMgfCBfUEFHRV9SRUFEIHwgX1BBR0VfRElSVFkgfCBfUEFHRV9BQ0NFU1NFRCkKKyNkZWZpbmUgUEFHRV9LRVJORUxfVU5DCV9fcGdwcm90KF9QQUdFX0tFUk5FTCB8IF9QQUdFX05PX0NBQ0hFKQorI2RlZmluZSBQQUdFX0dBVEVXQVkgICAgX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1VTRVIgfCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX0dBVEVXQVl8IF9QQUdFX1JFQUQpCisjZGVmaW5lIFBBR0VfRkxVU0ggICAgICBfX3BncHJvdChfUEFHRV9GTFVTSCkKKworCisvKgorICogV2UgY291bGQgaGF2ZSBhbiBleGVjdXRlIG9ubHkgcGFnZSB1c2luZyAiZ2F0ZXdheSAtIHByb21vdGUgdG8gcHJpdgorICogbGV2ZWwgMyIsIGJ1dCB0aGF0IGlzIGtpbmQgb2Ygc2lsbHkuIFNvLCB0aGUgd2F5IHRoaW5ncyBhcmUgZGVmaW5lZAorICogbm93LCB3ZSBtdXN0IGFsd2F5cyBoYXZlIHJlYWQgcGVybWlzc2lvbiBmb3IgcGFnZXMgd2l0aCBleGVjdXRlCisgKiBwZXJtaXNzaW9uLiBGb3IgdGhlIGZ1biBvZiBpdCB3ZSdsbCBnbyBhaGVhZCBhbmQgc3VwcG9ydCB3cml0ZSBvbmx5CisgKiBwYWdlcy4KKyAqLworCisJIC8qeHdyKi8KKyNkZWZpbmUgX19QMDAwICBQQUdFX05PTkUKKyNkZWZpbmUgX19QMDAxICBQQUdFX1JFQURPTkxZCisjZGVmaW5lIF9fUDAxMCAgX19QMDAwIC8qIGNvcHkgb24gd3JpdGUgKi8KKyNkZWZpbmUgX19QMDExICBfX1AwMDEgLyogY29weSBvbiB3cml0ZSAqLworI2RlZmluZSBfX1AxMDAgIFBBR0VfRVhFQ1JFQUQKKyNkZWZpbmUgX19QMTAxICBQQUdFX0VYRUNSRUFECisjZGVmaW5lIF9fUDExMCAgX19QMTAwIC8qIGNvcHkgb24gd3JpdGUgKi8KKyNkZWZpbmUgX19QMTExICBfX1AxMDEgLyogY29weSBvbiB3cml0ZSAqLworCisjZGVmaW5lIF9fUzAwMCAgUEFHRV9OT05FCisjZGVmaW5lIF9fUzAwMSAgUEFHRV9SRUFET05MWQorI2RlZmluZSBfX1MwMTAgIFBBR0VfV1JJVEVPTkxZCisjZGVmaW5lIF9fUzAxMSAgUEFHRV9TSEFSRUQKKyNkZWZpbmUgX19TMTAwICBQQUdFX0VYRUNSRUFECisjZGVmaW5lIF9fUzEwMSAgUEFHRV9FWEVDUkVBRAorI2RlZmluZSBfX1MxMTAgIFBBR0VfUldYCisjZGVmaW5lIF9fUzExMSAgUEFHRV9SV1gKKworZXh0ZXJuIHBnZF90IHN3YXBwZXJfcGdfZGlyW107IC8qIGRlY2xhcmVkIGluIGluaXRfdGFzay5jICovCisKKy8qIGluaXRpYWwgcGFnZSB0YWJsZXMgZm9yIDAtOE1CIGZvciBrZXJuZWwgKi8KKworZXh0ZXJuIHB0ZV90IHBnMFtdOworCisvKiB6ZXJvIHBhZ2UgdXNlZCBmb3IgdW5pbml0aWFsaXplZCBzdHVmZiAqLworCitleHRlcm4gdW5zaWduZWQgbG9uZyAqZW1wdHlfemVyb19wYWdlOworCisvKgorICogWkVST19QQUdFIGlzIGEgZ2xvYmFsIHNoYXJlZCBwYWdlIHRoYXQgaXMgYWx3YXlzIHplcm86IHVzZWQKKyAqIGZvciB6ZXJvLW1hcHBlZCBtZW1vcnkgYXJlYXMgZXRjLi4KKyAqLworCisjZGVmaW5lIFpFUk9fUEFHRSh2YWRkcikgKHZpcnRfdG9fcGFnZShlbXB0eV96ZXJvX3BhZ2UpKQorCisjZGVmaW5lIHB0ZV9ub25lKHgpICAgICAoKHB0ZV92YWwoeCkgPT0gMCkgfHwgKHB0ZV92YWwoeCkgJiBfUEFHRV9GTFVTSCkpCisjZGVmaW5lIHB0ZV9wcmVzZW50KHgpCShwdGVfdmFsKHgpICYgX1BBR0VfUFJFU0VOVCkKKyNkZWZpbmUgcHRlX2NsZWFyKG1tLGFkZHIseHApCWRvIHsgcHRlX3ZhbCgqKHhwKSkgPSAwOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIHBtZF9mbGFnKHgpCShwbWRfdmFsKHgpICYgUHhEX0ZMQUdfTUFTSykKKyNkZWZpbmUgcG1kX2FkZHJlc3MoeCkJKCh1bnNpZ25lZCBsb25nKShwbWRfdmFsKHgpICZ+IFB4RF9GTEFHX01BU0spIDw8IFB4RF9WQUxVRV9TSElGVCkKKyNkZWZpbmUgcGdkX2ZsYWcoeCkJKHBnZF92YWwoeCkgJiBQeERfRkxBR19NQVNLKQorI2RlZmluZSBwZ2RfYWRkcmVzcyh4KQkoKHVuc2lnbmVkIGxvbmcpKHBnZF92YWwoeCkgJn4gUHhEX0ZMQUdfTUFTSykgPDwgUHhEX1ZBTFVFX1NISUZUKQorCisjaWZkZWYgQ09ORklHXzY0QklUCisvKiBUaGUgZmlyc3QgZW50cnkgb2YgdGhlIHBlcm1hbmVudCBwbWQgaXMgbm90IHRoZXJlIGlmIGl0IGNvbnRhaW5zCisgKiB0aGUgZ2F0ZXdheSBtYXJrZXIgKi8KKyNkZWZpbmUgcG1kX25vbmUoeCkJKCFwbWRfdmFsKHgpIHx8IHBtZF9mbGFnKHgpID09IFB4RF9GTEFHX0FUVEFDSEVEKQorI2Vsc2UKKyNkZWZpbmUgcG1kX25vbmUoeCkJKCFwbWRfdmFsKHgpKQorI2VuZGlmCisjZGVmaW5lIHBtZF9iYWQoeCkJKCEocG1kX2ZsYWcoeCkgJiBQeERfRkxBR19WQUxJRCkpCisjZGVmaW5lIHBtZF9wcmVzZW50KHgpCShwbWRfZmxhZyh4KSAmIFB4RF9GTEFHX1BSRVNFTlQpCitzdGF0aWMgaW5saW5lIHZvaWQgcG1kX2NsZWFyKHBtZF90ICpwbWQpIHsKKyNpZmRlZiBDT05GSUdfNjRCSVQKKwlpZiAocG1kX2ZsYWcoKnBtZCkgJiBQeERfRkxBR19BVFRBQ0hFRCkKKwkJLyogVGhpcyBpcyB0aGUgZW50cnkgcG9pbnRpbmcgdG8gdGhlIHBlcm1hbmVudCBwbWQKKwkJICogYXR0YWNoZWQgdG8gdGhlIHBnZDsgY2Fubm90IGNsZWFyIGl0ICovCisJCV9fcG1kX3ZhbF9zZXQoKnBtZCwgUHhEX0ZMQUdfQVRUQUNIRUQpOworCWVsc2UKKyNlbmRpZgorCQlfX3BtZF92YWxfc2V0KCpwbWQsICAwKTsKK30KKworCisKKyNpZiBQVF9OTEVWRUxTID09IDMKKyNkZWZpbmUgcGdkX3BhZ2UocGdkKSAoKHVuc2lnbmVkIGxvbmcpIF9fdmEocGdkX2FkZHJlc3MocGdkKSkpCisKKy8qIEZvciA2NCBiaXQgd2UgaGF2ZSB0aHJlZSBsZXZlbCB0YWJsZXMgKi8KKworI2RlZmluZSBwZ2Rfbm9uZSh4KSAgICAgKCFwZ2RfdmFsKHgpKQorI2RlZmluZSBwZ2RfYmFkKHgpICAgICAgKCEocGdkX2ZsYWcoeCkgJiBQeERfRkxBR19WQUxJRCkpCisjZGVmaW5lIHBnZF9wcmVzZW50KHgpICAocGdkX2ZsYWcoeCkgJiBQeERfRkxBR19QUkVTRU5UKQorc3RhdGljIGlubGluZSB2b2lkIHBnZF9jbGVhcihwZ2RfdCAqcGdkKSB7CisjaWZkZWYgQ09ORklHXzY0QklUCisJaWYocGdkX2ZsYWcoKnBnZCkgJiBQeERfRkxBR19BVFRBQ0hFRCkKKwkJLyogVGhpcyBpcyB0aGUgcGVybWFuZW50IHBtZCBhdHRhY2hlZCB0byB0aGUgcGdkOyBjYW5ub3QKKwkJICogZnJlZSBpdCAqLworCQlyZXR1cm47CisjZW5kaWYKKwlfX3BnZF92YWxfc2V0KCpwZ2QsIDApOworfQorI2Vsc2UKKy8qCisgKiBUaGUgInBnZF94eHgoKSIgZnVuY3Rpb25zIGhlcmUgYXJlIHRyaXZpYWwgZm9yIGEgZm9sZGVkIHR3by1sZXZlbAorICogc2V0dXA6IHRoZSBwZ2QgaXMgbmV2ZXIgYmFkLCBhbmQgYSBwbWQgYWx3YXlzIGV4aXN0cyAoYXMgaXQncyBmb2xkZWQKKyAqIGludG8gdGhlIHBnZCBlbnRyeSkKKyAqLworZXh0ZXJuIGlubGluZSBpbnQgcGdkX25vbmUocGdkX3QgcGdkKQkJeyByZXR1cm4gMDsgfQorZXh0ZXJuIGlubGluZSBpbnQgcGdkX2JhZChwZ2RfdCBwZ2QpCQl7IHJldHVybiAwOyB9CitleHRlcm4gaW5saW5lIGludCBwZ2RfcHJlc2VudChwZ2RfdCBwZ2QpCXsgcmV0dXJuIDE7IH0KK2V4dGVybiBpbmxpbmUgdm9pZCBwZ2RfY2xlYXIocGdkX3QgKiBwZ2RwKQl7IH0KKyNlbmRpZgorCisvKgorICogVGhlIGZvbGxvd2luZyBvbmx5IHdvcmsgaWYgcHRlX3ByZXNlbnQoKSBpcyB0cnVlLgorICogVW5kZWZpbmVkIGJlaGF2aW91ciBpZiBub3QuLgorICovCitleHRlcm4gaW5saW5lIGludCBwdGVfcmVhZChwdGVfdCBwdGUpCQl7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9SRUFEOyB9CitleHRlcm4gaW5saW5lIGludCBwdGVfZGlydHkocHRlX3QgcHRlKQkJeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfRElSVFk7IH0KK2V4dGVybiBpbmxpbmUgaW50IHB0ZV95b3VuZyhwdGVfdCBwdGUpCQl7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9BQ0NFU1NFRDsgfQorZXh0ZXJuIGlubGluZSBpbnQgcHRlX3dyaXRlKHB0ZV90IHB0ZSkJCXsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX1dSSVRFOyB9CitleHRlcm4gaW5saW5lIGludCBwdGVfZmlsZShwdGVfdCBwdGUpCQl7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9GSUxFOyB9CitleHRlcm4gaW5saW5lIGludCBwdGVfdXNlcihwdGVfdCBwdGUpIAkJeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfVVNFUjsgfQorCitleHRlcm4gaW5saW5lIHB0ZV90IHB0ZV9yZHByb3RlY3QocHRlX3QgcHRlKQl7IHB0ZV92YWwocHRlKSAmPSB+X1BBR0VfUkVBRDsgcmV0dXJuIHB0ZTsgfQorZXh0ZXJuIGlubGluZSBwdGVfdCBwdGVfbWtjbGVhbihwdGVfdCBwdGUpCXsgcHRlX3ZhbChwdGUpICY9IH5fUEFHRV9ESVJUWTsgcmV0dXJuIHB0ZTsgfQorZXh0ZXJuIGlubGluZSBwdGVfdCBwdGVfbWtvbGQocHRlX3QgcHRlKQl7IHB0ZV92YWwocHRlKSAmPSB+X1BBR0VfQUNDRVNTRUQ7IHJldHVybiBwdGU7IH0KK2V4dGVybiBpbmxpbmUgcHRlX3QgcHRlX3dycHJvdGVjdChwdGVfdCBwdGUpCXsgcHRlX3ZhbChwdGUpICY9IH5fUEFHRV9XUklURTsgcmV0dXJuIHB0ZTsgfQorZXh0ZXJuIGlubGluZSBwdGVfdCBwdGVfbWtyZWFkKHB0ZV90IHB0ZSkJeyBwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfUkVBRDsgcmV0dXJuIHB0ZTsgfQorZXh0ZXJuIGlubGluZSBwdGVfdCBwdGVfbWtkaXJ0eShwdGVfdCBwdGUpCXsgcHRlX3ZhbChwdGUpIHw9IF9QQUdFX0RJUlRZOyByZXR1cm4gcHRlOyB9CitleHRlcm4gaW5saW5lIHB0ZV90IHB0ZV9ta3lvdW5nKHB0ZV90IHB0ZSkJeyBwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfQUNDRVNTRUQ7IHJldHVybiBwdGU7IH0KK2V4dGVybiBpbmxpbmUgcHRlX3QgcHRlX21rd3JpdGUocHRlX3QgcHRlKQl7IHB0ZV92YWwocHRlKSB8PSBfUEFHRV9XUklURTsgcmV0dXJuIHB0ZTsgfQorCisvKgorICogQ29udmVyc2lvbiBmdW5jdGlvbnM6IGNvbnZlcnQgYSBwYWdlIGFuZCBwcm90ZWN0aW9uIHRvIGEgcGFnZSBlbnRyeSwKKyAqIGFuZCBhIHBhZ2UgZW50cnkgYW5kIHBhZ2UgZGlyZWN0b3J5IHRvIHRoZSBwYWdlIHRoZXkgcmVmZXIgdG8uCisgKi8KKyNkZWZpbmUgX19ta19wdGUoYWRkcixwZ3Byb3QpIFwKKyh7CQkJCQkJCQkJXAorCXB0ZV90IF9fcHRlOwkJCQkJCQlcCisJCQkJCQkJCQlcCisJcHRlX3ZhbChfX3B0ZSkgPSAoKGFkZHIpK3BncHJvdF92YWwocGdwcm90KSk7CQkJXAorCQkJCQkJCQkJXAorCV9fcHRlOwkJCQkJCQkJXAorfSkKKworI2RlZmluZSBta19wdGUocGFnZSwgcGdwcm90KQlwZm5fcHRlKHBhZ2VfdG9fcGZuKHBhZ2UpLCAocGdwcm90KSkKKworc3RhdGljIGlubGluZSBwdGVfdCBwZm5fcHRlKHVuc2lnbmVkIGxvbmcgcGZuLCBwZ3Byb3RfdCBwZ3Byb3QpCit7CisJcHRlX3QgcHRlOworCXB0ZV92YWwocHRlKSA9IChwZm4gPDwgUEFHRV9TSElGVCkgfCBwZ3Byb3RfdmFsKHBncHJvdCk7CisJcmV0dXJuIHB0ZTsKK30KKworLyogVGhpcyB0YWtlcyBhIHBoeXNpY2FsIHBhZ2UgYWRkcmVzcyB0aGF0IGlzIHVzZWQgYnkgdGhlIHJlbWFwcGluZyBmdW5jdGlvbnMgKi8KKyNkZWZpbmUgbWtfcHRlX3BoeXMocGh5c3BhZ2UsIHBncHJvdCkgXAorKHsgcHRlX3QgX19wdGU7IHB0ZV92YWwoX19wdGUpID0gcGh5c3BhZ2UgKyBwZ3Byb3RfdmFsKHBncHJvdCk7IF9fcHRlOyB9KQorCitleHRlcm4gaW5saW5lIHB0ZV90IHB0ZV9tb2RpZnkocHRlX3QgcHRlLCBwZ3Byb3RfdCBuZXdwcm90KQoreyBwdGVfdmFsKHB0ZSkgPSAocHRlX3ZhbChwdGUpICYgX1BBR0VfQ0hHX01BU0spIHwgcGdwcm90X3ZhbChuZXdwcm90KTsgcmV0dXJuIHB0ZTsgfQorCisvKiBQZXJtYW5lbnQgYWRkcmVzcyBvZiBhIHBhZ2UuICBPbiBwYXJpc2Mgd2UgZG9uJ3QgaGF2ZSBoaWdobWVtLiAqLworCisjZGVmaW5lIHB0ZV9wZm4oeCkgKHB0ZV92YWwoeCkgPj4gUEFHRV9TSElGVCkKKworI2RlZmluZSBwdGVfcGFnZShwdGUpCQkocGZuX3RvX3BhZ2UocHRlX3BmbihwdGUpKSkKKworI2RlZmluZSBwbWRfcGFnZV9rZXJuZWwocG1kKQkoKHVuc2lnbmVkIGxvbmcpIF9fdmEocG1kX2FkZHJlc3MocG1kKSkpCisKKyNkZWZpbmUgX19wbWRfcGFnZShwbWQpICgodW5zaWduZWQgbG9uZykgX192YShwbWRfYWRkcmVzcyhwbWQpKSkKKyNkZWZpbmUgcG1kX3BhZ2UocG1kKQl2aXJ0X3RvX3BhZ2UoKHZvaWQgKilfX3BtZF9wYWdlKHBtZCkpCisKKyNkZWZpbmUgcGdkX2luZGV4KGFkZHJlc3MpICgoYWRkcmVzcykgPj4gUEdESVJfU0hJRlQpCisKKy8qIHRvIGZpbmQgYW4gZW50cnkgaW4gYSBwYWdlLXRhYmxlLWRpcmVjdG9yeSAqLworI2RlZmluZSBwZ2Rfb2Zmc2V0KG1tLCBhZGRyZXNzKSBcCisoKG1tKS0+cGdkICsgKChhZGRyZXNzKSA+PiBQR0RJUl9TSElGVCkpCisKKy8qIHRvIGZpbmQgYW4gZW50cnkgaW4gYSBrZXJuZWwgcGFnZS10YWJsZS1kaXJlY3RvcnkgKi8KKyNkZWZpbmUgcGdkX29mZnNldF9rKGFkZHJlc3MpIHBnZF9vZmZzZXQoJmluaXRfbW0sIGFkZHJlc3MpCisKKy8qIEZpbmQgYW4gZW50cnkgaW4gdGhlIHNlY29uZC1sZXZlbCBwYWdlIHRhYmxlLi4gKi8KKworI2lmIFBUX05MRVZFTFMgPT0gMworI2RlZmluZSBwbWRfb2Zmc2V0KGRpcixhZGRyZXNzKSBcCisoKHBtZF90ICopIHBnZF9wYWdlKCooZGlyKSkgKyAoKChhZGRyZXNzKT4+UE1EX1NISUZUKSAmIChQVFJTX1BFUl9QTUQtMSkpKQorI2Vsc2UKKyNkZWZpbmUgcG1kX29mZnNldChkaXIsYWRkcikgKChwbWRfdCAqKSBkaXIpCisjZW5kaWYKKworLyogRmluZCBhbiBlbnRyeSBpbiB0aGUgdGhpcmQtbGV2ZWwgcGFnZSB0YWJsZS4uICovIAorI2RlZmluZSBwdGVfaW5kZXgoYWRkcmVzcykgKCgoYWRkcmVzcykgPj4gUEFHRV9TSElGVCkgJiAoUFRSU19QRVJfUFRFLTEpKQorI2RlZmluZSBwdGVfb2Zmc2V0X2tlcm5lbChwbWQsIGFkZHJlc3MpIFwKKwkoKHB0ZV90ICopIHBtZF9wYWdlX2tlcm5lbCgqKHBtZCkpICsgcHRlX2luZGV4KGFkZHJlc3MpKQorI2RlZmluZSBwdGVfb2Zmc2V0X21hcChwbWQsIGFkZHJlc3MpIHB0ZV9vZmZzZXRfa2VybmVsKHBtZCwgYWRkcmVzcykKKyNkZWZpbmUgcHRlX29mZnNldF9tYXBfbmVzdGVkKHBtZCwgYWRkcmVzcykgcHRlX29mZnNldF9rZXJuZWwocG1kLCBhZGRyZXNzKQorI2RlZmluZSBwdGVfdW5tYXAocHRlKSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHB0ZV91bm1hcF9uZXN0ZWQocHRlKSBkbyB7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgcHRlX3VubWFwKHB0ZSkJCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHB0ZV91bm1hcF9uZXN0ZWQocHRlKQkJZG8geyB9IHdoaWxlICgwKQorCitleHRlcm4gdm9pZCBwYWdpbmdfaW5pdCAodm9pZCk7CisKKy8qIFVzZWQgZm9yIGRlZmVycmluZyBjYWxscyB0byBmbHVzaF9kY2FjaGVfcGFnZSgpICovCisKKyNkZWZpbmUgUEdfZGNhY2hlX2RpcnR5ICAgICAgICAgUEdfYXJjaF8xCisKK3N0cnVjdCB2bV9hcmVhX3N0cnVjdDsgLyogZm9yd2FyZCBkZWNsYXJhdGlvbiAoaW5jbHVkZS9saW51eC9tbS5oKSAqLworZXh0ZXJuIHZvaWQgdXBkYXRlX21tdV9jYWNoZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywgcHRlX3QpOworCisvKiBFbmNvZGUgYW5kIGRlLWNvZGUgYSBzd2FwIGVudHJ5ICovCisKKyNkZWZpbmUgX19zd3BfdHlwZSh4KSAgICAgICAgICAgICAgICAgICAgICgoeCkudmFsICYgMHgxZikKKyNkZWZpbmUgX19zd3Bfb2Zmc2V0KHgpICAgICAgICAgICAgICAgICAgICggKCgoeCkudmFsID4+IDYpICYgIDB4NykgfCBcCisJCQkJCSAgKCgoeCkudmFsID4+IDgpICYgfjB4NykgKQorI2RlZmluZSBfX3N3cF9lbnRyeSh0eXBlLCBvZmZzZXQpICAgICAgICAgKChzd3BfZW50cnlfdCkgeyAodHlwZSkgfCBcCisJCQkJCSAgICAoKG9mZnNldCAmICAweDcpIDw8IDYpIHwgXAorCQkJCQkgICAgKChvZmZzZXQgJiB+MHg3KSA8PCA4KSB9KQorI2RlZmluZSBfX3B0ZV90b19zd3BfZW50cnkocHRlKQkJKChzd3BfZW50cnlfdCkgeyBwdGVfdmFsKHB0ZSkgfSkKKyNkZWZpbmUgX19zd3BfZW50cnlfdG9fcHRlKHgpCQkoKHB0ZV90KSB7ICh4KS52YWwgfSkKKworc3RhdGljIGlubGluZSBpbnQgcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCkKK3sKKyNpZmRlZiBDT05GSUdfU01QCisJaWYgKCFwdGVfeW91bmcoKnB0ZXApKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gdGVzdF9hbmRfY2xlYXJfYml0KHhsYXRlX3BhYml0KF9QQUdFX0FDQ0VTU0VEX0JJVCksICZwdGVfdmFsKCpwdGVwKSk7CisjZWxzZQorCXB0ZV90IHB0ZSA9ICpwdGVwOworCWlmICghcHRlX3lvdW5nKHB0ZSkpCisJCXJldHVybiAwOworCXNldF9wdGVfYXQodm1hLT52bV9tbSwgYWRkciwgcHRlcCwgcHRlX21rb2xkKHB0ZSkpOworCXJldHVybiAxOworI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHB0ZXBfdGVzdF9hbmRfY2xlYXJfZGlydHkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApCit7CisjaWZkZWYgQ09ORklHX1NNUAorCWlmICghcHRlX2RpcnR5KCpwdGVwKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHRlc3RfYW5kX2NsZWFyX2JpdCh4bGF0ZV9wYWJpdChfUEFHRV9ESVJUWV9CSVQpLCAmcHRlX3ZhbCgqcHRlcCkpOworI2Vsc2UKKwlwdGVfdCBwdGUgPSAqcHRlcDsKKwlpZiAoIXB0ZV9kaXJ0eShwdGUpKQorCQlyZXR1cm4gMDsKKwlzZXRfcHRlX2F0KHZtYS0+dm1fbW0sIGFkZHIsIHB0ZXAsIHB0ZV9ta2NsZWFuKHB0ZSkpOworCXJldHVybiAxOworI2VuZGlmCit9CisKK2V4dGVybiBzcGlubG9ja190IHBhX2RiaXRfbG9jazsKKworc3RhdGljIGlubGluZSBwdGVfdCBwdGVwX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApCit7CisJcHRlX3Qgb2xkX3B0ZTsKKwlwdGVfdCBwdGU7CisKKwlzcGluX2xvY2soJnBhX2RiaXRfbG9jayk7CisJcHRlID0gb2xkX3B0ZSA9ICpwdGVwOworCXB0ZV92YWwocHRlKSAmPSB+X1BBR0VfUFJFU0VOVDsKKwlwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfRkxVU0g7CisJc2V0X3B0ZV9hdChtbSxhZGRyLHB0ZXAscHRlKTsKKwlzcGluX3VubG9jaygmcGFfZGJpdF9sb2NrKTsKKworCXJldHVybiBvbGRfcHRlOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcHRlcF9zZXRfd3Jwcm90ZWN0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKQoreworI2lmZGVmIENPTkZJR19TTVAKKwl1bnNpZ25lZCBsb25nIG5ldywgb2xkOworCisJZG8geworCQlvbGQgPSBwdGVfdmFsKCpwdGVwKTsKKwkJbmV3ID0gcHRlX3ZhbChwdGVfd3Jwcm90ZWN0KF9fcHRlIChvbGQpKSk7CisJfSB3aGlsZSAoY21weGNoZygodW5zaWduZWQgbG9uZyAqKSBwdGVwLCBvbGQsIG5ldykgIT0gb2xkKTsKKyNlbHNlCisJcHRlX3Qgb2xkX3B0ZSA9ICpwdGVwOworCXNldF9wdGVfYXQobW0sIGFkZHIsIHB0ZXAsIHB0ZV93cnByb3RlY3Qob2xkX3B0ZSkpOworI2VuZGlmCit9CisKKyNkZWZpbmUgcHRlX3NhbWUoQSxCKQkocHRlX3ZhbChBKSA9PSBwdGVfdmFsKEIpKQorCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisjZGVmaW5lIGlvX3JlbWFwX3BhZ2VfcmFuZ2Uodm1hLCB2YWRkciwgcGFkZHIsIHNpemUsIHByb3QpCQlcCisJCXJlbWFwX3Bmbl9yYW5nZSh2bWEsIHZhZGRyLCAocGFkZHIpID4+IFBBR0VfU0hJRlQsIHNpemUsIHByb3QpCisKKyNkZWZpbmUgaW9fcmVtYXBfcGZuX3JhbmdlKHZtYSwgdmFkZHIsIHBmbiwgc2l6ZSwgcHJvdCkJCVwKKwkJcmVtYXBfcGZuX3JhbmdlKHZtYSwgdmFkZHIsIHBmbiwgc2l6ZSwgcHJvdCkKKworI2RlZmluZSBNS19JT1NQQUNFX1BGTihzcGFjZSwgcGZuKQkocGZuKQorI2RlZmluZSBHRVRfSU9TUEFDRShwZm4pCQkwCisjZGVmaW5lIEdFVF9QRk4ocGZuKQkJCShwZm4pCisKKy8qIFdlIHByb3ZpZGUgb3VyIG93biBnZXRfdW5tYXBwZWRfYXJlYSB0byBwcm92aWRlIGNhY2hlIGNvaGVyZW5jeSAqLworCisjZGVmaW5lIEhBVkVfQVJDSF9VTk1BUFBFRF9BUkVBCisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFUF9URVNUX0FORF9DTEVBUl9ZT1VORworI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX1RFU1RfQU5EX0NMRUFSX0RJUlRZCisjZGVmaW5lIF9fSEFWRV9BUkNIX1BURVBfR0VUX0FORF9DTEVBUgorI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX1NFVF9XUlBST1RFQ1QKKyNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFX1NBTUUKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wZ3RhYmxlLmg+CisKKyNlbmRpZiAvKiBfUEFSSVNDX1BHVEFCTEVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3BvbGwuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9wb2xsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMxZGE4NgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9wb2xsLmgKQEAgLTAsMCArMSwyNiBAQAorI2lmbmRlZiBfX1BBUklTQ19QT0xMX0gKKyNkZWZpbmUgX19QQVJJU0NfUE9MTF9ICisKKy8qIFRoZXNlIGFyZSBzcGVjaWZpZWQgYnkgaUJDUzIgKi8KKyNkZWZpbmUgUE9MTElOCQkweDAwMDEKKyNkZWZpbmUgUE9MTFBSSQkJMHgwMDAyCisjZGVmaW5lIFBPTExPVVQJCTB4MDAwNAorI2RlZmluZSBQT0xMRVJSCQkweDAwMDgKKyNkZWZpbmUgUE9MTEhVUAkJMHgwMDEwCisjZGVmaW5lIFBPTExOVkFMCTB4MDAyMAorCisvKiBUaGUgcmVzdCBzZWVtIHRvIGJlIG1vcmUtb3ItbGVzcyBub25zdGFuZGFyZC4gQ2hlY2sgdGhlbSEgKi8KKyNkZWZpbmUgUE9MTFJETk9STQkweDAwNDAKKyNkZWZpbmUgUE9MTFJEQkFORAkweDAwODAKKyNkZWZpbmUgUE9MTFdSTk9STQkweDAxMDAKKyNkZWZpbmUgUE9MTFdSQkFORAkweDAyMDAKKyNkZWZpbmUgUE9MTE1TRwkJMHgwNDAwCisjZGVmaW5lIFBPTExSRU1PVkUJMHgxMDAwCisKK3N0cnVjdCBwb2xsZmQgeworCWludCBmZDsKKwlzaG9ydCBldmVudHM7CisJc2hvcnQgcmV2ZW50czsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3Bvc2l4X3R5cGVzLmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvcG9zaXhfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjE5OTcwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL3Bvc2l4X3R5cGVzLmgKQEAgLTAsMCArMSwxMzMgQEAKKyNpZm5kZWYgX19BUkNIX1BBUklTQ19QT1NJWF9UWVBFU19ICisjZGVmaW5lIF9fQVJDSF9QQVJJU0NfUE9TSVhfVFlQRVNfSAorCisvKgorICogVGhpcyBmaWxlIGlzIGdlbmVyYWxseSB1c2VkIGJ5IHVzZXItbGV2ZWwgc29mdHdhcmUsIHNvIHlvdSBuZWVkIHRvCisgKiBiZSBhIGxpdHRsZSBjYXJlZnVsIGFib3V0IG5hbWVzcGFjZSBwb2xsdXRpb24gZXRjLiAgQWxzbywgd2UgY2Fubm90CisgKiBhc3N1bWUgR0NDIGlzIGJlaW5nIHVzZWQuCisgKi8KK3R5cGVkZWYgdW5zaWduZWQgbG9uZwkJX19rZXJuZWxfaW5vX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CQlfX2tlcm5lbF9tb2RlX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CQlfX2tlcm5lbF9ubGlua190OwordHlwZWRlZiBsb25nCQkJX19rZXJuZWxfb2ZmX3Q7Cit0eXBlZGVmIGludAkJCV9fa2VybmVsX3BpZF90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAkJX19rZXJuZWxfaXBjX3BpZF90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQJCV9fa2VybmVsX3VpZF90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQJCV9fa2VybmVsX2dpZF90OwordHlwZWRlZiBpbnQJCQlfX2tlcm5lbF9zdXNlY29uZHNfdDsKK3R5cGVkZWYgbG9uZwkJCV9fa2VybmVsX2Nsb2NrX3Q7Cit0eXBlZGVmIGludAkJCV9fa2VybmVsX3RpbWVyX3Q7Cit0eXBlZGVmIGludAkJCV9fa2VybmVsX2Nsb2NraWRfdDsKK3R5cGVkZWYgaW50CQkJX19rZXJuZWxfZGFkZHJfdDsKKy8qIE5vdGUgdGhlc2UgY2hhbmdlIGZyb20gbmFycm93IHRvIHdpZGUga2VybmVscyAqLworI2lmZGVmIF9fTFA2NF9fCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcJCV9fa2VybmVsX3NpemVfdDsKK3R5cGVkZWYgbG9uZwkJCV9fa2VybmVsX3NzaXplX3Q7Cit0eXBlZGVmIGxvbmcJCQlfX2tlcm5lbF9wdHJkaWZmX3Q7Cit0eXBlZGVmIGxvbmcJCQlfX2tlcm5lbF90aW1lX3Q7CisjZWxzZQordHlwZWRlZiB1bnNpZ25lZCBpbnQJCV9fa2VybmVsX3NpemVfdDsKK3R5cGVkZWYgaW50CQkJX19rZXJuZWxfc3NpemVfdDsKK3R5cGVkZWYgaW50CQkJX19rZXJuZWxfcHRyZGlmZl90OwordHlwZWRlZiBsb25nCQkJX19rZXJuZWxfdGltZV90OworI2VuZGlmCit0eXBlZGVmIGNoYXIgKgkJCV9fa2VybmVsX2NhZGRyX3Q7CisKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJCV9fa2VybmVsX3VpZDE2X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CQlfX2tlcm5lbF9naWQxNl90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQJCV9fa2VybmVsX3VpZDMyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludAkJX19rZXJuZWxfZ2lkMzJfdDsKKworI2lmZGVmIF9fR05VQ19fCit0eXBlZGVmIGxvbmcgbG9uZwkJX19rZXJuZWxfbG9mZl90OwordHlwZWRlZiBsb25nIGxvbmcJCV9fa2VybmVsX29mZjY0X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZwlfX2tlcm5lbF9pbm82NF90OworI2VuZGlmCisKK3R5cGVkZWYgdW5zaWduZWQgaW50CQlfX2tlcm5lbF9vbGRfZGV2X3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyNpZiBkZWZpbmVkKF9fS0VSTkVMX18pIHx8IGRlZmluZWQoX19VU0VfQUxMKQorCWludAl2YWxbMl07CisjZWxzZSAvKiAhZGVmaW5lZChfX0tFUk5FTF9fKSAmJiAhZGVmaW5lZChfX1VTRV9BTEwpICovCisJaW50CV9fdmFsWzJdOworI2VuZGlmIC8qICFkZWZpbmVkKF9fS0VSTkVMX18pICYmICFkZWZpbmVkKF9fVVNFX0FMTCkgKi8KK30gX19rZXJuZWxfZnNpZF90OworCisvKiBjb21wYXRpYmlsaXR5IHN0dWZmICovCit0eXBlZGVmIF9fa2VybmVsX3VpZF90IF9fa2VybmVsX29sZF91aWRfdDsKK3R5cGVkZWYgX19rZXJuZWxfZ2lkX3QgX19rZXJuZWxfb2xkX2dpZF90OworCisjaWYgZGVmaW5lZChfX0tFUk5FTF9fKSB8fCAhZGVmaW5lZChfX0dMSUJDX18pIHx8IChfX0dMSUJDX18gPCAyKQorCisjdW5kZWYgX19GRF9TRVQKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19GRF9TRVQodW5zaWduZWQgbG9uZyBfX2ZkLCBfX2tlcm5lbF9mZF9zZXQgKl9fZmRzZXRwKQoreworCXVuc2lnbmVkIGxvbmcgX190bXAgPSBfX2ZkIC8gX19ORkRCSVRTOworCXVuc2lnbmVkIGxvbmcgX19yZW0gPSBfX2ZkICUgX19ORkRCSVRTOworCV9fZmRzZXRwLT5mZHNfYml0c1tfX3RtcF0gfD0gKDFVTDw8X19yZW0pOworfQorCisjdW5kZWYgX19GRF9DTFIKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19GRF9DTFIodW5zaWduZWQgbG9uZyBfX2ZkLCBfX2tlcm5lbF9mZF9zZXQgKl9fZmRzZXRwKQoreworCXVuc2lnbmVkIGxvbmcgX190bXAgPSBfX2ZkIC8gX19ORkRCSVRTOworCXVuc2lnbmVkIGxvbmcgX19yZW0gPSBfX2ZkICUgX19ORkRCSVRTOworCV9fZmRzZXRwLT5mZHNfYml0c1tfX3RtcF0gJj0gfigxVUw8PF9fcmVtKTsKK30KKworI3VuZGVmIF9fRkRfSVNTRVQKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0ZEX0lTU0VUKHVuc2lnbmVkIGxvbmcgX19mZCwgY29uc3QgX19rZXJuZWxfZmRfc2V0ICpfX3ApCit7IAorCXVuc2lnbmVkIGxvbmcgX190bXAgPSBfX2ZkIC8gX19ORkRCSVRTOworCXVuc2lnbmVkIGxvbmcgX19yZW0gPSBfX2ZkICUgX19ORkRCSVRTOworCXJldHVybiAoX19wLT5mZHNfYml0c1tfX3RtcF0gJiAoMVVMPDxfX3JlbSkpICE9IDA7Cit9CisKKy8qCisgKiBUaGlzIHdpbGwgdW5yb2xsIHRoZSBsb29wIGZvciB0aGUgbm9ybWFsIGNvbnN0YW50IGNhc2UgKDggaW50cywKKyAqIGZvciBhIDI1Ni1iaXQgZmRfc2V0KQorICovCisjdW5kZWYgX19GRF9aRVJPCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fRkRfWkVSTyhfX2tlcm5lbF9mZF9zZXQgKl9fcCkKK3sKKwl1bnNpZ25lZCBsb25nICpfX3RtcCA9IF9fcC0+ZmRzX2JpdHM7CisJaW50IF9faTsKKworCWlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChfX0ZEU0VUX0xPTkdTKSkgeworCQlzd2l0Y2ggKF9fRkRTRVRfTE9OR1MpIHsKKwkJY2FzZSAxNjoKKwkJCV9fdG1wWyAwXSA9IDA7IF9fdG1wWyAxXSA9IDA7CisJCQlfX3RtcFsgMl0gPSAwOyBfX3RtcFsgM10gPSAwOworCQkJX190bXBbIDRdID0gMDsgX190bXBbIDVdID0gMDsKKwkJCV9fdG1wWyA2XSA9IDA7IF9fdG1wWyA3XSA9IDA7CisJCQlfX3RtcFsgOF0gPSAwOyBfX3RtcFsgOV0gPSAwOworCQkJX190bXBbMTBdID0gMDsgX190bXBbMTFdID0gMDsKKwkJCV9fdG1wWzEyXSA9IDA7IF9fdG1wWzEzXSA9IDA7CisJCQlfX3RtcFsxNF0gPSAwOyBfX3RtcFsxNV0gPSAwOworCQkJcmV0dXJuOworCisJCWNhc2UgODoKKwkJCV9fdG1wWyAwXSA9IDA7IF9fdG1wWyAxXSA9IDA7CisJCQlfX3RtcFsgMl0gPSAwOyBfX3RtcFsgM10gPSAwOworCQkJX190bXBbIDRdID0gMDsgX190bXBbIDVdID0gMDsKKwkJCV9fdG1wWyA2XSA9IDA7IF9fdG1wWyA3XSA9IDA7CisJCQlyZXR1cm47CisKKwkJY2FzZSA0OgorCQkJX190bXBbIDBdID0gMDsgX190bXBbIDFdID0gMDsKKwkJCV9fdG1wWyAyXSA9IDA7IF9fdG1wWyAzXSA9IDA7CisJCQlyZXR1cm47CisJCX0KKwl9CisJX19pID0gX19GRFNFVF9MT05HUzsKKwl3aGlsZSAoX19pKSB7CisJCV9faS0tOworCQkqX190bXAgPSAwOworCQlfX3RtcCsrOworCX0KK30KKworI2VuZGlmIC8qIGRlZmluZWQoX19LRVJORUxfXykgfHwgIWRlZmluZWQoX19HTElCQ19fKSB8fCAoX19HTElCQ19fIDwgMikgKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvcHJvY2Vzc29yLmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvcHJvY2Vzc29yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI2MWY1MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9wcm9jZXNzb3IuaApAQCAtMCwwICsxLDM0NCBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLXBhcmlzYy9wcm9jZXNzb3IuaAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NCBMaW51cyBUb3J2YWxkcworICogQ29weXJpZ2h0IChDKSAyMDAxIEdyYW50IEdydW5kbGVyCisgKi8KKworI2lmbmRlZiBfX0FTTV9QQVJJU0NfUFJPQ0VTU09SX0gKKyNkZWZpbmUgX19BU01fUEFSSVNDX1BST0NFU1NPUl9ICisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vcGRjLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworI2RlZmluZSBLRVJORUxfU1RBQ0tfU0laRSAJKDQqUEFHRV9TSVpFKQorCisvKgorICogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBtYWNybyB0aGF0IHJldHVybnMgY3VycmVudAorICogaW5zdHJ1Y3Rpb24gcG9pbnRlciAoInByb2dyYW0gY291bnRlciIpLgorICovCisKKy8qIFdlIGNhbm5vdCB1c2UgTUZJQSBhcyBpdCB3YXMgYWRkZWQgZm9yIFBBMi4wIC0gcHJ1bXBmCisKKyAgIEF0IG9uZSBwb2ludCB0aGVyZSB3ZXJlIG5vICIwZi8wYiIgdHlwZSBsb2NhbCBzeW1ib2xzIGluIGdhcyBmb3IKKyAgIFBBLVJJU0MuICBUaGlzIGlzIG5vIGxvbmdlciB0cnVlLCBidXQgdGhpcyBzdGlsbCBzZWVtcyBsaWtlIHRoZQorICAgbmljZXN0IHdheSB0byBpbXBsZW1lbnQgdGhpcy4gKi8KKworI2RlZmluZSBjdXJyZW50X3RleHRfYWRkcigpICh7IHZvaWQgKnBjOyBfX2FzbV9fKCJcblx0YmxyIDAsJTBcblx0bm9wIjoiPXIiIChwYykpOyBwYzsgfSkKKworI2RlZmluZSBUQVNLX1NJWkUgICAgICAgICAgICAgICAoY3VycmVudC0+dGhyZWFkLnRhc2tfc2l6ZSkKKyNkZWZpbmUgVEFTS19VTk1BUFBFRF9CQVNFICAgICAgKGN1cnJlbnQtPnRocmVhZC5tYXBfYmFzZSkKKworI2RlZmluZSBERUZBVUxUX1RBU0tfU0laRTMyCSgweEZGRjAwMDAwVUwpCisjZGVmaW5lIERFRkFVTFRfTUFQX0JBU0UzMgkoMHg0MDAwMDAwMFVMKQorCisjaWZkZWYgX19MUDY0X18KKyNkZWZpbmUgREVGQVVMVF9UQVNLX1NJWkUgICAgICAgKE1BWF9BRERSRVNTLTB4ZjAwMDAwMCkKKyNkZWZpbmUgREVGQVVMVF9NQVBfQkFTRSAgICAgICAgKDB4MjAwMDAwMDAwVUwpCisjZWxzZQorI2RlZmluZSBERUZBVUxUX1RBU0tfU0laRQlERUZBVUxUX1RBU0tfU0laRTMyCisjZGVmaW5lIERFRkFVTFRfTUFQX0JBU0UJREVGQVVMVF9NQVBfQkFTRTMyCisjZW5kaWYKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworLyoKKyAqIERhdGEgZGV0ZWN0ZWQgYWJvdXQgQ1BVcyBhdCBib290IHRpbWUgd2hpY2ggaXMgdGhlIHNhbWUgZm9yIGFsbCBDUFUncy4KKyAqIEhQIGJveGVzIGFyZSBTTVAgLSBpZSBpZGVudGljYWwgcHJvY2Vzc29ycy4KKyAqCisgKiBGSVhNRTogc29tZSBDUFUgcmV2IGluZm8gbWF5IGJlIHByb2Nlc3NvciBzcGVjaWZpYy4uLgorICovCitzdHJ1Y3Qgc3lzdGVtX2NwdWluZm9fcGFyaXNjIHsKKwl1bnNpZ25lZCBpbnQJY3B1X2NvdW50OworCXVuc2lnbmVkIGludAljcHVfaHo7CisJdW5zaWduZWQgaW50CWh2ZXJzaW9uOworCXVuc2lnbmVkIGludAlzdmVyc2lvbjsKKwllbnVtIGNwdV90eXBlCWNwdV90eXBlOworCisJc3RydWN0IHsKKwkJc3RydWN0IHBkY19tb2RlbCBtb2RlbDsKKwkJdW5zaWduZWQgbG9uZyB2ZXJzaW9uczsKKwkJdW5zaWduZWQgbG9uZyBjcHVpZDsKKwkJdW5zaWduZWQgbG9uZyBjYXBhYmlsaXRpZXM7CisJCWNoYXIgICBzeXNfbW9kZWxfbmFtZVs4MV07IC8qIFBEQy1ST00gcmV0dXJuZXMgdGhpcyBtb2RlbCBuYW1lICovCisJfSBwZGM7CisKKwljaGFyCQkqY3B1X25hbWU7CS8qIGUuZy4gIlBBNzMwMExDIChQQ1gtTDIpIiAqLworCWNoYXIJCSpmYW1pbHlfbmFtZTsJLyogZS5nLiAiMS4xZSIgKi8KK307CisKKworLyogUGVyIENQVSBkYXRhIHN0cnVjdHVyZSAtIGllIHZhcmllcyBwZXIgQ1BVLiAgKi8KK3N0cnVjdCBjcHVpbmZvX3BhcmlzYyB7CisJdW5zaWduZWQgbG9uZyBpdF92YWx1ZTsgICAgIC8qIEludGVydmFsIFRpbWVyIGF0IGxhc3QgdGltZXIgSW50ciAqLworCXVuc2lnbmVkIGxvbmcgaXRfZGVsdGE7ICAgICAvKiBJbnRlcnZhbCBkZWx0YSAodGljXzEwbXMgLyBIWiAqIDEwMCkgKi8KKwl1bnNpZ25lZCBsb25nIGlycV9jb3VudDsgICAgLyogbnVtYmVyIG9mIElSUSdzIHNpbmNlIGJvb3QgKi8KKwl1bnNpZ25lZCBsb25nIGlycV9tYXhfY3IxNjsgLyogbG9uZ2VzdCB0aW1lIHRvIGhhbmRsZSBhIHNpbmdsZSBJUlEgKi8KKwl1bnNpZ25lZCBsb25nIGNwdWlkOyAgICAgICAgLyogYWthIHNsb3RfbnVtYmVyIG9yIHNldCB0byBOT19QUk9DX0lEICovCisJdW5zaWduZWQgbG9uZyBocGE7ICAgICAgICAgIC8qIEhvc3QgUGh5c2ljYWwgYWRkcmVzcyAqLworCXVuc2lnbmVkIGxvbmcgdHhuX2FkZHI7ICAgICAvKiBNTUlPIGFkZHIgb2YgRUlSIG9yIGlkX2VpZCAqLworI2lmZGVmIENPTkZJR19TTVAKKwlzcGlubG9ja190IGxvY2s7ICAgICAgICAgICAgLyogc3luY2hyb25pemF0aW9uIGZvciBpcGkncyAqLworCXVuc2lnbmVkIGxvbmcgcGVuZGluZ19pcGk7ICAvKiBiaXRtYXAgb2YgdHlwZSBpcGlfbWVzc2FnZV90eXBlICovCisJdW5zaWduZWQgbG9uZyBpcGlfY291bnQ7ICAgIC8qIG51bWJlciBpcGkgSW50ZXJydXB0cyAqLworI2VuZGlmCisJdW5zaWduZWQgbG9uZyBiaF9jb3VudDsgICAgIC8qIG51bWJlciBvZiB0aW1lcyBiaCB3YXMgaW52b2tlZCAqLworCXVuc2lnbmVkIGxvbmcgcHJvZl9jb3VudGVyOyAvKiBwZXIgQ1BVIHByb2ZpbGluZyBzdXBwb3J0ICovCisJdW5zaWduZWQgbG9uZyBwcm9mX211bHRpcGxpZXI7CS8qIHBlciBDUFUgcHJvZmlsaW5nIHN1cHBvcnQgKi8KKwl1bnNpZ25lZCBsb25nIGZwX3JldjsKKwl1bnNpZ25lZCBsb25nIGZwX21vZGVsOworCXVuc2lnbmVkIGludCBzdGF0ZTsKKwlzdHJ1Y3QgcGFyaXNjX2RldmljZSAqZGV2OworCXVuc2lnbmVkIGxvbmcgbG9vcHNfcGVyX2ppZmZ5OworfTsKKworZXh0ZXJuIHN0cnVjdCBzeXN0ZW1fY3B1aW5mb19wYXJpc2MgYm9vdF9jcHVfZGF0YTsKK2V4dGVybiBzdHJ1Y3QgY3B1aW5mb19wYXJpc2MgY3B1X2RhdGFbTlJfQ1BVU107CisjZGVmaW5lIGN1cnJlbnRfY3B1X2RhdGEgY3B1X2RhdGFbc21wX3Byb2Nlc3Nvcl9pZCgpXQorCisjZGVmaW5lIENQVV9IVkVSU0lPTiAoKGJvb3RfY3B1X2RhdGEuaHZlcnNpb24gPj4gNCkgJiAweDBGRkYpCisKK3R5cGVkZWYgc3RydWN0IHsKKwlpbnQgc2VnOyAgCit9IG1tX3NlZ21lbnRfdDsKKworI2RlZmluZSBBUkNIX01JTl9UQVNLQUxJR04JOAorCitzdHJ1Y3QgdGhyZWFkX3N0cnVjdCB7CisJc3RydWN0IHB0X3JlZ3MgcmVnczsKKwl1bnNpZ25lZCBsb25nICB0YXNrX3NpemU7CisJdW5zaWduZWQgbG9uZyAgbWFwX2Jhc2U7CisJdW5zaWduZWQgbG9uZyAgZmxhZ3M7Cit9OyAKKworLyogVGhyZWFkIHN0cnVjdCBmbGFncy4gKi8KKyNkZWZpbmUgUEFSSVNDX0tFUk5FTF9ERUFUSAkoMVVMIDw8IDMxKQkvKiBzZWUgZGllX2lmX2tlcm5lbCgpLi4uICovCisKKyNkZWZpbmUgSU5JVF9USFJFQUQgeyBcCisJcmVnczoJewlncjogeyAwLCB9LCBcCisJCQlmcjogeyAwLCB9LCBcCisJCQlzcjogeyAwLCB9LCBcCisJCQlpYXNxOiB7IDAsIH0sIFwKKwkJCWlhb3E6IHsgMCwgfSwgXAorCQkJY3IyNzogMCwgXAorCQl9LCBcCisJdGFza19zaXplOiAgICAgIERFRkFVTFRfVEFTS19TSVpFLCBcCisJbWFwX2Jhc2U6ICAgICAgIERFRkFVTFRfTUFQX0JBU0UsIFwKKwlmbGFnczogICAgICAgICAgMCBcCisJfQorCisvKgorICogUmV0dXJuIHNhdmVkIFBDIG9mIGEgYmxvY2tlZCB0aHJlYWQuICBUaGlzIGlzIHVzZWQgYnkgcHMgbW9zdGx5LgorICovCisKK3Vuc2lnbmVkIGxvbmcgdGhyZWFkX3NhdmVkX3BjKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCk7Cit2b2lkIHNob3dfdHJhY2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB1bnNpZ25lZCBsb25nICpzdGFjayk7CisKKy8qCisgKiBTdGFydCB1c2VyIHRocmVhZCBpbiBhbm90aGVyIHNwYWNlLgorICoKKyAqIE5vdGUgdGhhdCB3ZSBzZXQgYm90aCB0aGUgaWFvcSBhbmQgcjMxIHRvIHRoZSBuZXcgcGMuIFdoZW4KKyAqIHRoZSBrZXJuZWwgaW5pdGlhbGx5IGNhbGxzIGV4ZWN2ZSBpdCB3aWxsIHJldHVybiB0aHJvdWdoIGFuCisgKiByZmkgcGF0aCB0aGF0IHdpbGwgdXNlIHRoZSB2YWx1ZXMgaW4gdGhlIGlhb3EuIFRoZSBleGVjdmUKKyAqIHN5c2NhbGwgcGF0aCB3aWxsIHJldHVybiB0aHJvdWdoIHRoZSBnYXRld2F5IHBhZ2UsIGFuZAorICogdGhhdCB1c2VzIHIzMSB0byBicmFuY2ggdG8uCisgKgorICogRm9yIEVMRiB3ZSBjbGVhciByMjMsIGJlY2F1c2UgdGhlIGR5bmFtaWMgbGlua2VyIHVzZXMgaXQgdG8gcGFzcworICogdGhlIGFkZHJlc3Mgb2YgdGhlIGZpbmFsaXplciBmdW5jdGlvbi4KKyAqCisgKiBXZSBhbHNvIGluaXRpYWxpemUgc3IzIHRvIGFuIGlsbGVnYWwgdmFsdWUgKGlsbGVnYWwgZm9yIG91cgorICogaW1wbGVtZW50YXRpb24sIG5vdCBmb3IgdGhlIGFyY2hpdGVjdHVyZSkuCisgKi8KK3R5cGVkZWYgdW5zaWduZWQgaW50IGVsZl9jYWRkcl90OworCisjZGVmaW5lIHN0YXJ0X3RocmVhZF9zb20ocmVncywgbmV3X3BjLCBuZXdfc3ApIGRvIHsJXAorCXVuc2lnbmVkIGxvbmcgKnNwID0gKHVuc2lnbmVkIGxvbmcgKiluZXdfc3A7CVwKKwlfX3UzMiBzcGFjZWlkID0gKF9fdTMyKWN1cnJlbnQtPm1tLT5jb250ZXh0OwlcCisJdW5zaWduZWQgbG9uZyBwYyA9ICh1bnNpZ25lZCBsb25nKW5ld19wYzsJXAorCS8qIG9mZnNldCBwYyBmb3IgcHJpdi4gbGV2ZWwgKi8JCQlcCisJcGMgfD0gMzsJCQkJCVwKKwkJCQkJCQlcCisJc2V0X2ZzKFVTRVJfRFMpOwkJCQlcCisJcmVncy0+aWFzcVswXSA9IHNwYWNlaWQ7CQkJXAorCXJlZ3MtPmlhc3FbMV0gPSBzcGFjZWlkOwkJCVwKKwlyZWdzLT5pYW9xWzBdID0gcGM7CQkJCVwKKwlyZWdzLT5pYW9xWzFdID0gcGMgKyA0OyAgICAgICAgICAgICAgICAgICAgICAgICBcCisJcmVncy0+c3JbMl0gPSBMSU5VWF9HQVRFV0FZX1NQQUNFOyAgICAgICAgICAgICAgXAorCXJlZ3MtPnNyWzNdID0gMHhmZmZmOwkJCQlcCisJcmVncy0+c3JbNF0gPSBzcGFjZWlkOwkJCQlcCisJcmVncy0+c3JbNV0gPSBzcGFjZWlkOwkJCQlcCisJcmVncy0+c3JbNl0gPSBzcGFjZWlkOwkJCQlcCisJcmVncy0+c3JbN10gPSBzcGFjZWlkOwkJCQlcCisJcmVncy0+Z3JbIDBdID0gVVNFUl9QU1c7ICAgICAgICAgICAgICAgICAgICAgICAgXAorCXJlZ3MtPmdyWzMwXSA9ICgobmV3X3NwKSs2MykmfjYzOwkJXAorCXJlZ3MtPmdyWzMxXSA9IHBjOwkJCQlcCisJCQkJCQkJXAorCWdldF91c2VyKHJlZ3MtPmdyWzI2XSwmc3BbMF0pOwkJCVwKKwlnZXRfdXNlcihyZWdzLT5nclsyNV0sJnNwWy0xXSk7IAkJXAorCWdldF91c2VyKHJlZ3MtPmdyWzI0XSwmc3BbLTJdKTsgCQlcCisJZ2V0X3VzZXIocmVncy0+Z3JbMjNdLCZzcFstM10pOyAJCVwKK30gd2hpbGUoMCkKKworLyogVGhlIEVMRiBhYmkgd2FudHMgdGhpbmdzIGRvbmUgYSAid2VlIGJpdCIgZGlmZmVyZW50bHkgdGhhbgorICogc29tIGRvZXMuICBTdXBwb3J0aW5nIHRoaXMgYmVoYXZpb3IgaGVyZSBhdm9pZHMKKyAqIGhhdmluZyBvdXIgb3duIHZlcnNpb24gb2YgY3JlYXRlX2VsZl90YWJsZXMuCisgKgorICogT2gsIGFuZCB5ZXMsIHRoYXQgaXMgbm90IGEgdHlwbywgd2UgYXJlIHJlYWxseSBwYXNzaW5nIGFyZ2MgaW4gcjI1CisgKiBhbmQgYXJndiBpbiByMjQgKHJhdGhlciB0aGFuIHIyNiBhbmQgcjI1KS4gIFRoaXMgaXMgYmVjYXVzZSB0aGF0J3MKKyAqIHdoZXJlIF9fbGliY19zdGFydF9tYWluIHdhbnRzIHRoZW0uCisgKgorICogRHVwbGljYXRlZCBmcm9tIGRsLW1hY2hpbmUuaCBmb3IgdGhlIGJlbmVmaXQgb2YgcmVhZGVyczoKKyAqCisgKiAgT3VyIGluaXRpYWwgc3RhY2sgbGF5b3V0IGlzIHJhdGhlciBkaWZmZXJlbnQgZnJvbSBldmVyeW9uZSBlbHNlJ3MKKyAqICBkdWUgdG8gdGhlIHVuaXF1ZSBQQS1SSVNDIEFCSS4gIEFzIGZhciBhcyBJIGtub3cgaXQgbG9va3MgbGlrZQorICogIHRoaXM6CisKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAodXNlciBzdGFydHVwIGNvZGUgY3JlYXRlcyB0aGlzIGZyYW1lKQorICAgfCAgICAgICAgIDMyIGJ5dGVzIG9mIG1hZ2ljICAgICAgIHwKKyAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CisgICB8IDMyIGJ5dGVzIGFyZ3VtZW50L3NwIHNhdmUgYXJlYSAgfAorICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgKGJwcm0tPnApCisgICB8CSAgICBFTEYgYXV4aWxpYXJ5IGluZm8JICAgICB8CisgICB8ICAgICAgICAgKHVwIHRvIDI4IHdvcmRzKSAgICAgICAgfAorICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKKyAgIHwJCSAgIE5VTEwJCSAgICAgfAorICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKKyAgIHwJICAgRW52aXJvbm1lbnQgcG9pbnRlcnMJICAgICB8CisgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorICAgfAkJICAgTlVMTAkJICAgICB8CisgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorICAgfCAgICAgICAgQXJndW1lbnQgcG9pbnRlcnMgICAgICAgIHwKKyAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IDwtIGFyZ3YKKyAgIHwgICAgICAgICAgYXJnYyAoMSB3b3JkKSAgICAgICAgICB8CisgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCA8LSBicHJtLT5leGVjIChIQUNLISkKKyAgIHwgICAgICAgICBOIGJ5dGVzIG9mIHNsYWNrICAgICAgICB8CisgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorICAgfAlmaWxlbmFtZSBwYXNzZWQgdG8gZXhlY3ZlICAgIHwKKyAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IChtbS0+ZW52X2VuZCkKKyAgIHwgICAgICAgICAgIGVudiBzdHJpbmdzICAgICAgICAgICB8CisgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAobW0tPmVudl9zdGFydCwgbW0tPmFyZ19lbmQpCisgICB8ICAgICAgICAgICBhcmcgc3RyaW5ncyAgICAgICAgICAgfAorICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKKyAgIHwgYWRkaXRpb25hbCBmYWtlZCBhcmcgc3RyaW5ncyBpZiB8CisgICB8IHdlJ3JlIGludm9rZWQgdmlhIGJpbmZtdF9zY3JpcHQgfAorICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgKG1tLT5hcmdfc3RhcnQpCisgICBzdGFjayBiYXNlIGlzIGF0IFRBU0tfU0laRSAtIHJsaW1fbWF4LgorCitvbiBkb3dud2FyZCBncm93aW5nIGFyY2hlcywgaXQgbG9va3MgbGlrZSB0aGlzOgorICAgc3RhY2sgYmFzZSBhdCBUQVNLX1NJWkUKKyAgIHwgZmlsZW5hbWUgcGFzc2VkIHRvIGV4ZWN2ZQorICAgfCBlbnYgc3RyaW5ncworICAgfCBhcmcgc3RyaW5ncworICAgfCBmYWtlZCBhcmcgc3RyaW5ncworICAgfCBzbGFjaworICAgfCBFTEYKKyAgIHwgZW52cHMKKyAgIHwgYXJndnMKKyAgIHwgYXJnYworCisgKiAgVGhlIHBsZWFzYW50IHBhcnQgb2YgdGhpcyBpcyB0aGF0IGlmIHdlIG5lZWQgdG8gc2tpcCBhcmd1bWVudHMgd2UKKyAqICBjYW4ganVzdCBkZWNyZW1lbnQgYXJnYyBhbmQgbW92ZSBhcmd2LCBiZWNhdXNlIHRoZSBzdGFjayBwb2ludGVyCisgKiAgaXMgdXR0ZXJseSB1bnJlbGF0ZWQgdG8gdGhlIGxvY2F0aW9uIG9mIHRoZSBlbnZpcm9ubWVudCBhbmQKKyAqICBhcmd1bWVudCB2ZWN0b3JzLgorICoKKyAqIE5vdGUgdGhhdCB0aGUgUy8zOTAgcGVvcGxlIHRvb2sgdGhlIGVhc3kgd2F5IG91dCBhbmQgaGFja2VkIHRoZWlyCisgKiBHQ0MgdG8gbWFrZSB0aGUgc3RhY2sgZ3JvdyBkb3dud2FyZHMuCisgKgorICogRmluYWwgTm90ZTogRm9yIGVudHJ5IGZyb20gc3lzY2FsbCwgdGhlIFcgKHdpZGUpIGJpdCBvZiB0aGUgUFNXCisgKiBpcyBzdHVmZmVkIGludG8gdGhlIGxvd2VzdCBiaXQgb2YgdGhlIHVzZXIgc3AgKCVyMzApLCBzbyB3ZSBmaWxsCisgKiBpdCBpbiBoZXJlIGZyb20gdGhlIGN1cnJlbnQtPnBlcnNvbmFsaXR5CisgKi8KKworI2lmZGVmIF9fTFA2NF9fCisjZGVmaW5lIFVTRVJfV0lERV9NT0RFCShwZXJzb25hbGl0eShjdXJyZW50LT5wZXJzb25hbGl0eSkgPT0gUEVSX0xJTlVYKQorI2Vsc2UKKyNkZWZpbmUgVVNFUl9XSURFX01PREUJMAorI2VuZGlmCisKKyNkZWZpbmUgc3RhcnRfdGhyZWFkKHJlZ3MsIG5ld19wYywgbmV3X3NwKSBkbyB7CQlcCisJZWxmX2FkZHJfdCAqc3AgPSAoZWxmX2FkZHJfdCAqKW5ld19zcDsJCVwKKwlfX3UzMiBzcGFjZWlkID0gKF9fdTMyKWN1cnJlbnQtPm1tLT5jb250ZXh0OwlcCisJZWxmX2FkZHJfdCBwYyA9IChlbGZfYWRkcl90KW5ld19wYyB8IDM7CQlcCisJZWxmX2NhZGRyX3QgKmFyZ3YgPSAoZWxmX2NhZGRyX3QgKilicHJtLT5leGVjICsgMTsJXAorCQkJCQkJCVwKKwlzZXRfZnMoVVNFUl9EUyk7CQkJCVwKKwlyZWdzLT5pYXNxWzBdID0gc3BhY2VpZDsJCQlcCisJcmVncy0+aWFzcVsxXSA9IHNwYWNlaWQ7CQkJXAorCXJlZ3MtPmlhb3FbMF0gPSBwYzsJCQkJXAorCXJlZ3MtPmlhb3FbMV0gPSBwYyArIDQ7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlyZWdzLT5zclsyXSA9IExJTlVYX0dBVEVXQVlfU1BBQ0U7ICAgICAgICAgICAgICBcCisJcmVncy0+c3JbM10gPSAweGZmZmY7CQkJCVwKKwlyZWdzLT5zcls0XSA9IHNwYWNlaWQ7CQkJCVwKKwlyZWdzLT5zcls1XSA9IHNwYWNlaWQ7CQkJCVwKKwlyZWdzLT5zcls2XSA9IHNwYWNlaWQ7CQkJCVwKKwlyZWdzLT5zcls3XSA9IHNwYWNlaWQ7CQkJCVwKKwlyZWdzLT5nclsgMF0gPSBVU0VSX1BTVyB8IChVU0VSX1dJREVfTU9ERSA/IFBTV19XIDogMCk7IFwKKwlyZWdzLT5mclsgMF0gPSAwTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlcCisJcmVncy0+ZnJbIDFdID0gMExMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAJXAorCXJlZ3MtPmZyWyAyXSA9IDBMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgCVwKKwlyZWdzLT5mclsgM10gPSAwTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlcCisJcmVncy0+Z3JbMzBdID0gKCgodW5zaWduZWQgbG9uZylzcCArIDYzKSAmfiA2MykgfCAoVVNFUl9XSURFX01PREUgPyAxIDogMCk7IFwKKwlyZWdzLT5nclszMV0gPSBwYzsJCQkJXAorCQkJCQkJCVwKKwlnZXRfdXNlcihyZWdzLT5nclsyNV0sIChhcmd2IC0gMSkpOwkJXAorCXJlZ3MtPmdyWzI0XSA9IChsb25nKSBhcmd2OwkJCVwKKwlyZWdzLT5nclsyM10gPSAwOwkJCQlcCit9IHdoaWxlKDApCisKK3N0cnVjdCB0YXNrX3N0cnVjdDsKK3N0cnVjdCBtbV9zdHJ1Y3Q7CisKKy8qIEZyZWUgYWxsIHJlc291cmNlcyBoZWxkIGJ5IGEgdGhyZWFkLiAqLworZXh0ZXJuIHZvaWQgcmVsZWFzZV90aHJlYWQoc3RydWN0IHRhc2tfc3RydWN0ICopOworZXh0ZXJuIGludCBrZXJuZWxfdGhyZWFkKGludCAoKmZuKSh2b2lkICopLCB2b2lkICogYXJnLCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKKworLyogUHJlcGFyZSB0byBjb3B5IHRocmVhZCBzdGF0ZSAtIHVubGF6eSBhbGwgbGF6eSBzdGF0dXMgKi8KKyNkZWZpbmUgcHJlcGFyZV90b19jb3B5KHRzaykJZG8geyB9IHdoaWxlICgwKQorCitleHRlcm4gdm9pZCBtYXBfaHB1eF9nYXRld2F5X3BhZ2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZ2V0X3djaGFuKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7CisKKyNkZWZpbmUgS1NUS19FSVAodHNrKQkoKHRzayktPnRocmVhZC5yZWdzLmlhb3FbMF0pCisjZGVmaW5lIEtTVEtfRVNQKHRzaykJKCh0c2spLT50aHJlYWQucmVncy5nclszMF0pCisKKworLyoKKyAqIFBBIDIuMCBkZWZpbmVzIGRhdGEgcHJlZmV0Y2ggaW5zdHJ1Y3Rpb25zIG9uIHBhZ2UgNi0xMSBvZiB0aGUgS2FuZSBib29rLgorICogSW4gYWRkaXRpb24sIG1hbnkgaW1wbGVtZW50YXRpb25zIGRvIGhhcmR3YXJlIHByZWZldGNoaW5nIG9mIGJvdGgKKyAqIGluc3RydWN0aW9ucyBhbmQgZGF0YS4KKyAqCisgKiBQQTczMDBMQyAocGFnZSAxNC00IG9mIHRoZSBFUlMpIGFsc28gaW1wbGVtZW50cyBwcmVmZXRjaGluZyBieSBhIGxvYWQKKyAqIHRvIGdyMCBidXQgbm90IGluIGEgd2F5IHRoYXQgTGludXggY2FuIHVzZS4gIElmIHRoZSBsb2FkIHdvdWxkIGNhdXNlIGFuCisgKiBpbnRlcnJ1cHRpb24gKGVnIGR1ZSB0byBwcmVmZXRjaGluZyAwKSwgaXQgaXMgc3VwcHJlc3NlZCBvbiBQQTIuMAorICogcHJvY2Vzc29ycywgYnV0IG5vdCBvbiA3MzAwTEMuCisgKi8KKyNpZmRlZiAgQ09ORklHX1BSRUZFVENICisjZGVmaW5lIEFSQ0hfSEFTX1BSRUZFVENICisjZGVmaW5lIEFSQ0hfSEFTX1BSRUZFVENIVworCitleHRlcm4gaW5saW5lIHZvaWQgcHJlZmV0Y2goY29uc3Qgdm9pZCAqYWRkcikKK3sKKwlfX2FzbV9fKCJsZHcgMCglMCksICUlcjAiIDogOiAiciIgKGFkZHIpKTsKK30KKworZXh0ZXJuIGlubGluZSB2b2lkIHByZWZldGNodyhjb25zdCB2b2lkICphZGRyKQoreworCV9fYXNtX18oImxkZCAwKCUwKSwgJSVyMCIgOiA6ICJyIiAoYWRkcikpOworfQorI2VuZGlmCisKKyNkZWZpbmUgY3B1X3JlbGF4KCkJYmFycmllcigpCisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworI2VuZGlmIC8qIF9fQVNNX1BBUklTQ19QUk9DRVNTT1JfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3Bzdy5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL3Bzdy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxMzIzMDIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2MvcHN3LmgKQEAgLTAsMCArMSw2MiBAQAorI2lmbmRlZiBfUEFSSVNDX1BTV19ICisjZGVmaW5lCVBTV19JCTB4MDAwMDAwMDEKKyNkZWZpbmUJUFNXX0QJMHgwMDAwMDAwMgorI2RlZmluZQlQU1dfUAkweDAwMDAwMDA0CisjZGVmaW5lCVBTV19RCTB4MDAwMDAwMDgKKworI2RlZmluZQlQU1dfUgkweDAwMDAwMDEwCisjZGVmaW5lCVBTV19GCTB4MDAwMDAwMjAKKyNkZWZpbmUJUFNXX0cJMHgwMDAwMDA0MAkvKiBQQTEueCBvbmx5ICovCisjZGVmaW5lIFBTV19PCTB4MDAwMDAwODAJLyogUEEyLjAgb25seSAqLworCisjZGVmaW5lIFBTV19DQgkweDAwMDBmZjAwCisKKyNkZWZpbmUJUFNXX00JMHgwMDAxMDAwMAorI2RlZmluZQlQU1dfVgkweDAwMDIwMDAwCisjZGVmaW5lCVBTV19DCTB4MDAwNDAwMDAKKyNkZWZpbmUJUFNXX0IJMHgwMDA4MDAwMAorCisjZGVmaW5lCVBTV19YCTB4MDAxMDAwMDAKKyNkZWZpbmUJUFNXX04JMHgwMDIwMDAwMAorI2RlZmluZQlQU1dfTAkweDAwNDAwMDAwCisjZGVmaW5lCVBTV19ICTB4MDA4MDAwMDAKKworI2RlZmluZQlQU1dfVAkweDAxMDAwMDAwCisjZGVmaW5lCVBTV19TCTB4MDIwMDAwMDAKKyNkZWZpbmUJUFNXX0UJMHgwNDAwMDAwMAorI2RlZmluZSBQU1dfVwkweDA4MDAwMDAwCS8qIFBBMi4wIG9ubHkgKi8KKyNkZWZpbmUgUFNXX1dfQklUICAgICAgIDM2ICAgICAgLyogUEEyLjAgb25seSAqLworCisjZGVmaW5lCVBTV19aCTB4NDAwMDAwMDAJLyogUEExLnggb25seSAqLworI2RlZmluZQlQU1dfWQkweDgwMDAwMDAwCS8qIFBBMS54IG9ubHkgKi8KKworI2lmZGVmIF9fTFA2NF9fCisjZGVmaW5lIFBTV19ISV9DQiAweDAwMDAwMGZmICAgIC8qIFBBMi4wIG9ubHkgKi8KKyNlbmRpZgorCisvKiBQU1cgYml0cyB0byBiZSB1c2VkIHdpdGggc3NtL3JzbSAqLworI2RlZmluZSBQU1dfU01fSSAgICAgICAgMHgxCisjZGVmaW5lIFBTV19TTV9EICAgICAgICAweDIKKyNkZWZpbmUgUFNXX1NNX1AgICAgICAgIDB4NAorI2RlZmluZSBQU1dfU01fUSAgICAgICAgMHg4CisjZGVmaW5lIFBTV19TTV9SICAgICAgICAweDEwCisjZGVmaW5lIFBTV19TTV9GICAgICAgICAweDIwCisjZGVmaW5lIFBTV19TTV9HICAgICAgICAweDQwCisjZGVmaW5lIFBTV19TTV9PICAgICAgICAweDgwCisjZGVmaW5lIFBTV19TTV9FICAgICAgICAweDEwMAorI2RlZmluZSBQU1dfU01fVyAgICAgICAgMHgyMDAKKworI2lmZGVmIF9fTFA2NF9fCisjICBkZWZpbmUgVVNFUl9QU1cgICAgICAoUFNXX0MgfCBQU1dfUSB8IFBTV19QIHwgUFNXX0QgfCBQU1dfSSkKKyMgIGRlZmluZSBLRVJORUxfUFNXICAgIChQU1dfVyB8IFBTV19DIHwgUFNXX1EgfCBQU1dfUCB8IFBTV19EKQorIyAgZGVmaW5lIFJFQUxfTU9ERV9QU1cgKFBTV19XIHwgUFNXX1EpCisjICBkZWZpbmUgVVNFUl9QU1dfTUFTSyAoUFNXX1cgfCBQU1dfVCB8IFBTV19OIHwgUFNXX1ggfCBQU1dfQiB8IFBTV19WIHwgUFNXX0NCKQorIyAgZGVmaW5lIFVTRVJfUFNXX0hJX01BU0sgKFBTV19ISV9DQikKKyNlbHNlCisjICBkZWZpbmUgVVNFUl9QU1cgICAgICAoUFNXX0MgfCBQU1dfUSB8IFBTV19QIHwgUFNXX0QgfCBQU1dfSSkKKyMgIGRlZmluZSBLRVJORUxfUFNXICAgIChQU1dfQyB8IFBTV19RIHwgUFNXX1AgfCBQU1dfRCkKKyMgIGRlZmluZSBSRUFMX01PREVfUFNXIChQU1dfUSkKKyMgIGRlZmluZSBVU0VSX1BTV19NQVNLIChQU1dfVCB8IFBTV19OIHwgUFNXX1ggfCBQU1dfQiB8IFBTV19WIHwgUFNXX0NCKQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3B0cmFjZS5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL3B0cmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmNDI4YWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2MvcHRyYWNlLmgKQEAgLTAsMCArMSw1NiBAQAorI2lmbmRlZiBfUEFSSVNDX1BUUkFDRV9ICisjZGVmaW5lIF9QQVJJU0NfUFRSQUNFX0gKKworLyogd3JpdHRlbiBieSBQaGlsaXBwIFJ1bXBmLCBDb3B5cmlnaHQgKEMpIDE5OTkgU3VTRSBHbWJIIE51ZXJuYmVyZworKiogQ29weXJpZ2h0IChDKSAyMDAwIEdyYW50IEdydW5kbGVyLCBIZXdsZXR0LVBhY2thcmQKKyovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKiBUaGlzIHN0cnVjdCBkZWZpbmVzIHRoZSB3YXkgdGhlIHJlZ2lzdGVycyBhcmUgc3RvcmVkIG9uIHRoZSAKKyAqIHN0YWNrIGR1cmluZyBhIHN5c3RlbSBjYWxsLgorICoKKyAqIE4uQi4gZ2RiL3N0cmFjZSBjYXJlIGFib3V0IHRoZSBzaXplIGFuZCBvZmZzZXRzIHdpdGhpbiB0aGlzCisgKiBzdHJ1Y3R1cmUuIElmIHlvdSBjaGFuZ2UgdGhpbmdzLCB5b3UgbWF5IGJyZWFrIG9iamVjdCBjb21wYXRpYmlsaXR5CisgKiBmb3IgdGhvc2UgYXBwbGljYXRpb25zLgorICovCisKK3N0cnVjdCBwdF9yZWdzIHsKKwl1bnNpZ25lZCBsb25nIGdyWzMyXTsJLyogUFNXIGlzIGluIGdyWzBdICovCisJX191NjQgZnJbMzJdOworCXVuc2lnbmVkIGxvbmcgc3JbIDhdOworCXVuc2lnbmVkIGxvbmcgaWFzcVsyXTsKKwl1bnNpZ25lZCBsb25nIGlhb3FbMl07CisJdW5zaWduZWQgbG9uZyBjcjI3OworCXVuc2lnbmVkIGxvbmcgcGFkMDsgICAgIC8qIGF2YWlsYWJsZSBmb3Igb3RoZXIgdXNlcyAqLworCXVuc2lnbmVkIGxvbmcgb3JpZ19yMjg7CisJdW5zaWduZWQgbG9uZyBrc3A7CisJdW5zaWduZWQgbG9uZyBrcGM7CisJdW5zaWduZWQgbG9uZyBzYXI7CS8qIENSMTEgKi8KKwl1bnNpZ25lZCBsb25nIGlpcjsJLyogQ1IxOSAqLworCXVuc2lnbmVkIGxvbmcgaXNyOwkvKiBDUjIwICovCisJdW5zaWduZWQgbG9uZyBpb3I7CS8qIENSMjEgKi8KKwl1bnNpZ25lZCBsb25nIGlwc3c7CS8qIENSMjIgKi8KK307CisKKyNkZWZpbmUgdGFza19yZWdzKHRhc2spICgoc3RydWN0IHB0X3JlZ3MgKikgKChjaGFyICopKHRhc2spICsgVEFTS19SRUdTKSkKKy8qCisgKiBUaGUgbnVtYmVycyBjaG9zZW4gaGVyZSBhcmUgc29tZXdoYXQgYXJiaXRyYXJ5IGJ1dCBhYnNvbHV0ZWx5IE1VU1QKKyAqIG5vdCBvdmVybGFwIHdpdGggYW55IG9mIHRoZSBudW1iZXIgYXNzaWduZWQgaW4gPGxpbnV4L3B0cmFjZS5oPi4KKyAqCisgKiBUaGVzZSBvbmVzIGFyZSB0YWtlbiBmcm9tIElBLTY0IG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlaXJzIGFyZQorICogdGhlIG1vc3QgY29ycmVjdCAoYW5kIHdlIGFsc28gd2FudCB0byBzdXBwb3J0IFBUUkFDRV9TSU5HTEVCTE9DSworICogc2luY2Ugd2UgaGF2ZSB0YWtlbiBicmFuY2ggdHJhcHMgdG9vKQorICovCisjZGVmaW5lIFBUUkFDRV9TSU5HTEVCTE9DSwkxMgkvKiByZXN1bWUgZXhlY3V0aW9uIHVudGlsIG5leHQgYnJhbmNoICovCisjaWZkZWYgX19LRVJORUxfXworCisvKiBYWFggc2hvdWxkIHdlIHVzZSBpYW9xWzFdIG9yIGlhb3FbMF0gPyAqLworI2RlZmluZSB1c2VyX21vZGUocmVncykJCQkoKChyZWdzKS0+aWFvcVswXSAmIDMpID8gMSA6IDApCisjZGVmaW5lIHVzZXJfc3BhY2UocmVncykJCSgoKHJlZ3MpLT5pYXNxWzFdICE9IDApID8gMSA6IDApCisjZGVmaW5lIGluc3RydWN0aW9uX3BvaW50ZXIocmVncykJKChyZWdzKS0+aWFvcVswXSAmIH4zKQorI2RlZmluZSBwcm9maWxlX3BjKHJlZ3MpIGluc3RydWN0aW9uX3BvaW50ZXIocmVncykKK2V4dGVybiB2b2lkIHNob3dfcmVncyhzdHJ1Y3QgcHRfcmVncyAqKTsKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9yZWFsLmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvcmVhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyYWNiMjUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2MvcmVhbC5oCkBAIC0wLDAgKzEsNSBAQAorI2lmbmRlZiBfUEFSSVNDX1JFQUxfSAorI2RlZmluZSBfUEFSSVNDX1JFQUxfSAorCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3Jlc291cmNlLmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvcmVzb3VyY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjA2MzQzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL3Jlc291cmNlLmgKQEAgLTAsMCArMSw3IEBACisjaWZuZGVmIF9BU01fUEFSSVNDX1JFU09VUkNFX0gKKyNkZWZpbmUgX0FTTV9QQVJJU0NfUkVTT1VSQ0VfSAorCisjZGVmaW5lIF9TVEtfTElNX01BWAkxMCAqIF9TVEtfTElNCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcmVzb3VyY2UuaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvcnRfc2lnZnJhbWUuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9ydF9zaWdmcmFtZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MjNjMDMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2MvcnRfc2lnZnJhbWUuaApAQCAtMCwwICsxLDI3IEBACisjaWZuZGVmIF9BU01fUEFSSVNDX1JUX1NJR0ZSQU1FX0gKKyNkZWZpbmUgX0FTTV9QQVJJU0NfUlRfU0lHRlJBTUVfSAorCisjaWZkZWYgQ09ORklHX0NPTVBBVAorI2luY2x1ZGUgPGFzbS9jb21wYXRfcnRfc2lnZnJhbWUuaD4KKyNlbmRpZgorCisjZGVmaW5lIFNJR1JFVFVSTl9UUkFNUCA0CisjZGVmaW5lIFNJR1JFU1RBUlRCTE9DS19UUkFNUCA1IAorI2RlZmluZSBUUkFNUF9TSVpFIChTSUdSRVRVUk5fVFJBTVAgKyBTSUdSRVNUQVJUQkxPQ0tfVFJBTVApCisKK3N0cnVjdCBydF9zaWdmcmFtZSB7CisJLyogWFhYOiBNdXN0IG1hdGNoIHRyYW1wb2xpbmUgc2l6ZSBpbiBhcmNoL3BhcmlzYy9rZXJuZWwvc2lnbmFsLmMgCisJICAgICAgICBTZWNvbmRhcnkgdG8gdGhhdCBpdCBtdXN0IHByb3RlY3QgdGhlIEVSRVNUQVJUX1JFU1RBUlRCTE9DSworCQl0cmFtcG9saW5lIHdlIGxlZnQgb24gdGhlIHN0YWNrICh3ZSB3ZXJlIGJhZCBhbmQgZGlkbid0IAorCQljaGFuZ2Ugc3Agc28gd2UgY291bGQgcnVuIHJlYWxseSBmYXN0LikgKi8KKwl1bnNpZ25lZCBpbnQgdHJhbXBbVFJBTVBfU0laRV07CisJc3RydWN0IHNpZ2luZm8gaW5mbzsKKwlzdHJ1Y3QgdWNvbnRleHQgdWM7Cit9OworCisjZGVmaW5lCVNJR0ZSQU1FCQkxMjgKKyNkZWZpbmUgRlVOQ1RJT05DQUxMRlJBTUUJOTYKKyNkZWZpbmUgUEFSSVNDX1JUX1NJR0ZSQU1FX1NJWkUJCQkJCVwKKwkoKChzaXplb2Yoc3RydWN0IHJ0X3NpZ2ZyYW1lKSArIEZVTkNUSU9OQ0FMTEZSQU1FKSArIFNJR0ZSQU1FKSAmIC1TSUdGUkFNRSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvcnRjLmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvcnRjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNkM2Q2YgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9ydGMuaApAQCAtMCwwICsxLDEzMSBAQAorLyogCisgKiBpbmNsdWUvYXNtLXBhcmlzYy9ydGMuaAorICoKKyAqIENvcHlyaWdodCAyMDAyIFJhbmRvbHBoIENIdW5nIDx0YXVzcUBkZWJpYW4ub3JnPgorICoKKyAqIEJhc2VkIG9uOiBpbmNsdWRlL2FzbS1wcGMvcnRjLmggYW5kIHRoZSBnZW5ydGMgZHJpdmVyIGluIHRoZQorICogMi40IHBhcmlzYyBsaW51eCB0cmVlCisgKi8KKworI2lmbmRlZiBfX0FTTV9SVENfSF9fCisjZGVmaW5lIF9fQVNNX1JUQ19IX18KKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgorCisjaW5jbHVkZSA8YXNtL3BkYy5oPgorCisjZGVmaW5lIFNFQ1NfUEVSX0hPVVIgICAoNjAgKiA2MCkKKyNkZWZpbmUgU0VDU19QRVJfREFZICAgIChTRUNTX1BFUl9IT1VSICogMjQpCisKKworI2RlZmluZSBSVENfUElFIDB4NDAJCS8qIHBlcmlvZGljIGludGVycnVwdCBlbmFibGUgKi8KKyNkZWZpbmUgUlRDX0FJRSAweDIwCQkvKiBhbGFybSBpbnRlcnJ1cHQgZW5hYmxlICovCisjZGVmaW5lIFJUQ19VSUUgMHgxMAkJLyogdXBkYXRlLWZpbmlzaGVkIGludGVycnVwdCBlbmFibGUgKi8KKworI2RlZmluZSBSVENfQkFUVF9CQUQgMHgxMDAJLyogYmF0dGVyeSBiYWQgKi8KKworLyogc29tZSBkdW1teSBkZWZpbml0aW9ucyAqLworI2RlZmluZSBSVENfU1FXRSAweDA4CQkvKiBlbmFibGUgc3F1YXJlLXdhdmUgb3V0cHV0ICovCisjZGVmaW5lIFJUQ19ETV9CSU5BUlkgMHgwNAkvKiBhbGwgdGltZS9kYXRlIHZhbHVlcyBhcmUgQkNEIGlmIGNsZWFyICovCisjZGVmaW5lIFJUQ18yNEggMHgwMgkJLyogMjQgaG91ciBtb2RlIC0gZWxzZSBob3VycyBiaXQgNyBtZWFucyBwbSAqLworI2RlZmluZSBSVENfRFNUX0VOIDB4MDEJICAgICAgICAvKiBhdXRvIHN3aXRjaCBEU1QgLSB3b3JrcyBmLiBVU0Egb25seSAqLworCisjIGRlZmluZSBfX2lzbGVhcCh5ZWFyKSBcCisgICgoeWVhcikgJSA0ID09IDAgJiYgKCh5ZWFyKSAlIDEwMCAhPSAwIHx8ICh5ZWFyKSAlIDQwMCA9PSAwKSkKKworLyogSG93IG1hbnkgZGF5cyBjb21lIGJlZm9yZSBlYWNoIG1vbnRoICgwLTEyKS4gICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgaW50IF9fbW9uX3lkYXlbMl1bMTNdID0KK3sKKwkvKiBOb3JtYWwgeWVhcnMuICAqLworCXsgMCwgMzEsIDU5LCA5MCwgMTIwLCAxNTEsIDE4MSwgMjEyLCAyNDMsIDI3MywgMzA0LCAzMzQsIDM2NSB9LAorCS8qIExlYXAgeWVhcnMuICAqLworCXsgMCwgMzEsIDYwLCA5MSwgMTIxLCAxNTIsIDE4MiwgMjEzLCAyNDQsIDI3NCwgMzA1LCAzMzUsIDM2NiB9Cit9OworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZXRfcnRjX3RpbWUoc3RydWN0IHJ0Y190aW1lICp3dGltZSkKK3sKKwlzdHJ1Y3QgcGRjX3RvZCB0b2RfZGF0YTsKKwlsb25nIGludCBkYXlzLCByZW0sIHk7CisJY29uc3QgdW5zaWduZWQgc2hvcnQgaW50ICppcDsKKworCWlmKHBkY190b2RfcmVhZCgmdG9kX2RhdGEpIDwgMCkKKwkJcmV0dXJuIFJUQ18yNEggfCBSVENfQkFUVF9CQUQ7CisKKworCS8vIG1vc3Qgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGlzIGZ1bmN0aW9uIGlzOgorLy8JQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkzLCAxOTk3LCAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8JVGhpcyB3YXMgb3JpZ2luYWxseSBhIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisvLyAgICAgIEl0IGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBHUEwsIGFuZCB3YXMgc3dpcGVkIGZyb20gb2ZmdGltZS5jCisKKworCWRheXMgPSB0b2RfZGF0YS50b2Rfc2VjIC8gU0VDU19QRVJfREFZOworCXJlbSA9IHRvZF9kYXRhLnRvZF9zZWMgJSBTRUNTX1BFUl9EQVk7CisKKwl3dGltZS0+dG1faG91ciA9IHJlbSAvIFNFQ1NfUEVSX0hPVVI7CisJcmVtICU9IFNFQ1NfUEVSX0hPVVI7CisJd3RpbWUtPnRtX21pbiA9IHJlbSAvIDYwOworCXd0aW1lLT50bV9zZWMgPSByZW0gJSA2MDsKKworCXkgPSAxOTcwOworCisjZGVmaW5lIERJVihhLCBiKSAoKGEpIC8gKGIpIC0gKChhKSAlIChiKSA8IDApKQorI2RlZmluZSBMRUFQU19USFJVX0VORF9PRih5KSAoRElWICh5LCA0KSAtIERJViAoeSwgMTAwKSArIERJViAoeSwgNDAwKSkKKworCXdoaWxlIChkYXlzIDwgMCB8fCBkYXlzID49IChfX2lzbGVhcCAoeSkgPyAzNjYgOiAzNjUpKQorCXsKKwkJLyogR3Vlc3MgYSBjb3JyZWN0ZWQgeWVhciwgYXNzdW1pbmcgMzY1IGRheXMgcGVyIHllYXIuICAqLworCQlsb25nIGludCB5ZyA9IHkgKyBkYXlzIC8gMzY1IC0gKGRheXMgJSAzNjUgPCAwKTsKKworCQkvKiBBZGp1c3QgREFZUyBhbmQgWSB0byBtYXRjaCB0aGUgZ3Vlc3NlZCB5ZWFyLiAgKi8KKwkJZGF5cyAtPSAoKHlnIC0geSkgKiAzNjUKKwkJCSArIExFQVBTX1RIUlVfRU5EX09GICh5ZyAtIDEpCisJCQkgLSBMRUFQU19USFJVX0VORF9PRiAoeSAtIDEpKTsKKwkJeSA9IHlnOworCX0KKwl3dGltZS0+dG1feWVhciA9IHkgLSAxOTAwOworCisJaXAgPSBfX21vbl95ZGF5W19faXNsZWFwKHkpXTsKKwlmb3IgKHkgPSAxMTsgZGF5cyA8IChsb25nIGludCkgaXBbeV07IC0teSkKKwkJY29udGludWU7CisJZGF5cyAtPSBpcFt5XTsKKwl3dGltZS0+dG1fbW9uID0geTsKKwl3dGltZS0+dG1fbWRheSA9IGRheXMgKyAxOworCisJcmV0dXJuIFJUQ18yNEg7Cit9CisKK3N0YXRpYyBpbnQgc2V0X3J0Y190aW1lKHN0cnVjdCBydGNfdGltZSAqd3RpbWUpCit7CisJdV9pbnQzMl90IHNlY3M7CisKKwlzZWNzID0gbWt0aW1lKHd0aW1lLT50bV95ZWFyICsgMTkwMCwgd3RpbWUtPnRtX21vbiArIDEsIHd0aW1lLT50bV9tZGF5LCAKKwkJICAgICAgd3RpbWUtPnRtX2hvdXIsIHd0aW1lLT50bV9taW4sIHd0aW1lLT50bV9zZWMpOworCisJaWYocGRjX3RvZF9zZXQoc2VjcywgMCkgPCAwKQorCQlyZXR1cm4gLTE7CisJZWxzZQorCQlyZXR1cm4gMDsKKworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZXRfcnRjX3NzKHZvaWQpCit7CisJc3RydWN0IHJ0Y190aW1lIGg7CisKKwlnZXRfcnRjX3RpbWUoJmgpOworCXJldHVybiBoLnRtX3NlYzsKK30KKworc3RhdGljIGlubGluZSBpbnQgZ2V0X3J0Y19wbGwoc3RydWN0IHJ0Y19wbGxfaW5mbyAqcGxsKQoreworCXJldHVybiAtRUlOVkFMOworfQorc3RhdGljIGlubGluZSBpbnQgc2V0X3J0Y19wbGwoc3RydWN0IHJ0Y19wbGxfaW5mbyAqcGxsKQoreworCXJldHVybiAtRUlOVkFMOworfQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9fQVNNX1JUQ19IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9ydW53YXkuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9ydW53YXkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmVhMDJkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL3J1bndheS5oCkBAIC0wLDAgKzEsMTIgQEAKKyNpZm5kZWYgQVNNX1BBUklTQ19SVU5XQVlfSAorI2RlZmluZSBBU01fUEFSSVNDX1JVTldBWV9ICisjaWZkZWYgX19LRVJORUxfXworCisvKiBkZWNsYXJlZCBpbiBhcmNoL3BhcmlzYy9rZXJuZWwvc2V0dXAuYyAqLworZXh0ZXJuIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqIHByb2NfcnVud2F5X3Jvb3Q7CisKKyNkZWZpbmUgUlVOV0FZX1NUQVRVUwkweDEwCisjZGVmaW5lIFJVTldBWV9ERUJVRwkweDQwCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYgLyogQVNNX1BBUklTQ19SVU5XQVlfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3NjYXR0ZXJsaXN0LmggYi9pbmNsdWRlL2FzbS1wYXJpc2Mvc2NhdHRlcmxpc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzZjMWQwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL3NjYXR0ZXJsaXN0LmgKQEAgLTAsMCArMSwyMyBAQAorI2lmbmRlZiBfQVNNX1BBUklTQ19TQ0FUVEVSTElTVF9ICisjZGVmaW5lIF9BU01fUEFSSVNDX1NDQVRURVJMSVNUX0gKKworI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisKK3N0cnVjdCBzY2F0dGVybGlzdCB7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJdW5zaWduZWQgaW50IG9mZnNldDsKKworCXVuc2lnbmVkIGludCBsZW5ndGg7CisKKwkvKiBhbiBJT1ZBIGNhbiBiZSA2NC1iaXRzIG9uIHNvbWUgUEEtUmlzYyBwbGF0Zm9ybXMuICovCisJZG1hX2FkZHJfdCBpb3ZhOwkvKiBJL08gVmlydHVhbCBBZGRyZXNzICovCisJX191MzIgICAgICBpb3ZhX2xlbmd0aDsgLyogYnl0ZXMgbWFwcGVkICovCit9OworCisjZGVmaW5lIHNnX3ZpcnRfYWRkcihzZykgKCh1bnNpZ25lZCBsb25nKShwYWdlX2FkZHJlc3Moc2ctPnBhZ2UpICsgc2ctPm9mZnNldCkpCisjZGVmaW5lIHNnX2RtYV9hZGRyZXNzKHNnKSAoKHNnKS0+aW92YSkKKyNkZWZpbmUgc2dfZG1hX2xlbihzZykgICAgICgoc2cpLT5pb3ZhX2xlbmd0aCkKKworI2RlZmluZSBJU0FfRE1BX1RIUkVTSE9MRCAofjBVTCkKKworI2VuZGlmIC8qIF9BU01fUEFSSVNDX1NDQVRURVJMSVNUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9zZWN0aW9ucy5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL3NlY3Rpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRkNDNlYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9zZWN0aW9ucy5oCkBAIC0wLDAgKzEsNyBAQAorI2lmbmRlZiBfUEFSSVNDX1NFQ1RJT05TX0gKKyNkZWZpbmUgX1BBUklTQ19TRUNUSU9OU19ICisKKy8qIG5vdGhpbmcgdG8gc2VlLCBtb3ZlIGFsb25nICovCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2VjdGlvbnMuaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2Mvc2VnbWVudC5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL3NlZ21lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjc5NGRkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL3NlZ21lbnQuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19QQVJJU0NfU0VHTUVOVF9ICisjZGVmaW5lIF9fUEFSSVNDX1NFR01FTlRfSAorCisvKiBPbmx5IGhlcmUgYmVjYXVzZSB3ZSBoYXZlIHNvbWUgb2xkIGhlYWRlciBmaWxlcyB0aGF0IGV4cGVjdCBpdC4uICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3NlbWFwaG9yZS1oZWxwZXIuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9zZW1hcGhvcmUtaGVscGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg3ZjdjMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9zZW1hcGhvcmUtaGVscGVyLmgKQEAgLTAsMCArMSw4OSBAQAorI2lmbmRlZiBfQVNNX1BBUklTQ19TRU1BUEhPUkVfSEVMUEVSX0gKKyNkZWZpbmUgX0FTTV9QQVJJU0NfU0VNQVBIT1JFX0hFTFBFUl9ICisKKy8qCisgKiBTTVAtIGFuZCBpbnRlcnJ1cHQtc2FmZSBzZW1hcGhvcmVzIGhlbHBlciBmdW5jdGlvbnMuCisgKgorICogKEMpIENvcHlyaWdodCAxOTk2IExpbnVzIFRvcnZhbGRzCisgKiAoQykgQ29weXJpZ2h0IDE5OTkgQW5kcmVhIEFyY2FuZ2VsaQorICovCisKKy8qCisgKiBUaGVzZSB0d28gX211c3RfIGV4ZWN1dGUgYXRvbWljYWxseSB3cnQgZWFjaCBvdGhlci4KKyAqCisgKiBUaGlzIGlzIHRyaXZpYWxseSBkb25lIHdpdGggbG9hZF9sb2NrZWQvc3RvcmVfY29uZCwKKyAqIHdoaWNoIHdlIGhhdmUuICBMZXQgdGhlIHJlc3Qgb2YgdGhlIGxvc2VycyBzdWNrIGVnZ3MuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgd2FrZV9vbmVfbW9yZShzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQoreworCWF0b21pY19pbmMoKGF0b21pY190ICopJnNlbS0+d2FraW5nKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IHdha2luZ19ub25femVybyhzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzZW1hcGhvcmVfd2FrZV9sb2NrLCBmbGFncyk7CisJaWYgKHNlbS0+d2FraW5nID4gMCkgeworCQlzZW0tPndha2luZy0tOworCQlyZXQgPSAxOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZW1hcGhvcmVfd2FrZV9sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIHdha2luZ19ub25femVyb19pbnRlcnJ1cHRpYmxlOgorICoJMQlnb3QgdGhlIGxvY2sKKyAqCTAJZ28gdG8gc2xlZXAKKyAqCS1FSU5UUglpbnRlcnJ1cHRlZAorICoKKyAqIFdlIG11c3QgdW5kbyB0aGUgc2VtLT5jb3VudCBkb3duX2ludGVycnVwdGlibGUoKSBpbmNyZW1lbnQgd2hpbGUgd2UgYXJlCisgKiBwcm90ZWN0ZWQgYnkgdGhlIHNwaW5sb2NrIGluIG9yZGVyIHRvIG1ha2UgYXRvbWljIHRoaXMgYXRvbWljX2luYygpIHdpdGggdGhlCisgKiBhdG9taWNfcmVhZCgpIGluIHdha2Vfb25lX21vcmUoKSwgb3RoZXJ3aXNlIHdlIGNhbiByYWNlLiAtYXJjYQorICovCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgd2FraW5nX25vbl96ZXJvX2ludGVycnVwdGlibGUoc3RydWN0IHNlbWFwaG9yZSAqc2VtLAorCQkJCQkJc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzZW1hcGhvcmVfd2FrZV9sb2NrLCBmbGFncyk7CisJaWYgKHNlbS0+d2FraW5nID4gMCkgeworCQlzZW0tPndha2luZy0tOworCQlyZXQgPSAxOworCX0gZWxzZSBpZiAoc2lnbmFsX3BlbmRpbmcodHNrKSkgeworCQlhdG9taWNfaW5jKCZzZW0tPmNvdW50KTsKKwkJcmV0ID0gLUVJTlRSOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZW1hcGhvcmVfd2FrZV9sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIHdha2luZ19ub25femVyb190cnlsb2NrOgorICoJMQlmYWlsZWQgdG8gbG9jaworICoJMAlnb3QgdGhlIGxvY2sKKyAqCisgKiBXZSBtdXN0IHVuZG8gdGhlIHNlbS0+Y291bnQgZG93bl90cnlsb2NrKCkgaW5jcmVtZW50IHdoaWxlIHdlIGFyZQorICogcHJvdGVjdGVkIGJ5IHRoZSBzcGlubG9jayBpbiBvcmRlciB0byBtYWtlIGF0b21pYyB0aGlzIGF0b21pY19pbmMoKSB3aXRoIHRoZQorICogYXRvbWljX3JlYWQoKSBpbiB3YWtlX29uZV9tb3JlKCksIG90aGVyd2lzZSB3ZSBjYW4gcmFjZS4gLWFyY2EKKyAqLworc3RhdGljIF9faW5saW5lX18gaW50IHdha2luZ19ub25femVyb190cnlsb2NrKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQgPSAxOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNlbWFwaG9yZV93YWtlX2xvY2ssIGZsYWdzKTsKKwlpZiAoc2VtLT53YWtpbmcgPD0gMCkKKwkJYXRvbWljX2luYygmc2VtLT5jb3VudCk7CisJZWxzZSB7CisJCXNlbS0+d2FraW5nLS07CisJCXJldCA9IDA7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlbWFwaG9yZV93YWtlX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmV0OworfQorCisjZW5kaWYgLyogX0FTTV9QQVJJU0NfU0VNQVBIT1JFX0hFTFBFUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2Mvc2VtYXBob3JlLmggYi9pbmNsdWRlL2FzbS1wYXJpc2Mvc2VtYXBob3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc4YmIyZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9zZW1hcGhvcmUuaApAQCAtMCwwICsxLDE0NyBAQAorLyogICAgU01QLSBhbmQgaW50ZXJydXB0LXNhZmUgc2VtYXBob3Jlcy4KKyAqICAgIFBBLVJJU0MgdmVyc2lvbiBieSBNYXR0aGV3IFdpbGNveAorICoKKyAqICAgIExpbnV4L1BBLVJJU0MgUHJvamVjdCAoaHR0cDovL3d3dy5wYXJpc2MtbGludXgub3JnLykKKyAqICAgIENvcHlyaWdodCAoQykgMTk5NiBMaW51cyBUb3J2YWxkcworICogICAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgTWF0dGhldyBXaWxjb3ggPCB3aWxseSBhdCBkZWJpYW4gZDBUIG9yZyA+CisgKiAgICBDb3B5cmlnaHQgKEMpIDIwMDAgR3JhbnQgR3J1bmRsZXIgPCBncnVuZGxlciBhIGRlYmlhbiBvcmcgPgorICoKKyAqICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaWZuZGVmIF9BU01fUEFSSVNDX1NFTUFQSE9SRV9ICisjZGVmaW5lIF9BU01fUEFSSVNDX1NFTUFQSE9SRV9ICisKKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgorCisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorCisvKgorICogVGhlIGBjb3VudCcgaXMgaW5pdGlhbGlzZWQgdG8gdGhlIG51bWJlciBvZiBwZW9wbGUgd2hvIGFyZSBhbGxvd2VkIHRvCisgKiB0YWtlIHRoZSBsb2NrLiAgKE5vcm1hbGx5IHdlIHdhbnQgYSBtdXRleCwgc28gdGhpcyBpcyBgMScpLiAgaWYKKyAqIGBjb3VudCcgaXMgcG9zaXRpdmUsIHRoZSBsb2NrIGNhbiBiZSB0YWtlbi4gIGlmIGl0J3MgMCwgbm8tb25lIGlzCisgKiB3YWl0aW5nIG9uIGl0LiAgaWYgaXQncyAtMSwgYXQgbGVhc3Qgb25lIHRhc2sgaXMgd2FpdGluZy4KKyAqLworc3RydWN0IHNlbWFwaG9yZSB7CisJc3BpbmxvY2tfdAlzZW50cnk7CisJaW50CQljb3VudDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OworfTsKKworI2RlZmluZSBfX1NFTUFQSE9SRV9JTklUSUFMSVpFUihuYW1lLCBuKQkJCQlcCit7CQkJCQkJCQkJXAorCS5zZW50cnkJCT0gU1BJTl9MT0NLX1VOTE9DS0VELAkJCQlcCisJLmNvdW50CQk9IG4sCQkJCQkJXAorCS53YWl0CQk9IF9fV0FJVF9RVUVVRV9IRUFEX0lOSVRJQUxJWkVSKChuYW1lKS53YWl0KQlcCit9CisKKyNkZWZpbmUgX19NVVRFWF9JTklUSUFMSVpFUihuYW1lKSBcCisJX19TRU1BUEhPUkVfSU5JVElBTElaRVIobmFtZSwxKQorCisjZGVmaW5lIF9fREVDTEFSRV9TRU1BUEhPUkVfR0VORVJJQyhuYW1lLGNvdW50KSBcCisJc3RydWN0IHNlbWFwaG9yZSBuYW1lID0gX19TRU1BUEhPUkVfSU5JVElBTElaRVIobmFtZSxjb3VudCkKKworI2RlZmluZSBERUNMQVJFX01VVEVYKG5hbWUpIF9fREVDTEFSRV9TRU1BUEhPUkVfR0VORVJJQyhuYW1lLDEpCisjZGVmaW5lIERFQ0xBUkVfTVVURVhfTE9DS0VEKG5hbWUpIF9fREVDTEFSRV9TRU1BUEhPUkVfR0VORVJJQyhuYW1lLDApCisKK2V4dGVybiBpbmxpbmUgdm9pZCBzZW1hX2luaXQgKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSwgaW50IHZhbCkKK3sKKwkqc2VtID0gKHN0cnVjdCBzZW1hcGhvcmUpX19TRU1BUEhPUkVfSU5JVElBTElaRVIoKCpzZW0pLHZhbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbml0X01VVEVYIChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCit7CisJc2VtYV9pbml0KHNlbSwgMSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbml0X01VVEVYX0xPQ0tFRCAoc3RydWN0IHNlbWFwaG9yZSAqc2VtKQoreworCXNlbWFfaW5pdChzZW0sIDApOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZW1fZ2V0Y291bnQoc3RydWN0IHNlbWFwaG9yZSAqc2VtKQoreworCXJldHVybiBzZW0tPmNvdW50OworfQorCithc21saW5rYWdlIHZvaWQgX19kb3duKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pOworYXNtbGlua2FnZSBpbnQgIF9fZG93bl9pbnRlcnJ1cHRpYmxlKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pOworYXNtbGlua2FnZSB2b2lkIF9fdXAoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSk7CisKKy8qIFNlbWFwaG9yZXMgY2FuIGJlIGB0cmllZCcgZnJvbSBpcnEgY29udGV4dC4gIFNvIHdlIGhhdmUgdG8gZGlzYWJsZQorICogaW50ZXJydXB0cyB3aGlsZSB3ZSdyZSBtZXNzaW5nIHdpdGggdGhlIHNlbWFwaG9yZS4gIFNvcnJ5LgorICovCisKK2V4dGVybiBfX2lubGluZV9fIHZvaWQgZG93bihzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQoreworCW1pZ2h0X3NsZWVwKCk7CisJc3Bpbl9sb2NrX2lycSgmc2VtLT5zZW50cnkpOworCWlmIChzZW0tPmNvdW50ID4gMCkgeworCQlzZW0tPmNvdW50LS07CisJfSBlbHNlIHsKKwkJX19kb3duKHNlbSk7CisJfQorCXNwaW5fdW5sb2NrX2lycSgmc2VtLT5zZW50cnkpOworfQorCitleHRlcm4gX19pbmxpbmVfXyBpbnQgZG93bl9pbnRlcnJ1cHRpYmxlKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCit7CisJaW50IHJldCA9IDA7CisJbWlnaHRfc2xlZXAoKTsKKwlzcGluX2xvY2tfaXJxKCZzZW0tPnNlbnRyeSk7CisJaWYgKHNlbS0+Y291bnQgPiAwKSB7CisJCXNlbS0+Y291bnQtLTsKKwl9IGVsc2UgeworCQlyZXQgPSBfX2Rvd25faW50ZXJydXB0aWJsZShzZW0pOworCX0KKwlzcGluX3VubG9ja19pcnEoJnNlbS0+c2VudHJ5KTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogZG93bl90cnlsb2NrIHJldHVybnMgMCBvbiBzdWNjZXNzLCAxIGlmIHdlIGZhaWxlZCB0byBnZXQgdGhlIGxvY2suCisgKiBNYXkgbm90IHNsZWVwLCBidXQgbXVzdCBwcmVzZXJ2ZSBpcnEgc3RhdGUKKyAqLworZXh0ZXJuIF9faW5saW5lX18gaW50IGRvd25fdHJ5bG9jayhzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQoreworCWludCBmbGFncywgY291bnQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2VtLT5zZW50cnksIGZsYWdzKTsKKwljb3VudCA9IHNlbS0+Y291bnQgLSAxOworCWlmIChjb3VudCA+PSAwKQorCQlzZW0tPmNvdW50ID0gY291bnQ7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VtLT5zZW50cnksIGZsYWdzKTsKKwlyZXR1cm4gKGNvdW50IDwgMCk7Cit9CisKKy8qCisgKiBOb3RlISBUaGlzIGlzIHN1YnRsZS4gV2UganVtcCB0byB3YWtlIHBlb3BsZSB1cCBvbmx5IGlmCisgKiB0aGUgc2VtYXBob3JlIHdhcyBuZWdhdGl2ZSAoPT0gc29tZWJvZHkgd2FzIHdhaXRpbmcgb24gaXQpLgorICovCitleHRlcm4gX19pbmxpbmVfXyB2b2lkIHVwKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCit7CisJaW50IGZsYWdzOworCXNwaW5fbG9ja19pcnFzYXZlKCZzZW0tPnNlbnRyeSwgZmxhZ3MpOworCWlmIChzZW0tPmNvdW50IDwgMCkgeworCQlfX3VwKHNlbSk7CisJfSBlbHNlIHsKKwkJc2VtLT5jb3VudCsrOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZW0tPnNlbnRyeSwgZmxhZ3MpOworfQorCisjZW5kaWYgLyogX0FTTV9QQVJJU0NfU0VNQVBIT1JFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9zZW1idWYuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9zZW1idWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDgzMzY4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL3NlbWJ1Zi5oCkBAIC0wLDAgKzEsMjkgQEAKKyNpZm5kZWYgX1BBUklTQ19TRU1CVUZfSAorI2RlZmluZSBfUEFSSVNDX1NFTUJVRl9ICisKKy8qIAorICogVGhlIHNlbWlkNjRfZHMgc3RydWN0dXJlIGZvciBwYXJpc2MgYXJjaGl0ZWN0dXJlLgorICogTm90ZSBleHRyYSBwYWRkaW5nIGJlY2F1c2UgdGhpcyBzdHJ1Y3R1cmUgaXMgcGFzc2VkIGJhY2sgYW5kIGZvcnRoCisgKiBiZXR3ZWVuIGtlcm5lbCBhbmQgdXNlciBzcGFjZS4KKyAqCisgKiBQYWQgc3BhY2UgaXMgbGVmdCBmb3I6CisgKiAtIDY0LWJpdCB0aW1lX3QgdG8gc29sdmUgeTIwMzggcHJvYmxlbQorICogLSAyIG1pc2NlbGxhbmVvdXMgMzItYml0IHZhbHVlcworICovCisKK3N0cnVjdCBzZW1pZDY0X2RzIHsKKwlzdHJ1Y3QgaXBjNjRfcGVybSBzZW1fcGVybTsJCS8qIHBlcm1pc3Npb25zIC4uIHNlZSBpcGMuaCAqLworI2lmbmRlZiBfX0xQNjRfXworCXVuc2lnbmVkIGludAlfX3BhZDE7CisjZW5kaWYKKwlfX2tlcm5lbF90aW1lX3QJc2VtX290aW1lOwkJLyogbGFzdCBzZW1vcCB0aW1lICovCisjaWZuZGVmIF9fTFA2NF9fCisJdW5zaWduZWQgaW50CV9fcGFkMjsKKyNlbmRpZgorCV9fa2VybmVsX3RpbWVfdAlzZW1fY3RpbWU7CQkvKiBsYXN0IGNoYW5nZSB0aW1lICovCisJdW5zaWduZWQgaW50CXNlbV9uc2VtczsJCS8qIG5vLiBvZiBzZW1hcGhvcmVzIGluIGFycmF5ICovCisJdW5zaWduZWQgaW50CV9fdW51c2VkMTsKKwl1bnNpZ25lZCBpbnQJX191bnVzZWQyOworfTsKKworI2VuZGlmIC8qIF9QQVJJU0NfU0VNQlVGX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9zZXJpYWwuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9zZXJpYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzljNWRjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL3NlcmlhbC5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1wYXJpc2Mvc2VyaWFsLmgKKyAqLworCisvKgorICogVGhpcyBhc3N1bWVzIHlvdSBoYXZlIGEgNy4yNzI3MjcgTUh6IGNsb2NrIGZvciB5b3VyIFVBUlQuCisgKiBUaGUgZG9jdW1lbnRhdGlvbiBpbXBsaWVzIGEgNDBNaHogY2xvY2ssIGFuZCBlbHNld2hlcmUgYSA3TWh6IGNsb2NrCisgKiBDbGFyaWZpZWQ6IDcuMjcyN01IeiBvbiBMQVNJLiBOb3QgeWV0IGNsYXJpZmllZCBmb3IgRElOTworICovCisKKyNkZWZpbmUgTEFTSV9CQVNFX0JBVUQgKCA3MjcyNzI3IC8gMTYgKQorI2RlZmluZSBCQVNFX0JBVUQgIExBU0lfQkFTRV9CQVVECisKKy8qCisgKiBXZSBkb24ndCB1c2UgdGhlIElTQSBwcm9iaW5nIGNvZGUsIHNvIHRoZXNlIGVudHJpZXMgYXJlIGp1c3QgdG8gcmVzZXJ2ZQorICogc3BhY2UuICBTb21lIGV4YW1wbGUgKG1heGltYWwpIGNvbmZpZ3VyYXRpb25zOgorICogLSA3MTIgdy8gYWRkaXRpb25hbCBMYXNpICYgUkoxNiBwb3J0czogNAorICogLSBKNWsgdy8gUENJIHNlcmlhbCBjYXJkczogMiArIDQgKiBjYXJkIH49IDM0CisgKiBBNTAwIHcvIFBDSSBzZXJpYWwgY2FyZHM6IDUgKyA0ICogY2FyZCB+PSAxNworICovCisgCisjZGVmaW5lIFNURF9TRVJJQUxfUE9SVF9ERUZOUwkJCVwKKwl7IDAsIH0sCQkvKiB0dHlTMCAqLwlcCisJeyAwLCB9LAkJLyogdHR5UzEgKi8JXAorCXsgMCwgfSwJCS8qIHR0eVMyICovCVwKKwl7IDAsIH0sCQkvKiB0dHlTMyAqLwlcCisJeyAwLCB9LAkJLyogdHR5UzQgKi8JXAorCXsgMCwgfSwJCS8qIHR0eVM1ICovCVwKKwl7IDAsIH0sCQkvKiB0dHlTNiAqLwlcCisJeyAwLCB9LAkJLyogdHR5UzcgKi8JXAorCXsgMCwgfSwJCS8qIHR0eVM4ICovCisKKworI2RlZmluZSBTRVJJQUxfUE9SVF9ERk5TCQlcCisJU1REX1NFUklBTF9QT1JUX0RFRk5TCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9zZXR1cC5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL3NldHVwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RhMmU1YgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9zZXR1cC5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfUEFSSVNDX1NFVFVQX0gKKyNkZWZpbmUgX1BBUklTQ19TRVRVUF9ICisKKyNkZWZpbmUgQ09NTUFORF9MSU5FX1NJWkUJMTAyNAorCisjZW5kaWYgLyogX1BBUklTQ19TRVRVUF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2Mvc2htYnVmLmggYi9pbmNsdWRlL2FzbS1wYXJpc2Mvc2htYnVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjIzYjZjMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9zaG1idWYuaApAQCAtMCwwICsxLDU4IEBACisjaWZuZGVmIF9QQVJJU0NfU0hNQlVGX0gKKyNkZWZpbmUgX1BBUklTQ19TSE1CVUZfSAorCisvKiAKKyAqIFRoZSBzaG1pZDY0X2RzIHN0cnVjdHVyZSBmb3IgcGFyaXNjIGFyY2hpdGVjdHVyZS4KKyAqIE5vdGUgZXh0cmEgcGFkZGluZyBiZWNhdXNlIHRoaXMgc3RydWN0dXJlIGlzIHBhc3NlZCBiYWNrIGFuZCBmb3J0aAorICogYmV0d2VlbiBrZXJuZWwgYW5kIHVzZXIgc3BhY2UuCisgKgorICogUGFkIHNwYWNlIGlzIGxlZnQgZm9yOgorICogLSA2NC1iaXQgdGltZV90IHRvIHNvbHZlIHkyMDM4IHByb2JsZW0KKyAqIC0gMiBtaXNjZWxsYW5lb3VzIDMyLWJpdCB2YWx1ZXMKKyAqLworCitzdHJ1Y3Qgc2htaWQ2NF9kcyB7CisJc3RydWN0IGlwYzY0X3Blcm0Jc2htX3Blcm07CS8qIG9wZXJhdGlvbiBwZXJtcyAqLworI2lmbmRlZiBfX0xQNjRfXworCXVuc2lnbmVkIGludAkJX19wYWQxOworI2VuZGlmCisJX19rZXJuZWxfdGltZV90CQlzaG1fYXRpbWU7CS8qIGxhc3QgYXR0YWNoIHRpbWUgKi8KKyNpZm5kZWYgX19MUDY0X18KKwl1bnNpZ25lZCBpbnQJCV9fcGFkMjsKKyNlbmRpZgorCV9fa2VybmVsX3RpbWVfdAkJc2htX2R0aW1lOwkvKiBsYXN0IGRldGFjaCB0aW1lICovCisjaWZuZGVmIF9fTFA2NF9fCisJdW5zaWduZWQgaW50CQlfX3BhZDM7CisjZW5kaWYKKwlfX2tlcm5lbF90aW1lX3QJCXNobV9jdGltZTsJLyogbGFzdCBjaGFuZ2UgdGltZSAqLworI2lmbmRlZiBfX0xQNjRfXworCXVuc2lnbmVkIGludAkJX19wYWQ0OworI2VuZGlmCisJc2l6ZV90CQkJc2htX3NlZ3N6OwkvKiBzaXplIG9mIHNlZ21lbnQgKGJ5dGVzKSAqLworCV9fa2VybmVsX3BpZF90CQlzaG1fY3BpZDsJLyogcGlkIG9mIGNyZWF0b3IgKi8KKwlfX2tlcm5lbF9waWRfdAkJc2htX2xwaWQ7CS8qIHBpZCBvZiBsYXN0IG9wZXJhdG9yICovCisJdW5zaWduZWQgaW50CQlzaG1fbmF0dGNoOwkvKiBuby4gb2YgY3VycmVudCBhdHRhY2hlcyAqLworCXVuc2lnbmVkIGludAkJX191bnVzZWQxOworCXVuc2lnbmVkIGludAkJX191bnVzZWQyOworfTsKKworI2lmZGVmIF9fTFA2NF9fCisvKiBUaGUgJ3Vuc2lnbmVkIGludCcgKGZvcm1lcmx5ICd1bnNpZ25lZCBsb25nJykgZGF0YSB0eXBlcyBiZWxvdyB3aWxsCisgKiBlbnN1cmUgdGhhdCBhIDMyLWJpdCBhcHAgY2FsbGluZyBzaG1jdGwoKixJUENfSU5GTywqKSB3aWxsIHdvcmsgb24KKyAqIGEgd2lkZSBrZXJuZWwsIGJ1dCBpZiBzb21lIG9mIHRoZXNlIHZhbHVlcyBhcmUgbWVhbnQgdG8gY29udGFpbiBwb2ludGVycworICogdGhleSBtYXkgbmVlZCB0byBiZSAnbG9uZyBsb25nJyBpbnN0ZWFkLiAtUEIgWFhYIEZJWE1FCisgKi8KKyNlbmRpZgorc3RydWN0IHNobWluZm82NCB7CisJdW5zaWduZWQgaW50CXNobW1heDsKKwl1bnNpZ25lZCBpbnQJc2htbWluOworCXVuc2lnbmVkIGludAlzaG1tbmk7CisJdW5zaWduZWQgaW50CXNobXNlZzsKKwl1bnNpZ25lZCBpbnQJc2htYWxsOworCXVuc2lnbmVkIGludAlfX3VudXNlZDE7CisJdW5zaWduZWQgaW50CV9fdW51c2VkMjsKKwl1bnNpZ25lZCBpbnQJX191bnVzZWQzOworCXVuc2lnbmVkIGludAlfX3VudXNlZDQ7Cit9OworCisjZW5kaWYgLyogX1BBUklTQ19TSE1CVUZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3NobXBhcmFtLmggYi9pbmNsdWRlL2FzbS1wYXJpc2Mvc2htcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjhkZGMyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL3NobXBhcmFtLmgKQEAgLTAsMCArMSw4IEBACisjaWZuZGVmIF9BU01QQVJJU0NfU0hNUEFSQU1fSAorI2RlZmluZSBfQVNNUEFSSVNDX1NITVBBUkFNX0gKKworI2RlZmluZSBfX0FSQ0hfRk9SQ0VfU0hNTEJBIAkxCisKKyNkZWZpbmUgU0hNTEJBIDB4MDA0MDAwMDAgICAvKiBhdHRhY2ggYWRkciBuZWVkcyB0byBiZSA0IE1iIGFsaWduZWQgKi8KKworI2VuZGlmIC8qIF9BU01QQVJJU0NfU0hNUEFSQU1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3NpZ2NvbnRleHQuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9zaWdjb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdlZjMxYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9zaWdjb250ZXh0LmgKQEAgLTAsMCArMSwyMCBAQAorI2lmbmRlZiBfQVNNUEFSSVNDX1NJR0NPTlRFWFRfSAorI2RlZmluZSBfQVNNUEFSSVNDX1NJR0NPTlRFWFRfSAorCisjZGVmaW5lIFBBUklTQ19TQ19GTEFHX09OU1RBQ0sgMTw8MAorI2RlZmluZSBQQVJJU0NfU0NfRkxBR19JTl9TWVNDQUxMIDE8PDEKKworLyogV2Ugd2lsbCBhZGQgbW9yZSBzdHVmZiBoZXJlIGFzIGl0IGJlY29tZXMgbmVjZXNzYXJ5LCB1bnRpbCB3ZSBrbm93CisgICBpdCB3b3Jrcy4gKi8KK3N0cnVjdCBzaWdjb250ZXh0IHsKKwl1bnNpZ25lZCBsb25nIHNjX2ZsYWdzOworCisJdW5zaWduZWQgbG9uZyBzY19nclszMl07IC8qIFBTVyBpbiBzY19nclswXSAqLworCXVuc2lnbmVkIGxvbmcgbG9uZyBzY19mclszMl07IC8qIEZJWE1FLCBkbyB3ZSBuZWVkIG90aGVyIHN0YXRlIGluZm8/ICovCisJdW5zaWduZWQgbG9uZyBzY19pYXNxWzJdOworCXVuc2lnbmVkIGxvbmcgc2NfaWFvcVsyXTsKKwl1bnNpZ25lZCBsb25nIHNjX3NhcjsgLyogY3IxMSAqLworfTsKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9zaWdpbmZvLmggYi9pbmNsdWRlL2FzbS1wYXJpc2Mvc2lnaW5mby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0OTA5ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2Mvc2lnaW5mby5oCkBAIC0wLDAgKzEsMTQgQEAKKyNpZm5kZWYgX1BBUklTQ19TSUdJTkZPX0gKKyNkZWZpbmUgX1BBUklTQ19TSUdJTkZPX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NpZ2luZm8uaD4KKworLyoKKyAqIFNJR1RSQVAgc2lfY29kZXMKKyAqLworI2RlZmluZSBUUkFQX0JSQU5DSAkoX19TSV9GQVVMVHwzKQkvKiBwcm9jZXNzIHRha2VuIGJyYW5jaCB0cmFwICovCisjZGVmaW5lIFRSQVBfSFdCS1BUCShfX1NJX0ZBVUxUfDQpCS8qIGhhcmR3YXJlIGJyZWFrcG9pbnQgb3Igd2F0Y2hwb2ludCAqLworI3VuZGVmIE5TSUdUUkFQCisjZGVmaW5lIE5TSUdUUkFQCTQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2Mvc2lnbmFsLmggYi9pbmNsdWRlL2FzbS1wYXJpc2Mvc2lnbmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU4ZjU3NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9zaWduYWwuaApAQCAtMCwwICsxLDE2NiBAQAorI2lmbmRlZiBfQVNNX1BBUklTQ19TSUdOQUxfSAorI2RlZmluZSBfQVNNX1BBUklTQ19TSUdOQUxfSAorCisjZGVmaW5lIFNJR0hVUAkJIDEKKyNkZWZpbmUgU0lHSU5UCQkgMgorI2RlZmluZSBTSUdRVUlUCQkgMworI2RlZmluZSBTSUdJTEwJCSA0CisjZGVmaW5lIFNJR1RSQVAJCSA1CisjZGVmaW5lIFNJR0FCUlQJCSA2CisjZGVmaW5lIFNJR0lPVAkJIDYKKyNkZWZpbmUgU0lHRU1UCQkgNworI2RlZmluZSBTSUdGUEUJCSA4CisjZGVmaW5lIFNJR0tJTEwJCSA5CisjZGVmaW5lIFNJR0JVUwkJMTAKKyNkZWZpbmUgU0lHU0VHVgkJMTEKKyNkZWZpbmUgU0lHU1lTCQkxMiAvKiBMaW51eCBkb2Vzbid0IHVzZSB0aGlzICovCisjZGVmaW5lIFNJR1BJUEUJCTEzCisjZGVmaW5lIFNJR0FMUk0JCTE0CisjZGVmaW5lIFNJR1RFUk0JCTE1CisjZGVmaW5lIFNJR1VTUjEJCTE2CisjZGVmaW5lIFNJR1VTUjIJCTE3CisjZGVmaW5lIFNJR0NITEQJCTE4CisjZGVmaW5lIFNJR1BXUgkJMTkKKyNkZWZpbmUgU0lHVlRBTFJNCTIwCisjZGVmaW5lIFNJR1BST0YJCTIxCisjZGVmaW5lIFNJR0lPCQkyMgorI2RlZmluZSBTSUdQT0xMCQlTSUdJTworI2RlZmluZSBTSUdXSU5DSAkyMworI2RlZmluZSBTSUdTVE9QCQkyNAorI2RlZmluZSBTSUdUU1RQCQkyNQorI2RlZmluZSBTSUdDT05UCQkyNgorI2RlZmluZSBTSUdUVElOCQkyNworI2RlZmluZSBTSUdUVE9VCQkyOAorI2RlZmluZSBTSUdVUkcJCTI5CisjZGVmaW5lIFNJR0xPU1QJCTMwIC8qIExpbnV4IGRvZXNuJ3QgdXNlIHRoaXMgZWl0aGVyICovCisjZGVmaW5lCVNJR1VOVVNFRAkzMQorI2RlZmluZSBTSUdSRVNFUlZFCVNJR1VOVVNFRAorCisjZGVmaW5lIFNJR1hDUFUJCTMzCisjZGVmaW5lIFNJR1hGU1oJCTM0CisjZGVmaW5lIFNJR1NUS0ZMVAkzNgorCisvKiBUaGVzZSBzaG91bGQgbm90IGJlIGNvbnNpZGVyZWQgY29uc3RhbnRzIGZyb20gdXNlcmxhbmQuICAqLworI2RlZmluZSBTSUdSVE1JTgkzNworI2RlZmluZSBTSUdSVE1BWAlfTlNJRyAvKiBpdCdzIDQ0IHVuZGVyIEhQL1VYICovCisKKy8qCisgKiBTQV9GTEFHUyB2YWx1ZXM6CisgKgorICogU0FfT05TVEFDSyBpbmRpY2F0ZXMgdGhhdCBhIHJlZ2lzdGVyZWQgc3RhY2tfdCB3aWxsIGJlIHVzZWQuCisgKiBTQV9JTlRFUlJVUFQgaXMgYSBuby1vcCwgYnV0IGxlZnQgZHVlIHRvIGhpc3RvcmljYWwgcmVhc29ucy4gVXNlIHRoZQorICogU0FfUkVTVEFSVCBmbGFnIHRvIGdldCByZXN0YXJ0aW5nIHNpZ25hbHMgKHdoaWNoIHdlcmUgdGhlIGRlZmF1bHQgbG9uZyBhZ28pCisgKiBTQV9OT0NMRFNUT1AgZmxhZyB0byB0dXJuIG9mZiBTSUdDSExEIHdoZW4gY2hpbGRyZW4gc3RvcC4KKyAqIFNBX1JFU0VUSEFORCBjbGVhcnMgdGhlIGhhbmRsZXIgd2hlbiB0aGUgc2lnbmFsIGlzIGRlbGl2ZXJlZC4KKyAqIFNBX05PQ0xEV0FJVCBmbGFnIG9uIFNJR0NITEQgdG8gaW5oaWJpdCB6b21iaWVzLgorICogU0FfTk9ERUZFUiBwcmV2ZW50cyB0aGUgY3VycmVudCBzaWduYWwgZnJvbSBiZWluZyBtYXNrZWQgaW4gdGhlIGhhbmRsZXIuCisgKgorICogU0FfT05FU0hPVCBhbmQgU0FfTk9NQVNLIGFyZSB0aGUgaGlzdG9yaWNhbCBMaW51eCBuYW1lcyBmb3IgdGhlIFNpbmdsZQorICogVW5peCBuYW1lcyBSRVNFVEhBTkQgYW5kIE5PREVGRVIgcmVzcGVjdGl2ZWx5LgorICovCisjZGVmaW5lIFNBX09OU1RBQ0sJMHgwMDAwMDAwMQorI2RlZmluZSBTQV9SRVNFVEhBTkQJMHgwMDAwMDAwNAorI2RlZmluZSBTQV9OT0NMRFNUT1AJMHgwMDAwMDAwOAorI2RlZmluZSBTQV9TSUdJTkZPCTB4MDAwMDAwMTAKKyNkZWZpbmUgU0FfTk9ERUZFUgkweDAwMDAwMDIwCisjZGVmaW5lIFNBX1JFU1RBUlQJMHgwMDAwMDA0MAorI2RlZmluZSBTQV9OT0NMRFdBSVQJMHgwMDAwMDA4MAorI2RlZmluZSBfU0FfU0lHR0ZBVUxUCTB4MDAwMDAxMDAgLyogSFBVWCAqLworCisjZGVmaW5lIFNBX05PTUFTSwlTQV9OT0RFRkVSCisjZGVmaW5lIFNBX09ORVNIT1QJU0FfUkVTRVRIQU5ECisjZGVmaW5lIFNBX0lOVEVSUlVQVAkweDIwMDAwMDAwIC8qIGR1bW15IC0tIGlnbm9yZWQgKi8KKworI2RlZmluZSBTQV9SRVNUT1JFUgkweDA0MDAwMDAwIC8qIG9ic29sZXRlIC0tIGlnbm9yZWQgKi8KKworLyogCisgKiBzaWdhbHRzdGFjayBjb250cm9scworICovCisjZGVmaW5lIFNTX09OU1RBQ0sJMQorI2RlZmluZSBTU19ESVNBQkxFCTIKKworI2RlZmluZSBNSU5TSUdTVEtTWgkyMDQ4CisjZGVmaW5lIFNJR1NUS1NaCTgxOTIKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2RlZmluZSBfTlNJRwkJNjQKKy8qIGJpdHMtcGVyLXdvcmQsIHdoZXJlIHdvcmQgYXBwYXJlbnRseSBtZWFucyAnbG9uZycgbm90ICdpbnQnICovCisjZGVmaW5lIF9OU0lHX0JQVwlCSVRTX1BFUl9MT05HCisjZGVmaW5lIF9OU0lHX1dPUkRTCShfTlNJRyAvIF9OU0lHX0JQVykKKworLyoKKyAqIFRoZXNlIHZhbHVlcyBvZiBzYV9mbGFncyBhcmUgdXNlZCBvbmx5IGJ5IHRoZSBrZXJuZWwgYXMgcGFydCBvZiB0aGUKKyAqIGlycSBoYW5kbGluZyByb3V0aW5lcy4KKyAqCisgKiBTQV9JTlRFUlJVUFQgaXMgYWxzbyB1c2VkIGJ5IHRoZSBpcnEgaGFuZGxpbmcgcm91dGluZXMuCisgKiBTQV9TSElSUSBpcyBmb3Igc2hhcmVkIGludGVycnVwdCBzdXBwb3J0IG9uIFBDSSBhbmQgRUlTQS4KKyAqLworI2RlZmluZSBTQV9QUk9CRQkJU0FfT05FU0hPVAorI2RlZmluZSBTQV9TQU1QTEVfUkFORE9NCVNBX1JFU1RBUlQKKyNkZWZpbmUgU0FfU0hJUlEJCTB4MDQwMDAwMDAKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2RlZmluZSBTSUdfQkxPQ0sgICAgICAgICAgMAkvKiBmb3IgYmxvY2tpbmcgc2lnbmFscyAqLworI2RlZmluZSBTSUdfVU5CTE9DSyAgICAgICAgMQkvKiBmb3IgdW5ibG9ja2luZyBzaWduYWxzICovCisjZGVmaW5lIFNJR19TRVRNQVNLICAgICAgICAyCS8qIGZvciBzZXR0aW5nIHRoZSBzaWduYWwgbWFzayAqLworCisjZGVmaW5lIFNJR19ERkwJKChfX3NpZ2hhbmRsZXJfdCkwKQkvKiBkZWZhdWx0IHNpZ25hbCBoYW5kbGluZyAqLworI2RlZmluZSBTSUdfSUdOCSgoX19zaWdoYW5kbGVyX3QpMSkJLyogaWdub3JlIHNpZ25hbCAqLworI2RlZmluZSBTSUdfRVJSCSgoX19zaWdoYW5kbGVyX3QpLTEpCS8qIGVycm9yIHJldHVybiBmcm9tIHNpZ25hbCAqLworCisjIGlmbmRlZiBfX0FTU0VNQkxZX18KKworIyAgaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyogQXZvaWQgdG9vIG1hbnkgaGVhZGVyIG9yZGVyaW5nIHByb2JsZW1zLiAgKi8KK3N0cnVjdCBzaWdpbmZvOworCisvKiBUeXBlIG9mIGEgc2lnbmFsIGhhbmRsZXIuICAqLworI2lmZGVmIF9fTFA2NF9fCisvKiBmdW5jdGlvbiBwb2ludGVycyBvbiA2NC1iaXQgcGFyaXNjIGFyZSBwb2ludGVycyB0byBsaXR0bGUgc3RydWN0cyBhbmQgdGhlCisgKiBjb21waWxlciBkb2Vzbid0IHN1cHBvcnQgY29kZSB3aGljaCBjaGFuZ2VzIG9yIHRlc3RzIHRoZSBhZGRyZXNzIG9mCisgKiB0aGUgZnVuY3Rpb24gaW4gdGhlIGxpdHRsZSBzdHJ1Y3QuICBUaGlzIGlzIHJlYWxseSB1Z2x5IC1QQgorICovCit0eXBlZGVmIGNoYXIgX191c2VyICpfX3NpZ2hhbmRsZXJfdDsKKyNlbHNlCit0eXBlZGVmIHZvaWQgX19zaWduYWxmbl90KGludCk7Cit0eXBlZGVmIF9fc2lnbmFsZm5fdCBfX3VzZXIgKl9fc2lnaGFuZGxlcl90OworI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IHNpZ2FsdHN0YWNrIHsKKwl2b2lkIF9fdXNlciAqc3Nfc3A7CisJaW50IHNzX2ZsYWdzOworCXNpemVfdCBzc19zaXplOworfSBzdGFja190OworCisjaWZkZWYgX19LRVJORUxfXworCisvKiBNb3N0IHRoaW5ncyBzaG91bGQgYmUgY2xlYW4gZW5vdWdoIHRvIHJlZGVmaW5lIHRoaXMgYXQgd2lsbCwgaWYgY2FyZQorICAgaXMgdGFrZW4gdG8gbWFrZSBsaWJjIG1hdGNoLiAgKi8KKwordHlwZWRlZiB1bnNpZ25lZCBsb25nIG9sZF9zaWdzZXRfdDsJCS8qIGF0IGxlYXN0IDMyIGJpdHMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworCS8qIG5leHRfc2lnbmFsKCkgYXNzdW1lcyB0aGlzIGlzIGEgbG9uZyAtIG5vIGNob2ljZSAqLworCXVuc2lnbmVkIGxvbmcgc2lnW19OU0lHX1dPUkRTXTsKK30gc2lnc2V0X3Q7CisKK3N0cnVjdCBzaWdhY3Rpb24geworCV9fc2lnaGFuZGxlcl90IHNhX2hhbmRsZXI7CisJdW5zaWduZWQgbG9uZyBzYV9mbGFnczsKKwlzaWdzZXRfdCBzYV9tYXNrOwkJLyogbWFzayBsYXN0IGZvciBleHRlbnNpYmlsaXR5ICovCit9OworCitzdHJ1Y3Qga19zaWdhY3Rpb24geworCXN0cnVjdCBzaWdhY3Rpb24gc2E7Cit9OworCisjZGVmaW5lIHB0cmFjZV9zaWduYWxfZGVsaXZlcihyZWdzLCBjb29raWUpIGRvIHsgfSB3aGlsZSAoMCkKKworI2luY2x1ZGUgPGFzbS9zaWdjb250ZXh0Lmg+CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYgLyogIV9fQVNTRU1CTFkgKi8KKyNlbmRpZiAvKiBfQVNNX1BBUklTQ19TSUdOQUxfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3NtcC5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL3NtcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkZTc3YWMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2Mvc21wLmgKQEAgLTAsMCArMSw2OSBAQAorI2lmbmRlZiBfX0FTTV9TTVBfSAorI2RlZmluZSBfX0FTTV9TTVBfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpZiBkZWZpbmVkKENPTkZJR19TTVApCisKKy8qIFBhZ2UgWmVybyBMb2NhdGlvbiBQREMgd2lsbCBsb29rIGZvciB0aGUgYWRkcmVzcyB0byBicmFuY2ggdG8gd2hlbiB3ZSBwb2tlCisqKiBzbGF2ZSBDUFVzIHN0aWxsIGluICJJY2FjaGUgbG9vcCIuCisqLworI2RlZmluZSBQRENfT1NfQk9PVF9SRU5ERVpWT1VTICAgICAweDEwCisjZGVmaW5lIFBEQ19PU19CT09UX1JFTkRFWlZPVVNfSEkgIDB4MjgKKworI2lmbmRlZiBBU1NFTUJMWQorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4JLyogZm9yIE5SX0NQVVMgKi8KKyNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgYWRkcmVzc190OworCitleHRlcm4gY3B1bWFza190IGNwdV9vbmxpbmVfbWFwOworCisKKy8qCisgKglQcml2YXRlIHJvdXRpbmVzL2RhdGEKKyAqCisgKglwaHlzaWNhbCBhbmQgbG9naWNhbCBhcmUgZXF1aXZhbGVudCB1bnRpbCB3ZSBzdXBwb3J0IENQVSBob3RwbHVnLgorICovCisjZGVmaW5lIGNwdV9udW1iZXJfbWFwKGNwdSkJKGNwdSkKKyNkZWZpbmUgY3B1X2xvZ2ljYWxfbWFwKGNwdSkJKGNwdSkKKworZXh0ZXJuIHZvaWQgc21wX3NlbmRfcmVzY2hlZHVsZShpbnQgY3B1KTsKKworI2VuZGlmIC8qICFBU1NFTUJMWSAqLworCisvKgorICoJVGhpcyBtYWdpYyBjb25zdGFudCBjb250cm9scyBvdXIgd2lsbGluZ25lc3MgdG8gdHJhbnNmZXIKKyAqICAgICAgYSBwcm9jZXNzIGFjcm9zcyBDUFVzLiBTdWNoIGEgdHJhbnNmZXIgaW5jdXJzIGNhY2hlIGFuZCB0bGIKKyAqICAgICAgbWlzc2VzLiBUaGUgY3VycmVudCB2YWx1ZSBpcyBpbmhlcml0ZWQgZnJvbSBpMzg2LiBTdGlsbCBuZWVkcworICogICAgICB0byBiZSB0dW5lZCBmb3IgcGFyaXNjLgorICovCisgCisjZGVmaW5lIFBST0NfQ0hBTkdFX1BFTkFMVFkJMTUJCS8qIFNjaGVkdWxlIHBlbmFsdHkgKi8KKworI3VuZGVmIEVOVFJZX1NZU19DUFVTCisjaWZkZWYgRU5UUllfU1lTX0NQVVMKKyNkZWZpbmUgU1RBVEVfUkVOREVaVk9VUwkJCTAKKyNkZWZpbmUgU1RBVEVfU1RPUFBFRCAJCQkJMSAKKyNkZWZpbmUgU1RBVEVfUlVOTklORwkJCQkyCisjZGVmaW5lIFNUQVRFX0hBTFRFRAkJCQkzCisjZW5kaWYKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgY3B1X3ByZXNlbnRfbWFzazsKKworI2RlZmluZSBzbXBfcHJvY2Vzc29yX2lkKCkJKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+Y3B1KQorCisjZW5kaWYgLyogQ09ORklHX1NNUCAqLworCisjZGVmaW5lIE5PX1BST0NfSUQJCTB4RkYJCS8qIE5vIHByb2Nlc3NvciBtYWdpYyBtYXJrZXIgKi8KKyNkZWZpbmUgQU5ZX1BST0NfSUQJCTB4RkYJCS8qIEFueSBwcm9jZXNzb3IgbWFnaWMgbWFya2VyICovCitzdGF0aWMgaW5saW5lIGludCBfX2NwdV9kaXNhYmxlICh2b2lkKSB7CisgIHJldHVybiAwOworfQorc3RhdGljIGlubGluZSB2b2lkIF9fY3B1X2RpZSAodW5zaWduZWQgaW50IGNwdSkgeworICB3aGlsZSgxKQorICAgIDsKK30KK2V4dGVybiBpbnQgX19jcHVfdXAgKHVuc2lnbmVkIGludCBjcHUpOworCisjZW5kaWYgLyogIF9fQVNNX1NNUF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2Mvc29ja2V0LmggYi9pbmNsdWRlL2FzbS1wYXJpc2Mvc29ja2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE3Nzk5NgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9zb2NrZXQuaApAQCAtMCwwICsxLDUwIEBACisjaWZuZGVmIF9BU01fU09DS0VUX0gKKyNkZWZpbmUgX0FTTV9TT0NLRVRfSAorCisjaW5jbHVkZSA8YXNtL3NvY2tpb3MuaD4KKworLyogRm9yIHNldHNvY2tvcHQoMikgKi8KKyNkZWZpbmUgU09MX1NPQ0tFVAkweGZmZmYKKworI2RlZmluZSBTT19ERUJVRwkweDAwMDEKKyNkZWZpbmUgU09fUkVVU0VBRERSCTB4MDAwNAorI2RlZmluZSBTT19LRUVQQUxJVkUJMHgwMDA4CisjZGVmaW5lIFNPX0RPTlRST1VURQkweDAwMTAKKyNkZWZpbmUgU09fQlJPQURDQVNUCTB4MDAyMAorI2RlZmluZSBTT19MSU5HRVIJMHgwMDgwCisjZGVmaW5lIFNPX09PQklOTElORQkweDAxMDAKKy8qIFRvIGFkZCA6I2RlZmluZSBTT19SRVVTRVBPUlQgMHgwMjAwICovCisjZGVmaW5lIFNPX1NOREJVRgkweDEwMDEKKyNkZWZpbmUgU09fUkNWQlVGCTB4MTAwMgorI2RlZmluZSBTT19TTkRMT1dBVAkweDEwMDMKKyNkZWZpbmUgU09fUkNWTE9XQVQJMHgxMDA0CisjZGVmaW5lIFNPX1NORFRJTUVPCTB4MTAwNQorI2RlZmluZSBTT19SQ1ZUSU1FTwkweDEwMDYKKyNkZWZpbmUgU09fRVJST1IJMHgxMDA3CisjZGVmaW5lIFNPX1RZUEUJCTB4MTAwOAorI2RlZmluZSBTT19QRUVSTkFNRQkweDIwMDAKKworI2RlZmluZSBTT19OT19DSEVDSwkweDQwMGIKKyNkZWZpbmUgU09fUFJJT1JJVFkJMHg0MDBjCisjZGVmaW5lIFNPX0JTRENPTVBBVAkweDQwMGUKKyNkZWZpbmUgU09fUEFTU0NSRUQJMHg0MDEwCisjZGVmaW5lIFNPX1BFRVJDUkVECTB4NDAxMQorI2RlZmluZSBTT19USU1FU1RBTVAJMHg0MDEyCisjZGVmaW5lIFNDTV9USU1FU1RBTVAJU09fVElNRVNUQU1QCisKKy8qIFNlY3VyaXR5IGxldmVscyAtIGFzIHBlciBOUkwgSVB2NiAtIGRvbid0IGFjdHVhbGx5IGRvIGFueXRoaW5nICovCisjZGVmaW5lIFNPX1NFQ1VSSVRZX0FVVEhFTlRJQ0FUSU9OCQkweDQwMTYKKyNkZWZpbmUgU09fU0VDVVJJVFlfRU5DUllQVElPTl9UUkFOU1BPUlQJMHg0MDE3CisjZGVmaW5lIFNPX1NFQ1VSSVRZX0VOQ1JZUFRJT05fTkVUV09SSwkJMHg0MDE4CisKKyNkZWZpbmUgU09fQklORFRPREVWSUNFCTB4NDAxOQorCisvKiBTb2NrZXQgZmlsdGVyaW5nICovCisjZGVmaW5lIFNPX0FUVEFDSF9GSUxURVIgICAgICAgIDB4NDAxYQorI2RlZmluZSBTT19ERVRBQ0hfRklMVEVSICAgICAgICAweDQwMWIKKworI2RlZmluZSBTT19BQ0NFUFRDT05OCQkweDQwMWMKKworI2RlZmluZSBTT19QRUVSU0VDCQkweDQwMWQKKworI2VuZGlmIC8qIF9BU01fU09DS0VUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9zb2NraW9zLmggYi9pbmNsdWRlL2FzbS1wYXJpc2Mvc29ja2lvcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhY2U0OTYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2Mvc29ja2lvcy5oCkBAIC0wLDAgKzEsMTIgQEAKKyNpZm5kZWYgX19BUkNIX1BBUklTQ19TT0NLSU9TX18KKyNkZWZpbmUgX19BUkNIX1BBUklTQ19TT0NLSU9TX18KKworLyogU29ja2V0LWxldmVsIEkvTyBjb250cm9sIGNhbGxzLiAqLworI2RlZmluZSBGSU9TRVRPV04gCTB4ODkwMQorI2RlZmluZSBTSU9DU1BHUlAJMHg4OTAyCisjZGVmaW5lIEZJT0dFVE9XTgkweDg5MDMKKyNkZWZpbmUgU0lPQ0dQR1JQCTB4ODkwNAorI2RlZmluZSBTSU9DQVRNQVJLCTB4ODkwNQorI2RlZmluZSBTSU9DR1NUQU1QCTB4ODkwNgkJLyogR2V0IHN0YW1wICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3NwaW5sb2NrLmggYi9pbmNsdWRlL2FzbS1wYXJpc2Mvc3BpbmxvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzllYTFjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL3NwaW5sb2NrLmgKQEAgLTAsMCArMSwyNTggQEAKKyNpZm5kZWYgX19BU01fU1BJTkxPQ0tfSAorI2RlZmluZSBfX0FTTV9TUElOTE9DS19ICisKKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisKKy8qIE5vdGUgdGhhdCBQQS1SSVNDIGhhcyB0byB1c2UgYDEnIHRvIG1lYW4gdW5sb2NrZWQgYW5kIGAwJyB0byBtZWFuIGxvY2tlZAorICogc2luY2UgaXQgb25seSBoYXMgbG9hZC1hbmQtemVyby4gTW9yZW92ZXIsIGF0IGxlYXN0IG9uIHNvbWUgUEEgcHJvY2Vzc29ycywKKyAqIHRoZSBzZW1hcGhvcmUgYWRkcmVzcyBoYXMgdG8gYmUgMTYtYnl0ZSBhbGlnbmVkLgorICovCisKKyNpZm5kZWYgQ09ORklHX0RFQlVHX1NQSU5MT0NLCisKKyNkZWZpbmUgX19TUElOX0xPQ0tfVU5MT0NLRUQJeyB7IDEsIDEsIDEsIDEgfSB9CisjdW5kZWYgU1BJTl9MT0NLX1VOTE9DS0VECisjZGVmaW5lIFNQSU5fTE9DS19VTkxPQ0tFRCAoc3BpbmxvY2tfdCkgX19TUElOX0xPQ0tfVU5MT0NLRUQKKworI2RlZmluZSBzcGluX2xvY2tfaW5pdCh4KQlkbyB7ICooeCkgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7IH0gd2hpbGUoMCkKKworc3RhdGljIGlubGluZSBpbnQgc3Bpbl9pc19sb2NrZWQoc3BpbmxvY2tfdCAqeCkKK3sKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKmEgPSBfX2xkY3dfYWxpZ24oeCk7CisJcmV0dXJuICphID09IDA7Cit9CisKKyNkZWZpbmUgc3Bpbl91bmxvY2tfd2FpdCh4KQlkbyB7IGJhcnJpZXIoKTsgfSB3aGlsZShzcGluX2lzX2xvY2tlZCh4KSkKKyNkZWZpbmUgX3Jhd19zcGluX2xvY2tfZmxhZ3MobG9jaywgZmxhZ3MpIF9yYXdfc3Bpbl9sb2NrKGxvY2spCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfcmF3X3NwaW5fbG9jayhzcGlubG9ja190ICp4KQoreworCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqYTsKKworCW1iKCk7CisJYSA9IF9fbGRjd19hbGlnbih4KTsKKwl3aGlsZSAoX19sZGN3KGEpID09IDApCisJCXdoaWxlICgqYSA9PSAwKTsKKwltYigpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX3Jhd19zcGluX3VubG9jayhzcGlubG9ja190ICp4KQoreworCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqYTsKKwltYigpOworCWEgPSBfX2xkY3dfYWxpZ24oeCk7CisJKmEgPSAxOworCW1iKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9yYXdfc3Bpbl90cnlsb2NrKHNwaW5sb2NrX3QgKngpCit7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50ICphOworCWludCByZXQ7CisKKwltYigpOworCWEgPSBfX2xkY3dfYWxpZ24oeCk7CisgICAgICAgIHJldCA9IF9fbGRjdyhhKSAhPSAwOworCW1iKCk7CisKKwlyZXR1cm4gcmV0OworfQorCQorI2RlZmluZSBzcGluX2xvY2tfb3duKExPQ0ssIExPQ0FUSU9OKQkoKHZvaWQpMCkKKworI2Vsc2UgLyogIShDT05GSUdfREVCVUdfU1BJTkxPQ0spICovCisKKyNkZWZpbmUgU1BJTkxPQ0tfTUFHSUMJMHgxRDI0NEIzQworCisjZGVmaW5lIF9fU1BJTl9MT0NLX1VOTE9DS0VECXsgeyAxLCAxLCAxLCAxIH0sIFNQSU5MT0NLX01BR0lDLCAxMCwgX19GSUxFX18gLCBOVUxMLCAwLCAtMSwgTlVMTCwgTlVMTCB9CisjdW5kZWYgU1BJTl9MT0NLX1VOTE9DS0VECisjZGVmaW5lIFNQSU5fTE9DS19VTkxPQ0tFRCAoc3BpbmxvY2tfdCkgX19TUElOX0xPQ0tfVU5MT0NLRUQKKworI2RlZmluZSBzcGluX2xvY2tfaW5pdCh4KQlkbyB7ICooeCkgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7IH0gd2hpbGUoMCkKKworI2RlZmluZSBDSEVDS19MT0NLKHgpCQkJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJIAlpZiAodW5saWtlbHkoKHgpLT5tYWdpYyAhPSBTUElOTE9DS19NQUdJQykpIHsJCQlcCisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiVkOiBzcGluX2lzX2xvY2tlZCIJCVwKKwkJCSIgb24gdW5pbml0aWFsaXplZCBzcGlubG9jayAlcC5cbiIsCQlcCisJCQkJX19GSUxFX18sIF9fTElORV9fLCAoeCkpOyAJCVwKKwkJfSAJCQkJCQkJXAorCX0gd2hpbGUoMCkKKworI2RlZmluZSBzcGluX2lzX2xvY2tlZCh4KQkJCQkJCVwKKwkoewkJCQkJCQkJXAorCSAJQ0hFQ0tfTE9DSyh4KTsJCQkJCQlcCisJCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqYSA9IF9fbGRjd19hbGlnbih4KTsJCVwKKwkJaWYgKHVubGlrZWx5KCgqYSA9PSAwKSAmJiAoeCktPmJhYmJsZSkpIHsJCQkJXAorCQkJKHgpLT5iYWJibGUtLTsJCQkJCVwKKwkJCXByaW50aygiS0VSTl9XQVJOSU5HCQkJCVwKKwkJCQklczolZDogc3Bpbl9pc19sb2NrZWQoJXMvJXApIGFscmVhZHkiCVwKKwkJCQkiIGxvY2tlZCBieSAlczolZCBpbiAlcyBhdCAlcCglZClcbiIsCVwKKwkJCQlfX0ZJTEVfXyxfX0xJTkVfXywgKHgpLT5tb2R1bGUsCSh4KSwJXAorCQkJCSh4KS0+YmZpbGUsICh4KS0+YmxpbmUsICh4KS0+dGFzay0+Y29tbSxcCisJCQkJKHgpLT5wcmV2aW91cywgKHgpLT5vbmNwdSk7CQlcCisJCX0JCQkJCQkJXAorCQkqYSA9PSAwOwkJCQkJCVwKKwl9KQorCisjZGVmaW5lIHNwaW5fdW5sb2NrX3dhaXQoeCkJCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCSAJQ0hFQ0tfTE9DSyh4KTsJCQkJCQlcCisJCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqYSA9IF9fbGRjd19hbGlnbih4KTsJCVwKKwkJaWYgKHVubGlrZWx5KCgqYSA9PSAwKSAmJiAoeCktPmJhYmJsZSkpIHsJCQkJXAorCQkJKHgpLT5iYWJibGUtLTsJCQkJCVwKKwkJCXByaW50aygiS0VSTl9XQVJOSU5HCQkJCVwKKwkJCQklczolZDogc3Bpbl91bmxvY2tfd2FpdCglcy8lcCkiCQlcCisJCQkJIiBvd25lZCBieSAlczolZCBpbiAlcyBhdCAlcCglZClcbiIsCVwKKwkJCQlfX0ZJTEVfXyxfX0xJTkVfXywgKHgpLT5tb2R1bGUsICh4KSwJXAorCQkJCSh4KS0+YmZpbGUsICh4KS0+YmxpbmUsICh4KS0+dGFzay0+Y29tbSxcCisJCQkJKHgpLT5wcmV2aW91cywgKHgpLT5vbmNwdSk7CQlcCisJCX0JCQkJCQkJXAorCQliYXJyaWVyKCk7CQkJCQkJXAorCX0gd2hpbGUgKCooKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoX19sZGN3X2FsaWduKHgpKSkgPT0gMCkKKworZXh0ZXJuIHZvaWQgX2RiZ19zcGluX2xvY2soc3BpbmxvY2tfdCAqbG9jaywgY29uc3QgY2hhciAqYmFzZV9maWxlLCBpbnQgbGluZV9ubyk7CitleHRlcm4gdm9pZCBfZGJnX3NwaW5fdW5sb2NrKHNwaW5sb2NrX3QgKmxvY2ssIGNvbnN0IGNoYXIgKiwgaW50KTsKK2V4dGVybiBpbnQgX2RiZ19zcGluX3RyeWxvY2soc3BpbmxvY2tfdCAqIGxvY2ssIGNvbnN0IGNoYXIgKiwgaW50KTsKKworI2RlZmluZSBfcmF3X3NwaW5fbG9ja19mbGFncyhsb2NrLCBmbGFncykgX3Jhd19zcGluX2xvY2sobG9jaykKKworI2RlZmluZSBfcmF3X3NwaW5fdW5sb2NrKGxvY2spCV9kYmdfc3Bpbl91bmxvY2sobG9jaywgX19GSUxFX18sIF9fTElORV9fKQorI2RlZmluZSBfcmF3X3NwaW5fbG9jayhsb2NrKSBfZGJnX3NwaW5fbG9jayhsb2NrLCBfX0ZJTEVfXywgX19MSU5FX18pCisjZGVmaW5lIF9yYXdfc3Bpbl90cnlsb2NrKGxvY2spIF9kYmdfc3Bpbl90cnlsb2NrKGxvY2ssIF9fRklMRV9fLCBfX0xJTkVfXykKKworLyoganVzdCBpbiBjYXNlIHdlIG5lZWQgaXQgKi8KKyNkZWZpbmUgc3Bpbl9sb2NrX293bihMT0NLLCBMT0NBVElPTikJCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJdm9sYXRpbGUgdW5zaWduZWQgaW50ICphID0gX19sZGN3X2FsaWduKExPQ0spOwkJCVwKKwlpZiAoISgoKmEgPT0gMCkgJiYgKChMT0NLKS0+b25jcHUgPT0gc21wX3Byb2Nlc3Nvcl9pZCgpKSkpCVwKKwkJcHJpbnRrKCJLRVJOX1dBUk5JTkcJCQkJCVwKKwkJCSVzOiBjYWxsZWQgb24gJWQgZnJvbSAlcCBidXQgbG9jayAlcyBvbiAlZFxuIiwJXAorCQkJTE9DQVRJT04sIHNtcF9wcm9jZXNzb3JfaWQoKSwJCQlcCisJCQlfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCksCQkJXAorCQkJKCphID09IDApID8gInRha2VuIiA6ICJmcmVlZCIsIChMT0NLKS0+b25fY3B1KTsJXAorfSB3aGlsZSAoMCkKKworI2VuZGlmIC8qICEoQ09ORklHX0RFQlVHX1NQSU5MT0NLKSAqLworCisvKgorICogUmVhZC13cml0ZSBzcGlubG9ja3MsIGFsbG93aW5nIG11bHRpcGxlIHJlYWRlcnMKKyAqIGJ1dCBvbmx5IG9uZSB3cml0ZXIuCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwlzcGlubG9ja190IGxvY2s7CisJdm9sYXRpbGUgaW50IGNvdW50ZXI7CisjaWZkZWYgQ09ORklHX1BSRUVNUFQKKwl1bnNpZ25lZCBpbnQgYnJlYWtfbG9jazsKKyNlbmRpZgorfSByd2xvY2tfdDsKKworI2RlZmluZSBSV19MT0NLX1VOTE9DS0VEIChyd2xvY2tfdCkgeyBfX1NQSU5fTE9DS19VTkxPQ0tFRCwgMCB9CisKKyNkZWZpbmUgcndsb2NrX2luaXQobHApCWRvIHsgKihscCkgPSBSV19MT0NLX1VOTE9DS0VEOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIF9yYXdfcmVhZF90cnlsb2NrKGxvY2spIGdlbmVyaWNfcmF3X3JlYWRfdHJ5bG9jayhsb2NrKQorCisvKiByZWFkX2xvY2ssIHJlYWRfdW5sb2NrIGFyZSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiAgT2YgY291cnNlIGl0IHNvbWVob3cKKyAqIHN1Y2tzIHdlIGVuZCB1cCBzYXZpbmcvcmVzdG9yaW5nIGZsYWdzIHR3aWNlIGZvciByZWFkX2xvY2tfaXJxc2F2ZSBhc28uICovCisKKyNpZmRlZiBDT05GSUdfREVCVUdfUldMT0NLCitleHRlcm4gdm9pZCBfZGJnX3JlYWRfbG9jayhyd2xvY2tfdCAqIHJ3LCBjb25zdCBjaGFyICpiZmlsZSwgaW50IGJsaW5lKTsKKyNkZWZpbmUgX3Jhd19yZWFkX2xvY2socncpIF9kYmdfcmVhZF9sb2NrKHJ3LCBfX0ZJTEVfXywgX19MSU5FX18pCisjZWxzZQorc3RhdGljICBfX2lubGluZV9fIHZvaWQgX3Jhd19yZWFkX2xvY2socndsb2NrX3QgKnJ3KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCV9yYXdfc3Bpbl9sb2NrKCZydy0+bG9jayk7IAorCisJcnctPmNvdW50ZXIrKzsKKworCV9yYXdfc3Bpbl91bmxvY2soJnJ3LT5sb2NrKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisjZW5kaWYJLyogQ09ORklHX0RFQlVHX1JXTE9DSyAqLworCitzdGF0aWMgIF9faW5saW5lX18gdm9pZCBfcmF3X3JlYWRfdW5sb2NrKHJ3bG9ja190ICpydykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlfcmF3X3NwaW5fbG9jaygmcnctPmxvY2spOyAKKworCXJ3LT5jb3VudGVyLS07CisKKwlfcmF3X3NwaW5fdW5sb2NrKCZydy0+bG9jayk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCisvKiB3cml0ZV9sb2NrIGlzIGxlc3MgdHJpdmlhbC4gIFdlIG9wdGltaXN0aWNhbGx5IGdyYWIgdGhlIGxvY2sgYW5kIGNoZWNrCisgKiBpZiB3ZSBzdXJwcmlzZWQgYW55IHJlYWRlcnMuICBJZiBzbyB3ZSByZWxlYXNlIHRoZSBsb2NrIGFuZCB3YWl0IHRpbGwKKyAqIHRoZXkncmUgYWxsIGdvbmUgYmVmb3JlIHRyeWluZyBhZ2FpbgorICoKKyAqIEFsc28gbm90ZSB0aGF0IHdlIGRvbid0IHVzZSB0aGUgX2lycXNhdmUgLyBfaXJxcmVzdG9yZSBzdWZmaXhlcyBoZXJlLgorICogSWYgd2UncmUgY2FsbGVkIHdpdGggaW50ZXJydXB0cyBlbmFibGVkIGFuZCB3ZSd2ZSBnb3QgcmVhZGVycyAob3Igb3RoZXIKKyAqIHdyaXRlcnMpIGluIGludGVycnVwdCBoYW5kbGVycyBzb21lb25lIGZ1Y2tlZCB1cCBhbmQgd2UnZCBkZWFkLWxvY2sKKyAqIHNvb25lciBvciBsYXRlciBhbnl3YXkuICAgcHJ1bXBmICovCisKKyNpZmRlZiBDT05GSUdfREVCVUdfUldMT0NLCitleHRlcm4gdm9pZCBfZGJnX3dyaXRlX2xvY2socndsb2NrX3QgKiBydywgY29uc3QgY2hhciAqYmZpbGUsIGludCBibGluZSk7CisjZGVmaW5lIF9yYXdfd3JpdGVfbG9jayhydykgX2RiZ193cml0ZV9sb2NrKHJ3LCBfX0ZJTEVfXywgX19MSU5FX18pCisjZWxzZQorc3RhdGljICBfX2lubGluZV9fIHZvaWQgX3Jhd193cml0ZV9sb2NrKHJ3bG9ja190ICpydykKK3sKK3JldHJ5OgorCV9yYXdfc3Bpbl9sb2NrKCZydy0+bG9jayk7CisKKwlpZihydy0+Y291bnRlciAhPSAwKSB7CisJCS8qIHRoaXMgYmFzaWNhbGx5IG5ldmVyIGhhcHBlbnMgKi8KKwkJX3Jhd19zcGluX3VubG9jaygmcnctPmxvY2spOworCisJCXdoaWxlKHJ3LT5jb3VudGVyICE9IDApOworCisJCWdvdG8gcmV0cnk7CisJfQorCisJLyogZ290IGl0LiAgbm93IGxlYXZlIHdpdGhvdXQgdW5sb2NraW5nICovCisJcnctPmNvdW50ZXIgPSAtMTsgLyogcmVtZW1iZXIgd2UgYXJlIGxvY2tlZCAqLworfQorI2VuZGlmIC8qIENPTkZJR19ERUJVR19SV0xPQ0sgKi8KKworLyogd3JpdGVfdW5sb2NrIGlzIGFic29sdXRlbHkgdHJpdmlhbCAtIHdlIGRvbid0IGhhdmUgdG8gd2FpdCBmb3IgYW55dGhpbmcgKi8KKworc3RhdGljICBfX2lubGluZV9fIHZvaWQgX3Jhd193cml0ZV91bmxvY2socndsb2NrX3QgKnJ3KQoreworCXJ3LT5jb3VudGVyID0gMDsKKwlfcmF3X3NwaW5fdW5sb2NrKCZydy0+bG9jayk7Cit9CisKKyNpZmRlZiBDT05GSUdfREVCVUdfUldMT0NLCitleHRlcm4gaW50IF9kYmdfd3JpdGVfdHJ5bG9jayhyd2xvY2tfdCAqIHJ3LCBjb25zdCBjaGFyICpiZmlsZSwgaW50IGJsaW5lKTsKKyNkZWZpbmUgX3Jhd193cml0ZV90cnlsb2NrKHJ3KSBfZGJnX3dyaXRlX3RyeWxvY2socncsIF9fRklMRV9fLCBfX0xJTkVfXykKKyNlbHNlCitzdGF0aWMgIF9faW5saW5lX18gaW50IF9yYXdfd3JpdGVfdHJ5bG9jayhyd2xvY2tfdCAqcncpCit7CisJX3Jhd19zcGluX2xvY2soJnJ3LT5sb2NrKTsKKwlpZiAocnctPmNvdW50ZXIgIT0gMCkgeworCQkvKiB0aGlzIGJhc2ljYWxseSBuZXZlciBoYXBwZW5zICovCisJCV9yYXdfc3Bpbl91bmxvY2soJnJ3LT5sb2NrKTsKKworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBnb3QgaXQuICBub3cgbGVhdmUgd2l0aG91dCB1bmxvY2tpbmcgKi8KKwlydy0+Y291bnRlciA9IC0xOyAvKiByZW1lbWJlciB3ZSBhcmUgbG9ja2VkICovCisJcmV0dXJuIDE7Cit9CisjZW5kaWYgLyogQ09ORklHX0RFQlVHX1JXTE9DSyAqLworCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgaXNfcmVhZF9sb2NrZWQocndsb2NrX3QgKnJ3KQoreworCXJldHVybiBydy0+Y291bnRlciA+IDA7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBpc193cml0ZV9sb2NrZWQocndsb2NrX3QgKnJ3KQoreworCXJldHVybiBydy0+Y291bnRlciA8IDA7Cit9CisKKyNlbmRpZiAvKiBfX0FTTV9TUElOTE9DS19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2Mvc3RhdC5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL3N0YXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDVmYmJjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL3N0YXQuaApAQCAtMCwwICsxLDEwMCBAQAorI2lmbmRlZiBfUEFSSVNDX1NUQVRfSAorI2RlZmluZSBfUEFSSVNDX1NUQVRfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IHN0YXQgeworCXVuc2lnbmVkIGludAlzdF9kZXY7CQkvKiBkZXZfdCBpcyAzMiBiaXRzIG9uIHBhcmlzYyAqLworCWlub190CQlzdF9pbm87CQkvKiAzMiBiaXRzICovCisJbW9kZV90CQlzdF9tb2RlOwkvKiAxNiBiaXRzICovCisJbmxpbmtfdAkJc3Rfbmxpbms7CS8qIDE2IGJpdHMgKi8KKwl1bnNpZ25lZCBzaG9ydAlzdF9yZXNlcnZlZDE7CS8qIG9sZCBzdF91aWQgKi8KKwl1bnNpZ25lZCBzaG9ydAlzdF9yZXNlcnZlZDI7CS8qIG9sZCBzdF9naWQgKi8KKwl1bnNpZ25lZCBpbnQJc3RfcmRldjsKKwlvZmZfdAkJc3Rfc2l6ZTsKKwl0aW1lX3QJCXN0X2F0aW1lOworCXVuc2lnbmVkIGludAlzdF9hdGltZV9uc2VjOworCXRpbWVfdAkJc3RfbXRpbWU7CisJdW5zaWduZWQgaW50CXN0X210aW1lX25zZWM7CisJdGltZV90CQlzdF9jdGltZTsKKwl1bnNpZ25lZCBpbnQJc3RfY3RpbWVfbnNlYzsKKwlpbnQJCXN0X2Jsa3NpemU7CisJaW50CQlzdF9ibG9ja3M7CisJdW5zaWduZWQgaW50CV9fdW51c2VkMTsJLyogQUNMIHN0dWZmICovCisJdW5zaWduZWQgaW50CV9fdW51c2VkMjsJLyogbmV0d29yayAqLworCWlub190CQlfX3VudXNlZDM7CS8qIG5ldHdvcmsgKi8KKwl1bnNpZ25lZCBpbnQJX191bnVzZWQ0OwkvKiBjbm9kZXMgKi8KKwl1bnNpZ25lZCBzaG9ydAlfX3VudXNlZDU7CS8qIG5ldHNpdGUgKi8KKwlzaG9ydAkJc3RfZnN0eXBlOworCXVuc2lnbmVkIGludAlzdF9yZWFsZGV2OworCXVuc2lnbmVkIHNob3J0CXN0X2Jhc2Vtb2RlOworCXVuc2lnbmVkIHNob3J0CXN0X3NwYXJlc2hvcnQ7CisJdWlkX3QJCXN0X3VpZDsKKwlnaWRfdAkJc3RfZ2lkOworCXVuc2lnbmVkIGludAlzdF9zcGFyZTRbM107Cit9OworCisjZGVmaW5lIFNUQVRfSEFWRV9OU0VDCisKK3R5cGVkZWYgX19rZXJuZWxfb2ZmNjRfdAlvZmY2NF90OworCitzdHJ1Y3QgaHB1eF9zdGF0NjQgeworCXVuc2lnbmVkIGludAlzdF9kZXY7CQkvKiBkZXZfdCBpcyAzMiBiaXRzIG9uIHBhcmlzYyAqLworCWlub190ICAgICAgICAgICBzdF9pbm87ICAgICAgICAgLyogMzIgYml0cyAqLworCW1vZGVfdAkJc3RfbW9kZTsJLyogMTYgYml0cyAqLworCW5saW5rX3QJCXN0X25saW5rOwkvKiAxNiBiaXRzICovCisJdW5zaWduZWQgc2hvcnQJc3RfcmVzZXJ2ZWQxOwkvKiBvbGQgc3RfdWlkICovCisJdW5zaWduZWQgc2hvcnQJc3RfcmVzZXJ2ZWQyOwkvKiBvbGQgc3RfZ2lkICovCisJdW5zaWduZWQgaW50CXN0X3JkZXY7CisJb2ZmNjRfdAkJc3Rfc2l6ZTsKKwl0aW1lX3QJCXN0X2F0aW1lOworCXVuc2lnbmVkIGludAlzdF9zcGFyZTE7CisJdGltZV90CQlzdF9tdGltZTsKKwl1bnNpZ25lZCBpbnQJc3Rfc3BhcmUyOworCXRpbWVfdAkJc3RfY3RpbWU7CisJdW5zaWduZWQgaW50CXN0X3NwYXJlMzsKKwlpbnQJCXN0X2Jsa3NpemU7CisJX191NjQJCXN0X2Jsb2NrczsKKwl1bnNpZ25lZCBpbnQJX191bnVzZWQxOwkvKiBBQ0wgc3R1ZmYgKi8KKwl1bnNpZ25lZCBpbnQJX191bnVzZWQyOwkvKiBuZXR3b3JrICovCisJaW5vX3QgICAgICAgICAgIF9fdW51c2VkMzsgICAgICAvKiBuZXR3b3JrICovCisJdW5zaWduZWQgaW50CV9fdW51c2VkNDsJLyogY25vZGVzICovCisJdW5zaWduZWQgc2hvcnQJX191bnVzZWQ1OwkvKiBuZXRzaXRlICovCisJc2hvcnQJCXN0X2ZzdHlwZTsKKwl1bnNpZ25lZCBpbnQJc3RfcmVhbGRldjsKKwl1bnNpZ25lZCBzaG9ydAlzdF9iYXNlbW9kZTsKKwl1bnNpZ25lZCBzaG9ydAlzdF9zcGFyZXNob3J0OworCXVpZF90CQlzdF91aWQ7CisJZ2lkX3QJCXN0X2dpZDsKKwl1bnNpZ25lZCBpbnQJc3Rfc3BhcmU0WzNdOworfTsKKworLyogVGhpcyBpcyB0aGUgc3RydWN0IHRoYXQgMzItYml0IHVzZXJzcGFjZSBhcHBsaWNhdGlvbnMgYXJlIGV4cGVjdGluZy4KKyAqIEhvdyA2NC1iaXQgYXBwcyBhcmUgZ29pbmcgdG8gYmUgY29tcGlsZWQsIEkgaGF2ZSBubyBpZGVhLiAgQnV0IGF0IGxlYXN0CisgKiB0aGlzIHdheSwgd2UgZG9uJ3QgaGF2ZSBhIHdyYXBwZXIgaW4gdGhlIGtlcm5lbC4KKyAqLworc3RydWN0IHN0YXQ2NCB7CisJdW5zaWduZWQgbG9uZyBsb25nCXN0X2RldjsKKwl1bnNpZ25lZCBpbnQJCV9fcGFkMTsKKworCXVuc2lnbmVkIGludAkJX19zdF9pbm87CS8qIE5vdCBhY3R1YWxseSBmaWxsZWQgaW4gKi8KKwl1bnNpZ25lZCBpbnQJCXN0X21vZGU7CisJdW5zaWduZWQgaW50CQlzdF9ubGluazsKKwl1bnNpZ25lZCBpbnQJCXN0X3VpZDsKKwl1bnNpZ25lZCBpbnQJCXN0X2dpZDsKKwl1bnNpZ25lZCBsb25nIGxvbmcJc3RfcmRldjsKKwl1bnNpZ25lZCBpbnQJCV9fcGFkMjsKKwlzaWduZWQgbG9uZyBsb25nCXN0X3NpemU7CisJc2lnbmVkIGludAkJc3RfYmxrc2l6ZTsKKworCXNpZ25lZCBsb25nIGxvbmcJc3RfYmxvY2tzOworCXNpZ25lZCBpbnQJCXN0X2F0aW1lOworCXVuc2lnbmVkIGludAkJc3RfYXRpbWVfbnNlYzsKKwlzaWduZWQgaW50CQlzdF9tdGltZTsKKwl1bnNpZ25lZCBpbnQJCXN0X210aW1lX25zZWM7CisJc2lnbmVkIGludAkJc3RfY3RpbWU7CisJdW5zaWduZWQgaW50CQlzdF9jdGltZV9uc2VjOworCXVuc2lnbmVkIGxvbmcgbG9uZwlzdF9pbm87Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9zdGF0ZnMuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9zdGF0ZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTJkOGY5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL3N0YXRmcy5oCkBAIC0wLDAgKzEsNTggQEAKKyNpZm5kZWYgX1BBUklTQ19TVEFURlNfSAorI2RlZmluZSBfUEFSSVNDX1NUQVRGU19ICisKKyNpZm5kZWYgX19LRVJORUxfU1RSSUNUX05BTUVTCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCit0eXBlZGVmIF9fa2VybmVsX2ZzaWRfdAlmc2lkX3Q7CisKKyNlbmRpZgorCisvKgorICogSXQgYXBwZWFycyB0aGF0IFBBUklTQyBjb3VsZCBiZSA2NCBfb3JfIDMyIGJpdC4KKyAqIDY0LWJpdCBmaWVsZHMgbXVzdCBiZSBleHBsaWNpdGx5IDY0LWJpdCBpbiBzdGF0ZnM2NC4KKyAqLworc3RydWN0IHN0YXRmcyB7CisJbG9uZyBmX3R5cGU7CisJbG9uZyBmX2JzaXplOworCWxvbmcgZl9ibG9ja3M7CisJbG9uZyBmX2JmcmVlOworCWxvbmcgZl9iYXZhaWw7CisJbG9uZyBmX2ZpbGVzOworCWxvbmcgZl9mZnJlZTsKKwlfX2tlcm5lbF9mc2lkX3QgZl9mc2lkOworCWxvbmcgZl9uYW1lbGVuOworCWxvbmcgZl9mcnNpemU7CisJbG9uZyBmX3NwYXJlWzVdOworfTsKKworc3RydWN0IHN0YXRmczY0IHsKKwlsb25nIGZfdHlwZTsKKwlsb25nIGZfYnNpemU7CisJdTY0IGZfYmxvY2tzOworCXU2NCBmX2JmcmVlOworCXU2NCBmX2JhdmFpbDsKKwl1NjQgZl9maWxlczsKKwl1NjQgZl9mZnJlZTsKKwlfX2tlcm5lbF9mc2lkX3QgZl9mc2lkOworCWxvbmcgZl9uYW1lbGVuOworCWxvbmcgZl9mcnNpemU7CisJbG9uZyBmX3NwYXJlWzVdOworfTsKKworc3RydWN0IGNvbXBhdF9zdGF0ZnM2NCB7CisJX191MzIgZl90eXBlOworCV9fdTMyIGZfYnNpemU7CisJX191NjQgZl9ibG9ja3M7CisJX191NjQgZl9iZnJlZTsKKwlfX3U2NCBmX2JhdmFpbDsKKwlfX3U2NCBmX2ZpbGVzOworCV9fdTY0IGZfZmZyZWU7CisJX19rZXJuZWxfZnNpZF90IGZfZnNpZDsKKwlfX3UzMiBmX25hbWVsZW47CisJX191MzIgZl9mcnNpemU7CisJX191MzIgZl9zcGFyZVs1XTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3N0cmluZy5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL3N0cmluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkYTAxYmUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2Mvc3RyaW5nLmgKQEAgLTAsMCArMSwxMCBAQAorI2lmbmRlZiBfUEFfU1RSSU5HX0hfCisjZGVmaW5lIF9QQV9TVFJJTkdfSF8KKworI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1TRVQKK2V4dGVybiB2b2lkICogbWVtc2V0KHZvaWQgKiwgaW50LCBzaXplX3QpOworCisjZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNQWQordm9pZCAqIG1lbWNweSh2b2lkICogZGVzdCxjb25zdCB2b2lkICpzcmMsc2l6ZV90IGNvdW50KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2Mvc3VwZXJpby5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL3N1cGVyaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTk4YWNiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL3N1cGVyaW8uaApAQCAtMCwwICsxLDg1IEBACisjaWZuZGVmIF9QQVJJU0NfU1VQRVJJT19ICisjZGVmaW5lIF9QQVJJU0NfU1VQRVJJT19ICisKKyNkZWZpbmUgSUNfUElDMSAgICAweDIwCQkvKiBQQ0kgSS9PIGFkZHJlc3Mgb2YgbWFzdGVyIDgyNTkgKi8KKyNkZWZpbmUgSUNfUElDMiAgICAweEEwCQkvKiBQQ0kgSS9PIGFkZHJlc3Mgb2Ygc2xhdmUgKi8KKworLyogQ29uZmlnIFNwYWNlIE9mZnNldHMgdG8gY29uZmlndXJhdGlvbiBhbmQgYmFzZSBhZGRyZXNzIHJlZ2lzdGVycyAqLworI2RlZmluZSBTSU9fQ1IgICAgIDB4NUEJCS8qIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU0lPX0FDUElCQVIgMHg4OAkvKiBBQ1BJIEJBUiAqLworI2RlZmluZSBTSU9fRkRDQkFSIDB4OTAJCS8qIEZsb3BweSBEaXNrIENvbnRyb2xsZXIgQkFSICovCisjZGVmaW5lIFNJT19TUDFCQVIgMHg5NAkJLyogU2VyaWFsIDEgQkFSICovCisjZGVmaW5lIFNJT19TUDJCQVIgMHg5OAkJLyogU2VyaWFsIDIgQkFSICovCisjZGVmaW5lIFNJT19QUEJBUiAgMHg5QwkJLyogUGFyYWxsZWwgQkFSICovCisKKyNkZWZpbmUgVFJJR0dFUl8xICAweDY3CQkvKiBFZGdlL2xldmVsIHRyaWdnZXIgcmVnaXN0ZXIgMSAqLworI2RlZmluZSBUUklHR0VSXzIgIDB4NjgJCS8qIEVkZ2UvbGV2ZWwgdHJpZ2dlciByZWdpc3RlciAyICovCisKKy8qIEludGVycnVwdCBSb3V0aW5nIENvbnRyb2wgcmVnaXN0ZXJzICovCisjZGVmaW5lIENGR19JUl9TRVIgICAgMHg2OQkvKiBTZXJpYWwgMSBbMDozXSBhbmQgU2VyaWFsIDIgWzQ6N10gKi8KKyNkZWZpbmUgQ0ZHX0lSX1BGRCAgICAweDZhCS8qIFBhcmFsbGVsIFswOjNdIGFuZCBGbG9wcHkgWzQ6N10gKi8KKyNkZWZpbmUgQ0ZHX0lSX0lERSAgICAweDZiCS8qIElERTEgICAgIFswOjNdIGFuZCBJREUyIFs0OjddICovCisjZGVmaW5lIENGR19JUl9JTlRBQiAgMHg2YwkvKiBQQ0kgSU5UQSBbMDozXSBhbmQgSU5UIEIgWzQ6N10gKi8KKyNkZWZpbmUgQ0ZHX0lSX0lOVENEICAweDZkCS8qIFBDSSBJTlRDIFswOjNdIGFuZCBJTlQgRCBbNDo3XSAqLworI2RlZmluZSBDRkdfSVJfUFMyICAgIDB4NmUJLyogUFMvMiBLQklOVCBbMDozXSBhbmQgTW91c2UgWzQ6N10gKi8KKyNkZWZpbmUgQ0ZHX0lSX0ZYQlVTICAweDZmCS8qIEZYSVJRWzBdIFswOjNdIGFuZCBGWElSUVsxXSBbNDo3XSAqLworI2RlZmluZSBDRkdfSVJfVVNCICAgIDB4NzAJLyogRlhJUlFbMl0gWzA6M10gYW5kIFVTQiBbNDo3XSAqLworI2RlZmluZSBDRkdfSVJfQUNQSSAgIDB4NzEJLyogQUNQSSBTQ0kgWzA6M10gYW5kIHJlc2VydmVkIFs0OjddICovCisKKyNkZWZpbmUgQ0ZHX0lSX0xPVyAgICAgQ0ZHX0lSX1NFUgkvKiBMb3dlc3QgaW50ZXJydXB0IHJvdXRpbmcgcmVnICovCisjZGVmaW5lIENGR19JUl9ISUdIICAgIENGR19JUl9BQ1BJCS8qIEhpZ2hlc3QgaW50ZXJydXB0IHJvdXRpbmcgcmVnICovCisKKy8qIDgyNTkgb3BlcmF0aW9uYWwgY29udHJvbCB3b3JkcyAqLworI2RlZmluZSBPQ1cyX0VPSSAgIDB4MjAJCS8qIE5vbi1zcGVjaWZpYyBFT0kgKi8KKyNkZWZpbmUgT0NXMl9TRU9JICAweDYwCQkvKiBTcGVjaWZpYyBFT0kgKi8KKyNkZWZpbmUgT0NXM19JSVIgICAweDBBCQkvKiBSZWFkIHJlcXVlc3QgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgT0NXM19JU1IgICAweDBCCQkvKiBSZWFkIHNlcnZpY2UgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgT0NXM19QT0xMICAweDBDCQkvKiBQb2xsIHRoZSBQSUMgZm9yIGFuIGludGVycnVwdCB2ZWN0b3IgKi8KKworLyogSW50ZXJydXB0IGxpbmVzLiBPbmx5IFBJQzEgaXMgdXNlZCAqLworI2RlZmluZSBVU0JfSVJRICAgIDEJCS8qIFVTQiAqLworI2RlZmluZSBTUDFfSVJRICAgIDMJCS8qIFNlcmlhbCBwb3J0IDEgKi8KKyNkZWZpbmUgU1AyX0lSUSAgICA0CQkvKiBTZXJpYWwgcG9ydCAyICovCisjZGVmaW5lIFBBUl9JUlEgICAgNQkJLyogUGFyYWxsZWwgcG9ydCAqLworI2RlZmluZSBGRENfSVJRICAgIDYJCS8qIEZsb3BweSBjb250cm9sbGVyICovCisjZGVmaW5lIElERV9JUlEgICAgNwkJLyogSURFIChwcmkrc2VjKSAqLworCisvKiBBQ1BJIHJlZ2lzdGVycyAqLworI2RlZmluZSBVU0JfUkVHX0NSCTB4MWYJLyogVVNCIFJlZ3VsYXRvciBDb250cm9sIFJlZ2lzdGVyICovCisKKyNkZWZpbmUgU1VQRVJJT19OSVJRUyAgIDgKKworc3RydWN0IHN1cGVyaW9fZGV2aWNlIHsKKwl1MzIgZmRjX2Jhc2U7CisJdTMyIHNwMV9iYXNlOworCXUzMiBzcDJfYmFzZTsKKwl1MzIgcHBfYmFzZTsKKwl1MzIgYWNwaV9iYXNlOworCWludCBzdWNreWlvX2lycV9lbmFibGVkOworCXN0cnVjdCBwY2lfZGV2ICpsaW9fcGRldjsgICAgICAgLyogcGNpIGRldmljZSBmb3IgbGVnYWN5IElPIChmbiAxKSAqLworCXN0cnVjdCBwY2lfZGV2ICp1c2JfcGRldjsgICAgICAgLyogcGNpIGRldmljZSBmb3IgVVNCIChmbiAyKSAqLworfTsKKworLyoKKyAqIERvZXMgTlMgbWFrZSBhIDg3NDE1IGJhc2VkIHBsdWcgaW4gUENJIGNhcmQ/IElmIHNvLCBiZWNhdXNlIG9mIHRoaXMKKyAqIG1hY3JvIHdlIGN1cnJlbnRseSBkb24ndCBzdXBwb3J0IGl0IGJlaW5nIHBsdWdnZWQgaW50byBhIG1hY2hpbmUKKyAqIHRoYXQgY29udGFpbnMgYSBTdXBlcklPIGNoaXAgQU5EIGhhcyBDT05GSUdfU1VQRVJJTyBlbmFibGVkLgorICoKKyAqIFRoaXMgY291bGQgYmUgZml4ZWQgYnkgY2hlY2tpbmcgdG8gc2VlIGlmIGZ1bmN0aW9uIDEgZXhpc3RzLCBhbmQKKyAqIGlmIGl0IGlzIFN1cGVySU8gTGVnYWN5IElPOyBidXQgcmVhbGx5IG5vdywgaXMgdGhpcyBjb21iaW5hdGlvbgorICogZ29pbmcgdG8gRVZFUiBoYXBwZW4/CisgKi8KKworI2RlZmluZSBTVVBFUklPX0lERV9GTiAwIC8qIEZ1bmN0aW9uIG51bWJlciBvZiBJREUgY29udHJvbGxlciAqLworI2RlZmluZSBTVVBFUklPX0xJT19GTiAxIC8qIEZ1bmN0aW9uIG51bWJlciBvZiBMZWdhY3kgSU8gY29udHJvbGxlciAqLworI2RlZmluZSBTVVBFUklPX1VTQl9GTiAyIC8qIEZ1bmN0aW9uIG51bWJlciBvZiBVU0IgY29udHJvbGxlciAqLworCisjZGVmaW5lIGlzX3N1cGVyaW9fZGV2aWNlKHgpIFwKKwkoKCh4KS0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfTlMpICYmIFwKKwkoICAoKHgpLT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9OU184NzQxNSkgXAorCXx8ICgoeCktPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX05TXzg3NTYwX0xJTykgXAorCXx8ICgoeCktPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX05TXzg3NTYwX1VTQikgKSApCisKK2V4dGVybiBpbnQgc3VwZXJpb19maXh1cF9pcnEoc3RydWN0IHBjaV9kZXYgKnBjaWRldik7IC8qIGNhbGxlZCBieSBpb3NhcGljICovCisKKyNlbmRpZiAvKiBfUEFSSVNDX1NVUEVSSU9fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL3N5c3RlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxYzU0MzMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2Mvc3lzdGVtLmgKQEAgLTAsMCArMSwyMTAgQEAKKyNpZm5kZWYgX19QQVJJU0NfU1lTVEVNX0gKKyNkZWZpbmUgX19QQVJJU0NfU1lTVEVNX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS9wc3cuaD4KKworLyogVGhlIHByb2dyYW0gc3RhdHVzIHdvcmQgYXMgYml0ZmllbGRzLiAgKi8KK3N0cnVjdCBwYV9wc3cgeworCXVuc2lnbmVkIGludCB5OjE7CisJdW5zaWduZWQgaW50IHo6MTsKKwl1bnNpZ25lZCBpbnQgcnY6MjsKKwl1bnNpZ25lZCBpbnQgdzoxOworCXVuc2lnbmVkIGludCBlOjE7CisJdW5zaWduZWQgaW50IHM6MTsKKwl1bnNpZ25lZCBpbnQgdDoxOworCisJdW5zaWduZWQgaW50IGg6MTsKKwl1bnNpZ25lZCBpbnQgbDoxOworCXVuc2lnbmVkIGludCBuOjE7CisJdW5zaWduZWQgaW50IHg6MTsKKwl1bnNpZ25lZCBpbnQgYjoxOworCXVuc2lnbmVkIGludCBjOjE7CisJdW5zaWduZWQgaW50IHY6MTsKKwl1bnNpZ25lZCBpbnQgbToxOworCisJdW5zaWduZWQgaW50IGNiOjg7CisKKwl1bnNpZ25lZCBpbnQgbzoxOworCXVuc2lnbmVkIGludCBnOjE7CisJdW5zaWduZWQgaW50IGY6MTsKKwl1bnNpZ25lZCBpbnQgcjoxOworCXVuc2lnbmVkIGludCBxOjE7CisJdW5zaWduZWQgaW50IHA6MTsKKwl1bnNpZ25lZCBpbnQgZDoxOworCXVuc2lnbmVkIGludCBpOjE7Cit9OworCisjaWZkZWYgX19MUDY0X18KKyNkZWZpbmUgcGFfcHN3KHRhc2spICgoc3RydWN0IHBhX3BzdyAqKSAoKGNoYXIgKikgKHRhc2spICsgVEFTS19QVF9QU1cgKyA0KSkKKyNlbHNlCisjZGVmaW5lIHBhX3Bzdyh0YXNrKSAoKHN0cnVjdCBwYV9wc3cgKikgKChjaGFyICopICh0YXNrKSArIFRBU0tfUFRfUFNXKSkKKyNlbmRpZgorCitzdHJ1Y3QgdGFza19zdHJ1Y3Q7CisKK2V4dGVybiBzdHJ1Y3QgdGFza19zdHJ1Y3QgKl9zd2l0Y2hfdG8oc3RydWN0IHRhc2tfc3RydWN0ICosIHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKKworI2RlZmluZSBzd2l0Y2hfdG8ocHJldiwgbmV4dCwgbGFzdCkgZG8gewkJCVwKKwkobGFzdCkgPSBfc3dpdGNoX3RvKHByZXYsIG5leHQpOwkJCVwKK30gd2hpbGUoMCkKKworCisKKy8qIGludGVycnVwdCBjb250cm9sICovCisjZGVmaW5lIGxvY2FsX3NhdmVfZmxhZ3MoeCkJX19hc21fXyBfX3ZvbGF0aWxlX18oInNzbSAwLCAlMCIgOiAiPXIiICh4KSA6IDogIm1lbW9yeSIpCisjZGVmaW5lIGxvY2FsX2lycV9kaXNhYmxlKCkJX19hc21fXyBfX3ZvbGF0aWxlX18oInJzbSAlMCwlJXIwXG4iIDogOiAiaSIgKFBTV19JKSA6ICJtZW1vcnkiICkKKyNkZWZpbmUgbG9jYWxfaXJxX2VuYWJsZSgpCV9fYXNtX18gX192b2xhdGlsZV9fKCJzc20gJTAsJSVyMFxuIiA6IDogImkiIChQU1dfSSkgOiAibWVtb3J5IiApCisKKyNkZWZpbmUgbG9jYWxfaXJxX3NhdmUoeCkgXAorCV9fYXNtX18gX192b2xhdGlsZV9fKCJyc20gJTEsJTAiIDogIj1yIiAoeCkgOiJpIiAoUFNXX0kpIDogIm1lbW9yeSIgKQorI2RlZmluZSBsb2NhbF9pcnFfcmVzdG9yZSh4KSBcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oIm10c20gJTAiIDogOiAiciIgKHgpIDogIm1lbW9yeSIgKQorCisjZGVmaW5lIGlycXNfZGlzYWJsZWQoKQkJCVwKKyh7CQkJCQlcCisJdW5zaWduZWQgbG9uZyBmbGFnczsJCVwKKwlsb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKTsJXAorCShmbGFncyAmIFBTV19JKSA9PSAwOwkJXAorfSkKKworI2RlZmluZSBtZmN0bChyZWcpCSh7CQlcCisJdW5zaWduZWQgbG9uZyBjcjsJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCVwKKwkJIm1mY3RsICIgI3JlZyAiLCUwIiA6CVwKKwkJICI9ciIgKGNyKQkJXAorCSk7CQkJCVwKKwljcjsJCQkJXAorfSkKKworI2RlZmluZSBtdGN0bChnciwgY3IpIFwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibXRjdGwgJTAsJTEiIFwKKwkJOiAvKiBubyBvdXRwdXRzICovIFwKKwkJOiAiciIgKGdyKSwgImkiIChjcikgOiAibWVtb3J5IikKKworLyogdGhlc2UgYXJlIGhlcmUgdG8gZGUtbXlzdGVmeSB0aGUgY2FsbGluZyBjb2RlLCBhbmQgdG8gcHJvdmlkZSBob29rcyAqLworLyogd2hpY2ggSSBuZWVkZWQgZm9yIGRlYnVnZ2luZyBFSUVNIHByb2JsZW1zIC1QQiAqLworI2RlZmluZSBnZXRfZWllbSgpIG1mY3RsKDE1KQorc3RhdGljIGlubGluZSB2b2lkIHNldF9laWVtKHVuc2lnbmVkIGxvbmcgdmFsKQoreworCW10Y3RsKHZhbCwgMTUpOworfQorCisjZGVmaW5lIG1mc3AocmVnKQkoewkJXAorCXVuc2lnbmVkIGxvbmcgY3I7CQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQlcCisJCSJtZnNwICIgI3JlZyAiLCUwIiA6CVwKKwkJICI9ciIgKGNyKQkJXAorCSk7CQkJCVwKKwljcjsJCQkJXAorfSkKKworI2RlZmluZSBtdHNwKGdyLCBjcikgXAorCV9fYXNtX18gX192b2xhdGlsZV9fKCJtdHNwICUwLCUxIiBcCisJCTogLyogbm8gb3V0cHV0cyAqLyBcCisJCTogInIiIChnciksICJpIiAoY3IpIDogIm1lbW9yeSIpCisKKworLyoKKyoqIFRoaXMgaXMgc2ltcGx5IHRoZSBiYXJyaWVyKCkgbWFjcm8gZnJvbSBsaW51eC9rZXJuZWwuaCBidXQgd2hlbiBzZXJpYWwuYworKiogdXNlcyB0cXVldWUuaCB1c2VzIHNtcF9tYigpIGRlZmluZWQgdXNpbmcgYmFycmllcigpLCBsaW51eC9rZXJuZWwuaAorKiogaGFzbid0IHlldCBiZWVuIGluY2x1ZGVkIHlldCBzbyBpdCBmYWlscywgdGh1cyByZXBlYXRpbmcgdGhlIG1hY3JvIGhlcmUuCisqKgorKiogUEEtUklTQyBhcmNoaXRlY3R1cmUgYWxsb3dzIGZvciB3ZWFrbHkgb3JkZXJlZCBtZW1vcnkgYWNjZXNzZXMgYWx0aG91Z2gKKyoqIG5vbmUgb2YgdGhlIHByb2Nlc3NvcnMgdXNlIGl0LiBUaGVyZSBpcyBhIHN0cm9uZyBvcmRlcmVkIGJpdCB0aGF0IGlzCisqKiBzZXQgaW4gdGhlIE8tYml0IG9mIHRoZSBwYWdlIGRpcmVjdG9yeSBlbnRyeS4gT3BlcmF0aW5nIHN5c3RlbXMgdGhhdAorKiogY2FuIG5vdCB0b2xlcmF0ZSBvdXQgb2Ygb3JkZXIgYWNjZXNzZXMgc2hvdWxkIHNldCB0aGlzIGJpdCB3aGVuIG1hcHBpbmcKKyoqIHBhZ2VzLiBUaGUgTy1iaXQgb2YgdGhlIFBTVyBzaG91bGQgYWxzbyBiZSBzZXQgdG8gMSAoSSBkb24ndCBiZWxpZXZlIGFueQorKiogb2YgdGhlIHByb2Nlc3NvciBpbXBsZW1lbnRlZCB0aGUgUFNXIE8tYml0KS4gVGhlIFBDWC1XIEVSUyBzdGF0ZXMgdGhhdAorKiogdGhlIFRMQiBPLWJpdCBpcyBub3QgaW1wbGVtZW50ZWQgc28gdGhlIHBhZ2UgZGlyZWN0b3J5IGRvZXMgbm90IG5lZWQgdG8KKyoqIGhhdmUgdGhlIE8tYml0IHNldCB3aGVuIG1hcHBpbmcgcGFnZXMgKHNlY3Rpb24gMy4xKS4gVGhpcyBzZWN0aW9uIGFsc28KKyoqIHN0YXRlcyB0aGF0IHRoZSBQU1cgWSwgWiwgRywgYW5kIE8gYml0cyBhcmUgbm90IGltcGxlbWVudGVkLgorKiogU28gaXQgbG9va3MgbGlrZSBub3RoaW5nIG5lZWRzIHRvIGJlIGRvbmUgZm9yIHBhcmlzYy1saW51eCAoeWV0KS4KKyoqICh0aGFua3MgdG8gY2hhZGEgZm9yIHRoZSBhYm92ZSBjb21tZW50IC1nZ2cpCisqKgorKiogVGhlIF9fYXNtX18gb3AgYmVsb3cgc2ltcGxlIHByZXZlbnRzIGdjYy9sZCBmcm9tIHJlb3JkZXJpbmcKKyoqIGluc3RydWN0aW9ucyBhY3Jvc3MgdGhlIG1iKCkgImNhbGwiLgorKi8KKyNkZWZpbmUgbWIoKQkJX19hc21fXyBfX3ZvbGF0aWxlX18oIiI6OjoibWVtb3J5IikJLyogYmFycmllcigpICovCisjZGVmaW5lIHJtYigpCQltYigpCisjZGVmaW5lIHdtYigpCQltYigpCisjZGVmaW5lIHNtcF9tYigpCW1iKCkKKyNkZWZpbmUgc21wX3JtYigpCW1iKCkKKyNkZWZpbmUgc21wX3dtYigpCW1iKCkKKyNkZWZpbmUgc21wX3JlYWRfYmFycmllcl9kZXBlbmRzKCkJZG8geyB9IHdoaWxlKDApCisjZGVmaW5lIHJlYWRfYmFycmllcl9kZXBlbmRzKCkJCWRvIHsgfSB3aGlsZSgwKQorCisjZGVmaW5lIHNldF9tYih2YXIsIHZhbHVlKQkJZG8geyB2YXIgPSB2YWx1ZTsgbWIoKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgc2V0X3dtYih2YXIsIHZhbHVlKQkJZG8geyB2YXIgPSB2YWx1ZTsgd21iKCk7IH0gd2hpbGUgKDApCisKKworLyogTERDVywgdGhlIG9ubHkgYXRvbWljIHJlYWQtd3JpdGUgb3BlcmF0aW9uIFBBLVJJU0MgaGFzLiAqc2lnaCouICAqLworI2RlZmluZSBfX2xkY3coYSkgKHsgXAorCXVuc2lnbmVkIF9fcmV0OyBcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oImxkY3cgMCglMSksJTAiIDogIj1yIiAoX19yZXQpIDogInIiIChhKSk7IFwKKwlfX3JldDsgXAorfSkKKworLyogQmVjYXVzZSBrbWFsbG9jIG9ubHkgZ3VhcmFudGVlcyA4LWJ5dGUgYWxpZ25tZW50IGZvciBrbWFsbG9jJ2QgZGF0YSwKKyAgIGFuZCBHQ0Mgb25seSBndWFyYW50ZWVzIDgtYnl0ZSBhbGlnbm1lbnQgZm9yIHN0YWNrIGxvY2Fscywgd2UgY2FuJ3QKKyAgIGJlIGFzc3VyZWQgb2YgMTYtYnl0ZSBhbGlnbm1lbnQgZm9yIGF0b21pYyBsb2NrIGRhdGEgZXZlbiBpZiB3ZQorICAgc3BlY2lmeSAiX19hdHRyaWJ1dGUgKChhbGlnbmVkKDE2KSkpIiBpbiB0aGUgdHlwZSBkZWNsYXJhdGlvbi4gIFNvLAorICAgd2UgdXNlIGEgc3RydWN0IGNvbnRhaW5pbmcgYW4gYXJyYXkgb2YgZm91ciBpbnRzIGZvciB0aGUgYXRvbWljIGxvY2sKKyAgIHR5cGUgYW5kIGR5bmFtaWNhbGx5IHNlbGVjdCB0aGUgMTYtYnl0ZSBhbGlnbmVkIGludCBmcm9tIHRoZSBhcnJheQorICAgZm9yIHRoZSBzZW1hcGhvcmUuICAqLworI2RlZmluZSBfX1BBX0xEQ1dfQUxJR05NRU5UIDE2CisjZGVmaW5lIF9fbGRjd19hbGlnbihhKSAoeyBcCisgIHVuc2lnbmVkIGxvbmcgX19yZXQgPSAodW5zaWduZWQgbG9uZykgJihhKS0+bG9ja1swXTsgICAgICAgIAkJXAorICBfX3JldCA9IChfX3JldCArIF9fUEFfTERDV19BTElHTk1FTlQgLSAxKSAmIH4oX19QQV9MRENXX0FMSUdOTUVOVCAtIDEpOyBcCisgICh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgX19yZXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9KQorCisjaWZkZWYgQ09ORklHX1NNUAorLyoKKyAqIFlvdXIgYmFzaWMgU01QIHNwaW5sb2NrcywgYWxsb3dpbmcgb25seSBhIHNpbmdsZSBDUFUgYW55d2hlcmUKKyAqLworCit0eXBlZGVmIHN0cnVjdCB7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50IGxvY2tbNF07CisjaWZkZWYgQ09ORklHX0RFQlVHX1NQSU5MT0NLCisJdW5zaWduZWQgbG9uZyBtYWdpYzsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgYmFiYmxlOworCWNvbnN0IGNoYXIgKm1vZHVsZTsKKwljaGFyICpiZmlsZTsKKwlpbnQgYmxpbmU7CisJaW50IG9uY3B1OworCXZvaWQgKnByZXZpb3VzOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqIHRhc2s7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfUFJFRU1QVAorCXVuc2lnbmVkIGludCBicmVha19sb2NrOworI2VuZGlmCit9IHNwaW5sb2NrX3Q7CisKKyNkZWZpbmUgX19sb2NrX2FsaWduZWQgX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIi5kYXRhLmxvY2tfYWxpZ25lZCIpKSkKKworI2VuZGlmCisKKyNkZWZpbmUgS0VSTkVMX1NUQVJUICgweDEwMTAwMDAwIC0gMHgxMDAwKQorCisvKiBUaGlzIGlzIGZvciB0aGUgc2VyaWFsaXNhdGlvbiBvZiBQeFRMQiBicm9hZGNhc3RzLiAgQXQgbGVhc3Qgb24gdGhlCisgKiBOIGNsYXNzIHN5c3RlbXMsIG9ubHkgb25lIFB4VExCIGludGVyIHByb2Nlc3NvciBicm9hZGNhc3QgY2FuIGJlCisgKiBhY3RpdmUgYXQgYW55IG9uZSB0aW1lIG9uIHRoZSBNZXJjZWQgYnVzLiAgVGhpcyB0bGIgcHVyZ2UKKyAqIHN5bmNocm9uaXNhdGlvbiBpcyBmYWlybHkgbGlnaHR3ZWlnaHQgYW5kIGhhcm1sZXNzIHNvIHdlIGFjdGl2YXRlCisgKiBpdCBvbiBhbGwgU01QIHN5c3RlbXMgbm90IGp1c3QgdGhlIE4gY2xhc3MuICovCisjaWZkZWYgQ09ORklHX1NNUAorZXh0ZXJuIHNwaW5sb2NrX3QgcGFfdGxiX2xvY2s7CisKKyNkZWZpbmUgcHVyZ2VfdGxiX3N0YXJ0KHgpIHNwaW5fbG9jaygmcGFfdGxiX2xvY2spCisjZGVmaW5lIHB1cmdlX3RsYl9lbmQoeCkgc3Bpbl91bmxvY2soJnBhX3RsYl9sb2NrKQorCisjZWxzZQorCisjZGVmaW5lIHB1cmdlX3RsYl9zdGFydCh4KSBkbyB7IH0gd2hpbGUoMCkKKyNkZWZpbmUgcHVyZ2VfdGxiX2VuZCh4KSBkbyB7IH0gd2hpbGUgKDApCisKKyNlbmRpZgorCisjZGVmaW5lIGFyY2hfYWxpZ25fc3RhY2soeCkgKHgpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3Rlcm1iaXRzLmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvdGVybWJpdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzJiNjM0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL3Rlcm1iaXRzLmgKQEAgLTAsMCArMSwxNzUgQEAKKyNpZm5kZWYgX19BUkNIX1BBUklTQ19URVJNQklUU19IX18KKyNkZWZpbmUgX19BUkNIX1BBUklTQ19URVJNQklUU19IX18KKworI2luY2x1ZGUgPGxpbnV4L3Bvc2l4X3R5cGVzLmg+CisKK3R5cGVkZWYgdW5zaWduZWQgY2hhcgljY190OwordHlwZWRlZiB1bnNpZ25lZCBpbnQJc3BlZWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50CXRjZmxhZ190OworCisjZGVmaW5lIE5DQ1MgMTkKK3N0cnVjdCB0ZXJtaW9zIHsKKwl0Y2ZsYWdfdCBjX2lmbGFnOwkJLyogaW5wdXQgbW9kZSBmbGFncyAqLworCXRjZmxhZ190IGNfb2ZsYWc7CQkvKiBvdXRwdXQgbW9kZSBmbGFncyAqLworCXRjZmxhZ190IGNfY2ZsYWc7CQkvKiBjb250cm9sIG1vZGUgZmxhZ3MgKi8KKwl0Y2ZsYWdfdCBjX2xmbGFnOwkJLyogbG9jYWwgbW9kZSBmbGFncyAqLworCWNjX3QgY19saW5lOwkJCS8qIGxpbmUgZGlzY2lwbGluZSAqLworCWNjX3QgY19jY1tOQ0NTXTsJCS8qIGNvbnRyb2wgY2hhcmFjdGVycyAqLworfTsKKworLyogY19jYyBjaGFyYWN0ZXJzICovCisjZGVmaW5lIFZJTlRSIDAKKyNkZWZpbmUgVlFVSVQgMQorI2RlZmluZSBWRVJBU0UgMgorI2RlZmluZSBWS0lMTCAzCisjZGVmaW5lIFZFT0YgNAorI2RlZmluZSBWVElNRSA1CisjZGVmaW5lIFZNSU4gNgorI2RlZmluZSBWU1dUQyA3CisjZGVmaW5lIFZTVEFSVCA4CisjZGVmaW5lIFZTVE9QIDkKKyNkZWZpbmUgVlNVU1AgMTAKKyNkZWZpbmUgVkVPTCAxMQorI2RlZmluZSBWUkVQUklOVCAxMgorI2RlZmluZSBWRElTQ0FSRCAxMworI2RlZmluZSBWV0VSQVNFIDE0CisjZGVmaW5lIFZMTkVYVCAxNQorI2RlZmluZSBWRU9MMiAxNgorCisKKy8qIGNfaWZsYWcgYml0cyAqLworI2RlZmluZSBJR05CUksJMDAwMDAwMQorI2RlZmluZSBCUktJTlQJMDAwMDAwMgorI2RlZmluZSBJR05QQVIJMDAwMDAwNAorI2RlZmluZSBQQVJNUksJMDAwMDAxMAorI2RlZmluZSBJTlBDSwkwMDAwMDIwCisjZGVmaW5lIElTVFJJUAkwMDAwMDQwCisjZGVmaW5lIElOTENSCTAwMDAxMDAKKyNkZWZpbmUgSUdOQ1IJMDAwMDIwMAorI2RlZmluZSBJQ1JOTAkwMDAwNDAwCisjZGVmaW5lIElVQ0xDCTAwMDEwMDAKKyNkZWZpbmUgSVhPTgkwMDAyMDAwCisjZGVmaW5lIElYQU5ZCTAwMDQwMDAKKyNkZWZpbmUgSVhPRkYJMDAxMDAwMAorI2RlZmluZSBJTUFYQkVMCTAwNDAwMDAKKyNkZWZpbmUgSVVURjgJMDEwMDAwMAorCisvKiBjX29mbGFnIGJpdHMgKi8KKyNkZWZpbmUgT1BPU1QJMDAwMDAwMQorI2RlZmluZSBPTENVQwkwMDAwMDAyCisjZGVmaW5lIE9OTENSCTAwMDAwMDQKKyNkZWZpbmUgT0NSTkwJMDAwMDAxMAorI2RlZmluZSBPTk9DUgkwMDAwMDIwCisjZGVmaW5lIE9OTFJFVAkwMDAwMDQwCisjZGVmaW5lIE9GSUxMCTAwMDAxMDAKKyNkZWZpbmUgT0ZERUwJMDAwMDIwMAorI2RlZmluZSBOTERMWQkwMDAwNDAwCisjZGVmaW5lICAgTkwwCTAwMDAwMDAKKyNkZWZpbmUgICBOTDEJMDAwMDQwMAorI2RlZmluZSBDUkRMWQkwMDAzMDAwCisjZGVmaW5lICAgQ1IwCTAwMDAwMDAKKyNkZWZpbmUgICBDUjEJMDAwMTAwMAorI2RlZmluZSAgIENSMgkwMDAyMDAwCisjZGVmaW5lICAgQ1IzCTAwMDMwMDAKKyNkZWZpbmUgVEFCRExZCTAwMTQwMDAKKyNkZWZpbmUgICBUQUIwCTAwMDAwMDAKKyNkZWZpbmUgICBUQUIxCTAwMDQwMDAKKyNkZWZpbmUgICBUQUIyCTAwMTAwMDAKKyNkZWZpbmUgICBUQUIzCTAwMTQwMDAKKyNkZWZpbmUgICBYVEFCUwkwMDE0MDAwCisjZGVmaW5lIEJTRExZCTAwMjAwMDAKKyNkZWZpbmUgICBCUzAJMDAwMDAwMAorI2RlZmluZSAgIEJTMQkwMDIwMDAwCisjZGVmaW5lIFZURExZCTAwNDAwMDAKKyNkZWZpbmUgICBWVDAJMDAwMDAwMAorI2RlZmluZSAgIFZUMQkwMDQwMDAwCisjZGVmaW5lIEZGRExZCTAxMDAwMDAKKyNkZWZpbmUgICBGRjAJMDAwMDAwMAorI2RlZmluZSAgIEZGMQkwMTAwMDAwCisKKy8qIGNfY2ZsYWcgYml0IG1lYW5pbmcgKi8KKyNkZWZpbmUgQ0JBVUQgICAwMDEwMDE3CisjZGVmaW5lICBCMCAgICAgMDAwMDAwMCAgICAgICAgIC8qIGhhbmcgdXAgKi8KKyNkZWZpbmUgIEI1MCAgICAwMDAwMDAxCisjZGVmaW5lICBCNzUgICAgMDAwMDAwMgorI2RlZmluZSAgQjExMCAgIDAwMDAwMDMKKyNkZWZpbmUgIEIxMzQgICAwMDAwMDA0CisjZGVmaW5lICBCMTUwICAgMDAwMDAwNQorI2RlZmluZSAgQjIwMCAgIDAwMDAwMDYKKyNkZWZpbmUgIEIzMDAgICAwMDAwMDA3CisjZGVmaW5lICBCNjAwICAgMDAwMDAxMAorI2RlZmluZSAgQjEyMDAgIDAwMDAwMTEKKyNkZWZpbmUgIEIxODAwICAwMDAwMDEyCisjZGVmaW5lICBCMjQwMCAgMDAwMDAxMworI2RlZmluZSAgQjQ4MDAgIDAwMDAwMTQKKyNkZWZpbmUgIEI5NjAwICAwMDAwMDE1CisjZGVmaW5lICBCMTkyMDAgMDAwMDAxNgorI2RlZmluZSAgQjM4NDAwIDAwMDAwMTcKKyNkZWZpbmUgRVhUQSBCMTkyMDAKKyNkZWZpbmUgRVhUQiBCMzg0MDAKKyNkZWZpbmUgQ1NJWkUgICAwMDAwMDYwCisjZGVmaW5lICAgQ1M1ICAgMDAwMDAwMAorI2RlZmluZSAgIENTNiAgIDAwMDAwMjAKKyNkZWZpbmUgICBDUzcgICAwMDAwMDQwCisjZGVmaW5lICAgQ1M4ICAgMDAwMDA2MAorI2RlZmluZSBDU1RPUEIgIDAwMDAxMDAKKyNkZWZpbmUgQ1JFQUQgICAwMDAwMjAwCisjZGVmaW5lIFBBUkVOQiAgMDAwMDQwMAorI2RlZmluZSBQQVJPREQgIDAwMDEwMDAKKyNkZWZpbmUgSFVQQ0wgICAwMDAyMDAwCisjZGVmaW5lIENMT0NBTCAgMDAwNDAwMAorI2RlZmluZSBDQkFVREVYIDAwMTAwMDAKKyNkZWZpbmUgICAgQjU3NjAwIDAwMTAwMDEKKyNkZWZpbmUgICBCMTE1MjAwIDAwMTAwMDIKKyNkZWZpbmUgICBCMjMwNDAwIDAwMTAwMDMKKyNkZWZpbmUgICBCNDYwODAwIDAwMTAwMDQKKyNkZWZpbmUgICBCNTAwMDAwIDAwMTAwMDUKKyNkZWZpbmUgICBCNTc2MDAwIDAwMTAwMDYKKyNkZWZpbmUgICBCOTIxNjAwIDAwMTAwMDcKKyNkZWZpbmUgIEIxMDAwMDAwIDAwMTAwMTAKKyNkZWZpbmUgIEIxMTUyMDAwIDAwMTAwMTEKKyNkZWZpbmUgIEIxNTAwMDAwIDAwMTAwMTIKKyNkZWZpbmUgIEIyMDAwMDAwIDAwMTAwMTMKKyNkZWZpbmUgIEIyNTAwMDAwIDAwMTAwMTQKKyNkZWZpbmUgIEIzMDAwMDAwIDAwMTAwMTUKKyNkZWZpbmUgIEIzNTAwMDAwIDAwMTAwMTYKKyNkZWZpbmUgIEI0MDAwMDAwIDAwMTAwMTcKKyNkZWZpbmUgQ0lCQVVEICAgIDAwMjAwMzYwMDAwMCAgLyogaW5wdXQgYmF1ZCByYXRlIChub3QgdXNlZCkgKi8KKyNkZWZpbmUgQ01TUEFSICAgIDAxMDAwMDAwMDAwMCAgICAgICAgICAvKiBtYXJrIG9yIHNwYWNlIChzdGljaykgcGFyaXR5ICovCisjZGVmaW5lIENSVFNDVFMgICAwMjAwMDAwMDAwMDAgICAgICAgICAgLyogZmxvdyBjb250cm9sICovCisKKworLyogY19sZmxhZyBiaXRzICovCisjZGVmaW5lIElTSUcgICAgMDAwMDAwMQorI2RlZmluZSBJQ0FOT04gIDAwMDAwMDIKKyNkZWZpbmUgWENBU0UgICAwMDAwMDA0CisjZGVmaW5lIEVDSE8gICAgMDAwMDAxMAorI2RlZmluZSBFQ0hPRSAgIDAwMDAwMjAKKyNkZWZpbmUgRUNIT0sgICAwMDAwMDQwCisjZGVmaW5lIEVDSE9OTCAgMDAwMDEwMAorI2RlZmluZSBOT0ZMU0ggIDAwMDAyMDAKKyNkZWZpbmUgVE9TVE9QICAwMDAwNDAwCisjZGVmaW5lIEVDSE9DVEwgMDAwMTAwMAorI2RlZmluZSBFQ0hPUFJUIDAwMDIwMDAKKyNkZWZpbmUgRUNIT0tFICAwMDA0MDAwCisjZGVmaW5lIEZMVVNITyAgMDAxMDAwMAorI2RlZmluZSBQRU5ESU4gIDAwNDAwMDAKKyNkZWZpbmUgSUVYVEVOICAwMTAwMDAwCisKKy8qIHRjZmxvdygpIGFuZCBUQ1hPTkMgdXNlIHRoZXNlICovCisjZGVmaW5lCVRDT09GRgkJMAorI2RlZmluZQlUQ09PTgkJMQorI2RlZmluZQlUQ0lPRkYJCTIKKyNkZWZpbmUJVENJT04JCTMKKworLyogdGNmbHVzaCgpIGFuZCBUQ0ZMU0ggdXNlIHRoZXNlICovCisjZGVmaW5lCVRDSUZMVVNICTAKKyNkZWZpbmUJVENPRkxVU0gJMQorI2RlZmluZQlUQ0lPRkxVU0gJMgorCisvKiB0Y3NldGF0dHIgdXNlcyB0aGVzZSAqLworI2RlZmluZQlUQ1NBTk9XCQkwCisjZGVmaW5lCVRDU0FEUkFJTgkxCisjZGVmaW5lCVRDU0FGTFVTSAkyCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3Rlcm1pb3MuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy90ZXJtaW9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk2NWU4ZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy90ZXJtaW9zLmgKQEAgLTAsMCArMSwxMDYgQEAKKyNpZm5kZWYgX1BBUklTQ19URVJNSU9TX0gKKyNkZWZpbmUgX1BBUklTQ19URVJNSU9TX0gKKworI2luY2x1ZGUgPGFzbS90ZXJtYml0cy5oPgorI2luY2x1ZGUgPGFzbS9pb2N0bHMuaD4KKworc3RydWN0IHdpbnNpemUgeworCXVuc2lnbmVkIHNob3J0IHdzX3JvdzsKKwl1bnNpZ25lZCBzaG9ydCB3c19jb2w7CisJdW5zaWduZWQgc2hvcnQgd3NfeHBpeGVsOworCXVuc2lnbmVkIHNob3J0IHdzX3lwaXhlbDsKK307CisKKyNkZWZpbmUgTkNDIDgKK3N0cnVjdCB0ZXJtaW8geworCXVuc2lnbmVkIHNob3J0IGNfaWZsYWc7CQkvKiBpbnB1dCBtb2RlIGZsYWdzICovCisJdW5zaWduZWQgc2hvcnQgY19vZmxhZzsJCS8qIG91dHB1dCBtb2RlIGZsYWdzICovCisJdW5zaWduZWQgc2hvcnQgY19jZmxhZzsJCS8qIGNvbnRyb2wgbW9kZSBmbGFncyAqLworCXVuc2lnbmVkIHNob3J0IGNfbGZsYWc7CQkvKiBsb2NhbCBtb2RlIGZsYWdzICovCisJdW5zaWduZWQgY2hhciBjX2xpbmU7CQkvKiBsaW5lIGRpc2NpcGxpbmUgKi8KKwl1bnNpZ25lZCBjaGFyIGNfY2NbTkNDXTsJLyogY29udHJvbCBjaGFyYWN0ZXJzICovCit9OworCisvKiBtb2RlbSBsaW5lcyAqLworI2RlZmluZSBUSU9DTV9MRQkweDAwMQorI2RlZmluZSBUSU9DTV9EVFIJMHgwMDIKKyNkZWZpbmUgVElPQ01fUlRTCTB4MDA0CisjZGVmaW5lIFRJT0NNX1NUCTB4MDA4CisjZGVmaW5lIFRJT0NNX1NSCTB4MDEwCisjZGVmaW5lIFRJT0NNX0NUUwkweDAyMAorI2RlZmluZSBUSU9DTV9DQVIJMHgwNDAKKyNkZWZpbmUgVElPQ01fUk5HCTB4MDgwCisjZGVmaW5lIFRJT0NNX0RTUgkweDEwMAorI2RlZmluZSBUSU9DTV9DRAlUSU9DTV9DQVIKKyNkZWZpbmUgVElPQ01fUkkJVElPQ01fUk5HCisjZGVmaW5lIFRJT0NNX09VVDEJMHgyMDAwCisjZGVmaW5lIFRJT0NNX09VVDIJMHg0MDAwCisjZGVmaW5lIFRJT0NNX0xPT1AJMHg4MDAwCisKKy8qIGlvY3RsIChmZCwgVElPQ1NFUkdFVExTUiwgJnJlc3VsdCkgd2hlcmUgcmVzdWx0IG1heSBiZSBhcyBiZWxvdyAqLworCisvKiBsaW5lIGRpc2NpcGxpbmVzICovCisjZGVmaW5lIE5fVFRZCQkwCisjZGVmaW5lIE5fU0xJUAkJMQorI2RlZmluZSBOX01PVVNFCQkyCisjZGVmaW5lIE5fUFBQCQkzCisjZGVmaW5lIE5fU1RSSVAJCTQKKyNkZWZpbmUgTl9BWDI1CQk1CisjZGVmaW5lIE5fWDI1CQk2CS8qIFguMjUgYXN5bmMgKi8KKyNkZWZpbmUgTl82UEFDSwkJNworI2RlZmluZSBOX01BU0MJCTgJLyogUmVzZXJ2ZWQgZm9yIE1vYml0ZXggbW9kdWxlIDxrYXpAY2FmZS5uZXQ+ICovCisjZGVmaW5lIE5fUjM5NjQJCTkJLyogUmVzZXJ2ZWQgZm9yIFNpbWF0aWMgUjM5NjQgbW9kdWxlICovCisjZGVmaW5lIE5fUFJPRklCVVNfRkRMCTEwCS8qIFJlc2VydmVkIGZvciBQcm9maWJ1cyA8RGF2ZUBtdmhpLmNvbT4gKi8KKyNkZWZpbmUgTl9JUkRBCQkxMQkvKiBMaW51eCBJUiAtIGh0dHA6Ly9pcmRhLnNvdXJjZWZvcmdlLm5ldC8gKi8KKyNkZWZpbmUgTl9TTVNCTE9DSwkxMgkvKiBTTVMgYmxvY2sgbW9kZSAtIGZvciB0YWxraW5nIHRvIEdTTSBkYXRhIGNhcmRzIGFib3V0IFNNUyBtZXNzYWdlcyAqLworI2RlZmluZSBOX0hETEMJCTEzCS8qIHN5bmNocm9ub3VzIEhETEMgKi8KKyNkZWZpbmUgTl9TWU5DX1BQUAkxNAorI2RlZmluZSBOX0hDSQkJMTUgIC8qIEJsdWV0b290aCBIQ0kgVUFSVCAqLworCisjaWZkZWYgX19LRVJORUxfXworCisvKglpbnRyPV5DCQlxdWl0PV5cCQllcmFzZT1kZWwJa2lsbD1eVQorCWVvZj1eRAkJdnRpbWU9XDAJdm1pbj1cMQkJc3h0Yz1cMAorCXN0YXJ0PV5RCXN0b3A9XlMJCXN1c3A9XloJCWVvbD1cMAorCXJlcHJpbnQ9XlIJZGlzY2FyZD1eVQl3ZXJhc2U9XlcJbG5leHQ9XlYKKwllb2wyPVwwCisqLworI2RlZmluZSBJTklUX0NfQ0MgIlwwMDNcMDM0XDE3N1wwMjVcMDA0XDBcMVwwXDAyMVwwMjNcMDMyXDBcMDIyXDAxN1wwMjdcMDI2XDAiCisKKy8qCisgKiBUcmFuc2xhdGUgYSAidGVybWlvIiBzdHJ1Y3R1cmUgaW50byBhICJ0ZXJtaW9zIi4gVWdoLgorICovCisjZGVmaW5lIFNFVF9MT1dfVEVSTUlPU19CSVRTKHRlcm1pb3MsIHRlcm1pbywgeCkgeyBcCisJdW5zaWduZWQgc2hvcnQgX190bXA7IFwKKwlnZXRfdXNlcihfX3RtcCwmKHRlcm1pbyktPngpOyBcCisJKih1bnNpZ25lZCBzaG9ydCAqKSAmKHRlcm1pb3MpLT54ID0gX190bXA7IFwKK30KKworI2RlZmluZSB1c2VyX3Rlcm1pb190b19rZXJuZWxfdGVybWlvcyh0ZXJtaW9zLCB0ZXJtaW8pIFwKKyh7IFwKKwlTRVRfTE9XX1RFUk1JT1NfQklUUyh0ZXJtaW9zLCB0ZXJtaW8sIGNfaWZsYWcpOyBcCisJU0VUX0xPV19URVJNSU9TX0JJVFModGVybWlvcywgdGVybWlvLCBjX29mbGFnKTsgXAorCVNFVF9MT1dfVEVSTUlPU19CSVRTKHRlcm1pb3MsIHRlcm1pbywgY19jZmxhZyk7IFwKKwlTRVRfTE9XX1RFUk1JT1NfQklUUyh0ZXJtaW9zLCB0ZXJtaW8sIGNfbGZsYWcpOyBcCisJY29weV9mcm9tX3VzZXIoKHRlcm1pb3MpLT5jX2NjLCAodGVybWlvKS0+Y19jYywgTkNDKTsgXAorfSkKKworLyoKKyAqIFRyYW5zbGF0ZSBhICJ0ZXJtaW9zIiBzdHJ1Y3R1cmUgaW50byBhICJ0ZXJtaW8iLiBVZ2guCisgKi8KKyNkZWZpbmUga2VybmVsX3Rlcm1pb3NfdG9fdXNlcl90ZXJtaW8odGVybWlvLCB0ZXJtaW9zKSBcCisoeyBcCisJcHV0X3VzZXIoKHRlcm1pb3MpLT5jX2lmbGFnLCAmKHRlcm1pbyktPmNfaWZsYWcpOyBcCisJcHV0X3VzZXIoKHRlcm1pb3MpLT5jX29mbGFnLCAmKHRlcm1pbyktPmNfb2ZsYWcpOyBcCisJcHV0X3VzZXIoKHRlcm1pb3MpLT5jX2NmbGFnLCAmKHRlcm1pbyktPmNfY2ZsYWcpOyBcCisJcHV0X3VzZXIoKHRlcm1pb3MpLT5jX2xmbGFnLCAmKHRlcm1pbyktPmNfbGZsYWcpOyBcCisJcHV0X3VzZXIoKHRlcm1pb3MpLT5jX2xpbmUsICAmKHRlcm1pbyktPmNfbGluZSk7IFwKKwljb3B5X3RvX3VzZXIoKHRlcm1pbyktPmNfY2MsICh0ZXJtaW9zKS0+Y19jYywgTkNDKTsgXAorfSkKKworI2RlZmluZSB1c2VyX3Rlcm1pb3NfdG9fa2VybmVsX3Rlcm1pb3MoaywgdSkgY29weV9mcm9tX3VzZXIoaywgdSwgc2l6ZW9mKHN0cnVjdCB0ZXJtaW9zKSkKKyNkZWZpbmUga2VybmVsX3Rlcm1pb3NfdG9fdXNlcl90ZXJtaW9zKHUsIGspIGNvcHlfdG9fdXNlcih1LCBrLCBzaXplb2Yoc3RydWN0IHRlcm1pb3MpKQorCisjZW5kaWYJLyogX19LRVJORUxfXyAqLworCisjZW5kaWYJLyogX1BBUklTQ19URVJNSU9TX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy90aHJlYWRfaW5mby5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL3RocmVhZF9pbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU5YjdmOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy90aHJlYWRfaW5mby5oCkBAIC0wLDAgKzEsODAgQEAKKyNpZm5kZWYgX0FTTV9QQVJJU0NfVEhSRUFEX0lORk9fSAorI2RlZmluZSBfQVNNX1BBUklTQ19USFJFQURfSU5GT19ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorCitzdHJ1Y3QgdGhyZWFkX2luZm8geworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsJLyogbWFpbiB0YXNrIHN0cnVjdHVyZSAqLworCXN0cnVjdCBleGVjX2RvbWFpbiAqZXhlY19kb21haW47LyogZXhlY3V0aW9uIGRvbWFpbiAqLworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CQkvKiB0aHJlYWRfaW5mbyBmbGFncyAoc2VlIFRJRl8qKSAqLworCW1tX3NlZ21lbnRfdCBhZGRyX2xpbWl0OwkvKiB1c2VyLWxldmVsIGFkZHJlc3Mgc3BhY2UgbGltaXQgKi8KKwlfX3UzMiBjcHU7CQkJLyogY3VycmVudCBDUFUgKi8KKwlfX3MzMiBwcmVlbXB0X2NvdW50OwkJLyogMD1wcmVtcHRhYmxlLCA8MD1CVUc7IHdpbGwgYWxzbyBzZXJ2ZSBhcyBiaC1jb3VudGVyICovCisJc3RydWN0IHJlc3RhcnRfYmxvY2sgcmVzdGFydF9ibG9jazsKK307CisKKyNkZWZpbmUgSU5JVF9USFJFQURfSU5GTyh0c2spCQkJXAorewkJCQkJCVwKKwkudGFzawkJPSAmdHNrLAkJCVwKKwkuZXhlY19kb21haW4JPSAmZGVmYXVsdF9leGVjX2RvbWFpbiwJXAorCS5mbGFncwkJPSAwLAkJCVwKKwkuY3B1CQk9IDAsCQkJXAorCS5hZGRyX2xpbWl0CT0gS0VSTkVMX0RTLAkJXAorCS5wcmVlbXB0X2NvdW50CT0gMSwJCQlcCisgIAkucmVzdGFydF9ibG9jawk9IHsJCQlcCisJCS5mbiA9IGRvX25vX3Jlc3RhcnRfc3lzY2FsbAlcCisJfQkJCQkJXAorfQorCisjZGVmaW5lIGluaXRfdGhyZWFkX2luZm8gICAgICAgIChpbml0X3RocmVhZF91bmlvbi50aHJlYWRfaW5mbykKKyNkZWZpbmUgaW5pdF9zdGFjayAgICAgICAgICAgICAgKGluaXRfdGhyZWFkX3VuaW9uLnN0YWNrKQorCisvKiB0aHJlYWQgaW5mb3JtYXRpb24gYWxsb2NhdGlvbiAqLworCisjZGVmaW5lIFRIUkVBRF9PUkRFUiAgICAgICAgICAgIDIKKy8qIEJlIHN1cmUgdG8gaHVudCBhbGwgcmVmZXJlbmNlcyB0byB0aGlzIGRvd24gd2hlbiB5b3UgY2hhbmdlIHRoZSBzaXplIG9mCisgKiB0aGUga2VybmVsIHN0YWNrICovCisjZGVmaW5lIFRIUkVBRF9TSVpFICAgICAgICAgICAgIChQQUdFX1NJWkUgPDwgVEhSRUFEX09SREVSKQorI2RlZmluZSBUSFJFQURfU0hJRlQgICAgICAgICAgICAoUEFHRV9TSElGVCArIFRIUkVBRF9PUkRFUikKKworI2RlZmluZSBhbGxvY190aHJlYWRfaW5mbyh0c2spICgoc3RydWN0IHRocmVhZF9pbmZvICopIFwKKwkJCV9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwgVEhSRUFEX09SREVSKSkKKyNkZWZpbmUgZnJlZV90aHJlYWRfaW5mbyh0aSkgICAgZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZykgKHRpKSwgVEhSRUFEX09SREVSKQorI2RlZmluZSBnZXRfdGhyZWFkX2luZm8odGkpICAgICBnZXRfdGFza19zdHJ1Y3QoKHRpKS0+dGFzaykKKyNkZWZpbmUgcHV0X3RocmVhZF9pbmZvKHRpKSAgICAgcHV0X3Rhc2tfc3RydWN0KCh0aSktPnRhc2spCisKKworLyogaG93IHRvIGdldCB0aGUgdGhyZWFkIGluZm9ybWF0aW9uIHN0cnVjdCBmcm9tIEMgKi8KKyNkZWZpbmUgY3VycmVudF90aHJlYWRfaW5mbygpCSgoc3RydWN0IHRocmVhZF9pbmZvICopbWZjdGwoMzApKQorCisjZW5kaWYgLyogIV9fQVNTRU1CTFkgKi8KKworI2RlZmluZSBQUkVFTVBUX0FDVElWRSAgICAgICAgICAweDEwMDAwMDAwCisKKy8qCisgKiB0aHJlYWQgaW5mb3JtYXRpb24gZmxhZ3MKKyAqLworI2RlZmluZSBUSUZfU1lTQ0FMTF9UUkFDRQkwCS8qIHN5c2NhbGwgdHJhY2UgYWN0aXZlICovCisjZGVmaW5lIFRJRl9OT1RJRllfUkVTVU1FCTEJLyogcmVzdW1wdGlvbiBub3RpZmljYXRpb24gcmVxdWVzdGVkICovCisjZGVmaW5lIFRJRl9TSUdQRU5ESU5HCQkyCS8qIHNpZ25hbCBwZW5kaW5nICovCisjZGVmaW5lIFRJRl9ORUVEX1JFU0NIRUQJMwkvKiByZXNjaGVkdWxpbmcgbmVjZXNzYXJ5ICovCisjZGVmaW5lIFRJRl9QT0xMSU5HX05SRkxBRwk0CS8qIHRydWUgaWYgcG9sbF9pZGxlKCkgaXMgcG9sbGluZyBUSUZfTkVFRF9SRVNDSEVEICovCisjZGVmaW5lIFRJRl8zMkJJVCAgICAgICAgICAgICAgIDUgICAgICAgLyogMzIgYml0IGJpbmFyeSAqLworI2RlZmluZSBUSUZfTUVNRElFCQk2CisKKyNkZWZpbmUgX1RJRl9TWVNDQUxMX1RSQUNFCSgxIDw8IFRJRl9TWVNDQUxMX1RSQUNFKQorI2RlZmluZSBfVElGX05PVElGWV9SRVNVTUUJKDEgPDwgVElGX05PVElGWV9SRVNVTUUpCisjZGVmaW5lIF9USUZfU0lHUEVORElORwkJKDEgPDwgVElGX1NJR1BFTkRJTkcpCisjZGVmaW5lIF9USUZfTkVFRF9SRVNDSEVECSgxIDw8IFRJRl9ORUVEX1JFU0NIRUQpCisjZGVmaW5lIF9USUZfUE9MTElOR19OUkZMQUcJKDEgPDwgVElGX1BPTExJTkdfTlJGTEFHKQorI2RlZmluZSBfVElGXzMyQklUCQkoMSA8PCBUSUZfMzJCSVQpCisKKyNkZWZpbmUgX1RJRl9VU0VSX1dPUktfTUFTSyAgICAgKF9USUZfTk9USUZZX1JFU1VNRSB8IF9USUZfU0lHUEVORElORyB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9USUZfTkVFRF9SRVNDSEVEKQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX0FTTV9QQVJJU0NfVEhSRUFEX0lORk9fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3RpbWV4LmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvdGltZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjY4ZDc3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL3RpbWV4LmgKQEAgLTAsMCArMSwyMCBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLXBhcmlzYy90aW1leC5oCisgKgorICogUEFSSVNDIGFyY2hpdGVjdHVyZSB0aW1leCBzcGVjaWZpY2F0aW9ucworICovCisjaWZuZGVmIF9BU01QQVJJU0NfVElNRVhfSAorI2RlZmluZSBfQVNNUEFSSVNDX1RJTUVYX0gKKworI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKworI2RlZmluZSBDTE9DS19USUNLX1JBVEUJMTE5MzE4MCAvKiBVbmRlcmx5aW5nIEhaICovCisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBjeWNsZXNfdDsKKworc3RhdGljIGlubGluZSBjeWNsZXNfdCBnZXRfY3ljbGVzICh2b2lkKQoreworCXJldHVybiBtZmN0bCgxNik7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3RsYi5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL3RsYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzMTA3YTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2MvdGxiLmgKQEAgLTAsMCArMSwyNyBAQAorI2lmbmRlZiBfUEFSSVNDX1RMQl9ICisjZGVmaW5lIF9QQVJJU0NfVExCX0gKKworI2RlZmluZSB0bGJfZmx1c2godGxiKQkJCVwKK2RvIHsJaWYgKCh0bGIpLT5mdWxsbW0pCQlcCisJCWZsdXNoX3RsYl9tbSgodGxiKS0+bW0pO1wKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgdGxiX3N0YXJ0X3ZtYSh0bGIsIHZtYSkgXAorZG8gewlpZiAoISh0bGIpLT5mdWxsbW0pCVwKKwkJZmx1c2hfY2FjaGVfcmFuZ2Uodm1hLCB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX2VuZCk7IFwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgdGxiX2VuZF92bWEodGxiLCB2bWEpCVwKK2RvIHsJaWYgKCEodGxiKS0+ZnVsbG1tKQlcCisJCWZsdXNoX3RsYl9yYW5nZSh2bWEsIHZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fZW5kKTsgXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBfX3RsYl9yZW1vdmVfdGxiX2VudHJ5KHRsYiwgcHRlLCBhZGRyZXNzKSBcCisJZG8geyB9IHdoaWxlICgwKQorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdGxiLmg+CisKKyNkZWZpbmUgX19wbWRfZnJlZV90bGIodGxiLCBwbWQpCXBtZF9mcmVlKHBtZCkKKyNkZWZpbmUgX19wdGVfZnJlZV90bGIodGxiLCBwdGUpCXB0ZV9mcmVlKHB0ZSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvdGxiZmx1c2guaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy90bGJmbHVzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViMjdiNzgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2MvdGxiZmx1c2guaApAQCAtMCwwICsxLDk1IEBACisjaWZuZGVmIF9QQVJJU0NfVExCRkxVU0hfSAorI2RlZmluZSBfUEFSSVNDX1RMQkZMVVNIX0gKKworLyogVExCIGZsdXNoaW5nIHJvdXRpbmVzLi4uLiAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KKworZXh0ZXJuIHZvaWQgZmx1c2hfdGxiX2FsbCh2b2lkKTsKKworLyoKKyAqIGZsdXNoX3RsYl9tbSgpCisgKgorICogWFhYIFRoaXMgY29kZSBpcyBOT1QgdmFsaWQgZm9yIEhQLVVYIGNvbXBhdGliaWxpdHkgcHJvY2Vzc2VzLAorICogKGFsdGhvdWdoIGl0IHdpbGwgcHJvYmFibHkgd29yayA5OSUgb2YgdGhlIHRpbWUpLiBIUC1VWAorICogcHJvY2Vzc2VzIGFyZSBmcmVlIHRvIHBsYXkgd2l0aCB0aGUgc3BhY2UgaWQncyBhbmQgc2F2ZSB0aGVtCisgKiBvdmVyIGxvbmcgcGVyaW9kcyBvZiB0aW1lLCBldGMuIHNvIHdlIGhhdmUgdG8gcHJlc2VydmUgdGhlCisgKiBzcGFjZSBhbmQganVzdCBmbHVzaCB0aGUgZW50aXJlIHRsYi4gV2UgbmVlZCB0byBjaGVjayB0aGUKKyAqIHBlcnNvbmFsaXR5IGluIG9yZGVyIHRvIGRvIHRoYXQsIGJ1dCB0aGUgcGVyc29uYWxpdHkgaXMgbm90CisgKiBjdXJyZW50bHkgYmVpbmcgc2V0IGNvcnJlY3RseS4KKyAqCisgKiBPZiBjb3Vyc2UsIExpbnV4IHByb2Nlc3NlcyBjb3VsZCBkbyB0aGUgc2FtZSB0aGluZywgYnV0CisgKiB3ZSBkb24ndCBzdXBwb3J0IHRoYXQgKGFuZCB0aGUgY29tcGlsZXJzLCBkeW5hbWljIGxpbmtlciwKKyAqIGV0Yy4gZG8gbm90IGRvIHRoYXQpLgorICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJQlVHX09OKG1tID09ICZpbml0X21tKTsgLyogU2hvdWxkIG5ldmVyIGhhcHBlbiAqLworCisjaWZkZWYgQ09ORklHX1NNUAorCWZsdXNoX3RsYl9hbGwoKTsKKyNlbHNlCisJaWYgKG1tKSB7CisJCWlmIChtbS0+Y29udGV4dCAhPSAwKQorCQkJZnJlZV9zaWQobW0tPmNvbnRleHQpOworCQltbS0+Y29udGV4dCA9IGFsbG9jX3NpZCgpOworCQlpZiAobW0gPT0gY3VycmVudC0+YWN0aXZlX21tKQorCQkJbG9hZF9jb250ZXh0KG1tLT5jb250ZXh0KTsKKwl9CisjZW5kaWYKK30KKworZXh0ZXJuIF9faW5saW5lX18gdm9pZCBmbHVzaF90bGJfcGd0YWJsZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworfQorIAorc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCXVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwkvKiBGb3Igb25lIHBhZ2UsIGl0J3Mgbm90IHdvcnRoIHRlc3RpbmcgdGhlIHNwbGl0X3RsYiB2YXJpYWJsZSAqLworCisJbWIoKTsKKwltdHNwKHZtYS0+dm1fbW0tPmNvbnRleHQsMSk7CisJcHVyZ2VfdGxiX3N0YXJ0KCk7CisJcGR0bGIoYWRkcik7CisJcGl0bGIoYWRkcik7CisJcHVyZ2VfdGxiX2VuZCgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCXVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCXVuc2lnbmVkIGxvbmcgbnBhZ2VzOworCisJCisJbnBhZ2VzID0gKChlbmQgLSAoc3RhcnQgJiBQQUdFX01BU0spKSArIChQQUdFX1NJWkUgLSAxKSkgPj4gUEFHRV9TSElGVDsKKwlpZiAobnBhZ2VzID49IDUxMikgIC8qIFhYWCBhcmJpdHJhcnksIHNob3VsZCBiZSB0dW5lZCAqLworCQlmbHVzaF90bGJfYWxsKCk7CisJZWxzZSB7CisKKwkJbXRzcCh2bWEtPnZtX21tLT5jb250ZXh0LDEpOworCQlpZiAoc3BsaXRfdGxiKSB7CisJCQlwdXJnZV90bGJfc3RhcnQoKTsKKwkJCXdoaWxlIChucGFnZXMtLSkgeworCQkJCXBkdGxiKHN0YXJ0KTsKKwkJCQlwaXRsYihzdGFydCk7CisJCQkJc3RhcnQgKz0gUEFHRV9TSVpFOworCQkJfQorCQkJcHVyZ2VfdGxiX2VuZCgpOworCQl9IGVsc2UgeworCQkJcHVyZ2VfdGxiX3N0YXJ0KCk7CisJCQl3aGlsZSAobnBhZ2VzLS0pIHsKKwkJCQlwZHRsYihzdGFydCk7CisJCQkJc3RhcnQgKz0gUEFHRV9TSVpFOworCQkJfQorCQkJcHVyZ2VfdGxiX2VuZCgpOworCQl9CisJfQorfQorCisjZGVmaW5lIGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2Uoc3RhcnQsIGVuZCkgZmx1c2hfdGxiX2FsbCgpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3RvcG9sb2d5LmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvdG9wb2xvZ3kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODEzM2ViCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL3RvcG9sb2d5LmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9BU01fUEFSSVNDX1RPUE9MT0dZX0gKKyNkZWZpbmUgX0FTTV9QQVJJU0NfVE9QT0xPR1lfSAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdG9wb2xvZ3kuaD4KKworI2VuZGlmIC8qIF9BU01fUEFSSVNDX1RPUE9MT0dZX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy90cmFwcy5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL3RyYXBzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk0NWY5OQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy90cmFwcy5oCkBAIC0wLDAgKzEsMTYgQEAKKyNpZm5kZWYgX19BU01fVFJBUFNfSAorI2RlZmluZSBfX0FTTV9UUkFQU19ICisKKyNpZmRlZiBfX0tFUk5FTF9fCitzdHJ1Y3QgcHRfcmVnczsKKworLyogdHJhcHMuYyAqLwordm9pZCBwYXJpc2NfdGVybWluYXRlKGNoYXIgKm1zZywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCWludCBjb2RlLCB1bnNpZ25lZCBsb25nIG9mZnNldCk7CisKKy8qIG1tL2ZhdWx0LmMgKi8KK3ZvaWQgZG9fcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBjb2RlLAorCQl1bnNpZ25lZCBsb25nIGFkZHJlc3MpOworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3R5cGVzLmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmU3YTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL3R5cGVzLmgKQEAgLTAsMCArMSw2NSBAQAorI2lmbmRlZiBfUEFSSVNDX1RZUEVTX0gKKyNkZWZpbmUgX1BBUklTQ19UWVBFU19ICisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgdW1vZGVfdDsKKworLyoKKyAqIF9feHggaXMgb2s6IGl0IGRvZXNuJ3QgcG9sbHV0ZSB0aGUgUE9TSVggbmFtZXNwYWNlLiBVc2UgdGhlc2UgaW4gdGhlCisgKiBoZWFkZXIgZmlsZXMgZXhwb3J0ZWQgdG8gdXNlciBzcGFjZQorICovCisKK3R5cGVkZWYgX19zaWduZWRfXyBjaGFyIF9fczg7Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191ODsKKwordHlwZWRlZiBfX3NpZ25lZF9fIHNob3J0IF9fczE2OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX3UxNjsKKwordHlwZWRlZiBfX3NpZ25lZF9fIGludCBfX3MzMjsKK3R5cGVkZWYgdW5zaWduZWQgaW50IF9fdTMyOworCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoX19TVFJJQ1RfQU5TSV9fKQordHlwZWRlZiBfX3NpZ25lZF9fIGxvbmcgbG9uZyBfX3M2NDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIF9fdTY0OworI2VuZGlmCisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworLyoKKyAqIFRoZXNlIGFyZW4ndCBleHBvcnRlZCBvdXRzaWRlIHRoZSBrZXJuZWwgdG8gYXZvaWQgbmFtZSBzcGFjZSBjbGFzaGVzCisgKi8KKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpZmRlZiBfX0xQNjRfXworI2RlZmluZSBCSVRTX1BFUl9MT05HIDY0CisjZWxzZQorI2RlZmluZSBCSVRTX1BFUl9MT05HIDMyCisjZW5kaWYKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKwordHlwZWRlZiBzaWduZWQgY2hhciBzODsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciB1ODsKKwordHlwZWRlZiBzaWduZWQgc2hvcnQgczE2OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1MTY7CisKK3R5cGVkZWYgc2lnbmVkIGludCBzMzI7Cit0eXBlZGVmIHVuc2lnbmVkIGludCB1MzI7CisKK3R5cGVkZWYgc2lnbmVkIGxvbmcgbG9uZyBzNjQ7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1NjQ7CisKKy8qIERtYSBhZGRyZXNzZXMgYXJlIDMyLWJpdHMgd2lkZS4gICovCisKK3R5cGVkZWYgdTMyIGRtYV9hZGRyX3Q7Cit0eXBlZGVmIHU2NCBkbWE2NF9hZGRyX3Q7CisKK3R5cGVkZWYgdW5zaWduZWQgaW50IGttZW1fYnVmY3RsX3Q7CisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvdWFjY2Vzcy5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL3VhY2Nlc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTA4NDIzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL3VhY2Nlc3MuaApAQCAtMCwwICsxLDI4NyBAQAorI2lmbmRlZiBfX1BBUklTQ19VQUNDRVNTX0gKKyNkZWZpbmUgX19QQVJJU0NfVUFDQ0VTU19ICisKKy8qCisgKiBVc2VyIHNwYWNlIG1lbW9yeSBhY2Nlc3MgZnVuY3Rpb25zCisgKi8KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgorI2luY2x1ZGUgPGFzbS1nZW5lcmljL3VhY2Nlc3MuaD4KKworI2RlZmluZSBWRVJJRllfUkVBRCAwCisjZGVmaW5lIFZFUklGWV9XUklURSAxCisKKyNkZWZpbmUgS0VSTkVMX0RTCSgobW1fc2VnbWVudF90KXswfSkKKyNkZWZpbmUgVVNFUl9EUyAJKChtbV9zZWdtZW50X3QpezF9KQorCisjZGVmaW5lIHNlZ21lbnRfZXEoYSxiKQkoKGEpLnNlZyA9PSAoYikuc2VnKQorCisjZGVmaW5lIGdldF9kcygpCShLRVJORUxfRFMpCisjZGVmaW5lIGdldF9mcygpCShjdXJyZW50X3RocmVhZF9pbmZvKCktPmFkZHJfbGltaXQpCisjZGVmaW5lIHNldF9mcyh4KQkoY3VycmVudF90aHJlYWRfaW5mbygpLT5hZGRyX2xpbWl0ID0gKHgpKQorCisvKgorICogTm90ZSB0aGF0IHNpbmNlIGtlcm5lbCBhZGRyZXNzZXMgYXJlIGluIGEgc2VwYXJhdGUgYWRkcmVzcyBzcGFjZSBvbgorICogcGFyaXNjLCB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIGZvciBhY2Nlc3Nfb2soKSBvciB2ZXJpZnlfYXJlYSgpLgorICogV2UganVzdCBsZXQgdGhlIHBhZ2UgZmF1bHQgaGFuZGxlciBkbyB0aGUgcmlnaHQgdGhpbmcuIFRoaXMgYWxzbyBtZWFucworICogdGhhdCBwdXRfdXNlciBpcyB0aGUgc2FtZSBhcyBfX3B1dF91c2VyLCBldGMuCisgKi8KKworZXh0ZXJuIGludCBfX2dldF9rZXJuZWxfYmFkKHZvaWQpOworZXh0ZXJuIGludCBfX2dldF91c2VyX2JhZCh2b2lkKTsKK2V4dGVybiBpbnQgX19wdXRfa2VybmVsX2JhZCh2b2lkKTsKK2V4dGVybiBpbnQgX19wdXRfdXNlcl9iYWQodm9pZCk7CisKK3N0YXRpYyBpbmxpbmUgbG9uZyBhY2Nlc3Nfb2soaW50IHR5cGUsIGNvbnN0IHZvaWQgX191c2VyICogYWRkciwKKwkJdW5zaWduZWQgbG9uZyBzaXplKQoreworCXJldHVybiAxOworfQorCisjZGVmaW5lIHZlcmlmeV9hcmVhKHR5cGUsYWRkcixzaXplKSAoMCkJLyogRklYTUU6IGFsbCB1c2VycyBzaG91bGQgZ28gYXdheSBzb29uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGFuZCB1c2UgYWNjZXNzX29rIGluc3RlYWQsIHRoZW4gdGhpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHNob3VsZCBiZSByZW1vdmVkLiAqLworCisjZGVmaW5lIHB1dF91c2VyIF9fcHV0X3VzZXIKKyNkZWZpbmUgZ2V0X3VzZXIgX19nZXRfdXNlcgorCisjaWYgQklUU19QRVJfTE9ORyA9PSAzMgorI2RlZmluZSBMRERfS0VSTkVMKHB0cikJCV9fZ2V0X2tlcm5lbF9iYWQoKTsKKyNkZWZpbmUgTEREX1VTRVIocHRyKQkJX19nZXRfdXNlcl9iYWQoKTsKKyNkZWZpbmUgU1REX0tFUk5FTCh4LCBwdHIpCV9fcHV0X2tlcm5lbF9hc202NCh4LHB0cikKKyNkZWZpbmUgU1REX1VTRVIoeCwgcHRyKQlfX3B1dF91c2VyX2FzbTY0KHgscHRyKQorI2Vsc2UKKyNkZWZpbmUgTEREX0tFUk5FTChwdHIpIF9fZ2V0X2tlcm5lbF9hc20oImxkZCIscHRyKQorI2RlZmluZSBMRERfVVNFUihwdHIpIF9fZ2V0X3VzZXJfYXNtKCJsZGQiLHB0cikKKyNkZWZpbmUgU1REX0tFUk5FTCh4LCBwdHIpIF9fcHV0X2tlcm5lbF9hc20oInN0ZCIseCxwdHIpCisjZGVmaW5lIFNURF9VU0VSKHgsIHB0cikgX19wdXRfdXNlcl9hc20oInN0ZCIseCxwdHIpCisjZW5kaWYKKworLyoKKyAqIFRoZSBleGNlcHRpb24gdGFibGUgY29udGFpbnMgdHdvIHZhbHVlczogdGhlIGZpcnN0IGlzIGFuIGFkZHJlc3MKKyAqIGZvciBhbiBpbnN0cnVjdGlvbiB0aGF0IGlzIGFsbG93ZWQgdG8gZmF1bHQsIGFuZCB0aGUgc2Vjb25kIGlzCisgKiB0aGUgYWRkcmVzcyB0byB0aGUgZml4dXAgcm91dGluZS4gCisgKi8KKworc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSB7CisJdW5zaWduZWQgbG9uZyBpbnNuOyAgLyogYWRkcmVzcyBvZiBpbnNuIHRoYXQgaXMgYWxsb3dlZCB0byBmYXVsdC4gICAqLworCWxvbmcgZml4dXA7ICAgICAgICAgIC8qIGZpeHVwIHJvdXRpbmUgKi8KK307CisKKy8qCisgKiBUaGUgcGFnZSBmYXVsdCBoYW5kbGVyIHN0b3JlcywgaW4gYSBwZXItY3B1IGFyZWEsIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24KKyAqIGlmIGEgZml4dXAgcm91dGluZSBpcyBhdmFpbGFibGUuCisgKi8KK3N0cnVjdCBleGNlcHRpb25fZGF0YSB7CisJdW5zaWduZWQgbG9uZyBmYXVsdF9pcDsKKwl1bnNpZ25lZCBsb25nIGZhdWx0X3NwYWNlOworCXVuc2lnbmVkIGxvbmcgZmF1bHRfYWRkcjsKK307CisKKyNkZWZpbmUgX19nZXRfdXNlcih4LHB0cikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJcmVnaXN0ZXIgbG9uZyBfX2d1X2VyciBfX2FzbV9fICgicjgiKSA9IDA7ICAgICAgXAorCXJlZ2lzdGVyIGxvbmcgX19ndV92YWwgX19hc21fXyAoInI5IikgPSAwOyAgICAgIFwKKwkJCQkJCQlcCisJaWYgKHNlZ21lbnRfZXEoZ2V0X2ZzKCksS0VSTkVMX0RTKSkgeyAgICAgICAgICAgXAorCSAgICBzd2l0Y2ggKHNpemVvZigqKHB0cikpKSB7ICAgICAgICAgICAgICAgICAgIFwKKwkgICAgY2FzZSAxOiBfX2dldF9rZXJuZWxfYXNtKCJsZGIiLHB0cik7IGJyZWFrOyBcCisJICAgIGNhc2UgMjogX19nZXRfa2VybmVsX2FzbSgibGRoIixwdHIpOyBicmVhazsgXAorCSAgICBjYXNlIDQ6IF9fZ2V0X2tlcm5lbF9hc20oImxkdyIscHRyKTsgYnJlYWs7IFwKKwkgICAgY2FzZSA4OiBMRERfS0VSTkVMKHB0cik7IGJyZWFrOwkJXAorCSAgICBkZWZhdWx0OiBfX2dldF9rZXJuZWxfYmFkKCk7IGJyZWFrOyAgICAgICAgIFwKKwkgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgc3dpdGNoIChzaXplb2YoKihwdHIpKSkgeyAgICAgICAgICAgICAgICAgICBcCisJICAgIGNhc2UgMTogX19nZXRfdXNlcl9hc20oImxkYiIscHRyKTsgYnJlYWs7ICAgXAorCSAgICBjYXNlIDI6IF9fZ2V0X3VzZXJfYXNtKCJsZGgiLHB0cik7IGJyZWFrOyAgIFwKKwkgICAgY2FzZSA0OiBfX2dldF91c2VyX2FzbSgibGR3IixwdHIpOyBicmVhazsgICBcCisJICAgIGNhc2UgODogTEREX1VTRVIocHRyKTsgIGJyZWFrOwkJXAorCSAgICBkZWZhdWx0OiBfX2dldF91c2VyX2JhZCgpOyBicmVhazsgICAgICAgICAgIFwKKwkgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJCQkJCVwKKwkoeCkgPSAoX190eXBlb2ZfXygqKHB0cikpKSBfX2d1X3ZhbDsgICAgICAgICAgICBcCisJX19ndV9lcnI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSkKKworI2lmZGVmIF9fTFA2NF9fCisjZGVmaW5lIF9fZ2V0X2tlcm5lbF9hc20obGR4LHB0cikgICAgICAgICAgICAgICAgICAgICAgIFwKKwlfX2FzbV9fKCJcbjE6XHQiIGxkeCAiXHQwKCUyKSwlMFxuIiAgICAgICAgICAgICBcCisJCSJcdC5zZWN0aW9uIF9fZXhfdGFibGUsXCJhd1wiXG4iICAgICAgICBcCisJCSJcdC5kd29yZFx0MWIsZml4dXBfZ2V0X3VzZXJfc2tpcF8xXG4iCVwKKwkJIlx0LnByZXZpb3VzIiAgICAgICAgICAgICAgICAgICAgICAgICAgCVwKKwkJOiAiPXIiKF9fZ3VfdmFsKSwgIj1yIihfX2d1X2VycikgICAgICAgIFwKKwkJOiAiciIocHRyKSwgIjEiKF9fZ3VfZXJyKQkJXAorCQk6ICJyMSIpOworCisjZGVmaW5lIF9fZ2V0X3VzZXJfYXNtKGxkeCxwdHIpICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlfX2FzbV9fKCJcbjE6XHQiIGxkeCAiXHQwKCUlc3IzLCUyKSwlMFxuIiAgICAgICBcCisJCSJcdC5zZWN0aW9uIF9fZXhfdGFibGUsXCJhd1wiXG4iCVwKKwkJIlx0LmR3b3JkXHQxYixmaXh1cF9nZXRfdXNlcl9za2lwXzFcbiIJXAorCQkiXHQucHJldmlvdXMiCQkJCVwKKwkJOiAiPXIiKF9fZ3VfdmFsKSwgIj1yIihfX2d1X2VycikgICAgICAgIFwKKwkJOiAiciIocHRyKSwgIjEiKF9fZ3VfZXJyKQkJXAorCQk6ICJyMSIpOworI2Vsc2UKKyNkZWZpbmUgX19nZXRfa2VybmVsX2FzbShsZHgscHRyKSAgICAgICAgICAgICAgICAgICAgICAgXAorCV9fYXNtX18oIlxuMTpcdCIgbGR4ICJcdDAoJTIpLCUwXG4iICAgICAgICAgICAgIFwKKwkJIlx0LnNlY3Rpb24gX19leF90YWJsZSxcImF3XCJcbiIgICAgICAgIFwKKwkJIlx0LndvcmRcdDFiLGZpeHVwX2dldF91c2VyX3NraXBfMVxuIglcCisJCSJcdC5wcmV2aW91cyIgICAgICAgICAgICAgICAgICAgICAgICAgIAlcCisJCTogIj1yIihfX2d1X3ZhbCksICI9ciIoX19ndV9lcnIpICAgICAgICBcCisJCTogInIiKHB0ciksICIxIihfX2d1X2VycikJCVwKKwkJOiAicjEiKTsKKworI2RlZmluZSBfX2dldF91c2VyX2FzbShsZHgscHRyKSAgICAgICAgICAgICAgICAgICAgICAgICBcCisJX19hc21fXygiXG4xOlx0IiBsZHggIlx0MCglJXNyMywlMiksJTBcbiIgICAgICAgXAorCQkiXHQuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYXdcIlxuIglcCisJCSAiXHQud29yZFx0MWIsZml4dXBfZ2V0X3VzZXJfc2tpcF8xXG4iCVwKKwkJICJcdC5wcmV2aW91cyIgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJOiAiPXIiKF9fZ3VfdmFsKSwgIj1yIihfX2d1X2VycikgICAgICAgIFwKKwkJOiAiciIocHRyKSwgIjEiKF9fZ3VfZXJyKQkJXAorCQk6ICJyMSIpOworI2VuZGlmIC8qICFfX0xQNjRfXyAqLworCisjZGVmaW5lIF9fcHV0X3VzZXIoeCxwdHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKHsJCQkJCQkJCVwKKwlyZWdpc3RlciBsb25nIF9fcHVfZXJyIF9fYXNtX18gKCJyOCIpID0gMDsgICAgICAJXAorICAgICAgICBfX3R5cGVvZl9fKCoocHRyKSkgX194ID0gKF9fdHlwZW9mX18oKihwdHIpKSkoeCk7CVwKKwkJCQkJCQkJXAorCWlmIChzZWdtZW50X2VxKGdldF9mcygpLEtFUk5FTF9EUykpIHsgICAgICAgICAgICAgICAgICAgXAorCSAgICBzd2l0Y2ggKHNpemVvZigqKHB0cikpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICBjYXNlIDE6IF9fcHV0X2tlcm5lbF9hc20oInN0YiIsX194LHB0cik7IGJyZWFrOyAgICAgXAorCSAgICBjYXNlIDI6IF9fcHV0X2tlcm5lbF9hc20oInN0aCIsX194LHB0cik7IGJyZWFrOyAgICAgXAorCSAgICBjYXNlIDQ6IF9fcHV0X2tlcm5lbF9hc20oInN0dyIsX194LHB0cik7IGJyZWFrOyAgICAgXAorCSAgICBjYXNlIDg6IFNURF9LRVJORUwoX194LHB0cik7IGJyZWFrOwkJCVwKKwkgICAgZGVmYXVsdDogX19wdXRfa2VybmVsX2JhZCgpOyBicmVhazsJCQlcCisJICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgIHN3aXRjaCAoc2l6ZW9mKCoocHRyKSkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgIGNhc2UgMTogX19wdXRfdXNlcl9hc20oInN0YiIsX194LHB0cik7IGJyZWFrOyAgICAgICBcCisJICAgIGNhc2UgMjogX19wdXRfdXNlcl9hc20oInN0aCIsX194LHB0cik7IGJyZWFrOyAgICAgICBcCisJICAgIGNhc2UgNDogX19wdXRfdXNlcl9hc20oInN0dyIsX194LHB0cik7IGJyZWFrOyAgICAgICBcCisJICAgIGNhc2UgODogU1REX1VTRVIoX194LHB0cik7IGJyZWFrOwkJCVwKKwkgICAgZGVmYXVsdDogX19wdXRfdXNlcl9iYWQoKTsgYnJlYWs7CQkJXAorCSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJCQkJCQlcCisJX19wdV9lcnI7CQkJCQkJXAorfSkKKworLyoKKyAqIFRoZSAiX19wdXRfdXNlci9rZXJuZWxfYXNtKCkiIG1hY3JvcyB0ZWxsIGdjYyB0aGV5IHJlYWQgZnJvbSBtZW1vcnkKKyAqIGluc3RlYWQgb2Ygd3JpdGluZy4gVGhpcyBpcyBiZWNhdXNlIHRoZXkgZG8gbm90IHdyaXRlIHRvIGFueSBtZW1vcnkKKyAqIGdjYyBrbm93cyBhYm91dCwgc28gdGhlcmUgYXJlIG5vIGFsaWFzaW5nIGlzc3Vlcy4KKyAqLworCisjaWZkZWYgX19MUDY0X18KKyNkZWZpbmUgX19wdXRfa2VybmVsX2FzbShzdHgseCxwdHIpICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkiXG4xOlx0IiBzdHggIlx0JTIsMCglMSlcbiIgICAgICAgICAgICAgICAgIFwKKwkJIlx0LnNlY3Rpb24gX19leF90YWJsZSxcImF3XCJcbiIgICAgICAgICAgICBcCisJCSJcdC5kd29yZFx0MWIsZml4dXBfcHV0X3VzZXJfc2tpcF8xXG4iCSAgICBcCisJCSJcdC5wcmV2aW91cyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQk6ICI9ciIoX19wdV9lcnIpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJOiAiciIocHRyKSwgInIiKHgpLCAiMCIoX19wdV9lcnIpKQorCisjZGVmaW5lIF9fcHV0X3VzZXJfYXNtKHN0eCx4LHB0cikgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJIlxuMTpcdCIgc3R4ICJcdCUyLDAoJSVzcjMsJTEpXG4iICAgICAgICAgICBcCisJCSJcdC5zZWN0aW9uIF9fZXhfdGFibGUsXCJhd1wiXG4iICAgICAgICAgICAgXAorCQkgIlx0LmR3b3JkXHQxYixmaXh1cF9wdXRfdXNlcl9za2lwXzFcbiIJICAgIFwKKwkJICJcdC5wcmV2aW91cyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCTogIj1yIihfX3B1X2VycikgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQk6ICJyIihwdHIpLCAiciIoeCksICIwIihfX3B1X2VycikJICAgIFwKKwkJOiAicjEiKQorI2Vsc2UKKyNkZWZpbmUgX19wdXRfa2VybmVsX2FzbShzdHgseCxwdHIpICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkiXG4xOlx0IiBzdHggIlx0JTIsMCglMSlcbiIgICAgICAgICAgICAgICAgIFwKKwkJIlx0LnNlY3Rpb24gX19leF90YWJsZSxcImF3XCJcbiIgICAgICAgICAgICBcCisJCSAiXHQud29yZFx0MWIsZml4dXBfcHV0X3VzZXJfc2tpcF8xXG4iCSAgICBcCisJCSAiXHQucHJldmlvdXMiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQk6ICI9ciIoX19wdV9lcnIpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJOiAiciIocHRyKSwgInIiKHgpLCAiMCIoX19wdV9lcnIpCSAgICBcCisJCTogInIxIikKKworI2RlZmluZSBfX3B1dF91c2VyX2FzbShzdHgseCxwdHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCV9fYXNtX18gX192b2xhdGlsZV9fICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSJcbjE6XHQiIHN0eCAiXHQlMiwwKCUlc3IzLCUxKVxuIiAgICAgICAgICAgXAorCQkiXHQuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYXdcIlxuIiAgICAgICAgICAgIFwKKwkJICJcdC53b3JkXHQxYixmaXh1cF9wdXRfdXNlcl9za2lwXzFcbiIgICAgICBcCisJCSAiXHQucHJldmlvdXMiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQk6ICI9ciIoX19wdV9lcnIpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJOiAiciIocHRyKSwgInIiKHgpLCAiMCIoX19wdV9lcnIpCSAgICBcCisJCTogInIxIikKKworI2RlZmluZSBfX3B1dF9rZXJuZWxfYXNtNjQoX192YWwscHRyKSBkbyB7CQkgICAgCSAgICBcCisJdTY0IF9fdmFsNjQgPSAodTY0KShfX3ZhbCk7CQkJCSAgICBcCisJdTMyIGhpID0gKF9fdmFsNjQpID4+IDMyOwkJCQkJICAgIFwKKwl1MzIgbG8gPSAoX192YWw2NCkgJiAweGZmZmZmZmZmOwkJCQkgICAgXAorCV9fYXNtX18gX192b2xhdGlsZV9fICgJCQkJICAgIFwKKwkJIlxuMTpcdHN0dyAlMiwwKCUxKVxuIgkJCSAgICBcCisJCSJcbjI6XHRzdHcgJTMsNCglMSlcbiIJCQkgICAgXAorCQkiXHQuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYXdcIlxuIgkgICAgXAorCQkgIlx0LndvcmRcdDFiLGZpeHVwX3B1dF91c2VyX3NraXBfMlxuIgkgICAgXAorCQkgIlx0LndvcmRcdDJiLGZpeHVwX3B1dF91c2VyX3NraXBfMVxuIgkgICAgXAorCQkgIlx0LnByZXZpb3VzIgkJCQkgICAgXAorCQk6ICI9ciIoX19wdV9lcnIpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJOiAiciIocHRyKSwgInIiKGhpKSwgInIiKGxvKSwgIjAiKF9fcHVfZXJyKSBcCisJCTogInIxIik7CQkJCSAgICBcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIF9fcHV0X3VzZXJfYXNtNjQoX192YWwscHRyKSBkbyB7CQkgICAgCSAgICBcCisJdTY0IF9fdmFsNjQgPSAodTY0KV9fdmFsOwkJCQkgICAgXAorCXUzMiBoaSA9IChfX3ZhbDY0KSA+PiAzMjsJCQkJCSAgICBcCisJdTMyIGxvID0gKF9fdmFsNjQpICYgMHhmZmZmZmZmZjsJCQkJICAgIFwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCSAgICBcCisJCSJcbjE6XHRzdHcgJTIsMCglJXNyMywlMSlcbiIJCSAgICBcCisJCSJcbjI6XHRzdHcgJTMsNCglJXNyMywlMSlcbiIJCSAgICBcCisJCSJcdC5zZWN0aW9uIF9fZXhfdGFibGUsXCJhd1wiXG4iCSAgICBcCisJCSAiXHQud29yZFx0MWIsZml4dXBfZ2V0X3VzZXJfc2tpcF8yXG4iCSAgICBcCisJCSAiXHQud29yZFx0MmIsZml4dXBfZ2V0X3VzZXJfc2tpcF8xXG4iCSAgICBcCisJCSAiXHQucHJldmlvdXMiCQkJCSAgICBcCisJCTogIj1yIihfX3B1X2VycikgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQk6ICJyIihwdHIpLCAiciIoaGkpLCAiciIobG8pLCAiMCIoX19wdV9lcnIpIFwKKwkJOiAicjEiKTsJCQkJICAgIFwKK30gd2hpbGUgKDApCisKKyNlbmRpZiAvKiAhX19MUDY0X18gKi8KKworCisvKgorICogQ29tcGxleCBhY2Nlc3Mgcm91dGluZXMgLS0gZXh0ZXJuYWwgZGVjbGFyYXRpb25zCisgKi8KKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbGNvcHlfdG9fdXNlcih2b2lkIF9fdXNlciAqLCBjb25zdCB2b2lkICosIHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbGNvcHlfZnJvbV91c2VyKHZvaWQgKiwgY29uc3Qgdm9pZCBfX3VzZXIgKiwgdW5zaWduZWQgbG9uZyk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBsY29weV9pbl91c2VyKHZvaWQgX191c2VyICosIGNvbnN0IHZvaWQgX191c2VyICosIHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuIGxvbmcgbHN0cm5jcHlfZnJvbV91c2VyKGNoYXIgKiwgY29uc3QgY2hhciBfX3VzZXIgKiwgbG9uZyk7CitleHRlcm4gdW5zaWduZWQgbGNsZWFyX3VzZXIodm9pZCBfX3VzZXIgKix1bnNpZ25lZCBsb25nKTsKK2V4dGVybiBsb25nIGxzdHJubGVuX3VzZXIoY29uc3QgY2hhciBfX3VzZXIgKixsb25nKTsKKworLyoKKyAqIENvbXBsZXggYWNjZXNzIHJvdXRpbmVzIC0tIG1hY3JvcworICovCisKKyNkZWZpbmUgc3RybmNweV9mcm9tX3VzZXIgbHN0cm5jcHlfZnJvbV91c2VyCisjZGVmaW5lIHN0cm5sZW5fdXNlciBsc3Rybmxlbl91c2VyCisjZGVmaW5lIHN0cmxlbl91c2VyKHN0cikgbHN0cm5sZW5fdXNlcihzdHIsIDB4N2ZmZmZmZmZMKQorI2RlZmluZSBjbGVhcl91c2VyIGxjbGVhcl91c2VyCisjZGVmaW5lIF9fY2xlYXJfdXNlciBsY2xlYXJfdXNlcgorCit1bnNpZ25lZCBsb25nIGNvcHlfdG9fdXNlcih2b2lkIF9fdXNlciAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGxvbmcgbGVuKTsKKyNkZWZpbmUgX19jb3B5X3RvX3VzZXIgY29weV90b191c2VyCit1bnNpZ25lZCBsb25nIGNvcHlfZnJvbV91c2VyKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCBfX3VzZXIgKnNyYywgdW5zaWduZWQgbG9uZyBsZW4pOworI2RlZmluZSBfX2NvcHlfZnJvbV91c2VyIGNvcHlfZnJvbV91c2VyCit1bnNpZ25lZCBsb25nIGNvcHlfaW5fdXNlcih2b2lkIF9fdXNlciAqZHN0LCBjb25zdCB2b2lkIF9fdXNlciAqc3JjLCB1bnNpZ25lZCBsb25nIGxlbik7CisjZGVmaW5lIF9fY29weV9pbl91c2VyIGNvcHlfaW5fdXNlcgorI2RlZmluZSBfX2NvcHlfdG9fdXNlcl9pbmF0b21pYyBfX2NvcHlfdG9fdXNlcgorI2RlZmluZSBfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljIF9fY29weV9mcm9tX3VzZXIKKworI2VuZGlmIC8qIF9fUEFSSVNDX1VBQ0NFU1NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3Vjb250ZXh0LmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvdWNvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Yzg4ODNlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL3Vjb250ZXh0LmgKQEAgLTAsMCArMSwxMiBAQAorI2lmbmRlZiBfQVNNX1BBUklTQ19VQ09OVEVYVF9ICisjZGVmaW5lIF9BU01fUEFSSVNDX1VDT05URVhUX0gKKworc3RydWN0IHVjb250ZXh0IHsKKwl1bnNpZ25lZCBpbnQJICB1Y19mbGFnczsKKwlzdHJ1Y3QgdWNvbnRleHQgICp1Y19saW5rOworCXN0YWNrX3QJCSAgdWNfc3RhY2s7CisJc3RydWN0IHNpZ2NvbnRleHQgdWNfbWNvbnRleHQ7CisJc2lnc2V0X3QJICB1Y19zaWdtYXNrOwkvKiBtYXNrIGxhc3QgZm9yIGV4dGVuc2liaWxpdHkgKi8KK307CisKKyNlbmRpZiAvKiAhX0FTTV9QQVJJU0NfVUNPTlRFWFRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3VuYWxpZ25lZC5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL3VuYWxpZ25lZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzYzkwNTgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2MvdW5hbGlnbmVkLmgKQEAgLTAsMCArMSwxMiBAQAorI2lmbmRlZiBfQVNNX1BBUklTQ19VTkFMSUdORURfSF8KKyNkZWZpbmUgX0FTTV9QQVJJU0NfVU5BTElHTkVEX0hfCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy91bmFsaWduZWQuaD4KKworI2lmZGVmIF9fS0VSTkVMX18KK3N0cnVjdCBwdF9yZWdzOwordm9pZCBoYW5kbGVfdW5hbGlnbmVkKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2ludCBjaGVja191bmFsaWduZWQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworI2VuZGlmCisKKyNlbmRpZiAvKiBfQVNNX1BBUklTQ19VTkFMSUdORURfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy91bmlzdGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTlmMGNhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL3VuaXN0ZC5oCkBAIC0wLDAgKzEsMTAyOSBAQAorI2lmbmRlZiBfQVNNX1BBUklTQ19VTklTVERfSF8KKyNkZWZpbmUgX0FTTV9QQVJJU0NfVU5JU1REX0hfCisKKy8qCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHN5c3RlbSBjYWxsIG51bWJlcnMuCisgKi8KKworLyoKKyAqICAgSFAtVVggc3lzdGVtIGNhbGxzIGdldCB0aGVpciBuYXRpdmUgbnVtYmVycyBmb3IgYmluYXJ5IGNvbXBhdGliaWxpdHkuCisgKi8KKworI2RlZmluZSBfX05SX0hQVVhfZXhpdCAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBfX05SX0hQVVhfZm9yayAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBfX05SX0hQVVhfcmVhZCAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBfX05SX0hQVVhfd3JpdGUgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBfX05SX0hQVVhfb3BlbiAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBfX05SX0hQVVhfY2xvc2UgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBfX05SX0hQVVhfd2FpdCAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBfX05SX0hQVVhfY3JlYXQgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBfX05SX0hQVVhfbGluayAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBfX05SX0hQVVhfdW5saW5rICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBfX05SX0hQVVhfZXhlY3YgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSBfX05SX0hQVVhfY2hkaXIgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBfX05SX0hQVVhfdGltZSAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSBfX05SX0hQVVhfbWtub2QgICAgICAgICAgICAgICAgICAxNAorI2RlZmluZSBfX05SX0hQVVhfY2htb2QgICAgICAgICAgICAgICAgICAxNQorI2RlZmluZSBfX05SX0hQVVhfY2hvd24gICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBfX05SX0hQVVhfYnJlYWsgICAgICAgICAgICAgICAgICAxNworI2RlZmluZSBfX05SX0hQVVhfbGNobW9kICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBfX05SX0hQVVhfbHNlZWsgICAgICAgICAgICAgICAgICAxOQorI2RlZmluZSBfX05SX0hQVVhfZ2V0cGlkICAgICAgICAgICAgICAgICAyMAorI2RlZmluZSBfX05SX0hQVVhfbW91bnQgICAgICAgICAgICAgICAgICAyMQorI2RlZmluZSBfX05SX0hQVVhfdW1vdW50ICAgICAgICAgICAgICAgICAyMgorI2RlZmluZSBfX05SX0hQVVhfc2V0dWlkICAgICAgICAgICAgICAgICAyMworI2RlZmluZSBfX05SX0hQVVhfZ2V0dWlkICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBfX05SX0hQVVhfc3RpbWUgICAgICAgICAgICAgICAgICAyNQorI2RlZmluZSBfX05SX0hQVVhfcHRyYWNlICAgICAgICAgICAgICAgICAyNgorI2RlZmluZSBfX05SX0hQVVhfYWxhcm0gICAgICAgICAgICAgICAgICAyNworI2RlZmluZSBfX05SX0hQVVhfb2xkZnN0YXQgICAgICAgICAgICAgICAyOAorI2RlZmluZSBfX05SX0hQVVhfcGF1c2UgICAgICAgICAgICAgICAgICAyOQorI2RlZmluZSBfX05SX0hQVVhfdXRpbWUgICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSBfX05SX0hQVVhfc3R0eSAgICAgICAgICAgICAgICAgICAzMQorI2RlZmluZSBfX05SX0hQVVhfZ3R0eSAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBfX05SX0hQVVhfYWNjZXNzICAgICAgICAgICAgICAgICAzMworI2RlZmluZSBfX05SX0hQVVhfbmljZSAgICAgICAgICAgICAgICAgICAzNAorI2RlZmluZSBfX05SX0hQVVhfZnRpbWUgICAgICAgICAgICAgICAgICAzNQorI2RlZmluZSBfX05SX0hQVVhfc3luYyAgICAgICAgICAgICAgICAgICAzNgorI2RlZmluZSBfX05SX0hQVVhfa2lsbCAgICAgICAgICAgICAgICAgICAzNworI2RlZmluZSBfX05SX0hQVVhfc3RhdCAgICAgICAgICAgICAgICAgICAzOAorI2RlZmluZSBfX05SX0hQVVhfc2V0cGdycDMgICAgICAgICAgICAgICAzOQorI2RlZmluZSBfX05SX0hQVVhfbHN0YXQgICAgICAgICAgICAgICAgICA0MAorI2RlZmluZSBfX05SX0hQVVhfZHVwICAgICAgICAgICAgICAgICAgICA0MQorI2RlZmluZSBfX05SX0hQVVhfcGlwZSAgICAgICAgICAgICAgICAgICA0MgorI2RlZmluZSBfX05SX0hQVVhfdGltZXMgICAgICAgICAgICAgICAgICA0MworI2RlZmluZSBfX05SX0hQVVhfcHJvZmlsICAgICAgICAgICAgICAgICA0NAorI2RlZmluZSBfX05SX0hQVVhfa2lfY2FsbCAgICAgICAgICAgICAgICA0NQorI2RlZmluZSBfX05SX0hQVVhfc2V0Z2lkICAgICAgICAgICAgICAgICA0NgorI2RlZmluZSBfX05SX0hQVVhfZ2V0Z2lkICAgICAgICAgICAgICAgICA0NworI2RlZmluZSBfX05SX0hQVVhfc2lnc3lzICAgICAgICAgICAgICAgICA0OAorI2RlZmluZSBfX05SX0hQVVhfcmVzZXJ2ZWQxICAgICAgICAgICAgICA0OQorI2RlZmluZSBfX05SX0hQVVhfcmVzZXJ2ZWQyICAgICAgICAgICAgICA1MAorI2RlZmluZSBfX05SX0hQVVhfYWNjdCAgICAgICAgICAgICAgICAgICA1MQorI2RlZmluZSBfX05SX0hQVVhfc2V0X3VzZXJ0aHJlYWRpZCAgICAgICA1MgorI2RlZmluZSBfX05SX0hQVVhfb2xkbG9jayAgICAgICAgICAgICAgICA1MworI2RlZmluZSBfX05SX0hQVVhfaW9jdGwgICAgICAgICAgICAgICAgICA1NAorI2RlZmluZSBfX05SX0hQVVhfcmVib290ICAgICAgICAgICAgICAgICA1NQorI2RlZmluZSBfX05SX0hQVVhfc3ltbGluayAgICAgICAgICAgICAgICA1NgorI2RlZmluZSBfX05SX0hQVVhfdXRzc3lzICAgICAgICAgICAgICAgICA1NworI2RlZmluZSBfX05SX0hQVVhfcmVhZGxpbmsgICAgICAgICAgICAgICA1OAorI2RlZmluZSBfX05SX0hQVVhfZXhlY3ZlICAgICAgICAgICAgICAgICA1OQorI2RlZmluZSBfX05SX0hQVVhfdW1hc2sgICAgICAgICAgICAgICAgICA2MAorI2RlZmluZSBfX05SX0hQVVhfY2hyb290ICAgICAgICAgICAgICAgICA2MQorI2RlZmluZSBfX05SX0hQVVhfZmNudGwgICAgICAgICAgICAgICAgICA2MgorI2RlZmluZSBfX05SX0hQVVhfdWxpbWl0ICAgICAgICAgICAgICAgICA2MworI2RlZmluZSBfX05SX0hQVVhfZ2V0cGFnZXNpemUgICAgICAgICAgICA2NAorI2RlZmluZSBfX05SX0hQVVhfbXJlbWFwICAgICAgICAgICAgICAgICA2NQorI2RlZmluZSBfX05SX0hQVVhfdmZvcmsgICAgICAgICAgICAgICAgICA2NgorI2RlZmluZSBfX05SX0hQVVhfdnJlYWQgICAgICAgICAgICAgICAgICA2NworI2RlZmluZSBfX05SX0hQVVhfdndyaXRlICAgICAgICAgICAgICAgICA2OAorI2RlZmluZSBfX05SX0hQVVhfc2JyayAgICAgICAgICAgICAgICAgICA2OQorI2RlZmluZSBfX05SX0hQVVhfc3N0ayAgICAgICAgICAgICAgICAgICA3MAorI2RlZmluZSBfX05SX0hQVVhfbW1hcCAgICAgICAgICAgICAgICAgICA3MQorI2RlZmluZSBfX05SX0hQVVhfdmFkdmlzZSAgICAgICAgICAgICAgICA3MgorI2RlZmluZSBfX05SX0hQVVhfbXVubWFwICAgICAgICAgICAgICAgICA3MworI2RlZmluZSBfX05SX0hQVVhfbXByb3RlY3QgICAgICAgICAgICAgICA3NAorI2RlZmluZSBfX05SX0hQVVhfbWFkdmlzZSAgICAgICAgICAgICAgICA3NQorI2RlZmluZSBfX05SX0hQVVhfdmhhbmd1cCAgICAgICAgICAgICAgICA3NgorI2RlZmluZSBfX05SX0hQVVhfc3dhcG9mZiAgICAgICAgICAgICAgICA3NworI2RlZmluZSBfX05SX0hQVVhfbWluY29yZSAgICAgICAgICAgICAgICA3OAorI2RlZmluZSBfX05SX0hQVVhfZ2V0Z3JvdXBzICAgICAgICAgICAgICA3OQorI2RlZmluZSBfX05SX0hQVVhfc2V0Z3JvdXBzICAgICAgICAgICAgICA4MAorI2RlZmluZSBfX05SX0hQVVhfZ2V0cGdycDIgICAgICAgICAgICAgICA4MQorI2RlZmluZSBfX05SX0hQVVhfc2V0cGdycDIgICAgICAgICAgICAgICA4MgorI2RlZmluZSBfX05SX0hQVVhfc2V0aXRpbWVyICAgICAgICAgICAgICA4MworI2RlZmluZSBfX05SX0hQVVhfd2FpdDMgICAgICAgICAgICAgICAgICA4NAorI2RlZmluZSBfX05SX0hQVVhfc3dhcG9uICAgICAgICAgICAgICAgICA4NQorI2RlZmluZSBfX05SX0hQVVhfZ2V0aXRpbWVyICAgICAgICAgICAgICA4NgorI2RlZmluZSBfX05SX0hQVVhfZ2V0aG9zdG5hbWU0MiAgICAgICAgICA4NworI2RlZmluZSBfX05SX0hQVVhfc2V0aG9zdG5hbWU0MiAgICAgICAgICA4OAorI2RlZmluZSBfX05SX0hQVVhfZ2V0ZHRhYmxlc2l6ZSAgICAgICAgICA4OQorI2RlZmluZSBfX05SX0hQVVhfZHVwMiAgICAgICAgICAgICAgICAgICA5MAorI2RlZmluZSBfX05SX0hQVVhfZ2V0ZG9wdCAgICAgICAgICAgICAgICA5MQorI2RlZmluZSBfX05SX0hQVVhfZnN0YXQgICAgICAgICAgICAgICAgICA5MgorI2RlZmluZSBfX05SX0hQVVhfc2VsZWN0ICAgICAgICAgICAgICAgICA5MworI2RlZmluZSBfX05SX0hQVVhfc2V0ZG9wdCAgICAgICAgICAgICAgICA5NAorI2RlZmluZSBfX05SX0hQVVhfZnN5bmMgICAgICAgICAgICAgICAgICA5NQorI2RlZmluZSBfX05SX0hQVVhfc2V0cHJpb3JpdHkgICAgICAgICAgICA5NgorI2RlZmluZSBfX05SX0hQVVhfc29ja2V0X29sZCAgICAgICAgICAgICA5NworI2RlZmluZSBfX05SX0hQVVhfY29ubmVjdF9vbGQgICAgICAgICAgICA5OAorI2RlZmluZSBfX05SX0hQVVhfYWNjZXB0X29sZCAgICAgICAgICAgICA5OQorI2RlZmluZSBfX05SX0hQVVhfZ2V0cHJpb3JpdHkgICAgICAgICAgIDEwMAorI2RlZmluZSBfX05SX0hQVVhfc2VuZF9vbGQgICAgICAgICAgICAgIDEwMQorI2RlZmluZSBfX05SX0hQVVhfcmVjdl9vbGQgICAgICAgICAgICAgIDEwMgorI2RlZmluZSBfX05SX0hQVVhfc29ja2V0YWRkcl9vbGQgICAgICAgIDEwMworI2RlZmluZSBfX05SX0hQVVhfYmluZF9vbGQgICAgICAgICAgICAgIDEwNAorI2RlZmluZSBfX05SX0hQVVhfc2V0c29ja29wdF9vbGQgICAgICAgIDEwNQorI2RlZmluZSBfX05SX0hQVVhfbGlzdGVuX29sZCAgICAgICAgICAgIDEwNgorI2RlZmluZSBfX05SX0hQVVhfdnRpbWVzX29sZCAgICAgICAgICAgIDEwNworI2RlZmluZSBfX05SX0hQVVhfc2lndmVjdG9yICAgICAgICAgICAgIDEwOAorI2RlZmluZSBfX05SX0hQVVhfc2lnYmxvY2sgICAgICAgICAgICAgIDEwOQorI2RlZmluZSBfX05SX0hQVVhfc2lnZ2V0bWFzayAgICAgICAgICAgIDExMAorI2RlZmluZSBfX05SX0hQVVhfc2lncGF1c2UgICAgICAgICAgICAgIDExMQorI2RlZmluZSBfX05SX0hQVVhfc2lnc3RhY2sgICAgICAgICAgICAgIDExMgorI2RlZmluZSBfX05SX0hQVVhfcmVjdm1zZ19vbGQgICAgICAgICAgIDExMworI2RlZmluZSBfX05SX0hQVVhfc2VuZG1zZ19vbGQgICAgICAgICAgIDExNAorI2RlZmluZSBfX05SX0hQVVhfdnRyYWNlX29sZCAgICAgICAgICAgIDExNQorI2RlZmluZSBfX05SX0hQVVhfZ2V0dGltZW9mZGF5ICAgICAgICAgIDExNgorI2RlZmluZSBfX05SX0hQVVhfZ2V0cnVzYWdlICAgICAgICAgICAgIDExNworI2RlZmluZSBfX05SX0hQVVhfZ2V0c29ja29wdF9vbGQgICAgICAgIDExOAorI2RlZmluZSBfX05SX0hQVVhfcmVzdWJhX29sZCAgICAgICAgICAgIDExOQorI2RlZmluZSBfX05SX0hQVVhfcmVhZHYgICAgICAgICAgICAgICAgIDEyMAorI2RlZmluZSBfX05SX0hQVVhfd3JpdGV2ICAgICAgICAgICAgICAgIDEyMQorI2RlZmluZSBfX05SX0hQVVhfc2V0dGltZW9mZGF5ICAgICAgICAgIDEyMgorI2RlZmluZSBfX05SX0hQVVhfZmNob3duICAgICAgICAgICAgICAgIDEyMworI2RlZmluZSBfX05SX0hQVVhfZmNobW9kICAgICAgICAgICAgICAgIDEyNAorI2RlZmluZSBfX05SX0hQVVhfcmVjdmZyb21fb2xkICAgICAgICAgIDEyNQorI2RlZmluZSBfX05SX0hQVVhfc2V0cmVzdWlkICAgICAgICAgICAgIDEyNgorI2RlZmluZSBfX05SX0hQVVhfc2V0cmVzZ2lkICAgICAgICAgICAgIDEyNworI2RlZmluZSBfX05SX0hQVVhfcmVuYW1lICAgICAgICAgICAgICAgIDEyOAorI2RlZmluZSBfX05SX0hQVVhfdHJ1bmNhdGUgICAgICAgICAgICAgIDEyOQorI2RlZmluZSBfX05SX0hQVVhfZnRydW5jYXRlICAgICAgICAgICAgIDEzMAorI2RlZmluZSBfX05SX0hQVVhfZmxvY2tfb2xkICAgICAgICAgICAgIDEzMQorI2RlZmluZSBfX05SX0hQVVhfc3lzY29uZiAgICAgICAgICAgICAgIDEzMgorI2RlZmluZSBfX05SX0hQVVhfc2VuZHRvX29sZCAgICAgICAgICAgIDEzMworI2RlZmluZSBfX05SX0hQVVhfc2h1dGRvd25fb2xkICAgICAgICAgIDEzNAorI2RlZmluZSBfX05SX0hQVVhfc29ja2V0cGFpcl9vbGQgICAgICAgIDEzNQorI2RlZmluZSBfX05SX0hQVVhfbWtkaXIgICAgICAgICAgICAgICAgIDEzNgorI2RlZmluZSBfX05SX0hQVVhfcm1kaXIgICAgICAgICAgICAgICAgIDEzNworI2RlZmluZSBfX05SX0hQVVhfdXRpbWVzX29sZCAgICAgICAgICAgIDEzOAorI2RlZmluZSBfX05SX0hQVVhfc2lnY2xlYW51cF9vbGQgICAgICAgIDEzOQorI2RlZmluZSBfX05SX0hQVVhfc2V0Y29yZSAgICAgICAgICAgICAgIDE0MAorI2RlZmluZSBfX05SX0hQVVhfZ2V0cGVlcm5hbWVfb2xkICAgICAgIDE0MQorI2RlZmluZSBfX05SX0hQVVhfZ2V0aG9zdGlkICAgICAgICAgICAgIDE0MgorI2RlZmluZSBfX05SX0hQVVhfc2V0aG9zdGlkICAgICAgICAgICAgIDE0MworI2RlZmluZSBfX05SX0hQVVhfZ2V0cmxpbWl0ICAgICAgICAgICAgIDE0NAorI2RlZmluZSBfX05SX0hQVVhfc2V0cmxpbWl0ICAgICAgICAgICAgIDE0NQorI2RlZmluZSBfX05SX0hQVVhfa2lsbHBnX29sZCAgICAgICAgICAgIDE0NgorI2RlZmluZSBfX05SX0hQVVhfY2FjaGVjdGwgICAgICAgICAgICAgIDE0NworI2RlZmluZSBfX05SX0hQVVhfcXVvdGFjdGwgICAgICAgICAgICAgIDE0OAorI2RlZmluZSBfX05SX0hQVVhfZ2V0X3N5c2luZm8gICAgICAgICAgIDE0OQorI2RlZmluZSBfX05SX0hQVVhfZ2V0c29ja25hbWVfb2xkICAgICAgIDE1MAorI2RlZmluZSBfX05SX0hQVVhfcHJpdmdycCAgICAgICAgICAgICAgIDE1MQorI2RlZmluZSBfX05SX0hQVVhfcnRwcmlvICAgICAgICAgICAgICAgIDE1MgorI2RlZmluZSBfX05SX0hQVVhfcGxvY2sgICAgICAgICAgICAgICAgIDE1MworI2RlZmluZSBfX05SX0hQVVhfcmVzZXJ2ZWQzICAgICAgICAgICAgIDE1NAorI2RlZmluZSBfX05SX0hQVVhfbG9ja2YgICAgICAgICAgICAgICAgIDE1NQorI2RlZmluZSBfX05SX0hQVVhfc2VtZ2V0ICAgICAgICAgICAgICAgIDE1NgorI2RlZmluZSBfX05SX0hQVVhfb3NlbWN0bCAgICAgICAgICAgICAgIDE1NworI2RlZmluZSBfX05SX0hQVVhfc2Vtb3AgICAgICAgICAgICAgICAgIDE1OAorI2RlZmluZSBfX05SX0hQVVhfbXNnZ2V0ICAgICAgICAgICAgICAgIDE1OQorI2RlZmluZSBfX05SX0hQVVhfb21zZ2N0bCAgICAgICAgICAgICAgIDE2MAorI2RlZmluZSBfX05SX0hQVVhfbXNnc25kICAgICAgICAgICAgICAgIDE2MQorI2RlZmluZSBfX05SX0hQVVhfbXNncmVjdiAgICAgICAgICAgICAgIDE2MgorI2RlZmluZSBfX05SX0hQVVhfc2htZ2V0ICAgICAgICAgICAgICAgIDE2MworI2RlZmluZSBfX05SX0hQVVhfb3NobWN0bCAgICAgICAgICAgICAgIDE2NAorI2RlZmluZSBfX05SX0hQVVhfc2htYXQgICAgICAgICAgICAgICAgIDE2NQorI2RlZmluZSBfX05SX0hQVVhfc2htZHQgICAgICAgICAgICAgICAgIDE2NgorI2RlZmluZSBfX05SX0hQVVhfbTY4MDIwX2FkdmlzZSAgICAgICAgIDE2NworLyogWzE2OCwxODldIGFyZSBmb3IgRGlzY2xlc3MvRFVYICovCisjZGVmaW5lIF9fTlJfSFBVWF9jc3AgICAgICAgICAgICAgICAgICAgMTY4CisjZGVmaW5lIF9fTlJfSFBVWF9jbHVzdGVyICAgICAgICAgICAgICAgMTY5CisjZGVmaW5lIF9fTlJfSFBVWF9ta3Jub2QgICAgICAgICAgICAgICAgMTcwCisjZGVmaW5lIF9fTlJfSFBVWF90ZXN0ICAgICAgICAgICAgICAgICAgMTcxCisjZGVmaW5lIF9fTlJfSFBVWF91bnNwX29wZW4gICAgICAgICAgICAgMTcyCisjZGVmaW5lIF9fTlJfSFBVWF9yZXNlcnZlZDQgICAgICAgICAgICAgMTczCisjZGVmaW5lIF9fTlJfSFBVWF9nZXRjb250ZXh0X29sZCAgICAgICAgMTc0CisjZGVmaW5lIF9fTlJfSFBVWF9vc2V0Y29udGV4dCAgICAgICAgICAgMTc1CisjZGVmaW5lIF9fTlJfSFBVWF9iaWdpbyAgICAgICAgICAgICAgICAgMTc2CisjZGVmaW5lIF9fTlJfSFBVWF9waXBlbm9kZSAgICAgICAgICAgICAgMTc3CisjZGVmaW5lIF9fTlJfSFBVWF9sc3luYyAgICAgICAgICAgICAgICAgMTc4CisjZGVmaW5lIF9fTlJfSFBVWF9nZXRtYWNoaW5laWQgICAgICAgICAgMTc5CisjZGVmaW5lIF9fTlJfSFBVWF9jbm9kZWlkICAgICAgICAgICAgICAgMTgwCisjZGVmaW5lIF9fTlJfSFBVWF9jbm9kZXMgICAgICAgICAgICAgICAgMTgxCisjZGVmaW5lIF9fTlJfSFBVWF9zd2FwY2xpZW50cyAgICAgICAgICAgMTgyCisjZGVmaW5lIF9fTlJfSFBVWF9ybXRfcHJvY2VzcyAgICAgICAgICAgMTgzCisjZGVmaW5lIF9fTlJfSFBVWF9kc2tsZXNzX3N0YXRzICAgICAgICAgMTg0CisjZGVmaW5lIF9fTlJfSFBVWF9zaWdwcm9jbWFzayAgICAgICAgICAgMTg1CisjZGVmaW5lIF9fTlJfSFBVWF9zaWdwZW5kaW5nICAgICAgICAgICAgMTg2CisjZGVmaW5lIF9fTlJfSFBVWF9zaWdzdXNwZW5kICAgICAgICAgICAgMTg3CisjZGVmaW5lIF9fTlJfSFBVWF9zaWdhY3Rpb24gICAgICAgICAgICAgMTg4CisjZGVmaW5lIF9fTlJfSFBVWF9yZXNlcnZlZDUgICAgICAgICAgICAgMTg5CisjZGVmaW5lIF9fTlJfSFBVWF9uZnNzdmMgICAgICAgICAgICAgICAgMTkwCisjZGVmaW5lIF9fTlJfSFBVWF9nZXRmaCAgICAgICAgICAgICAgICAgMTkxCisjZGVmaW5lIF9fTlJfSFBVWF9nZXRkb21haW5uYW1lICAgICAgICAgMTkyCisjZGVmaW5lIF9fTlJfSFBVWF9zZXRkb21haW5uYW1lICAgICAgICAgMTkzCisjZGVmaW5lIF9fTlJfSFBVWF9hc3luY19kYWVtb24gICAgICAgICAgMTk0CisjZGVmaW5lIF9fTlJfSFBVWF9nZXRkaXJlbnRyaWVzICAgICAgICAgMTk1CisjZGVmaW5lIF9fTlJfSFBVWF9zdGF0ZnMgICAgICAgICAgICAgICAgMTk2CisjZGVmaW5lIF9fTlJfSFBVWF9mc3RhdGZzICAgICAgICAgICAgICAgMTk3CisjZGVmaW5lIF9fTlJfSFBVWF92ZnNtb3VudCAgICAgICAgICAgICAgMTk4CisjZGVmaW5lIF9fTlJfSFBVWF9yZXNlcnZlZDYgICAgICAgICAgICAgMTk5CisjZGVmaW5lIF9fTlJfSFBVWF93YWl0cGlkICAgICAgICAgICAgICAgMjAwCisvKiAyMDEgLSAyMjMgbWlzc2luZyAqLworI2RlZmluZSBfX05SX0hQVVhfc2lnc2V0cmV0dXJuICAgICAgICAgIDIyNAorI2RlZmluZSBfX05SX0hQVVhfc2lnc2V0c3RhdGVtYXNrICAgICAgIDIyNQorLyogMjI2IG1pc3NpbmcgKi8KKyNkZWZpbmUgX19OUl9IUFVYX2NzICAgICAgICAgICAgICAgICAgICAyMjcKKyNkZWZpbmUgX19OUl9IUFVYX2NkcyAgICAgICAgICAgICAgICAgICAyMjgKKyNkZWZpbmUgX19OUl9IUFVYX3NldF9ub190cnVuYyAgICAgICAgICAyMjkKKyNkZWZpbmUgX19OUl9IUFVYX3BhdGhjb25mICAgICAgICAgICAgICAyMzAKKyNkZWZpbmUgX19OUl9IUFVYX2ZwYXRoY29uZiAgICAgICAgICAgICAyMzEKKy8qIDIzMiwgMjMzIG1pc3NpbmcgKi8KKyNkZWZpbmUgX19OUl9IUFVYX25mc19mY250bCAgICAgICAgICAgICAyMzQKKyNkZWZpbmUgX19OUl9IUFVYX29nZXRhY2wgICAgICAgICAgICAgICAyMzUKKyNkZWZpbmUgX19OUl9IUFVYX29mZ2V0YWNsICAgICAgICAgICAgICAyMzYKKyNkZWZpbmUgX19OUl9IUFVYX29zZXRhY2wgICAgICAgICAgICAgICAyMzcKKyNkZWZpbmUgX19OUl9IUFVYX29mc2V0YWNsICAgICAgICAgICAgICAyMzgKKyNkZWZpbmUgX19OUl9IUFVYX3BzdGF0ICAgICAgICAgICAgICAgICAyMzkKKyNkZWZpbmUgX19OUl9IUFVYX2dldGF1ZGlkICAgICAgICAgICAgICAyNDAKKyNkZWZpbmUgX19OUl9IUFVYX3NldGF1ZGlkICAgICAgICAgICAgICAyNDEKKyNkZWZpbmUgX19OUl9IUFVYX2dldGF1ZHByb2MgICAgICAgICAgICAyNDIKKyNkZWZpbmUgX19OUl9IUFVYX3NldGF1ZHByb2MgICAgICAgICAgICAyNDMKKyNkZWZpbmUgX19OUl9IUFVYX2dldGV2ZW50ICAgICAgICAgICAgICAyNDQKKyNkZWZpbmUgX19OUl9IUFVYX3NldGV2ZW50ICAgICAgICAgICAgICAyNDUKKyNkZWZpbmUgX19OUl9IUFVYX2F1ZHdyaXRlICAgICAgICAgICAgICAyNDYKKyNkZWZpbmUgX19OUl9IUFVYX2F1ZHN3aXRjaCAgICAgICAgICAgICAyNDcKKyNkZWZpbmUgX19OUl9IUFVYX2F1ZGN0bCAgICAgICAgICAgICAgICAyNDgKKyNkZWZpbmUgX19OUl9IUFVYX29nZXRhY2Nlc3MgICAgICAgICAgICAyNDkKKyNkZWZpbmUgX19OUl9IUFVYX2ZzY3RsICAgICAgICAgICAgICAgICAyNTAKKy8qIDI1MSAtIDI1OCBtaXNzaW5nICovCisjZGVmaW5lIF9fTlJfSFBVWF9zd2FwZnMgICAgICAgICAgICAgICAgMjU5CisjZGVmaW5lIF9fTlJfSFBVWF9mc3MgICAgICAgICAgICAgICAgICAgMjYwCisvKiAyNjEgLSAyNjYgbWlzc2luZyAqLworI2RlZmluZSBfX05SX0hQVVhfdHN5bmMgICAgICAgICAgICAgICAgIDI2NworI2RlZmluZSBfX05SX0hQVVhfZ2V0bnVtZmRzICAgICAgICAgICAgIDI2OAorI2RlZmluZSBfX05SX0hQVVhfcG9sbCAgICAgICAgICAgICAgICAgIDI2OQorI2RlZmluZSBfX05SX0hQVVhfZ2V0bXNnICAgICAgICAgICAgICAgIDI3MAorI2RlZmluZSBfX05SX0hQVVhfcHV0bXNnICAgICAgICAgICAgICAgIDI3MQorI2RlZmluZSBfX05SX0hQVVhfZmNoZGlyICAgICAgICAgICAgICAgIDI3MgorI2RlZmluZSBfX05SX0hQVVhfZ2V0bW91bnRfY250ICAgICAgICAgIDI3MworI2RlZmluZSBfX05SX0hQVVhfZ2V0bW91bnRfZW50cnkgICAgICAgIDI3NAorI2RlZmluZSBfX05SX0hQVVhfYWNjZXB0ICAgICAgICAgICAgICAgIDI3NQorI2RlZmluZSBfX05SX0hQVVhfYmluZCAgICAgICAgICAgICAgICAgIDI3NgorI2RlZmluZSBfX05SX0hQVVhfY29ubmVjdCAgICAgICAgICAgICAgIDI3NworI2RlZmluZSBfX05SX0hQVVhfZ2V0cGVlcm5hbWUgICAgICAgICAgIDI3OAorI2RlZmluZSBfX05SX0hQVVhfZ2V0c29ja25hbWUgICAgICAgICAgIDI3OQorI2RlZmluZSBfX05SX0hQVVhfZ2V0c29ja29wdCAgICAgICAgICAgIDI4MAorI2RlZmluZSBfX05SX0hQVVhfbGlzdGVuICAgICAgICAgICAgICAgIDI4MQorI2RlZmluZSBfX05SX0hQVVhfcmVjdiAgICAgICAgICAgICAgICAgIDI4MgorI2RlZmluZSBfX05SX0hQVVhfcmVjdmZyb20gICAgICAgICAgICAgIDI4MworI2RlZmluZSBfX05SX0hQVVhfcmVjdm1zZyAgICAgICAgICAgICAgIDI4NAorI2RlZmluZSBfX05SX0hQVVhfc2VuZCAgICAgICAgICAgICAgICAgIDI4NQorI2RlZmluZSBfX05SX0hQVVhfc2VuZG1zZyAgICAgICAgICAgICAgIDI4NgorI2RlZmluZSBfX05SX0hQVVhfc2VuZHRvICAgICAgICAgICAgICAgIDI4NworI2RlZmluZSBfX05SX0hQVVhfc2V0c29ja29wdCAgICAgICAgICAgIDI4OAorI2RlZmluZSBfX05SX0hQVVhfc2h1dGRvd24gICAgICAgICAgICAgIDI4OQorI2RlZmluZSBfX05SX0hQVVhfc29ja2V0ICAgICAgICAgICAgICAgIDI5MAorI2RlZmluZSBfX05SX0hQVVhfc29ja2V0cGFpciAgICAgICAgICAgIDI5MQorI2RlZmluZSBfX05SX0hQVVhfcHJvY19vcGVuICAgICAgICAgICAgIDI5MgorI2RlZmluZSBfX05SX0hQVVhfcHJvY19jbG9zZSAgICAgICAgICAgIDI5MworI2RlZmluZSBfX05SX0hQVVhfcHJvY19zZW5kICAgICAgICAgICAgIDI5NAorI2RlZmluZSBfX05SX0hQVVhfcHJvY19yZWN2ICAgICAgICAgICAgIDI5NQorI2RlZmluZSBfX05SX0hQVVhfcHJvY19zZW5kcmVjdiAgICAgICAgIDI5NgorI2RlZmluZSBfX05SX0hQVVhfcHJvY19zeXNjYWxsICAgICAgICAgIDI5NworLyogMjk4IC0gMzExIG1pc3NpbmcgKi8KKyNkZWZpbmUgX19OUl9IUFVYX3NlbWN0bCAgICAgICAgICAgICAgICAzMTIKKyNkZWZpbmUgX19OUl9IUFVYX21zZ2N0bCAgICAgICAgICAgICAgICAzMTMKKyNkZWZpbmUgX19OUl9IUFVYX3NobWN0bCAgICAgICAgICAgICAgICAzMTQKKyNkZWZpbmUgX19OUl9IUFVYX21wY3RsICAgICAgICAgICAgICAgICAzMTUKKyNkZWZpbmUgX19OUl9IUFVYX2V4cG9ydGZzICAgICAgICAgICAgICAzMTYKKyNkZWZpbmUgX19OUl9IUFVYX2dldHBtc2cgICAgICAgICAgICAgICAzMTcKKyNkZWZpbmUgX19OUl9IUFVYX3B1dHBtc2cgICAgICAgICAgICAgICAzMTgKKy8qIDMxOSBtaXNzaW5nICovCisjZGVmaW5lIF9fTlJfSFBVWF9tc3luYyAgICAgICAgICAgICAgICAgMzIwCisjZGVmaW5lIF9fTlJfSFBVWF9tc2xlZXAgICAgICAgICAgICAgICAgMzIxCisjZGVmaW5lIF9fTlJfSFBVWF9td2FrZXVwICAgICAgICAgICAgICAgMzIyCisjZGVmaW5lIF9fTlJfSFBVWF9tc2VtX2luaXQgICAgICAgICAgICAgMzIzCisjZGVmaW5lIF9fTlJfSFBVWF9tc2VtX3JlbW92ZSAgICAgICAgICAgMzI0CisjZGVmaW5lIF9fTlJfSFBVWF9hZGp0aW1lICAgICAgICAgICAgICAgMzI1CisjZGVmaW5lIF9fTlJfSFBVWF9rbG9hZCAgICAgICAgICAgICAgICAgMzI2CisjZGVmaW5lIF9fTlJfSFBVWF9mYXR0YWNoICAgICAgICAgICAgICAgMzI3CisjZGVmaW5lIF9fTlJfSFBVWF9mZGV0YWNoICAgICAgICAgICAgICAgMzI4CisjZGVmaW5lIF9fTlJfSFBVWF9zZXJpYWxpemUgICAgICAgICAgICAgMzI5CisjZGVmaW5lIF9fTlJfSFBVWF9zdGF0dmZzICAgICAgICAgICAgICAgMzMwCisjZGVmaW5lIF9fTlJfSFBVWF9mc3RhdHZmcyAgICAgICAgICAgICAgMzMxCisjZGVmaW5lIF9fTlJfSFBVWF9sY2hvd24gICAgICAgICAgICAgICAgMzMyCisjZGVmaW5lIF9fTlJfSFBVWF9nZXRzaWQgICAgICAgICAgICAgICAgMzMzCisjZGVmaW5lIF9fTlJfSFBVWF9zeXNmcyAgICAgICAgICAgICAgICAgMzM0CisvKiAzMzUsIDMzNiBtaXNzaW5nICovCisjZGVmaW5lIF9fTlJfSFBVWF9zY2hlZF9zZXRwYXJhbSAgICAgICAgMzM3CisjZGVmaW5lIF9fTlJfSFBVWF9zY2hlZF9nZXRwYXJhbSAgICAgICAgMzM4CisjZGVmaW5lIF9fTlJfSFBVWF9zY2hlZF9zZXRzY2hlZHVsZXIgICAgMzM5CisjZGVmaW5lIF9fTlJfSFBVWF9zY2hlZF9nZXRzY2hlZHVsZXIgICAgMzQwCisjZGVmaW5lIF9fTlJfSFBVWF9zY2hlZF95aWVsZCAgICAgICAgICAgMzQxCisjZGVmaW5lIF9fTlJfSFBVWF9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4IDM0MgorI2RlZmluZSBfX05SX0hQVVhfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiAzNDMKKyNkZWZpbmUgX19OUl9IUFVYX3NjaGVkX3JyX2dldF9pbnRlcnZhbCAzNDQKKyNkZWZpbmUgX19OUl9IUFVYX2Nsb2NrX3NldHRpbWUgICAgICAgICAzNDUKKyNkZWZpbmUgX19OUl9IUFVYX2Nsb2NrX2dldHRpbWUgICAgICAgICAzNDYKKyNkZWZpbmUgX19OUl9IUFVYX2Nsb2NrX2dldHJlcyAgICAgICAgICAzNDcKKyNkZWZpbmUgX19OUl9IUFVYX3RpbWVyX2NyZWF0ZSAgICAgICAgICAzNDgKKyNkZWZpbmUgX19OUl9IUFVYX3RpbWVyX2RlbGV0ZSAgICAgICAgICAzNDkKKyNkZWZpbmUgX19OUl9IUFVYX3RpbWVyX3NldHRpbWUgICAgICAgICAzNTAKKyNkZWZpbmUgX19OUl9IUFVYX3RpbWVyX2dldHRpbWUgICAgICAgICAzNTEKKyNkZWZpbmUgX19OUl9IUFVYX3RpbWVyX2dldG92ZXJydW4gICAgICAzNTIKKyNkZWZpbmUgX19OUl9IUFVYX25hbm9zbGVlcCAgICAgICAgICAgICAzNTMKKyNkZWZpbmUgX19OUl9IUFVYX3Rvb2xib3ggICAgICAgICAgICAgICAzNTQKKy8qIDM1NSBtaXNzaW5nICovCisjZGVmaW5lIF9fTlJfSFBVWF9nZXRkZW50cyAgICAgICAgICAgICAgMzU2CisjZGVmaW5lIF9fTlJfSFBVWF9nZXRjb250ZXh0ICAgICAgICAgICAgMzU3CisjZGVmaW5lIF9fTlJfSFBVWF9zeXNpbmZvICAgICAgICAgICAgICAgMzU4CisjZGVmaW5lIF9fTlJfSFBVWF9mY250bDY0ICAgICAgICAgICAgICAgMzU5CisjZGVmaW5lIF9fTlJfSFBVWF9mdHJ1bmNhdGU2NCAgICAgICAgICAgMzYwCisjZGVmaW5lIF9fTlJfSFBVWF9mc3RhdDY0ICAgICAgICAgICAgICAgMzYxCisjZGVmaW5lIF9fTlJfSFBVWF9nZXRkaXJlbnRyaWVzNjQgICAgICAgMzYyCisjZGVmaW5lIF9fTlJfSFBVWF9nZXRybGltaXQ2NCAgICAgICAgICAgMzYzCisjZGVmaW5lIF9fTlJfSFBVWF9sb2NrZjY0ICAgICAgICAgICAgICAgMzY0CisjZGVmaW5lIF9fTlJfSFBVWF9sc2VlazY0ICAgICAgICAgICAgICAgMzY1CisjZGVmaW5lIF9fTlJfSFBVWF9sc3RhdDY0ICAgICAgICAgICAgICAgMzY2CisjZGVmaW5lIF9fTlJfSFBVWF9tbWFwNjQgICAgICAgICAgICAgICAgMzY3CisjZGVmaW5lIF9fTlJfSFBVWF9zZXRybGltaXQ2NCAgICAgICAgICAgMzY4CisjZGVmaW5lIF9fTlJfSFBVWF9zdGF0NjQgICAgICAgICAgICAgICAgMzY5CisjZGVmaW5lIF9fTlJfSFBVWF90cnVuY2F0ZTY0ICAgICAgICAgICAgMzcwCisjZGVmaW5lIF9fTlJfSFBVWF91bGltaXQ2NCAgICAgICAgICAgICAgMzcxCisjZGVmaW5lIF9fTlJfSFBVWF9wcmVhZCAgICAgICAgICAgICAgICAgMzcyCisjZGVmaW5lIF9fTlJfSFBVWF9wcmVhZHYgICAgICAgICAgICAgICAgMzczCisjZGVmaW5lIF9fTlJfSFBVWF9wd3JpdGUgICAgICAgICAgICAgICAgMzc0CisjZGVmaW5lIF9fTlJfSFBVWF9wd3JpdGV2ICAgICAgICAgICAgICAgMzc1CisjZGVmaW5lIF9fTlJfSFBVWF9wcmVhZDY0ICAgICAgICAgICAgICAgMzc2CisjZGVmaW5lIF9fTlJfSFBVWF9wcmVhZHY2NCAgICAgICAgICAgICAgMzc3CisjZGVmaW5lIF9fTlJfSFBVWF9wd3JpdGU2NCAgICAgICAgICAgICAgMzc4CisjZGVmaW5lIF9fTlJfSFBVWF9wd3JpdGV2NjQgICAgICAgICAgICAgMzc5CisjZGVmaW5lIF9fTlJfSFBVWF9zZXRjb250ZXh0ICAgICAgICAgICAgMzgwCisjZGVmaW5lIF9fTlJfSFBVWF9zaWdhbHRzdGFjayAgICAgICAgICAgMzgxCisjZGVmaW5lIF9fTlJfSFBVWF93YWl0aWQgICAgICAgICAgICAgICAgMzgyCisjZGVmaW5lIF9fTlJfSFBVWF9zZXRwZ3JwICAgICAgICAgICAgICAgMzgzCisjZGVmaW5lIF9fTlJfSFBVWF9yZWN2bXNnMiAgICAgICAgICAgICAgMzg0CisjZGVmaW5lIF9fTlJfSFBVWF9zZW5kbXNnMiAgICAgICAgICAgICAgMzg1CisjZGVmaW5lIF9fTlJfSFBVWF9zb2NrZXQyICAgICAgICAgICAgICAgMzg2CisjZGVmaW5lIF9fTlJfSFBVWF9zb2NrZXRwYWlyMiAgICAgICAgICAgMzg3CisjZGVmaW5lIF9fTlJfSFBVWF9zZXRyZWdpZCAgICAgICAgICAgICAgMzg4CisjZGVmaW5lIF9fTlJfSFBVWF9sd3BfY3JlYXRlICAgICAgICAgICAgMzg5CisjZGVmaW5lIF9fTlJfSFBVWF9sd3BfdGVybWluYXRlICAgICAgICAgMzkwCisjZGVmaW5lIF9fTlJfSFBVWF9sd3Bfd2FpdCAgICAgICAgICAgICAgMzkxCisjZGVmaW5lIF9fTlJfSFBVWF9sd3Bfc3VzcGVuZCAgICAgICAgICAgMzkyCisjZGVmaW5lIF9fTlJfSFBVWF9sd3BfcmVzdW1lICAgICAgICAgICAgMzkzCisvKiAzOTQgbWlzc2luZyAqLworI2RlZmluZSBfX05SX0hQVVhfbHdwX2Fib3J0X3N5c2NhbGwgICAgIDM5NQorI2RlZmluZSBfX05SX0hQVVhfbHdwX2luZm8gICAgICAgICAgICAgIDM5NgorI2RlZmluZSBfX05SX0hQVVhfbHdwX2tpbGwgICAgICAgICAgICAgIDM5NworI2RlZmluZSBfX05SX0hQVVhfa3NsZWVwICAgICAgICAgICAgICAgIDM5OAorI2RlZmluZSBfX05SX0hQVVhfa3dha2V1cCAgICAgICAgICAgICAgIDM5OQorLyogNDAwIG1pc3NpbmcgKi8KKyNkZWZpbmUgX19OUl9IUFVYX3BzdGF0X2dldGx3cCAgICAgICAgICA0MDEKKyNkZWZpbmUgX19OUl9IUFVYX2x3cF9leGl0ICAgICAgICAgICAgICA0MDIKKyNkZWZpbmUgX19OUl9IUFVYX2x3cF9jb250aW51ZSAgICAgICAgICA0MDMKKyNkZWZpbmUgX19OUl9IUFVYX2dldGFjbCAgICAgICAgICAgICAgICA0MDQKKyNkZWZpbmUgX19OUl9IUFVYX2ZnZXRhY2wgICAgICAgICAgICAgICA0MDUKKyNkZWZpbmUgX19OUl9IUFVYX3NldGFjbCAgICAgICAgICAgICAgICA0MDYKKyNkZWZpbmUgX19OUl9IUFVYX2ZzZXRhY2wgICAgICAgICAgICAgICA0MDcKKyNkZWZpbmUgX19OUl9IUFVYX2dldGFjY2VzcyAgICAgICAgICAgICA0MDgKKyNkZWZpbmUgX19OUl9IUFVYX2x3cF9tdXRleF9pbml0ICAgICAgICA0MDkKKyNkZWZpbmUgX19OUl9IUFVYX2x3cF9tdXRleF9sb2NrX3N5cyAgICA0MTAKKyNkZWZpbmUgX19OUl9IUFVYX2x3cF9tdXRleF91bmxvY2sgICAgICA0MTEKKyNkZWZpbmUgX19OUl9IUFVYX2x3cF9jb25kX2luaXQgICAgICAgICA0MTIKKyNkZWZpbmUgX19OUl9IUFVYX2x3cF9jb25kX3NpZ25hbCAgICAgICA0MTMKKyNkZWZpbmUgX19OUl9IUFVYX2x3cF9jb25kX2Jyb2FkY2FzdCAgICA0MTQKKyNkZWZpbmUgX19OUl9IUFVYX2x3cF9jb25kX3dhaXRfc3lzICAgICA0MTUKKyNkZWZpbmUgX19OUl9IUFVYX2x3cF9nZXRzY2hlZHVsZXIgICAgICA0MTYKKyNkZWZpbmUgX19OUl9IUFVYX2x3cF9zZXRzY2hlZHVsZXIgICAgICA0MTcKKyNkZWZpbmUgX19OUl9IUFVYX2x3cF9nZXRzdGF0ZSAgICAgICAgICA0MTgKKyNkZWZpbmUgX19OUl9IUFVYX2x3cF9zZXRzdGF0ZSAgICAgICAgICA0MTkKKyNkZWZpbmUgX19OUl9IUFVYX2x3cF9kZXRhY2ggICAgICAgICAgICA0MjAKKyNkZWZpbmUgX19OUl9IUFVYX21sb2NrICAgICAgICAgICAgICAgICA0MjEKKyNkZWZpbmUgX19OUl9IUFVYX211bmxvY2sgICAgICAgICAgICAgICA0MjIKKyNkZWZpbmUgX19OUl9IUFVYX21sb2NrYWxsICAgICAgICAgICAgICA0MjMKKyNkZWZpbmUgX19OUl9IUFVYX211bmxvY2thbGwgICAgICAgICAgICA0MjQKKyNkZWZpbmUgX19OUl9IUFVYX3NobV9vcGVuICAgICAgICAgICAgICA0MjUKKyNkZWZpbmUgX19OUl9IUFVYX3NobV91bmxpbmsgICAgICAgICAgICA0MjYKKyNkZWZpbmUgX19OUl9IUFVYX3NpZ3F1ZXVlICAgICAgICAgICAgICA0MjcKKyNkZWZpbmUgX19OUl9IUFVYX3NpZ3dhaXRpbmZvICAgICAgICAgICA0MjgKKyNkZWZpbmUgX19OUl9IUFVYX3NpZ3RpbWVkd2FpdCAgICAgICAgICA0MjkKKyNkZWZpbmUgX19OUl9IUFVYX3NpZ3dhaXQgICAgICAgICAgICAgICA0MzAKKyNkZWZpbmUgX19OUl9IUFVYX2Fpb19yZWFkICAgICAgICAgICAgICA0MzEKKyNkZWZpbmUgX19OUl9IUFVYX2Fpb193cml0ZSAgICAgICAgICAgICA0MzIKKyNkZWZpbmUgX19OUl9IUFVYX2xpb19saXN0aW8gICAgICAgICAgICA0MzMKKyNkZWZpbmUgX19OUl9IUFVYX2Fpb19lcnJvciAgICAgICAgICAgICA0MzQKKyNkZWZpbmUgX19OUl9IUFVYX2Fpb19yZXR1cm4gICAgICAgICAgICA0MzUKKyNkZWZpbmUgX19OUl9IUFVYX2Fpb19jYW5jZWwgICAgICAgICAgICA0MzYKKyNkZWZpbmUgX19OUl9IUFVYX2Fpb19zdXNwZW5kICAgICAgICAgICA0MzcKKyNkZWZpbmUgX19OUl9IUFVYX2Fpb19mc3luYyAgICAgICAgICAgICA0MzgKKyNkZWZpbmUgX19OUl9IUFVYX21xX29wZW4gICAgICAgICAgICAgICA0MzkKKyNkZWZpbmUgX19OUl9IUFVYX21xX2Nsb3NlICAgICAgICAgICAgICA0NDAKKyNkZWZpbmUgX19OUl9IUFVYX21xX3VubGluayAgICAgICAgICAgICA0NDEKKyNkZWZpbmUgX19OUl9IUFVYX21xX3NlbmQgICAgICAgICAgICAgICA0NDIKKyNkZWZpbmUgX19OUl9IUFVYX21xX3JlY2VpdmUgICAgICAgICAgICA0NDMKKyNkZWZpbmUgX19OUl9IUFVYX21xX25vdGlmeSAgICAgICAgICAgICA0NDQKKyNkZWZpbmUgX19OUl9IUFVYX21xX3NldGF0dHIgICAgICAgICAgICA0NDUKKyNkZWZpbmUgX19OUl9IUFVYX21xX2dldGF0dHIgICAgICAgICAgICA0NDYKKyNkZWZpbmUgX19OUl9IUFVYX2tzZW1fb3BlbiAgICAgICAgICAgICA0NDcKKyNkZWZpbmUgX19OUl9IUFVYX2tzZW1fdW5saW5rICAgICAgICAgICA0NDgKKyNkZWZpbmUgX19OUl9IUFVYX2tzZW1fY2xvc2UgICAgICAgICAgICA0NDkKKyNkZWZpbmUgX19OUl9IUFVYX2tzZW1fcG9zdCAgICAgICAgICAgICA0NTAKKyNkZWZpbmUgX19OUl9IUFVYX2tzZW1fd2FpdCAgICAgICAgICAgICA0NTEKKyNkZWZpbmUgX19OUl9IUFVYX2tzZW1fcmVhZCAgICAgICAgICAgICA0NTIKKyNkZWZpbmUgX19OUl9IUFVYX2tzZW1fdHJ5d2FpdCAgICAgICAgICA0NTMKKyNkZWZpbmUgX19OUl9IUFVYX2x3cF9yd2xvY2tfaW5pdCAgICAgICA0NTQKKyNkZWZpbmUgX19OUl9IUFVYX2x3cF9yd2xvY2tfZGVzdHJveSAgICA0NTUKKyNkZWZpbmUgX19OUl9IUFVYX2x3cF9yd2xvY2tfcmRsb2NrX3N5cyA0NTYKKyNkZWZpbmUgX19OUl9IUFVYX2x3cF9yd2xvY2tfd3Jsb2NrX3N5cyA0NTcKKyNkZWZpbmUgX19OUl9IUFVYX2x3cF9yd2xvY2tfdHJ5cmRsb2NrICA0NTgKKyNkZWZpbmUgX19OUl9IUFVYX2x3cF9yd2xvY2tfdHJ5d3Jsb2NrICA0NTkKKyNkZWZpbmUgX19OUl9IUFVYX2x3cF9yd2xvY2tfdW5sb2NrICAgICA0NjAKKyNkZWZpbmUgX19OUl9IUFVYX3R0cmFjZSAgICAgICAgICAgICAgICA0NjEKKyNkZWZpbmUgX19OUl9IUFVYX3R0cmFjZV93YWl0ICAgICAgICAgICA0NjIKKyNkZWZpbmUgX19OUl9IUFVYX2xmX3dpcmVfbWVtICAgICAgICAgICA0NjMKKyNkZWZpbmUgX19OUl9IUFVYX2xmX3Vud2lyZV9tZW0gICAgICAgICA0NjQKKyNkZWZpbmUgX19OUl9IUFVYX2xmX3NlbmRfcGluX21hcCAgICAgICA0NjUKKyNkZWZpbmUgX19OUl9IUFVYX2xmX2ZyZWVfYnVmICAgICAgICAgICA0NjYKKyNkZWZpbmUgX19OUl9IUFVYX2xmX3dhaXRfbnEgICAgICAgICAgICA0NjcKKyNkZWZpbmUgX19OUl9IUFVYX2xmX3dha2V1cF9jb25uX3EgICAgICA0NjgKKyNkZWZpbmUgX19OUl9IUFVYX2xmX3VudXNlZCAgICAgICAgICAgICA0NjkKKyNkZWZpbmUgX19OUl9IUFVYX2x3cF9zZW1hX2luaXQgICAgICAgICA0NzAKKyNkZWZpbmUgX19OUl9IUFVYX2x3cF9zZW1hX3Bvc3QgICAgICAgICA0NzEKKyNkZWZpbmUgX19OUl9IUFVYX2x3cF9zZW1hX3dhaXQgICAgICAgICA0NzIKKyNkZWZpbmUgX19OUl9IUFVYX2x3cF9zZW1hX3RyeXdhaXQgICAgICA0NzMKKyNkZWZpbmUgX19OUl9IUFVYX2x3cF9zZW1hX2Rlc3Ryb3kgICAgICA0NzQKKyNkZWZpbmUgX19OUl9IUFVYX3N0YXR2ZnM2NCAgICAgICAgICAgICA0NzUKKyNkZWZpbmUgX19OUl9IUFVYX2ZzdGF0dmZzNjQgICAgICAgICAgICA0NzYKKyNkZWZpbmUgX19OUl9IUFVYX21zaF9yZWdpc3RlciAgICAgICAgICA0NzcKKyNkZWZpbmUgX19OUl9IUFVYX3B0cmFjZTY0ICAgICAgICAgICAgICA0NzgKKyNkZWZpbmUgX19OUl9IUFVYX3NlbmRmaWxlICAgICAgICAgICAgICA0NzkKKyNkZWZpbmUgX19OUl9IUFVYX3NlbmRwYXRoICAgICAgICAgICAgICA0ODAKKyNkZWZpbmUgX19OUl9IUFVYX3NlbmRmaWxlNjQgICAgICAgICAgICA0ODEKKyNkZWZpbmUgX19OUl9IUFVYX3NlbmRwYXRoNjQgICAgICAgICAgICA0ODIKKyNkZWZpbmUgX19OUl9IUFVYX21vZGxvYWQgICAgICAgICAgICAgICA0ODMKKyNkZWZpbmUgX19OUl9IUFVYX21vZHVsb2FkICAgICAgICAgICAgICA0ODQKKyNkZWZpbmUgX19OUl9IUFVYX21vZHBhdGggICAgICAgICAgICAgICA0ODUKKyNkZWZpbmUgX19OUl9IUFVYX2dldGtzeW0gICAgICAgICAgICAgICA0ODYKKyNkZWZpbmUgX19OUl9IUFVYX21vZGFkbSAgICAgICAgICAgICAgICA0ODcKKyNkZWZpbmUgX19OUl9IUFVYX21vZHN0YXQgICAgICAgICAgICAgICA0ODgKKyNkZWZpbmUgX19OUl9IUFVYX2x3cF9kZXRhY2hlZF9leGl0ICAgICA0ODkKKyNkZWZpbmUgX19OUl9IUFVYX2NyYXNoY29uZiAgICAgICAgICAgICA0OTAKKyNkZWZpbmUgX19OUl9IUFVYX3NpZ2luaGliaXQgICAgICAgICAgICA0OTEKKyNkZWZpbmUgX19OUl9IUFVYX3NpZ2VuYWJsZSAgICAgICAgICAgICA0OTIKKyNkZWZpbmUgX19OUl9IUFVYX3NwdWN0bCAgICAgICAgICAgICAgICA0OTMKKyNkZWZpbmUgX19OUl9IUFVYX3plcm9rZXJuZWxzdW0gICAgICAgICA0OTQKKyNkZWZpbmUgX19OUl9IUFVYX25mc19rc3RhdCAgICAgICAgICAgICA0OTUKKyNkZWZpbmUgX19OUl9IUFVYX2Fpb19yZWFkNjQgICAgICAgICAgICA0OTYKKyNkZWZpbmUgX19OUl9IUFVYX2Fpb193cml0ZTY0ICAgICAgICAgICA0OTcKKyNkZWZpbmUgX19OUl9IUFVYX2Fpb19lcnJvcjY0ICAgICAgICAgICA0OTgKKyNkZWZpbmUgX19OUl9IUFVYX2Fpb19yZXR1cm42NCAgICAgICAgICA0OTkKKyNkZWZpbmUgX19OUl9IUFVYX2Fpb19jYW5jZWw2NCAgICAgICAgICA1MDAKKyNkZWZpbmUgX19OUl9IUFVYX2Fpb19zdXNwZW5kNjQgICAgICAgICA1MDEKKyNkZWZpbmUgX19OUl9IUFVYX2Fpb19mc3luYzY0ICAgICAgICAgICA1MDIKKyNkZWZpbmUgX19OUl9IUFVYX2xpb19saXN0aW82NCAgICAgICAgICA1MDMKKyNkZWZpbmUgX19OUl9IUFVYX3JlY3YyICAgICAgICAgICAgICAgICA1MDQKKyNkZWZpbmUgX19OUl9IUFVYX3JlY3Zmcm9tMiAgICAgICAgICAgICA1MDUKKyNkZWZpbmUgX19OUl9IUFVYX3NlbmQyICAgICAgICAgICAgICAgICA1MDYKKyNkZWZpbmUgX19OUl9IUFVYX3NlbmR0bzIgICAgICAgICAgICAgICA1MDcKKyNkZWZpbmUgX19OUl9IUFVYX2FjbCAgICAgICAgICAgICAgICAgICA1MDgKKyNkZWZpbmUgX19OUl9IUFVYX19fY254X3AycF9jdGwgICAgICAgICA1MDkKKyNkZWZpbmUgX19OUl9IUFVYX19fY254X2dzY2hlZF9jdGwgICAgICA1MTAKKyNkZWZpbmUgX19OUl9IUFVYX19fY254X3Btb25fY3RsICAgICAgICA1MTEKKworI2RlZmluZSBfX05SX0hQVVhfc3lzY2FsbHMJCTUxMgorCisvKgorICogTGludXggc3lzdGVtIGNhbGwgbnVtYmVycy4KKyAqCisgKiBDYXJ5IENvdXRhbnQgc2F5cyB0aGF0IHdlIHNob3VsZCBqdXN0IHVzZSBhbm90aGVyIHN5c2NhbGwgZ2F0ZXdheQorICogcGFnZSB0byBhdm9pZCBjbGFzaGluZyB3aXRoIHRoZSBIUFVYIHNwYWNlLCBhbmQgSSB0aGluayBoZSdzIHJpZ2h0OgorICogaXQgd2lsbCB3b3VsZCBrZWVwIGEgYnJhbmNoIG91dCBvZiBvdXIgc3lzY2FsbCBlbnRyeSBwYXRoLCBhdCB0aGUKKyAqIHZlcnkgbGVhc3QuICBJZiB3ZSBkZWNpZGUgdG8gY2hhbmdlIGl0IGxhdGVyLCB3ZSBjYW4gYGBqdXN0JycgdHdlYWsKKyAqIHRoZSBMSU5VWF9HQVRFV0FZX0FERFIgZGVmaW5lIGF0IHRoZSBib3R0b20gYW5kIG1ha2UgX19OUl9MaW51eCBiZQorICogMTAyNCBvciBzb21ldGhpbmcuICBPaCwgYW5kIHJlY29tcGlsZSBsaWJjLiA9KQorICoKKyAqIDY0LWJpdCBIUFVYIGJpbmFyaWVzIGdldCB0aGUgc3lzY2FsbCBnYXRld2F5IGFkZHJlc3MgcGFzc2VkIGluIGEgcmVnaXN0ZXIKKyAqIGZyb20gdGhlIGtlcm5lbCBhdCBzdGFydHVwLCB3aGljaCBzZWVtcyBhIHNhbmUgc3RyYXRlZ3kuCisgKi8KKworI2RlZmluZSBfX05SX0xpbnV4ICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgX19OUl9yZXN0YXJ0X3N5c2NhbGwgICAgICAoX19OUl9MaW51eCArIDApCisjZGVmaW5lIF9fTlJfZXhpdCAgICAgICAgICAgICAgICAgKF9fTlJfTGludXggKyAxKQorI2RlZmluZSBfX05SX2ZvcmsgICAgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMikKKyNkZWZpbmUgX19OUl9yZWFkICAgICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDMpCisjZGVmaW5lIF9fTlJfd3JpdGUgICAgICAgICAgICAgICAgKF9fTlJfTGludXggKyA0KQorI2RlZmluZSBfX05SX29wZW4gICAgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgNSkKKyNkZWZpbmUgX19OUl9jbG9zZSAgICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDYpCisjZGVmaW5lIF9fTlJfd2FpdHBpZCAgICAgICAgICAgICAgKF9fTlJfTGludXggKyA3KQorI2RlZmluZSBfX05SX2NyZWF0ICAgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgOCkKKyNkZWZpbmUgX19OUl9saW5rICAgICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDkpCisjZGVmaW5lIF9fTlJfdW5saW5rICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDEwKQorI2RlZmluZSBfX05SX2V4ZWN2ZSAgICAgICAgICAgICAgKF9fTlJfTGludXggKyAxMSkKKyNkZWZpbmUgX19OUl9jaGRpciAgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTIpCisjZGVmaW5lIF9fTlJfdGltZSAgICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDEzKQorI2RlZmluZSBfX05SX21rbm9kICAgICAgICAgICAgICAgKF9fTlJfTGludXggKyAxNCkKKyNkZWZpbmUgX19OUl9jaG1vZCAgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTUpCisjZGVmaW5lIF9fTlJfbGNob3duICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDE2KQorI2RlZmluZSBfX05SX3NvY2tldCAgICAgICAgICAgICAgKF9fTlJfTGludXggKyAxNykKKyNkZWZpbmUgX19OUl9zdGF0ICAgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTgpCisjZGVmaW5lIF9fTlJfbHNlZWsgICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDE5KQorI2RlZmluZSBfX05SX2dldHBpZCAgICAgICAgICAgICAgKF9fTlJfTGludXggKyAyMCkKKyNkZWZpbmUgX19OUl9tb3VudCAgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMjEpCisjZGVmaW5lIF9fTlJfYmluZCAgICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDIyKQorI2RlZmluZSBfX05SX3NldHVpZCAgICAgICAgICAgICAgKF9fTlJfTGludXggKyAyMykKKyNkZWZpbmUgX19OUl9nZXR1aWQgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMjQpCisjZGVmaW5lIF9fTlJfc3RpbWUgICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDI1KQorI2RlZmluZSBfX05SX3B0cmFjZSAgICAgICAgICAgICAgKF9fTlJfTGludXggKyAyNikKKyNkZWZpbmUgX19OUl9hbGFybSAgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMjcpCisjZGVmaW5lIF9fTlJfZnN0YXQgICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDI4KQorI2RlZmluZSBfX05SX3BhdXNlICAgICAgICAgICAgICAgKF9fTlJfTGludXggKyAyOSkKKyNkZWZpbmUgX19OUl91dGltZSAgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMzApCisjZGVmaW5lIF9fTlJfY29ubmVjdCAgICAgICAgICAgICAoX19OUl9MaW51eCArIDMxKQorI2RlZmluZSBfX05SX2xpc3RlbiAgICAgICAgICAgICAgKF9fTlJfTGludXggKyAzMikKKyNkZWZpbmUgX19OUl9hY2Nlc3MgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMzMpCisjZGVmaW5lIF9fTlJfbmljZSAgICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDM0KQorI2RlZmluZSBfX05SX2FjY2VwdCAgICAgICAgICAgICAgKF9fTlJfTGludXggKyAzNSkKKyNkZWZpbmUgX19OUl9zeW5jICAgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMzYpCisjZGVmaW5lIF9fTlJfa2lsbCAgICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDM3KQorI2RlZmluZSBfX05SX3JlbmFtZSAgICAgICAgICAgICAgKF9fTlJfTGludXggKyAzOCkKKyNkZWZpbmUgX19OUl9ta2RpciAgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMzkpCisjZGVmaW5lIF9fTlJfcm1kaXIgICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDQwKQorI2RlZmluZSBfX05SX2R1cCAgICAgICAgICAgICAgICAgKF9fTlJfTGludXggKyA0MSkKKyNkZWZpbmUgX19OUl9waXBlICAgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgNDIpCisjZGVmaW5lIF9fTlJfdGltZXMgICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDQzKQorI2RlZmluZSBfX05SX2dldHNvY2tuYW1lICAgICAgICAgKF9fTlJfTGludXggKyA0NCkKKyNkZWZpbmUgX19OUl9icmsgICAgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgNDUpCisjZGVmaW5lIF9fTlJfc2V0Z2lkICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDQ2KQorI2RlZmluZSBfX05SX2dldGdpZCAgICAgICAgICAgICAgKF9fTlJfTGludXggKyA0NykKKyNkZWZpbmUgX19OUl9zaWduYWwgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgNDgpCisjZGVmaW5lIF9fTlJfZ2V0ZXVpZCAgICAgICAgICAgICAoX19OUl9MaW51eCArIDQ5KQorI2RlZmluZSBfX05SX2dldGVnaWQgICAgICAgICAgICAgKF9fTlJfTGludXggKyA1MCkKKyNkZWZpbmUgX19OUl9hY2N0ICAgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgNTEpCisjZGVmaW5lIF9fTlJfdW1vdW50MiAgICAgICAgICAgICAoX19OUl9MaW51eCArIDUyKQorI2RlZmluZSBfX05SX2dldHBlZXJuYW1lICAgICAgICAgKF9fTlJfTGludXggKyA1MykKKyNkZWZpbmUgX19OUl9pb2N0bCAgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgNTQpCisjZGVmaW5lIF9fTlJfZmNudGwgICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDU1KQorI2RlZmluZSBfX05SX3NvY2tldHBhaXIgICAgICAgICAgKF9fTlJfTGludXggKyA1NikKKyNkZWZpbmUgX19OUl9zZXRwZ2lkICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgNTcpCisjZGVmaW5lIF9fTlJfc2VuZCAgICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDU4KQorI2RlZmluZSBfX05SX3VuYW1lICAgICAgICAgICAgICAgKF9fTlJfTGludXggKyA1OSkKKyNkZWZpbmUgX19OUl91bWFzayAgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgNjApCisjZGVmaW5lIF9fTlJfY2hyb290ICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDYxKQorI2RlZmluZSBfX05SX3VzdGF0ICAgICAgICAgICAgICAgKF9fTlJfTGludXggKyA2MikKKyNkZWZpbmUgX19OUl9kdXAyICAgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgNjMpCisjZGVmaW5lIF9fTlJfZ2V0cHBpZCAgICAgICAgICAgICAoX19OUl9MaW51eCArIDY0KQorI2RlZmluZSBfX05SX2dldHBncnAgICAgICAgICAgICAgKF9fTlJfTGludXggKyA2NSkKKyNkZWZpbmUgX19OUl9zZXRzaWQgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgNjYpCisjZGVmaW5lIF9fTlJfcGl2b3Rfcm9vdCAgICAgICAgICAoX19OUl9MaW51eCArIDY3KQorI2RlZmluZSBfX05SX3NnZXRtYXNrICAgICAgICAgICAgKF9fTlJfTGludXggKyA2OCkKKyNkZWZpbmUgX19OUl9zc2V0bWFzayAgICAgICAgICAgIChfX05SX0xpbnV4ICsgNjkpCisjZGVmaW5lIF9fTlJfc2V0cmV1aWQgICAgICAgICAgICAoX19OUl9MaW51eCArIDcwKQorI2RlZmluZSBfX05SX3NldHJlZ2lkICAgICAgICAgICAgKF9fTlJfTGludXggKyA3MSkKKyNkZWZpbmUgX19OUl9taW5jb3JlICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgNzIpCisjZGVmaW5lIF9fTlJfc2lncGVuZGluZyAgICAgICAgICAoX19OUl9MaW51eCArIDczKQorI2RlZmluZSBfX05SX3NldGhvc3RuYW1lICAgICAgICAgKF9fTlJfTGludXggKyA3NCkKKyNkZWZpbmUgX19OUl9zZXRybGltaXQgICAgICAgICAgIChfX05SX0xpbnV4ICsgNzUpCisjZGVmaW5lIF9fTlJfZ2V0cmxpbWl0ICAgICAgICAgICAoX19OUl9MaW51eCArIDc2KQorI2RlZmluZSBfX05SX2dldHJ1c2FnZSAgICAgICAgICAgKF9fTlJfTGludXggKyA3NykKKyNkZWZpbmUgX19OUl9nZXR0aW1lb2ZkYXkgICAgICAgIChfX05SX0xpbnV4ICsgNzgpCisjZGVmaW5lIF9fTlJfc2V0dGltZW9mZGF5ICAgICAgICAoX19OUl9MaW51eCArIDc5KQorI2RlZmluZSBfX05SX2dldGdyb3VwcyAgICAgICAgICAgKF9fTlJfTGludXggKyA4MCkKKyNkZWZpbmUgX19OUl9zZXRncm91cHMgICAgICAgICAgIChfX05SX0xpbnV4ICsgODEpCisjZGVmaW5lIF9fTlJfc2VuZHRvICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDgyKQorI2RlZmluZSBfX05SX3N5bWxpbmsgICAgICAgICAgICAgKF9fTlJfTGludXggKyA4MykKKyNkZWZpbmUgX19OUl9sc3RhdCAgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgODQpCisjZGVmaW5lIF9fTlJfcmVhZGxpbmsgICAgICAgICAgICAoX19OUl9MaW51eCArIDg1KQorI2RlZmluZSBfX05SX3VzZWxpYiAgICAgICAgICAgICAgKF9fTlJfTGludXggKyA4NikKKyNkZWZpbmUgX19OUl9zd2Fwb24gICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgODcpCisjZGVmaW5lIF9fTlJfcmVib290ICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDg4KQorI2RlZmluZSBfX05SX21tYXAyICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgODkpCisjZGVmaW5lIF9fTlJfbW1hcCAgICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDkwKQorI2RlZmluZSBfX05SX211bm1hcCAgICAgICAgICAgICAgKF9fTlJfTGludXggKyA5MSkKKyNkZWZpbmUgX19OUl90cnVuY2F0ZSAgICAgICAgICAgIChfX05SX0xpbnV4ICsgOTIpCisjZGVmaW5lIF9fTlJfZnRydW5jYXRlICAgICAgICAgICAoX19OUl9MaW51eCArIDkzKQorI2RlZmluZSBfX05SX2ZjaG1vZCAgICAgICAgICAgICAgKF9fTlJfTGludXggKyA5NCkKKyNkZWZpbmUgX19OUl9mY2hvd24gICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgOTUpCisjZGVmaW5lIF9fTlJfZ2V0cHJpb3JpdHkgICAgICAgICAoX19OUl9MaW51eCArIDk2KQorI2RlZmluZSBfX05SX3NldHByaW9yaXR5ICAgICAgICAgKF9fTlJfTGludXggKyA5NykKKyNkZWZpbmUgX19OUl9yZWN2ICAgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgOTgpCisjZGVmaW5lIF9fTlJfc3RhdGZzICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDk5KQorI2RlZmluZSBfX05SX2ZzdGF0ZnMgICAgICAgICAgICAoX19OUl9MaW51eCArIDEwMCkKKyNkZWZpbmUgX19OUl9zdGF0NjQgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTAxKQorLyogI2RlZmluZSBfX05SX3NvY2tldGNhbGwgICAgICAgICAoX19OUl9MaW51eCArIDEwMikgKi8KKyNkZWZpbmUgX19OUl9zeXNsb2cgICAgICAgICAgICAgKF9fTlJfTGludXggKyAxMDMpCisjZGVmaW5lIF9fTlJfc2V0aXRpbWVyICAgICAgICAgIChfX05SX0xpbnV4ICsgMTA0KQorI2RlZmluZSBfX05SX2dldGl0aW1lciAgICAgICAgICAoX19OUl9MaW51eCArIDEwNSkKKyNkZWZpbmUgX19OUl9jYXBnZXQgICAgICAgICAgICAgKF9fTlJfTGludXggKyAxMDYpCisjZGVmaW5lIF9fTlJfY2Fwc2V0ICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTA3KQorI2RlZmluZSBfX05SX3ByZWFkNjQgICAgICAgICAgICAoX19OUl9MaW51eCArIDEwOCkKKyNkZWZpbmUgX19OUl9wd3JpdGU2NCAgICAgICAgICAgKF9fTlJfTGludXggKyAxMDkpCisjZGVmaW5lIF9fTlJfZ2V0Y3dkICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTEwKQorI2RlZmluZSBfX05SX3ZoYW5ndXAgICAgICAgICAgICAoX19OUl9MaW51eCArIDExMSkKKyNkZWZpbmUgX19OUl9mc3RhdDY0ICAgICAgICAgICAgKF9fTlJfTGludXggKyAxMTIpCisjZGVmaW5lIF9fTlJfdmZvcmsgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTEzKQorI2RlZmluZSBfX05SX3dhaXQ0ICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDExNCkKKyNkZWZpbmUgX19OUl9zd2Fwb2ZmICAgICAgICAgICAgKF9fTlJfTGludXggKyAxMTUpCisjZGVmaW5lIF9fTlJfc3lzaW5mbyAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTE2KQorI2RlZmluZSBfX05SX3NodXRkb3duICAgICAgICAgICAoX19OUl9MaW51eCArIDExNykKKyNkZWZpbmUgX19OUl9mc3luYyAgICAgICAgICAgICAgKF9fTlJfTGludXggKyAxMTgpCisjZGVmaW5lIF9fTlJfbWFkdmlzZSAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTE5KQorI2RlZmluZSBfX05SX2Nsb25lICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDEyMCkKKyNkZWZpbmUgX19OUl9zZXRkb21haW5uYW1lICAgICAgKF9fTlJfTGludXggKyAxMjEpCisjZGVmaW5lIF9fTlJfc2VuZGZpbGUgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTIyKQorI2RlZmluZSBfX05SX3JlY3Zmcm9tICAgICAgICAgICAoX19OUl9MaW51eCArIDEyMykKKyNkZWZpbmUgX19OUl9hZGp0aW1leCAgICAgICAgICAgKF9fTlJfTGludXggKyAxMjQpCisjZGVmaW5lIF9fTlJfbXByb3RlY3QgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTI1KQorI2RlZmluZSBfX05SX3NpZ3Byb2NtYXNrICAgICAgICAoX19OUl9MaW51eCArIDEyNikKKyNkZWZpbmUgX19OUl9jcmVhdGVfbW9kdWxlICAgICAgKF9fTlJfTGludXggKyAxMjcpCisjZGVmaW5lIF9fTlJfaW5pdF9tb2R1bGUgICAgICAgIChfX05SX0xpbnV4ICsgMTI4KQorI2RlZmluZSBfX05SX2RlbGV0ZV9tb2R1bGUgICAgICAoX19OUl9MaW51eCArIDEyOSkKKyNkZWZpbmUgX19OUl9nZXRfa2VybmVsX3N5bXMgICAgKF9fTlJfTGludXggKyAxMzApCisjZGVmaW5lIF9fTlJfcXVvdGFjdGwgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTMxKQorI2RlZmluZSBfX05SX2dldHBnaWQgICAgICAgICAgICAoX19OUl9MaW51eCArIDEzMikKKyNkZWZpbmUgX19OUl9mY2hkaXIgICAgICAgICAgICAgKF9fTlJfTGludXggKyAxMzMpCisjZGVmaW5lIF9fTlJfYmRmbHVzaCAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTM0KQorI2RlZmluZSBfX05SX3N5c2ZzICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDEzNSkKKyNkZWZpbmUgX19OUl9wZXJzb25hbGl0eSAgICAgICAgKF9fTlJfTGludXggKyAxMzYpCisjZGVmaW5lIF9fTlJfYWZzX3N5c2NhbGwgICAgICAgIChfX05SX0xpbnV4ICsgMTM3KSAvKiBTeXNjYWxsIGZvciBBbmRyZXcgRmlsZSBTeXN0ZW0gKi8KKyNkZWZpbmUgX19OUl9zZXRmc3VpZCAgICAgICAgICAgKF9fTlJfTGludXggKyAxMzgpCisjZGVmaW5lIF9fTlJfc2V0ZnNnaWQgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTM5KQorI2RlZmluZSBfX05SX19sbHNlZWsgICAgICAgICAgICAoX19OUl9MaW51eCArIDE0MCkKKyNkZWZpbmUgX19OUl9nZXRkZW50cyAgICAgICAgICAgKF9fTlJfTGludXggKyAxNDEpCisjZGVmaW5lIF9fTlJfX25ld3NlbGVjdCAgICAgICAgIChfX05SX0xpbnV4ICsgMTQyKQorI2RlZmluZSBfX05SX2Zsb2NrICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDE0MykKKyNkZWZpbmUgX19OUl9tc3luYyAgICAgICAgICAgICAgKF9fTlJfTGludXggKyAxNDQpCisjZGVmaW5lIF9fTlJfcmVhZHYgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTQ1KQorI2RlZmluZSBfX05SX3dyaXRldiAgICAgICAgICAgICAoX19OUl9MaW51eCArIDE0NikKKyNkZWZpbmUgX19OUl9nZXRzaWQgICAgICAgICAgICAgKF9fTlJfTGludXggKyAxNDcpCisjZGVmaW5lIF9fTlJfZmRhdGFzeW5jICAgICAgICAgIChfX05SX0xpbnV4ICsgMTQ4KQorI2RlZmluZSBfX05SX19zeXNjdGwgICAgICAgICAgICAoX19OUl9MaW51eCArIDE0OSkKKyNkZWZpbmUgX19OUl9tbG9jayAgICAgICAgICAgICAgKF9fTlJfTGludXggKyAxNTApCisjZGVmaW5lIF9fTlJfbXVubG9jayAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTUxKQorI2RlZmluZSBfX05SX21sb2NrYWxsICAgICAgICAgICAoX19OUl9MaW51eCArIDE1MikKKyNkZWZpbmUgX19OUl9tdW5sb2NrYWxsICAgICAgICAgKF9fTlJfTGludXggKyAxNTMpCisjZGVmaW5lIF9fTlJfc2NoZWRfc2V0cGFyYW0gICAgICAgICAgICAgKF9fTlJfTGludXggKyAxNTQpCisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0cGFyYW0gICAgICAgICAgICAgKF9fTlJfTGludXggKyAxNTUpCisjZGVmaW5lIF9fTlJfc2NoZWRfc2V0c2NoZWR1bGVyICAgICAgICAgKF9fTlJfTGludXggKyAxNTYpCisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0c2NoZWR1bGVyICAgICAgICAgKF9fTlJfTGludXggKyAxNTcpCisjZGVmaW5lIF9fTlJfc2NoZWRfeWllbGQgICAgICAgICAgICAgICAgKF9fTlJfTGludXggKyAxNTgpCisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21heCAgICAgKF9fTlJfTGludXggKyAxNTkpCisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiAgICAgKF9fTlJfTGludXggKyAxNjApCisjZGVmaW5lIF9fTlJfc2NoZWRfcnJfZ2V0X2ludGVydmFsICAgICAgKF9fTlJfTGludXggKyAxNjEpCisjZGVmaW5lIF9fTlJfbmFub3NsZWVwICAgICAgICAgIChfX05SX0xpbnV4ICsgMTYyKQorI2RlZmluZSBfX05SX21yZW1hcCAgICAgICAgICAgICAoX19OUl9MaW51eCArIDE2MykKKyNkZWZpbmUgX19OUl9zZXRyZXN1aWQgICAgICAgICAgKF9fTlJfTGludXggKyAxNjQpCisjZGVmaW5lIF9fTlJfZ2V0cmVzdWlkICAgICAgICAgIChfX05SX0xpbnV4ICsgMTY1KQorI2RlZmluZSBfX05SX3NpZ2FsdHN0YWNrICAgICAgICAoX19OUl9MaW51eCArIDE2NikKKyNkZWZpbmUgX19OUl9xdWVyeV9tb2R1bGUgICAgICAgKF9fTlJfTGludXggKyAxNjcpCisjZGVmaW5lIF9fTlJfcG9sbCAgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTY4KQorI2RlZmluZSBfX05SX25mc3NlcnZjdGwgICAgICAgICAoX19OUl9MaW51eCArIDE2OSkKKyNkZWZpbmUgX19OUl9zZXRyZXNnaWQgICAgICAgICAgKF9fTlJfTGludXggKyAxNzApCisjZGVmaW5lIF9fTlJfZ2V0cmVzZ2lkICAgICAgICAgIChfX05SX0xpbnV4ICsgMTcxKQorI2RlZmluZSBfX05SX3ByY3RsICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDE3MikKKyNkZWZpbmUgX19OUl9ydF9zaWdyZXR1cm4gICAgICAgKF9fTlJfTGludXggKyAxNzMpCisjZGVmaW5lIF9fTlJfcnRfc2lnYWN0aW9uICAgICAgIChfX05SX0xpbnV4ICsgMTc0KQorI2RlZmluZSBfX05SX3J0X3NpZ3Byb2NtYXNrICAgICAoX19OUl9MaW51eCArIDE3NSkKKyNkZWZpbmUgX19OUl9ydF9zaWdwZW5kaW5nICAgICAgKF9fTlJfTGludXggKyAxNzYpCisjZGVmaW5lIF9fTlJfcnRfc2lndGltZWR3YWl0ICAgIChfX05SX0xpbnV4ICsgMTc3KQorI2RlZmluZSBfX05SX3J0X3NpZ3F1ZXVlaW5mbyAgICAoX19OUl9MaW51eCArIDE3OCkKKyNkZWZpbmUgX19OUl9ydF9zaWdzdXNwZW5kICAgICAgKF9fTlJfTGludXggKyAxNzkpCisjZGVmaW5lIF9fTlJfY2hvd24gICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTgwKQorI2RlZmluZSBfX05SX3NldHNvY2tvcHQgICAgICAgICAoX19OUl9MaW51eCArIDE4MSkKKyNkZWZpbmUgX19OUl9nZXRzb2Nrb3B0ICAgICAgICAgKF9fTlJfTGludXggKyAxODIpCisjZGVmaW5lIF9fTlJfc2VuZG1zZyAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTgzKQorI2RlZmluZSBfX05SX3JlY3Ztc2cgICAgICAgICAgICAoX19OUl9MaW51eCArIDE4NCkKKyNkZWZpbmUgX19OUl9zZW1vcCAgICAgICAgICAgICAgKF9fTlJfTGludXggKyAxODUpCisjZGVmaW5lIF9fTlJfc2VtZ2V0ICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTg2KQorI2RlZmluZSBfX05SX3NlbWN0bCAgICAgICAgICAgICAoX19OUl9MaW51eCArIDE4NykKKyNkZWZpbmUgX19OUl9tc2dzbmQgICAgICAgICAgICAgKF9fTlJfTGludXggKyAxODgpCisjZGVmaW5lIF9fTlJfbXNncmN2ICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTg5KQorI2RlZmluZSBfX05SX21zZ2dldCAgICAgICAgICAgICAoX19OUl9MaW51eCArIDE5MCkKKyNkZWZpbmUgX19OUl9tc2djdGwgICAgICAgICAgICAgKF9fTlJfTGludXggKyAxOTEpCisjZGVmaW5lIF9fTlJfc2htYXQgICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTkyKQorI2RlZmluZSBfX05SX3NobWR0ICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDE5MykKKyNkZWZpbmUgX19OUl9zaG1nZXQgICAgICAgICAgICAgKF9fTlJfTGludXggKyAxOTQpCisjZGVmaW5lIF9fTlJfc2htY3RsICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTk1KQorCisjZGVmaW5lIF9fTlJfZ2V0cG1zZyAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMTk2KSAgICAgIC8qIHNvbWUgcGVvcGxlIGFjdHVhbGx5IHdhbnQgc3RyZWFtcyAqLworI2RlZmluZSBfX05SX3B1dHBtc2cgICAgICAgICAgICAoX19OUl9MaW51eCArIDE5NykgICAgICAvKiBzb21lIHBlb3BsZSBhY3R1YWxseSB3YW50IHN0cmVhbXMgKi8KKworI2RlZmluZSBfX05SX2xzdGF0NjQgICAgICAgICAgICAoX19OUl9MaW51eCArIDE5OCkKKyNkZWZpbmUgX19OUl90cnVuY2F0ZTY0ICAgICAgICAgKF9fTlJfTGludXggKyAxOTkpCisjZGVmaW5lIF9fTlJfZnRydW5jYXRlNjQgICAgICAgIChfX05SX0xpbnV4ICsgMjAwKQorI2RlZmluZSBfX05SX2dldGRlbnRzNjQgICAgICAgICAoX19OUl9MaW51eCArIDIwMSkKKyNkZWZpbmUgX19OUl9mY250bDY0ICAgICAgICAgICAgKF9fTlJfTGludXggKyAyMDIpCisjZGVmaW5lIF9fTlJfYXR0cmN0bCAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMjAzKQorI2RlZmluZSBfX05SX2FjbF9nZXQgICAgICAgICAgICAoX19OUl9MaW51eCArIDIwNCkKKyNkZWZpbmUgX19OUl9hY2xfc2V0ICAgICAgICAgICAgKF9fTlJfTGludXggKyAyMDUpCisjZGVmaW5lIF9fTlJfZ2V0dGlkICAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMjA2KQorI2RlZmluZSBfX05SX3JlYWRhaGVhZCAgICAgICAgICAoX19OUl9MaW51eCArIDIwNykKKyNkZWZpbmUgX19OUl90a2lsbCAgICAgICAgICAgICAgKF9fTlJfTGludXggKyAyMDgpCisjZGVmaW5lIF9fTlJfc2VuZGZpbGU2NCAgICAgICAgIChfX05SX0xpbnV4ICsgMjA5KQorI2RlZmluZSBfX05SX2Z1dGV4ICAgICAgICAgICAgICAoX19OUl9MaW51eCArIDIxMCkKKyNkZWZpbmUgX19OUl9zY2hlZF9zZXRhZmZpbml0eSAgKF9fTlJfTGludXggKyAyMTEpCisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0YWZmaW5pdHkgIChfX05SX0xpbnV4ICsgMjEyKQorI2RlZmluZSBfX05SX3NldF90aHJlYWRfYXJlYSAgICAoX19OUl9MaW51eCArIDIxMykKKyNkZWZpbmUgX19OUl9nZXRfdGhyZWFkX2FyZWEgICAgKF9fTlJfTGludXggKyAyMTQpCisjZGVmaW5lIF9fTlJfaW9fc2V0dXAgICAgICAgICAgIChfX05SX0xpbnV4ICsgMjE1KQorI2RlZmluZSBfX05SX2lvX2Rlc3Ryb3kgICAgICAgICAoX19OUl9MaW51eCArIDIxNikKKyNkZWZpbmUgX19OUl9pb19nZXRldmVudHMgICAgICAgKF9fTlJfTGludXggKyAyMTcpCisjZGVmaW5lIF9fTlJfaW9fc3VibWl0ICAgICAgICAgIChfX05SX0xpbnV4ICsgMjE4KQorI2RlZmluZSBfX05SX2lvX2NhbmNlbCAgICAgICAgICAoX19OUl9MaW51eCArIDIxOSkKKyNkZWZpbmUgX19OUl9hbGxvY19odWdlcGFnZXMgICAgKF9fTlJfTGludXggKyAyMjApCisjZGVmaW5lIF9fTlJfZnJlZV9odWdlcGFnZXMgICAgIChfX05SX0xpbnV4ICsgMjIxKQorI2RlZmluZSBfX05SX2V4aXRfZ3JvdXAgICAgICAgICAoX19OUl9MaW51eCArIDIyMikKKyNkZWZpbmUgX19OUl9sb29rdXBfZGNvb2tpZSAgICAgKF9fTlJfTGludXggKyAyMjMpCisjZGVmaW5lIF9fTlJfZXBvbGxfY3JlYXRlICAgICAgIChfX05SX0xpbnV4ICsgMjI0KQorI2RlZmluZSBfX05SX2Vwb2xsX2N0bCAgICAgICAgICAoX19OUl9MaW51eCArIDIyNSkKKyNkZWZpbmUgX19OUl9lcG9sbF93YWl0ICAgICAgICAgKF9fTlJfTGludXggKyAyMjYpCisjZGVmaW5lIF9fTlJfcmVtYXBfZmlsZV9wYWdlcyAgIChfX05SX0xpbnV4ICsgMjI3KQorI2RlZmluZSBfX05SX3NlbXRpbWVkb3AgICAgICAgICAoX19OUl9MaW51eCArIDIyOCkKKyNkZWZpbmUgX19OUl9tcV9vcGVuICAgICAgICAgICAgKF9fTlJfTGludXggKyAyMjkpCisjZGVmaW5lIF9fTlJfbXFfdW5saW5rICAgICAgICAgIChfX05SX0xpbnV4ICsgMjMwKQorI2RlZmluZSBfX05SX21xX3RpbWVkc2VuZCAgICAgICAoX19OUl9MaW51eCArIDIzMSkKKyNkZWZpbmUgX19OUl9tcV90aW1lZHJlY2VpdmUgICAgKF9fTlJfTGludXggKyAyMzIpCisjZGVmaW5lIF9fTlJfbXFfbm90aWZ5ICAgICAgICAgIChfX05SX0xpbnV4ICsgMjMzKQorI2RlZmluZSBfX05SX21xX2dldHNldGF0dHIgICAgICAoX19OUl9MaW51eCArIDIzNCkKKyNkZWZpbmUgX19OUl93YWl0aWQJCShfX05SX0xpbnV4ICsgMjM1KQorI2RlZmluZSBfX05SX2ZhZHZpc2U2NF82NAkoX19OUl9MaW51eCArIDIzNikKKyNkZWZpbmUgX19OUl9zZXRfdGlkX2FkZHJlc3MJKF9fTlJfTGludXggKyAyMzcpCisjZGVmaW5lIF9fTlJfc2V0eGF0dHIJCShfX05SX0xpbnV4ICsgMjM4KQorI2RlZmluZSBfX05SX2xzZXR4YXR0cgkJKF9fTlJfTGludXggKyAyMzkpCisjZGVmaW5lIF9fTlJfZnNldHhhdHRyCQkoX19OUl9MaW51eCArIDI0MCkKKyNkZWZpbmUgX19OUl9nZXR4YXR0cgkJKF9fTlJfTGludXggKyAyNDEpCisjZGVmaW5lIF9fTlJfbGdldHhhdHRyCQkoX19OUl9MaW51eCArIDI0MikKKyNkZWZpbmUgX19OUl9mZ2V0eGF0dHIJCShfX05SX0xpbnV4ICsgMjQzKQorI2RlZmluZSBfX05SX2xpc3R4YXR0cgkJKF9fTlJfTGludXggKyAyNDQpCisjZGVmaW5lIF9fTlJfbGxpc3R4YXR0cgkJKF9fTlJfTGludXggKyAyNDUpCisjZGVmaW5lIF9fTlJfZmxpc3R4YXR0cgkJKF9fTlJfTGludXggKyAyNDYpCisjZGVmaW5lIF9fTlJfcmVtb3ZleGF0dHIJKF9fTlJfTGludXggKyAyNDcpCisjZGVmaW5lIF9fTlJfbHJlbW92ZXhhdHRyCShfX05SX0xpbnV4ICsgMjQ4KQorI2RlZmluZSBfX05SX2ZyZW1vdmV4YXR0cgkoX19OUl9MaW51eCArIDI0OSkKKyNkZWZpbmUgX19OUl90aW1lcl9jcmVhdGUJKF9fTlJfTGludXggKyAyNTApCisjZGVmaW5lIF9fTlJfdGltZXJfc2V0dGltZQkoX19OUl9MaW51eCArIDI1MSkKKyNkZWZpbmUgX19OUl90aW1lcl9nZXR0aW1lCShfX05SX0xpbnV4ICsgMjUyKQorI2RlZmluZSBfX05SX3RpbWVyX2dldG92ZXJydW4JKF9fTlJfTGludXggKyAyNTMpCisjZGVmaW5lIF9fTlJfdGltZXJfZGVsZXRlCShfX05SX0xpbnV4ICsgMjU0KQorI2RlZmluZSBfX05SX2Nsb2NrX3NldHRpbWUJKF9fTlJfTGludXggKyAyNTUpCisjZGVmaW5lIF9fTlJfY2xvY2tfZ2V0dGltZQkoX19OUl9MaW51eCArIDI1NikKKyNkZWZpbmUgX19OUl9jbG9ja19nZXRyZXMJKF9fTlJfTGludXggKyAyNTcpCisjZGVmaW5lIF9fTlJfY2xvY2tfbmFub3NsZWVwCShfX05SX0xpbnV4ICsgMjU4KQorI2RlZmluZSBfX05SX3Rna2lsbAkJKF9fTlJfTGludXggKyAyNTkpCisjZGVmaW5lIF9fTlJfbWJpbmQJCShfX05SX0xpbnV4ICsgMjYwKQorI2RlZmluZSBfX05SX2dldF9tZW1wb2xpY3kJKF9fTlJfTGludXggKyAyNjEpCisjZGVmaW5lIF9fTlJfc2V0X21lbXBvbGljeQkoX19OUl9MaW51eCArIDI2MikKKworI2RlZmluZSBfX05SX0xpbnV4X3N5c2NhbGxzICAgICAyNjMKKworI2RlZmluZSBIUFVYX0dBVEVXQVlfQUREUiAgICAgICAweEMwMDAwMDA0CisjZGVmaW5lIExJTlVYX0dBVEVXQVlfQUREUiAgICAgIDB4MTAwCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNkZWZpbmUgU1lTX2lmeShzeXNjYWxsX25hbWUpICAgX19OUl8jI3N5c2NhbGxfbmFtZQorCisvKiBBc3N1bWUgYWxsIHN5c2NhbGxzIGFyZSBkb25lIGZyb20gUElDIGNvZGUganVzdCB0byBiZQorICogc2FmZS4gVGhlIHdvcnN0IGNhc2Ugc2NlbmFyaW8gaXMgdGhhdCB5b3UgbG9zZSBhIHJlZ2lzdGVyCisgKiBhbmQgc2F2ZS9yZXN0b3JlIHIxOSBhY3Jvc3MgdGhlIHN5c2NhbGwuICovCisjZGVmaW5lIFBJQworCisjaWZuZGVmIEFTTV9MSU5FX1NFUAorIyBkZWZpbmUgQVNNX0xJTkVfU0VQIDsKKyNlbmRpZgorCisvKiBEZWZpbml0aW9uIHRha2VuIGZyb20gZ2xpYmMgMi4zLjMKKyAqIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2hwcGEvc3lzZGVwLmgKKyAqLworCisjaWZkZWYgUElDCisvKiBXQVJOSU5HOiBDQU5OT1QgQkUgVVNFRCBJTiBBIE5PUCEgKi8KKyMgZGVmaW5lIEtfU1RXX0FTTV9QSUMJIiAgICAgICBjb3B5ICUlcjE5LCAlJXI0XG4iCisjIGRlZmluZSBLX0xEV19BU01fUElDCSIgICAgICAgY29weSAlJXI0LCAlJXIxOVxuIgorIyBkZWZpbmUgS19VU0lOR19HUjQJIiVyNCIsCisjZWxzZQorIyBkZWZpbmUgS19TVFdfQVNNX1BJQwkiIFxuIgorIyBkZWZpbmUgS19MRFdfQVNNX1BJQwkiIFxuIgorIyBkZWZpbmUgS19VU0lOR19HUjQKKyNlbmRpZgorCisvKiBHQ0MgaGFzIHRvIGJlIHdhcm5lZCB0aGF0IGEgc3lzY2FsbCBtYXkgY2xvYmJlciBhbGwgdGhlIEFCSQorICAgcmVnaXN0ZXJzIGxpc3RlZCBhcyAiY2FsbGVyLXNhdmVzIiwgc2VlIHBhZ2UgOCwgVGFibGUgMgorICAgaW4gc2VjdGlvbiAyLjIuNiBvZiB0aGUgUEEtUklTQyBSVU4tVElNRSBhcmNoaXRlY3R1cmUKKyAgIGRvY3VtZW50LiBIb3dldmVyISByMjggaXMgdGhlIHJlc3VsdCBhbmQgd2lsbCBjb25mbGljdCB3aXRoCisgICB0aGUgY2xvYmJlciBsaXN0IHNvIGl0IGlzIGxlZnQgb3V0LiBBbHNvIHRoZSBpbnB1dCBhcmd1bWVudHMKKyAgIHJlZ2lzdGVycyByMjAgLT4gcjI2IHdpbGwgY29uZmxpY3Qgd2l0aCB0aGUgbGlzdCBzbyB0aGV5CisgICBhcmUgdHJlYXRlZCBzcGVjaWFsbHkuIEFsdGhvdWdoIHIxOSBpcyBjbG9iYmVyZWQgYnkgdGhlIHN5c2NhbGwKKyAgIHdlIGNhbm5vdCBzYXkgdGhpcyBiZWNhdXNlIGl0IHdvdWxkIHZpb2xhdGUgQUJJLCB0aHVzIHdlIHNheQorICAgcjQgaXMgY2xvYmJlcmVkIGFuZCB1c2UgdGhhdCByZWdpc3RlciB0byBzYXZlL3Jlc3RvcmUgcjE5CisgICBhY3Jvc3MgdGhlIHN5c2NhbGwuICovCisKKyNkZWZpbmUgS19DQUxMX0NMT0JfUkVHUyAiJXIxIiwgIiVyMiIsIEtfVVNJTkdfR1I0IFwKKwkgICAgICAgIAkgIiVyMjAiLCAiJXIyOSIsICIlcjMxIgorCisjdW5kZWYgS19JTkxJTkVfU1lTQ0FMTAorI2RlZmluZSBLX0lOTElORV9TWVNDQUxMKG5hbWUsIG5yLCBhcmdzLi4uKQkoewkJCVwKKwlsb25nIF9fc3lzX3JlczsJCQkJCQkJXAorCXsJCQkJCQkJCVwKKwkJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3JlcyBhc20oInIyOCIpOwkJXAorCQlLX0xPQURfQVJHU18jI25yKGFyZ3MpCQkJCQlcCisJCS8qIEZJWE1FOiBIQUNLIHN0dy9sZHcgcjE5IGFyb3VuZCBzeXNjYWxsICovCQlcCisJCWFzbSB2b2xhdGlsZSgJCQkJCQlcCisJCQlLX1NUV19BU01fUElDCQkJCQlcCisJCQkiCWJsZSAgMHgxMDAoJSVzcjIsICUlcjApXG4iCQlcCisJCQkiCWxkaSAlMSwgJSVyMjBcbiIJCQlcCisJCQlLX0xEV19BU01fUElDCQkJCQlcCisJCQk6ICI9ciIgKF9fcmVzKQkJCQkJXAorCQkJOiAiaSIgKFNZU19pZnkobmFtZSkpIEtfQVNNX0FSR1NfIyNuciAgIAlcCisJCQk6ICJtZW1vcnkiLCBLX0NBTExfQ0xPQl9SRUdTIEtfQ0xPQl9BUkdTXyMjbnIJXAorCQkpOwkJCQkJCQlcCisJCV9fc3lzX3JlcyA9IChsb25nKV9fcmVzOwkJCQlcCisJfQkJCQkJCQkJXAorCWlmICggKHVuc2lnbmVkIGxvbmcpX19zeXNfcmVzID49ICh1bnNpZ25lZCBsb25nKS00MDk1ICl7CVwKKwkJZXJybm8gPSAtX19zeXNfcmVzOwkJICAgICAgICAJCVwKKwkJX19zeXNfcmVzID0gLTE7CQkJCQkJXAorCX0JCQkJCQkJCVwKKwlfX3N5c19yZXM7CQkJCQkJCVwKK30pCisKKyNkZWZpbmUgS19MT0FEX0FSR1NfMCgpCisjZGVmaW5lIEtfTE9BRF9BUkdTXzEocjI2KQkJCQkJXAorCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19yMjYgX19hc21fXygicjI2IikgPSAodW5zaWduZWQgbG9uZykocjI2KTsgICBcCisJS19MT0FEX0FSR1NfMCgpCisjZGVmaW5lIEtfTE9BRF9BUkdTXzIocjI2LHIyNSkJCQkJCVwKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fcjI1IF9fYXNtX18oInIyNSIpID0gKHVuc2lnbmVkIGxvbmcpKHIyNSk7ICAgXAorCUtfTE9BRF9BUkdTXzEocjI2KQorI2RlZmluZSBLX0xPQURfQVJHU18zKHIyNixyMjUscjI0KQkJCQlcCisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3IyNCBfX2FzbV9fKCJyMjQiKSA9ICh1bnNpZ25lZCBsb25nKShyMjQpOyAgIFwKKwlLX0xPQURfQVJHU18yKHIyNixyMjUpCisjZGVmaW5lIEtfTE9BRF9BUkdTXzQocjI2LHIyNSxyMjQscjIzKQkJCQlcCisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3IyMyBfX2FzbV9fKCJyMjMiKSA9ICh1bnNpZ25lZCBsb25nKShyMjMpOyAgIFwKKwlLX0xPQURfQVJHU18zKHIyNixyMjUscjI0KQorI2RlZmluZSBLX0xPQURfQVJHU181KHIyNixyMjUscjI0LHIyMyxyMjIpCQkJXAorCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19yMjIgX19hc21fXygicjIyIikgPSAodW5zaWduZWQgbG9uZykocjIyKTsgICBcCisJS19MT0FEX0FSR1NfNChyMjYscjI1LHIyNCxyMjMpCisjZGVmaW5lIEtfTE9BRF9BUkdTXzYocjI2LHIyNSxyMjQscjIzLHIyMixyMjEpCQkJXAorCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19yMjEgX19hc21fXygicjIxIikgPSAodW5zaWduZWQgbG9uZykocjIxKTsgICBcCisJS19MT0FEX0FSR1NfNShyMjYscjI1LHIyNCxyMjMscjIyKQorCisvKiBFdmVuIHdpdGggemVybyBhcmdzIHdlIHVzZSByMjAgZm9yIHRoZSBzeXNjYWxsIG51bWJlciAqLworI2RlZmluZSBLX0FTTV9BUkdTXzAKKyNkZWZpbmUgS19BU01fQVJHU18xIEtfQVNNX0FSR1NfMCwgInIiIChfX3IyNikKKyNkZWZpbmUgS19BU01fQVJHU18yIEtfQVNNX0FSR1NfMSwgInIiIChfX3IyNSkKKyNkZWZpbmUgS19BU01fQVJHU18zIEtfQVNNX0FSR1NfMiwgInIiIChfX3IyNCkKKyNkZWZpbmUgS19BU01fQVJHU180IEtfQVNNX0FSR1NfMywgInIiIChfX3IyMykKKyNkZWZpbmUgS19BU01fQVJHU181IEtfQVNNX0FSR1NfNCwgInIiIChfX3IyMikKKyNkZWZpbmUgS19BU01fQVJHU182IEtfQVNNX0FSR1NfNSwgInIiIChfX3IyMSkKKworLyogVGhlIHJlZ2lzdGVycyBub3QgbGlzdGVkIGFzIGlucHV0cyBidXQgY2xvYmJlcmVkICovCisjZGVmaW5lIEtfQ0xPQl9BUkdTXzYKKyNkZWZpbmUgS19DTE9CX0FSR1NfNSBLX0NMT0JfQVJHU182LCAiJXIyMSIKKyNkZWZpbmUgS19DTE9CX0FSR1NfNCBLX0NMT0JfQVJHU181LCAiJXIyMiIKKyNkZWZpbmUgS19DTE9CX0FSR1NfMyBLX0NMT0JfQVJHU180LCAiJXIyMyIKKyNkZWZpbmUgS19DTE9CX0FSR1NfMiBLX0NMT0JfQVJHU18zLCAiJXIyNCIKKyNkZWZpbmUgS19DTE9CX0FSR1NfMSBLX0NMT0JfQVJHU18yLCAiJXIyNSIKKyNkZWZpbmUgS19DTE9CX0FSR1NfMCBLX0NMT0JfQVJHU18xLCAiJXIyNiIKKworI2RlZmluZSBfc3lzY2FsbDAodHlwZSxuYW1lKQkJCQkJCVwKK3R5cGUgbmFtZSh2b2lkKQkJCQkJCQkJXAorewkJCQkJCQkJCVwKKyAgICByZXR1cm4gS19JTkxJTkVfU1lTQ0FMTChuYW1lLCAwKTsJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKyNkZWZpbmUgX3N5c2NhbGwxKHR5cGUsbmFtZSx0eXBlMSxhcmcxKQkJCQkJXAordHlwZSBuYW1lKHR5cGUxIGFyZzEpCQkJCQkJCVwKK3sJCQkJCQkJCQlcCisgICAgcmV0dXJuIEtfSU5MSU5FX1NZU0NBTEwobmFtZSwgMSwgYXJnMSk7CSAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworI2RlZmluZSBfc3lzY2FsbDIodHlwZSxuYW1lLHR5cGUxLGFyZzEsdHlwZTIsYXJnMikJCQlcCit0eXBlIG5hbWUodHlwZTEgYXJnMSwgdHlwZTIgYXJnMikJCQkJCVwKK3sJCQkJCQkJCQlcCisgICAgcmV0dXJuIEtfSU5MSU5FX1NZU0NBTEwobmFtZSwgMiwgYXJnMSwgYXJnMik7CSAgICAgICAgICAgICAgICBcCit9CisKKyNkZWZpbmUgX3N5c2NhbGwzKHR5cGUsbmFtZSx0eXBlMSxhcmcxLHR5cGUyLGFyZzIsdHlwZTMsYXJnMykJCVwKK3R5cGUgbmFtZSh0eXBlMSBhcmcxLCB0eXBlMiBhcmcyLCB0eXBlMyBhcmczKQkJCQlcCit7CQkJCQkJCQkJXAorICAgIHJldHVybiBLX0lOTElORV9TWVNDQUxMKG5hbWUsIDMsIGFyZzEsIGFyZzIsIGFyZzMpOwkgICAgICAgICAgICAgICAgXAorfQorCisjZGVmaW5lIF9zeXNjYWxsNCh0eXBlLG5hbWUsdHlwZTEsYXJnMSx0eXBlMixhcmcyLHR5cGUzLGFyZzMsdHlwZTQsYXJnNCkgXAordHlwZSBuYW1lKHR5cGUxIGFyZzEsIHR5cGUyIGFyZzIsIHR5cGUzIGFyZzMsIHR5cGU0IGFyZzQpCQlcCit7CQkJCQkJCQkJXAorICAgIHJldHVybiBLX0lOTElORV9TWVNDQUxMKG5hbWUsIDQsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQpOwkgICAgICAgIFwKK30KKworLyogc2VsZWN0IHRha2VzIDUgYXJndW1lbnRzICovCisjZGVmaW5lIF9zeXNjYWxsNSh0eXBlLG5hbWUsdHlwZTEsYXJnMSx0eXBlMixhcmcyLHR5cGUzLGFyZzMsdHlwZTQsYXJnNCx0eXBlNSxhcmc1KSBcCit0eXBlIG5hbWUodHlwZTEgYXJnMSwgdHlwZTIgYXJnMiwgdHlwZTMgYXJnMywgdHlwZTQgYXJnNCwgdHlwZTUgYXJnNSkJXAorewkJCQkJCQkJCVwKKyAgICByZXR1cm4gS19JTkxJTkVfU1lTQ0FMTChuYW1lLCA1LCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1KTsJXAorfQorCisjaWZkZWYgX19LRVJORUxfXworI2RlZmluZSBfX0FSQ0hfV0FOVF9PTERfUkVBRERJUgorI2RlZmluZSBfX0FSQ0hfV0FOVF9TVEFUNjQKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0FMQVJNCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19HRVRIT1NUTkFNRQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfUEFVU0UKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NHRVRNQVNLCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdOQUwKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1RJTUUKKyNkZWZpbmUgX19BUkNIX1dBTlRfQ09NUEFUX1NZU19USU1FCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19VVElNRQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfV0FJVFBJRAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU09DS0VUQ0FMTAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfRkFEVklTRTY0CisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19HRVRQR1JQCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19MTFNFRUsKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX05JQ0UKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX09MRF9HRVRSTElNSVQKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX09MRFVNT1VOVAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUEVORElORworI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUFJPQ01BU0sKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1JUX1NJR0FDVElPTgorI2VuZGlmCisKKy8qIG1tYXAgJiBtbWFwMiB0YWtlIDYgYXJndW1lbnRzICovCisjZGVmaW5lIF9zeXNjYWxsNih0eXBlLG5hbWUsdHlwZTEsYXJnMSx0eXBlMixhcmcyLHR5cGUzLGFyZzMsdHlwZTQsYXJnNCx0eXBlNSxhcmc1LHR5cGU2LGFyZzYpIFwKK3R5cGUgbmFtZSh0eXBlMSBhcmcxLCB0eXBlMiBhcmcyLCB0eXBlMyBhcmczLCB0eXBlNCBhcmc0LCB0eXBlNSBhcmc1LCB0eXBlNiBhcmc2KSBcCit7CQkJCQkJCQkJICAgICAgICBcCisgICAgcmV0dXJuIEtfSU5MSU5FX1NZU0NBTEwobmFtZSwgNiwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSwgYXJnNik7CVwKK30KKworI2lmZGVmIF9fS0VSTkVMX1NZU0NBTExTX18KKworI2luY2x1ZGUgPGFzbS9jdXJyZW50Lmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CisKK3N0YXRpYyBpbmxpbmUgcGlkX3Qgc2V0c2lkKHZvaWQpCit7CisJcmV0dXJuIHN5c19zZXRzaWQoKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgd3JpdGUoaW50IGZkLCBjb25zdCBjaGFyICpidWYsIG9mZl90IGNvdW50KQoreworCXJldHVybiBzeXNfd3JpdGUoZmQsIGJ1ZiwgY291bnQpOworfQorCitzdGF0aWMgaW5saW5lIGludCByZWFkKGludCBmZCwgY2hhciAqYnVmLCBvZmZfdCBjb3VudCkKK3sKKwlyZXR1cm4gc3lzX3JlYWQoZmQsIGJ1ZiwgY291bnQpOworfQorCitzdGF0aWMgaW5saW5lIG9mZl90IGxzZWVrKGludCBmZCwgb2ZmX3Qgb2Zmc2V0LCBpbnQgY291bnQpCit7CisJcmV0dXJuIHN5c19sc2VlayhmZCwgb2Zmc2V0LCBjb3VudCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGR1cChpbnQgZmQpCit7CisJcmV0dXJuIHN5c19kdXAoZmQpOworfQorCitzdGF0aWMgaW5saW5lIGludCBleGVjdmUoY2hhciAqZmlsZW5hbWUsIGNoYXIgKiBhcmd2IFtdLAorCWNoYXIgKiBlbnZwW10pCit7CisJZXh0ZXJuIGludCBfX2V4ZWN2ZShjaGFyICosIGNoYXIgKiosIGNoYXIgKiosIHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKKwlyZXR1cm4gX19leGVjdmUoZmlsZW5hbWUsIGFyZ3YsIGVudnAsIGN1cnJlbnQpOworfQorCitzdGF0aWMgaW5saW5lIGludCBvcGVuKGNvbnN0IGNoYXIgKmZpbGUsIGludCBmbGFnLCBpbnQgbW9kZSkKK3sKKwlyZXR1cm4gc3lzX29wZW4oZmlsZSwgZmxhZywgbW9kZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNsb3NlKGludCBmZCkKK3sKKwlyZXR1cm4gc3lzX2Nsb3NlKGZkKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9leGl0KGludCBleGl0Y29kZSkKK3sKKwlzeXNfZXhpdChleGl0Y29kZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgcGlkX3Qgd2FpdHBpZChwaWRfdCBwaWQsIGludCAqd2FpdF9zdGF0LCBpbnQgb3B0aW9ucykKK3sKKwlyZXR1cm4gc3lzX3dhaXQ0KHBpZCwgd2FpdF9zdGF0LCBvcHRpb25zLCBOVUxMKTsKK30KKworYXNtbGlua2FnZSB1bnNpZ25lZCBsb25nIHN5c19tbWFwKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sCisJCQkJdW5zaWduZWQgbG9uZyBwcm90LCB1bnNpZ25lZCBsb25nIGZsYWdzLAorCQkJCXVuc2lnbmVkIGxvbmcgZmQsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKK2FzbWxpbmthZ2UgdW5zaWduZWQgbG9uZyBzeXNfbW1hcDIodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwKKwkJCQl1bnNpZ25lZCBsb25nIHByb3QsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCisJCQkJdW5zaWduZWQgbG9uZyBmZCwgdW5zaWduZWQgbG9uZyBwZ29mZik7CitzdHJ1Y3QgcHRfcmVnczsKK2FzbWxpbmthZ2UgaW50IHN5c19leGVjdmUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworaW50IHN5c19jbG9uZSh1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzLCB1bnNpZ25lZCBsb25nIHVzcCwKKwkJc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworaW50IHN5c192Zm9yayhzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitpbnQgc3lzX3BpcGUoaW50ICpmaWxkZXMpOworbG9uZyBzeXNfcHRyYWNlKGxvbmcgcmVxdWVzdCwgcGlkX3QgcGlkLCBsb25nIGFkZHIsIGxvbmcgZGF0YSk7CitzdHJ1Y3Qgc2lnYWN0aW9uOworYXNtbGlua2FnZSBsb25nIHN5c19ydF9zaWdhY3Rpb24oaW50IHNpZywKKwkJCQljb25zdCBzdHJ1Y3Qgc2lnYWN0aW9uIF9fdXNlciAqYWN0LAorCQkJCXN0cnVjdCBzaWdhY3Rpb24gX191c2VyICpvYWN0LAorCQkJCXNpemVfdCBzaWdzZXRzaXplKTsKKworI2VuZGlmCS8qIF9fS0VSTkVMX1NZU0NBTExTX18gKi8KKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisjdW5kZWYgU1RSCisKKy8qCisgKiAiQ29uZGl0aW9uYWwiIHN5c2NhbGxzCisgKgorICogV2hhdCB3ZSB3YW50IGlzIF9fYXR0cmlidXRlX18oKHdlYWssYWxpYXMoInN5c19uaV9zeXNjYWxsIikpKSwKKyAqIGJ1dCBpdCBkb2Vzbid0IHdvcmsgb24gYWxsIHRvb2xjaGFpbnMsIHNvIHdlIGp1c3QgZG8gaXQgYnkgaGFuZAorICovCisjZGVmaW5lIGNvbmRfc3lzY2FsbCh4KSBhc20oIi53ZWFrXHQiICN4ICJcblx0LnNldFx0IiAjeCAiLHN5c19uaV9zeXNjYWxsIikKKworI2VuZGlmIC8qIF9BU01fUEFSSVNDX1VOSVNURF9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3Vud2luZC5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL3Vud2luZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmN2U2ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2MvdW53aW5kLmgKQEAgLTAsMCArMSw3NyBAQAorI2lmbmRlZiBfVU5XSU5EX0hfCisjZGVmaW5lIF9VTldJTkRfSF8KKworI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKworLyogRnJvbSBBQkkgc3BlY2lmaWNhdGlvbnMgKi8KK3N0cnVjdCB1bndpbmRfdGFibGVfZW50cnkgeworCXVuc2lnbmVkIGludCByZWdpb25fc3RhcnQ7CisJdW5zaWduZWQgaW50IHJlZ2lvbl9lbmQ7CisJdW5zaWduZWQgaW50IENhbm5vdF91bndpbmQ6MTsgLyogMCAqLworCXVuc2lnbmVkIGludCBNaWxsaWNvZGU6MTsJLyogMSAqLworCXVuc2lnbmVkIGludCBNaWxsaWNvZGVfc2F2ZV9zcjA6MTsJLyogMiAqLworCXVuc2lnbmVkIGludCBSZWdpb25fZGVzY3JpcHRpb246MjsJLyogMy4uNCAqLworCXVuc2lnbmVkIGludCByZXNlcnZlZDE6MTsJLyogNSAqLworCXVuc2lnbmVkIGludCBFbnRyeV9TUjoxOwkvKiA2ICovCisJdW5zaWduZWQgaW50IEVudHJ5X0ZSOjQ7CS8qIG51bWJlciBzYXZlZCAqLy8qIDcuLjEwICovCisJdW5zaWduZWQgaW50IEVudHJ5X0dSOjU7CS8qIG51bWJlciBzYXZlZCAqLy8qIDExLi4xNSAqLworCXVuc2lnbmVkIGludCBBcmdzX3N0b3JlZDoxOwkvKiAxNiAqLworCXVuc2lnbmVkIGludCBWYXJpYWJsZV9GcmFtZToxOwkvKiAxNyAqLworCXVuc2lnbmVkIGludCBTZXBhcmF0ZV9QYWNrYWdlX0JvZHk6MTsJLyogMTggKi8KKwl1bnNpZ25lZCBpbnQgRnJhbWVfRXh0ZW5zaW9uX01pbGxpY29kZToxOwkvKiAxOSAqLworCXVuc2lnbmVkIGludCBTdGFja19PdmVyZmxvd19DaGVjazoxOwkvKiAyMCAqLworCXVuc2lnbmVkIGludCBUd29fSW5zdHJ1Y3Rpb25fU1BfSW5jcmVtZW50OjE7CS8qIDIxICovCisJdW5zaWduZWQgaW50IEFkYV9SZWdpb246MTsJLyogMjIgKi8KKwl1bnNpZ25lZCBpbnQgY3h4X2luZm86MTsJLyogMjMgKi8KKwl1bnNpZ25lZCBpbnQgY3h4X3RyeV9jYXRjaDoxOwkvKiAyNCAqLworCXVuc2lnbmVkIGludCBzY2hlZF9lbnRyeV9zZXE6MTsJLyogMjUgKi8KKwl1bnNpZ25lZCBpbnQgcmVzZXJ2ZWQyOjE7CS8qIDI2ICovCisJdW5zaWduZWQgaW50IFNhdmVfU1A6MTsJLyogMjcgKi8KKwl1bnNpZ25lZCBpbnQgU2F2ZV9SUDoxOwkvKiAyOCAqLworCXVuc2lnbmVkIGludCBTYXZlX01SUF9pbl9mcmFtZToxOwkvKiAyOSAqLworCXVuc2lnbmVkIGludCBleHRuX3B0cl9kZWZpbmVkOjE7CS8qIDMwICovCisJdW5zaWduZWQgaW50IENsZWFudXBfZGVmaW5lZDoxOwkvKiAzMSAqLworCQorCXVuc2lnbmVkIGludCBNUEVfWExfaW50ZXJydXB0X21hcmtlcjoxOwkvKiAwICovCisJdW5zaWduZWQgaW50IEhQX1VYX2ludGVycnVwdF9tYXJrZXI6MTsJLyogMSAqLworCXVuc2lnbmVkIGludCBMYXJnZV9mcmFtZToxOwkvKiAyICovCisJdW5zaWduZWQgaW50IFBzZXVkb19TUF9TZXQ6MTsJLyogMyAqLworCXVuc2lnbmVkIGludCByZXNlcnZlZDQ6MTsJLyogNCAqLworCXVuc2lnbmVkIGludCBUb3RhbF9mcmFtZV9zaXplOjI3OwkvKiA1Li4zMSAqLworfTsKKworc3RydWN0IHVud2luZF90YWJsZSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCWNvbnN0IGNoYXIgKm5hbWU7CisJdW5zaWduZWQgbG9uZyBncDsKKwl1bnNpZ25lZCBsb25nIGJhc2VfYWRkcjsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0OworCXVuc2lnbmVkIGxvbmcgZW5kOworCWNvbnN0IHN0cnVjdCB1bndpbmRfdGFibGVfZW50cnkgKnRhYmxlOworCXVuc2lnbmVkIGxvbmcgbGVuZ3RoOworfTsKKworc3RydWN0IHVud2luZF9mcmFtZV9pbmZvIHsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQ7CisJLyogRXZlbnR1YWxseSB3ZSB3b3VsZCBsaWtlIHRvIGJlIGFibGUgdG8gZ2V0IGF0IGFueSBvZiB0aGUgcmVnaXN0ZXJzCisJICAgYXZhaWxhYmxlOyBidXQgZm9yIG5vdyB3ZSBvbmx5IHRyeSB0byBnZXQgdGhlIHNwIGFuZCBpcCBmb3IgZWFjaAorCSAgIGZyYW1lICovCisJLyogc3RydWN0IHB0X3JlZ3MgcmVnczsgKi8KKwl1bnNpZ25lZCBsb25nIHNwLCBpcCwgcnAsIHIzMTsKKwl1bnNpZ25lZCBsb25nIHByZXZfc3AsIHByZXZfaXA7Cit9OworCitzdHJ1Y3QgdW53aW5kX3RhYmxlICoKK3Vud2luZF90YWJsZV9hZGQoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgbG9uZyBiYXNlX2FkZHIsIAorCQkgdW5zaWduZWQgbG9uZyBncCwgdm9pZCAqc3RhcnQsIHZvaWQgKmVuZCk7Cit2b2lkCit1bndpbmRfdGFibGVfcmVtb3ZlKHN0cnVjdCB1bndpbmRfdGFibGUgKnRhYmxlKTsKKwordm9pZCB1bndpbmRfZnJhbWVfaW5pdChzdHJ1Y3QgdW53aW5kX2ZyYW1lX2luZm8gKmluZm8sIHN0cnVjdCB0YXNrX3N0cnVjdCAqdCwgCisJCSAgICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Cit2b2lkIHVud2luZF9mcmFtZV9pbml0X2Zyb21fYmxvY2tlZF90YXNrKHN0cnVjdCB1bndpbmRfZnJhbWVfaW5mbyAqaW5mbywgc3RydWN0IHRhc2tfc3RydWN0ICp0KTsKK3ZvaWQgdW53aW5kX2ZyYW1lX2luaXRfcnVubmluZyhzdHJ1Y3QgdW53aW5kX2ZyYW1lX2luZm8gKmluZm8sIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2ludCB1bndpbmRfb25jZShzdHJ1Y3QgdW53aW5kX2ZyYW1lX2luZm8gKmluZm8pOworaW50IHVud2luZF90b191c2VyKHN0cnVjdCB1bndpbmRfZnJhbWVfaW5mbyAqaW5mbyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3VzZXIuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy91c2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAyMjQ3NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy91c2VyLmgKQEAgLTAsMCArMSw1IEBACisvKiBUaGlzIGZpbGUgc2hvdWxkIG5vdCBleGlzdCwgYnV0IGxvdHMgb2YgZ2VuZXJpYyBjb2RlIHN0aWxsIGluY2x1ZGVzCisgICBpdC4gSXQncyBhIGhhbmdvdmVyIGZyb20gb2xkIGEub3V0IGRheXMgYW5kIHRoZSB0cmFkaXRpb25hbCBjb3JlCisgICBkdW1wIGZvcm1hdC4gIFdlIGFyZSBFTEYtb25seSwgYW5kIHNvIGFyZSBvdXIgY29yZSBkdW1wcy4gIElmIHdlCisgICBuZWVkIHRvIHN1cHBvcnQgSFAvVVggY29yZSBmb3JtYXQgdGhlbiB3ZSdsbCBkbyBpdCBoZXJlCisgICBldmVudHVhbGx5LiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3hvci5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL3hvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4MmViMTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2MveG9yLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL3hvci5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjLzgyNTNwaXQuaCBiL2luY2x1ZGUvYXNtLXBwYy84MjUzcGl0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg1Zjc4NAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYy84MjUzcGl0LmgKQEAgLTAsMCArMSwxMCBAQAorLyoKKyAqIDgyNTMvODI1NCBQcm9ncmFtbWFibGUgSW50ZXJ2YWwgVGltZXIKKyAqLworCisjaWZuZGVmIF84MjUzUElUX0gKKyNkZWZpbmUgXzgyNTNQSVRfSAorCisjZGVmaW5lIFBJVF9USUNLX1JBVEUgCTExOTMxODJVTAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy84eHhfaW1tYXAuaCBiL2luY2x1ZGUvYXNtLXBwYy84eHhfaW1tYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzExY2VmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjLzh4eF9pbW1hcC5oCkBAIC0wLDAgKzEsNTY0IEBACisvKgorICogTVBDOHh4IEludGVybmFsIE1lbW9yeSBNYXAKKyAqIENvcHlyaWdodCAoYykgMTk5NyBEYW4gTWFsZWsgKGRtYWxla0BqbGMubmV0KQorICoKKyAqIFRoZSBJL08gb24gdGhlIE1QQzg2MCBpcyBjb21wcmlzZWQgb2YgYmxvY2tzIG9mIHNwZWNpYWwgcmVnaXN0ZXJzCisgKiBhbmQgdGhlIGR1YWwgcG9ydCByYW0gZm9yIHRoZSBDb21tdW5pY2F0aW9uIFByb2Nlc3NvciBNb2R1bGUuCisgKiBXaXRoaW4gdGhpcyBzcGFjZSBhcmUgZnVuY3Rpb25hbCB1bml0cyBzdWNoIGFzIHRoZSBTSVUsIG1lbW9yeQorICogY29udHJvbGxlciwgc3lzdGVtIHRpbWVycywgYW5kIG90aGVyIGNvbnRyb2wgZnVuY3Rpb25zLiAgSXQgaXMKKyAqIGEgY29tYmluYXRpb24gdGhhdCBJIGZvdW5kIGRpZmZpY3VsdCB0byBzZXBhcmF0ZSBpbnRvIGxvZ2ljYWwKKyAqIGZ1bmN0aW9uYWwgZmlsZXMuLi4uLmJ1dCBhbnlvbmUgZWxzZSBpcyB3ZWxjb21lIHRvIHRyeS4gIC0tIERhbgorICovCisjaWZkZWYgX19LRVJORUxfXworI2lmbmRlZiBfX0lNTUFQXzhYWF9fCisjZGVmaW5lIF9fSU1NQVBfOFhYX18KKworLyogU3lzdGVtIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzLgorKi8KK3R5cGVkZWYJc3RydWN0IHN5c19jb25mIHsKKwl1aW50CXNjX3NpdW1jcjsKKwl1aW50CXNjX3N5cGNyOworCXVpbnQJc2Nfc3d0OworCWNoYXIJcmVzMVsyXTsKKwl1c2hvcnQJc2Nfc3dzcjsKKwl1aW50CXNjX3NpcGVuZDsKKwl1aW50CXNjX3NpbWFzazsKKwl1aW50CXNjX3NpZWw7CisJdWludAlzY19zaXZlYzsKKwl1aW50CXNjX3Rlc3I7CisJY2hhcglyZXMyWzB4Y107CisJdWludAlzY19zZGNyOworCWNoYXIJcmVzM1sweDRjXTsKK30gc3lzY29uZjh4eF90OworCisvKiBQQ01DSUEgY29uZmlndXJhdGlvbiByZWdpc3RlcnMuCisqLwordHlwZWRlZiBzdHJ1Y3QgcGNtY2lhX2NvbmYgeworCXVpbnQJcGNtY19wYnIwOworCXVpbnQJcGNtY19wb3IwOworCXVpbnQJcGNtY19wYnIxOworCXVpbnQJcGNtY19wb3IxOworCXVpbnQJcGNtY19wYnIyOworCXVpbnQJcGNtY19wb3IyOworCXVpbnQJcGNtY19wYnIzOworCXVpbnQJcGNtY19wb3IzOworCXVpbnQJcGNtY19wYnI0OworCXVpbnQJcGNtY19wb3I0OworCXVpbnQJcGNtY19wYnI1OworCXVpbnQJcGNtY19wb3I1OworCXVpbnQJcGNtY19wYnI2OworCXVpbnQJcGNtY19wb3I2OworCXVpbnQJcGNtY19wYnI3OworCXVpbnQJcGNtY19wb3I3OworCWNoYXIJcmVzMVsweDIwXTsKKwl1aW50CXBjbWNfcGdjcmE7CisJdWludAlwY21jX3BnY3JiOworCXVpbnQJcGNtY19wc2NyOworCWNoYXIJcmVzMls0XTsKKwl1aW50CXBjbWNfcGlwcjsKKwljaGFyCXJlczNbNF07CisJdWludAlwY21jX3BlcjsKKwljaGFyCXJlczRbNF07Cit9IHBjbWNvbmY4eHhfdDsKKworLyogTWVtb3J5IGNvbnRyb2xsZXIgcmVnaXN0ZXJzLgorKi8KK3R5cGVkZWYgc3RydWN0CW1lbV9jdGxyIHsKKwl1aW50CW1lbWNfYnIwOworCXVpbnQJbWVtY19vcjA7CisJdWludAltZW1jX2JyMTsKKwl1aW50CW1lbWNfb3IxOworCXVpbnQJbWVtY19icjI7CisJdWludAltZW1jX29yMjsKKwl1aW50CW1lbWNfYnIzOworCXVpbnQJbWVtY19vcjM7CisJdWludAltZW1jX2JyNDsKKwl1aW50CW1lbWNfb3I0OworCXVpbnQJbWVtY19icjU7CisJdWludAltZW1jX29yNTsKKwl1aW50CW1lbWNfYnI2OworCXVpbnQJbWVtY19vcjY7CisJdWludAltZW1jX2JyNzsKKwl1aW50CW1lbWNfb3I3OworCWNoYXIJcmVzMVsweDI0XTsKKwl1aW50CW1lbWNfbWFyOworCXVpbnQJbWVtY19tY3I7CisJY2hhcglyZXMyWzRdOworCXVpbnQJbWVtY19tYW1yOworCXVpbnQJbWVtY19tYm1yOworCXVzaG9ydAltZW1jX21zdGF0OworCXVzaG9ydAltZW1jX21wdHByOworCXVpbnQJbWVtY19tZHI7CisJY2hhcglyZXMzWzB4ODBdOworfSBtZW1jdGw4eHhfdDsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogQlIgLSBNZW1vcnkgQ29udHJvbGVyOiBCYXNlIFJlZ2lzdGVyCQkJCQkxNi05CisgKi8KKyNkZWZpbmUgQlJfQkFfTVNLCTB4ZmZmZjgwMDAJLyogQmFzZSBBZGRyZXNzIE1hc2sJCQkqLworI2RlZmluZSBCUl9BVF9NU0sJMHgwMDAwNzAwMAkvKiBBZGRyZXNzIFR5cGUgTWFzawkJCSovCisjZGVmaW5lIEJSX1BTX01TSwkweDAwMDAwYzAwCS8qIFBvcnQgU2l6ZSBNYXNrCQkJKi8KKyNkZWZpbmUgQlJfUFNfMzIJMHgwMDAwMDAwMAkvKiAzMiBiaXQgcG9ydCBzaXplCQkJKi8KKyNkZWZpbmUgQlJfUFNfMTYJMHgwMDAwMDgwMAkvKiAxNiBiaXQgcG9ydCBzaXplCQkJKi8KKyNkZWZpbmUgQlJfUFNfOAkJMHgwMDAwMDQwMAkvKiAgOCBiaXQgcG9ydCBzaXplCQkJKi8KKyNkZWZpbmUgQlJfUEFSRQkJMHgwMDAwMDIwMAkvKiBQYXJpdHkgRW5hYmxlCQkJKi8KKyNkZWZpbmUgQlJfV1AJCTB4MDAwMDAxMDAJLyogV3JpdGUgUHJvdGVjdAkJCSovCisjZGVmaW5lIEJSX01TX01TSwkweDAwMDAwMGMwCS8qIE1hY2hpbmUgU2VsZWN0IE1hc2sJCQkqLworI2RlZmluZSBCUl9NU19HUENNCTB4MDAwMDAwMDAJLyogRy5QLkMuTS4gTWFjaGluZSBTZWxlY3QJCSovCisjZGVmaW5lIEJSX01TX1VQTUEJMHgwMDAwMDA4MAkvKiBVLlAuTS5BIE1hY2hpbmUgU2VsZWN0CQkqLworI2RlZmluZSBCUl9NU19VUE1CCTB4MDAwMDAwYzAJLyogVS5QLk0uQiBNYWNoaW5lIFNlbGVjdAkJKi8KKyNkZWZpbmUgQlJfVgkJMHgwMDAwMDAwMQkvKiBCYW5rIFZhbGlkCQkJCSovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIE9SIC0gTWVtb3J5IENvbnRyb2xlcjogT3B0aW9uIFJlZ2lzdGVyCQkJCTE2LTExCisgKi8KKyNkZWZpbmUgT1JfQU1fTVNLCTB4ZmZmZjgwMDAJLyogQWRkcmVzcyBNYXNrIE1hc2sJCQkqLworI2RlZmluZSBPUl9BVE1fTVNLCTB4MDAwMDcwMDAJLyogQWRkcmVzcyBUeXBlIE1hc2sgTWFzawkJKi8KKyNkZWZpbmUgT1JfQ1NOVF9TQU0JMHgwMDAwMDgwMAkvKiBDaGlwIFNlbGVjdCBOZWdhdGlvbiBUaW1lLyBTdGFydAkqLworCQkJCQkvKiBBZGRyZXNzIE11bHRpcGxleAkJCSovCisjZGVmaW5lIE9SX0FDU19NU0sJMHgwMDAwMDYwMAkvKiBBZGRyZXNzIHRvIENoaXAgU2VsZWN0IFNldHVwIG1hc2sJKi8KKyNkZWZpbmUgT1JfQUNTX0RJVjEJMHgwMDAwMDAwMAkvKiBDUyBpcyBvdXRwdXQgYXQgdGhlIHNhbWUgdGltZQkqLworI2RlZmluZSBPUl9BQ1NfRElWNAkweDAwMDAwNDAwCS8qIENTIGlzIG91dHB1dCAxLzQgYSBjbG9jayBsYXRlcgkqLworI2RlZmluZSBPUl9BQ1NfRElWMgkweDAwMDAwNjAwCS8qIENTIGlzIG91dHB1dCAxLzIgYSBjbG9jayBsYXRlcgkqLworI2RlZmluZSBPUl9HNUxBCQkweDAwMDAwNDAwCS8qIE91dHB1dCAjR1BMNSBvbiAjR1BMX0E1CQkqLworI2RlZmluZSBPUl9HNUxTCQkweDAwMDAwMjAwCS8qIERyaXZlICNHUEwgaGlnaCBvbiBmYWxsaW5nIGVkZ2Ugb2YuLi4qLworI2RlZmluZSBPUl9CSQkJMHgwMDAwMDEwMAkvKiBCdXJzdCBpbmhpYml0CQkJKi8KKyNkZWZpbmUgT1JfU0NZX01TSwkweDAwMDAwMGYwCS8qIEN5Y2xlIExlbmdodCBpbiBDbG9ja3MJCSovCisjZGVmaW5lIE9SX1NDWV8wX0NMSwkweDAwMDAwMDAwCS8qIDAgY2xvY2sgY3ljbGVzIHdhaXQgc3RhdGVzCQkqLworI2RlZmluZSBPUl9TQ1lfMV9DTEsJMHgwMDAwMDAxMAkvKiAxIGNsb2NrIGN5Y2xlcyB3YWl0IHN0YXRlcwkJKi8KKyNkZWZpbmUgT1JfU0NZXzJfQ0xLCTB4MDAwMDAwMjAJLyogMiBjbG9jayBjeWNsZXMgd2FpdCBzdGF0ZXMJCSovCisjZGVmaW5lIE9SX1NDWV8zX0NMSwkweDAwMDAwMDMwCS8qIDMgY2xvY2sgY3ljbGVzIHdhaXQgc3RhdGVzCQkqLworI2RlZmluZSBPUl9TQ1lfNF9DTEsJMHgwMDAwMDA0MAkvKiA0IGNsb2NrIGN5Y2xlcyB3YWl0IHN0YXRlcwkJKi8KKyNkZWZpbmUgT1JfU0NZXzVfQ0xLCTB4MDAwMDAwNTAJLyogNSBjbG9jayBjeWNsZXMgd2FpdCBzdGF0ZXMJCSovCisjZGVmaW5lIE9SX1NDWV82X0NMSwkweDAwMDAwMDYwCS8qIDYgY2xvY2sgY3ljbGVzIHdhaXQgc3RhdGVzCQkqLworI2RlZmluZSBPUl9TQ1lfN19DTEsJMHgwMDAwMDA3MAkvKiA3IGNsb2NrIGN5Y2xlcyB3YWl0IHN0YXRlcwkJKi8KKyNkZWZpbmUgT1JfU0NZXzhfQ0xLCTB4MDAwMDAwODAJLyogOCBjbG9jayBjeWNsZXMgd2FpdCBzdGF0ZXMJCSovCisjZGVmaW5lIE9SX1NDWV85X0NMSwkweDAwMDAwMDkwCS8qIDkgY2xvY2sgY3ljbGVzIHdhaXQgc3RhdGVzCQkqLworI2RlZmluZSBPUl9TQ1lfMTBfQ0xLCTB4MDAwMDAwYTAJLyogMTAgY2xvY2sgY3ljbGVzIHdhaXQgc3RhdGVzCQkqLworI2RlZmluZSBPUl9TQ1lfMTFfQ0xLCTB4MDAwMDAwYjAJLyogMTEgY2xvY2sgY3ljbGVzIHdhaXQgc3RhdGVzCQkqLworI2RlZmluZSBPUl9TQ1lfMTJfQ0xLCTB4MDAwMDAwYzAJLyogMTIgY2xvY2sgY3ljbGVzIHdhaXQgc3RhdGVzCQkqLworI2RlZmluZSBPUl9TQ1lfMTNfQ0xLCTB4MDAwMDAwZDAJLyogMTMgY2xvY2sgY3ljbGVzIHdhaXQgc3RhdGVzCQkqLworI2RlZmluZSBPUl9TQ1lfMTRfQ0xLCTB4MDAwMDAwZTAJLyogMTQgY2xvY2sgY3ljbGVzIHdhaXQgc3RhdGVzCQkqLworI2RlZmluZSBPUl9TQ1lfMTVfQ0xLCTB4MDAwMDAwZjAJLyogMTUgY2xvY2sgY3ljbGVzIHdhaXQgc3RhdGVzCQkqLworI2RlZmluZSBPUl9TRVRBCQkweDAwMDAwMDA4CS8qIEV4dGVybmFsIFRyYW5zZmVyIEFja25vd2xlZGdlCSovCisjZGVmaW5lIE9SX1RSTFgJCTB4MDAwMDAwMDQJLyogVGltaW5nIFJlbGF4ZWQJCQkqLworI2RlZmluZSBPUl9FSFRSCQkweDAwMDAwMDAyCS8qIEV4dGVuZGVkIEhvbGQgVGltZSBvbiBSZWFkCQkqLworCisvKiBTeXN0ZW0gSW50ZWdyYXRpb24gVGltZXJzLgorKi8KK3R5cGVkZWYgc3RydWN0CXN5c19pbnRfdGltZXJzIHsKKwl1c2hvcnQJc2l0X3Ric2NyOworCWNoYXIJcmVzMFsweDAyXTsKKwl1aW50CXNpdF90YnJlZmYwOworCXVpbnQJc2l0X3RicmVmZjE7CisJY2hhcglyZXMxWzB4MTRdOworCXVzaG9ydAlzaXRfcnRjc2M7CisJY2hhcglyZXMyWzB4MDJdOworCXVpbnQJc2l0X3J0YzsKKwl1aW50CXNpdF9ydHNlYzsKKwl1aW50CXNpdF9ydGNhbDsKKwljaGFyCXJlczNbMHgxMF07CisJdXNob3J0CXNpdF9waXNjcjsKKwljaGFyCXJlczRbMl07CisJdWludAlzaXRfcGl0YzsKKwl1aW50CXNpdF9waXRyOworCWNoYXIJcmVzNVsweDM0XTsKK30gc2l0OHh4X3Q7CisKKyNkZWZpbmUgVEJTQ1JfVEJJUlFfTUFTSwkoKHVzaG9ydCkweGZmMDApCisjZGVmaW5lIFRCU0NSX1JFRkEJCSgodXNob3J0KTB4MDA4MCkKKyNkZWZpbmUgVEJTQ1JfUkVGQgkJKCh1c2hvcnQpMHgwMDQwKQorI2RlZmluZSBUQlNDUl9SRUZBRQkJKCh1c2hvcnQpMHgwMDA4KQorI2RlZmluZSBUQlNDUl9SRUZCRQkJKCh1c2hvcnQpMHgwMDA0KQorI2RlZmluZSBUQlNDUl9UQkYJCSgodXNob3J0KTB4MDAwMikKKyNkZWZpbmUgVEJTQ1JfVEJFCQkoKHVzaG9ydCkweDAwMDEpCisKKyNkZWZpbmUgUlRDU0NfUlRDSVJRX01BU0sJKCh1c2hvcnQpMHhmZjAwKQorI2RlZmluZSBSVENTQ19TRUMJCSgodXNob3J0KTB4MDA4MCkKKyNkZWZpbmUgUlRDU0NfQUxSCQkoKHVzaG9ydCkweDAwNDApCisjZGVmaW5lIFJUQ1NDXzM4SwkJKCh1c2hvcnQpMHgwMDEwKQorI2RlZmluZSBSVENTQ19TSUUJCSgodXNob3J0KTB4MDAwOCkKKyNkZWZpbmUgUlRDU0NfQUxFCQkoKHVzaG9ydCkweDAwMDQpCisjZGVmaW5lIFJUQ1NDX1JURgkJKCh1c2hvcnQpMHgwMDAyKQorI2RlZmluZSBSVENTQ19SVEUJCSgodXNob3J0KTB4MDAwMSkKKworI2RlZmluZSBQSVNDUl9QSVJRX01BU0sJCSgodXNob3J0KTB4ZmYwMCkKKyNkZWZpbmUgUElTQ1JfUFMJCSgodXNob3J0KTB4MDA4MCkKKyNkZWZpbmUgUElTQ1JfUElFCQkoKHVzaG9ydCkweDAwMDQpCisjZGVmaW5lIFBJU0NSX1BURgkJKCh1c2hvcnQpMHgwMDAyKQorI2RlZmluZSBQSVNDUl9QVEUJCSgodXNob3J0KTB4MDAwMSkKKworLyogQ2xvY2tzIGFuZCBSZXNldC4KKyovCit0eXBlZGVmIHN0cnVjdCBjbGtfYW5kX3Jlc2V0IHsKKwl1aW50CWNhcl9zY2NyOworCXVpbnQJY2FyX3BscHJjcjsKKwl1aW50CWNhcl9yc3I7CisJY2hhcglyZXNbMHg3NF07ICAgICAgICAvKiBSZXNlcnZlZCBhcmVhICAgICAgICAgICAgICAgICAgKi8KK30gY2FyOHh4X3Q7CisKKy8qIFN5c3RlbSBJbnRlZ3JhdGlvbiBUaW1lcnMga2V5cy4KKyovCit0eXBlZGVmIHN0cnVjdCBzaXRrIHsKKwl1aW50CXNpdGtfdGJzY3JrOworCXVpbnQJc2l0a190YnJlZmYwazsKKwl1aW50CXNpdGtfdGJyZWZmMWs7CisJdWludAlzaXRrX3RiazsKKwljaGFyCXJlczFbMHgxMF07CisJdWludAlzaXRrX3J0Y3NjazsKKwl1aW50CXNpdGtfcnRjazsKKwl1aW50CXNpdGtfcnRzZWNrOworCXVpbnQJc2l0a19ydGNhbGs7CisJY2hhcglyZXMyWzB4MTBdOworCXVpbnQJc2l0a19waXNjcms7CisJdWludAlzaXRrX3BpdGNrOworCWNoYXIJcmVzM1sweDM4XTsKK30gc2l0azh4eF90OworCisvKiBDbG9ja3MgYW5kIHJlc2V0IGtleXMuCisqLwordHlwZWRlZiBzdHJ1Y3QgY2FyayB7CisJdWludAljYXJrX3NjY3JrOworCXVpbnQJY2Fya19wbHByY3JrOworCXVpbnQJY2Fya19yc3JrOworCWNoYXIJcmVzWzB4NDc0XTsKK30gY2Fyazh4eF90OworCisvKiBUaGUga2V5IHRvIHVubG9jayByZWdpc3RlcnMgbWFpbnRhaW5lZCBieSBrZWVwLWFsaXZlIHBvd2VyLgorKi8KKyNkZWZpbmUgS0FQV1JfS0VZCSgodW5zaWduZWQgaW50KTB4NTVjY2FhMzMpCisKKy8qIFZpZGVvIGludGVyZmFjZS4gIE1QQzgyMyBPbmx5LgorKi8KK3R5cGVkZWYgc3RydWN0IHZpZDgyMyB7CisJdXNob3J0CXZpZF92Y2NyOworCXVzaG9ydAlyZXMxOworCXVfY2hhcgl2aWRfdnNyOworCXVfY2hhcglyZXMyOworCXVfY2hhcgl2aWRfdmNtcjsKKwl1X2NoYXIJcmVzMzsKKwl1aW50CXZpZF92YmNiOworCXVpbnQJcmVzNDsKKwl1aW50CXZpZF92ZmNyMDsKKwl1aW50CXZpZF92ZmFhMDsKKwl1aW50CXZpZF92ZmJhMDsKKwl1aW50CXZpZF92ZmNyMTsKKwl1aW50CXZpZF92ZmFhMTsKKwl1aW50CXZpZF92ZmJhMTsKKwl1X2NoYXIJcmVzNVsweDE4XTsKK30gdmlkODIzX3Q7CisKKy8qIExDRCBpbnRlcmZhY2UuICA4MjMgT25seS4KKyovCit0eXBlZGVmIHN0cnVjdCBsY2QgeworCXVpbnQJbGNkX2xjY3I7CisJdWludAlsY2RfbGNoY3I7CisJdWludAlsY2RfbGN2Y3I7CisJY2hhcglyZXMxWzRdOworCXVpbnQJbGNkX2xjZmFhOworCXVpbnQJbGNkX2xjZmJhOworCWNoYXIJbGNkX2xjc3I7CisJY2hhcglyZXMyWzB4N107Cit9IGxjZDgyM190OworCisvKiBJMkMKKyovCit0eXBlZGVmIHN0cnVjdCBpMmMgeworCXVfY2hhcglpMmNfaTJtb2Q7CisJY2hhcglyZXMxWzNdOworCXVfY2hhcglpMmNfaTJhZGQ7CisJY2hhcglyZXMyWzNdOworCXVfY2hhcglpMmNfaTJicmc7CisJY2hhcglyZXMzWzNdOworCXVfY2hhcglpMmNfaTJjb207CisJY2hhcglyZXM0WzNdOworCXVfY2hhcglpMmNfaTJjZXI7CisJY2hhcglyZXM1WzNdOworCXVfY2hhcglpMmNfaTJjbXI7CisJY2hhcglyZXM2WzB4OGJdOworfSBpMmM4eHhfdDsKKworLyogRE1BIGNvbnRyb2wvc3RhdHVzIHJlZ2lzdGVycy4KKyovCit0eXBlZGVmIHN0cnVjdCBzZG1hX2NzciB7CisJY2hhcglyZXMxWzRdOworCXVpbnQJc2RtYV9zZGFyOworCXVfY2hhcglzZG1hX3Nkc3I7CisJY2hhcglyZXMzWzNdOworCXVfY2hhcglzZG1hX3NkbXI7CisJY2hhcglyZXM0WzNdOworCXVfY2hhcglzZG1hX2lkc3IxOworCWNoYXIJcmVzNVszXTsKKwl1X2NoYXIJc2RtYV9pZG1yMTsKKwljaGFyCXJlczZbM107CisJdV9jaGFyCXNkbWFfaWRzcjI7CisJY2hhcglyZXM3WzNdOworCXVfY2hhcglzZG1hX2lkbXIyOworCWNoYXIJcmVzOFsweDEzXTsKK30gc2RtYTh4eF90OworCisvKiBDb21tdW5pY2F0aW9uIFByb2Nlc3NvciBNb2R1bGUgSW50ZXJydXB0IENvbnRyb2xsZXIuCisqLwordHlwZWRlZiBzdHJ1Y3QgY3BtX2ljIHsKKwl1c2hvcnQJY3BpY19jaXZyOworCWNoYXIJcmVzWzB4ZV07CisJdWludAljcGljX2NpY3I7CisJdWludAljcGljX2NpcHI7CisJdWludAljcGljX2NpbXI7CisJdWludAljcGljX2Npc3I7Cit9IGNwaWM4eHhfdDsKKworLyogSW5wdXQvT3V0cHV0IFBvcnQgY29udHJvbC9zdGF0dXMgcmVnaXN0ZXJzLgorKi8KK3R5cGVkZWYgc3RydWN0IGlvX3BvcnQgeworCXVzaG9ydAlpb3BfcGFkaXI7CisJdXNob3J0CWlvcF9wYXBhcjsKKwl1c2hvcnQJaW9wX3Bhb2RyOworCXVzaG9ydAlpb3BfcGFkYXQ7CisJY2hhcglyZXMxWzhdOworCXVzaG9ydAlpb3BfcGNkaXI7CisJdXNob3J0CWlvcF9wY3BhcjsKKwl1c2hvcnQJaW9wX3Bjc287CisJdXNob3J0CWlvcF9wY2RhdDsKKwl1c2hvcnQJaW9wX3BjaW50OworCWNoYXIJcmVzMls2XTsKKwl1c2hvcnQJaW9wX3BkZGlyOworCXVzaG9ydAlpb3BfcGRwYXI7CisJY2hhcglyZXMzWzJdOworCXVzaG9ydAlpb3BfcGRkYXQ7CisJdWludAl1dG1vZGU7CisJY2hhcglyZXM0WzRdOworfSBpb3A4eHhfdDsKKworLyogQ29tbXVuaWNhdGlvbiBQcm9jZXNzb3IgTW9kdWxlIFRpbWVycworKi8KK3R5cGVkZWYgc3RydWN0IGNwbV90aW1lcnMgeworCXVzaG9ydAljcG10X3RnY3I7CisJY2hhcglyZXMxWzB4ZV07CisJdXNob3J0CWNwbXRfdG1yMTsKKwl1c2hvcnQJY3BtdF90bXIyOworCXVzaG9ydAljcG10X3RycjE7CisJdXNob3J0CWNwbXRfdHJyMjsKKwl1c2hvcnQJY3BtdF90Y3IxOworCXVzaG9ydAljcG10X3RjcjI7CisJdXNob3J0CWNwbXRfdGNuMTsKKwl1c2hvcnQJY3BtdF90Y24yOworCXVzaG9ydAljcG10X3RtcjM7CisJdXNob3J0CWNwbXRfdG1yNDsKKwl1c2hvcnQJY3BtdF90cnIzOworCXVzaG9ydAljcG10X3RycjQ7CisJdXNob3J0CWNwbXRfdGNyMzsKKwl1c2hvcnQJY3BtdF90Y3I0OworCXVzaG9ydAljcG10X3RjbjM7CisJdXNob3J0CWNwbXRfdGNuNDsKKwl1c2hvcnQJY3BtdF90ZXIxOworCXVzaG9ydAljcG10X3RlcjI7CisJdXNob3J0CWNwbXRfdGVyMzsKKwl1c2hvcnQJY3BtdF90ZXI0OworCWNoYXIJcmVzMls4XTsKK30gY3BtdGltZXI4eHhfdDsKKworLyogRmluYWxseSwgdGhlIENvbW11bmljYXRpb24gUHJvY2Vzc29yIHN0dWZmLi4uLi4KKyovCit0eXBlZGVmIHN0cnVjdCBzY2MgewkJLyogU2VyaWFsIGNvbW11bmljYXRpb24gY2hhbm5lbHMgKi8KKwl1aW50CXNjY19nc21ybDsKKwl1aW50CXNjY19nc21yaDsKKwl1c2hvcnQJc2NjX3BzbXI7CisJY2hhcglyZXMxWzJdOworCXVzaG9ydAlzY2NfdG9kcjsKKwl1c2hvcnQJc2NjX2RzcjsKKwl1c2hvcnQJc2NjX3NjY2U7CisJY2hhcglyZXMyWzJdOworCXVzaG9ydAlzY2Nfc2NjbTsKKwljaGFyCXJlczM7CisJdV9jaGFyCXNjY19zY2NzOworCWNoYXIJcmVzNFs4XTsKK30gc2NjX3Q7CisKK3R5cGVkZWYgc3RydWN0IHNtYyB7CQkvKiBTZXJpYWwgbWFuYWdlbWVudCBjaGFubmVscyAqLworCWNoYXIJcmVzMVsyXTsKKwl1c2hvcnQJc21jX3NtY21yOworCWNoYXIJcmVzMlsyXTsKKwl1X2NoYXIJc21jX3NtY2U7CisJY2hhcglyZXMzWzNdOworCXVfY2hhcglzbWNfc21jbTsKKwljaGFyCXJlczRbNV07Cit9IHNtY190OworCisvKiBNUEM4NjBUIEZhc3QgRXRoZXJuZXQgQ29udHJvbGxlci4gIEl0IGlzbid0IHBhcnQgb2YgdGhlIENQTSwgYnV0CisgKiBpdCBmaXRzIHdpdGhpbiB0aGUgYWRkcmVzcyBzcGFjZS4KKyAqLworCit0eXBlZGVmIHN0cnVjdCBmZWMgeworCXVpbnQJZmVjX2FkZHJfbG93OwkJLyogbG93ZXIgMzIgYml0cyBvZiBzdGF0aW9uIGFkZHJlc3MJKi8KKwl1c2hvcnQJZmVjX2FkZHJfaGlnaDsJCS8qIHVwcGVyIDE2IGJpdHMgb2Ygc3RhdGlvbiBhZGRyZXNzCSovCisJdXNob3J0CXJlczE7CQkJLyogcmVzZXJ2ZWQJCQkJKi8KKwl1aW50CWZlY19oYXNoX3RhYmxlX2hpZ2g7CS8qIHVwcGVyIDMyLWJpdHMgb2YgaGFzaCB0YWJsZQkJKi8KKwl1aW50CWZlY19oYXNoX3RhYmxlX2xvdzsJLyogbG93ZXIgMzItYml0cyBvZiBoYXNoIHRhYmxlCQkqLworCXVpbnQJZmVjX3JfZGVzX3N0YXJ0OwkvKiBiZWdpbm5pbmcgb2YgUnggZGVzY3JpcHRvciByaW5nCSovCisJdWludAlmZWNfeF9kZXNfc3RhcnQ7CS8qIGJlZ2lubmluZyBvZiBUeCBkZXNjcmlwdG9yIHJpbmcJKi8KKwl1aW50CWZlY19yX2J1ZmZfc2l6ZTsJLyogUnggYnVmZmVyIHNpemUJCQkqLworCXVpbnQJcmVzMls5XTsJCS8qIHJlc2VydmVkCQkJCSovCisJdWludAlmZWNfZWNudHJsOwkJLyogZXRoZXJuZXQgY29udHJvbCByZWdpc3RlcgkJKi8KKwl1aW50CWZlY19pZXZlbnQ7CQkvKiBpbnRlcnJ1cHQgZXZlbnQgcmVnaXN0ZXIJCSovCisJdWludAlmZWNfaW1hc2s7CQkvKiBpbnRlcnJ1cHQgbWFzayByZWdpc3RlcgkJKi8KKwl1aW50CWZlY19pdmVjOwkJLyogaW50ZXJydXB0IGxldmVsIGFuZCB2ZWN0b3Igc3RhdHVzCSovCisJdWludAlmZWNfcl9kZXNfYWN0aXZlOwkvKiBSeCByaW5nIHVwZGF0ZWQgZmxhZwkJCSovCisJdWludAlmZWNfeF9kZXNfYWN0aXZlOwkvKiBUeCByaW5nIHVwZGF0ZWQgZmxhZwkJCSovCisJdWludAlyZXMzWzEwXTsJCS8qIHJlc2VydmVkCQkJCSovCisJdWludAlmZWNfbWlpX2RhdGE7CQkvKiBNSUkgZGF0YSByZWdpc3RlcgkJCSovCisJdWludAlmZWNfbWlpX3NwZWVkOwkJLyogTUlJIHNwZWVkIGNvbnRyb2wgcmVnaXN0ZXIJCSovCisJdWludAlyZXM0WzE3XTsJCS8qIHJlc2VydmVkCQkJCSovCisJdWludAlmZWNfcl9ib3VuZDsJCS8qIGVuZCBvZiBSQU0gKHJlYWQtb25seSkJCSovCisJdWludAlmZWNfcl9mc3RhcnQ7CQkvKiBSeCBGSUZPIHN0YXJ0IGFkZHJlc3MJCSovCisJdWludAlyZXM1WzZdOwkJLyogcmVzZXJ2ZWQJCQkJKi8KKwl1aW50CWZlY194X2ZzdGFydDsJCS8qIFR4IEZJRk8gc3RhcnQgYWRkcmVzcwkJKi8KKwl1aW50CXJlczZbMTddOwkJLyogcmVzZXJ2ZWQJCQkJKi8KKwl1aW50CWZlY19mdW5fY29kZTsJCS8qIGZlYyBTRE1BIGZ1bmN0aW9uIGNvZGUJCSovCisJdWludAlyZXM3WzNdOwkJLyogcmVzZXJ2ZWQJCQkJKi8KKwl1aW50CWZlY19yX2NudHJsOwkJLyogUnggY29udHJvbCByZWdpc3RlcgkJCSovCisJdWludAlmZWNfcl9oYXNoOwkJLyogUnggaGFzaCByZWdpc3RlcgkJCSovCisJdWludAlyZXM4WzE0XTsJCS8qIHJlc2VydmVkCQkJCSovCisJdWludAlmZWNfeF9jbnRybDsJCS8qIFR4IGNvbnRyb2wgcmVnaXN0ZXIJCQkqLworCXVpbnQJcmVzOVsweDFlXTsJCS8qIHJlc2VydmVkCQkJCSovCit9IGZlY190OworCisvKiBUaGUgRkVDIGFuZCBMQ0QgY29sb3IgbWFwIHNoYXJlIHRoZSBzYW1lIGFkZHJlc3Mgc3BhY2UuLi4uCisgKiBJIGd1ZXNzIHdlIHdpbGwgbmV2ZXIgc2VlIGFuIDgyM1QgOi0pLgorICovCit1bmlvbiBmZWNfbGNkIHsKKwlmZWNfdAlmbF91bl9mZWM7CisJdV9jaGFyCWZsX3VuX2NtYXBbMHgyMDBdOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgY29tbV9wcm9jIHsKKwkvKiBHZW5lcmFsIGNvbnRyb2wgYW5kIHN0YXR1cyByZWdpc3RlcnMuCisJKi8KKwl1c2hvcnQJY3BfY3BjcjsKKwl1X2NoYXIJcmVzMVsyXTsKKwl1c2hvcnQJY3BfcmNjcjsKKwl1X2NoYXIJcmVzMjsKKwl1X2NoYXIJY3Bfcm1kczsKKwl1X2NoYXIJcmVzM1s0XTsKKwl1c2hvcnQJY3BfY3BtY3IxOworCXVzaG9ydAljcF9jcG1jcjI7CisJdXNob3J0CWNwX2NwbWNyMzsKKwl1c2hvcnQJY3BfY3BtY3I0OworCXVfY2hhcglyZXM0WzJdOworCXVzaG9ydAljcF9ydGVyOworCXVfY2hhcglyZXM1WzJdOworCXVzaG9ydAljcF9ydG1yOworCXVfY2hhcglyZXM2WzB4MTRdOworCisJLyogQmF1ZCByYXRlIGdlbmVyYXRvcnMuCisJKi8KKwl1aW50CWNwX2JyZ2MxOworCXVpbnQJY3BfYnJnYzI7CisJdWludAljcF9icmdjMzsKKwl1aW50CWNwX2JyZ2M0OworCisJLyogU2VyaWFsIENvbW11bmljYXRpb24gQ2hhbm5lbHMuCisJKi8KKwlzY2NfdAljcF9zY2NbNF07CisKKwkvKiBTZXJpYWwgTWFuYWdlbWVudCBDaGFubmVscy4KKwkqLworCXNtY190CWNwX3NtY1syXTsKKworCS8qIFNlcmlhbCBQZXJpcGhlcmFsIEludGVyZmFjZS4KKwkqLworCXVzaG9ydAljcF9zcG1vZGU7CisJdV9jaGFyCXJlczdbNF07CisJdV9jaGFyCWNwX3NwaWU7CisJdV9jaGFyCXJlczhbM107CisJdV9jaGFyCWNwX3NwaW07CisJdV9jaGFyCXJlczlbMl07CisJdV9jaGFyCWNwX3NwY29tOworCXVfY2hhcglyZXMxMFsyXTsKKworCS8qIFBhcmFsbGVsIEludGVyZmFjZSBQb3J0LgorCSovCisJdV9jaGFyCXJlczExWzJdOworCXVzaG9ydAljcF9waXBjOworCXVfY2hhcglyZXMxMlsyXTsKKwl1c2hvcnQJY3BfcHRwcjsKKwl1aW50CWNwX3BiZGlyOworCXVpbnQJY3BfcGJwYXI7CisJdV9jaGFyCXJlczEzWzJdOworCXVzaG9ydAljcF9wYm9kcjsKKwl1aW50CWNwX3BiZGF0OworCisJLyogUG9ydCBFIC0gTVBDODd4Lzg4eCBvbmx5LgorCSAqLworCXVpbnQJY3BfcGVkaXI7CisJdWludAljcF9wZXBhcjsKKwl1aW50CWNwX3Blc287CisJdWludAljcF9wZW9kcjsKKwl1aW50CWNwX3BlZGF0OworCisJLyogQ29tbXVuaWNhdGlvbnMgUHJvY2Vzc29yIFRpbWluZyBSZWdpc3RlciAtCisJICAgQ29udGFpbnMgUk1JSSBUaW1pbmcgZm9yIHRoZSBGRUNzIG9uIE1QQzg3eC84OHggb25seS4KKwkqLworCXVpbnQJY3BfY3B0cjsKKworCS8qIFNlcmlhbCBJbnRlcmZhY2UgYW5kIFRpbWUgU2xvdCBBc3NpZ25tZW50LgorCSovCisJdWludAljcF9zaW1vZGU7CisJdV9jaGFyCWNwX3NpZ21yOworCXVfY2hhcglyZXMxNTsKKwl1X2NoYXIJY3Bfc2lzdHI7CisJdV9jaGFyCWNwX3NpY21yOworCXVfY2hhcglyZXMxNls0XTsKKwl1aW50CWNwX3NpY3I7CisJdWludAljcF9zaXJwOworCXVfY2hhcglyZXMxN1sweGNdOworCisJLyogMjU2IGJ5dGVzIG9mIE1QQzgyMyB2aWRlbyBjb250cm9sbGVyIFJBTSBhcnJheS4KKwkqLworCXVfY2hhcgljcF92Y3JhbVsweDEwMF07CisJdV9jaGFyCWNwX3NpcmFtWzB4MjAwXTsKKworCS8qIFRoZSBmYXN0IGV0aGVybmV0IGNvbnRyb2xsZXIgaXMgbm90IHJlYWxseSBwYXJ0IG9mIHRoZSBDUE0sCisJICogYnV0IGl0IHJlc2lkZXMgaW4gdGhlIGFkZHJlc3Mgc3BhY2UuCisJICogVGhlIExDRCBjb2xvciBtYXAgaXMgYWxzbyBoZXJlLgorCSAqLworCXVuaW9uCWZlY19sY2QJZmxfdW47CisjZGVmaW5lIGNwX2ZlYwkJZmxfdW4uZmxfdW5fZmVjCisjZGVmaW5lIGxjZF9jbWFwCWZsX3VuLmZsX3VuX2NtYXAKKwljaGFyCXJlczE4WzB4RTAwXTsKKworCS8qIFRoZSBEVUVUIGZhbWlseSBoYXMgYSBzZWNvbmQgRkVDIGhlcmUgKi8KKwlmZWNfdAljcF9mZWMyOworI2RlZmluZSBjcF9mZWMxCWNwX2ZlYwkvKiBjb25zaXN0ZW5jeSBtYWNybyAqLworCisJLyogRHVhbCBQb3J0ZWQgUkFNIGZvbGxvd3MuCisJICogVGhlcmUgYXJlIG1hbnkgZGlmZmVyZW50IGZvcm1hdHMgZm9yIHRoaXMgbWVtb3J5IGFyZWEKKwkgKiBkZXBlbmRpbmcgdXBvbiB0aGUgZGV2aWNlcyB1c2VkIGFuZCBvcHRpb25zIGNob3Nlbi4KKwkgKiBTb21lIHByb2Nlc3NvcnMgZG9uJ3QgaGF2ZSBhbGwgb2YgaXQgcG9wdWxhdGVkLgorCSAqLworCXVfY2hhcgljcF9kcG1lbVsweDFDMDBdOwkvKiBCRCAvIERhdGEgLyB1Y29kZSAqLworCXVfY2hhcgljcF9kcGFyYW1bMHg0MDBdOwkvKiBQYXJhbWV0ZXIgUkFNICovCit9IGNwbTh4eF90OworCisvKiBJbnRlcm5hbCBtZW1vcnkgbWFwLgorKi8KK3R5cGVkZWYgc3RydWN0IGltbWFwIHsKKwlzeXNjb25mOHh4X3QJaW1fc2l1X2NvbmY7CS8qIFNJVSBDb25maWd1cmF0aW9uICovCisJcGNtY29uZjh4eF90CWltX3BjbWNpYTsJLyogUENNQ0lBIENvbmZpZ3VyYXRpb24gKi8KKwltZW1jdGw4eHhfdAlpbV9tZW1jdGw7CS8qIE1lbW9yeSBDb250cm9sbGVyICovCisJc2l0OHh4X3QJaW1fc2l0OwkJLyogU3lzdGVtIGludGVncmF0aW9uIHRpbWVycyAqLworCWNhcjh4eF90CWltX2Nsa3JzdDsJLyogQ2xvY2tzIGFuZCByZXNldCAqLworCXNpdGs4eHhfdAlpbV9zaXRrOwkvKiBTeXMgaW50IHRpbWVyIGtleXMgKi8KKwljYXJrOHh4X3QJaW1fY2xrcnN0azsJLyogQ2xvY2tzIGFuZCByZXNldCBrZXlzICovCisJdmlkODIzX3QJaW1fdmlkOwkJLyogVmlkZW8gKDgyMyBvbmx5KSAqLworCWxjZDgyM190CWltX2xjZDsJCS8qIExDRCAoODIzIG9ubHkpICovCisJaTJjOHh4X3QJaW1faTJjOwkJLyogSTJDIGNvbnRyb2wvc3RhdHVzICovCisJc2RtYTh4eF90CWltX3NkbWE7CS8qIFNETUEgY29udHJvbC9zdGF0dXMgKi8KKwljcGljOHh4X3QJaW1fY3BpYzsJLyogQ1BNIEludGVycnVwdCBDb250cm9sbGVyICovCisJaW9wOHh4X3QJaW1faW9wb3J0OwkvKiBJTyBQb3J0IGNvbnRyb2wvc3RhdHVzICovCisJY3BtdGltZXI4eHhfdAlpbV9jcG10aW1lcjsJLyogQ1BNIHRpbWVycyAqLworCWNwbTh4eF90CWltX2NwbTsJCS8qIENvbW11bmljYXRpb24gcHJvY2Vzc29yICovCit9IGltbWFwX3Q7CisKKyNlbmRpZiAvKiBfX0lNTUFQXzhYWF9fICovCisjZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL2Eub3V0LmggYi9pbmNsdWRlL2FzbS1wcGMvYS5vdXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTc5YTk0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjL2Eub3V0LmgKQEAgLTAsMCArMSwyNiBAQAorI2lmbmRlZiBfX1BQQ19BX09VVF9IX18KKyNkZWZpbmUgX19QUENfQV9PVVRfSF9fCisKKy8qIGdyYWJiZWQgZnJvbSB0aGUgaW50ZWwgc3R1ZmYgICovCisjZGVmaW5lIFNUQUNLX1RPUCBUQVNLX1NJWkUKKworCitzdHJ1Y3QgZXhlYworeworICB1bnNpZ25lZCBsb25nIGFfaW5mbzsJCS8qIFVzZSBtYWNyb3MgTl9NQUdJQywgZXRjIGZvciBhY2Nlc3MgKi8KKyAgdW5zaWduZWQgYV90ZXh0OwkJLyogbGVuZ3RoIG9mIHRleHQsIGluIGJ5dGVzICovCisgIHVuc2lnbmVkIGFfZGF0YTsJCS8qIGxlbmd0aCBvZiBkYXRhLCBpbiBieXRlcyAqLworICB1bnNpZ25lZCBhX2JzczsJCS8qIGxlbmd0aCBvZiB1bmluaXRpYWxpemVkIGRhdGEgYXJlYSBmb3IgZmlsZSwgaW4gYnl0ZXMgKi8KKyAgdW5zaWduZWQgYV9zeW1zOwkJLyogbGVuZ3RoIG9mIHN5bWJvbCB0YWJsZSBkYXRhIGluIGZpbGUsIGluIGJ5dGVzICovCisgIHVuc2lnbmVkIGFfZW50cnk7CQkvKiBzdGFydCBhZGRyZXNzICovCisgIHVuc2lnbmVkIGFfdHJzaXplOwkJLyogbGVuZ3RoIG9mIHJlbG9jYXRpb24gaW5mbyBmb3IgdGV4dCwgaW4gYnl0ZXMgKi8KKyAgdW5zaWduZWQgYV9kcnNpemU7CQkvKiBsZW5ndGggb2YgcmVsb2NhdGlvbiBpbmZvIGZvciBkYXRhLCBpbiBieXRlcyAqLworfTsKKworCisjZGVmaW5lIE5fVFJTSVpFKGEpCSgoYSkuYV90cnNpemUpCisjZGVmaW5lIE5fRFJTSVpFKGEpCSgoYSkuYV9kcnNpemUpCisjZGVmaW5lIE5fU1lNU0laRShhKQkoKGEpLmFfc3ltcykKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9hZ3AuaCBiL2luY2x1ZGUvYXNtLXBwYy9hZ3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTI3Y2ZhOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9hZ3AuaApAQCAtMCwwICsxLDEzIEBACisjaWZuZGVmIEFHUF9ICisjZGVmaW5lIEFHUF9IIDEKKworI2luY2x1ZGUgPGFzbS9pby5oPgorCisvKiBub3RoaW5nIG11Y2ggbmVlZGVkIGhlcmUgKi8KKworI2RlZmluZSBtYXBfcGFnZV9pbnRvX2FncChwYWdlKQorI2RlZmluZSB1bm1hcF9wYWdlX2Zyb21fYWdwKHBhZ2UpCisjZGVmaW5lIGZsdXNoX2FncF9tYXBwaW5ncygpCisjZGVmaW5lIGZsdXNoX2FncF9jYWNoZSgpIG1iKCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvYW1pZ2Fody5oIGIvaW5jbHVkZS9hc20tcHBjL2FtaWdhaHcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Yzk4OTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjL2FtaWdhaHcuaApAQCAtMCwwICsxLDE3IEBACisjaWZkZWYgX19LRVJORUxfXworI2lmbmRlZiBfX0FTTVBQQ19BTUlHQUhXX0gKKyNkZWZpbmUgX19BU01QUENfQU1JR0FIV19ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxhc20tbTY4ay9hbWlnYWh3Lmg+CisKKyN1bmRlZiBDSElQX1BIWVNBRERSCisjaWZkZWYgQ09ORklHX0FQVVNfRkFTVF9FWENFUFQKKyNkZWZpbmUgQ0hJUF9QSFlTQUREUiAgICAgICgweDAwMDAwMCkKKyNlbHNlCisjZGVmaW5lIENISVBfUEhZU0FERFIgICAgICAoMHgwMDQwMDApCisjZW5kaWYKKworCisjZW5kaWYgLyogX19BU01QUENfQU1JR0FIV19IICovCisjZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL2FtaWdhaW50cy5oIGIvaW5jbHVkZS9hc20tcHBjL2FtaWdhaW50cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhM2ZmNjMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGMvYW1pZ2FpbnRzLmgKQEAgLTAsMCArMSwxMzMgQEAKKy8qCisqKiBhbWlnYWludHMuaCAtLSBBbWlnYSBMaW51eCBpbnRlcnJ1cHQgaGFuZGxpbmcgc3RydWN0cyBhbmQgcHJvdG90eXBlcworKioKKyoqIENvcHlyaWdodCAxOTkyIGJ5IEdyZWcgSGFycAorKioKKyoqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisqKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorKiogZm9yIG1vcmUgZGV0YWlscy4KKyoqCisqKiBDcmVhdGVkIDEwLzIvOTIgYnkgR3JlZyBIYXJwCisqLworCisjaWZkZWYgX19LRVJORUxfXworI2lmbmRlZiBfQVNNbTY4a19BTUlHQUlOVFNfSF8KKyNkZWZpbmUgX0FTTW02OGtfQU1JR0FJTlRTX0hfCisKKy8qCisqKiBBbWlnYSBJbnRlcnJ1cHQgc291cmNlcy4KKyoqCisqLworCisjZGVmaW5lIEFVVE9fSVJRUyAgICAgICAgICAgKDgpCisjZGVmaW5lIEFNSV9TVERfSVJRUyAgICAgICAgKDE0KQorI2RlZmluZSBDSUFfSVJRUyAgICAgICAgICAgICg1KQorI2RlZmluZSBBTUlfSVJRUyAgICAgICAgICAgICgzMikgLyogQVVUT19JUlFTK0FNSV9TVERfSVJRUysyKkNJQV9JUlFTICovCisKKy8qIHZlcnRpY2FsIGJsYW5raW5nIGludGVycnVwdCAqLworI2RlZmluZSBJUlFfQU1JR0FfVkVSVEIgICAgIDAKKworLyogY29wcGVyIGludGVycnVwdCAqLworI2RlZmluZSBJUlFfQU1JR0FfQ09QUEVSICAgIDEKKworLyogQXVkaW8gaW50ZXJydXB0cyAqLworI2RlZmluZSBJUlFfQU1JR0FfQVVEMAkgICAgMgorI2RlZmluZSBJUlFfQU1JR0FfQVVEMQkgICAgMworI2RlZmluZSBJUlFfQU1JR0FfQVVEMgkgICAgNAorI2RlZmluZSBJUlFfQU1JR0FfQVVEMwkgICAgNQorCisvKiBCbGl0dGVyIGRvbmUgaW50ZXJydXB0ICovCisjZGVmaW5lIElSUV9BTUlHQV9CTElUCSAgICA2CisKKy8qIGZsb3BweSBkaXNrIGludGVycnVwdHMgKi8KKyNkZWZpbmUgSVJRX0FNSUdBX0RTS1NZTiAgICA3CisjZGVmaW5lIElSUV9BTUlHQV9EU0tCTEsgICAgOAorCisvKiBidWlsdGluIHNlcmlhbCBwb3J0IGludGVycnVwdHMgKi8KKyNkZWZpbmUgSVJRX0FNSUdBX1JCRgkgICAgOQorI2RlZmluZSBJUlFfQU1JR0FfVEJFCSAgICAxMAorCisvKiBzb2Z0d2FyZSBpbnRlcnJ1cHRzICovCisjZGVmaW5lIElSUV9BTUlHQV9TT0ZUICAgICAgMTEKKworLyogaW50ZXJydXB0cyBmcm9tIGV4dGVybmFsIGhhcmR3YXJlICovCisjZGVmaW5lIElSUV9BTUlHQV9QT1JUUwkgICAgMTIKKyNkZWZpbmUgSVJRX0FNSUdBX0VYVEVSCSAgICAxMworCisvKiBDSUEgaW50ZXJydXB0IHNvdXJjZXMgKi8KKyNkZWZpbmUgSVJRX0FNSUdBX0NJQUEgICAgICAxNAorI2RlZmluZSBJUlFfQU1JR0FfQ0lBQV9UQSAgIDE0CisjZGVmaW5lIElSUV9BTUlHQV9DSUFBX1RCICAgMTUKKyNkZWZpbmUgSVJRX0FNSUdBX0NJQUFfQUxSTSAxNgorI2RlZmluZSBJUlFfQU1JR0FfQ0lBQV9TUCAgIDE3CisjZGVmaW5lIElSUV9BTUlHQV9DSUFBX0ZMRyAgMTgKKyNkZWZpbmUgSVJRX0FNSUdBX0NJQUIgICAgICAxOQorI2RlZmluZSBJUlFfQU1JR0FfQ0lBQl9UQSAgIDE5CisjZGVmaW5lIElSUV9BTUlHQV9DSUFCX1RCICAgMjAKKyNkZWZpbmUgSVJRX0FNSUdBX0NJQUJfQUxSTSAyMQorI2RlZmluZSBJUlFfQU1JR0FfQ0lBQl9TUCAgIDIyCisjZGVmaW5lIElSUV9BTUlHQV9DSUFCX0ZMRyAgMjMKKworLyogYXV0by12ZWN0b3IgaW50ZXJydXB0cyAqLworI2RlZmluZSBJUlFfQU1JR0FfQVVUTyAgICAgIDI0CisjZGVmaW5lIElSUV9BTUlHQV9BVVRPXzAgICAgMjQgLyogVGhpcyBpcyBqdXN0IGEgZHVtbXkgKi8KKyNkZWZpbmUgSVJRX0FNSUdBX0FVVE9fMSAgICAyNQorI2RlZmluZSBJUlFfQU1JR0FfQVVUT18yICAgIDI2CisjZGVmaW5lIElSUV9BTUlHQV9BVVRPXzMgICAgMjcKKyNkZWZpbmUgSVJRX0FNSUdBX0FVVE9fNCAgICAyOAorI2RlZmluZSBJUlFfQU1JR0FfQVVUT181ICAgIDI5CisjZGVmaW5lIElSUV9BTUlHQV9BVVRPXzYgICAgMzAKKyNkZWZpbmUgSVJRX0FNSUdBX0FVVE9fNyAgICAzMQorCisjZGVmaW5lIElSUV9GTE9QUFkJICAgIElSUV9BTUlHQV9EU0tCTEsKKworLyogSU5UUkVRUiBtYXNrcyAqLworI2RlZmluZSBJUlExX01BU0sgICAweDAwMDcJLyogSU5UUkVRUiBtYXNrIGZvciBJUlEgMSAqLworI2RlZmluZSBJUlEyX01BU0sgICAweDAwMDgJLyogSU5UUkVRUiBtYXNrIGZvciBJUlEgMiAqLworI2RlZmluZSBJUlEzX01BU0sgICAweDAwNzAJLyogSU5UUkVRUiBtYXNrIGZvciBJUlEgMyAqLworI2RlZmluZSBJUlE0X01BU0sgICAweDA3ODAJLyogSU5UUkVRUiBtYXNrIGZvciBJUlEgNCAqLworI2RlZmluZSBJUlE1X01BU0sgICAweDE4MDAJLyogSU5UUkVRUiBtYXNrIGZvciBJUlEgNSAqLworI2RlZmluZSBJUlE2X01BU0sgICAweDIwMDAJLyogSU5UUkVRUiBtYXNrIGZvciBJUlEgNiAqLworI2RlZmluZSBJUlE3X01BU0sgICAweDQwMDAJLyogSU5UUkVRUiBtYXNrIGZvciBJUlEgNyAqLworCisjZGVmaW5lIElGX1NFVENMUiAgIDB4ODAwMCAgICAgIC8qIHNldC9jbHIgYml0ICovCisjZGVmaW5lIElGX0lOVEVOICAgIDB4NDAwMAkvKiBtYXN0ZXIgaW50ZXJydXB0IGJpdCBpbiBJTlQqIHJlZ2lzdGVycyAqLworI2RlZmluZSBJRl9FWFRFUiAgICAweDIwMDAJLyogZXh0ZXJuYWwgbGV2ZWwgNiBhbmQgQ0lBIEIgaW50ZXJydXB0ICovCisjZGVmaW5lIElGX0RTS1NZTiAgIDB4MTAwMAkvKiBkaXNrIHN5bmMgaW50ZXJydXB0ICovCisjZGVmaW5lIElGX1JCRgkgICAgMHgwODAwCS8qIHNlcmlhbCByZWNlaXZlIGJ1ZmZlciBmdWxsIGludGVycnVwdCAqLworI2RlZmluZSBJRl9BVUQzICAgICAweDA0MDAJLyogYXVkaW8gY2hhbm5lbCAzIGRvbmUgaW50ZXJydXB0ICovCisjZGVmaW5lIElGX0FVRDIgICAgIDB4MDIwMAkvKiBhdWRpbyBjaGFubmVsIDIgZG9uZSBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSUZfQVVEMSAgICAgMHgwMTAwCS8qIGF1ZGlvIGNoYW5uZWwgMSBkb25lIGludGVycnVwdCAqLworI2RlZmluZSBJRl9BVUQwICAgICAweDAwODAJLyogYXVkaW8gY2hhbm5lbCAwIGRvbmUgaW50ZXJydXB0ICovCisjZGVmaW5lIElGX0JMSVQgICAgIDB4MDA0MAkvKiBibGl0dGVyIGRvbmUgaW50ZXJydXB0ICovCisjZGVmaW5lIElGX1ZFUlRCICAgIDB4MDAyMAkvKiB2ZXJ0aWNhbCBibGFua2luZyBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSUZfQ09QRVIgICAgMHgwMDEwCS8qIGNvcHBlciBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSUZfUE9SVFMgICAgMHgwMDA4CS8qIGV4dGVybmFsIGxldmVsIDIgYW5kIENJQSBBIGludGVycnVwdCAqLworI2RlZmluZSBJRl9TT0ZUICAgICAweDAwMDQJLyogc29mdHdhcmUgaW5pdGlhdGVkIGludGVycnVwdCAqLworI2RlZmluZSBJRl9EU0tCTEsgICAweDAwMDIJLyogZGlza2Jsb2NrIERNQSBmaW5pc2hlZCAqLworI2RlZmluZSBJRl9UQkUJICAgIDB4MDAwMQkvKiBzZXJpYWwgdHJhbnNtaXQgYnVmZmVyIGVtcHR5IGludGVycnVwdCAqLworCitleHRlcm4gdm9pZCBhbWlnYV9kb19pcnEoaW50IGlycSwgc3RydWN0IHB0X3JlZ3MgKmZwKTsKK2V4dGVybiB2b2lkIGFtaWdhX2RvX2lycV9saXN0KGludCBpcnEsIHN0cnVjdCBwdF9yZWdzICpmcCk7CisKKy8qIENJQSBpbnRlcnJ1cHQgY29udHJvbCByZWdpc3RlciBiaXRzICovCisKKyNkZWZpbmUgQ0lBX0lDUl9UQQkweDAxCisjZGVmaW5lIENJQV9JQ1JfVEIJMHgwMgorI2RlZmluZSBDSUFfSUNSX0FMUk0JMHgwNAorI2RlZmluZSBDSUFfSUNSX1NQCTB4MDgKKyNkZWZpbmUgQ0lBX0lDUl9GTEcJMHgxMAorI2RlZmluZSBDSUFfSUNSX0FMTAkweDFmCisjZGVmaW5lIENJQV9JQ1JfU0VUQ0xSCTB4ODAKKworLyogdG8gYWNjZXNzIHRoZSBpbnRlcnJ1cHQgY29udHJvbCByZWdpc3RlcnMgb2YgQ0lBJ3MgdXNlIG9ubHkKKyoqIHRoZXNlIGZ1bmN0aW9ucywgdGhleSBiZWhhdmUgZXhhY3RseSBsaWtlIHRoZSBhbWlnYSBvcyByb3V0aW5lcworKi8KKworZXh0ZXJuIHN0cnVjdCBjaWFiYXNlIGNpYWFfYmFzZSwgY2lhYl9iYXNlOworCitleHRlcm4gdW5zaWduZWQgY2hhciBjaWFfc2V0X2lycSh1bnNpZ25lZCBpbnQgaXJxLCBpbnQgc2V0KTsKK2V4dGVybiB1bnNpZ25lZCBjaGFyIGNpYV9hYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBpbnQgZW5hYmxlKTsKKworI2VuZGlmIC8qIGFzbS1tNjhrL2FtaWdhaW50cy5oICovCisjZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL2FtaWdhcHBjLmggYi9pbmNsdWRlL2FzbS1wcGMvYW1pZ2FwcGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTExNGNlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjL2FtaWdhcHBjLmgKQEAgLTAsMCArMSw4NSBAQAorLyoKKyoqIGFzbS1wcGMvYW1pZ2FwcGMuaCAtLSBUaGlzIGhlYWRlciBkZWZpbmVzIHNvbWUgdmFsdWVzIGFuZCBwb2ludGVycyBmb3IKKyoqICAgICAgICAgICAgICAgICAgICAgICAgdGhlIFBoYXNlIDUgUG93ZXJVcCBjYXJkLgorKioKKyoqIENvcHlyaWdodCAxOTk3LCAxOTk4IGJ5IFBoYXNlNSwgR2VybWFueS4KKyoqCisqKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworKiogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyoqIGZvciBtb3JlIGRldGFpbHMuCisqKgorKiogQ3JlYXRlZDogNy8yMi85NyBieSBKZXNwZXIgU2tvdgorKi8KKworI2lmZGVmIF9fS0VSTkVMX18KKyNpZm5kZWYgX002OEtfQU1JR0FQUENfSAorI2RlZmluZSBfTTY4S19BTUlHQVBQQ19ICisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKy8qICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+ICovCisjZGVmaW5lIG1iKCkgIF9fYXNtX18gX192b2xhdGlsZV9fICgic3luYyIgOiA6IDogIm1lbW9yeSIpCisKKyNkZWZpbmUgQVBVU19XUklURShfYV8sIF92XykJCQkJXAorZG8gewkJCQkJCQlcCisJKCooKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoX2FfKSkgPSAoX3ZfKSk7CVwKKwltYigpOwkJCQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgQVBVU19SRUFEKF9hXywgX3ZfKQkJCQlcCitkbyB7CQkJCQkJCVwKKwkoX3ZfKSA9ICgqKCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKF9hXykpKTsJXAorCW1iKCk7CQkJCQkJXAorfSB3aGlsZSAoMCkKKyNlbmRpZiAvKiBuZGVmIF9fQVNTRU1CTFlfXyAqLworCisvKiBNYXliZSBhZGQgYSBbI2lmZGVmIFdBTlRfWlRXT0JBU0VdIGNvbmRpdGlvbiB0byBhbWlnYWh3Lmg/ICovCisjZGVmaW5lIHpUd29CYXNlICgweDgwMDAwMDAwKQorCisjZGVmaW5lIEFQVVNfSVBMX0JBU0UgICAJKHpUd29CYXNlICsgMHgwMGY2MDAwMCkKKyNkZWZpbmUgQVBVU19SRUdfUkVTRVQgICAgCShBUFVTX0lQTF9CQVNFICsgMHgwMCkKKyNkZWZpbmUgQVBVU19SRUdfV0FJVFNUQVRFICAgIAkoQVBVU19JUExfQkFTRSArIDB4MTApCisjZGVmaW5lIEFQVVNfUkVHX1NIQURPVyAgICAJKEFQVVNfSVBMX0JBU0UgKyAweDE4KQorI2RlZmluZSBBUFVTX1JFR19MT0NLCQkoQVBVU19JUExfQkFTRSArIDB4MjApCisjZGVmaW5lIEFQVVNfUkVHX0lOVCAgICAJKEFQVVNfSVBMX0JBU0UgKyAweDI4KQorI2RlZmluZSBBUFVTX0lQTF9FTVUJCShBUFVTX0lQTF9CQVNFICsgMHgzMCkKKyNkZWZpbmUgQVBVU19JTlRfTFZMCQkoQVBVU19JUExfQkFTRSArIDB4MzgpCisKKyNkZWZpbmUgUkVHU0hBRE9XX1NFVFJFU0VUCSgweDgwKQorI2RlZmluZSBSRUdTSEFET1dfU0VMRlJFU0VUCSgweDQwKQorCisjZGVmaW5lIFJFR0xPQ0tfU0VUUkVTRVQJKDB4ODApCisjZGVmaW5lIFJFR0xPQ0tfQkxBQ0tNQUdJQ0sxCSgweDQwKQorI2RlZmluZSBSRUdMT0NLX0JMQUNLTUFHSUNLMgkoMHgyMCkKKyNkZWZpbmUgUkVHTE9DS19CTEFDS01BR0lDSzMJKDB4MTApCisKKyNkZWZpbmUgUkVHV0FJVFNUQVRFX1NFVFJFU0VUCSgweDgwKQorI2RlZmluZSBSRUdXQUlUU1RBVEVfUFBDVwkoMHgwOCkKKyNkZWZpbmUgUkVHV0FJVFNUQVRFX1BQQ1IJKDB4MDQpCisKKyNkZWZpbmUgUkVHUkVTRVRfU0VUUkVTRVQJKDB4ODApCisjZGVmaW5lIFJFR1JFU0VUX1BQQ1JFU0VUCSgweDEwKQorI2RlZmluZSBSRUdSRVNFVF9NNjhLUkVTRVQJKDB4MDgpCisjZGVmaW5lIFJFR1JFU0VUX0FNSUdBUkVTRVQJKDB4MDQpCisjZGVmaW5lIFJFR1JFU0VUX0FVWFJFU0VUCSgweDAyKQorI2RlZmluZSBSRUdSRVNFVF9TQ1NJUkVTRVQJKDB4MDEpCisKKyNkZWZpbmUgUkVHSU5UX1NFVFJFU0VUCQkoMHg4MCkKKyNkZWZpbmUgUkVHSU5UX0VOQUJMRUlQTAkoMHgwMikKKyNkZWZpbmUgUkVHSU5UX0lOVE1BU1RFUgkoMHgwMSkKKworI2RlZmluZSBJUExFTVVfU0VUUkVTRVQJCSgweDgwKQorI2RlZmluZSBJUExFTVVfRElTQUJMRUlOVAkoMHg0MCkKKyNkZWZpbmUgSVBMRU1VX0lQTDIJCSgweDIwKQorI2RlZmluZSBJUExFTVVfSVBMMQkJKDB4MTApCisjZGVmaW5lIElQTEVNVV9JUEwwCQkoMHgwOCkKKyNkZWZpbmUgSVBMRU1VX1BQQ0lQTDIJCSgweDA0KQorI2RlZmluZSBJUExFTVVfUFBDSVBMMQkJKDB4MDIpCisjZGVmaW5lIElQTEVNVV9QUENJUEwwCQkoMHgwMSkKKyNkZWZpbmUgSVBMRU1VX0lQTE1BU0sJCShJUExFTVVfUFBDSVBMMnxJUExFTVVfUFBDSVBMMXxJUExFTVVfUFBDSVBMMCkKKworI2RlZmluZSBJTlRMVkxfU0VUUkVTRVQgICAgICAgICAoMHg4MCkKKyNkZWZpbmUgSU5UTFZMX01BU0sgICAgICAgICAgICAgKDB4N2YpCisKKyNlbmRpZiAvKiBfTTY4a19BTUlHQVBQQ19IICovCisjZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL2FtaWdheWxlLmggYi9pbmNsdWRlL2FzbS1wcGMvYW1pZ2F5bGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmUwYjg3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjL2FtaWdheWxlLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGFzbS1tNjhrL2FtaWdheWxlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvYW1pcGNtY2lhLmggYi9pbmNsdWRlL2FzbS1wcGMvYW1pcGNtY2lhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y2NWY2MwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9hbWlwY21jaWEuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLW02OGsvYW1pcGNtY2lhLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvYW5zLWxjZC5oIGIvaW5jbHVkZS9hc20tcHBjL2Fucy1sY2QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzk1YjlmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjL2Fucy1sY2QuaApAQCAtMCwwICsxLDExIEBACisjaWZuZGVmIF9QUENfQU5TX0xDRF9ICisjZGVmaW5lIF9QUENfQU5TX0xDRF9ICisKKyNkZWZpbmUgQU5TTENEX01JTk9SCQkxNTYKKworI2RlZmluZSBBTlNMQ0RfQ0xFQVIJCTB4MDEKKyNkZWZpbmUgQU5TTENEX1NFTkRDVFJMCQkweDAyCisjZGVmaW5lIEFOU0xDRF9TRVRTSE9SVERFTEFZCTB4MDMKKyNkZWZpbmUgQU5TTENEX1NFVExPTkdERUxBWQkweDA0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL2F0b21pYy5oIGIvaW5jbHVkZS9hc20tcHBjL2F0b21pYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlYWZkNTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGMvYXRvbWljLmgKQEAgLTAsMCArMSwyMTQgQEAKKy8qCisgKiBQb3dlclBDIGF0b21pYyBvcGVyYXRpb25zCisgKi8KKworI2lmbmRlZiBfQVNNX1BQQ19BVE9NSUNfSF8KKyNkZWZpbmUgX0FTTV9QUENfQVRPTUlDX0hfCisKK3R5cGVkZWYgc3RydWN0IHsgdm9sYXRpbGUgaW50IGNvdW50ZXI7IH0gYXRvbWljX3Q7CisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNkZWZpbmUgQVRPTUlDX0lOSVQoaSkJeyAoaSkgfQorCisjZGVmaW5lIGF0b21pY19yZWFkKHYpCQkoKHYpLT5jb3VudGVyKQorI2RlZmluZSBhdG9taWNfc2V0KHYsaSkJCSgoKHYpLT5jb3VudGVyKSA9IChpKSkKKworZXh0ZXJuIHZvaWQgYXRvbWljX2NsZWFyX21hc2sodW5zaWduZWQgbG9uZyBtYXNrLCB1bnNpZ25lZCBsb25nICphZGRyKTsKKworI2lmZGVmIENPTkZJR19TTVAKKyNkZWZpbmUgU01QX1NZTkMJInN5bmMiCisjZGVmaW5lIFNNUF9JU1lOQwkiXG5cdGlzeW5jIgorI2Vsc2UKKyNkZWZpbmUgU01QX1NZTkMJIiIKKyNkZWZpbmUgU01QX0lTWU5DCisjZW5kaWYKKworLyogRXJyYXR1bSAjNzcgb24gdGhlIDQwNSBtZWFucyB3ZSBuZWVkIGEgc3luYyBvciBkY2J0IGJlZm9yZSBldmVyeSBzdHdjeC4KKyAqIFRoZSBvbGQgQVRPTUlDX1NZTkNfRklYIGNvdmVyZWQgc29tZSBidXQgbm90IGFsbCBvZiB0aGlzLgorICovCisjaWZkZWYgQ09ORklHX0lCTTQwNV9FUlI3NworI2RlZmluZSBQUEM0MDVfRVJSNzcocmEscmIpCSJkY2J0ICIgI3JhICIsIiAjcmIgIjsiCisjZWxzZQorI2RlZmluZSBQUEM0MDVfRVJSNzcocmEscmIpCisjZW5kaWYKKworc3RhdGljIF9faW5saW5lX18gdm9pZCBhdG9taWNfYWRkKGludCBhLCBhdG9taWNfdCAqdikKK3sKKwlpbnQgdDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorIjE6CWx3YXJ4CSUwLDAsJTMJCSMgYXRvbWljX2FkZFxuXAorCWFkZAklMCwlMiwlMFxuIgorCVBQQzQwNV9FUlI3NygwLCUzKQorIglzdHdjeC4JJTAsMCwlMyBcblwKKwlibmUtCTFiIgorCTogIj0mciIgKHQpLCAiPW0iICh2LT5jb3VudGVyKQorCTogInIiIChhKSwgInIiICgmdi0+Y291bnRlciksICJtIiAodi0+Y291bnRlcikKKwk6ICJjYyIpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgYXRvbWljX2FkZF9yZXR1cm4oaW50IGEsIGF0b21pY190ICp2KQoreworCWludCB0OworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisiMToJbHdhcngJJTAsMCwlMgkJIyBhdG9taWNfYWRkX3JldHVyblxuXAorCWFkZAklMCwlMSwlMFxuIgorCVBQQzQwNV9FUlI3NygwLCUyKQorIglzdHdjeC4JJTAsMCwlMiBcblwKKwlibmUtCTFiIgorCVNNUF9JU1lOQworCTogIj0mciIgKHQpCisJOiAiciIgKGEpLCAiciIgKCZ2LT5jb3VudGVyKQorCTogImNjIiwgIm1lbW9yeSIpOworCisJcmV0dXJuIHQ7Cit9CisKKyNkZWZpbmUgYXRvbWljX2FkZF9uZWdhdGl2ZShhLCB2KQkoYXRvbWljX2FkZF9yZXR1cm4oKGEpLCAodikpIDwgMCkKKworc3RhdGljIF9faW5saW5lX18gdm9pZCBhdG9taWNfc3ViKGludCBhLCBhdG9taWNfdCAqdikKK3sKKwlpbnQgdDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorIjE6CWx3YXJ4CSUwLDAsJTMJCSMgYXRvbWljX3N1YlxuXAorCXN1YmYJJTAsJTIsJTBcbiIKKwlQUEM0MDVfRVJSNzcoMCwlMykKKyIJc3R3Y3guCSUwLDAsJTMgXG5cCisJYm5lLQkxYiIKKwk6ICI9JnIiICh0KSwgIj1tIiAodi0+Y291bnRlcikKKwk6ICJyIiAoYSksICJyIiAoJnYtPmNvdW50ZXIpLCAibSIgKHYtPmNvdW50ZXIpCisJOiAiY2MiKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IGF0b21pY19zdWJfcmV0dXJuKGludCBhLCBhdG9taWNfdCAqdikKK3sKKwlpbnQgdDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorIjE6CWx3YXJ4CSUwLDAsJTIJCSMgYXRvbWljX3N1Yl9yZXR1cm5cblwKKwlzdWJmCSUwLCUxLCUwXG4iCisJUFBDNDA1X0VSUjc3KDAsJTIpCisiCXN0d2N4LgklMCwwLCUyIFxuXAorCWJuZS0JMWIiCisJU01QX0lTWU5DCisJOiAiPSZyIiAodCkKKwk6ICJyIiAoYSksICJyIiAoJnYtPmNvdW50ZXIpCisJOiAiY2MiLCAibWVtb3J5Iik7CisKKwlyZXR1cm4gdDsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBhdG9taWNfaW5jKGF0b21pY190ICp2KQoreworCWludCB0OworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisiMToJbHdhcngJJTAsMCwlMgkJIyBhdG9taWNfaW5jXG5cCisJYWRkaWMJJTAsJTAsMVxuIgorCVBQQzQwNV9FUlI3NygwLCUyKQorIglzdHdjeC4JJTAsMCwlMiBcblwKKwlibmUtCTFiIgorCTogIj0mciIgKHQpLCAiPW0iICh2LT5jb3VudGVyKQorCTogInIiICgmdi0+Y291bnRlciksICJtIiAodi0+Y291bnRlcikKKwk6ICJjYyIpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgYXRvbWljX2luY19yZXR1cm4oYXRvbWljX3QgKnYpCit7CisJaW50IHQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKyIxOglsd2FyeAklMCwwLCUxCQkjIGF0b21pY19pbmNfcmV0dXJuXG5cCisJYWRkaWMJJTAsJTAsMVxuIgorCVBQQzQwNV9FUlI3NygwLCUxKQorIglzdHdjeC4JJTAsMCwlMSBcblwKKwlibmUtCTFiIgorCVNNUF9JU1lOQworCTogIj0mciIgKHQpCisJOiAiciIgKCZ2LT5jb3VudGVyKQorCTogImNjIiwgIm1lbW9yeSIpOworCisJcmV0dXJuIHQ7Cit9CisKKy8qCisgKiBhdG9taWNfaW5jX2FuZF90ZXN0IC0gaW5jcmVtZW50IGFuZCB0ZXN0CisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CisgKgorICogQXRvbWljYWxseSBpbmNyZW1lbnRzIEB2IGJ5IDEKKyAqIGFuZCByZXR1cm5zIHRydWUgaWYgdGhlIHJlc3VsdCBpcyB6ZXJvLCBvciBmYWxzZSBmb3IgYWxsCisgKiBvdGhlciBjYXNlcy4KKyAqLworI2RlZmluZSBhdG9taWNfaW5jX2FuZF90ZXN0KHYpIChhdG9taWNfaW5jX3JldHVybih2KSA9PSAwKQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGF0b21pY19kZWMoYXRvbWljX3QgKnYpCit7CisJaW50IHQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKyIxOglsd2FyeAklMCwwLCUyCQkjIGF0b21pY19kZWNcblwKKwlhZGRpYwklMCwlMCwtMVxuIgorCVBQQzQwNV9FUlI3NygwLCUyKVwKKyIJc3R3Y3guCSUwLDAsJTJcblwKKwlibmUtCTFiIgorCTogIj0mciIgKHQpLCAiPW0iICh2LT5jb3VudGVyKQorCTogInIiICgmdi0+Y291bnRlciksICJtIiAodi0+Y291bnRlcikKKwk6ICJjYyIpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgYXRvbWljX2RlY19yZXR1cm4oYXRvbWljX3QgKnYpCit7CisJaW50IHQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKyIxOglsd2FyeAklMCwwLCUxCQkjIGF0b21pY19kZWNfcmV0dXJuXG5cCisJYWRkaWMJJTAsJTAsLTFcbiIKKwlQUEM0MDVfRVJSNzcoMCwlMSkKKyIJc3R3Y3guCSUwLDAsJTFcblwKKwlibmUtCTFiIgorCVNNUF9JU1lOQworCTogIj0mciIgKHQpCisJOiAiciIgKCZ2LT5jb3VudGVyKQorCTogImNjIiwgIm1lbW9yeSIpOworCisJcmV0dXJuIHQ7Cit9CisKKyNkZWZpbmUgYXRvbWljX3N1Yl9hbmRfdGVzdChhLCB2KQkoYXRvbWljX3N1Yl9yZXR1cm4oKGEpLCAodikpID09IDApCisjZGVmaW5lIGF0b21pY19kZWNfYW5kX3Rlc3QodikJCShhdG9taWNfZGVjX3JldHVybigodikpID09IDApCisKKy8qCisgKiBBdG9taWNhbGx5IHRlc3QgKnYgYW5kIGRlY3JlbWVudCBpZiBpdCBpcyBncmVhdGVyIHRoYW4gMC4KKyAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBvbGQgdmFsdWUgb2YgKnYgbWludXMgMS4KKyAqLworc3RhdGljIF9faW5saW5lX18gaW50IGF0b21pY19kZWNfaWZfcG9zaXRpdmUoYXRvbWljX3QgKnYpCit7CisJaW50IHQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKyIxOglsd2FyeAklMCwwLCUxCQkjIGF0b21pY19kZWNfaWZfcG9zaXRpdmVcblwKKwlhZGRpYy4JJTAsJTAsLTFcblwKKwlibHQtCTJmXG4iCisJUFBDNDA1X0VSUjc3KDAsJTEpCisiCXN0d2N4LgklMCwwLCUxXG5cCisJYm5lLQkxYiIKKwlTTVBfSVNZTkMKKwkiXG5cCisyOiIJOiAiPSZyIiAodCkKKwk6ICJyIiAoJnYtPmNvdW50ZXIpCisJOiAiY2MiLCAibWVtb3J5Iik7CisKKwlyZXR1cm4gdDsKK30KKworI2RlZmluZSBfX01CCV9fYXNtX18gX192b2xhdGlsZV9fIChTTVBfU1lOQyA6IDogOiAibWVtb3J5IikKKyNkZWZpbmUgc21wX21iX19iZWZvcmVfYXRvbWljX2RlYygpCV9fTUIKKyNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWNfZGVjKCkJX19NQgorI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfaW5jKCkJX19NQgorI2RlZmluZSBzbXBfbWJfX2FmdGVyX2F0b21pY19pbmMoKQlfX01CCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYgLyogX0FTTV9QUENfQVRPTUlDX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvYmFja2xpZ2h0LmggYi9pbmNsdWRlL2FzbS1wcGMvYmFja2xpZ2h0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ExYzNkZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9iYWNrbGlnaHQuaApAQCAtMCwwICsxLDMwIEBACisvKgorICogUm91dGluZXMgZm9yIGhhbmRsaW5nIGJhY2tsaWdodCBjb250cm9sIG9uIFBvd2VyQm9va3MKKyAqCisgKiBGb3Igbm93LCBpbXBsZW1lbnRhdGlvbiByZXNpZGVzIGluIGFyY2gvcHBjL2tlcm5lbC9wbWFjX3N1cHBvcnQuYworICoKKyAqLworI2lmZGVmIF9fS0VSTkVMX18KKyNpZm5kZWYgX19BU01fUFBDX0JBQ0tMSUdIVF9ICisjZGVmaW5lIF9fQVNNX1BQQ19CQUNLTElHSFRfSAorCisvKiBBYnN0cmFjdCB2YWx1ZXMgKi8KKyNkZWZpbmUgQkFDS0xJR0hUX09GRgkwCisjZGVmaW5lIEJBQ0tMSUdIVF9NSU4JMQorI2RlZmluZSBCQUNLTElHSFRfTUFYCTB4ZgorCitzdHJ1Y3QgYmFja2xpZ2h0X2NvbnRyb2xsZXIgeworCWludCAoKnNldF9lbmFibGUpKGludCBlbmFibGUsIGludCBsZXZlbCwgdm9pZCAqZGF0YSk7CisJaW50ICgqc2V0X2xldmVsKShpbnQgbGV2ZWwsIHZvaWQgKmRhdGEpOworfTsKKworZXh0ZXJuIHZvaWQgcmVnaXN0ZXJfYmFja2xpZ2h0X2NvbnRyb2xsZXIoc3RydWN0IGJhY2tsaWdodF9jb250cm9sbGVyICpjdHJsZXIsIHZvaWQgKmRhdGEsIGNoYXIgKnR5cGUpOworZXh0ZXJuIHZvaWQgdW5yZWdpc3Rlcl9iYWNrbGlnaHRfY29udHJvbGxlcihzdHJ1Y3QgYmFja2xpZ2h0X2NvbnRyb2xsZXIgKmN0cmxlciwgdm9pZCAqZGF0YSk7CisKK2V4dGVybiBpbnQgc2V0X2JhY2tsaWdodF9lbmFibGUoaW50IGVuYWJsZSk7CitleHRlcm4gaW50IGdldF9iYWNrbGlnaHRfZW5hYmxlKHZvaWQpOworZXh0ZXJuIGludCBzZXRfYmFja2xpZ2h0X2xldmVsKGludCBsZXZlbCk7CitleHRlcm4gaW50IGdldF9iYWNrbGlnaHRfbGV2ZWwodm9pZCk7CisKKyNlbmRpZgorI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9iaXRvcHMuaCBiL2luY2x1ZGUvYXNtLXBwYy9iaXRvcHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzBmNTM2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjL2JpdG9wcy5oCkBAIC0wLDAgKzEsNDYwIEBACisvKgorICogYml0b3BzLmg6IEJpdCBzdHJpbmcgb3BlcmF0aW9ucyBvbiB0aGUgcHBjCisgKi8KKworI2lmZGVmIF9fS0VSTkVMX18KKyNpZm5kZWYgX1BQQ19CSVRPUFNfSAorI2RlZmluZSBfUFBDX0JJVE9QU19ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisKKy8qCisgKiBUaGUgdGVzdF9hbmRfKl9iaXQgb3BlcmF0aW9ucyBhcmUgdGFrZW4gdG8gaW1wbHkgYSBtZW1vcnkgYmFycmllcgorICogb24gU01QIHN5c3RlbXMuCisgKi8KKyNpZmRlZiBDT05GSUdfU01QCisjZGVmaW5lIFNNUF9XTUIJCSJlaWVpb1xuIgorI2RlZmluZSBTTVBfTUIJCSJcbnN5bmMiCisjZWxzZQorI2RlZmluZSBTTVBfV01CCisjZGVmaW5lIFNNUF9NQgorI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBzZXRfYml0KGludCBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqIGFkZHIpCit7CisJdW5zaWduZWQgbG9uZyBvbGQ7CisJdW5zaWduZWQgbG9uZyBtYXNrID0gMSA8PCAobnIgJiAweDFmKTsKKwl1bnNpZ25lZCBsb25nICpwID0gKCh1bnNpZ25lZCBsb25nICopYWRkcikgKyAobnIgPj4gNSk7CisJCisJX19hc21fXyBfX3ZvbGF0aWxlX18oIlxuXAorMToJbHdhcngJJTAsMCwlMyBcblwKKwlvcgklMCwlMCwlMiBcbiIKKwlQUEM0MDVfRVJSNzcoMCwlMykKKyIJc3R3Y3guCSUwLDAsJTMgXG5cCisJYm5lLQkxYiIKKwk6ICI9JnIiIChvbGQpLCAiPW0iICgqcCkKKwk6ICJyIiAobWFzayksICJyIiAocCksICJtIiAoKnApCisJOiAiY2MiICk7Cit9CisKKy8qCisgKiBub24tYXRvbWljIHZlcnNpb24KKyAqLworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX3NldF9iaXQoaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQoreworCXVuc2lnbmVkIGxvbmcgbWFzayA9IDEgPDwgKG5yICYgMHgxZik7CisJdW5zaWduZWQgbG9uZyAqcCA9ICgodW5zaWduZWQgbG9uZyAqKWFkZHIpICsgKG5yID4+IDUpOworCisJKnAgfD0gbWFzazsKK30KKworLyoKKyAqIGNsZWFyX2JpdCBkb2Vzbid0IGltcGx5IGEgbWVtb3J5IGJhcnJpZXIKKyAqLworI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKQlzbXBfbWIoKQorI2RlZmluZSBzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpCXNtcF9tYigpCisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgY2xlYXJfYml0KGludCBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIG9sZDsKKwl1bnNpZ25lZCBsb25nIG1hc2sgPSAxIDw8IChuciAmIDB4MWYpOworCXVuc2lnbmVkIGxvbmcgKnAgPSAoKHVuc2lnbmVkIGxvbmcgKilhZGRyKSArIChuciA+PiA1KTsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKCJcblwKKzE6CWx3YXJ4CSUwLDAsJTMgXG5cCisJYW5kYwklMCwlMCwlMiBcbiIKKwlQUEM0MDVfRVJSNzcoMCwlMykKKyIJc3R3Y3guCSUwLDAsJTMgXG5cCisJYm5lLQkxYiIKKwk6ICI9JnIiIChvbGQpLCAiPW0iICgqcCkKKwk6ICJyIiAobWFzayksICJyIiAocCksICJtIiAoKnApCisJOiAiY2MiKTsKK30KKworLyoKKyAqIG5vbi1hdG9taWMgdmVyc2lvbgorICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fY2xlYXJfYml0KGludCBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIG1hc2sgPSAxIDw8IChuciAmIDB4MWYpOworCXVuc2lnbmVkIGxvbmcgKnAgPSAoKHVuc2lnbmVkIGxvbmcgKilhZGRyKSArIChuciA+PiA1KTsKKworCSpwICY9IH5tYXNrOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGNoYW5nZV9iaXQoaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQoreworCXVuc2lnbmVkIGxvbmcgb2xkOworCXVuc2lnbmVkIGxvbmcgbWFzayA9IDEgPDwgKG5yICYgMHgxZik7CisJdW5zaWduZWQgbG9uZyAqcCA9ICgodW5zaWduZWQgbG9uZyAqKWFkZHIpICsgKG5yID4+IDUpOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oIlxuXAorMToJbHdhcngJJTAsMCwlMyBcblwKKwl4b3IJJTAsJTAsJTIgXG4iCisJUFBDNDA1X0VSUjc3KDAsJTMpCisiCXN0d2N4LgklMCwwLCUzIFxuXAorCWJuZS0JMWIiCisJOiAiPSZyIiAob2xkKSwgIj1tIiAoKnApCisJOiAiciIgKG1hc2spLCAiciIgKHApLCAibSIgKCpwKQorCTogImNjIik7Cit9CisKKy8qCisgKiBub24tYXRvbWljIHZlcnNpb24KKyAqLworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX2NoYW5nZV9iaXQoaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQoreworCXVuc2lnbmVkIGxvbmcgbWFzayA9IDEgPDwgKG5yICYgMHgxZik7CisJdW5zaWduZWQgbG9uZyAqcCA9ICgodW5zaWduZWQgbG9uZyAqKWFkZHIpICsgKG5yID4+IDUpOworCisJKnAgXj0gbWFzazsKK30KKworLyoKKyAqIHRlc3RfYW5kXypfYml0IGRvIGltcGx5IGEgbWVtb3J5IGJhcnJpZXIgKD8pCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIGludCB0ZXN0X2FuZF9zZXRfYml0KGludCBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcikKK3sKKwl1bnNpZ25lZCBpbnQgb2xkLCB0OworCXVuc2lnbmVkIGludCBtYXNrID0gMSA8PCAobnIgJiAweDFmKTsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKnAgPSAoKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKWFkZHIpICsgKG5yID4+IDUpOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oU01QX1dNQiAiXG5cCisxOglsd2FyeAklMCwwLCU0IFxuXAorCW9yCSUxLCUwLCUzIFxuIgorCVBQQzQwNV9FUlI3NygwLCU0KQorIglzdHdjeC4JJTEsMCwlNCBcblwKKwlibmUJMWIiCisJU01QX01CCisJOiAiPSZyIiAob2xkKSwgIj0mciIgKHQpLCAiPW0iICgqcCkKKwk6ICJyIiAobWFzayksICJyIiAocCksICJtIiAoKnApCisJOiAiY2MiLCAibWVtb3J5Iik7CisKKwlyZXR1cm4gKG9sZCAmIG1hc2spICE9IDA7Cit9CisKKy8qCisgKiBub24tYXRvbWljIHZlcnNpb24KKyAqLworc3RhdGljIF9faW5saW5lX18gaW50IF9fdGVzdF9hbmRfc2V0X2JpdChpbnQgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpCit7CisJdW5zaWduZWQgbG9uZyBtYXNrID0gMSA8PCAobnIgJiAweDFmKTsKKwl1bnNpZ25lZCBsb25nICpwID0gKCh1bnNpZ25lZCBsb25nICopYWRkcikgKyAobnIgPj4gNSk7CisJdW5zaWduZWQgbG9uZyBvbGQgPSAqcDsKKworCSpwID0gb2xkIHwgbWFzazsKKwlyZXR1cm4gKG9sZCAmIG1hc2spICE9IDA7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCB0ZXN0X2FuZF9jbGVhcl9iaXQoaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQoreworCXVuc2lnbmVkIGludCBvbGQsIHQ7CisJdW5zaWduZWQgaW50IG1hc2sgPSAxIDw8IChuciAmIDB4MWYpOworCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqcCA9ICgodm9sYXRpbGUgdW5zaWduZWQgaW50ICopYWRkcikgKyAobnIgPj4gNSk7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyhTTVBfV01CICJcblwKKzE6CWx3YXJ4CSUwLDAsJTQgXG5cCisJYW5kYwklMSwlMCwlMyBcbiIKKwlQUEM0MDVfRVJSNzcoMCwlNCkKKyIJc3R3Y3guCSUxLDAsJTQgXG5cCisJYm5lCTFiIgorCVNNUF9NQgorCTogIj0mciIgKG9sZCksICI9JnIiICh0KSwgIj1tIiAoKnApCisJOiAiciIgKG1hc2spLCAiciIgKHApLCAibSIgKCpwKQorCTogImNjIiwgIm1lbW9yeSIpOworCisJcmV0dXJuIChvbGQgJiBtYXNrKSAhPSAwOworfQorCisvKgorICogbm9uLWF0b21pYyB2ZXJzaW9uCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIGludCBfX3Rlc3RfYW5kX2NsZWFyX2JpdChpbnQgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpCit7CisJdW5zaWduZWQgbG9uZyBtYXNrID0gMSA8PCAobnIgJiAweDFmKTsKKwl1bnNpZ25lZCBsb25nICpwID0gKCh1bnNpZ25lZCBsb25nICopYWRkcikgKyAobnIgPj4gNSk7CisJdW5zaWduZWQgbG9uZyBvbGQgPSAqcDsKKworCSpwID0gb2xkICYgfm1hc2s7CisJcmV0dXJuIChvbGQgJiBtYXNrKSAhPSAwOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgdGVzdF9hbmRfY2hhbmdlX2JpdChpbnQgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpCit7CisJdW5zaWduZWQgaW50IG9sZCwgdDsKKwl1bnNpZ25lZCBpbnQgbWFzayA9IDEgPDwgKG5yICYgMHgxZik7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50ICpwID0gKCh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKilhZGRyKSArIChuciA+PiA1KTsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKFNNUF9XTUIgIlxuXAorMToJbHdhcngJJTAsMCwlNCBcblwKKwl4b3IJJTEsJTAsJTMgXG4iCisJUFBDNDA1X0VSUjc3KDAsJTQpCisiCXN0d2N4LgklMSwwLCU0IFxuXAorCWJuZQkxYiIKKwlTTVBfTUIKKwk6ICI9JnIiIChvbGQpLCAiPSZyIiAodCksICI9bSIgKCpwKQorCTogInIiIChtYXNrKSwgInIiIChwKSwgIm0iICgqcCkKKwk6ICJjYyIsICJtZW1vcnkiKTsKKworCXJldHVybiAob2xkICYgbWFzaykgIT0gMDsKK30KKworLyoKKyAqIG5vbi1hdG9taWMgdmVyc2lvbgorICovCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX190ZXN0X2FuZF9jaGFuZ2VfYml0KGludCBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIG1hc2sgPSAxIDw8IChuciAmIDB4MWYpOworCXVuc2lnbmVkIGxvbmcgKnAgPSAoKHVuc2lnbmVkIGxvbmcgKilhZGRyKSArIChuciA+PiA1KTsKKwl1bnNpZ25lZCBsb25nIG9sZCA9ICpwOworCisJKnAgPSBvbGQgXiBtYXNrOworCXJldHVybiAob2xkICYgbWFzaykgIT0gMDsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IHRlc3RfYml0KGludCBuciwgX19jb25zdF9fIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpCit7CisJcmV0dXJuICgoYWRkcltuciA+PiA1XSA+PiAobnIgJiAweDFmKSkgJiAxKSAhPSAwOworfQorCisvKiBSZXR1cm4gdGhlIGJpdCBwb3NpdGlvbiBvZiB0aGUgbW9zdCBzaWduaWZpY2FudCAxIGJpdCBpbiBhIHdvcmQgKi8KK3N0YXRpYyBfX2lubGluZV9fIGludCBfX2lsb2cyKHVuc2lnbmVkIGxvbmcgeCkKK3sKKwlpbnQgbHo7CisKKwlhc20gKCJjbnRsencgJTAsJTEiIDogIj1yIiAobHopIDogInIiICh4KSk7CisJcmV0dXJuIDMxIC0gbHo7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBmZnoodW5zaWduZWQgbG9uZyB4KQoreworCWlmICgoeCA9IH54KSA9PSAwKQorCQlyZXR1cm4gMzI7CisJcmV0dXJuIF9faWxvZzIoeCAmIC14KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19mZnModW5zaWduZWQgbG9uZyB4KQoreworCXJldHVybiBfX2lsb2cyKHggJiAteCk7Cit9CisKKy8qCisgKiBmZnM6IGZpbmQgZmlyc3QgYml0IHNldC4gVGhpcyBpcyBkZWZpbmVkIHRoZSBzYW1lIHdheSBhcworICogdGhlIGxpYmMgYW5kIGNvbXBpbGVyIGJ1aWx0aW4gZmZzIHJvdXRpbmVzLCB0aGVyZWZvcmUKKyAqIGRpZmZlcnMgaW4gc3Bpcml0IGZyb20gdGhlIGFib3ZlIGZmeiAobWFuIGZmcykuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIGludCBmZnMoaW50IHgpCit7CisJcmV0dXJuIF9faWxvZzIoeCAmIC14KSArIDE7Cit9CisKKy8qCisgKiBmbHM6IGZpbmQgbGFzdCAobW9zdC1zaWduaWZpY2FudCkgYml0IHNldC4KKyAqIE5vdGUgZmxzKDApID0gMCwgZmxzKDEpID0gMSwgZmxzKDB4ODAwMDAwMDApID0gMzIuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIGludCBmbHModW5zaWduZWQgaW50IHgpCit7CisJaW50IGx6OworCisJYXNtICgiY250bHp3ICUwLCUxIiA6ICI9ciIgKGx6KSA6ICJyIiAoeCkpOworCXJldHVybiAzMiAtIGx6OworfQorCisvKgorICogaHdlaWdodE46IHJldHVybnMgdGhlIGhhbW1pbmcgd2VpZ2h0IChpLmUuIHRoZSBudW1iZXIKKyAqIG9mIGJpdHMgc2V0KSBvZiBhIE4tYml0IHdvcmQKKyAqLworCisjZGVmaW5lIGh3ZWlnaHQzMih4KSBnZW5lcmljX2h3ZWlnaHQzMih4KQorI2RlZmluZSBod2VpZ2h0MTYoeCkgZ2VuZXJpY19od2VpZ2h0MTYoeCkKKyNkZWZpbmUgaHdlaWdodDgoeCkgZ2VuZXJpY19od2VpZ2h0OCh4KQorCisvKgorICogRmluZCB0aGUgZmlyc3QgYml0IHNldCBpbiBhIDE0MC1iaXQgYml0bWFwLgorICogVGhlIGZpcnN0IDEwMCBiaXRzIGFyZSB1bmxpa2VseSB0byBiZSBzZXQuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHNjaGVkX2ZpbmRfZmlyc3RfYml0KGNvbnN0IHVuc2lnbmVkIGxvbmcgKmIpCit7CisJaWYgKHVubGlrZWx5KGJbMF0pKQorCQlyZXR1cm4gX19mZnMoYlswXSk7CisJaWYgKHVubGlrZWx5KGJbMV0pKQorCQlyZXR1cm4gX19mZnMoYlsxXSkgKyAzMjsKKwlpZiAodW5saWtlbHkoYlsyXSkpCisJCXJldHVybiBfX2ZmcyhiWzJdKSArIDY0OworCWlmIChiWzNdKQorCQlyZXR1cm4gX19mZnMoYlszXSkgKyA5NjsKKwlyZXR1cm4gX19mZnMoYls0XSkgKyAxMjg7Cit9CisKKy8qKgorICogZmluZF9uZXh0X2JpdCAtIGZpbmQgdGhlIG5leHQgc2V0IGJpdCBpbiBhIG1lbW9yeSByZWdpb24KKyAqIEBhZGRyOiBUaGUgYWRkcmVzcyB0byBiYXNlIHRoZSBzZWFyY2ggb24KKyAqIEBvZmZzZXQ6IFRoZSBiaXRudW1iZXIgdG8gc3RhcnQgc2VhcmNoaW5nIGF0CisgKiBAc2l6ZTogVGhlIG1heGltdW0gc2l6ZSB0byBzZWFyY2gKKyAqLworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBmaW5kX25leHRfYml0KGNvbnN0IHVuc2lnbmVkIGxvbmcgKmFkZHIsCisJdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIG9mZnNldCkKK3sKKwl1bnNpZ25lZCBpbnQgKnAgPSAoKHVuc2lnbmVkIGludCAqKSBhZGRyKSArIChvZmZzZXQgPj4gNSk7CisJdW5zaWduZWQgaW50IHJlc3VsdCA9IG9mZnNldCAmIH4zMVVMOworCXVuc2lnbmVkIGludCB0bXA7CisKKwlpZiAob2Zmc2V0ID49IHNpemUpCisJCXJldHVybiBzaXplOworCXNpemUgLT0gcmVzdWx0OworCW9mZnNldCAmPSAzMVVMOworCWlmIChvZmZzZXQpIHsKKwkJdG1wID0gKnArKzsKKwkJdG1wICY9IH4wVUwgPDwgb2Zmc2V0OworCQlpZiAoc2l6ZSA8IDMyKQorCQkJZ290byBmb3VuZF9maXJzdDsKKwkJaWYgKHRtcCkKKwkJCWdvdG8gZm91bmRfbWlkZGxlOworCQlzaXplIC09IDMyOworCQlyZXN1bHQgKz0gMzI7CisJfQorCXdoaWxlIChzaXplID49IDMyKSB7CisJCWlmICgodG1wID0gKnArKykgIT0gMCkKKwkJCWdvdG8gZm91bmRfbWlkZGxlOworCQlyZXN1bHQgKz0gMzI7CisJCXNpemUgLT0gMzI7CisJfQorCWlmICghc2l6ZSkKKwkJcmV0dXJuIHJlc3VsdDsKKwl0bXAgPSAqcDsKKworZm91bmRfZmlyc3Q6CisJdG1wICY9IH4wVUwgPj4gKDMyIC0gc2l6ZSk7CisJaWYgKHRtcCA9PSAwVUwpICAgICAgICAvKiBBcmUgYW55IGJpdHMgc2V0PyAqLworCQlyZXR1cm4gcmVzdWx0ICsgc2l6ZTsgLyogTm9wZS4gKi8KK2ZvdW5kX21pZGRsZToKKwlyZXR1cm4gcmVzdWx0ICsgX19mZnModG1wKTsKK30KKworLyoqCisgKiBmaW5kX2ZpcnN0X2JpdCAtIGZpbmQgdGhlIGZpcnN0IHNldCBiaXQgaW4gYSBtZW1vcnkgcmVnaW9uCisgKiBAYWRkcjogVGhlIGFkZHJlc3MgdG8gc3RhcnQgdGhlIHNlYXJjaCBhdAorICogQHNpemU6IFRoZSBtYXhpbXVtIHNpemUgdG8gc2VhcmNoCisgKgorICogUmV0dXJucyB0aGUgYml0LW51bWJlciBvZiB0aGUgZmlyc3Qgc2V0IGJpdCwgbm90IHRoZSBudW1iZXIgb2YgdGhlIGJ5dGUKKyAqIGNvbnRhaW5pbmcgYSBiaXQuCisgKi8KKyNkZWZpbmUgZmluZF9maXJzdF9iaXQoYWRkciwgc2l6ZSkgXAorCWZpbmRfbmV4dF9iaXQoKGFkZHIpLCAoc2l6ZSksIDApCisKKy8qCisgKiBUaGlzIGltcGxlbWVudGF0aW9uIG9mIGZpbmRfe2ZpcnN0LG5leHR9X3plcm9fYml0IHdhcyBzdG9sZW4gZnJvbQorICogTGludXMnIGFzbS1hbHBoYS9iaXRvcHMuaC4KKyAqLworI2RlZmluZSBmaW5kX2ZpcnN0X3plcm9fYml0KGFkZHIsIHNpemUpIFwKKwlmaW5kX25leHRfemVyb19iaXQoKGFkZHIpLCAoc2l6ZSksIDApCisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgZmluZF9uZXh0X3plcm9fYml0KGNvbnN0IHVuc2lnbmVkIGxvbmcgKmFkZHIsCisJdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIG9mZnNldCkKK3sKKwl1bnNpZ25lZCBpbnQgKiBwID0gKCh1bnNpZ25lZCBpbnQgKikgYWRkcikgKyAob2Zmc2V0ID4+IDUpOworCXVuc2lnbmVkIGludCByZXN1bHQgPSBvZmZzZXQgJiB+MzFVTDsKKwl1bnNpZ25lZCBpbnQgdG1wOworCisJaWYgKG9mZnNldCA+PSBzaXplKQorCQlyZXR1cm4gc2l6ZTsKKwlzaXplIC09IHJlc3VsdDsKKwlvZmZzZXQgJj0gMzFVTDsKKwlpZiAob2Zmc2V0KSB7CisJCXRtcCA9ICpwKys7CisJCXRtcCB8PSB+MFVMID4+ICgzMi1vZmZzZXQpOworCQlpZiAoc2l6ZSA8IDMyKQorCQkJZ290byBmb3VuZF9maXJzdDsKKwkJaWYgKHRtcCAhPSB+MFUpCisJCQlnb3RvIGZvdW5kX21pZGRsZTsKKwkJc2l6ZSAtPSAzMjsKKwkJcmVzdWx0ICs9IDMyOworCX0KKwl3aGlsZSAoc2l6ZSA+PSAzMikgeworCQlpZiAoKHRtcCA9ICpwKyspICE9IH4wVSkKKwkJCWdvdG8gZm91bmRfbWlkZGxlOworCQlyZXN1bHQgKz0gMzI7CisJCXNpemUgLT0gMzI7CisJfQorCWlmICghc2l6ZSkKKwkJcmV0dXJuIHJlc3VsdDsKKwl0bXAgPSAqcDsKK2ZvdW5kX2ZpcnN0OgorCXRtcCB8PSB+MFVMIDw8IHNpemU7CisJaWYgKHRtcCA9PSB+MFVMKSAgICAgICAgLyogQXJlIGFueSBiaXRzIHplcm8/ICovCisJCXJldHVybiByZXN1bHQgKyBzaXplOyAvKiBOb3BlLiAqLworZm91bmRfbWlkZGxlOgorCXJldHVybiByZXN1bHQgKyBmZnoodG1wKTsKK30KKworCisjZGVmaW5lIGV4dDJfc2V0X2JpdChuciwgYWRkcikJX190ZXN0X2FuZF9zZXRfYml0KChucikgXiAweDE4LCAodW5zaWduZWQgbG9uZyAqKShhZGRyKSkKKyNkZWZpbmUgZXh0Ml9zZXRfYml0X2F0b21pYyhsb2NrLCBuciwgYWRkcikgIHRlc3RfYW5kX3NldF9iaXQoKG5yKSBeIDB4MTgsICh1bnNpZ25lZCBsb25nICopKGFkZHIpKQorI2RlZmluZSBleHQyX2NsZWFyX2JpdChuciwgYWRkcikgX190ZXN0X2FuZF9jbGVhcl9iaXQoKG5yKSBeIDB4MTgsICh1bnNpZ25lZCBsb25nICopKGFkZHIpKQorI2RlZmluZSBleHQyX2NsZWFyX2JpdF9hdG9taWMobG9jaywgbnIsIGFkZHIpIHRlc3RfYW5kX2NsZWFyX2JpdCgobnIpIF4gMHgxOCwgKHVuc2lnbmVkIGxvbmcgKikoYWRkcikpCisKK3N0YXRpYyBfX2lubGluZV9fIGludCBleHQyX3Rlc3RfYml0KGludCBuciwgX19jb25zdF9fIHZvaWQgKiBhZGRyKQoreworCV9fY29uc3RfXyB1bnNpZ25lZCBjaGFyCSpBRERSID0gKF9fY29uc3RfXyB1bnNpZ25lZCBjaGFyICopIGFkZHI7CisKKwlyZXR1cm4gKEFERFJbbnIgPj4gM10gPj4gKG5yICYgNykpICYgMTsKK30KKworLyoKKyAqIFRoaXMgaW1wbGVtZW50YXRpb24gb2YgZXh0Ml9maW5kX3tmaXJzdCxuZXh0fV96ZXJvX2JpdCB3YXMgc3RvbGVuIGZyb20KKyAqIExpbnVzJyBhc20tYWxwaGEvYml0b3BzLmggYW5kIG1vZGlmaWVkIGZvciBhIGJpZy1lbmRpYW4gbWFjaGluZS4KKyAqLworCisjZGVmaW5lIGV4dDJfZmluZF9maXJzdF96ZXJvX2JpdChhZGRyLCBzaXplKSBcCisgICAgICAgIGV4dDJfZmluZF9uZXh0X3plcm9fYml0KChhZGRyKSwgKHNpemUpLCAwKQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGV4dDJfZmluZF9uZXh0X3plcm9fYml0KGNvbnN0IHZvaWQgKmFkZHIsCisJdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIG9mZnNldCkKK3sKKwl1bnNpZ25lZCBpbnQgKnAgPSAoKHVuc2lnbmVkIGludCAqKSBhZGRyKSArIChvZmZzZXQgPj4gNSk7CisJdW5zaWduZWQgaW50IHJlc3VsdCA9IG9mZnNldCAmIH4zMVVMOworCXVuc2lnbmVkIGludCB0bXA7CisKKwlpZiAob2Zmc2V0ID49IHNpemUpCisJCXJldHVybiBzaXplOworCXNpemUgLT0gcmVzdWx0OworCW9mZnNldCAmPSAzMVVMOworCWlmIChvZmZzZXQpIHsKKwkJdG1wID0gY3B1X3RvX2xlMzJwKHArKyk7CisJCXRtcCB8PSB+MFVMID4+ICgzMi1vZmZzZXQpOworCQlpZiAoc2l6ZSA8IDMyKQorCQkJZ290byBmb3VuZF9maXJzdDsKKwkJaWYgKHRtcCAhPSB+MFUpCisJCQlnb3RvIGZvdW5kX21pZGRsZTsKKwkJc2l6ZSAtPSAzMjsKKwkJcmVzdWx0ICs9IDMyOworCX0KKwl3aGlsZSAoc2l6ZSA+PSAzMikgeworCQlpZiAoKHRtcCA9IGNwdV90b19sZTMycChwKyspKSAhPSB+MFUpCisJCQlnb3RvIGZvdW5kX21pZGRsZTsKKwkJcmVzdWx0ICs9IDMyOworCQlzaXplIC09IDMyOworCX0KKwlpZiAoIXNpemUpCisJCXJldHVybiByZXN1bHQ7CisJdG1wID0gY3B1X3RvX2xlMzJwKHApOworZm91bmRfZmlyc3Q6CisJdG1wIHw9IH4wVSA8PCBzaXplOworCWlmICh0bXAgPT0gfjBVTCkgICAgICAgIC8qIEFyZSBhbnkgYml0cyB6ZXJvPyAqLworCQlyZXR1cm4gcmVzdWx0ICsgc2l6ZTsgLyogTm9wZS4gKi8KK2ZvdW5kX21pZGRsZToKKwlyZXR1cm4gcmVzdWx0ICsgZmZ6KHRtcCk7Cit9CisKKy8qIEJpdG1hcCBmdW5jdGlvbnMgZm9yIHRoZSBtaW5peCBmaWxlc3lzdGVtLiAgKi8KKyNkZWZpbmUgbWluaXhfdGVzdF9hbmRfc2V0X2JpdChucixhZGRyKSBleHQyX3NldF9iaXQobnIsYWRkcikKKyNkZWZpbmUgbWluaXhfc2V0X2JpdChucixhZGRyKSAoKHZvaWQpZXh0Ml9zZXRfYml0KG5yLGFkZHIpKQorI2RlZmluZSBtaW5peF90ZXN0X2FuZF9jbGVhcl9iaXQobnIsYWRkcikgZXh0Ml9jbGVhcl9iaXQobnIsYWRkcikKKyNkZWZpbmUgbWluaXhfdGVzdF9iaXQobnIsYWRkcikgZXh0Ml90ZXN0X2JpdChucixhZGRyKQorI2RlZmluZSBtaW5peF9maW5kX2ZpcnN0X3plcm9fYml0KGFkZHIsc2l6ZSkgZXh0Ml9maW5kX2ZpcnN0X3plcm9fYml0KGFkZHIsc2l6ZSkKKworI2VuZGlmIC8qIF9QUENfQklUT1BTX0ggKi8KKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvYm9vdGluZm8uaCBiL2luY2x1ZGUvYXNtLXBwYy9ib290aW5mby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzZDk1NWMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGMvYm9vdGluZm8uaApAQCAtMCwwICsxLDUyIEBACisvKgorICogTm9uLW1hY2hpbmUgZGVwZW5kZW50IGJvb3RpbmZvIHN0cnVjdHVyZS4gIEJhc2ljIGlkZWEKKyAqIGJvcnJvd2VkIGZyb20gdGhlIG02OGsuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5IENvcnQgRG91Z2FuIDxjb3J0QHBwYy5rZXJuZWwub3JnPgorICovCisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaWZuZGVmIF9QUENfQk9PVElORk9fSAorI2RlZmluZSBfUFBDX0JPT1RJTkZPX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisKKyNpZiBkZWZpbmVkKENPTkZJR19BUFVTKSAmJiAhZGVmaW5lZChfX0JPT1RFUl9fKQorI2luY2x1ZGUgPGFzbS1tNjhrL2Jvb3RpbmZvLmg+CisjZWxzZQorCitzdHJ1Y3QgYmlfcmVjb3JkIHsKKwl1bnNpZ25lZCBsb25nIHRhZzsJCS8qIHRhZyBJRCAqLworCXVuc2lnbmVkIGxvbmcgc2l6ZTsJCS8qIHNpemUgb2YgcmVjb3JkIChpbiBieXRlcykgKi8KKwl1bnNpZ25lZCBsb25nIGRhdGFbMF07CQkvKiBkYXRhICovCit9OworCisjZGVmaW5lIEJJX0ZJUlNUCQkweDEwMTAgIC8qIGZpcnN0IHJlY29yZCAtIG1hcmtlciAqLworI2RlZmluZSBCSV9MQVNUCQkJMHgxMDExCS8qIGxhc3QgcmVjb3JkIC0gbWFya2VyICovCisjZGVmaW5lIEJJX0NNRF9MSU5FCQkweDEwMTIKKyNkZWZpbmUgQklfQk9PVExPQURFUl9JRAkweDEwMTMKKyNkZWZpbmUgQklfSU5JVFJECQkweDEwMTQKKyNkZWZpbmUgQklfU1lTTUFQCQkweDEwMTUKKyNkZWZpbmUgQklfTUFDSFRZUEUJCTB4MTAxNgorI2RlZmluZSBCSV9NRU1TSVpFCQkweDEwMTcKKyNkZWZpbmUgQklfQk9BUkRfSU5GTwkJMHgxMDE4CisKK2V4dGVybiBzdHJ1Y3QgYmlfcmVjb3JkICpmaW5kX2Jvb3RpbmZvKHZvaWQpOworZXh0ZXJuIHZvaWQgYm9vdGluZm9faW5pdChzdHJ1Y3QgYmlfcmVjb3JkICpyZWMpOworZXh0ZXJuIHZvaWQgYm9vdGluZm9fYXBwZW5kKHVuc2lnbmVkIGxvbmcgdGFnLCB1bnNpZ25lZCBsb25nIHNpemUsIHZvaWQgKiBkYXRhKTsKK2V4dGVybiB2b2lkIHBhcnNlX2Jvb3RpbmZvKHN0cnVjdCBiaV9yZWNvcmQgKnJlYyk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBib290X21lbV9zaXplOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBiaV9yZWNvcmQgKgorYm9vdGluZm9fYWRkcih1bnNpZ25lZCBsb25nIG9mZnNldCkKK3sKKworCXJldHVybiAoc3RydWN0IGJpX3JlY29yZCAqKV9BTElHTigob2Zmc2V0KSArICgxIDw8IDIwKSAtIDEsCisJCQkJCSAgKDEgPDwgMjApKTsKK30KKyNlbmRpZiAvKiBDT05GSUdfQVBVUyAqLworCisKKyNlbmRpZiAvKiBfUFBDX0JPT1RJTkZPX0ggKi8KKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvYm9vdHguaCBiL2luY2x1ZGUvYXNtLXBwYy9ib290eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwYzUxYjQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGMvYm9vdHguaApAQCAtMCwwICsxLDEzNSBAQAorLyoKKyAqIFRoaXMgZmlsZSBkZXNjcmliZXMgdGhlIHN0cnVjdHVyZSBwYXNzZWQgZnJvbSB0aGUgQm9vdFggYXBwbGljYXRpb24KKyAqIChmb3IgTWFjT1MpIHdoZW4gaXQgaXMgdXNlZCB0byBib290IExpbnV4LgorICoKKyAqIFdyaXR0ZW4gYnkgQmVuamFtaW4gSGVycmVuc2NobWlkdC4KKyAqLworCisKKyNpZm5kZWYgX19BU01fQk9PVFhfSF9fCisjZGVmaW5lIF9fQVNNX0JPT1RYX0hfXworCisjaWZkZWYgbWFjaW50b3NoCisjaW5jbHVkZSA8VHlwZXMuaD4KKyNpbmNsdWRlICJsaW51eF90eXBlX2RlZnMuaCIKKyNlbmRpZgorCisjaWZkZWYgbWFjaW50b3NoCisvKiBBbGwgdGhpcyByZXF1aXJlcyBQb3dlclBDIGFsaWdubWVudCAqLworI3ByYWdtYSBvcHRpb25zIGFsaWduPXBvd2VyCisjZW5kaWYKKworLyogT24ga2VybmVsIGVudHJ5OgorICoKKyAqIHIzID0gMHg0MjZmNmY1OCAgICAoJ0Jvb1gnKQorICogcjQgPSBwb2ludGVyIHRvIGJvb3RfaW5mb3MKKyAqIHI1ID0gTlVMTAorICoKKyAqIERhdGEgYW5kIGluc3RydWN0aW9uIHRyYW5zbGF0aW9uIGRpc2FibGVkLCBpbnRlcnJ1cHRzCisgKiBkaXNhYmxlZCwga2VybmVsIGxvYWRlZCBhdCBwaHlzaWNhbCAweDAwMDAwMDAwIG9uIFBDSQorICogbWFjaGluZXMgKHdpbGwgYmUgZGlmZmVyZW50IG9uIE51QnVzKS4KKyAqLworCisjZGVmaW5lIEJPT1RfSU5GT19WRVJTSU9OICAgICAgICAgICAgICAgNQorI2RlZmluZSBCT09UX0lORk9fQ09NUEFUSUJMRV9WRVJTSU9OICAgIDEKKworLyogQml0IGluIHRoZSBhcmNoaXRlY3R1cmUgZmxhZyBtYXNrLiBNb3JlIHRvIGJlIGRlZmluZWQgaW4KKyAgIGZ1dHVyZSB2ZXJzaW9ucy4gTm90ZSB0aGF0IGVpdGhlciBCT09UX0FSQ0hfUENJIG9yCisgICBCT09UX0FSQ0hfTlVCVVMgaXMgc2V0LiBUaGUgb3RoZXIgQk9PVF9BUkNIX05VQlVTX3h4eCBhcmUKKyAgIHNldCBhZGRpdGlvbmFsbHkgd2hlbiBCT09UX0FSQ0hfTlVCVVMgaXMgc2V0LgorICovCisjZGVmaW5lIEJPT1RfQVJDSF9QQ0kgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMVVMCisjZGVmaW5lIEJPT1RfQVJDSF9OVUJVUyAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMlVMCisjZGVmaW5lIEJPT1RfQVJDSF9OVUJVU19QRE0gICAgICAgICAgICAgMHgwMDAwMDAxMFVMCisjZGVmaW5lIEJPT1RfQVJDSF9OVUJVU19QRVJGT1JNQSAgICAgICAgMHgwMDAwMDAyMFVMCisjZGVmaW5lIEJPT1RfQVJDSF9OVUJVU19QT1dFUkJPT0sgICAgICAgMHgwMDAwMDA0MFVMCisKKy8qICBNYXhpbXVtIG51bWJlciBvZiByYW5nZXMgaW4gcGh5cyBtZW1vcnkgbWFwICovCisjZGVmaW5lIE1BWF9NRU1fTUFQX1NJWkUJCQkJMjYKKworLyogVGhpcyBpcyB0aGUgZm9ybWF0IG9mIGFuIGVsZW1lbnQgaW4gdGhlIHBoeXNpY2FsIG1lbW9yeSBtYXAuIE5vdGUgdGhhdAorICAgdGhlIG1hcCBpcyBvcHRpb25hbCBhbmQgY3VycmVudCBCb290WCB3aWxsIG9ubHkgYnVpbGQgaXQgZm9yIHByZS1QQ0kKKyAgIG1hY2hpbmVzICovCit0eXBlZGVmIHN0cnVjdCBib290X2luZm9fbWFwX2VudHJ5Cit7CisgICAgX191MzIgICAgICAgcGh5c0FkZHI7ICAgICAgICAgICAgICAgIC8qIFBoeXNpY2FsIHN0YXJ0aW5nIGFkZHJlc3MgKi8KKyAgICBfX3UzMiAgICAgICBzaXplOyAgICAgICAgICAgICAgICAgICAgLyogU2l6ZSBpbiBieXRlcyAqLworfSBib290X2luZm9fbWFwX2VudHJ5X3Q7CisKKworLyogSGVyZSBhcmUgdGhlIGJvb3QgaW5mb3JtYXRpb25zIHRoYXQgYXJlIHBhc3NlZCB0byB0aGUgYm9vdHN0cmFwCisgKiBOb3RlIHRoYXQgdGhlIGtlcm5lbCBhcmd1bWVudHMgYW5kIHRoZSBkZXZpY2UgdHJlZSBhcmUgYXBwZW5kZWQKKyAqIGF0IHRoZSBlbmQgb2YgdGhpcyBzdHJ1Y3R1cmUuICovCit0eXBlZGVmIHN0cnVjdCBib290X2luZm9zCit7CisgICAgLyogVmVyc2lvbiBvZiB0aGlzIHN0cnVjdHVyZSAqLworICAgIF9fdTMyICAgICAgIHZlcnNpb247CisgICAgLyogYmFja3dhcmQgY29tcGF0aWJsZSBkb3duIHRvIHZlcnNpb246ICovCisgICAgX191MzIgICAgICAgY29tcGF0aWJsZV92ZXJzaW9uOworCisgICAgLyogTkVXICh2ZXJzLiAyKSB0aGlzIGhvbGRzIHRoZSBjdXJyZW50IF9sb2dpY2FsXyBiYXNlIGFkZHIgb2YKKyAgICAgICB0aGUgZnJhbWUgYnVmZmVyIChmb3IgdXNlIGJ5IGVhcmx5IGJvb3QgbWVzc2FnZSkgKi8KKyAgICBfX3U4KiAgICAgICBsb2dpY2FsRGlzcGxheUJhc2U7CisKKyAgICAvKiBORVcgKHZlcnMuIDQpIEFwcGxlJ3MgbWFjaGluZSBpZGVudGlmaWNhdGlvbiAqLworICAgIF9fdTMyICAgICAgIG1hY2hpbmVJRDsKKworICAgIC8qIE5FVyAodmVycy4gNCkgRGV0ZWN0ZWQgaHcgYXJjaGl0ZWN0dXJlICovCisgICAgX191MzIgICAgICAgYXJjaGl0ZWN0dXJlOworCisgICAgLyogVGhlIGRldmljZSB0cmVlIChpbnRlcm5hbCBhZGRyZXNzZXMgcmVsYXRpdmUgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgdHJlZSwKKyAgICAgKiBkZXZpY2UgdHJlZSBvZmZzZXQgcmVsYXRpdmUgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGlzIHN0cnVjdHVyZSkuCisgICAgICogT24gcHJlLVBDSSBtYWNpbnRvc2ggKEJPT1RfQVJDSF9QQ0kgYml0IHNldCB0byAwIGluIGFyY2hpdGVjdHVyZSksIHRoaXMKKyAgICAgKiBmaWVsZCBpcyAwLgorICAgICAqLworICAgIF9fdTMyICAgICAgIGRldmljZVRyZWVPZmZzZXQ7ICAgICAgICAvKiBEZXZpY2UgdHJlZSBvZmZzZXQgKi8KKyAgICBfX3UzMiAgICAgICBkZXZpY2VUcmVlU2l6ZTsgICAgICAgICAgLyogU2l6ZSBvZiB0aGUgZGV2aWNlIHRyZWUgKi8KKworICAgIC8qIFNvbWUgaW5mb3MgYWJvdXQgdGhlIGN1cnJlbnQgTWFjT1MgZGlzcGxheSAqLworICAgIF9fdTMyICAgICAgIGRpc3BEZXZpY2VSZWN0WzRdOyAgICAgICAvKiBsZWZ0LHRvcCxyaWdodCxib3R0b20gKi8KKyAgICBfX3UzMiAgICAgICBkaXNwRGV2aWNlRGVwdGg7ICAgICAgICAgLyogKDgsIDE2IG9yIDMyKSAqLworICAgIF9fdTgqICAgICAgIGRpc3BEZXZpY2VCYXNlOyAgICAgICAgICAvKiBiYXNlIGFkZHJlc3MgKHBoeXNpY2FsKSAqLworICAgIF9fdTMyICAgICAgIGRpc3BEZXZpY2VSb3dCeXRlczsgICAgICAvKiByb3dieXRlcyAoaW4gYnl0ZXMpICovCisgICAgX191MzIgICAgICAgZGlzcERldmljZUNvbG9yc09mZnNldDsgIC8qIENvbG9ybWFwICg4IGJpdHMgb25seSkgb3IgMCAoKikgKi8KKyAgICAvKiBPcHRpb25hbCBvZmZzZXQgaW4gdGhlIHJlZ2lzdHJ5IHRvIHRoZSBjdXJyZW50CisgICAgICogTWFjT1MgZGlzcGxheS4gKENhbiBiZSAwIHdoZW4gbm90IGRldGVjdGVkKSAqLworICAgICBfX3UzMiAgICAgIGRpc3BEZXZpY2VSZWdFbnRyeU9mZnNldDsKKworICAgIC8qIE9wdGlvbmFsIHBvaW50ZXIgdG8gYm9vdCByYW1kaXNrIChvZmZzZXQgZnJvbSB0aGlzIHN0cnVjdHVyZSkgKi8KKyAgICBfX3UzMiAgICAgICByYW1EaXNrOworICAgIF9fdTMyICAgICAgIHJhbURpc2tTaXplOyAgICAgICAgICAgICAvKiBzaXplIG9mIHJhbWRpc2sgaW1hZ2UgKi8KKworICAgIC8qIEtlcm5lbCBjb21tYW5kIGxpbmUgYXJndW1lbnRzIChvZmZzZXQgZnJvbSB0aGlzIHN0cnVjdHVyZSkgKi8KKyAgICBfX3UzMiAgICAgICBrZXJuZWxQYXJhbXNPZmZzZXQ7CisKKyAgICAvKiBBTEwgQkVMT1cgTkVXICh2ZXJzLiA0KSAqLworCisgICAgLyogVGhpcyBkZWZpbmVzIHRoZSBwaHlzaWNhbCBtZW1vcnkuIFZhbGlkIHdpdGggQk9PVF9BUkNIX05VQlVTIGZsYWcKKyAgICAgICAobm9uLVBDSSkgb25seS4gT24gUENJLCBtZW1vcnkgaXMgY29udGlndW91cyBhbmQgaXQncyBzaXplIGlzIGluIHRoZQorICAgICAgIGRldmljZS10cmVlLiAqLworICAgIGJvb3RfaW5mb19tYXBfZW50cnlfdAorICAgIAkgICAgICAgIHBoeXNNZW1vcnlNYXBbTUFYX01FTV9NQVBfU0laRV07IC8qIFdoZXJlIHRoZSBwaHlzIG1lbW9yeSBpcyAqLworICAgIF9fdTMyICAgICAgIHBoeXNNZW1vcnlNYXBTaXplOyAgICAgICAgICAgICAgIC8qIEhvdyBtYW55IGVudHJpZXMgaW4gbWFwICovCisKKworICAgIC8qIFRoZSBmcmFtZWJ1ZmZlciBzaXplIChvcHRpb25hbCwgY3VycmVudGx5IDApICovCisgICAgX191MzIgICAgICAgZnJhbWVCdWZmZXJTaXplOyAgICAgICAgIC8qIFJlcHJlc2VudHMgYSBtYXggc2l6ZSwgY2FuIGJlIDAuICovCisKKyAgICAvKiBORVcgKHZlcnMuIDUpICovCisKKyAgICAvKiBUb3RhbCBwYXJhbXMgc2l6ZSAoYXJncyArIGNvbG9ybWFwICsgZGV2aWNlIHRyZWUgKyByYW1kaXNrKSAqLworICAgIF9fdTMyICAgICAgIHRvdGFsUGFyYW1zU2l6ZTsKKworfSBib290X2luZm9zX3Q7CisKKy8qICgqKSBUaGUgZm9ybWF0IG9mIHRoZSBjb2xvcm1hcCBpcyAyNTYgKiAzICogMiBieXRlcy4gRWFjaCBjb2xvciBpbmRleCBpcyByZXByZXNlbnRlZAorICogYnkgMyBzaG9ydCB3b3JkcyBjb250YWluaW5nIGEgMTYgYml0cyAodW5zaWduZWQpIGNvbG9yIGNvbXBvbmVudC4KKyAqIExhdGVyIHZlcnNpb25zIG1heSBjb250YWluIHRoZSBnYW1tYSB0YWJsZSBmb3IgZGlyZWN0LWNvbG9yIGRldmljZXMgaGVyZS4KKyAqLworI2RlZmluZSBCT09UWF9DT0xPUlRBQkxFX1NJWkUgICAgKDI1NlVMKjNVTCoyVUwpCisKKyNpZmRlZiBtYWNpbnRvc2gKKyNwcmFnbWEgb3B0aW9ucyBhbGlnbj1yZXNldAorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL2JzZWlwLmggYi9pbmNsdWRlL2FzbS1wcGMvYnNlaXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTFmNGE1MgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9ic2VpcC5oCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBBIGNvbGxlY3Rpb24gb2Ygc3RydWN0dXJlcywgYWRkcmVzc2VzLCBhbmQgdmFsdWVzIGFzc29jaWF0ZWQgd2l0aAorICogdGhlIEJyaWdodCBTdGFyIEVuZ2luZWVyaW5nIGlwLUVuZ2luZSBib2FyZC4gIENvcGllZCBmcm9tIHRoZSBNQlggc3R1ZmYuCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk4IERhbiBNYWxlayAoZG1hbGVrQGpsYy5uZXQpCisgKi8KKyNpZm5kZWYgX19NQUNIX0JTRUlQX0RFRlMKKyNkZWZpbmUgX19NQUNIX0JTRUlQX0RFRlMKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKy8qIEEgQm9hcmQgSW5mb3JtYXRpb24gc3RydWN0dXJlIHRoYXQgaXMgZ2l2ZW4gdG8gYSBwcm9ncmFtIHdoZW4KKyAqIHByb20gc3RhcnRzIGl0IHVwLgorICovCit0eXBlZGVmIHN0cnVjdCBiZF9pbmZvIHsKKwl1bnNpZ25lZCBpbnQJYmlfbWVtc3RhcnQ7CS8qIE1lbW9yeSBzdGFydCBhZGRyZXNzICovCisJdW5zaWduZWQgaW50CWJpX21lbXNpemU7CS8qIE1lbW9yeSAoZW5kKSBzaXplIGluIGJ5dGVzICovCisJdW5zaWduZWQgaW50CWJpX2ludGZyZXE7CS8qIEludGVybmFsIEZyZXEsIGluIEh6ICovCisJdW5zaWduZWQgaW50CWJpX2J1c2ZyZXE7CS8qIEJ1cyBGcmVxLCBpbiBIeiAqLworCXVuc2lnbmVkIGNoYXIJYmlfZW5ldGFkZHJbNl07CisJdW5zaWduZWQgaW50CWJpX2JhdWRyYXRlOworfSBiZF90OworCitleHRlcm4gYmRfdCBtOHh4X2JvYXJkX2luZm87CisKKy8qIE1lbW9yeSBtYXAgaXMgY29uZmlndXJlZCBieSB0aGUgUFJPTSBzdGFydHVwLgorICogQWxsIHdlIG5lZWQgdG8gZ2V0IHN0YXJ0ZWQgaXMgdGhlIElNTVIuCisgKi8KKyNkZWZpbmUgSU1BUF9BRERSCQkoKHVpbnQpMHhmZjAwMDAwMCkKKyNkZWZpbmUgSU1BUF9TSVpFCQkoKHVpbnQpKDY0ICogMTAyNCkpCisjZGVmaW5lIFBDTUNJQV9NRU1fQUREUgkJKCh1aW50KTB4MDQwMDAwMDApCisjZGVmaW5lIFBDTUNJQV9NRU1fU0laRQkJKCh1aW50KSg2NCAqIDEwMjQpKQorI2VuZGlmCS8qICFfX0FTU0VNQkxZX18gKi8KKworLyogV2UgZG9uJ3QgdXNlIHRoZSA4MjU5LgorKi8KKyNkZWZpbmUgTlJfODI1OV9JTlRTCTAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvYnRleHQuaCBiL2luY2x1ZGUvYXNtLXBwYy9idGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2Yzc2NDAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGMvYnRleHQuaApAQCAtMCwwICsxLDM0IEBACisvKgorICogRGVmaW5pdGlvbnMgZm9yIHVzaW5nIHRoZSBwcm9jZWR1cmVzIGluIGJ0ZXh0LmMuCisgKgorICogQmVuamFtaW4gSGVycmVuc2NobWlkdCA8YmVuaEBrZXJuZWwuY3Jhc2hpbmcub3JnPgorICovCisjaWZuZGVmIF9fUFBDX0JURVhUX0gKKyNkZWZpbmUgX19QUENfQlRFWFRfSAorI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGFzbS9ib290eC5oPgorCitleHRlcm4gdm9pZCBidGV4dF9jbGVhcnNjcmVlbih2b2lkKTsKK2V4dGVybiB2b2lkIGJ0ZXh0X2ZsdXNoc2NyZWVuKHZvaWQpOworCitleHRlcm4gdW5zaWduZWQgbG9uZyBkaXNwX0JBVFsyXTsKKworZXh0ZXJuIGJvb3RfaW5mb3NfdCBkaXNwX2JpOworZXh0ZXJuIGludCBib290X3RleHRfbWFwcGVkOworCit2b2lkIGJ0ZXh0X2luaXQoYm9vdF9pbmZvc190ICpiaSk7Cit2b2lkIGJ0ZXh0X3dlbGNvbWUodm9pZCk7Cit2b2lkIGJ0ZXh0X3ByZXBhcmVfQkFUKHZvaWQpOwordm9pZCBidGV4dF9zZXR1cF9kaXNwbGF5KGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IGRlcHRoLCBpbnQgcGl0Y2gsCisJCQkgdW5zaWduZWQgbG9uZyBhZGRyZXNzKTsKK3ZvaWQgbWFwX2Jvb3RfdGV4dCh2b2lkKTsKK3ZvaWQgYnRleHRfdXBkYXRlX2Rpc3BsYXkodW5zaWduZWQgbG9uZyBwaHlzLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCisJCQkgIGludCBkZXB0aCwgaW50IHBpdGNoKTsKKwordm9pZCBidGV4dF9kcmF3Y2hhcihjaGFyIGMpOwordm9pZCBidGV4dF9kcmF3c3RyaW5nKGNvbnN0IGNoYXIgKnN0cik7Cit2b2lkIGJ0ZXh0X2RyYXdoZXgodW5zaWduZWQgbG9uZyB2KTsKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAvKiBfX1BQQ19CVEVYVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvYnVnLmggYi9pbmNsdWRlL2FzbS1wcGMvYnVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk5YzZjYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9idWcuaApAQCAtMCwwICsxLDU1IEBACisjaWZuZGVmIF9QUENfQlVHX0gKKyNkZWZpbmUgX1BQQ19CVUdfSAorCitzdHJ1Y3QgYnVnX2VudHJ5IHsKKwl1bnNpZ25lZCBsb25nCWJ1Z19hZGRyOworCWludAkJbGluZTsKKwljb25zdCBjaGFyCSpmaWxlOworCWNvbnN0IGNoYXIJKmZ1bmN0aW9uOworfTsKKworLyoKKyAqIElmIHRoaXMgYml0IGlzIHNldCBpbiB0aGUgbGluZSBudW1iZXIgaXQgbWVhbnMgdGhhdCB0aGUgdHJhcAorICogaXMgZm9yIFdBUk5fT04gcmF0aGVyIHRoYW4gQlVHIG9yIEJVR19PTi4KKyAqLworI2RlZmluZSBCVUdfV0FSTklOR19UUkFQCTB4MTAwMDAwMAorCisjZGVmaW5lIEJVRygpIGRvIHsJCQkJCQkJIFwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQkgXAorCQkiMToJdHdpIDMxLDAsMFxuIgkJCQkJIFwKKwkJIi5zZWN0aW9uIF9fYnVnX3RhYmxlLFwiYVwiXG5cdCIJCQkgXAorCQkiCS5sb25nIDFiLCUwLCUxLCUyXG4iCQkJCSBcCisJCSIucHJldmlvdXMiCQkJCQkJIFwKKwkJOiA6ICJpIiAoX19MSU5FX18pLCAiaSIgKF9fRklMRV9fKSwgImkiIChfX0ZVTkNUSU9OX18pKTsgXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBCVUdfT04oeCkgZG8gewkJCQkJCQlcCisJaWYgKCFfX2J1aWx0aW5fY29uc3RhbnRfcCh4KSB8fCAoeCkpIHsJCQkJXAorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCVwKKwkJCSIxOgl0d25laSAlMCwwXG4iCQkJCVwKKwkJCSIuc2VjdGlvbiBfX2J1Z190YWJsZSxcImFcIlxuXHQiCQlcCisJCQkiCS5sb25nIDFiLCUxLCUyLCUzXG4iCQkJXAorCQkJIi5wcmV2aW91cyIJCQkJCVwKKwkJCTogOiAiciIgKHgpLCAiaSIgKF9fTElORV9fKSwgImkiIChfX0ZJTEVfXyksCVwKKwkJCSAgICAiaSIgKF9fRlVOQ1RJT05fXykpOwkJCVwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIFdBUk5fT04oeCkgZG8gewkJCQkJCQlcCisJaWYgKCFfX2J1aWx0aW5fY29uc3RhbnRfcCh4KSB8fCAoeCkpIHsJCQkJXAorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCVwKKwkJCSIxOgl0d25laSAlMCwwXG4iCQkJCVwKKwkJCSIuc2VjdGlvbiBfX2J1Z190YWJsZSxcImFcIlxuXHQiCQlcCisJCQkiCS5sb25nIDFiLCUxLCUyLCUzXG4iCQkJXAorCQkJIi5wcmV2aW91cyIJCQkJCVwKKwkJCTogOiAiciIgKHgpLCAiaSIgKF9fTElORV9fICsgQlVHX1dBUk5JTkdfVFJBUCksCVwKKwkJCSAgICAiaSIgKF9fRklMRV9fKSwgImkiIChfX0ZVTkNUSU9OX18pKTsJXAorCX0JCQkJCQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgSEFWRV9BUkNIX0JVRworI2RlZmluZSBIQVZFX0FSQ0hfQlVHX09OCisjZGVmaW5lIEhBVkVfQVJDSF9XQVJOX09OCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYnVnLmg+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL2J1Z3MuaCBiL2luY2x1ZGUvYXNtLXBwYy9idWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRjZTFlMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9idWdzLmgKQEAgLTAsMCArMSw2IEBACisvKgorICogVGhpcyBmaWxlIGlzIGluY2x1ZGVkIGJ5ICdpbml0L21haW4uYycKKyAqLworCitleHRlcm4gdm9pZAorY2hlY2tfYnVncyh2b2lkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9ieXRlb3JkZXIuaCBiL2luY2x1ZGUvYXNtLXBwYy9ieXRlb3JkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjNjODFlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjL2J5dGVvcmRlci5oCkBAIC0wLDAgKzEsNzYgQEAKKyNpZm5kZWYgX1BQQ19CWVRFT1JERVJfSAorI2RlZmluZSBfUFBDX0JZVEVPUkRFUl9ICisKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorCisjaWZkZWYgX19HTlVDX18KKyNpZmRlZiBfX0tFUk5FTF9fCisKK2V4dGVybiBfX2lubGluZV9fIHVuc2lnbmVkIGxkX2xlMTYoY29uc3Qgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKmFkZHIpCit7CisJdW5zaWduZWQgdmFsOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJsaGJyeCAlMCwwLCUxIiA6ICI9ciIgKHZhbCkgOiAiciIgKGFkZHIpLCAibSIgKCphZGRyKSk7CisJcmV0dXJuIHZhbDsKK30KKworZXh0ZXJuIF9faW5saW5lX18gdm9pZCBzdF9sZTE2KHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICphZGRyLCBjb25zdCB1bnNpZ25lZCB2YWwpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzdGhicnggJTEsMCwlMiIgOiAiPW0iICgqYWRkcikgOiAiciIgKHZhbCksICJyIiAoYWRkcikpOworfQorCitleHRlcm4gX19pbmxpbmVfXyB1bnNpZ25lZCBsZF9sZTMyKGNvbnN0IHZvbGF0aWxlIHVuc2lnbmVkICphZGRyKQoreworCXVuc2lnbmVkIHZhbDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fICgibHdicnggJTAsMCwlMSIgOiAiPXIiICh2YWwpIDogInIiIChhZGRyKSwgIm0iICgqYWRkcikpOworCXJldHVybiB2YWw7Cit9CisKK2V4dGVybiBfX2lubGluZV9fIHZvaWQgc3RfbGUzMih2b2xhdGlsZSB1bnNpZ25lZCAqYWRkciwgY29uc3QgdW5zaWduZWQgdmFsKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fICgic3R3YnJ4ICUxLDAsJTIiIDogIj1tIiAoKmFkZHIpIDogInIiICh2YWwpLCAiciIgKGFkZHIpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19hdHRyaWJ1dGVfY29uc3RfXyBfX3UxNiBfX19hcmNoX19zd2FiMTYoX191MTYgdmFsdWUpCit7CisJX191MTYgcmVzdWx0OworCisJX19hc21fXygicmx3aW1pICUwLCUyLDgsMTYsMjMiIDogIj0mciIgKHJlc3VsdCkgOiAiMCIgKHZhbHVlID4+IDgpLCAiciIgKHZhbHVlKSk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIF9faW5saW5lX18gX19hdHRyaWJ1dGVfY29uc3RfXyBfX3UzMiBfX19hcmNoX19zd2FiMzIoX191MzIgdmFsdWUpCit7CisJX191MzIgcmVzdWx0OworCisJX19hc21fXygicmx3aW1pICUwLCUyLDI0LDE2LDIzIiA6ICI9JnIiIChyZXN1bHQpIDogIjAiICh2YWx1ZT4+MjQpLCAiciIgKHZhbHVlKSk7CisJX19hc21fXygicmx3aW1pICUwLCUyLDgsOCwxNSIgICA6ICI9JnIiIChyZXN1bHQpIDogIjAiIChyZXN1bHQpLCAgICAiciIgKHZhbHVlKSk7CisJX19hc21fXygicmx3aW1pICUwLCUyLDI0LDAsNyIgICA6ICI9JnIiIChyZXN1bHQpIDogIjAiIChyZXN1bHQpLCAgICAiciIgKHZhbHVlKSk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorI2RlZmluZSBfX2FyY2hfX3N3YWIzMih4KSBfX19hcmNoX19zd2FiMzIoeCkKKyNkZWZpbmUgX19hcmNoX19zd2FiMTYoeCkgX19fYXJjaF9fc3dhYjE2KHgpCisKKy8qIFRoZSBzYW1lLCBidXQgcmV0dXJucyBjb252ZXJ0ZWQgdmFsdWUgZnJvbSB0aGUgbG9jYXRpb24gcG9pbnRlciBieSBhZGRyLiAqLworI2RlZmluZSBfX2FyY2hfX3N3YWIxNnAoYWRkcikgbGRfbGUxNihhZGRyKQorI2RlZmluZSBfX2FyY2hfX3N3YWIzMnAoYWRkcikgbGRfbGUzMihhZGRyKQorCisvKiBUaGUgc2FtZSwgYnV0IGRvIHRoZSBjb252ZXJzaW9uIGluIHNpdHUsIGllLiBwdXQgdGhlIHZhbHVlIGJhY2sgdG8gYWRkci4gKi8KKyNkZWZpbmUgX19hcmNoX19zd2FiMTZzKGFkZHIpIHN0X2xlMTYoYWRkciwqYWRkcikKKyNkZWZpbmUgX19hcmNoX19zd2FiMzJzKGFkZHIpIHN0X2xlMzIoYWRkciwqYWRkcikKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2lmICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykgfHwgZGVmaW5lZChfX0tFUk5FTF9fKQorIyAgZGVmaW5lIF9fQllURU9SREVSX0hBU19VNjRfXworIyAgZGVmaW5lIF9fU1dBQl82NF9USFJVXzMyX18KKyNlbmRpZgorCisjZW5kaWYgLyogX19HTlVDX18gKi8KKworI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9iaWdfZW5kaWFuLmg+CisKKyNlbmRpZiAvKiBfUFBDX0JZVEVPUkRFUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvY2FjaGUuaCBiL2luY2x1ZGUvYXNtLXBwYy9jYWNoZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4ZjJmMWIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGMvY2FjaGUuaApAQCAtMCwwICsxLDg3IEBACisvKgorICogaW5jbHVkZS9hc20tcHBjL2NhY2hlLmgKKyAqLworI2lmZGVmIF9fS0VSTkVMX18KKyNpZm5kZWYgX19BUkNIX1BQQ19DQUNIRV9ICisjZGVmaW5lIF9fQVJDSF9QUENfQ0FDSEVfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKy8qIGJ5dGVzIHBlciBMMSBjYWNoZSBsaW5lICovCisjaWYgZGVmaW5lZChDT05GSUdfOHh4KSB8fCBkZWZpbmVkKENPTkZJR180MDNHQ1gpCisjZGVmaW5lCUwxX0NBQ0hFX0xJTkVfU0laRQkxNgorI2RlZmluZSBMR19MMV9DQUNIRV9MSU5FX1NJWkUJNAorI2RlZmluZSBNQVhfQ09QWV9QUkVGRVRDSAkxCisjZWxpZiBkZWZpbmVkKENPTkZJR19QUEM2NEJSSURHRSkKKyNkZWZpbmUgTDFfQ0FDSEVfTElORV9TSVpFCTEyOAorI2RlZmluZSBMR19MMV9DQUNIRV9MSU5FX1NJWkUJNworI2RlZmluZSBNQVhfQ09QWV9QUkVGRVRDSAkxCisjZWxzZQorI2RlZmluZQlMMV9DQUNIRV9MSU5FX1NJWkUJMzIKKyNkZWZpbmUgTEdfTDFfQ0FDSEVfTElORV9TSVpFCTUKKyNkZWZpbmUgTUFYX0NPUFlfUFJFRkVUQ0gJNAorI2VuZGlmCisKKyNkZWZpbmUJTDFfQ0FDSEVfQllURVMgTDFfQ0FDSEVfTElORV9TSVpFCisjZGVmaW5lIEwxX0NBQ0hFX1NISUZUIExHX0wxX0NBQ0hFX0xJTkVfU0laRQorI2RlZmluZQlTTVBfQ0FDSEVfQllURVMgTDFfQ0FDSEVfQllURVMKKyNkZWZpbmUgTDFfQ0FDSEVfU0hJRlRfTUFYIDcJLyogbGFyZ2VzdCBMMSB3aGljaCB0aGlzIGFyY2ggc3VwcG9ydHMgKi8KKworI2RlZmluZQlMMV9DQUNIRV9BTElHTih4KSAgICAgICAoKCh4KSsoTDFfQ0FDSEVfQllURVMtMSkpJn4oTDFfQ0FDSEVfQllURVMtMSkpCisjZGVmaW5lCUwxX0NBQ0hFX1BBR0VTCQk4CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitleHRlcm4gdm9pZCBjbGVhbl9kY2FjaGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBzdG9wKTsKK2V4dGVybiB2b2lkIGZsdXNoX2RjYWNoZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHN0b3ApOworZXh0ZXJuIHZvaWQgaW52YWxpZGF0ZV9kY2FjaGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBzdG9wKTsKK2V4dGVybiB2b2lkIGZsdXNoX2RjYWNoZV9hbGwodm9pZCk7CisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKy8qIHByZXAgcmVnaXN0ZXJzIGZvciBMMiAqLworI2RlZmluZSBDQUNIRUNSQkEgICAgICAgMHg4MDAwMDgyMyAgICAgIC8qIENhY2hlIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgYWRkcmVzcyAqLworI2RlZmluZSBMMkNBQ0hFX01BU0sJMHgwMwkvKiBNYXNrIGZvciAyIEwyIENhY2hlIGJpdHMgKi8KKyNkZWZpbmUgTDJDQUNIRV81MTJLQgkweDAwCS8qIDUxMktCICovCisjZGVmaW5lIEwyQ0FDSEVfMjU2S0IJMHgwMQkvKiAyNTZLQiAqLworI2RlZmluZSBMMkNBQ0hFXzFNQgkweDAyCS8qIDFNQiAqLworI2RlZmluZSBMMkNBQ0hFX05PTkUJMHgwMwkvKiBOT05FICovCisjZGVmaW5lIEwyQ0FDSEVfUEFSSVRZICAweDA4ICAgIC8qIE1hc2sgZm9yIEwyIENhY2hlIFBhcml0eSBQcm90ZWN0ZWQgYml0ICovCisKKyNpZmRlZiBDT05GSUdfOHh4CisvKiBDYWNoZSBjb250cm9sIG9uIHRoZSBNUEM4eHggaXMgcHJvdmlkZWQgdGhyb3VnaCBzb21lIGFkZGl0aW9uYWwKKyAqIHNwZWNpYWwgcHVycG9zZSByZWdpc3RlcnMuCisgKi8KKyNkZWZpbmUgU1BSTl9JQ19DU1QJNTYwCS8qIEluc3RydWN0aW9uIGNhY2hlIGNvbnRyb2wvc3RhdHVzICovCisjZGVmaW5lIFNQUk5fSUNfQURSCTU2MQkvKiBBZGRyZXNzIG5lZWRlZCBmb3Igc29tZSBjb21tYW5kcyAqLworI2RlZmluZSBTUFJOX0lDX0RBVAk1NjIJLyogUmVhZC1vbmx5IGRhdGEgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BSTl9EQ19DU1QJNTY4CS8qIERhdGEgY2FjaGUgY29udHJvbC9zdGF0dXMgKi8KKyNkZWZpbmUgU1BSTl9EQ19BRFIJNTY5CS8qIEFkZHJlc3MgbmVlZGVkIGZvciBzb21lIGNvbW1hbmRzICovCisjZGVmaW5lIFNQUk5fRENfREFUCTU3MAkvKiBSZWFkLW9ubHkgZGF0YSByZWdpc3RlciAqLworCisvKiBDb21tYW5kcy4gIE9ubHkgdGhlIGZpcnN0IGZldyBhcmUgYXZhaWxhYmxlIHRvIHRoZSBpbnN0cnVjdGlvbiBjYWNoZS4KKyovCisjZGVmaW5lCUlEQ19FTkFCTEUJMHgwMjAwMDAwMAkvKiBDYWNoZSBlbmFibGUgKi8KKyNkZWZpbmUgSURDX0RJU0FCTEUJMHgwNDAwMDAwMAkvKiBDYWNoZSBkaXNhYmxlICovCisjZGVmaW5lIElEQ19MRExDSwkweDA2MDAwMDAwCS8qIExvYWQgYW5kIGxvY2sgKi8KKyNkZWZpbmUgSURDX1VOTElORQkweDA4MDAwMDAwCS8qIFVubG9jayBsaW5lICovCisjZGVmaW5lIElEQ19VTkFMTAkweDBhMDAwMDAwCS8qIFVubG9jayBhbGwgKi8KKyNkZWZpbmUgSURDX0lOVkFMTAkweDBjMDAwMDAwCS8qIEludmFsaWRhdGUgYWxsICovCisKKyNkZWZpbmUgRENfRkxJTkUJMHgwZTAwMDAwMAkvKiBGbHVzaCBkYXRhIGNhY2hlIGxpbmUgKi8KKyNkZWZpbmUgRENfU0ZXVAkJMHgwMTAwMDAwMAkvKiBTZXQgZm9yY2VkIHdyaXRldGhyb3VnaCBtb2RlICovCisjZGVmaW5lIERDX0NGV1QJCTB4MDMwMDAwMDAJLyogQ2xlYXIgZm9yY2VkIHdyaXRldGhyb3VnaCBtb2RlICovCisjZGVmaW5lIERDX1NMRVMJCTB4MDUwMDAwMDAJLyogU2V0IGxpdHRsZSBlbmRpYW4gc3dhcCBtb2RlICovCisjZGVmaW5lIERDX0NMRVMJCTB4MDcwMDAwMDAJLyogQ2xlYXIgbGl0dGxlIGVuZGlhbiBzd2FwIG1vZGUgKi8KKworLyogU3RhdHVzLgorKi8KKyNkZWZpbmUgSURDX0VOQUJMRUQJMHg4MDAwMDAwMAkvKiBDYWNoZSBpcyBlbmFibGVkICovCisjZGVmaW5lIElEQ19DRVJSMQkweDAwMjAwMDAwCS8qIENhY2hlIGVycm9yIDEgKi8KKyNkZWZpbmUgSURDX0NFUlIyCTB4MDAxMDAwMDAJLyogQ2FjaGUgZXJyb3IgMiAqLworI2RlZmluZSBJRENfQ0VSUjMJMHgwMDA4MDAwMAkvKiBDYWNoZSBlcnJvciAzICovCisKKyNkZWZpbmUgRENfREZXVAkJMHg0MDAwMDAwMAkvKiBEYXRhIGNhY2hlIGlzIGZvcmNlZCB3cml0ZSB0aHJvdWdoICovCisjZGVmaW5lIERDX0xFUwkJMHgyMDAwMDAwMAkvKiBDYWNoZXMgYXJlIGxpdHRsZSBlbmRpYW4gbW9kZSAqLworI2VuZGlmIC8qIENPTkZJR184eHggKi8KKworI2VuZGlmCisjZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL2NhY2hlZmx1c2guaCBiL2luY2x1ZGUvYXNtLXBwYy9jYWNoZWZsdXNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmEyNDNlZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9jYWNoZWZsdXNoLmgKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLXBwYy9jYWNoZWZsdXNoLmgKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2lmZGVmIF9fS0VSTkVMX18KKyNpZm5kZWYgX1BQQ19DQUNIRUZMVVNIX0gKKyNkZWZpbmUgX1BQQ19DQUNIRUZMVVNIX0gKKworI2luY2x1ZGUgPGxpbnV4L21tLmg+CisKKy8qCisgKiBObyBjYWNoZSBmbHVzaGluZyBpcyByZXF1aXJlZCB3aGVuIGFkZHJlc3MgbWFwcGluZ3MgYXJlCisgKiBjaGFuZ2VkLCBiZWNhdXNlIHRoZSBjYWNoZXMgb24gUG93ZXJQQ3MgYXJlIHBoeXNpY2FsbHkKKyAqIGFkZHJlc3NlZC4gIC0tIHBhdWx1cworICogQWxzbywgd2hlbiBTTVAgd2UgdXNlIHRoZSBjb2hlcmVuY3kgKE0pIGJpdCBvZiB0aGUKKyAqIEJBVHMgYW5kIFBURXMuICAtLSBDb3J0CisgKi8KKyNkZWZpbmUgZmx1c2hfY2FjaGVfYWxsKCkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfbW0obW0pCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2NhY2hlX3JhbmdlKHZtYSwgYSwgYikJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9jYWNoZV9wYWdlKHZtYSwgcCwgcGZuKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2ljYWNoZV9wYWdlKHZtYSwgcGFnZSkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9jYWNoZV92bWFwKHN0YXJ0LCBlbmQpCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfdnVubWFwKHN0YXJ0LCBlbmQpCWRvIHsgfSB3aGlsZSAoMCkKKworZXh0ZXJuIHZvaWQgZmx1c2hfZGNhY2hlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpOworI2RlZmluZSBmbHVzaF9kY2FjaGVfbW1hcF9sb2NrKG1hcHBpbmcpCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2RjYWNoZV9tbWFwX3VubG9jayhtYXBwaW5nKQlkbyB7IH0gd2hpbGUgKDApCisKK2V4dGVybiB2b2lkIGZsdXNoX2ljYWNoZV9yYW5nZSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKK2V4dGVybiB2b2lkIGZsdXNoX2ljYWNoZV91c2VyX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQlzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbGVuKTsKKworI2RlZmluZSBjb3B5X3RvX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIHZhZGRyLCBkc3QsIHNyYywgbGVuKSBcCitkbyB7IG1lbWNweShkc3QsIHNyYywgbGVuKTsgXAorICAgICBmbHVzaF9pY2FjaGVfdXNlcl9yYW5nZSh2bWEsIHBhZ2UsIHZhZGRyLCBsZW4pOyBcCit9IHdoaWxlICgwKQorI2RlZmluZSBjb3B5X2Zyb21fdXNlcl9wYWdlKHZtYSwgcGFnZSwgdmFkZHIsIGRzdCwgc3JjLCBsZW4pIFwKKwltZW1jcHkoZHN0LCBzcmMsIGxlbikKKworZXh0ZXJuIHZvaWQgX19mbHVzaF9kY2FjaGVfaWNhY2hlKHZvaWQgKnBhZ2VfdmEpOworZXh0ZXJuIHZvaWQgX19mbHVzaF9kY2FjaGVfaWNhY2hlX3BoeXModW5zaWduZWQgbG9uZyBwaHlzYWRkcik7CitleHRlcm4gdm9pZCBmbHVzaF9kY2FjaGVfaWNhY2hlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpOworI2VuZGlmIC8qIF9QUENfQ0FDSEVGTFVTSF9IICovCisjZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL2NoZWNrc3VtLmggYi9pbmNsdWRlL2FzbS1wcGMvY2hlY2tzdW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjk1M2E5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjL2NoZWNrc3VtLmgKQEAgLTAsMCArMSwxMDcgQEAKKyNpZmRlZiBfX0tFUk5FTF9fCisjaWZuZGVmIF9QUENfQ0hFQ0tTVU1fSAorI2RlZmluZSBfUFBDX0NIRUNLU1VNX0gKKworCisvKgorICogY29tcHV0ZXMgdGhlIGNoZWNrc3VtIG9mIGEgbWVtb3J5IGJsb2NrIGF0IGJ1ZmYsIGxlbmd0aCBsZW4sCisgKiBhbmQgYWRkcyBpbiAic3VtIiAoMzItYml0KQorICoKKyAqIHJldHVybnMgYSAzMi1iaXQgbnVtYmVyIHN1aXRhYmxlIGZvciBmZWVkaW5nIGludG8gaXRzZWxmCisgKiBvciBjc3VtX3RjcHVkcF9tYWdpYworICoKKyAqIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aCBldmVuIGxlbmd0aHMsIGV4Y2VwdAorICogZm9yIHRoZSBsYXN0IGZyYWdtZW50LCB3aGljaCBtYXkgYmUgb2RkCisgKgorICogaXQncyBiZXN0IHRvIGhhdmUgYnVmZiBhbGlnbmVkIG9uIGEgMzItYml0IGJvdW5kYXJ5CisgKi8KK2V4dGVybiB1bnNpZ25lZCBpbnQgY3N1bV9wYXJ0aWFsKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiBidWZmLCBpbnQgbGVuLAorCQkJCSB1bnNpZ25lZCBpbnQgc3VtKTsKKworLyoKKyAqIENvbXB1dGVzIHRoZSBjaGVja3N1bSBvZiBhIG1lbW9yeSBibG9jayBhdCBzcmMsIGxlbmd0aCBsZW4sCisgKiBhbmQgYWRkcyBpbiAic3VtIiAoMzItYml0KSwgd2hpbGUgY29weWluZyB0aGUgYmxvY2sgdG8gZHN0LgorICogSWYgYW4gYWNjZXNzIGV4Y2VwdGlvbiBvY2N1cnMgb24gc3JjIG9yIGRzdCwgaXQgc3RvcmVzIC1FRkFVTFQKKyAqIHRvICpzcmNfZXJyIG9yICpkc3RfZXJyIHJlc3BlY3RpdmVseSAoaWYgdGhhdCBwb2ludGVyIGlzIG5vdAorICogTlVMTCksIGFuZCwgZm9yIGFuIGVycm9yIG9uIHNyYywgemVyb2VzIHRoZSByZXN0IG9mIGRzdC4KKyAqCisgKiBMaWtlIGNzdW1fcGFydGlhbCwgdGhpcyBtdXN0IGJlIGNhbGxlZCB3aXRoIGV2ZW4gbGVuZ3RocywKKyAqIGV4Y2VwdCBmb3IgdGhlIGxhc3QgZnJhZ21lbnQuCisgKi8KK2V4dGVybiB1bnNpZ25lZCBpbnQgY3N1bV9wYXJ0aWFsX2NvcHlfZ2VuZXJpYyhjb25zdCBjaGFyICpzcmMsIGNoYXIgKmRzdCwKKwkJCQkJICAgICAgaW50IGxlbiwgdW5zaWduZWQgaW50IHN1bSwKKwkJCQkJICAgICAgaW50ICpzcmNfZXJyLCBpbnQgKmRzdF9lcnIpOworCisjZGVmaW5lIGNzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlcihzcmMsIGRzdCwgbGVuLCBzdW0sIGVycnApCVwKKwljc3VtX3BhcnRpYWxfY29weV9nZW5lcmljKChfX2ZvcmNlIHZvaWQgKikoc3JjKSwgKGRzdCksIChsZW4pLCAoc3VtKSwgKGVycnApLCBOVUxMKQorCisvKiBGSVhNRTogdGhpcyBuZWVkcyB0byBiZSB3cml0dGVuIHRvIHJlYWxseSBkbyBubyBjaGVjayAtLSBDb3J0ICovCisjZGVmaW5lIGNzdW1fcGFydGlhbF9jb3B5X25vY2hlY2soc3JjLCBkc3QsIGxlbiwgc3VtKQlcCisJY3N1bV9wYXJ0aWFsX2NvcHlfZ2VuZXJpYygoc3JjKSwgKGRzdCksIChsZW4pLCAoc3VtKSwgTlVMTCwgTlVMTCkKKworLyoKKyAqIHR1cm5zIGEgMzItYml0IHBhcnRpYWwgY2hlY2tzdW0gKGUuZy4gZnJvbSBjc3VtX3BhcnRpYWwpIGludG8gYQorICogMSdzIGNvbXBsZW1lbnQgMTYtYml0IGNoZWNrc3VtLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjc3VtX2ZvbGQodW5zaWduZWQgaW50IHN1bSkKK3sKKwl1bnNpZ25lZCBpbnQgdG1wOworCisJLyogc3dhcCB0aGUgdHdvIDE2LWJpdCBoYWx2ZXMgb2Ygc3VtICovCisJX19hc21fXygicmx3aW5tICUwLCUxLDE2LDAsMzEiIDogIj1yIiAodG1wKSA6ICJyIiAoc3VtKSk7CisJLyogaWYgdGhlcmUgaXMgYSBjYXJyeSBmcm9tIGFkZGluZyB0aGUgdHdvIDE2LWJpdCBoYWx2ZXMsCisJICAgaXQgd2lsbCBjYXJyeSBmcm9tIHRoZSBsb3dlciBoYWxmIGludG8gdGhlIHVwcGVyIGhhbGYsCisJICAgZ2l2aW5nIHVzIHRoZSBjb3JyZWN0IHN1bSBpbiB0aGUgdXBwZXIgaGFsZi4gKi8KKwlzdW0gPSB+KHN1bSArIHRtcCkgPj4gMTY7CisJcmV0dXJuIHN1bTsKK30KKworLyoKKyAqIHRoaXMgcm91dGluZSBpcyB1c2VkIGZvciBtaXNjZWxsYW5lb3VzIElQLWxpa2UgY2hlY2tzdW1zLCBtYWlubHkKKyAqIGluIGljbXAuYworICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IGlwX2NvbXB1dGVfY3N1bSh1bnNpZ25lZCBjaGFyICogYnVmZiwgaW50IGxlbikKK3sKKwlyZXR1cm4gY3N1bV9mb2xkKGNzdW1fcGFydGlhbChidWZmLCBsZW4sIDApKTsKK30KKworLyoKKyAqIEZJWE1FOiBJIHN3aXBlZCB0aGlzIG9uZSBmcm9tIHRoZSBzcGFyYyBhbmQgbWFkZSBtaW5vciBtb2RpZmljYXRpb25zLgorICogSXQgbWF5IG5vdCBiZSBjb3JyZWN0LiAgLS0gQ29ydAorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY3N1bV90Y3B1ZHBfbm9mb2xkKHVuc2lnbmVkIGxvbmcgc2FkZHIsCisJCQkJCQkgICB1bnNpZ25lZCBsb25nIGRhZGRyLAorCQkJCQkJICAgdW5zaWduZWQgc2hvcnQgbGVuLAorCQkJCQkJICAgdW5zaWduZWQgc2hvcnQgcHJvdG8sCisJCQkJCQkgICB1bnNpZ25lZCBpbnQgc3VtKQoreworICAgIF9fYXNtX18oIlxuXAorCWFkZGMgJTAsJTAsJTEgXG5cCisJYWRkZSAlMCwlMCwlMiBcblwKKwlhZGRlICUwLCUwLCUzIFxuXAorCWFkZHplICUwLCUwIFxuXAorCSIKKwk6ICI9ciIgKHN1bSkKKwk6ICJyIiAoZGFkZHIpLCAiciIoc2FkZHIpLCAiciIoKHByb3RvPDwxNikrbGVuKSwgIjAiKHN1bSkpOworICAgIHJldHVybiBzdW07Cit9CisKKy8qCisgKiBUaGlzIGlzIGEgdmVyc2lvbiBvZiBpcF9jb21wdXRlX2NzdW0oKSBvcHRpbWl6ZWQgZm9yIElQIGhlYWRlcnMsCisgKiB3aGljaCBhbHdheXMgY2hlY2tzdW0gb24gNCBvY3RldCBib3VuZGFyaWVzLiAgaWhsIGlzIHRoZSBudW1iZXIKKyAqIG9mIDMyLWJpdCB3b3JkcyBhbmQgaXMgYWx3YXlzID49IDUuCisgKi8KK2V4dGVybiB1bnNpZ25lZCBzaG9ydCBpcF9mYXN0X2NzdW0odW5zaWduZWQgY2hhciAqIGlwaCwgdW5zaWduZWQgaW50IGlobCk7CisKKy8qCisgKiBjb21wdXRlcyB0aGUgY2hlY2tzdW0gb2YgdGhlIFRDUC9VRFAgcHNldWRvLWhlYWRlcgorICogcmV0dXJucyBhIDE2LWJpdCBjaGVja3N1bSwgYWxyZWFkeSBjb21wbGVtZW50ZWQKKyAqLworZXh0ZXJuIHVuc2lnbmVkIHNob3J0IGNzdW1fdGNwdWRwX21hZ2ljKHVuc2lnbmVkIGxvbmcgc2FkZHIsCisJCQkJCXVuc2lnbmVkIGxvbmcgZGFkZHIsCisJCQkJCXVuc2lnbmVkIHNob3J0IGxlbiwKKwkJCQkJdW5zaWduZWQgc2hvcnQgcHJvdG8sCisJCQkJCXVuc2lnbmVkIGludCBzdW0pOworCisjZW5kaWYKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvY29tbXByb2MuaCBiL2luY2x1ZGUvYXNtLXBwYy9jb21tcHJvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViYmI4ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGMvY29tbXByb2MuaApAQCAtMCwwICsxLDY5NSBAQAorLyoKKyAqIE1QQzh4eCBDb21tdW5pY2F0aW9uIFByb2Nlc3NvciBNb2R1bGUuCisgKiBDb3B5cmlnaHQgKGMpIDE5OTcgRGFuIE1hbGVrIChkbWFsZWtAamxjLm5ldCkKKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgc3RydWN0dXJlcyBhbmQgaW5mb3JtYXRpb24gZm9yIHRoZSBjb21tdW5pY2F0aW9uCisgKiBwcm9jZXNzb3IgY2hhbm5lbHMuICBTb21lIENQTSBjb250cm9sIGFuZCBzdGF0dXMgaXMgYXZhaWxhYmxlCisgKiB0aHJvdWdodCB0aGUgTVBDOHh4IGludGVybmFsIG1lbW9yeSBtYXAuICBTZWUgaW1tYXAuaCBmb3IgZGV0YWlscy4KKyAqIFRoaXMgZmlsZSBvbmx5IGNvbnRhaW5zIHdoYXQgSSBuZWVkIGZvciB0aGUgbW9tZW50LCBub3QgdGhlIHRvdGFsCisgKiBDUE0gY2FwYWJpbGl0aWVzLiAgSSAob3Igc29tZW9uZSBlbHNlKSB3aWxsIGFkZCBkZWZpbml0aW9ucyBhcyB0aGV5CisgKiBhcmUgbmVlZGVkLiAgLS0gRGFuCisgKgorICogT24gdGhlIE1CWCBib2FyZCwgRVBQQy1CdWcgbG9hZHMgQ1BNIG1pY3JvY29kZSBpbnRvIHRoZSBmaXJzdCA1MTIKKyAqIGJ5dGVzIG9mIHRoZSBEUCBSQU0gYW5kIHJlbG9jYXRlcyB0aGUgSTJDIHBhcmFtZXRlciBhcmVhIHRvIHRoZQorICogSURNQTEgc3BhY2UuICBUaGUgcmVtYWluaW5nIERQIFJBTSBpcyBhdmFpbGFibGUgZm9yIGJ1ZmZlciBkZXNjcmlwdG9ycworICogb3Igb3RoZXIgdXNlLgorICovCisjaWZuZGVmIF9fQ1BNXzhYWF9fCisjZGVmaW5lIF9fQ1BNXzhYWF9fCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxhc20vOHh4X2ltbWFwLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorCisvKiBDUE0gQ29tbWFuZCByZWdpc3Rlci4KKyovCisjZGVmaW5lIENQTV9DUl9SU1QJKCh1c2hvcnQpMHg4MDAwKQorI2RlZmluZSBDUE1fQ1JfT1BDT0RFCSgodXNob3J0KTB4MGYwMCkKKyNkZWZpbmUgQ1BNX0NSX0NIQU4JKCh1c2hvcnQpMHgwMGYwKQorI2RlZmluZSBDUE1fQ1JfRkxHCSgodXNob3J0KTB4MDAwMSkKKworLyogU29tZSBjb21tYW5kcyAodGhlcmUgYXJlIG1vcmUuLi5sYXRlcikKKyovCisjZGVmaW5lIENQTV9DUl9JTklUX1RSWAkJKCh1c2hvcnQpMHgwMDAwKQorI2RlZmluZSBDUE1fQ1JfSU5JVF9SWAkJKCh1c2hvcnQpMHgwMDAxKQorI2RlZmluZSBDUE1fQ1JfSU5JVF9UWAkJKCh1c2hvcnQpMHgwMDAyKQorI2RlZmluZSBDUE1fQ1JfSFVOVF9NT0RFCSgodXNob3J0KTB4MDAwMykKKyNkZWZpbmUgQ1BNX0NSX1NUT1BfVFgJCSgodXNob3J0KTB4MDAwNCkKKyNkZWZpbmUgQ1BNX0NSX1JFU1RBUlRfVFgJKCh1c2hvcnQpMHgwMDA2KQorI2RlZmluZSBDUE1fQ1JfQ0xPU0VfUlhfQkQJKCh1c2hvcnQpMHgwMDA3KQorI2RlZmluZSBDUE1fQ1JfU0VUX0dBRERSCSgodXNob3J0KTB4MDAwOCkKKyNkZWZpbmUgQ1BNX0NSX1NFVF9USU1FUglDUE1fQ1JfU0VUX0dBRERSCisKKy8qIENoYW5uZWwgbnVtYmVycy4KKyovCisjZGVmaW5lIENQTV9DUl9DSF9TQ0MxCQkoKHVzaG9ydCkweDAwMDApCisjZGVmaW5lIENQTV9DUl9DSF9JMkMJCSgodXNob3J0KTB4MDAwMSkJLyogSTJDIGFuZCBJRE1BMSAqLworI2RlZmluZSBDUE1fQ1JfQ0hfU0NDMgkJKCh1c2hvcnQpMHgwMDA0KQorI2RlZmluZSBDUE1fQ1JfQ0hfU1BJCQkoKHVzaG9ydCkweDAwMDUpCS8qIFNQSSAvIElETUEyIC8gVGltZXJzICovCisjZGVmaW5lIENQTV9DUl9DSF9USU1FUgkJQ1BNX0NSX0NIX1NQSQorI2RlZmluZSBDUE1fQ1JfQ0hfU0NDMwkJKCh1c2hvcnQpMHgwMDA4KQorI2RlZmluZSBDUE1fQ1JfQ0hfU01DMQkJKCh1c2hvcnQpMHgwMDA5KQkvKiBTTUMxIC8gRFNQMSAqLworI2RlZmluZSBDUE1fQ1JfQ0hfU0NDNAkJKCh1c2hvcnQpMHgwMDBjKQorI2RlZmluZSBDUE1fQ1JfQ0hfU01DMgkJKCh1c2hvcnQpMHgwMDBkKQkvKiBTTUMyIC8gRFNQMiAqLworCisjZGVmaW5lIG1rX2NyX2NtZChDSCwgQ01EKQkoKENNRCA8PCA4KSB8IChDSCA8PCA0KSkKKworLyogVGhlIGR1YWwgcG9ydGVkIFJBTSBpcyBtdWx0aS1mdW5jdGlvbmFsLiAgU29tZSBhcmVhcyBjYW4gYmUgKGFuZCBhcmUKKyAqIGJlaW5nKSB1c2VkIGZvciBtaWNyb2NvZGUuICBUaGVyZSBpcyBhbiBhcmVhIHRoYXQgY2FuIG9ubHkgYmUgdXNlZAorICogYXMgZGF0YSByYW0gZm9yIGJ1ZmZlciBkZXNjcmlwdG9ycywgd2hpY2ggaXMgYWxsIHdlIHVzZSByaWdodCBub3cuCisgKiBDdXJyZW50bHkgdGhlIGZpcnN0IDUxMiBhbmQgbGFzdCAyNTYgYnl0ZXMgYXJlIHVzZWQgZm9yIG1pY3JvY29kZS4KKyAqLworI2RlZmluZSBDUE1fREFUQU9OTFlfQkFTRQkoKHVpbnQpMHgwODAwKQorI2RlZmluZSBDUE1fREFUQU9OTFlfU0laRQkoKHVpbnQpMHgwNzAwKQorI2RlZmluZSBDUE1fRFBfTk9TUEFDRQkJKCh1aW50KTB4N2ZmZmZmZmYpCisKK3N0YXRpYyBpbmxpbmUgbG9uZyBJU19EUEVSUihjb25zdCB1aW50IG9mZnNldCkKK3sKKwlyZXR1cm4gKHVpbnQpb2Zmc2V0ID4gKHVpbnQpLTEwMDBMOworfQorCisvKiBFeHBvcnQgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgY29tbXVuaWNhdGlvbiBwcm9jZXNzb3IgcmVnaXN0ZXJzCisgKiBhbmQgZHVhbCBwb3J0IHJhbS4KKyAqLworZXh0ZXJuCWNwbTh4eF90CSpjcG1wOwkJLyogUG9pbnRlciB0byBjb21tIHByb2Nlc3NvciAqLworZXh0ZXJuIHVpbnQgY3BtX2RwYWxsb2ModWludCBzaXplLCB1aW50IGFsaWduKTsKK2V4dGVybiBpbnQgY3BtX2RwZnJlZSh1aW50IG9mZnNldCk7CitleHRlcm4gdWludCBjcG1fZHBhbGxvY19maXhlZCh1aW50IG9mZnNldCwgdWludCBzaXplLCB1aW50IGFsaWduKTsKK2V4dGVybiB2b2lkIGNwbV9kcGR1bXAodm9pZCk7CitleHRlcm4gdm9pZCAqY3BtX2RwcmFtX2FkZHIodWludCBvZmZzZXQpOworZXh0ZXJuIHZvaWQgY3BtX3NldGJyZyh1aW50IGJyZywgdWludCByYXRlKTsKKworZXh0ZXJuIHVpbnQgbTh4eF9jcG1faG9zdGFsbG9jKHVpbnQgc2l6ZSk7CitleHRlcm4gaW50ICBtOHh4X2NwbV9ob3N0ZnJlZSh1aW50IHN0YXJ0KTsKK2V4dGVybiB2b2lkIG04eHhfY3BtX2hvc3RkdW1wKHZvaWQpOworCisvKiBCdWZmZXIgZGVzY3JpcHRvcnMgdXNlZCBieSBtYW55IG9mIHRoZSBDUE0gcHJvdG9jb2xzLgorKi8KK3R5cGVkZWYgc3RydWN0IGNwbV9idWZfZGVzYyB7CisJdXNob3J0CWNiZF9zYzsJCS8qIFN0YXR1cyBhbmQgQ29udHJvbCAqLworCXVzaG9ydAljYmRfZGF0bGVuOwkvKiBEYXRhIGxlbmd0aCBpbiBidWZmZXIgKi8KKwl1aW50CWNiZF9idWZhZGRyOwkvKiBCdWZmZXIgYWRkcmVzcyBpbiBob3N0IG1lbW9yeSAqLworfSBjYmRfdDsKKworI2RlZmluZSBCRF9TQ19FTVBUWQkoKHVzaG9ydCkweDgwMDApCS8qIFJlY2VpdmUgaXMgZW1wdHkgKi8KKyNkZWZpbmUgQkRfU0NfUkVBRFkJKCh1c2hvcnQpMHg4MDAwKQkvKiBUcmFuc21pdCBpcyByZWFkeSAqLworI2RlZmluZSBCRF9TQ19XUkFQCSgodXNob3J0KTB4MjAwMCkJLyogTGFzdCBidWZmZXIgZGVzY3JpcHRvciAqLworI2RlZmluZSBCRF9TQ19JTlRSUFQJKCh1c2hvcnQpMHgxMDAwKQkvKiBJbnRlcnJ1cHQgb24gY2hhbmdlICovCisjZGVmaW5lIEJEX1NDX0xBU1QJKCh1c2hvcnQpMHgwODAwKQkvKiBMYXN0IGJ1ZmZlciBpbiBmcmFtZSAqLworI2RlZmluZSBCRF9TQ19UQwkoKHVzaG9ydCkweDA0MDApCS8qIFRyYW5zbWl0IENSQyAqLworI2RlZmluZSBCRF9TQ19DTQkoKHVzaG9ydCkweDAyMDApCS8qIENvbnRpbm91cyBtb2RlICovCisjZGVmaW5lIEJEX1NDX0lECSgodXNob3J0KTB4MDEwMCkJLyogUmVjJ2QgdG9vIG1hbnkgaWRsZXMgKi8KKyNkZWZpbmUgQkRfU0NfUAkJKCh1c2hvcnQpMHgwMTAwKQkvKiB4bXQgcHJlYW1ibGUgKi8KKyNkZWZpbmUgQkRfU0NfQlIJKCh1c2hvcnQpMHgwMDIwKQkvKiBCcmVhayByZWNlaXZlZCAqLworI2RlZmluZSBCRF9TQ19GUgkoKHVzaG9ydCkweDAwMTApCS8qIEZyYW1pbmcgZXJyb3IgKi8KKyNkZWZpbmUgQkRfU0NfUFIJKCh1c2hvcnQpMHgwMDA4KQkvKiBQYXJpdHkgZXJyb3IgKi8KKyNkZWZpbmUgQkRfU0NfTkFLCSgodXNob3J0KTB4MDAwNCkJLyogTkFLIC0gZGlkIG5vdCByZXNwb25kICovCisjZGVmaW5lIEJEX1NDX09WCSgodXNob3J0KTB4MDAwMikJLyogT3ZlcnJ1biAqLworI2RlZmluZSBCRF9TQ19VTgkoKHVzaG9ydCkweDAwMDIpCS8qIFVuZGVycnVuICovCisjZGVmaW5lIEJEX1NDX0NECSgodXNob3J0KTB4MDAwMSkJLyogPz8gKi8KKyNkZWZpbmUgQkRfU0NfQ0wJKCh1c2hvcnQpMHgwMDAxKQkvKiBDb2xsaXNpb24gKi8KKworLyogUGFyYW1ldGVyIFJBTSBvZmZzZXRzLgorKi8KKyNkZWZpbmUgUFJPRkZfU0NDMQkoKHVpbnQpMHgwMDAwKQorI2RlZmluZSBQUk9GRl9JSUMJKCh1aW50KTB4MDA4MCkKKyNkZWZpbmUgUFJPRkZfU0NDMgkoKHVpbnQpMHgwMTAwKQorI2RlZmluZSBQUk9GRl9TUEkJKCh1aW50KTB4MDE4MCkKKyNkZWZpbmUgUFJPRkZfU0NDMwkoKHVpbnQpMHgwMjAwKQorI2RlZmluZSBQUk9GRl9TTUMxCSgodWludCkweDAyODApCisjZGVmaW5lIFBST0ZGX1NDQzQJKCh1aW50KTB4MDMwMCkKKyNkZWZpbmUgUFJPRkZfU01DMgkoKHVpbnQpMHgwMzgwKQorCisvKiBEZWZpbmUgZW5vdWdoIHNvIEkgY2FuIGF0IGxlYXN0IHVzZSB0aGUgc2VyaWFsIHBvcnQgYXMgYSBVQVJULgorICogVGhlIE1CWCB1c2VzIFNNQzEgYXMgdGhlIGhvc3Qgc2VyaWFsIHBvcnQuCisgKi8KK3R5cGVkZWYgc3RydWN0IHNtY191YXJ0IHsKKwl1c2hvcnQJc21jX3JiYXNlOwkvKiBSeCBCdWZmZXIgZGVzY3JpcHRvciBiYXNlIGFkZHJlc3MgKi8KKwl1c2hvcnQJc21jX3RiYXNlOwkvKiBUeCBCdWZmZXIgZGVzY3JpcHRvciBiYXNlIGFkZHJlc3MgKi8KKwl1X2NoYXIJc21jX3JmY3I7CS8qIFJ4IGZ1bmN0aW9uIGNvZGUgKi8KKwl1X2NoYXIJc21jX3RmY3I7CS8qIFR4IGZ1bmN0aW9uIGNvZGUgKi8KKwl1c2hvcnQJc21jX21yYmxyOwkvKiBNYXggcmVjZWl2ZSBidWZmZXIgbGVuZ3RoICovCisJdWludAlzbWNfcnN0YXRlOwkvKiBJbnRlcm5hbCAqLworCXVpbnQJc21jX2lkcDsJLyogSW50ZXJuYWwgKi8KKwl1c2hvcnQJc21jX3JicHRyOwkvKiBJbnRlcm5hbCAqLworCXVzaG9ydAlzbWNfaWJjOwkvKiBJbnRlcm5hbCAqLworCXVpbnQJc21jX3J4dG1wOwkvKiBJbnRlcm5hbCAqLworCXVpbnQJc21jX3RzdGF0ZTsJLyogSW50ZXJuYWwgKi8KKwl1aW50CXNtY190ZHA7CS8qIEludGVybmFsICovCisJdXNob3J0CXNtY190YnB0cjsJLyogSW50ZXJuYWwgKi8KKwl1c2hvcnQJc21jX3RiYzsJLyogSW50ZXJuYWwgKi8KKwl1aW50CXNtY190eHRtcDsJLyogSW50ZXJuYWwgKi8KKwl1c2hvcnQJc21jX21heGlkbDsJLyogTWF4aW11bSBpZGxlIGNoYXJhY3RlcnMgKi8KKwl1c2hvcnQJc21jX3RtcGlkbDsJLyogVGVtcG9yYXJ5IGlkbGUgY291bnRlciAqLworCXVzaG9ydAlzbWNfYnJrbGVuOwkvKiBMYXN0IHJlY2VpdmVkIGJyZWFrIGxlbmd0aCAqLworCXVzaG9ydAlzbWNfYnJrZWM7CS8qIHJjdidkIGJyZWFrIGNvbmRpdGlvbiBjb3VudGVyICovCisJdXNob3J0CXNtY19icmtjcjsJLyogeG10IGJyZWFrIGNvdW50IHJlZ2lzdGVyICovCisJdXNob3J0CXNtY19ybWFzazsJLyogVGVtcG9yYXJ5IGJpdCBtYXNrICovCisJY2hhcglyZXMxWzhdOwkvKiBSZXNlcnZlZCAqLworCXVzaG9ydAlzbWNfcnBiYXNlOwkvKiBSZWxvY2F0aW9uIHBvaW50ZXIgKi8KK30gc21jX3VhcnRfdDsKKworLyogRnVuY3Rpb24gY29kZSBiaXRzLgorKi8KKyNkZWZpbmUgU01DX0VCCSgodV9jaGFyKTB4MTApCS8qIFNldCBiaWcgZW5kaWFuIGJ5dGUgb3JkZXIgKi8KKworLyogU01DIHVhcnQgbW9kZSByZWdpc3Rlci4KKyovCisjZGVmaW5lCVNNQ01SX1JFTgkoKHVzaG9ydCkweDAwMDEpCisjZGVmaW5lIFNNQ01SX1RFTgkoKHVzaG9ydCkweDAwMDIpCisjZGVmaW5lIFNNQ01SX0RNCSgodXNob3J0KTB4MDAwYykKKyNkZWZpbmUgU01DTVJfU01fR0NJCSgodXNob3J0KTB4MDAwMCkKKyNkZWZpbmUgU01DTVJfU01fVUFSVAkoKHVzaG9ydCkweDAwMjApCisjZGVmaW5lIFNNQ01SX1NNX1RSQU5TCSgodXNob3J0KTB4MDAzMCkKKyNkZWZpbmUgU01DTVJfU01fTUFTSwkoKHVzaG9ydCkweDAwMzApCisjZGVmaW5lIFNNQ01SX1BNX0VWRU4JKCh1c2hvcnQpMHgwMTAwKQkvKiBFdmVuIHBhcml0eSwgZWxzZSBvZGQgKi8KKyNkZWZpbmUgU01DTVJfUkVWRAlTTUNNUl9QTV9FVkVOCisjZGVmaW5lIFNNQ01SX1BFTgkoKHVzaG9ydCkweDAyMDApCS8qIFBhcml0eSBlbmFibGUgKi8KKyNkZWZpbmUgU01DTVJfQlMJU01DTVJfUEVOCisjZGVmaW5lIFNNQ01SX1NMCSgodXNob3J0KTB4MDQwMCkJLyogVHdvIHN0b3BzLCBlbHNlIG9uZSAqLworI2RlZmluZSBTTUNSX0NMRU5fTUFTSwkoKHVzaG9ydCkweDc4MDApCS8qIENoYXJhY3RlciBsZW5ndGggKi8KKyNkZWZpbmUgc21jcl9ta19jbGVuKEMpCSgoKEMpIDw8IDExKSAmIFNNQ1JfQ0xFTl9NQVNLKQorCisvKiBTTUMyIGFzIENlbnRyb25pY3MgcGFyYWxsZWwgcHJpbnRlci4gIEl0IGlzIGhhbGYgZHVwbGV4LCBpbiB0aGF0CisgKiBpdCBjYW4gb25seSByZWNlaXZlIG9yIHRyYW5zbWl0LiAgVGhlIHBhcmFtZXRlciByYW0gdmFsdWVzIGZvcgorICogZWFjaCBkaXJlY3Rpb24gYXJlIGVpdGhlciB1bmlxdWUgb3IgcHJvcGVybHkgb3ZlcmxhcCwgc28gd2UgY2FuCisgKiBpbmNsdWRlIHRoZW0gaW4gb25lIHN0cnVjdHVyZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3Qgc21jX2NlbnRyb25pY3MgeworCXVzaG9ydAlzY2VudF9yYmFzZTsKKwl1c2hvcnQJc2NlbnRfdGJhc2U7CisJdV9jaGFyCXNjZW50X2NmY3I7CisJdV9jaGFyCXNjZW50X3NtYXNrOworCXVzaG9ydAlzY2VudF9tcmJscjsKKwl1aW50CXNjZW50X3JzdGF0ZTsKKwl1aW50CXNjZW50X3JfcHRyOworCXVzaG9ydAlzY2VudF9yYnB0cjsKKwl1c2hvcnQJc2NlbnRfcl9jbnQ7CisJdWludAlzY2VudF9ydGVtcDsKKwl1aW50CXNjZW50X3RzdGF0ZTsKKwl1aW50CXNjZW50X3RfcHRyOworCXVzaG9ydAlzY2VudF90YnB0cjsKKwl1c2hvcnQJc2NlbnRfdF9jbnQ7CisJdWludAlzY2VudF90dGVtcDsKKwl1c2hvcnQJc2NlbnRfbWF4X3NsOworCXVzaG9ydAlzY2VudF9zbF9jbnQ7CisJdXNob3J0CXNjZW50X2NoYXJhY3RlcjE7CisJdXNob3J0CXNjZW50X2NoYXJhY3RlcjI7CisJdXNob3J0CXNjZW50X2NoYXJhY3RlcjM7CisJdXNob3J0CXNjZW50X2NoYXJhY3RlcjQ7CisJdXNob3J0CXNjZW50X2NoYXJhY3RlcjU7CisJdXNob3J0CXNjZW50X2NoYXJhY3RlcjY7CisJdXNob3J0CXNjZW50X2NoYXJhY3Rlcjc7CisJdXNob3J0CXNjZW50X2NoYXJhY3Rlcjg7CisJdXNob3J0CXNjZW50X3JjY207CisJdXNob3J0CXNjZW50X3JjY3I7Cit9IHNtY19jZW50X3Q7CisKKy8qIENlbnRyb25pY3MgU3RhdHVzIE1hc2sgUmVnaXN0ZXIuCisqLworI2RlZmluZSBTTUNfQ0VOVF9GCSgodV9jaGFyKTB4MDgpCisjZGVmaW5lIFNNQ19DRU5UX1BFCSgodV9jaGFyKTB4MDQpCisjZGVmaW5lIFNNQ19DRU5UX1MJKCh1X2NoYXIpMHgwMikKKworLyogU01DIEV2ZW50IGFuZCBNYXNrIHJlZ2lzdGVyLgorKi8KKyNkZWZpbmUJU01DTV9CUktFCSgodW5zaWduZWQgY2hhcikweDQwKQkvKiBXaGVuIGluIFVBUlQgTW9kZSAqLworI2RlZmluZQlTTUNNX0JSSwkoKHVuc2lnbmVkIGNoYXIpMHgxMCkJLyogV2hlbiBpbiBVQVJUIE1vZGUgKi8KKyNkZWZpbmUJU01DTV9UWEUJKCh1bnNpZ25lZCBjaGFyKTB4MTApCS8qIFdoZW4gaW4gVHJhbnNwYXJlbnQgTW9kZSAqLworI2RlZmluZQlTTUNNX0JTWQkoKHVuc2lnbmVkIGNoYXIpMHgwNCkKKyNkZWZpbmUJU01DTV9UWAkJKCh1bnNpZ25lZCBjaGFyKTB4MDIpCisjZGVmaW5lCVNNQ01fUlgJCSgodW5zaWduZWQgY2hhcikweDAxKQorCisvKiBCYXVkIHJhdGUgZ2VuZXJhdG9ycy4KKyovCisjZGVmaW5lIENQTV9CUkdfUlNUCQkoKHVpbnQpMHgwMDAyMDAwMCkKKyNkZWZpbmUgQ1BNX0JSR19FTgkJKCh1aW50KTB4MDAwMTAwMDApCisjZGVmaW5lIENQTV9CUkdfRVhUQ19JTlQJKCh1aW50KTB4MDAwMDAwMDApCisjZGVmaW5lIENQTV9CUkdfRVhUQ19DTEsyCSgodWludCkweDAwMDA0MDAwKQorI2RlZmluZSBDUE1fQlJHX0VYVENfQ0xLNgkoKHVpbnQpMHgwMDAwODAwMCkKKyNkZWZpbmUgQ1BNX0JSR19BVEIJCSgodWludCkweDAwMDAyMDAwKQorI2RlZmluZSBDUE1fQlJHX0NEX01BU0sJCSgodWludCkweDAwMDAxZmZlKQorI2RlZmluZSBDUE1fQlJHX0RJVjE2CQkoKHVpbnQpMHgwMDAwMDAwMSkKKworLyogU0kgQ2xvY2sgUm91dGUgUmVnaXN0ZXIKKyovCisjZGVmaW5lIFNJQ1JfUkNMS19TQ0MxX0JSRzEJKCh1aW50KTB4MDAwMDAwMDApCisjZGVmaW5lIFNJQ1JfVENMS19TQ0MxX0JSRzEJKCh1aW50KTB4MDAwMDAwMDApCisjZGVmaW5lIFNJQ1JfUkNMS19TQ0MyX0JSRzIJKCh1aW50KTB4MDAwMDA4MDApCisjZGVmaW5lIFNJQ1JfVENMS19TQ0MyX0JSRzIJKCh1aW50KTB4MDAwMDAxMDApCisjZGVmaW5lIFNJQ1JfUkNMS19TQ0MzX0JSRzMJKCh1aW50KTB4MDAxMDAwMDApCisjZGVmaW5lIFNJQ1JfVENMS19TQ0MzX0JSRzMJKCh1aW50KTB4MDAwMjAwMDApCisjZGVmaW5lIFNJQ1JfUkNMS19TQ0M0X0JSRzQJKCh1aW50KTB4MTgwMDAwMDApCisjZGVmaW5lIFNJQ1JfVENMS19TQ0M0X0JSRzQJKCh1aW50KTB4MDMwMDAwMDApCisKKy8qIFNDQ3MuCisqLworI2RlZmluZSBTQ0NfR1NNUkhfSVJQCQkoKHVpbnQpMHgwMDA0MDAwMCkKKyNkZWZpbmUgU0NDX0dTTVJIX0dERQkJKCh1aW50KTB4MDAwMTAwMDApCisjZGVmaW5lIFNDQ19HU01SSF9UQ1JDX0NDSVRUCSgodWludCkweDAwMDA4MDAwKQorI2RlZmluZSBTQ0NfR1NNUkhfVENSQ19CSVNZTkMJKCh1aW50KTB4MDAwMDQwMDApCisjZGVmaW5lIFNDQ19HU01SSF9UQ1JDX0hETEMJKCh1aW50KTB4MDAwMDAwMDApCisjZGVmaW5lIFNDQ19HU01SSF9SRVZECQkoKHVpbnQpMHgwMDAwMjAwMCkKKyNkZWZpbmUgU0NDX0dTTVJIX1RSWAkJKCh1aW50KTB4MDAwMDEwMDApCisjZGVmaW5lIFNDQ19HU01SSF9UVFgJCSgodWludCkweDAwMDAwODAwKQorI2RlZmluZSBTQ0NfR1NNUkhfQ0RQCQkoKHVpbnQpMHgwMDAwMDQwMCkKKyNkZWZpbmUgU0NDX0dTTVJIX0NUU1AJCSgodWludCkweDAwMDAwMjAwKQorI2RlZmluZSBTQ0NfR1NNUkhfQ0RTCQkoKHVpbnQpMHgwMDAwMDEwMCkKKyNkZWZpbmUgU0NDX0dTTVJIX0NUU1MJCSgodWludCkweDAwMDAwMDgwKQorI2RlZmluZSBTQ0NfR1NNUkhfVEZMCQkoKHVpbnQpMHgwMDAwMDA0MCkKKyNkZWZpbmUgU0NDX0dTTVJIX1JGVwkJKCh1aW50KTB4MDAwMDAwMjApCisjZGVmaW5lIFNDQ19HU01SSF9UWFNZCQkoKHVpbnQpMHgwMDAwMDAxMCkKKyNkZWZpbmUgU0NDX0dTTVJIX1NZTkwxNgkoKHVpbnQpMHgwMDAwMDAwYykKKyNkZWZpbmUgU0NDX0dTTVJIX1NZTkw4CQkoKHVpbnQpMHgwMDAwMDAwOCkKKyNkZWZpbmUgU0NDX0dTTVJIX1NZTkw0CQkoKHVpbnQpMHgwMDAwMDAwNCkKKyNkZWZpbmUgU0NDX0dTTVJIX1JUU00JCSgodWludCkweDAwMDAwMDAyKQorI2RlZmluZSBTQ0NfR1NNUkhfUlNZTgkJKCh1aW50KTB4MDAwMDAwMDEpCisKKyNkZWZpbmUgU0NDX0dTTVJMX1NJUgkJKCh1aW50KTB4ODAwMDAwMDApCS8qIFNDQzIgb25seSAqLworI2RlZmluZSBTQ0NfR1NNUkxfRURHRV9OT05FCSgodWludCkweDYwMDAwMDAwKQorI2RlZmluZSBTQ0NfR1NNUkxfRURHRV9ORUcJKCh1aW50KTB4NDAwMDAwMDApCisjZGVmaW5lIFNDQ19HU01STF9FREdFX1BPUwkoKHVpbnQpMHgyMDAwMDAwMCkKKyNkZWZpbmUgU0NDX0dTTVJMX0VER0VfQk9USAkoKHVpbnQpMHgwMDAwMDAwMCkKKyNkZWZpbmUgU0NDX0dTTVJMX1RDSQkJKCh1aW50KTB4MTAwMDAwMDApCisjZGVmaW5lIFNDQ19HU01STF9UU05DXzMJKCh1aW50KTB4MGMwMDAwMDApCisjZGVmaW5lIFNDQ19HU01STF9UU05DXzQJKCh1aW50KTB4MDgwMDAwMDApCisjZGVmaW5lIFNDQ19HU01STF9UU05DXzE0CSgodWludCkweDA0MDAwMDAwKQorI2RlZmluZSBTQ0NfR1NNUkxfVFNOQ19JTkYJKCh1aW50KTB4MDAwMDAwMDApCisjZGVmaW5lIFNDQ19HU01STF9SSU5WCQkoKHVpbnQpMHgwMjAwMDAwMCkKKyNkZWZpbmUgU0NDX0dTTVJMX1RJTlYJCSgodWludCkweDAxMDAwMDAwKQorI2RlZmluZSBTQ0NfR1NNUkxfVFBMXzEyOAkoKHVpbnQpMHgwMGMwMDAwMCkKKyNkZWZpbmUgU0NDX0dTTVJMX1RQTF82NAkoKHVpbnQpMHgwMGEwMDAwMCkKKyNkZWZpbmUgU0NDX0dTTVJMX1RQTF80OAkoKHVpbnQpMHgwMDgwMDAwMCkKKyNkZWZpbmUgU0NDX0dTTVJMX1RQTF8zMgkoKHVpbnQpMHgwMDYwMDAwMCkKKyNkZWZpbmUgU0NDX0dTTVJMX1RQTF8xNgkoKHVpbnQpMHgwMDQwMDAwMCkKKyNkZWZpbmUgU0NDX0dTTVJMX1RQTF84CQkoKHVpbnQpMHgwMDIwMDAwMCkKKyNkZWZpbmUgU0NDX0dTTVJMX1RQTF9OT05FCSgodWludCkweDAwMDAwMDAwKQorI2RlZmluZSBTQ0NfR1NNUkxfVFBQX0FMTDEJKCh1aW50KTB4MDAxODAwMDApCisjZGVmaW5lIFNDQ19HU01STF9UUFBfMDEJKCh1aW50KTB4MDAxMDAwMDApCisjZGVmaW5lIFNDQ19HU01STF9UUFBfMTAJKCh1aW50KTB4MDAwODAwMDApCisjZGVmaW5lIFNDQ19HU01STF9UUFBfWkVST1MJKCh1aW50KTB4MDAwMDAwMDApCisjZGVmaW5lIFNDQ19HU01STF9URU5ECQkoKHVpbnQpMHgwMDA0MDAwMCkKKyNkZWZpbmUgU0NDX0dTTVJMX1REQ1JfMzIJKCh1aW50KTB4MDAwMzAwMDApCisjZGVmaW5lIFNDQ19HU01STF9URENSXzE2CSgodWludCkweDAwMDIwMDAwKQorI2RlZmluZSBTQ0NfR1NNUkxfVERDUl84CSgodWludCkweDAwMDEwMDAwKQorI2RlZmluZSBTQ0NfR1NNUkxfVERDUl8xCSgodWludCkweDAwMDAwMDAwKQorI2RlZmluZSBTQ0NfR1NNUkxfUkRDUl8zMgkoKHVpbnQpMHgwMDAwYzAwMCkKKyNkZWZpbmUgU0NDX0dTTVJMX1JEQ1JfMTYJKCh1aW50KTB4MDAwMDgwMDApCisjZGVmaW5lIFNDQ19HU01STF9SRENSXzgJKCh1aW50KTB4MDAwMDQwMDApCisjZGVmaW5lIFNDQ19HU01STF9SRENSXzEJKCh1aW50KTB4MDAwMDAwMDApCisjZGVmaW5lIFNDQ19HU01STF9SRU5DX0RGTUFOCSgodWludCkweDAwMDAzMDAwKQorI2RlZmluZSBTQ0NfR1NNUkxfUkVOQ19NQU5DSAkoKHVpbnQpMHgwMDAwMjAwMCkKKyNkZWZpbmUgU0NDX0dTTVJMX1JFTkNfRk0wCSgodWludCkweDAwMDAxMDAwKQorI2RlZmluZSBTQ0NfR1NNUkxfUkVOQ19OUlpJCSgodWludCkweDAwMDAwODAwKQorI2RlZmluZSBTQ0NfR1NNUkxfUkVOQ19OUloJKCh1aW50KTB4MDAwMDAwMDApCisjZGVmaW5lIFNDQ19HU01STF9URU5DX0RGTUFOCSgodWludCkweDAwMDAwNjAwKQorI2RlZmluZSBTQ0NfR1NNUkxfVEVOQ19NQU5DSAkoKHVpbnQpMHgwMDAwMDQwMCkKKyNkZWZpbmUgU0NDX0dTTVJMX1RFTkNfRk0wCSgodWludCkweDAwMDAwMjAwKQorI2RlZmluZSBTQ0NfR1NNUkxfVEVOQ19OUlpJCSgodWludCkweDAwMDAwMTAwKQorI2RlZmluZSBTQ0NfR1NNUkxfVEVOQ19OUloJKCh1aW50KTB4MDAwMDAwMDApCisjZGVmaW5lIFNDQ19HU01STF9ESUFHX0xFCSgodWludCkweDAwMDAwMGMwKQkvKiBMb29wIGFuZCBlY2hvICovCisjZGVmaW5lIFNDQ19HU01STF9ESUFHX0VDSE8JKCh1aW50KTB4MDAwMDAwODApCisjZGVmaW5lIFNDQ19HU01STF9ESUFHX0xPT1AJKCh1aW50KTB4MDAwMDAwNDApCisjZGVmaW5lIFNDQ19HU01STF9ESUFHX05PUk0JKCh1aW50KTB4MDAwMDAwMDApCisjZGVmaW5lIFNDQ19HU01STF9FTlIJCSgodWludCkweDAwMDAwMDIwKQorI2RlZmluZSBTQ0NfR1NNUkxfRU5UCQkoKHVpbnQpMHgwMDAwMDAxMCkKKyNkZWZpbmUgU0NDX0dTTVJMX01PREVfRU5FVAkoKHVpbnQpMHgwMDAwMDAwYykKKyNkZWZpbmUgU0NDX0dTTVJMX01PREVfUU1DCSgodWludCkweDAwMDAwMDBhKQorI2RlZmluZSBTQ0NfR1NNUkxfTU9ERV9ERENNUAkoKHVpbnQpMHgwMDAwMDAwOSkKKyNkZWZpbmUgU0NDX0dTTVJMX01PREVfQklTWU5DCSgodWludCkweDAwMDAwMDA4KQorI2RlZmluZSBTQ0NfR1NNUkxfTU9ERV9WMTQJKCh1aW50KTB4MDAwMDAwMDcpCisjZGVmaW5lIFNDQ19HU01STF9NT0RFX0FIRExDCSgodWludCkweDAwMDAwMDA2KQorI2RlZmluZSBTQ0NfR1NNUkxfTU9ERV9QUk9GSUJVUwkoKHVpbnQpMHgwMDAwMDAwNSkKKyNkZWZpbmUgU0NDX0dTTVJMX01PREVfVUFSVAkoKHVpbnQpMHgwMDAwMDAwNCkKKyNkZWZpbmUgU0NDX0dTTVJMX01PREVfU1M3CSgodWludCkweDAwMDAwMDAzKQorI2RlZmluZSBTQ0NfR1NNUkxfTU9ERV9BVEFMSwkoKHVpbnQpMHgwMDAwMDAwMikKKyNkZWZpbmUgU0NDX0dTTVJMX01PREVfSERMQwkoKHVpbnQpMHgwMDAwMDAwMCkKKworI2RlZmluZSBTQ0NfVE9EUl9UT0QJCSgodXNob3J0KTB4ODAwMCkKKworLyogU0NDIEV2ZW50IGFuZCBNYXNrIHJlZ2lzdGVyLgorKi8KKyNkZWZpbmUJU0NDTV9UWEUJKCh1bnNpZ25lZCBjaGFyKTB4MTApCisjZGVmaW5lCVNDQ01fQlNZCSgodW5zaWduZWQgY2hhcikweDA0KQorI2RlZmluZQlTQ0NNX1RYCQkoKHVuc2lnbmVkIGNoYXIpMHgwMikKKyNkZWZpbmUJU0NDTV9SWAkJKCh1bnNpZ25lZCBjaGFyKTB4MDEpCisKK3R5cGVkZWYgc3RydWN0IHNjY19wYXJhbSB7CisJdXNob3J0CXNjY19yYmFzZTsJLyogUnggQnVmZmVyIGRlc2NyaXB0b3IgYmFzZSBhZGRyZXNzICovCisJdXNob3J0CXNjY190YmFzZTsJLyogVHggQnVmZmVyIGRlc2NyaXB0b3IgYmFzZSBhZGRyZXNzICovCisJdV9jaGFyCXNjY19yZmNyOwkvKiBSeCBmdW5jdGlvbiBjb2RlICovCisJdV9jaGFyCXNjY190ZmNyOwkvKiBUeCBmdW5jdGlvbiBjb2RlICovCisJdXNob3J0CXNjY19tcmJscjsJLyogTWF4IHJlY2VpdmUgYnVmZmVyIGxlbmd0aCAqLworCXVpbnQJc2NjX3JzdGF0ZTsJLyogSW50ZXJuYWwgKi8KKwl1aW50CXNjY19pZHA7CS8qIEludGVybmFsICovCisJdXNob3J0CXNjY19yYnB0cjsJLyogSW50ZXJuYWwgKi8KKwl1c2hvcnQJc2NjX2liYzsJLyogSW50ZXJuYWwgKi8KKwl1aW50CXNjY19yeHRtcDsJLyogSW50ZXJuYWwgKi8KKwl1aW50CXNjY190c3RhdGU7CS8qIEludGVybmFsICovCisJdWludAlzY2NfdGRwOwkvKiBJbnRlcm5hbCAqLworCXVzaG9ydAlzY2NfdGJwdHI7CS8qIEludGVybmFsICovCisJdXNob3J0CXNjY190YmM7CS8qIEludGVybmFsICovCisJdWludAlzY2NfdHh0bXA7CS8qIEludGVybmFsICovCisJdWludAlzY2NfcmNyYzsJLyogSW50ZXJuYWwgKi8KKwl1aW50CXNjY190Y3JjOwkvKiBJbnRlcm5hbCAqLworfSBzY2NwX3Q7CisKKy8qIEZ1bmN0aW9uIGNvZGUgYml0cy4KKyovCisjZGVmaW5lIFNDQ19FQgkoKHVfY2hhcikweDEwKQkvKiBTZXQgYmlnIGVuZGlhbiBieXRlIG9yZGVyICovCisKKy8qIENQTSBFdGhlcm5ldCB0aHJvdWdoIFNDQ3guCisgKi8KK3R5cGVkZWYgc3RydWN0IHNjY19lbmV0IHsKKwlzY2NwX3QJc2VuX2dlbnNjYzsKKwl1aW50CXNlbl9jcHJlczsJLyogUHJlc2V0IENSQyAqLworCXVpbnQJc2VuX2NtYXNrOwkvKiBDb25zdGFudCBtYXNrIGZvciBDUkMgKi8KKwl1aW50CXNlbl9jcmNlYzsJLyogQ1JDIEVycm9yIGNvdW50ZXIgKi8KKwl1aW50CXNlbl9hbGVjOwkvKiBhbGlnbm1lbnQgZXJyb3IgY291bnRlciAqLworCXVpbnQJc2VuX2Rpc2ZjOwkvKiBkaXNjYXJkIGZyYW1lIGNvdW50ZXIgKi8KKwl1c2hvcnQJc2VuX3BhZHM7CS8qIFR4IHNob3J0IGZyYW1lIHBhZCBjaGFyYWN0ZXIgKi8KKwl1c2hvcnQJc2VuX3JldGxpbTsJLyogUmV0cnkgbGltaXQgdGhyZXNob2xkICovCisJdXNob3J0CXNlbl9yZXRjbnQ7CS8qIFJldHJ5IGxpbWl0IGNvdW50ZXIgKi8KKwl1c2hvcnQJc2VuX21heGZscjsJLyogbWF4aW11bSBmcmFtZSBsZW5ndGggcmVnaXN0ZXIgKi8KKwl1c2hvcnQJc2VuX21pbmZscjsJLyogbWluaW11bSBmcmFtZSBsZW5ndGggcmVnaXN0ZXIgKi8KKwl1c2hvcnQJc2VuX21heGQxOwkvKiBtYXhpbXVtIERNQTEgbGVuZ3RoICovCisJdXNob3J0CXNlbl9tYXhkMjsJLyogbWF4aW11bSBETUEyIGxlbmd0aCAqLworCXVzaG9ydAlzZW5fbWF4ZDsJLyogUnggbWF4IERNQSAqLworCXVzaG9ydAlzZW5fZG1hY250OwkvKiBSeCBETUEgY291bnRlciAqLworCXVzaG9ydAlzZW5fbWF4YjsJLyogTWF4IEJEIGJ5dGUgY291bnQgKi8KKwl1c2hvcnQJc2VuX2dhZGRyMTsJLyogR3JvdXAgYWRkcmVzcyBmaWx0ZXIgKi8KKwl1c2hvcnQJc2VuX2dhZGRyMjsKKwl1c2hvcnQJc2VuX2dhZGRyMzsKKwl1c2hvcnQJc2VuX2dhZGRyNDsKKwl1aW50CXNlbl90YnVmMGRhdGEwOwkvKiBTYXZlIGFyZWEgMCAtIGN1cnJlbnQgZnJhbWUgKi8KKwl1aW50CXNlbl90YnVmMGRhdGExOwkvKiBTYXZlIGFyZWEgMSAtIGN1cnJlbnQgZnJhbWUgKi8KKwl1aW50CXNlbl90YnVmMHJiYTsJLyogSW50ZXJuYWwgKi8KKwl1aW50CXNlbl90YnVmMGNyYzsJLyogSW50ZXJuYWwgKi8KKwl1c2hvcnQJc2VuX3RidWYwYmNudDsJLyogSW50ZXJuYWwgKi8KKwl1c2hvcnQJc2VuX3BhZGRyaDsJLyogcGh5c2ljYWwgYWRkcmVzcyAoTVNCKSAqLworCXVzaG9ydAlzZW5fcGFkZHJtOworCXVzaG9ydAlzZW5fcGFkZHJsOwkvKiBwaHlzaWNhbCBhZGRyZXNzIChMU0IpICovCisJdXNob3J0CXNlbl9wcGVyOwkvKiBwZXJzaXN0ZW5jZSAqLworCXVzaG9ydAlzZW5fcmZiZHB0cjsJLyogUnggZmlyc3QgQkQgcG9pbnRlciAqLworCXVzaG9ydAlzZW5fdGZiZHB0cjsJLyogVHggZmlyc3QgQkQgcG9pbnRlciAqLworCXVzaG9ydAlzZW5fdGxiZHB0cjsJLyogVHggbGFzdCBCRCBwb2ludGVyICovCisJdWludAlzZW5fdGJ1ZjFkYXRhMDsJLyogU2F2ZSBhcmVhIDAgLSBjdXJyZW50IGZyYW1lICovCisJdWludAlzZW5fdGJ1ZjFkYXRhMTsJLyogU2F2ZSBhcmVhIDEgLSBjdXJyZW50IGZyYW1lICovCisJdWludAlzZW5fdGJ1ZjFyYmE7CS8qIEludGVybmFsICovCisJdWludAlzZW5fdGJ1ZjFjcmM7CS8qIEludGVybmFsICovCisJdXNob3J0CXNlbl90YnVmMWJjbnQ7CS8qIEludGVybmFsICovCisJdXNob3J0CXNlbl90eGxlbjsJLyogVHggRnJhbWUgbGVuZ3RoIGNvdW50ZXIgKi8KKwl1c2hvcnQJc2VuX2lhZGRyMTsJLyogSW5kaXZpZHVhbCBhZGRyZXNzIGZpbHRlciAqLworCXVzaG9ydAlzZW5faWFkZHIyOworCXVzaG9ydAlzZW5faWFkZHIzOworCXVzaG9ydAlzZW5faWFkZHI0OworCXVzaG9ydAlzZW5fYm9mZmNudDsJLyogQmFja29mZiBjb3VudGVyICovCisKKwkvKiBOT1RFOiBTb21lIHZlcnNpb25zIG9mIHRoZSBtYW51YWwgaGF2ZSB0aGUgZm9sbG93aW5nIGl0ZW1zCisJICogaW5jb3JyZWN0bHkgZG9jdW1lbnRlZC4gIEJlbG93IGlzIHRoZSBwcm9wZXIgb3JkZXIuCisJICovCisJdXNob3J0CXNlbl90YWRkcmg7CS8qIHRlbXAgYWRkcmVzcyAoTVNCKSAqLworCXVzaG9ydAlzZW5fdGFkZHJtOworCXVzaG9ydAlzZW5fdGFkZHJsOwkvKiB0ZW1wIGFkZHJlc3MgKExTQikgKi8KK30gc2NjX2VuZXRfdDsKKworLyogU0NDIEV2ZW50IHJlZ2lzdGVyIGFzIHVzZWQgYnkgRXRoZXJuZXQuCisqLworI2RlZmluZSBTQ0NFX0VORVRfR1JBCSgodXNob3J0KTB4MDA4MCkJLyogR3JhY2VmdWwgc3RvcCBjb21wbGV0ZSAqLworI2RlZmluZSBTQ0NFX0VORVRfVFhFCSgodXNob3J0KTB4MDAxMCkJLyogVHJhbnNtaXQgRXJyb3IgKi8KKyNkZWZpbmUgU0NDRV9FTkVUX1JYRgkoKHVzaG9ydCkweDAwMDgpCS8qIEZ1bGwgZnJhbWUgcmVjZWl2ZWQgKi8KKyNkZWZpbmUgU0NDRV9FTkVUX0JTWQkoKHVzaG9ydCkweDAwMDQpCS8qIEFsbCBpbmNvbWluZyBidWZmZXJzIGZ1bGwgKi8KKyNkZWZpbmUgU0NDRV9FTkVUX1RYQgkoKHVzaG9ydCkweDAwMDIpCS8qIEEgYnVmZmVyIHdhcyB0cmFuc21pdHRlZCAqLworI2RlZmluZSBTQ0NFX0VORVRfUlhCCSgodXNob3J0KTB4MDAwMSkJLyogQSBidWZmZXIgd2FzIHJlY2VpdmVkICovCisKKy8qIFNDQyBNb2RlIFJlZ2lzdGVyIChQTVNSKSBhcyB1c2VkIGJ5IEV0aGVybmV0LgorKi8KKyNkZWZpbmUgU0NDX1BTTVJfSEJDCSgodXNob3J0KTB4ODAwMCkJLyogRW5hYmxlIGhlYXJ0YmVhdCAqLworI2RlZmluZSBTQ0NfUFNNUl9GQwkoKHVzaG9ydCkweDQwMDApCS8qIEZvcmNlIGNvbGxpc2lvbiAqLworI2RlZmluZSBTQ0NfUFNNUl9SU0gJKCh1c2hvcnQpMHgyMDAwKQkvKiBSZWNlaXZlIHNob3J0IGZyYW1lcyAqLworI2RlZmluZSBTQ0NfUFNNUl9JQU0JKCh1c2hvcnQpMHgxMDAwKQkvKiBDaGVjayBpbmRpdmlkdWFsIGhhc2ggKi8KKyNkZWZpbmUgU0NDX1BTTVJfRU5DUkMJKCh1c2hvcnQpMHgwODAwKQkvKiBFdGhlcm5ldCBDUkMgbW9kZSAqLworI2RlZmluZSBTQ0NfUFNNUl9QUk8JKCh1c2hvcnQpMHgwMjAwKQkvKiBQcm9taXNjdW91cyBtb2RlICovCisjZGVmaW5lIFNDQ19QU01SX0JSTwkoKHVzaG9ydCkweDAxMDApCS8qIENhdGNoIGJyb2FkY2FzdCBwa3RzICovCisjZGVmaW5lIFNDQ19QU01SX1NCVAkoKHVzaG9ydCkweDAwODApCS8qIFNwZWNpYWwgYmFja29mZiB0aW1lciAqLworI2RlZmluZSBTQ0NfUFNNUl9MUEIJKCh1c2hvcnQpMHgwMDQwKQkvKiBTZXQgTG9vcGJhY2sgbW9kZSAqLworI2RlZmluZSBTQ0NfUFNNUl9TSVAJKCh1c2hvcnQpMHgwMDIwKQkvKiBTYW1wbGUgSW5wdXQgUGlucyAqLworI2RlZmluZSBTQ0NfUFNNUl9MQ1cJKCh1c2hvcnQpMHgwMDEwKQkvKiBMYXRlIGNvbGxpc2lvbiB3aW5kb3cgKi8KKyNkZWZpbmUgU0NDX1BTTVJfTklCMjIJKCh1c2hvcnQpMHgwMDBhKQkvKiBTdGFydCBmcmFtZSBzZWFyY2ggKi8KKyNkZWZpbmUgU0NDX1BTTVJfRkRFCSgodXNob3J0KTB4MDAwMSkJLyogRnVsbCBkdXBsZXggZW5hYmxlICovCisKKy8qIEJ1ZmZlciBkZXNjcmlwdG9yIGNvbnRyb2wvc3RhdHVzIHVzZWQgYnkgRXRoZXJuZXQgcmVjZWl2ZS4KKyovCisjZGVmaW5lIEJEX0VORVRfUlhfRU1QVFkJKCh1c2hvcnQpMHg4MDAwKQorI2RlZmluZSBCRF9FTkVUX1JYX1dSQVAJCSgodXNob3J0KTB4MjAwMCkKKyNkZWZpbmUgQkRfRU5FVF9SWF9JTlRSCQkoKHVzaG9ydCkweDEwMDApCisjZGVmaW5lIEJEX0VORVRfUlhfTEFTVAkJKCh1c2hvcnQpMHgwODAwKQorI2RlZmluZSBCRF9FTkVUX1JYX0ZJUlNUCSgodXNob3J0KTB4MDQwMCkKKyNkZWZpbmUgQkRfRU5FVF9SWF9NSVNTCQkoKHVzaG9ydCkweDAxMDApCisjZGVmaW5lIEJEX0VORVRfUlhfTEcJCSgodXNob3J0KTB4MDAyMCkKKyNkZWZpbmUgQkRfRU5FVF9SWF9OTwkJKCh1c2hvcnQpMHgwMDEwKQorI2RlZmluZSBCRF9FTkVUX1JYX1NICQkoKHVzaG9ydCkweDAwMDgpCisjZGVmaW5lIEJEX0VORVRfUlhfQ1IJCSgodXNob3J0KTB4MDAwNCkKKyNkZWZpbmUgQkRfRU5FVF9SWF9PVgkJKCh1c2hvcnQpMHgwMDAyKQorI2RlZmluZSBCRF9FTkVUX1JYX0NMCQkoKHVzaG9ydCkweDAwMDEpCisjZGVmaW5lIEJEX0VORVRfUlhfQkMJCSgodXNob3J0KTB4MDA4MCkJLyogREEgaXMgQnJvYWRjYXN0ICovCisjZGVmaW5lIEJEX0VORVRfUlhfTUMJCSgodXNob3J0KTB4MDA0MCkJLyogREEgaXMgTXVsdGljYXN0ICovCisjZGVmaW5lIEJEX0VORVRfUlhfU1RBVFMJKCh1c2hvcnQpMHgwMTNmKQkvKiBBbGwgc3RhdHVzIGJpdHMgKi8KKworLyogQnVmZmVyIGRlc2NyaXB0b3IgY29udHJvbC9zdGF0dXMgdXNlZCBieSBFdGhlcm5ldCB0cmFuc21pdC4KKyovCisjZGVmaW5lIEJEX0VORVRfVFhfUkVBRFkJKCh1c2hvcnQpMHg4MDAwKQorI2RlZmluZSBCRF9FTkVUX1RYX1BBRAkJKCh1c2hvcnQpMHg0MDAwKQorI2RlZmluZSBCRF9FTkVUX1RYX1dSQVAJCSgodXNob3J0KTB4MjAwMCkKKyNkZWZpbmUgQkRfRU5FVF9UWF9JTlRSCQkoKHVzaG9ydCkweDEwMDApCisjZGVmaW5lIEJEX0VORVRfVFhfTEFTVAkJKCh1c2hvcnQpMHgwODAwKQorI2RlZmluZSBCRF9FTkVUX1RYX1RDCQkoKHVzaG9ydCkweDA0MDApCisjZGVmaW5lIEJEX0VORVRfVFhfREVGCQkoKHVzaG9ydCkweDAyMDApCisjZGVmaW5lIEJEX0VORVRfVFhfSEIJCSgodXNob3J0KTB4MDEwMCkKKyNkZWZpbmUgQkRfRU5FVF9UWF9MQwkJKCh1c2hvcnQpMHgwMDgwKQorI2RlZmluZSBCRF9FTkVUX1RYX1JMCQkoKHVzaG9ydCkweDAwNDApCisjZGVmaW5lIEJEX0VORVRfVFhfUkNNQVNLCSgodXNob3J0KTB4MDAzYykKKyNkZWZpbmUgQkRfRU5FVF9UWF9VTgkJKCh1c2hvcnQpMHgwMDAyKQorI2RlZmluZSBCRF9FTkVUX1RYX0NTTAkJKCh1c2hvcnQpMHgwMDAxKQorI2RlZmluZSBCRF9FTkVUX1RYX1NUQVRTCSgodXNob3J0KTB4MDNmZikJLyogQWxsIHN0YXR1cyBiaXRzICovCisKKy8qIFNDQyBhcyBVQVJUCisqLwordHlwZWRlZiBzdHJ1Y3Qgc2NjX3VhcnQgeworCXNjY3BfdAlzY2NfZ2Vuc2NjOworCWNoYXIJcmVzMVs4XTsJLyogUmVzZXJ2ZWQgKi8KKwl1c2hvcnQJc2NjX21heGlkbDsJLyogTWF4aW11bSBpZGxlIGNoYXJzICovCisJdXNob3J0CXNjY19pZGxjOwkvKiB0ZW1wIGlkbGUgY291bnRlciAqLworCXVzaG9ydAlzY2NfYnJrY3I7CS8qIEJyZWFrIGNvdW50IHJlZ2lzdGVyICovCisJdXNob3J0CXNjY19wYXJlYzsJLyogcmVjZWl2ZSBwYXJpdHkgZXJyb3IgY291bnRlciAqLworCXVzaG9ydAlzY2NfZnJtZWM7CS8qIHJlY2VpdmUgZnJhbWluZyBlcnJvciBjb3VudGVyICovCisJdXNob3J0CXNjY19ub3NlYzsJLyogcmVjZWl2ZSBub2lzZSBjb3VudGVyICovCisJdXNob3J0CXNjY19icmtlYzsJLyogcmVjZWl2ZSBicmVhayBjb25kaXRpb24gY291bnRlciAqLworCXVzaG9ydAlzY2NfYnJrbG47CS8qIGxhc3QgcmVjZWl2ZWQgYnJlYWsgbGVuZ3RoICovCisJdXNob3J0CXNjY191YWRkcjE7CS8qIFVBUlQgYWRkcmVzcyBjaGFyYWN0ZXIgMSAqLworCXVzaG9ydAlzY2NfdWFkZHIyOwkvKiBVQVJUIGFkZHJlc3MgY2hhcmFjdGVyIDIgKi8KKwl1c2hvcnQJc2NjX3J0ZW1wOwkvKiBUZW1wIHN0b3JhZ2UgKi8KKwl1c2hvcnQJc2NjX3Rvc2VxOwkvKiBUcmFuc21pdCBvdXQgb2Ygc2VxdWVuY2UgY2hhciAqLworCXVzaG9ydAlzY2NfY2hhcjE7CS8qIGNvbnRyb2wgY2hhcmFjdGVyIDEgKi8KKwl1c2hvcnQJc2NjX2NoYXIyOwkvKiBjb250cm9sIGNoYXJhY3RlciAyICovCisJdXNob3J0CXNjY19jaGFyMzsJLyogY29udHJvbCBjaGFyYWN0ZXIgMyAqLworCXVzaG9ydAlzY2NfY2hhcjQ7CS8qIGNvbnRyb2wgY2hhcmFjdGVyIDQgKi8KKwl1c2hvcnQJc2NjX2NoYXI1OwkvKiBjb250cm9sIGNoYXJhY3RlciA1ICovCisJdXNob3J0CXNjY19jaGFyNjsJLyogY29udHJvbCBjaGFyYWN0ZXIgNiAqLworCXVzaG9ydAlzY2NfY2hhcjc7CS8qIGNvbnRyb2wgY2hhcmFjdGVyIDcgKi8KKwl1c2hvcnQJc2NjX2NoYXI4OwkvKiBjb250cm9sIGNoYXJhY3RlciA4ICovCisJdXNob3J0CXNjY19yY2NtOwkvKiByZWNlaXZlIGNvbnRyb2wgY2hhcmFjdGVyIG1hc2sgKi8KKwl1c2hvcnQJc2NjX3JjY3I7CS8qIHJlY2VpdmUgY29udHJvbCBjaGFyYWN0ZXIgcmVnaXN0ZXIgKi8KKwl1c2hvcnQJc2NjX3JsYmM7CS8qIHJlY2VpdmUgbGFzdCBicmVhayBjaGFyYWN0ZXIgKi8KK30gc2NjX3VhcnRfdDsKKworLyogU0NDIEV2ZW50IGFuZCBNYXNrIHJlZ2lzdGVycyB3aGVuIGl0IGlzIHVzZWQgYXMgYSBVQVJULgorKi8KKyNkZWZpbmUgVUFSVF9TQ0NNX0dMUgkJKCh1c2hvcnQpMHgxMDAwKQorI2RlZmluZSBVQVJUX1NDQ01fR0xUCQkoKHVzaG9ydCkweDA4MDApCisjZGVmaW5lIFVBUlRfU0NDTV9BQgkJKCh1c2hvcnQpMHgwMjAwKQorI2RlZmluZSBVQVJUX1NDQ01fSURMCQkoKHVzaG9ydCkweDAxMDApCisjZGVmaW5lIFVBUlRfU0NDTV9HUkEJCSgodXNob3J0KTB4MDA4MCkKKyNkZWZpbmUgVUFSVF9TQ0NNX0JSS0UJCSgodXNob3J0KTB4MDA0MCkKKyNkZWZpbmUgVUFSVF9TQ0NNX0JSS1MJCSgodXNob3J0KTB4MDAyMCkKKyNkZWZpbmUgVUFSVF9TQ0NNX0NDUgkJKCh1c2hvcnQpMHgwMDA4KQorI2RlZmluZSBVQVJUX1NDQ01fQlNZCQkoKHVzaG9ydCkweDAwMDQpCisjZGVmaW5lIFVBUlRfU0NDTV9UWAkJKCh1c2hvcnQpMHgwMDAyKQorI2RlZmluZSBVQVJUX1NDQ01fUlgJCSgodXNob3J0KTB4MDAwMSkKKworLyogVGhlIFNDQyBQTVNSIHdoZW4gdXNlZCBhcyBhIFVBUlQuCisqLworI2RlZmluZSBTQ1VfUFNNUl9GTEMJCSgodXNob3J0KTB4ODAwMCkKKyNkZWZpbmUgU0NVX1BTTVJfU0wJCSgodXNob3J0KTB4NDAwMCkKKyNkZWZpbmUgU0NVX1BTTVJfQ0wJCSgodXNob3J0KTB4MzAwMCkKKyNkZWZpbmUgU0NVX1BTTVJfVU0JCSgodXNob3J0KTB4MGMwMCkKKyNkZWZpbmUgU0NVX1BTTVJfRlJaCQkoKHVzaG9ydCkweDAyMDApCisjZGVmaW5lIFNDVV9QU01SX1JaUwkJKCh1c2hvcnQpMHgwMTAwKQorI2RlZmluZSBTQ1VfUFNNUl9TWU4JCSgodXNob3J0KTB4MDA4MCkKKyNkZWZpbmUgU0NVX1BTTVJfRFJUCQkoKHVzaG9ydCkweDAwNDApCisjZGVmaW5lIFNDVV9QU01SX1BFTgkJKCh1c2hvcnQpMHgwMDEwKQorI2RlZmluZSBTQ1VfUFNNUl9SUE0JCSgodXNob3J0KTB4MDAwYykKKyNkZWZpbmUgU0NVX1BTTVJfUkVWUAkJKCh1c2hvcnQpMHgwMDA4KQorI2RlZmluZSBTQ1VfUFNNUl9UUE0JCSgodXNob3J0KTB4MDAwMykKKyNkZWZpbmUgU0NVX1BTTVJfVEVWUAkJKCh1c2hvcnQpMHgwMDAyKQorCisvKiBDUE0gVHJhbnNwYXJlbnQgbW9kZSBTQ0MuCisgKi8KK3R5cGVkZWYgc3RydWN0IHNjY190cmFucyB7CisJc2NjcF90CXN0X2dlbnNjYzsKKwl1aW50CXN0X2NwcmVzOwkvKiBQcmVzZXQgQ1JDICovCisJdWludAlzdF9jbWFzazsJLyogQ29uc3RhbnQgbWFzayBmb3IgQ1JDICovCit9IHNjY190cmFuc190OworCisjZGVmaW5lIEJEX1NDQ19UWF9MQVNUCQkoKHVzaG9ydCkweDA4MDApCisKKy8qIElJQyBwYXJhbWV0ZXIgUkFNLgorKi8KK3R5cGVkZWYgc3RydWN0IGlpYyB7CisJdXNob3J0CWlpY19yYmFzZTsJLyogUnggQnVmZmVyIGRlc2NyaXB0b3IgYmFzZSBhZGRyZXNzICovCisJdXNob3J0CWlpY190YmFzZTsJLyogVHggQnVmZmVyIGRlc2NyaXB0b3IgYmFzZSBhZGRyZXNzICovCisJdV9jaGFyCWlpY19yZmNyOwkvKiBSeCBmdW5jdGlvbiBjb2RlICovCisJdV9jaGFyCWlpY190ZmNyOwkvKiBUeCBmdW5jdGlvbiBjb2RlICovCisJdXNob3J0CWlpY19tcmJscjsJLyogTWF4IHJlY2VpdmUgYnVmZmVyIGxlbmd0aCAqLworCXVpbnQJaWljX3JzdGF0ZTsJLyogSW50ZXJuYWwgKi8KKwl1aW50CWlpY19yZHA7CS8qIEludGVybmFsICovCisJdXNob3J0CWlpY19yYnB0cjsJLyogSW50ZXJuYWwgKi8KKwl1c2hvcnQJaWljX3JiYzsJLyogSW50ZXJuYWwgKi8KKwl1aW50CWlpY19yeHRtcDsJLyogSW50ZXJuYWwgKi8KKwl1aW50CWlpY190c3RhdGU7CS8qIEludGVybmFsICovCisJdWludAlpaWNfdGRwOwkvKiBJbnRlcm5hbCAqLworCXVzaG9ydAlpaWNfdGJwdHI7CS8qIEludGVybmFsICovCisJdXNob3J0CWlpY190YmM7CS8qIEludGVybmFsICovCisJdWludAlpaWNfdHh0bXA7CS8qIEludGVybmFsICovCisJY2hhcglyZXMxWzRdOwkvKiBSZXNlcnZlZCAqLworCXVzaG9ydAlpaWNfcnBiYXNlOwkvKiBSZWxvY2F0aW9uIHBvaW50ZXIgKi8KKwljaGFyCXJlczJbMl07CS8qIFJlc2VydmVkICovCit9IGlpY190OworCisjZGVmaW5lIEJEX0lJQ19TVEFSVAkJKCh1c2hvcnQpMHgwNDAwKQorCisvKiBTUEkgcGFyYW1ldGVyIFJBTS4KKyovCit0eXBlZGVmIHN0cnVjdCBzcGkgeworCXVzaG9ydAlzcGlfcmJhc2U7CS8qIFJ4IEJ1ZmZlciBkZXNjcmlwdG9yIGJhc2UgYWRkcmVzcyAqLworCXVzaG9ydAlzcGlfdGJhc2U7CS8qIFR4IEJ1ZmZlciBkZXNjcmlwdG9yIGJhc2UgYWRkcmVzcyAqLworCXVfY2hhcglzcGlfcmZjcjsJLyogUnggZnVuY3Rpb24gY29kZSAqLworCXVfY2hhcglzcGlfdGZjcjsJLyogVHggZnVuY3Rpb24gY29kZSAqLworCXVzaG9ydAlzcGlfbXJibHI7CS8qIE1heCByZWNlaXZlIGJ1ZmZlciBsZW5ndGggKi8KKwl1aW50CXNwaV9yc3RhdGU7CS8qIEludGVybmFsICovCisJdWludAlzcGlfcmRwOwkvKiBJbnRlcm5hbCAqLworCXVzaG9ydAlzcGlfcmJwdHI7CS8qIEludGVybmFsICovCisJdXNob3J0CXNwaV9yYmM7CS8qIEludGVybmFsICovCisJdWludAlzcGlfcnh0bXA7CS8qIEludGVybmFsICovCisJdWludAlzcGlfdHN0YXRlOwkvKiBJbnRlcm5hbCAqLworCXVpbnQJc3BpX3RkcDsJLyogSW50ZXJuYWwgKi8KKwl1c2hvcnQJc3BpX3RicHRyOwkvKiBJbnRlcm5hbCAqLworCXVzaG9ydAlzcGlfdGJjOwkvKiBJbnRlcm5hbCAqLworCXVpbnQJc3BpX3R4dG1wOwkvKiBJbnRlcm5hbCAqLworCXVpbnQJc3BpX3JlczsKKwl1c2hvcnQJc3BpX3JwYmFzZTsJLyogUmVsb2NhdGlvbiBwb2ludGVyICovCisJdXNob3J0CXNwaV9yZXMyOworfSBzcGlfdDsKKworLyogU1BJIE1vZGUgcmVnaXN0ZXIuCisqLworI2RlZmluZSBTUE1PREVfTE9PUAkoKHVzaG9ydCkweDQwMDApCS8qIExvb3BiYWNrICovCisjZGVmaW5lIFNQTU9ERV9DSQkoKHVzaG9ydCkweDIwMDApCS8qIENsb2NrIEludmVydCAqLworI2RlZmluZSBTUE1PREVfQ1AJKCh1c2hvcnQpMHgxMDAwKQkvKiBDbG9jayBQaGFzZSAqLworI2RlZmluZSBTUE1PREVfRElWMTYJKCh1c2hvcnQpMHgwODAwKQkvKiBCUkcvMTYgbW9kZSAqLworI2RlZmluZSBTUE1PREVfUkVWCSgodXNob3J0KTB4MDQwMCkJLyogUmV2ZXJzZWQgRGF0YSAqLworI2RlZmluZSBTUE1PREVfTVNUUgkoKHVzaG9ydCkweDAyMDApCS8qIFNQSSBNYXN0ZXIgKi8KKyNkZWZpbmUgU1BNT0RFX0VOCSgodXNob3J0KTB4MDEwMCkJLyogRW5hYmxlICovCisjZGVmaW5lIFNQTU9ERV9MRU5NU0sJKCh1c2hvcnQpMHgwMGYwKQkvKiBjaGFyYWN0ZXIgbGVuZ3RoICovCisjZGVmaW5lIFNQTU9ERV9MRU40CSgodXNob3J0KTB4MDAzMCkJLyogIDQgYml0cyBwZXIgY2hhciAqLworI2RlZmluZSBTUE1PREVfTEVOOAkoKHVzaG9ydCkweDAwNzApCS8qICA4IGJpdHMgcGVyIGNoYXIgKi8KKyNkZWZpbmUgU1BNT0RFX0xFTjE2CSgodXNob3J0KTB4MDBmMCkJLyogMTYgYml0cyBwZXIgY2hhciAqLworI2RlZmluZSBTUE1PREVfUE1NU0sJKCh1c2hvcnQpMHgwMDBmKQkvKiBwcmVzY2FsZSBtb2R1bHVzICovCisKKy8qIFNQSUUgZmllbGRzICovCisjZGVmaW5lIFNQSUVfTU1FCTB4MjAKKyNkZWZpbmUgU1BJRV9UWEUJMHgxMAorI2RlZmluZSBTUElFX0JTWQkweDA0CisjZGVmaW5lIFNQSUVfVFhCCTB4MDIKKyNkZWZpbmUgU1BJRV9SWEIJMHgwMQorCisvKgorICogUklTQyBDb250cm9sbGVyIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgZGVmaW5pdG9ucworICovCisjZGVmaW5lIFJDQ1JfVElNRQkweDgwMDAJCQkvKiBSSVNDIFRpbWVyIEVuYWJsZSAqLworI2RlZmluZSBSQ0NSX1RJTUVQKHQpCSgoKHQpICYgMHgzRik8PDgpCS8qIFJJU0MgVGltZXIgUGVyaW9kICovCisjZGVmaW5lIFJDQ1JfVElNRV9NQVNLCTB4MDBGRgkJCS8qIG5vdCBSSVNDIFRpbWVyIHJlbGF0ZWQgYml0cyAqLworCisvKiBSSVNDIFRpbWVyIFBhcmFtZXRlciBSQU0gb2Zmc2V0ICovCisjZGVmaW5lIFBST0ZGX1JUTVIJKCh1aW50KTB4MDFCMCkKKwordHlwZWRlZiBzdHJ1Y3QgcmlzY190aW1lcl9wcmFtIHsKKwl1bnNpZ25lZCBzaG9ydAl0bV9iYXNlOwkvKiBSSVNDIFRpbWVyIFRhYmxlIEJhc2UgQWRkcmVzcyAqLworCXVuc2lnbmVkIHNob3J0CXRtX3B0cjsJCS8qIFJJU0MgVGltZXIgVGFibGUgUG9pbnRlciAoaW50ZXJuYWwpICovCisJdW5zaWduZWQgc2hvcnQJcl90bXI7CQkvKiBSSVNDIFRpbWVyIE1vZGUgUmVnaXN0ZXIgKi8KKwl1bnNpZ25lZCBzaG9ydAlyX3RtdjsJCS8qIFJJU0MgVGltZXIgVmFsaWQgUmVnaXN0ZXIgKi8KKwl1bnNpZ25lZCBsb25nCXRtX2NtZDsJCS8qIFJJU0MgVGltZXIgQ29tbWFuZCBSZWdpc3RlciAqLworCXVuc2lnbmVkIGxvbmcJdG1fY250OwkJLyogUklTQyBUaW1lciBJbnRlcm5hbCBDb3VudCAqLworfSBydF9wcmFtX3Q7CisKKy8qIEJpdHMgaW4gUklTQyBUaW1lciBDb21tYW5kIFJlZ2lzdGVyICovCisjZGVmaW5lIFRNX0NNRF9WQUxJRAkweDgwMDAwMDAwCS8qIFZhbGlkIC0gRW5hYmxlcyB0aGUgdGltZXIgKi8KKyNkZWZpbmUgVE1fQ01EX1JFU1RBUlQJMHg0MDAwMDAwMAkvKiBSZXN0YXJ0IC0gZm9yIGF1dG9tYXRpYyByZXN0YXJ0ICovCisjZGVmaW5lIFRNX0NNRF9QV00JMHgyMDAwMDAwMAkvKiBSdW4gaW4gUHVsc2UgV2lkdGggTW9kdWxhdGlvbiBNb2RlICovCisjZGVmaW5lIFRNX0NNRF9OVU0obikJKCgobikmMHhGKTw8MTYpCS8qIFRpbWVyIE51bWJlciAqLworI2RlZmluZSBUTV9DTURfUEVSSU9EKHApICgocCkmMHhGRkZGKQkvKiBUaW1lciBQZXJpb2QgKi8KKworLyogQ1BNIGludGVycnVwdHMuICBUaGVyZSBhcmUgbmVhcmx5IDMyIGludGVycnVwdHMgZ2VuZXJhdGVkIGJ5IENQTQorICogY2hhbm5lbHMgb3IgZGV2aWNlcy4gIEFsbCBvZiB0aGVzZSBhcmUgcHJlc2VudGVkIHRvIHRoZSBQUEMgY29yZQorICogYXMgYSBzaW5nbGUgaW50ZXJydXB0LiAgVGhlIENQTSBpbnRlcnJ1cHQgaGFuZGxlciBkaXNwYXRjaGVzIGl0cworICogb3duIGhhbmRsZXJzLCBpbiBhIHNpbWlsYXIgZmFzaGlvbiB0byB0aGUgUFBDIGNvcmUgaGFuZGxlci4gIFdlCisgKiB1c2UgdGhlIHRhYmxlIGFzIGRlZmluZWQgaW4gdGhlIG1hbnVhbHMgKGkuZS4gbm8gc3BlY2lhbCBoaWdoCisgKiBwcmlvcml0eSBhbmQgU0NDMSA9PSBTQ0NhLCBldGMuLi4pLgorICovCisjZGVmaW5lIENQTVZFQ19OUgkJMzIKKyNkZWZpbmUJQ1BNVkVDX1BJT19QQzE1CQkoKHVzaG9ydCkweDFmKQorI2RlZmluZQlDUE1WRUNfU0NDMQkJKCh1c2hvcnQpMHgxZSkKKyNkZWZpbmUJQ1BNVkVDX1NDQzIJCSgodXNob3J0KTB4MWQpCisjZGVmaW5lCUNQTVZFQ19TQ0MzCQkoKHVzaG9ydCkweDFjKQorI2RlZmluZQlDUE1WRUNfU0NDNAkJKCh1c2hvcnQpMHgxYikKKyNkZWZpbmUJQ1BNVkVDX1BJT19QQzE0CQkoKHVzaG9ydCkweDFhKQorI2RlZmluZQlDUE1WRUNfVElNRVIxCQkoKHVzaG9ydCkweDE5KQorI2RlZmluZQlDUE1WRUNfUElPX1BDMTMJCSgodXNob3J0KTB4MTgpCisjZGVmaW5lCUNQTVZFQ19QSU9fUEMxMgkJKCh1c2hvcnQpMHgxNykKKyNkZWZpbmUJQ1BNVkVDX1NETUFfQ0JfRVJSCSgodXNob3J0KTB4MTYpCisjZGVmaW5lIENQTVZFQ19JRE1BMQkJKCh1c2hvcnQpMHgxNSkKKyNkZWZpbmUgQ1BNVkVDX0lETUEyCQkoKHVzaG9ydCkweDE0KQorI2RlZmluZSBDUE1WRUNfVElNRVIyCQkoKHVzaG9ydCkweDEyKQorI2RlZmluZSBDUE1WRUNfUklTQ1RJTUVSCSgodXNob3J0KTB4MTEpCisjZGVmaW5lIENQTVZFQ19JMkMJCSgodXNob3J0KTB4MTApCisjZGVmaW5lCUNQTVZFQ19QSU9fUEMxMQkJKCh1c2hvcnQpMHgwZikKKyNkZWZpbmUJQ1BNVkVDX1BJT19QQzEwCQkoKHVzaG9ydCkweDBlKQorI2RlZmluZSBDUE1WRUNfVElNRVIzCQkoKHVzaG9ydCkweDBjKQorI2RlZmluZQlDUE1WRUNfUElPX1BDOQkJKCh1c2hvcnQpMHgwYikKKyNkZWZpbmUJQ1BNVkVDX1BJT19QQzgJCSgodXNob3J0KTB4MGEpCisjZGVmaW5lCUNQTVZFQ19QSU9fUEM3CQkoKHVzaG9ydCkweDA5KQorI2RlZmluZSBDUE1WRUNfVElNRVI0CQkoKHVzaG9ydCkweDA3KQorI2RlZmluZQlDUE1WRUNfUElPX1BDNgkJKCh1c2hvcnQpMHgwNikKKyNkZWZpbmUJQ1BNVkVDX1NQSQkJKCh1c2hvcnQpMHgwNSkKKyNkZWZpbmUJQ1BNVkVDX1NNQzEJCSgodXNob3J0KTB4MDQpCisjZGVmaW5lCUNQTVZFQ19TTUMyCQkoKHVzaG9ydCkweDAzKQorI2RlZmluZQlDUE1WRUNfUElPX1BDNQkJKCh1c2hvcnQpMHgwMikKKyNkZWZpbmUJQ1BNVkVDX1BJT19QQzQJCSgodXNob3J0KTB4MDEpCisjZGVmaW5lCUNQTVZFQ19FUlJPUgkJKCh1c2hvcnQpMHgwMCkKKworLyogQ1BNIGludGVycnVwdCBjb25maWd1cmF0aW9uIHZlY3Rvci4KKyovCisjZGVmaW5lCUNJQ1JfU0NEX1NDQzQJCSgodWludCkweDAwYzAwMDAwKQkvKiBTQ0M0IEAgU0NDZCAqLworI2RlZmluZQlDSUNSX1NDQ19TQ0MzCQkoKHVpbnQpMHgwMDIwMDAwMCkJLyogU0NDMyBAIFNDQ2MgKi8KKyNkZWZpbmUJQ0lDUl9TQ0JfU0NDMgkJKCh1aW50KTB4MDAwNDAwMDApCS8qIFNDQzIgQCBTQ0NiICovCisjZGVmaW5lCUNJQ1JfU0NBX1NDQzEJCSgodWludCkweDAwMDAwMDAwKQkvKiBTQ0MxIEAgU0NDYSAqLworI2RlZmluZSBDSUNSX0lSTF9NQVNLCQkoKHVpbnQpMHgwMDAwZTAwMCkJLyogQ29yZSBpbnRlcnJydXB0ICovCisjZGVmaW5lIENJQ1JfSFBfTUFTSwkJKCh1aW50KTB4MDAwMDFmMDApCS8qIEhpLXByaSBpbnQuICovCisjZGVmaW5lIENJQ1JfSUVOCQkoKHVpbnQpMHgwMDAwMDA4MCkJLyogSW50LiBlbmFibGUgKi8KKyNkZWZpbmUgQ0lDUl9TUFMJCSgodWludCkweDAwMDAwMDAxKQkvKiBTQ0MgU3ByZWFkICovCisKK2V4dGVybiB2b2lkIGNwbV9pbnN0YWxsX2hhbmRsZXIoaW50IHZlYywKKwkJdm9pZCAoKmhhbmRsZXIpKHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpLCB2b2lkICpkZXZfaWQpOworZXh0ZXJuIHZvaWQgY3BtX2ZyZWVfaGFuZGxlcihpbnQgdmVjKTsKKworI2VuZGlmIC8qIF9fQ1BNXzhYWF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvY3BtMi5oIGIvaW5jbHVkZS9hc20tcHBjL2NwbTIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmZkMTA2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjL2NwbTIuaApAQCAtMCwwICsxLDEwNDUgQEAKKy8qCisgKiBDb21tdW5pY2F0aW9uIFByb2Nlc3NvciBNb2R1bGUgdjIuCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHN0cnVjdHVyZXMgYW5kIGluZm9ybWF0aW9uIGZvciB0aGUgY29tbXVuaWNhdGlvbgorICogcHJvY2Vzc29yIGNoYW5uZWxzIGZvdW5kIGluIHRoZSBkdWFsIHBvcnQgUkFNIG9yIHBhcmFtZXRlciBSQU0uCisgKiBBbGwgQ1BNIGNvbnRyb2wgYW5kIHN0YXR1cyBpcyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgQ1BNMiBpbnRlcm5hbAorICogbWVtb3J5IG1hcC4gIFNlZSBpbW1hcF9jcG0yLmggZm9yIGRldGFpbHMuCisgKi8KKyNpZmRlZiBfX0tFUk5FTF9fCisjaWZuZGVmIF9fQ1BNMl9fCisjZGVmaW5lIF9fQ1BNMl9fCisKKyNpbmNsdWRlIDxhc20vaW1tYXBfY3BtMi5oPgorCisvKiBDUE0gQ29tbWFuZCByZWdpc3Rlci4KKyovCisjZGVmaW5lIENQTV9DUl9SU1QJKCh1aW50KTB4ODAwMDAwMDApCisjZGVmaW5lIENQTV9DUl9QQUdFCSgodWludCkweDdjMDAwMDAwKQorI2RlZmluZSBDUE1fQ1JfU0JMT0NLCSgodWludCkweDAzZTAwMDAwKQorI2RlZmluZSBDUE1fQ1JfRkxHCSgodWludCkweDAwMDEwMDAwKQorI2RlZmluZSBDUE1fQ1JfTUNOCSgodWludCkweDAwMDAzZmMwKQorI2RlZmluZSBDUE1fQ1JfT1BDT0RFCSgodWludCkweDAwMDAwMDBmKQorCisvKiBEZXZpY2Ugc3ViLWJsb2NrIGFuZCBwYWdlIGNvZGVzLgorKi8KKyNkZWZpbmUgQ1BNX0NSX1NDQzFfU0JMT0NLCSgweDA0KQorI2RlZmluZSBDUE1fQ1JfU0NDMl9TQkxPQ0sJKDB4MDUpCisjZGVmaW5lIENQTV9DUl9TQ0MzX1NCTE9DSwkoMHgwNikKKyNkZWZpbmUgQ1BNX0NSX1NDQzRfU0JMT0NLCSgweDA3KQorI2RlZmluZSBDUE1fQ1JfU01DMV9TQkxPQ0sJKDB4MDgpCisjZGVmaW5lIENQTV9DUl9TTUMyX1NCTE9DSwkoMHgwOSkKKyNkZWZpbmUgQ1BNX0NSX1NQSV9TQkxPQ0sJKDB4MGEpCisjZGVmaW5lIENQTV9DUl9JMkNfU0JMT0NLCSgweDBiKQorI2RlZmluZSBDUE1fQ1JfVElNRVJfU0JMT0NLCSgweDBmKQorI2RlZmluZSBDUE1fQ1JfUkFORF9TQkxPQ0sJKDB4MGUpCisjZGVmaW5lIENQTV9DUl9GQ0MxX1NCTE9DSwkoMHgxMCkKKyNkZWZpbmUgQ1BNX0NSX0ZDQzJfU0JMT0NLCSgweDExKQorI2RlZmluZSBDUE1fQ1JfRkNDM19TQkxPQ0sJKDB4MTIpCisjZGVmaW5lIENQTV9DUl9JRE1BMV9TQkxPQ0sJKDB4MTQpCisjZGVmaW5lIENQTV9DUl9JRE1BMl9TQkxPQ0sJKDB4MTUpCisjZGVmaW5lIENQTV9DUl9JRE1BM19TQkxPQ0sJKDB4MTYpCisjZGVmaW5lIENQTV9DUl9JRE1BNF9TQkxPQ0sJKDB4MTcpCisjZGVmaW5lIENQTV9DUl9NQ0MxX1NCTE9DSwkoMHgxYykKKworI2RlZmluZSBDUE1fQ1JfU0NDMV9QQUdFCSgweDAwKQorI2RlZmluZSBDUE1fQ1JfU0NDMl9QQUdFCSgweDAxKQorI2RlZmluZSBDUE1fQ1JfU0NDM19QQUdFCSgweDAyKQorI2RlZmluZSBDUE1fQ1JfU0NDNF9QQUdFCSgweDAzKQorI2RlZmluZSBDUE1fQ1JfU01DMV9QQUdFCSgweDA3KQorI2RlZmluZSBDUE1fQ1JfU01DMl9QQUdFCSgweDA4KQorI2RlZmluZSBDUE1fQ1JfU1BJX1BBR0UJCSgweDA5KQorI2RlZmluZSBDUE1fQ1JfSTJDX1BBR0UJCSgweDBhKQorI2RlZmluZSBDUE1fQ1JfVElNRVJfUEFHRQkoMHgwYSkKKyNkZWZpbmUgQ1BNX0NSX1JBTkRfUEFHRQkoMHgwYSkKKyNkZWZpbmUgQ1BNX0NSX0ZDQzFfUEFHRQkoMHgwNCkKKyNkZWZpbmUgQ1BNX0NSX0ZDQzJfUEFHRQkoMHgwNSkKKyNkZWZpbmUgQ1BNX0NSX0ZDQzNfUEFHRQkoMHgwNikKKyNkZWZpbmUgQ1BNX0NSX0lETUExX1BBR0UJKDB4MDcpCisjZGVmaW5lIENQTV9DUl9JRE1BMl9QQUdFCSgweDA4KQorI2RlZmluZSBDUE1fQ1JfSURNQTNfUEFHRQkoMHgwOSkKKyNkZWZpbmUgQ1BNX0NSX0lETUE0X1BBR0UJKDB4MGEpCisjZGVmaW5lIENQTV9DUl9NQ0MxX1BBR0UJKDB4MDcpCisjZGVmaW5lIENQTV9DUl9NQ0MyX1BBR0UJKDB4MDgpCisKKy8qIFNvbWUgb3Bjb2RlcyAodGhlcmUgYXJlIG1vcmUuLi5sYXRlcikKKyovCisjZGVmaW5lIENQTV9DUl9JTklUX1RSWAkJKCh1c2hvcnQpMHgwMDAwKQorI2RlZmluZSBDUE1fQ1JfSU5JVF9SWAkJKCh1c2hvcnQpMHgwMDAxKQorI2RlZmluZSBDUE1fQ1JfSU5JVF9UWAkJKCh1c2hvcnQpMHgwMDAyKQorI2RlZmluZSBDUE1fQ1JfSFVOVF9NT0RFCSgodXNob3J0KTB4MDAwMykKKyNkZWZpbmUgQ1BNX0NSX1NUT1BfVFgJCSgodXNob3J0KTB4MDAwNCkKKyNkZWZpbmUgQ1BNX0NSX0dSQV9TVE9QX1RYICAgICAgKCh1c2hvcnQpMHgwMDA1KQorI2RlZmluZSBDUE1fQ1JfUkVTVEFSVF9UWAkoKHVzaG9ydCkweDAwMDYpCisjZGVmaW5lIENQTV9DUl9TRVRfR0FERFIJKCh1c2hvcnQpMHgwMDA4KQorI2RlZmluZSBDUE1fQ1JfU1RBUlRfSURNQQkoKHVzaG9ydCkweDAwMDkpCisjZGVmaW5lIENQTV9DUl9TVE9QX0lETUEJKCh1c2hvcnQpMHgwMDBiKQorCisjZGVmaW5lIG1rX2NyX2NtZChQRywgU0JDLCBNQ04sIE9QKSBcCisJKChQRyA8PCAyNikgfCAoU0JDIDw8IDIxKSB8IChNQ04gPDwgNikgfCBPUCkKKworLyogRHVhbCBQb3J0IFJBTSBhZGRyZXNzZXMuICBUaGUgZmlyc3QgMTZLIGlzIGF2YWlsYWJsZSBmb3IgYWxtb3N0CisgKiBhbnkgQ1BNIHVzZSwgc28gd2UgcHV0IHRoZSBCRHMgdGhlcmUuICBUaGUgZmlyc3QgMTI4IGJ5dGVzIGFyZQorICogdXNlZCBmb3IgU01DMSBhbmQgU01DMiBwYXJhbWV0ZXIgUkFNLCBzbyB3ZSBzdGFydCBhbGxvY2F0aW5nCisgKiBCRHMgYWJvdmUgdGhhdC4gIEFsbCBvZiB0aGlzIG11c3QgY2hhbmdlIHdoZW4gd2Ugc3RhcnQKKyAqIGRvd25sb2FkaW5nIFJBTSBtaWNyb2NvZGUuCisgKi8KKyNkZWZpbmUgQ1BNX0RBVEFPTkxZX0JBU0UJKCh1aW50KTEyOCkKKyNkZWZpbmUgQ1BNX0RQX05PU1BBQ0UJCSgodWludCkweDdmZmZmZmZmKQorI2lmIGRlZmluZWQoQ09ORklHXzgyNzIpIHx8IGRlZmluZWQoQ09ORklHX01QQzg1NTUpCisjZGVmaW5lIENQTV9EQVRBT05MWV9TSVpFCSgodWludCkoOCAqIDEwMjQpIC0gQ1BNX0RBVEFPTkxZX0JBU0UpCisjZGVmaW5lIENQTV9GQ0NfU1BFQ0lBTF9CQVNFCSgodWludCkweDAwMDA5MDAwKQorI2Vsc2UKKyNkZWZpbmUgQ1BNX0RBVEFPTkxZX1NJWkUJKCh1aW50KSgxNiAqIDEwMjQpIC0gQ1BNX0RBVEFPTkxZX0JBU0UpCisjZGVmaW5lIENQTV9GQ0NfU1BFQ0lBTF9CQVNFCSgodWludCkweDAwMDBiMDAwKQorI2VuZGlmCisKKy8qIFRoZSBudW1iZXIgb2YgcGFnZXMgb2YgaG9zdCBtZW1vcnkgd2UgYWxsb2NhdGUgZm9yIENQTS4gIFRoaXMgaXMKKyAqIGRvbmUgZWFybHkgaW4ga2VybmVsIGluaXRpYWxpemF0aW9uIHRvIGdldCBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMKKyAqIHBhZ2VzLgorICovCisjZGVmaW5lIE5VTV9DUE1fSE9TVF9QQUdFUwkyCisKK3N0YXRpYyBpbmxpbmUgbG9uZyBJU19EUEVSUihjb25zdCB1aW50IG9mZnNldCkKK3sKKwlyZXR1cm4gKHVpbnQpb2Zmc2V0ID4gKHVpbnQpLTEwMDBMOworfQorCisvKiBFeHBvcnQgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgY29tbXVuaWNhdGlvbiBwcm9jZXNzb3IgcmVnaXN0ZXJzCisgKiBhbmQgZHVhbCBwb3J0IHJhbS4KKyAqLworZXh0ZXJuCQljcG1fY3BtMl90CSpjcG1wOwkgLyogUG9pbnRlciB0byBjb21tIHByb2Nlc3NvciAqLworZXh0ZXJuIHVpbnQgY3BtX2RwYWxsb2ModWludCBzaXplLCB1aW50IGFsaWduKTsKK2V4dGVybiBpbnQgY3BtX2RwZnJlZSh1aW50IG9mZnNldCk7CitleHRlcm4gdWludCBjcG1fZHBhbGxvY19maXhlZCh1aW50IG9mZnNldCwgdWludCBzaXplLCB1aW50IGFsaWduKTsKK2V4dGVybiB2b2lkIGNwbV9kcGR1bXAodm9pZCk7CitleHRlcm4gdm9pZCAqY3BtX2RwcmFtX2FkZHIodWludCBvZmZzZXQpOworZXh0ZXJuIHZvaWQgY3BtX3NldGJyZyh1aW50IGJyZywgdWludCByYXRlKTsKK2V4dGVybiB2b2lkIGNwbTJfZmFzdGJyZyh1aW50IGJyZywgdWludCByYXRlLCBpbnQgZGl2MTYpOworCisvKiBCdWZmZXIgZGVzY3JpcHRvcnMgdXNlZCBieSBtYW55IG9mIHRoZSBDUE0gcHJvdG9jb2xzLgorKi8KK3R5cGVkZWYgc3RydWN0IGNwbV9idWZfZGVzYyB7CisJdXNob3J0CWNiZF9zYzsJCS8qIFN0YXR1cyBhbmQgQ29udHJvbCAqLworCXVzaG9ydAljYmRfZGF0bGVuOwkvKiBEYXRhIGxlbmd0aCBpbiBidWZmZXIgKi8KKwl1aW50CWNiZF9idWZhZGRyOwkvKiBCdWZmZXIgYWRkcmVzcyBpbiBob3N0IG1lbW9yeSAqLworfSBjYmRfdDsKKworI2RlZmluZSBCRF9TQ19FTVBUWQkoKHVzaG9ydCkweDgwMDApCS8qIFJlY2VpdmUgaXMgZW1wdHkgKi8KKyNkZWZpbmUgQkRfU0NfUkVBRFkJKCh1c2hvcnQpMHg4MDAwKQkvKiBUcmFuc21pdCBpcyByZWFkeSAqLworI2RlZmluZSBCRF9TQ19XUkFQCSgodXNob3J0KTB4MjAwMCkJLyogTGFzdCBidWZmZXIgZGVzY3JpcHRvciAqLworI2RlZmluZSBCRF9TQ19JTlRSUFQJKCh1c2hvcnQpMHgxMDAwKQkvKiBJbnRlcnJ1cHQgb24gY2hhbmdlICovCisjZGVmaW5lIEJEX1NDX0xBU1QJKCh1c2hvcnQpMHgwODAwKQkvKiBMYXN0IGJ1ZmZlciBpbiBmcmFtZSAqLworI2RlZmluZSBCRF9TQ19DTQkoKHVzaG9ydCkweDAyMDApCS8qIENvbnRpbm91cyBtb2RlICovCisjZGVmaW5lIEJEX1NDX0lECSgodXNob3J0KTB4MDEwMCkJLyogUmVjJ2QgdG9vIG1hbnkgaWRsZXMgKi8KKyNkZWZpbmUgQkRfU0NfUAkJKCh1c2hvcnQpMHgwMTAwKQkvKiB4bXQgcHJlYW1ibGUgKi8KKyNkZWZpbmUgQkRfU0NfQlIJKCh1c2hvcnQpMHgwMDIwKQkvKiBCcmVhayByZWNlaXZlZCAqLworI2RlZmluZSBCRF9TQ19GUgkoKHVzaG9ydCkweDAwMTApCS8qIEZyYW1pbmcgZXJyb3IgKi8KKyNkZWZpbmUgQkRfU0NfUFIJKCh1c2hvcnQpMHgwMDA4KQkvKiBQYXJpdHkgZXJyb3IgKi8KKyNkZWZpbmUgQkRfU0NfT1YJKCh1c2hvcnQpMHgwMDAyKQkvKiBPdmVycnVuICovCisjZGVmaW5lIEJEX1NDX0NECSgodXNob3J0KTB4MDAwMSkJLyogPz8gKi8KKworLyogRnVuY3Rpb24gY29kZSBiaXRzLCB1c3VhbGx5IGdlbmVyaWMgdG8gZGV2aWNlcy4KKyovCisjZGVmaW5lIENQTUZDUl9HQkwJKCh1X2NoYXIpMHgyMCkJLyogU2V0IG1lbW9yeSBzbm9vcGluZyAqLworI2RlZmluZSBDUE1GQ1JfRUIJKCh1X2NoYXIpMHgxMCkJLyogU2V0IGJpZyBlbmRpYW4gYnl0ZSBvcmRlciAqLworI2RlZmluZSBDUE1GQ1JfVEMyCSgodV9jaGFyKTB4MDQpCS8qIFRyYW5zZmVyIGNvZGUgMiB2YWx1ZSAqLworI2RlZmluZSBDUE1GQ1JfRFRCCSgodV9jaGFyKTB4MDIpCS8qIFVzZSBsb2NhbCBidXMgZm9yIGRhdGEgd2hlbiBzZXQgKi8KKyNkZWZpbmUgQ1BNRkNSX0JEQgkoKHVfY2hhcikweDAxKQkvKiBVc2UgbG9jYWwgYnVzIGZvciBCRCB3aGVuIHNldCAqLworCisvKiBQYXJhbWV0ZXIgUkFNIG9mZnNldHMgZnJvbSB0aGUgYmFzZS4KKyovCisjZGVmaW5lIFBST0ZGX1NDQzEJCSgodWludCkweDgwMDApCisjZGVmaW5lIFBST0ZGX1NDQzIJCSgodWludCkweDgxMDApCisjZGVmaW5lIFBST0ZGX1NDQzMJCSgodWludCkweDgyMDApCisjZGVmaW5lIFBST0ZGX1NDQzQJCSgodWludCkweDgzMDApCisjZGVmaW5lIFBST0ZGX0ZDQzEJCSgodWludCkweDg0MDApCisjZGVmaW5lIFBST0ZGX0ZDQzIJCSgodWludCkweDg1MDApCisjZGVmaW5lIFBST0ZGX0ZDQzMJCSgodWludCkweDg2MDApCisjZGVmaW5lIFBST0ZGX01DQzEJCSgodWludCkweDg3MDApCisjZGVmaW5lIFBST0ZGX1NNQzFfQkFTRQkJKCh1aW50KTB4ODdmYykKKyNkZWZpbmUgUFJPRkZfSURNQTFfQkFTRQkoKHVpbnQpMHg4N2ZlKQorI2RlZmluZSBQUk9GRl9NQ0MyCQkoKHVpbnQpMHg4ODAwKQorI2RlZmluZSBQUk9GRl9TTUMyX0JBU0UJCSgodWludCkweDg4ZmMpCisjZGVmaW5lIFBST0ZGX0lETUEyX0JBU0UJKCh1aW50KTB4ODhmZSkKKyNkZWZpbmUgUFJPRkZfU1BJX0JBU0UJCSgodWludCkweDg5ZmMpCisjZGVmaW5lIFBST0ZGX0lETUEzX0JBU0UJKCh1aW50KTB4ODlmZSkKKyNkZWZpbmUgUFJPRkZfVElNRVJTCQkoKHVpbnQpMHg4YWUwKQorI2RlZmluZSBQUk9GRl9SRVZOVU0JCSgodWludCkweDhhZjApCisjZGVmaW5lIFBST0ZGX1JBTkQJCSgodWludCkweDhhZjgpCisjZGVmaW5lIFBST0ZGX0kyQ19CQVNFCQkoKHVpbnQpMHg4YWZjKQorI2RlZmluZSBQUk9GRl9JRE1BNF9CQVNFCSgodWludCkweDhhZmUpCisKKy8qIFRoZSBTTUNzIGFyZSByZWxvY2F0ZWQgdG8gYW55IG9mIHRoZSBmaXJzdCBlaWdodCBEUFJBTSBwYWdlcy4KKyAqIFdlIHdpbGwgZml4IHRoZXNlIGF0IHRoZSBmaXJzdCBsb2NhdGlvbnMgb2YgRFBSQU0sIHVudGlsIHdlCisgKiBnZXQgc29tZSBtaWNyb2NvZGUgcGF0Y2hlcyA6LSkuCisgKiBUaGUgcGFyYW1ldGVyIHJhbSBzcGFjZSBmb3IgdGhlIFNNQ3MgaXMgZmlmdHktc29tZSBieXRlcywgYW5kCisgKiB0aGV5IGFyZSByZXF1aXJlZCB0byBzdGFydCBvbiBhIDY0IGJ5dGUgYm91bmRhcnkuCisgKi8KKyNkZWZpbmUgUFJPRkZfU01DMQkoMCkKKyNkZWZpbmUgUFJPRkZfU01DMgkoNjQpCisKKworLyogRGVmaW5lIGVub3VnaCBzbyBJIGNhbiBhdCBsZWFzdCB1c2UgdGhlIHNlcmlhbCBwb3J0IGFzIGEgVUFSVC4KKyAqLwordHlwZWRlZiBzdHJ1Y3Qgc21jX3VhcnQgeworCXVzaG9ydAlzbWNfcmJhc2U7CS8qIFJ4IEJ1ZmZlciBkZXNjcmlwdG9yIGJhc2UgYWRkcmVzcyAqLworCXVzaG9ydAlzbWNfdGJhc2U7CS8qIFR4IEJ1ZmZlciBkZXNjcmlwdG9yIGJhc2UgYWRkcmVzcyAqLworCXVfY2hhcglzbWNfcmZjcjsJLyogUnggZnVuY3Rpb24gY29kZSAqLworCXVfY2hhcglzbWNfdGZjcjsJLyogVHggZnVuY3Rpb24gY29kZSAqLworCXVzaG9ydAlzbWNfbXJibHI7CS8qIE1heCByZWNlaXZlIGJ1ZmZlciBsZW5ndGggKi8KKwl1aW50CXNtY19yc3RhdGU7CS8qIEludGVybmFsICovCisJdWludAlzbWNfaWRwOwkvKiBJbnRlcm5hbCAqLworCXVzaG9ydAlzbWNfcmJwdHI7CS8qIEludGVybmFsICovCisJdXNob3J0CXNtY19pYmM7CS8qIEludGVybmFsICovCisJdWludAlzbWNfcnh0bXA7CS8qIEludGVybmFsICovCisJdWludAlzbWNfdHN0YXRlOwkvKiBJbnRlcm5hbCAqLworCXVpbnQJc21jX3RkcDsJLyogSW50ZXJuYWwgKi8KKwl1c2hvcnQJc21jX3RicHRyOwkvKiBJbnRlcm5hbCAqLworCXVzaG9ydAlzbWNfdGJjOwkvKiBJbnRlcm5hbCAqLworCXVpbnQJc21jX3R4dG1wOwkvKiBJbnRlcm5hbCAqLworCXVzaG9ydAlzbWNfbWF4aWRsOwkvKiBNYXhpbXVtIGlkbGUgY2hhcmFjdGVycyAqLworCXVzaG9ydAlzbWNfdG1waWRsOwkvKiBUZW1wb3JhcnkgaWRsZSBjb3VudGVyICovCisJdXNob3J0CXNtY19icmtsZW47CS8qIExhc3QgcmVjZWl2ZWQgYnJlYWsgbGVuZ3RoICovCisJdXNob3J0CXNtY19icmtlYzsJLyogcmN2J2QgYnJlYWsgY29uZGl0aW9uIGNvdW50ZXIgKi8KKwl1c2hvcnQJc21jX2Jya2NyOwkvKiB4bXQgYnJlYWsgY291bnQgcmVnaXN0ZXIgKi8KKwl1c2hvcnQJc21jX3JtYXNrOwkvKiBUZW1wb3JhcnkgYml0IG1hc2sgKi8KKwl1aW50CXNtY19zdG1wOwkvKiBTRE1BIFRlbXAgKi8KK30gc21jX3VhcnRfdDsKKworLyogU01DIHVhcnQgbW9kZSByZWdpc3RlciAoSW50ZXJuYWwgbWVtb3J5IG1hcCkuCisqLworI2RlZmluZSBTTUNNUl9SRU4JKCh1c2hvcnQpMHgwMDAxKQorI2RlZmluZSBTTUNNUl9URU4JKCh1c2hvcnQpMHgwMDAyKQorI2RlZmluZSBTTUNNUl9ETQkoKHVzaG9ydCkweDAwMGMpCisjZGVmaW5lIFNNQ01SX1NNX0dDSQkoKHVzaG9ydCkweDAwMDApCisjZGVmaW5lIFNNQ01SX1NNX1VBUlQJKCh1c2hvcnQpMHgwMDIwKQorI2RlZmluZSBTTUNNUl9TTV9UUkFOUwkoKHVzaG9ydCkweDAwMzApCisjZGVmaW5lIFNNQ01SX1NNX01BU0sJKCh1c2hvcnQpMHgwMDMwKQorI2RlZmluZSBTTUNNUl9QTV9FVkVOCSgodXNob3J0KTB4MDEwMCkJLyogRXZlbiBwYXJpdHksIGVsc2Ugb2RkICovCisjZGVmaW5lIFNNQ01SX1JFVkQJU01DTVJfUE1fRVZFTgorI2RlZmluZSBTTUNNUl9QRU4JKCh1c2hvcnQpMHgwMjAwKQkvKiBQYXJpdHkgZW5hYmxlICovCisjZGVmaW5lIFNNQ01SX0JTCVNNQ01SX1BFTgorI2RlZmluZSBTTUNNUl9TTAkoKHVzaG9ydCkweDA0MDApCS8qIFR3byBzdG9wcywgZWxzZSBvbmUgKi8KKyNkZWZpbmUgU01DUl9DTEVOX01BU0sJKCh1c2hvcnQpMHg3ODAwKQkvKiBDaGFyYWN0ZXIgbGVuZ3RoICovCisjZGVmaW5lIHNtY3JfbWtfY2xlbihDKQkoKChDKSA8PCAxMSkgJiBTTUNSX0NMRU5fTUFTSykKKworLyogU01DIEV2ZW50IGFuZCBNYXNrIHJlZ2lzdGVyLgorKi8KKyNkZWZpbmUgU01DTV9CUktFICAgICAgICgodW5zaWduZWQgY2hhcikweDQwKSAgIC8qIFdoZW4gaW4gVUFSVCBNb2RlICovCisjZGVmaW5lIFNNQ01fQlJLICAgICAgICAoKHVuc2lnbmVkIGNoYXIpMHgxMCkgICAvKiBXaGVuIGluIFVBUlQgTW9kZSAqLworI2RlZmluZSBTTUNNX1RYRQkoKHVuc2lnbmVkIGNoYXIpMHgxMCkKKyNkZWZpbmUgU01DTV9CU1kJKCh1bnNpZ25lZCBjaGFyKTB4MDQpCisjZGVmaW5lIFNNQ01fVFgJCSgodW5zaWduZWQgY2hhcikweDAyKQorI2RlZmluZSBTTUNNX1JYCQkoKHVuc2lnbmVkIGNoYXIpMHgwMSkKKworLyogQmF1ZCByYXRlIGdlbmVyYXRvcnMuCisqLworI2RlZmluZSBDUE1fQlJHX1JTVAkJKCh1aW50KTB4MDAwMjAwMDApCisjZGVmaW5lIENQTV9CUkdfRU4JCSgodWludCkweDAwMDEwMDAwKQorI2RlZmluZSBDUE1fQlJHX0VYVENfSU5UCSgodWludCkweDAwMDAwMDAwKQorI2RlZmluZSBDUE1fQlJHX0VYVENfQ0xLM185CSgodWludCkweDAwMDA0MDAwKQorI2RlZmluZSBDUE1fQlJHX0VYVENfQ0xLNV8xNQkoKHVpbnQpMHgwMDAwODAwMCkKKyNkZWZpbmUgQ1BNX0JSR19BVEIJCSgodWludCkweDAwMDAyMDAwKQorI2RlZmluZSBDUE1fQlJHX0NEX01BU0sJCSgodWludCkweDAwMDAxZmZlKQorI2RlZmluZSBDUE1fQlJHX0RJVjE2CQkoKHVpbnQpMHgwMDAwMDAwMSkKKworLyogU0NDcy4KKyovCisjZGVmaW5lIFNDQ19HU01SSF9JUlAJCSgodWludCkweDAwMDQwMDAwKQorI2RlZmluZSBTQ0NfR1NNUkhfR0RFCQkoKHVpbnQpMHgwMDAxMDAwMCkKKyNkZWZpbmUgU0NDX0dTTVJIX1RDUkNfQ0NJVFQJKCh1aW50KTB4MDAwMDgwMDApCisjZGVmaW5lIFNDQ19HU01SSF9UQ1JDX0JJU1lOQwkoKHVpbnQpMHgwMDAwNDAwMCkKKyNkZWZpbmUgU0NDX0dTTVJIX1RDUkNfSERMQwkoKHVpbnQpMHgwMDAwMDAwMCkKKyNkZWZpbmUgU0NDX0dTTVJIX1JFVkQJCSgodWludCkweDAwMDAyMDAwKQorI2RlZmluZSBTQ0NfR1NNUkhfVFJYCQkoKHVpbnQpMHgwMDAwMTAwMCkKKyNkZWZpbmUgU0NDX0dTTVJIX1RUWAkJKCh1aW50KTB4MDAwMDA4MDApCisjZGVmaW5lIFNDQ19HU01SSF9DRFAJCSgodWludCkweDAwMDAwNDAwKQorI2RlZmluZSBTQ0NfR1NNUkhfQ1RTUAkJKCh1aW50KTB4MDAwMDAyMDApCisjZGVmaW5lIFNDQ19HU01SSF9DRFMJCSgodWludCkweDAwMDAwMTAwKQorI2RlZmluZSBTQ0NfR1NNUkhfQ1RTUwkJKCh1aW50KTB4MDAwMDAwODApCisjZGVmaW5lIFNDQ19HU01SSF9URkwJCSgodWludCkweDAwMDAwMDQwKQorI2RlZmluZSBTQ0NfR1NNUkhfUkZXCQkoKHVpbnQpMHgwMDAwMDAyMCkKKyNkZWZpbmUgU0NDX0dTTVJIX1RYU1kJCSgodWludCkweDAwMDAwMDEwKQorI2RlZmluZSBTQ0NfR1NNUkhfU1lOTDE2CSgodWludCkweDAwMDAwMDBjKQorI2RlZmluZSBTQ0NfR1NNUkhfU1lOTDgJCSgodWludCkweDAwMDAwMDA4KQorI2RlZmluZSBTQ0NfR1NNUkhfU1lOTDQJCSgodWludCkweDAwMDAwMDA0KQorI2RlZmluZSBTQ0NfR1NNUkhfUlRTTQkJKCh1aW50KTB4MDAwMDAwMDIpCisjZGVmaW5lIFNDQ19HU01SSF9SU1lOCQkoKHVpbnQpMHgwMDAwMDAwMSkKKworI2RlZmluZSBTQ0NfR1NNUkxfU0lSCQkoKHVpbnQpMHg4MDAwMDAwMCkJLyogU0NDMiBvbmx5ICovCisjZGVmaW5lIFNDQ19HU01STF9FREdFX05PTkUJKCh1aW50KTB4NjAwMDAwMDApCisjZGVmaW5lIFNDQ19HU01STF9FREdFX05FRwkoKHVpbnQpMHg0MDAwMDAwMCkKKyNkZWZpbmUgU0NDX0dTTVJMX0VER0VfUE9TCSgodWludCkweDIwMDAwMDAwKQorI2RlZmluZSBTQ0NfR1NNUkxfRURHRV9CT1RICSgodWludCkweDAwMDAwMDAwKQorI2RlZmluZSBTQ0NfR1NNUkxfVENJCQkoKHVpbnQpMHgxMDAwMDAwMCkKKyNkZWZpbmUgU0NDX0dTTVJMX1RTTkNfMwkoKHVpbnQpMHgwYzAwMDAwMCkKKyNkZWZpbmUgU0NDX0dTTVJMX1RTTkNfNAkoKHVpbnQpMHgwODAwMDAwMCkKKyNkZWZpbmUgU0NDX0dTTVJMX1RTTkNfMTQJKCh1aW50KTB4MDQwMDAwMDApCisjZGVmaW5lIFNDQ19HU01STF9UU05DX0lORgkoKHVpbnQpMHgwMDAwMDAwMCkKKyNkZWZpbmUgU0NDX0dTTVJMX1JJTlYJCSgodWludCkweDAyMDAwMDAwKQorI2RlZmluZSBTQ0NfR1NNUkxfVElOVgkJKCh1aW50KTB4MDEwMDAwMDApCisjZGVmaW5lIFNDQ19HU01STF9UUExfMTI4CSgodWludCkweDAwYzAwMDAwKQorI2RlZmluZSBTQ0NfR1NNUkxfVFBMXzY0CSgodWludCkweDAwYTAwMDAwKQorI2RlZmluZSBTQ0NfR1NNUkxfVFBMXzQ4CSgodWludCkweDAwODAwMDAwKQorI2RlZmluZSBTQ0NfR1NNUkxfVFBMXzMyCSgodWludCkweDAwNjAwMDAwKQorI2RlZmluZSBTQ0NfR1NNUkxfVFBMXzE2CSgodWludCkweDAwNDAwMDAwKQorI2RlZmluZSBTQ0NfR1NNUkxfVFBMXzgJCSgodWludCkweDAwMjAwMDAwKQorI2RlZmluZSBTQ0NfR1NNUkxfVFBMX05PTkUJKCh1aW50KTB4MDAwMDAwMDApCisjZGVmaW5lIFNDQ19HU01STF9UUFBfQUxMMQkoKHVpbnQpMHgwMDE4MDAwMCkKKyNkZWZpbmUgU0NDX0dTTVJMX1RQUF8wMQkoKHVpbnQpMHgwMDEwMDAwMCkKKyNkZWZpbmUgU0NDX0dTTVJMX1RQUF8xMAkoKHVpbnQpMHgwMDA4MDAwMCkKKyNkZWZpbmUgU0NDX0dTTVJMX1RQUF9aRVJPUwkoKHVpbnQpMHgwMDAwMDAwMCkKKyNkZWZpbmUgU0NDX0dTTVJMX1RFTkQJCSgodWludCkweDAwMDQwMDAwKQorI2RlZmluZSBTQ0NfR1NNUkxfVERDUl8zMgkoKHVpbnQpMHgwMDAzMDAwMCkKKyNkZWZpbmUgU0NDX0dTTVJMX1REQ1JfMTYJKCh1aW50KTB4MDAwMjAwMDApCisjZGVmaW5lIFNDQ19HU01STF9URENSXzgJKCh1aW50KTB4MDAwMTAwMDApCisjZGVmaW5lIFNDQ19HU01STF9URENSXzEJKCh1aW50KTB4MDAwMDAwMDApCisjZGVmaW5lIFNDQ19HU01STF9SRENSXzMyCSgodWludCkweDAwMDBjMDAwKQorI2RlZmluZSBTQ0NfR1NNUkxfUkRDUl8xNgkoKHVpbnQpMHgwMDAwODAwMCkKKyNkZWZpbmUgU0NDX0dTTVJMX1JEQ1JfOAkoKHVpbnQpMHgwMDAwNDAwMCkKKyNkZWZpbmUgU0NDX0dTTVJMX1JEQ1JfMQkoKHVpbnQpMHgwMDAwMDAwMCkKKyNkZWZpbmUgU0NDX0dTTVJMX1JFTkNfREZNQU4JKCh1aW50KTB4MDAwMDMwMDApCisjZGVmaW5lIFNDQ19HU01STF9SRU5DX01BTkNICSgodWludCkweDAwMDAyMDAwKQorI2RlZmluZSBTQ0NfR1NNUkxfUkVOQ19GTTAJKCh1aW50KTB4MDAwMDEwMDApCisjZGVmaW5lIFNDQ19HU01STF9SRU5DX05SWkkJKCh1aW50KTB4MDAwMDA4MDApCisjZGVmaW5lIFNDQ19HU01STF9SRU5DX05SWgkoKHVpbnQpMHgwMDAwMDAwMCkKKyNkZWZpbmUgU0NDX0dTTVJMX1RFTkNfREZNQU4JKCh1aW50KTB4MDAwMDA2MDApCisjZGVmaW5lIFNDQ19HU01STF9URU5DX01BTkNICSgodWludCkweDAwMDAwNDAwKQorI2RlZmluZSBTQ0NfR1NNUkxfVEVOQ19GTTAJKCh1aW50KTB4MDAwMDAyMDApCisjZGVmaW5lIFNDQ19HU01STF9URU5DX05SWkkJKCh1aW50KTB4MDAwMDAxMDApCisjZGVmaW5lIFNDQ19HU01STF9URU5DX05SWgkoKHVpbnQpMHgwMDAwMDAwMCkKKyNkZWZpbmUgU0NDX0dTTVJMX0RJQUdfTEUJKCh1aW50KTB4MDAwMDAwYzApCS8qIExvb3AgYW5kIGVjaG8gKi8KKyNkZWZpbmUgU0NDX0dTTVJMX0RJQUdfRUNITwkoKHVpbnQpMHgwMDAwMDA4MCkKKyNkZWZpbmUgU0NDX0dTTVJMX0RJQUdfTE9PUAkoKHVpbnQpMHgwMDAwMDA0MCkKKyNkZWZpbmUgU0NDX0dTTVJMX0RJQUdfTk9STQkoKHVpbnQpMHgwMDAwMDAwMCkKKyNkZWZpbmUgU0NDX0dTTVJMX0VOUgkJKCh1aW50KTB4MDAwMDAwMjApCisjZGVmaW5lIFNDQ19HU01STF9FTlQJCSgodWludCkweDAwMDAwMDEwKQorI2RlZmluZSBTQ0NfR1NNUkxfTU9ERV9FTkVUCSgodWludCkweDAwMDAwMDBjKQorI2RlZmluZSBTQ0NfR1NNUkxfTU9ERV9ERENNUAkoKHVpbnQpMHgwMDAwMDAwOSkKKyNkZWZpbmUgU0NDX0dTTVJMX01PREVfQklTWU5DCSgodWludCkweDAwMDAwMDA4KQorI2RlZmluZSBTQ0NfR1NNUkxfTU9ERV9WMTQJKCh1aW50KTB4MDAwMDAwMDcpCisjZGVmaW5lIFNDQ19HU01STF9NT0RFX0FIRExDCSgodWludCkweDAwMDAwMDA2KQorI2RlZmluZSBTQ0NfR1NNUkxfTU9ERV9QUk9GSUJVUwkoKHVpbnQpMHgwMDAwMDAwNSkKKyNkZWZpbmUgU0NDX0dTTVJMX01PREVfVUFSVAkoKHVpbnQpMHgwMDAwMDAwNCkKKyNkZWZpbmUgU0NDX0dTTVJMX01PREVfU1M3CSgodWludCkweDAwMDAwMDAzKQorI2RlZmluZSBTQ0NfR1NNUkxfTU9ERV9BVEFMSwkoKHVpbnQpMHgwMDAwMDAwMikKKyNkZWZpbmUgU0NDX0dTTVJMX01PREVfSERMQwkoKHVpbnQpMHgwMDAwMDAwMCkKKworI2RlZmluZSBTQ0NfVE9EUl9UT0QJCSgodXNob3J0KTB4ODAwMCkKKworLyogU0NDIEV2ZW50IGFuZCBNYXNrIHJlZ2lzdGVyLgorKi8KKyNkZWZpbmUgU0NDTV9UWEUJKCh1bnNpZ25lZCBjaGFyKTB4MTApCisjZGVmaW5lIFNDQ01fQlNZCSgodW5zaWduZWQgY2hhcikweDA0KQorI2RlZmluZSBTQ0NNX1RYCQkoKHVuc2lnbmVkIGNoYXIpMHgwMikKKyNkZWZpbmUgU0NDTV9SWAkJKCh1bnNpZ25lZCBjaGFyKTB4MDEpCisKK3R5cGVkZWYgc3RydWN0IHNjY19wYXJhbSB7CisJdXNob3J0CXNjY19yYmFzZTsJLyogUnggQnVmZmVyIGRlc2NyaXB0b3IgYmFzZSBhZGRyZXNzICovCisJdXNob3J0CXNjY190YmFzZTsJLyogVHggQnVmZmVyIGRlc2NyaXB0b3IgYmFzZSBhZGRyZXNzICovCisJdV9jaGFyCXNjY19yZmNyOwkvKiBSeCBmdW5jdGlvbiBjb2RlICovCisJdV9jaGFyCXNjY190ZmNyOwkvKiBUeCBmdW5jdGlvbiBjb2RlICovCisJdXNob3J0CXNjY19tcmJscjsJLyogTWF4IHJlY2VpdmUgYnVmZmVyIGxlbmd0aCAqLworCXVpbnQJc2NjX3JzdGF0ZTsJLyogSW50ZXJuYWwgKi8KKwl1aW50CXNjY19pZHA7CS8qIEludGVybmFsICovCisJdXNob3J0CXNjY19yYnB0cjsJLyogSW50ZXJuYWwgKi8KKwl1c2hvcnQJc2NjX2liYzsJLyogSW50ZXJuYWwgKi8KKwl1aW50CXNjY19yeHRtcDsJLyogSW50ZXJuYWwgKi8KKwl1aW50CXNjY190c3RhdGU7CS8qIEludGVybmFsICovCisJdWludAlzY2NfdGRwOwkvKiBJbnRlcm5hbCAqLworCXVzaG9ydAlzY2NfdGJwdHI7CS8qIEludGVybmFsICovCisJdXNob3J0CXNjY190YmM7CS8qIEludGVybmFsICovCisJdWludAlzY2NfdHh0bXA7CS8qIEludGVybmFsICovCisJdWludAlzY2NfcmNyYzsJLyogSW50ZXJuYWwgKi8KKwl1aW50CXNjY190Y3JjOwkvKiBJbnRlcm5hbCAqLworfSBzY2NwX3Q7CisKKy8qIENQTSBFdGhlcm5ldCB0aHJvdWdoIFNDQzEuCisgKi8KK3R5cGVkZWYgc3RydWN0IHNjY19lbmV0IHsKKwlzY2NwX3QJc2VuX2dlbnNjYzsKKwl1aW50CXNlbl9jcHJlczsJLyogUHJlc2V0IENSQyAqLworCXVpbnQJc2VuX2NtYXNrOwkvKiBDb25zdGFudCBtYXNrIGZvciBDUkMgKi8KKwl1aW50CXNlbl9jcmNlYzsJLyogQ1JDIEVycm9yIGNvdW50ZXIgKi8KKwl1aW50CXNlbl9hbGVjOwkvKiBhbGlnbm1lbnQgZXJyb3IgY291bnRlciAqLworCXVpbnQJc2VuX2Rpc2ZjOwkvKiBkaXNjYXJkIGZyYW1lIGNvdW50ZXIgKi8KKwl1c2hvcnQJc2VuX3BhZHM7CS8qIFR4IHNob3J0IGZyYW1lIHBhZCBjaGFyYWN0ZXIgKi8KKwl1c2hvcnQJc2VuX3JldGxpbTsJLyogUmV0cnkgbGltaXQgdGhyZXNob2xkICovCisJdXNob3J0CXNlbl9yZXRjbnQ7CS8qIFJldHJ5IGxpbWl0IGNvdW50ZXIgKi8KKwl1c2hvcnQJc2VuX21heGZscjsJLyogbWF4aW11bSBmcmFtZSBsZW5ndGggcmVnaXN0ZXIgKi8KKwl1c2hvcnQJc2VuX21pbmZscjsJLyogbWluaW11bSBmcmFtZSBsZW5ndGggcmVnaXN0ZXIgKi8KKwl1c2hvcnQJc2VuX21heGQxOwkvKiBtYXhpbXVtIERNQTEgbGVuZ3RoICovCisJdXNob3J0CXNlbl9tYXhkMjsJLyogbWF4aW11bSBETUEyIGxlbmd0aCAqLworCXVzaG9ydAlzZW5fbWF4ZDsJLyogUnggbWF4IERNQSAqLworCXVzaG9ydAlzZW5fZG1hY250OwkvKiBSeCBETUEgY291bnRlciAqLworCXVzaG9ydAlzZW5fbWF4YjsJLyogTWF4IEJEIGJ5dGUgY291bnQgKi8KKwl1c2hvcnQJc2VuX2dhZGRyMTsJLyogR3JvdXAgYWRkcmVzcyBmaWx0ZXIgKi8KKwl1c2hvcnQJc2VuX2dhZGRyMjsKKwl1c2hvcnQJc2VuX2dhZGRyMzsKKwl1c2hvcnQJc2VuX2dhZGRyNDsKKwl1aW50CXNlbl90YnVmMGRhdGEwOwkvKiBTYXZlIGFyZWEgMCAtIGN1cnJlbnQgZnJhbWUgKi8KKwl1aW50CXNlbl90YnVmMGRhdGExOwkvKiBTYXZlIGFyZWEgMSAtIGN1cnJlbnQgZnJhbWUgKi8KKwl1aW50CXNlbl90YnVmMHJiYTsJLyogSW50ZXJuYWwgKi8KKwl1aW50CXNlbl90YnVmMGNyYzsJLyogSW50ZXJuYWwgKi8KKwl1c2hvcnQJc2VuX3RidWYwYmNudDsJLyogSW50ZXJuYWwgKi8KKwl1c2hvcnQJc2VuX3BhZGRyaDsJLyogcGh5c2ljYWwgYWRkcmVzcyAoTVNCKSAqLworCXVzaG9ydAlzZW5fcGFkZHJtOworCXVzaG9ydAlzZW5fcGFkZHJsOwkvKiBwaHlzaWNhbCBhZGRyZXNzIChMU0IpICovCisJdXNob3J0CXNlbl9wcGVyOwkvKiBwZXJzaXN0ZW5jZSAqLworCXVzaG9ydAlzZW5fcmZiZHB0cjsJLyogUnggZmlyc3QgQkQgcG9pbnRlciAqLworCXVzaG9ydAlzZW5fdGZiZHB0cjsJLyogVHggZmlyc3QgQkQgcG9pbnRlciAqLworCXVzaG9ydAlzZW5fdGxiZHB0cjsJLyogVHggbGFzdCBCRCBwb2ludGVyICovCisJdWludAlzZW5fdGJ1ZjFkYXRhMDsJLyogU2F2ZSBhcmVhIDAgLSBjdXJyZW50IGZyYW1lICovCisJdWludAlzZW5fdGJ1ZjFkYXRhMTsJLyogU2F2ZSBhcmVhIDEgLSBjdXJyZW50IGZyYW1lICovCisJdWludAlzZW5fdGJ1ZjFyYmE7CS8qIEludGVybmFsICovCisJdWludAlzZW5fdGJ1ZjFjcmM7CS8qIEludGVybmFsICovCisJdXNob3J0CXNlbl90YnVmMWJjbnQ7CS8qIEludGVybmFsICovCisJdXNob3J0CXNlbl90eGxlbjsJLyogVHggRnJhbWUgbGVuZ3RoIGNvdW50ZXIgKi8KKwl1c2hvcnQJc2VuX2lhZGRyMTsJLyogSW5kaXZpZHVhbCBhZGRyZXNzIGZpbHRlciAqLworCXVzaG9ydAlzZW5faWFkZHIyOworCXVzaG9ydAlzZW5faWFkZHIzOworCXVzaG9ydAlzZW5faWFkZHI0OworCXVzaG9ydAlzZW5fYm9mZmNudDsJLyogQmFja29mZiBjb3VudGVyICovCisKKwkvKiBOT1RFOiBTb21lIHZlcnNpb25zIG9mIHRoZSBtYW51YWwgaGF2ZSB0aGUgZm9sbG93aW5nIGl0ZW1zCisJICogaW5jb3JyZWN0bHkgZG9jdW1lbnRlZC4gIEJlbG93IGlzIHRoZSBwcm9wZXIgb3JkZXIuCisJICovCisJdXNob3J0CXNlbl90YWRkcmg7CS8qIHRlbXAgYWRkcmVzcyAoTVNCKSAqLworCXVzaG9ydAlzZW5fdGFkZHJtOworCXVzaG9ydAlzZW5fdGFkZHJsOwkvKiB0ZW1wIGFkZHJlc3MgKExTQikgKi8KK30gc2NjX2VuZXRfdDsKKworCisvKiBTQ0MgRXZlbnQgcmVnaXN0ZXIgYXMgdXNlZCBieSBFdGhlcm5ldC4KKyovCisjZGVmaW5lIFNDQ0VfRU5FVF9HUkEJKCh1c2hvcnQpMHgwMDgwKQkvKiBHcmFjZWZ1bCBzdG9wIGNvbXBsZXRlICovCisjZGVmaW5lIFNDQ0VfRU5FVF9UWEUJKCh1c2hvcnQpMHgwMDEwKQkvKiBUcmFuc21pdCBFcnJvciAqLworI2RlZmluZSBTQ0NFX0VORVRfUlhGCSgodXNob3J0KTB4MDAwOCkJLyogRnVsbCBmcmFtZSByZWNlaXZlZCAqLworI2RlZmluZSBTQ0NFX0VORVRfQlNZCSgodXNob3J0KTB4MDAwNCkJLyogQWxsIGluY29taW5nIGJ1ZmZlcnMgZnVsbCAqLworI2RlZmluZSBTQ0NFX0VORVRfVFhCCSgodXNob3J0KTB4MDAwMikJLyogQSBidWZmZXIgd2FzIHRyYW5zbWl0dGVkICovCisjZGVmaW5lIFNDQ0VfRU5FVF9SWEIJKCh1c2hvcnQpMHgwMDAxKQkvKiBBIGJ1ZmZlciB3YXMgcmVjZWl2ZWQgKi8KKworLyogU0NDIE1vZGUgUmVnaXN0ZXIgKFBTTVIpIGFzIHVzZWQgYnkgRXRoZXJuZXQuCisqLworI2RlZmluZSBTQ0NfUFNNUl9IQkMJKCh1c2hvcnQpMHg4MDAwKQkvKiBFbmFibGUgaGVhcnRiZWF0ICovCisjZGVmaW5lIFNDQ19QU01SX0ZDCSgodXNob3J0KTB4NDAwMCkJLyogRm9yY2UgY29sbGlzaW9uICovCisjZGVmaW5lIFNDQ19QU01SX1JTSAkoKHVzaG9ydCkweDIwMDApCS8qIFJlY2VpdmUgc2hvcnQgZnJhbWVzICovCisjZGVmaW5lIFNDQ19QU01SX0lBTQkoKHVzaG9ydCkweDEwMDApCS8qIENoZWNrIGluZGl2aWR1YWwgaGFzaCAqLworI2RlZmluZSBTQ0NfUFNNUl9FTkNSQwkoKHVzaG9ydCkweDA4MDApCS8qIEV0aGVybmV0IENSQyBtb2RlICovCisjZGVmaW5lIFNDQ19QU01SX1BSTwkoKHVzaG9ydCkweDAyMDApCS8qIFByb21pc2N1b3VzIG1vZGUgKi8KKyNkZWZpbmUgU0NDX1BTTVJfQlJPCSgodXNob3J0KTB4MDEwMCkJLyogQ2F0Y2ggYnJvYWRjYXN0IHBrdHMgKi8KKyNkZWZpbmUgU0NDX1BTTVJfU0JUCSgodXNob3J0KTB4MDA4MCkJLyogU3BlY2lhbCBiYWNrb2ZmIHRpbWVyICovCisjZGVmaW5lIFNDQ19QU01SX0xQQgkoKHVzaG9ydCkweDAwNDApCS8qIFNldCBMb29wYmFjayBtb2RlICovCisjZGVmaW5lIFNDQ19QU01SX1NJUAkoKHVzaG9ydCkweDAwMjApCS8qIFNhbXBsZSBJbnB1dCBQaW5zICovCisjZGVmaW5lIFNDQ19QU01SX0xDVwkoKHVzaG9ydCkweDAwMTApCS8qIExhdGUgY29sbGlzaW9uIHdpbmRvdyAqLworI2RlZmluZSBTQ0NfUFNNUl9OSUIyMgkoKHVzaG9ydCkweDAwMGEpCS8qIFN0YXJ0IGZyYW1lIHNlYXJjaCAqLworI2RlZmluZSBTQ0NfUFNNUl9GREUJKCh1c2hvcnQpMHgwMDAxKQkvKiBGdWxsIGR1cGxleCBlbmFibGUgKi8KKworLyogQnVmZmVyIGRlc2NyaXB0b3IgY29udHJvbC9zdGF0dXMgdXNlZCBieSBFdGhlcm5ldCByZWNlaXZlLgorICogQ29tbW9uIHRvIFNDQyBhbmQgRkNDLgorICovCisjZGVmaW5lIEJEX0VORVRfUlhfRU1QVFkJKCh1c2hvcnQpMHg4MDAwKQorI2RlZmluZSBCRF9FTkVUX1JYX1dSQVAJCSgodXNob3J0KTB4MjAwMCkKKyNkZWZpbmUgQkRfRU5FVF9SWF9JTlRSCQkoKHVzaG9ydCkweDEwMDApCisjZGVmaW5lIEJEX0VORVRfUlhfTEFTVAkJKCh1c2hvcnQpMHgwODAwKQorI2RlZmluZSBCRF9FTkVUX1JYX0ZJUlNUCSgodXNob3J0KTB4MDQwMCkKKyNkZWZpbmUgQkRfRU5FVF9SWF9NSVNTCQkoKHVzaG9ydCkweDAxMDApCisjZGVmaW5lIEJEX0VORVRfUlhfQkMJCSgodXNob3J0KTB4MDA4MCkJLyogRkNDIE9ubHkgKi8KKyNkZWZpbmUgQkRfRU5FVF9SWF9NQwkJKCh1c2hvcnQpMHgwMDQwKQkvKiBGQ0MgT25seSAqLworI2RlZmluZSBCRF9FTkVUX1JYX0xHCQkoKHVzaG9ydCkweDAwMjApCisjZGVmaW5lIEJEX0VORVRfUlhfTk8JCSgodXNob3J0KTB4MDAxMCkKKyNkZWZpbmUgQkRfRU5FVF9SWF9TSAkJKCh1c2hvcnQpMHgwMDA4KQorI2RlZmluZSBCRF9FTkVUX1JYX0NSCQkoKHVzaG9ydCkweDAwMDQpCisjZGVmaW5lIEJEX0VORVRfUlhfT1YJCSgodXNob3J0KTB4MDAwMikKKyNkZWZpbmUgQkRfRU5FVF9SWF9DTAkJKCh1c2hvcnQpMHgwMDAxKQorI2RlZmluZSBCRF9FTkVUX1JYX1NUQVRTCSgodXNob3J0KTB4MDFmZikJLyogQWxsIHN0YXR1cyBiaXRzICovCisKKy8qIEJ1ZmZlciBkZXNjcmlwdG9yIGNvbnRyb2wvc3RhdHVzIHVzZWQgYnkgRXRoZXJuZXQgdHJhbnNtaXQuCisgKiBDb21tb24gdG8gU0NDIGFuZCBGQ0MuCisgKi8KKyNkZWZpbmUgQkRfRU5FVF9UWF9SRUFEWQkoKHVzaG9ydCkweDgwMDApCisjZGVmaW5lIEJEX0VORVRfVFhfUEFECQkoKHVzaG9ydCkweDQwMDApCisjZGVmaW5lIEJEX0VORVRfVFhfV1JBUAkJKCh1c2hvcnQpMHgyMDAwKQorI2RlZmluZSBCRF9FTkVUX1RYX0lOVFIJCSgodXNob3J0KTB4MTAwMCkKKyNkZWZpbmUgQkRfRU5FVF9UWF9MQVNUCQkoKHVzaG9ydCkweDA4MDApCisjZGVmaW5lIEJEX0VORVRfVFhfVEMJCSgodXNob3J0KTB4MDQwMCkKKyNkZWZpbmUgQkRfRU5FVF9UWF9ERUYJCSgodXNob3J0KTB4MDIwMCkKKyNkZWZpbmUgQkRfRU5FVF9UWF9IQgkJKCh1c2hvcnQpMHgwMTAwKQorI2RlZmluZSBCRF9FTkVUX1RYX0xDCQkoKHVzaG9ydCkweDAwODApCisjZGVmaW5lIEJEX0VORVRfVFhfUkwJCSgodXNob3J0KTB4MDA0MCkKKyNkZWZpbmUgQkRfRU5FVF9UWF9SQ01BU0sJKCh1c2hvcnQpMHgwMDNjKQorI2RlZmluZSBCRF9FTkVUX1RYX1VOCQkoKHVzaG9ydCkweDAwMDIpCisjZGVmaW5lIEJEX0VORVRfVFhfQ1NMCQkoKHVzaG9ydCkweDAwMDEpCisjZGVmaW5lIEJEX0VORVRfVFhfU1RBVFMJKCh1c2hvcnQpMHgwM2ZmKQkvKiBBbGwgc3RhdHVzIGJpdHMgKi8KKworLyogU0NDIGFzIFVBUlQKKyovCit0eXBlZGVmIHN0cnVjdCBzY2NfdWFydCB7CisJc2NjcF90CXNjY19nZW5zY2M7CisJdWludAlzY2NfcmVzMTsJLyogUmVzZXJ2ZWQgKi8KKwl1aW50CXNjY19yZXMyOwkvKiBSZXNlcnZlZCAqLworCXVzaG9ydAlzY2NfbWF4aWRsOwkvKiBNYXhpbXVtIGlkbGUgY2hhcnMgKi8KKwl1c2hvcnQJc2NjX2lkbGM7CS8qIHRlbXAgaWRsZSBjb3VudGVyICovCisJdXNob3J0CXNjY19icmtjcjsJLyogQnJlYWsgY291bnQgcmVnaXN0ZXIgKi8KKwl1c2hvcnQJc2NjX3BhcmVjOwkvKiByZWNlaXZlIHBhcml0eSBlcnJvciBjb3VudGVyICovCisJdXNob3J0CXNjY19mcm1lYzsJLyogcmVjZWl2ZSBmcmFtaW5nIGVycm9yIGNvdW50ZXIgKi8KKwl1c2hvcnQJc2NjX25vc2VjOwkvKiByZWNlaXZlIG5vaXNlIGNvdW50ZXIgKi8KKwl1c2hvcnQJc2NjX2Jya2VjOwkvKiByZWNlaXZlIGJyZWFrIGNvbmRpdGlvbiBjb3VudGVyICovCisJdXNob3J0CXNjY19icmtsbjsJLyogbGFzdCByZWNlaXZlZCBicmVhayBsZW5ndGggKi8KKwl1c2hvcnQJc2NjX3VhZGRyMTsJLyogVUFSVCBhZGRyZXNzIGNoYXJhY3RlciAxICovCisJdXNob3J0CXNjY191YWRkcjI7CS8qIFVBUlQgYWRkcmVzcyBjaGFyYWN0ZXIgMiAqLworCXVzaG9ydAlzY2NfcnRlbXA7CS8qIFRlbXAgc3RvcmFnZSAqLworCXVzaG9ydAlzY2NfdG9zZXE7CS8qIFRyYW5zbWl0IG91dCBvZiBzZXF1ZW5jZSBjaGFyICovCisJdXNob3J0CXNjY19jaGFyMTsJLyogY29udHJvbCBjaGFyYWN0ZXIgMSAqLworCXVzaG9ydAlzY2NfY2hhcjI7CS8qIGNvbnRyb2wgY2hhcmFjdGVyIDIgKi8KKwl1c2hvcnQJc2NjX2NoYXIzOwkvKiBjb250cm9sIGNoYXJhY3RlciAzICovCisJdXNob3J0CXNjY19jaGFyNDsJLyogY29udHJvbCBjaGFyYWN0ZXIgNCAqLworCXVzaG9ydAlzY2NfY2hhcjU7CS8qIGNvbnRyb2wgY2hhcmFjdGVyIDUgKi8KKwl1c2hvcnQJc2NjX2NoYXI2OwkvKiBjb250cm9sIGNoYXJhY3RlciA2ICovCisJdXNob3J0CXNjY19jaGFyNzsJLyogY29udHJvbCBjaGFyYWN0ZXIgNyAqLworCXVzaG9ydAlzY2NfY2hhcjg7CS8qIGNvbnRyb2wgY2hhcmFjdGVyIDggKi8KKwl1c2hvcnQJc2NjX3JjY207CS8qIHJlY2VpdmUgY29udHJvbCBjaGFyYWN0ZXIgbWFzayAqLworCXVzaG9ydAlzY2NfcmNjcjsJLyogcmVjZWl2ZSBjb250cm9sIGNoYXJhY3RlciByZWdpc3RlciAqLworCXVzaG9ydAlzY2NfcmxiYzsJLyogcmVjZWl2ZSBsYXN0IGJyZWFrIGNoYXJhY3RlciAqLworfSBzY2NfdWFydF90OworCisvKiBTQ0MgRXZlbnQgYW5kIE1hc2sgcmVnaXN0ZXJzIHdoZW4gaXQgaXMgdXNlZCBhcyBhIFVBUlQuCisqLworI2RlZmluZSBVQVJUX1NDQ01fR0xSCQkoKHVzaG9ydCkweDEwMDApCisjZGVmaW5lIFVBUlRfU0NDTV9HTFQJCSgodXNob3J0KTB4MDgwMCkKKyNkZWZpbmUgVUFSVF9TQ0NNX0FCCQkoKHVzaG9ydCkweDAyMDApCisjZGVmaW5lIFVBUlRfU0NDTV9JREwJCSgodXNob3J0KTB4MDEwMCkKKyNkZWZpbmUgVUFSVF9TQ0NNX0dSQQkJKCh1c2hvcnQpMHgwMDgwKQorI2RlZmluZSBVQVJUX1NDQ01fQlJLRQkJKCh1c2hvcnQpMHgwMDQwKQorI2RlZmluZSBVQVJUX1NDQ01fQlJLUwkJKCh1c2hvcnQpMHgwMDIwKQorI2RlZmluZSBVQVJUX1NDQ01fQ0NSCQkoKHVzaG9ydCkweDAwMDgpCisjZGVmaW5lIFVBUlRfU0NDTV9CU1kJCSgodXNob3J0KTB4MDAwNCkKKyNkZWZpbmUgVUFSVF9TQ0NNX1RYCQkoKHVzaG9ydCkweDAwMDIpCisjZGVmaW5lIFVBUlRfU0NDTV9SWAkJKCh1c2hvcnQpMHgwMDAxKQorCisvKiBUaGUgU0NDIFBTTVIgd2hlbiB1c2VkIGFzIGEgVUFSVC4KKyovCisjZGVmaW5lIFNDVV9QU01SX0ZMQwkJKCh1c2hvcnQpMHg4MDAwKQorI2RlZmluZSBTQ1VfUFNNUl9TTAkJKCh1c2hvcnQpMHg0MDAwKQorI2RlZmluZSBTQ1VfUFNNUl9DTAkJKCh1c2hvcnQpMHgzMDAwKQorI2RlZmluZSBTQ1VfUFNNUl9VTQkJKCh1c2hvcnQpMHgwYzAwKQorI2RlZmluZSBTQ1VfUFNNUl9GUloJCSgodXNob3J0KTB4MDIwMCkKKyNkZWZpbmUgU0NVX1BTTVJfUlpTCQkoKHVzaG9ydCkweDAxMDApCisjZGVmaW5lIFNDVV9QU01SX1NZTgkJKCh1c2hvcnQpMHgwMDgwKQorI2RlZmluZSBTQ1VfUFNNUl9EUlQJCSgodXNob3J0KTB4MDA0MCkKKyNkZWZpbmUgU0NVX1BTTVJfUEVOCQkoKHVzaG9ydCkweDAwMTApCisjZGVmaW5lIFNDVV9QU01SX1JQTQkJKCh1c2hvcnQpMHgwMDBjKQorI2RlZmluZSBTQ1VfUFNNUl9SRVZQCQkoKHVzaG9ydCkweDAwMDgpCisjZGVmaW5lIFNDVV9QU01SX1RQTQkJKCh1c2hvcnQpMHgwMDAzKQorI2RlZmluZSBTQ1VfUFNNUl9URVZQCQkoKHVzaG9ydCkweDAwMDIpCisKKy8qIENQTSBUcmFuc3BhcmVudCBtb2RlIFNDQy4KKyAqLwordHlwZWRlZiBzdHJ1Y3Qgc2NjX3RyYW5zIHsKKwlzY2NwX3QJc3RfZ2Vuc2NjOworCXVpbnQJc3RfY3ByZXM7CS8qIFByZXNldCBDUkMgKi8KKwl1aW50CXN0X2NtYXNrOwkvKiBDb25zdGFudCBtYXNrIGZvciBDUkMgKi8KK30gc2NjX3RyYW5zX3Q7CisKKyNkZWZpbmUgQkRfU0NDX1RYX0xBU1QJCSgodXNob3J0KTB4MDgwMCkKKworLyogSG93IGFib3V0IHNvbWUgRkNDcy4uLi4uCisqLworI2RlZmluZSBGQ0NfR0ZNUl9ESUFHX05PUk0JKCh1aW50KTB4MDAwMDAwMDApCisjZGVmaW5lIEZDQ19HRk1SX0RJQUdfTEUJKCh1aW50KTB4NDAwMDAwMDApCisjZGVmaW5lIEZDQ19HRk1SX0RJQUdfQUUJKCh1aW50KTB4ODAwMDAwMDApCisjZGVmaW5lIEZDQ19HRk1SX0RJQUdfQUxFCSgodWludCkweGMwMDAwMDAwKQorI2RlZmluZSBGQ0NfR0ZNUl9UQ0kJCSgodWludCkweDIwMDAwMDAwKQorI2RlZmluZSBGQ0NfR0ZNUl9UUlgJCSgodWludCkweDEwMDAwMDAwKQorI2RlZmluZSBGQ0NfR0ZNUl9UVFgJCSgodWludCkweDA4MDAwMDAwKQorI2RlZmluZSBGQ0NfR0ZNUl9UVFgJCSgodWludCkweDA4MDAwMDAwKQorI2RlZmluZSBGQ0NfR0ZNUl9DRFAJCSgodWludCkweDA0MDAwMDAwKQorI2RlZmluZSBGQ0NfR0ZNUl9DVFNQCQkoKHVpbnQpMHgwMjAwMDAwMCkKKyNkZWZpbmUgRkNDX0dGTVJfQ0RTCQkoKHVpbnQpMHgwMTAwMDAwMCkKKyNkZWZpbmUgRkNDX0dGTVJfQ1RTUwkJKCh1aW50KTB4MDA4MDAwMDApCisjZGVmaW5lIEZDQ19HRk1SX1NZTkxfTk9ORQkoKHVpbnQpMHgwMDAwMDAwMCkKKyNkZWZpbmUgRkNDX0dGTVJfU1lOTF9BVVRPCSgodWludCkweDAwMDA0MDAwKQorI2RlZmluZSBGQ0NfR0ZNUl9TWU5MXzgJCSgodWludCkweDAwMDA4MDAwKQorI2RlZmluZSBGQ0NfR0ZNUl9TWU5MXzE2CSgodWludCkweDAwMDBjMDAwKQorI2RlZmluZSBGQ0NfR0ZNUl9SVFNNCQkoKHVpbnQpMHgwMDAwMjAwMCkKKyNkZWZpbmUgRkNDX0dGTVJfUkVOQ19OUloJKCh1aW50KTB4MDAwMDAwMDApCisjZGVmaW5lIEZDQ19HRk1SX1JFTkNfTlJaSQkoKHVpbnQpMHgwMDAwMDgwMCkKKyNkZWZpbmUgRkNDX0dGTVJfUkVWRAkJKCh1aW50KTB4MDAwMDA0MDApCisjZGVmaW5lIEZDQ19HRk1SX1RFTkNfTlJaCSgodWludCkweDAwMDAwMDAwKQorI2RlZmluZSBGQ0NfR0ZNUl9URU5DX05SWkkJKCh1aW50KTB4MDAwMDAxMDApCisjZGVmaW5lIEZDQ19HRk1SX1RDUkNfMTYJKCh1aW50KTB4MDAwMDAwMDApCisjZGVmaW5lIEZDQ19HRk1SX1RDUkNfMzIJKCh1aW50KTB4MDAwMDAwODApCisjZGVmaW5lIEZDQ19HRk1SX0VOUgkJKCh1aW50KTB4MDAwMDAwMjApCisjZGVmaW5lIEZDQ19HRk1SX0VOVAkJKCh1aW50KTB4MDAwMDAwMTApCisjZGVmaW5lIEZDQ19HRk1SX01PREVfRU5FVAkoKHVpbnQpMHgwMDAwMDAwYykKKyNkZWZpbmUgRkNDX0dGTVJfTU9ERV9BVE0JKCh1aW50KTB4MDAwMDAwMGEpCisjZGVmaW5lIEZDQ19HRk1SX01PREVfSERMQwkoKHVpbnQpMHgwMDAwMDAwMCkKKworLyogR2VuZXJpYyBGQ0MgcGFyYW1ldGVyIHJhbS4KKyovCit0eXBlZGVmIHN0cnVjdCBmY2NfcGFyYW0geworCXVzaG9ydAlmY2NfcmlwdHI7CS8qIFJ4IEludGVybmFsIHRlbXAgcG9pbnRlciAqLworCXVzaG9ydAlmY2NfdGlwdHI7CS8qIFR4IEludGVybmFsIHRlbXAgcG9pbnRlciAqLworCXVzaG9ydAlmY2NfcmVzMTsKKwl1c2hvcnQJZmNjX21yYmxyOwkvKiBNYXggcmVjZWl2ZSBidWZmZXIgbGVuZ3RoLCBtb2QgMzIgYnl0ZXMgKi8KKwl1aW50CWZjY19yc3RhdGU7CS8qIFVwcGVyIGJ5dGUgaXMgRnVuYyBjb2RlLCBtdXN0IGJlIHNldCAqLworCXVpbnQJZmNjX3JiYXNlOwkvKiBSZWNlaXZlIEJEIGJhc2UgKi8KKwl1c2hvcnQJZmNjX3JiZHN0YXQ7CS8qIFJ4QkQgc3RhdHVzICovCisJdXNob3J0CWZjY19yYmRsZW47CS8qIFJ4QkQgZG93biBjb3VudGVyICovCisJdWludAlmY2NfcmRwdHI7CS8qIFJ4QkQgaW50ZXJuYWwgZGF0YSBwb2ludGVyICovCisJdWludAlmY2NfdHN0YXRlOwkvKiBVcHBlciBieXRlIGlzIEZ1bmMgY29kZSwgbXVzdCBiZSBzZXQgKi8KKwl1aW50CWZjY190YmFzZTsJLyogVHJhbnNtaXQgQkQgYmFzZSAqLworCXVzaG9ydAlmY2NfdGJkc3RhdDsJLyogVHhCRCBzdGF0dXMgKi8KKwl1c2hvcnQJZmNjX3RiZGxlbjsJLyogVHhCRCBkb3duIGNvdW50ZXIgKi8KKwl1aW50CWZjY190ZHB0cjsJLyogVHhCRCBpbnRlcm5hbCBkYXRhIHBvaW50ZXIgKi8KKwl1aW50CWZjY19yYnB0cjsJLyogUnggQkQgSW50ZXJuYWwgYnVmIHBvaW50ZXIgKi8KKwl1aW50CWZjY190YnB0cjsJLyogVHggQkQgSW50ZXJuYWwgYnVmIHBvaW50ZXIgKi8KKwl1aW50CWZjY19yY3JjOwkvKiBSeCB0ZW1wIENSQyAqLworCXVpbnQJZmNjX3JlczI7CisJdWludAlmY2NfdGNyYzsJLyogVHggdGVtcCBDUkMgKi8KK30gZmNjcF90OworCisKKy8qIEV0aGVybmV0IGNvbnRyb2xsZXIgdGhyb3VnaCBGQ0MuCisqLwordHlwZWRlZiBzdHJ1Y3QgZmNjX2VuZXQgeworCWZjY3BfdAlmZW5fZ2VuZmNjOworCXVpbnQJZmVuX3N0YXRidWY7CS8qIEludGVybmFsIHN0YXR1cyBidWZmZXIgKi8KKwl1aW50CWZlbl9jYW1wdHI7CS8qIENBTSBhZGRyZXNzICovCisJdWludAlmZW5fY21hc2s7CS8qIENvbnN0YW50IG1hc2sgZm9yIENSQyAqLworCXVpbnQJZmVuX2NwcmVzOwkvKiBQcmVzZXQgQ1JDICovCisJdWludAlmZW5fY3JjZWM7CS8qIENSQyBFcnJvciBjb3VudGVyICovCisJdWludAlmZW5fYWxlYzsJLyogYWxpZ25tZW50IGVycm9yIGNvdW50ZXIgKi8KKwl1aW50CWZlbl9kaXNmYzsJLyogZGlzY2FyZCBmcmFtZSBjb3VudGVyICovCisJdXNob3J0CWZlbl9yZXRsaW07CS8qIFJldHJ5IGxpbWl0ICovCisJdXNob3J0CWZlbl9yZXRjbnQ7CS8qIFJldHJ5IGNvdW50ZXIgKi8KKwl1c2hvcnQJZmVuX3BwZXI7CS8qIFBlcnNpc3RlbmNlICovCisJdXNob3J0CWZlbl9ib2ZmY250OwkvKiBiYWNrb2ZmIGNvdW50ZXIgKi8KKwl1aW50CWZlbl9nYWRkcmg7CS8qIEdyb3VwIGFkZHJlc3MgZmlsdGVyLCBoaWdoIDMyLWJpdHMgKi8KKwl1aW50CWZlbl9nYWRkcmw7CS8qIEdyb3VwIGFkZHJlc3MgZmlsdGVyLCBsb3cgMzItYml0cyAqLworCXVzaG9ydAlmZW5fdGZjc3RhdDsJLyogb3V0IG9mIHNlcXVlbmNlIFR4QkQgKi8KKwl1c2hvcnQJZmVuX3RmY2xlbjsKKwl1aW50CWZlbl90ZmNwdHI7CisJdXNob3J0CWZlbl9tZmxyOwkvKiBNYXhpbXVtIGZyYW1lIGxlbmd0aCAoMTUxOCkgKi8KKwl1c2hvcnQJZmVuX3BhZGRyaDsJLyogTUFDIGFkZHJlc3MgKi8KKwl1c2hvcnQJZmVuX3BhZGRybTsKKwl1c2hvcnQJZmVuX3BhZGRybDsKKwl1c2hvcnQJZmVuX2liZGNvdW50OwkvKiBJbnRlcm5hbCBCRCBjb3VudGVyICovCisJdXNob3J0CWZlbl9pYmRzdGFydDsJLyogSW50ZXJuYWwgQkQgc3RhcnQgcG9pbnRlciAqLworCXVzaG9ydAlmZW5faWJkZW5kOwkvKiBJbnRlcm5hbCBCRCBlbmQgcG9pbnRlciAqLworCXVzaG9ydAlmZW5fdHhsZW47CS8qIEludGVybmFsIFR4IGZyYW1lIGxlbmd0aCBjb3VudGVyICovCisJdWludAlmZW5faWJkYmFzZVs4XTsgLyogSW50ZXJuYWwgdXNlICovCisJdWludAlmZW5faWFkZHJoOwkvKiBJbmRpdmlkdWFsIGFkZHJlc3MgZmlsdGVyICovCisJdWludAlmZW5faWFkZHJsOworCXVzaG9ydAlmZW5fbWluZmxyOwkvKiBNaW5pbXVtIGZyYW1lIGxlbmd0aCAoNjQpICovCisJdXNob3J0CWZlbl90YWRkcmg7CS8qIEZpbHRlciB0cmFuc2ZlciBNQUMgYWRkcmVzcyAqLworCXVzaG9ydAlmZW5fdGFkZHJtOworCXVzaG9ydAlmZW5fdGFkZHJsOworCXVzaG9ydAlmZW5fcGFkcHRyOwkvKiBQb2ludGVyIHRvIHBhZCBieXRlIGJ1ZmZlciAqLworCXVzaG9ydAlmZW5fY2Z0eXBlOwkvKiBjb250cm9sIGZyYW1lIHR5cGUgKi8KKwl1c2hvcnQJZmVuX2NmcmFuZ2U7CS8qIGNvbnRyb2wgZnJhbWUgcmFuZ2UgKi8KKwl1c2hvcnQJZmVuX21heGI7CS8qIG1heGltdW0gQkQgY291bnQgKi8KKwl1c2hvcnQJZmVuX21heGQxOwkvKiBNYXggRE1BMSBsZW5ndGggKDE1MjApICovCisJdXNob3J0CWZlbl9tYXhkMjsJLyogTWF4IERNQTIgbGVuZ3RoICgxNTIwKSAqLworCXVzaG9ydAlmZW5fbWF4ZDsJLyogaW50ZXJuYWwgbWF4IERNQSBjb3VudCAqLworCXVzaG9ydAlmZW5fZG1hY250OwkvKiBpbnRlcm5hbCBETUEgY291bnRlciAqLworCXVpbnQJZmVuX29jdGM7CS8qIFRvdGFsIG9jdGVjdCBjb3VudGVyICovCisJdWludAlmZW5fY29sYzsJLyogVG90YWwgY29sbGlzaW9uIGNvdW50ZXIgKi8KKwl1aW50CWZlbl9icm9jOwkvKiBUb3RhbCBicm9hZGNhc3QgcGFja2V0IGNvdW50ZXIgKi8KKwl1aW50CWZlbl9tdWxjOwkvKiBUb3RhbCBtdWx0aWNhc3QgcGFja2V0IGNvdW50ICovCisJdWludAlmZW5fdXNwYzsJLyogVG90YWwgcGFja2V0cyA8IDY0IGJ5dGVzICovCisJdWludAlmZW5fZnJnYzsJLyogVG90YWwgcGFja2V0cyA8IDY0IGJ5dGVzIHdpdGggZXJyb3JzICovCisJdWludAlmZW5fb3NwYzsJLyogVG90YWwgcGFja2V0cyA+IDE1MTggKi8KKwl1aW50CWZlbl9qYnJjOwkvKiBUb3RhbCBwYWNrZXRzID4gMTUxOCB3aXRoIGVycm9ycyAqLworCXVpbnQJZmVuX3A2NGM7CS8qIFRvdGFsIHBhY2tldHMgPT0gNjQgYnl0ZXMgKi8KKwl1aW50CWZlbl9wNjVjOwkvKiBUb3RhbCBwYWNrZXRzIDY0IDwgYnl0ZXMgPD0gMTI3ICovCisJdWludAlmZW5fcDEyOGM7CS8qIFRvdGFsIHBhY2tldHMgMTI3IDwgYnl0ZXMgPD0gMjU1ICovCisJdWludAlmZW5fcDI1NmM7CS8qIFRvdGFsIHBhY2tldHMgMjU2IDwgYnl0ZXMgPD0gNTExICovCisJdWludAlmZW5fcDUxMmM7CS8qIFRvdGFsIHBhY2tldHMgNTEyIDwgYnl0ZXMgPD0gMTAyMyAqLworCXVpbnQJZmVuX3AxMDI0YzsJLyogVG90YWwgcGFja2V0cyAxMDI0IDwgYnl0ZXMgPD0gMTUxOCAqLworCXVpbnQJZmVuX2NhbWJ1ZjsJLyogSW50ZXJuYWwgQ0FNIGJ1ZmZlciBwb2luZXIgKi8KKwl1c2hvcnQJZmVuX3JmdGhyOwkvKiBSZWNlaXZlZCBmcmFtZXMgdGhyZXNob2xkICovCisJdXNob3J0CWZlbl9yZmNudDsJLyogUmVjZWl2ZWQgZnJhbWVzIGNvdW50ICovCit9IGZjY19lbmV0X3Q7CisKKy8qIEZDQyBFdmVudC9NYXNrIHJlZ2lzdGVyIGFzIHVzZWQgYnkgRXRoZXJuZXQuCisqLworI2RlZmluZSBGQ0NfRU5FVF9HUkEJKCh1c2hvcnQpMHgwMDgwKQkvKiBHcmFjZWZ1bCBzdG9wIGNvbXBsZXRlICovCisjZGVmaW5lIEZDQ19FTkVUX1JYQwkoKHVzaG9ydCkweDAwNDApCS8qIENvbnRyb2wgRnJhbWUgUmVjZWl2ZWQgKi8KKyNkZWZpbmUgRkNDX0VORVRfVFhDCSgodXNob3J0KTB4MDAyMCkJLyogT3V0IG9mIHNlcS4gVHggc2VudCAqLworI2RlZmluZSBGQ0NfRU5FVF9UWEUJKCh1c2hvcnQpMHgwMDEwKQkvKiBUcmFuc21pdCBFcnJvciAqLworI2RlZmluZSBGQ0NfRU5FVF9SWEYJKCh1c2hvcnQpMHgwMDA4KQkvKiBGdWxsIGZyYW1lIHJlY2VpdmVkICovCisjZGVmaW5lIEZDQ19FTkVUX0JTWQkoKHVzaG9ydCkweDAwMDQpCS8qIEJ1c3kuICBSeCBGcmFtZSBkcm9wcGVkICovCisjZGVmaW5lIEZDQ19FTkVUX1RYQgkoKHVzaG9ydCkweDAwMDIpCS8qIEEgYnVmZmVyIHdhcyB0cmFuc21pdHRlZCAqLworI2RlZmluZSBGQ0NfRU5FVF9SWEIJKCh1c2hvcnQpMHgwMDAxKQkvKiBBIGJ1ZmZlciB3YXMgcmVjZWl2ZWQgKi8KKworLyogRkNDIE1vZGUgUmVnaXN0ZXIgKEZQU01SKSBhcyB1c2VkIGJ5IEV0aGVybmV0LgorKi8KKyNkZWZpbmUgRkNDX1BTTVJfSEJDCSgodWludCkweDgwMDAwMDAwKQkvKiBFbmFibGUgaGVhcnRiZWF0ICovCisjZGVmaW5lIEZDQ19QU01SX0ZDCSgodWludCkweDQwMDAwMDAwKQkvKiBGb3JjZSBDb2xsaXNpb24gKi8KKyNkZWZpbmUgRkNDX1BTTVJfU0JUCSgodWludCkweDIwMDAwMDAwKQkvKiBTdG9wIGJhY2tvZmYgdGltZXIgKi8KKyNkZWZpbmUgRkNDX1BTTVJfTFBCCSgodWludCkweDEwMDAwMDAwKQkvKiBMb2NhbCBwcm90ZWN0LiAxID0gRkRYICovCisjZGVmaW5lIEZDQ19QU01SX0xDVwkoKHVpbnQpMHgwODAwMDAwMCkJLyogTGF0ZSBjb2xsaXNpb24gc2VsZWN0ICovCisjZGVmaW5lIEZDQ19QU01SX0ZERQkoKHVpbnQpMHgwNDAwMDAwMCkJLyogRnVsbCBEdXBsZXggRW5hYmxlICovCisjZGVmaW5lIEZDQ19QU01SX01PTgkoKHVpbnQpMHgwMjAwMDAwMCkJLyogUk1PTiBFbmFibGUgKi8KKyNkZWZpbmUgRkNDX1BTTVJfUFJPCSgodWludCkweDAwNDAwMDAwKQkvKiBQcm9taXNjdW91cyBFbmFibGUgKi8KKyNkZWZpbmUgRkNDX1BTTVJfRkNFCSgodWludCkweDAwMjAwMDAwKQkvKiBGbG93IENvbnRyb2wgRW5hYmxlICovCisjZGVmaW5lIEZDQ19QU01SX1JTSAkoKHVpbnQpMHgwMDEwMDAwMCkJLyogUmVjZWl2ZSBTaG9ydCBGcmFtZXMgKi8KKyNkZWZpbmUgRkNDX1BTTVJfQ0FNCSgodWludCkweDAwMDAwNDAwKQkvKiBDQU0gZW5hYmxlICovCisjZGVmaW5lIEZDQ19QU01SX0JSTwkoKHVpbnQpMHgwMDAwMDIwMCkJLyogQnJvYWRjYXN0IHBrdCBkaXNjYXJkICovCisjZGVmaW5lIEZDQ19QU01SX0VOQ1JDCSgodWludCkweDAwMDAwMDgwKQkvKiBVc2UgMzItYml0IENSQyAqLworCisvKiBJSUMgcGFyYW1ldGVyIFJBTS4KKyovCit0eXBlZGVmIHN0cnVjdCBpaWMgeworCXVzaG9ydAlpaWNfcmJhc2U7CS8qIFJ4IEJ1ZmZlciBkZXNjcmlwdG9yIGJhc2UgYWRkcmVzcyAqLworCXVzaG9ydAlpaWNfdGJhc2U7CS8qIFR4IEJ1ZmZlciBkZXNjcmlwdG9yIGJhc2UgYWRkcmVzcyAqLworCXVfY2hhcglpaWNfcmZjcjsJLyogUnggZnVuY3Rpb24gY29kZSAqLworCXVfY2hhcglpaWNfdGZjcjsJLyogVHggZnVuY3Rpb24gY29kZSAqLworCXVzaG9ydAlpaWNfbXJibHI7CS8qIE1heCByZWNlaXZlIGJ1ZmZlciBsZW5ndGggKi8KKwl1aW50CWlpY19yc3RhdGU7CS8qIEludGVybmFsICovCisJdWludAlpaWNfcmRwOwkvKiBJbnRlcm5hbCAqLworCXVzaG9ydAlpaWNfcmJwdHI7CS8qIEludGVybmFsICovCisJdXNob3J0CWlpY19yYmM7CS8qIEludGVybmFsICovCisJdWludAlpaWNfcnh0bXA7CS8qIEludGVybmFsICovCisJdWludAlpaWNfdHN0YXRlOwkvKiBJbnRlcm5hbCAqLworCXVpbnQJaWljX3RkcDsJLyogSW50ZXJuYWwgKi8KKwl1c2hvcnQJaWljX3RicHRyOwkvKiBJbnRlcm5hbCAqLworCXVzaG9ydAlpaWNfdGJjOwkvKiBJbnRlcm5hbCAqLworCXVpbnQJaWljX3R4dG1wOwkvKiBJbnRlcm5hbCAqLworfSBpaWNfdDsKKworLyogU1BJIHBhcmFtZXRlciBSQU0uCisqLwordHlwZWRlZiBzdHJ1Y3Qgc3BpIHsKKwl1c2hvcnQJc3BpX3JiYXNlOwkvKiBSeCBCdWZmZXIgZGVzY3JpcHRvciBiYXNlIGFkZHJlc3MgKi8KKwl1c2hvcnQJc3BpX3RiYXNlOwkvKiBUeCBCdWZmZXIgZGVzY3JpcHRvciBiYXNlIGFkZHJlc3MgKi8KKwl1X2NoYXIJc3BpX3JmY3I7CS8qIFJ4IGZ1bmN0aW9uIGNvZGUgKi8KKwl1X2NoYXIJc3BpX3RmY3I7CS8qIFR4IGZ1bmN0aW9uIGNvZGUgKi8KKwl1c2hvcnQJc3BpX21yYmxyOwkvKiBNYXggcmVjZWl2ZSBidWZmZXIgbGVuZ3RoICovCisJdWludAlzcGlfcnN0YXRlOwkvKiBJbnRlcm5hbCAqLworCXVpbnQJc3BpX3JkcDsJLyogSW50ZXJuYWwgKi8KKwl1c2hvcnQJc3BpX3JicHRyOwkvKiBJbnRlcm5hbCAqLworCXVzaG9ydAlzcGlfcmJjOwkvKiBJbnRlcm5hbCAqLworCXVpbnQJc3BpX3J4dG1wOwkvKiBJbnRlcm5hbCAqLworCXVpbnQJc3BpX3RzdGF0ZTsJLyogSW50ZXJuYWwgKi8KKwl1aW50CXNwaV90ZHA7CS8qIEludGVybmFsICovCisJdXNob3J0CXNwaV90YnB0cjsJLyogSW50ZXJuYWwgKi8KKwl1c2hvcnQJc3BpX3RiYzsJLyogSW50ZXJuYWwgKi8KKwl1aW50CXNwaV90eHRtcDsJLyogSW50ZXJuYWwgKi8KKwl1aW50CXNwaV9yZXM7CS8qIFR4IHRlbXAuICovCisJdWludAlzcGlfcmVzMVs0XTsJLyogU0RNQSB0ZW1wLiAqLworfSBzcGlfdDsKKworLyogU1BJIE1vZGUgcmVnaXN0ZXIuCisqLworI2RlZmluZSBTUE1PREVfTE9PUAkoKHVzaG9ydCkweDQwMDApCS8qIExvb3BiYWNrICovCisjZGVmaW5lIFNQTU9ERV9DSQkoKHVzaG9ydCkweDIwMDApCS8qIENsb2NrIEludmVydCAqLworI2RlZmluZSBTUE1PREVfQ1AJKCh1c2hvcnQpMHgxMDAwKQkvKiBDbG9jayBQaGFzZSAqLworI2RlZmluZSBTUE1PREVfRElWMTYJKCh1c2hvcnQpMHgwODAwKQkvKiBCUkcvMTYgbW9kZSAqLworI2RlZmluZSBTUE1PREVfUkVWCSgodXNob3J0KTB4MDQwMCkJLyogUmV2ZXJzZWQgRGF0YSAqLworI2RlZmluZSBTUE1PREVfTVNUUgkoKHVzaG9ydCkweDAyMDApCS8qIFNQSSBNYXN0ZXIgKi8KKyNkZWZpbmUgU1BNT0RFX0VOCSgodXNob3J0KTB4MDEwMCkJLyogRW5hYmxlICovCisjZGVmaW5lIFNQTU9ERV9MRU5NU0sJKCh1c2hvcnQpMHgwMGYwKQkvKiBjaGFyYWN0ZXIgbGVuZ3RoICovCisjZGVmaW5lIFNQTU9ERV9QTU1TSwkoKHVzaG9ydCkweDAwMGYpCS8qIHByZXNjYWxlIG1vZHVsdXMgKi8KKworI2RlZmluZSBTUE1PREVfTEVOKHgpCSgoKCh4KS0xKSYweEYpPDw0KQorI2RlZmluZSBTUE1PREVfUE0oeCkJKCh4KSAmMHhGKQorCisjZGVmaW5lIFNQSV9FQgkJKCh1X2NoYXIpMHgxMCkJCS8qIGJpZyBlbmRpYW4gYnl0ZSBvcmRlciAqLworCisjZGVmaW5lIEJEX0lJQ19TVEFSVAkJKCh1c2hvcnQpMHgwNDAwKQorCisvKiBJRE1BIHBhcmFtZXRlciBSQU0KKyovCit0eXBlZGVmIHN0cnVjdCBpZG1hIHsKKwl1c2hvcnQgaWJhc2U7CQkvKiBJRE1BIGJ1ZmZlciBkZXNjcmlwdG9yIHRhYmxlIGJhc2UgYWRkcmVzcyAqLworCXVzaG9ydCBkY207CQkvKiBETUEgY2hhbm5lbCBtb2RlICovCisJdXNob3J0IGliZHB0cjsJCS8qIElETUEgY3VycmVudCBidWZmZXIgZGVzY3JpcHRvciBwb2ludGVyICovCisJdXNob3J0IGRwcl9idWY7CQkvKiBJRE1BIHRyYW5zZmVyIGJ1ZmZlciBiYXNlIGFkZHJlc3MgKi8KKwl1c2hvcnQgYnVmX2ludjsJCS8qIGludGVybmFsIGJ1ZmZlciBpbnZlbnRvcnkgKi8KKwl1c2hvcnQgc3NfbWF4OwkJLyogc3RlYWR5LXN0YXRlIG1heGltdW0gdHJhbnNmZXIgc2l6ZSAqLworCXVzaG9ydCBkcHJfaW5fcHRyOwkvKiB3cml0ZSBwb2ludGVyIGluc2lkZSB0aGUgaW50ZXJuYWwgYnVmZmVyICovCisJdXNob3J0IHN0czsJCS8qIHNvdXJjZSB0cmFuc2ZlciBzaXplICovCisJdXNob3J0IGRwcl9vdXRfcHRyOwkvKiByZWFkIHBvaW50ZXIgaW5zaWRlIHRoZSBpbnRlcm5hbCBidWZmZXIgKi8KKwl1c2hvcnQgc2VvYjsJCS8qIHNvdXJjZSBlbmQgb2YgYnVyc3QgKi8KKwl1c2hvcnQgZGVvYjsJCS8qIGRlc3RpbmF0aW9uIGVuZCBvZiBidXJzdCAqLworCXVzaG9ydCBkdHM7CQkvKiBkZXN0aW5hdGlvbiB0cmFuc2ZlciBzaXplICovCisJdXNob3J0IHJldF9hZGQ7CQkvKiByZXR1cm4gYWRkcmVzcyB3aGVuIHdvcmtpbmcgaW4gRVJNPTEgbW9kZSAqLworCXVzaG9ydCByZXMwOwkJLyogcmVzZXJ2ZWQgKi8KKwl1aW50ICAgYmRfY250OwkJLyogaW50ZXJuYWwgYnl0ZSBjb3VudCAqLworCXVpbnQgICBzX3B0cjsJCS8qIHNvdXJjZSBpbnRlcm5hbCBkYXRhIHBvaW50ZXIgKi8KKwl1aW50ICAgZF9wdHI7CQkvKiBkZXN0aW5hdGlvbiBpbnRlcm5hbCBkYXRhIHBvaW50ZXIgKi8KKwl1aW50ICAgaXN0YXRlOwkJLyogaW50ZXJuYWwgc3RhdGUgKi8KKwl1X2NoYXIgcmVzMVsyMF07CS8qIHBhZCB0byA2NC1ieXRlIGxlbmd0aCAqLworfSBpZG1hX3Q7CisKKy8qIERNQSBjaGFubmVsIG1vZGUgYml0IGZpZWxkcworKi8KKyNkZWZpbmUgSURNQV9EQ01fRkIJCSgodXNob3J0KTB4ODAwMCkgLyogZmx5LWJ5IG1vZGUgKi8KKyNkZWZpbmUgSURNQV9EQ01fTFAJCSgodXNob3J0KTB4NDAwMCkgLyogbG93IHByaW9yaXR5ICovCisjZGVmaW5lIElETUFfRENNX1RDMgkJKCh1c2hvcnQpMHgwNDAwKSAvKiB2YWx1ZSBkcml2ZW4gb24gVENbMl0gKi8KKyNkZWZpbmUgSURNQV9EQ01fRE1BX1dSQVBfTUFTSwkoKHVzaG9ydCkweDAxYzApIC8qIG1hc2sgZm9yIERNQSB3cmFwICovCisjZGVmaW5lIElETUFfRENNX0RNQV9XUkFQXzY0CSgodXNob3J0KTB4MDAwMCkgLyogNjQtYnl0ZSBETUEgeGZlciBidWZmZXIgKi8KKyNkZWZpbmUgSURNQV9EQ01fRE1BX1dSQVBfMTI4CSgodXNob3J0KTB4MDA0MCkgLyogMTI4LWJ5dGUgRE1BIHhmZXIgYnVmZmVyICovCisjZGVmaW5lIElETUFfRENNX0RNQV9XUkFQXzI1NgkoKHVzaG9ydCkweDAwODApIC8qIDI1Ni1ieXRlIERNQSB4ZmVyIGJ1ZmZlciAqLworI2RlZmluZSBJRE1BX0RDTV9ETUFfV1JBUF81MTIJKCh1c2hvcnQpMHgwMGMwKSAvKiA1MTItYnl0ZSBETUEgeGZlciBidWZmZXIgKi8KKyNkZWZpbmUgSURNQV9EQ01fRE1BX1dSQVBfMTAyNAkoKHVzaG9ydCkweDAxMDApIC8qIDEwMjQtYnl0ZSBETUEgeGZlciBidWZmZXIgKi8KKyNkZWZpbmUgSURNQV9EQ01fRE1BX1dSQVBfMjA0OAkoKHVzaG9ydCkweDAxNDApIC8qIDIwNDgtYnl0ZSBETUEgeGZlciBidWZmZXIgKi8KKyNkZWZpbmUgSURNQV9EQ01fU0lOQwkJKCh1c2hvcnQpMHgwMDIwKSAvKiBzb3VyY2UgaW5jIGFkZHIgKi8KKyNkZWZpbmUgSURNQV9EQ01fRElOQwkJKCh1c2hvcnQpMHgwMDEwKSAvKiBkZXN0aW5hdGlvbiBpbmMgYWRkciAqLworI2RlZmluZSBJRE1BX0RDTV9FUk0JCSgodXNob3J0KTB4MDAwOCkgLyogZXh0ZXJuYWwgcmVxdWVzdCBtb2RlICovCisjZGVmaW5lIElETUFfRENNX0RUCQkoKHVzaG9ydCkweDAwMDQpIC8qIERPTkUgdHJlYXRtZW50ICovCisjZGVmaW5lIElETUFfRENNX1NEX01BU0sJKCh1c2hvcnQpMHgwMDAzKSAvKiBtYXNrIGZvciBTRCBiaXQgZmllbGQgKi8KKyNkZWZpbmUgSURNQV9EQ01fU0RfTUVNMk1FTQkoKHVzaG9ydCkweDAwMDApIC8qIG1lbW9yeS10by1tZW1vcnkgeGZlciAqLworI2RlZmluZSBJRE1BX0RDTV9TRF9QRVIyTUVNCSgodXNob3J0KTB4MDAwMikgLyogcGVyaXBoZXJhbC10by1tZW1vcnkgeGZlciAqLworI2RlZmluZSBJRE1BX0RDTV9TRF9NRU0yUEVSCSgodXNob3J0KTB4MDAwMSkgLyogbWVtb3J5LXRvLXBlcmlwaGVyYWwgeGZlciAqLworCisvKiBJRE1BIEJ1ZmZlciBEZXNjcmlwdG9ycworKi8KK3R5cGVkZWYgc3RydWN0IGlkbWFfYmQgeworCXVpbnQgZmxhZ3M7CisJdWludCBsZW47CS8qIGRhdGEgbGVuZ3RoICovCisJdWludCBzcmM7CS8qIHNvdXJjZSBkYXRhIGJ1ZmZlciBwb2ludGVyICovCisJdWludCBkc3Q7CS8qIGRlc3RpbmF0aW9uIGRhdGEgYnVmZmVyIHBvaW50ZXIgKi8KK30gaWRtYV9iZF90OworCisvKiBJRE1BIGJ1ZmZlciBkZXNjcmlwdG9yIGZsYWcgYml0IGZpZWxkcworKi8KKyNkZWZpbmUgSURNQV9CRF9WCSgodWludCkweDgwMDAwMDAwKQkvKiB2YWxpZCAqLworI2RlZmluZSBJRE1BX0JEX1cJKCh1aW50KTB4MjAwMDAwMDApCS8qIHdyYXAgKi8KKyNkZWZpbmUgSURNQV9CRF9JCSgodWludCkweDEwMDAwMDAwKQkvKiBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSURNQV9CRF9MCSgodWludCkweDA4MDAwMDAwKQkvKiBsYXN0ICovCisjZGVmaW5lIElETUFfQkRfQ00JKCh1aW50KTB4MDIwMDAwMDApCS8qIGNvbnRpbnVvdXMgbW9kZSAqLworI2RlZmluZSBJRE1BX0JEX1NETgkoKHVpbnQpMHgwMDQwMDAwMCkJLyogc291cmNlIGRvbmUgKi8KKyNkZWZpbmUgSURNQV9CRF9ERE4JKCh1aW50KTB4MDAyMDAwMDApCS8qIGRlc3RpbmF0aW9uIGRvbmUgKi8KKyNkZWZpbmUgSURNQV9CRF9ER0JMCSgodWludCkweDAwMTAwMDAwKQkvKiBkZXN0aW5hdGlvbiBnbG9iYWwgKi8KKyNkZWZpbmUgSURNQV9CRF9EQk9fTEUJKCh1aW50KTB4MDAwNDAwMDApCS8qIGxpdHRsZS1lbmQgZGVzdCBieXRlIG9yZGVyICovCisjZGVmaW5lIElETUFfQkRfREJPX0JFCSgodWludCkweDAwMDgwMDAwKQkvKiBiaWctZW5kIGRlc3QgYnl0ZSBvcmRlciAqLworI2RlZmluZSBJRE1BX0JEX0REVEIJKCh1aW50KTB4MDAwMTAwMDApCS8qIGRlc3RpbmF0aW9uIGRhdGEgYnVzICovCisjZGVmaW5lIElETUFfQkRfU0dCTAkoKHVpbnQpMHgwMDAwMjAwMCkJLyogc291cmNlIGdsb2JhbCAqLworI2RlZmluZSBJRE1BX0JEX1NCT19MRQkoKHVpbnQpMHgwMDAwMDgwMCkJLyogbGl0dGxlLWVuZCBzcmMgYnl0ZSBvcmRlciAqLworI2RlZmluZSBJRE1BX0JEX1NCT19CRQkoKHVpbnQpMHgwMDAwMTAwMCkJLyogYmlnLWVuZCBzcmMgYnl0ZSBvcmRlciAqLworI2RlZmluZSBJRE1BX0JEX1NEVEIJKCh1aW50KTB4MDAwMDAyMDApCS8qIHNvdXJjZSBkYXRhIGJ1cyAqLworCisvKiBwZXItY2hhbm5lbCBJRE1BIHJlZ2lzdGVycworKi8KK3R5cGVkZWYgc3RydWN0IGltX2lkbWEgeworCXVfY2hhciBpZHNyOwkJCS8qIElETUFuIGV2ZW50IHN0YXR1cyByZWdpc3RlciAqLworCXVfY2hhciByZXMwWzNdOworCXVfY2hhciBpZG1yOwkJCS8qIElETUFuIGV2ZW50IG1hc2sgcmVnaXN0ZXIgKi8KKwl1X2NoYXIgcmVzMVszXTsKK30gaW1faWRtYV90OworCisvKiBJRE1BIGV2ZW50IHJlZ2lzdGVyIGJpdCBmaWVsZHMKKyovCisjZGVmaW5lIElETUFfRVZFTlRfU0MJKCh1bnNpZ25lZCBjaGFyKTB4MDgpCS8qIHN0b3AgY29tcGxldGVkICovCisjZGVmaW5lIElETUFfRVZFTlRfT0IJKCh1bnNpZ25lZCBjaGFyKTB4MDQpCS8qIG91dCBvZiBidWZmZXJzICovCisjZGVmaW5lIElETUFfRVZFTlRfRUROCSgodW5zaWduZWQgY2hhcikweDAyKQkvKiBleHRlcm5hbCBET05FIGFzc2VydGVkICovCisjZGVmaW5lIElETUFfRVZFTlRfQkMJKCh1bnNpZ25lZCBjaGFyKTB4MDEpCS8qIGJ1ZmZlciBkZXNjcmlwdG9yIGNvbXBsZXRlICovCisKKy8qIFJJU0MgQ29udHJvbGxlciBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIChSQ0NSKSBiaXQgZmllbGRzCisqLworI2RlZmluZSBSQ0NSX1RJTUUJKCh1aW50KTB4ODAwMDAwMDApIC8qIHRpbWVyIGVuYWJsZSAqLworI2RlZmluZSBSQ0NSX1RJTUVQX01BU0sJKCh1aW50KTB4M2YwMDAwMDApIC8qIG1hc2sgZm9yIHRpbWVyIHBlcmlvZCBiaXQgZmllbGQgKi8KKyNkZWZpbmUgUkNDUl9EUjBNCSgodWludCkweDAwODAwMDAwKSAvKiBJRE1BMCByZXF1ZXN0IG1vZGUgKi8KKyNkZWZpbmUgUkNDUl9EUjFNCSgodWludCkweDAwNDAwMDAwKSAvKiBJRE1BMSByZXF1ZXN0IG1vZGUgKi8KKyNkZWZpbmUgUkNDUl9EUjJNCSgodWludCkweDAwMDAwMDgwKSAvKiBJRE1BMiByZXF1ZXN0IG1vZGUgKi8KKyNkZWZpbmUgUkNDUl9EUjNNCSgodWludCkweDAwMDAwMDQwKSAvKiBJRE1BMyByZXF1ZXN0IG1vZGUgKi8KKyNkZWZpbmUgUkNDUl9EUjBRUF9NQVNLCSgodWludCkweDAwMzAwMDAwKSAvKiBtYXNrIGZvciBJRE1BMCByZXEgcHJpb3JpdHkgKi8KKyNkZWZpbmUgUkNDUl9EUjBRUF9ISUdIICgodWludCkweDAwMDAwMDAwKSAvKiBJRE1BMCBoYXMgaGlnaCByZXEgcHJpb3JpdHkgKi8KKyNkZWZpbmUgUkNDUl9EUjBRUF9NRUQJKCh1aW50KTB4MDAxMDAwMDApIC8qIElETUEwIGhhcyBtZWRpdW0gcmVxIHByaW9yaXR5ICovCisjZGVmaW5lIFJDQ1JfRFIwUVBfTE9XCSgodWludCkweDAwMjAwMDAwKSAvKiBJRE1BMCBoYXMgbG93IHJlcSBwcmlvcml0eSAqLworI2RlZmluZSBSQ0NSX0RSMVFQX01BU0sJKCh1aW50KTB4MDAwMzAwMDApIC8qIG1hc2sgZm9yIElETUExIHJlcSBwcmlvcml0eSAqLworI2RlZmluZSBSQ0NSX0RSMVFQX0hJR0ggKCh1aW50KTB4MDAwMDAwMDApIC8qIElETUExIGhhcyBoaWdoIHJlcSBwcmlvcml0eSAqLworI2RlZmluZSBSQ0NSX0RSMVFQX01FRAkoKHVpbnQpMHgwMDAxMDAwMCkgLyogSURNQTEgaGFzIG1lZGl1bSByZXEgcHJpb3JpdHkgKi8KKyNkZWZpbmUgUkNDUl9EUjFRUF9MT1cJKCh1aW50KTB4MDAwMjAwMDApIC8qIElETUExIGhhcyBsb3cgcmVxIHByaW9yaXR5ICovCisjZGVmaW5lIFJDQ1JfRFIyUVBfTUFTSwkoKHVpbnQpMHgwMDAwMDAzMCkgLyogbWFzayBmb3IgSURNQTIgcmVxIHByaW9yaXR5ICovCisjZGVmaW5lIFJDQ1JfRFIyUVBfSElHSCAoKHVpbnQpMHgwMDAwMDAwMCkgLyogSURNQTIgaGFzIGhpZ2ggcmVxIHByaW9yaXR5ICovCisjZGVmaW5lIFJDQ1JfRFIyUVBfTUVECSgodWludCkweDAwMDAwMDEwKSAvKiBJRE1BMiBoYXMgbWVkaXVtIHJlcSBwcmlvcml0eSAqLworI2RlZmluZSBSQ0NSX0RSMlFQX0xPVwkoKHVpbnQpMHgwMDAwMDAyMCkgLyogSURNQTIgaGFzIGxvdyByZXEgcHJpb3JpdHkgKi8KKyNkZWZpbmUgUkNDUl9EUjNRUF9NQVNLCSgodWludCkweDAwMDAwMDAzKSAvKiBtYXNrIGZvciBJRE1BMyByZXEgcHJpb3JpdHkgKi8KKyNkZWZpbmUgUkNDUl9EUjNRUF9ISUdIICgodWludCkweDAwMDAwMDAwKSAvKiBJRE1BMyBoYXMgaGlnaCByZXEgcHJpb3JpdHkgKi8KKyNkZWZpbmUgUkNDUl9EUjNRUF9NRUQJKCh1aW50KTB4MDAwMDAwMDEpIC8qIElETUEzIGhhcyBtZWRpdW0gcmVxIHByaW9yaXR5ICovCisjZGVmaW5lIFJDQ1JfRFIzUVBfTE9XCSgodWludCkweDAwMDAwMDAyKSAvKiBJRE1BMyBoYXMgbG93IHJlcSBwcmlvcml0eSAqLworI2RlZmluZSBSQ0NSX0VJRQkoKHVpbnQpMHgwMDA4MDAwMCkgLyogZXh0ZXJuYWwgaW50ZXJydXB0IGVuYWJsZSAqLworI2RlZmluZSBSQ0NSX1NDRAkoKHVpbnQpMHgwMDA0MDAwMCkgLyogc2NoZWR1bGVyIGNvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgUkNDUl9FUkFNX01BU0sJKCh1aW50KTB4MDAwMGUwMDApIC8qIG1hc2sgZm9yIGVuYWJsZSBSQU0gbWljcm9jb2RlICovCisjZGVmaW5lIFJDQ1JfRVJBTV8wS0IJKCh1aW50KTB4MDAwMDAwMDApIC8qIHVzZSAwS0Igb2YgZHByYW0gZm9yIG1pY3JvY29kZSAqLworI2RlZmluZSBSQ0NSX0VSQU1fMktCCSgodWludCkweDAwMDAyMDAwKSAvKiB1c2UgMktCIG9mIGRwcmFtIGZvciBtaWNyb2NvZGUgKi8KKyNkZWZpbmUgUkNDUl9FUkFNXzRLQgkoKHVpbnQpMHgwMDAwNDAwMCkgLyogdXNlIDRLQiBvZiBkcHJhbSBmb3IgbWljcm9jb2RlICovCisjZGVmaW5lIFJDQ1JfRVJBTV82S0IJKCh1aW50KTB4MDAwMDYwMDApIC8qIHVzZSA2S0Igb2YgZHByYW0gZm9yIG1pY3JvY29kZSAqLworI2RlZmluZSBSQ0NSX0VSQU1fOEtCCSgodWludCkweDAwMDA4MDAwKSAvKiB1c2UgOEtCIG9mIGRwcmFtIGZvciBtaWNyb2NvZGUgKi8KKyNkZWZpbmUgUkNDUl9FUkFNXzEwS0IJKCh1aW50KTB4MDAwMGEwMDApIC8qIHVzZSAxMEtCIG9mIGRwcmFtIGZvciBtaWNyb2NvZGUgKi8KKyNkZWZpbmUgUkNDUl9FUkFNXzEyS0IJKCh1aW50KTB4MDAwMGMwMDApIC8qIHVzZSAxMktCIG9mIGRwcmFtIGZvciBtaWNyb2NvZGUgKi8KKyNkZWZpbmUgUkNDUl9FRE0wCSgodWludCkweDAwMDAwODAwKSAvKiBEUkVRMCBlZGdlIGRldGVjdCBtb2RlICovCisjZGVmaW5lIFJDQ1JfRURNMQkoKHVpbnQpMHgwMDAwMDQwMCkgLyogRFJFUTEgZWRnZSBkZXRlY3QgbW9kZSAqLworI2RlZmluZSBSQ0NSX0VETTIJKCh1aW50KTB4MDAwMDAyMDApIC8qIERSRVEyIGVkZ2UgZGV0ZWN0IG1vZGUgKi8KKyNkZWZpbmUgUkNDUl9FRE0zCSgodWludCkweDAwMDAwMTAwKSAvKiBEUkVRMyBlZGdlIGRldGVjdCBtb2RlICovCisjZGVmaW5lIFJDQ1JfREVNMDEJKCh1aW50KTB4MDAwMDAwMDgpIC8qIERPTkUwL0RPTkUxIGVkZ2UgZGV0ZWN0IG1vZGUgKi8KKyNkZWZpbmUgUkNDUl9ERU0yMwkoKHVpbnQpMHgwMDAwMDAwNCkgLyogRE9ORTIvRE9ORTMgZWRnZSBkZXRlY3QgbW9kZSAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBDTVhGQ1IgLSBDTVggRkNDIENsb2NrIFJvdXRlIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgQ01YRkNSX0ZDMSAgICAgICAgIDB4NDAwMDAwMDAgICAvKiBGQ0MxIGNvbm5lY3Rpb24gICAgICAgICAgICAgICovCisjZGVmaW5lIENNWEZDUl9SRjFDU19NU0sgICAweDM4MDAwMDAwICAgLyogUmVjZWl2ZSBGQ0MxIENsb2NrIFNvdXJjZSBNYXNrICovCisjZGVmaW5lIENNWEZDUl9URjFDU19NU0sgICAweDA3MDAwMDAwICAgLyogVHJhbnNtaXQgRkNDMSBDbG9jayBTb3VyY2UgTWFzayAqLworI2RlZmluZSBDTVhGQ1JfRkMyICAgICAgICAgMHgwMDQwMDAwMCAgIC8qIEZDQzIgY29ubmVjdGlvbiAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ01YRkNSX1JGMkNTX01TSyAgIDB4MDAzODAwMDAgICAvKiBSZWNlaXZlIEZDQzIgQ2xvY2sgU291cmNlIE1hc2sgKi8KKyNkZWZpbmUgQ01YRkNSX1RGMkNTX01TSyAgIDB4MDAwNzAwMDAgICAvKiBUcmFuc21pdCBGQ0MyIENsb2NrIFNvdXJjZSBNYXNrICovCisjZGVmaW5lIENNWEZDUl9GQzMgICAgICAgICAweDAwMDA0MDAwICAgLyogRkNDMyBjb25uZWN0aW9uICAgICAgICAgICAgICAqLworI2RlZmluZSBDTVhGQ1JfUkYzQ1NfTVNLICAgMHgwMDAwMzgwMCAgIC8qIFJlY2VpdmUgRkNDMyBDbG9jayBTb3VyY2UgTWFzayAqLworI2RlZmluZSBDTVhGQ1JfVEYzQ1NfTVNLICAgMHgwMDAwMDcwMCAgIC8qIFRyYW5zbWl0IEZDQzMgQ2xvY2sgU291cmNlIE1hc2sgKi8KKworI2RlZmluZSBDTVhGQ1JfUkYxQ1NfQlJHNSAgMHgwMDAwMDAwMCAgIC8qIFJlY2VpdmUgRkNDMSBDbG9jayBTb3VyY2UgaXMgQlJHNSAqLworI2RlZmluZSBDTVhGQ1JfUkYxQ1NfQlJHNiAgMHgwODAwMDAwMCAgIC8qIFJlY2VpdmUgRkNDMSBDbG9jayBTb3VyY2UgaXMgQlJHNiAqLworI2RlZmluZSBDTVhGQ1JfUkYxQ1NfQlJHNyAgMHgxMDAwMDAwMCAgIC8qIFJlY2VpdmUgRkNDMSBDbG9jayBTb3VyY2UgaXMgQlJHNyAqLworI2RlZmluZSBDTVhGQ1JfUkYxQ1NfQlJHOCAgMHgxODAwMDAwMCAgIC8qIFJlY2VpdmUgRkNDMSBDbG9jayBTb3VyY2UgaXMgQlJHOCAqLworI2RlZmluZSBDTVhGQ1JfUkYxQ1NfQ0xLOSAgMHgyMDAwMDAwMCAgIC8qIFJlY2VpdmUgRkNDMSBDbG9jayBTb3VyY2UgaXMgQ0xLOSAqLworI2RlZmluZSBDTVhGQ1JfUkYxQ1NfQ0xLMTAgMHgyODAwMDAwMCAgIC8qIFJlY2VpdmUgRkNDMSBDbG9jayBTb3VyY2UgaXMgQ0xLMTAgKi8KKyNkZWZpbmUgQ01YRkNSX1JGMUNTX0NMSzExIDB4MzAwMDAwMDAgICAvKiBSZWNlaXZlIEZDQzEgQ2xvY2sgU291cmNlIGlzIENMSzExICovCisjZGVmaW5lIENNWEZDUl9SRjFDU19DTEsxMiAweDM4MDAwMDAwICAgLyogUmVjZWl2ZSBGQ0MxIENsb2NrIFNvdXJjZSBpcyBDTEsxMiAqLworCisjZGVmaW5lIENNWEZDUl9URjFDU19CUkc1ICAweDAwMDAwMDAwICAgLyogVHJhbnNtaXQgRkNDMSBDbG9jayBTb3VyY2UgaXMgQlJHNSAqLworI2RlZmluZSBDTVhGQ1JfVEYxQ1NfQlJHNiAgMHgwMTAwMDAwMCAgIC8qIFRyYW5zbWl0IEZDQzEgQ2xvY2sgU291cmNlIGlzIEJSRzYgKi8KKyNkZWZpbmUgQ01YRkNSX1RGMUNTX0JSRzcgIDB4MDIwMDAwMDAgICAvKiBUcmFuc21pdCBGQ0MxIENsb2NrIFNvdXJjZSBpcyBCUkc3ICovCisjZGVmaW5lIENNWEZDUl9URjFDU19CUkc4ICAweDAzMDAwMDAwICAgLyogVHJhbnNtaXQgRkNDMSBDbG9jayBTb3VyY2UgaXMgQlJHOCAqLworI2RlZmluZSBDTVhGQ1JfVEYxQ1NfQ0xLOSAgMHgwNDAwMDAwMCAgIC8qIFRyYW5zbWl0IEZDQzEgQ2xvY2sgU291cmNlIGlzIENMSzkgKi8KKyNkZWZpbmUgQ01YRkNSX1RGMUNTX0NMSzEwIDB4MDUwMDAwMDAgICAvKiBUcmFuc21pdCBGQ0MxIENsb2NrIFNvdXJjZSBpcyBDTEsxMCAqLworI2RlZmluZSBDTVhGQ1JfVEYxQ1NfQ0xLMTEgMHgwNjAwMDAwMCAgIC8qIFRyYW5zbWl0IEZDQzEgQ2xvY2sgU291cmNlIGlzIENMSzExICovCisjZGVmaW5lIENNWEZDUl9URjFDU19DTEsxMiAweDA3MDAwMDAwICAgLyogVHJhbnNtaXQgRkNDMSBDbG9jayBTb3VyY2UgaXMgQ0xLMTIgKi8KKworI2RlZmluZSBDTVhGQ1JfUkYyQ1NfQlJHNSAgMHgwMDAwMDAwMCAgIC8qIFJlY2VpdmUgRkNDMiBDbG9jayBTb3VyY2UgaXMgQlJHNSAqLworI2RlZmluZSBDTVhGQ1JfUkYyQ1NfQlJHNiAgMHgwMDA4MDAwMCAgIC8qIFJlY2VpdmUgRkNDMiBDbG9jayBTb3VyY2UgaXMgQlJHNiAqLworI2RlZmluZSBDTVhGQ1JfUkYyQ1NfQlJHNyAgMHgwMDEwMDAwMCAgIC8qIFJlY2VpdmUgRkNDMiBDbG9jayBTb3VyY2UgaXMgQlJHNyAqLworI2RlZmluZSBDTVhGQ1JfUkYyQ1NfQlJHOCAgMHgwMDE4MDAwMCAgIC8qIFJlY2VpdmUgRkNDMiBDbG9jayBTb3VyY2UgaXMgQlJHOCAqLworI2RlZmluZSBDTVhGQ1JfUkYyQ1NfQ0xLMTMgMHgwMDIwMDAwMCAgIC8qIFJlY2VpdmUgRkNDMiBDbG9jayBTb3VyY2UgaXMgQ0xLMTMgKi8KKyNkZWZpbmUgQ01YRkNSX1JGMkNTX0NMSzE0IDB4MDAyODAwMDAgICAvKiBSZWNlaXZlIEZDQzIgQ2xvY2sgU291cmNlIGlzIENMSzE0ICovCisjZGVmaW5lIENNWEZDUl9SRjJDU19DTEsxNSAweDAwMzAwMDAwICAgLyogUmVjZWl2ZSBGQ0MyIENsb2NrIFNvdXJjZSBpcyBDTEsxNSAqLworI2RlZmluZSBDTVhGQ1JfUkYyQ1NfQ0xLMTYgMHgwMDM4MDAwMCAgIC8qIFJlY2VpdmUgRkNDMiBDbG9jayBTb3VyY2UgaXMgQ0xLMTYgKi8KKworI2RlZmluZSBDTVhGQ1JfVEYyQ1NfQlJHNSAgMHgwMDAwMDAwMCAgIC8qIFRyYW5zbWl0IEZDQzIgQ2xvY2sgU291cmNlIGlzIEJSRzUgKi8KKyNkZWZpbmUgQ01YRkNSX1RGMkNTX0JSRzYgIDB4MDAwMTAwMDAgICAvKiBUcmFuc21pdCBGQ0MyIENsb2NrIFNvdXJjZSBpcyBCUkc2ICovCisjZGVmaW5lIENNWEZDUl9URjJDU19CUkc3ICAweDAwMDIwMDAwICAgLyogVHJhbnNtaXQgRkNDMiBDbG9jayBTb3VyY2UgaXMgQlJHNyAqLworI2RlZmluZSBDTVhGQ1JfVEYyQ1NfQlJHOCAgMHgwMDAzMDAwMCAgIC8qIFRyYW5zbWl0IEZDQzIgQ2xvY2sgU291cmNlIGlzIEJSRzggKi8KKyNkZWZpbmUgQ01YRkNSX1RGMkNTX0NMSzEzIDB4MDAwNDAwMDAgICAvKiBUcmFuc21pdCBGQ0MyIENsb2NrIFNvdXJjZSBpcyBDTEsxMyAqLworI2RlZmluZSBDTVhGQ1JfVEYyQ1NfQ0xLMTQgMHgwMDA1MDAwMCAgIC8qIFRyYW5zbWl0IEZDQzIgQ2xvY2sgU291cmNlIGlzIENMSzE0ICovCisjZGVmaW5lIENNWEZDUl9URjJDU19DTEsxNSAweDAwMDYwMDAwICAgLyogVHJhbnNtaXQgRkNDMiBDbG9jayBTb3VyY2UgaXMgQ0xLMTUgKi8KKyNkZWZpbmUgQ01YRkNSX1RGMkNTX0NMSzE2IDB4MDAwNzAwMDAgICAvKiBUcmFuc21pdCBGQ0MyIENsb2NrIFNvdXJjZSBpcyBDTEsxNiAqLworCisjZGVmaW5lIENNWEZDUl9SRjNDU19CUkc1ICAweDAwMDAwMDAwICAgLyogUmVjZWl2ZSBGQ0MzIENsb2NrIFNvdXJjZSBpcyBCUkc1ICovCisjZGVmaW5lIENNWEZDUl9SRjNDU19CUkc2ICAweDAwMDAwODAwICAgLyogUmVjZWl2ZSBGQ0MzIENsb2NrIFNvdXJjZSBpcyBCUkc2ICovCisjZGVmaW5lIENNWEZDUl9SRjNDU19CUkc3ICAweDAwMDAxMDAwICAgLyogUmVjZWl2ZSBGQ0MzIENsb2NrIFNvdXJjZSBpcyBCUkc3ICovCisjZGVmaW5lIENNWEZDUl9SRjNDU19CUkc4ICAweDAwMDAxODAwICAgLyogUmVjZWl2ZSBGQ0MzIENsb2NrIFNvdXJjZSBpcyBCUkc4ICovCisjZGVmaW5lIENNWEZDUl9SRjNDU19DTEsxMyAweDAwMDAyMDAwICAgLyogUmVjZWl2ZSBGQ0MzIENsb2NrIFNvdXJjZSBpcyBDTEsxMyAqLworI2RlZmluZSBDTVhGQ1JfUkYzQ1NfQ0xLMTQgMHgwMDAwMjgwMCAgIC8qIFJlY2VpdmUgRkNDMyBDbG9jayBTb3VyY2UgaXMgQ0xLMTQgKi8KKyNkZWZpbmUgQ01YRkNSX1JGM0NTX0NMSzE1IDB4MDAwMDMwMDAgICAvKiBSZWNlaXZlIEZDQzMgQ2xvY2sgU291cmNlIGlzIENMSzE1ICovCisjZGVmaW5lIENNWEZDUl9SRjNDU19DTEsxNiAweDAwMDAzODAwICAgLyogUmVjZWl2ZSBGQ0MzIENsb2NrIFNvdXJjZSBpcyBDTEsxNiAqLworCisjZGVmaW5lIENNWEZDUl9URjNDU19CUkc1ICAweDAwMDAwMDAwICAgLyogVHJhbnNtaXQgRkNDMyBDbG9jayBTb3VyY2UgaXMgQlJHNSAqLworI2RlZmluZSBDTVhGQ1JfVEYzQ1NfQlJHNiAgMHgwMDAwMDEwMCAgIC8qIFRyYW5zbWl0IEZDQzMgQ2xvY2sgU291cmNlIGlzIEJSRzYgKi8KKyNkZWZpbmUgQ01YRkNSX1RGM0NTX0JSRzcgIDB4MDAwMDAyMDAgICAvKiBUcmFuc21pdCBGQ0MzIENsb2NrIFNvdXJjZSBpcyBCUkc3ICovCisjZGVmaW5lIENNWEZDUl9URjNDU19CUkc4ICAweDAwMDAwMzAwICAgLyogVHJhbnNtaXQgRkNDMyBDbG9jayBTb3VyY2UgaXMgQlJHOCAqLworI2RlZmluZSBDTVhGQ1JfVEYzQ1NfQ0xLMTMgMHgwMDAwMDQwMCAgIC8qIFRyYW5zbWl0IEZDQzMgQ2xvY2sgU291cmNlIGlzIENMSzEzICovCisjZGVmaW5lIENNWEZDUl9URjNDU19DTEsxNCAweDAwMDAwNTAwICAgLyogVHJhbnNtaXQgRkNDMyBDbG9jayBTb3VyY2UgaXMgQ0xLMTQgKi8KKyNkZWZpbmUgQ01YRkNSX1RGM0NTX0NMSzE1IDB4MDAwMDA2MDAgICAvKiBUcmFuc21pdCBGQ0MzIENsb2NrIFNvdXJjZSBpcyBDTEsxNSAqLworI2RlZmluZSBDTVhGQ1JfVEYzQ1NfQ0xLMTYgMHgwMDAwMDcwMCAgIC8qIFRyYW5zbWl0IEZDQzMgQ2xvY2sgU291cmNlIGlzIENMSzE2ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIENNWFNDUiAtIENNWCBTQ0MgQ2xvY2sgUm91dGUgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBDTVhTQ1JfR1IxICAgICAgICAgMHg4MDAwMDAwMCAgIC8qIEdyYW50IFN1cHBvcnQgb2YgU0NDMSAgICAgICAgKi8KKyNkZWZpbmUgQ01YU0NSX1NDMSAgICAgICAgIDB4NDAwMDAwMDAgICAvKiBTQ0MxIGNvbm5lY3Rpb24gICAgICAgICAgICAgICovCisjZGVmaW5lIENNWFNDUl9SUzFDU19NU0sgICAweDM4MDAwMDAwICAgLyogUmVjZWl2ZSBTQ0MxIENsb2NrIFNvdXJjZSBNYXNrICovCisjZGVmaW5lIENNWFNDUl9UUzFDU19NU0sgICAweDA3MDAwMDAwICAgLyogVHJhbnNtaXQgU0NDMSBDbG9jayBTb3VyY2UgTWFzayAqLworI2RlZmluZSBDTVhTQ1JfR1IyICAgICAgICAgMHgwMDgwMDAwMCAgIC8qIEdyYW50IFN1cHBvcnQgb2YgU0NDMiAgICAgICAgKi8KKyNkZWZpbmUgQ01YU0NSX1NDMiAgICAgICAgIDB4MDA0MDAwMDAgICAvKiBTQ0MyIGNvbm5lY3Rpb24gICAgICAgICAgICAgICovCisjZGVmaW5lIENNWFNDUl9SUzJDU19NU0sgICAweDAwMzgwMDAwICAgLyogUmVjZWl2ZSBTQ0MyIENsb2NrIFNvdXJjZSBNYXNrICovCisjZGVmaW5lIENNWFNDUl9UUzJDU19NU0sgICAweDAwMDcwMDAwICAgLyogVHJhbnNtaXQgU0NDMiBDbG9jayBTb3VyY2UgTWFzayAqLworI2RlZmluZSBDTVhTQ1JfR1IzICAgICAgICAgMHgwMDAwODAwMCAgIC8qIEdyYW50IFN1cHBvcnQgb2YgU0NDMyAgICAgICAgKi8KKyNkZWZpbmUgQ01YU0NSX1NDMyAgICAgICAgIDB4MDAwMDQwMDAgICAvKiBTQ0MzIGNvbm5lY3Rpb24gICAgICAgICAgICAgICovCisjZGVmaW5lIENNWFNDUl9SUzNDU19NU0sgICAweDAwMDAzODAwICAgLyogUmVjZWl2ZSBTQ0MzIENsb2NrIFNvdXJjZSBNYXNrICovCisjZGVmaW5lIENNWFNDUl9UUzNDU19NU0sgICAweDAwMDAwNzAwICAgLyogVHJhbnNtaXQgU0NDMyBDbG9jayBTb3VyY2UgTWFzayAqLworI2RlZmluZSBDTVhTQ1JfR1I0ICAgICAgICAgMHgwMDAwMDA4MCAgIC8qIEdyYW50IFN1cHBvcnQgb2YgU0NDNCAgICAgICAgKi8KKyNkZWZpbmUgQ01YU0NSX1NDNCAgICAgICAgIDB4MDAwMDAwNDAgICAvKiBTQ0M0IGNvbm5lY3Rpb24gICAgICAgICAgICAgICovCisjZGVmaW5lIENNWFNDUl9SUzRDU19NU0sgICAweDAwMDAwMDM4ICAgLyogUmVjZWl2ZSBTQ0M0IENsb2NrIFNvdXJjZSBNYXNrICovCisjZGVmaW5lIENNWFNDUl9UUzRDU19NU0sgICAweDAwMDAwMDA3ICAgLyogVHJhbnNtaXQgU0NDNCBDbG9jayBTb3VyY2UgTWFzayAqLworCisjZGVmaW5lIENNWFNDUl9SUzFDU19CUkcxICAweDAwMDAwMDAwICAgLyogU0NDMSBSeCBDbG9jayBTb3VyY2UgaXMgQlJHMSAqLworI2RlZmluZSBDTVhTQ1JfUlMxQ1NfQlJHMiAgMHgwODAwMDAwMCAgIC8qIFNDQzEgUnggQ2xvY2sgU291cmNlIGlzIEJSRzIgKi8KKyNkZWZpbmUgQ01YU0NSX1JTMUNTX0JSRzMgIDB4MTAwMDAwMDAgICAvKiBTQ0MxIFJ4IENsb2NrIFNvdXJjZSBpcyBCUkczICovCisjZGVmaW5lIENNWFNDUl9SUzFDU19CUkc0ICAweDE4MDAwMDAwICAgLyogU0NDMSBSeCBDbG9jayBTb3VyY2UgaXMgQlJHNCAqLworI2RlZmluZSBDTVhTQ1JfUlMxQ1NfQ0xLMTEgMHgyMDAwMDAwMCAgIC8qIFNDQzEgUnggQ2xvY2sgU291cmNlIGlzIENMSzExICovCisjZGVmaW5lIENNWFNDUl9SUzFDU19DTEsxMiAweDI4MDAwMDAwICAgLyogU0NDMSBSeCBDbG9jayBTb3VyY2UgaXMgQ0xLMTIgKi8KKyNkZWZpbmUgQ01YU0NSX1JTMUNTX0NMSzMgIDB4MzAwMDAwMDAgICAvKiBTQ0MxIFJ4IENsb2NrIFNvdXJjZSBpcyBDTEszICovCisjZGVmaW5lIENNWFNDUl9SUzFDU19DTEs0ICAweDM4MDAwMDAwICAgLyogU0NDMSBSeCBDbG9jayBTb3VyY2UgaXMgQ0xLNCAqLworCisjZGVmaW5lIENNWFNDUl9UUzFDU19CUkcxICAweDAwMDAwMDAwICAgLyogU0NDMSBUeCBDbG9jayBTb3VyY2UgaXMgQlJHMSAqLworI2RlZmluZSBDTVhTQ1JfVFMxQ1NfQlJHMiAgMHgwMTAwMDAwMCAgIC8qIFNDQzEgVHggQ2xvY2sgU291cmNlIGlzIEJSRzIgKi8KKyNkZWZpbmUgQ01YU0NSX1RTMUNTX0JSRzMgIDB4MDIwMDAwMDAgICAvKiBTQ0MxIFR4IENsb2NrIFNvdXJjZSBpcyBCUkczICovCisjZGVmaW5lIENNWFNDUl9UUzFDU19CUkc0ICAweDAzMDAwMDAwICAgLyogU0NDMSBUeCBDbG9jayBTb3VyY2UgaXMgQlJHNCAqLworI2RlZmluZSBDTVhTQ1JfVFMxQ1NfQ0xLMTEgMHgwNDAwMDAwMCAgIC8qIFNDQzEgVHggQ2xvY2sgU291cmNlIGlzIENMSzExICovCisjZGVmaW5lIENNWFNDUl9UUzFDU19DTEsxMiAweDA1MDAwMDAwICAgLyogU0NDMSBUeCBDbG9jayBTb3VyY2UgaXMgQ0xLMTIgKi8KKyNkZWZpbmUgQ01YU0NSX1RTMUNTX0NMSzMgIDB4MDYwMDAwMDAgICAvKiBTQ0MxIFR4IENsb2NrIFNvdXJjZSBpcyBDTEszICovCisjZGVmaW5lIENNWFNDUl9UUzFDU19DTEs0ICAweDA3MDAwMDAwICAgLyogU0NDMSBUeCBDbG9jayBTb3VyY2UgaXMgQ0xLNCAqLworCisjZGVmaW5lIENNWFNDUl9SUzJDU19CUkcxICAweDAwMDAwMDAwICAgLyogU0NDMiBSeCBDbG9jayBTb3VyY2UgaXMgQlJHMSAqLworI2RlZmluZSBDTVhTQ1JfUlMyQ1NfQlJHMiAgMHgwMDA4MDAwMCAgIC8qIFNDQzIgUnggQ2xvY2sgU291cmNlIGlzIEJSRzIgKi8KKyNkZWZpbmUgQ01YU0NSX1JTMkNTX0JSRzMgIDB4MDAxMDAwMDAgICAvKiBTQ0MyIFJ4IENsb2NrIFNvdXJjZSBpcyBCUkczICovCisjZGVmaW5lIENNWFNDUl9SUzJDU19CUkc0ICAweDAwMTgwMDAwICAgLyogU0NDMiBSeCBDbG9jayBTb3VyY2UgaXMgQlJHNCAqLworI2RlZmluZSBDTVhTQ1JfUlMyQ1NfQ0xLMTEgMHgwMDIwMDAwMCAgIC8qIFNDQzIgUnggQ2xvY2sgU291cmNlIGlzIENMSzExICovCisjZGVmaW5lIENNWFNDUl9SUzJDU19DTEsxMiAweDAwMjgwMDAwICAgLyogU0NDMiBSeCBDbG9jayBTb3VyY2UgaXMgQ0xLMTIgKi8KKyNkZWZpbmUgQ01YU0NSX1JTMkNTX0NMSzMgIDB4MDAzMDAwMDAgICAvKiBTQ0MyIFJ4IENsb2NrIFNvdXJjZSBpcyBDTEszICovCisjZGVmaW5lIENNWFNDUl9SUzJDU19DTEs0ICAweDAwMzgwMDAwICAgLyogU0NDMiBSeCBDbG9jayBTb3VyY2UgaXMgQ0xLNCAqLworCisjZGVmaW5lIENNWFNDUl9UUzJDU19CUkcxICAweDAwMDAwMDAwICAgLyogU0NDMiBUeCBDbG9jayBTb3VyY2UgaXMgQlJHMSAqLworI2RlZmluZSBDTVhTQ1JfVFMyQ1NfQlJHMiAgMHgwMDAxMDAwMCAgIC8qIFNDQzIgVHggQ2xvY2sgU291cmNlIGlzIEJSRzIgKi8KKyNkZWZpbmUgQ01YU0NSX1RTMkNTX0JSRzMgIDB4MDAwMjAwMDAgICAvKiBTQ0MyIFR4IENsb2NrIFNvdXJjZSBpcyBCUkczICovCisjZGVmaW5lIENNWFNDUl9UUzJDU19CUkc0ICAweDAwMDMwMDAwICAgLyogU0NDMiBUeCBDbG9jayBTb3VyY2UgaXMgQlJHNCAqLworI2RlZmluZSBDTVhTQ1JfVFMyQ1NfQ0xLMTEgMHgwMDA0MDAwMCAgIC8qIFNDQzIgVHggQ2xvY2sgU291cmNlIGlzIENMSzExICovCisjZGVmaW5lIENNWFNDUl9UUzJDU19DTEsxMiAweDAwMDUwMDAwICAgLyogU0NDMiBUeCBDbG9jayBTb3VyY2UgaXMgQ0xLMTIgKi8KKyNkZWZpbmUgQ01YU0NSX1RTMkNTX0NMSzMgIDB4MDAwNjAwMDAgICAvKiBTQ0MyIFR4IENsb2NrIFNvdXJjZSBpcyBDTEszICovCisjZGVmaW5lIENNWFNDUl9UUzJDU19DTEs0ICAweDAwMDcwMDAwICAgLyogU0NDMiBUeCBDbG9jayBTb3VyY2UgaXMgQ0xLNCAqLworCisjZGVmaW5lIENNWFNDUl9SUzNDU19CUkcxICAweDAwMDAwMDAwICAgLyogU0NDMyBSeCBDbG9jayBTb3VyY2UgaXMgQlJHMSAqLworI2RlZmluZSBDTVhTQ1JfUlMzQ1NfQlJHMiAgMHgwMDAwMDgwMCAgIC8qIFNDQzMgUnggQ2xvY2sgU291cmNlIGlzIEJSRzIgKi8KKyNkZWZpbmUgQ01YU0NSX1JTM0NTX0JSRzMgIDB4MDAwMDEwMDAgICAvKiBTQ0MzIFJ4IENsb2NrIFNvdXJjZSBpcyBCUkczICovCisjZGVmaW5lIENNWFNDUl9SUzNDU19CUkc0ICAweDAwMDAxODAwICAgLyogU0NDMyBSeCBDbG9jayBTb3VyY2UgaXMgQlJHNCAqLworI2RlZmluZSBDTVhTQ1JfUlMzQ1NfQ0xLNSAgMHgwMDAwMjAwMCAgIC8qIFNDQzMgUnggQ2xvY2sgU291cmNlIGlzIENMSzUgKi8KKyNkZWZpbmUgQ01YU0NSX1JTM0NTX0NMSzYgIDB4MDAwMDI4MDAgICAvKiBTQ0MzIFJ4IENsb2NrIFNvdXJjZSBpcyBDTEs2ICovCisjZGVmaW5lIENNWFNDUl9SUzNDU19DTEs3ICAweDAwMDAzMDAwICAgLyogU0NDMyBSeCBDbG9jayBTb3VyY2UgaXMgQ0xLNyAqLworI2RlZmluZSBDTVhTQ1JfUlMzQ1NfQ0xLOCAgMHgwMDAwMzgwMCAgIC8qIFNDQzMgUnggQ2xvY2sgU291cmNlIGlzIENMSzggKi8KKworI2RlZmluZSBDTVhTQ1JfVFMzQ1NfQlJHMSAgMHgwMDAwMDAwMCAgIC8qIFNDQzMgVHggQ2xvY2sgU291cmNlIGlzIEJSRzEgKi8KKyNkZWZpbmUgQ01YU0NSX1RTM0NTX0JSRzIgIDB4MDAwMDAxMDAgICAvKiBTQ0MzIFR4IENsb2NrIFNvdXJjZSBpcyBCUkcyICovCisjZGVmaW5lIENNWFNDUl9UUzNDU19CUkczICAweDAwMDAwMjAwICAgLyogU0NDMyBUeCBDbG9jayBTb3VyY2UgaXMgQlJHMyAqLworI2RlZmluZSBDTVhTQ1JfVFMzQ1NfQlJHNCAgMHgwMDAwMDMwMCAgIC8qIFNDQzMgVHggQ2xvY2sgU291cmNlIGlzIEJSRzQgKi8KKyNkZWZpbmUgQ01YU0NSX1RTM0NTX0NMSzUgIDB4MDAwMDA0MDAgICAvKiBTQ0MzIFR4IENsb2NrIFNvdXJjZSBpcyBDTEs1ICovCisjZGVmaW5lIENNWFNDUl9UUzNDU19DTEs2ICAweDAwMDAwNTAwICAgLyogU0NDMyBUeCBDbG9jayBTb3VyY2UgaXMgQ0xLNiAqLworI2RlZmluZSBDTVhTQ1JfVFMzQ1NfQ0xLNyAgMHgwMDAwMDYwMCAgIC8qIFNDQzMgVHggQ2xvY2sgU291cmNlIGlzIENMSzcgKi8KKyNkZWZpbmUgQ01YU0NSX1RTM0NTX0NMSzggIDB4MDAwMDA3MDAgICAvKiBTQ0MzIFR4IENsb2NrIFNvdXJjZSBpcyBDTEs4ICovCisKKyNkZWZpbmUgQ01YU0NSX1JTNENTX0JSRzEgIDB4MDAwMDAwMDAgICAvKiBTQ0M0IFJ4IENsb2NrIFNvdXJjZSBpcyBCUkcxICovCisjZGVmaW5lIENNWFNDUl9SUzRDU19CUkcyICAweDAwMDAwMDA4ICAgLyogU0NDNCBSeCBDbG9jayBTb3VyY2UgaXMgQlJHMiAqLworI2RlZmluZSBDTVhTQ1JfUlM0Q1NfQlJHMyAgMHgwMDAwMDAxMCAgIC8qIFNDQzQgUnggQ2xvY2sgU291cmNlIGlzIEJSRzMgKi8KKyNkZWZpbmUgQ01YU0NSX1JTNENTX0JSRzQgIDB4MDAwMDAwMTggICAvKiBTQ0M0IFJ4IENsb2NrIFNvdXJjZSBpcyBCUkc0ICovCisjZGVmaW5lIENNWFNDUl9SUzRDU19DTEs1ICAweDAwMDAwMDIwICAgLyogU0NDNCBSeCBDbG9jayBTb3VyY2UgaXMgQ0xLNSAqLworI2RlZmluZSBDTVhTQ1JfUlM0Q1NfQ0xLNiAgMHgwMDAwMDAyOCAgIC8qIFNDQzQgUnggQ2xvY2sgU291cmNlIGlzIENMSzYgKi8KKyNkZWZpbmUgQ01YU0NSX1JTNENTX0NMSzcgIDB4MDAwMDAwMzAgICAvKiBTQ0M0IFJ4IENsb2NrIFNvdXJjZSBpcyBDTEs3ICovCisjZGVmaW5lIENNWFNDUl9SUzRDU19DTEs4ICAweDAwMDAwMDM4ICAgLyogU0NDNCBSeCBDbG9jayBTb3VyY2UgaXMgQ0xLOCAqLworCisjZGVmaW5lIENNWFNDUl9UUzRDU19CUkcxICAweDAwMDAwMDAwICAgLyogU0NDNCBUeCBDbG9jayBTb3VyY2UgaXMgQlJHMSAqLworI2RlZmluZSBDTVhTQ1JfVFM0Q1NfQlJHMiAgMHgwMDAwMDAwMSAgIC8qIFNDQzQgVHggQ2xvY2sgU291cmNlIGlzIEJSRzIgKi8KKyNkZWZpbmUgQ01YU0NSX1RTNENTX0JSRzMgIDB4MDAwMDAwMDIgICAvKiBTQ0M0IFR4IENsb2NrIFNvdXJjZSBpcyBCUkczICovCisjZGVmaW5lIENNWFNDUl9UUzRDU19CUkc0ICAweDAwMDAwMDAzICAgLyogU0NDNCBUeCBDbG9jayBTb3VyY2UgaXMgQlJHNCAqLworI2RlZmluZSBDTVhTQ1JfVFM0Q1NfQ0xLNSAgMHgwMDAwMDAwNCAgIC8qIFNDQzQgVHggQ2xvY2sgU291cmNlIGlzIENMSzUgKi8KKyNkZWZpbmUgQ01YU0NSX1RTNENTX0NMSzYgIDB4MDAwMDAwMDUgICAvKiBTQ0M0IFR4IENsb2NrIFNvdXJjZSBpcyBDTEs2ICovCisjZGVmaW5lIENNWFNDUl9UUzRDU19DTEs3ICAweDAwMDAwMDA2ICAgLyogU0NDNCBUeCBDbG9jayBTb3VyY2UgaXMgQ0xLNyAqLworI2RlZmluZSBDTVhTQ1JfVFM0Q1NfQ0xLOCAgMHgwMDAwMDAwNyAgIC8qIFNDQzQgVHggQ2xvY2sgU291cmNlIGlzIENMSzggKi8KKworI2VuZGlmIC8qIF9fQ1BNMl9fICovCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9jcHV0YWJsZS5oIGIvaW5jbHVkZS9hc20tcHBjL2NwdXRhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJkZTA0ZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9jcHV0YWJsZS5oCkBAIC0wLDAgKzEsMTI3IEBACisvKgorICogIGluY2x1ZGUvYXNtLXBwYy9jcHV0YWJsZS5oCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMSBCZW4uIEhlcnJlbnNjaG1pZHQgKGJlbmhAa2VybmVsLmNyYXNoaW5nLm9yZykKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9fQVNNX1BQQ19DUFVUQUJMRV9ICisjZGVmaW5lIF9fQVNNX1BQQ19DUFVUQUJMRV9ICisKKy8qIEV4cG9zZWQgdG8gdXNlcmxhbmQgQ1BVIGZlYXR1cmVzICovCisjZGVmaW5lIFBQQ19GRUFUVVJFXzMyCQkJMHg4MDAwMDAwMAorI2RlZmluZSBQUENfRkVBVFVSRV82NAkJCTB4NDAwMDAwMDAKKyNkZWZpbmUgUFBDX0ZFQVRVUkVfNjAxX0lOU1RSCQkweDIwMDAwMDAwCisjZGVmaW5lIFBQQ19GRUFUVVJFX0hBU19BTFRJVkVDCQkweDEwMDAwMDAwCisjZGVmaW5lIFBQQ19GRUFUVVJFX0hBU19GUFUJCTB4MDgwMDAwMDAKKyNkZWZpbmUgUFBDX0ZFQVRVUkVfSEFTX01NVQkJMHgwNDAwMDAwMAorI2RlZmluZSBQUENfRkVBVFVSRV9IQVNfNHh4TUFDCQkweDAyMDAwMDAwCisjZGVmaW5lIFBQQ19GRUFUVVJFX1VOSUZJRURfQ0FDSEUJMHgwMTAwMDAwMAorI2RlZmluZSBQUENfRkVBVFVSRV9IQVNfU1BFCQkweDAwODAwMDAwCisjZGVmaW5lIFBQQ19GRUFUVVJFX0hBU19FRlBfU0lOR0xFCTB4MDA0MDAwMDAKKyNkZWZpbmUgUFBDX0ZFQVRVUkVfSEFTX0VGUF9ET1VCTEUJMHgwMDIwMDAwMAorCisjaWZkZWYgX19LRVJORUxfXworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisvKiBUaGlzIHN0cnVjdHVyZSBjYW4gZ3JvdywgaXQncyByZWFsIHNpemUgaXMgdXNlZCBieSBoZWFkLlMgY29kZQorICogdmlhIHRoZSBta2RlZnMgbWVjYW5pc20uCisgKi8KK3N0cnVjdCBjcHVfc3BlYzsKKwordHlwZWRlZgl2b2lkICgqY3B1X3NldHVwX3QpKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBpbnQgY3B1X25yLCBzdHJ1Y3QgY3B1X3NwZWMqIHNwZWMpOworCitzdHJ1Y3QgY3B1X3NwZWMgeworCS8qIENQVSBpcyBtYXRjaGVkIHZpYSAoUFZSICYgcHZyX21hc2spID09IHB2cl92YWx1ZSAqLworCXVuc2lnbmVkIGludAlwdnJfbWFzazsKKwl1bnNpZ25lZCBpbnQJcHZyX3ZhbHVlOworCisJY2hhcgkJKmNwdV9uYW1lOworCXVuc2lnbmVkIGludAljcHVfZmVhdHVyZXM7CQkvKiBLZXJuZWwgZmVhdHVyZXMgKi8KKwl1bnNpZ25lZCBpbnQJY3B1X3VzZXJfZmVhdHVyZXM7CS8qIFVzZXJsYW5kIGZlYXR1cmVzICovCisKKwkvKiBjYWNoZSBsaW5lIHNpemVzICovCisJdW5zaWduZWQgaW50CWljYWNoZV9ic2l6ZTsKKwl1bnNpZ25lZCBpbnQJZGNhY2hlX2JzaXplOworCisJLyogbnVtYmVyIG9mIHBlcmZvcm1hbmNlIG1vbml0b3IgY291bnRlcnMgKi8KKwl1bnNpZ25lZCBpbnQJbnVtX3BtY3M7CisKKwkvKiB0aGlzIGlzIGNhbGxlZCB0byBpbml0aWFsaXplIHZhcmlvdXMgQ1BVIGJpdHMgbGlrZSBMMSBjYWNoZSwKKwkgKiBCSFQsIFNQRCwgZXRjLi4uIGZyb20gaGVhZC5TIGJlZm9yZSBicmFuY2hpbmcgdG8gaWRlbnRpZnlfbWFjaGluZQorCSAqLworCWNwdV9zZXR1cF90CWNwdV9zZXR1cDsKK307CisKK2V4dGVybiBzdHJ1Y3QgY3B1X3NwZWMJCWNwdV9zcGVjc1tdOworZXh0ZXJuIHN0cnVjdCBjcHVfc3BlYwkJKmN1cl9jcHVfc3BlY1tdOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjcHVfaGFzX2ZlYXR1cmUodW5zaWduZWQgaW50IGZlYXR1cmUpCit7CisJcmV0dXJuIGN1cl9jcHVfc3BlY1swXS0+Y3B1X2ZlYXR1cmVzICYgZmVhdHVyZTsKK30KKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisvKiBDUFUga2VybmVsIGZlYXR1cmVzICovCisjZGVmaW5lIENQVV9GVFJfU1BMSVRfSURfQ0FDSEUJCTB4MDAwMDAwMDEKKyNkZWZpbmUgQ1BVX0ZUUl9MMkNSCQkJMHgwMDAwMDAwMgorI2RlZmluZSBDUFVfRlRSX1NQRUM3NDUwCQkweDAwMDAwMDA0CisjZGVmaW5lIENQVV9GVFJfQUxUSVZFQwkJCTB4MDAwMDAwMDgKKyNkZWZpbmUgQ1BVX0ZUUl9UQVUJCQkweDAwMDAwMDEwCisjZGVmaW5lIENQVV9GVFJfQ0FOX0RPWkUJCTB4MDAwMDAwMjAKKyNkZWZpbmUgQ1BVX0ZUUl9VU0VfVEIJCQkweDAwMDAwMDQwCisjZGVmaW5lIENQVV9GVFJfNjA0X1BFUkZfTU9OCQkweDAwMDAwMDgwCisjZGVmaW5lIENQVV9GVFJfNjAxCQkJMHgwMDAwMDEwMAorI2RlZmluZSBDUFVfRlRSX0hQVEVfVEFCTEUJCTB4MDAwMDAyMDAKKyNkZWZpbmUgQ1BVX0ZUUl9DQU5fTkFQCQkJMHgwMDAwMDQwMAorI2RlZmluZSBDUFVfRlRSX0wzQ1IJCQkweDAwMDAwODAwCisjZGVmaW5lIENQVV9GVFJfTDNfRElTQUJMRV9OQVAJCTB4MDAwMDEwMDAKKyNkZWZpbmUgQ1BVX0ZUUl9OQVBfRElTQUJMRV9MMl9QUgkweDAwMDAyMDAwCisjZGVmaW5lIENQVV9GVFJfRFVBTF9QTExfNzUwRlgJCTB4MDAwMDQwMDAKKyNkZWZpbmUgQ1BVX0ZUUl9OT19EUE0JCQkweDAwMDA4MDAwCisjZGVmaW5lIENQVV9GVFJfSEFTX0hJR0hfQkFUUwkJMHgwMDAxMDAwMAorI2RlZmluZSBDUFVfRlRSX05FRURfQ09IRVJFTlQgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgQ1BVX0ZUUl9OT19CVElDCQkJMHgwMDA0MDAwMAorCisjaWZkZWYgX19BU1NFTUJMWV9fCisKKyNkZWZpbmUgQkVHSU5fRlRSX1NFQ1RJT04JCTk4OgorCisjZGVmaW5lIEVORF9GVFJfU0VDVElPTihtc2ssIHZhbCkJCVwKKzk5OgkJCQkJCVwKKwkuc2VjdGlvbiBfX2Z0cl9maXh1cCwiYSI7CQlcCisJLmFsaWduIDI7CQkJCVwKKwkubG9uZyBtc2s7CQkJCVwKKwkubG9uZyB2YWw7CQkJCVwKKwkubG9uZyA5OGI7CQkJCVwKKwkubG9uZyA5OWI7CQkJCVwKKwkucHJldmlvdXMKKworI2Vsc2UKKworI2RlZmluZSBCRUdJTl9GVFJfU0VDVElPTgkJIjk4OlxuIgorI2RlZmluZSBFTkRfRlRSX1NFQ1RJT04obXNrLCB2YWwpCQlcCisiOTk6XG4iCQkJCQkJXAorIgkuc2VjdGlvbiBfX2Z0cl9maXh1cCxcImFcIjtcbiIJCVwKKyIJLmFsaWduIDI7XG4iCQkJCVwKKyIJLmxvbmcgIiNtc2siO1xuIgkJCVwKKyIJLmxvbmcgIiN2YWwiO1xuIgkJCVwKKyIJLmxvbmcgOThiO1xuIgkJCSAgICAgICAgXAorIgkubG9uZyA5OWI7XG4iCSAJCSAgICAgICAgXAorIgkucHJldmlvdXNcbiIKKworCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKyNkZWZpbmUgRU5EX0ZUUl9TRUNUSU9OX0lGU0VUKG1zaykJRU5EX0ZUUl9TRUNUSU9OKChtc2spLCAobXNrKSkKKyNkZWZpbmUgRU5EX0ZUUl9TRUNUSU9OX0lGQ0xSKG1zaykJRU5EX0ZUUl9TRUNUSU9OKChtc2spLCAwKQorCisjZW5kaWYgLyogX19BU01fUFBDX0NQVVRBQkxFX0ggKi8KKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9jcHV0aW1lLmggYi9pbmNsdWRlL2FzbS1wcGMvY3B1dGltZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlOWZhZjUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGMvY3B1dGltZS5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfX1BQQ19DUFVUSU1FX0gKKyNkZWZpbmUgX19QUENfQ1BVVElNRV9ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9jcHV0aW1lLmg+CisKKyNlbmRpZiAvKiBfX1BQQ19DUFVUSU1FX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9jdXJyZW50LmggYi9pbmNsdWRlL2FzbS1wcGMvY3VycmVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkNDE1MDEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGMvY3VycmVudC5oCkBAIC0wLDAgKzEsMTEgQEAKKyNpZmRlZiBfX0tFUk5FTF9fCisjaWZuZGVmIF9QUENfQ1VSUkVOVF9ICisjZGVmaW5lIF9QUENfQ1VSUkVOVF9ICisKKy8qCisgKiBXZSBrZWVwIGBjdXJyZW50JyBpbiByMiBmb3Igc3BlZWQuCisgKi8KK3JlZ2lzdGVyIHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VycmVudCBhc20gKCJyMiIpOworCisjZW5kaWYgLyogIShfUFBDX0NVUlJFTlRfSCkgKi8KKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvZGJkbWEuaCBiL2luY2x1ZGUvYXNtLXBwYy9kYmRtYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwNDdmMjgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGMvZGJkbWEuaApAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAqIERlZmluaXRpb25zIGZvciB1c2luZyB0aGUgQXBwbGUgRGVzY3JpcHRvci1CYXNlZCBETUEgY29udHJvbGxlcgorICogaW4gUG93ZXIgTWFjaW50b3NoIGNvbXB1dGVycy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYgUGF1bCBNYWNrZXJyYXMuCisgKi8KKworI2lmZGVmIF9fS0VSTkVMX18KKyNpZm5kZWYgX0FTTV9EQkRNQV9IXworI2RlZmluZSBfQVNNX0RCRE1BX0hfCisvKgorICogREJETUEgY29udHJvbC9zdGF0dXMgcmVnaXN0ZXJzLiAgQWxsIGxpdHRsZS1lbmRpYW4uCisgKi8KK3N0cnVjdCBkYmRtYV9yZWdzIHsKKyAgICB1bnNpZ25lZCBpbnQgY29udHJvbDsJLyogbGV0cyB5b3UgY2hhbmdlIGJpdHMgaW4gc3RhdHVzICovCisgICAgdW5zaWduZWQgaW50IHN0YXR1czsJLyogRE1BIGFuZCBkZXZpY2Ugc3RhdHVzIGJpdHMgKHNlZSBiZWxvdykgKi8KKyAgICB1bnNpZ25lZCBpbnQgY21kcHRyX2hpOwkvKiB1cHBlciAzMiBiaXRzIG9mIGNvbW1hbmQgYWRkcmVzcyAqLworICAgIHVuc2lnbmVkIGludCBjbWRwdHI7CS8qIChsb3dlciAzMiBiaXRzIG9mKSBjb21tYW5kIGFkZHJlc3MgKHBoeXMpICovCisgICAgdW5zaWduZWQgaW50IGludHJfc2VsOwkvKiBzZWxlY3QgaW50ZXJydXB0IGNvbmRpdGlvbiBiaXQgKi8KKyAgICB1bnNpZ25lZCBpbnQgYnJfc2VsOwkvKiBzZWxlY3QgYnJhbmNoIGNvbmRpdGlvbiBiaXQgKi8KKyAgICB1bnNpZ25lZCBpbnQgd2FpdF9zZWw7CS8qIHNlbGVjdCB3YWl0IGNvbmRpdGlvbiBiaXQgKi8KKyAgICB1bnNpZ25lZCBpbnQgeGZlcl9tb2RlOworICAgIHVuc2lnbmVkIGludCBkYXRhMnB0cl9oaTsKKyAgICB1bnNpZ25lZCBpbnQgZGF0YTJwdHI7CisgICAgdW5zaWduZWQgaW50IHJlczE7CisgICAgdW5zaWduZWQgaW50IGFkZHJlc3NfaGk7CisgICAgdW5zaWduZWQgaW50IGJyX2FkZHJfaGk7CisgICAgdW5zaWduZWQgaW50IHJlczJbM107Cit9OworCisvKiBCaXRzIGluIGNvbnRyb2wgYW5kIHN0YXR1cyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgUlVOCTB4ODAwMAorI2RlZmluZSBQQVVTRQkweDQwMDAKKyNkZWZpbmUgRkxVU0gJMHgyMDAwCisjZGVmaW5lIFdBS0UJMHgxMDAwCisjZGVmaW5lIERFQUQJMHgwODAwCisjZGVmaW5lIEFDVElWRQkweDA0MDAKKyNkZWZpbmUgQlQJMHgwMTAwCisjZGVmaW5lIERFVlNUQVQJMHgwMGZmCisKKy8qCisgKiBEQkRNQSBjb21tYW5kIHN0cnVjdHVyZS4gIFRoZXNlIGZpZWxkcyBhcmUgYWxsIGxpdHRsZS1lbmRpYW4hCisgKi8KK3N0cnVjdCBkYmRtYV9jbWQgeworICAgIHVuc2lnbmVkIHNob3J0IHJlcV9jb3VudDsJLyogcmVxdWVzdGVkIGJ5dGUgdHJhbnNmZXIgY291bnQgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCBjb21tYW5kOwkvKiBjb21tYW5kIHdvcmQgKGhhcyBiaXQtZmllbGRzKSAqLworICAgIHVuc2lnbmVkIGludCAgIHBoeV9hZGRyOwkvKiBwaHlzaWNhbCBkYXRhIGFkZHJlc3MgKi8KKyAgICB1bnNpZ25lZCBpbnQgICBjbWRfZGVwOwkvKiBjb21tYW5kLWRlcGVuZGVudCBmaWVsZCAqLworICAgIHVuc2lnbmVkIHNob3J0IHJlc19jb3VudDsJLyogcmVzaWR1YWwgY291bnQgYWZ0ZXIgY29tcGxldGlvbiAqLworICAgIHVuc2lnbmVkIHNob3J0IHhmZXJfc3RhdHVzOwkvKiB0cmFuc2ZlciBzdGF0dXMgKi8KK307CisKKy8qIERCRE1BIGNvbW1hbmQgdmFsdWVzIGluIGNvbW1hbmQgZmllbGQgKi8KKyNkZWZpbmUgT1VUUFVUX01PUkUJMAkvKiB0cmFuc2ZlciBtZW1vcnkgZGF0YSB0byBzdHJlYW0gKi8KKyNkZWZpbmUgT1VUUFVUX0xBU1QJMHgxMDAwCS8qIGRpdHRvIGZvbGxvd2VkIGJ5IGVuZCBtYXJrZXIgKi8KKyNkZWZpbmUgSU5QVVRfTU9SRQkweDIwMDAJLyogdHJhbnNmZXIgc3RyZWFtIGRhdGEgdG8gbWVtb3J5ICovCisjZGVmaW5lIElOUFVUX0xBU1QJMHgzMDAwCS8qIGRpdHRvLCBleHBlY3QgZW5kIG1hcmtlciAqLworI2RlZmluZSBTVE9SRV9XT1JECTB4NDAwMAkvKiB3cml0ZSB3b3JkICg0IGJ5dGVzKSB0byBkZXZpY2UgcmVnICovCisjZGVmaW5lIExPQURfV09SRAkweDUwMDAJLyogcmVhZCB3b3JkICg0IGJ5dGVzKSBmcm9tIGRldmljZSByZWcgKi8KKyNkZWZpbmUgREJETUFfTk9QCTB4NjAwMAkvKiBkbyBub3RoaW5nICovCisjZGVmaW5lIERCRE1BX1NUT1AJMHg3MDAwCS8qIHN1c3BlbmQgcHJvY2Vzc2luZyAqLworCisvKiBLZXkgdmFsdWVzIGluIGNvbW1hbmQgZmllbGQgKi8KKyNkZWZpbmUgS0VZX1NUUkVBTTAJMAkvKiB1c3VhbCBkYXRhIHN0cmVhbSAqLworI2RlZmluZSBLRVlfU1RSRUFNMQkweDEwMAkvKiBjb250cm9sL3N0YXR1cyBzdHJlYW0gKi8KKyNkZWZpbmUgS0VZX1NUUkVBTTIJMHgyMDAJLyogZGV2aWNlLWRlcGVuZGVudCBzdHJlYW0gKi8KKyNkZWZpbmUgS0VZX1NUUkVBTTMJMHgzMDAJLyogZGV2aWNlLWRlcGVuZGVudCBzdHJlYW0gKi8KKyNkZWZpbmUgS0VZX1JFR1MJMHg1MDAJLyogZGV2aWNlIHJlZ2lzdGVyIHNwYWNlICovCisjZGVmaW5lIEtFWV9TWVNURU0JMHg2MDAJLyogc3lzdGVtIG1lbW9yeS1tYXBwZWQgc3BhY2UgKi8KKyNkZWZpbmUgS0VZX0RFVklDRQkweDcwMAkvKiBkZXZpY2UgbWVtb3J5LW1hcHBlZCBzcGFjZSAqLworCisvKiBJbnRlcnJ1cHQgY29udHJvbCB2YWx1ZXMgaW4gY29tbWFuZCBmaWVsZCAqLworI2RlZmluZSBJTlRSX05FVkVSCTAJLyogZG9uJ3QgaW50ZXJydXB0ICovCisjZGVmaW5lIElOVFJfSUZTRVQJMHgxMAkvKiBpbnRyIGlmIGNvbmRpdGlvbiBiaXQgaXMgMSAqLworI2RlZmluZSBJTlRSX0lGQ0xSCTB4MjAJLyogaW50ciBpZiBjb25kaXRpb24gYml0IGlzIDAgKi8KKyNkZWZpbmUgSU5UUl9BTFdBWVMJMHgzMAkvKiBhbHdheXMgaW50ZXJydXB0ICovCisKKy8qIEJyYW5jaCBjb250cm9sIHZhbHVlcyBpbiBjb21tYW5kIGZpZWxkICovCisjZGVmaW5lIEJSX05FVkVSCTAJLyogZG9uJ3QgYnJhbmNoICovCisjZGVmaW5lIEJSX0lGU0VUCTB4NAkvKiBicmFuY2ggaWYgY29uZGl0aW9uIGJpdCBpcyAxICovCisjZGVmaW5lIEJSX0lGQ0xSCTB4OAkvKiBicmFuY2ggaWYgY29uZGl0aW9uIGJpdCBpcyAwICovCisjZGVmaW5lIEJSX0FMV0FZUwkweGMJLyogYWx3YXlzIGJyYW5jaCAqLworCisvKiBXYWl0IGNvbnRyb2wgdmFsdWVzIGluIGNvbW1hbmQgZmllbGQgKi8KKyNkZWZpbmUgV0FJVF9ORVZFUgkwCS8qIGRvbid0IHdhaXQgKi8KKyNkZWZpbmUgV0FJVF9JRlNFVAkxCS8qIHdhaXQgaWYgY29uZGl0aW9uIGJpdCBpcyAxICovCisjZGVmaW5lIFdBSVRfSUZDTFIJMgkvKiB3YWl0IGlmIGNvbmRpdGlvbiBiaXQgaXMgMCAqLworI2RlZmluZSBXQUlUX0FMV0FZUwkzCS8qIGFsd2F5cyB3YWl0ICovCisKKy8qIEFsaWduIGFuIGFkZHJlc3MgZm9yIGEgREJETUEgY29tbWFuZCBzdHJ1Y3R1cmUgKi8KKyNkZWZpbmUgREJETUFfQUxJR04oeCkJKCgodW5zaWduZWQpKHgpICsgc2l6ZW9mKHN0cnVjdCBkYmRtYV9jbWQpIC0gMSkgXAorCQkJICYgLXNpemVvZihzdHJ1Y3QgZGJkbWFfY21kKSkKKworLyogVXNlZnVsIG1hY3JvcyAqLworI2RlZmluZSBEQkRNQV9ET19TVE9QKHJlZ3MpIGRvIHsJCQkJXAorCW91dF9sZTMyKCYoKHJlZ3MpLT5jb250cm9sKSwgKFJVTnxGTFVTSCk8PDE2KTsJCVwKKwl3aGlsZShpbl9sZTMyKCYoKHJlZ3MpLT5zdGF0dXMpKSAmIChBQ1RJVkV8RkxVU0gpKQlcCisJCTsJCQkJCQlcCit9IHdoaWxlKDApCisKKyNlbmRpZiAvKiBfQVNNX0RCRE1BX0hfICovCisjZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL2RlbGF5LmggYi9pbmNsdWRlL2FzbS1wcGMvZGVsYXkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWRkZTY4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjL2RlbGF5LmgKQEAgLTAsMCArMSw2NiBAQAorI2lmZGVmIF9fS0VSTkVMX18KKyNpZm5kZWYgX1BQQ19ERUxBWV9ICisjZGVmaW5lIF9QUENfREVMQVlfSAorCisjaW5jbHVkZSA8YXNtL3BhcmFtLmg+CisKKy8qCisgKiBDb3B5cmlnaHQgMTk5NiwgUGF1bCBNYWNrZXJyYXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCitleHRlcm4gdW5zaWduZWQgbG9uZyBsb29wc19wZXJfamlmZnk7CisKK2V4dGVybiB2b2lkIF9fZGVsYXkodW5zaWduZWQgaW50IGxvb3BzKTsKKworLyoKKyAqIE5vdGUgdGhhdCAxOSAqIDIyNiA9PSA0Mjk0ID09fiAyXjMyIC8gMTBeNiwgc28KKyAqIGxvb3BzID0gKDQyOTQgKiB1c2VjcyAqIGxvb3BzX3Blcl9qaWZmeSAqIEhaKSAvIDJeMzIuCisgKgorICogVGhlIG11bGh3dSBpbnN0cnVjdGlvbiBnaXZlcyB1cyBsb29wcyA9IChhICogYikgLyAyXjMyLgorICogV2UgY2hvb3NlIGEgPSB1c2VjcyAqIDE5ICogSFogYW5kIGIgPSBsb29wc19wZXJfamlmZnkgKiAyMjYKKyAqIGJlY2F1c2UgdGhpcyBsZXRzIHVzIHN1cHBvcnQgYSB3aWRlIHJhbmdlIG9mIEhaIGFuZAorICogbG9vcHNfcGVyX2ppZmZ5IHZhbHVlcyB3aXRob3V0IGVpdGhlciBhIG9yIGIgb3ZlcmZsb3dpbmcgMl4zMi4KKyAqIFRodXMgd2UgbmVlZCB1c2VjcyAqIEhaIDw9ICgyXjMyIC0gMSkgLyAxOSA9IDIyNjA1MDkxMCBhbmQKKyAqIGxvb3BzX3Blcl9qaWZmeSA8PSAoMl4zMiAtIDEpIC8gMjI2ID0gMTkwMDQyODAKKyAqICh3aGljaCBjb3JyZXNwb25kcyB0byB+MzgwMCBib2dvbWlwcyBhdCBIWiA9IDEwMCkuCisgKiAgLS0gcGF1bHVzCisgKi8KKyNkZWZpbmUgX19NQVhfVURFTEFZCSgyMjYwNTA5MTBVTC9IWikJLyogbWF4aW11bSB1ZGVsYXkgYXJndW1lbnQgKi8KKyNkZWZpbmUgX19NQVhfTkRFTEFZCSg0Mjk0OTY3Mjk1VUwvSFopCS8qIG1heGltdW0gbmRlbGF5IGFyZ3VtZW50ICovCisKK2V4dGVybiBfX2lubGluZV9fIHZvaWQgX191ZGVsYXkodW5zaWduZWQgaW50IHgpCit7CisJdW5zaWduZWQgaW50IGxvb3BzOworCisJX19hc21fXygibXVsaHd1ICUwLCUxLCUyIiA6ICI9ciIgKGxvb3BzKSA6CisJCSJyIiAoeCksICJyIiAobG9vcHNfcGVyX2ppZmZ5ICogMjI2KSk7CisJX19kZWxheShsb29wcyk7Cit9CisKK2V4dGVybiBfX2lubGluZV9fIHZvaWQgX19uZGVsYXkodW5zaWduZWQgaW50IHgpCit7CisJdW5zaWduZWQgaW50IGxvb3BzOworCisJX19hc21fXygibXVsaHd1ICUwLCUxLCUyIiA6ICI9ciIgKGxvb3BzKSA6CisJCSJyIiAoeCksICJyIiAobG9vcHNfcGVyX2ppZmZ5ICogNSkpOworCV9fZGVsYXkobG9vcHMpOworfQorCitleHRlcm4gdm9pZCBfX2JhZF91ZGVsYXkodm9pZCk7CQkvKiBkZWxpYmVyYXRlbHkgdW5kZWZpbmVkICovCitleHRlcm4gdm9pZCBfX2JhZF9uZGVsYXkodm9pZCk7CQkvKiBkZWxpYmVyYXRlbHkgdW5kZWZpbmVkICovCisKKyNkZWZpbmUgdWRlbGF5KG4pIChfX2J1aWx0aW5fY29uc3RhbnRfcChuKT8gXAorCSgobikgPiBfX01BWF9VREVMQVk/IF9fYmFkX3VkZWxheSgpOiBfX3VkZWxheSgobikgKiAoMTkgKiBIWikpKSA6IFwKKwlfX3VkZWxheSgobikgKiAoMTkgKiBIWikpKQorCisjZGVmaW5lIG5kZWxheShuKSAoX19idWlsdGluX2NvbnN0YW50X3Aobik/IFwKKwkoKG4pID4gX19NQVhfTkRFTEFZPyBfX2JhZF9uZGVsYXkoKTogX19uZGVsYXkoKG4pICogSFopKSA6IFwKKwlfX25kZWxheSgobikgKiBIWikpCisKKyNlbmRpZiAvKiBkZWZpbmVkKF9QUENfREVMQVlfSCkgKi8KKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvZGl2NjQuaCBiL2luY2x1ZGUvYXNtLXBwYy9kaXY2NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjZDk3OGMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGMvZGl2NjQuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZGl2NjQuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9kbWEtbWFwcGluZy5oIGIvaW5jbHVkZS9hc20tcHBjL2RtYS1tYXBwaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2YwNDg3YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9kbWEtbWFwcGluZy5oCkBAIC0wLDAgKzEsMjM2IEBACisvKgorICogVGhpcyBpcyBiYXNlZCBvbiBib3RoIGluY2x1ZGUvYXNtLXNoL2RtYS1tYXBwaW5nLmggYW5kCisgKiBpbmNsdWRlL2FzbS1wcGMvcGNpLmgKKyAqLworI2lmbmRlZiBfX0FTTV9QUENfRE1BX01BUFBJTkdfSAorI2RlZmluZSBfX0FTTV9QUENfRE1BX01BUFBJTkdfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisvKiBuZWVkIHN0cnVjdCBwYWdlIGRlZmluaXRpb25zICovCisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxhc20vc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2lmZGVmIENPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEUKKy8qCisgKiBETUEtY29uc2lzdGVudCBtYXBwaW5nIGZ1bmN0aW9ucyBmb3IgUG93ZXJQQ3MgdGhhdCBkb24ndCBzdXBwb3J0CisgKiBjYWNoZSBzbm9vcGluZy4gIFRoZXNlIGFsbG9jYXRlL2ZyZWUgYSByZWdpb24gb2YgdW5jYWNoZWQgbWFwcGVkCisgKiBtZW1vcnkgc3BhY2UgZm9yIHVzZSB3aXRoIERNQSBkZXZpY2VzLiAgQWx0ZXJuYXRpdmVseSwgeW91IGNvdWxkCisgKiBhbGxvY2F0ZSB0aGUgc3BhY2UgIm5vcm1hbGx5IiBhbmQgdXNlIHRoZSBjYWNoZSBtYW5hZ2VtZW50IGZ1bmN0aW9ucworICogdG8gZW5zdXJlIGl0IGlzIGNvbnNpc3RlbnQuCisgKi8KK2V4dGVybiB2b2lkICpfX2RtYV9hbGxvY19jb2hlcmVudChzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCAqaGFuZGxlLCBpbnQgZ2ZwKTsKK2V4dGVybiB2b2lkIF9fZG1hX2ZyZWVfY29oZXJlbnQoc2l6ZV90IHNpemUsIHZvaWQgKnZhZGRyKTsKK2V4dGVybiB2b2lkIF9fZG1hX3N5bmModm9pZCAqdmFkZHIsIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKTsKK2V4dGVybiB2b2lkIF9fZG1hX3N5bmNfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsCisJCQkJIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKTsKKyNkZWZpbmUgZG1hX2NhY2hlX2ludihfc3RhcnQsX3NpemUpIFwKKwlpbnZhbGlkYXRlX2RjYWNoZV9yYW5nZShfc3RhcnQsIChfc3RhcnQgKyBfc2l6ZSkpCisjZGVmaW5lIGRtYV9jYWNoZV93YmFjayhfc3RhcnQsX3NpemUpIFwKKwljbGVhbl9kY2FjaGVfcmFuZ2UoX3N0YXJ0LCAoX3N0YXJ0ICsgX3NpemUpKQorI2RlZmluZSBkbWFfY2FjaGVfd2JhY2tfaW52KF9zdGFydCxfc2l6ZSkgXAorCWZsdXNoX2RjYWNoZV9yYW5nZShfc3RhcnQsIChfc3RhcnQgKyBfc2l6ZSkpCisKKyNlbHNlIC8qICEgQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRSAqLworLyoKKyAqIENhY2hlIGNvaGVyZW50IGNvcmVzLgorICovCisKKyNkZWZpbmUgZG1hX2NhY2hlX2ludihfc3RhcnQsX3NpemUpCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGRtYV9jYWNoZV93YmFjayhfc3RhcnQsX3NpemUpCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGRtYV9jYWNoZV93YmFja19pbnYoX3N0YXJ0LF9zaXplKQlkbyB7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgX19kbWFfYWxsb2NfY29oZXJlbnQoZ2ZwLCBzaXplLCBoYW5kbGUpCU5VTEwKKyNkZWZpbmUgX19kbWFfZnJlZV9jb2hlcmVudChzaXplLCBhZGRyKQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBfX2RtYV9zeW5jKGFkZHIsIHNpemUsIHJ3KQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBfX2RtYV9zeW5jX3BhZ2UocGcsIG9mZiwgc3osIHJ3KQlkbyB7IH0gd2hpbGUgKDApCisKKyNlbmRpZiAvKiAhIENPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEUgKi8KKworI2RlZmluZSBkbWFfc3VwcG9ydGVkKGRldiwgbWFzaykJKDEpCisKK3N0YXRpYyBpbmxpbmUgaW50IGRtYV9zZXRfbWFzayhzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBkbWFfbWFzaykKK3sKKwlpZiAoIWRldi0+ZG1hX21hc2sgfHwgIWRtYV9zdXBwb3J0ZWQoZGV2LCBtYXNrKSkKKwkJcmV0dXJuIC1FSU87CisKKwkqZGV2LT5kbWFfbWFzayA9IGRtYV9tYXNrOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqZG1hX2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCisJCQkJICAgICAgIGRtYV9hZGRyX3QgKiBkbWFfaGFuZGxlLCBpbnQgZ2ZwKQoreworI2lmZGVmIENPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEUKKwlyZXR1cm4gX19kbWFfYWxsb2NfY29oZXJlbnQoc2l6ZSwgZG1hX2hhbmRsZSwgZ2ZwKTsKKyNlbHNlCisJdm9pZCAqcmV0OworCS8qIGlnbm9yZSByZWdpb24gc3BlY2lmaWVycyAqLworCWdmcCAmPSB+KF9fR0ZQX0RNQSB8IF9fR0ZQX0hJR0hNRU0pOworCisJaWYgKGRldiA9PSBOVUxMIHx8IGRldi0+Y29oZXJlbnRfZG1hX21hc2sgPCAweGZmZmZmZmZmKQorCQlnZnAgfD0gR0ZQX0RNQTsKKworCXJldCA9ICh2b2lkICopX19nZXRfZnJlZV9wYWdlcyhnZnAsIGdldF9vcmRlcihzaXplKSk7CisKKwlpZiAocmV0ICE9IE5VTEwpIHsKKwkJbWVtc2V0KHJldCwgMCwgc2l6ZSk7CisJCSpkbWFfaGFuZGxlID0gdmlydF90b19idXMocmV0KTsKKwl9CisKKwlyZXR1cm4gcmV0OworI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZG1hX2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgdm9pZCAqdmFkZHIsCisJCSAgZG1hX2FkZHJfdCBkbWFfaGFuZGxlKQoreworI2lmZGVmIENPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEUKKwlfX2RtYV9mcmVlX2NvaGVyZW50KHNpemUsIHZhZGRyKTsKKyNlbHNlCisJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZyl2YWRkciwgZ2V0X29yZGVyKHNpemUpKTsKKyNlbmRpZgorfQorCitzdGF0aWMgaW5saW5lIGRtYV9hZGRyX3QKK2RtYV9tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwKKwkgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCUJVR19PTihkaXJlY3Rpb24gPT0gRE1BX05PTkUpOworCisJX19kbWFfc3luYyhwdHIsIHNpemUsIGRpcmVjdGlvbik7CisKKwlyZXR1cm4gdmlydF90b19idXMocHRyKTsKK30KKworLyogV2UgZG8gbm90aGluZy4gKi8KKyNkZWZpbmUgZG1hX3VubWFwX3NpbmdsZShkZXYsIGFkZHIsIHNpemUsIGRpcikJZG8geyB9IHdoaWxlICgwKQorCitzdGF0aWMgaW5saW5lIGRtYV9hZGRyX3QKK2RtYV9tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwYWdlICpwYWdlLAorCSAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLAorCSAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCUJVR19PTihkaXJlY3Rpb24gPT0gRE1BX05PTkUpOworCisJX19kbWFfc3luY19wYWdlKHBhZ2UsIG9mZnNldCwgc2l6ZSwgZGlyZWN0aW9uKTsKKworCXJldHVybiAocGFnZSAtIG1lbV9tYXApICogUEFHRV9TSVpFICsgUENJX0RSQU1fT0ZGU0VUICsgb2Zmc2V0OworfQorCisvKiBXZSBkbyBub3RoaW5nLiAqLworI2RlZmluZSBkbWFfdW5tYXBfcGFnZShkZXYsIGhhbmRsZSwgc2l6ZSwgZGlyKQlkbyB7IH0gd2hpbGUgKDApCisKK3N0YXRpYyBpbmxpbmUgaW50CitkbWFfbWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbnRzLAorCSAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlpbnQgaTsKKworCUJVR19PTihkaXJlY3Rpb24gPT0gRE1BX05PTkUpOworCisJZm9yIChpID0gMDsgaSA8IG5lbnRzOyBpKyssIHNnKyspIHsKKwkJQlVHX09OKCFzZy0+cGFnZSk7CisJCV9fZG1hX3N5bmNfcGFnZShzZy0+cGFnZSwgc2ctPm9mZnNldCwgc2ctPmxlbmd0aCwgZGlyZWN0aW9uKTsKKwkJc2ctPmRtYV9hZGRyZXNzID0gcGFnZV90b19idXMoc2ctPnBhZ2UpICsgc2ctPm9mZnNldDsKKwl9CisKKwlyZXR1cm4gbmVudHM7Cit9CisKKy8qIFdlIGRvbid0IGRvIGFueXRoaW5nIGhlcmUuICovCisjZGVmaW5lIGRtYV91bm1hcF9zZyhkZXYsIHNnLCBuZW50cywgZGlyKQlkbyB7IH0gd2hpbGUgKDApCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCisJCQlzaXplX3Qgc2l6ZSwKKwkJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlCVUdfT04oZGlyZWN0aW9uID09IERNQV9OT05FKTsKKworCV9fZG1hX3N5bmMoYnVzX3RvX3ZpcnQoZG1hX2hhbmRsZSksIHNpemUsIGRpcmVjdGlvbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCisJCQlzaXplX3Qgc2l6ZSwKKwkJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlCVUdfT04oZGlyZWN0aW9uID09IERNQV9OT05FKTsKKworCV9fZG1hX3N5bmMoYnVzX3RvX3ZpcnQoZG1hX2hhbmRsZSksIHNpemUsIGRpcmVjdGlvbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZG1hX3N5bmNfc2dfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZW50cywKKwkJICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlpbnQgaTsKKworCUJVR19PTihkaXJlY3Rpb24gPT0gRE1BX05PTkUpOworCisJZm9yIChpID0gMDsgaSA8IG5lbnRzOyBpKyssIHNnKyspCisJCV9fZG1hX3N5bmNfcGFnZShzZy0+cGFnZSwgc2ctPm9mZnNldCwgc2ctPmxlbmd0aCwgZGlyZWN0aW9uKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitkbWFfc3luY19zZ19mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbnRzLAorCQkgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCWludCBpOworCisJQlVHX09OKGRpcmVjdGlvbiA9PSBETUFfTk9ORSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbmVudHM7IGkrKywgc2crKykKKwkJX19kbWFfc3luY19wYWdlKHNnLT5wYWdlLCBzZy0+b2Zmc2V0LCBzZy0+bGVuZ3RoLCBkaXJlY3Rpb24pOworfQorCisjZGVmaW5lIGRtYV9hbGxvY19ub25jb2hlcmVudChkLCBzLCBoLCBmKSBkbWFfYWxsb2NfY29oZXJlbnQoZCwgcywgaCwgZikKKyNkZWZpbmUgZG1hX2ZyZWVfbm9uY29oZXJlbnQoZCwgcywgdiwgaCkgZG1hX2ZyZWVfY29oZXJlbnQoZCwgcywgdiwgaCkKKyNpZmRlZiBDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFCisjZGVmaW5lIGRtYV9pc19jb25zaXN0ZW50KGQpCSgwKQorI2Vsc2UKKyNkZWZpbmUgZG1hX2lzX2NvbnNpc3RlbnQoZCkJKDEpCisjZW5kaWYKKworc3RhdGljIGlubGluZSBpbnQgZG1hX2dldF9jYWNoZV9hbGlnbm1lbnQodm9pZCkKK3sKKwkvKgorCSAqIEVhY2ggcHJvY2Vzc29yIGZhbWlseSB3aWxsIGRlZmluZSBpdHMgb3duIEwxX0NBQ0hFX1NISUZULAorCSAqIEwxX0NBQ0hFX0JZVEVTIHdyYXBzIHRvIHRoaXMsIHNvIHRoaXMgaXMgYWx3YXlzIHNhZmUuCisJICovCisJcmV0dXJuIEwxX0NBQ0hFX0JZVEVTOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2RtYV9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAorCQkgICAgICAJICAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLAorCQkgICAgICAJICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCS8qIGp1c3Qgc3luYyBldmVyeXRoaW5nIGZvciBub3cgKi8KKwlkbWFfc3luY19zaW5nbGVfZm9yX2NwdShkZXYsIGRtYV9oYW5kbGUsIG9mZnNldCArIHNpemUsIGRpcmVjdGlvbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZG1hX3N5bmNfc2luZ2xlX3JhbmdlX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCisJCSAgICAJCSB1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsCisJCQkJIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwkvKiBqdXN0IHN5bmMgZXZlcnl0aGluZyBmb3Igbm93ICovCisJZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoZGV2LCBkbWFfaGFuZGxlLCBvZmZzZXQgKyBzaXplLCBkaXJlY3Rpb24pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZG1hX2NhY2hlX3N5bmModm9pZCAqdmFkZHIsIHNpemVfdCBzaXplLAorCQkJCSAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCV9fZG1hX3N5bmModmFkZHIsIHNpemUsIChpbnQpZGlyZWN0aW9uKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZG1hX21hcHBpbmdfZXJyb3IoZG1hX2FkZHJfdCBkbWFfYWRkcikKK3sKKwlyZXR1cm4gMDsKK30KKworI2VuZGlmCQkJCS8qIF9fQVNNX1BQQ19ETUFfTUFQUElOR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvZG1hLmggYi9pbmNsdWRlL2FzbS1wcGMvZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M4ZTVjZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9kbWEuaApAQCAtMCwwICsxLDM3MSBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLXBwYy9kbWEuaDogRGVmaW5lcyBmb3IgdXNpbmcgYW5kIGFsbG9jYXRpbmcgZG1hIGNoYW5uZWxzLgorICogV3JpdHRlbiBieSBIZW5udXMgQmVyZ21hbiwgMTk5Mi4KKyAqIEhpZ2ggRE1BIGNoYW5uZWwgc3VwcG9ydCAmIGluZm8gYnkgSGFubnUgU2F2b2xhaW5lbgorICogYW5kIEpvaG4gQm95ZCwgTm92LiAxOTkyLgorICogQ2hhbmdlcyBmb3IgcHBjIHNvdW5kIGJ5IENocmlzdG9waCBOYWRpZworICovCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKworLyoKKyAqIE5vdGU6IEFkYXB0ZWQgZm9yIFBvd2VyUEMgYnkgR2FyeSBUaG9tYXMKKyAqIE1vZGlmaWVkIGJ5IENvcnQgRG91Z2FuIDxjb3J0QGNzLm5tdC5lZHU+CisgKgorICogTm9uZSBvZiB0aGlzIHJlYWxseSBhcHBsaWVzIGZvciBQb3dlciBNYWNpbnRvc2hlcy4gIFRoZXJlIGlzCisgKiBiYXNpY2FsbHkganVzdCBlbm91Z2ggaGVyZSB0byBnZXQga2VybmVsL2RtYS5jIHRvIGNvbXBpbGUuCisgKgorICogVGhlcmUgbWF5IGJlIHNvbWUgY29tbWVudHMgb3IgcmVzdHJpY3Rpb25zIG1hZGUgaGVyZSB3aGljaCBhcmUKKyAqIG5vdCB2YWxpZCBmb3IgdGhlIFBSZVAgcGxhdGZvcm0uICBUYWtlIHdoYXQgeW91IHJlYWQKKyAqIHdpdGggYSBncmFpbiBvZiBzYWx0LgorICovCisKKyNpZm5kZWYgX0FTTV9ETUFfSAorI2RlZmluZSBfQVNNX0RNQV9ICisKKyNpZm5kZWYgTUFYX0RNQV9DSEFOTkVMUworI2RlZmluZSBNQVhfRE1BX0NIQU5ORUxTCTgKKyNlbmRpZgorCisvKiBUaGUgbWF4aW11bSBhZGRyZXNzIHRoYXQgd2UgY2FuIHBlcmZvcm0gYSBETUEgdHJhbnNmZXIgdG8gb24gdGhpcyBwbGF0Zm9ybSAqLworLyogRG9lc24ndCByZWFsbHkgYXBwbHkuLi4gKi8KKyNkZWZpbmUgTUFYX0RNQV9BRERSRVNTCQkweEZGRkZGRkZGCisKKy8qIGluIGFyY2gvcHBjL2tlcm5lbC9zZXR1cC5jIC0tIENvcnQgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIERNQV9NT0RFX1dSSVRFLCBETUFfTU9ERV9SRUFEOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgSVNBX0RNQV9USFJFU0hPTEQ7CisKKyNpZmRlZiBIQVZFX1JFQUxMWV9TTE9XX0RNQV9DT05UUk9MTEVSCisjZGVmaW5lIGRtYV9vdXRiCW91dGJfcAorI2Vsc2UKKyNkZWZpbmUgZG1hX291dGIJb3V0YgorI2VuZGlmCisKKyNkZWZpbmUgZG1hX2luYgkJaW5iCisKKy8qCisgKiBOT1RFUyBhYm91dCBETUEgdHJhbnNmZXJzOgorICoKKyAqICBjb250cm9sbGVyIDE6IGNoYW5uZWxzIDAtMywgYnl0ZSBvcGVyYXRpb25zLCBwb3J0cyAwMC0xRgorICogIGNvbnRyb2xsZXIgMjogY2hhbm5lbHMgNC03LCB3b3JkIG9wZXJhdGlvbnMsIHBvcnRzIEMwLURGCisgKgorICogIC0gQUxMIHJlZ2lzdGVycyBhcmUgOCBiaXRzIG9ubHksIHJlZ2FyZGxlc3Mgb2YgdHJhbnNmZXIgc2l6ZQorICogIC0gY2hhbm5lbCA0IGlzIG5vdCB1c2VkIC0gY2FzY2FkZXMgMSBpbnRvIDIuCisgKiAgLSBjaGFubmVscyAwLTMgYXJlIGJ5dGUgLSBhZGRyZXNzZXMvY291bnRzIGFyZSBmb3IgcGh5c2ljYWwgYnl0ZXMKKyAqICAtIGNoYW5uZWxzIDUtNyBhcmUgd29yZCAtIGFkZHJlc3Nlcy9jb3VudHMgYXJlIGZvciBwaHlzaWNhbCB3b3JkcworICogIC0gdHJhbnNmZXJzIG11c3Qgbm90IGNyb3NzIHBoeXNpY2FsIDY0SyAoMC0zKSBvciAxMjhLICg1LTcpIGJvdW5kYXJpZXMKKyAqICAtIHRyYW5zZmVyIGNvdW50IGxvYWRlZCB0byByZWdpc3RlcnMgaXMgMSBsZXNzIHRoYW4gYWN0dWFsIGNvdW50CisgKiAgLSBjb250cm9sbGVyIDIgb2Zmc2V0cyBhcmUgYWxsIGV2ZW4gKDJ4IG9mZnNldHMgZm9yIGNvbnRyb2xsZXIgMSkKKyAqICAtIHBhZ2UgcmVnaXN0ZXJzIGZvciA1LTcgZG9uJ3QgdXNlIGRhdGEgYml0IDAsIHJlcHJlc2VudCAxMjhLIHBhZ2VzCisgKiAgLSBwYWdlIHJlZ2lzdGVycyBmb3IgMC0zIHVzZSBiaXQgMCwgcmVwcmVzZW50IDY0SyBwYWdlcworICoKKyAqIE9uIFBSZVAsIERNQSB0cmFuc2ZlcnMgYXJlIGxpbWl0ZWQgdG8gdGhlIGxvd2VyIDE2TUIgb2YgX3BoeXNpY2FsXyBtZW1vcnkuCisgKiBPbiBDSFJQLCB0aGUgVzgzQzU1M0YgKGFuZCBWTFNJIFRvbGxnYXRlPykgc3VwcG9ydCBmdWxsIDMyIGJpdCBhZGRyZXNzaW5nLgorICogTm90ZSB0aGF0IGFkZHJlc3NlcyBsb2FkZWQgaW50byByZWdpc3RlcnMgbXVzdCBiZSBfcGh5c2ljYWxfIGFkZHJlc3NlcywKKyAqIG5vdCBsb2dpY2FsIGFkZHJlc3NlcyAod2hpY2ggbWF5IGRpZmZlciBpZiBwYWdpbmcgaXMgYWN0aXZlKS4KKyAqCisgKiAgQWRkcmVzcyBtYXBwaW5nIGZvciBjaGFubmVscyAwLTM6CisgKgorICogICBBMjMgLi4uIEExNiBBMTUgLi4uIEE4ICBBNyAuLi4gQTAgICAgKFBoeXNpY2FsIGFkZHJlc3NlcykKKyAqICAgIHwgIC4uLiAgfCAgIHwgIC4uLiB8ICAgfCAgLi4uIHwKKyAqICAgIHwgIC4uLiAgfCAgIHwgIC4uLiB8ICAgfCAgLi4uIHwKKyAqICAgIHwgIC4uLiAgfCAgIHwgIC4uLiB8ICAgfCAgLi4uIHwKKyAqICAgUDcgIC4uLiAgUDAgIEE3IC4uLiBBMCAgQTcgLi4uIEEwCisgKiB8ICAgIFBhZ2UgICAgfCBBZGRyIE1TQiB8IEFkZHIgTFNCIHwgICAoRE1BIHJlZ2lzdGVycykKKyAqCisgKiAgQWRkcmVzcyBtYXBwaW5nIGZvciBjaGFubmVscyA1LTc6CisgKgorICogICBBMjMgLi4uIEExNyBBMTYgQTE1IC4uLiBBOSBBOCBBNyAuLi4gQTEgQTAgICAgKFBoeXNpY2FsIGFkZHJlc3NlcykKKyAqICAgIHwgIC4uLiAgfCAgIFwgICBcICAgLi4uIFwgIFwgIFwgIC4uLiBcICBcCisgKiAgICB8ICAuLi4gIHwgICAgXCAgIFwgICAuLi4gXCAgXCAgXCAgLi4uIFwgIChub3QgdXNlZCkKKyAqICAgIHwgIC4uLiAgfCAgICAgXCAgIFwgICAuLi4gXCAgXCAgXCAgLi4uIFwKKyAqICAgUDcgIC4uLiAgUDEgKDApIEE3IEE2ICAuLi4gQTAgQTcgQTYgLi4uIEEwCisgKiB8ICAgICAgUGFnZSAgICAgIHwgIEFkZHIgTVNCICAgfCAgQWRkciBMU0IgIHwgICAoRE1BIHJlZ2lzdGVycykKKyAqCisgKiBBZ2FpbiwgY2hhbm5lbHMgNS03IHRyYW5zZmVyIF9waHlzaWNhbF8gd29yZHMgKDE2IGJpdHMpLCBzbyBhZGRyZXNzZXMKKyAqIGFuZCBjb3VudHMgX211c3RfIGJlIHdvcmQtYWxpZ25lZCAodGhlIGxvd2VzdCBhZGRyZXNzIGJpdCBpcyBfaWdub3JlZF8gYXQKKyAqIHRoZSBoYXJkd2FyZSBsZXZlbCwgc28gb2RkLWJ5dGUgdHJhbnNmZXJzIGFyZW4ndCBwb3NzaWJsZSkuCisgKgorICogVHJhbnNmZXIgY291bnQgKF9ub3QgIyBieXRlc18pIGlzIGxpbWl0ZWQgdG8gNjRLLCByZXByZXNlbnRlZCBhcyBhY3R1YWwKKyAqIGNvdW50IC0gMSA6IDY0SyA9PiAweEZGRkYsIDEgPT4gMHgwMDAwLiAgVGh1cywgY291bnQgaXMgYWx3YXlzIDEgb3IgbW9yZSwKKyAqIGFuZCB1cCB0byAxMjhLIGJ5dGVzIG1heSBiZSB0cmFuc2ZlcnJlZCBvbiBjaGFubmVscyA1LTcgaW4gb25lIG9wZXJhdGlvbi4KKyAqCisgKi8KKworLyogc2VlIHByZXBfc2V0dXBfYXJjaCgpIGZvciBkZXRhaWxlZCBpbmZvcm1hdGlvbnMgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19TT1VORF9DUzQyMzIpICYmIGRlZmluZWQoQ09ORklHX1BQQ19QUkVQKQorZXh0ZXJuIGxvbmcgcHBjX2NzNDIzMl9kbWEsIHBwY19jczQyMzJfZG1hMjsKKyNkZWZpbmUgU05EX0RNQTEgcHBjX2NzNDIzMl9kbWEKKyNkZWZpbmUgU05EX0RNQTIgcHBjX2NzNDIzMl9kbWEyCisjZWxzZQorI2RlZmluZSBTTkRfRE1BMSAtMQorI2RlZmluZSBTTkRfRE1BMiAtMQorI2VuZGlmCisKKy8qIDgyMzcgRE1BIGNvbnRyb2xsZXJzICovCisjZGVmaW5lIElPX0RNQTFfQkFTRQkweDAwCS8qIDggYml0IHNsYXZlIERNQSwgY2hhbm5lbHMgMC4uMyAqLworI2RlZmluZSBJT19ETUEyX0JBU0UJMHhDMAkvKiAxNiBiaXQgbWFzdGVyIERNQSwgY2ggNCg9c2xhdmUgaW5wdXQpLi43ICovCisKKy8qIERNQSBjb250cm9sbGVyIHJlZ2lzdGVycyAqLworI2RlZmluZSBETUExX0NNRF9SRUcJCTB4MDgJLyogY29tbWFuZCByZWdpc3RlciAodykgKi8KKyNkZWZpbmUgRE1BMV9TVEFUX1JFRwkJMHgwOAkvKiBzdGF0dXMgcmVnaXN0ZXIgKHIpICovCisjZGVmaW5lIERNQTFfUkVRX1JFRwkJMHgwOQkvKiByZXF1ZXN0IHJlZ2lzdGVyICh3KSAqLworI2RlZmluZSBETUExX01BU0tfUkVHCQkweDBBCS8qIHNpbmdsZS1jaGFubmVsIG1hc2sgKHcpICovCisjZGVmaW5lIERNQTFfTU9ERV9SRUcJCTB4MEIJLyogbW9kZSByZWdpc3RlciAodykgKi8KKyNkZWZpbmUgRE1BMV9DTEVBUl9GRl9SRUcJMHgwQwkvKiBjbGVhciBwb2ludGVyIGZsaXAtZmxvcCAodykgKi8KKyNkZWZpbmUgRE1BMV9URU1QX1JFRwkJMHgwRAkvKiBUZW1wb3JhcnkgUmVnaXN0ZXIgKHIpICovCisjZGVmaW5lIERNQTFfUkVTRVRfUkVHCQkweDBECS8qIE1hc3RlciBDbGVhciAodykgKi8KKyNkZWZpbmUgRE1BMV9DTFJfTUFTS19SRUcJMHgwRQkvKiBDbGVhciBNYXNrICovCisjZGVmaW5lIERNQTFfTUFTS19BTExfUkVHCTB4MEYJLyogYWxsLWNoYW5uZWxzIG1hc2sgKHcpICovCisKKyNkZWZpbmUgRE1BMl9DTURfUkVHCQkweEQwCS8qIGNvbW1hbmQgcmVnaXN0ZXIgKHcpICovCisjZGVmaW5lIERNQTJfU1RBVF9SRUcJCTB4RDAJLyogc3RhdHVzIHJlZ2lzdGVyIChyKSAqLworI2RlZmluZSBETUEyX1JFUV9SRUcJCTB4RDIJLyogcmVxdWVzdCByZWdpc3RlciAodykgKi8KKyNkZWZpbmUgRE1BMl9NQVNLX1JFRwkJMHhENAkvKiBzaW5nbGUtY2hhbm5lbCBtYXNrICh3KSAqLworI2RlZmluZSBETUEyX01PREVfUkVHCQkweEQ2CS8qIG1vZGUgcmVnaXN0ZXIgKHcpICovCisjZGVmaW5lIERNQTJfQ0xFQVJfRkZfUkVHCTB4RDgJLyogY2xlYXIgcG9pbnRlciBmbGlwLWZsb3AgKHcpICovCisjZGVmaW5lIERNQTJfVEVNUF9SRUcJCTB4REEJLyogVGVtcG9yYXJ5IFJlZ2lzdGVyIChyKSAqLworI2RlZmluZSBETUEyX1JFU0VUX1JFRwkJMHhEQQkvKiBNYXN0ZXIgQ2xlYXIgKHcpICovCisjZGVmaW5lIERNQTJfQ0xSX01BU0tfUkVHCTB4REMJLyogQ2xlYXIgTWFzayAqLworI2RlZmluZSBETUEyX01BU0tfQUxMX1JFRwkweERFCS8qIGFsbC1jaGFubmVscyBtYXNrICh3KSAqLworCisjZGVmaW5lIERNQV9BRERSXzAJCTB4MDAJLyogRE1BIGFkZHJlc3MgcmVnaXN0ZXJzICovCisjZGVmaW5lIERNQV9BRERSXzEJCTB4MDIKKyNkZWZpbmUgRE1BX0FERFJfMgkJMHgwNAorI2RlZmluZSBETUFfQUREUl8zCQkweDA2CisjZGVmaW5lIERNQV9BRERSXzQJCTB4QzAKKyNkZWZpbmUgRE1BX0FERFJfNQkJMHhDNAorI2RlZmluZSBETUFfQUREUl82CQkweEM4CisjZGVmaW5lIERNQV9BRERSXzcJCTB4Q0MKKworI2RlZmluZSBETUFfQ05UXzAJCTB4MDEJLyogRE1BIGNvdW50IHJlZ2lzdGVycyAqLworI2RlZmluZSBETUFfQ05UXzEJCTB4MDMKKyNkZWZpbmUgRE1BX0NOVF8yCQkweDA1CisjZGVmaW5lIERNQV9DTlRfMwkJMHgwNworI2RlZmluZSBETUFfQ05UXzQJCTB4QzIKKyNkZWZpbmUgRE1BX0NOVF81CQkweEM2CisjZGVmaW5lIERNQV9DTlRfNgkJMHhDQQorI2RlZmluZSBETUFfQ05UXzcJCTB4Q0UKKworI2RlZmluZSBETUFfTE9fUEFHRV8wCQkweDg3CS8qIERNQSBwYWdlIHJlZ2lzdGVycyAqLworI2RlZmluZSBETUFfTE9fUEFHRV8xCQkweDgzCisjZGVmaW5lIERNQV9MT19QQUdFXzIJCTB4ODEKKyNkZWZpbmUgRE1BX0xPX1BBR0VfMwkJMHg4MgorI2RlZmluZSBETUFfTE9fUEFHRV81CQkweDhCCisjZGVmaW5lIERNQV9MT19QQUdFXzYJCTB4ODkKKyNkZWZpbmUgRE1BX0xPX1BBR0VfNwkJMHg4QQorCisjZGVmaW5lIERNQV9ISV9QQUdFXzAJCTB4NDg3CS8qIERNQSBwYWdlIHJlZ2lzdGVycyAqLworI2RlZmluZSBETUFfSElfUEFHRV8xCQkweDQ4MworI2RlZmluZSBETUFfSElfUEFHRV8yCQkweDQ4MQorI2RlZmluZSBETUFfSElfUEFHRV8zCQkweDQ4MgorI2RlZmluZSBETUFfSElfUEFHRV81CQkweDQ4QgorI2RlZmluZSBETUFfSElfUEFHRV82CQkweDQ4OQorI2RlZmluZSBETUFfSElfUEFHRV83CQkweDQ4QQorCisjZGVmaW5lIERNQTFfRVhUX1JFRwkJMHg0MEIKKyNkZWZpbmUgRE1BMl9FWFRfUkVHCQkweDRENgorCisjZGVmaW5lIERNQV9NT0RFX0NBU0NBREUJMHhDMAkvKiBwYXNzIHRocnUgRFJFUS0+SFJRLCBEQUNLPC1ITERBIG9ubHkgKi8KKyNkZWZpbmUgRE1BX0FVVE9JTklUCQkweDEwCisKK2V4dGVybiBzcGlubG9ja190IGRtYV9zcGluX2xvY2s7CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgY2xhaW1fZG1hX2xvY2sodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXNwaW5fbG9ja19pcnFzYXZlKCZkbWFfc3Bpbl9sb2NrLCBmbGFncyk7CisJcmV0dXJuIGZsYWdzOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHJlbGVhc2VfZG1hX2xvY2sodW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkbWFfc3Bpbl9sb2NrLCBmbGFncyk7Cit9CisKKy8qIGVuYWJsZS9kaXNhYmxlIGEgc3BlY2lmaWMgRE1BIGNoYW5uZWwgKi8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgZW5hYmxlX2RtYSh1bnNpZ25lZCBpbnQgZG1hbnIpCit7CisJdW5zaWduZWQgY2hhciB1Y0RtYUNtZCA9IDB4MDA7CisKKwlpZiAoZG1hbnIgIT0gNCkgeworCQlkbWFfb3V0YigwLCBETUEyX01BU0tfUkVHKTsJLyogVGhpcyBtYXkgbm90IGJlIGVuYWJsZWQgKi8KKwkJZG1hX291dGIodWNEbWFDbWQsIERNQTJfQ01EX1JFRyk7CS8qIEVuYWJsZSBncm91cCAqLworCX0KKwlpZiAoZG1hbnIgPD0gMykgeworCQlkbWFfb3V0YihkbWFuciwgRE1BMV9NQVNLX1JFRyk7CisJCWRtYV9vdXRiKHVjRG1hQ21kLCBETUExX0NNRF9SRUcpOwkvKiBFbmFibGUgZ3JvdXAgKi8KKwl9IGVsc2UKKwkJZG1hX291dGIoZG1hbnIgJiAzLCBETUEyX01BU0tfUkVHKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBkaXNhYmxlX2RtYSh1bnNpZ25lZCBpbnQgZG1hbnIpCit7CisJaWYgKGRtYW5yIDw9IDMpCisJCWRtYV9vdXRiKGRtYW5yIHwgNCwgRE1BMV9NQVNLX1JFRyk7CisJZWxzZQorCQlkbWFfb3V0YigoZG1hbnIgJiAzKSB8IDQsIERNQTJfTUFTS19SRUcpOworfQorCisvKiBDbGVhciB0aGUgJ0RNQSBQb2ludGVyIEZsaXAgRmxvcCcuCisgKiBXcml0ZSAwIGZvciBMU0IvTVNCLCAxIGZvciBNU0IvTFNCIGFjY2Vzcy4KKyAqIFVzZSB0aGlzIG9uY2UgdG8gaW5pdGlhbGl6ZSB0aGUgRkYgdG8gYSBrbm93biBzdGF0ZS4KKyAqIEFmdGVyIHRoYXQsIGtlZXAgdHJhY2sgb2YgaXQuIDotKQorICogLS0tIEluIG9yZGVyIHRvIGRvIHRoYXQsIHRoZSBETUEgcm91dGluZXMgYmVsb3cgc2hvdWxkIC0tLQorICogLS0tIG9ubHkgYmUgdXNlZCB3aGlsZSBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCEgLS0tCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgY2xlYXJfZG1hX2ZmKHVuc2lnbmVkIGludCBkbWFucikKK3sKKwlpZiAoZG1hbnIgPD0gMykKKwkJZG1hX291dGIoMCwgRE1BMV9DTEVBUl9GRl9SRUcpOworCWVsc2UKKwkJZG1hX291dGIoMCwgRE1BMl9DTEVBUl9GRl9SRUcpOworfQorCisvKiBzZXQgbW9kZSAoYWJvdmUpIGZvciBhIHNwZWNpZmljIERNQSBjaGFubmVsICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHNldF9kbWFfbW9kZSh1bnNpZ25lZCBpbnQgZG1hbnIsIGNoYXIgbW9kZSkKK3sKKwlpZiAoZG1hbnIgPD0gMykKKwkJZG1hX291dGIobW9kZSB8IGRtYW5yLCBETUExX01PREVfUkVHKTsKKwllbHNlCisJCWRtYV9vdXRiKG1vZGUgfCAoZG1hbnIgJiAzKSwgRE1BMl9NT0RFX1JFRyk7Cit9CisKKy8qIFNldCBvbmx5IHRoZSBwYWdlIHJlZ2lzdGVyIGJpdHMgb2YgdGhlIHRyYW5zZmVyIGFkZHJlc3MuCisgKiBUaGlzIGlzIHVzZWQgZm9yIHN1Y2Nlc3NpdmUgdHJhbnNmZXJzIHdoZW4gd2Uga25vdyB0aGUgY29udGVudHMgb2YKKyAqIHRoZSBsb3dlciAxNiBiaXRzIG9mIHRoZSBETUEgY3VycmVudCBhZGRyZXNzIHJlZ2lzdGVyLCBidXQgYSA2NGsgYm91bmRhcnkKKyAqIG1heSBoYXZlIGJlZW4gY3Jvc3NlZC4KKyAqLworc3RhdGljIF9faW5saW5lX18gdm9pZCBzZXRfZG1hX3BhZ2UodW5zaWduZWQgaW50IGRtYW5yLCBpbnQgcGFnZW5yKQoreworCXN3aXRjaCAoZG1hbnIpIHsKKwljYXNlIDA6CisJCWRtYV9vdXRiKHBhZ2VuciwgRE1BX0xPX1BBR0VfMCk7CisJCWRtYV9vdXRiKHBhZ2VuciA+PiA4LCBETUFfSElfUEFHRV8wKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlkbWFfb3V0YihwYWdlbnIsIERNQV9MT19QQUdFXzEpOworCQlkbWFfb3V0YihwYWdlbnIgPj4gOCwgRE1BX0hJX1BBR0VfMSk7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJZG1hX291dGIocGFnZW5yLCBETUFfTE9fUEFHRV8yKTsKKwkJZG1hX291dGIocGFnZW5yID4+IDgsIERNQV9ISV9QQUdFXzIpOworCQlicmVhazsKKwljYXNlIDM6CisJCWRtYV9vdXRiKHBhZ2VuciwgRE1BX0xPX1BBR0VfMyk7CisJCWRtYV9vdXRiKHBhZ2VuciA+PiA4LCBETUFfSElfUEFHRV8zKTsKKwkJYnJlYWs7CisJY2FzZSA1OgorCQlpZiAoU05EX0RNQTEgPT0gNSB8fCBTTkRfRE1BMiA9PSA1KQorCQkJZG1hX291dGIocGFnZW5yLCBETUFfTE9fUEFHRV81KTsKKwkJZWxzZQorCQkJZG1hX291dGIocGFnZW5yICYgMHhmZSwgRE1BX0xPX1BBR0VfNSk7CisJCWRtYV9vdXRiKHBhZ2VuciA+PiA4LCBETUFfSElfUEFHRV81KTsKKwkJYnJlYWs7CisJY2FzZSA2OgorCQlpZiAoU05EX0RNQTEgPT0gNiB8fCBTTkRfRE1BMiA9PSA2KQorCQkJZG1hX291dGIocGFnZW5yLCBETUFfTE9fUEFHRV82KTsKKwkJZWxzZQorCQkJZG1hX291dGIocGFnZW5yICYgMHhmZSwgRE1BX0xPX1BBR0VfNik7CisJCWRtYV9vdXRiKHBhZ2VuciA+PiA4LCBETUFfSElfUEFHRV82KTsKKwkJYnJlYWs7CisJY2FzZSA3OgorCQlpZiAoU05EX0RNQTEgPT0gNyB8fCBTTkRfRE1BMiA9PSA3KQorCQkJZG1hX291dGIocGFnZW5yLCBETUFfTE9fUEFHRV83KTsKKwkJZWxzZQorCQkJZG1hX291dGIocGFnZW5yICYgMHhmZSwgRE1BX0xPX1BBR0VfNyk7CisJCWRtYV9vdXRiKHBhZ2VuciA+PiA4LCBETUFfSElfUEFHRV83KTsKKwkJYnJlYWs7CisJfQorfQorCisvKiBTZXQgdHJhbnNmZXIgYWRkcmVzcyAmIHBhZ2UgYml0cyBmb3Igc3BlY2lmaWMgRE1BIGNoYW5uZWwuCisgKiBBc3N1bWVzIGRtYSBmbGlwZmxvcCBpcyBjbGVhci4KKyAqLworc3RhdGljIF9faW5saW5lX18gdm9pZCBzZXRfZG1hX2FkZHIodW5zaWduZWQgaW50IGRtYW5yLCB1bnNpZ25lZCBpbnQgcGh5cykKK3sKKwlpZiAoZG1hbnIgPD0gMykgeworCQlkbWFfb3V0YihwaHlzICYgMHhmZiwgKChkbWFuciAmIDMpIDw8IDEpICsgSU9fRE1BMV9CQVNFKTsKKwkJZG1hX291dGIoKHBoeXMgPj4gOCkgJiAweGZmLCAoKGRtYW5yICYgMykgPDwgMSkgKyBJT19ETUExX0JBU0UpOworCX0gZWxzZSBpZiAoZG1hbnIgPT0gU05EX0RNQTEgfHwgZG1hbnIgPT0gU05EX0RNQTIpIHsKKwkJZG1hX291dGIocGh5cyAmIDB4ZmYsICgoZG1hbnIgJiAzKSA8PCAyKSArIElPX0RNQTJfQkFTRSk7CisJCWRtYV9vdXRiKChwaHlzID4+IDgpICYgMHhmZiwgKChkbWFuciAmIDMpIDw8IDIpICsgSU9fRE1BMl9CQVNFKTsKKwkJZG1hX291dGIoKGRtYW5yICYgMyksIERNQTJfRVhUX1JFRyk7CisJfSBlbHNlIHsKKwkJZG1hX291dGIoKHBoeXMgPj4gMSkgJiAweGZmLCAoKGRtYW5yICYgMykgPDwgMikgKyBJT19ETUEyX0JBU0UpOworCQlkbWFfb3V0YigocGh5cyA+PiA5KSAmIDB4ZmYsICgoZG1hbnIgJiAzKSA8PCAyKSArIElPX0RNQTJfQkFTRSk7CisJfQorCXNldF9kbWFfcGFnZShkbWFuciwgcGh5cyA+PiAxNik7Cit9CisKKy8qIFNldCB0cmFuc2ZlciBzaXplIChtYXggNjRrIGZvciBETUExLi4zLCAxMjhrIGZvciBETUE1Li43KSBmb3IKKyAqIGEgc3BlY2lmaWMgRE1BIGNoYW5uZWwuCisgKiBZb3UgbXVzdCBlbnN1cmUgdGhlIHBhcmFtZXRlcnMgYXJlIHZhbGlkLgorICogTk9URTogZnJvbSBhIG1hbnVhbDogInRoZSBudW1iZXIgb2YgdHJhbnNmZXJzIGlzIG9uZSBtb3JlCisgKiB0aGFuIHRoZSBpbml0aWFsIHdvcmQgY291bnQiISBUaGlzIGlzIHRha2VuIGludG8gYWNjb3VudC4KKyAqIEFzc3VtZXMgZG1hIGZsaXAtZmxvcCBpcyBjbGVhci4KKyAqIE5PVEUgMjogImNvdW50IiByZXByZXNlbnRzIF9ieXRlc18gYW5kIG11c3QgYmUgZXZlbiBmb3IgY2hhbm5lbHMgNS03LgorICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHNldF9kbWFfY291bnQodW5zaWduZWQgaW50IGRtYW5yLCB1bnNpZ25lZCBpbnQgY291bnQpCit7CisJY291bnQtLTsKKwlpZiAoZG1hbnIgPD0gMykgeworCQlkbWFfb3V0Yihjb3VudCAmIDB4ZmYsICgoZG1hbnIgJiAzKSA8PCAxKSArIDEgKyBJT19ETUExX0JBU0UpOworCQlkbWFfb3V0YigoY291bnQgPj4gOCkgJiAweGZmLCAoKGRtYW5yICYgMykgPDwgMSkgKyAxICsKKwkJCSBJT19ETUExX0JBU0UpOworCX0gZWxzZSBpZiAoZG1hbnIgPT0gU05EX0RNQTEgfHwgZG1hbnIgPT0gU05EX0RNQTIpIHsKKwkJZG1hX291dGIoY291bnQgJiAweGZmLCAoKGRtYW5yICYgMykgPDwgMikgKyAyICsgSU9fRE1BMl9CQVNFKTsKKwkJZG1hX291dGIoKGNvdW50ID4+IDgpICYgMHhmZiwgKChkbWFuciAmIDMpIDw8IDIpICsgMiArCisJCQkgSU9fRE1BMl9CQVNFKTsKKwl9IGVsc2UgeworCQlkbWFfb3V0YigoY291bnQgPj4gMSkgJiAweGZmLCAoKGRtYW5yICYgMykgPDwgMikgKyAyICsKKwkJCSBJT19ETUEyX0JBU0UpOworCQlkbWFfb3V0YigoY291bnQgPj4gOSkgJiAweGZmLCAoKGRtYW5yICYgMykgPDwgMikgKyAyICsKKwkJCSBJT19ETUEyX0JBU0UpOworCX0KK30KKworLyogR2V0IERNQSByZXNpZHVlIGNvdW50LiBBZnRlciBhIERNQSB0cmFuc2ZlciwgdGhpcworICogc2hvdWxkIHJldHVybiB6ZXJvLiBSZWFkaW5nIHRoaXMgd2hpbGUgYSBETUEgdHJhbnNmZXIgaXMKKyAqIHN0aWxsIGluIHByb2dyZXNzIHdpbGwgcmV0dXJuIHVucHJlZGljdGFibGUgcmVzdWx0cy4KKyAqIElmIGNhbGxlZCBiZWZvcmUgdGhlIGNoYW5uZWwgaGFzIGJlZW4gdXNlZCwgaXQgbWF5IHJldHVybiAxLgorICogT3RoZXJ3aXNlLCBpdCByZXR1cm5zIHRoZSBudW1iZXIgb2YgX2J5dGVzXyBsZWZ0IHRvIHRyYW5zZmVyLgorICoKKyAqIEFzc3VtZXMgRE1BIGZsaXAtZmxvcCBpcyBjbGVhci4KKyAqLworc3RhdGljIF9faW5saW5lX18gaW50IGdldF9kbWFfcmVzaWR1ZSh1bnNpZ25lZCBpbnQgZG1hbnIpCit7CisJdW5zaWduZWQgaW50IGlvX3BvcnQgPSAoZG1hbnIgPD0gMykgPworCSAgICAoKGRtYW5yICYgMykgPDwgMSkgKyAxICsgSU9fRE1BMV9CQVNFCisJICAgIDogKChkbWFuciAmIDMpIDw8IDIpICsgMiArIElPX0RNQTJfQkFTRTsKKworCS8qIHVzaW5nIHNob3J0IHRvIGdldCAxNi1iaXQgd3JhcCBhcm91bmQgKi8KKwl1bnNpZ25lZCBzaG9ydCBjb3VudDsKKworCWNvdW50ID0gMSArIGRtYV9pbmIoaW9fcG9ydCk7CisJY291bnQgKz0gZG1hX2luYihpb19wb3J0KSA8PCA4OworCisJcmV0dXJuIChkbWFuciA8PSAzIHx8IGRtYW5yID09IFNORF9ETUExIHx8IGRtYW5yID09IFNORF9ETUEyKQorCSAgICA/IGNvdW50IDogKGNvdW50IDw8IDEpOworCit9CisKKy8qIFRoZXNlIGFyZSBpbiBrZXJuZWwvZG1hLmM6ICovCisKKy8qIHJlc2VydmUgYSBETUEgY2hhbm5lbCAqLworZXh0ZXJuIGludCByZXF1ZXN0X2RtYSh1bnNpZ25lZCBpbnQgZG1hbnIsIGNvbnN0IGNoYXIgKmRldmljZV9pZCk7CisvKiByZWxlYXNlIGl0IGFnYWluICovCitleHRlcm4gdm9pZCBmcmVlX2RtYSh1bnNpZ25lZCBpbnQgZG1hbnIpOworCisjaWZkZWYgQ09ORklHX1BDSQorZXh0ZXJuIGludCBpc2FfZG1hX2JyaWRnZV9idWdneTsKKyNlbHNlCisjZGVmaW5lIGlzYV9kbWFfYnJpZGdlX2J1Z2d5CSgwKQorI2VuZGlmCisjZW5kaWYJCQkJLyogX0FTTV9ETUFfSCAqLworI2VuZGlmCQkJCS8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9lbGYuaCBiL2luY2x1ZGUvYXNtLXBwYy9lbGYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzA1Njk2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjL2VsZi5oCkBAIC0wLDAgKzEsMTYwIEBACisjaWZuZGVmIF9fUFBDX0VMRl9ICisjZGVmaW5lIF9fUFBDX0VMRl9ICisKKy8qCisgKiBFTEYgcmVnaXN0ZXIgZGVmaW5pdGlvbnMuLgorICovCisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgorCisvKiBQb3dlclBDIHJlbG9jYXRpb25zIGRlZmluZWQgYnkgdGhlIEFCSXMgKi8KKyNkZWZpbmUgUl9QUENfTk9ORQkJMAorI2RlZmluZSBSX1BQQ19BRERSMzIJCTEJLyogMzJiaXQgYWJzb2x1dGUgYWRkcmVzcyAqLworI2RlZmluZSBSX1BQQ19BRERSMjQJCTIJLyogMjZiaXQgYWRkcmVzcywgMiBiaXRzIGlnbm9yZWQuICAqLworI2RlZmluZSBSX1BQQ19BRERSMTYJCTMJLyogMTZiaXQgYWJzb2x1dGUgYWRkcmVzcyAqLworI2RlZmluZSBSX1BQQ19BRERSMTZfTE8JCTQJLyogbG93ZXIgMTZiaXQgb2YgYWJzb2x1dGUgYWRkcmVzcyAqLworI2RlZmluZSBSX1BQQ19BRERSMTZfSEkJCTUJLyogaGlnaCAxNmJpdCBvZiBhYnNvbHV0ZSBhZGRyZXNzICovCisjZGVmaW5lIFJfUFBDX0FERFIxNl9IQQkJNgkvKiBhZGp1c3RlZCBoaWdoIDE2Yml0ICovCisjZGVmaW5lIFJfUFBDX0FERFIxNAkJNwkvKiAxNmJpdCBhZGRyZXNzLCAyIGJpdHMgaWdub3JlZCAqLworI2RlZmluZSBSX1BQQ19BRERSMTRfQlJUQUtFTgk4CisjZGVmaW5lIFJfUFBDX0FERFIxNF9CUk5UQUtFTgk5CisjZGVmaW5lIFJfUFBDX1JFTDI0CQkxMAkvKiBQQyByZWxhdGl2ZSAyNiBiaXQgKi8KKyNkZWZpbmUgUl9QUENfUkVMMTQJCTExCS8qIFBDIHJlbGF0aXZlIDE2IGJpdCAqLworI2RlZmluZSBSX1BQQ19SRUwxNF9CUlRBS0VOCTEyCisjZGVmaW5lIFJfUFBDX1JFTDE0X0JSTlRBS0VOCTEzCisjZGVmaW5lIFJfUFBDX0dPVDE2CQkxNAorI2RlZmluZSBSX1BQQ19HT1QxNl9MTwkJMTUKKyNkZWZpbmUgUl9QUENfR09UMTZfSEkJCTE2CisjZGVmaW5lIFJfUFBDX0dPVDE2X0hBCQkxNworI2RlZmluZSBSX1BQQ19QTFRSRUwyNAkJMTgKKyNkZWZpbmUgUl9QUENfQ09QWQkJMTkKKyNkZWZpbmUgUl9QUENfR0xPQl9EQVQJCTIwCisjZGVmaW5lIFJfUFBDX0pNUF9TTE9UCQkyMQorI2RlZmluZSBSX1BQQ19SRUxBVElWRQkJMjIKKyNkZWZpbmUgUl9QUENfTE9DQUwyNFBDCQkyMworI2RlZmluZSBSX1BQQ19VQUREUjMyCQkyNAorI2RlZmluZSBSX1BQQ19VQUREUjE2CQkyNQorI2RlZmluZSBSX1BQQ19SRUwzMgkJMjYKKyNkZWZpbmUgUl9QUENfUExUMzIJCTI3CisjZGVmaW5lIFJfUFBDX1BMVFJFTDMyCQkyOAorI2RlZmluZSBSX1BQQ19QTFQxNl9MTwkJMjkKKyNkZWZpbmUgUl9QUENfUExUMTZfSEkJCTMwCisjZGVmaW5lIFJfUFBDX1BMVDE2X0hBCQkzMQorI2RlZmluZSBSX1BQQ19TREFSRUwxNgkJMzIKKyNkZWZpbmUgUl9QUENfU0VDVE9GRgkJMzMKKyNkZWZpbmUgUl9QUENfU0VDVE9GRl9MTwkzNAorI2RlZmluZSBSX1BQQ19TRUNUT0ZGX0hJCTM1CisjZGVmaW5lIFJfUFBDX1NFQ1RPRkZfSEEJMzYKKy8qIEtlZXAgdGhpcyB0aGUgbGFzdCBlbnRyeS4gICovCisjZGVmaW5lIFJfUFBDX05VTQkJMzcKKworI2RlZmluZSBFTEZfTkdSRUcJNDgJLyogaW5jbHVkZXMgbmlwLCBtc3IsIGxyLCBldGMuICovCisjZGVmaW5lIEVMRl9ORlBSRUcJMzMJLyogaW5jbHVkZXMgZnBzY3IgKi8KKyNkZWZpbmUgRUxGX05WUlJFRwkzMwkvKiBpbmNsdWRlcyB2c2NyICovCisjZGVmaW5lIEVMRl9ORVZSUkVHCTM0CS8qIGluY2x1ZGVzIGFjYyAoYXMgMikgKi8KKworLyoKKyAqIFRoZXNlIGFyZSB1c2VkIHRvIHNldCBwYXJhbWV0ZXJzIGluIHRoZSBjb3JlIGR1bXBzLgorICovCisjZGVmaW5lIEVMRl9BUkNICUVNX1BQQworI2RlZmluZSBFTEZfQ0xBU1MJRUxGQ0xBU1MzMgorI2RlZmluZSBFTEZfREFUQQlFTEZEQVRBMk1TQgorCisvKiBHZW5lcmFsIHJlZ2lzdGVycyAqLwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGVsZl9ncmVnX3Q7Cit0eXBlZGVmIGVsZl9ncmVnX3QgZWxmX2dyZWdzZXRfdFtFTEZfTkdSRUddOworCisvKiBGbG9hdGluZyBwb2ludCByZWdpc3RlcnMgKi8KK3R5cGVkZWYgZG91YmxlIGVsZl9mcHJlZ190OwordHlwZWRlZiBlbGZfZnByZWdfdCBlbGZfZnByZWdzZXRfdFtFTEZfTkZQUkVHXTsKKworLyogQWx0aXZlYyByZWdpc3RlcnMgKi8KK3R5cGVkZWYgX192ZWN0b3IxMjggZWxmX3ZycmVnX3Q7Cit0eXBlZGVmIGVsZl92cnJlZ190IGVsZl92cnJlZ3NldF90W0VMRl9OVlJSRUddOworCisjaWZkZWYgX19LRVJORUxfXworCitzdHJ1Y3QgdGFza19zdHJ1Y3Q7CisKKy8qCisgKiBUaGlzIGlzIHVzZWQgdG8gZW5zdXJlIHdlIGRvbid0IGxvYWQgc29tZXRoaW5nIGZvciB0aGUgd3JvbmcgYXJjaGl0ZWN0dXJlLgorICovCisKKyNkZWZpbmUgZWxmX2NoZWNrX2FyY2goeCkgKCh4KS0+ZV9tYWNoaW5lID09IEVNX1BQQykKKworLyogVGhpcyBpcyB0aGUgbG9jYXRpb24gdGhhdCBhbiBFVF9EWU4gcHJvZ3JhbSBpcyBsb2FkZWQgaWYgZXhlYydlZC4gIFR5cGljYWwKKyAgIHVzZSBvZiB0aGlzIGlzIHRvIGludm9rZSAiLi9sZC5zbyBzb21lcHJvZyIgdG8gdGVzdCBvdXQgYSBuZXcgdmVyc2lvbiBvZgorICAgdGhlIGxvYWRlci4gIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgaXQgaXMgb3V0IG9mIHRoZSB3YXkgb2YgdGhlIHByb2dyYW0KKyAgIHRoYXQgaXQgd2lsbCAiZXhlYyIsIGFuZCB0aGF0IHRoZXJlIGlzIHN1ZmZpY2llbnQgcm9vbSBmb3IgdGhlIGJyay4gICovCisKKyNkZWZpbmUgRUxGX0VUX0RZTl9CQVNFICAgICAgICAgKDB4MDgwMDAwMDApCisKKyNkZWZpbmUgVVNFX0VMRl9DT1JFX0RVTVAKKyNkZWZpbmUgRUxGX0VYRUNfUEFHRVNJWkUJNDA5NgorCisjZGVmaW5lIEVMRl9DT1JFX0NPUFlfUkVHUyhncmVncywgcmVncykJCQkJXAorCW1lbWNweSgoZ3JlZ3MpLCAocmVncyksIHNpemVvZihzdHJ1Y3QgcHRfcmVncykpOwlcCisJbWVtc2V0KChjaGFyICopKGdyZWdzKSArIHNpemVvZihzdHJ1Y3QgcHRfcmVncyksIDAsCVwKKwkgICAgICAgc2l6ZW9mKGVsZl9ncmVnc2V0X3QpIC0gc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKSk7CisKKyNkZWZpbmUgRUxGX0NPUkVfQ09QWV9UQVNLX1JFR1ModCwgZWxmcmVncykJCQlcCisJKCh0KS0+dGhyZWFkLnJlZ3M/CQkJCQlcCisJICh7IEVMRl9DT1JFX0NPUFlfUkVHUygoZWxmcmVncyksICh0KS0+dGhyZWFkLnJlZ3MpOyAxOyB9KTogMCkKKworZXh0ZXJuIGludCBkdW1wX3Rhc2tfZnB1KHN0cnVjdCB0YXNrX3N0cnVjdCAqdCwgZWxmX2ZwcmVnc2V0X3QgKmZwdSk7CisjZGVmaW5lIEVMRl9DT1JFX0NPUFlfRlBSRUdTKHQsIGZwdSkJZHVtcF90YXNrX2ZwdSgodCksIChmcHUpKQorCisvKiBUaGlzIHlpZWxkcyBhIG1hc2sgdGhhdCB1c2VyIHByb2dyYW1zIGNhbiB1c2UgdG8gZmlndXJlIG91dCB3aGF0CisgICBpbnN0cnVjdGlvbiBzZXQgdGhpcyBjcHUgc3VwcG9ydHMuICBUaGlzIGNvdWxkIGJlIGRvbmUgaW4gdXNlcnNwYWNlLAorICAgYnV0IGl0J3Mgbm90IGVhc3ksIGFuZCB3ZSd2ZSBhbHJlYWR5IGRvbmUgaXQgaGVyZS4gICovCisKKyNkZWZpbmUgRUxGX0hXQ0FQCShjdXJfY3B1X3NwZWNbMF0tPmNwdV91c2VyX2ZlYXR1cmVzKQorCisvKiBUaGlzIHlpZWxkcyBhIHN0cmluZyB0aGF0IGxkLnNvIHdpbGwgdXNlIHRvIGxvYWQgaW1wbGVtZW50YXRpb24KKyAgIHNwZWNpZmljIGxpYnJhcmllcyBmb3Igb3B0aW1pemF0aW9uLiAgVGhpcyBpcyBtb3JlIHNwZWNpZmljIGluCisgICBpbnRlbnQgdGhhbiBwb2tpbmcgYXQgdW5hbWUgb3IgL3Byb2MvY3B1aW5mby4KKworICAgRm9yIHRoZSBtb21lbnQsIHdlIGhhdmUgb25seSBvcHRpbWl6YXRpb25zIGZvciB0aGUgSW50ZWwgZ2VuZXJhdGlvbnMsCisgICBidXQgdGhhdCBjb3VsZCBjaGFuZ2UuLi4gKi8KKworI2RlZmluZSBFTEZfUExBVEZPUk0JKE5VTEwpCisKKyNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4LCBpYmNzMikgc2V0X3BlcnNvbmFsaXR5KChpYmNzMik/UEVSX1NWUjQ6UEVSX0xJTlVYKQorCisvKgorICogV2UgbmVlZCB0byBwdXQgaW4gc29tZSBleHRyYSBhdXggdGFibGUgZW50cmllcyB0byB0ZWxsIGdsaWJjIHdoYXQKKyAqIHRoZSBjYWNoZSBibG9jayBzaXplIGlzLCBzbyBpdCBjYW4gdXNlIHRoZSBkY2J6IGluc3RydWN0aW9uIHNhZmVseS4KKyAqLworI2RlZmluZSBBVF9EQ0FDSEVCU0laRQkJMTkKKyNkZWZpbmUgQVRfSUNBQ0hFQlNJWkUJCTIwCisjZGVmaW5lIEFUX1VDQUNIRUJTSVpFCQkyMQorLyogQSBzcGVjaWFsIGlnbm9yZWQgdHlwZSB2YWx1ZSBmb3IgUFBDLCBmb3IgZ2xpYmMgY29tcGF0aWJpbGl0eS4gICovCisjZGVmaW5lIEFUX0lHTk9SRVBQQwkJMjIKKworZXh0ZXJuIGludCBkY2FjaGVfYnNpemU7CitleHRlcm4gaW50IGljYWNoZV9ic2l6ZTsKK2V4dGVybiBpbnQgdWNhY2hlX2JzaXplOworCisvKgorICogVGhlIHJlcXVpcmVtZW50cyBoZXJlIGFyZToKKyAqIC0ga2VlcCB0aGUgZmluYWwgYWxpZ25tZW50IG9mIHNwIChzcCAmIDB4ZikKKyAqIC0gbWFrZSBzdXJlIHRoZSAzMi1iaXQgdmFsdWUgYXQgdGhlIGZpcnN0IDE2IGJ5dGUgYWxpZ25lZCBwb3NpdGlvbiBvZgorICogICBBVVhWIGlzIGdyZWF0ZXIgdGhhbiAxNiBmb3IgZ2xpYmMgY29tcGF0aWJpbGl0eS4KKyAqICAgQVRfSUdOT1JFUFBDIGlzIHVzZWQgZm9yIHRoYXQuCisgKiAtIGZvciBjb21wYXRpYmlsaXR5IHdpdGggZ2xpYmMgQVJDSF9ETElORk8gbXVzdCBhbHdheXMgYmUgZGVmaW5lZCBvbiBQUEMsCisgKiAgIGV2ZW4gaWYgRExJTkZPX0FSQ0hfSVRFTVMgZ29lcyB0byB6ZXJvIG9yIGlzIHVuZGVmaW5lZC4KKyAqLworI2RlZmluZSBBUkNIX0RMSU5GTwkJCQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCS8qIEhhbmRsZSBnbGliYyBjb21wYXRpYmlsaXR5LiAqLwkJCQlcCisJTkVXX0FVWF9FTlQoQVRfSUdOT1JFUFBDLCBBVF9JR05PUkVQUEMpOwkJCVwKKwlORVdfQVVYX0VOVChBVF9JR05PUkVQUEMsIEFUX0lHTk9SRVBQQyk7CQkJXAorCS8qIENhY2hlIHNpemUgaXRlbXMgKi8JCQkJCQlcCisJTkVXX0FVWF9FTlQoQVRfRENBQ0hFQlNJWkUsIGRjYWNoZV9ic2l6ZSk7CQkJXAorCU5FV19BVVhfRU5UKEFUX0lDQUNIRUJTSVpFLCBpY2FjaGVfYnNpemUpOwkJCVwKKwlORVdfQVVYX0VOVChBVF9VQ0FDSEVCU0laRSwgdWNhY2hlX2JzaXplKTsJCQlcCisgfSB3aGlsZSAoMCkKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL2Vycm5vLmggYi9pbmNsdWRlL2FzbS1wcGMvZXJybm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWYyMGJkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjL2Vycm5vLmgKQEAgLTAsMCArMSwxMSBAQAorI2lmbmRlZiBfUFBDX0VSUk5PX0gKKyNkZWZpbmUgX1BQQ19FUlJOT19ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9lcnJuby5oPgorCisjdW5kZWYJRURFQURMT0NLCisjZGVmaW5lCUVERUFETE9DSwk1OAkvKiBGaWxlIGxvY2tpbmcgZGVhZGxvY2sgZXJyb3IgKi8KKworI2RlZmluZSBfTEFTVF9FUlJOTwk1MTYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvZmNudGwuaCBiL2luY2x1ZGUvYXNtLXBwYy9mY250bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlMjhlNDEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGMvZmNudGwuaApAQCAtMCwwICsxLDkzIEBACisjaWZuZGVmIF9QUENfRkNOVExfSAorI2RlZmluZSBfUFBDX0ZDTlRMX0gKKworLyogb3Blbi9mY250bCAtIE9fU1lOQyBpcyBvbmx5IGltcGxlbWVudGVkIG9uIGJsb2NrcyBkZXZpY2VzIGFuZCBvbiBmaWxlcworICAgbG9jYXRlZCBvbiBhbiBleHQyIGZpbGUgc3lzdGVtICovCisjZGVmaW5lIE9fQUNDTU9ERQkgICAwMDAzCisjZGVmaW5lIE9fUkRPTkxZCSAgICAgMDAKKyNkZWZpbmUgT19XUk9OTFkJICAgICAwMQorI2RlZmluZSBPX1JEV1IJCSAgICAgMDIKKyNkZWZpbmUgT19DUkVBVAkJICAgMDEwMAkvKiBub3QgZmNudGwgKi8KKyNkZWZpbmUgT19FWENMCQkgICAwMjAwCS8qIG5vdCBmY250bCAqLworI2RlZmluZSBPX05PQ1RUWQkgICAwNDAwCS8qIG5vdCBmY250bCAqLworI2RlZmluZSBPX1RSVU5DCQkgIDAxMDAwCS8qIG5vdCBmY250bCAqLworI2RlZmluZSBPX0FQUEVORAkgIDAyMDAwCisjZGVmaW5lIE9fTk9OQkxPQ0sJICAwNDAwMAorI2RlZmluZSBPX05ERUxBWQlPX05PTkJMT0NLCisjZGVmaW5lIE9fU1lOQwkJIDAxMDAwMAorI2RlZmluZSBGQVNZTkMJCSAwMjAwMDAJLyogZmNudGwsIGZvciBCU0QgY29tcGF0aWJpbGl0eSAqLworI2RlZmluZSBPX0RJUkVDVE9SWSAgICAgIDA0MDAwMAkvKiBtdXN0IGJlIGEgZGlyZWN0b3J5ICovCisjZGVmaW5lIE9fTk9GT0xMT1cgICAgICAwMTAwMDAwCS8qIGRvbid0IGZvbGxvdyBsaW5rcyAqLworI2RlZmluZSBPX0xBUkdFRklMRSAgICAgMDIwMDAwMAorI2RlZmluZSBPX0RJUkVDVAkwNDAwMDAwCS8qIGRpcmVjdCBkaXNrIGFjY2VzcyBoaW50ICovCisjZGVmaW5lIE9fTk9BVElNRQkwMTAwMDAwMAorCisjZGVmaW5lIEZfRFVQRkQJCTAJLyogZHVwICovCisjZGVmaW5lIEZfR0VURkQJCTEJLyogZ2V0IGNsb3NlX29uX2V4ZWMgKi8KKyNkZWZpbmUgRl9TRVRGRAkJMgkvKiBzZXQvY2xlYXIgY2xvc2Vfb25fZXhlYyAqLworI2RlZmluZSBGX0dFVEZMCQkzCS8qIGdldCBmaWxlLT5mX2ZsYWdzICovCisjZGVmaW5lIEZfU0VURkwJCTQJLyogc2V0IGZpbGUtPmZfZmxhZ3MgKi8KKyNkZWZpbmUgRl9HRVRMSwkJNQorI2RlZmluZSBGX1NFVExLCQk2CisjZGVmaW5lIEZfU0VUTEtXCTcKKworI2RlZmluZSBGX1NFVE9XTgk4CS8qICBmb3Igc29ja2V0cy4gKi8KKyNkZWZpbmUgRl9HRVRPV04JOQkvKiAgZm9yIHNvY2tldHMuICovCisjZGVmaW5lIEZfU0VUU0lHCTEwCS8qICBmb3Igc29ja2V0cy4gKi8KKyNkZWZpbmUgRl9HRVRTSUcJMTEJLyogIGZvciBzb2NrZXRzLiAqLworCisjZGVmaW5lIEZfR0VUTEs2NAkxMgkvKiAgdXNpbmcgJ3N0cnVjdCBmbG9jazY0JyAqLworI2RlZmluZSBGX1NFVExLNjQJMTMKKyNkZWZpbmUgRl9TRVRMS1c2NAkxNAorCisvKiBmb3IgRl9bR0VUfFNFVF1GTCAqLworI2RlZmluZSBGRF9DTE9FWEVDCTEJLyogYWN0dWFsbHkgYW55dGhpbmcgd2l0aCBsb3cgYml0IHNldCBnb2VzICovCisKKy8qIGZvciBwb3NpeCBmY250bCgpIGFuZCBsb2NrZigpICovCisjZGVmaW5lIEZfUkRMQ0sJCTAKKyNkZWZpbmUgRl9XUkxDSwkJMQorI2RlZmluZSBGX1VOTENLCQkyCisKKy8qIGZvciBvbGQgaW1wbGVtZW50YXRpb24gb2YgYnNkIGZsb2NrICgpICovCisjZGVmaW5lIEZfRVhMQ0sJCTQJLyogb3IgMyAqLworI2RlZmluZSBGX1NITENLCQk4CS8qIG9yIDQgKi8KKworLyogZm9yIGxlYXNlcyAqLworI2RlZmluZSBGX0lOUFJPR1JFU1MJMTYKKworLyogb3BlcmF0aW9ucyBmb3IgYnNkIGZsb2NrKCksIGFsc28gdXNlZCBieSB0aGUga2VybmVsIGltcGxlbWVudGF0aW9uICovCisjZGVmaW5lIExPQ0tfU0gJCTEJLyogc2hhcmVkIGxvY2sgKi8KKyNkZWZpbmUgTE9DS19FWAkJMgkvKiBleGNsdXNpdmUgbG9jayAqLworI2RlZmluZSBMT0NLX05CCQk0CS8qIG9yJ2Qgd2l0aCBvbmUgb2YgdGhlIGFib3ZlIHRvIHByZXZlbnQKKwkJCQkgICBibG9ja2luZyAqLworI2RlZmluZSBMT0NLX1VOCQk4CS8qIHJlbW92ZSBsb2NrICovCisKKyNkZWZpbmUgTE9DS19NQU5ECTMyCS8qIFRoaXMgaXMgYSBtYW5kYXRvcnkgZmxvY2sgKi8KKyNkZWZpbmUgTE9DS19SRUFECTY0CS8qIC4uLiBXaGljaCBhbGxvd3MgY29uY3VycmVudCByZWFkIG9wZXJhdGlvbnMgKi8KKyNkZWZpbmUgTE9DS19XUklURQkxMjgJLyogLi4uIFdoaWNoIGFsbG93cyBjb25jdXJyZW50IHdyaXRlIG9wZXJhdGlvbnMgKi8KKyNkZWZpbmUgTE9DS19SVwkJMTkyCS8qIC4uLiBXaGljaCBhbGxvd3MgY29uY3VycmVudCByZWFkICYgd3JpdGUgb3BzICovCisKKyNpZmRlZiBfX0tFUk5FTF9fCisjZGVmaW5lIEZfUE9TSVgJCTEKKyNkZWZpbmUgRl9GTE9DSwkJMgorI2RlZmluZSBGX0JST0tFTgk0CS8qIGJyb2tlbiBmbG9jaygpIGVtdWxhdGlvbiAqLworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworc3RydWN0IGZsb2NrIHsKKwlzaG9ydCBsX3R5cGU7CisJc2hvcnQgbF93aGVuY2U7CisJb2ZmX3QgbF9zdGFydDsKKwlvZmZfdCBsX2xlbjsKKwlwaWRfdCBsX3BpZDsKK307CisKK3N0cnVjdCBmbG9jazY0IHsKKwlzaG9ydCAgbF90eXBlOworCXNob3J0ICBsX3doZW5jZTsKKwlsb2ZmX3QgbF9zdGFydDsKKwlsb2ZmX3QgbF9sZW47CisJcGlkX3QgIGxfcGlkOworfTsKKworI2RlZmluZSBGX0xJTlVYX1NQRUNJRklDX0JBU0UJMTAyNAorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvZmxvcHB5LmggYi9pbmNsdWRlL2FzbS1wcGMvZmxvcHB5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGNjZDRhMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9mbG9wcHkuaApAQCAtMCwwICsxLDE4MiBAQAorLyoKKyAqIEFyY2hpdGVjdHVyZSBzcGVjaWZpYyBwYXJ0cyBvZiB0aGUgRmxvcHB5IGRyaXZlcgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NQorICovCisjaWZkZWYgX19LRVJORUxfXworI2lmbmRlZiBfX0FTTV9QUENfRkxPUFBZX0gKKyNkZWZpbmUgX19BU01fUFBDX0ZMT1BQWV9ICisKKyNkZWZpbmUgZmRfaW5iKHBvcnQpCQlpbmJfcChwb3J0KQorI2RlZmluZSBmZF9vdXRiKHZhbHVlLHBvcnQpCW91dGJfcCh2YWx1ZSxwb3J0KQorCisjZGVmaW5lIGZkX2Rpc2FibGVfZG1hKCkJZmRfb3BzLT5fZGlzYWJsZV9kbWEoRkxPUFBZX0RNQSkKKyNkZWZpbmUgZmRfZnJlZV9kbWEoKSAgICAgICAgICAgZmRfb3BzLT5fZnJlZV9kbWEoRkxPUFBZX0RNQSkKKyNkZWZpbmUgZmRfZ2V0X2RtYV9yZXNpZHVlKCkgICAgZmRfb3BzLT5fZ2V0X2RtYV9yZXNpZHVlKEZMT1BQWV9ETUEpCisjZGVmaW5lIGZkX2RtYV9zZXR1cChhZGRyLCBzaXplLCBtb2RlLCBpbykgZmRfb3BzLT5fZG1hX3NldHVwKGFkZHIsIHNpemUsIG1vZGUsIGlvKQorI2RlZmluZSBmZF9lbmFibGVfaXJxKCkgICAgICAgICBlbmFibGVfaXJxKEZMT1BQWV9JUlEpCisjZGVmaW5lIGZkX2Rpc2FibGVfaXJxKCkgICAgICAgIGRpc2FibGVfaXJxKEZMT1BQWV9JUlEpCisjZGVmaW5lIGZkX2ZyZWVfaXJxKCkgICAgICAgICAgIGZyZWVfaXJxKEZMT1BQWV9JUlEsIE5VTEwpOworCitzdGF0aWMgaW50IGZkX3JlcXVlc3RfZG1hKHZvaWQpOworCitzdHJ1Y3QgZmRfZG1hX29wcyB7CisJdm9pZCAoKl9kaXNhYmxlX2RtYSkodW5zaWduZWQgaW50IGRtYW5yKTsKKwl2b2lkICgqX2ZyZWVfZG1hKSh1bnNpZ25lZCBpbnQgZG1hbnIpOworCWludCAoKl9nZXRfZG1hX3Jlc2lkdWUpKHVuc2lnbmVkIGludCBkdW1teSk7CisJaW50ICgqX2RtYV9zZXR1cCkoY2hhciAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLCBpbnQgbW9kZSwgaW50IGlvKTsKK307CisKK3N0YXRpYyBpbnQgdmlydHVhbF9kbWFfY291bnQ7CitzdGF0aWMgaW50IHZpcnR1YWxfZG1hX3Jlc2lkdWU7CitzdGF0aWMgY2hhciAqdmlydHVhbF9kbWFfYWRkcjsKK3N0YXRpYyBpbnQgdmlydHVhbF9kbWFfbW9kZTsKK3N0YXRpYyBpbnQgZG9pbmdfdmRtYTsKK3N0YXRpYyBzdHJ1Y3QgZmRfZG1hX29wcyAqZmRfb3BzOworCitzdGF0aWMgaXJxcmV0dXJuX3QgZmxvcHB5X2hhcmRpbnQoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MpCit7CisJdW5zaWduZWQgY2hhciBzdDsKKwlpbnQgbGNvdW50OworCWNoYXIgKmxwdHI7CisKKwlpZiAoIWRvaW5nX3ZkbWEpCisJCXJldHVybiBmbG9wcHlfaW50ZXJydXB0KGlycSwgZGV2X2lkLCByZWdzKTsKKworCisJc3QgPSAxOworCWZvciAobGNvdW50PXZpcnR1YWxfZG1hX2NvdW50LCBscHRyPXZpcnR1YWxfZG1hX2FkZHI7CisJICAgICBsY291bnQ7IGxjb3VudC0tLCBscHRyKyspIHsKKwkJc3Q9aW5iKHZpcnR1YWxfZG1hX3BvcnQrNCkgJiAweGEwIDsKKwkJaWYgKHN0ICE9IDB4YTApCisJCQlicmVhazsKKwkJaWYgKHZpcnR1YWxfZG1hX21vZGUpCisJCQlvdXRiX3AoKmxwdHIsIHZpcnR1YWxfZG1hX3BvcnQrNSk7CisJCWVsc2UKKwkJCSpscHRyID0gaW5iX3AodmlydHVhbF9kbWFfcG9ydCs1KTsKKwl9CisJdmlydHVhbF9kbWFfY291bnQgPSBsY291bnQ7CisJdmlydHVhbF9kbWFfYWRkciA9IGxwdHI7CisJc3QgPSBpbmIodmlydHVhbF9kbWFfcG9ydCs0KTsKKworCWlmIChzdCA9PSAweDIwKQorCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJaWYgKCEoc3QgJiAweDIwKSkgeworCQl2aXJ0dWFsX2RtYV9yZXNpZHVlICs9IHZpcnR1YWxfZG1hX2NvdW50OworCQl2aXJ0dWFsX2RtYV9jb3VudD0wOworCQlkb2luZ192ZG1hID0gMDsKKwkJZmxvcHB5X2ludGVycnVwdChpcnEsIGRldl9pZCwgcmVncyk7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCB2ZG1hX2Rpc2FibGVfZG1hKHVuc2lnbmVkIGludCBkdW1teSkKK3sKKwlkb2luZ192ZG1hID0gMDsKKwl2aXJ0dWFsX2RtYV9yZXNpZHVlICs9IHZpcnR1YWxfZG1hX2NvdW50OworCXZpcnR1YWxfZG1hX2NvdW50PTA7Cit9CisKK3N0YXRpYyB2b2lkIHZkbWFfbm9wKHVuc2lnbmVkIGludCBkdW1teSkKK3sKK30KKworCitzdGF0aWMgaW50IHZkbWFfZ2V0X2RtYV9yZXNpZHVlKHVuc2lnbmVkIGludCBkdW1teSkKK3sKKwlyZXR1cm4gdmlydHVhbF9kbWFfY291bnQgKyB2aXJ0dWFsX2RtYV9yZXNpZHVlOworfQorCisKK3N0YXRpYyBpbnQgZmRfcmVxdWVzdF9pcnEodm9pZCkKK3sKKwlpZiAoY2FuX3VzZV92aXJ0dWFsX2RtYSkKKwkJcmV0dXJuIHJlcXVlc3RfaXJxKEZMT1BQWV9JUlEsIGZsb3BweV9oYXJkaW50LFNBX0lOVEVSUlVQVCwKKwkJCQkJCSAgICJmbG9wcHkiLCBOVUxMKTsKKwllbHNlCisJCXJldHVybiByZXF1ZXN0X2lycShGTE9QUFlfSVJRLCBmbG9wcHlfaW50ZXJydXB0LAorCQkJCQkJICAgU0FfSU5URVJSVVBUfFNBX1NBTVBMRV9SQU5ET00sCisJCQkJCQkgICAiZmxvcHB5IiwgTlVMTCk7CisKK30KKworc3RhdGljIGludCB2ZG1hX2RtYV9zZXR1cChjaGFyICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIGludCBtb2RlLCBpbnQgaW8pCit7CisJZG9pbmdfdmRtYSA9IDE7CisJdmlydHVhbF9kbWFfcG9ydCA9IGlvOworCXZpcnR1YWxfZG1hX21vZGUgPSAobW9kZSAgPT0gRE1BX01PREVfV1JJVEUpOworCXZpcnR1YWxfZG1hX2FkZHIgPSBhZGRyOworCXZpcnR1YWxfZG1hX2NvdW50ID0gc2l6ZTsKKwl2aXJ0dWFsX2RtYV9yZXNpZHVlID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoYXJkX2RtYV9zZXR1cChjaGFyICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIGludCBtb2RlLCBpbnQgaW8pCit7CisJLyogYWN0dWFsLCBwaHlzaWNhbCBETUEgKi8KKwlkb2luZ192ZG1hID0gMDsKKwljbGVhcl9kbWFfZmYoRkxPUFBZX0RNQSk7CisJc2V0X2RtYV9tb2RlKEZMT1BQWV9ETUEsbW9kZSk7CisJc2V0X2RtYV9hZGRyKEZMT1BQWV9ETUEsKHVuc2lnbmVkIGludCl2aXJ0X3RvX2J1cyhhZGRyKSk7CisJc2V0X2RtYV9jb3VudChGTE9QUFlfRE1BLHNpemUpOworCWVuYWJsZV9kbWEoRkxPUFBZX0RNQSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmRfZG1hX29wcyByZWFsX2RtYV9vcHMgPQoreworCS5fZGlzYWJsZV9kbWEgPSBkaXNhYmxlX2RtYSwKKwkuX2ZyZWVfZG1hID0gZnJlZV9kbWEsCisJLl9nZXRfZG1hX3Jlc2lkdWUgPSBnZXRfZG1hX3Jlc2lkdWUsCisJLl9kbWFfc2V0dXAgPSBoYXJkX2RtYV9zZXR1cAorfTsKKworc3RhdGljIHN0cnVjdCBmZF9kbWFfb3BzIHZpcnRfZG1hX29wcyA9Cit7CisJLl9kaXNhYmxlX2RtYSA9IHZkbWFfZGlzYWJsZV9kbWEsCisJLl9mcmVlX2RtYSA9IHZkbWFfbm9wLAorCS5fZ2V0X2RtYV9yZXNpZHVlID0gdmRtYV9nZXRfZG1hX3Jlc2lkdWUsCisJLl9kbWFfc2V0dXAgPSB2ZG1hX2RtYV9zZXR1cAorfTsKKworc3RhdGljIGludCBmZF9yZXF1ZXN0X2RtYSgpCit7CisJaWYgKGNhbl91c2VfdmlydHVhbF9kbWEgJiAxKSB7CisJCWZkX29wcyA9ICZ2aXJ0X2RtYV9vcHM7CisJCXJldHVybiAwOworCX0KKwllbHNlIHsKKwkJZmRfb3BzID0gJnJlYWxfZG1hX29wczsKKwkJcmV0dXJuIHJlcXVlc3RfZG1hKEZMT1BQWV9ETUEsICJmbG9wcHkiKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgRkRDMSA9IDB4M2YwOworc3RhdGljIGludCBGREMyID0gLTE7CisKKy8qCisgKiBBZ2FpbiwgdGhlIENNT1MgaW5mb3JtYXRpb24gbm90IGF2YWlsYWJsZQorICovCisjZGVmaW5lIEZMT1BQWTBfVFlQRSA2CisjZGVmaW5lIEZMT1BQWTFfVFlQRSAwCisKKyNkZWZpbmUgTl9GREMgMgkJCS8qIERvbid0IGNoYW5nZSB0aGlzISAqLworI2RlZmluZSBOX0RSSVZFIDgKKworI2RlZmluZSBGTE9QUFlfTU9UT1JfTUFTSyAweGYwCisKKy8qCisgKiBUaGUgUG93ZXJQQyBoYXMgbm8gcHJvYmxlbXMgd2l0aCBmbG9wcHkgRE1BIGNyb3NzaW5nIDY0ayBib3JkZXJzLgorICovCisjZGVmaW5lIENST1NTXzY0S0IoYSxzKQkoMCkKKworI2VuZGlmIC8qIF9fQVNNX1BQQ19GTE9QUFlfSCAqLworCisjZGVmaW5lIEVYVFJBX0ZMT1BQWV9QQVJBTVMKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9mc2xfb2NwLmggYi9pbmNsdWRlL2FzbS1wcGMvZnNsX29jcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1MGZiYmEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGMvZnNsX29jcC5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1wcGMvZnNsX29jcC5oCisgKgorICogRGVmaW5pdGlvbnMgZm9yIHRoZSBvbi1jaGlwIHBlcmlwaGVyYWxzIG9uIEZyZWVzY2FsZSBQUEMgcHJvY2Vzc29ycworICoKKyAqIE1haW50YWluZXI6IEt1bWFyIEdhbGEgKGt1bWFyLmdhbGFAZnJlZXNjYWxlLmNvbSkKKyAqCisgKiBDb3B5cmlnaHQgMjAwNCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZkZWYgX19LRVJORUxfXworI2lmbmRlZiBfX0FTTV9GU19PQ1BfSF9fCisjZGVmaW5lIF9fQVNNX0ZTX09DUF9IX18KKworLyogQSB0YWJsZSBvZiBpbmZvcm1hdGlvbiBmb3Igc3VwcG9ydGluZyB0aGUgR2lhbmZhciBFdGhlcm5ldCBDb250cm9sbGVyCisgKiBUaGlzIGhlbHBzIGlkZW50aWZ5IHdoaWNoIGVuZXQgY29udHJvbGxlciB3ZSBhcmUgZGVhbGluZyB3aXRoLAorICogYW5kIHdoYXQgdHlwZSBvZiBlbmV0IGNvbnRyb2xsZXIgaXQgaXMKKyAqLworc3RydWN0IG9jcF9nZmFyX2RhdGEgeworCXVpbnQgaW50ZXJydXB0VHJhbnNtaXQ7CisJdWludCBpbnRlcnJ1cHRFcnJvcjsKKwl1aW50IGludGVycnVwdFJlY2VpdmU7CisJdWludCBpbnRlcnJ1cHRQSFk7CisJdWludCBmbGFnczsKKwl1aW50IHBoeWlkOworCXVpbnQgcGh5cmVnaWR4OworCXVuc2lnbmVkIGNoYXIgbWFjX2FkZHJbNl07Cit9OworCisvKiBGbGFncyBpbiB0aGUgZmxhZ3MgZmllbGQgKi8KKyNkZWZpbmUgR0ZBUl9IQVNfQ09BTEVTQ0UJCTB4MjAKKyNkZWZpbmUgR0ZBUl9IQVNfUk1PTgkJCTB4MTAKKyNkZWZpbmUgR0ZBUl9IQVNfTVVMVElfSU5UUgkJMHgwOAorI2RlZmluZSBHRkFSX0ZJUk1fU0VUX01BQ0FERFIJCTB4MDQKKyNkZWZpbmUgR0ZBUl9IQVNfUEhZX0lOVFIJCTB4MDIJLyogaWYgbm90IHNldCB1c2UgYSB0aW1lciAqLworI2RlZmluZSBHRkFSX0hBU19HSUdBQklUCQkweDAxCisKKy8qIERhdGEgc3RydWN0dXJlIGZvciBJMkMgc3VwcG9ydC4gIEp1c3QgY29udGFpbnMgYSBjb3VwbGUgZmxhZ3MKKyAqIHRvIGRpc3Rpbmd1aXNoIHZhcmlvdXMgSTJDIGltcGxlbWVudGF0aW9ucyovCitzdHJ1Y3Qgb2NwX2ZzX2kyY19kYXRhIHsKKwl1aW50IGZsYWdzOworfTsKKworLyogRmxhZ3MgZm9yIEkyQyAqLworI2RlZmluZSBGU19JMkNfU0VQQVJBVEVfREZTUlIJMHgwMgorI2RlZmluZSBGU19JMkNfQ0xPQ0tfNTIwMAkweDAxCisKKyNlbmRpZgkvKiBfX0FTTV9GU19PQ1BfSF9fICovCisjZW5kaWYJLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL2dnMi5oIGIvaW5jbHVkZS9hc20tcHBjL2dnMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0MWFlNTUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGMvZ2cyLmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqICBpbmNsdWRlL2FzbS1wcGMvZ2cyLmggLS0gVkxTSSBWQVM5NjAxMS8xMiBgR29sZGVuIEdhdGUgMicgcmVnaXN0ZXIgZGVmaW5pdGlvbnMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk3IEdlZXJ0IFV5dHRlcmhvZXZlbgorICoKKyAqICBUaGlzIGZpbGUgaXMgYmFzZWQgb24gdGhlIGZvbGxvd2luZyBkb2N1bWVudGF0aW9uOgorICoKKyAqCVRoZSBWQVM5NjAxMS8xMiBDaGlwc2V0LCBEYXRhIEJvb2ssIEVkaXRpb24gMS4wCisgKglWTFNJIFRlY2hub2xvZ3ksIEluYy4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfQVNNUFBDX0dHMl9ICisjZGVmaW5lIF9BU01QUENfR0cyX0gKKworICAgIC8qCisgICAgICogIE1lbW9yeSBNYXAgKENIUlAgbW9kZSkKKyAgICAgKi8KKworI2RlZmluZSBHRzJfUENJX01FTV9CQVNFCTB4YzAwMDAwMDAJLyogUGVyaXBoZXJhbCBtZW1vcnkgc3BhY2UgKi8KKyNkZWZpbmUgR0cyX0lTQV9NRU1fQkFTRQkweGY3MDAwMDAwCS8qIFBlcmlwaGVyYWwgbWVtb3J5IGFsaWFzICovCisjZGVmaW5lIEdHMl9JU0FfSU9fQkFTRQkJMHhmODAwMDAwMAkvKiBQZXJpcGhlcmFsIEkvTyBzcGFjZSAqLworI2RlZmluZSBHRzJfUENJX0NPTkZJR19CQVNFCTB4ZmVjMDAwMDAJLyogUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UgKi8KKyNkZWZpbmUgR0cyX0lOVF9BQ0tfU1BFQ0lBTAkweGZlYzgwMDAwCS8qIEludGVycnVwdCBhY2tub3dsZWRnZSBhbmQgKi8KKwkJCQkJCS8qIHNwZWNpYWwgUENJIGN5Y2xlcyAqLworI2RlZmluZSBHRzJfUk9NX0JBU0UwCQkweGZmMDAwMDAwCS8qIFJPTSBiYW5rIDAgKi8KKyNkZWZpbmUgR0cyX1JPTV9CQVNFMQkJMHhmZjgwMDAwMAkvKiBST00gYmFuayAxICovCisKKworICAgIC8qCisgICAgICogIEdHMiBzcGVjaWZpYyBQQ0kgUmVnaXN0ZXJzCisgICAgICovCisKK2V4dGVybiB2b2lkIF9faW9tZW0gKmdnMl9wY2lfY29uZmlnX2Jhc2U7CS8qIGtlcm5lbCB2aXJ0dWFsIGFkZHJlc3MgKi8KKworI2RlZmluZSBHRzJfUENJX0JVU05PCQkweDQwCS8qIEJ1cyBudW1iZXIgKi8KKyNkZWZpbmUgR0cyX1BDSV9TVUJCVVNOTwkweDQxCS8qIFN1Ym9yZGluYXRlIGJ1cyBudW1iZXIgKi8KKyNkZWZpbmUgR0cyX1BDSV9ESVNDQ1RSCQkweDQyCS8qIERpc2Nvbm5lY3QgY291bnRlciAqLworI2RlZmluZSBHRzJfUENJX1BQQ19DVFJMCTB4NTAJLyogUG93ZXJQQyBpbnRlcmZhY2UgY29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBHRzJfUENJX0FERFJfTUFQCTB4NWMJLyogQWRkcmVzcyBtYXAgKi8KKyNkZWZpbmUgR0cyX1BDSV9QQ0lfQ1RSTAkweDYwCS8qIFBDSSBpbnRlcmZhY2UgY29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBHRzJfUENJX1JPTV9DVFJMCTB4NzAJLyogUk9NIGludGVyZmFjZSBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIEdHMl9QQ0lfUk9NX1RJTUUJMHg3NAkvKiBST00gdGltaW5nICovCisjZGVmaW5lIEdHMl9QQ0lfQ0NfQ1RSTAkJMHg4MAkvKiBDYWNoZSBjb250cm9sbGVyIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgR0cyX1BDSV9EUkFNX0JBTkswCTB4OTAJLyogQ29udHJvbCByZWdpc3RlciBmb3IgRFJBTSBiYW5rICMwICovCisjZGVmaW5lIEdHMl9QQ0lfRFJBTV9CQU5LMQkweDk0CS8qIENvbnRyb2wgcmVnaXN0ZXIgZm9yIERSQU0gYmFuayAjMSAqLworI2RlZmluZSBHRzJfUENJX0RSQU1fQkFOSzIJMHg5OAkvKiBDb250cm9sIHJlZ2lzdGVyIGZvciBEUkFNIGJhbmsgIzIgKi8KKyNkZWZpbmUgR0cyX1BDSV9EUkFNX0JBTkszCTB4OWMJLyogQ29udHJvbCByZWdpc3RlciBmb3IgRFJBTSBiYW5rICMzICovCisjZGVmaW5lIEdHMl9QQ0lfRFJBTV9CQU5LNAkweGEwCS8qIENvbnRyb2wgcmVnaXN0ZXIgZm9yIERSQU0gYmFuayAjNCAqLworI2RlZmluZSBHRzJfUENJX0RSQU1fQkFOSzUJMHhhNAkvKiBDb250cm9sIHJlZ2lzdGVyIGZvciBEUkFNIGJhbmsgIzUgKi8KKyNkZWZpbmUgR0cyX1BDSV9EUkFNX1RJTUUwCTB4YjAJLyogVGltaW5nIHBhcmFtZXRlcnMgc2V0ICMwICovCisjZGVmaW5lIEdHMl9QQ0lfRFJBTV9USU1FMQkweGI0CS8qIFRpbWluZyBwYXJhbWV0ZXJzIHNldCAjMSAqLworI2RlZmluZSBHRzJfUENJX0RSQU1fQ1RSTAkweGMwCS8qIERSQU0gY29udHJvbCAqLworI2RlZmluZSBHRzJfUENJX0VSUl9DVFJMCTB4ZDAJLyogRXJyb3IgY29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBHRzJfUENJX0VSUl9TVEFUVVMJMHhkNAkvKiBFcnJvciBzdGF0dXMgcmVnaXN0ZXIgKi8KKwkJCQkJLyogQ2xlYXJlZCB3aGVuIHJlYWQgKi8KKworI2VuZGlmIC8qIF9BU01QUENfR0cyX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9ndDY0MjYwLmggYi9pbmNsdWRlL2FzbS1wcGMvZ3Q2NDI2MC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkMGVmNjQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGMvZ3Q2NDI2MC5oCkBAIC0wLDAgKzEsMzIyIEBACisvKgorICogaW5jbHVkZS9hc20tcHBjL2d0NjQyNjAuaAorICoKKyAqIFByb3RvdHlwZXMsIGV0Yy4gZm9yIHRoZSBNYXJ2ZWxsL0dhbGlsZW8gR1Q2NDI2MCBob3N0IGJyaWRnZSByb3V0aW5lcy4KKyAqCisgKiBBdXRob3I6IE1hcmsgQS4gR3JlZXIgPG1ncmVlckBtdmlzdGEuY29tPgorICoKKyAqIDIwMDEgKGMpIE1vbnRhVmlzdGEsIFNvZnR3YXJlLCBJbmMuICBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtCisgKiBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3MKKyAqIG9yIGltcGxpZWQuCisgKi8KKyNpZm5kZWYgX19BU01QUENfR1Q2NDI2MF9ICisjZGVmaW5lIF9fQVNNUFBDX0dUNjQyNjBfSAorCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgorI2luY2x1ZGUgPGFzbS9wY2ktYnJpZGdlLmg+CisjaW5jbHVkZSA8YXNtL2d0NjQyNjBfZGVmcy5oPgorCisKK2V4dGVybiB1MzIgICAgIGd0NjQyNjBfYmFzZTsKK2V4dGVybiB1MzIgICAgIGd0NjQyNjBfaXJxX2Jhc2U7ICAgICAvKiBXZSBoYW5kbGUgdGhlIG5leHQgOTYgSVJRcyBmcm9tIGhlcmUgKi8KK2V4dGVybiB1MzIgICAgIGd0NjQyNjBfcmV2aXNpb247CitleHRlcm4gdTggICAgICBndDY0MjYwX3BjaV9leGNsdWRlX2JyaWRnZTsKKworI2lmbmRlZglUUlVFCisjZGVmaW5lCVRSVUUJMQorI2VuZGlmCisKKyNpZm5kZWYJRkFMU0UKKyNkZWZpbmUJRkFMU0UJMAorI2VuZGlmCisKKy8qIElSUXMgZGVmaW5lZCBieSB0aGUgNjQyNjAgKi8KKyNkZWZpbmUJR1Q2NDI2MF9JUlFfTVBTQzAJCTQwCisjZGVmaW5lCUdUNjQyNjBfSVJRX01QU0MxCQk0MgorI2RlZmluZQlHVDY0MjYwX0lSUV9TRE1BCQkzNgorCisvKgorICogRGVmaW5lIGEgZGVmYXVsdCBwaHlzaWNhbCBtZW1vcnkgbWFwIHRvIGJlIHNldCB1cCBvbiB0aGUgYnJpZGdlLgorICogQWxzbyBkZWZpbmUgYSBzdHJ1Y3QgdG8gcGFzcyB0aGF0IGluZm8gZnJvbSBib2FyZC1zcGVjaWZpYyByb3V0aW5lcyB0bworICogR1Q2NDI2MCBnZW5lcmljIHNldCB1cCByb3V0aW5lcy4gIEJ5IHBhc3NpbmcgdGhpcyBpbmZvIGluLCB0aGUgYm9hcmQKKyAqIHN1cHBvcnQgZGV2ZWxvcGVyIGNhbiBtb2RpZnkgaXQgYXQgd2lsbC4KKyAqLworCisvKgorICogVGhpcyBpcyB0aGUgZGVmYXVsdCBtZW1vcnkgbWFwOgorICoJCQlDUFUJCQlQQ0kKKyAqCQkJLS0tCQkJLS0tCisgKiBQQ0kgMCBJL086CTB4ZmEwMDAwMDAtMHhmYWZmZmZmZgkweDAwMDAwMDAwLTB4MDBmZmZmZmYKKyAqIFBDSSAxIEkvTzoJMHhmYjAwMDAwMC0weGZiZmZmZmZmCTB4MDEwMDAwMDAtMHgwMWZmZmZmZgorICogUENJIDAgTUVNOgkweDgwMDAwMDAwLTB4OGZmZmZmZmYJMHg4MDAwMDAwMC0weDhmZmZmZmZmCisgKiBQQ0kgMSBNRU06CTB4OTAwMDAwMDAtMHg5ZmZmZmZmZgkweDkwMDAwMDAwLTB4OWZmZmZmZmYKKyAqLworCisvKiBEZWZhdWx0IHBoeXNpY2FsIG1lbW9yeSBtYXAgZm9yIHRoZSBHVDY0MjYwIGJyaWRnZSAqLworCisvKgorICogUENJIEJ1cyAwIERlZmluaXRpb25zCisgKi8KKyNkZWZpbmUgR1Q2NDI2MF9QQ0lfMF9JT19TSVpFCQkweDAxMDAwMDAwVQorI2RlZmluZQlHVDY0MjYwX1BDSV8wX01FTV9TSVpFCQkweDEwMDAwMDAwVQorCisvKiBQcm9jZXNzb3IgUGh5c2ljYWwgYWRkcmVzc2VzICovCisjZGVmaW5lCUdUNjQyNjBfUENJXzBfSU9fU1RBUlRfUFJPQwkweGZhMDAwMDAwVQorI2RlZmluZQlHVDY0MjYwX1BDSV8wX0lPX0VORF9QUk9DCShHVDY0MjYwX1BDSV8wX0lPX1NUQVJUX1BST0MgKyBcCisJCQkJCSBHVDY0MjYwX1BDSV8wX0lPX1NJWkUgLSAxKQorCisvKiBQQ0kgMCBhZGRyZXNzZXMgKi8KKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMF9JT19TVEFSVAkJMHgwMDAwMDAwMFUKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMF9JT19FTkQJCShHVDY0MjYwX1BDSV8wX0lPX1NUQVJUICsgXAorCQkJCQkgR1Q2NDI2MF9QQ0lfMF9JT19TSVpFIC0gMSkKKworLyogUHJvY2Vzc29yIFBoeXNpY2FsIGFkZHJlc3NlcyAqLworI2RlZmluZQlHVDY0MjYwX1BDSV8wX01FTV9TVEFSVF9QUk9DCTB4ODAwMDAwMDBVCisjZGVmaW5lCUdUNjQyNjBfUENJXzBfTUVNX0VORF9QUk9DCShHVDY0MjYwX1BDSV8wX01FTV9TVEFSVF9QUk9DICsgXAorCQkJCQkgR1Q2NDI2MF9QQ0lfMF9NRU1fU0laRSAtIDEpCisKKy8qIFBDSSAwIGFkZHJlc3NlcyAqLworI2RlZmluZQlHVDY0MjYwX1BDSV8wX01FTV9TVEFSVAkJMHg4MDAwMDAwMFUKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMF9NRU1fRU5ECQkoR1Q2NDI2MF9QQ0lfMF9NRU1fU1RBUlQgKyBcCisJCQkJCSBHVDY0MjYwX1BDSV8wX01FTV9TSVpFIC0gMSkKKworLyoKKyAqIFBDSSBCdXMgMSBEZWZpbml0aW9ucworICovCisjZGVmaW5lIEdUNjQyNjBfUENJXzFfSU9fU0laRQkJMHgwMTAwMDAwMFUKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMV9NRU1fU0laRQkJMHgxMDAwMDAwMFUKKworLyogUENJIDEgYWRkcmVzc2VzICovCisjZGVmaW5lCUdUNjQyNjBfUENJXzFfSU9fU1RBUlQJCTB4MDEwMDAwMDBVCisjZGVmaW5lCUdUNjQyNjBfUENJXzFfSU9fRU5ECQkoR1Q2NDI2MF9QQ0lfMV9JT19TVEFSVCArIFwKKwkJCQkJIEdUNjQyNjBfUENJXzFfSU9fU0laRSAtIDEpCisKKy8qIFByb2Nlc3NvciBQaHlzaWNhbCBhZGRyZXNzZXMgKi8KKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMV9JT19TVEFSVF9QUk9DCTB4ZmIwMDAwMDBVCisjZGVmaW5lCUdUNjQyNjBfUENJXzFfSU9fRU5EX1BST0MJKEdUNjQyNjBfUENJXzFfSU9fU1RBUlRfUFJPQyArIFwKKwkJCQkJIEdUNjQyNjBfUENJXzFfSU9fU0laRSAtIDEpCisKKy8qIFBDSSAxIGFkZHJlc3NlcyAqLworI2RlZmluZQlHVDY0MjYwX1BDSV8xX01FTV9TVEFSVAkJMHg5MDAwMDAwMFUKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMV9NRU1fRU5ECQkoR1Q2NDI2MF9QQ0lfMV9NRU1fU1RBUlQgKyBcCisJCQkJCSBHVDY0MjYwX1BDSV8xX01FTV9TSVpFIC0gMSkKKworLyogUHJvY2Vzc29yIFBoeXNpY2FsIGFkZHJlc3NlcyAqLworI2RlZmluZQlHVDY0MjYwX1BDSV8xX01FTV9TVEFSVF9QUk9DCTB4OTAwMDAwMDBVCisjZGVmaW5lCUdUNjQyNjBfUENJXzFfTUVNX0VORF9QUk9DCShHVDY0MjYwX1BDSV8xX01FTV9TVEFSVF9QUk9DICsgXAorCQkJCQkgR1Q2NDI2MF9QQ0lfMV9NRU1fU0laRSAtIDEpCisKKy8qIERlZmluZSBzdHJ1Y3QgdG8gcGFzcyBtZW0tbWFwIGluZm8gaW50byBndDY0MjYwX2NvbW1vbi5jIGNvZGUgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIJKmhvc2VfYTsKKwlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIJKmhvc2VfYjsKKworCXUzMgltZW1fc2l6ZTsKKworCXUzMglwY2lfMF9pb19zdGFydF9wcm9jOworCXUzMglwY2lfMF9pb19zdGFydF9wY2k7CisJdTMyCXBjaV8wX2lvX3NpemU7CisJdTMyCXBjaV8wX2lvX3N3YXA7CisKKwl1MzIJcGNpXzBfbWVtX3N0YXJ0X3Byb2M7CisJdTMyCXBjaV8wX21lbV9zdGFydF9wY2lfaGk7CisJdTMyCXBjaV8wX21lbV9zdGFydF9wY2lfbG87CisJdTMyCXBjaV8wX21lbV9zaXplOworCXUzMglwY2lfMF9tZW1fc3dhcDsKKworCXUzMglwY2lfMV9pb19zdGFydF9wcm9jOworCXUzMglwY2lfMV9pb19zdGFydF9wY2k7CisJdTMyCXBjaV8xX2lvX3NpemU7CisJdTMyCXBjaV8xX2lvX3N3YXA7CisKKwl1MzIJcGNpXzFfbWVtX3N0YXJ0X3Byb2M7CisJdTMyCXBjaV8xX21lbV9zdGFydF9wY2lfaGk7CisJdTMyCXBjaV8xX21lbV9zdGFydF9wY2lfbG87CisJdTMyCXBjaV8xX21lbV9zaXplOworCXUzMglwY2lfMV9tZW1fc3dhcDsKK30gZ3Q2NDI2MF9icmlkZ2VfaW5mb190OworCisjZGVmaW5lCUdUNjQyNjBfQlJJREdFX0lORk9fREVGQVVMVChpcCwgbXMpIHsJCQkJXAorCShpcCktPm1lbV9zaXplID0gKG1zKTsJCQkJCQlcCisJCQkJCQkJCQlcCisJKGlwKS0+cGNpXzBfaW9fc3RhcnRfcHJvYyA9IEdUNjQyNjBfUENJXzBfSU9fU1RBUlRfUFJPQzsJXAorCShpcCktPnBjaV8wX2lvX3N0YXJ0X3BjaSAgPSBHVDY0MjYwX1BDSV8wX0lPX1NUQVJUOwkJXAorCShpcCktPnBjaV8wX2lvX3NpemUJICA9IEdUNjQyNjBfUENJXzBfSU9fU0laRTsJCVwKKwkoaXApLT5wY2lfMF9pb19zd2FwCSAgPSBHVDY0MjYwX0NQVV9QQ0lfU1dBUF9OT05FOwkJXAorCQkJCQkJCQkJXAorCShpcCktPnBjaV8wX21lbV9zdGFydF9wcm9jICAgPSBHVDY0MjYwX1BDSV8wX01FTV9TVEFSVF9QUk9DOwlcCisJKGlwKS0+cGNpXzBfbWVtX3N0YXJ0X3BjaV9oaSA9IDB4MDAwMDAwMDA7CQkJXAorCShpcCktPnBjaV8wX21lbV9zdGFydF9wY2lfbG8gPSBHVDY0MjYwX1BDSV8wX01FTV9TVEFSVDsJCVwKKwkoaXApLT5wY2lfMF9tZW1fc2l6ZQkgICAgID0gR1Q2NDI2MF9QQ0lfMF9NRU1fU0laRTsJCVwKKwkoaXApLT5wY2lfMF9tZW1fc3dhcAkgICAgID0gR1Q2NDI2MF9DUFVfUENJX1NXQVBfTk9ORTsJXAorCQkJCQkJCQkJXAorCShpcCktPnBjaV8xX2lvX3N0YXJ0X3Byb2MgPSBHVDY0MjYwX1BDSV8xX0lPX1NUQVJUX1BST0M7CVwKKwkoaXApLT5wY2lfMV9pb19zdGFydF9wY2kgID0gR1Q2NDI2MF9QQ0lfMV9JT19TVEFSVDsJCVwKKwkoaXApLT5wY2lfMV9pb19zaXplCSAgPSBHVDY0MjYwX1BDSV8xX0lPX1NJWkU7CQlcCisJKGlwKS0+cGNpXzFfaW9fc3dhcAkgID0gR1Q2NDI2MF9DUFVfUENJX1NXQVBfTk9ORTsJCVwKKwkJCQkJCQkJCVwKKwkoaXApLT5wY2lfMV9tZW1fc3RhcnRfcHJvYyAgID0gR1Q2NDI2MF9QQ0lfMV9NRU1fU1RBUlRfUFJPQzsJXAorCShpcCktPnBjaV8xX21lbV9zdGFydF9wY2lfaGkgPSAweDAwMDAwMDAwOwkJCVwKKwkoaXApLT5wY2lfMV9tZW1fc3RhcnRfcGNpX2xvID0gR1Q2NDI2MF9QQ0lfMV9NRU1fU1RBUlQ7CQlcCisJKGlwKS0+cGNpXzFfbWVtX3NpemUJICAgICA9IEdUNjQyNjBfUENJXzFfTUVNX1NJWkU7CQlcCisJKGlwKS0+cGNpXzFfbWVtX3N3YXAJICAgICA9IEdUNjQyNjBfQ1BVX1BDSV9TV0FQX05PTkU7CVwKK30KKworLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqCUkvTyBtYWNyb3MgdG8gYWNjZXNzIHRoZSA2NDI2MCdzIHJlZ2lzdGVycworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKK2V4dGVybiBpbmxpbmUgdWludDMyX3QgZ3RfcmVhZCh1aW50MzJfdCBvZmZzKXsKKwlyZXR1cm4gKGluX2xlMzIoKHZvbGF0aWxlIHVpbnQgKikoZ3Q2NDI2MF9iYXNlICsgb2ZmcykpKTsKK30KK2V4dGVybiBpbmxpbmUgdm9pZCBndF93cml0ZSh1aW50MzJfdCBvZmZzLCB1aW50MzJfdCBkKXsKKwlvdXRfbGUzMigodm9sYXRpbGUgdWludCAqKShndDY0MjYwX2Jhc2UgKyBvZmZzKSwgZCk7Cit9CisKKyNpZiAwIC8qIHBhcmFub2lkIFNNUCB2ZXJzaW9uICovCitleHRlcm4gaW5saW5lIHZvaWQgZ3RfbW9kaWZ5KHUzMiBvZmZzLCB1MzIgZGF0YSwgdTMyIG1hc2spIFwKK3sKKwl1aW50MzJfdCByZWc7CisJc3Bpbl9sb2NrKCZndDY0MjYwX2xvY2spOworCXJlZyA9IGd0X3JlYWQob2ZmcykgJiAofm1hc2spOyAvKiB6ZXJvIGFueSBiaXRzIHdlIGNhcmUgYWJvdXQqLworCXJlZyB8PSBkYXRhICYgbWFzazsgLyogc2V0IGJpdHMgZnJvbSB0aGUgZGF0YSAqLworCWd0X3dyaXRlKG9mZnMsIHJlZyk7CisJc3Bpbl91bmxvY2soJmd0NjQyNjBfbG9jayk7Cit9CisjZWxzZQorZXh0ZXJuIGlubGluZSB2b2lkIGd0X21vZGlmeSh1aW50MzJfdCBvZmZzLCB1aW50MzJfdCBkYXRhLCB1aW50MzJfdCBtYXNrKQoreworCXVpbnQzMl90IHJlZzsKKwlyZWcgPSBndF9yZWFkKG9mZnMpICYgKH4obWFzaykpOyAvKiB6ZXJvIGFueSBiaXRzIHdlIGNhcmUgYWJvdXQqLworCXJlZyB8PSAoZGF0YSkgJiAobWFzayk7IC8qIHNldCBiaXRzIGZyb20gdGhlIGRhdGEgKi8KKwlndF93cml0ZShvZmZzLCByZWcpOworfQorI2VuZGlmCisjZGVmaW5lCWd0X3NldF9iaXRzKG9mZnMsIGJpdHMpIGd0X21vZGlmeShvZmZzLCB+MCwgYml0cykKKworI2RlZmluZQlndF9jbHJfYml0cyhvZmZzLCBiaXRzKSBndF9tb2RpZnkob2ZmcywgMCwgYml0cykKKworCisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICoJRnVuY3Rpb24gUHJvdG90eXBlcworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKK2ludCBndDY0MjYwX2ZpbmRfYnJpZGdlcyh1MzIgcGh5c19iYXNlX2FkZHIsIGd0NjQyNjBfYnJpZGdlX2luZm9fdCAqaW5mbywKKwlpbnQgKCgqbWFwX2lycSkoc3RydWN0IHBjaV9kZXYgKiwgdW5zaWduZWQgY2hhciwgdW5zaWduZWQgY2hhcikpKTsKK2ludCBndDY0MjYwX2JyaWRnZV9pbml0KGd0NjQyNjBfYnJpZGdlX2luZm9fdCAqaW5mbyk7CitpbnQgZ3Q2NDI2MF9jcHVfc2NzX3NldF93aW5kb3codTMyIHdpbmRvdywKKwkJCSAgICAgICB1MzIgYmFzZV9hZGRyLAorCQkJICAgICAgIHUzMiBzaXplKTsKK2ludCBndDY0MjYwX2NwdV9jc19zZXRfd2luZG93KHUzMiB3aW5kb3csCisJCQkgICAgICB1MzIgYmFzZV9hZGRyLAorCQkJICAgICAgdTMyIHNpemUpOworaW50IGd0NjQyNjBfY3B1X2Jvb3Rfc2V0X3dpbmRvdyh1MzIgYmFzZV9hZGRyLAorCQkJICAgICAgICB1MzIgc2l6ZSk7CitpbnQgZ3Q2NDI2MF9jcHVfc2V0X3BjaV9pb193aW5kb3codTMyIHBjaV9idXMsCisJCQkgICAgICAgICAgdTMyIGNwdV9iYXNlX2FkZHIsCisJCQkgICAgICAgICAgdTMyIHBjaV9iYXNlX2FkZHIsCisJCQkgICAgICAgICAgdTMyIHNpemUsCisJCQkgICAgICAgICAgdTMyIHN3YXApOworaW50IGd0NjQyNjBfY3B1X3NldF9wY2lfbWVtX3dpbmRvdyh1MzIgcGNpX2J1cywKKwkJCSAgICAgICAgICAgdTMyIHdpbmRvdywKKwkJCSAgICAgICAgICAgdTMyIGNwdV9iYXNlX2FkZHIsCisJCQkgICAgICAgICAgIHUzMiBwY2lfYmFzZV9hZGRyX2hpLAorCQkJICAgICAgICAgICB1MzIgcGNpX2Jhc2VfYWRkcl9sbywKKwkJCSAgICAgICAgICAgdTMyIHNpemUsCisJCQkgICAgICAgICAgIHUzMiBzd2FwXzY0Yml0KTsKK2ludCBndDY0MjYwX2NwdV9wcm90X3NldF93aW5kb3codTMyIHdpbmRvdywKKwkJCSAgICAgICAgdTMyIGJhc2VfYWRkciwKKwkJCSAgICAgICAgdTMyIHNpemUsCisJCQkgICAgICAgIHUzMiBhY2Nlc3NfYml0cyk7CitpbnQgZ3Q2NDI2MF9jcHVfc25vb3Bfc2V0X3dpbmRvdyh1MzIgd2luZG93LAorCQkJICAgICAgICAgdTMyIGJhc2VfYWRkciwKKwkJCSAgICAgICAgIHUzMiBzaXplLAorCQkJICAgICAgICAgdTMyICBzbm9vcF90eXBlKTsKK3ZvaWQgZ3Q2NDI2MF9jcHVfZGlzYWJsZV9hbGxfd2luZG93cyh2b2lkKTsKK2ludCBndDY0MjYwX3BjaV9iYXJfZW5hYmxlKHUzMiBwY2lfYnVzLCB1MzIgZW5hYmxlX2JpdHMpOworaW50IGd0NjQyNjBfcGNpX3NsYXZlX3Njc19zZXRfd2luZG93KHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSwKKwkJCQkgICAgIHUzMiB3aW5kb3csCisJCQkJICAgICB1MzIgcGNpX2Jhc2VfYWRkciwKKwkJCQkgICAgIHUzMiBjcHVfYmFzZV9hZGRyLAorCQkJCSAgICAgdTMyIHNpemUpOworaW50IGd0NjQyNjBfcGNpX3NsYXZlX2NzX3NldF93aW5kb3coc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlLAorCQkJCSAgICB1MzIgd2luZG93LAorCQkJCSAgICB1MzIgcGNpX2Jhc2VfYWRkciwKKwkJCQkgICAgdTMyIGNwdV9iYXNlX2FkZHIsCisJCQkJICAgIHUzMiBzaXplKTsKK2ludCBndDY0MjYwX3BjaV9zbGF2ZV9ib290X3NldF93aW5kb3coc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlLAorCQkJCSAgICAgIHUzMiBwY2lfYmFzZV9hZGRyLAorCQkJCSAgICAgIHUzMiBjcHVfYmFzZV9hZGRyLAorCQkJCSAgICAgIHUzMiBzaXplKTsKK2ludCBndDY0MjYwX3BjaV9zbGF2ZV9wMnBfbWVtX3NldF93aW5kb3coc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlLAorCQkJCSAgICAgICAgIHUzMiB3aW5kb3csCisJCQkJICAgICAgICAgdTMyIHBjaV9iYXNlX2FkZHIsCisJCQkJICAgICAgICAgdTMyIG90aGVyX2J1c19iYXNlX2FkZHIsCisJCQkJICAgICAgICAgdTMyIHNpemUpOworaW50IGd0NjQyNjBfcGNpX3NsYXZlX3AycF9pb19zZXRfd2luZG93KHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSwKKwkJCQkgICAgICAgIHUzMiBwY2lfYmFzZV9hZGRyLAorCQkJCSAgICAgICAgdTMyIG90aGVyX2J1c19iYXNlX2FkZHIsCisJCQkJICAgICAgICB1MzIgc2l6ZSk7CitpbnQgZ3Q2NDI2MF9wY2lfc2xhdmVfZGFjX3Njc19zZXRfd2luZG93KHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSwKKwkJCQkgICAgICAgICB1MzIgd2luZG93LAorCQkJCSAgICAgICAgIHUzMiBwY2lfYmFzZV9hZGRyX2hpLAorCQkJCSAgICAgICAgIHUzMiBwY2lfYmFzZV9hZGRyX2xvLAorCQkJCSAgICAgICAgIHUzMiBjcHVfYmFzZV9hZGRyLAorCQkJCSAgICAgICAgIHUzMiBzaXplKTsKK2ludCBndDY0MjYwX3BjaV9zbGF2ZV9kYWNfY3Nfc2V0X3dpbmRvdyhzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UsCisJCQkJICAgICAgICB1MzIgd2luZG93LAorCQkJCSAgICAgICAgdTMyIHBjaV9iYXNlX2FkZHJfaGksCisJCQkJICAgICAgICB1MzIgcGNpX2Jhc2VfYWRkcl9sbywKKwkJCQkgICAgICAgIHUzMiBjcHVfYmFzZV9hZGRyLAorCQkJCSAgICAgICAgdTMyIHNpemUpOworaW50IGd0NjQyNjBfcGNpX3NsYXZlX2RhY19ib290X3NldF93aW5kb3coc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlLAorCQkJCSAgICAgICAgICB1MzIgcGNpX2Jhc2VfYWRkcl9oaSwKKwkJCQkgICAgICAgICAgdTMyIHBjaV9iYXNlX2FkZHJfbG8sCisJCQkJICAgICAgICAgIHUzMiBjcHVfYmFzZV9hZGRyLAorCQkJCSAgICAgICAgICB1MzIgc2l6ZSk7CitpbnQgZ3Q2NDI2MF9wY2lfc2xhdmVfZGFjX3AycF9tZW1fc2V0X3dpbmRvdyhzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UsCisJCQkJICAgICAgICAgICAgIHUzMiB3aW5kb3csCisJCQkJICAgICAgICAgICAgIHUzMiBwY2lfYmFzZV9hZGRyX2hpLAorCQkJCSAgICAgICAgICAgICB1MzIgcGNpX2Jhc2VfYWRkcl9sbywKKwkJCQkgICAgICAgICAgICAgdTMyIG90aGVyX2J1c19iYXNlX2FkZHIsCisJCQkJICAgICAgICAgICAgIHUzMiBzaXplKTsKK2ludCBndDY0MjYwX3BjaV9hY2NfY250bF9zZXRfd2luZG93KHUzMiBwY2lfYnVzLAorCQkJICAgICAgICAgICAgdTMyIHdpbmRvdywKKwkJCSAgICAgICAgICAgIHUzMiBiYXNlX2FkZHJfaGksCisJCQkgICAgICAgICAgICB1MzIgYmFzZV9hZGRyX2xvLAorCQkJICAgICAgICAgICAgdTMyIHNpemUsCisJCQkgICAgICAgICAgICB1MzIgZmVhdHVyZXMpOworaW50IGd0NjQyNjBfcGNpX3Nub29wX3NldF93aW5kb3codTMyIHBjaV9idXMsCisJCQkgICAgICAgICB1MzIgd2luZG93LAorCQkJICAgICAgICAgdTMyIGJhc2VfYWRkcl9oaSwKKwkJCSAgICAgICAgIHUzMiBiYXNlX2FkZHJfbG8sCisJCQkgICAgICAgICB1MzIgc2l6ZSwKKwkJCSAgICAgICAgIHUzMiBzbm9vcF90eXBlKTsKK2ludCBndDY0MjYwX3NldF9iYXNlKHUzMiBuZXdfYmFzZSk7CitpbnQgZ3Q2NDI2MF9nZXRfYmFzZSh1MzIgKmJhc2UpOworaW50IGd0NjQyNjBfcGNpX2V4Y2x1ZGVfZGV2aWNlKHU4IGJ1cywgdTggZGV2Zm4pOworCit2b2lkIGd0NjQyNjBfaW5pdF9pcnEodm9pZCk7CitpbnQgZ3Q2NDI2MF9nZXRfaXJxKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKwordm9pZCBndDY0MjYwX21wc2NfcHJvZ3Jlc3MoY2hhciAqcywgdW5zaWduZWQgc2hvcnQgaGV4KTsKKworI2VuZGlmIC8qIF9fQVNNUFBDX0dUNjQyNjBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL2d0NjQyNjBfZGVmcy5oIGIvaW5jbHVkZS9hc20tcHBjL2d0NjQyNjBfZGVmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmZmQwMWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGMvZ3Q2NDI2MF9kZWZzLmgKQEAgLTAsMCArMSwxMDEwIEBACisvKgorICogaW5jbHVkZS9hc20tcHBjL2d0NjQyNjBfZGVmcy5oCisgKgorICogUmVnaXN0ZXIgZGVmaW5pdGlvbnMgZm9yIHRoZSBNYXJ2ZWxsL0dhbGlsZW8gR1Q2NDI2MCBob3N0IGJyaWRnZS4KKyAqCisgKiBBdXRob3I6IE1hcmsgQS4gR3JlZXIgPG1ncmVlckBtdmlzdGEuY29tPgorICoKKyAqIDIwMDEgKGMpIE1vbnRhVmlzdGEsIFNvZnR3YXJlLCBJbmMuICBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtCisgKiBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3MKKyAqIG9yIGltcGxpZWQuCisgKi8KKyNpZm5kZWYgX19BU01QUENfR1Q2NDI2MF9ERUZTX0gKKyNkZWZpbmUgX19BU01QUENfR1Q2NDI2MF9ERUZTX0gKKworLyoKKyAqIERlZmluZSBhIG1hY3JvIHRvIHJlcHJlc2VudCB0aGUgc3VwcG9ydGVkIHZlcnNpb24gb2YgdGhlIDY0MjYwLgorICovCisjZGVmaW5lCUdUNjQyNjAJCQkweDAxCisjZGVmaW5lCUdUNjQyNjBBCQkweDEwCisKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKglDUFUgSW50ZXJmYWNlIFJlZ2lzdGVycworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKy8qIENQVSBwaHlzaWNhbCBhZGRyZXNzIG9mIDY0MjYwJ3MgcmVnaXN0ZXJzICovCisjZGVmaW5lIEdUNjQyNjBfSU5URVJOQUxfU1BBQ0VfREVDT0RFCQkJMHgwMDY4CisjZGVmaW5lIEdUNjQyNjBfSU5URVJOQUxfU1BBQ0VfU0laRQkJCTB4MTAwMDAKKyNkZWZpbmUgR1Q2NDI2MF9JTlRFUk5BTF9TUEFDRV9ERUZBVUxUX0FERFIJCTB4MTQwMDAwMDAKKworLyogQ1BVIE1lbW9yeSBDb250cm9sbGVyIFdpbmRvdyBSZWdpc3RlcnMgKDQgd2luZG93cykgKi8KKyNkZWZpbmUJR1Q2NDI2MF9DUFVfU0NTX0RFQ09ERV9XSU5ET1dTCQkJNAorCisjZGVmaW5lCUdUNjQyNjBfQ1BVX1NDU19ERUNPREVfMF9CT1QJCQkweDAwMDgKKyNkZWZpbmUJR1Q2NDI2MF9DUFVfU0NTX0RFQ09ERV8wX1RPUAkJCTB4MDAxMAorI2RlZmluZQlHVDY0MjYwX0NQVV9TQ1NfREVDT0RFXzFfQk9UCQkJMHgwMjA4CisjZGVmaW5lCUdUNjQyNjBfQ1BVX1NDU19ERUNPREVfMV9UT1AJCQkweDAyMTAKKyNkZWZpbmUJR1Q2NDI2MF9DUFVfU0NTX0RFQ09ERV8yX0JPVAkJCTB4MDAxOAorI2RlZmluZQlHVDY0MjYwX0NQVV9TQ1NfREVDT0RFXzJfVE9QCQkJMHgwMDIwCisjZGVmaW5lCUdUNjQyNjBfQ1BVX1NDU19ERUNPREVfM19CT1QJCQkweDAyMTgKKyNkZWZpbmUJR1Q2NDI2MF9DUFVfU0NTX0RFQ09ERV8zX1RPUAkJCTB4MDIyMAorCisvKiBDUFUgRGV2aWNlIENvbnRyb2xsZXIgV2luZG93IFJlZ2lzdGVycyAoNCB3aW5kb3dzKSAqLworI2RlZmluZQlHVDY0MjYwX0NQVV9DU19ERUNPREVfV0lORE9XUwkJCTQKKworI2RlZmluZQlHVDY0MjYwX0NQVV9DU19ERUNPREVfMF9CT1QJCQkweDAwMjgKKyNkZWZpbmUJR1Q2NDI2MF9DUFVfQ1NfREVDT0RFXzBfVE9QCQkJMHgwMDMwCisjZGVmaW5lCUdUNjQyNjBfQ1BVX0NTX0RFQ09ERV8xX0JPVAkJCTB4MDIyOAorI2RlZmluZQlHVDY0MjYwX0NQVV9DU19ERUNPREVfMV9UT1AJCQkweDAyMzAKKyNkZWZpbmUJR1Q2NDI2MF9DUFVfQ1NfREVDT0RFXzJfQk9UCQkJMHgwMjQ4CisjZGVmaW5lCUdUNjQyNjBfQ1BVX0NTX0RFQ09ERV8yX1RPUAkJCTB4MDI1MAorI2RlZmluZQlHVDY0MjYwX0NQVV9DU19ERUNPREVfM19CT1QJCQkweDAwMzgKKyNkZWZpbmUJR1Q2NDI2MF9DUFVfQ1NfREVDT0RFXzNfVE9QCQkJMHgwMDQwCisKKyNkZWZpbmUJR1Q2NDI2MF9DUFVfQk9PVF9DU19ERUNPREVfMF9CT1QJCTB4MDIzOAorI2RlZmluZQlHVDY0MjYwX0NQVV9CT09UX0NTX0RFQ09ERV8wX1RPUAkJMHgwMjQwCisKKy8qIENQVSBXaW5kb3dzIHRvIFBDSSBzcGFjZSAoMiBQQ0kgYnVzZXMgZWFjaCB3LyAxIEkvTyAmIDQgTUVNIHdpbmRvd3MpICovCisjZGVmaW5lCUdUNjQyNjBfUENJX0JVU0VTCQkJCTIKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfSU9fV0lORE9XU19QRVJfQlVTCQkJMQorI2RlZmluZQlHVDY0MjYwX1BDSV9NRU1fV0lORE9XU19QRVJfQlVTCQkJNAorCisjZGVmaW5lCUdUNjQyNjBfQ1BVX1BDSV9TV0FQX0JZVEUJCQkweDAwMDAwMDAwCisjZGVmaW5lCUdUNjQyNjBfQ1BVX1BDSV9TV0FQX05PTkUJCQkweDAxMDAwMDAwCisjZGVmaW5lCUdUNjQyNjBfQ1BVX1BDSV9TV0FQX0JZVEVfV09SRAkJCTB4MDIwMDAwMDAKKyNkZWZpbmUJR1Q2NDI2MF9DUFVfUENJX1NXQVBfV09SRAkJCTB4MDMwMDAwMDAKKyNkZWZpbmUJR1Q2NDI2MF9DUFVfUENJX1NXQVBfTUFTSwkJCTB4MDcwMDAwMDAKKworI2RlZmluZQlHVDY0MjYwX0NQVV9QQ0lfTUVNX1JFUTY0CQkJKDE8PDI3KQorCisjZGVmaW5lCUdUNjQyNjBfQ1BVX1BDSV8wX0lPX0RFQ09ERV9CT1QJCQkweDAwNDgKKyNkZWZpbmUJR1Q2NDI2MF9DUFVfUENJXzBfSU9fREVDT0RFX1RPUAkJCTB4MDA1MAorI2RlZmluZQlHVDY0MjYwX0NQVV9QQ0lfMF9NRU1fMF9ERUNPREVfQk9UCQkweDAwNTgKKyNkZWZpbmUJR1Q2NDI2MF9DUFVfUENJXzBfTUVNXzBfREVDT0RFX1RPUAkJMHgwMDYwCisjZGVmaW5lCUdUNjQyNjBfQ1BVX1BDSV8wX01FTV8xX0RFQ09ERV9CT1QJCTB4MDA4MAorI2RlZmluZQlHVDY0MjYwX0NQVV9QQ0lfMF9NRU1fMV9ERUNPREVfVE9QCQkweDAwODgKKyNkZWZpbmUJR1Q2NDI2MF9DUFVfUENJXzBfTUVNXzJfREVDT0RFX0JPVAkJMHgwMjU4CisjZGVmaW5lCUdUNjQyNjBfQ1BVX1BDSV8wX01FTV8yX0RFQ09ERV9UT1AJCTB4MDI2MAorI2RlZmluZQlHVDY0MjYwX0NQVV9QQ0lfMF9NRU1fM19ERUNPREVfQk9UCQkweDAyODAKKyNkZWZpbmUJR1Q2NDI2MF9DUFVfUENJXzBfTUVNXzNfREVDT0RFX1RPUAkJMHgwMjg4CisKKyNkZWZpbmUJR1Q2NDI2MF9DUFVfUENJXzBfSU9fUkVNQVAJCQkweDAwZjAKKyNkZWZpbmUJR1Q2NDI2MF9DUFVfUENJXzBfTUVNXzBfUkVNQVBfTE8JCTB4MDBmOAorI2RlZmluZQlHVDY0MjYwX0NQVV9QQ0lfMF9NRU1fMF9SRU1BUF9ISQkJMHgwMzIwCisjZGVmaW5lCUdUNjQyNjBfQ1BVX1BDSV8wX01FTV8xX1JFTUFQX0xPCQkweDAxMDAKKyNkZWZpbmUJR1Q2NDI2MF9DUFVfUENJXzBfTUVNXzFfUkVNQVBfSEkJCTB4MDMyOAorI2RlZmluZQlHVDY0MjYwX0NQVV9QQ0lfMF9NRU1fMl9SRU1BUF9MTwkJMHgwMmY4CisjZGVmaW5lCUdUNjQyNjBfQ1BVX1BDSV8wX01FTV8yX1JFTUFQX0hJCQkweDAzMzAKKyNkZWZpbmUJR1Q2NDI2MF9DUFVfUENJXzBfTUVNXzNfUkVNQVBfTE8JCTB4MDMwMAorI2RlZmluZQlHVDY0MjYwX0NQVV9QQ0lfMF9NRU1fM19SRU1BUF9ISQkJMHgwMzM4CisKKyNkZWZpbmUJR1Q2NDI2MF9DUFVfUENJXzFfSU9fREVDT0RFX0JPVAkJCTB4MDA5MAorI2RlZmluZQlHVDY0MjYwX0NQVV9QQ0lfMV9JT19ERUNPREVfVE9QCQkJMHgwMDk4CisjZGVmaW5lCUdUNjQyNjBfQ1BVX1BDSV8xX01FTV8wX0RFQ09ERV9CT1QJCTB4MDBhMAorI2RlZmluZQlHVDY0MjYwX0NQVV9QQ0lfMV9NRU1fMF9ERUNPREVfVE9QCQkweDAwYTgKKyNkZWZpbmUJR1Q2NDI2MF9DUFVfUENJXzFfTUVNXzFfREVDT0RFX0JPVAkJMHgwMGIwCisjZGVmaW5lCUdUNjQyNjBfQ1BVX1BDSV8xX01FTV8xX0RFQ09ERV9UT1AJCTB4MDBiOAorI2RlZmluZQlHVDY0MjYwX0NQVV9QQ0lfMV9NRU1fMl9ERUNPREVfQk9UCQkweDAyYTAKKyNkZWZpbmUJR1Q2NDI2MF9DUFVfUENJXzFfTUVNXzJfREVDT0RFX1RPUAkJMHgwMmE4CisjZGVmaW5lCUdUNjQyNjBfQ1BVX1BDSV8xX01FTV8zX0RFQ09ERV9CT1QJCTB4MDJiMAorI2RlZmluZQlHVDY0MjYwX0NQVV9QQ0lfMV9NRU1fM19ERUNPREVfVE9QCQkweDAyYjgKKworI2RlZmluZQlHVDY0MjYwX0NQVV9QQ0lfMV9JT19SRU1BUAkJCTB4MDEwOAorI2RlZmluZQlHVDY0MjYwX0NQVV9QQ0lfMV9NRU1fMF9SRU1BUF9MTwkJMHgwMTEwCisjZGVmaW5lCUdUNjQyNjBfQ1BVX1BDSV8xX01FTV8wX1JFTUFQX0hJCQkweDAzNDAKKyNkZWZpbmUJR1Q2NDI2MF9DUFVfUENJXzFfTUVNXzFfUkVNQVBfTE8JCTB4MDExOAorI2RlZmluZQlHVDY0MjYwX0NQVV9QQ0lfMV9NRU1fMV9SRU1BUF9ISQkJMHgwMzQ4CisjZGVmaW5lCUdUNjQyNjBfQ1BVX1BDSV8xX01FTV8yX1JFTUFQX0xPCQkweDAzMTAKKyNkZWZpbmUJR1Q2NDI2MF9DUFVfUENJXzFfTUVNXzJfUkVNQVBfSEkJCTB4MDM1MAorI2RlZmluZQlHVDY0MjYwX0NQVV9QQ0lfMV9NRU1fM19SRU1BUF9MTwkJMHgwMzE4CisjZGVmaW5lCUdUNjQyNjBfQ1BVX1BDSV8xX01FTV8zX1JFTUFQX0hJCQkweDAzNTgKKworLyogQ1BVIENvbnRyb2wgUmVnaXN0ZXJzICovCisjZGVmaW5lIEdUNjQyNjBfQ1BVX0NPTkZJRwkJCQkweDAwMDAKKyNkZWZpbmUgR1Q2NDI2MF9DUFVfTU9ERQkJCQkweDAxMjAKKyNkZWZpbmUgR1Q2NDI2MF9DUFVfTUFTVEVSX0NOVEwJCQkJMHgwMTYwCisjZGVmaW5lIEdUNjQyNjBfQ1BVX1hCQVJfQ05UTF9MTwkJCTB4MDE1MAorI2RlZmluZSBHVDY0MjYwX0NQVV9YQkFSX0NOVExfSEkJCQkweDAxNTgKKyNkZWZpbmUgR1Q2NDI2MF9DUFVfWEJBUl9UTwkJCQkweDAxNjgKKyNkZWZpbmUgR1Q2NDI2MF9DUFVfUlJfWEJBUl9DTlRMX0xPCQkJMHgwMTcwCisjZGVmaW5lIEdUNjQyNjBfQ1BVX1JSX1hCQVJfQ05UTF9ISQkJCTB4MDE3OAorCisvKiBDUFUgU3luYyBCYXJyaWVyIFJlZ2lzdGVycyAqLworI2RlZmluZSBHVDY0MjYwX0NQVV9TWU5DX0JBUlJJRVJfUENJXzAJCQkweDAwYzAKKyNkZWZpbmUgR1Q2NDI2MF9DUFVfU1lOQ19CQVJSSUVSX1BDSV8xCQkJMHgwMGM4CisKKy8qIENQVSBBY2Nlc3MgUHJvdGVjdGlvbiBSZWdpc3RlcnMgKi8KKyNkZWZpbmUJR1Q2NDI2MF9DUFVfUFJPVF9XSU5ET1dTCQkJOAorCisjZGVmaW5lCUdUNjQyNjBfQ1BVX1BST1RfQUNDUFJPVEVDVAkJCSgxPDwxNikKKyNkZWZpbmUJR1Q2NDI2MF9DUFVfUFJPVF9XUlBST1RFQ1QJCQkoMTw8MTcpCisjZGVmaW5lCUdUNjQyNjBfQ1BVX1BST1RfQ0FDSEVQUk9URUNUCQkJKDE8PDE4KQorCisjZGVmaW5lIEdUNjQyNjBfQ1BVX1BST1RfQkFTRV8wCQkJCTB4MDE4MAorI2RlZmluZSBHVDY0MjYwX0NQVV9QUk9UX1RPUF8wCQkJCTB4MDE4OAorI2RlZmluZSBHVDY0MjYwX0NQVV9QUk9UX0JBU0VfMQkJCQkweDAxOTAKKyNkZWZpbmUgR1Q2NDI2MF9DUFVfUFJPVF9UT1BfMQkJCQkweDAxOTgKKyNkZWZpbmUgR1Q2NDI2MF9DUFVfUFJPVF9CQVNFXzIJCQkJMHgwMWEwCisjZGVmaW5lIEdUNjQyNjBfQ1BVX1BST1RfVE9QXzIJCQkJMHgwMWE4CisjZGVmaW5lIEdUNjQyNjBfQ1BVX1BST1RfQkFTRV8zCQkJCTB4MDFiMAorI2RlZmluZSBHVDY0MjYwX0NQVV9QUk9UX1RPUF8zCQkJCTB4MDFiOAorI2RlZmluZSBHVDY0MjYwX0NQVV9QUk9UX0JBU0VfNAkJCQkweDAxYzAKKyNkZWZpbmUgR1Q2NDI2MF9DUFVfUFJPVF9UT1BfNAkJCQkweDAxYzgKKyNkZWZpbmUgR1Q2NDI2MF9DUFVfUFJPVF9CQVNFXzUJCQkJMHgwMWQwCisjZGVmaW5lIEdUNjQyNjBfQ1BVX1BST1RfVE9QXzUJCQkJMHgwMWQ4CisjZGVmaW5lIEdUNjQyNjBfQ1BVX1BST1RfQkFTRV82CQkJCTB4MDFlMAorI2RlZmluZSBHVDY0MjYwX0NQVV9QUk9UX1RPUF82CQkJCTB4MDFlOAorI2RlZmluZSBHVDY0MjYwX0NQVV9QUk9UX0JBU0VfNwkJCQkweDAxZjAKKyNkZWZpbmUgR1Q2NDI2MF9DUFVfUFJPVF9UT1BfNwkJCQkweDAxZjgKKworLyogQ1BVIFNub29wIENvbnRyb2wgUmVnaXN0ZXJzICovCisjZGVmaW5lCUdUNjQyNjBfQ1BVX1NOT09QX1dJTkRPV1MJCQk0CisKKyNkZWZpbmUJR1Q2NDI2MF9DUFVfU05PT1BfTk9ORQkJCQkweDAwMDAwMDAwCisjZGVmaW5lCUdUNjQyNjBfQ1BVX1NOT09QX1dUCQkJCTB4MDAwMTAwMDAKKyNkZWZpbmUJR1Q2NDI2MF9DUFVfU05PT1BfV0IJCQkJMHgwMDAyMDAwMAorI2RlZmluZQlHVDY0MjYwX0NQVV9TTk9PUF9NQVNLCQkJCTB4MDAwMzAwMDAKKyNkZWZpbmUJR1Q2NDI2MF9DUFVfU05PT1BfQUxMX0JJVFMJCQlHVDY0MjYwX0NQVV9TTk9PUF9NQVNLCisKKyNkZWZpbmUgR1Q2NDI2MF9DUFVfU05PT1BfQkFTRV8wCQkJMHgwMzgwCisjZGVmaW5lIEdUNjQyNjBfQ1BVX1NOT09QX1RPUF8wCQkJCTB4MDM4OAorI2RlZmluZSBHVDY0MjYwX0NQVV9TTk9PUF9CQVNFXzEJCQkweDAzOTAKKyNkZWZpbmUgR1Q2NDI2MF9DUFVfU05PT1BfVE9QXzEJCQkJMHgwMzk4CisjZGVmaW5lIEdUNjQyNjBfQ1BVX1NOT09QX0JBU0VfMgkJCTB4MDNhMAorI2RlZmluZSBHVDY0MjYwX0NQVV9TTk9PUF9UT1BfMgkJCQkweDAzYTgKKyNkZWZpbmUgR1Q2NDI2MF9DUFVfU05PT1BfQkFTRV8zCQkJMHgwM2IwCisjZGVmaW5lIEdUNjQyNjBfQ1BVX1NOT09QX1RPUF8zCQkJCTB4MDNiOAorCisvKiBDUFUgRXJyb3IgUmVwb3J0IFJlZ2lzdGVycyAqLworI2RlZmluZSBHVDY0MjYwX0NQVV9FUlJfQUREUl9MTwkJCQkweDAwNzAKKyNkZWZpbmUgR1Q2NDI2MF9DUFVfRVJSX0FERFJfSEkJCQkJMHgwMDc4CisjZGVmaW5lIEdUNjQyNjBfQ1BVX0VSUl9EQVRBX0xPCQkJCTB4MDEyOAorI2RlZmluZSBHVDY0MjYwX0NQVV9FUlJfREFUQV9ISQkJCQkweDAxMzAKKyNkZWZpbmUgR1Q2NDI2MF9DUFVfRVJSX1BBUklUWQkJCQkweDAxMzgKKyNkZWZpbmUgR1Q2NDI2MF9DUFVfRVJSX0NBVVNFCQkJCTB4MDE0MAorI2RlZmluZSBHVDY0MjYwX0NQVV9FUlJfTUFTSwkJCQkweDAxNDgKKworCisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICoJU0RSQU0gQ290bnJvbGxlciBSZWdpc3RlcnMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisvKiBTRFJBTSBDb25maWcgUmVnaXN0ZXJzICovCisjZGVmaW5lCUdUNjQyNjBfU0RSQU1fQ09ORklHCQkJCTB4MDQ0OAorI2RlZmluZQlHVDY0MjYwX1NEUkFNX09QRVJBVElPTl9NT0RFCQkJMHgwNDc0CisjZGVmaW5lCUdUNjQyNjBfU0RSQU1fQUREUl9DTlRMCQkJCTB4MDQ3YworI2RlZmluZQlHVDY0MjYwX1NEUkFNX1RJTUlOR19QQVJBTVMJCQkweDA0YjQKKyNkZWZpbmUJR1Q2NDI2MF9TRFJBTV9VTUFfQ05UTAkJCQkweDA0YTQKKyNkZWZpbmUJR1Q2NDI2MF9TRFJBTV9YQkFSX0NOVExfTE8JCQkweDA0YTgKKyNkZWZpbmUJR1Q2NDI2MF9TRFJBTV9YQkFSX0NOVExfSEkJCQkweDA0YWMKKyNkZWZpbmUJR1Q2NDI2MF9TRFJBTV9YQkFSX0NOVExfVE8JCQkweDA0YjAKKworLyogU0RSQU0gQmFua3MgUGFyYW1ldGVycyBSZWdpc3RlcnMgKi8KKyNkZWZpbmUJR1Q2NDI2MF9TRFJBTV9CQU5LX1BBUkFNU18wCQkJMHgwNDRjCisjZGVmaW5lCUdUNjQyNjBfU0RSQU1fQkFOS19QQVJBTVNfMQkJCTB4MDQ1MAorI2RlZmluZQlHVDY0MjYwX1NEUkFNX0JBTktfUEFSQU1TXzIJCQkweDA0NTQKKyNkZWZpbmUJR1Q2NDI2MF9TRFJBTV9CQU5LX1BBUkFNU18zCQkJMHgwNDU4CisKKy8qIFNEUkFNIEVycm9yIFJlcG9ydCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUJR1Q2NDI2MF9TRFJBTV9FUlJfREFUQV9MTwkJCTB4MDQ4NAorI2RlZmluZQlHVDY0MjYwX1NEUkFNX0VSUl9EQVRBX0hJCQkJMHgwNDgwCisjZGVmaW5lCUdUNjQyNjBfU0RSQU1fRVJSX0FERFIJCQkJMHgwNDkwCisjZGVmaW5lCUdUNjQyNjBfU0RSQU1fRVJSX0VDQ19SQ1ZECQkJMHgwNDg4CisjZGVmaW5lCUdUNjQyNjBfU0RSQU1fRVJSX0VDQ19DQUxDCQkJMHgwNDhjCisjZGVmaW5lCUdUNjQyNjBfU0RSQU1fRVJSX0VDQ19DTlRMCQkJMHgwNDk0CisjZGVmaW5lCUdUNjQyNjBfU0RSQU1fRVJSX0VDQ19FUlJfQ05UCQkJMHgwNDk4CisKKworLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqCURldmljZS9CT09UIENvdG5yb2xsZXIgUmVnaXN0ZXJzCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworLyogRGV2aWNlIENvbnRyb2wgUmVnaXN0ZXJzICovCisjZGVmaW5lCUdUNjQyNjBfREVWX0JBTktfUEFSQU1TXzAJCQkweDA0NWMKKyNkZWZpbmUJR1Q2NDI2MF9ERVZfQkFOS19QQVJBTVNfMQkJCTB4MDQ2MAorI2RlZmluZQlHVDY0MjYwX0RFVl9CQU5LX1BBUkFNU18yCQkJMHgwNDY0CisjZGVmaW5lCUdUNjQyNjBfREVWX0JBTktfUEFSQU1TXzMJCQkweDA0NjgKKyNkZWZpbmUJR1Q2NDI2MF9ERVZfQk9PVF9QQVJBTVMJCQkJMHgwNDZjCisjZGVmaW5lCUdUNjQyNjBfREVWX0lGX0NOVEwJCQkJMHgwNGMwCisjZGVmaW5lCUdUNjQyNjBfREVWX0lGX1hCQVJfQ05UTF9MTwkJCTB4MDRjOAorI2RlZmluZQlHVDY0MjYwX0RFVl9JRl9YQkFSX0NOVExfSEkJCQkweDA0Y2MKKyNkZWZpbmUJR1Q2NDI2MF9ERVZfSUZfWEJBUl9DTlRMX1RPCQkJMHgwNGM0CisKKy8qIERldmljZSBJbnRlcnJ1cHQgUmVnaXN0ZXJzICovCisjZGVmaW5lCUdUNjQyNjBfREVWX0lOVFJfQ0FVU0UJCQkJMHgwNGQwCisjZGVmaW5lCUdUNjQyNjBfREVWX0lOVFJfTUFTSwkJCQkweDA0ZDQKKyNkZWZpbmUJR1Q2NDI2MF9ERVZfSU5UUl9FUlJfQUREUgkJCTB4MDRkOAorCisKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKglQQ0kgQnJpZGdlIEludGVyZmFjZSBSZWdpc3RlcnMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisvKiBQQ0kgQ29uZmlndXJhdGlvbiBBY2Nlc3MgUmVnaXN0ZXJzICovCisjZGVmaW5lCUdUNjQyNjBfUENJXzBfQ09ORklHX0FERFIJCQkweDBjZjgKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMF9DT05GSUdfREFUQQkJCTB4MGNmYworI2RlZmluZQlHVDY0MjYwX1BDSV8wX0lBQ0sJCQkJMHgwYzM0CisKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMV9DT05GSUdfQUREUgkJCTB4MGM3OAorI2RlZmluZQlHVDY0MjYwX1BDSV8xX0NPTkZJR19EQVRBCQkJMHgwYzdjCisjZGVmaW5lCUdUNjQyNjBfUENJXzFfSUFDSwkJCQkweDBjYjQKKworLyogUENJIENvbnRyb2wgUmVnaXN0ZXJzICovCisjZGVmaW5lCUdUNjQyNjBfUENJXzBfQ01ECQkJCTB4MGMwMAorI2RlZmluZQlHVDY0MjYwX1BDSV8wX01PREUJCQkJMHgwZDAwCisjZGVmaW5lCUdUNjQyNjBfUENJXzBfVE9fUkVUUlkJCQkJMHgwYzA0CisjZGVmaW5lCUdUNjQyNjBfUENJXzBfUkRfQlVGX0RJU0NBUkRfVElNRVIJCTB4MGQwNAorI2RlZmluZQlHVDY0MjYwX1BDSV8wX01TSV9UUklHR0VSX1RJTUVSCQkJMHgwYzM4CisjZGVmaW5lCUdUNjQyNjBfUENJXzBfQVJCSVRFUl9DTlRMCQkJMHgxZDAwCisjZGVmaW5lCUdUNjQyNjBfUENJXzBfWEJBUl9DTlRMX0xPCQkJMHgxZDA4CisjZGVmaW5lCUdUNjQyNjBfUENJXzBfWEJBUl9DTlRMX0hJCQkJMHgxZDBjCisjZGVmaW5lCUdUNjQyNjBfUENJXzBfWEJBUl9DTlRMX1RPCQkJMHgxZDA0CisjZGVmaW5lCUdUNjQyNjBfUENJXzBfUkRfUkVTUF9YQkFSX0NOVExfTE8JCTB4MWQxOAorI2RlZmluZQlHVDY0MjYwX1BDSV8wX1JEX1JFU1BfWEJBUl9DTlRMX0hJCQkweDFkMWMKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMF9TWU5DX0JBUlJJRVIJCQkweDFkMTAKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMF9QMlBfQ09ORklHCQkJMHgxZDE0CisjZGVmaW5lCUdUNjQyNjBfUENJXzBfUDJQX1NXQVBfQ05UTAkJCTB4MWQ1NAorCisjZGVmaW5lCUdUNjQyNjBfUENJXzFfQ01ECQkJCTB4MGM4MAorI2RlZmluZQlHVDY0MjYwX1BDSV8xX01PREUJCQkJMHgwZDgwCisjZGVmaW5lCUdUNjQyNjBfUENJXzFfVE9fUkVUUlkJCQkJMHgwYzg0CisjZGVmaW5lCUdUNjQyNjBfUENJXzFfUkRfQlVGX0RJU0NBUkRfVElNRVIJCTB4MGQ4NAorI2RlZmluZQlHVDY0MjYwX1BDSV8xX01TSV9UUklHR0VSX1RJTUVSCQkJMHgwY2I4CisjZGVmaW5lCUdUNjQyNjBfUENJXzFfQVJCSVRFUl9DTlRMCQkJMHgxZDgwCisjZGVmaW5lCUdUNjQyNjBfUENJXzFfWEJBUl9DTlRMX0xPCQkJMHgxZDg4CisjZGVmaW5lCUdUNjQyNjBfUENJXzFfWEJBUl9DTlRMX0hJCQkJMHgxZDhjCisjZGVmaW5lCUdUNjQyNjBfUENJXzFfWEJBUl9DTlRMX1RPCQkJMHgxZDg0CisjZGVmaW5lCUdUNjQyNjBfUENJXzFfUkRfUkVTUF9YQkFSX0NOVExfTE8JCTB4MWQ5OAorI2RlZmluZQlHVDY0MjYwX1BDSV8xX1JEX1JFU1BfWEJBUl9DTlRMX0hJCQkweDFkOWMKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMV9TWU5DX0JBUlJJRVIJCQkweDFkOTAKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMV9QMlBfQ09ORklHCQkJMHgxZDk0CisjZGVmaW5lCUdUNjQyNjBfUENJXzFfUDJQX1NXQVBfQ05UTAkJCTB4MWRkNAorCisvKiBQQ0kgQWNjZXNzIENvbnRyb2wgUmVnaW9ucyBSZWdpc3RlcnMgKi8KKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfQUNDX0NOVExfV0lORE9XUwkJCTgKKworI2RlZmluZQlHVDY0MjYwX1BDSV9BQ0NfQ05UTF9QUkVGRVRDSEVOCQkJKDE8PDEyKQorI2RlZmluZQlHVDY0MjYwX1BDSV9BQ0NfQ05UTF9EUkVBREVOCQkJKDE8PDEzKQorI2RlZmluZQlHVDY0MjYwX1BDSV9BQ0NfQ05UTF9SRFBSRUZFVENICQkJKDE8PDE2KQorI2RlZmluZQlHVDY0MjYwX1BDSV9BQ0NfQ05UTF9SRExJTkVQUkVGRVRDSAkJKDE8PDE3KQorI2RlZmluZQlHVDY0MjYwX1BDSV9BQ0NfQ05UTF9SRE1VTFBSRUZFVENICQkoMTw8MTgpCisjZGVmaW5lCUdUNjQyNjBfUENJX0FDQ19DTlRMX01CVVJTVF80X1dPUkRTCQkweDAwMDAwMDAwCisjZGVmaW5lCUdUNjQyNjBfUENJX0FDQ19DTlRMX01CVVJTVF84X1dPUkRTCQkweDAwMTAwMDAwCisjZGVmaW5lCUdUNjQyNjBfUENJX0FDQ19DTlRMX01CVVJTVF8xNl9XT1JEUwkJMHgwMDIwMDAwMAorI2RlZmluZQlHVDY0MjYwX1BDSV9BQ0NfQ05UTF9NQlVSU1RfTUFTSwkJMHgwMDMwMDAwMAorI2RlZmluZQlHVDY0MjYwX1BDSV9BQ0NfQ05UTF9TV0FQX0JZVEUJCQkweDAwMDAwMDAwCisjZGVmaW5lCUdUNjQyNjBfUENJX0FDQ19DTlRMX1NXQVBfTk9ORQkJCTB4MDEwMDAwMDAKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfQUNDX0NOVExfU1dBUF9CWVRFX1dPUkQJCTB4MDIwMDAwMDAKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfQUNDX0NOVExfU1dBUF9XT1JECQkJMHgwMzAwMDAwMAorI2RlZmluZQlHVDY0MjYwX1BDSV9BQ0NfQ05UTF9TV0FQX01BU0sJCQkweDAzMDAwMDAwCisjZGVmaW5lCUdUNjQyNjBfUENJX0FDQ19DTlRMX0FDQ1BST1QJCQkoMTw8MjgpCisjZGVmaW5lCUdUNjQyNjBfUENJX0FDQ19DTlRMX1dSUFJPVAkJCSgxPDwyOSkKKworI2RlZmluZQlHVDY0MjYwX1BDSV9BQ0NfQ05UTF9BTExfQklUUwkoR1Q2NDI2MF9QQ0lfQUNDX0NOVExfUFJFRkVUQ0hFTiB8ICAgIFwKKwkJCQkJIEdUNjQyNjBfUENJX0FDQ19DTlRMX0RSRUFERU4gfCAgICAgICBcCisJCQkJCSBHVDY0MjYwX1BDSV9BQ0NfQ05UTF9SRFBSRUZFVENIIHwgICAgXAorCQkJCQkgR1Q2NDI2MF9QQ0lfQUNDX0NOVExfUkRMSU5FUFJFRkVUQ0ggfFwKKwkJCQkJIEdUNjQyNjBfUENJX0FDQ19DTlRMX1JETVVMUFJFRkVUQ0ggfCBcCisJCQkJCSBHVDY0MjYwX1BDSV9BQ0NfQ05UTF9NQlVSU1RfTUFTSyB8ICAgXAorCQkJCQkgR1Q2NDI2MF9QQ0lfQUNDX0NOVExfU1dBUF9NQVNLIHwgICAgIFwKKwkJCQkJIEdUNjQyNjBfUENJX0FDQ19DTlRMX0FDQ1BST1R8ICAgICAgICBcCisJCQkJCSBHVDY0MjYwX1BDSV9BQ0NfQ05UTF9XUlBST1QpCisKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMF9BQ0NfQ05UTF8wX0JBU0VfTE8JCTB4MWUwMAorI2RlZmluZQlHVDY0MjYwX1BDSV8wX0FDQ19DTlRMXzBfQkFTRV9ISQkJMHgxZTA0CisjZGVmaW5lCUdUNjQyNjBfUENJXzBfQUNDX0NOVExfMF9UT1AJCQkweDFlMDgKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMF9BQ0NfQ05UTF8xX0JBU0VfTE8JCTB4MWUxMAorI2RlZmluZQlHVDY0MjYwX1BDSV8wX0FDQ19DTlRMXzFfQkFTRV9ISQkJMHgxZTE0CisjZGVmaW5lCUdUNjQyNjBfUENJXzBfQUNDX0NOVExfMV9UT1AJCQkweDFlMTgKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMF9BQ0NfQ05UTF8yX0JBU0VfTE8JCTB4MWUyMAorI2RlZmluZQlHVDY0MjYwX1BDSV8wX0FDQ19DTlRMXzJfQkFTRV9ISQkJMHgxZTI0CisjZGVmaW5lCUdUNjQyNjBfUENJXzBfQUNDX0NOVExfMl9UT1AJCQkweDFlMjgKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMF9BQ0NfQ05UTF8zX0JBU0VfTE8JCTB4MWUzMAorI2RlZmluZQlHVDY0MjYwX1BDSV8wX0FDQ19DTlRMXzNfQkFTRV9ISQkJMHgxZTM0CisjZGVmaW5lCUdUNjQyNjBfUENJXzBfQUNDX0NOVExfM19UT1AJCQkweDFlMzgKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMF9BQ0NfQ05UTF80X0JBU0VfTE8JCTB4MWU0MAorI2RlZmluZQlHVDY0MjYwX1BDSV8wX0FDQ19DTlRMXzRfQkFTRV9ISQkJMHgxZTQ0CisjZGVmaW5lCUdUNjQyNjBfUENJXzBfQUNDX0NOVExfNF9UT1AJCQkweDFlNDgKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMF9BQ0NfQ05UTF81X0JBU0VfTE8JCTB4MWU1MAorI2RlZmluZQlHVDY0MjYwX1BDSV8wX0FDQ19DTlRMXzVfQkFTRV9ISQkJMHgxZTU0CisjZGVmaW5lCUdUNjQyNjBfUENJXzBfQUNDX0NOVExfNV9UT1AJCQkweDFlNTgKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMF9BQ0NfQ05UTF82X0JBU0VfTE8JCTB4MWU2MAorI2RlZmluZQlHVDY0MjYwX1BDSV8wX0FDQ19DTlRMXzZfQkFTRV9ISQkJMHgxZTY0CisjZGVmaW5lCUdUNjQyNjBfUENJXzBfQUNDX0NOVExfNl9UT1AJCQkweDFlNjgKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMF9BQ0NfQ05UTF83X0JBU0VfTE8JCTB4MWU3MAorI2RlZmluZQlHVDY0MjYwX1BDSV8wX0FDQ19DTlRMXzdfQkFTRV9ISQkJMHgxZTc0CisjZGVmaW5lCUdUNjQyNjBfUENJXzBfQUNDX0NOVExfN19UT1AJCQkweDFlNzgKKworI2RlZmluZQlHVDY0MjYwX1BDSV8xX0FDQ19DTlRMXzBfQkFTRV9MTwkJMHgxZTgwCisjZGVmaW5lCUdUNjQyNjBfUENJXzFfQUNDX0NOVExfMF9CQVNFX0hJCQkweDFlODQKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMV9BQ0NfQ05UTF8wX1RPUAkJCTB4MWU4OAorI2RlZmluZQlHVDY0MjYwX1BDSV8xX0FDQ19DTlRMXzFfQkFTRV9MTwkJMHgxZTkwCisjZGVmaW5lCUdUNjQyNjBfUENJXzFfQUNDX0NOVExfMV9CQVNFX0hJCQkweDFlOTQKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMV9BQ0NfQ05UTF8xX1RPUAkJCTB4MWU5OAorI2RlZmluZQlHVDY0MjYwX1BDSV8xX0FDQ19DTlRMXzJfQkFTRV9MTwkJMHgxZWEwCisjZGVmaW5lCUdUNjQyNjBfUENJXzFfQUNDX0NOVExfMl9CQVNFX0hJCQkweDFlYTQKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMV9BQ0NfQ05UTF8yX1RPUAkJCTB4MWVhOAorI2RlZmluZQlHVDY0MjYwX1BDSV8xX0FDQ19DTlRMXzNfQkFTRV9MTwkJMHgxZWIwCisjZGVmaW5lCUdUNjQyNjBfUENJXzFfQUNDX0NOVExfM19CQVNFX0hJCQkweDFlYjQKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMV9BQ0NfQ05UTF8zX1RPUAkJCTB4MWViOAorI2RlZmluZQlHVDY0MjYwX1BDSV8xX0FDQ19DTlRMXzRfQkFTRV9MTwkJMHgxZWMwCisjZGVmaW5lCUdUNjQyNjBfUENJXzFfQUNDX0NOVExfNF9CQVNFX0hJCQkweDFlYzQKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMV9BQ0NfQ05UTF80X1RPUAkJCTB4MWVjOAorI2RlZmluZQlHVDY0MjYwX1BDSV8xX0FDQ19DTlRMXzVfQkFTRV9MTwkJMHgxZWQwCisjZGVmaW5lCUdUNjQyNjBfUENJXzFfQUNDX0NOVExfNV9CQVNFX0hJCQkweDFlZDQKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMV9BQ0NfQ05UTF81X1RPUAkJCTB4MWVkOAorI2RlZmluZQlHVDY0MjYwX1BDSV8xX0FDQ19DTlRMXzZfQkFTRV9MTwkJMHgxZWUwCisjZGVmaW5lCUdUNjQyNjBfUENJXzFfQUNDX0NOVExfNl9CQVNFX0hJCQkweDFlZTQKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMV9BQ0NfQ05UTF82X1RPUAkJCTB4MWVlOAorI2RlZmluZQlHVDY0MjYwX1BDSV8xX0FDQ19DTlRMXzdfQkFTRV9MTwkJMHgxZWYwCisjZGVmaW5lCUdUNjQyNjBfUENJXzFfQUNDX0NOVExfN19CQVNFX0hJCQkweDFlZjQKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMV9BQ0NfQ05UTF83X1RPUAkJCTB4MWVmOAorCisvKiBQQ0kgU25vb3AgQ29udHJvbCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfU05PT1BfV0lORE9XUwkJCTQKKworI2RlZmluZQlHVDY0MjYwX1BDSV9TTk9PUF9OT05FCQkJCTB4MDAwMDAwMDAKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfU05PT1BfV1QJCQkJMHgwMDAwMTAwMAorI2RlZmluZQlHVDY0MjYwX1BDSV9TTk9PUF9XQgkJCQkweDAwMDAyMDAwCisKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMF9TTk9PUF8wX0JBU0VfTE8JCQkweDFmMDAKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMF9TTk9PUF8wX0JBU0VfSEkJCQkweDFmMDQKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMF9TTk9PUF8wX1RPUAkJCTB4MWYwOAorI2RlZmluZQlHVDY0MjYwX1BDSV8wX1NOT09QXzFfQkFTRV9MTwkJCTB4MWYxMAorI2RlZmluZQlHVDY0MjYwX1BDSV8wX1NOT09QXzFfQkFTRV9ISQkJCTB4MWYxNAorI2RlZmluZQlHVDY0MjYwX1BDSV8wX1NOT09QXzFfVE9QCQkJMHgxZjE4CisjZGVmaW5lCUdUNjQyNjBfUENJXzBfU05PT1BfMl9CQVNFX0xPCQkJMHgxZjIwCisjZGVmaW5lCUdUNjQyNjBfUENJXzBfU05PT1BfMl9CQVNFX0hJCQkJMHgxZjI0CisjZGVmaW5lCUdUNjQyNjBfUENJXzBfU05PT1BfMl9UT1AJCQkweDFmMjgKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMF9TTk9PUF8zX0JBU0VfTE8JCQkweDFmMzAKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMF9TTk9PUF8zX0JBU0VfSEkJCQkweDFmMzQKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMF9TTk9PUF8zX1RPUAkJCTB4MWYzOAorCisjZGVmaW5lCUdUNjQyNjBfUENJXzFfU05PT1BfMF9CQVNFX0xPCQkJMHgxZjgwCisjZGVmaW5lCUdUNjQyNjBfUENJXzFfU05PT1BfMF9CQVNFX0hJCQkJMHgxZjg0CisjZGVmaW5lCUdUNjQyNjBfUENJXzFfU05PT1BfMF9UT1AJCQkweDFmODgKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMV9TTk9PUF8xX0JBU0VfTE8JCQkweDFmOTAKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMV9TTk9PUF8xX0JBU0VfSEkJCQkweDFmOTQKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMV9TTk9PUF8xX1RPUAkJCTB4MWY5OAorI2RlZmluZQlHVDY0MjYwX1BDSV8xX1NOT09QXzJfQkFTRV9MTwkJCTB4MWZhMAorI2RlZmluZQlHVDY0MjYwX1BDSV8xX1NOT09QXzJfQkFTRV9ISQkJCTB4MWZhNAorI2RlZmluZQlHVDY0MjYwX1BDSV8xX1NOT09QXzJfVE9QCQkJMHgxZmE4CisjZGVmaW5lCUdUNjQyNjBfUENJXzFfU05PT1BfM19CQVNFX0xPCQkJMHgxZmIwCisjZGVmaW5lCUdUNjQyNjBfUENJXzFfU05PT1BfM19CQVNFX0hJCQkJMHgxZmI0CisjZGVmaW5lCUdUNjQyNjBfUENJXzFfU05PT1BfM19UT1AJCQkweDFmYjgKKworLyogUENJIEVycm9yIFJlcG9ydCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgR1Q2NDI2MF9QQ0lfMF9FUlJfU0VSUl9NQVNLCQkJMHgwYzI4CisjZGVmaW5lIEdUNjQyNjBfUENJXzBfRVJSX0FERFJfTE8JCQkweDFkNDAKKyNkZWZpbmUgR1Q2NDI2MF9QQ0lfMF9FUlJfQUREUl9ISQkJCTB4MWQ0NAorI2RlZmluZSBHVDY0MjYwX1BDSV8wX0VSUl9EQVRBX0xPCQkJMHgxZDQ4CisjZGVmaW5lIEdUNjQyNjBfUENJXzBfRVJSX0RBVEFfSEkJCQkweDFkNGMKKyNkZWZpbmUgR1Q2NDI2MF9QQ0lfMF9FUlJfQ01ECQkJCTB4MWQ1MAorI2RlZmluZSBHVDY0MjYwX1BDSV8wX0VSUl9DQVVTRQkJCQkweDFkNTgKKyNkZWZpbmUgR1Q2NDI2MF9QQ0lfMF9FUlJfTUFTSwkJCQkweDFkNWMKKworI2RlZmluZSBHVDY0MjYwX1BDSV8xX0VSUl9TRVJSX01BU0sJCQkweDBjYTgKKyNkZWZpbmUgR1Q2NDI2MF9QQ0lfMV9FUlJfQUREUl9MTwkJCTB4MWRjMAorI2RlZmluZSBHVDY0MjYwX1BDSV8xX0VSUl9BRERSX0hJCQkJMHgxZGM0CisjZGVmaW5lIEdUNjQyNjBfUENJXzFfRVJSX0RBVEFfTE8JCQkweDFkYzgKKyNkZWZpbmUgR1Q2NDI2MF9QQ0lfMV9FUlJfREFUQV9ISQkJCTB4MWRjYworI2RlZmluZSBHVDY0MjYwX1BDSV8xX0VSUl9DTUQJCQkJMHgxZGQwCisjZGVmaW5lIEdUNjQyNjBfUENJXzFfRVJSX0NBVVNFCQkJCTB4MWRkOAorI2RlZmluZSBHVDY0MjYwX1BDSV8xX0VSUl9NQVNLCQkJCTB4MWRkYworCisvKiBQQ0kgU2xhdmUgQWRkcmVzcyBEZWNvZGluZyBSZWdpc3RlcnMgKi8KKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfU0NTX1dJTkRPV1MJCQkJNAorI2RlZmluZQlHVDY0MjYwX1BDSV9DU19XSU5ET1dTCQkJCTQKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfQk9PVF9XSU5ET1dTCQkJMQorI2RlZmluZQlHVDY0MjYwX1BDSV9QMlBfTUVNX1dJTkRPV1MJCQkyCisjZGVmaW5lCUdUNjQyNjBfUENJX1AyUF9JT19XSU5ET1dTCQkJMQorI2RlZmluZQlHVDY0MjYwX1BDSV9EQUNfU0NTX1dJTkRPV1MJCQk0CisjZGVmaW5lCUdUNjQyNjBfUENJX0RBQ19DU19XSU5ET1dTCQkJNAorI2RlZmluZQlHVDY0MjYwX1BDSV9EQUNfQk9PVF9XSU5ET1dTCQkJMQorI2RlZmluZQlHVDY0MjYwX1BDSV9EQUNfUDJQX01FTV9XSU5ET1dTCQkJMgorCisjZGVmaW5lCUdUNjQyNjBfUENJXzBfU0xBVkVfU0NTXzBfU0laRQkJCTB4MGMwOAorI2RlZmluZQlHVDY0MjYwX1BDSV8wX1NMQVZFX1NDU18xX1NJWkUJCQkweDBkMDgKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMF9TTEFWRV9TQ1NfMl9TSVpFCQkJMHgwYzBjCisjZGVmaW5lCUdUNjQyNjBfUENJXzBfU0xBVkVfU0NTXzNfU0laRQkJCTB4MGQwYworI2RlZmluZQlHVDY0MjYwX1BDSV8wX1NMQVZFX0NTXzBfU0laRQkJCTB4MGMxMAorI2RlZmluZQlHVDY0MjYwX1BDSV8wX1NMQVZFX0NTXzFfU0laRQkJCTB4MGQxMAorI2RlZmluZQlHVDY0MjYwX1BDSV8wX1NMQVZFX0NTXzJfU0laRQkJCTB4MGQxOAorI2RlZmluZQlHVDY0MjYwX1BDSV8wX1NMQVZFX0NTXzNfU0laRQkJCTB4MGMxNAorI2RlZmluZQlHVDY0MjYwX1BDSV8wX1NMQVZFX0JPT1RfU0laRQkJCTB4MGQxNAorI2RlZmluZQlHVDY0MjYwX1BDSV8wX1NMQVZFX1AyUF9NRU1fMF9TSVpFCQkweDBkMWMKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMF9TTEFWRV9QMlBfTUVNXzFfU0laRQkJMHgwZDIwCisjZGVmaW5lCUdUNjQyNjBfUENJXzBfU0xBVkVfUDJQX0lPX1NJWkUJCQkweDBkMjQKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMF9TTEFWRV9DUFVfU0laRQkJCTB4MGQyOAorCisjZGVmaW5lCUdUNjQyNjBfUENJXzBfU0xBVkVfREFDX1NDU18wX1NJWkUJCTB4MGUwMAorI2RlZmluZQlHVDY0MjYwX1BDSV8wX1NMQVZFX0RBQ19TQ1NfMV9TSVpFCQkweDBlMDQKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMF9TTEFWRV9EQUNfU0NTXzJfU0laRQkJMHgwZTA4CisjZGVmaW5lCUdUNjQyNjBfUENJXzBfU0xBVkVfREFDX1NDU18zX1NJWkUJCTB4MGUwYworI2RlZmluZQlHVDY0MjYwX1BDSV8wX1NMQVZFX0RBQ19DU18wX1NJWkUJCTB4MGUxMAorI2RlZmluZQlHVDY0MjYwX1BDSV8wX1NMQVZFX0RBQ19DU18xX1NJWkUJCTB4MGUxNAorI2RlZmluZQlHVDY0MjYwX1BDSV8wX1NMQVZFX0RBQ19DU18yX1NJWkUJCTB4MGUxOAorI2RlZmluZQlHVDY0MjYwX1BDSV8wX1NMQVZFX0RBQ19DU18zX1NJWkUJCTB4MGUxYworI2RlZmluZQlHVDY0MjYwX1BDSV8wX1NMQVZFX0RBQ19CT09UX1NJWkUJCTB4MGUyMAorI2RlZmluZQlHVDY0MjYwX1BDSV8wX1NMQVZFX0RBQ19QMlBfTUVNXzBfU0laRQkJMHgwZTI0CisjZGVmaW5lCUdUNjQyNjBfUENJXzBfU0xBVkVfREFDX1AyUF9NRU1fMV9TSVpFCQkweDBlMjgKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMF9TTEFWRV9EQUNfQ1BVX1NJWkUJCTB4MGUyYworCisjZGVmaW5lCUdUNjQyNjBfUENJXzBfU0xBVkVfRVhQX1JPTV9TSVpFCQkweDBkMmMKKworI2RlZmluZQlHVDY0MjYwX1BDSV9TTEFWRV9CQVJfUkVHX0VOQUJMRVNfU0NTXzAJCSgxPDwwKQorI2RlZmluZQlHVDY0MjYwX1BDSV9TTEFWRV9CQVJfUkVHX0VOQUJMRVNfU0NTXzEJCSgxPDwxKQorI2RlZmluZQlHVDY0MjYwX1BDSV9TTEFWRV9CQVJfUkVHX0VOQUJMRVNfU0NTXzIJCSgxPDwyKQorI2RlZmluZQlHVDY0MjYwX1BDSV9TTEFWRV9CQVJfUkVHX0VOQUJMRVNfU0NTXzMJCSgxPDwzKQorI2RlZmluZQlHVDY0MjYwX1BDSV9TTEFWRV9CQVJfUkVHX0VOQUJMRVNfQ1NfMAkJKDE8PDQpCisjZGVmaW5lCUdUNjQyNjBfUENJX1NMQVZFX0JBUl9SRUdfRU5BQkxFU19DU18xCQkoMTw8NSkKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfU0xBVkVfQkFSX1JFR19FTkFCTEVTX0NTXzIJCSgxPDw2KQorI2RlZmluZQlHVDY0MjYwX1BDSV9TTEFWRV9CQVJfUkVHX0VOQUJMRVNfQ1NfMwkJKDE8PDcpCisjZGVmaW5lCUdUNjQyNjBfUENJX1NMQVZFX0JBUl9SRUdfRU5BQkxFU19CT09UCQkoMTw8OCkKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfU0xBVkVfQkFSX1JFR19FTkFCTEVTX1JFR19NRU0JKDE8PDkpCisjZGVmaW5lCUdUNjQyNjBfUENJX1NMQVZFX0JBUl9SRUdfRU5BQkxFU19SRUdfSU8JKDE8PDEwKQorI2RlZmluZQlHVDY0MjYwX1BDSV9TTEFWRV9CQVJfUkVHX0VOQUJMRVNfUDJQX01FTV8wCSgxPDwxMSkKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfU0xBVkVfQkFSX1JFR19FTkFCTEVTX1AyUF9NRU1fMQkoMTw8MTIpCisjZGVmaW5lCUdUNjQyNjBfUENJX1NMQVZFX0JBUl9SRUdfRU5BQkxFU19QMlBfSU8JKDE8PDEzKQorI2RlZmluZQlHVDY0MjYwX1BDSV9TTEFWRV9CQVJfUkVHX0VOQUJMRVNfQ1BVCQkoMTw8MTQpCisjZGVmaW5lCUdUNjQyNjBfUENJX1NMQVZFX0JBUl9SRUdfRU5BQkxFU19EQUNfU0NTXzAJKDE8PDE1KQorI2RlZmluZQlHVDY0MjYwX1BDSV9TTEFWRV9CQVJfUkVHX0VOQUJMRVNfREFDX1NDU18xCSgxPDwxNikKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfU0xBVkVfQkFSX1JFR19FTkFCTEVTX0RBQ19TQ1NfMgkoMTw8MTcpCisjZGVmaW5lCUdUNjQyNjBfUENJX1NMQVZFX0JBUl9SRUdfRU5BQkxFU19EQUNfU0NTXzMJKDE8PDE4KQorI2RlZmluZQlHVDY0MjYwX1BDSV9TTEFWRV9CQVJfUkVHX0VOQUJMRVNfREFDX0NTXzAJKDE8PDE5KQorI2RlZmluZQlHVDY0MjYwX1BDSV9TTEFWRV9CQVJfUkVHX0VOQUJMRVNfREFDX0NTXzEJKDE8PDIwKQorI2RlZmluZQlHVDY0MjYwX1BDSV9TTEFWRV9CQVJfUkVHX0VOQUJMRVNfREFDX0NTXzIJKDE8PDIxKQorI2RlZmluZQlHVDY0MjYwX1BDSV9TTEFWRV9CQVJfUkVHX0VOQUJMRVNfREFDX0NTXzMJKDE8PDIyKQorI2RlZmluZQlHVDY0MjYwX1BDSV9TTEFWRV9CQVJfUkVHX0VOQUJMRVNfREFDX0JPT1QJKDE8PDIzKQorI2RlZmluZQlHVDY0MjYwX1BDSV9TTEFWRV9CQVJfUkVHX0VOQUJMRVNfREFDX1AyUF9NRU1fMAkoMTw8MjQpCisjZGVmaW5lCUdUNjQyNjBfUENJX1NMQVZFX0JBUl9SRUdfRU5BQkxFU19EQUNfUDJQX01FTV8xCSgxPDwyNSkKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfU0xBVkVfQkFSX1JFR19FTkFCTEVTX0RBQ19DUFUJKDE8PDI2KQorCisjZGVmaW5lCUdUNjQyNjBfUENJXzBfU0xBVkVfQkFSX1JFR19FTkFCTEVTCQkweDBjM2MKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMF9TTEFWRV9TQ1NfMF9SRU1BUAkJCTB4MGM0OAorI2RlZmluZQlHVDY0MjYwX1BDSV8wX1NMQVZFX1NDU18xX1JFTUFQCQkJMHgwZDQ4CisjZGVmaW5lCUdUNjQyNjBfUENJXzBfU0xBVkVfU0NTXzJfUkVNQVAJCQkweDBjNGMKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMF9TTEFWRV9TQ1NfM19SRU1BUAkJCTB4MGQ0YworI2RlZmluZQlHVDY0MjYwX1BDSV8wX1NMQVZFX0NTXzBfUkVNQVAJCQkweDBjNTAKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMF9TTEFWRV9DU18xX1JFTUFQCQkJMHgwZDUwCisjZGVmaW5lCUdUNjQyNjBfUENJXzBfU0xBVkVfQ1NfMl9SRU1BUAkJCTB4MGQ1OAorI2RlZmluZQlHVDY0MjYwX1BDSV8wX1NMQVZFX0NTXzNfUkVNQVAJCQkweDBjNTQKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMF9TTEFWRV9CT09UX1JFTUFQCQkJMHgwZDU0CisjZGVmaW5lCUdUNjQyNjBfUENJXzBfU0xBVkVfUDJQX01FTV8wX1JFTUFQX0xPCQkweDBkNWMKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMF9TTEFWRV9QMlBfTUVNXzBfUkVNQVBfSEkJCTB4MGQ2MAorI2RlZmluZQlHVDY0MjYwX1BDSV8wX1NMQVZFX1AyUF9NRU1fMV9SRU1BUF9MTwkJMHgwZDY0CisjZGVmaW5lCUdUNjQyNjBfUENJXzBfU0xBVkVfUDJQX01FTV8xX1JFTUFQX0hJCQkweDBkNjgKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMF9TTEFWRV9QMlBfSU9fUkVNQVAJCTB4MGQ2YworI2RlZmluZQlHVDY0MjYwX1BDSV8wX1NMQVZFX0NQVV9SRU1BUAkJCTB4MGQ3MAorCisjZGVmaW5lCUdUNjQyNjBfUENJXzBfU0xBVkVfREFDX1NDU18wX1JFTUFQCQkweDBmMDAKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMF9TTEFWRV9EQUNfU0NTXzFfUkVNQVAJCTB4MGYwNAorI2RlZmluZQlHVDY0MjYwX1BDSV8wX1NMQVZFX0RBQ19TQ1NfMl9SRU1BUAkJMHgwZjA4CisjZGVmaW5lCUdUNjQyNjBfUENJXzBfU0xBVkVfREFDX1NDU18zX1JFTUFQCQkweDBmMGMKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMF9TTEFWRV9EQUNfQ1NfMF9SRU1BUAkJMHgwZjEwCisjZGVmaW5lCUdUNjQyNjBfUENJXzBfU0xBVkVfREFDX0NTXzFfUkVNQVAJCTB4MGYxNAorI2RlZmluZQlHVDY0MjYwX1BDSV8wX1NMQVZFX0RBQ19DU18yX1JFTUFQCQkweDBmMTgKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMF9TTEFWRV9EQUNfQ1NfM19SRU1BUAkJMHgwZjFjCisjZGVmaW5lCUdUNjQyNjBfUENJXzBfU0xBVkVfREFDX0JPT1RfUkVNQVAJCTB4MGYyMAorI2RlZmluZQlHVDY0MjYwX1BDSV8wX1NMQVZFX0RBQ19QMlBfTUVNXzBfUkVNQVBfTE8JMHgwZjI0CisjZGVmaW5lCUdUNjQyNjBfUENJXzBfU0xBVkVfREFDX1AyUF9NRU1fMF9SRU1BUF9ISQkweDBmMjgKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMF9TTEFWRV9EQUNfUDJQX01FTV8xX1JFTUFQX0xPCTB4MGYyYworI2RlZmluZQlHVDY0MjYwX1BDSV8wX1NMQVZFX0RBQ19QMlBfTUVNXzFfUkVNQVBfSEkJMHgwZjMwCisjZGVmaW5lCUdUNjQyNjBfUENJXzBfU0xBVkVfREFDX0NQVV9SRU1BUAkJMHgwZjM0CisKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMF9TTEFWRV9FWFBfUk9NX1JFTUFQCQkweDBmMzgKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMF9TTEFWRV9QQ0lfREVDT0RFX0NOVEwJCTB4MGQzYworCisjZGVmaW5lCUdUNjQyNjBfUENJXzFfU0xBVkVfU0NTXzBfU0laRQkJCTB4MGM4OAorI2RlZmluZQlHVDY0MjYwX1BDSV8xX1NMQVZFX1NDU18xX1NJWkUJCQkweDBkODgKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMV9TTEFWRV9TQ1NfMl9TSVpFCQkJMHgwYzhjCisjZGVmaW5lCUdUNjQyNjBfUENJXzFfU0xBVkVfU0NTXzNfU0laRQkJCTB4MGQ4YworI2RlZmluZQlHVDY0MjYwX1BDSV8xX1NMQVZFX0NTXzBfU0laRQkJCTB4MGM5MAorI2RlZmluZQlHVDY0MjYwX1BDSV8xX1NMQVZFX0NTXzFfU0laRQkJCTB4MGQ5MAorI2RlZmluZQlHVDY0MjYwX1BDSV8xX1NMQVZFX0NTXzJfU0laRQkJCTB4MGQ5OAorI2RlZmluZQlHVDY0MjYwX1BDSV8xX1NMQVZFX0NTXzNfU0laRQkJCTB4MGM5NAorI2RlZmluZQlHVDY0MjYwX1BDSV8xX1NMQVZFX0JPT1RfU0laRQkJCTB4MGQ5NAorI2RlZmluZQlHVDY0MjYwX1BDSV8xX1NMQVZFX1AyUF9NRU1fMF9TSVpFCQkweDBkOWMKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMV9TTEFWRV9QMlBfTUVNXzFfU0laRQkJMHgwZGEwCisjZGVmaW5lCUdUNjQyNjBfUENJXzFfU0xBVkVfUDJQX0lPX1NJWkUJCQkweDBkYTQKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMV9TTEFWRV9DUFVfU0laRQkJCTB4MGRhOAorCisjZGVmaW5lCUdUNjQyNjBfUENJXzFfU0xBVkVfREFDX1NDU18wX1NJWkUJCTB4MGU4MAorI2RlZmluZQlHVDY0MjYwX1BDSV8xX1NMQVZFX0RBQ19TQ1NfMV9TSVpFCQkweDBlODQKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMV9TTEFWRV9EQUNfU0NTXzJfU0laRQkJMHgwZTg4CisjZGVmaW5lCUdUNjQyNjBfUENJXzFfU0xBVkVfREFDX1NDU18zX1NJWkUJCTB4MGU4YworI2RlZmluZQlHVDY0MjYwX1BDSV8xX1NMQVZFX0RBQ19DU18wX1NJWkUJCTB4MGU5MAorI2RlZmluZQlHVDY0MjYwX1BDSV8xX1NMQVZFX0RBQ19DU18xX1NJWkUJCTB4MGU5NAorI2RlZmluZQlHVDY0MjYwX1BDSV8xX1NMQVZFX0RBQ19DU18yX1NJWkUJCTB4MGU5OAorI2RlZmluZQlHVDY0MjYwX1BDSV8xX1NMQVZFX0RBQ19DU18zX1NJWkUJCTB4MGU5YworI2RlZmluZQlHVDY0MjYwX1BDSV8xX1NMQVZFX0RBQ19CT09UX1NJWkUJCTB4MGVhMAorI2RlZmluZQlHVDY0MjYwX1BDSV8xX1NMQVZFX0RBQ19QMlBfTUVNXzBfU0laRQkJMHgwZWE0CisjZGVmaW5lCUdUNjQyNjBfUENJXzFfU0xBVkVfREFDX1AyUF9NRU1fMV9TSVpFCQkweDBlYTgKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMV9TTEFWRV9EQUNfQ1BVX1NJWkUJCTB4MGVhYworCisjZGVmaW5lCUdUNjQyNjBfUENJXzFfU0xBVkVfRVhQX1JPTV9TSVpFCQkweDBkYWMKKworI2RlZmluZQlHVDY0MjYwX1BDSV8xX1NMQVZFX0JBUl9SRUdfRU5BQkxFUwkJMHgwY2JjCisjZGVmaW5lCUdUNjQyNjBfUENJXzFfU0xBVkVfU0NTXzBfUkVNQVAJCQkweDBjYzgKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMV9TTEFWRV9TQ1NfMV9SRU1BUAkJCTB4MGRjOAorI2RlZmluZQlHVDY0MjYwX1BDSV8xX1NMQVZFX1NDU18yX1JFTUFQCQkJMHgwY2NjCisjZGVmaW5lCUdUNjQyNjBfUENJXzFfU0xBVkVfU0NTXzNfUkVNQVAJCQkweDBkY2MKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMV9TTEFWRV9DU18wX1JFTUFQCQkJMHgwY2QwCisjZGVmaW5lCUdUNjQyNjBfUENJXzFfU0xBVkVfQ1NfMV9SRU1BUAkJCTB4MGRkMAorI2RlZmluZQlHVDY0MjYwX1BDSV8xX1NMQVZFX0NTXzJfUkVNQVAJCQkweDBkZDgKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMV9TTEFWRV9DU18zX1JFTUFQCQkJMHgwY2Q0CisjZGVmaW5lCUdUNjQyNjBfUENJXzFfU0xBVkVfQk9PVF9SRU1BUAkJCTB4MGRkNAorI2RlZmluZQlHVDY0MjYwX1BDSV8xX1NMQVZFX1AyUF9NRU1fMF9SRU1BUF9MTwkJMHgwZGRjCisjZGVmaW5lCUdUNjQyNjBfUENJXzFfU0xBVkVfUDJQX01FTV8wX1JFTUFQX0hJCQkweDBkZTAKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMV9TTEFWRV9QMlBfTUVNXzFfUkVNQVBfTE8JCTB4MGRlNAorI2RlZmluZQlHVDY0MjYwX1BDSV8xX1NMQVZFX1AyUF9NRU1fMV9SRU1BUF9ISQkJMHgwZGU4CisjZGVmaW5lCUdUNjQyNjBfUENJXzFfU0xBVkVfUDJQX0lPX1JFTUFQCQkweDBkZWMKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMV9TTEFWRV9DUFVfUkVNQVAJCQkweDBkZjAKKworI2RlZmluZQlHVDY0MjYwX1BDSV8xX1NMQVZFX0RBQ19TQ1NfMF9SRU1BUAkJMHgwZjgwCisjZGVmaW5lCUdUNjQyNjBfUENJXzFfU0xBVkVfREFDX1NDU18xX1JFTUFQCQkweDBmODQKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMV9TTEFWRV9EQUNfU0NTXzJfUkVNQVAJCTB4MGY4OAorI2RlZmluZQlHVDY0MjYwX1BDSV8xX1NMQVZFX0RBQ19TQ1NfM19SRU1BUAkJMHgwZjhjCisjZGVmaW5lCUdUNjQyNjBfUENJXzFfU0xBVkVfREFDX0NTXzBfUkVNQVAJCTB4MGY5MAorI2RlZmluZQlHVDY0MjYwX1BDSV8xX1NMQVZFX0RBQ19DU18xX1JFTUFQCQkweDBmOTQKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMV9TTEFWRV9EQUNfQ1NfMl9SRU1BUAkJMHgwZjk4CisjZGVmaW5lCUdUNjQyNjBfUENJXzFfU0xBVkVfREFDX0NTXzNfUkVNQVAJCTB4MGY5YworI2RlZmluZQlHVDY0MjYwX1BDSV8xX1NMQVZFX0RBQ19CT09UX1JFTUFQCQkweDBmYTAKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMV9TTEFWRV9EQUNfUDJQX01FTV8wX1JFTUFQX0xPCTB4MGZhNAorI2RlZmluZQlHVDY0MjYwX1BDSV8xX1NMQVZFX0RBQ19QMlBfTUVNXzBfUkVNQVBfSEkJMHgwZmE4CisjZGVmaW5lCUdUNjQyNjBfUENJXzFfU0xBVkVfREFDX1AyUF9NRU1fMV9SRU1BUF9MTwkweDBmYWMKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfMV9TTEFWRV9EQUNfUDJQX01FTV8xX1JFTUFQX0hJCTB4MGZiMAorI2RlZmluZQlHVDY0MjYwX1BDSV8xX1NMQVZFX0RBQ19DUFVfUkVNQVAJCTB4MGZiNAorCisjZGVmaW5lCUdUNjQyNjBfUENJXzFfU0xBVkVfRVhQX1JPTV9SRU1BUAkJMHgwZmI4CisjZGVmaW5lCUdUNjQyNjBfUENJXzFfU0xBVkVfUENJX0RFQ09ERV9DTlRMCQkweDBkYmMKKworCisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICoJSTJPIENvbnRyb2xsZXIgSW50ZXJmYWNlIFJlZ2lzdGVycworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKy8qIEZJWE1FOiBmaWxsIGluICovCisKKworCisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICoJRE1BIENvbnRyb2xsZXIgSW50ZXJmYWNlIFJlZ2lzdGVycworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKy8qIEZJWE1FOiBmaWxsIGluICovCisKKworLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqCVRpbWVyL0NvdW50ZXIgSW50ZXJmYWNlIFJlZ2lzdGVycworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKy8qIEZJWE1FOiBmaWxsIGluICovCisKKworLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqCUNvbW11bmljYXRpb25zIENvbnRyb2xsZXIgKEVuZXQsIFNlcmlhbCwgZXRjLikgSW50ZXJmYWNlIFJlZ2lzdGVycworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKyNkZWZpbmUJR1Q2NDI2MF9FTkVUXzBfQ05UTF9MTwkJCQkweGYyMDAKKyNkZWZpbmUJR1Q2NDI2MF9FTkVUXzBfQ05UTF9ISQkJCQkweGYyMDQKKyNkZWZpbmUJR1Q2NDI2MF9FTkVUXzBfUlhfQlVGX1BDSV9BRERSX0hJCQkweGYyMDgKKyNkZWZpbmUJR1Q2NDI2MF9FTkVUXzBfVFhfQlVGX1BDSV9BRERSX0hJCQkweGYyMGMKKyNkZWZpbmUJR1Q2NDI2MF9FTkVUXzBfUlhfREVTQ19BRERSX0hJCQkJMHhmMjEwCisjZGVmaW5lCUdUNjQyNjBfRU5FVF8wX1RYX0RFU0NfQUREUl9ISQkJCTB4ZjIxNAorI2RlZmluZQlHVDY0MjYwX0VORVRfMF9IQVNIX1RBQl9QQ0lfQUREUl9ISQkJMHhmMjE4CisjZGVmaW5lCUdUNjQyNjBfRU5FVF8xX0NOVExfTE8JCQkJMHhmMjIwCisjZGVmaW5lCUdUNjQyNjBfRU5FVF8xX0NOVExfSEkJCQkJMHhmMjI0CisjZGVmaW5lCUdUNjQyNjBfRU5FVF8xX1JYX0JVRl9QQ0lfQUREUl9ISQkJMHhmMjI4CisjZGVmaW5lCUdUNjQyNjBfRU5FVF8xX1RYX0JVRl9QQ0lfQUREUl9ISQkJMHhmMjJjCisjZGVmaW5lCUdUNjQyNjBfRU5FVF8xX1JYX0RFU0NfQUREUl9ISQkJCTB4ZjIzMAorI2RlZmluZQlHVDY0MjYwX0VORVRfMV9UWF9ERVNDX0FERFJfSEkJCQkweGYyMzQKKyNkZWZpbmUJR1Q2NDI2MF9FTkVUXzFfSEFTSF9UQUJfUENJX0FERFJfSEkJCTB4ZjIzOAorI2RlZmluZQlHVDY0MjYwX0VORVRfMl9DTlRMX0xPCQkJCTB4ZjI0MAorI2RlZmluZQlHVDY0MjYwX0VORVRfMl9DTlRMX0hJCQkJCTB4ZjI0NAorI2RlZmluZQlHVDY0MjYwX0VORVRfMl9SWF9CVUZfUENJX0FERFJfSEkJCTB4ZjI0OAorI2RlZmluZQlHVDY0MjYwX0VORVRfMl9UWF9CVUZfUENJX0FERFJfSEkJCTB4ZjI0YworI2RlZmluZQlHVDY0MjYwX0VORVRfMl9SWF9ERVNDX0FERFJfSEkJCQkweGYyNTAKKyNkZWZpbmUJR1Q2NDI2MF9FTkVUXzJfVFhfREVTQ19BRERSX0hJCQkJMHhmMjU0CisjZGVmaW5lCUdUNjQyNjBfRU5FVF8yX0hBU0hfVEFCX1BDSV9BRERSX0hJCQkweGYyNTgKKworI2RlZmluZQlHVDY0MjYwX01QU0NfMF9DTlRMX0xPCQkJCTB4ZjI4MAorI2RlZmluZQlHVDY0MjYwX01QU0NfMF9DTlRMX0hJCQkJCTB4ZjI4NAorI2RlZmluZQlHVDY0MjYwX01QU0NfMF9SWF9CVUZfUENJX0FERFJfSEkJCTB4ZjI4OAorI2RlZmluZQlHVDY0MjYwX01QU0NfMF9UWF9CVUZfUENJX0FERFJfSEkJCTB4ZjI4YworI2RlZmluZQlHVDY0MjYwX01QU0NfMF9SWF9ERVNDX0FERFJfSEkJCQkweGYyOTAKKyNkZWZpbmUJR1Q2NDI2MF9NUFNDXzBfVFhfREVTQ19BRERSX0hJCQkJMHhmMjk0CisjZGVmaW5lCUdUNjQyNjBfTVBTQ18xX0NOVExfTE8JCQkJMHhmMmMwCisjZGVmaW5lCUdUNjQyNjBfTVBTQ18xX0NOVExfSEkJCQkJMHhmMmM0CisjZGVmaW5lCUdUNjQyNjBfTVBTQ18xX1JYX0JVRl9QQ0lfQUREUl9ISQkJMHhmMmM4CisjZGVmaW5lCUdUNjQyNjBfTVBTQ18xX1RYX0JVRl9QQ0lfQUREUl9ISQkJMHhmMmNjCisjZGVmaW5lCUdUNjQyNjBfTVBTQ18xX1JYX0RFU0NfQUREUl9ISQkJCTB4ZjJkMAorI2RlZmluZQlHVDY0MjYwX01QU0NfMV9UWF9ERVNDX0FERFJfSEkJCQkweGYyZDQKKworI2RlZmluZQlHVDY0MjYwX1NFUl9JTklUX1BDSV9BRERSX0hJCQkJMHhmMzIwCisjZGVmaW5lCUdUNjQyNjBfU0VSX0lOSVRfTEFTVF9EQVRBCQkJMHhmMzI0CisjZGVmaW5lCUdUNjQyNjBfU0VSX0lOSVRfQ09OVFJPTAkJCTB4ZjMyOAorI2RlZmluZQlHVDY0MjYwX1NFUl9JTklUX1NUQVRVUwkJCQkweGYzMmMKKworI2RlZmluZQlHVDY0MjYwX0NPTU1fQVJCSVRFUl9DTlRMCQkJMHhmMzAwCisjZGVmaW5lCUdUNjQyNjBfQ09NTV9DT05GSUcJCQkJMHhiNDBjCisjZGVmaW5lCUdUNjQyNjBfQ09NTV9YQkFSX1RPCQkJCTB4ZjMwNAorI2RlZmluZQlHVDY0MjYwX0NPTU1fSU5UUl9DQVVTRQkJCQkweGYzMTAKKyNkZWZpbmUJR1Q2NDI2MF9DT01NX0lOVFJfTUFTSwkJCQkweGYzMTQKKyNkZWZpbmUJR1Q2NDI2MF9DT01NX0VSUl9BRERSCQkJCTB4ZjMxOAorCisKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKglGYXN0IEV0aGVybmV0IENvbnRyb2xsZXIgSW50ZXJmYWNlIFJlZ2lzdGVycworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKyNkZWZpbmUJR1Q2NDI2MF9FTkVUX1BIWV9BRERSCQkJCTB4MjAwMAorI2RlZmluZQlHVDY0MjYwX0VORVRfRVNNSVIJCQkJMHgyMDEwCisKKyNkZWZpbmUJR1Q2NDI2MF9FTkVUX0UwUENSCQkJCTB4MjQwMAorI2RlZmluZQlHVDY0MjYwX0VORVRfRTBQQ1hSCQkJCTB4MjQwOAorI2RlZmluZQlHVDY0MjYwX0VORVRfRTBQQ01SCQkJCTB4MjQxMAorI2RlZmluZQlHVDY0MjYwX0VORVRfRTBQU1IJCQkJMHgyNDE4CisjZGVmaW5lCUdUNjQyNjBfRU5FVF9FMFNQUgkJCQkweDI0MjAKKyNkZWZpbmUJR1Q2NDI2MF9FTkVUX0UwSFRQUgkJCQkweDI0MjgKKyNkZWZpbmUJR1Q2NDI2MF9FTkVUX0UwRkNTQUwJCQkJMHgyNDMwCisjZGVmaW5lCUdUNjQyNjBfRU5FVF9FMEZDU0FICQkJCTB4MjQzOAorI2RlZmluZQlHVDY0MjYwX0VORVRfRTBTRENSCQkJCTB4MjQ0MAorI2RlZmluZQlHVDY0MjYwX0VORVRfRTBTRENNUgkJCQkweDI0NDgKKyNkZWZpbmUJR1Q2NDI2MF9FTkVUX0UwSUNSCQkJCTB4MjQ1MAorI2RlZmluZQlHVDY0MjYwX0VORVRfRTBJTVIJCQkJMHgyNDU4CisjZGVmaW5lCUdUNjQyNjBfRU5FVF9FMEZSRFAwCQkJCTB4MjQ4MAorI2RlZmluZQlHVDY0MjYwX0VORVRfRTBGUkRQMQkJCQkweDI0ODQKKyNkZWZpbmUJR1Q2NDI2MF9FTkVUX0UwRlJEUDIJCQkJMHgyNDg4CisjZGVmaW5lCUdUNjQyNjBfRU5FVF9FMEZSRFAzCQkJCTB4MjQ4YworI2RlZmluZQlHVDY0MjYwX0VORVRfRTBDUkRQMAkJCQkweDI0YTAKKyNkZWZpbmUJR1Q2NDI2MF9FTkVUX0UwQ1JEUDEJCQkJMHgyNGE0CisjZGVmaW5lCUdUNjQyNjBfRU5FVF9FMENSRFAyCQkJCTB4MjRhOAorI2RlZmluZQlHVDY0MjYwX0VORVRfRTBDUkRQMwkJCQkweDI0YWMKKyNkZWZpbmUJR1Q2NDI2MF9FTkVUX0UwQ1REUDAJCQkJMHgyNGUwCisjZGVmaW5lCUdUNjQyNjBfRU5FVF9FMENURFAxCQkJCTB4MjRlNAorI2RlZmluZQlHVDY0MjYwX0VORVRfMF9EU0NQMlAwTAkJCQkweDI0NjAKKyNkZWZpbmUJR1Q2NDI2MF9FTkVUXzBfRFNDUDJQMEgJCQkJMHgyNDY0CisjZGVmaW5lCUdUNjQyNjBfRU5FVF8wX0RTQ1AyUDFMCQkJCTB4MjQ2OAorI2RlZmluZQlHVDY0MjYwX0VORVRfMF9EU0NQMlAxSAkJCQkweDI0NmMKKyNkZWZpbmUJR1Q2NDI2MF9FTkVUXzBfVlBUMlAJCQkJMHgyNDcwCisjZGVmaW5lCUdUNjQyNjBfRU5FVF8wX01JQl9DVFJTCQkJCTB4MjUwMAorCisjZGVmaW5lCUdUNjQyNjBfRU5FVF9FMVBDUgkJCQkweDI4MDAKKyNkZWZpbmUJR1Q2NDI2MF9FTkVUX0UxUENYUgkJCQkweDI4MDgKKyNkZWZpbmUJR1Q2NDI2MF9FTkVUX0UxUENNUgkJCQkweDI4MTAKKyNkZWZpbmUJR1Q2NDI2MF9FTkVUX0UxUFNSCQkJCTB4MjgxOAorI2RlZmluZQlHVDY0MjYwX0VORVRfRTFTUFIJCQkJMHgyODIwCisjZGVmaW5lCUdUNjQyNjBfRU5FVF9FMUhUUFIJCQkJMHgyODI4CisjZGVmaW5lCUdUNjQyNjBfRU5FVF9FMUZDU0FMCQkJCTB4MjgzMAorI2RlZmluZQlHVDY0MjYwX0VORVRfRTFGQ1NBSAkJCQkweDI4MzgKKyNkZWZpbmUJR1Q2NDI2MF9FTkVUX0UxU0RDUgkJCQkweDI4NDAKKyNkZWZpbmUJR1Q2NDI2MF9FTkVUX0UxU0RDTVIJCQkJMHgyODQ4CisjZGVmaW5lCUdUNjQyNjBfRU5FVF9FMUlDUgkJCQkweDI4NTAKKyNkZWZpbmUJR1Q2NDI2MF9FTkVUX0UxSU1SCQkJCTB4Mjg1OAorI2RlZmluZQlHVDY0MjYwX0VORVRfRTFGUkRQMAkJCQkweDI4ODAKKyNkZWZpbmUJR1Q2NDI2MF9FTkVUX0UxRlJEUDEJCQkJMHgyODg0CisjZGVmaW5lCUdUNjQyNjBfRU5FVF9FMUZSRFAyCQkJCTB4Mjg4OAorI2RlZmluZQlHVDY0MjYwX0VORVRfRTFGUkRQMwkJCQkweDI4OGMKKyNkZWZpbmUJR1Q2NDI2MF9FTkVUX0UxQ1JEUDAJCQkJMHgyOGEwCisjZGVmaW5lCUdUNjQyNjBfRU5FVF9FMUNSRFAxCQkJCTB4MjhhNAorI2RlZmluZQlHVDY0MjYwX0VORVRfRTFDUkRQMgkJCQkweDI4YTgKKyNkZWZpbmUJR1Q2NDI2MF9FTkVUX0UxQ1JEUDMJCQkJMHgyOGFjCisjZGVmaW5lCUdUNjQyNjBfRU5FVF9FMUNURFAwCQkJCTB4MjhlMAorI2RlZmluZQlHVDY0MjYwX0VORVRfRTFDVERQMQkJCQkweDI4ZTQKKyNkZWZpbmUJR1Q2NDI2MF9FTkVUXzFfRFNDUDJQMEwJCQkJMHgyODYwCisjZGVmaW5lCUdUNjQyNjBfRU5FVF8xX0RTQ1AyUDBICQkJCTB4Mjg2NAorI2RlZmluZQlHVDY0MjYwX0VORVRfMV9EU0NQMlAxTAkJCQkweDI4NjgKKyNkZWZpbmUJR1Q2NDI2MF9FTkVUXzFfRFNDUDJQMUgJCQkJMHgyODZjCisjZGVmaW5lCUdUNjQyNjBfRU5FVF8xX1ZQVDJQCQkJCTB4Mjg3MAorI2RlZmluZQlHVDY0MjYwX0VORVRfMV9NSUJfQ1RSUwkJCQkweDI5MDAKKworI2RlZmluZQlHVDY0MjYwX0VORVRfRTJQQ1IJCQkJMHgyYzAwCisjZGVmaW5lCUdUNjQyNjBfRU5FVF9FMlBDWFIJCQkJMHgyYzA4CisjZGVmaW5lCUdUNjQyNjBfRU5FVF9FMlBDTVIJCQkJMHgyYzEwCisjZGVmaW5lCUdUNjQyNjBfRU5FVF9FMlBTUgkJCQkweDJjMTgKKyNkZWZpbmUJR1Q2NDI2MF9FTkVUX0UyU1BSCQkJCTB4MmMyMAorI2RlZmluZQlHVDY0MjYwX0VORVRfRTJIVFBSCQkJCTB4MmMyOAorI2RlZmluZQlHVDY0MjYwX0VORVRfRTJGQ1NBTAkJCQkweDJjMzAKKyNkZWZpbmUJR1Q2NDI2MF9FTkVUX0UyRkNTQUgJCQkJMHgyYzM4CisjZGVmaW5lCUdUNjQyNjBfRU5FVF9FMlNEQ1IJCQkJMHgyYzQwCisjZGVmaW5lCUdUNjQyNjBfRU5FVF9FMlNEQ01SCQkJCTB4MmM0OAorI2RlZmluZQlHVDY0MjYwX0VORVRfRTJJQ1IJCQkJMHgyYzUwCisjZGVmaW5lCUdUNjQyNjBfRU5FVF9FMklNUgkJCQkweDJjNTgKKyNkZWZpbmUJR1Q2NDI2MF9FTkVUX0UyRlJEUDAJCQkJMHgyYzgwCisjZGVmaW5lCUdUNjQyNjBfRU5FVF9FMkZSRFAxCQkJCTB4MmM4NAorI2RlZmluZQlHVDY0MjYwX0VORVRfRTJGUkRQMgkJCQkweDJjODgKKyNkZWZpbmUJR1Q2NDI2MF9FTkVUX0UyRlJEUDMJCQkJMHgyYzhjCisjZGVmaW5lCUdUNjQyNjBfRU5FVF9FMkNSRFAwCQkJCTB4MmNhMAorI2RlZmluZQlHVDY0MjYwX0VORVRfRTJDUkRQMQkJCQkweDJjYTQKKyNkZWZpbmUJR1Q2NDI2MF9FTkVUX0UyQ1JEUDIJCQkJMHgyY2E4CisjZGVmaW5lCUdUNjQyNjBfRU5FVF9FMkNSRFAzCQkJCTB4MmNhYworI2RlZmluZQlHVDY0MjYwX0VORVRfRTJDVERQMAkJCQkweDJjZTAKKyNkZWZpbmUJR1Q2NDI2MF9FTkVUX0UyQ1REUDEJCQkJMHgyY2U0CisjZGVmaW5lCUdUNjQyNjBfRU5FVF8yX0RTQ1AyUDBMCQkJCTB4MmM2MAorI2RlZmluZQlHVDY0MjYwX0VORVRfMl9EU0NQMlAwSAkJCQkweDJjNjQKKyNkZWZpbmUJR1Q2NDI2MF9FTkVUXzJfRFNDUDJQMUwJCQkJMHgyYzY4CisjZGVmaW5lCUdUNjQyNjBfRU5FVF8yX0RTQ1AyUDFICQkJCTB4MmM2YworI2RlZmluZQlHVDY0MjYwX0VORVRfMl9WUFQyUAkJCQkweDJjNzAKKyNkZWZpbmUJR1Q2NDI2MF9FTkVUXzJfTUlCX0NUUlMJCQkJMHgyZDAwCisKKworLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqCU11bHRpLVByb3RvY29sIFNlcmlhbCBDb250cm9sbGVyIEludGVyZmFjZSBSZWdpc3RlcnMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisvKiBTaWduYWwgUm91dGluZyAqLworI2RlZmluZQlHVDY0MjYwX01QU0NfTVJSCQkJCTB4YjQwMAorI2RlZmluZQlHVDY0MjYwX01QU0NfUkNSUgkJCQkweGI0MDQKKyNkZWZpbmUJR1Q2NDI2MF9NUFNDX1RDUlIJCQkJMHhiNDA4CisKKy8qIE1haW4gQ29uZmlndXJhdGlubyBSZWdpc3RlcnMgKi8KKyNkZWZpbmUJR1Q2NDI2MF9NUFNDXzBfTU1DUkwJCQkJMHg4MDAwCisjZGVmaW5lCUdUNjQyNjBfTVBTQ18wX01NQ1JICQkJCTB4ODAwNAorI2RlZmluZQlHVDY0MjYwX01QU0NfMF9NUENSCQkJCTB4ODAwOAorI2RlZmluZQlHVDY0MjYwX01QU0NfMF9DSFJfMQkJCQkweDgwMGMKKyNkZWZpbmUJR1Q2NDI2MF9NUFNDXzBfQ0hSXzIJCQkJMHg4MDEwCisjZGVmaW5lCUdUNjQyNjBfTVBTQ18wX0NIUl8zCQkJCTB4ODAxNAorI2RlZmluZQlHVDY0MjYwX01QU0NfMF9DSFJfNAkJCQkweDgwMTgKKyNkZWZpbmUJR1Q2NDI2MF9NUFNDXzBfQ0hSXzUJCQkJMHg4MDFjCisjZGVmaW5lCUdUNjQyNjBfTVBTQ18wX0NIUl82CQkJCTB4ODAyMAorI2RlZmluZQlHVDY0MjYwX01QU0NfMF9DSFJfNwkJCQkweDgwMjQKKyNkZWZpbmUJR1Q2NDI2MF9NUFNDXzBfQ0hSXzgJCQkJMHg4MDI4CisjZGVmaW5lCUdUNjQyNjBfTVBTQ18wX0NIUl85CQkJCTB4ODAyYworI2RlZmluZQlHVDY0MjYwX01QU0NfMF9DSFJfMTAJCQkJMHg4MDMwCisjZGVmaW5lCUdUNjQyNjBfTVBTQ18wX0NIUl8xMQkJCQkweDgwMzQKKworI2RlZmluZQlHVDY0MjYwX01QU0NfMV9NTUNSTAkJCQkweDkwMDAKKyNkZWZpbmUJR1Q2NDI2MF9NUFNDXzFfTU1DUkgJCQkJMHg5MDA0CisjZGVmaW5lCUdUNjQyNjBfTVBTQ18xX01QQ1IJCQkJMHg5MDA4CisjZGVmaW5lCUdUNjQyNjBfTVBTQ18xX0NIUl8xCQkJCTB4OTAwYworI2RlZmluZQlHVDY0MjYwX01QU0NfMV9DSFJfMgkJCQkweDkwMTAKKyNkZWZpbmUJR1Q2NDI2MF9NUFNDXzFfQ0hSXzMJCQkJMHg5MDE0CisjZGVmaW5lCUdUNjQyNjBfTVBTQ18xX0NIUl80CQkJCTB4OTAxOAorI2RlZmluZQlHVDY0MjYwX01QU0NfMV9DSFJfNQkJCQkweDkwMWMKKyNkZWZpbmUJR1Q2NDI2MF9NUFNDXzFfQ0hSXzYJCQkJMHg5MDIwCisjZGVmaW5lCUdUNjQyNjBfTVBTQ18xX0NIUl83CQkJCTB4OTAyNAorI2RlZmluZQlHVDY0MjYwX01QU0NfMV9DSFJfOAkJCQkweDkwMjgKKyNkZWZpbmUJR1Q2NDI2MF9NUFNDXzFfQ0hSXzkJCQkJMHg5MDJjCisjZGVmaW5lCUdUNjQyNjBfTVBTQ18xX0NIUl8xMAkJCQkweDkwMzAKKyNkZWZpbmUJR1Q2NDI2MF9NUFNDXzFfQ0hSXzExCQkJCTB4OTAzNAorCisjZGVmaW5lCUdUNjQyNjBfTVBTQ18wX0lOVFJfQ0FVU0UJCQkweGI4MDQKKyNkZWZpbmUJR1Q2NDI2MF9NUFNDXzBfSU5UUl9NQVNLCQkJMHhiODg0CisjZGVmaW5lCUdUNjQyNjBfTVBTQ18xX0lOVFJfQ0FVU0UJCQkweGI4MGMKKyNkZWZpbmUJR1Q2NDI2MF9NUFNDXzFfSU5UUl9NQVNLCQkJMHhiODhjCisKKyNkZWZpbmUJR1Q2NDI2MF9NUFNDX1VBUlRfQ1JfVEVWCQkJKDE8PDEpCisjZGVmaW5lCUdUNjQyNjBfTVBTQ19VQVJUX0NSX1RBCQkJCSgxPDw3KQorI2RlZmluZQlHVDY0MjYwX01QU0NfVUFSVF9DUl9UVENTCQkJKDE8PDkpCisjZGVmaW5lCUdUNjQyNjBfTVBTQ19VQVJUX0NSX1JFVgkJCSgxPDwxNykKKyNkZWZpbmUJR1Q2NDI2MF9NUFNDX1VBUlRfQ1JfUkEJCQkJKDE8PDIzKQorI2RlZmluZQlHVDY0MjYwX01QU0NfVUFSVF9DUl9DUkQJCQkoMTw8MjUpCisjZGVmaW5lCUdUNjQyNjBfTVBTQ19VQVJUX0NSX0VICQkJCSgxPDwzMSkKKworI2RlZmluZQlHVDY0MjYwX01QU0NfVUFSVF9FU1JfQ1RTCQkJKDE8PDApCisjZGVmaW5lCUdUNjQyNjBfTVBTQ19VQVJUX0VTUl9DRAkJCSgxPDwxKQorI2RlZmluZQlHVDY0MjYwX01QU0NfVUFSVF9FU1JfVElETEUJCQkoMTw8MykKKyNkZWZpbmUJR1Q2NDI2MF9NUFNDX1VBUlRfRVNSX1JIUwkJCSgxPDw1KQorI2RlZmluZQlHVDY0MjYwX01QU0NfVUFSVF9FU1JfUkxTCQkJKDE8PDcpCisjZGVmaW5lCUdUNjQyNjBfTVBTQ19VQVJUX0VTUl9STElETAkJCSgxPDwxMSkKKworCisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICoJU2VyaWFsIERNQSBDb250cm9sbGVyIEludGVyZmFjZSBSZWdpc3RlcnMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisjZGVmaW5lCUdUNjQyNjBfU0RNQV8wX1NEQwkJCQkweDQwMDAKKyNkZWZpbmUJR1Q2NDI2MF9TRE1BXzBfU0RDTQkJCQkweDQwMDgKKyNkZWZpbmUJR1Q2NDI2MF9TRE1BXzBfUlhfREVTQwkJCQkweDQ4MDAKKyNkZWZpbmUJR1Q2NDI2MF9TRE1BXzBfUlhfQlVGX1BUUgkJCTB4NDgwOAorI2RlZmluZQlHVDY0MjYwX1NETUFfMF9TQ1JEUAkJCQkweDQ4MTAKKyNkZWZpbmUJR1Q2NDI2MF9TRE1BXzBfVFhfREVTQwkJCQkweDRjMDAKKyNkZWZpbmUJR1Q2NDI2MF9TRE1BXzBfU0NURFAJCQkJMHg0YzEwCisjZGVmaW5lCUdUNjQyNjBfU0RNQV8wX1NGVERQCQkJCTB4NGMxNAorCisjZGVmaW5lCUdUNjQyNjBfU0RNQV8xX1NEQwkJCQkweDYwMDAKKyNkZWZpbmUJR1Q2NDI2MF9TRE1BXzFfU0RDTQkJCQkweDYwMDgKKyNkZWZpbmUJR1Q2NDI2MF9TRE1BXzFfUlhfREVTQwkJCQkweDY4MDAKKyNkZWZpbmUgR1Q2NDI2MF9TRE1BXzFfUlhfQlVGX1BUUiAgICAgICAgICAgICAgICAgICAgICAgMHg2ODA4CisjZGVmaW5lCUdUNjQyNjBfU0RNQV8xX1NDUkRQCQkJCTB4NjgxMAorI2RlZmluZQlHVDY0MjYwX1NETUFfMV9UWF9ERVNDCQkJCTB4NmMwMAorI2RlZmluZQlHVDY0MjYwX1NETUFfMV9TQ1REUAkJCQkweDZjMTAKKyNkZWZpbmUJR1Q2NDI2MF9TRE1BXzFfU0ZURFAJCQkJMHg2YzE0CisKKyNkZWZpbmUJR1Q2NDI2MF9TRE1BX0lOVFJfQ0FVU0UJCQkJMHhiODAwCisjZGVmaW5lCUdUNjQyNjBfU0RNQV9JTlRSX01BU0sJCQkJMHhiODgwCisKKyNkZWZpbmUJR1Q2NDI2MF9TRE1BX0RFU0NfQ01EU1RBVF9QRQkJCSgxPDwwKQorI2RlZmluZQlHVDY0MjYwX1NETUFfREVTQ19DTURTVEFUX0NETAkJCSgxPDwxKQorI2RlZmluZQlHVDY0MjYwX1NETUFfREVTQ19DTURTVEFUX0ZSCQkJKDE8PDMpCisjZGVmaW5lCUdUNjQyNjBfU0RNQV9ERVNDX0NNRFNUQVRfT1IJCQkoMTw8NikKKyNkZWZpbmUJR1Q2NDI2MF9TRE1BX0RFU0NfQ01EU1RBVF9CUgkJCSgxPDw5KQorI2RlZmluZQlHVDY0MjYwX1NETUFfREVTQ19DTURTVEFUX01JCQkJKDE8PDEwKQorI2RlZmluZQlHVDY0MjYwX1NETUFfREVTQ19DTURTVEFUX0EJCQkoMTw8MTEpCisjZGVmaW5lCUdUNjQyNjBfU0RNQV9ERVNDX0NNRFNUQVRfQU0JCQkoMTw8MTIpCisjZGVmaW5lCUdUNjQyNjBfU0RNQV9ERVNDX0NNRFNUQVRfQ1QJCQkoMTw8MTMpCisjZGVmaW5lCUdUNjQyNjBfU0RNQV9ERVNDX0NNRFNUQVRfQwkJCSgxPDwxNCkKKyNkZWZpbmUJR1Q2NDI2MF9TRE1BX0RFU0NfQ01EU1RBVF9FUwkJCSgxPDwxNSkKKyNkZWZpbmUJR1Q2NDI2MF9TRE1BX0RFU0NfQ01EU1RBVF9MCQkJKDE8PDE2KQorI2RlZmluZQlHVDY0MjYwX1NETUFfREVTQ19DTURTVEFUX0YJCQkoMTw8MTcpCisjZGVmaW5lCUdUNjQyNjBfU0RNQV9ERVNDX0NNRFNUQVRfUAkJCSgxPDwxOCkKKyNkZWZpbmUJR1Q2NDI2MF9TRE1BX0RFU0NfQ01EU1RBVF9FSQkJCSgxPDwyMykKKyNkZWZpbmUJR1Q2NDI2MF9TRE1BX0RFU0NfQ01EU1RBVF9PCQkJKDE8PDMxKQorCisjZGVmaW5lCUdUNjQyNjBfU0RNQV9TRENfUkZUCQkJCSgxPDwwKQorI2RlZmluZQlHVDY0MjYwX1NETUFfU0RDX1NGTQkJCQkoMTw8MSkKKyNkZWZpbmUJR1Q2NDI2MF9TRE1BX1NEQ19CTE1SCQkJCSgxPDw2KQorI2RlZmluZQlHVDY0MjYwX1NETUFfU0RDX0JMTVQJCQkJKDE8PDcpCisjZGVmaW5lCUdUNjQyNjBfU0RNQV9TRENfUE9WUgkJCQkoMTw8OCkKKyNkZWZpbmUJR1Q2NDI2MF9TRE1BX1NEQ19SSUZCCQkJCSgxPDw5KQorCisjZGVmaW5lCUdUNjQyNjBfU0RNQV9TRENNX0VSRAkJCQkoMTw8NykKKyNkZWZpbmUJR1Q2NDI2MF9TRE1BX1NEQ01fQVIJCQkJKDE8PDE1KQorI2RlZmluZQlHVDY0MjYwX1NETUFfU0RDTV9TVEQJCQkJKDE8PDE2KQorI2RlZmluZQlHVDY0MjYwX1NETUFfU0RDTV9UWEQJCQkJKDE8PDIzKQorI2RlZmluZQlHVDY0MjYwX1NETUFfU0RDTV9BVAkJCQkoMTw8MzEpCisKKyNkZWZpbmUJR1Q2NDI2MF9TRE1BXzBfQ0FVU0VfUlhCVUYJCQkoMTw8MCkKKyNkZWZpbmUJR1Q2NDI2MF9TRE1BXzBfQ0FVU0VfUlhFUlIJCQkoMTw8MSkKKyNkZWZpbmUJR1Q2NDI2MF9TRE1BXzBfQ0FVU0VfVFhCVUYJCQkoMTw8MikKKyNkZWZpbmUJR1Q2NDI2MF9TRE1BXzBfQ0FVU0VfVFhFTkQJCQkoMTw8MykKKyNkZWZpbmUJR1Q2NDI2MF9TRE1BXzFfQ0FVU0VfUlhCVUYJCQkoMTw8OCkKKyNkZWZpbmUJR1Q2NDI2MF9TRE1BXzFfQ0FVU0VfUlhFUlIJCQkoMTw8OSkKKyNkZWZpbmUJR1Q2NDI2MF9TRE1BXzFfQ0FVU0VfVFhCVUYJCQkoMTw8MTApCisjZGVmaW5lCUdUNjQyNjBfU0RNQV8xX0NBVVNFX1RYRU5ECQkJKDE8PDExKQorCisKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKglCYXVkIFJhdGUgR2VuZXJhdG9yIEludGVyZmFjZSBSZWdpc3RlcnMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisjZGVmaW5lCUdUNjQyNjBfQlJHXzBfQkNSCQkJCTB4YjIwMAorI2RlZmluZQlHVDY0MjYwX0JSR18wX0JUUgkJCQkweGIyMDQKKyNkZWZpbmUJR1Q2NDI2MF9CUkdfMV9CQ1IJCQkJMHhiMjA4CisjZGVmaW5lCUdUNjQyNjBfQlJHXzFfQlRSCQkJCTB4YjIwYworI2RlZmluZQlHVDY0MjYwX0JSR18yX0JDUgkJCQkweGIyMTAKKyNkZWZpbmUJR1Q2NDI2MF9CUkdfMl9CVFIJCQkJMHhiMjE0CisKKyNkZWZpbmUJR1Q2NDI2MF9CUkdfSU5UUl9DQVVTRQkJCQkweGI4MzQKKyNkZWZpbmUJR1Q2NDI2MF9CUkdfSU5UUl9NQVNLCQkJCTB4YjhiNAorCisKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKglXYXRjaGRvZyBUaW1lciBJbnRlcmZhY2UgUmVnaXN0ZXJzCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworI2RlZmluZQlHVDY0MjYwX1dEVF9XREMJCQkJCTB4YjQxMAorI2RlZmluZQlHVDY0MjYwX1dEVF9XRFYJCQkJCTB4YjQxNAorCisKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKgkgR2VuZXJhbCBQdXJwb3NlIFBpbnMgQ29udHJvbGxlciBJbnRlcmZhY2UgUmVnaXN0ZXJzCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworI2RlZmluZQlHVDY0MjYwX0dQUF9JT19DTlRMCQkJCTB4ZjEwMAorI2RlZmluZQlHVDY0MjYwX0dQUF9MRVZFTF9DTlRMCQkJCTB4ZjExMAorI2RlZmluZQlHVDY0MjYwX0dQUF9WQUxVRQkJCQkweGYxMDQKKyNkZWZpbmUJR1Q2NDI2MF9HUFBfSU5UUl9DQVVTRQkJCQkweGYxMDgKKyNkZWZpbmUJR1Q2NDI2MF9HUFBfSU5UUl9NQVNLCQkJCTB4ZjEwYworCisKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKglNdWx0aS1QdXJwb3NlIFBpbnMgQ29udHJvbGxlciBJbnRlcmZhY2UgUmVnaXN0ZXJzCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworI2RlZmluZQlHVDY0MjYwX01QUF9DTlRMXzAJCQkJMHhmMDAwCisjZGVmaW5lCUdUNjQyNjBfTVBQX0NOVExfMQkJCQkweGYwMDQKKyNkZWZpbmUJR1Q2NDI2MF9NUFBfQ05UTF8yCQkJCTB4ZjAwOAorI2RlZmluZQlHVDY0MjYwX01QUF9DTlRMXzMJCQkJMHhmMDBjCisjZGVmaW5lCUdUNjQyNjBfTVBQX1NFUklBTF9QT1JUU19NVUxUSVBMRVgJCTB4ZjAxMAorCisKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKglJMkMgQ29udHJvbGxlciBJbnRlcmZhY2UgUmVnaXN0ZXJzCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworLyogRklYTUU6IGZpbGwgaW4gKi8KKworCisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICoJSW50ZXJydXB0IENvbnRyb2xsZXIgSW50ZXJmYWNlIFJlZ2lzdGVycworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKyNkZWZpbmUJR1Q2NDI2MF9JQ19NQUlOX0NBVVNFX0xPCQkJMHgwYzE4CisjZGVmaW5lCUdUNjQyNjBfSUNfTUFJTl9DQVVTRV9ISQkJCTB4MGM2OAorI2RlZmluZQlHVDY0MjYwX0lDX0NQVV9JTlRSX01BU0tfTE8JCQkweDBjMWMKKyNkZWZpbmUJR1Q2NDI2MF9JQ19DUFVfSU5UUl9NQVNLX0hJCQkJMHgwYzZjCisjZGVmaW5lCUdUNjQyNjBfSUNfQ1BVX1NFTEVDVF9DQVVTRQkJCTB4MGM3MAorI2RlZmluZQlHVDY0MjYwX0lDX1BDSV8wX0lOVFJfTUFTS19MTwkJCTB4MGMyNAorI2RlZmluZQlHVDY0MjYwX0lDX1BDSV8wX0lOVFJfTUFTS19ISQkJCTB4MGM2NAorI2RlZmluZQlHVDY0MjYwX0lDX1BDSV8wX1NFTEVDVF9DQVVTRQkJCTB4MGM3NAorI2RlZmluZQlHVDY0MjYwX0lDX1BDSV8xX0lOVFJfTUFTS19MTwkJCTB4MGNhNAorI2RlZmluZQlHVDY0MjYwX0lDX1BDSV8xX0lOVFJfTUFTS19ISQkJCTB4MGNlNAorI2RlZmluZQlHVDY0MjYwX0lDX1BDSV8xX1NFTEVDVF9DQVVTRQkJCTB4MGNmNAorI2RlZmluZQlHVDY0MjYwX0lDX0NQVV9JTlRfMF9NQVNLCQkJMHgwZTYwCisjZGVmaW5lCUdUNjQyNjBfSUNfQ1BVX0lOVF8xX01BU0sJCQkweDBlNjQKKyNkZWZpbmUJR1Q2NDI2MF9JQ19DUFVfSU5UXzJfTUFTSwkJCTB4MGU2OAorI2RlZmluZQlHVDY0MjYwX0lDX0NQVV9JTlRfM19NQVNLCQkJMHgwZTZjCisKKworI2VuZGlmIC8qIF9fQVNNUFBDX0dUNjQyNjBfREVGU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvaGFyZGlycS5oIGIvaW5jbHVkZS9hc20tcHBjL2hhcmRpcnEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGYxNDExCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjL2hhcmRpcnEuaApAQCAtMCwwICsxLDMxIEBACisjaWZkZWYgX19LRVJORUxfXworI2lmbmRlZiBfX0FTTV9IQVJESVJRX0gKKyNkZWZpbmUgX19BU01fSEFSRElSUV9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorCisvKiBUaGUgX19sYXN0X2ppZmZ5X3N0YW1wIGZpZWxkIGlzIG5lZWRlZCB0byBlbnN1cmUgdGhhdCBubyBkZWNyZW1lbnRlcgorICogaW50ZXJydXB0IGlzIGxvc3Qgb24gU01QIG1hY2hpbmVzLiBTaW5jZSBvbiBtb3N0IENQVXMgaXQgaXMgaW4gdGhlIHNhbWUKKyAqIGNhY2hlIGxpbmUgYXMgbG9jYWxfaXJxX2NvdW50LCBpdCBpcyBjaGVhcCB0byBhY2Nlc3MgYW5kIGlzIGFsc28gdXNlZCBvbiBVUAorICogZm9yIHVuaWZvcm1pdHkuCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBsb25nIF9fc29mdGlycV9wZW5kaW5nOwkvKiBzZXRfYml0IGlzIHVzZWQgb24gdGhpcyAqLworCXVuc2lnbmVkIGludCBfX2xhc3RfamlmZnlfc3RhbXA7Cit9IF9fX19jYWNoZWxpbmVfYWxpZ25lZCBpcnFfY3B1c3RhdF90OworCisjaW5jbHVkZSA8bGludXgvaXJxX2NwdXN0YXQuaD4JLyogU3RhbmRhcmQgbWFwcGluZ3MgZm9yIGlycV9jcHVzdGF0X3QgYWJvdmUgKi8KKworI2RlZmluZSBsYXN0X2ppZmZ5X3N0YW1wKGNwdSkgX19JUlFfU1RBVCgoY3B1KSwgX19sYXN0X2ppZmZ5X3N0YW1wKQorCitzdGF0aWMgaW5saW5lIHZvaWQgYWNrX2JhZF9pcnEoaW50IGlycSkKK3sKKwlwcmludGsoS0VSTl9DUklUICJpbGxlZ2FsIHZlY3RvciAlZCByZWNlaXZlZCFcbiIsIGlycSk7CisJQlVHKCk7Cit9CisKKyNlbmRpZiAvKiBfX0FTTV9IQVJESVJRX0ggKi8KKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvaGFycmllci5oIGIvaW5jbHVkZS9hc20tcHBjL2hhcnJpZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmM3M2FiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjL2hhcnJpZXIuaApAQCAtMCwwICsxLDQ1IEBACisvKgorICogYXJjaC9wcGMva2VybmVsL2hhcnJpZXIuaAorICoKKyAqIERlZmluaXRpb25zIGZvciBNb3Rvcm9sYSBNQ0cgSGFycmllciBOb3J0aCBCcmlkZ2UgJiBNZW1vcnkgY29udHJvbGxlcgorICoKKyAqIEF1dGhvcjogRGFsZSBGYXJuc3dvcnRoCisgKiAgICAgICAgIGRhbGUuZmFybnN3b3J0aEBtdmlzdGEuY29tCisgKgorICogTW9kaWZpZWQgYnk6IFJhbmR5IFZpbnNvbgorICogCSAgIHJ2aW5zb25AbXZpc3RhLmNvbQorICoKKyAqIENvcHlyaWdodCAyMDAxLTIwMDIgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9fQVNNUFBDX0hBUlJJRVJfSAorI2RlZmluZSBfX0FTTVBQQ19IQVJSSUVSX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3BjaS1icmlkZ2UuaD4KKworc3RydWN0IHBjaV9jb250cm9sbGVyOworaW50IGhhcnJpZXJfaW5pdChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UsCisJCSB1aW50IHBwY19yZWdfYmFzZSwKKwkJIHVsb25nIHByb2Nlc3Nvcl9wY2lfbWVtX3N0YXJ0LAorCQkgdWxvbmcgcHJvY2Vzc29yX3BjaV9tZW1fZW5kLAorCQkgdWxvbmcgcHJvY2Vzc29yX3BjaV9pb19zdGFydCwKKwkJIHVsb25nIHByb2Nlc3Nvcl9wY2lfaW9fZW5kLAorCQkgdWxvbmcgcHJvY2Vzc29yX21waWNfYmFzZSk7CisKK3Vuc2lnbmVkIGxvbmcgaGFycmllcl9nZXRfbWVtX3NpemUodWludCBzbWNfYmFzZSk7CisKK2ludCBoYXJyaWVyX21waWNfaW5pdCh1bnNpZ25lZCBpbnQgcGNpX21lbV9vZmZzZXQpOworCit2b2lkIGhhcnJpZXJfc2V0dXBfbm9ubW9uYXJjaCh1aW50IHBwY19yZWdfYmFzZSwKKwkJCSAgICAgIHVpbnQgaW4wX3NpemUpOwordm9pZCBoYXJyaWVyX3JlbGVhc2VfZXJlYWR5KHVpbnQgcHBjX3JlZ19iYXNlKTsKKwordm9pZCBoYXJyaWVyX3dhaXRfZXJlYWR5KHVpbnQgcHBjX3JlZ19iYXNlKTsKKworI2VuZGlmIC8qIF9fQVNNUFBDX0hBUlJJRVJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL2hhd2suaCBiL2luY2x1ZGUvYXNtLXBwYy9oYXdrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM0NzAwNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9oYXdrLmgKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLXBwYy9oYXdrLmgKKyAqCisgKiBTdXBwb3J0IGZ1bmN0aW9ucyBmb3IgTUNHIEZhbGNvbi9SYXZlbiAmIEhBV0sgTm9ydGggQnJpZGdlICYgTWVtb3J5IGN0bHIuCisgKgorICogQXV0aG9yOiBNYXJrIEEuIEdyZWVyCisgKiAgICAgICAgIG1ncmVlckBtdmlzdGEuY29tCisgKgorICogTW9kaWZpZWQgYnkgUmFuZHkgVmluc29uIChydmluc29uQG12aXN0YS5jb20pCisgKgorICogMjAwMSwyMDA0IChjKSBNb250YVZpc3RhLCBTb2Z0d2FyZSwgSW5jLiAgVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbQorICogaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzCisgKiBvciBpbXBsaWVkLgorICovCisKKyNpZm5kZWYgX19BU01QUENfSEFXS19ICisjZGVmaW5lIF9fQVNNUFBDX0hBV0tfSAorCisjaW5jbHVkZSA8YXNtL3BjaS1icmlkZ2UuaD4KKyNpbmNsdWRlIDxhc20vaGF3a19kZWZzLmg+CisKK2V4dGVybiBpbnQgaGF3a19pbml0KHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSwKKwkgICAgICB1bnNpZ25lZCBpbnQgcHBjX3JlZ19iYXNlLCB1bnNpZ25lZCBsb25nIHByb2Nlc3Nvcl9wY2lfbWVtX3N0YXJ0LAorCSAgICAgIHVuc2lnbmVkIGxvbmcgcHJvY2Vzc29yX3BjaV9tZW1fZW5kLAorCSAgICAgIHVuc2lnbmVkIGxvbmcgcHJvY2Vzc29yX3BjaV9pb19zdGFydCwKKwkgICAgICB1bnNpZ25lZCBsb25nIHByb2Nlc3Nvcl9wY2lfaW9fZW5kLAorCSAgICAgIHVuc2lnbmVkIGxvbmcgcHJvY2Vzc29yX21waWNfYmFzZSk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBoYXdrX2dldF9tZW1fc2l6ZSh1bnNpZ25lZCBpbnQgc21jX2Jhc2UpOworZXh0ZXJuIGludCBoYXdrX21waWNfaW5pdCh1bnNpZ25lZCBpbnQgcGNpX21lbV9vZmZzZXQpOworCisjZW5kaWYJLyogX19BU01QUENfSEFXS19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvaGF3a19kZWZzLmggYi9pbmNsdWRlL2FzbS1wcGMvaGF3a19kZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQxZDJiYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9oYXdrX2RlZnMuaApAQCAtMCwwICsxLDc2IEBACisvKgorICogaW5jbHVkZS9hc20tcHBjL2hhd2tfZGVmcy5oCisgKgorICogRGVmaW5pdGlvbnMgZm9yIE1vdG9yb2xhIE1DRyBGYWxjb24vUmF2ZW4gJiBIQVdLIE5vcnRoIEJyaWRnZSAmIE1lbW9yeSBjdGxyLgorICoKKyAqIEF1dGhvcjogTWFyayBBLiBHcmVlcgorICogICAgICAgICBtZ3JlZXJAbXZpc3RhLmNvbQorICoKKyAqIE1vZGlmaWVkIGJ5IFJhbmR5IFZpbnNvbiAocnZpbnNvbkBtdmlzdGEuY29tKQorICoKKyAqIDIwMDEtMjAwNCAoYykgTW9udGFWaXN0YSwgU29mdHdhcmUsIEluYy4gIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0KKyAqIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcworICogb3IgaW1wbGllZC4KKyAqLworCisjaWZuZGVmIF9fQVNNUFBDX0hBV0tfREVGU19ICisjZGVmaW5lIF9fQVNNUFBDX0hBV0tfREVGU19ICisKKyNpbmNsdWRlIDxhc20vcGNpLWJyaWRnZS5oPgorCisvKgorICogVGhlIEZhbGNvbi9SYXZlbiBhbmQgSEFXSyBoYXZlIDQgc2V0cyBvZiByZWdpc3RlcnM6CisgKiAgIDEpIFBQQyBSZWdpc3RlcnMgd2hpY2ggZGVmaW5lIHRoZSBtYXBwaW5ncyBmcm9tIFBQQyBidXMgdG8gUENJIGJ1cywKKyAqICAgICAgZXRjLgorICogICAyKSBQQ0kgUmVnaXN0ZXJzIHdoaWNoIGRlZmluZSB0aGUgbWFwcGluZ3MgZnJvbSBQQ0kgYnVzIHRvIFBQQyBidXMgYW5kIHRoZQorICogICAgICBNUElDIGJhc2UgYWRkcmVzcy4KKyAqICAgMykgTVBJQyByZWdpc3RlcnMKKyAqICAgNCkgU3lzdGVtIE1lbW9yeSBDb250cm9sbGVyIChTTUMpIHJlZ2lzdGVycy4KKyAqLworCisjZGVmaW5lIEhBV0tfUENJX0NPTkZJR19BRERSX09GRgkweDAwMDAwY2Y4CisjZGVmaW5lIEhBV0tfUENJX0NPTkZJR19EQVRBX09GRgkweDAwMDAwY2ZjCisKKyNkZWZpbmUgSEFXS19NUElDX1NJWkUJCQkweDAwMDQwMDAwVQorI2RlZmluZSBIQVdLX1NNQ19TSVpFCQkJMHgwMDAwMTAwMFUKKworLyoKKyAqIERlZmluZSBQUEMgcmVnaXN0ZXIgb2Zmc2V0cy4KKyAqLworI2RlZmluZSBIQVdLX1BQQ19YU0FERDBfT0ZGCQkJMHg0MAorI2RlZmluZSBIQVdLX1BQQ19YU09GRjBfT0ZGCQkJMHg0NAorI2RlZmluZSBIQVdLX1BQQ19YU0FERDFfT0ZGCQkJMHg0OAorI2RlZmluZSBIQVdLX1BQQ19YU09GRjFfT0ZGCQkJMHg0YworI2RlZmluZSBIQVdLX1BQQ19YU0FERDJfT0ZGCQkJMHg1MAorI2RlZmluZSBIQVdLX1BQQ19YU09GRjJfT0ZGCQkJMHg1NAorI2RlZmluZSBIQVdLX1BQQ19YU0FERDNfT0ZGCQkJMHg1OAorI2RlZmluZSBIQVdLX1BQQ19YU09GRjNfT0ZGCQkJMHg1YworCisvKgorICogRGVmaW5lIFBDSSByZWdpc3RlciBvZmZzZXRzLgorICovCisjZGVmaW5lIEhBV0tfUENJX1BTQUREMF9PRkYJCQkweDgwCisjZGVmaW5lIEhBV0tfUENJX1BTT0ZGMF9PRkYJCQkweDg0CisjZGVmaW5lIEhBV0tfUENJX1BTQUREMV9PRkYJCQkweDg4CisjZGVmaW5lIEhBV0tfUENJX1BTT0ZGMV9PRkYJCQkweDhjCisjZGVmaW5lIEhBV0tfUENJX1BTQUREMl9PRkYJCQkweDkwCisjZGVmaW5lIEhBV0tfUENJX1BTT0ZGMl9PRkYJCQkweDk0CisjZGVmaW5lIEhBV0tfUENJX1BTQUREM19PRkYJCQkweDk4CisjZGVmaW5lIEhBV0tfUENJX1BTT0ZGM19PRkYJCQkweDljCisKKy8qCisgKiBEZWZpbmUgdGhlIFN5c3RlbSBNZW1vcnkgQ29udHJvbGxlciAoU01DKSByZWdpc3RlciBvZmZzZXRzLgorICovCisjZGVmaW5lIEhBV0tfU01DX1JBTV9BX1NJWkVfUkVHX09GRgkJMHgxMAorI2RlZmluZSBIQVdLX1NNQ19SQU1fQl9TSVpFX1JFR19PRkYJCTB4MTEKKyNkZWZpbmUgSEFXS19TTUNfUkFNX0NfU0laRV9SRUdfT0ZGCQkweDEyCisjZGVmaW5lIEhBV0tfU01DX1JBTV9EX1NJWkVfUkVHX09GRgkJMHgxMworI2RlZmluZSBIQVdLX1NNQ19SQU1fRV9TSVpFX1JFR19PRkYJCTB4YzAJLyogSEFXSyBPbmx5ICovCisjZGVmaW5lIEhBV0tfU01DX1JBTV9GX1NJWkVfUkVHX09GRgkJMHhjMQkvKiBIQVdLIE9ubHkgKi8KKyNkZWZpbmUgSEFXS19TTUNfUkFNX0dfU0laRV9SRUdfT0ZGCQkweGMyCS8qIEhBV0sgT25seSAqLworI2RlZmluZSBIQVdLX1NNQ19SQU1fSF9TSVpFX1JFR19PRkYJCTB4YzMJLyogSEFXSyBPbmx5ICovCisKKyNkZWZpbmUgRkFMQ09OX1NNQ19SRUdfQ09VTlQJCQk0CisjZGVmaW5lIEhBV0tfU01DX1JFR19DT1VOVAkJCTgKKyNlbmRpZgkJCQkvKiBfX0FTTVBQQ19IQVdLX0RFRlNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL2hkcmVnLmggYi9pbmNsdWRlL2FzbS1wcGMvaGRyZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjdmZDFhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjL2hkcmVnLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2hkcmVnLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvaGVhdGhyb3cuaCBiL2luY2x1ZGUvYXNtLXBwYy9oZWF0aHJvdy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyYWMxNzkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGMvaGVhdGhyb3cuaApAQCAtMCwwICsxLDYyIEBACisvKgorICogaGVhdGhyb3cuaDogZGVmaW5pdGlvbnMgZm9yIHVzaW5nIHRoZSAiSGVhdGhyb3ciIEkvTyBjb250cm9sbGVyIGNoaXAuCisgKgorICogR3JhYmJlZCBmcm9tIE9wZW4gRmlybXdhcmUgZGVmaW5pdGlvbnMgb24gYSBQb3dlckJvb2sgRzMgU2VyaWVzCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk3IFBhdWwgTWFja2VycmFzLgorICovCisKKy8qIEZyb250IGxpZ2h0IGNvbG9yIG9uIFlpa2VzL0ImVyBHMy4gMzIgYml0cyAqLworI2RlZmluZSBIRUFUSFJPV19GUk9OVF9MSUdIVAkJMHgzMiAvKiAoc2V0IHRvIDAgb3IgMHhmZmZmZmZmZikgKi8KKworLyogQnJpZ2h0bmVzcy9jb250cmFzdCAoZ29zc2FtZXIgaU1hYyA/KS4gOCBiaXRzICovCisjZGVmaW5lIEhFQVRIUk9XX0JSSUdIVE5FU1NfQ05UTAkweDMyCisjZGVmaW5lIEhFQVRIUk9XX0NPTlRSQVNUX0NOVEwJCTB4MzMKKworLyogb2Zmc2V0IGZyb20gb2hhcmUgYmFzZSBmb3IgZmVhdHVyZSBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIEhFQVRIUk9XX01CQ1IJCQkweDM0CS8qIE1lZGlhIGJheSBjb250cm9sICovCisjZGVmaW5lIEhFQVRIUk9XX0ZDUgkJCTB4MzgJLyogRmVhdHVyZSBjb250cm9sICovCisjZGVmaW5lIEhFQVRIUk9XX0FVWF9DTlRMX1JFRwkJMHgzYwkvKiBBdXggY29udHJvbCAqLworCisvKgorICogQml0cyBpbiBmZWF0dXJlIGNvbnRyb2wgcmVnaXN0ZXIuCisgKiBCaXRzIHBvc3RmaXhlZCB3aXRoIGEgX04gYXJlIGluIGludmVyc2UgbG9naWMKKyAqLworI2RlZmluZSBIUldfU0NDX1RSQU5TX0VOX04JMHgwMDAwMDAwMQkvKiBBbHNvIGNvbnRyb2xzIG1vZGVtIHBvd2VyICovCisjZGVmaW5lIEhSV19CQVlfUE9XRVJfTgkJMHgwMDAwMDAwMgorI2RlZmluZSBIUldfQkFZX1BDSV9FTkFCTEUJMHgwMDAwMDAwNAorI2RlZmluZSBIUldfQkFZX0lERV9FTkFCTEUJMHgwMDAwMDAwOAorI2RlZmluZSBIUldfQkFZX0ZMT1BQWV9FTkFCTEUJMHgwMDAwMDAxMAorI2RlZmluZSBIUldfSURFMF9FTkFCTEUJCTB4MDAwMDAwMjAKKyNkZWZpbmUgSFJXX0lERTBfUkVTRVRfTgkweDAwMDAwMDQwCisjZGVmaW5lIEhSV19CQVlfREVWX01BU0sJMHgwMDAwMDAxYworI2RlZmluZSBIUldfQkFZX1JFU0VUX04JCTB4MDAwMDAwODAKKyNkZWZpbmUgSFJXX0lPQlVTX0VOQUJMRQkweDAwMDAwMTAwCS8qIEludGVybmFsIElERSA/ICovCisjZGVmaW5lIEhSV19TQ0NfRU5BQkxFCQkweDAwMDAwMjAwCisjZGVmaW5lIEhSV19NRVNIX0VOQUJMRQkJMHgwMDAwMDQwMAorI2RlZmluZSBIUldfU1dJTV9FTkFCTEUJCTB4MDAwMDA4MDAKKyNkZWZpbmUgSFJXX1NPVU5EX1BPV0VSX04JMHgwMDAwMTAwMAorI2RlZmluZSBIUldfU09VTkRfQ0xLX0VOQUJMRQkweDAwMDAyMDAwCisjZGVmaW5lIEhSV19TQ0NBX0lPCQkweDAwMDA0MDAwCisjZGVmaW5lIEhSV19TQ0NCX0lPCQkweDAwMDA4MDAwCisjZGVmaW5lIEhSV19QT1JUX09SX0RFU0tfVklBX04JMHgwMDAxMDAwMAkvKiBUaGlzIG9uZSBpcyAwIG9uIFBvd2VyQm9vayAqLworI2RlZmluZSBIUldfUFdNX01PTl9JRF9OCTB4MDAwMjAwMDAJLyogPz8/ICgwKSAqLworI2RlZmluZSBIUldfSE9PS19NQl9DTlRfTgkweDAwMDQwMDAwCS8qID8/PyAoMCkgKi8KKyNkZWZpbmUgSFJXX1NXSU1fQ0xPTkVfRkxPUFBZCTB4MDAwODAwMDAJLyogPz8/ICgwKSAqLworI2RlZmluZSBIUldfQVVEX1JVTjIyCQkweDAwMTAwMDAwCS8qID8/PyAoMSkgKi8KKyNkZWZpbmUgSFJXX1NDU0lfTElOS19NT0RFCTB4MDAyMDAwMDAJLyogUmVhZCA/Pz8gKDEpICovCisjZGVmaW5lIEhSV19BUkJfQllQQVNTCQkweDAwNDAwMDAwCS8qIERpc2FibGUgaW50ZXJuYWwgUENJIGFyYml0cmVyICovCisjZGVmaW5lIEhSV19JREUxX1JFU0VUX04JMHgwMDgwMDAwMAkvKiBNZWRpYSBiYXkgKi8KKyNkZWZpbmUgSFJXX1NMT1dfU0NDX1BDTEsJMHgwMTAwMDAwMAkvKiA/Pz8gKDApICovCisjZGVmaW5lIEhSV19SRVNFVF9TQ0MJCTB4MDIwMDAwMDAKKyNkZWZpbmUgSFJXX01GRENfQ0VMTF9FTkFCTEUJMHgwNDAwMDAwMAkvKiA/Pz8gKDApICovCisjZGVmaW5lIEhSV19VU0VfTUZEQwkJMHgwODAwMDAwMAkvKiA/Pz8gKDApICovCisjZGVmaW5lIEhSV19CTUFDX0lPX0VOQUJMRQkweDYwMDAwMDAwCS8qIHR3byBiaXRzLCBub3QgZG9jdW1lbnRlZCBpbiBPRiAqLworI2RlZmluZSBIUldfQk1BQ19SRVNFVAkJMHg4MDAwMDAwMAkvKiBub3QgZG9jdW1lbnRlZCBpbiBPRiAqLworCisvKiBXZSBPUiB0aG9zZSBmZWF0dXJlcyBhdCBib290IG9uIGRlc2t0b3AgRzNzICovCisjZGVmaW5lIEhSV19ERUZBVUxUUwkJKEhSV19TQ0NBX0lPIHwgSFJXX1NDQ0JfSU8gfCBIUldfU0NDX0VOQUJMRSkKKworLyogTG9va3MgbGlrZSBIZWF0aHJvdyBoYXMgc29tZSBzb3J0IG9mIEdQSU9zIGFzIHdlbGwuLi4gKi8KKyNkZWZpbmUgSFJXX0dQSU9fTU9ERU1fUkVTRVQJMHg2ZAorCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvaGlnaG1lbS5oIGIvaW5jbHVkZS9hc20tcHBjL2hpZ2htZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDJjNGVmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjL2hpZ2htZW0uaApAQCAtMCwwICsxLDEzNyBAQAorLyoKKyAqIGhpZ2htZW0uaDogdmlydHVhbCBrZXJuZWwgbWVtb3J5IG1hcHBpbmdzIGZvciBoaWdoIG1lbW9yeQorICoKKyAqIFBvd2VyUEMgdmVyc2lvbiwgc3RvbGVuIGZyb20gdGhlIGkzODYgdmVyc2lvbi4KKyAqCisgKiBVc2VkIGluIENPTkZJR19ISUdITUVNIHN5c3RlbXMgZm9yIG1lbW9yeSBwYWdlcyB3aGljaAorICogYXJlIG5vdCBhZGRyZXNzYWJsZSBieSBkaXJlY3Qga2VybmVsIHZpcnR1YWwgYWRkcmVzc2VzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBHZXJoYXJkIFdpY2hlcnQsIFNpZW1lbnMgQUcKKyAqCQkgICAgICBHZXJoYXJkLldpY2hlcnRAcGRiLnNpZW1lbnMuZGUKKyAqCisgKgorICogUmVkZXNpZ25lZCB0aGUgeDg2IDMyLWJpdCBWTSBhcmNoaXRlY3R1cmUgdG8gZGVhbCB3aXRoCisgKiB1cCB0byAxNiBUZXJyYWJ5dGUgcGh5c2ljYWwgbWVtb3J5LiBXaXRoIGN1cnJlbnQgeDg2IENQVXMKKyAqIHdlIG5vdyBzdXBwb3J0IHVwIHRvIDY0IEdpZ2FieXRlcyBwaHlzaWNhbCBSQU0uCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5IEluZ28gTW9sbmFyIDxtaW5nb0ByZWRoYXQuY29tPgorICovCisKKyNpZm5kZWYgX0FTTV9ISUdITUVNX0gKKyNkZWZpbmUgX0FTTV9ISUdITUVNX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxhc20va21hcF90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisKKy8qIHVuZGVmIGZvciBwcm9kdWN0aW9uICovCisjZGVmaW5lIEhJR0hNRU1fREVCVUcgMQorCitleHRlcm4gcHRlX3QgKmttYXBfcHRlOworZXh0ZXJuIHBncHJvdF90IGttYXBfcHJvdDsKK2V4dGVybiBwdGVfdCAqcGttYXBfcGFnZV90YWJsZTsKKworLyoKKyAqIFJpZ2h0IG5vdyB3ZSBpbml0aWFsaXplIG9ubHkgYSBzaW5nbGUgcHRlIHRhYmxlLiBJdCBjYW4gYmUgZXh0ZW5kZWQKKyAqIGVhc2lseSwgc3Vic2VxdWVudCBwdGUgdGFibGVzIGhhdmUgdG8gYmUgYWxsb2NhdGVkIGluIG9uZSBwaHlzaWNhbAorICogY2h1bmsgb2YgUkFNLgorICovCisjZGVmaW5lIFBLTUFQX0JBU0UgCUNPTkZJR19ISUdITUVNX1NUQVJUCisjZGVmaW5lIExBU1RfUEtNQVAgCSgxIDw8IFBURV9TSElGVCkKKyNkZWZpbmUgTEFTVF9QS01BUF9NQVNLIChMQVNUX1BLTUFQLTEpCisjZGVmaW5lIFBLTUFQX05SKHZpcnQpICAoKHZpcnQtUEtNQVBfQkFTRSkgPj4gUEFHRV9TSElGVCkKKyNkZWZpbmUgUEtNQVBfQUREUihucikgIChQS01BUF9CQVNFICsgKChucikgPDwgUEFHRV9TSElGVCkpCisKKyNkZWZpbmUgS01BUF9GSVhfQkVHSU4JKFBLTUFQX0JBU0UgKyAweDAwNDAwMDAwVUwpCisKK2V4dGVybiB2b2lkICprbWFwX2hpZ2goc3RydWN0IHBhZ2UgKnBhZ2UpOworZXh0ZXJuIHZvaWQga3VubWFwX2hpZ2goc3RydWN0IHBhZ2UgKnBhZ2UpOworCitzdGF0aWMgaW5saW5lIHZvaWQgKmttYXAoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJbWlnaHRfc2xlZXAoKTsKKwlpZiAoIVBhZ2VIaWdoTWVtKHBhZ2UpKQorCQlyZXR1cm4gcGFnZV9hZGRyZXNzKHBhZ2UpOworCXJldHVybiBrbWFwX2hpZ2gocGFnZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBrdW5tYXAoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJQlVHX09OKGluX2ludGVycnVwdCgpKTsKKwlpZiAoIVBhZ2VIaWdoTWVtKHBhZ2UpKQorCQlyZXR1cm47CisJa3VubWFwX2hpZ2gocGFnZSk7Cit9CisKKy8qCisgKiBUaGUgdXNlIG9mIGttYXBfYXRvbWljL2t1bm1hcF9hdG9taWMgaXMgZGlzY291cmFnZWQgLSBrbWFwL2t1bm1hcAorICogZ2l2ZXMgYSBtb3JlIGdlbmVyaWMgKGFuZCBjYWNoaW5nKSBpbnRlcmZhY2UuIEJ1dCBrbWFwX2F0b21pYyBjYW4KKyAqIGJlIHVzZWQgaW4gSVJRIGNvbnRleHRzLCBzbyBpbiBzb21lICh2ZXJ5IGxpbWl0ZWQpIGNhc2VzIHdlIG5lZWQKKyAqIGl0LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgKmttYXBfYXRvbWljKHN0cnVjdCBwYWdlICpwYWdlLCBlbnVtIGttX3R5cGUgdHlwZSkKK3sKKwl1bnNpZ25lZCBpbnQgaWR4OworCXVuc2lnbmVkIGxvbmcgdmFkZHI7CisKKwkvKiBldmVuICFDT05GSUdfUFJFRU1QVCBuZWVkcyB0aGlzLCBmb3IgaW5fYXRvbWljIGluIGRvX3BhZ2VfZmF1bHQgKi8KKwlpbmNfcHJlZW1wdF9jb3VudCgpOworCWlmICghUGFnZUhpZ2hNZW0ocGFnZSkpCisJCXJldHVybiBwYWdlX2FkZHJlc3MocGFnZSk7CisKKwlpZHggPSB0eXBlICsgS01fVFlQRV9OUipzbXBfcHJvY2Vzc29yX2lkKCk7CisJdmFkZHIgPSBLTUFQX0ZJWF9CRUdJTiArIGlkeCAqIFBBR0VfU0laRTsKKyNpZmRlZiBISUdITUVNX0RFQlVHCisJQlVHX09OKCFwdGVfbm9uZSgqKGttYXBfcHRlK2lkeCkpKTsKKyNlbmRpZgorCXNldF9wdGVfYXQoJmluaXRfbW0sIHZhZGRyLCBrbWFwX3B0ZStpZHgsIG1rX3B0ZShwYWdlLCBrbWFwX3Byb3QpKTsKKwlmbHVzaF90bGJfcGFnZShOVUxMLCB2YWRkcik7CisKKwlyZXR1cm4gKHZvaWQqKSB2YWRkcjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGt1bm1hcF9hdG9taWModm9pZCAqa3ZhZGRyLCBlbnVtIGttX3R5cGUgdHlwZSkKK3sKKyNpZmRlZiBISUdITUVNX0RFQlVHCisJdW5zaWduZWQgbG9uZyB2YWRkciA9ICh1bnNpZ25lZCBsb25nKSBrdmFkZHIgJiBQQUdFX01BU0s7CisJdW5zaWduZWQgaW50IGlkeCA9IHR5cGUgKyBLTV9UWVBFX05SKnNtcF9wcm9jZXNzb3JfaWQoKTsKKworCWlmICh2YWRkciA8IEtNQVBfRklYX0JFR0lOKSB7IC8vIEZJWE1FCisJCWRlY19wcmVlbXB0X2NvdW50KCk7CisJCXByZWVtcHRfY2hlY2tfcmVzY2hlZCgpOworCQlyZXR1cm47CisJfQorCisJQlVHX09OKHZhZGRyICE9IEtNQVBfRklYX0JFR0lOICsgaWR4ICogUEFHRV9TSVpFKTsKKworCS8qCisJICogZm9yY2Ugb3RoZXIgbWFwcGluZ3MgdG8gT29wcyBpZiB0aGV5J2xsIHRyeSB0byBhY2Nlc3MKKwkgKiB0aGlzIHB0ZSB3aXRob3V0IGZpcnN0IHJlbWFwIGl0CisJICovCisJcHRlX2NsZWFyKCZpbml0X21tLCB2YWRkciwga21hcF9wdGUraWR4KTsKKwlmbHVzaF90bGJfcGFnZShOVUxMLCB2YWRkcik7CisjZW5kaWYKKwlkZWNfcHJlZW1wdF9jb3VudCgpOworCXByZWVtcHRfY2hlY2tfcmVzY2hlZCgpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICprbWFwX2F0b21pY190b19wYWdlKHZvaWQgKnB0cikKK3sKKwl1bnNpZ25lZCBsb25nIGlkeCwgdmFkZHIgPSAodW5zaWduZWQgbG9uZykgcHRyOworCisJaWYgKHZhZGRyIDwgS01BUF9GSVhfQkVHSU4pCisJCXJldHVybiB2aXJ0X3RvX3BhZ2UocHRyKTsKKworCWlkeCA9ICh2YWRkciAtIEtNQVBfRklYX0JFR0lOKSA+PiBQQUdFX1NISUZUOworCXJldHVybiBwdGVfcGFnZShrbWFwX3B0ZVtpZHhdKTsKK30KKworI2RlZmluZSBmbHVzaF9jYWNoZV9rbWFwcygpCWZsdXNoX2NhY2hlX2FsbCgpCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfQVNNX0hJR0hNRU1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL2h3X2lycS5oIGIvaW5jbHVkZS9hc20tcHBjL2h3X2lycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3ZGM3OTkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGMvaHdfaXJxLmgKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBDb3J0IERvdWdhbiA8Y29ydEBjcy5ubXQuZWR1PgorICovCisjaWZkZWYgX19LRVJORUxfXworI2lmbmRlZiBfUFBDX0hXX0lSUV9ICisjZGVmaW5lIF9QUENfSFdfSVJRX0gKKworI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vcmVnLmg+CisKK2V4dGVybiB2b2lkIHRpbWVyX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqKTsKKworI2RlZmluZSBJTkxJTkVfSVJRUworCisjZGVmaW5lIGlycXNfZGlzYWJsZWQoKQkoKG1mbXNyKCkgJiBNU1JfRUUpID09IDApCisKKyNpZmRlZiBJTkxJTkVfSVJRUworCitzdGF0aWMgaW5saW5lIHZvaWQgbG9jYWxfaXJxX2Rpc2FibGUodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIG1zcjsKKwltc3IgPSBtZm1zcigpOworCW10bXNyKG1zciAmIH5NU1JfRUUpOworCV9fYXNtX18gX192b2xhdGlsZV9fKCIiOiA6IDoibWVtb3J5Iik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2NhbF9pcnFfZW5hYmxlKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBtc3I7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oIiI6IDogOiJtZW1vcnkiKTsKKwltc3IgPSBtZm1zcigpOworCW10bXNyKG1zciB8IE1TUl9FRSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2NhbF9pcnFfc2F2ZV9wdHIodW5zaWduZWQgbG9uZyAqZmxhZ3MpCit7CisJdW5zaWduZWQgbG9uZyBtc3I7CisJbXNyID0gbWZtc3IoKTsKKwkqZmxhZ3MgPSBtc3I7CisJbXRtc3IobXNyICYgfk1TUl9FRSk7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oIiI6IDogOiJtZW1vcnkiKTsKK30KKworI2RlZmluZSBsb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKQkJKChmbGFncykgPSBtZm1zcigpKQorI2RlZmluZSBsb2NhbF9pcnFfc2F2ZShmbGFncykJCWxvY2FsX2lycV9zYXZlX3B0cigmZmxhZ3MpCisjZGVmaW5lIGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKQltdG1zcihmbGFncykKKworI2Vsc2UKKworZXh0ZXJuIHZvaWQgbG9jYWxfaXJxX2VuYWJsZSh2b2lkKTsKK2V4dGVybiB2b2lkIGxvY2FsX2lycV9kaXNhYmxlKHZvaWQpOworZXh0ZXJuIHZvaWQgbG9jYWxfaXJxX3Jlc3RvcmUodW5zaWduZWQgbG9uZyk7CitleHRlcm4gdm9pZCBsb2NhbF9zYXZlX2ZsYWdzX3B0cih1bnNpZ25lZCBsb25nICopOworCisjZGVmaW5lIGxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpIGxvY2FsX3NhdmVfZmxhZ3NfcHRyKCZmbGFncykKKyNkZWZpbmUgbG9jYWxfaXJxX3NhdmUoZmxhZ3MpICh7bG9jYWxfc2F2ZV9mbGFncyhmbGFncyk7bG9jYWxfaXJxX2Rpc2FibGUoKTt9KQorCisjZW5kaWYKKworZXh0ZXJuIHZvaWQgZG9fbG9zdF9pbnRlcnJ1cHRzKHVuc2lnbmVkIGxvbmcpOworCisjZGVmaW5lIG1hc2tfaXJxKGlycSkgKHtpZiAoaXJxX2Rlc2NbaXJxXS5oYW5kbGVyICYmIGlycV9kZXNjW2lycV0uaGFuZGxlci0+ZGlzYWJsZSkgaXJxX2Rlc2NbaXJxXS5oYW5kbGVyLT5kaXNhYmxlKGlycSk7fSkKKyNkZWZpbmUgdW5tYXNrX2lycShpcnEpICh7aWYgKGlycV9kZXNjW2lycV0uaGFuZGxlciAmJiBpcnFfZGVzY1tpcnFdLmhhbmRsZXItPmVuYWJsZSkgaXJxX2Rlc2NbaXJxXS5oYW5kbGVyLT5lbmFibGUoaXJxKTt9KQorI2RlZmluZSBhY2tfaXJxKGlycSkgKHtpZiAoaXJxX2Rlc2NbaXJxXS5oYW5kbGVyICYmIGlycV9kZXNjW2lycV0uaGFuZGxlci0+YWNrKSBpcnFfZGVzY1tpcnFdLmhhbmRsZXItPmFjayhpcnEpO30pCisKKy8qIFNob3VsZCB3ZSBoYW5kbGUgdGhpcyB2aWEgbG9zdCBpbnRlcnJ1cHRzIGFuZCBJUElzIG9yIHNob3VsZCB3ZSBkb24ndCBjYXJlIGxpa2UKKyAqIHdlIGRvIG5vdyA/IC0tQmVuSC4KKyAqLworc3RydWN0IGh3X2ludGVycnVwdF90eXBlOworc3RhdGljIGlubGluZSB2b2lkIGh3X3Jlc2VuZF9pcnEoc3RydWN0IGh3X2ludGVycnVwdF90eXBlICpoLCB1bnNpZ25lZCBpbnQgaSkge30KKworCisjZW5kaWYgLyogX1BQQ19IV19JUlFfSCAqLworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9oeWRyYS5oIGIvaW5jbHVkZS9hc20tcHBjL2h5ZHJhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTEzNDQzMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9oeWRyYS5oCkBAIC0wLDAgKzEsMTAyIEBACisvKgorICogIGluY2x1ZGUvYXNtLXBwYy9oeWRyYS5oIC0tIE1hYyBJL08gYEh5ZHJhJyBkZWZpbml0aW9ucworICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTcgR2VlcnQgVXl0dGVyaG9ldmVuCisgKgorICogIFRoaXMgZmlsZSBpcyBiYXNlZCBvbiB0aGUgZm9sbG93aW5nIGRvY3VtZW50YXRpb246CisgKgorICoJTWFjaW50b3NoIFRlY2hub2xvZ3kgaW4gdGhlIENvbW1vbiBIYXJkd2FyZSBSZWZlcmVuY2UgUGxhdGZvcm0KKyAqCUFwcGxlIENvbXB1dGVyLCBJbmMuCisgKgorICoJqSBDb3B5cmlnaHQgMTk5NSBBcHBsZSBDb21wdXRlciwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBJdCdzIGF2YWlsYWJsZSBvbmxpbmUgZnJvbSBodHRwOi8vY2hycC5hcHBsZS5jb20vTWFjVGVjaC5wZGYuCisgKiAgWW91IGNhbiBvYnRhaW4gcGFwZXIgY29waWVzIG9mIHRoaXMgYm9vayBmcm9tIGNvbXB1dGVyIGJvb2tzdG9yZXMgb3IgYnkKKyAqICB3cml0aW5nIE1vcmdhbiBLYXVmbWFubiBQdWJsaXNoZXJzLCBJbmMuLCAzNDAgUGluZSBTdHJlZXQsIFNpeHRoIEZsb29yLCBTYW4KKyAqICBGcmFuY2lzY28sIENBIDk0MTA0LiBSZWZlcmVuY2UgSVNCTiAxLTU1ODYwLTM5My1YLgorICoKKyAqICBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiAgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9BU01QUENfSFlEUkFfSAorI2RlZmluZSBfQVNNUFBDX0hZRFJBX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKworc3RydWN0IEh5ZHJhIHsKKyAgICAvKiBEQkRNQSBDb250cm9sbGVyIFJlZ2lzdGVyIFNwYWNlICovCisgICAgY2hhciBQYWQxWzB4MzBdOworICAgIHVfaW50IENhY2hlUEQ7CisgICAgdV9pbnQgSURzOworICAgIHVfaW50IEZlYXR1cmVfQ29udHJvbDsKKyAgICBjaGFyIFBhZDJbMHg3ZmM0XTsKKyAgICAvKiBEQkRNQSBDaGFubmVsIFJlZ2lzdGVyIFNwYWNlICovCisgICAgY2hhciBTQ1NJX0RNQVsweDEwMF07CisgICAgY2hhciBQYWQzWzB4MzAwXTsKKyAgICBjaGFyIFNDQ0FfVHhfRE1BWzB4MTAwXTsKKyAgICBjaGFyIFNDQ0FfUnhfRE1BWzB4MTAwXTsKKyAgICBjaGFyIFNDQ0JfVHhfRE1BWzB4MTAwXTsKKyAgICBjaGFyIFNDQ0JfUnhfRE1BWzB4MTAwXTsKKyAgICBjaGFyIFBhZDRbMHg3ODAwXTsKKyAgICAvKiBEZXZpY2UgUmVnaXN0ZXIgU3BhY2UgKi8KKyAgICBjaGFyIFNDU0lbMHgxMDAwXTsKKyAgICBjaGFyIEFEQlsweDEwMDBdOworICAgIGNoYXIgU0NDX0xlZ2FjeVsweDEwMDBdOworICAgIGNoYXIgU0NDWzB4MTAwMF07CisgICAgY2hhciBQYWQ5WzB4MjAwMF07CisgICAgY2hhciBWSUFbMHgyMDAwXTsKKyAgICBjaGFyIFBhZDEwWzB4MjgwMDBdOworICAgIGNoYXIgT3BlblBJQ1sweDQwMDAwXTsKK307CisKK2V4dGVybiB2b2xhdGlsZSBzdHJ1Y3QgSHlkcmEgKkh5ZHJhOworCisKKyAgICAvKgorICAgICAqICBGZWF0dXJlIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKi8KKworI2RlZmluZSBIWURSQV9GQ19TQ0NfQ0VMTF9FTgkweDAwMDAwMDAxCS8qIEVuYWJsZSBTQ0MgQ2xvY2sgKi8KKyNkZWZpbmUgSFlEUkFfRkNfU0NTSV9DRUxMX0VOCTB4MDAwMDAwMDIJLyogRW5hYmxlIFNDU0kgQ2xvY2sgKi8KKyNkZWZpbmUgSFlEUkFfRkNfU0NDQV9FTkFCTEUJMHgwMDAwMDAwNAkvKiBFbmFibGUgU0NDIEEgTGluZXMgKi8KKyNkZWZpbmUgSFlEUkFfRkNfU0NDQl9FTkFCTEUJMHgwMDAwMDAwOAkvKiBFbmFibGUgU0NDIEIgTGluZXMgKi8KKyNkZWZpbmUgSFlEUkFfRkNfQVJCX0JZUEFTUwkweDAwMDAwMDEwCS8qIEJ5cGFzcyBJbnRlcm5hbCBBcmJpdGVyICovCisjZGVmaW5lIEhZRFJBX0ZDX1JFU0VUX1NDQwkweDAwMDAwMDIwCS8qIFJlc2V0IFNDQyAqLworI2RlZmluZSBIWURSQV9GQ19NUElDX0VOQUJMRQkweDAwMDAwMDQwCS8qIEVuYWJsZSBPcGVuUElDICovCisjZGVmaW5lIEhZRFJBX0ZDX1NMT1dfU0NDX1BDTEsJMHgwMDAwMDA4MAkvKiAxPTE1LjY2NzIsIDA9MjUgTUh6ICovCisjZGVmaW5lIEhZRFJBX0ZDX01QSUNfSVNfTUFTVEVSCTB4MDAwMDAxMDAJLyogT3BlblBJQyBNYXN0ZXIgTW9kZSAqLworCisKKyAgICAvKgorICAgICAqICBPcGVuUElDIEludGVycnVwdCBTb3VyY2VzCisgICAgICovCisKKyNkZWZpbmUgSFlEUkFfSU5UX1NJTwkJMAorI2RlZmluZSBIWURSQV9JTlRfU0NTSV9ETUEJMQorI2RlZmluZSBIWURSQV9JTlRfU0NDQV9UWF9ETUEJMgorI2RlZmluZSBIWURSQV9JTlRfU0NDQV9SWF9ETUEJMworI2RlZmluZSBIWURSQV9JTlRfU0NDQl9UWF9ETUEJNAorI2RlZmluZSBIWURSQV9JTlRfU0NDQl9SWF9ETUEJNQorI2RlZmluZSBIWURSQV9JTlRfU0NTSQkJNgorI2RlZmluZSBIWURSQV9JTlRfU0NDQQkJNworI2RlZmluZSBIWURSQV9JTlRfU0NDQgkJOAorI2RlZmluZSBIWURSQV9JTlRfVklBCQk5CisjZGVmaW5lIEhZRFJBX0lOVF9BREIJCTEwCisjZGVmaW5lIEhZRFJBX0lOVF9BREJfTk1JCTExCisjZGVmaW5lIEhZRFJBX0lOVF9FWFQxCQkxMgkvKiBQQ0kgSVJRVyAqLworI2RlZmluZSBIWURSQV9JTlRfRVhUMgkJMTMJLyogUENJIElSUVggKi8KKyNkZWZpbmUgSFlEUkFfSU5UX0VYVDMJCTE0CS8qIFBDSSBJUlFZICovCisjZGVmaW5lIEhZRFJBX0lOVF9FWFQ0CQkxNQkvKiBQQ0kgSVJRWiAqLworI2RlZmluZSBIWURSQV9JTlRfRVhUNQkJMTYJLyogSURFIFByaW1heS9TZWNvbmRhcnkgKi8KKyNkZWZpbmUgSFlEUkFfSU5UX0VYVDYJCTE3CS8qIElERSBTZWNvbmRhcnkgKi8KKyNkZWZpbmUgSFlEUkFfSU5UX0VYVDcJCTE4CS8qIFBvd2VyIE9mZiBSZXF1ZXN0ICovCisjZGVmaW5lIEhZRFJBX0lOVF9TUEFSRQkJMTkKKworZXh0ZXJuIGludCBoeWRyYV9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgbWFjaW9fYWRiX2luaXQodm9pZCk7CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfQVNNUFBDX0hZRFJBX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9pODI1OS5oIGIvaW5jbHVkZS9hc20tcHBjL2k4MjU5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDkxYjcxMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9pODI1OS5oCkBAIC0wLDAgKzEsMTEgQEAKKyNpZm5kZWYgX1BQQ19LRVJORUxfaTgyNTlfSAorI2RlZmluZSBfUFBDX0tFUk5FTF9pODI1OV9ICisKKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKworZXh0ZXJuIHN0cnVjdCBod19pbnRlcnJ1cHRfdHlwZSBpODI1OV9waWM7CisKK2V4dGVybiB2b2lkIGk4MjU5X2luaXQobG9uZyBpbnRhY2tfYWRkcik7CitleHRlcm4gaW50IGk4MjU5X2lycShzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKKyNlbmRpZiAvKiBfUFBDX0tFUk5FTF9pODI1OV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvaWJtNDAzLmggYi9pbmNsdWRlL2FzbS1wcGMvaWJtNDAzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY2ZWZhMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9pYm00MDMuaApAQCAtMCwwICsxLDQ3OSBAQAorLyoKKyAqIEF1dGhvcnM6IEFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPiBhbmQgVG9tIFJpbmkgPHRyaW5pQG12aXN0YS5jb20+CisgKgorICogMjAwMSAoYykgTW9udGFWaXN0YSwgU29mdHdhcmUsIEluYy4gIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0KKyAqIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcworICogb3IgaW1wbGllZC4KKyAqLworCisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaWZuZGVmIF9fQVNNX0lCTTQwM19IX18KKyNkZWZpbmUgX19BU01fSUJNNDAzX0hfXworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpZiBkZWZpbmVkKENPTkZJR180MDNHQ1gpCisKKyNkZWZpbmUJRENSTl9CRV9CQVNFCQkweDA5MAorI2RlZmluZQlEQ1JOX0RNQTBfQkFTRQkJMHgwQzAKKyNkZWZpbmUJRENSTl9ETUExX0JBU0UJCTB4MEM4CisjZGVmaW5lCURDUk5fRE1BMl9CQVNFCQkweDBEMAorI2RlZmluZQlEQ1JOX0RNQTNfQkFTRQkJMHgwRDgKKyNkZWZpbmUgRENSTkNBUF9ETUFfQ0MJCTEJLyogaGF2ZSBETUEgY2hhaW5lZCBjb3VudCBjYXBhYmlsaXR5ICovCisjZGVmaW5lCURDUk5fRE1BU1JfQkFTRQkJMHgwRTAKKworI2RlZmluZQlEQ1JOX0VYSUVSX0JBU0UJCTB4MDQyCisjZGVmaW5lCURDUk5fRVhJU1JfQkFTRQkJMHgwNDAKKyNkZWZpbmUJRENSTl9JT0NSX0JBU0UJCTB4MEEwCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2VuZGlmCisKKworCisjaWZkZWYgRENSTl9CRV9CQVNFCisjZGVmaW5lCURDUk5fQkVBUgkoRENSTl9CRV9CQVNFICsgMHgwKQkvKiBCdXMgRXJyb3IgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZQlEQ1JOX0JFU1IJKERDUk5fQkVfQkFTRSArIDB4MSkJLyogQnVzIEVycm9yIFN5bmRyb21lIFJlZ2lzdGVyKi8KKyNlbmRpZgorLyogRENSTl9CRVNSICovCisjZGVmaW5lIEJFU1JfRFNFUwkweDgwMDAwMDAwCS8qIERhdGEtU2lkZSBFcnJvciBTdGF0dXMgKi8KKyNkZWZpbmUgQkVTUl9ETUVTCTB4NDAwMDAwMDAJLyogRE1BIEVycm9yIFN0YXR1cyAqLworI2RlZmluZSBCRVNSX1JXUwkweDIwMDAwMDAwCS8qIFJlYWQvV3JpdGUgU3RhdHVzICovCisjZGVmaW5lIEJFU1JfRVRNQVNLCTB4MUMwMDAwMDAJLyogRXJyb3IgVHlwZSAqLworI2RlZmluZSBFVF9QUk9UCTAKKyNkZWZpbmUgRVRfUEFSSVRZCTEKKyNkZWZpbmUgRVRfTkNGRwkyCisjZGVmaW5lIEVUX0JVU0VSUgk0CisjZGVmaW5lIEVUX0JVU1RPCTYKKworI2lmZGVmIERDUk5fQ0hDUl9CQVNFCisjZGVmaW5lIERDUk5fQ0hDUjAJKERDUk5fQ0hDUl9CQVNFICsgMHgwKQkvKiBDaGlwIENvbnRyb2wgUmVnaXN0ZXIgMSAqLworI2RlZmluZSBEQ1JOX0NIQ1IxCShEQ1JOX0NIQ1JfQkFTRSArIDB4MSkJLyogQ2hpcCBDb250cm9sIFJlZ2lzdGVyIDIgKi8KKyNlbmRpZgorI2RlZmluZSBDSFIxX0NFVEUJMHgwMDgwMDAwMAkJIC8qIENQVSBleHRlcm5hbCB0aW1lciBlbmFibGUgKi8KKyNkZWZpbmUgQ0hSMV9QQ0lQVwkweDAwMDA4MDAwIC8qIFBDSSBJbnQgZW5hYmxlL1BlcmlwaGVyYWwgV3JpdGUgZW5hYmxlICovCisKKyNpZmRlZiBEQ1JOX0NIUFNSX0JBU0UKKyNkZWZpbmUgRENSTl9DSFBTUgkoRENSTl9DSFBTUl9CQVNFICsgMHgwKQkvKiBDaGlwIFBpbiBTdHJhcHBpbmcgKi8KKyNlbmRpZgorCisjaWZkZWYgRENSTl9DSUNfQkFTRQorI2RlZmluZSBEQ1JOX0NJQ0NSCShEQ1JOX0NJQ19CQVNFICsgMHgwKQkvKiBDSUMgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBEQ1JOX0RNQVMxCShEQ1JOX0NJQ19CQVNFICsgMHgxKQkvKiBETUEgU2VsZWN0MSBSZWdpc3RlciAqLworI2RlZmluZSBEQ1JOX0RNQVMyCShEQ1JOX0NJQ19CQVNFICsgMHgyKQkvKiBETUEgU2VsZWN0MiBSZWdpc3RlciAqLworI2RlZmluZSBEQ1JOX0NJQ1ZDUgkoRENSTl9DSUNfQkFTRSArIDB4MykJLyogQ0lDIFZpZGVvIENPbnRybyBSZWdpc3RlciAqLworI2RlZmluZSBEQ1JOX0NJQ1NFTDMJKERDUk5fQ0lDX0JBU0UgKyAweDUpCS8qIENJQyBTZWxlY3QgMyBSZWdpc3RlciAqLworI2RlZmluZSBEQ1JOX1NHUE8JKERDUk5fQ0lDX0JBU0UgKyAweDYpCS8qIENJQyBHUElPIE91dHB1dCBSZWdpc3RlciAqLworI2RlZmluZSBEQ1JOX1NHUE9ECShEQ1JOX0NJQ19CQVNFICsgMHg3KQkvKiBDSUMgR1BJTyBPRCBSZWdpc3RlciAqLworI2RlZmluZSBEQ1JOX1NHUFRDCShEQ1JOX0NJQ19CQVNFICsgMHg4KQkvKiBDSUMgR1BJTyBUcmlzdGF0ZSBDdHJsIFJlZyAqLworI2RlZmluZSBEQ1JOX1NHUEkJKERDUk5fQ0lDX0JBU0UgKyAweDkpCS8qIENJQyBHUElPIElucHV0IFJlZyAqLworI2VuZGlmCisKKyNpZmRlZiBEQ1JOX0NQTUZSX0JBU0UKKyNkZWZpbmUgRENSTl9DUE1GUgkoRENSTl9DUE1GUl9CQVNFICsgMHgwKQkvKiBDUE0gRm9yY2UgKi8KKyNlbmRpZgorCisjaWZuZGVmIENQTV9BVUQKKyNkZWZpbmUgQ1BNX0FVRAkJMHgwMDAwMDAwMAorI2VuZGlmCisjaWZuZGVmIENQTV9CUkcKKyNkZWZpbmUgQ1BNX0JSRwkJMHgwMDAwMDAwMAorI2VuZGlmCisjaWZuZGVmIENQTV9DQlMKKyNkZWZpbmUgQ1BNX0NCUwkJMHgwMDAwMDAwMAorI2VuZGlmCisjaWZuZGVmIENQTV9DUFUKKyNkZWZpbmUgQ1BNX0NQVQkJMHgwMDAwMDAwMAorI2VuZGlmCisjaWZuZGVmIENQTV9EQ1AKKyNkZWZpbmUgQ1BNX0RDUAkJMHgwMDAwMDAwMAorI2VuZGlmCisjaWZuZGVmIENQTV9EQ1JYCisjZGVmaW5lIENQTV9EQ1JYCTB4MDAwMDAwMDAKKyNlbmRpZgorI2lmbmRlZiBDUE1fREVOQworI2RlZmluZSBDUE1fREVOQwkweDAwMDAwMDAwCisjZW5kaWYKKyNpZm5kZWYgQ1BNX0RNQQorI2RlZmluZSBDUE1fRE1BCQkweDAwMDAwMDAwCisjZW5kaWYKKyNpZm5kZWYgQ1BNX0RTQ1IKKyNkZWZpbmUgQ1BNX0RTQ1IJMHgwMDAwMDAwMAorI2VuZGlmCisjaWZuZGVmIENQTV9FQkMKKyNkZWZpbmUgQ1BNX0VCQwkJMHgwMDAwMDAwMAorI2VuZGlmCisjaWZuZGVmIENQTV9FQklVCisjZGVmaW5lIENQTV9FQklVCTB4MDAwMDAwMDAKKyNlbmRpZgorI2lmbmRlZiBDUE1fRU1BQ19NTQorI2RlZmluZSBDUE1fRU1BQ19NTQkweDAwMDAwMDAwCisjZW5kaWYKKyNpZm5kZWYgQ1BNX0VNQUNfUk0KKyNkZWZpbmUgQ1BNX0VNQUNfUk0JMHgwMDAwMDAwMAorI2VuZGlmCisjaWZuZGVmIENQTV9FTUFDX1RNCisjZGVmaW5lIENQTV9FTUFDX1RNCTB4MDAwMDAwMDAKKyNlbmRpZgorI2lmbmRlZiBDUE1fR1BJTzAKKyNkZWZpbmUgQ1BNX0dQSU8wCTB4MDAwMDAwMDAKKyNlbmRpZgorI2lmbmRlZiBDUE1fR1BUCisjZGVmaW5lIENQTV9HUFQJCTB4MDAwMDAwMDAKKyNlbmRpZgorI2lmbmRlZiBDUE1fSTEyODQKKyNkZWZpbmUgQ1BNX0kxMjg0CTB4MDAwMDAwMDAKKyNlbmRpZgorI2lmbmRlZiBDUE1fSUlDMAorI2RlZmluZSBDUE1fSUlDMAkweDAwMDAwMDAwCisjZW5kaWYKKyNpZm5kZWYgQ1BNX0lJQzEKKyNkZWZpbmUgQ1BNX0lJQzEJMHgwMDAwMDAwMAorI2VuZGlmCisjaWZuZGVmIENQTV9NU0kKKyNkZWZpbmUgQ1BNX01TSQkJMHgwMDAwMDAwMAorI2VuZGlmCisjaWZuZGVmIENQTV9QQ0kKKyNkZWZpbmUgQ1BNX1BDSQkJMHgwMDAwMDAwMAorI2VuZGlmCisjaWZuZGVmIENQTV9QTEIKKyNkZWZpbmUgQ1BNX1BMQgkJMHgwMDAwMDAwMAorI2VuZGlmCisjaWZuZGVmIENQTV9TQzAKKyNkZWZpbmUgQ1BNX1NDMAkJMHgwMDAwMDAwMAorI2VuZGlmCisjaWZuZGVmIENQTV9TQzEKKyNkZWZpbmUgQ1BNX1NDMQkJMHgwMDAwMDAwMAorI2VuZGlmCisjaWZuZGVmIENQTV9TRFJBTTAKKyNkZWZpbmUgQ1BNX1NEUkFNMAkweDAwMDAwMDAwCisjZW5kaWYKKyNpZm5kZWYgQ1BNX1NEUkFNMQorI2RlZmluZSBDUE1fU0RSQU0xCTB4MDAwMDAwMDAKKyNlbmRpZgorI2lmbmRlZiBDUE1fVE1SQ0xLCisjZGVmaW5lIENQTV9UTVJDTEsJMHgwMDAwMDAwMAorI2VuZGlmCisjaWZuZGVmIENQTV9VQVJUMAorI2RlZmluZSBDUE1fVUFSVDAJMHgwMDAwMDAwMAorI2VuZGlmCisjaWZuZGVmIENQTV9VQVJUMQorI2RlZmluZSBDUE1fVUFSVDEJMHgwMDAwMDAwMAorI2VuZGlmCisjaWZuZGVmIENQTV9VQVJUMgorI2RlZmluZSBDUE1fVUFSVDIJMHgwMDAwMDAwMAorI2VuZGlmCisjaWZuZGVmIENQTV9VSUMKKyNkZWZpbmUgQ1BNX1VJQwkJMHgwMDAwMDAwMAorI2VuZGlmCisjaWZuZGVmIENQTV9WSUQyCisjZGVmaW5lIENQTV9WSUQyCTB4MDAwMDAwMDAKKyNlbmRpZgorI2lmbmRlZiBDUE1fWFBUMjcKKyNkZWZpbmUgQ1BNX1hQVDI3CTB4MDAwMDAwMDAKKyNlbmRpZgorI2lmbmRlZiBDUE1fWFBUNTQKKyNkZWZpbmUgQ1BNX1hQVDU0CTB4MDAwMDAwMDAKKyNlbmRpZgorCisjaWZkZWYgRENSTl9DUE1TUl9CQVNFCisjZGVmaW5lIERDUk5fQ1BNU1IJKERDUk5fQ1BNU1JfQkFTRSArIDB4MCkJLyogQ1BNIFN0YXR1cyAqLworI2RlZmluZSBEQ1JOX0NQTUVSCShEQ1JOX0NQTVNSX0JBU0UgKyAweDEpCS8qIENQTSBFbmFibGUgKi8KKyNlbmRpZgorCisjaWZkZWYgRENSTl9EQ1AwX0JBU0UKKyNkZWZpbmUgRENSTl9EQ1AwX0NGR0FERFIJKERDUk5fRENQMF9CQVNFICsgMHgwKQkvKiBEZWNvbXByZXNzaW9uIENvbnRyb2xsZXIgQWRkcmVzcyAqLworI2RlZmluZSBEQ1JOX0RDUDBfQ0ZHREFUQQkoRENSTl9EQ1AwX0JBU0UgKyAweDEpCS8qIERlY29tcHJlc3Npb24gQ29udHJvbGxlciBEYXRhICovCisjZW5kaWYKKworI2lmZGVmIERDUk5fRENSWF9CQVNFCisjZGVmaW5lIERDUk5fRENSWElDUgkoRENSTl9EQ1JYX0JBU0UgKyAweDApCS8qIEludGVybmFsIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRENSTl9EQ1JYSVNSCShEQ1JOX0RDUlhfQkFTRSArIDB4MSkJLyogSW50ZXJuYWwgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIERDUk5fRENSWEVDUgkoRENSTl9EQ1JYX0JBU0UgKyAweDIpCS8qIEV4dGVybmFsIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRENSTl9EQ1JYRVNSCShEQ1JOX0RDUlhfQkFTRSArIDB4MykJLyogRXh0ZXJuYWwgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIERDUk5fRENSWFRBUgkoRENSTl9EQ1JYX0JBU0UgKyAweDQpCS8qIFRhcmdldCBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lIERDUk5fRENSWFREUgkoRENSTl9EQ1JYX0JBU0UgKyAweDUpCS8qIFRhcmdldCBEYXRhIFJlZ2lzdGVyICovCisjZGVmaW5lIERDUk5fRENSWElHUgkoRENSTl9EQ1JYX0JBU0UgKyAweDYpCS8qIEludGVycnVwdCBHZW5lcmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lIERDUk5fRENSWEJDUgkoRENSTl9EQ1JYX0JBU0UgKyAweDcpCS8qIExpbmUgQnVmZmVyIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNlbmRpZgorCisjaWZkZWYgRENSTl9ETUEwX0JBU0UKKyNkZWZpbmUJRENSTl9ETUFDUjAJKERDUk5fRE1BMF9CQVNFICsgMHgwKQkvKiBETUEgQ2hhbm5lbCBDb250cm9sIFJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUJRENSTl9ETUFDVDAJKERDUk5fRE1BMF9CQVNFICsgMHgxKQkvKiBETUEgQ291bnQgUmVnaXN0ZXIgMCAqLworI2RlZmluZQlEQ1JOX0RNQURBMAkoRENSTl9ETUEwX0JBU0UgKyAweDIpCS8qIERNQSBEZXN0aW5hdGlvbiBBZGRyZXNzIFJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUJRENSTl9ETUFTQTAJKERDUk5fRE1BMF9CQVNFICsgMHgzKQkvKiBETUEgU291cmNlIEFkZHJlc3MgUmVnaXN0ZXIgMCAqLworI2lmZGVmIERDUk5DQVBfRE1BX0NDCisjZGVmaW5lCURDUk5fRE1BQ0MwCShEQ1JOX0RNQTBfQkFTRSArIDB4NCkJLyogRE1BIENoYWluZWQgQ291bnQgUmVnaXN0ZXIgMCAqLworI2VuZGlmCisKKyNpZmRlZiBEQ1JOQ0FQX0RNQV9TRworI2RlZmluZSBEQ1JOX0FTRzAJKERDUk5fRE1BMF9CQVNFICsgMHg0KQkvKiBETUEgU2NhdHRlci9HYXRoZXIgRGVzY3JpcHRvciBBZGRyIDAgKi8KKyNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBEQ1JOX0RNQTFfQkFTRQorI2RlZmluZQlEQ1JOX0RNQUNSMQkoRENSTl9ETUExX0JBU0UgKyAweDApCS8qIERNQSBDaGFubmVsIENvbnRyb2wgUmVnaXN0ZXIgMSAqLworI2RlZmluZQlEQ1JOX0RNQUNUMQkoRENSTl9ETUExX0JBU0UgKyAweDEpCS8qIERNQSBDb3VudCBSZWdpc3RlciAxICovCisjZGVmaW5lCURDUk5fRE1BREExCShEQ1JOX0RNQTFfQkFTRSArIDB4MikJLyogRE1BIERlc3RpbmF0aW9uIEFkZHJlc3MgUmVnaXN0ZXIgMSAqLworI2RlZmluZQlEQ1JOX0RNQVNBMQkoRENSTl9ETUExX0JBU0UgKyAweDMpCS8qIERNQSBTb3VyY2UgQWRkcmVzcyBSZWdpc3RlciAxICovCisKKyNpZmRlZiBEQ1JOQ0FQX0RNQV9DQworI2RlZmluZQlEQ1JOX0RNQUNDMQkoRENSTl9ETUExX0JBU0UgKyAweDQpCS8qIERNQSBDaGFpbmVkIENvdW50IFJlZ2lzdGVyIDEgKi8KKyNlbmRpZgorI2lmZGVmIERDUk5DQVBfRE1BX1NHCisjZGVmaW5lIERDUk5fQVNHMQkoRENSTl9ETUExX0JBU0UgKyAweDQpCS8qIERNQSBTY2F0dGVyL0dhdGhlciBEZXNjcmlwdG9yIEFkZHIgMSAqLworI2VuZGlmCisjZW5kaWYKKworI2lmZGVmIERDUk5fRE1BMl9CQVNFCisjZGVmaW5lCURDUk5fRE1BQ1IyCShEQ1JOX0RNQTJfQkFTRSArIDB4MCkJLyogRE1BIENoYW5uZWwgQ29udHJvbCBSZWdpc3RlciAyICovCisjZGVmaW5lCURDUk5fRE1BQ1QyCShEQ1JOX0RNQTJfQkFTRSArIDB4MSkJLyogRE1BIENvdW50IFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUJRENSTl9ETUFEQTIJKERDUk5fRE1BMl9CQVNFICsgMHgyKQkvKiBETUEgRGVzdGluYXRpb24gQWRkcmVzcyBSZWdpc3RlciAyICovCisjZGVmaW5lCURDUk5fRE1BU0EyCShEQ1JOX0RNQTJfQkFTRSArIDB4MykJLyogRE1BIFNvdXJjZSBBZGRyZXNzIFJlZ2lzdGVyIDIgKi8KKyNpZmRlZiBEQ1JOQ0FQX0RNQV9DQworI2RlZmluZQlEQ1JOX0RNQUNDMgkoRENSTl9ETUEyX0JBU0UgKyAweDQpCS8qIERNQSBDaGFpbmVkIENvdW50IFJlZ2lzdGVyIDIgKi8KKyNlbmRpZgorI2lmZGVmIERDUk5DQVBfRE1BX1NHCisjZGVmaW5lIERDUk5fQVNHMgkoRENSTl9ETUEyX0JBU0UgKyAweDQpCS8qIERNQSBTY2F0dGVyL0dhdGhlciBEZXNjcmlwdG9yIEFkZHIgMiAqLworI2VuZGlmCisjZW5kaWYKKworI2lmZGVmIERDUk5fRE1BM19CQVNFCisjZGVmaW5lCURDUk5fRE1BQ1IzCShEQ1JOX0RNQTNfQkFTRSArIDB4MCkJLyogRE1BIENoYW5uZWwgQ29udHJvbCBSZWdpc3RlciAzICovCisjZGVmaW5lCURDUk5fRE1BQ1QzCShEQ1JOX0RNQTNfQkFTRSArIDB4MSkJLyogRE1BIENvdW50IFJlZ2lzdGVyIDMgKi8KKyNkZWZpbmUJRENSTl9ETUFEQTMJKERDUk5fRE1BM19CQVNFICsgMHgyKQkvKiBETUEgRGVzdGluYXRpb24gQWRkcmVzcyBSZWdpc3RlciAzICovCisjZGVmaW5lCURDUk5fRE1BU0EzCShEQ1JOX0RNQTNfQkFTRSArIDB4MykJLyogRE1BIFNvdXJjZSBBZGRyZXNzIFJlZ2lzdGVyIDMgKi8KKyNpZmRlZiBEQ1JOQ0FQX0RNQV9DQworI2RlZmluZQlEQ1JOX0RNQUNDMwkoRENSTl9ETUEzX0JBU0UgKyAweDQpCS8qIERNQSBDaGFpbmVkIENvdW50IFJlZ2lzdGVyIDMgKi8KKyNlbmRpZgorI2lmZGVmIERDUk5DQVBfRE1BX1NHCisjZGVmaW5lIERDUk5fQVNHMwkoRENSTl9ETUEzX0JBU0UgKyAweDQpCS8qIERNQSBTY2F0dGVyL0dhdGhlciBEZXNjcmlwdG9yIEFkZHIgMyAqLworI2VuZGlmCisjZW5kaWYKKworI2lmZGVmIERDUk5fRE1BU1JfQkFTRQorI2RlZmluZQlEQ1JOX0RNQVNSCShEQ1JOX0RNQVNSX0JBU0UgKyAweDApCS8qIERNQSBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNpZmRlZiBEQ1JOQ0FQX0RNQV9TRworI2RlZmluZSBEQ1JOX0FTR0MJKERDUk5fRE1BU1JfQkFTRSArIDB4MykJLyogRE1BIFNjYXR0ZXIvR2F0aGVyIENvbW1hbmQgKi8KKy8qIGRvbid0IGtub3cgaWYgdGhlc2UgdHdvIHJlZ2lzdGVycyBhbHdheXMgZXhpc3QgaWYgc2NhdHRlci9nYXRoZXIgZXhpc3RzICovCisjZGVmaW5lIERDUk5fUE9MCShEQ1JOX0RNQVNSX0JBU0UgKyAweDYpCS8qIERNQSBQb2xhcml0eSBSZWdpc3RlciAqLworI2RlZmluZSBEQ1JOX1NMUAkoRENSTl9ETUFTUl9CQVNFICsgMHg1KQkvKiBETUEgU2xlZXAgUmVnaXN0ZXIgKi8KKyNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBEQ1JOX0VCQ19CQVNFCisjZGVmaW5lIERDUk5fRUJDQ0ZHQURSCShEQ1JOX0VCQ19CQVNFICsgMHgwKQkvKiBQZXJpcGhlcmFsIENvbnRyb2xsZXIgQWRkcmVzcyAqLworI2RlZmluZSBEQ1JOX0VCQ0NGR0RBVEEJKERDUk5fRUJDX0JBU0UgKyAweDEpCS8qIFBlcmlwaGVyYWwgQ29udHJvbGxlciBEYXRhICovCisjZW5kaWYKKworI2lmZGVmIERDUk5fRVhJRVJfQkFTRQorI2RlZmluZQlEQ1JOX0VYSUVSCShEQ1JOX0VYSUVSX0JBU0UgKyAweDApCS8qIEV4dGVybmFsIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8KKyNlbmRpZgorCisjaWZkZWYgRENSTl9FQklNQ19CQVNFCisjZGVmaW5lIERDUk5fQlJDUkgwCShEQ1JOX0VCSU1DX0JBU0UgKyAweDApIC8qIEJ1cyBSZWdpb24gQ29uZmlnIEhpZ2ggMCAqLworI2RlZmluZSBEQ1JOX0JSQ1JIMQkoRENSTl9FQklNQ19CQVNFICsgMHgxKSAvKiBCdXMgUmVnaW9uIENvbmZpZyBIaWdoIDEgKi8KKyNkZWZpbmUgRENSTl9CUkNSSDIJKERDUk5fRUJJTUNfQkFTRSArIDB4MikgLyogQnVzIFJlZ2lvbiBDb25maWcgSGlnaCAyICovCisjZGVmaW5lIERDUk5fQlJDUkgzCShEQ1JOX0VCSU1DX0JBU0UgKyAweDMpIC8qIEJ1cyBSZWdpb24gQ29uZmlnIEhpZ2ggMyAqLworI2RlZmluZSBEQ1JOX0JSQ1JINAkoRENSTl9FQklNQ19CQVNFICsgMHg0KSAvKiBCdXMgUmVnaW9uIENvbmZpZyBIaWdoIDQgKi8KKyNkZWZpbmUgRENSTl9CUkNSSDUJKERDUk5fRUJJTUNfQkFTRSArIDB4NSkgLyogQnVzIFJlZ2lvbiBDb25maWcgSGlnaCA1ICovCisjZGVmaW5lIERDUk5fQlJDUkg2CShEQ1JOX0VCSU1DX0JBU0UgKyAweDYpIC8qIEJ1cyBSZWdpb24gQ29uZmlnIEhpZ2ggNiAqLworI2RlZmluZSBEQ1JOX0JSQ1JINwkoRENSTl9FQklNQ19CQVNFICsgMHg3KSAvKiBCdXMgUmVnaW9uIENvbmZpZyBIaWdoIDcgKi8KKyNkZWZpbmUgRENSTl9CUkNSMAkoRENSTl9FQklNQ19CQVNFICsgMHgxMCkvKiBCUkMgMCAqLworI2RlZmluZSBEQ1JOX0JSQ1IxCShEQ1JOX0VCSU1DX0JBU0UgKyAweDExKS8qIEJSQyAxICovCisjZGVmaW5lIERDUk5fQlJDUjIJKERDUk5fRUJJTUNfQkFTRSArIDB4MTIpLyogQlJDIDIgKi8KKyNkZWZpbmUgRENSTl9CUkNSMwkoRENSTl9FQklNQ19CQVNFICsgMHgxMykvKiBCUkMgMyAqLworI2RlZmluZSBEQ1JOX0JSQ1I0CShEQ1JOX0VCSU1DX0JBU0UgKyAweDE0KS8qIEJSQyA0ICovCisjZGVmaW5lIERDUk5fQlJDUjUJKERDUk5fRUJJTUNfQkFTRSArIDB4MTUpLyogQlJDIDUgKi8KKyNkZWZpbmUgRENSTl9CUkNSNgkoRENSTl9FQklNQ19CQVNFICsgMHgxNikvKiBCUkMgNiAqLworI2RlZmluZSBEQ1JOX0JSQ1I3CShEQ1JOX0VCSU1DX0JBU0UgKyAweDE3KS8qIEJSQyA3ICovCisjZGVmaW5lIERDUk5fQkVBUjAJKERDUk5fRUJJTUNfQkFTRSArIDB4MjApLyogQnVzIEVycm9yIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRENSTl9CRVNSMAkoRENSTl9FQklNQ19CQVNFICsgMHgyMSkvKiBCdXMgRXJyb3IgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIERDUk5fQklVQ1IJKERDUk5fRUJJTUNfQkFTRSArIDB4MkEpLyogQnVzIEludGVyZmFjIFVuaXQgQ3RybCBSZWcgKi8KKyNlbmRpZgorCisjaWZkZWYgRENSTl9FWElTUl9CQVNFCisjZGVmaW5lCURDUk5fRVhJU1IJKERDUk5fRVhJU1JfQkFTRSArIDB4MCkJLyogRXh0ZXJuYWwgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLworI2VuZGlmCisjZGVmaW5lIEVYSUVSX0NJRQkweDgwMDAwMDAwCS8qIENyaXRpY2FsIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgRVhJRVJfU1JJRQkweDA4MDAwMDAwCS8qIFNlcmlhbCBQb3J0IFJ4IEludC4gRW5hYmxlICovCisjZGVmaW5lIEVYSUVSX1NUSUUJMHgwNDAwMDAwMAkvKiBTZXJpYWwgUG9ydCBUeCBJbnQuIEVuYWJsZSAqLworI2RlZmluZSBFWElFUl9KUklFCTB4MDIwMDAwMDAJLyogSlRBRyBTZXJpYWwgUG9ydCBSeCBJbnQuIEVuYWJsZSAqLworI2RlZmluZSBFWElFUl9KVElFCTB4MDEwMDAwMDAJLyogSlRBRyBTZXJpYWwgUG9ydCBUeCBJbnQuIEVuYWJsZSAqLworI2RlZmluZSBFWElFUl9EMElFCTB4MDA4MDAwMDAJLyogRE1BIENoYW5uZWwgMCBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIEVYSUVSX0QxSUUJMHgwMDQwMDAwMAkvKiBETUEgQ2hhbm5lbCAxIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgRVhJRVJfRDJJRQkweDAwMjAwMDAwCS8qIERNQSBDaGFubmVsIDIgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBFWElFUl9EM0lFCTB4MDAxMDAwMDAJLyogRE1BIENoYW5uZWwgMyBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIEVYSUVSX0UwSUUJMHgwMDAwMDAxMAkvKiBFeHRlcm5hbCBJbnRlcnJ1cHQgMCBFbmFibGUgKi8KKyNkZWZpbmUgRVhJRVJfRTFJRQkweDAwMDAwMDA4CS8qIEV4dGVybmFsIEludGVycnVwdCAxIEVuYWJsZSAqLworI2RlZmluZSBFWElFUl9FMklFCTB4MDAwMDAwMDQJLyogRXh0ZXJuYWwgSW50ZXJydXB0IDIgRW5hYmxlICovCisjZGVmaW5lIEVYSUVSX0UzSUUJMHgwMDAwMDAwMgkvKiBFeHRlcm5hbCBJbnRlcnJ1cHQgMyBFbmFibGUgKi8KKyNkZWZpbmUgRVhJRVJfRTRJRQkweDAwMDAwMDAxCS8qIEV4dGVybmFsIEludGVycnVwdCA0IEVuYWJsZSAqLworCisjaWZkZWYgRENSTl9JT0NSX0JBU0UKKyNkZWZpbmUJRENSTl9JT0NSCShEQ1JOX0lPQ1JfQkFTRSArIDB4MCkJLyogSW5wdXQvT3V0cHV0IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKyNlbmRpZgorI2RlZmluZSBJT0NSX0UwVEUJMHg4MDAwMDAwMAorI2RlZmluZSBJT0NSX0UwTFAJMHg0MDAwMDAwMAorI2RlZmluZSBJT0NSX0UxVEUJMHgyMDAwMDAwMAorI2RlZmluZSBJT0NSX0UxTFAJMHgxMDAwMDAwMAorI2RlZmluZSBJT0NSX0UyVEUJMHgwODAwMDAwMAorI2RlZmluZSBJT0NSX0UyTFAJMHgwNDAwMDAwMAorI2RlZmluZSBJT0NSX0UzVEUJMHgwMjAwMDAwMAorI2RlZmluZSBJT0NSX0UzTFAJMHgwMTAwMDAwMAorI2RlZmluZSBJT0NSX0U0VEUJMHgwMDgwMDAwMAorI2RlZmluZSBJT0NSX0U0TFAJMHgwMDQwMDAwMAorI2RlZmluZSBJT0NSX0VEVAkweDAwMDgwMDAwCisjZGVmaW5lIElPQ1JfU09SCTB4MDAwNDAwMDAKKyNkZWZpbmUgSU9DUl9FRE8JMHgwMDAwODAwMAorI2RlZmluZSBJT0NSXzJYQwkweDAwMDA0MDAwCisjZGVmaW5lIElPQ1JfQVRDCTB4MDAwMDIwMDAKKyNkZWZpbmUgSU9DUl9TUEQJMHgwMDAwMTAwMAorI2RlZmluZSBJT0NSX0JFTQkweDAwMDAwODAwCisjZGVmaW5lIElPQ1JfUFRECTB4MDAwMDA0MDAKKyNkZWZpbmUgSU9DUl9BUkUJMHgwMDAwMDA4MAorI2RlZmluZSBJT0NSX0RSQwkweDAwMDAwMDIwCisjZGVmaW5lIElPQ1JfUkRNKHgpCSgoKHgpICYgMHgzKSA8PCAzKQorI2RlZmluZSBJT0NSX1RDUwkweDAwMDAwMDA0CisjZGVmaW5lIElPQ1JfU0NTCTB4MDAwMDAwMDIKKyNkZWZpbmUgSU9DUl9TUEMJMHgwMDAwMDAwMQorCisjaWZkZWYgRENSTl9NQUxfQkFTRQorI2RlZmluZSBEQ1JOX01BTENSCQkoRENSTl9NQUxfQkFTRSArIDB4MCkgLyogTUFMIENvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgRENSTl9NQUxEQlIJCShEQ1JOX01BTF9CQVNFICsgMHgzKSAvKiBEZWJ1ZyBSZWdpc3RlciAqLworI2RlZmluZSBEQ1JOX01BTEVTUgkJKERDUk5fTUFMX0JBU0UgKyAweDEpIC8qIEVycm9yIFN0YXR1cyAqLworI2RlZmluZSBEQ1JOX01BTElFUgkJKERDUk5fTUFMX0JBU0UgKyAweDIpIC8qIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgRENSTl9NQUxUWENBUlIJCShEQ1JOX01BTF9CQVNFICsgMHg1KSAvKiBUWCBDaGFubmVkIEFjdGl2ZSBSZXNldCBSZWdpc3RlciAqLworI2RlZmluZSBEQ1JOX01BTFRYQ0FTUgkJKERDUk5fTUFMX0JBU0UgKyAweDQpIC8qIFRYIENoYW5uZWwgQWN0aXZlIFNldCBSZWdpc3RlciAqLworI2RlZmluZSBEQ1JOX01BTFRYREVJUgkJKERDUk5fTUFMX0JBU0UgKyAweDcpIC8qIFR4IERlc2NyaXB0b3IgRXJyb3IgSW50ZXJydXB0ICovCisjZGVmaW5lIERDUk5fTUFMVFhFT0JJU1IJKERDUk5fTUFMX0JBU0UgKyAweDYpIC8qIFR4IEVuZCBvZiBCdWZmZXIgSW50ZXJydXB0IFN0YXR1cyAgKi8KKyNkZWZpbmUgRENSTl9NQUxSWENBUlIJCShEQ1JOX01BTF9CQVNFICsgMHgxMSkgLyogUlggQ2hhbm5lZCBBY3RpdmUgUmVzZXQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRENSTl9NQUxSWENBU1IJCShEQ1JOX01BTF9CQVNFICsgMHgxMCkgLyogUlggQ2hhbm5lbCBBY3RpdmUgU2V0IFJlZ2lzdGVyICovCisjZGVmaW5lIERDUk5fTUFMUlhERUlSCQkoRENSTl9NQUxfQkFTRSArIDB4MTMpIC8qIFJ4IERlc2NyaXB0b3IgRXJyb3IgSW50ZXJydXB0ICovCisjZGVmaW5lIERDUk5fTUFMUlhFT0JJU1IJKERDUk5fTUFMX0JBU0UgKyAweDEyKSAvKiBSeCBFbmQgb2YgQnVmZmVyIEludGVycnVwdCBTdGF0dXMgICovCisjZGVmaW5lIERDUk5fTUFMUlhDVFAwUgkJKERDUk5fTUFMX0JBU0UgKyAweDQwKSAvKiBDaGFubmVsIFJ4IDAgQ2hhbm5lbCBUYWJsZSBQb2ludGVyICovCisjZGVmaW5lIERDUk5fTUFMVFhDVFAwUgkJKERDUk5fTUFMX0JBU0UgKyAweDIwKSAvKiBDaGFubmVsIFR4IDAgQ2hhbm5lbCBUYWJsZSBQb2ludGVyICovCisjZGVmaW5lIERDUk5fTUFMVFhDVFAxUgkJKERDUk5fTUFMX0JBU0UgKyAweDIxKSAvKiBDaGFubmVsIFR4IDEgQ2hhbm5lbCBUYWJsZSBQb2ludGVyICovCisjZGVmaW5lIERDUk5fTUFMUkNCUzAJCShEQ1JOX01BTF9CQVNFICsgMHg2MCkgLyogQ2hhbm5lbCBSeCAwIENoYW5uZWwgQnVmZmVyIFNpemUgKi8KKyNlbmRpZgorLyogRENSTl9NQUxDUiAqLworI2RlZmluZSBNQUxDUl9NTVNSCQkweDgwMDAwMDAwLyogTUFMIFNvZnR3YXJlIHJlc2V0ICovCisjZGVmaW5lIE1BTENSX1BMQlBfMQkJMHgwMDQwMDAwMCAvKiBNQUwgcmVxZXN0IHByaW9yaXR5OiAqLworI2RlZmluZSBNQUxDUl9QTEJQXzIJCTB4MDA4MDAwMDAgLyogbG93c2VzdCBpcyAwMCAqLworI2RlZmluZSBNQUxDUl9QTEJQXzMJCTB4MDBDMDAwMDAgLyogaGlnaGVzdCAqLworI2RlZmluZSBNQUxDUl9HQQkJMHgwMDIwMDAwMCAvKiBHdWFyZGVkIEFjdGl2ZSBCaXQgKi8KKyNkZWZpbmUgTUFMQ1JfT0EJCTB4MDAxMDAwMDAgLyogT3JkZXJlZCBBY3RpdmUgQml0ICovCisjZGVmaW5lIE1BTENSX1BMQkxFCQkweDAwMDgwMDAwIC8qIFBMQiBMb2NrIEVycm9yIEJpdCAqLworI2RlZmluZSBNQUxDUl9QTEJMVF8xCQkweDAwMDQwMDAwIC8qIFBMQiBMYXRlbmN5IFRpbWVyICovCisjZGVmaW5lIE1BTENSX1BMQkxUXzIJCTB4MDAwMjAwMDAKKyNkZWZpbmUgTUFMQ1JfUExCTFRfMwkJMHgwMDAxMDAwMAorI2RlZmluZSBNQUxDUl9QTEJMVF80CQkweDAwMDA4MDAwCisjZGVmaW5lIE1BTENSX1BMQkxUX0RFRkFVTFQJMHgwMDA3ODAwMCAvKiBKU1A6IElzIHRoaXMgYSB2YWxpZCBkZWZhdWx0Pz8gKi8KKyNkZWZpbmUgTUFMQ1JfUExCQgkJMHgwMDAwNDAwMCAvKiBQTEIgQnVyc3QgRGVhY3RpdmF0aW9uIEJpdCAqLworI2RlZmluZSBNQUxDUl9PUEJCTAkJMHgwMDAwMDA4MCAvKiBPUEIgTG9jayBCaXQgKi8KKyNkZWZpbmUgTUFMQ1JfRU9QSUUJCTB4MDAwMDAwMDQgLyogRW5kIE9mIFBhY2tldCBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIE1BTENSX0xFQQkJMHgwMDAwMDAwMiAvKiBMb2NrZWQgRXJyb3IgQWN0aXZlICovCisjZGVmaW5lIE1BTENSX01TRAkJMHgwMDAwMDAwMSAvKiBNQUwgU2Nyb2xsIERlc2NyaXB0b3IgQml0ICovCisvKiBEQ1JOX01BTEVTUiAqLworI2RlZmluZSBNQUxFU1JfRVZCCQkweDgwMDAwMDAwIC8qIEVycm9yIFZhbGlkIEJpdCAqLworI2RlZmluZSBNQUxFU1JfQ0lEUlgJCTB4NDAwMDAwMDAgLyogQ2hhbm5lbCBJRCBSZWNlaXZlICovCisjZGVmaW5lIE1BTEVTUl9ERQkJMHgwMDEwMDAwMCAvKiBEZXNjcmlwdG9yIEVycm9yICovCisjZGVmaW5lIE1BTEVTUl9PRU4JCTB4MDAwODAwMDAgLyogT1BCIE5vbi1GdWxsd29yZCBFcnJvciAqLworI2RlZmluZSBNQUxFU1JfT1RFCQkweDAwMDQwMDAwIC8qIE9QQiBUaW1lb3V0IEVycm9yICovCisjZGVmaW5lIE1BTEVTUl9PU0UJCTB4MDAwMjAwMDAgLyogT1BCIFNsYXZlIEVycm9yICovCisjZGVmaW5lIE1BTEVTUl9QRUlOCQkweDAwMDEwMDAwIC8qIFBMQiBCdXMgRXJyb3IgSW5kaWNhdGlvbiAqLworI2RlZmluZSBNQUxFU1JfREVJCQkweDAwMDAwMDEwIC8qIERlc2NyaXB0b3IgRXJyb3IgSW50ZXJydXB0ICovCisjZGVmaW5lIE1BTEVTUl9PTkVJCQkweDAwMDAwMDA4IC8qIE9QQiBOb24tRnVsbHdvcmQgRXJyb3IgSW50ZXJydXB0ICovCisjZGVmaW5lIE1BTEVTUl9PVEVJCQkweDAwMDAwMDA0IC8qIE9QQiBUaW1lb3V0IEVycm9yIEludGVycnVwdCAqLworI2RlZmluZSBNQUxFU1JfT1NFSQkJMHgwMDAwMDAwMiAvKiBPUEIgU2xhY2UgRXJyb3IgSW50ZXJydXB0ICovCisjZGVmaW5lIE1BTEVTUl9QQkVJCQkweDAwMDAwMDAxIC8qIFBMQiBCdXMgRXJyb3IgSW50ZXJydXB0ICovCisvKiBEQ1JOX01BTElFUiAqLworI2RlZmluZSBNQUxJRVJfREUJCTB4MDAwMDAwMTAgLyogRGVzY3JpcHRvciBFcnJvciBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIE1BTElFUl9ORQkJMHgwMDAwMDAwOCAvKiBPUEIgTm9uLXdvcmQgVHJhbnNmZXIgSW50IEVuYWJsZSAqLworI2RlZmluZSBNQUxJRVJfVEUJCTB4MDAwMDAwMDQgLyogT1BCIFRpbWUgT3V0IEVycm9yIEludGVycnVwdCBFbmFibGUgICovCisjZGVmaW5lIE1BTElFUl9PUEJFCQkweDAwMDAwMDAyIC8qIE9QQiBTbGF2ZSBFcnJvciBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIE1BTElFUl9QTEJFCQkweDAwMDAwMDAxIC8qIFBMQiBFcnJvciBJbnRlcnJ1cHQgRW5hYmxlICovCisvKiBEQ1JOX01BTFRYRU9CSVNSICovCisjZGVmaW5lIE1BTE9CSVNSX0NIMAkJMHg4MDAwMDAwMCAvKiBFT0IgY2hhbm5lbCAxIGJpdCAqLworI2RlZmluZSBNQUxPQklTUl9DSDIJCTB4NDAwMDAwMDAgLyogRU9CIGNoYW5uZWwgMiBiaXQgKi8KKworI2lmZGVmIERDUk5fT0NNMF9CQVNFCisjZGVmaW5lIERDUk5fT0NNSVNBUkMJKERDUk5fT0NNMF9CQVNFICsgMHgwKQkvKiBPQ00gSW5zdHIgU2lkZSBBZGRyIFJhbmdlIENvbXBhcmUgKi8KKyNkZWZpbmUgRENSTl9PQ01JU0NSCShEQ1JOX09DTTBfQkFTRSArIDB4MSkJLyogT0NNIEluc3RyIFNpZGUgQ29udHJvbCAqLworI2RlZmluZSBEQ1JOX09DTURTQVJDCShEQ1JOX09DTTBfQkFTRSArIDB4MikJLyogT0NNIERhdGEgU2lkZSBBZGRyIFJhbmdlIENvbXBhcmUgKi8KKyNkZWZpbmUgRENSTl9PQ01EU0NSCShEQ1JOX09DTTBfQkFTRSArIDB4MykJLyogT0NNIERhdGEgU2lkZSBDb250cm9sICovCisjZW5kaWYKKworI2lmZGVmIERDUk5fUExCMF9CQVNFCisjZGVmaW5lIERDUk5fUExCMF9CRVNSCShEQ1JOX1BMQjBfQkFTRSArIDB4MCkKKyNkZWZpbmUgRENSTl9QTEIwX0JFQVIJKERDUk5fUExCMF9CQVNFICsgMHgyKQorLyogZG9lc24ndCBleGlzdCBvbiBzdGIwM3h4eD8gKi8KKyNkZWZpbmUgRENSTl9QTEIwX0FDUgkoRENSTl9QTEIwX0JBU0UgKyAweDMpCisjZW5kaWYKKworI2lmZGVmIERDUk5fUExCMV9CQVNFCisjZGVmaW5lIERDUk5fUExCMV9CRVNSCShEQ1JOX1BMQjFfQkFTRSArIDB4MCkKKyNkZWZpbmUgRENSTl9QTEIxX0JFQVIJKERDUk5fUExCMV9CQVNFICsgMHgxKQorLyogZG9lc24ndCBleGlzdCBvbiBzdGIwM3h4eD8gKi8KKyNkZWZpbmUgRENSTl9QTEIxX0FDUgkoRENSTl9QTEIxX0JBU0UgKyAweDIpCisjZW5kaWYKKworI2lmZGVmIERDUk5fUExMTVJfQkFTRQorI2RlZmluZSBEQ1JOX1BMTE1SCShEQ1JOX1BMTE1SX0JBU0UgKyAweDApCS8qIFBMMSBNb2RlICovCisjZW5kaWYKKworI2lmZGVmIERDUk5fUE9CMF9CQVNFCisjZGVmaW5lIERDUk5fUE9CMF9CRVNSMAkoRENSTl9QT0IwX0JBU0UgKyAweDApCisjZGVmaW5lIERDUk5fUE9CMF9CRUFSCShEQ1JOX1BPQjBfQkFTRSArIDB4MikKKyNkZWZpbmUgRENSTl9QT0IwX0JFU1IxCShEQ1JOX1BPQjBfQkFTRSArIDB4NCkKKyNlbmRpZgorCisjaWZkZWYgRENSTl9TQ0NSX0JBU0UKKyNkZWZpbmUgRENSTl9TQ0NSCShEQ1JOX1NDQ1JfQkFTRSArIDB4MCkKKyNlbmRpZgorCisjaWZkZWYgRENSTl9TRFJBTTBfQkFTRQorI2RlZmluZSBEQ1JOX1NEUkFNMF9DRkdBRERSCShEQ1JOX1NEUkFNMF9CQVNFICsgMHgwKSAvKiBNZW0gQ3RybHIgQWRkcmVzcyAqLworI2RlZmluZSBEQ1JOX1NEUkFNMF9DRkdEQVRBCShEQ1JOX1NEUkFNMF9CQVNFICsgMHgxKSAvKiBNZW0gQ3RybHIgRGF0YSAqLworI2VuZGlmCisKKyNpZmRlZiBEQ1JOX1VJQzBfQkFTRQorI2RlZmluZSBEQ1JOX1VJQzBfU1IJKERDUk5fVUlDMF9CQVNFICsgMHgwKQorI2RlZmluZSBEQ1JOX1VJQzBfRVIJKERDUk5fVUlDMF9CQVNFICsgMHgyKQorI2RlZmluZSBEQ1JOX1VJQzBfQ1IJKERDUk5fVUlDMF9CQVNFICsgMHgzKQorI2RlZmluZSBEQ1JOX1VJQzBfUFIJKERDUk5fVUlDMF9CQVNFICsgMHg0KQorI2RlZmluZSBEQ1JOX1VJQzBfVFIJKERDUk5fVUlDMF9CQVNFICsgMHg1KQorI2RlZmluZSBEQ1JOX1VJQzBfTVNSCShEQ1JOX1VJQzBfQkFTRSArIDB4NikKKyNkZWZpbmUgRENSTl9VSUMwX1ZSCShEQ1JOX1VJQzBfQkFTRSArIDB4NykKKyNkZWZpbmUgRENSTl9VSUMwX1ZDUgkoRENSTl9VSUMwX0JBU0UgKyAweDgpCisjZW5kaWYKKworI2lmZGVmIERDUk5fVUlDMV9CQVNFCisjZGVmaW5lIERDUk5fVUlDMV9TUgkoRENSTl9VSUMxX0JBU0UgKyAweDApCisjZGVmaW5lIERDUk5fVUlDMV9TUlMJKERDUk5fVUlDMV9CQVNFICsgMHgxKQorI2RlZmluZSBEQ1JOX1VJQzFfRVIJKERDUk5fVUlDMV9CQVNFICsgMHgyKQorI2RlZmluZSBEQ1JOX1VJQzFfQ1IJKERDUk5fVUlDMV9CQVNFICsgMHgzKQorI2RlZmluZSBEQ1JOX1VJQzFfUFIJKERDUk5fVUlDMV9CQVNFICsgMHg0KQorI2RlZmluZSBEQ1JOX1VJQzFfVFIJKERDUk5fVUlDMV9CQVNFICsgMHg1KQorI2RlZmluZSBEQ1JOX1VJQzFfTVNSCShEQ1JOX1VJQzFfQkFTRSArIDB4NikKKyNkZWZpbmUgRENSTl9VSUMxX1ZSCShEQ1JOX1VJQzFfQkFTRSArIDB4NykKKyNkZWZpbmUgRENSTl9VSUMxX1ZDUgkoRENSTl9VSUMxX0JBU0UgKyAweDgpCisjZW5kaWYKKworI2lmZGVmIERDUk5fU0RSQU0wX0JBU0UKKyNkZWZpbmUgRENSTl9TRFJBTTBfQ0ZHQUREUgkoRENSTl9TRFJBTTBfQkFTRSArIDB4MCkgLyogTWVtb3J5IENvbnRyb2xsZXIgQWRkcmVzcyAqLworI2RlZmluZSBEQ1JOX1NEUkFNMF9DRkdEQVRBCShEQ1JOX1NEUkFNMF9CQVNFICsgMHgxKSAvKiBNZW1vcnkgQ29udHJvbGxlciBEYXRhICovCisjZW5kaWYKKworI2lmZGVmIERDUk5fT0NNMF9CQVNFCisjZGVmaW5lIERDUk5fT0NNSVNBUkMJKERDUk5fT0NNMF9CQVNFICsgMHgwKSAvKiBPQ00gSW5zdHIgU2lkZSBBZGRyIFJhbmdlIENvbXBhcmUgKi8KKyNkZWZpbmUgRENSTl9PQ01JU0NSCShEQ1JOX09DTTBfQkFTRSArIDB4MSkgLyogT0NNIEluc3RyIFNpZGUgQ29udHJvbCAqLworI2RlZmluZSBEQ1JOX09DTURTQVJDCShEQ1JOX09DTTBfQkFTRSArIDB4MikgLyogT0NNIERhdGEgU2lkZSBBZGRyIFJhbmdlIENvbXBhcmUgKi8KKyNkZWZpbmUgRENSTl9PQ01EU0NSCShEQ1JOX09DTTBfQkFTRSArIDB4MykgLyogT0NNIERhdGEgU2lkZSBDb250cm9sICovCisjZW5kaWYKKworI2VuZGlmIC8qIF9fQVNNX0lCTTQwM19IX18gKi8KKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvaWJtNDA1LmggYi9pbmNsdWRlL2FzbS1wcGMvaWJtNDA1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU1YmU5ZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9pYm00MDUuaApAQCAtMCwwICsxLDI5OSBAQAorLyoKKyAqIEF1dGhvcjogQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+CisgKgorICogMjAwMiAoYykgTW9udGFWaXN0YSwgU29mdHdhcmUsIEluYy4gIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0KKyAqIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcworICogb3IgaW1wbGllZC4KKyAqLworCisjaWZkZWYgX19LRVJORUxfXworI2lmbmRlZiBfX0FTTV9JQk00MDVfSF9fCisjZGVmaW5lIF9fQVNNX0lCTTQwNV9IX18KKworI2lmZGVmIERDUk5fQkVfQkFTRQorI2RlZmluZSBEQ1JOX0JFQVIJKERDUk5fQkVfQkFTRSArIDB4MCkJLyogQnVzIEVycm9yIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRENSTl9CRVNSCShEQ1JOX0JFX0JBU0UgKyAweDEpCS8qIEJ1cyBFcnJvciBTeW5kcm9tZSBSZWdpc3RlciAqLworI2VuZGlmCisvKiBEQ1JOX0JFU1IgKi8KKyNkZWZpbmUgQkVTUl9EU0VTCTB4ODAwMDAwMDAJLyogRGF0YS1TaWRlIEVycm9yIFN0YXR1cyAqLworI2RlZmluZSBCRVNSX0RNRVMJMHg0MDAwMDAwMAkvKiBETUEgRXJyb3IgU3RhdHVzICovCisjZGVmaW5lIEJFU1JfUldTCTB4MjAwMDAwMDAJLyogUmVhZC9Xcml0ZSBTdGF0dXMgKi8KKyNkZWZpbmUgQkVTUl9FVE1BU0sJMHgxQzAwMDAwMAkvKiBFcnJvciBUeXBlICovCisjZGVmaW5lIEVUX1BST1QJMAorI2RlZmluZSBFVF9QQVJJVFkJMQorI2RlZmluZSBFVF9OQ0ZHCTIKKyNkZWZpbmUgRVRfQlVTRVJSCTQKKyNkZWZpbmUgRVRfQlVTVE8JNgorCisvKiBDbG9jayBhbmQgcG93ZXIgbWFuYWdlbWVudCBzaGlmdHMgZm9yIGVtYWNzICovCisjZGVmaW5lIElCTV9DUE1fRU1NSUkJMAkvKiBTaGlmdCB2YWx1ZSBmb3IgTUlJICovCisjZGVmaW5lIElCTV9DUE1fRU1SWAkxCS8qIFNoaWZ0IHZhbHVlIGZvciByZWN2ICovCisjZGVmaW5lIElCTV9DUE1fRU1UWAkyCS8qIFNoaWZ0IHZhbHVlIGZvciBNQUMgKi8KKworI2lmZGVmIERDUk5fQ0hDUl9CQVNFCisjZGVmaW5lIERDUk5fQ0hDUjAJKERDUk5fQ0hDUl9CQVNFICsgMHgwKQkvKiBDaGlwIENvbnRyb2wgUmVnaXN0ZXIgMSAqLworI2RlZmluZSBEQ1JOX0NIQ1IxCShEQ1JOX0NIQ1JfQkFTRSArIDB4MSkJLyogQ2hpcCBDb250cm9sIFJlZ2lzdGVyIDIgKi8KKyNlbmRpZgorI2RlZmluZSBDSFIxX1BDSVBXCTB4MDAwMDgwMDAJLyogUENJIEludCBlbmFibGUvUGVyaXBoZXJhbCBXcml0ZSBlbmFibGUgKi8KKworI2lmZGVmIERDUk5fQ0hQU1JfQkFTRQorI2RlZmluZSBEQ1JOX0NIUFNSCShEQ1JOX0NIUFNSX0JBU0UgKyAweDApCS8qIENoaXAgUGluIFN0cmFwcGluZyAqLworI2VuZGlmCisKKyNpZmRlZiBEQ1JOX0NQTUZSX0JBU0UKKyNkZWZpbmUgRENSTl9DUE1GUgkoRENSTl9DUE1GUl9CQVNFICsgMHgwKQkvKiBDUE0gRm9yY2UgKi8KKyNlbmRpZgorCisjaWZkZWYgRENSTl9DUE1TUl9CQVNFCisjZGVmaW5lIERDUk5fQ1BNU1IJKERDUk5fQ1BNU1JfQkFTRSArIDB4MCkJLyogQ1BNIFN0YXR1cyAqLworI2RlZmluZSBEQ1JOX0NQTUVSCShEQ1JOX0NQTVNSX0JBU0UgKyAweDEpCS8qIENQTSBFbmFibGUgKi8KKyNlbmRpZgorCisjaWZkZWYgRENSTl9EQ1AwX0JBU0UKKy8qIERlY29tcHJlc3Npb24gQ29udHJvbGxlciBBZGRyZXNzICovCisjZGVmaW5lIERDUk5fRENQMF9DRkdBRERSCShEQ1JOX0RDUDBfQkFTRSArIDB4MCkKKy8qIERlY29tcHJlc3Npb24gQ29udHJvbGxlciBEYXRhICovCisjZGVmaW5lIERDUk5fRENQMF9DRkdEQVRBCShEQ1JOX0RDUDBfQkFTRSArIDB4MSkKKyNlbHNlCisjZGVmaW5lIERDUk5fRENQMF9DRkdBRERSCTB4MAorI2RlZmluZSBEQ1JOX0RDUDBfQ0ZHREFUQQkweDAKKyNlbmRpZgorCisjaWZkZWYgRENSTl9ETUEwX0JBU0UKKy8qIERNQSBDaGFubmVsIENvbnRyb2wgUmVnaXN0ZXIgMCAqLworI2RlZmluZSBEQ1JOX0RNQUNSMAkoRENSTl9ETUEwX0JBU0UgKyAweDApCisjZGVmaW5lIERDUk5fRE1BQ1QwCShEQ1JOX0RNQTBfQkFTRSArIDB4MSkJLyogRE1BIENvdW50IFJlZ2lzdGVyIDAgKi8KKy8qIERNQSBEZXN0aW5hdGlvbiBBZGRyZXNzIFJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUgRENSTl9ETUFEQTAJKERDUk5fRE1BMF9CQVNFICsgMHgyKQorLyogRE1BIFNvdXJjZSBBZGRyZXNzIFJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUgRENSTl9ETUFTQTAJKERDUk5fRE1BMF9CQVNFICsgMHgzKQorI2lmZGVmIERDUk5DQVBfRE1BX0NDCisvKiBETUEgQ2hhaW5lZCBDb3VudCBSZWdpc3RlciAwICovCisjZGVmaW5lIERDUk5fRE1BQ0MwCShEQ1JOX0RNQTBfQkFTRSArIDB4NCkKKyNlbmRpZgorI2lmZGVmIERDUk5DQVBfRE1BX1NHCisvKiBETUEgU2NhdHRlci9HYXRoZXIgRGVzY3JpcHRvciBBZGRyIDAgKi8KKyNkZWZpbmUgRENSTl9BU0cwCShEQ1JOX0RNQTBfQkFTRSArIDB4NCkKKyNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBEQ1JOX0RNQTFfQkFTRQorLyogRE1BIENoYW5uZWwgQ29udHJvbCBSZWdpc3RlciAxICovCisjZGVmaW5lIERDUk5fRE1BQ1IxCShEQ1JOX0RNQTFfQkFTRSArIDB4MCkKKyNkZWZpbmUgRENSTl9ETUFDVDEJKERDUk5fRE1BMV9CQVNFICsgMHgxKQkvKiBETUEgQ291bnQgUmVnaXN0ZXIgMSAqLworLyogRE1BIERlc3RpbmF0aW9uIEFkZHJlc3MgUmVnaXN0ZXIgMSAqLworI2RlZmluZSBEQ1JOX0RNQURBMQkoRENSTl9ETUExX0JBU0UgKyAweDIpCisvKiBETUEgU291cmNlIEFkZHJlc3MgUmVnaXN0ZXIgMSAqLworI2RlZmluZSBEQ1JOX0RNQVNBMQkoRENSTl9ETUExX0JBU0UgKyAweDMpCS8qIERNQSBTb3VyY2UgQWRkcmVzcyBSZWdpc3RlciAxICovCisjaWZkZWYgRENSTkNBUF9ETUFfQ0MKKy8qIERNQSBDaGFpbmVkIENvdW50IFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgRENSTl9ETUFDQzEJKERDUk5fRE1BMV9CQVNFICsgMHg0KQorI2VuZGlmCisjaWZkZWYgRENSTkNBUF9ETUFfU0cKKy8qIERNQSBTY2F0dGVyL0dhdGhlciBEZXNjcmlwdG9yIEFkZHIgMSAqLworI2RlZmluZSBEQ1JOX0FTRzEJKERDUk5fRE1BMV9CQVNFICsgMHg0KQorI2VuZGlmCisjZW5kaWYKKworI2lmZGVmIERDUk5fRE1BMl9CQVNFCisjZGVmaW5lIERDUk5fRE1BQ1IyCShEQ1JOX0RNQTJfQkFTRSArIDB4MCkJLyogRE1BIENoYW5uZWwgQ29udHJvbCBSZWdpc3RlciAyICovCisjZGVmaW5lIERDUk5fRE1BQ1QyCShEQ1JOX0RNQTJfQkFTRSArIDB4MSkJLyogRE1BIENvdW50IFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgRENSTl9ETUFEQTIJKERDUk5fRE1BMl9CQVNFICsgMHgyKQkvKiBETUEgRGVzdGluYXRpb24gQWRkcmVzcyBSZWdpc3RlciAyICovCisjZGVmaW5lIERDUk5fRE1BU0EyCShEQ1JOX0RNQTJfQkFTRSArIDB4MykJLyogRE1BIFNvdXJjZSBBZGRyZXNzIFJlZ2lzdGVyIDIgKi8KKyNpZmRlZiBEQ1JOQ0FQX0RNQV9DQworI2RlZmluZSBEQ1JOX0RNQUNDMgkoRENSTl9ETUEyX0JBU0UgKyAweDQpCS8qIERNQSBDaGFpbmVkIENvdW50IFJlZ2lzdGVyIDIgKi8KKyNlbmRpZgorI2lmZGVmIERDUk5DQVBfRE1BX1NHCisjZGVmaW5lIERDUk5fQVNHMgkoRENSTl9ETUEyX0JBU0UgKyAweDQpCS8qIERNQSBTY2F0dGVyL0dhdGhlciBEZXNjcmlwdG9yIEFkZHIgMiAqLworI2VuZGlmCisjZW5kaWYKKworI2lmZGVmIERDUk5fRE1BM19CQVNFCisjZGVmaW5lIERDUk5fRE1BQ1IzCShEQ1JOX0RNQTNfQkFTRSArIDB4MCkJLyogRE1BIENoYW5uZWwgQ29udHJvbCBSZWdpc3RlciAzICovCisjZGVmaW5lIERDUk5fRE1BQ1QzCShEQ1JOX0RNQTNfQkFTRSArIDB4MSkJLyogRE1BIENvdW50IFJlZ2lzdGVyIDMgKi8KKyNkZWZpbmUgRENSTl9ETUFEQTMJKERDUk5fRE1BM19CQVNFICsgMHgyKQkvKiBETUEgRGVzdGluYXRpb24gQWRkcmVzcyBSZWdpc3RlciAzICovCisjZGVmaW5lIERDUk5fRE1BU0EzCShEQ1JOX0RNQTNfQkFTRSArIDB4MykJLyogRE1BIFNvdXJjZSBBZGRyZXNzIFJlZ2lzdGVyIDMgKi8KKyNpZmRlZiBEQ1JOQ0FQX0RNQV9DQworI2RlZmluZSBEQ1JOX0RNQUNDMwkoRENSTl9ETUEzX0JBU0UgKyAweDQpCS8qIERNQSBDaGFpbmVkIENvdW50IFJlZ2lzdGVyIDMgKi8KKyNlbmRpZgorI2lmZGVmIERDUk5DQVBfRE1BX1NHCisjZGVmaW5lIERDUk5fQVNHMwkoRENSTl9ETUEzX0JBU0UgKyAweDQpCS8qIERNQSBTY2F0dGVyL0dhdGhlciBEZXNjcmlwdG9yIEFkZHIgMyAqLworI2VuZGlmCisjZW5kaWYKKworI2lmZGVmIERDUk5fRE1BU1JfQkFTRQorI2RlZmluZSBEQ1JOX0RNQVNSCShEQ1JOX0RNQVNSX0JBU0UgKyAweDApCS8qIERNQSBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNpZmRlZiBEQ1JOQ0FQX0RNQV9TRworI2RlZmluZSBEQ1JOX0FTR0MJKERDUk5fRE1BU1JfQkFTRSArIDB4MykJLyogRE1BIFNjYXR0ZXIvR2F0aGVyIENvbW1hbmQgKi8KKy8qIGRvbid0IGtub3cgaWYgdGhlc2UgdHdvIHJlZ2lzdGVycyBhbHdheXMgZXhpc3QgaWYgc2NhdHRlci9nYXRoZXIgZXhpc3RzICovCisjZGVmaW5lIERDUk5fUE9MCShEQ1JOX0RNQVNSX0JBU0UgKyAweDYpCS8qIERNQSBQb2xhcml0eSBSZWdpc3RlciAqLworI2RlZmluZSBEQ1JOX1NMUAkoRENSTl9ETUFTUl9CQVNFICsgMHg1KQkvKiBETUEgU2xlZXAgUmVnaXN0ZXIgKi8KKyNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBEQ1JOX0VCQ19CQVNFCisjZGVmaW5lIERDUk5fRUJDQ0ZHQURSCShEQ1JOX0VCQ19CQVNFICsgMHgwKQkvKiBQZXJpcGhlcmFsIENvbnRyb2xsZXIgQWRkcmVzcyAqLworI2RlZmluZSBEQ1JOX0VCQ0NGR0RBVEEJKERDUk5fRUJDX0JBU0UgKyAweDEpCS8qIFBlcmlwaGVyYWwgQ29udHJvbGxlciBEYXRhICovCisjZW5kaWYKKworI2lmZGVmIERDUk5fRVhJRVJfQkFTRQorI2RlZmluZSBEQ1JOX0VYSUVSCShEQ1JOX0VYSUVSX0JBU0UgKyAweDApCS8qIEV4dGVybmFsIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8KKyNlbmRpZgorCisjaWZkZWYgRENSTl9FWElTUl9CQVNFCisjZGVmaW5lIERDUk5fRVhJU1IJKERDUk5fRVhJU1JfQkFTRSArIDB4MCkJLyogRXh0ZXJuYWwgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLworI2VuZGlmCisKKyNkZWZpbmUgRVhJRVJfQ0lFCTB4ODAwMDAwMDAJLyogQ3JpdGljYWwgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBFWElFUl9TUklFCTB4MDgwMDAwMDAJLyogU2VyaWFsIFBvcnQgUnggSW50LiBFbmFibGUgKi8KKyNkZWZpbmUgRVhJRVJfU1RJRQkweDA0MDAwMDAwCS8qIFNlcmlhbCBQb3J0IFR4IEludC4gRW5hYmxlICovCisjZGVmaW5lIEVYSUVSX0pSSUUJMHgwMjAwMDAwMAkvKiBKVEFHIFNlcmlhbCBQb3J0IFJ4IEludC4gRW5hYmxlICovCisjZGVmaW5lIEVYSUVSX0pUSUUJMHgwMTAwMDAwMAkvKiBKVEFHIFNlcmlhbCBQb3J0IFR4IEludC4gRW5hYmxlICovCisjZGVmaW5lIEVYSUVSX0QwSUUJMHgwMDgwMDAwMAkvKiBETUEgQ2hhbm5lbCAwIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgRVhJRVJfRDFJRQkweDAwNDAwMDAwCS8qIERNQSBDaGFubmVsIDEgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBFWElFUl9EMklFCTB4MDAyMDAwMDAJLyogRE1BIENoYW5uZWwgMiBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIEVYSUVSX0QzSUUJMHgwMDEwMDAwMAkvKiBETUEgQ2hhbm5lbCAzIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgRVhJRVJfRTBJRQkweDAwMDAwMDEwCS8qIEV4dGVybmFsIEludGVycnVwdCAwIEVuYWJsZSAqLworI2RlZmluZSBFWElFUl9FMUlFCTB4MDAwMDAwMDgJLyogRXh0ZXJuYWwgSW50ZXJydXB0IDEgRW5hYmxlICovCisjZGVmaW5lIEVYSUVSX0UySUUJMHgwMDAwMDAwNAkvKiBFeHRlcm5hbCBJbnRlcnJ1cHQgMiBFbmFibGUgKi8KKyNkZWZpbmUgRVhJRVJfRTNJRQkweDAwMDAwMDAyCS8qIEV4dGVybmFsIEludGVycnVwdCAzIEVuYWJsZSAqLworI2RlZmluZSBFWElFUl9FNElFCTB4MDAwMDAwMDEJLyogRXh0ZXJuYWwgSW50ZXJydXB0IDQgRW5hYmxlICovCisKKyNpZmRlZiBEQ1JOX0lPQ1JfQkFTRQorI2RlZmluZSBEQ1JOX0lPQ1IJKERDUk5fSU9DUl9CQVNFICsgMHgwKQkvKiBJbnB1dC9PdXRwdXQgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworI2VuZGlmCisjZGVmaW5lIElPQ1JfRTBURQkweDgwMDAwMDAwCisjZGVmaW5lIElPQ1JfRTBMUAkweDQwMDAwMDAwCisjZGVmaW5lIElPQ1JfRTFURQkweDIwMDAwMDAwCisjZGVmaW5lIElPQ1JfRTFMUAkweDEwMDAwMDAwCisjZGVmaW5lIElPQ1JfRTJURQkweDA4MDAwMDAwCisjZGVmaW5lIElPQ1JfRTJMUAkweDA0MDAwMDAwCisjZGVmaW5lIElPQ1JfRTNURQkweDAyMDAwMDAwCisjZGVmaW5lIElPQ1JfRTNMUAkweDAxMDAwMDAwCisjZGVmaW5lIElPQ1JfRTRURQkweDAwODAwMDAwCisjZGVmaW5lIElPQ1JfRTRMUAkweDAwNDAwMDAwCisjZGVmaW5lIElPQ1JfRURUCTB4MDAwODAwMDAKKyNkZWZpbmUgSU9DUl9TT1IJMHgwMDA0MDAwMAorI2RlZmluZSBJT0NSX0VETwkweDAwMDA4MDAwCisjZGVmaW5lIElPQ1JfMlhDCTB4MDAwMDQwMDAKKyNkZWZpbmUgSU9DUl9BVEMJMHgwMDAwMjAwMAorI2RlZmluZSBJT0NSX1NQRAkweDAwMDAxMDAwCisjZGVmaW5lIElPQ1JfQkVNCTB4MDAwMDA4MDAKKyNkZWZpbmUgSU9DUl9QVEQJMHgwMDAwMDQwMAorI2RlZmluZSBJT0NSX0FSRQkweDAwMDAwMDgwCisjZGVmaW5lIElPQ1JfRFJDCTB4MDAwMDAwMjAKKyNkZWZpbmUgSU9DUl9SRE0oeCkJKCgoeCkgJiAweDMpIDw8IDMpCisjZGVmaW5lIElPQ1JfVENTCTB4MDAwMDAwMDQKKyNkZWZpbmUgSU9DUl9TQ1MJMHgwMDAwMDAwMgorI2RlZmluZSBJT0NSX1NQQwkweDAwMDAwMDAxCisKKyNkZWZpbmUgRENSTl9NQUxDUihiYXNlKQkoYmFzZSArIDB4MCkJLyogTUFMIENvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgRENSTl9NQUxEQlIoYmFzZSkJKChiYXNlKSArIDB4MykJLyogRGVidWcgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRENSTl9NQUxFU1IoYmFzZSkJKChiYXNlKSArIDB4MSkJLyogRXJyb3IgU3RhdHVzICovCisjZGVmaW5lIERDUk5fTUFMSUVSKGJhc2UpCSgoYmFzZSkgKyAweDIpCS8qIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgRENSTl9NQUxUWENBUlIoYmFzZSkJKChiYXNlKSArIDB4NSkJLyogVFggQ2hhbm5lZCBBY3RpdmUgUmVzZXQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRENSTl9NQUxUWENBU1IoYmFzZSkJKChiYXNlKSArIDB4NCkJLyogVFggQ2hhbm5lbCBBY3RpdmUgU2V0IFJlZ2lzdGVyICovCisjZGVmaW5lIERDUk5fTUFMVFhERUlSKGJhc2UpCSgoYmFzZSkgKyAweDcpCS8qIFR4IERlc2NyaXB0b3IgRXJyb3IgSW50ZXJydXB0ICovCisjZGVmaW5lIERDUk5fTUFMVFhFT0JJU1IoYmFzZSkJKChiYXNlKSArIDB4NikJLyogVHggRW5kIG9mIEJ1ZmZlciBJbnRlcnJ1cHQgU3RhdHVzICovCisjZGVmaW5lIERDUk5fTUFMUlhDQVJSKGJhc2UpCSgoYmFzZSkgKyAweDExKQkvKiBSWCBDaGFubmVkIEFjdGl2ZSBSZXNldCBSZWdpc3RlciAqLworI2RlZmluZSBEQ1JOX01BTFJYQ0FTUihiYXNlKQkoKGJhc2UpICsgMHgxMCkJLyogUlggQ2hhbm5lbCBBY3RpdmUgU2V0IFJlZ2lzdGVyICovCisjZGVmaW5lIERDUk5fTUFMUlhERUlSKGJhc2UpCSgoYmFzZSkgKyAweDEzKQkvKiBSeCBEZXNjcmlwdG9yIEVycm9yIEludGVycnVwdCAqLworI2RlZmluZSBEQ1JOX01BTFJYRU9CSVNSKGJhc2UpCSgoYmFzZSkgKyAweDEyKQkvKiBSeCBFbmQgb2YgQnVmZmVyIEludGVycnVwdCBTdGF0dXMgKi8KKyNkZWZpbmUgRENSTl9NQUxSWENUUDBSKGJhc2UpCSgoYmFzZSkgKyAweDQwKQkvKiBDaGFubmVsIFJ4IDAgQ2hhbm5lbCBUYWJsZSBQb2ludGVyICovCisjZGVmaW5lIERDUk5fTUFMUlhDVFAxUihiYXNlKQkoKGJhc2UpICsgMHg0MSkJLyogQ2hhbm5lbCBSeCAxIENoYW5uZWwgVGFibGUgUG9pbnRlciAqLworI2RlZmluZSBEQ1JOX01BTFRYQ1RQMFIoYmFzZSkJKChiYXNlKSArIDB4MjApCS8qIENoYW5uZWwgVHggMCBDaGFubmVsIFRhYmxlIFBvaW50ZXIgKi8KKyNkZWZpbmUgRENSTl9NQUxUWENUUDFSKGJhc2UpCSgoYmFzZSkgKyAweDIxKQkvKiBDaGFubmVsIFR4IDEgQ2hhbm5lbCBUYWJsZSBQb2ludGVyICovCisjZGVmaW5lIERDUk5fTUFMVFhDVFAyUihiYXNlKQkoKGJhc2UpICsgMHgyMikJLyogQ2hhbm5lbCBUeCAyIENoYW5uZWwgVGFibGUgUG9pbnRlciAqLworI2RlZmluZSBEQ1JOX01BTFRYQ1RQM1IoYmFzZSkJKChiYXNlKSArIDB4MjMpCS8qIENoYW5uZWwgVHggMyBDaGFubmVsIFRhYmxlIFBvaW50ZXIgKi8KKyNkZWZpbmUgRENSTl9NQUxSQ0JTMChiYXNlKQkoKGJhc2UpICsgMHg2MCkJLyogQ2hhbm5lbCBSeCAwIENoYW5uZWwgQnVmZmVyIFNpemUgKi8KKyNkZWZpbmUgRENSTl9NQUxSQ0JTMShiYXNlKQkoKGJhc2UpICsgMHg2MSkJLyogQ2hhbm5lbCBSeCAxIENoYW5uZWwgQnVmZmVyIFNpemUgKi8KKworIC8qIERDUk5fTUFMQ1IgKi8KKyNkZWZpbmUgTUFMQ1JfTU1TUgkJMHg4MDAwMDAwMAkvKiBNQUwgU29mdHdhcmUgcmVzZXQgKi8KKyNkZWZpbmUgTUFMQ1JfUExCUF8xCQkweDAwNDAwMDAwCS8qIE1BTCByZXFlc3QgcHJpb3JpdHk6ICovCisjZGVmaW5lIE1BTENSX1BMQlBfMgkJMHgwMDgwMDAwMAkvKiBsb3dzZXN0IGlzIDAwICovCisjZGVmaW5lIE1BTENSX1BMQlBfMwkJMHgwMEMwMDAwMAkvKiBoaWdoZXN0ICovCisjZGVmaW5lIE1BTENSX0dBCQkweDAwMjAwMDAwCS8qIEd1YXJkZWQgQWN0aXZlIEJpdCAqLworI2RlZmluZSBNQUxDUl9PQQkJMHgwMDEwMDAwMAkvKiBPcmRlcmVkIEFjdGl2ZSBCaXQgKi8KKyNkZWZpbmUgTUFMQ1JfUExCTEUJCTB4MDAwODAwMDAJLyogUExCIExvY2sgRXJyb3IgQml0ICovCisjZGVmaW5lIE1BTENSX1BMQkxUXzEJCTB4MDAwNDAwMDAJLyogUExCIExhdGVuY3kgVGltZXIgKi8KKyNkZWZpbmUgTUFMQ1JfUExCTFRfMiAJCTB4MDAwMjAwMDAKKyNkZWZpbmUgTUFMQ1JfUExCTFRfMwkJMHgwMDAxMDAwMAorI2RlZmluZSBNQUxDUl9QTEJMVF80CQkweDAwMDA4MDAwCisjZGVmaW5lIE1BTENSX1BMQkxUX0RFRkFVTFQJMHgwMDA3ODAwMAkvKiBKU1A6IElzIHRoaXMgYSB2YWxpZCBkZWZhdWx0Pz8gKi8KKyNkZWZpbmUgTUFMQ1JfUExCQgkJMHgwMDAwNDAwMAkvKiBQTEIgQnVyc3QgRGVhY3RpdmF0aW9uIEJpdCAqLworI2RlZmluZSBNQUxDUl9PUEJCTAkJMHgwMDAwMDA4MAkvKiBPUEIgTG9jayBCaXQgKi8KKyNkZWZpbmUgTUFMQ1JfRU9QSUUJCTB4MDAwMDAwMDQJLyogRW5kIE9mIFBhY2tldCBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIE1BTENSX0xFQQkJMHgwMDAwMDAwMgkvKiBMb2NrZWQgRXJyb3IgQWN0aXZlICovCisjZGVmaW5lIE1BTENSX01TRAkJMHgwMDAwMDAwMQkvKiBNQUwgU2Nyb2xsIERlc2NyaXB0b3IgQml0ICovCisvKiBEQ1JOX01BTEVTUiAqLworI2RlZmluZSBNQUxFU1JfRVZCCQkweDgwMDAwMDAwCS8qIEVycm9yIFZhbGlkIEJpdCAqLworI2RlZmluZSBNQUxFU1JfQ0lEUlgJCTB4NDAwMDAwMDAJLyogQ2hhbm5lbCBJRCBSZWNlaXZlICovCisjZGVmaW5lIE1BTEVTUl9ERQkJMHgwMDEwMDAwMAkvKiBEZXNjcmlwdG9yIEVycm9yICovCisjZGVmaW5lIE1BTEVTUl9PRU4JCTB4MDAwODAwMDAJLyogT1BCIE5vbi1GdWxsd29yZCBFcnJvciAqLworI2RlZmluZSBNQUxFU1JfT1RFCQkweDAwMDQwMDAwCS8qIE9QQiBUaW1lb3V0IEVycm9yICovCisjZGVmaW5lIE1BTEVTUl9PU0UJCTB4MDAwMjAwMDAJLyogT1BCIFNsYXZlIEVycm9yICovCisjZGVmaW5lIE1BTEVTUl9QRUlOCQkweDAwMDEwMDAwCS8qIFBMQiBCdXMgRXJyb3IgSW5kaWNhdGlvbiAqLworI2RlZmluZSBNQUxFU1JfREVJCQkweDAwMDAwMDEwCS8qIERlc2NyaXB0b3IgRXJyb3IgSW50ZXJydXB0ICovCisjZGVmaW5lIE1BTEVTUl9PTkVJCQkweDAwMDAwMDA4CS8qIE9QQiBOb24tRnVsbHdvcmQgRXJyb3IgSW50ZXJydXB0ICovCisjZGVmaW5lIE1BTEVTUl9PVEVJCQkweDAwMDAwMDA0CS8qIE9QQiBUaW1lb3V0IEVycm9yIEludGVycnVwdCAqLworI2RlZmluZSBNQUxFU1JfT1NFSQkJMHgwMDAwMDAwMgkvKiBPUEIgU2xhY2UgRXJyb3IgSW50ZXJydXB0ICovCisjZGVmaW5lIE1BTEVTUl9QQkVJCQkweDAwMDAwMDAxCS8qIFBMQiBCdXMgRXJyb3IgSW50ZXJydXB0ICovCisvKiBEQ1JOX01BTElFUiAqLworI2RlZmluZSBNQUxJRVJfREUJCTB4MDAwMDAwMTAJLyogRGVzY3JpcHRvciBFcnJvciBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIE1BTElFUl9ORQkJMHgwMDAwMDAwOAkvKiBPUEIgTm9uLXdvcmQgVHJhbnNmZXIgSW50IEVuYWJsZSAqLworI2RlZmluZSBNQUxJRVJfVEUJCTB4MDAwMDAwMDQJLyogT1BCIFRpbWUgT3V0IEVycm9yIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgTUFMSUVSX09QQkUJCTB4MDAwMDAwMDIJLyogT1BCIFNsYXZlIEVycm9yIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgTUFMSUVSX1BMQkUJCTB4MDAwMDAwMDEJLyogUExCIEVycm9yIEludGVycnVwdCBFbmFibGUgKi8KKy8qIERDUk5fTUFMVFhFT0JJU1IgKi8KKyNkZWZpbmUgTUFMT0JJU1JfQ0gwCQkweDgwMDAwMDAwCS8qIEVPQiBjaGFubmVsIDEgYml0ICovCisjZGVmaW5lIE1BTE9CSVNSX0NIMgkJMHg0MDAwMDAwMAkvKiBFT0IgY2hhbm5lbCAyIGJpdCAqLworCisjaWZkZWYgRENSTl9QTEIwX0JBU0UKKyNkZWZpbmUgRENSTl9QTEIwX0JFU1IJKERDUk5fUExCMF9CQVNFICsgMHgwKQorI2RlZmluZSBEQ1JOX1BMQjBfQkVBUgkoRENSTl9QTEIwX0JBU0UgKyAweDIpCisvKiBkb2Vzbid0IGV4aXN0IG9uIHN0YjAzeHh4PyAqLworI2RlZmluZSBEQ1JOX1BMQjBfQUNSCShEQ1JOX1BMQjBfQkFTRSArIDB4MykKKyNlbmRpZgorCisjaWZkZWYgRENSTl9QTEIxX0JBU0UKKyNkZWZpbmUgRENSTl9QTEIxX0JFU1IJKERDUk5fUExCMV9CQVNFICsgMHgwKQorI2RlZmluZSBEQ1JOX1BMQjFfQkVBUgkoRENSTl9QTEIxX0JBU0UgKyAweDEpCisvKiBkb2Vzbid0IGV4aXN0IG9uIHN0YjAzeHh4PyAqLworI2RlZmluZSBEQ1JOX1BMQjFfQUNSCShEQ1JOX1BMQjFfQkFTRSArIDB4MikKKyNlbmRpZgorCisjaWZkZWYgRENSTl9QTExNUl9CQVNFCisjZGVmaW5lIERDUk5fUExMTVIJKERDUk5fUExMTVJfQkFTRSArIDB4MCkJLyogUEwxIE1vZGUgKi8KKyNlbmRpZgorCisjaWZkZWYgRENSTl9QT0IwX0JBU0UKKyNkZWZpbmUgRENSTl9QT0IwX0JFU1IwCShEQ1JOX1BPQjBfQkFTRSArIDB4MCkKKyNkZWZpbmUgRENSTl9QT0IwX0JFQVIJKERDUk5fUE9CMF9CQVNFICsgMHgyKQorI2RlZmluZSBEQ1JOX1BPQjBfQkVTUjEJKERDUk5fUE9CMF9CQVNFICsgMHg0KQorI2VuZGlmCisKKyNkZWZpbmUgRENSTl9VSUNfU1IoYmFzZSkJKGJhc2UgKyAweDApCisjZGVmaW5lIERDUk5fVUlDX0VSKGJhc2UpCShiYXNlICsgMHgyKQorI2RlZmluZSBEQ1JOX1VJQ19DUihiYXNlKQkoYmFzZSArIDB4MykKKyNkZWZpbmUgRENSTl9VSUNfUFIoYmFzZSkJKGJhc2UgKyAweDQpCisjZGVmaW5lIERDUk5fVUlDX1RSKGJhc2UpCShiYXNlICsgMHg1KQorI2RlZmluZSBEQ1JOX1VJQ19NU1IoYmFzZSkJKGJhc2UgKyAweDYpCisjZGVmaW5lIERDUk5fVUlDX1ZSKGJhc2UpCShiYXNlICsgMHg3KQorI2RlZmluZSBEQ1JOX1VJQ19WQ1IoYmFzZSkJKGJhc2UgKyAweDgpCisKKyNpZmRlZiBEQ1JOX1NEUkFNMF9CQVNFCisjZGVmaW5lIERDUk5fU0RSQU0wX0NGR0FERFIJKERDUk5fU0RSQU0wX0JBU0UgKyAweDApCS8qIE1lbW9yeSBDb250cm9sbGVyIEFkZHJlc3MgKi8KKyNkZWZpbmUgRENSTl9TRFJBTTBfQ0ZHREFUQQkoRENSTl9TRFJBTTBfQkFTRSArIDB4MSkJLyogTWVtb3J5IENvbnRyb2xsZXIgRGF0YSAqLworI2VuZGlmCisKKyNpZmRlZiBEQ1JOX09DTTBfQkFTRQorI2RlZmluZSBEQ1JOX09DTUlTQVJDCShEQ1JOX09DTTBfQkFTRSArIDB4MCkJLyogT0NNIEluc3RyIFNpZGUgQWRkciBSYW5nZSBDb21wYXJlICovCisjZGVmaW5lIERDUk5fT0NNSVNDUgkoRENSTl9PQ00wX0JBU0UgKyAweDEpCS8qIE9DTSBJbnN0ciBTaWRlIENvbnRyb2wgKi8KKyNkZWZpbmUgRENSTl9PQ01EU0FSQwkoRENSTl9PQ00wX0JBU0UgKyAweDIpCS8qIE9DTSBEYXRhIFNpZGUgQWRkciBSYW5nZSBDb21wYXJlICovCisjZGVmaW5lIERDUk5fT0NNRFNDUgkoRENSTl9PQ00wX0JBU0UgKyAweDMpCS8qIE9DTSBEYXRhIFNpZGUgQ29udHJvbCAqLworI2VuZGlmCisKKyNlbmRpZgkJCQkvKiBfX0FTTV9JQk00MDVfSF9fICovCisjZW5kaWYJCQkJLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL2libTQ0eC5oIGIvaW5jbHVkZS9hc20tcHBjL2libTQ0eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3ZjA1MTEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGMvaWJtNDR4LmgKQEAgLTAsMCArMSw1OTkgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1wcGMvaWJtNDR4LmgKKyAqCisgKiBQUEM0NHggZGVmaW5pdGlvbnMKKyAqCisgKiBNYXR0IFBvcnRlciA8bXBvcnRlckBrZXJuZWwuY3Jhc2hpbmcub3JnPgorICoKKyAqIENvcHlyaWdodCAyMDAyLTIwMDUgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZkZWYgX19LRVJORUxfXworI2lmbmRlZiBfX0FTTV9JQk00NHhfSF9fCisjZGVmaW5lIF9fQVNNX0lCTTQ0eF9IX18KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjaWZuZGVmIE5SX0JPQVJEX0lSUVMKKyNkZWZpbmUgTlJfQk9BUkRfSVJRUyAwCisjZW5kaWYKKworI2RlZmluZSBfSU9fQkFTRQlpc2FfaW9fYmFzZQorI2RlZmluZSBfSVNBX01FTV9CQVNFCWlzYV9tZW1fYmFzZQorI2RlZmluZSBQQ0lfRFJBTV9PRkZTRVQJcGNpX2RyYW1fb2Zmc2V0CisKKy8qIFRMQiBlbnRyeSBvZmZzZXQvc2l6ZSB1c2VkIGZvciBwaW5uaW5nIGtlcm5lbCBsb3dtZW0gKi8KKyNkZWZpbmUgUFBDNDR4X1BJTl9TSElGVAkyOAorI2RlZmluZSBQUEM0NHhfUElOX1NJWkUJCSgxIDw8IFBQQzQ0eF9QSU5fU0hJRlQpCisKKy8qIExvd2VzdCBUTEIgc2xvdCBjb25zdW1lZCBieSB0aGUgZGVmYXVsdCBwaW5uZWQgVExCcyAqLworI2RlZmluZSBQUEM0NHhfTE9XX1NMT1QJCTYzCisKKy8qIExTIDMyLWJpdHMgb2YgVUFSVDAgcGh5c2ljYWwgYWRkcmVzcyBsb2NhdGlvbiBmb3IgZWFybHkgc2VyaWFsIHRleHQgZGVidWcgKi8KKyNpZmRlZiBDT05GSUdfNDQwU1AKKyNkZWZpbmUgVUFSVDBfUEhZU19JT19CQVNFCTB4ZjAwMDAyMDAKKyNlbHNlCisjZGVmaW5lIFVBUlQwX1BIWVNfSU9fQkFTRQkweDQwMDAwMjAwCisjZW5kaWYKKworLyoKKyAqIFhYWCBUaGlzIDM2LWJpdCB0cmFwIHN0dWZmIHdpbGwgbW92ZSBzb21ld2hlcmUgaW4gc3lzbGliLworICogd2hlbiB3ZSByZXdvcmsvYWJzdHJhY3QgdGhlIFBQQzQ0eCBQQ0ktWCBoYW5kbGluZyAtbWRwCisgKi8KKworLyoKKyAqIFN0YW5kYXJkIDRHQiAicGFnZSIgZGVmaW5pdGlvbnMKKyAqLworI2lmZGVmIENPTkZJR180NDBTUAorI2RlZmluZQlQUEM0NHhfSU9fUEFHRQkJMHgwMDAwMDAwMTAwMDAwMDAwVUxMCisjZGVmaW5lCVBQQzQ0eF9QQ0lDRkdfUEFHRQkweDAwMDAwMDA5MDAwMDAwMDBVTEwKKyNkZWZpbmUJUFBDNDR4X1BDSUlPX1BBR0UJUFBDNDR4X1BDSUNGR19QQUdFCisjZGVmaW5lCVBQQzQ0eF9QQ0lNRU1fUEFHRQkweDAwMDAwMDBhMDAwMDAwMDBVTEwKKyNlbHNlCisjZGVmaW5lCVBQQzQ0eF9JT19QQUdFCQkweDAwMDAwMDAxMDAwMDAwMDBVTEwKKyNkZWZpbmUJUFBDNDR4X1BDSUNGR19QQUdFCTB4MDAwMDAwMDIwMDAwMDAwMFVMTAorI2RlZmluZQlQUEM0NHhfUENJSU9fUEFHRQlQUEM0NHhfUENJQ0ZHX1BBR0UKKyNkZWZpbmUJUFBDNDR4X1BDSU1FTV9QQUdFCTB4MDAwMDAwMDMwMDAwMDAwMFVMTAorI2VuZGlmCisKKy8qCisgKiAzNi1iaXQgdHJhcCByYW5nZXMKKyAqLworI2lmZGVmIENPTkZJR180NDBTUAorI2RlZmluZSBQUEM0NHhfSU9fTE8JCTB4ZjAwMDAwMDBVTAorI2RlZmluZSBQUEM0NHhfSU9fSEkJCTB4ZjAwMDBmZmZVTAorI2RlZmluZSBQUEM0NHhfUENJMENGR19MTwkweDBlYzAwMDAwVUwKKyNkZWZpbmUgUFBDNDR4X1BDSTBDRkdfSEkJMHgwZWMwMDAwN1VMCisjZGVmaW5lIFBQQzQ0eF9QQ0kxQ0ZHX0xPCTB4MWVjMDAwMDBVTAorI2RlZmluZSBQUEM0NHhfUENJMUNGR19ISQkweDFlYzAwMDA3VUwKKyNkZWZpbmUgUFBDNDR4X1BDSTJDRkdfTE8JMHgyZWMwMDAwMFVMCisjZGVmaW5lIFBQQzQ0eF9QQ0kyQ0ZHX0hJCTB4MmVjMDAwMDdVTAorI2RlZmluZSBQUEM0NHhfUENJTUVNX0xPCTB4ODAwMDAwMDBVTAorI2RlZmluZSBQUEM0NHhfUENJTUVNX0hJCTB4ZGZmZmZmZmZVTAorI2Vsc2UKKyNkZWZpbmUgUFBDNDR4X0lPX0xPCQkweDQwMDAwMDAwVUwKKyNkZWZpbmUgUFBDNDR4X0lPX0hJCQkweDQwMDAwZmZmVUwKKyNkZWZpbmUgUFBDNDR4X1BDSTBDRkdfTE8JMHgwZWMwMDAwMFVMCisjZGVmaW5lIFBQQzQ0eF9QQ0kwQ0ZHX0hJCTB4MGVjMDAwMDdVTAorI2RlZmluZSBQUEM0NHhfUENJTUVNX0xPCTB4ODAwMDIwMDBVTAorI2RlZmluZSBQUEM0NHhfUENJTUVNX0hJCTB4ZmZmZmZmZmZVTAorI2VuZGlmCisKKy8qCisgKiBUaGUgInJlc2lkdWFsIiBib2FyZCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUgdGhlIGJvb3QgbG9hZGVyIHBhc3NlcworICogaW50byB0aGUga2VybmVsLgorICovCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisvKgorICogRENSTiBkZWZpbml0aW9ucworICovCisKKworLyogQ1BScyAoNDQwR1ggYW5kIDQ0MFNQKSAqLworI2RlZmluZSBEQ1JOX0NQUl9DT05GSUdfQUREUgkweGMKKyNkZWZpbmUgRENSTl9DUFJfQ09ORklHX0RBVEEJMHhkCisKKyNkZWZpbmUgRENSTl9DUFJfQ0xLVVBECQkweDAwMjAKKyNkZWZpbmUgRENSTl9DUFJfUExMQwkJMHgwMDQwCisjZGVmaW5lIERDUk5fQ1BSX1BMTEQJCTB4MDA2MAorI2RlZmluZSBEQ1JOX0NQUl9QUklNQUQJCTB4MDA4MAorI2RlZmluZSBEQ1JOX0NQUl9QUklNQkQJCTB4MDBhMAorI2RlZmluZSBEQ1JOX0NQUl9PUEJECQkweDAwYzAKKyNkZWZpbmUgRENSTl9DUFJfUEVSRAkJMHgwMGUwCisjZGVmaW5lIERDUk5fQ1BSX01BTEQJCTB4MDEwMAorCisvKiBDUFJzIHJlYWQvd3JpdGUgaGVscGVyIG1hY3JvcyAqLworI2RlZmluZSBDUFJfUkVBRChvZmZzZXQpICh7XAorCW10ZGNyKERDUk5fQ1BSX0NPTkZJR19BRERSLCBvZmZzZXQpOyBcCisJbWZkY3IoRENSTl9DUFJfQ09ORklHX0RBVEEpO30pCisjZGVmaW5lIENQUl9XUklURShvZmZzZXQsIGRhdGEpICh7XAorCW10ZGNyKERDUk5fQ1BSX0NPTkZJR19BRERSLCBvZmZzZXQpOyBcCisJbXRkY3IoRENSTl9DUFJfQ09ORklHX0RBVEEsIGRhdGEpO30pCisKKy8qIFNEUnMgKDQ0MEdYIGFuZCA0NDBTUCkgKi8KKyNkZWZpbmUgRENSTl9TRFJfQ09ORklHX0FERFIgCTB4ZQorI2RlZmluZSBEQ1JOX1NEUl9DT05GSUdfREFUQQkweGYKKyNkZWZpbmUgRENSTl9TRFJfUEZDMAkJMHg0MTAwCisjZGVmaW5lIERDUk5fU0RSX1BGQzEJCTB4NDEwMQorI2RlZmluZSBEQ1JOX1NEUl9QRkMxX0VQUwkweDFjMDAwMDAKKyNkZWZpbmUgRENSTl9TRFJfUEZDMV9FUFNfU0hJRlQJMjIKKyNkZWZpbmUgRENSTl9TRFJfUEZDMV9STUlJCTB4MDIwMDAwMDAKKyNkZWZpbmUgRENSTl9TRFJfTUZSCQkweDQzMDAKKyNkZWZpbmUgRENSTl9TRFJfTUZSX1RBSDAgCTB4ODAwMDAwMDAgIAkvKiBUQUhPRTAgRW5hYmxlICovCisjZGVmaW5lIERDUk5fU0RSX01GUl9UQUgxIAkweDQwMDAwMDAwICAJLyogVEFIT0UxIEVuYWJsZSAqLworI2RlZmluZSBEQ1JOX1NEUl9NRlJfUENNICAJMHgxMDAwMDAwMCAgCS8qIFBQQzQ0MEdQIGlycSBjb21wYXQgbW9kZSAqLworI2RlZmluZSBEQ1JOX1NEUl9NRlJfRUNTICAJMHgwODAwMDAwMCAgCS8qIEVNQUMgaW50IGNsayAqLworI2RlZmluZSBEQ1JOX1NEUl9NRlJfVDBUWEZMCTB4MDAwODAwMDAKKyNkZWZpbmUgRENSTl9TRFJfTUZSX1QwVFhGSAkweDAwMDQwMDAwCisjZGVmaW5lIERDUk5fU0RSX01GUl9UMVRYRkwJMHgwMDAyMDAwMAorI2RlZmluZSBEQ1JOX1NEUl9NRlJfVDFUWEZICTB4MDAwMTAwMDAKKyNkZWZpbmUgRENSTl9TRFJfTUZSX0UwVFhGTAkweDAwMDA4MDAwCisjZGVmaW5lIERDUk5fU0RSX01GUl9FMFRYRkgJMHgwMDAwNDAwMAorI2RlZmluZSBEQ1JOX1NEUl9NRlJfRTBSWEZMCTB4MDAwMDIwMDAKKyNkZWZpbmUgRENSTl9TRFJfTUZSX0UwUlhGSAkweDAwMDAxMDAwCisjZGVmaW5lIERDUk5fU0RSX01GUl9FMVRYRkwJMHgwMDAwMDgwMAorI2RlZmluZSBEQ1JOX1NEUl9NRlJfRTFUWEZICTB4MDAwMDA0MDAKKyNkZWZpbmUgRENSTl9TRFJfTUZSX0UxUlhGTAkweDAwMDAwMjAwCisjZGVmaW5lIERDUk5fU0RSX01GUl9FMVJYRkgJMHgwMDAwMDEwMAorI2RlZmluZSBEQ1JOX1NEUl9NRlJfRTJUWEZMCTB4MDAwMDAwODAKKyNkZWZpbmUgRENSTl9TRFJfTUZSX0UyVFhGSAkweDAwMDAwMDQwCisjZGVmaW5lIERDUk5fU0RSX01GUl9FMlJYRkwJMHgwMDAwMDAyMAorI2RlZmluZSBEQ1JOX1NEUl9NRlJfRTJSWEZICTB4MDAwMDAwMTAKKyNkZWZpbmUgRENSTl9TRFJfTUZSX0UzVFhGTAkweDAwMDAwMDA4CisjZGVmaW5lIERDUk5fU0RSX01GUl9FM1RYRkgJMHgwMDAwMDAwNAorI2RlZmluZSBEQ1JOX1NEUl9NRlJfRTNSWEZMCTB4MDAwMDAwMDIKKyNkZWZpbmUgRENSTl9TRFJfTUZSX0UzUlhGSAkweDAwMDAwMDAxCisjZGVmaW5lIERDUk5fU0RSX1VBUlQwCQkweDAxMjAKKyNkZWZpbmUgRENSTl9TRFJfVUFSVDEJCTB4MDEyMQorCisvKiBTRFIgcmVhZC93cml0ZSBoZWxwZXIgbWFjcm9zICovCisjZGVmaW5lIFNEUl9SRUFEKG9mZnNldCkgKHtcCisJbXRkY3IoRENSTl9TRFJfQ09ORklHX0FERFIsIG9mZnNldCk7IFwKKwltZmRjcihEQ1JOX1NEUl9DT05GSUdfREFUQSk7fSkKKyNkZWZpbmUgU0RSX1dSSVRFKG9mZnNldCwgZGF0YSkgKHtcCisJbXRkY3IoRENSTl9TRFJfQ09ORklHX0FERFIsIG9mZnNldCk7IFwKKwltdGRjcihEQ1JOX1NEUl9DT05GSUdfREFUQSxkYXRhKTt9KQorCisvKiBETUEgKGV4Y2x1ZGluZyA0NDBTUCkgKi8KKyNkZWZpbmUgRENSTl9ETUEwX0JBU0UJCTB4MTAwCisjZGVmaW5lIERDUk5fRE1BMV9CQVNFCQkweDEwOAorI2RlZmluZSBEQ1JOX0RNQTJfQkFTRQkJMHgxMTAKKyNkZWZpbmUgRENSTl9ETUEzX0JBU0UJCTB4MTE4CisjZGVmaW5lIERDUk5fRE1BU1JfQkFTRQkJMHgxMjAKKyNkZWZpbmUgRENSTkNBUF9ETUFfU0cJCTEJLyogaGF2ZSBETUEgc2NhdHRlci9nYXRoZXIgY2FwYWJpbGl0eSAqLworI2RlZmluZSBEQ1JOX01BTF9CQVNFCQkweDE4MAorCisvKiBVSUMgKi8KKyNkZWZpbmUgRENSTl9VSUMwX0JBU0UJMHhjMAorI2RlZmluZSBEQ1JOX1VJQzFfQkFTRQkweGQwCisjZGVmaW5lIERDUk5fVUlDMl9CQVNFCTB4MjEwCisjZGVmaW5lIERDUk5fVUlDQl9CQVNFCTB4MjAwCisjZGVmaW5lIFVJQzAJCURDUk5fVUlDMF9CQVNFCisjZGVmaW5lIFVJQzEJCURDUk5fVUlDMV9CQVNFCisjZGVmaW5lIFVJQzIJCURDUk5fVUlDMl9CQVNFCisjZGVmaW5lIFVJQ0IJCURDUk5fVUlDQl9CQVNFCisKKyNkZWZpbmUgRENSTl9VSUNfU1IoYmFzZSkgICAgICAgKGJhc2UgKyAweDApCisjZGVmaW5lIERDUk5fVUlDX0VSKGJhc2UpICAgICAgIChiYXNlICsgMHgyKQorI2RlZmluZSBEQ1JOX1VJQ19DUihiYXNlKSAgICAgICAoYmFzZSArIDB4MykKKyNkZWZpbmUgRENSTl9VSUNfUFIoYmFzZSkgICAgICAgKGJhc2UgKyAweDQpCisjZGVmaW5lIERDUk5fVUlDX1RSKGJhc2UpICAgICAgIChiYXNlICsgMHg1KQorI2RlZmluZSBEQ1JOX1VJQ19NU1IoYmFzZSkgICAgICAoYmFzZSArIDB4NikKKyNkZWZpbmUgRENSTl9VSUNfVlIoYmFzZSkgICAgICAgKGJhc2UgKyAweDcpCisjZGVmaW5lIERDUk5fVUlDX1ZDUihiYXNlKSAgICAgIChiYXNlICsgMHg4KQorCisjZGVmaW5lIFVJQzBfVUlDMU5DICAgICAgCTB4MDAwMDAwMDIKKworI2RlZmluZSBVSUNCX1VJQzBOQwkJMHg0MDAwMDAwMAorI2RlZmluZSBVSUNCX1VJQzFOQwkJMHgxMDAwMDAwMAorI2RlZmluZSBVSUNCX1VJQzJOQwkJMHgwNDAwMDAwMAorCisvKiA0NDAgTUFMIERDUnMgKi8KKyNkZWZpbmUgRENSTl9NQUxDUihiYXNlKQkJKGJhc2UgKyAweDApCS8qIENvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgRENSTl9NQUxFU1IoYmFzZSkJCShiYXNlICsgMHgxKQkvKiBFcnJvciBTdGF0dXMgKi8KKyNkZWZpbmUgRENSTl9NQUxJRVIoYmFzZSkJCShiYXNlICsgMHgyKQkvKiBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIERDUk5fTUFMVFhDQVNSKGJhc2UpCQkoYmFzZSArIDB4NCkJLyogVHggQ2hhbm5lbCBBY3RpdmUgU2V0ICovCisjZGVmaW5lIERDUk5fTUFMVFhDQVJSKGJhc2UpCQkoYmFzZSArIDB4NSkJLyogVHggQ2hhbm5lbCBBY3RpdmUgUmVzZXQgKi8KKyNkZWZpbmUgRENSTl9NQUxUWEVPQklTUihiYXNlKQkJKGJhc2UgKyAweDYpCS8qIFR4IEVuZCBvZiBCdWZmZXIgSW50ZXJydXB0IFN0YXR1cyAqLworI2RlZmluZSBEQ1JOX01BTFRYREVJUihiYXNlKQkJKGJhc2UgKyAweDcpCS8qIFR4IERlc2NyaXB0b3IgRXJyb3IgSW50ZXJydXB0ICovCisjZGVmaW5lIERDUk5fTUFMUlhDQVNSKGJhc2UpCQkoYmFzZSArIDB4MTApCS8qIFJ4IENoYW5uZWwgQWN0aXZlIFNldCAqLworI2RlZmluZSBEQ1JOX01BTFJYQ0FSUihiYXNlKQkJKGJhc2UgKyAweDExKQkvKiBSeCBDaGFubmVsIEFjdGl2ZSBSZXNldCAqLworI2RlZmluZSBEQ1JOX01BTFJYRU9CSVNSKGJhc2UpCQkoYmFzZSArIDB4MTIpCS8qIFJ4IEVuZCBvZiBCdWZmZXIgSW50ZXJydXB0IFN0YXR1cyAqLworI2RlZmluZSBEQ1JOX01BTFJYREVJUihiYXNlKQkJKGJhc2UgKyAweDEzKQkvKiBSeCBEZXNjcmlwdG9yIEVycm9yIEludGVycnVwdCAqLworI2RlZmluZSBEQ1JOX01BTFRYQ1RQMFIoYmFzZSkJCShiYXNlICsgMHgyMCkJLyogQ2hhbm5lbCBUeCAwIENoYW5uZWwgVGFibGUgUG9pbnRlciAqLworI2RlZmluZSBEQ1JOX01BTFRYQ1RQMVIoYmFzZSkJCShiYXNlICsgMHgyMSkJLyogQ2hhbm5lbCBUeCAxIENoYW5uZWwgVGFibGUgUG9pbnRlciAqLworI2RlZmluZSBEQ1JOX01BTFRYQ1RQMlIoYmFzZSkJCShiYXNlICsgMHgyMikJLyogQ2hhbm5lbCBUeCAyIENoYW5uZWwgVGFibGUgUG9pbnRlciAqLworI2RlZmluZSBEQ1JOX01BTFRYQ1RQM1IoYmFzZSkJCShiYXNlICsgMHgyMykJLyogQ2hhbm5lbCBUeCAzIENoYW5uZWwgVGFibGUgUG9pbnRlciAqLworI2RlZmluZSBEQ1JOX01BTFJYQ1RQMFIoYmFzZSkJCShiYXNlICsgMHg0MCkJLyogQ2hhbm5lbCBSeCAwIENoYW5uZWwgVGFibGUgUG9pbnRlciAqLworI2RlZmluZSBEQ1JOX01BTFJYQ1RQMVIoYmFzZSkJCShiYXNlICsgMHg0MSkJLyogQ2hhbm5lbCBSeCAxIENoYW5uZWwgVGFibGUgUG9pbnRlciAqLworI2RlZmluZSBEQ1JOX01BTFJDQlMwKGJhc2UpCQkoYmFzZSArIDB4NjApCS8qIENoYW5uZWwgUnggMCBDaGFubmVsIEJ1ZmZlciBTaXplICovCisjZGVmaW5lIERDUk5fTUFMUkNCUzEoYmFzZSkJCShiYXNlICsgMHg2MSkJLyogQ2hhbm5lbCBSeCAxIENoYW5uZWwgQnVmZmVyIFNpemUgKi8KKworLyogQ29tcGF0aWJpbGl0eSBEQ1JOJ3MgKi8KKyNkZWZpbmUgRENSTl9NQUxSWENUUDJSKGJhc2UpCSgoYmFzZSkgKyAweDQyKQkvKiBDaGFubmVsIFJ4IDIgQ2hhbm5lbCBUYWJsZSBQb2ludGVyICovCisjZGVmaW5lIERDUk5fTUFMUlhDVFAzUihiYXNlKQkoKGJhc2UpICsgMHg0MykJLyogQ2hhbm5lbCBSeCAzIENoYW5uZWwgVGFibGUgUG9pbnRlciAqLworI2RlZmluZSBEQ1JOX01BTFRYQ1RQNFIoYmFzZSkJKChiYXNlKSArIDB4MjQpCS8qIENoYW5uZWwgVHggNCBDaGFubmVsIFRhYmxlIFBvaW50ZXIgKi8KKyNkZWZpbmUgRENSTl9NQUxUWENUUDVSKGJhc2UpCSgoYmFzZSkgKyAweDI1KQkvKiBDaGFubmVsIFR4IDUgQ2hhbm5lbCBUYWJsZSBQb2ludGVyICovCisjZGVmaW5lIERDUk5fTUFMVFhDVFA2UihiYXNlKQkoKGJhc2UpICsgMHgyNikJLyogQ2hhbm5lbCBUeCA2IENoYW5uZWwgVGFibGUgUG9pbnRlciAqLworI2RlZmluZSBEQ1JOX01BTFRYQ1RQN1IoYmFzZSkJKChiYXNlKSArIDB4MjcpCS8qIENoYW5uZWwgVHggNyBDaGFubmVsIFRhYmxlIFBvaW50ZXIgKi8KKyNkZWZpbmUgRENSTl9NQUxSQ0JTMihiYXNlKQkoKGJhc2UpICsgMHg2MikJLyogQ2hhbm5lbCBSeCAyIENoYW5uZWwgQnVmZmVyIFNpemUgKi8KKyNkZWZpbmUgRENSTl9NQUxSQ0JTMyhiYXNlKQkoKGJhc2UpICsgMHg2MykJLyogQ2hhbm5lbCBSeCAzIENoYW5uZWwgQnVmZmVyIFNpemUgKi8KKworI2RlZmluZSBNQUxDUl9NTVNSCQkweDgwMDAwMDAwCS8qIE1BTCBTb2Z0d2FyZSByZXNldCAqLworI2RlZmluZSBNQUxDUl9QTEJQXzEJCTB4MDA0MDAwMDAJLyogTUFMIHJlcWVzdCBwcmlvcml0eTogKi8KKyNkZWZpbmUgTUFMQ1JfUExCUF8yCQkweDAwODAwMDAwCS8qIGxvd3Nlc3QgaXMgMDAgKi8KKyNkZWZpbmUgTUFMQ1JfUExCUF8zCQkweDAwQzAwMDAwCS8qIGhpZ2hlc3QgKi8KKyNkZWZpbmUgTUFMQ1JfR0EJCTB4MDAyMDAwMDAJLyogR3VhcmRlZCBBY3RpdmUgQml0ICovCisjZGVmaW5lIE1BTENSX09BCQkweDAwMTAwMDAwCS8qIE9yZGVyZWQgQWN0aXZlIEJpdCAqLworI2RlZmluZSBNQUxDUl9QTEJMRQkJMHgwMDA4MDAwMAkvKiBQTEIgTG9jayBFcnJvciBCaXQgKi8KKyNkZWZpbmUgTUFMQ1JfUExCTFRfMQkJMHgwMDA0MDAwMAkvKiBQTEIgTGF0ZW5jeSBUaW1lciAqLworI2RlZmluZSBNQUxDUl9QTEJMVF8yIAkJMHgwMDAyMDAwMAorI2RlZmluZSBNQUxDUl9QTEJMVF8zCQkweDAwMDEwMDAwCisjZGVmaW5lIE1BTENSX1BMQkxUXzQJCTB4MDAwMDgwMDAKKyNpZmRlZiBDT05GSUdfNDQwR1AKKyNkZWZpbmUgTUFMQ1JfUExCTFRfREVGQVVMVAkweDAwMzMwMDAwCS8qIFBMQiBMYXRlbmN5IFRpbWVyIGRlZmF1bHQgKi8KKyNlbHNlCisjZGVmaW5lIE1BTENSX1BMQkxUX0RFRkFVTFQJMHgwMGZmMDAwMAkvKiBQTEIgTGF0ZW5jeSBUaW1lciBkZWZhdWx0ICovCisjZW5kaWYKKyNkZWZpbmUgTUFMQ1JfUExCQgkJMHgwMDAwNDAwMAkvKiBQTEIgQnVyc3QgRGVhY3RpdmF0aW9uIEJpdCAqLworI2RlZmluZSBNQUxDUl9PUEJCTAkJMHgwMDAwMDA4MAkvKiBPUEIgTG9jayBCaXQgKi8KKyNkZWZpbmUgTUFMQ1JfRU9QSUUJCTB4MDAwMDAwMDQJLyogRW5kIE9mIFBhY2tldCBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIE1BTENSX0xFQQkJMHgwMDAwMDAwMgkvKiBMb2NrZWQgRXJyb3IgQWN0aXZlICovCisjZGVmaW5lIE1BTENSX01TRAkJMHgwMDAwMDAwMQkvKiBNQUwgU2Nyb2xsIERlc2NyaXB0b3IgQml0ICovCisvKiBEQ1JOX01BTEVTUiAqLworI2RlZmluZSBNQUxFU1JfRVZCCQkweDgwMDAwMDAwCS8qIEVycm9yIFZhbGlkIEJpdCAqLworI2RlZmluZSBNQUxFU1JfQ0lEUlgJCTB4NDAwMDAwMDAJLyogQ2hhbm5lbCBJRCBSZWNlaXZlICovCisjZGVmaW5lIE1BTEVTUl9ERQkJMHgwMDEwMDAwMAkvKiBEZXNjcmlwdG9yIEVycm9yICovCisjZGVmaW5lIE1BTEVTUl9PRU4JCTB4MDAwODAwMDAJLyogT1BCIE5vbi1GdWxsd29yZCBFcnJvciAqLworI2RlZmluZSBNQUxFU1JfT1RFCQkweDAwMDQwMDAwCS8qIE9QQiBUaW1lb3V0IEVycm9yICovCisjZGVmaW5lIE1BTEVTUl9PU0UJCTB4MDAwMjAwMDAJLyogT1BCIFNsYXZlIEVycm9yICovCisjZGVmaW5lIE1BTEVTUl9QRUlOCQkweDAwMDEwMDAwCS8qIFBMQiBCdXMgRXJyb3IgSW5kaWNhdGlvbiAqLworI2RlZmluZSBNQUxFU1JfREVJCQkweDAwMDAwMDEwCS8qIERlc2NyaXB0b3IgRXJyb3IgSW50ZXJydXB0ICovCisjZGVmaW5lIE1BTEVTUl9PTkVJCQkweDAwMDAwMDA4CS8qIE9QQiBOb24tRnVsbHdvcmQgRXJyb3IgSW50ZXJydXB0ICovCisjZGVmaW5lIE1BTEVTUl9PVEVJCQkweDAwMDAwMDA0CS8qIE9QQiBUaW1lb3V0IEVycm9yIEludGVycnVwdCAqLworI2RlZmluZSBNQUxFU1JfT1NFSQkJMHgwMDAwMDAwMgkvKiBPUEIgU2xhY2UgRXJyb3IgSW50ZXJydXB0ICovCisjZGVmaW5lIE1BTEVTUl9QQkVJCQkweDAwMDAwMDAxCS8qIFBMQiBCdXMgRXJyb3IgSW50ZXJydXB0ICovCisvKiBEQ1JOX01BTElFUiAqLworI2RlZmluZSBNQUxJRVJfREUJCTB4MDAwMDAwMTAJLyogRGVzY3JpcHRvciBFcnJvciBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIE1BTElFUl9ORQkJMHgwMDAwMDAwOAkvKiBPUEIgTm9uLXdvcmQgVHJhbnNmZXIgSW50IEVuYWJsZSAqLworI2RlZmluZSBNQUxJRVJfVEUJCTB4MDAwMDAwMDQJLyogT1BCIFRpbWUgT3V0IEVycm9yIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgTUFMSUVSX09QQkUJCTB4MDAwMDAwMDIJLyogT1BCIFNsYXZlIEVycm9yIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgTUFMSUVSX1BMQkUJCTB4MDAwMDAwMDEJLyogUExCIEVycm9yIEludGVycnVwdCBFbmFibGUgKi8KKy8qIERDUk5fTUFMVFhFT0JJU1IgKi8KKyNkZWZpbmUgTUFMT0JJU1JfQ0gwCQkweDgwMDAwMDAwCS8qIEVPQiBjaGFubmVsIDEgYml0ICovCisjZGVmaW5lIE1BTE9CSVNSX0NIMgkJMHg0MDAwMDAwMAkvKiBFT0IgY2hhbm5lbCAyIGJpdCAqLworCisvKiA0NDBHUC9HWCBQTEIgQXJiaXRlciBEQ1JzICovCisjZGVmaW5lIERDUk5fUExCMF9SRVZJRAkJMHgwODIJCS8qIFBMQiBBcmJpdGVyIFJldmlzaW9uIElEICovCisjZGVmaW5lIERDUk5fUExCMF9BQ1IJCTB4MDgzCQkvKiBQTEIgQXJiaXRlciBDb250cm9sICovCisjZGVmaW5lIERDUk5fUExCMF9CRVNSCQkweDA4NAkJLyogUExCIEVycm9yIFN0YXR1cyAqLworI2RlZmluZSBEQ1JOX1BMQjBfQkVBUkwJCTB4MDg2CQkvKiBQTEIgRXJyb3IgQWRkcmVzcyBMb3cgKi8KKyNkZWZpbmUgRENSTl9QTEIwX0JFQVIJCURDUk5fUExCMF9CRUFSTAkvKiA0MHggY29tcGF0aWJpbGl0eSAqLworI2RlZmluZSBEQ1JOX1BMQjBfQkVBUkgJCTB4MDg3CQkvKiBQTEIgRXJyb3IgQWRkcmVzcyBIaWdoICovCisKKy8qIDQ0MEdQL0dYIFBMQiB0byBPUEIgYnJpZGdlIERDUnMgKi8KKyNkZWZpbmUgRENSTl9QT0IwX0JFU1IwCQkweDA5MAorI2RlZmluZSBEQ1JOX1BPQjBfQkVTUjEJCTB4MDk0CisjZGVmaW5lIERDUk5fUE9CMF9CRUFSTAkJMHgwOTIKKyNkZWZpbmUgRENSTl9QT0IwX0JFQVJICQkweDA5MworCisvKiA0NDBHUC9HWCBPUEIgdG8gUExCIGJyaWRnZSBEQ1JzICovCisjZGVmaW5lIERDUk5fT1BCMF9CU1RBVAkJMHgwYTkKKyNkZWZpbmUgRENSTl9PUEIwX0JFQVJMCQkweDBhYQorI2RlZmluZSBEQ1JOX09QQjBfQkVBUkgJCTB4MGFiCisKKy8qIDQ0MEdQIENsb2NrLCBQTSwgY2hpcCBjb250cm9sICovCisjZGVmaW5lIERDUk5fQ1BDMF9TUgkJMHgwYjAKKyNkZWZpbmUgRENSTl9DUEMwX0VSCQkweDBiMQorI2RlZmluZSBEQ1JOX0NQQzBfRlIJCTB4MGIyCisjZGVmaW5lIERDUk5fQ1BDMF9TWVMwCQkweDBlMAorI2RlZmluZSBEQ1JOX0NQQzBfU1lTMQkJMHgwZTEKKyNkZWZpbmUgRENSTl9DUEMwX0NVU1QwCQkweDBlMgorI2RlZmluZSBEQ1JOX0NQQzBfQ1VTVDEJCTB4MGUzCisjZGVmaW5lIERDUk5fQ1BDMF9TVFJQMAkJMHgwZTQKKyNkZWZpbmUgRENSTl9DUEMwX1NUUlAxCQkweDBlNQorI2RlZmluZSBEQ1JOX0NQQzBfU1RSUDIJCTB4MGU2CisjZGVmaW5lIERDUk5fQ1BDMF9TVFJQMwkJMHgwZTcKKyNkZWZpbmUgRENSTl9DUEMwX0dQSU8JCTB4MGU4CisjZGVmaW5lIERDUk5fQ1BDMF9QTEIJCTB4MGU5CisjZGVmaW5lIERDUk5fQ1BDMF9DUjEJCTB4MGVhCisjZGVmaW5lIERDUk5fQ1BDMF9DUjAJCTB4MGViCisjZGVmaW5lIERDUk5fQ1BDMF9NSVJRMAkJMHgwZWMKKyNkZWZpbmUgRENSTl9DUEMwX01JUlExCQkweDBlZAorI2RlZmluZSBEQ1JOX0NQQzBfSlRBR0lECTB4MGVmCisKKy8qIDQ0MEdQIERNQSBjb250cm9sbGVyIERDUnMgKi8KKyNkZWZpbmUgRENSTl9ETUFDUjAJKERDUk5fRE1BMF9CQVNFICsgMHgwKQkvKiBETUEgQ2hhbm5lbCBDb250cm9sIDAgKi8KKyNkZWZpbmUgRENSTl9ETUFDVDAJKERDUk5fRE1BMF9CQVNFICsgMHgxKSAgLyogRE1BIENvdW50IDAgKi8KKyNkZWZpbmUgRENSTl9ETUFTQUgwCShEQ1JOX0RNQTBfQkFTRSArIDB4MikJLyogRE1BIFNyYyBBZGRyIEhpZ2ggMCAqLworI2RlZmluZSBEQ1JOX0RNQVNBMAkoRENSTl9ETUEwX0JBU0UgKyAweDMpCS8qIERNQSBTcmMgQWRkciBMb3cgMCAqLworI2RlZmluZSBEQ1JOX0RNQURBSDAJKERDUk5fRE1BMF9CQVNFICsgMHg0KQkvKiBETUEgRGVzdCBBZGRyIEhpZ2ggMCAqLworI2RlZmluZSBEQ1JOX0RNQURBMAkoRENSTl9ETUEwX0JBU0UgKyAweDUpCS8qIERNQSBEZXN0IEFkZHIgTG93IDAgKi8KKyNkZWZpbmUgRENSTl9BU0dIMAkoRENSTl9ETUEwX0JBU0UgKyAweDYpCS8qIERNQSBTRyBEZXNjIEFkZHIgSGlnaCAwICovCisjZGVmaW5lIERDUk5fQVNHMAkoRENSTl9ETUEwX0JBU0UgKyAweDcpCS8qIERNQSBTRyBEZXNjIEFkZHIgTG93IDAgKi8KKworI2RlZmluZSBEQ1JOX0RNQUNSMQkoRENSTl9ETUExX0JBU0UgKyAweDApCS8qIERNQSBDaGFubmVsIENvbnRyb2wgMSAqLworI2RlZmluZSBEQ1JOX0RNQUNUMQkoRENSTl9ETUExX0JBU0UgKyAweDEpICAvKiBETUEgQ291bnQgMSAqLworI2RlZmluZSBEQ1JOX0RNQVNBSDEJKERDUk5fRE1BMV9CQVNFICsgMHgyKQkvKiBETUEgU3JjIEFkZHIgSGlnaCAxICovCisjZGVmaW5lIERDUk5fRE1BU0ExCShEQ1JOX0RNQTFfQkFTRSArIDB4MykJLyogRE1BIFNyYyBBZGRyIExvdyAxICovCisjZGVmaW5lIERDUk5fRE1BREFIMQkoRENSTl9ETUExX0JBU0UgKyAweDQpCS8qIERNQSBEZXN0IEFkZHIgSGlnaCAxICovCisjZGVmaW5lIERDUk5fRE1BREExCShEQ1JOX0RNQTFfQkFTRSArIDB4NSkJLyogRE1BIERlc3QgQWRkciBMb3cgMSAqLworI2RlZmluZSBEQ1JOX0FTR0gxCShEQ1JOX0RNQTFfQkFTRSArIDB4NikJLyogRE1BIFNHIERlc2MgQWRkciBIaWdoIDEgKi8KKyNkZWZpbmUgRENSTl9BU0cxCShEQ1JOX0RNQTFfQkFTRSArIDB4NykJLyogRE1BIFNHIERlc2MgQWRkciBMb3cgMSAqLworCisjZGVmaW5lIERDUk5fRE1BQ1IyCShEQ1JOX0RNQTJfQkFTRSArIDB4MCkJLyogRE1BIENoYW5uZWwgQ29udHJvbCAyICovCisjZGVmaW5lIERDUk5fRE1BQ1QyCShEQ1JOX0RNQTJfQkFTRSArIDB4MSkgIC8qIERNQSBDb3VudCAyICovCisjZGVmaW5lIERDUk5fRE1BU0FIMgkoRENSTl9ETUEyX0JBU0UgKyAweDIpCS8qIERNQSBTcmMgQWRkciBIaWdoIDIgKi8KKyNkZWZpbmUgRENSTl9ETUFTQTIJKERDUk5fRE1BMl9CQVNFICsgMHgzKQkvKiBETUEgU3JjIEFkZHIgTG93IDIgKi8KKyNkZWZpbmUgRENSTl9ETUFEQUgyCShEQ1JOX0RNQTJfQkFTRSArIDB4NCkJLyogRE1BIERlc3QgQWRkciBIaWdoIDIgKi8KKyNkZWZpbmUgRENSTl9ETUFEQTIJKERDUk5fRE1BMl9CQVNFICsgMHg1KQkvKiBETUEgRGVzdCBBZGRyIExvdyAyICovCisjZGVmaW5lIERDUk5fQVNHSDIJKERDUk5fRE1BMl9CQVNFICsgMHg2KQkvKiBETUEgU0cgRGVzYyBBZGRyIEhpZ2ggMiAqLworI2RlZmluZSBEQ1JOX0FTRzIJKERDUk5fRE1BMl9CQVNFICsgMHg3KQkvKiBETUEgU0cgRGVzYyBBZGRyIExvdyAyICovCisKKyNkZWZpbmUgRENSTl9ETUFDUjMJKERDUk5fRE1BM19CQVNFICsgMHgwKQkvKiBETUEgQ2hhbm5lbCBDb250cm9sIDMgKi8KKyNkZWZpbmUgRENSTl9ETUFDVDMJKERDUk5fRE1BM19CQVNFICsgMHgxKSAgLyogRE1BIENvdW50IDMgKi8KKyNkZWZpbmUgRENSTl9ETUFTQUgzCShEQ1JOX0RNQTNfQkFTRSArIDB4MikJLyogRE1BIFNyYyBBZGRyIEhpZ2ggMyAqLworI2RlZmluZSBEQ1JOX0RNQVNBMwkoRENSTl9ETUEzX0JBU0UgKyAweDMpCS8qIERNQSBTcmMgQWRkciBMb3cgMyAqLworI2RlZmluZSBEQ1JOX0RNQURBSDMJKERDUk5fRE1BM19CQVNFICsgMHg0KQkvKiBETUEgRGVzdCBBZGRyIEhpZ2ggMyAqLworI2RlZmluZSBEQ1JOX0RNQURBMwkoRENSTl9ETUEzX0JBU0UgKyAweDUpCS8qIERNQSBEZXN0IEFkZHIgTG93IDMgKi8KKyNkZWZpbmUgRENSTl9BU0dIMwkoRENSTl9ETUEzX0JBU0UgKyAweDYpCS8qIERNQSBTRyBEZXNjIEFkZHIgSGlnaCAzICovCisjZGVmaW5lIERDUk5fQVNHMwkoRENSTl9ETUEzX0JBU0UgKyAweDcpCS8qIERNQSBTRyBEZXNjIEFkZHIgTG93IDMgKi8KKworI2RlZmluZSBEQ1JOX0RNQVNSCShEQ1JOX0RNQVNSX0JBU0UgKyAweDApCS8qIERNQSBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRENSTl9BU0dDCShEQ1JOX0RNQVNSX0JBU0UgKyAweDMpCS8qIERNQSBTY2F0dGVyL0dhdGhlciBDb21tYW5kICovCisjZGVmaW5lIERDUk5fU0xQCShEQ1JOX0RNQVNSX0JBU0UgKyAweDUpCS8qIERNQSBTbGVlcCBSZWdpc3RlciAqLworI2RlZmluZSBEQ1JOX1BPTAkoRENSTl9ETUFTUl9CQVNFICsgMHg2KQkvKiBETUEgUG9sYXJpdHkgUmVnaXN0ZXIgKi8KKworLyogNDQwR1AvNDQwR1ggU0RSQU0gY29udHJvbGxlciBEQ1JzICovCisjZGVmaW5lIERDUk5fU0RSQU0wX0NGR0FERFIJCTB4MDEwCisjZGVmaW5lIERDUk5fU0RSQU0wX0NGR0RBVEEJCTB4MDExCisKKyNkZWZpbmUgU0RSQU0wX0IwQ1IJMHg0MAorI2RlZmluZSBTRFJBTTBfQjFDUgkweDQ0CisjZGVmaW5lIFNEUkFNMF9CMkNSCTB4NDgKKyNkZWZpbmUgU0RSQU0wX0IzQ1IJMHg0YworCisjZGVmaW5lIFNEUkFNX0NPTkZJR19CQU5LX0VOQUJMRQkweDAwMDAwMDAxCisjZGVmaW5lIFNEUkFNX0NPTkZJR19TSVpFX01BU0sJCTB4MDAwZTAwMDAKKyNkZWZpbmUgU0RSQU1fQ09ORklHX0JBTktfU0laRShyZWcpCSgocmVnICYgU0RSQU1fQ09ORklHX1NJWkVfTUFTSykgPj4gMTcpCisjZGVmaW5lIFNEUkFNX0NPTkZJR19TSVpFXzhNCQkweDAwMDAwMDAxCisjZGVmaW5lIFNEUkFNX0NPTkZJR19TSVpFXzE2TQkJMHgwMDAwMDAwMgorI2RlZmluZSBTRFJBTV9DT05GSUdfU0laRV8zMk0JCTB4MDAwMDAwMDMKKyNkZWZpbmUgU0RSQU1fQ09ORklHX1NJWkVfNjRNCQkweDAwMDAwMDA0CisjZGVmaW5lIFNEUkFNX0NPTkZJR19TSVpFXzEyOE0JCTB4MDAwMDAwMDUKKyNkZWZpbmUgU0RSQU1fQ09ORklHX1NJWkVfMjU2TQkJMHgwMDAwMDAwNgorI2RlZmluZSBTRFJBTV9DT05GSUdfU0laRV81MTJNCQkweDAwMDAwMDA3CisjZGVmaW5lIFBQQzQ0eF9NRU1fU0laRV84TQkJMHgwMDgwMDAwMAorI2RlZmluZSBQUEM0NHhfTUVNX1NJWkVfMTZNCQkweDAxMDAwMDAwCisjZGVmaW5lIFBQQzQ0eF9NRU1fU0laRV8zMk0JCTB4MDIwMDAwMDAKKyNkZWZpbmUgUFBDNDR4X01FTV9TSVpFXzY0TQkJMHgwNDAwMDAwMAorI2RlZmluZSBQUEM0NHhfTUVNX1NJWkVfMTI4TQkJMHgwODAwMDAwMAorI2RlZmluZSBQUEM0NHhfTUVNX1NJWkVfMjU2TQkJMHgxMDAwMDAwMAorI2RlZmluZSBQUEM0NHhfTUVNX1NJWkVfNTEyTQkJMHgyMDAwMDAwMAorI2RlZmluZSBQUEM0NHhfTUVNX1NJWkVfMUcJCTB4NDAwMDAwMDAKKyNkZWZpbmUgUFBDNDR4X01FTV9TSVpFXzJHCQkweDgwMDAwMDAwCisKKy8qIDQ0MFNQIG1lbW9yeSBjb250cm9sbGVyIERDUnMgKi8KKyNkZWZpbmUgRENSTl9NUTBfQlMwQkFTCQkJMHg0MAorI2RlZmluZSBEQ1JOX01RMF9CUzFCQVMJCQkweDQxCisKKyNkZWZpbmUgTVEwX0NPTkZJR19TSVpFX01BU0sJCTB4MDAwMGZmZjAKKyNkZWZpbmUgTVEwX0NPTkZJR19TSVpFXzhNCQkweDAwMDBmZmMwCisjZGVmaW5lIE1RMF9DT05GSUdfU0laRV8xNk0JCTB4MDAwMGZmODAKKyNkZWZpbmUgTVEwX0NPTkZJR19TSVpFXzMyTQkJMHgwMDAwZmYwMAorI2RlZmluZSBNUTBfQ09ORklHX1NJWkVfNjRNCQkweDAwMDBmZTAwCisjZGVmaW5lIE1RMF9DT05GSUdfU0laRV8xMjhNCQkweDAwMDBmYzAwCisjZGVmaW5lIE1RMF9DT05GSUdfU0laRV8yNTZNCQkweDAwMDBmODAwCisjZGVmaW5lIE1RMF9DT05GSUdfU0laRV81MTJNCQkweDAwMDBmMDAwCisjZGVmaW5lIE1RMF9DT05GSUdfU0laRV8xRwkJMHgwMDAwZTAwMAorI2RlZmluZSBNUTBfQ09ORklHX1NJWkVfMkcJCTB4MDAwMGMwMDAKKworLyogSW50ZXJuYWwgU1JBTSBDb250cm9sbGVyIDQ0MEdYLzQ0MFNQICovCisjaWZkZWYgQ09ORklHXzQ0MFNQCisjZGVmaW5lIERDUk5fU1JBTTBfQkFTRQkJMHgxMDAKKyNlbHNlIC8qIDQ0MEdYICovCisjZGVmaW5lIERDUk5fU1JBTTBfQkFTRQkJMHgwMDAKKyNlbmRpZgorCisjZGVmaW5lIERDUk5fU1JBTTBfU0IwQ1IJKERDUk5fU1JBTTBfQkFTRSArIDB4MDIwKQorI2RlZmluZSBEQ1JOX1NSQU0wX1NCMUNSCShEQ1JOX1NSQU0wX0JBU0UgKyAweDAyMSkKKyNkZWZpbmUgRENSTl9TUkFNMF9TQjJDUgkoRENSTl9TUkFNMF9CQVNFICsgMHgwMjIpCisjZGVmaW5lIERDUk5fU1JBTTBfU0IzQ1IJKERDUk5fU1JBTTBfQkFTRSArIDB4MDIzKQorI2RlZmluZSAgU1JBTV9TQkNSX0JBUzAJCTB4ODAwMDAwMDAKKyNkZWZpbmUgIFNSQU1fU0JDUl9CQVMxCQkweDgwMDEwMDAwCisjZGVmaW5lICBTUkFNX1NCQ1JfQkFTMgkJMHg4MDAyMDAwMAorI2RlZmluZSAgU1JBTV9TQkNSX0JBUzMJCTB4ODAwMzAwMDAKKyNkZWZpbmUgIFNSQU1fU0JDUl9CVV9NQVNLCTB4MDAwMDAxODAKKyNkZWZpbmUgIFNSQU1fU0JDUl9CU182NEtCCTB4MDAwMDA4MDAKKyNkZWZpbmUgIFNSQU1fU0JDUl9CVV9STwkweDAwMDAwMDgwCisjZGVmaW5lICBTUkFNX1NCQ1JfQlVfUlcJMHgwMDAwMDE4MAorI2RlZmluZSBEQ1JOX1NSQU0wX0JFQVIJCShEQ1JOX1NSQU0wX0JBU0UgKyAweDAyNCkKKyNkZWZpbmUgRENSTl9TUkFNMF9CRVNSMAkoRENSTl9TUkFNMF9CQVNFICsgMHgwMjUpCisjZGVmaW5lIERDUk5fU1JBTTBfQkVTUjEJKERDUk5fU1JBTTBfQkFTRSArIDB4MDI2KQorI2RlZmluZSBEQ1JOX1NSQU0wX1BNRUcJCShEQ1JOX1NSQU0wX0JBU0UgKyAweDAyNykKKyNkZWZpbmUgRENSTl9TUkFNMF9DSUQJCShEQ1JOX1NSQU0wX0JBU0UgKyAweDAyOCkKKyNkZWZpbmUgRENSTl9TUkFNMF9SRVZJRAkoRENSTl9TUkFNMF9CQVNFICsgMHgwMjkpCisjZGVmaW5lIERDUk5fU1JBTTBfRFBDCQkoRENSTl9TUkFNMF9CQVNFICsgMHgwMmEpCisjZGVmaW5lICBTUkFNX0RQQ19FTkFCTEUJMHg4MDAwMDAwMAorCisvKiBMMiBDYWNoZSBDb250cm9sbGVyIDQ0MEdYLzQ0MFNQICovCisjZGVmaW5lIERDUk5fTDJDMF9DRkcJCTB4MDMwCisjZGVmaW5lICBMMkNfQ0ZHX0wyTQkJMHg4MDAwMDAwMAorI2RlZmluZSAgTDJDX0NGR19JQ1UJCTB4NDAwMDAwMDAKKyNkZWZpbmUgIEwyQ19DRkdfRENVCQkweDIwMDAwMDAwCisjZGVmaW5lICBMMkNfQ0ZHX0RDV19NQVNLCTB4MWUwMDAwMDAKKyNkZWZpbmUgIEwyQ19DRkdfVFBDCQkweDAxMDAwMDAwCisjZGVmaW5lICBMMkNfQ0ZHX0NQQwkJMHgwMDgwMDAwMAorI2RlZmluZSAgTDJDX0NGR19GUkFOCQkweDAwMjAwMDAwCisjZGVmaW5lICBMMkNfQ0ZHX1NTX01BU0sJMHgwMDE4MDAwMAorI2RlZmluZSAgTDJDX0NGR19TU18yNTYJCTB4MDAwMDAwMDAKKyNkZWZpbmUgIEwyQ19DRkdfQ1BJTQkJMHgwMDA0MDAwMAorI2RlZmluZSAgTDJDX0NGR19UUElNCQkweDAwMDIwMDAwCisjZGVmaW5lICBMMkNfQ0ZHX0xJTQkJMHgwMDAxMDAwMAorI2RlZmluZSAgTDJDX0NGR19QTVVYX01BU0sJMHgwMDAwNzAwMAorI2RlZmluZSAgTDJDX0NGR19QTVVYX1NOUAkweDAwMDAwMDAwCisjZGVmaW5lICBMMkNfQ0ZHX1BNVVhfSUYJMHgwMDAwMTAwMAorI2RlZmluZSAgTDJDX0NGR19QTVVYX0RGCTB4MDAwMDIwMDAKKyNkZWZpbmUgIEwyQ19DRkdfUE1VWF9EUwkweDAwMDAzMDAwCisjZGVmaW5lICBMMkNfQ0ZHX1BNSU0JCTB4MDAwMDA4MDAKKyNkZWZpbmUgIEwyQ19DRkdfVFBFSQkJMHgwMDAwMDQwMAorI2RlZmluZSAgTDJDX0NGR19DUEVJCQkweDAwMDAwMjAwCisjZGVmaW5lICBMMkNfQ0ZHX05BTQkJMHgwMDAwMDEwMAorI2RlZmluZSAgTDJDX0NGR19TTUNNCQkweDAwMDAwMDgwCisjZGVmaW5lICBMMkNfQ0ZHX05CUk0JCTB4MDAwMDAwNDAKKyNkZWZpbmUgRENSTl9MMkMwX0NNRAkJMHgwMzEKKyNkZWZpbmUgIEwyQ19DTURfQ0xSCQkweDgwMDAwMDAwCisjZGVmaW5lICBMMkNfQ01EX0RJQUcJCTB4NDAwMDAwMDAKKyNkZWZpbmUgIEwyQ19DTURfSU5WCQkweDIwMDAwMDAwCisjZGVmaW5lICBMMkNfQ01EX0NDUAkJMHgxMDAwMDAwMAorI2RlZmluZSAgTDJDX0NNRF9DVEUJCTB4MDgwMDAwMDAKKyNkZWZpbmUgIEwyQ19DTURfU1RSQwkJMHgwNDAwMDAwMAorI2RlZmluZSAgTDJDX0NNRF9TVFBDCQkweDAyMDAwMDAwCisjZGVmaW5lICBMMkNfQ01EX1JQTUMJCTB4MDEwMDAwMDAKKyNkZWZpbmUgIEwyQ19DTURfSENDCQkweDAwODAwMDAwCisjZGVmaW5lIERDUk5fTDJDMF9BRERSCQkweDAzMgorI2RlZmluZSBEQ1JOX0wyQzBfREFUQQkJMHgwMzMKKyNkZWZpbmUgRENSTl9MMkMwX1NSCQkweDAzNAorI2RlZmluZSAgTDJDX1NSX0NDCQkweDgwMDAwMDAwCisjZGVmaW5lICBMMkNfU1JfQ1BFCQkweDQwMDAwMDAwCisjZGVmaW5lICBMMkNfU1JfVFBFCQkweDIwMDAwMDAwCisjZGVmaW5lICBMMkNfU1JfTFJVCQkweDEwMDAwMDAwCisjZGVmaW5lICBMMkNfU1JfUENTCQkweDA4MDAwMDAwCisjZGVmaW5lIERDUk5fTDJDMF9SRVZJRAkJMHgwMzUKKyNkZWZpbmUgRENSTl9MMkMwX1NOUDAJCTB4MDM2CisjZGVmaW5lIERDUk5fTDJDMF9TTlAxCQkweDAzNworI2RlZmluZSAgTDJDX1NOUF9CQV9NQVNLCTB4ZmZmZjAwMDAKKyNkZWZpbmUgIEwyQ19TTlBfU1NSX01BU0sJMHgwMDAwZjAwMAorI2RlZmluZSAgTDJDX1NOUF9TU1JfMzJHCTB4MDAwMGYwMDAKKyNkZWZpbmUgIEwyQ19TTlBfRVNSCQkweDAwMDAwODAwCisKKy8qCisgKiBQQ0ktWCBkZWZpbml0aW9ucworICovCisjZGVmaW5lIFBDSVgwX0NGR0EJCTB4MGVjMDAwMDBVTAorI2RlZmluZSBQQ0lYMV9DRkdBCQkweDFlYzAwMDAwVUwKKyNkZWZpbmUgUENJWDJfQ0ZHQQkJMHgyZWMwMDAwMFVMCisjZGVmaW5lIFBDSVgwX0NGR0QJCTB4MGVjMDAwMDRVTAorI2RlZmluZSBQQ0lYMV9DRkdECQkweDFlYzAwMDA0VUwKKyNkZWZpbmUgUENJWDJfQ0ZHRAkJMHgyZWMwMDAwNFVMCisKKyNkZWZpbmUgUENJWDBfSU9fQkFTRQkJMHgwMDAwMDAwOTA4MDAwMDAwVUxMCisjZGVmaW5lIFBDSVgxX0lPX0JBU0UJCTB4MDAwMDAwMDkwODAwMDAwMFVMTAorI2RlZmluZSBQQ0lYMl9JT19CQVNFCQkweDAwMDAwMDA5MDgwMDAwMDBVTEwKKyNkZWZpbmUgUENJWF9JT19TSVpFCQkweDAwMDEwMDAwCisKKyNpZmRlZiBDT05GSUdfNDQwU1AKKyNkZWZpbmUgUENJWDBfUkVHX0JBU0UJCTB4MDAwMDAwMDkwZWM4MDAwMFVMTAorI2Vsc2UKKyNkZWZpbmUgUENJWDBfUkVHX0JBU0UJCTB4MDAwMDAwMDIwZWM4MDAwMFVMTAorI2VuZGlmCisjZGVmaW5lIFBDSVhfUkVHX09GRlNFVAkJMHgxMDAwMDAwMAorI2RlZmluZSBQQ0lYX1JFR19TSVpFCQkweDIwMAorCisjZGVmaW5lIFBDSVgwX1ZFTkRJRAkJMHgwMDAKKyNkZWZpbmUgUENJWDBfREVWSUQJCTB4MDAyCisjZGVmaW5lIFBDSVgwX0NPTU1BTkQJCTB4MDA0CisjZGVmaW5lIFBDSVgwX1NUQVRVUwkJMHgwMDYKKyNkZWZpbmUgUENJWDBfUkVWSUQJCTB4MDA4CisjZGVmaW5lIFBDSVgwX0NMUwkJMHgwMDkKKyNkZWZpbmUgUENJWDBfQ0FDSEVMUwkJMHgwMGMKKyNkZWZpbmUgUENJWDBfTEFUVElNCQkweDAwZAorI2RlZmluZSBQQ0lYMF9IRFRZUEUJCTB4MDBlCisjZGVmaW5lIFBDSVgwX0JJU1QJCTB4MDBmCisjZGVmaW5lIFBDSVgwX0JBUjBMCQkweDAxMAorI2RlZmluZSBQQ0lYMF9CQVIwSAkJMHgwMTQKKyNkZWZpbmUgUENJWDBfQkFSMQkJMHgwMTgKKyNkZWZpbmUgUENJWDBfQkFSMkwJCTB4MDFjCisjZGVmaW5lIFBDSVgwX0JBUjJICQkweDAyMAorI2RlZmluZSBQQ0lYMF9CQVIzCQkweDAyNAorI2RlZmluZSBQQ0lYMF9DSVNQVFIJCTB4MDI4CisjZGVmaW5lIFBDSVgwX1NCU1lTVklECQkweDAyYworI2RlZmluZSBQQ0lYMF9TQlNZU0lECQkweDAyZQorI2RlZmluZSBQQ0lYMF9FUk9NQkEJCTB4MDMwCisjZGVmaW5lIFBDSVgwX0NBUAkJMHgwMzQKKyNkZWZpbmUgUENJWDBfUkVTMAkJMHgwMzUKKyNkZWZpbmUgUENJWDBfUkVTMQkJMHgwMzYKKyNkZWZpbmUgUENJWDBfUkVTMgkJMHgwMzgKKyNkZWZpbmUgUENJWDBfSU5UTE4JCTB4MDNjCisjZGVmaW5lIFBDSVgwX0lOVFBOCQkweDAzZAorI2RlZmluZSBQQ0lYMF9NSU5HTlQJCTB4MDNlCisjZGVmaW5lIFBDSVgwX01BWExUTkNZCQkweDAzZgorI2RlZmluZSBQQ0lYMF9CUkRHT1BUMQkJMHgwNDAKKyNkZWZpbmUgUENJWDBfQlJER09QVDIJCTB4MDQ0CisjZGVmaW5lIFBDSVgwX0VSUkVOCQkweDA1MAorI2RlZmluZSBQQ0lYMF9FUlJTVFMJCTB4MDU0CisjZGVmaW5lIFBDSVgwX1BMQkJFU1IJCTB4MDU4CisjZGVmaW5lIFBDSVgwX1BMQkJFQVJMCQkweDA1YworI2RlZmluZSBQQ0lYMF9QTEJCRUFSSAkJMHgwNjAKKyNkZWZpbmUgUENJWDBfUE9NMExBTAkJMHgwNjgKKyNkZWZpbmUgUENJWDBfUE9NMExBSAkJMHgwNmMKKyNkZWZpbmUgUENJWDBfUE9NMFNBCQkweDA3MAorI2RlZmluZSBQQ0lYMF9QT00wUENJQUwJCTB4MDc0CisjZGVmaW5lIFBDSVgwX1BPTTBQQ0lBSAkJMHgwNzgKKyNkZWZpbmUgUENJWDBfUE9NMUxBTAkJMHgwN2MKKyNkZWZpbmUgUENJWDBfUE9NMUxBSAkJMHgwODAKKyNkZWZpbmUgUENJWDBfUE9NMVNBCQkweDA4NAorI2RlZmluZSBQQ0lYMF9QT00xUENJQUwJCTB4MDg4CisjZGVmaW5lIFBDSVgwX1BPTTFQQ0lBSAkJMHgwOGMKKyNkZWZpbmUgUENJWDBfUE9NMlNBCQkweDA5MAorI2RlZmluZSBQQ0lYMF9QSU0wU0FMCQkweDA5OAorI2RlZmluZSBQQ0lYMF9QSU0wU0EJCVBDSVgwX1BJTTBTQUwKKyNkZWZpbmUgUENJWDBfUElNMExBTAkJMHgwOWMKKyNkZWZpbmUgUENJWDBfUElNMExBSAkJMHgwYTAKKyNkZWZpbmUgUENJWDBfUElNMVNBCQkweDBhNAorI2RlZmluZSBQQ0lYMF9QSU0xTEFMCQkweDBhOAorI2RlZmluZSBQQ0lYMF9QSU0xTEFICQkweDBhYworI2RlZmluZSBQQ0lYMF9QSU0yU0FMCQkweDBiMAorI2RlZmluZSBQQ0lYMF9QSU0yU0EJCVBDSVgwX1BJTTJTQUwKKyNkZWZpbmUgUENJWDBfUElNMkxBTAkJMHgwYjQKKyNkZWZpbmUgUENJWDBfUElNMkxBSAkJMHgwYjgKKyNkZWZpbmUgUENJWDBfT01DQVBJRAkJMHgwYzAKKyNkZWZpbmUgUENJWDBfT01OSVBUUgkJMHgwYzEKKyNkZWZpbmUgUENJWDBfT01NQwkJMHgwYzIKKyNkZWZpbmUgUENJWDBfT01NQQkJMHgwYzQKKyNkZWZpbmUgUENJWDBfT01NVUEJCTB4MGM4CisjZGVmaW5lIFBDSVgwX09NTURBVEEJCTB4MGNjCisjZGVmaW5lIFBDSVgwX09NTUVPSQkJMHgwY2UKKyNkZWZpbmUgUENJWDBfUE1DQVBJRAkJMHgwZDAKKyNkZWZpbmUgUENJWDBfUE1OSVBUUgkJMHgwZDEKKyNkZWZpbmUgUENJWDBfUE1DCQkweDBkMgorI2RlZmluZSBQQ0lYMF9QTUNTUgkJMHgwZDQKKyNkZWZpbmUgUENJWDBfUE1DU1JCU0UJCTB4MGQ2CisjZGVmaW5lIFBDSVgwX1BNREFUQQkJMHgwZDcKKyNkZWZpbmUgUENJWDBfUE1TQ1JSCQkweDBkOAorI2RlZmluZSBQQ0lYMF9DQVBJRAkJMHgwZGMKKyNkZWZpbmUgUENJWDBfTklQVFIJCTB4MGRkCisjZGVmaW5lIFBDSVgwX0NNRAkJMHgwZGUKKyNkZWZpbmUgUENJWDBfU1RTCQkweDBlMAorI2RlZmluZSBQQ0lYMF9JRFIJCTB4MGU0CisjZGVmaW5lIFBDSVgwX0NJRAkJMHgwZTgKKyNkZWZpbmUgUENJWDBfUklECQkweDBlYworI2RlZmluZSBQQ0lYMF9QSU0wU0FICQkweDBmOAorI2RlZmluZSBQQ0lYMF9QSU0yU0FICQkweDBmYworI2RlZmluZSBQQ0lYMF9NU0dJTAkJMHgxMDAKKyNkZWZpbmUgUENJWDBfTVNHSUgJCTB4MTA0CisjZGVmaW5lIFBDSVgwX01TR09MCQkweDEwOAorI2RlZmluZSBQQ0lYMF9NU0dPSAkJMHgxMGMKKyNkZWZpbmUgUENJWDBfSU0JCTB4MWY4CisKKyNkZWZpbmUgSUlDX09XTgkJCTB4NTUKKyNkZWZpbmUgSUlDX0NMT0NLCQk1MAorCisjdW5kZWYgTlJfVUlDUworI2lmZGVmIENPTkZJR180NDBHWAorI2RlZmluZSBOUl9VSUNTIDMKKyNlbHNlCisjZGVmaW5lIE5SX1VJQ1MgMgorI2VuZGlmCisKKyNpbmNsdWRlIDxhc20vaWJtNHh4Lmg+CisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKyNlbmRpZiAvKiBfX0FTTV9JQk00NHhfSF9fICovCisjZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL2libTR4eC5oIGIvaW5jbHVkZS9hc20tcHBjL2libTR4eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1MjYwYWYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGMvaWJtNHh4LmgKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKgorICogICAgQ29weXJpZ2h0IChjKSAxOTk5IEdyYW50IEVyaWNrc29uIDxncmFudEBsY3NlLnVtbi5lZHU+CisgKgorICogICAgTW9kdWxlIG5hbWU6IGlibTR4eC5oCisgKgorICogICAgRGVzY3JpcHRpb246CisgKglBIGdlbmVyaWMgaW5jbHVkZSBmaWxlIHdoaWNoIHB1bGxzIGluIGFwcHJvcHJpYXRlIGluY2x1ZGUgZmlsZXMKKyAqICAgICAgZm9yIHNwZWNpZmljIGJvYXJkIHR5cGVzIGJhc2VkIG9uIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuCisgKgorICovCisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaWZuZGVmIF9fQVNNX0lCTTRYWF9IX18KKyNkZWZpbmUgX19BU01fSUJNNFhYX0hfXworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisKKyNpZmRlZiBDT05GSUdfNDB4CisKKyNpZiBkZWZpbmVkKENPTkZJR19BU0gpCisjaW5jbHVkZSA8cGxhdGZvcm1zLzR4eC9hc2guaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfQlVCSU5HQSkKKyNpbmNsdWRlIDxwbGF0Zm9ybXMvNHh4L2J1YmluZ2EuaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfQ1BDSTQwNSkKKyNpbmNsdWRlIDxwbGF0Zm9ybXMvNHh4L2NwY2k0MDUuaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfRVA0MDUpCisjaW5jbHVkZSA8cGxhdGZvcm1zLzR4eC9lcDQwNS5oPgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19PQUspCisjaW5jbHVkZSA8cGxhdGZvcm1zLzR4eC9vYWsuaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfUkVEV09PRF80KQorI2luY2x1ZGUgPHBsYXRmb3Jtcy80eHgvcmVkd29vZC5oPgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19SRURXT09EXzUpCisjaW5jbHVkZSA8cGxhdGZvcm1zLzR4eC9yZWR3b29kNS5oPgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19SRURXT09EXzYpCisjaW5jbHVkZSA8cGxhdGZvcm1zLzR4eC9yZWR3b29kNi5oPgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19TWUNBTU9SRSkKKyNpbmNsdWRlIDxwbGF0Zm9ybXMvNHh4L3N5Y2Ftb3JlLmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX1dBTE5VVCkKKyNpbmNsdWRlIDxwbGF0Zm9ybXMvNHh4L3dhbG51dC5oPgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19YSUxJTlhfTUwzMDApCisjaW5jbHVkZSA8cGxhdGZvcm1zLzR4eC94aWxpbnhfbWwzMDAuaD4KKyNlbmRpZgorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjaWZkZWYgQ09ORklHXzQweAorLyoKKyAqIFRoZSAicmVzaWR1YWwiIGJvYXJkIGluZm9ybWF0aW9uIHN0cnVjdHVyZSB0aGUgYm9vdCBsb2FkZXIgcGFzc2VzCisgKiBpbnRvIHRoZSBrZXJuZWwuCisgKi8KK2V4dGVybiBiZF90IF9fcmVzOworI2VuZGlmCisKK3ZvaWQgcHBjNHh4X3NldHVwX2FyY2godm9pZCk7Cit2b2lkIHBwYzR4eF9tYXBfaW8odm9pZCk7Cit2b2lkIHBwYzR4eF9pbml0X0lSUSh2b2lkKTsKK3ZvaWQgcHBjNHh4X2luaXQodW5zaWduZWQgbG9uZyByMywgdW5zaWduZWQgbG9uZyByNCwgdW5zaWduZWQgbG9uZyByNSwKKwkJIHVuc2lnbmVkIGxvbmcgcjYsIHVuc2lnbmVkIGxvbmcgcjcpOworI2VuZGlmCisKKyNpZm5kZWYgUFBDNHh4X01BQ0hJTkVfTkFNRQorI2RlZmluZSBQUEM0eHhfTUFDSElORV9OQU1FCSJVbmlkZW50aWZpZWQgNHh4IGNsYXNzIgorI2VuZGlmCisKKworLyogSU9fQkFTRSBpcyBmb3IgUENJIEkvTy4KKyAqIElTQSBub3Qgc3VwcG9ydGVkLCBqdXN0IGhlcmUgdG8gcmVzb2x2ZSBjb3BpbGF0aW9uLgorICovCisKKyNpZm5kZWYgX0lPX0JBU0UKKyNkZWZpbmUgX0lPX0JBU0UJMHhlODAwMDAwMAkvKiBUaGUgUENJIGFkZHJlc3Mgd2luZG93ICovCisjZGVmaW5lIF9JU0FfTUVNX0JBU0UJMAorI2RlZmluZSBQQ0lfRFJBTV9PRkZTRVQJMAorI2VuZGlmCisKKyNlbGlmIENPTkZJR180NHgKKworI2lmIGRlZmluZWQoQ09ORklHX0VCT05ZKQorI2luY2x1ZGUgPHBsYXRmb3Jtcy80eHgvZWJvbnkuaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfTFVBTikKKyNpbmNsdWRlIDxwbGF0Zm9ybXMvNHh4L2x1YW4uaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfT0NPVEVBKQorI2luY2x1ZGUgPHBsYXRmb3Jtcy80eHgvb2NvdGVhLmg+CisjZW5kaWYKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNpZmRlZiBDT05GSUdfNDB4CisvKgorICogVGhlICJyZXNpZHVhbCIgYm9hcmQgaW5mb3JtYXRpb24gc3RydWN0dXJlIHRoZSBib290IGxvYWRlciBwYXNzZXMKKyAqIGludG8gdGhlIGtlcm5lbC4KKyAqLworZXh0ZXJuIGJkX3QgX19yZXM7CisjZW5kaWYKKyNlbmRpZgorI2VuZGlmIC8qIENPTkZJR180MHggKi8KKworI2VuZGlmIC8qIF9fQVNNX0lCTTRYWF9IX18gKi8KKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvaWJtX29jcC5oIGIvaW5jbHVkZS9hc20tcHBjL2libV9vY3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzYxZDkzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjL2libV9vY3AuaApAQCAtMCwwICsxLDE2MyBAQAorLyoKKyAqIGlibV9vY3AuaAorICoKKyAqICAgICAgKGMpIEJlbmphbWluIEhlcnJlbnNjaG1pZHQgKGJlbmhAa2VybmVsLmNyYXNoaW5nLm9yZykKKyAqICAgICAgICAgIE1pcHN5cyAtIEZyYW5jZQorICoKKyAqICAgICAgICAgIERlcml2ZWQgZnJvbSB3b3JrIChjKSBBcm1pbiBLdXN0ZXIgYWt1c3RlckBwYWNiZWxsLm5ldAorICoKKyAqICAgICAgICAgIEFkZGl0aW9uYWwgc3VwcG9ydCBhbmQgcG9ydCB0byAyLjYgTERNL3N5c2ZzIGJ5CisgKiAgICAgICAgICBNYXR0IFBvcnRlciA8bXBvcnRlckBrZXJuZWwuY3Jhc2hpbmcub3JnPgorICogICAgICAgICAgQ29weXJpZ2h0IDIwMDMtMjAwNCBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKyNpZmRlZiBfX0tFUk5FTF9fCisjaWZuZGVmIF9fSUJNX09DUF9IX18KKyNkZWZpbmUgX19JQk1fT0NQX0hfXworCisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisKKy8qCisgKiBJQk0gNHh4IE9DUCBzeXN0ZW0gaW5mb3JtYXRpb24KKyAqLworc3RydWN0IG9jcF9zeXNfaW5mb19kYXRhIHsKKwlpbnQJb3BiX2J1c19mcmVxOwkvKiBPUEIgQnVzIEZyZXF1ZW5jeSAoSHopICovCisJaW50CWViY19idXNfZnJlcTsJLyogRUJDIEJ1cyBGcmVxdWVuY3kgKEh6KSAqLworfTsKKworZXh0ZXJuIHN0cnVjdCBvY3Bfc3lzX2luZm9fZGF0YSBvY3Bfc3lzX2luZm87CisKKy8qCisgKiBFTUFDIGFkZGl0aW9uYWwgZGF0YSBhbmQgc3lzZnMgc3VwcG9ydAorICoKKyAqIE5vdGUgYWJvdXQgbWRpb19pZHg6IFdoZW4geW91IGhhdmUgYSB6bWlpLCBpdCdzIHVzdWFsbHkKKyAqIG5vdCBuZWNlc3NhcnksIGl0IGNvdmVycyB0aGUgY2FzZSBvZiB0aGUgNDA1RVAgd2hpY2ggaGFzCisgKiB0aGUgTURJTyBsaW5lcyBvbiBFTUFDMCBvbmx5CisgKgorICogTm90ZSBhYm91dCBwaHlfbWFwOiBQZXIgRU1BQyBtYXAgb2YgUEhZIGlkcyB3aGljaCBzaG91bGQKKyAqIGJlIHByb2JlZCBieSBlbWFjX3Byb2JlLiBEaWZmZXJlbnQgRU1BQ3MgY2FuIGhhdmUKKyAqIG92ZXJsYXBwaW5nIG1hcHMuCisgKgorICogTm90ZSwgdGhpcyBtYXAgdXNlcyBpbnZlcnNlIGxvZ2ljIGZvciBiaXRzOgorICogIDAgLSBpZCBzaG91bGQgYmUgcHJvYmVkCisgKiAgMSAtIGlkIHNob3VsZCBiZSBpZ25vcmVkCisgKgorICogRGVmYXVsdCB2YWx1ZSBvZiAweDAwMDAwMDAwIC0gd2lsbCByZXN1bHQgaW4gdXN1YWwKKyAqIGF1dG8tZGV0ZWN0aW9uIGxvZ2ljLgorICoKKyAqLworCitzdHJ1Y3Qgb2NwX2Z1bmNfZW1hY19kYXRhIHsKKwlpbnQJcmdtaWlfaWR4OwkvKiBSR01JSSBkZXZpY2UgaW5kZXggb3IgLTEgKi8KKwlpbnQJcmdtaWlfbXV4OwkvKiBSR01JSSBpbnB1dCBvZiB0aGlzIEVNQUMgKi8KKwlpbnQJem1paV9pZHg7CS8qIFpNSUkgZGV2aWNlIGluZGV4IG9yIC0xICovCisJaW50CXptaWlfbXV4OwkvKiBaTUlJIGlucHV0IG9mIHRoaXMgRU1BQyAqLworCWludAltYWxfaWR4OwkvKiBNQUwgZGV2aWNlIGluZGV4ICovCisJaW50CW1hbF9yeF9jaGFuOwkvKiBNQUwgcnggY2hhbm5lbCBudW1iZXIgKi8KKwlpbnQJbWFsX3R4X2NoYW47CS8qIE1BTCB0eCBjaGFubmVsIG51bWJlciAqLworCWludAl3b2xfaXJxOwkvKiBXT0wgaW50ZXJydXB0ICovCisJaW50CW1kaW9faWR4OwkvKiBFTUFDIGlkeCBvZiBNRElPIG1hc3RlciBvciAtMSAqLworCWludAl0YWhfaWR4OwkvKiBUQUggZGV2aWNlIGluZGV4IG9yIC0xICovCisJaW50CWp1bWJvOwkJLyogSnVtYm8gZnJhbWVzIGNhcGFibGUgZmxhZyAqLworCWludAlwaHlfbW9kZTsJLyogUEhZIHR5cGUgb3IgY29uZmlndXJhYmxlIG1vZGUgKi8KKwl1OAltYWNfYWRkcls2XTsJLyogRU1BQyBtYWMgYWRkcmVzcyAqLworCXUzMglwaHlfbWFwOwkvKiBFTUFDIHBoeSBtYXAgKi8KK307CisKKy8qIFN5c2ZzIHN1cHBvcnQgKi8KKyNkZWZpbmUgT0NQX1NZU0ZTX0VNQUNfREFUQSgpCQkJCQkJXAorT0NQX1NZU0ZTX0FERFRMKHN0cnVjdCBvY3BfZnVuY19lbWFjX2RhdGEsICIlZFxuIiwgZW1hYywgem1paV9pZHgpCVwKK09DUF9TWVNGU19BRERUTChzdHJ1Y3Qgb2NwX2Z1bmNfZW1hY19kYXRhLCAiJWRcbiIsIGVtYWMsIHptaWlfbXV4KQlcCitPQ1BfU1lTRlNfQUREVEwoc3RydWN0IG9jcF9mdW5jX2VtYWNfZGF0YSwgIiVkXG4iLCBlbWFjLCBtYWxfaWR4KQlcCitPQ1BfU1lTRlNfQUREVEwoc3RydWN0IG9jcF9mdW5jX2VtYWNfZGF0YSwgIiVkXG4iLCBlbWFjLCBtYWxfcnhfY2hhbikJXAorT0NQX1NZU0ZTX0FERFRMKHN0cnVjdCBvY3BfZnVuY19lbWFjX2RhdGEsICIlZFxuIiwgZW1hYywgbWFsX3R4X2NoYW4pCVwKK09DUF9TWVNGU19BRERUTChzdHJ1Y3Qgb2NwX2Z1bmNfZW1hY19kYXRhLCAiJWRcbiIsIGVtYWMsIHdvbF9pcnEpCVwKK09DUF9TWVNGU19BRERUTChzdHJ1Y3Qgb2NwX2Z1bmNfZW1hY19kYXRhLCAiJWRcbiIsIGVtYWMsIG1kaW9faWR4KQlcCisJCQkJCQkJCQlcCit2b2lkIG9jcF9zaG93X2VtYWNfZGF0YShzdHJ1Y3QgZGV2aWNlICpkZXYpCQkJCVwKK3sJCQkJCQkJCQlcCisJZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2VtYWNfem1paV9pZHgpOwkJXAorCWRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9lbWFjX3ptaWlfbXV4KTsJCVwKKwlkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZW1hY19tYWxfaWR4KTsJCVwKKwlkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZW1hY19tYWxfcnhfY2hhbik7CQlcCisJZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2VtYWNfbWFsX3R4X2NoYW4pOwkJXAorCWRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9lbWFjX3dvbF9pcnEpOwkJXAorCWRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9lbWFjX21kaW9faWR4KTsJCVwKK30KKworI2lmZGVmIENPTkZJR180MHgKKy8qCisgKiBIZWxwZXIgZnVuY3Rpb24gdG8gY29weSBNQUMgYWRkcmVzc2VzIGZyb20gdGhlIGJkX3QgdG8gT0NQIEVNQUMKKyAqIGFkZGl0aW9ucy4KKyAqCisgKiBUaGUgcmFuZ2Ugb2YgRU1BQyBpbmRpY2VzIChpbmNsdXNpdmUpIHRvIGJlIGNvcGllZCBhcmUgdGhlIGFyZ3VtZW50cy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGlibV9vY3Bfc2V0X2VtYWMoaW50IHN0YXJ0LCBpbnQgZW5kKQoreworCWludCBpOworCXN0cnVjdCBvY3BfZGVmICpkZWY7CisKKwkvKiBDb3B5IE1BQyBhZGRyZXNzZXMgdG8gRU1BQyBhZGRpdGlvbnMgKi8KKwlmb3IgKGk9c3RhcnQ7IGk8PWVuZDsgaSsrKSB7CisJCWRlZiA9IG9jcF9nZXRfb25lX2RldmljZShPQ1BfVkVORE9SX0lCTSwgT0NQX0ZVTkNfRU1BQywgaSk7CisJCW1lbWNweSgoKHN0cnVjdCBvY3BfZnVuY19lbWFjX2RhdGEgKilkZWYtPmFkZGl0aW9ucyktPm1hY19hZGRyLAorCQkJCSZfX3Jlcy5iaV9lbmV0YWRkcltpXSwKKwkJCQk2KTsKKwl9Cit9CisjZW5kaWYKKworLyoKKyAqIE1BTCBhZGRpdGlvbmFsIGRhdGEgYW5kIHN5c2ZzIHN1cHBvcnQKKyAqLworc3RydWN0IG9jcF9mdW5jX21hbF9kYXRhIHsKKwlpbnQJbnVtX3R4X2NoYW5zOwkvKiBOdW1iZXIgb2YgVFggY2hhbm5lbHMgKi8KKwlpbnQJbnVtX3J4X2NoYW5zOwkvKiBOdW1iZXIgb2YgUlggY2hhbm5lbHMgKi8KKwlpbnQgCXR4ZW9iX2lycTsJLyogVFggRW5kIE9mIEJ1ZmZlciBJUlEgICovCisJaW50IAlyeGVvYl9pcnE7CS8qIFJYIEVuZCBPZiBCdWZmZXIgSVJRICAqLworCWludAl0eGRlX2lycTsJLyogVFggRGVzY3JpcHRvciBFcnJvciBJUlEgKi8KKwlpbnQJcnhkZV9pcnE7CS8qIFJYIERlc2NyaXB0b3IgRXJyb3IgSVJRICovCisJaW50CXNlcnJfaXJxOwkvKiBNQUwgU3lzdGVtIEVycm9yIElSUSAgICAqLworfTsKKworI2RlZmluZSBPQ1BfU1lTRlNfTUFMX0RBVEEoKQkJCQkJCVwKK09DUF9TWVNGU19BRERUTChzdHJ1Y3Qgb2NwX2Z1bmNfbWFsX2RhdGEsICIlZFxuIiwgbWFsLCBudW1fdHhfY2hhbnMpCVwKK09DUF9TWVNGU19BRERUTChzdHJ1Y3Qgb2NwX2Z1bmNfbWFsX2RhdGEsICIlZFxuIiwgbWFsLCBudW1fcnhfY2hhbnMpCVwKK09DUF9TWVNGU19BRERUTChzdHJ1Y3Qgb2NwX2Z1bmNfbWFsX2RhdGEsICIlZFxuIiwgbWFsLCB0eGVvYl9pcnEpCVwKK09DUF9TWVNGU19BRERUTChzdHJ1Y3Qgb2NwX2Z1bmNfbWFsX2RhdGEsICIlZFxuIiwgbWFsLCByeGVvYl9pcnEpCVwKK09DUF9TWVNGU19BRERUTChzdHJ1Y3Qgb2NwX2Z1bmNfbWFsX2RhdGEsICIlZFxuIiwgbWFsLCB0eGRlX2lycSkJXAorT0NQX1NZU0ZTX0FERFRMKHN0cnVjdCBvY3BfZnVuY19tYWxfZGF0YSwgIiVkXG4iLCBtYWwsIHJ4ZGVfaXJxKQlcCitPQ1BfU1lTRlNfQUREVEwoc3RydWN0IG9jcF9mdW5jX21hbF9kYXRhLCAiJWRcbiIsIG1hbCwgc2Vycl9pcnEpCVwKKwkJCQkJCQkJCVwKK3ZvaWQgb2NwX3Nob3dfbWFsX2RhdGEoc3RydWN0IGRldmljZSAqZGV2KQkJCQlcCit7CQkJCQkJCQkJXAorCWRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9tYWxfbnVtX3R4X2NoYW5zKTsJCVwKKwlkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbWFsX251bV9yeF9jaGFucyk7CQlcCisJZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX21hbF90eGVvYl9pcnEpOwkJXAorCWRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9tYWxfcnhlb2JfaXJxKTsJCVwKKwlkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbWFsX3R4ZGVfaXJxKTsJCVwKKwlkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbWFsX3J4ZGVfaXJxKTsJCVwKKwlkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbWFsX3NlcnJfaXJxKTsJCVwKK30KKworLyoKKyAqIElJQyBhZGRpdGlvbmFsIGRhdGEgYW5kIHN5c2ZzIHN1cHBvcnQKKyAqLworc3RydWN0IG9jcF9mdW5jX2lpY19kYXRhIHsKKwlpbnQJZmFzdF9tb2RlOwkvKiBJSUMgZmFzdCBtb2RlIGVuYWJsZWQgKi8KK307CisKKyNkZWZpbmUgT0NQX1NZU0ZTX0lJQ19EQVRBKCkJCQkJCQlcCitPQ1BfU1lTRlNfQUREVEwoc3RydWN0IG9jcF9mdW5jX2lpY19kYXRhLCAiJWRcbiIsIGlpYywgZmFzdF9tb2RlKQlcCisJCQkJCQkJCQlcCit2b2lkIG9jcF9zaG93X2lpY19kYXRhKHN0cnVjdCBkZXZpY2UgKmRldikJCQkJXAorewkJCQkJCQkJCVwKKwlkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfaWljX2Zhc3RfbW9kZSk7CQkJXAorfQorI2VuZGlmIC8qIF9fSUJNX09DUF9IX18gKi8KKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvaWJtX29jcF9wY2kuaCBiL2luY2x1ZGUvYXNtLXBwYy9pYm1fb2NwX3BjaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4MWFiNjEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGMvaWJtX29jcF9wY2kuaApAQCAtMCwwICsxLDMyIEBACisvKgorICogQXV0aG9yOiBBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4KKyAqCisgKiAyMDAxLTIwMDIgKGMpIE1vbnRhVmlzdGEsIFNvZnR3YXJlLCBJbmMuICBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtCisgKiBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3MKKyAqIG9yIGltcGxpZWQuCisgKi8KKworI2lmZGVmIF9fS0VSTkVMX18KKyNpZm5kZWYgX19BU01fSUJNX09DUF9QQ0lfSF9fCisjZGVmaW5lIF9fQVNNX0lCTV9PQ1BfUENJX0hfXworCisvKiBQQ0kgMzIgKi8KKworc3RydWN0IHBtbV9yZWdzIHsKKwl1MzIgbGE7CisJdTMyIG1hOworCXUzMiBwY2lsYTsKKwl1MzIgcGNpaGE7Cit9OworCit0eXBlZGVmIHN0cnVjdCBwY2lsMF9yZWdzIHsKKwlzdHJ1Y3QgcG1tX3JlZ3MgcG1tWzNdOworCXUzMiBwdG0xbXM7CisJdTMyIHB0bTFsYTsKKwl1MzIgcHRtMm1zOworCXUzMiBwdG0ybGE7Cit9IHBjaTBfdDsKKworI2VuZGlmCQkJCS8qIF9fQVNNX0lCTV9PQ1BfUENJX0hfXyAqLworI2VuZGlmCQkJCS8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9pZGUuaCBiL2luY2x1ZGUvYXNtLXBwYy9pZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDZlNjU5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjL2lkZS5oCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tcHBjL2lkZS5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NC0xOTk2IExpbnVzIFRvcnZhbGRzICYgYXV0aG9ycyAqLworCisvKgorICogIFRoaXMgZmlsZSBjb250YWlucyB0aGUgcHBjIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBJREUgY29kZS4KKyAqLworCisjaWZuZGVmIF9fQVNNUFBDX0lERV9ICisjZGVmaW5lIF9fQVNNUFBDX0lERV9ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGFzbS9tcGM4eHguaD4KKworI2lmbmRlZiBNQVhfSFdJRlMKKyNkZWZpbmUgTUFYX0hXSUZTCTgKKyNlbmRpZgorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworZXh0ZXJuIHZvaWQgX19pZGVfbW1faW5zdyh2b2lkIF9faW9tZW0gKnBvcnQsIHZvaWQgKmFkZHIsIHUzMiBjb3VudCk7CitleHRlcm4gdm9pZCBfX2lkZV9tbV9vdXRzdyh2b2lkIF9faW9tZW0gKnBvcnQsIHZvaWQgKmFkZHIsIHUzMiBjb3VudCk7CitleHRlcm4gdm9pZCBfX2lkZV9tbV9pbnNsKHZvaWQgX19pb21lbSAqcG9ydCwgdm9pZCAqYWRkciwgdTMyIGNvdW50KTsKK2V4dGVybiB2b2lkIF9faWRlX21tX291dHNsKHZvaWQgX19pb21lbSAqcG9ydCwgdm9pZCAqYWRkciwgdTMyIGNvdW50KTsKKworc3RydWN0IGlkZV9tYWNoZGVwX2NhbGxzIHsKKyAgICAgICAgaW50ICAgICAgICAgKCpkZWZhdWx0X2lycSkodW5zaWduZWQgbG9uZyBiYXNlKTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyAoKmRlZmF1bHRfaW9fYmFzZSkoaW50IGluZGV4KTsKKyAgICAgICAgdm9pZCAgICAgICAgKCppZGVfaW5pdF9od2lmKShod19yZWdzX3QgKmh3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZGF0YV9wb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgY3RybF9wb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqaXJxKTsKK307CisKK2V4dGVybiBzdHJ1Y3QgaWRlX21hY2hkZXBfY2FsbHMgcHBjX2lkZV9tZDsKKworI3VuZGVmCVNVUFBPUlRfU0xPV19EQVRBX1BPUlRTCisjZGVmaW5lCVNVUFBPUlRfU0xPV19EQVRBX1BPUlRTCTAKKworI2RlZmluZSBJREVfQVJDSF9PQlNPTEVURV9ERUZBVUxUUworCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgaWRlX2RlZmF1bHRfaXJxKHVuc2lnbmVkIGxvbmcgYmFzZSkKK3sKKwlpZiAocHBjX2lkZV9tZC5kZWZhdWx0X2lycSkKKwkJcmV0dXJuIHBwY19pZGVfbWQuZGVmYXVsdF9pcnEoYmFzZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgaWRlX2RlZmF1bHRfaW9fYmFzZShpbnQgaW5kZXgpCit7CisJaWYgKHBwY19pZGVfbWQuZGVmYXVsdF9pb19iYXNlKQorCQlyZXR1cm4gcHBjX2lkZV9tZC5kZWZhdWx0X2lvX2Jhc2UoaW5kZXgpOworCXJldHVybiAwOworfQorCisjZGVmaW5lIElERV9BUkNIX09CU09MRVRFX0lOSVQKKyNkZWZpbmUgaWRlX2RlZmF1bHRfaW9fY3RsKGJhc2UpCSgoYmFzZSkgKyAweDIwNikgLyogb2Jzb2xldGUgKi8KKworI2lmZGVmIENPTkZJR19QQ0kKKyNkZWZpbmUgaWRlX2luaXRfZGVmYXVsdF9pcnEoYmFzZSkJKDApCisjZWxzZQorI2RlZmluZSBpZGVfaW5pdF9kZWZhdWx0X2lycShiYXNlKQlpZGVfZGVmYXVsdF9pcnEoYmFzZSkKKyNlbmRpZgorCisjaWYgKGRlZmluZWQgQ09ORklHX0FQVVMgfHwgZGVmaW5lZCBDT05GSUdfQkxLX0RFVl9NUEM4eHhfSURFICkKKyNkZWZpbmUgSURFX0FSQ0hfQUNLX0lOVFIgIDEKKyNkZWZpbmUgaWRlX2Fja19pbnRyKGh3aWYpIChod2lmLT5ody5hY2tfaW50ciA/IGh3aWYtPmh3LmFja19pbnRyKGh3aWYpIDogMSkKKyNlbmRpZgorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX19BU01QUENfSURFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9pbW1hcF84NXh4LmggYi9pbmNsdWRlL2FzbS1wcGMvaW1tYXBfODV4eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwZmI1ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGMvaW1tYXBfODV4eC5oCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogaW5jbHVkZS9hc20tcHBjL2ltbWFwXzg1eHguaAorICoKKyAqIE1QQzg1eHggSW50ZXJuYWwgTWVtb3J5IE1hcAorICoKKyAqIE1haW50YWluZXI6IEt1bWFyIEdhbGEgPGt1bWFyLmdhbGFAZnJlZXNjYWxlLmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgMjAwNCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2lmZGVmIF9fS0VSTkVMX18KKyNpZm5kZWYgX19BU01fSU1NQVBfODVYWF9IX18KKyNkZWZpbmUgX19BU01fSU1NQVBfODVYWF9IX18KKworLyogRXZlbnR1YWxseSB0aGlzIHNob3VsZCBkZWZpbmUgYWxsIHRoZSBJTyBibG9jayByZWdpc3RlcnMgaW4gODV4eCAqLworCisvKiBQQ0kgUmVnaXN0ZXJzICovCit0eXBlZGVmIHN0cnVjdCBjY3NyX3BjaSB7CisJdWludAljZmdfYWRkcjsJLyogMHguMDAwIC0gUENJIENvbmZpZ3VyYXRpb24gQWRkcmVzcyBSZWdpc3RlciAqLworCXVpbnQJY2ZnX2RhdGE7CS8qIDB4LjAwNCAtIFBDSSBDb25maWd1cmF0aW9uIERhdGEgUmVnaXN0ZXIgKi8KKwl1aW50CWludF9hY2s7CS8qIDB4LjAwOCAtIFBDSSBJbnRlcnJ1cHQgQWNrbm93bGVkZ2UgUmVnaXN0ZXIgKi8KKwljaGFyCXJlczFbMzA2MF07CisJdWludAlwb3RhcjA7CQkvKiAweC5jMDAgLSBQQ0kgT3V0Ym91bmQgVHJhbnNhY3Rpb24gQWRkcmVzcyBSZWdpc3RlciAwICovCisJdWludAlwb3RlYXIwOwkvKiAweC5jMDQgLSBQQ0kgT3V0Ym91bmQgVHJhbnNsYXRpb24gRXh0ZW5kZWQgQWRkcmVzcyBSZWdpc3RlciAwICovCisJdWludAlwb3diYXIwOwkvKiAweC5jMDggLSBQQ0kgT3V0Ym91bmQgV2luZG93IEJhc2UgQWRkcmVzcyBSZWdpc3RlciAwICovCisJY2hhcglyZXMyWzRdOworCXVpbnQJcG93YXIwOwkJLyogMHguYzEwIC0gUENJIE91dGJvdW5kIFdpbmRvdyBBdHRyaWJ1dGVzIFJlZ2lzdGVyIDAgKi8KKwljaGFyCXJlczNbMTJdOworCXVpbnQJcG90YXIxOwkJLyogMHguYzIwIC0gUENJIE91dGJvdW5kIFRyYW5zYWN0aW9uIEFkZHJlc3MgUmVnaXN0ZXIgMSAqLworCXVpbnQJcG90ZWFyMTsJLyogMHguYzI0IC0gUENJIE91dGJvdW5kIFRyYW5zbGF0aW9uIEV4dGVuZGVkIEFkZHJlc3MgUmVnaXN0ZXIgMSAqLworCXVpbnQJcG93YmFyMTsJLyogMHguYzI4IC0gUENJIE91dGJvdW5kIFdpbmRvdyBCYXNlIEFkZHJlc3MgUmVnaXN0ZXIgMSAqLworCWNoYXIJcmVzNFs0XTsKKwl1aW50CXBvd2FyMTsJCS8qIDB4LmMzMCAtIFBDSSBPdXRib3VuZCBXaW5kb3cgQXR0cmlidXRlcyBSZWdpc3RlciAxICovCisJY2hhcglyZXM1WzEyXTsKKwl1aW50CXBvdGFyMjsJCS8qIDB4LmM0MCAtIFBDSSBPdXRib3VuZCBUcmFuc2FjdGlvbiBBZGRyZXNzIFJlZ2lzdGVyIDIgKi8KKwl1aW50CXBvdGVhcjI7CS8qIDB4LmM0NCAtIFBDSSBPdXRib3VuZCBUcmFuc2xhdGlvbiBFeHRlbmRlZCBBZGRyZXNzIFJlZ2lzdGVyIDIgKi8KKwl1aW50CXBvd2JhcjI7CS8qIDB4LmM0OCAtIFBDSSBPdXRib3VuZCBXaW5kb3cgQmFzZSBBZGRyZXNzIFJlZ2lzdGVyIDIgKi8KKwljaGFyCXJlczZbNF07CisJdWludAlwb3dhcjI7CQkvKiAweC5jNTAgLSBQQ0kgT3V0Ym91bmQgV2luZG93IEF0dHJpYnV0ZXMgUmVnaXN0ZXIgMiAqLworCWNoYXIJcmVzN1sxMl07CisJdWludAlwb3RhcjM7CQkvKiAweC5jNjAgLSBQQ0kgT3V0Ym91bmQgVHJhbnNhY3Rpb24gQWRkcmVzcyBSZWdpc3RlciAzICovCisJdWludAlwb3RlYXIzOwkvKiAweC5jNjQgLSBQQ0kgT3V0Ym91bmQgVHJhbnNsYXRpb24gRXh0ZW5kZWQgQWRkcmVzcyBSZWdpc3RlciAzICovCisJdWludAlwb3diYXIzOwkvKiAweC5jNjggLSBQQ0kgT3V0Ym91bmQgV2luZG93IEJhc2UgQWRkcmVzcyBSZWdpc3RlciAzICovCisJY2hhcglyZXM4WzRdOworCXVpbnQJcG93YXIzOwkJLyogMHguYzcwIC0gUENJIE91dGJvdW5kIFdpbmRvdyBBdHRyaWJ1dGVzIFJlZ2lzdGVyIDMgKi8KKwljaGFyCXJlczlbMTJdOworCXVpbnQJcG90YXI0OwkJLyogMHguYzgwIC0gUENJIE91dGJvdW5kIFRyYW5zYWN0aW9uIEFkZHJlc3MgUmVnaXN0ZXIgNCAqLworCXVpbnQJcG90ZWFyNDsJLyogMHguYzg0IC0gUENJIE91dGJvdW5kIFRyYW5zbGF0aW9uIEV4dGVuZGVkIEFkZHJlc3MgUmVnaXN0ZXIgNCAqLworCXVpbnQJcG93YmFyNDsJLyogMHguYzg4IC0gUENJIE91dGJvdW5kIFdpbmRvdyBCYXNlIEFkZHJlc3MgUmVnaXN0ZXIgNCAqLworCWNoYXIJcmVzMTBbNF07CisJdWludAlwb3dhcjQ7CQkvKiAweC5jOTAgLSBQQ0kgT3V0Ym91bmQgV2luZG93IEF0dHJpYnV0ZXMgUmVnaXN0ZXIgNCAqLworCWNoYXIJcmVzMTFbMjY4XTsKKwl1aW50CXBpdGFyMzsJCS8qIDB4LmRhMCAtIFBDSSBJbmJvdW5kIFRyYW5zbGF0aW9uIEFkZHJlc3MgUmVnaXN0ZXIgMyAgKi8KKwljaGFyCXJlczEyWzRdOworCXVpbnQJcGl3YmFyMzsJLyogMHguZGE4IC0gUENJIEluYm91bmQgV2luZG93IEJhc2UgQWRkcmVzcyBSZWdpc3RlciAzICovCisJdWludAlwaXdiZWFyMzsJLyogMHguZGFjIC0gUENJIEluYm91bmQgV2luZG93IEJhc2UgRXh0ZW5kZWQgQWRkcmVzcyBSZWdpc3RlciAzICovCisJdWludAlwaXdhcjM7CQkvKiAweC5kYjAgLSBQQ0kgSW5ib3VuZCBXaW5kb3cgQXR0cmlidXRlcyBSZWdpc3RlciAzICovCisJY2hhcglyZXMxM1sxMl07CisJdWludAlwaXRhcjI7CQkvKiAweC5kYzAgLSBQQ0kgSW5ib3VuZCBUcmFuc2xhdGlvbiBBZGRyZXNzIFJlZ2lzdGVyIDIgICovCisJY2hhcglyZXMxNFs0XTsKKwl1aW50CXBpd2JhcjI7CS8qIDB4LmRjOCAtIFBDSSBJbmJvdW5kIFdpbmRvdyBCYXNlIEFkZHJlc3MgUmVnaXN0ZXIgMiAqLworCXVpbnQJcGl3YmVhcjI7CS8qIDB4LmRjYyAtIFBDSSBJbmJvdW5kIFdpbmRvdyBCYXNlIEV4dGVuZGVkIEFkZHJlc3MgUmVnaXN0ZXIgMiAqLworCXVpbnQJcGl3YXIyOwkJLyogMHguZGQwIC0gUENJIEluYm91bmQgV2luZG93IEF0dHJpYnV0ZXMgUmVnaXN0ZXIgMiAqLworCWNoYXIJcmVzMTVbMTJdOworCXVpbnQJcGl0YXIxOwkJLyogMHguZGUwIC0gUENJIEluYm91bmQgVHJhbnNsYXRpb24gQWRkcmVzcyBSZWdpc3RlciAxICAqLworCWNoYXIJcmVzMTZbNF07CisJdWludAlwaXdiYXIxOwkvKiAweC5kZTggLSBQQ0kgSW5ib3VuZCBXaW5kb3cgQmFzZSBBZGRyZXNzIFJlZ2lzdGVyIDEgKi8KKwljaGFyCXJlczE3WzRdOworCXVpbnQJcGl3YXIxOwkJLyogMHguZGYwIC0gUENJIEluYm91bmQgV2luZG93IEF0dHJpYnV0ZXMgUmVnaXN0ZXIgMSAqLworCWNoYXIJcmVzMThbMTJdOworCXVpbnQJZXJyX2RyOwkJLyogMHguZTAwIC0gUENJIEVycm9yIERldGVjdCBSZWdpc3RlciAqLworCXVpbnQJZXJyX2NhcF9kcjsJLyogMHguZTA0IC0gUENJIEVycm9yIENhcHR1cmUgRGlzYWJsZSBSZWdpc3RlciAqLworCXVpbnQJZXJyX2VuOwkJLyogMHguZTA4IC0gUENJIEVycm9yIEVuYWJsZSBSZWdpc3RlciAqLworCXVpbnQJZXJyX2F0dHJpYjsJLyogMHguZTBjIC0gUENJIEVycm9yIEF0dHJpYnV0ZXMgQ2FwdHVyZSBSZWdpc3RlciAqLworCXVpbnQJZXJyX2FkZHI7CS8qIDB4LmUxMCAtIFBDSSBFcnJvciBBZGRyZXNzIENhcHR1cmUgUmVnaXN0ZXIgKi8KKwl1aW50CWVycl9leHRfYWRkcjsJLyogMHguZTE0IC0gUENJIEVycm9yIEV4dGVuZGVkIEFkZHJlc3MgQ2FwdHVyZSBSZWdpc3RlciAqLworCXVpbnQJZXJyX2RsOwkJLyogMHguZTE4IC0gUENJIEVycm9yIERhdGEgTG93IENhcHR1cmUgUmVnaXN0ZXIgKi8KKwl1aW50CWVycl9kaDsJCS8qIDB4LmUxYyAtIFBDSSBFcnJvciBEYXRhIEhpZ2ggQ2FwdHVyZSBSZWdpc3RlciAqLworCXVpbnQJZ2FzX3RpbXI7CS8qIDB4LmUyMCAtIFBDSSBHYXNrZXQgVGltZXIgUmVnaXN0ZXIgKi8KKwl1aW50CXBjaV90aW1yOwkvKiAweC5lMjQgLSBQQ0kgVGltZXIgUmVnaXN0ZXIgKi8KKwljaGFyCXJlczE5WzQ3Ml07Cit9IGNjc3JfcGNpX3Q7CisKKy8qIEdsb2JhbCBVdGlsaXR5IFJlZ2lzdGVycyAqLwordHlwZWRlZiBzdHJ1Y3QgY2Nzcl9ndXRzIHsKKwl1aW50CXBvcnBsbHNyOwkvKiAweC4wMDAwIC0gUE9SIFBMTCBSYXRpbyBTdGF0dXMgUmVnaXN0ZXIgKi8KKwl1aW50CXBvcmJtc3I7CS8qIDB4LjAwMDQgLSBQT1IgQm9vdCBNb2RlIFN0YXR1cyBSZWdpc3RlciAqLworCXVpbnQJcG9yaW1wc2NyOwkvKiAweC4wMDA4IC0gUE9SIEkvTyBJbXBlZGFuY2UgU3RhdHVzIGFuZCBDb250cm9sIFJlZ2lzdGVyICovCisJdWludAlwb3JkZXZzcjsJLyogMHguMDAwYyAtIFBPUiBJL08gRGV2aWNlIFN0YXR1cyBSZWdpc3RlciAqLworCXVpbnQJcG9yZGJnbXNyOwkvKiAweC4wMDEwIC0gUE9SIERlYnVnIE1vZGUgU3RhdHVzIFJlZ2lzdGVyICovCisJY2hhcglyZXMxWzEyXTsKKwl1aW50CWdwcG9yY3I7CS8qIDB4LjAwMjAgLSBHZW5lcmFsLVB1cnBvc2UgUE9SIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKwljaGFyCXJlczJbMTJdOworCXVpbnQJZ3Bpb2NyOwkJLyogMHguMDAzMCAtIEdQSU8gQ29udHJvbCBSZWdpc3RlciAqLworCWNoYXIJcmVzM1sxMl07CisJdWludAlncG91dGRyOwkvKiAweC4wMDQwIC0gR2VuZXJhbC1QdXJwb3NlIE91dHB1dCBEYXRhIFJlZ2lzdGVyICovCisJY2hhcglyZXM0WzEyXTsKKwl1aW50CWdwaW5kcjsJCS8qIDB4LjAwNTAgLSBHZW5lcmFsLVB1cnBvc2UgSW5wdXQgRGF0YSBSZWdpc3RlciAqLworCWNoYXIJcmVzNVsxMl07CisJdWludAlwbXV4Y3I7CQkvKiAweC4wMDYwIC0gQWx0ZXJuYXRlIEZ1bmN0aW9uIFNpZ25hbCBNdWx0aXBsZXggQ29udHJvbCAqLworCWNoYXIJcmVzNlsxMl07CisJdWludAlkZXZkaXNyOwkvKiAweC4wMDcwIC0gRGV2aWNlIERpc2FibGUgQ29udHJvbCAqLworCWNoYXIJcmVzN1sxMl07CisJdWludAlwb3dtZ3Rjc3I7CS8qIDB4LjAwODAgLSBQb3dlciBNYW5hZ2VtZW50IFN0YXR1cyBhbmQgQ29udHJvbCBSZWdpc3RlciAqLworCWNoYXIJcmVzOFsxMl07CisJdWludAltY3BzdW1yOwkvKiAweC4wMDkwIC0gTWFjaGluZSBDaGVjayBTdW1tYXJ5IFJlZ2lzdGVyICovCisJY2hhcglyZXM5WzEyXTsKKwl1aW50CXB2cjsJCS8qIDB4LjAwYTAgLSBQcm9jZXNzb3IgVmVyc2lvbiBSZWdpc3RlciAqLworCXVpbnQJc3ZyOwkJLyogMHguMDBhNCAtIFN5c3RlbSBWZXJzaW9uIFJlZ2lzdGVyICovCisJY2hhcglyZXMxMFszNDE2XTsKKwl1aW50CWNsa29jcjsJCS8qIDB4LjBlMDAgLSBDbG9jayBPdXQgU2VsZWN0IFJlZ2lzdGVyICovCisJY2hhcglyZXMxMVsxMl07CisJdWludAlkZHJkbGxjcjsJLyogMHguMGUxMCAtIEREUiBETEwgQ29udHJvbCBSZWdpc3RlciAqLworCWNoYXIJcmVzMTJbMTJdOworCXVpbnQJbGJjZGxsY3I7CS8qIDB4LjBlMjAgLSBMQkMgRExMIENvbnRyb2wgUmVnaXN0ZXIgKi8KKwljaGFyCXJlczEzWzYxOTE2XTsKK30gY2Nzcl9ndXRzX3Q7CisKKyNlbmRpZiAvKiBfX0FTTV9JTU1BUF84NVhYX0hfXyAqLworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9pbW1hcF9jcG0yLmggYi9pbmNsdWRlL2FzbS1wcGMvaW1tYXBfY3BtMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjMjNkOWMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGMvaW1tYXBfY3BtMi5oCkBAIC0wLDAgKzEsNjQ4IEBACisvKgorICogQ1BNMiBJbnRlcm5hbCBNZW1vcnkgTWFwCisgKiBDb3B5cmlnaHQgKGMpIDE5OTkgRGFuIE1hbGVrIChkbWFsZWtAamxjLm5ldCkKKyAqCisgKiBUaGUgSW50ZXJuYWwgTWVtb3J5IE1hcCBmb3IgZGV2aWNlcyB3aXRoIENQTTIgb24gdGhlbS4gIFRoaXMKKyAqIGlzIHRoZSBzdXBlcnNldCBvZiBhbGwgQ1BNMiBkZXZpY2VzICg4MjYwLCA4MjY2LCA4MjgwLCA4MjcyLAorICogODU2MCkuIAorICovCisjaWZkZWYgX19LRVJORUxfXworI2lmbmRlZiBfX0lNTUFQX0NQTTJfXworI2RlZmluZSBfX0lNTUFQX0NQTTJfXworCisvKiBTeXN0ZW0gY29uZmlndXJhdGlvbiByZWdpc3RlcnMuCisqLwordHlwZWRlZglzdHJ1Y3Qgc3lzXzgyeHhfY29uZiB7CisJdTMyCXNjX3NpdW1jcjsKKwl1MzIJc2Nfc3lwY3I7CisJdTgJcmVzMVs2XTsKKwl1MTYJc2Nfc3dzcjsKKwl1OAlyZXMyWzIwXTsKKwl1MzIJc2NfYmNyOworCXU4CXNjX3BwY19hY3I7CisJdTgJcmVzM1szXTsKKwl1MzIJc2NfcHBjX2Fscmg7CisJdTMyCXNjX3BwY19hbHJsOworCXU4CXNjX2xjbF9hY3I7CisJdTgJcmVzNFszXTsKKwl1MzIJc2NfbGNsX2Fscmg7CisJdTMyCXNjX2xjbF9hbHJsOworCXUzMglzY190ZXNjcjE7CisJdTMyCXNjX3Rlc2NyMjsKKwl1MzIJc2NfbHRlc2NyMTsKKwl1MzIJc2NfbHRlc2NyMjsKKwl1MzIJc2NfcGR0ZWE7CisJdTgJc2NfcGR0ZW07CisJdTgJcmVzNVszXTsKKwl1MzIJc2NfbGR0ZWE7CisJdTgJc2NfbGR0ZW07CisJdTgJcmVzNlsxNjNdOworfSBzeXNjb25mXzgyeHhfY3BtMl90OworCit0eXBlZGVmCXN0cnVjdCBzeXNfODV4eF9jb25mIHsKKwl1MzIJc2NfY2VhcjsKKwl1MTYJc2NfY2VlcjsKKwl1MTYJc2NfY2VtcjsKKwl1OAlyZXMxWzcwXTsKKwl1MzIJc2Nfc21hZXI7CisJdTgJcmVzMls0XTsKKwl1MzIJc2Nfc21ldnI7CisJdTMyCXNjX3NtY3RyOworCXUzMglzY19sbWFlcjsKKwl1OAlyZXMzWzRdOworCXUzMglzY19sbWV2cjsKKwl1MzIJc2NfbG1jdHI7CisJdTgJcmVzNFsxNDRdOworfSBzeXNjb25mXzg1eHhfY3BtMl90OworCit0eXBlZGVmIHVuaW9uIHN5c19jb25mIHsKKwlzeXNjb25mXzgyeHhfY3BtMl90CXNpdV84Mnh4OworCXN5c2NvbmZfODV4eF9jcG0yX3QJc2l1Xzg1eHg7Cit9IHN5c2NvbmZfY3BtMl90OworCisKKworLyogTWVtb3J5IGNvbnRyb2xsZXIgcmVnaXN0ZXJzLgorKi8KK3R5cGVkZWYgc3RydWN0CW1lbV9jdGxyIHsKKwl1MzIJbWVtY19icjA7CisJdTMyCW1lbWNfb3IwOworCXUzMgltZW1jX2JyMTsKKwl1MzIJbWVtY19vcjE7CisJdTMyCW1lbWNfYnIyOworCXUzMgltZW1jX29yMjsKKwl1MzIJbWVtY19icjM7CisJdTMyCW1lbWNfb3IzOworCXUzMgltZW1jX2JyNDsKKwl1MzIJbWVtY19vcjQ7CisJdTMyCW1lbWNfYnI1OworCXUzMgltZW1jX29yNTsKKwl1MzIJbWVtY19icjY7CisJdTMyCW1lbWNfb3I2OworCXUzMgltZW1jX2JyNzsKKwl1MzIJbWVtY19vcjc7CisJdTMyCW1lbWNfYnI4OworCXUzMgltZW1jX29yODsKKwl1MzIJbWVtY19icjk7CisJdTMyCW1lbWNfb3I5OworCXUzMgltZW1jX2JyMTA7CisJdTMyCW1lbWNfb3IxMDsKKwl1MzIJbWVtY19icjExOworCXUzMgltZW1jX29yMTE7CisJdTgJcmVzMVs4XTsKKwl1MzIJbWVtY19tYXI7CisJdTgJcmVzMls0XTsKKwl1MzIJbWVtY19tYW1yOworCXUzMgltZW1jX21ibXI7CisJdTMyCW1lbWNfbWNtcjsKKwl1OAlyZXMzWzhdOworCXUxNgltZW1jX21wdHByOworCXU4CXJlczRbMl07CisJdTMyCW1lbWNfbWRyOworCXU4CXJlczVbNF07CisJdTMyCW1lbWNfcHNkbXI7CisJdTMyCW1lbWNfbHNkbXI7CisJdTgJbWVtY19wdXJ0OworCXU4CXJlczZbM107CisJdTgJbWVtY19wc3J0OworCXU4CXJlczdbM107CisJdTgJbWVtY19sdXJ0OworCXU4CXJlczhbM107CisJdTgJbWVtY19sc3J0OworCXU4CXJlczlbM107CisJdTMyCW1lbWNfaW1tcjsKKwl1MzIJbWVtY19wY2licjA7CisJdTMyCW1lbWNfcGNpYnIxOworCXU4CXJlczEwWzE2XTsKKwl1MzIJbWVtY19wY2ltc2swOworCXUzMgltZW1jX3BjaW1zazE7CisJdTgJcmVzMTFbNTJdOworfSBtZW1jdGxfY3BtMl90OworCisvKiBTeXN0ZW0gSW50ZWdyYXRpb24gVGltZXJzLgorKi8KK3R5cGVkZWYgc3RydWN0CXN5c19pbnRfdGltZXJzIHsKKwl1OAlyZXMxWzMyXTsKKwl1MTYJc2l0X3RtY250c2M7CisJdTgJcmVzMlsyXTsKKwl1MzIJc2l0X3RtY250OworCXU4CXJlczNbNF07CisJdTMyCXNpdF90bWNudGFsOworCXU4CXJlczRbMTZdOworCXUxNglzaXRfcGlzY3I7CisJdTgJcmVzNVsyXTsKKwl1MzIJc2l0X3BpdGM7CisJdTMyCXNpdF9waXRyOworCXU4ICAgICAgcmVzNls5NF07CisJdTgJcmVzN1szOTBdOworfSBzaXRfY3BtMl90OworCisjZGVmaW5lIFBJU0NSX1BJUlFfTUFTSwkJKCh1MTYpMHhmZjAwKQorI2RlZmluZSBQSVNDUl9QUwkJKCh1MTYpMHgwMDgwKQorI2RlZmluZSBQSVNDUl9QSUUJCSgodTE2KTB4MDAwNCkKKyNkZWZpbmUgUElTQ1JfUFRGCQkoKHUxNikweDAwMDIpCisjZGVmaW5lIFBJU0NSX1BURQkJKCh1MTYpMHgwMDAxKQorCisvKiBQQ0kgQ29udHJvbGxlci4KKyovCit0eXBlZGVmIHN0cnVjdCBwY2lfY3RsciB7CisJdTMyCXBjaV9vbWlzcjsKKwl1MzIJcGNpX29taW1yOworCXU4CXJlczFbOF07CisJdTMyCXBjaV9pZnFwcjsKKwl1MzIJcGNpX29mcXByOworCXU4CXJlczJbOF07CisJdTMyCXBjaV9pbXIwOworCXUzMglwY2lfaW1yMTsKKwl1MzIJcGNpX29tcjA7CisJdTMyCXBjaV9vbXIxOworCXUzMglwY2lfb2RyOworCXU4CXJlczNbNF07CisJdTMyCXBjaV9pZHI7CisJdTgJcmVzNFsyMF07CisJdTMyCXBjaV9pbWlzcjsKKwl1MzIJcGNpX2ltaW1yOworCXU4CXJlczVbMjRdOworCXUzMglwY2lfaWZocHI7CisJdTgJcmVzNls0XTsKKwl1MzIJcGNpX2lmdHByOworCXU4CXJlczdbNF07CisJdTMyCXBjaV9pcGhwcjsKKwl1OAlyZXM4WzRdOworCXUzMglwY2lfaXB0cHI7CisJdTgJcmVzOVs0XTsKKwl1MzIJcGNpX29maHByOworCXU4CXJlczEwWzRdOworCXUzMglwY2lfb2Z0cHI7CisJdTgJcmVzMTFbNF07CisJdTMyCXBjaV9vcGhwcjsKKwl1OAlyZXMxMls0XTsKKwl1MzIJcGNpX29wdHByOworCXU4CXJlczEzWzhdOworCXUzMglwY2lfbXVjcjsKKwl1OAlyZXMxNFs4XTsKKwl1MzIJcGNpX3FiYXI7CisJdTgJcmVzMTVbMTJdOworCXUzMglwY2lfZG1hbXIwOworCXUzMglwY2lfZG1hc3IwOworCXUzMglwY2lfZG1hY2RhcjA7CisJdTgJcmVzMTZbNF07CisJdTMyCXBjaV9kbWFzYXIwOworCXU4CXJlczE3WzRdOworCXUzMglwY2lfZG1hZGFyMDsKKwl1OAlyZXMxOFs0XTsKKwl1MzIJcGNpX2RtYWJjcjA7CisJdTMyCXBjaV9kbWFuZGFyMDsKKwl1OAlyZXMxOVs4Nl07CisJdTMyCXBjaV9kbWFtcjE7CisJdTMyCXBjaV9kbWFzcjE7CisJdTMyCXBjaV9kbWFjZGFyMTsKKwl1OAlyZXMyMFs0XTsKKwl1MzIJcGNpX2RtYXNhcjE7CisJdTgJcmVzMjFbNF07CisJdTMyCXBjaV9kbWFkYXIxOworCXU4CXJlczIyWzRdOworCXUzMglwY2lfZG1hYmNyMTsKKwl1MzIJcGNpX2RtYW5kYXIxOworCXU4CXJlczIzWzg4XTsKKwl1MzIJcGNpX2RtYW1yMjsKKwl1MzIJcGNpX2RtYXNyMjsKKwl1MzIJcGNpX2RtYWNkYXIyOworCXU4CXJlczI0WzRdOworCXUzMglwY2lfZG1hc2FyMjsKKwl1OAlyZXMyNVs0XTsKKwl1MzIJcGNpX2RtYWRhcjI7CisJdTgJcmVzMjZbNF07CisJdTMyCXBjaV9kbWFiY3IyOworCXUzMglwY2lfZG1hbmRhcjI7CisJdTgJcmVzMjdbODhdOworCXUzMglwY2lfZG1hbXIzOworCXUzMglwY2lfZG1hc3IzOworCXUzMglwY2lfZG1hY2RhcjM7CisJdTgJcmVzMjhbNF07CisJdTMyCXBjaV9kbWFzYXIzOworCXU4CXJlczI5WzRdOworCXUzMglwY2lfZG1hZGFyMzsKKwl1OAlyZXMzMFs0XTsKKwl1MzIJcGNpX2RtYWJjcjM7CisJdTMyCXBjaV9kbWFuZGFyMzsKKwl1OAlyZXMzMVszNDRdOworCXUzMglwY2lfcG90YXIwOworCXU4CXJlczMyWzRdOworCXUzMglwY2lfcG9iYXIwOworCXU4CXJlczMzWzRdOworCXUzMglwY2lfcG9jbXIwOworCXU4CXJlczM0WzRdOworCXUzMglwY2lfcG90YXIxOworCXU4CXJlczM1WzRdOworCXUzMglwY2lfcG9iYXIxOworCXU4CXJlczM2WzRdOworCXUzMglwY2lfcG9jbXIxOworCXU4CXJlczM3WzRdOworCXUzMglwY2lfcG90YXIyOworCXU4CXJlczM4WzRdOworCXUzMglwY2lfcG9iYXIyOworCXU4CXJlczM5WzRdOworCXUzMglwY2lfcG9jbXIyOworCXU4CXJlczQwWzUwXTsKKwl1MzIJcGNpX3B0Y3I7CisJdTMyCXBjaV9ncGNyOworCXUzMglwY2lfZ2NyOworCXUzMglwY2lfZXNyOworCXUzMglwY2lfZW1yOworCXUzMglwY2lfZWNyOworCXUzMglwY2lfZWFjcjsKKwl1OAlyZXM0MVs0XTsKKwl1MzIJcGNpX2VkY3I7CisJdTgJcmVzNDJbNF07CisJdTMyCXBjaV9lY2NyOworCXU4CXJlczQzWzQ0XTsKKwl1MzIJcGNpX3BpdGFyMTsKKwl1OAlyZXM0NFs0XTsKKwl1MzIJcGNpX3BpYmFyMTsKKwl1OAlyZXM0NVs0XTsKKwl1MzIJcGNpX3BpY21yMTsKKwl1OAlyZXM0Nls0XTsKKwl1MzIJcGNpX3BpdGFyMDsKKwl1OAlyZXM0N1s0XTsKKwl1MzIJcGNpX3BpYmFyMDsKKwl1OAlyZXM0OFs0XTsKKwl1MzIJcGNpX3BpY21yMDsKKwl1OAlyZXM0OVs0XTsKKwl1MzIJcGNpX2NmZ19hZGRyOworCXUzMglwY2lfY2ZnX2RhdGE7CisJdTMyCXBjaV9pbnRfYWNrOworCXU4CXJlczUwWzc1Nl07Cit9IHBjaV9jcG0yX3Q7CisKKy8qIEludGVycnVwdCBDb250cm9sbGVyLgorKi8KK3R5cGVkZWYgc3RydWN0IGludGVycnVwdF9jb250cm9sbGVyIHsKKwl1MTYJaWNfc2ljcjsKKwl1OAlyZXMxWzJdOworCXUzMglpY19zaXZlYzsKKwl1MzIJaWNfc2lwbnJoOworCXUzMglpY19zaXBucmw7CisJdTMyCWljX3NpcHJyOworCXUzMglpY19zY3Bycmg7CisJdTMyCWljX3NjcHJybDsKKwl1MzIJaWNfc2ltcmg7CisJdTMyCWljX3NpbXJsOworCXUzMglpY19zaWV4cjsKKwl1OAlyZXMyWzg4XTsKK30gaW50Y3RsX2NwbTJfdDsKKworLyogQ2xvY2tzIGFuZCBSZXNldC4KKyovCit0eXBlZGVmIHN0cnVjdCBjbGtfYW5kX3Jlc2V0IHsKKwl1MzIJY2FyX3NjY3I7CisJdTgJcmVzMVs0XTsKKwl1MzIJY2FyX3NjbXI7CisJdTgJcmVzMls0XTsKKwl1MzIJY2FyX3JzcjsKKwl1MzIJY2FyX3JtcjsKKwl1OAlyZXNbMTA0XTsKK30gY2FyX2NwbTJfdDsKKworLyogSW5wdXQvT3V0cHV0IFBvcnQgY29udHJvbC9zdGF0dXMgcmVnaXN0ZXJzLgorICogTmFtZXMgY29uc2lzdGVudCB3aXRoIHByb2Nlc3NvciBtYW51YWwsIGFsdGhvdWdoIHRoZXkgYXJlIGRpZmZlcmVudAorICogZnJvbSB0aGUgb3JpZ2luYWwgOHh4IG5hbWVzLi4uLi4uLgorICovCit0eXBlZGVmIHN0cnVjdCBpb19wb3J0IHsKKwl1MzIJaW9wX3BkaXJhOworCXUzMglpb3BfcHBhcmE7CisJdTMyCWlvcF9wc29yYTsKKwl1MzIJaW9wX3BvZHJhOworCXUzMglpb3BfcGRhdGE7CisJdTgJcmVzMVsxMl07CisJdTMyCWlvcF9wZGlyYjsKKwl1MzIJaW9wX3BwYXJiOworCXUzMglpb3BfcHNvcmI7CisJdTMyCWlvcF9wb2RyYjsKKwl1MzIJaW9wX3BkYXRiOworCXU4CXJlczJbMTJdOworCXUzMglpb3BfcGRpcmM7CisJdTMyCWlvcF9wcGFyYzsKKwl1MzIJaW9wX3Bzb3JjOworCXUzMglpb3BfcG9kcmM7CisJdTMyCWlvcF9wZGF0YzsKKwl1OAlyZXMzWzEyXTsKKwl1MzIJaW9wX3BkaXJkOworCXUzMglpb3BfcHBhcmQ7CisJdTMyCWlvcF9wc29yZDsKKwl1MzIJaW9wX3BvZHJkOworCXUzMglpb3BfcGRhdGQ7CisJdTgJcmVzNFsxMl07Cit9IGlvcF9jcG0yX3Q7CisKKy8qIENvbW11bmljYXRpb24gUHJvY2Vzc29yIE1vZHVsZSBUaW1lcnMKKyovCit0eXBlZGVmIHN0cnVjdCBjcG1fdGltZXJzIHsKKwl1OAljcG10X3RnY3IxOworCXU4CXJlczFbM107CisJdTgJY3BtdF90Z2NyMjsKKwl1OAlyZXMyWzExXTsKKwl1MTYJY3BtdF90bXIxOworCXUxNgljcG10X3RtcjI7CisJdTE2CWNwbXRfdHJyMTsKKwl1MTYJY3BtdF90cnIyOworCXUxNgljcG10X3RjcjE7CisJdTE2CWNwbXRfdGNyMjsKKwl1MTYJY3BtdF90Y24xOworCXUxNgljcG10X3RjbjI7CisJdTE2CWNwbXRfdG1yMzsKKwl1MTYJY3BtdF90bXI0OworCXUxNgljcG10X3RycjM7CisJdTE2CWNwbXRfdHJyNDsKKwl1MTYJY3BtdF90Y3IzOworCXUxNgljcG10X3RjcjQ7CisJdTE2CWNwbXRfdGNuMzsKKwl1MTYJY3BtdF90Y240OworCXUxNgljcG10X3RlcjE7CisJdTE2CWNwbXRfdGVyMjsKKwl1MTYJY3BtdF90ZXIzOworCXUxNgljcG10X3RlcjQ7CisJdTgJcmVzM1s1ODRdOworfSBjcG10aW1lcl9jcG0yX3Q7CisKKy8qIERNQSBjb250cm9sL3N0YXR1cyByZWdpc3RlcnMuCisqLwordHlwZWRlZiBzdHJ1Y3Qgc2RtYV9jc3IgeworCXU4CXJlczBbMjRdOworCXU4CXNkbWFfc2RzcjsKKwl1OAlyZXMxWzNdOworCXU4CXNkbWFfc2RtcjsKKwl1OAlyZXMyWzNdOworCXU4CXNkbWFfaWRzcjE7CisJdTgJcmVzM1szXTsKKwl1OAlzZG1hX2lkbXIxOworCXU4CXJlczRbM107CisJdTgJc2RtYV9pZHNyMjsKKwl1OAlyZXM1WzNdOworCXU4CXNkbWFfaWRtcjI7CisJdTgJcmVzNlszXTsKKwl1OAlzZG1hX2lkc3IzOworCXU4CXJlczdbM107CisJdTgJc2RtYV9pZG1yMzsKKwl1OAlyZXM4WzNdOworCXU4CXNkbWFfaWRzcjQ7CisJdTgJcmVzOVszXTsKKwl1OAlzZG1hX2lkbXI0OworCXU4CXJlczEwWzcwN107Cit9IHNkbWFfY3BtMl90OworCisvKiBGYXN0IGNvbnRyb2xsZXJzCisqLwordHlwZWRlZiBzdHJ1Y3QgZmNjIHsKKwl1MzIJZmNjX2dmbXI7CisJdTMyCWZjY19mcHNtcjsKKwl1MTYJZmNjX2Z0b2RyOworCXU4CXJlczFbMl07CisJdTE2CWZjY19mZHNyOworCXU4CXJlczJbMl07CisJdTE2CWZjY19mY2NlOworCXU4CXJlczNbMl07CisJdTE2CWZjY19mY2NtOworCXU4CXJlczRbMl07CisJdTgJZmNjX2ZjY3M7CisJdTgJcmVzNVszXTsKKwl1OAlmY2NfZnRpcnJfcGh5WzRdOworfSBmY2NfdDsKKworLyogRmFzdCBjb250cm9sbGVycyBjb250aW51ZWQKKyAqLwordHlwZWRlZiBzdHJ1Y3QgZmNjX2MgeworCXUzMglmY2NfZmlycGVyOworCXUzMglmY2NfZmlyZXI7CisJdTMyCWZjY19maXJzcl9oaTsKKwl1MzIJZmNjX2ZpcnNyX2xvOworCXU4CWZjY19nZmVtcjsKKwl1OAlyZXMxWzE1XTsKK30gZmNjX2NfdDsKKworLyogVEMgTGF5ZXIKKyAqLwordHlwZWRlZiBzdHJ1Y3QgdGNsYXllciB7CisJdTE2CXRjX3RjbW9kZTsKKwl1MTYJdGNfY2RzbXI7CisJdTE2CXRjX3RjZXI7CisJdTE2CXRjX3JjYzsKKwl1MTYJdGNfdGNtcjsKKwl1MTYJdGNfZmNjOworCXUxNgl0Y19jY2M7CisJdTE2CXRjX2ljYzsKKwl1MTYJdGNfdGNjOworCXUxNgl0Y19lY2M7CisJdTgJcmVzMVsxMl07Cit9IHRjbGF5ZXJfdDsKKworCisvKiBJMkMKKyovCit0eXBlZGVmIHN0cnVjdCBpMmMgeworCXU4CWkyY19pMm1vZDsKKwl1OAlyZXMxWzNdOworCXU4CWkyY19pMmFkZDsKKwl1OAlyZXMyWzNdOworCXU4CWkyY19pMmJyZzsKKwl1OAlyZXMzWzNdOworCXU4CWkyY19pMmNvbTsKKwl1OAlyZXM0WzNdOworCXU4CWkyY19pMmNlcjsKKwl1OAlyZXM1WzNdOworCXU4CWkyY19pMmNtcjsKKwl1OAlyZXM2WzMzMV07Cit9IGkyY19jcG0yX3Q7CisKK3R5cGVkZWYgc3RydWN0IHNjYyB7CQkvKiBTZXJpYWwgY29tbXVuaWNhdGlvbiBjaGFubmVscyAqLworCXUzMglzY2NfZ3Ntcmw7CisJdTMyCXNjY19nc21yaDsKKwl1MTYJc2NjX3BzbXI7CisJdTgJcmVzMVsyXTsKKwl1MTYJc2NjX3RvZHI7CisJdTE2CXNjY19kc3I7CisJdTE2CXNjY19zY2NlOworCXU4CXJlczJbMl07CisJdTE2CXNjY19zY2NtOworCXU4CXJlczM7CisJdTgJc2NjX3NjY3M7CisJdTgJcmVzNFs4XTsKK30gc2NjX3Q7CisKK3R5cGVkZWYgc3RydWN0IHNtYyB7CQkvKiBTZXJpYWwgbWFuYWdlbWVudCBjaGFubmVscyAqLworCXU4CXJlczFbMl07CisJdTE2CXNtY19zbWNtcjsKKwl1OAlyZXMyWzJdOworCXU4CXNtY19zbWNlOworCXU4CXJlczNbM107CisJdTgJc21jX3NtY207CisJdTgJcmVzNFs1XTsKK30gc21jX3Q7CisKKy8qIFNlcmlhbCBQZXJpcGhlcmFsIEludGVyZmFjZS4KKyovCit0eXBlZGVmIHN0cnVjdCBzcGlfY3RybCB7CisJdTE2CXNwaV9zcG1vZGU7CisJdTgJcmVzMVs0XTsKKwl1OAlzcGlfc3BpZTsKKwl1OAlyZXMyWzNdOworCXU4CXNwaV9zcGltOworCXU4CXJlczNbMl07CisJdTgJc3BpX3NwY29tOworCXU4CXJlczRbODJdOworfSBzcGljdGxfY3BtMl90OworCisvKiBDUE0gTXV4LgorKi8KK3R5cGVkZWYgc3RydWN0IGNwbXV4IHsKKwl1OAljbXhfc2kxY3I7CisJdTgJcmVzMTsKKwl1OAljbXhfc2kyY3I7CisJdTgJcmVzMjsKKwl1MzIJY214X2ZjcjsKKwl1MzIJY214X3NjcjsKKwl1OAljbXhfc21yOworCXU4CXJlczM7CisJdTE2CWNteF91YXI7CisJdTgJcmVzNFsxNl07Cit9IGNwbXV4X3Q7CisKKy8qIFNJUkFNIGNvbnRyb2wKKyovCit0eXBlZGVmIHN0cnVjdCBzaXJhbSB7CisJdTE2CXNpX2FtcjsKKwl1MTYJc2lfYm1yOworCXUxNglzaV9jbXI7CisJdTE2CXNpX2RtcjsKKwl1OAlzaV9nbXI7CisJdTgJcmVzMTsKKwl1OAlzaV9jbWRyOworCXU4CXJlczI7CisJdTgJc2lfc3RyOworCXU4CXJlczM7CisJdTE2CXNpX3JzcjsKK30gc2lyYW1jdGxfdDsKKwordHlwZWRlZiBzdHJ1Y3QgbWNjIHsKKwl1MTYJbWNjX21jY2U7CisJdTgJcmVzMVsyXTsKKwl1MTYJbWNjX21jY207CisJdTgJcmVzMlsyXTsKKwl1OAltY2NfbWNjZjsKKwl1OAlyZXMzWzddOworfSBtY2NfdDsKKwordHlwZWRlZiBzdHJ1Y3QgY29tbV9wcm9jIHsKKwl1MzIJY3BfY3BjcjsKKwl1MzIJY3BfcmNjcjsKKwl1OAlyZXMxWzE0XTsKKwl1MTYJY3BfcnRlcjsKKwl1OAlyZXMyWzJdOworCXUxNgljcF9ydG1yOworCXUxNgljcF9ydHNjcjsKKwl1OAlyZXMzWzJdOworCXUzMgljcF9ydHNyOworCXU4CXJlczRbMTJdOworfSBjcG1fY3BtMl90OworCisvKiBVU0IgQ29udHJvbGxlci4KKyovCit0eXBlZGVmIHN0cnVjdCB1c2JfY3RsciB7CisJdTgJdXNiX3VzbW9kOworCXU4CXVzYl91c2FkcjsKKwl1OAl1c2JfdXNjb207CisJdTgJcmVzMVsxXTsKKwl1MTYJdXNiX3VzZXAxOworCXUxNgl1c2JfdXNlcDI7CisJdTE2CXVzYl91c2VwMzsKKwl1MTYJdXNiX3VzZXA0OworCXU4CXJlczJbNF07CisJdTE2CXVzYl91c2JlcjsKKwl1OAlyZXMzWzJdOworCXUxNgl1c2JfdXNibXI7CisJdTgJdXNiX3VzYnM7CisJdTgJcmVzNFs3XTsKK30gdXNiX2NwbTJfdDsKKworLyogLi4uYW5kIHRoZSB3aG9sZSB0aGluZyB3cmFwcGVkIHVwLi4uLgorKi8KKwordHlwZWRlZiBzdHJ1Y3QgaW1tYXAgeworCS8qIFNvbWUgcmVmZXJlbmNlcyBhcmUgaW50byB0aGUgdW5pcXVlIGFuZCBrbm93biBkcHJhbSBzcGFjZXMsCisJICogb3RoZXJzIGFyZSBmcm9tIHRoZSBnZW5lcmljIGJhc2UuCisJICovCisjZGVmaW5lIGltX2RwcmFtYmFzZQlpbV9kcHJhbTEKKwl1OAkJaW1fZHByYW0xWzE2KjEwMjRdOworCXU4CQlyZXMxWzE2KjEwMjRdOworCXU4CQlpbV9kcHJhbTJbNCoxMDI0XTsKKwl1OAkJcmVzMls4KjEwMjRdOworCXU4CQlpbV9kcHJhbTNbNCoxMDI0XTsKKwl1OAkJcmVzM1sxNioxMDI0XTsKKworCXN5c2NvbmZfY3BtMl90CWltX3NpdV9jb25mOwkvKiBTSVUgQ29uZmlndXJhdGlvbiAqLworCW1lbWN0bF9jcG0yX3QJaW1fbWVtY3RsOwkvKiBNZW1vcnkgQ29udHJvbGxlciAqLworCXNpdF9jcG0yX3QJaW1fc2l0OwkJLyogU3lzdGVtIEludGVncmF0aW9uIFRpbWVycyAqLworCXBjaV9jcG0yX3QJaW1fcGNpOwkJLyogUENJIENvbnRyb2xsZXIgKi8KKwlpbnRjdGxfY3BtMl90CWltX2ludGN0bDsJLyogSW50ZXJydXB0IENvbnRyb2xsZXIgKi8KKwljYXJfY3BtMl90CWltX2Nsa3JzdDsJLyogQ2xvY2tzIGFuZCByZXNldCAqLworCWlvcF9jcG0yX3QJaW1faW9wb3J0OwkvKiBJTyBQb3J0IGNvbnRyb2wvc3RhdHVzICovCisJY3BtdGltZXJfY3BtMl90CWltX2NwbXRpbWVyOwkvKiBDUE0gdGltZXJzICovCisJc2RtYV9jcG0yX3QJaW1fc2RtYTsJLyogU0RNQSBjb250cm9sL3N0YXR1cyAqLworCisJZmNjX3QJCWltX2ZjY1szXTsJLyogVGhyZWUgRkNDcyAqLworCXU4CQlyZXM0elszMl07CisJZmNjX2NfdAkJaW1fZmNjX2NbM107CS8qIENvbnRpbnVlZCBGQ0NzICovCisKKwl1OAkJcmVzNFszMl07CisKKwl0Y2xheWVyX3QJaW1fdGNsYXllcls4XTsJLyogRWlnaHQgVENMYXllcnMgKi8KKwl1MTYJCXRjX3RjZ3NyOworCXUxNgkJdGNfdGNnZXI7CisJCisJLyogRmlyc3Qgc2V0IG9mIGJhdWQgcmF0ZSBnZW5lcmF0b3JzLgorCSovCisJdTgJCXJlc1syMzZdOworCXUzMgkJaW1fYnJnYzU7CisJdTMyCQlpbV9icmdjNjsKKwl1MzIJCWltX2JyZ2M3OworCXUzMgkJaW1fYnJnYzg7CisKKwl1OAkJcmVzNVs2MDhdOworCisJaTJjX2NwbTJfdAlpbV9pMmM7CQkvKiBJMkMgY29udHJvbC9zdGF0dXMgKi8KKwljcG1fY3BtMl90CWltX2NwbTsJCS8qIENvbW11bmljYXRpb24gcHJvY2Vzc29yICovCisKKwkvKiBTZWNvbmQgc2V0IG9mIGJhdWQgcmF0ZSBnZW5lcmF0b3JzLgorCSovCisJdTMyCQlpbV9icmdjMTsKKwl1MzIJCWltX2JyZ2MyOworCXUzMgkJaW1fYnJnYzM7CisJdTMyCQlpbV9icmdjNDsKKworCXNjY190CQlpbV9zY2NbNF07CS8qIEZvdXIgU0NDcyAqLworCXNtY190CQlpbV9zbWNbMl07CS8qIENvdXBsZSBvZiBTTUNzICovCisJc3BpY3RsX2NwbTJfdAlpbV9zcGk7CQkvKiBBIFNQSSAqLworCWNwbXV4X3QJCWltX2NwbXV4OwkvKiBDUE0gY2xvY2sgcm91dGUgbXV4ICovCisJc2lyYW1jdGxfdAlpbV9zaXJhbWN0bDE7CS8qIEZpcnN0IFNJIFJBTSBDb250cm9sICovCisJbWNjX3QJCWltX21jYzE7CS8qIEZpcnN0IE1DQyAqLworCXNpcmFtY3RsX3QJaW1fc2lyYW1jdGwyOwkvKiBTZWNvbmQgU0kgUkFNIENvbnRyb2wgKi8KKwltY2NfdAkJaW1fbWNjMjsJLyogU2Vjb25kIE1DQyAqLworCXVzYl9jcG0yX3QJaW1fdXNiOwkJLyogVVNCIENvbnRyb2xsZXIgKi8KKworCXU4CQlyZXM2WzExNTNdOworCisJdTE2CQlpbV9zaTF0eHJhbVsyNTZdOworCXU4CQlyZXM3WzUxMl07CisJdTE2CQlpbV9zaTFyeHJhbVsyNTZdOworCXU4CQlyZXM4WzUxMl07CisJdTE2CQlpbV9zaTJ0eHJhbVsyNTZdOworCXU4CQlyZXM5WzUxMl07CisJdTE2CQlpbV9zaTJyeHJhbVsyNTZdOworCXU4CQlyZXMxMFs1MTJdOworCXU4CQlyZXMxMVs0MDk2XTsKK30gY3BtMl9tYXBfdDsKKworZXh0ZXJuIGNwbTJfbWFwX3QJKmNwbTJfaW1tcjsKKworI2VuZGlmIC8qIF9fSU1NQVBfQ1BNMl9fICovCisjZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL2lvLmggYi9pbmNsdWRlL2FzbS1wcGMvaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWI3Y2Y2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjL2lvLmgKQEAgLTAsMCArMSw1NjYgQEAKKyNpZmRlZiBfX0tFUk5FTF9fCisjaWZuZGVmIF9QUENfSU9fSAorI2RlZmluZSBfUFBDX0lPX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKyNpbmNsdWRlIDxhc20vbW11Lmg+CisKKyNkZWZpbmUgU0lPX0NPTkZJR19SQQkweDM5OAorI2RlZmluZSBTSU9fQ09ORklHX1JECTB4Mzk5CisKKyNkZWZpbmUgU0xPV19ET1dOX0lPCisKKyNkZWZpbmUgUE1BQ19JU0FfTUVNX0JBU0UgCTAKKyNkZWZpbmUgUE1BQ19QQ0lfRFJBTV9PRkZTRVQgCTAKKyNkZWZpbmUgQ0hSUF9JU0FfSU9fQkFTRSAJMHhmODAwMDAwMAorI2RlZmluZSBDSFJQX0lTQV9NRU1fQkFTRSAJMHhmNzAwMDAwMAorI2RlZmluZSBDSFJQX1BDSV9EUkFNX09GRlNFVCAJMAorI2RlZmluZSBQUkVQX0lTQV9JT19CQVNFIAkweDgwMDAwMDAwCisjZGVmaW5lIFBSRVBfSVNBX01FTV9CQVNFIAkweGMwMDAwMDAwCisjZGVmaW5lIFBSRVBfUENJX0RSQU1fT0ZGU0VUIAkweDgwMDAwMDAwCisKKyNpZiBkZWZpbmVkKENPTkZJR180eHgpCisjaW5jbHVkZSA8YXNtL2libTR4eC5oPgorI2VsaWYgZGVmaW5lZChDT05GSUdfOHh4KQorI2luY2x1ZGUgPGFzbS9tcGM4eHguaD4KKyNlbGlmIGRlZmluZWQoQ09ORklHXzgyNjApCisjaW5jbHVkZSA8YXNtL21wYzgyNjAuaD4KKyNlbGlmIGRlZmluZWQoQ09ORklHXzgzeHgpCisjaW5jbHVkZSA8YXNtL21wYzgzeHguaD4KKyNlbGlmIGRlZmluZWQoQ09ORklHXzg1eHgpCisjaW5jbHVkZSA8YXNtL21wYzg1eHguaD4KKyNlbGlmIGRlZmluZWQoQ09ORklHX0FQVVMpCisjZGVmaW5lIF9JT19CQVNFCTAKKyNkZWZpbmUgX0lTQV9NRU1fQkFTRQkwCisjZGVmaW5lIFBDSV9EUkFNX09GRlNFVCAwCisjZWxzZSAvKiBFdmVyeW9uZSBlbHNlICovCisjZGVmaW5lIF9JT19CQVNFCWlzYV9pb19iYXNlCisjZGVmaW5lIF9JU0FfTUVNX0JBU0UJaXNhX21lbV9iYXNlCisjZGVmaW5lIFBDSV9EUkFNX09GRlNFVAlwY2lfZHJhbV9vZmZzZXQKKyNlbmRpZiAvKiBQbGF0Zm9ybS1kZXBlbmRlbnQgSS9PICovCisKKyNkZWZpbmUgX19fSU9fQkFTRSAoKHZvaWQgX19pb21lbSAqKV9JT19CQVNFKQorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaXNhX2lvX2Jhc2U7CitleHRlcm4gdW5zaWduZWQgbG9uZyBpc2FfbWVtX2Jhc2U7CitleHRlcm4gdW5zaWduZWQgbG9uZyBwY2lfZHJhbV9vZmZzZXQ7CisKKy8qCisgKiA4LCAxNiBhbmQgMzIgYml0LCBiaWcgYW5kIGxpdHRsZSBlbmRpYW4gSS9PIG9wZXJhdGlvbnMsIHdpdGggYmFycmllci4KKyAqCisgKiBSZWFkIG9wZXJhdGlvbnMgaGF2ZSBhZGRpdGlvbmFsIHR3aSAmIGlzeW5jIHRvIG1ha2Ugc3VyZSB0aGUgcmVhZAorICogaXMgYWN0dWFsbHkgcGVyZm9ybWVkIChpLmUuIHRoZSBkYXRhIGhhcyBjb21lIGJhY2spIGJlZm9yZSB3ZSBzdGFydAorICogZXhlY3V0aW5nIGFueSBmb2xsb3dpbmcgaW5zdHJ1Y3Rpb25zLgorICovCitleHRlcm4gaW5saW5lIGludCBpbl84KHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgX19pb21lbSAqYWRkcikKK3sKKwlpbnQgcmV0OworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSJsYnolVTElWDEgJTAsJTE7XG4iCisJCSJ0d2kgMCwlMCwwO1xuIgorCQkiaXN5bmMiIDogIj1yIiAocmV0KSA6ICJtIiAoKmFkZHIpKTsKKwlyZXR1cm4gcmV0OworfQorCitleHRlcm4gaW5saW5lIHZvaWQgb3V0Xzgodm9sYXRpbGUgdW5zaWduZWQgY2hhciBfX2lvbWVtICphZGRyLCBpbnQgdmFsKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdGIlVTAlWDAgJTEsJTA7IGVpZWlvIiA6ICI9bSIgKCphZGRyKSA6ICJyIiAodmFsKSk7Cit9CisKK2V4dGVybiBpbmxpbmUgaW50IGluX2xlMTYodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgX19pb21lbSAqYWRkcikKK3sKKwlpbnQgcmV0OworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oImxoYnJ4ICUwLDAsJTE7XG4iCisJCQkgICAgICJ0d2kgMCwlMCwwO1xuIgorCQkJICAgICAiaXN5bmMiIDogIj1yIiAocmV0KSA6CisJCQkgICAgICAiciIgKGFkZHIpLCAibSIgKCphZGRyKSk7CisJcmV0dXJuIHJldDsKK30KKworZXh0ZXJuIGlubGluZSBpbnQgaW5fYmUxNih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBfX2lvbWVtICphZGRyKQoreworCWludCByZXQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibGh6JVUxJVgxICUwLCUxO1xuIgorCQkJICAgICAidHdpIDAsJTAsMDtcbiIKKwkJCSAgICAgImlzeW5jIiA6ICI9ciIgKHJldCkgOiAibSIgKCphZGRyKSk7CisJcmV0dXJuIHJldDsKK30KKworZXh0ZXJuIGlubGluZSB2b2lkIG91dF9sZTE2KHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IF9faW9tZW0gKmFkZHIsIGludCB2YWwpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0aGJyeCAlMSwwLCUyOyBlaWVpbyIgOiAiPW0iICgqYWRkcikgOgorCQkJICAgICAgInIiICh2YWwpLCAiciIgKGFkZHIpKTsKK30KKworZXh0ZXJuIGlubGluZSB2b2lkIG91dF9iZTE2KHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IF9faW9tZW0gKmFkZHIsIGludCB2YWwpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0aCVVMCVYMCAlMSwlMDsgZWllaW8iIDogIj1tIiAoKmFkZHIpIDogInIiICh2YWwpKTsKK30KKworZXh0ZXJuIGlubGluZSB1bnNpZ25lZCBpbl9sZTMyKHZvbGF0aWxlIHVuc2lnbmVkIF9faW9tZW0gKmFkZHIpCit7CisJdW5zaWduZWQgcmV0OworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oImx3YnJ4ICUwLDAsJTE7XG4iCisJCQkgICAgICJ0d2kgMCwlMCwwO1xuIgorCQkJICAgICAiaXN5bmMiIDogIj1yIiAocmV0KSA6CisJCQkgICAgICJyIiAoYWRkciksICJtIiAoKmFkZHIpKTsKKwlyZXR1cm4gcmV0OworfQorCitleHRlcm4gaW5saW5lIHVuc2lnbmVkIGluX2JlMzIodm9sYXRpbGUgdW5zaWduZWQgX19pb21lbSAqYWRkcikKK3sKKwl1bnNpZ25lZCByZXQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibHd6JVUxJVgxICUwLCUxO1xuIgorCQkJICAgICAidHdpIDAsJTAsMDtcbiIKKwkJCSAgICAgImlzeW5jIiA6ICI9ciIgKHJldCkgOiAibSIgKCphZGRyKSk7CisJcmV0dXJuIHJldDsKK30KKworZXh0ZXJuIGlubGluZSB2b2lkIG91dF9sZTMyKHZvbGF0aWxlIHVuc2lnbmVkIF9faW9tZW0gKmFkZHIsIGludCB2YWwpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0d2JyeCAlMSwwLCUyOyBlaWVpbyIgOiAiPW0iICgqYWRkcikgOgorCQkJICAgICAiciIgKHZhbCksICJyIiAoYWRkcikpOworfQorCitleHRlcm4gaW5saW5lIHZvaWQgb3V0X2JlMzIodm9sYXRpbGUgdW5zaWduZWQgX19pb21lbSAqYWRkciwgaW50IHZhbCkKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3R3JVUwJVgwICUxLCUwOyBlaWVpbyIgOiAiPW0iICgqYWRkcikgOiAiciIgKHZhbCkpOworfQorI2lmIGRlZmluZWQgKENPTkZJR184MjYwX1BDSTkpCisjZGVmaW5lIHJlYWRiKGFkZHIpIGluXzgoKHZvbGF0aWxlIHU4ICopKGFkZHIpKQorI2RlZmluZSB3cml0ZWIoYixhZGRyKSBvdXRfOCgodm9sYXRpbGUgdTggKikoYWRkciksIChiKSkKKyNlbHNlCitzdGF0aWMgaW5saW5lIF9fdTggcmVhZGIodm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCXJldHVybiBpbl84KGFkZHIpOworfQorc3RhdGljIGlubGluZSB2b2lkIHdyaXRlYihfX3U4IGIsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlvdXRfOChhZGRyLCBiKTsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfQVBVUykKK3N0YXRpYyBpbmxpbmUgX191MTYgcmVhZHcodm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCXJldHVybiAqKF9fZm9yY2Ugdm9sYXRpbGUgX191MTYgKikoYWRkcik7Cit9CitzdGF0aWMgaW5saW5lIF9fdTMyIHJlYWRsKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlyZXR1cm4gKihfX2ZvcmNlIHZvbGF0aWxlIF9fdTMyICopKGFkZHIpOworfQorc3RhdGljIGlubGluZSB2b2lkIHdyaXRldyhfX3UxNiBiLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJKihfX2ZvcmNlIHZvbGF0aWxlIF9fdTE2ICopKGFkZHIpID0gYjsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZWwoX191MzIgYiwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCSooX19mb3JjZSB2b2xhdGlsZSBfX3UzMiAqKShhZGRyKSA9IGI7Cit9CisjZWxpZiBkZWZpbmVkIChDT05GSUdfODI2MF9QQ0k5KQorLyogVXNlIG1hY3JvcyBpZiBQQ0k5IHdvcmthcm91bmQgZW5hYmxlZCAqLworI2RlZmluZSByZWFkdyhhZGRyKSBpbl9sZTE2KCh2b2xhdGlsZSB1MTYgKikoYWRkcikpCisjZGVmaW5lIHJlYWRsKGFkZHIpIGluX2xlMzIoKHZvbGF0aWxlIHUzMiAqKShhZGRyKSkKKyNkZWZpbmUgd3JpdGV3KGIsYWRkcikgb3V0X2xlMTYoKHZvbGF0aWxlIHUxNiAqKShhZGRyKSwoYikpCisjZGVmaW5lIHdyaXRlbChiLGFkZHIpIG91dF9sZTMyKCh2b2xhdGlsZSB1MzIgKikoYWRkciksKGIpKQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgX191MTYgcmVhZHcodm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCXJldHVybiBpbl9sZTE2KGFkZHIpOworfQorc3RhdGljIGlubGluZSBfX3UzMiByZWFkbCh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJcmV0dXJuIGluX2xlMzIoYWRkcik7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGV3KF9fdTE2IGIsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlvdXRfbGUxNihhZGRyLCBiKTsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZWwoX191MzIgYiwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCW91dF9sZTMyKGFkZHIsIGIpOworfQorI2VuZGlmIC8qIENPTkZJR19BUFVTICovCisKKyNkZWZpbmUgcmVhZGJfcmVsYXhlZChhZGRyKSByZWFkYihhZGRyKQorI2RlZmluZSByZWFkd19yZWxheGVkKGFkZHIpIHJlYWR3KGFkZHIpCisjZGVmaW5lIHJlYWRsX3JlbGF4ZWQoYWRkcikgcmVhZGwoYWRkcikKKworc3RhdGljIGlubGluZSBfX3U4IF9fcmF3X3JlYWRiKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlyZXR1cm4gKihfX2ZvcmNlIHZvbGF0aWxlIF9fdTggKikoYWRkcik7Cit9CitzdGF0aWMgaW5saW5lIF9fdTE2IF9fcmF3X3JlYWR3KGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlyZXR1cm4gKihfX2ZvcmNlIHZvbGF0aWxlIF9fdTE2ICopKGFkZHIpOworfQorc3RhdGljIGlubGluZSBfX3UzMiBfX3Jhd19yZWFkbChjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJcmV0dXJuICooX19mb3JjZSB2b2xhdGlsZSBfX3UzMiAqKShhZGRyKTsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd193cml0ZWIoX191OCBiLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJKihfX2ZvcmNlIHZvbGF0aWxlIF9fdTggKikoYWRkcikgPSBiOworfQorc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3dyaXRldyhfX3UxNiBiLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJKihfX2ZvcmNlIHZvbGF0aWxlIF9fdTE2ICopKGFkZHIpID0gYjsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd193cml0ZWwoX191MzIgYiwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCSooX19mb3JjZSB2b2xhdGlsZSBfX3UzMiAqKShhZGRyKSA9IGI7Cit9CisKKyNkZWZpbmUgbW1pb3diKCkKKworLyoKKyAqIFRoZSBpbnN3L291dHN3L2luc2wvb3V0c2wgbWFjcm9zIGRvbid0IGRvIGJ5dGUtc3dhcHBpbmcuCisgKiBUaGV5IGFyZSBvbmx5IHVzZWQgaW4gcHJhY3RpY2UgZm9yIHRyYW5zZmVycmluZyBidWZmZXJzIHdoaWNoCisgKiBhcmUgYXJyYXlzIG9mIGJ5dGVzLCBhbmQgYnl0ZS1zd2FwcGluZyBpcyBub3QgYXBwcm9wcmlhdGUgaW4KKyAqIHRoYXQgY2FzZS4gIC0gcGF1bHVzCisgKi8KKyNkZWZpbmUgaW5zYihwb3J0LCBidWYsIG5zKQlfaW5zYigocG9ydCkrX19fSU9fQkFTRSwgKGJ1ZiksIChucykpCisjZGVmaW5lIG91dHNiKHBvcnQsIGJ1ZiwgbnMpCV9vdXRzYigocG9ydCkrX19fSU9fQkFTRSwgKGJ1ZiksIChucykpCisjZGVmaW5lIGluc3cocG9ydCwgYnVmLCBucykJX2luc3dfbnMoKHBvcnQpK19fX0lPX0JBU0UsIChidWYpLCAobnMpKQorI2RlZmluZSBvdXRzdyhwb3J0LCBidWYsIG5zKQlfb3V0c3dfbnMoKHBvcnQpK19fX0lPX0JBU0UsIChidWYpLCAobnMpKQorI2RlZmluZSBpbnNsKHBvcnQsIGJ1ZiwgbmwpCV9pbnNsX25zKChwb3J0KStfX19JT19CQVNFLCAoYnVmKSwgKG5sKSkKKyNkZWZpbmUgb3V0c2wocG9ydCwgYnVmLCBubCkJX291dHNsX25zKChwb3J0KStfX19JT19CQVNFLCAoYnVmKSwgKG5sKSkKKworLyoKKyAqIE9uIHBvd2VybWFjcywgd2Ugd2lsbCBnZXQgYSBtYWNoaW5lIGNoZWNrIGV4Y2VwdGlvbiBpZiB3ZQorICogdHJ5IHRvIHJlYWQgZGF0YSBmcm9tIGEgbm9uLWV4aXN0ZW50IEkvTyBwb3J0LiAgQmVjYXVzZSB0aGUKKyAqIG1hY2hpbmUgY2hlY2sgaXMgYW4gYXN5bmNocm9ub3VzIGV4Y2VwdGlvbiwgaXQgaXNuJ3QKKyAqIHdlbGwtZGVmaW5lZCB3aGljaCBpbnN0cnVjdGlvbiBTUlIwIHdpbGwgcG9pbnQgdG8gd2hlbiB0aGUKKyAqIGV4Y2VwdGlvbiBvY2N1cnMuCisgKiBXaXRoIHRoZSBzZXF1ZW5jZSBiZWxvdyAodHdpOyBpc3luYzsgbm9wKSwgd2UgaGF2ZSBmb3VuZCB0aGF0CisgKiB0aGUgbWFjaGluZSBjaGVjayBvY2N1cnMgb24gb25lIG9mIHRoZSB0aHJlZSBpbnN0cnVjdGlvbnMgb24KKyAqIGFsbCBQUEMgaW1wbGVtZW50YXRpb25zIHRlc3RlZCBzbyBmYXIuICBUaGUgdHdpIGFuZCBpc3luYyBhcmUKKyAqIG5lZWRlZCBvbiB0aGUgNjAxIChpbiBmYWN0IHR3aTsgc3luYyB3b3JrcyB0b28pLCB0aGUgaXN5bmMgYW5kCisgKiBub3AgYXJlIG5lZWRlZCBvbiA2MDRbZXxyXSwgYW5kIGFueSBvZiB0d2ksIHN5bmMgb3IgaXN5bmMgd2lsbAorICogd29yayBvbiA2MDNbZV0sIDc1MCwgNzR4eC4KKyAqIFRoZSB0d2kgY3JlYXRlcyBhbiBleHBsaWNpdCBkYXRhIGRlcGVuZGVuY3kgb24gdGhlIHJldHVybmVkCisgKiB2YWx1ZSB3aGljaCBzZWVtcyB0byBiZSBuZWVkZWQgdG8gbWFrZSB0aGUgNjAxIHdhaXQgZm9yIHRoZQorICogbG9hZCB0byBmaW5pc2guCisgKi8KKworI2RlZmluZSBfX2RvX2luX2FzbShuYW1lLCBvcCkJCQkJXAorZXh0ZXJuIF9faW5saW5lX18gdW5zaWduZWQgaW50IG5hbWUodW5zaWduZWQgaW50IHBvcnQpCVwKK3sJCQkJCQkJXAorCXVuc2lnbmVkIGludCB4OwkJCQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQlcCisJCQlvcCAiCSUwLDAsJTFcbiIJCVwKKwkJIjE6CXR3aQkwLCUwLDBcbiIJCVwKKwkJIjI6CWlzeW5jXG4iCQkJXAorCQkiMzoJbm9wXG4iCQkJCVwKKwkJIjQ6XG4iCQkJCQlcCisJCSIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iCQlcCisJCSI1OglsaQklMCwtMVxuIgkJXAorCQkiCWIJNGJcbiIJCQlcCisJCSIucHJldmlvdXNcbiIJCQkJXAorCQkiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgkJXAorCQkiCS5hbGlnbgkyXG4iCQkJXAorCQkiCS5sb25nCTFiLDViXG4iCQlcCisJCSIJLmxvbmcJMmIsNWJcbiIJCVwKKwkJIgkubG9uZwkzYiw1YlxuIgkJXAorCQkiLnByZXZpb3VzIgkJCQlcCisJCTogIj0mciIgKHgpCQkJCVwKKwkJOiAiciIgKHBvcnQgKyBfX19JT19CQVNFKSk7CQlcCisJcmV0dXJuIHg7CQkJCQlcCit9CisKKyNkZWZpbmUgX19kb19vdXRfYXNtKG5hbWUsIG9wKQkJCQlcCitleHRlcm4gX19pbmxpbmVfXyB2b2lkIG5hbWUodW5zaWduZWQgaW50IHZhbCwgdW5zaWduZWQgaW50IHBvcnQpIFwKK3sJCQkJCQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQlcCisJCW9wICIgJTAsMCwlMVxuIgkJCQlcCisJCSIxOglzeW5jXG4iCQkJCVwKKwkJIjI6XG4iCQkJCQlcCisJCSIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCQlcCisJCSIJLmFsaWduCTJcbiIJCQlcCisJCSIJLmxvbmcJMWIsMmJcbiIJCVwKKwkJIi5wcmV2aW91cyIJCQkJXAorCQk6IDogInIiICh2YWwpLCAiciIgKHBvcnQgKyBfX19JT19CQVNFKSk7CVwKK30KKworX19kb19vdXRfYXNtKG91dGIsICJzdGJ4IikKKyNpZmRlZiBDT05GSUdfQVBVUworX19kb19pbl9hc20oaW5iLCAibGJ6eCIpCitfX2RvX2luX2FzbShpbncsICJsaHolVTElWDEiKQorX19kb19pbl9hc20oaW5sLCAibHd6JVUxJVgxIikKK19fZG9fb3V0X2FzbShvdXRsLCJzdHclVTAlWDAiKQorX19kb19vdXRfYXNtKG91dHcsICJzdGglVTAlWDAiKQorI2VsaWYgZGVmaW5lZCAoQ09ORklHXzgyNjBfUENJOSkKKy8qIGluIGFzbSBjYW5ub3QgYmUgZGVmaW5lZCBpZiBQQ0k5IHdvcmthcm91bmQgaXMgdXNlZCAqLworI2RlZmluZSBpbmIocG9ydCkJCWluXzgoKHBvcnQpK19fX0lPX0JBU0UpCisjZGVmaW5lIGludyhwb3J0KQkJaW5fbGUxNigocG9ydCkrX19fSU9fQkFTRSkKKyNkZWZpbmUgaW5sKHBvcnQpCQlpbl9sZTMyKChwb3J0KStfX19JT19CQVNFKQorX19kb19vdXRfYXNtKG91dHcsICJzdGhicngiKQorX19kb19vdXRfYXNtKG91dGwsICJzdHdicngiKQorI2Vsc2UKK19fZG9faW5fYXNtKGluYiwgImxiengiKQorX19kb19pbl9hc20oaW53LCAibGhicngiKQorX19kb19pbl9hc20oaW5sLCAibHdicngiKQorX19kb19vdXRfYXNtKG91dHcsICJzdGhicngiKQorX19kb19vdXRfYXNtKG91dGwsICJzdHdicngiKQorCisjZW5kaWYKKworI2RlZmluZSBpbmJfcChwb3J0KQkJaW5iKChwb3J0KSkKKyNkZWZpbmUgb3V0Yl9wKHZhbCwgcG9ydCkJb3V0YigodmFsKSwgKHBvcnQpKQorI2RlZmluZSBpbndfcChwb3J0KQkJaW53KChwb3J0KSkKKyNkZWZpbmUgb3V0d19wKHZhbCwgcG9ydCkJb3V0dygodmFsKSwgKHBvcnQpKQorI2RlZmluZSBpbmxfcChwb3J0KQkJaW5sKChwb3J0KSkKKyNkZWZpbmUgb3V0bF9wKHZhbCwgcG9ydCkJb3V0bCgodmFsKSwgKHBvcnQpKQorCitleHRlcm4gdm9pZCBfaW5zYih2b2xhdGlsZSB1OCBfX2lvbWVtICpwb3J0LCB2b2lkICpidWYsIGludCBucyk7CitleHRlcm4gdm9pZCBfb3V0c2Iodm9sYXRpbGUgdTggX19pb21lbSAqcG9ydCwgY29uc3Qgdm9pZCAqYnVmLCBpbnQgbnMpOworZXh0ZXJuIHZvaWQgX2luc3codm9sYXRpbGUgdTE2IF9faW9tZW0gKnBvcnQsIHZvaWQgKmJ1ZiwgaW50IG5zKTsKK2V4dGVybiB2b2lkIF9vdXRzdyh2b2xhdGlsZSB1MTYgX19pb21lbSAqcG9ydCwgY29uc3Qgdm9pZCAqYnVmLCBpbnQgbnMpOworZXh0ZXJuIHZvaWQgX2luc2wodm9sYXRpbGUgdTMyIF9faW9tZW0gKnBvcnQsIHZvaWQgKmJ1ZiwgaW50IG5sKTsKK2V4dGVybiB2b2lkIF9vdXRzbCh2b2xhdGlsZSB1MzIgX19pb21lbSAqcG9ydCwgY29uc3Qgdm9pZCAqYnVmLCBpbnQgbmwpOworZXh0ZXJuIHZvaWQgX2luc3dfbnModm9sYXRpbGUgdTE2IF9faW9tZW0gKnBvcnQsIHZvaWQgKmJ1ZiwgaW50IG5zKTsKK2V4dGVybiB2b2lkIF9vdXRzd19ucyh2b2xhdGlsZSB1MTYgX19pb21lbSAqcG9ydCwgY29uc3Qgdm9pZCAqYnVmLCBpbnQgbnMpOworZXh0ZXJuIHZvaWQgX2luc2xfbnModm9sYXRpbGUgdTMyIF9faW9tZW0gKnBvcnQsIHZvaWQgKmJ1ZiwgaW50IG5sKTsKK2V4dGVybiB2b2lkIF9vdXRzbF9ucyh2b2xhdGlsZSB1MzIgX19pb21lbSAqcG9ydCwgY29uc3Qgdm9pZCAqYnVmLCBpbnQgbmwpOworCisvKgorICogVGhlICpfbnMgdmVyc2lvbnMgYmVsb3cgZG9uJ3QgZG8gYnl0ZS1zd2FwcGluZy4KKyAqIE5laXRoZXIgZG8gdGhlIHN0YW5kYXJkIHZlcnNpb25zIG5vdywgdGhlc2UgYXJlIGp1c3QgaGVyZQorICogZm9yIG9sZGVyIGNvZGUuCisgKi8KKyNkZWZpbmUgaW5zd19ucyhwb3J0LCBidWYsIG5zKQlfaW5zd19ucygocG9ydCkrX19fSU9fQkFTRSwgKGJ1ZiksIChucykpCisjZGVmaW5lIG91dHN3X25zKHBvcnQsIGJ1ZiwgbnMpCV9vdXRzd19ucygocG9ydCkrX19fSU9fQkFTRSwgKGJ1ZiksIChucykpCisjZGVmaW5lIGluc2xfbnMocG9ydCwgYnVmLCBubCkJX2luc2xfbnMoKHBvcnQpK19fX0lPX0JBU0UsIChidWYpLCAobmwpKQorI2RlZmluZSBvdXRzbF9ucyhwb3J0LCBidWYsIG5sKQlfb3V0c2xfbnMoKHBvcnQpK19fX0lPX0JBU0UsIChidWYpLCAobmwpKQorCisKKyNkZWZpbmUgSU9fU1BBQ0VfTElNSVQgfjAKKworI2lmIGRlZmluZWQgKENPTkZJR184MjYwX1BDSTkpCisjZGVmaW5lIG1lbXNldF9pbyhhLGIsYykgICAgICAgbWVtc2V0KCh2b2lkICopKGEpLChiKSwoYykpCisjZGVmaW5lIG1lbWNweV9mcm9taW8oYSxiLGMpICAgbWVtY3B5KChhKSwodm9pZCAqKShiKSwoYykpCisjZGVmaW5lIG1lbWNweV90b2lvKGEsYixjKSAgICAgbWVtY3B5KCh2b2lkICopKGEpLChiKSwoYykpCisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIG1lbXNldF9pbyh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIsIHVuc2lnbmVkIGNoYXIgdmFsLCBpbnQgY291bnQpCit7CisJbWVtc2V0KCh2b2lkIF9fZm9yY2UgKilhZGRyLCB2YWwsIGNvdW50KTsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBtZW1jcHlfZnJvbWlvKHZvaWQgKmRzdCxjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKnNyYywgaW50IGNvdW50KQoreworCW1lbWNweShkc3QsICh2b2lkIF9fZm9yY2UgKikgc3JjLCBjb3VudCk7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgbWVtY3B5X3RvaW8odm9sYXRpbGUgdm9pZCBfX2lvbWVtICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgaW50IGNvdW50KQoreworCW1lbWNweSgodm9pZCBfX2ZvcmNlICopIGRzdCwgc3JjLCBjb3VudCk7Cit9CisjZW5kaWYKKworI2RlZmluZSBldGhfaW9fY29weV9hbmRfc3VtKGEsYixjLGQpCQlldGhfY29weV9hbmRfc3VtKChhKSwodm9pZCBfX2ZvcmNlICopKHZvaWQgX19pb21lbSAqKShiKSwoYyksKGQpKQorCisvKgorICogTWFwIGluIGFuIGFyZWEgb2YgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZSwgZm9yIGFjY2Vzc2luZworICogSS9PIGRldmljZXMgZXRjLgorICovCitleHRlcm4gdm9pZCBfX2lvbWVtICpfX2lvcmVtYXAocGh5c19hZGRyX3QgYWRkcmVzcywgdW5zaWduZWQgbG9uZyBzaXplLAorCQkgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncyk7CitleHRlcm4gdm9pZCBfX2lvbWVtICppb3JlbWFwKHBoeXNfYWRkcl90IGFkZHJlc3MsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CisjaWZkZWYgQ09ORklHXzQ0eAorZXh0ZXJuIHZvaWQgX19pb21lbSAqaW9yZW1hcDY0KHVuc2lnbmVkIGxvbmcgbG9uZyBhZGRyZXNzLCB1bnNpZ25lZCBsb25nIHNpemUpOworI2VuZGlmCisjZGVmaW5lIGlvcmVtYXBfbm9jYWNoZShhZGRyLCBzaXplKQlpb3JlbWFwKChhZGRyKSwgKHNpemUpKQorZXh0ZXJuIHZvaWQgaW91bm1hcCh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW9wYSh1bnNpZ25lZCBsb25nIGFkZHIpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbW1fcHRvdih1bnNpZ25lZCBsb25nIGFkZHIpIF9fYXR0cmlidXRlX2NvbnN0X187CitleHRlcm4gdm9pZCBpb19ibG9ja19tYXBwaW5nKHVuc2lnbmVkIGxvbmcgdmlydCwgcGh5c19hZGRyX3QgcGh5cywKKwkJCSAgICAgdW5zaWduZWQgaW50IHNpemUsIGludCBmbGFncyk7CisKKy8qCisgKiBUaGUgUENJIGJ1cyBpcyBpbmhlcmVudGx5IExpdHRsZS1FbmRpYW4uICBUaGUgUG93ZXJQQyBpcyBiZWluZworICogcnVuIEJpZy1FbmRpYW4uICBUaHVzIGFsbCB2YWx1ZXMgd2hpY2ggY3Jvc3MgdGhlIFtQQ0ldIGJhcnJpZXIKKyAqIG11c3QgYmUgZW5kaWFuLWFkanVzdGVkLiAgQWxzbywgdGhlIGxvY2FsIERSQU0gaGFzIGEgZGlmZmVyZW50CisgKiBhZGRyZXNzIGZyb20gdGhlIFBDSSBwb2ludCBvZiB2aWV3LCB0aHVzIGJ1ZmZlciBhZGRyZXNzZXMgYWxzbworICogaGF2ZSB0byBiZSBtb2RpZmllZCBbbWFwcGVkXSBhcHByb3ByaWF0ZWx5LgorICovCitleHRlcm4gaW5saW5lIHVuc2lnbmVkIGxvbmcgdmlydF90b19idXModm9sYXRpbGUgdm9pZCAqIGFkZHJlc3MpCit7CisjaWZuZGVmIENPTkZJR19BUFVTCisgICAgICAgIGlmIChhZGRyZXNzID09ICh2b2lkICopMCkKKwkJcmV0dXJuIDA7CisgICAgICAgIHJldHVybiAodW5zaWduZWQgbG9uZylhZGRyZXNzIC0gS0VSTkVMQkFTRSArIFBDSV9EUkFNX09GRlNFVDsKKyNlbHNlCisJcmV0dXJuIGlvcGEgKCh1bnNpZ25lZCBsb25nKSBhZGRyZXNzKTsKKyNlbmRpZgorfQorCitleHRlcm4gaW5saW5lIHZvaWQgKiBidXNfdG9fdmlydCh1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisjaWZuZGVmIENPTkZJR19BUFVTCisgICAgICAgIGlmIChhZGRyZXNzID09IDApCisJCXJldHVybiBOVUxMOworICAgICAgICByZXR1cm4gKHZvaWQgKikoYWRkcmVzcyAtIFBDSV9EUkFNX09GRlNFVCArIEtFUk5FTEJBU0UpOworI2Vsc2UKKwlyZXR1cm4gKHZvaWQqKSBtbV9wdG92IChhZGRyZXNzKTsKKyNlbmRpZgorfQorCisvKgorICogQ2hhbmdlIHZpcnR1YWwgYWRkcmVzc2VzIHRvIHBoeXNpY2FsIGFkZHJlc3NlcyBhbmQgdnYsIGZvcgorICogYWRkcmVzc2VzIGluIHRoZSBhcmVhIHdoZXJlIHRoZSBrZXJuZWwgaGFzIHRoZSBSQU0gbWFwcGVkLgorICovCitleHRlcm4gaW5saW5lIHVuc2lnbmVkIGxvbmcgdmlydF90b19waHlzKHZvbGF0aWxlIHZvaWQgKiBhZGRyZXNzKQoreworI2lmbmRlZiBDT05GSUdfQVBVUworCXJldHVybiAodW5zaWduZWQgbG9uZykgYWRkcmVzcyAtIEtFUk5FTEJBU0U7CisjZWxzZQorCXJldHVybiBpb3BhICgodW5zaWduZWQgbG9uZykgYWRkcmVzcyk7CisjZW5kaWYKK30KKworZXh0ZXJuIGlubGluZSB2b2lkICogcGh5c190b192aXJ0KHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKyNpZm5kZWYgQ09ORklHX0FQVVMKKwlyZXR1cm4gKHZvaWQgKikgKGFkZHJlc3MgKyBLRVJORUxCQVNFKTsKKyNlbHNlCisJcmV0dXJuICh2b2lkKikgbW1fcHRvdiAoYWRkcmVzcyk7CisjZW5kaWYKK30KKworLyoKKyAqIENoYW5nZSAic3RydWN0IHBhZ2UiIHRvIHBoeXNpY2FsIGFkZHJlc3MuCisgKi8KKyNkZWZpbmUgcGFnZV90b19waHlzKHBhZ2UpCShwYWdlX3RvX3BmbihwYWdlKSA8PCBQQUdFX1NISUZUKQorI2RlZmluZSBwYWdlX3RvX2J1cyhwYWdlKQkocGFnZV90b19waHlzKHBhZ2UpICsgUENJX0RSQU1fT0ZGU0VUKQorCisvKgorICogRW5mb3JjZSBJbi1vcmRlciBFeGVjdXRpb24gb2YgSS9POgorICogQWN0cyBhcyBhIGJhcnJpZXIgdG8gZW5zdXJlIGFsbCBwcmV2aW91cyBJL08gYWNjZXNzZXMgaGF2ZQorICogY29tcGxldGVkIGJlZm9yZSBhbnkgZnVydGhlciBvbmVzIGFyZSBpc3N1ZWQuCisgKi8KK2V4dGVybiBpbmxpbmUgdm9pZCBlaWVpbyh2b2lkKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fICgiZWllaW8iIDogOiA6ICJtZW1vcnkiKTsKK30KKworLyogRW5mb3JjZSBpbi1vcmRlciBleGVjdXRpb24gb2YgZGF0YSBJL08uCisgKiBObyBkaXN0aW5jdGlvbiBiZXR3ZWVuIHJlYWQvd3JpdGUgb24gUFBDOyB1c2UgZWllaW8gZm9yIGFsbCB0aHJlZS4KKyAqLworI2RlZmluZSBpb2JhcnJpZXJfcncoKSBlaWVpbygpCisjZGVmaW5lIGlvYmFycmllcl9yKCkgIGVpZWlvKCkKKyNkZWZpbmUgaW9iYXJyaWVyX3coKSAgZWllaW8oKQorCitzdGF0aWMgaW5saW5lIGludCBjaGVja19zaWduYXR1cmUodm9sYXRpbGUgdm9pZCBfX2lvbWVtICogaW9fYWRkciwKKwljb25zdCB1bnNpZ25lZCBjaGFyICpzaWduYXR1cmUsIGludCBsZW5ndGgpCit7CisJaW50IHJldHZhbCA9IDA7CisJZG8geworCQlpZiAocmVhZGIoaW9fYWRkcikgIT0gKnNpZ25hdHVyZSkKKwkJCWdvdG8gb3V0OworCQlpb19hZGRyKys7CisJCXNpZ25hdHVyZSsrOworCQlsZW5ndGgtLTsKKwl9IHdoaWxlIChsZW5ndGgpOworCXJldHZhbCA9IDE7CitvdXQ6CisJcmV0dXJuIHJldHZhbDsKK30KKworLyoKKyAqIEhlcmUgY29tZXMgdGhlIHBwYyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgSU9NQVAgCisgKiBpbnRlcmZhY2VzLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpb3JlYWQ4KHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlyZXR1cm4gcmVhZGIoYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlvcmVhZDE2KHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlyZXR1cm4gcmVhZHcoYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlvcmVhZDMyKHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlyZXR1cm4gcmVhZGwoYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpb3dyaXRlOCh1OCB2YWwsIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwl3cml0ZWIodmFsLCBhZGRyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGlvd3JpdGUxNih1MTYgdmFsLCB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJd3JpdGV3KHZhbCwgYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpb3dyaXRlMzIodTMyIHZhbCwgdm9pZCBfX2lvbWVtICphZGRyKQoreworCXdyaXRlbCh2YWwsIGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW9yZWFkOF9yZXAodm9pZCBfX2lvbWVtICphZGRyLCB2b2lkICpkc3QsIHVuc2lnbmVkIGxvbmcgY291bnQpCit7CisJX2luc2IoYWRkciwgZHN0LCBjb3VudCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpb3JlYWQxNl9yZXAodm9pZCBfX2lvbWVtICphZGRyLCB2b2lkICpkc3QsIHVuc2lnbmVkIGxvbmcgY291bnQpCit7CisJX2luc3dfbnMoYWRkciwgZHN0LCBjb3VudCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpb3JlYWQzMl9yZXAodm9pZCBfX2lvbWVtICphZGRyLCB2b2lkICpkc3QsIHVuc2lnbmVkIGxvbmcgY291bnQpCit7CisJX2luc2xfbnMoYWRkciwgZHN0LCBjb3VudCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpb3dyaXRlOF9yZXAodm9pZCBfX2lvbWVtICphZGRyLCBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGxvbmcgY291bnQpCit7CisJX291dHNiKGFkZHIsIHNyYywgY291bnQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW93cml0ZTE2X3JlcCh2b2lkIF9faW9tZW0gKmFkZHIsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgbG9uZyBjb3VudCkKK3sKKwlfb3V0c3dfbnMoYWRkciwgc3JjLCBjb3VudCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpb3dyaXRlMzJfcmVwKHZvaWQgX19pb21lbSAqYWRkciwgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBsb25nIGNvdW50KQoreworCV9vdXRzbF9ucyhhZGRyLCBzcmMsIGNvdW50KTsKK30KKworLyogQ3JlYXRlIGEgdmlydHVhbCBtYXBwaW5nIGNvb2tpZSBmb3IgYW4gSU8gcG9ydCByYW5nZSAqLworZXh0ZXJuIHZvaWQgX19pb21lbSAqaW9wb3J0X21hcCh1bnNpZ25lZCBsb25nIHBvcnQsIHVuc2lnbmVkIGludCBucik7CitleHRlcm4gdm9pZCBpb3BvcnRfdW5tYXAodm9pZCBfX2lvbWVtICopOworCisvKiBDcmVhdGUgYSB2aXJ0dWFsIG1hcHBpbmcgY29va2llIGZvciBhIFBDSSBCQVIgKG1lbW9yeSBvciBJTykgKi8KK3N0cnVjdCBwY2lfZGV2OworZXh0ZXJuIHZvaWQgX19pb21lbSAqcGNpX2lvbWFwKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBiYXIsIHVuc2lnbmVkIGxvbmcgbWF4KTsKK2V4dGVybiB2b2lkIHBjaV9pb3VubWFwKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHZvaWQgX19pb21lbSAqKTsKKworI2VuZGlmIC8qIF9QUENfSU9fSCAqLworCisjaWZkZWYgQ09ORklHXzgyNjBfUENJOQorI2luY2x1ZGUgPGFzbS9tcGM4MjYwX3BjaTkuaD4KKyNlbmRpZgorCisvKgorICogQ29udmVydCBhIHBoeXNpY2FsIHBvaW50ZXIgdG8gYSB2aXJ0dWFsIGtlcm5lbCBwb2ludGVyIGZvciAvZGV2L21lbQorICogYWNjZXNzCisgKi8KKyNkZWZpbmUgeGxhdGVfZGV2X21lbV9wdHIocCkJX192YShwKQorCisvKgorICogQ29udmVydCBhIHZpcnR1YWwgY2FjaGVkIHBvaW50ZXIgdG8gYW4gdW5jYWNoZWQgcG9pbnRlcgorICovCisjZGVmaW5lIHhsYXRlX2Rldl9rbWVtX3B0cihwKQlwCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvaW9jdGwuaCBiL2luY2x1ZGUvYXNtLXBwYy9pb2N0bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzYzZhY2YKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGMvaW9jdGwuaApAQCAtMCwwICsxLDY5IEBACisjaWZuZGVmIF9QUENfSU9DVExfSAorI2RlZmluZSBfUFBDX0lPQ1RMX0gKKworCisvKgorICogdGhpcyB3YXMgY29waWVkIGZyb20gdGhlIGFscGhhIGFzIGl0J3MgYSBiaXQgY2xlYW5lciB0aGVyZS4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgIC0tIENvcnQKKyAqLworCisjZGVmaW5lIF9JT0NfTlJCSVRTCTgKKyNkZWZpbmUgX0lPQ19UWVBFQklUUwk4CisjZGVmaW5lIF9JT0NfU0laRUJJVFMJMTMKKyNkZWZpbmUgX0lPQ19ESVJCSVRTCTMKKworI2RlZmluZSBfSU9DX05STUFTSwkoKDEgPDwgX0lPQ19OUkJJVFMpLTEpCisjZGVmaW5lIF9JT0NfVFlQRU1BU0sJKCgxIDw8IF9JT0NfVFlQRUJJVFMpLTEpCisjZGVmaW5lIF9JT0NfU0laRU1BU0sJKCgxIDw8IF9JT0NfU0laRUJJVFMpLTEpCisjZGVmaW5lIF9JT0NfRElSTUFTSwkoKDEgPDwgX0lPQ19ESVJCSVRTKS0xKQorCisjZGVmaW5lIF9JT0NfTlJTSElGVAkwCisjZGVmaW5lIF9JT0NfVFlQRVNISUZUCShfSU9DX05SU0hJRlQrX0lPQ19OUkJJVFMpCisjZGVmaW5lIF9JT0NfU0laRVNISUZUCShfSU9DX1RZUEVTSElGVCtfSU9DX1RZUEVCSVRTKQorI2RlZmluZSBfSU9DX0RJUlNISUZUCShfSU9DX1NJWkVTSElGVCtfSU9DX1NJWkVCSVRTKQorCisvKgorICogRGlyZWN0aW9uIGJpdHMgX0lPQ19OT05FIGNvdWxkIGJlIDAsIGJ1dCBPU0YvMSBnaXZlcyBpdCBhIGJpdC4KKyAqIEFuZCB0aGlzIHR1cm5zIG91dCB1c2VmdWwgdG8gY2F0Y2ggb2xkIGlvY3RsIG51bWJlcnMgaW4gaGVhZGVyCisgKiBmaWxlcyBmb3IgdXMuCisgKi8KKyNkZWZpbmUgX0lPQ19OT05FCTFVCisjZGVmaW5lIF9JT0NfUkVBRAkyVQorI2RlZmluZSBfSU9DX1dSSVRFCTRVCisKKyNkZWZpbmUgX0lPQyhkaXIsdHlwZSxucixzaXplKSBcCisJKCgoZGlyKSAgPDwgX0lPQ19ESVJTSElGVCkgfCBcCisJICgodHlwZSkgPDwgX0lPQ19UWVBFU0hJRlQpIHwgXAorCSAoKG5yKSAgIDw8IF9JT0NfTlJTSElGVCkgfCBcCisJICgoc2l6ZSkgPDwgX0lPQ19TSVpFU0hJRlQpKQorCisvKiBwcm92b2tlIGNvbXBpbGUgZXJyb3IgZm9yIGludmFsaWQgdXNlcyBvZiBzaXplIGFyZ3VtZW50ICovCitleHRlcm4gdW5zaWduZWQgaW50IF9faW52YWxpZF9zaXplX2FyZ3VtZW50X2Zvcl9JT0M7CisjZGVmaW5lIF9JT0NfVFlQRUNIRUNLKHQpIFwKKwkoKHNpemVvZih0KSA9PSBzaXplb2YodFsxXSkgJiYgXAorCSAgc2l6ZW9mKHQpIDwgKDEgPDwgX0lPQ19TSVpFQklUUykpID8gXAorCSAgc2l6ZW9mKHQpIDogX19pbnZhbGlkX3NpemVfYXJndW1lbnRfZm9yX0lPQykKKworLyogdXNlZCB0byBjcmVhdGUgbnVtYmVycyAqLworI2RlZmluZSBfSU8odHlwZSxucikJCV9JT0MoX0lPQ19OT05FLCh0eXBlKSwobnIpLDApCisjZGVmaW5lIF9JT1IodHlwZSxucixzaXplKQlfSU9DKF9JT0NfUkVBRCwodHlwZSksKG5yKSwoX0lPQ19UWVBFQ0hFQ0soc2l6ZSkpKQorI2RlZmluZSBfSU9XKHR5cGUsbnIsc2l6ZSkJX0lPQyhfSU9DX1dSSVRFLCh0eXBlKSwobnIpLChfSU9DX1RZUEVDSEVDSyhzaXplKSkpCisjZGVmaW5lIF9JT1dSKHR5cGUsbnIsc2l6ZSkJX0lPQyhfSU9DX1JFQUR8X0lPQ19XUklURSwodHlwZSksKG5yKSwoX0lPQ19UWVBFQ0hFQ0soc2l6ZSkpKQorI2RlZmluZSBfSU9SX0JBRCh0eXBlLG5yLHNpemUpCV9JT0MoX0lPQ19SRUFELCh0eXBlKSwobnIpLHNpemVvZihzaXplKSkKKyNkZWZpbmUgX0lPV19CQUQodHlwZSxucixzaXplKQlfSU9DKF9JT0NfV1JJVEUsKHR5cGUpLChuciksc2l6ZW9mKHNpemUpKQorI2RlZmluZSBfSU9XUl9CQUQodHlwZSxucixzaXplKQlfSU9DKF9JT0NfUkVBRHxfSU9DX1dSSVRFLCh0eXBlKSwobnIpLHNpemVvZihzaXplKSkKKworLyogdXNlZCB0byBkZWNvZGUgdGhlbS4uICovCisjZGVmaW5lIF9JT0NfRElSKG5yKQkJKCgobnIpID4+IF9JT0NfRElSU0hJRlQpICYgX0lPQ19ESVJNQVNLKQorI2RlZmluZSBfSU9DX1RZUEUobnIpCQkoKChucikgPj4gX0lPQ19UWVBFU0hJRlQpICYgX0lPQ19UWVBFTUFTSykKKyNkZWZpbmUgX0lPQ19OUihucikJCSgoKG5yKSA+PiBfSU9DX05SU0hJRlQpICYgX0lPQ19OUk1BU0spCisjZGVmaW5lIF9JT0NfU0laRShucikJCSgoKG5yKSA+PiBfSU9DX1NJWkVTSElGVCkgJiBfSU9DX1NJWkVNQVNLKQorCisvKiB2YXJpb3VzIGRyaXZlcnMsIHN1Y2ggYXMgdGhlIHBjbWNpYSBzdHVmZiwgbmVlZCB0aGVzZS4uLiAqLworI2RlZmluZSBJT0NfSU4JCShfSU9DX1dSSVRFIDw8IF9JT0NfRElSU0hJRlQpCisjZGVmaW5lIElPQ19PVVQJCShfSU9DX1JFQUQgPDwgX0lPQ19ESVJTSElGVCkKKyNkZWZpbmUgSU9DX0lOT1VUCSgoX0lPQ19XUklURXxfSU9DX1JFQUQpIDw8IF9JT0NfRElSU0hJRlQpCisjZGVmaW5lIElPQ1NJWkVfTUFTSwkoX0lPQ19TSVpFTUFTSyA8PCBfSU9DX1NJWkVTSElGVCkKKyNkZWZpbmUgSU9DU0laRV9TSElGVAkoX0lPQ19TSVpFU0hJRlQpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL2lvY3Rscy5oIGIvaW5jbHVkZS9hc20tcHBjL2lvY3Rscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1YjdmMmIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGMvaW9jdGxzLmgKQEAgLTAsMCArMSwxMDcgQEAKKyNpZm5kZWYgX0FTTV9QUENfSU9DVExTX0gKKyNkZWZpbmUgX0FTTV9QUENfSU9DVExTX0gKKworI2luY2x1ZGUgPGFzbS9pb2N0bC5oPgorCisjZGVmaW5lIEZJT0NMRVgJCV9JTygnZicsIDEpCisjZGVmaW5lIEZJT05DTEVYCV9JTygnZicsIDIpCisjZGVmaW5lIEZJT0FTWU5DCV9JT1coJ2YnLCAxMjUsIGludCkKKyNkZWZpbmUgRklPTkJJTwkJX0lPVygnZicsIDEyNiwgaW50KQorI2RlZmluZSBGSU9OUkVBRAlfSU9SKCdmJywgMTI3LCBpbnQpCisjZGVmaW5lIFRJT0NJTlEJCUZJT05SRUFECisjZGVmaW5lIEZJT1FTSVpFCV9JT1IoJ2YnLCAxMjgsIGxvZmZfdCkKKworI2RlZmluZSBUSU9DR0VUUAlfSU9SKCd0JywgOCwgc3RydWN0IHNndHR5YikKKyNkZWZpbmUgVElPQ1NFVFAJX0lPVygndCcsIDksIHN0cnVjdCBzZ3R0eWIpCisjZGVmaW5lIFRJT0NTRVROCV9JT1coJ3QnLCAxMCwgc3RydWN0IHNndHR5YikJLyogVElPQ1NFVFAgd28gZmx1c2ggKi8KKworI2RlZmluZSBUSU9DU0VUQwlfSU9XKCd0JywgMTcsIHN0cnVjdCB0Y2hhcnMpCisjZGVmaW5lIFRJT0NHRVRDCV9JT1IoJ3QnLCAxOCwgc3RydWN0IHRjaGFycykKKyNkZWZpbmUgVENHRVRTCQlfSU9SKCd0JywgMTksIHN0cnVjdCB0ZXJtaW9zKQorI2RlZmluZSBUQ1NFVFMJCV9JT1coJ3QnLCAyMCwgc3RydWN0IHRlcm1pb3MpCisjZGVmaW5lIFRDU0VUU1cJCV9JT1coJ3QnLCAyMSwgc3RydWN0IHRlcm1pb3MpCisjZGVmaW5lIFRDU0VUU0YJCV9JT1coJ3QnLCAyMiwgc3RydWN0IHRlcm1pb3MpCisKKyNkZWZpbmUgVENHRVRBCQlfSU9SKCd0JywgMjMsIHN0cnVjdCB0ZXJtaW8pCisjZGVmaW5lIFRDU0VUQQkJX0lPVygndCcsIDI0LCBzdHJ1Y3QgdGVybWlvKQorI2RlZmluZSBUQ1NFVEFXCQlfSU9XKCd0JywgMjUsIHN0cnVjdCB0ZXJtaW8pCisjZGVmaW5lIFRDU0VUQUYJCV9JT1coJ3QnLCAyOCwgc3RydWN0IHRlcm1pbykKKworI2RlZmluZSBUQ1NCUksJCV9JTygndCcsIDI5KQorI2RlZmluZSBUQ1hPTkMJCV9JTygndCcsIDMwKQorI2RlZmluZSBUQ0ZMU0gJCV9JTygndCcsIDMxKQorCisjZGVmaW5lIFRJT0NTV0lOU1oJX0lPVygndCcsIDEwMywgc3RydWN0IHdpbnNpemUpCisjZGVmaW5lIFRJT0NHV0lOU1oJX0lPUigndCcsIDEwNCwgc3RydWN0IHdpbnNpemUpCisjZGVmaW5lCVRJT0NTVEFSVAlfSU8oJ3QnLCAxMTApCQkvKiBzdGFydCBvdXRwdXQsIGxpa2UgXlEgKi8KKyNkZWZpbmUJVElPQ1NUT1AJX0lPKCd0JywgMTExKQkJLyogc3RvcCBvdXRwdXQsIGxpa2UgXlMgKi8KKyNkZWZpbmUgVElPQ09VVFEgICAgICAgIF9JT1IoJ3QnLCAxMTUsIGludCkgICAgIC8qIG91dHB1dCBxdWV1ZSBzaXplICovCisKKyNkZWZpbmUgVElPQ0dMVEMJX0lPUigndCcsIDExNiwgc3RydWN0IGx0Y2hhcnMpCisjZGVmaW5lIFRJT0NTTFRDCV9JT1coJ3QnLCAxMTcsIHN0cnVjdCBsdGNoYXJzKQorI2RlZmluZSBUSU9DU1BHUlAJX0lPVygndCcsIDExOCwgaW50KQorI2RlZmluZSBUSU9DR1BHUlAJX0lPUigndCcsIDExOSwgaW50KQorCisjZGVmaW5lIFRJT0NFWENMCTB4NTQwQworI2RlZmluZSBUSU9DTlhDTAkweDU0MEQKKyNkZWZpbmUgVElPQ1NDVFRZCTB4NTQwRQorCisjZGVmaW5lIFRJT0NTVEkJCTB4NTQxMgorI2RlZmluZSBUSU9DTUdFVAkweDU0MTUKKyNkZWZpbmUgVElPQ01CSVMJMHg1NDE2CisjZGVmaW5lIFRJT0NNQklDCTB4NTQxNworI2RlZmluZSBUSU9DTVNFVAkweDU0MTgKKyMgZGVmaW5lIFRJT0NNX0xFCTB4MDAxCisjIGRlZmluZSBUSU9DTV9EVFIJMHgwMDIKKyMgZGVmaW5lIFRJT0NNX1JUUwkweDAwNAorIyBkZWZpbmUgVElPQ01fU1QJMHgwMDgKKyMgZGVmaW5lIFRJT0NNX1NSCTB4MDEwCisjIGRlZmluZSBUSU9DTV9DVFMJMHgwMjAKKyMgZGVmaW5lIFRJT0NNX0NBUgkweDA0MAorIyBkZWZpbmUgVElPQ01fUk5HCTB4MDgwCisjIGRlZmluZSBUSU9DTV9EU1IJMHgxMDAKKyMgZGVmaW5lIFRJT0NNX0NECVRJT0NNX0NBUgorIyBkZWZpbmUgVElPQ01fUkkJVElPQ01fUk5HCisKKyNkZWZpbmUgVElPQ0dTT0ZUQ0FSCTB4NTQxOQorI2RlZmluZSBUSU9DU1NPRlRDQVIJMHg1NDFBCisjZGVmaW5lIFRJT0NMSU5VWAkweDU0MUMKKyNkZWZpbmUgVElPQ0NPTlMJMHg1NDFECisjZGVmaW5lIFRJT0NHU0VSSUFMCTB4NTQxRQorI2RlZmluZSBUSU9DU1NFUklBTAkweDU0MUYKKyNkZWZpbmUgVElPQ1BLVAkJMHg1NDIwCisjIGRlZmluZSBUSU9DUEtUX0RBVEEJCSAwCisjIGRlZmluZSBUSU9DUEtUX0ZMVVNIUkVBRAkgMQorIyBkZWZpbmUgVElPQ1BLVF9GTFVTSFdSSVRFCSAyCisjIGRlZmluZSBUSU9DUEtUX1NUT1AJCSA0CisjIGRlZmluZSBUSU9DUEtUX1NUQVJUCQkgOAorIyBkZWZpbmUgVElPQ1BLVF9OT1NUT1AJCTE2CisjIGRlZmluZSBUSU9DUEtUX0RPU1RPUAkJMzIKKworCisjZGVmaW5lIFRJT0NOT1RUWQkweDU0MjIKKyNkZWZpbmUgVElPQ1NFVEQJMHg1NDIzCisjZGVmaW5lIFRJT0NHRVRECTB4NTQyNAorI2RlZmluZSBUQ1NCUktQCQkweDU0MjUJLyogTmVlZGVkIGZvciBQT1NJWCB0Y3NlbmRicmVhaygpICovCisjZGVmaW5lIFRJT0NTQlJLCTB4NTQyNyAgLyogQlNEIGNvbXBhdGliaWxpdHkgKi8KKyNkZWZpbmUgVElPQ0NCUksJMHg1NDI4ICAvKiBCU0QgY29tcGF0aWJpbGl0eSAqLworI2RlZmluZSBUSU9DR1NJRAkweDU0MjkgIC8qIFJldHVybiB0aGUgc2Vzc2lvbiBJRCBvZiBGRCAqLworI2RlZmluZSBUSU9DR1BUTglfSU9SKCdUJywweDMwLCB1bnNpZ25lZCBpbnQpIC8qIEdldCBQdHkgTnVtYmVyIChvZiBwdHktbXV4IGRldmljZSkgKi8KKyNkZWZpbmUgVElPQ1NQVExDSwlfSU9XKCdUJywweDMxLCBpbnQpICAvKiBMb2NrL3VubG9jayBQdHkgKi8KKworI2RlZmluZSBUSU9DU0VSQ09ORklHCTB4NTQ1MworI2RlZmluZSBUSU9DU0VSR1dJTEQJMHg1NDU0CisjZGVmaW5lIFRJT0NTRVJTV0lMRAkweDU0NTUKKyNkZWZpbmUgVElPQ0dMQ0tUUk1JT1MJMHg1NDU2CisjZGVmaW5lIFRJT0NTTENLVFJNSU9TCTB4NTQ1NworI2RlZmluZSBUSU9DU0VSR1NUUlVDVAkweDU0NTggLyogRm9yIGRlYnVnZ2luZyBvbmx5ICovCisjZGVmaW5lIFRJT0NTRVJHRVRMU1IgICAweDU0NTkgLyogR2V0IGxpbmUgc3RhdHVzIHJlZ2lzdGVyICovCisgIC8qIGlvY3RsIChmZCwgVElPQ1NFUkdFVExTUiwgJnJlc3VsdCkgd2hlcmUgcmVzdWx0IG1heSBiZSBhcyBiZWxvdyAqLworIyBkZWZpbmUgVElPQ1NFUl9URU1UICAgIDB4MDEJLyogVHJhbnNtaXR0ZXIgcGh5c2ljYWxseSBlbXB0eSAqLworI2RlZmluZSBUSU9DU0VSR0VUTVVMVEkgMHg1NDVBIC8qIEdldCBtdWx0aXBvcnQgY29uZmlnICAqLworI2RlZmluZSBUSU9DU0VSU0VUTVVMVEkgMHg1NDVCIC8qIFNldCBtdWx0aXBvcnQgY29uZmlnICovCisKKyNkZWZpbmUgVElPQ01JV0FJVAkweDU0NUMJLyogd2FpdCBmb3IgYSBjaGFuZ2Ugb24gc2VyaWFsIGlucHV0IGxpbmUocykgKi8KKyNkZWZpbmUgVElPQ0dJQ09VTlQJMHg1NDVECS8qIHJlYWQgc2VyaWFsIHBvcnQgaW5saW5lIGludGVycnVwdCBjb3VudHMgKi8KKworI2VuZGlmIC8qIF9BU01fUFBDX0lPQ1RMU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvaXBjLmggYi9pbmNsdWRlL2FzbS1wcGMvaXBjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ2ZTNkOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9pcGMuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvaXBjLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvaXBjYnVmLmggYi9pbmNsdWRlL2FzbS1wcGMvaXBjYnVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFiNjc1MgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9pcGNidWYuaApAQCAtMCwwICsxLDI5IEBACisjaWZuZGVmIF9fUFBDX0lQQ0JVRl9IX18KKyNkZWZpbmUgX19QUENfSVBDQlVGX0hfXworCisvKgorICogVGhlIGlwYzY0X3Blcm0gc3RydWN0dXJlIGZvciBQUEMgYXJjaGl0ZWN0dXJlLgorICogTm90ZSBleHRyYSBwYWRkaW5nIGJlY2F1c2UgdGhpcyBzdHJ1Y3R1cmUgaXMgcGFzc2VkIGJhY2sgYW5kIGZvcnRoCisgKiBiZXR3ZWVuIGtlcm5lbCBhbmQgdXNlciBzcGFjZS4KKyAqCisgKiBQYWQgc3BhY2UgaXMgbGVmdCBmb3I6CisgKiAtIDEgMzItYml0IHZhbHVlIHRvIGZpbGwgdXAgZm9yIDgtYnl0ZSBhbGlnbm1lbnQKKyAqIC0gMiBtaXNjZWxsYW5lb3VzIDY0LWJpdCB2YWx1ZXMgKHNvIHRoYXQgdGhpcyBzdHJ1Y3R1cmUgbWF0Y2hlcworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFBDNjQgaXBjNjRfcGVybSkKKyAqLworCitzdHJ1Y3QgaXBjNjRfcGVybQoreworCV9fa2VybmVsX2tleV90CQlrZXk7CisJX19rZXJuZWxfdWlkX3QJCXVpZDsKKwlfX2tlcm5lbF9naWRfdAkJZ2lkOworCV9fa2VybmVsX3VpZF90CQljdWlkOworCV9fa2VybmVsX2dpZF90CQljZ2lkOworCV9fa2VybmVsX21vZGVfdAkJbW9kZTsKKwl1bnNpZ25lZCBsb25nCQlzZXE7CisJdW5zaWduZWQgaW50CQlfX3BhZDI7CisJdW5zaWduZWQgbG9uZyBsb25nCV9fdW51c2VkMTsKKwl1bnNpZ25lZCBsb25nIGxvbmcJX191bnVzZWQyOworfTsKKworI2VuZGlmIC8qIF9fUFBDX0lQQ0JVRl9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9pcGljLmggYi9pbmNsdWRlL2FzbS1wcGMvaXBpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwOTJiOTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGMvaXBpYy5oCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1wcGMvaXBpYy5oCisgKgorICogSVBJQyBleHRlcm5hbCBkZWZpbml0aW9ucyBhbmQgc3RydWN0dXJlLgorICoKKyAqIE1haW50YWluZXI6IEt1bWFyIEdhbGEgPGt1bWFyLmdhbGFAZnJlZXNjYWxlLmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgMjAwNSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2lmZGVmIF9fS0VSTkVMX18KKyNpZm5kZWYgX19BU01fSVBJQ19IX18KKyNkZWZpbmUgX19BU01fSVBJQ19IX18KKworI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorCisvKiBGbGFncyB3aGVuIHdlIGluaXQgdGhlIElQSUMgKi8KKyNkZWZpbmUgSVBJQ19TUFJFQURNT0RFX0dSUF9BCTB4MDAwMDAwMDEKKyNkZWZpbmUgSVBJQ19TUFJFQURNT0RFX0dSUF9ECTB4MDAwMDAwMDIKKyNkZWZpbmUgSVBJQ19TUFJFQURNT0RFX01JWF9BCTB4MDAwMDAwMDQKKyNkZWZpbmUgSVBJQ19TUFJFQURNT0RFX01JWF9CCTB4MDAwMDAwMDgKKyNkZWZpbmUgSVBJQ19ESVNBQkxFX01DUF9PVVQJMHgwMDAwMDAxMAorI2RlZmluZSBJUElDX0lSUTBfTUNQCQkweDAwMDAwMDIwCisKKy8qIElQSUMgcmVnaXN0ZXJzIG9mZnNldHMgKi8KKyNkZWZpbmUgSVBJQ19TSUNGUgkweDAwCS8qIFN5c3RlbSBHbG9iYWwgSW50ZXJydXB0IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSVBJQ19TSVZDUgkweDA0CS8qIFN5c3RlbSBHbG9iYWwgSW50ZXJydXB0IFZlY3RvciBSZWdpc3RlciAqLworI2RlZmluZSBJUElDX1NJUE5SX0gJMHgwOAkvKiBTeXN0ZW0gSW50ZXJuYWwgSW50ZXJydXB0IFBlbmRpbmcgUmVnaXN0ZXIgKEhJR0gpICovCisjZGVmaW5lIElQSUNfU0lQTlJfTAkweDBDCS8qIFN5c3RlbSBJbnRlcm5hbCBJbnRlcnJ1cHQgUGVuZGluZyBSZWdpc3RlciAoTE9XKSAqLworI2RlZmluZSBJUElDX1NJUFJSX0EJMHgxMAkvKiBTeXN0ZW0gSW50ZXJuYWwgSW50ZXJydXB0IGdyb3VwIEEgUHJpb3JpdHkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSVBJQ19TSVBSUl9CCTB4MTQJLyogU3lzdGVtIEludGVybmFsIEludGVycnVwdCBncm91cCBCIFByaW9yaXR5IFJlZ2lzdGVyICovCisjZGVmaW5lIElQSUNfU0lQUlJfQwkweDE4CS8qIFN5c3RlbSBJbnRlcm5hbCBJbnRlcnJ1cHQgZ3JvdXAgQyBQcmlvcml0eSBSZWdpc3RlciAqLworI2RlZmluZSBJUElDX1NJUFJSX0QJMHgxQwkvKiBTeXN0ZW0gSW50ZXJuYWwgSW50ZXJydXB0IGdyb3VwIEQgUHJpb3JpdHkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSVBJQ19TSU1TUl9ICTB4MjAJLyogU3lzdGVtIEludGVybmFsIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIChISUdIKSAqLworI2RlZmluZSBJUElDX1NJTVNSX0wJMHgyNAkvKiBTeXN0ZW0gSW50ZXJuYWwgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKExPVykgKi8KKyNkZWZpbmUgSVBJQ19TSUNOUgkweDI4CS8qIFN5c3RlbSBJbnRlcm5hbCBJbnRlcnJ1cHQgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBJUElDX1NFUE5SCTB4MkMJLyogU3lzdGVtIEV4dGVybmFsIEludGVycnVwdCBQZW5kaW5nIFJlZ2lzdGVyICovCisjZGVmaW5lIElQSUNfU01QUlJfQQkweDMwCS8qIFN5c3RlbSBNaXhlZCBJbnRlcnJ1cHQgZ3JvdXAgQSBQcmlvcml0eSBSZWdpc3RlciAqLworI2RlZmluZSBJUElDX1NNUFJSX0IJMHgzNAkvKiBTeXN0ZW0gTWl4ZWQgSW50ZXJydXB0IGdyb3VwIEIgUHJpb3JpdHkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSVBJQ19TRU1TUgkweDM4CS8qIFN5c3RlbSBFeHRlcm5hbCBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLworI2RlZmluZSBJUElDX1NFQ05SCTB4M0MJLyogU3lzdGVtIEV4dGVybmFsIEludGVycnVwdCBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIElQSUNfU0VSU1IJMHg0MAkvKiBTeXN0ZW0gRXJyb3IgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIElQSUNfU0VSTVIJMHg0NAkvKiBTeXN0ZW0gRXJyb3IgTWFzayBSZWdpc3RlciAqLworI2RlZmluZSBJUElDX1NFUkNSCTB4NDgJLyogU3lzdGVtIEVycm9yIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSVBJQ19TSUZDUl9ICTB4NTAJLyogU3lzdGVtIEludGVybmFsIEludGVycnVwdCBGb3JjZSBSZWdpc3RlciAoSElHSCkgKi8KKyNkZWZpbmUgSVBJQ19TSUZDUl9MCTB4NTQJLyogU3lzdGVtIEludGVybmFsIEludGVycnVwdCBGb3JjZSBSZWdpc3RlciAoTE9XKSAqLworI2RlZmluZSBJUElDX1NFRkNSCTB4NTgJLyogU3lzdGVtIEV4dGVybmFsIEludGVycnVwdCBGb3JjZSBSZWdpc3RlciAqLworI2RlZmluZSBJUElDX1NFUkZSCTB4NUMJLyogU3lzdGVtIEVycm9yIEZvcmNlIFJlZ2lzdGVyICovCisjZGVmaW5lIElQSUNfU0NWQ1IJMHg2MAkvKiBTeXN0ZW0gQ3JpdGljYWwgSW50ZXJydXB0IFZlY3RvciBSZWdpc3RlciAqLworI2RlZmluZSBJUElDX1NNVkNSCTB4NjQJLyogU3lzdGVtIE1hbmFnZW1lbnQgSW50ZXJydXB0IFZlY3RvciBSZWdpc3RlciAqLworCitlbnVtIGlwaWNfcHJpb19ncnAgeworCUlQSUNfSU5UX0dSUF9BID0gSVBJQ19TSVBSUl9BLAorCUlQSUNfSU5UX0dSUF9EID0gSVBJQ19TSVBSUl9ELAorCUlQSUNfTUlYX0dSUF9BID0gSVBJQ19TTVBSUl9BLAorCUlQSUNfTUlYX0dSUF9CID0gSVBJQ19TTVBSUl9CLAorfTsKKworZW51bSBpcGljX21jcF9pcnEgeworCUlQSUNfTUNQX0lSUTAgPSAwLAorCUlQSUNfTUNQX1dEVCAgPSAxLAorCUlQSUNfTUNQX1NCQSAgPSAyLAorCUlQSUNfTUNQX1BDSTEgPSA1LAorCUlQSUNfTUNQX1BDSTIgPSA2LAorCUlQSUNfTUNQX01VICAgPSA3LAorfTsKKworZXh0ZXJuIHZvaWQgaXBpY19pbml0KHBoeXNfYWRkcl90IHBoeXNfYWRkciwgdW5zaWduZWQgaW50IGZsYWdzLAorCQl1bnNpZ25lZCBpbnQgaXJxX29mZnNldCwKKwkJdW5zaWduZWQgY2hhciAqc2Vuc2VzLCB1bnNpZ25lZCBpbnQgc2Vuc2VzX2NvdW50KTsKK2V4dGVybiBpbnQgaXBpY19zZXRfcHJpb3JpdHkodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IHByaW9yaXR5KTsKK2V4dGVybiB2b2lkIGlwaWNfc2V0X2hpZ2hlc3RfcHJpb3JpdHkodW5zaWduZWQgaW50IGlycSk7CitleHRlcm4gdm9pZCBpcGljX3NldF9kZWZhdWx0X3ByaW9yaXR5KHZvaWQpOworZXh0ZXJuIHZvaWQgaXBpY19lbmFibGVfbWNwKGVudW0gaXBpY19tY3BfaXJxIG1jcF9pcnEpOworZXh0ZXJuIHZvaWQgaXBpY19kaXNhYmxlX21jcChlbnVtIGlwaWNfbWNwX2lycSBtY3BfaXJxKTsKK2V4dGVybiB1MzIgaXBpY19nZXRfbWNwX3N0YXR1cyh2b2lkKTsKK2V4dGVybiB2b2lkIGlwaWNfY2xlYXJfbWNwX3N0YXR1cyh1MzIgbWFzayk7CitleHRlcm4gaW50IGlwaWNfZ2V0X2lycShzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKKyNlbmRpZiAvKiBfX0FTTV9JUElDX0hfXyAqLworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9pcnEuaCBiL2luY2x1ZGUvYXNtLXBwYy9pcnEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmI4NmJlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjL2lycS5oCkBAIC0wLDAgKzEsNDAwIEBACisjaWZkZWYgX19LRVJORUxfXworI2lmbmRlZiBfQVNNX0lSUV9ICisjZGVmaW5lIF9BU01fSVJRX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CQkvKiBwcGNfbWQgKi8KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisKKy8qCisgKiBUaGVzZSBjb25zdGFudHMgYXJlIHVzZWQgZm9yIHBhc3NpbmcgaW5mb3JtYXRpb24gYWJvdXQgaW50ZXJydXB0CisgKiBzaWduYWwgcG9sYXJpdHkgYW5kIGxldmVsL2VkZ2Ugc2Vuc2luZyB0byB0aGUgbG93LWxldmVsIFBJQyBjaGlwCisgKiBkcml2ZXJzLgorICovCisjZGVmaW5lIElSUV9TRU5TRV9NQVNLCQkweDEKKyNkZWZpbmUgSVJRX1NFTlNFX0xFVkVMCQkweDEJLyogaW50ZXJydXB0IG9uIGFjdGl2ZSBsZXZlbCAqLworI2RlZmluZSBJUlFfU0VOU0VfRURHRQkJMHgwCS8qIGludGVycnVwdCB0cmlnZ2VyZWQgYnkgZWRnZSAqLworCisjZGVmaW5lIElSUV9QT0xBUklUWV9NQVNLCTB4MgorI2RlZmluZSBJUlFfUE9MQVJJVFlfUE9TSVRJVkUJMHgyCS8qIGhpZ2ggbGV2ZWwgb3IgbG93LT5oaWdoIGVkZ2UgKi8KKyNkZWZpbmUgSVJRX1BPTEFSSVRZX05FR0FUSVZFCTB4MAkvKiBsb3cgbGV2ZWwgb3IgaGlnaC0+bG93IGVkZ2UgKi8KKworI2lmIGRlZmluZWQoQ09ORklHXzQweCkKKyNpbmNsdWRlIDxhc20vaWJtNHh4Lmg+CisKKyNpZm5kZWYgTlJfQk9BUkRfSVJRUworI2RlZmluZSBOUl9CT0FSRF9JUlFTIDAKKyNlbmRpZgorCisjaWZuZGVmIFVJQ19XSURUSCAvKiBOdW1iZXIgb2YgaW50ZXJydXB0cyBwZXIgZGV2aWNlICovCisjZGVmaW5lIFVJQ19XSURUSCAzMgorI2VuZGlmCisKKyNpZm5kZWYgTlJfVUlDUyAvKiBudW1iZXIgIG9mIFVJQyBkZXZpY2VzICovCisjZGVmaW5lIE5SX1VJQ1MgMQorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChDT05GSUdfNDAzKQorLyoKKyAqIFRoZSBQb3dlclBDIDQwMyBjb3JlcycgQXN5bmNocm9ub3VzIEludGVycnVwdCBDb250cm9sbGVyIChBSUMpIGhhcworICogMzIgcG9zc2libGUgaW50ZXJydXB0cywgYSBtYWpvcml0eSBvZiB3aGljaCBhcmUgbm90IGltcGxlbWVudGVkIG9uCisgKiBhbGwgY29yZXMuIFRoZXJlIGFyZSBzaXggY29uZmlndXJhYmxlLCBleHRlcm5hbCBpbnRlcnJ1cHQgcGlucyBhbmQKKyAqIHRoZXJlIGFyZSBlaWdodCBpbnRlcm5hbCBpbnRlcnJ1cHRzIGZvciB0aGUgb24tY2hpcCBzZXJpYWwgcG9ydAorICogKFNQVSksIERNQSBjb250cm9sbGVyLCBhbmQgSlRBRyBjb250cm9sbGVyLgorICoKKyAqLworCisjZGVmaW5lCU5SX0FJQ19JUlFTIDMyCisjZGVmaW5lCU5SX0lSUVMJIChOUl9BSUNfSVJRUyArIE5SX0JPQVJEX0lSUVMpCisKKyNlbGlmICFkZWZpbmVkIChDT05GSUdfNDAzKQorCisvKgorICogIFRoZSBQb3dlclBDIDQwNSBjb3JlcycgVW5pdmVyc2FsIEludGVycnVwdCBDb250cm9sbGVyIChVSUMpIGhhcyAzMgorICogcG9zc2libGUgaW50ZXJydXB0cyBhcyB3ZWxsLiBUaGVyZSBhcmUgc2V2ZW4sIGNvbmZpZ3VyYWJsZSBleHRlcm5hbAorICogaW50ZXJydXB0IHBpbnMgYW5kIHRoZXJlIGFyZSAxNyBpbnRlcm5hbCBpbnRlcnJ1cHRzIGZvciB0aGUgb24tY2hpcAorICogc2VyaWFsIHBvcnQsIERNQSBjb250cm9sbGVyLCBvbi1jaGlwIEV0aGVybmV0IGNvbnRyb2xsZXIsIFBDSSwgZXRjLgorICoKKyAqLworCisKKyNkZWZpbmUgTlJfVUlDX0lSUVMgVUlDX1dJRFRICisjZGVmaW5lIE5SX0lSUVMJCSgoTlJfVUlDX0lSUVMgKiBOUl9VSUNTKSArIE5SX0JPQVJEX0lSUVMpCisjZW5kaWYKK3N0YXRpYyBfX2lubGluZV9fIGludAoraXJxX2Nhbm9uaWNhbGl6ZShpbnQgaXJxKQoreworCXJldHVybiAoaXJxKTsKK30KKworI2VsaWYgZGVmaW5lZChDT05GSUdfNDR4KQorI2luY2x1ZGUgPGFzbS9pYm00NHguaD4KKworI2RlZmluZQlOUl9VSUNfSVJRUwkzMgorI2RlZmluZQlOUl9JUlFTCQkoKE5SX1VJQ19JUlFTICogTlJfVUlDUykgKyBOUl9CT0FSRF9JUlFTKQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQKK2lycV9jYW5vbmljYWxpemUoaW50IGlycSkKK3sKKwlyZXR1cm4gKGlycSk7Cit9CisKKyNlbGlmIGRlZmluZWQoQ09ORklHXzh4eCkKKworLyogTm93IGluY2x1ZGUgdGhlIGJvYXJkIGNvbmZpZ3VyYXRpb24gc3BlY2lmaWMgYXNzb2NpYXRpb25zLgorKi8KKyNpbmNsdWRlIDxhc20vbXBjOHh4Lmg+CisKKy8qIFRoZSBNUEM4eHggY29yZXMgaGF2ZSAxNiBwb3NzaWJsZSBpbnRlcnJ1cHRzLiAgVGhlcmUgYXJlIGVpZ2h0CisgKiBwb3NzaWJsZSBsZXZlbCBzZW5zaXRpdmUgaW50ZXJydXB0cyBhc3NpZ25lZCBhbmQgZ2VuZXJhdGVkIGludGVybmFsbHkKKyAqIGZyb20gc3VjaCBkZXZpY2VzIGFzIENQTSwgUENNQ0lBLCBSVEMsIFBJVCwgVGltZUJhc2UgYW5kIERlY3JlbWVudGVyLgorICogVGhlcmUgYXJlIGVpZ2h0IGV4dGVybmFsIGludGVycnVwdHMgKElSUXMpIHRoYXQgY2FuIGJlIGNvbmZpZ3VyZWQKKyAqIGFzIGVpdGhlciBsZXZlbCBvciBlZGdlIHNlbnNpdGl2ZS4KKyAqCisgKiBPbiBzb21lIGltcGxlbWVudGF0aW9ucywgdGhlcmUgaXMgYWxzbyB0aGUgcG9zc2liaWxpdHkgb2YgYW4gODI1OQorICogdGhyb3VnaCB0aGUgUENJIGFuZCBQQ0ktSVNBIGJyaWRnZXMuCisgKgorICogV2UgYXJlICJmbGF0dGVuaW5nIiB0aGUgaW50ZXJydXB0IHZlY3RvcnMgb2YgdGhlIGNhc2NhZGVkIENQTQorICogYW5kIDgyNTkgaW50ZXJydXB0IGNvbnRyb2xsZXJzIHNvIHRoYXQgd2UgY2FuIHVuaXF1ZWx5IGlkZW50aWZ5CisgKiBhbnkgaW50ZXJydXB0IHNvdXJjZSB3aXRoIGEgc2luZ2xlIGludGVnZXIuCisgKi8KKyNkZWZpbmUgTlJfU0lVX0lOVFMJMTYKKyNkZWZpbmUgTlJfQ1BNX0lOVFMJMzIKKyNpZm5kZWYgTlJfODI1OV9JTlRTCisjZGVmaW5lIE5SXzgyNTlfSU5UUyAwCisjZW5kaWYKKworI2RlZmluZSBTSVVfSVJRX09GRlNFVAkJMAorI2RlZmluZSBDUE1fSVJRX09GRlNFVAkJKFNJVV9JUlFfT0ZGU0VUICsgTlJfU0lVX0lOVFMpCisjZGVmaW5lIEk4MjU5X0lSUV9PRkZTRVQJKENQTV9JUlFfT0ZGU0VUICsgTlJfQ1BNX0lOVFMpCisKKyNkZWZpbmUgTlJfSVJRUwkoTlJfU0lVX0lOVFMgKyBOUl9DUE1fSU5UUyArIE5SXzgyNTlfSU5UUykKKworLyogVGhlc2UgdmFsdWVzIG11c3QgYmUgemVyby1iYXNlZCBhbmQgbWFwIDE6MSB3aXRoIHRoZSBTSVUgY29uZmlndXJhdGlvbi4KKyAqIFRoZXkgYXJlIHVzZWQgdGhyb3VnaG91dCB0aGUgOHh4IEkvTyBzdWJzeXN0ZW0gdG8gZ2VuZXJhdGUKKyAqIGludGVycnVwdCBtYXNrcywgZmxhZ3MsIGFuZCBvdGhlciBjb250cm9sIHBhdHRlcm5zLiAgVGhpcyBpcyB3aHkgdGhlCisgKiBjdXJyZW50IGtlcm5lbCBhc3N1bXB0aW9uIG9mIHRoZSA4MjU5IGFzIHRoZSBiYXNlIGNvbnRyb2xsZXIgaXMgc3VjaAorICogYSBwYWluIGluIHRoZSBidXR0LgorICovCisjZGVmaW5lCVNJVV9JUlEwCSgwKQkvKiBIaWdoZXN0IHByaW9yaXR5ICovCisjZGVmaW5lCVNJVV9MRVZFTDAJKDEpCisjZGVmaW5lCVNJVV9JUlExCSgyKQorI2RlZmluZQlTSVVfTEVWRUwxCSgzKQorI2RlZmluZQlTSVVfSVJRMgkoNCkKKyNkZWZpbmUJU0lVX0xFVkVMMgkoNSkKKyNkZWZpbmUJU0lVX0lSUTMJKDYpCisjZGVmaW5lCVNJVV9MRVZFTDMJKDcpCisjZGVmaW5lCVNJVV9JUlE0CSg4KQorI2RlZmluZQlTSVVfTEVWRUw0CSg5KQorI2RlZmluZQlTSVVfSVJRNQkoMTApCisjZGVmaW5lCVNJVV9MRVZFTDUJKDExKQorI2RlZmluZQlTSVVfSVJRNgkoMTIpCisjZGVmaW5lCVNJVV9MRVZFTDYJKDEzKQorI2RlZmluZQlTSVVfSVJRNwkoMTQpCisjZGVmaW5lCVNJVV9MRVZFTDcJKDE1KQorCisvKiBUaGUgaW50ZXJuYWwgaW50ZXJydXB0cyB3ZSBjYW4gY29uZmlndXJlIGFzIHdlIHNlZSBmaXQuCisgKiBNeSBwZXJzb25hbCBwcmVmZXJlbmNlIGlzIENQTSBhdCBsZXZlbCAyLCB3aGljaCBwdXRzIGl0IGFib3ZlIHRoZQorICogTUJYIFBDSS9JU0EvSURFIGludGVycnVwdHMuCisgKi8KKyNpZm5kZWYgUElUX0lOVEVSUlVQVAorI2RlZmluZSBQSVRfSU5URVJSVVBUCQlTSVVfTEVWRUwwCisjZW5kaWYKKyNpZm5kZWYJQ1BNX0lOVEVSUlVQVAorI2RlZmluZSBDUE1fSU5URVJSVVBUCQlTSVVfTEVWRUwyCisjZW5kaWYKKyNpZm5kZWYJUENNQ0lBX0lOVEVSUlVQVAorI2RlZmluZSBQQ01DSUFfSU5URVJSVVBUCVNJVV9MRVZFTDYKKyNlbmRpZgorI2lmbmRlZglERUNfSU5URVJSVVBUCisjZGVmaW5lIERFQ19JTlRFUlJVUFQJCVNJVV9MRVZFTDcKKyNlbmRpZgorCisvKiBTb21lIGludGVybmFsIGludGVycnVwdCByZWdpc3RlcnMgdXNlIGFuIDgtYml0IG1hc2sgZm9yIHRoZSBpbnRlcnJ1cHQKKyAqIGxldmVsIGluc3RlYWQgb2YgYSBudW1iZXIuCisgKi8KKyNkZWZpbmUJbWtfaW50X2ludF9tYXNrKElMKSAoMSA8PCAoNyAtIChJTC8yKSkpCisKKy8qIGFsd2F5cyB0aGUgc2FtZSBvbiA4eHggLS0gQ29ydCAqLworc3RhdGljIF9faW5saW5lX18gaW50IGlycV9jYW5vbmljYWxpemUoaW50IGlycSkKK3sKKwlyZXR1cm4gaXJxOworfQorCisjZWxpZiBkZWZpbmVkKENPTkZJR184M3h4KQorI2luY2x1ZGUgPGFzbS9tcGM4M3h4Lmg+CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBpcnFfY2Fub25pY2FsaXplKGludCBpcnEpCit7CisJcmV0dXJuIGlycTsKK30KKworI2RlZmluZQlOUl9JUlFTCShOUl9JUElDX0lOVFMpCisKKyNlbGlmIGRlZmluZWQoQ09ORklHXzg1eHgpCisvKiBOb3cgaW5jbHVkZSB0aGUgYm9hcmQgY29uZmlndXJhdGlvbiBzcGVjaWZpYyBhc3NvY2lhdGlvbnMuCisqLworI2luY2x1ZGUgPGFzbS9tcGM4NXh4Lmg+CisKKy8qIFRoZSBNUEM4NTYwIG9wZW5waWMgaGFzICAzMiBpbnRlcm5hbCBpbnRlcnJ1cHRzIGFuZCAxMiBleHRlcm5hbAorICogaW50ZXJydXB0cy4KKyAqCisgKiBXZSBhcmUgImZsYXR0ZW5pbmciIHRoZSBpbnRlcnJ1cHQgdmVjdG9ycyBvZiB0aGUgY2FzY2FkZWQgQ1BNCisgKiBzbyB0aGF0IHdlIGNhbiB1bmlxdWVseSBpZGVudGlmeSBhbnkgaW50ZXJydXB0IHNvdXJjZSB3aXRoIGEKKyAqIHNpbmdsZSBpbnRlZ2VyLgorICovCisjZGVmaW5lIE5SX0NQTV9JTlRTCTY0CisjZGVmaW5lIE5SX0VQSUNfSU5UUwk0NAorI2lmbmRlZiBOUl84MjU5X0lOVFMKKyNkZWZpbmUgTlJfODI1OV9JTlRTCTAKKyNlbmRpZgorI2RlZmluZSBOVU1fODI1OV9JTlRFUlJVUFRTIE5SXzgyNTlfSU5UUworCisjaWZuZGVmIENQTV9JUlFfT0ZGU0VUCisjZGVmaW5lIENQTV9JUlFfT0ZGU0VUCTAKKyNlbmRpZgorCisjZGVmaW5lIE5SX0lSUVMJKE5SX0VQSUNfSU5UUyArIE5SX0NQTV9JTlRTICsgTlJfODI1OV9JTlRTKQorCisvKiBJbnRlcm5hbCBJUlFzIG9uIE1QQzg1eHggT3BlblBJQyAqLworCisjaWZuZGVmIE1QQzg1eHhfT1BFTlBJQ19JUlFfT0ZGU0VUCisjaWZkZWYgQ09ORklHX0NQTTIKKyNkZWZpbmUgTVBDODV4eF9PUEVOUElDX0lSUV9PRkZTRVQJKENQTV9JUlFfT0ZGU0VUICsgTlJfQ1BNX0lOVFMpCisjZWxzZQorI2RlZmluZSBNUEM4NXh4X09QRU5QSUNfSVJRX09GRlNFVAkwCisjZW5kaWYKKyNlbmRpZgorCisvKiBOb3QgYWxsIG9mIHRoZXNlIGV4aXN0IG9uIGFsbCBNUEM4NXh4IGltcGxlbWVudGF0aW9ucyAqLworI2RlZmluZSBNUEM4NXh4X0lSUV9MMkNBQ0hFCSggMCArIE1QQzg1eHhfT1BFTlBJQ19JUlFfT0ZGU0VUKQorI2RlZmluZSBNUEM4NXh4X0lSUV9FQ00JCSggMSArIE1QQzg1eHhfT1BFTlBJQ19JUlFfT0ZGU0VUKQorI2RlZmluZSBNUEM4NXh4X0lSUV9ERFIJCSggMiArIE1QQzg1eHhfT1BFTlBJQ19JUlFfT0ZGU0VUKQorI2RlZmluZSBNUEM4NXh4X0lSUV9MQklVCSggMyArIE1QQzg1eHhfT1BFTlBJQ19JUlFfT0ZGU0VUKQorI2RlZmluZSBNUEM4NXh4X0lSUV9ETUEwCSggNCArIE1QQzg1eHhfT1BFTlBJQ19JUlFfT0ZGU0VUKQorI2RlZmluZSBNUEM4NXh4X0lSUV9ETUExCSggNSArIE1QQzg1eHhfT1BFTlBJQ19JUlFfT0ZGU0VUKQorI2RlZmluZSBNUEM4NXh4X0lSUV9ETUEyCSggNiArIE1QQzg1eHhfT1BFTlBJQ19JUlFfT0ZGU0VUKQorI2RlZmluZSBNUEM4NXh4X0lSUV9ETUEzCSggNyArIE1QQzg1eHhfT1BFTlBJQ19JUlFfT0ZGU0VUKQorI2RlZmluZSBNUEM4NXh4X0lSUV9QQ0kxCSggOCArIE1QQzg1eHhfT1BFTlBJQ19JUlFfT0ZGU0VUKQorI2RlZmluZSBNUEM4NXh4X0lSUV9QQ0kyCSggOSArIE1QQzg1eHhfT1BFTlBJQ19JUlFfT0ZGU0VUKQorI2RlZmluZSBNUEM4NXh4X0lSUV9SSU9fRVJST1IJKCA5ICsgTVBDODV4eF9PUEVOUElDX0lSUV9PRkZTRVQpCisjZGVmaW5lIE1QQzg1eHhfSVJRX1JJT19CRUxMCSgxMCArIE1QQzg1eHhfT1BFTlBJQ19JUlFfT0ZGU0VUKQorI2RlZmluZSBNUEM4NXh4X0lSUV9SSU9fVFgJKDExICsgTVBDODV4eF9PUEVOUElDX0lSUV9PRkZTRVQpCisjZGVmaW5lIE1QQzg1eHhfSVJRX1JJT19SWAkoMTIgKyBNUEM4NXh4X09QRU5QSUNfSVJRX09GRlNFVCkKKyNkZWZpbmUgTVBDODV4eF9JUlFfVFNFQzFfVFgJKDEzICsgTVBDODV4eF9PUEVOUElDX0lSUV9PRkZTRVQpCisjZGVmaW5lIE1QQzg1eHhfSVJRX1RTRUMxX1JYCSgxNCArIE1QQzg1eHhfT1BFTlBJQ19JUlFfT0ZGU0VUKQorI2RlZmluZSBNUEM4NXh4X0lSUV9UU0VDMV9FUlJPUgkoMTggKyBNUEM4NXh4X09QRU5QSUNfSVJRX09GRlNFVCkKKyNkZWZpbmUgTVBDODV4eF9JUlFfVFNFQzJfVFgJKDE5ICsgTVBDODV4eF9PUEVOUElDX0lSUV9PRkZTRVQpCisjZGVmaW5lIE1QQzg1eHhfSVJRX1RTRUMyX1JYCSgyMCArIE1QQzg1eHhfT1BFTlBJQ19JUlFfT0ZGU0VUKQorI2RlZmluZSBNUEM4NXh4X0lSUV9UU0VDMl9FUlJPUgkoMjQgKyBNUEM4NXh4X09QRU5QSUNfSVJRX09GRlNFVCkKKyNkZWZpbmUgTVBDODV4eF9JUlFfRkVDCQkoMjUgKyBNUEM4NXh4X09QRU5QSUNfSVJRX09GRlNFVCkKKyNkZWZpbmUgTVBDODV4eF9JUlFfRFVBUlQJKDI2ICsgTVBDODV4eF9PUEVOUElDX0lSUV9PRkZTRVQpCisjZGVmaW5lIE1QQzg1eHhfSVJRX0lJQzEJKDI3ICsgTVBDODV4eF9PUEVOUElDX0lSUV9PRkZTRVQpCisjZGVmaW5lIE1QQzg1eHhfSVJRX1BFUkZNT04JKDI4ICsgTVBDODV4eF9PUEVOUElDX0lSUV9PRkZTRVQpCisjZGVmaW5lIE1QQzg1eHhfSVJRX1NFQzIJKDI5ICsgTVBDODV4eF9PUEVOUElDX0lSUV9PRkZTRVQpCisjZGVmaW5lIE1QQzg1eHhfSVJRX0NQTQkJKDMwICsgTVBDODV4eF9PUEVOUElDX0lSUV9PRkZTRVQpCisKKy8qIFRoZSAxMiBleHRlcm5hbCBpbnRlcnJ1cHQgbGluZXMgKi8KKyNkZWZpbmUgTVBDODV4eF9JUlFfRVhUMCAgICAgICAgKDMyICsgTVBDODV4eF9PUEVOUElDX0lSUV9PRkZTRVQpCisjZGVmaW5lIE1QQzg1eHhfSVJRX0VYVDEgICAgICAgICgzMyArIE1QQzg1eHhfT1BFTlBJQ19JUlFfT0ZGU0VUKQorI2RlZmluZSBNUEM4NXh4X0lSUV9FWFQyICAgICAgICAoMzQgKyBNUEM4NXh4X09QRU5QSUNfSVJRX09GRlNFVCkKKyNkZWZpbmUgTVBDODV4eF9JUlFfRVhUMyAgICAgICAgKDM1ICsgTVBDODV4eF9PUEVOUElDX0lSUV9PRkZTRVQpCisjZGVmaW5lIE1QQzg1eHhfSVJRX0VYVDQgICAgICAgICgzNiArIE1QQzg1eHhfT1BFTlBJQ19JUlFfT0ZGU0VUKQorI2RlZmluZSBNUEM4NXh4X0lSUV9FWFQ1ICAgICAgICAoMzcgKyBNUEM4NXh4X09QRU5QSUNfSVJRX09GRlNFVCkKKyNkZWZpbmUgTVBDODV4eF9JUlFfRVhUNiAgICAgICAgKDM4ICsgTVBDODV4eF9PUEVOUElDX0lSUV9PRkZTRVQpCisjZGVmaW5lIE1QQzg1eHhfSVJRX0VYVDcgICAgICAgICgzOSArIE1QQzg1eHhfT1BFTlBJQ19JUlFfT0ZGU0VUKQorI2RlZmluZSBNUEM4NXh4X0lSUV9FWFQ4ICAgICAgICAoNDAgKyBNUEM4NXh4X09QRU5QSUNfSVJRX09GRlNFVCkKKyNkZWZpbmUgTVBDODV4eF9JUlFfRVhUOSAgICAgICAgKDQxICsgTVBDODV4eF9PUEVOUElDX0lSUV9PRkZTRVQpCisjZGVmaW5lIE1QQzg1eHhfSVJRX0VYVDEwICAgICAgICg0MiArIE1QQzg1eHhfT1BFTlBJQ19JUlFfT0ZGU0VUKQorI2RlZmluZSBNUEM4NXh4X0lSUV9FWFQxMSAgICAgICAoNDMgKyBNUEM4NXh4X09QRU5QSUNfSVJRX09GRlNFVCkKKworLyogQ1BNIHJlbGF0ZWQgaW50ZXJydXB0cyAqLworI2RlZmluZQlTSVVfSU5UX0VSUk9SCQkoKHVpbnQpMHgwMCtDUE1fSVJRX09GRlNFVCkKKyNkZWZpbmUJU0lVX0lOVF9JMkMJCSgodWludCkweDAxK0NQTV9JUlFfT0ZGU0VUKQorI2RlZmluZQlTSVVfSU5UX1NQSQkJKCh1aW50KTB4MDIrQ1BNX0lSUV9PRkZTRVQpCisjZGVmaW5lCVNJVV9JTlRfUklTQwkJKCh1aW50KTB4MDMrQ1BNX0lSUV9PRkZTRVQpCisjZGVmaW5lCVNJVV9JTlRfU01DMQkJKCh1aW50KTB4MDQrQ1BNX0lSUV9PRkZTRVQpCisjZGVmaW5lCVNJVV9JTlRfU01DMgkJKCh1aW50KTB4MDUrQ1BNX0lSUV9PRkZTRVQpCisjZGVmaW5lCVNJVV9JTlRfVVNCCQkoKHVpbnQpMHgwYitDUE1fSVJRX09GRlNFVCkKKyNkZWZpbmUJU0lVX0lOVF9USU1FUjEJCSgodWludCkweDBjK0NQTV9JUlFfT0ZGU0VUKQorI2RlZmluZQlTSVVfSU5UX1RJTUVSMgkJKCh1aW50KTB4MGQrQ1BNX0lSUV9PRkZTRVQpCisjZGVmaW5lCVNJVV9JTlRfVElNRVIzCQkoKHVpbnQpMHgwZStDUE1fSVJRX09GRlNFVCkKKyNkZWZpbmUJU0lVX0lOVF9USU1FUjQJCSgodWludCkweDBmK0NQTV9JUlFfT0ZGU0VUKQorI2RlZmluZQlTSVVfSU5UX0ZDQzEJCSgodWludCkweDIwK0NQTV9JUlFfT0ZGU0VUKQorI2RlZmluZQlTSVVfSU5UX0ZDQzIJCSgodWludCkweDIxK0NQTV9JUlFfT0ZGU0VUKQorI2RlZmluZQlTSVVfSU5UX0ZDQzMJCSgodWludCkweDIyK0NQTV9JUlFfT0ZGU0VUKQorI2RlZmluZQlTSVVfSU5UX01DQzEJCSgodWludCkweDI0K0NQTV9JUlFfT0ZGU0VUKQorI2RlZmluZQlTSVVfSU5UX01DQzIJCSgodWludCkweDI1K0NQTV9JUlFfT0ZGU0VUKQorI2RlZmluZQlTSVVfSU5UX1NDQzEJCSgodWludCkweDI4K0NQTV9JUlFfT0ZGU0VUKQorI2RlZmluZQlTSVVfSU5UX1NDQzIJCSgodWludCkweDI5K0NQTV9JUlFfT0ZGU0VUKQorI2RlZmluZQlTSVVfSU5UX1NDQzMJCSgodWludCkweDJhK0NQTV9JUlFfT0ZGU0VUKQorI2RlZmluZQlTSVVfSU5UX1NDQzQJCSgodWludCkweDJiK0NQTV9JUlFfT0ZGU0VUKQorI2RlZmluZQlTSVVfSU5UX1BDMTUJCSgodWludCkweDMwK0NQTV9JUlFfT0ZGU0VUKQorI2RlZmluZQlTSVVfSU5UX1BDMTQJCSgodWludCkweDMxK0NQTV9JUlFfT0ZGU0VUKQorI2RlZmluZQlTSVVfSU5UX1BDMTMJCSgodWludCkweDMyK0NQTV9JUlFfT0ZGU0VUKQorI2RlZmluZQlTSVVfSU5UX1BDMTIJCSgodWludCkweDMzK0NQTV9JUlFfT0ZGU0VUKQorI2RlZmluZQlTSVVfSU5UX1BDMTEJCSgodWludCkweDM0K0NQTV9JUlFfT0ZGU0VUKQorI2RlZmluZQlTSVVfSU5UX1BDMTAJCSgodWludCkweDM1K0NQTV9JUlFfT0ZGU0VUKQorI2RlZmluZQlTSVVfSU5UX1BDOQkJKCh1aW50KTB4MzYrQ1BNX0lSUV9PRkZTRVQpCisjZGVmaW5lCVNJVV9JTlRfUEM4CQkoKHVpbnQpMHgzNytDUE1fSVJRX09GRlNFVCkKKyNkZWZpbmUJU0lVX0lOVF9QQzcJCSgodWludCkweDM4K0NQTV9JUlFfT0ZGU0VUKQorI2RlZmluZQlTSVVfSU5UX1BDNgkJKCh1aW50KTB4MzkrQ1BNX0lSUV9PRkZTRVQpCisjZGVmaW5lCVNJVV9JTlRfUEM1CQkoKHVpbnQpMHgzYStDUE1fSVJRX09GRlNFVCkKKyNkZWZpbmUJU0lVX0lOVF9QQzQJCSgodWludCkweDNiK0NQTV9JUlFfT0ZGU0VUKQorI2RlZmluZQlTSVVfSU5UX1BDMwkJKCh1aW50KTB4M2MrQ1BNX0lSUV9PRkZTRVQpCisjZGVmaW5lCVNJVV9JTlRfUEMyCQkoKHVpbnQpMHgzZCtDUE1fSVJRX09GRlNFVCkKKyNkZWZpbmUJU0lVX0lOVF9QQzEJCSgodWludCkweDNlK0NQTV9JUlFfT0ZGU0VUKQorI2RlZmluZQlTSVVfSU5UX1BDMAkJKCh1aW50KTB4M2YrQ1BNX0lSUV9PRkZTRVQpCisKK3N0YXRpYyBfX2lubGluZV9fIGludCBpcnFfY2Fub25pY2FsaXplKGludCBpcnEpCit7CisJcmV0dXJuIGlycTsKK30KKworI2Vsc2UgLyogQ09ORklHXzQweCArIENPTkZJR184eHggKi8KKy8qCisgKiB0aGlzIGlzIHRoZSAjIGlycSdzIGZvciBhbGwgcHBjIGFyY2gncyAocG1hYy9jaHJwL3ByZXApCisgKiBzbyBpdCBpcyB0aGUgbWF4IG9mIHRoZW0gYWxsCisgKi8KKyNkZWZpbmUgTlJfSVJRUwkJCTI1NgorCisjaWZuZGVmIENPTkZJR184MjYwCisKKyNkZWZpbmUgTlVNXzgyNTlfSU5URVJSVVBUUwkxNgorCisjZWxzZSAvKiBDT05GSUdfODI2MCAqLworCisvKiBUaGUgODI2MCBoYXMgYW4gaW50ZXJuYWwgaW50ZXJydXB0IGNvbnRyb2xsZXIgd2l0aCBhIG1heGltdW0gb2YKKyAqIDY0IElSUXMuICBXZSB3aWxsIHVzZSBOUl9JUlFzIGZyb20gYWJvdmUgc2luY2UgaXQgaXMgbGFyZ2UgZW5vdWdoLgorICogRG9uJ3QgYmUgY29uZnVzZWQgYnkgdGhlIDgyNjAgZG9jdW1lbnRhdGlvbiB3aGVyZSB0aGV5IGxpc3QgYW4KKyAqICJpbnRlcnJ1cHQgbnVtYmVyIiBhbmQgImludGVycnVwdCB2ZWN0b3IiLiAgV2UgYXJlIG9ubHkgaW50ZXJlc3RlZAorICogaW4gdGhlIGludGVycnVwdCB2ZWN0b3IuICBUaGVyZSBhcmUgInJlc2VydmVkIiBob2xlcyB3aGVyZSB0aGUKKyAqIHZlY3RvciBudW1iZXIgaW5jcmVhc2VzLCBidXQgdGhlIGludGVycnVwdCBudW1iZXIgaW4gdGhlIHRhYmxlIGRvZXMgbm90LgorICogKERvY3VtZW50IGVycmF0YSB1cGRhdGVzIGhhdmUgZml4ZWQgdGhpcy4uLm1ha2Ugc3VyZSB5b3UgaGF2ZSB1cCB0bworICogZGF0ZSBwcm9jZXNzb3IgZG9jdW1lbnRhdGlvbiAtLSBEYW4pLgorICovCisKKyNpZm5kZWYgQ1BNX0lSUV9PRkZTRVQKKyNkZWZpbmUgQ1BNX0lSUV9PRkZTRVQJMAorI2VuZGlmCisKKyNkZWZpbmUgTlJfQ1BNX0lOVFMJNjQKKworI2RlZmluZQlTSVVfSU5UX0VSUk9SCQkoKHVpbnQpMHgwMCArIENQTV9JUlFfT0ZGU0VUKQorI2RlZmluZQlTSVVfSU5UX0kyQwkJKCh1aW50KTB4MDEgKyBDUE1fSVJRX09GRlNFVCkKKyNkZWZpbmUJU0lVX0lOVF9TUEkJCSgodWludCkweDAyICsgQ1BNX0lSUV9PRkZTRVQpCisjZGVmaW5lCVNJVV9JTlRfUklTQwkJKCh1aW50KTB4MDMgKyBDUE1fSVJRX09GRlNFVCkKKyNkZWZpbmUJU0lVX0lOVF9TTUMxCQkoKHVpbnQpMHgwNCArIENQTV9JUlFfT0ZGU0VUKQorI2RlZmluZQlTSVVfSU5UX1NNQzIJCSgodWludCkweDA1ICsgQ1BNX0lSUV9PRkZTRVQpCisjZGVmaW5lCVNJVV9JTlRfSURNQTEJCSgodWludCkweDA2ICsgQ1BNX0lSUV9PRkZTRVQpCisjZGVmaW5lCVNJVV9JTlRfSURNQTIJCSgodWludCkweDA3ICsgQ1BNX0lSUV9PRkZTRVQpCisjZGVmaW5lCVNJVV9JTlRfSURNQTMJCSgodWludCkweDA4ICsgQ1BNX0lSUV9PRkZTRVQpCisjZGVmaW5lCVNJVV9JTlRfSURNQTQJCSgodWludCkweDA5ICsgQ1BNX0lSUV9PRkZTRVQpCisjZGVmaW5lCVNJVV9JTlRfU0RNQQkJKCh1aW50KTB4MGEgKyBDUE1fSVJRX09GRlNFVCkKKyNkZWZpbmUJU0lVX0lOVF9USU1FUjEJCSgodWludCkweDBjICsgQ1BNX0lSUV9PRkZTRVQpCisjZGVmaW5lCVNJVV9JTlRfVElNRVIyCQkoKHVpbnQpMHgwZCArIENQTV9JUlFfT0ZGU0VUKQorI2RlZmluZQlTSVVfSU5UX1RJTUVSMwkJKCh1aW50KTB4MGUgKyBDUE1fSVJRX09GRlNFVCkKKyNkZWZpbmUJU0lVX0lOVF9USU1FUjQJCSgodWludCkweDBmICsgQ1BNX0lSUV9PRkZTRVQpCisjZGVmaW5lCVNJVV9JTlRfVE1DTlQJCSgodWludCkweDEwICsgQ1BNX0lSUV9PRkZTRVQpCisjZGVmaW5lCVNJVV9JTlRfUElUCQkoKHVpbnQpMHgxMSArIENQTV9JUlFfT0ZGU0VUKQorI2RlZmluZQlTSVVfSU5UX0lSUTEJCSgodWludCkweDEzICsgQ1BNX0lSUV9PRkZTRVQpCisjZGVmaW5lCVNJVV9JTlRfSVJRMgkJKCh1aW50KTB4MTQgKyBDUE1fSVJRX09GRlNFVCkKKyNkZWZpbmUJU0lVX0lOVF9JUlEzCQkoKHVpbnQpMHgxNSArIENQTV9JUlFfT0ZGU0VUKQorI2RlZmluZQlTSVVfSU5UX0lSUTQJCSgodWludCkweDE2ICsgQ1BNX0lSUV9PRkZTRVQpCisjZGVmaW5lCVNJVV9JTlRfSVJRNQkJKCh1aW50KTB4MTcgKyBDUE1fSVJRX09GRlNFVCkKKyNkZWZpbmUJU0lVX0lOVF9JUlE2CQkoKHVpbnQpMHgxOCArIENQTV9JUlFfT0ZGU0VUKQorI2RlZmluZQlTSVVfSU5UX0lSUTcJCSgodWludCkweDE5ICsgQ1BNX0lSUV9PRkZTRVQpCisjZGVmaW5lCVNJVV9JTlRfRkNDMQkJKCh1aW50KTB4MjAgKyBDUE1fSVJRX09GRlNFVCkKKyNkZWZpbmUJU0lVX0lOVF9GQ0MyCQkoKHVpbnQpMHgyMSArIENQTV9JUlFfT0ZGU0VUKQorI2RlZmluZQlTSVVfSU5UX0ZDQzMJCSgodWludCkweDIyICsgQ1BNX0lSUV9PRkZTRVQpCisjZGVmaW5lCVNJVV9JTlRfTUNDMQkJKCh1aW50KTB4MjQgKyBDUE1fSVJRX09GRlNFVCkKKyNkZWZpbmUJU0lVX0lOVF9NQ0MyCQkoKHVpbnQpMHgyNSArIENQTV9JUlFfT0ZGU0VUKQorI2RlZmluZQlTSVVfSU5UX1NDQzEJCSgodWludCkweDI4ICsgQ1BNX0lSUV9PRkZTRVQpCisjZGVmaW5lCVNJVV9JTlRfU0NDMgkJKCh1aW50KTB4MjkgKyBDUE1fSVJRX09GRlNFVCkKKyNkZWZpbmUJU0lVX0lOVF9TQ0MzCQkoKHVpbnQpMHgyYSArIENQTV9JUlFfT0ZGU0VUKQorI2RlZmluZQlTSVVfSU5UX1NDQzQJCSgodWludCkweDJiICsgQ1BNX0lSUV9PRkZTRVQpCisjZGVmaW5lCVNJVV9JTlRfUEMxNQkJKCh1aW50KTB4MzAgKyBDUE1fSVJRX09GRlNFVCkKKyNkZWZpbmUJU0lVX0lOVF9QQzE0CQkoKHVpbnQpMHgzMSArIENQTV9JUlFfT0ZGU0VUKQorI2RlZmluZQlTSVVfSU5UX1BDMTMJCSgodWludCkweDMyICsgQ1BNX0lSUV9PRkZTRVQpCisjZGVmaW5lCVNJVV9JTlRfUEMxMgkJKCh1aW50KTB4MzMgKyBDUE1fSVJRX09GRlNFVCkKKyNkZWZpbmUJU0lVX0lOVF9QQzExCQkoKHVpbnQpMHgzNCArIENQTV9JUlFfT0ZGU0VUKQorI2RlZmluZQlTSVVfSU5UX1BDMTAJCSgodWludCkweDM1ICsgQ1BNX0lSUV9PRkZTRVQpCisjZGVmaW5lCVNJVV9JTlRfUEM5CQkoKHVpbnQpMHgzNiArIENQTV9JUlFfT0ZGU0VUKQorI2RlZmluZQlTSVVfSU5UX1BDOAkJKCh1aW50KTB4MzcgKyBDUE1fSVJRX09GRlNFVCkKKyNkZWZpbmUJU0lVX0lOVF9QQzcJCSgodWludCkweDM4ICsgQ1BNX0lSUV9PRkZTRVQpCisjZGVmaW5lCVNJVV9JTlRfUEM2CQkoKHVpbnQpMHgzOSArIENQTV9JUlFfT0ZGU0VUKQorI2RlZmluZQlTSVVfSU5UX1BDNQkJKCh1aW50KTB4M2EgKyBDUE1fSVJRX09GRlNFVCkKKyNkZWZpbmUJU0lVX0lOVF9QQzQJCSgodWludCkweDNiICsgQ1BNX0lSUV9PRkZTRVQpCisjZGVmaW5lCVNJVV9JTlRfUEMzCQkoKHVpbnQpMHgzYyArIENQTV9JUlFfT0ZGU0VUKQorI2RlZmluZQlTSVVfSU5UX1BDMgkJKCh1aW50KTB4M2QgKyBDUE1fSVJRX09GRlNFVCkKKyNkZWZpbmUJU0lVX0lOVF9QQzEJCSgodWludCkweDNlICsgQ1BNX0lSUV9PRkZTRVQpCisjZGVmaW5lCVNJVV9JTlRfUEMwCQkoKHVpbnQpMHgzZiArIENQTV9JUlFfT0ZGU0VUKQorCisjZW5kaWYgLyogQ09ORklHXzgyNjAgKi8KKworLyoKKyAqIFRoaXMgZ2V0cyBjYWxsZWQgZnJvbSBzZXJpYWwuYywgd2hpY2ggaXMgbm93IHVzZWQgb24KKyAqIHBvd2VybWFjcyBhcyB3ZWxsIGFzIHByZXAvY2hycCBib3hlcy4KKyAqIFByZXAgYW5kIGNocnAgYm90aCBoYXZlIGNhc2NhZGVkIDgyNTkgUElDcy4KKyAqLworc3RhdGljIF9faW5saW5lX18gaW50IGlycV9jYW5vbmljYWxpemUoaW50IGlycSkKK3sKKwlpZiAocHBjX21kLmlycV9jYW5vbmljYWxpemUpCisJCXJldHVybiBwcGNfbWQuaXJxX2Nhbm9uaWNhbGl6ZShpcnEpOworCXJldHVybiBpcnE7Cit9CisKKyNlbmRpZgorCisjZGVmaW5lIE5SX01BU0tfV09SRFMJKChOUl9JUlFTICsgMzEpIC8gMzIpCisvKiBwZWRhbnRpYzogdGhlc2UgYXJlIGxvbmcgYmVjYXVzZSB0aGV5IGFyZSB1c2VkIHdpdGggc2V0X2JpdCAtLVJSICovCitleHRlcm4gdW5zaWduZWQgbG9uZyBwcGNfY2FjaGVkX2lycV9tYXNrW05SX01BU0tfV09SRFNdOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcHBjX2xvc3RfaW50ZXJydXB0c1tOUl9NQVNLX1dPUkRTXTsKK2V4dGVybiBhdG9taWNfdCBwcGNfbl9sb3N0X2ludGVycnVwdHM7CisKK3N0cnVjdCBpcnFhY3Rpb247CitzdHJ1Y3QgcHRfcmVnczsKK2ludCBoYW5kbGVfSVJRX2V2ZW50KHVuc2lnbmVkIGludCwgc3RydWN0IHB0X3JlZ3MgKiwgc3RydWN0IGlycWFjdGlvbiAqKTsKKworI2VuZGlmIC8qIF9BU01fSVJRX0ggKi8KKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMva2V5bGFyZ28uaCBiL2luY2x1ZGUvYXNtLXBwYy9rZXlsYXJnby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1N2M3NWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGMva2V5bGFyZ28uaApAQCAtMCwwICsxLDI0MyBAQAorLyoKKyAqIGtleWxhcmdvLmg6IGRlZmluaXRpb25zIGZvciB1c2luZyB0aGUgIktleUxhcmdvIiBJL08gY29udHJvbGxlciBjaGlwLgorICoKKyAqLworCisvKiAiUGFuZ2VhIiBjaGlwc2V0IGhhcyBrZXlsYXJnbyBkZXZpY2UtaWQgMHgyNSB3aGlsZSBjb3JlOTkKKyAqIGhhcyBkZXZpY2UtaWQgMHgyMi4gVGhlIHJldi4gb2YgdGhlIHBhbmdlYSBvbmUgaXMgMCwgc28gd2UKKyAqIGZha2UgYW4gYXJ0aWZpY2lhbCByZXYuIGluIGtleWxhcmdvX3JldiBieSBvcmluZyAweDEwMAorICovCisjZGVmaW5lIEtMX1BBTkdFQV9SRVYJCTB4MTAwCisKKy8qIG9mZnNldCBmcm9tIGJhc2UgZm9yIGZlYXR1cmUgY29udHJvbCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgS0VZTEFSR09fTUJDUgkJMHgzNAkvKiBLTCBPbmx5LCBNZWRpYSBiYXkgY29udHJvbC9zdGF0dXMgKi8KKyNkZWZpbmUgS0VZTEFSR09fRkNSMAkJMHgzOAorI2RlZmluZSBLRVlMQVJHT19GQ1IxCQkweDNjCisjZGVmaW5lIEtFWUxBUkdPX0ZDUjIJCTB4NDAKKyNkZWZpbmUgS0VZTEFSR09fRkNSMwkJMHg0NAorI2RlZmluZSBLRVlMQVJHT19GQ1I0CQkweDQ4CisjZGVmaW5lIEtFWUxBUkdPX0ZDUjUJCTB4NGMJLyogUGFuZ2VhIG9ubHkgKi8KKworLyogSzIgYWRpdGlvbmFsIEZDUnMgKi8KKyNkZWZpbmUgSzJfRkNSNgkJCTB4MzQKKyNkZWZpbmUgSzJfRkNSNwkJCTB4MzAKKyNkZWZpbmUgSzJfRkNSOAkJCTB4MmMKKyNkZWZpbmUgSzJfRkNSOQkJCTB4MjgKKyNkZWZpbmUgSzJfRkNSMTAJCTB4MjQKKworLyogR1BJTyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgS0VZTEFSR09fR1BJT19MRVZFTFMwCQkweDUwCisjZGVmaW5lIEtFWUxBUkdPX0dQSU9fTEVWRUxTMQkJMHg1NAorI2RlZmluZSBLRVlMQVJHT19HUElPX0VYVElOVF8wCQkweDU4CisjZGVmaW5lIEtFWUxBUkdPX0dQSU9fRVhUSU5UX0NOVAkxOAorI2RlZmluZSBLRVlMQVJHT19HUElPXzAJCQkweDZBCisjZGVmaW5lIEtFWUxBUkdPX0dQSU9fQ05UCQkxNworI2RlZmluZSBLRVlMQVJHT19HUElPX0VYVElOVF9EVUFMX0VER0UJMHg4MAorI2RlZmluZSBLRVlMQVJHT19HUElPX09VVFBVVF9FTkFCTEUJMHgwNAorI2RlZmluZSBLRVlMQVJHT19HUElPX09VVE9VVF9EQVRBCTB4MDEKKyNkZWZpbmUgS0VZTEFSR09fR1BJT19JTlBVVF9EQVRBCTB4MDIKKworLyogSzIgZG9lcyBvbmx5IGV4dGludCBHUElPcyBhbmQgZG9lcyA1MSBvZiB0aGVtICovCisjZGVmaW5lIEsyX0dQSU9fRVhUSU5UXzAJCTB4NTgKKyNkZWZpbmUgSzJfR1BJT19FWFRJTlRfQ05UCQk1MQorCisvKiBTcGVjaWZpYyBHUElPIHJlZ3MgKi8KKworI2RlZmluZSBLTF9HUElPX01PREVNX1JFU0VUCQkoS0VZTEFSR09fR1BJT18wKzB4MDMpCisjZGVmaW5lIEtMX0dQSU9fTU9ERU1fUE9XRVIJCShLRVlMQVJHT19HUElPXzArMHgwMikgLyogUGFuZ2VhICovCisKKyNkZWZpbmUgS0xfR1BJT19TT1VORF9QT1dFUgkJKEtFWUxBUkdPX0dQSU9fMCsweDA1KQorCisvKiBIcm0uLi4gdGhpcyBvbmUgaXMgb25seSB0byBiZSB1c2VkIG9uIFBpc21vLiBJdCBzZWVlbSB0byBhbHNvCisgKiBjb250cm9sIHRoZSB0aW1lYmFzZSBlbmFibGUgb24gb3RoZXIgbWFjaGluZXMuIFN0aWxsIHRvIGJlCisgKiBleHBlcmltZW50ZWQuLi4gLS1CZW5ILgorICovCisjZGVmaW5lIEtMX0dQSU9fRldfQ0FCTEVfUE9XRVIJCShLRVlMQVJHT19HUElPXzArMHgwOSkKKyNkZWZpbmUgS0xfR1BJT19UQl9FTkFCTEUJCShLRVlMQVJHT19HUElPXzArMHgwOSkKKworI2RlZmluZSBLTF9HUElPX0VUSF9QSFlfUkVTRVQJCShLRVlMQVJHT19HUElPXzArMHgxMCkKKworI2RlZmluZSBLTF9HUElPX0VYVElOVF9DUFUxCQkoS0VZTEFSR09fR1BJT18wKzB4MGEpCisjZGVmaW5lIEtMX0dQSU9fRVhUSU5UX0NQVTFfQVNTRVJUCTB4MDQKKyNkZWZpbmUgS0xfR1BJT19FWFRJTlRfQ1BVMV9SRUxFQVNFCTB4MzgKKworI2RlZmluZSBLTF9HUElPX1JFU0VUX0NQVTAJCShLRVlMQVJHT19HUElPX0VYVElOVF8wKzB4MDMpCisjZGVmaW5lIEtMX0dQSU9fUkVTRVRfQ1BVMQkJKEtFWUxBUkdPX0dQSU9fRVhUSU5UXzArMHgwNCkKKyNkZWZpbmUgS0xfR1BJT19SRVNFVF9DUFUyCQkoS0VZTEFSR09fR1BJT19FWFRJTlRfMCsweDBmKQorI2RlZmluZSBLTF9HUElPX1JFU0VUX0NQVTMJCShLRVlMQVJHT19HUElPX0VYVElOVF8wKzB4MTApCisKKyNkZWZpbmUgS0xfR1BJT19QTVVfTUVTU0FHRV9JUlEJCShLRVlMQVJHT19HUElPX0VYVElOVF8wKzB4MDkpCisjZGVmaW5lIEtMX0dQSU9fUE1VX01FU1NBR0VfQklUCQlLRVlMQVJHT19HUElPX0lOUFVUX0RBVEEKKworI2RlZmluZSBLTF9HUElPX01FRElBQkFZX0lSUQkJKEtFWUxBUkdPX0dQSU9fRVhUSU5UXzArMHgwZSkKKworI2RlZmluZSBLTF9HUElPX0FJUlBPUlRfMAkJKEtFWUxBUkdPX0dQSU9fRVhUSU5UXzArMHgwYSkKKyNkZWZpbmUgS0xfR1BJT19BSVJQT1JUXzEJCShLRVlMQVJHT19HUElPX0VYVElOVF8wKzB4MGQpCisjZGVmaW5lIEtMX0dQSU9fQUlSUE9SVF8yCQkoS0VZTEFSR09fR1BJT18wKzB4MGQpCisjZGVmaW5lIEtMX0dQSU9fQUlSUE9SVF8zCQkoS0VZTEFSR09fR1BJT18wKzB4MGUpCisjZGVmaW5lIEtMX0dQSU9fQUlSUE9SVF80CQkoS0VZTEFSR09fR1BJT18wKzB4MGYpCisKKy8qCisgKiBCaXRzIGluIGZlYXR1cmUgY29udHJvbCByZWdpc3Rlci4gVGhvc2UgYml0cyBkaWZmZXJlbnQgZm9yIEsyIGFyZQorICogbGlzdGVkIHNlcGFyYXRlbHkKKyAqLworI2RlZmluZSBLTF9NQkNSX01CMF9QQ0lfRU5BQkxFCQkweDAwMDAwODAwCS8qIGV4aXN0ID8gKi8KKyNkZWZpbmUgS0xfTUJDUl9NQjBfSURFX0VOQUJMRQkJMHgwMDAwMTAwMAorI2RlZmluZSBLTF9NQkNSX01CMF9GTE9QUFlfRU5BQkxFCTB4MDAwMDIwMDAJLyogZXhpc3QgPyAqLworI2RlZmluZSBLTF9NQkNSX01CMF9TT1VORF9FTkFCTEUJMHgwMDAwNDAwMAkvKiBocm0uLi4gKi8KKyNkZWZpbmUgS0xfTUJDUl9NQjBfREVWX01BU0sJCTB4MDAwMDc4MDAKKyNkZWZpbmUgS0xfTUJDUl9NQjBfREVWX1BPV0VSCQkweDAwMDAwNDAwCisjZGVmaW5lIEtMX01CQ1JfTUIwX0RFVl9SRVNFVAkJMHgwMDAwMDIwMAorI2RlZmluZSBLTF9NQkNSX01CMF9FTkFCTEUJCTB4MDAwMDAxMDAKKyNkZWZpbmUgS0xfTUJDUl9NQjFfUENJX0VOQUJMRQkJMHgwODAwMDAwMAkvKiBleGlzdCA/ICovCisjZGVmaW5lIEtMX01CQ1JfTUIxX0lERV9FTkFCTEUJCTB4MTAwMDAwMDAKKyNkZWZpbmUgS0xfTUJDUl9NQjFfRkxPUFBZX0VOQUJMRQkweDIwMDAwMDAwCS8qIGV4aXN0ID8gKi8KKyNkZWZpbmUgS0xfTUJDUl9NQjFfU09VTkRfRU5BQkxFCTB4NDAwMDAwMDAJLyogaHJtLi4uICovCisjZGVmaW5lIEtMX01CQ1JfTUIxX0RFVl9NQVNLCQkweDc4MDAwMDAwCisjZGVmaW5lIEtMX01CQ1JfTUIxX0RFVl9QT1dFUgkJMHgwNDAwMDAwMAorI2RlZmluZSBLTF9NQkNSX01CMV9ERVZfUkVTRVQJCTB4MDIwMDAwMDAKKyNkZWZpbmUgS0xfTUJDUl9NQjFfRU5BQkxFCQkweDAxMDAwMDAwCisKKyNkZWZpbmUgS0wwX1NDQ19CX0lOVEZfRU5BQkxFCQkweDAwMDAwMDAxCS8qIChLTCBPbmx5KSAqLworI2RlZmluZSBLTDBfU0NDX0FfSU5URl9FTkFCTEUJCTB4MDAwMDAwMDIKKyNkZWZpbmUgS0wwX1NDQ19TTE9XUENMSwkJMHgwMDAwMDAwNAorI2RlZmluZSBLTDBfU0NDX1JFU0VUCQkJMHgwMDAwMDAwOAorI2RlZmluZSBLTDBfU0NDQV9FTkFCTEUJCQkweDAwMDAwMDEwCisjZGVmaW5lIEtMMF9TQ0NCX0VOQUJMRQkJCTB4MDAwMDAwMjAKKyNkZWZpbmUgS0wwX1NDQ19DRUxMX0VOQUJMRQkJMHgwMDAwMDA0MAorI2RlZmluZSBLTDBfSVJEQV9ISUdIX0JBTkQJCTB4MDAwMDAxMDAJLyogKEtMIE9ubHkpICovCisjZGVmaW5lIEtMMF9JUkRBX1NPVVJDRTJfU0VMCQkweDAwMDAwMjAwCS8qIChLTCBPbmx5KSAqLworI2RlZmluZSBLTDBfSVJEQV9TT1VSQ0UxX1NFTAkJMHgwMDAwMDQwMAkvKiAoS0wgT25seSkgKi8KKyNkZWZpbmUgS0wwX1BHX1VTQjBfUE1JX0VOQUJMRQkJMHgwMDAwMDQwMAkvKiAoUGFuZ2VhL0ludHJlcGlkIE9ubHkpICovCisjZGVmaW5lIEtMMF9JUkRBX1JFU0VUCQkJMHgwMDAwMDgwMAkvKiAoS0wgT25seSkgKi8KKyNkZWZpbmUgS0wwX1BHX1VTQjBfUkVGX1NVU1BFTkRfU0VMCTB4MDAwMDA4MDAJLyogKFBhbmdlYS9JbnRyZXBpZCBPbmx5KSAqLworI2RlZmluZSBLTDBfSVJEQV9ERUZBVUxUMQkJMHgwMDAwMTAwMAkvKiAoS0wgT25seSkgKi8KKyNkZWZpbmUgS0wwX1BHX1VTQjBfUkVGX1NVU1BFTkQJCTB4MDAwMDEwMDAJLyogKFBhbmdlYS9JbnRyZXBpZCBPbmx5KSAqLworI2RlZmluZSBLTDBfSVJEQV9ERUZBVUxUMAkJMHgwMDAwMjAwMAkvKiAoS0wgT25seSkgKi8KKyNkZWZpbmUgS0wwX1BHX1VTQjBfUEFEX1NVU1BFTkQJCTB4MDAwMDIwMDAJLyogKFBhbmdlYS9JbnRyZXBpZCBPbmx5KSAqLworI2RlZmluZSBLTDBfSVJEQV9GQVNUX0NPTk5FQ1QJCTB4MDAwMDQwMDAJLyogKEtMIE9ubHkpICovCisjZGVmaW5lIEtMMF9QR19VU0IxX1BNSV9FTkFCTEUJCTB4MDAwMDQwMDAJLyogKFBhbmdlYS9JbnRyZXBpZCBPbmx5KSAqLworI2RlZmluZSBLTDBfSVJEQV9FTkFCTEUJCQkweDAwMDA4MDAwCS8qIChLTCBPbmx5KSAqLworI2RlZmluZSBLTDBfUEdfVVNCMV9SRUZfU1VTUEVORF9TRUwJMHgwMDAwODAwMAkvKiAoUGFuZ2VhL0ludHJlcGlkIE9ubHkpICovCisjZGVmaW5lIEtMMF9JUkRBX0NMSzMyX0VOQUJMRQkJMHgwMDAxMDAwMAkvKiAoS0wgT25seSkgKi8KKyNkZWZpbmUgS0wwX1BHX1VTQjFfUkVGX1NVU1BFTkQJCTB4MDAwMTAwMDAJLyogKFBhbmdlYS9JbnRyZXBpZCBPbmx5KSAqLworI2RlZmluZSBLTDBfSVJEQV9DTEsxOV9FTkFCTEUJCTB4MDAwMjAwMDAJLyogKEtMIE9ubHkpICovCisjZGVmaW5lIEtMMF9QR19VU0IxX1BBRF9TVVNQRU5ECQkweDAwMDIwMDAwCS8qIChQYW5nZWEvSW50cmVwaWQgT25seSkgKi8KKyNkZWZpbmUgS0wwX1VTQjBfUEFEX1NVU1BFTkQwCQkweDAwMDQwMDAwCisjZGVmaW5lIEtMMF9VU0IwX1BBRF9TVVNQRU5EMQkJMHgwMDA4MDAwMAorI2RlZmluZSBLTDBfVVNCMF9DRUxMX0VOQUJMRQkJMHgwMDEwMDAwMAorI2RlZmluZSBLTDBfVVNCMV9QQURfU1VTUEVORDAJCTB4MDA0MDAwMDAKKyNkZWZpbmUgS0wwX1VTQjFfUEFEX1NVU1BFTkQxCQkweDAwODAwMDAwCisjZGVmaW5lIEtMMF9VU0IxX0NFTExfRU5BQkxFCQkweDAxMDAwMDAwCisjZGVmaW5lIEtMMF9VU0JfUkVGX1NVU1BFTkQJCTB4MTAwMDAwMDAJLyogKEtMIE9ubHkpICovCisKKyNkZWZpbmUgS0wwX1NFUklBTF9FTkFCTEUJCShLTDBfU0NDX0JfSU5URl9FTkFCTEUgfCBcCisJCQkJCUtMMF9TQ0NfU0xPV1BDTEsgfCBcCisJCQkJCUtMMF9TQ0NfQ0VMTF9FTkFCTEUgfCBLTDBfU0NDQV9FTkFCTEUpCisKKyNkZWZpbmUgS0wxX1VTQjJfUE1JX0VOQUJMRQkJMHgwMDAwMDAwMQkvKiBJbnRyZXBpZCBvbmx5ICovCisjZGVmaW5lIEtMMV9BVURJT19TRUxfMjJNQ0xLCQkweDAwMDAwMDAyCS8qIEtML1BhbmdlYSBvbmx5ICovCisjZGVmaW5lIEtMMV9VU0IyX1JFRl9TVVNQRU5EX1NFTAkweDAwMDAwMDAyCS8qIEludHJlcGlkIG9ubHkgKi8KKyNkZWZpbmUgS0wxX1VTQjJfUkVGX1NVU1BFTkQJCTB4MDAwMDAwMDQJLyogSW50cmVwaWQgb25seSAqLworI2RlZmluZSBLTDFfQVVESU9fQ0xLX0VOQUJMRV9CSVQJMHgwMDAwMDAwOAkvKiBLTC9QYW5nZWEgb25seSAqLworI2RlZmluZSBLTDFfVVNCMl9QQURfU1VTUEVORF9TRUwJMHgwMDAwMDAwOAkvKiBJbnRyZXBpZCBvbmx5ICovCisjZGVmaW5lIEtMMV9VU0IyX1BBRF9TVVNQRU5EMAkJMHgwMDAwMDAxMAkvKiBJbnRyZXBpZCBvbmx5ICovCisjZGVmaW5lIEtMMV9BVURJT19DTEtfT1VUX0VOQUJMRQkweDAwMDAwMDIwCS8qIEtML1BhbmdlYSBvbmx5ICovCisjZGVmaW5lIEtMMV9VU0IyX1BBRF9TVVNQRU5EMQkJMHgwMDAwMDAyMAkvKiBJbnRyZXBpZCBvbmx5ICovCisjZGVmaW5lIEtMMV9BVURJT19DRUxMX0VOQUJMRQkJMHgwMDAwMDA0MAkvKiBLTC9QYW5nZWEgb25seSAqLworI2RlZmluZSBLTDFfVVNCMl9DRUxMX0VOQUJMRQkJMHgwMDAwMDA0MAkvKiBJbnRyZXBpZCBvbmx5ICovCisjZGVmaW5lIEtMMV9BVURJT19DSE9PU0UJCTB4MDAwMDAwODAJLyogS0wvUGFuZ2VhIG9ubHkgKi8KKyNkZWZpbmUgS0wxX0kyUzBfQ0hPT1NFCQkJMHgwMDAwMDIwMAkvKiBLTCBPbmx5ICovCisjZGVmaW5lIEtMMV9JMlMwX0NFTExfRU5BQkxFCQkweDAwMDAwNDAwCisjZGVmaW5lIEtMMV9JMlMwX0NMS19FTkFCTEVfQklUCQkweDAwMDAxMDAwCisjZGVmaW5lIEtMMV9JMlMwX0VOQUJMRQkJCTB4MDAwMDIwMDAKKyNkZWZpbmUgS0wxX0kyUzFfQ0VMTF9FTkFCTEUJCTB4MDAwMjAwMDAKKyNkZWZpbmUgS0wxX0kyUzFfQ0xLX0VOQUJMRV9CSVQJCTB4MDAwODAwMDAKKyNkZWZpbmUgS0wxX0kyUzFfRU5BQkxFCQkJMHgwMDEwMDAwMAorI2RlZmluZSBLTDFfRUlERTBfRU5BQkxFCQkweDAwODAwMDAwCS8qIEtML0ludHJlcGlkIE9ubHkgKi8KKyNkZWZpbmUgS0wxX0VJREUwX1JFU0VUX04JCTB4MDEwMDAwMDAJLyogS0wvSW50cmVwaWQgT25seSAqLworI2RlZmluZSBLTDFfRUlERTFfRU5BQkxFCQkweDA0MDAwMDAwCS8qIEtMIE9ubHkgKi8KKyNkZWZpbmUgS0wxX0VJREUxX1JFU0VUX04JCTB4MDgwMDAwMDAJLyogS0wgT25seSAqLworI2RlZmluZSBLTDFfVUlERV9FTkFCTEUJCQkweDIwMDAwMDAwCS8qIEtML1BhbmdlYSBPbmx5ICovCisjZGVmaW5lIEtMMV9VSURFX1JFU0VUX04JCTB4NDAwMDAwMDAJLyogS0wvUGFuZ2VhIE9ubHkgKi8KKworI2RlZmluZSBLTDJfSU9CVVNfRU5BQkxFCQkweDAwMDAwMDAyCisjZGVmaW5lIEtMMl9TTEVFUF9TVEFURV9CSVQJCTB4MDAwMDAxMDAJLyogS0wgT25seSAqLworI2RlZmluZSBLTDJfUEdfU1RPUF9BTExfQ0xPQ0tTCQkweDAwMDAwMTAwCS8qIFBhbmdlYSBPbmx5ICovCisjZGVmaW5lIEtMMl9NUElDX0VOQUJMRQkJCTB4MDAwMjAwMDAKKyNkZWZpbmUgS0wyX0NBUkRTTE9UX1JFU0VUCQkweDAwMDQwMDAwCS8qIFBhbmdlYS9JbnRyZXBpZCBPbmx5ICovCisjZGVmaW5lIEtMMl9BTFRfREFUQV9PVVQJCTB4MDIwMDAwMDAJLyogS0wgT25seSA/Pz8gKi8KKyNkZWZpbmUgS0wyX01FTV9JU19CSUcJCQkweDA0MDAwMDAwCisjZGVmaW5lIEtMMl9DQVJEU0VMXzE2CQkJMHgwODAwMDAwMAorCisjZGVmaW5lIEtMM19TSFVURE9XTl9QTExfVE9UQUwJCTB4MDAwMDAwMDEJLyogS0wvUGFuZ2VhIG9ubHkgKi8KKyNkZWZpbmUgS0wzX1NIVVRET1dOX1BMTEtXNgkJMHgwMDAwMDAwMgkvKiBLTC9QYW5nZWEgb25seSAqLworI2RlZmluZSBLTDNfSVRfU0hVVERPV05fUExMMwkJMHgwMDAwMDAwMgkvKiBJbnRyZXBpZCBvbmx5ICovCisjZGVmaW5lIEtMM19TSFVURE9XTl9QTExLVzQJCTB4MDAwMDAwMDQJLyogS0wvUGFuZ2VhIG9ubHkgKi8KKyNkZWZpbmUgS0wzX0lUX1NIVVRET1dOX1BMTDIJCTB4MDAwMDAwMDQJLyogSW50cmVwaWQgb25seSAqLworI2RlZmluZSBLTDNfU0hVVERPV05fUExMS1czNQkJMHgwMDAwMDAwOAkvKiBLTC9QYW5nZWEgb25seSAqLworI2RlZmluZSBLTDNfSVRfU0hVVERPV05fUExMMQkJMHgwMDAwMDAwOAkvKiBJbnRyZXBpZCBvbmx5ICovCisjZGVmaW5lIEtMM19TSFVURE9XTl9QTExLVzEyCQkweDAwMDAwMDEwCS8qIEtMIE9ubHkgKi8KKyNkZWZpbmUgS0wzX0lUX0VOQUJMRV9QTEwzX1NIVVRET1dOCTB4MDAwMDAwMTAJLyogSW50cmVwaWQgb25seSAqLworI2RlZmluZSBLTDNfUExMX1JFU0VUCQkJMHgwMDAwMDAyMAkvKiBLTC9QYW5nZWEgb25seSAqLworI2RlZmluZSBLTDNfSVRfRU5BQkxFX1BMTDJfU0hVVERPV04JMHgwMDAwMDAyMAkvKiBJbnRyZXBpZCBvbmx5ICovCisjZGVmaW5lIEtMM19JVF9FTkFCTEVfUExMMV9TSFVURE9XTgkweDAwMDAwMDEwCS8qIEludHJlcGlkIG9ubHkgKi8KKyNkZWZpbmUgS0wzX1NIVVRET1dOX1BMTDJYCQkweDAwMDAwMDgwCS8qIEtMIE9ubHkgKi8KKyNkZWZpbmUgS0wzX0NMSzY2X0VOQUJMRQkJMHgwMDAwMDEwMAkvKiBLTCBPbmx5ICovCisjZGVmaW5lIEtMM19DTEs0OV9FTkFCTEUJCTB4MDAwMDAyMDAKKyNkZWZpbmUgS0wzX0NMSzQ1X0VOQUJMRQkJMHgwMDAwMDQwMAorI2RlZmluZSBLTDNfQ0xLMzFfRU5BQkxFCQkweDAwMDAwODAwCS8qIEtML1BhbmdlYSBvbmx5ICovCisjZGVmaW5lIEtMM19USU1FUl9DTEsxOF9FTkFCTEUJCTB4MDAwMDEwMDAKKyNkZWZpbmUgS0wzX0kyUzFfQ0xLMThfRU5BQkxFCQkweDAwMDAyMDAwCisjZGVmaW5lIEtMM19JMlMwX0NMSzE4X0VOQUJMRQkJMHgwMDAwNDAwMAorI2RlZmluZSBLTDNfVklBX0NMSzE2X0VOQUJMRQkJMHgwMDAwODAwMAkvKiBLTC9QYW5nZWEgb25seSAqLworI2RlZmluZSBLTDNfSVRfVklBX0NMSzMyX0VOQUJMRQkJMHgwMDAwODAwMAkvKiBJbnRyZXBpZCBvbmx5ICovCisjZGVmaW5lIEtMM19TVE9QUElORzMzX0VOQUJMRUQJCTB4MDAwODAwMDAJLyogS0wgT25seSAqLworI2RlZmluZSBLTDNfUEdfUExMX0VOQUJMRV9URVNUCQkweDAwMDgwMDAwCS8qIFBhbmdlYSBPbmx5ICovCisKKy8qIEludHJlcGlkIFVTQiBidXMgMiwgcG9ydCAwLDEgKi8KKyNkZWZpbmUgS0wzX0lUX1BPUlRfV0FLRVVQX0VOQUJMRShwKQkJKDB4MDAwODAwMDAgPDwgKChwKTw8MykpCisjZGVmaW5lIEtMM19JVF9QT1JUX1JFU1VNRV9XQUtFX0VOKHApCQkoMHgwMDA0MDAwMCA8PCAoKHApPDwzKSkKKyNkZWZpbmUgS0wzX0lUX1BPUlRfQ09OTkVDVF9XQUtFX0VOKHApCQkoMHgwMDAyMDAwMCA8PCAoKHApPDwzKSkKKyNkZWZpbmUgS0wzX0lUX1BPUlRfRElTQ09OTkVDVF9XQUtFX0VOKHApCSgweDAwMDEwMDAwIDw8ICgocCk8PDMpKQorI2RlZmluZSBLTDNfSVRfUE9SVF9SRVNVTUVfU1RBVChwKQkJKDB4MDAzMDAwMDAgPDwgKChwKTw8MykpCisjZGVmaW5lIEtMM19JVF9QT1JUX0NPTk5FQ1RfU1RBVChwKQkJKDB4MDAyMDAwMDAgPDwgKChwKTw8MykpCisjZGVmaW5lIEtMM19JVF9QT1JUX0RJU0NPTk5FQ1RfU1RBVChwKQkJKDB4MDAxMDAwMDAgPDwgKChwKTw8MykpCisKKy8qIFBvcnQgMCwxIDogYnVzIDAsIHBvcnQgMiwzIDogYnVzIDEgKi8KKyNkZWZpbmUgS0w0X1BPUlRfV0FLRVVQX0VOQUJMRShwKQkoMHgwMDAwMDAwOCA8PCAoKHApPDwzKSkKKyNkZWZpbmUgS0w0X1BPUlRfUkVTVU1FX1dBS0VfRU4ocCkJKDB4MDAwMDAwMDQgPDwgKChwKTw8MykpCisjZGVmaW5lIEtMNF9QT1JUX0NPTk5FQ1RfV0FLRV9FTihwKQkoMHgwMDAwMDAwMiA8PCAoKHApPDwzKSkKKyNkZWZpbmUgS0w0X1BPUlRfRElTQ09OTkVDVF9XQUtFX0VOKHApCSgweDAwMDAwMDAxIDw8ICgocCk8PDMpKQorI2RlZmluZSBLTDRfUE9SVF9SRVNVTUVfU1RBVChwKQkJKDB4MDAwMDAwNDAgPDwgKChwKTw8MykpCisjZGVmaW5lIEtMNF9QT1JUX0NPTk5FQ1RfU1RBVChwKQkoMHgwMDAwMDAyMCA8PCAoKHApPDwzKSkKKyNkZWZpbmUgS0w0X1BPUlRfRElTQ09OTkVDVF9TVEFUKHApCSgweDAwMDAwMDEwIDw8ICgocCk8PDMpKQorCisvKiBQYW5nZWEgYW5kIEludHJlcGlkIG9ubHkgKi8KKyNkZWZpbmUgS0w1X1ZJQV9VU0VfQ0xLMzEJCTAwMDAwMDAwMDEJLyogUGFuZ2VhIE9ubHkgKi8KKyNkZWZpbmUgS0w1X1NDQ19VU0VfQ0xLMzEJCTB4MDAwMDAwMDIJLyogUGFuZ2VhIE9ubHkgKi8KKyNkZWZpbmUgS0w1X1BXTV9DTEszMl9FTgkJMHgwMDAwMDAwNAorI2RlZmluZSBLTDVfQ0xLM182OF9FTgkJCTB4MDAwMDAwMTAKKyNkZWZpbmUgS0w1X0NMSzMyX0VOCQkJMHgwMDAwMDAyMAorCisKKy8qIEsyIGRlZmluaXRpb25zICovCisjZGVmaW5lIEsyX0ZDUjBfVVNCMF9TV1JFU0VUCQkweDAwMjAwMDAwCisjZGVmaW5lIEsyX0ZDUjBfVVNCMV9TV1JFU0VUCQkweDAyMDAwMDAwCisjZGVmaW5lIEsyX0ZDUjBfUklOR19QTUVfRElTQUJMRQkweDA4MDAwMDAwCisKKyNkZWZpbmUgSzJfRkNSMV9QQ0kxX0JVU19SRVNFVF9OCTB4MDAwMDAwMTAKKyNkZWZpbmUgSzJfRkNSMV9QQ0kxX1NMRUVQX1JFU0VUX0VOCTB4MDAwMDAwMjAKKyNkZWZpbmUgSzJfRkNSMV9QQ0kxX0NMS19FTkFCTEUJCTB4MDAwMDQwMDAKKyNkZWZpbmUgSzJfRkNSMV9GV19DTEtfRU5BQkxFCQkweDAwMDA4MDAwCisjZGVmaW5lIEsyX0ZDUjFfRldfUkVTRVRfTgkJMHgwMDAxMDAwMAorI2RlZmluZSBLMl9GQ1IxX0dNQUNfQ0xLX0VOQUJMRQkJMHgwMDQwMDAwMAorI2RlZmluZSBLMl9GQ1IxX0dNQUNfUE9XRVJfRE9XTgkJMHgwMDgwMDAwMAorI2RlZmluZSBLMl9GQ1IxX0dNQUNfUkVTRVRfTgkJMHgwMTAwMDAwMAorI2RlZmluZSBLMl9GQ1IxX1NBVEFfQ0xLX0VOQUJMRQkJMHgwMjAwMDAwMAorI2RlZmluZSBLMl9GQ1IxX1NBVEFfUE9XRVJfRE9XTgkJMHgwNDAwMDAwMAorI2RlZmluZSBLMl9GQ1IxX1NBVEFfUkVTRVRfTgkJMHgwODAwMDAwMAorI2RlZmluZSBLMl9GQ1IxX1VBVEFfQ0xLX0VOQUJMRQkJMHgxMDAwMDAwMAorI2RlZmluZSBLMl9GQ1IxX1VBVEFfUkVTRVRfTgkJMHg0MDAwMDAwMAorI2RlZmluZSBLMl9GQ1IxX1VBVEFfQ0hPT1NFX0NMSzY2CTB4ODAwMDAwMDAKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL2tnZGIuaCBiL2luY2x1ZGUvYXNtLXBwYy9rZ2RiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQzYzkyNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9rZ2RiLmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIGtnZGIuaDogRGVmaW5lcyBhbmQgZGVjbGFyYXRpb25zIGZvciBzZXJpYWwgbGluZSBzb3VyY2UgbGV2ZWwKKyAqICAgICAgICAgcmVtb3RlIGRlYnVnZ2luZyBvZiB0aGUgTGludXgga2VybmVsIHVzaW5nIGdkYi4KKyAqCisgKiBQUEMgTW9kcyAoQykgMTk5OCBNaWNoYWVsIFRlc2NoICh0ZXNjaEBjcy53aXNjLmVkdSkKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQorICovCisjaWZkZWYgX19LRVJORUxfXworI2lmbmRlZiBfUFBDX0tHREJfSAorI2RlZmluZSBfUFBDX0tHREJfSAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisvKiBUaGluZ3Mgc3BlY2lmaWMgdG8gdGhlIGdlbjU1MCBiYWNrZW5kLiAqLworc3RydWN0IHVhcnRfcG9ydDsKKworZXh0ZXJuIHZvaWQgZ2VuNTUwX3Byb2dyZXNzKGNoYXIgKiwgdW5zaWduZWQgc2hvcnQpOworZXh0ZXJuIHZvaWQgZ2VuNTUwX2tnZGJfbWFwX3NjYyh2b2lkKTsKK2V4dGVybiB2b2lkIGdlbjU1MF9pbml0KGludCwgc3RydWN0IHVhcnRfcG9ydCAqKTsKKworLyogVGhpbmdzIHNwZWNpZmljIHRvIHRoZSBwbWFjIGJhY2tlbmQuICovCitleHRlcm4gdm9pZCB6c19rZ2RiX2hvb2soaW50IHR0eV9udW0pOworCisvKiBUbyBpbml0IHRoZSBrZ2RiIGVuZ2luZS4gKGNhbGxlZCBieSBzZXJpYWwgaG9vaykqLworZXh0ZXJuIHZvaWQgc2V0X2RlYnVnX3RyYXBzKHZvaWQpOworCisvKiBUbyBlbnRlciB0aGUgZGVidWdnZXIgZXhwbGljaXRseS4gKi8KK2V4dGVybiB2b2lkIGJyZWFrcG9pbnQodm9pZCk7CisKKy8qIEZvciB0YWtpbmcgZXhjZXB0aW9ucworICogdGhlc2UgYXJlIGRlZmluZWQgaW4gdHJhcHMuYworICovCitleHRlcm4gdm9pZCAoKmRlYnVnZ2VyKShzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitleHRlcm4gaW50ICgqZGVidWdnZXJfYnB0KShzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitleHRlcm4gaW50ICgqZGVidWdnZXJfc3N0ZXApKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2V4dGVybiBpbnQgKCpkZWJ1Z2dlcl9pYWJyX21hdGNoKShzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitleHRlcm4gaW50ICgqZGVidWdnZXJfZGFicl9tYXRjaCkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworZXh0ZXJuIHZvaWQgKCpkZWJ1Z2dlcl9mYXVsdF9oYW5kbGVyKShzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKKy8qIFdoYXQgd2UgYnJpbmcgdG8gdGhlIHBhcnR5ICovCitpbnQga2dkYl9icHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworaW50IGtnZGJfc3N0ZXAoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwordm9pZCBrZ2RiKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2ludCBrZ2RiX2lhYnJfbWF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworaW50IGtnZGJfZGFicl9tYXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKKy8qCisgKiBleHRlcm5hbCBsb3ctbGV2ZWwgc3VwcG9ydCByb3V0aW5lcyAoaWUgbWFjc2VyaWFsLmMpCisgKi8KK2V4dGVybiB2b2lkIGtnZGJfaW50ZXJydXB0aWJsZShpbnQpOyAvKiBjb250cm9sIGludGVycnVwdHMgZnJvbSBzZXJpYWwgKi8KK2V4dGVybiB2b2lkIHB1dERlYnVnQ2hhcihjaGFyKTsgICAvKiB3cml0ZSBhIHNpbmdsZSBjaGFyYWN0ZXIgICAgICAqLworZXh0ZXJuIGNoYXIgZ2V0RGVidWdDaGFyKHZvaWQpOyAgIC8qIHJlYWQgYW5kIHJldHVybiBhIHNpbmdsZSBjaGFyICovCisKKyNlbmRpZiAvKiAhKF9fQVNTRU1CTFlfXykgKi8KKyNlbmRpZiAvKiAhKF9QUENfS0dEQl9IKSAqLworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9rbWFwX3R5cGVzLmggYi9pbmNsdWRlL2FzbS1wcGMva21hcF90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1ODlmMTgyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjL2ttYXBfdHlwZXMuaApAQCAtMCwwICsxLDI0IEBACisjaWZkZWYgX19LRVJORUxfXworI2lmbmRlZiBfQVNNX0tNQVBfVFlQRVNfSAorI2RlZmluZSBfQVNNX0tNQVBfVFlQRVNfSAorCitlbnVtIGttX3R5cGUgeworCUtNX0JPVU5DRV9SRUFELAorCUtNX1NLQl9TVU5SUENfREFUQSwKKwlLTV9TS0JfREFUQV9TT0ZUSVJRLAorCUtNX1VTRVIwLAorCUtNX1VTRVIxLAorCUtNX0JJT19TUkNfSVJRLAorCUtNX0JJT19EU1RfSVJRLAorCUtNX1BURTAsCisJS01fUFRFMSwKKwlLTV9JUlEwLAorCUtNX0lSUTEsCisJS01fU09GVElSUTAsCisJS01fU09GVElSUTEsCisJS01fUFBDX1NZTkNfUEFHRSwKKwlLTV9UWVBFX05SCit9OworCisjZW5kaWYKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvbGlua2FnZS5oIGIvaW5jbHVkZS9hc20tcHBjL2xpbmthZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTFjMmQwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjL2xpbmthZ2UuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19BU01fTElOS0FHRV9ICisjZGVmaW5lIF9fQVNNX0xJTktBR0VfSAorCisvKiBOb3RoaW5nIHRvIHNlZSBoZXJlLi4uICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL2xvY2FsLmggYi9pbmNsdWRlL2FzbS1wcGMvbG9jYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDhlM2VjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjL2xvY2FsLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fUFBDX0xPQ0FMX0gKKyNkZWZpbmUgX19QUENfTE9DQUxfSAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbG9jYWwuaD4KKworI2VuZGlmIC8qIF9fUFBDX0xPQ0FMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9tNDh0MzUuaCBiL2luY2x1ZGUvYXNtLXBwYy9tNDh0MzUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2M1ZTVkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjL200OHQzNS5oCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiAgUmVnaXN0ZXJzIGZvciB0aGUgU0dTLVRob21zb24gTTQ4VDM1IFRpbWVrZWVwZXIgUkFNIGNoaXAKKyAqICBhbmQKKyAqICBSZWdpc3RlcnMgZm9yIHRoZSBTR1MtVGhvbXNvbiBNNDhUMzcgVGltZWtlZXBlciBSQU0gY2hpcAorICogIFRoZSAzNyBpcyB0aGUgMzUgcGx1cyBhbGFybSBhbmQgY2VudHVyeSB0aHVzIHRoZSBvZmZzZXRzCisgKiAgYXJlIHNoaWZ0ZWQgYnkgdGhlIGV4dHJhIHJlZ2lzdGVycy4KKyAqLworCisjaWZuZGVmIF9fUFBDX000OFQzNV9ICisjZGVmaW5lIF9fUFBDX000OFQzNV9ICisKKy8qIFJUQyBvZmZzZXRzICovCisjZGVmaW5lIE00OFQzNV9SVENfRkxBR1MJKC04KQkvKiB0aGUgbmVnYXRpdmUgcmVncyBhcmUgcmVhbGx5IFQzNyBvbmx5ICovCisjZGVmaW5lIE00OFQzNV9SVENfQ0VOVFVSWQkoLTcpCisjZGVmaW5lIE00OFQzNV9SVENfQUxfU0VDCSgtNikKKyNkZWZpbmUgTTQ4VDM1X1JUQ19BTF9NSU4JKC01KQorI2RlZmluZSBNNDhUMzVfUlRDX0FMX0hSUwkoLTQpCisjZGVmaW5lIE00OFQzNV9SVENfQUxfRE9NCSgtMykKKyNkZWZpbmUgTTQ4VDM1X1JUQ19JTlRFUlJVUFQJKC0yKQorI2RlZmluZSBNNDhUMzVfUlRDX1dBVENIRE9HCSgtMSkKKyNkZWZpbmUgTTQ4VDM1X1JUQ19DT05UUk9MCTAJLyogVDM1IHN0YXJ0cyBoZXJlICovCisjZGVmaW5lIE00OFQzNV9SVENfU0VDT05EUwkxCisjZGVmaW5lIE00OFQzNV9SVENfTUlOVVRFUwkyCisjZGVmaW5lIE00OFQzNV9SVENfSE9VUlMJMworI2RlZmluZSBNNDhUMzVfUlRDX0RBWQkJNAorI2RlZmluZSBNNDhUMzVfUlRDX0RPTQkJNQorI2RlZmluZSBNNDhUMzVfUlRDX01PTlRICTYKKyNkZWZpbmUgTTQ4VDM1X1JUQ19ZRUFSCQk3CisKKy8qIHRoaXMgd2F5IGhlbHAgdXMga25vdyB3aGljaCBiaXRzIGdvIHdpdGggd2hpY2ggcmVncyAqLworI2RlZmluZSBNNDhUMzVfUlRDX0ZMQUdTX0JMICAgICAgICAgICAweDEwCisjZGVmaW5lIE00OFQzNV9SVENfRkxBR1NfQUYgICAgICAgICAgIDB4NDAKKyNkZWZpbmUgTTQ4VDM1X1JUQ19GTEFHU19XREYgICAgICAgICAgMHg4MAorCisjZGVmaW5lIE00OFQzNV9SVENfSU5URVJSVVBUX0FGRSAgICAgICAweDgwCisjZGVmaW5lIE00OFQzNV9SVENfSU5URVJSVVBUX0FCRSAgICAgICAweDIwCisjZGVmaW5lIE00OFQzNV9SVENfSU5URVJSVVBUX0FMTCAgICAgICAoTTQ4VDM1X1JUQ19JTlRFUlJVUFRfQUZFfE00OFQzNV9SVENfSU5URVJSVVBUX0FCRSkKKworI2RlZmluZSBNNDhUMzVfUlRDX1dBVENIRE9HX1JCICAgICAgICAgMHgwMworI2RlZmluZSBNNDhUMzVfUlRDX1dBVENIRE9HX0JNQiAgICAgICAgMHg3YworI2RlZmluZSBNNDhUMzVfUlRDX1dBVENIRE9HX1dEUyAgICAgICAgMHg4MAorI2RlZmluZSBNNDhUMzVfUlRDX1dBVENIRE9HX0FMTCAgICAgICAgKE00OFQzNV9SVENfV0FUQ0hET0dfUkJ8TTQ4VDM1X1JUQ19XQVRDSERPR19CTUJ8TTQ4VDM1X1JUQ19XCisKKyNkZWZpbmUgTTQ4VDM1X1JUQ19DT05UUk9MX1dSSVRFICAgICAgIDB4ODAKKyNkZWZpbmUgTTQ4VDM1X1JUQ19DT05UUk9MX1JFQUQgICAgICAgIDB4NDAKKyNkZWZpbmUgTTQ4VDM1X1JUQ19DT05UUk9MX0NBTF9TSUdOICAgIDB4MjAKKyNkZWZpbmUgTTQ4VDM1X1JUQ19DT05UUk9MX0NBTF9WQUxVRSAgIDB4MWYKKyNkZWZpbmUgTTQ4VDM1X1JUQ19DT05UUk9MX0xPQ0tFRCAgICAgIChNNDhUMzVfUlRDX1dSSVRFfE00OFQzNV9SVENfUkVBRCkKKyNkZWZpbmUgTTQ4VDM1X1JUQ19DT05UUk9MX0NBTElCUkFUSU9OIChNNDhUMzVfUlRDX0NPTlRST0xfQ0FMX1NJR058TTQ4VDM1X1JUQ19DT05UUk9MX0NBTF9WQUxVRSkKKworI2RlZmluZSBNNDhUMzVfUlRDX1NFQ09ORFNfU0VDXzEgICAgICAgMHgwZgorI2RlZmluZSBNNDhUMzVfUlRDX1NFQ09ORFNfU0VDXzEwICAgICAgMHg3MAorI2RlZmluZSBNNDhUMzVfUlRDX1NFQ09ORFNfU1QgICAgICAgICAgMHg4MAorI2RlZmluZSBNNDhUMzVfUlRDX1NFQ09ORFNfU0VDX0FMTCAgICAgKE00OFQzNV9SVENfU0VDT05EU19TRUNfMXxNNDhUMzVfUlRDX1NFQ09ORFNfU0VDXzEwKQorCisjZGVmaW5lIE00OFQzNV9SVENfTUlOVVRFU19NSU5fMSAgICAgICAweDBmCisjZGVmaW5lIE00OFQzNV9SVENfTUlOVVRFU19NSU5fMTAgICAgICAweDcwCisjZGVmaW5lIE00OFQzNV9SVENfTUlOVVRFU19NSU5fQUxMICAgICAoTTQ4VDM1X1JUQ19NSU5VVEVTX01JTl8xfE00OFQzNV9SVENfTUlOVVRFU19NSU5fMTApCisKKyNkZWZpbmUgTTQ4VDM1X1JUQ19IT1VSU19IUlNfMSAgICAgICAgIDB4MGYKKyNkZWZpbmUgTTQ4VDM1X1JUQ19IT1VSU19IUlNfMTAgICAgICAgIDB4MzAKKyNkZWZpbmUgTTQ4VDM1X1JUQ19IT1VSU19IUlNfQUxMICAgICAgIChNNDhUMzVfUlRDX0hPVVJTX0hSU18xfE00OFQzNV9SVENfSE9VUlNfSFJTXzEwKQorCisjZGVmaW5lIE00OFQzNV9SVENfREFZX0RBWV8xICAgICAgICAgICAweDAzCisjZGVmaW5lIE00OFQzNV9SVENfREFZX0ZUICAgICAgICAgICAgICAweDQwCisKKyNkZWZpbmUgTTQ4VDM1X1JUQ19BTEFSTV9PRkYgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgTTQ4VDM1X1JUQ19XQVRDSERPR19PRkYgICAgICAgIDB4MDAKKworCisvKiBsZWdhY3kgKi8KKyNkZWZpbmUgTTQ4VDM1X1JUQ19TRVQgICAgICAweDgwCisjZGVmaW5lIE00OFQzNV9SVENfU1RPUFBFRCAgMHg4MAorI2RlZmluZSBNNDhUMzVfUlRDX1JFQUQgICAgIDB4NDAKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9tODI2MF9wY2kuaCBiL2luY2x1ZGUvYXNtLXBwYy9tODI2MF9wY2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjNhNmI5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjL204MjYwX3BjaS5oCkBAIC0wLDAgKzEsMTg2IEBACisvKgorICogaW5jbHVkZS9hc20tcHBjL204MjYwX3BjaS5oCisgKgorICogRGVmaW5pdGlvbnMgZm9yIHRoZSBNUEM4MjUwL01QQzgyNjUvTVBDODI2NiBpbnRlZ3JhdGVkIFBDSSBob3N0IGJyaWRnZS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaWZuZGVmIF9fTTgyNjBfUENJX0gKKyNkZWZpbmUgX19NODI2MF9QQ0lfSAorCisjaW5jbHVkZSA8bGludXgvcGNpX2lkcy5oPgorCisvKgorICogRGVmaW5lIHRoZSB2ZW5kb3IvZGV2aWNlIElEIGZvciB0aGUgTVBDODI2NS4KKyAqLworI2RlZmluZQlQQ0lfREVWSUNFX0lEX01QQzgyNjUJKCgweDE4QzAgPDwgMTYpIHwgUENJX1ZFTkRPUl9JRF9NT1RPUk9MQSkKKworI2RlZmluZSBNODI2NV9QQ0lCUjAJMHgxMDFhYworI2RlZmluZSBNODI2NV9QQ0lCUjEJMHgxMDFiMAorI2RlZmluZSBNODI2NV9QQ0lNU0swCTB4MTAxYzQKKyNkZWZpbmUgTTgyNjVfUENJTVNLMQkweDEwMWM4CisKKy8qIEJpdCBkZWZpbml0aW9ucyBmb3IgUENJQlIgcmVnaXN0ZXJzICovCisKKyNkZWZpbmUgUENJQlJfRU5BQkxFICAgICAgICAweDAwMDAwMDAxCisKKy8qIEJpdCBkZWZpbml0aW9ucyBmb3IgUENJTVNLIHJlZ2lzdGVycyAqLworCisjZGVmaW5lIFBDSU1TS18zMktpQiAgICAgICAgIDB4RkZGRjgwMDAgIC8qIFNpemUgb2Ygd2luZG93LCBzbWFsbGVzdCAqLworI2RlZmluZSBQQ0lNU0tfNjRLaUIgICAgICAgICAweEZGRkYwMDAwCisjZGVmaW5lIFBDSU1TS18xMjhLaUIgICAgICAgIDB4RkZGRTAwMDAKKyNkZWZpbmUgUENJTVNLXzI1NktpQiAgICAgICAgMHhGRkZDMDAwMAorI2RlZmluZSBQQ0lNU0tfNTEyS2lCICAgICAgICAweEZGRjgwMDAwCisjZGVmaW5lIFBDSU1TS18xTWlCICAgICAgICAgIDB4RkZGMDAwMDAKKyNkZWZpbmUgUENJTVNLXzJNaUIgICAgICAgICAgMHhGRkUwMDAwMAorI2RlZmluZSBQQ0lNU0tfNE1pQiAgICAgICAgICAweEZGQzAwMDAwCisjZGVmaW5lIFBDSU1TS184TWlCICAgICAgICAgIDB4RkY4MDAwMDAKKyNkZWZpbmUgUENJTVNLXzE2TWlCICAgICAgICAgMHhGRjAwMDAwMAorI2RlZmluZSBQQ0lNU0tfMzJNaUIgICAgICAgICAweEZFMDAwMDAwCisjZGVmaW5lIFBDSU1TS182NE1pQiAgICAgICAgIDB4RkMwMDAwMDAKKyNkZWZpbmUgUENJTVNLXzEyOE1pQiAgICAgICAgMHhGODAwMDAwMAorI2RlZmluZSBQQ0lNU0tfMjU2TWlCICAgICAgICAweEYwMDAwMDAwCisjZGVmaW5lIFBDSU1TS181MTJNaUIgICAgICAgIDB4RTAwMDAwMDAKKyNkZWZpbmUgUENJTVNLXzFHaUIgICAgICAgICAgMHhDMDAwMDAwMCAgLyogU2l6ZSBvZiB3aW5kb3csIGxhcmdlc3QgKi8KKworCisjZGVmaW5lIE04MjZYX1NDQ1JfUENJX01PREVfRU4gMHgxMDAKKworCisvKgorICogT3V0Ym91bmQgQVRVIHJlZ2lzdGVycyAoMyBzZXRzKS4gVGhlc2UgcmVnaXN0ZXJzIGNvbnRyb2wgaG93IDYweCBidXMgKGxvY2FsKSAKKyAqIGFkZHJlc3NlcyBhcmUgdHJhbnNsYXRlZCB0byBQQ0kgYWRkcmVzc2VzIHdoZW4gdGhlIE1QQzgyNnggaXMgYSBQQ0kgYnVzIAorICogbWFzdGVyIChpbml0aWF0b3IpLgorICovCisKKyNkZWZpbmUgUE9UQVJfUkVHMCAgICAgICAgICAweDEwODAwICAgICAvKiBQQ0kgT3V0Ym91bmQgVHJhbnNsYXRpb24gQWRkciByZWdpc3RlcnMgKi8KKyNkZWZpbmUgUE9UQVJfUkVHMSAgICAgICAgICAweDEwODE4CisjZGVmaW5lIFBPVEFSX1JFRzIgICAgICAgICAgMHgxMDgzMAorCisjZGVmaW5lIFBPQkFSX1JFRzAgICAgICAgICAgMHgxMDgwOCAgICAgLyogUENJIE91dGJvdW5kIEJhc2UgQWRkciByZWdpc3RlcnMgKi8KKyNkZWZpbmUgUE9CQVJfUkVHMSAgICAgICAgICAweDEwODIwCisjZGVmaW5lIFBPQkFSX1JFRzIgICAgICAgICAgMHgxMDgzOAorCisjZGVmaW5lIFBPQ01SX1JFRzAgICAgICAgICAgMHgxMDgxMCAgICAgLyogUENJIE91dGJvdW5kIENvbXBhcmlzb24gTWFzayByZWdpc3RlcnMgKi8KKyNkZWZpbmUgUE9DTVJfUkVHMSAgICAgICAgICAweDEwODI4CisjZGVmaW5lIFBPQ01SX1JFRzIgICAgICAgICAgMHgxMDg0MAorCisvKiBCaXQgZGVmaW5pdGlvbnMgZm9yIFBPTUNSIHJlZ2lzdGVycyAqLworCisjZGVmaW5lIFBPQ01SX01BU0tfNEtpQiAgICAgIDB4MDAwRkZGRkYKKyNkZWZpbmUgUE9DTVJfTUFTS184S2lCICAgICAgMHgwMDBGRkZGRQorI2RlZmluZSBQT0NNUl9NQVNLXzE2S2lCICAgICAweDAwMEZGRkZDCisjZGVmaW5lIFBPQ01SX01BU0tfMzJLaUIgICAgIDB4MDAwRkZGRjgKKyNkZWZpbmUgUE9DTVJfTUFTS182NEtpQiAgICAgMHgwMDBGRkZGMAorI2RlZmluZSBQT0NNUl9NQVNLXzEyOEtpQiAgICAweDAwMEZGRkUwCisjZGVmaW5lIFBPQ01SX01BU0tfMjU2S2lCICAgIDB4MDAwRkZGQzAKKyNkZWZpbmUgUE9DTVJfTUFTS181MTJLaUIgICAgMHgwMDBGRkY4MAorI2RlZmluZSBQT0NNUl9NQVNLXzFNaUIgICAgICAweDAwMEZGRjAwCisjZGVmaW5lIFBPQ01SX01BU0tfMk1pQiAgICAgIDB4MDAwRkZFMDAKKyNkZWZpbmUgUE9DTVJfTUFTS180TWlCICAgICAgMHgwMDBGRkMwMAorI2RlZmluZSBQT0NNUl9NQVNLXzhNaUIgICAgICAweDAwMEZGODAwCisjZGVmaW5lIFBPQ01SX01BU0tfMTZNaUIgICAgIDB4MDAwRkYwMDAKKyNkZWZpbmUgUE9DTVJfTUFTS18zMk1pQiAgICAgMHgwMDBGRTAwMAorI2RlZmluZSBQT0NNUl9NQVNLXzY0TWlCICAgICAweDAwMEZDMDAwCisjZGVmaW5lIFBPQ01SX01BU0tfMTI4TWlCICAgIDB4MDAwRjgwMDAKKyNkZWZpbmUgUE9DTVJfTUFTS18yNTZNaUIgICAgMHgwMDBGMDAwMAorI2RlZmluZSBQT0NNUl9NQVNLXzUxMk1pQiAgICAweDAwMEUwMDAwCisjZGVmaW5lIFBPQ01SX01BU0tfMUdpQiAgICAgIDB4MDAwQzAwMDAKKworI2RlZmluZSBQT0NNUl9FTkFCTEUgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgUE9DTVJfUENJX0lPICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIFBPQ01SX1BSRUZFVENIX0VOICAgMHgyMDAwMDAwMAorCisvKiBTb2Z0IFBDSSByZXNldCAqLworCisjZGVmaW5lIFBDSV9HQ1JfUkVHICAgICAgICAgMHgxMDg4MAorCisvKiBCaXQgZGVmaW5pdGlvbnMgZm9yIFBDSV9HQ1IgcmVnaXN0ZXJzICovCisKKyNkZWZpbmUgUENJR0NSX1BDSV9CVVNfRU4gICAweDEKKworI2RlZmluZSBQQ0lfRU1SX1JFRwkgICAgMHgxMDg4OAorLyoKKyAqIEluYm91bmQgQVRVIHJlZ2lzdGVycyAoMiBzZXRzKS4gVGhlc2UgcmVnaXN0ZXJzIGNvbnRyb2wgaG93IFBDSSBhZGRyZXNzZXMgCisgKiBhcmUgdHJhbnNsYXRlZCB0byA2MHggYnVzIChsb2NhbCkgYWRkcmVzc2VzIHdoZW4gdGhlIE1QQzgyNnggaXMgYSBQQ0kgYnVzIHRhcmdldC4KKyAqLworCisjZGVmaW5lIFBJVEFSX1JFRzEgICAgICAgICAgMHgxMDhEMAorI2RlZmluZSBQSUJBUl9SRUcxICAgICAgICAgIDB4MTA4RDgKKyNkZWZpbmUgUElDTVJfUkVHMSAgICAgICAgICAweDEwOEUwCisjZGVmaW5lIFBJVEFSX1JFRzAgICAgICAgICAgMHgxMDhFOAorI2RlZmluZSBQSUJBUl9SRUcwICAgICAgICAgIDB4MTA4RjAKKyNkZWZpbmUgUElDTVJfUkVHMCAgICAgICAgICAweDEwOEY4CisKKy8qIEJpdCBkZWZpbml0aW9ucyBmb3IgUENJIEluYm91bmQgQ29tcGFyaXNvbiBNYXNrIHJlZ2lzdGVycyAqLworCisjZGVmaW5lIFBJQ01SX01BU0tfNEtpQiAgICAgICAweDAwMEZGRkZGCisjZGVmaW5lIFBJQ01SX01BU0tfOEtpQiAgICAgICAweDAwMEZGRkZFCisjZGVmaW5lIFBJQ01SX01BU0tfMTZLaUIgICAgICAweDAwMEZGRkZDCisjZGVmaW5lIFBJQ01SX01BU0tfMzJLaUIgICAgICAweDAwMEZGRkY4CisjZGVmaW5lIFBJQ01SX01BU0tfNjRLaUIgICAgICAweDAwMEZGRkYwCisjZGVmaW5lIFBJQ01SX01BU0tfMTI4S2lCICAgICAweDAwMEZGRkUwCisjZGVmaW5lIFBJQ01SX01BU0tfMjU2S2lCICAgICAweDAwMEZGRkMwCisjZGVmaW5lIFBJQ01SX01BU0tfNTEyS2lCICAgICAweDAwMEZGRjgwCisjZGVmaW5lIFBJQ01SX01BU0tfMU1pQiAgICAgICAweDAwMEZGRjAwCisjZGVmaW5lIFBJQ01SX01BU0tfMk1pQiAgICAgICAweDAwMEZGRTAwCisjZGVmaW5lIFBJQ01SX01BU0tfNE1pQiAgICAgICAweDAwMEZGQzAwCisjZGVmaW5lIFBJQ01SX01BU0tfOE1pQiAgICAgICAweDAwMEZGODAwCisjZGVmaW5lIFBJQ01SX01BU0tfMTZNaUIgICAgICAweDAwMEZGMDAwCisjZGVmaW5lIFBJQ01SX01BU0tfMzJNaUIgICAgICAweDAwMEZFMDAwCisjZGVmaW5lIFBJQ01SX01BU0tfNjRNaUIgICAgICAweDAwMEZDMDAwCisjZGVmaW5lIFBJQ01SX01BU0tfMTI4TWlCICAgICAweDAwMEY4MDAwCisjZGVmaW5lIFBJQ01SX01BU0tfMjU2TWlCICAgICAweDAwMEYwMDAwCisjZGVmaW5lIFBJQ01SX01BU0tfNTEyTWlCICAgICAweDAwMEUwMDAwCisjZGVmaW5lIFBJQ01SX01BU0tfMUdpQiAgICAgICAweDAwMEMwMDAwCisKKyNkZWZpbmUgUElDTVJfRU5BQkxFICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBQSUNNUl9OT19TTk9PUF9FTiAgICAweDQwMDAwMDAwCisjZGVmaW5lIFBJQ01SX1BSRUZFVENIX0VOICAgIDB4MjAwMDAwMDAKKworLyogUENJIGVycm9yIFJlZ2lzdGVycyAqLworCisjZGVmaW5lCVBDSV9FUlJPUl9TVEFUVVNfUkVHCQkweDEwODg0CisjZGVmaW5lCVBDSV9FUlJPUl9NQVNLX1JFRwkJMHgxMDg4OAorI2RlZmluZQlQQ0lfRVJST1JfQ09OVFJPTF9SRUcJCTB4MTA4OEMKKyNkZWZpbmUgUENJX0VSUk9SX0FEUlNfQ0FQVFVSRV9SRUcgICAgICAweDEwODkwCisjZGVmaW5lIFBDSV9FUlJPUl9EQVRBX0NBUFRVUkVfUkVHICAgICAgMHgxMDg5OAorI2RlZmluZSBQQ0lfRVJST1JfQ1RSTF9DQVBUVVJFX1JFRyAgICAgIDB4MTA4QTAKKworLyogUENJIGVycm9yIFJlZ2lzdGVyIGJpdCBkZWZpbmVzICovCisKKyNkZWZpbmUJUENJX0VSUk9SX1BDSV9BRERSX1BBUgkJCTB4MDAwMDAwMDEKKyNkZWZpbmUJUENJX0VSUk9SX1BDSV9EQVRBX1BBUl9XUgkJMHgwMDAwMDAwMgorI2RlZmluZQlQQ0lfRVJST1JfUENJX0RBVEFfUEFSX1JECQkweDAwMDAwMDA0CisjZGVmaW5lCVBDSV9FUlJPUl9QQ0lfTk9fUlNQCQkJMHgwMDAwMDAwOAorI2RlZmluZQlQQ0lfRVJST1JfUENJX1RBUl9BQlQJCQkweDAwMDAwMDEwCisjZGVmaW5lCVBDSV9FUlJPUl9QQ0lfU0VSUgkJCTB4MDAwMDAwMjAKKyNkZWZpbmUJUENJX0VSUk9SX1BDSV9QRVJSX1JECQkJMHgwMDAwMDA0MAorI2RlZmluZQlQQ0lfRVJST1JfUENJX1BFUlJfV1IJCQkweDAwMDAwMDgwCisjZGVmaW5lCVBDSV9FUlJPUl9JMk9fT0ZRTwkJCTB4MDAwMDAxMDAKKyNkZWZpbmUJUENJX0VSUk9SX0kyT19JUFFPCQkJMHgwMDAwMDIwMAorI2RlZmluZQlQQ0lfRVJST1JfSVJBCQkJCTB4MDAwMDA0MDAKKyNkZWZpbmUJUENJX0VSUk9SX05NSQkJCQkweDAwMDAwODAwCisjZGVmaW5lCVBDSV9FUlJPUl9JMk9fREJNQwkJCTB4MDAwMDEwMDAKKworLyoKKyAqIFJlZ2lzdGVyIHBhaXIgdXNlZCB0byBnZW5lcmF0ZSBjb25maWd1cmF0aW9uIGN5Y2xlcyBvbiB0aGUgUENJIGJ1cworICogYW5kIGFjY2VzcyB0aGUgTVBDODI2eCdzIG93biBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3RlcnMuCisgKi8KKworI2RlZmluZSBQQ0lfQ0ZHX0FERFJfUkVHICAgICAweDEwOTAwCisjZGVmaW5lIFBDSV9DRkdfREFUQV9SRUcgICAgIDB4MTA5MDQKKworLyogQnVzIHBhcmtpbmcgZGVjaWRlcyB3aGVyZSB0aGUgYnVzIGNvbnRyb2wgc2l0cyB3aGVuIGlkbGUgKi8KKy8qIElmIG1vZGlmeWluZyBtZW1vcnkgY29udHJvbGxlcnMgZm9yIFBDSSBwYXJrIG9uIHRoZSBjb3JlICovCisKKyNkZWZpbmUgUFBDX0FDUl9CVVNfUEFSS19DT1JFIDB4NgorI2RlZmluZSBQUENfQUNSX0JVU19QQVJLX1BDSSAgMHgzCisKKyNlbmRpZiAvKiBfX004MjYwX1BDSV9IICovCisjZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL21hY2hkZXAuaCBiL2luY2x1ZGUvYXNtLXBwYy9tYWNoZGVwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc4ZDQwOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9tYWNoZGVwLmgKQEAgLTAsMCArMSwxNTQgQEAKKyNpZmRlZiBfX0tFUk5FTF9fCisjaWZuZGVmIF9QUENfTUFDSERFUF9ICisjZGVmaW5lIF9QUENfTUFDSERFUF9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorCisjaWZkZWYgQ09ORklHX0FQVVMKKyNpbmNsdWRlIDxhc20tbTY4ay9tYWNoZGVwLmg+CisjZW5kaWYKKworc3RydWN0IHB0X3JlZ3M7CitzdHJ1Y3QgcGNpX2J1czsJCitzdHJ1Y3QgcGNpX2RldjsKK3N0cnVjdCBzZXFfZmlsZTsKK3N0cnVjdCBmaWxlOworCisvKiBXZSBleHBvcnQgdGhpcyBtYWNybyBmb3IgZXh0ZXJuYWwgbW9kdWxlcyBsaWtlIEFsc2EgdG8ga25vdyBpZgorICogcHBjX21kLmZlYXR1cmVfY2FsbCBpcyBpbXBsZW1lbnRlZCBvciBub3QKKyAqLworI2RlZmluZSBDT05GSUdfUFBDX0hBU19GRUFUVVJFX0NBTExTCisKK3N0cnVjdCBtYWNoZGVwX2NhbGxzIHsKKwl2b2lkCQkoKnNldHVwX2FyY2gpKHZvaWQpOworCS8qIE9wdGlvbmFsLCBtYXkgYmUgTlVMTC4gKi8KKwlpbnQJCSgqc2hvd19jcHVpbmZvKShzdHJ1Y3Qgc2VxX2ZpbGUgKm0pOworCWludAkJKCpzaG93X3BlcmNwdWluZm8pKHN0cnVjdCBzZXFfZmlsZSAqbSwgaW50IGkpOworCS8qIE9wdGlvbmFsLCBtYXkgYmUgTlVMTC4gKi8KKwl1bnNpZ25lZCBpbnQJKCppcnFfY2Fub25pY2FsaXplKSh1bnNpZ25lZCBpbnQgaXJxKTsKKwl2b2lkCQkoKmluaXRfSVJRKSh2b2lkKTsKKwlpbnQJCSgqZ2V0X2lycSkoc3RydWN0IHB0X3JlZ3MgKik7CisJCisJLyogQSBnZW5lcmFsIGluaXQgZnVuY3Rpb24sIGNhbGxlZCBieSBwcGNfaW5pdCBpbiBpbml0L21haW4uYy4KKwkgICBNYXkgYmUgTlVMTC4gKi8KKwl2b2lkCQkoKmluaXQpKHZvaWQpOworCisJdm9pZAkJKCpyZXN0YXJ0KShjaGFyICpjbWQpOworCXZvaWQJCSgqcG93ZXJfb2ZmKSh2b2lkKTsKKwl2b2lkCQkoKmhhbHQpKHZvaWQpOworCisJdm9pZAkJKCppZGxlKSh2b2lkKTsKKwl2b2lkCQkoKnBvd2VyX3NhdmUpKHZvaWQpOworCisJbG9uZwkJKCp0aW1lX2luaXQpKHZvaWQpOyAvKiBPcHRpb25hbCwgbWF5IGJlIE5VTEwgKi8KKwlpbnQJCSgqc2V0X3J0Y190aW1lKSh1bnNpZ25lZCBsb25nIG5vd3RpbWUpOworCXVuc2lnbmVkIGxvbmcJKCpnZXRfcnRjX3RpbWUpKHZvaWQpOworCXVuc2lnbmVkIGNoYXIgCSgqcnRjX3JlYWRfdmFsKShpbnQgYWRkcik7CisJdm9pZAkJKCpydGNfd3JpdGVfdmFsKShpbnQgYWRkciwgdW5zaWduZWQgY2hhciB2YWwpOworCXZvaWQJCSgqY2FsaWJyYXRlX2RlY3IpKHZvaWQpOworCisJdm9pZAkJKCpoZWFydGJlYXQpKHZvaWQpOworCXVuc2lnbmVkIGxvbmcJaGVhcnRiZWF0X3Jlc2V0OworCXVuc2lnbmVkIGxvbmcJaGVhcnRiZWF0X2NvdW50OworCisJdW5zaWduZWQgbG9uZwkoKmZpbmRfZW5kX29mX21lbW9yeSkodm9pZCk7CisJdm9pZAkJKCpzZXR1cF9pb19tYXBwaW5ncykodm9pZCk7CisKKwl2b2lkCQkoKmVhcmx5X3NlcmlhbF9tYXApKHZvaWQpOworICAJdm9pZAkJKCpwcm9ncmVzcykoY2hhciAqLCB1bnNpZ25lZCBzaG9ydCk7CisJdm9pZAkJKCprZ2RiX21hcF9zY2MpKHZvaWQpOworCisJdW5zaWduZWQgY2hhciAJKCpudnJhbV9yZWFkX3ZhbCkoaW50IGFkZHIpOworCXZvaWQJCSgqbnZyYW1fd3JpdGVfdmFsKShpbnQgYWRkciwgdW5zaWduZWQgY2hhciB2YWwpOworCXZvaWQJCSgqbnZyYW1fc3luYykodm9pZCk7CisKKwkvKgorCSAqIG9wdGlvbmFsIFBDSSAiaG9va3MiCisJICovCisKKwkvKiBDYWxsZWQgYWZ0ZXIgc2Nhbm5pbmcgdGhlIGJ1cywgYmVmb3JlIGFsbG9jYXRpbmcgcmVzb3VyY2VzICovCisJdm9pZCAoKnBjaWJpb3NfZml4dXApKHZvaWQpOworCisJLyogQ2FsbGVkIGFmdGVyIFBQQyBnZW5lcmljIHJlc291cmNlIGZpeHVwIHRvIHBlcmZvcm0KKwkgICBtYWNoaW5lIHNwZWNpZmljIGZpeHVwcyAqLworCXZvaWQgKCpwY2liaW9zX2ZpeHVwX3Jlc291cmNlcykoc3RydWN0IHBjaV9kZXYgKik7CisKKwkvKiBDYWxsZWQgZm9yIGVhY2ggUENJIGJ1cyBpbiB0aGUgc3lzdGVtIHdoZW4gaXQncyBwcm9iZWQgKi8KKwl2b2lkICgqcGNpYmlvc19maXh1cF9idXMpKHN0cnVjdCBwY2lfYnVzICopOworCisJLyogQ2FsbGVkIHdoZW4gcGNpX2VuYWJsZV9kZXZpY2UoKSBpcyBjYWxsZWQgKGluaXRpYWw9MCkgb3IKKwkgKiB3aGVuIGEgZGV2aWNlIHdpdGggbm8gYXNzaWduZWQgcmVzb3VyY2UgaXMgZm91bmQgKGluaXRpYWw9MSkuCisJICogUmV0dXJucyAwIHRvIGFsbG93IGFzc2lnbm1lbnQvZW5hYmxpbmcgb2YgdGhlIGRldmljZS4gKi8KKwlpbnQgICgqcGNpYmlvc19lbmFibGVfZGV2aWNlX2hvb2spKHN0cnVjdCBwY2lfZGV2ICosIGludCBpbml0aWFsKTsKKworCS8qIEZvciBpbnRlcnJ1cHQgcm91dGluZyAqLworCXVuc2lnbmVkIGNoYXIgKCpwY2lfc3dpenpsZSkoc3RydWN0IHBjaV9kZXYgKiwgdW5zaWduZWQgY2hhciAqKTsKKwlpbnQgKCpwY2lfbWFwX2lycSkoc3RydWN0IHBjaV9kZXYgKiwgdW5zaWduZWQgY2hhciwgdW5zaWduZWQgY2hhcik7CisKKwkvKiBDYWxsZWQgaW4gaW5kaXJlY3RfKiB0byBhdm9pZCB0b3VjaGluZyBkZXZpY2VzICovCisJaW50ICgqcGNpX2V4Y2x1ZGVfZGV2aWNlKSh1bnNpZ25lZCBjaGFyLCB1bnNpZ25lZCBjaGFyKTsKKworCS8qIENhbGxlZCBhdCB0aGVuIHZlcnkgZW5kIG9mIHBjaWJpb3NfaW5pdCgpICovCisJdm9pZCAoKnBjaWJpb3NfYWZ0ZXJfaW5pdCkodm9pZCk7CisKKwkvKiBHZXQgYWNjZXNzIHByb3RlY3Rpb24gZm9yIC9kZXYvbWVtICovCisJcGdwcm90X3QJKCpwaHlzX21lbV9hY2Nlc3NfcHJvdCkoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJCQl1bnNpZ25lZCBsb25nIG9mZnNldCwKKwkJCQkJCXVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCQkJCXBncHJvdF90IHZtYV9wcm90KTsKKworCS8qIHRoaXMgaXMgZm9yIG1vZHVsZXMsIHNpbmNlIF9tYWNoaW5lIGNhbiBiZSBhIGRlZmluZSAtLSBDb3J0ICovCisJaW50IHBwY19tYWNoaW5lOworCisJLyogTW90aGVyYm9hcmQvY2hpcHNldCBmZWF0dXJlcy4gVGhpcyBpcyBhIGtpbmQgb2YgZ2VuZXJhbCBwdXJwb3NlCisJICogaG9vayB1c2VkIHRvIGNvbnRyb2wgc29tZSBtYWNoaW5lIHNwZWNpZmljIGZlYXR1cmVzIChsaWtlIHJlc2V0CisJICogbGluZXMsIGNoaXAgcG93ZXIgY29udHJvbCwgZXRjLi4uKS4KKwkgKi8KKwlsb25nICgqZmVhdHVyZV9jYWxsKSh1bnNpZ25lZCBpbnQgZmVhdHVyZSwgLi4uKTsKKworI2lmZGVmIENPTkZJR19TTVAKKwkvKiBmdW5jdGlvbnMgZm9yIGRlYWxpbmcgd2l0aCBvdGhlciBjcHVzICovCisJc3RydWN0IHNtcF9vcHNfdCAqc21wX29wczsKKyNlbmRpZiAvKiBDT05GSUdfU01QICovCit9OworCitleHRlcm4gc3RydWN0IG1hY2hkZXBfY2FsbHMgcHBjX21kOworZXh0ZXJuIGNoYXIgY21kX2xpbmVbQ09NTUFORF9MSU5FX1NJWkVdOworCitleHRlcm4gdm9pZCBzZXR1cF9wY2lfcHRycyh2b2lkKTsKKworLyoKKyAqIFBvd2VyIG1hY2ludG9zaGVzIGhhdmUgZWl0aGVyIGEgQ1VEQSBvciBhIFBNVSBjb250cm9sbGluZworICogc3lzdGVtIHJlc2V0LCBwb3dlciwgTlZSQU0sIFJUQy4KKyAqLwordHlwZWRlZiBlbnVtIHN5c19jdHJsZXJfa2luZCB7CisJU1lTX0NUUkxFUl9VTktOT1dOID0gMCwKKwlTWVNfQ1RSTEVSX0NVREEgPSAxLAorCVNZU19DVFJMRVJfUE1VID0gMiwKKwlTWVNfQ1RSTEVSX1NNVSA9IDMsCit9IHN5c19jdHJsZXJfdDsKKworZXh0ZXJuIHN5c19jdHJsZXJfdCBzeXNfY3RybGVyOworCisjaWZkZWYgQ09ORklHX1NNUAorc3RydWN0IHNtcF9vcHNfdCB7CisJdm9pZCAgKCptZXNzYWdlX3Bhc3MpKGludCB0YXJnZXQsIGludCBtc2csIHVuc2lnbmVkIGxvbmcgZGF0YSwgaW50IHdhaXQpOworCWludCAgICgqcHJvYmUpKHZvaWQpOworCXZvaWQgICgqa2lja19jcHUpKGludCBucik7CisJdm9pZCAgKCpzZXR1cF9jcHUpKGludCBucik7CisJdm9pZCAgKCpzcGFjZV90aW1lcnMpKGludCBucik7CisJdm9pZCAgKCp0YWtlX3RpbWViYXNlKSh2b2lkKTsKKwl2b2lkICAoKmdpdmVfdGltZWJhc2UpKHZvaWQpOworfTsKKworLyogUG9vciBkZWZhdWx0IGltcGxlbWVudGF0aW9ucyAqLworZXh0ZXJuIHZvaWQgX19kZXZpbml0IHNtcF9nZW5lcmljX2dpdmVfdGltZWJhc2Uodm9pZCk7CitleHRlcm4gdm9pZCBfX2RldmluaXQgc21wX2dlbmVyaWNfdGFrZV90aW1lYmFzZSh2b2lkKTsKKyNlbmRpZiAvKiBDT05GSUdfU01QICovCisKKyNlbmRpZiAvKiBfUFBDX01BQ0hERVBfSCAqLworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9tYWNpby5oIGIvaW5jbHVkZS9hc20tcHBjL21hY2lvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA2MDViYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9tYWNpby5oCkBAIC0wLDAgKzEsMTQwIEBACisjaWZuZGVmIF9fTUFDSU9fQVNJQ19IX18KKyNkZWZpbmUgX19NQUNJT19BU0lDX0hfXworCisjaW5jbHVkZSA8YXNtL29mX2RldmljZS5oPgorCitleHRlcm4gc3RydWN0IGJ1c190eXBlIG1hY2lvX2J1c190eXBlOworCisvKiBNYWNJTyBkZXZpY2UgZHJpdmVyIGlzIGRlZmluZWQgbGF0ZXIgKi8KK3N0cnVjdCBtYWNpb19kcml2ZXI7CitzdHJ1Y3QgbWFjaW9fY2hpcDsKKworI2RlZmluZSBNQUNJT19ERVZfQ09VTlRfUkVTT1VSQ0VTCTgKKyNkZWZpbmUgTUFDSU9fREVWX0NPVU5UX0lSUVMJCTgKKworLyoKKyAqIHRoZSBtYWNpb19idXMgc3RydWN0dXJlIGlzIHVzZWQgdG8gZGVzY3JpYmUgYSAidmlydHVhbCIgYnVzCisgKiB3aXRoaW4gYSBNYWNJTyBBU0lDLiBJdCdzIHR5cGljYWxseSBwcm92aWRlZCBieSBhIG1hY2lvX3BjaV9hc2ljCisgKiBQQ0kgZGV2aWNlLCBidXQgY291bGQgYmUgcHJvdmlkZWQgZGlmZmVyZW50bHkgYXMgd2VsbCAobnVidXMKKyAqIG1hY2hpbmVzIHVzaW5nIGEgZmFrZSBPRiB0cmVlKS4KKyAqCisgKiBUaGUgcGRldiBmaWVsZCBjYW4gYmUgTlVMTCBvbiBub24tUENJIG1hY2hpbmVzCisgKi8KK3N0cnVjdCBtYWNpb19idXMKK3sKKwlzdHJ1Y3QgbWFjaW9fY2hpcAkqY2hpcDsJCS8qIG1hY2lvX2NoaXAgKHByaXZhdGUgdXNlKSAqLworCWludAkJCWluZGV4OwkJLyogbWFjaW8gY2hpcCBpbmRleCBpbiBzeXN0ZW0gKi8KKyNpZmRlZiBDT05GSUdfUENJCisJc3RydWN0IHBjaV9kZXYJCSpwZGV2OwkJLyogUENJIGRldmljZSBob3N0aW5nIHRoaXMgYnVzICovCisjZW5kaWYKK307CisKKy8qCisgKiB0aGUgbWFjaW9fZGV2IHN0cnVjdHVyZSBpcyB1c2VkIHRvIGRlc2NyaWJlIGEgZGV2aWNlCisgKiB3aXRoaW4gYW4gQXBwbGUgTWFjSU8gQVNJQy4KKyAqLworc3RydWN0IG1hY2lvX2RldgoreworCXN0cnVjdCBtYWNpb19idXMJKmJ1czsJCS8qIG1hY2lvIGJ1cyB0aGlzIGRldmljZSBpcyBvbiAqLworCXN0cnVjdCBtYWNpb19kZXYJKm1lZGlhX2JheTsJLyogRGV2aWNlIGlzIHBhcnQgb2YgYSBtZWRpYSBiYXkgKi8KKwlzdHJ1Y3Qgb2ZfZGV2aWNlCW9mZGV2OworCWludAkJCW5fcmVzb3VyY2VzOworCXN0cnVjdCByZXNvdXJjZQkJcmVzb3VyY2VbTUFDSU9fREVWX0NPVU5UX1JFU09VUkNFU107CisJaW50CQkJbl9pbnRlcnJ1cHRzOworCXN0cnVjdCByZXNvdXJjZQkJaW50ZXJydXB0W01BQ0lPX0RFVl9DT1VOVF9JUlFTXTsKK307CisjZGVmaW5lCXRvX21hY2lvX2RldmljZShkKSBjb250YWluZXJfb2YoZCwgc3RydWN0IG1hY2lvX2Rldiwgb2ZkZXYuZGV2KQorI2RlZmluZQlvZl90b19tYWNpb19kZXZpY2UoZCkgY29udGFpbmVyX29mKGQsIHN0cnVjdCBtYWNpb19kZXYsIG9mZGV2KQorCitleHRlcm4gc3RydWN0IG1hY2lvX2RldiAqbWFjaW9fZGV2X2dldChzdHJ1Y3QgbWFjaW9fZGV2ICpkZXYpOworZXh0ZXJuIHZvaWQgbWFjaW9fZGV2X3B1dChzdHJ1Y3QgbWFjaW9fZGV2ICpkZXYpOworCisvKgorICogQWNjZXNzb3JzIHRvIHJlc291cmNlcyAmIGludGVycnVwdHMgYW5kIG90aGVyIGRldmljZQorICogZmllbGRzCisgKi8KKworc3RhdGljIGlubGluZSBpbnQgbWFjaW9fcmVzb3VyY2VfY291bnQoc3RydWN0IG1hY2lvX2RldiAqZGV2KQoreworCXJldHVybiBkZXYtPm5fcmVzb3VyY2VzOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWFjaW9fcmVzb3VyY2Vfc3RhcnQoc3RydWN0IG1hY2lvX2RldiAqZGV2LCBpbnQgcmVzb3VyY2Vfbm8pCit7CisJcmV0dXJuIGRldi0+cmVzb3VyY2VbcmVzb3VyY2Vfbm9dLnN0YXJ0OworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWFjaW9fcmVzb3VyY2VfZW5kKHN0cnVjdCBtYWNpb19kZXYgKmRldiwgaW50IHJlc291cmNlX25vKQoreworCXJldHVybiBkZXYtPnJlc291cmNlW3Jlc291cmNlX25vXS5lbmQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtYWNpb19yZXNvdXJjZV9sZW4oc3RydWN0IG1hY2lvX2RldiAqZGV2LCBpbnQgcmVzb3VyY2Vfbm8pCit7CisJc3RydWN0IHJlc291cmNlICpyZXMgPSAmZGV2LT5yZXNvdXJjZVtyZXNvdXJjZV9ub107CisJaWYgKHJlcy0+c3RhcnQgPT0gMCB8fCByZXMtPmVuZCA9PSAwIHx8IHJlcy0+ZW5kIDwgcmVzLT5zdGFydCkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDE7Cit9CisKK2V4dGVybiBpbnQgbWFjaW9fcmVxdWVzdF9yZXNvdXJjZShzdHJ1Y3QgbWFjaW9fZGV2ICpkZXYsIGludCByZXNvdXJjZV9ubywgY29uc3QgY2hhciAqbmFtZSk7CitleHRlcm4gdm9pZCBtYWNpb19yZWxlYXNlX3Jlc291cmNlKHN0cnVjdCBtYWNpb19kZXYgKmRldiwgaW50IHJlc291cmNlX25vKTsKK2V4dGVybiBpbnQgbWFjaW9fcmVxdWVzdF9yZXNvdXJjZXMoc3RydWN0IG1hY2lvX2RldiAqZGV2LCBjb25zdCBjaGFyICpuYW1lKTsKK2V4dGVybiB2b2lkIG1hY2lvX3JlbGVhc2VfcmVzb3VyY2VzKHN0cnVjdCBtYWNpb19kZXYgKmRldik7CisKK3N0YXRpYyBpbmxpbmUgaW50IG1hY2lvX2lycV9jb3VudChzdHJ1Y3QgbWFjaW9fZGV2ICpkZXYpCit7CisJcmV0dXJuIGRldi0+bl9pbnRlcnJ1cHRzOworfQorCitzdGF0aWMgaW5saW5lIGludCBtYWNpb19pcnEoc3RydWN0IG1hY2lvX2RldiAqZGV2LCBpbnQgaXJxX25vKQoreworCXJldHVybiBkZXYtPmludGVycnVwdFtpcnFfbm9dLnN0YXJ0OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbWFjaW9fc2V0X2RydmRhdGEoc3RydWN0IG1hY2lvX2RldiAqZGV2LCB2b2lkICpkYXRhKQoreworCWRldl9zZXRfZHJ2ZGF0YSgmZGV2LT5vZmRldi5kZXYsIGRhdGEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQqIG1hY2lvX2dldF9kcnZkYXRhKHN0cnVjdCBtYWNpb19kZXYgKmRldikKK3sKKwlyZXR1cm4gZGV2X2dldF9kcnZkYXRhKCZkZXYtPm9mZGV2LmRldik7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGRldmljZV9ub2RlICptYWNpb19nZXRfb2Zfbm9kZShzdHJ1Y3QgbWFjaW9fZGV2ICptZGV2KQoreworCXJldHVybiBtZGV2LT5vZmRldi5ub2RlOworfQorCisjaWZkZWYgQ09ORklHX1BDSQorc3RhdGljIGlubGluZSBzdHJ1Y3QgcGNpX2RldiAqbWFjaW9fZ2V0X3BjaV9kZXYoc3RydWN0IG1hY2lvX2RldiAqbWRldikKK3sKKwlyZXR1cm4gbWRldi0+YnVzLT5wZGV2OworfQorI2VuZGlmCisKKy8qCisgKiBBIGRyaXZlciBmb3IgYSBtYWMtaW8gY2hpcCBiYXNlZCBkZXZpY2UKKyAqLworc3RydWN0IG1hY2lvX2RyaXZlcgoreworCWNoYXIJCQkqbmFtZTsKKwlzdHJ1Y3Qgb2ZfbWF0Y2gJCSptYXRjaF90YWJsZTsKKwlzdHJ1Y3QgbW9kdWxlCQkqb3duZXI7CisKKwlpbnQJKCpwcm9iZSkoc3RydWN0IG1hY2lvX2RldiogZGV2LCBjb25zdCBzdHJ1Y3Qgb2ZfbWF0Y2ggKm1hdGNoKTsKKwlpbnQJKCpyZW1vdmUpKHN0cnVjdCBtYWNpb19kZXYqIGRldik7CisKKwlpbnQJKCpzdXNwZW5kKShzdHJ1Y3QgbWFjaW9fZGV2KiBkZXYsIHUzMiBzdGF0ZSk7CisJaW50CSgqcmVzdW1lKShzdHJ1Y3QgbWFjaW9fZGV2KiBkZXYpOworCWludAkoKnNodXRkb3duKShzdHJ1Y3QgbWFjaW9fZGV2KiBkZXYpOworCisJc3RydWN0IGRldmljZV9kcml2ZXIJZHJpdmVyOworfTsKKyNkZWZpbmUJdG9fbWFjaW9fZHJpdmVyKGRydikgY29udGFpbmVyX29mKGRydixzdHJ1Y3QgbWFjaW9fZHJpdmVyLCBkcml2ZXIpCisKK2V4dGVybiBpbnQgbWFjaW9fcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBtYWNpb19kcml2ZXIgKik7CitleHRlcm4gdm9pZCBtYWNpb191bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgbWFjaW9fZHJpdmVyICopOworCisjZW5kaWYgLyogX19NQUNJT19BU0lDX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL21jMTQ2ODE4cnRjLmggYi9pbmNsdWRlL2FzbS1wcGMvbWMxNDY4MThydGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjcwMThiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjL21jMTQ2ODE4cnRjLmgKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIE1hY2hpbmUgZGVwZW5kZW50IGFjY2VzcyBmdW5jdGlvbnMgZm9yIFJUQyByZWdpc3RlcnMuCisgKi8KKyNpZmRlZiBfX0tFUk5FTF9fCisjaWZuZGVmIF9fQVNNX1BQQ19NQzE0NjgxOFJUQ19ICisjZGVmaW5lIF9fQVNNX1BQQ19NQzE0NjgxOFJUQ19ICisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2lmbmRlZiBSVENfUE9SVAorI2RlZmluZSBSVENfUE9SVCh4KQkoMHg3MCArICh4KSkKKyNkZWZpbmUgUlRDX0FMV0FZU19CQ0QJMQkvKiBSVEMgb3BlcmF0ZXMgaW4gYmluYXJ5IG1vZGUgKi8KKyNlbmRpZgorCisvKgorICogVGhlIHlldCBzdXBwb3J0ZWQgbWFjaGluZXMgYWxsIGFjY2VzcyB0aGUgUlRDIGluZGV4IHJlZ2lzdGVyIHZpYQorICogYW4gSVNBIHBvcnQgYWNjZXNzIGJ1dCB0aGUgd2F5IHRvIGFjY2VzcyB0aGUgZGF0ZSByZWdpc3RlciBkaWZmZXJzIC4uLgorICovCisjZGVmaW5lIENNT1NfUkVBRChhZGRyKSAoeyBcCitvdXRiX3AoKGFkZHIpLFJUQ19QT1JUKDApKTsgXAoraW5iX3AoUlRDX1BPUlQoMSkpOyBcCit9KQorI2RlZmluZSBDTU9TX1dSSVRFKHZhbCwgYWRkcikgKHsgXAorb3V0Yl9wKChhZGRyKSxSVENfUE9SVCgwKSk7IFwKK291dGJfcCgodmFsKSxSVENfUE9SVCgxKSk7IFwKK30pCisKKyNkZWZpbmUgUlRDX0lSUSA4CisKKyNlbmRpZiAvKiBfX0FTTV9QUENfTUMxNDY4MThSVENfSCAqLworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9tZC5oIGIvaW5jbHVkZS9hc20tcHBjL21kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE5YjZiNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9tZC5oCkBAIC0wLDAgKzEsMTUgQEAKKy8qCisgKiBtZC5oOiBIaWdoIHNwZWVkIHhvcl9ibG9jayBvcGVyYXRpb24gZm9yIFJBSUQ0LzUKKyAqCisgKi8KKworI2lmZGVmIF9fS0VSTkVMX18KKyNpZm5kZWYgX19BU01fTURfSAorI2RlZmluZSBfX0FTTV9NRF9ICisKKy8qICNkZWZpbmUgSEFWRV9BUkNIX1hPUkJMT0NLICovCisKKyNkZWZpbmUgTURfWE9SQkxPQ0tfQUxJR05NRU5UCXNpemVvZihsb25nKQorCisjZW5kaWYgLyogX19BU01fTURfSCAqLworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9tZWRpYWJheS5oIGIvaW5jbHVkZS9hc20tcHBjL21lZGlhYmF5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRhYTMyNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9tZWRpYWJheS5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBtZWRpYWJheS5oOiBkZWZpbml0aW9ucyBmb3IgdXNpbmcgdGhlIG1lZGlhIGJheQorICogb24gUG93ZXJCb29rIDM0MDAgYW5kIHNpbWlsYXIgY29tcHV0ZXJzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NyBQYXVsIE1hY2tlcnJhcy4KKyAqLworI2lmbmRlZiBfUFBDX01FRElBQkFZX0gKKyNkZWZpbmUgX1BQQ19NRURJQUJBWV9ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNkZWZpbmUgTUJfRkQJCTAJLyogbWVkaWEgYmF5IGNvbnRhaW5zIGZsb3BweSBkcml2ZSAoYXV0b21hdGljIGVqZWN0ID8pICovCisjZGVmaW5lIE1CX0ZEMQkJMQkvKiBtZWRpYSBiYXkgY29udGFpbnMgZmxvcHB5IGRyaXZlIChtYW51YWwgZWplY3QgPykgKi8KKyNkZWZpbmUgTUJfU09VTkQJMgkvKiBzb3VuZCBkZXZpY2UgPyAqLworI2RlZmluZSBNQl9DRAkJMwkvKiBtZWRpYSBiYXkgY29udGFpbnMgQVRBIGRyaXZlIHN1Y2ggYXMgQ0Qgb3IgWklQICovCisjZGVmaW5lIE1CX1BDSQkJNQkvKiBtZWRpYSBiYXkgY29udGFpbnMgYSBQQ0kgZGV2aWNlICovCisjZGVmaW5lIE1CX1BPV0VSCTYJLyogbWVkaWEgYmF5IGNvbnRhaW5zIGEgUG93ZXIgZGV2aWNlICg/Pz8pICovCisjZGVmaW5lIE1CX05PCQk3CS8qIG1lZGlhIGJheSBjb250YWlucyBub3RoaW5nICovCisKK2ludCBjaGVja19tZWRpYV9iYXkoc3RydWN0IGRldmljZV9ub2RlICp3aGljaF9iYXksIGludCB3aGF0KTsKK2ludCBjaGVja19tZWRpYV9iYXlfYnlfYmFzZSh1bnNpZ25lZCBsb25nIGJhc2UsIGludCB3aGF0KTsKKworLyogTnVtYmVyIG9mIGJheXMgaW4gdGhlIG1hY2hpbmUgb3IgMCAqLworZXh0ZXJuIGludCBtZWRpYV9iYXlfY291bnQ7CisKKy8qIGNhbGxlZCBieSBwbWFjLWlkZS5jIHRvIHJlZ2lzdGVyIElERSBjb250cm9sbGVyIGZvciBtZWRpYSBiYXkgKi8KK2V4dGVybiBpbnQgbWVkaWFfYmF5X3NldF9pZGVfaW5mb3Moc3RydWN0IGRldmljZV9ub2RlKiB3aGljaF9iYXksCisJCQl1bnNpZ25lZCBsb25nIGJhc2UsIGludCBpcnEsIGludCBpbmRleCk7CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYgLyogX1BQQ19NRURJQUJBWV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvbWs0OHQ1OS5oIGIvaW5jbHVkZS9hc20tcHBjL21rNDh0NTkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTBlZDZmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjL21rNDh0NTkuaApAQCAtMCwwICsxLDI3IEBACisvKgorICogUmVnaXN0ZXJzIGZvciB0aGUgbWs0OHQ1OSByZWFsLXRpbWUtY2xvY2sKKyAqLworCisjaWZuZGVmIF9QUENfTUs0OFQ1OV9ICisjZGVmaW5lIF9QUENfTUs0OFQ1OV9ICisKKy8qIFJUQyBPZmZzZXRzICovCisKKyNkZWZpbmUgTUs0OFQ1OV9SVENfU0VDT05EUwkJMHgxRkY5CisjZGVmaW5lIE1LNDhUNTlfUlRDX01JTlVURVMJCTB4MUZGQQorI2RlZmluZSBNSzQ4VDU5X1JUQ19IT1VSUwkJMHgxRkZCCisjZGVmaW5lIE1LNDhUNTlfUlRDX0RBWV9PRl9XRUVLCQkweDFGRkMKKyNkZWZpbmUgTUs0OFQ1OV9SVENfREFZX09GX01PTlRICTB4MUZGRAorI2RlZmluZSBNSzQ4VDU5X1JUQ19NT05USAkJMHgxRkZFCisjZGVmaW5lIE1LNDhUNTlfUlRDX1lFQVIJCTB4MUZGRgorCisjZGVmaW5lIE1LNDhUNTlfUlRDX0NPTlRST0xBCQkweDFGRjgKKyNkZWZpbmUgTUs0OFQ1OV9SVENfQ0FfV1JJVEUJCTB4ODAKKyNkZWZpbmUgTUs0OFQ1OV9SVENfQ0FfUkVBRAkJMHg0MAorI2RlZmluZSBNSzQ4VDU5X1JUQ19DQV9DQUxJQl9TSUdOCTB4MjAKKyNkZWZpbmUgTUs0OFQ1OV9SVENfQ0FfQ0FMSUJfTUFTSwkweDFmCisKKyNkZWZpbmUgTUs0OFQ1OV9SVENfQ09OVFJPTEIJCTB4MUZGOQorI2RlZmluZSBNSzQ4VDU5X1JUQ19DQl9TVE9QCQkweDgwCisKKyNlbmRpZiAvKiBfUFBDX01LNDhUNTlfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL21tYW4uaCBiL2luY2x1ZGUvYXNtLXBwYy9tbWFuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZkMTlmZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9tbWFuLmgKQEAgLTAsMCArMSw0NCBAQAorI2lmbmRlZiBfX1BQQ19NTUFOX0hfXworI2RlZmluZSBfX1BQQ19NTUFOX0hfXworCisjZGVmaW5lIFBST1RfUkVBRAkweDEJCS8qIHBhZ2UgY2FuIGJlIHJlYWQgKi8KKyNkZWZpbmUgUFJPVF9XUklURQkweDIJCS8qIHBhZ2UgY2FuIGJlIHdyaXR0ZW4gKi8KKyNkZWZpbmUgUFJPVF9FWEVDCTB4NAkJLyogcGFnZSBjYW4gYmUgZXhlY3V0ZWQgKi8KKyNkZWZpbmUgUFJPVF9TRU0JMHg4CQkvKiBwYWdlIG1heSBiZSB1c2VkIGZvciBhdG9taWMgb3BzICovCisjZGVmaW5lIFBST1RfTk9ORQkweDAJCS8qIHBhZ2UgY2FuIG5vdCBiZSBhY2Nlc3NlZCAqLworI2RlZmluZSBQUk9UX0dST1dTRE9XTgkweDAxMDAwMDAwCS8qIG1wcm90ZWN0IGZsYWc6IGV4dGVuZCBjaGFuZ2UgdG8gc3RhcnQgb2YgZ3Jvd3Nkb3duIHZtYSAqLworI2RlZmluZSBQUk9UX0dST1dTVVAJMHgwMjAwMDAwMAkvKiBtcHJvdGVjdCBmbGFnOiBleHRlbmQgY2hhbmdlIHRvIGVuZCBvZiBncm93c3VwIHZtYSAqLworCisjZGVmaW5lIE1BUF9TSEFSRUQJMHgwMQkJLyogU2hhcmUgY2hhbmdlcyAqLworI2RlZmluZSBNQVBfUFJJVkFURQkweDAyCQkvKiBDaGFuZ2VzIGFyZSBwcml2YXRlICovCisjZGVmaW5lIE1BUF9UWVBFCTB4MGYJCS8qIE1hc2sgZm9yIHR5cGUgb2YgbWFwcGluZyAqLworI2RlZmluZSBNQVBfRklYRUQJMHgxMAkJLyogSW50ZXJwcmV0IGFkZHIgZXhhY3RseSAqLworI2RlZmluZSBNQVBfQU5PTllNT1VTCTB4MjAJCS8qIGRvbid0IHVzZSBhIGZpbGUgKi8KKyNkZWZpbmUgTUFQX1JFTkFNRSAgICAgIE1BUF9BTk9OWU1PVVMgICAvKiBJbiBTdW5PUyB0ZXJtaW5vbG9neSAqLworI2RlZmluZSBNQVBfTk9SRVNFUlZFICAgMHg0MCAgICAgICAgICAgIC8qIGRvbid0IHJlc2VydmUgc3dhcCBwYWdlcyAqLworI2RlZmluZSBNQVBfTE9DS0VECTB4ODAKKworI2RlZmluZSBNQVBfR1JPV1NET1dOCTB4MDEwMAkJLyogc3RhY2stbGlrZSBzZWdtZW50ICovCisjZGVmaW5lIE1BUF9ERU5ZV1JJVEUJMHgwODAwCQkvKiBFVFhUQlNZICovCisjZGVmaW5lIE1BUF9FWEVDVVRBQkxFCTB4MTAwMAkJLyogbWFyayBpdCBhcyBhbiBleGVjdXRhYmxlICovCisjZGVmaW5lIE1BUF9QT1BVTEFURQkweDgwMDAJCS8qIHBvcHVsYXRlIChwcmVmYXVsdCkgcGFnZXRhYmxlcyAqLworI2RlZmluZSBNQVBfTk9OQkxPQ0sJMHgxMDAwMAkJLyogZG8gbm90IGJsb2NrIG9uIElPICovCisKKyNkZWZpbmUgTVNfQVNZTkMJMQkJLyogc3luYyBtZW1vcnkgYXN5bmNocm9ub3VzbHkgKi8KKyNkZWZpbmUgTVNfSU5WQUxJREFURQkyCQkvKiBpbnZhbGlkYXRlIHRoZSBjYWNoZXMgKi8KKyNkZWZpbmUgTVNfU1lOQwkJNAkJLyogc3luY2hyb25vdXMgbWVtb3J5IHN5bmMgKi8KKworI2RlZmluZSBNQ0xfQ1VSUkVOVCAgICAgMHgyMDAwICAgICAgICAgIC8qIGxvY2sgYWxsIGN1cnJlbnRseSBtYXBwZWQgcGFnZXMgKi8KKyNkZWZpbmUgTUNMX0ZVVFVSRSAgICAgIDB4NDAwMCAgICAgICAgICAvKiBsb2NrIGFsbCBhZGRpdGlvbnMgdG8gYWRkcmVzcyBzcGFjZSAqLworCisjZGVmaW5lIE1BRFZfTk9STUFMCTB4MAkJLyogZGVmYXVsdCBwYWdlLWluIGJlaGF2aW9yICovCisjZGVmaW5lIE1BRFZfUkFORE9NCTB4MQkJLyogcGFnZS1pbiBtaW5pbXVtIHJlcXVpcmVkICovCisjZGVmaW5lIE1BRFZfU0VRVUVOVElBTAkweDIJCS8qIHJlYWQtYWhlYWQgYWdncmVzc2l2ZWx5ICovCisjZGVmaW5lIE1BRFZfV0lMTE5FRUQJMHgzCQkvKiBwcmUtZmF1bHQgcGFnZXMgKi8KKyNkZWZpbmUgTUFEVl9ET05UTkVFRAkweDQJCS8qIGRpc2NhcmQgdGhlc2UgcGFnZXMgKi8KKworLyogY29tcGF0aWJpbGl0eSBmbGFncyAqLworI2RlZmluZSBNQVBfQU5PTglNQVBfQU5PTllNT1VTCisjZGVmaW5lIE1BUF9GSUxFCTAKKworI2VuZGlmIC8qIF9fUFBDX01NQU5fSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvbW11LmggYi9pbmNsdWRlL2FzbS1wcGMvbW11LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGEwYzY3ZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9tbXUuaApAQCAtMCwwICsxLDQ1NCBAQAorLyoKKyAqIFBvd2VyUEMgbWVtb3J5IG1hbmFnZW1lbnQgc3RydWN0dXJlcworICovCisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaWZuZGVmIF9QUENfTU1VX0hfCisjZGVmaW5lIF9QUENfTU1VX0hfCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworLyoKKyAqIERlZmluZSBwaHlzaWNhbCBhZGRyZXNzIHR5cGUuICBNYWNoaW5lcyB1c2luZyBzcGxpdCBzaXplCisgKiB2aXJ0dWFsL3BoeXNpY2FsIGFkZHJlc3NpbmcgbGlrZSAzMi1iaXQgdmlydHVhbCAvIDM2LWJpdAorICogcGh5c2ljYWwgbmVlZCBhIGxhcmdlciB0aGFuIG5hdGl2ZSB3b3JkIHNpemUgdHlwZS4gLU1hdHQKKyAqLworI2lmbmRlZiBDT05GSUdfUFRFXzY0QklUCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyX3Q7CisjZWxzZQordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgcGh5c19hZGRyX3Q7CitleHRlcm4gcGh5c19hZGRyX3QgZml4dXBfYmlncGh5c19hZGRyKHBoeXNfYWRkcl90LCBwaHlzX2FkZHJfdCk7CisjZW5kaWYKKworLyogRGVmYXVsdCAidW5zaWduZWQgbG9uZyIgY29udGV4dCAqLwordHlwZWRlZiB1bnNpZ25lZCBsb25nIG1tX2NvbnRleHRfdDsKKworLyogSGFyZHdhcmUgUGFnZSBUYWJsZSBFbnRyeSAqLwordHlwZWRlZiBzdHJ1Y3QgX1BURSB7CisjaWZkZWYgQ09ORklHX1BQQzY0QlJJREdFCisJdW5zaWduZWQgbG9uZyBsb25nIHZzaWQ6NTI7CisJdW5zaWduZWQgbG9uZyBhcGk6NTsKKwl1bnNpZ25lZCBsb25nIDo1OworCXVuc2lnbmVkIGxvbmcgaDoxOworCXVuc2lnbmVkIGxvbmcgdjoxOworCXVuc2lnbmVkIGxvbmcgbG9uZyBycG46NTI7CisjZWxzZSAvKiBDT05GSUdfUFBDNjRCUklER0UgKi8KKwl1bnNpZ25lZCBsb25nIHY6MTsJLyogRW50cnkgaXMgdmFsaWQgKi8KKwl1bnNpZ25lZCBsb25nIHZzaWQ6MjQ7CS8qIFZpcnR1YWwgc2VnbWVudCBpZGVudGlmaWVyICovCisJdW5zaWduZWQgbG9uZyBoOjE7CS8qIEhhc2ggYWxnb3JpdGhtIGluZGljYXRvciAqLworCXVuc2lnbmVkIGxvbmcgYXBpOjY7CS8qIEFiYnJldmlhdGVkIHBhZ2UgaW5kZXggKi8KKwl1bnNpZ25lZCBsb25nIHJwbjoyMDsJLyogUmVhbCAocGh5c2ljYWwpIHBhZ2UgbnVtYmVyICovCisjZW5kaWYgLyogQ09ORklHX1BQQzY0QlJJREdFICovCisJdW5zaWduZWQgbG9uZyAgICA6MzsJLyogVW51c2VkICovCisJdW5zaWduZWQgbG9uZyByOjE7CS8qIFJlZmVyZW5jZWQgKi8KKwl1bnNpZ25lZCBsb25nIGM6MTsJLyogQ2hhbmdlZCAqLworCXVuc2lnbmVkIGxvbmcgdzoxOwkvKiBXcml0ZS10aHJ1IGNhY2hlIG1vZGUgKi8KKwl1bnNpZ25lZCBsb25nIGk6MTsJLyogQ2FjaGUgaW5oaWJpdGVkICovCisJdW5zaWduZWQgbG9uZyBtOjE7CS8qIE1lbW9yeSBjb2hlcmVuY2UgKi8KKwl1bnNpZ25lZCBsb25nIGc6MTsJLyogR3VhcmRlZCAqLworCXVuc2lnbmVkIGxvbmcgIDoxOwkvKiBVbnVzZWQgKi8KKwl1bnNpZ25lZCBsb25nIHBwOjI7CS8qIFBhZ2UgcHJvdGVjdGlvbiAqLworfSBQVEU7CisKKy8qIFZhbHVlcyBmb3IgUFAgKGFzc3VtZXMgS3M9MCwgS3A9MSkgKi8KKyNkZWZpbmUgUFBfUldYWAkwCS8qIFN1cGVydmlzb3IgcmVhZC93cml0ZSwgVXNlciBub25lICovCisjZGVmaW5lIFBQX1JXUlggMQkvKiBTdXBlcnZpc29yIHJlYWQvd3JpdGUsIFVzZXIgcmVhZCAqLworI2RlZmluZSBQUF9SV1JXIDIJLyogU3VwZXJ2aXNvciByZWFkL3dyaXRlLCBVc2VyIHJlYWQvd3JpdGUgKi8KKyNkZWZpbmUgUFBfUlhSWCAzCS8qIFN1cGVydmlzb3IgcmVhZCwgICAgICAgVXNlciByZWFkICovCisKKy8qIFNlZ21lbnQgUmVnaXN0ZXIgKi8KK3R5cGVkZWYgc3RydWN0IF9TRUdSRUcgeworCXVuc2lnbmVkIGxvbmcgdDoxOwkvKiBOb3JtYWwgb3IgSS9PICB0eXBlICovCisJdW5zaWduZWQgbG9uZyBrczoxOwkvKiBTdXBlcnZpc29yICdrZXknIChub3JtYWxseSAwKSAqLworCXVuc2lnbmVkIGxvbmcga3A6MTsJLyogVXNlciAna2V5JyAobm9ybWFsbHkgMSkgKi8KKwl1bnNpZ25lZCBsb25nIG46MTsJLyogTm8tZXhlY3V0ZSAqLworCXVuc2lnbmVkIGxvbmcgOjQ7CS8qIFVudXNlZCAqLworCXVuc2lnbmVkIGxvbmcgdnNpZDoyNDsJLyogVmlydHVhbCBTZWdtZW50IElkZW50aWZpZXIgKi8KK30gU0VHUkVHOworCisvKiBCbG9jayBBZGRyZXNzIFRyYW5zbGF0aW9uIChCQVQpIFJlZ2lzdGVycyAqLwordHlwZWRlZiBzdHJ1Y3QgX1A2MDFfQkFUVSB7CS8qIFVwcGVyIHBhcnQgb2YgQkFUIGZvciA2MDEgcHJvY2Vzc29yICovCisJdW5zaWduZWQgbG9uZyBiZXBpOjE1OwkvKiBFZmZlY3RpdmUgcGFnZSBpbmRleCAodmlydHVhbCBhZGRyZXNzKSAqLworCXVuc2lnbmVkIGxvbmcgOjg7CS8qIHVudXNlZCAqLworCXVuc2lnbmVkIGxvbmcgdzoxOworCXVuc2lnbmVkIGxvbmcgaToxOwkvKiBDYWNoZSBpbmhpYml0ICovCisJdW5zaWduZWQgbG9uZyBtOjE7CS8qIE1lbW9yeSBjb2hlcmVuY2UgKi8KKwl1bnNpZ25lZCBsb25nIGtzOjE7CS8qIFN1cGVydmlzb3Iga2V5IChub3JtYWxseSAwKSAqLworCXVuc2lnbmVkIGxvbmcga3A6MTsJLyogVXNlciBrZXkgKG5vcm1hbGx5IDEpICovCisJdW5zaWduZWQgbG9uZyBwcDoyOwkvKiBQYWdlIGFjY2VzcyBwcm90ZWN0aW9ucyAqLworfSBQNjAxX0JBVFU7CisKK3R5cGVkZWYgc3RydWN0IF9CQVRVIHsJCS8qIFVwcGVyIHBhcnQgb2YgQkFUIChhbGwgZXhjZXB0IDYwMSkgKi8KKyNpZmRlZiBDT05GSUdfUFBDNjRCUklER0UKKwl1bnNpZ25lZCBsb25nIGxvbmcgYmVwaTo0NzsKKyNlbHNlIC8qIENPTkZJR19QUEM2NEJSSURHRSAqLworCXVuc2lnbmVkIGxvbmcgYmVwaToxNTsJLyogRWZmZWN0aXZlIHBhZ2UgaW5kZXggKHZpcnR1YWwgYWRkcmVzcykgKi8KKyNlbmRpZiAvKiBDT05GSUdfUFBDNjRCUklER0UgKi8KKwl1bnNpZ25lZCBsb25nIDo0OwkvKiBVbnVzZWQgKi8KKwl1bnNpZ25lZCBsb25nIGJsOjExOwkvKiBCbG9jayBzaXplIG1hc2sgKi8KKwl1bnNpZ25lZCBsb25nIHZzOjE7CS8qIFN1cGVydmlzb3IgdmFsaWQgKi8KKwl1bnNpZ25lZCBsb25nIHZwOjE7CS8qIFVzZXIgdmFsaWQgKi8KK30gQkFUVTsKKwordHlwZWRlZiBzdHJ1Y3QgX1A2MDFfQkFUTCB7CS8qIExvd2VyIHBhcnQgb2YgQkFUIGZvciA2MDEgcHJvY2Vzc29yICovCisJdW5zaWduZWQgbG9uZyBicnBuOjE1OwkvKiBSZWFsIHBhZ2UgaW5kZXggKHBoeXNpY2FsIGFkZHJlc3MpICovCisJdW5zaWduZWQgbG9uZyA6MTA7CS8qIFVudXNlZCAqLworCXVuc2lnbmVkIGxvbmcgdjoxOwkvKiBWYWxpZCBiaXQgKi8KKwl1bnNpZ25lZCBsb25nIGJsOjY7CS8qIEJsb2NrIHNpemUgbWFzayAqLworfSBQNjAxX0JBVEw7CisKK3R5cGVkZWYgc3RydWN0IF9CQVRMIHsJCS8qIExvd2VyIHBhcnQgb2YgQkFUIChhbGwgZXhjZXB0IDYwMSkgKi8KKyNpZmRlZiBDT05GSUdfUFBDNjRCUklER0UKKwl1bnNpZ25lZCBsb25nIGxvbmcgYnJwbjo0NzsKKyNlbHNlIC8qIENPTkZJR19QUEM2NEJSSURHRSAqLworCXVuc2lnbmVkIGxvbmcgYnJwbjoxNTsJLyogUmVhbCBwYWdlIGluZGV4IChwaHlzaWNhbCBhZGRyZXNzKSAqLworI2VuZGlmIC8qIENPTkZJR19QUEM2NEJSSURHRSAqLworCXVuc2lnbmVkIGxvbmcgOjEwOwkvKiBVbnVzZWQgKi8KKwl1bnNpZ25lZCBsb25nIHc6MTsJLyogV3JpdGUtdGhydSBjYWNoZSAqLworCXVuc2lnbmVkIGxvbmcgaToxOwkvKiBDYWNoZSBpbmhpYml0ICovCisJdW5zaWduZWQgbG9uZyBtOjE7CS8qIE1lbW9yeSBjb2hlcmVuY2UgKi8KKwl1bnNpZ25lZCBsb25nIGc6MTsJLyogR3VhcmRlZCAoTUJaIGluIElCQVQpICovCisJdW5zaWduZWQgbG9uZyA6MTsJLyogVW51c2VkICovCisJdW5zaWduZWQgbG9uZyBwcDoyOwkvKiBQYWdlIGFjY2VzcyBwcm90ZWN0aW9ucyAqLworfSBCQVRMOworCit0eXBlZGVmIHN0cnVjdCBfQkFUIHsKKwlCQVRVIGJhdHU7CQkvKiBVcHBlciByZWdpc3RlciAqLworCUJBVEwgYmF0bDsJCS8qIExvd2VyIHJlZ2lzdGVyICovCit9IEJBVDsKKwordHlwZWRlZiBzdHJ1Y3QgX1A2MDFfQkFUIHsKKwlQNjAxX0JBVFUgYmF0dTsJCS8qIFVwcGVyIHJlZ2lzdGVyICovCisJUDYwMV9CQVRMIGJhdGw7CQkvKiBMb3dlciByZWdpc3RlciAqLworfSBQNjAxX0JBVDsKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisvKiBCbG9jayBzaXplIG1hc2tzICovCisjZGVmaW5lIEJMXzEyOEsJMHgwMDAKKyNkZWZpbmUgQkxfMjU2SyAweDAwMQorI2RlZmluZSBCTF81MTJLIDB4MDAzCisjZGVmaW5lIEJMXzFNICAgMHgwMDcKKyNkZWZpbmUgQkxfMk0gICAweDAwRgorI2RlZmluZSBCTF80TSAgIDB4MDFGCisjZGVmaW5lIEJMXzhNICAgMHgwM0YKKyNkZWZpbmUgQkxfMTZNICAweDA3RgorI2RlZmluZSBCTF8zMk0gIDB4MEZGCisjZGVmaW5lIEJMXzY0TSAgMHgxRkYKKyNkZWZpbmUgQkxfMTI4TSAweDNGRgorI2RlZmluZSBCTF8yNTZNIDB4N0ZGCisKKy8qIEJBVCBBY2Nlc3MgUHJvdGVjdGlvbiAqLworI2RlZmluZSBCUFBfWFgJMHgwMAkJLyogTm8gYWNjZXNzICovCisjZGVmaW5lIEJQUF9SWAkweDAxCQkvKiBSZWFkIG9ubHkgKi8KKyNkZWZpbmUgQlBQX1JXCTB4MDIJCS8qIFJlYWQvd3JpdGUgKi8KKworLyogQ29udHJvbC9zdGF0dXMgcmVnaXN0ZXJzIGZvciB0aGUgTVBDOHh4LgorICogQSB3cml0ZSBvcGVyYXRpb24gdG8gdGhlc2UgcmVnaXN0ZXJzIGNhdXNlcyBzZXJpYWxpemVkIGFjY2Vzcy4KKyAqIER1cmluZyBzb2Z0d2FyZSB0YWJsZXdhbGssIHRoZSByZWdpc3RlcnMgdXNlZCBwZXJmb3JtIG1hc2svc2hpZnQtYWRkCisgKiBvcGVyYXRpb25zIHdoZW4gd3JpdHRlbi9yZWFkLiAgQSBUTEIgZW50cnkgaXMgY3JlYXRlZCB3aGVuIHRoZSBNeF9SUE4KKyAqIGlzIHdyaXR0ZW4sIGFuZCB0aGUgY29udGVudHMgb2Ygc2V2ZXJhbCByZWdpc3RlcnMgYXJlIHVzZWQgdG8KKyAqIGNyZWF0ZSB0aGUgZW50cnkuCisgKi8KKyNkZWZpbmUgU1BSTl9NSV9DVFIJNzg0CS8qIEluc3RydWN0aW9uIFRMQiBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIE1JX0dQTQkJMHg4MDAwMDAwMAkvKiBTZXQgZG9tYWluIG1hbmFnZXIgbW9kZSAqLworI2RlZmluZSBNSV9QUE0JCTB4NDAwMDAwMDAJLyogU2V0IHN1YnBhZ2UgcHJvdGVjdGlvbiAqLworI2RlZmluZSBNSV9DSURFRgkweDIwMDAwMDAwCS8qIFNldCBjYWNoZSBpbmhpYml0IHdoZW4gTU1VIGRpcyAqLworI2RlZmluZSBNSV9SU1Y0SQkweDA4MDAwMDAwCS8qIFJlc2VydmUgNCBUTEIgZW50cmllcyAqLworI2RlZmluZSBNSV9QUENTCQkweDAyMDAwMDAwCS8qIFVzZSBNSV9SUE4gcHJvYi9wcml2IHN0YXRlICovCisjZGVmaW5lIE1JX0lEWE1BU0sJMHgwMDAwMWYwMAkvKiBUTEIgaW5kZXggdG8gYmUgbG9hZGVkICovCisjZGVmaW5lIE1JX1JFU0VUVkFMCTB4MDAwMDAwMDAJLyogVmFsdWUgb2YgcmVnaXN0ZXIgYXQgcmVzZXQgKi8KKworLyogVGhlc2UgYXJlIHRoZSBLcyBhbmQgS3AgZnJvbSB0aGUgUG93ZXJQQyBib29rcy4gIEZvciBwcm9wZXIgb3BlcmF0aW9uLAorICogS3MgPSAwLCBLcCA9IDEuCisgKi8KKyNkZWZpbmUgU1BSTl9NSV9BUAk3ODYKKyNkZWZpbmUgTUlfS3MJCTB4ODAwMDAwMDAJLyogU2hvdWxkIG5vdCBiZSBzZXQgKi8KKyNkZWZpbmUgTUlfS3AJCTB4NDAwMDAwMDAJLyogU2hvdWxkIGFsd2F5cyBiZSBzZXQgKi8KKworLyogVGhlIGVmZmVjdGl2ZSBwYWdlIG51bWJlciByZWdpc3Rlci4gIFdoZW4gcmVhZCwgY29udGFpbnMgdGhlIGluZm9ybWF0aW9uCisgKiBhYm91dCB0aGUgbGFzdCBpbnN0cnVjdGlvbiBUTEIgbWlzcy4gIFdoZW4gTUlfUlBOIGlzIHdyaXR0ZW4sIGJpdHMgaW4KKyAqIHRoaXMgcmVnaXN0ZXIgYXJlIHVzZWQgdG8gY3JlYXRlIHRoZSBUTEIgZW50cnkuCisgKi8KKyNkZWZpbmUgU1BSTl9NSV9FUE4JNzg3CisjZGVmaW5lIE1JX0VQTk1BU0sJMHhmZmZmZjAwMAkvKiBFZmZlY3RpdmUgcGFnZSBudW1iZXIgZm9yIGVudHJ5ICovCisjZGVmaW5lIE1JX0VWQUxJRAkweDAwMDAwMjAwCS8qIEVudHJ5IGlzIHZhbGlkICovCisjZGVmaW5lIE1JX0FTSURNQVNLCTB4MDAwMDAwMGYJLyogQVNJRCBtYXRjaCB2YWx1ZSAqLworCQkJCQkvKiBSZXNldCB2YWx1ZSBpcyB1bmRlZmluZWQgKi8KKworLyogQSAibGV2ZWwgMSIgb3IgInNlZ21lbnQiIG9yIHdoYXRldmVyIHlvdSB3YW50IHRvIGNhbGwgaXQgcmVnaXN0ZXIuCisgKiBGb3IgdGhlIGluc3RydWN0aW9uIFRMQiwgaXQgY29udGFpbnMgYml0cyB0aGF0IGdldCBsb2FkZWQgaW50byB0aGUKKyAqIFRMQiBlbnRyeSB3aGVuIHRoZSBNSV9SUE4gaXMgd3JpdHRlbi4KKyAqLworI2RlZmluZSBTUFJOX01JX1RXQwk3ODkKKyNkZWZpbmUgTUlfQVBHCQkweDAwMDAwMWUwCS8qIEFjY2VzcyBwcm90ZWN0aW9uIGdyb3VwICgwKSAqLworI2RlZmluZSBNSV9HVUFSREVECTB4MDAwMDAwMTAJLyogR3VhcmRlZCBzdG9yYWdlICovCisjZGVmaW5lIE1JX1BTTUFTSwkweDAwMDAwMDBjCS8qIE1hc2sgb2YgcGFnZSBzaXplIGJpdHMgKi8KKyNkZWZpbmUgTUlfUFM4TUVHCTB4MDAwMDAwMGMJLyogOE0gcGFnZSBzaXplICovCisjZGVmaW5lIE1JX1BTNTEySwkweDAwMDAwMDA0CS8qIDUxMksgcGFnZSBzaXplICovCisjZGVmaW5lIE1JX1BTNEtfMTZLCTB4MDAwMDAwMDAJLyogNEsgb3IgMTZLIHBhZ2Ugc2l6ZSAqLworI2RlZmluZSBNSV9TVkFMSUQJMHgwMDAwMDAwMQkvKiBTZWdtZW50IGVudHJ5IGlzIHZhbGlkICovCisJCQkJCS8qIFJlc2V0IHZhbHVlIGlzIHVuZGVmaW5lZCAqLworCisvKiBSZWFsIHBhZ2UgbnVtYmVyLiAgRGVmaW5lZCBieSB0aGUgcHRlLiAgV3JpdGluZyB0aGlzIHJlZ2lzdGVyCisgKiBjYXVzZXMgYSBUTEIgZW50cnkgdG8gYmUgY3JlYXRlZCBmb3IgdGhlIGluc3RydWN0aW9uIFRMQiwgdXNpbmcKKyAqIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gZnJvbSB0aGUgTUlfRVBOLCBhbmQgTUlfVFdDIHJlZ2lzdGVycy4KKyAqLworI2RlZmluZSBTUFJOX01JX1JQTgk3OTAKKworLyogRGVmaW5lIGFuIFJQTiB2YWx1ZSBmb3IgbWFwcGluZyBrZXJuZWwgbWVtb3J5IHRvIGxhcmdlIHZpcnR1YWwKKyAqIHBhZ2VzIGZvciBib290IGluaXRpYWxpemF0aW9uLiAgVGhpcyBoYXMgcmVhbCBwYWdlIG51bWJlciBvZiAwLAorICogbGFyZ2UgcGFnZSBzaXplLCBzaGFyZWQgcGFnZSwgY2FjaGUgZW5hYmxlZCwgYW5kIHZhbGlkLgorICogQWxzbyBtYXJrIGFsbCBzdWJwYWdlcyB2YWxpZCBhbmQgd3JpdGUgYWNjZXNzLgorICovCisjZGVmaW5lIE1JX0JPT1RJTklUCTB4MDAwMDAxZmQKKworI2RlZmluZSBTUFJOX01EX0NUUgk3OTIJLyogRGF0YSBUTEIgY29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBNRF9HUE0JCTB4ODAwMDAwMDAJLyogU2V0IGRvbWFpbiBtYW5hZ2VyIG1vZGUgKi8KKyNkZWZpbmUgTURfUFBNCQkweDQwMDAwMDAwCS8qIFNldCBzdWJwYWdlIHByb3RlY3Rpb24gKi8KKyNkZWZpbmUgTURfQ0lERUYJMHgyMDAwMDAwMAkvKiBTZXQgY2FjaGUgaW5oaWJpdCB3aGVuIE1NVSBkaXMgKi8KKyNkZWZpbmUgTURfV1RERUYJMHgxMDAwMDAwMAkvKiBTZXQgd3JpdGV0aHJvdWdoIHdoZW4gTU1VIGRpcyAqLworI2RlZmluZSBNRF9SU1Y0SQkweDA4MDAwMDAwCS8qIFJlc2VydmUgNCBUTEIgZW50cmllcyAqLworI2RlZmluZSBNRF9UV0FNCQkweDA0MDAwMDAwCS8qIFVzZSA0SyBwYWdlIGhhcmR3YXJlIGFzc2lzdCAqLworI2RlZmluZSBNRF9QUENTCQkweDAyMDAwMDAwCS8qIFVzZSBNSV9SUE4gcHJvYi9wcml2IHN0YXRlICovCisjZGVmaW5lIE1EX0lEWE1BU0sJMHgwMDAwMWYwMAkvKiBUTEIgaW5kZXggdG8gYmUgbG9hZGVkICovCisjZGVmaW5lIE1EX1JFU0VUVkFMCTB4MDQwMDAwMDAJLyogVmFsdWUgb2YgcmVnaXN0ZXIgYXQgcmVzZXQgKi8KKworI2RlZmluZSBTUFJOX01fQ0FTSUQJNzkzCS8qIEFkZHJlc3Mgc3BhY2UgSUQgKGNvbnRleHQpIHRvIG1hdGNoICovCisjZGVmaW5lIE1DX0FTSURNQVNLCTB4MDAwMDAwMGYJLyogQml0cyB1c2VkIGZvciBBU0lEIHZhbHVlICovCisKKworLyogVGhlc2UgYXJlIHRoZSBLcyBhbmQgS3AgZnJvbSB0aGUgUG93ZXJQQyBib29rcy4gIEZvciBwcm9wZXIgb3BlcmF0aW9uLAorICogS3MgPSAwLCBLcCA9IDEuCisgKi8KKyNkZWZpbmUgU1BSTl9NRF9BUAk3OTQKKyNkZWZpbmUgTURfS3MJCTB4ODAwMDAwMDAJLyogU2hvdWxkIG5vdCBiZSBzZXQgKi8KKyNkZWZpbmUgTURfS3AJCTB4NDAwMDAwMDAJLyogU2hvdWxkIGFsd2F5cyBiZSBzZXQgKi8KKworLyogVGhlIGVmZmVjdGl2ZSBwYWdlIG51bWJlciByZWdpc3Rlci4gIFdoZW4gcmVhZCwgY29udGFpbnMgdGhlIGluZm9ybWF0aW9uCisgKiBhYm91dCB0aGUgbGFzdCBpbnN0cnVjdGlvbiBUTEIgbWlzcy4gIFdoZW4gTURfUlBOIGlzIHdyaXR0ZW4sIGJpdHMgaW4KKyAqIHRoaXMgcmVnaXN0ZXIgYXJlIHVzZWQgdG8gY3JlYXRlIHRoZSBUTEIgZW50cnkuCisgKi8KKyNkZWZpbmUgU1BSTl9NRF9FUE4JNzk1CisjZGVmaW5lIE1EX0VQTk1BU0sJMHhmZmZmZjAwMAkvKiBFZmZlY3RpdmUgcGFnZSBudW1iZXIgZm9yIGVudHJ5ICovCisjZGVmaW5lIE1EX0VWQUxJRAkweDAwMDAwMjAwCS8qIEVudHJ5IGlzIHZhbGlkICovCisjZGVmaW5lIE1EX0FTSURNQVNLCTB4MDAwMDAwMGYJLyogQVNJRCBtYXRjaCB2YWx1ZSAqLworCQkJCQkvKiBSZXNldCB2YWx1ZSBpcyB1bmRlZmluZWQgKi8KKworLyogVGhlIHBvaW50ZXIgdG8gdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgZmlyc3QgbGV2ZWwgcGFnZSB0YWJsZS4KKyAqIER1cmluZyBhIHNvZnR3YXJlIHRhYmxld2FsaywgcmVhZGluZyB0aGlzIHJlZ2lzdGVyIHByb3ZpZGVzIHRoZSBhZGRyZXNzCisgKiBvZiB0aGUgZW50cnkgYXNzb2NpYXRlZCB3aXRoIE1EX0VQTi4KKyAqLworI2RlZmluZSBTUFJOX01fVFdCCTc5NgorI2RlZmluZQlNX0wxVEIJCTB4ZmZmZmYwMDAJLyogTGV2ZWwgMSB0YWJsZSBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgTV9MMUlORFgJMHgwMDAwMGZmYwkvKiBMZXZlbCAxIGluZGV4LCB3aGVuIHJlYWQgKi8KKwkJCQkJLyogUmVzZXQgdmFsdWUgaXMgdW5kZWZpbmVkICovCisKKy8qIEEgImxldmVsIDEiIG9yICJzZWdtZW50IiBvciB3aGF0ZXZlciB5b3Ugd2FudCB0byBjYWxsIGl0IHJlZ2lzdGVyLgorICogRm9yIHRoZSBkYXRhIFRMQiwgaXQgY29udGFpbnMgYml0cyB0aGF0IGdldCBsb2FkZWQgaW50byB0aGUgVExCIGVudHJ5CisgKiB3aGVuIHRoZSBNRF9SUE4gaXMgd3JpdHRlbi4gIEl0IGlzIGFsc28gcHJvdmlkZXMgdGhlIGhhcmR3YXJlIGFzc2lzdAorICogZm9yIGZpbmRpbmcgdGhlIFBURSBhZGRyZXNzIGR1cmluZyBzb2Z0d2FyZSB0YWJsZXdhbGsuCisgKi8KKyNkZWZpbmUgU1BSTl9NRF9UV0MJNzk3CisjZGVmaW5lIE1EX0wyVEIJCTB4ZmZmZmYwMDAJLyogTGV2ZWwgMiB0YWJsZSBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgTURfTDJJTkRYCTB4ZmZmZmZlMDAJLyogTGV2ZWwgMiBpbmRleCAoKnB0ZSksIHdoZW4gcmVhZCAqLworI2RlZmluZSBNRF9BUEcJCTB4MDAwMDAxZTAJLyogQWNjZXNzIHByb3RlY3Rpb24gZ3JvdXAgKDApICovCisjZGVmaW5lIE1EX0dVQVJERUQJMHgwMDAwMDAxMAkvKiBHdWFyZGVkIHN0b3JhZ2UgKi8KKyNkZWZpbmUgTURfUFNNQVNLCTB4MDAwMDAwMGMJLyogTWFzayBvZiBwYWdlIHNpemUgYml0cyAqLworI2RlZmluZSBNRF9QUzhNRUcJMHgwMDAwMDAwYwkvKiA4TSBwYWdlIHNpemUgKi8KKyNkZWZpbmUgTURfUFM1MTJLCTB4MDAwMDAwMDQJLyogNTEySyBwYWdlIHNpemUgKi8KKyNkZWZpbmUgTURfUFM0S18xNksJMHgwMDAwMDAwMAkvKiA0SyBvciAxNksgcGFnZSBzaXplICovCisjZGVmaW5lIE1EX1dUCQkweDAwMDAwMDAyCS8qIFVzZSB3cml0ZXRocm91Z2ggcGFnZSBhdHRyaWJ1dGUgKi8KKyNkZWZpbmUgTURfU1ZBTElECTB4MDAwMDAwMDEJLyogU2VnbWVudCBlbnRyeSBpcyB2YWxpZCAqLworCQkJCQkvKiBSZXNldCB2YWx1ZSBpcyB1bmRlZmluZWQgKi8KKworCisvKiBSZWFsIHBhZ2UgbnVtYmVyLiAgRGVmaW5lZCBieSB0aGUgcHRlLiAgV3JpdGluZyB0aGlzIHJlZ2lzdGVyCisgKiBjYXVzZXMgYSBUTEIgZW50cnkgdG8gYmUgY3JlYXRlZCBmb3IgdGhlIGRhdGEgVExCLCB1c2luZworICogYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBNRF9FUE4sIGFuZCBNRF9UV0MgcmVnaXN0ZXJzLgorICovCisjZGVmaW5lIFNQUk5fTURfUlBOCTc5OAorCisvKiBUaGlzIGlzIGEgdGVtcG9yYXJ5IHN0b3JhZ2UgcmVnaXN0ZXIgdGhhdCBjb3VsZCBiZSB1c2VkIHRvIHNhdmUKKyAqIGEgcHJvY2Vzc29yIHdvcmtpbmcgcmVnaXN0ZXIgZHVyaW5nIGEgdGFibGV3YWxrLgorICovCisjZGVmaW5lIFNQUk5fTV9UVwk3OTkKKworLyoKKyAqIEF0IHByZXNlbnQsIGFsbCBQb3dlclBDIDQwMC1jbGFzcyBwcm9jZXNzb3JzIHNoYXJlIGEgc2ltaWxhciBUTEIKKyAqIGFyY2hpdGVjdHVyZS4gVGhlIGluc3RydWN0aW9uIGFuZCBkYXRhIHNpZGVzIHNoYXJlIGEgdW5pZmllZCwKKyAqIDY0LWVudHJ5LCBmdWxseS1hc3NvY2lhdGl2ZSBUTEIgd2hpY2ggaXMgbWFpbnRhaW5lZCB0b3RhbGx5IHVuZGVyCisgKiBzb2Z0d2FyZSBjb250cm9sLiBJbiBhZGRpdGlvbiwgdGhlIGluc3RydWN0aW9uIHNpZGUgaGFzIGEKKyAqIGhhcmR3YXJlLW1hbmFnZWQsIDQtZW50cnksIGZ1bGx5LSBhc3NvY2lhdGl2ZSBUTEIgd2hpY2ggc2VydmVzIGFzIGEKKyAqIGZpcnN0IGxldmVsIHRvIHRoZSBzaGFyZWQgVExCLiBUaGVzZSB0d28gVExCcyBhcmUga25vd24gYXMgdGhlIFVUTEIKKyAqIGFuZCBJVExCLCByZXNwZWN0aXZlbHkuCisgKi8KKworI2RlZmluZSAgICAgICAgUFBDNFhYX1RMQl9TSVpFIDY0CisKKy8qCisgKiBUTEIgZW50cmllcyBhcmUgZGVmaW5lZCBieSBhICJoaWdoIiB0YWcgcG9ydGlvbiBhbmQgYSAibG93IiBkYXRhCisgKiBwb3J0aW9uLiAgT24gYWxsIGFyY2hpdGVjdHVyZXMsIHRoZSBkYXRhIHBvcnRpb24gaXMgMzItYml0cy4KKyAqCisgKiBUTEIgZW50cmllcyBhcmUgbWFuYWdlZCBlbnRpcmVseSB1bmRlciBzb2Z0d2FyZSBjb250cm9sIGJ5IHJlYWRpbmcsCisgKiB3cml0aW5nLCBhbmQgc2VhcmNob2luZyB1c2luZyB0aGUgNHh4LXNwZWNpZmljIHRsYnJlLCB0bGJ3ciwgYW5kIHRsYnN4CisgKiBpbnN0cnVjdGlvbnMuCisgKi8KKworI2RlZmluZQlUTEJfTE8gICAgICAgICAgMQorI2RlZmluZQlUTEJfSEkgICAgICAgICAgMAorCisjZGVmaW5lCVRMQl9EQVRBICAgICAgICBUTEJfTE8KKyNkZWZpbmUJVExCX1RBRyAgICAgICAgIFRMQl9ISQorCisvKiBUYWcgcG9ydGlvbiAqLworCisjZGVmaW5lIFRMQl9FUE5fTUFTSyAgICAweEZGRkZGQzAwICAgICAgLyogRWZmZWN0aXZlIFBhZ2UgTnVtYmVyICovCisjZGVmaW5lIFRMQl9QQUdFU1pfTUFTSyAweDAwMDAwMzgwCisjZGVmaW5lIFRMQl9QQUdFU1ooeCkgICAoKCh4KSAmIDB4NykgPDwgNykKKyNkZWZpbmUgICBQQUdFU1pfMUsJCTAKKyNkZWZpbmUgICBQQUdFU1pfNEsgICAgICAgICAgICAgMQorI2RlZmluZSAgIFBBR0VTWl8xNksgICAgICAgICAgICAyCisjZGVmaW5lICAgUEFHRVNaXzY0SyAgICAgICAgICAgIDMKKyNkZWZpbmUgICBQQUdFU1pfMjU2SyAgICAgICAgICAgNAorI2RlZmluZSAgIFBBR0VTWl8xTSAgICAgICAgICAgICA1CisjZGVmaW5lICAgUEFHRVNaXzRNICAgICAgICAgICAgIDYKKyNkZWZpbmUgICBQQUdFU1pfMTZNICAgICAgICAgICAgNworI2RlZmluZSBUTEJfVkFMSUQgICAgICAgMHgwMDAwMDA0MCAgICAgIC8qIEVudHJ5IGlzIHZhbGlkICovCisKKy8qIERhdGEgcG9ydGlvbiAqLworCisjZGVmaW5lIFRMQl9SUE5fTUFTSyAgICAweEZGRkZGQzAwICAgICAgLyogUmVhbCBQYWdlIE51bWJlciAqLworI2RlZmluZSBUTEJfUEVSTV9NQVNLICAgMHgwMDAwMDMwMAorI2RlZmluZSBUTEJfRVggICAgICAgICAgMHgwMDAwMDIwMCAgICAgIC8qIEluc3RydWN0aW9uIGV4ZWN1dGlvbiBhbGxvd2VkICovCisjZGVmaW5lIFRMQl9XUiAgICAgICAgICAweDAwMDAwMTAwICAgICAgLyogV3JpdGVzIHBlcm1pdHRlZCAqLworI2RlZmluZSBUTEJfWlNFTF9NQVNLICAgMHgwMDAwMDBGMAorI2RlZmluZSBUTEJfWlNFTCh4KSAgICAgKCgoeCkgJiAweEYpIDw8IDQpCisjZGVmaW5lIFRMQl9BVFRSX01BU0sgICAweDAwMDAwMDBGCisjZGVmaW5lIFRMQl9XICAgICAgICAgICAweDAwMDAwMDA4ICAgICAgLyogQ2FjaGluZyBpcyB3cml0ZS10aHJvdWdoICovCisjZGVmaW5lIFRMQl9JICAgICAgICAgICAweDAwMDAwMDA0ICAgICAgLyogQ2FjaGluZyBpcyBpbmhpYml0ZWQgKi8KKyNkZWZpbmUgVExCX00gICAgICAgICAgIDB4MDAwMDAwMDIgICAgICAvKiBNZW1vcnkgaXMgY29oZXJlbnQgKi8KKyNkZWZpbmUgVExCX0cgICAgICAgICAgIDB4MDAwMDAwMDEgICAgICAvKiBNZW1vcnkgaXMgZ3VhcmRlZCBmcm9tIHByZWZldGNoICovCisKKy8qCisgKiBQUEM0NDAgc3VwcG9ydAorICovCisjZGVmaW5lIFBQQzQ0eF9NTVVDUl9USUQJMHgwMDAwMDBmZgorI2RlZmluZSBQUEM0NHhfTU1VQ1JfU1RTCTB4MDAwMTAwMDAKKworI2RlZmluZQlQUEM0NHhfVExCX1BBR0VJRAkwCisjZGVmaW5lCVBQQzQ0eF9UTEJfWExBVAkJMQorI2RlZmluZQlQUEM0NHhfVExCX0FUVFJJQgkyCisKKy8qIFBhZ2UgaWRlbnRpZmljYXRpb24gZmllbGRzICovCisjZGVmaW5lIFBQQzQ0eF9UTEJfRVBOX01BU0sJMHhmZmZmZmMwMCAgICAgIC8qIEVmZmVjdGl2ZSBQYWdlIE51bWJlciAqLworI2RlZmluZQlQUEM0NHhfVExCX1ZBTElECTB4MDAwMDAyMDAgICAgICAvKiBWYWxpZCBmbGFnICovCisjZGVmaW5lIFBQQzQ0eF9UTEJfVFMJCTB4MDAwMDAxMDAJLyogVHJhbnNsYXRpb24gYWRkcmVzcyBzcGFjZSAqLworI2RlZmluZSBQUEM0NHhfVExCXzFLCQkweDAwMDAwMDAwCS8qIFBhZ2Ugc2l6ZXMgKi8KKyNkZWZpbmUgUFBDNDR4X1RMQl80SwkJMHgwMDAwMDAxMAorI2RlZmluZSBQUEM0NHhfVExCXzE2SwkJMHgwMDAwMDAyMAorI2RlZmluZSBQUEM0NHhfVExCXzY0SwkJMHgwMDAwMDAzMAorI2RlZmluZSBQUEM0NHhfVExCXzI1NksJCTB4MDAwMDAwNDAKKyNkZWZpbmUgUFBDNDR4X1RMQl8xTQkJMHgwMDAwMDA1MAorI2RlZmluZSBQUEM0NHhfVExCXzE2TQkJMHgwMDAwMDA3MAorI2RlZmluZQlQUEM0NHhfVExCXzI1Nk0JCTB4MDAwMDAwOTAKKworLyogVHJhbnNsYXRpb24gZmllbGRzICovCisjZGVmaW5lIFBQQzQ0eF9UTEJfUlBOX01BU0sJMHhmZmZmZmMwMCAgICAgIC8qIFJlYWwgUGFnZSBOdW1iZXIgKi8KKyNkZWZpbmUJUFBDNDR4X1RMQl9FUlBOX01BU0sJMHgwMDAwMDAwZgorCisvKiBTdG9yYWdlIGF0dHJpYnV0ZSBhbmQgYWNjZXNzIGNvbnRyb2wgZmllbGRzICovCisjZGVmaW5lIFBQQzQ0eF9UTEJfQVRUUl9NQVNLCTB4MDAwMGZmODAKKyNkZWZpbmUgUFBDNDR4X1RMQl9VMAkJMHgwMDAwODAwMCAgICAgIC8qIFVzZXIgMCAqLworI2RlZmluZSBQUEM0NHhfVExCX1UxCQkweDAwMDA0MDAwICAgICAgLyogVXNlciAxICovCisjZGVmaW5lIFBQQzQ0eF9UTEJfVTIJCTB4MDAwMDIwMDAgICAgICAvKiBVc2VyIDIgKi8KKyNkZWZpbmUgUFBDNDR4X1RMQl9VMwkJMHgwMDAwMTAwMCAgICAgIC8qIFVzZXIgMyAqLworI2RlZmluZSBQUEM0NHhfVExCX1cJCTB4MDAwMDA4MDAgICAgICAvKiBDYWNoaW5nIGlzIHdyaXRlLXRocm91Z2ggKi8KKyNkZWZpbmUgUFBDNDR4X1RMQl9JCQkweDAwMDAwNDAwICAgICAgLyogQ2FjaGluZyBpcyBpbmhpYml0ZWQgKi8KKyNkZWZpbmUgUFBDNDR4X1RMQl9NCQkweDAwMDAwMjAwICAgICAgLyogTWVtb3J5IGlzIGNvaGVyZW50ICovCisjZGVmaW5lIFBQQzQ0eF9UTEJfRwkJMHgwMDAwMDEwMCAgICAgIC8qIE1lbW9yeSBpcyBndWFyZGVkICovCisjZGVmaW5lIFBQQzQ0eF9UTEJfRQkJMHgwMDAwMDA4MCAgICAgIC8qIE1lbW9yeSBpcyBndWFyZGVkICovCisKKyNkZWZpbmUgUFBDNDR4X1RMQl9QRVJNX01BU0sJMHgwMDAwMDAzZgorI2RlZmluZSBQUEM0NHhfVExCX1VYCQkweDAwMDAwMDIwICAgICAgLyogVXNlciBleGVjdXRpb24gKi8KKyNkZWZpbmUgUFBDNDR4X1RMQl9VVwkJMHgwMDAwMDAxMCAgICAgIC8qIFVzZXIgd3JpdGUgKi8KKyNkZWZpbmUgUFBDNDR4X1RMQl9VUgkJMHgwMDAwMDAwOCAgICAgIC8qIFVzZXIgcmVhZCAqLworI2RlZmluZSBQUEM0NHhfVExCX1NYCQkweDAwMDAwMDA0ICAgICAgLyogU3VwZXIgZXhlY3V0aW9uICovCisjZGVmaW5lIFBQQzQ0eF9UTEJfU1cJCTB4MDAwMDAwMDIgICAgICAvKiBTdXBlciB3cml0ZSAqLworI2RlZmluZSBQUEM0NHhfVExCX1NSCQkweDAwMDAwMDAxICAgICAgLyogU3VwZXIgcmVhZCAqLworCisvKiBCb29rLUUgZGVmaW5lZCBwYWdlIHNpemVzICovCisjZGVmaW5lIEJPT0tFX1BBR0VTWl8xSwkJMAorI2RlZmluZSBCT09LRV9QQUdFU1pfNEsJCTEKKyNkZWZpbmUgQk9PS0VfUEFHRVNaXzE2SwkyCisjZGVmaW5lIEJPT0tFX1BBR0VTWl82NEsJMworI2RlZmluZSBCT09LRV9QQUdFU1pfMjU2Swk0CisjZGVmaW5lIEJPT0tFX1BBR0VTWl8xTQkJNQorI2RlZmluZSBCT09LRV9QQUdFU1pfNE0JCTYKKyNkZWZpbmUgQk9PS0VfUEFHRVNaXzE2TQk3CisjZGVmaW5lIEJPT0tFX1BBR0VTWl82NE0JOAorI2RlZmluZSBCT09LRV9QQUdFU1pfMjU2TQk5CisjZGVmaW5lIEJPT0tFX1BBR0VTWl8xR0IJMTAKKyNkZWZpbmUgQk9PS0VfUEFHRVNaXzRHQgkxMQorI2RlZmluZSBCT09LRV9QQUdFU1pfMTZHQgkxMgorI2RlZmluZSBCT09LRV9QQUdFU1pfNjRHQgkxMworI2RlZmluZSBCT09LRV9QQUdFU1pfMjU2R0IJMTQKKyNkZWZpbmUgQk9PS0VfUEFHRVNaXzFUQgkxNQorCisvKgorICogRnJlZXNjYWxlIEJvb2stRSBNTVUgc3VwcG9ydAorICovCisKKyNkZWZpbmUgTUFTMF9UTEJTRUwoeCkJKCh4IDw8IDI4KSAmIDB4MzAwMDAwMDApCisjZGVmaW5lIE1BUzBfRVNFTCh4KQkoKHggPDwgMTYpICYgMHgwRkZGMDAwMCkKKyNkZWZpbmUgTUFTMF9OVgkJMHgwMDAwMEZGRgorCisjZGVmaW5lIE1BUzFfVkFMSUQgCTB4ODAwMDAwMDAKKyNkZWZpbmUgTUFTMV9JUFJPVAkweDQwMDAwMDAwCisjZGVmaW5lIE1BUzFfVElEKHgpCSgoeCA8PCAxNikgJiAweDNGRkYwMDAwKQorI2RlZmluZSBNQVMxX1RTCQkweDAwMDAxMDAwCisjZGVmaW5lIE1BUzFfVFNJWkUoeCkJKCh4IDw8IDgpICYgMHgwMDAwMEYwMCkKKworI2RlZmluZSBNQVMyX0VQTgkweEZGRkZGMDAwCisjZGVmaW5lIE1BUzJfWDAJCTB4MDAwMDAwNDAKKyNkZWZpbmUgTUFTMl9YMQkJMHgwMDAwMDAyMAorI2RlZmluZSBNQVMyX1cJCTB4MDAwMDAwMTAKKyNkZWZpbmUgTUFTMl9JCQkweDAwMDAwMDA4CisjZGVmaW5lIE1BUzJfTQkJMHgwMDAwMDAwNAorI2RlZmluZSBNQVMyX0cJCTB4MDAwMDAwMDIKKyNkZWZpbmUgTUFTMl9FCQkweDAwMDAwMDAxCisKKyNkZWZpbmUgTUFTM19SUE4JMHhGRkZGRjAwMAorI2RlZmluZSBNQVMzX1UwCQkweDAwMDAwMjAwCisjZGVmaW5lIE1BUzNfVTEJCTB4MDAwMDAxMDAKKyNkZWZpbmUgTUFTM19VMgkJMHgwMDAwMDA4MAorI2RlZmluZSBNQVMzX1UzCQkweDAwMDAwMDQwCisjZGVmaW5lIE1BUzNfVVgJCTB4MDAwMDAwMjAKKyNkZWZpbmUgTUFTM19TWAkJMHgwMDAwMDAxMAorI2RlZmluZSBNQVMzX1VXCQkweDAwMDAwMDA4CisjZGVmaW5lIE1BUzNfU1cJCTB4MDAwMDAwMDQKKyNkZWZpbmUgTUFTM19VUgkJMHgwMDAwMDAwMgorI2RlZmluZSBNQVMzX1NSCQkweDAwMDAwMDAxCisKKyNkZWZpbmUgTUFTNF9UTEJTRUxEKHgpIE1BUzBfVExCU0VMKHgpCisjZGVmaW5lIE1BUzRfVElERFNFTAkweDAwMEYwMDAwCisjZGVmaW5lIE1BUzRfVFNJWkVEKHgpCU1BUzFfVFNJWkUoeCkKKyNkZWZpbmUgTUFTNF9YMEQJMHgwMDAwMDA0MAorI2RlZmluZSBNQVM0X1gxRAkweDAwMDAwMDIwCisjZGVmaW5lIE1BUzRfV0QJCTB4MDAwMDAwMTAKKyNkZWZpbmUgTUFTNF9JRAkJMHgwMDAwMDAwOAorI2RlZmluZSBNQVM0X01ECQkweDAwMDAwMDA0CisjZGVmaW5lIE1BUzRfR0QJCTB4MDAwMDAwMDIKKyNkZWZpbmUgTUFTNF9FRAkJMHgwMDAwMDAwMQorCisjZGVmaW5lIE1BUzZfU1BJRDAJMHgzRkZGMDAwMAorI2RlZmluZSBNQVM2X1NQSUQxCTB4MDAwMDdGRkUKKyNkZWZpbmUgTUFTNl9TQVMJMHgwMDAwMDAwMQorI2RlZmluZSBNQVM2X1NQSUQJTUFTNl9TUElEMAorCisjZGVmaW5lIE1BUzdfUlBOCTB4RkZGRkZGRkYKKworI2VuZGlmIC8qIF9QUENfTU1VX0hfICovCisjZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL21tdV9jb250ZXh0LmggYi9pbmNsdWRlL2FzbS1wcGMvbW11X2NvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjIyZmE2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjL21tdV9jb250ZXh0LmgKQEAgLTAsMCArMSwxOTcgQEAKKyNpZmRlZiBfX0tFUk5FTF9fCisjaWZuZGVmIF9fUFBDX01NVV9DT05URVhUX0gKKyNkZWZpbmUgX19QUENfTU1VX0NPTlRFWFRfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KKyNpbmNsdWRlIDxhc20vbW11Lmg+CisjaW5jbHVkZSA8YXNtL2NwdXRhYmxlLmg+CisKKy8qCisgKiBPbiAzMi1iaXQgUG93ZXJQQyA2eHgvN3h4Lzd4eHggQ1BVcywgd2UgdXNlIGEgc2V0IG9mIDE2IFZTSURzCisgKiAodmlydHVhbCBzZWdtZW50IGlkZW50aWZpZXJzKSBmb3IgZWFjaCBjb250ZXh0LiAgQWx0aG91Z2ggdGhlCisgKiBoYXJkd2FyZSBzdXBwb3J0cyAyNC1iaXQgVlNJRHMsIGFuZCB0aHVzID4xIG1pbGxpb24gY29udGV4dHMsCisgKiB3ZSBvbmx5IHVzZSAzMiw3Njggb2YgdGhlbS4gIFRoYXQgaXMgYW1wbGUsIHNpbmNlIHRoZXJlIGNhbiBiZQorICogYXQgbW9zdCBhcm91bmQgMzAsMDAwIHRhc2tzIGluIHRoZSBzeXN0ZW0gYW55d2F5LCBhbmQgaXQgbWVhbnMKKyAqIHRoYXQgd2UgY2FuIHVzZSBhIGJpdG1hcCB0byBpbmRpY2F0ZSB3aGljaCBjb250ZXh0cyBhcmUgaW4gdXNlLgorICogVXNpbmcgYSBiaXRtYXAgbWVhbnMgdGhhdCB3ZSBlbnRpcmVseSBhdm9pZCBhbGwgb2YgdGhlIHByb2JsZW1zCisgKiB0aGF0IHdlIHVzZWQgdG8gaGF2ZSB3aGVuIHRoZSBjb250ZXh0IG51bWJlciBvdmVyZmxvd2VkLAorICogcGFydGljdWxhcmx5IG9uIFNNUCBzeXN0ZW1zLgorICogIC0tIHBhdWx1cy4KKyAqLworCisvKgorICogVGhpcyBmdW5jdGlvbiBkZWZpbmVzIHRoZSBtYXBwaW5nIGZyb20gY29udGV4dHMgdG8gVlNJRHMgKHZpcnR1YWwKKyAqIHNlZ21lbnQgSURzKS4gIFdlIHVzZSBhIHNrZXcgb24gYm90aCB0aGUgY29udGV4dCBhbmQgdGhlIGhpZ2ggNCBiaXRzCisgKiBvZiB0aGUgMzItYml0IHZpcnR1YWwgYWRkcmVzcyAodGhlICJlZmZlY3RpdmUgc2VnbWVudCBJRCIpIGluIG9yZGVyCisgKiB0byBzcHJlYWQgb3V0IHRoZSBlbnRyaWVzIGluIHRoZSBNTVUgaGFzaCB0YWJsZS4gIE5vdGUsIGlmIHRoaXMKKyAqIGZ1bmN0aW9uIGlzIGNoYW5nZWQgdGhlbiBhcmNoL3BwYy9tbS9oYXNodGFibGUuUyB3aWxsIGhhdmUgdG8gYmUKKyAqIGNoYW5nZWQgdG8gY29ycmVzcG9uZC4KKyAqLworI2RlZmluZSBDVFhfVE9fVlNJRChjdHgsIHZhKQkoKChjdHgpICogKDg5NyAqIDE2KSArICgodmEpID4+IDI4KSAqIDB4MTExKSBcCisJCQkJICYgMHhmZmZmZmYpCisKKy8qCisgICBUaGUgTVBDOHh4IGhhcyBvbmx5IDE2IGNvbnRleHRzLiAgV2Ugcm90YXRlIHRocm91Z2ggdGhlbSBvbiBlYWNoCisgICB0YXNrIHN3aXRjaC4gIEEgYmV0dGVyIHdheSB3b3VsZCBiZSB0byBrZWVwIHRyYWNrIG9mIHRhc2tzIHRoYXQKKyAgIG93biBjb250ZXh0cywgYW5kIGltcGxlbWVudCBhbiBMUlUgdXNhZ2UuICBUaGF0IHdheSB2ZXJ5IGFjdGl2ZQorICAgdGFza3MgZG9uJ3QgYWx3YXlzIGhhdmUgdG8gcGF5IHRoZSBUTEIgcmVsb2FkIG92ZXJoZWFkLiAgVGhlCisgICBrZXJuZWwgcGFnZXMgYXJlIG1hcHBlZCBzaGFyZWQsIHNvIHRoZSBrZXJuZWwgY2FuIHJ1biBvbiBiZWhhbGYKKyAgIG9mIGFueSB0YXNrIHRoYXQgbWFrZXMgYSBrZXJuZWwgZW50cnkuICBTaGFyZWQgZG9lcyBub3QgbWVhbiB0aGV5CisgICBhcmUgbm90IHByb3RlY3RlZCwganVzdCB0aGF0IHRoZSBBU0lEIGNvbXBhcmlzb24gaXMgbm90IHBlcmZvcm1lZC4KKyAgICAgICAgLS0gRGFuCisKKyAgIFRoZSBJQk00eHggaGFzIDI1NiBjb250ZXh0cywgc28gd2UgY2FuIGp1c3Qgcm90YXRlIHRocm91Z2ggdGhlc2UKKyAgIGFzIGEgd2F5IG9mICJzd2l0Y2hpbmciIGNvbnRleHRzLiAgSWYgdGhlIFRJRCBvZiB0aGUgVExCIGlzIHplcm8sCisgICB0aGUgUElEL1RJRCBjb21wYXJpc29uIGlzIGRpc2FibGVkLCBzbyB3ZSBjYW4gdXNlIGEgVElEIG9mIHplcm8KKyAgIHRvIHJlcHJlc2VudCBhbGwga2VybmVsIHBhZ2VzIGFzIHNoYXJlZCBhbW9uZyBhbGwgY29udGV4dHMuCisgICAJLS0gRGFuCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkIGVudGVyX2xhenlfdGxiKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKK30KKworI2lmZGVmIENPTkZJR184eHgKKyNkZWZpbmUgTk9fQ09OVEVYVCAgICAgIAkxNgorI2RlZmluZSBMQVNUX0NPTlRFWFQgICAgCTE1CisjZGVmaW5lIEZJUlNUX0NPTlRFWFQgICAgCTAKKworI2VsaWYgZGVmaW5lZChDT05GSUdfNHh4KQorI2RlZmluZSBOT19DT05URVhUICAgICAgCTI1NgorI2RlZmluZSBMQVNUX0NPTlRFWFQgICAgCTI1NQorI2RlZmluZSBGSVJTVF9DT05URVhUICAgIAkxCisKKyNlbGlmIGRlZmluZWQoQ09ORklHX0U1MDApCisjZGVmaW5lIE5PX0NPTlRFWFQgICAgICAJMjU2CisjZGVmaW5lIExBU1RfQ09OVEVYVCAgICAJMjU1CisjZGVmaW5lIEZJUlNUX0NPTlRFWFQgICAgCTEKKworI2Vsc2UKKworLyogUFBDIDZ4eCwgN3h4IENQVXMgKi8KKyNkZWZpbmUgTk9fQ09OVEVYVCAgICAgIAkoKG1tX2NvbnRleHRfdCkgLTEpCisjZGVmaW5lIExBU1RfQ09OVEVYVCAgICAJMzI3NjcKKyNkZWZpbmUgRklSU1RfQ09OVEVYVCAgICAJMQorI2VuZGlmCisKKy8qCisgKiBTZXQgdGhlIGN1cnJlbnQgTU1VIGNvbnRleHQuCisgKiBPbiAzMi1iaXQgUG93ZXJQQ3MgKG90aGVyIHRoYW4gdGhlIDh4eCBlbWJlZGRlZCBjaGlwcyksIHRoaXMgaXMgZG9uZSBieQorICogbG9hZGluZyB1cCB0aGUgc2VnbWVudCByZWdpc3RlcnMgZm9yIHRoZSB1c2VyIHBhcnQgb2YgdGhlIGFkZHJlc3Mgc3BhY2UuCisgKgorICogU2luY2UgdGhlIFBHRCBpcyBpbW1lZGlhdGVseSBhdmFpbGFibGUsIGl0IGlzIG11Y2ggZmFzdGVyIHRvIHNpbXBseQorICogcGFzcyB0aGlzIGFsb25nIGFzIGEgc2Vjb25kIHBhcmFtZXRlciwgd2hpY2ggaXMgcmVxdWlyZWQgZm9yIDh4eCBhbmQKKyAqIGNhbiBiZSB1c2VkIGZvciBkZWJ1Z2dpbmcgb24gYWxsIHByb2Nlc3NvcnMgKGlmIHlvdSBoYXBwZW4gdG8gaGF2ZQorICogYW4gQWJhdHJvbikuCisgKi8KK2V4dGVybiB2b2lkIHNldF9jb250ZXh0KG1tX2NvbnRleHRfdCBjb250ZXh0LCBwZ2RfdCAqcGdkKTsKKworLyoKKyAqIEJpdG1hcCBvZiBjb250ZXh0cyBpbiB1c2UuCisgKiBUaGUgc2l6ZSBvZiB0aGlzIGJpdG1hcCBpcyBMQVNUX0NPTlRFWFQgKyAxIGJpdHMuCisgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIGNvbnRleHRfbWFwW107CisKKy8qCisgKiBUaGlzIGNhY2hlcyB0aGUgbmV4dCBjb250ZXh0IG51bWJlciB0aGF0IHdlIGV4cGVjdCB0byBiZSBmcmVlLgorICogSXRzIHVzZSBpcyBhbiBvcHRpbWl6YXRpb24gb25seSwgd2UgY2FuJ3QgcmVseSBvbiB0aGlzIGNvbnRleHQKKyAqIG51bWJlciB0byBiZSBmcmVlLCBidXQgaXQgdXN1YWxseSB3aWxsIGJlLgorICovCitleHRlcm4gbW1fY29udGV4dF90IG5leHRfbW11X2NvbnRleHQ7CisKKy8qCisgKiBJZiB3ZSBkb24ndCBoYXZlIHN1ZmZpY2llbnQgY29udGV4dHMgdG8gZ2l2ZSBvbmUgdG8gZXZlcnkgdGFzaworICogdGhhdCBjb3VsZCBiZSBpbiB0aGUgc3lzdGVtLCB3ZSBuZWVkIHRvIGJlIGFibGUgdG8gc3RlYWwgY29udGV4dHMuCisgKiBUaGVzZSB2YXJpYWJsZXMgc3VwcG9ydCB0aGF0LgorICovCisjaWYgTEFTVF9DT05URVhUIDwgMzAwMDAKKyNkZWZpbmUgRkVXX0NPTlRFWFRTCTEKK2V4dGVybiBhdG9taWNfdCBucl9mcmVlX2NvbnRleHRzOworZXh0ZXJuIHN0cnVjdCBtbV9zdHJ1Y3QgKmNvbnRleHRfbW1bTEFTVF9DT05URVhUKzFdOworZXh0ZXJuIHZvaWQgc3RlYWxfY29udGV4dCh2b2lkKTsKKyNlbmRpZgorCisvKgorICogR2V0IGEgbmV3IG1tdSBjb250ZXh0IGZvciB0aGUgYWRkcmVzcyBzcGFjZSBkZXNjcmliZWQgYnkgYG1tJy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGdldF9tbXVfY29udGV4dChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwltbV9jb250ZXh0X3QgY3R4OworCisJaWYgKG1tLT5jb250ZXh0ICE9IE5PX0NPTlRFWFQpCisJCXJldHVybjsKKyNpZmRlZiBGRVdfQ09OVEVYVFMKKwl3aGlsZSAoYXRvbWljX2RlY19pZl9wb3NpdGl2ZSgmbnJfZnJlZV9jb250ZXh0cykgPCAwKQorCQlzdGVhbF9jb250ZXh0KCk7CisjZW5kaWYKKwljdHggPSBuZXh0X21tdV9jb250ZXh0OworCXdoaWxlICh0ZXN0X2FuZF9zZXRfYml0KGN0eCwgY29udGV4dF9tYXApKSB7CisJCWN0eCA9IGZpbmRfbmV4dF96ZXJvX2JpdChjb250ZXh0X21hcCwgTEFTVF9DT05URVhUKzEsIGN0eCk7CisJCWlmIChjdHggPiBMQVNUX0NPTlRFWFQpCisJCQljdHggPSAwOworCX0KKwluZXh0X21tdV9jb250ZXh0ID0gKGN0eCArIDEpICYgTEFTVF9DT05URVhUOworCW1tLT5jb250ZXh0ID0gY3R4OworI2lmZGVmIEZFV19DT05URVhUUworCWNvbnRleHRfbW1bY3R4XSA9IG1tOworI2VuZGlmCit9CisKKy8qCisgKiBTZXQgdXAgdGhlIGNvbnRleHQgZm9yIGEgbmV3IGFkZHJlc3Mgc3BhY2UuCisgKi8KKyNkZWZpbmUgaW5pdF9uZXdfY29udGV4dCh0c2ssbW0pCSgoKG1tKS0+Y29udGV4dCA9IE5PX0NPTlRFWFQpLCAwKQorCisvKgorICogV2UncmUgZmluaXNoZWQgdXNpbmcgdGhlIGNvbnRleHQgZm9yIGFuIGFkZHJlc3Mgc3BhY2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBkZXN0cm95X2NvbnRleHQoc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJaWYgKG1tLT5jb250ZXh0ICE9IE5PX0NPTlRFWFQpIHsKKwkJY2xlYXJfYml0KG1tLT5jb250ZXh0LCBjb250ZXh0X21hcCk7CisJCW1tLT5jb250ZXh0ID0gTk9fQ09OVEVYVDsKKyNpZmRlZiBGRVdfQ09OVEVYVFMKKwkJYXRvbWljX2luYygmbnJfZnJlZV9jb250ZXh0cyk7CisjZW5kaWYKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzd2l0Y2hfbW0oc3RydWN0IG1tX3N0cnVjdCAqcHJldiwgc3RydWN0IG1tX3N0cnVjdCAqbmV4dCwKKwkJCSAgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisjaWZkZWYgQ09ORklHX0FMVElWRUMKKwlhc20gdm9sYXRpbGUgKAorIEJFR0lOX0ZUUl9TRUNUSU9OCisJImRzc2FsbDtcbiIKKyNpZm5kZWYgQ09ORklHX1BPV0VSNAorCSAic3luYztcbiIgLyogRzQgbmVlZHMgYSBzeW5jIGhlcmUsIEc1IGFwcGFyZW50bHkgbm90ICovCisjZW5kaWYKKyBFTkRfRlRSX1NFQ1RJT05fSUZTRVQoQ1BVX0ZUUl9BTFRJVkVDKQorCSA6IDogKTsKKyNlbmRpZiAvKiBDT05GSUdfQUxUSVZFQyAqLworCisJdHNrLT50aHJlYWQucGdkaXIgPSBuZXh0LT5wZ2Q7CisKKwkvKiBObyBuZWVkIHRvIGZsdXNoIHVzZXJzcGFjZSBzZWdtZW50cyBpZiB0aGUgbW0gZG9lc250IGNoYW5nZSAqLworCWlmIChwcmV2ID09IG5leHQpCisJCXJldHVybjsKKworCS8qIFNldHVwIG5ldyB1c2Vyc3BhY2UgY29udGV4dCAqLworCWdldF9tbXVfY29udGV4dChuZXh0KTsKKwlzZXRfY29udGV4dChuZXh0LT5jb250ZXh0LCBuZXh0LT5wZ2QpOworfQorCisjZGVmaW5lIGRlYWN0aXZhdGVfbW0odHNrLG1tKQlkbyB7IH0gd2hpbGUgKDApCisKKy8qCisgKiBBZnRlciB3ZSBoYXZlIHNldCBjdXJyZW50LT5tbSB0byBhIG5ldyB2YWx1ZSwgdGhpcyBhY3RpdmF0ZXMKKyAqIHRoZSBjb250ZXh0IGZvciB0aGUgbmV3IG1tIHNvIHdlIHNlZSB0aGUgbmV3IG1hcHBpbmdzLgorICovCisjZGVmaW5lIGFjdGl2YXRlX21tKGFjdGl2ZV9tbSwgbW0pICAgc3dpdGNoX21tKGFjdGl2ZV9tbSwgbW0sIGN1cnJlbnQpCisKK2V4dGVybiB2b2lkIG1tdV9jb250ZXh0X2luaXQodm9pZCk7CisKKyNlbmRpZiAvKiBfX1BQQ19NTVVfQ09OVEVYVF9IICovCisjZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL21vZHVsZS5oIGIvaW5jbHVkZS9hc20tcHBjL21vZHVsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiNjM0OTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGMvbW9kdWxlLmgKQEAgLTAsMCArMSw0NCBAQAorI2lmbmRlZiBfQVNNX1BQQ19NT0RVTEVfSAorI2RlZmluZSBfQVNNX1BQQ19NT0RVTEVfSAorLyogTW9kdWxlIHN0dWZmIGZvciBQUEMuICAoQykgMjAwMSBSdXN0eSBSdXNzZWxsICovCisKKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8YXNtL2J1Zy5oPgorCisvKiBUaGFua3MgdG8gUGF1bCBNIGZvciBleHBsYWluaW5nIHRoaXMuCisKKyAgIFBQQyBjYW4gb25seSBkbyByZWwganVtcHMgKz0gMzJNQiwgYW5kIG9mdGVuIHRoZSBrZXJuZWwgYW5kIG90aGVyCisgICBtb2R1bGVzIGFyZSBmdXJ0aHVyIGF3YXkgdGhhbiB0aGlzLiAgU28sIHdlIGp1bXAgdG8gYSB0YWJsZSBvZgorICAgdHJhbXBvbGluZXMgYXR0YWNoZWQgdG8gdGhlIG1vZHVsZSAodGhlIFByb2NlZHVyZSBMaW5rYWdlIFRhYmxlKQorICAgd2hlbmV2ZXIgdGhhdCBoYXBwZW5zLgorKi8KKworc3RydWN0IHBwY19wbHRfZW50cnkKK3sKKwkvKiAxNiBieXRlIGp1bXAgaW5zdHJ1Y3Rpb24gc2VxdWVuY2UgKDQgaW5zdHJ1Y3Rpb25zKSAqLworCXVuc2lnbmVkIGludCBqdW1wWzRdOworfTsKKworc3RydWN0IG1vZF9hcmNoX3NwZWNpZmljCit7CisJLyogSW5kaWNlcyBvZiBQTFQgc2VjdGlvbnMgd2l0aGluIG1vZHVsZS4gKi8KKwl1bnNpZ25lZCBpbnQgY29yZV9wbHRfc2VjdGlvbiwgaW5pdF9wbHRfc2VjdGlvbjsKKworCS8qIExpc3Qgb2YgQlVHIGFkZHJlc3Nlcywgc291cmNlIGxpbmUgbnVtYmVycyBhbmQgZmlsZW5hbWVzICovCisJc3RydWN0IGxpc3RfaGVhZCBidWdfbGlzdDsKKwlzdHJ1Y3QgYnVnX2VudHJ5ICpidWdfdGFibGU7CisJdW5zaWduZWQgaW50IG51bV9idWdzOworfTsKKworZXh0ZXJuIHN0cnVjdCBidWdfZW50cnkgKm1vZHVsZV9maW5kX2J1Zyh1bnNpZ25lZCBsb25nIGJ1Z2FkZHIpOworCisjZGVmaW5lIEVsZl9TaGRyIEVsZjMyX1NoZHIKKyNkZWZpbmUgRWxmX1N5bSBFbGYzMl9TeW0KKyNkZWZpbmUgRWxmX0VoZHIgRWxmMzJfRWhkcgorCisvKiBNYWtlIGVtcHR5IHNlY3Rpb25zIGZvciBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zIHRvIGV4cGFuZC4gKi8KKyNpZmRlZiBNT0RVTEUKK2FzbSgiLnNlY3Rpb24gLnBsdCxcImF4XCIsQG5vYml0czsgLmFsaWduIDM7IC5wcmV2aW91cyIpOworYXNtKCIuc2VjdGlvbiAuaW5pdC5wbHQsXCJheFwiLEBub2JpdHM7IC5hbGlnbiAzOyAucHJldmlvdXMiKTsKKyNlbmRpZgorI2VuZGlmIC8qIF9BU01fUFBDX01PRFVMRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvbXBjMTB4LmggYi9pbmNsdWRlL2FzbS1wcGMvbXBjMTB4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhlN2UyZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9tcGMxMHguaApAQCAtMCwwICsxLDE3NCBAQAorLyoKKyAqIGFyY2gvcHBjL2tlcm5lbC9tcGMxMHguaAorICoKKyAqIENvbW1vbiByb3V0aW5lcyBmb3IgdGhlIE1vdG9yb2xhIFNQUyBNUEMxMDYvODI0MC8xMDcgSG9zdCBicmlkZ2UvTWVtCisgKiBjdGxyL0VQSUMvZXRjLgorICoKKyAqIEF1dGhvcjogTWFyayBBLiBHcmVlcgorICogICAgICAgICBtZ3JlZXJAbXZpc3RhLmNvbQorICoKKyAqIDIwMDEgKGMpIE1vbnRhVmlzdGEsIFNvZnR3YXJlLCBJbmMuICBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtCisgKiBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3MKKyAqIG9yIGltcGxpZWQuCisgKi8KKyNpZm5kZWYgX19QUENfS0VSTkVMX01QQzEwWF9ICisjZGVmaW5lIF9fUFBDX0tFUk5FTF9NUEMxMFhfSAorCisjaW5jbHVkZSA8bGludXgvcGNpX2lkcy5oPgorI2luY2x1ZGUgPGFzbS9wY2ktYnJpZGdlLmg+CisKKy8qCisgKiBUaGUgdmFsdWVzIGhlcmUgZG9uJ3QgY29tcGxldGVseSBtYXAgZXZlcnl0aGluZyBidXQgc2hvdWxkIHdvcmsgaW4gbW9zdAorICogY2FzZXMuCisgKgorICogTUFQIEEgKFBSZVAgTWFwKQorICogICBQcm9jZXNzb3I6IDB4ODAwMDAwMDAgLSAweDgwN2ZmZmZmIC0+IFBDSSBJL086IDB4MDAwMDAwMDAgLSAweDAwN2ZmZmZmCisgKiAgIFByb2Nlc3NvcjogMHhjMDAwMDAwMCAtIDB4ZGZmZmZmZmYgLT4gUENJIE1FTTogMHgwMDAwMDAwMCAtIDB4MWZmZmZmZmYKKyAqICAgUENJIE1FTTogICAweDgwMDAwMDAwIC0+IFByb2Nlc3NvciBTeXN0ZW0gTWVtb3J5OiAweDAwMDAwMDAwCisgKiAgIEVVTUIgbWFwcGVkIHRvOiBpb3JlbWFwX2Jhc2UgLSAweDAwMTAwMDAwIChpb3JlbWFwX2Jhc2UgLSAxIE1CKQorICoKKyAqIE1BUCBCIChDSFJQIE1hcCkKKyAqICAgUHJvY2Vzc29yOiAweGZlMDAwMDAwIC0gMHhmZWJmZmZmZiAtPiBQQ0kgSS9POiAweDAwMDAwMDAwIC0gMHgwMGJmZmZmZgorICogICBQcm9jZXNzb3I6IDB4ODAwMDAwMDAgLSAweGJmZmZmZmZmIC0+IFBDSSBNRU06IDB4ODAwMDAwMDAgLSAweGJmZmZmZmZmCisgKiAgIFBDSSBNRU06ICAgMHgwMDAwMDAwMCAtPiBQcm9jZXNzb3IgU3lzdGVtIE1lbW9yeTogMHgwMDAwMDAwMAorICogICBFVU1CIG1hcHBlZCB0bzogaW9yZW1hcF9iYXNlIC0gMHgwMDEwMDAwMCAoaW9yZW1hcF9iYXNlIC0gMSBNQikKKyAqLworCisvKgorICogRGVmaW5lIHRoZSB2ZW5kb3IvZGV2aWNlIElEcyBmb3IgdGhlIHZhcmlvdXMgYnJpZGdlcy0tc2hvdWxkIGJlIGFkZGVkIHRvCisgKiA8bGludXgvcGNpX2lkcy5oPgorICovCisjZGVmaW5lCU1QQzEwWF9CUklER0VfMTA2CSgoUENJX0RFVklDRV9JRF9NT1RPUk9MQV9NUEMxMDYgPDwgMTYpIHwgIFwKKwkJCQkgIFBDSV9WRU5ET1JfSURfTU9UT1JPTEEpCisjZGVmaW5lCU1QQzEwWF9CUklER0VfODI0MAkoKDB4MDAwMyA8PCAxNikgfCBQQ0lfVkVORE9SX0lEX01PVE9ST0xBKQorI2RlZmluZQlNUEMxMFhfQlJJREdFXzEwNwkoKDB4MDAwNCA8PCAxNikgfCBQQ0lfVkVORE9SX0lEX01PVE9ST0xBKQorI2RlZmluZQlNUEMxMFhfQlJJREdFXzgyNDUJKCgweDAwMDYgPDwgMTYpIHwgUENJX1ZFTkRPUl9JRF9NT1RPUk9MQSkKKworLyogRGVmaW5lIHRoZSB0eXBlIG9mIG1hcCB0byB1c2UgKi8KKyNkZWZpbmUJTVBDMTBYX01FTV9NQVBfQQkJMQorI2RlZmluZQlNUEMxMFhfTUVNX01BUF9CCQkyCisKKy8qIE1hcCBBIChQUmVQIE1hcCkgRGVmaW5lcyAqLworI2RlZmluZQlNUEMxMFhfTUFQQV9DTkZHX0FERFIJCTB4ODAwMDBjZjgKKyNkZWZpbmUJTVBDMTBYX01BUEFfQ05GR19EQVRBCQkweDgwMDAwY2ZjCisKKyNkZWZpbmUgTVBDMTBYX01BUEFfSVNBX0lPX0JBU0UJCTB4ODAwMDAwMDAKKyNkZWZpbmUgTVBDMTBYX01BUEFfSVNBX01FTV9CQVNFCTB4YzAwMDAwMDAKKyNkZWZpbmUJTVBDMTBYX01BUEFfRFJBTV9PRkZTRVQJCTB4ODAwMDAwMDAKKworI2RlZmluZQlNUEMxMFhfTUFQQV9QQ0lfSU5UQUNLX0FERFIJMHhiZmZmZmZmMAorI2RlZmluZQlNUEMxMFhfTUFQQV9QQ0lfSU9fU1RBUlQJMHgwMDAwMDAwMAorI2RlZmluZQlNUEMxMFhfTUFQQV9QQ0lfSU9fRU5ECSAgICAgICAoMHgwMDgwMDAwMCAtIDEpCisjZGVmaW5lCU1QQzEwWF9NQVBBX1BDSV9NRU1fU1RBUlQJMHgwMDAwMDAwMAorI2RlZmluZQlNUEMxMFhfTUFQQV9QQ0lfTUVNX0VORAkgICAgICAgKDB4MjAwMDAwMDAgLSAxKQorCisjZGVmaW5lCU1QQzEwWF9NQVBBX1BDSV9NRU1fT0ZGU0VUCShNUEMxMFhfTUFQQV9JU0FfTUVNX0JBU0UgLQlcCisJCQkJCSBNUEMxMFhfTUFQQV9QQ0lfTUVNX1NUQVJUKQorCisvKiBNYXAgQiAoQ0hSUCBNYXApIERlZmluZXMgKi8KKyNkZWZpbmUJTVBDMTBYX01BUEJfQ05GR19BRERSCQkweGZlYzAwMDAwCisjZGVmaW5lCU1QQzEwWF9NQVBCX0NORkdfREFUQQkJMHhmZWUwMDAwMAorCisjZGVmaW5lIE1QQzEwWF9NQVBCX0lTQV9JT19CQVNFCQkweGZlMDAwMDAwCisjZGVmaW5lIE1QQzEwWF9NQVBCX0lTQV9NRU1fQkFTRQkweDgwMDAwMDAwCisjZGVmaW5lCU1QQzEwWF9NQVBCX0RSQU1fT0ZGU0VUCQkweDAwMDAwMDAwCisKKyNkZWZpbmUJTVBDMTBYX01BUEJfUENJX0lOVEFDS19BRERSCTB4ZmVmMDAwMDAKKyNkZWZpbmUJTVBDMTBYX01BUEJfUENJX0lPX1NUQVJUCTB4MDAwMDAwMDAKKyNkZWZpbmUJTVBDMTBYX01BUEJfUENJX0lPX0VORAkgICAgICAgKDB4MDBjMDAwMDAgLSAxKQorI2RlZmluZQlNUEMxMFhfTUFQQl9QQ0lfTUVNX1NUQVJUCTB4ODAwMDAwMDAKKyNkZWZpbmUJTVBDMTBYX01BUEJfUENJX01FTV9FTkQJICAgICAgICgweGMwMDAwMDAwIC0gMSkKKworI2RlZmluZQlNUEMxMFhfTUFQQl9QQ0lfTUVNX09GRlNFVAkoTVBDMTBYX01BUEJfSVNBX01FTV9CQVNFIC0JXAorCQkJCQkgTVBDMTBYX01BUEJfUENJX01FTV9TVEFSVCkKKworLyogU2V0IGhvc2UgbWVtYmVycyB0byB2YWx1ZXMgYXBwcm9wcmlhdGUgZm9yIHRoZSBtZW0gbWFwIHVzZWQgKi8KKyNkZWZpbmUJTVBDMTBYX1NFVFVQX0hPU0UoaG9zZSwgbWFwKSB7CQkJCQlcCisJKGhvc2UpLT5wY2lfbWVtX29mZnNldCA9IE1QQzEwWF9NQVAjI21hcCMjX1BDSV9NRU1fT0ZGU0VUOwlcCisJKGhvc2UpLT5pb19zcGFjZS5zdGFydCA9IE1QQzEwWF9NQVAjI21hcCMjX1BDSV9JT19TVEFSVDsJXAorCShob3NlKS0+aW9fc3BhY2UuZW5kID0gTVBDMTBYX01BUCMjbWFwIyNfUENJX0lPX0VORDsJCVwKKwkoaG9zZSktPm1lbV9zcGFjZS5zdGFydCA9IE1QQzEwWF9NQVAjI21hcCMjX1BDSV9NRU1fU1RBUlQ7CVwKKwkoaG9zZSktPm1lbV9zcGFjZS5lbmQgPSBNUEMxMFhfTUFQIyNtYXAjI19QQ0lfTUVNX0VORDsJCVwKKwkoaG9zZSktPmlvX2Jhc2VfdmlydCA9ICh2b2lkICopTVBDMTBYX01BUCMjbWFwIyNfSVNBX0lPX0JBU0U7CVwKK30KKworCisvKiBNaXNjZWxsYW5lb3VzIENvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgb2Zmc2V0cyAqLworI2RlZmluZQlNUEMxMFhfQ0ZHX1BJUl9SRUcJCTB4MDkKKyNkZWZpbmUJTVBDMTBYX0NGR19QSVJfSE9TVF9CUklER0UJMHgwMAorI2RlZmluZQlNUEMxMFhfQ0ZHX1BJUl9BR0VOVAkJMHgwMQorCisjZGVmaW5lCU1QQzEwWF9DRkdfRVVNQkJBUgkJMHg3OAorCisjZGVmaW5lCU1QQzEwWF9DRkdfUElDUjFfUkVHCQkweGE4CisjZGVmaW5lCU1QQzEwWF9DRkdfUElDUjFfQUREUl9NQVBfTUFTSwkweDAwMDEwMDAwCisjZGVmaW5lCU1QQzEwWF9DRkdfUElDUjFfQUREUl9NQVBfQQkweDAwMDEwMDAwCisjZGVmaW5lCU1QQzEwWF9DRkdfUElDUjFfQUREUl9NQVBfQgkweDAwMDAwMDAwCisjZGVmaW5lCU1QQzEwWF9DRkdfUElDUjFfU1BFQ19QQ0lfUkQJMHgwMDAwMDAwNAorI2RlZmluZQlNUEMxMFhfQ0ZHX1BJQ1IxX1NUX0dBVEhfRU4JMHgwMDAwMDA0MAorCisjZGVmaW5lCU1QQzEwWF9DRkdfUElDUjJfUkVHCQkweGFjCisjZGVmaW5lCU1QQzEwWF9DRkdfUElDUjJfQ09QWUJBQ0tfT1BUCTB4MDAwMDAwMDEKKworI2RlZmluZQlNUEMxMFhfQ0ZHX01BUEJfT1BUSU9OU19SRUcJMHhlMAorI2RlZmluZQlNUEMxMFhfQ0ZHX01BUEJfT1BUSU9OU19DRkFFCTB4ODAJLyogQ1BVX0ZEX0FMSUFTX0VOICovCisjZGVmaW5lCU1QQzEwWF9DRkdfTUFQQl9PUFRJT05TX1BGQUUJMHg0MAkvKiBQQ0lfRkRfQUxJQVNfRU4gKi8KKyNkZWZpbmUJTVBDMTBYX0NGR19NQVBCX09QVElPTlNfRFIJMHgyMAkvKiBETExfUkVTRVQgKi8KKyNkZWZpbmUJTVBDMTBYX0NGR19NQVBCX09QVElPTlNfUENJQ0gJMHgwOAkvKiBQQ0lfQ09NUEFUSUJJTElUWV9IT0xFICovCisjZGVmaW5lCU1QQzEwWF9DRkdfTUFQQl9PUFRJT05TX1BST0NDSAkweDA0CS8qIFBST0NfQ09NUEFUSUJJTElUWV9IT0xFICovCisKKy8qIERlZmluZSBvZmZzZXRzIGZvciB0aGUgbWVtb3J5IGNvbnRyb2xsZXIgcmVnaXN0ZXJzIGluIHRoZSBjb25maWcgc3BhY2UgKi8KKyNkZWZpbmUgTVBDMTBYX01DVExSX01FTV9TVEFSVF8xCTB4ODAJLyogQmFua3MgMC0zICovCisjZGVmaW5lIE1QQzEwWF9NQ1RMUl9NRU1fU1RBUlRfMgkweDg0CS8qIEJhbmtzIDQtNyAqLworI2RlZmluZSBNUEMxMFhfTUNUTFJfRVhUX01FTV9TVEFSVF8xCTB4ODgJLyogQmFua3MgMC0zICovCisjZGVmaW5lIE1QQzEwWF9NQ1RMUl9FWFRfTUVNX1NUQVJUXzIJMHg4YwkvKiBCYW5rcyA0LTcgKi8KKworI2RlZmluZSBNUEMxMFhfTUNUTFJfTUVNX0VORF8xCQkweDkwCS8qIEJhbmtzIDAtMyAqLworI2RlZmluZSBNUEMxMFhfTUNUTFJfTUVNX0VORF8yCQkweDk0CS8qIEJhbmtzIDQtNyAqLworI2RlZmluZSBNUEMxMFhfTUNUTFJfRVhUX01FTV9FTkRfMQkweDk4CS8qIEJhbmtzIDAtMyAqLworI2RlZmluZSBNUEMxMFhfTUNUTFJfRVhUX01FTV9FTkRfMgkweDljCS8qIEJhbmtzIDQtNyAqLworCisjZGVmaW5lIE1QQzEwWF9NQ1RMUl9NRU1fQkFOS19FTkFCTEVTCTB4YTAKKworLyogRGVmaW5lIHNvbWUgb2Zmc2V0IGluIHRoZSBFVU1CICovCisjZGVmaW5lCU1QQzEwWF9FVU1CX1NJWkUJCTB4MDAxMDAwMDAgLyogVG90YWwgRVVNQiBzaXplICgxTUIpICovCisKKyNkZWZpbmUgTVBDMTBYX0VVTUJfTVVfT0ZGU0VUCQkweDAwMDAwMDAwIC8qIE1zZyBVbml0IHJlZyBvZmZzZXQgKi8KKyNkZWZpbmUgTVBDMTBYX0VVTUJfTVVfU0laRQkJMHgwMDAwMTAwMCAvKiBNc2cgVW5pdCByZWcgc2l6ZSAqLworI2RlZmluZSBNUEMxMFhfRVVNQl9ETUFfT0ZGU0VUCQkweDAwMDAxMDAwIC8qIERNQSBVbml0IHJlZyBvZmZzZXQgKi8KKyNkZWZpbmUgTVBDMTBYX0VVTUJfRE1BX1NJWkUJCTB4MDAwMDEwMDAgLyogRE1BIFVuaXQgcmVnIHNpemUgICovCisjZGVmaW5lIE1QQzEwWF9FVU1CX0FUVV9PRkZTRVQJCTB4MDAwMDIwMDAgLyogQWRkciB4bGF0ZSByZWcgb2Zmc2V0ICovCisjZGVmaW5lIE1QQzEwWF9FVU1CX0FUVV9TSVpFCQkweDAwMDAxMDAwIC8qIEFkZHIgeGxhdGUgcmVnIHNpemUgICovCisjZGVmaW5lIE1QQzEwWF9FVU1CX0kyQ19PRkZTRVQJCTB4MDAwMDMwMDAgLyogSTJDIFVuaXQgcmVnIG9mZnNldCAqLworI2RlZmluZSBNUEMxMFhfRVVNQl9JMkNfU0laRQkJMHgwMDAwMTAwMCAvKiBJMkMgVW5pdCByZWcgc2l6ZSAgKi8KKyNkZWZpbmUgTVBDMTBYX0VVTUJfRFVBUlRfT0ZGU0VUCTB4MDAwMDQwMDAgLyogRFVBUlQgVW5pdCByZWcgb2Zmc2V0ICg4MjQ1KSAqLworI2RlZmluZSBNUEMxMFhfRVVNQl9EVUFSVF9TSVpFCQkweDAwMDAxMDAwIC8qIERVQVJUIFVuaXQgcmVnIHNpemUgKDgyNDUpICovCisjZGVmaW5lCU1QQzEwWF9FVU1CX0VQSUNfT0ZGU0VUCQkweDAwMDQwMDAwIC8qIEVQSUMgb2Zmc2V0IGluIEVVTUIgKi8KKyNkZWZpbmUJTVBDMTBYX0VVTUJfRVBJQ19TSVpFCQkweDAwMDMwMDAwIC8qIEVQSUMgc2l6ZSAqLworI2RlZmluZSBNUEMxMFhfRVVNQl9QTV9PRkZTRVQJCTB4MDAwZmUwMDAgLyogUGVyZm9ybWFuY2UgTW9uaXRvciByZWcgb2Zmc2V0ICg4MjQ1KSAqLworI2RlZmluZSBNUEMxMFhfRVVNQl9QTV9TSVpFCQkweDAwMDAxMDAwIC8qIFBlcmZvcm1hbmNlIE1vbml0b3IgcmVnIHNpemUgKDgyNDUpICovCisjZGVmaW5lIE1QQzEwWF9FVU1CX1dQX09GRlNFVAkJMHgwMDBmZjAwMCAvKiBEYXRhIHBhdGggZGlhZ25vc3RpYywgd2F0Y2hwb2ludCByZWcgb2Zmc2V0ICovCisjZGVmaW5lIE1QQzEwWF9FVU1CX1dQX1NJWkUJCTB4MDAwMDEwMDAgLyogRGF0YSBwYXRoIGRpYWdub3N0aWMsIHdhdGNocG9pbnQgcmVnIHNpemUgKi8KKworLyoKKyAqIERlZmluZSBzb21lIHJlY29tbWVuZGVkIHBsYWNlcyB0byBwdXQgdGhlIEVVTUIgcmVncy4KKyAqIEZvciBib3RoIG1hcHMsIHJlY29tbWVuZCBwdXR0aW5nIHRoZSBFVU1CIGZyb20gMHhlZmYwMDAwMCB0byAweGVmZmZmZmZmLgorICovCitleHRlcm4gdW5zaWduZWQgbG9uZwkJCWlvcmVtYXBfYmFzZTsKKyNkZWZpbmUJTVBDMTBYX01BUEFfRVVNQl9CQVNFCQkoaW9yZW1hcF9iYXNlIC0gTVBDMTBYX0VVTUJfU0laRSkKKyNkZWZpbmUJTVBDMTBYX01BUEJfRVVNQl9CQVNFCQlNUEMxMFhfTUFQQV9FVU1CX0JBU0UKKworCitpbnQgbXBjMTB4X2JyaWRnZV9pbml0KHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSwKKwkJICAgICAgIHVpbnQgY3VycmVudF9tYXAsCisJCSAgICAgICB1aW50IG5ld19tYXAsCisJCSAgICAgICB1aW50IHBoeXNfZXVtYl9iYXNlKTsKK3Vuc2lnbmVkIGxvbmcgbXBjMTB4X2dldF9tZW1fc2l6ZSh1aW50IG1lbV9tYXApOworaW50IG1wYzEweF9lbmFibGVfc3RvcmVfZ2F0aGVyaW5nKHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSk7CitpbnQgbXBjMTB4X2Rpc2FibGVfc3RvcmVfZ2F0aGVyaW5nKHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSk7CisKKy8qIEZvciBNUEMxMDcgYm9hcmRzIHRoYXQgdXNlIHRoZSBidWlsdC1pbiBvcGVucGljICovCit2b2lkIG1wYzEweF9zZXRfb3BlbnBpYyh2b2lkKTsKKworI2VuZGlmCS8qIF9fUFBDX0tFUk5FTF9NUEMxMFhfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL21wYzUyeHguaCBiL2luY2x1ZGUvYXNtLXBwYy9tcGM1Mnh4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTVmODBjMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9tcGM1Mnh4LmgKQEAgLTAsMCArMSw0NDUgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1wcGMvbXBjNTJ4eC5oCisgKiAKKyAqIFByb3RvdHlwZXMsIGV0Yy4gZm9yIHRoZSBGcmVlc2NhbGUgTVBDNTJ4eCBlbWJlZGRlZCBjcHUgY2hpcHMKKyAqIE1heSBuZWVkIHRvIGJlIGNsZWFuZWQgYXMgdGhlIHBvcnQgZ29lcyBvbiAuLi4KKyAqCisgKgorICogTWFpbnRhaW5lciA6IFN5bHZhaW4gTXVuYXV0IDx0bnRAMjQ2dE50LmNvbT4KKyAqCisgKiBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgRGFsZSBGYXJuc3dvcnRoIDxkZmFybnN3b3J0aEBtdmlzdGEuY29tPiAKKyAqIGZvciB0aGUgMi40IGtlcm5lbC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBTeWx2YWluIE11bmF1dCA8dG50QDI0NnROdC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgTW9udGFWaXN0YSwgU29mdHdhcmUsIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkKKyAqIGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpZm5kZWYgX19BU01fTVBDNTJ4eF9IX18KKyNkZWZpbmUgX19BU01fTVBDNTJ4eF9IX18KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNpbmNsdWRlIDxhc20vcHBjYm9vdC5oPgorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCitzdHJ1Y3QgcHRfcmVnczsKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qIFBQQyBTeXMgZGV2aWNlcyBkZWZpbml0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKK2VudW0gcHBjX3N5c19kZXZpY2VzIHsKKwlNUEM1Mnh4X01TQ0FOMSwKKwlNUEM1Mnh4X01TQ0FOMiwKKwlNUEM1Mnh4X1NQSSwKKwlNUEM1Mnh4X1VTQiwKKwlNUEM1Mnh4X0JETEMsCisJTVBDNTJ4eF9QU0MxLAorCU1QQzUyeHhfUFNDMiwKKwlNUEM1Mnh4X1BTQzMsCisJTVBDNTJ4eF9QU0M0LAorCU1QQzUyeHhfUFNDNSwKKwlNUEM1Mnh4X1BTQzYsCisJTVBDNTJ4eF9GRUMsCisJTVBDNTJ4eF9BVEEsCisJTVBDNTJ4eF9JMkMxLAorCU1QQzUyeHhfSTJDMiwKK307CisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiBNYWluIHJlZ2lzdGVycy9zdHJ1Y3QgYWRkcmVzc2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisvKiBNQkFSIHBvc2l0aW9uICovCisjZGVmaW5lIE1QQzUyeHhfTUJBUgkJMHhmMDAwMDAwMAkvKiBQaHlzIGFkZHJlc3MgKi8KKyNkZWZpbmUgTVBDNTJ4eF9NQkFSX1ZJUlQJMHhmMDAwMDAwMAkvKiBWaXJ0IGFkZHJlc3MgKi8KKyNkZWZpbmUgTVBDNTJ4eF9NQkFSX1NJWkUJMHgwMDAxMDAwMAorCisjZGVmaW5lIE1QQzUyeHhfUEEoeCkJCSgocGh5c19hZGRyX3QpKE1QQzUyeHhfTUJBUiArICh4KSkpCisjZGVmaW5lIE1QQzUyeHhfVkEoeCkJCSgodm9pZCBfX2lvbWVtICopKE1QQzUyeHhfTUJBUl9WSVJUICsgKHgpKSkKKworLyogUmVnaXN0ZXJzIHpvbmUgb2Zmc2V0L3NpemUgICovCisjZGVmaW5lIE1QQzUyeHhfTU1BUF9DVExfT0ZGU0VUCQkweDAwMDAKKyNkZWZpbmUgTVBDNTJ4eF9NTUFQX0NUTF9TSVpFCQkweDA2OAorI2RlZmluZSBNUEM1Mnh4X1NEUkFNX09GRlNFVAkJMHgwMTAwCisjZGVmaW5lIE1QQzUyeHhfU0RSQU1fU0laRQkJMHgwMTAKKyNkZWZpbmUgTVBDNTJ4eF9DRE1fT0ZGU0VUCQkweDAyMDAKKyNkZWZpbmUgTVBDNTJ4eF9DRE1fU0laRQkJMHgwMzgKKyNkZWZpbmUgTVBDNTJ4eF9JTlRSX09GRlNFVAkJMHgwNTAwCisjZGVmaW5lIE1QQzUyeHhfSU5UUl9TSVpFCQkweDA0YworI2RlZmluZSBNUEM1Mnh4X0dQVHhfT0ZGU0VUKHgpCQkoMHgwNjAwICsgKCh4KTw8NCkpCisjZGVmaW5lIE1QQzUyeHhfR1BUX1NJWkUJCTB4MDEwCisjZGVmaW5lIE1QQzUyeHhfUlRDX09GRlNFVAkJMHgwODAwCisjZGVmaW5lIE1QQzUyeHhfUlRDX1NJWkUJCTB4MDI0CisjZGVmaW5lIE1QQzUyeHhfR1BJT19PRkZTRVQJCTB4MGIwMAorI2RlZmluZSBNUEM1Mnh4X0dQSU9fU0laRQkJMHgwNDAKKyNkZWZpbmUgTVBDNTJ4eF9HUElPX1dLVVBfT0ZGU0VUCTB4MGMwMAorI2RlZmluZSBNUEM1Mnh4X0dQSU9fV0tVUF9TSVpFCQkweDAyOAorI2RlZmluZSBNUEM1Mnh4X1BDSV9PRkZTRVQJCTB4MGQwMAorI2RlZmluZSBNUEM1Mnh4X1BDSV9TSVpFCQkweDEwMAorI2RlZmluZSBNUEM1Mnh4X1NETUFfT0ZGU0VUCQkweDEyMDAKKyNkZWZpbmUgTVBDNTJ4eF9TRE1BX1NJWkUJCTB4MTAwCisjZGVmaW5lIE1QQzUyeHhfWExCX09GRlNFVAkJMHgxZjAwCisjZGVmaW5lIE1QQzUyeHhfWExCX1NJWkUJCTB4MTAwCisjZGVmaW5lIE1QQzUyeHhfUFNDeF9PRkZTRVQoeCkJCSgoKHgpIT02KT8oMHgxZTAwKygoeCk8PDkpKToweDJjMDApCisjZGVmaW5lIE1QQzUyeHhfUFNDX1NJWkUJCTB4MGEwCisKKy8qIFNSQU0gdXNlZCBmb3IgU0RNQSAqLworI2RlZmluZSBNUEM1Mnh4X1NSQU1fT0ZGU0VUCQkweDgwMDAKKyNkZWZpbmUgTVBDNTJ4eF9TUkFNX1NJWkUJCTB4NDAwMAorCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogSVJRIG1hcHBpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qIEJlIHN1cmUgdG8gbG9vayBhdCBtcGM1Mnh4X3BpYy5oIGlmIHlvdSB3aXNoIGZvciB3aGF0ZXZlciByZWFzb24gdG8gY2hhbmdlCisgKiB0aGlzCisgKi8KKworI2RlZmluZSBNUEM1Mnh4X0NSSVRfSVJRX05VTQk0CisjZGVmaW5lIE1QQzUyeHhfTUFJTl9JUlFfTlVNCTE3CisjZGVmaW5lIE1QQzUyeHhfU0RNQV9JUlFfTlVNCTE3CisjZGVmaW5lIE1QQzUyeHhfUEVSUF9JUlFfTlVNCTIzCisKKyNkZWZpbmUgTVBDNTJ4eF9DUklUX0lSUV9CQVNFCTAKKyNkZWZpbmUgTVBDNTJ4eF9NQUlOX0lSUV9CQVNFCShNUEM1Mnh4X0NSSVRfSVJRX0JBU0UgKyBNUEM1Mnh4X0NSSVRfSVJRX05VTSkKKyNkZWZpbmUgTVBDNTJ4eF9TRE1BX0lSUV9CQVNFCShNUEM1Mnh4X01BSU5fSVJRX0JBU0UgKyBNUEM1Mnh4X01BSU5fSVJRX05VTSkKKyNkZWZpbmUgTVBDNTJ4eF9QRVJQX0lSUV9CQVNFCShNUEM1Mnh4X1NETUFfSVJRX0JBU0UgKyBNUEM1Mnh4X1NETUFfSVJRX05VTSkKKworI2RlZmluZSBNUEM1Mnh4X0lSUTAJCQkoTVBDNTJ4eF9DUklUX0lSUV9CQVNFICsgMCkKKyNkZWZpbmUgTVBDNTJ4eF9TTElDRV9USU1FUl8wX0lSUQkoTVBDNTJ4eF9DUklUX0lSUV9CQVNFICsgMSkKKyNkZWZpbmUgTVBDNTJ4eF9ISV9JTlRfSVJRCQkoTVBDNTJ4eF9DUklUX0lSUV9CQVNFICsgMikKKyNkZWZpbmUgTVBDNTJ4eF9DQ1NfSVJRCQkJKE1QQzUyeHhfQ1JJVF9JUlFfQkFTRSArIDMpCisKKyNkZWZpbmUgTVBDNTJ4eF9JUlExCQkJKE1QQzUyeHhfTUFJTl9JUlFfQkFTRSArIDEpCisjZGVmaW5lIE1QQzUyeHhfSVJRMgkJCShNUEM1Mnh4X01BSU5fSVJRX0JBU0UgKyAyKQorI2RlZmluZSBNUEM1Mnh4X0lSUTMJCQkoTVBDNTJ4eF9NQUlOX0lSUV9CQVNFICsgMykKKworI2RlZmluZSBNUEM1Mnh4X1NETUFfSVJRCQkoTVBDNTJ4eF9QRVJQX0lSUV9CQVNFICsgMCkKKyNkZWZpbmUgTVBDNTJ4eF9QU0MxX0lSUQkJKE1QQzUyeHhfUEVSUF9JUlFfQkFTRSArIDEpCisjZGVmaW5lIE1QQzUyeHhfUFNDMl9JUlEJCShNUEM1Mnh4X1BFUlBfSVJRX0JBU0UgKyAyKQorI2RlZmluZSBNUEM1Mnh4X1BTQzNfSVJRCQkoTVBDNTJ4eF9QRVJQX0lSUV9CQVNFICsgMykKKyNkZWZpbmUgTVBDNTJ4eF9QU0M2X0lSUQkJKE1QQzUyeHhfUEVSUF9JUlFfQkFTRSArIDQpCisjZGVmaW5lIE1QQzUyeHhfSVJEQV9JUlEJCShNUEM1Mnh4X1BFUlBfSVJRX0JBU0UgKyA0KQorI2RlZmluZSBNUEM1Mnh4X0ZFQ19JUlEJCQkoTVBDNTJ4eF9QRVJQX0lSUV9CQVNFICsgNSkKKyNkZWZpbmUgTVBDNTJ4eF9VU0JfSVJRCQkJKE1QQzUyeHhfUEVSUF9JUlFfQkFTRSArIDYpCisjZGVmaW5lIE1QQzUyeHhfQVRBX0lSUQkJCShNUEM1Mnh4X1BFUlBfSVJRX0JBU0UgKyA3KQorI2RlZmluZSBNUEM1Mnh4X1BDSV9DTlRSTF9JUlEJCShNUEM1Mnh4X1BFUlBfSVJRX0JBU0UgKyA4KQorI2RlZmluZSBNUEM1Mnh4X1BDSV9TQ0lSWF9JUlEJCShNUEM1Mnh4X1BFUlBfSVJRX0JBU0UgKyA5KQorI2RlZmluZSBNUEM1Mnh4X1BDSV9TQ0lUWF9JUlEJCShNUEM1Mnh4X1BFUlBfSVJRX0JBU0UgKyAxMCkKKyNkZWZpbmUgTVBDNTJ4eF9QU0M0X0lSUQkJKE1QQzUyeHhfUEVSUF9JUlFfQkFTRSArIDExKQorI2RlZmluZSBNUEM1Mnh4X1BTQzVfSVJRCQkoTVBDNTJ4eF9QRVJQX0lSUV9CQVNFICsgMTIpCisjZGVmaW5lIE1QQzUyeHhfU1BJX01PREZfSVJRCQkoTVBDNTJ4eF9QRVJQX0lSUV9CQVNFICsgMTMpCisjZGVmaW5lIE1QQzUyeHhfU1BJX1NQSUZfSVJRCQkoTVBDNTJ4eF9QRVJQX0lSUV9CQVNFICsgMTQpCisjZGVmaW5lIE1QQzUyeHhfSTJDMV9JUlEJCShNUEM1Mnh4X1BFUlBfSVJRX0JBU0UgKyAxNSkKKyNkZWZpbmUgTVBDNTJ4eF9JMkMyX0lSUQkJKE1QQzUyeHhfUEVSUF9JUlFfQkFTRSArIDE2KQorI2RlZmluZSBNUEM1Mnh4X01TQ0FOMV9JUlEJCShNUEM1Mnh4X1BFUlBfSVJRX0JBU0UgKyAxNykKKyNkZWZpbmUgTVBDNTJ4eF9NU0NBTjJfSVJRCQkoTVBDNTJ4eF9QRVJQX0lSUV9CQVNFICsgMTgpCisjZGVmaW5lIE1QQzUyeHhfSVJfUlhfSVJRCQkoTVBDNTJ4eF9QRVJQX0lSUV9CQVNFICsgMTkpCisjZGVmaW5lIE1QQzUyeHhfSVJfVFhfSVJRCQkoTVBDNTJ4eF9QRVJQX0lSUV9CQVNFICsgMjApCisjZGVmaW5lIE1QQzUyeHhfWExCX0FSQl9JUlEJCShNUEM1Mnh4X1BFUlBfSVJRX0JBU0UgKyAyMSkKKyNkZWZpbmUgTVBDNTJ4eF9CRExDX0lSUQkJKE1QQzUyeHhfUEVSUF9JUlFfQkFTRSArIDIyKQorCisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiBTdHJ1Y3R1cmVzIG1hcHBpbmcgb2Ygc29tZSB1bml0IHJlZ2lzdGVyIHNldCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisvKiBNZW1vcnkgTWFwcGluZyBDb250cm9sICovCitzdHJ1Y3QgbXBjNTJ4eF9tbWFwX2N0bCB7CisJdTMyCW1iYXI7CQkvKiBNTUFQX0NUUkwgKyAweDAwICovCisKKwl1MzIJY3MwX3N0YXJ0OwkvKiBNTUFQX0NUUkwgKyAweDA0ICovCisJdTMyCWNzMF9zdG9wOwkvKiBNTUFQX0NUUkwgKyAweDA4ICovCisJdTMyCWNzMV9zdGFydDsJLyogTU1BUF9DVFJMICsgMHgwYyAqLworCXUzMgljczFfc3RvcDsJLyogTU1BUF9DVFJMICsgMHgxMCAqLworCXUzMgljczJfc3RhcnQ7CS8qIE1NQVBfQ1RSTCArIDB4MTQgKi8KKwl1MzIJY3MyX3N0b3A7CS8qIE1NQVBfQ1RSTCArIDB4MTggKi8KKwl1MzIJY3MzX3N0YXJ0OwkvKiBNTUFQX0NUUkwgKyAweDFjICovCisJdTMyCWNzM19zdG9wOwkvKiBNTUFQX0NUUkwgKyAweDIwICovCisJdTMyCWNzNF9zdGFydDsJLyogTU1BUF9DVFJMICsgMHgyNCAqLworCXUzMgljczRfc3RvcDsJLyogTU1BUF9DVFJMICsgMHgyOCAqLworCXUzMgljczVfc3RhcnQ7CS8qIE1NQVBfQ1RSTCArIDB4MmMgKi8KKwl1MzIJY3M1X3N0b3A7CS8qIE1NQVBfQ1RSTCArIDB4MzAgKi8KKworCXUzMglzZHJhbTA7CQkvKiBNTUFQX0NUUkwgKyAweDM0ICovCisJdTMyCXNkcmFtMTsJCS8qIE1NQVBfQ1RSTCArIDBYMzggKi8KKworCXUzMglyZXNlcnZlZFs0XTsJLyogTU1BUF9DVFJMICsgMHgzYyAuLiAweDQ4ICovCisKKwl1MzIJYm9vdF9zdGFydDsJLyogTU1BUF9DVFJMICsgMHg0YyAqLworCXUzMglib290X3N0b3A7CS8qIE1NQVBfQ1RSTCArIDB4NTAgKi8KKworCXUzMglpcGJpX3dzX2N0cmw7CS8qIE1NQVBfQ1RSTCArIDB4NTQgKi8KKworCXUzMgljczZfc3RhcnQ7CS8qIE1NQVBfQ1RSTCArIDB4NTggKi8KKwl1MzIJY3M2X3N0b3A7CS8qIE1NQVBfQ1RSTCArIDB4NWMgKi8KKwl1MzIJY3M3X3N0YXJ0OwkvKiBNTUFQX0NUUkwgKyAweDYwICovCisJdTMyCWNzN19zdG9wOwkvKiBNTUFQX0NUUkwgKyAweDY0ICovCit9OworCisvKiBTRFJBTSBjb250cm9sICovCitzdHJ1Y3QgbXBjNTJ4eF9zZHJhbSB7CisJdTMyCW1vZGU7CQkvKiBTRFJBTSArIDB4MDAgKi8KKwl1MzIJY3RybDsJCS8qIFNEUkFNICsgMHgwNCAqLworCXUzMgljb25maWcxOwkvKiBTRFJBTSArIDB4MDggKi8KKwl1MzIJY29uZmlnMjsJLyogU0RSQU0gKyAweDBjICovCit9OworCisvKiBJbnRlcnJ1cHQgY29udHJvbGxlciAqLworc3RydWN0IG1wYzUyeHhfaW50ciB7CisJdTMyCXBlcl9tYXNrOwkvKiBJTlRSICsgMHgwMCAqLworCXUzMglwZXJfcHJpMTsJLyogSU5UUiArIDB4MDQgKi8KKwl1MzIJcGVyX3ByaTI7CS8qIElOVFIgKyAweDA4ICovCisJdTMyCXBlcl9wcmkzOwkvKiBJTlRSICsgMHgwYyAqLworCXUzMgljdHJsOwkJLyogSU5UUiArIDB4MTAgKi8KKwl1MzIJbWFpbl9tYXNrOwkvKiBJTlRSICsgMHgxNCAqLworCXUzMgltYWluX3ByaTE7CS8qIElOVFIgKyAweDE4ICovCisJdTMyCW1haW5fcHJpMjsJLyogSU5UUiArIDB4MWMgKi8KKwl1MzIJcmVzZXJ2ZWQxOwkvKiBJTlRSICsgMHgyMCAqLworCXUzMgllbmNfc3RhdHVzOwkvKiBJTlRSICsgMHgyNCAqLworCXUzMgljcml0X3N0YXR1czsJLyogSU5UUiArIDB4MjggKi8KKwl1MzIJbWFpbl9zdGF0dXM7CS8qIElOVFIgKyAweDJjICovCisJdTMyCXBlcl9zdGF0dXM7CS8qIElOVFIgKyAweDMwICovCisJdTMyCXJlc2VydmVkMjsJLyogSU5UUiArIDB4MzQgKi8KKwl1MzIJcGVyX2Vycm9yOwkvKiBJTlRSICsgMHgzOCAqLworfTsKKworLyogU0RNQSAqLworc3RydWN0IG1wYzUyeHhfc2RtYSB7CisJdTMyCXRhc2tCYXI7CS8qIFNETUEgKyAweDAwICovCisJdTMyCWN1cnJlbnRQb2ludGVyOwkvKiBTRE1BICsgMHgwNCAqLworCXUzMgllbmRQb2ludGVyOwkvKiBTRE1BICsgMHgwOCAqLworCXUzMgl2YXJpYWJsZVBvaW50ZXI7LyogU0RNQSArIDB4MGMgKi8KKworCXU4CUludFZlY3QxOwkvKiBTRE1BICsgMHgxMCAqLworCXU4CUludFZlY3QyOwkvKiBTRE1BICsgMHgxMSAqLworCXUxNglQdGRDbnRybDsJLyogU0RNQSArIDB4MTIgKi8KKworCXUzMglJbnRQZW5kOwkvKiBTRE1BICsgMHgxNCAqLworCXUzMglJbnRNYXNrOwkvKiBTRE1BICsgMHgxOCAqLworCisJdTE2CXRjclsxNl07CS8qIFNETUEgKyAweDFjIC4uIDB4M2EgKi8KKworCXU4CWlwclszMl07CS8qIFNETUEgKyAweDNjIC4uIDB4NWIgKi8KKworCXUzMgljUmVxU2VsZWN0OwkvKiBTRE1BICsgMHg1YyAqLworCXUzMgl0YXNrX3NpemUwOwkvKiBTRE1BICsgMHg2MCAqLworCXUzMgl0YXNrX3NpemUxOwkvKiBTRE1BICsgMHg2NCAqLworCXUzMglNREVEZWJ1ZzsJLyogU0RNQSArIDB4NjggKi8KKwl1MzIJQURTRGVidWc7CS8qIFNETUEgKyAweDZjICovCisJdTMyCVZhbHVlMTsJCS8qIFNETUEgKyAweDcwICovCisJdTMyCVZhbHVlMjsJCS8qIFNETUEgKyAweDc0ICovCisJdTMyCUNvbnRyb2w7CS8qIFNETUEgKyAweDc4ICovCisJdTMyCVN0YXR1czsJCS8qIFNETUEgKyAweDdjICovCisJdTMyCVBURERlYnVnOwkvKiBTRE1BICsgMHg4MCAqLworfTsKKworLyogR1BUICovCitzdHJ1Y3QgbXBjNTJ4eF9ncHQgeworCXUzMgltb2RlOwkJLyogR1BUeCArIDB4MDAgKi8KKwl1MzIJY291bnQ7CQkvKiBHUFR4ICsgMHgwNCAqLworCXUzMglwd207CQkvKiBHUFR4ICsgMHgwOCAqLworCXUzMglzdGF0dXM7CQkvKiBHUFR4ICsgMFgwYyAqLworfTsKKworLyogUlRDICovCitzdHJ1Y3QgbXBjNTJ4eF9ydGMgeworCXUzMgl0aW1lX3NldDsJLyogUlRDICsgMHgwMCAqLworCXUzMglkYXRlX3NldDsJLyogUlRDICsgMHgwNCAqLworCXUzMglzdG9wd2F0Y2g7CS8qIFJUQyArIDB4MDggKi8KKwl1MzIJaW50X2VuYWJsZTsJLyogUlRDICsgMHgwYyAqLworCXUzMgl0aW1lOwkJLyogUlRDICsgMHgxMCAqLworCXUzMglkYXRlOwkJLyogUlRDICsgMHgxNCAqLworCXUzMglzdG9wd2F0Y2hfaW50cjsJLyogUlRDICsgMHgxOCAqLworCXUzMglidXNfZXJyb3I7CS8qIFJUQyArIDB4MWMgKi8KKwl1MzIJZGl2aWRlcnM7CS8qIFJUQyArIDB4MjAgKi8KK307CisKKy8qIEdQSU8gKi8KK3N0cnVjdCBtcGM1Mnh4X2dwaW8geworCXUzMglwb3J0X2NvbmZpZzsJLyogR1BJTyArIDB4MDAgKi8KKwl1MzIJc2ltcGxlX2dwaW9lOwkvKiBHUElPICsgMHgwNCAqLworCXUzMglzaW1wbGVfb2RlOwkvKiBHUElPICsgMHgwOCAqLworCXUzMglzaW1wbGVfZGRyOwkvKiBHUElPICsgMHgwYyAqLworCXUzMglzaW1wbGVfZHZvOwkvKiBHUElPICsgMHgxMCAqLworCXUzMglzaW1wbGVfaXZhbDsJLyogR1BJTyArIDB4MTQgKi8KKwl1OAlvdXRvX2dwaW9lOwkvKiBHUElPICsgMHgxOCAqLworCXU4CXJlc2VydmVkMVszXTsJLyogR1BJTyArIDB4MTkgKi8KKwl1OAlvdXRvX2R2bzsJLyogR1BJTyArIDB4MWMgKi8KKwl1OAlyZXNlcnZlZDJbM107CS8qIEdQSU8gKyAweDFkICovCisJdTgJc2ludF9ncGlvZTsJLyogR1BJTyArIDB4MjAgKi8KKwl1OAlyZXNlcnZlZDNbM107CS8qIEdQSU8gKyAweDIxICovCisJdTgJc2ludF9vZGU7CS8qIEdQSU8gKyAweDI0ICovCisJdTgJcmVzZXJ2ZWQ0WzNdOwkvKiBHUElPICsgMHgyNSAqLworCXU4CXNpbnRfZGRyOwkvKiBHUElPICsgMHgyOCAqLworCXU4CXJlc2VydmVkNVszXTsJLyogR1BJTyArIDB4MjkgKi8KKwl1OAlzaW50X2R2bzsJLyogR1BJTyArIDB4MmMgKi8KKwl1OAlyZXNlcnZlZDZbM107CS8qIEdQSU8gKyAweDJkICovCisJdTgJc2ludF9pbnRlbjsJLyogR1BJTyArIDB4MzAgKi8KKwl1OAlyZXNlcnZlZDdbM107CS8qIEdQSU8gKyAweDMxICovCisJdTE2CXNpbnRfaXR5cGU7CS8qIEdQSU8gKyAweDM0ICovCisJdTE2CXJlc2VydmVkODsJLyogR1BJTyArIDB4MzYgKi8KKwl1OAlncGlvX2NvbnRyb2w7CS8qIEdQSU8gKyAweDM4ICovCisJdTgJcmVzZXJ2ZWQ5WzNdOwkvKiBHUElPICsgMHgzOSAqLworCXU4CXNpbnRfaXN0YXQ7CS8qIEdQSU8gKyAweDNjICovCisJdTgJc2ludF9pdmFsOwkvKiBHUElPICsgMHgzZCAqLworCXU4CWJ1c19lcnJzOwkvKiBHUElPICsgMHgzZSAqLworCXU4CXJlc2VydmVkMTA7CS8qIEdQSU8gKyAweDNmICovCit9OworCisjZGVmaW5lIE1QQzUyeHhfR1BJT19QU0NfQ09ORklHX1VBUlRfV0lUSE9VVF9DRAk0CisjZGVmaW5lIE1QQzUyeHhfR1BJT19QU0NfQ09ORklHX1VBUlRfV0lUSF9DRAk1CisjZGVmaW5lIE1QQzUyeHhfR1BJT19QQ0lfRElTCQkJKDE8PDE1KQorCisvKiBHUElPIHdpdGggV2FrZVVwKi8KK3N0cnVjdCBtcGM1Mnh4X2dwaW9fd2t1cCB7CisJdTgJd2t1cF9ncGlvZTsJLyogR1BJT19XS1VQICsgMHgwMCAqLworCXU4CXJlc2VydmVkMVszXTsJLyogR1BJT19XS1VQICsgMHgwMyAqLworCXU4CXdrdXBfb2RlOwkvKiBHUElPX1dLVVAgKyAweDA0ICovCisJdTgJcmVzZXJ2ZWQyWzNdOwkvKiBHUElPX1dLVVAgKyAweDA1ICovCisJdTgJd2t1cF9kZHI7CS8qIEdQSU9fV0tVUCArIDB4MDggKi8KKwl1OAlyZXNlcnZlZDNbM107CS8qIEdQSU9fV0tVUCArIDB4MDkgKi8KKwl1OAl3a3VwX2R2bzsJLyogR1BJT19XS1VQICsgMHgwQyAqLworCXU4CXJlc2VydmVkNFszXTsJLyogR1BJT19XS1VQICsgMHgwRCAqLworCXU4CXdrdXBfaW50ZW47CS8qIEdQSU9fV0tVUCArIDB4MTAgKi8KKwl1OAlyZXNlcnZlZDVbM107CS8qIEdQSU9fV0tVUCArIDB4MTEgKi8KKwl1OAl3a3VwX2lpbnRlbjsJLyogR1BJT19XS1VQICsgMHgxNCAqLworCXU4CXJlc2VydmVkNlszXTsJLyogR1BJT19XS1VQICsgMHgxNSAqLworCXUxNgl3a3VwX2l0eXBlOwkvKiBHUElPX1dLVVAgKyAweDE4ICovCisJdTgJcmVzZXJ2ZWQ3WzJdOwkvKiBHUElPX1dLVVAgKyAweDFBICovCisJdTgJd2t1cF9tYXN0ZTsJLyogR1BJT19XS1VQICsgMHgxQyAqLworCXU4CXJlc2VydmVkOFszXTsJLyogR1BJT19XS1VQICsgMHgxRCAqLworCXU4CXdrdXBfaXZhbDsJLyogR1BJT19XS1VQICsgMHgyMCAqLworCXU4CXJlc2VydmVkOVszXTsJLyogR1BJT19XS1VQICsgMHgyMSAqLworCXU4CXdrdXBfaXN0YXQ7CS8qIEdQSU9fV0tVUCArIDB4MjQgKi8KKwl1OAlyZXNlcnZlZDEwWzNdOwkvKiBHUElPX1dLVVAgKyAweDI1ICovCit9OworCisvKiBYTEIgQnVzIGNvbnRyb2wgKi8KK3N0cnVjdCBtcGM1Mnh4X3hsYiB7CisJdTgJcmVzZXJ2ZWRbMHg0MF07CisJdTMyCWNvbmZpZzsJCQkvKiBYTEIgKyAweDQwICovCisJdTMyCXZlcnNpb247CQkvKiBYTEIgKyAweDQ0ICovCisJdTMyCXN0YXR1czsJCQkvKiBYTEIgKyAweDQ4ICovCisJdTMyCWludF9lbmFibGU7CQkvKiBYTEIgKyAweDRjICovCisJdTMyCWFkZHJfY2FwdHVyZTsJCS8qIFhMQiArIDB4NTAgKi8KKwl1MzIJYnVzX3NpZ19jYXB0dXJlOwkvKiBYTEIgKyAweDU0ICovCisJdTMyCWFkZHJfdGltZW91dDsJCS8qIFhMQiArIDB4NTggKi8KKwl1MzIJZGF0YV90aW1lb3V0OwkJLyogWExCICsgMHg1YyAqLworCXUzMglidXNfYWN0X3RpbWVvdXQ7CS8qIFhMQiArIDB4NjAgKi8KKwl1MzIJbWFzdGVyX3ByaV9lbmFibGU7CS8qIFhMQiArIDB4NjQgKi8KKwl1MzIJbWFzdGVyX3ByaW9yaXR5OwkvKiBYTEIgKyAweDY4ICovCisJdTMyCWJhc2VfYWRkcmVzczsJCS8qIFhMQiArIDB4NmMgKi8KKwl1MzIJc25vb3Bfd2luZG93OwkJLyogWExCICsgMHg3MCAqLworfTsKKworI2RlZmluZSBNUEM1Mnh4X1hMQl9DRkdfU05PT1AJCSgxIDw8IDE1KQorCisvKiBDbG9jayBEaXN0cmlidXRpb24gY29udHJvbCAqLworc3RydWN0IG1wYzUyeHhfY2RtIHsKKwl1MzIJanRhZ19pZDsJCS8qIENETSArIDB4MDAgIHJlZzAgcmVhZCBvbmx5ICovCisJdTMyCXJzdGNmZzsJCQkvKiBDRE0gKyAweDA0ICByZWcxIHJlYWQgb25seSAqLworCXUzMglicmVhZGNydW1iOwkJLyogQ0RNICsgMHgwOCAgcmVnMiAqLworCisJdTgJbWVtX2Nsa19zZWw7CQkvKiBDRE0gKyAweDBjICByZWczIGJ5dGUwICovCisJdTgJeGxiX2Nsa19zZWw7CQkvKiBDRE0gKyAweDBkICByZWczIGJ5dGUxIHJlYWQgb25seSAqLworCXU4CWlwYl9jbGtfc2VsOwkJLyogQ0RNICsgMHgwZSAgcmVnMyBieXRlMiAqLworCXU4CXBjaV9jbGtfc2VsOwkJLyogQ0RNICsgMHgwZiAgcmVnMyBieXRlMyAqLworCisJdTgJZXh0XzQ4bWh6X2VuOwkJLyogQ0RNICsgMHgxMCAgcmVnNCBieXRlMCAqLworCXU4CWZkX2VuYWJsZTsJCS8qIENETSArIDB4MTEgIHJlZzQgYnl0ZTEgKi8KKwl1MTYJZmRfY291bnRlcnM7CQkvKiBDRE0gKyAweDEyICByZWc0IGJ5dGUyLDMgKi8KKworCXUzMgljbGtfZW5hYmxlczsJCS8qIENETSArIDB4MTQgIHJlZzUgKi8KKworCXU4CW9zY19kaXNhYmxlOwkJLyogQ0RNICsgMHgxOCAgcmVnNiBieXRlMCAqLworCXU4CXJlc2VydmVkMFszXTsJCS8qIENETSArIDB4MTkgIHJlZzYgYnl0ZTEsMiwzICovCisKKwl1OAljY3Nfc2xlZXBfZW5hYmxlOwkvKiBDRE0gKyAweDFjICByZWc3IGJ5dGUwICovCisJdTgJb3NjX3NsZWVwX2VuYWJsZTsJLyogQ0RNICsgMHgxZCAgcmVnNyBieXRlMSAqLworCXU4CXJlc2VydmVkMTsJCS8qIENETSArIDB4MWUgIHJlZzcgYnl0ZTIgKi8KKwl1OAljY3NfcXJlcV90ZXN0OwkJLyogQ0RNICsgMHgxZiAgcmVnNyBieXRlMyAqLworCisJdTgJc29mdF9yZXNldDsJCS8qIENETSArIDB4MjAgIHU4IGJ5dGUwICovCisJdTgJbm9fY2tzdHA7CQkvKiBDRE0gKyAweDIxICB1OCBieXRlMCAqLworCXU4CXJlc2VydmVkMlsyXTsJCS8qIENETSArIDB4MjIgIHU4IGJ5dGUxLDIsMyAqLworCisJdTgJcGxsX2xvY2s7CQkvKiBDRE0gKyAweDI0ICByZWc5IGJ5dGUwICovCisJdTgJcGxsX2xvb3NlbG9jazsJCS8qIENETSArIDB4MjUgIHJlZzkgYnl0ZTEgKi8KKwl1OAlwbGxfc21fbG9ja3dpbjsJCS8qIENETSArIDB4MjYgIHJlZzkgYnl0ZTIgKi8KKwl1OAlyZXNlcnZlZDM7CQkvKiBDRE0gKyAweDI3ICByZWc5IGJ5dGUzICovCisKKwl1MTYJcmVzZXJ2ZWQ0OwkJLyogQ0RNICsgMHgyOCAgcmVnMTAgYnl0ZTAsMSAqLworCXUxNgltY2xrZW5fZGl2X3BzYzE7CS8qIENETSArIDB4MmEgIHJlZzEwIGJ5dGUyLDMgKi8KKworCXUxNglyZXNlcnZlZDU7CQkvKiBDRE0gKyAweDJjICByZWcxMSBieXRlMCwxICovCisJdTE2CW1jbGtlbl9kaXZfcHNjMjsJLyogQ0RNICsgMHgyZSAgcmVnMTEgYnl0ZTIsMyAqLworCisJdTE2CXJlc2VydmVkNjsJCS8qIENETSArIDB4MzAgIHJlZzEyIGJ5dGUwLDEgKi8KKwl1MTYJbWNsa2VuX2Rpdl9wc2MzOwkvKiBDRE0gKyAweDMyICByZWcxMiBieXRlMiwzICovCisKKwl1MTYJcmVzZXJ2ZWQ3OwkJLyogQ0RNICsgMHgzNCAgcmVnMTMgYnl0ZTAsMSAqLworCXUxNgltY2xrZW5fZGl2X3BzYzY7CS8qIENETSArIDB4MzYgIHJlZzEzIGJ5dGUyLDMgKi8KK307CisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiBQcm90b3R5cGVzIGZvciBNUEM1Mnh4IHN5c2xpYiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK2V4dGVybiB2b2lkIG1wYzUyeHhfaW5pdF9pcnEodm9pZCk7CitleHRlcm4gaW50IG1wYzUyeHhfZ2V0X2lycShzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIG1wYzUyeHhfZmluZF9lbmRfb2ZfbWVtb3J5KHZvaWQpOworZXh0ZXJuIHZvaWQgbXBjNTJ4eF9zZXRfYmF0KHZvaWQpOworZXh0ZXJuIHZvaWQgbXBjNTJ4eF9tYXBfaW8odm9pZCk7CitleHRlcm4gdm9pZCBtcGM1Mnh4X3Jlc3RhcnQoY2hhciAqY21kKTsKK2V4dGVybiB2b2lkIG1wYzUyeHhfaGFsdCh2b2lkKTsKK2V4dGVybiB2b2lkIG1wYzUyeHhfcG93ZXJfb2ZmKHZvaWQpOworZXh0ZXJuIHZvaWQgbXBjNTJ4eF9wcm9ncmVzcyhjaGFyICpzLCB1bnNpZ25lZCBzaG9ydCBoZXgpOworZXh0ZXJuIHZvaWQgbXBjNTJ4eF9jYWxpYnJhdGVfZGVjcih2b2lkKTsKKworZXh0ZXJuIHZvaWQgbXBjNTJ4eF9maW5kX2JyaWRnZXModm9pZCk7CisKKworCS8qIE1hdGNoaW5nIG9mIFBTQyBmdW5jdGlvbiAqLworc3RydWN0IG1wYzUyeHhfcHNjX2Z1bmMgeworCWludCBpZDsKKwljaGFyICpmdW5jOworfTsKKworZXh0ZXJuIGludCBtcGM1Mnh4X21hdGNoX3BzY19mdW5jdGlvbihpbnQgcHNjX2lkeCwgY29uc3QgY2hhciAqZnVuYyk7CitleHRlcm4gc3RydWN0ICBtcGM1Mnh4X3BzY19mdW5jIG1wYzUyeHhfcHNjX2Z1bmN0aW9uc1tdOworCS8qIFRoaXMgYXJyYXkgaXMgdG8gYmUgZGVmaW5lZCBpbiBwbGF0Zm9ybSBmaWxlICovCisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiBQbGF0Zm9ybSBjb25maWd1cmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKy8qIFRoZSBVLUJvb3QgcGxhdGZvcm0gaW5mb3JtYXRpb24gc3RydWN0ICovCitleHRlcm4gYmRfdCBfX3JlczsKKworLyogUGxhdGZvcm0gb3B0aW9ucyAqLworI2lmIGRlZmluZWQoQ09ORklHX0xJVEU1MjAwKQorI2luY2x1ZGUgPHBsYXRmb3Jtcy9saXRlNTIwMC5oPgorI2VuZGlmCisKKworI2VuZGlmIC8qIF9fQVNNX01QQzUyeHhfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvbXBjNTJ4eF9wc2MuaCBiL2luY2x1ZGUvYXNtLXBwYy9tcGM1Mnh4X3BzYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkODUwYjIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGMvbXBjNTJ4eF9wc2MuaApAQCAtMCwwICsxLDE5MSBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLXBwYy9tcGM1Mnh4X3BzYy5oCisgKiAKKyAqIERlZmluaXRpb25zIG9mIGNvbnN0cy9zdHJ1Y3RzIHRvIGRyaXZlIHRoZSBGcmVlc2NhbGUgTVBDNTJ4eCBPbkNoaXAKKyAqIFBTQ3MuIFRoZXNlcyBhcmUgc2hhcmVkIGJldHdlZW4gbXVsdGlwbGUgZHJpdmVycyBzaW5jZSBhIFBTQyBjYW4gYmUKKyAqIFVBUlQsIEFDOTcsIElSLCBJMlMsIC4uLiBTbyB0aGlzIGhlYWRlciBpcyBpbiBhc20tcHBjLgorICoKKyAqCisgKiBNYWludGFpbmVyIDogU3lsdmFpbiBNdW5hdXQgPHRudEAyNDZ0TnQuY29tPgorICoKKyAqIEJhc2VkL0V4dHJhY3RlZCBmcm9tIHNvbWUgaGVhZGVyIG9mIHRoZSAyLjQgb3JpZ2luYWxseSB3cml0dGVuIGJ5IAorICogRGFsZSBGYXJuc3dvcnRoIDxkZmFybnN3b3J0aEBtdmlzdGEuY29tPiAKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgU3lsdmFpbiBNdW5hdXQgPHRudEAyNDZ0TnQuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDAzIE1vbnRhVmlzdGEsIFNvZnR3YXJlLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55CisgKiBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjaWZuZGVmIF9fQVNNX01QQzUyeHhfUFNDX0hfXworI2RlZmluZSBfX0FTTV9NUEM1Mnh4X1BTQ19IX18KKworI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCisvKiBNYXggbnVtYmVyIG9mIFBTQ3MgKi8KKyNkZWZpbmUgTVBDNTJ4eF9QU0NfTUFYTlVNCTYKKworLyogUHJvZ3JhbW1hYmxlIFNlcmlhbCBDb250cm9sbGVyIChQU0MpIHN0YXR1cyByZWdpc3RlciBiaXRzICovCisjZGVmaW5lIE1QQzUyeHhfUFNDX1NSX0NERQkweDAwODAKKyNkZWZpbmUgTVBDNTJ4eF9QU0NfU1JfUlhSRFkJMHgwMTAwCisjZGVmaW5lIE1QQzUyeHhfUFNDX1NSX1JYRlVMTAkweDAyMDAKKyNkZWZpbmUgTVBDNTJ4eF9QU0NfU1JfVFhSRFkJMHgwNDAwCisjZGVmaW5lIE1QQzUyeHhfUFNDX1NSX1RYRU1QCTB4MDgwMAorI2RlZmluZSBNUEM1Mnh4X1BTQ19TUl9PRQkweDEwMDAKKyNkZWZpbmUgTVBDNTJ4eF9QU0NfU1JfUEUJMHgyMDAwCisjZGVmaW5lIE1QQzUyeHhfUFNDX1NSX0ZFCTB4NDAwMAorI2RlZmluZSBNUEM1Mnh4X1BTQ19TUl9SQgkweDgwMDAKKworLyogUFNDIENvbW1hbmQgdmFsdWVzICovCisjZGVmaW5lIE1QQzUyeHhfUFNDX1JYX0VOQUJMRQkJMHgwMDAxCisjZGVmaW5lIE1QQzUyeHhfUFNDX1JYX0RJU0FCTEUJCTB4MDAwMgorI2RlZmluZSBNUEM1Mnh4X1BTQ19UWF9FTkFCTEUJCTB4MDAwNAorI2RlZmluZSBNUEM1Mnh4X1BTQ19UWF9ESVNBQkxFCQkweDAwMDgKKyNkZWZpbmUgTVBDNTJ4eF9QU0NfU0VMX01PREVfUkVHXzEJMHgwMDEwCisjZGVmaW5lIE1QQzUyeHhfUFNDX1JTVF9SWAkJMHgwMDIwCisjZGVmaW5lIE1QQzUyeHhfUFNDX1JTVF9UWAkJMHgwMDMwCisjZGVmaW5lIE1QQzUyeHhfUFNDX1JTVF9FUlJfU1RBVAkweDAwNDAKKyNkZWZpbmUgTVBDNTJ4eF9QU0NfUlNUX0JSS19DSEdfSU5UCTB4MDA1MAorI2RlZmluZSBNUEM1Mnh4X1BTQ19TVEFSVF9CUksJCTB4MDA2MAorI2RlZmluZSBNUEM1Mnh4X1BTQ19TVE9QX0JSSwkJMHgwMDcwCisKKy8qIFBTQyBUeFJ4IEZJRk8gc3RhdHVzIGJpdHMgKi8KKyNkZWZpbmUgTVBDNTJ4eF9QU0NfUlhUWF9GSUZPX0VSUgkweDAwNDAKKyNkZWZpbmUgTVBDNTJ4eF9QU0NfUlhUWF9GSUZPX1VGCTB4MDAyMAorI2RlZmluZSBNUEM1Mnh4X1BTQ19SWFRYX0ZJRk9fT0YJMHgwMDEwCisjZGVmaW5lIE1QQzUyeHhfUFNDX1JYVFhfRklGT19GUgkweDAwMDgKKyNkZWZpbmUgTVBDNTJ4eF9QU0NfUlhUWF9GSUZPX0ZVTEwJMHgwMDA0CisjZGVmaW5lIE1QQzUyeHhfUFNDX1JYVFhfRklGT19BTEFSTQkweDAwMDIKKyNkZWZpbmUgTVBDNTJ4eF9QU0NfUlhUWF9GSUZPX0VNUFRZCTB4MDAwMQorCisvKiBQU0MgaW50ZXJydXB0IG1hc2sgYml0cyAqLworI2RlZmluZSBNUEM1Mnh4X1BTQ19JTVJfVFhSRFkJCTB4MDEwMAorI2RlZmluZSBNUEM1Mnh4X1BTQ19JTVJfUlhSRFkJCTB4MDIwMAorI2RlZmluZSBNUEM1Mnh4X1BTQ19JTVJfREIJCTB4MDQwMAorI2RlZmluZSBNUEM1Mnh4X1BTQ19JTVJfSVBDCQkweDgwMDAKKworLyogUFNDIGlucHV0IHBvcnQgY2hhbmdlIGJpdCAqLworI2RlZmluZSBNUEM1Mnh4X1BTQ19DVFMJCQkweDAxCisjZGVmaW5lIE1QQzUyeHhfUFNDX0RDRAkJCTB4MDIKKyNkZWZpbmUgTVBDNTJ4eF9QU0NfRF9DVFMJCTB4MTAKKyNkZWZpbmUgTVBDNTJ4eF9QU0NfRF9EQ0QJCTB4MjAKKworLyogUFNDIG1vZGUgZmllbGRzICovCisjZGVmaW5lIE1QQzUyeHhfUFNDX01PREVfNV9CSVRTCQkJMHgwMAorI2RlZmluZSBNUEM1Mnh4X1BTQ19NT0RFXzZfQklUUwkJCTB4MDEKKyNkZWZpbmUgTVBDNTJ4eF9QU0NfTU9ERV83X0JJVFMJCQkweDAyCisjZGVmaW5lIE1QQzUyeHhfUFNDX01PREVfOF9CSVRTCQkJMHgwMworI2RlZmluZSBNUEM1Mnh4X1BTQ19NT0RFX0JJVFNfTUFTSwkJMHgwMworI2RlZmluZSBNUEM1Mnh4X1BTQ19NT0RFX1BBUkVWRU4JCTB4MDAKKyNkZWZpbmUgTVBDNTJ4eF9QU0NfTU9ERV9QQVJPREQJCQkweDA0CisjZGVmaW5lIE1QQzUyeHhfUFNDX01PREVfUEFSRk9SQ0UJCTB4MDgKKyNkZWZpbmUgTVBDNTJ4eF9QU0NfTU9ERV9QQVJOT05FCQkweDEwCisjZGVmaW5lIE1QQzUyeHhfUFNDX01PREVfRVJSCQkJMHgyMAorI2RlZmluZSBNUEM1Mnh4X1BTQ19NT0RFX0ZGVUxMCQkJMHg0MAorI2RlZmluZSBNUEM1Mnh4X1BTQ19NT0RFX1JYUlRTCQkJMHg4MAorCisjZGVmaW5lIE1QQzUyeHhfUFNDX01PREVfT05FX1NUT1BfNV9CSVRTCTB4MDAKKyNkZWZpbmUgTVBDNTJ4eF9QU0NfTU9ERV9PTkVfU1RPUAkJMHgwNworI2RlZmluZSBNUEM1Mnh4X1BTQ19NT0RFX1RXT19TVE9QCQkweDBmCisKKyNkZWZpbmUgTVBDNTJ4eF9QU0NfUkZOVU1fTUFTSwkweDAxZmYKKworCisvKiBTdHJ1Y3R1cmUgb2YgdGhlIGhhcmR3YXJlIHJlZ2lzdGVycyAqLworc3RydWN0IG1wYzUyeHhfcHNjIHsKKwl1OAkJbW9kZTsJCS8qIFBTQyArIDB4MDAgKi8KKwl1OAkJcmVzZXJ2ZWQwWzNdOworCXVuaW9uIHsJCQkJLyogUFNDICsgMHgwNCAqLworCQl1MTYJc3RhdHVzOworCQl1MTYJY2xvY2tfc2VsZWN0OworCX0gc3JfY3NyOworI2RlZmluZSBtcGM1Mnh4X3BzY19zdGF0dXMJc3JfY3NyLnN0YXR1cworI2RlZmluZSBtcGM1Mnh4X3BzY19jbG9ja19zZWxlY3Qgc3JfY3NyLmNsb2NrX3NlbGVjdAorCXUxNgkJcmVzZXJ2ZWQxOworCXU4CQljb21tYW5kOwkvKiBQU0MgKyAweDA4ICovCisJdTgJCXJlc2VydmVkMlszXTsKKwl1bmlvbiB7CQkJCS8qIFBTQyArIDB4MGMgKi8KKwkJdTgJYnVmZmVyXzg7CisJCXUxNglidWZmZXJfMTY7CisJCXUzMglidWZmZXJfMzI7CisJfSBidWZmZXI7CisjZGVmaW5lIG1wYzUyeHhfcHNjX2J1ZmZlcl84CWJ1ZmZlci5idWZmZXJfOAorI2RlZmluZSBtcGM1Mnh4X3BzY19idWZmZXJfMTYJYnVmZmVyLmJ1ZmZlcl8xNgorI2RlZmluZSBtcGM1Mnh4X3BzY19idWZmZXJfMzIJYnVmZmVyLmJ1ZmZlcl8zMgorCXVuaW9uIHsJCQkJLyogUFNDICsgMHgxMCAqLworCQl1OAlpcGNyOworCQl1OAlhY3I7CisJfSBpcGNyX2FjcjsKKyNkZWZpbmUgbXBjNTJ4eF9wc2NfaXBjcglpcGNyX2Fjci5pcGNyCisjZGVmaW5lIG1wYzUyeHhfcHNjX2FjcgkJaXBjcl9hY3IuYWNyCisJdTgJCXJlc2VydmVkM1szXTsKKwl1bmlvbiB7CQkJCS8qIFBTQyArIDB4MTQgKi8KKwkJdTE2CWlzcjsKKwkJdTE2CWltcjsKKwl9IGlzcl9pbXI7CisjZGVmaW5lIG1wYzUyeHhfcHNjX2lzcgkJaXNyX2ltci5pc3IKKyNkZWZpbmUgbXBjNTJ4eF9wc2NfaW1yCQlpc3JfaW1yLmltcgorCXUxNgkJcmVzZXJ2ZWQ0OworCXU4CQljdHVyOwkJLyogUFNDICsgMHgxOCAqLworCXU4CQlyZXNlcnZlZDVbM107CisJdTgJCWN0bHI7CQkvKiBQU0MgKyAweDFjICovCisJdTgJCXJlc2VydmVkNlszXTsKKwl1MTYJCWNjcjsJCS8qIFBTQyArIDB4MjAgKi8KKwl1OAkJcmVzZXJ2ZWQ3WzE0XTsKKwl1OAkJaXZyOwkJLyogUFNDICsgMHgzMCAqLworCXU4CQlyZXNlcnZlZDhbM107CisJdTgJCWlwOwkJLyogUFNDICsgMHgzNCAqLworCXU4CQlyZXNlcnZlZDlbM107CisJdTgJCW9wMTsJCS8qIFBTQyArIDB4MzggKi8KKwl1OAkJcmVzZXJ2ZWQxMFszXTsKKwl1OAkJb3AwOwkJLyogUFNDICsgMHgzYyAqLworCXU4CQlyZXNlcnZlZDExWzNdOworCXUzMgkJc2ljcjsJCS8qIFBTQyArIDB4NDAgKi8KKwl1OAkJaXJjcjE7CQkvKiBQU0MgKyAweDQ0ICovCisJdTgJCXJlc2VydmVkMTNbM107CisJdTgJCWlyY3IyOwkJLyogUFNDICsgMHg0NCAqLworCXU4CQlyZXNlcnZlZDE0WzNdOworCXU4CQlpcnNkcjsJCS8qIFBTQyArIDB4NGMgKi8KKwl1OAkJcmVzZXJ2ZWQxNVszXTsKKwl1OAkJaXJtZHI7CQkvKiBQU0MgKyAweDUwICovCisJdTgJCXJlc2VydmVkMTZbM107CisJdTgJCWlyZmRyOwkJLyogUFNDICsgMHg1NCAqLworCXU4CQlyZXNlcnZlZDE3WzNdOworCXUxNgkJcmZudW07CQkvKiBQU0MgKyAweDU4ICovCisJdTE2CQlyZXNlcnZlZDE4OworCXUxNgkJdGZudW07CQkvKiBQU0MgKyAweDVjICovCisJdTE2CQlyZXNlcnZlZDE5OworCXUzMgkJcmZkYXRhOwkJLyogUFNDICsgMHg2MCAqLworCXUxNgkJcmZzdGF0OwkJLyogUFNDICsgMHg2NCAqLworCXUxNgkJcmVzZXJ2ZWQyMDsKKwl1OAkJcmZjbnRsOwkJLyogUFNDICsgMHg2OCAqLworCXU4CQlyZXNlcnZlZDIxWzVdOworCXUxNgkJcmZhbGFybTsJLyogUFNDICsgMHg2ZSAqLworCXUxNgkJcmVzZXJ2ZWQyMjsKKwl1MTYJCXJmcnB0cjsJCS8qIFBTQyArIDB4NzIgKi8KKwl1MTYJCXJlc2VydmVkMjM7CisJdTE2CQlyZndwdHI7CQkvKiBQU0MgKyAweDc2ICovCisJdTE2CQlyZXNlcnZlZDI0OworCXUxNgkJcmZscmZwdHI7CS8qIFBTQyArIDB4N2EgKi8KKwl1MTYJCXJlc2VydmVkMjU7CisJdTE2CQlyZmx3ZnB0cjsJLyogUFNDICsgMHg3ZSAqLworCXUzMgkJdGZkYXRhOwkJLyogUFNDICsgMHg4MCAqLworCXUxNgkJdGZzdGF0OwkJLyogUFNDICsgMHg4NCAqLworCXUxNgkJcmVzZXJ2ZWQyNjsKKwl1OAkJdGZjbnRsOwkJLyogUFNDICsgMHg4OCAqLworCXU4CQlyZXNlcnZlZDI3WzVdOworCXUxNgkJdGZhbGFybTsJLyogUFNDICsgMHg4ZSAqLworCXUxNgkJcmVzZXJ2ZWQyODsKKwl1MTYJCXRmcnB0cjsJCS8qIFBTQyArIDB4OTIgKi8KKwl1MTYJCXJlc2VydmVkMjk7CisJdTE2CQl0ZndwdHI7CQkvKiBQU0MgKyAweDk2ICovCisJdTE2CQlyZXNlcnZlZDMwOworCXUxNgkJdGZscmZwdHI7CS8qIFBTQyArIDB4OWEgKi8KKwl1MTYJCXJlc2VydmVkMzE7CisJdTE2CQl0Zmx3ZnB0cjsJLyogUFNDICsgMHg5ZSAqLworfTsKKworCisjZW5kaWYgIC8qIF9fQVNNX01QQzUyeHhfUFNDX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL21wYzgyNjAuaCBiL2luY2x1ZGUvYXNtLXBwYy9tcGM4MjYwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgyMDg5NAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9tcGM4MjYwLmgKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIFNpbmNlIHRoZXJlIGFyZSBtYW55IGRpZmZlcmVudCBib2FyZHMgYW5kIG5vIHN0YW5kYXJkIGNvbmZpZ3VyYXRpb24sCisgKiB3ZSBoYXZlIGEgdW5pcXVlIGluY2x1ZGUgZmlsZSBmb3IgZWFjaC4gIFJhdGhlciB0aGFuIGNoYW5nZSBldmVyeQorICogZmlsZSB0aGF0IGhhcyB0byBpbmNsdWRlIE1QQzgyNjAgY29uZmlndXJhdGlvbiwgdGhleSBhbGwgaW5jbHVkZQorICogdGhpcyBvbmUgYW5kIHRoZSBjb25maWd1cmF0aW9uIHN3aXRjaGluZyBpcyBkb25lIGhlcmUuCisgKi8KKyNpZmRlZiBfX0tFUk5FTF9fCisjaWZuZGVmIF9fQVNNX1BQQ19NUEM4MjYwX0hfXworI2RlZmluZSBfX0FTTV9QUENfTVBDODI2MF9IX18KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjaWZkZWYgQ09ORklHXzgyNjAKKworI2lmZGVmIENPTkZJR19FU1Q4MjYwCisjaW5jbHVkZSA8cGxhdGZvcm1zL2VzdDgyNjAuaD4KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1NCQzgyeHgKKyNpbmNsdWRlIDxwbGF0Zm9ybXMvc2JjODJ4eC5oPgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfU0JTODI2MAorI2luY2x1ZGUgPHBsYXRmb3Jtcy9zYnM4MjYwLmg+CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19SUFg4MjYwCisjaW5jbHVkZSA8cGxhdGZvcm1zL3JweDgyNjAuaD4KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1dJTExPVworI2luY2x1ZGUgPHBsYXRmb3Jtcy93aWxsb3cuaD4KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1RRTTgyNjAKKyNpbmNsdWRlIDxwbGF0Zm9ybXMvdHFtODI2MC5oPgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19QUTJBRFMpIHx8IGRlZmluZWQgKENPTkZJR19QUTJGQURTKQorI2luY2x1ZGUgPHBsYXRmb3Jtcy9wcTJhZHMuaD4KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1BDSV84MjYwCisjaW5jbHVkZSA8c3lzbGliL204MjYwX3BjaS5oPgorI2VuZGlmCisKKy8qIE1ha2Ugc3VyZSB0aGUgbWVtb3J5IHRyYW5zbGF0aW9uIHN0dWZmIGlzIHRoZXJlIGlmIFBDSSBub3QgdXNlZC4KKyAqLworI2lmbmRlZiBfSU9fQkFTRQorI2RlZmluZSBfSU9fQkFTRSAgICAgICAgMAorI2VuZGlmCisKKyNpZm5kZWYgX0lTQV9NRU1fQkFTRQorI2RlZmluZSBfSVNBX01FTV9CQVNFICAgMAorI2VuZGlmCisKKyNpZm5kZWYgUENJX0RSQU1fT0ZGU0VUCisjZGVmaW5lIFBDSV9EUkFNX09GRlNFVCAwCisjZW5kaWYKKworLyogTWFwIDI1Nk1CIEkvTyByZWdpb24KKyAqLworI2lmbmRlZiBJT19QSFlTX0FERFIKKyNkZWZpbmUgSU9fUEhZU19BRERSCTB4ZTAwMDAwMDAKKyNlbmRpZgorI2lmbmRlZiBJT19WSVJUX0FERFIKKyNkZWZpbmUgSU9fVklSVF9BRERSCUlPX1BIWVNfQUREUgorI2VuZGlmCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisvKiBUaGUgInJlc2lkdWFsIiBkYXRhIGJvYXJkIGluZm9ybWF0aW9uIHN0cnVjdHVyZSB0aGUgYm9vdCBsb2FkZXIKKyAqIGhhbmRzIHRvIHVzLgorICovCitleHRlcm4gdW5zaWduZWQgY2hhciBfX3Jlc1tdOworI2VuZGlmCisKKyNlbmRpZiAvKiBDT05GSUdfODI2MCAqLworI2VuZGlmIC8qICFfX0FTTV9QUENfTVBDODI2MF9IX18gKi8KKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvbXBjODI2MF9wY2k5LmggYi9pbmNsdWRlL2FzbS1wcGMvbXBjODI2MF9wY2k5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZiM2Y2ZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9tcGM4MjYwX3BjaTkuaApAQCAtMCwwICsxLDUxIEBACisvKiBpbmNsdWRlL2FzbS1wcGMvbXBjODI2MF9wY2k5LmgKKyAqCisgKiBVbmRlZmluZSB0aGUgUENJIHJlYWQqIGFuZCBpbiogbWFjcm9zIHNvIHdlIGNhbiBkZWZpbmUgdGhlbSBhcyBmdW5jdGlvbnMKKyAqIHRoYXQgaW1wbGVtZW50IHRoZSB3b3JrYXJvdW5kIGZvciB0aGUgTVBDODI2MCBkZXZpY2UgZXJyYXR1bSBQQ0kgOS4KKyAqCisgKiBUaGlzIGhlYWRlciBmaWxlIHNob3VsZCBvbmx5IGJlIGluY2x1ZGVkIGF0IHRoZSBlbmQgb2YgaW5jbHVkZS9hc20tcHBjL2lvLmgKKyAqIGFuZCBuZXZlciBpbmNsdWRlZCBkaXJlY3RseSBhbnl3aGVyZSBlbHNlLgorICoKKyAqIEF1dGhvcjogIGFuZHlfbG93ZUBtdmlzdGEuY29tCisgKgorICogMjAwMyAoYykgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0KKyAqIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcworICogb3IgaW1wbGllZC4KKyAqLworI2lmbmRlZiBfUFBDX0lPX0gKKyNlcnJvciAiRG8gbm90IGluY2x1ZGUgbXBjODI2MF9wY2k5LmggZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaWZuZGVmIF9fQ09ORklHXzgyNjBfUENJOV9ERUZTCisjZGVmaW5lIF9fQ09ORklHXzgyNjBfUENJOV9ERUZTCisKKyN1bmRlZiByZWFkYgorI3VuZGVmIHJlYWR3CisjdW5kZWYgcmVhZGwKKyN1bmRlZiBpbnNiCisjdW5kZWYgaW5zdworI3VuZGVmIGluc2wKKyN1bmRlZiBpbmIKKyN1bmRlZiBpbncKKyN1bmRlZiBpbmwKKyN1bmRlZiBpbnN3X25zCisjdW5kZWYgaW5zbF9ucworI3VuZGVmIG1lbWNweV9mcm9taW8KKworZXh0ZXJuIGludCByZWFkYih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICphZGRyKTsKK2V4dGVybiBpbnQgcmVhZHcodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKmFkZHIpOworZXh0ZXJuIHVuc2lnbmVkIHJlYWRsKHZvbGF0aWxlIHVuc2lnbmVkICphZGRyKTsKK2V4dGVybiB2b2lkIGluc2IodW5zaWduZWQgcG9ydCwgdm9pZCAqYnVmLCBpbnQgbnMpOworZXh0ZXJuIHZvaWQgaW5zdyh1bnNpZ25lZCBwb3J0LCB2b2lkICpidWYsIGludCBucyk7CitleHRlcm4gdm9pZCBpbnNsKHVuc2lnbmVkIHBvcnQsIHZvaWQgKmJ1ZiwgaW50IG5sKTsKK2V4dGVybiBpbnQgaW5iKHVuc2lnbmVkIHBvcnQpOworZXh0ZXJuIGludCBpbncodW5zaWduZWQgcG9ydCk7CitleHRlcm4gdW5zaWduZWQgaW5sKHVuc2lnbmVkIHBvcnQpOworZXh0ZXJuIHZvaWQgaW5zd19ucyh1bnNpZ25lZCBwb3J0LCB2b2lkICpidWYsIGludCBucyk7CitleHRlcm4gdm9pZCBpbnNsX25zKHVuc2lnbmVkIHBvcnQsIHZvaWQgKmJ1ZiwgaW50IG5sKTsKK2V4dGVybiB2b2lkICptZW1jcHlfZnJvbWlvKHZvaWQgKmRlc3QsIHVuc2lnbmVkIGxvbmcgc3JjLCBzaXplX3QgY291bnQpOworCisjZW5kaWYgLyogIV9fQ09ORklHXzgyNjBfUENJOV9ERUZTICovCisjZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL21wYzgzeHguaCBiL2luY2x1ZGUvYXNtLXBwYy9tcGM4M3h4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmIxYjA1NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9tcGM4M3h4LmgKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1wcGMvbXBjODN4eC5oCisgKgorICogTVBDODN4eCBkZWZpbml0aW9ucworICoKKyAqIE1haW50YWluZXI6IEt1bWFyIEdhbGEgPGt1bWFyLmdhbGFAZnJlZXNjYWxlLmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgMjAwNSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZkZWYgX19LRVJORUxfXworI2lmbmRlZiBfX0FTTV9NUEM4M3h4X0hfXworI2RlZmluZSBfX0FTTV9NUEM4M3h4X0hfXworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL21tdS5oPgorCisjaWZkZWYgQ09ORklHXzgzeHgKKworI2lmZGVmIENPTkZJR19NUEM4MzR4X1NZUworI2luY2x1ZGUgPHBsYXRmb3Jtcy84M3h4L21wYzgzNHhfc3lzLmg+CisjZW5kaWYKKworI2RlZmluZSBfSU9fQkFTRSAgICAgICAgaXNhX2lvX2Jhc2UKKyNkZWZpbmUgX0lTQV9NRU1fQkFTRSAgIGlzYV9tZW1fYmFzZQorI2lmZGVmIENPTkZJR19QQ0kKKyNkZWZpbmUgUENJX0RSQU1fT0ZGU0VUIHBjaV9kcmFtX29mZnNldAorI2Vsc2UKKyNkZWZpbmUgUENJX0RSQU1fT0ZGU0VUIDAKKyNlbmRpZgorCisvKgorICogVGhlICJyZXNpZHVhbCIgYm9hcmQgaW5mb3JtYXRpb24gc3RydWN0dXJlIHRoZSBib290IGxvYWRlciBwYXNzZXMKKyAqIGludG8gdGhlIGtlcm5lbC4KKyAqLworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgX19yZXNbXTsKKworLyogSW50ZXJuYWwgSVJRcyBvbiBNUEM4M3h4IE9wZW5QSUMgKi8KKy8qIE5vdCBhbGwgb2YgdGhlc2UgZXhpc3Qgb24gYWxsIE1QQzgzeHggaW1wbGVtZW50YXRpb25zICovCisKKyNpZm5kZWYgTVBDODN4eF9JUElDX0lSUV9PRkZTRVQKKyNkZWZpbmUgTVBDODN4eF9JUElDX0lSUV9PRkZTRVQJMAorI2VuZGlmCisKKyNkZWZpbmUgTlJfSVBJQ19JTlRTIDEyOAorCisjZGVmaW5lIE1QQzgzeHhfSVJRX1VBUlQxCSggOSArIE1QQzgzeHhfSVBJQ19JUlFfT0ZGU0VUKQorI2RlZmluZSBNUEM4M3h4X0lSUV9VQVJUMgkoMTAgKyBNUEM4M3h4X0lQSUNfSVJRX09GRlNFVCkKKyNkZWZpbmUgTVBDODN4eF9JUlFfU0VDMgkoMTEgKyBNUEM4M3h4X0lQSUNfSVJRX09GRlNFVCkKKyNkZWZpbmUgTVBDODN4eF9JUlFfSUlDMQkoMTQgKyBNUEM4M3h4X0lQSUNfSVJRX09GRlNFVCkKKyNkZWZpbmUgTVBDODN4eF9JUlFfSUlDMgkoMTUgKyBNUEM4M3h4X0lQSUNfSVJRX09GRlNFVCkKKyNkZWZpbmUgTVBDODN4eF9JUlFfU1BJCQkoMTYgKyBNUEM4M3h4X0lQSUNfSVJRX09GRlNFVCkKKyNkZWZpbmUgTVBDODN4eF9JUlFfRVhUMQkoMTcgKyBNUEM4M3h4X0lQSUNfSVJRX09GRlNFVCkKKyNkZWZpbmUgTVBDODN4eF9JUlFfRVhUMgkoMTggKyBNUEM4M3h4X0lQSUNfSVJRX09GRlNFVCkKKyNkZWZpbmUgTVBDODN4eF9JUlFfRVhUMwkoMTkgKyBNUEM4M3h4X0lQSUNfSVJRX09GRlNFVCkKKyNkZWZpbmUgTVBDODN4eF9JUlFfRVhUNAkoMjAgKyBNUEM4M3h4X0lQSUNfSVJRX09GRlNFVCkKKyNkZWZpbmUgTVBDODN4eF9JUlFfRVhUNQkoMjEgKyBNUEM4M3h4X0lQSUNfSVJRX09GRlNFVCkKKyNkZWZpbmUgTVBDODN4eF9JUlFfRVhUNgkoMjIgKyBNUEM4M3h4X0lQSUNfSVJRX09GRlNFVCkKKyNkZWZpbmUgTVBDODN4eF9JUlFfRVhUNwkoMjMgKyBNUEM4M3h4X0lQSUNfSVJRX09GRlNFVCkKKyNkZWZpbmUgTVBDODN4eF9JUlFfVFNFQzFfVFgJKDMyICsgTVBDODN4eF9JUElDX0lSUV9PRkZTRVQpCisjZGVmaW5lIE1QQzgzeHhfSVJRX1RTRUMxX1JYCSgzMyArIE1QQzgzeHhfSVBJQ19JUlFfT0ZGU0VUKQorI2RlZmluZSBNUEM4M3h4X0lSUV9UU0VDMV9FUlJPUgkoMzQgKyBNUEM4M3h4X0lQSUNfSVJRX09GRlNFVCkKKyNkZWZpbmUgTVBDODN4eF9JUlFfVFNFQzJfVFgJKDM1ICsgTVBDODN4eF9JUElDX0lSUV9PRkZTRVQpCisjZGVmaW5lIE1QQzgzeHhfSVJRX1RTRUMyX1JYCSgzNiArIE1QQzgzeHhfSVBJQ19JUlFfT0ZGU0VUKQorI2RlZmluZSBNUEM4M3h4X0lSUV9UU0VDMl9FUlJPUgkoMzcgKyBNUEM4M3h4X0lQSUNfSVJRX09GRlNFVCkKKyNkZWZpbmUgTVBDODN4eF9JUlFfVVNCMl9EUgkoMzggKyBNUEM4M3h4X0lQSUNfSVJRX09GRlNFVCkKKyNkZWZpbmUgTVBDODN4eF9JUlFfVVNCMl9NUEgJKDM5ICsgTVBDODN4eF9JUElDX0lSUV9PRkZTRVQpCisjZGVmaW5lIE1QQzgzeHhfSVJRX0VYVDAJKDQ4ICsgTVBDODN4eF9JUElDX0lSUV9PRkZTRVQpCisjZGVmaW5lIE1QQzgzeHhfSVJRX1JUQ19TRUMJKDY0ICsgTVBDODN4eF9JUElDX0lSUV9PRkZTRVQpCisjZGVmaW5lIE1QQzgzeHhfSVJRX1BJVAkJKDY1ICsgTVBDODN4eF9JUElDX0lSUV9PRkZTRVQpCisjZGVmaW5lIE1QQzgzeHhfSVJRX1BDSTEJKDY2ICsgTVBDODN4eF9JUElDX0lSUV9PRkZTRVQpCisjZGVmaW5lIE1QQzgzeHhfSVJRX1BDSTIJKDY3ICsgTVBDODN4eF9JUElDX0lSUV9PRkZTRVQpCisjZGVmaW5lIE1QQzgzeHhfSVJRX1JUQ19BTFIJKDY4ICsgTVBDODN4eF9JUElDX0lSUV9PRkZTRVQpCisjZGVmaW5lIE1QQzgzeHhfSVJRX01VCQkoNjkgKyBNUEM4M3h4X0lQSUNfSVJRX09GRlNFVCkKKyNkZWZpbmUgTVBDODN4eF9JUlFfU0JBCQkoNzAgKyBNUEM4M3h4X0lQSUNfSVJRX09GRlNFVCkKKyNkZWZpbmUgTVBDODN4eF9JUlFfRE1BCQkoNzEgKyBNUEM4M3h4X0lQSUNfSVJRX09GRlNFVCkKKyNkZWZpbmUgTVBDODN4eF9JUlFfR1RNNAkoNzIgKyBNUEM4M3h4X0lQSUNfSVJRX09GRlNFVCkKKyNkZWZpbmUgTVBDODN4eF9JUlFfR1RNOAkoNzMgKyBNUEM4M3h4X0lQSUNfSVJRX09GRlNFVCkKKyNkZWZpbmUgTVBDODN4eF9JUlFfR1BJTzEJKDc0ICsgTVBDODN4eF9JUElDX0lSUV9PRkZTRVQpCisjZGVmaW5lIE1QQzgzeHhfSVJRX0dQSU8yCSg3NSArIE1QQzgzeHhfSVBJQ19JUlFfT0ZGU0VUKQorI2RlZmluZSBNUEM4M3h4X0lSUV9ERFIJCSg3NiArIE1QQzgzeHhfSVBJQ19JUlFfT0ZGU0VUKQorI2RlZmluZSBNUEM4M3h4X0lSUV9MQkMJCSg3NyArIE1QQzgzeHhfSVBJQ19JUlFfT0ZGU0VUKQorI2RlZmluZSBNUEM4M3h4X0lSUV9HVE0yCSg3OCArIE1QQzgzeHhfSVBJQ19JUlFfT0ZGU0VUKQorI2RlZmluZSBNUEM4M3h4X0lSUV9HVE02CSg3OSArIE1QQzgzeHhfSVBJQ19JUlFfT0ZGU0VUKQorI2RlZmluZSBNUEM4M3h4X0lSUV9QTUMJCSg4MCArIE1QQzgzeHhfSVBJQ19JUlFfT0ZGU0VUKQorI2RlZmluZSBNUEM4M3h4X0lSUV9HVE0zCSg4NCArIE1QQzgzeHhfSVBJQ19JUlFfT0ZGU0VUKQorI2RlZmluZSBNUEM4M3h4X0lSUV9HVE03CSg4NSArIE1QQzgzeHhfSVBJQ19JUlFfT0ZGU0VUKQorI2RlZmluZSBNUEM4M3h4X0lSUV9HVE0xCSg5MCArIE1QQzgzeHhfSVBJQ19JUlFfT0ZGU0VUKQorI2RlZmluZSBNUEM4M3h4X0lSUV9HVE01CSg5MSArIE1QQzgzeHhfSVBJQ19JUlFfT0ZGU0VUKQorCisjZGVmaW5lIE1QQzgzeHhfQ0NTUkJBUl9TSVpFCSgxMDI0KjEwMjQpCisKKy8qIExldCBtb2R1bGVzL2RyaXZlcnMgZ2V0IGF0IGltbXJiYXIgKHBoeXNpY2FsKSAqLworZXh0ZXJuIHBoeXNfYWRkcl90IGltbXJiYXI7CisKK2VudW0gcHBjX3N5c19kZXZpY2VzIHsKKwlNUEM4M3h4X1RTRUMxLAorCU1QQzgzeHhfVFNFQzIsCisJTVBDODN4eF9JSUMxLAorCU1QQzgzeHhfSUlDMiwKKwlNUEM4M3h4X0RVQVJULAorCU1QQzgzeHhfU0VDMiwKKwlNUEM4M3h4X1VTQjJfRFIsCisJTVBDODN4eF9VU0IyX01QSCwKK307CisKKyNlbmRpZiAvKiBDT05GSUdfODN4eCAqLworI2VuZGlmIC8qIF9fQVNNX01QQzgzeHhfSF9fICovCisjZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL21wYzg1eHguaCBiL2luY2x1ZGUvYXNtLXBwYy9tcGM4NXh4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI3MTNlMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9tcGM4NXh4LmgKQEAgLTAsMCArMSwxMzQgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1wcGMvbXBjODV4eC5oCisgKgorICogTVBDODV4eCBkZWZpbml0aW9ucworICoKKyAqIE1haW50YWluZXI6IEt1bWFyIEdhbGEgPGt1bWFyLmdhbGFAZnJlZXNjYWxlLmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgMjAwNCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZkZWYgX19LRVJORUxfXworI2lmbmRlZiBfX0FTTV9NUEM4NXh4X0hfXworI2RlZmluZSBfX0FTTV9NUEM4NXh4X0hfXworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL21tdS5oPgorCisjaWZkZWYgQ09ORklHXzg1eHgKKworI2lmZGVmIENPTkZJR19NUEM4NTQwX0FEUworI2luY2x1ZGUgPHBsYXRmb3Jtcy84NXh4L21wYzg1NDBfYWRzLmg+CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfTVBDODU1NV9DRFMKKyNpbmNsdWRlIDxwbGF0Zm9ybXMvODV4eC9tcGM4NTU1X2Nkcy5oPgorI2VuZGlmCisjaWZkZWYgQ09ORklHX01QQzg1NjBfQURTCisjaW5jbHVkZSA8cGxhdGZvcm1zLzg1eHgvbXBjODU2MF9hZHMuaD4KKyNlbmRpZgorI2lmZGVmIENPTkZJR19TQkM4NTYwCisjaW5jbHVkZSA8cGxhdGZvcm1zLzg1eHgvc2JjODU2MC5oPgorI2VuZGlmCisjaWZkZWYgQ09ORklHX1NUWF9HUDMKKyNpbmNsdWRlIDxwbGF0Zm9ybXMvODV4eC9zdHhfZ3AzLmg+CisjZW5kaWYKKworI2RlZmluZSBfSU9fQkFTRSAgICAgICAgaXNhX2lvX2Jhc2UKKyNkZWZpbmUgX0lTQV9NRU1fQkFTRSAgIGlzYV9tZW1fYmFzZQorI2lmZGVmIENPTkZJR19QQ0kKKyNkZWZpbmUgUENJX0RSQU1fT0ZGU0VUIHBjaV9kcmFtX29mZnNldAorI2Vsc2UKKyNkZWZpbmUgUENJX0RSQU1fT0ZGU0VUIDAKKyNlbmRpZgorCisvKgorICogVGhlICJyZXNpZHVhbCIgYm9hcmQgaW5mb3JtYXRpb24gc3RydWN0dXJlIHRoZSBib290IGxvYWRlciBwYXNzZXMKKyAqIGludG8gdGhlIGtlcm5lbC4KKyAqLworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgX19yZXNbXTsKKworLyogT2Zmc2V0IGZyb20gQ0NTUkJBUiAqLworI2RlZmluZSBNUEM4NXh4X0NQTV9PRkZTRVQJKDB4ODAwMDApCisjZGVmaW5lIE1QQzg1eHhfQ1BNX1NJWkUJKDB4NDAwMDApCisjZGVmaW5lIE1QQzg1eHhfRE1BX09GRlNFVAkoMHgyMTAwMCkKKyNkZWZpbmUgTVBDODV4eF9ETUFfU0laRQkoMHgwMTAwMCkKKyNkZWZpbmUgTVBDODV4eF9ETUEwX09GRlNFVAkoMHgyMTEwMCkKKyNkZWZpbmUgTVBDODV4eF9ETUEwX1NJWkUJKDB4MDAwODApCisjZGVmaW5lIE1QQzg1eHhfRE1BMV9PRkZTRVQJKDB4MjExODApCisjZGVmaW5lIE1QQzg1eHhfRE1BMV9TSVpFCSgweDAwMDgwKQorI2RlZmluZSBNUEM4NXh4X0RNQTJfT0ZGU0VUCSgweDIxMjAwKQorI2RlZmluZSBNUEM4NXh4X0RNQTJfU0laRQkoMHgwMDA4MCkKKyNkZWZpbmUgTVBDODV4eF9ETUEzX09GRlNFVAkoMHgyMTI4MCkKKyNkZWZpbmUgTVBDODV4eF9ETUEzX1NJWkUJKDB4MDAwODApCisjZGVmaW5lIE1QQzg1eHhfRU5FVDFfT0ZGU0VUCSgweDI0MDAwKQorI2RlZmluZSBNUEM4NXh4X0VORVQxX1NJWkUJKDB4MDEwMDApCisjZGVmaW5lIE1QQzg1eHhfRU5FVDJfT0ZGU0VUCSgweDI1MDAwKQorI2RlZmluZSBNUEM4NXh4X0VORVQyX1NJWkUJKDB4MDEwMDApCisjZGVmaW5lIE1QQzg1eHhfRU5FVDNfT0ZGU0VUCSgweDI2MDAwKQorI2RlZmluZSBNUEM4NXh4X0VORVQzX1NJWkUJKDB4MDEwMDApCisjZGVmaW5lIE1QQzg1eHhfR1VUU19PRkZTRVQJKDB4ZTAwMDApCisjZGVmaW5lIE1QQzg1eHhfR1VUU19TSVpFCSgweDAxMDAwKQorI2RlZmluZSBNUEM4NXh4X0lJQzFfT0ZGU0VUCSgweDAzMDAwKQorI2RlZmluZSBNUEM4NXh4X0lJQzFfU0laRQkoMHgwMTAwMCkKKyNkZWZpbmUgTVBDODV4eF9PUEVOUElDX09GRlNFVAkoMHg0MDAwMCkKKyNkZWZpbmUgTVBDODV4eF9PUEVOUElDX1NJWkUJKDB4NDAwMDApCisjZGVmaW5lIE1QQzg1eHhfUENJMV9PRkZTRVQJKDB4MDgwMDApCisjZGVmaW5lIE1QQzg1eHhfUENJMV9TSVpFCSgweDAxMDAwKQorI2RlZmluZSBNUEM4NXh4X1BDSTJfT0ZGU0VUCSgweDA5MDAwKQorI2RlZmluZSBNUEM4NXh4X1BDSTJfU0laRQkoMHgwMTAwMCkKKyNkZWZpbmUgTVBDODV4eF9QRVJGTU9OX09GRlNFVAkoMHhlMTAwMCkKKyNkZWZpbmUgTVBDODV4eF9QRVJGTU9OX1NJWkUJKDB4MDEwMDApCisjZGVmaW5lIE1QQzg1eHhfU0VDMl9PRkZTRVQJKDB4MzAwMDApCisjZGVmaW5lIE1QQzg1eHhfU0VDMl9TSVpFCSgweDEwMDAwKQorI2RlZmluZSBNUEM4NXh4X1VBUlQwX09GRlNFVAkoMHgwNDUwMCkKKyNkZWZpbmUgTVBDODV4eF9VQVJUMF9TSVpFCSgweDAwMTAwKQorI2RlZmluZSBNUEM4NXh4X1VBUlQxX09GRlNFVAkoMHgwNDYwMCkKKyNkZWZpbmUgTVBDODV4eF9VQVJUMV9TSVpFCSgweDAwMTAwKQorCisjZGVmaW5lIE1QQzg1eHhfQ0NTUkJBUl9TSVpFCSgxMDI0KjEwMjQpCisKKy8qIExldCBtb2R1bGVzL2RyaXZlcnMgZ2V0IGF0IENDU1JCQVIgKi8KK2V4dGVybiBwaHlzX2FkZHJfdCBnZXRfY2NzcmJhcih2b2lkKTsKKworI2lmZGVmIE1PRFVMRQorI2RlZmluZSBDQ1NSQkFSIGdldF9jY3NyYmFyKCkKKyNlbHNlCisjZGVmaW5lIENDU1JCQVIgQk9BUkRfQ0NTUkJBUgorI2VuZGlmCisKK2VudW0gcHBjX3N5c19kZXZpY2VzIHsKKwlNUEM4NXh4X1RTRUMxLAorCU1QQzg1eHhfVFNFQzIsCisJTVBDODV4eF9GRUMsCisJTVBDODV4eF9JSUMxLAorCU1QQzg1eHhfRE1BMCwKKwlNUEM4NXh4X0RNQTEsCisJTVBDODV4eF9ETUEyLAorCU1QQzg1eHhfRE1BMywKKwlNUEM4NXh4X0RVQVJULAorCU1QQzg1eHhfUEVSRk1PTiwKKwlNUEM4NXh4X1NFQzIsCisJTVBDODV4eF9DUE1fU1BJLAorCU1QQzg1eHhfQ1BNX0kyQywKKwlNUEM4NXh4X0NQTV9VU0IsCisJTVBDODV4eF9DUE1fU0NDMSwKKwlNUEM4NXh4X0NQTV9TQ0MyLAorCU1QQzg1eHhfQ1BNX1NDQzMsCisJTVBDODV4eF9DUE1fU0NDNCwKKwlNUEM4NXh4X0NQTV9GQ0MxLAorCU1QQzg1eHhfQ1BNX0ZDQzIsCisJTVBDODV4eF9DUE1fRkNDMywKKwlNUEM4NXh4X0NQTV9NQ0MxLAorCU1QQzg1eHhfQ1BNX01DQzIsCisJTVBDODV4eF9DUE1fU01DMSwKKwlNUEM4NXh4X0NQTV9TTUMyLAorfTsKKworI2VuZGlmIC8qIENPTkZJR184NXh4ICovCisjZW5kaWYgLyogX19BU01fTVBDODV4eF9IX18gKi8KKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvbXBjOHh4LmggYi9pbmNsdWRlL2FzbS1wcGMvbXBjOHh4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE0ZDY5YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9tcGM4eHguaApAQCAtMCwwICsxLDEwMyBAQAorLyogVGhpcyBpcyB0aGUgc2luZ2xlIGZpbGUgaW5jbHVkZWQgYnkgYWxsIE1QQzh4eCBidWlsZCBvcHRpb25zLgorICogU2luY2UgdGhlcmUgYXJlIG1hbnkgZGlmZmVyZW50IGJvYXJkcyBhbmQgbm8gc3RhbmRhcmQgY29uZmlndXJhdGlvbiwKKyAqIHdlIGhhdmUgYSB1bmlxdWUgaW5jbHVkZSBmaWxlIGZvciBlYWNoLiAgUmF0aGVyIHRoYW4gY2hhbmdlIGV2ZXJ5CisgKiBmaWxlIHRoYXQgaGFzIHRvIGluY2x1ZGUgTVBDOHh4IGNvbmZpZ3VyYXRpb24sIHRoZXkgYWxsIGluY2x1ZGUKKyAqIHRoaXMgb25lIGFuZCB0aGUgY29uZmlndXJhdGlvbiBzd2l0Y2hpbmcgaXMgZG9uZSBoZXJlLgorICovCisjaWZkZWYgX19LRVJORUxfXworI2lmbmRlZiBfX0NPTkZJR184eHhfREVGUworI2RlZmluZSBfX0NPTkZJR184eHhfREVGUworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpZmRlZiBDT05GSUdfOHh4CisKKyNpZmRlZiBDT05GSUdfTUJYCisjaW5jbHVkZSA8cGxhdGZvcm1zL21ieC5oPgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfRkFEUworI2luY2x1ZGUgPHBsYXRmb3Jtcy9mYWRzLmg+CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19SUFhMSVRFCisjaW5jbHVkZSA8cGxhdGZvcm1zL3JweGxpdGUuaD4KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0JTRUlQCisjaW5jbHVkZSA8cGxhdGZvcm1zL2JzZWlwLmg+CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19SUFhDTEFTU0lDCisjaW5jbHVkZSA8cGxhdGZvcm1zL3JweGNsYXNzaWMuaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfVFFNOHh4TCkKKyNpbmNsdWRlIDxwbGF0Zm9ybXMvdHFtOHh4Lmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX1NQRDgyM1RTKQorI2luY2x1ZGUgPHBsYXRmb3Jtcy9zcGQ4eHguaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfSVZNUzgpIHx8IGRlZmluZWQoQ09ORklHX0lWTUwyNCkKKyNpbmNsdWRlIDxwbGF0Zm9ybXMvaXZtczguaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfSEVSTUVTX1BSTykKKyNpbmNsdWRlIDxwbGF0Zm9ybXMvaGVybWVzLmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0lQODYwKQorI2luY2x1ZGUgPHBsYXRmb3Jtcy9pcDg2MC5oPgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19MV01PTikKKyNpbmNsdWRlIDxwbGF0Zm9ybXMvbHdtb24uaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfUENVX0UpCisjaW5jbHVkZSA8cGxhdGZvcm1zL3BjdV9lLmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0NDTSkKKyNpbmNsdWRlIDxwbGF0Zm9ybXMvY2NtLmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0xBTlRFQykKKyNpbmNsdWRlIDxwbGF0Zm9ybXMvbGFudGVjLmg+CisjZW5kaWYKKworLyogQ3VycmVudGx5LCBhbGwgOHh4IGJvYXJkcyB0aGF0IHN1cHBvcnQgYSBwcm9jZXNzb3IgdG8gUENJL0lTQSBicmlkZ2UKKyAqIHVzZSB0aGUgc2FtZSBtZW1vcnkgbWFwLgorICovCisjaWYgMAorI2lmIGRlZmluZWQoQ09ORklHX1BDSSkgJiYgZGVmaW5lZChQQ0lfSVNBX0lPX0FERFIpCisjZGVmaW5lCV9JT19CQVNFIFBDSV9JU0FfSU9fQUREUgorI2RlZmluZQlfSVNBX01FTV9CQVNFIFBDSV9JU0FfTUVNX0FERFIKKyNkZWZpbmUgUENJX0RSQU1fT0ZGU0VUIDB4ODAwMDAwMDAKKyNlbHNlCisjZGVmaW5lIF9JT19CQVNFICAgICAgICAwCisjZGVmaW5lIF9JU0FfTUVNX0JBU0UgICAwCisjZGVmaW5lIFBDSV9EUkFNX09GRlNFVCAwCisjZW5kaWYKKyNlbHNlCisjaWYgIWRlZmluZWQoX0lPX0JBU0UpICAvKiBkZWZpbmVkIGluIGJvYXJkIHNwZWNpZmljIGhlYWRlciAqLworI2RlZmluZSBfSU9fQkFTRSAgICAgICAgMAorI2VuZGlmCisjZGVmaW5lIF9JU0FfTUVNX0JBU0UgICAwCisjZGVmaW5lIFBDSV9EUkFNX09GRlNFVCAwCisjZW5kaWYKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKy8qIFRoZSAicmVzaWR1YWwiIGRhdGEgYm9hcmQgaW5mb3JtYXRpb24gc3RydWN0dXJlIHRoZSBib290IGxvYWRlcgorICogaGFuZHMgdG8gdXMuCisgKi8KK2V4dGVybiB1bnNpZ25lZCBjaGFyIF9fcmVzW107CisKK3N0cnVjdCBwdF9yZWdzOworCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworI2VuZGlmIC8qIENPTkZJR184eHggKi8KKyNlbmRpZiAvKiBfX0NPTkZJR184eHhfREVGUyAqLworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9tc2didWYuaCBiL2luY2x1ZGUvYXNtLXBwYy9tc2didWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDUzNDUyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjL21zZ2J1Zi5oCkBAIC0wLDAgKzEsMjUgQEAKKyNpZm5kZWYgX1BQQ19NU0dCVUZfSAorI2RlZmluZSBfUFBDX01TR0JVRl9ICisKKy8qCisgKiBUaGUgbXNxaWQ2NF9kcyBzdHJ1Y3R1cmUgZm9yIHRoZSBQUEMgYXJjaGl0ZWN0dXJlLgorICovCisKK3N0cnVjdCBtc3FpZDY0X2RzIHsKKwlzdHJ1Y3QgaXBjNjRfcGVybSBtc2dfcGVybTsKKwl1bnNpZ25lZCBpbnQJX191bnVzZWQxOworCV9fa2VybmVsX3RpbWVfdCBtc2dfc3RpbWU7CS8qIGxhc3QgbXNnc25kIHRpbWUgKi8KKwl1bnNpZ25lZCBpbnQJX191bnVzZWQyOworCV9fa2VybmVsX3RpbWVfdCBtc2dfcnRpbWU7CS8qIGxhc3QgbXNncmN2IHRpbWUgKi8KKwl1bnNpZ25lZCBpbnQJX191bnVzZWQzOworCV9fa2VybmVsX3RpbWVfdCBtc2dfY3RpbWU7CS8qIGxhc3QgY2hhbmdlIHRpbWUgKi8KKwl1bnNpZ25lZCBsb25nICBtc2dfY2J5dGVzOwkvKiBjdXJyZW50IG51bWJlciBvZiBieXRlcyBvbiBxdWV1ZSAqLworCXVuc2lnbmVkIGxvbmcgIG1zZ19xbnVtOwkvKiBudW1iZXIgb2YgbWVzc2FnZXMgaW4gcXVldWUgKi8KKwl1bnNpZ25lZCBsb25nICBtc2dfcWJ5dGVzOwkvKiBtYXggbnVtYmVyIG9mIGJ5dGVzIG9uIHF1ZXVlICovCisJX19rZXJuZWxfcGlkX3QgbXNnX2xzcGlkOwkvKiBwaWQgb2YgbGFzdCBtc2dzbmQgKi8KKwlfX2tlcm5lbF9waWRfdCBtc2dfbHJwaWQ7CS8qIGxhc3QgcmVjZWl2ZSBwaWQgKi8KKwl1bnNpZ25lZCBsb25nICBfX3VudXNlZDQ7CisJdW5zaWduZWQgbG9uZyAgX191bnVzZWQ1OworfTsKKworI2VuZGlmIC8qIF9QUENfTVNHQlVGX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9tdjY0eDYwLmggYi9pbmNsdWRlL2FzbS1wcGMvbXY2NHg2MC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjMjViOTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGMvbXY2NHg2MC5oCkBAIC0wLDAgKzEsMzQ1IEBACisvKgorICogaW5jbHVkZS9hc20tcHBjL212NjR4NjAuaAorICoKKyAqIFByb3RvdHlwZXMsIGV0Yy4gZm9yIHRoZSBNYXJ2ZWxsL0dhbGlsZW8gTVY2NHg2MCBob3N0IGJyaWRnZSByb3V0aW5lcy4KKyAqCisgKiBBdXRob3I6IE1hcmsgQS4gR3JlZXIgPG1ncmVlckBtdmlzdGEuY29tPgorICoKKyAqIDIwMDEtMjAwMiAoYykgTW9udGFWaXN0YSwgU29mdHdhcmUsIEluYy4gIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0KKyAqIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcworICogb3IgaW1wbGllZC4KKyAqLworI2lmbmRlZiBfX0FTTVBQQ19NVjY0eDYwX0gKKyNkZWZpbmUgX19BU01QUENfTVY2NHg2MF9ICisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CisjaW5jbHVkZSA8YXNtL3BjaS1icmlkZ2UuaD4KKyNpbmNsdWRlIDxhc20vbXY2NHg2MF9kZWZzLmg+CisKK2V4dGVybiB1OAltdjY0eDYwX3BjaV9leGNsdWRlX2JyaWRnZTsKKworZXh0ZXJuIHNwaW5sb2NrX3QgbXY2NHg2MF9sb2NrOworCisvKiAzMi1iaXQgV2luZG93IHRhYmxlIGVudHJ5IGRlZmluZXMgKi8KKyNkZWZpbmUJTVY2NHg2MF9DUFUyTUVNXzBfV0lOCQkJMAorI2RlZmluZQlNVjY0eDYwX0NQVTJNRU1fMV9XSU4JCQkxCisjZGVmaW5lCU1WNjR4NjBfQ1BVMk1FTV8yX1dJTgkJCTIKKyNkZWZpbmUJTVY2NHg2MF9DUFUyTUVNXzNfV0lOCQkJMworI2RlZmluZQlNVjY0eDYwX0NQVTJERVZfMF9XSU4JCQk0CisjZGVmaW5lCU1WNjR4NjBfQ1BVMkRFVl8xX1dJTgkJCTUKKyNkZWZpbmUJTVY2NHg2MF9DUFUyREVWXzJfV0lOCQkJNgorI2RlZmluZQlNVjY0eDYwX0NQVTJERVZfM19XSU4JCQk3CisjZGVmaW5lCU1WNjR4NjBfQ1BVMkJPT1RfV0lOCQkJOAorI2RlZmluZQlNVjY0eDYwX0NQVTJQQ0kwX0lPX1dJTgkJCTkKKyNkZWZpbmUJTVY2NHg2MF9DUFUyUENJMF9NRU1fMF9XSU4JCTEwCisjZGVmaW5lCU1WNjR4NjBfQ1BVMlBDSTBfTUVNXzFfV0lOCQkxMQorI2RlZmluZQlNVjY0eDYwX0NQVTJQQ0kwX01FTV8yX1dJTgkJMTIKKyNkZWZpbmUJTVY2NHg2MF9DUFUyUENJMF9NRU1fM19XSU4JCTEzCisjZGVmaW5lCU1WNjR4NjBfQ1BVMlBDSTFfSU9fV0lOCQkJMTQKKyNkZWZpbmUJTVY2NHg2MF9DUFUyUENJMV9NRU1fMF9XSU4JCTE1CisjZGVmaW5lCU1WNjR4NjBfQ1BVMlBDSTFfTUVNXzFfV0lOCQkxNgorI2RlZmluZQlNVjY0eDYwX0NQVTJQQ0kxX01FTV8yX1dJTgkJMTcKKyNkZWZpbmUJTVY2NHg2MF9DUFUyUENJMV9NRU1fM19XSU4JCTE4CisjZGVmaW5lCU1WNjR4NjBfQ1BVMlNSQU1fV0lOCQkJMTkKKyNkZWZpbmUJTVY2NHg2MF9DUFUyUENJMF9JT19SRU1BUF9XSU4JCTIwCisjZGVmaW5lCU1WNjR4NjBfQ1BVMlBDSTFfSU9fUkVNQVBfV0lOCQkyMQorI2RlZmluZQlNVjY0eDYwX0NQVV9QUk9UXzBfV0lOCQkJMjIKKyNkZWZpbmUJTVY2NHg2MF9DUFVfUFJPVF8xX1dJTgkJCTIzCisjZGVmaW5lCU1WNjR4NjBfQ1BVX1BST1RfMl9XSU4JCQkyNAorI2RlZmluZQlNVjY0eDYwX0NQVV9QUk9UXzNfV0lOCQkJMjUKKyNkZWZpbmUJTVY2NHg2MF9DUFVfU05PT1BfMF9XSU4JCQkyNgorI2RlZmluZQlNVjY0eDYwX0NQVV9TTk9PUF8xX1dJTgkJCTI3CisjZGVmaW5lCU1WNjR4NjBfQ1BVX1NOT09QXzJfV0lOCQkJMjgKKyNkZWZpbmUJTVY2NHg2MF9DUFVfU05PT1BfM19XSU4JCQkyOQorI2RlZmluZQlNVjY0eDYwX1BDSTAyTUVNX1JFTUFQXzBfV0lOCQkzMAorI2RlZmluZQlNVjY0eDYwX1BDSTAyTUVNX1JFTUFQXzFfV0lOCQkzMQorI2RlZmluZQlNVjY0eDYwX1BDSTAyTUVNX1JFTUFQXzJfV0lOCQkzMgorI2RlZmluZQlNVjY0eDYwX1BDSTAyTUVNX1JFTUFQXzNfV0lOCQkzMworI2RlZmluZQlNVjY0eDYwX1BDSTEyTUVNX1JFTUFQXzBfV0lOCQkzNAorI2RlZmluZQlNVjY0eDYwX1BDSTEyTUVNX1JFTUFQXzFfV0lOCQkzNQorI2RlZmluZQlNVjY0eDYwX1BDSTEyTUVNX1JFTUFQXzJfV0lOCQkzNgorI2RlZmluZQlNVjY0eDYwX1BDSTEyTUVNX1JFTUFQXzNfV0lOCQkzNworI2RlZmluZQlNVjY0eDYwX0VORVQyTUVNXzBfV0lOCQkJMzgKKyNkZWZpbmUJTVY2NHg2MF9FTkVUMk1FTV8xX1dJTgkJCTM5CisjZGVmaW5lCU1WNjR4NjBfRU5FVDJNRU1fMl9XSU4JCQk0MAorI2RlZmluZQlNVjY0eDYwX0VORVQyTUVNXzNfV0lOCQkJNDEKKyNkZWZpbmUJTVY2NHg2MF9FTkVUMk1FTV80X1dJTgkJCTQyCisjZGVmaW5lCU1WNjR4NjBfRU5FVDJNRU1fNV9XSU4JCQk0MworI2RlZmluZQlNVjY0eDYwX01QU0MyTUVNXzBfV0lOCQkJNDQKKyNkZWZpbmUJTVY2NHg2MF9NUFNDMk1FTV8xX1dJTgkJCTQ1CisjZGVmaW5lCU1WNjR4NjBfTVBTQzJNRU1fMl9XSU4JCQk0NgorI2RlZmluZQlNVjY0eDYwX01QU0MyTUVNXzNfV0lOCQkJNDcKKyNkZWZpbmUJTVY2NHg2MF9JRE1BMk1FTV8wX1dJTgkJCTQ4CisjZGVmaW5lCU1WNjR4NjBfSURNQTJNRU1fMV9XSU4JCQk0OQorI2RlZmluZQlNVjY0eDYwX0lETUEyTUVNXzJfV0lOCQkJNTAKKyNkZWZpbmUJTVY2NHg2MF9JRE1BMk1FTV8zX1dJTgkJCTUxCisjZGVmaW5lCU1WNjR4NjBfSURNQTJNRU1fNF9XSU4JCQk1MgorI2RlZmluZQlNVjY0eDYwX0lETUEyTUVNXzVfV0lOCQkJNTMKKyNkZWZpbmUJTVY2NHg2MF9JRE1BMk1FTV82X1dJTgkJCTU0CisjZGVmaW5lCU1WNjR4NjBfSURNQTJNRU1fN19XSU4JCQk1NQorCisjZGVmaW5lCU1WNjR4NjBfMzJCSVRfV0lOX0NPVU5UCQkJNTYKKworLyogNjQtYml0IFdpbmRvdyB0YWJsZSBlbnRyeSBkZWZpbmVzICovCisjZGVmaW5lCU1WNjR4NjBfQ1BVMlBDSTBfTUVNXzBfUkVNQVBfV0lOCTAKKyNkZWZpbmUJTVY2NHg2MF9DUFUyUENJMF9NRU1fMV9SRU1BUF9XSU4JMQorI2RlZmluZQlNVjY0eDYwX0NQVTJQQ0kwX01FTV8yX1JFTUFQX1dJTgkyCisjZGVmaW5lCU1WNjR4NjBfQ1BVMlBDSTBfTUVNXzNfUkVNQVBfV0lOCTMKKyNkZWZpbmUJTVY2NHg2MF9DUFUyUENJMV9NRU1fMF9SRU1BUF9XSU4JNAorI2RlZmluZQlNVjY0eDYwX0NQVTJQQ0kxX01FTV8xX1JFTUFQX1dJTgk1CisjZGVmaW5lCU1WNjR4NjBfQ1BVMlBDSTFfTUVNXzJfUkVNQVBfV0lOCTYKKyNkZWZpbmUJTVY2NHg2MF9DUFUyUENJMV9NRU1fM19SRU1BUF9XSU4JNworI2RlZmluZQlNVjY0eDYwX1BDSTAyTUVNX0FDQ19DTlRMXzBfV0lOCQk4CisjZGVmaW5lCU1WNjR4NjBfUENJMDJNRU1fQUNDX0NOVExfMV9XSU4JCTkKKyNkZWZpbmUJTVY2NHg2MF9QQ0kwMk1FTV9BQ0NfQ05UTF8yX1dJTgkJMTAKKyNkZWZpbmUJTVY2NHg2MF9QQ0kwMk1FTV9BQ0NfQ05UTF8zX1dJTgkJMTEKKyNkZWZpbmUJTVY2NHg2MF9QQ0kxMk1FTV9BQ0NfQ05UTF8wX1dJTgkJMTIKKyNkZWZpbmUJTVY2NHg2MF9QQ0kxMk1FTV9BQ0NfQ05UTF8xX1dJTgkJMTMKKyNkZWZpbmUJTVY2NHg2MF9QQ0kxMk1FTV9BQ0NfQ05UTF8yX1dJTgkJMTQKKyNkZWZpbmUJTVY2NHg2MF9QQ0kxMk1FTV9BQ0NfQ05UTF8zX1dJTgkJMTUKKyNkZWZpbmUJTVY2NHg2MF9QQ0kwMk1FTV9TTk9PUF8wX1dJTgkJMTYKKyNkZWZpbmUJTVY2NHg2MF9QQ0kwMk1FTV9TTk9PUF8xX1dJTgkJMTcKKyNkZWZpbmUJTVY2NHg2MF9QQ0kwMk1FTV9TTk9PUF8yX1dJTgkJMTgKKyNkZWZpbmUJTVY2NHg2MF9QQ0kwMk1FTV9TTk9PUF8zX1dJTgkJMTkKKyNkZWZpbmUJTVY2NHg2MF9QQ0kxMk1FTV9TTk9PUF8wX1dJTgkJMjAKKyNkZWZpbmUJTVY2NHg2MF9QQ0kxMk1FTV9TTk9PUF8xX1dJTgkJMjEKKyNkZWZpbmUJTVY2NHg2MF9QQ0kxMk1FTV9TTk9PUF8yX1dJTgkJMjIKKyNkZWZpbmUJTVY2NHg2MF9QQ0kxMk1FTV9TTk9PUF8zX1dJTgkJMjMKKworI2RlZmluZQlNVjY0eDYwXzY0QklUX1dJTl9DT1VOVAkJCTI0CisKKy8qCisgKiBEZWZpbmUgYSBzdHJ1Y3R1cmUgdGhhdCdzIHVzZWQgdG8gcGFzcyBpbiBjb25maWcgaW5mb3JtYXRpb24gdG8gdGhlCisgKiBjb3JlIHJvdXRpbmVzLgorICovCitzdHJ1Y3QgbXY2NHg2MF9wY2lfd2luZG93IHsKKwl1MzIJY3B1X2Jhc2U7CisJdTMyCXBjaV9iYXNlX2hpOworCXUzMglwY2lfYmFzZV9sbzsKKwl1MzIJc2l6ZTsKKwl1MzIJc3dhcDsKK307CisKK3N0cnVjdCBtdjY0eDYwX3BjaV9pbmZvIHsKKwl1OAllbmFibGVfYnVzOwkvKiBhbGxvdyBhY2Nlc3MgdG8gdGhpcyBQQ0kgYnVzPyAqLworCisJc3RydWN0IG12NjR4NjBfcGNpX3dpbmRvdwlwY2lfaW87CisJc3RydWN0IG12NjR4NjBfcGNpX3dpbmRvdwlwY2lfbWVtWzNdOworCisJdTMyCWFjY19jbnRsX29wdGlvbnNbTVY2NHg2MF9DUFUyTUVNX1dJTkRPV1NdOworCXUzMglzbm9vcF9vcHRpb25zW01WNjR4NjBfQ1BVMk1FTV9XSU5ET1dTXTsKKwl1MTYJcGNpX2NtZF9iaXRzOworCXUxNglsYXRlbmN5X3RpbWVyOworfTsKKworc3RydWN0IG12NjR4NjBfc2V0dXBfaW5mbyB7CisJdTMyCXBoeXNfcmVnX2Jhc2U7CisJdTMyCXdpbmRvd19wcmVzZXJ2ZV9tYXNrXzMyX2hpOworCXUzMgl3aW5kb3dfcHJlc2VydmVfbWFza18zMl9sbzsKKwl1MzIJd2luZG93X3ByZXNlcnZlX21hc2tfNjQ7CisKKwl1MzIJY3B1X3Byb3Rfb3B0aW9uc1tNVjY0eDYwX0NQVTJNRU1fV0lORE9XU107CisJdTMyCWNwdV9zbm9vcF9vcHRpb25zW01WNjR4NjBfQ1BVMk1FTV9XSU5ET1dTXTsKKwl1MzIJZW5ldF9vcHRpb25zW01WNjR4NjBfQ1BVMk1FTV9XSU5ET1dTXTsKKwl1MzIJbXBzY19vcHRpb25zW01WNjR4NjBfQ1BVMk1FTV9XSU5ET1dTXTsKKwl1MzIJaWRtYV9vcHRpb25zW01WNjR4NjBfQ1BVMk1FTV9XSU5ET1dTXTsKKworCXN0cnVjdCBtdjY0eDYwX3BjaV9pbmZvCXBjaV8wOworCXN0cnVjdCBtdjY0eDYwX3BjaV9pbmZvCXBjaV8xOworfTsKKworLyogRGVmaW5lIHdoYXQgdGhlIHRvcCBiaXRzIGluIHRoZSBleHRyYSBtZW1iZXIgb2YgYSB3aW5kb3cgZW50cnkgbWVhbnMuICovCisjZGVmaW5lCU1WNjR4NjBfRVhUUkFfSU5WQUxJRAkJMHgwMDAwMDAwMAorI2RlZmluZQlNVjY0eDYwX0VYVFJBX0NQVVdJTl9FTkFCCTB4MTAwMDAwMDAKKyNkZWZpbmUJTVY2NHg2MF9FWFRSQV9DUFVQUk9UX0VOQUIJMHgyMDAwMDAwMAorI2RlZmluZQlNVjY0eDYwX0VYVFJBX0VORVRfRU5BQgkJMHgzMDAwMDAwMAorI2RlZmluZQlNVjY0eDYwX0VYVFJBX01QU0NfRU5BQgkJMHg0MDAwMDAwMAorI2RlZmluZQlNVjY0eDYwX0VYVFJBX0lETUFfRU5BQgkJMHg1MDAwMDAwMAorI2RlZmluZQlNVjY0eDYwX0VYVFJBX1BDSUFDQ19FTkFCCTB4NjAwMDAwMDAKKworI2RlZmluZQlNVjY0eDYwX0VYVFJBX01BU0sJCTB4ZjAwMDAwMDAKKworLyoKKyAqIERlZmluZSB0aGUgJ2hhbmRsZScgc3RydWN0IHRoYXQgd2lsbCBiZSBwYXNzZWQgYmV0d2VlbiB0aGUgNjR4NjAgY29yZQorICogY29kZSBhbmQgdGhlIHBsYXRmb3JtLXNwZWNpZmljIGNvZGUgdGhhdCB3aWxsIHVzZSBpdC4gIFRoZSBoYW5kbGUKKyAqIHdpbGwgY29udGFpbiBwb2ludGVycyB0byBjaGlwLXNwZWNpZmljIHJvdXRpbmVzICYgaW5mb3JtYXRpb24uCisgKi8KK3N0cnVjdCBtdjY0eDYwXzMyYml0X3dpbmRvdyB7CisJdTMyCWJhc2VfcmVnOworCXUzMglzaXplX3JlZzsKKwl1OAliYXNlX2JpdHM7CisJdTgJc2l6ZV9iaXRzOworCXUzMgkoKmdldF9mcm9tX2ZpZWxkKSh1MzIgdmFsLCB1MzIgbnVtX2JpdHMpOworCXUzMgkoKm1hcF90b19maWVsZCkodTMyIHZhbCwgdTMyIG51bV9iaXRzKTsKKwl1MzIJZXh0cmE7Cit9OworCitzdHJ1Y3QgbXY2NHg2MF82NGJpdF93aW5kb3cgeworCXUzMgliYXNlX2hpX3JlZzsKKwl1MzIJYmFzZV9sb19yZWc7CisJdTMyCXNpemVfcmVnOworCXU4CWJhc2VfbG9fYml0czsKKwl1OAlzaXplX2JpdHM7CisJdTMyCSgqZ2V0X2Zyb21fZmllbGQpKHUzMiB2YWwsIHUzMiBudW1fYml0cyk7CisJdTMyCSgqbWFwX3RvX2ZpZWxkKSh1MzIgdmFsLCB1MzIgbnVtX2JpdHMpOworCXUzMglleHRyYTsKK307CisKK3R5cGVkZWYgc3RydWN0IG12NjR4NjBfaGFuZGxlCW12NjR4NjBfaGFuZGxlX3Q7CitzdHJ1Y3QgbXY2NHg2MF9jaGlwX2luZm8geworCXUzMgkoKnRyYW5zbGF0ZV9zaXplKSh1MzIgYmFzZSwgdTMyIHNpemUsIHUzMiBudW1fYml0cyk7CisJdTMyCSgqdW50cmFuc2xhdGVfc2l6ZSkodTMyIGJhc2UsIHUzMiBzaXplLCB1MzIgbnVtX2JpdHMpOworCXZvaWQJKCpzZXRfcGNpMm1lbV93aW5kb3cpKHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSwgdTMyIGJ1cywKKwkJCXUzMiB3aW5kb3csIHUzMiBiYXNlKTsKKwl2b2lkIAkoKnNldF9wY2kycmVnc193aW5kb3cpKHN0cnVjdCBtdjY0eDYwX2hhbmRsZSAqYmgsCisJCQlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UsIHUzMiBidXMsIHUzMiBiYXNlKTsKKwl1MzIJKCppc19lbmFibGVkXzMyYml0KShtdjY0eDYwX2hhbmRsZV90ICpiaCwgdTMyIHdpbmRvdyk7CisJdm9pZAkoKmVuYWJsZV93aW5kb3dfMzJiaXQpKG12NjR4NjBfaGFuZGxlX3QgKmJoLCB1MzIgd2luZG93KTsKKwl2b2lkCSgqZGlzYWJsZV93aW5kb3dfMzJiaXQpKG12NjR4NjBfaGFuZGxlX3QgKmJoLCB1MzIgd2luZG93KTsKKwl2b2lkCSgqZW5hYmxlX3dpbmRvd182NGJpdCkobXY2NHg2MF9oYW5kbGVfdCAqYmgsIHUzMiB3aW5kb3cpOworCXZvaWQJKCpkaXNhYmxlX3dpbmRvd182NGJpdCkobXY2NHg2MF9oYW5kbGVfdCAqYmgsIHUzMiB3aW5kb3cpOworCXZvaWQJKCpkaXNhYmxlX2FsbF93aW5kb3dzKShtdjY0eDYwX2hhbmRsZV90ICpiaCwKKwkJCXN0cnVjdCBtdjY0eDYwX3NldHVwX2luZm8gKnNpKTsKKwl2b2lkCSgqY29uZmlnX2lvMm1lbV93aW5kb3dzKShtdjY0eDYwX2hhbmRsZV90ICpiaCwKKwkJCXN0cnVjdCBtdjY0eDYwX3NldHVwX2luZm8gKnNpLAorCQkJdTMyIG1lbV93aW5kb3dzW01WNjR4NjBfQ1BVMk1FTV9XSU5ET1dTXVsyXSk7CisJdm9pZCAJKCpzZXRfbXBzYzJyZWdzX3dpbmRvdykoc3RydWN0IG12NjR4NjBfaGFuZGxlICpiaCwgdTMyIGJhc2UpOworCXZvaWQJKCpjaGlwX3NwZWNpZmljX2luaXQpKG12NjR4NjBfaGFuZGxlX3QgKmJoLAorCQkJc3RydWN0IG12NjR4NjBfc2V0dXBfaW5mbyAqc2kpOworCisJc3RydWN0IG12NjR4NjBfMzJiaXRfd2luZG93CSp3aW5kb3dfdGFiXzMyYml0OworCXN0cnVjdCBtdjY0eDYwXzY0Yml0X3dpbmRvdwkqd2luZG93X3RhYl82NGJpdDsKK307CisKK3N0cnVjdCBtdjY0eDYwX2hhbmRsZSB7CisJdTMyCQl0eXBlOwkJLyogdHlwZSBvZiBicmlkZ2UgKi8KKwl1MzIJCXJldjsJCS8qIHJldmlzaW9uIG9mIGJyaWRnZSAqLworCXZvaWQJCSp2X2Jhc2U7CS8qIHZpcnR1YWwgYmFzZSBhZGRyIG9mIGJyaWRnZSByZWdzICovCisJcGh5c19hZGRyX3QJcF9iYXNlOwkJLyogcGh5c2ljYWwgYmFzZSBhZGRyIG9mIGJyaWRnZSByZWdzICovCisKKwl1MzIJCXBjaV9tb2RlX2E7CS8qIHBjaSAwIG1vZGU6IGNvbnZlbnRpb25hbCBwY2ksIHBjaS14Ki8KKwl1MzIJCXBjaV9tb2RlX2I7CS8qIHBjaSAxIG1vZGU6IGNvbnZlbnRpb25hbCBwY2ksIHBjaS14Ki8KKworCXUzMgkJaW9fYmFzZV9hOwkvKiB2YWRkciBvZiBwY2kgMCdzIEkvTyBzcGFjZSAqLworCXUzMgkJaW9fYmFzZV9iOwkvKiB2YWRkciBvZiBwY2kgMSdzIEkvTyBzcGFjZSAqLworCisJc3RydWN0IHBjaV9jb250cm9sbGVyCSpob3NlX2E7CisJc3RydWN0IHBjaV9jb250cm9sbGVyCSpob3NlX2I7CisKKwlzdHJ1Y3QgbXY2NHg2MF9jaGlwX2luZm8gKmNpOwkvKiBjaGlwL2JyaWRnZS1zcGVjaWZpYyBpbmZvICovCit9OworCisKKy8qIERlZmluZSBJL08gcm91dGluZXMgZm9yIGFjY2Vzc2luZyByZWdpc3RlcnMgb24gdGhlIDY0eDYwIGJyaWRnZS4gKi8KK2V4dGVybiBpbmxpbmUgdm9pZAorbXY2NHg2MF93cml0ZShzdHJ1Y3QgbXY2NHg2MF9oYW5kbGUgKmJoLCB1MzIgb2Zmc2V0LCB1MzIgdmFsKSB7CisJdWxvbmcJZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbXY2NHg2MF9sb2NrLCBmbGFncyk7CisJb3V0X2xlMzIoYmgtPnZfYmFzZSArIG9mZnNldCwgdmFsKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtdjY0eDYwX2xvY2ssIGZsYWdzKTsKK30KKworZXh0ZXJuIGlubGluZSB1MzIKK212NjR4NjBfcmVhZChzdHJ1Y3QgbXY2NHg2MF9oYW5kbGUgKmJoLCB1MzIgb2Zmc2V0KSB7CisJdWxvbmcJZmxhZ3M7CisJdTMyICAgICByZWc7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbXY2NHg2MF9sb2NrLCBmbGFncyk7CisJcmVnID0gaW5fbGUzMihiaC0+dl9iYXNlICsgb2Zmc2V0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtdjY0eDYwX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmVnOworfQorCitleHRlcm4gaW5saW5lIHZvaWQKK212NjR4NjBfbW9kaWZ5KHN0cnVjdCBtdjY0eDYwX2hhbmRsZSAqYmgsIHUzMiBvZmZzLCB1MzIgZGF0YSwgdTMyIG1hc2spCit7CisJdTMyCXJlZzsKKwl1bG9uZwlmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtdjY0eDYwX2xvY2ssIGZsYWdzKTsKKwlyZWcgPSBpbl9sZTMyKGJoLT52X2Jhc2UgKyBvZmZzKSAmICh+bWFzayk7CisJcmVnIHw9IGRhdGEgJiBtYXNrOworCW91dF9sZTMyKGJoLT52X2Jhc2UgKyBvZmZzLCByZWcpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm12NjR4NjBfbG9jaywgZmxhZ3MpOworfQorCisjZGVmaW5lCW12NjR4NjBfc2V0X2JpdHMoYmgsIG9mZnMsIGJpdHMpIG12NjR4NjBfbW9kaWZ5KGJoLCBvZmZzLCB+MCwgYml0cykKKyNkZWZpbmUJbXY2NHg2MF9jbHJfYml0cyhiaCwgb2ZmcywgYml0cykgbXY2NHg2MF9tb2RpZnkoYmgsIG9mZnMsIDAsIGJpdHMpCisKKworLyogRXh0ZXJuYWxseSB2aXNpYmxlIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KK2ludCBtdjY0eDYwX2luaXQoc3RydWN0IG12NjR4NjBfaGFuZGxlICpiaCwgc3RydWN0IG12NjR4NjBfc2V0dXBfaW5mbyAqc2kpOwordTMyIG12NjR4NjBfZ2V0X21lbV9zaXplKHUzMiBicmlkZ2VfYmFzZSwgdTMyIGNoaXBfdHlwZSk7Cit2b2lkIG12NjR4NjBfZWFybHlfaW5pdChzdHJ1Y3QgbXY2NHg2MF9oYW5kbGUgKmJoLAorCXN0cnVjdCBtdjY0eDYwX3NldHVwX2luZm8gKnNpKTsKK3ZvaWQgbXY2NHg2MF9hbGxvY19ob3NlKHN0cnVjdCBtdjY0eDYwX2hhbmRsZSAqYmgsIHUzMiBjZmdfYWRkciwKKwl1MzIgY2ZnX2RhdGEsIHN0cnVjdCBwY2lfY29udHJvbGxlciAqKmhvc2UpOworaW50IG12NjR4NjBfZ2V0X3R5cGUoc3RydWN0IG12NjR4NjBfaGFuZGxlICpiaCk7CitpbnQgbXY2NHg2MF9zZXR1cF9mb3JfY2hpcChzdHJ1Y3QgbXY2NHg2MF9oYW5kbGUgKmJoKTsKK3ZvaWQgKm12NjR4NjBfZ2V0X2JyaWRnZV92YmFzZSh2b2lkKTsKK3UzMiBtdjY0eDYwX2dldF9icmlkZ2VfdHlwZSh2b2lkKTsKK3UzMiBtdjY0eDYwX2dldF9icmlkZ2VfcmV2KHZvaWQpOwordm9pZCBtdjY0eDYwX2dldF9tZW1fd2luZG93cyhzdHJ1Y3QgbXY2NHg2MF9oYW5kbGUgKmJoLAorCXUzMiBtZW1fd2luZG93c1tNVjY0eDYwX0NQVTJNRU1fV0lORE9XU11bMl0pOwordm9pZCBtdjY0eDYwX2NvbmZpZ19jcHUybWVtX3dpbmRvd3Moc3RydWN0IG12NjR4NjBfaGFuZGxlICpiaCwKKwlzdHJ1Y3QgbXY2NHg2MF9zZXR1cF9pbmZvICpzaSwKKwl1MzIgbWVtX3dpbmRvd3NbTVY2NHg2MF9DUFUyTUVNX1dJTkRPV1NdWzJdKTsKK3ZvaWQgbXY2NHg2MF9jb25maWdfY3B1MnBjaV93aW5kb3dzKHN0cnVjdCBtdjY0eDYwX2hhbmRsZSAqYmgsCisJc3RydWN0IG12NjR4NjBfcGNpX2luZm8gKnBpLCB1MzIgYnVzKTsKK3ZvaWQgbXY2NHg2MF9jb25maWdfcGNpMm1lbV93aW5kb3dzKHN0cnVjdCBtdjY0eDYwX2hhbmRsZSAqYmgsCisJc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlLCBzdHJ1Y3QgbXY2NHg2MF9wY2lfaW5mbyAqcGksIHUzMiBidXMsCisJdTMyIG1lbV93aW5kb3dzW01WNjR4NjBfQ1BVMk1FTV9XSU5ET1dTXVsyXSk7Cit2b2lkIG12NjR4NjBfY29uZmlnX3Jlc291cmNlcyhzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UsCisJc3RydWN0IG12NjR4NjBfcGNpX2luZm8gKnBpLCB1MzIgaW9fYmFzZSk7Cit2b2lkIG12NjR4NjBfY29uZmlnX3BjaV9wYXJhbXMoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlLAorCXN0cnVjdCBtdjY0eDYwX3BjaV9pbmZvICpwaSk7Cit2b2lkIG12NjR4NjBfcGRfZml4dXAoc3RydWN0IG12NjR4NjBfaGFuZGxlICpiaCwKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZF9kZXZzW10sIHUzMiBlbnRyaWVzKTsKK3ZvaWQgbXY2NHg2MF9nZXRfMzJiaXRfd2luZG93KHN0cnVjdCBtdjY0eDYwX2hhbmRsZSAqYmgsIHUzMiB3aW5kb3csCisJdTMyICpiYXNlLCB1MzIgKnNpemUpOwordm9pZCBtdjY0eDYwX3NldF8zMmJpdF93aW5kb3coc3RydWN0IG12NjR4NjBfaGFuZGxlICpiaCwgdTMyIHdpbmRvdywgdTMyIGJhc2UsCisJdTMyIHNpemUsIHUzMiBvdGhlcl9iaXRzKTsKK3ZvaWQgbXY2NHg2MF9nZXRfNjRiaXRfd2luZG93KHN0cnVjdCBtdjY0eDYwX2hhbmRsZSAqYmgsIHUzMiB3aW5kb3csCisJdTMyICpiYXNlX2hpLCB1MzIgKmJhc2VfbG8sIHUzMiAqc2l6ZSk7Cit2b2lkIG12NjR4NjBfc2V0XzY0Yml0X3dpbmRvdyhzdHJ1Y3QgbXY2NHg2MF9oYW5kbGUgKmJoLCB1MzIgd2luZG93LAorCXUzMiBiYXNlX2hpLCB1MzIgYmFzZV9sbywgdTMyIHNpemUsIHUzMiBvdGhlcl9iaXRzKTsKK3ZvaWQgbXY2NHg2MF9zZXRfYnVzKHN0cnVjdCBtdjY0eDYwX2hhbmRsZSAqYmgsIHUzMiBidXMsIHUzMiBjaGlsZF9idXMpOworaW50IG12NjR4NjBfcGNpX2V4Y2x1ZGVfZGV2aWNlKHU4IGJ1cywgdTggZGV2Zm4pOworCisKK3ZvaWQgZ3Q2NDI2MF9pbml0X2lycSh2b2lkKTsKK2ludCBndDY0MjYwX2dldF9pcnEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwordm9pZCBtdjY0MzYwX2luaXRfaXJxKHZvaWQpOworaW50IG12NjQzNjBfZ2V0X2lycShzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKK3UzMiBtdjY0eDYwX21hc2sodTMyIHZhbCwgdTMyIG51bV9iaXRzKTsKK3UzMiBtdjY0eDYwX3NoaWZ0X2xlZnQodTMyIHZhbCwgdTMyIG51bV9iaXRzKTsKK3UzMiBtdjY0eDYwX3NoaWZ0X3JpZ2h0KHUzMiB2YWwsIHUzMiBudW1fYml0cyk7Cit1MzIgbXY2NHg2MF9jYWxjX21lbV9zaXplKHN0cnVjdCBtdjY0eDYwX2hhbmRsZSAqYmgsCisJdTMyIG1lbV93aW5kb3dzW01WNjR4NjBfQ1BVMk1FTV9XSU5ET1dTXVsyXSk7CisKK3ZvaWQgbXY2NHg2MF9wcm9ncmVzc19pbml0KHUzMiBiYXNlKTsKK3ZvaWQgbXY2NHg2MF9tcHNjX3Byb2dyZXNzKGNoYXIgKnMsIHVuc2lnbmVkIHNob3J0IGhleCk7CisKK2V4dGVybiBzdHJ1Y3QgbXY2NHg2MF8zMmJpdF93aW5kb3cKKwlndDY0MjYwXzMyYml0X3dpbmRvd3NbTVY2NHg2MF8zMkJJVF9XSU5fQ09VTlRdOworZXh0ZXJuIHN0cnVjdCBtdjY0eDYwXzY0Yml0X3dpbmRvdworCWd0NjQyNjBfNjRiaXRfd2luZG93c1tNVjY0eDYwXzY0QklUX1dJTl9DT1VOVF07CitleHRlcm4gc3RydWN0IG12NjR4NjBfMzJiaXRfd2luZG93CisJbXY2NDM2MF8zMmJpdF93aW5kb3dzW01WNjR4NjBfMzJCSVRfV0lOX0NPVU5UXTsKK2V4dGVybiBzdHJ1Y3QgbXY2NHg2MF82NGJpdF93aW5kb3cKKwltdjY0MzYwXzY0Yml0X3dpbmRvd3NbTVY2NHg2MF82NEJJVF9XSU5fQ09VTlRdOworCisjZW5kaWYgLyogX19BU01QUENfTVY2NHg2MF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvbXY2NHg2MF9kZWZzLmggYi9pbmNsdWRlL2FzbS1wcGMvbXY2NHg2MF9kZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY0Mjg3NAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9tdjY0eDYwX2RlZnMuaApAQCAtMCwwICsxLDk3MyBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLXBwYy9ndDY0MjYwX2RlZnMuaAorICoKKyAqIFJlZ2lzdGVyIGRlZmluaXRpb25zIGZvciB0aGUgTWFydmVsbC9HYWxpbGVvIEdUNjQyNjAsIE1WNjQzNjAsIGV0Yy4KKyAqIGhvc3QgYnJpZGdlcy4KKyAqCisgKiBBdXRob3I6IE1hcmsgQS4gR3JlZXIgPG1ncmVlckBtdmlzdGEuY29tPgorICoKKyAqIDIwMDEtMjAwMiAoYykgTW9udGFWaXN0YSwgU29mdHdhcmUsIEluYy4gIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0KKyAqIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcworICogb3IgaW1wbGllZC4KKyAqLworI2lmbmRlZiBfX0FTTVBQQ19NVjY0eDYwX0RFRlNfSAorI2RlZmluZSBfX0FTTVBQQ19NVjY0eDYwX0RFRlNfSAorCisvKgorICogRGVmaW5lIHRoZSBNYXJ2ZWxsIGJyaWRnZXMgdGhhdCBhcmUgc3VwcG9ydGVkCisgKi8KKyNkZWZpbmUJTVY2NHg2MF9UWVBFX0lOVkFMSUQJCQkwCisjZGVmaW5lCU1WNjR4NjBfVFlQRV9HVDY0MjYwQQkJCTEKKyNkZWZpbmUJTVY2NHg2MF9UWVBFX0dUNjQyNjBCCQkJMgorI2RlZmluZQlNVjY0eDYwX1RZUEVfTVY2NDM2MAkJCTMKKyNkZWZpbmUJTVY2NHg2MF9UWVBFX01WNjQzNjEJCQk0CisjZGVmaW5lCU1WNjR4NjBfVFlQRV9NVjY0MzYyCQkJNQorI2RlZmluZQlNVjY0eDYwX1RZUEVfTVY2NDQ2MAkJCTYKKworCisvKiBSZXZpc2lvbnMgb2YgZWFjaCBzdXBwb3J0ZWQgY2hpcCAqLworI2RlZmluZQlHVDY0MjYwX1JFVl9BCQkJCTB4MTAKKyNkZWZpbmUJR1Q2NDI2MF9SRVZfQgkJCQkweDIwCisjZGVmaW5lCU1WNjQzNjAJCQkJCTB4MDEKKyNkZWZpbmUJTVY2NDQ2MAkJCQkJMHgwMQorCisvKiBNaW5pbXVtIHdpbmRvdyBzaXplIHN1cHBvcnRlZCBieSA2NDI2MCBpcyAxTUIgKi8KKyNkZWZpbmUgR1Q2NDI2MF9XSU5ET1dfU0laRV9NSU4JCQkweDAwMTAwMDAwCisjZGVmaW5lIE1WNjQzNjBfV0lORE9XX1NJWkVfTUlOCQkJMHgwMDAxMDAwMAorCisjZGVmaW5lCU1WNjR4NjBfVENMS19GUkVRX01BWAkJCTEzMzMzMzMzM1UKKworLyogSVJRJ3MgZm9yIGVtYmVkZGVkIGNvbnRyb2xsZXJzICovCisjZGVmaW5lCU1WNjR4NjBfSVJRX0RFVgkJCQkxCisjZGVmaW5lCU1WNjR4NjBfSVJRX0NQVV9FUlIJCQkzCisjZGVmaW5lCU1WNjR4NjBfSVJRX1RJTUVSXzBfMQkJCTgKKyNkZWZpbmUJTVY2NHg2MF9JUlFfVElNRVJfMl8zCQkJOQorI2RlZmluZQlNVjY0eDYwX0lSUV9USU1FUl80XzUJCQkxMAorI2RlZmluZQlNVjY0eDYwX0lSUV9USU1FUl82XzcJCQkxMQorI2RlZmluZQlNVjY0eDYwX0lSUV9QMV9HUFBfMF83CQkJMjQKKyNkZWZpbmUJTVY2NHg2MF9JUlFfUDFfR1BQXzhfMTUJCQkyNQorI2RlZmluZQlNVjY0eDYwX0lSUV9QMV9HUFBfMTZfMjMJCTI2CisjZGVmaW5lCU1WNjR4NjBfSVJRX1AxX0dQUF8yNF8zMQkJMjcKKyNkZWZpbmUJTVY2NHg2MF9JUlFfRE9PUkJFTEwJCQkyOAorI2RlZmluZQlNVjY0eDYwX0lSUV9FVEhfMAkJCTMyCisjZGVmaW5lCU1WNjR4NjBfSVJRX0VUSF8xCQkJMzMKKyNkZWZpbmUJTVY2NHg2MF9JUlFfRVRIXzIJCQkzNAorI2RlZmluZQlNVjY0eDYwX0lSUV9TRE1BXzAJCQkzNgorI2RlZmluZQlNVjY0eDYwX0lSUV9JMkMJCQkJMzcKKyNkZWZpbmUJTVY2NHg2MF9JUlFfQlJHCQkJCTM5CisjZGVmaW5lCU1WNjR4NjBfSVJRX01QU0NfMAkJCTQwCisjZGVmaW5lCU1WNjR4NjBfSVJRX01QU0NfMQkJCTQyCisjZGVmaW5lCU1WNjR4NjBfSVJRX0NPTU0JCQk0MworI2RlZmluZQlNVjY0eDYwX0lSUV9QMF9HUFBfMF83CQkJNTYKKyNkZWZpbmUJTVY2NHg2MF9JUlFfUDBfR1BQXzhfMTUJCQk1NworI2RlZmluZQlNVjY0eDYwX0lSUV9QMF9HUFBfMTZfMjMJCTU4CisjZGVmaW5lCU1WNjR4NjBfSVJRX1AwX0dQUF8yNF8zMQkJNTkKKworI2RlZmluZQlNVjY0MzYwX0lSUV9QQ0kwCQkJMTIKKyNkZWZpbmUJTVY2NDM2MF9JUlFfU1JBTV9QQVJfRVJSCQkxMworI2RlZmluZQlNVjY0MzYwX0lSUV9QQ0kxCQkJMTYKKyNkZWZpbmUJTVY2NDM2MF9JUlFfU0RNQV8xCQkJMzgKKworI2RlZmluZQlNVjY0eDYwX0lSUV9HUFAwCQkJNjQKKyNkZWZpbmUJTVY2NHg2MF9JUlFfR1BQMQkJCTY1CisjZGVmaW5lCU1WNjR4NjBfSVJRX0dQUDIJCQk2NgorI2RlZmluZQlNVjY0eDYwX0lSUV9HUFAzCQkJNjcKKyNkZWZpbmUJTVY2NHg2MF9JUlFfR1BQNAkJCTY4CisjZGVmaW5lCU1WNjR4NjBfSVJRX0dQUDUJCQk2OQorI2RlZmluZQlNVjY0eDYwX0lSUV9HUFA2CQkJNzAKKyNkZWZpbmUJTVY2NHg2MF9JUlFfR1BQNwkJCTcxCisjZGVmaW5lCU1WNjR4NjBfSVJRX0dQUDgJCQk3MgorI2RlZmluZQlNVjY0eDYwX0lSUV9HUFA5CQkJNzMKKyNkZWZpbmUJTVY2NHg2MF9JUlFfR1BQMTAJCQk3NAorI2RlZmluZQlNVjY0eDYwX0lSUV9HUFAxMQkJCTc1CisjZGVmaW5lCU1WNjR4NjBfSVJRX0dQUDEyCQkJNzYKKyNkZWZpbmUJTVY2NHg2MF9JUlFfR1BQMTMJCQk3NworI2RlZmluZQlNVjY0eDYwX0lSUV9HUFAxNAkJCTc4CisjZGVmaW5lCU1WNjR4NjBfSVJRX0dQUDE1CQkJNzkKKyNkZWZpbmUJTVY2NHg2MF9JUlFfR1BQMTYJCQk4MAorI2RlZmluZQlNVjY0eDYwX0lSUV9HUFAxNwkJCTgxCisjZGVmaW5lCU1WNjR4NjBfSVJRX0dQUDE4CQkJODIKKyNkZWZpbmUJTVY2NHg2MF9JUlFfR1BQMTkJCQk4MworI2RlZmluZQlNVjY0eDYwX0lSUV9HUFAyMAkJCTg0CisjZGVmaW5lCU1WNjR4NjBfSVJRX0dQUDIxCQkJODUKKyNkZWZpbmUJTVY2NHg2MF9JUlFfR1BQMjIJCQk4NgorI2RlZmluZQlNVjY0eDYwX0lSUV9HUFAyMwkJCTg3CisjZGVmaW5lCU1WNjR4NjBfSVJRX0dQUDI0CQkJODgKKyNkZWZpbmUJTVY2NHg2MF9JUlFfR1BQMjUJCQk4OQorI2RlZmluZQlNVjY0eDYwX0lSUV9HUFAyNgkJCTkwCisjZGVmaW5lCU1WNjR4NjBfSVJRX0dQUDI3CQkJOTEKKyNkZWZpbmUJTVY2NHg2MF9JUlFfR1BQMjgJCQk5MgorI2RlZmluZQlNVjY0eDYwX0lSUV9HUFAyOQkJCTkzCisjZGVmaW5lCU1WNjR4NjBfSVJRX0dQUDMwCQkJOTQKKyNkZWZpbmUJTVY2NHg2MF9JUlFfR1BQMzEJCQk5NQorCisvKiBPZmZzZXRzIGZvciByZWdpc3RlciBibG9ja3MgKi8KKyNkZWZpbmUJR1Q2NDI2MF9FTkVUX1BIWV9BRERSCQkJMHgyMDAwCisjZGVmaW5lCUdUNjQyNjBfRU5FVF9FU01JUgkJCTB4MjAxMAorI2RlZmluZSBHVDY0MjYwX0VORVRfMF9PRkZTRVQJCQkweDI0MDAKKyNkZWZpbmUgR1Q2NDI2MF9FTkVUXzFfT0ZGU0VUCQkJMHgyODAwCisjZGVmaW5lIEdUNjQyNjBfRU5FVF8yX09GRlNFVAkJCTB4MmMwMAorI2RlZmluZQlNVjY0eDYwX1NETUFfMF9PRkZTRVQJCQkweDQwMDAKKyNkZWZpbmUJTVY2NHg2MF9TRE1BXzFfT0ZGU0VUCQkJMHg2MDAwCisjZGVmaW5lCU1WNjR4NjBfTVBTQ18wX09GRlNFVAkJCTB4ODAwMAorI2RlZmluZQlNVjY0eDYwX01QU0NfMV9PRkZTRVQJCQkweDkwMDAKKyNkZWZpbmUJTVY2NHg2MF9NUFNDX1JPVVRJTkdfT0ZGU0VUCQkweGI0MDAKKyNkZWZpbmUJTVY2NHg2MF9TRE1BX0lOVFJfT0ZGU0VUCQkweGI4MDAKKyNkZWZpbmUJTVY2NHg2MF9CUkdfMF9PRkZTRVQJCQkweGIyMDAKKyNkZWZpbmUJTVY2NHg2MF9CUkdfMV9PRkZTRVQJCQkweGIyMDgKKworLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqCUNQVSBJbnRlcmZhY2UgUmVnaXN0ZXJzCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworLyogQ1BVIHBoeXNpY2FsIGFkZHJlc3Mgb2YgYnJpZGdlJ3MgcmVnaXN0ZXJzICovCisjZGVmaW5lIE1WNjR4NjBfSU5URVJOQUxfU1BBQ0VfREVDT0RFCQkweDAwNjgKKyNkZWZpbmUgTVY2NHg2MF9JTlRFUk5BTF9TUEFDRV9TSVpFCQkweDEwMDAwCisjZGVmaW5lIE1WNjR4NjBfSU5URVJOQUxfU1BBQ0VfREVGQVVMVF9BRERSCTB4MTQwMDAwMDAKKworI2RlZmluZQlNVjY0MzYwX0NQVV9CQVJfRU5BQkxFCQkJMHgwMjc4CisKKy8qIENQVSBNZW1vcnkgQ29udHJvbGxlciBXaW5kb3cgUmVnaXN0ZXJzICg0IHdpbmRvd3MpICovCisjZGVmaW5lCU1WNjR4NjBfQ1BVMk1FTV9XSU5ET1dTCQkJNAorCisjZGVmaW5lCU1WNjR4NjBfQ1BVMk1FTV8wX0JBU0UJCQkweDAwMDgKKyNkZWZpbmUJTVY2NHg2MF9DUFUyTUVNXzBfU0laRQkJCTB4MDAxMAorI2RlZmluZQlNVjY0eDYwX0NQVTJNRU1fMV9CQVNFCQkJMHgwMjA4CisjZGVmaW5lCU1WNjR4NjBfQ1BVMk1FTV8xX1NJWkUJCQkweDAyMTAKKyNkZWZpbmUJTVY2NHg2MF9DUFUyTUVNXzJfQkFTRQkJCTB4MDAxOAorI2RlZmluZQlNVjY0eDYwX0NQVTJNRU1fMl9TSVpFCQkJMHgwMDIwCisjZGVmaW5lCU1WNjR4NjBfQ1BVMk1FTV8zX0JBU0UJCQkweDAyMTgKKyNkZWZpbmUJTVY2NHg2MF9DUFUyTUVNXzNfU0laRQkJCTB4MDIyMAorCisvKiBDUFUgRGV2aWNlIENvbnRyb2xsZXIgV2luZG93IFJlZ2lzdGVycyAoNCB3aW5kb3dzKSAqLworI2RlZmluZQlNVjY0eDYwX0NQVTJERVZfV0lORE9XUwkJCTQKKworI2RlZmluZQlNVjY0eDYwX0NQVTJERVZfMF9CQVNFCQkJMHgwMDI4CisjZGVmaW5lCU1WNjR4NjBfQ1BVMkRFVl8wX1NJWkUJCQkweDAwMzAKKyNkZWZpbmUJTVY2NHg2MF9DUFUyREVWXzFfQkFTRQkJCTB4MDIyOAorI2RlZmluZQlNVjY0eDYwX0NQVTJERVZfMV9TSVpFCQkJMHgwMjMwCisjZGVmaW5lCU1WNjR4NjBfQ1BVMkRFVl8yX0JBU0UJCQkweDAyNDgKKyNkZWZpbmUJTVY2NHg2MF9DUFUyREVWXzJfU0laRQkJCTB4MDI1MAorI2RlZmluZQlNVjY0eDYwX0NQVTJERVZfM19CQVNFCQkJMHgwMDM4CisjZGVmaW5lCU1WNjR4NjBfQ1BVMkRFVl8zX1NJWkUJCQkweDAwNDAKKworI2RlZmluZQlNVjY0eDYwX0NQVTJCT09UXzBfQkFTRQkJCTB4MDIzOAorI2RlZmluZQlNVjY0eDYwX0NQVTJCT09UXzBfU0laRQkJCTB4MDI0MAorCisjZGVmaW5lCU1WNjQzNjBfQ1BVMlNSQU1fQkFTRQkJCTB4MDI2OAorCisvKiBDUFUgV2luZG93cyB0byBQQ0kgc3BhY2UgKDIgUENJIGJ1c2VzIGVhY2ggdy8gMSBJL08gJiA0IE1FTSB3aW5kb3dzKSAqLworI2RlZmluZQlNVjY0eDYwX1BDSV9CVVNFUwkJCTIKKyNkZWZpbmUJTVY2NHg2MF9QQ0lfSU9fV0lORE9XU19QRVJfQlVTCQkxCisjZGVmaW5lCU1WNjR4NjBfUENJX01FTV9XSU5ET1dTX1BFUl9CVVMJCTQKKworI2RlZmluZQlNVjY0eDYwX0NQVTJQQ0lfU1dBUF9CWVRFCQkweDAwMDAwMDAwCisjZGVmaW5lCU1WNjR4NjBfQ1BVMlBDSV9TV0FQX05PTkUJCTB4MDEwMDAwMDAKKyNkZWZpbmUJTVY2NHg2MF9DUFUyUENJX1NXQVBfQllURV9XT1JECQkweDAyMDAwMDAwCisjZGVmaW5lCU1WNjR4NjBfQ1BVMlBDSV9TV0FQX1dPUkQJCTB4MDMwMDAwMDAKKworI2RlZmluZQlNVjY0eDYwX0NQVTJQQ0lfTUVNX1JFUTY0CQkoMTw8MjcpCisKKyNkZWZpbmUJTVY2NHg2MF9DUFUyUENJMF9JT19CQVNFCQkweDAwNDgKKyNkZWZpbmUJTVY2NHg2MF9DUFUyUENJMF9JT19TSVpFCQkweDAwNTAKKyNkZWZpbmUJTVY2NHg2MF9DUFUyUENJMF9NRU1fMF9CQVNFCQkweDAwNTgKKyNkZWZpbmUJTVY2NHg2MF9DUFUyUENJMF9NRU1fMF9TSVpFCQkweDAwNjAKKyNkZWZpbmUJTVY2NHg2MF9DUFUyUENJMF9NRU1fMV9CQVNFCQkweDAwODAKKyNkZWZpbmUJTVY2NHg2MF9DUFUyUENJMF9NRU1fMV9TSVpFCQkweDAwODgKKyNkZWZpbmUJTVY2NHg2MF9DUFUyUENJMF9NRU1fMl9CQVNFCQkweDAyNTgKKyNkZWZpbmUJTVY2NHg2MF9DUFUyUENJMF9NRU1fMl9TSVpFCQkweDAyNjAKKyNkZWZpbmUJTVY2NHg2MF9DUFUyUENJMF9NRU1fM19CQVNFCQkweDAyODAKKyNkZWZpbmUJTVY2NHg2MF9DUFUyUENJMF9NRU1fM19TSVpFCQkweDAyODgKKworI2RlZmluZQlNVjY0eDYwX0NQVTJQQ0kwX0lPX1JFTUFQCQkweDAwZjAKKyNkZWZpbmUJTVY2NHg2MF9DUFUyUENJMF9NRU1fMF9SRU1BUF9MTwkJMHgwMGY4CisjZGVmaW5lCU1WNjR4NjBfQ1BVMlBDSTBfTUVNXzBfUkVNQVBfSEkJCTB4MDMyMAorI2RlZmluZQlNVjY0eDYwX0NQVTJQQ0kwX01FTV8xX1JFTUFQX0xPCQkweDAxMDAKKyNkZWZpbmUJTVY2NHg2MF9DUFUyUENJMF9NRU1fMV9SRU1BUF9ISQkJMHgwMzI4CisjZGVmaW5lCU1WNjR4NjBfQ1BVMlBDSTBfTUVNXzJfUkVNQVBfTE8JCTB4MDJmOAorI2RlZmluZQlNVjY0eDYwX0NQVTJQQ0kwX01FTV8yX1JFTUFQX0hJCQkweDAzMzAKKyNkZWZpbmUJTVY2NHg2MF9DUFUyUENJMF9NRU1fM19SRU1BUF9MTwkJMHgwMzAwCisjZGVmaW5lCU1WNjR4NjBfQ1BVMlBDSTBfTUVNXzNfUkVNQVBfSEkJCTB4MDMzOAorCisjZGVmaW5lCU1WNjR4NjBfQ1BVMlBDSTFfSU9fQkFTRQkJMHgwMDkwCisjZGVmaW5lCU1WNjR4NjBfQ1BVMlBDSTFfSU9fU0laRQkJMHgwMDk4CisjZGVmaW5lCU1WNjR4NjBfQ1BVMlBDSTFfTUVNXzBfQkFTRQkJMHgwMGEwCisjZGVmaW5lCU1WNjR4NjBfQ1BVMlBDSTFfTUVNXzBfU0laRQkJMHgwMGE4CisjZGVmaW5lCU1WNjR4NjBfQ1BVMlBDSTFfTUVNXzFfQkFTRQkJMHgwMGIwCisjZGVmaW5lCU1WNjR4NjBfQ1BVMlBDSTFfTUVNXzFfU0laRQkJMHgwMGI4CisjZGVmaW5lCU1WNjR4NjBfQ1BVMlBDSTFfTUVNXzJfQkFTRQkJMHgwMmEwCisjZGVmaW5lCU1WNjR4NjBfQ1BVMlBDSTFfTUVNXzJfU0laRQkJMHgwMmE4CisjZGVmaW5lCU1WNjR4NjBfQ1BVMlBDSTFfTUVNXzNfQkFTRQkJMHgwMmIwCisjZGVmaW5lCU1WNjR4NjBfQ1BVMlBDSTFfTUVNXzNfU0laRQkJMHgwMmI4CisKKyNkZWZpbmUJTVY2NHg2MF9DUFUyUENJMV9JT19SRU1BUAkJMHgwMTA4CisjZGVmaW5lCU1WNjR4NjBfQ1BVMlBDSTFfTUVNXzBfUkVNQVBfTE8JCTB4MDExMAorI2RlZmluZQlNVjY0eDYwX0NQVTJQQ0kxX01FTV8wX1JFTUFQX0hJCQkweDAzNDAKKyNkZWZpbmUJTVY2NHg2MF9DUFUyUENJMV9NRU1fMV9SRU1BUF9MTwkJMHgwMTE4CisjZGVmaW5lCU1WNjR4NjBfQ1BVMlBDSTFfTUVNXzFfUkVNQVBfSEkJCTB4MDM0OAorI2RlZmluZQlNVjY0eDYwX0NQVTJQQ0kxX01FTV8yX1JFTUFQX0xPCQkweDAzMTAKKyNkZWZpbmUJTVY2NHg2MF9DUFUyUENJMV9NRU1fMl9SRU1BUF9ISQkJMHgwMzUwCisjZGVmaW5lCU1WNjR4NjBfQ1BVMlBDSTFfTUVNXzNfUkVNQVBfTE8JCTB4MDMxOAorI2RlZmluZQlNVjY0eDYwX0NQVTJQQ0kxX01FTV8zX1JFTUFQX0hJCQkweDAzNTgKKworLyogQ1BVIENvbnRyb2wgUmVnaXN0ZXJzICovCisjZGVmaW5lIE1WNjR4NjBfQ1BVX0NPTkZJRwkJCTB4MDAwMAorI2RlZmluZSBNVjY0eDYwX0NQVV9NT0RFCQkJMHgwMTIwCisjZGVmaW5lIE1WNjR4NjBfQ1BVX01BU1RFUl9DTlRMCQkJMHgwMTYwCisjZGVmaW5lIE1WNjR4NjBfQ1BVX1hCQVJfQ05UTF9MTwkJMHgwMTUwCisjZGVmaW5lIE1WNjR4NjBfQ1BVX1hCQVJfQ05UTF9ISQkJMHgwMTU4CisjZGVmaW5lIE1WNjR4NjBfQ1BVX1hCQVJfVE8JCQkweDAxNjgKKworI2RlZmluZSBHVDY0MjYwX0NQVV9SUl9YQkFSX0NOVExfTE8JCTB4MDE3MAorI2RlZmluZSBHVDY0MjYwX0NQVV9SUl9YQkFSX0NOVExfSEkJCTB4MDE3OAorCisjZGVmaW5lIE1WNjQzNjBfQ1BVX1BBRFNfQ0FMSUJSQVRJT04JCTB4MDNiNAorI2RlZmluZSBNVjY0MzYwX0NQVV9SRVNFVF9TQU1QTEVfTE8JCTB4MDNjNAorI2RlZmluZSBNVjY0MzYwX0NQVV9SRVNFVF9TQU1QTEVfSEkJCTB4MDNkNAorCisvKiBTTVAgUmVnaXN0ZXIgTWFwICovCisjZGVmaW5lIE1WNjQzNjBfV0hPX0FNX0kJCQkweDAyMDAKKyNkZWZpbmUgTVY2NDM2MF9DUFUwX0RPT1JCRUxMCQkJMHgwMjE0CisjZGVmaW5lIE1WNjQzNjBfQ1BVMF9ET09SQkVMTF9DTFIJCTB4MDIxYworI2RlZmluZSBNVjY0MzYwX0NQVTBfRE9PUkJFTExfTUFTSwkJMHgwMjM0CisjZGVmaW5lIE1WNjQzNjBfQ1BVMV9ET09SQkVMTAkJCTB4MDIyNAorI2RlZmluZSBNVjY0MzYwX0NQVTFfRE9PUkJFTExfQ0xSCQkweDAyMmMKKyNkZWZpbmUgTVY2NDM2MF9DUFUxX0RPT1JCRUxMX01BU0sJCTB4MDIzYworI2RlZmluZSBNVjY0MzYwX0NQVXhfRE9PUkJFTEwoeCkJCSgweDAyMTQgKyAoKHgpKjB4MTApKQorI2RlZmluZSBNVjY0MzYwX0NQVXhfRE9PUkJFTExfQ0xSKHgpCQkoMHgwMjFjICsgKCh4KSoweDEwKSkKKyNkZWZpbmUgTVY2NDM2MF9DUFV4X0RPT1JCRUxMX01BU0soeCkJCSgweDAyMzQgKyAoKHgpKjB4MDgpKQorI2RlZmluZSBNVjY0MzYwX1NFTUFQSE9SRV8wCQkJMHgwMjQ0CisjZGVmaW5lIE1WNjQzNjBfU0VNQVBIT1JFXzEJCQkweDAyNGMKKyNkZWZpbmUgTVY2NDM2MF9TRU1BUEhPUkVfMgkJCTB4MDI1NAorI2RlZmluZSBNVjY0MzYwX1NFTUFQSE9SRV8zCQkJMHgwMjVjCisjZGVmaW5lIE1WNjQzNjBfU0VNQVBIT1JFXzQJCQkweDAyNjQKKyNkZWZpbmUgTVY2NDM2MF9TRU1BUEhPUkVfNQkJCTB4MDI2YworI2RlZmluZSBNVjY0MzYwX1NFTUFQSE9SRV82CQkJMHgwMjc0CisjZGVmaW5lIE1WNjQzNjBfU0VNQVBIT1JFXzcJCQkweDAyN2MKKworLyogQ1BVIFN5bmMgQmFycmllciBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgR1Q2NDI2MF9DUFVfU1lOQ19CQVJSSUVSX1BDSTAJCTB4MDBjMAorI2RlZmluZSBHVDY0MjYwX0NQVV9TWU5DX0JBUlJJRVJfUENJMQkJMHgwMGM4CisKKyNkZWZpbmUgTVY2NDM2MF9DUFUwX1NZTkNfQkFSUklFUl9UUklHCQkweDAwYzAKKyNkZWZpbmUgTVY2NDM2MF9DUFUwX1NZTkNfQkFSUklFUl9WSVJUCQkweDAwYzgKKyNkZWZpbmUgTVY2NDM2MF9DUFUxX1NZTkNfQkFSUklFUl9UUklHCQkweDAwZDAKKyNkZWZpbmUgTVY2NDM2MF9DUFUxX1NZTkNfQkFSUklFUl9WSVJUCQkweDAwZDgKKworLyogQ1BVIERlYWRsb2NrIGFuZCBPcmRlcmluZyByZWdpc3RlcnMgKFJldiBCIHBhcnQgb25seSkgKi8KKyNkZWZpbmUgR1Q2NDI2MF9DUFVfREVBRExPQ0tfT1JERVJJTkcJCQkweDAyZDAKKyNkZWZpbmUgR1Q2NDI2MF9DUFVfV0JfUFJJT1JJVFlfQlVGRkVSX0RFUFRICQkweDAyZDgKKyNkZWZpbmUgR1Q2NDI2MF9DUFVfQ09VTlRFUlNfU1lOQ19CQVJSSUVSX0FUVFJJQlVURQkweDAyZTAKKworLyogQ1BVIEFjY2VzcyBQcm90ZWN0aW9uIFJlZ2lzdGVycyAoZ3Q2NDI2MCByZWFseSBoYXMgOCBidXQgZG9uJ3QgbmVlZCkgKi8KKyNkZWZpbmUJTVY2NHgyNjBfQ1BVX1BST1RfV0lORE9XUwkJNAorCisjZGVmaW5lCUdUNjQyNjBfQ1BVX1BST1RfQUNDUFJPVEVDVAkJKDE8PDE2KQorI2RlZmluZQlHVDY0MjYwX0NQVV9QUk9UX1dSUFJPVEVDVAkJKDE8PDE3KQorI2RlZmluZQlHVDY0MjYwX0NQVV9QUk9UX0NBQ0hFUFJPVEVDVAkJKDE8PDE4KQorCisjZGVmaW5lCU1WNjQzNjBfQ1BVX1BST1RfQUNDUFJPVEVDVAkJKDE8PDIwKQorI2RlZmluZQlNVjY0MzYwX0NQVV9QUk9UX1dSUFJPVEVDVAkJKDE8PDIxKQorI2RlZmluZQlNVjY0MzYwX0NQVV9QUk9UX0NBQ0hFUFJPVEVDVAkJKDE8PDIyKQorI2RlZmluZQlNVjY0MzYwX0NQVV9QUk9UX1dJTl9FTkFCTEUJCSgxPDwzMSkKKworI2RlZmluZSBNVjY0eDYwX0NQVV9QUk9UX0JBU0VfMAkJCTB4MDE4MAorI2RlZmluZSBNVjY0eDYwX0NQVV9QUk9UX1NJWkVfMAkJCTB4MDE4OAorI2RlZmluZSBNVjY0eDYwX0NQVV9QUk9UX0JBU0VfMQkJCTB4MDE5MAorI2RlZmluZSBNVjY0eDYwX0NQVV9QUk9UX1NJWkVfMQkJCTB4MDE5OAorI2RlZmluZSBNVjY0eDYwX0NQVV9QUk9UX0JBU0VfMgkJCTB4MDFhMAorI2RlZmluZSBNVjY0eDYwX0NQVV9QUk9UX1NJWkVfMgkJCTB4MDFhOAorI2RlZmluZSBNVjY0eDYwX0NQVV9QUk9UX0JBU0VfMwkJCTB4MDFiMAorI2RlZmluZSBNVjY0eDYwX0NQVV9QUk9UX1NJWkVfMwkJCTB4MDFiOAorCisjZGVmaW5lIEdUNjQyNjBfQ1BVX1BST1RfQkFTRV80CQkJMHgwMWMwCisjZGVmaW5lIEdUNjQyNjBfQ1BVX1BST1RfU0laRV80CQkJMHgwMWM4CisjZGVmaW5lIEdUNjQyNjBfQ1BVX1BST1RfQkFTRV81CQkJMHgwMWQwCisjZGVmaW5lIEdUNjQyNjBfQ1BVX1BST1RfU0laRV81CQkJMHgwMWQ4CisjZGVmaW5lIEdUNjQyNjBfQ1BVX1BST1RfQkFTRV82CQkJMHgwMWUwCisjZGVmaW5lIEdUNjQyNjBfQ1BVX1BST1RfU0laRV82CQkJMHgwMWU4CisjZGVmaW5lIEdUNjQyNjBfQ1BVX1BST1RfQkFTRV83CQkJMHgwMWYwCisjZGVmaW5lIEdUNjQyNjBfQ1BVX1BST1RfU0laRV83CQkJMHgwMWY4CisKKy8qIENQVSBTbm9vcCBDb250cm9sIFJlZ2lzdGVycyAoNjQyNjAgb25seSkgKi8KKyNkZWZpbmUJR1Q2NDI2MF9DUFVfU05PT1BfV0lORE9XUwkJNAorCisjZGVmaW5lCUdUNjQyNjBfQ1BVX1NOT09QX05PTkUJCQkweDAwMDAwMDAwCisjZGVmaW5lCUdUNjQyNjBfQ1BVX1NOT09QX1dUCQkJMHgwMDAxMDAwMAorI2RlZmluZQlHVDY0MjYwX0NQVV9TTk9PUF9XQgkJCTB4MDAwMjAwMDAKKyNkZWZpbmUJR1Q2NDI2MF9DUFVfU05PT1BfTUFTSwkJCTB4MDAwMzAwMDAKKyNkZWZpbmUJR1Q2NDI2MF9DUFVfU05PT1BfQUxMX0JJVFMJCUdUNjQyNjBfQ1BVX1NOT09QX01BU0sKKworI2RlZmluZSBHVDY0MjYwX0NQVV9TTk9PUF9CQVNFXzAJCTB4MDM4MAorI2RlZmluZSBHVDY0MjYwX0NQVV9TTk9PUF9TSVpFXzAJCTB4MDM4OAorI2RlZmluZSBHVDY0MjYwX0NQVV9TTk9PUF9CQVNFXzEJCTB4MDM5MAorI2RlZmluZSBHVDY0MjYwX0NQVV9TTk9PUF9TSVpFXzEJCTB4MDM5OAorI2RlZmluZSBHVDY0MjYwX0NQVV9TTk9PUF9CQVNFXzIJCTB4MDNhMAorI2RlZmluZSBHVDY0MjYwX0NQVV9TTk9PUF9TSVpFXzIJCTB4MDNhOAorI2RlZmluZSBHVDY0MjYwX0NQVV9TTk9PUF9CQVNFXzMJCTB4MDNiMAorI2RlZmluZSBHVDY0MjYwX0NQVV9TTk9PUF9TSVpFXzMJCTB4MDNiOAorCisvKiBDUFUgU25vb3AgQ29udHJvbCBSZWdpc3RlcnMgKDY0MzYwIG9ubHkpICovCisjZGVmaW5lCU1WNjQzNjBfQ1BVX1NOT09QX1dJTkRPV1MJCTQKKyNkZWZpbmUJTVY2NDM2MF9DUFVfU05PT1BfTk9ORQkJCTB4MDAwMDAwMDAKKyNkZWZpbmUJTVY2NDM2MF9DUFVfU05PT1BfV1QJCQkweDAwMDEwMDAwCisjZGVmaW5lCU1WNjQzNjBfQ1BVX1NOT09QX1dCCQkJMHgwMDAyMDAwMAorI2RlZmluZQlNVjY0MzYwX0NQVV9TTk9PUF9NQVNLCQkJMHgwMDAzMDAwMAorI2RlZmluZQlNVjY0MzYwX0NQVV9TTk9PUF9BTExfQklUUwkJTVY2NDM2MF9DUFVfU05PT1BfTUFTSworCisKKy8qIENQVSBFcnJvciBSZXBvcnQgUmVnaXN0ZXJzICovCisjZGVmaW5lIE1WNjR4NjBfQ1BVX0VSUl9BRERSX0xPCQkJMHgwMDcwCisjZGVmaW5lIE1WNjR4NjBfQ1BVX0VSUl9BRERSX0hJCQkJMHgwMDc4CisjZGVmaW5lIE1WNjR4NjBfQ1BVX0VSUl9EQVRBX0xPCQkJMHgwMTI4CisjZGVmaW5lIE1WNjR4NjBfQ1BVX0VSUl9EQVRBX0hJCQkJMHgwMTMwCisjZGVmaW5lIE1WNjR4NjBfQ1BVX0VSUl9QQVJJVFkJCQkweDAxMzgKKyNkZWZpbmUgTVY2NHg2MF9DUFVfRVJSX0NBVVNFCQkJMHgwMTQwCisjZGVmaW5lIE1WNjR4NjBfQ1BVX0VSUl9NQVNLCQkJMHgwMTQ4CisKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKglTUkFNIENvdG5yb2xsZXIgUmVnaXN0ZXJzCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworI2RlZmluZQlNVjY0MzYwX1NSQU1fQ09ORklHCQkJMHgwMzgwCisjZGVmaW5lCU1WNjQzNjBfU1JBTV9URVNUX01PREUJCQkweDAzZjQKKyNkZWZpbmUJTVY2NDM2MF9TUkFNX0VSUl9DQVVTRQkJCTB4MDM4OAorI2RlZmluZQlNVjY0MzYwX1NSQU1fRVJSX0FERFJfTE8JCTB4MDM5MAorI2RlZmluZQlNVjY0MzYwX1NSQU1fRVJSX0FERFJfSEkJCTB4MDNmOAorI2RlZmluZQlNVjY0MzYwX1NSQU1fRVJSX0RBVEFfTE8JCTB4MDM5OAorI2RlZmluZQlNVjY0MzYwX1NSQU1fRVJSX0RBVEFfSEkJCTB4MDNhMAorI2RlZmluZQlNVjY0MzYwX1NSQU1fRVJSX1BBUklUWQkJCTB4MDNhOAorCisjZGVmaW5lCU1WNjQzNjBfU1JBTV9TSVpFCQkJMHgwMDA0MDAwMCAvKiAyTWIvMjU2S0IgU1JBTSAqLworCisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICoJU0RSQU0vTUVNIENvdG5yb2xsZXIgUmVnaXN0ZXJzCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworLyogU0RSQU0gQ29uZmlnIFJlZ2lzdGVycyAoNjQyNjApICovCisjZGVmaW5lCUdUNjQyNjBfU0RSQU1fQ09ORklHCQkJMHgwNDQ4CisKKy8qIFNEUkFNIEVycm9yIFJlcG9ydCBSZWdpc3RlcnMgKDY0MjYwKSAqLworI2RlZmluZQlHVDY0MjYwX1NEUkFNX0VSUl9EQVRBX0xPCQkweDA0ODQKKyNkZWZpbmUJR1Q2NDI2MF9TRFJBTV9FUlJfREFUQV9ISQkJMHgwNDgwCisjZGVmaW5lCUdUNjQyNjBfU0RSQU1fRVJSX0FERFIJCQkweDA0OTAKKyNkZWZpbmUJR1Q2NDI2MF9TRFJBTV9FUlJfRUNDX1JDVkQJCTB4MDQ4OAorI2RlZmluZQlHVDY0MjYwX1NEUkFNX0VSUl9FQ0NfQ0FMQwkJMHgwNDhjCisjZGVmaW5lCUdUNjQyNjBfU0RSQU1fRVJSX0VDQ19DTlRMCQkweDA0OTQKKyNkZWZpbmUJR1Q2NDI2MF9TRFJBTV9FUlJfRUNDX0VSUl9DTlQJCTB4MDQ5OAorCisvKiBTRFJBTSBDb25maWcgUmVnaXN0ZXJzICg2NDM2MCkgKi8KKyNkZWZpbmUJTVY2NDM2MF9TRFJBTV9DT05GSUcJCQkweDE0MDAKKworLyogU0RSQU0gQ29udHJvbCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgTVY2NDM2MF9EX1VOSVRfQ09OVFJPTF9MT1cJCTB4MTQwNAorI2RlZmluZSBNVjY0MzYwX0RfVU5JVF9DT05UUk9MX0hJR0gJCTB4MTQyNAorCisvKiBTRFJBTSBFcnJvciBSZXBvcnQgUmVnaXN0ZXJzICg2NDM2MCkgKi8KKyNkZWZpbmUJTVY2NDM2MF9TRFJBTV9FUlJfREFUQV9MTwkJMHgxNDQ0CisjZGVmaW5lCU1WNjQzNjBfU0RSQU1fRVJSX0RBVEFfSEkJCTB4MTQ0MAorI2RlZmluZQlNVjY0MzYwX1NEUkFNX0VSUl9BRERSCQkJMHgxNDUwCisjZGVmaW5lCU1WNjQzNjBfU0RSQU1fRVJSX0VDQ19SQ1ZECQkweDE0NDgKKyNkZWZpbmUJTVY2NDM2MF9TRFJBTV9FUlJfRUNDX0NBTEMJCTB4MTQ0YworI2RlZmluZQlNVjY0MzYwX1NEUkFNX0VSUl9FQ0NfQ05UTAkJMHgxNDU0CisjZGVmaW5lCU1WNjQzNjBfU0RSQU1fRVJSX0VDQ19FUlJfQ05UCQkweDE0NTgKKworLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqCURldmljZS9CT09UIENvdG5yb2xsZXIgUmVnaXN0ZXJzCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworLyogRGV2aWNlIENvbnRyb2wgUmVnaXN0ZXJzICovCisjZGVmaW5lCU1WNjR4NjBfREVWX0JBTktfUEFSQU1TXzAJCTB4MDQ1YworI2RlZmluZQlNVjY0eDYwX0RFVl9CQU5LX1BBUkFNU18xCQkweDA0NjAKKyNkZWZpbmUJTVY2NHg2MF9ERVZfQkFOS19QQVJBTVNfMgkJMHgwNDY0CisjZGVmaW5lCU1WNjR4NjBfREVWX0JBTktfUEFSQU1TXzMJCTB4MDQ2OAorI2RlZmluZQlNVjY0eDYwX0RFVl9CT09UX1BBUkFNUwkJCTB4MDQ2YworI2RlZmluZQlNVjY0eDYwX0RFVl9JRl9DTlRMCQkJMHgwNGMwCisjZGVmaW5lCU1WNjR4NjBfREVWX0lGX1hCQVJfQ05UTF9MTwkJMHgwNGM4CisjZGVmaW5lCU1WNjR4NjBfREVWX0lGX1hCQVJfQ05UTF9ISQkJMHgwNGNjCisjZGVmaW5lCU1WNjR4NjBfREVWX0lGX1hCQVJfQ05UTF9UTwkJMHgwNGM0CisKKy8qIERldmljZSBJbnRlcnJ1cHQgUmVnaXN0ZXJzICovCisjZGVmaW5lCU1WNjR4NjBfREVWX0lOVFJfQ0FVU0UJCQkweDA0ZDAKKyNkZWZpbmUJTVY2NHg2MF9ERVZfSU5UUl9NQVNLCQkJMHgwNGQ0CisjZGVmaW5lCU1WNjR4NjBfREVWX0lOVFJfRVJSX0FERFIJCTB4MDRkOAorCisjZGVmaW5lCU1WNjQzNjBfREVWX0lOVFJfRVJSX0RBVEEJCTB4MDRkYworI2RlZmluZQlNVjY0MzYwX0RFVl9JTlRSX0VSUl9QQVIJCTB4MDRlMAorCisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICoJUENJIEJyaWRnZSBJbnRlcmZhY2UgUmVnaXN0ZXJzCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworLyogUENJIENvbmZpZ3VyYXRpb24gQWNjZXNzIFJlZ2lzdGVycyAqLworI2RlZmluZQlNVjY0eDYwX1BDSTBfQ09ORklHX0FERFIJCTB4MGNmOAorI2RlZmluZQlNVjY0eDYwX1BDSTBfQ09ORklHX0RBVEEJCTB4MGNmYworI2RlZmluZQlNVjY0eDYwX1BDSTBfSUFDSwkJCTB4MGMzNAorCisjZGVmaW5lCU1WNjR4NjBfUENJMV9DT05GSUdfQUREUgkJMHgwYzc4CisjZGVmaW5lCU1WNjR4NjBfUENJMV9DT05GSUdfREFUQQkJMHgwYzdjCisjZGVmaW5lCU1WNjR4NjBfUENJMV9JQUNLCQkJMHgwY2I0CisKKy8qIFBDSSBDb250cm9sIFJlZ2lzdGVycyAqLworI2RlZmluZQlNVjY0eDYwX1BDSTBfQ01ECQkJMHgwYzAwCisjZGVmaW5lCU1WNjR4NjBfUENJMF9NT0RFCQkJMHgwZDAwCisjZGVmaW5lCU1WNjR4NjBfUENJMF9UT19SRVRSWQkJCTB4MGMwNAorI2RlZmluZQlNVjY0eDYwX1BDSTBfUkRfQlVGX0RJU0NBUkRfVElNRVIJMHgwZDA0CisjZGVmaW5lCU1WNjR4NjBfUENJMF9NU0lfVFJJR0dFUl9USU1FUgkJMHgwYzM4CisjZGVmaW5lCU1WNjR4NjBfUENJMF9BUkJJVEVSX0NOVEwJCTB4MWQwMAorI2RlZmluZQlNVjY0eDYwX1BDSTBfWEJBUl9DTlRMX0xPCQkweDFkMDgKKyNkZWZpbmUJTVY2NHg2MF9QQ0kwX1hCQVJfQ05UTF9ISQkJMHgxZDBjCisjZGVmaW5lCU1WNjR4NjBfUENJMF9YQkFSX0NOVExfVE8JCTB4MWQwNAorI2RlZmluZQlNVjY0eDYwX1BDSTBfUkRfUkVTUF9YQkFSX0NOVExfTE8JMHgxZDE4CisjZGVmaW5lCU1WNjR4NjBfUENJMF9SRF9SRVNQX1hCQVJfQ05UTF9ISQkweDFkMWMKKyNkZWZpbmUJTVY2NHg2MF9QQ0kwX1NZTkNfQkFSUklFUgkJMHgxZDEwCisjZGVmaW5lCU1WNjR4NjBfUENJMF9QMlBfQ09ORklHCQkJMHgxZDE0CisjZGVmaW5lCU1WNjR4NjBfUENJMF9JTlRSX01BU0sKKworI2RlZmluZQlHVDY0MjYwX1BDSTBfUDJQX1NXQVBfQ05UTAkJMHgxZDU0CisKKyNkZWZpbmUJTVY2NHg2MF9QQ0kxX0NNRAkJCTB4MGM4MAorI2RlZmluZQlNVjY0eDYwX1BDSTFfTU9ERQkJCTB4MGQ4MAorI2RlZmluZQlNVjY0eDYwX1BDSTFfVE9fUkVUUlkJCQkweDBjODQKKyNkZWZpbmUJTVY2NHg2MF9QQ0kxX1JEX0JVRl9ESVNDQVJEX1RJTUVSCTB4MGQ4NAorI2RlZmluZQlNVjY0eDYwX1BDSTFfTVNJX1RSSUdHRVJfVElNRVIJCTB4MGNiOAorI2RlZmluZQlNVjY0eDYwX1BDSTFfQVJCSVRFUl9DTlRMCQkweDFkODAKKyNkZWZpbmUJTVY2NHg2MF9QQ0kxX1hCQVJfQ05UTF9MTwkJMHgxZDg4CisjZGVmaW5lCU1WNjR4NjBfUENJMV9YQkFSX0NOVExfSEkJCTB4MWQ4YworI2RlZmluZQlNVjY0eDYwX1BDSTFfWEJBUl9DTlRMX1RPCQkweDFkODQKKyNkZWZpbmUJTVY2NHg2MF9QQ0kxX1JEX1JFU1BfWEJBUl9DTlRMX0xPCTB4MWQ5OAorI2RlZmluZQlNVjY0eDYwX1BDSTFfUkRfUkVTUF9YQkFSX0NOVExfSEkJMHgxZDljCisjZGVmaW5lCU1WNjR4NjBfUENJMV9TWU5DX0JBUlJJRVIJCTB4MWQ5MAorI2RlZmluZQlNVjY0eDYwX1BDSTFfUDJQX0NPTkZJRwkJCTB4MWQ5NAorCisjZGVmaW5lCUdUNjQyNjBfUENJMV9QMlBfU1dBUF9DTlRMCQkweDFkZDQKKworLyogRGlmZmVyZW50IG1vZGVzIHRoYXQgdGhlIHBjaSBob3NlcyBjYW4gYmUgaW4gKGJpdHMgNTo0IGluIFBDSSBNb2RlIHJlZykgKi8KKyNkZWZpbmUJTVY2NHg2MF9QQ0lNT0RFX0NPTlZFTlRJT05BTAkJMAorI2RlZmluZQlNVjY0eDYwX1BDSU1PREVfUENJWF82NgkJCSgxIDw8IDQpCisjZGVmaW5lCU1WNjR4NjBfUENJTU9ERV9QQ0lYXzEwMAkJKDIgPDwgNCkKKyNkZWZpbmUJTVY2NHg2MF9QQ0lNT0RFX1BDSVhfMTMzCQkoMyA8PCA0KQorI2RlZmluZQlNVjY0eDYwX1BDSU1PREVfTUFTSwkJCSgweDMgPDwgNCkKKworLyogUENJIEFjY2VzcyBDb250cm9sIFJlZ2lvbnMgUmVnaXN0ZXJzICovCisjZGVmaW5lCUdUNjQyNjBfUENJX0FDQ19DTlRMX1BSRUZFVENIRU4JCSgxPDwxMikKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfQUNDX0NOVExfRFJFQURFTgkJKDE8PDEzKQorI2RlZmluZQlHVDY0MjYwX1BDSV9BQ0NfQ05UTF9SRFBSRUZFVENICQkoMTw8MTYpCisjZGVmaW5lCUdUNjQyNjBfUENJX0FDQ19DTlRMX1JETElORVBSRUZFVENICSgxPDwxNykKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfQUNDX0NOVExfUkRNVUxQUkVGRVRDSAkoMTw8MTgpCisjZGVmaW5lCUdUNjQyNjBfUENJX0FDQ19DTlRMX01CVVJTVF8zMl9CVFlFUwkweDAwMDAwMDAwCisjZGVmaW5lCUdUNjQyNjBfUENJX0FDQ19DTlRMX01CVVJTVF82NF9CWVRFUwkweDAwMTAwMDAwCisjZGVmaW5lCUdUNjQyNjBfUENJX0FDQ19DTlRMX01CVVJTVF8xMjhfQllURVMJMHgwMDIwMDAwMAorI2RlZmluZQlHVDY0MjYwX1BDSV9BQ0NfQ05UTF9NQlVSU1RfTUFTSwkweDAwMzAwMDAwCisjZGVmaW5lCUdUNjQyNjBfUENJX0FDQ19DTlRMX1NXQVBfQllURQkJMHgwMDAwMDAwMAorI2RlZmluZQlHVDY0MjYwX1BDSV9BQ0NfQ05UTF9TV0FQX05PTkUJCTB4MDEwMDAwMDAKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfQUNDX0NOVExfU1dBUF9CWVRFX1dPUkQJMHgwMjAwMDAwMAorI2RlZmluZQlHVDY0MjYwX1BDSV9BQ0NfQ05UTF9TV0FQX1dPUkQJCTB4MDMwMDAwMDAKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfQUNDX0NOVExfU1dBUF9NQVNLCQkweDAzMDAwMDAwCisjZGVmaW5lCUdUNjQyNjBfUENJX0FDQ19DTlRMX0FDQ1BST1QJCSgxPDwyOCkKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfQUNDX0NOVExfV1JQUk9UCQkoMTw8MjkpCisKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfQUNDX0NOVExfQUxMX0JJVFMJKEdUNjQyNjBfUENJX0FDQ19DTlRMX1BSRUZFVENIRU4gfCAgICBcCisJCQkJCSBHVDY0MjYwX1BDSV9BQ0NfQ05UTF9EUkVBREVOIHwgICAgICAgXAorCQkJCQkgR1Q2NDI2MF9QQ0lfQUNDX0NOVExfUkRQUkVGRVRDSCB8ICAgIFwKKwkJCQkJIEdUNjQyNjBfUENJX0FDQ19DTlRMX1JETElORVBSRUZFVENIIHxcCisJCQkJCSBHVDY0MjYwX1BDSV9BQ0NfQ05UTF9SRE1VTFBSRUZFVENIIHwgXAorCQkJCQkgR1Q2NDI2MF9QQ0lfQUNDX0NOVExfTUJVUlNUX01BU0sgfCAgIFwKKwkJCQkJIEdUNjQyNjBfUENJX0FDQ19DTlRMX1NXQVBfTUFTSyB8ICAgICBcCisJCQkJCSBHVDY0MjYwX1BDSV9BQ0NfQ05UTF9BQ0NQUk9UfCAgICAgICAgXAorCQkJCQkgR1Q2NDI2MF9QQ0lfQUNDX0NOVExfV1JQUk9UKQorCisjZGVmaW5lCU1WNjQzNjBfUENJX0FDQ19DTlRMX0VOQUJMRQkJKDE8PDApCisjZGVmaW5lCU1WNjQzNjBfUENJX0FDQ19DTlRMX1JFUTY0CQkoMTw8MSkKKyNkZWZpbmUJTVY2NDM2MF9QQ0lfQUNDX0NOVExfU05PT1BfTk9ORQkJMHgwMDAwMDAwMAorI2RlZmluZQlNVjY0MzYwX1BDSV9BQ0NfQ05UTF9TTk9PUF9XVAkJMHgwMDAwMDAwNAorI2RlZmluZQlNVjY0MzYwX1BDSV9BQ0NfQ05UTF9TTk9PUF9XQgkJMHgwMDAwMDAwOAorI2RlZmluZQlNVjY0MzYwX1BDSV9BQ0NfQ05UTF9TTk9PUF9NQVNLCQkweDAwMDAwMDBjCisjZGVmaW5lCU1WNjQzNjBfUENJX0FDQ19DTlRMX0FDQ1BST1QJCSgxPDw0KQorI2RlZmluZQlNVjY0MzYwX1BDSV9BQ0NfQ05UTF9XUlBST1QJCSgxPDw1KQorI2RlZmluZQlNVjY0MzYwX1BDSV9BQ0NfQ05UTF9TV0FQX0JZVEUJCTB4MDAwMDAwMDAKKyNkZWZpbmUJTVY2NDM2MF9QQ0lfQUNDX0NOVExfU1dBUF9OT05FCQkweDAwMDAwMDQwCisjZGVmaW5lCU1WNjQzNjBfUENJX0FDQ19DTlRMX1NXQVBfQllURV9XT1JECTB4MDAwMDAwODAKKyNkZWZpbmUJTVY2NDM2MF9QQ0lfQUNDX0NOVExfU1dBUF9XT1JECQkweDAwMDAwMGMwCisjZGVmaW5lCU1WNjQzNjBfUENJX0FDQ19DTlRMX1NXQVBfTUFTSwkJMHgwMDAwMDBjMAorI2RlZmluZQlNVjY0MzYwX1BDSV9BQ0NfQ05UTF9NQlVSU1RfMzJfQllURVMJMHgwMDAwMDAwMAorI2RlZmluZQlNVjY0MzYwX1BDSV9BQ0NfQ05UTF9NQlVSU1RfNjRfQllURVMJMHgwMDAwMDEwMAorI2RlZmluZQlNVjY0MzYwX1BDSV9BQ0NfQ05UTF9NQlVSU1RfMTI4X0JZVEVTCTB4MDAwMDAyMDAKKyNkZWZpbmUJTVY2NDM2MF9QQ0lfQUNDX0NOVExfTUJVUlNUX01BU0sJMHgwMDAwMDMwMAorI2RlZmluZQlNVjY0MzYwX1BDSV9BQ0NfQ05UTF9SRFNJWkVfMzJfQllURVMJMHgwMDAwMDAwMAorI2RlZmluZQlNVjY0MzYwX1BDSV9BQ0NfQ05UTF9SRFNJWkVfNjRfQllURVMJMHgwMDAwMDQwMAorI2RlZmluZQlNVjY0MzYwX1BDSV9BQ0NfQ05UTF9SRFNJWkVfMTI4X0JZVEVTCTB4MDAwMDA4MDAKKyNkZWZpbmUJTVY2NDM2MF9QQ0lfQUNDX0NOVExfUkRTSVpFXzI1Nl9CWVRFUwkweDAwMDAwYzAwCisjZGVmaW5lCU1WNjQzNjBfUENJX0FDQ19DTlRMX1JEU0laRV9NQVNLCTB4MDAwMDBjMDAKKworI2RlZmluZQlNVjY0MzYwX1BDSV9BQ0NfQ05UTF9BTExfQklUUwkoTVY2NDM2MF9QQ0lfQUNDX0NOVExfRU5BQkxFIHwJICAgIFwKKwkJCQkJIE1WNjQzNjBfUENJX0FDQ19DTlRMX1JFUTY0IHwJICAgIFwKKwkJCQkJIE1WNjQzNjBfUENJX0FDQ19DTlRMX1NOT09QX01BU0sgfCAgXAorCQkJCQkgTVY2NDM2MF9QQ0lfQUNDX0NOVExfQUNDUFJPVCB8CSAgICBcCisJCQkJCSBNVjY0MzYwX1BDSV9BQ0NfQ05UTF9XUlBST1QgfAkgICAgXAorCQkJCQkgTVY2NDM2MF9QQ0lfQUNDX0NOVExfU1dBUF9NQVNLIHwgICBcCisJCQkJCSBNVjY0MzYwX1BDSV9BQ0NfQ05UTF9NQlVSU1RfTUFTSyB8IFwKKwkJCQkJIE1WNjQzNjBfUENJX0FDQ19DTlRMX1JEU0laRV9NQVNLKQorCisjZGVmaW5lCU1WNjR4NjBfUENJMF9BQ0NfQ05UTF8wX0JBU0VfTE8JCTB4MWUwMAorI2RlZmluZQlNVjY0eDYwX1BDSTBfQUNDX0NOVExfMF9CQVNFX0hJCQkweDFlMDQKKyNkZWZpbmUJTVY2NHg2MF9QQ0kwX0FDQ19DTlRMXzBfU0laRQkJMHgxZTA4CisjZGVmaW5lCU1WNjR4NjBfUENJMF9BQ0NfQ05UTF8xX0JBU0VfTE8JCTB4MWUxMAorI2RlZmluZQlNVjY0eDYwX1BDSTBfQUNDX0NOVExfMV9CQVNFX0hJCQkweDFlMTQKKyNkZWZpbmUJTVY2NHg2MF9QQ0kwX0FDQ19DTlRMXzFfU0laRQkJMHgxZTE4CisjZGVmaW5lCU1WNjR4NjBfUENJMF9BQ0NfQ05UTF8yX0JBU0VfTE8JCTB4MWUyMAorI2RlZmluZQlNVjY0eDYwX1BDSTBfQUNDX0NOVExfMl9CQVNFX0hJCQkweDFlMjQKKyNkZWZpbmUJTVY2NHg2MF9QQ0kwX0FDQ19DTlRMXzJfU0laRQkJMHgxZTI4CisjZGVmaW5lCU1WNjR4NjBfUENJMF9BQ0NfQ05UTF8zX0JBU0VfTE8JCTB4MWUzMAorI2RlZmluZQlNVjY0eDYwX1BDSTBfQUNDX0NOVExfM19CQVNFX0hJCQkweDFlMzQKKyNkZWZpbmUJTVY2NHg2MF9QQ0kwX0FDQ19DTlRMXzNfU0laRQkJMHgxZTM4CisjZGVmaW5lCU1WNjR4NjBfUENJMF9BQ0NfQ05UTF80X0JBU0VfTE8JCTB4MWU0MAorI2RlZmluZQlNVjY0eDYwX1BDSTBfQUNDX0NOVExfNF9CQVNFX0hJCQkweDFlNDQKKyNkZWZpbmUJTVY2NHg2MF9QQ0kwX0FDQ19DTlRMXzRfU0laRQkJMHgxZTQ4CisjZGVmaW5lCU1WNjR4NjBfUENJMF9BQ0NfQ05UTF81X0JBU0VfTE8JCTB4MWU1MAorI2RlZmluZQlNVjY0eDYwX1BDSTBfQUNDX0NOVExfNV9CQVNFX0hJCQkweDFlNTQKKyNkZWZpbmUJTVY2NHg2MF9QQ0kwX0FDQ19DTlRMXzVfU0laRQkJMHgxZTU4CisKKyNkZWZpbmUJR1Q2NDI2MF9QQ0kwX0FDQ19DTlRMXzZfQkFTRV9MTwkJMHgxZTYwCisjZGVmaW5lCUdUNjQyNjBfUENJMF9BQ0NfQ05UTF82X0JBU0VfSEkJCTB4MWU2NAorI2RlZmluZQlHVDY0MjYwX1BDSTBfQUNDX0NOVExfNl9TSVpFCQkweDFlNjgKKyNkZWZpbmUJR1Q2NDI2MF9QQ0kwX0FDQ19DTlRMXzdfQkFTRV9MTwkJMHgxZTcwCisjZGVmaW5lCUdUNjQyNjBfUENJMF9BQ0NfQ05UTF83X0JBU0VfSEkJCTB4MWU3NAorI2RlZmluZQlHVDY0MjYwX1BDSTBfQUNDX0NOVExfN19TSVpFCQkweDFlNzgKKworI2RlZmluZQlNVjY0eDYwX1BDSTFfQUNDX0NOVExfMF9CQVNFX0xPCQkweDFlODAKKyNkZWZpbmUJTVY2NHg2MF9QQ0kxX0FDQ19DTlRMXzBfQkFTRV9ISQkJMHgxZTg0CisjZGVmaW5lCU1WNjR4NjBfUENJMV9BQ0NfQ05UTF8wX1NJWkUJCTB4MWU4OAorI2RlZmluZQlNVjY0eDYwX1BDSTFfQUNDX0NOVExfMV9CQVNFX0xPCQkweDFlOTAKKyNkZWZpbmUJTVY2NHg2MF9QQ0kxX0FDQ19DTlRMXzFfQkFTRV9ISQkJMHgxZTk0CisjZGVmaW5lCU1WNjR4NjBfUENJMV9BQ0NfQ05UTF8xX1NJWkUJCTB4MWU5OAorI2RlZmluZQlNVjY0eDYwX1BDSTFfQUNDX0NOVExfMl9CQVNFX0xPCQkweDFlYTAKKyNkZWZpbmUJTVY2NHg2MF9QQ0kxX0FDQ19DTlRMXzJfQkFTRV9ISQkJMHgxZWE0CisjZGVmaW5lCU1WNjR4NjBfUENJMV9BQ0NfQ05UTF8yX1NJWkUJCTB4MWVhOAorI2RlZmluZQlNVjY0eDYwX1BDSTFfQUNDX0NOVExfM19CQVNFX0xPCQkweDFlYjAKKyNkZWZpbmUJTVY2NHg2MF9QQ0kxX0FDQ19DTlRMXzNfQkFTRV9ISQkJMHgxZWI0CisjZGVmaW5lCU1WNjR4NjBfUENJMV9BQ0NfQ05UTF8zX1NJWkUJCTB4MWViOAorI2RlZmluZQlNVjY0eDYwX1BDSTFfQUNDX0NOVExfNF9CQVNFX0xPCQkweDFlYzAKKyNkZWZpbmUJTVY2NHg2MF9QQ0kxX0FDQ19DTlRMXzRfQkFTRV9ISQkJMHgxZWM0CisjZGVmaW5lCU1WNjR4NjBfUENJMV9BQ0NfQ05UTF80X1NJWkUJCTB4MWVjOAorI2RlZmluZQlNVjY0eDYwX1BDSTFfQUNDX0NOVExfNV9CQVNFX0xPCQkweDFlZDAKKyNkZWZpbmUJTVY2NHg2MF9QQ0kxX0FDQ19DTlRMXzVfQkFTRV9ISQkJMHgxZWQ0CisjZGVmaW5lCU1WNjR4NjBfUENJMV9BQ0NfQ05UTF81X1NJWkUJCTB4MWVkOAorCisjZGVmaW5lCUdUNjQyNjBfUENJMV9BQ0NfQ05UTF82X0JBU0VfTE8JCTB4MWVlMAorI2RlZmluZQlHVDY0MjYwX1BDSTFfQUNDX0NOVExfNl9CQVNFX0hJCQkweDFlZTQKKyNkZWZpbmUJR1Q2NDI2MF9QQ0kxX0FDQ19DTlRMXzZfU0laRQkJMHgxZWU4CisjZGVmaW5lCUdUNjQyNjBfUENJMV9BQ0NfQ05UTF83X0JBU0VfTE8JCTB4MWVmMAorI2RlZmluZQlHVDY0MjYwX1BDSTFfQUNDX0NOVExfN19CQVNFX0hJCQkweDFlZjQKKyNkZWZpbmUJR1Q2NDI2MF9QQ0kxX0FDQ19DTlRMXzdfU0laRQkJMHgxZWY4CisKKy8qIFBDSSBTbm9vcCBDb250cm9sIFJlZ2lzdGVycyAoNjQyNjAgb25seSkgKi8KKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfU05PT1BfTk9ORQkJCTB4MDAwMDAwMDAKKyNkZWZpbmUJR1Q2NDI2MF9QQ0lfU05PT1BfV1QJCQkweDAwMDAxMDAwCisjZGVmaW5lCUdUNjQyNjBfUENJX1NOT09QX1dCCQkJMHgwMDAwMjAwMAorCisjZGVmaW5lCUdUNjQyNjBfUENJMF9TTk9PUF8wX0JBU0VfTE8JCTB4MWYwMAorI2RlZmluZQlHVDY0MjYwX1BDSTBfU05PT1BfMF9CQVNFX0hJCQkweDFmMDQKKyNkZWZpbmUJR1Q2NDI2MF9QQ0kwX1NOT09QXzBfU0laRQkJMHgxZjA4CisjZGVmaW5lCUdUNjQyNjBfUENJMF9TTk9PUF8xX0JBU0VfTE8JCTB4MWYxMAorI2RlZmluZQlHVDY0MjYwX1BDSTBfU05PT1BfMV9CQVNFX0hJCQkweDFmMTQKKyNkZWZpbmUJR1Q2NDI2MF9QQ0kwX1NOT09QXzFfU0laRQkJMHgxZjE4CisjZGVmaW5lCUdUNjQyNjBfUENJMF9TTk9PUF8yX0JBU0VfTE8JCTB4MWYyMAorI2RlZmluZQlHVDY0MjYwX1BDSTBfU05PT1BfMl9CQVNFX0hJCQkweDFmMjQKKyNkZWZpbmUJR1Q2NDI2MF9QQ0kwX1NOT09QXzJfU0laRQkJMHgxZjI4CisjZGVmaW5lCUdUNjQyNjBfUENJMF9TTk9PUF8zX0JBU0VfTE8JCTB4MWYzMAorI2RlZmluZQlHVDY0MjYwX1BDSTBfU05PT1BfM19CQVNFX0hJCQkweDFmMzQKKyNkZWZpbmUJR1Q2NDI2MF9QQ0kwX1NOT09QXzNfU0laRQkJMHgxZjM4CisKKyNkZWZpbmUJR1Q2NDI2MF9QQ0kxX1NOT09QXzBfQkFTRV9MTwkJMHgxZjgwCisjZGVmaW5lCUdUNjQyNjBfUENJMV9TTk9PUF8wX0JBU0VfSEkJCTB4MWY4NAorI2RlZmluZQlHVDY0MjYwX1BDSTFfU05PT1BfMF9TSVpFCQkweDFmODgKKyNkZWZpbmUJR1Q2NDI2MF9QQ0kxX1NOT09QXzFfQkFTRV9MTwkJMHgxZjkwCisjZGVmaW5lCUdUNjQyNjBfUENJMV9TTk9PUF8xX0JBU0VfSEkJCTB4MWY5NAorI2RlZmluZQlHVDY0MjYwX1BDSTFfU05PT1BfMV9TSVpFCQkweDFmOTgKKyNkZWZpbmUJR1Q2NDI2MF9QQ0kxX1NOT09QXzJfQkFTRV9MTwkJMHgxZmEwCisjZGVmaW5lCUdUNjQyNjBfUENJMV9TTk9PUF8yX0JBU0VfSEkJCTB4MWZhNAorI2RlZmluZQlHVDY0MjYwX1BDSTFfU05PT1BfMl9TSVpFCQkweDFmYTgKKyNkZWZpbmUJR1Q2NDI2MF9QQ0kxX1NOT09QXzNfQkFTRV9MTwkJMHgxZmIwCisjZGVmaW5lCUdUNjQyNjBfUENJMV9TTk9PUF8zX0JBU0VfSEkJCTB4MWZiNAorI2RlZmluZQlHVDY0MjYwX1BDSTFfU05PT1BfM19TSVpFCQkweDFmYjgKKworLyogUENJIEVycm9yIFJlcG9ydCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgTVY2NHg2MF9QQ0kwX0VSUl9TRVJSX01BU0sJCTB4MGMyOAorI2RlZmluZSBNVjY0eDYwX1BDSTBfRVJSX0FERFJfTE8JCTB4MWQ0MAorI2RlZmluZSBNVjY0eDYwX1BDSTBfRVJSX0FERFJfSEkJCTB4MWQ0NAorI2RlZmluZSBNVjY0eDYwX1BDSTBfRVJSX0RBVEFfTE8JCTB4MWQ0OAorI2RlZmluZSBNVjY0eDYwX1BDSTBfRVJSX0RBVEFfSEkJCTB4MWQ0YworI2RlZmluZSBNVjY0eDYwX1BDSTBfRVJSX0NNRAkJCTB4MWQ1MAorI2RlZmluZSBNVjY0eDYwX1BDSTBfRVJSX0NBVVNFCQkJMHgxZDU4CisjZGVmaW5lIE1WNjR4NjBfUENJMF9FUlJfTUFTSwkJCTB4MWQ1YworCisjZGVmaW5lIE1WNjR4NjBfUENJMV9FUlJfU0VSUl9NQVNLCQkweDBjYTgKKyNkZWZpbmUgTVY2NHg2MF9QQ0kxX0VSUl9BRERSX0xPCQkweDFkYzAKKyNkZWZpbmUgTVY2NHg2MF9QQ0kxX0VSUl9BRERSX0hJCQkweDFkYzQKKyNkZWZpbmUgTVY2NHg2MF9QQ0kxX0VSUl9EQVRBX0xPCQkweDFkYzgKKyNkZWZpbmUgTVY2NHg2MF9QQ0kxX0VSUl9EQVRBX0hJCQkweDFkY2MKKyNkZWZpbmUgTVY2NHg2MF9QQ0kxX0VSUl9DTUQJCQkweDFkZDAKKyNkZWZpbmUgTVY2NHg2MF9QQ0kxX0VSUl9DQVVTRQkJCTB4MWRkOAorI2RlZmluZSBNVjY0eDYwX1BDSTFfRVJSX01BU0sJCQkweDFkZGMKKworLyogUENJIFNsYXZlIEFkZHJlc3MgRGVjb2RpbmcgUmVnaXN0ZXJzICovCisjZGVmaW5lCU1WNjR4NjBfUENJMF9NRU1fMF9TSVpFCQkJMHgwYzA4CisjZGVmaW5lCU1WNjR4NjBfUENJMF9NRU1fMV9TSVpFCQkJMHgwZDA4CisjZGVmaW5lCU1WNjR4NjBfUENJMF9NRU1fMl9TSVpFCQkJMHgwYzBjCisjZGVmaW5lCU1WNjR4NjBfUENJMF9NRU1fM19TSVpFCQkJMHgwZDBjCisjZGVmaW5lCU1WNjR4NjBfUENJMV9NRU1fMF9TSVpFCQkJMHgwYzg4CisjZGVmaW5lCU1WNjR4NjBfUENJMV9NRU1fMV9TSVpFCQkJMHgwZDg4CisjZGVmaW5lCU1WNjR4NjBfUENJMV9NRU1fMl9TSVpFCQkJMHgwYzhjCisjZGVmaW5lCU1WNjR4NjBfUENJMV9NRU1fM19TSVpFCQkJMHgwZDhjCisKKyNkZWZpbmUJTVY2NHg2MF9QQ0kwX0JBUl9FTkFCTEUJCQkweDBjM2MKKyNkZWZpbmUJTVY2NHg2MF9QQ0kxX0JBUl9FTkFCTEUJCQkweDBjYmMKKworI2RlZmluZQlNVjY0eDYwX1BDSTBfUENJX0RFQ09ERV9DTlRMCQkweDBkM2MKKyNkZWZpbmUJTVY2NHg2MF9QQ0kxX1BDSV9ERUNPREVfQ05UTAkJMHgwZGJjCisKKyNkZWZpbmUJTVY2NHg2MF9QQ0kwX1NMQVZFX01FTV8wX1JFTUFQCQkweDBjNDgKKyNkZWZpbmUJTVY2NHg2MF9QQ0kwX1NMQVZFX01FTV8xX1JFTUFQCQkweDBkNDgKKyNkZWZpbmUJTVY2NHg2MF9QQ0kwX1NMQVZFX01FTV8yX1JFTUFQCQkweDBjNGMKKyNkZWZpbmUJTVY2NHg2MF9QQ0kwX1NMQVZFX01FTV8zX1JFTUFQCQkweDBkNGMKKyNkZWZpbmUJTVY2NHg2MF9QQ0kwX1NMQVZFX0RFVl8wX1JFTUFQCQkweDBjNTAKKyNkZWZpbmUJTVY2NHg2MF9QQ0kwX1NMQVZFX0RFVl8xX1JFTUFQCQkweDBkNTAKKyNkZWZpbmUJTVY2NHg2MF9QQ0kwX1NMQVZFX0RFVl8yX1JFTUFQCQkweDBkNTgKKyNkZWZpbmUJTVY2NHg2MF9QQ0kwX1NMQVZFX0RFVl8zX1JFTUFQCQkweDBjNTQKKyNkZWZpbmUJTVY2NHg2MF9QQ0kwX1NMQVZFX0JPT1RfUkVNQVAJCTB4MGQ1NAorI2RlZmluZQlNVjY0eDYwX1BDSTBfU0xBVkVfUDJQX01FTV8wX1JFTUFQX0xPCTB4MGQ1YworI2RlZmluZQlNVjY0eDYwX1BDSTBfU0xBVkVfUDJQX01FTV8wX1JFTUFQX0hJCTB4MGQ2MAorI2RlZmluZQlNVjY0eDYwX1BDSTBfU0xBVkVfUDJQX01FTV8xX1JFTUFQX0xPCTB4MGQ2NAorI2RlZmluZQlNVjY0eDYwX1BDSTBfU0xBVkVfUDJQX01FTV8xX1JFTUFQX0hJCTB4MGQ2OAorI2RlZmluZQlNVjY0eDYwX1BDSTBfU0xBVkVfUDJQX0lPX1JFTUFQCQkweDBkNmMKKyNkZWZpbmUJTVY2NHg2MF9QQ0kwX1NMQVZFX0NQVV9SRU1BUAkJMHgwZDcwCisKKyNkZWZpbmUJTVY2NHg2MF9QQ0kxX1NMQVZFX01FTV8wX1JFTUFQCQkweDBjYzgKKyNkZWZpbmUJTVY2NHg2MF9QQ0kxX1NMQVZFX01FTV8xX1JFTUFQCQkweDBkYzgKKyNkZWZpbmUJTVY2NHg2MF9QQ0kxX1NMQVZFX01FTV8yX1JFTUFQCQkweDBjY2MKKyNkZWZpbmUJTVY2NHg2MF9QQ0kxX1NMQVZFX01FTV8zX1JFTUFQCQkweDBkY2MKKyNkZWZpbmUJTVY2NHg2MF9QQ0kxX1NMQVZFX0RFVl8wX1JFTUFQCQkweDBjZDAKKyNkZWZpbmUJTVY2NHg2MF9QQ0kxX1NMQVZFX0RFVl8xX1JFTUFQCQkweDBkZDAKKyNkZWZpbmUJTVY2NHg2MF9QQ0kxX1NMQVZFX0RFVl8yX1JFTUFQCQkweDBkZDgKKyNkZWZpbmUJTVY2NHg2MF9QQ0kxX1NMQVZFX0RFVl8zX1JFTUFQCQkweDBjZDQKKyNkZWZpbmUJTVY2NHg2MF9QQ0kxX1NMQVZFX0JPT1RfUkVNQVAJCTB4MGRkNAorI2RlZmluZQlNVjY0eDYwX1BDSTFfU0xBVkVfUDJQX01FTV8wX1JFTUFQX0xPCTB4MGRkYworI2RlZmluZQlNVjY0eDYwX1BDSTFfU0xBVkVfUDJQX01FTV8wX1JFTUFQX0hJCTB4MGRlMAorI2RlZmluZQlNVjY0eDYwX1BDSTFfU0xBVkVfUDJQX01FTV8xX1JFTUFQX0xPCTB4MGRlNAorI2RlZmluZQlNVjY0eDYwX1BDSTFfU0xBVkVfUDJQX01FTV8xX1JFTUFQX0hJCTB4MGRlOAorI2RlZmluZQlNVjY0eDYwX1BDSTFfU0xBVkVfUDJQX0lPX1JFTUFQCQkweDBkZWMKKyNkZWZpbmUJTVY2NHg2MF9QQ0kxX1NMQVZFX0NQVV9SRU1BUAkJMHgwZGYwCisKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKglFTkVUIENvbnRyb2xsZXIgSW50ZXJmYWNlIFJlZ2lzdGVycworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKy8qIEVORVQgQ29udHJvbGxlciBXaW5kb3cgUmVnaXN0ZXJzICg2IHdpbmRvd3MpICovCisjZGVmaW5lCU1WNjQzNjBfRU5FVDJNRU1fV0lORE9XUwkJNgorCisjZGVmaW5lCU1WNjQzNjBfRU5FVDJNRU1fMF9CQVNFCQkJMHgyMjAwCisjZGVmaW5lCU1WNjQzNjBfRU5FVDJNRU1fMF9TSVpFCQkJMHgyMjA0CisjZGVmaW5lCU1WNjQzNjBfRU5FVDJNRU1fMV9CQVNFCQkJMHgyMjA4CisjZGVmaW5lCU1WNjQzNjBfRU5FVDJNRU1fMV9TSVpFCQkJMHgyMjBjCisjZGVmaW5lCU1WNjQzNjBfRU5FVDJNRU1fMl9CQVNFCQkJMHgyMjEwCisjZGVmaW5lCU1WNjQzNjBfRU5FVDJNRU1fMl9TSVpFCQkJMHgyMjE0CisjZGVmaW5lCU1WNjQzNjBfRU5FVDJNRU1fM19CQVNFCQkJMHgyMjE4CisjZGVmaW5lCU1WNjQzNjBfRU5FVDJNRU1fM19TSVpFCQkJMHgyMjFjCisjZGVmaW5lCU1WNjQzNjBfRU5FVDJNRU1fNF9CQVNFCQkJMHgyMjIwCisjZGVmaW5lCU1WNjQzNjBfRU5FVDJNRU1fNF9TSVpFCQkJMHgyMjI0CisjZGVmaW5lCU1WNjQzNjBfRU5FVDJNRU1fNV9CQVNFCQkJMHgyMjI4CisjZGVmaW5lCU1WNjQzNjBfRU5FVDJNRU1fNV9TSVpFCQkJMHgyMjJjCisKKyNkZWZpbmUJTVY2NDM2MF9FTkVUMk1FTV9TTk9PUF9OT05FCQkweDAwMDAwMDAwCisjZGVmaW5lCU1WNjQzNjBfRU5FVDJNRU1fU05PT1BfV1QJCTB4MDAwMDEwMDAKKyNkZWZpbmUJTVY2NDM2MF9FTkVUMk1FTV9TTk9PUF9XQgkJMHgwMDAwMjAwMAorCisjZGVmaW5lCU1WNjQzNjBfRU5FVDJNRU1fQkFSX0VOQUJMRQkJMHgyMjkwCisKKyNkZWZpbmUJTVY2NDM2MF9FTkVUMk1FTV9BQ0NfUFJPVF8wCQkweDIyOTQKKyNkZWZpbmUJTVY2NDM2MF9FTkVUMk1FTV9BQ0NfUFJPVF8xCQkweDIyOTgKKyNkZWZpbmUJTVY2NDM2MF9FTkVUMk1FTV9BQ0NfUFJPVF8yCQkweDIyOWMKKworLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqCU1QU0MgQ29udHJvbGxlciBJbnRlcmZhY2UgUmVnaXN0ZXJzCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworLyogTVBTQyBDb250cm9sbGVyIFdpbmRvdyBSZWdpc3RlcnMgKDQgd2luZG93cykgKi8KKyNkZWZpbmUJTVY2NDM2MF9NUFNDMk1FTV9XSU5ET1dTCQk0CisKKyNkZWZpbmUJTVY2NDM2MF9NUFNDMk1FTV8wX0JBU0UJCQkweGYyMDAKKyNkZWZpbmUJTVY2NDM2MF9NUFNDMk1FTV8wX1NJWkUJCQkweGYyMDQKKyNkZWZpbmUJTVY2NDM2MF9NUFNDMk1FTV8xX0JBU0UJCQkweGYyMDgKKyNkZWZpbmUJTVY2NDM2MF9NUFNDMk1FTV8xX1NJWkUJCQkweGYyMGMKKyNkZWZpbmUJTVY2NDM2MF9NUFNDMk1FTV8yX0JBU0UJCQkweGYyMTAKKyNkZWZpbmUJTVY2NDM2MF9NUFNDMk1FTV8yX1NJWkUJCQkweGYyMTQKKyNkZWZpbmUJTVY2NDM2MF9NUFNDMk1FTV8zX0JBU0UJCQkweGYyMTgKKyNkZWZpbmUJTVY2NDM2MF9NUFNDMk1FTV8zX1NJWkUJCQkweGYyMWMKKworI2RlZmluZSBNVjY0MzYwX01QU0NfMF9SRU1BUAkJCTB4ZjI0MAorI2RlZmluZSBNVjY0MzYwX01QU0NfMV9SRU1BUAkJCTB4ZjI0NAorCisjZGVmaW5lCU1WNjQzNjBfTVBTQzJNRU1fU05PT1BfTk9ORQkJMHgwMDAwMDAwMAorI2RlZmluZQlNVjY0MzYwX01QU0MyTUVNX1NOT09QX1dUCQkweDAwMDAxMDAwCisjZGVmaW5lCU1WNjQzNjBfTVBTQzJNRU1fU05PT1BfV0IJCTB4MDAwMDIwMDAKKworI2RlZmluZQlNVjY0MzYwX01QU0MyTUVNX0JBUl9FTkFCTEUJCTB4ZjI1MAorCisjZGVmaW5lCU1WNjQzNjBfTVBTQzJNRU1fQUNDX1BST1RfMAkJMHhmMjU0CisjZGVmaW5lCU1WNjQzNjBfTVBTQzJNRU1fQUNDX1BST1RfMQkJMHhmMjU4CisKKyNkZWZpbmUJTVY2NDM2MF9NUFNDMlJFR1NfQkFTRQkJCTB4ZjI1YworCisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICoJVGltZXIvQ291bnRlciBJbnRlcmZhY2UgUmVnaXN0ZXJzCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworI2RlZmluZQlNVjY0eDYwX1RJTVJfQ05UUl8wCQkJMHgwODUwCisjZGVmaW5lCU1WNjR4NjBfVElNUl9DTlRSXzEJCQkweDA4NTQKKyNkZWZpbmUJTVY2NHg2MF9USU1SX0NOVFJfMgkJCTB4MDg1OAorI2RlZmluZQlNVjY0eDYwX1RJTVJfQ05UUl8zCQkJMHgwODVjCisjZGVmaW5lCU1WNjR4NjBfVElNUl9DTlRSXzBfM19DTlRMCQkweDA4NjQKKyNkZWZpbmUJTVY2NHg2MF9USU1SX0NOVFJfMF8zX0lOVFJfQ0FVU0UJMHgwODY4CisjZGVmaW5lCU1WNjR4NjBfVElNUl9DTlRSXzBfM19JTlRSX01BU0sJCTB4MDg2YworCisjZGVmaW5lCUdUNjQyNjBfVElNUl9DTlRSXzQJCQkweDA5NTAKKyNkZWZpbmUJR1Q2NDI2MF9USU1SX0NOVFJfNQkJCTB4MDk1NAorI2RlZmluZQlHVDY0MjYwX1RJTVJfQ05UUl82CQkJMHgwOTU4CisjZGVmaW5lCUdUNjQyNjBfVElNUl9DTlRSXzcJCQkweDA5NWMKKyNkZWZpbmUJR1Q2NDI2MF9USU1SX0NOVFJfNF83X0NOVEwJCTB4MDk2NAorI2RlZmluZQlHVDY0MjYwX1RJTVJfQ05UUl80XzdfSU5UUl9DQVVTRQkweDA5NjgKKyNkZWZpbmUJR1Q2NDI2MF9USU1SX0NOVFJfNF83X0lOVFJfTUFTSwkJMHgwOTZjCisKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKglDb21tdW5pY2F0aW9ucyBDb250cm9sbGVyCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworI2RlZmluZQlHVDY0MjYwX1NFUl9JTklUX1BDSV9BRERSX0hJCQkweGYzMjAKKyNkZWZpbmUJR1Q2NDI2MF9TRVJfSU5JVF9MQVNUX0RBVEEJCTB4ZjMyNAorI2RlZmluZQlHVDY0MjYwX1NFUl9JTklUX0NPTlRST0wJCTB4ZjMyOAorI2RlZmluZQlHVDY0MjYwX1NFUl9JTklUX1NUQVRVUwkJCTB4ZjMyYworCisjZGVmaW5lCU1WNjR4NjBfQ09NTV9BUkJJVEVSX0NOVEwJCTB4ZjMwMAorI2RlZmluZQlNVjY0eDYwX0NPTU1fQ09ORklHCQkJMHhiNDBjCisjZGVmaW5lCU1WNjR4NjBfQ09NTV9YQkFSX1RPCQkJMHhmMzA0CisjZGVmaW5lCU1WNjR4NjBfQ09NTV9JTlRSX0NBVVNFCQkJMHhmMzEwCisjZGVmaW5lCU1WNjR4NjBfQ09NTV9JTlRSX01BU0sJCQkweGYzMTQKKyNkZWZpbmUJTVY2NHg2MF9DT01NX0VSUl9BRERSCQkJMHhmMzE4CisKKyNkZWZpbmUgTVY2NDM2MF9DT01NX0FSQklURVJfQ05UTAkJMHhmMzAwCisKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKglJRE1BIENvbnRyb2xsZXIgSW50ZXJmYWNlIFJlZ2lzdGVycworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKy8qIElETUEgQ29udHJvbGxlciBXaW5kb3cgUmVnaXN0ZXJzICg4IHdpbmRvd3MpICovCisjZGVmaW5lCU1WNjQzNjBfSURNQTJNRU1fV0lORE9XUwkJOAorCisjZGVmaW5lCU1WNjQzNjBfSURNQTJNRU1fMF9CQVNFCQkJMHgwYTAwCisjZGVmaW5lCU1WNjQzNjBfSURNQTJNRU1fMF9TSVpFCQkJMHgwYTA0CisjZGVmaW5lCU1WNjQzNjBfSURNQTJNRU1fMV9CQVNFCQkJMHgwYTA4CisjZGVmaW5lCU1WNjQzNjBfSURNQTJNRU1fMV9TSVpFCQkJMHgwYTBjCisjZGVmaW5lCU1WNjQzNjBfSURNQTJNRU1fMl9CQVNFCQkJMHgwYTEwCisjZGVmaW5lCU1WNjQzNjBfSURNQTJNRU1fMl9TSVpFCQkJMHgwYTE0CisjZGVmaW5lCU1WNjQzNjBfSURNQTJNRU1fM19CQVNFCQkJMHgwYTE4CisjZGVmaW5lCU1WNjQzNjBfSURNQTJNRU1fM19TSVpFCQkJMHgwYTFjCisjZGVmaW5lCU1WNjQzNjBfSURNQTJNRU1fNF9CQVNFCQkJMHgwYTIwCisjZGVmaW5lCU1WNjQzNjBfSURNQTJNRU1fNF9TSVpFCQkJMHgwYTI0CisjZGVmaW5lCU1WNjQzNjBfSURNQTJNRU1fNV9CQVNFCQkJMHgwYTI4CisjZGVmaW5lCU1WNjQzNjBfSURNQTJNRU1fNV9TSVpFCQkJMHgwYTJjCisjZGVmaW5lCU1WNjQzNjBfSURNQTJNRU1fNl9CQVNFCQkJMHgwYTMwCisjZGVmaW5lCU1WNjQzNjBfSURNQTJNRU1fNl9TSVpFCQkJMHgwYTM0CisjZGVmaW5lCU1WNjQzNjBfSURNQTJNRU1fN19CQVNFCQkJMHgwYTM4CisjZGVmaW5lCU1WNjQzNjBfSURNQTJNRU1fN19TSVpFCQkJMHgwYTNjCisKKyNkZWZpbmUJTVY2NDM2MF9JRE1BMk1FTV9TTk9PUF9OT05FCQkweDAwMDAwMDAwCisjZGVmaW5lCU1WNjQzNjBfSURNQTJNRU1fU05PT1BfV1QJCTB4MDAwMDEwMDAKKyNkZWZpbmUJTVY2NDM2MF9JRE1BMk1FTV9TTk9PUF9XQgkJMHgwMDAwMjAwMAorCisjZGVmaW5lCU1WNjQzNjBfSURNQTJNRU1fQkFSX0VOQUJMRQkJMHgwYTgwCisKKyNkZWZpbmUJTVY2NDM2MF9JRE1BMk1FTV9BQ0NfUFJPVF8wCQkweDBhNzAKKyNkZWZpbmUJTVY2NDM2MF9JRE1BMk1FTV9BQ0NfUFJPVF8xCQkweDBhNzQKKyNkZWZpbmUJTVY2NDM2MF9JRE1BMk1FTV9BQ0NfUFJPVF8yCQkweDBhNzgKKyNkZWZpbmUJTVY2NDM2MF9JRE1BMk1FTV9BQ0NfUFJPVF8zCQkweDBhN2MKKworI2RlZmluZQlNVjY0eDYwX0lETUFfMF9PRkZTRVQJCQkweDA4MDAKKyNkZWZpbmUJTVY2NHg2MF9JRE1BXzFfT0ZGU0VUCQkJMHgwODA0CisjZGVmaW5lCU1WNjR4NjBfSURNQV8yX09GRlNFVAkJCTB4MDgwOAorI2RlZmluZQlNVjY0eDYwX0lETUFfM19PRkZTRVQJCQkweDA4MGMKKyNkZWZpbmUJTVY2NHg2MF9JRE1BXzRfT0ZGU0VUCQkJMHgwOTAwCisjZGVmaW5lCU1WNjR4NjBfSURNQV81X09GRlNFVAkJCTB4MDkwNAorI2RlZmluZQlNVjY0eDYwX0lETUFfNl9PRkZTRVQJCQkweDA5MDgKKyNkZWZpbmUJTVY2NHg2MF9JRE1BXzdfT0ZGU0VUCQkJMHgwOTBjCisKKyNkZWZpbmUJTVY2NHg2MF9JRE1BX0JZVEVfQ09VTlQJCQkoMHgwODAwIC0gTVY2NHg2MF9JRE1BXzBfT0ZGU0VUKQorI2RlZmluZQlNVjY0eDYwX0lETUFfU1JDX0FERFIJCQkoMHgwODEwIC0gTVY2NHg2MF9JRE1BXzBfT0ZGU0VUKQorI2RlZmluZQlNVjY0eDYwX0lETUFfRFNUX0FERFIJCQkoMHgwODIwIC0gTVY2NHg2MF9JRE1BXzBfT0ZGU0VUKQorI2RlZmluZQlNVjY0eDYwX0lETUFfTkVYVF9ERVNDCQkJKDB4MDgzMCAtIE1WNjR4NjBfSURNQV8wX09GRlNFVCkKKyNkZWZpbmUJTVY2NHg2MF9JRE1BX0NVUl9ERVNDCQkJKDB4MDg3MCAtIE1WNjR4NjBfSURNQV8wX09GRlNFVCkKKyNkZWZpbmUJTVY2NHg2MF9JRE1BX1NSQ19QQ0lfQUREUl9ISQkJKDB4MDg5MCAtIE1WNjR4NjBfSURNQV8wX09GRlNFVCkKKyNkZWZpbmUJTVY2NHg2MF9JRE1BX0RTVF9QQ0lfQUREUl9ISQkJKDB4MDhhMCAtIE1WNjR4NjBfSURNQV8wX09GRlNFVCkKKyNkZWZpbmUJTVY2NHg2MF9JRE1BX05FWFRfREVTQ19QQ0lfQUREUl9ISQkoMHgwOGIwIC0gTVY2NHg2MF9JRE1BXzBfT0ZGU0VUKQorI2RlZmluZQlNVjY0eDYwX0lETUFfQ09OVFJPTF9MTwkJCSgweDA4NDAgLSBNVjY0eDYwX0lETUFfMF9PRkZTRVQpCisjZGVmaW5lCU1WNjR4NjBfSURNQV9DT05UUk9MX0hJCQkJKDB4MDg4MCAtIE1WNjR4NjBfSURNQV8wX09GRlNFVCkKKworI2RlZmluZQlNVjY0eDYwX0lETUFfMF8zX0FSQklURVJfQ05UTAkJMHgwODYwCisjZGVmaW5lCU1WNjR4NjBfSURNQV80XzdfQVJCSVRFUl9DTlRMCQkweDA5NjAKKworI2RlZmluZQlNVjY0eDYwX0lETUFfMF8zX1hCQVJfVE8JCTB4MDhkMAorI2RlZmluZQlNVjY0eDYwX0lETUFfNF83X1hCQVJfVE8JCTB4MDlkMAorCisjZGVmaW5lCU1WNjR4NjBfSURNQV8wXzNfSU5UUl9DQVVTRQkJMHgwOGMwCisjZGVmaW5lCU1WNjR4NjBfSURNQV8wXzNfSU5UUl9NQVNLCQkweDA4YzQKKyNkZWZpbmUJTVY2NHg2MF9JRE1BXzBfM19FUlJPUl9BRERSCQkweDA4YzgKKyNkZWZpbmUJTVY2NHg2MF9JRE1BXzBfM19FUlJPUl9TRUxFQ1QJCTB4MDhjYworI2RlZmluZQlNVjY0eDYwX0lETUFfNF83X0lOVFJfQ0FVU0UJCTB4MDljMAorI2RlZmluZQlNVjY0eDYwX0lETUFfNF83X0lOVFJfTUFTSwkJMHgwOWM0CisjZGVmaW5lCU1WNjR4NjBfSURNQV80XzdfRVJST1JfQUREUgkJMHgwOWM4CisjZGVmaW5lCU1WNjR4NjBfSURNQV80XzdfRVJST1JfU0VMRUNUCQkweDA5Y2MKKworLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqCVdhdGNoZG9nIFRpbWVyIEludGVyZmFjZSBSZWdpc3RlcnMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisjZGVmaW5lCU1WNjR4NjBfV0RUX1dEQwkJCQkweGI0MTAKKyNkZWZpbmUJTVY2NHg2MF9XRFRfV0RWCQkJCTB4YjQxNAorCisKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKgkgR2VuZXJhbCBQdXJwb3NlIFBpbnMgQ29udHJvbGxlciBJbnRlcmZhY2UgUmVnaXN0ZXJzCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworI2RlZmluZQlNVjY0eDYwX0dQUF9JT19DTlRMCQkJMHhmMTAwCisjZGVmaW5lCU1WNjR4NjBfR1BQX0xFVkVMX0NOVEwJCQkweGYxMTAKKyNkZWZpbmUJTVY2NHg2MF9HUFBfVkFMVUUJCQkweGYxMDQKKyNkZWZpbmUJTVY2NHg2MF9HUFBfSU5UUl9DQVVTRQkJCTB4ZjEwOAorI2RlZmluZQlNVjY0eDYwX0dQUF9JTlRSX01BU0sJCQkweGYxMGMKKyNkZWZpbmUJTVY2NHg2MF9HUFBfVkFMVUVfU0VUCQkJMHhmMTE4CisjZGVmaW5lCU1WNjR4NjBfR1BQX1ZBTFVFX0NMUgkJCTB4ZjExYworCisKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKglNdWx0aS1QdXJwb3NlIFBpbnMgQ29udHJvbGxlciBJbnRlcmZhY2UgUmVnaXN0ZXJzCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworI2RlZmluZQlNVjY0eDYwX01QUF9DTlRMXzAJCQkweGYwMDAKKyNkZWZpbmUJTVY2NHg2MF9NUFBfQ05UTF8xCQkJMHhmMDA0CisjZGVmaW5lCU1WNjR4NjBfTVBQX0NOVExfMgkJCTB4ZjAwOAorI2RlZmluZQlNVjY0eDYwX01QUF9DTlRMXzMJCQkweGYwMGMKKyNkZWZpbmUJR1Q2NDI2MF9NUFBfU0VSSUFMX1BPUlRTX01VTFRJUExFWAkweGYwMTAKKworI2RlZmluZSBNVjY0eDYwX0VUSF9CQVJfR0FQCQkJMHg4CisjZGVmaW5lIE1WNjR4NjBfRVRIX1NJWkVfUkVHX0dBUAkJMHg4CisjZGVmaW5lIE1WNjR4NjBfRVRIX0hJR0hfQUREUl9SRU1BUF9SRUdfR0FQCTB4NAorI2RlZmluZSBNVjY0eDYwX0VUSF9QT1JUX0FDQ0VTU19DVFJMX0dBUAkweDQKKworI2RlZmluZSBNVjY0eDYwX0VCQVJfQVRUUl9EUkFNX0NTMAkJMHgwMDAwMEUwMAorI2RlZmluZSBNVjY0eDYwX0VCQVJfQVRUUl9EUkFNX0NTMQkJMHgwMDAwMEQwMAorI2RlZmluZSBNVjY0eDYwX0VCQVJfQVRUUl9EUkFNX0NTMgkJMHgwMDAwMEIwMAorI2RlZmluZSBNVjY0eDYwX0VCQVJfQVRUUl9EUkFNX0NTMwkJMHgwMDAwMDcwMAorCisjZGVmaW5lIE1WNjR4NjBfRUJBUl9BVFRSX0NCU19TUkFNX0JMT0NLMAkweDAwMDAwMDAwCisjZGVmaW5lIE1WNjR4NjBfRUJBUl9BVFRSX0NCU19TUkFNX0JMT0NLMQkweDAwMDAwMTAwCisjZGVmaW5lIE1WNjR4NjBfRUJBUl9BVFRSX0NCU19TUkFNCQkweDAwMDAwMDAwCisjZGVmaW5lIE1WNjR4NjBfRUJBUl9BVFRSX0NCU19DUFVfQlVTCQkweDAwMDAwODAwCisKKworLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqCUludGVycnVwdCBDb250cm9sbGVyIEludGVyZmFjZSBSZWdpc3RlcnMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisjZGVmaW5lCUdUNjQyNjBfSUNfT0ZGU0VUCQkJMHgwYzE4CisKKyNkZWZpbmUJR1Q2NDI2MF9JQ19NQUlOX0NBVVNFX0xPCQkweDBjMTgKKyNkZWZpbmUJR1Q2NDI2MF9JQ19NQUlOX0NBVVNFX0hJCQkweDBjNjgKKyNkZWZpbmUJR1Q2NDI2MF9JQ19DUFVfSU5UUl9NQVNLX0xPCQkweDBjMWMKKyNkZWZpbmUJR1Q2NDI2MF9JQ19DUFVfSU5UUl9NQVNLX0hJCQkweDBjNmMKKyNkZWZpbmUJR1Q2NDI2MF9JQ19DUFVfU0VMRUNUX0NBVVNFCQkweDBjNzAKKyNkZWZpbmUJR1Q2NDI2MF9JQ19QQ0kwX0lOVFJfTUFTS19MTwkJMHgwYzI0CisjZGVmaW5lCUdUNjQyNjBfSUNfUENJMF9JTlRSX01BU0tfSEkJCTB4MGM2NAorI2RlZmluZQlHVDY0MjYwX0lDX1BDSTBfU0VMRUNUX0NBVVNFCQkweDBjNzQKKyNkZWZpbmUJR1Q2NDI2MF9JQ19QQ0kxX0lOVFJfTUFTS19MTwkJMHgwY2E0CisjZGVmaW5lCUdUNjQyNjBfSUNfUENJMV9JTlRSX01BU0tfSEkJCTB4MGNlNAorI2RlZmluZQlHVDY0MjYwX0lDX1BDSTFfU0VMRUNUX0NBVVNFCQkweDBjZjQKKyNkZWZpbmUJR1Q2NDI2MF9JQ19DUFVfSU5UXzBfTUFTSwkJMHgwZTYwCisjZGVmaW5lCUdUNjQyNjBfSUNfQ1BVX0lOVF8xX01BU0sJCTB4MGU2NAorI2RlZmluZQlHVDY0MjYwX0lDX0NQVV9JTlRfMl9NQVNLCQkweDBlNjgKKyNkZWZpbmUJR1Q2NDI2MF9JQ19DUFVfSU5UXzNfTUFTSwkJMHgwZTZjCisKKyNkZWZpbmUJTVY2NDM2MF9JQ19PRkZTRVQJCQkweDAwMDAKKworI2RlZmluZQlNVjY0MzYwX0lDX01BSU5fQ0FVU0VfTE8JCTB4MDAwNAorI2RlZmluZQlNVjY0MzYwX0lDX01BSU5fQ0FVU0VfSEkJCTB4MDAwYworI2RlZmluZQlNVjY0MzYwX0lDX0NQVTBfSU5UUl9NQVNLX0xPCQkweDAwMTQKKyNkZWZpbmUJTVY2NDM2MF9JQ19DUFUwX0lOVFJfTUFTS19ISQkJMHgwMDFjCisjZGVmaW5lCU1WNjQzNjBfSUNfQ1BVMF9TRUxFQ1RfQ0FVU0UJCTB4MDAyNAorI2RlZmluZQlNVjY0MzYwX0lDX0NQVTFfSU5UUl9NQVNLX0xPCQkweDAwMzQKKyNkZWZpbmUJTVY2NDM2MF9JQ19DUFUxX0lOVFJfTUFTS19ISQkJMHgwMDNjCisjZGVmaW5lCU1WNjQzNjBfSUNfQ1BVMV9TRUxFQ1RfQ0FVU0UJCTB4MDA0NAorI2RlZmluZQlNVjY0MzYwX0lDX0lOVDBfTUFTS19MTwkJCTB4MDA1NAorI2RlZmluZQlNVjY0MzYwX0lDX0lOVDBfTUFTS19ISQkJCTB4MDA1YworI2RlZmluZQlNVjY0MzYwX0lDX0lOVDBfU0VMRUNUX0NBVVNFCQkweDAwNjQKKyNkZWZpbmUJTVY2NDM2MF9JQ19JTlQxX01BU0tfTE8JCQkweDAwNzQKKyNkZWZpbmUJTVY2NDM2MF9JQ19JTlQxX01BU0tfSEkJCQkweDAwN2MKKyNkZWZpbmUJTVY2NDM2MF9JQ19JTlQxX1NFTEVDVF9DQVVTRQkJMHgwMDg0CisKKyNlbmRpZiAvKiBfX0FTTVBQQ19NVjY0eDYwX0RFRlNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL25hbWVpLmggYi9pbmNsdWRlL2FzbS1wcGMvbmFtZWkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWM5ZWM4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjL25hbWVpLmgKQEAgLTAsMCArMSwyMCBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLXBwYy9uYW1laS5oCisgKiBBZGFwdGVkIGZyb20gaW5jbHVkZS9hc20tYWxwaGEvbmFtZWkuaAorICoKKyAqIEluY2x1ZGVkIGZyb20gZnMvbmFtZWkuYworICovCisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaWZuZGVmIF9fUFBDX05BTUVJX0gKKyNkZWZpbmUgX19QUENfTkFNRUlfSAorCisvKiBUaGlzIGR1bW15IHJvdXRpbmUgbWF5YmUgY2hhbmdlZCB0byBzb21ldGhpbmcgdXNlZnVsCisgKiBmb3IgL3Vzci9nbmVtdWwvIGVtdWxhdGlvbiBzdHVmZi4KKyAqIExvb2sgYXQgYXNtLXNwYXJjL25hbWVpLmggZm9yIGRldGFpbHMuCisgKi8KKworI2RlZmluZSBfX2VtdWxfcHJlZml4KCkgTlVMTAorCisjZW5kaWYgLyogX19QUENfTkFNRUlfSCAqLworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9udnJhbS5oIGIvaW5jbHVkZS9hc20tcHBjL252cmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFlZjE2ZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9udnJhbS5oCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBQcmVQIGNvbXBsaWFudCBOVlJBTSBhY2Nlc3MKKyAqLworCisjaWZkZWYgX19LRVJORUxfXworI2lmbmRlZiBfUFBDX05WUkFNX0gKKyNkZWZpbmUgX1BQQ19OVlJBTV9ICisKKyNkZWZpbmUgTlZSQU1fQVMwICAweDc0CisjZGVmaW5lIE5WUkFNX0FTMSAgMHg3NQorI2RlZmluZSBOVlJBTV9EQVRBIDB4NzcKKworCisvKiBSVEMgT2Zmc2V0cyAqLworCisjZGVmaW5lIE1PVE9fUlRDX1NFQ09ORFMJCTB4MUZGOQorI2RlZmluZSBNT1RPX1JUQ19NSU5VVEVTCQkweDFGRkEKKyNkZWZpbmUgTU9UT19SVENfSE9VUlMJCTB4MUZGQgorI2RlZmluZSBNT1RPX1JUQ19EQVlfT0ZfV0VFSwkJMHgxRkZDCisjZGVmaW5lIE1PVE9fUlRDX0RBWV9PRl9NT05USAkweDFGRkQKKyNkZWZpbmUgTU9UT19SVENfTU9OVEgJCTB4MUZGRQorI2RlZmluZSBNT1RPX1JUQ19ZRUFSCQkweDFGRkYKKyNkZWZpbmUgTU9UT19SVENfQ09OVFJPTEEgICAgICAgICAgICAweDFGRjgKKyNkZWZpbmUgTU9UT19SVENfQ09OVFJPTEIgICAgICAgICAgICAweDFGRjkKKworLyogUG93ZXJNYWMgc3BlY2lmaWMgbnZyYW0gc3R1ZmZzICovCisKK2VudW0geworCXBtYWNfbnZyYW1fT0YsCQkvKiBPcGVuIEZpcm13YXJlIHBhcnRpdGlvbiAqLworCXBtYWNfbnZyYW1fWFBSQU0sCS8qIE1hY09TIFhQUkFNIHBhcnRpdGlvbiAqLworCXBtYWNfbnZyYW1fTlIJCS8qIE1hY09TIE5hbWUgUmVnaXN0cnkgcGFydGl0aW9uICovCit9OworCisvKiBSZXR1cm4gcGFydGl0aW9uIG9mZnNldCBpbiBudnJhbSAqLworZXh0ZXJuIGludAlwbWFjX2dldF9wYXJ0aXRpb24oaW50IHBhcnRpdGlvbik7CisKKy8qIERpcmVjdCBhY2Nlc3MgdG8gWFBSQU0gb24gUG93ZXJNYWNzICovCitleHRlcm4gdTgJcG1hY194cHJhbV9yZWFkKGludCB4cGFkZHIpOworZXh0ZXJuIHZvaWQJcG1hY194cHJhbV93cml0ZShpbnQgeHBhZGRyLCB1OCBkYXRhKTsKKworLyogU3luY2hyb25pemUgTlZSQU0gKi8KK2V4dGVybiB2b2lkCW52cmFtX3N5bmModm9pZCk7CisKKy8qIE5vcm1hbCBhY2Nlc3MgdG8gTlZSQU0gKi8KK2V4dGVybiB1bnNpZ25lZCBjaGFyIG52cmFtX3JlYWRfYnl0ZShpbnQgaSk7CitleHRlcm4gdm9pZCBudnJhbV93cml0ZV9ieXRlKHVuc2lnbmVkIGNoYXIgYywgaW50IGkpOworCisvKiBTb21lIG9mZnNldHMgaW4gWFBSQU0gKi8KKyNkZWZpbmUgUE1BQ19YUFJBTV9NQUNISU5FX0xPQwkweGU0CisjZGVmaW5lIFBNQUNfWFBSQU1fU09VTkRfVk9MVU1FCTB4MDgKKworLyogTWFjaGluZSBsb2NhdGlvbiBzdHJ1Y3R1cmUgaW4gUG93ZXJNYWMgWFBSQU0gKi8KK3N0cnVjdCBwbWFjX21hY2hpbmVfbG9jYXRpb24geworCXVuc2lnbmVkIGludAlsYXRpdHVkZTsJLyogMiszMCBiaXQgRnJhY3Rpb25hbCBudW1iZXIgKi8KKwl1bnNpZ25lZCBpbnQJbG9uZ2l0dWRlOwkvKiAyKzMwIGJpdCBGcmFjdGlvbmFsIG51bWJlciAqLworCXVuc2lnbmVkIGludAlkZWx0YTsJCS8qIG1peCBvZiBHTVQgZGVsdGEgYW5kIERMUyAqLworfTsKKworLyoKKyAqIC9kZXYvbnZyYW0gaW9jdGxzCisgKgorICogTm90ZSB0aGF0IFBNQUNfTlZSQU1fR0VUX09GRlNFVCBpcyBzdGlsbCBzdXBwb3J0ZWQsIGJ1dCBpcworICogZGVmaW5pdGVseSBvYnNvbGV0ZS4gRG8gbm90IHVzZSBpdCBpZiB5b3UgY2FuIGF2b2lkIGl0CisgKi8KKworI2RlZmluZSBPQlNPTEVURV9QTUFDX05WUkFNX0dFVF9PRkZTRVQgXAorCQkJCV9JT1dSKCdwJywgMHg0MCwgaW50KQorCisjZGVmaW5lIElPQ19OVlJBTV9HRVRfT0ZGU0VUCV9JT1dSKCdwJywgMHg0MiwgaW50KQkvKiBHZXQgTlZSQU0gcGFydGl0aW9uIG9mZnNldCAqLworI2RlZmluZSBJT0NfTlZSQU1fU1lOQwkJX0lPKCdwJywgMHg0MykJCS8qIFN5bmMgTlZSQU0gaW1hZ2UgKi8KKworI2VuZGlmCisjZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL29jcC5oIGIvaW5jbHVkZS9hc20tcHBjL29jcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlYTQ0Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGMvb2NwLmgKQEAgLTAsMCArMSwyMTEgQEAKKy8qCisgKiBvY3AuaAorICoKKyAqICAgICAgKGMpIEJlbmphbWluIEhlcnJlbnNjaG1pZHQgKGJlbmhAa2VybmVsLmNyYXNoaW5nLm9yZykKKyAqICAgICAgICAgIE1pcHN5cyAtIEZyYW5jZQorICoKKyAqICAgICAgICAgIERlcml2ZWQgZnJvbSB3b3JrIChjKSBBcm1pbiBLdXN0ZXIgYWt1c3RlckBwYWNiZWxsLm5ldAorICoKKyAqICAgICAgICAgIEFkZGl0aW9uYWwgc3VwcG9ydCBhbmQgcG9ydCB0byAyLjYgTERNL3N5c2ZzIGJ5CisgKiAgICAgICAgICBNYXR0IFBvcnRlciA8bXBvcnRlckBrZXJuZWwuY3Jhc2hpbmcub3JnPgorICogICAgICAgICAgQ29weXJpZ2h0IDIwMDMtMjAwNCBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVE9ETzogLSBBZGQgZ2V0L3B1dCBpbnRlcmZhY2UgJiBmaXh1cCBsb2NraW5nIHRvIHByb3ZpZGUgc2FtZSBBUEkgZm9yCisgKiAgICAgICAgICAyLjQgYW5kIDIuNQorICoJICAtIFJld29yayBQTSBjYWxsYmFja3MKKyAqLworCisjaWZkZWYgX19LRVJORUxfXworI2lmbmRlZiBfX09DUF9IX18KKyNkZWZpbmUgX19PQ1BfSF9fCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmZzX2ZzX2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorCisjaW5jbHVkZSA8YXNtL21tdS5oPgorI2luY2x1ZGUgPGFzbS9vY3BfaWRzLmg+CisjaW5jbHVkZSA8YXNtL3J3c2VtLmg+CisjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgorCisjaWZkZWYgQ09ORklHX1BQQ19PQ1AKKworI2RlZmluZSBPQ1BfTUFYX0lSUVMJNworI2RlZmluZSBNQVhfRU1BQ1MJNAorI2RlZmluZSBPQ1BfSVJRX05BCS0xCS8qIHVzZWQgd2hlbiBvY3AgZGV2aWNlIGRvZXMgbm90IGhhdmUgYW4gaXJxICovCisjZGVmaW5lIE9DUF9JUlFfTVVMCS0yCS8qIHVzZWQgZm9yIG9jcCBkZXZpY2VzIHdpdGggbXVsdGlwbHkgaXJxcyAqLworI2RlZmluZSBPQ1BfTlVMTF9UWVBFCS0xCS8qIHVzZWQgdG8gbWFyayBlbmQgb2YgbGlzdCAqLworI2RlZmluZSBPQ1BfQ1BNX05BCTAJLyogTm8gQ2xvY2sgb3IgUG93ZXIgTWFuYWdlbWVudCBhdmFsaWFibGUgKi8KKyNkZWZpbmUgT0NQX1BBRERSX05BCTAJLyogTm8gTU1JTyByZWdpc3RlcnMgKi8KKworI2RlZmluZSBPQ1BfQU5ZX0lECSh+MCkKKyNkZWZpbmUgT0NQX0FOWV9JTkRFWAktMQorCitleHRlcm4gc3RydWN0IGxpc3RfaGVhZCAJb2NwX2RldmljZXM7CitleHRlcm4gc3RydWN0IHJ3X3NlbWFwaG9yZQlvY3BfZGV2aWNlc19zZW07CisKK3N0cnVjdCBvY3BfZGV2aWNlX2lkIHsKKwl1bnNpZ25lZCBpbnQJdmVuZG9yLCBmdW5jdGlvbjsJLyogVmVuZG9yIGFuZCBmdW5jdGlvbiBJRCBvciBPQ1BfQU5ZX0lEICovCisJdW5zaWduZWQgbG9uZwlkcml2ZXJfZGF0YTsJCS8qIERhdGEgcHJpdmF0ZSB0byB0aGUgZHJpdmVyICovCit9OworCisKKy8qCisgKiBTdGF0aWMgZGVmaW5pdGlvbiBvZiBhbiBPQ1AgZGV2aWNlLgorICoKKyAqIEB2ZW5kb3I6ICAgIFZlbmRvciBjb2RlLiBJdCBpcyBfU1RST05HTFlfIGRpc2NvdXJhZ2VkIHRvIHVzZQorICogICAgICAgICAgICAgdGhlIHZlbmRvciBjb2RlIGFzIGEgd2F5IHRvIG1hdGNoIGEgdW5pcXVlIGRldmljZSwKKyAqICAgICAgICAgICAgIHRob3VnaCBJIGtlcHQgdGhhdCBwb3NzaWJpbGl0eSBvcGVuLCB5b3Ugc2hvdWxkCisgKiAgICAgICAgICAgICByZWFsbHkgZGVmaW5lIGRpZmZlcmVudCBmdW5jdGlvbiBjb2RlcyBmb3IgZGlmZmVyZW50CisgKiAgICAgICAgICAgICBkZXZpY2UgdHlwZXMKKyAqIEBmdW5jdGlvbjogIFRoaXMgaXMgdGhlIGZ1bmN0aW9uIGNvZGUgZm9yIHRoaXMgZGV2aWNlLgorICogQGluZGV4OiAgICAgVGhpcyBpbmRleCBpcyB1c2VkIGZvciBtYXBwaW5nIHRoZSBOdGggZnVuY3Rpb24gb2YgYQorICogICAgICAgICAgICAgZ2l2ZW4gY29yZS4gVGhpcyBpcyB0eXBpY2FsbHkgdXNlZCBmb3IgY3Jvc3MtZHJpdmVyCisgKiAgICAgICAgICAgICBtYXRjaGluZywgbGlrZSBsb29raW5nIGZvciBhIGdpdmVuIE1BTCBvciBaTUlJIGZyb20KKyAqICAgICAgICAgICAgIGFuIEVNQUMgb3IgZm9yIGdldHRpbmcgdG8gdGhlIHByb3BlciBzZXQgb2YgRENScy4KKyAqICAgICAgICAgICAgIEluZGljZXMgYXJlIG5vIGxvbmdlciBtYWdpY2FsbHkgY2FsY3VsYXRlZCBiYXNlZCBvbgorICogICAgICAgICAgICAgc3RydWN0dXJlIG9yZGVyaW5nLCB0aGV5IGhhdmUgdG8gYmUgYWN0dWFsbHkgY29kZWQKKyAqICAgICAgICAgICAgIGludG8gdGhlIG9jcF9kZWYgdG8gYXZvaWQgYW55IHBvc3NpYmxlIGNvbmZ1c2lvbgorICogICAgICAgICAgICAgSSBfU1RST05HTFlfIChhZ2FpbiA/IHdvdyAhKSBlbmNvdXJhZ2UgYW55Ym9keSByZWx5aW5nCisgKiAgICAgICAgICAgICBvbiBpbmRleCBtYXBwaW5nIHRvIGVuY29kZSB0aGUgInRhcmdldCIgaW5kZXggaW4gYW4KKyAqICAgICAgICAgICAgIGFzc29jaWF0ZWQgc3RydWN0dXJlIHBvaW50ZWQgdG8gYnkgImFkZGl0aW9ucyIsIHNlZQorICogICAgICAgICAgICAgaG93IGl0J3MgZG9uZSBmb3IgdGhlIEVNQUMgZHJpdmVyLgorICogQHBhZGRyOiAgICAgRGV2aWNlIHBoeXNpY2FsIGFkZHJlc3MgKG1heSBub3QgbWVhbiBhbnl0aGluZy4uLikKKyAqIEBpcnE6ICAgICAgIEludGVycnVwdCBsaW5lIGZvciB0aGlzIGRldmljZSAoVE9ETzogdGhpbmsgYWJvdXQgbWFraW5nCisgKiAgICAgICAgICAgICBhbiBhcnJheSB3aXRoIHRoaXMpCisgKiBAcG06ICAgICAgICBDdXJyZW50bHksIGNvbnRhaW5zIHRoZSBiaXRtYXNrIGluIENQTUZSIERDUiBmb3IgdGhlIGRldmljZQorICogQGFkZGl0aW9uczogT3B0aW9uYWxseSBwb2ludHMgdG8gYSBmdW5jdGlvbiBzcGVjaWZpYyBzdHJ1Y3R1cmUKKyAqICAgICAgICAgICAgIHByb3ZpZGluZyBhZGRpdGlvbmFsIGluZm9ybWF0aW9ucyBmb3IgYSBnaXZlbiBkZXZpY2UKKyAqICAgICAgICAgICAgIGluc3RhbmNlLiBJdCdzIGN1cnJlbnRseSB1c2VkIGJ5IHRoZSBFTUFDIGRyaXZlciBmb3IgTUFMCisgKiAgICAgICAgICAgICBjaGFubmVsICYgWk1JSSBwb3J0IG1hcHBpbmcgYW1vbmcgb3RoZXJzLgorICogQHNob3c6ICAgICAgT3B0aW9uYWxseSBwb2ludHMgdG8gYSBmdW5jdGlvbiBzcGVjaWZpYyBzdHJ1Y3R1cmUKKyAqICAgICAgICAgICAgIHByb3ZpZGluZyBhIHN5c2ZzIHNob3cgcm91dGluZSBmb3IgYWRkaXRpb25zIGZpZWxkcy4KKyAqLworc3RydWN0IG9jcF9kZWYgeworCXVuc2lnbmVkIGludAl2ZW5kb3I7CisJdW5zaWduZWQgaW50CWZ1bmN0aW9uOworCWludAkJaW5kZXg7CisJcGh5c19hZGRyX3QJcGFkZHI7CisJaW50CSAgCWlycTsKKwl1bnNpZ25lZCBsb25nCXBtOworCXZvaWQJCSphZGRpdGlvbnM7CisJdm9pZAkJKCpzaG93KShzdHJ1Y3QgZGV2aWNlICopOworfTsKKworCisvKiBTdHJ1Y3QgZm9yIGEgZ2l2ZW4gZGV2aWNlIGluc3RhbmNlICovCitzdHJ1Y3Qgb2NwX2RldmljZSB7CisJc3RydWN0IGxpc3RfaGVhZAlsaW5rOworCWNoYXIJCQluYW1lWzgwXTsJLyogZGV2aWNlIG5hbWUgKi8KKwlzdHJ1Y3Qgb2NwX2RlZgkJKmRlZjsJCS8qIGRldmljZSBkZWZpbml0aW9uICovCisJdm9pZAkJCSpkcnZkYXRhOwkvKiBkcml2ZXIgZGF0YSBmb3IgdGhpcyBkZXZpY2UgKi8KKwlzdHJ1Y3Qgb2NwX2RyaXZlcgkqZHJpdmVyOworCXUzMgkJCWN1cnJlbnRfc3RhdGU7CS8qIEN1cnJlbnQgb3BlcmF0aW5nIHN0YXRlLiBJbiBBQ1BJLXNwZWFrLAorCQkJCQkJICAgdGhpcyBpcyBEMC1EMywgRDAgYmVpbmcgZnVsbHkgZnVuY3Rpb25hbCwKKwkJCQkJCSAgIGFuZCBEMyBiZWluZyBvZmYuICovCisJc3RydWN0CQkJZGV2aWNlIGRldjsKK307CisKK3N0cnVjdCBvY3BfZHJpdmVyIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CisJY2hhciAqbmFtZTsKKwljb25zdCBzdHJ1Y3Qgb2NwX2RldmljZV9pZCAqaWRfdGFibGU7CS8qIE5VTEwgaWYgd2FudHMgYWxsIGRldmljZXMgKi8KKwlpbnQgICgqcHJvYmUpICAoc3RydWN0IG9jcF9kZXZpY2UgKmRldik7CS8qIE5ldyBkZXZpY2UgaW5zZXJ0ZWQgKi8KKwl2b2lkICgqcmVtb3ZlKSAoc3RydWN0IG9jcF9kZXZpY2UgKmRldik7CS8qIERldmljZSByZW1vdmVkIChOVUxMIGlmIG5vdCBhIGhvdC1wbHVnIGNhcGFibGUgZHJpdmVyKSAqLworCWludCAgKCpzdXNwZW5kKSAoc3RydWN0IG9jcF9kZXZpY2UgKmRldiwgdTMyIHN0YXRlKTsJLyogRGV2aWNlIHN1c3BlbmRlZCAqLworCWludCAgKCpyZXN1bWUpIChzdHJ1Y3Qgb2NwX2RldmljZSAqZGV2KTsJICAgICAgICAgICAgICAgIC8qIERldmljZSB3b2tlbiB1cCAqLworCXN0cnVjdCBkZXZpY2VfZHJpdmVyIGRyaXZlcjsKK307CisKKyNkZWZpbmUgdG9fb2NwX2RldihuKSBjb250YWluZXJfb2Yobiwgc3RydWN0IG9jcF9kZXZpY2UsIGRldikKKyNkZWZpbmUgdG9fb2NwX2RydihuKSBjb250YWluZXJfb2Yobiwgc3RydWN0IG9jcF9kcml2ZXIsIGRyaXZlcikKKworLyogU2ltaWxhciB0byB0aGUgaGVscGVycyBhYm92ZSwgdGhlc2UgbWFuaXB1bGF0ZSBwZXItb2NwX2RldgorICogZHJpdmVyLXNwZWNpZmljIGRhdGEuICBDdXJyZW50bHkgc3RvcmVkIGFzIG9jcF9kZXY6Om9jcGRldiwKKyAqIGEgdm9pZCBwb2ludGVyLCBidXQgaXQgaXMgbm90IHByZXNlbnQgb24gb2xkZXIga2VybmVscy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkICoKK29jcF9nZXRfZHJ2ZGF0YShzdHJ1Y3Qgb2NwX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gcGRldi0+ZHJ2ZGF0YTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitvY3Bfc2V0X2RydmRhdGEoc3RydWN0IG9jcF9kZXZpY2UgKnBkZXYsIHZvaWQgKmRhdGEpCit7CisJcGRldi0+ZHJ2ZGF0YSA9IGRhdGE7Cit9CisKKyNpZiBkZWZpbmVkIChDT05GSUdfUE0pCisvKgorICogVGhpcyBpcyByaWdodCBmb3IgdGhlIElCTSA0MDUgYW5kIDQ0MCBidXQgd2lsbCBuZWVkIHRvIGJlCisgKiBnZW5lcmFsaXplZCBpZiB0aGUgT0NQIHN0dWZmIGdldHMgdXNlZCBvbiBvdGhlciBwcm9jZXNzb3JzLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK29jcF9mb3JjZV9wb3dlcl9vZmYoc3RydWN0IG9jcF9kZXZpY2UgKm9kZXYpCit7CisJbXRkY3IoRENSTl9DUE1GUiwgbWZkY3IoRENSTl9DUE1GUikgfCBvZGV2LT5kZWYtPnBtKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitvY3BfZm9yY2VfcG93ZXJfb24oc3RydWN0IG9jcF9kZXZpY2UgKm9kZXYpCit7CisJbXRkY3IoRENSTl9DUE1GUiwgbWZkY3IoRENSTl9DUE1GUikgJiB+b2Rldi0+ZGVmLT5wbSk7Cit9CisjZWxzZQorI2RlZmluZSBvY3BfZm9yY2VfcG93ZXJfb2ZmKHgpCSh2b2lkKSh4KQorI2RlZmluZSBvY3BfZm9yY2VfcG93ZXJfb24oeCkJKHZvaWQpKHgpCisjZW5kaWYKKworLyogUmVnaXN0ZXIvVW5yZWdpc3RlciBhbiBPQ1AgZHJpdmVyICovCitleHRlcm4gaW50IG9jcF9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IG9jcF9kcml2ZXIgKmRydik7CitleHRlcm4gdm9pZCBvY3BfdW5yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IG9jcF9kcml2ZXIgKmRydik7CisKKy8qIEJ1aWxkIGxpc3Qgb2YgZGV2aWNlcyAqLworZXh0ZXJuIGludCBvY3BfZWFybHlfaW5pdCh2b2lkKSBfX2luaXQ7CisKKy8qIEZpbmQgYSBkZXZpY2UgYnkgaW5kZXggKi8KK2V4dGVybiBzdHJ1Y3Qgb2NwX2RldmljZSAqb2NwX2ZpbmRfZGV2aWNlKHVuc2lnbmVkIGludCB2ZW5kb3IsIHVuc2lnbmVkIGludCBmdW5jdGlvbiwgaW50IGluZGV4KTsKKworLyogR2V0IGEgZGVmIGJ5IGluZGV4ICovCitleHRlcm4gc3RydWN0IG9jcF9kZWYgKm9jcF9nZXRfb25lX2RldmljZSh1bnNpZ25lZCBpbnQgdmVuZG9yLCB1bnNpZ25lZCBpbnQgZnVuY3Rpb24sIGludCBpbmRleCk7CisKKy8qIEFkZCBhIGRldmljZSBieSBpbmRleCAqLworZXh0ZXJuIGludCBvY3BfYWRkX29uZV9kZXZpY2Uoc3RydWN0IG9jcF9kZWYgKmRlZik7CisKKy8qIFJlbW92ZSBhIGRldmljZSBieSBpbmRleCAqLworZXh0ZXJuIGludCBvY3BfcmVtb3ZlX29uZV9kZXZpY2UodW5zaWduZWQgaW50IHZlbmRvciwgdW5zaWduZWQgaW50IGZ1bmN0aW9uLCBpbnQgaW5kZXgpOworCisvKiBJdGVyYXRlIG92ZXIgZGV2aWNlcyBhbmQgZXhlY3V0ZSBhIHJvdXRpbmUgKi8KK2V4dGVybiB2b2lkIG9jcF9mb3JfZWFjaF9kZXZpY2Uodm9pZCgqY2FsbGJhY2spKHN0cnVjdCBvY3BfZGV2aWNlICosIHZvaWQgKmFyZyksIHZvaWQgKmFyZyk7CisKKy8qIFN5c2ZzIHN1cHBvcnQgKi8KKyNkZWZpbmUgT0NQX1NZU0ZTX0FERFRMKHR5cGUsIGZvcm1hdCwgbmFtZSwgZmllbGQpCQkJXAorc3RhdGljIHNzaXplX3QJCQkJCQkJCVwKK3Nob3dfIyNuYW1lIyNfIyNmaWVsZChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikJCQlcCit7CQkJCQkJCQkJXAorCXN0cnVjdCBvY3BfZGV2aWNlICpvZGV2ID0gdG9fb2NwX2RldihkZXYpOwkJCVwKKwl0eXBlICphZGQgPSBvZGV2LT5kZWYtPmFkZGl0aW9uczsJCQkJXAorCQkJCQkJCQkJXAorCXJldHVybiBzcHJpbnRmKGJ1ZiwgZm9ybWF0LCBhZGQtPmZpZWxkKTsJCQlcCit9CQkJCQkJCQkJXAorc3RhdGljIERFVklDRV9BVFRSKG5hbWUjI18jI2ZpZWxkLCBTX0lSVUdPLCBzaG93XyMjbmFtZSMjXyMjZmllbGQsIE5VTEwpOworCisjaWZkZWYgQ09ORklHX0lCTV9PQ1AKKyNpbmNsdWRlIDxhc20vaWJtX29jcC5oPgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfRlNMX09DUAorI2luY2x1ZGUgPGFzbS9mc2xfb2NwLmg+CisjZW5kaWYKKworI2VuZGlmCQkJCS8qIENPTkZJR19QUENfT0NQICovCisjZW5kaWYJCQkJLyogX19PQ1BfSF9fICovCisjZW5kaWYJCQkJLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL29jcF9pZHMuaCBiL2luY2x1ZGUvYXNtLXBwYy9vY3BfaWRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFlNGIzMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9vY3BfaWRzLmgKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIG9jcF9pZHMuaAorICoKKyAqIE9DUCBkZXZpY2UgaWRzIGJhc2VkIG9uIHRoZSBpZGVhcyBmcm9tIFBDSQorICoKKyAqIFRoZSBudW1iZXJzIGJlbG93IGFyZSBhbG1vc3QgY29tcGxldGVseSBhcmJpdHJhcnksIGFuZCBpbiBmYWN0CisgKiBzdHJpbmdzIG1pZ2h0IHdvcmsgYmV0dGVyLiAgLS0gcGF1bHVzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisvKgorICogVmVuZGVyICBkZXZpY2UKKyAqIFt4eHh4XSAgW3h4eHhdCisgKgorICogIEtlZXAgaW4gb3JkZXIsIHBsZWFzZQorICovCisKKy8qIFZlbmRvciBJRHMgMHgwMDAxIC0gMHhGRkZGIGNvcGllZCBmcm9tIHBjaV9pZHMuaCAqLworCisjZGVmaW5lCU9DUF9WRU5ET1JfSU5WQUxJRAkweDAwMDAKKyNkZWZpbmUJT0NQX1ZFTkRPUl9BUk0JCTB4MDAwNAorI2RlZmluZSBPQ1BfVkVORE9SX0ZSRUVTQ0FMRQkweDEwNTcKKyNkZWZpbmUgT0NQX1ZFTkRPUl9JQk0JCTB4MTAxNAorI2RlZmluZSBPQ1BfVkVORE9SX01PVE9ST0xBCU9DUF9WRU5ET1JfRlJFRVNDQUxFCisjZGVmaW5lCU9DUF9WRU5ET1JfWElMSU5YCTB4MTBlZQorI2RlZmluZQlPQ1BfVkVORE9SX1VOS05PV04JMHhGRkZGCisKKy8qIGRldmljZSBpZGVudGlmaWNhdGlvbiAqLworCisvKiBkZWZpbmUgdHlwZSAqLworI2RlZmluZSBPQ1BfRlVOQ19JTlZBTElECTB4MDAwMAorCisvKiBzeXN0ZW0gMHgwMDAxIC0gMHgwMDFGICovCisKKy8qIFRpbWVycyAweDAwMjAgLSAweDAwMkYgKi8KKworLyogU2VyaWFsIDB4MDAzMCAtIDB4MDA2RiovCisjZGVmaW5lIE9DUF9GVU5DXzE2NTUwCQkweDAwMzEKKyNkZWZpbmUgT0NQX0ZVTkNfSUlDCQkweDAwMzIKKyNkZWZpbmUgT0NQX0ZVTkNfVVNCCQkweDAwMzMKKyNkZWZpbmUgT0NQX0ZVTkNfUFNDX1VBUlQJMHgwMDM0CisKKy8qIE1lbW9yeSBkZXZpY2VzIDB4MDA5MCAtIDB4MDA5RiAqLworI2RlZmluZSBPQ1BfRlVOQ19NQUwJCTB4MDA5MAorI2RlZmluZSBPQ1BfRlVOQ19ETUEJCTB4MDA5MQorCisvKiBEaXNwbGF5IDB4MDBBMCAtIDB4MDBBRiAqLworCisvKiBTb3VuZCAweDAwQjAgLSAweDAwQkYgKi8KKworLyogTWFzcyBTdG9yYWdlIDB4MDBDMCAtIDB4eENGICovCisjZGVmaW5lIE9DUF9GVU5DX0lERQkJMHgwMEMwCisKKy8qIE1pc2MgMHgwMEQwIC0gMHgwMERGKi8KKyNkZWZpbmUgT0NQX0ZVTkNfR1BJTwkJMHgwMEQwCisjZGVmaW5lIE9DUF9GVU5DX1pNSUkJCTB4MDBEMQorI2RlZmluZSBPQ1BfRlVOQ19QRVJGTU9OCTB4MDBEMgkvKiBQZXJmb3JtYW5jZSBNb25pdG9yICovCisjZGVmaW5lIE9DUF9GVU5DX1JHTUlJCQkweDAwRDMKKyNkZWZpbmUgT0NQX0ZVTkNfVEFICQkweDAwRDQKKyNkZWZpbmUgT0NQX0ZVTkNfU0VDMgkJMHgwMEQ1CS8qIENyeXB0by9TZWN1cml0eSAyLjAgKi8KKworLyogTmV0d29yayAweDAyMDAgLSAweDAyRkYgKi8KKyNkZWZpbmUgT0NQX0ZVTkNfRU1BQwkJMHgwMjAwCisjZGVmaW5lIE9DUF9GVU5DX0dGQVIJCTB4MDIwMQkvKiBUU0VDICYgRkVDICovCisKKy8qIEJyaWRnZSBkZXZpY2VzIDB4RTAwIC0gMHhFRkYgKi8KKyNkZWZpbmUgT0NQX0ZVTkNfT1BCCQkweDBFMDAKKworI2RlZmluZSBPQ1BfRlVOQ19VTktOT1dOCTB4RkZGRgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL29mX2RldmljZS5oIGIvaW5jbHVkZS9hc20tcHBjL29mX2RldmljZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0NDQxYzYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGMvb2ZfZGV2aWNlLmgKQEAgLTAsMCArMSw3NCBAQAorI2lmbmRlZiBfX09GX0RFVklDRV9IX18KKyNkZWZpbmUgX19PRl9ERVZJQ0VfSF9fCisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxhc20vcHJvbS5oPgorCisvKgorICogVGhlIG9mX3BsYXRmb3JtX2J1c190eXBlIGlzIGEgYnVzIHR5cGUgdXNlZCBieSBkcml2ZXJzIHRoYXQgZG8gbm90CisgKiBhdHRhY2ggdG8gYSBtYWNpbyBvciBzaW1pbGFyIGJ1cyBidXQgc3RpbGwgdXNlIE9GIHByb2JpbmcKKyAqIG1lY2FuaXNtCisgKi8KK2V4dGVybiBzdHJ1Y3QgYnVzX3R5cGUgb2ZfcGxhdGZvcm1fYnVzX3R5cGU7CisKKy8qCisgKiBUaGUgb2ZfZGV2aWNlIGlzIGEga2luZCBvZiAiYmFzZSBjbGFzcyIgdGhhdCBpcyBhIHN1cGVyc2V0IG9mCisgKiBzdHJ1Y3QgZGV2aWNlIGZvciB1c2UgYnkgZGV2aWNlcyBhdHRhY2hlZCB0byBhbiBPRiBub2RlIGFuZAorICogcHJvYmVkIHVzaW5nIE9GIHByb3BlcnRpZXMKKyAqLworc3RydWN0IG9mX2RldmljZQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZQkqbm9kZTsJCS8qIE9GIGRldmljZSBub2RlICovCisJdTY0CQkJZG1hX21hc2s7CS8qIERNQSBtYXNrICovCisJc3RydWN0IGRldmljZQkJZGV2OwkJLyogR2VuZXJpYyBkZXZpY2UgaW50ZXJmYWNlICovCit9OworI2RlZmluZQl0b19vZl9kZXZpY2UoZCkgY29udGFpbmVyX29mKGQsIHN0cnVjdCBvZl9kZXZpY2UsIGRldikKKworLyoKKyAqIFN0cnVjdCB1c2VkIGZvciBtYXRjaGluZyBhIGRldmljZQorICovCitzdHJ1Y3Qgb2ZfbWF0Y2gKK3sKKwljaGFyCSpuYW1lOworCWNoYXIJKnR5cGU7CisJY2hhcgkqY29tcGF0aWJsZTsKKwl2b2lkCSpkYXRhOworfTsKKyNkZWZpbmUgT0ZfQU5ZX01BVENICQkoKGNoYXIgKiktMUwpCisKK2V4dGVybiBjb25zdCBzdHJ1Y3Qgb2ZfbWF0Y2ggKm9mX21hdGNoX2RldmljZSgKKwljb25zdCBzdHJ1Y3Qgb2ZfbWF0Y2ggKm1hdGNoZXMsIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2UgKmRldik7CisKK2V4dGVybiBzdHJ1Y3Qgb2ZfZGV2aWNlICpvZl9kZXZfZ2V0KHN0cnVjdCBvZl9kZXZpY2UgKmRldik7CitleHRlcm4gdm9pZCBvZl9kZXZfcHV0KHN0cnVjdCBvZl9kZXZpY2UgKmRldik7CisKKy8qCisgKiBBbiBvZl9wbGF0Zm9ybV9kcml2ZXIgZHJpdmVyIGlzIGF0dGFjaGVkIHRvIGEgYmFzaWMgb2ZfZGV2aWNlIG9uCisgKiB0aGUgInBsYXRmb3JtIGJ1cyIgKG9mX3BsYXRmb3JtX2J1c190eXBlKQorICovCitzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyCit7CisJY2hhcgkJCSpuYW1lOworCXN0cnVjdCBvZl9tYXRjaAkJKm1hdGNoX3RhYmxlOworCXN0cnVjdCBtb2R1bGUJCSpvd25lcjsKKworCWludAkoKnByb2JlKShzdHJ1Y3Qgb2ZfZGV2aWNlKiBkZXYsIGNvbnN0IHN0cnVjdCBvZl9tYXRjaCAqbWF0Y2gpOworCWludAkoKnJlbW92ZSkoc3RydWN0IG9mX2RldmljZSogZGV2KTsKKworCWludAkoKnN1c3BlbmQpKHN0cnVjdCBvZl9kZXZpY2UqIGRldiwgdTMyIHN0YXRlKTsKKwlpbnQJKCpyZXN1bWUpKHN0cnVjdCBvZl9kZXZpY2UqIGRldik7CisJaW50CSgqc2h1dGRvd24pKHN0cnVjdCBvZl9kZXZpY2UqIGRldik7CisKKwlzdHJ1Y3QgZGV2aWNlX2RyaXZlcglkcml2ZXI7Cit9OworI2RlZmluZQl0b19vZl9wbGF0Zm9ybV9kcml2ZXIoZHJ2KSBjb250YWluZXJfb2YoZHJ2LHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIsIGRyaXZlcikKKworZXh0ZXJuIGludCBvZl9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciAqZHJ2KTsKK2V4dGVybiB2b2lkIG9mX3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgKmRydik7CitleHRlcm4gaW50IG9mX2RldmljZV9yZWdpc3RlcihzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldik7CitleHRlcm4gdm9pZCBvZl9kZXZpY2VfdW5yZWdpc3RlcihzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldik7CitleHRlcm4gc3RydWN0IG9mX2RldmljZSAqb2ZfcGxhdGZvcm1fZGV2aWNlX2NyZWF0ZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBjb25zdCBjaGFyICpidXNfaWQpOworZXh0ZXJuIHZvaWQgb2ZfcmVsZWFzZV9kZXYoc3RydWN0IGRldmljZSAqZGV2KTsKKworI2VuZGlmIC8qIF9fT0ZfREVWSUNFX0hfXyAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvb2hhcmUuaCBiL2luY2x1ZGUvYXNtLXBwYy9vaGFyZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyM2I1OTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGMvb2hhcmUuaApAQCAtMCwwICsxLDQ4IEBACisvKgorICogb2hhcmUuaDogZGVmaW5pdGlvbnMgZm9yIHVzaW5nIHRoZSAiTydIYXJlIiBJL08gY29udHJvbGxlciBjaGlwLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NyBQYXVsIE1hY2tlcnJhcy4KKyAqCisgKiBCZW5IOiBDaGFuZ2VkIHRvIG1hdGNoIHRob3NlIG9mIGhlYXRocm93IChidXQgbm90IGFsbCBvZiB0aGVtKS4gUGxlYXNlCisgKiAgICAgICBjaGVjayBpZiBJIGRpZG4ndCBicmVhayBhbnl0aGluZyAoZXNwZWNpYWxseSB0aGUgbWVkaWEgYmF5KS4KKyAqLworCisvKiBvZmZzZXQgZnJvbSBvaGFyZSBiYXNlIGZvciBmZWF0dXJlIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgT0hBUkVfTUJDUgkweDM0CisjZGVmaW5lIE9IQVJFX0ZDUgkweDM4CisKKy8qCisgKiBCaXRzIGluIGZlYXR1cmUgY29udHJvbCByZWdpc3Rlci4KKyAqIFRoZXNlIHdlcmUgbW9zdGx5IGRlcml2ZWQgYnkgZXhwZXJpbWVudCBvbiBhIHBvd2VyYm9vayAzNDAwCisgKiBhbmQgbWF5IGRpZmZlciBmb3Igb3RoZXIgbWFjaGluZXMuCisgKi8KKyNkZWZpbmUgT0hfU0NDX1JFU0VUCQkxCisjZGVmaW5lIE9IX0JBWV9QT1dFUl9OCQkyCS8qIGEgZ3Vlc3MgKi8KKyNkZWZpbmUgT0hfQkFZX1BDSV9FTkFCTEUJNAkvKiBhIGd1ZXNzICovCisjZGVmaW5lIE9IX0JBWV9JREVfRU5BQkxFCTgKKyNkZWZpbmUgT0hfQkFZX0ZMT1BQWV9FTkFCTEUJMHgxMAorI2RlZmluZSBPSF9JREUwX0VOQUJMRQkJMHgyMAorI2RlZmluZSBPSF9JREUwX1JFU0VUX04JCTB4NDAJLyogYSBndWVzcyAqLworI2RlZmluZSBPSF9CQVlfREVWX01BU0sJCTB4MWMKKyNkZWZpbmUgT0hfQkFZX1JFU0VUX04JCTB4ODAKKyNkZWZpbmUgT0hfSU9CVVNfRU5BQkxFCQkweDEwMAkvKiBJT0JVUyBzZWVtcyB0byBiZSBJREUgKi8KKyNkZWZpbmUgT0hfU0NDX0VOQUJMRQkJMHgyMDAKKyNkZWZpbmUgT0hfTUVTSF9FTkFCTEUJCTB4NDAwCisjZGVmaW5lIE9IX0ZMT1BQWV9FTkFCTEUJMHg4MDAKKyNkZWZpbmUgT0hfU0NDQV9JTwkJMHg0MDAwCisjZGVmaW5lIE9IX1NDQ0JfSU8JCTB4ODAwMAorI2RlZmluZSBPSF9WSUFfRU5BQkxFCQkweDEwMDAwCS8qIElzIGFwcGFyZW50bHkgd3JvbmcsIHRvIGJlIHZlcmlmaWVkICovCisjZGVmaW5lIE9IX0lERTFfUkVTRVRfTgkJMHg4MDAwMDAKKworLyoKKyAqIEJpdHMgdG8gc2V0IGluIHRoZSBmZWF0dXJlIGNvbnRyb2wgcmVnaXN0ZXIgb24gUG93ZXJCb29rcy4KKyAqLworI2RlZmluZSBQQk9PS19GRUFUVVJFUwkJKE9IX0lERV9FTkFCTEUgfCBPSF9TQ0NfRU5BQkxFIHwgXAorCQkJCSBPSF9NRVNIX0VOQUJMRSB8IE9IX1NDQ0FfSU8gfCBPSF9TQ0NCX0lPKQorCisvKgorICogQSBtYWdpYyB2YWx1ZSB0byBwdXQgaW50byB0aGUgZmVhdHVyZSBjb250cm9sIHJlZ2lzdGVyIG9mIHRoZQorICogIm9oYXJlIiBJL08gY29udHJvbGxlciBvbiBTdGFybWF4ZXMgdG8gZW5hYmxlIHRoZSBJREUgQ0QgaW50ZXJmYWNlLgorICogQ29udHJpYnV0ZWQgYnkgSGFycnkgRWF0b24uCisgKi8KKyNkZWZpbmUgU1RBUk1BWF9GRUFUVVJFUwkweGJlZmY3YQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL29wZW5fcGljLmggYi9pbmNsdWRlL2FzbS1wcGMvb3Blbl9waWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODU0NWU0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjL29wZW5fcGljLmgKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAqICBpbmNsdWRlL2FzbS1wcGMvb3Blbl9waWMuaCAtLSBPcGVuUElDIEludGVycnVwdCBIYW5kbGluZworICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTcgR2VlcnQgVXl0dGVyaG9ldmVuCisgKgorICogIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqICBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaWZuZGVmIF9QUENfS0VSTkVMX09QRU5fUElDX0gKKyNkZWZpbmUgX1BQQ19LRVJORUxfT1BFTl9QSUNfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisKKyNkZWZpbmUgT1BFTlBJQ19TSVpFCTB4NDAwMDAKKworLyoKKyAqICBOb24tb2Zmc2V0J2VkIHZlY3RvciBudW1iZXJzCisgKi8KKworI2RlZmluZSBPUEVOUElDX1ZFQ19USU1FUgkxMTAJLyogYW5kIHVwICovCisjZGVmaW5lIE9QRU5QSUNfVkVDX0lQSQkJMTE4CS8qIGFuZCB1cCAqLworI2RlZmluZSBPUEVOUElDX1ZFQ19TUFVSSU9VUwkyNTUKKworLyogT3BlblBJQyBJUlEgY29udHJvbGxlciBzdHJ1Y3R1cmUgKi8KK2V4dGVybiBzdHJ1Y3QgaHdfaW50ZXJydXB0X3R5cGUgb3Blbl9waWM7CisKKy8qIE9wZW5QSUMgSVBJIGNvbnRyb2xsZXIgc3RydWN0dXJlICovCisjaWZkZWYgQ09ORklHX1NNUAorZXh0ZXJuIHN0cnVjdCBod19pbnRlcnJ1cHRfdHlwZSBvcGVuX3BpY19pcGk7CisjZW5kaWYgLyogQ09ORklHX1NNUCAqLworCitleHRlcm4gdV9pbnQgT3BlblBJQ19OdW1Jbml0U2Vuc2VzOworZXh0ZXJuIHVfY2hhciAqT3BlblBJQ19Jbml0U2Vuc2VzOworZXh0ZXJuIHZvaWQgX19pb21lbSAqIE9wZW5QSUNfQWRkcjsKK2V4dGVybiBpbnQgZXBpY19zZXJpYWxfbW9kZTsKKworLyogRXhwb3J0ZWQgZnVuY3Rpb25zICovCitleHRlcm4gdm9pZCBvcGVucGljX3NldF9zb3VyY2VzKGludCBmaXJzdF9pcnEsIGludCBudW1faXJxcywgdm9pZCBfX2lvbWVtICppc3IpOworZXh0ZXJuIHZvaWQgb3BlbnBpY19pbml0KGludCBsaW51eF9pcnFfb2Zmc2V0KTsKK2V4dGVybiB2b2lkIG9wZW5waWNfaW5pdF9ubWlfaXJxKHVfaW50IGlycSk7CitleHRlcm4gdm9pZCBvcGVucGljX2hvb2t1cF9jYXNjYWRlKHVfaW50IGlycSwgY2hhciAqbmFtZSwKKwkJCQkgICBpbnQgKCpjYXNjYWRlX2ZuKShzdHJ1Y3QgcHRfcmVncyAqKSk7CitleHRlcm4gdV9pbnQgb3BlbnBpY19pcnEodm9pZCk7CitleHRlcm4gdm9pZCBvcGVucGljX2VvaSh2b2lkKTsKK2V4dGVybiB2b2lkIG9wZW5waWNfcmVxdWVzdF9JUElzKHZvaWQpOworZXh0ZXJuIHZvaWQgZG9fb3BlbnBpY19zZXR1cF9jcHUodm9pZCk7CitleHRlcm4gaW50IG9wZW5waWNfZ2V0X2lycShzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitleHRlcm4gdm9pZCBvcGVucGljX3Jlc2V0X3Byb2Nlc3Nvcl9waHlzKHVfaW50IGNwdW1hc2spOworZXh0ZXJuIHZvaWQgb3BlbnBpY19zZXR1cF9JU1UoaW50IGlzdV9udW0sIHVuc2lnbmVkIGxvbmcgYWRkcik7CitleHRlcm4gdm9pZCBvcGVucGljX2NhdXNlX0lQSSh1X2ludCBpcGksIGNwdW1hc2tfdCBjcHVtYXNrKTsKK2V4dGVybiB2b2lkIHNtcF9vcGVucGljX21lc3NhZ2VfcGFzcyhpbnQgdGFyZ2V0LCBpbnQgbXNnLCB1bnNpZ25lZCBsb25nIGRhdGEsCisJCQkJICAgICBpbnQgd2FpdCk7CitleHRlcm4gdm9pZCBvcGVucGljX3NldF9rMl9jYXNjYWRlKGludCBpcnEpOworZXh0ZXJuIHZvaWQgb3BlbnBpY19zZXRfcHJpb3JpdHkodV9pbnQgcHJpKTsKKworZXh0ZXJuIGlubGluZSBpbnQgb3BlbnBpY190b19pcnEoaW50IGlycSkKK3sKKwkvKiBJUlEgMCB1c3VhbGx5IG1lYW5zICdkaXNhYmxlZCcuLiBkb24ndCBtZXNzIHdpdGggaXQKKwkgKiBleGNlcHRpb25zIHRvIHRoaXMgKHNhbmRwb2ludCBtYXliZT8pCisJICogc2hvdWxkbid0IHVzZSBvcGVucGljX3RvX2lycQorCSAqLworCWlmIChpcnEgIT0gMCl7CisJCXJldHVybiBpcnEgKz0gTlVNXzgyNTlfSU5URVJSVVBUUzsKKwl9IGVsc2UgeworCQlyZXR1cm4gMDsKKwl9Cit9CisvKiBTdXBwb3J0IGZvciBzZWNvbmQgb3BlbnBpYyBvbiBHNSBtYWNzICovCisKKy8vIEZJWE1FOiBUbyBiZSByZXBsYWNlZCBieSBzYW5lIGNhc2NhZGVkIGNvbnRyb2xsZXIgbWFuYWdlbWVudCAqLworCisjZGVmaW5lIFBNQUNfT1BFTlBJQzJfT0ZGU0VUCTEyOAorCisjZGVmaW5lIE9QRU5QSUMyX1ZFQ19USU1FUgkxMTAJLyogYW5kIHVwICovCisjZGVmaW5lIE9QRU5QSUMyX1ZFQ19JUEkJMTE4CS8qIGFuZCB1cCAqLworI2RlZmluZSBPUEVOUElDMl9WRUNfU1BVUklPVVMJMTI3CisKKworZXh0ZXJuIHZvaWQqIE9wZW5QSUMyX0FkZHI7CisKKy8qIEV4cG9ydGVkIGZ1bmN0aW9ucyAqLworZXh0ZXJuIHZvaWQgb3BlbnBpYzJfc2V0X3NvdXJjZXMoaW50IGZpcnN0X2lycSwgaW50IG51bV9pcnFzLCB2b2lkICppc3IpOworZXh0ZXJuIHZvaWQgb3BlbnBpYzJfaW5pdChpbnQgbGludXhfaXJxX29mZnNldCk7CitleHRlcm4gdm9pZCBvcGVucGljMl9pbml0X25taV9pcnEodV9pbnQgaXJxKTsKK2V4dGVybiB1X2ludCBvcGVucGljMl9pcnEodm9pZCk7CitleHRlcm4gdm9pZCBvcGVucGljMl9lb2kodm9pZCk7CitleHRlcm4gaW50IG9wZW5waWMyX2dldF9pcnEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworZXh0ZXJuIHZvaWQgb3BlbnBpYzJfc2V0dXBfSVNVKGludCBpc3VfbnVtLCB1bnNpZ25lZCBsb25nIGFkZHIpOworI2VuZGlmIC8qIF9QUENfS0VSTkVMX09QRU5fUElDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9wYWdlLmggYi9pbmNsdWRlL2FzbS1wcGMvcGFnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3ODlkYzAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGMvcGFnZS5oCkBAIC0wLDAgKzEsMTY5IEBACisjaWZuZGVmIF9QUENfUEFHRV9ICisjZGVmaW5lIF9QUENfUEFHRV9ICisKKy8qIFBBR0VfU0hJRlQgZGV0ZXJtaW5lcyB0aGUgcGFnZSBzaXplICovCisjZGVmaW5lIFBBR0VfU0hJRlQJMTIKKyNkZWZpbmUgUEFHRV9TSVpFCSgxVUwgPDwgUEFHRV9TSElGVCkKKworLyoKKyAqIFN1YnRsZTogdGhpcyBpcyBhbiBpbnQgKG5vdCBhbiB1bnNpZ25lZCBsb25nKSBhbmQgc28gaXQKKyAqIGdldHMgZXh0ZW5kZWQgdG8gNjQgYml0cyB0aGUgd2F5IHdhbnQgKGkuZS4gd2l0aCAxcykuICAtLSBwYXVsdXMKKyAqLworI2RlZmluZSBQQUdFX01BU0sJKH4oKDEgPDwgUEFHRV9TSElGVCkgLSAxKSkKKworI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworLyogVGhpcyBtdXN0IG1hdGNoIHdoYXQgaXMgaW4gYXJjaC9wcGMvTWFrZWZpbGUgKi8KKyNkZWZpbmUgUEFHRV9PRkZTRVQJQ09ORklHX0tFUk5FTF9TVEFSVAorI2RlZmluZSBLRVJORUxCQVNFCVBBR0VfT0ZGU0VUCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKy8qCisgKiBUaGUgYmFzaWMgdHlwZSBvZiBhIFBURSAtIDY0IGJpdHMgZm9yIHRob3NlIENQVXMgd2l0aCA+IDMyIGJpdAorICogcGh5c2ljYWwgYWRkcmVzc2luZy4gIEZvciBub3cgdGhpcyBqdXN0IHRoZSBJQk0gUFBDNDQwLgorICovCisjaWZkZWYgQ09ORklHX1BURV82NEJJVAordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgcHRlX2Jhc2ljX3Q7CisjZGVmaW5lIFBURV9TSElGVAkoUEFHRV9TSElGVCAtIDMpCS8qIDUxMiBwdGVzIHBlciBwYWdlICovCisjZGVmaW5lIFBURV9GTVQJCSIlMTZMeCIKKyNlbHNlCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgcHRlX2Jhc2ljX3Q7CisjZGVmaW5lIFBURV9TSElGVAkoUEFHRV9TSElGVCAtIDIpCS8qIDEwMjQgcHRlcyBwZXIgcGFnZSAqLworI2RlZmluZSBQVEVfRk1UCQkiJS44bHgiCisjZW5kaWYKKworI3VuZGVmIFNUUklDVF9NTV9UWVBFQ0hFQ0tTCisKKyNpZmRlZiBTVFJJQ1RfTU1fVFlQRUNIRUNLUworLyoKKyAqIFRoZXNlIGFyZSB1c2VkIHRvIG1ha2UgdXNlIG9mIEMgdHlwZS1jaGVja2luZy4uCisgKi8KK3R5cGVkZWYgc3RydWN0IHsgcHRlX2Jhc2ljX3QgcHRlOyB9IHB0ZV90OwordHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHBtZDsgfSBwbWRfdDsKK3R5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBwZ2Q7IH0gcGdkX3Q7Cit0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgcGdwcm90OyB9IHBncHJvdF90OworCisjZGVmaW5lIHB0ZV92YWwoeCkJKCh4KS5wdGUpCisjZGVmaW5lIHBtZF92YWwoeCkJKCh4KS5wbWQpCisjZGVmaW5lIHBnZF92YWwoeCkJKCh4KS5wZ2QpCisjZGVmaW5lIHBncHJvdF92YWwoeCkJKCh4KS5wZ3Byb3QpCisKKyNkZWZpbmUgX19wdGUoeCkJKChwdGVfdCkgeyAoeCkgfSApCisjZGVmaW5lIF9fcG1kKHgpCSgocG1kX3QpIHsgKHgpIH0gKQorI2RlZmluZSBfX3BnZCh4KQkoKHBnZF90KSB7ICh4KSB9ICkKKyNkZWZpbmUgX19wZ3Byb3QoeCkJKChwZ3Byb3RfdCkgeyAoeCkgfSApCisKKyNlbHNlCisvKgorICogLi4gd2hpbGUgdGhlc2UgbWFrZSBpdCBlYXNpZXIgb24gdGhlIGNvbXBpbGVyCisgKi8KK3R5cGVkZWYgcHRlX2Jhc2ljX3QgcHRlX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgcG1kX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgcGdkX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgcGdwcm90X3Q7CisKKyNkZWZpbmUgcHRlX3ZhbCh4KQkoeCkKKyNkZWZpbmUgcG1kX3ZhbCh4KQkoeCkKKyNkZWZpbmUgcGdkX3ZhbCh4KQkoeCkKKyNkZWZpbmUgcGdwcm90X3ZhbCh4KQkoeCkKKworI2RlZmluZSBfX3B0ZSh4KQkoeCkKKyNkZWZpbmUgX19wbWQoeCkJKHgpCisjZGVmaW5lIF9fcGdkKHgpCSh4KQorI2RlZmluZSBfX3BncHJvdCh4KQkoeCkKKworI2VuZGlmCisKKworLyogYWxpZ24gYWRkciBvbiBhIHNpemUgYm91bmRhcnkgLSBhZGp1c3QgYWRkcmVzcyB1cCBpZiBuZWVkZWQgLS0gQ29ydCAqLworI2RlZmluZSBfQUxJR04oYWRkcixzaXplKQkoKChhZGRyKSsoc2l6ZSktMSkmKH4oKHNpemUpLTEpKSkKKworLyogdG8gYWxpZ24gdGhlIHBvaW50ZXIgdG8gdGhlIChuZXh0KSBwYWdlIGJvdW5kYXJ5ICovCisjZGVmaW5lIFBBR0VfQUxJR04oYWRkcikJKCgoYWRkcikrUEFHRV9TSVpFLTEpJlBBR0VfTUFTSykKKworc3RydWN0IHBhZ2U7CitleHRlcm4gdm9pZCBjbGVhcl9wYWdlcyh2b2lkICpwYWdlLCBpbnQgb3JkZXIpOworc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3BhZ2Uodm9pZCAqcGFnZSkgeyBjbGVhcl9wYWdlcyhwYWdlLCAwKTsgfQorZXh0ZXJuIHZvaWQgY29weV9wYWdlKHZvaWQgKnRvLCB2b2lkICpmcm9tKTsKK2V4dGVybiB2b2lkIGNsZWFyX3VzZXJfcGFnZSh2b2lkICpwYWdlLCB1bnNpZ25lZCBsb25nIHZhZGRyLCBzdHJ1Y3QgcGFnZSAqcGcpOworZXh0ZXJuIHZvaWQgY29weV91c2VyX3BhZ2Uodm9pZCAqdG8sIHZvaWQgKmZyb20sIHVuc2lnbmVkIGxvbmcgdmFkZHIsCisJCQkgICBzdHJ1Y3QgcGFnZSAqcGcpOworCisjaWZuZGVmIENPTkZJR19BUFVTCisjZGVmaW5lIFBQQ19NRU1TVEFSVAkwCisjZGVmaW5lIFBQQ19QR1NUQVJUCTAKKyNkZWZpbmUgUFBDX01FTU9GRlNFVAlQQUdFX09GRlNFVAorI2Vsc2UKK2V4dGVybiB1bnNpZ25lZCBsb25nIHBwY19tZW1zdGFydDsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHBwY19wZ3N0YXJ0OworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcHBjX21lbW9mZnNldDsKKyNkZWZpbmUgUFBDX01FTVNUQVJUCXBwY19tZW1zdGFydAorI2RlZmluZSBQUENfUEdTVEFSVAlwcGNfcGdzdGFydAorI2RlZmluZSBQUENfTUVNT0ZGU0VUCXBwY19tZW1vZmZzZXQKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfQVBVUykgJiYgIWRlZmluZWQoTU9EVUxFKQorLyogbWFwIHBoeXMtPnZpcnR1YWwgYW5kIHZpcnR1YWwtPnBoeXMgZm9yIFJBTSBwYWdlcyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fX3BhKHVuc2lnbmVkIGxvbmcgdikKK3sKKwl1bnNpZ25lZCBsb25nIHA7CisJYXNtIHZvbGF0aWxlICgiMTogYWRkaXMgJTAsICUxLCAlMjsiCisJCSAgICAgICIuc2VjdGlvbiBcIi52dG9wX2ZpeHVwXCIsXCJhd1wiOyIKKwkJICAgICAgIi5hbGlnbiAgMTsiCisJCSAgICAgICIubG9uZyAgIDFiOyIKKwkJICAgICAgIi5wcmV2aW91czsiCisJCSAgICAgIDogIj1yIiAocCkKKwkJICAgICAgOiAiYiIgKHYpLCAiSyIgKCgoLVBBR0VfT0ZGU0VUKSA+PiAxNikgJiAweGZmZmYpKTsKKworCXJldHVybiBwOworfQorc3RhdGljIGlubGluZSB2b2lkKiBfX192YSh1bnNpZ25lZCBsb25nIHApCit7CisJdW5zaWduZWQgbG9uZyB2OworCWFzbSB2b2xhdGlsZSAoIjE6IGFkZGlzICUwLCAlMSwgJTI7IgorCQkgICAgICAiLnNlY3Rpb24gXCIucHRvdl9maXh1cFwiLFwiYXdcIjsiCisJCSAgICAgICIuYWxpZ24gIDE7IgorCQkgICAgICAiLmxvbmcgICAxYjsiCisJCSAgICAgICIucHJldmlvdXM7IgorCQkgICAgICA6ICI9ciIgKHYpCisJCSAgICAgIDogImIiIChwKSwgIksiICgoKFBBR0VfT0ZGU0VUKSA+PiAxNikgJiAweGZmZmYpKTsKKworCXJldHVybiAodm9pZCopIHY7Cit9CisjZWxzZQorI2RlZmluZSBfX19wYSh2YWRkcikgKCh2YWRkciktUFBDX01FTU9GRlNFVCkKKyNkZWZpbmUgX19fdmEocGFkZHIpICgocGFkZHIpK1BQQ19NRU1PRkZTRVQpCisjZW5kaWYKKworZXh0ZXJuIGludCBwYWdlX2lzX3JhbSh1bnNpZ25lZCBsb25nIHBmbik7CisKKyNkZWZpbmUgX19wYSh4KSBfX19wYSgodW5zaWduZWQgbG9uZykoeCkpCisjZGVmaW5lIF9fdmEoeCkgKCh2b2lkICopKF9fX3ZhKCh1bnNpZ25lZCBsb25nKSh4KSkpKQorCisjZGVmaW5lIHBmbl90b19wYWdlKHBmbikJKG1lbV9tYXAgKyAoKHBmbikgLSBQUENfUEdTVEFSVCkpCisjZGVmaW5lIHBhZ2VfdG9fcGZuKHBhZ2UpCSgodW5zaWduZWQgbG9uZykoKHBhZ2UpIC0gbWVtX21hcCkgKyBQUENfUEdTVEFSVCkKKyNkZWZpbmUgdmlydF90b19wYWdlKGthZGRyKQlwZm5fdG9fcGFnZShfX3BhKGthZGRyKSA+PiBQQUdFX1NISUZUKQorI2RlZmluZSBwYWdlX3RvX3ZpcnQocGFnZSkJX192YShwYWdlX3RvX3BmbihwYWdlKSA8PCBQQUdFX1NISUZUKQorCisjZGVmaW5lIHBmbl92YWxpZChwZm4pCQkoKChwZm4pIC0gUFBDX1BHU1RBUlQpIDwgbWF4X21hcG5yKQorI2RlZmluZSB2aXJ0X2FkZHJfdmFsaWQoa2FkZHIpCXBmbl92YWxpZChfX3BhKGthZGRyKSA+PiBQQUdFX1NISUZUKQorCisvKiBQdXJlIDJebiB2ZXJzaW9uIG9mIGdldF9vcmRlciAqLworZXh0ZXJuIF9faW5saW5lX18gaW50IGdldF9vcmRlcih1bnNpZ25lZCBsb25nIHNpemUpCit7CisJaW50IGx6OworCisJc2l6ZSA9IChzaXplLTEpID4+IFBBR0VfU0hJRlQ7CisJYXNtICgiY250bHp3ICUwLCUxIiA6ICI9ciIgKGx6KSA6ICJyIiAoc2l6ZSkpOworCXJldHVybiAzMiAtIGx6OworfQorCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKyNkZWZpbmUgVk1fREFUQV9ERUZBVUxUX0ZMQUdTCShWTV9SRUFEIHwgVk1fV1JJVEUgfCBWTV9FWEVDIHwgXAorCQkJCSBWTV9NQVlSRUFEIHwgVk1fTUFZV1JJVEUgfCBWTV9NQVlFWEVDKQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9QUENfUEFHRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvcGFyYW0uaCBiL2luY2x1ZGUvYXNtLXBwYy9wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyNGE0ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGMvcGFyYW0uaApAQCAtMCwwICsxLDIyIEBACisjaWZuZGVmIF9BU01fUFBDX1BBUkFNX0gKKyNkZWZpbmUgX0FTTV9QUENfUEFSQU1fSAorCisjaWZkZWYgX19LRVJORUxfXworI2RlZmluZSBIWgkJMTAwMAkJLyogaW50ZXJuYWwgdGltZXIgZnJlcXVlbmN5ICovCisjZGVmaW5lIFVTRVJfSFoJCTEwMAkJLyogZm9yIHVzZXIgaW50ZXJmYWNlcyBpbiAidGlja3MiICovCisjZGVmaW5lIENMT0NLU19QRVJfU0VDCShVU0VSX0haKQkvKiBmcmVxdWVuY3kgYXQgd2hpY2ggdGltZXMoKSBjb3VudHMgKi8KKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNpZm5kZWYgSFoKKyNkZWZpbmUgSFogMTAwCisjZW5kaWYKKworI2RlZmluZSBFWEVDX1BBR0VTSVpFCTQwOTYKKworI2lmbmRlZiBOT0dST1VQCisjZGVmaW5lIE5PR1JPVVAJCSgtMSkKKyNlbmRpZgorCisjZGVmaW5lIE1BWEhPU1ROQU1FTEVOCTY0CS8qIG1heCBsZW5ndGggb2YgaG9zdG5hbWUgKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvcGFycG9ydC5oIGIvaW5jbHVkZS9hc20tcHBjL3BhcnBvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWY5NmQzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjL3BhcnBvcnQuaApAQCAtMCwwICsxLDE4IEBACisvKgorICogcGFycG9ydC5oOiBwbGF0Zm9ybS1zcGVjaWZpYyBQQy1zdHlsZSBwYXJwb3J0IGluaXRpYWxpc2F0aW9uCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwICBUaW0gV2F1Z2ggPHRpbUBjeWJlcmVsay5kZW1vbi5jby51az4KKyAqCisgKiBUaGlzIGZpbGUgc2hvdWxkIG9ubHkgYmUgaW5jbHVkZWQgYnkgZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfcGMuYy4KKyAqLworCisjaWZuZGVmIF9BU01fUFBDX1BBUlBPUlRfSAorI2RlZmluZSBfQVNNX1BQQ19QQVJQT1JUX0gKKworc3RhdGljIGludCBfX2RldmluaXQgcGFycG9ydF9wY19maW5kX2lzYV9wb3J0cyAoaW50IGF1dG9pcnEsIGludCBhdXRvZG1hKTsKK3N0YXRpYyBpbnQgX19kZXZpbml0IHBhcnBvcnRfcGNfZmluZF9ub25wY2lfcG9ydHMgKGludCBhdXRvaXJxLCBpbnQgYXV0b2RtYSkKK3sKKwlyZXR1cm4gcGFycG9ydF9wY19maW5kX2lzYV9wb3J0cyAoYXV0b2lycSwgYXV0b2RtYSk7Cit9CisKKyNlbmRpZiAvKiAhKF9BU01fUFBDX1BBUlBPUlRfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9wY19zZXJpYWwuaCBiL2luY2x1ZGUvYXNtLXBwYy9wY19zZXJpYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTljYmI2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjL3BjX3NlcmlhbC5oCkBAIC0wLDAgKzEsMTI3IEBACisvKgorICogaW5jbHVkZS9hc20tcHBjL3BjX3NlcmlhbC5oCisgKgorICogVGhpcyBpcyBiYXNpY2FsbHkgYSBjb3B5IG9mIGluY2x1ZGUvYXNtLWkzODYvc2VyaWFsLmguCisgKiBJdCBpcyB1c2VkIG9uIHBsYXRmb3JtcyB3aGljaCBoYXZlIGFuIElTQSBidXMgYW5kIHRodXMgYXJlIGxpa2VseQorICogdG8gaGF2ZSBQQy1zdHlsZSBzZXJpYWwgcG9ydHMgYXQgdGhlIGxlZ2FjeSBJL08gcG9ydCBhZGRyZXNzZXMuCisgKiBJdCBhbHNvIGluY2x1ZGVzIHRoZSBkZWZpbml0aW9ucyBmb3IgdGhlIGZvdXJwb3J0LCBhY2NlbnQsIGJvY2EKKyAqIGFuZCBodWI2IG11bHRpcG9ydCBzZXJpYWwgY2FyZHMsIGFsdGhvdWdoIEkgaGF2ZSBuZXZlciBoZWFyZCBvZgorICogYW55b25lIHVzaW5nIGFueSBvZiB0aG9zZSBvbiBhIFBQQyBwbGF0Zm9ybS4gIC0tIHBhdWx1cworICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworLyoKKyAqIFRoaXMgYXNzdW1lcyB5b3UgaGF2ZSBhIDEuODQzMiBNSHogY2xvY2sgZm9yIHlvdXIgVUFSVC4KKyAqCisgKiBJdCdkIGJlIG5pY2UgaWYgc29tZW9uZSBidWlsdCBhIHNlcmlhbCBjYXJkIHdpdGggYSAyNC41NzYgTUh6CisgKiBjbG9jaywgc2luY2UgdGhlIDE2NTUwQSBpcyBjYXBhYmxlIG9mIGhhbmRsaW5nIGEgdG9wIHNwZWVkIG9mIDEuNQorICogbWVnYWJpdHMvc2Vjb25kOyBidXQgdGhpcyByZXF1aXJlcyB0aGUgZmFzdGVyIGNsb2NrLgorICovCisjZGVmaW5lIEJBU0VfQkFVRCAoIDE4NDMyMDAgLyAxNiApCisKKyNpZmRlZiBDT05GSUdfU0VSSUFMX01BTllfUE9SVFMKKyNkZWZpbmUgUlNfVEFCTEVfU0laRSAgNjQKKyNlbHNlCisjZGVmaW5lIFJTX1RBQkxFX1NJWkUgIDQKKyNlbmRpZgorCisvKiBTdGFuZGFyZCBDT00gZmxhZ3MgKGV4Y2VwdCBmb3IgQ09NNCwgYmVjYXVzZSBvZiB0aGUgODUxNCBwcm9ibGVtKSAqLworI2lmZGVmIENPTkZJR19TRVJJQUxfREVURUNUX0lSUQorI2RlZmluZSBTVERfQ09NX0ZMQUdTIChBU1lOQ19CT09UX0FVVE9DT05GIHwgQVNZTkNfU0tJUF9URVNUIHwgQVNZTkNfQVVUT19JUlEpCisjZGVmaW5lIFNURF9DT000X0ZMQUdTIChBU1lOQ19CT09UX0FVVE9DT05GIHwgQVNZTkNfQVVUT19JUlEpCisjZWxzZQorI2RlZmluZSBTVERfQ09NX0ZMQUdTIChBU1lOQ19CT09UX0FVVE9DT05GIHwgQVNZTkNfU0tJUF9URVNUKQorI2RlZmluZSBTVERfQ09NNF9GTEFHUyBBU1lOQ19CT09UX0FVVE9DT05GCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19TRVJJQUxfTUFOWV9QT1JUUworI2RlZmluZSBGT1VSUE9SVF9GTEFHUyBBU1lOQ19GT1VSUE9SVAorI2RlZmluZSBBQ0NFTlRfRkxBR1MgMAorI2RlZmluZSBCT0NBX0ZMQUdTIDAKKyNkZWZpbmUgSFVCNl9GTEFHUyAwCisjZW5kaWYKKwkKKy8qCisgKiBUaGUgZm9sbG93aW5nIGRlZmluZSB0aGUgYWNjZXNzIG1ldGhvZHMgZm9yIHRoZSBIVUI2IGNhcmQuIEFsbAorICogYWNjZXNzIGlzIHRocm91Z2ggdHdvIHBvcnRzIGZvciBhbGwgMjQgcG9zc2libGUgY2hpcHMuIFRoZSBjYXJkIGlzCisgKiBzZWxlY3RlZCB0aHJvdWdoIHRoZSBoaWdoIDIgYml0cywgdGhlIHBvcnQgb24gdGhhdCBjYXJkIHdpdGggdGhlCisgKiAibWlkZGxlIiAzIGJpdHMsIGFuZCB0aGUgcmVnaXN0ZXIgb24gdGhhdCBwb3J0IHdpdGggdGhlIGJvdHRvbQorICogMyBiaXRzLgorICoKKyAqIFdoaWxlIHRoZSBhY2Nlc3MgcG9ydCBhbmQgaW50ZXJydXB0IGlzIGNvbmZpZ3VyYWJsZSwgdGhlIGRlZmF1bHQKKyAqIHBvcnQgbG9jYXRpb25zIGFyZSAweDMwMiBmb3IgdGhlIHBvcnQgY29udHJvbCByZWdpc3RlciwgYW5kIDB4MzAzCisgKiBmb3IgdGhlIGRhdGEgcmVhZC93cml0ZSByZWdpc3Rlci4gTm9ybWFsbHksIHRoZSBpbnRlcnJ1cHQgaXMgYXQgaXJxMworICogYnV0IGNhbiBiZSBhbnl0aGluZyBmcm9tIDMgdG8gNyBpbmNsdXNpdmUuIE5vdGUgdGhhdCB1c2luZyAzIHdpbGwKKyAqIHJlcXVpcmUgZGlzYWJsaW5nIGNvbTIuCisgKi8KKworI2RlZmluZSBDX1AoY2FyZCxwb3J0KSAoKChjYXJkKTw8NnwocG9ydCk8PDMpICsgMSkKKworI2RlZmluZSBTVERfU0VSSUFMX1BPUlRfREVGTlMJCQlcCisJLyogVUFSVCBDTEsgICBQT1JUIElSUSAgICAgRkxBR1MgICAgICAgICovCQkJXAorCXsgMCwgQkFTRV9CQVVELCAweDNGOCwgNCwgU1REX0NPTV9GTEFHUyB9LAkvKiB0dHlTMCAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MkY4LCAzLCBTVERfQ09NX0ZMQUdTIH0sCS8qIHR0eVMxICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgzRTgsIDQsIFNURF9DT01fRkxBR1MgfSwJLyogdHR5UzIgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDJFOCwgMywgU1REX0NPTTRfRkxBR1MgfSwJLyogdHR5UzMgKi8KKworCisjaWZkZWYgQ09ORklHX1NFUklBTF9NQU5ZX1BPUlRTCisjZGVmaW5lIEVYVFJBX1NFUklBTF9QT1JUX0RFRk5TCQkJXAorCXsgMCwgQkFTRV9CQVVELCAweDFBMCwgOSwgRk9VUlBPUlRfRkxBR1MgfSwgCS8qIHR0eVM0ICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgxQTgsIDksIEZPVVJQT1JUX0ZMQUdTIH0sCS8qIHR0eVM1ICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgxQjAsIDksIEZPVVJQT1JUX0ZMQUdTIH0sCS8qIHR0eVM2ICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgxQjgsIDksIEZPVVJQT1JUX0ZMQUdTIH0sCS8qIHR0eVM3ICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgyQTAsIDUsIEZPVVJQT1JUX0ZMQUdTIH0sCS8qIHR0eVM4ICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgyQTgsIDUsIEZPVVJQT1JUX0ZMQUdTIH0sCS8qIHR0eVM5ICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgyQjAsIDUsIEZPVVJQT1JUX0ZMQUdTIH0sCS8qIHR0eVMxMCAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MkI4LCA1LCBGT1VSUE9SVF9GTEFHUyB9LAkvKiB0dHlTMTEgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDMzMCwgNCwgQUNDRU5UX0ZMQUdTIH0sCS8qIHR0eVMxMiAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MzM4LCA0LCBBQ0NFTlRfRkxBR1MgfSwJLyogdHR5UzEzICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgwMDAsIDAsIDAgfSwJLyogdHR5UzE0IChzcGFyZSkgKi8JCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgwMDAsIDAsIDAgfSwJLyogdHR5UzE1IChzcGFyZSkgKi8JCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgxMDAsIDEyLCBCT0NBX0ZMQUdTIH0sCS8qIHR0eVMxNiAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MTA4LCAxMiwgQk9DQV9GTEFHUyB9LAkvKiB0dHlTMTcgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDExMCwgMTIsIEJPQ0FfRkxBR1MgfSwJLyogdHR5UzE4ICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgxMTgsIDEyLCBCT0NBX0ZMQUdTIH0sCS8qIHR0eVMxOSAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MTIwLCAxMiwgQk9DQV9GTEFHUyB9LAkvKiB0dHlTMjAgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDEyOCwgMTIsIEJPQ0FfRkxBR1MgfSwJLyogdHR5UzIxICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgxMzAsIDEyLCBCT0NBX0ZMQUdTIH0sCS8qIHR0eVMyMiAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MTM4LCAxMiwgQk9DQV9GTEFHUyB9LAkvKiB0dHlTMjMgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDE0MCwgMTIsIEJPQ0FfRkxBR1MgfSwJLyogdHR5UzI0ICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgxNDgsIDEyLCBCT0NBX0ZMQUdTIH0sCS8qIHR0eVMyNSAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MTUwLCAxMiwgQk9DQV9GTEFHUyB9LAkvKiB0dHlTMjYgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDE1OCwgMTIsIEJPQ0FfRkxBR1MgfSwJLyogdHR5UzI3ICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgxNjAsIDEyLCBCT0NBX0ZMQUdTIH0sCS8qIHR0eVMyOCAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MTY4LCAxMiwgQk9DQV9GTEFHUyB9LAkvKiB0dHlTMjkgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDE3MCwgMTIsIEJPQ0FfRkxBR1MgfSwJLyogdHR5UzMwICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgxNzgsIDEyLCBCT0NBX0ZMQUdTIH0sCS8qIHR0eVMzMSAqLworI2Vsc2UKKyNkZWZpbmUgRVhUUkFfU0VSSUFMX1BPUlRfREVGTlMKKyNlbmRpZgorCisvKiBZb3UgY2FuIGhhdmUgdXAgdG8gZm91ciBIVUI2J3MgaW4gdGhlIHN5c3RlbSwgYnV0IEkndmUgb25seQorICogaW5jbHVkZWQgdHdvIGNhcmRzIGhlcmUgZm9yIGEgdG90YWwgb2YgdHdlbHZlIHBvcnRzLgorICovCisjaWYgKGRlZmluZWQoQ09ORklHX0hVQjYpICYmIGRlZmluZWQoQ09ORklHX1NFUklBTF9NQU5ZX1BPUlRTKSkKKyNkZWZpbmUgSFVCNl9TRVJJQUxfUE9SVF9ERk5TCQlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MzAyLCAzLCBIVUI2X0ZMQUdTLCBDX1AoMCwwKSB9LCAgLyogdHR5UzMyICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgzMDIsIDMsIEhVQjZfRkxBR1MsIENfUCgwLDEpIH0sICAvKiB0dHlTMzMgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDMwMiwgMywgSFVCNl9GTEFHUywgQ19QKDAsMikgfSwgIC8qIHR0eVMzNCAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MzAyLCAzLCBIVUI2X0ZMQUdTLCBDX1AoMCwzKSB9LCAgLyogdHR5UzM1ICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgzMDIsIDMsIEhVQjZfRkxBR1MsIENfUCgwLDQpIH0sICAvKiB0dHlTMzYgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDMwMiwgMywgSFVCNl9GTEFHUywgQ19QKDAsNSkgfSwgIC8qIHR0eVMzNyAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MzAyLCAzLCBIVUI2X0ZMQUdTLCBDX1AoMSwwKSB9LCAgLyogdHR5UzM4ICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgzMDIsIDMsIEhVQjZfRkxBR1MsIENfUCgxLDEpIH0sICAvKiB0dHlTMzkgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDMwMiwgMywgSFVCNl9GTEFHUywgQ19QKDEsMikgfSwgIC8qIHR0eVM0MCAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MzAyLCAzLCBIVUI2X0ZMQUdTLCBDX1AoMSwzKSB9LCAgLyogdHR5UzQxICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgzMDIsIDMsIEhVQjZfRkxBR1MsIENfUCgxLDQpIH0sICAvKiB0dHlTNDIgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDMwMiwgMywgSFVCNl9GTEFHUywgQ19QKDEsNSkgfSwgIC8qIHR0eVM0MyAqLworI2Vsc2UKKyNkZWZpbmUgSFVCNl9TRVJJQUxfUE9SVF9ERk5TCisjZW5kaWYKKworI2RlZmluZSBTRVJJQUxfUE9SVF9ERk5TCQlcCisJU1REX1NFUklBTF9QT1JUX0RFRk5TCQlcCisJRVhUUkFfU0VSSUFMX1BPUlRfREVGTlMJCVwKKwlIVUI2X1NFUklBTF9QT1JUX0RGTlMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9wY2ktYnJpZGdlLmggYi9pbmNsdWRlL2FzbS1wcGMvcGNpLWJyaWRnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4ZTliZTYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGMvcGNpLWJyaWRnZS5oCkBAIC0wLDAgKzEsMTM2IEBACisjaWZkZWYgX19LRVJORUxfXworI2lmbmRlZiBfQVNNX1BDSV9CUklER0VfSAorI2RlZmluZSBfQVNNX1BDSV9CUklER0VfSAorCisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisKK3N0cnVjdCBkZXZpY2Vfbm9kZTsKK3N0cnVjdCBwY2lfY29udHJvbGxlcjsKKworLyoKKyAqIHBjaV9pb19iYXNlIHJldHVybnMgdGhlIG1lbW9yeSBhZGRyZXNzIGF0IHdoaWNoIHlvdSBjYW4gYWNjZXNzCisgKiB0aGUgSS9PIHNwYWNlIGZvciBQQ0kgYnVzIG51bWJlciBgYnVzJyAob3IgTlVMTCBvbiBlcnJvcikuCisgKi8KK2V4dGVybiB2b2lkICpwY2lfYnVzX2lvX2Jhc2UodW5zaWduZWQgaW50IGJ1cyk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBwY2lfYnVzX2lvX2Jhc2VfcGh5cyh1bnNpZ25lZCBpbnQgYnVzKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHBjaV9idXNfbWVtX2Jhc2VfcGh5cyh1bnNpZ25lZCBpbnQgYnVzKTsKKworLyogQWxsb2NhdGUgYSBuZXcgUENJIGhvc3QgYnJpZGdlIHN0cnVjdHVyZSAqLworZXh0ZXJuIHN0cnVjdCBwY2lfY29udHJvbGxlciogcGNpYmlvc19hbGxvY19jb250cm9sbGVyKHZvaWQpOworCisvKiBIZWxwZXIgZnVuY3Rpb24gZm9yIHNldHRpbmcgdXAgcmVzb3VyY2VzICovCitleHRlcm4gdm9pZCBwY2lfaW5pdF9yZXNvdXJjZShzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgdW5zaWduZWQgbG9uZyBzdGFydCwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCBpbnQgZmxhZ3MsIGNoYXIgKm5hbWUpOworCisvKiBHZXQgdGhlIFBDSSBob3N0IGNvbnRyb2xsZXIgZm9yIGEgYnVzICovCitleHRlcm4gc3RydWN0IHBjaV9jb250cm9sbGVyKiBwY2lfYnVzX3RvX2hvc2UoaW50IGJ1cyk7CisKKy8qIEdldCB0aGUgUENJIGhvc3QgY29udHJvbGxlciBmb3IgYW4gT0YgZGV2aWNlICovCitleHRlcm4gc3RydWN0IHBjaV9jb250cm9sbGVyKgorcGNpX2ZpbmRfaG9zZV9mb3JfT0ZfZGV2aWNlKHN0cnVjdCBkZXZpY2Vfbm9kZSogbm9kZSk7CisKKy8qIEZpbGwgdXAgaG9zdCBjb250cm9sbGVyIHJlc291cmNlcyBmcm9tIHRoZSBPRiBub2RlICovCitleHRlcm4gdm9pZAorcGNpX3Byb2Nlc3NfYnJpZGdlX09GX3JhbmdlcyhzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UsCisJCQkgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldiwgaW50IHByaW1hcnkpOworCisvKgorICogU3RydWN0dXJlIG9mIGEgUENJIGNvbnRyb2xsZXIgKGhvc3QgYnJpZGdlKQorICovCitzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgeworCWludCBpbmRleDsJCQkvKiBQQ0kgZG9tYWluIG51bWJlciAqLworCXN0cnVjdCBwY2lfY29udHJvbGxlciAqbmV4dDsKKyAgICAgICAgc3RydWN0IHBjaV9idXMgKmJ1czsKKwl2b2lkICphcmNoX2RhdGE7CisKKwlpbnQgZmlyc3RfYnVzbm87CisJaW50IGxhc3RfYnVzbm87CisJaW50IGJ1c19vZmZzZXQ7CisKKwl2b2lkICppb19iYXNlX3ZpcnQ7CisJdW5zaWduZWQgbG9uZyBpb19iYXNlX3BoeXM7CisKKwkvKiBTb21lIG1hY2hpbmVzIChQUmVQKSBoYXZlIGEgbm9uIDE6MSBtYXBwaW5nIG9mCisJICogdGhlIFBDSSBtZW1vcnkgc3BhY2UgaW4gdGhlIENQVSBidXMgc3BhY2UKKwkgKi8KKwl1bnNpZ25lZCBsb25nIHBjaV9tZW1fb2Zmc2V0OworCisJc3RydWN0IHBjaV9vcHMgKm9wczsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgX19pb21lbSAqY2ZnX2FkZHI7CisJdm9sYXRpbGUgdm9pZCBfX2lvbWVtICpjZmdfZGF0YTsKKwkvKgorCSAqIElmIHNldCwgaW5kaXJlY3QgbWV0aG9kIHdpbGwgc2V0IHRoZSBjZmdfdHlwZSBiaXQgYXMKKwkgKiBuZWVkZWQgdG8gZ2VuZXJhdGUgdHlwZSAxIGNvbmZpZ3VyYXRpb24gdHJhbnNhY3Rpb25zLgorCSAqLworCWludCBzZXRfY2ZnX3R5cGU7CisKKwkvKiBDdXJyZW50bHksIHdlIGxpbWl0IG91cnNlbHZlcyB0byAxIElPIHJhbmdlIGFuZCAzIG1lbQorCSAqIHJhbmdlcyBzaW5jZSB0aGUgY29tbW9uIHBjaV9idXMgc3RydWN0dXJlIGNhbid0IGhhbmRsZSBtb3JlCisJICovCisJc3RydWN0IHJlc291cmNlCWlvX3Jlc291cmNlOworCXN0cnVjdCByZXNvdXJjZSBtZW1fcmVzb3VyY2VzWzNdOworCWludCBtZW1fcmVzb3VyY2VfY291bnQ7CisKKwkvKiBIb3N0IGJyaWRnZSBJL08gYW5kIE1lbW9yeSBzcGFjZQorCSAqIFVzZWQgZm9yIEJBUiBwbGFjZW1lbnQgYWxnb3JpdGhtcworCSAqLworCXN0cnVjdCByZXNvdXJjZSBpb19zcGFjZTsKKwlzdHJ1Y3QgcmVzb3VyY2UgbWVtX3NwYWNlOworfTsKKworLyogVGhlc2UgYXJlIHVzZWQgZm9yIGNvbmZpZyBhY2Nlc3MgYmVmb3JlIGFsbCB0aGUgUENJIHByb2JpbmcKKyAgIGhhcyBiZWVuIGRvbmUuICovCitpbnQgZWFybHlfcmVhZF9jb25maWdfYnl0ZShzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UsIGludCBidXMsIGludCBkZXZfZm4sCisJCQkgICBpbnQgd2hlcmUsIHU4ICp2YWwpOworaW50IGVhcmx5X3JlYWRfY29uZmlnX3dvcmQoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlLCBpbnQgYnVzLCBpbnQgZGV2X2ZuLAorCQkJICAgaW50IHdoZXJlLCB1MTYgKnZhbCk7CitpbnQgZWFybHlfcmVhZF9jb25maWdfZHdvcmQoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlLCBpbnQgYnVzLCBpbnQgZGV2X2ZuLAorCQkJICAgIGludCB3aGVyZSwgdTMyICp2YWwpOworaW50IGVhcmx5X3dyaXRlX2NvbmZpZ19ieXRlKHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSwgaW50IGJ1cywgaW50IGRldl9mbiwKKwkJCSAgICBpbnQgd2hlcmUsIHU4IHZhbCk7CitpbnQgZWFybHlfd3JpdGVfY29uZmlnX3dvcmQoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlLCBpbnQgYnVzLCBpbnQgZGV2X2ZuLAorCQkJICAgIGludCB3aGVyZSwgdTE2IHZhbCk7CitpbnQgZWFybHlfd3JpdGVfY29uZmlnX2R3b3JkKHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSwgaW50IGJ1cywgaW50IGRldl9mbiwKKwkJCSAgICAgaW50IHdoZXJlLCB1MzIgdmFsKTsKKworZXh0ZXJuIHZvaWQgc2V0dXBfaW5kaXJlY3RfcGNpX25vbWFwKHN0cnVjdCBwY2lfY29udHJvbGxlciogaG9zZSwKKwkJCSAgICAgICB2b2lkIF9faW9tZW0gKmNmZ19hZGRyLCB2b2lkIF9faW9tZW0gKmNmZ19kYXRhKTsKK2V4dGVybiB2b2lkIHNldHVwX2luZGlyZWN0X3BjaShzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIqIGhvc2UsCisJCQkgICAgICAgdTMyIGNmZ19hZGRyLCB1MzIgY2ZnX2RhdGEpOworZXh0ZXJuIHZvaWQgc2V0dXBfZ3JhY2tsZShzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UpOworCitleHRlcm4gdW5zaWduZWQgY2hhciBjb21tb25fc3dpenpsZShzdHJ1Y3QgcGNpX2RldiAqLCB1bnNpZ25lZCBjaGFyICopOworCisvKgorICogICBUaGUgZm9sbG93aW5nIGNvZGUgc3dpenpsZXMgZm9yIGV4YWN0bHkgb25lIGJyaWRnZS4gIFRoZSByb3V0aW5lCisgKiAgIGNvbW1vbl9zd2l6emxlIGJlbG93IGhhbmRsZXMgbXVsdGlwbGUgYnJpZGdlcy4gIEJ1dCB0aGVyZSBhcmUgYQorICogICBzb21lIGJvYXJkcyB0aGF0IGRvbid0IGZvbGxvdyB0aGUgUENJIHNwZWMncyBzdWdnZXN0aW9uIHNvIHdlCisgKiAgIGJyZWFrIHRoaXMgcGllY2Ugb3V0IHNlcGFyYXRlbHkuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciBicmlkZ2Vfc3dpenpsZSh1bnNpZ25lZCBjaGFyIHBpbiwKKwkJdW5zaWduZWQgY2hhciBpZHNlbCkKK3sKKwlyZXR1cm4gKCgocGluLTEpICsgaWRzZWwpICUgNCkgKyAxOworfQorCisvKgorICogVGhlIGZvbGxvd2luZyBtYWNybyBpcyB1c2VkIHRvIGxvb2t1cCBpcnFzIGluIGEgc3RhbmRhcmQgdGFibGUKKyAqIGZvcm1hdCBmb3IgdGhvc2UgUFBDIHN5c3RlbXMgdGhhdCBkbyBub3QgYWxyZWFkeSBoYXZlIFBDSQorICogaW50ZXJydXB0cyBwcm9wZXJseSByb3V0ZWQuCisgKi8KKy8qIEZJWE1FIC0gZG91YmxlIGNoZWNrIHRoaXMgKi8KKyNkZWZpbmUgUENJX0lSUV9UQUJMRV9MT09LVVAJCQkJCQkgICAgXAorKHsgbG9uZyBfY3RsXyA9IC0xOyAJCQkJCQkJICAgIFwKKyAgIGlmIChpZHNlbCA+PSBtaW5faWRzZWwgJiYgaWRzZWwgPD0gbWF4X2lkc2VsICYmIHBpbiA8PSBpcnFzX3Blcl9zbG90KSAgICBcCisgICAgIF9jdGxfID0gcGNpX2lycV90YWJsZVtpZHNlbCAtIG1pbl9pZHNlbF1bcGluLTFdOwkJCSAgICBcCisgICBfY3RsXzsgfSkKKworLyoKKyAqIFNjYW4gdGhlIGJ1c2VzIGJlbG93IGEgZ2l2ZW4gUENJIGhvc3QgYnJpZGdlIGFuZCBhc3NpZ24gc3VpdGFibGUKKyAqIHJlc291cmNlcyB0byBhbGwgZGV2aWNlcyBmb3VuZC4KKyAqLworZXh0ZXJuIGludCBwY2lhdXRvX2J1c19zY2FuKHN0cnVjdCBwY2lfY29udHJvbGxlciAqLCBpbnQpOworCisjZW5kaWYKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvcGNpLmggYi9pbmNsdWRlL2FzbS1wcGMvcGNpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U1YWU2ZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9wY2kuaApAQCAtMCwwICsxLDEwOCBAQAorI2lmbmRlZiBfX1BQQ19QQ0lfSAorI2RlZmluZSBfX1BQQ19QQ0lfSAorI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3BjaS1icmlkZ2UuaD4KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wY2ktZG1hLWNvbXBhdC5oPgorCitzdHJ1Y3QgcGNpX2RldjsKKworLyogVmFsdWVzIGZvciB0aGUgYHdoaWNoJyBhcmd1bWVudCB0byBzeXNfcGNpY29uZmlnX2lvYmFzZSBzeXNjYWxsLiAgKi8KKyNkZWZpbmUgSU9CQVNFX0JSSURHRV9OVU1CRVIJMAorI2RlZmluZSBJT0JBU0VfTUVNT1JZCQkxCisjZGVmaW5lIElPQkFTRV9JTwkJMgorI2RlZmluZSBJT0JBU0VfSVNBX0lPCQkzCisjZGVmaW5lIElPQkFTRV9JU0FfTUVNCQk0CisKKy8qCisgKiBTZXQgdGhpcyB0byAxIGlmIHlvdSB3YW50IHRoZSBrZXJuZWwgdG8gcmUtYXNzaWduIGFsbCBQQ0kKKyAqIGJ1cyBudW1iZXJzCisgKi8KK2V4dGVybiBpbnQgcGNpX2Fzc2lnbl9hbGxfYnVzc2VzOworCisjZGVmaW5lIHBjaWJpb3NfYXNzaWduX2FsbF9idXNzZXMoKQkocGNpX2Fzc2lnbl9hbGxfYnVzc2VzKQorI2RlZmluZSBwY2liaW9zX3NjYW5fYWxsX2ZucyhhLCBiKQkwCisKKyNkZWZpbmUgUENJQklPU19NSU5fSU8JCTB4MTAwMAorI2RlZmluZSBQQ0lCSU9TX01JTl9NRU0JCTB4MTAwMDAwMDAKKworZXh0ZXJuIGlubGluZSB2b2lkIHBjaWJpb3Nfc2V0X21hc3RlcihzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCS8qIE5vIHNwZWNpYWwgYnVzIG1hc3RlcmluZyBzZXR1cCBoYW5kbGluZyAqLworfQorCitleHRlcm4gaW5saW5lIHZvaWQgcGNpYmlvc19wZW5hbGl6ZV9pc2FfaXJxKGludCBpcnEpCit7CisJLyogV2UgZG9uJ3QgZG8gZHluYW1pYyBQQ0kgSVJRIGFsbG9jYXRpb24gKi8KK30KKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGNpX3Jlc291cmNlX3RvX2J1cyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IHJlc291cmNlICpyZXMpOworCisvKgorICogVGhlIFBDSSBidXMgYnJpZGdlIGNhbiB0cmFuc2xhdGUgYWRkcmVzc2VzIGlzc3VlZCBieSB0aGUgcHJvY2Vzc29yKHMpCisgKiBpbnRvIGEgZGlmZmVyZW50IGFkZHJlc3Mgb24gdGhlIFBDSSBidXMuICBPbiAzMi1iaXQgY3B1cywgd2UgYXNzdW1lCisgKiB0aGlzIG1hcHBpbmcgaXMgMS0xLCBidXQgb24gNjQtYml0IHN5c3RlbXMgaXQgb2Z0ZW4gaXNuJ3QuCisgKgorICogT2Jzb2xldGUgISBEcml2ZXJzIHNob3VsZCBub3cgdXNlIHBjaV9yZXNvdXJjZV90b19idXMKKyAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGh5c190b19idXModW5zaWduZWQgbG9uZyBwYSk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBwY2lfcGh5c190b19idXModW5zaWduZWQgbG9uZyBwYSwgaW50IGJ1c25yKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHBjaV9idXNfdG9fcGh5cyh1bnNpZ25lZCBpbnQgYmEsIGludCBidXNucik7CisKKy8qIFRoZSBQQ0kgYWRkcmVzcyBzcGFjZSBkb2VzIGVxdWFsIHRoZSBwaHlzaWNhbCBtZW1vcnkKKyAqIGFkZHJlc3Mgc3BhY2UuICBUaGUgbmV0d29ya2luZyBhbmQgYmxvY2sgZGV2aWNlIGxheWVycyB1c2UKKyAqIHRoaXMgYm9vbGVhbiBmb3IgYm91bmNlIGJ1ZmZlciBkZWNpc2lvbnMuCisgKi8KKyNkZWZpbmUgUENJX0RNQV9CVVNfSVNfUEhZUyAgICAgKDEpCisKKy8qIHBjaV91bm1hcF97cGFnZSxzaW5nbGV9IGlzIGEgbm9wIHNvLi4uICovCisjZGVmaW5lIERFQ0xBUkVfUENJX1VOTUFQX0FERFIoQUREUl9OQU1FKQorI2RlZmluZSBERUNMQVJFX1BDSV9VTk1BUF9MRU4oTEVOX05BTUUpCisjZGVmaW5lIHBjaV91bm1hcF9hZGRyKFBUUiwgQUREUl9OQU1FKQkJKDApCisjZGVmaW5lIHBjaV91bm1hcF9hZGRyX3NldChQVFIsIEFERFJfTkFNRSwgVkFMKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHBjaV91bm1hcF9sZW4oUFRSLCBMRU5fTkFNRSkJCSgwKQorI2RlZmluZSBwY2lfdW5tYXBfbGVuX3NldChQVFIsIExFTl9OQU1FLCBWQUwpCWRvIHsgfSB3aGlsZSAoMCkKKworLyoKKyAqIEF0IHByZXNlbnQgdGhlcmUgYXJlIHZlcnkgZmV3IDMyLWJpdCBQUEMgbWFjaGluZXMgdGhhdCBjYW4gaGF2ZQorICogbWVtb3J5IGFib3ZlIHRoZSA0R0IgcG9pbnQsIGFuZCB3ZSBkb24ndCBzdXBwb3J0IHRoYXQuCisgKi8KKyNkZWZpbmUgcGNpX2RhY19kbWFfc3VwcG9ydGVkKHBjaV9kZXYsIG1hc2spCSgwKQorCisvKiBSZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBQQ0kgY29udHJvbGxlciBmb3IgZGV2aWNlIFBERVYuICovCisjZGVmaW5lIHBjaV9kb21haW5fbnIoYnVzKSAoKHN0cnVjdCBwY2lfY29udHJvbGxlciAqKShidXMpLT5zeXNkYXRhKS0+aW5kZXgKKworLyogU2V0IHRoZSBuYW1lIG9mIHRoZSBidXMgYXMgaXQgYXBwZWFycyBpbiAvcHJvYy9idXMvcGNpICovCitzdGF0aWMgaW5saW5lIGludCBwY2lfcHJvY19kb21haW4oc3RydWN0IHBjaV9idXMgKmJ1cykKK3sKKwlyZXR1cm4gMDsKK30KKworLyogTWFwIGEgcmFuZ2Ugb2YgUENJIG1lbW9yeSBvciBJL08gc3BhY2UgZm9yIGEgZGV2aWNlIGludG8gdXNlciBzcGFjZSAqLworaW50IHBjaV9tbWFwX3BhZ2VfcmFuZ2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJZW51bSBwY2lfbW1hcF9zdGF0ZSBtbWFwX3N0YXRlLCBpbnQgd3JpdGVfY29tYmluZSk7CisKKy8qIFRlbGwgZHJpdmVycy9wY2kvcHJvYy5jIHRoYXQgd2UgaGF2ZSBwY2lfbW1hcF9wYWdlX3JhbmdlKCkgKi8KKyNkZWZpbmUgSEFWRV9QQ0lfTU1BUAkxCisKK2V4dGVybiB2b2lkCitwY2liaW9zX3Jlc291cmNlX3RvX2J1cyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgcGNpX2J1c19yZWdpb24gKnJlZ2lvbiwKKwkJCXN0cnVjdCByZXNvdXJjZSAqcmVzKTsKKworZXh0ZXJuIHZvaWQgcGNpYmlvc19hZGRfcGxhdGZvcm1fZW50cmllcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKKworc3RydWN0IGZpbGU7CitleHRlcm4gcGdwcm90X3QJcGNpX3BoeXNfbWVtX2FjY2Vzc19wcm90KHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCQkgdW5zaWduZWQgbG9uZyBvZmZzZXQsCisJCQkJCSB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkJCSBwZ3Byb3RfdCBwcm90KTsKKworI2VuZGlmCS8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9fUFBDX1BDSV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvcGVyY3B1LmggYi9pbmNsdWRlL2FzbS1wcGMvcGVyY3B1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY2NjY3YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9wZXJjcHUuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19BUkNIX1BQQ19QRVJDUFVfXworI2RlZmluZSBfX0FSQ0hfUFBDX1BFUkNQVV9fCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wZXJjcHUuaD4KKworI2VuZGlmIC8qIF9fQVJDSF9QUENfUEVSQ1BVX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9wZXJmbW9uLmggYi9pbmNsdWRlL2FzbS1wcGMvcGVyZm1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlN2E4OWMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGMvcGVyZm1vbi5oCkBAIC0wLDAgKzEsMjIgQEAKKyNpZm5kZWYgX19QRVJGTU9OX0gKKyNkZWZpbmUgX19QRVJGTU9OX0gKKworZXh0ZXJuIHZvaWQgKCpwZXJmX2lycSkoc3RydWN0IHB0X3JlZ3MgKik7CisKK2ludCByZXF1ZXN0X3BlcmZtb25faXJxKHZvaWQgKCpoYW5kbGVyKShzdHJ1Y3QgcHRfcmVncyAqKSk7Cit2b2lkIGZyZWVfcGVyZm1vbl9pcnEodm9pZCk7CisKKyNpZmRlZiBDT05GSUdfRlNMX0JPT0tFCit2b2lkIGluaXRfcG1jX3N0b3AoaW50IGN0cik7Cit2b2lkIHNldF9wbWNfZXZlbnQoaW50IGN0ciwgaW50IGV2ZW50KTsKK3ZvaWQgc2V0X3BtY191c2VyX2tlcm5lbChpbnQgY3RyLCBpbnQgdXNlciwgaW50IGtlcm5lbCk7Cit2b2lkIHNldF9wbWNfbWFya2VkKGludCBjdHIsIGludCBtYXJrMCwgaW50IG1hcmsxKTsKK3ZvaWQgcG1jX3N0YXJ0X2N0cihpbnQgY3RyLCBpbnQgZW5hYmxlKTsKK3ZvaWQgcG1jX3N0YXJ0X2N0cnMoaW50IGVuYWJsZSk7Cit2b2lkIHBtY19zdG9wX2N0cnModm9pZCk7Cit2b2lkIGR1bXBfcG1jcyh2b2lkKTsKKworZXh0ZXJuIHN0cnVjdCBvcF9wcGMzMl9tb2RlbCBvcF9tb2RlbF9mc2xfYm9va2U7CisjZW5kaWYKKworI2VuZGlmIC8qIF9fUEVSRk1PTl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvcGdhbGxvYy5oIGIvaW5jbHVkZS9hc20tcHBjL3BnYWxsb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzFiNmRlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjL3BnYWxsb2MuaApAQCAtMCwwICsxLDQ0IEBACisjaWZkZWYgX19LRVJORUxfXworI2lmbmRlZiBfUFBDX1BHQUxMT0NfSAorI2RlZmluZSBfUFBDX1BHQUxMT0NfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorCitleHRlcm4gdm9pZCBfX2JhZF9wdGUocG1kX3QgKnBtZCk7CisKK2V4dGVybiBwZ2RfdCAqcGdkX2FsbG9jKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKK2V4dGVybiB2b2lkIHBnZF9mcmVlKHBnZF90ICpwZ2QpOworCisvKgorICogV2UgZG9uJ3QgaGF2ZSBhbnkgcmVhbCBwbWQncywgYW5kIHRoaXMgY29kZSBuZXZlciB0cmlnZ2VycyBiZWNhdXNlCisgKiB0aGUgcGdkIHdpbGwgYWx3YXlzIGJlIHByZXNlbnQuLgorICovCisjZGVmaW5lIHBtZF9hbGxvY19vbmUobW0sYWRkcmVzcykgICAgICAgKHsgQlVHKCk7ICgocG1kX3QgKikyKTsgfSkKKyNkZWZpbmUgcG1kX2ZyZWUoeCkgICAgICAgICAgICAgICAgICAgICBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIF9fcG1kX2ZyZWVfdGxiKHRsYix4KQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBwZ2RfcG9wdWxhdGUobW0sIHBtZCwgcHRlKSAgICAgIEJVRygpCisKKyNpZm5kZWYgQ09ORklHX0JPT0tFCisjZGVmaW5lIHBtZF9wb3B1bGF0ZV9rZXJuZWwobW0sIHBtZCwgcHRlKQlcCisJCShwbWRfdmFsKCoocG1kKSkgPSBfX3BhKHB0ZSkgfCBfUE1EX1BSRVNFTlQpCisjZGVmaW5lIHBtZF9wb3B1bGF0ZShtbSwgcG1kLCBwdGUpCVwKKwkJKHBtZF92YWwoKihwbWQpKSA9IChwYWdlX3RvX3BmbihwdGUpIDw8IFBBR0VfU0hJRlQpIHwgX1BNRF9QUkVTRU5UKQorI2Vsc2UKKyNkZWZpbmUgcG1kX3BvcHVsYXRlX2tlcm5lbChtbSwgcG1kLCBwdGUpCVwKKwkJKHBtZF92YWwoKihwbWQpKSA9ICh1bnNpZ25lZCBsb25nKXB0ZSB8IF9QTURfUFJFU0VOVCkKKyNkZWZpbmUgcG1kX3BvcHVsYXRlKG1tLCBwbWQsIHB0ZSkJXAorCQkocG1kX3ZhbCgqKHBtZCkpID0gKHVuc2lnbmVkIGxvbmcpcGFnZV90b192aXJ0KHB0ZSkgfCBfUE1EX1BSRVNFTlQpCisjZW5kaWYKKworZXh0ZXJuIHB0ZV90ICpwdGVfYWxsb2Nfb25lX2tlcm5lbChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKTsKK2V4dGVybiBzdHJ1Y3QgcGFnZSAqcHRlX2FsbG9jX29uZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKTsKK2V4dGVybiB2b2lkIHB0ZV9mcmVlX2tlcm5lbChwdGVfdCAqcHRlKTsKK2V4dGVybiB2b2lkIHB0ZV9mcmVlKHN0cnVjdCBwYWdlICpwdGUpOworCisjZGVmaW5lIF9fcHRlX2ZyZWVfdGxiKHRsYiwgcHRlKQlwdGVfZnJlZSgocHRlKSkKKworI2RlZmluZSBjaGVja19wZ3RfY2FjaGUoKQlkbyB7IH0gd2hpbGUgKDApCisKKyNlbmRpZiAvKiBfUFBDX1BHQUxMT0NfSCAqLworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1wcGMvcGd0YWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5ZGZiN2EKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGMvcGd0YWJsZS5oCkBAIC0wLDAgKzEsNzc2IEBACisjaWZkZWYgX19LRVJORUxfXworI2lmbmRlZiBfUFBDX1BHVEFCTEVfSAorI2RlZmluZSBfUFBDX1BHVEFCTEVfSAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvNGxldmVsLWZpeHVwLmg+CisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CQkvKiBGb3IgVEFTS19TSVpFICovCisjaW5jbHVkZSA8YXNtL21tdS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIHZhX3RvX3BoeXModW5zaWduZWQgbG9uZyBhZGRyZXNzKTsKK2V4dGVybiBwdGVfdCAqdmFfdG9fcHRlKHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBpb3JlbWFwX2JvdCwgaW9yZW1hcF9iYXNlOworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisvKgorICogVGhlIFBvd2VyUEMgTU1VIHVzZXMgYSBoYXNoIHRhYmxlIGNvbnRhaW5pbmcgUFRFcywgdG9nZXRoZXIgd2l0aAorICogYSBzZXQgb2YgMTYgc2VnbWVudCByZWdpc3RlcnMgKG9uIDMyLWJpdCBpbXBsZW1lbnRhdGlvbnMpLCB0byBkZWZpbmUKKyAqIHRoZSB2aXJ0dWFsIHRvIHBoeXNpY2FsIGFkZHJlc3MgbWFwcGluZy4KKyAqCisgKiBXZSB1c2UgdGhlIGhhc2ggdGFibGUgYXMgYW4gZXh0ZW5kZWQgVExCLCBpLmUuIGEgY2FjaGUgb2YgY3VycmVudGx5CisgKiBhY3RpdmUgbWFwcGluZ3MuICBXZSBtYWludGFpbiBhIHR3by1sZXZlbCBwYWdlIHRhYmxlIHRyZWUsIG11Y2gKKyAqIGxpa2UgdGhhdCB1c2VkIGJ5IHRoZSBpMzg2LCBmb3IgdGhlIHNha2Ugb2YgdGhlIExpbnV4IG1lbW9yeQorICogbWFuYWdlbWVudCBjb2RlLiAgTG93LWxldmVsIGFzc2VtYmxlciBjb2RlIGluIGhhc2h0YWJsZS5TCisgKiAocHJvY2VkdXJlIGhhc2hfcGFnZSkgaXMgcmVzcG9uc2libGUgZm9yIGV4dHJhY3RpbmcgcHRlcyBmcm9tIHRoZQorICogdHJlZSBhbmQgcHV0dGluZyB0aGVtIGludG8gdGhlIGhhc2ggdGFibGUgd2hlbiBuZWNlc3NhcnksIGFuZAorICogdXBkYXRpbmcgdGhlIGFjY2Vzc2VkIGFuZCBtb2RpZmllZCBiaXRzIGluIHRoZSBwYWdlIHRhYmxlIHRyZWUuCisgKi8KKworLyoKKyAqIFRoZSBQb3dlclBDIE1QQzh4eCB1c2VzIGEgVExCIHdpdGggaGFyZHdhcmUgYXNzaXN0ZWQsIHNvZnR3YXJlIHRhYmxld2Fsay4KKyAqIFdlIGFsc28gdXNlIHRoZSB0d28gbGV2ZWwgdGFibGVzLCBidXQgd2UgY2FuIHB1dCB0aGUgcmVhbCBiaXRzIGluIHRoZW0KKyAqIG5lZWRlZCBmb3IgdGhlIFRMQiBhbmQgdGFibGV3YWxrLiAgVGhlc2UgZGVmaW5pdGlvbnMgcmVxdWlyZSBNeF9DVFIuUFBNID0gMCwKKyAqIE14X0NUUi5QUENTID0gMCwgYW5kIE1EX0NUUi5UV0FNID0gMS4gIFRoZSBsZXZlbCAyIGRlc2NyaXB0b3IgaGFzCisgKiBhZGRpdGlvbmFsIHBhZ2UgcHJvdGVjdGlvbiAod2hlbiBNeF9DVFIuUFBDUyA9IDEpIHRoYXQgYWxsb3dzIFRMQiBoaXQKKyAqIGJhc2VkIHVwb24gdXNlci9zdXBlciBhY2Nlc3MuICBUaGUgVExCIGRvZXMgbm90IGhhdmUgYWNjZXNzZWQgbm9yIHdyaXRlCisgKiBwcm90ZWN0LiAgV2UgYXNzdW1lIHRoYXQgaWYgdGhlIFRMQiBnZXQgbG9hZGVkIHdpdGggYW4gZW50cnkgaXQgaXMKKyAqIGFjY2Vzc2VkLCBhbmQgb3ZlcmxvYWQgdGhlIGNoYW5nZWQgYml0IGZvciB3cml0ZSBwcm90ZWN0LiAgV2UgdXNlCisgKiB0d28gYml0cyBpbiB0aGUgc29mdHdhcmUgcHRlIHRoYXQgYXJlIHN1cHBvc2VkIHRvIGJlIHNldCB0byB6ZXJvIGluCisgKiB0aGUgVExCIGVudHJ5ICgyNCBhbmQgMjUpIGZvciB0aGVzZSBpbmRpY2F0b3JzLiAgQWx0aG91Z2ggdGhlIGxldmVsIDEKKyAqIGRlc2NyaXB0b3IgY29udGFpbnMgdGhlIGd1YXJkZWQgYW5kIHdyaXRldGhyb3VnaC9jb3B5YmFjayBiaXRzLCB3ZSBjYW4KKyAqIHNldCB0aGVzZSBhdCB0aGUgcGFnZSBsZXZlbCBzaW5jZSB0aGV5IGdldCBjb3BpZWQgZnJvbSB0aGUgTXhfVFdDCisgKiByZWdpc3RlciB3aGVuIHRoZSBUTEIgZW50cnkgaXMgbG9hZGVkLiAgV2Ugd2lsbCB1c2UgYml0IDI3IGZvciBndWFyZCwgc2luY2UKKyAqIHRoYXQgaXMgd2hlcmUgaXQgZXhpc3RzIGluIHRoZSBNRF9UV0MsIGFuZCBiaXQgMjYgZm9yIHdyaXRldGhyb3VnaC4KKyAqIFRoZXNlIHdpbGwgZ2V0IG1hc2tlZCBmcm9tIHRoZSBsZXZlbCAyIGRlc2NyaXB0b3IgYXQgVExCIGxvYWQgdGltZSwgYW5kCisgKiBjb3BpZWQgdG8gdGhlIE1EX1RXQyBiZWZvcmUgaXQgZ2V0cyBsb2FkZWQuCisgKiBMYXJnZSBwYWdlIHNpemVzIGFkZGVkLiAgV2UgY3VycmVudGx5IHN1cHBvcnQgdHdvIHNpemVzLCA0SyBhbmQgOE0uCisgKiBUaGlzIGFsc28gYWxsb3dzIGEgVExCIGhhbmRlciBvcHRpbWl6YXRpb24gYmVjYXVzZSB3ZSBjYW4gZGlyZWN0bHkKKyAqIGxvYWQgdGhlIFBNRCBpbnRvIE1EX1RXQy4gIFRoZSA4TSBwYWdlcyBhcmUgb25seSB1c2VkIGZvciBrZXJuZWwKKyAqIG1hcHBpbmcgb2Ygd2VsbCBrbm93biBhcmVhcy4gIFRoZSBQTUQgKFBHRCkgZW50cmllcyBjb250YWluIGNvbnRyb2wKKyAqIGZsYWdzIGluIGFkZGl0aW9uIHRvIHRoZSBhZGRyZXNzLCBzbyBjYXJlIG11c3QgYmUgdGFrZW4gdGhhdCB0aGUKKyAqIHNvZnR3YXJlIG5vIGxvbmdlciBhc3N1bWVzIHRoZXNlIGFyZSBvbmx5IHBvaW50ZXJzLgorICovCisKKy8qCisgKiBBdCBwcmVzZW50LCBhbGwgUG93ZXJQQyA0MDAtY2xhc3MgcHJvY2Vzc29ycyBzaGFyZSBhIHNpbWlsYXIgVExCCisgKiBhcmNoaXRlY3R1cmUuIFRoZSBpbnN0cnVjdGlvbiBhbmQgZGF0YSBzaWRlcyBzaGFyZSBhIHVuaWZpZWQsCisgKiA2NC1lbnRyeSwgZnVsbHktYXNzb2NpYXRpdmUgVExCIHdoaWNoIGlzIG1haW50YWluZWQgdG90YWxseSB1bmRlcgorICogc29mdHdhcmUgY29udHJvbC4gSW4gYWRkaXRpb24sIHRoZSBpbnN0cnVjdGlvbiBzaWRlIGhhcyBhCisgKiBoYXJkd2FyZS1tYW5hZ2VkLCA0LWVudHJ5LCBmdWxseS1hc3NvY2lhdGl2ZSBUTEIgd2hpY2ggc2VydmVzIGFzIGEKKyAqIGZpcnN0IGxldmVsIHRvIHRoZSBzaGFyZWQgVExCLiBUaGVzZSB0d28gVExCcyBhcmUga25vd24gYXMgdGhlIFVUTEIKKyAqIGFuZCBJVExCLCByZXNwZWN0aXZlbHkgKHNlZSAibW11LmgiIGZvciBkZWZpbml0aW9ucykuCisgKi8KKworLyoKKyAqIFRoZSBub3JtYWwgY2FzZSBpcyB0aGF0IFBURXMgYXJlIDMyLWJpdHMgYW5kIHdlIGhhdmUgYSAxLXBhZ2UKKyAqIDEwMjQtZW50cnkgcGdkaXIgcG9pbnRpbmcgdG8gMS1wYWdlIDEwMjQtZW50cnkgUFRFIHBhZ2VzLiAgLS0gcGF1bHVzCisgKgorICogRm9yIGFueSA+MzItYml0IHBoeXNpY2FsIGFkZHJlc3MgcGxhdGZvcm0sIHdlIGNhbiB1c2UgdGhlIGZvbGxvd2luZworICogdHdvIGxldmVsIHBhZ2UgdGFibGUgbGF5b3V0IHdoZXJlIHRoZSBwZ2RpciBpcyA4S0IgYW5kIHRoZSBNUyAxMyBiaXRzCisgKiBhcmUgYW4gaW5kZXggdG8gdGhlIHNlY29uZCBsZXZlbCB0YWJsZS4gIFRoZSBjb21iaW5lZCBwZ2Rpci9wbWQgZmlyc3QKKyAqIGxldmVsIGhhcyAyMDQ4IGVudHJpZXMgYW5kIHRoZSBzZWNvbmQgbGV2ZWwgaGFzIDUxMiA2NC1iaXQgUFRFIGVudHJpZXMuCisgKiAtTWF0dAorICovCisvKiBQTURfU0hJRlQgZGV0ZXJtaW5lcyB0aGUgc2l6ZSBvZiB0aGUgYXJlYSBtYXBwZWQgYnkgdGhlIFBURSBwYWdlcyAqLworI2RlZmluZSBQTURfU0hJRlQJKFBBR0VfU0hJRlQgKyBQVEVfU0hJRlQpCisjZGVmaW5lIFBNRF9TSVpFCSgxVUwgPDwgUE1EX1NISUZUKQorI2RlZmluZSBQTURfTUFTSwkofihQTURfU0laRS0xKSkKKworLyogUEdESVJfU0hJRlQgZGV0ZXJtaW5lcyB3aGF0IGEgdG9wLWxldmVsIHBhZ2UgdGFibGUgZW50cnkgY2FuIG1hcCAqLworI2RlZmluZSBQR0RJUl9TSElGVAlQTURfU0hJRlQKKyNkZWZpbmUgUEdESVJfU0laRQkoMVVMIDw8IFBHRElSX1NISUZUKQorI2RlZmluZSBQR0RJUl9NQVNLCSh+KFBHRElSX1NJWkUtMSkpCisKKy8qCisgKiBlbnRyaWVzIHBlciBwYWdlIGRpcmVjdG9yeSBsZXZlbDogb3VyIHBhZ2UtdGFibGUgdHJlZSBpcyB0d28tbGV2ZWwsIHNvCisgKiB3ZSBkb24ndCByZWFsbHkgaGF2ZSBhbnkgUE1EIGRpcmVjdG9yeS4KKyAqLworI2RlZmluZSBQVFJTX1BFUl9QVEUJKDEgPDwgUFRFX1NISUZUKQorI2RlZmluZSBQVFJTX1BFUl9QTUQJMQorI2RlZmluZSBQVFJTX1BFUl9QR0QJKDEgPDwgKDMyIC0gUEdESVJfU0hJRlQpKQorCisjZGVmaW5lIFVTRVJfUFRSU19QRVJfUEdECShUQVNLX1NJWkUgLyBQR0RJUl9TSVpFKQorI2RlZmluZSBGSVJTVF9VU0VSX1BHRF9OUgkwCisKKyNkZWZpbmUgVVNFUl9QR0RfUFRSUyAoUEFHRV9PRkZTRVQgPj4gUEdESVJfU0hJRlQpCisjZGVmaW5lIEtFUk5FTF9QR0RfUFRSUyAoUFRSU19QRVJfUEdELVVTRVJfUEdEX1BUUlMpCisKKyNkZWZpbmUgcHRlX0VSUk9SKGUpIFwKKwlwcmludGsoIiVzOiVkOiBiYWQgcHRlICJQVEVfRk1UIi5cbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgcHRlX3ZhbChlKSkKKyNkZWZpbmUgcG1kX0VSUk9SKGUpIFwKKwlwcmludGsoIiVzOiVkOiBiYWQgcG1kICUwOGx4LlxuIiwgX19GSUxFX18sIF9fTElORV9fLCBwbWRfdmFsKGUpKQorI2RlZmluZSBwZ2RfRVJST1IoZSkgXAorCXByaW50aygiJXM6JWQ6IGJhZCBwZ2QgJTA4bHguXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sIHBnZF92YWwoZSkpCisKKy8qCisgKiBKdXN0IGFueSBhcmJpdHJhcnkgb2Zmc2V0IHRvIHRoZSBzdGFydCBvZiB0aGUgdm1hbGxvYyBWTSBhcmVhOiB0aGUKKyAqIGN1cnJlbnQgNjRNQiB2YWx1ZSBqdXN0IG1lYW5zIHRoYXQgdGhlcmUgd2lsbCBiZSBhIDY0TUIgImhvbGUiIGFmdGVyIHRoZQorICogcGh5c2ljYWwgbWVtb3J5IHVudGlsIHRoZSBrZXJuZWwgdmlydHVhbCBtZW1vcnkgc3RhcnRzLiAgVGhhdCBtZWFucyB0aGF0CisgKiBhbnkgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgd2lsbCBob3BlZnVsbHkgYmUgY2F1Z2h0LgorICogVGhlIHZtYWxsb2MoKSByb3V0aW5lcyBsZWF2ZXMgYSBob2xlIG9mIDRrQiBiZXR3ZWVuIGVhY2ggdm1hbGxvY2VkCisgKiBhcmVhIGZvciB0aGUgc2FtZSByZWFzb24uIDspCisgKgorICogV2Ugbm8gbG9uZ2VyIG1hcCBsYXJnZXIgdGhhbiBwaHlzIFJBTSB3aXRoIHRoZSBCQVRzIHNvIHdlIGRvbid0IGhhdmUKKyAqIHRvIHdvcnJ5IGFib3V0IHRoZSBWTUFMTE9DX09GRlNFVCBjYXVzaW5nIHByb2JsZW1zLiAgV2UgZG8gaGF2ZSB0byB3b3JyeQorICogYWJvdXQgY2xhc2hlcyBiZXR3ZWVuIG91ciBlYXJseSBjYWxscyB0byBpb3JlbWFwKCkgdGhhdCBzdGFydCBncm93aW5nIGRvd24KKyAqIGZyb20gaW9yZW1hcF9iYXNlIGJlaW5nIHJ1biBpbnRvIHRoZSBWTSBhcmVhIGFsbG9jYXRpb25zIChncm93aW5nIHVwd2FyZHMKKyAqIGZyb20gVk1BTExPQ19TVEFSVCkuICBGb3IgdGhpcyByZWFzb24gd2UgaGF2ZSBpb3JlbWFwX2JvdCB0byBjaGVjayB3aGVuCisgKiB3ZSBhY3R1YWxseSBydW4gaW50byBvdXIgbWFwcGluZ3Mgc2V0dXAgaW4gdGhlIGVhcmx5IGJvb3Qgd2l0aCB0aGUgVk0KKyAqIHN5c3RlbS4gIFRoaXMgcmVhbGx5IGRvZXMgYmVjb21lIGEgcHJvYmxlbSBmb3IgbWFjaGluZXMgd2l0aCBnb29kIGFtb3VudHMKKyAqIG9mIFJBTS4gIC0tIENvcnQKKyAqLworI2RlZmluZSBWTUFMTE9DX09GRlNFVCAoMHgxMDAwMDAwKSAvKiAxNk0gKi8KKyNpZmRlZiBDT05GSUdfNDR4CisjaW5jbHVkZSA8YXNtL2libTQ0eC5oPgorI2RlZmluZSBWTUFMTE9DX1NUQVJUICgoKF9BTElHTigobG9uZyloaWdoX21lbW9yeSwgUFBDNDR4X1BJTl9TSVpFKSArIFZNQUxMT0NfT0ZGU0VUKSAmIH4oVk1BTExPQ19PRkZTRVQtMSkpKQorI2Vsc2UKKyNkZWZpbmUgVk1BTExPQ19TVEFSVCAoKCgobG9uZyloaWdoX21lbW9yeSArIFZNQUxMT0NfT0ZGU0VUKSAmIH4oVk1BTExPQ19PRkZTRVQtMSkpKQorI2VuZGlmCisjZGVmaW5lIFZNQUxMT0NfRU5ECWlvcmVtYXBfYm90CisKKy8qCisgKiBCaXRzIGluIGEgbGludXgtc3R5bGUgUFRFLiAgVGhlc2UgbWF0Y2ggdGhlIGJpdHMgaW4gdGhlCisgKiAoaGFyZHdhcmUtZGVmaW5lZCkgUG93ZXJQQyBQVEUgYXMgY2xvc2VseSBhcyBwb3NzaWJsZS4KKyAqLworCisjaWYgZGVmaW5lZChDT05GSUdfNDB4KQorCisvKiBUaGVyZSBhcmUgc2V2ZXJhbCBwb3RlbnRpYWwgZ290Y2hhcyBoZXJlLiAgVGhlIDQweCBoYXJkd2FyZSBUTEJMTworICAgZmllbGQgbG9va3MgbGlrZSB0aGlzOgorCisgICAwICAxICAyICAzICA0ICAuLi4gMTggMTkgMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcgMjggMjkgMzAgMzEKKyAgIFJQTi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAgMCAgMCBFWCBXUiBaU0VMLi4uLi4uLiAgVyAgSSAgTSAgRworCisgICBXaGVyZSBwb3NzaWJsZSB3ZSBtYWtlIHRoZSBMaW51eCBQVEUgYml0cyBtYXRjaCB1cCB3aXRoIHRoaXMKKworICAgLSBiaXRzIDIwIGFuZCAyMSBtdXN0IGJlIGNsZWFyZWQsIGJlY2F1c2Ugd2UgdXNlIDRrIHBhZ2VzICg0MHggY2FuCisgICAgIHN1cHBvcnQgZG93biB0byAxayBwYWdlcyksIHRoaXMgaXMgZG9uZSBpbiB0aGUgVExCTWlzcyBleGNlcHRpb24KKyAgICAgaGFuZGxlci4KKyAgIC0gV2UgdXNlIG9ubHkgem9uZXMgMCAoZm9yIGtlcm5lbCBwYWdlcykgYW5kIDEgKGZvciB1c2VyIHBhZ2VzKQorICAgICBvZiB0aGUgMTYgYXZhaWxhYmxlLiAgQml0IDI0LTI2IG9mIHRoZSBUTEIgYXJlIGNsZWFyZWQgaW4gdGhlIFRMQgorICAgICBtaXNzIGhhbmRsZXIuICBCaXQgMjcgaXMgUEFHRV9VU0VSLCB0aHVzIHNlbGVjdGluZyB0aGUgY29ycmVjdAorICAgICB6b25lLgorICAgLSBQUkVTRU5UICptdXN0KiBiZSBpbiB0aGUgYm90dG9tIHR3byBiaXRzIGJlY2F1c2Ugc3dhcCBjYWNoZQorICAgICBlbnRyaWVzIHVzZSB0aGUgdG9wIDMwIGJpdHMuICBCZWNhdXNlIDQweCBkb2Vzbid0IHN1cHBvcnQgU01QCisgICAgIGFueXdheSwgTSBpcyBpcnJlbGV2YW50IHNvIHdlIGJvcnJvdyBpdCBmb3IgUEFHRV9QUkVTRU5ULiAgQml0IDMwCisgICAgIGlzIGNsZWFyZWQgaW4gdGhlIFRMQiBtaXNzIGhhbmRsZXIgYmVmb3JlIHRoZSBUTEIgZW50cnkgaXMgbG9hZGVkLgorICAgLSBBbGwgb3RoZXIgYml0cyBvZiB0aGUgUFRFIGFyZSBsb2FkZWQgaW50byBUTEJMTyB3aXRob3V0CisgICAgIG1vZGlmaWNhdGlvbiwgbGVhdmluZyB1cyBvbmx5IHRoZSBiaXRzIDIwLCAyMSwgMjQsIDI1LCAyNiwgMzAgZm9yCisgICAgIHNvZnR3YXJlIFBURSBiaXRzLiAgV2UgYWN0dWFsbHkgdXNlIHVzZSBiaXRzIDIxLCAyNCwgMjUsIGFuZAorICAgICAzMCByZXNwZWN0aXZlbHkgZm9yIHRoZSBzb2Z0d2FyZSBiaXRzOiBBQ0NFU1NFRCwgRElSVFksIFJXLCBhbmQKKyAgICAgUFJFU0VOVC4KKyovCisKKy8qIERlZmluaXRpb25zIGZvciA0MHggZW1iZWRkZWQgY2hpcHMuICovCisjZGVmaW5lCV9QQUdFX0dVQVJERUQJMHgwMDEJLyogRzogcGFnZSBpcyBndWFyZGVkIGZyb20gcHJlZmV0Y2ggKi8KKyNkZWZpbmUgX1BBR0VfRklMRQkweDAwMQkvKiB3aGVuICFwcmVzZW50OiBub25saW5lYXIgZmlsZSBtYXBwaW5nICovCisjZGVmaW5lIF9QQUdFX1BSRVNFTlQJMHgwMDIJLyogc29mdHdhcmU6IFBURSBjb250YWlucyBhIHRyYW5zbGF0aW9uICovCisjZGVmaW5lCV9QQUdFX05PX0NBQ0hFCTB4MDA0CS8qIEk6IGNhY2hpbmcgaXMgaW5oaWJpdGVkICovCisjZGVmaW5lCV9QQUdFX1dSSVRFVEhSVQkweDAwOAkvKiBXOiBjYWNoaW5nIGlzIHdyaXRlLXRocm91Z2ggKi8KKyNkZWZpbmUJX1BBR0VfVVNFUgkweDAxMAkvKiBtYXRjaGVzIG9uZSBvZiB0aGUgem9uZSBwZXJtaXNzaW9uIGJpdHMgKi8KKyNkZWZpbmUJX1BBR0VfUlcJMHgwNDAJLyogc29mdHdhcmU6IFdyaXRlcyBwZXJtaXR0ZWQgKi8KKyNkZWZpbmUJX1BBR0VfRElSVFkJMHgwODAJLyogc29mdHdhcmU6IGRpcnR5IHBhZ2UgKi8KKyNkZWZpbmUgX1BBR0VfSFdXUklURQkweDEwMAkvKiBoYXJkd2FyZTogRGlydHkgJiBSVywgc2V0IGluIGV4Y2VwdGlvbiAqLworI2RlZmluZSBfUEFHRV9IV0VYRUMJMHgyMDAJLyogaGFyZHdhcmU6IEVYIHBlcm1pc3Npb24gKi8KKyNkZWZpbmUgX1BBR0VfQUNDRVNTRUQJMHg0MDAJLyogc29mdHdhcmU6IFI6IHBhZ2UgcmVmZXJlbmNlZCAqLworCisjZGVmaW5lIF9QTURfUFJFU0VOVAkweDQwMAkvKiBQTUQgcG9pbnRzIHRvIHBhZ2Ugb2YgUFRFcyAqLworI2RlZmluZSBfUE1EX0JBRAkweDgwMgorI2RlZmluZSBfUE1EX1NJWkUJMHgwZTAJLyogc2l6ZSBmaWVsZCwgIT0gMCBmb3IgbGFyZ2UtcGFnZSBQTUQgZW50cnkgKi8KKyNkZWZpbmUgX1BNRF9TSVpFXzRNCTB4MGMwCisjZGVmaW5lIF9QTURfU0laRV8xNk0JMHgwZTAKKyNkZWZpbmUgUE1EX1BBR0VfU0laRShwbWR2YWwpCSgxMDI0IDw8ICgoKHBtZHZhbCkgJiBfUE1EX1NJWkUpID4+IDQpKQorCisjZWxpZiBkZWZpbmVkKENPTkZJR180NHgpCisvKgorICogRGVmaW5pdGlvbnMgZm9yIFBQQzQ0MAorICoKKyAqIEJlY2F1c2Ugb2YgdGhlIDMgd29yZCBUTEIgZW50cmllcyB0byBzdXBwb3J0IDM2LWJpdCBhZGRyZXNzaW5nLAorICogdGhlIGF0dHJpYnV0ZSBhcmUgZGlmZmljdWx0IHRvIG1hcCBpbiBzdWNoIGEgZmFzaGlvbiB0aGF0IHRoZXkKKyAqIGFyZSBlYXNpbHkgbG9hZGVkIGR1cmluZyBleGNlcHRpb24gcHJvY2Vzc2luZy4gIEkgZGVjaWRlZCB0bworICogb3JnYW5pemUgdGhlIGVudHJ5IHNvIHRoZSBFUlBOIGlzIHRoZSBvbmx5IHBvcnRpb24gaW4gdGhlCisgKiB1cHBlciB3b3JkIG9mIHRoZSBQVEUgYW5kIHRoZSBhdHRyaWJ1dGUgYml0cyBiZWxvdyBhcmUgcGFja2VkCisgKiBpbiBhcyBzZW5zaWJseSBhcyB0aGV5IGNhbiBiZSBpbiB0aGUgYXJlYSBiZWxvdyBhIDRLQiBwYWdlIHNpemUKKyAqIG9yaWVudGVkIFJQTi4gIFRoaXMgYXQgbGVhc3QgbWFrZXMgaXQgZWFzeSB0byBsb2FkIHRoZSBSUE4gYW5kCisgKiBFUlBOIGZpZWxkcyBpbiB0aGUgVExCLiAtTWF0dAorICoKKyAqIE5vdGUgdGhhdCB0aGVzZSBiaXRzIHByZWNsdWRlIGZ1dHVyZSB1c2Ugb2YgYSBwYWdlIHNpemUKKyAqIGxlc3MgdGhhbiA0S0IuCisgKi8KKyNkZWZpbmUgX1BBR0VfUFJFU0VOVAkweDAwMDAwMDAxCQkvKiBTOiBQVEUgdmFsaWQgKi8KKyNkZWZpbmUJX1BBR0VfUlcJMHgwMDAwMDAwMgkJLyogUzogV3JpdGUgcGVybWlzc2lvbiAqLworI2RlZmluZQlfUEFHRV9ESVJUWQkweDAwMDAwMDA0CQkvKiBTOiBQYWdlIGRpcnR5ICovCisjZGVmaW5lIF9QQUdFX0FDQ0VTU0VECTB4MDAwMDAwMDgJCS8qIFM6IFBhZ2UgcmVmZXJlbmNlZCAqLworI2RlZmluZSBfUEFHRV9IV1dSSVRFCTB4MDAwMDAwMTAJCS8qIEg6IERpcnR5ICYgUlcgKi8KKyNkZWZpbmUgX1BBR0VfSFdFWEVDCTB4MDAwMDAwMjAJCS8qIEg6IEV4ZWN1dGUgcGVybWlzc2lvbiAqLworI2RlZmluZQlfUEFHRV9VU0VSCTB4MDAwMDAwNDAJCS8qIFM6IFVzZXIgcGFnZSAqLworI2RlZmluZQlfUEFHRV9FTkRJQU4JMHgwMDAwMDA4MAkJLyogSDogRSBiaXQgKi8KKyNkZWZpbmUJX1BBR0VfR1VBUkRFRAkweDAwMDAwMTAwCQkvKiBIOiBHIGJpdCAqLworI2RlZmluZQlfUEFHRV9DT0hFUkVOVAkweDAwMDAwMjAwCQkvKiBIOiBNIGJpdCAqLworI2RlZmluZSBfUEFHRV9GSUxFCTB4MDAwMDA0MDAJCS8qIFM6IG5vbmxpbmVhciBmaWxlIG1hcHBpbmcgKi8KKyNkZWZpbmUJX1BBR0VfTk9fQ0FDSEUJMHgwMDAwMDQwMAkJLyogSDogSSBiaXQgKi8KKyNkZWZpbmUJX1BBR0VfV1JJVEVUSFJVCTB4MDAwMDA4MDAJCS8qIEg6IFcgYml0ICovCisKKy8qIFRPRE86IEFkZCBsYXJnZSBwYWdlIGxvd21lbSBtYXBwaW5nIHN1cHBvcnQgKi8KKyNkZWZpbmUgX1BNRF9QUkVTRU5UCTAKKyNkZWZpbmUgX1BNRF9QUkVTRU5UX01BU0sgKFBBR0VfTUFTSykKKyNkZWZpbmUgX1BNRF9CQUQJKH5QQUdFX01BU0spCisKKy8qIEVSUE4gaW4gYSBQVEUgbmV2ZXIgZ2V0cyBjbGVhcmVkLCBpZ25vcmUgaXQgKi8KKyNkZWZpbmUgX1BURV9OT05FX01BU0sJMHhmZmZmZmZmZjAwMDAwMDAwVUxMCisKKyNlbGlmIGRlZmluZWQoQ09ORklHX0U1MDApCisKKy8qCisgICBNTVUgQXNzaXN0IFJlZ2lzdGVyIDM6CisKKyAgIDMyIDMzIDM0IDM1IDM2ICAuLi4gNTAgNTEgNTIgNTMgNTQgNTUgNTYgNTcgNTggNTkgNjAgNjEgNjIgNjMKKyAgIFJQTi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gIDAgIDAgVTAgVTEgVTIgVTMgVVggU1ggVVcgU1cgVVIgU1IKKworICAgLSBQUkVTRU5UICptdXN0KiBiZSBpbiB0aGUgYm90dG9tIHRocmVlIGJpdHMgYmVjYXVzZSBzd2FwIGNhY2hlCisgICAgIGVudHJpZXMgdXNlIHRoZSB0b3AgMjkgYml0cy4KKworICAgLSBGSUxFICptdXN0KiBiZSBpbiB0aGUgYm90dG9tIHRocmVlIGJpdHMgYmVjYXVzZSBzd2FwIGNhY2hlCisgICAgIGVudHJpZXMgdXNlIHRoZSB0b3AgMjkgYml0cy4KKyovCisKKy8qIERlZmluaXRpb25zIGZvciBlNTAwIGNvcmUgKi8KKyNkZWZpbmUgX1BBR0VfUFJFU0VOVAkweDAwMQkvKiBTOiBQVEUgY29udGFpbnMgYSB0cmFuc2xhdGlvbiAqLworI2RlZmluZSBfUEFHRV9VU0VSCTB4MDAyCS8qIFM6IFVzZXIgcGFnZSAobWFwcyB0byBVUikgKi8KKyNkZWZpbmUgX1BBR0VfRklMRQkweDAwMgkvKiBTOiB3aGVuICFwcmVzZW50OiBub25saW5lYXIgZmlsZSBtYXBwaW5nICovCisjZGVmaW5lIF9QQUdFX0FDQ0VTU0VECTB4MDA0CS8qIFM6IFBhZ2UgcmVmZXJlbmNlZCAqLworI2RlZmluZSBfUEFHRV9IV1dSSVRFCTB4MDA4CS8qIEg6IERpcnR5ICYgUlcsIHNldCBpbiBleGNlcHRpb24gKi8KKyNkZWZpbmUgX1BBR0VfUlcJMHgwMTAJLyogUzogV3JpdGUgcGVybWlzc2lvbiAqLworI2RlZmluZSBfUEFHRV9IV0VYRUMJMHgwMjAJLyogSDogVVggcGVybWlzc2lvbiAqLworCisjZGVmaW5lIF9QQUdFX0VORElBTgkweDA0MAkvKiBIOiBFIGJpdCAqLworI2RlZmluZSBfUEFHRV9HVUFSREVECTB4MDgwCS8qIEg6IEcgYml0ICovCisjZGVmaW5lIF9QQUdFX0NPSEVSRU5UCTB4MTAwCS8qIEg6IE0gYml0ICovCisjZGVmaW5lIF9QQUdFX05PX0NBQ0hFCTB4MjAwCS8qIEg6IEkgYml0ICovCisjZGVmaW5lIF9QQUdFX1dSSVRFVEhSVQkweDQwMAkvKiBIOiBXIGJpdCAqLworI2RlZmluZSBfUEFHRV9ESVJUWQkweDgwMAkvKiBTOiBQYWdlIGRpcnR5ICovCisKKyNkZWZpbmUgX1BNRF9QUkVTRU5UCTAKKyNkZWZpbmUgX1BNRF9QUkVTRU5UX01BU0sgKFBBR0VfTUFTSykKKyNkZWZpbmUgX1BNRF9CQUQJKH5QQUdFX01BU0spCisKKyNkZWZpbmUgTlVNX1RMQkNBTVMJKDE2KQorCisjZWxpZiBkZWZpbmVkKENPTkZJR184eHgpCisvKiBEZWZpbml0aW9ucyBmb3IgOHh4IGVtYmVkZGVkIGNoaXBzLiAqLworI2RlZmluZSBfUEFHRV9QUkVTRU5UCTB4MDAwMQkvKiBQYWdlIGlzIHZhbGlkICovCisjZGVmaW5lIF9QQUdFX0ZJTEUJMHgwMDAyCS8qIHdoZW4gIXByZXNlbnQ6IG5vbmxpbmVhciBmaWxlIG1hcHBpbmcgKi8KKyNkZWZpbmUgX1BBR0VfTk9fQ0FDSEUJMHgwMDAyCS8qIEk6IGNhY2hlIGluaGliaXQgKi8KKyNkZWZpbmUgX1BBR0VfU0hBUkVECTB4MDAwNAkvKiBObyBBU0lEIChjb250ZXh0KSBjb21wYXJlICovCisKKy8qIFRoZXNlIGZpdmUgc29mdHdhcmUgYml0cyBtdXN0IGJlIG1hc2tlZCBvdXQgd2hlbiB0aGUgZW50cnkgaXMgbG9hZGVkCisgKiBpbnRvIHRoZSBUTEIuCisgKi8KKyNkZWZpbmUgX1BBR0VfRVhFQwkweDAwMDgJLyogc29mdHdhcmU6IGktY2FjaGUgY29oZXJlbmN5IHJlcXVpcmVkICovCisjZGVmaW5lIF9QQUdFX0dVQVJERUQJMHgwMDEwCS8qIHNvZnR3YXJlOiBndWFyZGVkIGFjY2VzcyAqLworI2RlZmluZSBfUEFHRV9ESVJUWQkweDAwMjAJLyogc29mdHdhcmU6IHBhZ2UgY2hhbmdlZCAqLworI2RlZmluZSBfUEFHRV9SVwkweDAwNDAJLyogc29mdHdhcmU6IHVzZXIgd3JpdGUgYWNjZXNzIGFsbG93ZWQgKi8KKyNkZWZpbmUgX1BBR0VfQUNDRVNTRUQJMHgwMDgwCS8qIHNvZnR3YXJlOiBwYWdlIHJlZmVyZW5jZWQgKi8KKworLyogU2V0dGluZyBhbnkgYml0cyBpbiB0aGUgbmliYmxlIHdpdGggdGhlIGZvbGxvdyB0d28gY29udHJvbHMgd2lsbAorICogcmVxdWlyZSBhIFRMQiBleGNlcHRpb24gaGFuZGxlciBjaGFuZ2UuICBJdCBpcyBhc3N1bWVkIHVudXNlZCBiaXRzCisgKiBhcmUgYWx3YXlzIHplcm8uCisgKi8KKyNkZWZpbmUgX1BBR0VfSFdXUklURQkweDAxMDAJLyogaC93IHdyaXRlIGVuYWJsZTogbmV2ZXIgc2V0IGluIExpbnV4IFBURSAqLworI2RlZmluZSBfUEFHRV9VU0VSCTB4MDgwMAkvKiBPbmUgb2YgdGhlIFBQIGJpdHMsIHRoZSBvdGhlciBpcyBVU0VSJn5SVyAqLworCisjZGVmaW5lIF9QTURfUFJFU0VOVAkweDAwMDEKKyNkZWZpbmUgX1BNRF9CQUQJMHgwZmYwCisjZGVmaW5lIF9QTURfUEFHRV9NQVNLCTB4MDAwYworI2RlZmluZSBfUE1EX1BBR0VfOE0JMHgwMDBjCisKKy8qCisgKiBUaGUgOHh4IFRMQiBtaXNzIGhhbmRsZXIgYWxsZWdlZGx5IHNldHMgX1BBR0VfQUNDRVNTRUQgaW4gdGhlIFBURQorICogZm9yIGFuIGFkZHJlc3MgZXZlbiBpZiBfUEFHRV9QUkVTRU5UIGlzIG5vdCBzZXQsIGFzIGEgcGVyZm9ybWFuY2UKKyAqIG9wdGltaXphdGlvbi4gIFRoaXMgaXMgYSBidWcgaWYgeW91IGV2ZXIgd2FudCB0byB1c2Ugc3dhcCB1bmxlc3MKKyAqIF9QQUdFX0FDQ0VTU0VEIGlzIDIsIHdoaWNoIGl0IGlzbid0LCBvciB1bmxlc3MgeW91IGhhdmUgOHh4LXNwZWNpZmljCisgKiBkZWZpbml0aW9ucyBmb3IgX19zd3BfZW50cnkgZXRjLiBiZWxvdywgd2hpY2ggd291bGQgYmUgZ3Jvc3MuCisgKiAgLS0gcGF1bHVzCisgKi8KKyNkZWZpbmUgX1BURV9OT05FX01BU0sgX1BBR0VfQUNDRVNTRUQKKworI2Vsc2UgLyogQ09ORklHXzZ4eCAqLworLyogRGVmaW5pdGlvbnMgZm9yIDYweCwgNzQwLzc1MCwgZXRjLiAqLworI2RlZmluZSBfUEFHRV9QUkVTRU5UCTB4MDAxCS8qIHNvZnR3YXJlOiBwdGUgY29udGFpbnMgYSB0cmFuc2xhdGlvbiAqLworI2RlZmluZSBfUEFHRV9IQVNIUFRFCTB4MDAyCS8qIGhhc2hfcGFnZSBoYXMgbWFkZSBhbiBIUFRFIGZvciB0aGlzIHB0ZSAqLworI2RlZmluZSBfUEFHRV9GSUxFCTB4MDA0CS8qIHdoZW4gIXByZXNlbnQ6IG5vbmxpbmVhciBmaWxlIG1hcHBpbmcgKi8KKyNkZWZpbmUgX1BBR0VfVVNFUgkweDAwNAkvKiB1c2VybW9kZSBhY2Nlc3MgYWxsb3dlZCAqLworI2RlZmluZSBfUEFHRV9HVUFSREVECTB4MDA4CS8qIEc6IHByb2hpYml0IHNwZWN1bGF0aXZlIGFjY2VzcyAqLworI2RlZmluZSBfUEFHRV9DT0hFUkVOVAkweDAxMAkvKiBNOiBlbmZvcmNlIG1lbW9yeSBjb2hlcmVuY2UgKFNNUCBzeXN0ZW1zKSAqLworI2RlZmluZSBfUEFHRV9OT19DQUNIRQkweDAyMAkvKiBJOiBjYWNoZSBpbmhpYml0ICovCisjZGVmaW5lIF9QQUdFX1dSSVRFVEhSVQkweDA0MAkvKiBXOiBjYWNoZSB3cml0ZS10aHJvdWdoICovCisjZGVmaW5lIF9QQUdFX0RJUlRZCTB4MDgwCS8qIEM6IHBhZ2UgY2hhbmdlZCAqLworI2RlZmluZSBfUEFHRV9BQ0NFU1NFRAkweDEwMAkvKiBSOiBwYWdlIHJlZmVyZW5jZWQgKi8KKyNkZWZpbmUgX1BBR0VfRVhFQwkweDIwMAkvKiBzb2Z0d2FyZTogaS1jYWNoZSBjb2hlcmVuY3kgcmVxdWlyZWQgKi8KKyNkZWZpbmUgX1BBR0VfUlcJMHg0MDAJLyogc29mdHdhcmU6IHVzZXIgd3JpdGUgYWNjZXNzIGFsbG93ZWQgKi8KKworI2RlZmluZSBfUFRFX05PTkVfTUFTSwlfUEFHRV9IQVNIUFRFCisKKyNkZWZpbmUgX1BNRF9QUkVTRU5UCTAKKyNkZWZpbmUgX1BNRF9QUkVTRU5UX01BU0sgKFBBR0VfTUFTSykKKyNkZWZpbmUgX1BNRF9CQUQJKH5QQUdFX01BU0spCisjZW5kaWYKKworLyoKKyAqIFNvbWUgYml0cyBhcmUgb25seSB1c2VkIG9uIHNvbWUgY3B1IGZhbWlsaWVzLi4uCisgKi8KKyNpZm5kZWYgX1BBR0VfSEFTSFBURQorI2RlZmluZSBfUEFHRV9IQVNIUFRFCTAKKyNlbmRpZgorI2lmbmRlZiBfUFRFX05PTkVfTUFTSworI2RlZmluZSBfUFRFX05PTkVfTUFTSyAwCisjZW5kaWYKKyNpZm5kZWYgX1BBR0VfU0hBUkVECisjZGVmaW5lIF9QQUdFX1NIQVJFRAkwCisjZW5kaWYKKyNpZm5kZWYgX1BBR0VfSFdXUklURQorI2RlZmluZSBfUEFHRV9IV1dSSVRFCTAKKyNlbmRpZgorI2lmbmRlZiBfUEFHRV9IV0VYRUMKKyNkZWZpbmUgX1BBR0VfSFdFWEVDCTAKKyNlbmRpZgorI2lmbmRlZiBfUEFHRV9FWEVDCisjZGVmaW5lIF9QQUdFX0VYRUMJMAorI2VuZGlmCisjaWZuZGVmIF9QTURfUFJFU0VOVF9NQVNLCisjZGVmaW5lIF9QTURfUFJFU0VOVF9NQVNLCV9QTURfUFJFU0VOVAorI2VuZGlmCisjaWZuZGVmIF9QTURfU0laRQorI2RlZmluZSBfUE1EX1NJWkUJMAorI2RlZmluZSBQTURfUEFHRV9TSVpFKHBtZCkJYmFkX2NhbGxfdG9fUE1EX1BBR0VfU0laRSgpCisjZW5kaWYKKworI2RlZmluZSBfUEFHRV9DSEdfTUFTSwkoUEFHRV9NQVNLIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9ESVJUWSkKKworLyoKKyAqIE5vdGU6IHRoZSBfUEFHRV9DT0hFUkVOVCBiaXQgYXV0b21hdGljYWxseSBnZXRzIHNldCBpbiB0aGUgaGFyZHdhcmUKKyAqIFBURSBpZiBDT05GSUdfU01QIGlzIGRlZmluZWQgKGhhc2hfcGFnZSBkb2VzIHRoaXMpOyB0aGVyZSBpcyBubyBuZWVkCisgKiB0byBoYXZlIGl0IGluIHRoZSBMaW51eCBQVEUsIGFuZCBpbiBmYWN0IHRoZSBiaXQgY291bGQgYmUgcmV1c2VkIGZvcgorICogYW5vdGhlciBwdXJwb3NlLiAgLS0gcGF1bHVzLgorICovCisKKyNpZmRlZiBDT05GSUdfNDR4CisjZGVmaW5lIF9QQUdFX0JBU0UJKF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX0dVQVJERUQpCisjZWxzZQorI2RlZmluZSBfUEFHRV9CQVNFCShfUEFHRV9QUkVTRU5UIHwgX1BBR0VfQUNDRVNTRUQpCisjZW5kaWYKKyNkZWZpbmUgX1BBR0VfV1JFTkFCTEUJKF9QQUdFX1JXIHwgX1BBR0VfRElSVFkgfCBfUEFHRV9IV1dSSVRFKQorI2RlZmluZSBfUEFHRV9LRVJORUwJKF9QQUdFX0JBU0UgfCBfUEFHRV9TSEFSRUQgfCBfUEFHRV9XUkVOQUJMRSkKKworI2lmZGVmIENPTkZJR19QUENfU1REX01NVQorLyogT24gc3RhbmRhcmQgUFBDIE1NVSwgbm8gdXNlciBhY2Nlc3MgaW1wbGllcyBrZXJuZWwgcmVhZC93cml0ZSBhY2Nlc3MsCisgKiBzbyB0byB3cml0ZS1wcm90ZWN0IGtlcm5lbCBtZW1vcnkgd2UgbXVzdCB0dXJuIG9uIHVzZXIgYWNjZXNzICovCisjZGVmaW5lIF9QQUdFX0tFUk5FTF9STwkoX1BBR0VfQkFTRSB8IF9QQUdFX1NIQVJFRCB8IF9QQUdFX1VTRVIpCisjZWxzZQorI2RlZmluZSBfUEFHRV9LRVJORUxfUk8JKF9QQUdFX0JBU0UgfCBfUEFHRV9TSEFSRUQpCisjZW5kaWYKKworI2RlZmluZSBfUEFHRV9JTwkoX1BBR0VfS0VSTkVMIHwgX1BBR0VfTk9fQ0FDSEUgfCBfUEFHRV9HVUFSREVEKQorI2RlZmluZSBfUEFHRV9SQU0JKF9QQUdFX0tFUk5FTCB8IF9QQUdFX0hXRVhFQykKKworI2lmIGRlZmluZWQoQ09ORklHX0tHREIpIHx8IGRlZmluZWQoQ09ORklHX1hNT04pIHx8IGRlZmluZWQoQ09ORklHX0JESV9TV0lUQ0gpCisvKiBXZSB3YW50IHRoZSBkZWJ1Z2dlcnMgdG8gYmUgYWJsZSB0byBzZXQgYnJlYWtwb2ludHMgYW55d2hlcmUsIHNvCisgKiBkb24ndCB3cml0ZSBwcm90ZWN0IHRoZSBrZXJuZWwgdGV4dCAqLworI2RlZmluZSBfUEFHRV9SQU1fVEVYVAlfUEFHRV9SQU0KKyNlbHNlCisjZGVmaW5lIF9QQUdFX1JBTV9URVhUCShfUEFHRV9LRVJORUxfUk8gfCBfUEFHRV9IV0VYRUMpCisjZW5kaWYKKworI2RlZmluZSBQQUdFX05PTkUJX19wZ3Byb3QoX1BBR0VfQkFTRSkKKyNkZWZpbmUgUEFHRV9SRUFET05MWQlfX3BncHJvdChfUEFHRV9CQVNFIHwgX1BBR0VfVVNFUikKKyNkZWZpbmUgUEFHRV9SRUFET05MWV9YCV9fcGdwcm90KF9QQUdFX0JBU0UgfCBfUEFHRV9VU0VSIHwgX1BBR0VfRVhFQykKKyNkZWZpbmUgUEFHRV9TSEFSRUQJX19wZ3Byb3QoX1BBR0VfQkFTRSB8IF9QQUdFX1VTRVIgfCBfUEFHRV9SVykKKyNkZWZpbmUgUEFHRV9TSEFSRURfWAlfX3BncHJvdChfUEFHRV9CQVNFIHwgX1BBR0VfVVNFUiB8IF9QQUdFX1JXIHwgX1BBR0VfRVhFQykKKyNkZWZpbmUgUEFHRV9DT1BZCV9fcGdwcm90KF9QQUdFX0JBU0UgfCBfUEFHRV9VU0VSKQorI2RlZmluZSBQQUdFX0NPUFlfWAlfX3BncHJvdChfUEFHRV9CQVNFIHwgX1BBR0VfVVNFUiB8IF9QQUdFX0VYRUMpCisKKyNkZWZpbmUgUEFHRV9LRVJORUwJCV9fcGdwcm90KF9QQUdFX1JBTSkKKyNkZWZpbmUgUEFHRV9LRVJORUxfTk9DQUNIRQlfX3BncHJvdChfUEFHRV9JTykKKworLyoKKyAqIFRoZSBQb3dlclBDIGNhbiBvbmx5IGRvIGV4ZWN1dGUgcHJvdGVjdGlvbiBvbiBhIHNlZ21lbnQgKDI1Nk1CKSBiYXNpcywKKyAqIG5vdCBvbiBhIHBhZ2UgYmFzaXMuICBTbyB3ZSBjb25zaWRlciBleGVjdXRlIHBlcm1pc3Npb24gdGhlIHNhbWUgYXMgcmVhZC4KKyAqIEFsc28sIHdyaXRlIHBlcm1pc3Npb25zIGltcGx5IHJlYWQgcGVybWlzc2lvbnMuCisgKiBUaGlzIGlzIHRoZSBjbG9zZXN0IHdlIGNhbiBnZXQuLgorICovCisjZGVmaW5lIF9fUDAwMAlQQUdFX05PTkUKKyNkZWZpbmUgX19QMDAxCVBBR0VfUkVBRE9OTFlfWAorI2RlZmluZSBfX1AwMTAJUEFHRV9DT1BZCisjZGVmaW5lIF9fUDAxMQlQQUdFX0NPUFlfWAorI2RlZmluZSBfX1AxMDAJUEFHRV9SRUFET05MWQorI2RlZmluZSBfX1AxMDEJUEFHRV9SRUFET05MWV9YCisjZGVmaW5lIF9fUDExMAlQQUdFX0NPUFkKKyNkZWZpbmUgX19QMTExCVBBR0VfQ09QWV9YCisKKyNkZWZpbmUgX19TMDAwCVBBR0VfTk9ORQorI2RlZmluZSBfX1MwMDEJUEFHRV9SRUFET05MWV9YCisjZGVmaW5lIF9fUzAxMAlQQUdFX1NIQVJFRAorI2RlZmluZSBfX1MwMTEJUEFHRV9TSEFSRURfWAorI2RlZmluZSBfX1MxMDAJUEFHRV9SRUFET05MWQorI2RlZmluZSBfX1MxMDEJUEFHRV9SRUFET05MWV9YCisjZGVmaW5lIF9fUzExMAlQQUdFX1NIQVJFRAorI2RlZmluZSBfX1MxMTEJUEFHRV9TSEFSRURfWAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworLyogTWFrZSBzdXJlIHdlIGdldCBhIGxpbmsgZXJyb3IgaWYgUE1EX1BBR0VfU0laRSBpcyBldmVyIGNhbGxlZCBvbiBhCisgKiBrZXJuZWwgd2l0aG91dCBsYXJnZSBwYWdlIFBNRCBzdXBwb3J0ICovCitleHRlcm4gdW5zaWduZWQgbG9uZyBiYWRfY2FsbF90b19QTURfUEFHRV9TSVpFKHZvaWQpOworCisvKgorICogQ29udmVyc2lvbnMgYmV0d2VlbiBQVEUgdmFsdWVzIGFuZCBwYWdlIGZyYW1lIG51bWJlcnMuCisgKi8KKworI2RlZmluZSBwdGVfcGZuKHgpCQkocHRlX3ZhbCh4KSA+PiBQQUdFX1NISUZUKQorI2RlZmluZSBwdGVfcGFnZSh4KQkJcGZuX3RvX3BhZ2UocHRlX3Bmbih4KSkKKworI2RlZmluZSBwZm5fcHRlKHBmbiwgcHJvdCkJX19wdGUoKChwdGVfdCkocGZuKSA8PCBQQUdFX1NISUZUKSB8IHBncHJvdF92YWwocHJvdCkpCisjZGVmaW5lIG1rX3B0ZShwYWdlLCBwcm90KQlwZm5fcHRlKHBhZ2VfdG9fcGZuKHBhZ2UpLCBwcm90KQorCisvKgorICogWkVST19QQUdFIGlzIGEgZ2xvYmFsIHNoYXJlZCBwYWdlIHRoYXQgaXMgYWx3YXlzIHplcm86IHVzZWQKKyAqIGZvciB6ZXJvLW1hcHBlZCBtZW1vcnkgYXJlYXMgZXRjLi4KKyAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZW1wdHlfemVyb19wYWdlWzEwMjRdOworI2RlZmluZSBaRVJPX1BBR0UodmFkZHIpICh2aXJ0X3RvX3BhZ2UoZW1wdHlfemVyb19wYWdlKSkKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisjZGVmaW5lIHB0ZV9ub25lKHB0ZSkJCSgocHRlX3ZhbChwdGUpICYgfl9QVEVfTk9ORV9NQVNLKSA9PSAwKQorI2RlZmluZSBwdGVfcHJlc2VudChwdGUpCShwdGVfdmFsKHB0ZSkgJiBfUEFHRV9QUkVTRU5UKQorI2RlZmluZSBwdGVfY2xlYXIobW0sYWRkcixwdGVwKQlkbyB7IHNldF9wdGVfYXQoKG1tKSwgKGFkZHIpLCAocHRlcCksIF9fcHRlKDApKTsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBwbWRfbm9uZShwbWQpCQkoIXBtZF92YWwocG1kKSkKKyNkZWZpbmUJcG1kX2JhZChwbWQpCQkocG1kX3ZhbChwbWQpICYgX1BNRF9CQUQpCisjZGVmaW5lCXBtZF9wcmVzZW50KHBtZCkJKHBtZF92YWwocG1kKSAmIF9QTURfUFJFU0VOVF9NQVNLKQorI2RlZmluZQlwbWRfY2xlYXIocG1kcCkJCWRvIHsgcG1kX3ZhbCgqKHBtZHApKSA9IDA7IH0gd2hpbGUgKDApCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisvKgorICogVGhlICJwZ2RfeHh4KCkiIGZ1bmN0aW9ucyBoZXJlIGFyZSB0cml2aWFsIGZvciBhIGZvbGRlZCB0d28tbGV2ZWwKKyAqIHNldHVwOiB0aGUgcGdkIGlzIG5ldmVyIGJhZCwgYW5kIGEgcG1kIGFsd2F5cyBleGlzdHMgKGFzIGl0J3MgZm9sZGVkCisgKiBpbnRvIHRoZSBwZ2QgZW50cnkpCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHBnZF9ub25lKHBnZF90IHBnZCkJCXsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHBnZF9iYWQocGdkX3QgcGdkKQkJeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSBpbnQgcGdkX3ByZXNlbnQocGdkX3QgcGdkKQl7IHJldHVybiAxOyB9CisjZGVmaW5lIHBnZF9jbGVhcih4cCkJCQkJZG8geyB9IHdoaWxlICgwKQorCisjZGVmaW5lIHBnZF9wYWdlKHBnZCkgXAorCSgodW5zaWduZWQgbG9uZykgX192YShwZ2RfdmFsKHBnZCkgJiBQQUdFX01BU0spKQorCisvKgorICogVGhlIGZvbGxvd2luZyBvbmx5IHdvcmsgaWYgcHRlX3ByZXNlbnQoKSBpcyB0cnVlLgorICogVW5kZWZpbmVkIGJlaGF2aW91ciBpZiBub3QuLgorICovCitzdGF0aWMgaW5saW5lIGludCBwdGVfcmVhZChwdGVfdCBwdGUpCQl7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9VU0VSOyB9CitzdGF0aWMgaW5saW5lIGludCBwdGVfd3JpdGUocHRlX3QgcHRlKQkJeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfUlc7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9leGVjKHB0ZV90IHB0ZSkJCXsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX0VYRUM7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9kaXJ0eShwdGVfdCBwdGUpCQl7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9ESVJUWTsgfQorc3RhdGljIGlubGluZSBpbnQgcHRlX3lvdW5nKHB0ZV90IHB0ZSkJCXsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX0FDQ0VTU0VEOyB9CitzdGF0aWMgaW5saW5lIGludCBwdGVfZmlsZShwdGVfdCBwdGUpCQl7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9GSUxFOyB9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdGVfdW5jYWNoZShwdGVfdCBwdGUpICAgICAgIHsgcHRlX3ZhbChwdGUpIHw9IF9QQUdFX05PX0NBQ0hFOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgcHRlX2NhY2hlKHB0ZV90IHB0ZSkgICAgICAgICB7IHB0ZV92YWwocHRlKSAmPSB+X1BBR0VfTk9fQ0FDSEU7IH0KKworc3RhdGljIGlubGluZSBwdGVfdCBwdGVfcmRwcm90ZWN0KHB0ZV90IHB0ZSkgeworCXB0ZV92YWwocHRlKSAmPSB+X1BBR0VfVVNFUjsgcmV0dXJuIHB0ZTsgfQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfd3Jwcm90ZWN0KHB0ZV90IHB0ZSkgeworCXB0ZV92YWwocHRlKSAmPSB+KF9QQUdFX1JXIHwgX1BBR0VfSFdXUklURSk7IHJldHVybiBwdGU7IH0KK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX2V4cHJvdGVjdChwdGVfdCBwdGUpIHsKKwlwdGVfdmFsKHB0ZSkgJj0gfl9QQUdFX0VYRUM7IHJldHVybiBwdGU7IH0KK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rY2xlYW4ocHRlX3QgcHRlKSB7CisJcHRlX3ZhbChwdGUpICY9IH4oX1BBR0VfRElSVFkgfCBfUEFHRV9IV1dSSVRFKTsgcmV0dXJuIHB0ZTsgfQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtvbGQocHRlX3QgcHRlKSB7CisJcHRlX3ZhbChwdGUpICY9IH5fUEFHRV9BQ0NFU1NFRDsgcmV0dXJuIHB0ZTsgfQorCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3JlYWQocHRlX3QgcHRlKSB7CisJcHRlX3ZhbChwdGUpIHw9IF9QQUdFX1VTRVI7IHJldHVybiBwdGU7IH0KK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rZXhlYyhwdGVfdCBwdGUpIHsKKwlwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfVVNFUiB8IF9QQUdFX0VYRUM7IHJldHVybiBwdGU7IH0KK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rd3JpdGUocHRlX3QgcHRlKSB7CisJcHRlX3ZhbChwdGUpIHw9IF9QQUdFX1JXOyByZXR1cm4gcHRlOyB9CitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta2RpcnR5KHB0ZV90IHB0ZSkgeworCXB0ZV92YWwocHRlKSB8PSBfUEFHRV9ESVJUWTsgcmV0dXJuIHB0ZTsgfQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt5b3VuZyhwdGVfdCBwdGUpIHsKKwlwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfQUNDRVNTRUQ7IHJldHVybiBwdGU7IH0KKworc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbW9kaWZ5KHB0ZV90IHB0ZSwgcGdwcm90X3QgbmV3cHJvdCkKK3sKKwlwdGVfdmFsKHB0ZSkgPSAocHRlX3ZhbChwdGUpICYgX1BBR0VfQ0hHX01BU0spIHwgcGdwcm90X3ZhbChuZXdwcm90KTsKKwlyZXR1cm4gcHRlOworfQorCisvKgorICogV2hlbiBmbHVzaGluZyB0aGUgdGxiIGVudHJ5IGZvciBhIHBhZ2UsIHdlIGFsc28gbmVlZCB0byBmbHVzaCB0aGUgaGFzaAorICogdGFibGUgZW50cnkuICBmbHVzaF9oYXNoX3BhZ2VzIGlzIGFzc2VtYmxlciAoZm9yIHNwZWVkKSBpbiBoYXNodGFibGUuUy4KKyAqLworZXh0ZXJuIGludCBmbHVzaF9oYXNoX3BhZ2VzKHVuc2lnbmVkIGNvbnRleHQsIHVuc2lnbmVkIGxvbmcgdmEsCisJCQkgICAgdW5zaWduZWQgbG9uZyBwbWR2YWwsIGludCBjb3VudCk7CisKKy8qIEFkZCBhbiBIUFRFIHRvIHRoZSBoYXNoIHRhYmxlICovCitleHRlcm4gdm9pZCBhZGRfaGFzaF9wYWdlKHVuc2lnbmVkIGNvbnRleHQsIHVuc2lnbmVkIGxvbmcgdmEsCisJCQkgIHVuc2lnbmVkIGxvbmcgcG1kdmFsKTsKKworLyoKKyAqIEF0b21pYyBQVEUgdXBkYXRlcy4KKyAqCisgKiBwdGVfdXBkYXRlIGNsZWFycyBhbmQgc2V0cyBiaXQgYXRvbWljYWxseSwgYW5kIHJldHVybnMKKyAqIHRoZSBvbGQgcHRlIHZhbHVlLgorICogVGhlICgodW5zaWduZWQgbG9uZykocCsxKSAtIDQpIGhhY2sgaXMgdG8gZ2V0IHRvIHRoZSBsZWFzdC1zaWduaWZpY2FudAorICogMzIgYml0cyBvZiB0aGUgUFRFIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBQVEVzIGFyZSAzMiBvciA2NCBiaXRzLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcHRlX3VwZGF0ZShwdGVfdCAqcCwgdW5zaWduZWQgbG9uZyBjbHIsCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgc2V0KQoreworCXVuc2lnbmVkIGxvbmcgb2xkLCB0bXA7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygiXAorMToJbHdhcngJJTAsMCwlM1xuXAorCWFuZGMJJTEsJTAsJTRcblwKKwlvcgklMSwlMSwlNVxuIgorCVBQQzQwNV9FUlI3NygwLCUzKQorIglzdHdjeC4JJTEsMCwlM1xuXAorCWJuZS0JMWIiCisJOiAiPSZyIiAob2xkKSwgIj0mciIgKHRtcCksICI9bSIgKCpwKQorCTogInIiICgodW5zaWduZWQgbG9uZykocCsxKSAtIDQpLCAiciIgKGNsciksICJyIiAoc2V0KSwgIm0iICgqcCkKKwk6ICJjYyIgKTsKKwlyZXR1cm4gb2xkOworfQorCisvKgorICogc2V0X3B0ZSBzdG9yZXMgYSBsaW51eCBQVEUgaW50byB0aGUgbGludXggcGFnZSB0YWJsZS4KKyAqIE9uIG1hY2hpbmVzIHdoaWNoIHVzZSBhbiBNTVUgaGFzaCB0YWJsZSB3ZSBhdm9pZCBjaGFuZ2luZyB0aGUKKyAqIF9QQUdFX0hBU0hQVEUgYml0LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3B0ZV9hdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAorCQkJICAgICAgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKK3sKKyNpZiBfUEFHRV9IQVNIUFRFICE9IDAKKwlwdGVfdXBkYXRlKHB0ZXAsIH5fUEFHRV9IQVNIUFRFLCBwdGVfdmFsKHB0ZSkgJiB+X1BBR0VfSEFTSFBURSk7CisjZWxzZQorCSpwdGVwID0gcHRlOworI2VuZGlmCit9CisKKy8qCisgKiAyLjYgY2FsbGVzIHRoaXMgd2l0aG91dCBmbHVzaGluZyB0aGUgVExCIGVudHJ5LCB0aGlzIGlzIHdyb25nCisgKiBmb3Igb3VyIGhhc2gtYmFzZWQgaW1wbGVtZW50YXRpb24sIHdlIGZpeCB0aGF0IHVwIGhlcmUKKyAqLworI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX1RFU1RfQU5EX0NMRUFSX1lPVU5HCitzdGF0aWMgaW5saW5lIGludCBfX3B0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcodW5zaWduZWQgaW50IGNvbnRleHQsIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApCit7CisJdW5zaWduZWQgbG9uZyBvbGQ7CisJb2xkID0gcHRlX3VwZGF0ZShwdGVwLCBfUEFHRV9BQ0NFU1NFRCwgMCk7CisjaWYgX1BBR0VfSEFTSFBURSAhPSAwCisJaWYgKG9sZCAmIF9QQUdFX0hBU0hQVEUpIHsKKwkJdW5zaWduZWQgbG9uZyBwdGVwaHlzID0gX19wYShwdGVwKSAmIFBBR0VfTUFTSzsKKwkJZmx1c2hfaGFzaF9wYWdlcyhjb250ZXh0LCBhZGRyLCBwdGVwaHlzLCAxKTsKKwl9CisjZW5kaWYKKwlyZXR1cm4gKG9sZCAmIF9QQUdFX0FDQ0VTU0VEKSAhPSAwOworfQorI2RlZmluZSBwdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKF9fdm1hLCBfX2FkZHIsIF9fcHRlcCkgXAorCV9fcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZygoX192bWEpLT52bV9tbS0+Y29udGV4dCwgX19hZGRyLCBfX3B0ZXApCisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFUF9URVNUX0FORF9DTEVBUl9ESVJUWQorc3RhdGljIGlubGluZSBpbnQgcHRlcF90ZXN0X2FuZF9jbGVhcl9kaXJ0eShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApCit7CisJcmV0dXJuIChwdGVfdXBkYXRlKHB0ZXAsIChfUEFHRV9ESVJUWSB8IF9QQUdFX0hXV1JJVEUpLCAwKSAmIF9QQUdFX0RJUlRZKSAhPSAwOworfQorCisjZGVmaW5lIF9fSEFWRV9BUkNIX1BURVBfR0VUX0FORF9DTEVBUgorc3RhdGljIGlubGluZSBwdGVfdCBwdGVwX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCQkgICAgICAgcHRlX3QgKnB0ZXApCit7CisJcmV0dXJuIF9fcHRlKHB0ZV91cGRhdGUocHRlcCwgfl9QQUdFX0hBU0hQVEUsIDApKTsKK30KKworI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX1NFVF9XUlBST1RFQ1QKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdGVwX3NldF93cnByb3RlY3Qoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCQkgICAgICBwdGVfdCAqcHRlcCkKK3sKKwlwdGVfdXBkYXRlKHB0ZXAsIChfUEFHRV9SVyB8IF9QQUdFX0hXV1JJVEUpLCAwKTsKK30KKworI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX1NFVF9BQ0NFU1NfRkxBR1MKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3B0ZXBfc2V0X2FjY2Vzc19mbGFncyhwdGVfdCAqcHRlcCwgcHRlX3QgZW50cnksIGludCBkaXJ0eSkKK3sKKwl1bnNpZ25lZCBsb25nIGJpdHMgPSBwdGVfdmFsKGVudHJ5KSAmCisJCShfUEFHRV9ESVJUWSB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfUlcpOworCXB0ZV91cGRhdGUocHRlcCwgMCwgYml0cyk7Cit9CisKKyNkZWZpbmUgIHB0ZXBfc2V0X2FjY2Vzc19mbGFncyhfX3ZtYSwgX19hZGRyZXNzLCBfX3B0ZXAsIF9fZW50cnksIF9fZGlydHkpIFwKKwlkbyB7CQkJCQkJCQkgICBcCisJCV9fcHRlcF9zZXRfYWNjZXNzX2ZsYWdzKF9fcHRlcCwgX19lbnRyeSwgX19kaXJ0eSk7CSAgIFwKKwkJZmx1c2hfdGxiX3BhZ2Vfbm9oYXNoKF9fdm1hLCBfX2FkZHJlc3MpOwkgICAgICAgCSAgIFwKKwl9IHdoaWxlKDApCisKKy8qCisgKiBNYWNybyB0byBtYXJrIGEgcGFnZSBwcm90ZWN0aW9uIHZhbHVlIGFzICJ1bmNhY2hlYWJsZSIuCisgKi8KKyNkZWZpbmUgcGdwcm90X25vbmNhY2hlZChwcm90KQkoX19wZ3Byb3QocGdwcm90X3ZhbChwcm90KSB8IF9QQUdFX05PX0NBQ0hFIHwgX1BBR0VfR1VBUkRFRCkpCisKK3N0cnVjdCBmaWxlOworZXh0ZXJuIHBncHJvdF90IHBoeXNfbWVtX2FjY2Vzc19wcm90KHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkJICAgICB1bnNpZ25lZCBsb25nIHNpemUsIHBncHJvdF90IHZtYV9wcm90KTsKKyNkZWZpbmUgX19IQVZFX1BIWVNfTUVNX0FDQ0VTU19QUk9UCisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFX1NBTUUKKyNkZWZpbmUgcHRlX3NhbWUoQSxCKQkoKChwdGVfdmFsKEEpIF4gcHRlX3ZhbChCKSkgJiB+X1BBR0VfSEFTSFBURSkgPT0gMCkKKworLyoKKyAqIE5vdGUgdGhhdCBvbiBCb29rIEUgcHJvY2Vzc29ycywgdGhlIHBtZCBjb250YWlucyB0aGUga2VybmVsIHZpcnR1YWwKKyAqIChsb3dtZW0pIGFkZHJlc3Mgb2YgdGhlIHB0ZSBwYWdlLiAgVGhlIHBoeXNpY2FsIGFkZHJlc3MgaXMgbGVzcyB1c2VmdWwKKyAqIGJlY2F1c2UgZXZlcnl0aGluZyBydW5zIHdpdGggdHJhbnNsYXRpb24gZW5hYmxlZCAoZXZlbiB0aGUgVExCIG1pc3MKKyAqIGhhbmRsZXIpLiAgT24gZXZlcnl0aGluZyBlbHNlIHRoZSBwbWQgY29udGFpbnMgdGhlIHBoeXNpY2FsIGFkZHJlc3MKKyAqIG9mIHRoZSBwdGUgcGFnZS4gIC0tIHBhdWx1cworICovCisjaWZuZGVmIENPTkZJR19CT09LRQorI2RlZmluZSBwbWRfcGFnZV9rZXJuZWwocG1kKQlcCisJKCh1bnNpZ25lZCBsb25nKSBfX3ZhKHBtZF92YWwocG1kKSAmIFBBR0VfTUFTSykpCisjZGVmaW5lIHBtZF9wYWdlKHBtZCkJCVwKKwkobWVtX21hcCArIChwbWRfdmFsKHBtZCkgPj4gUEFHRV9TSElGVCkpCisjZWxzZQorI2RlZmluZSBwbWRfcGFnZV9rZXJuZWwocG1kKQlcCisJKCh1bnNpZ25lZCBsb25nKSAocG1kX3ZhbChwbWQpICYgUEFHRV9NQVNLKSkKKyNkZWZpbmUgcG1kX3BhZ2UocG1kKQkJXAorCShtZW1fbWFwICsgKF9fcGEocG1kX3ZhbChwbWQpKSA+PiBQQUdFX1NISUZUKSkKKyNlbmRpZgorCisvKiB0byBmaW5kIGFuIGVudHJ5IGluIGEga2VybmVsIHBhZ2UtdGFibGUtZGlyZWN0b3J5ICovCisjZGVmaW5lIHBnZF9vZmZzZXRfayhhZGRyZXNzKSBwZ2Rfb2Zmc2V0KCZpbml0X21tLCBhZGRyZXNzKQorCisvKiB0byBmaW5kIGFuIGVudHJ5IGluIGEgcGFnZS10YWJsZS1kaXJlY3RvcnkgKi8KKyNkZWZpbmUgcGdkX2luZGV4KGFkZHJlc3MpCSAoKGFkZHJlc3MpID4+IFBHRElSX1NISUZUKQorI2RlZmluZSBwZ2Rfb2Zmc2V0KG1tLCBhZGRyZXNzKQkgKChtbSktPnBnZCArIHBnZF9pbmRleChhZGRyZXNzKSkKKworLyogRmluZCBhbiBlbnRyeSBpbiB0aGUgc2Vjb25kLWxldmVsIHBhZ2UgdGFibGUuLiAqLworc3RhdGljIGlubGluZSBwbWRfdCAqIHBtZF9vZmZzZXQocGdkX3QgKiBkaXIsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwlyZXR1cm4gKHBtZF90ICopIGRpcjsKK30KKworLyogRmluZCBhbiBlbnRyeSBpbiB0aGUgdGhpcmQtbGV2ZWwgcGFnZSB0YWJsZS4uICovCisjZGVmaW5lIHB0ZV9pbmRleChhZGRyZXNzKQkJXAorCSgoKGFkZHJlc3MpID4+IFBBR0VfU0hJRlQpICYgKFBUUlNfUEVSX1BURSAtIDEpKQorI2RlZmluZSBwdGVfb2Zmc2V0X2tlcm5lbChkaXIsIGFkZHIpCVwKKwkoKHB0ZV90ICopIHBtZF9wYWdlX2tlcm5lbCgqKGRpcikpICsgcHRlX2luZGV4KGFkZHIpKQorI2RlZmluZSBwdGVfb2Zmc2V0X21hcChkaXIsIGFkZHIpCQlcCisJKChwdGVfdCAqKSBrbWFwX2F0b21pYyhwbWRfcGFnZSgqKGRpcikpLCBLTV9QVEUwKSArIHB0ZV9pbmRleChhZGRyKSkKKyNkZWZpbmUgcHRlX29mZnNldF9tYXBfbmVzdGVkKGRpciwgYWRkcikJXAorCSgocHRlX3QgKikga21hcF9hdG9taWMocG1kX3BhZ2UoKihkaXIpKSwgS01fUFRFMSkgKyBwdGVfaW5kZXgoYWRkcikpCisKKyNkZWZpbmUgcHRlX3VubWFwKHB0ZSkJCWt1bm1hcF9hdG9taWMocHRlLCBLTV9QVEUwKQorI2RlZmluZSBwdGVfdW5tYXBfbmVzdGVkKHB0ZSkJa3VubWFwX2F0b21pYyhwdGUsIEtNX1BURTEpCisKK2V4dGVybiBwZ2RfdCBzd2FwcGVyX3BnX2RpcltQVFJTX1BFUl9QR0RdOworCitleHRlcm4gdm9pZCBwYWdpbmdfaW5pdCh2b2lkKTsKKworLyoKKyAqIEVuY29kZSBhbmQgZGVjb2RlIGEgc3dhcCBlbnRyeS4KKyAqIE5vdGUgdGhhdCB0aGUgYml0cyB3ZSB1c2UgaW4gYSBQVEUgZm9yIHJlcHJlc2VudGluZyBhIHN3YXAgZW50cnkKKyAqIG11c3Qgbm90IGluY2x1ZGUgdGhlIF9QQUdFX1BSRVNFTlQgYml0LCB0aGUgX1BBR0VfRklMRSBiaXQsIG9yIHRoZQorICpfUEFHRV9IQVNIUFRFIGJpdCAoaWYgdXNlZCkuICAtLSBwYXVsdXMKKyAqLworI2RlZmluZSBfX3N3cF90eXBlKGVudHJ5KQkJKChlbnRyeSkudmFsICYgMHgxZikKKyNkZWZpbmUgX19zd3Bfb2Zmc2V0KGVudHJ5KQkJKChlbnRyeSkudmFsID4+IDUpCisjZGVmaW5lIF9fc3dwX2VudHJ5KHR5cGUsIG9mZnNldCkJKChzd3BfZW50cnlfdCkgeyAodHlwZSkgfCAoKG9mZnNldCkgPDwgNSkgfSkKKyNkZWZpbmUgX19wdGVfdG9fc3dwX2VudHJ5KHB0ZSkJCSgoc3dwX2VudHJ5X3QpIHsgcHRlX3ZhbChwdGUpID4+IDMgfSkKKyNkZWZpbmUgX19zd3BfZW50cnlfdG9fcHRlKHgpCQkoKHB0ZV90KSB7ICh4KS52YWwgPDwgMyB9KQorCisvKiBFbmNvZGUgYW5kIGRlY29kZSBhIG5vbmxpbmVhciBmaWxlIG1hcHBpbmcgZW50cnkgKi8KKyNkZWZpbmUgUFRFX0ZJTEVfTUFYX0JJVFMJMjkKKyNkZWZpbmUgcHRlX3RvX3Bnb2ZmKHB0ZSkJKHB0ZV92YWwocHRlKSA+PiAzKQorI2RlZmluZSBwZ29mZl90b19wdGUob2ZmKQkoKHB0ZV90KSB7ICgob2ZmKSA8PCAzKSB8IF9QQUdFX0ZJTEUgfSkKKworLyogQ09ORklHX0FQVVMgKi8KKy8qIEZvciB2aXJ0dWFsIGFkZHJlc3MgdG8gcGh5c2ljYWwgYWRkcmVzcyBjb252ZXJzaW9uICovCitleHRlcm4gdm9pZCBjYWNoZV9jbGVhcihfX3UzMiBhZGRyLCBpbnQgbGVuZ3RoKTsKK2V4dGVybiB2b2lkIGNhY2hlX3B1c2goX191MzIgYWRkciwgaW50IGxlbmd0aCk7CitleHRlcm4gaW50IG1tX2VuZF9vZl9jaHVuayAodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbGVuKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGlvcGEodW5zaWduZWQgbG9uZyBhZGRyKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIG1tX3B0b3YodW5zaWduZWQgbG9uZyBhZGRyKSBfX2F0dHJpYnV0ZV9jb25zdF9fOworCisvKiBWYWx1ZXMgZm9yIG5vY2FjaGVmbGFnIGFuZCBjbW9kZSAqLworLyogVGhlc2UgYXJlIG5vdCB1c2VkIGJ5IHRoZSBBUFVTIGtlcm5lbF9tYXAsIGJ1dCBwcmV2ZW50cworICAgY29tcGlsYXRpb24gZXJyb3JzLiAqLworI2RlZmluZQlLRVJORUxNQVBfRlVMTF9DQUNISU5HCQkwCisjZGVmaW5lCUtFUk5FTE1BUF9OT0NBQ0hFX1NFUgkJMQorI2RlZmluZQlLRVJORUxNQVBfTk9DQUNIRV9OT05TRVIJMgorI2RlZmluZQlLRVJORUxNQVBfTk9fQ09QWUJBQ0sJCTMKKworLyoKKyAqIE1hcCBzb21lIHBoeXNpY2FsIGFkZHJlc3MgcmFuZ2UgaW50byB0aGUga2VybmVsIGFkZHJlc3Mgc3BhY2UuCisgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIGtlcm5lbF9tYXAodW5zaWduZWQgbG9uZyBwYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJCWludCBub2NhY2hlZmxhZywgdW5zaWduZWQgbG9uZyAqbWVtYXZhaWxwICk7CisKKy8qCisgKiBTZXQgY2FjaGUgbW9kZSBvZiAoa2VybmVsIHNwYWNlKSBhZGRyZXNzIHJhbmdlLgorICovCitleHRlcm4gdm9pZCBrZXJuZWxfc2V0X2NhY2hlbW9kZSAodW5zaWduZWQgbG9uZyBhZGRyZXNzLCB1bnNpZ25lZCBsb25nIHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY21vZGUpOworCisvKiBOZWVkcyB0byBiZSBkZWZpbmVkIGhlcmUgYW5kIG5vdCBpbiBsaW51eC9tbS5oLCBhcyBpdCBpcyBhcmNoIGRlcGVuZGVudCAqLworI2RlZmluZSBrZXJuX2FkZHJfdmFsaWQoYWRkcikJKDEpCisKKyNpZmRlZiBDT05GSUdfUEhZU182NEJJVAorZXh0ZXJuIGludCByZW1hcF9wZm5fcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgZnJvbSwKKwkJCXVuc2lnbmVkIGxvbmcgcGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgcGdwcm90X3QgcHJvdCk7CitzdGF0aWMgaW5saW5lIGludCBpb19yZW1hcF9wYWdlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJCQl1bnNpZ25lZCBsb25nIHZhZGRyLAorCQkJCQl1bnNpZ25lZCBsb25nIHBhZGRyLAorCQkJCQl1bnNpZ25lZCBsb25nIHNpemUsCisJCQkJCXBncHJvdF90IHByb3QpCit7CisJcGh5c19hZGRyX3QgcGFkZHI2NCA9IGZpeHVwX2JpZ3BoeXNfYWRkcihwYWRkciwgc2l6ZSk7CisJcmV0dXJuIHJlbWFwX3Bmbl9yYW5nZSh2bWEsIHZhZGRyLCBwYWRkcjY0ID4+IFBBR0VfU0hJRlQsIHNpemUsIHByb3QpOworfQorCitzdGF0aWMgaW5saW5lIGludCBpb19yZW1hcF9wZm5fcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQkJCXVuc2lnbmVkIGxvbmcgdmFkZHIsCisJCQkJCXVuc2lnbmVkIGxvbmcgcGZuLAorCQkJCQl1bnNpZ25lZCBsb25nIHNpemUsCisJCQkJCXBncHJvdF90IHByb3QpCit7CisJcGh5c19hZGRyX3QgcGFkZHI2NCA9IGZpeHVwX2JpZ3BoeXNfYWRkcihwZm4gPDwgUEFHRV9TSElGVCwgc2l6ZSk7CisJcmV0dXJuIHJlbWFwX3Bmbl9yYW5nZSh2bWEsIHZhZGRyLCBwYWRkcjY0ID4+IFBBR0VfU0hJRlQsIHNpemUsIHByb3QpOworfQorI2Vsc2UKKyNkZWZpbmUgaW9fcmVtYXBfcGFnZV9yYW5nZSh2bWEsIHZhZGRyLCBwYWRkciwgc2l6ZSwgcHJvdCkJCVwKKwkJcmVtYXBfcGZuX3JhbmdlKHZtYSwgdmFkZHIsIChwYWRkcikgPj4gUEFHRV9TSElGVCwgc2l6ZSwgcHJvdCkKKyNkZWZpbmUgaW9fcmVtYXBfcGZuX3JhbmdlKHZtYSwgdmFkZHIsIHBmbiwgc2l6ZSwgcHJvdCkJCVwKKwkJcmVtYXBfcGZuX3JhbmdlKHZtYSwgdmFkZHIsIHBmbiwgc2l6ZSwgcHJvdCkKKyNlbmRpZgorCisjZGVmaW5lIE1LX0lPU1BBQ0VfUEZOKHNwYWNlLCBwZm4pCShwZm4pCisjZGVmaW5lIEdFVF9JT1NQQUNFKHBmbikJCTAKKyNkZWZpbmUgR0VUX1BGTihwZm4pCQkJKHBmbikKKworLyoKKyAqIE5vIHBhZ2UgdGFibGUgY2FjaGVzIHRvIGluaXRpYWxpc2UKKyAqLworI2RlZmluZSBwZ3RhYmxlX2NhY2hlX2luaXQoKQlkbyB7IH0gd2hpbGUgKDApCisKK2V4dGVybiBpbnQgZ2V0X3B0ZXB0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqKnB0ZXApOworCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGd0YWJsZS5oPgorCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYgLyogX1BQQ19QR1RBQkxFX0ggKi8KKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvcG1hY19mZWF0dXJlLmggYi9pbmNsdWRlL2FzbS1wcGMvcG1hY19mZWF0dXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThjMjA2ZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9wbWFjX2ZlYXR1cmUuaApAQCAtMCwwICsxLDM2NSBAQAorLyoKKyAqIERlZmluaXRpb24gb2YgcGxhdGZvcm0gZmVhdHVyZSBob29rcyBmb3IgUG93ZXJNYWNzCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IFBhdWwgTWFja2VycmFzICYKKyAqICAgICAgICAgICAgICAgICAgICBCZW4uIEhlcnJlbnNjaG1pZHQuCisgKgorICoKKyAqIE5vdGU6IEkgcmVtb3ZlZCBtZWRpYS1iYXkgZGV0YWlscyBmcm9tIHRoZSBmZWF0dXJlIHN0dWZmLCBJIGJlbGlldmUgaXQncworICogICAgICAgbm90IHdvcnRoIGl0LCB0aGUgbWVkaWEtYmF5IGRyaXZlciBjYW4gZGlyZWN0bHkgdXNlIHRoZSBtYWMtaW8KKyAqICAgICAgIEFTSUMgcmVnaXN0ZXJzLgorICoKKyAqIEltcGxlbWVudGF0aW9uIG5vdGU6IEN1cnJlbnRseSwgbm9uZSBvZiB0aGVzZSBmdW5jdGlvbnMgd2lsbCBibG9jay4KKyAqIEhvd2V2ZXIsIHRoZXkgbWF5IGludGVybmFsbHkgcHJvdGVjdCB0aGVtc2VsdmVzIHdpdGggYSBzcGlubG9jaworICogZm9yIHdheSB0b28gbG9uZy4gQmUgcHJlcGFyZWQgZm9yIGF0IGxlYXN0IHNvbWUgb2YgdGhlc2UgdG8gYmxvY2sKKyAqIGluIHRoZSBmdXR1cmUuCisgKgorICogVW5sZXNzIHNwZWNpZmljYWxseSBkZWZpbmVkLCB0aGUgcmVzdWx0IGNvZGUgaXMgYXNzdW1lZCB0byBiZSBhbgorICogZXJyb3Igd2hlbiBuZWdhdGl2ZSwgMCBpcyB0aGUgZGVmYXVsdCBzdWNjZXNzIHJlc3VsdC4gU29tZSBmdW5jdGlvbnMKKyAqIG1heSByZXR1cm4gYWRkaXRpb25hbCBwb3NpdGl2ZSByZXN1bHQgdmFsdWVzLgorICoKKyAqIFRvIGtlZXAgaW1wbGVtZW50YXRpb24gc2ltcGxlLCBhbGwgZmVhdHVyZSBjYWxscyBhcmUgYXNzdW1lZCB0byBoYXZlCisgKiB0aGUgcHJvdG90eXBlIHBhcmFtZXRlcnMgKHN0cnVjdCBkZXZpY2Vfbm9kZSogbm9kZSwgaW50IHZhbHVlKS4KKyAqIFdoZW4gZWl0aGVyIGlzIG5vdCB1c2VkLCBwYXNzIDAuCisgKi8KKworI2lmZGVmIF9fS0VSTkVMX18KKyNpZm5kZWYgX19QUENfQVNNX1BNQUNfRkVBVFVSRV9ICisjZGVmaW5lIF9fUFBDX0FTTV9QTUFDX0ZFQVRVUkVfSAorCisjaW5jbHVkZSA8YXNtL21hY2lvLmg+CisKKy8qCisgKiBLbm93biBNYWMgbW90aGVyYm9hcmQgbW9kZWxzCisgKgorICogUGxlYXNlLCByZXBvcnQgYW55IGVycm9yIGhlcmUgdG8gYmVuaEBrZXJuZWwuY3Jhc2hpbmcub3JnLCB0aGFua3MgIQorICoKKyAqIE5vdGUgdGhhdCBJIGRvbid0IGZ1bGx5IG1haW50YWluIHRoaXMgbGlzdCBmb3IgQ29yZTk5ICYgTWFjUklTQzIKKyAqIGFuZCBJJ20gY29uc2lkZXJpbmcgcmVtb3ZpbmcgYWxsIE5ld1dvcmxkIGVudHJpZXMgZnJvbSBpdCBhbmQKKyAqIGVudGlyZWx5IHJlbHkgb24gdGhlIG1vZGVsIHN0cmluZy4KKyAqLworCisvKiBQb3dlclN1cmdlIGFyZSB0aGUgZmlyc3QgZ2VuZXJhdGlvbiBvZiBQQ0kgUG1hY3MuIFRoaXMgaW5jbHVkZQorICogYWxsIG9mIHRoZSBHcmFuZC1DZW50cmFsIGJhc2VkIG1hY2hpbmVzLiBXZSBjdXJyZW50bHkgZG9uJ3QKKyAqIGRpZmZlcmVuY2lhdGUgbW9zdCBvZiB0aGVtLgorICovCisjZGVmaW5lIFBNQUNfVFlQRV9QU1VSR0UJCTB4MTAJLyogUG93ZXJTdXJnZSAqLworI2RlZmluZSBQTUFDX1RZUEVfQU5TCQkJMHgxMQkvKiBBcHBsZSBOZXR3b3JrIFNlcnZlciAqLworCisvKiBIZXJlIGlzIHRoZSBpbmZhbW91cyBzZXJpZSBvZiBPSGFyZSBiYXNlZCBtYWNoaW5lcworICovCisjZGVmaW5lIFBNQUNfVFlQRV9DT01FVAkJCTB4MjAJLyogQmVsZWl2ZWQgdG8gYmUgUG93ZXJCb29rIDI0MDAgKi8KKyNkZWZpbmUgUE1BQ19UWVBFX0hPT1BFUgkJMHgyMQkvKiBCZWxlaXZlZCB0byBiZSBQb3dlckJvb2sgMzQwMCAqLworI2RlZmluZSBQTUFDX1RZUEVfS0FOR0EJCQkweDIyCS8qIFBvd2VyQm9vayAzNTAwIChmaXJzdCBHMykgKi8KKyNkZWZpbmUgUE1BQ19UWVBFX0FMQ0hFTVkJCTB4MjMJLyogQWxjaGVteSBtb3RoZXJib2FyZCBiYXNlICovCisjZGVmaW5lIFBNQUNfVFlQRV9HQVpFTExFCQkweDI0CS8qIFNwYXJ0YWN1cywgc29tZSA1eHh4LzZ4eHggKi8KKyNkZWZpbmUgUE1BQ19UWVBFX1VOS05PV05fT0hBUkUJCTB4MmYJLyogVW5rbm93biwgYnV0IE9IYXJlIGJhc2VkICovCisKKy8qIEhlcmUgYXJlIHRoZSBIZWF0aHJvdyBiYXNlZCBtYWNoaW5lcworICogRklYTUU6IERpZmZlcmVuY2lhdGUgd2FsbHN0cmVldCxtYWluc3RyZWV0LHdhbGxzdHJlZXRJSQorICovCisjZGVmaW5lIFBNQUNfVFlQRV9HT1NTQU1FUgkJMHgzMAkvKiBHb3NzYW1lciBtb3RoZXJib2FyZCAqLworI2RlZmluZSBQTUFDX1RZUEVfU0lMSwkJCTB4MzEJLyogRGVza3RvcCBQb3dlck1hYyBHMyAqLworI2RlZmluZSBQTUFDX1RZUEVfV0FMTFNUUkVFVAkJMHgzMgkvKiBXYWxsc3RyZWV0L01haW5zdHJlZXQgUG93ZXJCb29rKi8KKyNkZWZpbmUgUE1BQ19UWVBFX1VOS05PV05fSEVBVEhST1cJMHgzZgkvKiBVbmtub3duIGJ1dCBoZWF0aHJvdyBiYXNlZCAqLworCisvKiBIZXJlIGFyZSBuZXd3b3JsZCBtYWNoaW5lcyBiYXNlZCBvbiBQYWRkaW5ndG9uIChoZWF0aHJvdyBkZXJpdmF0aXZlKQorICovCisjZGVmaW5lIFBNQUNfVFlQRV8xMDFfUEJPT0sJCTB4NDAJLyogMTAxIFBvd2VyQm9vayAoYWthIExvbWJhcmQpICovCisjZGVmaW5lIFBNQUNfVFlQRV9PUklHX0lNQUMJCTB4NDEJLyogRmlyc3QgZ2VuZXJhdGlvbiBpTWFjICovCisjZGVmaW5lIFBNQUNfVFlQRV9ZT1NFTUlURQkJMHg0MgkvKiBCJlcgRzMgKi8KKyNkZWZpbmUgUE1BQ19UWVBFX1lJS0VTCQkJMHg0MwkvKiBZaWtlcyBHNCAoUENJIGdyYXBoaWNzKSAqLworI2RlZmluZSBQTUFDX1RZUEVfVU5LTk9XTl9QQURESU5HVE9OCTB4NGYJLyogVW5rbm93biBidXQgcGFkZGluZ3RvbiBiYXNlZCAqLworCisvKiBDb3JlOTkgbWFjaGluZXMgYmFzZWQgb24gVW5pTm9ydGggMS4wIGFuZCAxLjUKKyAqCisgKiBOb3RlOiBBIHNpbmdsZSBlbnRyeSBoZXJlIG1heSBjb3ZlciBzZXZlcmFsIGFjdHVhbCBtb2RlbHMgYWNjb3JkaW5nCisgKiB0byB0aGUgZGV2aWNlLXRyZWUuIChTYXd0b290aCBpcyBtb3N0IHRvd2VyIEc0cywgRldfSU1BQyBpcyBtb3N0CisgKiBGaXJlV2lyZSBiYXNlZCBpTWFjcywgZXRjLi4uKS4gVGhvc2UgbWFjaGluZXMgYXJlIHRvbyBzaW1pbGFyIHRvIGJlCisgKiBkaXN0aW5ndWlzaGVkIGhlcmUsIHdoZW4gdGhleSBuZWVkIHRvIGJlIGRpZmZlcmVuY2llZCwgdXNlIHRoZQorICogZGV2aWNlLXRyZWUgIm1vZGVsIiBvciAiY29tcGF0aWJsZSIgcHJvcGVydHkuCisgKi8KKyNkZWZpbmUgUE1BQ19UWVBFX09SSUdfSUJPT0sJCTB4NDAJLyogRmlyc3QgaUJvb2sgbW9kZWwgKG5vIGZpcmV3aXJlKSAqLworI2RlZmluZSBQTUFDX1RZUEVfU0FXVE9PVEgJCTB4NDEJLyogRGVza3RvcCBHNHMgKi8KKyNkZWZpbmUgUE1BQ19UWVBFX0ZXX0lNQUMJCTB4NDIJLyogRmlyZVdpcmUgaU1hY3MgKGV4Y2VwdCBQYW5nZWEgYmFzZWQpICovCisjZGVmaW5lIFBNQUNfVFlQRV9GV19JQk9PSwkJMHg0MwkvKiBGaXJlV2lyZSBpQm9va3MgKGV4Y2VwdCBpQm9vazIpICovCisjZGVmaW5lIFBNQUNfVFlQRV9DVUJFCQkJMHg0NAkvKiBDdWJlIFBvd2VyTWFjICovCisjZGVmaW5lIFBNQUNfVFlQRV9RVUlDS1NJTFZFUgkJMHg0NQkvKiBRdWlja1NpbHZlciBHNHMgKi8KKyNkZWZpbmUgUE1BQ19UWVBFX1BJU01PCQkJMHg0NgkvKiBQaXNtbyBQb3dlckJvb2sgKi8KKyNkZWZpbmUgUE1BQ19UWVBFX1RJVEFOSVVNCQkweDQ3CS8qIFRpdGFuaXVtIFBvd2VyQm9vayAqLworI2RlZmluZSBQTUFDX1RZUEVfVElUQU5JVU0yCQkweDQ4CS8qIFRpdGFuaXVtIElJIFBvd2VyQm9vayAobm8gTDMsIE02KSAqLworI2RlZmluZSBQTUFDX1RZUEVfVElUQU5JVU0zCQkweDQ5CS8qIFRpdGFuaXVtIElJSSBQb3dlckJvb2sgKHdpdGggTDMgJiBNNykgKi8KKyNkZWZpbmUgUE1BQ19UWVBFX1RJVEFOSVVNNAkJMHg1MAkvKiBUaXRhbml1bSBJViBQb3dlckJvb2sgKHdpdGggTDMgJiBNOSkgKi8KKyNkZWZpbmUgUE1BQ19UWVBFX0VNQUMJCQkweDUwCS8qIGVNYWMgKi8KKyNkZWZpbmUgUE1BQ19UWVBFX1VOS05PV05fQ09SRTk5CTB4NWYKKworLyogTWFjUmlzYzIgd2l0aCBVbmlOb3J0aCAyLjAgKi8KKyNkZWZpbmUgUE1BQ19UWVBFX1JBQ0tNQUMJCTB4ODAJLyogWFNlcnZlICovCisjZGVmaW5lIFBNQUNfVFlQRV9XSU5EVFVOTkVMCQkweDgxCisKKy8qIE1hY1JJU0MyIG1hY2hpbmVzIGJhc2VkIG9uIHRoZSBQYW5nZWEgY2hpcHNldAorICovCisjZGVmaW5lIFBNQUNfVFlQRV9QQU5HRUFfSU1BQwkJMHgxMDAJLyogRmxvd2VyIFBvd2VyIGlNYWMgKi8KKyNkZWZpbmUgUE1BQ19UWVBFX0lCT09LMgkJMHgxMDEJLyogaUJvb2syIChwb2x5Y2FyYm9uYXRlKSAqLworI2RlZmluZSBQTUFDX1RZUEVfRkxBVF9QQU5FTF9JTUFDCTB4MTAyCS8qIEZsYXQgcGFuZWwgaU1hYyAqLworI2RlZmluZSBQTUFDX1RZUEVfVU5LTk9XTl9QQU5HRUEJMHgxMGYKKworLyogTWFjUklTQzIgbWFjaGluZXMgYmFzZWQgb24gdGhlIEludHJlcGlkIGNoaXBzZXQKKyAqLworI2RlZmluZSBQTUFDX1RZUEVfVU5LTk9XTl9JTlRSRVBJRAkweDExZgkvKiBHZW5lcmljICovCisKKy8qIE1hY1JJU0M0IC8gRzUgbWFjaGluZXMuIFdlIGRvbid0IGhhdmUgcGVyLW1hY2hpbmUgc2VsZWN0aW9uIGhlcmUgYW55bW9yZSwKKyAqIGJ1dCByYXRoZXIgbWFjaGluZSBmYW1pbGllcworICovCisjZGVmaW5lIFBNQUNfVFlQRV9QT1dFUk1BQ19HNQkJMHgxNTAJLyogVTMgJiBVM0ggYmFzZWQgKi8KKyNkZWZpbmUgUE1BQ19UWVBFX1BPV0VSTUFDX0c1X1UzTAkweDE1MQkvKiBVM0wgYmFzZWQgZGVza3RvcCAqLworI2RlZmluZSBQTUFDX1RZUEVfSU1BQ19HNQkJMHgxNTIJLyogaU1hYyBHNSAqLworI2RlZmluZSBQTUFDX1RZUEVfWFNFUlZFX0c1CQkweDE1MwkvKiBYc2VydmUgRzUgKi8KKyNkZWZpbmUgUE1BQ19UWVBFX1VOS05PV05fSzIJCTB4MTlmCS8qIEFueSBvdGhlciBLMiBiYXNlZCAqLworCisvKgorICogTW90aGVyYm9hcmQgZmxhZ3MKKyAqLworCisjZGVmaW5lIFBNQUNfTUJfQ0FOX1NMRUVQCQkweDAwMDAwMDAxCisjZGVmaW5lIFBNQUNfTUJfSEFTX0ZXX1BPV0VSCQkweDAwMDAwMDAyCisjZGVmaW5lIFBNQUNfTUJfT0xEX0NPUkU5OQkJMHgwMDAwMDAwNAorI2RlZmluZSBQTUFDX01CX01PQklMRQkJCTB4MDAwMDAwMDgKKyNkZWZpbmUgUE1BQ19NQl9NQVlfU0xFRVAJCTB4MDAwMDAwMTAKKworLyoKKyAqIEZlYXR1cmUgY2FsbHMgc3VwcG9ydGVkIG9uIHBtYWMKKyAqCisgKi8KKworLyoKKyAqIFVzZSB0aGlzIGlubGluZSB3cmFwcGVyCisgKi8KK3N0cnVjdCBkZXZpY2Vfbm9kZTsKKworc3RhdGljIGlubGluZSBsb25nIHBtYWNfY2FsbF9mZWF0dXJlKGludCBzZWxlY3Rvciwgc3RydWN0IGRldmljZV9ub2RlKiBub2RlLAorCQkJCQlsb25nIHBhcmFtLCBsb25nIHZhbHVlKQoreworCWlmICghcHBjX21kLmZlYXR1cmVfY2FsbCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJcmV0dXJuIHBwY19tZC5mZWF0dXJlX2NhbGwoc2VsZWN0b3IsIG5vZGUsIHBhcmFtLCB2YWx1ZSk7Cit9CisKKy8qIFBNQUNfRlRSX1NFUklBTF9FTkFCTEUJKHN0cnVjdCBkZXZpY2Vfbm9kZSogbm9kZSwgaW50IHBhcmFtLCBpbnQgdmFsdWUpCisgKiBlbmFibGUvZGlzYWJsZSBhbiBTQ0Mgc2lkZS4gUGFzcyB0aGUgbm9kZSBjb3JyZXNwb25kaW5nIHRvIHRoZQorICogY2hhbm5lbCBzaWRlIGFzIGEgcGFyYW1ldGVyLgorICogcGFyYW0gaXMgdGhlIHR5cGUgb2YgcG9ydAorICogaWYgcGFyYW0gaXMgb3JlZCB3aXRoIFBNQUNfU0NDX0ZMQUdfWE1PTiwgdGhlbiB0aGUgU0NDIGlzIGxvY2tlZCBlbmFibGVkCisgKiBmb3IgdXNlIGJ5IHhtb24uCisgKi8KKyNkZWZpbmUgUE1BQ19GVFJfU0NDX0VOQUJMRQkJUE1BQ19GVFJfREVGKDApCisJI2RlZmluZSBQTUFDX1NDQ19BU1lOQwkJMAorCSNkZWZpbmUgUE1BQ19TQ0NfSVJEQQkJMQorCSNkZWZpbmUgUE1BQ19TQ0NfSTJTMQkJMgorCSNkZWZpbmUgUE1BQ19TQ0NfRkxBR19YTU9OCTB4MDAwMDEwMDAKKworLyogUE1BQ19GVFJfTU9ERU1fRU5BQkxFCShzdHJ1Y3QgZGV2aWNlX25vZGUqIG5vZGUsIDAsIGludCB2YWx1ZSkKKyAqIGVuYWJsZS9kaXNhYmxlIHRoZSBpbnRlcm5hbCBtb2RlbS4KKyAqLworI2RlZmluZSBQTUFDX0ZUUl9NT0RFTV9FTkFCTEUJCVBNQUNfRlRSX0RFRigxKQorCisvKiBQTUFDX0ZUUl9TV0lNM19FTkFCTEUJKHN0cnVjdCBkZXZpY2Vfbm9kZSogbm9kZSwgMCxpbnQgdmFsdWUpCisgKiBlbmFibGUvZGlzYWJsZSB0aGUgc3dpbTMgKGZsb3BweSkgY2VsbCBvZiBhIG1hYy1pbyBBU0lDCisgKi8KKyNkZWZpbmUgUE1BQ19GVFJfU1dJTTNfRU5BQkxFCQlQTUFDX0ZUUl9ERUYoMikKKworLyogUE1BQ19GVFJfTUVTSF9FTkFCTEUJCShzdHJ1Y3QgZGV2aWNlX25vZGUqIG5vZGUsIDAsIGludCB2YWx1ZSkKKyAqIGVuYWJsZS9kaXNhYmxlIHRoZSBtZXNoIChzY3NpKSBjZWxsIG9mIGEgbWFjLWlvIEFTSUMKKyAqLworI2RlZmluZSBQTUFDX0ZUUl9NRVNIX0VOQUJMRQkJUE1BQ19GVFJfREVGKDMpCisKKy8qIFBNQUNfRlRSX0lERV9FTkFCTEUJCShzdHJ1Y3QgZGV2aWNlX25vZGUqIG5vZGUsIGludCBidXNJRCwgaW50IHZhbHVlKQorICogZW5hYmxlL2Rpc2FibGUgYW4gSURFIHBvcnQgb2YgYSBtYWMtaW8gQVNJQworICogcGFzcyB0aGUgYnVzSUQgcGFyYW1ldGVyCisgKi8KKyNkZWZpbmUgUE1BQ19GVFJfSURFX0VOQUJMRQkJUE1BQ19GVFJfREVGKDQpCisKKy8qIFBNQUNfRlRSX0lERV9SRVNFVAkJKHN0cnVjdCBkZXZpY2Vfbm9kZSogbm9kZSwgaW50IGJ1c0lELCBpbnQgdmFsdWUpCisgKiBhc3NlcnQoMSkvcmVsZWFzZSgwKSBhbiBJREUgcmVzZXQgbGluZSAobWFjLWlvIElERSBvbmx5KQorICovCisjZGVmaW5lIFBNQUNfRlRSX0lERV9SRVNFVAkJUE1BQ19GVFJfREVGKDUpCisKKy8qIFBNQUNfRlRSX0JNQUNfRU5BQkxFCQkoc3RydWN0IGRldmljZV9ub2RlKiBub2RlLCAwLCBpbnQgdmFsdWUpCisgKiBlbmFibGUvZGlzYWJsZSB0aGUgYm1hYyAoZXRoZXJuZXQpIGNlbGwgb2YgYSBtYWMtaW8gQVNJQywgYWxzbyBkcml2ZQorICogaXQncyByZXNldCBsaW5lCisgKi8KKyNkZWZpbmUgUE1BQ19GVFJfQk1BQ19FTkFCTEUJCVBNQUNfRlRSX0RFRig2KQorCisvKiBQTUFDX0ZUUl9HTUFDX0VOQUJMRQkJKHN0cnVjdCBkZXZpY2Vfbm9kZSogbm9kZSwgMCwgaW50IHZhbHVlKQorICogZW5hYmxlL2Rpc2FibGUgdGhlIGdtYWMgKGV0aGVybmV0KSBjZWxsIG9mIGFuIHVuaW5vcnRoIEFTSUMuIFRoaXMKKyAqIGNvbnRyb2wgdGhlIGNlbGwncyBjbG9jay4KKyAqLworI2RlZmluZSBQTUFDX0ZUUl9HTUFDX0VOQUJMRQkJUE1BQ19GVFJfREVGKDcpCisKKy8qIFBNQUNfRlRSX0dNQUNfUEhZX1JFU0VUCShzdHJ1Y3QgZGV2aWNlX25vZGUqIG5vZGUsIDAsIDApCisgKiBQZXJmb3JtIGEgSFcgcmVzZXQgb2YgdGhlIFBIWSBjb25uZWN0ZWQgdG8gYSBnbWFjIGNvbnRyb2xsZXIuCisgKiBQYXNzIHRoZSBnbWFjIGRldmljZSBub2RlLCBub3QgdGhlIFBIWSBub2RlLgorICovCisjZGVmaW5lIFBNQUNfRlRSX0dNQUNfUEhZX1JFU0VUCQlQTUFDX0ZUUl9ERUYoOCkKKworLyogUE1BQ19GVFJfU09VTkRfQ0hJUF9FTkFCTEUJKHN0cnVjdCBkZXZpY2Vfbm9kZSogbm9kZSwgMCwgaW50IHZhbHVlKQorICogZW5hYmxlL2Rpc2FibGUgdGhlIHNvdW5kIGNoaXAsIHdoYXRldmVyIGl0IGlzIGFuZCBwcm92aWRlZCBpdCBjYW4KKyAqIGFjdWFsbHkgYmUgY29udHJvbGxlZAorICovCisjZGVmaW5lIFBNQUNfRlRSX1NPVU5EX0NISVBfRU5BQkxFCVBNQUNfRlRSX0RFRig5KQorCisvKiAtLSBhZGQgdmFyaW91cyB0d2Vha3MgcmVsYXRlZCB0byBzb3VuZCByb3V0aW5nIC0tICovCisKKy8qIFBNQUNfRlRSX0FJUlBPUlRfRU5BQkxFCShzdHJ1Y3QgZGV2aWNlX25vZGUqIG5vZGUsIDAsIGludCB2YWx1ZSkKKyAqIGVuYWJsZS9kaXNhYmxlIHRoZSBhaXJwb3J0IGNhcmQKKyAqLworI2RlZmluZSBQTUFDX0ZUUl9BSVJQT1JUX0VOQUJMRQkJUE1BQ19GVFJfREVGKDEwKQorCisvKiBQTUFDX0ZUUl9SRVNFVF9DUFUJCShOVUxMLCBpbnQgY3B1X25yLCAwKQorICogdG9nZ2xlIHRoZSByZXNldCBsaW5lIG9mIGEgQ1BVIG9uIGFuIHVuaW5vcnRoLWJhc2VkIFNNUCBtYWNoaW5lCisgKi8KKyNkZWZpbmUgUE1BQ19GVFJfUkVTRVRfQ1BVCQlQTUFDX0ZUUl9ERUYoMTEpCisKKy8qIFBNQUNfRlRSX1VTQl9FTkFCTEUJCShzdHJ1Y3QgZGV2aWNlX25vZGUqIG5vZGUsIDAsIGludCB2YWx1ZSkKKyAqIGVuYWJsZS9kaXNhYmxlIGFuIFVTQiBjZWxsLCBhbG9uZyB3aXRoIHRoZSBwb3dlciBvZiB0aGUgVVNCICJwYWQiCisgKiBvbiBrZXlsYXJnbyBiYXNlZCBtYWNoaW5lcworICovCisjZGVmaW5lIFBNQUNfRlRSX1VTQl9FTkFCTEUJCVBNQUNfRlRSX0RFRigxMikKKworLyogUE1BQ19GVFJfMTM5NF9FTkFCTEUJCShzdHJ1Y3QgZGV2aWNlX25vZGUqIG5vZGUsIDAsIGludCB2YWx1ZSkKKyAqIGVuYWJsZS9kaXNhYmxlIHRoZSBmaXJld2lyZSBjZWxsIG9mIGFuIHVuaW5vcnRoIEFTSUMuCisgKi8KKyNkZWZpbmUgUE1BQ19GVFJfMTM5NF9FTkFCTEUJCVBNQUNfRlRSX0RFRigxMykKKworLyogUE1BQ19GVFJfMTM5NF9DQUJMRV9QT1dFUgkoc3RydWN0IGRldmljZV9ub2RlKiBub2RlLCAwLCBpbnQgdmFsdWUpCisgKiBlbmFibGUvZGlzYWJsZSB0aGUgZmlyZXdpcmUgY2FibGUgcG93ZXIgc3VwcGx5IG9mIHRoZSB1bmlub3J0aAorICogZmlyZXdpcmUgY2VsbAorICovCisjZGVmaW5lIFBNQUNfRlRSXzEzOTRfQ0FCTEVfUE9XRVIJUE1BQ19GVFJfREVGKDE0KQorCisvKiBQTUFDX0ZUUl9TTEVFUF9TVEFURQkJKHN0cnVjdCBkZXZpY2Vfbm9kZSogbm9kZSwgMCwgaW50IHZhbHVlKQorICogc2V0IHRoZSBzbGVlcCBzdGF0ZSBvZiB0aGUgbW90aGVyYm9hcmQuCisgKgorICogUGFzcyAtMSBhcyB2YWx1ZSB0byBxdWVyeSBmb3Igc2xlZXAgY2FwYWJpbGl0eQorICogUGFzcyAxIHRvIHNldCBJT3MgdG8gc2xlZXAKKyAqIFBhc3MgMCB0byBzZXQgSU9zIHRvIHdha2UKKyAqLworI2RlZmluZSBQTUFDX0ZUUl9TTEVFUF9TVEFURQkJUE1BQ19GVFJfREVGKDE1KQorCisvKiBQTUFDX0ZUUl9HRVRfTUJfSU5GTwkJKE5VTEwsIHNlbGVjdG9yLCAwKQorICoKKyAqIHJldHVybnMgc29tZSBtb3RoZXJib2FyZCBpbmZvcy4KKyAqIHNlbGVjdG9yOiAwICAtIG1vZGVsIGlkCisgKiAgICAgICAgICAgMSAgLSBtb2RlbCBmbGFncyAoY2FwYWJpbGl0aWVzKQorICogICAgICAgICAgIDIgIC0gbW9kZWwgbmFtZSAoY2FzdCB0byBjb25zdCBjaGFyICopCisgKi8KKyNkZWZpbmUgUE1BQ19GVFJfR0VUX01CX0lORk8JCVBNQUNfRlRSX0RFRigxNikKKyNkZWZpbmUgICBQTUFDX01CX0lORk9fTU9ERUwJMAorI2RlZmluZSAgIFBNQUNfTUJfSU5GT19GTEFHUwkxCisjZGVmaW5lICAgUE1BQ19NQl9JTkZPX05BTUUJMgorCisvKiBQTUFDX0ZUUl9SRUFEX0dQSU8JCShOVUxMLCBpbnQgaW5kZXgsIDApCisgKgorICogcmVhZCBhIEdQSU8gZnJvbSBhIG1hYy1pbyBjb250cm9sbGVyIG9mIHR5cGUgS2V5TGFyZ28gb3IgUGFuZ2VhLgorICogdGhlIHZhbHVlIHJldHVybmVkIGlzIGEgYnl0ZSAocG9zaXRpdmUpLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUKKyAqLworI2RlZmluZSBQTUFDX0ZUUl9SRUFEX0dQSU8JCVBNQUNfRlRSX0RFRigxNykKKworLyogUE1BQ19GVFJfV1JJVEVfR1BJTwkJKE5VTEwsIGludCBpbmRleCwgaW50IHZhbHVlKQorICoKKyAqIHdyaXRlIGEgR1BJTyBvZiBhIG1hYy1pbyBjb250cm9sbGVyIG9mIHR5cGUgS2V5TGFyZ28gb3IgUGFuZ2VhLgorICovCisjZGVmaW5lIFBNQUNfRlRSX1dSSVRFX0dQSU8JCVBNQUNfRlRSX0RFRigxOCkKKworLyogUE1BQ19GVFJfRU5BQkxFX01QSUMKKyAqCisgKiBFbmFibGUgdGhlIE1QSUMgY2VsbAorICovCisjZGVmaW5lIFBNQUNfRlRSX0VOQUJMRV9NUElDCQlQTUFDX0ZUUl9ERUYoMTkpCisKKy8qIFBNQUNfRlRSX0FBQ0tfREVMQVlfRU5BQkxFCShOVUxMLCBpbnQgZW5hYmxlLCAwKQorICoKKyAqIEVuYWJsZS9kaXNhYmxlIHRoZSBBQUNLIGRlbGF5IG9uIHRoZSBub3J0aGJyaWRnZSBmb3Igc3lzdGVtcyB1c2luZyBERlMKKyAqLworI2RlZmluZSBQTUFDX0ZUUl9BQUNLX0RFTEFZX0VOQUJMRSAgICAgCVBNQUNfRlRSX0RFRigyMCkKKworLyogUE1BQ19GVFJfREVWSUNFX0NBTl9XQUtFCisgKgorICogVXNlZCBieSB2aWRlbyBkcml2ZXJzIHRvIGluZm9ybSBzeXN0ZW0gdGhhdCB0aGV5IGNhbiBhY3R1YWxseSBwZXJmb3JtCisgKiB3YWtldXAgZnJvbSBzbGVlcAorICovCisjZGVmaW5lIFBNQUNfRlRSX0RFVklDRV9DQU5fV0FLRQlQTUFDX0ZUUl9ERUYoMjIpCisKKworLyogRG9uJ3QgdXNlIHRob3NlIGRpcmVjdGx5LCB0aGV5IGFyZSBmb3IgdGhlIHNha2Ugb2YgcG1hY19zZXR1cC5jICovCitleHRlcm4gbG9uZyBwbWFjX2RvX2ZlYXR1cmVfY2FsbCh1bnNpZ25lZCBpbnQgc2VsZWN0b3IsIC4uLik7CitleHRlcm4gdm9pZCBwbWFjX2ZlYXR1cmVfaW5pdCh2b2lkKTsKKworLyogVmlkZW8gc3VzcGVuZCB0d2VhayAqLworZXh0ZXJuIHZvaWQgcG1hY19zZXRfZWFybHlfdmlkZW9fcmVzdW1lKHZvaWQgKCpwcm9jKSh2b2lkICpkYXRhKSwgdm9pZCAqZGF0YSk7CitleHRlcm4gdm9pZCBwbWFjX2NhbGxfZWFybHlfdmlkZW9fcmVzdW1lKHZvaWQpOworCisjZGVmaW5lIFBNQUNfRlRSX0RFRih4KSAoKF9NQUNIX1BtYWMgPDwgMTYpIHwgKHgpKQorCisKKy8qCisgKiBUaGUgcGFydCBiZWxvdyBpcyBmb3IgdXNlIGJ5IG1hY2lvX2FzaWMuYyBvbmx5LCBkbyBub3QgcmVseQorICogb24gdGhlIGRhdGEgc3RydWN0dXJlcyBvciBjb25zdGFudHMgYmVsb3cgaW4gYSBub3JtYWwgZHJpdmVyCisgKgorICovCisKKyNkZWZpbmUgTUFYX01BQ0lPX0NISVBTCQkyCisKK2VudW0geworCW1hY2lvX3Vua25vd24gPSAwLAorCW1hY2lvX2dyYW5kX2NlbnRyYWwsCisJbWFjaW9fb2hhcmUsCisJbWFjaW9fb2hhcmVJSSwKKwltYWNpb19oZWF0aHJvdywKKwltYWNpb19nYXR3aWNrLAorCW1hY2lvX3BhZGRpbmd0b24sCisJbWFjaW9fa2V5bGFyZ28sCisJbWFjaW9fcGFuZ2VhLAorCW1hY2lvX2ludHJlcGlkLAorCW1hY2lvX2tleWxhcmdvMiwKK307CisKK3N0cnVjdCBtYWNpb19jaGlwCit7CisJc3RydWN0IGRldmljZV9ub2RlCSpvZl9ub2RlOworCWludAkJCXR5cGU7CisJY29uc3QgY2hhcgkJKm5hbWU7CisJaW50CQkJcmV2OworCXZvbGF0aWxlIHUzMgkJX19pb21lbSAqYmFzZTsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKworCS8qIEZvciB1c2UgYnkgbWFjaW9fYXNpYyBQQ0kgZHJpdmVyICovCisJc3RydWN0IG1hY2lvX2J1cwlsYnVzOworfTsKKworZXh0ZXJuIHN0cnVjdCBtYWNpb19jaGlwIG1hY2lvX2NoaXBzW01BWF9NQUNJT19DSElQU107CisKKyNkZWZpbmUgTUFDSU9fRkxBR19TQ0NBX09OCTB4MDAwMDAwMDEKKyNkZWZpbmUgTUFDSU9fRkxBR19TQ0NCX09OCTB4MDAwMDAwMDIKKyNkZWZpbmUgTUFDSU9fRkxBR19TQ0NfTE9DS0VECTB4MDAwMDAwMDQKKyNkZWZpbmUgTUFDSU9fRkxBR19BSVJQT1JUX09OCTB4MDAwMDAwMTAKKyNkZWZpbmUgTUFDSU9fRkxBR19GV19TVVBQT1JURUQJMHgwMDAwMDAyMAorCitleHRlcm4gc3RydWN0IG1hY2lvX2NoaXAqIG1hY2lvX2ZpbmQoc3RydWN0IGRldmljZV9ub2RlKiBjaGlsZCwgaW50IHR5cGUpOworCisjZGVmaW5lIE1BQ0lPX0ZDUjMyKG1hY2lvLCByKQkoKG1hY2lvKS0+YmFzZSArICgocikgPj4gMikpCisjZGVmaW5lIE1BQ0lPX0ZDUjgobWFjaW8sIHIpCSgoKHZvbGF0aWxlIHU4IF9faW9tZW0gKikoKG1hY2lvKS0+YmFzZSkpICsgKHIpKQorCisjZGVmaW5lIE1BQ0lPX0lOMzIocikJCShpbl9sZTMyKE1BQ0lPX0ZDUjMyKG1hY2lvLHIpKSkKKyNkZWZpbmUgTUFDSU9fT1VUMzIocix2KQkob3V0X2xlMzIoTUFDSU9fRkNSMzIobWFjaW8sciksICh2KSkpCisjZGVmaW5lIE1BQ0lPX0JJUyhyLHYpCQkoTUFDSU9fT1VUMzIoKHIpLCBNQUNJT19JTjMyKHIpIHwgKHYpKSkKKyNkZWZpbmUgTUFDSU9fQklDKHIsdikJCShNQUNJT19PVVQzMigociksIE1BQ0lPX0lOMzIocikgJiB+KHYpKSkKKyNkZWZpbmUgTUFDSU9fSU44KHIpCQkoaW5fOChNQUNJT19GQ1I4KG1hY2lvLHIpKSkKKyNkZWZpbmUgTUFDSU9fT1VUOChyLHYpCQkob3V0XzgoTUFDSU9fRkNSOChtYWNpbyxyKSwgKHYpKSkKKworI2VuZGlmIC8qIF9fUFBDX0FTTV9QTUFDX0ZFQVRVUkVfSCAqLworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9wbWFjX2xvd19pMmMuaCBiL2luY2x1ZGUvYXNtLXBwYy9wbWFjX2xvd19pMmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDlhNTk2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjL3BtYWNfbG93X2kyYy5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qIAorICogIGluY2x1ZGUvYXNtLXBwYy9wbWFjX2xvd19pMmMuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMgQmVuLiBIZXJyZW5zY2htaWR0IChiZW5oQGtlcm5lbC5jcmFzaGluZy5vcmcpCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisjaWZuZGVmIF9fUE1BQ19MT1dfSTJDX0hfXworI2RlZmluZSBfX1BNQUNfTE9XX0kyQ19IX18KKworLyogaTJjIG1vZGUgKGJhc2VkIG9uIHRoZSBwbGF0Zm9ybSBmdW5jdGlvbnMgZm9ybWF0KSAqLworZW51bSB7CisJcG1hY19sb3dfaTJjX21vZGVfZHVtYgkJPSAxLAorCXBtYWNfbG93X2kyY19tb2RlX3N0ZAkJPSAyLAorCXBtYWNfbG93X2kyY19tb2RlX3N0ZHN1Ygk9IDMsCisJcG1hY19sb3dfaTJjX21vZGVfY29tYmluZWQJPSA0LAorfTsKKworLyogUlcgYml0IGluIGFkZHJlc3MgKi8KK2VudW0geworCXBtYWNfbG93X2kyY19yZWFkCQk9IDB4MDEsCisJcG1hY19sb3dfaTJjX3dyaXRlCQk9IDB4MDAKK307CisKKy8qIEluaXQsIGNhbGxlZCBlYXJseSBkdXJpbmcgYm9vdCAqLworZXh0ZXJuIHZvaWQgcG1hY19pbml0X2xvd19pMmModm9pZCk7CisKKy8qIExvY2tpbmcgZnVuY3Rpb25zIGV4cG9zZWQgdG8gaTJjLWtleXdlc3QgKi8KK2ludCBwbWFjX2xvd19pMmNfbG9jayhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKTsKK2ludCBwbWFjX2xvd19pMmNfdW5sb2NrKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApOworCisvKiBBY2Nlc3MgZnVuY3Rpb25zIGZvciBwbGF0Zm9ybSBjb2RlICovCitpbnQgcG1hY19sb3dfaTJjX29wZW4oc3RydWN0IGRldmljZV9ub2RlICpucCwgaW50IGNoYW5uZWwpOworaW50IHBtYWNfbG93X2kyY19jbG9zZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKTsKK2ludCBwbWFjX2xvd19pMmNfc2V0bW9kZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBpbnQgbW9kZSk7CitpbnQgcG1hY19sb3dfaTJjX3hmZXIoc3RydWN0IGRldmljZV9ub2RlICpucCwgdTggYWRkcmRpciwgdTggc3ViYWRkciwgdTggKmRhdGEsIGludCBsZW4pOworCisKKyNlbmRpZiAvKiBfX1BNQUNfTE9XX0kyQ19IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9wbnAuaCBiL2luY2x1ZGUvYXNtLXBwYy9wbnAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjY3NjBiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjL3BucC5oCkBAIC0wLDAgKzEsNjQ1IEBACisjaWZkZWYgX19LRVJORUxfXworLyogMTEvMDIvOTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgICAgIFBsdWcgYW5kIFBsYXkgaGVhZGVyIGRlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogU3RydWN0dXJlIG1hcCBmb3IgUG5QIG9uIFBvd2VyUEMgUmVmZXJlbmNlIFBsYXRmb3JtICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIFNlZSBQbHVnIGFuZCBQbGF5IElTQSBTcGVjaWZpY2F0aW9uLCBWZXJzaW9uIDEuMCwgTWF5IDI4LCAxOTkzLiAgSXQgICAgICAgICovCisvKiAob3IgbGF0ZXIgdmVyc2lvbnMpIGlzIGF2YWlsYWJsZSBvbiBDb21wdXNlcnZlIGluIHRoZSBQTFVHUExBWSBhcmVhLiAgICAgICAqLworLyogVGhpcyBjb2RlIGhhcyBleHRlbnNpb25zIHRvIHRoYXQgc3BlY2lmaWNhdGlvbiwgbmFtZWx5IG5ldyBzaG9ydCBhbmQgICAgICAgKi8KKy8qIGxvbmcgdGFnIHR5cGVzIGZvciBwbGF0Zm9ybSBkZXBlbmRlbnQgaW5mb3JtYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKy8qIFdhcm5pbmc6IExFIG5vdGF0aW9uIHVzZWQgdGhyb3VnaG91dCB0aGlzIGZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKy8qIEZvciBlbnVtJ3M6IGlmIGdpdmVuIGluIGhleCB0aGVuIHRoZXkgYXJlIGJpdCBzaWduaWZpY2FudCwgaS5lLiAgICAgICAgICAgICovCisvKiBvbmx5IG9uZSBiaXQgaXMgb24gZm9yIGVhY2ggZW51bSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisjaWZuZGVmIF9QTlBfCisjZGVmaW5lIF9QTlBfCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjZGVmaW5lIE1BWF9NRU1fUkVHSVNURVJTIDkKKyNkZWZpbmUgTUFYX0lPX1BPUlRTIDIwCisjZGVmaW5lIE1BWF9JUlFTIDcKKy8qI2RlZmluZSBNQVhfRE1BX0NIQU5ORUxTIDcqLworCisvKiBJbnRlcnJ1cHQgY29udHJvbGxlcnMgKi8KKworI2RlZmluZSBQTlBpbnRlcnJ1cHQwICJQTlAwMDAwIiAgICAgIC8qIEFUIEludGVycnVwdCBDb250cm9sbGVyICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUE5QaW50ZXJydXB0MSAiUE5QMDAwMSIgICAgICAvKiBFSVNBIEludGVycnVwdCBDb250cm9sbGVyICAgICAgICAgICAgICovCisjZGVmaW5lIFBOUGludGVycnVwdDIgIlBOUDAwMDIiICAgICAgLyogTUNBIEludGVycnVwdCBDb250cm9sbGVyICAgICAgICAgICAgICAqLworI2RlZmluZSBQTlBpbnRlcnJ1cHQzICJQTlAwMDAzIiAgICAgIC8qIEFQSUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUE5QRXh0SW50ICAgICAiSUJNMDAwRCIgICAgICAvKiBQb3dlclBDIEV4dGVuZGVkIEludGVycnVwdCBDb250cm9sbGVyICovCisKKy8qIFRpbWVycyAqLworCisjZGVmaW5lIFBOUHRpbWVyMCAgICAgIlBOUDAxMDAiICAgICAgLyogQVQgVGltZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQTlB0aW1lcjEgICAgICJQTlAwMTAxIiAgICAgIC8qIEVJU0EgVGltZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUE5QdGltZXIyICAgICAiUE5QMDEwMiIgICAgICAvKiBNQ0EgVGltZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKy8qIERNQSBjb250cm9sbGVycyAqLworCisjZGVmaW5lIFBOUGRtYTAgICAgICAgIlBOUDAyMDAiICAgICAgLyogQVQgRE1BIENvbnRyb2xsZXIgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQTlBkbWExICAgICAgICJQTlAwMjAxIiAgICAgIC8qIEVJU0EgRE1BIENvbnRyb2xsZXIgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUE5QZG1hMiAgICAgICAiUE5QMDIwMiIgICAgICAvKiBNQ0EgRE1BIENvbnRyb2xsZXIgICAgICAgICAgICAgICAgICAgICovCisKKy8qIHN0YXJ0IG9mIEF1Z3VzdCAxNSwgMTk5NCBhZGRpdGlvbnMgKi8KKy8qIENNT1MgKi8KKyNkZWZpbmUgUE5QQ01PUyAgICAgICAiSUJNMDAwOSIgICAgICAvKiBDTU9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKy8qIEwyIENhY2hlICovCisjZGVmaW5lIFBOUEwyICAgICAgICAgIklCTTAwMDciICAgICAgLyogTDIgQ2FjaGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisvKiBOVlJBTSAqLworI2RlZmluZSBQTlBOVlJBTSAgICAgICJJQk0wMDA4IiAgICAgIC8qIE5WUkFNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworLyogUG93ZXIgTWFuYWdlbWVudCAqLworI2RlZmluZSBQTlBQTSAgICAgICAgICJJQk0wMDA1IiAgICAgIC8qIFBvd2VyIE1hbmFnZW1lbnQgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIGVuZCBvZiBBdWd1c3QgMTUsIDE5OTQgYWRkaXRpb25zICovCisKKy8qIEtleWJvYXJkcyAqLworCisjZGVmaW5lIFBOUGtleWJvYXJkMCAgIlBOUDAzMDAiICAgICAgLyogSUJNIFBDL1hUIEtCIENudGxyICg4MyBrZXksIG5vIG1vdXNlKSAqLworI2RlZmluZSBQTlBrZXlib2FyZDEgICJQTlAwMzAxIiAgICAgIC8qIE9saXZldHRpIElDTyAoMTAyIGtleSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUE5Qa2V5Ym9hcmQyICAiUE5QMDMwMiIgICAgICAvKiBJQk0gUEMvQVQgS0IgQ250bHIgKDg0IGtleSkgICAgICAgICAgICovCisjZGVmaW5lIFBOUGtleWJvYXJkMyAgIlBOUDAzMDMiICAgICAgLyogSUJNIEVuaGFuY2VkICgxMDEvMiBrZXksIFBTLzIgbW91c2UpICAqLworI2RlZmluZSBQTlBrZXlib2FyZDQgICJQTlAwMzA0IiAgICAgIC8qIE5va2lhIDEwNTAgS0IgQ250bHIgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUE5Qa2V5Ym9hcmQ1ICAiUE5QMDMwNSIgICAgICAvKiBOb2tpYSA5MTQwIEtCIENudGxyICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBOUGtleWJvYXJkNiAgIlBOUDAzMDYiICAgICAgLyogU3RhbmRhcmQgSmFwYW5lc2UgS0IgQ250bHIgICAgICAgICAgICAqLworI2RlZmluZSBQTlBrZXlib2FyZDcgICJQTlAwMzA3IiAgICAgIC8qIE1pY3Jvc29mdCBXaW5kb3dzIChSKSBLQiBDbnRsciAgICAgICAgKi8KKworLyogUGFyYWxsZWwgcG9ydCBjb250cm9sbGVycyAqLworCisjZGVmaW5lIFBOUHBhcmFsbGVsMCAiUE5QMDQwMCIgICAgICAgLyogU3RhbmRhcmQgTFBUIFBhcmFsbGVsIFBvcnQgICAgICAgICAgICAqLworI2RlZmluZSBQTlBwYXJhbGxlbDEgIlBOUDA0MDEiICAgICAgIC8qIEVDUCBQYXJhbGxlbCBQb3J0ICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUE5QZXBwICAgICAgICJJQk0wMDFDIiAgICAgICAvKiBFUFAgUGFyYWxsZWwgUG9ydCAgICAgICAgICAgICAgICAgICAgICovCisKKy8qIFNlcmlhbCBwb3J0IGNvbnRyb2xsZXJzICovCisKKyNkZWZpbmUgUE5Qc2VyaWFsMCAgICJQTlAwNTAwIiAgICAgICAvKiBTdGFuZGFyZCBQQyBTZXJpYWwgcG9ydCAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBOUFNlcmlhbDEgICAiUE5QMDUwMSIgICAgICAgLyogMTY1NTBBIENvbXBhdGlibGUgU2VyaWFsIHBvcnQgICAgICAgICAqLworCisvKiBEaXNrIGNvbnRyb2xsZXJzICovCisKKyNkZWZpbmUgUE5QZGlzazAgICAgICJQTlAwNjAwIiAgICAgICAvKiBHZW5lcmljIEVTREkvSURFL0FUQSBDb21wYXQgSEQgQ250bHIgICovCisjZGVmaW5lIFBOUGRpc2sxICAgICAiUE5QMDYwMSIgICAgICAgLyogUGx1cyBIYXJkY2FyZCBJSSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQTlBkaXNrMiAgICAgIlBOUDA2MDIiICAgICAgIC8qIFBsdXMgSGFyZGNhcmQgSUlYTC9FWiAgICAgICAgICAgICAgICAgKi8KKworLyogRGlza2V0dGUgY29udHJvbGxlcnMgKi8KKworI2RlZmluZSBQTlBkaXNrZXR0ZTAgIlBOUDA3MDAiICAgICAgIC8qIFBDIFN0YW5kYXJkIEZsb3BweSBEaXNrIENvbnRyb2xsZXIgICAgKi8KKworLyogRGlzcGxheSBjb250cm9sbGVycyAqLworCisjZGVmaW5lIFBOUGRpc3BsYXkwICAiUE5QMDkwMCIgICAgICAgLyogVkdBIENvbXBhdGlibGUgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQTlBkaXNwbGF5MSAgIlBOUDA5MDEiICAgICAgIC8qIFZpZGVvIFNldmVuIFZHQSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUE5QZGlzcGxheTIgICJQTlAwOTAyIiAgICAgICAvKiA4NTE0L0EgQ29tcGF0aWJsZSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBOUGRpc3BsYXkzICAiUE5QMDkwMyIgICAgICAgLyogVHJpZGVudCBWR0EgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQTlBkaXNwbGF5NCAgIlBOUDA5MDQiICAgICAgIC8qIENpcnJ1cyBMb2dpYyBMYXB0b3AgVkdBICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUE5QZGlzcGxheTUgICJQTlAwOTA1IiAgICAgICAvKiBDaXJydXMgTG9naWMgVkdBICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBOUGRpc3BsYXk2ICAiUE5QMDkwNiIgICAgICAgLyogVHNlbmcgRVQ0MDAwIG9yIEVUNDAwMC9XMzIgICAgICAgICAgICAqLworI2RlZmluZSBQTlBkaXNwbGF5NyAgIlBOUDA5MDciICAgICAgIC8qIFdlc3Rlcm4gRGlnaXRhbCBWR0EgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUE5QZGlzcGxheTggICJQTlAwOTA4IiAgICAgICAvKiBXZXN0ZXJuIERpZ2l0YWwgTGFwdG9wIFZHQSAgICAgICAgICAgICovCisjZGVmaW5lIFBOUGRpc3BsYXk5ICAiUE5QMDkwOSIgICAgICAgLyogUzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQTlBkaXNwbGF5QSAgIlBOUDA5MEEiICAgICAgIC8qIEFUSSBVbHRyYSBQcm8vUGx1cyAoTWFjaCAzMikgICAgICAgICAgKi8KKyNkZWZpbmUgUE5QZGlzcGxheUIgICJQTlAwOTBCIiAgICAgICAvKiBBVEkgVWx0cmEgKE1hY2ggOCkgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBOUGRpc3BsYXlDICAiUE5QMDkwQyIgICAgICAgLyogWEdBIENvbXBhdGlibGUgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQTlBkaXNwbGF5RCAgIlBOUDA5MEQiICAgICAgIC8qIEFUSSBWR0EgV29uZGVyICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUE5QZGlzcGxheUUgICJQTlAwOTBFIiAgICAgICAvKiBXZWl0ZWsgUDkwMDAgR3JhcGhpY3MgQWRhcHRlciAgICAgICAgICovCisjZGVmaW5lIFBOUGRpc3BsYXlGICAiUE5QMDkwRiIgICAgICAgLyogT2FrIFRlY2hub2xvZ3kgVkdBICAgICAgICAgICAgICAgICAgICAqLworCisvKiBQZXJpcGhlcmFsIGJ1c3NlcyAqLworCisjZGVmaW5lIFBOUGJ1c2VzMCAgICAiUE5QMEEwMCIgICAgICAgLyogSVNBIEJ1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQTlBidXNlczEgICAgIlBOUDBBMDEiICAgICAgIC8qIEVJU0EgQnVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUE5QYnVzZXMyICAgICJQTlAwQTAyIiAgICAgICAvKiBNQ0EgQnVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBOUGJ1c2VzMyAgICAiUE5QMEEwMyIgICAgICAgLyogUENJIEJ1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQTlBidXNlczQgICAgIlBOUDBBMDQiICAgICAgIC8qIFZFU0EvVkwgQnVzICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworLyogUlRDLCBCSU9TLCBwbGFuYXIgZGV2aWNlcyAqLworCisjZGVmaW5lIFBOUHNwZWFrZXIwICAiUE5QMDgwMCIgICAgICAgLyogQVQgU3R5bGUgU3BlYWtlciBTb3VuZCAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQTlBydGMwICAgICAgIlBOUDBCMDAiICAgICAgIC8qIEFUIFJUQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUE5QcG5wYmlvczAgICJQTlAwQzAwIiAgICAgICAvKiBQTlAgQklPUyAob25seSBjcmVhdGVkIGJ5IHJvb3QgZW51bSkgICovCisjZGVmaW5lIFBOUHBucGJpb3MxICAiUE5QMEMwMSIgICAgICAgLyogU3lzdGVtIEJvYXJkIE1lbW9yeSBEZXZpY2UgICAgICAgICAgICAqLworI2RlZmluZSBQTlBwbnBiaW9zMiAgIlBOUDBDMDIiICAgICAgIC8qIE1hdGggQ29wcm9jZXNzb3IgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUE5QcG5wYmlvczMgICJQTlAwQzAzIiAgICAgICAvKiBQTlAgQklPUyBFdmVudCBOb3RpZmljYXRpb24gSW50ZXJydXB0ICovCisKKy8qIFBDTUNJQSBjb250cm9sbGVyICovCisKKyNkZWZpbmUgUE5QcGNtY2lhMCAgICJQTlAwRTAwIiAgICAgICAvKiBJbnRlbCA4MjM2NSBDb21wYXRpYmxlIFBDTUNJQSBDbnRsciAgICovCisKKy8qIE1pY2UgKi8KKworI2RlZmluZSBQTlBtb3VzZTAgICAgIlBOUDBGMDAiICAgICAgIC8qIE1pY3Jvc29mdCBCdXMgTW91c2UgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUE5QbW91c2UxICAgICJQTlAwRjAxIiAgICAgICAvKiBNaWNyb3NvZnQgU2VyaWFsIE1vdXNlICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBOUG1vdXNlMiAgICAiUE5QMEYwMiIgICAgICAgLyogTWljcm9zb2Z0IElucG9ydCBNb3VzZSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQTlBtb3VzZTMgICAgIlBOUDBGMDMiICAgICAgIC8qIE1pY3Jvc29mdCBQUy8yIE1vdXNlICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUE5QbW91c2U0ICAgICJQTlAwRjA0IiAgICAgICAvKiBNb3VzZXN5c3RlbXMgTW91c2UgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBOUG1vdXNlNSAgICAiUE5QMEYwNSIgICAgICAgLyogTW91c2VzeXN0ZW1zIDMgQnV0dG9uIE1vdXNlIC0gQ09NMiAgICAqLworI2RlZmluZSBQTlBtb3VzZTYgICAgIlBOUDBGMDYiICAgICAgIC8qIEdlbml1cyBNb3VzZSAtIENPTTEgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUE5QbW91c2U3ICAgICJQTlAwRjA3IiAgICAgICAvKiBHZW5pdXMgTW91c2UgLSBDT00yICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBOUG1vdXNlOCAgICAiUE5QMEYwOCIgICAgICAgLyogTG9naXRlY2ggU2VyaWFsIE1vdXNlICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQTlBtb3VzZTkgICAgIlBOUDBGMDkiICAgICAgIC8qIE1pY3Jvc29mdCBCYWxscG9pbnQgU2VyaWFsIE1vdXNlICAgICAgKi8KKyNkZWZpbmUgUE5QbW91c2VBICAgICJQTlAwRjBBIiAgICAgICAvKiBNaWNyb3NvZnQgUE5QIE1vdXNlICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBOUG1vdXNlQiAgICAiUE5QMEYwQiIgICAgICAgLyogTWljcm9zb2Z0IFBOUCBCYWxscG9pbnQgTW91c2UgICAgICAgICAqLworCisvKiBNb2RlbXMgKi8KKworI2RlZmluZSBQTlBtb2RlbTAgICAgIlBOUDkwMDAiICAgICAgIC8qIFNwZWNpZmljIElEcyBUQkQgICAgICAgICAgICAgICAgICAgICAgKi8KKworLyogTmV0d29yayBjb250cm9sbGVycyAqLworCisjZGVmaW5lIFBOUG5ldHdvcmtDOSAiUE5QODBDOSIgICAgICAgLyogSUJNIFRva2VuIFJpbmcgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQTlBuZXR3b3JrQ0EgIlBOUDgwQ0EiICAgICAgIC8qIElCTSBUb2tlbiBSaW5nIElJICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUE5QbmV0d29ya0NCICJQTlA4MENCIiAgICAgICAvKiBJQk0gVG9rZW4gUmluZyBJSS9TaG9ydCAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBOUG5ldHdvcmtDQyAiUE5QODBDQyIgICAgICAgLyogSUJNIFRva2VuIFJpbmcgNC8xNk1icyAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQTlBuZXR3b3JrMjcgIlBOUDgzMjciICAgICAgIC8qIElCTSBUb2tlbiBSaW5nIChBbGwgdHlwZXMpICAgICAgICAgICAgKi8KKyNkZWZpbmUgUE5QbmV0d29ya2V0ICJJQk0wMDEwIiAgICAgICAvKiBJQk0gRXRoZXJuZXQgdXNlZCBieSBQb3dlciBQQyAgICAgICAgICovCisjZGVmaW5lIFBOUG5ldGVpc2FldCAiSUJNMjAwMSIgICAgICAgLyogSUJNIEV0aGVybmV0IEVJU0EgYWRhcHRlciAgICAgICAgICAgICAqLworI2RlZmluZSBQTlBBTUQ3OUM5NzAgIklCTTAwMTYiICAgICAgIC8qIEFNRCA3OUM5NzAgKFBDSSBFdGhlcm5ldCkgICAgICAgICAgICAgKi8KKworLyogU0NTSSBjb250cm9sbGVycyAqLworCisjZGVmaW5lIFBOUHNjc2kwICAgICAiUE5QQTAwMCIgICAgICAgLyogQWRhcHRlYyAxNTR4IENvbXBhdGlibGUgU0NTSSBDbnRsciAgICAqLworI2RlZmluZSBQTlBzY3NpMSAgICAgIlBOUEEwMDEiICAgICAgIC8qIEFkYXB0ZWMgMTc0eCBDb21wYXRpYmxlIFNDU0kgQ250bHIgICAgKi8KKyNkZWZpbmUgUE5Qc2NzaTIgICAgICJQTlBBMDAyIiAgICAgICAvKiBGdXR1cmUgRG9tYWluIDE2LTcwMCBDb21wYXQgU0NTSSBDbnRsciovCisjZGVmaW5lIFBOUHNjc2kzICAgICAiUE5QQTAwMyIgICAgICAgLyogUGFuYXNvbmljIENEUk9NIEFkYXB0ZXIgKFNCUHJvL1NCMTYpICAqLworI2RlZmluZSBQTlBzY3NpRiAgICAgIklCTTAwMEYiICAgICAgIC8qIE5DUiA4MTAgU0NTSSBDb250cm9sbGVyICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUE5Qc2NzaTgyNSAgICJJQk0wMDFCIiAgICAgICAvKiBOQ1IgODI1IFNDU0kgQ29udHJvbGxlciAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBOUHNjc2k4NzUgICAiSUJNMDAxOCIgICAgICAgLyogTkNSIDg3NSBTQ1NJIENvbnRyb2xsZXIgICAgICAgICAgICAgICAqLworCisvKiBTb3VuZC9WaWRlbywgTXVsdGltZWRpYSAqLworCisjZGVmaW5lIFBOUG1tMCAgICAgICAiUE5QQjAwMCIgICAgICAgLyogU291bmQgQmxhc3RlciBDb21wYXRpYmxlIFNvdW5kIERldmljZSAqLworI2RlZmluZSBQTlBtbTEgICAgICAgIlBOUEIwMDEiICAgICAgIC8qIE1TIFdpbmRvd3MgU291bmQgU3lzdGVtIENvbXBhdCBEZXZpY2UgKi8KKyNkZWZpbmUgUE5QbW1GICAgICAgICJJQk0wMDBFIiAgICAgICAvKiBDcnlzdGFsIENTNDIzMSBBdWRpbyBEZXZpY2UgICAgICAgICAgICovCisjZGVmaW5lIFBOUHY3MzEwICAgICAiSUJNMDAxNSIgICAgICAgLyogQVNDSUkgVjczMTAgVmlkZW8gQ2FwdHVyZSBEZXZpY2UgICAgICAqLworI2RlZmluZSBQTlBtbTQyMzIgICAgIklCTTAwMTciICAgICAgIC8qIENyeXN0YWwgQ1M0MjMyIEF1ZGlvIERldmljZSAgICAgICAgICAgKi8KKyNkZWZpbmUgUE5QcG1zeW4gICAgICJJQk0wMDFEIiAgICAgICAvKiBZTUYgMjg5QiBjaGlwIChZYW1haGEpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBOUGdwNDIzMiAgICAiSUJNMDAxMiIgICAgICAgLyogQ3J5c3RhbCBDUzQyMzIgR2FtZSBQb3J0ICAgICAgICAgICAgICAqLworI2RlZmluZSBQTlBtaWRpNDIzMiAgIklCTTAwMTMiICAgICAgIC8qIENyeXN0YWwgQ1M0MjMyIE1JREkgICAgICAgICAgICAgICAgICAgKi8KKworLyogT3BlcmF0b3IgUGFuZWwgKi8KKyNkZWZpbmUgUE5Qb3BjdGwgICAgICJJQk0wMDBCIiAgICAgICAvKiBPcGVyYXRvcidzIHBhbmVsICAgICAgICAgICAgICAgICAgICAgICovCisKKy8qIFNlcnZpY2UgUHJvY2Vzc29yICovCisjZGVmaW5lIFBOUHNwICAgICAgICAiSUJNMDAxMSIgICAgICAgLyogSUJNIFNlcnZpY2UgUHJvY2Vzc29yICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQTlBMVHNwICAgICAgIklCTTAwMUUiICAgICAgIC8qIExpZ2h0bmluZy9UZXJsaW5ndWEgU3VwcG9ydCBQcm9jZXNzb3IgKi8KKyNkZWZpbmUgUE5QTFRtc3AgICAgICJJQk0wMDFGIiAgICAgICAvKiBMaWdodG5pbmcvVGVybGluZ3VhIE1pbmktU1AgICAgICAgICAgICovCisKKy8qIE1lbW9yeSBDb250cm9sbGVyICovCisjZGVmaW5lIFBOUG1lbWN0bCAgICAiSUJNMDAwQSIgICAgICAgLyogTWVtb3J5IGNvbnRyb2xsZXIgICAgICAgICAgICAgICAgICAgICAqLworCisvKiBHcmFwaGljcyBBc3Npc3QgKi8KKyNkZWZpbmUgUE5QZ19hc3Npc3QgICJJQk0wMDE0IiAgICAgICAvKiBHcmFwaGljcyBBc3Npc3QgICAgICAgICAgICAgICAgICAgICAgICovCisKKy8qIE1pc2NlbGxhbmVvdXMgRGV2aWNlIENvbnRyb2xsZXJzICovCisjZGVmaW5lIFBOUHRhYmxldCAgICAiSUJNMDAxOSIgICAgICAgLyogSUJNIFRhYmxldCBDb250cm9sbGVyICAgICAgICAgICAgICAgICAqLworCisvKiBQTlAgUGFja2V0IEhhbmRsZXMgKi8KKworI2RlZmluZSBTMV9QYWNrZXQgICAgICAgICAgICAgICAgMHgwQSAgIC8qIFZlcnNpb24gcmVzb3VyY2UgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUzJfUGFja2V0ICAgICAgICAgICAgICAgIDB4MTUgICAvKiBMb2dpY2FsIERFVklEICh3aXRob3V0IGZsYWdzKSAgICAgICovCisjZGVmaW5lIFMyX1BhY2tldF9mbGFncyAgICAgICAgICAweDE2ICAgLyogTG9naWNhbCBERVZJRCAod2l0aCBmbGFncykgICAgICAgICAqLworI2RlZmluZSBTM19QYWNrZXQgICAgICAgICAgICAgICAgMHgxQyAgIC8qIENvbXBhdGlibGUgZGV2aWNlIElEICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUzRfUGFja2V0ICAgICAgICAgICAgICAgIDB4MjIgICAvKiBJUlEgcmVzb3VyY2UgKHdpdGhvdXQgZmxhZ3MpICAgICAgICovCisjZGVmaW5lIFM0X1BhY2tldF9mbGFncyAgICAgICAgICAweDIzICAgLyogSVJRIHJlc291cmNlICh3aXRoIGZsYWdzKSAgICAgICAgICAqLworI2RlZmluZSBTNV9QYWNrZXQgICAgICAgICAgICAgICAgMHgyQSAgIC8qIERNQSByZXNvdXJjZSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUzZfUGFja2V0ICAgICAgICAgICAgICAgIDB4MzAgICAvKiBEZXBlbmQgZnVuY3Qgc3RhcnQgKHcvbyBwcmlvcml0eSkgICovCisjZGVmaW5lIFM2X1BhY2tldF9wcmlvcml0eSAgICAgICAweDMxICAgLyogRGVwZW5kIGZ1bmN0IHN0YXJ0ICh3LyBwcmlvcml0eSkgICAqLworI2RlZmluZSBTN19QYWNrZXQgICAgICAgICAgICAgICAgMHgzOCAgIC8qIERlcGVuZCBmdW5jdCBlbmQgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUzhfUGFja2V0ICAgICAgICAgICAgICAgIDB4NDcgICAvKiBJL08gcG9ydCByZXNvdXJjZSAody9vIGZpeGVkIGxvYykgICovCisjZGVmaW5lIFM5X1BhY2tldF9maXhlZCAgICAgICAgICAweDRCICAgLyogSS9PIHBvcnQgcmVzb3VyY2UgKHcvIGZpeGVkIGxvYykgICAqLworI2RlZmluZSBTMTRfUGFja2V0ICAgICAgICAgICAgICAgMHg3MSAgIC8qIFZlbmRvciBkZWZpbmVkICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUzE1X1BhY2tldCAgICAgICAgICAgICAgIDB4NzggICAvKiBFbmQgb2YgcmVzb3VyY2UgKHcvbyBjaGVja3N1bSkgICAgICovCisjZGVmaW5lIFMxNV9QYWNrZXRfY2hlY2tzdW0gICAgICAweDc5ICAgLyogRW5kIG9mIHJlc291cmNlICh3LyBjaGVja3N1bSkgICAgICAqLworI2RlZmluZSBMMV9QYWNrZXQgICAgICAgICAgICAgICAgMHg4MSAgIC8qIE1lbW9yeSByYW5nZSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTDFfU2hhZG93ICAgICAgICAgICAgICAgIDB4MjAgICAvKiBNZW1vcnkgaXMgc2hhZG93YWJsZSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEwxXzMyYml0X21lbSAgICAgICAgICAgICAweDE4ICAgLyogMzItYml0IG1lbW9yeSBvbmx5ICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBMMV84XzE2Yml0X21lbSAgICAgICAgICAgMHgxMCAgIC8qIDgtIGFuZCAxNi1iaXQgc3VwcG9ydGVkICAgICAgICAgICAgKi8KKyNkZWZpbmUgTDFfRGVjb2RlX0hpICAgICAgICAgICAgIDB4MDQgICAvKiBkZWNvZGUgc3VwcG9ydHMgaGlnaCBhZGRyZXNzICAgICAgICovCisjZGVmaW5lIEwxX0NhY2hlICAgICAgICAgICAgICAgICAweDAyICAgLyogcmVhZCBjYWNoZWFibGUsIHdyaXRlLXRocm91Z2ggICAgICAqLworI2RlZmluZSBMMV9Xcml0ZWFibGUgICAgICAgICAgICAgMHgwMSAgIC8qIE1lbW9yeSBpcyB3cml0ZWFibGUgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTDJfUGFja2V0ICAgICAgICAgICAgICAgIDB4ODIgICAvKiBBTlNJIElEIHN0cmluZyAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEwzX1BhY2tldCAgICAgICAgICAgICAgICAweDgzICAgLyogVW5pY29kZSBJRCBzdHJpbmcgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBMNF9QYWNrZXQgICAgICAgICAgICAgICAgMHg4NCAgIC8qIFZlbmRvciBkZWZpbmVkICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTDVfUGFja2V0ICAgICAgICAgICAgICAgIDB4ODUgICAvKiBMYXJnZSBJL08gICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEw2X1BhY2tldCAgICAgICAgICAgICAgICAweDg2ICAgLyogMzItYml0IEZpeGVkIExvYyBNZW0gUmFuZ2UgRGVzYyAgICAqLworI2RlZmluZSBFTkRfVEFHICAgICAgICAgICAgICAgICAgMHg3OCAgIC8qIEVuZCBvZiByZXNvdXJjZSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREZfU1RBUlRfVEFHICAgICAgICAgICAgIDB4MzAgICAvKiBEZXBlbmRlbnQgZnVuY3Rpb24gc3RhcnQgICAgICAgICAgICovCisjZGVmaW5lIERGX1NUQVJUX1RBR19wcmlvcml0eSAgICAweDMxICAgLyogRGVwZW5kZW50IGZ1bmN0aW9uIHN0YXJ0ICAgICAgICAgICAqLworI2RlZmluZSBERl9FTkRfVEFHICAgICAgICAgICAgICAgMHgzOCAgIC8qIERlcGVuZGVudCBmdW5jdGlvbiBlbmQgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU1VCT1BUSU1BTF9DT05GSUdVUkFUSU9OIDB4MiAgICAvKiBQcmlvcml0eSBieXRlIHN1YiBvcHRpbWFsIGNvbmZpZyAgICovCisKKy8qIERldmljZSBCYXNlIFR5cGUgQ29kZXMgKi8KKwordHlwZWRlZiBlbnVtIF9QblBfQkFTRV9UWVBFIHsKKyAgUmVzZXJ2ZWQgPSAwLAorICBNYXNzU3RvcmFnZURldmljZSA9IDEsCisgIE5ldHdvcmtJbnRlcmZhY2VDb250cm9sbGVyID0gMiwKKyAgRGlzcGxheUNvbnRyb2xsZXIgPSAzLAorICBNdWx0aW1lZGlhQ29udHJvbGxlciA9IDQsCisgIE1lbW9yeUNvbnRyb2xsZXIgPSA1LAorICBCcmlkZ2VDb250cm9sbGVyID0gNiwKKyAgQ29tbXVuaWNhdGlvbnNEZXZpY2UgPSA3LAorICBTeXN0ZW1QZXJpcGhlcmFsID0gOCwKKyAgSW5wdXREZXZpY2UgPSA5LAorICBTZXJ2aWNlUHJvY2Vzc29yID0gMHgwQSwgICAgICAgICAgICAgIC8qIDExLzIvOTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgfSBQblBfQkFTRV9UWVBFOworCisvKiBEZXZpY2UgU3ViIFR5cGUgQ29kZXMgKi8KKwordHlwZWRlZiBlbnVtIF9QblBfU1VCX1RZUEUgeworICBTQ1NJQ29udHJvbGxlciA9IDAsCisgIElERUNvbnRyb2xsZXIgPSAxLAorICBGbG9wcHlDb250cm9sbGVyID0gMiwKKyAgSVBJQ29udHJvbGxlciA9IDMsCisgIE90aGVyTWFzc1N0b3JhZ2VDb250cm9sbGVyID0gMHg4MCwKKworICBFdGhlcm5ldENvbnRyb2xsZXIgPSAwLAorICBUb2tlblJpbmdDb250cm9sbGVyID0gMSwKKyAgRkRESUNvbnRyb2xsZXIgPSAyLAorICBPdGhlck5ldHdvcmtDb250cm9sbGVyID0gMHg4MCwKKworICBWR0FDb250cm9sbGVyPSAwLAorICBTVkdBQ29udHJvbGxlcj0gMSwKKyAgWEdBQ29udHJvbGxlcj0gMiwKKyAgT3RoZXJEaXNwbGF5Q29udHJvbGxlciA9IDB4ODAsCisKKyAgVmlkZW9Db250cm9sbGVyID0gMCwKKyAgQXVkaW9Db250cm9sbGVyID0gMSwKKyAgT3RoZXJNdWx0aW1lZGlhQ29udHJvbGxlciA9IDB4ODAsCisKKyAgUkFNID0gMCwKKyAgRkxBU0ggPSAxLAorICBPdGhlck1lbW9yeURldmljZSA9IDB4ODAsCisKKyAgSG9zdFByb2Nlc3NvckJyaWRnZSA9IDAsCisgIElTQUJyaWRnZSA9IDEsCisgIEVJU0FCcmlkZ2UgPSAyLAorICBNaWNyb0NoYW5uZWxCcmlkZ2UgPSAzLAorICBQQ0lCcmlkZ2UgPSA0LAorICBQQ01DSUFCcmlkZ2UgPSA1LAorICBWTUVCcmlkZ2UgPSA2LAorICBPdGhlckJyaWRnZURldmljZSA9IDB4ODAsCisKKyAgUlMyMzJEZXZpY2UgPSAwLAorICBBVENvbXBhdGlibGVQYXJhbGxlbFBvcnQgPSAxLAorICBPdGhlckNvbW11bmljYXRpb25zRGV2aWNlID0gMHg4MCwKKworICBQcm9ncmFtbWFibGVJbnRlcnJ1cHRDb250cm9sbGVyID0gMCwKKyAgRE1BQ29udHJvbGxlciA9IDEsCisgIFN5c3RlbVRpbWVyID0gMiwKKyAgUmVhbFRpbWVDbG9jayA9IDMsCisgIEwyQ2FjaGUgPSA0LAorICBOVlJBTSA9IDUsCisgIFBvd2VyTWFuYWdlbWVudCA9IDYsCisgIENNT1MgPSA3LAorICBPcGVyYXRvclBhbmVsID0gOCwKKyAgU2VydmljZVByb2Nlc3NvckNsYXNzMSA9IDksCisgIFNlcnZpY2VQcm9jZXNzb3JDbGFzczIgPSAweEEsCisgIFNlcnZpY2VQcm9jZXNzb3JDbGFzczMgPSAweEIsCisgIEdyYXBoaWNBc3Npc3QgPSAweEMsCisgIFN5c3RlbVBsYW5hciA9IDB4RiwgICAgICAgICAgICAgICAgICAgLyogMTAvNS85NSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBPdGhlclN5c3RlbVBlcmlwaGVyYWwgPSAweDgwLAorCisgIEtleWJvYXJkQ29udHJvbGxlciA9IDAsCisgIERpZ2l0aXplciA9IDEsCisgIE1vdXNlQ29udHJvbGxlciA9IDIsCisgIFRhYmxldENvbnRyb2xsZXIgPSAzLCAgICAgICAgICAgICAgICAgLyogMTAvMjcvOTUgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBPdGhlcklucHV0Q29udHJvbGxlciA9IDB4ODAsCisKKyAgR2VuZXJhbE1lbW9yeUNvbnRyb2xsZXIgPSAwLAorICB9IFBuUF9TVUJfVFlQRTsKKworLyogRGV2aWNlIEludGVyZmFjZSBUeXBlIENvZGVzICovCisKK3R5cGVkZWYgZW51bSBfUG5QX0lOVEVSRkFDRSB7CisgIEdlbmVyYWwgPSAwLAorICBHZW5lcmFsU0NTSSA9IDAsCisgIEdlbmVyYWxJREUgPSAwLAorICBBVEFDb21wYXRpYmxlID0gMSwKKworICBHZW5lcmFsRmxvcHB5ID0gMCwKKyAgQ29tcGF0aWJsZTc2NSA9IDEsCisgIE5TMzk4X0Zsb3BweSA9IDIsICAgICAgICAgICAgICAgICAgICAgLyogTlMgU3VwZXIgSS9PIHdpcmVkIHRvIHVzZSBpbmRleAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyIGF0IHBvcnQgMzk4IGFuZCBkYXRhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXIgYXQgcG9ydCAzOTkgICAgICAgICAgICAgICAqLworICBOUzI2RV9GbG9wcHkgPSAzLCAgICAgICAgICAgICAgICAgICAgIC8qIFBvcnRzIDI2RSBhbmQgMjZGICAgICAgICAgICAgICAgICAgKi8KKyAgTlMxNUNfRmxvcHB5ID0gNCwgICAgICAgICAgICAgICAgICAgICAvKiBQb3J0cyAxNUMgYW5kIDE1RCAgICAgICAgICAgICAgICAgICovCisgIE5TMkVfRmxvcHB5ID0gNSwgICAgICAgICAgICAgICAgICAgICAgLyogUG9ydHMgMkUgYW5kIDJGICAgICAgICAgICAgICAgICAgICAqLworICBDSFJQX0Zsb3BweSA9IDYsICAgICAgICAgICAgICAgICAgICAgIC8qIENIUlAgRmxvcHB5IGluIFBSKlAgc3lzdGVtICAgICAgICAgKi8KKworICBHZW5lcmFsSVBJID0gMCwKKworICBHZW5lcmFsRXRoZXIgPSAwLAorICBHZW5lcmFsVG9rZW4gPSAwLAorICBHZW5lcmFsRkRESSA9IDAsCisKKyAgR2VuZXJhbFZHQSA9IDAsCisgIEdlbmVyYWxTVkdBID0gMCwKKyAgR2VuZXJhbFhHQSA9IDAsCisKKyAgR2VuZXJhbFZpZGVvID0gMCwKKyAgR2VuZXJhbEF1ZGlvID0gMCwKKyAgQ1M0MjMyQXVkaW8gPSAxLCAgICAgICAgICAgICAgICAgICAgICAvKiBDUyA0MjMyIFBsdWcgJ24gUGxheSBDb25maWd1cmVkICAgICovCisKKyAgR2VuZXJhbFJBTSA9IDAsCisgIEdlbmVyYWxGTEFTSCA9IDAsCisgIFBDSU1lbW9yeUNvbnRyb2xsZXIgPSAwLCAgICAgICAgICAgICAgLyogUENJIENvbmZpZyBNZXRob2QgICAgICAgICAgICAgICAgICAqLworICBSUzZLTWVtb3J5Q29udHJvbGxlciA9IDEsICAgICAgICAgICAgIC8qIFJTNksgQ29uZmlnIE1ldGhvZCAgICAgICAgICAgICAgICAgKi8KKworICBHZW5lcmFsSG9zdEJyaWRnZSA9IDAsCisgIEdlbmVyYWxJU0FCcmlkZ2UgPSAwLAorICBHZW5lcmFsRUlTQUJyaWRnZSA9IDAsCisgIEdlbmVyYWxNQ0FCcmlkZ2UgPSAwLAorICBHZW5lcmFsUENJQnJpZGdlID0gMCwKKyAgUENJQnJpZGdlRGlyZWN0ID0gMCwKKyAgUENJQnJpZGdlSW5kaXJlY3QgPSAxLAorICBQQ0lCcmlkZ2VSUzZLID0gMiwKKyAgR2VuZXJhbFBDTUNJQUJyaWRnZSA9IDAsCisgIEdlbmVyYWxWTUVCcmlkZ2UgPSAwLAorCisgIEdlbmVyYWxSUzIzMiA9IDAsCisgIENPTXggPSAxLAorICBDb21wYXRpYmxlMTY0NTAgPSAyLAorICBDb21wYXRpYmxlMTY1NTAgPSAzLAorICBOUzM5OFNlclBvcnQgPSA0LCAgICAgICAgICAgICAgICAgICAgIC8qIE5TIFN1cGVyIEkvTyB3aXJlZCB0byB1c2UgaW5kZXgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlciBhdCBwb3J0IDM5OCBhbmQgZGF0YQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyIGF0IHBvcnQgMzk5ICAgICAgICAgICAgICAgKi8KKyAgTlMyNkVTZXJQb3J0ID0gNSwgICAgICAgICAgICAgICAgICAgICAvKiBQb3J0cyAyNkUgYW5kIDI2RiAgICAgICAgICAgICAgICAgICovCisgIE5TMTVDU2VyUG9ydCA9IDYsICAgICAgICAgICAgICAgICAgICAgLyogUG9ydHMgMTVDIGFuZCAxNUQgICAgICAgICAgICAgICAgICAqLworICBOUzJFU2VyUG9ydCA9IDcsICAgICAgICAgICAgICAgICAgICAgIC8qIFBvcnRzIDJFIGFuZCAyRiAgICAgICAgICAgICAgICAgICAgKi8KKworICBHZW5lcmFsUGFyUG9ydCA9IDAsCisgIExQVHggPSAxLAorICBOUzM5OFBhclBvcnQgPSAyLCAgICAgICAgICAgICAgICAgICAgIC8qIE5TIFN1cGVyIEkvTyB3aXJlZCB0byB1c2UgaW5kZXgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlciBhdCBwb3J0IDM5OCBhbmQgZGF0YQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyIGF0IHBvcnQgMzk5ICAgICAgICAgICAgICAgKi8KKyAgTlMyNkVQYXJQb3J0ID0gMywgICAgICAgICAgICAgICAgICAgICAvKiBQb3J0cyAyNkUgYW5kIDI2RiAgICAgICAgICAgICAgICAgICovCisgIE5TMTVDUGFyUG9ydCA9IDQsICAgICAgICAgICAgICAgICAgICAgLyogUG9ydHMgMTVDIGFuZCAxNUQgICAgICAgICAgICAgICAgICAqLworICBOUzJFUGFyUG9ydCA9IDUsICAgICAgICAgICAgICAgICAgICAgIC8qIFBvcnRzIDJFIGFuZCAyRiAgICAgICAgICAgICAgICAgICAgKi8KKworICBHZW5lcmFsUElDID0gMCwKKyAgSVNBX1BJQyA9IDEsCisgIEVJU0FfUElDID0gMiwKKyAgTVBJQyA9IDMsCisgIFJTNktfUElDID0gNCwKKworICBHZW5lcmFsRE1BID0gMCwKKyAgSVNBX0RNQSA9IDEsCisgIEVJU0FfRE1BID0gMiwKKworICBHZW5lcmFsVGltZXIgPSAwLAorICBJU0FfVGltZXIgPSAxLAorICBFSVNBX1RpbWVyID0gMiwKKyAgR2VuZXJhbFJUQyA9IDAsCisgIElTQV9SVEMgPSAxLAorCisgIFN0b3JlVGhydU9ubHkgPSAxLAorICBTdG9yZUluRW5hYmxlZCA9IDIsCisgIFJTNktMMkNhY2hlID0gMywKKworICBJbmRpcmVjdE5WUkFNID0gMCwgICAgICAgICAgICAgICAgICAgIC8qIEluZGlyZWN0bHkgYWRkcmVzc2VkICAgICAgICAgICAgICAgKi8KKyAgRGlyZWN0TlZSQU0gPSAxLCAgICAgICAgICAgICAgICAgICAgICAvKiBNZW1vcnkgTWFwcGVkICAgICAgICAgICAgICAgICAgICAgICovCisgIEluZGlyZWN0TlZSQU0yNCA9IDIsICAgICAgICAgICAgICAgICAgLyogSW5kaXJlY3RseSBhZGRyZXNzZWQgLSAyNCBiaXQgICAgICAqLworCisgIEdlbmVyYWxQb3dlck1hbmFnZW1lbnQgPSAwLAorICBFUE9XUG93ZXJNYW5hZ2VtZW50ID0gMSwKKyAgUG93ZXJDb250cm9sID0gMiwgICAgICAgICAgICAgICAgICAgIC8vIGQxMzc4CisKKyAgR2VuZXJhbENNT1MgPSAwLAorCisgIEdlbmVyYWxPUFBhbmVsID0gMCwKKyAgSGFyZGRpc2tMaWdodCA9IDEsCisgIENEUk9NTGlnaHQgPSAyLAorICBQb3dlckxpZ2h0ID0gMywKKyAgS2V5TG9jayA9IDQsCisgIEFORGlzcGxheSA9IDUsICAgICAgICAgICAgICAgICAgICAgICAgLyogQWxwaGFOdW1lcmljIERpc3BsYXkgICAgICAgICAgICAgICAqLworICBTeXN0ZW1TdGF0dXNMRUQgPSA2LCAgICAgICAgICAgICAgICAgIC8qIDMgZGlnaXQgNyBzZWdtZW50IExFRCAgICAgICAgICAgICAgKi8KKyAgQ0hSUF9TeXN0ZW1TdGF0dXNMRUQgPSA3LCAgICAgICAgICAgICAvKiBDSFJQIExFRHMgaW4gUFIqUCBzeXN0ZW0gICAgICAgICAgICovCisKKyAgR2VuZXJhbFNlcnZpY2VQcm9jZXNzb3IgPSAwLAorCisgIFRyYW5zZmVyRGF0YSA9IDEsCisgIElHTUMzMiA9IDIsCisgIElHTUM2NCA9IDMsCisKKyAgR2VuZXJhbFN5c3RlbVBsYW5hciA9IDAsICAgICAgICAgICAgICAvKiAxMC81Lzk1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgfSBQblBfSU5URVJGQUNFOworCisvKiBQblAgcmVzb3VyY2VzICovCisKKy8qIENvbXByZXNzZWQgQVNDSUkgaXMgNSBiaXRzIHBlciBjaGFyOyAwMDAwMT1BIC4uLiAxMTAxMD1aICovCisKK3R5cGVkZWYgc3RydWN0IF9TRVJJQUxfSUQgeworICB1bnNpZ25lZCBjaGFyIFZlbmRvcklEMDsgICAgICAgICAgICAgIC8qICAgIEJpdCg3KT0wICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICBCaXRzKDY6Mik9MXN0IGNoYXJhY3RlciBpbiAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogICAgICAgY29tcHJlc3NlZCBBU0NJSSAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgIEJpdHMoMTowKT0ybmQgY2hhcmFjdGVyIGluICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICBjb21wcmVzc2VkIEFTQ0lJIGJpdHMoNDozKSAgICovCisgIHVuc2lnbmVkIGNoYXIgVmVuZG9ySUQxOyAgICAgICAgICAgICAgLyogICAgQml0cyg3OjUpPTJuZCBjaGFyYWN0ZXIgaW4gICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgIGNvbXByZXNzZWQgQVNDSUkgYml0cygyOjApICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICBCaXRzKDQ6MCk9M3JkIGNoYXJhY3RlciBpbiAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogICAgICAgY29tcHJlc3NlZCBBU0NJSSAgICAgICAgICAgICAqLworICB1bnNpZ25lZCBjaGFyIFZlbmRvcklEMjsgICAgICAgICAgICAgIC8qIFByb2R1Y3QgbnVtYmVyIC0gdmVuZG9yIGFzc2lnbmVkICAgKi8KKyAgdW5zaWduZWQgY2hhciBWZW5kb3JJRDM7ICAgICAgICAgICAgICAvKiBQcm9kdWN0IG51bWJlciAtIHZlbmRvciBhc3NpZ25lZCAgICovCisKKy8qIFNlcmlhbCBudW1iZXIgaXMgdG8gcHJvdmlkZSB1bmlxdWVuZXNzIGlmIG1vcmUgdGhhbiBvbmUgYm9hcmQgb2Ygc2FtZSAgICAgICovCisvKiB0eXBlIGlzIGluIHN5c3RlbS4gIE11c3QgYmUgIkZGRkZGRkZGIiBpZiBmZWF0dXJlIG5vdCBzdXBwb3J0ZWQuICAgICAgICAgICAqLworCisgIHVuc2lnbmVkIGNoYXIgU2VyaWFsMDsgICAgICAgICAgICAgICAgLyogVW5pcXVlIHNlcmlhbCBudW1iZXIgYml0cyAoNzowKSAgICAqLworICB1bnNpZ25lZCBjaGFyIFNlcmlhbDE7ICAgICAgICAgICAgICAgIC8qIFVuaXF1ZSBzZXJpYWwgbnVtYmVyIGJpdHMgKDE1OjgpICAgKi8KKyAgdW5zaWduZWQgY2hhciBTZXJpYWwyOyAgICAgICAgICAgICAgICAvKiBVbmlxdWUgc2VyaWFsIG51bWJlciBiaXRzICgyMzoxNikgICovCisgIHVuc2lnbmVkIGNoYXIgU2VyaWFsMzsgICAgICAgICAgICAgICAgLyogVW5pcXVlIHNlcmlhbCBudW1iZXIgYml0cyAoMzE6MjQpICAqLworICB1bnNpZ25lZCBjaGFyIENoZWNrc3VtOworICB9IFNFUklBTF9JRDsKKwordHlwZWRlZiBlbnVtIF9QblBJdGVtTmFtZSB7CisgIFVudXNlZCA9IDAsCisgIFBuUFZlcnNpb24gPSAxLAorICBMb2dpY2FsRGV2aWNlID0gMiwKKyAgQ29tcGF0aWJsZURldmljZSA9IDMsCisgIElSUUZvcm1hdCA9IDQsCisgIERNQUZvcm1hdCA9IDUsCisgIFN0YXJ0RGVwRnVuYyA9IDYsCisgIEVuZERlcEZ1bmMgPSA3LAorICBJT1BvcnQgPSA4LAorICBGaXhlZElPUG9ydCA9IDksCisgIFJlczEgPSAxMCwKKyAgUmVzMiA9IDExLAorICBSZXMzID0gMTIsCisgIFNtYWxsVmVuZG9ySXRlbSA9IDE0LAorICBFbmRUYWcgPSAxNSwKKyAgTWVtb3J5UmFuZ2UgPSAxLAorICBBTlNJSWRlbnRpZmllciA9IDIsCisgIFVuaWNvZGVJZGVudGlmaWVyID0gMywKKyAgTGFyZ2VWZW5kb3JJdGVtID0gNCwKKyAgTWVtb3J5UmFuZ2UzMiA9IDUsCisgIE1lbW9yeVJhbmdlRml4ZWQzMiA9IDYsCisgIH0gUG5QSXRlbU5hbWU7CisKKy8qIERlZmluZSBhIGJ1bmNoIG9mIGFjY2VzcyBmdW5jdGlvbnMgZm9yIHRoZSBiaXRzIGluIHRoZSB0YWcgZmllbGQgKi8KKworLyogVGFnIHR5cGUgLSAwID0gc21hbGw7IDEgPSBsYXJnZSAqLworI2RlZmluZSB0YWdfdHlwZSh0KSAoKCh0KSAmIDB4ODApPj43KQorI2RlZmluZSBzZXRfdGFnX3R5cGUodCx2KSAodCA9ICh0ICYgMHg3ZikgfCAoKHYpPDw3KSkKKworLyogU21hbGwgaXRlbSBuYW1lIGlzIDQgYml0cyAtIG9uZSBvZiBQblBJdGVtTmFtZSBlbnVtIGFib3ZlICovCisjZGVmaW5lIHRhZ19zbWFsbF9pdGVtX25hbWUodCkgKCgodCkgJiAweDc4KT4+MykKKyNkZWZpbmUgc2V0X3RhZ19zbWFsbF9pdGVtX25hbWUodCx2KSAodCA9ICh0ICYgMHgwNykgfCAoKHYpPDwzKSkKKworLyogU21hbGwgaXRlbSBjb3VudCBpcyAzIGJpdHMgLSBjb3VudCBvZiBmdXJ0aGVyIGJ5dGVzIGluIHBhY2tldCAqLworI2RlZmluZSB0YWdfc21hbGxfY291bnQodCkgKCh0KSAmIDB4MDcpCisjZGVmaW5lIHNldF90YWdfY291bnQodCx2KSAodCA9ICh0ICYgMHg3OCkgfCAodikpCisKKy8qIExhcmdlIGl0ZW0gbmFtZSBpcyA3IGJpdHMgLSBvbmUgb2YgUG5QSXRlbU5hbWUgZW51bSBhYm92ZSAqLworI2RlZmluZSB0YWdfbGFyZ2VfaXRlbV9uYW1lKHQpICgodCkgJiAweDdmKQorI2RlZmluZSBzZXRfdGFnX2xhcmdlX2l0ZW1fbmFtZSh0LHYpICh0ID0gKHQgfCAweDgwKSB8ICh2KSkKKworLyogYSBQblAgcmVzb3VyY2UgaXMgYSBidW5jaCBvZiBjb250aWd1b3VzIFRBRyBwYWNrZXRzIGVuZGluZyB3aXRoIGFuIGVuZCB0YWcgKi8KKwordHlwZWRlZiB1bmlvbiBfUG5QX1RBR19QQUNLRVQgeworICBzdHJ1Y3QgX1MxX1BhY2t7ICAgICAgICAgICAgICAgICAgICAgIC8qIFZFUlNJT04gUEFDS0VUICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICB1bnNpZ25lZCBjaGFyIFRhZzsgICAgICAgICAgICAgICAgICAvKiBzbWFsbCB0YWcgPSAweDBhICAgICAgICAgICAgICAgICAgICovCisgICAgdW5zaWduZWQgY2hhciBWZXJzaW9uWzJdOyAgICAgICAgICAgLyogUG5QIHZlcnNpb24sIFZlbmRvciB2ZXJzaW9uICAgICAgICAqLworICAgIH0gUzFfUGFjazsKKworICBzdHJ1Y3QgX1MyX1BhY2t7ICAgICAgICAgICAgICAgICAgICAgIC8qIExPR0lDQUwgREVWSUNFIElEIFBBQ0tFVCAgICAgICAgICAgKi8KKyAgICB1bnNpZ25lZCBjaGFyIFRhZzsgICAgICAgICAgICAgICAgICAvKiBzbWFsbCB0YWcgPSAweDE1IG9yIDB4MTYgICAgICAgICAgICovCisgICAgdW5zaWduZWQgY2hhciBEZXZJZFs0XTsgICAgICAgICAgICAgLyogTG9naWNhbCBkZXZpY2UgaWQgICAgICAgICAgICAgICAgICAqLworICAgIHVuc2lnbmVkIGNoYXIgRmxhZ3NbMl07ICAgICAgICAgICAgIC8qIGJpdCgwKSBib290IGRldmljZTsgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBiaXQoNzoxKSBjbWQgaW4gcmFuZ2UgeDMxLXgzNyAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYml0KDc6MCkgY21kIGluIHJhbmdlIHgyOC14M2YgKG9wdCkqLworICAgIH0gUzJfUGFjazsKKworICBzdHJ1Y3QgX1MzX1BhY2t7ICAgICAgICAgICAgICAgICAgICAgIC8qIENPTVBBVElCTEUgREVWSUNFIElEIFBBQ0tFVCAgICAgICAgKi8KKyAgICB1bnNpZ25lZCBjaGFyIFRhZzsgICAgICAgICAgICAgICAgICAvKiBzbWFsbCB0YWcgPSAweDFjICAgICAgICAgICAgICAgICAgICovCisgICAgdW5zaWduZWQgY2hhciBDb21wYXRJZFs0XTsgICAgICAgICAgLyogQ29tcGF0aWJsZSBkZXZpY2UgaWQgICAgICAgICAgICAgICAqLworICAgIH0gUzNfUGFjazsKKworICBzdHJ1Y3QgX1M0X1BhY2t7ICAgICAgICAgICAgICAgICAgICAgIC8qIElSUSBQQUNLRVQgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICB1bnNpZ25lZCBjaGFyIFRhZzsgICAgICAgICAgICAgICAgICAvKiBzbWFsbCB0YWcgPSAweDIyIG9yIDB4MjMgICAgICAgICAgICovCisgICAgdW5zaWduZWQgY2hhciBJUlFNYXNrWzJdOyAgICAgICAgICAgLyogYml0KDApIGlzIElSUTAsIC4uLjsgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGJpdCgwKSBpcyBJUlE4IC4uLiAgICAgICAgICAgICAgICAgKi8KKyAgICB1bnNpZ25lZCBjaGFyIElSUUluZm87ICAgICAgICAgICAgICAvKiBvcHRpb25hbDsgYXNzdW1lIGJpdCgwKT0xOyBlbHNlICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIGJpdCgwKSAtIGhpZ2ggdHJ1ZSBlZGdlIHNlbnNpdGl2ZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICBiaXQoMSkgLSBsb3cgdHJ1ZSBlZGdlIHNlbnNpdGl2ZSAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgYml0KDIpIC0gaGlnaCB0cnVlIGxldmVsIHNlbnNpdGl2ZSovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIGJpdCgzKSAtIGxvdyB0cnVlIGxldmVsIHNlbnNpdGl2ZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICBiaXQoNzo0KSAtIG11c3QgYmUgMCAgICAgICAgICAgICAgKi8KKyAgICB9IFM0X1BhY2s7CisKKyAgc3RydWN0IF9TNV9QYWNreyAgICAgICAgICAgICAgICAgICAgICAvKiBETUEgUEFDS0VUICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgdW5zaWduZWQgY2hhciBUYWc7ICAgICAgICAgICAgICAgICAgLyogc21hbGwgdGFnID0gMHgyYSAgICAgICAgICAgICAgICAgICAqLworICAgIHVuc2lnbmVkIGNoYXIgRE1BTWFzazsgICAgICAgICAgICAgIC8qIGJpdCgwKSBpcyBjaGFubmVsIDAgLi4uICAgICAgICAgICAgKi8KKyAgICB1bnNpZ25lZCBjaGFyIERNQUluZm87CisgICAgfSBTNV9QYWNrOworCisgIHN0cnVjdCBfUzZfUGFja3sgICAgICAgICAgICAgICAgICAgICAgLyogU1RBUlQgREVQRU5ERU5UIEZVTkNUSU9OIFBBQ0tFVCAgICAqLworICAgIHVuc2lnbmVkIGNoYXIgVGFnOyAgICAgICAgICAgICAgICAgIC8qIHNtYWxsIHRhZyA9IDB4MzAgb3IgMHgzMSAgICAgICAgICAgKi8KKyAgICB1bnNpZ25lZCBjaGFyIFByaW9yaXR5OyAgICAgICAgICAgICAvKiBPcHRpb25hbDsgaWYgbWlzc2luZyB0aGVuIHgwMTsgZWxzZSovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIHgwMCA9IGJlc3QgcG9zc2libGUgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICB4MDEgPSBhY2NlcHRpYmxlICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgeDAyID0gc3ViLW9wdGltYWwgYnV0IGZ1bmN0aW9uYWwgICovCisgICAgfSBTNl9QYWNrOworCisgIHN0cnVjdCBfUzdfUGFja3sgICAgICAgICAgICAgICAgICAgICAgLyogRU5EIERFUEVOREVOVCBGVU5DVElPTiBQQUNLRVQgICAgICAqLworICAgIHVuc2lnbmVkIGNoYXIgVGFnOyAgICAgICAgICAgICAgICAgIC8qIHNtYWxsIHRhZyA9IDB4MzggICAgICAgICAgICAgICAgICAgKi8KKyAgICB9IFM3X1BhY2s7CisKKyAgc3RydWN0IF9TOF9QYWNreyAgICAgICAgICAgICAgICAgICAgICAvKiBWQVJJQUJMRSBJL08gUE9SVCBQQUNLRVQgICAgICAgICAgICovCisgICAgdW5zaWduZWQgY2hhciBUYWc7ICAgICAgICAgICAgICAgICAgLyogc21hbGwgdGFnIHg0NyAgICAgICAgICAgICAgICAgICAgICAqLworICAgIHVuc2lnbmVkIGNoYXIgSU9JbmZvOyAgICAgICAgICAgICAgIC8qIHgwICA9IGRlY29kZSBvbmx5IGJpdHMoOTowKTsgICAgICAgKi8KKyNkZWZpbmUgIElTQUFkZHIxNmJpdCAgICAgICAgIDB4MDEgICAgICAvKiB4MDEgPSBkZWNvZGUgYml0cygxNTowKSAgICAgICAgICAgICovCisgICAgdW5zaWduZWQgY2hhciBSYW5nZU1pblsyXTsgICAgICAgICAgLyogTWluIGJhc2UgYWRkcmVzcyAgICAgICAgICAgICAgICAgICAqLworICAgIHVuc2lnbmVkIGNoYXIgUmFuZ2VNYXhbMl07ICAgICAgICAgIC8qIE1heCBiYXNlIGFkZHJlc3MgICAgICAgICAgICAgICAgICAgKi8KKyAgICB1bnNpZ25lZCBjaGFyIElPQWxpZ247ICAgICAgICAgICAgICAvKiBiYXNlIGFsaWdubXQsIGluY3IgaW4gMUIgYmxvY2tzICAgICovCisgICAgdW5zaWduZWQgY2hhciBJT051bTsgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGNvbnRpZ3VvdXMgSS9PIHBvcnRzICAgICAqLworICAgIH0gUzhfUGFjazsKKworICBzdHJ1Y3QgX1M5X1BhY2t7ICAgICAgICAgICAgICAgICAgICAgIC8qIEZJWEVEIEkvTyBQT1JUIFBBQ0tFVCAgICAgICAgICAgICAgKi8KKyAgICB1bnNpZ25lZCBjaGFyIFRhZzsgICAgICAgICAgICAgICAgICAvKiBzbWFsbCB0YWcgPSAweDRiICAgICAgICAgICAgICAgICAgICovCisgICAgdW5zaWduZWQgY2hhciBSYW5nZVsyXTsgICAgICAgICAgICAgLyogYmFzZSBhZGRyZXNzIDEwIGJpdHMgICAgICAgICAgICAgICAqLworICAgIHVuc2lnbmVkIGNoYXIgSU9OdW07ICAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBjb250aWd1b3VzIEkvTyBwb3J0cyAgICAgKi8KKyAgICB9IFM5X1BhY2s7CisKKyAgc3RydWN0IF9TMTRfUGFja3sgICAgICAgICAgICAgICAgICAgICAvKiBWRU5ET1IgREVGSU5FRCBQQUNLRVQgICAgICAgICAgICAgICovCisgICAgdW5zaWduZWQgY2hhciBUYWc7ICAgICAgICAgICAgICAgICAgLyogc21hbGwgdGFnID0gMHg3bSBtID0gMS03ICAgICAgICAgICAqLworICAgIHVuaW9uIF9TMTRfRGF0YXsKKyAgICAgIHVuc2lnbmVkIGNoYXIgRGF0YVs3XTsgICAgICAgICAgICAvKiBWZW5kb3IgZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICovCisgICAgICBzdHJ1Y3QgX1MxNF9QUENQYWNreyAgICAgICAgICAgICAgLyogUHIqcCBzMTQgcGFjayAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgdW5zaWduZWQgY2hhciBUeXBlOyAgICAgICAgICAgIC8qIDAwPW5vbi1JQk0gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgIHVuc2lnbmVkIGNoYXIgUFBDRGF0YVs2XTsgICAgICAvKiBWZW5kb3IgZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIH0gUzE0X1BQQ1BhY2s7CisgICAgICB9IFMxNF9EYXRhOworICAgIH0gUzE0X1BhY2s7CisKKyAgc3RydWN0IF9TMTVfUGFja3sgICAgICAgICAgICAgICAgICAgICAvKiBFTkQgUEFDS0VUICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgdW5zaWduZWQgY2hhciBUYWc7ICAgICAgICAgICAgICAgICAgLyogc21hbGwgdGFnID0gMHg3OCBvciAweDc5ICAgICAgICAgICAqLworICAgIHVuc2lnbmVkIGNoYXIgQ2hlY2s7ICAgICAgICAgICAgICAgIC8qIG9wdGlvbmFsIC0gY2hlY2tzdW0gICAgICAgICAgICAgICAgKi8KKyAgICB9IFMxNV9QYWNrOworCisgIHN0cnVjdCBfTDFfUGFja3sgICAgICAgICAgICAgICAgICAgICAgLyogTUVNT1JZIFJBTkdFIFBBQ0tFVCAgICAgICAgICAgICAgICAqLworICAgIHVuc2lnbmVkIGNoYXIgVGFnOyAgICAgICAgICAgICAgICAgIC8qIGxhcmdlIHRhZyA9IDB4ODEgICAgICAgICAgICAgICAgICAgKi8KKyAgICB1bnNpZ25lZCBjaGFyIENvdW50MDsgICAgICAgICAgICAgICAvKiB4MDkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgdW5zaWduZWQgY2hhciBDb3VudDE7ICAgICAgICAgICAgICAgLyogeDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIHVuc2lnbmVkIGNoYXIgRGF0YVs5XTsgICAgICAgICAgICAgIC8qIGEgdmFyaWFibGUgYXJyYXkgb2YgYnl0ZXMsICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb3VudCBpbiB0YWcgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgfSBMMV9QYWNrOworCisgIHN0cnVjdCBfTDJfUGFja3sgICAgICAgICAgICAgICAgICAgICAgLyogQU5TSSBJRCBTVFJJTkcgUEFDS0VUICAgICAgICAgICAgICAqLworICAgIHVuc2lnbmVkIGNoYXIgVGFnOyAgICAgICAgICAgICAgICAgIC8qIGxhcmdlIHRhZyA9IDB4ODIgICAgICAgICAgICAgICAgICAgKi8KKyAgICB1bnNpZ25lZCBjaGFyIENvdW50MDsgICAgICAgICAgICAgICAvKiBMZW5ndGggb2Ygc3RyaW5nICAgICAgICAgICAgICAgICAgICovCisgICAgdW5zaWduZWQgY2hhciBDb3VudDE7CisgICAgdW5zaWduZWQgY2hhciBJZGVudGlmaWVyWzFdOyAgICAgICAgLyogYSB2YXJpYWJsZSBhcnJheSBvZiBieXRlcywgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvdW50IGluIHRhZyAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICB9IEwyX1BhY2s7CisKKyAgc3RydWN0IF9MM19QYWNreyAgICAgICAgICAgICAgICAgICAgICAvKiBVTklDT0RFIElEIFNUUklORyBQQUNLRVQgICAgICAgICAgICovCisgICAgdW5zaWduZWQgY2hhciBUYWc7ICAgICAgICAgICAgICAgICAgLyogbGFyZ2UgdGFnID0gMHg4MyAgICAgICAgICAgICAgICAgICAqLworICAgIHVuc2lnbmVkIGNoYXIgQ291bnQwOyAgICAgICAgICAgICAgIC8qIExlbmd0aCArIDIgb2Ygc3RyaW5nICAgICAgICAgICAgICAgKi8KKyAgICB1bnNpZ25lZCBjaGFyIENvdW50MTsKKyAgICB1bnNpZ25lZCBjaGFyIENvdW50cnkwOyAgICAgICAgICAgICAvKiBUQkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgdW5zaWduZWQgY2hhciBDb3VudHJ5MTsgICAgICAgICAgICAgLyogVEJEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIHVuc2lnbmVkIGNoYXIgSWRlbnRpZmllclsxXTsgICAgICAgIC8qIGEgdmFyaWFibGUgYXJyYXkgb2YgYnl0ZXMsICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb3VudCBpbiB0YWcgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgfSBMM19QYWNrOworCisgIHN0cnVjdCBfTDRfUGFja3sgICAgICAgICAgICAgICAgICAgICAgLyogVkVORE9SIERFRklORUQgUEFDS0VUICAgICAgICAgICAgICAqLworICAgIHVuc2lnbmVkIGNoYXIgVGFnOyAgICAgICAgICAgICAgICAgIC8qIGxhcmdlIHRhZyA9IDB4ODQgICAgICAgICAgICAgICAgICAgKi8KKyAgICB1bnNpZ25lZCBjaGFyIENvdW50MDsKKyAgICB1bnNpZ25lZCBjaGFyIENvdW50MTsKKyAgICB1bmlvbiBfTDRfRGF0YXsKKyAgICAgIHVuc2lnbmVkIGNoYXIgRGF0YVsxXTsgICAgICAgICAgICAvKiBhIHZhcmlhYmxlIGFycmF5IG9mIGJ5dGVzLCAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY291bnQgaW4gdGFnICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgc3RydWN0IF9MNF9QUENQYWNreyAgICAgICAgICAgICAgIC8qIFByKnAgTDQgcGFja2V0ICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgIHVuc2lnbmVkIGNoYXIgVHlwZTsgICAgICAgICAgICAvKiAwMD1ub24tSUJNICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICB1bnNpZ25lZCBjaGFyIFBQQ0RhdGFbMV07ICAgICAgLyogYSB2YXJpYWJsZSBhcnJheSBvZiBieXRlcywgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvdW50IGluIHRhZyAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgfSBMNF9QUENQYWNrOworICAgICAgfSBMNF9EYXRhOworICAgIH0gTDRfUGFjazsKKworICBzdHJ1Y3QgX0w1X1BhY2t7CisgICAgdW5zaWduZWQgY2hhciBUYWc7ICAgICAgICAgICAgICAgICAgLyogbGFyZ2UgdGFnID0gMHg4NSAgICAgICAgICAgICAgICAgICAqLworICAgIHVuc2lnbmVkIGNoYXIgQ291bnQwOyAgICAgICAgICAgICAgIC8qIENvdW50ID0gMTcgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICB1bnNpZ25lZCBjaGFyIENvdW50MTsKKyAgICB1bnNpZ25lZCBjaGFyIERhdGFbMTddOworICAgIH0gTDVfUGFjazsKKworICBzdHJ1Y3QgX0w2X1BhY2t7CisgICAgdW5zaWduZWQgY2hhciBUYWc7ICAgICAgICAgICAgICAgICAgLyogbGFyZ2UgdGFnID0gMHg4NiAgICAgICAgICAgICAgICAgICAqLworICAgIHVuc2lnbmVkIGNoYXIgQ291bnQwOyAgICAgICAgICAgICAgIC8qIENvdW50ID0gOSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICB1bnNpZ25lZCBjaGFyIENvdW50MTsKKyAgICB1bnNpZ25lZCBjaGFyIERhdGFbOV07CisgICAgfSBMNl9QYWNrOworCisgIH0gUG5QX1RBR19QQUNLRVQ7CisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKyNlbmRpZiAgLyogbmRlZiBfUE5QXyAqLworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9wb2xsLmggYi9pbmNsdWRlL2FzbS1wcGMvcG9sbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlNTAyNDkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGMvcG9sbC5oCkBAIC0wLDAgKzEsMjMgQEAKKyNpZm5kZWYgX19QUENfUE9MTF9ICisjZGVmaW5lIF9fUFBDX1BPTExfSAorCisjZGVmaW5lIFBPTExJTgkJMHgwMDAxCisjZGVmaW5lIFBPTExQUkkJCTB4MDAwMgorI2RlZmluZSBQT0xMT1VUCQkweDAwMDQKKyNkZWZpbmUgUE9MTEVSUgkJMHgwMDA4CisjZGVmaW5lIFBPTExIVVAJCTB4MDAxMAorI2RlZmluZSBQT0xMTlZBTAkweDAwMjAKKyNkZWZpbmUgUE9MTFJETk9STQkweDAwNDAKKyNkZWZpbmUgUE9MTFJEQkFORAkweDAwODAKKyNkZWZpbmUgUE9MTFdSTk9STQkweDAxMDAKKyNkZWZpbmUgUE9MTFdSQkFORAkweDAyMDAKKyNkZWZpbmUgUE9MTE1TRwkJMHgwNDAwCisjZGVmaW5lIFBPTExSRU1PVkUJMHgxMDAwCisKK3N0cnVjdCBwb2xsZmQgeworCWludCBmZDsKKwlzaG9ydCBldmVudHM7CisJc2hvcnQgcmV2ZW50czsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL3Bvc2l4X3R5cGVzLmggYi9pbmNsdWRlL2FzbS1wcGMvcG9zaXhfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTRhODJhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjL3Bvc2l4X3R5cGVzLmgKQEAgLTAsMCArMSwxMTEgQEAKKyNpZm5kZWYgX1BQQ19QT1NJWF9UWVBFU19ICisjZGVmaW5lIF9QUENfUE9TSVhfVFlQRVNfSAorCisvKgorICogVGhpcyBmaWxlIGlzIGdlbmVyYWxseSB1c2VkIGJ5IHVzZXItbGV2ZWwgc29mdHdhcmUsIHNvIHlvdSBuZWVkIHRvCisgKiBiZSBhIGxpdHRsZSBjYXJlZnVsIGFib3V0IG5hbWVzcGFjZSBwb2xsdXRpb24gZXRjLiAgQWxzbywgd2UgY2Fubm90CisgKiBhc3N1bWUgR0NDIGlzIGJlaW5nIHVzZWQuCisgKi8KKwordHlwZWRlZiB1bnNpZ25lZCBsb25nCV9fa2VybmVsX2lub190OwordHlwZWRlZiB1bnNpZ25lZCBpbnQJX19rZXJuZWxfbW9kZV90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAlfX2tlcm5lbF9ubGlua190OwordHlwZWRlZiBsb25nCQlfX2tlcm5lbF9vZmZfdDsKK3R5cGVkZWYgaW50CQlfX2tlcm5lbF9waWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50CV9fa2VybmVsX3VpZF90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQJX19rZXJuZWxfZ2lkX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludAlfX2tlcm5lbF9zaXplX3Q7Cit0eXBlZGVmIGludAkJX19rZXJuZWxfc3NpemVfdDsKK3R5cGVkZWYgbG9uZwkJX19rZXJuZWxfcHRyZGlmZl90OwordHlwZWRlZiBsb25nCQlfX2tlcm5lbF90aW1lX3Q7Cit0eXBlZGVmIGxvbmcJCV9fa2VybmVsX3N1c2Vjb25kc190OwordHlwZWRlZiBsb25nCQlfX2tlcm5lbF9jbG9ja190OwordHlwZWRlZiBpbnQJCV9fa2VybmVsX3RpbWVyX3Q7Cit0eXBlZGVmIGludAkJX19rZXJuZWxfY2xvY2tpZF90OwordHlwZWRlZiBpbnQJCV9fa2VybmVsX2RhZGRyX3Q7Cit0eXBlZGVmIGNoYXIgKgkJX19rZXJuZWxfY2FkZHJfdDsKK3R5cGVkZWYgc2hvcnQgICAgICAgICAgICAgX19rZXJuZWxfaXBjX3BpZF90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAlfX2tlcm5lbF91aWQxNl90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAlfX2tlcm5lbF9naWQxNl90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQJX19rZXJuZWxfdWlkMzJfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50CV9fa2VybmVsX2dpZDMyX3Q7CisKK3R5cGVkZWYgdW5zaWduZWQgaW50CV9fa2VybmVsX29sZF91aWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50CV9fa2VybmVsX29sZF9naWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50CV9fa2VybmVsX29sZF9kZXZfdDsKKworI2lmZGVmIF9fR05VQ19fCit0eXBlZGVmIGxvbmcgbG9uZwlfX2tlcm5lbF9sb2ZmX3Q7CisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgeworCWludAl2YWxbMl07Cit9IF9fa2VybmVsX2ZzaWRfdDsKKworI2lmbmRlZiBfX0dOVUNfXworCisjZGVmaW5lCV9fRkRfU0VUKGQsIHNldCkJKChzZXQpLT5mZHNfYml0c1tfX0ZERUxUKGQpXSB8PSBfX0ZETUFTSyhkKSkKKyNkZWZpbmUJX19GRF9DTFIoZCwgc2V0KQkoKHNldCktPmZkc19iaXRzW19fRkRFTFQoZCldICY9IH5fX0ZETUFTSyhkKSkKKyNkZWZpbmUJX19GRF9JU1NFVChkLCBzZXQpCSgoc2V0KS0+ZmRzX2JpdHNbX19GREVMVChkKV0gJiBfX0ZETUFTSyhkKSkKKyNkZWZpbmUJX19GRF9aRVJPKHNldCkJXAorICAoKHZvaWQpIG1lbXNldCAoKF9fcHRyX3QpIChzZXQpLCAwLCBzaXplb2YgKF9fa2VybmVsX2ZkX3NldCkpKQorCisjZWxzZSAvKiBfX0dOVUNfXyAqLworCisjaWYgZGVmaW5lZChfX0tFUk5FTF9fKSB8fCAhZGVmaW5lZChfX0dMSUJDX18pIHx8IChfX0dMSUJDX18gPCAyKSBcCisgICAgfHwgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA9PSAwKQorLyogV2l0aCBHTlUgQywgdXNlIGlubGluZSBmdW5jdGlvbnMgaW5zdGVhZCBzbyBhcmdzIGFyZSBldmFsdWF0ZWQgb25seSBvbmNlOiAqLworCisjdW5kZWYgX19GRF9TRVQKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19GRF9TRVQodW5zaWduZWQgbG9uZyBmZCwgX19rZXJuZWxfZmRfc2V0ICpmZHNldHApCit7CisJdW5zaWduZWQgbG9uZyBfdG1wID0gZmQgLyBfX05GREJJVFM7CisJdW5zaWduZWQgbG9uZyBfcmVtID0gZmQgJSBfX05GREJJVFM7CisJZmRzZXRwLT5mZHNfYml0c1tfdG1wXSB8PSAoMVVMPDxfcmVtKTsKK30KKworI3VuZGVmIF9fRkRfQ0xSCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fRkRfQ0xSKHVuc2lnbmVkIGxvbmcgZmQsIF9fa2VybmVsX2ZkX3NldCAqZmRzZXRwKQoreworCXVuc2lnbmVkIGxvbmcgX3RtcCA9IGZkIC8gX19ORkRCSVRTOworCXVuc2lnbmVkIGxvbmcgX3JlbSA9IGZkICUgX19ORkRCSVRTOworCWZkc2V0cC0+ZmRzX2JpdHNbX3RtcF0gJj0gfigxVUw8PF9yZW0pOworfQorCisjdW5kZWYgX19GRF9JU1NFVAorc3RhdGljIF9faW5saW5lX18gaW50IF9fRkRfSVNTRVQodW5zaWduZWQgbG9uZyBmZCwgX19rZXJuZWxfZmRfc2V0ICpwKQoreworCXVuc2lnbmVkIGxvbmcgX3RtcCA9IGZkIC8gX19ORkRCSVRTOworCXVuc2lnbmVkIGxvbmcgX3JlbSA9IGZkICUgX19ORkRCSVRTOworCXJldHVybiAocC0+ZmRzX2JpdHNbX3RtcF0gJiAoMVVMPDxfcmVtKSkgIT0gMDsKK30KKworLyoKKyAqIFRoaXMgd2lsbCB1bnJvbGwgdGhlIGxvb3AgZm9yIHRoZSBub3JtYWwgY29uc3RhbnQgY2FzZSAoOCBpbnRzLAorICogZm9yIGEgMjU2LWJpdCBmZF9zZXQpCisgKi8KKyN1bmRlZiBfX0ZEX1pFUk8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19GRF9aRVJPKF9fa2VybmVsX2ZkX3NldCAqcCkKK3sKKwl1bnNpZ25lZCBpbnQgKnRtcCA9ICh1bnNpZ25lZCBpbnQgKilwLT5mZHNfYml0czsKKwlpbnQgaTsKKworCWlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChfX0ZEU0VUX0xPTkdTKSkgeworCQlzd2l0Y2ggKF9fRkRTRVRfTE9OR1MpIHsKKwkJCWNhc2UgODoKKwkJCQl0bXBbMF0gPSAwOyB0bXBbMV0gPSAwOyB0bXBbMl0gPSAwOyB0bXBbM10gPSAwOworCQkJCXRtcFs0XSA9IDA7IHRtcFs1XSA9IDA7IHRtcFs2XSA9IDA7IHRtcFs3XSA9IDA7CisJCQkJcmV0dXJuOworCQl9CisJfQorCWkgPSBfX0ZEU0VUX0xPTkdTOworCXdoaWxlIChpKSB7CisJCWktLTsKKwkJKnRtcCA9IDA7CisJCXRtcCsrOworCX0KK30KKworI2VuZGlmIC8qIGRlZmluZWQoX19LRVJORUxfXykgfHwgIWRlZmluZWQoX19HTElCQ19fKSB8fCAoX19HTElCQ19fIDwgMikgKi8KKyNlbmRpZiAvKiBfX0dOVUNfXyAqLworI2VuZGlmIC8qIF9QUENfUE9TSVhfVFlQRVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL3BwYzR4eF9kbWEuaCBiL2luY2x1ZGUvYXNtLXBwYy9wcGM0eHhfZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODYzNmNkYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9wcGM0eHhfZG1hLmgKQEAgLTAsMCArMSw1ODMgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1wcGMvcHBjNHh4X2RtYS5oCisgKgorICogSUJNIFBQQzR4eCBETUEgZW5naW5lIGxpYnJhcnkKKyAqCisgKiBDb3B5cmlnaHQgMjAwMC0yMDA0IE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgorICoKKyAqIENsZWFuZWQgdXAgYSBiaXQgbW9yZSwgTWF0dCBQb3J0ZXIgPG1wb3J0ZXJAa2VybmVsLmNyYXNoaW5nLm9yZz4KKyAqCisgKiBPcmlnaW5hbCBjb2RlIGJ5IEFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPgorICogYW5kIFBldGUgUG9wb3YgPHBwb3BvdkBtdmlzdGEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSAgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaWZuZGVmIF9fQVNNUFBDX1BQQzR4eF9ETUFfSAorI2RlZmluZSBfX0FTTVBQQ19QUEM0eHhfRE1BX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21tdS5oPgorI2luY2x1ZGUgPGFzbS9pYm00eHguaD4KKworI3VuZGVmIERFQlVHXzR4eERNQQorCisjZGVmaW5lIE1BWF9QUEM0eHhfRE1BX0NIQU5ORUxTCQk0CisKKy8qIGluIGFyY2gvcHBjL2tlcm5lbC9zZXR1cC5jIC0tIENvcnQgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIERNQV9NT0RFX1dSSVRFLCBETUFfTU9ERV9SRUFEOworCisvKgorICogRnVuY3Rpb24gcmV0dXJuIHN0YXR1cyBjb2RlcworICogVGhlc2UgdmFsdWVzIGFyZSB1c2VkIHRvIGluZGljYXRlIHdoZXRoZXIgb3Igbm90IHRoZSBmdW5jdGlvbgorICogY2FsbCB3YXMgc3VjY2Vzc2Z1bCwgb3IgYSBiYWQvaW52YWxpZCBwYXJhbWV0ZXIgd2FzIHBhc3NlZC4KKyAqLworI2RlZmluZSBETUFfU1RBVFVTX0dPT0QJCQkwCisjZGVmaW5lIERNQV9TVEFUVVNfQkFEX0NIQU5ORUwJCTEKKyNkZWZpbmUgRE1BX1NUQVRVU19CQURfSEFORExFCQkyCisjZGVmaW5lIERNQV9TVEFUVVNfQkFEX01PREUJCTMKKyNkZWZpbmUgRE1BX1NUQVRVU19OVUxMX1BPSU5URVIJCTQKKyNkZWZpbmUgRE1BX1NUQVRVU19PVVRfT0ZfTUVNT1JZCTUKKyNkZWZpbmUgRE1BX1NUQVRVU19TR0xfTElTVF9FTVBUWQk2CisjZGVmaW5lIERNQV9TVEFUVVNfR0VORVJBTF9FUlJPUgk3CisjZGVmaW5lIERNQV9TVEFUVVNfQ0hBTk5FTF9OT1RGUkVFCTgKKworI2RlZmluZSBETUFfQ0hBTk5FTF9CVVNZCQkweDgwMDAwMDAwCisKKy8qCisgKiBUaGVzZSBpbmRpY2F0ZSBzdGF0dXMgYXMgcmV0dXJuZWQgZnJvbSB0aGUgRE1BIFN0YXR1cyBSZWdpc3Rlci4KKyAqLworI2RlZmluZSBETUFfU1RBVFVTX05PX0VSUk9SCTAKKyNkZWZpbmUgRE1BX1NUQVRVU19DUwkJMQkvKiBDb3VudCBTdGF0dXMgICAgICAgICovCisjZGVmaW5lIERNQV9TVEFUVVNfVFMJCTIJLyogVHJhbnNmZXIgU3RhdHVzICAgICAqLworI2RlZmluZSBETUFfU1RBVFVTX0RNQV9FUlJPUgkzCS8qIERNQSBFcnJvciBPY2N1cnJlZCAgKi8KKyNkZWZpbmUgRE1BX1NUQVRVU19ETUFfQlVTWQk0CS8qIFRoZSBjaGFubmVsIGlzIGJ1c3kgKi8KKworCisvKgorICogRE1BIENoYW5uZWwgQ29udHJvbCBSZWdpc3RlcnMKKyAqLworCisjaWZkZWYgQ09ORklHXzQ0eAorI2RlZmluZQlQUEM0eHhfRE1BXzY0QklUCisjZGVmaW5lIERNQV9DUl9PRkZTRVQgMQorI2Vsc2UKKyNkZWZpbmUgRE1BX0NSX09GRlNFVCAwCisjZW5kaWYKKworI2RlZmluZSBETUFfQ0VfRU5BQkxFICAgICAgICAoMTw8MzEpCS8qIERNQSBDaGFubmVsIEVuYWJsZSAqLworI2RlZmluZSBTRVRfRE1BX0NFX0VOQUJMRSh4KSAoKCh4KSYweDEpPDwzMSkKKyNkZWZpbmUgR0VUX0RNQV9DRV9FTkFCTEUoeCkgKCgoeCkmRE1BX0NFX0VOQUJMRSk+PjMxKQorCisjZGVmaW5lIERNQV9DSUVfRU5BQkxFICAgICAgICAoMTw8MzApCS8qIERNQSBDaGFubmVsIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgU0VUX0RNQV9DSUVfRU5BQkxFKHgpICgoKHgpJjB4MSk8PDMwKQorI2RlZmluZSBHRVRfRE1BX0NJRV9FTkFCTEUoeCkgKCgoeCkmRE1BX0NJRV9FTkFCTEUpPj4zMCkKKworI2RlZmluZSBETUFfVEQgICAgICAgICAgICAgICAgKDE8PDI5KQorI2RlZmluZSBTRVRfRE1BX1REKHgpICAgICAgICAgKCgoeCkmMHgxKTw8MjkpCisjZGVmaW5lIEdFVF9ETUFfVEQoeCkgICAgICAgICAoKCh4KSZETUFfVEQpPj4yOSkKKworI2RlZmluZSBETUFfUEwgICAgICAgICAgICAgICAgKDE8PDI4KQkvKiBQZXJpcGhlcmFsIExvY2F0aW9uICovCisjZGVmaW5lIFNFVF9ETUFfUEwoeCkgICAgICAgICAoKCh4KSYweDEpPDwyOCkKKyNkZWZpbmUgR0VUX0RNQV9QTCh4KSAgICAgICAgICgoKHgpJkRNQV9QTCk+PjI4KQorCisjZGVmaW5lIEVYVEVSTkFMX1BFUklQSEVSQUwgICAgMAorI2RlZmluZSBJTlRFUk5BTF9QRVJJUEhFUkFMICAgIDEKKworI2RlZmluZSBTRVRfRE1BX1BXKHgpICAgICAoKCh4KSYweDMpPDwoMjYtRE1BX0NSX09GRlNFVCkpCS8qIFBlcmlwaGVyYWwgV2lkdGggKi8KKyNkZWZpbmUgRE1BX1BXX01BU0sgICAgICAgU0VUX0RNQV9QVygzKQorI2RlZmluZSAgIFBXXzggICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgICBQV18xNiAgICAgICAgICAgICAgICAxCisjZGVmaW5lICAgUFdfMzIgICAgICAgICAgICAgICAgMgorI2RlZmluZSAgIFBXXzY0ICAgICAgICAgICAgICAgIDMKKy8qIEZJWE1FOiBBZGQgUFdfMTI4IHN1cHBvcnQgZm9yIDQ0MEdQIERNQSBibG9jayAqLworI2RlZmluZSBHRVRfRE1BX1BXKHgpICAgICAoKCh4KSZETUFfUFdfTUFTSyk+PigyNi1ETUFfQ1JfT0ZGU0VUKSkKKworI2RlZmluZSBETUFfREFJICAgICAgICAgICAoMTw8KDI1LURNQV9DUl9PRkZTRVQpKQkvKiBEZXN0aW5hdGlvbiBBZGRyZXNzIEluY3JlbWVudCAqLworI2RlZmluZSBTRVRfRE1BX0RBSSh4KSAgICAoKCh4KSYweDEpPDwoMjUtRE1BX0NSX09GRlNFVCkpCisKKyNkZWZpbmUgRE1BX1NBSSAgICAgICAgICAgKDE8PCgyNC1ETUFfQ1JfT0ZGU0VUKSkJLyogU291cmNlIEFkZHJlc3MgSW5jcmVtZW50ICovCisjZGVmaW5lIFNFVF9ETUFfU0FJKHgpICAgICgoKHgpJjB4MSk8PCgyNC1ETUFfQ1JfT0ZGU0VUKSkKKworI2RlZmluZSBETUFfQkVOICAgICAgICAgICAoMTw8KDIzLURNQV9DUl9PRkZTRVQpKQkvKiBCdWZmZXIgRW5hYmxlICovCisjZGVmaW5lIFNFVF9ETUFfQkVOKHgpICAgICgoKHgpJjB4MSk8PCgyMy1ETUFfQ1JfT0ZGU0VUKSkKKworI2RlZmluZSBTRVRfRE1BX1RNKHgpICAgICAoKCh4KSYweDMpPDwoMjEtRE1BX0NSX09GRlNFVCkpCS8qIFRyYW5zZmVyIE1vZGUgKi8KKyNkZWZpbmUgRE1BX1RNX01BU0sgICAgICAgU0VUX0RNQV9UTSgzKQorI2RlZmluZSAgIFRNX1BFUklQSEVSQUwgICAgICAgIDAJLyogUGVyaXBoZXJhbCAqLworI2RlZmluZSAgIFRNX1JFU0VSVkVEICAgICAgICAgIDEJLyogUmVzZXJ2ZWQgKi8KKyNkZWZpbmUgICBUTV9TX01NICAgICAgICAgICAgICAyCS8qIE1lbW9yeSB0byBNZW1vcnkgKi8KKyNkZWZpbmUgICBUTV9EX01NICAgICAgICAgICAgICAzCS8qIERldmljZSBQYWNlZCBNZW1vcnkgdG8gTWVtb3J5ICovCisjZGVmaW5lIEdFVF9ETUFfVE0oeCkgICAgICgoKHgpJkRNQV9UTV9NQVNLKT4+KDIxLURNQV9DUl9PRkZTRVQpKQorCisjZGVmaW5lIFNFVF9ETUFfUFNDKHgpICAgICgoKHgpJjB4Myk8PCgxOS1ETUFfQ1JfT0ZGU0VUKSkJLyogUGVyaXBoZXJhbCBTZXR1cCBDeWNsZXMgKi8KKyNkZWZpbmUgRE1BX1BTQ19NQVNLICAgICAgU0VUX0RNQV9QU0MoMykKKyNkZWZpbmUgR0VUX0RNQV9QU0MoeCkgICAgKCgoeCkmRE1BX1BTQ19NQVNLKT4+KDE5LURNQV9DUl9PRkZTRVQpKQorCisjZGVmaW5lIFNFVF9ETUFfUFdDKHgpICAgICgoKHgpJjB4M0YpPDwoMTMtRE1BX0NSX09GRlNFVCkpCS8qIFBlcmlwaGVyYWwgV2FpdCBDeWNsZXMgKi8KKyNkZWZpbmUgRE1BX1BXQ19NQVNLICAgICAgU0VUX0RNQV9QV0MoMHgzRikKKyNkZWZpbmUgR0VUX0RNQV9QV0MoeCkgICAgKCgoeCkmRE1BX1BXQ19NQVNLKT4+KDEzLURNQV9DUl9PRkZTRVQpKQorCisjZGVmaW5lIFNFVF9ETUFfUEhDKHgpICAgICgoKHgpJjB4Nyk8PCgxMC1ETUFfQ1JfT0ZGU0VUKSkJLyogUGVyaXBoZXJhbCBIb2xkIEN5Y2xlcyAqLworI2RlZmluZSBETUFfUEhDX01BU0sgICAgICBTRVRfRE1BX1BIQygweDcpCisjZGVmaW5lIEdFVF9ETUFfUEhDKHgpICAgICgoKHgpJkRNQV9QSENfTUFTSyk+PigxMC1ETUFfQ1JfT0ZGU0VUKSkKKworI2RlZmluZSBETUFfRVREX09VVFBVVCAgICAgKDE8PCg5LURNQV9DUl9PRkZTRVQpKQkvKiBFT1QgcGluIGlzIGEgVEMgb3V0cHV0ICovCisjZGVmaW5lIFNFVF9ETUFfRVREKHgpICAgICAoKCh4KSYweDEpPDwoOS1ETUFfQ1JfT0ZGU0VUKSkKKworI2RlZmluZSBETUFfVENFX0VOQUJMRSAgICAgKDE8PCg4LURNQV9DUl9PRkZTRVQpKQorI2RlZmluZSBTRVRfRE1BX1RDRSh4KSAgICAgKCgoeCkmMHgxKTw8KDgtRE1BX0NSX09GRlNFVCkpCisKKyNkZWZpbmUgRE1BX0RFQyAgICAgICAgICAgICgxPDwoMikpCS8qIEFkZHJlc3MgRGVjcmVtZW50ICovCisjZGVmaW5lIFNFVF9ETUFfREVDKHgpICAgICAoKCh4KSYweDEpPDwyKQorI2RlZmluZSBHRVRfRE1BX0RFQyh4KSAgICAgKCgoeCkmRE1BX0RFQyk+PjIpCisKKworLyoKKyAqIFRyYW5zZmVyIE1vZGVzCisgKiBUaGVzZSBtb2RlcyBhcmUgZGVmaW5lZCBpbiBhIHdheSB0aGF0IG1ha2VzIGl0IHBvc3NpYmxlIHRvCisgKiBzaW1wbHkgIm9yIiBpbiB0aGUgdmFsdWUgaW4gdGhlIGNvbnRyb2wgcmVnaXN0ZXIuCisgKi8KKworI2RlZmluZSBETUFfTU9ERV9NTQkJKFNFVF9ETUFfVE0oVE1fU19NTSkpCS8qIG1lbW9yeSB0byBtZW1vcnkgKi8KKworCQkJCS8qIERldmljZS1wYWNlZCBtZW1vcnkgdG8gbWVtb3J5LCAqLworCQkJCS8qIGRldmljZSBpcyBhdCBzb3VyY2UgYWRkcmVzcyAgICAqLworI2RlZmluZSBETUFfTU9ERV9NTV9ERVZBVFNSQwkoRE1BX1REIHwgU0VUX0RNQV9UTShUTV9EX01NKSkKKworCQkJCS8qIERldmljZS1wYWNlZCBtZW1vcnkgdG8gbWVtb3J5LCAgICAgICovCisJCQkJLyogZGV2aWNlIGlzIGF0IGRlc3RpbmF0aW9uIGFkZHJlc3MgICAgKi8KKyNkZWZpbmUgRE1BX01PREVfTU1fREVWQVREU1QJKFNFVF9ETUFfVE0oVE1fRF9NTSkpCisKKy8qIDQwNWdwLzQ0MGdwICovCisjZGVmaW5lIFNFVF9ETUFfUFJFRkVUQ0goeCkgICAoKCh4KSYweDMpPDwoNC1ETUFfQ1JfT0ZGU0VUKSkJLyogTWVtb3J5IFJlYWQgUHJlZmV0Y2ggKi8KKyNkZWZpbmUgRE1BX1BSRUZFVENIX01BU0sgICAgICBTRVRfRE1BX1BSRUZFVENIKDMpCisjZGVmaW5lICAgUFJFRkVUQ0hfMSAgICAgICAgICAgMAkvKiBQcmVmZXRjaCAxIERvdWJsZSBXb3JkICovCisjZGVmaW5lICAgUFJFRkVUQ0hfMiAgICAgICAgICAgMQorI2RlZmluZSAgIFBSRUZFVENIXzQgICAgICAgICAgIDIKKyNkZWZpbmUgR0VUX0RNQV9QUkVGRVRDSCh4KSAoKCh4KSZETUFfUFJFRkVUQ0hfTUFTSyk+Pig0LURNQV9DUl9PRkZTRVQpKQorCisjZGVmaW5lIERNQV9QQ0UgICAgICAgICAgICAoMTw8KDMtRE1BX0NSX09GRlNFVCkpCS8qIFBhcml0eSBDaGVjayBFbmFibGUgKi8KKyNkZWZpbmUgU0VUX0RNQV9QQ0UoeCkgICAgICgoKHgpJjB4MSk8PCgzLURNQV9DUl9PRkZTRVQpKQorI2RlZmluZSBHRVRfRE1BX1BDRSh4KSAgICAgKCgoeCkmRE1BX1BDRSk+PigzLURNQV9DUl9PRkZTRVQpKQorCisvKiBzdGIzeCAqLworCisjZGVmaW5lIERNQV9FQ0VfRU5BQkxFICgxPDw1KQorI2RlZmluZSBTRVRfRE1BX0VDRSh4KSAoKCh4KSYweDEpPDw1KQorI2RlZmluZSBHRVRfRE1BX0VDRSh4KSAoKCh4KSZETUFfRUNFX0VOQUJMRSk+PjUpCisKKyNkZWZpbmUgRE1BX1RDRF9ESVNBQkxFCSgxPDw0KQorI2RlZmluZSBTRVRfRE1BX1RDRCh4KSAoKCh4KSYweDEpPDw0KQorI2RlZmluZSBHRVRfRE1BX1RDRCh4KSAoKCh4KSZETUFfVENEX0RJU0FCTEUpPj40KQorCit0eXBlZGVmIHVpbnQzMl90IHNnbF9oYW5kbGVfdDsKKworI2lmZGVmIENPTkZJR19QUEM0eHhfRURNQQorCisjZGVmaW5lIFNHTF9MSVNUX1NJWkUgNDA5NgorI2RlZmluZSBETUFfUFBDNHh4X1NJWkUgU0dMX0xJU1RfU0laRQorCisjZGVmaW5lIFNFVF9ETUFfUFJJT1JJVFkoeCkgICAoKCh4KSYweDMpPDwoNi1ETUFfQ1JfT0ZGU0VUKSkJLyogRE1BIENoYW5uZWwgUHJpb3JpdHkgKi8KKyNkZWZpbmUgRE1BX1BSSU9SSVRZX01BU0sgU0VUX0RNQV9QUklPUklUWSgzKQorI2RlZmluZSBQUklPUklUWV9MT1cgICAgICAgICAgIDAKKyNkZWZpbmUgUFJJT1JJVFlfTUlEX0xPVyAgICAgICAxCisjZGVmaW5lIFBSSU9SSVRZX01JRF9ISUdIICAgICAgMgorI2RlZmluZSBQUklPUklUWV9ISUdIICAgICAgICAgIDMKKyNkZWZpbmUgR0VUX0RNQV9QUklPUklUWSh4KSAoKCh4KSZETUFfUFJJT1JJVFlfTUFTSyk+Pig2LURNQV9DUl9PRkZTRVQpKQorCisvKgorICogRE1BIFBvbGFyaXR5IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIKKyAqLworI2RlZmluZSBETUFSZXFfQWN0aXZlTG93KGNoYW4pICgxPDwoMzEtKGNoYW4qMykpKQorI2RlZmluZSBETUFBY2tfQWN0aXZlTG93KGNoYW4pICgxPDwoMzAtKGNoYW4qMykpKQorI2RlZmluZSBFT1RfQWN0aXZlTG93KGNoYW4pICAgICgxPDwoMjktKGNoYW4qMykpKQkvKiBFbmQgb2YgVHJhbnNmZXIgKi8KKworLyoKKyAqIERNQSBTbGVlcCBNb2RlIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgU0xFRVBfTU9ERV9FTkFCTEUgKDE8PDIxKQorCisvKgorICogRE1BIFN0YXR1cyBSZWdpc3RlcgorICovCisjZGVmaW5lIERNQV9DUzAgICAgICAgICAgICgxPDwzMSkJLyogVGVybWluYWwgQ291bnQgaGFzIGJlZW4gcmVhY2hlZCAqLworI2RlZmluZSBETUFfQ1MxICAgICAgICAgICAoMTw8MzApCisjZGVmaW5lIERNQV9DUzIgICAgICAgICAgICgxPDwyOSkKKyNkZWZpbmUgRE1BX0NTMyAgICAgICAgICAgKDE8PDI4KQorCisjZGVmaW5lIERNQV9UUzAgICAgICAgICAgICgxPDwyNykJLyogRW5kIG9mIFRyYW5zZmVyIGhhcyBiZWVuIHJlcXVlc3RlZCAqLworI2RlZmluZSBETUFfVFMxICAgICAgICAgICAoMTw8MjYpCisjZGVmaW5lIERNQV9UUzIgICAgICAgICAgICgxPDwyNSkKKyNkZWZpbmUgRE1BX1RTMyAgICAgICAgICAgKDE8PDI0KQorCisjZGVmaW5lIERNQV9DSDBfRVJSICAgICAgICgxPDwyMykJLyogRE1BIENoYW5lbCAwIEVycm9yICovCisjZGVmaW5lIERNQV9DSDFfRVJSICAgICAgICgxPDwyMikKKyNkZWZpbmUgRE1BX0NIMl9FUlIgICAgICAgKDE8PDIxKQorI2RlZmluZSBETUFfQ0gzX0VSUiAgICAgICAoMTw8MjApCisKKyNkZWZpbmUgRE1BX0lOX0RNQV9SRVEwICAgKDE8PDE5KQkvKiBJbnRlcm5hbCBETUEgUmVxdWVzdCBpcyBwZW5kaW5nICovCisjZGVmaW5lIERNQV9JTl9ETUFfUkVRMSAgICgxPDwxOCkKKyNkZWZpbmUgRE1BX0lOX0RNQV9SRVEyICAgKDE8PDE3KQorI2RlZmluZSBETUFfSU5fRE1BX1JFUTMgICAoMTw8MTYpCisKKyNkZWZpbmUgRE1BX0VYVF9ETUFfUkVRMCAgKDE8PDE1KQkvKiBFeHRlcm5hbCBETUEgUmVxdWVzdCBpcyBwZW5kaW5nICovCisjZGVmaW5lIERNQV9FWFRfRE1BX1JFUTEgICgxPDwxNCkKKyNkZWZpbmUgRE1BX0VYVF9ETUFfUkVRMiAgKDE8PDEzKQorI2RlZmluZSBETUFfRVhUX0RNQV9SRVEzICAoMTw8MTIpCisKKyNkZWZpbmUgRE1BX0NIMF9CVVNZICAgICAgKDE8PDExKQkvKiBETUEgQ2hhbm5lbCAwIEJ1c3kgKi8KKyNkZWZpbmUgRE1BX0NIMV9CVVNZICAgICAgKDE8PDEwKQorI2RlZmluZSBETUFfQ0gyX0JVU1kgICAgICAgKDE8PDkpCisjZGVmaW5lIERNQV9DSDNfQlVTWSAgICAgICAoMTw8OCkKKworI2RlZmluZSBETUFfU0cwICAgICAgICAgICAgKDE8PDcpCS8qIERNQSBDaGFubmVsIDAgU2NhdHRlci9HYXRoZXIgaW4gcHJvZ3Jlc3MgKi8KKyNkZWZpbmUgRE1BX1NHMSAgICAgICAgICAgICgxPDw2KQorI2RlZmluZSBETUFfU0cyICAgICAgICAgICAgKDE8PDUpCisjZGVmaW5lIERNQV9TRzMgICAgICAgICAgICAoMTw8NCkKKworLyogRE1BIENoYW5uZWwgQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRE1BX0NUQ19CVEVOICAgICAoMTw8MjMpICAgIC8qIEJ1cnN0IEVuYWJsZS9EaXNhYmxlIGJpdCAqLworI2RlZmluZSBETUFfQ1RDX0JTSVpfTVNLICgzPDwyMSkgICAgLyogTWFzayBvZiB0aGUgQnVyc3Qgc2l6ZSBiaXRzICovCisjZGVmaW5lIERNQV9DVENfQlNJWl8yICAgKDApCisjZGVmaW5lIERNQV9DVENfQlNJWl80ICAgKDE8PDIxKQorI2RlZmluZSBETUFfQ1RDX0JTSVpfOCAgICgyPDwyMSkKKyNkZWZpbmUgRE1BX0NUQ19CU0laXzE2ICAoMzw8MjEpCisKKy8qCisgKiBETUEgU0cgQ29tbWFuZCBSZWdpc3RlcgorICovCisjZGVmaW5lIFNTR19FTkFCTEUoY2hhbikgICAJKDE8PCgzMS1jaGFuKSkJLyogU3RhcnQgU2NhdHRlciBHYXRoZXIgKi8KKyNkZWZpbmUgU1NHX01BU0tfRU5BQkxFKGNoYW4pCSgxPDwoMTUtY2hhbikpCS8qIEVuYWJsZSB3cml0aW5nIHRvIFNTRzAgYml0ICovCisKKy8qCisgKiBETUEgU2NhdHRlci9HYXRoZXIgRGVzY3JpcHRvciBCaXQgZmllbGRzCisgKi8KKyNkZWZpbmUgU0dfTElOSyAgICAgICAgICAgICgxPDwzMSkJLyogTGluayAqLworI2RlZmluZSBTR19UQ0lfRU5BQkxFICAgICAgKDE8PDI5KQkvKiBFbmFibGUgVGVybWluYWwgQ291bnQgSW50ZXJydXB0ICovCisjZGVmaW5lIFNHX0VUSV9FTkFCTEUgICAgICAoMTw8MjgpCS8qIEVuYWJsZSBFbmQgb2YgVHJhbnNmZXIgSW50ZXJydXB0ICovCisjZGVmaW5lIFNHX0VSSV9FTkFCTEUgICAgICAoMTw8MjcpCS8qIEVuYWJsZSBFcnJvciBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgU0dfQ09VTlRfTUFTSyAgICAgICAweEZGRkYJLyogQ291bnQgRmllbGQgKi8KKworI2RlZmluZSBTRVRfRE1BX0NPTlRST0wgXAorIAkJKFNFVF9ETUFfQ0lFX0VOQUJMRShwX2luaXQtPmludF9lbmFibGUpIHwgLyogaW50ZXJydXB0IGVuYWJsZSAgICAgICAgICovIFwKKyAJCVNFVF9ETUFfQkVOKHBfaW5pdC0+YnVmZmVyX2VuYWJsZSkgICAgIHwgLyogYnVmZmVyIGVuYWJsZSAgICAgICAgICAgICovXAorCQlTRVRfRE1BX0VURChwX2luaXQtPmV0ZF9vdXRwdXQpICAgICAgICB8IC8qIGVuZCBvZiB0cmFuc2ZlciBwaW4gICAgICAqLyBcCisJICAgICAgIAlTRVRfRE1BX1RDRShwX2luaXQtPnRjZV9lbmFibGUpICAgICAgICB8IC8qIHRlcm1pbmFsIGNvdW50IGVuYWJsZSAgICAqLyBcCisgICAgICAgICAgICAgICAgU0VUX0RNQV9QTChwX2luaXQtPnBsKSAgICAgICAgICAgICAgICAgfCAvKiBwZXJpcGhlcmFsIGxvY2F0aW9uICAgICAgKi8gXAorICAgICAgICAgICAgICAgIFNFVF9ETUFfREFJKHBfaW5pdC0+ZGFpKSAgICAgICAgICAgICAgIHwgLyogZGVzdCBhZGRyIGluY3JlbWVudCAgICAgICovIFwKKyAgICAgICAgICAgICAgICBTRVRfRE1BX1NBSShwX2luaXQtPnNhaSkgICAgICAgICAgICAgICB8IC8qIHNyYyBhZGRyIGluY3JlbWVudCAgICAgICAqLyBcCisgICAgICAgICAgICAgICAgU0VUX0RNQV9QUklPUklUWShwX2luaXQtPmNwKSAgICAgICAgICAgfCAgLyogY2hhbm5lbCBwcmlvcml0eSAgICAgICAgKi8gXAorICAgICAgICAgICAgICAgIFNFVF9ETUFfUFcocF9pbml0LT5wd2lkdGgpICAgICAgICAgICAgIHwgIC8qIHBlcmlwaGVyYWwvYnVzIHdpZHRoICAgICovIFwKKyAgICAgICAgICAgICAgICBTRVRfRE1BX1BTQyhwX2luaXQtPnBzYykgICAgICAgICAgICAgICB8ICAvKiBwZXJpcGhlcmFsIHNldHVwIGN5Y2xlcyAqLyBcCisgICAgICAgICAgICAgICAgU0VUX0RNQV9QV0MocF9pbml0LT5wd2MpICAgICAgICAgICAgICAgfCAgLyogcGVyaXBoZXJhbCB3YWl0IGN5Y2xlcyAgKi8gXAorICAgICAgICAgICAgICAgIFNFVF9ETUFfUEhDKHBfaW5pdC0+cGhjKSAgICAgICAgICAgICAgIHwgIC8qIHBlcmlwaGVyYWwgaG9sZCBjeWNsZXMgICovIFwKKyAgICAgICAgICAgICAgICBTRVRfRE1BX1BSRUZFVENIKHBfaW5pdC0+cGYpICAgICAgICAgICAgICAvKiByZWFkIHByZWZldGNoICAgICAgICAgICAqLykKKworI2RlZmluZSBHRVRfRE1BX1BPTEFSSVRZKGNoYW4pIChETUFSZXFfQWN0aXZlTG93KGNoYW4pIHwgRE1BQWNrX0FjdGl2ZUxvdyhjaGFuKSB8IEVPVF9BY3RpdmVMb3coY2hhbikpCisKKyNlbGlmIGRlZmluZWQoQ09ORklHX1NUQlhYWF9ETUEpCQkvKiBzdGIwM3h4eCAqLworCisjZGVmaW5lIERNQV9QUEM0eHhfU0laRQk0MDk2CisKKy8qCisgKiBETUEgU3RhdHVzIFJlZ2lzdGVyCisgKi8KKworI2RlZmluZSBTRVRfRE1BX1BSSU9SSVRZKHgpICAgKCgoeCkmMHgwMDgwMDAwMSkpCS8qIERNQSBDaGFubmVsIFByaW9yaXR5ICovCisjZGVmaW5lIERNQV9QUklPUklUWV9NQVNLCTB4MDA4MDAwMDEKKyNkZWZpbmUgICBQUklPUklUWV9MT1cgICAgICAgICAJMHgwMDAwMDAwMAorI2RlZmluZSAgIFBSSU9SSVRZX01JRF9MT1cgICAgIAkweDAwMDAwMDAxCisjZGVmaW5lICAgUFJJT1JJVFlfTUlEX0hJR0ggICAgCTB4MDA4MDAwMDAKKyNkZWZpbmUgICBQUklPUklUWV9ISUdIICAgICAgICAJMHgwMDgwMDAwMQorI2RlZmluZSBHRVRfRE1BX1BSSU9SSVRZKHgpICgoKCgoeCkmRE1BX1BSSU9SSVRZX01BU0spICYweDAwODAwMDAwKSA+PiAyMiApIHwgKCgoeCkmRE1BX1BSSU9SSVRZX01BU0spICYweDAwMDAwMDAxKSkKKworI2RlZmluZSBETUFfQ1MwICAgICAgICAgICAoMTw8MzEpCS8qIFRlcm1pbmFsIENvdW50IGhhcyBiZWVuIHJlYWNoZWQgKi8KKyNkZWZpbmUgRE1BX0NTMSAgICAgICAgICAgKDE8PDMwKQorI2RlZmluZSBETUFfQ1MyICAgICAgICAgICAoMTw8MjkpCisjZGVmaW5lIERNQV9DUzMgICAgICAgICAgICgxPDwyOCkKKworI2RlZmluZSBETUFfVFMwICAgICAgICAgICAoMTw8MjcpCS8qIEVuZCBvZiBUcmFuc2ZlciBoYXMgYmVlbiByZXF1ZXN0ZWQgKi8KKyNkZWZpbmUgRE1BX1RTMSAgICAgICAgICAgKDE8PDI2KQorI2RlZmluZSBETUFfVFMyICAgICAgICAgICAoMTw8MjUpCisjZGVmaW5lIERNQV9UUzMgICAgICAgICAgICgxPDwyNCkKKworI2RlZmluZSBETUFfQ0gwX0VSUiAgICAgICAoMTw8MjMpCS8qIERNQSBDaGFuZWwgMCBFcnJvciAqLworI2RlZmluZSBETUFfQ0gxX0VSUiAgICAgICAoMTw8MjIpCisjZGVmaW5lIERNQV9DSDJfRVJSICAgICAgICgxPDwyMSkKKyNkZWZpbmUgRE1BX0NIM19FUlIgICAgICAgKDE8PDIwKQorCisjZGVmaW5lIERNQV9DVDAJCSAgKDE8PDE5KQkvKiBDaGFpbmVkIHRyYW5zZmVyZSAqLworCisjZGVmaW5lIERNQV9JTl9ETUFfUkVRMCAgICgxPDwxOCkJLyogSW50ZXJuYWwgRE1BIFJlcXVlc3QgaXMgcGVuZGluZyAqLworI2RlZmluZSBETUFfSU5fRE1BX1JFUTEgICAoMTw8MTcpCisjZGVmaW5lIERNQV9JTl9ETUFfUkVRMiAgICgxPDwxNikKKyNkZWZpbmUgRE1BX0lOX0RNQV9SRVEzICAgKDE8PDE1KQorCisjZGVmaW5lIERNQV9FWFRfRE1BX1JFUTAgICgxPDwxNCkJLyogRXh0ZXJuYWwgRE1BIFJlcXVlc3QgaXMgcGVuZGluZyAqLworI2RlZmluZSBETUFfRVhUX0RNQV9SRVExICAoMTw8MTMpCisjZGVmaW5lIERNQV9FWFRfRE1BX1JFUTIgICgxPDwxMikKKyNkZWZpbmUgRE1BX0VYVF9ETUFfUkVRMyAgKDE8PDExKQorCisjZGVmaW5lIERNQV9DSDBfQlVTWSAgICAgICgxPDwxMCkJLyogRE1BIENoYW5uZWwgMCBCdXN5ICovCisjZGVmaW5lIERNQV9DSDFfQlVTWSAgICAgICgxPDw5KQorI2RlZmluZSBETUFfQ0gyX0JVU1kgICAgICAgKDE8PDgpCisjZGVmaW5lIERNQV9DSDNfQlVTWSAgICAgICAoMTw8NykKKworI2RlZmluZSBETUFfQ1QxICAgICAgICAgICAgKDE8PDYpCS8qIENoYWluZWQgdHJhbnNmZXJlICovCisjZGVmaW5lIERNQV9DVDIgICAgICAgICAgICAoMTw8NSkKKyNkZWZpbmUgRE1BX0NUMyAgICAgICAgICAgICgxPDw0KQorCisjZGVmaW5lIERNQV9DSF9FTkFCTEUgKDE8PDcpCisjZGVmaW5lIFNFVF9ETUFfQ0goeCkgKCgoeCkmMHgxKTw8NykKKyNkZWZpbmUgR0VUX0RNQV9DSCh4KSAoKCh4KSZETUFfQ0hfRU5BQkxFKT4+NykKKworLyogU1RCeDI1eHh4IGRtYSB1bmlxdWUgKi8KKy8qIGVuYWJsZSBkZXZpY2UgcG9ydCBvbiBhIGRtYSBjaGFubmVsCisgKiBleGFtcGxlIGV4dCAwIG9uIGRtYSAxCisgKi8KKworI2RlZmluZQlTU1AwX1JFQ1YJMTUKKyNkZWZpbmUJU1NQMF9YTUlUCTE0CisjZGVmaW5lIEVYVF9ETUFfMAkxMgorI2RlZmluZQlTQzFfWE1JVAkxMQorI2RlZmluZSBTQzFfUkVDVgkxMAorI2RlZmluZSBFWFRfRE1BXzIJOQorI2RlZmluZQlFWFRfRE1BXzMJOAorI2RlZmluZSBTRVJJQUwyX1hNSVQJNworI2RlZmluZSBTRVJJQUwyX1JFQ1YJNgorI2RlZmluZSBTQzBfWE1JVCAJNQorI2RlZmluZQlTQzBfUkVDVgk0CisjZGVmaW5lCVNFUklBTDFfWE1JVAkzCisjZGVmaW5lIFNFUklBTDFfUkVDVgkyCisjZGVmaW5lCVNFUklBTDBfWE1JVAkxCisjZGVmaW5lIFNFUklBTDBfUkVDVgkwCisKKyNkZWZpbmUgRE1BX0NIQU5fMAkxCisjZGVmaW5lIERNQV9DSEFOXzEJMgorI2RlZmluZSBETUFfQ0hBTl8yCTMKKyNkZWZpbmUgRE1BX0NIQU5fMwk0CisKKy8qIGVuZCBTVEJ4MjV4eCAqLworCisvKgorICogQml0IDMwIG11c3QgYmUgb25lIGZvciBSZWR3b29kcywgb3RoZXJ3aXNlIHRyYW5zZmVycyBtYXkgcmVjZWl2ZSBlcnJvcnMuCisgKi8KKyNkZWZpbmUgRE1BX0NSX01CMCAweDIKKworI2RlZmluZSBTRVRfRE1BX0NPTlRST0wgXAorICAgICAgIAkJKFNFVF9ETUFfQ0lFX0VOQUJMRShwX2luaXQtPmludF9lbmFibGUpIHwgIC8qIGludGVycnVwdCBlbmFibGUgICAgICAgICAqLyBcCisJCVNFVF9ETUFfRVREKHBfaW5pdC0+ZXRkX291dHB1dCkgICAgICAgIHwgIC8qIGVuZCBvZiB0cmFuc2ZlciBwaW4gICAgICAqLyBcCisJCVNFVF9ETUFfVENFKHBfaW5pdC0+dGNlX2VuYWJsZSkgICAgICAgIHwgIC8qIHRlcm1pbmFsIGNvdW50IGVuYWJsZSAgICAqLyBcCisJCVNFVF9ETUFfUEwocF9pbml0LT5wbCkgICAgICAgICAgICAgICAgIHwgIC8qIHBlcmlwaGVyYWwgbG9jYXRpb24gICAgICAqLyBcCisJCVNFVF9ETUFfREFJKHBfaW5pdC0+ZGFpKSAgICAgICAgICAgICAgIHwgIC8qIGRlc3QgYWRkciBpbmNyZW1lbnQgICAgICAqLyBcCisJCVNFVF9ETUFfU0FJKHBfaW5pdC0+c2FpKSAgICAgICAgICAgICAgIHwgIC8qIHNyYyBhZGRyIGluY3JlbWVudCAgICAgICAqLyBcCisJCVNFVF9ETUFfUFJJT1JJVFkocF9pbml0LT5jcCkgICAgICAgICAgIHwgIC8qIGNoYW5uZWwgcHJpb3JpdHkgICAgICAgICovICBcCisJCVNFVF9ETUFfUFcocF9pbml0LT5wd2lkdGgpICAgICAgICAgICAgIHwgIC8qIHBlcmlwaGVyYWwvYnVzIHdpZHRoICAgICovIFwKKwkJU0VUX0RNQV9QU0MocF9pbml0LT5wc2MpICAgICAgICAgICAgICAgfCAgLyogcGVyaXBoZXJhbCBzZXR1cCBjeWNsZXMgKi8gXAorCQlTRVRfRE1BX1BXQyhwX2luaXQtPnB3YykgICAgICAgICAgICAgICB8ICAvKiBwZXJpcGhlcmFsIHdhaXQgY3ljbGVzICAqLyBcCisJCVNFVF9ETUFfUEhDKHBfaW5pdC0+cGhjKSAgICAgICAgICAgICAgIHwgIC8qIHBlcmlwaGVyYWwgaG9sZCBjeWNsZXMgICovIFwKKwkJU0VUX0RNQV9UQ0QocF9pbml0LT50Y2RfZGlzYWJsZSkJICB8ICAvKiBUQyBjaGFpbiBtb2RlIGRpc2FibGUgICAqLyBcCisJCVNFVF9ETUFfRUNFKHBfaW5pdC0+ZWNlX2VuYWJsZSkJICB8ICAvKiBFQ0UgY2hhbmluIG1vZGUgZW5hYmxlICAqLyBcCisJCVNFVF9ETUFfQ0gocF9pbml0LT5jaF9lbmFibGUpCXwgICAgLyogQ2hhaW4gZW5hYmxlIAkgICAgICAgICovIFwKKwkJRE1BX0NSX01CMAkJCQkvKiBtdXN0IGJlIG9uZSAqLykKKworI2RlZmluZSBHRVRfRE1BX1BPTEFSSVRZKGNoYW4pIGNoYW4KKworI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydCBpbl91c2U7CS8qIHNldCB3aGVuIGNoYW5uZWwgaXMgYmVpbmcgdXNlZCwgY2xyIHdoZW4KKwkJCQkgKiBhdmFpbGFibGUuCisJCQkJICovCisJLyoKKwkgKiBWYWxpZCBwb2xhcml0eSBzZXR0aW5nczoKKwkgKiAgIERNQVJlcV9BY3RpdmVMb3cobikKKwkgKiAgIERNQUFja19BY3RpdmVMb3cobikKKwkgKiAgIEVPVF9BY3RpdmVMb3cobikKKwkgKgorCSAqICAgbiBpcyAwIHRvIG1heCBkbWEgY2hhbnMKKwkgKi8KKwl1bnNpZ25lZCBpbnQgcG9sYXJpdHk7CisKKwljaGFyIGJ1ZmZlcl9lbmFibGU7CS8qIEJvb2xlYW46IGJ1ZmZlciBlbmFibGUgICAgICAgICAgICAqLworCWNoYXIgdGNlX2VuYWJsZTsJLyogQm9vbGVhbjogdGVybWluYWwgY291bnQgZW5hYmxlICAgICovCisJY2hhciBldGRfb3V0cHV0OwkvKiBCb29sZWFuOiBlb3QgcGluIGlzIGEgdGMgb3V0cHV0ICAgKi8KKwljaGFyIHBjZTsJCS8qIEJvb2xlYW46IHBhcml0eSBjaGVjayBlbmFibGUgICAgICAqLworCisJLyoKKwkgKiBQZXJpcGhlcmFsIGxvY2F0aW9uOgorCSAqIElOVEVSTkFMX1BFUklQSEVSQUwgKFVBUlQwIG9uIHRoZSA0MDVHUCkKKwkgKiBFWFRFUk5BTF9QRVJJUEhFUkFMCisJICovCisJY2hhciBwbDsJCS8qIGludGVybmFsL2V4dGVybmFsIHBlcmlwaGVyYWwgICAgICAqLworCisJLyoKKwkgKiBWYWxpZCBwd2lkdGggc2V0dGluZ3M6CisJICogICBQV184CisJICogICBQV18xNgorCSAqICAgUFdfMzIKKwkgKiAgIFBXXzY0CisJICovCisJdW5zaWduZWQgaW50IHB3aWR0aDsKKworCWNoYXIgZGFpOwkJLyogQm9vbGVhbjogZHN0IGFkZHJlc3MgaW5jcmVtZW50ICAgKi8KKwljaGFyIHNhaTsJCS8qIEJvb2xlYW46IHNyYyBhZGRyZXNzIGluY3JlbWVudCAgICovCisKKwkvKgorCSAqIFZhbGlkIHBzYyBzZXR0aW5nczogMC0zCisJICovCisJdW5zaWduZWQgaW50IHBzYzsJLyogUGVyaXBoZXJhbCBTZXR1cCBDeWNsZXMgICAgICAgICAqLworCisJLyoKKwkgKiBWYWxpZCBwd2Mgc2V0dGluZ3M6CisJICogMC02MworCSAqLworCXVuc2lnbmVkIGludCBwd2M7CS8qIFBlcmlwaGVyYWwgV2FpdCBDeWNsZXMgICAgICAgICAgKi8KKworCS8qCisJICogVmFsaWQgcGhjIHNldHRpbmdzOgorCSAqIDAtNworCSAqLworCXVuc2lnbmVkIGludCBwaGM7CS8qIFBlcmlwaGVyYWwgSG9sZCBDeWNsZXMgICAgICAgICAgKi8KKworCS8qCisJICogVmFsaWQgY3AgKGNoYW5uZWwgcHJpb3JpdHkpIHNldHRpbmdzOgorCSAqICAgUFJJT1JJVFlfTE9XCisJICogICBQUklPUklUWV9NSURfTE9XCisJICogICBQUklPUklUWV9NSURfSElHSAorCSAqICAgUFJJT1JJVFlfSElHSAorCSAqLworCXVuc2lnbmVkIGludCBjcDsJLyogY2hhbm5lbCBwcmlvcml0eSAgICAgICAgICAgICAgICAqLworCisJLyoKKwkgKiBWYWxpZCBwZiAobWVtb3J5IHJlYWQgcHJlZmV0Y2gpIHNldHRpbmdzOgorCSAqCisJICogICBQUkVGRVRDSF8xCisJICogICBQUkVGRVRDSF8yCisJICogICBQUkVGRVRDSF80CisJICovCisJdW5zaWduZWQgaW50IHBmOwkvKiBtZW1vcnkgcmVhZCBwcmVmZXRjaCAgICAgICAgICAgICovCisKKwkvKgorCSAqIEJvb2xlYW46IGNoYW5uZWwgaW50ZXJydXB0IGVuYWJsZQorCSAqIE5PVEU6IGZvciBzZ2wgdHJhbnNmZXJzLCBvbmx5IHRoZSBsYXN0IGRlc2NyaXB0b3Igd2lsbCBiZSBzZXR1cCB0bworCSAqIGludGVycnVwdC4KKwkgKi8KKwljaGFyIGludF9lbmFibGU7CisKKwljaGFyIHNoaWZ0OwkJLyogZWFzeSBhY2Nlc3MgdG8gYnl0ZV9jb3VudCBzaGlmdCwgYmFzZWQgb24gKi8KKwkvKiB0aGUgd2lkdGggb2YgdGhlIGNoYW5uZWwgICAgICAgICAgICAgICAgICAqLworCisJdWludDMyX3QgY29udHJvbDsJLyogY2hhbm5lbCBjb250cm9sIHdvcmQgICAgICAgICAgICAgICAgICAgICAgKi8KKworCS8qIFRoZXNlIHZhcmlhYmxlZCBhcmUgdXNlZCBPTkxZIGluIHNpbmdsZSBkbWEgdHJhbnNmZXJzICAgICAgICAgICAgICAqLworCXVuc2lnbmVkIGludCBtb2RlOwkvKiB0cmFuc2ZlciBtb2RlICAgICAgICAgICAgICAgICAgICAgKi8KKwlwaHlzX2FkZHJfdCBhZGRyOworCWNoYXIgY2U7CQkvKiBjaGFubmVsIGVuYWJsZSAqLworI2lmZGVmIENPTkZJR19TVEIwM3h4eAorCWNoYXIgY2hfZW5hYmxlOworCWNoYXIgdGNkX2Rpc2FibGU7CisJY2hhciBlY2VfZW5hYmxlOworCWNoYXIgdGQ7CQkvKiB0cmFuc2ZlciBkaXJlY3Rpb24gKi8KKyNlbmRpZgorCisJY2hhciBpbnRfb25fZmluYWxfc2c7LyogZm9yIHNjYXR0ZXIvZ2F0aGVyIC0gb25seSBpbnRlcnJ1cHQgb24gbGFzdCBzZyAqLworfSBwcGNfZG1hX2NoX3Q7CisKKy8qCisgKiBQUEM0NHggRE1BIGltcGxlbWVudGF0aW9ucyBoYXZlIGEgc2xpZ2h0bHkgZGlmZmVyZW50CisgKiBkZXNjcmlwdG9yIGxheW91dC4gIFByb2JhYmx5IG1vdmVkIGFib3V0IGR1ZSB0byB0aGUKKyAqIGNoYW5nZSB0byA2NC1iaXQgYWRkcmVzc2VzIGFuZCBsaW5rIHBvaW50ZXIuIEkgZG9uJ3QKKyAqIGtub3cgd2h5IHRoZXkgZGlkbid0IGp1c3QgbGVhdmUgY29udHJvbF9jb3VudCBhZnRlcgorICogdGhlIGRzdF9hZGRyLgorICovCisjaWZkZWYgUFBDNHh4X0RNQV82NEJJVAordHlwZWRlZiBzdHJ1Y3QgeworCXVpbnQzMl90IGNvbnRyb2w7CisJdWludDMyX3QgY29udHJvbF9jb3VudDsKKwlwaHlzX2FkZHJfdCBzcmNfYWRkcjsKKwlwaHlzX2FkZHJfdCBkc3RfYWRkcjsKKwlwaHlzX2FkZHJfdCBuZXh0OworfSBwcGNfc2dsX3Q7CisjZWxzZQordHlwZWRlZiBzdHJ1Y3QgeworCXVpbnQzMl90IGNvbnRyb2w7CisJcGh5c19hZGRyX3Qgc3JjX2FkZHI7CisJcGh5c19hZGRyX3QgZHN0X2FkZHI7CisJdWludDMyX3QgY29udHJvbF9jb3VudDsKKwl1aW50MzJfdCBuZXh0OworfSBwcGNfc2dsX3Q7CisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludCBkbWFucjsKKwl1aW50MzJfdCBjb250cm9sOwkvKiBjaGFubmVsIGN0cmwgd29yZDsgbG9hZGVkIGZyb20gZWFjaCBkZXNjcnB0ciAqLworCXVpbnQzMl90IHNnbF9jb250cm9sOwkvKiBMSywgVENJLCBFVEksIGFuZCBFUkkgYml0cyBpbiBzZ2wgZGVzY3JpcHRvciAqLworCWRtYV9hZGRyX3QgZG1hX2FkZHI7CS8qIGRtYSAocGh5c2ljYWwpIGFkZHJlc3Mgb2YgdGhpcyBsaXN0ICAgICAgICAgICovCisJcHBjX3NnbF90ICpwaGVhZDsKKwlkbWFfYWRkcl90IHBoZWFkX2RtYTsKKwlwcGNfc2dsX3QgKnB0YWlsOworCWRtYV9hZGRyX3QgcHRhaWxfZG1hOworfSBzZ2xfbGlzdF9pbmZvX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlwaHlzX2FkZHJfdCAqc3JjX2FkZHI7CisJcGh5c19hZGRyX3QgKmRzdF9hZGRyOworCXBoeXNfYWRkcl90IGRtYV9zcmNfYWRkcjsKKwlwaHlzX2FkZHJfdCBkbWFfZHN0X2FkZHI7Cit9IHBjaV9hbGxvY19kZXNjX3Q7CisKK2V4dGVybiBwcGNfZG1hX2NoX3QgZG1hX2NoYW5uZWxzW107CisKKy8qCisgKiBUaGUgRE1BIEFQSSBhcmUgaW4gcHBjNHh4X2RtYS5jIGFuZCBwcGM0eHhfc2dkbWEuYworICovCitleHRlcm4gaW50IHBwYzR4eF9pbml0X2RtYV9jaGFubmVsKHVuc2lnbmVkIGludCwgcHBjX2RtYV9jaF90ICopOworZXh0ZXJuIGludCBwcGM0eHhfZ2V0X2NoYW5uZWxfY29uZmlnKHVuc2lnbmVkIGludCwgcHBjX2RtYV9jaF90ICopOworZXh0ZXJuIGludCBwcGM0eHhfc2V0X2NoYW5uZWxfcHJpb3JpdHkodW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOworZXh0ZXJuIHVuc2lnbmVkIGludCBwcGM0eHhfZ2V0X3BlcmlwaGVyYWxfd2lkdGgodW5zaWduZWQgaW50KTsKK2V4dGVybiB2b2lkIHBwYzR4eF9zZXRfc2dfYWRkcihpbnQsIHBoeXNfYWRkcl90KTsKK2V4dGVybiBpbnQgcHBjNHh4X2FkZF9kbWFfc2dsKHNnbF9oYW5kbGVfdCwgcGh5c19hZGRyX3QsIHBoeXNfYWRkcl90LCB1bnNpZ25lZCBpbnQpOworZXh0ZXJuIHZvaWQgcHBjNHh4X2VuYWJsZV9kbWFfc2dsKHNnbF9oYW5kbGVfdCk7CitleHRlcm4gdm9pZCBwcGM0eHhfZGlzYWJsZV9kbWFfc2dsKHNnbF9oYW5kbGVfdCk7CitleHRlcm4gaW50IHBwYzR4eF9nZXRfZG1hX3NnbF9yZXNpZHVlKHNnbF9oYW5kbGVfdCwgcGh5c19hZGRyX3QgKiwgcGh5c19hZGRyX3QgKik7CitleHRlcm4gaW50IHBwYzR4eF9kZWxldGVfZG1hX3NnbF9lbGVtZW50KHNnbF9oYW5kbGVfdCwgcGh5c19hZGRyX3QgKiwgcGh5c19hZGRyX3QgKik7CitleHRlcm4gaW50IHBwYzR4eF9hbGxvY19kbWFfaGFuZGxlKHNnbF9oYW5kbGVfdCAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7CitleHRlcm4gdm9pZCBwcGM0eHhfZnJlZV9kbWFfaGFuZGxlKHNnbF9oYW5kbGVfdCk7CitleHRlcm4gaW50IHBwYzR4eF9nZXRfZG1hX3N0YXR1cyh2b2lkKTsKK2V4dGVybiBpbnQgcHBjNHh4X2VuYWJsZV9idXJzdCh1bnNpZ25lZCBpbnQpOworZXh0ZXJuIGludCBwcGM0eHhfZGlzYWJsZV9idXJzdCh1bnNpZ25lZCBpbnQpOworZXh0ZXJuIGludCBwcGM0eHhfc2V0X2J1cnN0X3NpemUodW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOworZXh0ZXJuIHZvaWQgcHBjNHh4X3NldF9zcmNfYWRkcihpbnQgZG1hbnIsIHBoeXNfYWRkcl90IHNyY19hZGRyKTsKK2V4dGVybiB2b2lkIHBwYzR4eF9zZXRfZHN0X2FkZHIoaW50IGRtYW5yLCBwaHlzX2FkZHJfdCBkc3RfYWRkcik7CitleHRlcm4gdm9pZCBwcGM0eHhfZW5hYmxlX2RtYSh1bnNpZ25lZCBpbnQgZG1hbnIpOworZXh0ZXJuIHZvaWQgcHBjNHh4X2Rpc2FibGVfZG1hKHVuc2lnbmVkIGludCBkbWFucik7CitleHRlcm4gdm9pZCBwcGM0eHhfc2V0X2RtYV9jb3VudCh1bnNpZ25lZCBpbnQgZG1hbnIsIHVuc2lnbmVkIGludCBjb3VudCk7CitleHRlcm4gaW50IHBwYzR4eF9nZXRfZG1hX3Jlc2lkdWUodW5zaWduZWQgaW50IGRtYW5yKTsKK2V4dGVybiB2b2lkIHBwYzR4eF9zZXRfZG1hX2FkZHIyKHVuc2lnbmVkIGludCBkbWFuciwgcGh5c19hZGRyX3Qgc3JjX2RtYV9hZGRyLAorCQkJCSBwaHlzX2FkZHJfdCBkc3RfZG1hX2FkZHIpOworZXh0ZXJuIGludCBwcGM0eHhfZW5hYmxlX2RtYV9pbnRlcnJ1cHQodW5zaWduZWQgaW50IGRtYW5yKTsKK2V4dGVybiBpbnQgcHBjNHh4X2Rpc2FibGVfZG1hX2ludGVycnVwdCh1bnNpZ25lZCBpbnQgZG1hbnIpOworZXh0ZXJuIGludCBwcGM0eHhfY2xyX2RtYV9zdGF0dXModW5zaWduZWQgaW50IGRtYW5yKTsKK2V4dGVybiBpbnQgcHBjNHh4X21hcF9kbWFfcG9ydCh1bnNpZ25lZCBpbnQgZG1hbnIsIHVuc2lnbmVkIGludCBvY3BfZG1hLHNob3J0IGRtYV9jaGFuKTsKK2V4dGVybiBpbnQgcHBjNHh4X2Rpc2FibGVfZG1hX3BvcnQodW5zaWduZWQgaW50IGRtYW5yLCB1bnNpZ25lZCBpbnQgb2NwX2RtYSxzaG9ydCBkbWFfY2hhbik7CitleHRlcm4gaW50IHBwYzR4eF9zZXRfZG1hX21vZGUodW5zaWduZWQgaW50IGRtYW5yLCB1bnNpZ25lZCBpbnQgbW9kZSk7CisKKy8qIFRoZXNlIGFyZSBpbiBrZXJuZWwvZG1hLmM6ICovCisKKy8qIHJlc2VydmUgYSBETUEgY2hhbm5lbCAqLworZXh0ZXJuIGludCByZXF1ZXN0X2RtYSh1bnNpZ25lZCBpbnQgZG1hbnIsIGNvbnN0IGNoYXIgKmRldmljZV9pZCk7CisvKiByZWxlYXNlIGl0IGFnYWluICovCitleHRlcm4gdm9pZCBmcmVlX2RtYSh1bnNpZ25lZCBpbnQgZG1hbnIpOworI2VuZGlmCisjZW5kaWYJCQkJLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL3BwYzR4eF9waWMuaCBiL2luY2x1ZGUvYXNtLXBwYy9wcGM0eHhfcGljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE2YzdmOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9wcGM0eHhfcGljLmgKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLXBwYy9wcGM0eHhfcGljLmgKKyAqCisgKiBJbnRlcnJ1cHQgY29udHJvbGxlciBkcml2ZXIgZm9yIFBvd2VyUEMgNHh4LWJhc2VkIHByb2Nlc3NvcnMuCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk5IEdyYW50IEVyaWNrc29uIDxncmFudEBsY3NlLnVtbi5lZHU+CisgKgorICogRXVnZW5lIFN1cm92ZWdpbiA8ZXVnZW5lLnN1cm92ZWdpbkB6dWx0eXMuY29tPiBvciA8ZWJzQGVic2hvbWUubmV0PgorICogQ29weXJpZ2h0IChjKSAyMDA0IFp1bHR5cyBUZWNobm9sb2dpZXMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYJX19QUEM0WFhfUElDX0hfXworI2RlZmluZQlfX1BQQzRYWF9QSUNfSF9fCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorCisvKiAiRml4ZWQiIFVJQyBzZXR0aW5ncyAodGhleSBhcmUgY2hpcCwgbm90IGJvYXJkIHNwZWNpZmljKSwKKyAqIGUuZy4gcG9sYXJpdHkvdHJpZ2dlcnJpbmcgZm9yIGludGVybmFsIGludGVycnVwdCBzb3VyY2VzLgorICoKKyAqIFBsYXRmb3JtIHBvcnQgc2hvdWxkIHByb3ZpZGUgTlJfVUlDUy1zaXplZCBhcnJheSBuYW1lZCBwcGM0eHhfY29yZV91aWNfY2ZnCisgKiB3aXRoIHRoZXNlICJmaXhlZCIgc2V0dGluZ3M6IC5wb2xhcml0eSBjb250YWlucyBleGFjdCB2YWx1ZSB3aGljaCB3aWxsCisgKiBiZSB3cml0dGVuIChtYXNrZWQgd2l0aCAiZXh0X2lycV9tYXNrIikgaW50byBVSUN4X1BSIHJlZ2lzdGVyLAorICogLnRyaWdnZXJpbmcgLSB0byBVSUN4X1RSLgorICoKKyAqIFNldHRpbmdzIGZvciBleHRlcm5hbCBJUlFzIGNhbiBiZSBzcGVjaWZpZWQgc2VwYXJhdGVseSBieSB0aGUKKyAqIGJvYXJkIHN1cHBvcnQgY29kZS4gSW4gdGhpcyBjYXNlIHByb3Blcmx5IHNpemVkIGFycmF5IG9mIHVuc2lnbmVkCisgKiBjaGFyIG5hbWVkIHBwYzR4eF91aWNfZXh0X2lycV9jZmcgc2hvdWxkIGJlIGZpbGxlZCB3aXRoIGNvcnJlY3QKKyAqIHZhbHVlcyB1c2luZyBJUlFfU0VOU0VfWFhYWFggYW5kIElSUV9QT0xBUklUWV9YWFhYWFhYIGRlZmluZXMuCisgKgorICogSWYgdGhlc2UgYXJyYXlzIGFyZW4ndCBwcm92aWRlZCwgVUlDIGluaXRpYWxpemF0aW9uIGNvZGUga2VlcHMgZmlybXdhcmUKKyAqIGNvbmZpZ3VyYXRpb24uIEFsc28sIHBwYzR4eF91aWNfZXh0X2lycV9jZmcgaW1wbGllcyBwcGM0eHhfY29yZV91aWNfY2ZnCisgKiBpcyBkZWZpbmVkLgorICoKKyAqIEJvdGggcHBjNHh4X2NvcmVfdWljX2NmZyBhbmQgcHBjNHh4X3VpY19leHRfaXJxX2NmZyBhcmUgZGVjbGFyZWQgYXMKKyAqICJ3ZWFrIiBzeW1ib2xzIGluIHBwYzR4eF9waWMuYworICoKKyAqLworc3RydWN0IHBwYzR4eF91aWNfc2V0dGluZ3MgeworCXUzMiBwb2xhcml0eTsKKwl1MzIgdHJpZ2dlcmluZzsKKwl1MzIgZXh0X2lycV9tYXNrOworfTsKKworZXh0ZXJuIHZvaWQgcHBjNHh4X3BpY19pbml0KHZvaWQpOworCisjZW5kaWYJCQkJLyogX19QUEM0WFhfUElDX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL3BwY19hc20uaCBiL2luY2x1ZGUvYXNtLXBwYy9wcGNfYXNtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNmYThlNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9wcGNfYXNtLmgKQEAgLTAsMCArMSwzNDIgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1wcGMvcHBjX2FzbS5oCisgKgorICogRGVmaW5pdGlvbnMgdXNlZCBieSB2YXJpb3VzIGJpdHMgb2YgbG93LWxldmVsIGFzc2VtYmx5IGNvZGUgb24gUG93ZXJQQy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OSBHYXJ5IFRob21hcywgUGF1bCBNYWNrZXJyYXMsIENvcnQgRG91Z2FuLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworLyoKKyAqIE1hY3JvcyBmb3Igc3RvcmluZyByZWdpc3RlcnMgaW50byBhbmQgbG9hZGluZyByZWdpc3RlcnMgZnJvbQorICogZXhjZXB0aW9uIGZyYW1lcy4KKyAqLworI2RlZmluZSBTQVZFX0dQUihuLCBiYXNlKQlzdHcJbixHUFIwKzQqKG4pKGJhc2UpCisjZGVmaW5lIFNBVkVfMkdQUlMobiwgYmFzZSkJU0FWRV9HUFIobiwgYmFzZSk7IFNBVkVfR1BSKG4rMSwgYmFzZSkKKyNkZWZpbmUgU0FWRV80R1BSUyhuLCBiYXNlKQlTQVZFXzJHUFJTKG4sIGJhc2UpOyBTQVZFXzJHUFJTKG4rMiwgYmFzZSkKKyNkZWZpbmUgU0FWRV84R1BSUyhuLCBiYXNlKQlTQVZFXzRHUFJTKG4sIGJhc2UpOyBTQVZFXzRHUFJTKG4rNCwgYmFzZSkKKyNkZWZpbmUgU0FWRV8xMEdQUlMobiwgYmFzZSkJU0FWRV84R1BSUyhuLCBiYXNlKTsgU0FWRV8yR1BSUyhuKzgsIGJhc2UpCisjZGVmaW5lIFJFU1RfR1BSKG4sIGJhc2UpCWx3egluLEdQUjArNCoobikoYmFzZSkKKyNkZWZpbmUgUkVTVF8yR1BSUyhuLCBiYXNlKQlSRVNUX0dQUihuLCBiYXNlKTsgUkVTVF9HUFIobisxLCBiYXNlKQorI2RlZmluZSBSRVNUXzRHUFJTKG4sIGJhc2UpCVJFU1RfMkdQUlMobiwgYmFzZSk7IFJFU1RfMkdQUlMobisyLCBiYXNlKQorI2RlZmluZSBSRVNUXzhHUFJTKG4sIGJhc2UpCVJFU1RfNEdQUlMobiwgYmFzZSk7IFJFU1RfNEdQUlMobis0LCBiYXNlKQorI2RlZmluZSBSRVNUXzEwR1BSUyhuLCBiYXNlKQlSRVNUXzhHUFJTKG4sIGJhc2UpOyBSRVNUXzJHUFJTKG4rOCwgYmFzZSkKKworI2RlZmluZSBTQVZFX05WR1BSUyhiYXNlKQlTQVZFX0dQUigxMywgYmFzZSk7IFNBVkVfOEdQUlMoMTQsIGJhc2UpOyBcCisJCQkJU0FWRV8xMEdQUlMoMjIsIGJhc2UpCisjZGVmaW5lIFJFU1RfTlZHUFJTKGJhc2UpCVJFU1RfR1BSKDEzLCBiYXNlKTsgUkVTVF84R1BSUygxNCwgYmFzZSk7IFwKKwkJCQlSRVNUXzEwR1BSUygyMiwgYmFzZSkKKworI2RlZmluZSBTQVZFX0ZQUihuLCBiYXNlKQlzdGZkCW4sVEhSRUFEX0ZQUjArOCoobikoYmFzZSkKKyNkZWZpbmUgU0FWRV8yRlBSUyhuLCBiYXNlKQlTQVZFX0ZQUihuLCBiYXNlKTsgU0FWRV9GUFIobisxLCBiYXNlKQorI2RlZmluZSBTQVZFXzRGUFJTKG4sIGJhc2UpCVNBVkVfMkZQUlMobiwgYmFzZSk7IFNBVkVfMkZQUlMobisyLCBiYXNlKQorI2RlZmluZSBTQVZFXzhGUFJTKG4sIGJhc2UpCVNBVkVfNEZQUlMobiwgYmFzZSk7IFNBVkVfNEZQUlMobis0LCBiYXNlKQorI2RlZmluZSBTQVZFXzE2RlBSUyhuLCBiYXNlKQlTQVZFXzhGUFJTKG4sIGJhc2UpOyBTQVZFXzhGUFJTKG4rOCwgYmFzZSkKKyNkZWZpbmUgU0FWRV8zMkZQUlMobiwgYmFzZSkJU0FWRV8xNkZQUlMobiwgYmFzZSk7IFNBVkVfMTZGUFJTKG4rMTYsIGJhc2UpCisjZGVmaW5lIFJFU1RfRlBSKG4sIGJhc2UpCWxmZAluLFRIUkVBRF9GUFIwKzgqKG4pKGJhc2UpCisjZGVmaW5lIFJFU1RfMkZQUlMobiwgYmFzZSkJUkVTVF9GUFIobiwgYmFzZSk7IFJFU1RfRlBSKG4rMSwgYmFzZSkKKyNkZWZpbmUgUkVTVF80RlBSUyhuLCBiYXNlKQlSRVNUXzJGUFJTKG4sIGJhc2UpOyBSRVNUXzJGUFJTKG4rMiwgYmFzZSkKKyNkZWZpbmUgUkVTVF84RlBSUyhuLCBiYXNlKQlSRVNUXzRGUFJTKG4sIGJhc2UpOyBSRVNUXzRGUFJTKG4rNCwgYmFzZSkKKyNkZWZpbmUgUkVTVF8xNkZQUlMobiwgYmFzZSkJUkVTVF84RlBSUyhuLCBiYXNlKTsgUkVTVF84RlBSUyhuKzgsIGJhc2UpCisjZGVmaW5lIFJFU1RfMzJGUFJTKG4sIGJhc2UpCVJFU1RfMTZGUFJTKG4sIGJhc2UpOyBSRVNUXzE2RlBSUyhuKzE2LCBiYXNlKQorCisjZGVmaW5lIFNBVkVfVlIobixiLGJhc2UpCWxpIGIsVEhSRUFEX1ZSMCsoMTYqKG4pKTsgIHN0dnggbixiLGJhc2UKKyNkZWZpbmUgU0FWRV8yVlIobixiLGJhc2UpCVNBVkVfVlIobixiLGJhc2UpOyBTQVZFX1ZSKG4rMSxiLGJhc2UpCisjZGVmaW5lIFNBVkVfNFZSKG4sYixiYXNlKQlTQVZFXzJWUihuLGIsYmFzZSk7IFNBVkVfMlZSKG4rMixiLGJhc2UpCisjZGVmaW5lIFNBVkVfOFZSKG4sYixiYXNlKQlTQVZFXzRWUihuLGIsYmFzZSk7IFNBVkVfNFZSKG4rNCxiLGJhc2UpCisjZGVmaW5lIFNBVkVfMTZWUihuLGIsYmFzZSkJU0FWRV84VlIobixiLGJhc2UpOyBTQVZFXzhWUihuKzgsYixiYXNlKQorI2RlZmluZSBTQVZFXzMyVlIobixiLGJhc2UpCVNBVkVfMTZWUihuLGIsYmFzZSk7IFNBVkVfMTZWUihuKzE2LGIsYmFzZSkKKyNkZWZpbmUgUkVTVF9WUihuLGIsYmFzZSkJbGkgYixUSFJFQURfVlIwKygxNioobikpOyBsdnggbixiLGJhc2UKKyNkZWZpbmUgUkVTVF8yVlIobixiLGJhc2UpCVJFU1RfVlIobixiLGJhc2UpOyBSRVNUX1ZSKG4rMSxiLGJhc2UpCisjZGVmaW5lIFJFU1RfNFZSKG4sYixiYXNlKQlSRVNUXzJWUihuLGIsYmFzZSk7IFJFU1RfMlZSKG4rMixiLGJhc2UpCisjZGVmaW5lIFJFU1RfOFZSKG4sYixiYXNlKQlSRVNUXzRWUihuLGIsYmFzZSk7IFJFU1RfNFZSKG4rNCxiLGJhc2UpCisjZGVmaW5lIFJFU1RfMTZWUihuLGIsYmFzZSkJUkVTVF84VlIobixiLGJhc2UpOyBSRVNUXzhWUihuKzgsYixiYXNlKQorI2RlZmluZSBSRVNUXzMyVlIobixiLGJhc2UpCVJFU1RfMTZWUihuLGIsYmFzZSk7IFJFU1RfMTZWUihuKzE2LGIsYmFzZSkKKworI2RlZmluZSBTQVZFX0VWUihuLHMsYmFzZSkJZXZtZXJnZWhpIHMscyxuOyBzdHcgcyxUSFJFQURfRVZSMCs0KihuKShiYXNlKQorI2RlZmluZSBTQVZFXzJFVlIobixzLGJhc2UpCVNBVkVfRVZSKG4scyxiYXNlKTsgU0FWRV9FVlIobisxLHMsYmFzZSkKKyNkZWZpbmUgU0FWRV80RVZSKG4scyxiYXNlKQlTQVZFXzJFVlIobixzLGJhc2UpOyBTQVZFXzJFVlIobisyLHMsYmFzZSkKKyNkZWZpbmUgU0FWRV84RVZSKG4scyxiYXNlKQlTQVZFXzRFVlIobixzLGJhc2UpOyBTQVZFXzRFVlIobis0LHMsYmFzZSkKKyNkZWZpbmUgU0FWRV8xNkVWUihuLHMsYmFzZSkJU0FWRV84RVZSKG4scyxiYXNlKTsgU0FWRV84RVZSKG4rOCxzLGJhc2UpCisjZGVmaW5lIFNBVkVfMzJFVlIobixzLGJhc2UpCVNBVkVfMTZFVlIobixzLGJhc2UpOyBTQVZFXzE2RVZSKG4rMTYscyxiYXNlKQorCisjZGVmaW5lIFJFU1RfRVZSKG4scyxiYXNlKQlsd3ogcyxUSFJFQURfRVZSMCs0KihuKShiYXNlKTsgZXZtZXJnZWxvIG4scyxuCisjZGVmaW5lIFJFU1RfMkVWUihuLHMsYmFzZSkJUkVTVF9FVlIobixzLGJhc2UpOyBSRVNUX0VWUihuKzEscyxiYXNlKQorI2RlZmluZSBSRVNUXzRFVlIobixzLGJhc2UpCVJFU1RfMkVWUihuLHMsYmFzZSk7IFJFU1RfMkVWUihuKzIscyxiYXNlKQorI2RlZmluZSBSRVNUXzhFVlIobixzLGJhc2UpCVJFU1RfNEVWUihuLHMsYmFzZSk7IFJFU1RfNEVWUihuKzQscyxiYXNlKQorI2RlZmluZSBSRVNUXzE2RVZSKG4scyxiYXNlKQlSRVNUXzhFVlIobixzLGJhc2UpOyBSRVNUXzhFVlIobis4LHMsYmFzZSkKKyNkZWZpbmUgUkVTVF8zMkVWUihuLHMsYmFzZSkJUkVTVF8xNkVWUihuLHMsYmFzZSk7IFJFU1RfMTZFVlIobisxNixzLGJhc2UpCisKKyNpZmRlZiBDT05GSUdfUFBDNjAxX1NZTkNfRklYCisjZGVmaW5lIFNZTkMJCQkJXAorQkVHSU5fRlRSX1NFQ1RJT04JCQlcCisJc3luYzsJCQkJXAorCWlzeW5jOwkJCQlcCitFTkRfRlRSX1NFQ1RJT05fSUZTRVQoQ1BVX0ZUUl82MDEpCisjZGVmaW5lIFNZTkNfNjAxCQkJXAorQkVHSU5fRlRSX1NFQ1RJT04JCQlcCisJc3luYzsJCQkJXAorRU5EX0ZUUl9TRUNUSU9OX0lGU0VUKENQVV9GVFJfNjAxKQorI2RlZmluZSBJU1lOQ182MDEJCQlcCitCRUdJTl9GVFJfU0VDVElPTgkJCVwKKwlpc3luYzsJCQkJXAorRU5EX0ZUUl9TRUNUSU9OX0lGU0VUKENQVV9GVFJfNjAxKQorI2Vsc2UKKyNkZWZpbmUJU1lOQworI2RlZmluZSBTWU5DXzYwMQorI2RlZmluZSBJU1lOQ182MDEKKyNlbmRpZgorCisjaWZuZGVmIENPTkZJR19TTVAKKyNkZWZpbmUgVExCU1lOQworI2Vsc2UgLyogQ09ORklHX1NNUCAqLworLyogdGxic3luYyBpcyBub3QgaW1wbGVtZW50ZWQgb24gNjAxICovCisjZGVmaW5lIFRMQlNZTkMJCQkJXAorQkVHSU5fRlRSX1NFQ1RJT04JCQlcCisJdGxic3luYzsJCQlcCisJc3luYzsJCQkJXAorRU5EX0ZUUl9TRUNUSU9OX0lGQ0xSKENQVV9GVFJfNjAxKQorI2VuZGlmCisKKy8qCisgKiBUaGlzIGluc3RydWN0aW9uIGlzIG5vdCBpbXBsZW1lbnRlZCBvbiB0aGUgUFBDIDYwMyBvciA2MDE7IGhvd2V2ZXIsIG9uCisgKiB0aGUgNDAzR0NYIGFuZCA0MDVHUCB0bGJpYSBJUyBkZWZpbmVkIGFuZCB0bGJpZSBpcyBub3QuCisgKiBBbGwgb2YgdGhlc2UgaW5zdHJ1Y3Rpb25zIGV4aXN0IGluIHRoZSA4eHgsIHRoZXkgaGF2ZSBtYWdpY2FsIHBvd2VycywKKyAqIGFuZCB0aGV5IG11c3QgYmUgdXNlZC4KKyAqLworCisjaWYgIWRlZmluZWQoQ09ORklHXzR4eCkgJiYgIWRlZmluZWQoQ09ORklHXzh4eCkKKyNkZWZpbmUgdGxiaWEJCQkJCVwKKwlsaQlyNCwxMDI0OwkJCVwKKwltdGN0cglyNDsJCQkJXAorCWxpcwlyNCxLRVJORUxCQVNFQGg7CQlcCiswOgl0bGJpZQlyNDsJCQkJXAorCWFkZGkJcjQscjQsMHgxMDAwOwkJCVwKKwliZG56CTBiCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19CT09LRQorI2RlZmluZSB0b3BoeXMocmQscnMpCQkJCVwKKwlhZGRpcwlyZCxycywwCisKKyNkZWZpbmUgdG92aXJ0KHJkLHJzKQkJCQlcCisJYWRkaXMJcmQscnMsMAorCisjZWxzZSAgLyogQ09ORklHX0JPT0tFICovCisvKgorICogT24gQVBVUyAoQW1pZ2EgUG93ZXJQQyBjcHUgdXBncmFkZSBib2FyZCksIHdlIGRvbid0IGtub3cgdGhlCisgKiBwaHlzaWNhbCBiYXNlIGFkZHJlc3Mgb2YgUkFNIGF0IGNvbXBpbGUgdGltZS4KKyAqLworI2RlZmluZSB0b3BoeXMocmQscnMpCQkJCVwKKzA6CWFkZGlzCXJkLHJzLC1LRVJORUxCQVNFQGg7CQlcCisJLnNlY3Rpb24gIi52dG9wX2ZpeHVwIiwiYXciOwkJXAorCS5hbGlnbiAgMTsJCQkJXAorCS5sb25nICAgMGI7CQkJCVwKKwkucHJldmlvdXMKKworI2RlZmluZSB0b3ZpcnQocmQscnMpCQkJCVwKKzA6CWFkZGlzCXJkLHJzLEtFUk5FTEJBU0VAaDsJCVwKKwkuc2VjdGlvbiAiLnB0b3ZfZml4dXAiLCJhdyI7CQlcCisJLmFsaWduICAxOwkJCQlcCisJLmxvbmcgICAwYjsJCQkJXAorCS5wcmV2aW91cworI2VuZGlmICAvKiBDT05GSUdfQk9PS0UgKi8KKworLyoKKyAqIE9uIDY0LWJpdCBjcHVzLCB3ZSB1c2UgdGhlIHJmaWQgaW5zdHJ1Y3Rpb24gaW5zdGVhZCBvZiByZmksIGJ1dAorICogd2UgdGhlbiBoYXZlIHRvIG1ha2Ugc3VyZSB3ZSBwcmVzZXJ2ZSB0aGUgdG9wIDMyIGJpdHMgZXhjZXB0IGZvcgorICogdGhlIDY0LWJpdCBtb2RlIGJpdCwgd2hpY2ggd2UgY2xlYXIuCisgKi8KKyNpZmRlZiBDT05GSUdfUFBDNjRCUklER0UKKyNkZWZpbmUJRklYX1NSUjEocmEsIHJiKQlcCisJbXIJcmIscmE7CQlcCisJbWZtc3IJcmE7CQlcCisJY2xybGRpCXJhLHJhLDE7CQkvKiB0dXJuIG9mZiA2NC1iaXQgbW9kZSAqLyBcCisJcmxkaW1pCXJhLHJiLDAsMzIKKyNkZWZpbmUJUkZJCQkubG9uZwkweDRjMDAwMDI0CS8qIHJmaWQgaW5zdHJ1Y3Rpb24gKi8KKyNkZWZpbmUgTVRNU1JEKHIpCS5sb25nCSgweDdjMDAwMTY0ICsgKChyKSA8PCAyMSkpCS8qIG10bXNyZCAqLworI2RlZmluZSBDTFJfVE9QMzIocikJcmx3aW5tCShyKSwociksMCwwLDMxCS8qIGNsZWFyIHRvcCAzMiBiaXRzICovCisKKyNlbHNlCisjZGVmaW5lIEZJWF9TUlIxKHJhLCByYikKKyNpZm5kZWYgQ09ORklHXzQweAorI2RlZmluZQlSRkkJCXJmaQorI2Vsc2UKKyNkZWZpbmUgUkZJCQlyZmk7IGIgLgkvKiBQcmV2ZW50IHByZWZldGNoIHBhc3QgcmZpICovCisjZW5kaWYKKyNkZWZpbmUgTVRNU1JEKHIpCW10bXNyCXIKKyNkZWZpbmUgQ0xSX1RPUDMyKHIpCisjZW5kaWYgLyogQ09ORklHX1BQQzY0QlJJREdFICovCisKKyNkZWZpbmUgUkZNQ0kJCS5sb25nIDB4NGMwMDAwNGMJLyogcmZtY2kgaW5zdHJ1Y3Rpb24gKi8KKworI2lmZGVmIENPTkZJR19JQk00MDVfRVJSNzcKKyNkZWZpbmUgUFBDNDA1X0VSUjc3KHJhLHJiKQlkY2J0CXJhLCByYjsKKyNkZWZpbmUJUFBDNDA1X0VSUjc3X1NZTkMJc3luYzsKKyNlbHNlCisjZGVmaW5lIFBQQzQwNV9FUlI3NyhyYSxyYikKKyNkZWZpbmUgUFBDNDA1X0VSUjc3X1NZTkMKKyNlbmRpZgorCisvKiBUaGUgYm9yaW5nIGJpdHMuLi4gKi8KKworLyogQ29uZGl0aW9uIFJlZ2lzdGVyIEJpdCBGaWVsZHMgKi8KKworI2RlZmluZQljcjAJMAorI2RlZmluZQljcjEJMQorI2RlZmluZQljcjIJMgorI2RlZmluZQljcjMJMworI2RlZmluZQljcjQJNAorI2RlZmluZQljcjUJNQorI2RlZmluZQljcjYJNgorI2RlZmluZQljcjcJNworCisKKy8qIEdlbmVyYWwgUHVycG9zZSBSZWdpc3RlcnMgKEdQUnMpICovCisKKyNkZWZpbmUJcjAJMAorI2RlZmluZQlyMQkxCisjZGVmaW5lCXIyCTIKKyNkZWZpbmUJcjMJMworI2RlZmluZQlyNAk0CisjZGVmaW5lCXI1CTUKKyNkZWZpbmUJcjYJNgorI2RlZmluZQlyNwk3CisjZGVmaW5lCXI4CTgKKyNkZWZpbmUJcjkJOQorI2RlZmluZQlyMTAJMTAKKyNkZWZpbmUJcjExCTExCisjZGVmaW5lCXIxMgkxMgorI2RlZmluZQlyMTMJMTMKKyNkZWZpbmUJcjE0CTE0CisjZGVmaW5lCXIxNQkxNQorI2RlZmluZQlyMTYJMTYKKyNkZWZpbmUJcjE3CTE3CisjZGVmaW5lCXIxOAkxOAorI2RlZmluZQlyMTkJMTkKKyNkZWZpbmUJcjIwCTIwCisjZGVmaW5lCXIyMQkyMQorI2RlZmluZQlyMjIJMjIKKyNkZWZpbmUJcjIzCTIzCisjZGVmaW5lCXIyNAkyNAorI2RlZmluZQlyMjUJMjUKKyNkZWZpbmUJcjI2CTI2CisjZGVmaW5lCXIyNwkyNworI2RlZmluZQlyMjgJMjgKKyNkZWZpbmUJcjI5CTI5CisjZGVmaW5lCXIzMAkzMAorI2RlZmluZQlyMzEJMzEKKworCisvKiBGbG9hdGluZyBQb2ludCBSZWdpc3RlcnMgKEZQUnMpICovCisKKyNkZWZpbmUJZnIwCTAKKyNkZWZpbmUJZnIxCTEKKyNkZWZpbmUJZnIyCTIKKyNkZWZpbmUJZnIzCTMKKyNkZWZpbmUJZnI0CTQKKyNkZWZpbmUJZnI1CTUKKyNkZWZpbmUJZnI2CTYKKyNkZWZpbmUJZnI3CTcKKyNkZWZpbmUJZnI4CTgKKyNkZWZpbmUJZnI5CTkKKyNkZWZpbmUJZnIxMAkxMAorI2RlZmluZQlmcjExCTExCisjZGVmaW5lCWZyMTIJMTIKKyNkZWZpbmUJZnIxMwkxMworI2RlZmluZQlmcjE0CTE0CisjZGVmaW5lCWZyMTUJMTUKKyNkZWZpbmUJZnIxNgkxNgorI2RlZmluZQlmcjE3CTE3CisjZGVmaW5lCWZyMTgJMTgKKyNkZWZpbmUJZnIxOQkxOQorI2RlZmluZQlmcjIwCTIwCisjZGVmaW5lCWZyMjEJMjEKKyNkZWZpbmUJZnIyMgkyMgorI2RlZmluZQlmcjIzCTIzCisjZGVmaW5lCWZyMjQJMjQKKyNkZWZpbmUJZnIyNQkyNQorI2RlZmluZQlmcjI2CTI2CisjZGVmaW5lCWZyMjcJMjcKKyNkZWZpbmUJZnIyOAkyOAorI2RlZmluZQlmcjI5CTI5CisjZGVmaW5lCWZyMzAJMzAKKyNkZWZpbmUJZnIzMQkzMQorCisjZGVmaW5lCXZyMAkwCisjZGVmaW5lCXZyMQkxCisjZGVmaW5lCXZyMgkyCisjZGVmaW5lCXZyMwkzCisjZGVmaW5lCXZyNAk0CisjZGVmaW5lCXZyNQk1CisjZGVmaW5lCXZyNgk2CisjZGVmaW5lCXZyNwk3CisjZGVmaW5lCXZyOAk4CisjZGVmaW5lCXZyOQk5CisjZGVmaW5lCXZyMTAJMTAKKyNkZWZpbmUJdnIxMQkxMQorI2RlZmluZQl2cjEyCTEyCisjZGVmaW5lCXZyMTMJMTMKKyNkZWZpbmUJdnIxNAkxNAorI2RlZmluZQl2cjE1CTE1CisjZGVmaW5lCXZyMTYJMTYKKyNkZWZpbmUJdnIxNwkxNworI2RlZmluZQl2cjE4CTE4CisjZGVmaW5lCXZyMTkJMTkKKyNkZWZpbmUJdnIyMAkyMAorI2RlZmluZQl2cjIxCTIxCisjZGVmaW5lCXZyMjIJMjIKKyNkZWZpbmUJdnIyMwkyMworI2RlZmluZQl2cjI0CTI0CisjZGVmaW5lCXZyMjUJMjUKKyNkZWZpbmUJdnIyNgkyNgorI2RlZmluZQl2cjI3CTI3CisjZGVmaW5lCXZyMjgJMjgKKyNkZWZpbmUJdnIyOQkyOQorI2RlZmluZQl2cjMwCTMwCisjZGVmaW5lCXZyMzEJMzEKKworI2RlZmluZQlldnIwCTAKKyNkZWZpbmUJZXZyMQkxCisjZGVmaW5lCWV2cjIJMgorI2RlZmluZQlldnIzCTMKKyNkZWZpbmUJZXZyNAk0CisjZGVmaW5lCWV2cjUJNQorI2RlZmluZQlldnI2CTYKKyNkZWZpbmUJZXZyNwk3CisjZGVmaW5lCWV2cjgJOAorI2RlZmluZQlldnI5CTkKKyNkZWZpbmUJZXZyMTAJMTAKKyNkZWZpbmUJZXZyMTEJMTEKKyNkZWZpbmUJZXZyMTIJMTIKKyNkZWZpbmUJZXZyMTMJMTMKKyNkZWZpbmUJZXZyMTQJMTQKKyNkZWZpbmUJZXZyMTUJMTUKKyNkZWZpbmUJZXZyMTYJMTYKKyNkZWZpbmUJZXZyMTcJMTcKKyNkZWZpbmUJZXZyMTgJMTgKKyNkZWZpbmUJZXZyMTkJMTkKKyNkZWZpbmUJZXZyMjAJMjAKKyNkZWZpbmUJZXZyMjEJMjEKKyNkZWZpbmUJZXZyMjIJMjIKKyNkZWZpbmUJZXZyMjMJMjMKKyNkZWZpbmUJZXZyMjQJMjQKKyNkZWZpbmUJZXZyMjUJMjUKKyNkZWZpbmUJZXZyMjYJMjYKKyNkZWZpbmUJZXZyMjcJMjcKKyNkZWZpbmUJZXZyMjgJMjgKKyNkZWZpbmUJZXZyMjkJMjkKKyNkZWZpbmUJZXZyMzAJMzAKKyNkZWZpbmUJZXZyMzEJMzEKKworLyogc29tZSBzdGFiIGNvZGVzICovCisjZGVmaW5lIE5fRlVOCTM2CisjZGVmaW5lIE5fUlNZTQk2NAorI2RlZmluZSBOX1NMSU5FCTY4CisjZGVmaW5lIE5fU08JMTAwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvcHBjX3N5cy5oIGIvaW5jbHVkZS9hc20tcHBjL3BwY19zeXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGI5OTFjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjL3BwY19zeXMuaApAQCAtMCwwICsxLDY5IEBACisvKgorICogaW5jbHVkZS9hc20tcHBjL3BwY19zeXMuaAorICoKKyAqIFBQQyBzeXN0ZW0gZGVmaW5pdGlvbnMgYW5kIGxpYnJhcnkgZnVuY3Rpb25zCisgKgorICogTWFpbnRhaW5lcjogS3VtYXIgR2FsYSA8a3VtYXIuZ2FsYUBmcmVlc2NhbGUuY29tPgorICoKKyAqIENvcHlyaWdodCAyMDA1IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaWZuZGVmIF9fQVNNX1BQQ19TWVNfSAorI2RlZmluZSBfX0FTTV9QUENfU1lTX0gKKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjaWYgZGVmaW5lZChDT05GSUdfODN4eCkKKyNpbmNsdWRlIDxhc20vbXBjODN4eC5oPgorI2VsaWYgZGVmaW5lZChDT05GSUdfODV4eCkKKyNpbmNsdWRlIDxhc20vbXBjODV4eC5oPgorI2VsaWYgZGVmaW5lZChDT05GSUdfUFBDX01QQzUyeHgpCisjaW5jbHVkZSA8YXNtL21wYzUyeHguaD4KKyNlbHNlCisjZXJyb3IgIm5lZWQgZGVmaW5pdGlvbiBvZiBwcGNfc3lzX2RldmljZXMiCisjZW5kaWYKKworc3RydWN0IHBwY19zeXNfc3BlYyB7CisJLyogUFBDIHN5cyBpcyBtYXRjaGVkIHZpYSAoSUQgJiBtYXNrKSA9PSB2YWx1ZSwgaWQgY291bGQgYmUKKwkgKiBQVlIsIFNWUiwgSU1NUiwgKiBldGMuICovCisJdTMyIAkJCW1hc2s7CisJdTMyIAkJCXZhbHVlOworCXUzMiAJCQludW1fZGV2aWNlczsKKwljaGFyIAkJCSpwcGNfc3lzX25hbWU7CisJZW51bSBwcGNfc3lzX2RldmljZXMgCSpkZXZpY2VfbGlzdDsKK307CisKKy8qIGRlc2NyaWJlcyBhbGwgc3BlY2lmaWMgY2hpcHMgYW5kIHdoaWNoIGRldmljZXMgdGhleSBoYXZlIG9uIHRoZW0gKi8KK2V4dGVybiBzdHJ1Y3QgcHBjX3N5c19zcGVjIHBwY19zeXNfc3BlY3NbXTsKK2V4dGVybiBzdHJ1Y3QgcHBjX3N5c19zcGVjICpjdXJfcHBjX3N5c19zcGVjOworCisvKiBkZXRlcm1pbmUgd2hpY2ggc3BlY2lmaWMgU09DIHdlIGFyZSAqLworZXh0ZXJuIHZvaWQgaWRlbnRpZnlfcHBjX3N5c19ieV9pZCh1MzIgaWQpIF9faW5pdDsKK2V4dGVybiB2b2lkIGlkZW50aWZ5X3BwY19zeXNfYnlfbmFtZShjaGFyICpuYW1lKSBfX2luaXQ7CisKKy8qIGRlc2NyaWJlcyBhbGwgZGV2aWNlcyB0aGF0IG1heSBleGlzdCBpbiBhIGdpdmVuIGZhbWlseSBvZiBwcm9jZXNzb3JzICovCitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBwcGNfc3lzX3BsYXRmb3JtX2RldmljZXNbXTsKKworLyogYWxsb3cgYW55IHBsYXRmb3JtX2RldmljZSBmaXh1cCB0byBvY2N1ciBiZWZvcmUgZGV2aWNlIGlzIHJlZ2lzdGVyZWQgKi8KK2V4dGVybiBpbnQgKCpwcGNfc3lzX2RldmljZV9maXh1cCkgKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKiBwZGV2KTsKKworLyogVXBkYXRlIGFsbCBtZW1vcnkgcmVzb3VyY2VzIGJ5IHBhZGRyLCBjYWxsIGJlZm9yZSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIgKi8KK2V4dGVybiB2b2lkIHBwY19zeXNfZml4dXBfbWVtX3Jlc291cmNlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCQkJICAgICAgIHBoeXNfYWRkcl90IHBhZGRyKSBfX2luaXQ7CisKKy8qIEdldCBwbGF0Zm9ybV9kYXRhIHBvaW50ZXIgb3V0IG9mIHBsYXRmb3JtIGRldmljZSwgY2FsbCBiZWZvcmUgcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyICovCitleHRlcm4gdm9pZCAqcHBjX3N5c19nZXRfcGRhdGEoZW51bSBwcGNfc3lzX2RldmljZXMgZGV2KSBfX2luaXQ7CisKKy8qIHJlbW92ZSBhIGRldmljZSBmcm9tIHRoZSBzeXN0ZW0gKi8KK2V4dGVybiB2b2lkIHBwY19zeXNfZGV2aWNlX3JlbW92ZShlbnVtIHBwY19zeXNfZGV2aWNlcyBkZXYpOworCisjZW5kaWYJCQkJLyogX19BU01fUFBDX1NZU19IICovCisjZW5kaWYJCQkJLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL3BwY2Jvb3QuaCBiL2luY2x1ZGUvYXNtLXBwYy9wcGNib290LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmUyNGU0NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9wcGNib290LmgKQEAgLTAsMCArMSwxMDAgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDEKKyAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2lmbmRlZiBfX0FTTV9QUENCT09UX0hfXworI2RlZmluZSBfX0FTTV9QUENCT09UX0hfXworCisvKgorICogQm9hcmQgaW5mb3JtYXRpb24gcGFzc2VkIHRvIGtlcm5lbCBmcm9tIFBQQ0Jvb3QKKyAqCisgKiBpbmNsdWRlL2FzbS1wcGMvcHBjYm9vdC5oCisgKi8KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCit0eXBlZGVmIHN0cnVjdCBiZF9pbmZvIHsKKwl1bnNpZ25lZCBsb25nCWJpX21lbXN0YXJ0OwkvKiBzdGFydCBvZiBEUkFNIG1lbW9yeSAqLworCXVuc2lnbmVkIGxvbmcJYmlfbWVtc2l6ZTsJLyogc2l6ZQkgb2YgRFJBTSBtZW1vcnkgaW4gYnl0ZXMgKi8KKwl1bnNpZ25lZCBsb25nCWJpX2ZsYXNoc3RhcnQ7CS8qIHN0YXJ0IG9mIEZMQVNIIG1lbW9yeSAqLworCXVuc2lnbmVkIGxvbmcJYmlfZmxhc2hzaXplOwkvKiBzaXplCSBvZiBGTEFTSCBtZW1vcnkgKi8KKwl1bnNpZ25lZCBsb25nCWJpX2ZsYXNob2Zmc2V0OyAvKiByZXNlcnZlZCBhcmVhIGZvciBzdGFydHVwIG1vbml0b3IgKi8KKwl1bnNpZ25lZCBsb25nCWJpX3NyYW1zdGFydDsJLyogc3RhcnQgb2YgU1JBTSBtZW1vcnkgKi8KKwl1bnNpZ25lZCBsb25nCWJpX3NyYW1zaXplOwkvKiBzaXplCSBvZiBTUkFNIG1lbW9yeSAqLworI2lmIGRlZmluZWQoQ09ORklHXzh4eCkgfHwgZGVmaW5lZChDT05GSUdfQ1BNMikgfHwgZGVmaW5lZChDT05GSUdfODV4eCkgfHxcCisJZGVmaW5lZChDT05GSUdfODN4eCkKKwl1bnNpZ25lZCBsb25nCWJpX2ltbXJfYmFzZTsJLyogYmFzZSBvZiBJTU1SIHJlZ2lzdGVyICovCisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19QUENfTVBDNTJ4eCkKKwl1bnNpZ25lZCBsb25nICAgYmlfbWJhcl9iYXNlOyAgIC8qIGJhc2Ugb2YgaW50ZXJuYWwgcmVnaXN0ZXJzICovCisjZW5kaWYKKwl1bnNpZ25lZCBsb25nCWJpX2Jvb3RmbGFnczsJLyogYm9vdCAvIHJlYm9vdCBmbGFnIChmb3IgTHlueE9TKSAqLworCXVuc2lnbmVkIGxvbmcJYmlfaXBfYWRkcjsJLyogSVAgQWRkcmVzcyAqLworCXVuc2lnbmVkIGNoYXIJYmlfZW5ldGFkZHJbNl07CS8qIEV0aGVybmV0IGFkZHJlc3MgKi8KKwl1bnNpZ25lZCBzaG9ydAliaV9ldGhzcGVlZDsJLyogRXRoZXJuZXQgc3BlZWQgaW4gTWJwcyAqLworCXVuc2lnbmVkIGxvbmcJYmlfaW50ZnJlcTsJLyogSW50ZXJuYWwgRnJlcSwgaW4gTUh6ICovCisJdW5zaWduZWQgbG9uZwliaV9idXNmcmVxOwkvKiBCdXMgRnJlcSwgaW4gTUh6ICovCisjaWYgZGVmaW5lZChDT05GSUdfQ1BNMikKKwl1bnNpZ25lZCBsb25nCWJpX2NwbWZyZXE7CS8qIENQTV9DTEsgRnJlcSwgaW4gTUh6ICovCisJdW5zaWduZWQgbG9uZwliaV9icmdmcmVxOwkvKiBCUkdfQ0xLIEZyZXEsIGluIE1IeiAqLworCXVuc2lnbmVkIGxvbmcJYmlfc2NjZnJlcTsJLyogU0NDX0NMSyBGcmVxLCBpbiBNSHogKi8KKwl1bnNpZ25lZCBsb25nCWJpX3ZjbzsJCS8qIFZDTyBPdXQgZnJvbSBQTEwsIGluIE1IeiAqLworI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfUFBDX01QQzUyeHgpCisJdW5zaWduZWQgbG9uZyAgIGJpX2lwYmZyZXE7ICAgICAvKiBJUEIgQnVzIEZyZXEsIGluIE1IeiAqLworCXVuc2lnbmVkIGxvbmcgICBiaV9wY2lmcmVxOyAgICAgLyogUENJIEJ1cyBGcmVxLCBpbiBNSHogKi8KKyNlbmRpZgorCXVuc2lnbmVkIGxvbmcJYmlfYmF1ZHJhdGU7CS8qIENvbnNvbGUgQmF1ZHJhdGUgKi8KKyNpZiBkZWZpbmVkKENPTkZJR180eHgpCisJdW5zaWduZWQgY2hhcgliaV9zX3ZlcnNpb25bNF07CS8qIFZlcnNpb24gb2YgdGhpcyBzdHJ1Y3R1cmUgKi8KKwl1bnNpZ25lZCBjaGFyCWJpX3JfdmVyc2lvblszMl07CS8qIFZlcnNpb24gb2YgdGhlIFJPTSAoSUJNKSAqLworCXVuc2lnbmVkIGludAliaV9wcm9jZnJlcTsJLyogQ1BVIChJbnRlcm5hbCkgRnJlcSwgaW4gSHogKi8KKwl1bnNpZ25lZCBpbnQJYmlfcGxiX2J1c2ZyZXE7CS8qIFBMQiBCdXMgc3BlZWQsIGluIEh6ICovCisJdW5zaWduZWQgaW50CWJpX3BjaV9idXNmcmVxOwkvKiBQQ0kgQnVzIHNwZWVkLCBpbiBIeiAqLworCXVuc2lnbmVkIGNoYXIJYmlfcGNpX2VuZXRhZGRyWzZdOwkvKiBQQ0kgRXRoZXJuZXQgTUFDIGFkZHJlc3MgKi8KKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX0hZTU9EKQorCWh5bW9kX2NvbmZfdAliaV9oeW1vZF9jb25mOwkvKiBoeW1vZCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uICovCisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19FVkI2NDI2MCkgfHwgZGVmaW5lZChDT05GSUdfNDR4KSB8fCBkZWZpbmVkKENPTkZJR184NXh4KSB8fFwKKwlkZWZpbmVkKENPTkZJR184M3h4KQorCS8qIHNlY29uZCBvbmJvYXJkIGV0aGVybmV0IHBvcnQgKi8KKwl1bnNpZ25lZCBjaGFyCWJpX2VuZXQxYWRkcls2XTsKKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX0VWQjY0MjYwKSB8fCBkZWZpbmVkKENPTkZJR180NDBHWCkgfHwgZGVmaW5lZChDT05GSUdfODV4eCkKKwkvKiB0aGlyZCBvbmJvYXJkIGV0aGVybmV0IHBvcnRzICovCisJdW5zaWduZWQgY2hhcgliaV9lbmV0MmFkZHJbNl07CisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR180NDBHWCkKKwkvKiBmb3VydGggb25ib2FyZCBldGhlcm5ldCBwb3J0cyAqLworCXVuc2lnbmVkIGNoYXIJYmlfZW5ldDNhZGRyWzZdOworI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfNHh4KQorCXVuc2lnbmVkIGludAliaV9vcGJmcmVxOwkJLyogT0IgY2xvY2sgaW4gSHogKi8KKwlpbnQJCWJpX2lpY19mYXN0WzJdOwkJLyogVXNlIGZhc3QgaTJjIG1vZGUgKi8KKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHXzQ0MEdYKQorCWludAkJYmlfcGh5bnVtWzRdOwkJLyogcGh5IG1hcHBpbmcgKi8KKwlpbnQJCWJpX3BoeW1vZGVbNF07CQkvKiBwaHkgbW9kZSAqLworI2VuZGlmCit9IGJkX3Q7CisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKyNlbmRpZgkvKiBfX0FTTV9QUENCT09UX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL3ByZXBfbnZyYW0uaCBiL2luY2x1ZGUvYXNtLXBwYy9wcmVwX252cmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRiYzM2YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9wcmVwX252cmFtLmgKQEAgLTAsMCArMSwxNTMgQEAKKy8qCisgKiBQcmVQIGNvbXBsaWFudCBOVlJBTSBhY2Nlc3MKKyAqLworCisvKiBDb3JleSBNaW55YXJkIChtaW55YXJkQGFjbS5vcmcpIC0gU3RvbGVuIGZyb20gUFJlUCBib29rLiAgIFBlciB0aGUKKyAgIGxpY2Vuc2UgSSBtdXN0IHNheToKKyAgICAgKEMpIENvcHlyaWdodCAoQ29yZXkgTWlueWFyZCksICgxOTk4KS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqLworCisvKiBTdHJ1Y3R1cmUgbWFwIGZvciBOVlJBTSBvbiBQb3dlclBDIFJlZmVyZW5jZSBQbGF0Zm9ybSAqLworLyogQWxsIGZpZWxkcyBhcmUgZWl0aGVyIGNoYXJhY3Rlci9ieXRlIHN0cmluZ3Mgd2hpY2ggYXJlIHZhbGlkIGVpdGhlcgorICBlbmRpYW4gb3IgdGhleSBhcmUgYmlnLWVuZGlhbiBudW1iZXJzLgorCisgIFRoZXJlIGFyZSBhIG51bWJlciBvZiBEYXRlIGFuZCBUaW1lIGZpZWxkcyB3aGljaCBhcmUgaW4gUlRDIGZvcm1hdCwKKyAgYmlnLWVuZGlhbi4gVGhlc2UgYXJlIHN0b3JlZCBpbiBVVCAoR01UKS4KKworICBGb3IgZW51bSdzOiBpZiBnaXZlbiBpbiBoZXggdGhlbiB0aGV5IGFyZSBiaXQgc2lnbmlmaWNhbnQsIGkuZS4gb25seQorICBvbmUgYml0IGlzIG9uIGZvciBlYWNoIGVudW0uCisqLworI2lmZGVmIF9fS0VSTkVMX18KKyNpZm5kZWYgX1BQQ19QUkVQX05WUkFNX0gKKyNkZWZpbmUgX1BQQ19QUkVQX05WUkFNX0gKKworI2RlZmluZSBNQVhfUFJFUF9OVlJBTSAweDgwMDAKKyNkZWZpbmUgUFJFUF9OVlJBTV9BUzAJMHg3NAorI2RlZmluZSBQUkVQX05WUkFNX0FTMQkweDc1CisjZGVmaW5lIFBSRVBfTlZSQU1fREFUQQkweDc3CisKKyNkZWZpbmUgTlZTSVpFIDQwOTYJLyogc2l6ZSBvZiBOVlJBTSAqLworI2RlZmluZSBPU0FSRUFTSVpFIDUxMgkvKiBzaXplIG9mIE9TQXJlYSBzcGFjZSAqLworI2RlZmluZSBDT05GU0laRSAxMDI0CS8qIGd1ZXNzIGF0IHNpemUgb2YgQ29uZmlndXJhdGlvbiBzcGFjZSAqLworCit0eXBlZGVmIHN0cnVjdCBfU0VDVVJJVFkgeworICB1bnNpZ25lZCBsb25nIEJvb3RFcnJDbnQ7CSAgICAvKiBDb3VudCBvZiBib290IHBhc3N3b3JkIGVycm9ycyAqLworICB1bnNpZ25lZCBsb25nIENvbmZpZ0VyckNudDsJICAgIC8qIENvdW50IG9mIGNvbmZpZyBwYXNzd29yZCBlcnJvcnMgKi8KKyAgdW5zaWduZWQgbG9uZyBCb290RXJyb3JEVFsyXTsJICAgIC8qIERhdGUmVGltZSBmcm9tIFJUQyBvZiBsYXN0IGVycm9yIGluIHB3ICovCisgIHVuc2lnbmVkIGxvbmcgQ29uZmlnRXJyb3JEVFsyXTsgICAvKiBEYXRlJlRpbWUgZnJvbSBSVEMgb2YgbGFzdCBlcnJvciBpbiBwdyAqLworICB1bnNpZ25lZCBsb25nIEJvb3RDb3JyZWN0RFRbMl07ICAgLyogRGF0ZSZUaW1lIGZyb20gUlRDIG9mIGxhc3QgY29ycmVjdCBwdyAqLworICB1bnNpZ25lZCBsb25nIENvbmZpZ0NvcnJlY3REVFsyXTsgLyogRGF0ZSZUaW1lIGZyb20gUlRDIG9mIGxhc3QgY29ycmVjdCBwdyAqLworICB1bnNpZ25lZCBsb25nIEJvb3RTZXREVFsyXTsJICAgIC8qIERhdGUmVGltZSBmcm9tIFJUQyBvZiBsYXN0IHNldCBvZiBwdyAqLworICB1bnNpZ25lZCBsb25nIENvbmZpZ1NldERUWzJdOwkgICAgLyogRGF0ZSZUaW1lIGZyb20gUlRDIG9mIGxhc3Qgc2V0IG9mIHB3ICovCisgIHVuc2lnbmVkIGNoYXIgU2VyaWFsWzE2XTsJICAgIC8qIEJveCBzZXJpYWwgbnVtYmVyICovCit9IFNFQ1VSSVRZOworCit0eXBlZGVmIGVudW0gX09TX0lEIHsKKyAgVW5rbm93biA9IDAsCisgIEZpcm13YXJlID0gMSwKKyAgQUlYID0gMiwKKyAgTlQgPSAzLAorICBNS09TMiA9IDQsCisgIE1LQUlYID0gNSwKKyAgVGFsaWdlbnQgPSA2LAorICBTb2xhcmlzID0gNywKKyAgTUsgPSAxMgorfSBPU19JRDsKKwordHlwZWRlZiBzdHJ1Y3QgX0VSUk9SX0xPRyB7CisgIHVuc2lnbmVkIGNoYXIgRXJyb3JMb2dFbnRyeVs0MF07IC8qIFRvIGJlIGFyY2hpdGVjdGVkICovCit9IEVSUk9SX0xPRzsKKwordHlwZWRlZiBlbnVtIF9CT09UX1NUQVRVUyB7CisgIEJvb3RTdGFydGVkID0gMHgwMSwKKyAgQm9vdEZpbmlzaGVkID0gMHgwMiwKKyAgUmVzdGFydFN0YXJ0ZWQgPSAweDA0LAorICBSZXN0YXJ0RmluaXNoZWQgPSAweDA4LAorICBQb3dlckZhaWxTdGFydGVkID0gMHgxMCwKKyAgUG93ZXJGYWlsRmluaXNoZWQgPSAweDIwLAorICBQcm9jZXNzb3JSZWFkeSA9IDB4NDAsCisgIFByb2Nlc3NvclJ1bm5pbmcgPSAweDgwLAorICBQcm9jZXNzb3JTdGFydCA9IDB4MDEwMAorfSBCT09UX1NUQVRVUzsKKwordHlwZWRlZiBzdHJ1Y3QgX1JFU1RBUlRfQkxPQ0sgeworICB1bnNpZ25lZCBzaG9ydCBWZXJzaW9uOworICB1bnNpZ25lZCBzaG9ydCBSZXZpc2lvbjsKKyAgdW5zaWduZWQgbG9uZyBSZXN1bWVSZXNlcnZlMVsyXTsKKyAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBCb290U3RhdHVzOworICB1bnNpZ25lZCBsb25nIENoZWNrU3VtOyAvKiBDaGVja3N1bSBvZiBSRVNUQVJUX0JMT0NLICovCisgIHZvaWQgKiBSZXN0YXJ0QWRkcmVzczsKKyAgdm9pZCAqIFNhdmVBcmVhQWRkcjsKKyAgdW5zaWduZWQgbG9uZyBTYXZlQXJlYUxlbmd0aDsKK30gUkVTVEFSVF9CTE9DSzsKKwordHlwZWRlZiBlbnVtIF9PU0FSRUFfVVNBR0UgeworICBFbXB0eSA9IDAsCisgIFVzZWQgPSAxCit9IE9TQVJFQV9VU0FHRTsKKwordHlwZWRlZiBlbnVtIF9QTV9NT0RFIHsKKyAgU3VzcGVuZCA9IDB4ODAsIC8qIFBhcnQgb2Ygc3RhdGUgaXMgaW4gbWVtb3J5ICovCisgIE5vcm1hbCA9IDB4MDAgICAvKiBObyBwb3dlciBtYW5hZ2VtZW50IGluIGVmZmVjdCAqLworfSBQTU1PREU7CisKK3R5cGVkZWYgc3RydWN0IF9IRUFERVIgeworICB1bnNpZ25lZCBzaG9ydCBTaXplOyAgICAgICAvKiBOVlJBTSBzaXplIGluIEsoMTAyNCkgKi8KKyAgdW5zaWduZWQgY2hhciBWZXJzaW9uOyAgICAgLyogU3RydWN0dXJlIG1hcCBkaWZmZXJlbnQgKi8KKyAgdW5zaWduZWQgY2hhciBSZXZpc2lvbjsgICAgLyogU3RydWN0dXJlIG1hcCB0aGUgc2FtZSAtbWF5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlIG5ldyB2YWx1ZXMgaW4gb2xkIGZpZWxkcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBvdGhlciB3b3JkcyBvbGQgY29kZSBzdGlsbCB3b3JrcyAqLworICB1bnNpZ25lZCBzaG9ydCBDcmMxOyAgICAgICAvKiBjaGVjayBzdW0gZnJvbSBiZWdpbm5pbmcgb2YgbnZyYW0gdG8gT1NBcmVhICovCisgIHVuc2lnbmVkIHNob3J0IENyYzI7ICAgICAgIC8qIGNoZWNrIHN1bSBvZiBjb25maWcgKi8KKyAgdW5zaWduZWQgY2hhciBMYXN0T1M7ICAgICAgLyogT1NfSUQgKi8KKyAgdW5zaWduZWQgY2hhciBFbmRpYW47ICAgICAgLyogQiBpZiBiaWcgZW5kaWFuLCBMIGlmIGxpdHRsZSBlbmRpYW4gKi8KKyAgdW5zaWduZWQgY2hhciBPU0FyZWFVc2FnZTsgLyogT1NBUkVBX1VTQUdFICovCisgIHVuc2lnbmVkIGNoYXIgUE1Nb2RlOyAgICAgIC8qIFNodXRkb3duIG1vZGUgKi8KKyAgUkVTVEFSVF9CTE9DSyBSZXN0YXJ0QmxvY2s7CisgIFNFQ1VSSVRZIFNlY3VyaXR5OworICBFUlJPUl9MT0cgRXJyb3JMb2dbMl07CisKKyAgLyogR2xvYmFsIEVudmlyb25tZW50IGluZm9ybWF0aW9uICovCisgIHZvaWQgKiBHRUFkZHJlc3M7CisgIHVuc2lnbmVkIGxvbmcgR0VMZW5ndGg7CisKKyAgLyogRGF0ZSZUaW1lIGZyb20gUlRDIG9mIGxhc3QgY2hhbmdlIHRvIEdsb2JhbCBFbnZpcm9ubWVudCAqLworICB1bnNpZ25lZCBsb25nIEdFTGFzdFdyaXRlRFRbMl07CisKKyAgLyogQ29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiAqLworICB2b2lkICogQ29uZmlnQWRkcmVzczsKKyAgdW5zaWduZWQgbG9uZyBDb25maWdMZW5ndGg7CisKKyAgLyogRGF0ZSZUaW1lIGZyb20gUlRDIG9mIGxhc3QgY2hhbmdlIHRvIENvbmZpZ3VyYXRpb24gKi8KKyAgdW5zaWduZWQgbG9uZyBDb25maWdMYXN0V3JpdGVEVFsyXTsKKyAgdW5zaWduZWQgbG9uZyBDb25maWdDb3VudDsgLyogQ291bnQgb2YgZW50cmllcyBpbiBDb25maWd1cmF0aW9uICovCisKKyAgLyogT1MgZGVwZW5kZW50IHRlbXAgYXJlYSAqLworICB2b2lkICogT1NBcmVhQWRkcmVzczsKKyAgdW5zaWduZWQgbG9uZyBPU0FyZWFMZW5ndGg7CisKKyAgLyogRGF0ZSZUaW1lIGZyb20gUlRDIG9mIGxhc3QgY2hhbmdlIHRvIE9TQXJlYUFyZWEgKi8KKyAgdW5zaWduZWQgbG9uZyBPU0FyZWFMYXN0V3JpdGVEVFsyXTsKK30gSEVBREVSOworCisvKiBIZXJlIGlzIHRoZSB3aG9sZSBtYXAgb2YgdGhlIE5WUkFNICovCit0eXBlZGVmIHN0cnVjdCBfTlZSQU1fTUFQIHsKKyAgSEVBREVSIEhlYWRlcjsKKyAgdW5zaWduZWQgY2hhciBHRUFyZWFbTlZTSVpFLUNPTkZTSVpFLU9TQVJFQVNJWkUtc2l6ZW9mKEhFQURFUildOworICB1bnNpZ25lZCBjaGFyIE9TQXJlYVtPU0FSRUFTSVpFXTsKKyAgdW5zaWduZWQgY2hhciBDb25maWdBcmVhW0NPTkZTSVpFXTsKK30gTlZSQU1fTUFQOworCisvKiBSb3V0aW5lcyB0byBtYW5pcHVsYXRlIHRoZSBOVlJBTSAqLwordm9pZCBpbml0X3ByZXBfbnZyYW0odm9pZCk7CitjaGFyICpwcmVwX252cmFtX2dldF92YXIoY29uc3QgY2hhciAqbmFtZSk7CitjaGFyICpwcmVwX252cmFtX2ZpcnN0X3Zhcih2b2lkKTsKK2NoYXIgKnByZXBfbnZyYW1fbmV4dF92YXIoY2hhciAqbmFtZSk7CisKKy8qIFJvdXRpbmVzIHRvIHJlYWQgYW5kIHdyaXRlIGRpcmVjdGx5IHRvIHRoZSBOVlJBTSAqLwordW5zaWduZWQgY2hhciBwcmVwX252cmFtX3JlYWRfdmFsKGludCBhZGRyKTsKK3ZvaWQgcHJlcF9udnJhbV93cml0ZV92YWwoaW50ICAgICAgICAgICBhZGRyLAorCQkJICB1bnNpZ25lZCBjaGFyIHZhbCk7CisKKyNlbmRpZiAvKiBfUFBDX1BSRVBfTlZSQU1fSCAqLworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9wcm9jZXNzb3IuaCBiL2luY2x1ZGUvYXNtLXBwYy9wcm9jZXNzb3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDViNWQ5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjL3Byb2Nlc3Nvci5oCkBAIC0wLDAgKzEsMjAxIEBACisjaWZkZWYgX19LRVJORUxfXworI2lmbmRlZiBfX0FTTV9QUENfUFJPQ0VTU09SX0gKKyNkZWZpbmUgX19BU01fUFBDX1BST0NFU1NPUl9ICisKKy8qCisgKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIG1hY3JvIHRoYXQgcmV0dXJucyBjdXJyZW50CisgKiBpbnN0cnVjdGlvbiBwb2ludGVyICgicHJvZ3JhbSBjb3VudGVyIikuCisgKi8KKyNkZWZpbmUgY3VycmVudF90ZXh0X2FkZHIoKSAoeyBfX2xhYmVsX18gX2w7IF9sOiAmJl9sO30pCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KKworI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbXBjOHh4Lmg+CisjaW5jbHVkZSA8YXNtL3JlZy5oPgorCisvKiBXZSBvbmx5IG5lZWQgdG8gZGVmaW5lIGEgbmV3IF9NQUNIX3h4eCBmb3IgbWFjaGluZXMgd2hpY2ggYXJlIHBhcnQgb2YKKyAqIGEgY29uZmlndXJhdGlvbiB3aGljaCBzdXBwb3J0cyBtb3JlIHRoYW4gb25lIHR5cGUgb2YgZGlmZmVyZW50IG1hY2hpbmUuCisgKiBUaGlzIGlzIGN1cnJlbnRseSBsaW1pdGVkIHRvIENPTkZJR19QUENfTVVMVElQTEFURk9STSBhbmQgQ0hSUC9QUmVQL1BNYWMuCisgKiAtLSBUb20KKyAqLworI2RlZmluZSBfTUFDSF9wcmVwCTB4MDAwMDAwMDEKKyNkZWZpbmUgX01BQ0hfUG1hYwkweDAwMDAwMDAyCS8qIHBtYWMgb3IgcG1hYyBjbG9uZSAobm9uLWNocnApICovCisjZGVmaW5lIF9NQUNIX2NocnAJMHgwMDAwMDAwNAkvKiBjaHJwIG1hY2hpbmUgKi8KKworLyogc2VlIHJlc2lkdWFsLmggZm9yIHRoZXNlICovCisjZGVmaW5lIF9QUkVQX01vdG9yb2xhCTB4MDEJLyogbW90b3JvbGEgcHJlcCAqLworI2RlZmluZSBfUFJFUF9GaXJtCTB4MDIJLyogZmlybXdvcmtzIHByZXAgKi8KKyNkZWZpbmUgX1BSRVBfSUJNCTB4MDAJLyogaWJtIHByZXAgKi8KKyNkZWZpbmUgX1BSRVBfQnVsbAkweDAzCS8qIGJ1bGwgcHJlcCAqLworCisvKiB0aGVzZSBhcmUgYXJiaXRyYXJ5ICovCisjZGVmaW5lIF9DSFJQX01vdG9yb2xhCTB4MDQJLyogbW90b3JvbGEgY2hycCwgdGhlIGNvYnJhICovCisjZGVmaW5lIF9DSFJQX0lCTQkweDA1CS8qIElCTSBjaHJwLCB0aGUgbG9uZ3RyYWlsIGFuZCBsb25ndHJhaWwgMiAqLworI2RlZmluZSBfQ0hSUF9QZWdhc29zCTB4MDYJLyogR2VuZXNpL2JwbGFuJ3MgUGVnYXNvcyBhbmQgUGVnYXNvczIgKi8KKworI2RlZmluZSBfR0xPQkFMKG4pXAorCS5zdGFicyBfX3N0cmluZ2lmeShuOkYtMSksTl9GVU4sMCwwLG47XAorCS5nbG9ibCBuO1wKK246CisKKy8qCisgKiB0aGlzIGlzIHRoZSBtaW5pbXVtIGFsbG93YWJsZSBpbyBzcGFjZSBkdWUgdG8gdGhlIGxvY2F0aW9uCisgKiBvZiB0aGUgaW8gYXJlYXMgb24gcHJlcCAoZmlyc3Qgb25lIGF0IDB4ODAwMDAwMDApIGJ1dAorICogYXMgc29vbiBhcyBJIGdldCBhcm91bmQgdG8gcmVtYXBwaW5nIHRoZSBpbyBhcmVhcyB3aXRoIHRoZSBCQVRzCisgKiB0byBtYXRjaCB0aGUgbWFjIHdlIGNhbiByYWlzZSB0aGlzLiAtLSBDb3J0CisgKi8KKyNkZWZpbmUgVEFTS19TSVpFCShDT05GSUdfVEFTS19TSVpFKQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2lmZGVmIENPTkZJR19QUENfTVVMVElQTEFURk9STQorZXh0ZXJuIGludCBfbWFjaGluZTsKKworLyogd2hhdCBraW5kIG9mIHByZXAgd29ya3N0YXRpb24gd2UgYXJlICovCitleHRlcm4gaW50IF9wcmVwX3R5cGU7CitleHRlcm4gaW50IF9jaHJwX3R5cGU7CisKKy8qCisgKiBUaGlzIGlzIHVzZWQgdG8gaWRlbnRpZnkgdGhlIGJvYXJkIHR5cGUgZnJvbSBhIGdpdmVuIFBSZVAgYm9hcmQKKyAqIHZlbmRvci4gQm9hcmQgcmV2aXNpb24gaXMgYWxzbyBtYWRlIGF2YWlsYWJsZS4KKyAqLworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgdWNTeXN0ZW1UeXBlOworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgdWNCb2FyZFJldjsKK2V4dGVybiB1bnNpZ25lZCBjaGFyIHVjQm9hcmRSZXZNYWosIHVjQm9hcmRSZXZNaW47CisjZWxzZQorI2RlZmluZSBfbWFjaGluZSAwCisjZW5kaWYgLyogQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNICovCisKK3N0cnVjdCB0YXNrX3N0cnVjdDsKK3ZvaWQgc3RhcnRfdGhyZWFkKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIG5pcCwgdW5zaWduZWQgbG9uZyBzcCk7Cit2b2lkIHJlbGVhc2VfdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKKworLyogUHJlcGFyZSB0byBjb3B5IHRocmVhZCBzdGF0ZSAtIHVubGF6eSBhbGwgbGF6eSBzdGF0dXMgKi8KK2V4dGVybiB2b2lkIHByZXBhcmVfdG9fY29weShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7CisKKy8qCisgKiBDcmVhdGUgYSBuZXcga2VybmVsIHRocmVhZC4KKyAqLworZXh0ZXJuIGxvbmcga2VybmVsX3RocmVhZChpbnQgKCpmbikodm9pZCAqKSwgdm9pZCAqYXJnLCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKKworLyogTGF6eSBGUFUgaGFuZGxpbmcgb24gdW5pLXByb2Nlc3NvciAqLworZXh0ZXJuIHN0cnVjdCB0YXNrX3N0cnVjdCAqbGFzdF90YXNrX3VzZWRfbWF0aDsKK2V4dGVybiBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmxhc3RfdGFza191c2VkX2FsdGl2ZWM7CitleHRlcm4gc3RydWN0IHRhc2tfc3RydWN0ICpsYXN0X3Rhc2tfdXNlZF9zcGU7CisKKy8qIFRoaXMgZGVjaWRlcyB3aGVyZSB0aGUga2VybmVsIHdpbGwgc2VhcmNoIGZvciBhIGZyZWUgY2h1bmsgb2Ygdm0KKyAqIHNwYWNlIGR1cmluZyBtbWFwJ3MuCisgKi8KKyNkZWZpbmUgVEFTS19VTk1BUFBFRF9CQVNFCShUQVNLX1NJWkUgLyA4ICogMykKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcgc2VnOworfSBtbV9zZWdtZW50X3Q7CisKK3N0cnVjdCB0aHJlYWRfc3RydWN0IHsKKwl1bnNpZ25lZCBsb25nCWtzcDsJCS8qIEtlcm5lbCBzdGFjayBwb2ludGVyICovCisJc3RydWN0IHB0X3JlZ3MJKnJlZ3M7CQkvKiBQb2ludGVyIHRvIHNhdmVkIHJlZ2lzdGVyIHN0YXRlICovCisJbW1fc2VnbWVudF90CWZzOwkJLyogZm9yIGdldF9mcygpIHZhbGlkYXRpb24gKi8KKwl2b2lkCQkqcGdkaXI7CQkvKiByb290IG9mIHBhZ2UtdGFibGUgdHJlZSAqLworCWludAkJZnBleGNfbW9kZTsJLyogZmxvYXRpbmctcG9pbnQgZXhjZXB0aW9uIG1vZGUgKi8KKwlzaWduZWQgbG9uZwlsYXN0X3N5c2NhbGw7CisjaWYgZGVmaW5lZChDT05GSUdfNHh4KSB8fCBkZWZpbmVkIChDT05GSUdfQk9PS0UpCisJdW5zaWduZWQgbG9uZwlkYmNyMDsJCS8qIGRlYnVnIGNvbnRyb2wgcmVnaXN0ZXIgdmFsdWVzICovCisJdW5zaWduZWQgbG9uZwlkYmNyMTsKKyNlbmRpZgorCWRvdWJsZQkJZnByWzMyXTsJLyogQ29tcGxldGUgZmxvYXRpbmcgcG9pbnQgc2V0ICovCisJdW5zaWduZWQgbG9uZwlmcHNjcl9wYWQ7CS8qIGZwciAuLi4gZnBzY3IgbXVzdCBiZSBjb250aWd1b3VzICovCisJdW5zaWduZWQgbG9uZwlmcHNjcjsJCS8qIEZsb2F0aW5nIHBvaW50IHN0YXR1cyAqLworI2lmZGVmIENPTkZJR19BTFRJVkVDCisJLyogQ29tcGxldGUgQWx0aVZlYyByZWdpc3RlciBzZXQgKi8KKwl2ZWN0b3IxMjgJdnJbMzJdIF9fYXR0cmlidXRlKChhbGlnbmVkKDE2KSkpOworCS8qIEFsdGlWZWMgc3RhdHVzICovCisJdmVjdG9yMTI4CXZzY3IgX19hdHRyaWJ1dGUoKGFsaWduZWQoMTYpKSk7CisJdW5zaWduZWQgbG9uZwl2cnNhdmU7CisJaW50CQl1c2VkX3ZyOwkvKiBzZXQgaWYgcHJvY2VzcyBoYXMgdXNlZCBhbHRpdmVjICovCisjZW5kaWYgLyogQ09ORklHX0FMVElWRUMgKi8KKyNpZmRlZiBDT05GSUdfU1BFCisJdW5zaWduZWQgbG9uZwlldnJbMzJdOwkvKiB1cHBlciAzMi1iaXRzIG9mIFNQRSByZWdzICovCisJdTY0CQlhY2M7CQkvKiBBY2N1bXVsYXRvciAqLworCXVuc2lnbmVkIGxvbmcJc3BlZnNjcjsJLyogU1BFICYgZUZQIHN0YXR1cyAqLworCWludAkJdXNlZF9zcGU7CS8qIHNldCBpZiBwcm9jZXNzIGhhcyB1c2VkIHNwZSAqLworI2VuZGlmIC8qIENPTkZJR19TUEUgKi8KK307CisKKyNkZWZpbmUgQVJDSF9NSU5fVEFTS0FMSUdOIDE2CisKKyNkZWZpbmUgSU5JVF9TUAkJKHNpemVvZihpbml0X3N0YWNrKSArICh1bnNpZ25lZCBsb25nKSAmaW5pdF9zdGFjaykKKworI2RlZmluZSBJTklUX1RIUkVBRCB7IFwKKwkua3NwID0gSU5JVF9TUCwgXAorCS5mcyA9IEtFUk5FTF9EUywgXAorCS5wZ2RpciA9IHN3YXBwZXJfcGdfZGlyLCBcCisJLmZwZXhjX21vZGUgPSBNU1JfRkUwIHwgTVNSX0ZFMSwgXAorfQorCisvKgorICogUmV0dXJuIHNhdmVkIFBDIG9mIGEgYmxvY2tlZCB0aHJlYWQuIEZvciBub3csIHRoaXMgaXMgdGhlICJ1c2VyIiBQQworICovCisjZGVmaW5lIHRocmVhZF9zYXZlZF9wYyh0c2spCVwKKwkoKHRzayktPnRocmVhZC5yZWdzPyAodHNrKS0+dGhyZWFkLnJlZ3MtPm5pcDogMCkKKwordW5zaWduZWQgbG9uZyBnZXRfd2NoYW4oc3RydWN0IHRhc2tfc3RydWN0ICpwKTsKKworI2RlZmluZSBLU1RLX0VJUCh0c2spCSgodHNrKS0+dGhyZWFkLnJlZ3M/ICh0c2spLT50aHJlYWQucmVncy0+bmlwOiAwKQorI2RlZmluZSBLU1RLX0VTUCh0c2spCSgodHNrKS0+dGhyZWFkLnJlZ3M/ICh0c2spLT50aHJlYWQucmVncy0+Z3ByWzFdOiAwKQorCisvKiBHZXQvc2V0IGZsb2F0aW5nLXBvaW50IGV4Y2VwdGlvbiBtb2RlICovCisjZGVmaW5lIEdFVF9GUEVYQ19DVEwodHNrLCBhZHIpCWdldF9mcGV4Y19tb2RlKCh0c2spLCAoYWRyKSkKKyNkZWZpbmUgU0VUX0ZQRVhDX0NUTCh0c2ssIHZhbCkJc2V0X2ZwZXhjX21vZGUoKHRzayksICh2YWwpKQorCitleHRlcm4gaW50IGdldF9mcGV4Y19tb2RlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkcik7CitleHRlcm4gaW50IHNldF9mcGV4Y19tb2RlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBpbnQgdmFsKTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgX191bnBhY2tfZmUwMSh1bnNpZ25lZCBpbnQgbXNyX2JpdHMpCit7CisJcmV0dXJuICgobXNyX2JpdHMgJiBNU1JfRkUwKSA+PiAxMCkgfCAoKG1zcl9iaXRzICYgTVNSX0ZFMSkgPj4gOCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IF9fcGFja19mZTAxKHVuc2lnbmVkIGludCBmcG1vZGUpCit7CisJcmV0dXJuICgoZnBtb2RlIDw8IDEwKSAmIE1TUl9GRTApIHwgKChmcG1vZGUgPDwgOCkgJiBNU1JfRkUxKTsKK30KKworLyogaW4gcHJvY2Vzcy5jIC0gZm9yIGVhcmx5IGJvb3R1cCBkZWJ1ZyAtLSBDb3J0ICovCitpbnQgbGxfcHJpbnRrKGNvbnN0IGNoYXIgKiwgLi4uKTsKK3ZvaWQgbGxfcHV0cyhjb25zdCBjaGFyICopOworCisvKiBJbiBtaXNjLmMgKi8KK3ZvaWQgX25tYXNrX2FuZF9vcl9tc3IodW5zaWduZWQgbG9uZyBubWFzaywgdW5zaWduZWQgbG9uZyBvcl92YWwpOworCisjZGVmaW5lIGhhdmVfb2YgKF9tYWNoaW5lID09IF9NQUNIX2NocnAgfHwgX21hY2hpbmUgPT0gX01BQ0hfUG1hYykKKworI2RlZmluZSBjcHVfcmVsYXgoKQliYXJyaWVyKCkKKworLyoKKyAqIFByZWZldGNoIG1hY3Jvcy4KKyAqLworI2RlZmluZSBBUkNIX0hBU19QUkVGRVRDSAorI2RlZmluZSBBUkNIX0hBU19QUkVGRVRDSFcKKyNkZWZpbmUgQVJDSF9IQVNfU1BJTkxPQ0tfUFJFRkVUQ0gKKworZXh0ZXJuIGlubGluZSB2b2lkIHByZWZldGNoKGNvbnN0IHZvaWQgKngpCit7CisJIF9fYXNtX18gX192b2xhdGlsZV9fICgiZGNidCAwLCUwIiA6IDogInIiICh4KSk7Cit9CisKK2V4dGVybiBpbmxpbmUgdm9pZCBwcmVmZXRjaHcoY29uc3Qgdm9pZCAqeCkKK3sKKwkgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJkY2J0c3QgMCwlMCIgOiA6ICJyIiAoeCkpOworfQorCisjZGVmaW5lIHNwaW5fbG9ja19wcmVmZXRjaCh4KQlwcmVmZXRjaHcoeCkKKworZXh0ZXJuIGludCBlbXVsYXRlX2FsdGl2ZWMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYgLyogX19BU01fUFBDX1BST0NFU1NPUl9IICovCisjZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL3Byb20uaCBiL2luY2x1ZGUvYXNtLXBwYy9wcm9tLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYzOTRjNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9wcm9tLmgKQEAgLTAsMCArMSwxNDMgQEAKKy8qCisgKiBEZWZpbml0aW9ucyBmb3IgdGFsa2luZyB0byB0aGUgT3BlbiBGaXJtd2FyZSBQUk9NIG9uCisgKiBQb3dlciBNYWNpbnRvc2ggY29tcHV0ZXJzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NiBQYXVsIE1hY2tlcnJhcy4KKyAqLworI2lmZGVmIF9fS0VSTkVMX18KKyNpZm5kZWYgX1BQQ19QUk9NX0gKKyNkZWZpbmUgX1BQQ19QUk9NX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3R5cGVkZWYgdTMyIHBoYW5kbGU7Cit0eXBlZGVmIHUzMiBpaGFuZGxlOworCitleHRlcm4gY2hhciAqcHJvbV9kaXNwbGF5X3BhdGhzW107CitleHRlcm4gdW5zaWduZWQgaW50IHByb21fbnVtX2Rpc3BsYXlzOworCitzdHJ1Y3QgYWRkcmVzc19yYW5nZSB7CisJdW5zaWduZWQgaW50IHNwYWNlOworCXVuc2lnbmVkIGludCBhZGRyZXNzOworCXVuc2lnbmVkIGludCBzaXplOworfTsKKworc3RydWN0IGludGVycnVwdF9pbmZvIHsKKwlpbnQJbGluZTsKKwlpbnQJc2Vuc2U7CQkvKiArdmUvLXZlIGxvZ2ljLCBlZGdlIG9yIGxldmVsLCBldGMuICovCit9OworCitzdHJ1Y3QgcmVnX3Byb3BlcnR5IHsKKwl1bnNpZ25lZCBpbnQgYWRkcmVzczsKKwl1bnNpZ25lZCBpbnQgc2l6ZTsKK307CisKK3N0cnVjdCBwcm9wZXJ0eSB7CisJY2hhcgkqbmFtZTsKKwlpbnQJbGVuZ3RoOworCXVuc2lnbmVkIGNoYXIgKnZhbHVlOworCXN0cnVjdCBwcm9wZXJ0eSAqbmV4dDsKK307CisKKy8qCisgKiBOb3RlOiBkb24ndCBjaGFuZ2UgdGhpcyBzdHJ1Y3R1cmUgZm9yIG5vdyBvciB5b3UnbGwgYnJlYWsgQm9vdFggIQorICovCitzdHJ1Y3QgZGV2aWNlX25vZGUgeworCWNoYXIJKm5hbWU7CisJY2hhcgkqdHlwZTsKKwlwaGFuZGxlCW5vZGU7CisJaW50CW5fYWRkcnM7CisJc3RydWN0CWFkZHJlc3NfcmFuZ2UgKmFkZHJzOworCWludAluX2ludHJzOworCXN0cnVjdAlpbnRlcnJ1cHRfaW5mbyAqaW50cnM7CisJY2hhcgkqZnVsbF9uYW1lOworCXN0cnVjdAlwcm9wZXJ0eSAqcHJvcGVydGllczsKKwlzdHJ1Y3QJZGV2aWNlX25vZGUgKnBhcmVudDsKKwlzdHJ1Y3QJZGV2aWNlX25vZGUgKmNoaWxkOworCXN0cnVjdAlkZXZpY2Vfbm9kZSAqc2libGluZzsKKwlzdHJ1Y3QJZGV2aWNlX25vZGUgKm5leHQ7CS8qIG5leHQgZGV2aWNlIG9mIHNhbWUgdHlwZSAqLworCXN0cnVjdAlkZXZpY2Vfbm9kZSAqYWxsbmV4dDsJLyogbmV4dCBpbiBsaXN0IG9mIGFsbCBub2RlcyAqLworfTsKKworc3RydWN0IHByb21fYXJnczsKK3R5cGVkZWYgdm9pZCAoKnByb21fZW50cnkpKHN0cnVjdCBwcm9tX2FyZ3MgKik7CisKKy8qIE9CU09MRVRFOiBPbGQgc3R5bGUgbm9kZSBsb29rdXAgKi8KK2V4dGVybiBzdHJ1Y3QgZGV2aWNlX25vZGUgKmZpbmRfZGV2aWNlcyhjb25zdCBjaGFyICpuYW1lKTsKK2V4dGVybiBzdHJ1Y3QgZGV2aWNlX25vZGUgKmZpbmRfdHlwZV9kZXZpY2VzKGNvbnN0IGNoYXIgKnR5cGUpOworZXh0ZXJuIHN0cnVjdCBkZXZpY2Vfbm9kZSAqZmluZF9wYXRoX2RldmljZShjb25zdCBjaGFyICpwYXRoKTsKK2V4dGVybiBzdHJ1Y3QgZGV2aWNlX25vZGUgKmZpbmRfY29tcGF0aWJsZV9kZXZpY2VzKGNvbnN0IGNoYXIgKnR5cGUsCisJCQkJCQkgICBjb25zdCBjaGFyICpjb21wYXQpOworZXh0ZXJuIHN0cnVjdCBkZXZpY2Vfbm9kZSAqZmluZF9hbGxfbm9kZXModm9pZCk7CisKKy8qIE5ldyBzdHlsZSBub2RlIGxvb2t1cCAqLworZXh0ZXJuIHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfZmluZF9ub2RlX2J5X25hbWUoc3RydWN0IGRldmljZV9ub2RlICpmcm9tLAorCWNvbnN0IGNoYXIgKm5hbWUpOworZXh0ZXJuIHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfZmluZF9ub2RlX2J5X3R5cGUoc3RydWN0IGRldmljZV9ub2RlICpmcm9tLAorCWNvbnN0IGNoYXIgKnR5cGUpOworZXh0ZXJuIHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfZmluZF9jb21wYXRpYmxlX25vZGUoc3RydWN0IGRldmljZV9ub2RlICpmcm9tLAorCWNvbnN0IGNoYXIgKnR5cGUsIGNvbnN0IGNoYXIgKmNvbXBhdCk7CitleHRlcm4gc3RydWN0IGRldmljZV9ub2RlICpvZl9maW5kX25vZGVfYnlfcGF0aChjb25zdCBjaGFyICpwYXRoKTsKK2V4dGVybiBzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX2ZpbmRfYWxsX25vZGVzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqcHJldik7CitleHRlcm4gc3RydWN0IGRldmljZV9ub2RlICpvZl9nZXRfcGFyZW50KGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSk7CitleHRlcm4gc3RydWN0IGRldmljZV9ub2RlICpvZl9nZXRfbmV4dF9jaGlsZChjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCisJCQkJCSAgICAgc3RydWN0IGRldmljZV9ub2RlICpwcmV2KTsKK2V4dGVybiBzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX25vZGVfZ2V0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSk7CitleHRlcm4gdm9pZCBvZl9ub2RlX3B1dChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpOworCisvKiBPdGhlciBQcm90b3R5cGVzICovCitleHRlcm4gdm9pZCBhYm9ydCh2b2lkKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHByb21faW5pdChpbnQsIGludCwgcHJvbV9lbnRyeSk7CitleHRlcm4gdm9pZCBwcm9tX3ByaW50KGNvbnN0IGNoYXIgKm1zZyk7CitleHRlcm4gdm9pZCByZWxvY2F0ZV9ub2Rlcyh2b2lkKTsKK2V4dGVybiB2b2lkIGZpbmlzaF9kZXZpY2VfdHJlZSh2b2lkKTsKK2V4dGVybiBpbnQgZGV2aWNlX2lzX2NvbXBhdGlibGUoc3RydWN0IGRldmljZV9ub2RlICpkZXZpY2UsIGNvbnN0IGNoYXIgKik7CitleHRlcm4gaW50IG1hY2hpbmVfaXNfY29tcGF0aWJsZShjb25zdCBjaGFyICpjb21wYXQpOworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgKmdldF9wcm9wZXJ0eShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJICAgaW50ICpsZW5wKTsKK2V4dGVybiB2b2lkIHByb21fYWRkX3Byb3BlcnR5KHN0cnVjdCBkZXZpY2Vfbm9kZSogbnAsIHN0cnVjdCBwcm9wZXJ0eSogcHJvcCk7CitleHRlcm4gdm9pZCBwcm9tX2dldF9pcnFfc2Vuc2VzKHVuc2lnbmVkIGNoYXIgKiwgaW50LCBpbnQpOworZXh0ZXJuIGludCBwcm9tX25fYWRkcl9jZWxscyhzdHJ1Y3QgZGV2aWNlX25vZGUqIG5wKTsKK2V4dGVybiBpbnQgcHJvbV9uX3NpemVfY2VsbHMoc3RydWN0IGRldmljZV9ub2RlKiBucCk7CisKK2V4dGVybiBzdHJ1Y3QgcmVzb3VyY2UqCityZXF1ZXN0X09GX3Jlc291cmNlKHN0cnVjdCBkZXZpY2Vfbm9kZSogbm9kZSwgaW50IGluZGV4LCBjb25zdCBjaGFyKiBuYW1lX3Bvc3RmaXgpOworZXh0ZXJuIGludCByZWxlYXNlX09GX3Jlc291cmNlKHN0cnVjdCBkZXZpY2Vfbm9kZSogbm9kZSwgaW50IGluZGV4KTsKKworZXh0ZXJuIHZvaWQgcHJpbnRfcHJvcGVydGllcyhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpOworZXh0ZXJuIGludCBjYWxsX3J0YXMoY29uc3QgY2hhciAqc2VydmljZSwgaW50IG5hcmdzLCBpbnQgbnJldCwKKwkJICAgICB1bnNpZ25lZCBsb25nICpvdXRwdXRzLCAuLi4pOworCisvKgorICogUENJIDwtPiBPRiBtYXRjaGluZyBmdW5jdGlvbnMKKyAqLworc3RydWN0IHBjaV9idXM7CitzdHJ1Y3QgcGNpX2RldjsKK2V4dGVybiBpbnQgcGNpX2RldmljZV9mcm9tX09GX25vZGUoc3RydWN0IGRldmljZV9ub2RlICpub2RlLAorCQkJCSAgIHU4KiBidXMsIHU4KiBkZXZmbik7CitleHRlcm4gc3RydWN0IGRldmljZV9ub2RlKiBwY2lfYnVzZGV2X3RvX09GX25vZGUoc3RydWN0IHBjaV9idXMgKiwgaW50KTsKK2V4dGVybiBzdHJ1Y3QgZGV2aWNlX25vZGUqIHBjaV9kZXZpY2VfdG9fT0Zfbm9kZShzdHJ1Y3QgcGNpX2RldiAqKTsKK2V4dGVybiB2b2lkIHBjaV9jcmVhdGVfT0ZfYnVzX21hcCh2b2lkKTsKKworLyoKKyAqIFdoZW4gd2UgY2FsbCBiYWNrIHRvIHRoZSBPcGVuIEZpcm13YXJlIGNsaWVudCBpbnRlcmZhY2UsIHdlIHVzdWFsbHkKKyAqIGhhdmUgdG8gZG8gdGhhdCBiZWZvcmUgdGhlIGtlcm5lbCBpcyByZWxvY2F0ZWQgdG8gaXRzIGZpbmFsIGxvY2F0aW9uCisgKiAodGhpcyBpcyBiZWNhdXNlIHdlIGNhbid0IHVzZSBPRiBhZnRlciB3ZSBoYXZlIG92ZXJ3cml0dGVuIHRoZQorICogZXhjZXB0aW9uIHZlY3RvcnMgd2l0aCBvdXIgZXhjZXB0aW9uIGhhbmRsZXJzKS4gIFRoZXNlIG1hY3JvcyBhc3Npc3QKKyAqIGluIHBlcmZvcm1pbmcgdGhlIGFkZHJlc3MgY2FsY3VsYXRpb25zIHRoYXQgd2UgbmVlZCB0byBkbyB0byBhY2Nlc3MKKyAqIGRhdGEgd2hlbiB0aGUga2VybmVsIGlzIHJ1bm5pbmcgYXQgYW4gYWRkcmVzcyB0aGF0IGlzIGRpZmZlcmVudCBmcm9tCisgKiB0aGUgYWRkcmVzcyB0aGF0IHRoZSBrZXJuZWwgaXMgbGlua2VkIGF0LiAgVGhlIHJlbG9jX29mZnNldCgpIGZ1bmN0aW9uCisgKiByZXR1cm5zIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlc2UgdHdvIGFkZHJlc3NlcyBhbmQgdGhlIG1hY3JvcworICogc2ltcGxpZnkgdGhlIHByb2Nlc3Mgb2YgYWRkaW5nIG9yIHN1YnRyYWN0aW5nIHRoaXMgb2Zmc2V0IHRvL2Zyb20KKyAqIHBvaW50ZXIgdmFsdWVzLiAgU2VlIGFyY2gvcHBjL2tlcm5lbC9wcm9tLmMgZm9yIGhvdyB0aGVzZSBhcmUgdXNlZC4KKyAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcmVsb2Nfb2Zmc2V0KHZvaWQpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgYWRkX3JlbG9jX29mZnNldCh1bnNpZ25lZCBsb25nKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHN1Yl9yZWxvY19vZmZzZXQodW5zaWduZWQgbG9uZyk7CisKKyNkZWZpbmUgUFRSUkVMT0MoeCkJKCh0eXBlb2YoeCkpYWRkX3JlbG9jX29mZnNldCgodW5zaWduZWQgbG9uZykoeCkpKQorI2RlZmluZSBQVFJVTlJFTE9DKHgpCSgodHlwZW9mKHgpKXN1Yl9yZWxvY19vZmZzZXQoKHVuc2lnbmVkIGxvbmcpKHgpKSkKKworI2VuZGlmIC8qIF9QUENfUFJPTV9IICovCisjZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL3B0cmFjZS5oIGIvaW5jbHVkZS9hc20tcHBjL3B0cmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkNGU0ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGMvcHRyYWNlLmgKQEAgLTAsMCArMSwxNDUgQEAKKyNpZm5kZWYgX1BQQ19QVFJBQ0VfSAorI2RlZmluZSBfUFBDX1BUUkFDRV9ICisKKy8qCisgKiBUaGlzIHN0cnVjdCBkZWZpbmVzIHRoZSB3YXkgdGhlIHJlZ2lzdGVycyBhcmUgc3RvcmVkIG9uIHRoZQorICoga2VybmVsIHN0YWNrIGR1cmluZyBhIHN5c3RlbSBjYWxsIG9yIG90aGVyIGtlcm5lbCBlbnRyeS4KKyAqCisgKiB0aGlzIHNob3VsZCBvbmx5IGNvbnRhaW4gdm9sYXRpbGUgcmVncworICogc2luY2Ugd2UgY2FuIGtlZXAgbm9uLXZvbGF0aWxlIGluIHRoZSB0aHJlYWRfc3RydWN0CisgKiBzaG91bGQgc2V0IHRoaXMgdXAgd2hlbiBvbmx5IHZvbGF0aWxlcyBhcmUgc2F2ZWQKKyAqIGJ5IGludHIgY29kZS4KKyAqCisgKiBTaW5jZSB0aGlzIGlzIGdvaW5nIG9uIHRoZSBzdGFjaywgKkNBUkUgTVVTVCBCRSBUQUtFTiogdG8gaW5zdXJlCisgKiB0aGF0IHRoZSBvdmVyYWxsIHN0cnVjdHVyZSBpcyBhIG11bHRpcGxlIG9mIDE2IGJ5dGVzIGluIGxlbmd0aC4KKyAqCisgKiBOb3RlIHRoYXQgdGhlIG9mZnNldHMgb2YgdGhlIGZpZWxkcyBpbiB0aGlzIHN0cnVjdCBjb3JyZXNwb25kIHdpdGgKKyAqIHRoZSBQVF8qIHZhbHVlcyBiZWxvdy4gIFRoaXMgc2ltcGxpZmllcyBhcmNoL3BwYy9rZXJuZWwvcHRyYWNlLmMuCisgKi8KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK3N0cnVjdCBwdF9yZWdzIHsKKwl1bnNpZ25lZCBsb25nIGdwclszMl07CisJdW5zaWduZWQgbG9uZyBuaXA7CisJdW5zaWduZWQgbG9uZyBtc3I7CisJdW5zaWduZWQgbG9uZyBvcmlnX2dwcjM7CS8qIFVzZWQgZm9yIHJlc3RhcnRpbmcgc3lzdGVtIGNhbGxzICovCisJdW5zaWduZWQgbG9uZyBjdHI7CisJdW5zaWduZWQgbG9uZyBsaW5rOworCXVuc2lnbmVkIGxvbmcgeGVyOworCXVuc2lnbmVkIGxvbmcgY2NyOworCXVuc2lnbmVkIGxvbmcgbXE7CQkvKiA2MDEgb25seSAobm90IHVzZWQgYXQgcHJlc2VudCkgKi8KKwkJCQkJLyogVXNlZCBvbiBBUFVTIHRvIGhvbGQgSVBMIHZhbHVlLiAqLworCXVuc2lnbmVkIGxvbmcgdHJhcDsJCS8qIFJlYXNvbiBmb3IgYmVpbmcgaGVyZSAqLworCS8qIE4uQi4gZm9yIGNyaXRpY2FsIGV4Y2VwdGlvbnMgb24gNHh4LCB0aGUgZGFyIGFuZCBkc2lzcgorCSAgIGZpZWxkcyBhcmUgb3ZlcmxvYWRlZCB0byBob2xkIHNycjAgYW5kIHNycjEuICovCisJdW5zaWduZWQgbG9uZyBkYXI7CQkvKiBGYXVsdCByZWdpc3RlcnMgKi8KKwl1bnNpZ25lZCBsb25nIGRzaXNyOwkJLyogb24gNHh4L0Jvb2stRSB1c2VkIGZvciBFU1IgKi8KKwl1bnNpZ25lZCBsb25nIHJlc3VsdDsgCQkvKiBSZXN1bHQgb2YgYSBzeXN0ZW0gY2FsbCAqLworfTsKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisjaWZkZWYgX19LRVJORUxfXworI2RlZmluZSBTVEFDS19GUkFNRV9PVkVSSEVBRAkxNgkvKiBzaXplIG9mIG1pbmltdW0gc3RhY2sgZnJhbWUgKi8KKworLyogU2l6ZSBvZiBzdGFjayBmcmFtZSBhbGxvY2F0ZWQgd2hlbiBjYWxsaW5nIHNpZ25hbCBoYW5kbGVyLiAqLworI2RlZmluZSBfX1NJR05BTF9GUkFNRVNJWkUJNjQKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNkZWZpbmUgaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKSAoKHJlZ3MpLT5uaXApCisjaWZkZWYgQ09ORklHX1NNUAorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcHJvZmlsZV9wYyhzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisjZWxzZQorI2RlZmluZSBwcm9maWxlX3BjKHJlZ3MpIGluc3RydWN0aW9uX3BvaW50ZXIocmVncykKKyNlbmRpZgorCisjZGVmaW5lIHVzZXJfbW9kZShyZWdzKSAoKChyZWdzKS0+bXNyICYgTVNSX1BSKSAhPSAwKQorCisjZGVmaW5lIGZvcmNlX3N1Y2Nlc3NmdWxfc3lzY2FsbF9yZXR1cm4oKSAgIFwKKwlkbyB7IFwKKwkJY3VycmVudF90aHJlYWRfaW5mbygpLT5sb2NhbF9mbGFncyB8PSBfVElGTF9GT1JDRV9OT0VSUk9SOyBcCisJfSB3aGlsZSgwKQorCisvKgorICogV2UgdXNlIHRoZSBsZWFzdC1zaWduaWZpY2FudCBiaXQgb2YgdGhlIHRyYXAgZmllbGQgdG8gaW5kaWNhdGUKKyAqIHdoZXRoZXIgd2UgaGF2ZSBzYXZlZCB0aGUgZnVsbCBzZXQgb2YgcmVnaXN0ZXJzLCBvciBvbmx5IGEKKyAqIHBhcnRpYWwgc2V0LiAgQSAxIHRoZXJlIG1lYW5zIHRoZSBwYXJ0aWFsIHNldC4KKyAqIE9uIDR4eCB3ZSB1c2UgdGhlIG5leHQgYml0IHRvIGluZGljYXRlIHdoZXRoZXIgdGhlIGV4Y2VwdGlvbgorICogaXMgYSBjcml0aWNhbCBleGNlcHRpb24gKDEgbWVhbnMgaXQgaXMpLgorICovCisjZGVmaW5lIEZVTExfUkVHUyhyZWdzKQkJKCgocmVncyktPnRyYXAgJiAxKSA9PSAwKQorI2RlZmluZSBJU19DUklUSUNBTF9FWEMocmVncykJKCgocmVncyktPnRyYXAgJiAyKSA9PSAwKQorI2RlZmluZSBUUkFQKHJlZ3MpCQkoKHJlZ3MpLT50cmFwICYgfjB4RikKKworI2RlZmluZSBDSEVDS19GVUxMX1JFR1MocmVncykJCQkJCQkgICAgICBcCitkbyB7CQkJCQkJCQkJICAgICAgXAorCWlmICgocmVncyktPnRyYXAgJiAxKQkJCQkJCSAgICAgIFwKKwkJcHJpbnRrKEtFUk5fQ1JJVCAiJXM6IHBhcnRpYWwgcmVnaXN0ZXIgc2V0XG4iLCBfX0ZVTkNUSU9OX18pOyBcCit9IHdoaWxlICgwKQorI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisvKgorICogT2Zmc2V0cyB1c2VkIGJ5ICdwdHJhY2UnIHN5c3RlbSBjYWxsIGludGVyZmFjZS4KKyAqIFRoZXNlIGNhbid0IGJlIGNoYW5nZWQgd2l0aG91dCBicmVha2luZyBiaW5hcnkgY29tcGF0aWJpbGl0eQorICogd2l0aCBNa0xpbnV4LCBldGMuCisgKi8KKyNkZWZpbmUgUFRfUjAJMAorI2RlZmluZSBQVF9SMQkxCisjZGVmaW5lIFBUX1IyCTIKKyNkZWZpbmUgUFRfUjMJMworI2RlZmluZSBQVF9SNAk0CisjZGVmaW5lIFBUX1I1CTUKKyNkZWZpbmUgUFRfUjYJNgorI2RlZmluZSBQVF9SNwk3CisjZGVmaW5lIFBUX1I4CTgKKyNkZWZpbmUgUFRfUjkJOQorI2RlZmluZSBQVF9SMTAJMTAKKyNkZWZpbmUgUFRfUjExCTExCisjZGVmaW5lIFBUX1IxMgkxMgorI2RlZmluZSBQVF9SMTMJMTMKKyNkZWZpbmUgUFRfUjE0CTE0CisjZGVmaW5lIFBUX1IxNQkxNQorI2RlZmluZSBQVF9SMTYJMTYKKyNkZWZpbmUgUFRfUjE3CTE3CisjZGVmaW5lIFBUX1IxOAkxOAorI2RlZmluZSBQVF9SMTkJMTkKKyNkZWZpbmUgUFRfUjIwCTIwCisjZGVmaW5lIFBUX1IyMQkyMQorI2RlZmluZSBQVF9SMjIJMjIKKyNkZWZpbmUgUFRfUjIzCTIzCisjZGVmaW5lIFBUX1IyNAkyNAorI2RlZmluZSBQVF9SMjUJMjUKKyNkZWZpbmUgUFRfUjI2CTI2CisjZGVmaW5lIFBUX1IyNwkyNworI2RlZmluZSBQVF9SMjgJMjgKKyNkZWZpbmUgUFRfUjI5CTI5CisjZGVmaW5lIFBUX1IzMAkzMAorI2RlZmluZSBQVF9SMzEJMzEKKworI2RlZmluZSBQVF9OSVAJMzIKKyNkZWZpbmUgUFRfTVNSCTMzCisjaWZkZWYgX19LRVJORUxfXworI2RlZmluZSBQVF9PUklHX1IzIDM0CisjZW5kaWYKKyNkZWZpbmUgUFRfQ1RSCTM1CisjZGVmaW5lIFBUX0xOSwkzNgorI2RlZmluZSBQVF9YRVIJMzcKKyNkZWZpbmUgUFRfQ0NSCTM4CisjZGVmaW5lIFBUX01RCTM5CisKKyNkZWZpbmUgUFRfRlBSMAk0OAkvKiBlYWNoIEZQIHJlZyBvY2N1cGllcyAyIHNsb3RzIGluIHRoaXMgc3BhY2UgKi8KKyNkZWZpbmUgUFRfRlBSMzEgKFBUX0ZQUjAgKyAyKjMxKQorI2RlZmluZSBQVF9GUFNDUiAoUFRfRlBSMCArIDIqMzIgKyAxKQorCisvKiBHZXQvc2V0IGFsbCB0aGUgYWx0aXZlYyByZWdpc3RlcnMgdnIwLi52cjMxLCB2c2NyLCB2cnNhdmUsIGluIG9uZSBnbyAqLworI2RlZmluZSBQVFJBQ0VfR0VUVlJSRUdTCTE4CisjZGVmaW5lIFBUUkFDRV9TRVRWUlJFR1MJMTkKKworLyogR2V0L3NldCBhbGwgdGhlIHVwcGVyIDMyLWJpdHMgb2YgdGhlIFNQRSByZWdpc3RlcnMsIGFjY3VtdWxhdG9yLCBhbmQKKyAqIHNwZWZzY3IsIGluIG9uZSBnbyAqLworI2RlZmluZSBQVFJBQ0VfR0VURVZSUkVHUwkyMAorI2RlZmluZSBQVFJBQ0VfU0VURVZSUkVHUwkyMQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9yYXZlbi5oIGIvaW5jbHVkZS9hc20tcHBjL3JhdmVuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZmNTJjYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9yYXZlbi5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiAgaW5jbHVkZS9hc20tcHBjL3JhdmVuLmggLS0gUmF2ZW4gTVBJQyBjaGlwLgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTggSm9obm5pZSBQZXRlcnMKKyAqCisgKiAgVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmZGVmIF9fS0VSTkVMX18KKyNpZm5kZWYgX0FTTVBQQ19SQVZFTl9ICisjZGVmaW5lIF9BU01QUENfUkFWRU5fSAorCisjZGVmaW5lIE1WTUUyNjAwX0lOVF9TSU8JCTAKKyNkZWZpbmUgTVZNRTI2MDBfSU5UX0ZBTENOX0VDQ19FUlIJMQorI2RlZmluZSBNVk1FMjYwMF9JTlRfUENJX0VUSEVSTkVUCTIKKyNkZWZpbmUgTVZNRTI2MDBfSU5UX1BDSV9TQ1NJCQkzCisjZGVmaW5lIE1WTUUyNjAwX0lOVF9QQ0lfR1JBUEhJQ1MJNAorI2RlZmluZSBNVk1FMjYwMF9JTlRfUENJX1ZNRTAJCTUKKyNkZWZpbmUgTVZNRTI2MDBfSU5UX1BDSV9WTUUxCQk2CisjZGVmaW5lIE1WTUUyNjAwX0lOVF9QQ0lfVk1FMgkJNworI2RlZmluZSBNVk1FMjYwMF9JTlRfUENJX1ZNRTMJCTgKKyNkZWZpbmUgTVZNRTI2MDBfSU5UX1BDSV9JTlRBCQk5CisjZGVmaW5lIE1WTUUyNjAwX0lOVF9QQ0lfSU5UQgkJMTAKKyNkZWZpbmUgTVZNRTI2MDBfSU5UX1BDSV9JTlRDIAkJMTEKKyNkZWZpbmUgTVZNRTI2MDBfSU5UX1BDSV9JTlREIAkJMTIKKyNkZWZpbmUgTVZNRTI2MDBfSU5UX0xNX1NJRzAJCTEzCisjZGVmaW5lIE1WTUUyNjAwX0lOVF9MTV9TSUcxCQkxNAorCitleHRlcm4gc3RydWN0IGh3X2ludGVycnVwdF90eXBlIHJhdmVuX3BpYzsKKworZXh0ZXJuIGludCByYXZlbl9pbml0KHZvaWQpOworI2VuZGlmIC8qIF9BU01QUENfUkFWRU5fSCAqLworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9yZWcuaCBiL2luY2x1ZGUvYXNtLXBwYy9yZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzcyZGVlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjL3JlZy5oCkBAIC0wLDAgKzEsNDQ0IEBACisvKgorICogQ29udGFpbnMgdGhlIGRlZmluaXRpb24gb2YgcmVnaXN0ZXJzIGNvbW1vbiB0byBhbGwgUG93ZXJQQyB2YXJpYW50cy4KKyAqIElmIGEgcmVnaXN0ZXIgZGVmaW5pdGlvbiBoYXMgYmVlbiBjaGFuZ2VkIGluIGEgZGlmZmVyZW50IFBvd2VyUEMKKyAqIHZhcmlhbnQsIHdlIHdpbGwgY2FzZSBpdCBpbiAjaWZuZGVmIFhYWCAuLi4gI2VuZGlmLCBhbmQgaGF2ZSB0aGUKKyAqIG51bWJlciB1c2VkIGluIHRoZSBQcm9ncmFtbWluZyBFbnZpcm9ubWVudHMgTWFudWFsIEZvciAzMi1CaXQKKyAqIEltcGxlbWVudGF0aW9ucyBvZiB0aGUgUG93ZXJQQyBBcmNoaXRlY3R1cmUgKGEuay5hLiBHcmVlbiBCb29rKSBoZXJlLgorICovCisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaWZuZGVmIF9fQVNNX1BQQ19SRUdTX0hfXworI2RlZmluZSBfX0FTTV9QUENfUkVHU19IX18KKworI2luY2x1ZGUgPGxpbnV4L3N0cmluZ2lmeS5oPgorCisvKiBQaWNrdXAgQm9vayBFIHNwZWNpZmljIHJlZ2lzdGVycy4gKi8KKyNpZiBkZWZpbmVkKENPTkZJR19CT09LRSkgfHwgZGVmaW5lZChDT05GSUdfNDB4KQorI2luY2x1ZGUgPGFzbS9yZWdfYm9va2UuaD4KKyNlbmRpZgorCisvKiBNYWNoaW5lIFN0YXRlIFJlZ2lzdGVyIChNU1IpIEZpZWxkcyAqLworI2RlZmluZSBNU1JfU0YJCSgxPDw2MykKKyNkZWZpbmUgTVNSX0lTRgkJKDE8PDYxKQorI2RlZmluZSBNU1JfVkVDCQkoMTw8MjUpCQkvKiBFbmFibGUgQWx0aVZlYyAqLworI2RlZmluZSBNU1JfUE9XCQkoMTw8MTgpCQkvKiBFbmFibGUgUG93ZXIgTWFuYWdlbWVudCAqLworI2RlZmluZSBNU1JfV0UJCSgxPDwxOCkJCS8qIFdhaXQgU3RhdGUgRW5hYmxlICovCisjZGVmaW5lIE1TUl9UR1BSCSgxPDwxNykJCS8qIFRMQiBVcGRhdGUgcmVnaXN0ZXJzIGluIHVzZSAqLworI2RlZmluZSBNU1JfQ0UJCSgxPDwxNykJCS8qIENyaXRpY2FsIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgTVNSX0lMRQkJKDE8PDE2KQkJLyogSW50ZXJydXB0IExpdHRsZSBFbmRpYW4gKi8KKyNkZWZpbmUgTVNSX0VFCQkoMTw8MTUpCQkvKiBFeHRlcm5hbCBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIE1TUl9QUgkJKDE8PDE0KQkJLyogUHJvYmxlbSBTdGF0ZSAvIFByaXZpbGVnZSBMZXZlbCAqLworI2RlZmluZSBNU1JfRlAJCSgxPDwxMykJCS8qIEZsb2F0aW5nIFBvaW50IGVuYWJsZSAqLworI2RlZmluZSBNU1JfTUUJCSgxPDwxMikJCS8qIE1hY2hpbmUgQ2hlY2sgRW5hYmxlICovCisjZGVmaW5lIE1TUl9GRTAJCSgxPDwxMSkJCS8qIEZsb2F0aW5nIEV4Y2VwdGlvbiBtb2RlIDAgKi8KKyNkZWZpbmUgTVNSX1NFCQkoMTw8MTApCQkvKiBTaW5nbGUgU3RlcCAqLworI2RlZmluZSBNU1JfQkUJCSgxPDw5KQkJLyogQnJhbmNoIFRyYWNlICovCisjZGVmaW5lIE1TUl9ERQkJKDE8PDkpCQkvKiBEZWJ1ZyBFeGNlcHRpb24gRW5hYmxlICovCisjZGVmaW5lIE1TUl9GRTEJCSgxPDw4KQkJLyogRmxvYXRpbmcgRXhjZXB0aW9uIG1vZGUgMSAqLworI2RlZmluZSBNU1JfSVAJCSgxPDw2KQkJLyogRXhjZXB0aW9uIHByZWZpeCAweDAwMC8weEZGRiAqLworI2RlZmluZSBNU1JfSVIJCSgxPDw1KQkJLyogSW5zdHJ1Y3Rpb24gUmVsb2NhdGUgKi8KKyNkZWZpbmUgTVNSX0RSCQkoMTw8NCkJCS8qIERhdGEgUmVsb2NhdGUgKi8KKyNkZWZpbmUgTVNSX1BFCQkoMTw8MykJCS8qIFByb3RlY3Rpb24gRW5hYmxlICovCisjZGVmaW5lIE1TUl9QWAkJKDE8PDIpCQkvKiBQcm90ZWN0aW9uIEV4Y2x1c2l2ZSBNb2RlICovCisjZGVmaW5lIE1TUl9SSQkJKDE8PDEpCQkvKiBSZWNvdmVyYWJsZSBFeGNlcHRpb24gKi8KKyNkZWZpbmUgTVNSX0xFCQkoMTw8MCkJCS8qIExpdHRsZSBFbmRpYW4gKi8KKworLyogRGVmYXVsdCBNU1IgZm9yIGtlcm5lbCBtb2RlLiAqLworI2lmZGVmIENPTkZJR19BUFVTX0ZBU1RfRVhDRVBUCisjZGVmaW5lIE1TUl9LRVJORUwJKE1TUl9NRXxNU1JfSVB8TVNSX1JJfE1TUl9JUnxNU1JfRFIpCisjZW5kaWYKKworI2lmbmRlZiBNU1JfS0VSTkVMCisjZGVmaW5lIE1TUl9LRVJORUwJKE1TUl9NRXxNU1JfUkl8TVNSX0lSfE1TUl9EUikKKyNlbmRpZgorCisjZGVmaW5lIE1TUl9VU0VSCShNU1JfS0VSTkVMfE1TUl9QUnxNU1JfRUUpCisKKy8qIEZsb2F0aW5nIFBvaW50IFN0YXR1cyBhbmQgQ29udHJvbCBSZWdpc3RlciAoRlBTQ1IpIEZpZWxkcyAqLworI2RlZmluZSBGUFNDUl9GWAkweDgwMDAwMDAwCS8qIEZQVSBleGNlcHRpb24gc3VtbWFyeSAqLworI2RlZmluZSBGUFNDUl9GRVgJMHg0MDAwMDAwMAkvKiBGUFUgZW5hYmxlZCBleGNlcHRpb24gc3VtbWFyeSAqLworI2RlZmluZSBGUFNDUl9WWAkweDIwMDAwMDAwCS8qIEludmFsaWQgb3BlcmF0aW9uIHN1bW1hcnkgKi8KKyNkZWZpbmUgRlBTQ1JfT1gJMHgxMDAwMDAwMAkvKiBPdmVyZmxvdyBleGNlcHRpb24gc3VtbWFyeSAqLworI2RlZmluZSBGUFNDUl9VWAkweDA4MDAwMDAwCS8qIFVuZGVyZmxvdyBleGNlcHRpb24gc3VtbWFyeSAqLworI2RlZmluZSBGUFNDUl9aWAkweDA0MDAwMDAwCS8qIFplcm8tZGV2aWRlIGV4Y2VwdGlvbiBzdW1tYXJ5ICovCisjZGVmaW5lIEZQU0NSX1hYCTB4MDIwMDAwMDAJLyogSW5leGFjdCBleGNlcHRpb24gc3VtbWFyeSAqLworI2RlZmluZSBGUFNDUl9WWFNOQU4JMHgwMTAwMDAwMAkvKiBJbnZhbGlkIG9wIGZvciBTTmFOICovCisjZGVmaW5lIEZQU0NSX1ZYSVNJCTB4MDA4MDAwMDAJLyogSW52YWxpZCBvcCBmb3IgSW52IC0gSW52ICovCisjZGVmaW5lIEZQU0NSX1ZYSURJCTB4MDA0MDAwMDAJLyogSW52YWxpZCBvcCBmb3IgSW52IC8gSW52ICovCisjZGVmaW5lIEZQU0NSX1ZYWkRaCTB4MDAyMDAwMDAJLyogSW52YWxpZCBvcCBmb3IgWmVybyAvIFplcm8gKi8KKyNkZWZpbmUgRlBTQ1JfVlhJTVoJMHgwMDEwMDAwMAkvKiBJbnZhbGlkIG9wIGZvciBJbnYgKiBaZXJvICovCisjZGVmaW5lIEZQU0NSX1ZYVkMJMHgwMDA4MDAwMAkvKiBJbnZhbGlkIG9wIGZvciBDb21wYXJlICovCisjZGVmaW5lIEZQU0NSX0ZSCTB4MDAwNDAwMDAJLyogRnJhY3Rpb24gcm91bmRlZCAqLworI2RlZmluZSBGUFNDUl9GSQkweDAwMDIwMDAwCS8qIEZyYWN0aW9uIGluZXhhY3QgKi8KKyNkZWZpbmUgRlBTQ1JfRlBSRgkweDAwMDFmMDAwCS8qIEZQVSBSZXN1bHQgRmxhZ3MgKi8KKyNkZWZpbmUgRlBTQ1JfRlBDQwkweDAwMDBmMDAwCS8qIEZQVSBDb25kaXRpb24gQ29kZXMgKi8KKyNkZWZpbmUgRlBTQ1JfVlhTT0ZUCTB4MDAwMDA0MDAJLyogSW52YWxpZCBvcCBmb3Igc29mdHdhcmUgcmVxdWVzdCAqLworI2RlZmluZSBGUFNDUl9WWFNRUlQJMHgwMDAwMDIwMAkvKiBJbnZhbGlkIG9wIGZvciBzcXVhcmUgcm9vdCAqLworI2RlZmluZSBGUFNDUl9WWENWSQkweDAwMDAwMTAwCS8qIEludmFsaWQgb3AgZm9yIGludGVnZXIgY29udmVydCAqLworI2RlZmluZSBGUFNDUl9WRQkweDAwMDAwMDgwCS8qIEludmFsaWQgb3AgZXhjZXB0aW9uIGVuYWJsZSAqLworI2RlZmluZSBGUFNDUl9PRQkweDAwMDAwMDQwCS8qIElFRUUgb3ZlcmZsb3cgZXhjZXB0aW9uIGVuYWJsZSAqLworI2RlZmluZSBGUFNDUl9VRQkweDAwMDAwMDIwCS8qIElFRUUgdW5kZXJmbG93IGV4Y2VwdGlvbiBlbmFibGUgKi8KKyNkZWZpbmUgRlBTQ1JfWkUJMHgwMDAwMDAxMAkvKiBJRUVFIHplcm8gZGl2aWRlIGV4Y2VwdGlvbiBlbmFibGUgKi8KKyNkZWZpbmUgRlBTQ1JfWEUJMHgwMDAwMDAwOAkvKiBGUCBpbmV4YWN0IGV4Y2VwdGlvbiBlbmFibGUgKi8KKyNkZWZpbmUgRlBTQ1JfTkkJMHgwMDAwMDAwNAkvKiBGUFUgbm9uIElFRUUtTW9kZSAqLworI2RlZmluZSBGUFNDUl9STgkweDAwMDAwMDAzCS8qIEZQVSByb3VuZGluZyBjb250cm9sICovCisKKy8qIFNwZWNpYWwgUHVycG9zZSBSZWdpc3RlcnMgKFNQUk5zKSovCisjZGVmaW5lIFNQUk5fQ1RSCTB4MDA5CS8qIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lIFNQUk5fREFCUgkweDNGNQkvKiBEYXRhIEFkZHJlc3MgQnJlYWtwb2ludCBSZWdpc3RlciAqLworI2RlZmluZSBTUFJOX0RBUgkweDAxMwkvKiBEYXRhIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BSTl9UQlJMCTB4MTBDCS8qIFRpbWUgQmFzZSBSZWFkIExvd2VyIFJlZ2lzdGVyICh1c2VyLCBSL08pICovCisjZGVmaW5lIFNQUk5fVEJSVQkweDEwRAkvKiBUaW1lIEJhc2UgUmVhZCBVcHBlciBSZWdpc3RlciAodXNlciwgUi9PKSAqLworI2RlZmluZSBTUFJOX1RCV0wJMHgxMUMJLyogVGltZSBCYXNlIExvd2VyIFJlZ2lzdGVyIChzdXBlciwgUi9XKSAqLworI2RlZmluZSBTUFJOX1RCV1UJMHgxMUQJLyogVGltZSBCYXNlIFVwcGVyIFJlZ2lzdGVyIChzdXBlciwgUi9XKSAqLworI2RlZmluZSBTUFJOX0hJT1IJMHgxMzcJLyogOTcwIEh5cGVydmlzb3IgaW50ZXJydXB0IG9mZnNldCAqLworI2RlZmluZSBTUFJOX0RCQVQwTAkweDIxOQkvKiBEYXRhIEJBVCAwIExvd2VyIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQUk5fREJBVDBVCTB4MjE4CS8qIERhdGEgQkFUIDAgVXBwZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BSTl9EQkFUMUwJMHgyMUIJLyogRGF0YSBCQVQgMSBMb3dlciBSZWdpc3RlciAqLworI2RlZmluZSBTUFJOX0RCQVQxVQkweDIxQQkvKiBEYXRhIEJBVCAxIFVwcGVyIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQUk5fREJBVDJMCTB4MjFECS8qIERhdGEgQkFUIDIgTG93ZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BSTl9EQkFUMlUJMHgyMUMJLyogRGF0YSBCQVQgMiBVcHBlciBSZWdpc3RlciAqLworI2RlZmluZSBTUFJOX0RCQVQzTAkweDIxRgkvKiBEYXRhIEJBVCAzIExvd2VyIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQUk5fREJBVDNVCTB4MjFFCS8qIERhdGEgQkFUIDMgVXBwZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BSTl9EQkFUNEwJMHgyMzkJLyogRGF0YSBCQVQgNCBMb3dlciBSZWdpc3RlciAqLworI2RlZmluZSBTUFJOX0RCQVQ0VQkweDIzOAkvKiBEYXRhIEJBVCA0IFVwcGVyIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQUk5fREJBVDVMCTB4MjNCCS8qIERhdGEgQkFUIDUgTG93ZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BSTl9EQkFUNVUJMHgyM0EJLyogRGF0YSBCQVQgNSBVcHBlciBSZWdpc3RlciAqLworI2RlZmluZSBTUFJOX0RCQVQ2TAkweDIzRAkvKiBEYXRhIEJBVCA2IExvd2VyIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQUk5fREJBVDZVCTB4MjNDCS8qIERhdGEgQkFUIDYgVXBwZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BSTl9EQkFUN0wJMHgyM0YJLyogRGF0YSBCQVQgNyBMb3dlciBSZWdpc3RlciAqLworI2RlZmluZSBTUFJOX0RCQVQ3VQkweDIzRQkvKiBEYXRhIEJBVCA3IFVwcGVyIFJlZ2lzdGVyICovCisKKyNkZWZpbmUgU1BSTl9ERUMJMHgwMTYJCS8qIERlY3JlbWVudCBSZWdpc3RlciAqLworI2RlZmluZSBTUFJOX0RFUgkweDA5NQkJLyogRGVidWcgRW5hYmxlIFJlZ3NpdGVyICovCisjZGVmaW5lIERFUl9SU1RFCTB4NDAwMDAwMDAJLyogUmVzZXQgSW50ZXJydXB0ICovCisjZGVmaW5lIERFUl9DSFNUUEUJMHgyMDAwMDAwMAkvKiBDaGVjayBTdG9wICovCisjZGVmaW5lIERFUl9NQ0lFCTB4MTAwMDAwMDAJLyogTWFjaGluZSBDaGVjayBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgREVSX0VYVElFCTB4MDIwMDAwMDAJLyogRXh0ZXJuYWwgSW50ZXJydXB0ICovCisjZGVmaW5lIERFUl9BTElFCTB4MDEwMDAwMDAJLyogQWxpZ25tZW50IEludGVycnVwdCAqLworI2RlZmluZSBERVJfUFJJRQkweDAwODAwMDAwCS8qIFByb2dyYW0gSW50ZXJydXB0ICovCisjZGVmaW5lIERFUl9GUFVWSUUJMHgwMDQwMDAwMAkvKiBGUCBVbmF2YWlsYWJsZSBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgREVSX0RFQ0lFCTB4MDAyMDAwMDAJLyogRGVjcmVtZW50ZXIgSW50ZXJydXB0ICovCisjZGVmaW5lIERFUl9TWVNJRQkweDAwMDQwMDAwCS8qIFN5c3RlbSBDYWxsIEludGVycnVwdCAqLworI2RlZmluZSBERVJfVFJFCQkweDAwMDIwMDAwCS8qIFRyYWNlIEludGVycnVwdCAqLworI2RlZmluZSBERVJfU0VJRQkweDAwMDA0MDAwCS8qIEZQIFNXIEVtdWxhdGlvbiBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgREVSX0lUTEJNU0UJMHgwMDAwMjAwMAkvKiBJbXAuIFNwZWMuIEluc3RydWN0aW9uIFRMQiBNaXNzICovCisjZGVmaW5lIERFUl9JVExCRVJFCTB4MDAwMDEwMDAJLyogSW1wLiBTcGVjLiBJbnN0cnVjdGlvbiBUTEIgRXJyb3IgKi8KKyNkZWZpbmUgREVSX0RUTEJNU0UJMHgwMDAwMDgwMAkvKiBJbXAuIFNwZWMuIERhdGEgVExCIE1pc3MgKi8KKyNkZWZpbmUgREVSX0RUTEJFUkUJMHgwMDAwMDQwMAkvKiBJbXAuIFNwZWMuIERhdGEgVExCIEVycm9yICovCisjZGVmaW5lIERFUl9MQlJLRQkweDAwMDAwMDA4CS8qIExvYWQvU3RvcmUgQnJlYWtwb2ludCBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgREVSX0lCUktFCTB4MDAwMDAwMDQJLyogSW5zdHJ1Y3Rpb24gQnJlYWtwb2ludCBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgREVSX0VCUktFCTB4MDAwMDAwMDIJLyogRXh0ZXJuYWwgQnJlYWtwb2ludCBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgREVSX0RQSUUJMHgwMDAwMDAwMQkvKiBEZXYuIFBvcnQgTm9ubWFza2FibGUgUmVxdWVzdCAqLworI2RlZmluZSBTUFJOX0RNSVNTCTB4M0QwCQkvKiBEYXRhIFRMQiBNaXNzIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQUk5fRFNJU1IJMHgwMTIJLyogRGF0YSBTdG9yYWdlIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BSTl9FQVIJMHgxMUEJCS8qIEV4dGVybmFsIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BSTl9IQVNIMQkweDNEMgkJLyogUHJpbWFyeSBIYXNoIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BSTl9IQVNIMgkweDNEMwkJLyogU2Vjb25kYXJ5IEhhc2ggQWRkcmVzcyBSZXNnaXN0ZXIgKi8KKyNkZWZpbmUgU1BSTl9ISUQwCTB4M0YwCQkvKiBIYXJkd2FyZSBJbXBsZW1lbnRhdGlvbiBSZWdpc3RlciAwICovCisjZGVmaW5lIEhJRDBfRU1DUAkoMTw8MzEpCQkvKiBFbmFibGUgTWFjaGluZSBDaGVjayBwaW4gKi8KKyNkZWZpbmUgSElEMF9FQkEJKDE8PDI5KQkJLyogRW5hYmxlIEJ1cyBBZGRyZXNzIFBhcml0eSAqLworI2RlZmluZSBISUQwX0VCRAkoMTw8MjgpCQkvKiBFbmFibGUgQnVzIERhdGEgUGFyaXR5ICovCisjZGVmaW5lIEhJRDBfU0JDTEsJKDE8PDI3KQorI2RlZmluZSBISUQwX0VJQ0UJKDE8PDI2KQorI2RlZmluZSBISUQwX1RCRU4JKDE8PDI2KQkJLyogVGltZWJhc2UgZW5hYmxlIC0gNzQ1eCAqLworI2RlZmluZSBISUQwX0VDTEsJKDE8PDI1KQorI2RlZmluZSBISUQwX1BBUgkoMTw8MjQpCisjZGVmaW5lIEhJRDBfU1RFTgkoMTw8MjQpCQkvKiBTb2Z0d2FyZSB0YWJsZSBzZWFyY2ggZW5hYmxlIC0gNzQ1eCAqLworI2RlZmluZSBISUQwX0hJR0hfQkFUCSgxPDwyMykJCS8qIEVuYWJsZSBoaWdoIEJBVHMgLSA3NDU1ICovCisjZGVmaW5lIEhJRDBfRE9aRQkoMTw8MjMpCisjZGVmaW5lIEhJRDBfTkFQCSgxPDwyMikKKyNkZWZpbmUgSElEMF9TTEVFUAkoMTw8MjEpCisjZGVmaW5lIEhJRDBfRFBNCSgxPDwyMCkKKyNkZWZpbmUgSElEMF9CSFRDTFIJKDE8PDE4KQkJLyogQ2xlYXIgYnJhbmNoIGhpc3RvcnkgdGFibGUgLSA3NDUwICovCisjZGVmaW5lIEhJRDBfWEFFTgkoMTw8MTcpCQkvKiBFeHRlbmRlZCBhZGRyZXNzaW5nIGVuYWJsZSAtIDc0NTAgKi8KKyNkZWZpbmUgSElEMF9OSFIJKDE8PDE2KQkJLyogTm90IGhhcmQgcmVzZXQgKHNvZnR3YXJlIGJpdC03NDUwKSovCisjZGVmaW5lIEhJRDBfSUNFCSgxPDwxNSkJCS8qIEluc3RydWN0aW9uIENhY2hlIEVuYWJsZSAqLworI2RlZmluZSBISUQwX0RDRQkoMTw8MTQpCQkvKiBEYXRhIENhY2hlIEVuYWJsZSAqLworI2RlZmluZSBISUQwX0lMT0NLCSgxPDwxMykJCS8qIEluc3RydWN0aW9uIENhY2hlIExvY2sgKi8KKyNkZWZpbmUgSElEMF9ETE9DSwkoMTw8MTIpCQkvKiBEYXRhIENhY2hlIExvY2sgKi8KKyNkZWZpbmUgSElEMF9JQ0ZJCSgxPDwxMSkJCS8qIEluc3RyLiBDYWNoZSBGbGFzaCBJbnZhbGlkYXRlICovCisjZGVmaW5lIEhJRDBfRENJCSgxPDwxMCkJCS8qIERhdGEgQ2FjaGUgSW52YWxpZGF0ZSAqLworI2RlZmluZSBISUQwX1NQRAkoMTw8OSkJCS8qIFNwZWN1bGF0aXZlIGRpc2FibGUgKi8KKyNkZWZpbmUgSElEMF9TR0UJKDE8PDcpCQkvKiBTdG9yZSBHYXRoZXJpbmcgRW5hYmxlICovCisjZGVmaW5lIEhJRDBfU0lFRAkoMTw8NykJCS8qIFNlcmlhbCBJbnN0ci4gRXhlY3V0aW9uIFtEaXNhYmxlXSAqLworI2RlZmluZSBISUQwX0RGQ0EJKDE8PDYpCQkvKiBEYXRhIENhY2hlIEZsdXNoIEFzc2lzdCAqLworI2RlZmluZSBISUQwX0xSU1RLCSgxPDw0KQkJLyogTGluayByZWdpc3RlciBzdGFjayAtIDc0NXggKi8KKyNkZWZpbmUgSElEMF9CVElDCSgxPDw1KQkJLyogQnJhbmNoIFRhcmdldCBJbnN0ciBDYWNoZSBFbmFibGUgKi8KKyNkZWZpbmUgSElEMF9BQkUJKDE8PDMpCQkvKiBBZGRyZXNzIEJyb2FkY2FzdCBFbmFibGUgKi8KKyNkZWZpbmUgSElEMF9GT0xECSgxPDwzKQkJLyogQnJhbmNoIEZvbGRpbmcgZW5hYmxlIC0gNzQ1eCAqLworI2RlZmluZSBISUQwX0JIVEUJKDE8PDIpCQkvKiBCcmFuY2ggSGlzdG9yeSBUYWJsZSBFbmFibGUgKi8KKyNkZWZpbmUgSElEMF9CVENECSgxPDwxKQkJLyogQnJhbmNoIHRhcmdldCBjYWNoZSBkaXNhYmxlICovCisjZGVmaW5lIEhJRDBfTk9QRFNUCSgxPDwxKQkJLyogTm8tb3AgZHN0LCBkc3R0LCBldGMuIGluc3RyLiAqLworI2RlZmluZSBISUQwX05PUFRJCSgxPDwwKQkJLyogTm8tb3AgZGNidCBhbmQgZGNic3QgaW5zdHIuICovCisKKyNkZWZpbmUgU1BSTl9ISUQxCTB4M0YxCQkvKiBIYXJkd2FyZSBJbXBsZW1lbnRhdGlvbiBSZWdpc3RlciAxICovCisjZGVmaW5lIEhJRDFfRU1DUAkoMTw8MzEpCQkvKiA3NDUwIE1hY2hpbmUgQ2hlY2sgUGluIEVuYWJsZSAqLworI2RlZmluZSBISUQxX0RGUwkoMTw8MjIpCQkvKiA3NDQ3QSBEeW5hbWljIEZyZXF1ZW5jeSBTY2FsaW5nICovCisjZGVmaW5lIEhJRDFfUEMwCSgxPDwxNikJCS8qIDc0NTAgUExMX0NGR1swXSAqLworI2RlZmluZSBISUQxX1BDMQkoMTw8MTUpCQkvKiA3NDUwIFBMTF9DRkdbMV0gKi8KKyNkZWZpbmUgSElEMV9QQzIJKDE8PDE0KQkJLyogNzQ1MCBQTExfQ0ZHWzJdICovCisjZGVmaW5lIEhJRDFfUEMzCSgxPDwxMykJCS8qIDc0NTAgUExMX0NGR1szXSAqLworI2RlZmluZSBISUQxX1NZTkNCRQkoMTw8MTEpCQkvKiA3NDUwIEFCRSBmb3Igc3luYywgZWllaW8gKi8KKyNkZWZpbmUgSElEMV9BQkUJKDE8PDEwKQkJLyogNzQ1MCBBZGRyZXNzIEJyb2FkY2FzdCBFbmFibGUgKi8KKyNkZWZpbmUgU1BSTl9ISUQyCTB4M0Y4CQkvKiBIYXJkd2FyZSBJbXBsZW1lbnRhdGlvbiBSZWdpc3RlciAyICovCisjZGVmaW5lIFNQUk5fSUFCUgkweDNGMgkvKiBJbnN0cnVjdGlvbiBBZGRyZXNzIEJyZWFrcG9pbnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BSTl9ISUQ0CTB4M0Y0CQkvKiA5NzAgSElENCAqLworI2RlZmluZSBTUFJOX0hJRDUJMHgzRjYJCS8qIDk3MCBISUQ1ICovCisjaWYgIWRlZmluZWQoU1BSTl9JQUMxKSAmJiAhZGVmaW5lZChTUFJOX0lBQzIpCisjZGVmaW5lIFNQUk5fSUFDMQkweDNGNAkJLyogSW5zdHJ1Y3Rpb24gQWRkcmVzcyBDb21wYXJlIDEgKi8KKyNkZWZpbmUgU1BSTl9JQUMyCTB4M0Y1CQkvKiBJbnN0cnVjdGlvbiBBZGRyZXNzIENvbXBhcmUgMiAqLworI2VuZGlmCisjZGVmaW5lIFNQUk5fSUJBVDBMCTB4MjExCQkvKiBJbnN0cnVjdGlvbiBCQVQgMCBMb3dlciBSZWdpc3RlciAqLworI2RlZmluZSBTUFJOX0lCQVQwVQkweDIxMAkJLyogSW5zdHJ1Y3Rpb24gQkFUIDAgVXBwZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BSTl9JQkFUMUwJMHgyMTMJCS8qIEluc3RydWN0aW9uIEJBVCAxIExvd2VyIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQUk5fSUJBVDFVCTB4MjEyCQkvKiBJbnN0cnVjdGlvbiBCQVQgMSBVcHBlciBSZWdpc3RlciAqLworI2RlZmluZSBTUFJOX0lCQVQyTAkweDIxNQkJLyogSW5zdHJ1Y3Rpb24gQkFUIDIgTG93ZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BSTl9JQkFUMlUJMHgyMTQJCS8qIEluc3RydWN0aW9uIEJBVCAyIFVwcGVyIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQUk5fSUJBVDNMCTB4MjE3CQkvKiBJbnN0cnVjdGlvbiBCQVQgMyBMb3dlciBSZWdpc3RlciAqLworI2RlZmluZSBTUFJOX0lCQVQzVQkweDIxNgkJLyogSW5zdHJ1Y3Rpb24gQkFUIDMgVXBwZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BSTl9JQkFUNEwJMHgyMzEJCS8qIEluc3RydWN0aW9uIEJBVCA0IExvd2VyIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQUk5fSUJBVDRVCTB4MjMwCQkvKiBJbnN0cnVjdGlvbiBCQVQgNCBVcHBlciBSZWdpc3RlciAqLworI2RlZmluZSBTUFJOX0lCQVQ1TAkweDIzMwkJLyogSW5zdHJ1Y3Rpb24gQkFUIDUgTG93ZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BSTl9JQkFUNVUJMHgyMzIJCS8qIEluc3RydWN0aW9uIEJBVCA1IFVwcGVyIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQUk5fSUJBVDZMCTB4MjM1CQkvKiBJbnN0cnVjdGlvbiBCQVQgNiBMb3dlciBSZWdpc3RlciAqLworI2RlZmluZSBTUFJOX0lCQVQ2VQkweDIzNAkJLyogSW5zdHJ1Y3Rpb24gQkFUIDYgVXBwZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BSTl9JQkFUN0wJMHgyMzcJCS8qIEluc3RydWN0aW9uIEJBVCA3IExvd2VyIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQUk5fSUJBVDdVCTB4MjM2CQkvKiBJbnN0cnVjdGlvbiBCQVQgNyBVcHBlciBSZWdpc3RlciAqLworI2RlZmluZSBTUFJOX0lDTVAJMHgzRDUJCS8qIEluc3RydWN0aW9uIFRMQiBDb21wYXJlIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQUk5fSUNUQwkweDNGQgkvKiBJbnN0cnVjdGlvbiBDYWNoZSBUaHJvdHRsaW5nIENvbnRyb2wgUmVnICovCisjZGVmaW5lIFNQUk5fSUNUUkwJMHgzRjMJLyogMTAxMSA3NDUwIGljYWNoZSBhbmQgaW50ZXJydXB0IGN0cmwgKi8KKyNkZWZpbmUgSUNUUkxfRUlDRQkweDA4MDAwMDAwCS8qIGVuYWJsZSBpY2FjaGUgcGFyaXR5IGVycnMgKi8KKyNkZWZpbmUgSUNUUkxfRURDCTB4MDQwMDAwMDAJLyogZW5hYmxlIGRjYWNoZSBwYXJpdHkgZXJycyAqLworI2RlZmluZSBJQ1RSTF9FSUNQCTB4MDAwMDAxMDAJLyogZW5hYmxlIGljYWNoZSBwYXIuIGNoZWNrICovCisjZGVmaW5lIFNQUk5fSU1JU1MJMHgzRDQJCS8qIEluc3RydWN0aW9uIFRMQiBNaXNzIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQUk5fSU1NUgkweDI3RQkJLyogSW50ZXJuYWwgTWVtb3J5IE1hcCBSZWdpc3RlciAqLworI2RlZmluZSBTUFJOX0wyQ1IJMHgzRjkJCS8qIExldmVsIDIgQ2FjaGUgQ29udHJvbCBSZWdzaXRlciAqLworI2RlZmluZSBTUFJOX0wyQ1IyCTB4M2Y4CisjZGVmaW5lIEwyQ1JfTDJFCQkweDgwMDAwMDAwCS8qIEwyIGVuYWJsZSAqLworI2RlZmluZSBMMkNSX0wyUEUJCTB4NDAwMDAwMDAJLyogTDIgcGFyaXR5IGVuYWJsZSAqLworI2RlZmluZSBMMkNSX0wyU0laX01BU0sJCTB4MzAwMDAwMDAJLyogTDIgc2l6ZSBtYXNrICovCisjZGVmaW5lIEwyQ1JfTDJTSVpfMjU2S0IJMHgxMDAwMDAwMAkvKiBMMiBzaXplIDI1NktCICovCisjZGVmaW5lIEwyQ1JfTDJTSVpfNTEyS0IJMHgyMDAwMDAwMAkvKiBMMiBzaXplIDUxMktCICovCisjZGVmaW5lIEwyQ1JfTDJTSVpfMU1CCQkweDMwMDAwMDAwCS8qIEwyIHNpemUgMU1CICovCisjZGVmaW5lIEwyQ1JfTDJDTEtfTUFTSwkJMHgwZTAwMDAwMAkvKiBMMiBjbG9jayBtYXNrICovCisjZGVmaW5lIEwyQ1JfTDJDTEtfRElTQUJMRUQJMHgwMDAwMDAwMAkvKiBMMiBjbG9jayBkaXNhYmxlZCAqLworI2RlZmluZSBMMkNSX0wyQ0xLX0RJVjEJCTB4MDIwMDAwMDAJLyogTDIgY2xvY2sgLyAxICovCisjZGVmaW5lIEwyQ1JfTDJDTEtfRElWMV81CTB4MDQwMDAwMDAJLyogTDIgY2xvY2sgLyAxLjUgKi8KKyNkZWZpbmUgTDJDUl9MMkNMS19ESVYyCQkweDA4MDAwMDAwCS8qIEwyIGNsb2NrIC8gMiAqLworI2RlZmluZSBMMkNSX0wyQ0xLX0RJVjJfNQkweDBhMDAwMDAwCS8qIEwyIGNsb2NrIC8gMi41ICovCisjZGVmaW5lIEwyQ1JfTDJDTEtfRElWMwkJMHgwYzAwMDAwMAkvKiBMMiBjbG9jayAvIDMgKi8KKyNkZWZpbmUgTDJDUl9MMlJBTV9NQVNLCQkweDAxODAwMDAwCS8qIEwyIFJBTSB0eXBlIG1hc2sgKi8KKyNkZWZpbmUgTDJDUl9MMlJBTV9GTE9XCQkweDAwMDAwMDAwCS8qIEwyIFJBTSBmbG93IHRocm91Z2ggKi8KKyNkZWZpbmUgTDJDUl9MMlJBTV9QSVBFCQkweDAxMDAwMDAwCS8qIEwyIFJBTSBwaXBlbGluZWQgKi8KKyNkZWZpbmUgTDJDUl9MMlJBTV9QSVBFX0xXCTB4MDE4MDAwMDAJLyogTDIgUkFNIHBpcGVsaW5lZCBsYXRld3IgKi8KKyNkZWZpbmUgTDJDUl9MMkRPCQkweDAwNDAwMDAwCS8qIEwyIGRhdGEgb25seSAqLworI2RlZmluZSBMMkNSX0wySQkJMHgwMDIwMDAwMAkvKiBMMiBnbG9iYWwgaW52YWxpZGF0ZSAqLworI2RlZmluZSBMMkNSX0wyQ1RMCQkweDAwMTAwMDAwCS8qIEwyIFJBTSBjb250cm9sICovCisjZGVmaW5lIEwyQ1JfTDJXVAkJMHgwMDA4MDAwMAkvKiBMMiB3cml0ZS10aHJvdWdoICovCisjZGVmaW5lIEwyQ1JfTDJUUwkJMHgwMDA0MDAwMAkvKiBMMiB0ZXN0IHN1cHBvcnQgKi8KKyNkZWZpbmUgTDJDUl9MMk9IX01BU0sJCTB4MDAwMzAwMDAJLyogTDIgb3V0cHV0IGhvbGQgbWFzayAqLworI2RlZmluZSBMMkNSX0wyT0hfMF81CQkweDAwMDAwMDAwCS8qIEwyIG91dHB1dCBob2xkIDAuNSBucyAqLworI2RlZmluZSBMMkNSX0wyT0hfMV8wCQkweDAwMDEwMDAwCS8qIEwyIG91dHB1dCBob2xkIDEuMCBucyAqLworI2RlZmluZSBMMkNSX0wyU0wJCTB4MDAwMDgwMDAJLyogTDIgRExMIHNsb3cgKi8KKyNkZWZpbmUgTDJDUl9MMkRGCQkweDAwMDA0MDAwCS8qIEwyIGRpZmZlcmVudGlhbCBjbG9jayAqLworI2RlZmluZSBMMkNSX0wyQllQCQkweDAwMDAyMDAwCS8qIEwyIERMTCBieXBhc3MgKi8KKyNkZWZpbmUgTDJDUl9MMklQCQkweDAwMDAwMDAxCS8qIEwyIEdJIGluIHByb2dyZXNzICovCisjZGVmaW5lIEwyQ1JfTDJJT183NDV4CQkweDAwMTAwMDAwCS8qIEwyIGluc3RyLiBvbmx5ICg3NDV4KSAqLworI2RlZmluZSBMMkNSX0wyRE9fNzQ1eAkJMHgwMDAxMDAwMAkvKiBMMiBkYXRhIG9ubHkgKDc0NXgpICovCisjZGVmaW5lIEwyQ1JfTDJSRVBfNzQ1eAkJMHgwMDAwMTAwMAkvKiBMMiByZXBsLiBhbGdvcml0aG0gKDc0NXgpICovCisjZGVmaW5lIEwyQ1JfTDJIV0ZfNzQ1eAkJMHgwMDAwMDgwMAkvKiBMMiBoYXJkd2FyZSBmbHVzaCAoNzQ1eCkgKi8KKyNkZWZpbmUgU1BSTl9MM0NSCQkweDNGQQkvKiBMZXZlbCAzIENhY2hlIENvbnRyb2wgUmVnc2l0ZXIgKi8KKyNkZWZpbmUgTDNDUl9MM0UJCTB4ODAwMDAwMDAJLyogTDMgZW5hYmxlICovCisjZGVmaW5lIEwzQ1JfTDNQRQkJMHg0MDAwMDAwMAkvKiBMMyBkYXRhIHBhcml0eSBlbmFibGUgKi8KKyNkZWZpbmUgTDNDUl9MM0FQRQkJMHgyMDAwMDAwMAkvKiBMMyBhZGRyIHBhcml0eSBlbmFibGUgKi8KKyNkZWZpbmUgTDNDUl9MM1NJWgkJMHgxMDAwMDAwMAkvKiBMMyBzaXplICovCisjZGVmaW5lIEwzQ1JfTDNDTEtFTgkJMHgwODAwMDAwMAkvKiBMMyBjbG9jayBlbmFibGUgKi8KKyNkZWZpbmUgTDNDUl9MM1JFUwkJMHgwNDAwMDAwMAkvKiBMMyBzcGVjaWFsIHJlc2VydmVkIGJpdCAqLworI2RlZmluZSBMM0NSX0wzQ0xLRElWCQkweDAzODAwMDAwCS8qIEwzIGNsb2NrIGRpdmlzb3IgKi8KKyNkZWZpbmUgTDNDUl9MM0lPCQkweDAwNDAwMDAwCS8qIEwzIGluc3RydWN0aW9uIG9ubHkgKi8KKyNkZWZpbmUgTDNDUl9MM1NQTwkJMHgwMDA0MDAwMAkvKiBMMyBzYW1wbGUgcG9pbnQgb3ZlcnJpZGUgKi8KKyNkZWZpbmUgTDNDUl9MM0NLU1AJCTB4MDAwMzAwMDAJLyogTDMgY2xvY2sgc2FtcGxlIHBvaW50ICovCisjZGVmaW5lIEwzQ1JfTDNQU1AJCTB4MDAwMGUwMDAJLyogTDMgUC1jbG9jayBzYW1wbGUgcG9pbnQgKi8KKyNkZWZpbmUgTDNDUl9MM1JFUAkJMHgwMDAwMTAwMAkvKiBMMyByZXBsYWNlbWVudCBhbGdvcml0aG0gKi8KKyNkZWZpbmUgTDNDUl9MM0hXRgkJMHgwMDAwMDgwMAkvKiBMMyBoYXJkd2FyZSBmbHVzaCAqLworI2RlZmluZSBMM0NSX0wzSQkJMHgwMDAwMDQwMAkvKiBMMyBnbG9iYWwgaW52YWxpZGF0ZSAqLworI2RlZmluZSBMM0NSX0wzUlQJCTB4MDAwMDAzMDAJLyogTDMgU1JBTSB0eXBlICovCisjZGVmaW5lIEwzQ1JfTDNOSVJDQQkJMHgwMDAwMDA4MAkvKiBMMyBub24taW50ZWdlciByYXRpbyBjbG9jayBhZGouICovCisjZGVmaW5lIEwzQ1JfTDNETwkJMHgwMDAwMDA0MAkvKiBMMyBkYXRhIG9ubHkgbW9kZSAqLworI2RlZmluZSBMM0NSX1BNRU4JCTB4MDAwMDAwMDQJLyogTDMgcHJpdmF0ZSBtZW1vcnkgZW5hYmxlICovCisjZGVmaW5lIEwzQ1JfUE1TSVoJCTB4MDAwMDAwMDEJLyogTDMgcHJpdmF0ZSBtZW1vcnkgc2l6ZSAqLworI2RlZmluZSBTUFJOX01TU0NSMAkweDNmNgkvKiBNZW1vcnkgU3Vic3lzdGVtIENvbnRyb2wgUmVnaXN0ZXIgMCAqLworI2RlZmluZSBTUFJOX01TU1NSMAkweDNmNwkvKiBNZW1vcnkgU3Vic3lzdGVtIFN0YXR1cyBSZWdpc3RlciAxICovCisjZGVmaW5lIFNQUk5fTERTVENSCTB4M2Y4CS8qIExvYWQvU3RvcmUgY29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBTUFJOX0xEU1REQgkweDNmNAkvKiAqLworI2RlZmluZSBTUFJOX0xSCQkweDAwOAkvKiBMaW5rIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQUk5fTU1DUjAJMHgzQjgJLyogTW9uaXRvciBNb2RlIENvbnRyb2wgUmVnaXN0ZXIgMCAqLworI2RlZmluZSBTUFJOX01NQ1IxCTB4M0JDCS8qIE1vbml0b3IgTW9kZSBDb250cm9sIFJlZ2lzdGVyIDEgKi8KKyNpZm5kZWYgU1BSTl9QSVIKKyNkZWZpbmUgU1BSTl9QSVIJMHgzRkYJLyogUHJvY2Vzc29yIElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyICovCisjZW5kaWYKKyNkZWZpbmUgU1BSTl9QTUMxCTB4M0I5CS8qIFBlcmZvcm1hbmNlIENvdW50ZXIgUmVnaXN0ZXIgMSAqLworI2RlZmluZSBTUFJOX1BNQzIJMHgzQkEJLyogUGVyZm9ybWFuY2UgQ291bnRlciBSZWdpc3RlciAyICovCisjZGVmaW5lIFNQUk5fUE1DMwkweDNCRAkvKiBQZXJmb3JtYW5jZSBDb3VudGVyIFJlZ2lzdGVyIDMgKi8KKyNkZWZpbmUgU1BSTl9QTUM0CTB4M0JFCS8qIFBlcmZvcm1hbmNlIENvdW50ZXIgUmVnaXN0ZXIgNCAqLworI2RlZmluZSBTUFJOX1BURUhJCTB4M0Q1CS8qIDk4MSA3NDUwIFBURSBISSB3b3JkIChTL1cgVExCIGxvYWQpICovCisjZGVmaW5lIFNQUk5fUFRFTE8JMHgzRDYJLyogOTgyIDc0NTAgUFRFIExPIHdvcmQgKFMvVyBUTEIgbG9hZCkgKi8KKyNkZWZpbmUgU1BSTl9QVlIJMHgxMUYJLyogUHJvY2Vzc29yIFZlcnNpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BSTl9SUEEJMHgzRDYJLyogUmVxdWlyZWQgUGh5c2ljYWwgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZSBTUFJOX1NEQQkweDNCRgkvKiBTYW1wbGVkIERhdGEgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZSBTUFJOX1NEUjEJMHgwMTkJLyogTU1VIEhhc2ggQmFzZSBSZWdpc3RlciAqLworI2RlZmluZSBTUFJOX1NJQQkweDNCQgkvKiBTYW1wbGVkIEluc3RydWN0aW9uIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BSTl9TUFJHMAkweDExMAkvKiBTcGVjaWFsIFB1cnBvc2UgUmVnaXN0ZXIgR2VuZXJhbCAwICovCisjZGVmaW5lIFNQUk5fU1BSRzEJMHgxMTEJLyogU3BlY2lhbCBQdXJwb3NlIFJlZ2lzdGVyIEdlbmVyYWwgMSAqLworI2RlZmluZSBTUFJOX1NQUkcyCTB4MTEyCS8qIFNwZWNpYWwgUHVycG9zZSBSZWdpc3RlciBHZW5lcmFsIDIgKi8KKyNkZWZpbmUgU1BSTl9TUFJHMwkweDExMwkvKiBTcGVjaWFsIFB1cnBvc2UgUmVnaXN0ZXIgR2VuZXJhbCAzICovCisjZGVmaW5lIFNQUk5fU1BSRzQJMHgxMTQJLyogU3BlY2lhbCBQdXJwb3NlIFJlZ2lzdGVyIEdlbmVyYWwgNCAqLworI2RlZmluZSBTUFJOX1NQUkc1CTB4MTE1CS8qIFNwZWNpYWwgUHVycG9zZSBSZWdpc3RlciBHZW5lcmFsIDUgKi8KKyNkZWZpbmUgU1BSTl9TUFJHNgkweDExNgkvKiBTcGVjaWFsIFB1cnBvc2UgUmVnaXN0ZXIgR2VuZXJhbCA2ICovCisjZGVmaW5lIFNQUk5fU1BSRzcJMHgxMTcJLyogU3BlY2lhbCBQdXJwb3NlIFJlZ2lzdGVyIEdlbmVyYWwgNyAqLworI2RlZmluZSBTUFJOX1NSUjAJMHgwMUEJLyogU2F2ZS9SZXN0b3JlIFJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUgU1BSTl9TUlIxCTB4MDFCCS8qIFNhdmUvUmVzdG9yZSBSZWdpc3RlciAxICovCisjaWZuZGVmIFNQUk5fU1ZSCisjZGVmaW5lIFNQUk5fU1ZSCTB4MTFFCS8qIFN5c3RlbSBWZXJzaW9uIFJlZ2lzdGVyICovCisjZW5kaWYKKyNkZWZpbmUgU1BSTl9USFJNMQkweDNGQwkJLyogVGhlcm1hbCBNYW5hZ2VtZW50IFJlZ2lzdGVyIDEgKi8KKy8qIHRoZXNlIGJpdHMgd2VyZSBkZWZpbmVkIGluIGludmVydGVkIGVuZGlhbiBzZW5zZSBvcmlnaW5hbGx5LCB1Z2gsIGNvbmZ1c2luZyAqLworI2RlZmluZSBUSFJNMV9USU4JKDEgPDwgMzEpCisjZGVmaW5lIFRIUk0xX1RJVgkoMSA8PCAzMCkKKyNkZWZpbmUgVEhSTTFfVEhSRVMoeCkJKCh4JjB4N2YpPDwyMykKKyNkZWZpbmUgVEhSTTNfU0lUVih4KQkoKHgmMHgzZmZmKTw8MSkKKyNkZWZpbmUgVEhSTTFfVElECSgxPDwyKQorI2RlZmluZSBUSFJNMV9USUUJKDE8PDEpCisjZGVmaW5lIFRIUk0xX1YJCSgxPDwwKQorI2RlZmluZSBTUFJOX1RIUk0yCTB4M0ZECQkvKiBUaGVybWFsIE1hbmFnZW1lbnQgUmVnaXN0ZXIgMiAqLworI2RlZmluZSBTUFJOX1RIUk0zCTB4M0ZFCQkvKiBUaGVybWFsIE1hbmFnZW1lbnQgUmVnaXN0ZXIgMyAqLworI2RlZmluZSBUSFJNM19FCQkoMTw8MCkKKyNkZWZpbmUgU1BSTl9UTEJNSVNTCTB4M0Q0CQkvKiA5ODAgNzQ1MCBUTEIgTWlzcyBSZWdpc3RlciAqLworI2RlZmluZSBTUFJOX1VNTUNSMAkweDNBOAkvKiBVc2VyIE1vbml0b3IgTW9kZSBDb250cm9sIFJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUgU1BSTl9VTU1DUjEJMHgzQUMJLyogVXNlciBNb25pdG9yIE1vZGUgQ29udHJvbCBSZWdpc3RlciAwICovCisjZGVmaW5lIFNQUk5fVVBNQzEJMHgzQTkJLyogVXNlciBQZXJmb3JtYW5jZSBDb3VudGVyIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgU1BSTl9VUE1DMgkweDNBQQkvKiBVc2VyIFBlcmZvcm1hbmNlIENvdW50ZXIgUmVnaXN0ZXIgMiAqLworI2RlZmluZSBTUFJOX1VQTUMzCTB4M0FECS8qIFVzZXIgUGVyZm9ybWFuY2UgQ291bnRlciBSZWdpc3RlciAzICovCisjZGVmaW5lIFNQUk5fVVBNQzQJMHgzQUUJLyogVXNlciBQZXJmb3JtYW5jZSBDb3VudGVyIFJlZ2lzdGVyIDQgKi8KKyNkZWZpbmUgU1BSTl9VU0lBCTB4M0FCCS8qIFVzZXIgU2FtcGxlZCBJbnN0cnVjdGlvbiBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQUk5fVlJTQVZFCTB4MTAwCS8qIFZlY3RvciBSZWdpc3RlciBTYXZlIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQUk5fWEVSCTB4MDAxCS8qIEZpeGVkIFBvaW50IEV4Y2VwdGlvbiBSZWdpc3RlciAqLworCisvKiBCaXQgZGVmaW5pdGlvbnMgZm9yIE1NQ1IwIGFuZCBQTUMxIC8gUE1DMi4gKi8KKyNkZWZpbmUgTU1DUjBfUE1DMV9DWUNMRVMJKDEgPDwgNykKKyNkZWZpbmUgTU1DUjBfUE1DMV9JQ0FDSEVNSVNTCSg1IDw8IDcpCisjZGVmaW5lIE1NQ1IwX1BNQzFfRFRMQgkJKDYgPDwgNykKKyNkZWZpbmUgTU1DUjBfUE1DMl9EQ0FDSEVNSVNTCTB4NgorI2RlZmluZSBNTUNSMF9QTUMyX0NZQ0xFUwkweDEKKyNkZWZpbmUgTU1DUjBfUE1DMl9JVExCCQkweDcKKyNkZWZpbmUgTU1DUjBfUE1DMl9MT0FETUlTU1RJTUUJMHg1CisjZGVmaW5lIE1NQ1IwX1BNWEUJKDEgPDwgMjYpCisKKy8qIFByb2Nlc3NvciBWZXJzaW9uIFJlZ2lzdGVyICovCisKKy8qIFByb2Nlc3NvciBWZXJzaW9uIFJlZ2lzdGVyIChQVlIpIGZpZWxkIGV4dHJhY3Rpb24gKi8KKworI2RlZmluZSBQVlJfVkVSKHB2cikJKCgocHZyKSA+PiAgMTYpICYgMHhGRkZGKQkvKiBWZXJzaW9uIGZpZWxkICovCisjZGVmaW5lIFBWUl9SRVYocHZyKQkoKChwdnIpID4+ICAgMCkgJiAweEZGRkYpCS8qIFJldmlzb24gZmllbGQgKi8KKworLyoKKyAqIElCTSBoYXMgZnVydGhlciBzdWJkaXZpZGVkIHRoZSBzdGFuZGFyZCBQb3dlclBDIDE2LWJpdCB2ZXJzaW9uIGFuZAorICogcmV2aXNpb24gc3ViZmllbGRzIG9mIHRoZSBQVlIgZm9yIHRoZSBQb3dlclBDIDQwM3MgaW50byB0aGUgZm9sbG93aW5nOgorICovCisKKyNkZWZpbmUgUFZSX0ZBTShwdnIpCSgoKHB2cikgPj4gMjApICYgMHhGRkYpCS8qIEZhbWlseSBmaWVsZCAqLworI2RlZmluZSBQVlJfTUVNKHB2cikJKCgocHZyKSA+PiAxNikgJiAweEYpCS8qIE1lbWJlciBmaWVsZCAqLworI2RlZmluZSBQVlJfQ09SRShwdnIpCSgoKHB2cikgPj4gMTIpICYgMHhGKQkvKiBDb3JlIGZpZWxkICovCisjZGVmaW5lIFBWUl9DRkcocHZyKQkoKChwdnIpID4+ICA4KSAmIDB4RikJLyogQ29uZmlndXJhdGlvbiBmaWVsZCAqLworI2RlZmluZSBQVlJfTUFKKHB2cikJKCgocHZyKSA+PiAgNCkgJiAweEYpCS8qIE1ham9yIHJldmlzaW9uIGZpZWxkICovCisjZGVmaW5lIFBWUl9NSU4ocHZyKQkoKChwdnIpID4+ICAwKSAmIDB4RikJLyogTWlub3IgcmV2aXNpb24gZmllbGQgKi8KKworLyogUHJvY2Vzc29yIFZlcnNpb24gTnVtYmVycyAqLworCisjZGVmaW5lIFBWUl80MDNHQQkweDAwMjAwMDAwCisjZGVmaW5lIFBWUl80MDNHQgkweDAwMjAwMTAwCisjZGVmaW5lIFBWUl80MDNHQwkweDAwMjAwMjAwCisjZGVmaW5lIFBWUl80MDNHQ1gJMHgwMDIwMTQwMAorI2RlZmluZSBQVlJfNDA1R1AJMHg0MDExMDAwMAorI2RlZmluZSBQVlJfU1RCMDNYWFgJMHg0MDMxMDAwMAorI2RlZmluZSBQVlJfTlA0MDVICTB4NDE0MTAwMDAKKyNkZWZpbmUgUFZSX05QNDA1TAkweDQxNjEwMDAwCisjZGVmaW5lIFBWUl80NDBHUF9SQgkweDQwMTIwNDQwCisjZGVmaW5lIFBWUl80NDBHUF9SQzEJMHg0MDEyMDQ4MQorI2RlZmluZSBQVlJfNDQwR1BfUkMyCTB4NDAyMDA0ODEKKyNkZWZpbmUgUFZSXzQ0MEdYX1JBCTB4NTFiMjE4NTAKKyNkZWZpbmUgUFZSXzQ0MEdYX1JCCTB4NTFiMjE4NTEKKyNkZWZpbmUgUFZSXzQ0MEdYX1JDCTB4NTFiMjE4OTIKKyNkZWZpbmUgUFZSXzYwMQkJMHgwMDAxMDAwMAorI2RlZmluZSBQVlJfNjAyCQkweDAwMDUwMDAwCisjZGVmaW5lIFBWUl82MDMJCTB4MDAwMzAwMDAKKyNkZWZpbmUgUFZSXzYwM2UJMHgwMDA2MDAwMAorI2RlZmluZSBQVlJfNjAzZXYJMHgwMDA3MDAwMAorI2RlZmluZSBQVlJfNjAzcgkweDAwMDcxMDAwCisjZGVmaW5lIFBWUl82MDQJCTB4MDAwNDAwMDAKKyNkZWZpbmUgUFZSXzYwNGUJMHgwMDA5MDAwMAorI2RlZmluZSBQVlJfNjA0cgkweDAwMEEwMDAwCisjZGVmaW5lIFBWUl82MjAJCTB4MDAxNDAwMDAKKyNkZWZpbmUgUFZSXzc0MAkJMHgwMDA4MDAwMAorI2RlZmluZSBQVlJfNzUwCQlQVlJfNzQwCisjZGVmaW5lIFBWUl83NDBQCTB4MTAwODAwMDAKKyNkZWZpbmUgUFZSXzc1MFAJUFZSXzc0MFAKKyNkZWZpbmUgUFZSXzc0MDAJMHgwMDBDMDAwMAorI2RlZmluZSBQVlJfNzQxMAkweDgwMEMwMDAwCisjZGVmaW5lIFBWUl83NDUwCTB4ODAwMDAwMDAKKyNkZWZpbmUgUFZSXzg1NDAJMHg4MDIwMDAwMAorI2RlZmluZSBQVlJfODU2MAkweDgwMjAwMDAwCisvKgorICogRm9yIHRoZSA4eHggcHJvY2Vzc29ycywgYWxsIG9mIHRoZW0gcmVwb3J0IHRoZSBzYW1lIFBWUiBmYW1pbHkgZm9yCisgKiB0aGUgUG93ZXJQQyBjb3JlLiBUaGUgdmFyaW91cyB2ZXJzaW9ucyBvZiB0aGVzZSBwcm9jZXNzb3JzIG11c3QgYmUKKyAqIGRpZmZlcmVudGlhdGVkIGJ5IHRoZSB2ZXJzaW9uIG51bWJlciBpbiB0aGUgQ29tbXVuaWNhdGlvbiBQcm9jZXNzb3IKKyAqIE1vZHVsZSAoQ1BNKS4KKyAqLworI2RlZmluZSBQVlJfODIxCQkweDAwNTAwMDAwCisjZGVmaW5lIFBWUl84MjMJCVBWUl84MjEKKyNkZWZpbmUgUFZSXzg1MAkJUFZSXzgyMQorI2RlZmluZSBQVlJfODYwCQlQVlJfODIxCisjZGVmaW5lIFBWUl84MjQwCTB4MDA4MTAxMDAKKyNkZWZpbmUgUFZSXzgyNDUJMHg4MDgxMTAxNAorI2RlZmluZSBQVlJfODI2MAlQVlJfODI0MAorCisjaWYgMAorLyogU2VnbWVudCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgU1IwCTAKKyNkZWZpbmUgU1IxCTEKKyNkZWZpbmUgU1IyCTIKKyNkZWZpbmUgU1IzCTMKKyNkZWZpbmUgU1I0CTQKKyNkZWZpbmUgU1I1CTUKKyNkZWZpbmUgU1I2CTYKKyNkZWZpbmUgU1I3CTcKKyNkZWZpbmUgU1I4CTgKKyNkZWZpbmUgU1I5CTkKKyNkZWZpbmUgU1IxMAkxMAorI2RlZmluZSBTUjExCTExCisjZGVmaW5lIFNSMTIJMTIKKyNkZWZpbmUgU1IxMwkxMworI2RlZmluZSBTUjE0CTE0CisjZGVmaW5lIFNSMTUJMTUKKyNlbmRpZgorCisvKiBNYWNyb3MgZm9yIHNldHRpbmcgYW5kIHJldHJpZXZpbmcgc3BlY2lhbCBwdXJwb3NlIHJlZ2lzdGVycyAqLworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNkZWZpbmUgbWZtc3IoKQkJKHt1bnNpZ25lZCBpbnQgcnZhbDsgXAorCQkJYXNtIHZvbGF0aWxlKCJtZm1zciAlMCIgOiAiPXIiIChydmFsKSk7IHJ2YWw7fSkKKyNkZWZpbmUgbXRtc3IodikJYXNtIHZvbGF0aWxlKCJtdG1zciAlMCIgOiA6ICJyIiAodikpCisKKyNkZWZpbmUgbWZzcHIocm4pCSh7dW5zaWduZWQgaW50IHJ2YWw7IFwKKwkJCWFzbSB2b2xhdGlsZSgibWZzcHIgJTAsIiBfX3N0cmluZ2lmeShybikgXAorCQkJCTogIj1yIiAocnZhbCkpOyBydmFsO30pCisjZGVmaW5lIG10c3ByKHJuLCB2KQlhc20gdm9sYXRpbGUoIm10c3ByICIgX19zdHJpbmdpZnkocm4pICIsJTAiIDogOiAiciIgKHYpKQorCisjZGVmaW5lIG1mc3Jpbih2KQkoe3Vuc2lnbmVkIGludCBydmFsOyBcCisJCQlhc20gdm9sYXRpbGUoIm1mc3JpbiAlMCwlMSIgOiAiPXIiIChydmFsKSA6ICJyIiAodikpOyBcCisJCQkJCXJ2YWw7fSkKKworI2RlZmluZSBwcm9jX3RyYXAoKQlhc20gdm9sYXRpbGUoInRyYXAiKQorI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworI2VuZGlmIC8qIF9fQVNNX1BQQ19SRUdTX0hfXyAqLworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9yZWdfYm9va2UuaCBiL2luY2x1ZGUvYXNtLXBwYy9yZWdfYm9va2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjAzZjhlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjL3JlZ19ib29rZS5oCkBAIC0wLDAgKzEsNDg0IEBACisvKgorICogQ29udGFpbnMgcmVnaXN0ZXIgZGVmaW5pdGlvbnMgY29tbW9uIHRvIHRoZSBCb29rIEUgUG93ZXJQQworICogc3BlY2lmaWNhdGlvbi4gIE5vdGljZSB0aGF0IHdoaWxlIHRoZSBJQk0tNDB4IHNlcmllcyBvZiBDUFVzCisgKiBhcmUgbm90IHRydWUgQm9vayBFIFBvd2VyUENzLCB0aGV5IGJvcnJvd2VkIGEgbnVtYmVyIG9mIGZlYXR1cmVzCisgKiBiZWZvcmUgQm9vayBFIHdhcyBmaW5hbGl6ZWQsIGFuZCBhcmUgaW5jbHVkZWQgaGVyZSBhcyB3ZWxsLiAgVW5mb3J0dW5hdGx5LAorICogdGhleSBzb21ldGltZXMgdXNlZCBkaWZmZXJlbnQgbG9jYXRpb25zIHRoYW4gdHJ1ZSBCb29rIEUgQ1BVcyBkaWQuCisgKi8KKyNpZmRlZiBfX0tFUk5FTF9fCisjaWZuZGVmIF9fQVNNX1BQQ19SRUdfQk9PS0VfSF9fCisjZGVmaW5lIF9fQVNNX1BQQ19SRUdfQk9PS0VfSF9fCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisvKiBEZXZpY2UgQ29udHJvbCBSZWdpc3RlcnMgKi8KK3ZvaWQgX19tdGRjcihpbnQgcmVnLCB1bnNpZ25lZCBpbnQgdmFsKTsKK3Vuc2lnbmVkIGludCBfX21mZGNyKGludCByZWcpOworI2RlZmluZSBtZmRjcihybikJCQkJCQlcCisJKHt1bnNpZ25lZCBpbnQgcnZhbDsJCQkJCVwKKwlpZiAoX19idWlsdGluX2NvbnN0YW50X3Aocm4pKQkJCQlcCisJCWFzbSB2b2xhdGlsZSgibWZkY3IgJTAsIiBfX3N0cmluZ2lmeShybikJXAorCQkgICAgICAgICAgICAgIDogIj1yIiAocnZhbCkpOwkJCVwKKwllbHNlCQkJCQkJCVwKKwkJcnZhbCA9IF9fbWZkY3Iocm4pOwkJCQlcCisJcnZhbDt9KQorCisjZGVmaW5lIG10ZGNyKHJuLCB2KQkJCQkJCVwKK2RvIHsJCQkJCQkJCVwKKwlpZiAoX19idWlsdGluX2NvbnN0YW50X3Aocm4pKQkJCQlcCisJCWFzbSB2b2xhdGlsZSgibXRkY3IgIiBfX3N0cmluZ2lmeShybikgIiwlMCIJXAorCQkJICAgICAgOiA6ICJyIiAodikpOyAJCQlcCisJZWxzZQkJCQkJCQlcCisJCV9fbXRkY3Iocm4sIHYpOwkJCQkJXAorfSB3aGlsZSAoMCkKKworLyogUi9XIG9mIGluZGlyZWN0IERDUnMgbWFrZSB1c2Ugb2Ygc3RhbmRhcmQgbmFtaW5nIGNvbnZlbnRpb25zIGZvciBEQ1JzICovCisjZGVmaW5lIG1mZGNyaShiYXNlLCByZWcpCQkJXAorKHsJCQkJCQlcCisJbXRkY3IoYmFzZSAjIyBfQ0ZHQUREUiwgYmFzZSAjIyBfICMjIHJlZyk7CVwKKwltZmRjcihiYXNlICMjIF9DRkdEQVRBKTsJCQlcCit9KQorCisjZGVmaW5lIG10ZGNyaShiYXNlLCByZWcsIGRhdGEpCQkJXAorZG8gewkJCQkJCVwKKwltdGRjcihiYXNlICMjIF9DRkdBRERSLCBiYXNlICMjIF8gIyMgcmVnKTsJXAorCW10ZGNyKGJhc2UgIyMgX0NGR0RBVEEsIGRhdGEpOwkJXAorfSB3aGlsZSAoMCkKKworLyogUGVyZm9ybWFuY2UgTW9uaXRvciBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgbWZwbXIocm4pCSh7dW5zaWduZWQgaW50IHJ2YWw7IFwKKwkJCWFzbSB2b2xhdGlsZSgibWZwbXIgJTAsIiBfX3N0cmluZ2lmeShybikgXAorCQkJCSAgICAgOiAiPXIiIChydmFsKSk7IHJ2YWw7fSkKKyNkZWZpbmUgbXRwbXIocm4sIHYpCWFzbSB2b2xhdGlsZSgibXRwbXIgIiBfX3N0cmluZ2lmeShybikgIiwlMCIgOiA6ICJyIiAodikpCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKy8qIEZyZWVzY2FsZSBCb29rIEUgUGVyZm9ybWFuY2UgTW9uaXRvciBBUFUgUmVnaXN0ZXJzICovCisjZGVmaW5lIFBNUk5fUE1DMAkweDAxMAkvKiBQZXJmb3JtYW5jZSBNb25pdG9yIENvdW50ZXIgMCAqLworI2RlZmluZSBQTVJOX1BNQzEJMHgwMTEJLyogUGVyZm9ybWFuY2UgTW9uaXRvciBDb3VudGVyIDEgKi8KKyNkZWZpbmUgUE1STl9QTUMyCTB4MDEyCS8qIFBlcmZvcm1hbmNlIE1vbml0b3IgQ291bnRlciAxICovCisjZGVmaW5lIFBNUk5fUE1DMwkweDAxMwkvKiBQZXJmb3JtYW5jZSBNb25pdG9yIENvdW50ZXIgMSAqLworI2RlZmluZSBQTVJOX1BNTENBMAkweDA5MAkvKiBQTSBMb2NhbCBDb250cm9sIEEwICovCisjZGVmaW5lIFBNUk5fUE1MQ0ExCTB4MDkxCS8qIFBNIExvY2FsIENvbnRyb2wgQTEgKi8KKyNkZWZpbmUgUE1STl9QTUxDQTIJMHgwOTIJLyogUE0gTG9jYWwgQ29udHJvbCBBMiAqLworI2RlZmluZSBQTVJOX1BNTENBMwkweDA5MwkvKiBQTSBMb2NhbCBDb250cm9sIEEzICovCisKKyNkZWZpbmUgUE1MQ0FfRkMJMHg4MDAwMDAwMAkvKiBGcmVlemUgQ291bnRlciAqLworI2RlZmluZSBQTUxDQV9GQ1MJMHg0MDAwMDAwMAkvKiBGcmVlemUgaW4gU3VwZXJ2aXNvciAqLworI2RlZmluZSBQTUxDQV9GQ1UJMHgyMDAwMDAwMAkvKiBGcmVlemUgaW4gVXNlciAqLworI2RlZmluZSBQTUxDQV9GQ00xCTB4MTAwMDAwMDAJLyogRnJlZXplIHdoZW4gUE1NPT0xICovCisjZGVmaW5lIFBNTENBX0ZDTTAJMHgwODAwMDAwMAkvKiBGcmVlemUgd2hlbiBQTU09PTAgKi8KKyNkZWZpbmUgUE1MQ0FfQ0UJMHgwNDAwMDAwMAkvKiBDb25kaXRpb24gRW5hYmxlICovCisKKyNkZWZpbmUgUE1MQ0FfRVZFTlRfTUFTSyAweDAwN2YwMDAwCS8qIEV2ZW50IGZpZWxkICovCisjZGVmaW5lIFBNTENBX0VWRU5UX1NISUZUCTE2CisKKyNkZWZpbmUgUE1STl9QTUxDQjAJMHgxMTAJLyogUE0gTG9jYWwgQ29udHJvbCBCMCAqLworI2RlZmluZSBQTVJOX1BNTENCMQkweDExMQkvKiBQTSBMb2NhbCBDb250cm9sIEIxICovCisjZGVmaW5lIFBNUk5fUE1MQ0IyCTB4MTEyCS8qIFBNIExvY2FsIENvbnRyb2wgQjIgKi8KKyNkZWZpbmUgUE1STl9QTUxDQjMJMHgxMTMJLyogUE0gTG9jYWwgQ29udHJvbCBCMyAqLworCisjZGVmaW5lIFBNTENCX1RIUkVTSE1VTF9NQVNLCTB4MDcwMAkvKiBUaHJlc2hob2xkIE11bHRpcGxlIEZpZWxkICovCisjZGVmaW5lIFBNTENCX1RIUkVTSE1VTF9TSElGVAk4CisKKyNkZWZpbmUgUE1MQ0JfVEhSRVNIT0xEX01BU0sJMHgwMDNmCS8qIFRocmVzaG9sZCBGaWVsZCAqLworI2RlZmluZSBQTUxDQl9USFJFU0hPTERfU0hJRlQJMAorCisjZGVmaW5lIFBNUk5fUE1HQzAJMHgxOTAJLyogUE0gR2xvYmFsIENvbnRyb2wgMCAqLworCisjZGVmaW5lIFBNR0MwX0ZBQwkweDgwMDAwMDAwCS8qIEZyZWV6ZSBhbGwgQ291bnRlcnMgKi8KKyNkZWZpbmUgUE1HQzBfUE1JRQkweDQwMDAwMDAwCS8qIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgUE1HQzBfRkNFQ0UJMHgyMDAwMDAwMAkvKiBGcmVlemUgY291bnRlcyBvbgorCQkJCQkgICBFbmFibGVkIENvbmRpdGlvbiBvcgorCQkJCQkgICBFdmVudCAqLworCisjZGVmaW5lIFBNUk5fVVBNQzAJMHgwMDAJLyogVXNlciBQZXJmb3JtYW5jZSBNb25pdG9yIENvdW50ZXIgMCAqLworI2RlZmluZSBQTVJOX1VQTUMxCTB4MDAxCS8qIFVzZXIgUGVyZm9ybWFuY2UgTW9uaXRvciBDb3VudGVyIDEgKi8KKyNkZWZpbmUgUE1STl9VUE1DMgkweDAwMgkvKiBVc2VyIFBlcmZvcm1hbmNlIE1vbml0b3IgQ291bnRlciAxICovCisjZGVmaW5lIFBNUk5fVVBNQzMJMHgwMDMJLyogVXNlciBQZXJmb3JtYW5jZSBNb25pdG9yIENvdW50ZXIgMSAqLworI2RlZmluZSBQTVJOX1VQTUxDQTAJMHgwODAJLyogVXNlciBQTSBMb2NhbCBDb250cm9sIEEwICovCisjZGVmaW5lIFBNUk5fVVBNTENBMQkweDA4MQkvKiBVc2VyIFBNIExvY2FsIENvbnRyb2wgQTEgKi8KKyNkZWZpbmUgUE1STl9VUE1MQ0EyCTB4MDgyCS8qIFVzZXIgUE0gTG9jYWwgQ29udHJvbCBBMiAqLworI2RlZmluZSBQTVJOX1VQTUxDQTMJMHgwODMJLyogVXNlciBQTSBMb2NhbCBDb250cm9sIEEzICovCisjZGVmaW5lIFBNUk5fVVBNTENCMAkweDEwMAkvKiBVc2VyIFBNIExvY2FsIENvbnRyb2wgQjAgKi8KKyNkZWZpbmUgUE1STl9VUE1MQ0IxCTB4MTAxCS8qIFVzZXIgUE0gTG9jYWwgQ29udHJvbCBCMSAqLworI2RlZmluZSBQTVJOX1VQTUxDQjIJMHgxMDIJLyogVXNlciBQTSBMb2NhbCBDb250cm9sIEIyICovCisjZGVmaW5lIFBNUk5fVVBNTENCMwkweDEwMwkvKiBVc2VyIFBNIExvY2FsIENvbnRyb2wgQjMgKi8KKyNkZWZpbmUgUE1STl9VUE1HQzAJMHgxODAJLyogVXNlciBQTSBHbG9iYWwgQ29udHJvbCAwICovCisKKworLyogTWFjaGluZSBTdGF0ZSBSZWdpc3RlciAoTVNSKSBGaWVsZHMgKi8KKyNkZWZpbmUgTVNSX1VDTEUJKDE8PDI2KQkvKiBVc2VyLW1vZGUgY2FjaGUgbG9jayBlbmFibGUgKi8KKyNkZWZpbmUgTVNSX1NQRQkJKDE8PDI1KQkvKiBFbmFibGUgU1BFICovCisjZGVmaW5lIE1TUl9EV0UJCSgxPDwxMCkJLyogRGVidWcgV2FpdCBFbmFibGUgKi8KKyNkZWZpbmUgTVNSX1VCTEUJKDE8PDEwKQkvKiBCVEIgbG9jayBlbmFibGUgKGU1MDApICovCisjZGVmaW5lIE1TUl9JUwkJTVNSX0lSCS8qIEluc3RydWN0aW9uIFNwYWNlICovCisjZGVmaW5lIE1TUl9EUwkJTVNSX0RSCS8qIERhdGEgU3BhY2UgKi8KKyNkZWZpbmUgTVNSX1BNTQkJKDE8PDIpCS8qIFBlcmZvcm1hbmNlIG1vbml0b3IgbWFyayBiaXQgKi8KKworLyogRGVmYXVsdCBNU1IgZm9yIGtlcm5lbCBtb2RlLiAqLworI2lmIGRlZmluZWQgKENPTkZJR180MHgpCisjZGVmaW5lIE1TUl9LRVJORUwJKE1TUl9NRXxNU1JfUkl8TVNSX0lSfE1TUl9EUnxNU1JfQ0UpCisjZWxpZiBkZWZpbmVkKENPTkZJR19CT09LRSkKKyNkZWZpbmUgTVNSX0tFUk5FTAkoTVNSX01FfE1TUl9SSXxNU1JfQ0UpCisjZW5kaWYKKworLyogU3BlY2lhbCBQdXJwb3NlIFJlZ2lzdGVycyAoU1BSTnMpKi8KKyNkZWZpbmUgU1BSTl9ERUNBUgkweDAzNgkvKiBEZWNyZW1lbnRlciBBdXRvIFJlbG9hZCBSZWdpc3RlciAqLworI2RlZmluZSBTUFJOX0lWUFIJMHgwM0YJLyogSW50ZXJydXB0IFZlY3RvciBQcmVmaXggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BSTl9VU1BSRzAJMHgxMDAJLyogVXNlciBTcGVjaWFsIFB1cnBvc2UgUmVnaXN0ZXIgR2VuZXJhbCAwICovCisjZGVmaW5lIFNQUk5fU1BSRzRSCTB4MTA0CS8qIFNwZWNpYWwgUHVycG9zZSBSZWdpc3RlciBHZW5lcmFsIDQgUmVhZCAqLworI2RlZmluZSBTUFJOX1NQUkc1UgkweDEwNQkvKiBTcGVjaWFsIFB1cnBvc2UgUmVnaXN0ZXIgR2VuZXJhbCA1IFJlYWQgKi8KKyNkZWZpbmUgU1BSTl9TUFJHNlIJMHgxMDYJLyogU3BlY2lhbCBQdXJwb3NlIFJlZ2lzdGVyIEdlbmVyYWwgNiBSZWFkICovCisjZGVmaW5lIFNQUk5fU1BSRzdSCTB4MTA3CS8qIFNwZWNpYWwgUHVycG9zZSBSZWdpc3RlciBHZW5lcmFsIDcgUmVhZCAqLworI2RlZmluZSBTUFJOX1NQUkc0VwkweDExNAkvKiBTcGVjaWFsIFB1cnBvc2UgUmVnaXN0ZXIgR2VuZXJhbCA0IFdyaXRlICovCisjZGVmaW5lIFNQUk5fU1BSRzVXCTB4MTE1CS8qIFNwZWNpYWwgUHVycG9zZSBSZWdpc3RlciBHZW5lcmFsIDUgV3JpdGUgKi8KKyNkZWZpbmUgU1BSTl9TUFJHNlcJMHgxMTYJLyogU3BlY2lhbCBQdXJwb3NlIFJlZ2lzdGVyIEdlbmVyYWwgNiBXcml0ZSAqLworI2RlZmluZSBTUFJOX1NQUkc3VwkweDExNwkvKiBTcGVjaWFsIFB1cnBvc2UgUmVnaXN0ZXIgR2VuZXJhbCA3IFdyaXRlICovCisjZGVmaW5lIFNQUk5fREJDUjIJMHgxMzYJLyogRGVidWcgQ29udHJvbCBSZWdpc3RlciAyICovCisjZGVmaW5lIFNQUk5fSUFDMwkweDEzQQkvKiBJbnN0cnVjdGlvbiBBZGRyZXNzIENvbXBhcmUgMyAqLworI2RlZmluZSBTUFJOX0lBQzQJMHgxM0IJLyogSW5zdHJ1Y3Rpb24gQWRkcmVzcyBDb21wYXJlIDQgKi8KKyNkZWZpbmUgU1BSTl9EVkMxCTB4MTNFCS8qIERhdGEgVmFsdWUgQ29tcGFyZSBSZWdpc3RlciAxICovCisjZGVmaW5lIFNQUk5fRFZDMgkweDEzRgkvKiBEYXRhIFZhbHVlIENvbXBhcmUgUmVnaXN0ZXIgMiAqLworI2RlZmluZSBTUFJOX0lWT1IwCTB4MTkwCS8qIEludGVycnVwdCBWZWN0b3IgT2Zmc2V0IFJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUgU1BSTl9JVk9SMQkweDE5MQkvKiBJbnRlcnJ1cHQgVmVjdG9yIE9mZnNldCBSZWdpc3RlciAxICovCisjZGVmaW5lIFNQUk5fSVZPUjIJMHgxOTIJLyogSW50ZXJydXB0IFZlY3RvciBPZmZzZXQgUmVnaXN0ZXIgMiAqLworI2RlZmluZSBTUFJOX0lWT1IzCTB4MTkzCS8qIEludGVycnVwdCBWZWN0b3IgT2Zmc2V0IFJlZ2lzdGVyIDMgKi8KKyNkZWZpbmUgU1BSTl9JVk9SNAkweDE5NAkvKiBJbnRlcnJ1cHQgVmVjdG9yIE9mZnNldCBSZWdpc3RlciA0ICovCisjZGVmaW5lIFNQUk5fSVZPUjUJMHgxOTUJLyogSW50ZXJydXB0IFZlY3RvciBPZmZzZXQgUmVnaXN0ZXIgNSAqLworI2RlZmluZSBTUFJOX0lWT1I2CTB4MTk2CS8qIEludGVycnVwdCBWZWN0b3IgT2Zmc2V0IFJlZ2lzdGVyIDYgKi8KKyNkZWZpbmUgU1BSTl9JVk9SNwkweDE5NwkvKiBJbnRlcnJ1cHQgVmVjdG9yIE9mZnNldCBSZWdpc3RlciA3ICovCisjZGVmaW5lIFNQUk5fSVZPUjgJMHgxOTgJLyogSW50ZXJydXB0IFZlY3RvciBPZmZzZXQgUmVnaXN0ZXIgOCAqLworI2RlZmluZSBTUFJOX0lWT1I5CTB4MTk5CS8qIEludGVycnVwdCBWZWN0b3IgT2Zmc2V0IFJlZ2lzdGVyIDkgKi8KKyNkZWZpbmUgU1BSTl9JVk9SMTAJMHgxOUEJLyogSW50ZXJydXB0IFZlY3RvciBPZmZzZXQgUmVnaXN0ZXIgMTAgKi8KKyNkZWZpbmUgU1BSTl9JVk9SMTEJMHgxOUIJLyogSW50ZXJydXB0IFZlY3RvciBPZmZzZXQgUmVnaXN0ZXIgMTEgKi8KKyNkZWZpbmUgU1BSTl9JVk9SMTIJMHgxOUMJLyogSW50ZXJydXB0IFZlY3RvciBPZmZzZXQgUmVnaXN0ZXIgMTIgKi8KKyNkZWZpbmUgU1BSTl9JVk9SMTMJMHgxOUQJLyogSW50ZXJydXB0IFZlY3RvciBPZmZzZXQgUmVnaXN0ZXIgMTMgKi8KKyNkZWZpbmUgU1BSTl9JVk9SMTQJMHgxOUUJLyogSW50ZXJydXB0IFZlY3RvciBPZmZzZXQgUmVnaXN0ZXIgMTQgKi8KKyNkZWZpbmUgU1BSTl9JVk9SMTUJMHgxOUYJLyogSW50ZXJydXB0IFZlY3RvciBPZmZzZXQgUmVnaXN0ZXIgMTUgKi8KKyNkZWZpbmUgU1BSTl9TUEVGU0NSCTB4MjAwCS8qIFNQRSAmIEVtYmVkZGVkIEZQIFN0YXR1cyAmIENvbnRyb2wgKi8KKyNkZWZpbmUgU1BSTl9CQkVBUgkweDIwMQkvKiBCcmFuY2ggQnVmZmVyIEVudHJ5IEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BSTl9CQlRBUgkweDIwMgkvKiBCcmFuY2ggQnVmZmVyIFRhcmdldCBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQUk5fSVZPUjMyCTB4MjEwCS8qIEludGVycnVwdCBWZWN0b3IgT2Zmc2V0IFJlZ2lzdGVyIDMyICovCisjZGVmaW5lIFNQUk5fSVZPUjMzCTB4MjExCS8qIEludGVycnVwdCBWZWN0b3IgT2Zmc2V0IFJlZ2lzdGVyIDMzICovCisjZGVmaW5lIFNQUk5fSVZPUjM0CTB4MjEyCS8qIEludGVycnVwdCBWZWN0b3IgT2Zmc2V0IFJlZ2lzdGVyIDM0ICovCisjZGVmaW5lIFNQUk5fSVZPUjM1CTB4MjEzCS8qIEludGVycnVwdCBWZWN0b3IgT2Zmc2V0IFJlZ2lzdGVyIDM1ICovCisjZGVmaW5lIFNQUk5fTUNTUlIwCTB4MjNBCS8qIE1hY2hpbmUgQ2hlY2sgU2F2ZSBhbmQgUmVzdG9yZSBSZWdpc3RlciAwICovCisjZGVmaW5lIFNQUk5fTUNTUlIxCTB4MjNCCS8qIE1hY2hpbmUgQ2hlY2sgU2F2ZSBhbmQgUmVzdG9yZSBSZWdpc3RlciAxICovCisjZGVmaW5lIFNQUk5fTUNTUgkweDIzQwkvKiBNYWNoaW5lIENoZWNrIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBTUFJOX01DQVIJMHgyM0QJLyogTWFjaGluZSBDaGVjayBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQUk5fTUFTMAkweDI3MAkvKiBNTVUgQXNzaXN0IFJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUgU1BSTl9NQVMxCTB4MjcxCS8qIE1NVSBBc3Npc3QgUmVnaXN0ZXIgMSAqLworI2RlZmluZSBTUFJOX01BUzIJMHgyNzIJLyogTU1VIEFzc2lzdCBSZWdpc3RlciAyICovCisjZGVmaW5lIFNQUk5fTUFTMwkweDI3MwkvKiBNTVUgQXNzaXN0IFJlZ2lzdGVyIDMgKi8KKyNkZWZpbmUgU1BSTl9NQVM0CTB4Mjc0CS8qIE1NVSBBc3Npc3QgUmVnaXN0ZXIgNCAqLworI2RlZmluZSBTUFJOX01BUzUJMHgyNzUJLyogTU1VIEFzc2lzdCBSZWdpc3RlciA1ICovCisjZGVmaW5lIFNQUk5fTUFTNgkweDI3NgkvKiBNTVUgQXNzaXN0IFJlZ2lzdGVyIDYgKi8KKyNkZWZpbmUgU1BSTl9QSUQxCTB4Mjc5CS8qIFByb2Nlc3MgSUQgUmVnaXN0ZXIgMSAqLworI2RlZmluZSBTUFJOX1BJRDIJMHgyN0EJLyogUHJvY2VzcyBJRCBSZWdpc3RlciAyICovCisjZGVmaW5lIFNQUk5fVExCMENGRwkweDJCMAkvKiBUTEIgMCBDb25maWcgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BSTl9UTEIxQ0ZHCTB4MkIxCS8qIFRMQiAxIENvbmZpZyBSZWdpc3RlciAqLworI2RlZmluZSBTUFJOX0NDUjEJMHgzNzgJLyogQ29yZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgU1BSTl9aUFIJMHgzQjAJLyogWm9uZSBQcm90ZWN0aW9uIFJlZ2lzdGVyICg0MHgpICovCisjZGVmaW5lIFNQUk5fTU1VQ1IJMHgzQjIJLyogTU1VIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BSTl9DQ1IwCTB4M0IzCS8qIENvcmUgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAwICovCisjZGVmaW5lIFNQUk5fU0dSCTB4M0I5CS8qIFN0b3JhZ2UgR3VhcmRlZCBSZWdpc3RlciAqLworI2RlZmluZSBTUFJOX0RDV1IJMHgzQkEJLyogRGF0YSBDYWNoZSBXcml0ZS10aHJ1IFJlZ2lzdGVyICovCisjZGVmaW5lIFNQUk5fU0xFUgkweDNCQgkvKiBMaXR0bGUtZW5kaWFuIHJlYWwgbW9kZSAqLworI2RlZmluZSBTUFJOX1NVMFIJMHgzQkMJLyogIlVzZXIgMCIgcmVhbCBtb2RlICg0MHgpICovCisjZGVmaW5lIFNQUk5fRENNUAkweDNEMQkvKiBEYXRhIFRMQiBDb21wYXJlIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQUk5fSUNEQkRSCTB4M0QzCS8qIEluc3RydWN0aW9uIENhY2hlIERlYnVnIERhdGEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BSTl9FVlBSCTB4M0Q2CS8qIEV4Y2VwdGlvbiBWZWN0b3IgUHJlZml4IFJlZ2lzdGVyICovCisjZGVmaW5lIFNQUk5fTDFDU1IwCTB4M0YyCS8qIEwxIENhY2hlIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlciAwICovCisjZGVmaW5lIFNQUk5fTDFDU1IxCTB4M0YzCS8qIEwxIENhY2hlIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlciAxICovCisjZGVmaW5lIFNQUk5fUElUCTB4M0RCCS8qIFByb2dyYW1tYWJsZSBJbnRlcnZhbCBUaW1lciAqLworI2RlZmluZSBTUFJOX0RDQ1IJMHgzRkEJLyogRGF0YSBDYWNoZSBDYWNoZWFiaWxpdHkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BSTl9JQ0NSCTB4M0ZCCS8qIEluc3RydWN0aW9uIENhY2hlIENhY2hlYWJpbGl0eSBSZWdpc3RlciAqLworI2RlZmluZSBTUFJOX1NWUgkweDNGRgkvKiBTeXN0ZW0gVmVyc2lvbiBSZWdpc3RlciAqLworCisvKgorICogU1BScyB3aGljaCBoYXZlIGNvbmZsaWN0aW5nIGRlZmluaXRpb25zIG9uIHRydWUgQm9vayBFIHZlcnN1cyBjbGFzc2ljLAorICogb3IgSUJNIDQweC4KKyAqLworI2lmZGVmIENPTkZJR19CT09LRQorI2RlZmluZSBTUFJOX1BJRAkweDAzMAkvKiBQcm9jZXNzIElEICovCisjZGVmaW5lIFNQUk5fUElEMAlTUFJOX1BJRC8qIFByb2Nlc3MgSUQgUmVnaXN0ZXIgMCAqLworI2RlZmluZSBTUFJOX0NTUlIwCTB4MDNBCS8qIENyaXRpY2FsIFNhdmUgYW5kIFJlc3RvcmUgUmVnaXN0ZXIgMCAqLworI2RlZmluZSBTUFJOX0NTUlIxCTB4MDNCCS8qIENyaXRpY2FsIFNhdmUgYW5kIFJlc3RvcmUgUmVnaXN0ZXIgMSAqLworI2RlZmluZSBTUFJOX0RFQVIJMHgwM0QJLyogRGF0YSBFcnJvciBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQUk5fRVNSCTB4MDNFCS8qIEV4Y2VwdGlvbiBTeW5kcm9tZSBSZWdpc3RlciAqLworI2RlZmluZSBTUFJOX1BJUgkweDExRQkvKiBQcm9jZXNzb3IgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BSTl9EQlNSCTB4MTMwCS8qIERlYnVnIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBTUFJOX0RCQ1IwCTB4MTM0CS8qIERlYnVnIENvbnRyb2wgUmVnaXN0ZXIgMCAqLworI2RlZmluZSBTUFJOX0RCQ1IxCTB4MTM1CS8qIERlYnVnIENvbnRyb2wgUmVnaXN0ZXIgMSAqLworI2RlZmluZSBTUFJOX0lBQzEJMHgxMzgJLyogSW5zdHJ1Y3Rpb24gQWRkcmVzcyBDb21wYXJlIDEgKi8KKyNkZWZpbmUgU1BSTl9JQUMyCTB4MTM5CS8qIEluc3RydWN0aW9uIEFkZHJlc3MgQ29tcGFyZSAyICovCisjZGVmaW5lIFNQUk5fREFDMQkweDEzQwkvKiBEYXRhIEFkZHJlc3MgQ29tcGFyZSAxICovCisjZGVmaW5lIFNQUk5fREFDMgkweDEzRAkvKiBEYXRhIEFkZHJlc3MgQ29tcGFyZSAyICovCisjZGVmaW5lIFNQUk5fVFNSCTB4MTUwCS8qIFRpbWVyIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBTUFJOX1RDUgkweDE1NAkvKiBUaW1lciBDb250cm9sIFJlZ2lzdGVyICovCisjZW5kaWYgLyogQm9vayBFICovCisjaWZkZWYgQ09ORklHXzQweAorI2RlZmluZSBTUFJOX1BJRAkweDNCMQkvKiBQcm9jZXNzIElEICovCisjZGVmaW5lIFNQUk5fREJDUjEJMHgzQkQJLyogRGVidWcgQ29udHJvbCBSZWdpc3RlciAxICovCQkKKyNkZWZpbmUgU1BSTl9FU1IJMHgzRDQJLyogRXhjZXB0aW9uIFN5bmRyb21lIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQUk5fREVBUgkweDNENQkvKiBEYXRhIEVycm9yIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BSTl9UU1IJMHgzRDgJLyogVGltZXIgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQUk5fVENSCTB4M0RBCS8qIFRpbWVyIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BSTl9TUlIyCTB4M0RFCS8qIFNhdmUvUmVzdG9yZSBSZWdpc3RlciAyICovCisjZGVmaW5lIFNQUk5fU1JSMwkweDNERgkvKiBTYXZlL1Jlc3RvcmUgUmVnaXN0ZXIgMyAqLworI2RlZmluZSBTUFJOX0RCU1IJMHgzRjAJLyogRGVidWcgU3RhdHVzIFJlZ2lzdGVyICovCQkKKyNkZWZpbmUgU1BSTl9EQkNSMAkweDNGMgkvKiBEZWJ1ZyBDb250cm9sIFJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUgU1BSTl9EQUMxCTB4M0Y2CS8qIERhdGEgQWRkcmVzcyBDb21wYXJlIDEgKi8KKyNkZWZpbmUgU1BSTl9EQUMyCTB4M0Y3CS8qIERhdGEgQWRkcmVzcyBDb21wYXJlIDIgKi8KKyNkZWZpbmUgU1BSTl9DU1JSMAlTUFJOX1NSUjIgLyogQ3JpdGljYWwgU2F2ZSBhbmQgUmVzdG9yZSBSZWdpc3RlciAwICovCisjZGVmaW5lIFNQUk5fQ1NSUjEJU1BSTl9TUlIzIC8qIENyaXRpY2FsIFNhdmUgYW5kIFJlc3RvcmUgUmVnaXN0ZXIgMSAqLworI2VuZGlmCisKKy8qIEJpdCBkZWZpbml0aW9ucyBmb3IgQ0NSMS4gKi8KKyNkZWZpbmUJQ0NSMV9UQ1MJMHgwMDAwMDA4MCAvKiBUaW1lciBDbG9jayBTZWxlY3QgKi8KKworLyogQml0IGRlZmluaXRpb25zIGZvciB0aGUgTUNTUi4gKi8KKyNpZmRlZiBDT05GSUdfNDQwQQorI2RlZmluZSBNQ1NSX01DUwkweDgwMDAwMDAwIC8qIE1hY2hpbmUgQ2hlY2sgU3VtbWFyeSAqLworI2RlZmluZSBNQ1NSX0lCCQkweDQwMDAwMDAwIC8qIEluc3RydWN0aW9uIFBMQiBFcnJvciAqLworI2RlZmluZSBNQ1NSX0RSQgkweDIwMDAwMDAwIC8qIERhdGEgUmVhZCBQTEIgRXJyb3IgKi8KKyNkZWZpbmUgTUNTUl9EV0IJMHgxMDAwMDAwMCAvKiBEYXRhIFdyaXRlIFBMQiBFcnJvciAqLworI2RlZmluZSBNQ1NSX1RMQlAJMHgwODAwMDAwMCAvKiBUTEIgUGFyaXR5IEVycm9yICovCisjZGVmaW5lIE1DU1JfSUNQCTB4MDQwMDAwMDAgLyogSS1DYWNoZSBQYXJpdHkgRXJyb3IgKi8KKyNkZWZpbmUgTUNTUl9EQ1NQCTB4MDIwMDAwMDAgLyogRC1DYWNoZSBTZWFyY2ggUGFyaXR5IEVycm9yICovCisjZGVmaW5lIE1DU1JfRENGUAkweDAxMDAwMDAwIC8qIEQtQ2FjaGUgRmx1c2ggUGFyaXR5IEVycm9yICovCisjZGVmaW5lIE1DU1JfSU1QRQkweDAwODAwMDAwIC8qIEltcHJlY2lzZSBNYWNoaW5lIENoZWNrIEV4Y2VwdGlvbiAqLworI2VuZGlmCisjaWZkZWYgQ09ORklHX0U1MDAKKyNkZWZpbmUgTUNTUl9NQ1AgCTB4ODAwMDAwMDBVTCAvKiBNYWNoaW5lIENoZWNrIElucHV0IFBpbiAqLworI2RlZmluZSBNQ1NSX0lDUEVSUiAJMHg0MDAwMDAwMFVMIC8qIEktQ2FjaGUgUGFyaXR5IEVycm9yICovCisjZGVmaW5lIE1DU1JfRENQX1BFUlIgCTB4MjAwMDAwMDBVTCAvKiBELUNhY2hlIFB1c2ggUGFyaXR5IEVycm9yICovCisjZGVmaW5lIE1DU1JfRENQRVJSIAkweDEwMDAwMDAwVUwgLyogRC1DYWNoZSBQYXJpdHkgRXJyb3IgKi8KKyNkZWZpbmUgTUNTUl9HTF9DSSAJMHgwMDAxMDAwMFVMIC8qIEd1YXJkZWQgTG9hZCBvciBDYWNoZS1JbmhpYml0ZWQgc3R3Y3guICovCisjZGVmaW5lIE1DU1JfQlVTX0lBRVJSIAkweDAwMDAwMDgwVUwgLyogSW5zdHJ1Y3Rpb24gQWRkcmVzcyBFcnJvciAqLworI2RlZmluZSBNQ1NSX0JVU19SQUVSUiAJMHgwMDAwMDA0MFVMIC8qIFJlYWQgQWRkcmVzcyBFcnJvciAqLworI2RlZmluZSBNQ1NSX0JVU19XQUVSUiAJMHgwMDAwMDAyMFVMIC8qIFdyaXRlIEFkZHJlc3MgRXJyb3IgKi8KKyNkZWZpbmUgTUNTUl9CVVNfSUJFUlIgCTB4MDAwMDAwMTBVTCAvKiBJbnN0cnVjdGlvbiBEYXRhIEVycm9yICovCisjZGVmaW5lIE1DU1JfQlVTX1JCRVJSIAkweDAwMDAwMDA4VUwgLyogUmVhZCBEYXRhIEJ1cyBFcnJvciAqLworI2RlZmluZSBNQ1NSX0JVU19XQkVSUiAJMHgwMDAwMDAwNFVMIC8qIFdyaXRlIERhdGEgQnVzIEVycm9yICovCisjZGVmaW5lIE1DU1JfQlVTX0lQRVJSIAkweDAwMDAwMDAyVUwgLyogSW5zdHJ1Y3Rpb24gcGFyaXR5IEVycm9yICovCisjZGVmaW5lIE1DU1JfQlVTX1JQRVJSIAkweDAwMDAwMDAxVUwgLyogUmVhZCBwYXJpdHkgRXJyb3IgKi8KKyNlbmRpZgorCisvKiBCaXQgZGVmaW5pdGlvbnMgZm9yIHRoZSBEQlNSLiAqLworLyoKKyAqIERCU1IgYml0cyB3aGljaCBoYXZlIGNvbmZsaWN0aW5nIGRlZmluaXRpb25zIG9uIHRydWUgQm9vayBFIHZlcnN1cyBJQk0gNDB4LgorICovCisjaWZkZWYgQ09ORklHX0JPT0tFCisjZGVmaW5lIERCU1JfSUMJCTB4MDgwMDAwMDAJLyogSW5zdHJ1Y3Rpb24gQ29tcGxldGlvbiAqLworI2RlZmluZSBEQlNSX0JUCQkweDA0MDAwMDAwCS8qIEJyYW5jaCBUYWtlbiAqLworI2RlZmluZSBEQlNSX1RJRQkweDAxMDAwMDAwCS8qIFRyYXAgSW5zdHJ1Y3Rpb24gRXZlbnQgKi8KKyNkZWZpbmUgREJTUl9JQUMxCTB4MDA4MDAwMDAJLyogSW5zdHIgQWRkcmVzcyBDb21wYXJlIDEgRXZlbnQgKi8KKyNkZWZpbmUgREJTUl9JQUMyCTB4MDA0MDAwMDAJLyogSW5zdHIgQWRkcmVzcyBDb21wYXJlIDIgRXZlbnQgKi8KKyNkZWZpbmUgREJTUl9JQUMzCTB4MDAyMDAwMDAJLyogSW5zdHIgQWRkcmVzcyBDb21wYXJlIDMgRXZlbnQgKi8KKyNkZWZpbmUgREJTUl9JQUM0CTB4MDAxMDAwMDAJLyogSW5zdHIgQWRkcmVzcyBDb21wYXJlIDQgRXZlbnQgKi8KKyNkZWZpbmUgREJTUl9EQUMxUgkweDAwMDgwMDAwCS8qIERhdGEgQWRkciBDb21wYXJlIDEgUmVhZCBFdmVudCAqLworI2RlZmluZSBEQlNSX0RBQzFXCTB4MDAwNDAwMDAJLyogRGF0YSBBZGRyIENvbXBhcmUgMSBXcml0ZSBFdmVudCAqLworI2RlZmluZSBEQlNSX0RBQzJSCTB4MDAwMjAwMDAJLyogRGF0YSBBZGRyIENvbXBhcmUgMiBSZWFkIEV2ZW50ICovCisjZGVmaW5lIERCU1JfREFDMlcJMHgwMDAxMDAwMAkvKiBEYXRhIEFkZHIgQ29tcGFyZSAyIFdyaXRlIEV2ZW50ICovCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfNDB4CisjZGVmaW5lIERCU1JfSUMJCTB4ODAwMDAwMDAJLyogSW5zdHJ1Y3Rpb24gQ29tcGxldGlvbiAqLworI2RlZmluZSBEQlNSX0JUCQkweDQwMDAwMDAwCS8qIEJyYW5jaCB0YWtlbiAqLworI2RlZmluZSBEQlNSX1RJRQkweDEwMDAwMDAwCS8qIFRyYXAgSW5zdHJ1Y3Rpb24gZGVidWcgRXZlbnQgKi8KKyNkZWZpbmUgREJTUl9JQUMxCTB4MDA4MDAwMDAJLyogSW5zdHJ1Y3Rpb24gQWRkcmVzcyBDb21wYXJlIDEgRXZlbnQgKi8KKyNkZWZpbmUgREJTUl9JQUMyCTB4MDA0MDAwMDAJLyogSW5zdHJ1Y3Rpb24gQWRkcmVzcyBDb21wYXJlIDIgRXZlbnQgKi8KKyNkZWZpbmUgREJTUl9JQUMzCTB4MDAyMDAwMDAJLyogSW5zdHJ1Y3Rpb24gQWRkcmVzcyBDb21wYXJlIDMgRXZlbnQgKi8KKyNkZWZpbmUgREJTUl9JQUM0CTB4MDAxMDAwMDAJLyogSW5zdHJ1Y3Rpb24gQWRkcmVzcyBDb21wYXJlIDQgRXZlbnQgKi8KKyNkZWZpbmUgREJTUl9EQUMxUgkweDAwMDgwMDAwCS8qIERhdGEgQWRkcmVzcyBDb21wYXJlIDEgUmVhZCBFdmVudCAqLworI2RlZmluZSBEQlNSX0RBQzFXCTB4MDAwNDAwMDAJLyogRGF0YSBBZGRyZXNzIENvbXBhcmUgMSBXcml0ZSBFdmVudCAqLworI2RlZmluZSBEQlNSX0RBQzJSCTB4MDAwMjAwMDAJLyogRGF0YSBBZGRyZXNzIENvbXBhcmUgMiBSZWFkIEV2ZW50ICovCisjZGVmaW5lIERCU1JfREFDMlcJMHgwMDAxMDAwMAkvKiBEYXRhIEFkZHJlc3MgQ29tcGFyZSAyIFdyaXRlIEV2ZW50ICovCisjZW5kaWYKKworLyogQml0IGRlZmluaXRpb25zIHJlbGF0ZWQgdG8gdGhlIEVTUi4gKi8KKyNkZWZpbmUgRVNSX01DSQkJMHg4MDAwMDAwMAkvKiBNYWNoaW5lIENoZWNrIC0gSW5zdHJ1Y3Rpb24gKi8KKyNkZWZpbmUgRVNSX0lNQ1AJMHg4MDAwMDAwMAkvKiBJbnN0ci4gTWFjaGluZSBDaGVjayAtIFByb3RlY3Rpb24gKi8KKyNkZWZpbmUgRVNSX0lNQ04JMHg0MDAwMDAwMAkvKiBJbnN0ci4gTWFjaGluZSBDaGVjayAtIE5vbi1jb25maWcgKi8KKyNkZWZpbmUgRVNSX0lNQ0IJMHgyMDAwMDAwMAkvKiBJbnN0ci4gTWFjaGluZSBDaGVjayAtIEJ1cyBlcnJvciAqLworI2RlZmluZSBFU1JfSU1DVAkweDEwMDAwMDAwCS8qIEluc3RyLiBNYWNoaW5lIENoZWNrIC0gVGltZW91dCAqLworI2RlZmluZSBFU1JfUElMCQkweDA4MDAwMDAwCS8qIFByb2dyYW0gRXhjZXB0aW9uIC0gSWxsZWdhbCAqLworI2RlZmluZSBFU1JfUFBSCQkweDA0MDAwMDAwCS8qIFByb2dyYW0gRXhjZXB0aW9uIC0gUHJpdmVsZWdlZCAqLworI2RlZmluZSBFU1JfUFRSCQkweDAyMDAwMDAwCS8qIFByb2dyYW0gRXhjZXB0aW9uIC0gVHJhcCAqLworI2RlZmluZSBFU1JfRFNUCQkweDAwODAwMDAwCS8qIFN0b3JhZ2UgRXhjZXB0aW9uIC0gRGF0YSBtaXNzICovCisjZGVmaW5lIEVTUl9ESVoJCTB4MDA0MDAwMDAJLyogU3RvcmFnZSBFeGNlcHRpb24gLSBab25lIGZhdWx0ICovCisjZGVmaW5lIEVTUl9TVAkJMHgwMDgwMDAwMAkvKiBTdG9yZSBPcGVyYXRpb24gKi8KKyNkZWZpbmUgRVNSX0RMSwkJMHgwMDIwMDAwMAkvKiBEYXRhIENhY2hlIExvY2tpbmcgKi8KKyNkZWZpbmUgRVNSX0lMSwkJMHgwMDEwMDAwMAkvKiBJbnN0ci4gQ2FjaGUgTG9ja2luZyAqLworI2RlZmluZSBFU1JfQk8JCTB4MDAwMjAwMDAJLyogQnl0ZSBPcmRlcmluZyAqLworCisvKiBCaXQgZGVmaW5pdGlvbnMgcmVsYXRlZCB0byB0aGUgREJDUjAuICovCisjZGVmaW5lIERCQ1IwX0VETQkweDgwMDAwMDAwCS8qIEV4dGVybmFsIERlYnVnIE1vZGUgKi8KKyNkZWZpbmUgREJDUjBfSURNCTB4NDAwMDAwMDAJLyogSW50ZXJuYWwgRGVidWcgTW9kZSAqLworI2RlZmluZSBEQkNSMF9SU1QJMHgzMDAwMDAwMAkvKiBhbGwgdGhlIGJpdHMgaW4gdGhlIFJTVCBmaWVsZCAqLworI2RlZmluZSBEQkNSMF9SU1RfU1lTVEVNIDB4MzAwMDAwMDAJLyogU3lzdGVtIFJlc2V0ICovCisjZGVmaW5lIERCQ1IwX1JTVF9DSElQCTB4MjAwMDAwMDAJLyogQ2hpcCBSZXNldCAqLworI2RlZmluZSBEQkNSMF9SU1RfQ09SRQkweDEwMDAwMDAwCS8qIENvcmUgUmVzZXQgKi8KKyNkZWZpbmUgREJDUjBfUlNUX05PTkUJMHgwMDAwMDAwMAkvKiBObyBSZXNldCAqLworI2RlZmluZSBEQkNSMF9JQwkweDA4MDAwMDAwCS8qIEluc3RydWN0aW9uIENvbXBsZXRpb24gKi8KKyNkZWZpbmUgREJDUjBfQlQJMHgwNDAwMDAwMAkvKiBCcmFuY2ggVGFrZW4gKi8KKyNkZWZpbmUgREJDUjBfRURFCTB4MDIwMDAwMDAJLyogRXhjZXB0aW9uIERlYnVnIEV2ZW50ICovCisjZGVmaW5lIERCQ1IwX1RERQkweDAxMDAwMDAwCS8qIFRSQVAgRGVidWcgRXZlbnQgKi8KKyNkZWZpbmUgREJDUjBfSUExCTB4MDA4MDAwMDAJLyogSW5zdHIgQWRkciBjb21wYXJlIDEgZW5hYmxlICovCisjZGVmaW5lIERCQ1IwX0lBMgkweDAwNDAwMDAwCS8qIEluc3RyIEFkZHIgY29tcGFyZSAyIGVuYWJsZSAqLworI2RlZmluZSBEQkNSMF9JQTEyCTB4MDAyMDAwMDAJLyogSW5zdHIgQWRkciAxLTIgcmFuZ2UgZW5hYmxlICovCisjZGVmaW5lIERCQ1IwX0lBMTJYCTB4MDAxMDAwMDAJLyogSW5zdHIgQWRkciAxLTIgcmFuZ2UgZVhjbHVzaXZlICovCisjZGVmaW5lIERCQ1IwX0lBMwkweDAwMDgwMDAwCS8qIEluc3RyIEFkZHIgY29tcGFyZSAzIGVuYWJsZSAqLworI2RlZmluZSBEQkNSMF9JQTQJMHgwMDA0MDAwMAkvKiBJbnN0ciBBZGRyIGNvbXBhcmUgNCBlbmFibGUgKi8KKyNkZWZpbmUgREJDUjBfSUEzNAkweDAwMDIwMDAwCS8qIEluc3RyIEFkZHIgMy00IHJhbmdlIEVuYWJsZSAqLworI2RlZmluZSBEQkNSMF9JQTM0WAkweDAwMDEwMDAwCS8qIEluc3RyIEFkZHIgMy00IHJhbmdlIGVYY2x1c2l2ZSAqLworI2RlZmluZSBEQkNSMF9JQTEyVAkweDAwMDA4MDAwCS8qIEluc3RyIEFkZHIgMS0yIHJhbmdlIFRvZ2dsZSAqLworI2RlZmluZSBEQkNSMF9JQTM0VAkweDAwMDA0MDAwCS8qIEluc3RyIEFkZHIgMy00IHJhbmdlIFRvZ2dsZSAqLworI2RlZmluZSBEQkNSMF9GVAkweDAwMDAwMDAxCS8qIEZyZWV6ZSBUaW1lcnMgb24gZGVidWcgZXZlbnQgKi8KKworLyogQml0IGRlZmluaXRpb25zIHJlbGF0ZWQgdG8gdGhlIFRDUi4gKi8KKyNkZWZpbmUgVENSX1dQKHgpCSgoKHgpJjB4Myk8PDMwKQkvKiBXRFQgUGVyaW9kICovCisjZGVmaW5lIFRDUl9XUF9NQVNLCVRDUl9XUCgzKQorI2RlZmluZSBXUF8yXzE3CQkwCQkvKiAyXjE3IGNsb2NrcyAqLworI2RlZmluZSBXUF8yXzIxCQkxCQkvKiAyXjIxIGNsb2NrcyAqLworI2RlZmluZSBXUF8yXzI1CQkyCQkvKiAyXjI1IGNsb2NrcyAqLworI2RlZmluZSBXUF8yXzI5CQkzCQkvKiAyXjI5IGNsb2NrcyAqLworI2RlZmluZSBUQ1JfV1JDKHgpCSgoKHgpJjB4Myk8PDI4KQkvKiBXRFQgUmVzZXQgQ29udHJvbCAqLworI2RlZmluZSBUQ1JfV1JDX01BU0sJVENSX1dSQygzKQorI2RlZmluZSBXUkNfTk9ORQkwCQkvKiBObyByZXNldCB3aWxsIG9jY3VyICovCisjZGVmaW5lIFdSQ19DT1JFCTEJCS8qIENvcmUgcmVzZXQgd2lsbCBvY2N1ciAqLworI2RlZmluZSBXUkNfQ0hJUAkyCQkvKiBDaGlwIHJlc2V0IHdpbGwgb2NjdXIgKi8KKyNkZWZpbmUgV1JDX1NZU1RFTQkzCQkvKiBTeXN0ZW0gcmVzZXQgd2lsbCBvY2N1ciAqLworI2RlZmluZSBUQ1JfV0lFCQkweDA4MDAwMDAwCS8qIFdEVCBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIFRDUl9QSUUJCTB4MDQwMDAwMDAJLyogUElUIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgVENSX0RJRQkJVENSX1BJRQkJLyogREVDIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgVENSX0ZQKHgpCSgoKHgpJjB4Myk8PDI0KQkvKiBGSVQgUGVyaW9kICovCisjZGVmaW5lIFRDUl9GUF9NQVNLCVRDUl9GUCgzKQorI2RlZmluZSBGUF8yXzkJCTAJCS8qIDJeOSBjbG9ja3MgKi8KKyNkZWZpbmUgRlBfMl8xMwkJMQkJLyogMl4xMyBjbG9ja3MgKi8KKyNkZWZpbmUgRlBfMl8xNwkJMgkJLyogMl4xNyBjbG9ja3MgKi8KKyNkZWZpbmUgRlBfMl8yMQkJMwkJLyogMl4yMSBjbG9ja3MgKi8KKyNkZWZpbmUgVENSX0ZJRQkJMHgwMDgwMDAwMAkvKiBGSVQgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBUQ1JfQVJFCQkweDAwNDAwMDAwCS8qIEF1dG8gUmVsb2FkIEVuYWJsZSAqLworCisvKiBCaXQgZGVmaW5pdGlvbnMgZm9yIHRoZSBUU1IuICovCisjZGVmaW5lIFRTUl9FTlcJCTB4ODAwMDAwMDAJLyogRW5hYmxlIE5leHQgV2F0Y2hkb2cgKi8KKyNkZWZpbmUgVFNSX1dJUwkJMHg0MDAwMDAwMAkvKiBXRFQgSW50ZXJydXB0IFN0YXR1cyAqLworI2RlZmluZSBUU1JfV1JTKHgpCSgoKHgpJjB4Myk8PDI4KQkvKiBXRFQgUmVzZXQgU3RhdHVzICovCisjZGVmaW5lIFdSU19OT05FCTAJCS8qIE5vIFdEVCByZXNldCBvY2N1cnJlZCAqLworI2RlZmluZSBXUlNfQ09SRQkxCQkvKiBXRFQgZm9yY2VkIGNvcmUgcmVzZXQgKi8KKyNkZWZpbmUgV1JTX0NISVAJMgkJLyogV0RUIGZvcmNlZCBjaGlwIHJlc2V0ICovCisjZGVmaW5lIFdSU19TWVNURU0JMwkJLyogV0RUIGZvcmNlZCBzeXN0ZW0gcmVzZXQgKi8KKyNkZWZpbmUgVFNSX1BJUwkJMHgwODAwMDAwMAkvKiBQSVQgSW50ZXJydXB0IFN0YXR1cyAqLworI2RlZmluZSBUU1JfRElTCQlUU1JfUElTCQkvKiBERUMgSW50ZXJydXB0IFN0YXR1cyAqLworI2RlZmluZSBUU1JfRklTCQkweDA0MDAwMDAwCS8qIEZJVCBJbnRlcnJ1cHQgU3RhdHVzICovCisKKy8qIEJpdCBkZWZpbml0aW9ucyBmb3IgdGhlIERDQ1IuICovCisjZGVmaW5lIERDQ1JfTk9DQUNIRQkwCQkvKiBOb25jYWNoZWFibGUgKi8KKyNkZWZpbmUgRENDUl9DQUNIRQkxCQkvKiBDYWNoZWFibGUgKi8KKworLyogQml0IGRlZmluaXRpb25zIGZvciBEQ1dSLiAqLworI2RlZmluZSBEQ1dSX0NPUFkJMAkJLyogQ29weS1iYWNrICovCisjZGVmaW5lIERDV1JfV1JJVEUJMQkJLyogV3JpdGUtdGhyb3VnaCAqLworCisvKiBCaXQgZGVmaW5pdGlvbnMgZm9yIElDQ1IuICovCisjZGVmaW5lIElDQ1JfTk9DQUNIRQkwCQkvKiBOb25jYWNoZWFibGUgKi8KKyNkZWZpbmUgSUNDUl9DQUNIRQkxCQkvKiBDYWNoZWFibGUgKi8KKworLyogQml0IGRlZmluaXRpb25zIGZvciBMMUNTUjAuICovCisjZGVmaW5lIEwxQ1NSMF9EQ0ZJCTB4MDAwMDAwMDIJLyogRGF0YSBDYWNoZSBGbGFzaCBJbnZhbGlkYXRlICovCisjZGVmaW5lIEwxQ1NSMF9EQ0UJMHgwMDAwMDAwMQkvKiBEYXRhIENhY2hlIEVuYWJsZSAqLworCisvKiBCaXQgZGVmaW5pdGlvbnMgZm9yIEwxQ1NSMC4gKi8KKyNkZWZpbmUgTDFDU1IxX0lDTEZSCTB4MDAwMDAxMDAJLyogSW5zdHIgQ2FjaGUgTG9jayBCaXRzIEZsYXNoIFJlc2V0ICovCisjZGVmaW5lIEwxQ1NSMV9JQ0ZJCTB4MDAwMDAwMDIJLyogSW5zdHIgQ2FjaGUgRmxhc2ggSW52YWxpZGF0ZSAqLworI2RlZmluZSBMMUNTUjFfSUNFCTB4MDAwMDAwMDEJLyogSW5zdHIgQ2FjaGUgRW5hYmxlICovCisKKy8qIEJpdCBkZWZpbml0aW9ucyBmb3IgU0dSLiAqLworI2RlZmluZSBTR1JfTk9STUFMCTAJCS8qIFNwZWN1bGF0aXZlIGZldGNoaW5nIGFsbG93ZWQuICovCisjZGVmaW5lIFNHUl9HVUFSREVECTEJCS8qIFNwZWN1bGF0aXZlIGZldGNoaW5nIGRpc2FsbG93ZWQuICovCisKKy8qIEJpdCBkZWZpbml0aW9ucyBmb3IgU1BFRlNDUi4gKi8KKyNkZWZpbmUgU1BFRlNDUl9TT1ZICTB4ODAwMDAwMDAJLyogU3VtbWFyeSBpbnRlZ2VyIG92ZXJmbG93IGhpZ2ggKi8KKyNkZWZpbmUgU1BFRlNDUl9PVkgJMHg0MDAwMDAwMAkvKiBJbnRlZ2VyIG92ZXJmbG93IGhpZ2ggKi8KKyNkZWZpbmUgU1BFRlNDUl9GR0gJMHgyMDAwMDAwMAkvKiBFbWJlZGRlZCBGUCBndWFyZCBiaXQgaGlnaCAqLworI2RlZmluZSBTUEVGU0NSX0ZYSAkweDEwMDAwMDAwCS8qIEVtYmVkZGVkIEZQIHN0aWNreSBiaXQgaGlnaCAqLworI2RlZmluZSBTUEVGU0NSX0ZJTlZICTB4MDgwMDAwMDAJLyogRW1iZWRkZWQgRlAgaW52YWxpZCBvcGVyYXRpb24gaGlnaCAqLworI2RlZmluZSBTUEVGU0NSX0ZEQlpICTB4MDQwMDAwMDAJLyogRW1iZWRkZWQgRlAgZGl2IGJ5IHplcm8gaGlnaCAqLworI2RlZmluZSBTUEVGU0NSX0ZVTkZICTB4MDIwMDAwMDAJLyogRW1iZWRkZWQgRlAgdW5kZXJmbG93IGhpZ2ggKi8KKyNkZWZpbmUgU1BFRlNDUl9GT1ZGSAkweDAxMDAwMDAwCS8qIEVtYmVkZGVkIEZQIG92ZXJmbG93IGhpZ2ggKi8KKyNkZWZpbmUgU1BFRlNDUl9GSU5YUwkweDAwMjAwMDAwCS8qIEVtYmVkZGVkIEZQIGluZXhhY3Qgc3RpY2t5ICovCisjZGVmaW5lIFNQRUZTQ1JfRklOVlMJMHgwMDEwMDAwMAkvKiBFbWJlZGRlZCBGUCBpbnZhbGlkIG9wLiBzdGlja3kgKi8KKyNkZWZpbmUgU1BFRlNDUl9GREJaUwkweDAwMDgwMDAwCS8qIEVtYmVkZGVkIEZQIGRpdiBieSB6ZXJvIHN0aWNreSAqLworI2RlZmluZSBTUEVGU0NSX0ZVTkZTCTB4MDAwNDAwMDAJLyogRW1iZWRkZWQgRlAgdW5kZXJmbG93IHN0aWNreSAqLworI2RlZmluZSBTUEVGU0NSX0ZPVkZTCTB4MDAwMjAwMDAJLyogRW1iZWRkZWQgRlAgb3ZlcmZsb3cgc3RpY2t5ICovCisjZGVmaW5lIFNQRUZTQ1JfTU9ERQkweDAwMDEwMDAwCS8qIEVtYmVkZGVkIEZQIG1vZGUgKi8KKyNkZWZpbmUgU1BFRlNDUl9TT1YJMHgwMDAwODAwMAkvKiBJbnRlZ2VyIHN1bW1hcnkgb3ZlcmZsb3cgKi8KKyNkZWZpbmUgU1BFRlNDUl9PVgkweDAwMDA0MDAwCS8qIEludGVnZXIgb3ZlcmZsb3cgKi8KKyNkZWZpbmUgU1BFRlNDUl9GRwkweDAwMDAyMDAwCS8qIEVtYmVkZGVkIEZQIGd1YXJkIGJpdCAqLworI2RlZmluZSBTUEVGU0NSX0ZYCTB4MDAwMDEwMDAJLyogRW1iZWRkZWQgRlAgc3RpY2t5IGJpdCAqLworI2RlZmluZSBTUEVGU0NSX0ZJTlYJMHgwMDAwMDgwMAkvKiBFbWJlZGRlZCBGUCBpbnZhbGlkIG9wZXJhdGlvbiAqLworI2RlZmluZSBTUEVGU0NSX0ZEQloJMHgwMDAwMDQwMAkvKiBFbWJlZGRlZCBGUCBkaXYgYnkgemVybyAqLworI2RlZmluZSBTUEVGU0NSX0ZVTkYJMHgwMDAwMDIwMAkvKiBFbWJlZGRlZCBGUCB1bmRlcmZsb3cgKi8KKyNkZWZpbmUgU1BFRlNDUl9GT1ZGCTB4MDAwMDAxMDAJLyogRW1iZWRkZWQgRlAgb3ZlcmZsb3cgKi8KKyNkZWZpbmUgU1BFRlNDUl9GSU5YRQkweDAwMDAwMDQwCS8qIEVtYmVkZGVkIEZQIGluZXhhY3QgZW5hYmxlICovCisjZGVmaW5lIFNQRUZTQ1JfRklOVkUJMHgwMDAwMDAyMAkvKiBFbWJlZGRlZCBGUCBpbnZhbGlkIG9wLiBlbmFibGUgKi8KKyNkZWZpbmUgU1BFRlNDUl9GREJaRQkweDAwMDAwMDEwCS8qIEVtYmVkZGVkIEZQIGRpdiBieSB6ZXJvIGVuYWJsZSAqLworI2RlZmluZSBTUEVGU0NSX0ZVTkZFCTB4MDAwMDAwMDgJLyogRW1iZWRkZWQgRlAgdW5kZXJmbG93IGVuYWJsZSAqLworI2RlZmluZSBTUEVGU0NSX0ZPVkZFCTB4MDAwMDAwMDQJLyogRW1iZWRkZWQgRlAgb3ZlcmZsb3cgZW5hYmxlICovCisjZGVmaW5lIFNQRUZTQ1JfRlJNQyAJMHgwMDAwMDAwMwkvKiBFbWJlZGRlZCBGUCByb3VuZGluZyBtb2RlIGNvbnRyb2wgKi8KKworLyoKKyAqIFRoZSBJQk0tNDAzIGlzIGFuIGV2ZW4gbW9yZSBvZGQgc3BlY2lhbCBjYXNlLCBhcyBpdCBpcyBtdWNoCisgKiBvbGRlciB0aGFuIHRoZSBJQk0tNDA1IHNlcmllcy4gIFdlIHB1dCB0aGVzZSBkb3duIGhlcmUgaW5jYXNlIHNvbWVvbmUKKyAqIHdpc2hlcyB0byBzdXBwb3J0IHRoZXNlIG1hY2hpbmVzIGFnYWluLgorICovCisjaWZkZWYgQ09ORklHXzQwM0dDWAorLyogU3BlY2lhbCBQdXJwb3NlIFJlZ2lzdGVycyAoU1BSTnMpKi8KKyNkZWZpbmUgU1BSTl9UQkhVCTB4M0NDCS8qIFRpbWUgQmFzZSBIaWdoIFVzZXItbW9kZSAqLworI2RlZmluZSBTUFJOX1RCTFUJMHgzQ0QJLyogVGltZSBCYXNlIExvdyBVc2VyLW1vZGUgKi8KKyNkZWZpbmUgU1BSTl9DREJDUgkweDNENwkvKiBDYWNoZSBEZWJ1ZyBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQUk5fVEJISQkweDNEQwkvKiBUaW1lIEJhc2UgSGlnaCAqLworI2RlZmluZSBTUFJOX1RCTE8JMHgzREQJLyogVGltZSBCYXNlIExvdyAqLworI2RlZmluZSBTUFJOX0RCQ1IJMHgzRjIJLyogRGVidWcgQ29udHJvbCBSZWdzaXRlciAqLworI2RlZmluZSBTUFJOX1BCTDEJMHgzRkMJLyogUHJvdGVjdGlvbiBCb3VuZCBMb3dlciAxICovCisjZGVmaW5lIFNQUk5fUEJMMgkweDNGRQkvKiBQcm90ZWN0aW9uIEJvdW5kIExvd2VyIDIgKi8KKyNkZWZpbmUgU1BSTl9QQlUxCTB4M0ZECS8qIFByb3RlY3Rpb24gQm91bmQgVXBwZXIgMSAqLworI2RlZmluZSBTUFJOX1BCVTIJMHgzRkYJLyogUHJvdGVjdGlvbiBCb3VuZCBVcHBlciAyICovCisKKworLyogQml0IGRlZmluaXRpb25zIGZvciB0aGUgREJDUi4gKi8KKyNkZWZpbmUgREJDUl9FRE0JREJDUjBfRURNCisjZGVmaW5lIERCQ1JfSURNCURCQ1IwX0lETQorI2RlZmluZSBEQkNSX1JTVCh4KQkoKCh4KSAmIDB4MykgPDwgMjgpCisjZGVmaW5lIERCQ1JfUlNUX05PTkUJMAorI2RlZmluZSBEQkNSX1JTVF9DT1JFCTEKKyNkZWZpbmUgREJDUl9SU1RfQ0hJUAkyCisjZGVmaW5lIERCQ1JfUlNUX1NZU1RFTQkzCisjZGVmaW5lIERCQ1JfSUMJCURCQ1IwX0lDCS8qIEluc3RydWN0aW9uIENvbXBsZXRpb24gRGVidWcgRXZudCAqLworI2RlZmluZSBEQkNSX0JUCQlEQkNSMF9CVAkvKiBCcmFuY2ggVGFrZW4gRGVidWcgRXZlbnQgKi8KKyNkZWZpbmUgREJDUl9FREUJREJDUjBfRURFCS8qIEV4Y2VwdGlvbiBEZWJ1ZyBFdmVudCAqLworI2RlZmluZSBEQkNSX1RERQlEQkNSMF9UREUJLyogVFJBUCBEZWJ1ZyBFdmVudCAqLworI2RlZmluZSBEQkNSX0ZFUgkweDAwRjgwMDAwCS8qIEZpcnN0IEV2ZW50cyBSZW1haW5pbmcgTWFzayAqLworI2RlZmluZSBEQkNSX0ZUCQkweDAwMDQwMDAwCS8qIEZyZWV6ZSBUaW1lcnMgb24gRGVidWcgRXZlbnQgKi8KKyNkZWZpbmUgREJDUl9JQTEJMHgwMDAyMDAwMAkvKiBJbnN0ci4gQWRkci4gQ29tcGFyZSAxIEVuYWJsZSAqLworI2RlZmluZSBEQkNSX0lBMgkweDAwMDEwMDAwCS8qIEluc3RyLiBBZGRyLiBDb21wYXJlIDIgRW5hYmxlICovCisjZGVmaW5lIERCQ1JfRDFSCTB4MDAwMDgwMDAJLyogRGF0YSBBZGRyLiBDb21wYXJlIDEgUmVhZCBFbmFibGUgKi8KKyNkZWZpbmUgREJDUl9EMVcJMHgwMDAwNDAwMAkvKiBEYXRhIEFkZHIuIENvbXBhcmUgMSBXcml0ZSBFbmFibGUgKi8KKyNkZWZpbmUgREJDUl9EMVMoeCkJKCgoeCkgJiAweDMpIDw8IDEyKQkvKiBEYXRhIEFkcnIuIENvbXBhcmUgMSBTaXplICovCisjZGVmaW5lIERBQ19CWVRFCTAKKyNkZWZpbmUgREFDX0hBTEYJMQorI2RlZmluZSBEQUNfV09SRAkyCisjZGVmaW5lIERBQ19RVUFECTMKKyNkZWZpbmUgREJDUl9EMlIJMHgwMDAwMDgwMAkvKiBEYXRhIEFkZHIuIENvbXBhcmUgMiBSZWFkIEVuYWJsZSAqLworI2RlZmluZSBEQkNSX0QyVwkweDAwMDAwNDAwCS8qIERhdGEgQWRkci4gQ29tcGFyZSAyIFdyaXRlIEVuYWJsZSAqLworI2RlZmluZSBEQkNSX0QyUyh4KQkoKCh4KSAmIDB4MykgPDwgOCkJLyogRGF0YSBBZGRyLiBDb21wYXJlIDIgU2l6ZSAqLworI2RlZmluZSBEQkNSX1NCVAkweDAwMDAwMDQwCS8qIFNlY29uZCBCcmFuY2ggVGFrZW4gRGVidWcgRXZlbnQgKi8KKyNkZWZpbmUgREJDUl9TRUQJMHgwMDAwMDAyMAkvKiBTZWNvbmQgRXhjZXB0aW9uIERlYnVnIEV2ZW50ICovCisjZGVmaW5lIERCQ1JfU1RECTB4MDAwMDAwMTAJLyogU2Vjb25kIFRyYXAgRGVidWcgRXZlbnQgKi8KKyNkZWZpbmUgREJDUl9TSUEJMHgwMDAwMDAwOAkvKiBTZWNvbmQgSUFDIEVuYWJsZSAqLworI2RlZmluZSBEQkNSX1NEQQkweDAwMDAwMDA0CS8qIFNlY29uZCBEQUMgRW5hYmxlICovCisjZGVmaW5lIERCQ1JfSk9JCTB4MDAwMDAwMDIJLyogSlRBRyBTZXJpYWwgT3V0Ym91bmQgSW50LiBFbmFibGUgKi8KKyNkZWZpbmUgREJDUl9KSUkJMHgwMDAwMDAwMQkvKiBKVEFHIFNlcmlhbCBJbmJvdW5kIEludC4gRW5hYmxlICovCisjZW5kaWYgLyogNDAzR0NYICovCisjZW5kaWYgLyogX19BU01fUFBDX1JFR19CT09LRV9IX18gKi8KKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvcmVzaWR1YWwuaCBiL2luY2x1ZGUvYXNtLXBwYy9yZXNpZHVhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzNDgxMGQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGMvcmVzaWR1YWwuaApAQCAtMCwwICsxLDM1MCBAQAorLyogNy8xOC85NSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgICAgIFJlc2lkdWFsIERhdGEgaGVhZGVyIGRlZmluaXRpb25zIGFuZCBwcm90b3R5cGVzICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogU3RydWN0dXJlIG1hcCBmb3IgUkVTSURVQUwgb24gUG93ZXJQQyBSZWZlcmVuY2UgUGxhdGZvcm0gICAgICAgICAgICAgICAgICAgKi8KKy8qIHJlc2lkdWFsLmggLSBSZXNpZHVhbCBkYXRhIHN0cnVjdHVyZSBwYXNzZWQgaW4gcjMuICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgTG9hZCBwb2ludCBwYXNzZWQgaW4gcjQgdG8gYm9vdCBpbWFnZS4gICAgICAgICAgICAgICAgICAgICAgICAqLworLyogRm9yIGVudW0nczogaWYgZ2l2ZW4gaW4gaGV4IHRoZW4gdGhleSBhcmUgYml0IHNpZ25pZmljYW50LCAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgIGkuZS4gb25seSBvbmUgYml0IGlzIG9uIGZvciBlYWNoIGVudW0gICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBSZXNlcnZlZCBmaWVsZHMgbXVzdCBiZSBmaWxsZWQgd2l0aCB6ZXJvcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaWZuZGVmIF9SRVNJRFVBTF8KKyNkZWZpbmUgX1JFU0lEVUFMXworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjZGVmaW5lIE1BWF9DUFVTIDMyICAgICAgICAgICAgICAgICAgICAgLyogVGhlc2Ugc2hvdWxkIGJlIHNldCB0byB0aGUgbWF4aW11bSAqLworI2RlZmluZSBNQVhfTUVNUyA2NCAgICAgICAgICAgICAgICAgICAgIC8qIG51bWJlciBwb3NzaWJsZSBmb3IgdGhpcyBzeXN0ZW0uICAgKi8KKyNkZWZpbmUgTUFYX0RFVklDRVMgMjU2ICAgICAgICAgICAgICAgICAvKiBDaGFuZ2luZyB0aGVzZSB3aWxsIGNoYW5nZSB0aGUgICAgICovCisjZGVmaW5lIEFWRV9QTlBfU0laRSAzMiAgICAgICAgICAgICAgICAgLyogc3RydWN0dXJlLCBoZW5jZSB0aGUgdmVyc2lvbiBvZiAgICAqLworI2RlZmluZSBNQVhfTUVNX1NFR1MgNjQgICAgICAgICAgICAgICAgIC8qIHRoaXMgaGVhZGVyIGZpbGUuICAgICAgICAgICAgICAgICAgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICAgICAgICAgICAgICAgUHVibGljIHN0cnVjdHVyZXMuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaW5jbHVkZSA8YXNtL3BucC5oPgorCit0eXBlZGVmIGVudW0gX0wxQ0FDSEVfVFlQRSB7CisgIE5vbmVDQUMgPSAwLAorICBTcGxpdENBQyA9IDEsCisgIENvbWJpbmVkQ0FDID0gMgorICB9IEwxQ0FDSEVfVFlQRTsKKwordHlwZWRlZiBlbnVtIF9UTEJfVFlQRSB7CisgIE5vbmVUTEIgPSAwLAorICBTcGxpdFRMQiA9IDEsCisgIENvbWJpbmVkVExCID0gMgorICB9IFRMQl9UWVBFOworCit0eXBlZGVmIGVudW0gX0ZJUk1XQVJFX1NVUFBPUlQgeworICBDb252ZW50aW9uYWwgPSAweDAxLAorICBPcGVuRmlybXdhcmUgPSAweDAyLAorICBEaWFnbm9zdGljcyA9IDB4MDQsCisgIExvd0RlYnVnID0gMHgwOCwKKyAgTXVsdGlib290ID0gMHgxMCwKKyAgTG93Q2xpZW50ID0gMHgyMCwKKyAgSGV4NDEgPSAweDQwLAorICBGQVQgPSAweDgwLAorICBJU085NjYwID0gMHgwMTAwLAorICBTQ1NJX0luaXRpYXRvcklEX092ZXJyaWRlID0gMHgwMjAwLAorICBUYXBlX0Jvb3QgPSAweDA0MDAsCisgIEZXX0Jvb3RfUGF0aCA9IDB4MDgwMAorICB9IEZJUk1XQVJFX1NVUFBPUlQ7CisKK3R5cGVkZWYgZW51bSBfRklSTVdBUkVfU1VQUExJRVJTIHsKKyAgSUJNRmlybXdhcmUgPSAweDAwLAorICBNb3RvRmlybXdhcmUgPSAweDAxLCAgICAgICAgICAgICAgICAgIC8qIDcvMTgvOTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRmlybVdvcmtzID0gMHgwMiwgICAgICAgICAgICAgICAgICAgICAvKiAxMC81Lzk1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEJ1bGwgPSAweDAzLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMDQvMDMvOTYgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB9IEZJUk1XQVJFX1NVUFBMSUVSUzsKKwordHlwZWRlZiBlbnVtIF9FTkRJQU5fU1dJVENIX01FVEhPRFMgeworICBVc2VQb3J0OTIgPSAweDAxLAorICBVc2VQQ0lDb25maWdBOCA9IDB4MDIsCisgIFVzZUZGMDAxMDMwID0gMHgwMywKKyAgfSBFTkRJQU5fU1dJVENIX01FVEhPRFM7CisKK3R5cGVkZWYgZW51bSBfU1BSRUFEX0lPX01FVEhPRFMgeworICBVc2VQb3J0ODUwID0gMHgwMCwKKy8qVXNlUENJQ29uZmlnQTggPSAweDAyLCovCisgIH0gU1BSRUFEX0lPX01FVEhPRFM7CisKK3R5cGVkZWYgc3RydWN0IF9WUEQgeworCisgIC8qIEJveCBkZXBlbmRlbnQgc3R1ZmYgKi8KKyAgdW5zaWduZWQgY2hhciBQcmludGFibGVNb2RlbFszMl07ICAgICAvKiBOdWxsIHRlcm1pbmF0ZWQgc3RyaW5nLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE11c3QgYmUgb2YgdGhlIGZvcm06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnZ2LDwyMGg+LDxtb2RlbCBkZXNpZ25hdGlvbj4sPDB4MD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSB2dnYgaXMgdGhlIHZlbmRvciBJRAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuZy4gSUJNIFBQUyBNT0RFTCA2MDE1PDB4MD4gICAgICAgKi8KKyAgdW5zaWduZWQgY2hhciBTZXJpYWxbMTZdOyAgICAgICAgICAgICAvKiAxMi85NDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXJpYWwgTnVtYmVyOyBtdXN0IGJlIG9mIHRoZSBmb3JtOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZ2djxzZXJpYWwgbnVtYmVyPiB3aGVyZSB2dnYgaXMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVuZG9yIElELgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuZy4gSUJNNjAxNTEyMzQ1Njc8MjBoPjwyMGg+ICAgICAgKi8KKyAgdW5zaWduZWQgY2hhciBSZXNlcnZlZFs0OF07CisgIHVuc2lnbmVkIGxvbmcgRmlybXdhcmVTdXBwbGllcjsgICAgICAgLyogU2VlIEZpcm13YXJlU3VwcGxpZXJzIGVudW0gICAgICAgICAqLworICB1bnNpZ25lZCBsb25nIEZpcm13YXJlU3VwcG9ydHM7ICAgICAgIC8qIFNlZSBGaXJtd2FyZVN1cHBvcnQgZW51bSAgICAgICAgICAgKi8KKyAgdW5zaWduZWQgbG9uZyBOdnJhbVNpemU7ICAgICAgICAgICAgICAvKiBTaXplIG9mIG52cmFtIGluIGJ5dGVzICAgICAgICAgICAgICovCisgIHVuc2lnbmVkIGxvbmcgTnVtU0lNTVNsb3RzOworICB1bnNpZ25lZCBzaG9ydCBFbmRpYW5Td2l0Y2hNZXRob2Q7ICAgIC8qIFNlZSBFbmRpYW5Td2l0Y2hNZXRob2RzIGVudW0gICAgICAgKi8KKyAgdW5zaWduZWQgc2hvcnQgU3ByZWFkSU9NZXRob2Q7ICAgICAgICAvKiBTZWUgU3ByZWFkSU9NZXRob2RzIGVudW0gICAgICAgICAgICovCisgIHVuc2lnbmVkIGxvbmcgU21wSWFyOworICB1bnNpZ25lZCBsb25nIFJBTUVyckxvZ09mZnNldDsgICAgICAgIC8qIEhlYXAgb2Zmc2V0IHRvIGVycm9yIGxvZyAgICAgICAgICAgKi8KKyAgdW5zaWduZWQgbG9uZyBSZXNlcnZlZDU7CisgIHVuc2lnbmVkIGxvbmcgUmVzZXJ2ZWQ2OworICB1bnNpZ25lZCBsb25nIFByb2Nlc3Nvckh6OyAgICAgICAgICAgIC8qIFByb2Nlc3NvciBjbG9jayBmcmVxdWVuY3kgaW4gSGVydHogKi8KKyAgdW5zaWduZWQgbG9uZyBQcm9jZXNzb3JCdXNIejsgICAgICAgICAvKiBQcm9jZXNzb3IgYnVzIGNsb2NrIGZyZXF1ZW5jeSAgICAgICovCisgIHVuc2lnbmVkIGxvbmcgUmVzZXJ2ZWQ3OworICB1bnNpZ25lZCBsb25nIFRpbWVCYXNlRGl2aXNvcjsgICAgICAgIC8qIChCdXMgY2xvY2tzIHBlciB0aW1lYmFzZSB0aWMpKjEwMDAgKi8KKyAgdW5zaWduZWQgbG9uZyBXb3JkV2lkdGg7ICAgICAgICAgICAgICAvKiBXb3JkIHdpZHRoIGluIGJpdHMgICAgICAgICAgICAgICAgICovCisgIHVuc2lnbmVkIGxvbmcgUGFnZVNpemU7ICAgICAgICAgICAgICAgLyogUGFnZSBzaXplIGluIGJ5dGVzICAgICAgICAgICAgICAgICAqLworICB1bnNpZ25lZCBsb25nIENvaGVyZW5jZUJsb2NrU2l6ZTsgICAgIC8qIFVuaXQgb2YgdHJhbnNmZXIgaW4vb3V0IG9mIGNhY2hlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHdoaWNoIGNvaGVyZW5jeSBpcyBtYWludGFpbmVkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGx5IDw9IENhY2hlTGluZVNpemUuICAgICAgICAgKi8KKyAgdW5zaWduZWQgbG9uZyBHcmFudWxlU2l6ZTsgICAgICAgICAgICAvKiBVbml0IG9mIGxvY2sgYWxsb2NhdGlvbiB0byBhdm9pZCAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogICBmYWxzZSBzaGFyaW5nIG9mIGxvY2tzLiAgICAgICAgICAqLworCisgIC8qIEwxIENhY2hlIHZhcmlhYmxlcyAqLworICB1bnNpZ25lZCBsb25nIENhY2hlU2l6ZTsgICAgICAgICAgICAgIC8qIEwxIENhY2hlIHNpemUgaW4gS0IuIFRoaXMgaXMgdGhlICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgIHRvdGFsIHNpemUgb2YgdGhlIEwxLCB3aGV0aGVyICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogICBjb21iaW5lZCBvciBzcGxpdCAgICAgICAgICAgICAgICAqLworICB1bnNpZ25lZCBsb25nIENhY2hlQXR0cmliOyAgICAgICAgICAgIC8qIEwxQ0FDSEVfVFlQRSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdW5zaWduZWQgbG9uZyBDYWNoZUFzc29jOyAgICAgICAgICAgICAvKiBMMSBDYWNoZSBhc3NvY2lhdGl2aXR5LiBVc2UgdGhpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBjb21iaW5lZCBjYWNoZS4gSWYgc3BsaXQsIHB1dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHplcm9zIGhlcmUuICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdW5zaWduZWQgbG9uZyBDYWNoZUxpbmVTaXplOyAgICAgICAgICAvKiBMMSBDYWNoZSBsaW5lIHNpemUgaW4gYnl0ZXMuIFVzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBjb21iaW5lZCBjYWNoZS4gSWYgc3BsaXQsIHB1dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHplcm9zIGhlcmUuICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogRm9yIHNwbGl0IEwxIENhY2hlOiAoPSBjb21iaW5lZCBpZiBjb21iaW5lZCBjYWNoZSkgKi8KKyAgdW5zaWduZWQgbG9uZyBJX0NhY2hlU2l6ZTsKKyAgdW5zaWduZWQgbG9uZyBJX0NhY2hlQXNzb2M7CisgIHVuc2lnbmVkIGxvbmcgSV9DYWNoZUxpbmVTaXplOworICB1bnNpZ25lZCBsb25nIERfQ2FjaGVTaXplOworICB1bnNpZ25lZCBsb25nIERfQ2FjaGVBc3NvYzsKKyAgdW5zaWduZWQgbG9uZyBEX0NhY2hlTGluZVNpemU7CisKKyAgLyogVHJhbnNsYXRpb24gTG9va2FzaWRlIEJ1ZmZlciB2YXJpYWJsZXMgKi8KKyAgdW5zaWduZWQgbG9uZyBUTEJTaXplOyAgICAgICAgICAgICAgICAvKiBUb3RhbCBudW1iZXIgb2YgVExCcyBvbiB0aGUgc3lzdGVtICovCisgIHVuc2lnbmVkIGxvbmcgVExCQXR0cmliOyAgICAgICAgICAgICAgLyogQ29tYmluZWQgSStEIG9yIHNwbGl0IFRMQiAgICAgICAgICAqLworICB1bnNpZ25lZCBsb25nIFRMQkFzc29jOyAgICAgICAgICAgICAgIC8qIFRMQiBBc3NvY2lhdGl2aXR5LiBVc2UgdGhpcyBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21iaW5lZCBUTEIuIElmIHNwbGl0LCBwdXQgemVyb3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZXJlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEZvciBzcGxpdCBUTEI6ICg9IGNvbWJpbmVkIGlmIGNvbWJpbmVkIFRMQikgKi8KKyAgdW5zaWduZWQgbG9uZyBJX1RMQlNpemU7CisgIHVuc2lnbmVkIGxvbmcgSV9UTEJBc3NvYzsKKyAgdW5zaWduZWQgbG9uZyBEX1RMQlNpemU7CisgIHVuc2lnbmVkIGxvbmcgRF9UTEJBc3NvYzsKKworICB1bnNpZ25lZCBsb25nIEV4dGVuZGVkVlBEOyAgICAgICAgICAgIC8qIE9mZnNldCB0byBleHRlbmRlZCBWUEQgYXJlYTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsIGlmIHVudXNlZCAgICAgICAgICAgICAgICAgICAgICovCisgIH0gVlBEOworCit0eXBlZGVmIGVudW0gX0RFVklDRV9GTEFHUyB7CisgIEVuYWJsZWQgPSAweDQwMDAsICAgICAgICAgICAgICAgICAgICAgLyogMSAtIFBDSSBkZXZpY2UgaXMgZW5hYmxlZCAgICAgICAgICAqLworICBJbnRlZ3JhdGVkID0gMHgyMDAwLAorICBGYWlsZWQgPSAweDEwMDAsICAgICAgICAgICAgICAgICAgICAgIC8qIDEgLSBkZXZpY2UgZmFpbGVkIFBPU1QgY29kZSB0ZXN0cyAgKi8KKyAgU3RhdGljID0gMHgwODAwLCAgICAgICAgICAgICAgICAgICAgICAvKiAwIC0gZHluYW1pY2FsbHkgY29uZmlndXJhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtIHN0YXRpYyAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBEb2NrID0gMHgwNDAwLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIDAgLSBub3QgYSBkb2NraW5nIHN0YXRpb24gZGV2aWNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtIGlzIGEgZG9ja2luZyBzdGF0aW9uIGRldmljZSAgICAqLworICBCb290ID0gMHgwMjAwLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIDAgLSBkZXZpY2UgY2Fubm90IGJlIHVzZWQgZm9yIEJPT1QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0gY2FuIGJlIGEgQk9PVCBkZXZpY2UgICAgICAgICAgICovCisgIENvbmZpZ3VyYWJsZSA9IDB4MDEwMCwgICAgICAgICAgICAgICAgLyogMSAtIGRldmljZSBpcyBjb25maWd1cmFibGUgICAgICAgICAqLworICBEaXNhYmxlYWJsZSA9IDB4ODAsICAgICAgICAgICAgICAgICAgIC8qIDEgLSBkZXZpY2UgY2FuIGJlIGRpc2FibGVkICAgICAgICAgKi8KKyAgUG93ZXJNYW5hZ2VkID0gMHg0MCwgICAgICAgICAgICAgICAgICAvKiAwIC0gbm90IG1hbmFnZWQ7IDEgLSBtYW5hZ2VkICAgICAgICovCisgIFJlYWRPbmx5ID0gMHgyMCwgICAgICAgICAgICAgICAgICAgICAgLyogMSAtIGRldmljZSBpcyByZWFkIG9ubHkgICAgICAgICAgICAqLworICBSZW1vdmFibGUgPSAweDEwLCAgICAgICAgICAgICAgICAgICAgIC8qIDEgLSBkZXZpY2UgaXMgcmVtb3ZhYmxlICAgICAgICAgICAgKi8KKyAgQ29uc29sZUluID0gMHgwOCwKKyAgQ29uc29sZU91dCA9IDB4MDQsCisgIElucHV0ID0gMHgwMiwKKyAgT3V0cHV0ID0gMHgwMQorICB9IERFVklDRV9GTEFHUzsKKwordHlwZWRlZiBlbnVtIF9CVVNfSUQgeworICBJU0FERVZJQ0UgPSAweDAxLAorICBFSVNBREVWSUNFID0gMHgwMiwKKyAgUENJREVWSUNFID0gMHgwNCwKKyAgUENNQ0lBREVWSUNFID0gMHgwOCwKKyAgUE5QSVNBREVWSUNFID0gMHgxMCwKKyAgTUNBREVWSUNFID0gMHgyMCwKKyAgTVhERVZJQ0UgPSAweDQwLCAgICAgICAgICAgICAgICAgICAgICAvKiBEZXZpY2VzIG9uIG1lenphbmluZSBidXMgICAgICAgICAgICovCisgIFBST0NFU1NPUkRFVklDRSA9IDB4ODAsICAgICAgICAgICAgICAgLyogRGV2aWNlcyBvbiBwcm9jZXNzb3IgYnVzICAgICAgICAgICAqLworICBWTUVERVZJQ0UgPSAweDEwMCwKKyAgfSBCVVNfSUQ7CisKK3R5cGVkZWYgc3RydWN0IF9ERVZJQ0VfSUQgeworICB1bnNpZ25lZCBsb25nIEJ1c0lkOyAgICAgICAgICAgICAgICAgIC8qIFNlZSBCVVNfSUQgZW51bSBhYm92ZSAgICAgICAgICAgICAgKi8KKyAgdW5zaWduZWQgbG9uZyBEZXZJZDsgICAgICAgICAgICAgICAgICAvKiBCaWcgRW5kaWFuIGZvcm1hdCAgICAgICAgICAgICAgICAgICovCisgIHVuc2lnbmVkIGxvbmcgU2VyaWFsTnVtOyAgICAgICAgICAgICAgLyogRm9yIG11bHRpcGxlIHVzYWdlIG9mIGEgc2luZ2xlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGV2SWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB1bnNpZ25lZCBsb25nIEZsYWdzOyAgICAgICAgICAgICAgICAgIC8qIFNlZSBERVZJQ0VfRkxBR1MgZW51bSBhYm92ZSAgICAgICAgKi8KKyAgdW5zaWduZWQgY2hhciBCYXNlVHlwZTsgICAgICAgICAgICAgICAvKiBTZWUgcG5wLmggZm9yIGJpdCBkZWZpbml0aW9ucyAgICAgICovCisgIHVuc2lnbmVkIGNoYXIgU3ViVHlwZTsgICAgICAgICAgICAgICAgLyogU2VlIHBucC5oIGZvciBiaXQgZGVmaW5pdGlvbnMgICAgICAqLworICB1bnNpZ25lZCBjaGFyIEludGVyZmFjZTsgICAgICAgICAgICAgIC8qIFNlZSBwbnAuaCBmb3IgYml0IGRlZmluaXRpb25zICAgICAgKi8KKyAgdW5zaWduZWQgY2hhciBTcGFyZTsKKyAgfSBERVZJQ0VfSUQ7CisKK3R5cGVkZWYgdW5pb24gX0JVU19BQ0NFU1MgeworICBzdHJ1Y3QgX1BuUEFjY2Vzc3sKKyAgICB1bnNpZ25lZCBjaGFyIENTTjsKKyAgICB1bnNpZ25lZCBjaGFyIExvZ2ljYWxEZXZOdW1iZXI7CisgICAgdW5zaWduZWQgc2hvcnQgUmVhZERhdGFQb3J0OworICAgIH0gUG5QQWNjZXNzOworICBzdHJ1Y3QgX0lTQUFjY2Vzc3sKKyAgICB1bnNpZ25lZCBjaGFyIFNsb3ROdW1iZXI7ICAgICAgICAgICAvKiBJU0EgU2xvdCBOdW1iZXIgZ2VuZXJhbGx5IG5vdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZTsgMCBpZiB1bmtub3duICAgICAgICAgICAgKi8KKyAgICB1bnNpZ25lZCBjaGFyIExvZ2ljYWxEZXZOdW1iZXI7CisgICAgdW5zaWduZWQgc2hvcnQgSVNBUmVzZXJ2ZWQ7CisgICAgfSBJU0FBY2Nlc3M7CisgIHN0cnVjdCBfTUNBQWNjZXNzeworICAgIHVuc2lnbmVkIGNoYXIgU2xvdE51bWJlcjsKKyAgICB1bnNpZ25lZCBjaGFyIExvZ2ljYWxEZXZOdW1iZXI7CisgICAgdW5zaWduZWQgc2hvcnQgTUNBUmVzZXJ2ZWQ7CisgICAgfSBNQ0FBY2Nlc3M7CisgIHN0cnVjdCBfUENNQ0lBQWNjZXNzeworICAgIHVuc2lnbmVkIGNoYXIgU2xvdE51bWJlcjsKKyAgICB1bnNpZ25lZCBjaGFyIExvZ2ljYWxEZXZOdW1iZXI7CisgICAgdW5zaWduZWQgc2hvcnQgUENNQ0lBUmVzZXJ2ZWQ7CisgICAgfSBQQ01DSUFBY2Nlc3M7CisgIHN0cnVjdCBfRUlTQUFjY2Vzc3sKKyAgICB1bnNpZ25lZCBjaGFyIFNsb3ROdW1iZXI7CisgICAgdW5zaWduZWQgY2hhciBGdW5jdGlvbk51bWJlcjsKKyAgICB1bnNpZ25lZCBzaG9ydCBFSVNBUmVzZXJ2ZWQ7CisgICAgfSBFSVNBQWNjZXNzOworICBzdHJ1Y3QgX1BDSUFjY2Vzc3sKKyAgICB1bnNpZ25lZCBjaGFyIEJ1c051bWJlcjsKKyAgICB1bnNpZ25lZCBjaGFyIERldkZ1bmNOdW1iZXI7CisgICAgdW5zaWduZWQgc2hvcnQgUENJUmVzZXJ2ZWQ7CisgICAgfSBQQ0lBY2Nlc3M7CisgIHN0cnVjdCBfUHJvY0J1c0FjY2Vzc3sKKyAgICB1bnNpZ25lZCBjaGFyIEJ1c051bWJlcjsKKyAgICB1bnNpZ25lZCBjaGFyIEJVSUQ7CisgICAgdW5zaWduZWQgc2hvcnQgUHJvY0J1c1Jlc2VydmVkOworICAgIH0gUHJvY0J1c0FjY2VzczsKKyAgfSBCVVNfQUNDRVNTOworCisvKiBQZXIgbG9naWNhbCBkZXZpY2UgaW5mb3JtYXRpb24gKi8KK3R5cGVkZWYgc3RydWN0IF9QUENfREVWSUNFIHsKKyAgREVWSUNFX0lEIERldmljZUlkOworICBCVVNfQUNDRVNTIEJ1c0FjY2VzczsKKworICAvKiBUaGUgZm9sbG93aW5nIHRocmVlIGFyZSBvZmZzZXRzIGludG8gdGhlIERldmljZVBuUEhlYXAgKi8KKyAgLyogQWxsIGFyZSBpbiBQblAgY29tcHJlc3NlZCBmb3JtYXQgICAgICAgICAgICAgICAgICAgICAgICovCisgIHVuc2lnbmVkIGxvbmcgQWxsb2NhdGVkT2Zmc2V0OyAgICAgICAgLyogQWxsb2NhdGVkIHJlc291cmNlIGRlc2NyaXB0aW9uICAgICAqLworICB1bnNpZ25lZCBsb25nIFBvc3NpYmxlT2Zmc2V0OyAgICAgICAgIC8qIFBvc3NpYmxlIHJlc291cmNlIGRlc2NyaXB0aW9uICAgICAgKi8KKyAgdW5zaWduZWQgbG9uZyBDb21wYXRpYmxlT2Zmc2V0OyAgICAgICAvKiBDb21wYXRpYmxlIGRldmljZSBpZGVudGlmaWVycyAgICAgICovCisgIH0gUFBDX0RFVklDRTsKKwordHlwZWRlZiBlbnVtIF9DUFVfU1RBVEUgeworICBDUFVfR09PRCA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENQVSBpcyBwcmVzZW50LCBhbmQgYWN0aXZlICAgICAgICAgKi8KKyAgQ1BVX0dPT0RfRlcgPSAxLCAgICAgICAgICAgICAgICAgICAgICAvKiBDUFUgaXMgcHJlc2VudCwgYW5kIGluIGZpcm13YXJlICAgICovCisgIENQVV9PRkYgPSAyLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ1BVIGlzIHByZXNlbnQsIGJ1dCBpbmFjdGl2ZSAgICAgICAqLworICBDUFVfRkFJTEVEID0gMywgICAgICAgICAgICAgICAgICAgICAgIC8qIENQVSBpcyBwcmVzZW50LCBidXQgZmFpbGVkIFBPU1QgICAgKi8KKyAgQ1BVX05PVF9QUkVTRU5UID0gMjU1ICAgICAgICAgICAgICAgICAvKiBDUFUgbm90IHByZXNlbnQgICAgICAgICAgICAgICAgICAgICovCisgIH0gQ1BVX1NUQVRFOworCit0eXBlZGVmIHN0cnVjdCBfUFBDX0NQVSB7CisgIHVuc2lnbmVkIGxvbmcgQ3B1VHlwZTsgICAgICAgICAgICAgICAgLyogUmVzdWx0IG9mIG1mc3ByIGZyb20gUHJvY2Vzc29yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiBSZWdpc3RlciAoUFZSKS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQVlIoMC0xNSkgPSBWZXJzaW9uIChlLmcuIDYwMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQVlIoMTYtMzEgPSBFQyBMZXZlbCAgICAgICAgICAgICAgICovCisgIHVuc2lnbmVkIGNoYXIgQ3B1TnVtYmVyOyAgICAgICAgICAgICAgLyogQ1BVIE51bWJlciBmb3IgdGhpcyBwcm9jZXNzb3IgICAgICAqLworICB1bnNpZ25lZCBjaGFyIENwdVN0YXRlOyAgICAgICAgICAgICAgIC8qIENQVSBTdGF0ZSwgc2VlIENQVV9TVEFURSBlbnVtICAgICAgKi8KKyAgdW5zaWduZWQgc2hvcnQgUmVzZXJ2ZWQ7CisgIH0gUFBDX0NQVTsKKwordHlwZWRlZiBzdHJ1Y3QgX1BQQ19NRU0geworICB1bnNpZ25lZCBsb25nIFNJTU1TaXplOyAgICAgICAgICAgICAgIC8qIDAgLSBhYnNlbnQgb3IgYmFkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOE0sIDMyTSAoaW4gTUIpICAgICAgICAgICAgICAgICAgICAqLworICB9IFBQQ19NRU07CisKK3R5cGVkZWYgZW51bSBfTUVNX1VTQUdFIHsKKyAgT3RoZXIgPSAweDgwMDAsCisgIFJlc3VtZUJsb2NrID0gMHg0MDAwLCAgICAgICAgICAgICAgICAgLyogZm9yIHVzZSBieSBwb3dlciBtYW5hZ2VtZW50ICAgICAgICAqLworICBTeXN0ZW1ST00gPSAweDIwMDAsICAgICAgICAgICAgICAgICAgIC8qIEZsYXNoIG1lbW9yeSAocG9wdWxhdGVkKSAgICAgICAgICAgKi8KKyAgVW5Qb3BTeXN0ZW1ST00gPSAweDEwMDAsICAgICAgICAgICAgICAvKiBVbnBvcHVsYXRlZCBwYXJ0IG9mIFN5c3RlbVJPTSBhcmVhICovCisgIElPTWVtb3J5ID0gMHgwODAwLAorICBTeXN0ZW1JTyA9IDB4MDQwMCwKKyAgU3lzdGVtUmVncyA9IDB4MDIwMCwKKyAgUENJQWRkciA9IDB4MDEwMCwKKyAgUENJQ29uZmlnID0gMHg4MCwKKyAgSVNBQWRkciA9IDB4NDAsCisgIFVucG9wdWxhdGVkID0gMHgyMCwgICAgICAgICAgICAgICAgICAgLyogVW5wb3B1bGF0ZWQgcGFydCBvZiBTeXN0ZW0gTWVtb3J5ICAqLworICBGcmVlID0gMHgxMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZyZWUgcGFydCBvZiBTeXN0ZW0gTWVtb3J5ICAgICAgICAgKi8KKyAgQm9vdEltYWdlID0gMHgwOCwgICAgICAgICAgICAgICAgICAgICAvKiBCb290SW1hZ2UgcGFydCBvZiBTeXN0ZW0gTWVtb3J5ICAgICovCisgIEZpcm13YXJlQ29kZSA9IDB4MDQsICAgICAgICAgICAgICAgICAgLyogRmlybXdhcmVDb2RlIHBhcnQgb2YgU3lzdGVtIE1lbW9yeSAqLworICBGaXJtd2FyZUhlYXAgPSAweDAyLCAgICAgICAgICAgICAgICAgIC8qIEZpcm13YXJlSGVhcCBwYXJ0IG9mIFN5c3RlbSBNZW1vcnkgKi8KKyAgRmlybXdhcmVTdGFjayA9IDB4MDEgICAgICAgICAgICAgICAgICAvKiBGaXJtd2FyZVN0YWNrIHBhcnQgb2YgU3lzdGVtIE1lbW9yeSovCisgIH0gTUVNX1VTQUdFOworCit0eXBlZGVmIHN0cnVjdCBfTUVNX01BUCB7CisgIHVuc2lnbmVkIGxvbmcgVXNhZ2U7ICAgICAgICAgICAgICAgICAgLyogU2VlIE1FTV9VU0FHRSBhYm92ZSAgICAgICAgICAgICAgICAqLworICB1bnNpZ25lZCBsb25nIEJhc2VQYWdlOyAgICAgICAgICAgICAgIC8qIFBhZ2UgbnVtYmVyIG1lYXN1cmVkIGluIDRLQiBwYWdlcyAgKi8KKyAgdW5zaWduZWQgbG9uZyBQYWdlQ291bnQ7ICAgICAgICAgICAgICAvKiBQYWdlIGNvdW50IG1lYXN1cmVkIGluIDRLQiBwYWdlcyAgICovCisgIH0gTUVNX01BUDsKKwordHlwZWRlZiBzdHJ1Y3QgX1JFU0lEVUFMIHsKKyAgdW5zaWduZWQgbG9uZyBSZXNpZHVhbExlbmd0aDsgICAgICAgICAvKiBMZW5ndGggb2YgUmVzaWR1YWwgICAgICAgICAgICAgICAgICovCisgIHVuc2lnbmVkIGNoYXIgVmVyc2lvbjsgICAgICAgICAgICAgICAgLyogb2YgdGhpcyBkYXRhIHN0cnVjdHVyZSAgICAgICAgICAgICAqLworICB1bnNpZ25lZCBjaGFyIFJldmlzaW9uOyAgICAgICAgICAgICAgIC8qIG9mIHRoaXMgZGF0YSBzdHJ1Y3R1cmUgICAgICAgICAgICAgKi8KKyAgdW5zaWduZWQgc2hvcnQgRUM7ICAgICAgICAgICAgICAgICAgICAvKiBvZiB0aGlzIGRhdGEgc3RydWN0dXJlICAgICAgICAgICAgICovCisgIC8qIFZQRCAqLworICBWUEQgVml0YWxQcm9kdWN0RGF0YTsKKyAgLyogQ1BVICovCisgIHVuc2lnbmVkIHNob3J0IE1heE51bUNwdXM7ICAgICAgICAgICAgLyogTWF4IENQVXMgaW4gdGhpcyBzeXN0ZW0gICAgICAgICAgICAqLworICB1bnNpZ25lZCBzaG9ydCBBY3R1YWxOdW1DcHVzOyAgICAgICAgIC8qIEFjdHVhbE51bUNwdXMgPCBNYXhOdW1DcHVzIG1lYW5zICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0aGF0IHRoZXJlIGFyZSB1bnBvcHVsYXRlZCBvciAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb3RoZXJ3aXNlIHVudXNhYmxlIGNwdSBsb2NhdGlvbnMgICAqLworICBQUENfQ1BVIENwdXNbTUFYX0NQVVNdOworICAvKiBNZW1vcnkgKi8KKyAgdW5zaWduZWQgbG9uZyBUb3RhbE1lbW9yeTsgICAgICAgICAgICAvKiBUb3RhbCBhbW91bnQgb2YgbWVtb3J5IGluc3RhbGxlZCAgICovCisgIHVuc2lnbmVkIGxvbmcgR29vZE1lbW9yeTsgICAgICAgICAgICAgLyogVG90YWwgYW1vdW50IG9mIGdvb2QgbWVtb3J5ICAgICAgICAqLworICB1bnNpZ25lZCBsb25nIEFjdHVhbE51bU1lbVNlZ3M7CisgIE1FTV9NQVAgU2Vnc1tNQVhfTUVNX1NFR1NdOworICB1bnNpZ25lZCBsb25nIEFjdHVhbE51bU1lbW9yaWVzOworICBQUENfTUVNIE1lbW9yaWVzW01BWF9NRU1TXTsKKyAgLyogRGV2aWNlcyAqLworICB1bnNpZ25lZCBsb25nIEFjdHVhbE51bURldmljZXM7CisgIFBQQ19ERVZJQ0UgRGV2aWNlc1tNQVhfREVWSUNFU107CisgIHVuc2lnbmVkIGNoYXIgRGV2aWNlUG5QSGVhcFsyKk1BWF9ERVZJQ0VTKkFWRV9QTlBfU0laRV07CisgIH0gUkVTSURVQUw7CisKKworLyoKKyAqIEZvcndhcmQgZGVjbGFyYXRpb24gLSB3ZSBjYW4ndCBpbmNsdWRlIDxsaW51eC9wY2kuaD4gYmVjYXVzZSBpdAorICogYnJlYWtzIHRoZSBib290IGxvYWRlcgorICovCitzdHJ1Y3QgcGNpX2RldjsKKworZXh0ZXJuIFJFU0lEVUFMICpyZXM7CitleHRlcm4gdm9pZCBwcmludF9yZXNpZHVhbF9kZXZpY2VfaW5mbyh2b2lkKTsKK2V4dGVybiBQUENfREVWSUNFICpyZXNpZHVhbF9maW5kX2RldmljZSh1bnNpZ25lZCBsb25nIEJ1c01hc2ssCisJCQkJCXVuc2lnbmVkIGNoYXIgKiBEZXZJRCwgaW50IEJhc2VUeXBlLAorCQkJCQlpbnQgU3ViVHlwZSwgaW50IEludGVyZmFjZSwgaW50IG4pOworZXh0ZXJuIGludCByZXNpZHVhbF9wY2lkZXZfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYpOworZXh0ZXJuIHZvaWQgcmVzaWR1YWxfaXJxX21hc2soY2hhciAqaXJxX2VkZ2VfbWFza19sbywgY2hhciAqaXJxX2VkZ2VfbWFza19oaSk7CitleHRlcm4gdW5zaWduZWQgaW50IHJlc2lkdWFsX2lzYXBpY19hZGRyKHZvaWQpOworZXh0ZXJuIFBuUF9UQUdfUEFDS0VUICpQblBfZmluZF9wYWNrZXQodW5zaWduZWQgY2hhciAqcCwgdW5zaWduZWQgcGFja2V0X3RhZywKKwkJCQkgICAgICAgaW50IG4pOworZXh0ZXJuIFBuUF9UQUdfUEFDS0VUICpQblBfZmluZF9zbWFsbF92ZW5kb3JfcGFja2V0KHVuc2lnbmVkIGNoYXIgKnAsCisJCQkJCQkgICAgdW5zaWduZWQgcGFja2V0X3R5cGUsCisJCQkJCQkgICAgaW50IG4pOworZXh0ZXJuIFBuUF9UQUdfUEFDS0VUICpQblBfZmluZF9sYXJnZV92ZW5kb3JfcGFja2V0KHVuc2lnbmVkIGNoYXIgKnAsCisJCQkJCQkgICAgdW5zaWduZWQgcGFja2V0X3R5cGUsCisJCQkJCQkgICAgaW50IG4pOworCisjaWZkZWYgQ09ORklHX1BSRVBfUkVTSURVQUwKKyNkZWZpbmUgaGF2ZV9yZXNpZHVhbF9kYXRhCShyZXMgJiYgcmVzLT5SZXNpZHVhbExlbmd0aCkKKyNlbHNlCisjZGVmaW5lIGhhdmVfcmVzaWR1YWxfZGF0YQkwCisjZW5kaWYKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworI2VuZGlmICAvKiBuZGVmIF9SRVNJRFVBTF8gKi8KKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9yZXNvdXJjZS5oIGIvaW5jbHVkZS9hc20tcHBjL3Jlc291cmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZhMWVhMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9yZXNvdXJjZS5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfUFBDX1JFU09VUkNFX0gKKyNkZWZpbmUgX1BQQ19SRVNPVVJDRV9ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9yZXNvdXJjZS5oPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9yaGVhcC5oIGIvaW5jbHVkZS9hc20tcHBjL3JoZWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZjYTFmNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9yaGVhcC5oCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1wcGMvcmhlYXAuYworICoKKyAqIEhlYWRlciBmaWxlIGZvciB0aGUgaW1wbGVtZW50YXRpb24gb2YgYSByZW1vdGUgaGVhcC4KKyAqCisgKiBBdXRob3I6IFBhbnRlbGlzIEFudG9uaW91IDxwYW50b0BpbnRyYWNvbS5ncj4KKyAqCisgKiAyMDA0IChjKSBJTlRSQUNPTSBTLkEuIEdyZWVjZS4gVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtCisgKiBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3MKKyAqIG9yIGltcGxpZWQuCisgKi8KKworI2lmbmRlZiBfX0FTTV9QUENfUkhFQVBfSF9fCisjZGVmaW5lIF9fQVNNX1BQQ19SSEVBUF9IX18KKworI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKwordHlwZWRlZiBzdHJ1Y3QgX3JoX2Jsb2NrIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJdm9pZCAqc3RhcnQ7CisJaW50IHNpemU7CisJY29uc3QgY2hhciAqb3duZXI7Cit9IHJoX2Jsb2NrX3Q7CisKK3R5cGVkZWYgc3RydWN0IF9yaF9pbmZvIHsKKwl1bnNpZ25lZCBpbnQgYWxpZ25tZW50OworCWludCBtYXhfYmxvY2tzOworCWludCBlbXB0eV9zbG90czsKKwlyaF9ibG9ja190ICpibG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGVtcHR5X2xpc3Q7CisJc3RydWN0IGxpc3RfaGVhZCBmcmVlX2xpc3Q7CisJc3RydWN0IGxpc3RfaGVhZCB0YWtlbl9saXN0OworCXVuc2lnbmVkIGludCBmbGFnczsKK30gcmhfaW5mb190OworCisjZGVmaW5lIFJISUZfU1RBVElDX0lORk8JMHgxCisjZGVmaW5lIFJISUZfU1RBVElDX0JMT0NLCTB4MgorCit0eXBlZGVmIHN0cnVjdCByaF9zdGF0c190IHsKKwl2b2lkICpzdGFydDsKKwlpbnQgc2l6ZTsKKwljb25zdCBjaGFyICpvd25lcjsKK30gcmhfc3RhdHNfdDsKKworI2RlZmluZSBSSEdTX0ZSRUUJMAorI2RlZmluZSBSSEdTX1RBS0VOCTEKKworLyogQ3JlYXRlIGEgcmVtb3RlIGhlYXAgZHluYW1pY2FsbHkgKi8KK2V4dGVybiByaF9pbmZvX3QgKnJoX2NyZWF0ZSh1bnNpZ25lZCBpbnQgYWxpZ25tZW50KTsKKworLyogRGVzdHJveSBhIHJlbW90ZSBoZWFwLCBjcmVhdGVkIGJ5IHJoX2NyZWF0ZSgpICovCitleHRlcm4gdm9pZCByaF9kZXN0cm95KHJoX2luZm9fdCAqIGluZm8pOworCisvKiBJbml0aWFsaXplIGluIHBsYWNlIGEgcmVtb3RlIGluZm8gYmxvY2sgKi8KK2V4dGVybiB2b2lkIHJoX2luaXQocmhfaW5mb190ICogaW5mbywgdW5zaWduZWQgaW50IGFsaWdubWVudCwgaW50IG1heF9ibG9ja3MsCisJCSAgICByaF9ibG9ja190ICogYmxvY2spOworCisvKiBBdHRhY2ggYSBmcmVlIHJlZ2lvbiB0byBtYW5hZ2UgKi8KK2V4dGVybiBpbnQgcmhfYXR0YWNoX3JlZ2lvbihyaF9pbmZvX3QgKiBpbmZvLCB2b2lkICpzdGFydCwgaW50IHNpemUpOworCisvKiBEZXRhY2ggYSBmcmVlIHJlZ2lvbiAqLworZXh0ZXJuIHZvaWQgKnJoX2RldGFjaF9yZWdpb24ocmhfaW5mb190ICogaW5mbywgdm9pZCAqc3RhcnQsIGludCBzaXplKTsKKworLyogQWxsb2NhdGUgdGhlIGdpdmVuIHNpemUgZnJvbSB0aGUgcmVtb3RlIGhlYXAgKi8KK2V4dGVybiB2b2lkICpyaF9hbGxvYyhyaF9pbmZvX3QgKiBpbmZvLCBpbnQgc2l6ZSwgY29uc3QgY2hhciAqb3duZXIpOworCisvKiBBbGxvY2F0ZSB0aGUgZ2l2ZW4gc2l6ZSBmcm9tIHRoZSBnaXZlbiBhZGRyZXNzICovCitleHRlcm4gdm9pZCAqcmhfYWxsb2NfZml4ZWQocmhfaW5mb190ICogaW5mbywgdm9pZCAqc3RhcnQsIGludCBzaXplLAorCQkJICAgIGNvbnN0IGNoYXIgKm93bmVyKTsKKworLyogRnJlZSB0aGUgYWxsb2NhdGVkIGFyZWEgKi8KK2V4dGVybiBpbnQgcmhfZnJlZShyaF9pbmZvX3QgKiBpbmZvLCB2b2lkICpzdGFydCk7CisKKy8qIEdldCBzdGF0cyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzICovCitleHRlcm4gaW50IHJoX2dldF9zdGF0cyhyaF9pbmZvX3QgKiBpbmZvLCBpbnQgd2hhdCwgaW50IG1heF9zdGF0cywKKwkJCXJoX3N0YXRzX3QgKiBzdGF0cyk7CisKKy8qIFNpbXBsZSBkdW1wIG9mIHJlbW90ZSBoZWFwIGluZm8gKi8KK2V4dGVybiB2b2lkIHJoX2R1bXAocmhfaW5mb190ICogaW5mbyk7CisKKy8qIFNldCBvd25lciBvZiB0YWtlbiBibG9jayAqLworZXh0ZXJuIGludCByaF9zZXRfb3duZXIocmhfaW5mb190ICogaW5mbywgdm9pZCAqc3RhcnQsIGNvbnN0IGNoYXIgKm93bmVyKTsKKworI2VuZGlmCQkJCS8qIF9fQVNNX1BQQ19SSEVBUF9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9ydGMuaCBiL2luY2x1ZGUvYXNtLXBwYy9ydGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWZiZjkxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjL3J0Yy5oCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBpbmNsdWUvYXNtLXBwYy9ydGMuaAorICoKKyAqIEF1dGhvcjogVG9tIFJpbmkgPHRyaW5pQG12aXN0YS5jb20+CisgKgorICogMjAwMiAoYykgTW9udGFWaXN0YSwgU29mdHdhcmUsIEluYy4gIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0KKyAqIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcworICogb3IgaW1wbGllZC4KKyAqCisgKiBCYXNlZCBvbjoKKyAqIGluY2x1ZGUvYXNtLW02OGsvcnRjLmgKKyAqCisgKiBDb3B5cmlnaHQgUmljaGFyZCBaaWRsaWNreQorICogaW1wbGVtZW50YXRpb24gZGV0YWlscyBmb3IgZ2VucnRjL3E0MHJ0YyBkcml2ZXIKKyAqCisgKiBBbmQgdGhlIG9sZCBkcml2ZXJzL21hY2ludG9zaC9ydGMuYyB3aGljaCB3YXMgaGVhdmlseSBiYXNlZCBvbjoKKyAqIExpbnV4L1NQQVJDIFJlYWwgVGltZSBDbG9jayBEcml2ZXIKKyAqIENvcHlyaWdodCAoQykgMTk5NiBUaG9tYXMgSy4gRHlhcyAodGR5YXNAZWRlbi5ydXRnZXJzLmVkdSkKKyAqCisgKiBXaXRoIGFkZGl0aW9uYWwgd29yayBieSBQYXVsIE1hY2tlcnJhcyBhbmQgRnJhbnogU2lybC4KKyAqLworCisjaWZuZGVmIF9fQVNNX1JUQ19IX18KKyNkZWZpbmUgX19BU01fUlRDX0hfXworCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvcnRjLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgorI2luY2x1ZGUgPGFzbS90aW1lLmg+CisKKyNkZWZpbmUgUlRDX1BJRSAweDQwCQkvKiBwZXJpb2RpYyBpbnRlcnJ1cHQgZW5hYmxlICovCisjZGVmaW5lIFJUQ19BSUUgMHgyMAkJLyogYWxhcm0gaW50ZXJydXB0IGVuYWJsZSAqLworI2RlZmluZSBSVENfVUlFIDB4MTAJCS8qIHVwZGF0ZS1maW5pc2hlZCBpbnRlcnJ1cHQgZW5hYmxlICovCisKKy8qIHNvbWUgZHVtbXkgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgUlRDX0JBVFRfQkFEIDB4MTAwCS8qIGJhdHRlcnkgYmFkICovCisjZGVmaW5lIFJUQ19TUVdFIDB4MDgJCS8qIGVuYWJsZSBzcXVhcmUtd2F2ZSBvdXRwdXQgKi8KKyNkZWZpbmUgUlRDX0RNX0JJTkFSWSAweDA0CS8qIGFsbCB0aW1lL2RhdGUgdmFsdWVzIGFyZSBCQ0QgaWYgY2xlYXIgKi8KKyNkZWZpbmUgUlRDXzI0SCAweDAyCQkvKiAyNCBob3VyIG1vZGUgLSBlbHNlIGhvdXJzIGJpdCA3IG1lYW5zIHBtICovCisjZGVmaW5lIFJUQ19EU1RfRU4gMHgwMQkgICAgICAgIC8qIGF1dG8gc3dpdGNoIERTVCAtIHdvcmtzIGYuIFVTQSBvbmx5ICovCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldF9ydGNfdGltZShzdHJ1Y3QgcnRjX3RpbWUgKnRpbWUpCit7CisJaWYgKHBwY19tZC5nZXRfcnRjX3RpbWUpIHsKKwkJdW5zaWduZWQgbG9uZyBub3d0aW1lOworCisJCW5vd3RpbWUgPSAocHBjX21kLmdldF9ydGNfdGltZSkoKTsKKworCQl0b190bShub3d0aW1lLCB0aW1lKTsKKworCQl0aW1lLT50bV95ZWFyIC09IDE5MDA7CisJCXRpbWUtPnRtX21vbiAtPSAxOyAvKiBNYWtlIHN1cmUgdXNlcmxhbmQgaGFzIGEgMC1iYXNlZCBtb250aCAqLworCX0KKwlyZXR1cm4gUlRDXzI0SDsKK30KKworLyogU2V0IHRoZSBjdXJyZW50IGRhdGUgYW5kIHRpbWUgaW4gdGhlIHJlYWwgdGltZSBjbG9jay4gKi8KK3N0YXRpYyBpbmxpbmUgaW50IHNldF9ydGNfdGltZShzdHJ1Y3QgcnRjX3RpbWUgKnRpbWUpCit7CisJaWYgKHBwY19tZC5nZXRfcnRjX3RpbWUpIHsKKwkJdW5zaWduZWQgbG9uZyBub3d0aW1lOworCisJCW5vd3RpbWUgPSBta3RpbWUodGltZS0+dG1feWVhcisxOTAwLCB0aW1lLT50bV9tb24rMSwKKwkJCQl0aW1lLT50bV9tZGF5LCB0aW1lLT50bV9ob3VyLCB0aW1lLT50bV9taW4sCisJCQkJdGltZS0+dG1fc2VjKTsKKworCQkocHBjX21kLnNldF9ydGNfdGltZSkobm93dGltZSk7CisKKwkJcmV0dXJuIDA7CisJfSBlbHNlCisJCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZXRfcnRjX3NzKHZvaWQpCit7CisJc3RydWN0IHJ0Y190aW1lIGg7CisKKwlnZXRfcnRjX3RpbWUoJmgpOworCXJldHVybiBoLnRtX3NlYzsKK30KKworc3RhdGljIGlubGluZSBpbnQgZ2V0X3J0Y19wbGwoc3RydWN0IHJ0Y19wbGxfaW5mbyAqcGxsKQoreworCXJldHVybiAtRUlOVkFMOworfQorc3RhdGljIGlubGluZSBpbnQgc2V0X3J0Y19wbGwoc3RydWN0IHJ0Y19wbGxfaW5mbyAqcGxsKQoreworCXJldHVybiAtRUlOVkFMOworfQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9fQVNNX1JUQ19IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9yd3NlbS5oIGIvaW5jbHVkZS9hc20tcHBjL3J3c2VtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U3MzhmNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9yd3NlbS5oCkBAIC0wLDAgKzEsMTcyIEBACisvKgorICogaW5jbHVkZS9hc20tcHBjL3J3c2VtLmg6IFIvVyBzZW1hcGhvcmVzIGZvciBQUEMgdXNpbmcgdGhlIHN0dWZmCisgKiBpbiBsaWIvcndzZW0uYy4gIEFkYXB0ZWQgbGFyZ2VseSBmcm9tIGluY2x1ZGUvYXNtLWkzODYvcndzZW0uaAorICogYnkgUGF1bCBNYWNrZXJyYXMgPHBhdWx1c0BzYW1iYS5vcmc+LgorICovCisKKyNpZm5kZWYgX1BQQ19SV1NFTV9ICisjZGVmaW5lIF9QUENfUldTRU1fSAorCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisKKy8qCisgKiB0aGUgc2VtYXBob3JlIGRlZmluaXRpb24KKyAqLworc3RydWN0IHJ3X3NlbWFwaG9yZSB7CisJLyogWFhYIHRoaXMgc2hvdWxkIGJlIGFibGUgdG8gYmUgYW4gYXRvbWljX3QgIC0tIHBhdWx1cyAqLworCXNpZ25lZCBsb25nCQljb3VudDsKKyNkZWZpbmUgUldTRU1fVU5MT0NLRURfVkFMVUUJCTB4MDAwMDAwMDAKKyNkZWZpbmUgUldTRU1fQUNUSVZFX0JJQVMJCTB4MDAwMDAwMDEKKyNkZWZpbmUgUldTRU1fQUNUSVZFX01BU0sJCTB4MDAwMGZmZmYKKyNkZWZpbmUgUldTRU1fV0FJVElOR19CSUFTCQkoLTB4MDAwMTAwMDApCisjZGVmaW5lIFJXU0VNX0FDVElWRV9SRUFEX0JJQVMJCVJXU0VNX0FDVElWRV9CSUFTCisjZGVmaW5lIFJXU0VNX0FDVElWRV9XUklURV9CSUFTCQkoUldTRU1fV0FJVElOR19CSUFTICsgUldTRU1fQUNUSVZFX0JJQVMpCisJc3BpbmxvY2tfdAkJd2FpdF9sb2NrOworCXN0cnVjdCBsaXN0X2hlYWQJd2FpdF9saXN0OworI2lmIFJXU0VNX0RFQlVHCisJaW50CQkJZGVidWc7CisjZW5kaWYKK307CisKKy8qCisgKiBpbml0aWFsaXNhdGlvbgorICovCisjaWYgUldTRU1fREVCVUcKKyNkZWZpbmUgX19SV1NFTV9ERUJVR19JTklUICAgICAgLCAwCisjZWxzZQorI2RlZmluZSBfX1JXU0VNX0RFQlVHX0lOSVQJLyogKi8KKyNlbmRpZgorCisjZGVmaW5lIF9fUldTRU1fSU5JVElBTElaRVIobmFtZSkgXAorCXsgUldTRU1fVU5MT0NLRURfVkFMVUUsIFNQSU5fTE9DS19VTkxPQ0tFRCwgXAorCSAgTElTVF9IRUFEX0lOSVQoKG5hbWUpLndhaXRfbGlzdCkgXAorCSAgX19SV1NFTV9ERUJVR19JTklUIH0KKworI2RlZmluZSBERUNMQVJFX1JXU0VNKG5hbWUpCQlcCisJc3RydWN0IHJ3X3NlbWFwaG9yZSBuYW1lID0gX19SV1NFTV9JTklUSUFMSVpFUihuYW1lKQorCitleHRlcm4gc3RydWN0IHJ3X3NlbWFwaG9yZSAqcndzZW1fZG93bl9yZWFkX2ZhaWxlZChzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pOworZXh0ZXJuIHN0cnVjdCByd19zZW1hcGhvcmUgKnJ3c2VtX2Rvd25fd3JpdGVfZmFpbGVkKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSk7CitleHRlcm4gc3RydWN0IHJ3X3NlbWFwaG9yZSAqcndzZW1fd2FrZShzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pOworZXh0ZXJuIHN0cnVjdCByd19zZW1hcGhvcmUgKnJ3c2VtX2Rvd25ncmFkZV93YWtlKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3J3c2VtKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKK3sKKwlzZW0tPmNvdW50ID0gUldTRU1fVU5MT0NLRURfVkFMVUU7CisJc3Bpbl9sb2NrX2luaXQoJnNlbS0+d2FpdF9sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmc2VtLT53YWl0X2xpc3QpOworI2lmIFJXU0VNX0RFQlVHCisJc2VtLT5kZWJ1ZyA9IDA7CisjZW5kaWYKK30KKworLyoKKyAqIGxvY2sgZm9yIHJlYWRpbmcKKyAqLworc3RhdGljIGlubGluZSB2b2lkIF9fZG93bl9yZWFkKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKK3sKKwlpZiAoYXRvbWljX2luY19yZXR1cm4oKGF0b21pY190ICopKCZzZW0tPmNvdW50KSkgPiAwKQorCQlzbXBfd21iKCk7CisJZWxzZQorCQlyd3NlbV9kb3duX3JlYWRfZmFpbGVkKHNlbSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fZG93bl9yZWFkX3RyeWxvY2soc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQoreworCWludCB0bXA7CisKKwl3aGlsZSAoKHRtcCA9IHNlbS0+Y291bnQpID49IDApIHsKKwkJaWYgKHRtcCA9PSBjbXB4Y2hnKCZzZW0tPmNvdW50LCB0bXAsCisJCQkJICAgdG1wICsgUldTRU1fQUNUSVZFX1JFQURfQklBUykpIHsKKwkJCXNtcF93bWIoKTsKKwkJCXJldHVybiAxOworCQl9CisJfQorCXJldHVybiAwOworfQorCisvKgorICogbG9jayBmb3Igd3JpdGluZworICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19kb3duX3dyaXRlKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKK3sKKwlpbnQgdG1wOworCisJdG1wID0gYXRvbWljX2FkZF9yZXR1cm4oUldTRU1fQUNUSVZFX1dSSVRFX0JJQVMsCisJCQkJKGF0b21pY190ICopKCZzZW0tPmNvdW50KSk7CisJaWYgKHRtcCA9PSBSV1NFTV9BQ1RJVkVfV1JJVEVfQklBUykKKwkJc21wX3dtYigpOworCWVsc2UKKwkJcndzZW1fZG93bl93cml0ZV9mYWlsZWQoc2VtKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19kb3duX3dyaXRlX3RyeWxvY2soc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQoreworCWludCB0bXA7CisKKwl0bXAgPSBjbXB4Y2hnKCZzZW0tPmNvdW50LCBSV1NFTV9VTkxPQ0tFRF9WQUxVRSwKKwkJICAgICAgUldTRU1fQUNUSVZFX1dSSVRFX0JJQVMpOworCXNtcF93bWIoKTsKKwlyZXR1cm4gdG1wID09IFJXU0VNX1VOTE9DS0VEX1ZBTFVFOworfQorCisvKgorICogdW5sb2NrIGFmdGVyIHJlYWRpbmcKKyAqLworc3RhdGljIGlubGluZSB2b2lkIF9fdXBfcmVhZChzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCit7CisJaW50IHRtcDsKKworCXNtcF93bWIoKTsKKwl0bXAgPSBhdG9taWNfZGVjX3JldHVybigoYXRvbWljX3QgKikoJnNlbS0+Y291bnQpKTsKKwlpZiAodG1wIDwgLTEgJiYgKHRtcCAmIFJXU0VNX0FDVElWRV9NQVNLKSA9PSAwKQorCQlyd3NlbV93YWtlKHNlbSk7Cit9CisKKy8qCisgKiB1bmxvY2sgYWZ0ZXIgd3JpdGluZworICovCitzdGF0aWMgaW5saW5lIHZvaWQgX191cF93cml0ZShzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCit7CisJc21wX3dtYigpOworCWlmIChhdG9taWNfc3ViX3JldHVybihSV1NFTV9BQ1RJVkVfV1JJVEVfQklBUywKKwkJCSAgICAgIChhdG9taWNfdCAqKSgmc2VtLT5jb3VudCkpIDwgMCkKKwkJcndzZW1fd2FrZShzZW0pOworfQorCisvKgorICogaW1wbGVtZW50IGF0b21pYyBhZGQgZnVuY3Rpb25hbGl0eQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgcndzZW1fYXRvbWljX2FkZChpbnQgZGVsdGEsIHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKK3sKKwlhdG9taWNfYWRkKGRlbHRhLCAoYXRvbWljX3QgKikoJnNlbS0+Y291bnQpKTsKK30KKworLyoKKyAqIGRvd25ncmFkZSB3cml0ZSBsb2NrIHRvIHJlYWQgbG9jaworICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19kb3duZ3JhZGVfd3JpdGUoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQoreworCWludCB0bXA7CisKKwlzbXBfd21iKCk7CisJdG1wID0gYXRvbWljX2FkZF9yZXR1cm4oLVJXU0VNX1dBSVRJTkdfQklBUywgKGF0b21pY190ICopKCZzZW0tPmNvdW50KSk7CisJaWYgKHRtcCA8IDApCisJCXJ3c2VtX2Rvd25ncmFkZV93YWtlKHNlbSk7Cit9CisKKy8qCisgKiBpbXBsZW1lbnQgZXhjaGFuZ2UgYW5kIGFkZCBmdW5jdGlvbmFsaXR5CisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHJ3c2VtX2F0b21pY191cGRhdGUoaW50IGRlbHRhLCBzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCit7CisJc21wX21iKCk7CisJcmV0dXJuIGF0b21pY19hZGRfcmV0dXJuKGRlbHRhLCAoYXRvbWljX3QgKikoJnNlbS0+Y291bnQpKTsKK30KKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAvKiBfUFBDX1JXU0VNX1hBRERfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL3NjYXR0ZXJsaXN0LmggYi9pbmNsdWRlL2FzbS1wcGMvc2NhdHRlcmxpc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjFmMThmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjL3NjYXR0ZXJsaXN0LmgKQEAgLTAsMCArMSwyNSBAQAorI2lmZGVmIF9fS0VSTkVMX18KKyNpZm5kZWYgX1BQQ19TQ0FUVEVSTElTVF9ICisjZGVmaW5lIF9QUENfU0NBVFRFUkxJU1RfSAorCisjaW5jbHVkZSA8YXNtL2RtYS5oPgorCitzdHJ1Y3Qgc2NhdHRlcmxpc3QgeworCXN0cnVjdCBwYWdlCSpwYWdlOworCXVuc2lnbmVkIGludAlvZmZzZXQ7CisJZG1hX2FkZHJfdAlkbWFfYWRkcmVzczsKKwl1bnNpZ25lZCBpbnQJbGVuZ3RoOworfTsKKworLyoKKyAqIFRoZXNlIG1hY3JvcyBzaG91bGQgYmUgdXNlZCBhZnRlciBhIHBjaV9tYXBfc2cgY2FsbCBoYXMgYmVlbiBkb25lCisgKiB0byBnZXQgYnVzIGFkZHJlc3NlcyBvZiBlYWNoIG9mIHRoZSBTRyBlbnRyaWVzIGFuZCB0aGVpciBsZW5ndGhzLgorICogWW91IHNob3VsZCBvbmx5IHdvcmsgd2l0aCB0aGUgbnVtYmVyIG9mIHNnIGVudHJpZXMgcGNpX21hcF9zZworICogcmV0dXJucywgb3IgYWx0ZXJuYXRpdmVseSBzdG9wIG9uIHRoZSBmaXJzdCBzZ19kbWFfbGVuKHNnKSB3aGljaAorICogaXMgMC4KKyAqLworI2RlZmluZSBzZ19kbWFfYWRkcmVzcyhzZykgICAgICAoKHNnKS0+ZG1hX2FkZHJlc3MpCisjZGVmaW5lIHNnX2RtYV9sZW4oc2cpICAgICAgICAgICgoc2cpLT5sZW5ndGgpCisKKyNlbmRpZiAvKiAhKF9QUENfU0NBVFRFUkxJU1RfSCkgKi8KKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvc2VjdGlvbnMuaCBiL2luY2x1ZGUvYXNtLXBwYy9zZWN0aW9ucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhOGY0M2EKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGMvc2VjdGlvbnMuaApAQCAtMCwwICsxLDMzIEBACisjaWZkZWYgX19LRVJORUxfXworI2lmbmRlZiBfUFBDX1NFQ1RJT05TX0gKKyNkZWZpbmUgX1BQQ19TRUNUSU9OU19ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zZWN0aW9ucy5oPgorCisjZGVmaW5lIF9fcG1hYyBfX2F0dHJpYnV0ZV9fICgoX19zZWN0aW9uX18gKCIucG1hYy50ZXh0IikpKQorI2RlZmluZSBfX3BtYWNkYXRhIF9fYXR0cmlidXRlX18gKChfX3NlY3Rpb25fXyAoIi5wbWFjLmRhdGEiKSkpCisjZGVmaW5lIF9fcG1hY2Z1bmMoX19hcmdwbWFjKSBcCisJX19hcmdwbWFjIF9fcG1hYzsgXAorCV9fYXJncG1hYworCQorI2RlZmluZSBfX3ByZXAgX19hdHRyaWJ1dGVfXyAoKF9fc2VjdGlvbl9fICgiLnByZXAudGV4dCIpKSkKKyNkZWZpbmUgX19wcmVwZGF0YSBfX2F0dHJpYnV0ZV9fICgoX19zZWN0aW9uX18gKCIucHJlcC5kYXRhIikpKQorI2RlZmluZSBfX3ByZXBmdW5jKF9fYXJncHJlcCkgXAorCV9fYXJncHJlcCBfX3ByZXA7IFwKKwlfX2FyZ3ByZXAKKworI2RlZmluZSBfX2NocnAgX19hdHRyaWJ1dGVfXyAoKF9fc2VjdGlvbl9fICgiLmNocnAudGV4dCIpKSkKKyNkZWZpbmUgX19jaHJwZGF0YSBfX2F0dHJpYnV0ZV9fICgoX19zZWN0aW9uX18gKCIuY2hycC5kYXRhIikpKQorI2RlZmluZSBfX2NocnBmdW5jKF9fYXJnY2hycCkgXAorCV9fYXJnY2hycCBfX2NocnA7IFwKKwlfX2FyZ2NocnAKKworLyogdGhpcyBpcyBhY3R1YWxseSBqdXN0IGNvbW1vbiBjaHJwL3BtYWMgY29kZSwgbm90IE9GIGNvZGUgLS0gQ29ydCAqLworI2RlZmluZSBfX29wZW5maXJtd2FyZSBfX2F0dHJpYnV0ZV9fICgoX19zZWN0aW9uX18gKCIub3BlbmZpcm13YXJlLnRleHQiKSkpCisjZGVmaW5lIF9fb3BlbmZpcm13YXJlZGF0YSBfX2F0dHJpYnV0ZV9fICgoX19zZWN0aW9uX18gKCIub3BlbmZpcm13YXJlLmRhdGEiKSkpCisjZGVmaW5lIF9fb3BlbmZpcm13YXJlZnVuYyhfX2FyZ29wZW5maXJtd2FyZSkgXAorCV9fYXJnb3BlbmZpcm13YXJlIF9fb3BlbmZpcm13YXJlOyBcCisJX19hcmdvcGVuZmlybXdhcmUKKwkKKyNlbmRpZiAvKiBfUFBDX1NFQ1RJT05TX0ggKi8KKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvc2VnbWVudC5oIGIvaW5jbHVkZS9hc20tcHBjL3NlZ21lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjJmNzQyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjL3NlZ21lbnQuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9zZW1hcGhvcmUuaCBiL2luY2x1ZGUvYXNtLXBwYy9zZW1hcGhvcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWU2ZTczCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjL3NlbWFwaG9yZS5oCkBAIC0wLDAgKzEsMTExIEBACisjaWZuZGVmIF9QUENfU0VNQVBIT1JFX0gKKyNkZWZpbmUgX1BQQ19TRU1BUEhPUkVfSAorCisvKgorICogU3dpcGVkIGZyb20gYXNtLXNwYXJjL3NlbWFwaG9yZS5oIGFuZCBtb2RpZmllZAorICogLS0gQ29ydCAoY29ydEBjcy5ubXQuZWR1KQorICoKKyAqIFN0b2xlIHNvbWUgcncgc3BpbmxvY2stYmFzZWQgc2VtYXBob3JlIHN0dWZmIGZyb20gYXNtLWFscGhhL3NlbWFwaG9yZS5oCisgKiAtLSBBbmkgSm9zaGkgKGFqb3NoaUB1bml4Ym94LmNvbSkKKyAqCisgKiBSZW1vdmUgc3BpbmxvY2stYmFzZWQgUlcgc2VtYXBob3JlczsgUlcgc2VtYXBob3JlIGRlZmluaXRpb25zIGFyZQorICogbm93IGluIHJ3c2VtLmggYW5kIHdlIHVzZSB0aGUgZ2VuZXJpYyBsaWIvcndzZW0uYyBpbXBsZW1lbnRhdGlvbi4KKyAqIFJld29yayBzZW1hcGhvcmVzIHRvIHVzZSBhdG9taWNfZGVjX2lmX3Bvc2l0aXZlLgorICogLS0gUGF1bCBNYWNrZXJyYXMgKHBhdWx1c0BzYW1iYS5vcmcpCisgKi8KKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L3J3c2VtLmg+CisKK3N0cnVjdCBzZW1hcGhvcmUgeworCS8qCisJICogTm90ZSB0aGF0IGFueSBuZWdhdGl2ZSB2YWx1ZSBvZiBjb3VudCBpcyBlcXVpdmFsZW50IHRvIDAsCisJICogYnV0IGFkZGl0aW9uYWxseSBpbmRpY2F0ZXMgdGhhdCBzb21lIHByb2Nlc3MoZXMpIG1pZ2h0IGJlCisJICogc2xlZXBpbmcgb24gYHdhaXQnLgorCSAqLworCWF0b21pY190IGNvdW50OworCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7Cit9OworCisjZGVmaW5lIF9fU0VNQVBIT1JFX0lOSVRJQUxJWkVSKG5hbWUsIG4pCQkJCVwKK3sJCQkJCQkJCQlcCisJLmNvdW50CQk9IEFUT01JQ19JTklUKG4pLAkJCQlcCisJLndhaXQJCT0gX19XQUlUX1FVRVVFX0hFQURfSU5JVElBTElaRVIoKG5hbWUpLndhaXQpCVwKK30KKworI2RlZmluZSBfX01VVEVYX0lOSVRJQUxJWkVSKG5hbWUpIFwKKwlfX1NFTUFQSE9SRV9JTklUSUFMSVpFUihuYW1lLCAxKQorCisjZGVmaW5lIF9fREVDTEFSRV9TRU1BUEhPUkVfR0VORVJJQyhuYW1lLCBjb3VudCkgXAorCXN0cnVjdCBzZW1hcGhvcmUgbmFtZSA9IF9fU0VNQVBIT1JFX0lOSVRJQUxJWkVSKG5hbWUsY291bnQpCisKKyNkZWZpbmUgREVDTEFSRV9NVVRFWChuYW1lKQkJX19ERUNMQVJFX1NFTUFQSE9SRV9HRU5FUklDKG5hbWUsIDEpCisjZGVmaW5lIERFQ0xBUkVfTVVURVhfTE9DS0VEKG5hbWUpCV9fREVDTEFSRV9TRU1BUEhPUkVfR0VORVJJQyhuYW1lLCAwKQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2VtYV9pbml0IChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0sIGludCB2YWwpCit7CisJYXRvbWljX3NldCgmc2VtLT5jb3VudCwgdmFsKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzZW0tPndhaXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9NVVRFWCAoc3RydWN0IHNlbWFwaG9yZSAqc2VtKQoreworCXNlbWFfaW5pdChzZW0sIDEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9NVVRFWF9MT0NLRUQgKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKK3sKKwlzZW1hX2luaXQoc2VtLCAwKTsKK30KKworZXh0ZXJuIHZvaWQgX19kb3duKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pOworZXh0ZXJuIGludCAgX19kb3duX2ludGVycnVwdGlibGUoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSk7CitleHRlcm4gdm9pZCBfX3VwKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pOworCitleHRlcm4gaW5saW5lIHZvaWQgZG93bihzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQoreworCW1pZ2h0X3NsZWVwKCk7CisKKwkvKgorCSAqIFRyeSB0byBnZXQgdGhlIHNlbWFwaG9yZSwgdGFrZSB0aGUgc2xvdyBwYXRoIGlmIHdlIGZhaWwuCisJICovCisJaWYgKGF0b21pY19kZWNfcmV0dXJuKCZzZW0tPmNvdW50KSA8IDApCisJCV9fZG93bihzZW0pOworCXNtcF93bWIoKTsKK30KKworZXh0ZXJuIGlubGluZSBpbnQgZG93bl9pbnRlcnJ1cHRpYmxlKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCit7CisJaW50IHJldCA9IDA7CisKKwltaWdodF9zbGVlcCgpOworCisJaWYgKGF0b21pY19kZWNfcmV0dXJuKCZzZW0tPmNvdW50KSA8IDApCisJCXJldCA9IF9fZG93bl9pbnRlcnJ1cHRpYmxlKHNlbSk7CisJc21wX3dtYigpOworCXJldHVybiByZXQ7Cit9CisKK2V4dGVybiBpbmxpbmUgaW50IGRvd25fdHJ5bG9jayhzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQoreworCWludCByZXQ7CisKKwlyZXQgPSBhdG9taWNfZGVjX2lmX3Bvc2l0aXZlKCZzZW0tPmNvdW50KSA8IDA7CisJc21wX3dtYigpOworCXJldHVybiByZXQ7Cit9CisKK2V4dGVybiBpbmxpbmUgdm9pZCB1cChzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQoreworCXNtcF93bWIoKTsKKwlpZiAoYXRvbWljX2luY19yZXR1cm4oJnNlbS0+Y291bnQpIDw9IDApCisJCV9fdXAoc2VtKTsKK30KKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qICEoX1BQQ19TRU1BUEhPUkVfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9zZW1idWYuaCBiL2luY2x1ZGUvYXNtLXBwYy9zZW1idWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODNmNjgyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjL3NlbWJ1Zi5oCkBAIC0wLDAgKzEsMTkgQEAKKyNpZm5kZWYgX1BQQ19TRU1CVUZfSAorI2RlZmluZSBfUFBDX1NFTUJVRl9ICisKKy8qCisgKiBUaGUgc2VtaWQ2NF9kcyBzdHJ1Y3R1cmUgZm9yIFBQQyBhcmNoaXRlY3R1cmUuCisgKi8KKworc3RydWN0IHNlbWlkNjRfZHMgeworCXN0cnVjdCBpcGM2NF9wZXJtIHNlbV9wZXJtOwkJLyogcGVybWlzc2lvbnMgLi4gc2VlIGlwYy5oICovCisJdW5zaWduZWQgaW50CV9fdW51c2VkMTsKKwlfX2tlcm5lbF90aW1lX3QJc2VtX290aW1lOwkJLyogbGFzdCBzZW1vcCB0aW1lICovCisJdW5zaWduZWQgaW50CV9fdW51c2VkMjsKKwlfX2tlcm5lbF90aW1lX3QJc2VtX2N0aW1lOwkJLyogbGFzdCBjaGFuZ2UgdGltZSAqLworCXVuc2lnbmVkIGxvbmcJc2VtX25zZW1zOwkJLyogbm8uIG9mIHNlbWFwaG9yZXMgaW4gYXJyYXkgKi8KKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkMzsKKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkNDsKK307CisKKyNlbmRpZiAvKiBfUFBDX1NFTUJVRl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvc2VyaWFsLmggYi9pbmNsdWRlL2FzbS1wcGMvc2VyaWFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ0NzQzOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9zZXJpYWwuaApAQCAtMCwwICsxLDU3IEBACisvKgorICogaW5jbHVkZS9hc20tcHBjL3NlcmlhbC5oCisgKi8KKworI2lmZGVmIF9fS0VSTkVMX18KKyNpZm5kZWYgX19BU01fU0VSSUFMX0hfXworI2RlZmluZSBfX0FTTV9TRVJJQUxfSF9fCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2lmIGRlZmluZWQoQ09ORklHX0VWNjQyNjApCisjaW5jbHVkZSA8cGxhdGZvcm1zL2V2NjQyNjAuaD4KKyNlbGlmIGRlZmluZWQoQ09ORklHX0NIRVNUTlVUKQorI2luY2x1ZGUgPHBsYXRmb3Jtcy9jaGVzdG51dC5oPgorI2VsaWYgZGVmaW5lZChDT05GSUdfR0VNSU5JKQorI2luY2x1ZGUgPHBsYXRmb3Jtcy9nZW1pbmlfc2VyaWFsLmg+CisjZWxpZiBkZWZpbmVkKENPTkZJR19QT1dFUlBNQzI1MCkKKyNpbmNsdWRlIDxwbGF0Zm9ybXMvcG93ZXJwbWMyNTAuaD4KKyNlbGlmIGRlZmluZWQoQ09ORklHX0xPUEVDKQorI2luY2x1ZGUgPHBsYXRmb3Jtcy9sb3BlYy5oPgorI2VsaWYgZGVmaW5lZChDT05GSUdfTUNQTjc2NSkKKyNpbmNsdWRlIDxwbGF0Zm9ybXMvbWNwbjc2NS5oPgorI2VsaWYgZGVmaW5lZChDT05GSUdfTVZNRTUxMDApCisjaW5jbHVkZSA8cGxhdGZvcm1zL212bWU1MTAwLmg+CisjZWxpZiBkZWZpbmVkKENPTkZJR19QQUw0KQorI2luY2x1ZGUgPHBsYXRmb3Jtcy9wYWw0X3NlcmlhbC5oPgorI2VsaWYgZGVmaW5lZChDT05GSUdfUFJQTUM3NTApCisjaW5jbHVkZSA8cGxhdGZvcm1zL3BycG1jNzUwLmg+CisjZWxpZiBkZWZpbmVkKENPTkZJR19QUlBNQzgwMCkKKyNpbmNsdWRlIDxwbGF0Zm9ybXMvcHJwbWM4MDAuaD4KKyNlbGlmIGRlZmluZWQoQ09ORklHX1NBTkRQT0lOVCkKKyNpbmNsdWRlIDxwbGF0Zm9ybXMvc2FuZHBvaW50Lmg+CisjZWxpZiBkZWZpbmVkKENPTkZJR19TUFJVQ0UpCisjaW5jbHVkZSA8cGxhdGZvcm1zL3NwcnVjZS5oPgorI2VsaWYgZGVmaW5lZChDT05GSUdfNHh4KQorI2luY2x1ZGUgPGFzbS9pYm00eHguaD4KKyNlbGlmIGRlZmluZWQoQ09ORklHXzgzeHgpCisjaW5jbHVkZSA8YXNtL21wYzgzeHguaD4KKyNlbGlmIGRlZmluZWQoQ09ORklHXzg1eHgpCisjaW5jbHVkZSA8YXNtL21wYzg1eHguaD4KKyNlbGlmIGRlZmluZWQoQ09ORklHX1JBRFNUT05FX1BQQzdEKQorI2luY2x1ZGUgPHBsYXRmb3Jtcy9yYWRzdG9uZV9wcGM3ZC5oPgorI2Vsc2UKKworLyoKKyAqIFhYWCBBc3N1bWUgZm9yIG5vdyBpdCBoYXMgUEMtc3R5bGUgSVNBIHNlcmlhbCBwb3J0cy4KKyAqIFRoaXMgaXMgdHJ1ZSBmb3IgUFJlUCBhbmQgQ0hSUCBhdCBsZWFzdC4KKyAqLworI2luY2x1ZGUgPGFzbS9wY19zZXJpYWwuaD4KKworI2lmIGRlZmluZWQoQ09ORklHX01BQ19TRVJJQUwpCisjZGVmaW5lIFNFUklBTF9ERVZfT0ZGU0VUCSgoX21hY2hpbmUgPT0gX01BQ0hfcHJlcCB8fCBfbWFjaGluZSA9PSBfTUFDSF9jaHJwKSA/IDAgOiAyKQorI2VuZGlmCisKKyNlbmRpZiAvKiAhQ09ORklHX0dFTUlOSSBhbmQgb3RoZXJzICovCisjZW5kaWYgLyogX19BU01fU0VSSUFMX0hfXyAqLworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9zZXR1cC5oIGIvaW5jbHVkZS9hc20tcHBjL3NldHVwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJkMTllZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9zZXR1cC5oCkBAIC0wLDAgKzEsMTQgQEAKKyNpZmRlZiBfX0tFUk5FTF9fCisjaWZuZGVmIF9QUENfU0VUVVBfSAorI2RlZmluZSBfUFBDX1NFVFVQX0gKKworI2RlZmluZSBtNjhrX251bV9tZW1vcnkgbnVtX21lbW9yeQorI2RlZmluZSBtNjhrX21lbW9yeSBtZW1vcnkKKworI2luY2x1ZGUgPGFzbS1tNjhrL3NldHVwLmg+CisvKiBXZSBoYXZlIGEgYmlnZ2VyIGNvbW1hbmQgbGluZSBidWZmZXIuICovCisjdW5kZWYgQ09NTUFORF9MSU5FX1NJWkUKKyNkZWZpbmUgQ09NTUFORF9MSU5FX1NJWkUJNTEyCisKKyNlbmRpZiAvKiBfUFBDX1NFVFVQX0ggKi8KKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvc2htYnVmLmggYi9pbmNsdWRlL2FzbS1wcGMvc2htYnVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FjMGJkMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9zaG1idWYuaApAQCAtMCwwICsxLDM3IEBACisjaWZuZGVmIF9QUENfU0hNQlVGX0gKKyNkZWZpbmUgX1BQQ19TSE1CVUZfSAorCisvKgorICogVGhlIHNobWlkNjRfZHMgc3RydWN0dXJlIGZvciBQUEMgYXJjaGl0ZWN0dXJlLgorICovCisKK3N0cnVjdCBzaG1pZDY0X2RzIHsKKwlzdHJ1Y3QgaXBjNjRfcGVybQlzaG1fcGVybTsJLyogb3BlcmF0aW9uIHBlcm1zICovCisJdW5zaWduZWQgaW50CQlfX3VudXNlZDE7CisJX19rZXJuZWxfdGltZV90CQlzaG1fYXRpbWU7CS8qIGxhc3QgYXR0YWNoIHRpbWUgKi8KKwl1bnNpZ25lZCBpbnQJCV9fdW51c2VkMjsKKwlfX2tlcm5lbF90aW1lX3QJCXNobV9kdGltZTsJLyogbGFzdCBkZXRhY2ggdGltZSAqLworCXVuc2lnbmVkIGludAkJX191bnVzZWQzOworCV9fa2VybmVsX3RpbWVfdAkJc2htX2N0aW1lOwkvKiBsYXN0IGNoYW5nZSB0aW1lICovCisJdW5zaWduZWQgaW50CQlfX3VudXNlZDQ7CisJc2l6ZV90CQkJc2htX3NlZ3N6OwkvKiBzaXplIG9mIHNlZ21lbnQgKGJ5dGVzKSAqLworCV9fa2VybmVsX3BpZF90CQlzaG1fY3BpZDsJLyogcGlkIG9mIGNyZWF0b3IgKi8KKwlfX2tlcm5lbF9waWRfdAkJc2htX2xwaWQ7CS8qIHBpZCBvZiBsYXN0IG9wZXJhdG9yICovCisJdW5zaWduZWQgbG9uZwkJc2htX25hdHRjaDsJLyogbm8uIG9mIGN1cnJlbnQgYXR0YWNoZXMgKi8KKwl1bnNpZ25lZCBsb25nCQlfX3VudXNlZDU7CisJdW5zaWduZWQgbG9uZwkJX191bnVzZWQ2OworfTsKKworc3RydWN0IHNobWluZm82NCB7CisJdW5zaWduZWQgbG9uZwlzaG1tYXg7CisJdW5zaWduZWQgbG9uZwlzaG1taW47CisJdW5zaWduZWQgbG9uZwlzaG1tbmk7CisJdW5zaWduZWQgbG9uZwlzaG1zZWc7CisJdW5zaWduZWQgbG9uZwlzaG1hbGw7CisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDE7CisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDI7CisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDM7CisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDQ7Cit9OworCisjZW5kaWYgLyogX1BQQ19TSE1CVUZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL3NobXBhcmFtLmggYi9pbmNsdWRlL2FzbS1wcGMvc2htcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjI1MDYwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjL3NobXBhcmFtLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9QUENfU0hNUEFSQU1fSAorI2RlZmluZSBfUFBDX1NITVBBUkFNX0gKKworI2RlZmluZQlTSE1MQkEgUEFHRV9TSVpFCQkgLyogYXR0YWNoIGFkZHIgYSBtdWx0aXBsZSBvZiB0aGlzICovCisKKyNlbmRpZiAvKiBfUFBDX1NITVBBUkFNX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9zaWdjb250ZXh0LmggYi9pbmNsdWRlL2FzbS1wcGMvc2lnY29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjNWUzNTgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGMvc2lnY29udGV4dC5oCkBAIC0wLDAgKzEsMTUgQEAKKyNpZm5kZWYgX0FTTV9QUENfU0lHQ09OVEVYVF9ICisjZGVmaW5lIF9BU01fUFBDX1NJR0NPTlRFWFRfSAorCisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorCisKK3N0cnVjdCBzaWdjb250ZXh0IHsKKwl1bnNpZ25lZCBsb25nCV91bnVzZWRbNF07CisJaW50CQlzaWduYWw7CisJdW5zaWduZWQgbG9uZwloYW5kbGVyOworCXVuc2lnbmVkIGxvbmcJb2xkbWFzazsKKwlzdHJ1Y3QgcHRfcmVncyAJKnJlZ3M7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9zaWdpbmZvLmggYi9pbmNsdWRlL2FzbS1wcGMvc2lnaW5mby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiOTQzNWIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGMvc2lnaW5mby5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfUFBDX1NJR0lORk9fSAorI2RlZmluZSBfUFBDX1NJR0lORk9fSAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2lnaW5mby5oPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9zaWduYWwuaCBiL2luY2x1ZGUvYXNtLXBwYy9zaWduYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2M4Yjg4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjL3NpZ25hbC5oCkBAIC0wLDAgKzEsMTc5IEBACisjaWZuZGVmIF9BU01QUENfU0lHTkFMX0gKKyNkZWZpbmUgX0FTTVBQQ19TSUdOQUxfSAorCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisvKiBBdm9pZCB0b28gbWFueSBoZWFkZXIgb3JkZXJpbmcgcHJvYmxlbXMuICAqLworc3RydWN0IHNpZ2luZm87CisKKy8qIE1vc3QgdGhpbmdzIHNob3VsZCBiZSBjbGVhbiBlbm91Z2ggdG8gcmVkZWZpbmUgdGhpcyBhdCB3aWxsLCBpZiBjYXJlCisgICBpcyB0YWtlbiB0byBtYWtlIGxpYmMgbWF0Y2guICAqLworCisjZGVmaW5lIF9OU0lHCQk2NAorI2RlZmluZSBfTlNJR19CUFcJMzIKKyNkZWZpbmUgX05TSUdfV09SRFMJKF9OU0lHIC8gX05TSUdfQlBXKQorCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgb2xkX3NpZ3NldF90OwkJLyogYXQgbGVhc3QgMzIgYml0cyAqLworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgbG9uZyBzaWdbX05TSUdfV09SRFNdOworfSBzaWdzZXRfdDsKKworI2RlZmluZSBTSUdIVVAJCSAxCisjZGVmaW5lIFNJR0lOVAkJIDIKKyNkZWZpbmUgU0lHUVVJVAkJIDMKKyNkZWZpbmUgU0lHSUxMCQkgNAorI2RlZmluZSBTSUdUUkFQCQkgNQorI2RlZmluZSBTSUdBQlJUCQkgNgorI2RlZmluZSBTSUdJT1QJCSA2CisjZGVmaW5lIFNJR0JVUwkJIDcKKyNkZWZpbmUgU0lHRlBFCQkgOAorI2RlZmluZSBTSUdLSUxMCQkgOQorI2RlZmluZSBTSUdVU1IxCQkxMAorI2RlZmluZSBTSUdTRUdWCQkxMQorI2RlZmluZSBTSUdVU1IyCQkxMgorI2RlZmluZSBTSUdQSVBFCQkxMworI2RlZmluZSBTSUdBTFJNCQkxNAorI2RlZmluZSBTSUdURVJNCQkxNQorI2RlZmluZSBTSUdTVEtGTFQJMTYKKyNkZWZpbmUgU0lHQ0hMRAkJMTcKKyNkZWZpbmUgU0lHQ09OVAkJMTgKKyNkZWZpbmUgU0lHU1RPUAkJMTkKKyNkZWZpbmUgU0lHVFNUUAkJMjAKKyNkZWZpbmUgU0lHVFRJTgkJMjEKKyNkZWZpbmUgU0lHVFRPVQkJMjIKKyNkZWZpbmUgU0lHVVJHCQkyMworI2RlZmluZSBTSUdYQ1BVCQkyNAorI2RlZmluZSBTSUdYRlNaCQkyNQorI2RlZmluZSBTSUdWVEFMUk0JMjYKKyNkZWZpbmUgU0lHUFJPRgkJMjcKKyNkZWZpbmUgU0lHV0lOQ0gJMjgKKyNkZWZpbmUgU0lHSU8JCTI5CisjZGVmaW5lIFNJR1BPTEwJCVNJR0lPCisvKgorI2RlZmluZSBTSUdMT1NUCQkyOQorKi8KKyNkZWZpbmUgU0lHUFdSCQkzMAorI2RlZmluZSBTSUdTWVMJCTMxCisjZGVmaW5lCVNJR1VOVVNFRAkzMQorCisvKiBUaGVzZSBzaG91bGQgbm90IGJlIGNvbnNpZGVyZWQgY29uc3RhbnRzIGZyb20gdXNlcmxhbmQuICAqLworI2RlZmluZSBTSUdSVE1JTgkzMgorI2RlZmluZSBTSUdSVE1BWAlfTlNJRworCisvKgorICogU0FfRkxBR1MgdmFsdWVzOgorICoKKyAqIFNBX09OU1RBQ0sgaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQsIGJ1dCB3aWxsIGFsbG93IHNpZ2FsdHN0YWNrKDIpLgorICogU0FfSU5URVJSVVBUIGlzIGEgbm8tb3AsIGJ1dCBsZWZ0IGR1ZSB0byBoaXN0b3JpY2FsIHJlYXNvbnMuIFVzZSB0aGUKKyAqIFNBX1JFU1RBUlQgZmxhZyB0byBnZXQgcmVzdGFydGluZyBzaWduYWxzICh3aGljaCB3ZXJlIHRoZSBkZWZhdWx0IGxvbmcgYWdvKQorICogU0FfTk9DTERTVE9QIGZsYWcgdG8gdHVybiBvZmYgU0lHQ0hMRCB3aGVuIGNoaWxkcmVuIHN0b3AuCisgKiBTQV9SRVNFVEhBTkQgY2xlYXJzIHRoZSBoYW5kbGVyIHdoZW4gdGhlIHNpZ25hbCBpcyBkZWxpdmVyZWQuCisgKiBTQV9OT0NMRFdBSVQgZmxhZyBvbiBTSUdDSExEIHRvIGluaGliaXQgem9tYmllcy4KKyAqIFNBX05PREVGRVIgcHJldmVudHMgdGhlIGN1cnJlbnQgc2lnbmFsIGZyb20gYmVpbmcgbWFza2VkIGluIHRoZSBoYW5kbGVyLgorICoKKyAqIFNBX09ORVNIT1QgYW5kIFNBX05PTUFTSyBhcmUgdGhlIGhpc3RvcmljYWwgTGludXggbmFtZXMgZm9yIHRoZSBTaW5nbGUKKyAqIFVuaXggbmFtZXMgUkVTRVRIQU5EIGFuZCBOT0RFRkVSIHJlc3BlY3RpdmVseS4KKyAqLworI2RlZmluZSBTQV9OT0NMRFNUT1AJMHgwMDAwMDAwMQorI2RlZmluZSBTQV9OT0NMRFdBSVQJMHgwMDAwMDAwMgorI2RlZmluZSBTQV9TSUdJTkZPCTB4MDAwMDAwMDQKKyNkZWZpbmUgU0FfT05TVEFDSwkweDA4MDAwMDAwCisjZGVmaW5lIFNBX1JFU1RBUlQJMHgxMDAwMDAwMAorI2RlZmluZSBTQV9OT0RFRkVSCTB4NDAwMDAwMDAKKyNkZWZpbmUgU0FfUkVTRVRIQU5ECTB4ODAwMDAwMDAKKworI2RlZmluZSBTQV9OT01BU0sJU0FfTk9ERUZFUgorI2RlZmluZSBTQV9PTkVTSE9UCVNBX1JFU0VUSEFORAorI2RlZmluZSBTQV9JTlRFUlJVUFQJMHgyMDAwMDAwMCAvKiBkdW1teSAtLSBpZ25vcmVkICovCisKKyNkZWZpbmUgU0FfUkVTVE9SRVIJMHgwNDAwMDAwMAorCisvKgorICogc2lnYWx0c3RhY2sgY29udHJvbHMKKyAqLworI2RlZmluZSBTU19PTlNUQUNLCTEKKyNkZWZpbmUgU1NfRElTQUJMRQkyCisKKyNkZWZpbmUgTUlOU0lHU1RLU1oJMjA0OAorI2RlZmluZSBTSUdTVEtTWgk4MTkyCisjaWZkZWYgX19LRVJORUxfXworCisvKgorICogVGhlc2UgdmFsdWVzIG9mIHNhX2ZsYWdzIGFyZSB1c2VkIG9ubHkgYnkgdGhlIGtlcm5lbCBhcyBwYXJ0IG9mIHRoZQorICogaXJxIGhhbmRsaW5nIHJvdXRpbmVzLgorICoKKyAqIFNBX0lOVEVSUlVQVCBpcyBhbHNvIHVzZWQgYnkgdGhlIGlycSBoYW5kbGluZyByb3V0aW5lcy4KKyAqIFNBX1NISVJRIGlzIGZvciBzaGFyZWQgaW50ZXJydXB0IHN1cHBvcnQgb24gUENJIGFuZCBFSVNBLgorICovCisjZGVmaW5lIFNBX1BST0JFCQlTQV9PTkVTSE9UCisjZGVmaW5lIFNBX1NBTVBMRV9SQU5ET00JU0FfUkVTVEFSVAorI2RlZmluZSBTQV9TSElSUQkJMHgwNDAwMDAwMAorI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2RlZmluZSBTSUdfQkxPQ0sgICAgICAgICAgMAkvKiBmb3IgYmxvY2tpbmcgc2lnbmFscyAqLworI2RlZmluZSBTSUdfVU5CTE9DSyAgICAgICAgMQkvKiBmb3IgdW5ibG9ja2luZyBzaWduYWxzICovCisjZGVmaW5lIFNJR19TRVRNQVNLICAgICAgICAyCS8qIGZvciBzZXR0aW5nIHRoZSBzaWduYWwgbWFzayAqLworCisvKiBUeXBlIG9mIGEgc2lnbmFsIGhhbmRsZXIuICAqLwordHlwZWRlZiB2b2lkIF9fc2lnbmFsZm5fdChpbnQpOwordHlwZWRlZiBfX3NpZ25hbGZuX3QgX191c2VyICpfX3NpZ2hhbmRsZXJfdDsKKwordHlwZWRlZiB2b2lkIF9fcmVzdG9yZWZuX3Qodm9pZCk7Cit0eXBlZGVmIF9fcmVzdG9yZWZuX3QgX191c2VyICpfX3NpZ3Jlc3RvcmVfdDsKKworI2RlZmluZSBTSUdfREZMCSgoX19zaWdoYW5kbGVyX3QpMCkJLyogZGVmYXVsdCBzaWduYWwgaGFuZGxpbmcgKi8KKyNkZWZpbmUgU0lHX0lHTgkoKF9fc2lnaGFuZGxlcl90KTEpCS8qIGlnbm9yZSBzaWduYWwgKi8KKyNkZWZpbmUgU0lHX0VSUgkoKF9fc2lnaGFuZGxlcl90KS0xKQkvKiBlcnJvciByZXR1cm4gZnJvbSBzaWduYWwgKi8KKworc3RydWN0IG9sZF9zaWdhY3Rpb24geworCV9fc2lnaGFuZGxlcl90IHNhX2hhbmRsZXI7CisJb2xkX3NpZ3NldF90IHNhX21hc2s7CisJdW5zaWduZWQgbG9uZyBzYV9mbGFnczsKKwlfX3NpZ3Jlc3RvcmVfdCBzYV9yZXN0b3JlcjsKK307CisKK3N0cnVjdCBzaWdhY3Rpb24geworCV9fc2lnaGFuZGxlcl90IHNhX2hhbmRsZXI7CisJdW5zaWduZWQgbG9uZyBzYV9mbGFnczsKKwlfX3NpZ3Jlc3RvcmVfdCBzYV9yZXN0b3JlcjsKKwlzaWdzZXRfdCBzYV9tYXNrOwkJLyogbWFzayBsYXN0IGZvciBleHRlbnNpYmlsaXR5ICovCit9OworCitzdHJ1Y3Qga19zaWdhY3Rpb24geworCXN0cnVjdCBzaWdhY3Rpb24gc2E7Cit9OworCit0eXBlZGVmIHN0cnVjdCBzaWdhbHRzdGFjayB7CisJdm9pZCBfX3VzZXIgKnNzX3NwOworCWludCBzc19mbGFnczsKKwlzaXplX3Qgc3Nfc2l6ZTsKK30gc3RhY2tfdDsKKworI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxhc20vc2lnY29udGV4dC5oPgorI2RlZmluZSBwdHJhY2Vfc2lnbmFsX2RlbGl2ZXIocmVncywgY29va2llKSBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisvKgorICogVGhlc2UgYXJlIHBhcmFtZXRlcnMgdG8gZGJnX3NpZ3JldHVybiBzeXNjYWxsLiAgVGhleSBlbmFibGUgb3IKKyAqIGRpc2FibGUgY2VydGFpbiBkZWJ1Z2dpbmcgdGhpbmdzIHRoYXQgY2FuIGJlIGRvbmUgZnJvbSBzaWduYWwKKyAqIGhhbmRsZXJzLiAgVGhlIGRiZ19zaWdyZXR1cm4gc3lzY2FsbCAqbXVzdCogYmUgY2FsbGVkIGZyb20gYQorICogU0FfU0lHSU5GTyBzaWduYWwgc28gdGhlIHVjb250ZXh0IGNhbiBiZSBwYXNzZWQgdG8gaXQuICBJdCB0YWtlcyBhbgorICogYXJyYXkgb2Ygc3RydWN0IHNpZ19kYmdfb3AsIHdoaWNoIGhhcyB0aGUgZGVidWcgb3BlcmF0aW9ucyB0bworICogcGVyZm9ybSBiZWZvcmUgcmV0dXJuaW5nIGZyb20gdGhlIHNpZ25hbC4KKyAqLworc3RydWN0IHNpZ19kYmdfb3AgeworCWludCBkYmdfdHlwZTsKKwl1bnNpZ25lZCBsb25nIGRiZ192YWx1ZTsKK307CisKKy8qIEVuYWJsZSBvciBkaXNhYmxlIHNpbmdsZS1zdGVwcGluZy4gIFRoZSB2YWx1ZSBzZXRzIHRoZSBzdGF0ZS4gKi8KKyNkZWZpbmUgU0lHX0RCR19TSU5HTEVfU1RFUFBJTkcJCTEKKworLyogRW5hYmxlIG9yIGRpc2FibGUgYnJhbmNoIHRyYWNpbmcuICBUaGUgdmFsdWUgc2V0cyB0aGUgc3RhdGUuICovCisjZGVmaW5lIFNJR19EQkdfQlJBTkNIX1RSQUNJTkcJCTIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvc21wLmggYi9pbmNsdWRlL2FzbS1wcGMvc21wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJmYjYxNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9zbXAuaApAQCAtMCwwICsxLDcwIEBACisvKiBzbXAuaDogUFBDIHNwZWNpZmljIFNNUCBzdHVmZi4KKyAqCisgKiBPcmlnaW5hbCB3YXMgYSBjb3B5IG9mIHNwYXJjIHNtcC5oLiAgTm93IGhlYXZpbHkgbW9kaWZpZWQKKyAqIGZvciBQUEMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk2IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAxIENvcnQgRG91Z2FuIDxjb3J0QGZzbWxhYnMuY29tPgorICovCisjaWZkZWYgX19LRVJORUxfXworI2lmbmRlZiBfUFBDX1NNUF9ICisjZGVmaW5lIF9QUENfU01QX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgorI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKworI2lmZGVmIENPTkZJR19TTVAKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworc3RydWN0IGNwdWluZm9fUFBDIHsKKwl1bnNpZ25lZCBsb25nIGxvb3BzX3Blcl9qaWZmeTsKKwl1bnNpZ25lZCBsb25nIHB2cjsKKwl1bnNpZ25lZCBsb25nICpwZ2RfY2FjaGU7CisJdW5zaWduZWQgbG9uZyAqcHRlX2NhY2hlOworCXVuc2lnbmVkIGxvbmcgcGd0YWJsZV9jYWNoZV9zejsKK307CisKK2V4dGVybiBzdHJ1Y3QgY3B1aW5mb19QUEMgY3B1X2RhdGFbXTsKK2V4dGVybiBjcHVtYXNrX3QgY3B1X29ubGluZV9tYXA7CitleHRlcm4gY3B1bWFza190IGNwdV9wb3NzaWJsZV9tYXA7CitleHRlcm4gdW5zaWduZWQgbG9uZyBzbXBfcHJvY19pbl9sb2NrW107CitleHRlcm4gdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBjcHVfY2FsbGluX21hcFtdOworZXh0ZXJuIGludCBzbXBfdGJfc3luY2hyb25pemVkOworCitleHRlcm4gdm9pZCBzbXBfc2VuZF90bGJfaW52YWxpZGF0ZShpbnQpOworZXh0ZXJuIHZvaWQgc21wX3NlbmRfeG1vbl9icmVhayhpbnQgY3B1KTsKK3N0cnVjdCBwdF9yZWdzOworZXh0ZXJuIHZvaWQgc21wX21lc3NhZ2VfcmVjdihpbnQsIHN0cnVjdCBwdF9yZWdzICopOworCisjZGVmaW5lIE5PX1BST0NfSUQJCTB4RkYgICAgICAgICAgICAvKiBObyBwcm9jZXNzb3IgbWFnaWMgbWFya2VyICovCisjZGVmaW5lIFBST0NfQ0hBTkdFX1BFTkFMVFkJMjAKKworI2RlZmluZSBzbXBfcHJvY2Vzc29yX2lkKCkgKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+Y3B1KQorCitleHRlcm4gaW50IF9fY3B1X3VwKHVuc2lnbmVkIGludCBjcHUpOworCitleHRlcm4gaW50IHNtcF9od19pbmRleFtdOworI2RlZmluZSBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKSAoc21wX2h3X2luZGV4W3NtcF9wcm9jZXNzb3JfaWQoKV0pCisKK3N0cnVjdCBrbG9ja19pbmZvX3N0cnVjdCB7CisJdW5zaWduZWQgbG9uZyBrZXJuZWxfZmxhZzsKKwl1bnNpZ25lZCBjaGFyIGFrcDsKK307CisKK2V4dGVybiBzdHJ1Y3Qga2xvY2tfaW5mb19zdHJ1Y3Qga2xvY2tfaW5mbzsKKyNkZWZpbmUgS0xPQ0tfSEVMRCAgICAgICAweGZmZmZmZmZmCisjZGVmaW5lIEtMT0NLX0NMRUFSICAgICAgMHgwCisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworI2Vsc2UgLyogIShDT05GSUdfU01QKSAqLworCisjZW5kaWYgLyogIShDT05GSUdfU01QKSAqLworCisjZW5kaWYgLyogIShfUFBDX1NNUF9IKSAqLworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9zb2NrZXQuaCBiL2luY2x1ZGUvYXNtLXBwYy9zb2NrZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTM0Mzc2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjL3NvY2tldC5oCkBAIC0wLDAgKzEsNTYgQEAKKyNpZm5kZWYgX0FTTV9TT0NLRVRfSAorI2RlZmluZSBfQVNNX1NPQ0tFVF9ICisKKy8qIFNvY2tldC1sZXZlbCBJL08gY29udHJvbCBjYWxscy4gKi8KKyNkZWZpbmUgRklPU0VUT1dOIAkweDg5MDEKKyNkZWZpbmUgU0lPQ1NQR1JQCTB4ODkwMgorI2RlZmluZSBGSU9HRVRPV04JMHg4OTAzCisjZGVmaW5lIFNJT0NHUEdSUAkweDg5MDQKKyNkZWZpbmUgU0lPQ0FUTUFSSwkweDg5MDUKKyNkZWZpbmUgU0lPQ0dTVEFNUAkweDg5MDYJCS8qIEdldCBzdGFtcCAqLworCisvKiBGb3Igc2V0c29ja29wdCgyKSAqLworI2RlZmluZSBTT0xfU09DS0VUCTEKKworI2RlZmluZSBTT19ERUJVRwkxCisjZGVmaW5lIFNPX1JFVVNFQUREUgkyCisjZGVmaW5lIFNPX1RZUEUJCTMKKyNkZWZpbmUgU09fRVJST1IJNAorI2RlZmluZSBTT19ET05UUk9VVEUJNQorI2RlZmluZSBTT19CUk9BRENBU1QJNgorI2RlZmluZSBTT19TTkRCVUYJNworI2RlZmluZSBTT19SQ1ZCVUYJOAorI2RlZmluZSBTT19LRUVQQUxJVkUJOQorI2RlZmluZSBTT19PT0JJTkxJTkUJMTAKKyNkZWZpbmUgU09fTk9fQ0hFQ0sJMTEKKyNkZWZpbmUgU09fUFJJT1JJVFkJMTIKKyNkZWZpbmUgU09fTElOR0VSCTEzCisjZGVmaW5lIFNPX0JTRENPTVBBVAkxNAorLyogVG8gYWRkIDojZGVmaW5lIFNPX1JFVVNFUE9SVCAxNSAqLworI2RlZmluZSBTT19SQ1ZMT1dBVAkxNgorI2RlZmluZSBTT19TTkRMT1dBVAkxNworI2RlZmluZSBTT19SQ1ZUSU1FTwkxOAorI2RlZmluZSBTT19TTkRUSU1FTwkxOQorI2RlZmluZSBTT19QQVNTQ1JFRAkyMAorI2RlZmluZSBTT19QRUVSQ1JFRAkyMQorCisvKiBTZWN1cml0eSBsZXZlbHMgLSBhcyBwZXIgTlJMIElQdjYgLSBkb24ndCBhY3R1YWxseSBkbyBhbnl0aGluZyAqLworI2RlZmluZSBTT19TRUNVUklUWV9BVVRIRU5USUNBVElPTgkJMjIKKyNkZWZpbmUgU09fU0VDVVJJVFlfRU5DUllQVElPTl9UUkFOU1BPUlQJMjMKKyNkZWZpbmUgU09fU0VDVVJJVFlfRU5DUllQVElPTl9ORVRXT1JLCQkyNAorCisjZGVmaW5lIFNPX0JJTkRUT0RFVklDRQkyNQorCisvKiBTb2NrZXQgZmlsdGVyaW5nICovCisjZGVmaW5lIFNPX0FUVEFDSF9GSUxURVIJMjYKKyNkZWZpbmUgU09fREVUQUNIX0ZJTFRFUgkyNworCisjZGVmaW5lIFNPX1BFRVJOQU1FCQkyOAorI2RlZmluZSBTT19USU1FU1RBTVAJCTI5CisjZGVmaW5lIFNDTV9USU1FU1RBTVAJCVNPX1RJTUVTVEFNUAorCisjZGVmaW5lIFNPX0FDQ0VQVENPTk4JCTMwCisKKyNkZWZpbmUgU09fUEVFUlNFQwkJMzEKKworI2VuZGlmIC8qIF9BU01fU09DS0VUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9zb2NraW9zLmggYi9pbmNsdWRlL2FzbS1wcGMvc29ja2lvcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4NWFlZGMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGMvc29ja2lvcy5oCkBAIC0wLDAgKzEsMTcgQEAKKyNpZm5kZWYgX0FTTV9QUENfU09DS0lPU19ICisjZGVmaW5lIF9BU01fUFBDX1NPQ0tJT1NfSAorCisjaWYgMCAvKiBUaGVzZSBhcmUgZGVmaW5lZCB0aGlzIHdheSBvbiBBbHBoYSAtIG1heWJlIGxhdGVyLiAqLworLyogU29ja2V0LWxldmVsIEkvTyBjb250cm9sIGNhbGxzLiAqLworCisjZGVmaW5lIEZJT0dFVE9XTglfSU9SKCdmJywgMTIzLCBpbnQpCisjZGVmaW5lIEZJT1NFVE9XTiAJX0lPVygnZicsIDEyNCwgaW50KQorCisjZGVmaW5lIFNJT0NBVE1BUksJX0lPUigncycsIDcsIGludCkKKyNkZWZpbmUgU0lPQ1NQR1JQCV9JT1coJ3MnLCA4LCBwaWRfdCkKKyNkZWZpbmUgU0lPQ0dQR1JQCV9JT1IoJ3MnLCA5LCBwaWRfdCkKKworI2RlZmluZSBTSU9DR1NUQU1QCTB4ODkwNgkJLyogR2V0IHN0YW1wIC0gbGludXgtc3BlY2lmaWMgKi8KKyNlbmRpZgorCisjZW5kaWYgLyogX0FTTV9QUENfU09DS0lPU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvc3BpbmxvY2suaCBiL2luY2x1ZGUvYXNtLXBwYy9zcGlubG9jay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwOTE5OWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGMvc3BpbmxvY2suaApAQCAtMCwwICsxLDIxNSBAQAorI2lmbmRlZiBfX0FTTV9TUElOTE9DS19ICisjZGVmaW5lIF9fQVNNX1NQSU5MT0NLX0gKKworI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKworLyoKKyAqIFNpbXBsZSBzcGluIGxvY2sgb3BlcmF0aW9ucy4KKyAqLworCit0eXBlZGVmIHN0cnVjdCB7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBsb2NrOworI2lmZGVmIENPTkZJR19ERUJVR19TUElOTE9DSworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgb3duZXJfcGM7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBvd25lcl9jcHU7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfUFJFRU1QVAorCXVuc2lnbmVkIGludCBicmVha19sb2NrOworI2VuZGlmCit9IHNwaW5sb2NrX3Q7CisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaWZkZWYgQ09ORklHX0RFQlVHX1NQSU5MT0NLCisjZGVmaW5lIFNQSU5MT0NLX0RFQlVHX0lOSVQgICAgICwgMCwgMAorI2Vsc2UKKyNkZWZpbmUgU1BJTkxPQ0tfREVCVUdfSU5JVCAgICAgLyogKi8KKyNlbmRpZgorCisjZGVmaW5lIFNQSU5fTE9DS19VTkxPQ0tFRAkoc3BpbmxvY2tfdCkgeyAwIFNQSU5MT0NLX0RFQlVHX0lOSVQgfQorCisjZGVmaW5lIHNwaW5fbG9ja19pbml0KHgpIAlkbyB7ICooeCkgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7IH0gd2hpbGUoMCkKKyNkZWZpbmUgc3Bpbl9pc19sb2NrZWQoeCkJKCh4KS0+bG9jayAhPSAwKQorI2RlZmluZSBzcGluX3VubG9ja193YWl0KHgpCWRvIHsgYmFycmllcigpOyB9IHdoaWxlKHNwaW5faXNfbG9ja2VkKHgpKQorI2RlZmluZSBfcmF3X3NwaW5fbG9ja19mbGFncyhsb2NrLCBmbGFncykgX3Jhd19zcGluX2xvY2sobG9jaykKKworI2lmbmRlZiBDT05GSUdfREVCVUdfU1BJTkxPQ0sKKworc3RhdGljIGlubGluZSB2b2lkIF9yYXdfc3Bpbl9sb2NrKHNwaW5sb2NrX3QgKmxvY2spCit7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkiYgkxZgkJIyBzcGluX2xvY2tcblwKKzI6CWx3engJJTAsMCwlMVxuXAorCWNtcHdpCTAsJTAsMFxuXAorCWJuZSsJMmJcblwKKzE6CWx3YXJ4CSUwLDAsJTFcblwKKwljbXB3aQkwLCUwLDBcblwKKwlibmUtCTJiXG4iCisJUFBDNDA1X0VSUjc3KDAsJTEpCisiCXN0d2N4LgklMiwwLCUxXG5cCisJYm5lLQkyYlxuXAorCWlzeW5jIgorCTogIj0mciIodG1wKQorCTogInIiKCZsb2NrLT5sb2NrKSwgInIiKDEpCisJOiAiY3IwIiwgIm1lbW9yeSIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX3Jhd19zcGluX3VubG9jayhzcGlubG9ja190ICpsb2NrKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKCJlaWVpbwkJIyBzcGluX3VubG9jayI6IDogOiJtZW1vcnkiKTsKKwlsb2NrLT5sb2NrID0gMDsKK30KKworI2RlZmluZSBfcmF3X3NwaW5fdHJ5bG9jayhsKSAoIXRlc3RfYW5kX3NldF9iaXQoMCwmKGwpLT5sb2NrKSkKKworI2Vsc2UKKworZXh0ZXJuIHZvaWQgX3Jhd19zcGluX2xvY2soc3BpbmxvY2tfdCAqbG9jayk7CitleHRlcm4gdm9pZCBfcmF3X3NwaW5fdW5sb2NrKHNwaW5sb2NrX3QgKmxvY2spOworZXh0ZXJuIGludCBfcmF3X3NwaW5fdHJ5bG9jayhzcGlubG9ja190ICpsb2NrKTsKKworI2VuZGlmCisKKy8qCisgKiBSZWFkLXdyaXRlIHNwaW5sb2NrcywgYWxsb3dpbmcgbXVsdGlwbGUgcmVhZGVycworICogYnV0IG9ubHkgb25lIHdyaXRlci4KKyAqCisgKiBOT1RFISBpdCBpcyBxdWl0ZSBjb21tb24gdG8gaGF2ZSByZWFkZXJzIGluIGludGVycnVwdHMKKyAqIGJ1dCBubyBpbnRlcnJ1cHQgd3JpdGVycy4gRm9yIHRob3NlIGNpcmN1bXN0YW5jZXMgd2UKKyAqIGNhbiAibWl4IiBpcnEtc2FmZSBsb2NrcyAtIGFueSB3cml0ZXIgbmVlZHMgdG8gZ2V0IGEKKyAqIGlycS1zYWZlIHdyaXRlLWxvY2ssIGJ1dCByZWFkZXJzIGNhbiBnZXQgbm9uLWlycXNhZmUKKyAqIHJlYWQtbG9ja3MuCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwl2b2xhdGlsZSBzaWduZWQgaW50IGxvY2s7CisjaWZkZWYgQ09ORklHX1BSRUVNUFQKKwl1bnNpZ25lZCBpbnQgYnJlYWtfbG9jazsKKyNlbmRpZgorfSByd2xvY2tfdDsKKworI2RlZmluZSBSV19MT0NLX1VOTE9DS0VEIChyd2xvY2tfdCkgeyAwIH0KKyNkZWZpbmUgcndsb2NrX2luaXQobHApIGRvIHsgKihscCkgPSBSV19MT0NLX1VOTE9DS0VEOyB9IHdoaWxlKDApCisKKyNkZWZpbmUgcmVhZF9jYW5fbG9jayhydykJKChydyktPmxvY2sgPj0gMCkKKyNkZWZpbmUgd3JpdGVfY2FuX2xvY2socncpCSghKHJ3KS0+bG9jaykKKworI2lmbmRlZiBDT05GSUdfREVCVUdfU1BJTkxPQ0sKKworc3RhdGljIF9faW5saW5lX18gaW50IF9yYXdfcmVhZF90cnlsb2NrKHJ3bG9ja190ICpydykKK3sKKwlzaWduZWQgaW50IHRtcDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorIjI6CWx3YXJ4CSUwLDAsJTEJCSMgcmVhZF90cnlsb2NrXG5cCisJYWRkaWMuCSUwLCUwLDFcblwKKwlibGUtCTFmXG4iCisJUFBDNDA1X0VSUjc3KDAsJTEpCisiCXN0d2N4LgklMCwwLCUxXG5cCisJYm5lLQkyYlxuXAorCWlzeW5jXG5cCisxOiIKKwk6ICI9JnIiKHRtcCkKKwk6ICJyIigmcnctPmxvY2spCisJOiAiY3IwIiwgIm1lbW9yeSIpOworCisJcmV0dXJuIHRtcCA+IDA7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX3Jhd19yZWFkX2xvY2socndsb2NrX3QgKnJ3KQoreworCXNpZ25lZCBpbnQgdG1wOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJImIJMmYJCSMgcmVhZF9sb2NrXG5cCisxOglsd3p4CSUwLDAsJTFcblwKKwljbXB3aQkwLCUwLDBcblwKKwlibHQrCTFiXG5cCisyOglsd2FyeAklMCwwLCUxXG5cCisJYWRkaWMuCSUwLCUwLDFcblwKKwlibGUtCTFiXG4iCisJUFBDNDA1X0VSUjc3KDAsJTEpCisiCXN0d2N4LgklMCwwLCUxXG5cCisJYm5lLQkyYlxuXAorCWlzeW5jIgorCTogIj0mciIodG1wKQorCTogInIiKCZydy0+bG9jaykKKwk6ICJjcjAiLCAibWVtb3J5Iik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX3Jhd19yZWFkX3VubG9jayhyd2xvY2tfdCAqcncpCit7CisJc2lnbmVkIGludCB0bXA7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkiZWllaW8JCQkjIHJlYWRfdW5sb2NrXG5cCisxOglsd2FyeAklMCwwLCUxXG5cCisJYWRkaWMJJTAsJTAsLTFcbiIKKwlQUEM0MDVfRVJSNzcoMCwlMSkKKyIJc3R3Y3guCSUwLDAsJTFcblwKKwlibmUtCTFiIgorCTogIj0mciIodG1wKQorCTogInIiKCZydy0+bG9jaykKKwk6ICJjcjAiLCAibWVtb3J5Iik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfcmF3X3dyaXRlX3RyeWxvY2socndsb2NrX3QgKnJ3KQoreworCXNpZ25lZCBpbnQgdG1wOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisiMjoJbHdhcngJJTAsMCwlMQkJIyB3cml0ZV90cnlsb2NrXG5cCisJY21wd2kJMCwlMCwwXG5cCisJYm5lLQkxZlxuIgorCVBQQzQwNV9FUlI3NygwLCUxKQorIglzdHdjeC4JJTIsMCwlMVxuXAorCWJuZS0JMmJcblwKKwlpc3luY1xuXAorMToiCisJOiAiPSZyIih0bXApCisJOiAiciIoJnJ3LT5sb2NrKSwgInIiKC0xKQorCTogImNyMCIsICJtZW1vcnkiKTsKKworCXJldHVybiB0bXAgPT0gMDsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfcmF3X3dyaXRlX2xvY2socndsb2NrX3QgKnJ3KQoreworCXNpZ25lZCBpbnQgdG1wOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJImIJMmYJCSMgd3JpdGVfbG9ja1xuXAorMTogIAlsd3p4CSUwLDAsJTFcblwKKwljbXB3aQkwLCUwLDBcblwKKwlibmUrCTFiXG5cCisyOglsd2FyeAklMCwwLCUxXG5cCisJY21wd2kJMCwlMCwwXG5cCisJYm5lLQkxYlxuIgorCVBQQzQwNV9FUlI3NygwLCUxKQorIglzdHdjeC4JJTIsMCwlMVxuXAorCWJuZS0JMmJcblwKKwlpc3luYyIKKwk6ICI9JnIiKHRtcCkKKwk6ICJyIigmcnctPmxvY2spLCAiciIoLTEpCisJOiAiY3IwIiwgIm1lbW9yeSIpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9yYXdfd3JpdGVfdW5sb2NrKHJ3bG9ja190ICpydykKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygiZWllaW8JCSMgd3JpdGVfdW5sb2NrIjogOiA6Im1lbW9yeSIpOworCXJ3LT5sb2NrID0gMDsKK30KKworI2Vsc2UKKworZXh0ZXJuIHZvaWQgX3Jhd19yZWFkX2xvY2socndsb2NrX3QgKnJ3KTsKK2V4dGVybiB2b2lkIF9yYXdfcmVhZF91bmxvY2socndsb2NrX3QgKnJ3KTsKK2V4dGVybiB2b2lkIF9yYXdfd3JpdGVfbG9jayhyd2xvY2tfdCAqcncpOworZXh0ZXJuIHZvaWQgX3Jhd193cml0ZV91bmxvY2socndsb2NrX3QgKnJ3KTsKK2V4dGVybiBpbnQgX3Jhd19yZWFkX3RyeWxvY2socndsb2NrX3QgKnJ3KTsKK2V4dGVybiBpbnQgX3Jhd193cml0ZV90cnlsb2NrKHJ3bG9ja190ICpydyk7CisKKyNlbmRpZgorCisjZW5kaWYgLyogX19BU01fU1BJTkxPQ0tfSCAqLworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9zdGF0LmggYi9pbmNsdWRlL2FzbS1wcGMvc3RhdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhZGIzNDIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGMvc3RhdC5oCkBAIC0wLDAgKzEsNjkgQEAKKyNpZm5kZWYgX1BQQ19TVEFUX0gKKyNkZWZpbmUgX1BQQ19TVEFUX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworc3RydWN0IF9fb2xkX2tlcm5lbF9zdGF0IHsKKwl1bnNpZ25lZCBzaG9ydCBzdF9kZXY7CisJdW5zaWduZWQgc2hvcnQgc3RfaW5vOworCXVuc2lnbmVkIHNob3J0IHN0X21vZGU7CisJdW5zaWduZWQgc2hvcnQgc3Rfbmxpbms7CisJdW5zaWduZWQgc2hvcnQgc3RfdWlkOworCXVuc2lnbmVkIHNob3J0IHN0X2dpZDsKKwl1bnNpZ25lZCBzaG9ydCBzdF9yZGV2OworCXVuc2lnbmVkIGxvbmcgIHN0X3NpemU7CisJdW5zaWduZWQgbG9uZyAgc3RfYXRpbWU7CisJdW5zaWduZWQgbG9uZyAgc3RfbXRpbWU7CisJdW5zaWduZWQgbG9uZyAgc3RfY3RpbWU7Cit9OworCisjZGVmaW5lIFNUQVRfSEFWRV9OU0VDIDEKKworc3RydWN0IHN0YXQgeworCXVuc2lnbmVkCXN0X2RldjsKKwlpbm9fdAkJc3RfaW5vOworCW1vZGVfdAkJc3RfbW9kZTsKKwlubGlua190CQlzdF9ubGluazsKKwl1aWRfdCAJCXN0X3VpZDsKKwlnaWRfdCAJCXN0X2dpZDsKKwl1bnNpZ25lZAlzdF9yZGV2OworCW9mZl90CQlzdF9zaXplOworCXVuc2lnbmVkIGxvbmcgIAlzdF9ibGtzaXplOworCXVuc2lnbmVkIGxvbmcgIAlzdF9ibG9ja3M7CisJdW5zaWduZWQgbG9uZyAgCXN0X2F0aW1lOworCXVuc2lnbmVkIGxvbmcgIAlzdF9hdGltZV9uc2VjOworCXVuc2lnbmVkIGxvbmcgIAlzdF9tdGltZTsKKwl1bnNpZ25lZCBsb25nICAJc3RfbXRpbWVfbnNlYzsKKwl1bnNpZ25lZCBsb25nICAJc3RfY3RpbWU7CisJdW5zaWduZWQgbG9uZyAgCXN0X2N0aW1lX25zZWM7CisJdW5zaWduZWQgbG9uZyAgCV9fdW51c2VkNDsKKwl1bnNpZ25lZCBsb25nICAJX191bnVzZWQ1OworfTsKKworLyogVGhpcyBtYXRjaGVzIHN0cnVjdCBzdGF0NjQgaW4gZ2xpYmMyLjEuCisgKi8KK3N0cnVjdCBzdGF0NjQgeworCXVuc2lnbmVkIGxvbmcgbG9uZyBzdF9kZXY7IAkvKiBEZXZpY2UuICAqLworCXVuc2lnbmVkIGxvbmcgbG9uZyBzdF9pbm87CS8qIEZpbGUgc2VyaWFsIG51bWJlci4gICovCisJdW5zaWduZWQgaW50IHN0X21vZGU7CQkvKiBGaWxlIG1vZGUuICAqLworCXVuc2lnbmVkIGludCBzdF9ubGluazsJCS8qIExpbmsgY291bnQuICAqLworCXVuc2lnbmVkIGludCBzdF91aWQ7CQkvKiBVc2VyIElEIG9mIHRoZSBmaWxlJ3Mgb3duZXIuICAqLworCXVuc2lnbmVkIGludCBzdF9naWQ7CQkvKiBHcm91cCBJRCBvZiB0aGUgZmlsZSdzIGdyb3VwLiAqLworCXVuc2lnbmVkIGxvbmcgbG9uZyBzdF9yZGV2OyAJLyogRGV2aWNlIG51bWJlciwgaWYgZGV2aWNlLiAgKi8KKwl1bnNpZ25lZCBzaG9ydCBpbnQgX19wYWQyOworCWxvbmcgbG9uZyBzdF9zaXplOwkJLyogU2l6ZSBvZiBmaWxlLCBpbiBieXRlcy4gICovCisJbG9uZyBzdF9ibGtzaXplOwkJLyogT3B0aW1hbCBibG9jayBzaXplIGZvciBJL08uICAqLworCisJbG9uZyBsb25nIHN0X2Jsb2NrczsJCS8qIE51bWJlciA1MTItYnl0ZSBibG9ja3MgYWxsb2NhdGVkLiAqLworCWxvbmcgc3RfYXRpbWU7CQkJLyogVGltZSBvZiBsYXN0IGFjY2Vzcy4gICovCisJdW5zaWduZWQgbG9uZyBzdF9hdGltZV9uc2VjOworCWxvbmcgc3RfbXRpbWU7CQkJLyogVGltZSBvZiBsYXN0IG1vZGlmaWNhdGlvbi4gICovCisJdW5zaWduZWQgbG9uZyBpbnQgc3RfbXRpbWVfbnNlYzsKKwlsb25nIHN0X2N0aW1lOwkJCS8qIFRpbWUgb2YgbGFzdCBzdGF0dXMgY2hhbmdlLiAgKi8KKwl1bnNpZ25lZCBsb25nIGludCBzdF9jdGltZV9uc2VjOworCXVuc2lnbmVkIGxvbmcgaW50IF9fdW51c2VkNDsKKwl1bnNpZ25lZCBsb25nIGludCBfX3VudXNlZDU7Cit9OworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvc3RhdGZzLmggYi9pbmNsdWRlL2FzbS1wcGMvc3RhdGZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA3YzY5OQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9zdGF0ZnMuaApAQCAtMCwwICsxLDggQEAKKyNpZm5kZWYgX1BQQ19TVEFURlNfSAorI2RlZmluZSBfUFBDX1NUQVRGU19ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zdGF0ZnMuaD4KKyNlbmRpZgorCisKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL3N0cmluZy5oIGIvaW5jbHVkZS9hc20tcHBjL3N0cmluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyNTU3NTkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGMvc3RyaW5nLmgKQEAgLTAsMCArMSwzMiBAQAorI2lmbmRlZiBfUFBDX1NUUklOR19IXworI2RlZmluZSBfUFBDX1NUUklOR19IXworCisjaWZkZWYgX19LRVJORUxfXworCisjZGVmaW5lIF9fSEFWRV9BUkNIX1NUUkNQWQorI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJOQ1BZCisjZGVmaW5lIF9fSEFWRV9BUkNIX1NUUkxFTgorI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJDTVAKKyNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSQ0FUCisjZGVmaW5lIF9fSEFWRV9BUkNIX01FTVNFVAorI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1DUFkKKyNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNTU9WRQorI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1DTVAKKyNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNQ0hSCisKK2V4dGVybiBpbnQgc3RyY2FzZWNtcChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CitleHRlcm4gaW50IHN0cm5jYXNlY21wKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQpOworZXh0ZXJuIGNoYXIgKiBzdHJjcHkoY2hhciAqLGNvbnN0IGNoYXIgKik7CitleHRlcm4gY2hhciAqIHN0cm5jcHkoY2hhciAqLGNvbnN0IGNoYXIgKiwgX19rZXJuZWxfc2l6ZV90KTsKK2V4dGVybiBfX2tlcm5lbF9zaXplX3Qgc3RybGVuKGNvbnN0IGNoYXIgKik7CitleHRlcm4gaW50IHN0cmNtcChjb25zdCBjaGFyICosY29uc3QgY2hhciAqKTsKK2V4dGVybiBjaGFyICogc3RyY2F0KGNoYXIgKiwgY29uc3QgY2hhciAqKTsKK2V4dGVybiB2b2lkICogbWVtc2V0KHZvaWQgKixpbnQsX19rZXJuZWxfc2l6ZV90KTsKK2V4dGVybiB2b2lkICogbWVtY3B5KHZvaWQgKixjb25zdCB2b2lkICosX19rZXJuZWxfc2l6ZV90KTsKK2V4dGVybiB2b2lkICogbWVtbW92ZSh2b2lkICosY29uc3Qgdm9pZCAqLF9fa2VybmVsX3NpemVfdCk7CitleHRlcm4gaW50IG1lbWNtcChjb25zdCB2b2lkICosY29uc3Qgdm9pZCAqLF9fa2VybmVsX3NpemVfdCk7CitleHRlcm4gdm9pZCAqIG1lbWNocihjb25zdCB2b2lkICosaW50LF9fa2VybmVsX3NpemVfdCk7CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL3N1c3BlbmQuaCBiL2luY2x1ZGUvYXNtLXBwYy9zdXNwZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RmOWYzMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9zdXNwZW5kLmgKQEAgLTAsMCArMSwxMiBAQAorc3RhdGljIGlubGluZSBpbnQgYXJjaF9wcmVwYXJlX3N1c3BlbmQodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNhdmVfcHJvY2Vzc29yX3N0YXRlKHZvaWQpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByZXN0b3JlX3Byb2Nlc3Nvcl9zdGF0ZSh2b2lkKQoreworfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tcHBjL3N5c3RlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyMzk1ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGMvc3lzdGVtLmgKQEAgLTAsMCArMSwyMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgQ29ydCBEb3VnYW4gPGNvcnRAY3Mubm10LmVkdT4KKyAqLworI2lmbmRlZiBfX1BQQ19TWVNURU1fSAorI2RlZmluZSBfX1BQQ19TWVNURU1fSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8YXNtL2h3X2lycS5oPgorCisvKgorICogTWVtb3J5IGJhcnJpZXIuCisgKiBUaGUgc3luYyBpbnN0cnVjdGlvbiBndWFyYW50ZWVzIHRoYXQgYWxsIG1lbW9yeSBhY2Nlc3NlcyBpbml0aWF0ZWQKKyAqIGJ5IHRoaXMgcHJvY2Vzc29yIGhhdmUgYmVlbiBwZXJmb3JtZWQgKHdpdGggcmVzcGVjdCB0byBhbGwgb3RoZXIKKyAqIG1lY2hhbmlzbXMgdGhhdCBhY2Nlc3MgbWVtb3J5KS4gIFRoZSBlaWVpbyBpbnN0cnVjdGlvbiBpcyBhIGJhcnJpZXIKKyAqIHByb3ZpZGluZyBhbiBvcmRlcmluZyAoc2VwYXJhdGVseSkgZm9yIChhKSBjYWNoZWFibGUgc3RvcmVzIGFuZCAoYikKKyAqIGxvYWRzIGFuZCBzdG9yZXMgdG8gbm9uLWNhY2hlYWJsZSBtZW1vcnkgKGUuZy4gSS9PIGRldmljZXMpLgorICoKKyAqIG1iKCkgcHJldmVudHMgbG9hZHMgYW5kIHN0b3JlcyBiZWluZyByZW9yZGVyZWQgYWNyb3NzIHRoaXMgcG9pbnQuCisgKiBybWIoKSBwcmV2ZW50cyBsb2FkcyBiZWluZyByZW9yZGVyZWQgYWNyb3NzIHRoaXMgcG9pbnQuCisgKiB3bWIoKSBwcmV2ZW50cyBzdG9yZXMgYmVpbmcgcmVvcmRlcmVkIGFjcm9zcyB0aGlzIHBvaW50LgorICogcmVhZF9iYXJyaWVyX2RlcGVuZHMoKSBwcmV2ZW50cyBkYXRhLWRlcGVuZGVudCBsb2FkcyBiZWluZyByZW9yZGVyZWQKKyAqCWFjcm9zcyB0aGlzIHBvaW50IChub3Agb24gUFBDKS4KKyAqCisgKiBXZSBjYW4gdXNlIHRoZSBlaWVpbyBpbnN0cnVjdGlvbiBmb3Igd21iLCBidXQgc2luY2UgaXQgZG9lc24ndAorICogZ2l2ZSBhbnkgb3JkZXJpbmcgZ3VhcmFudGVlcyBhYm91dCBsb2Fkcywgd2UgaGF2ZSB0byB1c2UgdGhlCisgKiBzdHJvbmdlciBidXQgc2xvd2VyIHN5bmMgaW5zdHJ1Y3Rpb24gZm9yIG1iIGFuZCBybWIuCisgKi8KKyNkZWZpbmUgbWIoKSAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzeW5jIiA6IDogOiAibWVtb3J5IikKKyNkZWZpbmUgcm1iKCkgIF9fYXNtX18gX192b2xhdGlsZV9fICgic3luYyIgOiA6IDogIm1lbW9yeSIpCisjZGVmaW5lIHdtYigpICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImVpZWlvIiA6IDogOiAibWVtb3J5IikKKyNkZWZpbmUgcmVhZF9iYXJyaWVyX2RlcGVuZHMoKSAgZG8geyB9IHdoaWxlKDApCisKKyNkZWZpbmUgc2V0X21iKHZhciwgdmFsdWUpCWRvIHsgdmFyID0gdmFsdWU7IG1iKCk7IH0gd2hpbGUgKDApCisjZGVmaW5lIHNldF93bWIodmFyLCB2YWx1ZSkJZG8geyB2YXIgPSB2YWx1ZTsgd21iKCk7IH0gd2hpbGUgKDApCisKKyNpZmRlZiBDT05GSUdfU01QCisjZGVmaW5lIHNtcF9tYigpCW1iKCkKKyNkZWZpbmUgc21wX3JtYigpCXJtYigpCisjZGVmaW5lIHNtcF93bWIoKQl3bWIoKQorI2RlZmluZSBzbXBfcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQlyZWFkX2JhcnJpZXJfZGVwZW5kcygpCisjZWxzZQorI2RlZmluZSBzbXBfbWIoKQliYXJyaWVyKCkKKyNkZWZpbmUgc21wX3JtYigpCWJhcnJpZXIoKQorI2RlZmluZSBzbXBfd21iKCkJYmFycmllcigpCisjZGVmaW5lIHNtcF9yZWFkX2JhcnJpZXJfZGVwZW5kcygpCWRvIHsgfSB3aGlsZSgwKQorI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KKworI2lmZGVmIF9fS0VSTkVMX18KK3N0cnVjdCB0YXNrX3N0cnVjdDsKK3N0cnVjdCBwdF9yZWdzOworCitleHRlcm4gdm9pZCBwcmludF9iYWNrdHJhY2UodW5zaWduZWQgbG9uZyAqKTsKK2V4dGVybiB2b2lkIHNob3dfcmVncyhzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MpOworZXh0ZXJuIHZvaWQgZmx1c2hfaW5zdHJ1Y3Rpb25fY2FjaGUodm9pZCk7CitleHRlcm4gdm9pZCBoYXJkX3Jlc2V0X25vdyh2b2lkKTsKK2V4dGVybiB2b2lkIHBvd2Vyb2ZmX25vdyh2b2lkKTsKKyNpZmRlZiBDT05GSUdfNnh4CitleHRlcm4gbG9uZyBfZ2V0X0wyQ1Iodm9pZCk7CitleHRlcm4gbG9uZyBfZ2V0X0wzQ1Iodm9pZCk7CitleHRlcm4gdm9pZCBfc2V0X0wyQ1IodW5zaWduZWQgbG9uZyk7CitleHRlcm4gdm9pZCBfc2V0X0wzQ1IodW5zaWduZWQgbG9uZyk7CisjZWxzZQorI2RlZmluZSBfZ2V0X0wyQ1IoKQkwTAorI2RlZmluZSBfZ2V0X0wzQ1IoKQkwTAorI2RlZmluZSBfc2V0X0wyQ1IodmFsKQlkbyB7IH0gd2hpbGUoMCkKKyNkZWZpbmUgX3NldF9MM0NSKHZhbCkJZG8geyB9IHdoaWxlKDApCisjZW5kaWYKK2V4dGVybiB2b2lkIHZpYV9jdWRhX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBwbWFjX252cmFtX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCByZWFkX3J0Y190aW1lKHZvaWQpOworZXh0ZXJuIHZvaWQgcG1hY19maW5kX2Rpc3BsYXkodm9pZCk7CitleHRlcm4gdm9pZCBnaXZldXBfZnB1KHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKK2V4dGVybiB2b2lkIGVuYWJsZV9rZXJuZWxfZnAodm9pZCk7CitleHRlcm4gdm9pZCBlbmFibGVfa2VybmVsX2FsdGl2ZWModm9pZCk7CitleHRlcm4gdm9pZCBnaXZldXBfYWx0aXZlYyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CitleHRlcm4gdm9pZCBsb2FkX3VwX2FsdGl2ZWMoc3RydWN0IHRhc2tfc3RydWN0ICopOworZXh0ZXJuIHZvaWQgZ2l2ZXVwX3NwZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CitleHRlcm4gdm9pZCBsb2FkX3VwX3NwZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CitleHRlcm4gaW50IGZpeF9hbGlnbm1lbnQoc3RydWN0IHB0X3JlZ3MgKik7CitleHRlcm4gdm9pZCBjdnRfZmQoZmxvYXQgKmZyb20sIGRvdWJsZSAqdG8sIHVuc2lnbmVkIGxvbmcgKmZwc2NyKTsKK2V4dGVybiB2b2lkIGN2dF9kZihkb3VibGUgKmZyb20sIGZsb2F0ICp0bywgdW5zaWduZWQgbG9uZyAqZnBzY3IpOworZXh0ZXJuIGludCBjYWxsX3J0YXMoY29uc3QgY2hhciAqLCBpbnQsIGludCwgdW5zaWduZWQgbG9uZyAqLCAuLi4pOworZXh0ZXJuIHZvaWQgY2FjaGVhYmxlX21lbXplcm8odm9pZCAqcCwgdW5zaWduZWQgaW50IG5iKTsKK2V4dGVybiBpbnQgZG9fcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKK2V4dGVybiB2b2lkIGJhZF9wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICosIHVuc2lnbmVkIGxvbmcsIGludCk7CitleHRlcm4gdm9pZCBkaWUoY29uc3QgY2hhciAqLCBzdHJ1Y3QgcHRfcmVncyAqLCBsb25nKTsKKworc3RydWN0IGRldmljZV9ub2RlOworZXh0ZXJuIHZvaWQgbm90ZV9zY3NpX2hvc3Qoc3RydWN0IGRldmljZV9ub2RlICosIHZvaWQgKik7CisKK2V4dGVybiBzdHJ1Y3QgdGFza19zdHJ1Y3QgKl9fc3dpdGNoX3RvKHN0cnVjdCB0YXNrX3N0cnVjdCAqLAorCXN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKKyNkZWZpbmUgc3dpdGNoX3RvKHByZXYsIG5leHQsIGxhc3QpCSgobGFzdCkgPSBfX3N3aXRjaF90bygocHJldiksIChuZXh0KSkpCisKK3N0cnVjdCB0aHJlYWRfc3RydWN0OworZXh0ZXJuIHN0cnVjdCB0YXNrX3N0cnVjdCAqX3N3aXRjaChzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqcHJldiwKKwkJCQkgICBzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqbmV4dCk7CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgcnRhc19kYXRhOworCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nCit4Y2hnX3UzMih2b2xhdGlsZSB2b2lkICpwLCB1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwl1bnNpZ25lZCBsb25nIHByZXY7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIlxuXAorMToJbHdhcngJJTAsMCwlMiBcbiIKKwlQUEM0MDVfRVJSNzcoMCwlMikKKyIJc3R3Y3guCSUzLDAsJTIgXG5cCisJYm5lLQkxYiIKKwk6ICI9JnIiIChwcmV2KSwgIj1tIiAoKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopcCkKKwk6ICJyIiAocCksICJyIiAodmFsKSwgIm0iICgqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKilwKQorCTogImNjIiwgIm1lbW9yeSIpOworCisJcmV0dXJuIHByZXY7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgZXhpc3QsIHNvIHlvdSdsbCBnZXQgYSBsaW5rZXIgZXJyb3IKKyAqIGlmIHNvbWV0aGluZyB0cmllcyB0byBkbyBhbiBpbnZhbGlkIHhjaGcoKS4KKyAqLworZXh0ZXJuIHZvaWQgX194Y2hnX2NhbGxlZF93aXRoX2JhZF9wb2ludGVyKHZvaWQpOworCisjZGVmaW5lIHhjaGcocHRyLHgpICgoX190eXBlb2ZfXygqKHB0cikpKV9feGNoZygodW5zaWduZWQgbG9uZykoeCksKHB0ciksc2l6ZW9mKCoocHRyKSkpKQorI2RlZmluZSB0YXMocHRyKSAoeGNoZygocHRyKSwxKSkKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9feGNoZyh1bnNpZ25lZCBsb25nIHgsIHZvbGF0aWxlIHZvaWQgKnB0ciwgaW50IHNpemUpCit7CisJc3dpdGNoIChzaXplKSB7CisJY2FzZSA0OgorCQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpIHhjaGdfdTMyKHB0ciwgeCk7CisjaWYgMAkvKiB4Y2hnX3U2NCBkb2Vzbid0IGV4aXN0IG9uIDMyLWJpdCBQUEMgKi8KKwljYXNlIDg6CisJCXJldHVybiAodW5zaWduZWQgbG9uZykgeGNoZ191NjQocHRyLCB4KTsKKyNlbmRpZiAvKiAwICovCisJfQorCV9feGNoZ19jYWxsZWRfd2l0aF9iYWRfcG9pbnRlcigpOworCXJldHVybiB4OworCisKK30KKworZXh0ZXJuIGlubGluZSB2b2lkICogeGNoZ19wdHIodm9pZCAqIG0sIHZvaWQgKiB2YWwpCit7CisJcmV0dXJuICh2b2lkICopIHhjaGdfdTMyKG0sICh1bnNpZ25lZCBsb25nKSB2YWwpOworfQorCisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfQ01QWENIRwkxCisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcKK19fY21weGNoZ191MzIodm9sYXRpbGUgdW5zaWduZWQgaW50ICpwLCB1bnNpZ25lZCBpbnQgb2xkLCB1bnNpZ25lZCBpbnQgbmV3KQoreworCXVuc2lnbmVkIGludCBwcmV2OworCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJcblwKKzE6CWx3YXJ4CSUwLDAsJTIgXG5cCisJY21wdwkwLCUwLCUzIFxuXAorCWJuZQkyZiBcbiIKKwlQUEM0MDVfRVJSNzcoMCwlMikKKyIJc3R3Y3guCSU0LDAsJTIgXG5cCisJYm5lLQkxYlxuIgorI2lmZGVmIENPTkZJR19TTVAKKyIJc3luY1xuIgorI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KKyIyOiIKKwk6ICI9JnIiIChwcmV2KSwgIj1tIiAoKnApCisJOiAiciIgKHApLCAiciIgKG9sZCksICJyIiAobmV3KSwgIm0iICgqcCkKKwk6ICJjYyIsICJtZW1vcnkiKTsKKworCXJldHVybiBwcmV2OworfQorCisvKiBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgZXhpc3QsIHNvIHlvdSdsbCBnZXQgYSBsaW5rZXIgZXJyb3IKKyAgIGlmIHNvbWV0aGluZyB0cmllcyB0byBkbyBhbiBpbnZhbGlkIGNtcHhjaGcoKS4gICovCitleHRlcm4gdm9pZCBfX2NtcHhjaGdfY2FsbGVkX3dpdGhfYmFkX3BvaW50ZXIodm9pZCk7CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcKK19fY21weGNoZyh2b2xhdGlsZSB2b2lkICpwdHIsIHVuc2lnbmVkIGxvbmcgb2xkLCB1bnNpZ25lZCBsb25nIG5ldywgaW50IHNpemUpCit7CisJc3dpdGNoIChzaXplKSB7CisJY2FzZSA0OgorCQlyZXR1cm4gX19jbXB4Y2hnX3UzMihwdHIsIG9sZCwgbmV3KTsKKyNpZiAwCS8qIHdlIGRvbid0IGhhdmUgX19jbXB4Y2hnX3U2NCBvbiAzMi1iaXQgUFBDICovCisJY2FzZSA4OgorCQlyZXR1cm4gX19jbXB4Y2hnX3U2NChwdHIsIG9sZCwgbmV3KTsKKyNlbmRpZiAvKiAwICovCisJfQorCV9fY21weGNoZ19jYWxsZWRfd2l0aF9iYWRfcG9pbnRlcigpOworCXJldHVybiBvbGQ7Cit9CisKKyNkZWZpbmUgY21weGNoZyhwdHIsbyxuKQkJCQkJCSBcCisgICh7CQkJCQkJCQkJIFwKKyAgICAgX190eXBlb2ZfXygqKHB0cikpIF9vXyA9IChvKTsJCQkJCSBcCisgICAgIF9fdHlwZW9mX18oKihwdHIpKSBfbl8gPSAobik7CQkJCQkgXAorICAgICAoX190eXBlb2ZfXygqKHB0cikpKSBfX2NtcHhjaGcoKHB0ciksICh1bnNpZ25lZCBsb25nKV9vXywJCSBcCisJCQkJICAgICh1bnNpZ25lZCBsb25nKV9uXywgc2l6ZW9mKCoocHRyKSkpOyBcCisgIH0pCisKKyNkZWZpbmUgYXJjaF9hbGlnbl9zdGFjayh4KSAoeCkKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAvKiBfX1BQQ19TWVNURU1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL3Rlcm1iaXRzLmggYi9pbmNsdWRlL2FzbS1wcGMvdGVybWJpdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzQzZmI3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjL3Rlcm1iaXRzLmgKQEAgLTAsMCArMSwxODUgQEAKKyNpZm5kZWYgX1BQQ19URVJNQklUU19ICisjZGVmaW5lIF9QUENfVEVSTUJJVFNfSAorCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIJY2NfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50CXNwZWVkX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludAl0Y2ZsYWdfdDsKKworLyoKKyAqIHRlcm1pb3MgdHlwZSBhbmQgbWFjcm8gZGVmaW5pdGlvbnMuICBCZSBjYXJlZnVsIGFib3V0IGFkZGluZyBzdHVmZgorICogdG8gdGhpcyBmaWxlIHNpbmNlIGl0J3MgdXNlZCBpbiBHTlUgbGliYyBhbmQgdGhlcmUgYXJlIHN0cmljdCBydWxlcworICogY29uY2VybmluZyBuYW1lc3BhY2UgcG9sbHV0aW9uLgorICovCisKKyNkZWZpbmUgTkNDUyAxOQorc3RydWN0IHRlcm1pb3MgeworCXRjZmxhZ190IGNfaWZsYWc7CQkvKiBpbnB1dCBtb2RlIGZsYWdzICovCisJdGNmbGFnX3QgY19vZmxhZzsJCS8qIG91dHB1dCBtb2RlIGZsYWdzICovCisJdGNmbGFnX3QgY19jZmxhZzsJCS8qIGNvbnRyb2wgbW9kZSBmbGFncyAqLworCXRjZmxhZ190IGNfbGZsYWc7CQkvKiBsb2NhbCBtb2RlIGZsYWdzICovCisJY2NfdCBjX2NjW05DQ1NdOwkJLyogY29udHJvbCBjaGFyYWN0ZXJzICovCisJY2NfdCBjX2xpbmU7CQkJLyogbGluZSBkaXNjaXBsaW5lICg9PSBjX2NjWzE5XSkgKi8KKwlzcGVlZF90IGNfaXNwZWVkOwkJLyogaW5wdXQgc3BlZWQgKi8KKwlzcGVlZF90IGNfb3NwZWVkOwkJLyogb3V0cHV0IHNwZWVkICovCit9OworCisvKiBjX2NjIGNoYXJhY3RlcnMgKi8KKyNkZWZpbmUgVklOVFIgCTAKKyNkZWZpbmUgVlFVSVQgCTEKKyNkZWZpbmUgVkVSQVNFIAkyCisjZGVmaW5lIFZLSUxMCTMKKyNkZWZpbmUgVkVPRgk0CisjZGVmaW5lIFZNSU4JNQorI2RlZmluZSBWRU9MCTYKKyNkZWZpbmUgVlRJTUUJNworI2RlZmluZSBWRU9MMgk4CisjZGVmaW5lIFZTV1RDCTkKKworI2RlZmluZSBWV0VSQVNFIAkxMAorI2RlZmluZSBWUkVQUklOVAkxMQorI2RlZmluZSBWU1VTUCAJCTEyCisjZGVmaW5lIFZTVEFSVAkJMTMKKyNkZWZpbmUgVlNUT1AJCTE0CisjZGVmaW5lIFZMTkVYVAkJMTUKKyNkZWZpbmUgVkRJU0NBUkQJMTYKKworLyogY19pZmxhZyBiaXRzICovCisjZGVmaW5lIElHTkJSSwkwMDAwMDAxCisjZGVmaW5lIEJSS0lOVAkwMDAwMDAyCisjZGVmaW5lIElHTlBBUgkwMDAwMDA0CisjZGVmaW5lIFBBUk1SSwkwMDAwMDEwCisjZGVmaW5lIElOUENLCTAwMDAwMjAKKyNkZWZpbmUgSVNUUklQCTAwMDAwNDAKKyNkZWZpbmUgSU5MQ1IJMDAwMDEwMAorI2RlZmluZSBJR05DUgkwMDAwMjAwCisjZGVmaW5lIElDUk5MCTAwMDA0MDAKKyNkZWZpbmUgSVhPTgkwMDAxMDAwCisjZGVmaW5lIElYT0ZGCTAwMDIwMDAKKyNkZWZpbmUgSVhBTlkJCTAwMDQwMDAKKyNkZWZpbmUgSVVDTEMJCTAwMTAwMDAKKyNkZWZpbmUgSU1BWEJFTAkwMDIwMDAwCisjZGVmaW5lIElVVEY4CTAwNDAwMDAKKworLyogY19vZmxhZyBiaXRzICovCisjZGVmaW5lIE9QT1NUCTAwMDAwMDEKKyNkZWZpbmUgT05MQ1IJMDAwMDAwMgorI2RlZmluZSBPTENVQwkwMDAwMDA0CisKKyNkZWZpbmUgT0NSTkwJMDAwMDAxMAorI2RlZmluZSBPTk9DUgkwMDAwMDIwCisjZGVmaW5lIE9OTFJFVAkwMDAwMDQwCisKKyNkZWZpbmUgT0ZJTEwJMDAwMDAxMDAKKyNkZWZpbmUgT0ZERUwJMDAwMDAyMDAKKyNkZWZpbmUgTkxETFkJMDAwMDE0MDAKKyNkZWZpbmUgICBOTDAJMDAwMDAwMDAKKyNkZWZpbmUgICBOTDEJMDAwMDA0MDAKKyNkZWZpbmUgICBOTDIJMDAwMDEwMDAKKyNkZWZpbmUgICBOTDMJMDAwMDE0MDAKKyNkZWZpbmUgVEFCRExZCTAwMDA2MDAwCisjZGVmaW5lICAgVEFCMAkwMDAwMDAwMAorI2RlZmluZSAgIFRBQjEJMDAwMDIwMDAKKyNkZWZpbmUgICBUQUIyCTAwMDA0MDAwCisjZGVmaW5lICAgVEFCMwkwMDAwNjAwMAorI2RlZmluZSAgIFhUQUJTCTAwMDA2MDAwCS8qIHJlcXVpcmVkIGJ5IFBPU0lYIHRvID09IFRBQjMgKi8KKyNkZWZpbmUgQ1JETFkJMDAwMzAwMDAKKyNkZWZpbmUgICBDUjAJMDAwMDAwMDAKKyNkZWZpbmUgICBDUjEJMDAwMTAwMDAKKyNkZWZpbmUgICBDUjIJMDAwMjAwMDAKKyNkZWZpbmUgICBDUjMJMDAwMzAwMDAKKyNkZWZpbmUgRkZETFkJMDAwNDAwMDAKKyNkZWZpbmUgICBGRjAJMDAwMDAwMDAKKyNkZWZpbmUgICBGRjEJMDAwNDAwMDAKKyNkZWZpbmUgQlNETFkJMDAxMDAwMDAKKyNkZWZpbmUgICBCUzAJMDAwMDAwMDAKKyNkZWZpbmUgICBCUzEJMDAxMDAwMDAKKyNkZWZpbmUgVlRETFkJMDAyMDAwMDAKKyNkZWZpbmUgICBWVDAJMDAwMDAwMDAKKyNkZWZpbmUgICBWVDEJMDAyMDAwMDAKKworLyogY19jZmxhZyBiaXQgbWVhbmluZyAqLworI2RlZmluZSBDQkFVRAkwMDAwMzc3CisjZGVmaW5lICBCMAkwMDAwMDAwCQkvKiBoYW5nIHVwICovCisjZGVmaW5lICBCNTAJMDAwMDAwMQorI2RlZmluZSAgQjc1CTAwMDAwMDIKKyNkZWZpbmUgIEIxMTAJMDAwMDAwMworI2RlZmluZSAgQjEzNAkwMDAwMDA0CisjZGVmaW5lICBCMTUwCTAwMDAwMDUKKyNkZWZpbmUgIEIyMDAJMDAwMDAwNgorI2RlZmluZSAgQjMwMAkwMDAwMDA3CisjZGVmaW5lICBCNjAwCTAwMDAwMTAKKyNkZWZpbmUgIEIxMjAwCTAwMDAwMTEKKyNkZWZpbmUgIEIxODAwCTAwMDAwMTIKKyNkZWZpbmUgIEIyNDAwCTAwMDAwMTMKKyNkZWZpbmUgIEI0ODAwCTAwMDAwMTQKKyNkZWZpbmUgIEI5NjAwCTAwMDAwMTUKKyNkZWZpbmUgIEIxOTIwMAkwMDAwMDE2CisjZGVmaW5lICBCMzg0MDAJMDAwMDAxNworI2RlZmluZSBFWFRBIEIxOTIwMAorI2RlZmluZSBFWFRCIEIzODQwMAorI2RlZmluZSBDQkFVREVYIDAwMDAwMDAKKyNkZWZpbmUgIEI1NzYwMCAgIDAwMDIwCisjZGVmaW5lICBCMTE1MjAwICAwMDAyMQorI2RlZmluZSAgQjIzMDQwMCAgMDAwMjIKKyNkZWZpbmUgIEI0NjA4MDAgIDAwMDIzCisjZGVmaW5lICBCNTAwMDAwICAwMDAyNAorI2RlZmluZSAgQjU3NjAwMCAgMDAwMjUKKyNkZWZpbmUgIEI5MjE2MDAgIDAwMDI2CisjZGVmaW5lIEIxMDAwMDAwICAwMDAyNworI2RlZmluZSBCMTE1MjAwMCAgMDAwMzAKKyNkZWZpbmUgQjE1MDAwMDAgIDAwMDMxCisjZGVmaW5lIEIyMDAwMDAwICAwMDAzMgorI2RlZmluZSBCMjUwMDAwMCAgMDAwMzMKKyNkZWZpbmUgQjMwMDAwMDAgIDAwMDM0CisjZGVmaW5lIEIzNTAwMDAwICAwMDAzNQorI2RlZmluZSBCNDAwMDAwMCAgMDAwMzYKKworI2RlZmluZSBDU0laRQkwMDAwMTQwMAorI2RlZmluZSAgIENTNQkwMDAwMDAwMAorI2RlZmluZSAgIENTNgkwMDAwMDQwMAorI2RlZmluZSAgIENTNwkwMDAwMTAwMAorI2RlZmluZSAgIENTOAkwMDAwMTQwMAorCisjZGVmaW5lIENTVE9QQgkwMDAwMjAwMAorI2RlZmluZSBDUkVBRAkwMDAwNDAwMAorI2RlZmluZSBQQVJFTkIJMDAwMTAwMDAKKyNkZWZpbmUgUEFST0RECTAwMDIwMDAwCisjZGVmaW5lIEhVUENMCTAwMDQwMDAwCisKKyNkZWZpbmUgQ0xPQ0FMCTAwMTAwMDAwCisjZGVmaW5lIENSVFNDVFMJICAwMjAwMDAwMDAwMDAJCS8qIGZsb3cgY29udHJvbCAqLworCisvKiBjX2xmbGFnIGJpdHMgKi8KKyNkZWZpbmUgSVNJRwkweDAwMDAwMDgwCisjZGVmaW5lIElDQU5PTgkweDAwMDAwMTAwCisjZGVmaW5lIFhDQVNFCTB4MDAwMDQwMDAKKyNkZWZpbmUgRUNITwkweDAwMDAwMDA4CisjZGVmaW5lIEVDSE9FCTB4MDAwMDAwMDIKKyNkZWZpbmUgRUNIT0sJMHgwMDAwMDAwNAorI2RlZmluZSBFQ0hPTkwJMHgwMDAwMDAxMAorI2RlZmluZSBOT0ZMU0gJMHg4MDAwMDAwMAorI2RlZmluZSBUT1NUT1AJMHgwMDQwMDAwMAorI2RlZmluZSBFQ0hPQ1RMCTB4MDAwMDAwNDAKKyNkZWZpbmUgRUNIT1BSVAkweDAwMDAwMDIwCisjZGVmaW5lIEVDSE9LRQkweDAwMDAwMDAxCisjZGVmaW5lIEZMVVNITwkweDAwODAwMDAwCisjZGVmaW5lIFBFTkRJTgkweDIwMDAwMDAwCisjZGVmaW5lIElFWFRFTgkweDAwMDAwNDAwCisKKy8qIFZhbHVlcyBmb3IgdGhlIEFDVElPTiBhcmd1bWVudCB0byBgdGNmbG93Jy4gICovCisjZGVmaW5lCVRDT09GRgkJMAorI2RlZmluZQlUQ09PTgkJMQorI2RlZmluZQlUQ0lPRkYJCTIKKyNkZWZpbmUJVENJT04JCTMKKworLyogVmFsdWVzIGZvciB0aGUgUVVFVUVfU0VMRUNUT1IgYXJndW1lbnQgdG8gYHRjZmx1c2gnLiAgKi8KKyNkZWZpbmUJVENJRkxVU0gJMAorI2RlZmluZQlUQ09GTFVTSAkxCisjZGVmaW5lCVRDSU9GTFVTSAkyCisKKy8qIFZhbHVlcyBmb3IgdGhlIE9QVElPTkFMX0FDVElPTlMgYXJndW1lbnQgdG8gYHRjc2V0YXR0cicuICAqLworI2RlZmluZQlUQ1NBTk9XCQkwCisjZGVmaW5lCVRDU0FEUkFJTgkxCisjZGVmaW5lCVRDU0FGTFVTSAkyCisKKyNlbmRpZiAvKiBfUFBDX1RFUk1CSVRTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy90ZXJtaW9zLmggYi9pbmNsdWRlL2FzbS1wcGMvdGVybWlvcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3YzYyODcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGMvdGVybWlvcy5oCkBAIC0wLDAgKzEsMjMyIEBACisjaWZuZGVmIF9QUENfVEVSTUlPU19ICisjZGVmaW5lIF9QUENfVEVSTUlPU19ICisKKy8qCisgKiBMaWJlcmFsbHkgYWRhcHRlZCBmcm9tIGFscGhhL3Rlcm1pb3MuaC4gIEluIHBhcnRpY3VsYXIsIHRoZSBjX2NjW10KKyAqIGZpZWxkcyBoYXZlIGJlZW4gcmVvcmRlcmVkIHNvIHRoYXQgdGVybWlvICYgdGVybWlvcyBzaGFyZSB0aGUKKyAqIGNvbW1vbiBzdWJzZXQgaW4gdGhlIHNhbWUgb3JkZXIgKGZvciBicmFpbiBkZWFkIHByb2dyYW1zIHRoYXQgZG9uJ3QKKyAqIGtub3cgb3IgY2FyZSBhYm91dCB0aGUgZGlmZmVyZW5jZXMpLgorICovCisKKyNpbmNsdWRlIDxhc20vaW9jdGxzLmg+CisjaW5jbHVkZSA8YXNtL3Rlcm1iaXRzLmg+CisKK3N0cnVjdCBzZ3R0eWIgeworCWNoYXIJc2dfaXNwZWVkOworCWNoYXIJc2dfb3NwZWVkOworCWNoYXIJc2dfZXJhc2U7CisJY2hhcglzZ19raWxsOworCXNob3J0CXNnX2ZsYWdzOworfTsKKworc3RydWN0IHRjaGFycyB7CisJY2hhcgl0X2ludHJjOworCWNoYXIJdF9xdWl0YzsKKwljaGFyCXRfc3RhcnRjOworCWNoYXIJdF9zdG9wYzsKKwljaGFyCXRfZW9mYzsKKwljaGFyCXRfYnJrYzsKK307CisKK3N0cnVjdCBsdGNoYXJzIHsKKwljaGFyCXRfc3VzcGM7CisJY2hhcgl0X2RzdXNwYzsKKwljaGFyCXRfcnBybnRjOworCWNoYXIJdF9mbHVzaGM7CisJY2hhcgl0X3dlcmFzYzsKKwljaGFyCXRfbG5leHRjOworfTsKKworI2RlZmluZSBGSU9DTEVYCQlfSU8oJ2YnLCAxKQorI2RlZmluZSBGSU9OQ0xFWAlfSU8oJ2YnLCAyKQorI2RlZmluZSBGSU9BU1lOQwlfSU9XKCdmJywgMTI1LCBpbnQpCisjZGVmaW5lIEZJT05CSU8JCV9JT1coJ2YnLCAxMjYsIGludCkKKyNkZWZpbmUgRklPTlJFQUQJX0lPUignZicsIDEyNywgaW50KQorI2RlZmluZSBUSU9DSU5RCQlGSU9OUkVBRAorI2RlZmluZSBGSU9RU0laRQlfSU9SKCdmJywgMTI4LCBsb2ZmX3QpCisKKyNkZWZpbmUgVElPQ0dFVFAJX0lPUigndCcsIDgsIHN0cnVjdCBzZ3R0eWIpCisjZGVmaW5lIFRJT0NTRVRQCV9JT1coJ3QnLCA5LCBzdHJ1Y3Qgc2d0dHliKQorI2RlZmluZSBUSU9DU0VUTglfSU9XKCd0JywgMTAsIHN0cnVjdCBzZ3R0eWIpCS8qIFRJT0NTRVRQIHdvIGZsdXNoICovCisKKyNkZWZpbmUgVElPQ1NFVEMJX0lPVygndCcsIDE3LCBzdHJ1Y3QgdGNoYXJzKQorI2RlZmluZSBUSU9DR0VUQwlfSU9SKCd0JywgMTgsIHN0cnVjdCB0Y2hhcnMpCisjZGVmaW5lIFRDR0VUUwkJX0lPUigndCcsIDE5LCBzdHJ1Y3QgdGVybWlvcykKKyNkZWZpbmUgVENTRVRTCQlfSU9XKCd0JywgMjAsIHN0cnVjdCB0ZXJtaW9zKQorI2RlZmluZSBUQ1NFVFNXCQlfSU9XKCd0JywgMjEsIHN0cnVjdCB0ZXJtaW9zKQorI2RlZmluZSBUQ1NFVFNGCQlfSU9XKCd0JywgMjIsIHN0cnVjdCB0ZXJtaW9zKQorCisjZGVmaW5lIFRDR0VUQQkJX0lPUigndCcsIDIzLCBzdHJ1Y3QgdGVybWlvKQorI2RlZmluZSBUQ1NFVEEJCV9JT1coJ3QnLCAyNCwgc3RydWN0IHRlcm1pbykKKyNkZWZpbmUgVENTRVRBVwkJX0lPVygndCcsIDI1LCBzdHJ1Y3QgdGVybWlvKQorI2RlZmluZSBUQ1NFVEFGCQlfSU9XKCd0JywgMjgsIHN0cnVjdCB0ZXJtaW8pCisKKyNkZWZpbmUgVENTQlJLCQlfSU8oJ3QnLCAyOSkKKyNkZWZpbmUgVENYT05DCQlfSU8oJ3QnLCAzMCkKKyNkZWZpbmUgVENGTFNICQlfSU8oJ3QnLCAzMSkKKworI2RlZmluZSBUSU9DU1dJTlNaCV9JT1coJ3QnLCAxMDMsIHN0cnVjdCB3aW5zaXplKQorI2RlZmluZSBUSU9DR1dJTlNaCV9JT1IoJ3QnLCAxMDQsIHN0cnVjdCB3aW5zaXplKQorI2RlZmluZQlUSU9DU1RBUlQJX0lPKCd0JywgMTEwKQkJLyogc3RhcnQgb3V0cHV0LCBsaWtlIF5RICovCisjZGVmaW5lCVRJT0NTVE9QCV9JTygndCcsIDExMSkJCS8qIHN0b3Agb3V0cHV0LCBsaWtlIF5TICovCisjZGVmaW5lIFRJT0NPVVRRICAgICAgICBfSU9SKCd0JywgMTE1LCBpbnQpICAgICAvKiBvdXRwdXQgcXVldWUgc2l6ZSAqLworCisjZGVmaW5lIFRJT0NHTFRDCV9JT1IoJ3QnLCAxMTYsIHN0cnVjdCBsdGNoYXJzKQorI2RlZmluZSBUSU9DU0xUQwlfSU9XKCd0JywgMTE3LCBzdHJ1Y3QgbHRjaGFycykKKyNkZWZpbmUgVElPQ1NQR1JQCV9JT1coJ3QnLCAxMTgsIGludCkKKyNkZWZpbmUgVElPQ0dQR1JQCV9JT1IoJ3QnLCAxMTksIGludCkKKworI2RlZmluZSBUSU9DRVhDTAkweDU0MEMKKyNkZWZpbmUgVElPQ05YQ0wJMHg1NDBECisjZGVmaW5lIFRJT0NTQ1RUWQkweDU0MEUKKworI2RlZmluZSBUSU9DU1RJCQkweDU0MTIKKyNkZWZpbmUgVElPQ01HRVQJMHg1NDE1CisjZGVmaW5lIFRJT0NNQklTCTB4NTQxNgorI2RlZmluZSBUSU9DTUJJQwkweDU0MTcKKyNkZWZpbmUgVElPQ01TRVQJMHg1NDE4CisjZGVmaW5lIFRJT0NHU09GVENBUgkweDU0MTkKKyNkZWZpbmUgVElPQ1NTT0ZUQ0FSCTB4NTQxQQorI2RlZmluZSBUSU9DTElOVVgJMHg1NDFDCisjZGVmaW5lIFRJT0NDT05TCTB4NTQxRAorI2RlZmluZSBUSU9DR1NFUklBTAkweDU0MUUKKyNkZWZpbmUgVElPQ1NTRVJJQUwJMHg1NDFGCisjZGVmaW5lIFRJT0NQS1QJCTB4NTQyMAorCisjZGVmaW5lIFRJT0NOT1RUWQkweDU0MjIKKyNkZWZpbmUgVElPQ1NFVEQJMHg1NDIzCisjZGVmaW5lIFRJT0NHRVRECTB4NTQyNAorI2RlZmluZSBUQ1NCUktQCQkweDU0MjUJLyogTmVlZGVkIGZvciBQT1NJWCB0Y3NlbmRicmVhaygpICovCisKKyNkZWZpbmUgVElPQ1NFUkNPTkZJRwkweDU0NTMKKyNkZWZpbmUgVElPQ1NFUkdXSUxECTB4NTQ1NAorI2RlZmluZSBUSU9DU0VSU1dJTEQJMHg1NDU1CisjZGVmaW5lIFRJT0NHTENLVFJNSU9TCTB4NTQ1NgorI2RlZmluZSBUSU9DU0xDS1RSTUlPUwkweDU0NTcKKyNkZWZpbmUgVElPQ1NFUkdTVFJVQ1QJMHg1NDU4IC8qIEZvciBkZWJ1Z2dpbmcgb25seSAqLworI2RlZmluZSBUSU9DU0VSR0VUTFNSICAgMHg1NDU5IC8qIEdldCBsaW5lIHN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBUSU9DU0VSR0VUTVVMVEkgMHg1NDVBIC8qIEdldCBtdWx0aXBvcnQgY29uZmlnICAqLworI2RlZmluZSBUSU9DU0VSU0VUTVVMVEkgMHg1NDVCIC8qIFNldCBtdWx0aXBvcnQgY29uZmlnICovCisKKyNkZWZpbmUgVElPQ01JV0FJVAkweDU0NUMJLyogd2FpdCBmb3IgYSBjaGFuZ2Ugb24gc2VyaWFsIGlucHV0IGxpbmUocykgKi8KKyNkZWZpbmUgVElPQ0dJQ09VTlQJMHg1NDVECS8qIHJlYWQgc2VyaWFsIHBvcnQgaW5saW5lIGludGVycnVwdCBjb3VudHMgKi8KKworLyogVXNlZCBmb3IgcGFja2V0IG1vZGUgKi8KKyNkZWZpbmUgVElPQ1BLVF9EQVRBCQkgMAorI2RlZmluZSBUSU9DUEtUX0ZMVVNIUkVBRAkgMQorI2RlZmluZSBUSU9DUEtUX0ZMVVNIV1JJVEUJIDIKKyNkZWZpbmUgVElPQ1BLVF9TVE9QCQkgNAorI2RlZmluZSBUSU9DUEtUX1NUQVJUCQkgOAorI2RlZmluZSBUSU9DUEtUX05PU1RPUAkJMTYKKyNkZWZpbmUgVElPQ1BLVF9ET1NUT1AJCTMyCisKK3N0cnVjdCB3aW5zaXplIHsKKwl1bnNpZ25lZCBzaG9ydCB3c19yb3c7CisJdW5zaWduZWQgc2hvcnQgd3NfY29sOworCXVuc2lnbmVkIHNob3J0IHdzX3hwaXhlbDsKKwl1bnNpZ25lZCBzaG9ydCB3c195cGl4ZWw7Cit9OworCisjZGVmaW5lIE5DQyAxMAorc3RydWN0IHRlcm1pbyB7CisJdW5zaWduZWQgc2hvcnQgY19pZmxhZzsJCS8qIGlucHV0IG1vZGUgZmxhZ3MgKi8KKwl1bnNpZ25lZCBzaG9ydCBjX29mbGFnOwkJLyogb3V0cHV0IG1vZGUgZmxhZ3MgKi8KKwl1bnNpZ25lZCBzaG9ydCBjX2NmbGFnOwkJLyogY29udHJvbCBtb2RlIGZsYWdzICovCisJdW5zaWduZWQgc2hvcnQgY19sZmxhZzsJCS8qIGxvY2FsIG1vZGUgZmxhZ3MgKi8KKwl1bnNpZ25lZCBjaGFyIGNfbGluZTsJCS8qIGxpbmUgZGlzY2lwbGluZSAqLworCXVuc2lnbmVkIGNoYXIgY19jY1tOQ0NdOwkvKiBjb250cm9sIGNoYXJhY3RlcnMgKi8KK307CisKKy8qIGNfY2MgY2hhcmFjdGVycyAqLworI2RlZmluZSBfVklOVFIJMAorI2RlZmluZSBfVlFVSVQJMQorI2RlZmluZSBfVkVSQVNFCTIKKyNkZWZpbmUgX1ZLSUxMCTMKKyNkZWZpbmUgX1ZFT0YJNAorI2RlZmluZSBfVk1JTgk1CisjZGVmaW5lIF9WRU9MCTYKKyNkZWZpbmUgX1ZUSU1FCTcKKyNkZWZpbmUgX1ZFT0wyCTgKKyNkZWZpbmUgX1ZTV1RDCTkKKworI2lmZGVmIF9fS0VSTkVMX18KKy8qICAgICAgICAgICAgICAgICAgIF5DICBeXCBkZWwgIF5VICBeRCAgIDEgICAwICAgMCAgIDAgICAwICBeVyAgXlIgIF5aICBeUSAgXlMgIF5WICBeVSAgKi8KKyNkZWZpbmUgSU5JVF9DX0NDICJcMDAzXDAzNFwxNzdcMDI1XDAwNFwwMDFcMDAwXDAwMFwwMDBcMDAwXDAyN1wwMjJcMDMyXDAyMVwwMjNcMDI2XDAyNSIKKyNlbmRpZgkvKiBfX0tFUk5FTF9fICovCisKKy8qIG1vZGVtIGxpbmVzICovCisjZGVmaW5lIFRJT0NNX0xFCTB4MDAxCisjZGVmaW5lIFRJT0NNX0RUUgkweDAwMgorI2RlZmluZSBUSU9DTV9SVFMJMHgwMDQKKyNkZWZpbmUgVElPQ01fU1QJMHgwMDgKKyNkZWZpbmUgVElPQ01fU1IJMHgwMTAKKyNkZWZpbmUgVElPQ01fQ1RTCTB4MDIwCisjZGVmaW5lIFRJT0NNX0NBUgkweDA0MAorI2RlZmluZSBUSU9DTV9STkcJMHgwODAKKyNkZWZpbmUgVElPQ01fRFNSCTB4MTAwCisjZGVmaW5lIFRJT0NNX0NECVRJT0NNX0NBUgorI2RlZmluZSBUSU9DTV9SSQlUSU9DTV9STkcKKyNkZWZpbmUgVElPQ01fT1VUMQkweDIwMDAKKyNkZWZpbmUgVElPQ01fT1VUMgkweDQwMDAKKyNkZWZpbmUgVElPQ01fTE9PUAkweDgwMDAKKworLyogaW9jdGwgKGZkLCBUSU9DU0VSR0VUTFNSLCAmcmVzdWx0KSB3aGVyZSByZXN1bHQgbWF5IGJlIGFzIGJlbG93ICovCisjZGVmaW5lIFRJT0NTRVJfVEVNVCAgICAweDAxCS8qIFRyYW5zbWl0dGVyIHBoeXNpY2FsbHkgZW1wdHkgKi8KKworLyogbGluZSBkaXNjaXBsaW5lcyAqLworI2RlZmluZSBOX1RUWQkJMAorI2RlZmluZSBOX1NMSVAJCTEKKyNkZWZpbmUgTl9NT1VTRQkJMgorI2RlZmluZSBOX1BQUAkJMworI2RlZmluZSBOX1NUUklQCQk0CisjZGVmaW5lIE5fQVgyNQkJNQorI2RlZmluZSBOX1gyNQkJNgkvKiBYLjI1IGFzeW5jICovCisjZGVmaW5lIE5fNlBBQ0sJCTcKKyNkZWZpbmUgTl9NQVNDCQk4CS8qIFJlc2VydmVkIGZvciBNb2JpdGV4IG1vZHVsZSA8a2F6QGNhZmUubmV0PiAqLworI2RlZmluZSBOX1IzOTY0CQk5CS8qIFJlc2VydmVkIGZvciBTaW1hdGljIFIzOTY0IG1vZHVsZSAqLworI2RlZmluZSBOX1BST0ZJQlVTX0ZETAkxMAkvKiBSZXNlcnZlZCBmb3IgUHJvZmlidXMgPERhdmVAbXZoaS5jb20+ICovCisjZGVmaW5lIE5fSVJEQQkJMTEJLyogTGludXggSXJEYSAtIGh0dHA6Ly9pcmRhLnNvdXJjZWZvcmdlLm5ldC8gKi8KKyNkZWZpbmUgTl9TTVNCTE9DSwkxMgkvKiBTTVMgYmxvY2sgbW9kZSAtIGZvciB0YWxraW5nIHRvIEdTTSBkYXRhIGNhcmRzIGFib3V0IFNNUyBtZXNzYWdlcyAqLworI2RlZmluZSBOX0hETEMJCTEzCS8qIHN5bmNocm9ub3VzIEhETEMgKi8KKyNkZWZpbmUgTl9TWU5DX1BQUAkxNAorI2RlZmluZSBOX0hDSQkJMTUgIC8qIEJsdWV0b290aCBIQ0kgVUFSVCAqLworCisjaWZkZWYgX19LRVJORUxfXworCisvKgorICogVHJhbnNsYXRlIGEgInRlcm1pbyIgc3RydWN0dXJlIGludG8gYSAidGVybWlvcyIuIFVnaC4KKyAqLworI2RlZmluZSBTRVRfTE9XX1RFUk1JT1NfQklUUyh0ZXJtaW9zLCB0ZXJtaW8sIHgpIHsgXAorCXVuc2lnbmVkIHNob3J0IF9fdG1wOyBcCisJZ2V0X3VzZXIoX190bXAsJih0ZXJtaW8pLT54KTsgXAorCSh0ZXJtaW9zKS0+eCA9ICgweGZmZmYwMDAwICYgKHRlcm1pb3MpLT54KSB8IF9fdG1wOyBcCit9CisKKyNkZWZpbmUgdXNlcl90ZXJtaW9fdG9fa2VybmVsX3Rlcm1pb3ModGVybWlvcywgdGVybWlvKSBcCisoeyBcCisJU0VUX0xPV19URVJNSU9TX0JJVFModGVybWlvcywgdGVybWlvLCBjX2lmbGFnKTsgXAorCVNFVF9MT1dfVEVSTUlPU19CSVRTKHRlcm1pb3MsIHRlcm1pbywgY19vZmxhZyk7IFwKKwlTRVRfTE9XX1RFUk1JT1NfQklUUyh0ZXJtaW9zLCB0ZXJtaW8sIGNfY2ZsYWcpOyBcCisJU0VUX0xPV19URVJNSU9TX0JJVFModGVybWlvcywgdGVybWlvLCBjX2xmbGFnKTsgXAorCWNvcHlfZnJvbV91c2VyKCh0ZXJtaW9zKS0+Y19jYywgKHRlcm1pbyktPmNfY2MsIE5DQyk7IFwKK30pCisKKy8qCisgKiBUcmFuc2xhdGUgYSAidGVybWlvcyIgc3RydWN0dXJlIGludG8gYSAidGVybWlvIi4gVWdoLgorICovCisjZGVmaW5lIGtlcm5lbF90ZXJtaW9zX3RvX3VzZXJfdGVybWlvKHRlcm1pbywgdGVybWlvcykgXAorKHsgXAorCXB1dF91c2VyKCh0ZXJtaW9zKS0+Y19pZmxhZywgJih0ZXJtaW8pLT5jX2lmbGFnKTsgXAorCXB1dF91c2VyKCh0ZXJtaW9zKS0+Y19vZmxhZywgJih0ZXJtaW8pLT5jX29mbGFnKTsgXAorCXB1dF91c2VyKCh0ZXJtaW9zKS0+Y19jZmxhZywgJih0ZXJtaW8pLT5jX2NmbGFnKTsgXAorCXB1dF91c2VyKCh0ZXJtaW9zKS0+Y19sZmxhZywgJih0ZXJtaW8pLT5jX2xmbGFnKTsgXAorCXB1dF91c2VyKCh0ZXJtaW9zKS0+Y19saW5lLCAgJih0ZXJtaW8pLT5jX2xpbmUpOyBcCisJY29weV90b191c2VyKCh0ZXJtaW8pLT5jX2NjLCAodGVybWlvcyktPmNfY2MsIE5DQyk7IFwKK30pCisKKyNkZWZpbmUgdXNlcl90ZXJtaW9zX3RvX2tlcm5lbF90ZXJtaW9zKGssIHUpIGNvcHlfZnJvbV91c2VyKGssIHUsIHNpemVvZihzdHJ1Y3QgdGVybWlvcykpCisjZGVmaW5lIGtlcm5lbF90ZXJtaW9zX3RvX3VzZXJfdGVybWlvcyh1LCBrKSBjb3B5X3RvX3VzZXIodSwgaywgc2l6ZW9mKHN0cnVjdCB0ZXJtaW9zKSkKKworI2VuZGlmCS8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmCS8qIF9QUENfVEVSTUlPU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvdGhyZWFkX2luZm8uaCBiL2luY2x1ZGUvYXNtLXBwYy90aHJlYWRfaW5mby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3ZjAxNTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGMvdGhyZWFkX2luZm8uaApAQCAtMCwwICsxLDk5IEBACisvKiB0aHJlYWRfaW5mby5oOiBQUEMgbG93LWxldmVsIHRocmVhZCBpbmZvcm1hdGlvbgorICogYWRhcHRlZCBmcm9tIHRoZSBpMzg2IHZlcnNpb24gYnkgUGF1bCBNYWNrZXJyYXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgIERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKiAtIEluY29ycG9yYXRpbmcgc3VnZ2VzdGlvbnMgbWFkZSBieSBMaW51cyBUb3J2YWxkcyBhbmQgRGF2ZSBNaWxsZXIKKyAqLworCisjaWZuZGVmIF9BU01fVEhSRUFEX0lORk9fSAorI2RlZmluZSBfQVNNX1RIUkVBRF9JTkZPX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKyNpZm5kZWYgX19BU1NFTUJMWV9fCisvKgorICogbG93IGxldmVsIHRhc2sgZGF0YS4KKyAqIElmIHlvdSBjaGFuZ2UgdGhpcywgY2hhbmdlIHRoZSBUSV8qIG9mZnNldHMgYmVsb3cgdG8gbWF0Y2guCisgKi8KK3N0cnVjdCB0aHJlYWRfaW5mbyB7CisJc3RydWN0IHRhc2tfc3RydWN0CSp0YXNrOwkJLyogbWFpbiB0YXNrIHN0cnVjdHVyZSAqLworCXN0cnVjdCBleGVjX2RvbWFpbgkqZXhlY19kb21haW47CS8qIGV4ZWN1dGlvbiBkb21haW4gKi8KKwl1bnNpZ25lZCBsb25nCQlmbGFnczsJCS8qIGxvdyBsZXZlbCBmbGFncyAqLworCXVuc2lnbmVkIGxvbmcJCWxvY2FsX2ZsYWdzOwkvKiBub24tcmFjeSBmbGFncyAqLworCWludAkJCWNwdTsJCS8qIGNwdSB3ZSdyZSBvbiAqLworCWludAkJCXByZWVtcHRfY291bnQ7CisJc3RydWN0IHJlc3RhcnRfYmxvY2sJcmVzdGFydF9ibG9jazsKK307CisKKyNkZWZpbmUgSU5JVF9USFJFQURfSU5GTyh0c2spCQkJXAorewkJCQkJCVwKKwkudGFzayA9CQkmdHNrLAkJCVwKKwkuZXhlY19kb21haW4gPQkmZGVmYXVsdF9leGVjX2RvbWFpbiwJXAorCS5mbGFncyA9CTAsCQkJXAorCS5sb2NhbF9mbGFncyA9ICAwLAkJCVwKKwkuY3B1ID0JCTAsCQkJXAorCS5wcmVlbXB0X2NvdW50ID0gMSwJCQlcCisJLnJlc3RhcnRfYmxvY2sgPSB7CQkJXAorCQkuZm4gPSBkb19ub19yZXN0YXJ0X3N5c2NhbGwsCVwKKwl9LAkJCQkJXAorfQorCisjZGVmaW5lIGluaXRfdGhyZWFkX2luZm8JKGluaXRfdGhyZWFkX3VuaW9uLnRocmVhZF9pbmZvKQorI2RlZmluZSBpbml0X3N0YWNrCQkoaW5pdF90aHJlYWRfdW5pb24uc3RhY2spCisKKy8qCisgKiBtYWNyb3MvZnVuY3Rpb25zIGZvciBnYWluaW5nIGFjY2VzcyB0byB0aGUgdGhyZWFkIGluZm9ybWF0aW9uIHN0cnVjdHVyZQorICovCisKKy8qIGhvdyB0byBnZXQgdGhlIHRocmVhZCBpbmZvcm1hdGlvbiBzdHJ1Y3QgZnJvbSBDICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCB0aHJlYWRfaW5mbyAqY3VycmVudF90aHJlYWRfaW5mbyh2b2lkKQoreworCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGk7CisJX19hc21fXygicmx3aW5tICUwLDEsMCwwLDE4IiA6ICI9ciIodGkpKTsKKwlyZXR1cm4gdGk7Cit9CisKKy8qIHRocmVhZCBpbmZvcm1hdGlvbiBhbGxvY2F0aW9uICovCisjZGVmaW5lIGFsbG9jX3RocmVhZF9pbmZvKHRzaykgKChzdHJ1Y3QgdGhyZWFkX2luZm8gKikgXAorCQkJCV9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwgMSkpCisjZGVmaW5lIGZyZWVfdGhyZWFkX2luZm8odGkpCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpICh0aSksIDEpCisjZGVmaW5lIGdldF90aHJlYWRfaW5mbyh0aSkJZ2V0X3Rhc2tfc3RydWN0KCh0aSktPnRhc2spCisjZGVmaW5lIHB1dF90aHJlYWRfaW5mbyh0aSkJcHV0X3Rhc2tfc3RydWN0KCh0aSktPnRhc2spCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKy8qCisgKiBTaXplIG9mIGtlcm5lbCBzdGFjayBmb3IgZWFjaCBwcm9jZXNzLgorICovCisjZGVmaW5lIFRIUkVBRF9TSVpFCQk4MTkyCS8qIDIgcGFnZXMgKi8KKworI2RlZmluZSBQUkVFTVBUX0FDVElWRQkJMHgxMDAwMDAwMAorCisvKgorICogdGhyZWFkIGluZm9ybWF0aW9uIGZsYWcgYml0IG51bWJlcnMKKyAqLworI2RlZmluZSBUSUZfU1lTQ0FMTF9UUkFDRQkwCS8qIHN5c2NhbGwgdHJhY2UgYWN0aXZlICovCisjZGVmaW5lIFRJRl9OT1RJRllfUkVTVU1FCTEJLyogcmVzdW1wdGlvbiBub3RpZmljYXRpb24gcmVxdWVzdGVkICovCisjZGVmaW5lIFRJRl9TSUdQRU5ESU5HCQkyCS8qIHNpZ25hbCBwZW5kaW5nICovCisjZGVmaW5lIFRJRl9ORUVEX1JFU0NIRUQJMwkvKiByZXNjaGVkdWxpbmcgbmVjZXNzYXJ5ICovCisjZGVmaW5lIFRJRl9QT0xMSU5HX05SRkxBRwk0CS8qIHRydWUgaWYgcG9sbF9pZGxlKCkgaXMgcG9sbGluZworCQkJCQkgICBUSUZfTkVFRF9SRVNDSEVEICovCisjZGVmaW5lIFRJRl9NRU1ESUUJCTUKKy8qIGFzIGFib3ZlLCBidXQgYXMgYml0IHZhbHVlcyAqLworI2RlZmluZSBfVElGX1NZU0NBTExfVFJBQ0UJKDE8PFRJRl9TWVNDQUxMX1RSQUNFKQorI2RlZmluZSBfVElGX05PVElGWV9SRVNVTUUJKDE8PFRJRl9OT1RJRllfUkVTVU1FKQorI2RlZmluZSBfVElGX1NJR1BFTkRJTkcJCSgxPDxUSUZfU0lHUEVORElORykKKyNkZWZpbmUgX1RJRl9ORUVEX1JFU0NIRUQJKDE8PFRJRl9ORUVEX1JFU0NIRUQpCisjZGVmaW5lIF9USUZfUE9MTElOR19OUkZMQUcJKDE8PFRJRl9QT0xMSU5HX05SRkxBRykKKworLyoKKyAqIE5vbiByYWN5IChsb2NhbCkgZmxhZ3MgYml0IG51bWJlcnMKKyAqLworI2RlZmluZSBUSUZMX0ZPUkNFX05PRVJST1IJMAkvKiBkb24ndCByZXR1cm4gZXJyb3IgZnJvbSBjdXJyZW50CisJCQkJCSAgIHN5c2NhbGwgZXZlbiBpZiByZXN1bHQgPCAwICovCisKKy8qIGFzIGFib3ZlLCBidXQgYXMgYml0IHZhbHVlcyAqLworI2RlZmluZSBfVElGTF9GT1JDRV9OT0VSUk9SCSgxPDxUSUZMX0ZPUkNFX05PRVJST1IpCisKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9BU01fVEhSRUFEX0lORk9fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL3RpbWUuaCBiL2luY2x1ZGUvYXNtLXBwYy90aW1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2UwOWI0NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYy90aW1lLmgKQEAgLTAsMCArMSwxNTcgQEAKKy8qCisgKiBDb21tb24gdGltZSBwcm90b3R5cGVzIGFuZCBzdWNoIGZvciBhbGwgcHBjIG1hY2hpbmVzLgorICoKKyAqIFdyaXR0ZW4gYnkgQ29ydCBEb3VnYW4gKGNvcnRAZnNtbGFicy5jb20pIHRvIG1lcmdlCisgKiBQYXVsIE1hY2tlcnJhcycgdmVyc2lvbiBhbmQgbWluZSBmb3IgUFJlUCBhbmQgUG1hYy4KKyAqLworCisjaWZkZWYgX19LRVJORUxfXworI2lmbmRlZiBfX0FTTV9USU1FX0hfXworI2RlZmluZSBfX0FTTV9USU1FX0hfXworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9ydGMuaD4KKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisKKyNpbmNsdWRlIDxhc20vcmVnLmg+CisKKy8qIHRpbWUuYyAqLworZXh0ZXJuIHVuc2lnbmVkIHRiX3RpY2tzX3Blcl9qaWZmeTsKK2V4dGVybiB1bnNpZ25lZCB0Yl90b191czsKK2V4dGVybiB1bnNpZ25lZCB0Yl9sYXN0X3N0YW1wOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZGlzYXJtX2RlY3JbTlJfQ1BVU107CisKK2V4dGVybiB2b2lkIHRvX3RtKGludCB0aW0sIHN0cnVjdCBydGNfdGltZSAqIHRtKTsKK2V4dGVybiB0aW1lX3QgbGFzdF9ydGNfdXBkYXRlOworCitleHRlcm4gdm9pZCBzZXRfZGVjX2NwdTYodW5zaWduZWQgaW50IHZhbCk7CisKK2ludCB2aWFfY2FsaWJyYXRlX2RlY3Iodm9pZCk7CisKKy8qIEFjY2Vzc29yIGZ1bmN0aW9ucyBmb3IgdGhlIGRlY3JlbWVudGVyIHJlZ2lzdGVyLgorICogVGhlIDR4eCBkb2Vzbid0IGV2ZW4gaGF2ZSBhIGRlY3JlbWVudGVyLiAgSSB0cmllZCB0byB1c2UgdGhlCisgKiBnZW5lcmljIHRpbWVyIGludGVycnVwdCBjb2RlLCB3aGljaCBzZWVtcyBPSywgd2l0aCB0aGUgNHh4IFBJVAorICogaW4gYXV0by1yZWxvYWQgbW9kZS4gIFRoZSBwcm9ibGVtIGlzIFBJVCBzdG9wcyBjb3VudGluZyB3aGVuIGl0CisgKiBoaXRzIHplcm8uICBJZiBpdCB3b3VsZCB3cmFwLCB3ZSBjb3VsZCB1c2UgaXQganVzdCBsaWtlIGEgZGVjcmVtZW50ZXIuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCBnZXRfZGVjKHZvaWQpCit7CisjaWYgZGVmaW5lZChDT05GSUdfNDB4KQorCXJldHVybiAobWZzcHIoU1BSTl9QSVQpKTsKKyNlbHNlCisJcmV0dXJuIChtZnNwcihTUFJOX0RFQykpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgc2V0X2RlYyh1bnNpZ25lZCBpbnQgdmFsKQoreworI2lmIGRlZmluZWQoQ09ORklHXzQweCkKKwlyZXR1cm47CQkvKiBIYXZlIHRvIGxldCBpdCBhdXRvLXJlbG9hZCAqLworI2VsaWYgZGVmaW5lZChDT05GSUdfOHh4X0NQVTYpCisJc2V0X2RlY19jcHU2KHZhbCk7CisjZWxzZQorCW10c3ByKFNQUk5fREVDLCB2YWwpOworI2VuZGlmCit9CisKKy8qIEFjY2Vzc29yIGZ1bmN0aW9ucyBmb3IgdGhlIHRpbWViYXNlIChSVEMgb24gNjAxKSByZWdpc3RlcnMuICovCisvKiBJZiBvbmUgZGF5IENPTkZJR19QT1dFUiBpcyBhZGRlZCBqdXN0IGRlZmluZSBfX1VTRV9SVEMgYXMgMSAqLworI2lmZGVmIENPTkZJR182eHgKK2V4dGVybiBfX2lubGluZV9fIGludCBjb25zdCBfX1VTRV9SVEModm9pZCkgeworCXJldHVybiAobWZzcHIoU1BSTl9QVlIpPj4xNikgPT0gMTsKK30KKyNlbHNlCisjZGVmaW5lIF9fVVNFX1JUQygpIDAKKyNlbmRpZgorCitleHRlcm4gX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGdldF90Ymwodm9pZCkgeworCXVuc2lnbmVkIGxvbmcgdGJsOworI2lmIGRlZmluZWQoQ09ORklHXzQwM0dDWCkKKwlhc20gdm9sYXRpbGUoIm1mc3ByICUwLCAweDNkZCIgOiAiPXIiICh0YmwpKTsKKyNlbHNlCisJYXNtIHZvbGF0aWxlKCJtZnRiICUwIiA6ICI9ciIgKHRibCkpOworI2VuZGlmCisJcmV0dXJuIHRibDsKK30KKworZXh0ZXJuIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBnZXRfdGJ1KHZvaWQpIHsKKwl1bnNpZ25lZCBsb25nIHRibDsKKyNpZiBkZWZpbmVkKENPTkZJR180MDNHQ1gpCisJYXNtIHZvbGF0aWxlKCJtZnNwciAlMCwgMHgzZGMiIDogIj1yIiAodGJsKSk7CisjZWxzZQorCWFzbSB2b2xhdGlsZSgibWZ0YnUgJTAiIDogIj1yIiAodGJsKSk7CisjZW5kaWYKKwlyZXR1cm4gdGJsOworfQorCitleHRlcm4gX19pbmxpbmVfXyB2b2lkIHNldF90Yih1bnNpZ25lZCBpbnQgdXBwZXIsIHVuc2lnbmVkIGludCBsb3dlcikKK3sKKwltdHNwcihTUFJOX1RCV0wsIDApOworCW10c3ByKFNQUk5fVEJXVSwgdXBwZXIpOworCW10c3ByKFNQUk5fVEJXTCwgbG93ZXIpOworfQorCitleHRlcm4gX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGdldF9ydGNsKHZvaWQpIHsKKwl1bnNpZ25lZCBsb25nIHJ0Y2w7CisJYXNtIHZvbGF0aWxlKCJtZnJ0Y2wgJTAiIDogIj1yIiAocnRjbCkpOworCXJldHVybiBydGNsOworfQorCitleHRlcm4gX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGdldF9ydGN1KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBydGN1OworCWFzbSB2b2xhdGlsZSgibWZydGN1ICUwIiA6ICI9ciIgKHJ0Y3UpKTsKKwlyZXR1cm4gcnRjdTsKK30KKworZXh0ZXJuIF9faW5saW5lX18gdW5zaWduZWQgZ2V0X25hdGl2ZV90Ymwodm9pZCkgeworCWlmIChfX1VTRV9SVEMoKSkKKwkJcmV0dXJuIGdldF9ydGNsKCk7CisJZWxzZQorCSAgCXJldHVybiBnZXRfdGJsKCk7Cit9CisKKy8qIE9uIG1hY2hpbmVzIHdpdGggUlRDLCB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IGJlIHVzZWQgc2FmZWx5CisgKiBhZnRlciB0aGUgdGltZXN0YW1wIGFuZCBmb3IgMSBzZWNvbmQuIEl0IGlzIG9ubHkgdXNlZCBieSBnZXR0aW1lb2ZkYXkKKyAqIGhvd2V2ZXIgc28gaXQgc2hvdWxkIG5vdCBtYXR0ZXIuCisgKi8KK2V4dGVybiBfX2lubGluZV9fIHVuc2lnbmVkIHRiX3RpY2tzX3NpbmNlKHVuc2lnbmVkIHRzdGFtcCkgeworCWlmIChfX1VTRV9SVEMoKSkgeworCQlpbnQgZGVsdGEgPSBnZXRfcnRjbCgpIC0gdHN0YW1wOworCQlyZXR1cm4gZGVsdGE8MCA/IGRlbHRhICsgMTAwMDAwMDAwMCA6IGRlbHRhOworCX0gZWxzZSB7CisgICAgICAgIAlyZXR1cm4gZ2V0X3RibCgpIC0gdHN0YW1wOworCX0KK30KKworI2lmIDAKK2V4dGVybiBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgZ2V0X2Jpbl9ydGNsKHZvaWQpIHsKKyAgICAgIHVuc2lnbmVkIGxvbmcgcnRjbCwgcnRjdTEsIHJ0Y3UyOworICAgICAgYXNtIHZvbGF0aWxlKCJcCisxOiAgICBtZnJ0Y3UgICUwXG5cCisgICAgICBtZnJ0Y2wgICUxXG5cCisgICAgICBtZnJ0Y3UgICUyXG5cCisgICAgICBjbXB3ICAgICUwLCUyXG5cCisgICAgICBibmUtICAgIDFiXG4iCisgICAgICA6ICI9ciIgKHJ0Y3UxKSwgIj1yIiAocnRjbCksICI9ciIgKHJ0Y3UyKQorICAgICAgOiA6ICJjcjAiKTsKKyAgICAgIHJldHVybiBydGN1MioxMDAwMDAwMDAwK3J0Y2w7Cit9CisKK2V4dGVybiBfX2lubGluZV9fIHVuc2lnbmVkIGJpbmFyeV90Ymwodm9pZCkgeworICAgICAgaWYgKF9fVVNFX1JUQygpKQorICAgICAgICAgICAgICByZXR1cm4gZ2V0X2Jpbl9ydGNsKCk7CisgICAgICBlbHNlCisgICAgICAgICAgICAgIHJldHVybiBnZXRfdGJsKCk7Cit9CisjZW5kaWYKKworLyogVXNlIG11bGh3dSB0byBzY2FsZSBwcm9jZXNzb3IgdGltZWJhc2UgdG8gdGltZXZhbCAqLworLyogU3BlY2lmaWNhbGx5LCB0aGlzIGNvbXB1dGVzICh4ICogeSkgLyAyXjMyLiAgLS0gcGF1bHVzICovCisjZGVmaW5lIG11bGh3dSh4LHkpIFwKKyh7dW5zaWduZWQgejsgYXNtICgibXVsaHd1ICUwLCUxLCUyIiA6ICI9ciIgKHopIDogInIiICh4KSwgInIiICh5KSk7IHo7fSkKKwordW5zaWduZWQgbXVsaHd1X3NjYWxlX2ZhY3Rvcih1bnNpZ25lZCwgdW5zaWduZWQpOworI2VuZGlmIC8qIF9fQVNNX1RJTUVfSF9fICovCisjZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL3RpbWV4LmggYi9pbmNsdWRlL2FzbS1wcGMvdGltZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmZjODcxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjL3RpbWV4LmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLXBwYy90aW1leC5oCisgKgorICogcHBjIGFyY2hpdGVjdHVyZSB0aW1leCBzcGVjaWZpY2F0aW9ucworICovCisjaWZkZWYgX19LRVJORUxfXworI2lmbmRlZiBfQVNNcHBjX1RJTUVYX0gKKyNkZWZpbmUgX0FTTXBwY19USU1FWF9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxhc20vY3B1dGFibGUuaD4KKworI2RlZmluZSBDTE9DS19USUNLX1JBVEUJMTE5MzE4MCAvKiBVbmRlcmx5aW5nIEhaICovCisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBjeWNsZXNfdDsKKworLyoKKyAqIEZvciB0aGUgImN5Y2xlIiBjb3VudGVyIHdlIHVzZSB0aGUgdGltZWJhc2UgbG93ZXIgaGFsZi4KKyAqIEN1cnJlbnRseSBvbmx5IHVzZWQgb24gU01QLgorICovCisKK3N0YXRpYyBpbmxpbmUgY3ljbGVzX3QgZ2V0X2N5Y2xlcyh2b2lkKQoreworCWN5Y2xlc190IHJldCA9IDA7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJIjk4OgltZnRiICUwXG4iCisJCSI5OTpcbiIKKwkJIi5zZWN0aW9uIF9fZnRyX2ZpeHVwLFwiYVwiXG4iCisJCSIJLmxvbmcgJTFcbiIKKwkJIgkubG9uZyAwXG4iCisJCSIJLmxvbmcgOThiXG4iCisJCSIJLmxvbmcgOTliXG4iCisJCSIucHJldmlvdXMiCisJCTogIj1yIiAocmV0KSA6ICJpIiAoQ1BVX0ZUUl82MDEpKTsKKwlyZXR1cm4gcmV0OworfQorCisjZW5kaWYKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvdGxiLmggYi9pbmNsdWRlL2FzbS1wcGMvdGxiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMxNDJjNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYy90bGIuaApAQCAtMCwwICsxLDU3IEBACisvKgorICoJVExCIHNob290ZG93biBzcGVjaWZpY3MgZm9yIFBQQworICoKKyAqIENvcHlyaWdodCAoQykgMjAwMiBQYXVsIE1hY2tlcnJhcywgSUJNIENvcnAuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2lmbmRlZiBfUFBDX1RMQl9ICisjZGVmaW5lIF9QUENfVExCX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KKyNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9tbXUuaD4KKworI2lmZGVmIENPTkZJR19QUENfU1REX01NVQorLyogQ2xhc3NpYyBQUEMgd2l0aCBoYXNoLXRhYmxlIGJhc2VkIE1NVS4uLiAqLworCitzdHJ1Y3QgbW11X2dhdGhlcjsKK2V4dGVybiB2b2lkIHRsYl9mbHVzaChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiKTsKKworLyogR2V0IHRoZSBnZW5lcmljIGJpdHMuLi4gKi8KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy90bGIuaD4KKworLyogTm90aGluZyBuZWVkZWQgaGVyZSBpbiBmYWN0Li4uICovCisjZGVmaW5lIHRsYl9zdGFydF92bWEodGxiLCB2bWEpCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgdGxiX2VuZF92bWEodGxiLCB2bWEpCWRvIHsgfSB3aGlsZSAoMCkKKworZXh0ZXJuIHZvaWQgZmx1c2hfaGFzaF9lbnRyeShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcHRlX3QgKnB0ZXAsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3RsYl9yZW1vdmVfdGxiX2VudHJ5KHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHB0ZV90ICpwdGVwLAorCQkJCQl1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisJaWYgKHB0ZV92YWwoKnB0ZXApICYgX1BBR0VfSEFTSFBURSkKKwkJZmx1c2hfaGFzaF9lbnRyeSh0bGItPm1tLCBwdGVwLCBhZGRyZXNzKTsKK30KKworI2Vsc2UKKy8qIEVtYmVkZGVkIFBQQyB3aXRoIHNvZnR3YXJlLWxvYWRlZCBUTEIsIHZlcnkgc2ltcGxlLi4uICovCisKKyNkZWZpbmUgdGxiX3N0YXJ0X3ZtYSh0bGIsIHZtYSkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgdGxiX2VuZF92bWEodGxiLCB2bWEpCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIF9fdGxiX3JlbW92ZV90bGJfZW50cnkodGxiLCBwdGUsIGFkZHJlc3MpIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgdGxiX2ZsdXNoKHRsYikJCQlmbHVzaF90bGJfbW0oKHRsYiktPm1tKQorCisvKiBHZXQgdGhlIGdlbmVyaWMgYml0cy4uLiAqLworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3RsYi5oPgorCisjZW5kaWYgLyogQ09ORklHX1BQQ19TVERfTU1VICovCisKKyNlbmRpZiAvKiBfX1BQQ19UTEJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL3RsYmZsdXNoLmggYi9pbmNsdWRlL2FzbS1wcGMvdGxiZmx1c2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODUwZjUzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjL3RsYmZsdXNoLmgKQEAgLTAsMCArMSwxMTUgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1wcGMvdGxiZmx1c2guaAorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisjaWZkZWYgX19LRVJORUxfXworI2lmbmRlZiBfUFBDX1RMQkZMVVNIX0gKKyNkZWZpbmUgX1BQQ19UTEJGTFVTSF9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorCitleHRlcm4gdm9pZCBfdGxiaWUodW5zaWduZWQgbG9uZyBhZGRyZXNzKTsKK2V4dGVybiB2b2lkIF90bGJpYSh2b2lkKTsKKworI2lmIGRlZmluZWQoQ09ORklHXzR4eCkKKworI2lmbmRlZiBDT05GSUdfNDR4CisjZGVmaW5lIF9fdGxiaWEoKQlhc20gdm9sYXRpbGUgKCJzeW5jOyB0bGJpYTsgaXN5bmMiIDogOiA6ICJtZW1vcnkiKQorI2Vsc2UKKyNkZWZpbmUgX190bGJpYQkJX3RsYmlhCisjZW5kaWYKKworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKKwl7IF9fdGxiaWEoKTsgfQorc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJCXVuc2lnbmVkIGxvbmcgdm1hZGRyKQorCXsgX3RsYmllKHZtYWRkcik7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfcGFnZV9ub2hhc2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQkJCSB1bnNpZ25lZCBsb25nIHZtYWRkcikKKwl7IF90bGJpZSh2bWFkZHIpOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJCXVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQorCXsgX190bGJpYSgpOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX2tlcm5lbF9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQkJCXVuc2lnbmVkIGxvbmcgZW5kKQorCXsgX190bGJpYSgpOyB9CisKKyNlbGlmIGRlZmluZWQoQ09ORklHX0ZTTF9CT09LRSkKKworLyogVE9ETzogZGV0ZXJtaW5lIGlmIGZsdXNoX3RsYl9yYW5nZSAmIGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2UKKyAqIGFyZSBiZXN0IGltcGxlbWVudGVkIGFzIHRsYmlhIHZzIHNwZWNpZmljIHRsYmllJ3MgKi8KKworI2RlZmluZSBfX3RsYmlhKCkJX3RsYmlhKCkKKworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKKwl7IF9fdGxiaWEoKTsgfQorc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJCXVuc2lnbmVkIGxvbmcgdm1hZGRyKQorCXsgX3RsYmllKHZtYWRkcik7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfcGFnZV9ub2hhc2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQkJCSB1bnNpZ25lZCBsb25nIHZtYWRkcikKKwl7IF90bGJpZSh2bWFkZHIpOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJCXVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQorCXsgX190bGJpYSgpOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX2tlcm5lbF9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQkJCXVuc2lnbmVkIGxvbmcgZW5kKQorCXsgX190bGJpYSgpOyB9CisKKyNlbGlmIGRlZmluZWQoQ09ORklHXzh4eCkKKyNkZWZpbmUgX190bGJpYSgpCWFzbSB2b2xhdGlsZSAoInRsYmlhOyBzeW5jIiA6IDogOiAibWVtb3J5IikKKworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKKwl7IF9fdGxiaWEoKTsgfQorc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJCXVuc2lnbmVkIGxvbmcgdm1hZGRyKQorCXsgX3RsYmllKHZtYWRkcik7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfcGFnZV9ub2hhc2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQkJCSB1bnNpZ25lZCBsb25nIHZtYWRkcikKKwl7IF90bGJpZSh2bWFkZHIpOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJCXVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQorCXsgX190bGJpYSgpOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX2tlcm5lbF9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQkJCXVuc2lnbmVkIGxvbmcgZW5kKQorCXsgX190bGJpYSgpOyB9CisKKyNlbHNlCS8qIDZ4eCwgN3h4LCA3eHh4IGNwdXMgKi8KK3N0cnVjdCBtbV9zdHJ1Y3Q7CitzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Q7CitleHRlcm4gdm9pZCBmbHVzaF90bGJfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pOworZXh0ZXJuIHZvaWQgZmx1c2hfdGxiX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgdm1hZGRyKTsKK2V4dGVybiB2b2lkIGZsdXNoX3RsYl9wYWdlX25vaGFzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKTsKK2V4dGVybiB2b2lkIGZsdXNoX3RsYl9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCwKKwkJCSAgICB1bnNpZ25lZCBsb25nIGVuZCk7CitleHRlcm4gdm9pZCBmbHVzaF90bGJfa2VybmVsX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTsKKyNlbmRpZgorCisvKgorICogVGhpcyBpcyBjYWxsZWQgaW4gbXVubWFwIHdoZW4gd2UgaGF2ZSBmcmVlZCB1cCBzb21lIHBhZ2UtdGFibGUKKyAqIHBhZ2VzLiAgV2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZyBoZXJlLCB0aGVyZSdzIG5vdGhpbmcgc3BlY2lhbAorICogYWJvdXQgb3VyIHBhZ2UtdGFibGUgcGFnZXMuICAtLSBwYXVsdXMKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9wZ3RhYmxlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKK30KKworLyoKKyAqIFRoaXMgZ2V0cyBjYWxsZWQgYXQgdGhlIGVuZCBvZiBoYW5kbGluZyBhIHBhZ2UgZmF1bHQsIHdoZW4KKyAqIHRoZSBrZXJuZWwgaGFzIHB1dCBhIG5ldyBQVEUgaW50byB0aGUgcGFnZSB0YWJsZSBmb3IgdGhlIHByb2Nlc3MuCisgKiBXZSB1c2UgaXQgdG8gZW5zdXJlIGNvaGVyZW5jeSBiZXR3ZWVuIHRoZSBpLWNhY2hlIGFuZCBkLWNhY2hlCisgKiBmb3IgdGhlIHBhZ2Ugd2hpY2ggaGFzIGp1c3QgYmVlbiBtYXBwZWQgaW4uCisgKiBPbiBtYWNoaW5lcyB3aGljaCB1c2UgYW4gTU1VIGhhc2ggdGFibGUsIHdlIHVzZSB0aGlzIHRvIHB1dCBhCisgKiBjb3JyZXNwb25kaW5nIEhQVEUgaW50byB0aGUgaGFzaCB0YWJsZSBhaGVhZCBvZiB0aW1lLCBpbnN0ZWFkIG9mCisgKiB3YWl0aW5nIGZvciB0aGUgaW5ldml0YWJsZSBleHRyYSBoYXNoLXRhYmxlIG1pc3MgZXhjZXB0aW9uLgorICovCitleHRlcm4gdm9pZCB1cGRhdGVfbW11X2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nLCBwdGVfdCk7CisKKyNlbmRpZiAvKiBfUFBDX1RMQkZMVVNIX0ggKi8KKyNlbmRpZiAvKl9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy90b2RjLmggYi9pbmNsdWRlL2FzbS1wcGMvdG9kYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0YmFlN2QKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGMvdG9kYy5oCkBAIC0wLDAgKzEsNDkwIEBACisvKgorICogaW5jbHVkZS9hc20tcHBjL3RvZGMuaAorICoKKyAqIERlZmluaXRpb25zIGZvciB0aGUgTTQ4VHh4IGFuZCBtYzE0NjgxOCBzZXJpZXMgb2YgVGltZSBvZiBkYXkvUmVhbCBUaW1lCisgKiBDbG9jayBjaGlwcy4KKyAqCisgKiBBdXRob3I6IE1hcmsgQS4gR3JlZXIKKyAqICAgICAgICAgbWdyZWVyQG12aXN0YS5jb20KKyAqCisgKiAyMDAxIChjKSBNb250YVZpc3RhLCBTb2Z0d2FyZSwgSW5jLiAgVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbQorICogaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzCisgKiBvciBpbXBsaWVkLgorICovCisKKy8qCisgKiBTdXBwb3J0IGZvciB0aGUgTTQ4VDM3L000OFQ1OS8uLi4vbWMxNDY4MTggUmVhbCBUaW1lIENsb2NrIGNoaXBzLgorICogUHVycG9zZSBpcyB0byBtYWtlIG9uZSBnZW5lcmljIGZpbGUgdGhhdCBoYW5kbGVzIGFsbCBvZiB0aGVzZSBjaGlwcyBpbnN0ZWFkCisgKiBvZiBldmVyeSBwbGF0Zm9ybSBpbXBsZW1lbnRpbmcgdGhlIHNhbWUgY29kZSBvdmVyICYgb3ZlciBhZ2Fpbi4KKyAqLworCisjaWZuZGVmIF9fUFBDX0tFUk5FTF9UT0RDX0gKKyNkZWZpbmUgX19QUENfS0VSTkVMX1RPRENfSAorCit0eXBlZGVmIHN0cnVjdCB7CisJdWludCBydGNfdHlwZTsJCS8qIHlvdXIgcGFydGljdWxhciBjaGlwICovCisKKwkvKgorCSAqIEZvbGxvd2luZyBhcmUgdGhlIGFkZHJlc3NlcyBvZiB0aGUgQVMwLCBBUzEsIGFuZCBEQVRBIHJlZ2lzdGVycworCSAqIG9mIHRoZXNlIGNoaXBzLiAgTm90ZSB0aGF0IHRoZXNlIGFyZSBib2FyZC1zcGVjaWZpYy4KKwkgKi8KKwl1bnNpZ25lZCBpbnQgbnZyYW1fYXMwOworCXVuc2lnbmVkIGludCBudnJhbV9hczE7CisJdW5zaWduZWQgaW50IG52cmFtX2RhdGE7CisKKwkvKgorCSAqIERlZmluZSBiaXRzIHRvIHN0b3AgZXh0ZXJuYWwgc2V0IG9mIHJlZ3MgZnJvbSBjaGFuZ2luZyBzbworCSAqIHRoZSBjaGlwIGNhbiBiZSByZWFkL3dyaXR0ZW4gcmVsaWFibHkuCisJICovCisJdW5zaWduZWQgY2hhciBlbmFibGVfcmVhZDsKKwl1bnNpZ25lZCBjaGFyIGVuYWJsZV93cml0ZTsKKworCS8qCisJICogRm9sbG93aW5nIGlzIHRoZSBudW1iZXIgb2YgQVMwIGFkZHJlc3MgYml0cy4gIFRoaXMgaXMgbm9ybWFsbHkKKwkgKiA4IGJ1dCBzb21lIGJhZCBoYXJkd2FyZSByb3V0ZXMgYWRkcmVzcyBsaW5lcyBpbmNvcnJlY3RseS4KKwkgKi8KKwlpbnQgYXMwX2JpdHM7CisKKwlpbnQgbnZyYW1fc2l6ZTsJLyogU2l6ZSBvZiBOVlJBTSBvbiBjaGlwICovCisJaW50IHN3X2ZsYWdzOwkvKiBTb2Z0d2FyZSBjb250cm9sIGZsYWdzICovCisKKwkvKiBGb2xsb3dpbmcgYXJlIHRoZSByZWdpc3RlciBvZmZzZXRzIGZvciB0aGUgcGFydGljdWxhciBjaGlwICovCisJaW50IHllYXI7CisJaW50IG1vbnRoOworCWludCBkYXlfb2ZfbW9udGg7CisJaW50IGRheV9vZl93ZWVrOworCWludCBob3VyczsKKwlpbnQgbWludXRlczsKKwlpbnQgc2Vjb25kczsKKwlpbnQgY29udHJvbF9iOworCWludCBjb250cm9sX2E7CisJaW50IHdhdGNoZG9nOworCWludCBpbnRlcnJ1cHRzOworCWludCBhbGFybV9kYXRlOworCWludCBhbGFybV9ob3VyOworCWludCBhbGFybV9taW51dGVzOworCWludCBhbGFybV9zZWNvbmRzOworCWludCBjZW50dXJ5OworCWludCBmbGFnczsKKworCS8qCisJICogU29tZSBSVEMgY2hpcHMgaGF2ZSB0aGVpciBOVlJBTSBidXJpZWQgYmVoaW5kIGEgYWRkci9kYXRhIHBhaXIgb2YKKwkgKiByZWdzIG9uIHRoZSBmaXJzdCBsZXZlbC9jbG9jayByZWdpc3RlcnMuICBUaGUgZm9sbG93aW5nIGZpZWxkcworCSAqIGFyZSB0aGUgYWRkcmVzc2VzIGZvciB0aG9zZSBhZGRyL2RhdGEgcmVncy4KKwkgKi8KKwlpbnQgbnZyYW1fYWRkcl9yZWc7CisJaW50IG52cmFtX2RhdGFfcmVnOworfSB0b2RjX2luZm9fdDsKKworLyoKKyAqIERlZmluZSB0aGUgdHlwZXMgb2YgVE9EQy9SVEMgdmFyaWFudHMgdGhhdCBhcmUgc3VwcG9ydGVkIGluCisgKiBhcmNoL3BwYy9rZXJuZWwvdG9kY190aW1lLmMKKyAqIE1ha2UgYSBuZXcgb25lIG9mIHRoZXNlIGZvciBhbnkgY2hpcCBzb21laG93IGRpZmZlcnMgZnJvbSB3aGF0J3MgYWxyZWFkeQorICogZGVmaW5lZC4gIFRoYXQgd2F5LCBpZiB5b3UgZXZlciBuZWVkIHRvIHB1dCBpbiBjb2RlIHRvIHRvdWNoIHRob3NlCisgKiBiaXRzL3JlZ2lzdGVycyBpbiB0b2RjX3RpbWUuYywgeW91IGNhbiBwdXQgaXQgaW5zaWRlIGFuCisgKiAnaWYgKHRvZGNfaW5mby0+cnRjX3R5cGUgPT0gIFRPRENfVFlQRV9YWFgpJyBzbyB5b3Ugd29uJ3QgYnJlYWsKKyAqIGFueW9uZSBlbHNlLgorICovCisjZGVmaW5lCVRPRENfVFlQRV9NSzQ4VDM1CQkxCisjZGVmaW5lCVRPRENfVFlQRV9NSzQ4VDM3CQkyCisjZGVmaW5lCVRPRENfVFlQRV9NSzQ4VDU5CQkzCisjZGVmaW5lCVRPRENfVFlQRV9EUzE2OTMJCTQJLyogRGFsbGFzIERTMTY5MyBSVEMgKi8KKyNkZWZpbmUJVE9EQ19UWVBFX0RTMTc0MwkJNQkvKiBEYWxsYXMgRFMxNzQzIFJUQyAqLworI2RlZmluZQlUT0RDX1RZUEVfRFMxNzQ2CQk2CS8qIERhbGxhcyBEUzE3NDYgUlRDICovCisjZGVmaW5lCVRPRENfVFlQRV9EUzE3NDcJCTcJLyogRGFsbGFzIERTMTc0NyBSVEMgKi8KKyNkZWZpbmUJVE9EQ19UWVBFX0RTMTUwMQkJOAkvKiBEYWxsYXMgRFMxNTAxIFJUQyAqLworI2RlZmluZSBUT0RDX1RZUEVfRFMxNjQzCQk5CS8qIERhbGxhcyBEUzE2NDMgUlRDICovCisjZGVmaW5lIFRPRENfVFlQRV9QQzk3MzA3CQkxMAkvKiBQQzk3MzA3IGludGVybmFsIFJUQyAqLworI2RlZmluZSBUT0RDX1RZUEVfRFMxNTU3CQkxMQkvKiBEYWxsYXMgRFMxNTU3IFJUQyAqLworI2RlZmluZSBUT0RDX1RZUEVfRFMxNzI4NQkJMTIJLyogRGFsbGFzIERTMTcyODUgUlRDICovCisjZGVmaW5lIFRPRENfVFlQRV9EUzE1NTMJCTEzCS8qIERhbGxhcyBEUzE1NTMgUlRDICovCisjZGVmaW5lCVRPRENfVFlQRV9NQzE0NjgxOAkJMTAwCS8qIExlYXZlIHJvb20gZm9yIG00OHR4eCdzICovCisKKy8qCisgKiBCaXQgdG8gY2xlYXIvc2V0IHRvIGVuYWJsZSByZWFkcy93cml0ZXMgdG8gdGhlIGNoaXAKKyAqLworI2RlZmluZQlUT0RDX01LNDhUWFhfQ05UTF9BX1IJCTB4NDAKKyNkZWZpbmUJVE9EQ19NSzQ4VFhYX0NOVExfQV9XCQkweDgwCisjZGVmaW5lCVRPRENfTUs0OFRYWF9EQVlfQ0IJCTB4ODAKKworI2RlZmluZQlUT0RDX0RTMTUwMV9DTlRMX0JfVEUJCTB4ODAKKworLyoKKyAqIERlZmluZSBmbGFnIGJpdHMgdXNlZCBieSB0b2RjIHJvdXRpbmVzLgorICovCisjZGVmaW5lCVRPRENfRkxBR18yX0xFVkVMX05WUkFNCQkweDAwMDAwMDAxCisKKy8qCisgKiBEZWZpbmUgdGhlIHZhbHVlcyBmb3IgdGhlIHZhcmlvdXMgUlRDJ3MgdGhhdCBzaG91bGQgdG8gaW50byB0aGUgdG9kY19pbmZvCisgKiB0YWJsZS4KKyAqIE5vdGU6IFRoZSBYWFhfTlZSQU1fU0laRSwgWFhYX05WUkFNX0FERFJfUkVHLCBhbmQgWFhYX05WUkFNX0RBVEFfUkVHIG9ubHkKKyAqIG1hdHRlciBpZiBYWFhfU1dfRkxBR1MgaGFzIFRPRENfRkxBR18yX0xFVkVMX05WUkFNIHNldC4KKyAqLworI2RlZmluZQlUT0RDX1RZUEVfTUs0OFQzNV9OVlJBTV9TSVpFCQkweDdmZjgKKyNkZWZpbmUJVE9EQ19UWVBFX01LNDhUMzVfU1dfRkxBR1MJCTAKKyNkZWZpbmUJVE9EQ19UWVBFX01LNDhUMzVfWUVBUgkJCTB4N2ZmZgorI2RlZmluZQlUT0RDX1RZUEVfTUs0OFQzNV9NT05USAkJCTB4N2ZmZQorI2RlZmluZQlUT0RDX1RZUEVfTUs0OFQzNV9ET00JCQkweDdmZmQJLyogRGF5IG9mIE1vbnRoICovCisjZGVmaW5lCVRPRENfVFlQRV9NSzQ4VDM1X0RPVwkJCTB4N2ZmYwkvKiBEYXkgb2YgV2VlayAqLworI2RlZmluZQlUT0RDX1RZUEVfTUs0OFQzNV9IT1VSUwkJCTB4N2ZmYgorI2RlZmluZQlUT0RDX1RZUEVfTUs0OFQzNV9NSU5VVEVTCQkweDdmZmEKKyNkZWZpbmUJVE9EQ19UWVBFX01LNDhUMzVfU0VDT05EUwkJMHg3ZmY5CisjZGVmaW5lCVRPRENfVFlQRV9NSzQ4VDM1X0NOVExfQgkJMHg3ZmY5CisjZGVmaW5lCVRPRENfVFlQRV9NSzQ4VDM1X0NOVExfQQkJMHg3ZmY4CisjZGVmaW5lCVRPRENfVFlQRV9NSzQ4VDM1X1dBVENIRE9HCQkweDAwMDAKKyNkZWZpbmUJVE9EQ19UWVBFX01LNDhUMzVfSU5URVJSVVBUUwkJMHgwMDAwCisjZGVmaW5lCVRPRENfVFlQRV9NSzQ4VDM1X0FMQVJNX0RBVEUJCTB4MDAwMAorI2RlZmluZQlUT0RDX1RZUEVfTUs0OFQzNV9BTEFSTV9IT1VSCQkweDAwMDAKKyNkZWZpbmUJVE9EQ19UWVBFX01LNDhUMzVfQUxBUk1fTUlOVVRFUwkJMHgwMDAwCisjZGVmaW5lCVRPRENfVFlQRV9NSzQ4VDM1X0FMQVJNX1NFQ09ORFMJCTB4MDAwMAorI2RlZmluZQlUT0RDX1RZUEVfTUs0OFQzNV9DRU5UVVJZCQkweDAwMDAKKyNkZWZpbmUJVE9EQ19UWVBFX01LNDhUMzVfRkxBR1MJCQkweDAwMDAKKyNkZWZpbmUJVE9EQ19UWVBFX01LNDhUMzVfTlZSQU1fQUREUl9SRUcJMAorI2RlZmluZQlUT0RDX1RZUEVfTUs0OFQzNV9OVlJBTV9EQVRBX1JFRwkwCisKKyNkZWZpbmUJVE9EQ19UWVBFX01LNDhUMzdfTlZSQU1fU0laRQkJMHg3ZmYwCisjZGVmaW5lCVRPRENfVFlQRV9NSzQ4VDM3X1NXX0ZMQUdTCQkwCisjZGVmaW5lCVRPRENfVFlQRV9NSzQ4VDM3X1lFQVIJCQkweDdmZmYKKyNkZWZpbmUJVE9EQ19UWVBFX01LNDhUMzdfTU9OVEgJCQkweDdmZmUKKyNkZWZpbmUJVE9EQ19UWVBFX01LNDhUMzdfRE9NCQkJMHg3ZmZkCS8qIERheSBvZiBNb250aCAqLworI2RlZmluZQlUT0RDX1RZUEVfTUs0OFQzN19ET1cJCQkweDdmZmMJLyogRGF5IG9mIFdlZWsgKi8KKyNkZWZpbmUJVE9EQ19UWVBFX01LNDhUMzdfSE9VUlMJCQkweDdmZmIKKyNkZWZpbmUJVE9EQ19UWVBFX01LNDhUMzdfTUlOVVRFUwkJMHg3ZmZhCisjZGVmaW5lCVRPRENfVFlQRV9NSzQ4VDM3X1NFQ09ORFMJCTB4N2ZmOQorI2RlZmluZQlUT0RDX1RZUEVfTUs0OFQzN19DTlRMX0IJCTB4N2ZmOQorI2RlZmluZQlUT0RDX1RZUEVfTUs0OFQzN19DTlRMX0EJCTB4N2ZmOAorI2RlZmluZQlUT0RDX1RZUEVfTUs0OFQzN19XQVRDSERPRwkJMHg3ZmY3CisjZGVmaW5lCVRPRENfVFlQRV9NSzQ4VDM3X0lOVEVSUlVQVFMJCTB4N2ZmNgorI2RlZmluZQlUT0RDX1RZUEVfTUs0OFQzN19BTEFSTV9EQVRFCQkweDdmZjUKKyNkZWZpbmUJVE9EQ19UWVBFX01LNDhUMzdfQUxBUk1fSE9VUgkJMHg3ZmY0CisjZGVmaW5lCVRPRENfVFlQRV9NSzQ4VDM3X0FMQVJNX01JTlVURVMJCTB4N2ZmMworI2RlZmluZQlUT0RDX1RZUEVfTUs0OFQzN19BTEFSTV9TRUNPTkRTCQkweDdmZjIKKyNkZWZpbmUJVE9EQ19UWVBFX01LNDhUMzdfQ0VOVFVSWQkJMHg3ZmYxCisjZGVmaW5lCVRPRENfVFlQRV9NSzQ4VDM3X0ZMQUdTCQkJMHg3ZmYwCisjZGVmaW5lCVRPRENfVFlQRV9NSzQ4VDM3X05WUkFNX0FERFJfUkVHCTAKKyNkZWZpbmUJVE9EQ19UWVBFX01LNDhUMzdfTlZSQU1fREFUQV9SRUcJMAorCisjZGVmaW5lCVRPRENfVFlQRV9NSzQ4VDU5X05WUkFNX1NJWkUJCTB4MWZmMAorI2RlZmluZQlUT0RDX1RZUEVfTUs0OFQ1OV9TV19GTEFHUwkJMAorI2RlZmluZQlUT0RDX1RZUEVfTUs0OFQ1OV9ZRUFSCQkJMHgxZmZmCisjZGVmaW5lCVRPRENfVFlQRV9NSzQ4VDU5X01PTlRICQkJMHgxZmZlCisjZGVmaW5lCVRPRENfVFlQRV9NSzQ4VDU5X0RPTQkJCTB4MWZmZAkvKiBEYXkgb2YgTW9udGggKi8KKyNkZWZpbmUJVE9EQ19UWVBFX01LNDhUNTlfRE9XCQkJMHgxZmZjCS8qIERheSBvZiBXZWVrICovCisjZGVmaW5lCVRPRENfVFlQRV9NSzQ4VDU5X0hPVVJTCQkJMHgxZmZiCisjZGVmaW5lCVRPRENfVFlQRV9NSzQ4VDU5X01JTlVURVMJCTB4MWZmYQorI2RlZmluZQlUT0RDX1RZUEVfTUs0OFQ1OV9TRUNPTkRTCQkweDFmZjkKKyNkZWZpbmUJVE9EQ19UWVBFX01LNDhUNTlfQ05UTF9CCQkweDFmZjkKKyNkZWZpbmUJVE9EQ19UWVBFX01LNDhUNTlfQ05UTF9BCQkweDFmZjgKKyNkZWZpbmUJVE9EQ19UWVBFX01LNDhUNTlfV0FUQ0hET0cJCTB4MWZmZgorI2RlZmluZQlUT0RDX1RZUEVfTUs0OFQ1OV9JTlRFUlJVUFRTCQkweDFmZmYKKyNkZWZpbmUJVE9EQ19UWVBFX01LNDhUNTlfQUxBUk1fREFURQkJMHgxZmZmCisjZGVmaW5lCVRPRENfVFlQRV9NSzQ4VDU5X0FMQVJNX0hPVVIJCTB4MWZmZgorI2RlZmluZQlUT0RDX1RZUEVfTUs0OFQ1OV9BTEFSTV9NSU5VVEVTCQkweDFmZmYKKyNkZWZpbmUJVE9EQ19UWVBFX01LNDhUNTlfQUxBUk1fU0VDT05EUwkJMHgxZmZmCisjZGVmaW5lCVRPRENfVFlQRV9NSzQ4VDU5X0NFTlRVUlkJCTB4MWZmZgorI2RlZmluZQlUT0RDX1RZUEVfTUs0OFQ1OV9GTEFHUwkJCTB4MWZmZgorI2RlZmluZQlUT0RDX1RZUEVfTUs0OFQ1OV9OVlJBTV9BRERSX1JFRwkwCisjZGVmaW5lCVRPRENfVFlQRV9NSzQ4VDU5X05WUkFNX0RBVEFfUkVHCTAKKworI2RlZmluZQlUT0RDX1RZUEVfRFMxNTAxX05WUkFNX1NJWkUJMHgxMDAKKyNkZWZpbmUJVE9EQ19UWVBFX0RTMTUwMV9TV19GTEFHUwlUT0RDX0ZMQUdfMl9MRVZFTF9OVlJBTQorI2RlZmluZQlUT0RDX1RZUEVfRFMxNTAxX1lFQVIJCShUT0RDX1RZUEVfRFMxNTAxX05WUkFNX1NJWkUgKyAweDA2KQorI2RlZmluZQlUT0RDX1RZUEVfRFMxNTAxX01PTlRICQkoVE9EQ19UWVBFX0RTMTUwMV9OVlJBTV9TSVpFICsgMHgwNSkKKyNkZWZpbmUJVE9EQ19UWVBFX0RTMTUwMV9ET00JCShUT0RDX1RZUEVfRFMxNTAxX05WUkFNX1NJWkUgKyAweDA0KQorI2RlZmluZQlUT0RDX1RZUEVfRFMxNTAxX0RPVwkJKFRPRENfVFlQRV9EUzE1MDFfTlZSQU1fU0laRSArIDB4MDMpCisjZGVmaW5lCVRPRENfVFlQRV9EUzE1MDFfSE9VUlMJCShUT0RDX1RZUEVfRFMxNTAxX05WUkFNX1NJWkUgKyAweDAyKQorI2RlZmluZQlUT0RDX1RZUEVfRFMxNTAxX01JTlVURVMJKFRPRENfVFlQRV9EUzE1MDFfTlZSQU1fU0laRSArIDB4MDEpCisjZGVmaW5lCVRPRENfVFlQRV9EUzE1MDFfU0VDT05EUwkoVE9EQ19UWVBFX0RTMTUwMV9OVlJBTV9TSVpFICsgMHgwMCkKKyNkZWZpbmUJVE9EQ19UWVBFX0RTMTUwMV9DTlRMX0IJCShUT0RDX1RZUEVfRFMxNTAxX05WUkFNX1NJWkUgKyAweDBmKQorI2RlZmluZQlUT0RDX1RZUEVfRFMxNTAxX0NOVExfQQkJKFRPRENfVFlQRV9EUzE1MDFfTlZSQU1fU0laRSArIDB4MGYpCisjZGVmaW5lCVRPRENfVFlQRV9EUzE1MDFfV0FUQ0hET0cJKFRPRENfVFlQRV9EUzE1MDFfTlZSQU1fU0laRSArIDB4ZmYpCisjZGVmaW5lCVRPRENfVFlQRV9EUzE1MDFfSU5URVJSVVBUUwkoVE9EQ19UWVBFX0RTMTUwMV9OVlJBTV9TSVpFICsgMHhmZikKKyNkZWZpbmUJVE9EQ19UWVBFX0RTMTUwMV9BTEFSTV9EQVRFCShUT0RDX1RZUEVfRFMxNTAxX05WUkFNX1NJWkUgKyAweDBiKQorI2RlZmluZQlUT0RDX1RZUEVfRFMxNTAxX0FMQVJNX0hPVVIJKFRPRENfVFlQRV9EUzE1MDFfTlZSQU1fU0laRSArIDB4MGEpCisjZGVmaW5lCVRPRENfVFlQRV9EUzE1MDFfQUxBUk1fTUlOVVRFUwkoVE9EQ19UWVBFX0RTMTUwMV9OVlJBTV9TSVpFICsgMHgwOSkKKyNkZWZpbmUJVE9EQ19UWVBFX0RTMTUwMV9BTEFSTV9TRUNPTkRTCShUT0RDX1RZUEVfRFMxNTAxX05WUkFNX1NJWkUgKyAweDA4KQorI2RlZmluZQlUT0RDX1RZUEVfRFMxNTAxX0NFTlRVUlkJKFRPRENfVFlQRV9EUzE1MDFfTlZSQU1fU0laRSArIDB4MDcpCisjZGVmaW5lCVRPRENfVFlQRV9EUzE1MDFfRkxBR1MJCShUT0RDX1RZUEVfRFMxNTAxX05WUkFNX1NJWkUgKyAweGZmKQorI2RlZmluZQlUT0RDX1RZUEVfRFMxNTAxX05WUkFNX0FERFJfUkVHCTB4MTAKKyNkZWZpbmUJVE9EQ19UWVBFX0RTMTUwMV9OVlJBTV9EQVRBX1JFRwkweDEzCisKKyNkZWZpbmUJVE9EQ19UWVBFX0RTMTU1M19OVlJBTV9TSVpFCQkweDFmZjAKKyNkZWZpbmUJVE9EQ19UWVBFX0RTMTU1M19TV19GTEFHUwkJMAorI2RlZmluZQlUT0RDX1RZUEVfRFMxNTUzX1lFQVIJCQkweDFmZmYKKyNkZWZpbmUJVE9EQ19UWVBFX0RTMTU1M19NT05USAkJCTB4MWZmZQorI2RlZmluZQlUT0RDX1RZUEVfRFMxNTUzX0RPTQkJCTB4MWZmZAkvKiBEYXkgb2YgTW9udGggKi8KKyNkZWZpbmUJVE9EQ19UWVBFX0RTMTU1M19ET1cJCQkweDFmZmMJLyogRGF5IG9mIFdlZWsgKi8KKyNkZWZpbmUJVE9EQ19UWVBFX0RTMTU1M19IT1VSUwkJCTB4MWZmYgorI2RlZmluZQlUT0RDX1RZUEVfRFMxNTUzX01JTlVURVMJCTB4MWZmYQorI2RlZmluZQlUT0RDX1RZUEVfRFMxNTUzX1NFQ09ORFMJCTB4MWZmOQorI2RlZmluZQlUT0RDX1RZUEVfRFMxNTUzX0NOVExfQgkJCTB4MWZmOQorI2RlZmluZQlUT0RDX1RZUEVfRFMxNTUzX0NOVExfQQkJCTB4MWZmOAkvKiBjb250cm9sX2EgUi9XIHJlZ3MgKi8KKyNkZWZpbmUJVE9EQ19UWVBFX0RTMTU1M19XQVRDSERPRwkJMHgxZmY3CisjZGVmaW5lCVRPRENfVFlQRV9EUzE1NTNfSU5URVJSVVBUUwkJMHgxZmY2CisjZGVmaW5lCVRPRENfVFlQRV9EUzE1NTNfQUxBUk1fREFURQkJMHgxZmY1CisjZGVmaW5lCVRPRENfVFlQRV9EUzE1NTNfQUxBUk1fSE9VUgkJMHgxZmY0CisjZGVmaW5lCVRPRENfVFlQRV9EUzE1NTNfQUxBUk1fTUlOVVRFUwkJMHgxZmYzCisjZGVmaW5lCVRPRENfVFlQRV9EUzE1NTNfQUxBUk1fU0VDT05EUwkJMHgxZmYyCisjZGVmaW5lCVRPRENfVFlQRV9EUzE1NTNfQ0VOVFVSWQkJMHgxZmY4CisjZGVmaW5lCVRPRENfVFlQRV9EUzE1NTNfRkxBR1MJCQkweDFmZjAKKyNkZWZpbmUJVE9EQ19UWVBFX0RTMTU1M19OVlJBTV9BRERSX1JFRwkJMAorI2RlZmluZQlUT0RDX1RZUEVfRFMxNTUzX05WUkFNX0RBVEFfUkVHCQkwCisKKyNkZWZpbmUJVE9EQ19UWVBFX0RTMTU1N19OVlJBTV9TSVpFCQkweDdmZmYwCisjZGVmaW5lCVRPRENfVFlQRV9EUzE1NTdfU1dfRkxBR1MJCTAKKyNkZWZpbmUJVE9EQ19UWVBFX0RTMTU1N19ZRUFSCQkJMHg3ZmZmZgorI2RlZmluZQlUT0RDX1RZUEVfRFMxNTU3X01PTlRICQkJMHg3ZmZmZQorI2RlZmluZQlUT0RDX1RZUEVfRFMxNTU3X0RPTQkJCTB4N2ZmZmQJLyogRGF5IG9mIE1vbnRoICovCisjZGVmaW5lCVRPRENfVFlQRV9EUzE1NTdfRE9XCQkJMHg3ZmZmYwkvKiBEYXkgb2YgV2VlayAqLworI2RlZmluZQlUT0RDX1RZUEVfRFMxNTU3X0hPVVJTCQkJMHg3ZmZmYgorI2RlZmluZQlUT0RDX1RZUEVfRFMxNTU3X01JTlVURVMJCTB4N2ZmZmEKKyNkZWZpbmUJVE9EQ19UWVBFX0RTMTU1N19TRUNPTkRTCQkweDdmZmY5CisjZGVmaW5lCVRPRENfVFlQRV9EUzE1NTdfQ05UTF9CCQkJMHg3ZmZmOQorI2RlZmluZQlUT0RDX1RZUEVfRFMxNTU3X0NOVExfQQkJCTB4N2ZmZjgJLyogY29udHJvbF9hIFIvVyByZWdzICovCisjZGVmaW5lCVRPRENfVFlQRV9EUzE1NTdfV0FUQ0hET0cJCTB4N2ZmZjcKKyNkZWZpbmUJVE9EQ19UWVBFX0RTMTU1N19JTlRFUlJVUFRTCQkweDdmZmY2CisjZGVmaW5lCVRPRENfVFlQRV9EUzE1NTdfQUxBUk1fREFURQkJMHg3ZmZmNQorI2RlZmluZQlUT0RDX1RZUEVfRFMxNTU3X0FMQVJNX0hPVVIJCTB4N2ZmZjQKKyNkZWZpbmUJVE9EQ19UWVBFX0RTMTU1N19BTEFSTV9NSU5VVEVTCQkweDdmZmYzCisjZGVmaW5lCVRPRENfVFlQRV9EUzE1NTdfQUxBUk1fU0VDT05EUwkJMHg3ZmZmMgorI2RlZmluZQlUT0RDX1RZUEVfRFMxNTU3X0NFTlRVUlkJCTB4N2ZmZjgKKyNkZWZpbmUJVE9EQ19UWVBFX0RTMTU1N19GTEFHUwkJCTB4N2ZmZjAKKyNkZWZpbmUJVE9EQ19UWVBFX0RTMTU1N19OVlJBTV9BRERSX1JFRwkJMAorI2RlZmluZQlUT0RDX1RZUEVfRFMxNTU3X05WUkFNX0RBVEFfUkVHCQkwCisKKyNkZWZpbmUJVE9EQ19UWVBFX0RTMTY0M19OVlJBTV9TSVpFCQkweDFmZjgKKyNkZWZpbmUJVE9EQ19UWVBFX0RTMTY0M19TV19GTEFHUwkJMAorI2RlZmluZQlUT0RDX1RZUEVfRFMxNjQzX1lFQVIJCQkweDFmZmYKKyNkZWZpbmUJVE9EQ19UWVBFX0RTMTY0M19NT05USAkJCTB4MWZmZQorI2RlZmluZQlUT0RDX1RZUEVfRFMxNjQzX0RPTQkJCTB4MWZmZAkvKiBEYXkgb2YgTW9udGggKi8KKyNkZWZpbmUJVE9EQ19UWVBFX0RTMTY0M19ET1cJCQkweDFmZmMJLyogRGF5IG9mIFdlZWsgKi8KKyNkZWZpbmUJVE9EQ19UWVBFX0RTMTY0M19IT1VSUwkJCTB4MWZmYgorI2RlZmluZQlUT0RDX1RZUEVfRFMxNjQzX01JTlVURVMJCTB4MWZmYQorI2RlZmluZQlUT0RDX1RZUEVfRFMxNjQzX1NFQ09ORFMJCTB4MWZmOQorI2RlZmluZQlUT0RDX1RZUEVfRFMxNjQzX0NOVExfQgkJCTB4MWZmOQorI2RlZmluZQlUT0RDX1RZUEVfRFMxNjQzX0NOVExfQQkJCTB4MWZmOAkvKiBjb250cm9sX2EgUi9XIHJlZ3MgKi8KKyNkZWZpbmUJVE9EQ19UWVBFX0RTMTY0M19XQVRDSERPRwkJMHgxZmZmCisjZGVmaW5lCVRPRENfVFlQRV9EUzE2NDNfSU5URVJSVVBUUwkJMHgxZmZmCisjZGVmaW5lCVRPRENfVFlQRV9EUzE2NDNfQUxBUk1fREFURQkJMHgxZmZmCisjZGVmaW5lCVRPRENfVFlQRV9EUzE2NDNfQUxBUk1fSE9VUgkJMHgxZmZmCisjZGVmaW5lCVRPRENfVFlQRV9EUzE2NDNfQUxBUk1fTUlOVVRFUwkJMHgxZmZmCisjZGVmaW5lCVRPRENfVFlQRV9EUzE2NDNfQUxBUk1fU0VDT05EUwkJMHgxZmZmCisjZGVmaW5lCVRPRENfVFlQRV9EUzE2NDNfQ0VOVFVSWQkJMHgxZmY4CisjZGVmaW5lCVRPRENfVFlQRV9EUzE2NDNfRkxBR1MJCQkweDFmZmYKKyNkZWZpbmUJVE9EQ19UWVBFX0RTMTY0M19OVlJBTV9BRERSX1JFRwkJMAorI2RlZmluZQlUT0RDX1RZUEVfRFMxNjQzX05WUkFNX0RBVEFfUkVHCQkwCisKKyNkZWZpbmUJVE9EQ19UWVBFX0RTMTY5M19OVlJBTV9TSVpFCQkwIC8qIE5vdCBoYW5kbGVkIHlldCAqLworI2RlZmluZQlUT0RDX1RZUEVfRFMxNjkzX1NXX0ZMQUdTCQkwCisjZGVmaW5lCVRPRENfVFlQRV9EUzE2OTNfWUVBUgkJCTB4MDkKKyNkZWZpbmUJVE9EQ19UWVBFX0RTMTY5M19NT05USAkJCTB4MDgKKyNkZWZpbmUJVE9EQ19UWVBFX0RTMTY5M19ET00JCQkweDA3CS8qIERheSBvZiBNb250aCAqLworI2RlZmluZQlUT0RDX1RZUEVfRFMxNjkzX0RPVwkJCTB4MDYJLyogRGF5IG9mIFdlZWsgKi8KKyNkZWZpbmUJVE9EQ19UWVBFX0RTMTY5M19IT1VSUwkJCTB4MDQKKyNkZWZpbmUJVE9EQ19UWVBFX0RTMTY5M19NSU5VVEVTCQkweDAyCisjZGVmaW5lCVRPRENfVFlQRV9EUzE2OTNfU0VDT05EUwkJMHgwMAorI2RlZmluZQlUT0RDX1RZUEVfRFMxNjkzX0NOVExfQgkJCTB4MGIKKyNkZWZpbmUJVE9EQ19UWVBFX0RTMTY5M19DTlRMX0EJCQkweDBhCisjZGVmaW5lCVRPRENfVFlQRV9EUzE2OTNfV0FUQ0hET0cJCTB4ZmYKKyNkZWZpbmUJVE9EQ19UWVBFX0RTMTY5M19JTlRFUlJVUFRTCQkweGZmCisjZGVmaW5lCVRPRENfVFlQRV9EUzE2OTNfQUxBUk1fREFURQkJMHg0OQorI2RlZmluZQlUT0RDX1RZUEVfRFMxNjkzX0FMQVJNX0hPVVIJCTB4MDUKKyNkZWZpbmUJVE9EQ19UWVBFX0RTMTY5M19BTEFSTV9NSU5VVEVTCQkweDAzCisjZGVmaW5lCVRPRENfVFlQRV9EUzE2OTNfQUxBUk1fU0VDT05EUwkJMHgwMQorI2RlZmluZQlUT0RDX1RZUEVfRFMxNjkzX0NFTlRVUlkJCTB4NDgKKyNkZWZpbmUJVE9EQ19UWVBFX0RTMTY5M19GTEFHUwkJCTB4ZmYKKyNkZWZpbmUJVE9EQ19UWVBFX0RTMTY5M19OVlJBTV9BRERSX1JFRwkJMAorI2RlZmluZQlUT0RDX1RZUEVfRFMxNjkzX05WUkFNX0RBVEFfUkVHCQkwCisKKyNkZWZpbmUJVE9EQ19UWVBFX0RTMTc0M19OVlJBTV9TSVpFCQkweDFmZjgKKyNkZWZpbmUJVE9EQ19UWVBFX0RTMTc0M19TV19GTEFHUwkJMAorI2RlZmluZQlUT0RDX1RZUEVfRFMxNzQzX1lFQVIJCQkweDFmZmYKKyNkZWZpbmUJVE9EQ19UWVBFX0RTMTc0M19NT05USAkJCTB4MWZmZQorI2RlZmluZQlUT0RDX1RZUEVfRFMxNzQzX0RPTQkJCTB4MWZmZAkvKiBEYXkgb2YgTW9udGggKi8KKyNkZWZpbmUJVE9EQ19UWVBFX0RTMTc0M19ET1cJCQkweDFmZmMJLyogRGF5IG9mIFdlZWsgKi8KKyNkZWZpbmUJVE9EQ19UWVBFX0RTMTc0M19IT1VSUwkJCTB4MWZmYgorI2RlZmluZQlUT0RDX1RZUEVfRFMxNzQzX01JTlVURVMJCTB4MWZmYQorI2RlZmluZQlUT0RDX1RZUEVfRFMxNzQzX1NFQ09ORFMJCTB4MWZmOQorI2RlZmluZQlUT0RDX1RZUEVfRFMxNzQzX0NOVExfQgkJCTB4MWZmOQorI2RlZmluZQlUT0RDX1RZUEVfRFMxNzQzX0NOVExfQQkJCTB4MWZmOAkvKiBjb250cm9sX2EgUi9XIHJlZ3MgKi8KKyNkZWZpbmUJVE9EQ19UWVBFX0RTMTc0M19XQVRDSERPRwkJMHgxZmZmCisjZGVmaW5lCVRPRENfVFlQRV9EUzE3NDNfSU5URVJSVVBUUwkJMHgxZmZmCisjZGVmaW5lCVRPRENfVFlQRV9EUzE3NDNfQUxBUk1fREFURQkJMHgxZmZmCisjZGVmaW5lCVRPRENfVFlQRV9EUzE3NDNfQUxBUk1fSE9VUgkJMHgxZmZmCisjZGVmaW5lCVRPRENfVFlQRV9EUzE3NDNfQUxBUk1fTUlOVVRFUwkJMHgxZmZmCisjZGVmaW5lCVRPRENfVFlQRV9EUzE3NDNfQUxBUk1fU0VDT05EUwkJMHgxZmZmCisjZGVmaW5lCVRPRENfVFlQRV9EUzE3NDNfQ0VOVFVSWQkJMHgxZmY4CisjZGVmaW5lCVRPRENfVFlQRV9EUzE3NDNfRkxBR1MJCQkweDFmZmYKKyNkZWZpbmUJVE9EQ19UWVBFX0RTMTc0M19OVlJBTV9BRERSX1JFRwkJMAorI2RlZmluZQlUT0RDX1RZUEVfRFMxNzQzX05WUkFNX0RBVEFfUkVHCQkwCisKKyNkZWZpbmUJVE9EQ19UWVBFX0RTMTc0Nl9OVlJBTV9TSVpFCQkweDFmZmY4CisjZGVmaW5lCVRPRENfVFlQRV9EUzE3NDZfU1dfRkxBR1MJCTAKKyNkZWZpbmUJVE9EQ19UWVBFX0RTMTc0Nl9ZRUFSCQkJMHgxZmZmZgorI2RlZmluZQlUT0RDX1RZUEVfRFMxNzQ2X01PTlRICQkJMHgxZmZmZQorI2RlZmluZQlUT0RDX1RZUEVfRFMxNzQ2X0RPTQkJCTB4MWZmZmQJLyogRGF5IG9mIE1vbnRoICovCisjZGVmaW5lCVRPRENfVFlQRV9EUzE3NDZfRE9XCQkJMHgxZmZmYwkvKiBEYXkgb2YgV2VlayAqLworI2RlZmluZQlUT0RDX1RZUEVfRFMxNzQ2X0hPVVJTCQkJMHgxZmZmYgorI2RlZmluZQlUT0RDX1RZUEVfRFMxNzQ2X01JTlVURVMJCTB4MWZmZmEKKyNkZWZpbmUJVE9EQ19UWVBFX0RTMTc0Nl9TRUNPTkRTCQkweDFmZmY5CisjZGVmaW5lCVRPRENfVFlQRV9EUzE3NDZfQ05UTF9CCQkJMHgxZmZmOQorI2RlZmluZQlUT0RDX1RZUEVfRFMxNzQ2X0NOVExfQQkJCTB4MWZmZjgJLyogY29udHJvbF9hIFIvVyByZWdzICovCisjZGVmaW5lCVRPRENfVFlQRV9EUzE3NDZfV0FUQ0hET0cJCTB4MDAwMDAKKyNkZWZpbmUJVE9EQ19UWVBFX0RTMTc0Nl9JTlRFUlJVUFRTCQkweDAwMDAwCisjZGVmaW5lCVRPRENfVFlQRV9EUzE3NDZfQUxBUk1fREFURQkJMHgwMDAwMAorI2RlZmluZQlUT0RDX1RZUEVfRFMxNzQ2X0FMQVJNX0hPVVIJCTB4MDAwMDAKKyNkZWZpbmUJVE9EQ19UWVBFX0RTMTc0Nl9BTEFSTV9NSU5VVEVTCQkweDAwMDAwCisjZGVmaW5lCVRPRENfVFlQRV9EUzE3NDZfQUxBUk1fU0VDT05EUwkJMHgwMDAwMAorI2RlZmluZQlUT0RDX1RZUEVfRFMxNzQ2X0NFTlRVUlkJCTB4MDAwMDAKKyNkZWZpbmUJVE9EQ19UWVBFX0RTMTc0Nl9GTEFHUwkJCTB4MDAwMDAKKyNkZWZpbmUJVE9EQ19UWVBFX0RTMTc0Nl9OVlJBTV9BRERSX1JFRwkJMAorI2RlZmluZQlUT0RDX1RZUEVfRFMxNzQ2X05WUkFNX0RBVEFfUkVHCQkwCisKKyNkZWZpbmUJVE9EQ19UWVBFX0RTMTc0N19OVlJBTV9TSVpFCQkweDdmZmY4CisjZGVmaW5lCVRPRENfVFlQRV9EUzE3NDdfU1dfRkxBR1MJCTAKKyNkZWZpbmUJVE9EQ19UWVBFX0RTMTc0N19ZRUFSCQkJMHg3ZmZmZgorI2RlZmluZQlUT0RDX1RZUEVfRFMxNzQ3X01PTlRICQkJMHg3ZmZmZQorI2RlZmluZQlUT0RDX1RZUEVfRFMxNzQ3X0RPTQkJCTB4N2ZmZmQJLyogRGF5IG9mIE1vbnRoICovCisjZGVmaW5lCVRPRENfVFlQRV9EUzE3NDdfRE9XCQkJMHg3ZmZmYwkvKiBEYXkgb2YgV2VlayAqLworI2RlZmluZQlUT0RDX1RZUEVfRFMxNzQ3X0hPVVJTCQkJMHg3ZmZmYgorI2RlZmluZQlUT0RDX1RZUEVfRFMxNzQ3X01JTlVURVMJCTB4N2ZmZmEKKyNkZWZpbmUJVE9EQ19UWVBFX0RTMTc0N19TRUNPTkRTCQkweDdmZmY5CisjZGVmaW5lCVRPRENfVFlQRV9EUzE3NDdfQ05UTF9CCQkJMHg3ZmZmOQorI2RlZmluZQlUT0RDX1RZUEVfRFMxNzQ3X0NOVExfQQkJCTB4N2ZmZjgJLyogY29udHJvbF9hIFIvVyByZWdzICovCisjZGVmaW5lCVRPRENfVFlQRV9EUzE3NDdfV0FUQ0hET0cJCTB4MDAwMDAKKyNkZWZpbmUJVE9EQ19UWVBFX0RTMTc0N19JTlRFUlJVUFRTCQkweDAwMDAwCisjZGVmaW5lCVRPRENfVFlQRV9EUzE3NDdfQUxBUk1fREFURQkJMHgwMDAwMAorI2RlZmluZQlUT0RDX1RZUEVfRFMxNzQ3X0FMQVJNX0hPVVIJCTB4MDAwMDAKKyNkZWZpbmUJVE9EQ19UWVBFX0RTMTc0N19BTEFSTV9NSU5VVEVTCQkweDAwMDAwCisjZGVmaW5lCVRPRENfVFlQRV9EUzE3NDdfQUxBUk1fU0VDT05EUwkJMHgwMDAwMAorI2RlZmluZQlUT0RDX1RZUEVfRFMxNzQ3X0NFTlRVUlkJCTB4MDAwMDAKKyNkZWZpbmUJVE9EQ19UWVBFX0RTMTc0N19GTEFHUwkJCTB4MDAwMDAKKyNkZWZpbmUJVE9EQ19UWVBFX0RTMTc0N19OVlJBTV9BRERSX1JFRwkJMAorI2RlZmluZQlUT0RDX1RZUEVfRFMxNzQ3X05WUkFNX0RBVEFfUkVHCQkwCisKKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTcyODVfTlZSQU1fU0laRQkJKDB4MTAwMC0weDgwKSAgICAvKiA0S3g4IE5WUkFNIChtaW51cyBSVEMgcmVncykgKi8KKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTcyODVfU1dfRkxBR1MJCVRPRENfRkxBR18yX0xFVkVMX05WUkFNCisjZGVmaW5lIFRPRENfVFlQRV9EUzE3Mjg1X1NFQ09ORFMJCShUT0RDX1RZUEVfRFMxNzI4NV9OVlJBTV9TSVpFICsgMHgwMCkKKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTcyODVfQUxBUk1fU0VDT05EUwkJKFRPRENfVFlQRV9EUzE3Mjg1X05WUkFNX1NJWkUgKyAweDAxKQorI2RlZmluZSBUT0RDX1RZUEVfRFMxNzI4NV9NSU5VVEVTCQkoVE9EQ19UWVBFX0RTMTcyODVfTlZSQU1fU0laRSArIDB4MDIpCisjZGVmaW5lIFRPRENfVFlQRV9EUzE3Mjg1X0FMQVJNX01JTlVURVMJCShUT0RDX1RZUEVfRFMxNzI4NV9OVlJBTV9TSVpFICsgMHgwMykKKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTcyODVfSE9VUlMJCQkoVE9EQ19UWVBFX0RTMTcyODVfTlZSQU1fU0laRSArIDB4MDQpCisjZGVmaW5lIFRPRENfVFlQRV9EUzE3Mjg1X0FMQVJNX0hPVVIJCShUT0RDX1RZUEVfRFMxNzI4NV9OVlJBTV9TSVpFICsgMHgwNSkKKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTcyODVfRE9XCQkJKFRPRENfVFlQRV9EUzE3Mjg1X05WUkFNX1NJWkUgKyAweDA2KQorI2RlZmluZSBUT0RDX1RZUEVfRFMxNzI4NV9ET00JCQkoVE9EQ19UWVBFX0RTMTcyODVfTlZSQU1fU0laRSArIDB4MDcpCisjZGVmaW5lIFRPRENfVFlQRV9EUzE3Mjg1X01PTlRICQkJKFRPRENfVFlQRV9EUzE3Mjg1X05WUkFNX1NJWkUgKyAweDA4KQorI2RlZmluZSBUT0RDX1RZUEVfRFMxNzI4NV9ZRUFSCQkJKFRPRENfVFlQRV9EUzE3Mjg1X05WUkFNX1NJWkUgKyAweDA5KQorI2RlZmluZSBUT0RDX1RZUEVfRFMxNzI4NV9DTlRMX0EJCShUT0RDX1RZUEVfRFMxNzI4NV9OVlJBTV9TSVpFICsgMHgwQSkKKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTcyODVfQ05UTF9CCQkoVE9EQ19UWVBFX0RTMTcyODVfTlZSQU1fU0laRSArIDB4MEIpCisjZGVmaW5lIFRPRENfVFlQRV9EUzE3Mjg1X0NOVExfQwkJKFRPRENfVFlQRV9EUzE3Mjg1X05WUkFNX1NJWkUgKyAweDBDKQorI2RlZmluZSBUT0RDX1RZUEVfRFMxNzI4NV9DTlRMX0QJCShUT0RDX1RZUEVfRFMxNzI4NV9OVlJBTV9TSVpFICsgMHgwRCkKKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTcyODVfV0FUQ0hET0cJCTAKKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTcyODVfSU5URVJSVVBUUwkJMAorI2RlZmluZSBUT0RDX1RZUEVfRFMxNzI4NV9BTEFSTV9EQVRFCQkwCisjZGVmaW5lIFRPRENfVFlQRV9EUzE3Mjg1X0NFTlRVUlkJCTAKKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTcyODVfRkxBR1MJCQkwCisjZGVmaW5lIFRPRENfVFlQRV9EUzE3Mjg1X05WUkFNX0FERFJfUkVHCTB4NTAKKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTcyODVfTlZSQU1fREFUQV9SRUcJMHg1MworIAorI2RlZmluZQlUT0RDX1RZUEVfTUMxNDY4MThfTlZSQU1fU0laRQkJMAkvKiBYWFhYICovCisjZGVmaW5lCVRPRENfVFlQRV9NQzE0NjgxOF9TV19GTEFHUwkJMAorI2RlZmluZQlUT0RDX1RZUEVfTUMxNDY4MThfWUVBUgkJCTB4MDkKKyNkZWZpbmUJVE9EQ19UWVBFX01DMTQ2ODE4X01PTlRICQkweDA4CisjZGVmaW5lCVRPRENfVFlQRV9NQzE0NjgxOF9ET00JCQkweDA3CS8qIERheSBvZiBNb250aCAqLworI2RlZmluZQlUT0RDX1RZUEVfTUMxNDY4MThfRE9XCQkJMHgwNgkvKiBEYXkgb2YgV2VlayAqLworI2RlZmluZQlUT0RDX1RZUEVfTUMxNDY4MThfSE9VUlMJCTB4MDQKKyNkZWZpbmUJVE9EQ19UWVBFX01DMTQ2ODE4X01JTlVURVMJCTB4MDIKKyNkZWZpbmUJVE9EQ19UWVBFX01DMTQ2ODE4X1NFQ09ORFMJCTB4MDAKKyNkZWZpbmUJVE9EQ19UWVBFX01DMTQ2ODE4X0NOVExfQgkJMHgwYQorI2RlZmluZQlUT0RDX1RZUEVfTUMxNDY4MThfQ05UTF9BCQkweDBiCS8qIGNvbnRyb2xfYSBSL1cgcmVncyAqLworI2RlZmluZQlUT0RDX1RZUEVfTUMxNDY4MThfV0FUQ0hET0cJCTAKKyNkZWZpbmUJVE9EQ19UWVBFX01DMTQ2ODE4X0lOVEVSUlVQVFMJCTB4MGMKKyNkZWZpbmUJVE9EQ19UWVBFX01DMTQ2ODE4X0FMQVJNX0RBVEUJCTB4ZmYKKyNkZWZpbmUJVE9EQ19UWVBFX01DMTQ2ODE4X0FMQVJNX0hPVVIJCTB4MDUKKyNkZWZpbmUJVE9EQ19UWVBFX01DMTQ2ODE4X0FMQVJNX01JTlVURVMJMHgwMworI2RlZmluZQlUT0RDX1RZUEVfTUMxNDY4MThfQUxBUk1fU0VDT05EUwkweDAxCisjZGVmaW5lCVRPRENfVFlQRV9NQzE0NjgxOF9DRU5UVVJZCQkweGZmCisjZGVmaW5lCVRPRENfVFlQRV9NQzE0NjgxOF9GTEFHUwkJMHhmZgorI2RlZmluZQlUT0RDX1RZUEVfTUMxNDY4MThfTlZSQU1fQUREUl9SRUcJMAorI2RlZmluZQlUT0RDX1RZUEVfTUMxNDY4MThfTlZSQU1fREFUQV9SRUcJMAorICAKKyNkZWZpbmUJVE9EQ19UWVBFX1BDOTczMDdfTlZSQU1fU0laRQkJMAkvKiBObyBOVlJBTT8gKi8KKyNkZWZpbmUJVE9EQ19UWVBFX1BDOTczMDdfU1dfRkxBR1MJCTAKKyNkZWZpbmUJVE9EQ19UWVBFX1BDOTczMDdfWUVBUgkJCTB4MDkKKyNkZWZpbmUJVE9EQ19UWVBFX1BDOTczMDdfTU9OVEgJCQkweDA4CisjZGVmaW5lCVRPRENfVFlQRV9QQzk3MzA3X0RPTQkJCTB4MDcJLyogRGF5IG9mIE1vbnRoICovCisjZGVmaW5lCVRPRENfVFlQRV9QQzk3MzA3X0RPVwkJCTB4MDYJLyogRGF5IG9mIFdlZWsgKi8KKyNkZWZpbmUJVE9EQ19UWVBFX1BDOTczMDdfSE9VUlMJCQkweDA0CisjZGVmaW5lCVRPRENfVFlQRV9QQzk3MzA3X01JTlVURVMJCTB4MDIKKyNkZWZpbmUJVE9EQ19UWVBFX1BDOTczMDdfU0VDT05EUwkJMHgwMAorI2RlZmluZQlUT0RDX1RZUEVfUEM5NzMwN19DTlRMX0IJCTB4MGEKKyNkZWZpbmUJVE9EQ19UWVBFX1BDOTczMDdfQ05UTF9BCQkweDBiCS8qIGNvbnRyb2xfYSBSL1cgcmVncyAqLworI2RlZmluZQlUT0RDX1RZUEVfUEM5NzMwN19XQVRDSERPRwkJMHgwYworI2RlZmluZQlUT0RDX1RZUEVfUEM5NzMwN19JTlRFUlJVUFRTCQkweDBkCisjZGVmaW5lCVRPRENfVFlQRV9QQzk3MzA3X0FMQVJNX0RBVEUJCTB4ZmYKKyNkZWZpbmUJVE9EQ19UWVBFX1BDOTczMDdfQUxBUk1fSE9VUgkJMHgwNQorI2RlZmluZQlUT0RDX1RZUEVfUEM5NzMwN19BTEFSTV9NSU5VVEVTCQkweDAzCisjZGVmaW5lCVRPRENfVFlQRV9QQzk3MzA3X0FMQVJNX1NFQ09ORFMJCTB4MDEKKyNkZWZpbmUJVE9EQ19UWVBFX1BDOTczMDdfQ0VOVFVSWQkJMHhmZgorI2RlZmluZQlUT0RDX1RZUEVfUEM5NzMwN19GTEFHUwkJCTB4ZmYKKyNkZWZpbmUJVE9EQ19UWVBFX1BDOTczMDdfTlZSQU1fQUREUl9SRUcJMAorI2RlZmluZQlUT0RDX1RZUEVfUEM5NzMwN19OVlJBTV9EQVRBX1JFRwkwCisKKy8qCisgKiBEZWZpbmUgbWFjcm9zIHRvIGFsbG9jYXRlIGFuZCBpbml0IHRoZSB0b2RjX2luZm9fdCB0YWJsZSB0aGF0IHdpbGwKKyAqIGJlIHVzZWQgYnkgdGhlIHRvZGNfdGltZS5jIHJvdXRpbmVzLgorICovCisjZGVmaW5lCVRPRENfQUxMT0MoKQkJCQkJCQlcCisJc3RhdGljIHRvZGNfaW5mb190IHRvZGNfaW5mb19hbGxvYzsJCQkJXAorCXRvZGNfaW5mb190ICp0b2RjX2luZm8gPSAmdG9kY19pbmZvX2FsbG9jOworCisjZGVmaW5lCVRPRENfSU5JVChjbG9ja190eXBlLCBhczAsIGFzMSwgZGF0YSwgYml0cykgewkJCVwKKwl0b2RjX2luZm8tPnJ0Y190eXBlID0gY2xvY2tfdHlwZTsJCQkJXAorCQkJCQkJCQkJXAorCXRvZGNfaW5mby0+bnZyYW1fYXMwICA9ICh1bnNpZ25lZCBpbnQpKGFzMCk7CQkJXAorCXRvZGNfaW5mby0+bnZyYW1fYXMxICA9ICh1bnNpZ25lZCBpbnQpKGFzMSk7CQkJXAorCXRvZGNfaW5mby0+bnZyYW1fZGF0YSA9ICh1bnNpZ25lZCBpbnQpKGRhdGEpOwkJCVwKKwkJCQkJCQkJCVwKKwl0b2RjX2luZm8tPmFzMF9iaXRzID0gKGJpdHMpOwkJCQkJXAorCQkJCQkJCQkJXAorCXRvZGNfaW5mby0+bnZyYW1fc2l6ZSAgICAgPSBjbG9ja190eXBlICMjX05WUkFNX1NJWkU7CQlcCisJdG9kY19pbmZvLT5zd19mbGFncyAgICAgICA9IGNsb2NrX3R5cGUgIyNfU1dfRkxBR1M7CQlcCisJCQkJCQkJCQlcCisJdG9kY19pbmZvLT55ZWFyICAgICAgICAgICA9IGNsb2NrX3R5cGUgIyNfWUVBUjsJCQlcCisJdG9kY19pbmZvLT5tb250aCAgICAgICAgICA9IGNsb2NrX3R5cGUgIyNfTU9OVEg7CQlcCisJdG9kY19pbmZvLT5kYXlfb2ZfbW9udGggICA9IGNsb2NrX3R5cGUgIyNfRE9NOwkJCVwKKwl0b2RjX2luZm8tPmRheV9vZl93ZWVrICAgID0gY2xvY2tfdHlwZSAjI19ET1c7CQkJXAorCXRvZGNfaW5mby0+aG91cnMgICAgICAgICAgPSBjbG9ja190eXBlICMjX0hPVVJTOwkJXAorCXRvZGNfaW5mby0+bWludXRlcyAgICAgICAgPSBjbG9ja190eXBlICMjX01JTlVURVM7CQlcCisJdG9kY19pbmZvLT5zZWNvbmRzICAgICAgICA9IGNsb2NrX3R5cGUgIyNfU0VDT05EUzsJCVwKKwl0b2RjX2luZm8tPmNvbnRyb2xfYiAgICAgID0gY2xvY2tfdHlwZSAjI19DTlRMX0I7CQlcCisJdG9kY19pbmZvLT5jb250cm9sX2EgICAgICA9IGNsb2NrX3R5cGUgIyNfQ05UTF9BOwkJXAorCXRvZGNfaW5mby0+d2F0Y2hkb2cgICAgICAgPSBjbG9ja190eXBlICMjX1dBVENIRE9HOwkJXAorCXRvZGNfaW5mby0+aW50ZXJydXB0cyAgICAgPSBjbG9ja190eXBlICMjX0lOVEVSUlVQVFM7CQlcCisJdG9kY19pbmZvLT5hbGFybV9kYXRlICAgICA9IGNsb2NrX3R5cGUgIyNfQUxBUk1fREFURTsJCVwKKwl0b2RjX2luZm8tPmFsYXJtX2hvdXIgICAgID0gY2xvY2tfdHlwZSAjI19BTEFSTV9IT1VSOwkJXAorCXRvZGNfaW5mby0+YWxhcm1fbWludXRlcyAgPSBjbG9ja190eXBlICMjX0FMQVJNX01JTlVURVM7CVwKKwl0b2RjX2luZm8tPmFsYXJtX3NlY29uZHMgID0gY2xvY2tfdHlwZSAjI19BTEFSTV9TRUNPTkRTOwlcCisJdG9kY19pbmZvLT5jZW50dXJ5ICAgICAgICA9IGNsb2NrX3R5cGUgIyNfQ0VOVFVSWTsJCVwKKwl0b2RjX2luZm8tPmZsYWdzICAgICAgICAgID0gY2xvY2tfdHlwZSAjI19GTEFHUzsJCVwKKwkJCQkJCQkJCVwKKwl0b2RjX2luZm8tPm52cmFtX2FkZHJfcmVnID0gY2xvY2tfdHlwZSAjI19OVlJBTV9BRERSX1JFRzsJXAorCXRvZGNfaW5mby0+bnZyYW1fZGF0YV9yZWcgPSBjbG9ja190eXBlICMjX05WUkFNX0RBVEFfUkVHOwlcCit9CisKK2V4dGVybiB0b2RjX2luZm9fdCAqdG9kY19pbmZvOworCit1bnNpZ25lZCBjaGFyIHRvZGNfZGlyZWN0X3JlYWRfdmFsKGludCBhZGRyKTsKK3ZvaWQgdG9kY19kaXJlY3Rfd3JpdGVfdmFsKGludCBhZGRyLCB1bnNpZ25lZCBjaGFyIHZhbCk7Cit1bnNpZ25lZCBjaGFyIHRvZGNfbTQ4dHh4X3JlYWRfdmFsKGludCBhZGRyKTsKK3ZvaWQgdG9kY19tNDh0eHhfd3JpdGVfdmFsKGludCBhZGRyLCB1bnNpZ25lZCBjaGFyIHZhbCk7Cit1bnNpZ25lZCBjaGFyIHRvZGNfbWMxNDY4MThfcmVhZF92YWwoaW50IGFkZHIpOwordm9pZCB0b2RjX21jMTQ2ODE4X3dyaXRlX3ZhbChpbnQgYWRkciwgdW5zaWduZWQgY2hhciB2YWwpOworCitsb25nIHRvZGNfdGltZV9pbml0KHZvaWQpOwordW5zaWduZWQgbG9uZyB0b2RjX2dldF9ydGNfdGltZSh2b2lkKTsKK2ludCB0b2RjX3NldF9ydGNfdGltZSh1bnNpZ25lZCBsb25nIG5vd3RpbWUpOwordm9pZCB0b2RjX2NhbGlicmF0ZV9kZWNyKHZvaWQpOworCisjZW5kaWYJCQkJLyogX19QUENfS0VSTkVMX1RPRENfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL3RvcG9sb2d5LmggYi9pbmNsdWRlL2FzbS1wcGMvdG9wb2xvZ3kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTAyOWJiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjL3RvcG9sb2d5LmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9BU01fUFBDX1RPUE9MT0dZX0gKKyNkZWZpbmUgX0FTTV9QUENfVE9QT0xPR1lfSAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdG9wb2xvZ3kuaD4KKworI2VuZGlmIC8qIF9BU01fUFBDX1RPUE9MT0dZX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy90cmFwcy5oIGIvaW5jbHVkZS9hc20tcHBjL3RyYXBzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhlNzMyNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYy90cmFwcy5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tbTY4ay90cmFwcy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL3R5cGVzLmggYi9pbmNsdWRlL2FzbS1wcGMvdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzg3YmMwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjL3R5cGVzLmgKQEAgLTAsMCArMSw3MSBAQAorI2lmbmRlZiBfUFBDX1RZUEVTX0gKKyNkZWZpbmUgX1BQQ19UWVBFU19ICisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK3R5cGVkZWYgX19zaWduZWRfXyBjaGFyIF9fczg7Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191ODsKKwordHlwZWRlZiBfX3NpZ25lZF9fIHNob3J0IF9fczE2OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX3UxNjsKKwordHlwZWRlZiBfX3NpZ25lZF9fIGludCBfX3MzMjsKK3R5cGVkZWYgdW5zaWduZWQgaW50IF9fdTMyOworCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoX19TVFJJQ1RfQU5TSV9fKQordHlwZWRlZiBfX3NpZ25lZF9fIGxvbmcgbG9uZyBfX3M2NDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIF9fdTY0OworI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IHsKKwlfX3UzMiB1WzRdOworfSBfX3ZlY3RvcjEyODsKKworLyoKKyAqIFhYWCBhbGxvd2VkIG91dHNpZGUgb2YgX19LRVJORUxfXyBmb3Igbm93LCB1bnRpbCBnbGliYyBnZXRzCisgKiBhIHByb3BlciBzZXQgb2YgYXNtIGhlYWRlcnMgb2YgaXRzIG93bi4gIC0tIHBhdWx1cworICovCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVtb2RlX3Q7CisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworI2lmZGVmIF9fS0VSTkVMX18KKy8qCisgKiBUaGVzZSBhcmVuJ3QgZXhwb3J0ZWQgb3V0c2lkZSB0aGUga2VybmVsIHRvIGF2b2lkIG5hbWUgc3BhY2UgY2xhc2hlcworICovCisjZGVmaW5lIEJJVFNfUEVSX0xPTkcgMzIKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCit0eXBlZGVmIHNpZ25lZCBjaGFyIHM4OwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIHU4OworCit0eXBlZGVmIHNpZ25lZCBzaG9ydCBzMTY7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHUxNjsKKwordHlwZWRlZiBzaWduZWQgaW50IHMzMjsKK3R5cGVkZWYgdW5zaWduZWQgaW50IHUzMjsKKwordHlwZWRlZiBzaWduZWQgbG9uZyBsb25nIHM2NDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHU2NDsKKwordHlwZWRlZiBfX3ZlY3RvcjEyOCB2ZWN0b3IxMjg7CisKKy8qIERNQSBhZGRyZXNzZXMgYXJlIDMyLWJpdHMgd2lkZSAqLwordHlwZWRlZiB1MzIgZG1hX2FkZHJfdDsKK3R5cGVkZWYgdTY0IGRtYTY0X2FkZHJfdDsKKworI2lmZGVmIENPTkZJR19MQkQKK3R5cGVkZWYgdTY0IHNlY3Rvcl90OworI2RlZmluZSBIQVZFX1NFQ1RPUl9UCisjZW5kaWYKKwordHlwZWRlZiB1bnNpZ25lZCBpbnQga21lbV9idWZjdGxfdDsKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy91YWNjZXNzLmggYi9pbmNsdWRlL2FzbS1wcGMvdWFjY2Vzcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwNDRhZTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGMvdWFjY2Vzcy5oCkBAIC0wLDAgKzEsNDAwIEBACisjaWZkZWYgX19LRVJORUxfXworI2lmbmRlZiBfUFBDX1VBQ0NFU1NfSAorI2RlZmluZSBfUFBDX1VBQ0NFU1NfSAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisKKyNkZWZpbmUgVkVSSUZZX1JFQUQJMAorI2RlZmluZSBWRVJJRllfV1JJVEUJMQorCisvKgorICogVGhlIGZzIHZhbHVlIGRldGVybWluZXMgd2hldGhlciBhcmd1bWVudCB2YWxpZGl0eSBjaGVja2luZyBzaG91bGQgYmUKKyAqIHBlcmZvcm1lZCBvciBub3QuICBJZiBnZXRfZnMoKSA9PSBVU0VSX0RTLCBjaGVja2luZyBpcyBwZXJmb3JtZWQsIHdpdGgKKyAqIGdldF9mcygpID09IEtFUk5FTF9EUywgY2hlY2tpbmcgaXMgYnlwYXNzZWQuCisgKgorICogRm9yIGhpc3RvcmljYWwgcmVhc29ucywgdGhlc2UgbWFjcm9zIGFyZSBncm9zc2x5IG1pc25hbWVkLgorICoKKyAqIFRoZSBmcy9kcyB2YWx1ZXMgYXJlIG5vdyB0aGUgaGlnaGVzdCBsZWdhbCBhZGRyZXNzIGluIHRoZSAic2VnbWVudCIuCisgKiBUaGlzIHNpbXBsaWZpZXMgdGhlIGNoZWNraW5nIGluIHRoZSByb3V0aW5lcyBiZWxvdy4KKyAqLworCisjZGVmaW5lIEtFUk5FTF9EUwkoKG1tX3NlZ21lbnRfdCkgeyB+MFVMIH0pCisjZGVmaW5lIFVTRVJfRFMJCSgobW1fc2VnbWVudF90KSB7IFRBU0tfU0laRSAtIDEgfSkKKworI2RlZmluZSBnZXRfZHMoKQkoS0VSTkVMX0RTKQorI2RlZmluZSBnZXRfZnMoKQkoY3VycmVudC0+dGhyZWFkLmZzKQorI2RlZmluZSBzZXRfZnModmFsKQkoY3VycmVudC0+dGhyZWFkLmZzID0gKHZhbCkpCisKKyNkZWZpbmUgc2VnbWVudF9lcShhLGIpCSgoYSkuc2VnID09IChiKS5zZWcpCisKKyNkZWZpbmUgX19hY2Nlc3Nfb2soYWRkcixzaXplKQkJCQkJCSAgICBcCisJKChhZGRyKSA8PSBjdXJyZW50LT50aHJlYWQuZnMuc2VnCQkJCSAgICBcCisJICYmICgoc2l6ZSkgPT0gMCB8fCAoc2l6ZSkgLSAxIDw9IGN1cnJlbnQtPnRocmVhZC5mcy5zZWcgLSAoYWRkcikpKQorCisjZGVmaW5lIGFjY2Vzc19vayh0eXBlLCBhZGRyLCBzaXplKSBcCisJKF9fY2hrX3VzZXJfcHRyKGFkZHIpLF9fYWNjZXNzX29rKCh1bnNpZ25lZCBsb25nKShhZGRyKSwoc2l6ZSkpKQorCisvKiB0aGlzIGZ1bmN0aW9uIHdpbGwgZ28gYXdheSBzb29uIC0gdXNlIGFjY2Vzc19vaygpIGluc3RlYWQgKi8KK2V4dGVybiBpbmxpbmUgaW50IF9fZGVwcmVjYXRlZCB2ZXJpZnlfYXJlYShpbnQgdHlwZSwgY29uc3Qgdm9pZCBfX3VzZXIgKiBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJcmV0dXJuIGFjY2Vzc19vayh0eXBlLCBhZGRyLCBzaXplKSA/IDAgOiAtRUZBVUxUOworfQorCisKKy8qCisgKiBUaGUgZXhjZXB0aW9uIHRhYmxlIGNvbnNpc3RzIG9mIHBhaXJzIG9mIGFkZHJlc3NlczogdGhlIGZpcnN0IGlzIHRoZQorICogYWRkcmVzcyBvZiBhbiBpbnN0cnVjdGlvbiB0aGF0IGlzIGFsbG93ZWQgdG8gZmF1bHQsIGFuZCB0aGUgc2Vjb25kIGlzCisgKiB0aGUgYWRkcmVzcyBhdCB3aGljaCB0aGUgcHJvZ3JhbSBzaG91bGQgY29udGludWUuICBObyByZWdpc3RlcnMgYXJlCisgKiBtb2RpZmllZCwgc28gaXQgaXMgZW50aXJlbHkgdXAgdG8gdGhlIGNvbnRpbnVhdGlvbiBjb2RlIHRvIGZpZ3VyZSBvdXQKKyAqIHdoYXQgdG8gZG8uCisgKgorICogQWxsIHRoZSByb3V0aW5lcyBiZWxvdyB1c2UgYml0cyBvZiBmaXh1cCBjb2RlIHRoYXQgYXJlIG91dCBvZiBsaW5lCisgKiB3aXRoIHRoZSBtYWluIGluc3RydWN0aW9uIHBhdGguICBUaGlzIG1lYW5zIHdoZW4gZXZlcnl0aGluZyBpcyB3ZWxsLAorICogd2UgZG9uJ3QgZXZlbiBoYXZlIHRvIGp1bXAgb3ZlciB0aGVtLiAgRnVydGhlciwgdGhleSBkbyBub3QgaW50cnVkZQorICogb24gb3VyIGNhY2hlIG9yIHRsYiBlbnRyaWVzLgorICovCisKK3N0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkKK3sKKwl1bnNpZ25lZCBsb25nIGluc24sIGZpeHVwOworfTsKKworLyoKKyAqIFRoZXNlIGFyZSB0aGUgbWFpbiBzaW5nbGUtdmFsdWUgdHJhbnNmZXIgcm91dGluZXMuICBUaGV5IGF1dG9tYXRpY2FsbHkKKyAqIHVzZSB0aGUgcmlnaHQgc2l6ZSBpZiB3ZSBqdXN0IGhhdmUgdGhlIHJpZ2h0IHBvaW50ZXIgdHlwZS4KKyAqCisgKiBUaGlzIGdldHMga2luZCBvZiB1Z2x5LiBXZSB3YW50IHRvIHJldHVybiBfdHdvXyB2YWx1ZXMgaW4gImdldF91c2VyKCkiCisgKiBhbmQgeWV0IHdlIGRvbid0IHdhbnQgdG8gZG8gYW55IHBvaW50ZXJzLCBiZWNhdXNlIHRoYXQgaXMgdG9vIG11Y2gKKyAqIG9mIGEgcGVyZm9ybWFuY2UgaW1wYWN0LiBUaHVzIHdlIGhhdmUgYSBmZXcgcmF0aGVyIHVnbHkgbWFjcm9zIGhlcmUsCisgKiBhbmQgaGlkZSBhbGwgdGhlIHVnbGluZXNzIGZyb20gdGhlIHVzZXIuCisgKgorICogVGhlICJfX3h4eCIgdmVyc2lvbnMgb2YgdGhlIHVzZXIgYWNjZXNzIGZ1bmN0aW9ucyBhcmUgdmVyc2lvbnMgdGhhdAorICogZG8gbm90IHZlcmlmeSB0aGUgYWRkcmVzcyBzcGFjZSwgdGhhdCBtdXN0IGhhdmUgYmVlbiBkb25lIHByZXZpb3VzbHkKKyAqIHdpdGggYSBzZXBhcmF0ZSAiYWNjZXNzX29rKCkiIGNhbGwgKHRoaXMgaXMgdXNlZCB3aGVuIHdlIGRvIG11bHRpcGxlCisgKiBhY2Nlc3NlcyB0byB0aGUgc2FtZSBhcmVhIG9mIHVzZXIgbWVtb3J5KS4KKyAqCisgKiBBcyB3ZSB1c2UgdGhlIHNhbWUgYWRkcmVzcyBzcGFjZSBmb3Iga2VybmVsIGFuZCB1c2VyIGRhdGEgb24gdGhlCisgKiBQb3dlclBDLCB3ZSBjYW4ganVzdCBkbyB0aGVzZSBhcyBkaXJlY3QgYXNzaWdubWVudHMuICAoT2YgY291cnNlLCB0aGUKKyAqIGV4Y2VwdGlvbiBoYW5kbGluZyBtZWFucyB0aGF0IGl0J3Mgbm8gbG9uZ2VyICJqdXN0Ii4uLikKKyAqCisgKiBUaGUgInVzZXI2NCIgdmVyc2lvbnMgb2YgdGhlIHVzZXIgYWNjZXNzIGZ1bmN0aW9ucyBhcmUgdmVyc2lvbnMgdGhhdCAKKyAqIGFsbG93IGFjY2VzcyBvZiA2NC1iaXQgZGF0YS4gVGhlICJnZXRfdXNlciIgZnVuY3Rpb25zIGRvIG5vdCAKKyAqIHByb3Blcmx5IGhhbmRsZSA2NC1iaXQgZGF0YSBiZWNhdXNlIHRoZSB2YWx1ZSBnZXRzIGRvd24gY2FzdCB0byBhIGxvbmcuIAorICogVGhlICJwdXRfdXNlciIgZnVuY3Rpb25zIGFscmVhZHkgaGFuZGxlIDY0LWJpdCBkYXRhIHByb3Blcmx5IGJ1dCB3ZSBhZGQgCisgKiAidXNlcjY0IiB2ZXJzaW9ucyBmb3IgY29tcGxldGVuZXNzCisgKi8KKyNkZWZpbmUgZ2V0X3VzZXIoeCxwdHIpIFwKKyAgX19nZXRfdXNlcl9jaGVjaygoeCksKHB0ciksc2l6ZW9mKCoocHRyKSkpCisjZGVmaW5lIGdldF91c2VyNjQoeCxwdHIpIFwKKyAgX19nZXRfdXNlcjY0X2NoZWNrKCh4KSwocHRyKSxzaXplb2YoKihwdHIpKSkKKyNkZWZpbmUgcHV0X3VzZXIoeCxwdHIpIFwKKyAgX19wdXRfdXNlcl9jaGVjaygoX190eXBlb2ZfXygqKHB0cikpKSh4KSwocHRyKSxzaXplb2YoKihwdHIpKSkKKyNkZWZpbmUgcHV0X3VzZXI2NCh4LHB0cikgcHV0X3VzZXIoeCxwdHIpCisKKyNkZWZpbmUgX19nZXRfdXNlcih4LHB0cikgXAorICBfX2dldF91c2VyX25vY2hlY2soKHgpLChwdHIpLHNpemVvZigqKHB0cikpKQorI2RlZmluZSBfX2dldF91c2VyNjQoeCxwdHIpIFwKKyAgX19nZXRfdXNlcjY0X25vY2hlY2soKHgpLChwdHIpLHNpemVvZigqKHB0cikpKQorI2RlZmluZSBfX3B1dF91c2VyKHgscHRyKSBcCisgIF9fcHV0X3VzZXJfbm9jaGVjaygoX190eXBlb2ZfXygqKHB0cikpKSh4KSwocHRyKSxzaXplb2YoKihwdHIpKSkKKyNkZWZpbmUgX19wdXRfdXNlcjY0KHgscHRyKSBfX3B1dF91c2VyKHgscHRyKQorCitleHRlcm4gbG9uZyBfX3B1dF91c2VyX2JhZCh2b2lkKTsKKworI2RlZmluZSBfX3B1dF91c2VyX25vY2hlY2soeCxwdHIsc2l6ZSkJCQlcCisoewkJCQkJCQlcCisJbG9uZyBfX3B1X2VycjsJCQkJCVwKKwlfX2Noa191c2VyX3B0cihwdHIpOwkJCQlcCisJX19wdXRfdXNlcl9zaXplKCh4KSwocHRyKSwoc2l6ZSksX19wdV9lcnIpOwlcCisJX19wdV9lcnI7CQkJCQlcCit9KQorCisjZGVmaW5lIF9fcHV0X3VzZXJfY2hlY2soeCxwdHIsc2l6ZSkJCQkJXAorKHsJCQkJCQkJCVwKKwlsb25nIF9fcHVfZXJyID0gLUVGQVVMVDsJCQkJXAorCV9fdHlwZW9mX18oKihwdHIpKSBfX3VzZXIgKl9fcHVfYWRkciA9IChwdHIpOwkJXAorCWlmIChhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLF9fcHVfYWRkcixzaXplKSkJCVwKKwkJX19wdXRfdXNlcl9zaXplKCh4KSxfX3B1X2FkZHIsKHNpemUpLF9fcHVfZXJyKTsJXAorCV9fcHVfZXJyOwkJCQkJCVwKK30pCisKKyNkZWZpbmUgX19wdXRfdXNlcl9zaXplKHgscHRyLHNpemUscmV0dmFsKQkJXAorZG8gewkJCQkJCQlcCisJcmV0dmFsID0gMDsJCQkJCVwKKwlzd2l0Y2ggKHNpemUpIHsJCQkJCVwKKwljYXNlIDE6CQkJCQkJXAorCQlfX3B1dF91c2VyX2FzbSh4LCBwdHIsIHJldHZhbCwgInN0YiIpOwlcCisJCWJyZWFrOwkJCQkJXAorCWNhc2UgMjoJCQkJCQlcCisJCV9fcHV0X3VzZXJfYXNtKHgsIHB0ciwgcmV0dmFsLCAic3RoIik7CVwKKwkJYnJlYWs7CQkJCQlcCisJY2FzZSA0OgkJCQkJCVwKKwkJX19wdXRfdXNlcl9hc20oeCwgcHRyLCByZXR2YWwsICJzdHciKTsJXAorCQlicmVhazsJCQkJCVwKKwljYXNlIDg6CQkJCQkJXAorCQlfX3B1dF91c2VyX2FzbTIoeCwgcHRyLCByZXR2YWwpOwlcCisJCWJyZWFrOwkJCQkJXAorCWRlZmF1bHQ6CQkJCQlcCisJCV9fcHV0X3VzZXJfYmFkKCk7CQkJXAorCX0JCQkJCQlcCit9IHdoaWxlICgwKQorCisvKgorICogV2UgZG9uJ3QgdGVsbCBnY2MgdGhhdCB3ZSBhcmUgYWNjZXNzaW5nIG1lbW9yeSwgYnV0IHRoaXMgaXMgT0sKKyAqIGJlY2F1c2Ugd2UgZG8gbm90IHdyaXRlIHRvIGFueSBtZW1vcnkgZ2NjIGtub3dzIGFib3V0LCBzbyB0aGVyZQorICogYXJlIG5vIGFsaWFzaW5nIGlzc3Vlcy4KKyAqLworI2RlZmluZSBfX3B1dF91c2VyX2FzbSh4LCBhZGRyLCBlcnIsIG9wKQkJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCVwKKwkJIjE6CSJvcCIgJTEsMCglMilcbiIJCQlcCisJCSIyOlxuIgkJCQkJCVwKKwkJIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIJCQlcCisJCSIzOglsaSAlMCwlM1xuIgkJCQlcCisJCSIJYiAyYlxuIgkJCQkJXAorCQkiLnByZXZpb3VzXG4iCQkJCQlcCisJCSIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCQkJXAorCQkiCS5hbGlnbiAyXG4iCQkJCVwKKwkJIgkubG9uZyAxYiwzYlxuIgkJCQlcCisJCSIucHJldmlvdXMiCQkJCQlcCisJCTogIj1yIiAoZXJyKQkJCQkJXAorCQk6ICJyIiAoeCksICJiIiAoYWRkciksICJpIiAoLUVGQVVMVCksICIwIiAoZXJyKSkKKworI2RlZmluZSBfX3B1dF91c2VyX2FzbTIoeCwgYWRkciwgZXJyKQkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQlcCisJCSIxOglzdHcgJTEsMCglMilcbiIJCQkJXAorCQkiMjoJc3R3ICUxKzEsNCglMilcbiIJCQlcCisJCSIzOlxuIgkJCQkJCVwKKwkJIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIJCQlcCisJCSI0OglsaSAlMCwlM1xuIgkJCQlcCisJCSIJYiAzYlxuIgkJCQkJXAorCQkiLnByZXZpb3VzXG4iCQkJCQlcCisJCSIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCQkJXAorCQkiCS5hbGlnbiAyXG4iCQkJCVwKKwkJIgkubG9uZyAxYiw0YlxuIgkJCQlcCisJCSIJLmxvbmcgMmIsNGJcbiIJCQkJXAorCQkiLnByZXZpb3VzIgkJCQkJXAorCQk6ICI9ciIgKGVycikJCQkJCVwKKwkJOiAiciIgKHgpLCAiYiIgKGFkZHIpLCAiaSIgKC1FRkFVTFQpLCAiMCIgKGVycikpCisKKyNkZWZpbmUgX19nZXRfdXNlcl9ub2NoZWNrKHgsIHB0ciwgc2l6ZSkJCQlcCisoewkJCQkJCQkJXAorCWxvbmcgX19ndV9lcnI7CQkJCQkJXAorCXVuc2lnbmVkIGxvbmcgX19ndV92YWw7CQkJCQlcCisJX19jaGtfdXNlcl9wdHIocHRyKTsJCQkJCVwKKwlfX2dldF91c2VyX3NpemUoX19ndV92YWwsIChwdHIpLCAoc2l6ZSksIF9fZ3VfZXJyKTsJXAorCSh4KSA9IChfX3R5cGVvZl9fKCoocHRyKSkpX19ndV92YWw7CQkJXAorCV9fZ3VfZXJyOwkJCQkJCVwKK30pCisKKyNkZWZpbmUgX19nZXRfdXNlcjY0X25vY2hlY2soeCwgcHRyLCBzaXplKQkJCVwKKyh7CQkJCQkJCQlcCisJbG9uZyBfX2d1X2VycjsJCQkJCQlcCisJbG9uZyBsb25nIF9fZ3VfdmFsOwkJCQkJXAorCV9fY2hrX3VzZXJfcHRyKHB0cik7CQkJCQlcCisJX19nZXRfdXNlcl9zaXplNjQoX19ndV92YWwsIChwdHIpLCAoc2l6ZSksIF9fZ3VfZXJyKTsJXAorCSh4KSA9IChfX3R5cGVvZl9fKCoocHRyKSkpX19ndV92YWw7CQkJXAorCV9fZ3VfZXJyOwkJCQkJCVwKK30pCisKKyNkZWZpbmUgX19nZXRfdXNlcl9jaGVjayh4LCBwdHIsIHNpemUpCQkJCQlcCisoewkJCQkJCQkJCVwKKwlsb25nIF9fZ3VfZXJyID0gLUVGQVVMVDsJCQkJCVwKKwl1bnNpZ25lZCBsb25nICBfX2d1X3ZhbCA9IDA7CQkJCQlcCisJY29uc3QgX190eXBlb2ZfXygqKHB0cikpIF9fdXNlciAqX19ndV9hZGRyID0gKHB0cik7CQlcCisJaWYgKGFjY2Vzc19vayhWRVJJRllfUkVBRCwgX19ndV9hZGRyLCAoc2l6ZSkpKQkJCVwKKwkJX19nZXRfdXNlcl9zaXplKF9fZ3VfdmFsLCBfX2d1X2FkZHIsIChzaXplKSwgX19ndV9lcnIpOwlcCisJKHgpID0gKF9fdHlwZW9mX18oKihwdHIpKSlfX2d1X3ZhbDsJCQkJXAorCV9fZ3VfZXJyOwkJCQkJCQlcCit9KQorCisjZGVmaW5lIF9fZ2V0X3VzZXI2NF9jaGVjayh4LCBwdHIsIHNpemUpCQkJCSAgXAorKHsJCQkJCQkJCQkgIFwKKwlsb25nIF9fZ3VfZXJyID0gLUVGQVVMVDsJCQkJCSAgXAorCWxvbmcgbG9uZyBfX2d1X3ZhbCA9IDA7CQkJCQkJICBcCisJY29uc3QgX190eXBlb2ZfXygqKHB0cikpIF9fdXNlciAqX19ndV9hZGRyID0gKHB0cik7CQkgIFwKKwlpZiAoYWNjZXNzX29rKFZFUklGWV9SRUFELCBfX2d1X2FkZHIsIChzaXplKSkpCQkJICBcCisJCV9fZ2V0X3VzZXJfc2l6ZTY0KF9fZ3VfdmFsLCBfX2d1X2FkZHIsIChzaXplKSwgX19ndV9lcnIpOyBcCisJKHgpID0gKF9fdHlwZW9mX18oKihwdHIpKSlfX2d1X3ZhbDsJCQkJICBcCisJX19ndV9lcnI7CQkJCQkJCSAgXAorfSkKKworZXh0ZXJuIGxvbmcgX19nZXRfdXNlcl9iYWQodm9pZCk7CisKKyNkZWZpbmUgX19nZXRfdXNlcl9zaXplKHgsIHB0ciwgc2l6ZSwgcmV0dmFsKQkJCVwKK2RvIHsJCQkJCQkJCVwKKwlyZXR2YWwgPSAwOwkJCQkJCVwKKwlzd2l0Y2ggKHNpemUpIHsJCQkJCQlcCisJY2FzZSAxOgkJCQkJCQlcCisJCV9fZ2V0X3VzZXJfYXNtKHgsIHB0ciwgcmV0dmFsLCAibGJ6Iik7CQlcCisJCWJyZWFrOwkJCQkJCVwKKwljYXNlIDI6CQkJCQkJCVwKKwkJX19nZXRfdXNlcl9hc20oeCwgcHRyLCByZXR2YWwsICJsaHoiKTsJCVwKKwkJYnJlYWs7CQkJCQkJXAorCWNhc2UgNDoJCQkJCQkJXAorCQlfX2dldF91c2VyX2FzbSh4LCBwdHIsIHJldHZhbCwgImx3eiIpOwkJXAorCQlicmVhazsJCQkJCQlcCisJZGVmYXVsdDoJCQkJCQlcCisJCXggPSBfX2dldF91c2VyX2JhZCgpOwkJCQlcCisJfQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIF9fZ2V0X3VzZXJfc2l6ZTY0KHgsIHB0ciwgc2l6ZSwgcmV0dmFsKQkJCVwKK2RvIHsJCQkJCQkJCVwKKwlyZXR2YWwgPSAwOwkJCQkJCVwKKwlzd2l0Y2ggKHNpemUpIHsJCQkJCQlcCisJY2FzZSAxOgkJCQkJCQlcCisJCV9fZ2V0X3VzZXJfYXNtKHgsIHB0ciwgcmV0dmFsLCAibGJ6Iik7CQlcCisJCWJyZWFrOwkJCQkJCVwKKwljYXNlIDI6CQkJCQkJCVwKKwkJX19nZXRfdXNlcl9hc20oeCwgcHRyLCByZXR2YWwsICJsaHoiKTsJCVwKKwkJYnJlYWs7CQkJCQkJXAorCWNhc2UgNDoJCQkJCQkJXAorCQlfX2dldF91c2VyX2FzbSh4LCBwdHIsIHJldHZhbCwgImx3eiIpOwkJXAorCQlicmVhazsJCQkJCQlcCisJY2FzZSA4OgkJCQkJCQlcCisJCV9fZ2V0X3VzZXJfYXNtMih4LCBwdHIsIHJldHZhbCk7CQlcCisJCWJyZWFrOwkJCQkJCVwKKwlkZWZhdWx0OgkJCQkJCVwKKwkJeCA9IF9fZ2V0X3VzZXJfYmFkKCk7CQkJCVwKKwl9CQkJCQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgX19nZXRfdXNlcl9hc20oeCwgYWRkciwgZXJyLCBvcCkJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJXAorCQkiMToJIm9wIiAlMSwwKCUyKVxuIgkJXAorCQkiMjpcbiIJCQkJCVwKKwkJIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIJCVwKKwkJIjM6CWxpICUwLCUzXG4iCQkJXAorCQkiCWxpICUxLDBcbiIJCQlcCisJCSIJYiAyYlxuIgkJCQlcCisJCSIucHJldmlvdXNcbiIJCQkJXAorCQkiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgkJXAorCQkiCS5hbGlnbiAyXG4iCQkJXAorCQkiCS5sb25nIDFiLDNiXG4iCQkJXAorCQkiLnByZXZpb3VzIgkJCQlcCisJCTogIj1yIihlcnIpLCAiPXIiKHgpCQkJXAorCQk6ICJiIihhZGRyKSwgImkiKC1FRkFVTFQpLCAiMCIoZXJyKSkKKworI2RlZmluZSBfX2dldF91c2VyX2FzbTIoeCwgYWRkciwgZXJyKQkJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJXAorCQkiMToJbHd6ICUxLDAoJTIpXG4iCQkJXAorCQkiMjoJbHd6ICUxKzEsNCglMilcbiIJCVwKKwkJIjM6XG4iCQkJCQlcCisJCSIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iCQlcCisJCSI0OglsaSAlMCwlM1xuIgkJCVwKKwkJIglsaSAlMSwwXG4iCQkJXAorCQkiCWxpICUxKzEsMFxuIgkJCVwKKwkJIgliIDNiXG4iCQkJCVwKKwkJIi5wcmV2aW91c1xuIgkJCQlcCisJCSIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCQlcCisJCSIJLmFsaWduIDJcbiIJCQlcCisJCSIJLmxvbmcgMWIsNGJcbiIJCQlcCisJCSIJLmxvbmcgMmIsNGJcbiIJCQlcCisJCSIucHJldmlvdXMiCQkJCVwKKwkJOiAiPXIiKGVyciksICI9JnIiKHgpCQkJXAorCQk6ICJiIihhZGRyKSwgImkiKC1FRkFVTFQpLCAiMCIoZXJyKSkKKworLyogbW9yZSBjb21wbGV4IHJvdXRpbmVzICovCisKK2V4dGVybiBpbnQgX19jb3B5X3RvZnJvbV91c2VyKHZvaWQgX191c2VyICp0bywgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sCisJCQkgICAgICB1bnNpZ25lZCBsb25nIHNpemUpOworCitleHRlcm4gaW5saW5lIHVuc2lnbmVkIGxvbmcKK2NvcHlfZnJvbV91c2VyKHZvaWQgKnRvLCBjb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKQoreworCXVuc2lnbmVkIGxvbmcgb3ZlcjsKKworCWlmIChhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGZyb20sIG4pKQorCQlyZXR1cm4gX19jb3B5X3RvZnJvbV91c2VyKChfX2ZvcmNlIHZvaWQgX191c2VyICopdG8sIGZyb20sIG4pOworCWlmICgodW5zaWduZWQgbG9uZylmcm9tIDwgVEFTS19TSVpFKSB7CisJCW92ZXIgPSAodW5zaWduZWQgbG9uZylmcm9tICsgbiAtIFRBU0tfU0laRTsKKwkJcmV0dXJuIF9fY29weV90b2Zyb21fdXNlcigoX19mb3JjZSB2b2lkIF9fdXNlciAqKXRvLCBmcm9tLCBuIC0gb3ZlcikgKyBvdmVyOworCX0KKwlyZXR1cm4gbjsKK30KKworZXh0ZXJuIGlubGluZSB1bnNpZ25lZCBsb25nCitjb3B5X3RvX3VzZXIodm9pZCBfX3VzZXIgKnRvLCBjb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pCit7CisJdW5zaWduZWQgbG9uZyBvdmVyOworCisJaWYgKGFjY2Vzc19vayhWRVJJRllfV1JJVEUsIHRvLCBuKSkKKwkJcmV0dXJuIF9fY29weV90b2Zyb21fdXNlcih0bywgKF9fZm9yY2Ugdm9pZCBfX3VzZXIgKikgZnJvbSwgbik7CisJaWYgKCh1bnNpZ25lZCBsb25nKXRvIDwgVEFTS19TSVpFKSB7CisJCW92ZXIgPSAodW5zaWduZWQgbG9uZyl0byArIG4gLSBUQVNLX1NJWkU7CisJCXJldHVybiBfX2NvcHlfdG9mcm9tX3VzZXIodG8sIChfX2ZvcmNlIHZvaWQgX191c2VyICopIGZyb20sIG4gLSBvdmVyKSArIG92ZXI7CisJfQorCXJldHVybiBuOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19jb3B5X2Zyb21fdXNlcih2b2lkICp0bywgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlyZXR1cm4gX19jb3B5X3RvZnJvbV91c2VyKChfX2ZvcmNlIHZvaWQgX191c2VyICopdG8sIGZyb20sIHNpemUpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19jb3B5X3RvX3VzZXIodm9pZCBfX3VzZXIgKnRvLCBjb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJcmV0dXJuIF9fY29weV90b2Zyb21fdXNlcih0bywgKF9fZm9yY2Ugdm9pZCBfX3VzZXIgKilmcm9tLCBzaXplKTsKK30KKworI2RlZmluZSBfX2NvcHlfdG9fdXNlcl9pbmF0b21pYyBfX2NvcHlfdG9fdXNlcgorI2RlZmluZSBfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljIF9fY29weV9mcm9tX3VzZXIKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19jbGVhcl91c2VyKHZvaWQgX191c2VyICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpOworCitleHRlcm4gaW5saW5lIHVuc2lnbmVkIGxvbmcKK2NsZWFyX3VzZXIodm9pZCBfX3VzZXIgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlpZiAoYWNjZXNzX29rKFZFUklGWV9XUklURSwgYWRkciwgc2l6ZSkpCisJCXJldHVybiBfX2NsZWFyX3VzZXIoYWRkciwgc2l6ZSk7CisJaWYgKCh1bnNpZ25lZCBsb25nKWFkZHIgPCBUQVNLX1NJWkUpIHsKKwkJdW5zaWduZWQgbG9uZyBvdmVyID0gKHVuc2lnbmVkIGxvbmcpYWRkciArIHNpemUgLSBUQVNLX1NJWkU7CisJCXJldHVybiBfX2NsZWFyX3VzZXIoYWRkciwgc2l6ZSAtIG92ZXIpICsgb3ZlcjsKKwl9CisJcmV0dXJuIHNpemU7Cit9CisKK2V4dGVybiBpbnQgX19zdHJuY3B5X2Zyb21fdXNlcihjaGFyICpkc3QsIGNvbnN0IGNoYXIgX191c2VyICpzcmMsIGxvbmcgY291bnQpOworCitleHRlcm4gaW5saW5lIGxvbmcKK3N0cm5jcHlfZnJvbV91c2VyKGNoYXIgKmRzdCwgY29uc3QgY2hhciBfX3VzZXIgKnNyYywgbG9uZyBjb3VudCkKK3sKKwlpZiAoYWNjZXNzX29rKFZFUklGWV9SRUFELCBzcmMsIDEpKQorCQlyZXR1cm4gX19zdHJuY3B5X2Zyb21fdXNlcihkc3QsIHNyYywgY291bnQpOworCXJldHVybiAtRUZBVUxUOworfQorCisvKgorICogUmV0dXJuIHRoZSBzaXplIG9mIGEgc3RyaW5nIChpbmNsdWRpbmcgdGhlIGVuZGluZyAwKQorICoKKyAqIFJldHVybiAwIGZvciBlcnJvcgorICovCisKK2V4dGVybiBpbnQgX19zdHJubGVuX3VzZXIoY29uc3QgY2hhciBfX3VzZXIgKnN0ciwgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgdG9wKTsKKworLyoKKyAqIFJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIGF0IHN0ciAoaW5jbHVkaW5nIHRoZSBudWxsIGJ5dGUpLAorICogb3IgMCBpZiB3ZSBoaXQgYSBwYWdlIHdlIGNhbid0IGFjY2VzcywKKyAqIG9yIHNvbWV0aGluZyA+IGxlbiBpZiB3ZSBkaWRuJ3QgZmluZCBhIG51bGwgYnl0ZS4KKyAqCisgKiBUaGUgYHRvcCcgcGFyYW1ldGVyIHRvIF9fc3Rybmxlbl91c2VyIGlzIHRvIG1ha2Ugc3VyZSB0aGF0CisgKiB3ZSBjYW4gbmV2ZXIgb3ZlcmZsb3cgZnJvbSB0aGUgdXNlciBhcmVhIGludG8ga2VybmVsIHNwYWNlLgorICovCitleHRlcm4gX19pbmxpbmVfXyBpbnQgc3Rybmxlbl91c2VyKGNvbnN0IGNoYXIgX191c2VyICpzdHIsIGxvbmcgbGVuKQoreworCXVuc2lnbmVkIGxvbmcgdG9wID0gY3VycmVudC0+dGhyZWFkLmZzLnNlZzsKKworCWlmICgodW5zaWduZWQgbG9uZylzdHIgPiB0b3ApCisJCXJldHVybiAwOworCXJldHVybiBfX3N0cm5sZW5fdXNlcihzdHIsIGxlbiwgdG9wKTsKK30KKworI2RlZmluZSBzdHJsZW5fdXNlcihzdHIpCXN0cm5sZW5fdXNlcigoc3RyKSwgMHg3ZmZmZmZmZSkKKworI2VuZGlmICAvKiBfX0FTU0VNQkxZX18gKi8KKworI2VuZGlmCS8qIF9QUENfVUFDQ0VTU19IICovCisjZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL3Vjb250ZXh0LmggYi9pbmNsdWRlL2FzbS1wcGMvdWNvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjRiYzk4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjL3Vjb250ZXh0LmgKQEAgLTAsMCArMSwyNyBAQAorI2lmbmRlZiBfQVNNUFBDX1VDT05URVhUX0gKKyNkZWZpbmUgX0FTTVBQQ19VQ09OVEVYVF9ICisKKyNpbmNsdWRlIDxhc20vZWxmLmg+CisjaW5jbHVkZSA8YXNtL3NpZ25hbC5oPgorCitzdHJ1Y3QgbWNvbnRleHQgeworCWVsZl9ncmVnc2V0X3QJbWNfZ3JlZ3M7CisJZWxmX2ZwcmVnc2V0X3QJbWNfZnJlZ3M7CisJdW5zaWduZWQgbG9uZwltY19wYWRbMl07CisJZWxmX3ZycmVnc2V0X3QJbWNfdnJlZ3MgX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oMTYpKSk7Cit9OworCitzdHJ1Y3QgdWNvbnRleHQgeworCXVuc2lnbmVkIGxvbmcJIHVjX2ZsYWdzOworCXN0cnVjdCB1Y29udGV4dCBfX3VzZXIgKnVjX2xpbms7CisJc3RhY2tfdAkJIHVjX3N0YWNrOworCWludAkJIHVjX3BhZFs3XTsKKwlzdHJ1Y3QgbWNvbnRleHQJX191c2VyICp1Y19yZWdzOy8qIHBvaW50cyB0byB1Y19tY29udGV4dCBmaWVsZCAqLworCXNpZ3NldF90CSB1Y19zaWdtYXNrOworCS8qIGdsaWJjIGhhcyAxMDI0LWJpdCBzaWduYWwgbWFza3MsIG91cnMgYXJlIDY0LWJpdCAqLworCWludAkJIHVjX21hc2tleHRbMzBdOworCWludAkJIHVjX3BhZDJbM107CisJc3RydWN0IG1jb250ZXh0CSB1Y19tY29udGV4dDsKK307CisKKyNlbmRpZiAvKiAhX0FTTVBQQ19VQ09OVEVYVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvdW5hbGlnbmVkLmggYi9pbmNsdWRlL2FzbS1wcGMvdW5hbGlnbmVkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU1MjBkOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYy91bmFsaWduZWQuaApAQCAtMCwwICsxLDE4IEBACisjaWZkZWYgX19LRVJORUxfXworI2lmbmRlZiBfX1BQQ19VTkFMSUdORURfSAorI2RlZmluZSBfX1BQQ19VTkFMSUdORURfSAorCisvKgorICogVGhlIFBvd2VyUEMgY2FuIGRvIHVuYWxpZ25lZCBhY2Nlc3NlcyBpdHNlbGYgaW4gYmlnIGVuZGlhbiBtb2RlLgorICoKKyAqIFRoZSBzdHJhbmdlIG1hY3JvcyBhcmUgdGhlcmUgdG8gbWFrZSBzdXJlIHRoZXNlIGNhbid0CisgKiBiZSBtaXN1c2VkIGluIGEgd2F5IHRoYXQgbWFrZXMgdGhlbSBub3Qgd29yayBvbiBvdGhlcgorICogYXJjaGl0ZWN0dXJlcyB3aGVyZSB1bmFsaWduZWQgYWNjZXNzZXMgYXJlbid0IGFzIHNpbXBsZS4KKyAqLworCisjZGVmaW5lIGdldF91bmFsaWduZWQocHRyKSAoKihwdHIpKQorCisjZGVmaW5lIHB1dF91bmFsaWduZWQodmFsLCBwdHIpICgodm9pZCkoICoocHRyKSA9ICh2YWwpICkpCisKKyNlbmRpZgorI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy91bmlub3J0aC5oIGIvaW5jbHVkZS9hc20tcHBjL3VuaW5vcnRoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjczNzczMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYy91bmlub3J0aC5oCkBAIC0wLDAgKzEsMjI5IEBACisvKgorICogdW5pbm9ydGguaDogZGVmaW5pdGlvbnMgZm9yIHVzaW5nIHRoZSAiVW5pTm9ydGgiIGhvc3QgYnJpZGdlIGNoaXAKKyAqICAgICAgICAgICAgIGZyb20gQXBwbGUuIFRoaXMgY2hpcCBpcyB1c2VkIG9uICJDb3JlOTkiIG1hY2hpbmVzCisgKgkgICAgICAgVGhpcyBhbHNvIGluY2x1ZGVzIFUyIHVzZWQgb24gbW9yZSByZWNlbnQgTWFjUklTQzIvMworICogICAgICAgICAgICAgbWFjaGluZXMgYW5kIFUzIChHNSkgCisgKgorICovCisjaWZkZWYgX19LRVJORUxfXworI2lmbmRlZiBfX0FTTV9VTklOT1JUSF9IX18KKyNkZWZpbmUgX19BU01fVU5JTk9SVEhfSF9fCisKKy8qCisgKiBVbmktTiBhbmQgVTMgY29uZmlnIHNwYWNlIHJlZy4gZGVmaW5pdGlvbnMKKyAqCisgKiAoTGl0dGxlIGVuZGlhbikKKyAqLworCisvKiBBZGRyZXNzIHJhbmdlcyBzZWxlY3Rpb24uIFRoaXMgb25lIHNob3VsZCB3b3JrIHdpdGggQmFuZGl0IHRvbyAqLworLyogTm90IFUzICovCisjZGVmaW5lIFVOSV9OX0FERFJfU0VMRUNUCQkweDQ4CisjZGVmaW5lIFVOSV9OX0FERFJfQ09BUlNFX01BU0sJCTB4ZmZmZjAwMDAJLyogMjU2TWIgcmVnaW9ucyBhdCAqMDAwMDAwMCAqLworI2RlZmluZSBVTklfTl9BRERSX0ZJTkVfTUFTSwkJMHgwMDAwZmZmZgkvKiAgMTZNYiByZWdpb25zIGF0IGYqMDAwMDAwICovCisKKy8qIEFHUCByZWdpc3RlcnMgKi8KKy8qIE5vdCBVMyAqLworI2RlZmluZSBVTklfTl9DRkdfR0FSVF9CQVNFCQkweDhjCisjZGVmaW5lIFVOSV9OX0NGR19BR1BfQkFTRQkJMHg5MAorI2RlZmluZSBVTklfTl9DRkdfR0FSVF9DVFJMCQkweDk0CisjZGVmaW5lIFVOSV9OX0NGR19JTlRFUk5BTF9TVEFUVVMJMHg5OAorI2RlZmluZSBVTklfTl9DRkdfR0FSVF9EVU1NWV9QQUdFCTB4YTQKKworLyogVU5JX05fQ0ZHX0dBUlRfQ1RSTCBiaXRzIGRlZmluaXRpb25zICovCisjZGVmaW5lIFVOSV9OX0NGR19HQVJUX0lOVkFMCQkweDAwMDAwMDAxCisjZGVmaW5lIFVOSV9OX0NGR19HQVJUX0VOQUJMRQkJMHgwMDAwMDEwMAorI2RlZmluZSBVTklfTl9DRkdfR0FSVF8yeFJFU0VUCQkweDAwMDEwMDAwCisjZGVmaW5lIFVOSV9OX0NGR19HQVJUX0RJU1NCQURFVAkweDAwMDIwMDAwCisvKiBUaGUgZm9sbG93aW5nIHNlZW1zIHRvIG9ubHkgYmUgdXNlZCBvbmx5IG9uIFUzIDxqLmdsaXNzZUBnbWFpbC5jb20+ICovCisjZGVmaW5lIFUzX05fQ0ZHX0dBUlRfU1lOQ01PREUJCTB4MDAwNDAwMDAKKyNkZWZpbmUgVTNfTl9DRkdfR0FSVF9QRVJGUkQJCTB4MDAwODAwMDAKKyNkZWZpbmUgVTNfTl9DRkdfR0FSVF9CMkJHTlQJCTB4MDAyMDAwMDAKKyNkZWZpbmUgVTNfTl9DRkdfR0FSVF9GQVNURERSCQkweDAwNDAwMDAwCisKKy8qIE15IHVuZGVyc3RhbmRpbmcgb2YgVW5pTm9ydGggQUdQIGFzIG9mIFVuaU5vcnRoIHJldiAxLjB4LAorICogcmV2aXNpb24gMS41ICh4NCBBR1ApIG1heSBuZWVkIGZ1cnRoZXIgY2hhbmdlcy4KKyAqCisgKiBBR1BfQkFTRSByZWdpc3RlciBjb250YWlucyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBBR1AgYXBlcnR1cmUgb24KKyAqIHRoZSBBR1AgYnVzLiBJdCBkb2Vzbid0IHNlZW0gdG8gYmUgdmlzaWJsZSB0byB0aGUgQ1BVIGFzIG9mIFVuaU5vcnRoIDEueCwKKyAqIGV2ZW4gaWYgZGVjb2Rpbmcgb2YgdGhpcyBhZGRyZXNzIHJhbmdlIGlzIGVuYWJsZWQgaW4gdGhlIGFkZHJlc3Mgc2VsZWN0CisgKiByZWdpc3Rlci4gQXBwYXJlbnRseSwgdGhlIG9ubHkgc3VwcG9ydGVkIGJhc2VzIGFyZSAyNTZNYiBtdWx0aXBsZXMKKyAqIChoaWdoIDQgYml0cyBvZiB0aGF0IHJlZ2lzdGVyKS4KKyAqCisgKiBHQVJUX0JBU0UgcmVnaXN0ZXIgYXBwZWFyIHRvIGNvbnRhaW4gdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIEdBUlQKKyAqIGluIHN5c3RlbSBtZW1vcnkgaW4gdGhlIGhpZ2ggYWRkcmVzcyBiaXRzIChwYWdlIGFsaWduZWQpLCBhbmQgdGhlCisgKiBHQVJUIHNpemUgaW4gdGhlIGxvdyBvcmRlciBiaXRzIChudW1iZXIgb2YgR0FSVCBwYWdlcykKKyAqCisgKiBUaGUgR0FSVCBmb3JtYXQgaXRzZWxmIGlzIG9uZSAzMmJpdHMgd29yZCBwZXIgcGh5c2ljYWwgbWVtb3J5IHBhZ2UuCisgKiBUaGlzIHdvcmQgY29udGFpbnMsIGluIGxpdHRsZS1lbmRpYW4gZm9ybWF0ICghISEpLCB0aGUgcGh5c2ljYWwgYWRkcmVzcworICogb2YgdGhlIHBhZ2UgaW4gdGhlIGhpZ2ggYml0cywgYW5kIHdoYXQgYXBwZWFycyB0byBiZSBhbiAiZW5hYmxlIiBiaXQKKyAqIGluIHRoZSBMU0IgYml0ICgwKSB0aGF0IG11c3QgYmUgc2V0IHRvIDEgd2hlbiB0aGUgZW50cnkgaXMgdmFsaWQuCisgKgorICogT2J2aW91c2x5LCB0aGUgR0FSVCBpcyBub3QgY2FjaGUgY29oZXJlbnQgYW5kIHNvIGFueSBjaGFuZ2UgdG8gaXQKKyAqIG11c3QgYmUgZmx1c2hlZCB0byBtZW1vcnkgKG9yIG1heWJlIGp1c3QgbWFrZSB0aGUgR0FSVCBzcGFjZSBub24KKyAqIGNhY2hhYmxlKS4gQUdQIG1lbW9yeSBpdHNlbGYgZG9lbnMndCBzZWVtIHRvIGJlIGNhY2hlIGNvaGVyZW50IG5laXRoZXIuCisgKgorICogSW4gb3JkZXIgdG8gaW52YWxpZGF0ZSB0aGUgR0FSVCAod2hpY2ggaXMgcHJvYmFibHkgbmVjZXNzYXJ5IHRvIGludmFsCisgKiB0aGUgYnJpZGdlIGludGVybmFsIFRMQnMpLCB0aGUgZm9sbG93aW5nIHNlcXVlbmNlIGhhcyB0byBiZSB3cml0dGVuLAorICogaW4gb3JkZXIsIHRvIHRoZSBHQVJUX0NUUkwgcmVnaXN0ZXI6CisgKgorICogICBVTklfTl9DRkdfR0FSVF9FTkFCTEUgfCBVTklfTl9DRkdfR0FSVF9JTlZBTAorICogICBVTklfTl9DRkdfR0FSVF9FTkFCTEUKKyAqICAgVU5JX05fQ0ZHX0dBUlRfRU5BQkxFIHwgVU5JX05fQ0ZHX0dBUlRfMnhSRVNFVAorICogICBVTklfTl9DRkdfR0FSVF9FTkFCTEUKKyAqCisgKiBBcyBmYXIgYXMgQUdQICJmZWF0dXJlcyIgYXJlIGNvbmNlcm5lZCwgaXQgbG9va3MgbGlrZSBmYXN0IHdyaXRlIG1heQorICogbm90IGJlIHN1cHBvcnRlZCBidXQgdGhpcyBoYXMgdG8gYmUgY29uZmlybWVkLgorICoKKyAqIFR1cm5pbmcgb24gQUdQIHNlZW0gdG8gcmVxdWlyZSBhIGRvdWJsZSBpbnZhbGlkYXRlIG9wZXJhdGlvbiwgb25lIGJlZm9yZQorICogc2V0dGluZyB0aGUgQUdQIGNvbW1hbmQgcmVnaXN0ZXIsIG9uIGFmdGVyLgorICoKKyAqIFR1cm5pbmcgb2ZmIEFHUCBzZWVtcyB0byByZXF1aXJlIHRoZSBmb2xsb3dpbmcgc2VxdWVuY2U6IGZpcnN0IHdhaXQKKyAqIGZvciB0aGUgQUdQIHRvIGJlIGlkbGUgYnkgcmVhZGluZyB0aGUgaW50ZXJuYWwgc3RhdHVzIHJlZ2lzdGVyLCB0aGVuCisgKiB3cml0ZSBpbiB0aGF0IG9yZGVyIHRvIHRoZSBHQVJUX0NUUkwgcmVnaXN0ZXI6CisgKgorICogICBVTklfTl9DRkdfR0FSVF9FTkFCTEUgfCBVTklfTl9DRkdfR0FSVF9JTlZBTAorICogICAwCisgKiAgIFVOSV9OX0NGR19HQVJUXzJ4UkVTRVQKKyAqICAgMAorICovCisKKy8qCisgKiBVbmktTiBtZW1vcnkgbWFwcGVkIHJlZy4gZGVmaW5pdGlvbnMKKyAqCisgKiBUaG9zZSByZWdpc3RlcnMgYXJlIEJpZy1FbmRpYW4gISEKKyAqCisgKiBUaGVpciBtZWFuaW5nIGNvbWUgZnJvbSBlaXRoZXIgRGFyd2luIGFuZC9vciBmcm9tIGV4cGVyaW1lbnRzIEkgbWFkZSB3aXRoCisgKiB0aGUgYm9vdHJvbSwgSSdtIG5vdCBzdXJlIGFib3V0IHRoZWlyIGV4YWN0IG1lYW5pbmcgeWV0CisgKgorICovCisKKy8qIFZlcnNpb24gb2YgdGhlIFVuaU5vcnRoIGNoaXAgKi8KKyNkZWZpbmUgVU5JX05fVkVSU0lPTgkJCTB4MDAwMAkJLyogS25vd24gdmVyc2lvbnM6IDMsNyBhbmQgOCAqLworCisjZGVmaW5lIFVOSV9OX1ZFUlNJT05fMTA3CQkweDAwMDMJCS8qIDEuMC43ICovCisjZGVmaW5lIFVOSV9OX1ZFUlNJT05fMTBBCQkweDAwMDcJCS8qIDEuMC4xMCAqLworI2RlZmluZSBVTklfTl9WRVJTSU9OXzE1MAkJMHgwMDExCQkvKiAxLjUgKi8KKyNkZWZpbmUgVU5JX05fVkVSU0lPTl8yMDAJCTB4MDAyNAkJLyogMi4wICovCisjZGVmaW5lIFVOSV9OX1ZFUlNJT05fUEFOR0VBCQkweDAwQzAJCS8qIEludGVncmF0ZWQgVTEgKyBLICovCisjZGVmaW5lIFVOSV9OX1ZFUlNJT05fSU5UUkVQSUQJCTB4MDBEMgkJLyogSW50ZWdyYXRlZCBVMiArIEsgKi8KKyNkZWZpbmUgVU5JX05fVkVSU0lPTl8zMDAJCTB4MDAzMAkJLyogMy4wIChVMyBvbiBHNSkgKi8KKworLyogVGhpcyByZWdpc3RlciBpcyB1c2VkIHRvIGVuYWJsZS9kaXNhYmxlIHZhcmlvdXMgY2xvY2tzICovCisjZGVmaW5lIFVOSV9OX0NMT0NLX0NOVEwJCTB4MDAyMAorI2RlZmluZSBVTklfTl9DTE9DS19DTlRMX1BDSQkJMHgwMDAwMDAwMQkvKiBQQ0kyIGNsb2NrIGNvbnRyb2wgKi8KKyNkZWZpbmUgVU5JX05fQ0xPQ0tfQ05UTF9HTUFDCQkweDAwMDAwMDAyCS8qIEdNQUMgY2xvY2sgY29udHJvbCAqLworI2RlZmluZSBVTklfTl9DTE9DS19DTlRMX0ZXCQkweDAwMDAwMDA0CS8qIEZpcmVXaXJlIGNsb2NrIGNvbnRyb2wgKi8KKyNkZWZpbmUgVU5JX05fQ0xPQ0tfQ05UTF9BVEExMDAJCTB4MDAwMDAwMTAJLyogQVRBLTEwMCBjbG9jayBjb250cm9sIChVMikgKi8KKworLyogUG93ZXIgTWFuYWdlbWVudCBjb250cm9sICovCisjZGVmaW5lIFVOSV9OX1BPV0VSX01HVAkJCTB4MDAzMAorI2RlZmluZSBVTklfTl9QT1dFUl9NR1RfTk9STUFMCQkweDAwCisjZGVmaW5lIFVOSV9OX1BPV0VSX01HVF9JRExFMgkJMHgwMQorI2RlZmluZSBVTklfTl9QT1dFUl9NR1RfU0xFRVAJCTB4MDIKKworLyogVGhpcyByZWdpc3RlciBpcyBjb25maWd1cmVkIGJ5IERhcndpbiBkZXBlbmRpbmcgb24gdGhlIFVuaU4KKyAqIHJldmlzaW9uCisgKi8KKyNkZWZpbmUgVU5JX05fQVJCX0NUUkwJCQkweDAwNDAKKyNkZWZpbmUgVU5JX05fQVJCX0NUUkxfUUFDS19ERUxBWV9TSElGVAkxNQorI2RlZmluZSBVTklfTl9BUkJfQ1RSTF9RQUNLX0RFTEFZX01BU0sJMHgwZTFmODAwMAorI2RlZmluZSBVTklfTl9BUkJfQ1RSTF9RQUNLX0RFTEFZCTB4MzAKKyNkZWZpbmUgVU5JX05fQVJCX0NUUkxfUUFDS19ERUxBWTEwNQkweDAwCisKKy8qIFRoaXMgb25lIF9taWdodF8gcmV0dXJuIHRoZSBDUFUgbnVtYmVyIG9mIHRoZSBDUFUgcmVhZGluZyBpdDsKKyAqIHRoZSBib290Uk9NIGRlY2lkZXMgd2hldGhlciB0byBib290IG9yIHRvIHNsZWVwL3NwaW5sb29wIGRlcGVuZGluZworICogb24gdGhpcyByZWdpc3RlciBiZWVpbmcgMCBvciBub3QKKyAqLworI2RlZmluZSBVTklfTl9DUFVfTlVNQkVSCQkweDAwNTAKKworLyogVGhpcyByZWdpc3RlciBhcHBlYXIgdG8gYmUgcmVhZCBieSB0aGUgYm9vdFJPTSB0byBkZWNpZGUgd2hhdAorICogIHRvIGRvIG9uIGEgbm9uLXJlY292ZXJhYmxlIHJlc2V0IChwb3dlcnVwIG9yIHdha2V1cCkKKyAqLworI2RlZmluZSBVTklfTl9IV0lOSVRfU1RBVEUJCTB4MDA3MAorI2RlZmluZSBVTklfTl9IV0lOSVRfU1RBVEVfU0xFRVBJTkcJMHgwMQorI2RlZmluZSBVTklfTl9IV0lOSVRfU1RBVEVfUlVOTklORwkweDAyCisvKiBUaGlzIGxhc3QgYml0IGFwcGVhciB0byBiZSB1c2VkIGJ5IHRoZSBib290Uk9NIHRvIGtub3cgdGhlIHNlY29uZAorICogQ1BVIGhhcyBzdGFydGVkIGFuZCB3aWxsIGVudGVyIGl0J3Mgc2xlZXAgbG9vcCB3aXRoIElQPTAKKyAqLworI2RlZmluZSBVTklfTl9IV0lOSVRfU1RBVEVfQ1BVMV9GTEFHCTB4MTAwMDAwMDAKKworLyogVGhpcyByZWdpc3RlciBjb250cm9scyBBQUNLIGRlbGF5LCB3aGljaCBpcyBzZXQgd2hlbiAyMDA0IGlCb29rL1Bvd2VyQm9vaworICogaXMgaW4gbG93IHNwZWVkIG1vZGUuCisgKi8KKyNkZWZpbmUgVU5JX05fQUFDS19ERUxBWQkJMHgwMTAwCisjZGVmaW5lIFVOSV9OX0FBQ0tfREVMQVlfRU5BQkxFCQkweDAwMDAwMDAxCisKKy8qIENsb2NrIHN0YXR1cyBmb3IgSW50cmVwaWQgKi8KKyNkZWZpbmUgVU5JX05fQ0xPQ0tfU1RPUF9TVEFUVVMwCTB4MDE1MAorI2RlZmluZSBVTklfTl9DTE9DS19TVE9QUEVEX0VYVEFHUAkweDAwMjAwMDAwCisjZGVmaW5lIFVOSV9OX0NMT0NLX1NUT1BQRURfQUdQREVMCTB4MDAxMDAwMDAKKyNkZWZpbmUgVU5JX05fQ0xPQ0tfU1RPUFBFRF9JMlMwXzQ1XzQ5CTB4MDAwODAwMDAKKyNkZWZpbmUgVU5JX05fQ0xPQ0tfU1RPUFBFRF9JMlMwXzE4CTB4MDAwNDAwMDAKKyNkZWZpbmUgVU5JX05fQ0xPQ0tfU1RPUFBFRF9JMlMxXzQ1XzQ5CTB4MDAwMjAwMDAKKyNkZWZpbmUgVU5JX05fQ0xPQ0tfU1RPUFBFRF9JMlMxXzE4CTB4MDAwMTAwMDAKKyNkZWZpbmUgVU5JX05fQ0xPQ0tfU1RPUFBFRF9USU1FUgkweDAwMDA4MDAwCisjZGVmaW5lIFVOSV9OX0NMT0NLX1NUT1BQRURfU0NDX1JUQ0xLMTgJMHgwMDAwNDAwMAorI2RlZmluZSBVTklfTl9DTE9DS19TVE9QUEVEX1NDQ19SVENMSzMyCTB4MDAwMDIwMDAKKyNkZWZpbmUgVU5JX05fQ0xPQ0tfU1RPUFBFRF9TQ0NfVklBMzIJMHgwMDAwMTAwMAorI2RlZmluZSBVTklfTl9DTE9DS19TVE9QUEVEX1NDQ19TTE9UMAkweDAwMDAwODAwCisjZGVmaW5lIFVOSV9OX0NMT0NLX1NUT1BQRURfU0NDX1NMT1QxCTB4MDAwMDA0MDAKKyNkZWZpbmUgVU5JX05fQ0xPQ0tfU1RPUFBFRF9TQ0NfU0xPVDIJMHgwMDAwMDIwMAorI2RlZmluZSBVTklfTl9DTE9DS19TVE9QUEVEX1BDSV9GQkNMS08JMHgwMDAwMDEwMAorI2RlZmluZSBVTklfTl9DTE9DS19TVE9QUEVEX1ZFTzAJMHgwMDAwMDA4MAorI2RlZmluZSBVTklfTl9DTE9DS19TVE9QUEVEX1ZFTzEJMHgwMDAwMDA0MAorI2RlZmluZSBVTklfTl9DTE9DS19TVE9QUEVEX1VTQjAJMHgwMDAwMDAyMAorI2RlZmluZSBVTklfTl9DTE9DS19TVE9QUEVEX1VTQjEJMHgwMDAwMDAxMAorI2RlZmluZSBVTklfTl9DTE9DS19TVE9QUEVEX1VTQjIJMHgwMDAwMDAwOAorI2RlZmluZSBVTklfTl9DTE9DS19TVE9QUEVEXzMyCQkweDAwMDAwMDA0CisjZGVmaW5lIFVOSV9OX0NMT0NLX1NUT1BQRURfNDUJCTB4MDAwMDAwMDIKKyNkZWZpbmUgVU5JX05fQ0xPQ0tfU1RPUFBFRF80OQkJMHgwMDAwMDAwMQorCisjZGVmaW5lIFVOSV9OX0NMT0NLX1NUT1BfU1RBVFVTMQkweDAxNjAKKyNkZWZpbmUgVU5JX05fQ0xPQ0tfU1RPUFBFRF9QTEw0UkVGCTB4MDAwODAwMDAKKyNkZWZpbmUgVU5JX05fQ0xPQ0tfU1RPUFBFRF9DUFVERUwJMHgwMDA0MDAwMAorI2RlZmluZSBVTklfTl9DTE9DS19TVE9QUEVEX0NQVQkJMHgwMDAyMDAwMAorI2RlZmluZSBVTklfTl9DTE9DS19TVE9QUEVEX0JVRl9SRUZDS08JMHgwMDAxMDAwMAorI2RlZmluZSBVTklfTl9DTE9DS19TVE9QUEVEX1BDSTIJMHgwMDAwODAwMAorI2RlZmluZSBVTklfTl9DTE9DS19TVE9QUEVEX0ZXCQkweDAwMDA0MDAwCisjZGVmaW5lIFVOSV9OX0NMT0NLX1NUT1BQRURfR0IJCTB4MDAwMDIwMDAKKyNkZWZpbmUgVU5JX05fQ0xPQ0tfU1RPUFBFRF9BVEE2NgkweDAwMDAxMDAwCisjZGVmaW5lIFVOSV9OX0NMT0NLX1NUT1BQRURfQVRBMTAwCTB4MDAwMDA4MDAKKyNkZWZpbmUgVU5JX05fQ0xPQ0tfU1RPUFBFRF9NQVgJCTB4MDAwMDA0MDAKKyNkZWZpbmUgVU5JX05fQ0xPQ0tfU1RPUFBFRF9QQ0kxCTB4MDAwMDAyMDAKKyNkZWZpbmUgVU5JX05fQ0xPQ0tfU1RPUFBFRF9LTFBDSQkweDAwMDAwMTAwCisjZGVmaW5lIFVOSV9OX0NMT0NLX1NUT1BQRURfVVNCMFBDSQkweDAwMDAwMDgwCisjZGVmaW5lIFVOSV9OX0NMT0NLX1NUT1BQRURfVVNCMVBDSQkweDAwMDAwMDQwCisjZGVmaW5lIFVOSV9OX0NMT0NLX1NUT1BQRURfVVNCMlBDSQkweDAwMDAwMDIwCisjZGVmaW5lIFVOSV9OX0NMT0NLX1NUT1BQRURfN1BDSTEJMHgwMDAwMDAwOAorI2RlZmluZSBVTklfTl9DTE9DS19TVE9QUEVEX0FHUAkJMHgwMDAwMDAwNAorI2RlZmluZSBVTklfTl9DTE9DS19TVE9QUEVEX1BDSTAJMHgwMDAwMDAwMgorI2RlZmluZSBVTklfTl9DTE9DS19TVE9QUEVEXzE4CQkweDAwMDAwMDAxCisKKy8qIEludHJlcGlkIHJlZ2lzdGUgdG8gT0YgZG8tcGxhdGZvcm0tY2xvY2tzcHJlYWRpbmcgKi8KKyNkZWZpbmUgVU5JX05fQ0xPQ0tfU1BSRUFESU5HCQkweDE5MAorCisvKiBVbmlub3J0aCAxLjUgcmV2LiBoYXMgYWRkaXRpb25hbCBwZXJmLiBtb25pdG9yIHJlZ2lzdGVycyBhdCAweGYwMC0weGY1MCAqLworCisKKy8qCisgKiBVMyBzcGVjaWZpYyByZWdpc3RlcnMKKyAqLworCisKKy8qIFUzIFRvZ2dsZSAqLworI2RlZmluZSBVM19UT0dHTEVfUkVHCQkJMHgwMGUwCisjZGVmaW5lIFUzX1BNQ19TVEFSVF9TVE9QCQkweDAwMDEKKyNkZWZpbmUgVTNfTVBJQ19SRVNFVAkJCTB4MDAwMgorI2RlZmluZSBVM19NUElDX09VVFBVVF9FTkFCTEUJCTB4MDAwNAorCisvKiBVMyBBUEkgUEhZIENvbmZpZyAxICovCisjZGVmaW5lIFUzX0FQSV9QSFlfQ09ORklHXzEJCTB4MjMwMzAKKworLyogVTMgSHlwZXJUcmFuc3BvcnQgcmVnaXN0ZXJzICovCisjZGVmaW5lIFUzX0hUX0NPTkZJR19CQVNFICAgICAgCQkweDcwMDAwCisjZGVmaW5lIFUzX0hUX0xJTktfQ09NTUFORAkJMHgxMDAKKyNkZWZpbmUgVTNfSFRfTElOS19DT05GSUcJCTB4MTEwCisjZGVmaW5lIFUzX0hUX0xJTktfRlJFUQkJCTB4MTIwCisKKyNlbmRpZiAvKiBfX0FTTV9VTklOT1JUSF9IX18gKi8KKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1wcGMvdW5pc3RkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M1MWU1YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYy91bmlzdGQuaApAQCAtMCwwICsxLDQ4OCBAQAorI2lmbmRlZiBfQVNNX1BQQ19VTklTVERfSF8KKyNkZWZpbmUgX0FTTV9QUENfVU5JU1REX0hfCisKKy8qCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHN5c3RlbSBjYWxsIG51bWJlcnMuCisgKi8KKyNkZWZpbmUgX19OUl9yZXN0YXJ0X3N5c2NhbGwJICAwCisjZGVmaW5lIF9fTlJfZXhpdAkJICAxCisjZGVmaW5lIF9fTlJfZm9yawkJICAyCisjZGVmaW5lIF9fTlJfcmVhZAkJICAzCisjZGVmaW5lIF9fTlJfd3JpdGUJCSAgNAorI2RlZmluZSBfX05SX29wZW4JCSAgNQorI2RlZmluZSBfX05SX2Nsb3NlCQkgIDYKKyNkZWZpbmUgX19OUl93YWl0cGlkCQkgIDcKKyNkZWZpbmUgX19OUl9jcmVhdAkJICA4CisjZGVmaW5lIF9fTlJfbGluawkJICA5CisjZGVmaW5lIF9fTlJfdW5saW5rCQkgMTAKKyNkZWZpbmUgX19OUl9leGVjdmUJCSAxMQorI2RlZmluZSBfX05SX2NoZGlyCQkgMTIKKyNkZWZpbmUgX19OUl90aW1lCQkgMTMKKyNkZWZpbmUgX19OUl9ta25vZAkJIDE0CisjZGVmaW5lIF9fTlJfY2htb2QJCSAxNQorI2RlZmluZSBfX05SX2xjaG93bgkJIDE2CisjZGVmaW5lIF9fTlJfYnJlYWsJCSAxNworI2RlZmluZSBfX05SX29sZHN0YXQJCSAxOAorI2RlZmluZSBfX05SX2xzZWVrCQkgMTkKKyNkZWZpbmUgX19OUl9nZXRwaWQJCSAyMAorI2RlZmluZSBfX05SX21vdW50CQkgMjEKKyNkZWZpbmUgX19OUl91bW91bnQJCSAyMgorI2RlZmluZSBfX05SX3NldHVpZAkJIDIzCisjZGVmaW5lIF9fTlJfZ2V0dWlkCQkgMjQKKyNkZWZpbmUgX19OUl9zdGltZQkJIDI1CisjZGVmaW5lIF9fTlJfcHRyYWNlCQkgMjYKKyNkZWZpbmUgX19OUl9hbGFybQkJIDI3CisjZGVmaW5lIF9fTlJfb2xkZnN0YXQJCSAyOAorI2RlZmluZSBfX05SX3BhdXNlCQkgMjkKKyNkZWZpbmUgX19OUl91dGltZQkJIDMwCisjZGVmaW5lIF9fTlJfc3R0eQkJIDMxCisjZGVmaW5lIF9fTlJfZ3R0eQkJIDMyCisjZGVmaW5lIF9fTlJfYWNjZXNzCQkgMzMKKyNkZWZpbmUgX19OUl9uaWNlCQkgMzQKKyNkZWZpbmUgX19OUl9mdGltZQkJIDM1CisjZGVmaW5lIF9fTlJfc3luYwkJIDM2CisjZGVmaW5lIF9fTlJfa2lsbAkJIDM3CisjZGVmaW5lIF9fTlJfcmVuYW1lCQkgMzgKKyNkZWZpbmUgX19OUl9ta2RpcgkJIDM5CisjZGVmaW5lIF9fTlJfcm1kaXIJCSA0MAorI2RlZmluZSBfX05SX2R1cAkJIDQxCisjZGVmaW5lIF9fTlJfcGlwZQkJIDQyCisjZGVmaW5lIF9fTlJfdGltZXMJCSA0MworI2RlZmluZSBfX05SX3Byb2YJCSA0NAorI2RlZmluZSBfX05SX2JyawkJIDQ1CisjZGVmaW5lIF9fTlJfc2V0Z2lkCQkgNDYKKyNkZWZpbmUgX19OUl9nZXRnaWQJCSA0NworI2RlZmluZSBfX05SX3NpZ25hbAkJIDQ4CisjZGVmaW5lIF9fTlJfZ2V0ZXVpZAkJIDQ5CisjZGVmaW5lIF9fTlJfZ2V0ZWdpZAkJIDUwCisjZGVmaW5lIF9fTlJfYWNjdAkJIDUxCisjZGVmaW5lIF9fTlJfdW1vdW50MgkJIDUyCisjZGVmaW5lIF9fTlJfbG9jawkJIDUzCisjZGVmaW5lIF9fTlJfaW9jdGwJCSA1NAorI2RlZmluZSBfX05SX2ZjbnRsCQkgNTUKKyNkZWZpbmUgX19OUl9tcHgJCSA1NgorI2RlZmluZSBfX05SX3NldHBnaWQJCSA1NworI2RlZmluZSBfX05SX3VsaW1pdAkJIDU4CisjZGVmaW5lIF9fTlJfb2xkb2xkdW5hbWUJIDU5CisjZGVmaW5lIF9fTlJfdW1hc2sJCSA2MAorI2RlZmluZSBfX05SX2Nocm9vdAkJIDYxCisjZGVmaW5lIF9fTlJfdXN0YXQJCSA2MgorI2RlZmluZSBfX05SX2R1cDIJCSA2MworI2RlZmluZSBfX05SX2dldHBwaWQJCSA2NAorI2RlZmluZSBfX05SX2dldHBncnAJCSA2NQorI2RlZmluZSBfX05SX3NldHNpZAkJIDY2CisjZGVmaW5lIF9fTlJfc2lnYWN0aW9uCQkgNjcKKyNkZWZpbmUgX19OUl9zZ2V0bWFzawkJIDY4CisjZGVmaW5lIF9fTlJfc3NldG1hc2sJCSA2OQorI2RlZmluZSBfX05SX3NldHJldWlkCQkgNzAKKyNkZWZpbmUgX19OUl9zZXRyZWdpZAkJIDcxCisjZGVmaW5lIF9fTlJfc2lnc3VzcGVuZAkJIDcyCisjZGVmaW5lIF9fTlJfc2lncGVuZGluZwkJIDczCisjZGVmaW5lIF9fTlJfc2V0aG9zdG5hbWUJIDc0CisjZGVmaW5lIF9fTlJfc2V0cmxpbWl0CQkgNzUKKyNkZWZpbmUgX19OUl9nZXRybGltaXQJCSA3NgorI2RlZmluZSBfX05SX2dldHJ1c2FnZQkJIDc3CisjZGVmaW5lIF9fTlJfZ2V0dGltZW9mZGF5CSA3OAorI2RlZmluZSBfX05SX3NldHRpbWVvZmRheQkgNzkKKyNkZWZpbmUgX19OUl9nZXRncm91cHMJCSA4MAorI2RlZmluZSBfX05SX3NldGdyb3VwcwkJIDgxCisjZGVmaW5lIF9fTlJfc2VsZWN0CQkgODIKKyNkZWZpbmUgX19OUl9zeW1saW5rCQkgODMKKyNkZWZpbmUgX19OUl9vbGRsc3RhdAkJIDg0CisjZGVmaW5lIF9fTlJfcmVhZGxpbmsJCSA4NQorI2RlZmluZSBfX05SX3VzZWxpYgkJIDg2CisjZGVmaW5lIF9fTlJfc3dhcG9uCQkgODcKKyNkZWZpbmUgX19OUl9yZWJvb3QJCSA4OAorI2RlZmluZSBfX05SX3JlYWRkaXIJCSA4OQorI2RlZmluZSBfX05SX21tYXAJCSA5MAorI2RlZmluZSBfX05SX211bm1hcAkJIDkxCisjZGVmaW5lIF9fTlJfdHJ1bmNhdGUJCSA5MgorI2RlZmluZSBfX05SX2Z0cnVuY2F0ZQkJIDkzCisjZGVmaW5lIF9fTlJfZmNobW9kCQkgOTQKKyNkZWZpbmUgX19OUl9mY2hvd24JCSA5NQorI2RlZmluZSBfX05SX2dldHByaW9yaXR5CSA5NgorI2RlZmluZSBfX05SX3NldHByaW9yaXR5CSA5NworI2RlZmluZSBfX05SX3Byb2ZpbAkJIDk4CisjZGVmaW5lIF9fTlJfc3RhdGZzCQkgOTkKKyNkZWZpbmUgX19OUl9mc3RhdGZzCQkxMDAKKyNkZWZpbmUgX19OUl9pb3Blcm0JCTEwMQorI2RlZmluZSBfX05SX3NvY2tldGNhbGwJCTEwMgorI2RlZmluZSBfX05SX3N5c2xvZwkJMTAzCisjZGVmaW5lIF9fTlJfc2V0aXRpbWVyCQkxMDQKKyNkZWZpbmUgX19OUl9nZXRpdGltZXIJCTEwNQorI2RlZmluZSBfX05SX3N0YXQJCTEwNgorI2RlZmluZSBfX05SX2xzdGF0CQkxMDcKKyNkZWZpbmUgX19OUl9mc3RhdAkJMTA4CisjZGVmaW5lIF9fTlJfb2xkdW5hbWUJCTEwOQorI2RlZmluZSBfX05SX2lvcGwJCTExMAorI2RlZmluZSBfX05SX3ZoYW5ndXAJCTExMQorI2RlZmluZSBfX05SX2lkbGUJCTExMgorI2RlZmluZSBfX05SX3ZtODYJCTExMworI2RlZmluZSBfX05SX3dhaXQ0CQkxMTQKKyNkZWZpbmUgX19OUl9zd2Fwb2ZmCQkxMTUKKyNkZWZpbmUgX19OUl9zeXNpbmZvCQkxMTYKKyNkZWZpbmUgX19OUl9pcGMJCTExNworI2RlZmluZSBfX05SX2ZzeW5jCQkxMTgKKyNkZWZpbmUgX19OUl9zaWdyZXR1cm4JCTExOQorI2RlZmluZSBfX05SX2Nsb25lCQkxMjAKKyNkZWZpbmUgX19OUl9zZXRkb21haW5uYW1lCTEyMQorI2RlZmluZSBfX05SX3VuYW1lCQkxMjIKKyNkZWZpbmUgX19OUl9tb2RpZnlfbGR0CQkxMjMKKyNkZWZpbmUgX19OUl9hZGp0aW1leAkJMTI0CisjZGVmaW5lIF9fTlJfbXByb3RlY3QJCTEyNQorI2RlZmluZSBfX05SX3NpZ3Byb2NtYXNrCTEyNgorI2RlZmluZSBfX05SX2NyZWF0ZV9tb2R1bGUJMTI3CisjZGVmaW5lIF9fTlJfaW5pdF9tb2R1bGUJMTI4CisjZGVmaW5lIF9fTlJfZGVsZXRlX21vZHVsZQkxMjkKKyNkZWZpbmUgX19OUl9nZXRfa2VybmVsX3N5bXMJMTMwCisjZGVmaW5lIF9fTlJfcXVvdGFjdGwJCTEzMQorI2RlZmluZSBfX05SX2dldHBnaWQJCTEzMgorI2RlZmluZSBfX05SX2ZjaGRpcgkJMTMzCisjZGVmaW5lIF9fTlJfYmRmbHVzaAkJMTM0CisjZGVmaW5lIF9fTlJfc3lzZnMJCTEzNQorI2RlZmluZSBfX05SX3BlcnNvbmFsaXR5CTEzNgorI2RlZmluZSBfX05SX2Fmc19zeXNjYWxsCTEzNyAvKiBTeXNjYWxsIGZvciBBbmRyZXcgRmlsZSBTeXN0ZW0gKi8KKyNkZWZpbmUgX19OUl9zZXRmc3VpZAkJMTM4CisjZGVmaW5lIF9fTlJfc2V0ZnNnaWQJCTEzOQorI2RlZmluZSBfX05SX19sbHNlZWsJCTE0MAorI2RlZmluZSBfX05SX2dldGRlbnRzCQkxNDEKKyNkZWZpbmUgX19OUl9fbmV3c2VsZWN0CQkxNDIKKyNkZWZpbmUgX19OUl9mbG9jawkJMTQzCisjZGVmaW5lIF9fTlJfbXN5bmMJCTE0NAorI2RlZmluZSBfX05SX3JlYWR2CQkxNDUKKyNkZWZpbmUgX19OUl93cml0ZXYJCTE0NgorI2RlZmluZSBfX05SX2dldHNpZAkJMTQ3CisjZGVmaW5lIF9fTlJfZmRhdGFzeW5jCQkxNDgKKyNkZWZpbmUgX19OUl9fc3lzY3RsCQkxNDkKKyNkZWZpbmUgX19OUl9tbG9jawkJMTUwCisjZGVmaW5lIF9fTlJfbXVubG9jawkJMTUxCisjZGVmaW5lIF9fTlJfbWxvY2thbGwJCTE1MgorI2RlZmluZSBfX05SX211bmxvY2thbGwJCTE1MworI2RlZmluZSBfX05SX3NjaGVkX3NldHBhcmFtCQkxNTQKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRwYXJhbQkJMTU1CisjZGVmaW5lIF9fTlJfc2NoZWRfc2V0c2NoZWR1bGVyCQkxNTYKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRzY2hlZHVsZXIJCTE1NworI2RlZmluZSBfX05SX3NjaGVkX3lpZWxkCQkxNTgKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4CTE1OQorI2RlZmluZSBfX05SX3NjaGVkX2dldF9wcmlvcml0eV9taW4JMTYwCisjZGVmaW5lIF9fTlJfc2NoZWRfcnJfZ2V0X2ludGVydmFsCTE2MQorI2RlZmluZSBfX05SX25hbm9zbGVlcAkJMTYyCisjZGVmaW5lIF9fTlJfbXJlbWFwCQkxNjMKKyNkZWZpbmUgX19OUl9zZXRyZXN1aWQJCTE2NAorI2RlZmluZSBfX05SX2dldHJlc3VpZAkJMTY1CisjZGVmaW5lIF9fTlJfcXVlcnlfbW9kdWxlCTE2NgorI2RlZmluZSBfX05SX3BvbGwJCTE2NworI2RlZmluZSBfX05SX25mc3NlcnZjdGwJCTE2OAorI2RlZmluZSBfX05SX3NldHJlc2dpZAkJMTY5CisjZGVmaW5lIF9fTlJfZ2V0cmVzZ2lkCQkxNzAKKyNkZWZpbmUgX19OUl9wcmN0bAkJMTcxCisjZGVmaW5lIF9fTlJfcnRfc2lncmV0dXJuCTE3MgorI2RlZmluZSBfX05SX3J0X3NpZ2FjdGlvbgkxNzMKKyNkZWZpbmUgX19OUl9ydF9zaWdwcm9jbWFzawkxNzQKKyNkZWZpbmUgX19OUl9ydF9zaWdwZW5kaW5nCTE3NQorI2RlZmluZSBfX05SX3J0X3NpZ3RpbWVkd2FpdAkxNzYKKyNkZWZpbmUgX19OUl9ydF9zaWdxdWV1ZWluZm8JMTc3CisjZGVmaW5lIF9fTlJfcnRfc2lnc3VzcGVuZAkxNzgKKyNkZWZpbmUgX19OUl9wcmVhZDY0CQkxNzkKKyNkZWZpbmUgX19OUl9wd3JpdGU2NAkJMTgwCisjZGVmaW5lIF9fTlJfY2hvd24JCTE4MQorI2RlZmluZSBfX05SX2dldGN3ZAkJMTgyCisjZGVmaW5lIF9fTlJfY2FwZ2V0CQkxODMKKyNkZWZpbmUgX19OUl9jYXBzZXQJCTE4NAorI2RlZmluZSBfX05SX3NpZ2FsdHN0YWNrCTE4NQorI2RlZmluZSBfX05SX3NlbmRmaWxlCQkxODYKKyNkZWZpbmUgX19OUl9nZXRwbXNnCQkxODcJLyogc29tZSBwZW9wbGUgYWN0dWFsbHkgd2FudCBzdHJlYW1zICovCisjZGVmaW5lIF9fTlJfcHV0cG1zZwkJMTg4CS8qIHNvbWUgcGVvcGxlIGFjdHVhbGx5IHdhbnQgc3RyZWFtcyAqLworI2RlZmluZSBfX05SX3Zmb3JrCQkxODkKKyNkZWZpbmUgX19OUl91Z2V0cmxpbWl0CQkxOTAJLyogU3VTIGNvbXBsaWFudCBnZXRybGltaXQgKi8KKyNkZWZpbmUgX19OUl9yZWFkYWhlYWQJCTE5MQorI2RlZmluZSBfX05SX21tYXAyCQkxOTIKKyNkZWZpbmUgX19OUl90cnVuY2F0ZTY0CQkxOTMKKyNkZWZpbmUgX19OUl9mdHJ1bmNhdGU2NAkxOTQKKyNkZWZpbmUgX19OUl9zdGF0NjQJCTE5NQorI2RlZmluZSBfX05SX2xzdGF0NjQJCTE5NgorI2RlZmluZSBfX05SX2ZzdGF0NjQJCTE5NworI2RlZmluZSBfX05SX3BjaWNvbmZpZ19yZWFkCTE5OAorI2RlZmluZSBfX05SX3BjaWNvbmZpZ193cml0ZQkxOTkKKyNkZWZpbmUgX19OUl9wY2ljb25maWdfaW9iYXNlCTIwMAorI2RlZmluZSBfX05SX211bHRpcGxleGVyCTIwMQorI2RlZmluZSBfX05SX2dldGRlbnRzNjQJCTIwMgorI2RlZmluZSBfX05SX3Bpdm90X3Jvb3QJCTIwMworI2RlZmluZSBfX05SX2ZjbnRsNjQJCTIwNAorI2RlZmluZSBfX05SX21hZHZpc2UJCTIwNQorI2RlZmluZSBfX05SX21pbmNvcmUJCTIwNgorI2RlZmluZSBfX05SX2dldHRpZAkJMjA3CisjZGVmaW5lIF9fTlJfdGtpbGwJCTIwOAorI2RlZmluZSBfX05SX3NldHhhdHRyCQkyMDkKKyNkZWZpbmUgX19OUl9sc2V0eGF0dHIJCTIxMAorI2RlZmluZSBfX05SX2ZzZXR4YXR0cgkJMjExCisjZGVmaW5lIF9fTlJfZ2V0eGF0dHIJCTIxMgorI2RlZmluZSBfX05SX2xnZXR4YXR0cgkJMjEzCisjZGVmaW5lIF9fTlJfZmdldHhhdHRyCQkyMTQKKyNkZWZpbmUgX19OUl9saXN0eGF0dHIJCTIxNQorI2RlZmluZSBfX05SX2xsaXN0eGF0dHIJCTIxNgorI2RlZmluZSBfX05SX2ZsaXN0eGF0dHIJCTIxNworI2RlZmluZSBfX05SX3JlbW92ZXhhdHRyCTIxOAorI2RlZmluZSBfX05SX2xyZW1vdmV4YXR0cgkyMTkKKyNkZWZpbmUgX19OUl9mcmVtb3ZleGF0dHIJMjIwCisjZGVmaW5lIF9fTlJfZnV0ZXgJCTIyMQorI2RlZmluZSBfX05SX3NjaGVkX3NldGFmZmluaXR5CTIyMgorI2RlZmluZSBfX05SX3NjaGVkX2dldGFmZmluaXR5CTIyMworLyogMjI0IGN1cnJlbnRseSB1bnVzZWQgKi8KKyNkZWZpbmUgX19OUl90dXhjYWxsCQkyMjUKKyNkZWZpbmUgX19OUl9zZW5kZmlsZTY0CQkyMjYKKyNkZWZpbmUgX19OUl9pb19zZXR1cAkJMjI3CisjZGVmaW5lIF9fTlJfaW9fZGVzdHJveQkJMjI4CisjZGVmaW5lIF9fTlJfaW9fZ2V0ZXZlbnRzCTIyOQorI2RlZmluZSBfX05SX2lvX3N1Ym1pdAkJMjMwCisjZGVmaW5lIF9fTlJfaW9fY2FuY2VsCQkyMzEKKyNkZWZpbmUgX19OUl9zZXRfdGlkX2FkZHJlc3MJMjMyCisjZGVmaW5lIF9fTlJfZmFkdmlzZTY0CQkyMzMKKyNkZWZpbmUgX19OUl9leGl0X2dyb3VwCQkyMzQKKyNkZWZpbmUgX19OUl9sb29rdXBfZGNvb2tpZQkyMzUKKyNkZWZpbmUgX19OUl9lcG9sbF9jcmVhdGUJMjM2CisjZGVmaW5lIF9fTlJfZXBvbGxfY3RsCQkyMzcKKyNkZWZpbmUgX19OUl9lcG9sbF93YWl0CQkyMzgKKyNkZWZpbmUgX19OUl9yZW1hcF9maWxlX3BhZ2VzCTIzOQorI2RlZmluZSBfX05SX3RpbWVyX2NyZWF0ZQkyNDAKKyNkZWZpbmUgX19OUl90aW1lcl9zZXR0aW1lCTI0MQorI2RlZmluZSBfX05SX3RpbWVyX2dldHRpbWUJMjQyCisjZGVmaW5lIF9fTlJfdGltZXJfZ2V0b3ZlcnJ1bgkyNDMKKyNkZWZpbmUgX19OUl90aW1lcl9kZWxldGUJMjQ0CisjZGVmaW5lIF9fTlJfY2xvY2tfc2V0dGltZQkyNDUKKyNkZWZpbmUgX19OUl9jbG9ja19nZXR0aW1lCTI0NgorI2RlZmluZSBfX05SX2Nsb2NrX2dldHJlcwkyNDcKKyNkZWZpbmUgX19OUl9jbG9ja19uYW5vc2xlZXAJMjQ4CisjZGVmaW5lIF9fTlJfc3dhcGNvbnRleHQJMjQ5CisjZGVmaW5lIF9fTlJfdGdraWxsCQkyNTAKKyNkZWZpbmUgX19OUl91dGltZXMJCTI1MQorI2RlZmluZSBfX05SX3N0YXRmczY0CQkyNTIKKyNkZWZpbmUgX19OUl9mc3RhdGZzNjQJCTI1MworI2RlZmluZSBfX05SX2ZhZHZpc2U2NF82NAkyNTQKKyNkZWZpbmUgX19OUl9ydGFzCQkyNTUKKyNkZWZpbmUgX19OUl9zeXNfZGVidWdfc2V0Y29udGV4dCAyNTYKKy8qIE51bWJlciAyNTcgaXMgcmVzZXJ2ZWQgZm9yIHZzZXJ2ZXIgKi8KKy8qIE51bWJlciAyNTggaXMgcmVzZXJ2ZWQgZm9yIG5ldyBzeXNfcmVtYXBfZmlsZV9wYWdlcyAqLworLyogTnVtYmVyIDI1OSBpcyByZXNlcnZlZCBmb3IgbmV3IHN5c19tYmluZCAqLworLyogTnVtYmVyIDI2MCBpcyByZXNlcnZlZCBmb3IgbmV3IHN5c19nZXRfbWVtcG9saWN5ICovCisvKiBOdW1iZXIgMjYxIGlzIHJlc2VydmVkIGZvciBuZXcgc3lzX3NldF9tZW1wb2xpY3kgKi8KKyNkZWZpbmUgX19OUl9tcV9vcGVuCQkyNjIKKyNkZWZpbmUgX19OUl9tcV91bmxpbmsJCTI2MworI2RlZmluZSBfX05SX21xX3RpbWVkc2VuZAkyNjQKKyNkZWZpbmUgX19OUl9tcV90aW1lZHJlY2VpdmUJMjY1CisjZGVmaW5lIF9fTlJfbXFfbm90aWZ5CQkyNjYKKyNkZWZpbmUgX19OUl9tcV9nZXRzZXRhdHRyCTI2NworI2RlZmluZSBfX05SX2tleGVjX2xvYWQJCTI2OAorI2RlZmluZSBfX05SX2FkZF9rZXkJCTI2OQorI2RlZmluZSBfX05SX3JlcXVlc3Rfa2V5CTI3MAorI2RlZmluZSBfX05SX2tleWN0bAkJMjcxCisjZGVmaW5lIF9fTlJfd2FpdGlkCQkyNzIKKworI2RlZmluZSBfX05SX3N5c2NhbGxzCQkyNzMKKworI2RlZmluZSBfX05SKG4pCSNuCisKKy8qIE9uIHBvd2VycGMgYSBzeXN0ZW0gY2FsbCBiYXNpY2FsbHkgY2xvYmJlcnMgdGhlIHNhbWUgcmVnaXN0ZXJzIGxpa2UgYQorICogZnVuY3Rpb24gY2FsbCwgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIExSICh3aGljaCBpcyBuZWVkZWQgZm9yIHRoZQorICogInNjOyBibnNsciIgc2VxdWVuY2UpIGFuZCBDUiAod2hlcmUgb25seSBDUjAuU08gaXMgY2xvYmJlcmVkIHRvIHNpZ25hbAorICogYW4gZXJyb3IgcmV0dXJuIHN0YXR1cykuCisgKi8KKworI2RlZmluZSBfX3N5c2NhbGxfbnIobnIsIHR5cGUsIG5hbWUsIGFyZ3MuLi4pCQkJCVwKKwl1bnNpZ25lZCBsb25nIF9fc2NfcmV0LCBfX3NjX2VycjsJCQkJXAorCXsJCQkJCQkJCVwKKwkJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3NjXzAgIF9fYXNtX18gKCJyMCIpOwkJXAorCQlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fc2NfMyAgX19hc21fXyAoInIzIik7CQlcCisJCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19zY180ICBfX2FzbV9fICgicjQiKTsJCVwKKwkJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3NjXzUgIF9fYXNtX18gKCJyNSIpOwkJXAorCQlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fc2NfNiAgX19hc21fXyAoInI2Iik7CQlcCisJCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19zY183ICBfX2FzbV9fICgicjciKTsJCVwKKwkJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3NjXzggIF9fYXNtX18gKCJyOCIpOwkJXAorCQkJCQkJCQkJXAorCQlfX3NjX2xvYWRhcmdzXyMjbnIobmFtZSwgYXJncyk7CQkJCVwKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18JCQkJCVwKKwkJCSgic2MgICAgICAgICAgIFxuXHQiCQkJCVwKKwkJCSAibWZjciAlMCAgICAgICIJCQkJXAorCQkJOiAiPSZyIiAoX19zY18wKSwJCQkJXAorCQkJICAiPSZyIiAoX19zY18zKSwgICI9JnIiIChfX3NjXzQpLAkJXAorCQkJICAiPSZyIiAoX19zY181KSwgICI9JnIiIChfX3NjXzYpLAkJXAorCQkJICAiPSZyIiAoX19zY183KSwgICI9JnIiIChfX3NjXzgpCQlcCisJCQk6IF9fc2NfYXNtX2lucHV0XyMjbnIJCQkJXAorCQkJOiAiY3IwIiwgImN0ciIsICJtZW1vcnkiLAkJCVwKKwkJCSAgInI5IiwgInIxMCIsInIxMSIsICJyMTIiKTsJCQlcCisJCV9fc2NfcmV0ID0gX19zY18zOwkJCQkJXAorCQlfX3NjX2VyciA9IF9fc2NfMDsJCQkJCVwKKwl9CQkJCQkJCQlcCisJaWYgKF9fc2NfZXJyICYgMHgxMDAwMDAwMCkJCQkJCVwKKwl7CQkJCQkJCQlcCisJCWVycm5vID0gX19zY19yZXQ7CQkJCQlcCisJCV9fc2NfcmV0ID0gLTE7CQkJCQkJXAorCX0JCQkJCQkJCVwKKwlyZXR1cm4gKHR5cGUpIF9fc2NfcmV0CisKKyNkZWZpbmUgX19zY19sb2FkYXJnc18wKG5hbWUsIGR1bW15Li4uKQkJCQkJXAorCV9fc2NfMCA9IF9fTlJfIyNuYW1lCisjZGVmaW5lIF9fc2NfbG9hZGFyZ3NfMShuYW1lLCBhcmcxKQkJCQkJXAorCV9fc2NfbG9hZGFyZ3NfMChuYW1lKTsJCQkJCQlcCisJX19zY18zID0gKHVuc2lnbmVkIGxvbmcpIChhcmcxKQorI2RlZmluZSBfX3NjX2xvYWRhcmdzXzIobmFtZSwgYXJnMSwgYXJnMikJCQkJXAorCV9fc2NfbG9hZGFyZ3NfMShuYW1lLCBhcmcxKTsJCQkJCVwKKwlfX3NjXzQgPSAodW5zaWduZWQgbG9uZykgKGFyZzIpCisjZGVmaW5lIF9fc2NfbG9hZGFyZ3NfMyhuYW1lLCBhcmcxLCBhcmcyLCBhcmczKQkJCQlcCisJX19zY19sb2FkYXJnc18yKG5hbWUsIGFyZzEsIGFyZzIpOwkJCQlcCisJX19zY181ID0gKHVuc2lnbmVkIGxvbmcpIChhcmczKQorI2RlZmluZSBfX3NjX2xvYWRhcmdzXzQobmFtZSwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCkJCQlcCisJX19zY19sb2FkYXJnc18zKG5hbWUsIGFyZzEsIGFyZzIsIGFyZzMpOwkJCVwKKwlfX3NjXzYgPSAodW5zaWduZWQgbG9uZykgKGFyZzQpCisjZGVmaW5lIF9fc2NfbG9hZGFyZ3NfNShuYW1lLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1KQkJXAorCV9fc2NfbG9hZGFyZ3NfNChuYW1lLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0KTsJCQlcCisJX19zY183ID0gKHVuc2lnbmVkIGxvbmcpIChhcmc1KQorI2RlZmluZSBfX3NjX2xvYWRhcmdzXzYobmFtZSwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSwgYXJnNikJXAorCV9fc2NfbG9hZGFyZ3NfNShuYW1lLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1KTsJCVwKKwlfX3NjXzggPSAodW5zaWduZWQgbG9uZykgKGFyZzYpCisKKyNkZWZpbmUgX19zY19hc21faW5wdXRfMCAiMCIgKF9fc2NfMCkKKyNkZWZpbmUgX19zY19hc21faW5wdXRfMSBfX3NjX2FzbV9pbnB1dF8wLCAiMSIgKF9fc2NfMykKKyNkZWZpbmUgX19zY19hc21faW5wdXRfMiBfX3NjX2FzbV9pbnB1dF8xLCAiMiIgKF9fc2NfNCkKKyNkZWZpbmUgX19zY19hc21faW5wdXRfMyBfX3NjX2FzbV9pbnB1dF8yLCAiMyIgKF9fc2NfNSkKKyNkZWZpbmUgX19zY19hc21faW5wdXRfNCBfX3NjX2FzbV9pbnB1dF8zLCAiNCIgKF9fc2NfNikKKyNkZWZpbmUgX19zY19hc21faW5wdXRfNSBfX3NjX2FzbV9pbnB1dF80LCAiNSIgKF9fc2NfNykKKyNkZWZpbmUgX19zY19hc21faW5wdXRfNiBfX3NjX2FzbV9pbnB1dF81LCAiNiIgKF9fc2NfOCkKKworI2RlZmluZSBfc3lzY2FsbDAodHlwZSxuYW1lKQkJCQkJCVwKK3R5cGUgbmFtZSh2b2lkKQkJCQkJCQkJXAorewkJCQkJCQkJCVwKKwlfX3N5c2NhbGxfbnIoMCwgdHlwZSwgbmFtZSk7CQkJCQlcCit9CisKKyNkZWZpbmUgX3N5c2NhbGwxKHR5cGUsbmFtZSx0eXBlMSxhcmcxKQkJCQkJXAordHlwZSBuYW1lKHR5cGUxIGFyZzEpCQkJCQkJCVwKK3sJCQkJCQkJCQlcCisJX19zeXNjYWxsX25yKDEsIHR5cGUsIG5hbWUsIGFyZzEpOwkJCQlcCit9CisKKyNkZWZpbmUgX3N5c2NhbGwyKHR5cGUsbmFtZSx0eXBlMSxhcmcxLHR5cGUyLGFyZzIpCQkJXAordHlwZSBuYW1lKHR5cGUxIGFyZzEsIHR5cGUyIGFyZzIpCQkJCQlcCit7CQkJCQkJCQkJXAorCV9fc3lzY2FsbF9ucigyLCB0eXBlLCBuYW1lLCBhcmcxLCBhcmcyKTsJCQlcCit9CisKKyNkZWZpbmUgX3N5c2NhbGwzKHR5cGUsbmFtZSx0eXBlMSxhcmcxLHR5cGUyLGFyZzIsdHlwZTMsYXJnMykJCVwKK3R5cGUgbmFtZSh0eXBlMSBhcmcxLCB0eXBlMiBhcmcyLCB0eXBlMyBhcmczKQkJCQlcCit7CQkJCQkJCQkJXAorCV9fc3lzY2FsbF9ucigzLCB0eXBlLCBuYW1lLCBhcmcxLCBhcmcyLCBhcmczKTsJCQlcCit9CisKKyNkZWZpbmUgX3N5c2NhbGw0KHR5cGUsbmFtZSx0eXBlMSxhcmcxLHR5cGUyLGFyZzIsdHlwZTMsYXJnMyx0eXBlNCxhcmc0KSBcCit0eXBlIG5hbWUodHlwZTEgYXJnMSwgdHlwZTIgYXJnMiwgdHlwZTMgYXJnMywgdHlwZTQgYXJnNCkJCVwKK3sJCQkJCQkJCQlcCisJX19zeXNjYWxsX25yKDQsIHR5cGUsIG5hbWUsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQpOwkJXAorfQorCisjZGVmaW5lIF9zeXNjYWxsNSh0eXBlLG5hbWUsdHlwZTEsYXJnMSx0eXBlMixhcmcyLHR5cGUzLGFyZzMsdHlwZTQsYXJnNCx0eXBlNSxhcmc1KSBcCit0eXBlIG5hbWUodHlwZTEgYXJnMSwgdHlwZTIgYXJnMiwgdHlwZTMgYXJnMywgdHlwZTQgYXJnNCwgdHlwZTUgYXJnNSkJXAorewkJCQkJCQkJCVwKKwlfX3N5c2NhbGxfbnIoNSwgdHlwZSwgbmFtZSwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSk7CVwKK30KKworI2RlZmluZSBfc3lzY2FsbDYodHlwZSxuYW1lLHR5cGUxLGFyZzEsdHlwZTIsYXJnMix0eXBlMyxhcmczLHR5cGU0LGFyZzQsdHlwZTUsYXJnNSx0eXBlNixhcmc2KSBcCit0eXBlIG5hbWUodHlwZTEgYXJnMSwgdHlwZTIgYXJnMiwgdHlwZTMgYXJnMywgdHlwZTQgYXJnNCwgdHlwZTUgYXJnNSwgdHlwZTYgYXJnNikgXAorewkJCQkJCQkJCVwKKwlfX3N5c2NhbGxfbnIoNiwgdHlwZSwgbmFtZSwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSwgYXJnNik7IFwKK30KKworI2lmZGVmIF9fS0VSTkVMX18KKworI2RlZmluZSBfX05SX19leGl0IF9fTlJfZXhpdAorI2RlZmluZSBOUl9zeXNjYWxscwlfX05SX3N5c2NhbGxzCisKKyNkZWZpbmUgX19BUkNIX1dBTlRfSVBDX1BBUlNFX1ZFUlNJT04KKyNkZWZpbmUgX19BUkNIX1dBTlRfT0xEX1JFQURESVIKKyNkZWZpbmUgX19BUkNIX1dBTlRfT0xEX1NUQVQKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1RBVDY0CisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19BTEFSTQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfR0VUSE9TVE5BTUUKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1BBVVNFCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TR0VUTUFTSworI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHTkFMCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19USU1FCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19VVElNRQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfV0FJVFBJRAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU09DS0VUQ0FMTAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfRkFEVklTRTY0CisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19HRVRQR1JQCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19MTFNFRUsKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX05JQ0UKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX09MRF9HRVRSTElNSVQKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX09MRFVNT1VOVAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUEVORElORworI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUFJPQ01BU0sKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1JUX1NJR0FDVElPTgorCisvKgorICogRm9ya2luZyBmcm9tIGtlcm5lbCBzcGFjZSB3aWxsIHJlc3VsdCBpbiB0aGUgY2hpbGQgZ2V0dGluZyBhIG5ldywKKyAqIGVtcHR5IGtlcm5lbCBzdGFjayBhcmVhLiAgVGh1cyB0aGUgY2hpbGQgY2Fubm90IGFjY2VzcyBhdXRvbWF0aWMKKyAqIHZhcmlhYmxlcyBzZXQgaW4gdGhlIHBhcmVudCB1bmxlc3MgdGhleSBhcmUgaW4gcmVnaXN0ZXJzLCBhbmQgdGhlCisgKiBwcm9jZWR1cmUgd2hlcmUgdGhlIGZvcmsgd2FzIGRvbmUgY2Fubm90IHJldHVybiB0byBpdHMgY2FsbGVyIGluCisgKiB0aGUgY2hpbGQuCisgKi8KKworI2lmZGVmIF9fS0VSTkVMX1NZU0NBTExTX18KKworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyoKKyAqIFN5c3RlbSBjYWxsIHByb3RvdHlwZXMuCisgKi8KK2V4dGVybiBwaWRfdCBzZXRzaWQodm9pZCk7CitleHRlcm4gaW50IHdyaXRlKGludCBmZCwgY29uc3QgY2hhciAqYnVmLCBvZmZfdCBjb3VudCk7CitleHRlcm4gaW50IHJlYWQoaW50IGZkLCBjaGFyICpidWYsIG9mZl90IGNvdW50KTsKK2V4dGVybiBvZmZfdCBsc2VlayhpbnQgZmQsIG9mZl90IG9mZnNldCwgaW50IGNvdW50KTsKK2V4dGVybiBpbnQgZHVwKGludCBmZCk7CitleHRlcm4gaW50IGV4ZWN2ZShjb25zdCBjaGFyICpmaWxlLCBjaGFyICoqYXJndiwgY2hhciAqKmVudnApOworZXh0ZXJuIGludCBvcGVuKGNvbnN0IGNoYXIgKmZpbGUsIGludCBmbGFnLCBpbnQgbW9kZSk7CitleHRlcm4gaW50IGNsb3NlKGludCBmZCk7CitleHRlcm4gcGlkX3Qgd2FpdHBpZChwaWRfdCBwaWQsIGludCAqd2FpdF9zdGF0LCBpbnQgb3B0aW9ucyk7CisKK3Vuc2lnbmVkIGxvbmcgc3lzX21tYXAodW5zaWduZWQgbG9uZyBhZGRyLCBzaXplX3QgbGVuLAorCQkJdW5zaWduZWQgbG9uZyBwcm90LCB1bnNpZ25lZCBsb25nIGZsYWdzLAorCQkJdW5zaWduZWQgbG9uZyBmZCwgb2ZmX3Qgb2Zmc2V0KTsKK3Vuc2lnbmVkIGxvbmcgc3lzX21tYXAyKHVuc2lnbmVkIGxvbmcgYWRkciwgc2l6ZV90IGxlbiwKKwkJCXVuc2lnbmVkIGxvbmcgcHJvdCwgdW5zaWduZWQgbG9uZyBmbGFncywKKwkJCXVuc2lnbmVkIGxvbmcgZmQsIHVuc2lnbmVkIGxvbmcgcGdvZmYpOworc3RydWN0IHB0X3JlZ3M7CitpbnQgc3lzX2V4ZWN2ZSh1bnNpZ25lZCBsb25nIGEwLCB1bnNpZ25lZCBsb25nIGExLCB1bnNpZ25lZCBsb25nIGEyLAorCQl1bnNpZ25lZCBsb25nIGEzLCB1bnNpZ25lZCBsb25nIGE0LCB1bnNpZ25lZCBsb25nIGE1LAorCQlzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitpbnQgc3lzX2Nsb25lKHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgdXNwLAorCSAgICAgIGludCBfX3VzZXIgKnBhcmVudF90aWRwLCB2b2lkIF9fdXNlciAqY2hpbGRfdGhyZWFkcHRyLAorCSAgICAgIGludCBfX3VzZXIgKmNoaWxkX3RpZHAsIGludCBwNiwKKwkgICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitpbnQgc3lzX2ZvcmsoaW50IHAxLCBpbnQgcDIsIGludCBwMywgaW50IHA0LCBpbnQgcDUsIGludCBwNiwKKwkJc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworaW50IHN5c192Zm9yayhpbnQgcDEsIGludCBwMiwgaW50IHAzLCBpbnQgcDQsIGludCBwNSwgaW50IHA2LAorCQlzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitpbnQgc3lzX3BpcGUoaW50IF9fdXNlciAqZmlsZGVzKTsKK2ludCBzeXNfcHRyYWNlKGxvbmcgcmVxdWVzdCwgbG9uZyBwaWQsIGxvbmcgYWRkciwgbG9uZyBkYXRhKTsKK3N0cnVjdCBzaWdhY3Rpb247Citsb25nIHN5c19ydF9zaWdhY3Rpb24oaW50IHNpZywKKwkJICAgICAgY29uc3Qgc3RydWN0IHNpZ2FjdGlvbiBfX3VzZXIgKmFjdCwKKwkJICAgICAgc3RydWN0IHNpZ2FjdGlvbiBfX3VzZXIgKm9hY3QsCisJCSAgICAgIHNpemVfdCBzaWdzZXRzaXplKTsKKworI2VuZGlmIC8qIF9fS0VSTkVMX1NZU0NBTExTX18gKi8KKworLyoKKyAqICJDb25kaXRpb25hbCIgc3lzY2FsbHMKKyAqCisgKiBXaGF0IHdlIHdhbnQgaXMgX19hdHRyaWJ1dGVfXygod2VhayxhbGlhcygic3lzX25pX3N5c2NhbGwiKSkpLAorICogYnV0IGl0IGRvZXNuJ3Qgd29yayBvbiBhbGwgdG9vbGNoYWlucywgc28gd2UganVzdCBkbyBpdCBieSBoYW5kCisgKi8KKyNpZm5kZWYgY29uZF9zeXNjYWxsCisjZGVmaW5lIGNvbmRfc3lzY2FsbCh4KSBhc20oIi53ZWFrXHQiICN4ICJcblx0LnNldFx0IiAjeCAiLHN5c19uaV9zeXNjYWxsIikKKyNlbmRpZgorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX0FTTV9QUENfVU5JU1REX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvdXNlci5oIGIvaW5jbHVkZS9hc20tcHBjL3VzZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjYyYjIxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjL3VzZXIuaApAQCAtMCwwICsxLDU0IEBACisjaWZkZWYgX19LRVJORUxfXworI2lmbmRlZiBfUFBDX1VTRVJfSAorI2RlZmluZSBfUFBDX1VTRVJfSAorCisvKiBBZGFwdGVkIGZyb20gPGFzbS1hbHBoYS91c2VyLmg+ICovCisKKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorCisvKgorICogQ29yZSBmaWxlIGZvcm1hdDogVGhlIGNvcmUgZmlsZSBpcyB3cml0dGVuIGluIHN1Y2ggYSB3YXkgdGhhdCBnZGIKKyAqIGNhbiB1bmRlcnN0YW5kIGl0IGFuZCBwcm92aWRlIHVzZWZ1bCBpbmZvcm1hdGlvbiB0byB0aGUgdXNlciAodW5kZXIKKyAqIGxpbnV4IHdlIHVzZSB0aGUgYHRyYWQtY29yZScgYmZkLCBOT1QgdGhlIG9zZi1jb3JlKS4gIFRoZSBmaWxlIGNvbnRlbnRzCisgKiBhcmUgYXMgZm9sbG93czoKKyAqCisgKiAgdXBhZ2U6IDEgcGFnZSBjb25zaXN0aW5nIG9mIGEgdXNlciBzdHJ1Y3QgdGhhdCB0ZWxscyBnZGIKKyAqCXdoYXQgaXMgcHJlc2VudCBpbiB0aGUgZmlsZS4gIERpcmVjdGx5IGFmdGVyIHRoaXMgaXMgYQorICoJY29weSBvZiB0aGUgdGFza19zdHJ1Y3QsIHdoaWNoIGlzIGN1cnJlbnRseSBub3QgdXNlZCBieSBnZGIsCisgKglidXQgaXQgbWF5IGNvbWUgaW4gaGFuZHkgYXQgc29tZSBwb2ludC4gIEFsbCBvZiB0aGUgcmVnaXN0ZXJzCisgKglhcmUgc3RvcmVkIGFzIHBhcnQgb2YgdGhlIHVwYWdlLiAgVGhlIHVwYWdlIHNob3VsZCBhbHdheXMgYmUKKyAqCW9ubHkgb25lIHBhZ2UgbG9uZy4KKyAqICBkYXRhOiBUaGUgZGF0YSBzZWdtZW50IGZvbGxvd3MgbmV4dC4gIFdlIHVzZSBjdXJyZW50LT5lbmRfdGV4dCB0bworICoJY3VycmVudC0+YnJrIHRvIHBpY2sgdXAgYWxsIG9mIHRoZSB1c2VyIHZhcmlhYmxlcywgcGx1cyBhbnkgbWVtb3J5CisgKgl0aGF0IG1heSBoYXZlIGJlZW4gc2JyaydlZC4gIE5vIGF0dGVtcHQgaXMgbWFkZSB0byBkZXRlcm1pbmUgaWYgYQorICoJcGFnZSBpcyBkZW1hbmQtemVybyBvciBpZiBhIHBhZ2UgaXMgdG90YWxseSB1bnVzZWQsIHdlIGp1c3QgY292ZXIKKyAqCXRoZSBlbnRpcmUgcmFuZ2UuICBBbGwgb2YgdGhlIGFkZHJlc3NlcyBhcmUgcm91bmRlZCBpbiBzdWNoIGEgd2F5CisgKgl0aGF0IGFuIGludGVncmFsIG51bWJlciBvZiBwYWdlcyBpcyB3cml0dGVuLgorICogIHN0YWNrOiBXZSBuZWVkIHRoZSBzdGFjayBpbmZvcm1hdGlvbiBpbiBvcmRlciB0byBnZXQgYSBtZWFuaW5nZnVsCisgKgliYWNrdHJhY2UuICBXZSBuZWVkIHRvIHdyaXRlIHRoZSBkYXRhIGZyb20gdXNwIHRvCisgKgljdXJyZW50LT5zdGFydF9zdGFjaywgc28gd2Ugcm91bmQgZWFjaCBvZiB0aGVzZSBpbiBvcmRlciB0byBiZSBhYmxlCisgKgl0byB3cml0ZSBhbiBpbnRlZ2VyIG51bWJlciBvZiBwYWdlcy4KKyAqLworc3RydWN0IHVzZXIgeworCXN0cnVjdCBwdF9yZWdzCXJlZ3M7CQkJLyogZW50aXJlIG1hY2hpbmUgc3RhdGUgKi8KKwlzaXplX3QJCXVfdHNpemU7CQkvKiB0ZXh0IHNpemUgKHBhZ2VzKSAqLworCXNpemVfdAkJdV9kc2l6ZTsJCS8qIGRhdGEgc2l6ZSAocGFnZXMpICovCisJc2l6ZV90CQl1X3NzaXplOwkJLyogc3RhY2sgc2l6ZSAocGFnZXMpICovCisJdW5zaWduZWQgbG9uZwlzdGFydF9jb2RlOwkJLyogdGV4dCBzdGFydGluZyBhZGRyZXNzICovCisJdW5zaWduZWQgbG9uZwlzdGFydF9kYXRhOwkJLyogZGF0YSBzdGFydGluZyBhZGRyZXNzICovCisJdW5zaWduZWQgbG9uZwlzdGFydF9zdGFjazsJCS8qIHN0YWNrIHN0YXJ0aW5nIGFkZHJlc3MgKi8KKwlsb25nIGludAlzaWduYWw7CQkJLyogc2lnbmFsIGNhdXNpbmcgY29yZSBkdW1wICovCisJc3RydWN0IHJlZ3MgKgl1X2FyMDsJCQkvKiBoZWxwIGdkYiBmaW5kIHJlZ2lzdGVycyAqLworCXVuc2lnbmVkIGxvbmcJbWFnaWM7CQkJLyogaWRlbnRpZmllcyBhIGNvcmUgZmlsZSAqLworCWNoYXIJCXVfY29tbVszMl07CQkvKiB1c2VyIGNvbW1hbmQgbmFtZSAqLworfTsKKworI2RlZmluZSBOQlBHCQkJUEFHRV9TSVpFCisjZGVmaW5lIFVQQUdFUwkJCTEKKyNkZWZpbmUgSE9TVF9URVhUX1NUQVJUX0FERFIJKHUuc3RhcnRfY29kZSkKKyNkZWZpbmUgSE9TVF9EQVRBX1NUQVJUX0FERFIJKHUuc3RhcnRfZGF0YSkKKyNkZWZpbmUgSE9TVF9TVEFDS19FTkRfQUREUgkodS5zdGFydF9zdGFjayArIHUudV9zc2l6ZSAqIE5CUEcpCisKKyNlbmRpZiAvKiBfUFBDX1VTRVJfSCAqLworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy92Z2EuaCBiL2luY2x1ZGUvYXNtLXBwYy92Z2EuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTg2NDczCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjL3ZnYS5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKglBY2Nlc3MgdG8gVkdBIHZpZGVvcmFtCisgKgorICoJKGMpIDE5OTggTWFydGluIE1hcmVzIDxtakB1Y3cuY3o+CisgKi8KKworI2lmZGVmIF9fS0VSTkVMX18KKyNpZm5kZWYgX0xJTlVYX0FTTV9WR0FfSF8KKyNkZWZpbmUgX0xJTlVYX0FTTV9WR0FfSF8KKworI2luY2x1ZGUgPGFzbS9pby5oPgorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpZiBkZWZpbmVkKENPTkZJR19WR0FfQ09OU09MRSkgfHwgZGVmaW5lZChDT05GSUdfTURBX0NPTlNPTEUpCisKKyNkZWZpbmUgVlRfQlVGX0hBVkVfUlcKKy8qCisgKiAgVGhlc2UgYXJlIG9ubHkgbmVlZGVkIGZvciBzdXBwb3J0aW5nIFZHQSBvciBNREEgdGV4dCBtb2RlLCB3aGljaCB1c2UgbGl0dGxlCisgKiAgZW5kaWFuIGJ5dGUgb3JkZXJpbmcuCisgKiAgSW4gb3RoZXIgY2FzZXMsIHdlIGNhbiBvcHRpbWl6ZSBieSB1c2luZyBuYXRpdmUgYnl0ZSBvcmRlcmluZyBhbmQKKyAqICA8bGludXgvdnRfYnVmZmVyLmg+IGhhcyBhbHJlYWR5IGRvbmUgdGhlIHJpZ2h0IGpvYiBmb3IgdXMuCisgKi8KKworZXh0ZXJuIGlubGluZSB2b2lkIHNjcl93cml0ZXcodTE2IHZhbCwgdm9sYXRpbGUgdTE2ICphZGRyKQoreworICAgIHN0X2xlMTYoYWRkciwgdmFsKTsKK30KKworZXh0ZXJuIGlubGluZSB1MTYgc2NyX3JlYWR3KHZvbGF0aWxlIGNvbnN0IHUxNiAqYWRkcikKK3sKKyAgICByZXR1cm4gbGRfbGUxNihhZGRyKTsKK30KKworI2RlZmluZSBWVF9CVUZfSEFWRV9NRU1DUFlXCisjZGVmaW5lIHNjcl9tZW1jcHl3CW1lbWNweQorCisjZW5kaWYgLyogIUNPTkZJR19WR0FfQ09OU09MRSAmJiAhQ09ORklHX01EQV9DT05TT0xFICovCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIHZnYWNvbl9yZW1hcF9iYXNlOworI2RlZmluZSBWR0FfTUFQX01FTSh4KSAoeCArIHZnYWNvbl9yZW1hcF9iYXNlKQorI2RlZmluZSB2Z2FfcmVhZGIoeCkgKCooeCkpCisjZGVmaW5lIHZnYV93cml0ZWIoeCx5KSAoKih5KSA9ICh4KSkKKworI2VuZGlmCisjZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL3htb24uaCBiL2luY2x1ZGUvYXNtLXBwYy94bW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQyYjgzZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYy94bW9uLmgKQEAgLTAsMCArMSwxNyBAQAorI2lmbmRlZiBfX1BQQ19YTU9OX0gKKyNkZWZpbmUgX19QUENfWE1PTl9ICisjaWZkZWYgX19LRVJORUxfXworCitzdHJ1Y3QgcHRfcmVnczsKKworZXh0ZXJuIHZvaWQgeG1vbihzdHJ1Y3QgcHRfcmVncyAqZXhjcCk7CitleHRlcm4gdm9pZCB4bW9uX3ByaW50Zihjb25zdCBjaGFyICpmbXQsIC4uLik7CitleHRlcm4gdm9pZCB4bW9uX21hcF9zY2Modm9pZCk7CitleHRlcm4gaW50IHhtb25fYnB0KHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2V4dGVybiBpbnQgeG1vbl9zc3RlcChzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitleHRlcm4gaW50IHhtb25faWFicl9tYXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitleHRlcm4gaW50IHhtb25fZGFicl9tYXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitleHRlcm4gdm9pZCAoKnhtb25fZmF1bHRfaGFuZGxlcikoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL3hvci5oIGIvaW5jbHVkZS9hc20tcHBjL3hvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4MmViMTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGMveG9yLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL3hvci5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL3hwYXJhbWV0ZXJzLmggYi9pbmNsdWRlL2FzbS1wcGMveHBhcmFtZXRlcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTRlYWM2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjL3hwYXJhbWV0ZXJzLmgKQEAgLTAsMCArMSwxOCBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLXBwYy94cGFyYW1ldGVycy5oCisgKgorICogVGhpcyBmaWxlIGluY2x1ZGVzIHRoZSBjb3JyZWN0IHhwYXJhbWV0ZXJzLmggZm9yIHRoZSBDT05GSUcnZWQgYm9hcmQKKyAqCisgKiBBdXRob3I6IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqICAgICAgICAgc291cmNlQG12aXN0YS5jb20KKyAqCisgKiAyMDA0IChjKSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuICBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zCisgKiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkCisgKiAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpZiBkZWZpbmVkKENPTkZJR19YSUxJTlhfTUwzMDApCisjaW5jbHVkZSA8cGxhdGZvcm1zLzR4eC94cGFyYW1ldGVycy94cGFyYW1ldGVyc19tbDMwMC5oPgorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvem9ycm8uaCBiL2luY2x1ZGUvYXNtLXBwYy96b3Jyby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlNWZiYzYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGMvem9ycm8uaApAQCAtMCwwICsxLDMwIEBACisjaWZuZGVmIF9BU01fUFBDX1pPUlJPX0gKKyNkZWZpbmUgX0FTTV9QUENfWk9SUk9fSAorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNkZWZpbmUgel9yZWFkYiBpbl84CisjZGVmaW5lIHpfcmVhZHcgaW5fYmUxNgorI2RlZmluZSB6X3JlYWRsIGluX2JlMzIKKworI2RlZmluZSB6X3dyaXRlYih2YWwsIHBvcnQpIG91dF84KChwb3J0KSwgKHZhbCkpCisjZGVmaW5lIHpfd3JpdGV3KHZhbCwgcG9ydCkgb3V0X2JlMTYoKHBvcnQpLCAodmFsKSkKKyNkZWZpbmUgel93cml0ZWwodmFsLCBwb3J0KSBvdXRfYmUzMigocG9ydCksICh2YWwpKQorCisjZGVmaW5lIHpfbWVtc2V0X2lvKGEsYixjKQltZW1zZXQoKHZvaWQgKikoYSksKGIpLChjKSkKKyNkZWZpbmUgel9tZW1jcHlfZnJvbWlvKGEsYixjKQltZW1jcHkoKGEpLCh2b2lkICopKGIpLChjKSkKKyNkZWZpbmUgel9tZW1jcHlfdG9pbyhhLGIsYykJbWVtY3B5KCh2b2lkICopKGEpLChiKSwoYykpCisKK2V4dGVybiB2b2lkICpfX2lvcmVtYXAodW5zaWduZWQgbG9uZyBhZGRyZXNzLCB1bnNpZ25lZCBsb25nIHNpemUsCisJCSAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKTsKKworZXh0ZXJuIHZvaWQgKmlvcmVtYXAodW5zaWduZWQgbG9uZyBhZGRyZXNzLCB1bnNpZ25lZCBsb25nIHNpemUpOworZXh0ZXJuIHZvaWQgaW91bm1hcCh2b2lkICphZGRyKTsKKworZXh0ZXJuIHZvaWQgKl9faW9yZW1hcCh1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncyk7CisKKyNkZWZpbmUgel9pb3JlbWFwIGlvcmVtYXAKKyNkZWZpbmUgel9pb3VubWFwIGlvdW5tYXAKKworI2VuZGlmIC8qIF9BU01fUFBDX1pPUlJPX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0LzgyNTNwaXQuaCBiL2luY2x1ZGUvYXNtLXBwYzY0LzgyNTNwaXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODVmNzg0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvODI1M3BpdC5oCkBAIC0wLDAgKzEsMTAgQEAKKy8qCisgKiA4MjUzLzgyNTQgUHJvZ3JhbW1hYmxlIEludGVydmFsIFRpbWVyCisgKi8KKworI2lmbmRlZiBfODI1M1BJVF9ICisjZGVmaW5lIF84MjUzUElUX0gKKworI2RlZmluZSBQSVRfVElDS19SQVRFIAkxMTkzMTgyVUwKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9hLm91dC5oIGIvaW5jbHVkZS9hc20tcHBjNjQvYS5vdXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDIzMzhlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvYS5vdXQuaApAQCAtMCwwICsxLDQxIEBACisjaWZuZGVmIF9fUFBDNjRfQV9PVVRfSF9fCisjZGVmaW5lIF9fUFBDNjRfQV9PVVRfSF9fCisKKyNpbmNsdWRlIDxhc20vcHBjZGVidWcuaD4KKworLyoKKyAqIGMgMjAwMSBQUEMgNjQgVGVhbSwgSUJNIENvcnAKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKK3N0cnVjdCBleGVjCit7CisJdW5zaWduZWQgbG9uZyBhX2luZm87CS8qIFVzZSBtYWNyb3MgTl9NQUdJQywgZXRjIGZvciBhY2Nlc3MgKi8KKwl1bnNpZ25lZCBhX3RleHQ7CS8qIGxlbmd0aCBvZiB0ZXh0LCBpbiBieXRlcyAqLworCXVuc2lnbmVkIGFfZGF0YTsJLyogbGVuZ3RoIG9mIGRhdGEsIGluIGJ5dGVzICovCisJdW5zaWduZWQgYV9ic3M7CQkvKiBsZW5ndGggb2YgdW5pbml0aWFsaXplZCBkYXRhIGFyZWEgZm9yIGZpbGUsIGluIGJ5dGVzICovCisJdW5zaWduZWQgYV9zeW1zOwkvKiBsZW5ndGggb2Ygc3ltYm9sIHRhYmxlIGRhdGEgaW4gZmlsZSwgaW4gYnl0ZXMgKi8KKwl1bnNpZ25lZCBhX2VudHJ5OwkvKiBzdGFydCBhZGRyZXNzICovCisJdW5zaWduZWQgYV90cnNpemU7CS8qIGxlbmd0aCBvZiByZWxvY2F0aW9uIGluZm8gZm9yIHRleHQsIGluIGJ5dGVzICovCisJdW5zaWduZWQgYV9kcnNpemU7CS8qIGxlbmd0aCBvZiByZWxvY2F0aW9uIGluZm8gZm9yIGRhdGEsIGluIGJ5dGVzICovCit9OworCisjZGVmaW5lIE5fVFJTSVpFKGEpCSgoYSkuYV90cnNpemUpCisjZGVmaW5lIE5fRFJTSVpFKGEpCSgoYSkuYV9kcnNpemUpCisjZGVmaW5lIE5fU1lNU0laRShhKQkoKGEpLmFfc3ltcykKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2RlZmluZSBTVEFDS19UT1BfVVNFUjY0IFRBU0tfU0laRV9VU0VSNjQKKyNkZWZpbmUgU1RBQ0tfVE9QX1VTRVIzMiBUQVNLX1NJWkVfVVNFUjMyCisKKyNkZWZpbmUgU1RBQ0tfVE9QICh0ZXN0X3RocmVhZF9mbGFnKFRJRl8zMkJJVCkgPyBcCisJCSAgIFNUQUNLX1RPUF9VU0VSMzIgOiBTVEFDS19UT1BfVVNFUjY0KQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX19QUEM2NF9BX09VVF9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L2Fic19hZGRyLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9hYnNfYWRkci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkNGU4ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9hYnNfYWRkci5oCkBAIC0wLDAgKzEsMTA4IEBACisjaWZuZGVmIF9BQlNfQUREUl9ICisjZGVmaW5lIF9BQlNfQUREUl9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworLyoKKyAqIGMgMjAwMSBQUEMgNjQgVGVhbSwgSUJNIENvcnAKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9wcm9tLmg+CisjaW5jbHVkZSA8YXNtL2xtYi5oPgorCit0eXBlZGVmIHUzMiBtc0NodW5rc19lbnRyeTsKK3N0cnVjdCBtc0NodW5rcyB7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgbnVtX2NodW5rczsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBjaHVua19zaXplOworICAgICAgICB1bnNpZ25lZCBsb25nIGNodW5rX3NoaWZ0OworICAgICAgICB1bnNpZ25lZCBsb25nIGNodW5rX21hc2s7CisgICAgICAgIG1zQ2h1bmtzX2VudHJ5ICphYnM7Cit9OworCitleHRlcm4gc3RydWN0IG1zQ2h1bmtzIG1zQ2h1bmtzOworCitleHRlcm4gdW5zaWduZWQgbG9uZyBtc0NodW5rc19hbGxvYyh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHJlbG9jX29mZnNldCh2b2lkKTsKKworI2lmZGVmIENPTkZJR19NU0NIVU5LUworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK2NodW5rX3RvX2FkZHIodW5zaWduZWQgbG9uZyBjaHVuaykKK3sKKwl1bnNpZ25lZCBsb25nIG9mZnNldCA9IHJlbG9jX29mZnNldCgpOworCXN0cnVjdCBtc0NodW5rcyAqX21zQ2h1bmtzID0gUFRSUkVMT0MoJm1zQ2h1bmtzKTsKKworCXJldHVybiBjaHVuayA8PCBfbXNDaHVua3MtPmNodW5rX3NoaWZ0OworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK2FkZHJfdG9fY2h1bmsodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gcmVsb2Nfb2Zmc2V0KCk7CisJc3RydWN0IG1zQ2h1bmtzICpfbXNDaHVua3MgPSBQVFJSRUxPQygmbXNDaHVua3MpOworCisJcmV0dXJuIGFkZHIgPj4gX21zQ2h1bmtzLT5jaHVua19zaGlmdDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCitjaHVua19vZmZzZXQodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gcmVsb2Nfb2Zmc2V0KCk7CisJc3RydWN0IG1zQ2h1bmtzICpfbXNDaHVua3MgPSBQVFJSRUxPQygmbXNDaHVua3MpOworCisJcmV0dXJuIGFkZHIgJiBfbXNDaHVua3MtPmNodW5rX21hc2s7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZworYWJzX2NodW5rKHVuc2lnbmVkIGxvbmcgcGNodW5rKQoreworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gcmVsb2Nfb2Zmc2V0KCk7CisJc3RydWN0IG1zQ2h1bmtzICpfbXNDaHVua3MgPSBQVFJSRUxPQygmbXNDaHVua3MpOworCWlmICggcGNodW5rID49IF9tc0NodW5rcy0+bnVtX2NodW5rcyApIHsKKwkJcmV0dXJuIHBjaHVuazsKKwl9CisJcmV0dXJuIFBUUlJFTE9DKF9tc0NodW5rcy0+YWJzKVtwY2h1bmtdOworfQorCisvKiBBIG1hY3JvIHNvIGl0IGNhbiB0YWtlIHBvaW50ZXJzIG9yIHVuc2lnbmVkIGxvbmcuICovCisjZGVmaW5lIHBoeXNfdG9fYWJzKHBhKQkJCQkJCSAgICAgXAorCSh7IHVuc2lnbmVkIGxvbmcgX3BhID0gKHVuc2lnbmVkIGxvbmcpKHBhKTsJCQkgICAgIFwKKwkgICBjaHVua190b19hZGRyKGFic19jaHVuayhhZGRyX3RvX2NodW5rKF9wYSkpKSArIGNodW5rX29mZnNldChfcGEpOyBcCisJfSkKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCitwaHlzUnBuX3RvX2Fic1Jwbih1bnNpZ25lZCBsb25nIHJwbikKK3sKKwl1bnNpZ25lZCBsb25nIHBhID0gcnBuIDw8IFBBR0VfU0hJRlQ7CisJdW5zaWduZWQgbG9uZyBhYSA9IHBoeXNfdG9fYWJzKHBhKTsKKwlyZXR1cm4gKGFhID4+IFBBR0VfU0hJRlQpOworfQorCisvKiBBIG1hY3JvIHNvIGl0IGNhbiB0YWtlIHBvaW50ZXJzIG9yIHVuc2lnbmVkIGxvbmcuICovCisjZGVmaW5lIGFic190b19waHlzKGFhKSBsbWJfYWJzX3RvX3BoeXMoKHVuc2lnbmVkIGxvbmcpKGFhKSkKKworI2Vsc2UgIC8qICFDT05GSUdfTVNDSFVOS1MgKi8KKworI2RlZmluZSBjaHVua190b19hZGRyKGNodW5rKSAoKHVuc2lnbmVkIGxvbmcpKGNodW5rKSkKKyNkZWZpbmUgYWRkcl90b19jaHVuayhhZGRyKSAoYWRkcikKKyNkZWZpbmUgY2h1bmtfb2Zmc2V0KGFkZHIpICgwKQorI2RlZmluZSBhYnNfY2h1bmsocGNodW5rKSAocGNodW5rKQorCisjZGVmaW5lIHBoeXNfdG9fYWJzKHBhKSAocGEpCisjZGVmaW5lIHBoeXNScG5fdG9fYWJzUnBuKHJwbikgKHJwbikKKyNkZWZpbmUgYWJzX3RvX3BoeXMoYWEpIChhYSkKKworI2VuZGlmIC8qICFDT05GSUdfTVNDSFVOS1MgKi8KKworLyogQ29udmVuaWVuY2UgbWFjcm9zICovCisjZGVmaW5lIHZpcnRfdG9fYWJzKHZhKSBwaHlzX3RvX2FicyhfX3BhKHZhKSkKKyNkZWZpbmUgYWJzX3RvX3ZpcnQoYWEpIF9fdmEoYWJzX3RvX3BoeXMoYWEpKQorCisjZW5kaWYgLyogX0FCU19BRERSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L2FncC5oIGIvaW5jbHVkZS9hc20tcHBjNjQvYWdwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmUyN2NmYTgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9hZ3AuaApAQCAtMCwwICsxLDEzIEBACisjaWZuZGVmIEFHUF9ICisjZGVmaW5lIEFHUF9IIDEKKworI2luY2x1ZGUgPGFzbS9pby5oPgorCisvKiBub3RoaW5nIG11Y2ggbmVlZGVkIGhlcmUgKi8KKworI2RlZmluZSBtYXBfcGFnZV9pbnRvX2FncChwYWdlKQorI2RlZmluZSB1bm1hcF9wYWdlX2Zyb21fYWdwKHBhZ2UpCisjZGVmaW5lIGZsdXNoX2FncF9tYXBwaW5ncygpCisjZGVmaW5lIGZsdXNoX2FncF9jYWNoZSgpIG1iKCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9hdG9taWMuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L2F0b21pYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlNWYyNWUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9hdG9taWMuaApAQCAtMCwwICsxLDE5NyBAQAorLyoKKyAqIFBvd2VyUEM2NCBhdG9taWMgb3BlcmF0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAwMSBQYXVsIE1hY2tlcnJhcyA8cGF1bHVzQGF1LmlibS5jb20+LCBJQk0KKyAqIENvcHlyaWdodCAoQykgMjAwMSBBbnRvbiBCbGFuY2hhcmQgPGFudG9uQGF1LmlibS5jb20+LCBJQk0KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgX0FTTV9QUEM2NF9BVE9NSUNfSF8gCisjZGVmaW5lIF9BU01fUFBDNjRfQVRPTUlDX0hfCisKKyNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+CisKK3R5cGVkZWYgc3RydWN0IHsgdm9sYXRpbGUgaW50IGNvdW50ZXI7IH0gYXRvbWljX3Q7CisKKyNkZWZpbmUgQVRPTUlDX0lOSVQoaSkJeyAoaSkgfQorCisjZGVmaW5lIGF0b21pY19yZWFkKHYpCQkoKHYpLT5jb3VudGVyKQorI2RlZmluZSBhdG9taWNfc2V0KHYsaSkJCSgoKHYpLT5jb3VudGVyKSA9IChpKSkKKworc3RhdGljIF9faW5saW5lX18gdm9pZCBhdG9taWNfYWRkKGludCBhLCBhdG9taWNfdCAqdikKK3sKKwlpbnQgdDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorIjE6CWx3YXJ4CSUwLDAsJTMJCSMgYXRvbWljX2FkZFxuXAorCWFkZAklMCwlMiwlMFxuXAorCXN0d2N4LgklMCwwLCUzXG5cCisJYm5lLQkxYiIKKwk6ICI9JnIiICh0KSwgIj1tIiAodi0+Y291bnRlcikKKwk6ICJyIiAoYSksICJyIiAoJnYtPmNvdW50ZXIpLCAibSIgKHYtPmNvdW50ZXIpCisJOiAiY2MiKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IGF0b21pY19hZGRfcmV0dXJuKGludCBhLCBhdG9taWNfdCAqdikKK3sKKwlpbnQgdDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCUVJRUlPX09OX1NNUAorIjE6CWx3YXJ4CSUwLDAsJTIJCSMgYXRvbWljX2FkZF9yZXR1cm5cblwKKwlhZGQJJTAsJTEsJTBcblwKKwlzdHdjeC4JJTAsMCwlMlxuXAorCWJuZS0JMWIiCisJSVNZTkNfT05fU01QCisJOiAiPSZyIiAodCkKKwk6ICJyIiAoYSksICJyIiAoJnYtPmNvdW50ZXIpCisJOiAiY2MiLCAibWVtb3J5Iik7CisKKwlyZXR1cm4gdDsKK30KKworI2RlZmluZSBhdG9taWNfYWRkX25lZ2F0aXZlKGEsIHYpCShhdG9taWNfYWRkX3JldHVybigoYSksICh2KSkgPCAwKQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGF0b21pY19zdWIoaW50IGEsIGF0b21pY190ICp2KQoreworCWludCB0OworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisiMToJbHdhcngJJTAsMCwlMwkJIyBhdG9taWNfc3ViXG5cCisJc3ViZgklMCwlMiwlMFxuXAorCXN0d2N4LgklMCwwLCUzXG5cCisJYm5lLQkxYiIKKwk6ICI9JnIiICh0KSwgIj1tIiAodi0+Y291bnRlcikKKwk6ICJyIiAoYSksICJyIiAoJnYtPmNvdW50ZXIpLCAibSIgKHYtPmNvdW50ZXIpCisJOiAiY2MiKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IGF0b21pY19zdWJfcmV0dXJuKGludCBhLCBhdG9taWNfdCAqdikKK3sKKwlpbnQgdDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCUVJRUlPX09OX1NNUAorIjE6CWx3YXJ4CSUwLDAsJTIJCSMgYXRvbWljX3N1Yl9yZXR1cm5cblwKKwlzdWJmCSUwLCUxLCUwXG5cCisJc3R3Y3guCSUwLDAsJTJcblwKKwlibmUtCTFiIgorCUlTWU5DX09OX1NNUAorCTogIj0mciIgKHQpCisJOiAiciIgKGEpLCAiciIgKCZ2LT5jb3VudGVyKQorCTogImNjIiwgIm1lbW9yeSIpOworCisJcmV0dXJuIHQ7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgYXRvbWljX2luYyhhdG9taWNfdCAqdikKK3sKKwlpbnQgdDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorIjE6CWx3YXJ4CSUwLDAsJTIJCSMgYXRvbWljX2luY1xuXAorCWFkZGljCSUwLCUwLDFcblwKKwlzdHdjeC4JJTAsMCwlMlxuXAorCWJuZS0JMWIiCisJOiAiPSZyIiAodCksICI9bSIgKHYtPmNvdW50ZXIpCisJOiAiciIgKCZ2LT5jb3VudGVyKSwgIm0iICh2LT5jb3VudGVyKQorCTogImNjIik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBhdG9taWNfaW5jX3JldHVybihhdG9taWNfdCAqdikKK3sKKwlpbnQgdDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCUVJRUlPX09OX1NNUAorIjE6CWx3YXJ4CSUwLDAsJTEJCSMgYXRvbWljX2luY19yZXR1cm5cblwKKwlhZGRpYwklMCwlMCwxXG5cCisJc3R3Y3guCSUwLDAsJTFcblwKKwlibmUtCTFiIgorCUlTWU5DX09OX1NNUAorCTogIj0mciIgKHQpCisJOiAiciIgKCZ2LT5jb3VudGVyKQorCTogImNjIiwgIm1lbW9yeSIpOworCisJcmV0dXJuIHQ7Cit9CisKKy8qCisgKiBhdG9taWNfaW5jX2FuZF90ZXN0IC0gaW5jcmVtZW50IGFuZCB0ZXN0CisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CisgKgorICogQXRvbWljYWxseSBpbmNyZW1lbnRzIEB2IGJ5IDEKKyAqIGFuZCByZXR1cm5zIHRydWUgaWYgdGhlIHJlc3VsdCBpcyB6ZXJvLCBvciBmYWxzZSBmb3IgYWxsCisgKiBvdGhlciBjYXNlcy4KKyAqLworI2RlZmluZSBhdG9taWNfaW5jX2FuZF90ZXN0KHYpIChhdG9taWNfaW5jX3JldHVybih2KSA9PSAwKQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGF0b21pY19kZWMoYXRvbWljX3QgKnYpCit7CisJaW50IHQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKyIxOglsd2FyeAklMCwwLCUyCQkjIGF0b21pY19kZWNcblwKKwlhZGRpYwklMCwlMCwtMVxuXAorCXN0d2N4LgklMCwwLCUyXG5cCisJYm5lLQkxYiIKKwk6ICI9JnIiICh0KSwgIj1tIiAodi0+Y291bnRlcikKKwk6ICJyIiAoJnYtPmNvdW50ZXIpLCAibSIgKHYtPmNvdW50ZXIpCisJOiAiY2MiKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IGF0b21pY19kZWNfcmV0dXJuKGF0b21pY190ICp2KQoreworCWludCB0OworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJRUlFSU9fT05fU01QCisiMToJbHdhcngJJTAsMCwlMQkJIyBhdG9taWNfZGVjX3JldHVyblxuXAorCWFkZGljCSUwLCUwLC0xXG5cCisJc3R3Y3guCSUwLDAsJTFcblwKKwlibmUtCTFiIgorCUlTWU5DX09OX1NNUAorCTogIj0mciIgKHQpCisJOiAiciIgKCZ2LT5jb3VudGVyKQorCTogImNjIiwgIm1lbW9yeSIpOworCisJcmV0dXJuIHQ7Cit9CisKKyNkZWZpbmUgYXRvbWljX3N1Yl9hbmRfdGVzdChhLCB2KQkoYXRvbWljX3N1Yl9yZXR1cm4oKGEpLCAodikpID09IDApCisjZGVmaW5lIGF0b21pY19kZWNfYW5kX3Rlc3QodikJCShhdG9taWNfZGVjX3JldHVybigodikpID09IDApCisKKy8qCisgKiBBdG9taWNhbGx5IHRlc3QgKnYgYW5kIGRlY3JlbWVudCBpZiBpdCBpcyBncmVhdGVyIHRoYW4gMC4KKyAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBvbGQgdmFsdWUgb2YgKnYgbWludXMgMS4KKyAqLworc3RhdGljIF9faW5saW5lX18gaW50IGF0b21pY19kZWNfaWZfcG9zaXRpdmUoYXRvbWljX3QgKnYpCit7CisJaW50IHQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwlFSUVJT19PTl9TTVAKKyIxOglsd2FyeAklMCwwLCUxCQkjIGF0b21pY19kZWNfaWZfcG9zaXRpdmVcblwKKwlhZGRpYy4JJTAsJTAsLTFcblwKKwlibHQtCTJmXG5cCisJc3R3Y3guCSUwLDAsJTFcblwKKwlibmUtCTFiIgorCUlTWU5DX09OX1NNUAorCSJcblwKKzI6Igk6ICI9JnIiICh0KQorCTogInIiICgmdi0+Y291bnRlcikKKwk6ICJjYyIsICJtZW1vcnkiKTsKKworCXJldHVybiB0OworfQorCisjZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19kZWMoKSAgICAgc21wX21iKCkKKyNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWNfZGVjKCkgICAgICBzbXBfbWIoKQorI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfaW5jKCkgICAgIHNtcF9tYigpCisjZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpICAgICAgc21wX21iKCkKKworI2VuZGlmIC8qIF9BU01fUFBDNjRfQVRPTUlDX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9iaXRvcHMuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L2JpdG9wcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwZjgzMTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9iaXRvcHMuaApAQCAtMCwwICsxLDM2MCBAQAorLyoKKyAqIFBvd2VyUEM2NCBhdG9taWMgYml0IG9wZXJhdGlvbnMuCisgKiBEYXZlIEVuZ2VicmV0c2VuLCBUb2RkIEluZ2xldHQsIERvbiBSZWVkLCBQYXQgTWNDYXJ0aHksIFBldGVyIEJlcmduZXIsCisgKiBBbnRvbiBCbGFuY2hhcmQKKyAqCisgKiBPcmlnaW5hbGx5IHRha2VuIGZyb20gdGhlIDMyYiBQUEMgY29kZS4gIE1vZGlmaWVkIHRvIHVzZSA2NGIgdmFsdWVzIGZvcgorICogdGhlIHZhcmlvdXMgY291bnRlcnMgJiBtZW1vcnkgcmVmZXJlbmNlcy4KKyAqCisgKiBCaXRvcHMgYXJlIG9kZCB3aGVuIHZpZXdlZCBvbiBiaWctZW5kaWFuIHN5c3RlbXMuICBUaGV5IHdlcmUgZGVzaWduZWQKKyAqIG9uIGxpdHRsZSBlbmRpYW4gc28gdGhlIHNpemUgb2YgdGhlIGJpdHNldCBkb2Vzbid0IG1hdHRlciAobG93IG9yZGVyIGJ5dGVzCisgKiBjb21lIGZpcnN0KSBhcyBsb25nIGFzIHRoZSBiaXQgaW4gcXVlc3Rpb24gaXMgdmFsaWQuCisgKgorICogQml0cyBhcmUgInRlc3RlZCIgb2Z0ZW4gdXNpbmcgdGhlIEMgZXhwcmVzc2lvbiAodmFsICYgKDE8PG5yKSkgc28gd2UgZG8KKyAqIG91ciBiZXN0IHRvIHN0YXkgY29tcGF0aWJsZSB3aXRoIHRoYXQuICBUaGUgYXNzdW1wdGlvbiBpcyB0aGF0IHZhbCB3aWxsCisgKiBiZSB1bnNpZ25lZCBsb25nIGZvciBzdWNoIHRlc3RzLiAgQXMgc3VjaCwgd2UgYXNzdW1lIHRoZSBiaXRzIGFyZSBzdG9yZWQKKyAqIGFzIGFuIGFycmF5IG9mIHVuc2lnbmVkIGxvbmcgKHRoZSB1c3VhbCBjYXNlIGlzIGEgc2luZ2xlIHVuc2lnbmVkIGxvbmcsCisgKiBvZiBjb3Vyc2UpLiAgSGVyZSdzIGFuIGV4YW1wbGUgYml0c2V0IHdpdGggYml0IG51bWJlcmluZzoKKyAqCisgKiAgIHw2My4uLi4uLi4uLi4wfDEyNy4uLi4uLi4uNjR8MTk1Li4uLi4uLjEyOHwyNTUuLi4uLi4uMTk2fAorICoKKyAqIFRoaXMgbGVhZHMgdG8gYSBwcm9ibGVtLiBJZiBhbiBpbnQsIHNob3J0IG9yIGNoYXIgaXMgcGFzc2VkIGFzIGEgYml0c2V0CisgKiBpdCB3aWxsIGJlIGEgYmFkIG1lbW9yeSByZWZlcmVuY2Ugc2luY2Ugd2Ugd2FudCB0byBzdG9yZSBpbiBjaHVua3MKKyAqIG9mIHVuc2lnbmVkIGxvbmcgKDY0IGJpdHMgaGVyZSkgc2l6ZS4KKyAqCisgKiBUaGVyZSBhcmUgYSBmZXcgbGl0dGxlLWVuZGlhbiBtYWNyb3MgdXNlZCBtb3N0bHkgZm9yIGZpbGVzeXN0ZW0gYml0bWFwcywKKyAqIHRoZXNlIHdvcmsgb24gc2ltaWxhciBiaXQgYXJyYXlzIGxheW91dHMsIGJ1dCBieXRlLW9yaWVudGVkOgorICoKKyAqICAgfDcuLi4wfDE1Li4uOHwyMy4uLjE2fDMxLi4uMjR8MzkuLi4zMnw0Ny4uLjQwfDU1Li4uNDh8NjMuLi41NnwKKyAqCisgKiBUaGUgbWFpbiBkaWZmZXJlbmNlIGlzIHRoYXQgYml0IDMtNSBpbiB0aGUgYml0IG51bWJlciBmaWVsZCBuZWVkcyB0byBiZQorICogcmV2ZXJzZWQgY29tcGFyZWQgdG8gdGhlIGJpZy1lbmRpYW4gYml0IGZpZWxkcy4gVGhpcyBjYW4gYmUgYWNoaWV2ZWQKKyAqIGJ5IFhPUiB3aXRoIDBiMTExMDAwICgweDM4KS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgX1BQQzY0X0JJVE9QU19ICisjZGVmaW5lIF9QUEM2NF9CSVRPUFNfSAorCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8YXNtL21lbW9yeS5oPgorCisvKgorICogY2xlYXJfYml0IGRvZXNuJ3QgaW1wbHkgYSBtZW1vcnkgYmFycmllcgorICovCisjZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpCXNtcF9tYigpCisjZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCkJc21wX21iKCkKKworc3RhdGljIF9faW5saW5lX18gaW50IHRlc3RfYml0KHVuc2lnbmVkIGxvbmcgbnIsIF9fY29uc3RfXyB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQoreworCXJldHVybiAoMVVMICYgKGFkZHJbbnIgPj4gNl0gPj4gKG5yICYgNjMpKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgc2V0X2JpdCh1bnNpZ25lZCBsb25nIG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQoreworCXVuc2lnbmVkIGxvbmcgb2xkOworCXVuc2lnbmVkIGxvbmcgbWFzayA9IDFVTCA8PCAobnIgJiAweDNmKTsKKwl1bnNpZ25lZCBsb25nICpwID0gKCh1bnNpZ25lZCBsb25nICopYWRkcikgKyAobnIgPj4gNik7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKyIxOglsZGFyeAklMCwwLCUzCQkjIHNldF9iaXRcblwKKwlvcgklMCwlMCwlMlxuXAorCXN0ZGN4LgklMCwwLCUzXG5cCisJYm5lLQkxYiIKKwk6ICI9JnIiIChvbGQpLCAiPW0iICgqcCkKKwk6ICJyIiAobWFzayksICJyIiAocCksICJtIiAoKnApCisJOiAiY2MiKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBjbGVhcl9iaXQodW5zaWduZWQgbG9uZyBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIG9sZDsKKwl1bnNpZ25lZCBsb25nIG1hc2sgPSAxVUwgPDwgKG5yICYgMHgzZik7CisJdW5zaWduZWQgbG9uZyAqcCA9ICgodW5zaWduZWQgbG9uZyAqKWFkZHIpICsgKG5yID4+IDYpOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisiMToJbGRhcngJJTAsMCwlMwkJIyBjbGVhcl9iaXRcblwKKwlhbmRjCSUwLCUwLCUyXG5cCisJc3RkY3guCSUwLDAsJTNcblwKKwlibmUtCTFiIgorCTogIj0mciIgKG9sZCksICI9bSIgKCpwKQorCTogInIiIChtYXNrKSwgInIiIChwKSwgIm0iICgqcCkKKwk6ICJjYyIpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGNoYW5nZV9iaXQodW5zaWduZWQgbG9uZyBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIG9sZDsKKwl1bnNpZ25lZCBsb25nIG1hc2sgPSAxVUwgPDwgKG5yICYgMHgzZik7CisJdW5zaWduZWQgbG9uZyAqcCA9ICgodW5zaWduZWQgbG9uZyAqKWFkZHIpICsgKG5yID4+IDYpOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisiMToJbGRhcngJJTAsMCwlMwkJIyBjaGFuZ2VfYml0XG5cCisJeG9yCSUwLCUwLCUyXG5cCisJc3RkY3guCSUwLDAsJTNcblwKKwlibmUtCTFiIgorCTogIj0mciIgKG9sZCksICI9bSIgKCpwKQorCTogInIiIChtYXNrKSwgInIiIChwKSwgIm0iICgqcCkKKwk6ICJjYyIpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgdGVzdF9hbmRfc2V0X2JpdCh1bnNpZ25lZCBsb25nIG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQoreworCXVuc2lnbmVkIGxvbmcgb2xkLCB0OworCXVuc2lnbmVkIGxvbmcgbWFzayA9IDFVTCA8PCAobnIgJiAweDNmKTsKKwl1bnNpZ25lZCBsb25nICpwID0gKCh1bnNpZ25lZCBsb25nICopYWRkcikgKyAobnIgPj4gNik7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwlFSUVJT19PTl9TTVAKKyIxOglsZGFyeAklMCwwLCUzCQkjIHRlc3RfYW5kX3NldF9iaXRcblwKKwlvcgklMSwlMCwlMiBcblwKKwlzdGRjeC4JJTEsMCwlMyBcblwKKwlibmUtCTFiIgorCUlTWU5DX09OX1NNUAorCTogIj0mciIgKG9sZCksICI9JnIiICh0KQorCTogInIiIChtYXNrKSwgInIiIChwKQorCTogImNjIiwgIm1lbW9yeSIpOworCisJcmV0dXJuIChvbGQgJiBtYXNrKSAhPSAwOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgdGVzdF9hbmRfY2xlYXJfYml0KHVuc2lnbmVkIGxvbmcgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpCit7CisJdW5zaWduZWQgbG9uZyBvbGQsIHQ7CisJdW5zaWduZWQgbG9uZyBtYXNrID0gMVVMIDw8IChuciAmIDB4M2YpOworCXVuc2lnbmVkIGxvbmcgKnAgPSAoKHVuc2lnbmVkIGxvbmcgKilhZGRyKSArIChuciA+PiA2KTsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCUVJRUlPX09OX1NNUAorIjE6CWxkYXJ4CSUwLDAsJTMJCSMgdGVzdF9hbmRfY2xlYXJfYml0XG5cCisJYW5kYwklMSwlMCwlMlxuXAorCXN0ZGN4LgklMSwwLCUzXG5cCisJYm5lLQkxYiIKKwlJU1lOQ19PTl9TTVAKKwk6ICI9JnIiIChvbGQpLCAiPSZyIiAodCkKKwk6ICJyIiAobWFzayksICJyIiAocCkKKwk6ICJjYyIsICJtZW1vcnkiKTsKKworCXJldHVybiAob2xkICYgbWFzaykgIT0gMDsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IHRlc3RfYW5kX2NoYW5nZV9iaXQodW5zaWduZWQgbG9uZyBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIG9sZCwgdDsKKwl1bnNpZ25lZCBsb25nIG1hc2sgPSAxVUwgPDwgKG5yICYgMHgzZik7CisJdW5zaWduZWQgbG9uZyAqcCA9ICgodW5zaWduZWQgbG9uZyAqKWFkZHIpICsgKG5yID4+IDYpOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJRUlFSU9fT05fU01QCisiMToJbGRhcngJJTAsMCwlMwkJIyB0ZXN0X2FuZF9jaGFuZ2VfYml0XG5cCisJeG9yCSUxLCUwLCUyXG5cCisJc3RkY3guCSUxLDAsJTNcblwKKwlibmUtCTFiIgorCUlTWU5DX09OX1NNUAorCTogIj0mciIgKG9sZCksICI9JnIiICh0KQorCTogInIiIChtYXNrKSwgInIiIChwKQorCTogImNjIiwgIm1lbW9yeSIpOworCisJcmV0dXJuIChvbGQgJiBtYXNrKSAhPSAwOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHNldF9iaXRzKHVuc2lnbmVkIGxvbmcgbWFzaywgdW5zaWduZWQgbG9uZyAqYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIG9sZDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorIjE6CWxkYXJ4CSUwLDAsJTMJCSMgc2V0X2JpdFxuXAorCW9yCSUwLCUwLCUyXG5cCisJc3RkY3guCSUwLDAsJTNcblwKKwlibmUtCTFiIgorCTogIj0mciIgKG9sZCksICI9bSIgKCphZGRyKQorCTogInIiIChtYXNrKSwgInIiIChhZGRyKSwgIm0iICgqYWRkcikKKwk6ICJjYyIpOworfQorCisvKgorICogbm9uLWF0b21pYyB2ZXJzaW9ucworICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fc2V0X2JpdCh1bnNpZ25lZCBsb25nIG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQoreworCXVuc2lnbmVkIGxvbmcgbWFzayA9IDFVTCA8PCAobnIgJiAweDNmKTsKKwl1bnNpZ25lZCBsb25nICpwID0gKCh1bnNpZ25lZCBsb25nICopYWRkcikgKyAobnIgPj4gNik7CisKKwkqcCB8PSBtYXNrOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fY2xlYXJfYml0KHVuc2lnbmVkIGxvbmcgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpCit7CisJdW5zaWduZWQgbG9uZyBtYXNrID0gMVVMIDw8IChuciAmIDB4M2YpOworCXVuc2lnbmVkIGxvbmcgKnAgPSAoKHVuc2lnbmVkIGxvbmcgKilhZGRyKSArIChuciA+PiA2KTsKKworCSpwICY9IH5tYXNrOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fY2hhbmdlX2JpdCh1bnNpZ25lZCBsb25nIG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQoreworCXVuc2lnbmVkIGxvbmcgbWFzayA9IDFVTCA8PCAobnIgJiAweDNmKTsKKwl1bnNpZ25lZCBsb25nICpwID0gKCh1bnNpZ25lZCBsb25nICopYWRkcikgKyAobnIgPj4gNik7CisKKwkqcCBePSBtYXNrOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX190ZXN0X2FuZF9zZXRfYml0KHVuc2lnbmVkIGxvbmcgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpCit7CisJdW5zaWduZWQgbG9uZyBtYXNrID0gMVVMIDw8IChuciAmIDB4M2YpOworCXVuc2lnbmVkIGxvbmcgKnAgPSAoKHVuc2lnbmVkIGxvbmcgKilhZGRyKSArIChuciA+PiA2KTsKKwl1bnNpZ25lZCBsb25nIG9sZCA9ICpwOworCisJKnAgPSBvbGQgfCBtYXNrOworCXJldHVybiAob2xkICYgbWFzaykgIT0gMDsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fdGVzdF9hbmRfY2xlYXJfYml0KHVuc2lnbmVkIGxvbmcgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpCit7CisJdW5zaWduZWQgbG9uZyBtYXNrID0gMVVMIDw8IChuciAmIDB4M2YpOworCXVuc2lnbmVkIGxvbmcgKnAgPSAoKHVuc2lnbmVkIGxvbmcgKilhZGRyKSArIChuciA+PiA2KTsKKwl1bnNpZ25lZCBsb25nIG9sZCA9ICpwOworCisJKnAgPSBvbGQgJiB+bWFzazsKKwlyZXR1cm4gKG9sZCAmIG1hc2spICE9IDA7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX3Rlc3RfYW5kX2NoYW5nZV9iaXQodW5zaWduZWQgbG9uZyBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIG1hc2sgPSAxVUwgPDwgKG5yICYgMHgzZik7CisJdW5zaWduZWQgbG9uZyAqcCA9ICgodW5zaWduZWQgbG9uZyAqKWFkZHIpICsgKG5yID4+IDYpOworCXVuc2lnbmVkIGxvbmcgb2xkID0gKnA7CisKKwkqcCA9IG9sZCBeIG1hc2s7CisJcmV0dXJuIChvbGQgJiBtYXNrKSAhPSAwOworfQorCisvKgorICogUmV0dXJuIHRoZSB6ZXJvLWJhc2VkIGJpdCBwb3NpdGlvbiAoZnJvbSBSSUdIVCBUTyBMRUZULCA2MyAtPiAwKSBvZiB0aGUKKyAqIG1vc3Qgc2lnbmlmaWNhbnQgKGxlZnQtbW9zdCkgMS1iaXQgaW4gYSBkb3VibGUgd29yZC4KKyAqLworc3RhdGljIF9faW5saW5lX18gaW50IF9faWxvZzIodW5zaWduZWQgbG9uZyB4KQoreworCWludCBsejsKKworCWFzbSAoImNudGx6ZCAlMCwlMSIgOiAiPXIiIChseikgOiAiciIgKHgpKTsKKwlyZXR1cm4gNjMgLSBsejsKK30KKworLyoKKyAqIERldGVybWluZXMgdGhlIGJpdCBwb3NpdGlvbiBvZiB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgKHJpZ2h0bW9zdCkgMCBiaXQKKyAqIGluIHRoZSBzcGVjaWZpZWQgZG91YmxlIHdvcmQuIFRoZSByZXR1cm5lZCBiaXQgcG9zaXRpb24gd2lsbCBiZSB6ZXJvLWJhc2VkLAorICogc3RhcnRpbmcgZnJvbSB0aGUgcmlnaHQgc2lkZSAoNjMgLSAwKS4KKyAqLworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBmZnoodW5zaWduZWQgbG9uZyB4KQoreworCS8qIG5vIHplcm8gZXhpc3RzIGFueXdoZXJlIGluIHRoZSA4IGJ5dGUgYXJlYS4gKi8KKwlpZiAoKHggPSB+eCkgPT0gMCkKKwkJcmV0dXJuIDY0OworCisJLyoKKwkgKiBDYWxjdWxhdGUgdGhlIGJpdCBwb3NpdGlvbiBvZiB0aGUgbGVhc3Qgc2lnbmZpY2FudCAnMScgYml0IGluIHgKKwkgKiAoc2luY2UgeCBoYXMgYmVlbiBjaGFuZ2VkIHRoaXMgd2lsbCBhY3R1YWxseSBiZSB0aGUgbGVhc3Qgc2lnbmZpY2FudAorCSAqICcwJyBiaXQgaW4gKiB0aGUgb3JpZ2luYWwgeCkuICBOb3RlOiAoeCAmIC14KSBnaXZlcyB1cyBhIG1hc2sgdGhhdAorCSAqIGlzIHRoZSBsZWFzdCBzaWduaWZpY2FudCAqIChSSUdIVC1tb3N0KSAxLWJpdCBvZiB0aGUgdmFsdWUgaW4geC4KKwkgKi8KKwlyZXR1cm4gX19pbG9nMih4ICYgLXgpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19mZnModW5zaWduZWQgbG9uZyB4KQoreworCXJldHVybiBfX2lsb2cyKHggJiAteCk7Cit9CisKKy8qCisgKiBmZnM6IGZpbmQgZmlyc3QgYml0IHNldC4gVGhpcyBpcyBkZWZpbmVkIHRoZSBzYW1lIHdheSBhcworICogdGhlIGxpYmMgYW5kIGNvbXBpbGVyIGJ1aWx0aW4gZmZzIHJvdXRpbmVzLCB0aGVyZWZvcmUKKyAqIGRpZmZlcnMgaW4gc3Bpcml0IGZyb20gdGhlIGFib3ZlIGZmeiAobWFuIGZmcykuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIGludCBmZnMoaW50IHgpCit7CisJdW5zaWduZWQgbG9uZyBpID0gKHVuc2lnbmVkIGxvbmcpeDsKKwlyZXR1cm4gX19pbG9nMihpICYgLWkpICsgMTsKK30KKworLyoKKyAqIGZsczogZmluZCBsYXN0IChtb3N0LXNpZ25pZmljYW50KSBiaXQgc2V0LgorICogTm90ZSBmbHMoMCkgPSAwLCBmbHMoMSkgPSAxLCBmbHMoMHg4MDAwMDAwMCkgPSAzMi4KKyAqLworI2RlZmluZSBmbHMoeCkgZ2VuZXJpY19mbHMoeCkKKworLyoKKyAqIGh3ZWlnaHROOiByZXR1cm5zIHRoZSBoYW1taW5nIHdlaWdodCAoaS5lLiB0aGUgbnVtYmVyCisgKiBvZiBiaXRzIHNldCkgb2YgYSBOLWJpdCB3b3JkCisgKi8KKyNkZWZpbmUgaHdlaWdodDY0KHgpIGdlbmVyaWNfaHdlaWdodDY0KHgpCisjZGVmaW5lIGh3ZWlnaHQzMih4KSBnZW5lcmljX2h3ZWlnaHQzMih4KQorI2RlZmluZSBod2VpZ2h0MTYoeCkgZ2VuZXJpY19od2VpZ2h0MTYoeCkKKyNkZWZpbmUgaHdlaWdodDgoeCkgZ2VuZXJpY19od2VpZ2h0OCh4KQorCitleHRlcm4gdW5zaWduZWQgbG9uZyBmaW5kX25leHRfemVyb19iaXQoY29uc3QgdW5zaWduZWQgbG9uZyAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIG9mZnNldCk7CisjZGVmaW5lIGZpbmRfZmlyc3RfemVyb19iaXQoYWRkciwgc2l6ZSkgXAorCWZpbmRfbmV4dF96ZXJvX2JpdCgoYWRkciksIChzaXplKSwgMCkKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZmluZF9uZXh0X2JpdChjb25zdCB1bnNpZ25lZCBsb25nICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKKyNkZWZpbmUgZmluZF9maXJzdF9iaXQoYWRkciwgc2l6ZSkgXAorCWZpbmRfbmV4dF9iaXQoKGFkZHIpLCAoc2l6ZSksIDApCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIGZpbmRfbmV4dF96ZXJvX2xlX2JpdChjb25zdCB1bnNpZ25lZCBsb25nICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKKyNkZWZpbmUgZmluZF9maXJzdF96ZXJvX2xlX2JpdChhZGRyLCBzaXplKSBcCisJZmluZF9uZXh0X3plcm9fbGVfYml0KChhZGRyKSwgKHNpemUpLCAwKQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgdGVzdF9sZV9iaXQodW5zaWduZWQgbG9uZyBuciwgX19jb25zdF9fIHVuc2lnbmVkIGxvbmcgKiBhZGRyKQoreworCV9fY29uc3RfXyB1bnNpZ25lZCBjaGFyCSpBRERSID0gKF9fY29uc3RfXyB1bnNpZ25lZCBjaGFyICopIGFkZHI7CisJcmV0dXJuIChBRERSW25yID4+IDNdID4+IChuciAmIDcpKSAmIDE7Cit9CisKKyNkZWZpbmUgdGVzdF9hbmRfY2xlYXJfbGVfYml0KG5yLCBhZGRyKSBcCisJdGVzdF9hbmRfY2xlYXJfYml0KChucikgXiAweDM4LCAoYWRkcikpCisjZGVmaW5lIHRlc3RfYW5kX3NldF9sZV9iaXQobnIsIGFkZHIpIFwKKwl0ZXN0X2FuZF9zZXRfYml0KChucikgXiAweDM4LCAoYWRkcikpCisKKy8qCisgKiBub24tYXRvbWljIHZlcnNpb25zCisgKi8KKworI2RlZmluZSBfX3NldF9sZV9iaXQobnIsIGFkZHIpIFwKKwlfX3NldF9iaXQoKG5yKSBeIDB4MzgsIChhZGRyKSkKKyNkZWZpbmUgX19jbGVhcl9sZV9iaXQobnIsIGFkZHIpIFwKKwlfX2NsZWFyX2JpdCgobnIpIF4gMHgzOCwgKGFkZHIpKQorI2RlZmluZSBfX3Rlc3RfYW5kX2NsZWFyX2xlX2JpdChuciwgYWRkcikgXAorCV9fdGVzdF9hbmRfY2xlYXJfYml0KChucikgXiAweDM4LCAoYWRkcikpCisjZGVmaW5lIF9fdGVzdF9hbmRfc2V0X2xlX2JpdChuciwgYWRkcikgXAorCV9fdGVzdF9hbmRfc2V0X2JpdCgobnIpIF4gMHgzOCwgKGFkZHIpKQorCisjZGVmaW5lIGV4dDJfc2V0X2JpdChucixhZGRyKSBcCisJX190ZXN0X2FuZF9zZXRfbGVfYml0KChuciksICh1bnNpZ25lZCBsb25nKilhZGRyKQorI2RlZmluZSBleHQyX2NsZWFyX2JpdChuciwgYWRkcikgXAorCV9fdGVzdF9hbmRfY2xlYXJfbGVfYml0KChuciksICh1bnNpZ25lZCBsb25nKilhZGRyKQorCisjZGVmaW5lIGV4dDJfc2V0X2JpdF9hdG9taWMobG9jaywgbnIsIGFkZHIpIFwKKwl0ZXN0X2FuZF9zZXRfbGVfYml0KChuciksICh1bnNpZ25lZCBsb25nKilhZGRyKQorI2RlZmluZSBleHQyX2NsZWFyX2JpdF9hdG9taWMobG9jaywgbnIsIGFkZHIpIFwKKwl0ZXN0X2FuZF9jbGVhcl9sZV9iaXQoKG5yKSwgKHVuc2lnbmVkIGxvbmcqKWFkZHIpCisKKworI2RlZmluZSBleHQyX3Rlc3RfYml0KG5yLCBhZGRyKSAgICAgIHRlc3RfbGVfYml0KChuciksKHVuc2lnbmVkIGxvbmcqKWFkZHIpCisjZGVmaW5lIGV4dDJfZmluZF9maXJzdF96ZXJvX2JpdChhZGRyLCBzaXplKSBcCisJZmluZF9maXJzdF96ZXJvX2xlX2JpdCgodW5zaWduZWQgbG9uZyopYWRkciwgc2l6ZSkKKyNkZWZpbmUgZXh0Ml9maW5kX25leHRfemVyb19iaXQoYWRkciwgc2l6ZSwgb2ZmKSBcCisJZmluZF9uZXh0X3plcm9fbGVfYml0KCh1bnNpZ25lZCBsb25nKilhZGRyLCBzaXplLCBvZmYpCisKKyNkZWZpbmUgbWluaXhfdGVzdF9hbmRfc2V0X2JpdChucixhZGRyKQkJdGVzdF9hbmRfc2V0X2JpdChucixhZGRyKQorI2RlZmluZSBtaW5peF9zZXRfYml0KG5yLGFkZHIpCQkJc2V0X2JpdChucixhZGRyKQorI2RlZmluZSBtaW5peF90ZXN0X2FuZF9jbGVhcl9iaXQobnIsYWRkcikJdGVzdF9hbmRfY2xlYXJfYml0KG5yLGFkZHIpCisjZGVmaW5lIG1pbml4X3Rlc3RfYml0KG5yLGFkZHIpCQkJdGVzdF9iaXQobnIsYWRkcikKKyNkZWZpbmUgbWluaXhfZmluZF9maXJzdF96ZXJvX2JpdChhZGRyLHNpemUpCWZpbmRfZmlyc3RfemVyb19iaXQoYWRkcixzaXplKQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9QUEM2NF9CSVRPUFNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvYm9vdGluZm8uaCBiL2luY2x1ZGUvYXNtLXBwYzY0L2Jvb3RpbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU1ZTdjYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L2Jvb3RpbmZvLmgKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIE5vbi1tYWNoaW5lIGRlcGVuZGVudCBib290aW5mbyBzdHJ1Y3R1cmUuICBCYXNpYyBpZGVhCisgKiBib3Jyb3dlZCBmcm9tIHRoZSBtNjhrLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBDb3J0IERvdWdhbiA8Y29ydEBwcGMua2VybmVsLm9yZz4KKyAqIENvcHlyaWdodCAoYykgMjAwMSBQUEM2NCBUZWFtLCBJQk0gQ29ycCAKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKworI2lmbmRlZiBfUFBDNjRfQk9PVElORk9fSAorI2RlZmluZSBfUFBDNjRfQk9PVElORk9fSAorCisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisKKy8qIFdlIHVzZSBhIHUzMiBmb3IgdGhlIHR5cGUgb2YgdGhlIGZpZWxkcyBzaW5jZSB0aGV5J3JlIHdyaXR0ZW4gYnkKKyAqIHRoZSBib290bG9hZGVyIHdoaWNoIGlzIGEgMzItYml0IHByb2Nlc3MgYW5kIHJlYWQgYnkgdGhlIGtlcm5lbAorICogd2hpY2ggaXMgYSA2NC1iaXQgcHJvY2Vzcy4gIFRoaXMgd2F5IHRoZXkgY2FuIGJvdGggYWdyZWUgb24gdGhlCisgKiBzaXplIG9mIHRoZSB0eXBlLgorICovCit0eXBlZGVmIHUzMiBiaV9yZWNfZmllbGQ7CisKK3N0cnVjdCBiaV9yZWNvcmQgeworCWJpX3JlY19maWVsZCB0YWc7CS8qIHRhZyBJRCAqLworCWJpX3JlY19maWVsZCBzaXplOwkvKiBzaXplIG9mIHJlY29yZCAoaW4gYnl0ZXMpICovCisJYmlfcmVjX2ZpZWxkIGRhdGFbMF07CS8qIGRhdGEgKi8KK307CisKKyNkZWZpbmUgQklfRklSU1QJCTB4MTAxMCAgLyogZmlyc3QgcmVjb3JkIC0gbWFya2VyICovCisjZGVmaW5lIEJJX0xBU1QJCQkweDEwMTEJLyogbGFzdCByZWNvcmQgLSBtYXJrZXIgKi8KKyNkZWZpbmUgQklfQ01EX0xJTkUJCTB4MTAxMgorI2RlZmluZSBCSV9CT09UTE9BREVSX0lECTB4MTAxMworI2RlZmluZSBCSV9JTklUUkQJCTB4MTAxNAorI2RlZmluZSBCSV9TWVNNQVAJCTB4MTAxNQorI2RlZmluZSBCSV9NQUNIVFlQRQkJMHgxMDE2CisKK3N0YXRpYyBfX2lubGluZV9fIHN0cnVjdCBiaV9yZWNvcmQgKiBiaV9yZWNfaW5pdCh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJc3RydWN0IGJpX3JlY29yZCAqYmlfcmVjczsKKwliaV9yZWNzID0gKHN0cnVjdCBiaV9yZWNvcmQgKilfQUxJR04oYWRkciwgUEFHRV9TSVpFKTsKKwliaV9yZWNzLT5zaXplID0gMDsKKwlyZXR1cm4gYmlfcmVjczsKK30KKworc3RhdGljIF9faW5saW5lX18gc3RydWN0IGJpX3JlY29yZCAqIGJpX3JlY19hbGxvYyhzdHJ1Y3QgYmlfcmVjb3JkICpyZWMsCisJCQkJCQkgIHVuc2lnbmVkIGxvbmcgYXJncykKK3sKKwlyZWMgPSAoc3RydWN0IGJpX3JlY29yZCAqKSgodW5zaWduZWQgbG9uZylyZWMgKyByZWMtPnNpemUpOworCXJlYy0+c2l6ZSA9IHNpemVvZihzdHJ1Y3QgYmlfcmVjb3JkKSArIGFyZ3Mqc2l6ZW9mKGJpX3JlY19maWVsZCk7CisJcmV0dXJuIHJlYzsKK30KKworc3RhdGljIF9faW5saW5lX18gc3RydWN0IGJpX3JlY29yZCAqIGJpX3JlY19hbGxvY19ieXRlcyhzdHJ1Y3QgYmlfcmVjb3JkICpyZWMsCisJCQkJCQkJdW5zaWduZWQgbG9uZyBieXRlcykKK3sKKwlyZWMgPSAoc3RydWN0IGJpX3JlY29yZCAqKSgodW5zaWduZWQgbG9uZylyZWMgKyByZWMtPnNpemUpOworCXJlYy0+c2l6ZSA9IHNpemVvZihzdHJ1Y3QgYmlfcmVjb3JkKSArIGJ5dGVzOworCXJldHVybiByZWM7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHN0cnVjdCBiaV9yZWNvcmQgKiBiaV9yZWNfbmV4dChzdHJ1Y3QgYmlfcmVjb3JkICpyZWMpCit7CisJcmV0dXJuIChzdHJ1Y3QgYmlfcmVjb3JkICopKCh1bnNpZ25lZCBsb25nKXJlYyArIHJlYy0+c2l6ZSk7Cit9CisKKyNlbmRpZiAvKiBfUFBDNjRfQk9PVElORk9fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvYnRleHQuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L2J0ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdhZWYwYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L2J0ZXh0LmgKQEAgLTAsMCArMSwyNiBAQAorLyoKKyAqIERlZmluaXRpb25zIGZvciB1c2luZyB0aGUgcHJvY2VkdXJlcyBpbiBidGV4dC5jLgorICoKKyAqIEJlbmphbWluIEhlcnJlbnNjaG1pZHQgPGJlbmhAa2VybmVsLmNyYXNoaW5nLm9yZz4KKyAqLworI2lmbmRlZiBfX1BQQ19CVEVYVF9ICisjZGVmaW5lIF9fUFBDX0JURVhUX0gKKyNpZmRlZiBfX0tFUk5FTF9fCisKK2V4dGVybiB2b2lkIGJ0ZXh0X2NsZWFyc2NyZWVuKHZvaWQpOworZXh0ZXJuIHZvaWQgYnRleHRfZmx1c2hzY3JlZW4odm9pZCk7CisKK2V4dGVybiBpbnQgYm9vdF90ZXh0X21hcHBlZDsKKworZXh0ZXJuIGludCBidGV4dF9pbml0aWFsaXplKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApOworCitleHRlcm4gdm9pZCBtYXBfYm9vdF90ZXh0KHZvaWQpOworZXh0ZXJuIHZvaWQgYnRleHRfdXBkYXRlX2Rpc3BsYXkodW5zaWduZWQgbG9uZyBwaHlzLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCisJCQkJIGludCBkZXB0aCwgaW50IHBpdGNoKTsKKworZXh0ZXJuIHZvaWQgYnRleHRfZHJhd2NoYXIoY2hhciBjKTsKK2V4dGVybiB2b2lkIGJ0ZXh0X2RyYXdzdHJpbmcoY29uc3QgY2hhciAqc3RyKTsKK2V4dGVybiB2b2lkIGJ0ZXh0X2RyYXdoZXgodW5zaWduZWQgbG9uZyB2KTsKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAvKiBfX1BQQ19CVEVYVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9idWcuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L2J1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiMzFkZDIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9idWcuaApAQCAtMCwwICsxLDY1IEBACisjaWZuZGVmIF9QUEM2NF9CVUdfSAorI2RlZmluZSBfUFBDNjRfQlVHX0gKKworLyoKKyAqIERlZmluZSBhbiBpbGxlZ2FsIGluc3RyIHRvIHRyYXAgb24gdGhlIGJ1Zy4KKyAqIFdlIGRvbid0IHVzZSAwIGJlY2F1c2UgdGhhdCBtYXJrcyB0aGUgZW5kIG9mIGEgZnVuY3Rpb24KKyAqIGluIHRoZSBFTEYgQUJJLiAgVGhhdCdzICJCb28gQm9vIiBpbiBjYXNlIHlvdSB3b25kZXIuLi4KKyAqLworI2RlZmluZSBCVUdfT1BDT0RFIC5sb25nIDB4MDBiMDBiMDAgIC8qIEZvciBhc20gKi8KKyNkZWZpbmUgQlVHX0lMTEVHQUxfSU5TVFIgIjB4MDBiMDBiMDAiIC8qIEZvciBCVUcgbWFjcm8gKi8KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworc3RydWN0IGJ1Z19lbnRyeSB7CisJdW5zaWduZWQgbG9uZwlidWdfYWRkcjsKKwlsb25nCQlsaW5lOworCWNvbnN0IGNoYXIJKmZpbGU7CisJY29uc3QgY2hhcgkqZnVuY3Rpb247Cit9OworCitzdHJ1Y3QgYnVnX2VudHJ5ICpmaW5kX2J1Zyh1bnNpZ25lZCBsb25nIGJ1Z2FkZHIpOworCisvKgorICogSWYgdGhpcyBiaXQgaXMgc2V0IGluIHRoZSBsaW5lIG51bWJlciBpdCBtZWFucyB0aGF0IHRoZSB0cmFwCisgKiBpcyBmb3IgV0FSTl9PTiByYXRoZXIgdGhhbiBCVUcgb3IgQlVHX09OLgorICovCisjZGVmaW5lIEJVR19XQVJOSU5HX1RSQVAJMHgxMDAwMDAwCisKKyNkZWZpbmUgQlVHKCkgZG8gewkJCQkJCQkgXAorCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCSBcCisJCSIxOgl0d2kgMzEsMCwwXG4iCQkJCQkgXAorCQkiLnNlY3Rpb24gX19idWdfdGFibGUsXCJhXCJcblx0IgkJCSBcCisJCSIJLmxsb25nIDFiLCUwLCUxLCUyXG4iCQkJCSBcCisJCSIucHJldmlvdXMiCQkJCQkJIFwKKwkJOiA6ICJpIiAoX19MSU5FX18pLCAiaSIgKF9fRklMRV9fKSwgImkiIChfX0ZVTkNUSU9OX18pKTsgXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBCVUdfT04oeCkgZG8gewkJCQkJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCVwKKwkJIjE6CXRkbmVpICUwLDBcbiIJCQkJXAorCQkiLnNlY3Rpb24gX19idWdfdGFibGUsXCJhXCJcblx0IgkJXAorCQkiCS5sbG9uZyAxYiwlMSwlMiwlM1xuIgkJCVwKKwkJIi5wcmV2aW91cyIJCQkJCVwKKwkJOiA6ICJyIiAoeCksICJpIiAoX19MSU5FX18pLCAiaSIgKF9fRklMRV9fKSwJXAorCQkgICAgImkiIChfX0ZVTkNUSU9OX18pKTsJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIFdBUk5fT04oeCkgZG8gewkJCQkJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCVwKKwkJIjE6CXRkbmVpICUwLDBcbiIJCQkJXAorCQkiLnNlY3Rpb24gX19idWdfdGFibGUsXCJhXCJcblx0IgkJXAorCQkiCS5sbG9uZyAxYiwlMSwlMiwlM1xuIgkJCVwKKwkJIi5wcmV2aW91cyIJCQkJCVwKKwkJOiA6ICJyIiAoeCksICJpIiAoX19MSU5FX18gKyBCVUdfV0FSTklOR19UUkFQKSwJXAorCQkgICAgImkiIChfX0ZJTEVfXyksICJpIiAoX19GVU5DVElPTl9fKSk7CVwKK30gd2hpbGUgKDApCisKKyNlbmRpZgorCisjZGVmaW5lIEhBVkVfQVJDSF9CVUcKKyNkZWZpbmUgSEFWRV9BUkNIX0JVR19PTgorI2RlZmluZSBIQVZFX0FSQ0hfV0FSTl9PTgorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2J1Zy5oPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L2J1Z3MuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L2J1Z3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjEwNzRiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvYnVncy5oCkBAIC0wLDAgKzEsMTIgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgaW5jbHVkZWQgYnkgJ2luaXQvbWFpbi5jJyB0byBjaGVjayBmb3IgYXJjaGl0ZWN0dXJlLWRlcGVuZGVudAorICogYnVncy4KKyAqCisgKi8KKyNpZm5kZWYgX0FTTV9QUEM2NF9CVUdTX0gKKyNkZWZpbmUgX0FTTV9QUEM2NF9CVUdTX0gKKworc3RhdGljIHZvaWQgY2hlY2tfYnVncyh2b2lkKSB7Cit9CisKKyNlbmRpZiAvKiBfQVNNX1BQQzY0X0JVR1NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvYnl0ZW9yZGVyLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9ieXRlb3JkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDMyNzUzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvYnl0ZW9yZGVyLmgKQEAgLTAsMCArMSw5NiBAQAorI2lmbmRlZiBfUFBDNjRfQllURU9SREVSX0gKKyNkZWZpbmUgX1BQQzY0X0JZVEVPUkRFUl9ICisKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorCisjaWZkZWYgX19HTlVDX18KKyNpZmRlZiBfX0tFUk5FTF9fCisKK3N0YXRpYyBfX2lubGluZV9fIF9fdTE2IGxkX2xlMTYoY29uc3Qgdm9sYXRpbGUgX191MTYgKmFkZHIpCit7CisJX191MTYgdmFsOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJsaGJyeCAlMCwwLCUxIiA6ICI9ciIgKHZhbCkgOiAiciIgKGFkZHIpLCAibSIgKCphZGRyKSk7CisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBzdF9sZTE2KHZvbGF0aWxlIF9fdTE2ICphZGRyLCBjb25zdCBfX3UxNiB2YWwpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzdGhicnggJTEsMCwlMiIgOiAiPW0iICgqYWRkcikgOiAiciIgKHZhbCksICJyIiAoYWRkcikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX3UzMiBsZF9sZTMyKGNvbnN0IHZvbGF0aWxlIF9fdTMyICphZGRyKQoreworCV9fdTMyIHZhbDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fICgibHdicnggJTAsMCwlMSIgOiAiPXIiICh2YWwpIDogInIiIChhZGRyKSwgIm0iICgqYWRkcikpOworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgc3RfbGUzMih2b2xhdGlsZSBfX3UzMiAqYWRkciwgY29uc3QgX191MzIgdmFsKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fICgic3R3YnJ4ICUxLDAsJTIiIDogIj1tIiAoKmFkZHIpIDogInIiICh2YWwpLCAiciIgKGFkZHIpKTsKK30KKworI2lmIDAKK3N0YXRpYyBfX2lubGluZV9fIF9fYXR0cmlidXRlX2NvbnN0X18gX191MTYgX19fYXJjaF9fc3dhYjE2KF9fdTE2IHZhbHVlKQoreworCV9fdTE2IHJlc3VsdDsKKworCV9fYXNtX18oInJsd2ltaSAlMCwlMSw4LDE2LDIzIgorCSAgICA6ICI9ciIgKHJlc3VsdCkKKwkgICAgOiAiciIgKHZhbHVlKSwgIjAiICh2YWx1ZSA+PiA4KSk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIF9faW5saW5lX18gX19hdHRyaWJ1dGVfY29uc3RfXyBfX3UzMiBfX19hcmNoX19zd2FiMzIoX191MzIgdmFsdWUpCit7CisJX191MzIgcmVzdWx0OworCisJX19hc21fXygicmx3aW1pICUwLCUxLDI0LDE2LDIzXG5cdCIKKwkgICAgInJsd2ltaSAlMCwlMSw4LDgsMTVcblx0IgorCSAgICAicmx3aW1pICUwLCUxLDI0LDAsNyIKKwkgICAgOiAiPXIiIChyZXN1bHQpCisJICAgIDogInIiICh2YWx1ZSksICIwIiAodmFsdWUgPj4gMjQpKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX2F0dHJpYnV0ZV9jb25zdF9fIF9fdTY0IF9fX2FyY2hfX3N3YWI2NChfX3U2NCB2YWx1ZSkKK3sKKwlfX3U2NCByZXN1bHQ7CisjZXJyb3IgaW1wbGVtZW50IG1lCit9CisKKyNkZWZpbmUgX19hcmNoX19zd2FiMTYoeCkgX19fYXJjaF9fc3dhYjE2KHgpCisjZGVmaW5lIF9fYXJjaF9fc3dhYjMyKHgpIF9fX2FyY2hfX3N3YWIzMih4KQorI2RlZmluZSBfX2FyY2hfX3N3YWI2NCh4KSBfX19hcmNoX19zd2FiNjQoeCkKKworI2VuZGlmCisKKy8qIFRoZSBzYW1lLCBidXQgcmV0dXJucyBjb252ZXJ0ZWQgdmFsdWUgZnJvbSB0aGUgbG9jYXRpb24gcG9pbnRlciBieSBhZGRyLiAqLworI2RlZmluZSBfX2FyY2hfX3N3YWIxNnAoYWRkcikgbGRfbGUxNihhZGRyKQorI2RlZmluZSBfX2FyY2hfX3N3YWIzMnAoYWRkcikgbGRfbGUzMihhZGRyKQorCisvKiBUaGUgc2FtZSwgYnV0IGRvIHRoZSBjb252ZXJzaW9uIGluIHNpdHUsIGllLiBwdXQgdGhlIHZhbHVlIGJhY2sgdG8gYWRkci4gKi8KKyNkZWZpbmUgX19hcmNoX19zd2FiMTZzKGFkZHIpIHN0X2xlMTYoYWRkciwqYWRkcikKKyNkZWZpbmUgX19hcmNoX19zd2FiMzJzKGFkZHIpIHN0X2xlMzIoYWRkciwqYWRkcikKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2lmbmRlZiBfX1NUUklDVF9BTlNJX18KKyNkZWZpbmUgX19CWVRFT1JERVJfSEFTX1U2NF9fCisjZW5kaWYKKworI2VuZGlmIC8qIF9fR05VQ19fICovCisKKyNpbmNsdWRlIDxsaW51eC9ieXRlb3JkZXIvYmlnX2VuZGlhbi5oPgorCisjZW5kaWYgLyogX1BQQzY0X0JZVEVPUkRFUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9jYWNoZS5oIGIvaW5jbHVkZS9hc20tcHBjNjQvY2FjaGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjE0MGE3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvY2FjaGUuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2lmbmRlZiBfX0FSQ0hfUFBDNjRfQ0FDSEVfSAorI2RlZmluZSBfX0FSQ0hfUFBDNjRfQ0FDSEVfSAorCisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisKKy8qIGJ5dGVzIHBlciBMMSBjYWNoZSBsaW5lICovCisjZGVmaW5lIEwxX0NBQ0hFX1NISUZUCTcKKyNkZWZpbmUgTDFfQ0FDSEVfQllURVMJKDEgPDwgTDFfQ0FDSEVfU0hJRlQpCisKKyNkZWZpbmUgU01QX0NBQ0hFX0JZVEVTIEwxX0NBQ0hFX0JZVEVTCisjZGVmaW5lIEwxX0NBQ0hFX1NISUZUX01BWCA3CS8qIGxhcmdlc3QgTDEgd2hpY2ggdGhpcyBhcmNoIHN1cHBvcnRzICovCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK3N0cnVjdCBwcGM2NF9jYWNoZXMgeworCXUzMglkc2l6ZTsJCQkvKiBMMSBkLWNhY2hlIHNpemUgKi8KKwl1MzIJZGxpbmVfc2l6ZTsJCS8qIEwxIGQtY2FjaGUgbGluZSBzaXplCSovCisJdTMyCWxvZ19kbGluZV9zaXplOworCXUzMglkbGluZXNfcGVyX3BhZ2U7CisJdTMyCWlzaXplOwkJCS8qIEwxIGktY2FjaGUgc2l6ZSAqLworCXUzMglpbGluZV9zaXplOwkJLyogTDEgaS1jYWNoZSBsaW5lIHNpemUJKi8KKwl1MzIJbG9nX2lsaW5lX3NpemU7CisJdTMyCWlsaW5lc19wZXJfcGFnZTsKK307CisKK2V4dGVybiBzdHJ1Y3QgcHBjNjRfY2FjaGVzIHBwYzY0X2NhY2hlczsKKworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvY2FjaGVmbHVzaC5oIGIvaW5jbHVkZS9hc20tcHBjNjQvY2FjaGVmbHVzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmYmMwOGIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9jYWNoZWZsdXNoLmgKQEAgLTAsMCArMSw0OCBAQAorI2lmbmRlZiBfUFBDNjRfQ0FDSEVGTFVTSF9ICisjZGVmaW5lIF9QUEM2NF9DQUNIRUZMVVNIX0gKKworI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8YXNtL2NwdXRhYmxlLmg+CisKKy8qCisgKiBObyBjYWNoZSBmbHVzaGluZyBpcyByZXF1aXJlZCB3aGVuIGFkZHJlc3MgbWFwcGluZ3MgYXJlCisgKiBjaGFuZ2VkLCBiZWNhdXNlIHRoZSBjYWNoZXMgb24gUG93ZXJQQ3MgYXJlIHBoeXNpY2FsbHkKKyAqIGFkZHJlc3NlZC4KKyAqLworI2RlZmluZSBmbHVzaF9jYWNoZV9hbGwoKQkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfbW0obW0pCQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9jYWNoZV9yYW5nZSh2bWEsIHN0YXJ0LCBlbmQpCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfcGFnZSh2bWEsIHZtYWRkciwgcGZuKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2ljYWNoZV9wYWdlKHZtYSwgcGFnZSkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfdm1hcChzdGFydCwgZW5kKQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9jYWNoZV92dW5tYXAoc3RhcnQsIGVuZCkJCWRvIHsgfSB3aGlsZSAoMCkKKworZXh0ZXJuIHZvaWQgZmx1c2hfZGNhY2hlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpOworI2RlZmluZSBmbHVzaF9kY2FjaGVfbW1hcF9sb2NrKG1hcHBpbmcpCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2RjYWNoZV9tbWFwX3VubG9jayhtYXBwaW5nKQlkbyB7IH0gd2hpbGUgKDApCisKK2V4dGVybiB2b2lkIF9fZmx1c2hfaWNhY2hlX3JhbmdlKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuIHZvaWQgZmx1c2hfaWNhY2hlX3VzZXJfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQkJICAgIHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkJICAgIGludCBsZW4pOworCitleHRlcm4gdm9pZCBmbHVzaF9kY2FjaGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBzdG9wKTsKK2V4dGVybiB2b2lkIGZsdXNoX2RjYWNoZV9waHlzX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc3RvcCk7CitleHRlcm4gdm9pZCBmbHVzaF9pbnZhbF9kY2FjaGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBzdG9wKTsKKworI2RlZmluZSBjb3B5X3RvX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIHZhZGRyLCBkc3QsIHNyYywgbGVuKSBcCitkbyB7IG1lbWNweShkc3QsIHNyYywgbGVuKTsgXAorICAgICBmbHVzaF9pY2FjaGVfdXNlcl9yYW5nZSh2bWEsIHBhZ2UsIHZhZGRyLCBsZW4pOyBcCit9IHdoaWxlICgwKQorI2RlZmluZSBjb3B5X2Zyb21fdXNlcl9wYWdlKHZtYSwgcGFnZSwgdmFkZHIsIGRzdCwgc3JjLCBsZW4pIFwKKwltZW1jcHkoZHN0LCBzcmMsIGxlbikKKworZXh0ZXJuIHZvaWQgX19mbHVzaF9kY2FjaGVfaWNhY2hlKHZvaWQgKnBhZ2VfdmEpOworCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfaWNhY2hlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc3RvcCkKK3sKKwlpZiAoIWNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX0NPSEVSRU5UX0lDQUNIRSkpCisJCV9fZmx1c2hfaWNhY2hlX3JhbmdlKHN0YXJ0LCBzdG9wKTsKK30KKworI2VuZGlmIC8qIF9QUEM2NF9DQUNIRUZMVVNIX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L2NoZWNrc3VtLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9jaGVja3N1bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyMmQ0NDYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9jaGVja3N1bS5oCkBAIC0wLDAgKzEsMTA3IEBACisjaWZuZGVmIF9QUEM2NF9DSEVDS1NVTV9ICisjZGVmaW5lIF9QUEM2NF9DSEVDS1NVTV9ICisKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKy8qCisgKiBUaGlzIGlzIGEgdmVyc2lvbiBvZiBpcF9jb21wdXRlX2NzdW0oKSBvcHRpbWl6ZWQgZm9yIElQIGhlYWRlcnMsCisgKiB3aGljaCBhbHdheXMgY2hlY2tzdW0gb24gNCBvY3RldCBib3VuZGFyaWVzLiAgaWhsIGlzIHRoZSBudW1iZXIKKyAqIG9mIDMyLWJpdCB3b3JkcyBhbmQgaXMgYWx3YXlzID49IDUuCisgKi8KK2V4dGVybiB1bnNpZ25lZCBzaG9ydCBpcF9mYXN0X2NzdW0odW5zaWduZWQgY2hhciAqIGlwaCwgdW5zaWduZWQgaW50IGlobCk7CisKKy8qCisgKiBjb21wdXRlcyB0aGUgY2hlY2tzdW0gb2YgdGhlIFRDUC9VRFAgcHNldWRvLWhlYWRlcgorICogcmV0dXJucyBhIDE2LWJpdCBjaGVja3N1bSwgYWxyZWFkeSBjb21wbGVtZW50ZWQKKyAqLworZXh0ZXJuIHVuc2lnbmVkIHNob3J0IGNzdW1fdGNwdWRwX21hZ2ljKHVuc2lnbmVkIGxvbmcgc2FkZHIsCisJCQkJCXVuc2lnbmVkIGxvbmcgZGFkZHIsCisJCQkJCXVuc2lnbmVkIHNob3J0IGxlbiwKKwkJCQkJdW5zaWduZWQgc2hvcnQgcHJvdG8sCisJCQkJCXVuc2lnbmVkIGludCBzdW0pOworCisvKgorICogY29tcHV0ZXMgdGhlIGNoZWNrc3VtIG9mIGEgbWVtb3J5IGJsb2NrIGF0IGJ1ZmYsIGxlbmd0aCBsZW4sCisgKiBhbmQgYWRkcyBpbiAic3VtIiAoMzItYml0KQorICoKKyAqIHJldHVybnMgYSAzMi1iaXQgbnVtYmVyIHN1aXRhYmxlIGZvciBmZWVkaW5nIGludG8gaXRzZWxmCisgKiBvciBjc3VtX3RjcHVkcF9tYWdpYworICoKKyAqIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aCBldmVuIGxlbmd0aHMsIGV4Y2VwdAorICogZm9yIHRoZSBsYXN0IGZyYWdtZW50LCB3aGljaCBtYXkgYmUgb2RkCisgKgorICogaXQncyBiZXN0IHRvIGhhdmUgYnVmZiBhbGlnbmVkIG9uIGEgMzItYml0IGJvdW5kYXJ5CisgKi8KK2V4dGVybiB1bnNpZ25lZCBpbnQgY3N1bV9wYXJ0aWFsKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiBidWZmLCBpbnQgbGVuLAorCQkJCSB1bnNpZ25lZCBpbnQgc3VtKTsKKworLyoKKyAqIHRoZSBzYW1lIGFzIGNzdW1fcGFydGlhbCwgYnV0IGNvcGllcyBmcm9tIHNyYyB0byBkc3Qgd2hpbGUgaXQKKyAqIGNoZWNrc3VtcworICovCitleHRlcm4gdW5zaWduZWQgaW50IGNzdW1fcGFydGlhbF9jb3B5X2dlbmVyaWMoY29uc3QgY2hhciAqc3JjLCBjaGFyICpkc3QsCisJCQkJCSAgICAgIGludCBsZW4sIHVuc2lnbmVkIGludCBzdW0sCisJCQkJCSAgICAgIGludCAqc3JjX2VyciwgaW50ICpkc3RfZXJyKTsKKy8qCisgKiB0aGUgc2FtZSBhcyBjc3VtX3BhcnRpYWwsIGJ1dCBjb3BpZXMgZnJvbSBzcmMgdG8gZHN0IHdoaWxlIGl0CisgKiBjaGVja3N1bXMuCisgKi8KKwordW5zaWduZWQgaW50IGNzdW1fcGFydGlhbF9jb3B5X25vY2hlY2soY29uc3QgY2hhciAqc3JjLCAKKwkJCQkgICAgICAgY2hhciAqZHN0LCAKKwkJCQkgICAgICAgaW50IGxlbiwgCisJCQkJICAgICAgIHVuc2lnbmVkIGludCBzdW0pOworCisvKgorICogdHVybnMgYSAzMi1iaXQgcGFydGlhbCBjaGVja3N1bSAoZS5nLiBmcm9tIGNzdW1fcGFydGlhbCkgaW50byBhCisgKiAxJ3MgY29tcGxlbWVudCAxNi1iaXQgY2hlY2tzdW0uCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNzdW1fZm9sZCh1bnNpZ25lZCBpbnQgc3VtKQoreworCXVuc2lnbmVkIGludCB0bXA7CisKKwkvKiBzd2FwIHRoZSB0d28gMTYtYml0IGhhbHZlcyBvZiBzdW0gKi8KKwlfX2FzbV9fKCJybHdpbm0gJTAsJTEsMTYsMCwzMSIgOiAiPXIiICh0bXApIDogInIiIChzdW0pKTsKKwkvKiBpZiB0aGVyZSBpcyBhIGNhcnJ5IGZyb20gYWRkaW5nIHRoZSB0d28gMTYtYml0IGhhbHZlcywKKwkgICBpdCB3aWxsIGNhcnJ5IGZyb20gdGhlIGxvd2VyIGhhbGYgaW50byB0aGUgdXBwZXIgaGFsZiwKKwkgICBnaXZpbmcgdXMgdGhlIGNvcnJlY3Qgc3VtIGluIHRoZSB1cHBlciBoYWxmLiAqLworCXN1bSA9IH4oc3VtICsgdG1wKSA+PiAxNjsKKwlyZXR1cm4gc3VtOworfQorCisvKgorICogdGhpcyByb3V0aW5lIGlzIHVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgSVAtbGlrZSBjaGVja3N1bXMsIG1haW5seQorICogaW4gaWNtcC5jCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgaXBfY29tcHV0ZV9jc3VtKHVuc2lnbmVkIGNoYXIgKiBidWZmLCBpbnQgbGVuKQoreworCXJldHVybiBjc3VtX2ZvbGQoY3N1bV9wYXJ0aWFsKGJ1ZmYsIGxlbiwgMCkpOworfQorCisjZGVmaW5lIGNzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlcihzcmMsIGRzdCwgbGVuLCBzdW0sIGVycnApICAgXAorICAgICAgICBjc3VtX3BhcnRpYWxfY29weV9nZW5lcmljKChzcmMpLCAoZHN0KSwgKGxlbiksIChzdW0pLCAoZXJycCksIE5VTEwpCisKKyNkZWZpbmUgY3N1bV9wYXJ0aWFsX2NvcHlfbm9jaGVjayhzcmMsIGRzdCwgbGVuLCBzdW0pICAgXAorICAgICAgICBjc3VtX3BhcnRpYWxfY29weV9nZW5lcmljKChzcmMpLCAoZHN0KSwgKGxlbiksIChzdW0pLCBOVUxMLCBOVUxMKQorCitzdGF0aWMgaW5saW5lIHUzMiBjc3VtX3RjcHVkcF9ub2ZvbGQodTMyIHNhZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiBkYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcHJvdG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHN1bSkKK3sKKwl1bnNpZ25lZCBsb25nIHMgPSBzdW07CisKKwlzICs9IHNhZGRyOworCXMgKz0gZGFkZHI7CisJcyArPSAocHJvdG8gPDwgMTYpICsgbGVuOworCXMgKz0gKHMgPj4gMzIpOworCXJldHVybiAodTMyKSBzOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L2NvbXBhdC5oIGIvaW5jbHVkZS9hc20tcHBjNjQvY29tcGF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDljMjhkMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L2NvbXBhdC5oCkBAIC0wLDAgKzEsMjAyIEBACisjaWZuZGVmIF9BU01fUFBDNjRfQ09NUEFUX0gKKyNkZWZpbmUgX0FTTV9QUEM2NF9DT01QQVRfSAorLyoKKyAqIEFyY2hpdGVjdHVyZSBzcGVjaWZpYyBjb21wYXRpYmlsaXR5IHR5cGVzCisgKi8KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisKKyNkZWZpbmUgQ09NUEFUX1VTRVJfSFoJMTAwCisKK3R5cGVkZWYgdTMyCQljb21wYXRfc2l6ZV90OwordHlwZWRlZiBzMzIJCWNvbXBhdF9zc2l6ZV90OwordHlwZWRlZiBzMzIJCWNvbXBhdF90aW1lX3Q7Cit0eXBlZGVmIHMzMgkJY29tcGF0X2Nsb2NrX3Q7Cit0eXBlZGVmIHMzMgkJY29tcGF0X3BpZF90OwordHlwZWRlZiB1MzIJCWNvbXBhdF91aWRfdDsKK3R5cGVkZWYgdTMyCQljb21wYXRfZ2lkX3Q7Cit0eXBlZGVmIHUzMgkJY29tcGF0X21vZGVfdDsKK3R5cGVkZWYgdTMyCQljb21wYXRfaW5vX3Q7Cit0eXBlZGVmIHUzMgkJY29tcGF0X2Rldl90OwordHlwZWRlZiBzMzIJCWNvbXBhdF9vZmZfdDsKK3R5cGVkZWYgczY0CQljb21wYXRfbG9mZl90OwordHlwZWRlZiBzMTYJCWNvbXBhdF9ubGlua190OwordHlwZWRlZiB1MTYJCWNvbXBhdF9pcGNfcGlkX3Q7Cit0eXBlZGVmIHMzMgkJY29tcGF0X2RhZGRyX3Q7Cit0eXBlZGVmIHUzMgkJY29tcGF0X2NhZGRyX3Q7Cit0eXBlZGVmIF9fa2VybmVsX2ZzaWRfdAljb21wYXRfZnNpZF90OwordHlwZWRlZiBzMzIJCWNvbXBhdF9rZXlfdDsKKwordHlwZWRlZiBzMzIJCWNvbXBhdF9pbnRfdDsKK3R5cGVkZWYgczMyCQljb21wYXRfbG9uZ190OwordHlwZWRlZiB1MzIJCWNvbXBhdF91aW50X3Q7Cit0eXBlZGVmIHUzMgkJY29tcGF0X3Vsb25nX3Q7CisKK3N0cnVjdCBjb21wYXRfdGltZXNwZWMgeworCWNvbXBhdF90aW1lX3QJdHZfc2VjOworCXMzMgkJdHZfbnNlYzsKK307CisKK3N0cnVjdCBjb21wYXRfdGltZXZhbCB7CisJY29tcGF0X3RpbWVfdAl0dl9zZWM7CisJczMyCQl0dl91c2VjOworfTsKKworc3RydWN0IGNvbXBhdF9zdGF0IHsKKwljb21wYXRfZGV2X3QJc3RfZGV2OworCWNvbXBhdF9pbm9fdAlzdF9pbm87CisJY29tcGF0X21vZGVfdAlzdF9tb2RlOworCWNvbXBhdF9ubGlua190CXN0X25saW5rOwkKKwljb21wYXRfdWlkX3QJc3RfdWlkOworCWNvbXBhdF9naWRfdAlzdF9naWQ7CisJY29tcGF0X2Rldl90CXN0X3JkZXY7CisJY29tcGF0X29mZl90CXN0X3NpemU7CisJY29tcGF0X29mZl90CXN0X2Jsa3NpemU7CisJY29tcGF0X29mZl90CXN0X2Jsb2NrczsKKwljb21wYXRfdGltZV90CXN0X2F0aW1lOworCXUzMgkJc3RfYXRpbWVfbnNlYzsKKwljb21wYXRfdGltZV90CXN0X210aW1lOworCXUzMgkJc3RfbXRpbWVfbnNlYzsKKwljb21wYXRfdGltZV90CXN0X2N0aW1lOworCXUzMgkJc3RfY3RpbWVfbnNlYzsKKwl1MzIJCV9fdW51c2VkNFsyXTsKK307CisKK3N0cnVjdCBjb21wYXRfZmxvY2sgeworCXNob3J0CQlsX3R5cGU7CisJc2hvcnQJCWxfd2hlbmNlOworCWNvbXBhdF9vZmZfdAlsX3N0YXJ0OworCWNvbXBhdF9vZmZfdAlsX2xlbjsKKwljb21wYXRfcGlkX3QJbF9waWQ7Cit9OworCisjZGVmaW5lIEZfR0VUTEs2NAkxMgkvKiAgdXNpbmcgJ3N0cnVjdCBmbG9jazY0JyAqLworI2RlZmluZSBGX1NFVExLNjQJMTMKKyNkZWZpbmUgRl9TRVRMS1c2NAkxNAorCitzdHJ1Y3QgY29tcGF0X2Zsb2NrNjQgeworCXNob3J0CQlsX3R5cGU7CisJc2hvcnQJCWxfd2hlbmNlOworCWNvbXBhdF9sb2ZmX3QJbF9zdGFydDsKKwljb21wYXRfbG9mZl90CWxfbGVuOworCWNvbXBhdF9waWRfdAlsX3BpZDsKK307CisKK3N0cnVjdCBjb21wYXRfc3RhdGZzIHsKKwlpbnQJCWZfdHlwZTsKKwlpbnQJCWZfYnNpemU7CisJaW50CQlmX2Jsb2NrczsKKwlpbnQJCWZfYmZyZWU7CisJaW50CQlmX2JhdmFpbDsKKwlpbnQJCWZfZmlsZXM7CisJaW50CQlmX2ZmcmVlOworCWNvbXBhdF9mc2lkX3QJZl9mc2lkOworCWludAkJZl9uYW1lbGVuOwkvKiBTdW5PUyBpZ25vcmVzIHRoaXMgZmllbGQuICovCisJaW50CQlmX2Zyc2l6ZTsKKwlpbnQJCWZfc3BhcmVbNV07Cit9OworCisjZGVmaW5lIENPTVBBVF9STElNX09MRF9JTkZJTklUWQkweDdmZmZmZmZmCisjZGVmaW5lIENPTVBBVF9STElNX0lORklOSVRZCQkweGZmZmZmZmZmCisKK3R5cGVkZWYgdTMyCQljb21wYXRfb2xkX3NpZ3NldF90OworCisjZGVmaW5lIF9DT01QQVRfTlNJRwkJNjQKKyNkZWZpbmUgX0NPTVBBVF9OU0lHX0JQVwkzMgorCit0eXBlZGVmIHUzMgkJY29tcGF0X3NpZ3NldF93b3JkOworCisjZGVmaW5lIENPTVBBVF9PRkZfVF9NQVgJMHg3ZmZmZmZmZgorI2RlZmluZSBDT01QQVRfTE9GRl9UX01BWAkweDdmZmZmZmZmZmZmZmZmZmZMCisKKy8qCisgKiBBIHBvaW50ZXIgcGFzc2VkIGluIGZyb20gdXNlciBtb2RlLiBUaGlzIHNob3VsZCBub3QKKyAqIGJlIHVzZWQgZm9yIHN5c2NhbGwgcGFyYW1ldGVycywganVzdCBkZWNsYXJlIHRoZW0KKyAqIGFzIHBvaW50ZXJzIGJlY2F1c2UgdGhlIHN5c2NhbGwgZW50cnkgY29kZSB3aWxsIGhhdmUKKyAqIGFwcHJvcHJpYXRlbHkgY29tdmVydGVkIHRoZW0gYWxyZWFkeS4KKyAqLwordHlwZWRlZgl1MzIJCWNvbXBhdF91cHRyX3Q7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3VzZXIgKmNvbXBhdF9wdHIoY29tcGF0X3VwdHJfdCB1cHRyKQoreworCXJldHVybiAodm9pZCBfX3VzZXIgKikodW5zaWduZWQgbG9uZyl1cHRyOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX191c2VyICpjb21wYXRfYWxsb2NfdXNlcl9zcGFjZShsb25nIGxlbikKK3sKKwlzdHJ1Y3QgcHRfcmVncyAqcmVncyA9IGN1cnJlbnQtPnRocmVhZC5yZWdzOworCXVuc2lnbmVkIGxvbmcgdXNwID0gcmVncy0+Z3ByWzFdOworCisJLyoKKwkgKiBXZSBjYW50IGFjY2VzcyBiZWxvdyB0aGUgc3RhY2sgcG9pbnRlciBpbiB0aGUgMzJiaXQgQUJJIGFuZAorCSAqIGNhbiBhY2Nlc3MgMjg4IGJ5dGVzIGluIHRoZSA2NGJpdCBBQkkKKwkgKi8KKwlpZiAoISh0ZXN0X3RocmVhZF9mbGFnKFRJRl8zMkJJVCkpKQorCQl1c3AgLT0gMjg4OworCisJcmV0dXJuICh2b2lkIF9fdXNlciAqKSAodXNwIC0gbGVuKTsKK30KKworLyoKKyAqIGlwYzY0X3Blcm0gaXMgYWN0dWFsbHkgMzIvNjRiaXQgY2xlYW4gYnV0IHNpbmNlIHRoZSBjb21wYXQgbGF5ZXIgcmVmZXJzIHRvCisgKiBpdCB3ZSBtYXkgYXMgd2VsbCBkZWZpbmUgaXQuCisgKi8KK3N0cnVjdCBjb21wYXRfaXBjNjRfcGVybSB7CisJY29tcGF0X2tleV90IGtleTsKKwljb21wYXRfdWlkX3QgdWlkOworCWNvbXBhdF9naWRfdCBnaWQ7CisJY29tcGF0X3VpZF90IGN1aWQ7CisJY29tcGF0X2dpZF90IGNnaWQ7CisJY29tcGF0X21vZGVfdCBtb2RlOworCXVuc2lnbmVkIGludCBzZXE7CisJdW5zaWduZWQgaW50IF9fcGFkMjsKKwl1bnNpZ25lZCBsb25nIF9fdW51c2VkMTsJLyogeWVzIHRoZXkgcmVhbGx5IGFyZSA2NGJpdCBwYWRzICovCisJdW5zaWduZWQgbG9uZyBfX3VudXNlZDI7Cit9OworCitzdHJ1Y3QgY29tcGF0X3NlbWlkNjRfZHMgeworCXN0cnVjdCBjb21wYXRfaXBjNjRfcGVybSBzZW1fcGVybTsKKwl1bnNpZ25lZCBpbnQgX191bnVzZWQxOworCWNvbXBhdF90aW1lX3Qgc2VtX290aW1lOworCXVuc2lnbmVkIGludCBfX3VudXNlZDI7CisJY29tcGF0X3RpbWVfdCBzZW1fY3RpbWU7CisJY29tcGF0X3Vsb25nX3Qgc2VtX25zZW1zOworCWNvbXBhdF91bG9uZ190IF9fdW51c2VkMzsKKwljb21wYXRfdWxvbmdfdCBfX3VudXNlZDQ7Cit9OworCitzdHJ1Y3QgY29tcGF0X21zcWlkNjRfZHMgeworCXN0cnVjdCBjb21wYXRfaXBjNjRfcGVybSBtc2dfcGVybTsKKwl1bnNpZ25lZCBpbnQgX191bnVzZWQxOworCWNvbXBhdF90aW1lX3QgbXNnX3N0aW1lOworCXVuc2lnbmVkIGludCBfX3VudXNlZDI7CisJY29tcGF0X3RpbWVfdCBtc2dfcnRpbWU7CisJdW5zaWduZWQgaW50IF9fdW51c2VkMzsKKwljb21wYXRfdGltZV90IG1zZ19jdGltZTsKKwljb21wYXRfdWxvbmdfdCBtc2dfY2J5dGVzOworCWNvbXBhdF91bG9uZ190IG1zZ19xbnVtOworCWNvbXBhdF91bG9uZ190IG1zZ19xYnl0ZXM7CisJY29tcGF0X3BpZF90IG1zZ19sc3BpZDsKKwljb21wYXRfcGlkX3QgbXNnX2xycGlkOworCWNvbXBhdF91bG9uZ190IF9fdW51c2VkNDsKKwljb21wYXRfdWxvbmdfdCBfX3VudXNlZDU7Cit9OworCitzdHJ1Y3QgY29tcGF0X3NobWlkNjRfZHMgeworCXN0cnVjdCBjb21wYXRfaXBjNjRfcGVybSBzaG1fcGVybTsKKwl1bnNpZ25lZCBpbnQgX191bnVzZWQxOworCWNvbXBhdF90aW1lX3Qgc2htX2F0aW1lOworCXVuc2lnbmVkIGludCBfX3VudXNlZDI7CisJY29tcGF0X3RpbWVfdCBzaG1fZHRpbWU7CisJdW5zaWduZWQgaW50IF9fdW51c2VkMzsKKwljb21wYXRfdGltZV90IHNobV9jdGltZTsKKwl1bnNpZ25lZCBpbnQgX191bnVzZWQ0OworCWNvbXBhdF9zaXplX3Qgc2htX3NlZ3N6OworCWNvbXBhdF9waWRfdCBzaG1fY3BpZDsKKwljb21wYXRfcGlkX3Qgc2htX2xwaWQ7CisJY29tcGF0X3Vsb25nX3Qgc2htX25hdHRjaDsKKwljb21wYXRfdWxvbmdfdCBfX3VudXNlZDU7CisJY29tcGF0X3Vsb25nX3QgX191bnVzZWQ2OworfTsKKworI2VuZGlmIC8qIF9BU01fUFBDNjRfQ09NUEFUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L2NwdXRhYmxlLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9jcHV0YWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiYmZiZWMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9jcHV0YWJsZS5oCkBAIC0wLDAgKzEsMTk3IEBACisvKgorICogIGluY2x1ZGUvYXNtLXBwYzY0L2NwdXRhYmxlLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxIEJlbi4gSGVycmVuc2NobWlkdCAoYmVuaEBrZXJuZWwuY3Jhc2hpbmcub3JnKQorICoKKyAqICBNb2RpZmljYXRpb25zIGZvciBwcGM2NDoKKyAqICAgICAgQ29weXJpZ2h0IChDKSAyMDAzIERhdmUgRW5nZWJyZXRzZW4gPGVuZ2VicmV0QHVzLmlibS5jb20+CisgKiAKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgX19BU01fUFBDX0NQVVRBQkxFX0gKKyNkZWZpbmUgX19BU01fUFBDX0NQVVRBQkxFX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+IC8qIGZvciBBU01fQ09OU1QgKi8KKworLyogRXhwb3NlZCB0byB1c2VybGFuZCBDUFUgZmVhdHVyZXMgLSBNdXN0IG1hdGNoIHBwYzMyIGRlZmluaXRpb25zICovCisjZGVmaW5lIFBQQ19GRUFUVVJFXzMyCQkJMHg4MDAwMDAwMAorI2RlZmluZSBQUENfRkVBVFVSRV82NAkJCTB4NDAwMDAwMDAKKyNkZWZpbmUgUFBDX0ZFQVRVUkVfNjAxX0lOU1RSCQkweDIwMDAwMDAwCisjZGVmaW5lIFBQQ19GRUFUVVJFX0hBU19BTFRJVkVDCQkweDEwMDAwMDAwCisjZGVmaW5lIFBQQ19GRUFUVVJFX0hBU19GUFUJCTB4MDgwMDAwMDAKKyNkZWZpbmUgUFBDX0ZFQVRVUkVfSEFTX01NVQkJMHgwNDAwMDAwMAorI2RlZmluZSBQUENfRkVBVFVSRV9IQVNfNHh4TUFDCQkweDAyMDAwMDAwCisjZGVmaW5lIFBQQ19GRUFUVVJFX1VOSUZJRURfQ0FDSEUJMHgwMTAwMDAwMAorCisjaWZkZWYgX19LRVJORUxfXworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisvKiBUaGlzIHN0cnVjdHVyZSBjYW4gZ3JvdywgaXQncyByZWFsIHNpemUgaXMgdXNlZCBieSBoZWFkLlMgY29kZQorICogdmlhIHRoZSBta2RlZnMgbWVjaGFuaXNtLgorICovCitzdHJ1Y3QgY3B1X3NwZWM7CisKK3R5cGVkZWYJdm9pZCAoKmNwdV9zZXR1cF90KSh1bnNpZ25lZCBsb25nIG9mZnNldCwgc3RydWN0IGNwdV9zcGVjKiBzcGVjKTsKKworc3RydWN0IGNwdV9zcGVjIHsKKwkvKiBDUFUgaXMgbWF0Y2hlZCB2aWEgKFBWUiAmIHB2cl9tYXNrKSA9PSBwdnJfdmFsdWUgKi8KKwl1bnNpZ25lZCBpbnQJcHZyX21hc2s7CisJdW5zaWduZWQgaW50CXB2cl92YWx1ZTsKKworCWNoYXIJCSpjcHVfbmFtZTsKKwl1bnNpZ25lZCBsb25nCWNwdV9mZWF0dXJlczsJCS8qIEtlcm5lbCBmZWF0dXJlcyAqLworCXVuc2lnbmVkIGludAljcHVfdXNlcl9mZWF0dXJlczsJLyogVXNlcmxhbmQgZmVhdHVyZXMgKi8KKworCS8qIGNhY2hlIGxpbmUgc2l6ZXMgKi8KKwl1bnNpZ25lZCBpbnQJaWNhY2hlX2JzaXplOworCXVuc2lnbmVkIGludAlkY2FjaGVfYnNpemU7CisKKwkvKiB0aGlzIGlzIGNhbGxlZCB0byBpbml0aWFsaXplIHZhcmlvdXMgQ1BVIGJpdHMgbGlrZSBMMSBjYWNoZSwKKwkgKiBCSFQsIFNQRCwgZXRjLi4uIGZyb20gaGVhZC5TIGJlZm9yZSBicmFuY2hpbmcgdG8gaWRlbnRpZnlfbWFjaGluZQorCSAqLworCWNwdV9zZXR1cF90CWNwdV9zZXR1cDsKKworCS8qIFRoaXMgaXMgdXNlZCB0byBpZGVudGlmeSBmaXJtd2FyZSBmZWF0dXJlcyB3aGljaCBhcmUgYXZhaWxhYmxlCisJICogdG8gdGhlIGtlcm5lbC4KKwkgKi8KKwl1bnNpZ25lZCBsb25nICAgZmlybXdhcmVfZmVhdHVyZXM7Cit9OworCitleHRlcm4gc3RydWN0IGNwdV9zcGVjCQljcHVfc3BlY3NbXTsKK2V4dGVybiBzdHJ1Y3QgY3B1X3NwZWMJCSpjdXJfY3B1X3NwZWM7CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjcHVfaGFzX2ZlYXR1cmUodW5zaWduZWQgbG9uZyBmZWF0dXJlKQoreworCXJldHVybiBjdXJfY3B1X3NwZWMtPmNwdV9mZWF0dXJlcyAmIGZlYXR1cmU7Cit9CisKKworLyogZmlybXdhcmUgZmVhdHVyZSBiaXRtYXNrIHZhbHVlcyAqLworI2RlZmluZSBGSVJNV0FSRV9NQVhfRkVBVFVSRVMgNjMKKworI2RlZmluZSBGV19GRUFUVVJFX1BGVAkJKDFVTDw8MCkKKyNkZWZpbmUgRldfRkVBVFVSRV9UQ0UJCSgxVUw8PDEpCQorI2RlZmluZSBGV19GRUFUVVJFX1NQUkcwCSgxVUw8PDIpCQorI2RlZmluZSBGV19GRUFUVVJFX0RBQlIJCSgxVUw8PDMpCQorI2RlZmluZSBGV19GRUFUVVJFX0NPUFkJCSgxVUw8PDQpCQorI2RlZmluZSBGV19GRUFUVVJFX0FTUgkJKDFVTDw8NSkJCisjZGVmaW5lIEZXX0ZFQVRVUkVfREVCVUcJKDFVTDw8NikJCisjZGVmaW5lIEZXX0ZFQVRVUkVfVEVSTQkJKDFVTDw8NykJCisjZGVmaW5lIEZXX0ZFQVRVUkVfUEVSRgkJKDFVTDw8OCkJCisjZGVmaW5lIEZXX0ZFQVRVUkVfRFVNUAkJKDFVTDw8OSkJCisjZGVmaW5lIEZXX0ZFQVRVUkVfSU5URVJSVVBUCSgxVUw8PDEwKQkKKyNkZWZpbmUgRldfRkVBVFVSRV9NSUdSQVRFCSgxVUw8PDExKQkKKyNkZWZpbmUgRldfRkVBVFVSRV9QRVJGTU9OCSgxVUw8PDEyKQkKKyNkZWZpbmUgRldfRkVBVFVSRV9DUlEgICAJKDFVTDw8MTMpCQorI2RlZmluZSBGV19GRUFUVVJFX1ZJTyAgIAkoMVVMPDwxNCkJCisjZGVmaW5lIEZXX0ZFQVRVUkVfUkRNQSAgIAkoMVVMPDwxNSkJCisjZGVmaW5lIEZXX0ZFQVRVUkVfTExBTiAgIAkoMVVMPDwxNikJCisjZGVmaW5lIEZXX0ZFQVRVUkVfQlVMSyAgIAkoMVVMPDwxNykJCisjZGVmaW5lIEZXX0ZFQVRVUkVfWERBQlIgICAJKDFVTDw8MTgpCQorI2RlZmluZSBGV19GRUFUVVJFX01VTFRJVENFICAgCSgxVUw8PDE5KQkKKyNkZWZpbmUgRldfRkVBVFVSRV9TUExQQVIgICAJKDFVTDw8MjApCQorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgdW5zaWduZWQgbG9uZyB2YWw7CisgICAgY2hhciAqIG5hbWU7Cit9IGZpcm13YXJlX2ZlYXR1cmVfdDsKKworZXh0ZXJuIGZpcm13YXJlX2ZlYXR1cmVfdCBmaXJtd2FyZV9mZWF0dXJlc190YWJsZVtdOworCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKy8qIENQVSBrZXJuZWwgZmVhdHVyZXMgKi8KKworLyogUmV0YWluIHRoZSAzMmIgZGVmaW5pdGlvbnMgZm9yIHRoZSB0aW1lIGJlaW5nIC0gdXNlIGJvdHRvbSBoYWxmIG9mIHdvcmQgKi8KKyNkZWZpbmUgQ1BVX0ZUUl9TUExJVF9JRF9DQUNIRQkJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMDAwMDAwMSkKKyNkZWZpbmUgQ1BVX0ZUUl9MMkNSCQkJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMDAwMDAwMikKKyNkZWZpbmUgQ1BVX0ZUUl9TUEVDNzQ1MAkJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMDAwMDAwNCkKKyNkZWZpbmUgQ1BVX0ZUUl9BTFRJVkVDCQkJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMDAwMDAwOCkKKyNkZWZpbmUgQ1BVX0ZUUl9UQVUJCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDAwMDEwKQorI2RlZmluZSBDUFVfRlRSX0NBTl9ET1pFCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDAwMDIwKQorI2RlZmluZSBDUFVfRlRSX1VTRV9UQgkJCUFTTV9DT05TVCgweDAwMDAwMDAwMDAwMDAwNDApCisjZGVmaW5lIENQVV9GVFJfNjA0X1BFUkZfTU9OCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDAwMDgwKQorI2RlZmluZSBDUFVfRlRSXzYwMQkJCUFTTV9DT05TVCgweDAwMDAwMDAwMDAwMDAxMDApCisjZGVmaW5lIENQVV9GVFJfSFBURV9UQUJMRQkJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMDAwMDIwMCkKKyNkZWZpbmUgQ1BVX0ZUUl9DQU5fTkFQCQkJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMDAwMDQwMCkKKyNkZWZpbmUgQ1BVX0ZUUl9MM0NSCQkJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMDAwMDgwMCkKKyNkZWZpbmUgQ1BVX0ZUUl9MM19ESVNBQkxFX05BUAkJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMDAwMTAwMCkKKyNkZWZpbmUgQ1BVX0ZUUl9OQVBfRElTQUJMRV9MMl9QUglBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDAyMDAwKQorI2RlZmluZSBDUFVfRlRSX0RVQUxfUExMXzc1MEZYCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDA0MDAwKQorCisvKiBBZGQgdGhlIDY0YiBwcm9jZXNzb3IgdW5pcXVlIGZlYXR1cmVzIGluIHRoZSB0b3AgaGFsZiBvZiB0aGUgd29yZCAqLworI2RlZmluZSBDUFVfRlRSX1NMQiAgICAgICAgICAgCQlBU01fQ09OU1QoMHgwMDAwMDAwMTAwMDAwMDAwKQorI2RlZmluZSBDUFVfRlRSXzE2TV9QQUdFICAgICAgCQlBU01fQ09OU1QoMHgwMDAwMDAwMjAwMDAwMDAwKQorI2RlZmluZSBDUFVfRlRSX1RMQklFTCAgICAgICAgIAkJQVNNX0NPTlNUKDB4MDAwMDAwMDQwMDAwMDAwMCkKKyNkZWZpbmUgQ1BVX0ZUUl9OT0VYRUNVVEUgICAgIAkJQVNNX0NPTlNUKDB4MDAwMDAwMDgwMDAwMDAwMCkKKyNkZWZpbmUgQ1BVX0ZUUl9OT0RTSVNSQUxJR04gIAkJQVNNX0NPTlNUKDB4MDAwMDAwMTAwMDAwMDAwMCkKKyNkZWZpbmUgQ1BVX0ZUUl9JQUJSICAJCQlBU01fQ09OU1QoMHgwMDAwMDAyMDAwMDAwMDAwKQorI2RlZmluZSBDUFVfRlRSX01NQ1JBICAJCQlBU01fQ09OU1QoMHgwMDAwMDA0MDAwMDAwMDAwKQorI2RlZmluZSBDUFVfRlRSX1BNQzggIAkJCUFTTV9DT05TVCgweDAwMDAwMDgwMDAwMDAwMDApCisjZGVmaW5lIENQVV9GVFJfU01UICAJCQlBU01fQ09OU1QoMHgwMDAwMDEwMDAwMDAwMDAwKQorI2RlZmluZSBDUFVfRlRSX0NPSEVSRU5UX0lDQUNIRSAgCUFTTV9DT05TVCgweDAwMDAwMjAwMDAwMDAwMDApCisjZGVmaW5lIENQVV9GVFJfTE9DS0xFU1NfVExCSUUJCUFTTV9DT05TVCgweDAwMDAwNDAwMDAwMDAwMDApCisjZGVmaW5lIENQVV9GVFJfTU1DUkFfU0lIVgkJQVNNX0NPTlNUKDB4MDAwMDA4MDAwMDAwMDAwMCkKKworLyogUGxhdGZvcm0gZmlybXdhcmUgZmVhdHVyZXMgKi8KKyNkZWZpbmUgRldfRlRSXwkJCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDAwMDAxKQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2RlZmluZSBDT01NT05fVVNFUl9QUEM2NAkoUFBDX0ZFQVRVUkVfMzIgfCBQUENfRkVBVFVSRV82NCB8IFwKKwkJCSAgICAgICAgIFBQQ19GRUFUVVJFX0hBU19GUFUgfCBQUENfRkVBVFVSRV9IQVNfTU1VKQorCisjZGVmaW5lIENQVV9GVFJfUFBDQVNfQVJDSF9WMl9CQVNFIChDUFVfRlRSX1NMQiB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENQVV9GVFJfVExCSUVMIHwgQ1BVX0ZUUl9OT0VYRUNVVEUgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUFVfRlRSX05PRFNJU1JBTElHTikKKworLyogaVNlcmllcyBkb2Vzbid0IHN1cHBvcnQgbGFyZ2UgcGFnZXMgKi8KKyNpZmRlZiBDT05GSUdfUFBDX0lTRVJJRVMKKyNkZWZpbmUgQ1BVX0ZUUl9QUENBU19BUkNIX1YyCShDUFVfRlRSX1BQQ0FTX0FSQ0hfVjJfQkFTRSkKKyNlbHNlCisjZGVmaW5lIENQVV9GVFJfUFBDQVNfQVJDSF9WMgkoQ1BVX0ZUUl9QUENBU19BUkNIX1YyX0JBU0UgfCBDUFVfRlRSXzE2TV9QQUdFKQorI2VuZGlmCisKKyNkZWZpbmUgQ09NTU9OX1BQQzY0X0ZXCSgwKQorI2VuZGlmCisKKyNpZmRlZiBfX0FTU0VNQkxZX18KKworI2RlZmluZSBCRUdJTl9GVFJfU0VDVElPTgkJOTg6CisKKyNkZWZpbmUgRU5EX0ZUUl9TRUNUSU9OKG1zaywgdmFsKQkJXAorOTk6CQkJCQkJXAorCS5zZWN0aW9uIF9fZnRyX2ZpeHVwLCJhIjsJCVwKKwkuYWxpZ24gMzsJCQkJXAorCS5sbG9uZyBtc2s7CQkJICAgICAgICBcCisJLmxsb25nIHZhbDsJCQkgICAgICAgIFwKKwkubGxvbmcgOThiOwkJCSAgICAgICAgXAorCS5sbG9uZyA5OWI7CSAJCSAgICAgICAgXAorCS5wcmV2aW91cworCisjZWxzZQorCisjZGVmaW5lIEJFR0lOX0ZUUl9TRUNUSU9OCQkiOTg6XG4iCisjZGVmaW5lIEVORF9GVFJfU0VDVElPTihtc2ssIHZhbCkJCVwKKyI5OTpcbiIJCQkJCQlcCisiCS5zZWN0aW9uIF9fZnRyX2ZpeHVwLFwiYVwiO1xuIgkJXAorIgkuYWxpZ24gMztcbiIJCQkJXAorIgkubGxvbmcgIiNtc2siO1xuIgkJCVwKKyIJLmxsb25nICIjdmFsIjtcbiIJCQlcCisiCS5sbG9uZyA5OGI7XG4iCQkJICAgICAgICBcCisiCS5sbG9uZyA5OWI7XG4iCSAJCSAgICAgICAgXAorIgkucHJldmlvdXNcbiIKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisjZGVmaW5lIEVORF9GVFJfU0VDVElPTl9JRlNFVChtc2spCUVORF9GVFJfU0VDVElPTigobXNrKSwgKG1zaykpCisjZGVmaW5lIEVORF9GVFJfU0VDVElPTl9JRkNMUihtc2spCUVORF9GVFJfU0VDVElPTigobXNrKSwgMCkKKworI2VuZGlmIC8qIF9fQVNNX1BQQ19DUFVUQUJMRV9IICovCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9jcHV0aW1lLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9jcHV0aW1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU5ZmFmNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L2NwdXRpbWUuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19QUENfQ1BVVElNRV9ICisjZGVmaW5lIF9fUFBDX0NQVVRJTUVfSAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvY3B1dGltZS5oPgorCisjZW5kaWYgLyogX19QUENfQ1BVVElNRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9jdXJyZW50LmggYi9pbmNsdWRlL2FzbS1wcGM2NC9jdXJyZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJkZGM2MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L2N1cnJlbnQuaApAQCAtMCwwICsxLDE2IEBACisjaWZuZGVmIF9QUEM2NF9DVVJSRU5UX0gKKyNkZWZpbmUgX1BQQzY0X0NVUlJFTlRfSAorCisjaW5jbHVkZSA8YXNtL3BhY2EuaD4KKworLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2RlZmluZSBnZXRfY3VycmVudCgpICAgKGdldF9wYWNhKCktPl9fY3VycmVudCkKKyNkZWZpbmUgY3VycmVudCAgICAgICAgIGdldF9jdXJyZW50KCkKKworI2VuZGlmIC8qICEoX1BQQzY0X0NVUlJFTlRfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L2RiZG1hLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9kYmRtYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyZDVkNWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9kYmRtYS5oCkBAIC0wLDAgKzEsMiBAQAorI2luY2x1ZGUgPGFzbS1wcGMvZGJkbWEuaD4KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvZGVsYXkuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L2RlbGF5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVmMTk4YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L2RlbGF5LmgKQEAgLTAsMCArMSw0OCBAQAorI2lmbmRlZiBfUFBDNjRfREVMQVlfSAorI2RlZmluZSBfUFBDNjRfREVMQVlfSAorCisvKgorICogQ29weXJpZ2h0IDE5OTYsIFBhdWwgTWFja2VycmFzLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogUFBDNjQgU3VwcG9ydCBhZGRlZCBieSBEYXZlIEVuZ2VicmV0c2VuLCBUb2RkIEluZ2xldHQsIE1pa2UgQ29ycmlnYW4sCisgKiBBbnRvbiBCbGFuY2hhcmQuCisgKi8KKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdGJfdGlja3NfcGVyX3VzZWM7CisKKy8qIGRlZmluZSB0aGVzZSBoZXJlIHRvIHByZXZlbnQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzICovIAorI2RlZmluZSBfX0hNVF9sb3coKQlhc20gdm9sYXRpbGUoIm9yIDEsMSwxIikKKyNkZWZpbmUgX19ITVRfbWVkaXVtKCkJYXNtIHZvbGF0aWxlKCJvciAyLDIsMiIpCisjZGVmaW5lIF9fYmFycmllcigpCWFzbSB2b2xhdGlsZSgiIjo6OiJtZW1vcnkiKQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19nZXRfdGIodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHJ2YWw7CisKKwlhc20gdm9sYXRpbGUoIm1mdGIgJTAiIDogIj1yIiAocnZhbCkpOworCXJldHVybiBydmFsOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19kZWxheSh1bnNpZ25lZCBsb25nIGxvb3BzKQoreworCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBfX2dldF90YigpOworCisJd2hpbGUoKF9fZ2V0X3RiKCktc3RhcnQpIDwgbG9vcHMpCisJCV9fSE1UX2xvdygpOworCV9fSE1UX21lZGl1bSgpOworCV9fYmFycmllcigpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdWRlbGF5KHVuc2lnbmVkIGxvbmcgdXNlY3MpCit7CisJdW5zaWduZWQgbG9uZyBsb29wcyA9IHRiX3RpY2tzX3Blcl91c2VjICogdXNlY3M7CisKKwlfX2RlbGF5KGxvb3BzKTsKK30KKworI2VuZGlmIC8qIF9QUEM2NF9ERUxBWV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9kaXY2NC5oIGIvaW5jbHVkZS9hc20tcHBjNjQvZGl2NjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2Q5NzhjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvZGl2NjQuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZGl2NjQuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L2RtYS1tYXBwaW5nLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9kbWEtbWFwcGluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhZDhhZGUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9kbWEtbWFwcGluZy5oCkBAIC0wLDAgKzEsMTM2IEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDQgSUJNCisgKgorICogSW1wbGVtZW50cyB0aGUgZ2VuZXJpYyBkZXZpY2UgZG1hIEFQSSBmb3IgcHBjNjQuIEhhbmRsZXMKKyAqIHRoZSBwY2kgYW5kIHZpbyBidXNzZXMKKyAqLworCisjaWZuZGVmIF9BU01fRE1BX01BUFBJTkdfSAorI2RlZmluZSBfQVNNX0RNQV9NQVBQSU5HX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KKy8qIG5lZWQgc3RydWN0IHBhZ2UgZGVmaW5pdGlvbnMgKi8KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGFzbS9zY2F0dGVybGlzdC5oPgorI2luY2x1ZGUgPGFzbS9idWcuaD4KKworI2RlZmluZSBETUFfRVJST1JfQ09ERQkJKH4oZG1hX2FkZHJfdCkweDApCisKK2V4dGVybiBpbnQgZG1hX3N1cHBvcnRlZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBtYXNrKTsKK2V4dGVybiBpbnQgZG1hX3NldF9tYXNrKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IGRtYV9tYXNrKTsKK2V4dGVybiB2b2lkICpkbWFfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKKwkJZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgdW5zaWduZWQgaW50IF9fbm9jYXN0IGZsYWcpOworZXh0ZXJuIHZvaWQgZG1hX2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgdm9pZCAqY3B1X2FkZHIsCisJCWRtYV9hZGRyX3QgZG1hX2hhbmRsZSk7CitleHRlcm4gZG1hX2FkZHJfdCBkbWFfbWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLAorCQlzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKTsKK2V4dGVybiB2b2lkIGRtYV91bm1hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyLAorCQlzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKTsKK2V4dGVybiBkbWFfYWRkcl90IGRtYV9tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwYWdlICpwYWdlLAorCQl1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsCisJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbik7CitleHRlcm4gdm9pZCBkbWFfdW5tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHJlc3MsCisJCXNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pOworZXh0ZXJuIGludCBkbWFfbWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbnRzLAorCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pOworZXh0ZXJuIHZvaWQgZG1hX3VubWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwkJaW50IG5od2VudHJpZXMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbik7CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHNpemVfdCBzaXplLAorCQkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCUJVR19PTihkaXJlY3Rpb24gPT0gRE1BX05PTkUpOworCS8qIG5vdGhpbmcgdG8gZG8gKi8KK30KKworc3RhdGljIGlubGluZSB2b2lkCitkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgc2l6ZV90IHNpemUsCisJCQkgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJQlVHX09OKGRpcmVjdGlvbiA9PSBETUFfTk9ORSk7CisJLyogbm90aGluZyB0byBkbyAqLworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2RtYV9zeW5jX3NnX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVsZW1zLAorCQkgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCUJVR19PTihkaXJlY3Rpb24gPT0gRE1BX05PTkUpOworCS8qIG5vdGhpbmcgdG8gZG8gKi8KK30KKworc3RhdGljIGlubGluZSB2b2lkCitkbWFfc3luY19zZ19mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbGVtcywKKwkJICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlCVUdfT04oZGlyZWN0aW9uID09IERNQV9OT05FKTsKKwkvKiBub3RoaW5nIHRvIGRvICovCit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGRtYV9tYXBwaW5nX2Vycm9yKGRtYV9hZGRyX3QgZG1hX2FkZHIpCit7CisJcmV0dXJuIChkbWFfYWRkciA9PSBETUFfRVJST1JfQ09ERSk7Cit9CisKKy8qIE5vdyBmb3IgdGhlIEFQSSBleHRlbnNpb25zIG92ZXIgdGhlIHBjaV8gb25lICovCisKKyNkZWZpbmUgZG1hX2FsbG9jX25vbmNvaGVyZW50KGQsIHMsIGgsIGYpIGRtYV9hbGxvY19jb2hlcmVudChkLCBzLCBoLCBmKQorI2RlZmluZSBkbWFfZnJlZV9ub25jb2hlcmVudChkLCBzLCB2LCBoKSBkbWFfZnJlZV9jb2hlcmVudChkLCBzLCB2LCBoKQorI2RlZmluZSBkbWFfaXNfY29uc2lzdGVudChkKQkoMSkKKworc3RhdGljIGlubGluZSBpbnQKK2RtYV9nZXRfY2FjaGVfYWxpZ25tZW50KHZvaWQpCit7CisJLyogbm8gZWFzeSB3YXkgdG8gZ2V0IGNhY2hlIHNpemUgb24gYWxsIHByb2Nlc3NvcnMsIHNvIHJldHVybgorCSAqIHRoZSBtYXhpbXVtIHBvc3NpYmxlLCB0byBiZSBzYWZlICovCisJcmV0dXJuICgxIDw8IEwxX0NBQ0hFX1NISUZUX01BWCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZG1hX3N5bmNfc2luZ2xlX3JhbmdlX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCisJCQkgICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsCisJCQkgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJQlVHX09OKGRpcmVjdGlvbiA9PSBETUFfTk9ORSk7CisJLyogbm90aGluZyB0byBkbyAqLworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2RtYV9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAorCQkJCSB1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsCisJCQkJIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlCVUdfT04oZGlyZWN0aW9uID09IERNQV9OT05FKTsKKwkvKiBub3RoaW5nIHRvIGRvICovCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZG1hX2NhY2hlX3N5bmModm9pZCAqdmFkZHIsIHNpemVfdCBzaXplLAorCSAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJQlVHX09OKGRpcmVjdGlvbiA9PSBETUFfTk9ORSk7CisJLyogbm90aGluZyB0byBkbyAqLworfQorCisvKgorICogRE1BIG9wZXJhdGlvbnMgYXJlIGFic3RyYWN0ZWQgZm9yIEc1IHZzLiBpL3BTZXJpZXMsIFBDSSB2cy4gVklPCisgKi8KK3N0cnVjdCBkbWFfbWFwcGluZ19vcHMgeworCXZvaWQgKgkJKCphbGxvY19jb2hlcmVudCkoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKKwkJCQlkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZmxhZyk7CisJdm9pZAkJKCpmcmVlX2NvaGVyZW50KShzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAorCQkJCXZvaWQgKnZhZGRyLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUpOworCWRtYV9hZGRyX3QJKCptYXBfc2luZ2xlKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnB0ciwKKwkJCQlzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKTsKKwl2b2lkCQkoKnVubWFwX3NpbmdsZSkoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyLAorCQkJCXNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pOworCWludAkJKCptYXBfc2cpKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwkJCQlpbnQgbmVudHMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbik7CisJdm9pZAkJKCp1bm1hcF9zZykoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCQkJCWludCBuZW50cywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKTsKKwlpbnQJCSgqZG1hX3N1cHBvcnRlZCkoc3RydWN0IGRldmljZSAqZGV2LCB1NjQgbWFzayk7CisJaW50CQkoKmRhY19kbWFfc3VwcG9ydGVkKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBtYXNrKTsKK307CisKKyNlbmRpZgkvKiBfQVNNX0RNQV9NQVBQSU5HX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L2RtYS5oIGIvaW5jbHVkZS9hc20tcHBjNjQvZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY5M2I4MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L2RtYS5oCkBAIC0wLDAgKzEsMzI2IEBACisvKiAKKyAqIGxpbnV4L2luY2x1ZGUvYXNtL2RtYS5oOiBEZWZpbmVzIGZvciB1c2luZyBhbmQgYWxsb2NhdGluZyBkbWEgY2hhbm5lbHMuCisgKiBXcml0dGVuIGJ5IEhlbm51cyBCZXJnbWFuLCAxOTkyLgorICogSGlnaCBETUEgY2hhbm5lbCBzdXBwb3J0ICYgaW5mbyBieSBIYW5udSBTYXZvbGFpbmVuCisgKiBhbmQgSm9obiBCb3lkLCBOb3YuIDE5OTIuCisgKiBDaGFuZ2VzIGZvciBwcGMgc291bmQgYnkgQ2hyaXN0b3BoIE5hZGlnCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9BU01fRE1BX0gKKyNkZWZpbmUgX0FTTV9ETUFfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisKKyNpZm5kZWYgTUFYX0RNQV9DSEFOTkVMUworI2RlZmluZSBNQVhfRE1BX0NIQU5ORUxTCTgKKyNlbmRpZgorCisvKiBUaGUgbWF4aW11bSBhZGRyZXNzIHRoYXQgd2UgY2FuIHBlcmZvcm0gYSBETUEgdHJhbnNmZXIgdG8gb24gdGhpcyBwbGF0Zm9ybSAqLworLyogRG9lc24ndCByZWFsbHkgYXBwbHkuLi4gKi8KKyNkZWZpbmUgTUFYX0RNQV9BRERSRVNTICAofjBVTCkKKworI2RlZmluZSBkbWFfb3V0YglvdXRiCisjZGVmaW5lIGRtYV9pbmIJCWluYgorCisvKgorICogTk9URVMgYWJvdXQgRE1BIHRyYW5zZmVyczoKKyAqCisgKiAgY29udHJvbGxlciAxOiBjaGFubmVscyAwLTMsIGJ5dGUgb3BlcmF0aW9ucywgcG9ydHMgMDAtMUYKKyAqICBjb250cm9sbGVyIDI6IGNoYW5uZWxzIDQtNywgd29yZCBvcGVyYXRpb25zLCBwb3J0cyBDMC1ERgorICoKKyAqICAtIEFMTCByZWdpc3RlcnMgYXJlIDggYml0cyBvbmx5LCByZWdhcmRsZXNzIG9mIHRyYW5zZmVyIHNpemUKKyAqICAtIGNoYW5uZWwgNCBpcyBub3QgdXNlZCAtIGNhc2NhZGVzIDEgaW50byAyLgorICogIC0gY2hhbm5lbHMgMC0zIGFyZSBieXRlIC0gYWRkcmVzc2VzL2NvdW50cyBhcmUgZm9yIHBoeXNpY2FsIGJ5dGVzCisgKiAgLSBjaGFubmVscyA1LTcgYXJlIHdvcmQgLSBhZGRyZXNzZXMvY291bnRzIGFyZSBmb3IgcGh5c2ljYWwgd29yZHMKKyAqICAtIHRyYW5zZmVycyBtdXN0IG5vdCBjcm9zcyBwaHlzaWNhbCA2NEsgKDAtMykgb3IgMTI4SyAoNS03KSBib3VuZGFyaWVzCisgKiAgLSB0cmFuc2ZlciBjb3VudCBsb2FkZWQgdG8gcmVnaXN0ZXJzIGlzIDEgbGVzcyB0aGFuIGFjdHVhbCBjb3VudAorICogIC0gY29udHJvbGxlciAyIG9mZnNldHMgYXJlIGFsbCBldmVuICgyeCBvZmZzZXRzIGZvciBjb250cm9sbGVyIDEpCisgKiAgLSBwYWdlIHJlZ2lzdGVycyBmb3IgNS03IGRvbid0IHVzZSBkYXRhIGJpdCAwLCByZXByZXNlbnQgMTI4SyBwYWdlcworICogIC0gcGFnZSByZWdpc3RlcnMgZm9yIDAtMyB1c2UgYml0IDAsIHJlcHJlc2VudCA2NEsgcGFnZXMKKyAqCisgKiBPbiBQUmVQLCBETUEgdHJhbnNmZXJzIGFyZSBsaW1pdGVkIHRvIHRoZSBsb3dlciAxNk1CIG9mIF9waHlzaWNhbF8gbWVtb3J5LiAgCisgKiBPbiBDSFJQLCB0aGUgVzgzQzU1M0YgKGFuZCBWTFNJIFRvbGxnYXRlPykgc3VwcG9ydCBmdWxsIDMyIGJpdCBhZGRyZXNzaW5nLgorICogTm90ZSB0aGF0IGFkZHJlc3NlcyBsb2FkZWQgaW50byByZWdpc3RlcnMgbXVzdCBiZSBfcGh5c2ljYWxfIGFkZHJlc3NlcywKKyAqIG5vdCBsb2dpY2FsIGFkZHJlc3NlcyAod2hpY2ggbWF5IGRpZmZlciBpZiBwYWdpbmcgaXMgYWN0aXZlKS4KKyAqCisgKiAgQWRkcmVzcyBtYXBwaW5nIGZvciBjaGFubmVscyAwLTM6CisgKgorICogICBBMjMgLi4uIEExNiBBMTUgLi4uIEE4ICBBNyAuLi4gQTAgICAgKFBoeXNpY2FsIGFkZHJlc3NlcykKKyAqICAgIHwgIC4uLiAgfCAgIHwgIC4uLiB8ICAgfCAgLi4uIHwKKyAqICAgIHwgIC4uLiAgfCAgIHwgIC4uLiB8ICAgfCAgLi4uIHwKKyAqICAgIHwgIC4uLiAgfCAgIHwgIC4uLiB8ICAgfCAgLi4uIHwKKyAqICAgUDcgIC4uLiAgUDAgIEE3IC4uLiBBMCAgQTcgLi4uIEEwICAgCisgKiB8ICAgIFBhZ2UgICAgfCBBZGRyIE1TQiB8IEFkZHIgTFNCIHwgICAoRE1BIHJlZ2lzdGVycykKKyAqCisgKiAgQWRkcmVzcyBtYXBwaW5nIGZvciBjaGFubmVscyA1LTc6CisgKgorICogICBBMjMgLi4uIEExNyBBMTYgQTE1IC4uLiBBOSBBOCBBNyAuLi4gQTEgQTAgICAgKFBoeXNpY2FsIGFkZHJlc3NlcykKKyAqICAgIHwgIC4uLiAgfCAgIFwgICBcICAgLi4uIFwgIFwgIFwgIC4uLiBcICBcCisgKiAgICB8ICAuLi4gIHwgICAgXCAgIFwgICAuLi4gXCAgXCAgXCAgLi4uIFwgIChub3QgdXNlZCkKKyAqICAgIHwgIC4uLiAgfCAgICAgXCAgIFwgICAuLi4gXCAgXCAgXCAgLi4uIFwKKyAqICAgUDcgIC4uLiAgUDEgKDApIEE3IEE2ICAuLi4gQTAgQTcgQTYgLi4uIEEwICAgCisgKiB8ICAgICAgUGFnZSAgICAgIHwgIEFkZHIgTVNCICAgfCAgQWRkciBMU0IgIHwgICAoRE1BIHJlZ2lzdGVycykKKyAqCisgKiBBZ2FpbiwgY2hhbm5lbHMgNS03IHRyYW5zZmVyIF9waHlzaWNhbF8gd29yZHMgKDE2IGJpdHMpLCBzbyBhZGRyZXNzZXMKKyAqIGFuZCBjb3VudHMgX211c3RfIGJlIHdvcmQtYWxpZ25lZCAodGhlIGxvd2VzdCBhZGRyZXNzIGJpdCBpcyBfaWdub3JlZF8gYXQKKyAqIHRoZSBoYXJkd2FyZSBsZXZlbCwgc28gb2RkLWJ5dGUgdHJhbnNmZXJzIGFyZW4ndCBwb3NzaWJsZSkuCisgKgorICogVHJhbnNmZXIgY291bnQgKF9ub3QgIyBieXRlc18pIGlzIGxpbWl0ZWQgdG8gNjRLLCByZXByZXNlbnRlZCBhcyBhY3R1YWwKKyAqIGNvdW50IC0gMSA6IDY0SyA9PiAweEZGRkYsIDEgPT4gMHgwMDAwLiAgVGh1cywgY291bnQgaXMgYWx3YXlzIDEgb3IgbW9yZSwKKyAqIGFuZCB1cCB0byAxMjhLIGJ5dGVzIG1heSBiZSB0cmFuc2ZlcnJlZCBvbiBjaGFubmVscyA1LTcgaW4gb25lIG9wZXJhdGlvbi4gCisgKgorICovCisKKy8qIDgyMzcgRE1BIGNvbnRyb2xsZXJzICovCisjZGVmaW5lIElPX0RNQTFfQkFTRQkweDAwCS8qIDggYml0IHNsYXZlIERNQSwgY2hhbm5lbHMgMC4uMyAqLworI2RlZmluZSBJT19ETUEyX0JBU0UJMHhDMAkvKiAxNiBiaXQgbWFzdGVyIERNQSwgY2ggNCg9c2xhdmUgaW5wdXQpLi43ICovCisKKy8qIERNQSBjb250cm9sbGVyIHJlZ2lzdGVycyAqLworI2RlZmluZSBETUExX0NNRF9SRUcJCTB4MDgJLyogY29tbWFuZCByZWdpc3RlciAodykgKi8KKyNkZWZpbmUgRE1BMV9TVEFUX1JFRwkJMHgwOAkvKiBzdGF0dXMgcmVnaXN0ZXIgKHIpICovCisjZGVmaW5lIERNQTFfUkVRX1JFRyAgICAgICAgICAgIDB4MDkgICAgLyogcmVxdWVzdCByZWdpc3RlciAodykgKi8KKyNkZWZpbmUgRE1BMV9NQVNLX1JFRwkJMHgwQQkvKiBzaW5nbGUtY2hhbm5lbCBtYXNrICh3KSAqLworI2RlZmluZSBETUExX01PREVfUkVHCQkweDBCCS8qIG1vZGUgcmVnaXN0ZXIgKHcpICovCisjZGVmaW5lIERNQTFfQ0xFQVJfRkZfUkVHCTB4MEMJLyogY2xlYXIgcG9pbnRlciBmbGlwLWZsb3AgKHcpICovCisjZGVmaW5lIERNQTFfVEVNUF9SRUcgICAgICAgICAgIDB4MEQgICAgLyogVGVtcG9yYXJ5IFJlZ2lzdGVyIChyKSAqLworI2RlZmluZSBETUExX1JFU0VUX1JFRwkJMHgwRAkvKiBNYXN0ZXIgQ2xlYXIgKHcpICovCisjZGVmaW5lIERNQTFfQ0xSX01BU0tfUkVHICAgICAgIDB4MEUgICAgLyogQ2xlYXIgTWFzayAqLworI2RlZmluZSBETUExX01BU0tfQUxMX1JFRyAgICAgICAweDBGICAgIC8qIGFsbC1jaGFubmVscyBtYXNrICh3KSAqLworCisjZGVmaW5lIERNQTJfQ01EX1JFRwkJMHhEMAkvKiBjb21tYW5kIHJlZ2lzdGVyICh3KSAqLworI2RlZmluZSBETUEyX1NUQVRfUkVHCQkweEQwCS8qIHN0YXR1cyByZWdpc3RlciAocikgKi8KKyNkZWZpbmUgRE1BMl9SRVFfUkVHICAgICAgICAgICAgMHhEMiAgICAvKiByZXF1ZXN0IHJlZ2lzdGVyICh3KSAqLworI2RlZmluZSBETUEyX01BU0tfUkVHCQkweEQ0CS8qIHNpbmdsZS1jaGFubmVsIG1hc2sgKHcpICovCisjZGVmaW5lIERNQTJfTU9ERV9SRUcJCTB4RDYJLyogbW9kZSByZWdpc3RlciAodykgKi8KKyNkZWZpbmUgRE1BMl9DTEVBUl9GRl9SRUcJMHhEOAkvKiBjbGVhciBwb2ludGVyIGZsaXAtZmxvcCAodykgKi8KKyNkZWZpbmUgRE1BMl9URU1QX1JFRyAgICAgICAgICAgMHhEQSAgICAvKiBUZW1wb3JhcnkgUmVnaXN0ZXIgKHIpICovCisjZGVmaW5lIERNQTJfUkVTRVRfUkVHCQkweERBCS8qIE1hc3RlciBDbGVhciAodykgKi8KKyNkZWZpbmUgRE1BMl9DTFJfTUFTS19SRUcgICAgICAgMHhEQyAgICAvKiBDbGVhciBNYXNrICovCisjZGVmaW5lIERNQTJfTUFTS19BTExfUkVHICAgICAgIDB4REUgICAgLyogYWxsLWNoYW5uZWxzIG1hc2sgKHcpICovCisKKyNkZWZpbmUgRE1BX0FERFJfMCAgICAgICAgICAgICAgMHgwMCAgICAvKiBETUEgYWRkcmVzcyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgRE1BX0FERFJfMSAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBETUFfQUREUl8yICAgICAgICAgICAgICAweDA0CisjZGVmaW5lIERNQV9BRERSXzMgICAgICAgICAgICAgIDB4MDYKKyNkZWZpbmUgRE1BX0FERFJfNCAgICAgICAgICAgICAgMHhDMAorI2RlZmluZSBETUFfQUREUl81ICAgICAgICAgICAgICAweEM0CisjZGVmaW5lIERNQV9BRERSXzYgICAgICAgICAgICAgIDB4QzgKKyNkZWZpbmUgRE1BX0FERFJfNyAgICAgICAgICAgICAgMHhDQworCisjZGVmaW5lIERNQV9DTlRfMCAgICAgICAgICAgICAgIDB4MDEgICAgLyogRE1BIGNvdW50IHJlZ2lzdGVycyAqLworI2RlZmluZSBETUFfQ05UXzEgICAgICAgICAgICAgICAweDAzCisjZGVmaW5lIERNQV9DTlRfMiAgICAgICAgICAgICAgIDB4MDUKKyNkZWZpbmUgRE1BX0NOVF8zICAgICAgICAgICAgICAgMHgwNworI2RlZmluZSBETUFfQ05UXzQgICAgICAgICAgICAgICAweEMyCisjZGVmaW5lIERNQV9DTlRfNSAgICAgICAgICAgICAgIDB4QzYKKyNkZWZpbmUgRE1BX0NOVF82ICAgICAgICAgICAgICAgMHhDQQorI2RlZmluZSBETUFfQ05UXzcgICAgICAgICAgICAgICAweENFCisKKyNkZWZpbmUgRE1BX0xPX1BBR0VfMCAgICAgICAgICAgICAgMHg4NyAgICAvKiBETUEgcGFnZSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgRE1BX0xPX1BBR0VfMSAgICAgICAgICAgICAgMHg4MworI2RlZmluZSBETUFfTE9fUEFHRV8yICAgICAgICAgICAgICAweDgxCisjZGVmaW5lIERNQV9MT19QQUdFXzMgICAgICAgICAgICAgIDB4ODIKKyNkZWZpbmUgRE1BX0xPX1BBR0VfNSAgICAgICAgICAgICAgMHg4QgorI2RlZmluZSBETUFfTE9fUEFHRV82ICAgICAgICAgICAgICAweDg5CisjZGVmaW5lIERNQV9MT19QQUdFXzcgICAgICAgICAgICAgIDB4OEEKKworI2RlZmluZSBETUFfSElfUEFHRV8wICAgICAgICAgICAgICAweDQ4NyAgICAvKiBETUEgcGFnZSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgRE1BX0hJX1BBR0VfMSAgICAgICAgICAgICAgMHg0ODMKKyNkZWZpbmUgRE1BX0hJX1BBR0VfMiAgICAgICAgICAgICAgMHg0ODEKKyNkZWZpbmUgRE1BX0hJX1BBR0VfMyAgICAgICAgICAgICAgMHg0ODIKKyNkZWZpbmUgRE1BX0hJX1BBR0VfNSAgICAgICAgICAgICAgMHg0OEIKKyNkZWZpbmUgRE1BX0hJX1BBR0VfNiAgICAgICAgICAgICAgMHg0ODkKKyNkZWZpbmUgRE1BX0hJX1BBR0VfNyAgICAgICAgICAgICAgMHg0OEEKKworI2RlZmluZSBETUExX0VYVF9SRUcgICAgICAgICAgICAgICAweDQwQgorI2RlZmluZSBETUEyX0VYVF9SRUcgICAgICAgICAgICAgICAweDRENgorCisjZGVmaW5lIERNQV9NT0RFX1JFQUQJMHg0NAkvKiBJL08gdG8gbWVtb3J5LCBubyBhdXRvaW5pdCwgaW5jcmVtZW50LCBzaW5nbGUgbW9kZSAqLworI2RlZmluZSBETUFfTU9ERV9XUklURQkweDQ4CS8qIG1lbW9yeSB0byBJL08sIG5vIGF1dG9pbml0LCBpbmNyZW1lbnQsIHNpbmdsZSBtb2RlICovCisjZGVmaW5lIERNQV9NT0RFX0NBU0NBREUgMHhDMCAgIC8qIHBhc3MgdGhydSBEUkVRLT5IUlEsIERBQ0s8LUhMREEgb25seSAqLworCisjZGVmaW5lIERNQV9BVVRPSU5JVCAgIAkgMHgxMAorCitleHRlcm4gc3BpbmxvY2tfdCAgZG1hX3NwaW5fbG9jazsKKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBjbGFpbV9kbWFfbG9jayh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmRtYV9zcGluX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gZmxhZ3M7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgcmVsZWFzZV9kbWFfbG9jayh1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRtYV9zcGluX2xvY2ssIGZsYWdzKTsKK30KKworLyogZW5hYmxlL2Rpc2FibGUgYSBzcGVjaWZpYyBETUEgY2hhbm5lbCAqLworc3RhdGljIF9faW5saW5lX18gdm9pZCBlbmFibGVfZG1hKHVuc2lnbmVkIGludCBkbWFucikKK3sKKwl1bnNpZ25lZCBjaGFyIHVjRG1hQ21kPTB4MDA7CisKKwlpZiAoZG1hbnIgIT0gNCkKKwl7CisJCWRtYV9vdXRiKDAsIERNQTJfTUFTS19SRUcpOyAgLyogVGhpcyBtYXkgbm90IGJlIGVuYWJsZWQgKi8KKwkJZG1hX291dGIodWNEbWFDbWQsIERNQTJfQ01EX1JFRyk7ICAvKiBFbmFibGUgZ3JvdXAgKi8KKwl9CisJaWYgKGRtYW5yPD0zKQorCXsKKwkJZG1hX291dGIoZG1hbnIsICBETUExX01BU0tfUkVHKTsKKwkJZG1hX291dGIodWNEbWFDbWQsIERNQTFfQ01EX1JFRyk7ICAvKiBFbmFibGUgZ3JvdXAgKi8KKwl9IGVsc2UKKwl7CisJCWRtYV9vdXRiKGRtYW5yICYgMywgIERNQTJfTUFTS19SRUcpOworCX0KK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBkaXNhYmxlX2RtYSh1bnNpZ25lZCBpbnQgZG1hbnIpCit7CisJaWYgKGRtYW5yPD0zKQorCQlkbWFfb3V0YihkbWFuciB8IDQsICBETUExX01BU0tfUkVHKTsKKwllbHNlCisJCWRtYV9vdXRiKChkbWFuciAmIDMpIHwgNCwgIERNQTJfTUFTS19SRUcpOworfQorCisvKiBDbGVhciB0aGUgJ0RNQSBQb2ludGVyIEZsaXAgRmxvcCcuCisgKiBXcml0ZSAwIGZvciBMU0IvTVNCLCAxIGZvciBNU0IvTFNCIGFjY2Vzcy4KKyAqIFVzZSB0aGlzIG9uY2UgdG8gaW5pdGlhbGl6ZSB0aGUgRkYgdG8gYSBrbm93biBzdGF0ZS4KKyAqIEFmdGVyIHRoYXQsIGtlZXAgdHJhY2sgb2YgaXQuIDotKQorICogLS0tIEluIG9yZGVyIHRvIGRvIHRoYXQsIHRoZSBETUEgcm91dGluZXMgYmVsb3cgc2hvdWxkIC0tLQorICogLS0tIG9ubHkgYmUgdXNlZCB3aGlsZSBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCEgLS0tCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgY2xlYXJfZG1hX2ZmKHVuc2lnbmVkIGludCBkbWFucikKK3sKKwlpZiAoZG1hbnI8PTMpCisJCWRtYV9vdXRiKDAsICBETUExX0NMRUFSX0ZGX1JFRyk7CisJZWxzZQorCQlkbWFfb3V0YigwLCAgRE1BMl9DTEVBUl9GRl9SRUcpOworfQorCisvKiBzZXQgbW9kZSAoYWJvdmUpIGZvciBhIHNwZWNpZmljIERNQSBjaGFubmVsICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHNldF9kbWFfbW9kZSh1bnNpZ25lZCBpbnQgZG1hbnIsIGNoYXIgbW9kZSkKK3sKKwlpZiAoZG1hbnI8PTMpCisJCWRtYV9vdXRiKG1vZGUgfCBkbWFuciwgIERNQTFfTU9ERV9SRUcpOworCWVsc2UKKwkJZG1hX291dGIobW9kZSB8IChkbWFuciYzKSwgIERNQTJfTU9ERV9SRUcpOworfQorCisvKiBTZXQgb25seSB0aGUgcGFnZSByZWdpc3RlciBiaXRzIG9mIHRoZSB0cmFuc2ZlciBhZGRyZXNzLgorICogVGhpcyBpcyB1c2VkIGZvciBzdWNjZXNzaXZlIHRyYW5zZmVycyB3aGVuIHdlIGtub3cgdGhlIGNvbnRlbnRzIG9mCisgKiB0aGUgbG93ZXIgMTYgYml0cyBvZiB0aGUgRE1BIGN1cnJlbnQgYWRkcmVzcyByZWdpc3RlciwgYnV0IGEgNjRrIGJvdW5kYXJ5CisgKiBtYXkgaGF2ZSBiZWVuIGNyb3NzZWQuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgc2V0X2RtYV9wYWdlKHVuc2lnbmVkIGludCBkbWFuciwgaW50IHBhZ2VucikKK3sKKwlzd2l0Y2goZG1hbnIpIHsKKwkJY2FzZSAwOgorCQkJZG1hX291dGIocGFnZW5yLCBETUFfTE9fUEFHRV8wKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRtYV9vdXRiKHBhZ2Vucj4+OCwgRE1BX0hJX1BBR0VfMCk7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJZG1hX291dGIocGFnZW5yLCBETUFfTE9fUEFHRV8xKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRtYV9vdXRiKHBhZ2Vucj4+OCwgRE1BX0hJX1BBR0VfMSk7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJZG1hX291dGIocGFnZW5yLCBETUFfTE9fUEFHRV8yKTsKKwkJCWRtYV9vdXRiKHBhZ2Vucj4+OCwgRE1BX0hJX1BBR0VfMik7IAorCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJCWRtYV9vdXRiKHBhZ2VuciwgRE1BX0xPX1BBR0VfMyk7CisJCQlkbWFfb3V0YihwYWdlbnI+PjgsIERNQV9ISV9QQUdFXzMpOyAKKwkJCWJyZWFrOworCSAgICAgICAgY2FzZSA1OgorCQkgICAgICAgIGRtYV9vdXRiKHBhZ2VuciAmIDB4ZmUsIERNQV9MT19QQUdFXzUpOworICAgICAgICAgICAgICAgICAgICAgICAgZG1hX291dGIocGFnZW5yPj44LCBETUFfSElfUEFHRV81KTsKKwkJCWJyZWFrOworCQljYXNlIDY6CisJCSAgICAgICAgZG1hX291dGIocGFnZW5yICYgMHhmZSwgRE1BX0xPX1BBR0VfNik7CisJCQlkbWFfb3V0YihwYWdlbnI+PjgsIERNQV9ISV9QQUdFXzYpOworCQkJYnJlYWs7CisJCWNhc2UgNzoKKwkJICAgICAgICBkbWFfb3V0YihwYWdlbnIgJiAweGZlLCBETUFfTE9fUEFHRV83KTsKKwkJCWRtYV9vdXRiKHBhZ2Vucj4+OCwgRE1BX0hJX1BBR0VfNyk7CisJCSAgYnJlYWs7CisJfQorfQorCisKKy8qIFNldCB0cmFuc2ZlciBhZGRyZXNzICYgcGFnZSBiaXRzIGZvciBzcGVjaWZpYyBETUEgY2hhbm5lbC4KKyAqIEFzc3VtZXMgZG1hIGZsaXBmbG9wIGlzIGNsZWFyLgorICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHNldF9kbWFfYWRkcih1bnNpZ25lZCBpbnQgZG1hbnIsIHVuc2lnbmVkIGludCBwaHlzKQoreworCWlmIChkbWFuciA8PSAzKSAgeworCSAgICBkbWFfb3V0YiggcGh5cyAmIDB4ZmYsICgoZG1hbnImMyk8PDEpICsgSU9fRE1BMV9CQVNFICk7CisgICAgICAgICAgICBkbWFfb3V0YiggKHBoeXM+PjgpICYgMHhmZiwgKChkbWFuciYzKTw8MSkgKyBJT19ETUExX0JBU0UgKTsKKwl9ICBlbHNlICB7CisJICAgIGRtYV9vdXRiKCAocGh5cz4+MSkgJiAweGZmLCAoKGRtYW5yJjMpPDwyKSArIElPX0RNQTJfQkFTRSApOworCSAgICBkbWFfb3V0YiggKHBoeXM+PjkpICYgMHhmZiwgKChkbWFuciYzKTw8MikgKyBJT19ETUEyX0JBU0UgKTsKKwl9CisJc2V0X2RtYV9wYWdlKGRtYW5yLCBwaHlzPj4xNik7Cit9CisKKworLyogU2V0IHRyYW5zZmVyIHNpemUgKG1heCA2NGsgZm9yIERNQTEuLjMsIDEyOGsgZm9yIERNQTUuLjcpIGZvcgorICogYSBzcGVjaWZpYyBETUEgY2hhbm5lbC4KKyAqIFlvdSBtdXN0IGVuc3VyZSB0aGUgcGFyYW1ldGVycyBhcmUgdmFsaWQuCisgKiBOT1RFOiBmcm9tIGEgbWFudWFsOiAidGhlIG51bWJlciBvZiB0cmFuc2ZlcnMgaXMgb25lIG1vcmUKKyAqIHRoYW4gdGhlIGluaXRpYWwgd29yZCBjb3VudCIhIFRoaXMgaXMgdGFrZW4gaW50byBhY2NvdW50LgorICogQXNzdW1lcyBkbWEgZmxpcC1mbG9wIGlzIGNsZWFyLgorICogTk9URSAyOiAiY291bnQiIHJlcHJlc2VudHMgX2J5dGVzXyBhbmQgbXVzdCBiZSBldmVuIGZvciBjaGFubmVscyA1LTcuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgc2V0X2RtYV9jb3VudCh1bnNpZ25lZCBpbnQgZG1hbnIsIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKyAgICAgICAgY291bnQtLTsKKwlpZiAoZG1hbnIgPD0gMykgIHsKKwkgICAgZG1hX291dGIoIGNvdW50ICYgMHhmZiwgKChkbWFuciYzKTw8MSkgKyAxICsgSU9fRE1BMV9CQVNFICk7CisJICAgIGRtYV9vdXRiKCAoY291bnQ+PjgpICYgMHhmZiwgKChkbWFuciYzKTw8MSkgKyAxICsgSU9fRE1BMV9CQVNFICk7CisgICAgICAgIH0gZWxzZSB7CisJICAgIGRtYV9vdXRiKCAoY291bnQ+PjEpICYgMHhmZiwgKChkbWFuciYzKTw8MikgKyAyICsgSU9fRE1BMl9CQVNFICk7CisJICAgIGRtYV9vdXRiKCAoY291bnQ+PjkpICYgMHhmZiwgKChkbWFuciYzKTw8MikgKyAyICsgSU9fRE1BMl9CQVNFICk7CisgICAgICAgIH0KK30KKworCisvKiBHZXQgRE1BIHJlc2lkdWUgY291bnQuIEFmdGVyIGEgRE1BIHRyYW5zZmVyLCB0aGlzCisgKiBzaG91bGQgcmV0dXJuIHplcm8uIFJlYWRpbmcgdGhpcyB3aGlsZSBhIERNQSB0cmFuc2ZlciBpcworICogc3RpbGwgaW4gcHJvZ3Jlc3Mgd2lsbCByZXR1cm4gdW5wcmVkaWN0YWJsZSByZXN1bHRzLgorICogSWYgY2FsbGVkIGJlZm9yZSB0aGUgY2hhbm5lbCBoYXMgYmVlbiB1c2VkLCBpdCBtYXkgcmV0dXJuIDEuCisgKiBPdGhlcndpc2UsIGl0IHJldHVybnMgdGhlIG51bWJlciBvZiBfYnl0ZXNfIGxlZnQgdG8gdHJhbnNmZXIuCisgKgorICogQXNzdW1lcyBETUEgZmxpcC1mbG9wIGlzIGNsZWFyLgorICovCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgZ2V0X2RtYV9yZXNpZHVlKHVuc2lnbmVkIGludCBkbWFucikKK3sKKwl1bnNpZ25lZCBpbnQgaW9fcG9ydCA9IChkbWFucjw9Myk/ICgoZG1hbnImMyk8PDEpICsgMSArIElPX0RNQTFfQkFTRQorCQkJCQkgOiAoKGRtYW5yJjMpPDwyKSArIDIgKyBJT19ETUEyX0JBU0U7CisKKwkvKiB1c2luZyBzaG9ydCB0byBnZXQgMTYtYml0IHdyYXAgYXJvdW5kICovCisJdW5zaWduZWQgc2hvcnQgY291bnQ7CisKKwljb3VudCA9IDEgKyBkbWFfaW5iKGlvX3BvcnQpOworCWNvdW50ICs9IGRtYV9pbmIoaW9fcG9ydCkgPDwgODsKKwkKKwlyZXR1cm4gKGRtYW5yIDw9IDMpPyBjb3VudCA6IChjb3VudDw8MSk7Cit9CisKKy8qIFRoZXNlIGFyZSBpbiBrZXJuZWwvZG1hLmM6ICovCitleHRlcm4gaW50IHJlcXVlc3RfZG1hKHVuc2lnbmVkIGludCBkbWFuciwgY29uc3QgY2hhciAqIGRldmljZV9pZCk7CS8qIHJlc2VydmUgYSBETUEgY2hhbm5lbCAqLworZXh0ZXJuIHZvaWQgZnJlZV9kbWEodW5zaWduZWQgaW50IGRtYW5yKTsJLyogcmVsZWFzZSBpdCBhZ2FpbiAqLworCisjaWZkZWYgQ09ORklHX1BDSQorZXh0ZXJuIGludCBpc2FfZG1hX2JyaWRnZV9idWdneTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisjZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorI2RlZmluZSBpc2FfZG1hX2JyaWRnZV9idWdneSAgICgwKQorI2VuZGlmCisjZW5kaWYgLyogX0FTTV9ETUFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvZWVoLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9lZWguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDI5OGIxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvZWVoLmgKQEAgLTAsMCArMSwzODMgQEAKKy8qIAorICogZWVoLmgKKyAqIENvcHlyaWdodCAoQykgMjAwMSAgRGF2ZSBFbmdlYnJldHNlbiAmIFRvZGQgSW5nbGV0dCBJQk0gQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIAorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqIAorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaWZuZGVmIF9QUEM2NF9FRUhfSAorI2RlZmluZSBfUFBDNjRfRUVIX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisKK3N0cnVjdCBwY2lfZGV2Oworc3RydWN0IGRldmljZV9ub2RlOworc3RydWN0IGRldmljZV9ub2RlOworc3RydWN0IG5vdGlmaWVyX2Jsb2NrOworCisjaWZkZWYgQ09ORklHX0VFSAorCisvKiBWYWx1ZXMgZm9yIGVlaF9tb2RlIGJpdHMgaW4gZGV2aWNlX25vZGUgKi8KKyNkZWZpbmUgRUVIX01PREVfU1VQUE9SVEVECSgxPDwwKQorI2RlZmluZSBFRUhfTU9ERV9OT0NIRUNLCSgxPDwxKQorI2RlZmluZSBFRUhfTU9ERV9JU09MQVRFRAkoMTw8MikKKwordm9pZCBfX2luaXQgZWVoX2luaXQodm9pZCk7Cit1bnNpZ25lZCBsb25nIGVlaF9jaGVja19mYWlsdXJlKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqdG9rZW4sCisJCQkJdW5zaWduZWQgbG9uZyB2YWwpOworaW50IGVlaF9kbl9jaGVja19mYWlsdXJlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4sIHN0cnVjdCBwY2lfZGV2ICpkZXYpOwordm9pZCBfX2luaXQgcGNpX2FkZHJfY2FjaGVfYnVpbGQodm9pZCk7CisKKy8qKgorICogZWVoX2FkZF9kZXZpY2VfZWFybHkKKyAqIGVlaF9hZGRfZGV2aWNlX2xhdGUKKyAqCisgKiBQZXJmb3JtIGVlaCBpbml0aWFsaXphdGlvbiBmb3IgZGV2aWNlcyBhZGRlZCBhZnRlciBib290LgorICogQ2FsbCBlZWhfYWRkX2RldmljZV9lYXJseSBiZWZvcmUgZG9pbmcgYW55IGkvbyB0byB0aGUKKyAqIGRldmljZSAoaW5jbHVkaW5nIGNvbmZpZyBzcGFjZSBpL28pLiAgQ2FsbCBlZWhfYWRkX2RldmljZV9sYXRlCisgKiB0byBmaW5pc2ggdGhlIGVlaCBzZXR1cCBmb3IgdGhpcyBkZXZpY2UuCisgKi8KK3ZvaWQgZWVoX2FkZF9kZXZpY2VfZWFybHkoc3RydWN0IGRldmljZV9ub2RlICopOwordm9pZCBlZWhfYWRkX2RldmljZV9sYXRlKHN0cnVjdCBwY2lfZGV2ICopOworCisvKioKKyAqIGVlaF9yZW1vdmVfZGV2aWNlIC0gdW5kbyBFRUggc2V0dXAgZm9yIHRoZSBpbmRpY2F0ZWQgcGNpIGRldmljZQorICogQGRldjogcGNpIGRldmljZSB0byBiZSByZW1vdmVkCisgKgorICogVGhpcyByb3V0aW5lIHNob3VsZCBiZSB3aGVuIGEgZGV2aWNlIGlzIHJlbW92ZWQgZnJvbSBhIHJ1bm5pbmcKKyAqIHN5c3RlbSAoZS5nLiBieSBob3RwbHVnIG9yIGRscGFyKS4KKyAqLwordm9pZCBlZWhfcmVtb3ZlX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqKTsKKworI2RlZmluZSBFRUhfRElTQUJMRQkJMAorI2RlZmluZSBFRUhfRU5BQkxFCQkxCisjZGVmaW5lIEVFSF9SRUxFQVNFX0xPQURTVE9SRQkyCisjZGVmaW5lIEVFSF9SRUxFQVNFX0RNQQkJMworCisvKioKKyAqIE5vdGlmaWVyIGV2ZW50IGZsYWdzLgorICovCisjZGVmaW5lIEVFSF9OT1RJRllfRlJFRVpFICAxCisKKy8qKiBFRUggZXZlbnQgLS0gc3RydWN0dXJlIGhvbGRpbmcgcGNpIHNsb3QgZGF0YSB0aGF0IGRlc2NyaWJlcworICogIGEgY2hhbmdlIGluIHRoZSBpc29sYXRpb24gc3RhdHVzIG9mIGEgUENJIHNsb3QuICBBIHBvaW50ZXIKKyAqICB0byB0aGlzIHN0cnVjdCBpcyBwYXNzZWQgYXMgdGhlIGRhdGEgcG9pbnRlciBpbiBhIG5vdGlmeSBjYWxsYmFjay4KKyAqLworc3RydWN0IGVlaF9ldmVudCB7CisJc3RydWN0IGxpc3RfaGVhZCAgICAgbGlzdDsKKwlzdHJ1Y3QgcGNpX2RldiAgICAgICAqZGV2OworCXN0cnVjdCBkZXZpY2Vfbm9kZSAgICpkbjsKKwlpbnQgICAgICAgICAgICAgICAgICByZXNldF9zdGF0ZTsKK307CisKKy8qKiBSZWdpc3RlciB0byBmaW5kIG91dCBhYm91dCBFRUggZXZlbnRzLiAqLworaW50IGVlaF9yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTsKK2ludCBlZWhfdW5yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTsKKworLyoqCisgKiBFRUhfUE9TU0lCTEVfRVJST1IoKSAtLSB0ZXN0IGZvciBwb3NzaWJsZSBNTUlPIGZhaWx1cmUuCisgKgorICogSWYgdGhpcyBtYWNybyB5aWVsZHMgVFJVRSwgdGhlIGNhbGxlciByZWxheXMgdG8gZWVoX2NoZWNrX2ZhaWx1cmUoKQorICogd2hpY2ggZG9lcyBmdXJ0aGVyIHRlc3RzIG91dCBvZiBsaW5lLgorICovCisjZGVmaW5lIEVFSF9QT1NTSUJMRV9FUlJPUih2YWwsIHR5cGUpCSgodmFsKSA9PSAodHlwZSl+MCkKKworLyoKKyAqIFJlYWRzIGZyb20gYSBkZXZpY2Ugd2hpY2ggaGFzIGJlZW4gaXNvbGF0ZWQgYnkgRUVIIHdpbGwgcmV0dXJuCisgKiBhbGwgMXMuICBUaGlzIG1hY3JvIGdpdmVzIGFuIGFsbC0xcyB2YWx1ZSBvZiB0aGUgZ2l2ZW4gc2l6ZSAoaW4KKyAqIGJ5dGVzOiAxLCAyLCBvciA0KSBmb3IgY29tcGFyaW5nIHdpdGggdGhlIHJlc3VsdCBvZiBhIHJlYWQuCisgKi8KKyNkZWZpbmUgRUVIX0lPX0VSUk9SX1ZBTFVFKHNpemUpCSh+MFUgPj4gKCg0IC0gKHNpemUpKSAqIDgpKQorCisjZWxzZSAvKiAhQ09ORklHX0VFSCAqLworc3RhdGljIGlubGluZSB2b2lkIGVlaF9pbml0KHZvaWQpIHsgfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZWVoX2NoZWNrX2ZhaWx1cmUoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICp0b2tlbiwgdW5zaWduZWQgbG9uZyB2YWwpCit7CisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIGlubGluZSBpbnQgZWVoX2RuX2NoZWNrX2ZhaWx1cmUoc3RydWN0IGRldmljZV9ub2RlICpkbiwgc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBjaV9hZGRyX2NhY2hlX2J1aWxkKHZvaWQpIHsgfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZWVoX2FkZF9kZXZpY2VfZWFybHkoc3RydWN0IGRldmljZV9ub2RlICpkbikgeyB9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBlZWhfYWRkX2RldmljZV9sYXRlKHN0cnVjdCBwY2lfZGV2ICpkZXYpIHsgfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZWVoX3JlbW92ZV9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldikgeyB9CisKKyNkZWZpbmUgRUVIX1BPU1NJQkxFX0VSUk9SKHZhbCwgdHlwZSkgKDApCisjZGVmaW5lIEVFSF9JT19FUlJPUl9WQUxVRShzaXplKSAoLTFVTCkKKyNlbmRpZiAvKiBDT05GSUdfRUVIICovCisKKy8qIAorICogTU1JTyByZWFkL3dyaXRlIG9wZXJhdGlvbnMgd2l0aCBFRUggc3VwcG9ydC4KKyAqLworc3RhdGljIGlubGluZSB1OCBlZWhfcmVhZGIoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCXU4IHZhbCA9IGluXzgoYWRkcik7CisJaWYgKEVFSF9QT1NTSUJMRV9FUlJPUih2YWwsIHU4KSkKKwkJcmV0dXJuIGVlaF9jaGVja19mYWlsdXJlKGFkZHIsIHZhbCk7CisJcmV0dXJuIHZhbDsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBlZWhfd3JpdGViKHU4IHZhbCwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCW91dF84KGFkZHIsIHZhbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTE2IGVlaF9yZWFkdyhjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJdTE2IHZhbCA9IGluX2xlMTYoYWRkcik7CisJaWYgKEVFSF9QT1NTSUJMRV9FUlJPUih2YWwsIHUxNikpCisJCXJldHVybiBlZWhfY2hlY2tfZmFpbHVyZShhZGRyLCB2YWwpOworCXJldHVybiB2YWw7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgZWVoX3dyaXRldyh1MTYgdmFsLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJb3V0X2xlMTYoYWRkciwgdmFsKTsKK30KK3N0YXRpYyBpbmxpbmUgdTE2IGVlaF9yYXdfcmVhZHcoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCXUxNiB2YWwgPSBpbl9iZTE2KGFkZHIpOworCWlmIChFRUhfUE9TU0lCTEVfRVJST1IodmFsLCB1MTYpKQorCQlyZXR1cm4gZWVoX2NoZWNrX2ZhaWx1cmUoYWRkciwgdmFsKTsKKwlyZXR1cm4gdmFsOworfQorc3RhdGljIGlubGluZSB2b2lkIGVlaF9yYXdfd3JpdGV3KHUxNiB2YWwsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikgeworCXZvbGF0aWxlIHUxNiBfX2lvbWVtICp2YWRkciA9ICh2b2xhdGlsZSB1MTYgX19pb21lbSAqKSBhZGRyOworCW91dF9iZTE2KHZhZGRyLCB2YWwpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBlZWhfcmVhZGwoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCXUzMiB2YWwgPSBpbl9sZTMyKGFkZHIpOworCWlmIChFRUhfUE9TU0lCTEVfRVJST1IodmFsLCB1MzIpKQorCQlyZXR1cm4gZWVoX2NoZWNrX2ZhaWx1cmUoYWRkciwgdmFsKTsKKwlyZXR1cm4gdmFsOworfQorc3RhdGljIGlubGluZSB2b2lkIGVlaF93cml0ZWwodTMyIHZhbCwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCW91dF9sZTMyKGFkZHIsIHZhbCk7Cit9CitzdGF0aWMgaW5saW5lIHUzMiBlZWhfcmF3X3JlYWRsKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwl1MzIgdmFsID0gaW5fYmUzMihhZGRyKTsKKwlpZiAoRUVIX1BPU1NJQkxFX0VSUk9SKHZhbCwgdTMyKSkKKwkJcmV0dXJuIGVlaF9jaGVja19mYWlsdXJlKGFkZHIsIHZhbCk7CisJcmV0dXJuIHZhbDsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBlZWhfcmF3X3dyaXRlbCh1MzIgdmFsLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJb3V0X2JlMzIoYWRkciwgdmFsKTsKK30KKworc3RhdGljIGlubGluZSB1NjQgZWVoX3JlYWRxKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwl1NjQgdmFsID0gaW5fbGU2NChhZGRyKTsKKwlpZiAoRUVIX1BPU1NJQkxFX0VSUk9SKHZhbCwgdTY0KSkKKwkJcmV0dXJuIGVlaF9jaGVja19mYWlsdXJlKGFkZHIsIHZhbCk7CisJcmV0dXJuIHZhbDsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBlZWhfd3JpdGVxKHU2NCB2YWwsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlvdXRfbGU2NChhZGRyLCB2YWwpOworfQorc3RhdGljIGlubGluZSB1NjQgZWVoX3Jhd19yZWFkcShjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJdTY0IHZhbCA9IGluX2JlNjQoYWRkcik7CisJaWYgKEVFSF9QT1NTSUJMRV9FUlJPUih2YWwsIHU2NCkpCisJCXJldHVybiBlZWhfY2hlY2tfZmFpbHVyZShhZGRyLCB2YWwpOworCXJldHVybiB2YWw7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgZWVoX3Jhd193cml0ZXEodTY0IHZhbCwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCW91dF9iZTY0KGFkZHIsIHZhbCk7Cit9CisKKyNkZWZpbmUgRUVIX0NIRUNLX0FMSUdOKHYsYSkgXAorCSgoKCh1bnNpZ25lZCBsb25nKSh2KSkgJiAoKGEpIC0gMSkpID09IDApCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBlZWhfbWVtc2V0X2lvKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkciwgaW50IGMsCisJCQkJIHVuc2lnbmVkIGxvbmcgbikKK3sKKwl1MzIgbGMgPSBjOworCWxjIHw9IGxjIDw8IDg7CisJbGMgfD0gbGMgPDwgMTY7CisKKwl3aGlsZShuICYmICFFRUhfQ0hFQ0tfQUxJR04oYWRkciwgNCkpIHsKKwkJKigodm9sYXRpbGUgdTggKilhZGRyKSA9IGM7CisJCWFkZHIgPSAodm9pZCAqKSgodW5zaWduZWQgbG9uZylhZGRyICsgMSk7CisJCW4tLTsKKwl9CisJd2hpbGUobiA+PSA0KSB7CisJCSooKHZvbGF0aWxlIHUzMiAqKWFkZHIpID0gbGM7CisJCWFkZHIgPSAodm9pZCAqKSgodW5zaWduZWQgbG9uZylhZGRyICsgNCk7CisJCW4gLT0gNDsKKwl9CisJd2hpbGUobikgeworCQkqKCh2b2xhdGlsZSB1OCAqKWFkZHIpID0gYzsKKwkJYWRkciA9ICh2b2lkICopKCh1bnNpZ25lZCBsb25nKWFkZHIgKyAxKTsKKwkJbi0tOworCX0KKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN5bmMiIDogOiA6ICJtZW1vcnkiKTsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBlZWhfbWVtY3B5X2Zyb21pbyh2b2lkICpkZXN0LCBjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKnNyYywKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgbikKK3sKKwl2b2lkICp2c3JjID0gKHZvaWQgX19mb3JjZSAqKSBzcmM7CisJdm9pZCAqZGVzdHNhdmUgPSBkZXN0OworCXVuc2lnbmVkIGxvbmcgbnNhdmUgPSBuOworCisJd2hpbGUobiAmJiAoIUVFSF9DSEVDS19BTElHTih2c3JjLCA0KSB8fCAhRUVIX0NIRUNLX0FMSUdOKGRlc3QsIDQpKSkgeworCQkqKCh1OCAqKWRlc3QpID0gKigodm9sYXRpbGUgdTggKil2c3JjKTsKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJlaWVpbyIgOiA6IDogIm1lbW9yeSIpOworCQl2c3JjID0gKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpdnNyYyArIDEpOworCQlkZXN0ID0gKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpZGVzdCArIDEpOwkJCQorCQluLS07CisJfQorCXdoaWxlKG4gPiA0KSB7CisJCSooKHUzMiAqKWRlc3QpID0gKigodm9sYXRpbGUgdTMyICopdnNyYyk7CisJCV9fYXNtX18gX192b2xhdGlsZV9fICgiZWllaW8iIDogOiA6ICJtZW1vcnkiKTsKKwkJdnNyYyA9ICh2b2lkICopKCh1bnNpZ25lZCBsb25nKXZzcmMgKyA0KTsKKwkJZGVzdCA9ICh2b2lkICopKCh1bnNpZ25lZCBsb25nKWRlc3QgKyA0KTsJCQkKKwkJbiAtPSA0OworCX0KKwl3aGlsZShuKSB7CisJCSooKHU4ICopZGVzdCkgPSAqKCh2b2xhdGlsZSB1OCAqKXZzcmMpOworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImVpZWlvIiA6IDogOiAibWVtb3J5Iik7CisJCXZzcmMgPSAodm9pZCAqKSgodW5zaWduZWQgbG9uZyl2c3JjICsgMSk7CisJCWRlc3QgPSAodm9pZCAqKSgodW5zaWduZWQgbG9uZylkZXN0ICsgMSk7CQkJCisJCW4tLTsKKwl9CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzeW5jIiA6IDogOiAibWVtb3J5Iik7CisKKwkvKiBMb29rIGZvciBmZmZmJ3MgaGVyZSBhdCBkZXN0W25dLiAgQXNzdW1lIHRoYXQgYXQgbGVhc3QgNCBieXRlcworCSAqIHdlcmUgY29waWVkLiBDaGVjayBhbGwgZm91ciBieXRlcy4KKwkgKi8KKwlpZiAoKG5zYXZlID49IDQpICYmCisJCShFRUhfUE9TU0lCTEVfRVJST1IoKCooKHUzMiAqKSBkZXN0c2F2ZStuc2F2ZS00KSksIHUzMikpKSB7CisJCWVlaF9jaGVja19mYWlsdXJlKHNyYywgKCooKHUzMiAqKSBkZXN0c2F2ZStuc2F2ZS00KSkpOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIGVlaF9tZW1jcHlfdG9pbyh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywKKwkJCQkgICB1bnNpZ25lZCBsb25nIG4pCit7CisJdm9pZCAqdmRlc3QgPSAodm9pZCBfX2ZvcmNlICopIGRlc3Q7CisKKwl3aGlsZShuICYmICghRUVIX0NIRUNLX0FMSUdOKHZkZXN0LCA0KSB8fCAhRUVIX0NIRUNLX0FMSUdOKHNyYywgNCkpKSB7CisJCSooKHZvbGF0aWxlIHU4ICopdmRlc3QpID0gKigodTggKilzcmMpOworCQlzcmMgPSAodm9pZCAqKSgodW5zaWduZWQgbG9uZylzcmMgKyAxKTsKKwkJdmRlc3QgPSAodm9pZCAqKSgodW5zaWduZWQgbG9uZyl2ZGVzdCArIDEpOwkJCQorCQluLS07CisJfQorCXdoaWxlKG4gPiA0KSB7CisJCSooKHZvbGF0aWxlIHUzMiAqKXZkZXN0KSA9ICooKHZvbGF0aWxlIHUzMiAqKXNyYyk7CisJCXNyYyA9ICh2b2lkICopKCh1bnNpZ25lZCBsb25nKXNyYyArIDQpOworCQl2ZGVzdCA9ICh2b2lkICopKCh1bnNpZ25lZCBsb25nKXZkZXN0ICsgNCk7CQkJCisJCW4tPTQ7CisJfQorCXdoaWxlKG4pIHsKKwkJKigodm9sYXRpbGUgdTggKil2ZGVzdCkgPSAqKCh1OCAqKXNyYyk7CisJCXNyYyA9ICh2b2lkICopKCh1bnNpZ25lZCBsb25nKXNyYyArIDEpOworCQl2ZGVzdCA9ICh2b2lkICopKCh1bnNpZ25lZCBsb25nKXZkZXN0ICsgMSk7CQkJCisJCW4tLTsKKwl9CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzeW5jIiA6IDogOiAibWVtb3J5Iik7Cit9CisKKyN1bmRlZiBFRUhfQ0hFQ0tfQUxJR04KKworc3RhdGljIGlubGluZSB1OCBlZWhfaW5iKHVuc2lnbmVkIGxvbmcgcG9ydCkKK3sKKwl1OCB2YWw7CisJaWYgKCFfSU9fSVNfVkFMSUQocG9ydCkpCisJCXJldHVybiB+MDsKKwl2YWwgPSBpbl84KCh1OCBfX2lvbWVtICopKHBvcnQrcGNpX2lvX2Jhc2UpKTsKKwlpZiAoRUVIX1BPU1NJQkxFX0VSUk9SKHZhbCwgdTgpKQorCQlyZXR1cm4gZWVoX2NoZWNrX2ZhaWx1cmUoKHZvaWQgX19pb21lbSAqKShwb3J0KSwgdmFsKTsKKwlyZXR1cm4gdmFsOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZWVoX291dGIodTggdmFsLCB1bnNpZ25lZCBsb25nIHBvcnQpCit7CisJaWYgKF9JT19JU19WQUxJRChwb3J0KSkKKwkJb3V0XzgoKHU4IF9faW9tZW0gKikocG9ydCtwY2lfaW9fYmFzZSksIHZhbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTE2IGVlaF9pbncodW5zaWduZWQgbG9uZyBwb3J0KQoreworCXUxNiB2YWw7CisJaWYgKCFfSU9fSVNfVkFMSUQocG9ydCkpCisJCXJldHVybiB+MDsKKwl2YWwgPSBpbl9sZTE2KCh1MTYgX19pb21lbSAqKShwb3J0K3BjaV9pb19iYXNlKSk7CisJaWYgKEVFSF9QT1NTSUJMRV9FUlJPUih2YWwsIHUxNikpCisJCXJldHVybiBlZWhfY2hlY2tfZmFpbHVyZSgodm9pZCBfX2lvbWVtICopKHBvcnQpLCB2YWwpOworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBlZWhfb3V0dyh1MTYgdmFsLCB1bnNpZ25lZCBsb25nIHBvcnQpCit7CisJaWYgKF9JT19JU19WQUxJRChwb3J0KSkKKwkJb3V0X2xlMTYoKHUxNiBfX2lvbWVtICopKHBvcnQrcGNpX2lvX2Jhc2UpLCB2YWwpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBlZWhfaW5sKHVuc2lnbmVkIGxvbmcgcG9ydCkKK3sKKwl1MzIgdmFsOworCWlmICghX0lPX0lTX1ZBTElEKHBvcnQpKQorCQlyZXR1cm4gfjA7CisJdmFsID0gaW5fbGUzMigodTMyIF9faW9tZW0gKikocG9ydCtwY2lfaW9fYmFzZSkpOworCWlmIChFRUhfUE9TU0lCTEVfRVJST1IodmFsLCB1MzIpKQorCQlyZXR1cm4gZWVoX2NoZWNrX2ZhaWx1cmUoKHZvaWQgX19pb21lbSAqKShwb3J0KSwgdmFsKTsKKwlyZXR1cm4gdmFsOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZWVoX291dGwodTMyIHZhbCwgdW5zaWduZWQgbG9uZyBwb3J0KQoreworCWlmIChfSU9fSVNfVkFMSUQocG9ydCkpCisJCW91dF9sZTMyKCh1MzIgX19pb21lbSAqKShwb3J0K3BjaV9pb19iYXNlKSwgdmFsKTsKK30KKworLyogaW4tc3RyaW5nIGVlaCBtYWNyb3MgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBlZWhfaW5zYih1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKiBidWYsIGludCBucykKK3sKKwlfaW5zYigodTggX19pb21lbSAqKShwb3J0K3BjaV9pb19iYXNlKSwgYnVmLCBucyk7CisJaWYgKEVFSF9QT1NTSUJMRV9FUlJPUigoKigoKHU4KilidWYpK25zLTEpKSwgdTgpKQorCQllZWhfY2hlY2tfZmFpbHVyZSgodm9pZCBfX2lvbWVtICopKHBvcnQpLCAqKHU4KilidWYpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZWVoX2luc3dfbnModW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICogYnVmLCBpbnQgbnMpCit7CisJX2luc3dfbnMoKHUxNiBfX2lvbWVtICopKHBvcnQrcGNpX2lvX2Jhc2UpLCBidWYsIG5zKTsKKwlpZiAoRUVIX1BPU1NJQkxFX0VSUk9SKCgqKCgodTE2KilidWYpK25zLTEpKSwgdTE2KSkKKwkJZWVoX2NoZWNrX2ZhaWx1cmUoKHZvaWQgX19pb21lbSAqKShwb3J0KSwgKih1MTYqKWJ1Zik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBlZWhfaW5zbF9ucyh1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKiBidWYsIGludCBubCkKK3sKKwlfaW5zbF9ucygodTMyIF9faW9tZW0gKikocG9ydCtwY2lfaW9fYmFzZSksIGJ1ZiwgbmwpOworCWlmIChFRUhfUE9TU0lCTEVfRVJST1IoKCooKCh1MzIqKWJ1ZikrbmwtMSkpLCB1MzIpKQorCQllZWhfY2hlY2tfZmFpbHVyZSgodm9pZCBfX2lvbWVtICopKHBvcnQpLCAqKHUzMiopYnVmKTsKK30KKworI2VuZGlmIC8qIF9QUEM2NF9FRUhfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvZWxmLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9lbGYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDU3ZDkwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvZWxmLmgKQEAgLTAsMCArMSwzOTkgQEAKKyNpZm5kZWYgX19QUEM2NF9FTEZfSAorI2RlZmluZSBfX1BQQzY0X0VMRl9ICisKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisjaW5jbHVkZSA8YXNtL2NwdXRhYmxlLmg+CisKKy8qIFBvd2VyUEMgcmVsb2NhdGlvbnMgZGVmaW5lZCBieSB0aGUgQUJJcyAqLworI2RlZmluZSBSX1BQQ19OT05FCQkwCisjZGVmaW5lIFJfUFBDX0FERFIzMgkJMQkvKiAzMmJpdCBhYnNvbHV0ZSBhZGRyZXNzICovCisjZGVmaW5lIFJfUFBDX0FERFIyNAkJMgkvKiAyNmJpdCBhZGRyZXNzLCAyIGJpdHMgaWdub3JlZC4gICovCisjZGVmaW5lIFJfUFBDX0FERFIxNgkJMwkvKiAxNmJpdCBhYnNvbHV0ZSBhZGRyZXNzICovCisjZGVmaW5lIFJfUFBDX0FERFIxNl9MTwkJNAkvKiBsb3dlciAxNmJpdCBvZiBhYnNvbHV0ZSBhZGRyZXNzICovCisjZGVmaW5lIFJfUFBDX0FERFIxNl9ISQkJNQkvKiBoaWdoIDE2Yml0IG9mIGFic29sdXRlIGFkZHJlc3MgKi8KKyNkZWZpbmUgUl9QUENfQUREUjE2X0hBCQk2CS8qIGFkanVzdGVkIGhpZ2ggMTZiaXQgKi8KKyNkZWZpbmUgUl9QUENfQUREUjE0CQk3CS8qIDE2Yml0IGFkZHJlc3MsIDIgYml0cyBpZ25vcmVkICovCisjZGVmaW5lIFJfUFBDX0FERFIxNF9CUlRBS0VOCTgKKyNkZWZpbmUgUl9QUENfQUREUjE0X0JSTlRBS0VOCTkKKyNkZWZpbmUgUl9QUENfUkVMMjQJCTEwCS8qIFBDIHJlbGF0aXZlIDI2IGJpdCAqLworI2RlZmluZSBSX1BQQ19SRUwxNAkJMTEJLyogUEMgcmVsYXRpdmUgMTYgYml0ICovCisjZGVmaW5lIFJfUFBDX1JFTDE0X0JSVEFLRU4JMTIKKyNkZWZpbmUgUl9QUENfUkVMMTRfQlJOVEFLRU4JMTMKKyNkZWZpbmUgUl9QUENfR09UMTYJCTE0CisjZGVmaW5lIFJfUFBDX0dPVDE2X0xPCQkxNQorI2RlZmluZSBSX1BQQ19HT1QxNl9ISQkJMTYKKyNkZWZpbmUgUl9QUENfR09UMTZfSEEJCTE3CisjZGVmaW5lIFJfUFBDX1BMVFJFTDI0CQkxOAorI2RlZmluZSBSX1BQQ19DT1BZCQkxOQorI2RlZmluZSBSX1BQQ19HTE9CX0RBVAkJMjAKKyNkZWZpbmUgUl9QUENfSk1QX1NMT1QJCTIxCisjZGVmaW5lIFJfUFBDX1JFTEFUSVZFCQkyMgorI2RlZmluZSBSX1BQQ19MT0NBTDI0UEMJCTIzCisjZGVmaW5lIFJfUFBDX1VBRERSMzIJCTI0CisjZGVmaW5lIFJfUFBDX1VBRERSMTYJCTI1CisjZGVmaW5lIFJfUFBDX1JFTDMyCQkyNgorI2RlZmluZSBSX1BQQ19QTFQzMgkJMjcKKyNkZWZpbmUgUl9QUENfUExUUkVMMzIJCTI4CisjZGVmaW5lIFJfUFBDX1BMVDE2X0xPCQkyOQorI2RlZmluZSBSX1BQQ19QTFQxNl9ISQkJMzAKKyNkZWZpbmUgUl9QUENfUExUMTZfSEEJCTMxCisjZGVmaW5lIFJfUFBDX1NEQVJFTDE2CQkzMgorI2RlZmluZSBSX1BQQ19TRUNUT0ZGCQkzMworI2RlZmluZSBSX1BQQ19TRUNUT0ZGX0xPCTM0CisjZGVmaW5lIFJfUFBDX1NFQ1RPRkZfSEkJMzUKKyNkZWZpbmUgUl9QUENfU0VDVE9GRl9IQQkzNgorCisvKiBQb3dlclBDIHJlbG9jYXRpb25zIGRlZmluZWQgZm9yIHRoZSBUTFMgYWNjZXNzIEFCSS4gICovCisjZGVmaW5lIFJfUFBDX1RMUwkJNjcgLyogbm9uZQkoc3ltK2FkZClAdGxzICovCisjZGVmaW5lIFJfUFBDX0RUUE1PRDMyCQk2OCAvKiB3b3JkMzIJKHN5bSthZGQpQGR0cG1vZCAqLworI2RlZmluZSBSX1BQQ19UUFJFTDE2CQk2OSAvKiBoYWxmMTYqCShzeW0rYWRkKUB0cHJlbCAqLworI2RlZmluZSBSX1BQQ19UUFJFTDE2X0xPCTcwIC8qIGhhbGYxNgkoc3ltK2FkZClAdHByZWxAbCAqLworI2RlZmluZSBSX1BQQ19UUFJFTDE2X0hJCTcxIC8qIGhhbGYxNgkoc3ltK2FkZClAdHByZWxAaCAqLworI2RlZmluZSBSX1BQQ19UUFJFTDE2X0hBCTcyIC8qIGhhbGYxNgkoc3ltK2FkZClAdHByZWxAaGEgKi8KKyNkZWZpbmUgUl9QUENfVFBSRUwzMgkJNzMgLyogd29yZDMyCShzeW0rYWRkKUB0cHJlbCAqLworI2RlZmluZSBSX1BQQ19EVFBSRUwxNgkJNzQgLyogaGFsZjE2Kgkoc3ltK2FkZClAZHRwcmVsICovCisjZGVmaW5lIFJfUFBDX0RUUFJFTDE2X0xPCTc1IC8qIGhhbGYxNgkoc3ltK2FkZClAZHRwcmVsQGwgKi8KKyNkZWZpbmUgUl9QUENfRFRQUkVMMTZfSEkJNzYgLyogaGFsZjE2CShzeW0rYWRkKUBkdHByZWxAaCAqLworI2RlZmluZSBSX1BQQ19EVFBSRUwxNl9IQQk3NyAvKiBoYWxmMTYJKHN5bSthZGQpQGR0cHJlbEBoYSAqLworI2RlZmluZSBSX1BQQ19EVFBSRUwzMgkJNzggLyogd29yZDMyCShzeW0rYWRkKUBkdHByZWwgKi8KKyNkZWZpbmUgUl9QUENfR09UX1RMU0dEMTYJNzkgLyogaGFsZjE2Kgkoc3ltK2FkZClAZ290QHRsc2dkICovCisjZGVmaW5lIFJfUFBDX0dPVF9UTFNHRDE2X0xPCTgwIC8qIGhhbGYxNgkoc3ltK2FkZClAZ290QHRsc2dkQGwgKi8KKyNkZWZpbmUgUl9QUENfR09UX1RMU0dEMTZfSEkJODEgLyogaGFsZjE2CShzeW0rYWRkKUBnb3RAdGxzZ2RAaCAqLworI2RlZmluZSBSX1BQQ19HT1RfVExTR0QxNl9IQQk4MiAvKiBoYWxmMTYJKHN5bSthZGQpQGdvdEB0bHNnZEBoYSAqLworI2RlZmluZSBSX1BQQ19HT1RfVExTTEQxNgk4MyAvKiBoYWxmMTYqCShzeW0rYWRkKUBnb3RAdGxzbGQgKi8KKyNkZWZpbmUgUl9QUENfR09UX1RMU0xEMTZfTE8JODQgLyogaGFsZjE2CShzeW0rYWRkKUBnb3RAdGxzbGRAbCAqLworI2RlZmluZSBSX1BQQ19HT1RfVExTTEQxNl9ISQk4NSAvKiBoYWxmMTYJKHN5bSthZGQpQGdvdEB0bHNsZEBoICovCisjZGVmaW5lIFJfUFBDX0dPVF9UTFNMRDE2X0hBCTg2IC8qIGhhbGYxNgkoc3ltK2FkZClAZ290QHRsc2xkQGhhICovCisjZGVmaW5lIFJfUFBDX0dPVF9UUFJFTDE2CTg3IC8qIGhhbGYxNioJKHN5bSthZGQpQGdvdEB0cHJlbCAqLworI2RlZmluZSBSX1BQQ19HT1RfVFBSRUwxNl9MTwk4OCAvKiBoYWxmMTYJKHN5bSthZGQpQGdvdEB0cHJlbEBsICovCisjZGVmaW5lIFJfUFBDX0dPVF9UUFJFTDE2X0hJCTg5IC8qIGhhbGYxNgkoc3ltK2FkZClAZ290QHRwcmVsQGggKi8KKyNkZWZpbmUgUl9QUENfR09UX1RQUkVMMTZfSEEJOTAgLyogaGFsZjE2CShzeW0rYWRkKUBnb3RAdHByZWxAaGEgKi8KKyNkZWZpbmUgUl9QUENfR09UX0RUUFJFTDE2CTkxIC8qIGhhbGYxNioJKHN5bSthZGQpQGdvdEBkdHByZWwgKi8KKyNkZWZpbmUgUl9QUENfR09UX0RUUFJFTDE2X0xPCTkyIC8qIGhhbGYxNioJKHN5bSthZGQpQGdvdEBkdHByZWxAbCAqLworI2RlZmluZSBSX1BQQ19HT1RfRFRQUkVMMTZfSEkJOTMgLyogaGFsZjE2Kgkoc3ltK2FkZClAZ290QGR0cHJlbEBoICovCisjZGVmaW5lIFJfUFBDX0dPVF9EVFBSRUwxNl9IQQk5NCAvKiBoYWxmMTYqCShzeW0rYWRkKUBnb3RAZHRwcmVsQGhhICovCisKKy8qIEtlZXAgdGhpcyB0aGUgbGFzdCBlbnRyeS4gICovCisjZGVmaW5lIFJfUFBDX05VTQkJOTUKKworLyoKKyAqIEVMRiByZWdpc3RlciBkZWZpbml0aW9ucy4uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKworI2RlZmluZSBFTEZfTkdSRUcJNDgJLyogaW5jbHVkZXMgbmlwLCBtc3IsIGxyLCBldGMuICovCisjZGVmaW5lIEVMRl9ORlBSRUcJMzMJLyogaW5jbHVkZXMgZnBzY3IgKi8KKyNkZWZpbmUgRUxGX05WUlJFRzMyCTMzCS8qIGluY2x1ZGVzIHZzY3IgJiB2cnNhdmUgc3R1ZmZlZCB0b2dldGhlciAqLworI2RlZmluZSBFTEZfTlZSUkVHCTM0CS8qIGluY2x1ZGVzIHZzY3IgJiB2cnNhdmUgaW4gc3BsaXQgdmVjdG9ycyAqLworCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgZWxmX2dyZWdfdDY0OwordHlwZWRlZiBlbGZfZ3JlZ190NjQgZWxmX2dyZWdzZXRfdDY0W0VMRl9OR1JFR107CisKK3R5cGVkZWYgdW5zaWduZWQgaW50IGVsZl9ncmVnX3QzMjsKK3R5cGVkZWYgZWxmX2dyZWdfdDMyIGVsZl9ncmVnc2V0X3QzMltFTEZfTkdSRUddOworCisvKgorICogVGhlc2UgYXJlIHVzZWQgdG8gc2V0IHBhcmFtZXRlcnMgaW4gdGhlIGNvcmUgZHVtcHMuCisgKi8KKyNpZm5kZWYgRUxGX0FSQ0gKKyMgZGVmaW5lIEVMRl9BUkNICUVNX1BQQzY0CisjIGRlZmluZSBFTEZfQ0xBU1MJRUxGQ0xBU1M2NAorIyBkZWZpbmUgRUxGX0RBVEEJRUxGREFUQTJNU0IKKyAgdHlwZWRlZiBlbGZfZ3JlZ190NjQgZWxmX2dyZWdfdDsKKyAgdHlwZWRlZiBlbGZfZ3JlZ3NldF90NjQgZWxmX2dyZWdzZXRfdDsKKyMgZGVmaW5lIGVsZl9hZGRyX3QgdW5zaWduZWQgbG9uZworI2Vsc2UKKyAgLyogQXNzdW1wdGlvbjogRUxGX0FSQ0ggPT0gRU1fUFBDIGFuZCBFTEZfQ0xBU1MgPT0gRUxGQ0xBU1MzMiAqLworICB0eXBlZGVmIGVsZl9ncmVnX3QzMiBlbGZfZ3JlZ190OworICB0eXBlZGVmIGVsZl9ncmVnc2V0X3QzMiBlbGZfZ3JlZ3NldF90OworIyBkZWZpbmUgZWxmX2FkZHJfdCB1MzIKKyNlbmRpZgorCit0eXBlZGVmIGRvdWJsZSBlbGZfZnByZWdfdDsKK3R5cGVkZWYgZWxmX2ZwcmVnX3QgZWxmX2ZwcmVnc2V0X3RbRUxGX05GUFJFR107CisKKy8qIEFsdGl2ZWMgcmVnaXN0ZXJzICovCisvKgorICogVGhlIGVudHJpZXMgd2l0aCBpbmRleGVzIDAtMzEgY29udGFpbiB0aGUgY29ycmVzcG9uZGluZyB2ZWN0b3IgcmVnaXN0ZXJzLiAKKyAqIFRoZSBlbnRyeSB3aXRoIGluZGV4IDMyIGNvbnRhaW5zIHRoZSB2c2NyIGFzIHRoZSBsYXN0IHdvcmQgKG9mZnNldCAxMikgCisgKiB3aXRoaW4gdGhlIHF1YWR3b3JkLiAgVGhpcyBhbGxvd3MgdGhlIHZzY3IgdG8gYmUgc3RvcmVkIGFzIGVpdGhlciBhIAorICogcXVhZHdvcmQgKHNpbmNlIGl0IG11c3QgYmUgY29waWVkIHZpYSBhIHZlY3RvciByZWdpc3RlciB0by9mcm9tIHN0b3JhZ2UpIAorICogb3IgYXMgYSB3b3JkLiAgVGhlIGVudHJ5IHdpdGggaW5kZXggMzMgY29udGFpbnMgdGhlIHZyc2F2ZSBhcyB0aGUgZmlyc3QgCisgKiB3b3JkIChvZmZzZXQgMCkgd2l0aGluIHRoZSBxdWFkd29yZC4KKyAqCisgKiBUaGlzIGRlZmluaXRpb24gb2YgdGhlIFZNWCBzdGF0ZSBpcyBjb21wYXRpYmxlIHdpdGggdGhlIGN1cnJlbnQgUFBDMzIgCisgKiBwdHJhY2UgaW50ZXJmYWNlLiAgVGhpcyBhbGxvd3Mgc2lnbmFsIGhhbmRsaW5nIGFuZCBwdHJhY2UgdG8gdXNlIHRoZSBzYW1lIAorICogc3RydWN0dXJlcy4gIFRoaXMgYWxzbyBzaW1wbGlmaWVzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBhIGJpLWFyY2ggCisgKiAoY29tYmluZWQgKDMyLSBhbmQgNjQtYml0KSBnZGIuCisgKgorICogTm90ZSB0aGF0IGl0J3MgX25vdF8gY29tcGF0aWJsZSB3aXRoIDMyIGJpdHMgdWNvbnRleHQgd2hpY2ggc3R1ZmZzIHRoZQorICogdnJzYXZlIGFsb25nIHdpdGggdnNjciBhbmQgc28gb25seSB1c2VzIDMzIHZlY3RvcnMgZm9yIHRoZSByZWdpc3RlciBzZXQKKyAqLwordHlwZWRlZiBfX3ZlY3RvcjEyOCBlbGZfdnJyZWdfdDsKK3R5cGVkZWYgZWxmX3ZycmVnX3QgZWxmX3ZycmVnc2V0X3RbRUxGX05WUlJFR107Cit0eXBlZGVmIGVsZl92cnJlZ190IGVsZl92cnJlZ3NldF90MzJbRUxGX05WUlJFRzMyXTsKKworLyoKKyAqIFRoaXMgaXMgdXNlZCB0byBlbnN1cmUgd2UgZG9uJ3QgbG9hZCBzb21ldGhpbmcgZm9yIHRoZSB3cm9uZyBhcmNoaXRlY3R1cmUuCisgKi8KKyNkZWZpbmUgZWxmX2NoZWNrX2FyY2goeCkgKCh4KS0+ZV9tYWNoaW5lID09IEVMRl9BUkNIKQorCisjZGVmaW5lIFVTRV9FTEZfQ09SRV9EVU1QCisjZGVmaW5lIEVMRl9FWEVDX1BBR0VTSVpFCTQwOTYKKworLyogVGhpcyBpcyB0aGUgbG9jYXRpb24gdGhhdCBhbiBFVF9EWU4gcHJvZ3JhbSBpcyBsb2FkZWQgaWYgZXhlYydlZC4gIFR5cGljYWwKKyAgIHVzZSBvZiB0aGlzIGlzIHRvIGludm9rZSAiLi9sZC5zbyBzb21lcHJvZyIgdG8gdGVzdCBvdXQgYSBuZXcgdmVyc2lvbiBvZgorICAgdGhlIGxvYWRlci4gIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgaXQgaXMgb3V0IG9mIHRoZSB3YXkgb2YgdGhlIHByb2dyYW0KKyAgIHRoYXQgaXQgd2lsbCAiZXhlYyIsIGFuZCB0aGF0IHRoZXJlIGlzIHN1ZmZpY2llbnQgcm9vbSBmb3IgdGhlIGJyay4gICovCisKKyNkZWZpbmUgRUxGX0VUX0RZTl9CQVNFICAgICAgICAgKDB4MDgwMDAwMDApCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKy8qIENvbW1vbiByb3V0aW5lIGZvciBib3RoIDMyLWJpdCBhbmQgNjQtYml0IHByb2Nlc3NlcyAqLworc3RhdGljIGlubGluZSB2b2lkIHBwYzY0X2VsZl9jb3JlX2NvcHlfcmVncyhlbGZfZ3JlZ3NldF90IGVsZl9yZWdzLAorCQkJCQkgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaW50IGk7CisJaW50IGdwcnMgPSBzaXplb2Yoc3RydWN0IHB0X3JlZ3MpL3NpemVvZihlbGZfZ3JlZ190NjQpOworCisJaWYgKGdwcnMgPiBFTEZfTkdSRUcpCisJCWdwcnMgPSBFTEZfTkdSRUc7CisKKwlmb3IgKGk9MDsgaSA8IGdwcnM7IGkrKykKKwkJZWxmX3JlZ3NbaV0gPSAoZWxmX2dyZWdfdCkoKGVsZl9ncmVnX3Q2NCAqKXJlZ3MpW2ldOworfQorI2RlZmluZSBFTEZfQ09SRV9DT1BZX1JFR1MoZ3JlZ3MsIHJlZ3MpIHBwYzY0X2VsZl9jb3JlX2NvcHlfcmVncyhncmVncywgcmVncyk7CisKK3N0YXRpYyBpbmxpbmUgaW50IGR1bXBfdGFza19yZWdzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLAorCQkJCSBlbGZfZ3JlZ3NldF90ICplbGZfcmVncykKK3sKKwlzdHJ1Y3QgcHRfcmVncyAqcmVncyA9IHRzay0+dGhyZWFkLnJlZ3M7CisJaWYgKHJlZ3MpCisJCXBwYzY0X2VsZl9jb3JlX2NvcHlfcmVncygqZWxmX3JlZ3MsIHJlZ3MpOworCisJcmV0dXJuIDE7Cit9CisjZGVmaW5lIEVMRl9DT1JFX0NPUFlfVEFTS19SRUdTKHRzaywgZWxmX3JlZ3MpIGR1bXBfdGFza19yZWdzKHRzaywgZWxmX3JlZ3MpCisKK2V4dGVybiBpbnQgZHVtcF90YXNrX2ZwdShzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgZWxmX2ZwcmVnc2V0X3QgKik7IAorI2RlZmluZSBFTEZfQ09SRV9DT1BZX0ZQUkVHUyh0c2ssIGVsZl9mcHJlZ3MpIGR1bXBfdGFza19mcHUodHNrLCBlbGZfZnByZWdzKQorCisvKiBYWFggU2hvdWxkIHdlIGRlZmluZSB0aGUgWEZQUkVHUyB1c2luZyBhbHRpdmVjID8/PyAqLworCisjZW5kaWYKKworLyogVGhpcyB5aWVsZHMgYSBtYXNrIHRoYXQgdXNlciBwcm9ncmFtcyBjYW4gdXNlIHRvIGZpZ3VyZSBvdXQgd2hhdAorICAgaW5zdHJ1Y3Rpb24gc2V0IHRoaXMgY3B1IHN1cHBvcnRzLiAgVGhpcyBjb3VsZCBiZSBkb25lIGluIHVzZXJzcGFjZSwKKyAgIGJ1dCBpdCdzIG5vdCBlYXN5LCBhbmQgd2UndmUgYWxyZWFkeSBkb25lIGl0IGhlcmUuICAqLworCisjZGVmaW5lIEVMRl9IV0NBUAkoY3VyX2NwdV9zcGVjLT5jcHVfdXNlcl9mZWF0dXJlcykKKworLyogVGhpcyB5aWVsZHMgYSBzdHJpbmcgdGhhdCBsZC5zbyB3aWxsIHVzZSB0byBsb2FkIGltcGxlbWVudGF0aW9uCisgICBzcGVjaWZpYyBsaWJyYXJpZXMgZm9yIG9wdGltaXphdGlvbi4gIFRoaXMgaXMgbW9yZSBzcGVjaWZpYyBpbgorICAgaW50ZW50IHRoYW4gcG9raW5nIGF0IHVuYW1lIG9yIC9wcm9jL2NwdWluZm8uCisKKyAgIEZvciB0aGUgbW9tZW50LCB3ZSBoYXZlIG9ubHkgb3B0aW1pemF0aW9ucyBmb3IgdGhlIEludGVsIGdlbmVyYXRpb25zLAorICAgYnV0IHRoYXQgY291bGQgY2hhbmdlLi4uICovCisKKyNkZWZpbmUgRUxGX1BMQVRGT1JNCShOVUxMKQorCisjZGVmaW5lIEVMRl9QTEFUX0lOSVQoX3IsIGxvYWRfYWRkcikJZG8geyBcCisJbWVtc2V0KF9yLT5ncHIsIDAsIHNpemVvZihfci0+Z3ByKSk7IFwKKwlfci0+Y3RyID0gX3ItPmxpbmsgPSBfci0+eGVyID0gX3ItPmNjciA9IDA7IFwKKwlfci0+Z3ByWzJdID0gbG9hZF9hZGRyOyBcCit9IHdoaWxlICgwKQorCisjaWZkZWYgX19LRVJORUxfXworI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgsIGliY3MyKQkJCQlcCitkbyB7CQkJCQkJCQlcCisJdW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MgPSAwOwkJCQlcCisJaWYgKChleCkuZV9pZGVudFtFSV9DTEFTU10gPT0gRUxGQ0xBU1MzMikJCVwKKwkJbmV3X2ZsYWdzID0gX1RJRl8zMkJJVDsJCQkJXAorCWlmICgoY3VycmVudF90aHJlYWRfaW5mbygpLT5mbGFncyAmIF9USUZfMzJCSVQpCQlcCisJICAgICE9IG5ld19mbGFncykJCQkJCVwKKwkJc2V0X3RocmVhZF9mbGFnKFRJRl9BQklfUEVORElORyk7CQlcCisJZWxzZQkJCQkJCQlcCisJCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9BQklfUEVORElORyk7CQlcCisJaWYgKGliY3MyKQkJCQkJCVwKKwkJc2V0X3BlcnNvbmFsaXR5KFBFUl9TVlI0KTsJCQlcCisJZWxzZSBpZiAoY3VycmVudC0+cGVyc29uYWxpdHkgIT0gUEVSX0xJTlVYMzIpCQlcCisJCXNldF9wZXJzb25hbGl0eShQRVJfTElOVVgpOwkJCVwKK30gd2hpbGUgKDApCisKKy8qCisgKiBBbiBleGVjdXRhYmxlIGZvciB3aGljaCBlbGZfcmVhZF9pbXBsaWVzX2V4ZWMoKSByZXR1cm5zIFRSVUUgd2lsbAorICogaGF2ZSB0aGUgUkVBRF9JTVBMSUVTX0VYRUMgcGVyc29uYWxpdHkgZmxhZyBzZXQgYXV0b21hdGljYWxseS4KKyAqLworI2RlZmluZSBlbGZfcmVhZF9pbXBsaWVzX2V4ZWMoZXgsIGV4ZWNfc3RrKQkoZXhlY19zdGsgIT0gRVhTVEFDS19ESVNBQkxFX1gpCisKKyNlbmRpZgorCisvKgorICogV2UgbmVlZCB0byBwdXQgaW4gc29tZSBleHRyYSBhdXggdGFibGUgZW50cmllcyB0byB0ZWxsIGdsaWJjIHdoYXQKKyAqIHRoZSBjYWNoZSBibG9jayBzaXplIGlzLCBzbyBpdCBjYW4gdXNlIHRoZSBkY2J6IGluc3RydWN0aW9uIHNhZmVseS4KKyAqLworI2RlZmluZSBBVF9EQ0FDSEVCU0laRQkJMTkKKyNkZWZpbmUgQVRfSUNBQ0hFQlNJWkUJCTIwCisjZGVmaW5lIEFUX1VDQUNIRUJTSVpFCQkyMQorLyogQSBzcGVjaWFsIGlnbm9yZWQgdHlwZSB2YWx1ZSBmb3IgUFBDLCBmb3IgZ2xpYmMgY29tcGF0aWJpbGl0eS4gICovCisjZGVmaW5lIEFUX0lHTk9SRVBQQwkJMjIKKworLyogVGhlIHZEU08gbG9jYXRpb24uIFdlIGhhdmUgdG8gdXNlIHRoZSBzYW1lIHZhbHVlIGFzIHg4NiBmb3IgZ2xpYmMncworICogc2FrZSA6LSkKKyAqLworI2RlZmluZSBBVF9TWVNJTkZPX0VIRFIJCTMzCisKK2V4dGVybiBpbnQgZGNhY2hlX2JzaXplOworZXh0ZXJuIGludCBpY2FjaGVfYnNpemU7CitleHRlcm4gaW50IHVjYWNoZV9ic2l6ZTsKKworLyogV2UgZG8gaGF2ZSBhbiBhcmNoX3NldHVwX2FkZGl0aW9uYWxfcGFnZXMgZm9yIHZEU08gbWF0dGVycyAqLworI2RlZmluZSBBUkNIX0hBU19TRVRVUF9BRERJVElPTkFMX1BBR0VTCitzdHJ1Y3QgbGludXhfYmlucHJtOworZXh0ZXJuIGludCBhcmNoX3NldHVwX2FkZGl0aW9uYWxfcGFnZXMoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwgaW50IGV4ZWN1dGFibGVfc3RhY2spOworCisvKgorICogVGhlIHJlcXVpcmVtZW50cyBoZXJlIGFyZToKKyAqIC0ga2VlcCB0aGUgZmluYWwgYWxpZ25tZW50IG9mIHNwIChzcCAmIDB4ZikKKyAqIC0gbWFrZSBzdXJlIHRoZSAzMi1iaXQgdmFsdWUgYXQgdGhlIGZpcnN0IDE2IGJ5dGUgYWxpZ25lZCBwb3NpdGlvbiBvZgorICogICBBVVhWIGlzIGdyZWF0ZXIgdGhhbiAxNiBmb3IgZ2xpYmMgY29tcGF0aWJpbGl0eS4KKyAqICAgQVRfSUdOT1JFUFBDIGlzIHVzZWQgZm9yIHRoYXQuCisgKiAtIGZvciBjb21wYXRpYmlsaXR5IHdpdGggZ2xpYmMgQVJDSF9ETElORk8gbXVzdCBhbHdheXMgYmUgZGVmaW5lZCBvbiBQUEMsCisgKiAgIGV2ZW4gaWYgRExJTkZPX0FSQ0hfSVRFTVMgZ29lcyB0byB6ZXJvIG9yIGlzIHVuZGVmaW5lZC4KKyAqLworI2RlZmluZSBBUkNIX0RMSU5GTwkJCQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCS8qIEhhbmRsZSBnbGliYyBjb21wYXRpYmlsaXR5LiAqLwkJCQlcCisJTkVXX0FVWF9FTlQoQVRfSUdOT1JFUFBDLCBBVF9JR05PUkVQUEMpOwkJCVwKKwlORVdfQVVYX0VOVChBVF9JR05PUkVQUEMsIEFUX0lHTk9SRVBQQyk7CQkJXAorCS8qIENhY2hlIHNpemUgaXRlbXMgKi8JCQkJCQlcCisJTkVXX0FVWF9FTlQoQVRfRENBQ0hFQlNJWkUsIGRjYWNoZV9ic2l6ZSk7CQkJXAorCU5FV19BVVhfRU5UKEFUX0lDQUNIRUJTSVpFLCBpY2FjaGVfYnNpemUpOwkJCVwKKwlORVdfQVVYX0VOVChBVF9VQ0FDSEVCU0laRSwgdWNhY2hlX2JzaXplKTsJCQlcCisJLyogdkRTTyBiYXNlICovCQkJCQkJCVwKKwlORVdfQVVYX0VOVChBVF9TWVNJTkZPX0VIRFIsIGN1cnJlbnQtPnRocmVhZC52ZHNvX2Jhc2UpOyAgICAgICAJXAorIH0gd2hpbGUgKDApCisKKy8qIFBvd2VyUEM2NCByZWxvY2F0aW9ucyBkZWZpbmVkIGJ5IHRoZSBBQklzICovCisjZGVmaW5lIFJfUFBDNjRfTk9ORSAgICBSX1BQQ19OT05FCisjZGVmaW5lIFJfUFBDNjRfQUREUjMyICBSX1BQQ19BRERSMzIgIC8qIDMyYml0IGFic29sdXRlIGFkZHJlc3MuICAqLworI2RlZmluZSBSX1BQQzY0X0FERFIyNCAgUl9QUENfQUREUjI0ICAvKiAyNmJpdCBhZGRyZXNzLCB3b3JkIGFsaWduZWQuICAqLworI2RlZmluZSBSX1BQQzY0X0FERFIxNiAgUl9QUENfQUREUjE2ICAvKiAxNmJpdCBhYnNvbHV0ZSBhZGRyZXNzLiAqLworI2RlZmluZSBSX1BQQzY0X0FERFIxNl9MTyBSX1BQQ19BRERSMTZfTE8gLyogbG93ZXIgMTZiaXRzIG9mIGFicy4gYWRkcmVzcy4gICovCisjZGVmaW5lIFJfUFBDNjRfQUREUjE2X0hJIFJfUFBDX0FERFIxNl9ISSAvKiBoaWdoIDE2Yml0cyBvZiBhYnMuIGFkZHJlc3MuICovCisjZGVmaW5lIFJfUFBDNjRfQUREUjE2X0hBIFJfUFBDX0FERFIxNl9IQSAvKiBhZGp1c3RlZCBoaWdoIDE2Yml0cy4gICovCisjZGVmaW5lIFJfUFBDNjRfQUREUjE0IFJfUFBDX0FERFIxNCAgIC8qIDE2Yml0IGFkZHJlc3MsIHdvcmQgYWxpZ25lZC4gICovCisjZGVmaW5lIFJfUFBDNjRfQUREUjE0X0JSVEFLRU4gIFJfUFBDX0FERFIxNF9CUlRBS0VOCisjZGVmaW5lIFJfUFBDNjRfQUREUjE0X0JSTlRBS0VOIFJfUFBDX0FERFIxNF9CUk5UQUtFTgorI2RlZmluZSBSX1BQQzY0X1JFTDI0ICAgUl9QUENfUkVMMjQgLyogUEMgcmVsYXRpdmUgMjYgYml0LCB3b3JkIGFsaWduZWQuICAqLworI2RlZmluZSBSX1BQQzY0X1JFTDE0ICAgUl9QUENfUkVMMTQgLyogUEMgcmVsYXRpdmUgMTYgYml0LiAqLworI2RlZmluZSBSX1BQQzY0X1JFTDE0X0JSVEFLRU4gICBSX1BQQ19SRUwxNF9CUlRBS0VOCisjZGVmaW5lIFJfUFBDNjRfUkVMMTRfQlJOVEFLRU4gIFJfUFBDX1JFTDE0X0JSTlRBS0VOCisjZGVmaW5lIFJfUFBDNjRfR09UMTYgICAgIFJfUFBDX0dPVDE2CisjZGVmaW5lIFJfUFBDNjRfR09UMTZfTE8gIFJfUFBDX0dPVDE2X0xPCisjZGVmaW5lIFJfUFBDNjRfR09UMTZfSEkgIFJfUFBDX0dPVDE2X0hJCisjZGVmaW5lIFJfUFBDNjRfR09UMTZfSEEgIFJfUFBDX0dPVDE2X0hBCisKKyNkZWZpbmUgUl9QUEM2NF9DT1BZICAgICAgUl9QUENfQ09QWQorI2RlZmluZSBSX1BQQzY0X0dMT0JfREFUICBSX1BQQ19HTE9CX0RBVAorI2RlZmluZSBSX1BQQzY0X0pNUF9TTE9UICBSX1BQQ19KTVBfU0xPVAorI2RlZmluZSBSX1BQQzY0X1JFTEFUSVZFICBSX1BQQ19SRUxBVElWRQorCisjZGVmaW5lIFJfUFBDNjRfVUFERFIzMiAgIFJfUFBDX1VBRERSMzIKKyNkZWZpbmUgUl9QUEM2NF9VQUREUjE2ICAgUl9QUENfVUFERFIxNgorI2RlZmluZSBSX1BQQzY0X1JFTDMyICAgICBSX1BQQ19SRUwzMgorI2RlZmluZSBSX1BQQzY0X1BMVDMyICAgICBSX1BQQ19QTFQzMgorI2RlZmluZSBSX1BQQzY0X1BMVFJFTDMyICBSX1BQQ19QTFRSRUwzMgorI2RlZmluZSBSX1BQQzY0X1BMVDE2X0xPICBSX1BQQ19QTFQxNl9MTworI2RlZmluZSBSX1BQQzY0X1BMVDE2X0hJICBSX1BQQ19QTFQxNl9ISQorI2RlZmluZSBSX1BQQzY0X1BMVDE2X0hBICBSX1BQQ19QTFQxNl9IQQorCisjZGVmaW5lIFJfUFBDNjRfU0VDVE9GRiAgICAgUl9QUENfU0VDVE9GRgorI2RlZmluZSBSX1BQQzY0X1NFQ1RPRkZfTE8gIFJfUFBDX1NFQ1RPRkZfTE8KKyNkZWZpbmUgUl9QUEM2NF9TRUNUT0ZGX0hJICBSX1BQQ19TRUNUT0ZGX0hJCisjZGVmaW5lIFJfUFBDNjRfU0VDVE9GRl9IQSAgUl9QUENfU0VDVE9GRl9IQQorI2RlZmluZSBSX1BQQzY0X0FERFIzMCAgICAgICAgICAzNyAgLyogd29yZDMwIChTICsgQSAtIFApID4+IDIuICAqLworI2RlZmluZSBSX1BQQzY0X0FERFI2NCAgICAgICAgICAzOCAgLyogZG91Ymxld29yZDY0IFMgKyBBLiAgKi8KKyNkZWZpbmUgUl9QUEM2NF9BRERSMTZfSElHSEVSICAgMzkgIC8qIGhhbGYxNiAjaGlnaGVyKFMgKyBBKS4gICovCisjZGVmaW5lIFJfUFBDNjRfQUREUjE2X0hJR0hFUkEgIDQwICAvKiBoYWxmMTYgI2hpZ2hlcmEoUyArIEEpLiAgKi8KKyNkZWZpbmUgUl9QUEM2NF9BRERSMTZfSElHSEVTVCAgNDEgIC8qIGhhbGYxNiAjaGlnaGVzdChTICsgQSkuICAqLworI2RlZmluZSBSX1BQQzY0X0FERFIxNl9ISUdIRVNUQSA0MiAgLyogaGFsZjE2ICNoaWdoZXN0YShTICsgQSkuICovCisjZGVmaW5lIFJfUFBDNjRfVUFERFI2NCAgICAgNDMgIC8qIGRvdWJsZXdvcmQ2NCBTICsgQS4gICovCisjZGVmaW5lIFJfUFBDNjRfUkVMNjQgICAgICAgNDQgIC8qIGRvdWJsZXdvcmQ2NCBTICsgQSAtIFAuICAqLworI2RlZmluZSBSX1BQQzY0X1BMVDY0ICAgICAgIDQ1ICAvKiBkb3VibGV3b3JkNjQgTCArIEEuICAqLworI2RlZmluZSBSX1BQQzY0X1BMVFJFTDY0ICAgIDQ2ICAvKiBkb3VibGV3b3JkNjQgTCArIEEgLSBQLiAgKi8KKyNkZWZpbmUgUl9QUEM2NF9UT0MxNiAgICAgICA0NyAgLyogaGFsZjE2KiBTICsgQSAtIC5UT0MuICAqLworI2RlZmluZSBSX1BQQzY0X1RPQzE2X0xPICAgIDQ4ICAvKiBoYWxmMTYgI2xvKFMgKyBBIC0gLlRPQy4pLiAgKi8KKyNkZWZpbmUgUl9QUEM2NF9UT0MxNl9ISSAgICA0OSAgLyogaGFsZjE2ICNoaShTICsgQSAtIC5UT0MuKS4gICovCisjZGVmaW5lIFJfUFBDNjRfVE9DMTZfSEEgICAgNTAgIC8qIGhhbGYxNiAjaGEoUyArIEEgLSAuVE9DLikuICAqLworI2RlZmluZSBSX1BQQzY0X1RPQyAgICAgICAgIDUxICAvKiBkb3VibGV3b3JkNjQgLlRPQy4gKi8KKyNkZWZpbmUgUl9QUEM2NF9QTFRHT1QxNiAgICA1MiAgLyogaGFsZjE2KiBNICsgQS4gICovCisjZGVmaW5lIFJfUFBDNjRfUExUR09UMTZfTE8gNTMgIC8qIGhhbGYxNiAjbG8oTSArIEEpLiAgKi8KKyNkZWZpbmUgUl9QUEM2NF9QTFRHT1QxNl9ISSA1NCAgLyogaGFsZjE2ICNoaShNICsgQSkuICAqLworI2RlZmluZSBSX1BQQzY0X1BMVEdPVDE2X0hBIDU1ICAvKiBoYWxmMTYgI2hhKE0gKyBBKS4gICovCisKKyNkZWZpbmUgUl9QUEM2NF9BRERSMTZfRFMgICAgICA1NiAvKiBoYWxmMTZkcyogKFMgKyBBKSA+PiAyLiAgKi8KKyNkZWZpbmUgUl9QUEM2NF9BRERSMTZfTE9fRFMgICA1NyAvKiBoYWxmMTZkcyAgI2xvKFMgKyBBKSA+PiAyLiAgKi8KKyNkZWZpbmUgUl9QUEM2NF9HT1QxNl9EUyAgICAgICA1OCAvKiBoYWxmMTZkcyogKEcgKyBBKSA+PiAyLiAgKi8KKyNkZWZpbmUgUl9QUEM2NF9HT1QxNl9MT19EUyAgICA1OSAvKiBoYWxmMTZkcyAgI2xvKEcgKyBBKSA+PiAyLiAgKi8KKyNkZWZpbmUgUl9QUEM2NF9QTFQxNl9MT19EUyAgICA2MCAvKiBoYWxmMTZkcyAgI2xvKEwgKyBBKSA+PiAyLiAgKi8KKyNkZWZpbmUgUl9QUEM2NF9TRUNUT0ZGX0RTICAgICA2MSAvKiBoYWxmMTZkcyogKFIgKyBBKSA+PiAyLiAgKi8KKyNkZWZpbmUgUl9QUEM2NF9TRUNUT0ZGX0xPX0RTICA2MiAvKiBoYWxmMTZkcyAgI2xvKFIgKyBBKSA+PiAyLiAgKi8KKyNkZWZpbmUgUl9QUEM2NF9UT0MxNl9EUyAgICAgICA2MyAvKiBoYWxmMTZkcyogKFMgKyBBIC0gLlRPQy4pID4+IDIuICAqLworI2RlZmluZSBSX1BQQzY0X1RPQzE2X0xPX0RTICAgIDY0IC8qIGhhbGYxNmRzICAjbG8oUyArIEEgLSAuVE9DLikgPj4gMi4gICovCisjZGVmaW5lIFJfUFBDNjRfUExUR09UMTZfRFMgICAgNjUgLyogaGFsZjE2ZHMqIChNICsgQSkgPj4gMi4gICovCisjZGVmaW5lIFJfUFBDNjRfUExUR09UMTZfTE9fRFMgNjYgLyogaGFsZjE2ZHMgICNsbyhNICsgQSkgPj4gMi4gICovCisKKy8qIFBvd2VyUEM2NCByZWxvY2F0aW9ucyBkZWZpbmVkIGZvciB0aGUgVExTIGFjY2VzcyBBQkkuICAqLworI2RlZmluZSBSX1BQQzY0X1RMUwkJNjcgLyogbm9uZQkoc3ltK2FkZClAdGxzICovCisjZGVmaW5lIFJfUFBDNjRfRFRQTU9ENjQJNjggLyogZG91Ymxld29yZDY0IChzeW0rYWRkKUBkdHBtb2QgKi8KKyNkZWZpbmUgUl9QUEM2NF9UUFJFTDE2CQk2OSAvKiBoYWxmMTYqCShzeW0rYWRkKUB0cHJlbCAqLworI2RlZmluZSBSX1BQQzY0X1RQUkVMMTZfTE8JNzAgLyogaGFsZjE2CShzeW0rYWRkKUB0cHJlbEBsICovCisjZGVmaW5lIFJfUFBDNjRfVFBSRUwxNl9ISQk3MSAvKiBoYWxmMTYJKHN5bSthZGQpQHRwcmVsQGggKi8KKyNkZWZpbmUgUl9QUEM2NF9UUFJFTDE2X0hBCTcyIC8qIGhhbGYxNgkoc3ltK2FkZClAdHByZWxAaGEgKi8KKyNkZWZpbmUgUl9QUEM2NF9UUFJFTDY0CQk3MyAvKiBkb3VibGV3b3JkNjQgKHN5bSthZGQpQHRwcmVsICovCisjZGVmaW5lIFJfUFBDNjRfRFRQUkVMMTYJNzQgLyogaGFsZjE2Kgkoc3ltK2FkZClAZHRwcmVsICovCisjZGVmaW5lIFJfUFBDNjRfRFRQUkVMMTZfTE8JNzUgLyogaGFsZjE2CShzeW0rYWRkKUBkdHByZWxAbCAqLworI2RlZmluZSBSX1BQQzY0X0RUUFJFTDE2X0hJCTc2IC8qIGhhbGYxNgkoc3ltK2FkZClAZHRwcmVsQGggKi8KKyNkZWZpbmUgUl9QUEM2NF9EVFBSRUwxNl9IQQk3NyAvKiBoYWxmMTYJKHN5bSthZGQpQGR0cHJlbEBoYSAqLworI2RlZmluZSBSX1BQQzY0X0RUUFJFTDY0CTc4IC8qIGRvdWJsZXdvcmQ2NCAoc3ltK2FkZClAZHRwcmVsICovCisjZGVmaW5lIFJfUFBDNjRfR09UX1RMU0dEMTYJNzkgLyogaGFsZjE2Kgkoc3ltK2FkZClAZ290QHRsc2dkICovCisjZGVmaW5lIFJfUFBDNjRfR09UX1RMU0dEMTZfTE8JODAgLyogaGFsZjE2CShzeW0rYWRkKUBnb3RAdGxzZ2RAbCAqLworI2RlZmluZSBSX1BQQzY0X0dPVF9UTFNHRDE2X0hJCTgxIC8qIGhhbGYxNgkoc3ltK2FkZClAZ290QHRsc2dkQGggKi8KKyNkZWZpbmUgUl9QUEM2NF9HT1RfVExTR0QxNl9IQQk4MiAvKiBoYWxmMTYJKHN5bSthZGQpQGdvdEB0bHNnZEBoYSAqLworI2RlZmluZSBSX1BQQzY0X0dPVF9UTFNMRDE2CTgzIC8qIGhhbGYxNioJKHN5bSthZGQpQGdvdEB0bHNsZCAqLworI2RlZmluZSBSX1BQQzY0X0dPVF9UTFNMRDE2X0xPCTg0IC8qIGhhbGYxNgkoc3ltK2FkZClAZ290QHRsc2xkQGwgKi8KKyNkZWZpbmUgUl9QUEM2NF9HT1RfVExTTEQxNl9ISQk4NSAvKiBoYWxmMTYJKHN5bSthZGQpQGdvdEB0bHNsZEBoICovCisjZGVmaW5lIFJfUFBDNjRfR09UX1RMU0xEMTZfSEEJODYgLyogaGFsZjE2CShzeW0rYWRkKUBnb3RAdGxzbGRAaGEgKi8KKyNkZWZpbmUgUl9QUEM2NF9HT1RfVFBSRUwxNl9EUwk4NyAvKiBoYWxmMTZkcyoJKHN5bSthZGQpQGdvdEB0cHJlbCAqLworI2RlZmluZSBSX1BQQzY0X0dPVF9UUFJFTDE2X0xPX0RTIDg4IC8qIGhhbGYxNmRzIChzeW0rYWRkKUBnb3RAdHByZWxAbCAqLworI2RlZmluZSBSX1BQQzY0X0dPVF9UUFJFTDE2X0hJCTg5IC8qIGhhbGYxNgkoc3ltK2FkZClAZ290QHRwcmVsQGggKi8KKyNkZWZpbmUgUl9QUEM2NF9HT1RfVFBSRUwxNl9IQQk5MCAvKiBoYWxmMTYJKHN5bSthZGQpQGdvdEB0cHJlbEBoYSAqLworI2RlZmluZSBSX1BQQzY0X0dPVF9EVFBSRUwxNl9EUwk5MSAvKiBoYWxmMTZkcyoJKHN5bSthZGQpQGdvdEBkdHByZWwgKi8KKyNkZWZpbmUgUl9QUEM2NF9HT1RfRFRQUkVMMTZfTE9fRFMgOTIgLyogaGFsZjE2ZHMgKHN5bSthZGQpQGdvdEBkdHByZWxAbCAqLworI2RlZmluZSBSX1BQQzY0X0dPVF9EVFBSRUwxNl9ISQk5MyAvKiBoYWxmMTYJKHN5bSthZGQpQGdvdEBkdHByZWxAaCAqLworI2RlZmluZSBSX1BQQzY0X0dPVF9EVFBSRUwxNl9IQQk5NCAvKiBoYWxmMTYJKHN5bSthZGQpQGdvdEBkdHByZWxAaGEgKi8KKyNkZWZpbmUgUl9QUEM2NF9UUFJFTDE2X0RTCTk1IC8qIGhhbGYxNmRzKgkoc3ltK2FkZClAdHByZWwgKi8KKyNkZWZpbmUgUl9QUEM2NF9UUFJFTDE2X0xPX0RTCTk2IC8qIGhhbGYxNmRzCShzeW0rYWRkKUB0cHJlbEBsICovCisjZGVmaW5lIFJfUFBDNjRfVFBSRUwxNl9ISUdIRVIJOTcgLyogaGFsZjE2CShzeW0rYWRkKUB0cHJlbEBoaWdoZXIgKi8KKyNkZWZpbmUgUl9QUEM2NF9UUFJFTDE2X0hJR0hFUkEJOTggLyogaGFsZjE2CShzeW0rYWRkKUB0cHJlbEBoaWdoZXJhICovCisjZGVmaW5lIFJfUFBDNjRfVFBSRUwxNl9ISUdIRVNUCTk5IC8qIGhhbGYxNgkoc3ltK2FkZClAdHByZWxAaGlnaGVzdCAqLworI2RlZmluZSBSX1BQQzY0X1RQUkVMMTZfSElHSEVTVEEgMTAwIC8qIGhhbGYxNgkoc3ltK2FkZClAdHByZWxAaGlnaGVzdGEgKi8KKyNkZWZpbmUgUl9QUEM2NF9EVFBSRUwxNl9EUwkxMDEgLyogaGFsZjE2ZHMqIChzeW0rYWRkKUBkdHByZWwgKi8KKyNkZWZpbmUgUl9QUEM2NF9EVFBSRUwxNl9MT19EUwkxMDIgLyogaGFsZjE2ZHMJKHN5bSthZGQpQGR0cHJlbEBsICovCisjZGVmaW5lIFJfUFBDNjRfRFRQUkVMMTZfSElHSEVSCTEwMyAvKiBoYWxmMTYJKHN5bSthZGQpQGR0cHJlbEBoaWdoZXIgKi8KKyNkZWZpbmUgUl9QUEM2NF9EVFBSRUwxNl9ISUdIRVJBIDEwNCAvKiBoYWxmMTYJKHN5bSthZGQpQGR0cHJlbEBoaWdoZXJhICovCisjZGVmaW5lIFJfUFBDNjRfRFRQUkVMMTZfSElHSEVTVCAxMDUgLyogaGFsZjE2CShzeW0rYWRkKUBkdHByZWxAaGlnaGVzdCAqLworI2RlZmluZSBSX1BQQzY0X0RUUFJFTDE2X0hJR0hFU1RBIDEwNiAvKiBoYWxmMTYJKHN5bSthZGQpQGR0cHJlbEBoaWdoZXN0YSAqLworCisvKiBLZWVwIHRoaXMgdGhlIGxhc3QgZW50cnkuICAqLworI2RlZmluZSBSX1BQQzY0X05VTQkJMTA3CisKKyNlbmRpZiAvKiBfX1BQQzY0X0VMRl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9lcnJuby5oIGIvaW5jbHVkZS9hc20tcHBjNjQvZXJybm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWJjM2IwYzYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9lcnJuby5oCkBAIC0wLDAgKzEsMTggQEAKKyNpZm5kZWYgX1BQQzY0X0VSUk5PX0gKKyNkZWZpbmUgX1BQQzY0X0VSUk5PX0gKKworLyogCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9lcnJuby5oPgorCisjdW5kZWYJRURFQURMT0NLCisjZGVmaW5lCUVERUFETE9DSwk1OAkvKiBGaWxlIGxvY2tpbmcgZGVhZGxvY2sgZXJyb3IgKi8KKworI2RlZmluZSBfTEFTVF9FUlJOTwk1MTYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9mY250bC5oIGIvaW5jbHVkZS9hc20tcHBjNjQvZmNudGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDI1NjBkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvZmNudGwuaApAQCAtMCwwICsxLDg5IEBACisjaWZuZGVmIF9QUEM2NF9GQ05UTF9ICisjZGVmaW5lIF9QUEM2NF9GQ05UTF9ICisKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKy8qIG9wZW4vZmNudGwgLSBPX1NZTkMgaXMgb25seSBpbXBsZW1lbnRlZCBvbiBibG9ja3MgZGV2aWNlcyBhbmQgb24gZmlsZXMKKyAgIGxvY2F0ZWQgb24gYW4gZXh0MiBmaWxlIHN5c3RlbSAqLworI2RlZmluZSBPX0FDQ01PREUJICAgMDAwMworI2RlZmluZSBPX1JET05MWQkgICAgIDAwCisjZGVmaW5lIE9fV1JPTkxZCSAgICAgMDEKKyNkZWZpbmUgT19SRFdSCQkgICAgIDAyCisjZGVmaW5lIE9fQ1JFQVQJCSAgIDAxMDAJLyogbm90IGZjbnRsICovCisjZGVmaW5lIE9fRVhDTAkJICAgMDIwMAkvKiBub3QgZmNudGwgKi8KKyNkZWZpbmUgT19OT0NUVFkJICAgMDQwMAkvKiBub3QgZmNudGwgKi8KKyNkZWZpbmUgT19UUlVOQwkJICAwMTAwMAkvKiBub3QgZmNudGwgKi8KKyNkZWZpbmUgT19BUFBFTkQJICAwMjAwMAorI2RlZmluZSBPX05PTkJMT0NLCSAgMDQwMDAKKyNkZWZpbmUgT19OREVMQVkJT19OT05CTE9DSworI2RlZmluZSBPX1NZTkMJCSAwMTAwMDAKKyNkZWZpbmUgRkFTWU5DCQkgMDIwMDAwCS8qIGZjbnRsLCBmb3IgQlNEIGNvbXBhdGliaWxpdHkgKi8KKyNkZWZpbmUgT19ESVJFQ1RPUlkgICAgICAwNDAwMDAJLyogbXVzdCBiZSBhIGRpcmVjdG9yeSAqLworI2RlZmluZSBPX05PRk9MTE9XICAgICAgMDEwMDAwMAkvKiBkb24ndCBmb2xsb3cgbGlua3MgKi8KKyNkZWZpbmUgT19MQVJHRUZJTEUgICAgIDAyMDAwMDAKKyNkZWZpbmUgT19ESVJFQ1QJMDQwMDAwMAkvKiBkaXJlY3QgZGlzayBhY2Nlc3MgaGludCAqLworI2RlZmluZSBPX05PQVRJTUUJMDEwMDAwMDAKKworI2RlZmluZSBGX0RVUEZECQkwCS8qIGR1cCAqLworI2RlZmluZSBGX0dFVEZECQkxCS8qIGdldCBjbG9zZV9vbl9leGVjICovCisjZGVmaW5lIEZfU0VURkQJCTIJLyogc2V0L2NsZWFyIGNsb3NlX29uX2V4ZWMgKi8KKyNkZWZpbmUgRl9HRVRGTAkJMwkvKiBnZXQgZmlsZS0+Zl9mbGFncyAqLworI2RlZmluZSBGX1NFVEZMCQk0CS8qIHNldCBmaWxlLT5mX2ZsYWdzICovCisjZGVmaW5lIEZfR0VUTEsJCTUKKyNkZWZpbmUgRl9TRVRMSwkJNgorI2RlZmluZSBGX1NFVExLVwk3CisKKyNkZWZpbmUgRl9TRVRPV04JOAkvKiAgZm9yIHNvY2tldHMuICovCisjZGVmaW5lIEZfR0VUT1dOCTkJLyogIGZvciBzb2NrZXRzLiAqLworI2RlZmluZSBGX1NFVFNJRwkxMAkvKiAgZm9yIHNvY2tldHMuICovCisjZGVmaW5lIEZfR0VUU0lHCTExCS8qICBmb3Igc29ja2V0cy4gKi8KKworLyogZm9yIEZfW0dFVHxTRVRdRkwgKi8KKyNkZWZpbmUgRkRfQ0xPRVhFQwkxCS8qIGFjdHVhbGx5IGFueXRoaW5nIHdpdGggbG93IGJpdCBzZXQgZ29lcyAqLworCisvKiBmb3IgcG9zaXggZmNudGwoKSBhbmQgbG9ja2YoKSAqLworI2RlZmluZSBGX1JETENLCQkwCisjZGVmaW5lIEZfV1JMQ0sJCTEKKyNkZWZpbmUgRl9VTkxDSwkJMgorCisvKiBmb3Igb2xkIGltcGxlbWVudGF0aW9uIG9mIGJzZCBmbG9jayAoKSAqLworI2RlZmluZSBGX0VYTENLCQk0CS8qIG9yIDMgKi8KKyNkZWZpbmUgRl9TSExDSwkJOAkvKiBvciA0ICovCisKKy8qIGZvciBsZWFzZXMgKi8KKyNkZWZpbmUgRl9JTlBST0dSRVNTCTE2CisKKy8qIG9wZXJhdGlvbnMgZm9yIGJzZCBmbG9jaygpLCBhbHNvIHVzZWQgYnkgdGhlIGtlcm5lbCBpbXBsZW1lbnRhdGlvbiAqLworI2RlZmluZSBMT0NLX1NICQkxCS8qIHNoYXJlZCBsb2NrICovCisjZGVmaW5lIExPQ0tfRVgJCTIJLyogZXhjbHVzaXZlIGxvY2sgKi8KKyNkZWZpbmUgTE9DS19OQgkJNAkvKiBvcidkIHdpdGggb25lIG9mIHRoZSBhYm92ZSB0byBwcmV2ZW50CisJCQkJICAgYmxvY2tpbmcgKi8KKyNkZWZpbmUgTE9DS19VTgkJOAkvKiByZW1vdmUgbG9jayAqLworCisjZGVmaW5lIExPQ0tfTUFORAkzMgkvKiBUaGlzIGlzIGEgbWFuZGF0b3J5IGZsb2NrICovCisjZGVmaW5lIExPQ0tfUkVBRAk2NAkvKiAuLi4gV2hpY2ggYWxsb3dzIGNvbmN1cnJlbnQgcmVhZCBvcGVyYXRpb25zICovCisjZGVmaW5lIExPQ0tfV1JJVEUJMTI4CS8qIC4uLiBXaGljaCBhbGxvd3MgY29uY3VycmVudCB3cml0ZSBvcGVyYXRpb25zICovCisjZGVmaW5lIExPQ0tfUlcJCTE5MgkvKiAuLi4gV2hpY2ggYWxsb3dzIGNvbmN1cnJlbnQgcmVhZCAmIHdyaXRlIG9wcyAqLworCisjaWZkZWYgX19LRVJORUxfXworI2RlZmluZSBGX1BPU0lYCQkxCisjZGVmaW5lIEZfRkxPQ0sJCTIKKyNkZWZpbmUgRl9CUk9LRU4JNAkvKiBicm9rZW4gZmxvY2soKSBlbXVsYXRpb24gKi8KKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKK3N0cnVjdCBmbG9jayB7CisJc2hvcnQgbF90eXBlOworCXNob3J0IGxfd2hlbmNlOworCW9mZl90IGxfc3RhcnQ7CisJb2ZmX3QgbF9sZW47CisJcGlkX3QgbF9waWQ7Cit9OworCisjZGVmaW5lIEZfTElOVVhfU1BFQ0lGSUNfQkFTRQkxMDI0CisKKyNlbmRpZiAvKiBfUFBDNjRfRkNOVExfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvZmxvcHB5LmggYi9pbmNsdWRlL2FzbS1wcGM2NC9mbG9wcHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzQ5N2I1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvZmxvcHB5LmgKQEAgLTAsMCArMSwxMDYgQEAKKy8qCisgKiBBcmNoaXRlY3R1cmUgc3BlY2lmaWMgcGFydHMgb2YgdGhlIEZsb3BweSBkcml2ZXIKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUKKyAqLworI2lmbmRlZiBfX0FTTV9QUEM2NF9GTE9QUFlfSAorI2RlZmluZSBfX0FTTV9QUEM2NF9GTE9QUFlfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KKworI2RlZmluZSBmZF9pbmIocG9ydCkJCQlpbmJfcChwb3J0KQorI2RlZmluZSBmZF9vdXRiKHZhbHVlLHBvcnQpCQlvdXRiX3AodmFsdWUscG9ydCkKKworI2RlZmluZSBmZF9lbmFibGVfZG1hKCkgICAgICAgICBlbmFibGVfZG1hKEZMT1BQWV9ETUEpCisjZGVmaW5lIGZkX2Rpc2FibGVfZG1hKCkgICAgICAgIGRpc2FibGVfZG1hKEZMT1BQWV9ETUEpCisjZGVmaW5lIGZkX3JlcXVlc3RfZG1hKCkgICAgICAgIHJlcXVlc3RfZG1hKEZMT1BQWV9ETUEsImZsb3BweSIpCisjZGVmaW5lIGZkX2ZyZWVfZG1hKCkgICAgICAgICAgIGZyZWVfZG1hKEZMT1BQWV9ETUEpCisjZGVmaW5lIGZkX2NsZWFyX2RtYV9mZigpICAgICAgIGNsZWFyX2RtYV9mZihGTE9QUFlfRE1BKQorI2RlZmluZSBmZF9zZXRfZG1hX21vZGUobW9kZSkgICBzZXRfZG1hX21vZGUoRkxPUFBZX0RNQSxtb2RlKQorI2RlZmluZSBmZF9zZXRfZG1hX2NvdW50KGNvdW50KSBzZXRfZG1hX2NvdW50KEZMT1BQWV9ETUEsY291bnQpCisjZGVmaW5lIGZkX2VuYWJsZV9pcnEoKSAgICAgICAgIGVuYWJsZV9pcnEoRkxPUFBZX0lSUSkKKyNkZWZpbmUgZmRfZGlzYWJsZV9pcnEoKSAgICAgICAgZGlzYWJsZV9pcnEoRkxPUFBZX0lSUSkKKyNkZWZpbmUgZmRfY2FjaGVmbHVzaChhZGRyLHNpemUpIC8qIG5vdGhpbmcgKi8KKyNkZWZpbmUgZmRfcmVxdWVzdF9pcnEoKSAgICAgICAgcmVxdWVzdF9pcnEoRkxPUFBZX0lSUSwgZmxvcHB5X2ludGVycnVwdCwgXAorCQkJCQkgICAgU0FfSU5URVJSVVBUfFNBX1NBTVBMRV9SQU5ET00sIFwKKwkJCQkgICAgICAgICAgICAiZmxvcHB5IiwgTlVMTCkKKyNkZWZpbmUgZmRfZnJlZV9pcnEoKSAgICAgICAgICAgZnJlZV9pcnEoRkxPUFBZX0lSUSwgTlVMTCk7CisKKyNpZmRlZiBDT05GSUdfUENJCisKKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKworI2RlZmluZSBmZF9kbWFfc2V0dXAoYWRkcixzaXplLG1vZGUsaW8pIHBwYzY0X2ZkX2RtYV9zZXR1cChhZGRyLHNpemUsbW9kZSxpbykKKworc3RhdGljIF9faW5saW5lX18gaW50IAorcHBjNjRfZmRfZG1hX3NldHVwKGNoYXIgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IG1vZGUsIGludCBpbykKK3sKKwlzdGF0aWMgdW5zaWduZWQgbG9uZyBwcmV2X3NpemU7CisJc3RhdGljIGRtYV9hZGRyX3QgYnVzX2FkZHIgPSAwOworCXN0YXRpYyBjaGFyICpwcmV2X2FkZHI7CisJc3RhdGljIGludCBwcmV2X2RpcjsKKwlpbnQgZGlyOworCisJZGlyID0gKG1vZGUgPT0gRE1BX01PREVfUkVBRCkgPyBQQ0lfRE1BX0ZST01ERVZJQ0UgOiBQQ0lfRE1BX1RPREVWSUNFOworCisJaWYgKGJ1c19hZGRyIAorCSAgICAmJiAoYWRkciAhPSBwcmV2X2FkZHIgfHwgc2l6ZSAhPSBwcmV2X3NpemUgfHwgZGlyICE9IHByZXZfZGlyKSkgeworCQkvKiBkaWZmZXJlbnQgZnJvbSBsYXN0IHRpbWUgLS0gdW5tYXAgcHJldiAqLworCQlwY2lfdW5tYXBfc2luZ2xlKE5VTEwsIGJ1c19hZGRyLCBwcmV2X3NpemUsIHByZXZfZGlyKTsKKwkJYnVzX2FkZHIgPSAwOworCX0KKworCWlmICghYnVzX2FkZHIpCS8qIG5lZWQgdG8gbWFwIGl0ICovIHsKKwkJYnVzX2FkZHIgPSBwY2lfbWFwX3NpbmdsZShOVUxMLCBhZGRyLCBzaXplLCBkaXIpOworCX0KKworCS8qIHJlbWVtYmVyIHRoaXMgb25lIGFzIHByZXYgKi8KKwlwcmV2X2FkZHIgPSBhZGRyOworCXByZXZfc2l6ZSA9IHNpemU7CisJcHJldl9kaXIgPSBkaXI7CisKKwlmZF9jbGVhcl9kbWFfZmYoKTsKKwlmZF9jYWNoZWZsdXNoKGFkZHIsIHNpemUpOworCWZkX3NldF9kbWFfbW9kZShtb2RlKTsKKwlzZXRfZG1hX2FkZHIoRkxPUFBZX0RNQSwgYnVzX2FkZHIpOworCWZkX3NldF9kbWFfY291bnQoc2l6ZSk7CisJdmlydHVhbF9kbWFfcG9ydCA9IGlvOworCWZkX2VuYWJsZV9kbWEoKTsKKworCXJldHVybiAwOworfQorCisjZW5kaWYgLyogQ09ORklHX1BDSSAqLworCitfX2lubGluZV9fIHZvaWQgdmlydHVhbF9kbWFfaW5pdCh2b2lkKQoreworCS8qIE5vdGhpbmcgdG8gZG8gb24gUG93ZXJQQyAqLworfQorCitzdGF0aWMgaW50IEZEQzEgPSAweDNmMDsKK3N0YXRpYyBpbnQgRkRDMiA9IC0xOworCisvKgorICogQWdhaW4sIHRoZSBDTU9TIGluZm9ybWF0aW9uIG5vdCBhdmFpbGFibGUKKyAqLworI2RlZmluZSBGTE9QUFkwX1RZUEUgNgorI2RlZmluZSBGTE9QUFkxX1RZUEUgMAorCisjZGVmaW5lIE5fRkRDIDIJCQkvKiBEb24ndCBjaGFuZ2UgdGhpcyEgKi8KKyNkZWZpbmUgTl9EUklWRSA4CisKKyNkZWZpbmUgRkxPUFBZX01PVE9SX01BU0sgMHhmMAorCisvKgorICogVGhlIFBvd2VyUEMgaGFzIG5vIHByb2JsZW1zIHdpdGggZmxvcHB5IERNQSBjcm9zc2luZyA2NGsgYm9yZGVycy4KKyAqLworI2RlZmluZSBDUk9TU182NEtCKGEscykJKDApCisKKyNkZWZpbmUgRVhUUkFfRkxPUFBZX1BBUkFNUworCisjZW5kaWYgLyogX19BU01fUFBDNjRfRkxPUFBZX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L2hhcmRpcnEuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L2hhcmRpcnEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWU3MmJiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvaGFyZGlycS5oCkBAIC0wLDAgKzEsMjcgQEAKKyNpZm5kZWYgX19BU01fSEFSRElSUV9ICisjZGVmaW5lIF9fQVNNX0hBUkRJUlFfSAorCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVlbXB0Lmg+CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQgX19zb2Z0aXJxX3BlbmRpbmc7Cit9IF9fX19jYWNoZWxpbmVfYWxpZ25lZCBpcnFfY3B1c3RhdF90OworCisjaW5jbHVkZSA8bGludXgvaXJxX2NwdXN0YXQuaD4JLyogU3RhbmRhcmQgbWFwcGluZ3MgZm9yIGlycV9jcHVzdGF0X3QgYWJvdmUgKi8KKworc3RhdGljIGlubGluZSB2b2lkIGFja19iYWRfaXJxKGludCBpcnEpCit7CisJcHJpbnRrKEtFUk5fQ1JJVCAiaWxsZWdhbCB2ZWN0b3IgJWQgcmVjZWl2ZWQhXG4iLCBpcnEpOworCUJVRygpOworfQorCisjZW5kaWYgLyogX19BU01fSEFSRElSUV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9oZHJlZy5oIGIvaW5jbHVkZS9hc20tcHBjNjQvaGRyZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjdmZDFhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvaGRyZWcuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvaGRyZWcuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L2h2Y2FsbC5oIGIvaW5jbHVkZS9hc20tcHBjNjQvaHZjYWxsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY2NjhhNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L2h2Y2FsbC5oCkBAIC0wLDAgKzEsMTY3IEBACisjaWZuZGVmIF9QUEM2NF9IVkNBTExfSAorI2RlZmluZSBfUFBDNjRfSFZDQUxMX0gKKworI2RlZmluZSBIVlNDCQkJLmxvbmcgMHg0NDAwMDAyMgorCisjZGVmaW5lIEhfU3VjY2VzcwkwCisjZGVmaW5lIEhfQnVzeQkJMQkvKiBIYXJkd2FyZSBidXN5IC0tIHJldHJ5IGxhdGVyICovCisjZGVmaW5lIEhfQ29uc3RyYWluZWQJNAkvKiBSZXNvdXJjZSByZXF1ZXN0IGNvbnN0cmFpbmVkIHRvIG1heCBhbGxvd2VkICovCisjZGVmaW5lIEhfTG9uZ0J1c3lTdGFydFJhbmdlICAgOTkwMCAgLyogU3RhcnQgb2YgbG9uZyBidXN5IHJhbmdlICovCisjZGVmaW5lIEhfTG9uZ0J1c3lPcmRlcjFtc2VjICAgOTkwMCAgLyogTG9uZyBidXN5LCBoaW50IHRoYXQgMW1zZWMgaXMgYSBnb29kIHRpbWUgdG8gcmV0cnkgKi8KKyNkZWZpbmUgSF9Mb25nQnVzeU9yZGVyMTBtc2VjICA5OTAxICAvKiBMb25nIGJ1c3ksIGhpbnQgdGhhdCAxMG1zZWMgaXMgYSBnb29kIHRpbWUgdG8gcmV0cnkgKi8KKyNkZWZpbmUgSF9Mb25nQnVzeU9yZGVyMTAwbXNlYyA5OTAyICAvKiBMb25nIGJ1c3ksIGhpbnQgdGhhdCAxMDBtc2VjIGlzIGEgZ29vZCB0aW1lIHRvIHJldHJ5ICovCisjZGVmaW5lIEhfTG9uZ0J1c3lPcmRlcjFzZWMgICAgOTkwMyAgLyogTG9uZyBidXN5LCBoaW50IHRoYXQgMXNlYyBpcyBhIGdvb2QgdGltZSB0byByZXRyeSAqLworI2RlZmluZSBIX0xvbmdCdXN5T3JkZXIxMHNlYyAgIDk5MDQgIC8qIExvbmcgYnVzeSwgaGludCB0aGF0IDEwc2VjIGlzIGEgZ29vZCB0aW1lIHRvIHJldHJ5ICovCisjZGVmaW5lIEhfTG9uZ0J1c3lPcmRlcjEwMHNlYyAgOTkwNSAgLyogTG9uZyBidXN5LCBoaW50IHRoYXQgMTAwc2VjIGlzIGEgZ29vZCB0aW1lIHRvIHJldHJ5ICovCisjZGVmaW5lIEhfTG9uZ0J1c3lFbmRSYW5nZSAgICAgOTkwNSAgLyogRW5kIG9mIGxvbmcgYnVzeSByYW5nZSAqLworI2RlZmluZSBIX0hhcmR3YXJlCS0xCS8qIEhhcmR3YXJlIGVycm9yICovCisjZGVmaW5lIEhfRnVuY3Rpb24JLTIJLyogRnVuY3Rpb24gbm90IHN1cHBvcnRlZCAqLworI2RlZmluZSBIX1ByaXZpbGVnZQktMwkvKiBDYWxsZXIgbm90IHByaXZpbGVnZWQgKi8KKyNkZWZpbmUgSF9QYXJhbWV0ZXIJLTQJLyogUGFyYW1ldGVyIGludmFsaWQsIG91dC1vZi1yYW5nZSBvciBjb25mbGljdGluZyAqLworI2RlZmluZSBIX0JhZF9Nb2RlCS01CS8qIElsbGVnYWwgbXNyIHZhbHVlICovCisjZGVmaW5lIEhfUFRFR19GdWxsCS02CS8qIFBURUcgaXMgZnVsbCAqLworI2RlZmluZSBIX05vdF9Gb3VuZAktNwkvKiBQVEUgd2FzIG5vdCBmb3VuZCIgKi8KKyNkZWZpbmUgSF9SZXNlcnZlZF9EQUJSCS04CS8qIERBQlIgYWRkcmVzcyBpcyByZXNlcnZlZCBieSB0aGUgaHlwZXJ2aXNvciBvbiB0aGlzIHByb2Nlc3NvciIgKi8KKyNkZWZpbmUgSF9Ob01lbSAgICAgICAgICAgICAgICAgLTkKKyNkZWZpbmUgSF9BdXRob3JpdHkgICAgICAgICAgICAtMTAKKyNkZWZpbmUgSF9QZXJtaXNzaW9uICAgICAgICAgICAtMTEKKyNkZWZpbmUgSF9Ecm9wcGVkICAgICAgICAgICAgICAtMTIKKyNkZWZpbmUgSF9Tb3VyY2VQYXJtICAgICAgICAgICAtMTMKKyNkZWZpbmUgSF9EZXN0UGFybSAgICAgICAgICAgICAtMTQKKyNkZWZpbmUgSF9SZW1vdGVQYXJtICAgICAgICAgICAtMTUKKyNkZWZpbmUgSF9SZXNvdXJjZSAgICAgICAgICAgICAtMTYKKworLyogTG9uZyBCdXN5IGlzIGEgY29uZGl0aW9uIHRoYXQgY2FuIGJlIHJldHVybmVkIGJ5IHRoZSBmaXJtd2FyZQorICogd2hlbiBhIGNhbGwgY2Fubm90IGJlIGNvbXBsZXRlZCBub3csIGJ1dCB0aGUgaWRlbnRpY2FsIGNhbGwKKyAqIHNob3VsZCBiZSByZXRyaWVkIGxhdGVyLiAgVGhpcyBwcmV2ZW50cyBjYWxscyBibG9ja2luZyBpbiB0aGUKKyAqIGZpcm13YXJlIGZvciBsb25nIHBlcmlvZHMgb2YgdGltZS4gQW5ub3lpbmdseSB0aGUgZmlybXdhcmUgY2FuIHJldHVybgorICogYSByYW5nZSBvZiByZXR1cm4gY29kZXMsIGhpbnRpbmcgYXQgaG93IGxvbmcgd2Ugc2hvdWxkIHdhaXQgYmVmb3JlCisgKiByZXRyeWluZy4gIElmIHlvdSBkb24ndCBjYXJlIGZvciB0aGUgaGludCwgdGhlIG1hY3JvIGJlbG93IGlzIGEgZ29vZAorICogd2F5IHRvIGNoZWNrIGZvciB0aGUgbG9uZ19idXN5IHJldHVybiBjb2RlcworICovCisjZGVmaW5lIEhfaXNMb25nQnVzeSh4KSAgKCh4ID49IEhfTG9uZ0J1c3lTdGFydFJhbmdlKSAmJiAoeCA8PSBIX0xvbmdCdXN5RW5kUmFuZ2UpKQorCisvKiBGbGFncyAqLworI2RlZmluZSBIX0xBUkdFX1BBR0UJCSgxVUw8PCg2My0xNikpCisjZGVmaW5lIEhfRVhBQ1QJCQkoMVVMPDwoNjMtMjQpKQkvKiBVc2UgZXhhY3QgUFRFIG9yIHJldHVybiBIX1BURUdfRlVMTCAqLworI2RlZmluZSBIX1JfWExBVEUJCSgxVUw8PCg2My0yNSkpCS8qIGluY2x1ZGUgYSB2YWxpZCBsb2dpY2FsIHBhZ2UgbnVtIGluIHRoZSBwdGUgaWYgdGhlIHZhbGlkIGJpdCBpcyBzZXQgKi8KKyNkZWZpbmUgSF9SRUFEXzQJCSgxVUw8PCg2My0yNikpCS8qIFJldHVybiA0IFBURXMgKi8KKyNkZWZpbmUgSF9BVlBOCQkJKDFVTDw8KDYzLTMyKSkJLyogQW4gYXZwbiBpcyBwcm92aWRlZCBhcyBhIHNhbml0eSB0ZXN0ICovCisjZGVmaW5lIEhfQU5EQ09ORAkJKDFVTDw8KDYzLTMzKSkKKyNkZWZpbmUgSF9JQ0FDSEVfSU5WQUxJREFURQkoMVVMPDwoNjMtNDApKQkvKiBpY2JpLCBldGMuICAoaWdub3JlZCBmb3IgSU8gcGFnZXMpICovCisjZGVmaW5lIEhfSUNBQ0hFX1NZTkNIUk9OSVpFCSgxVUw8PCg2My00MSkpCS8qIGRjYnN0LCBpY2JpLCBldGMgKGlnbm9yZWQgZm9yIElPIHBhZ2VzICovCisjZGVmaW5lIEhfWkVST19QQUdFCQkoMVVMPDwoNjMtNDgpKQkvKiB6ZXJvIHRoZSBwYWdlIGJlZm9yZSBtYXBwaW5nIChpZ25vcmVkIGZvciBJTyBwYWdlcykgKi8KKyNkZWZpbmUgSF9DT1BZX1BBR0UJCSgxVUw8PCg2My00OSkpCisjZGVmaW5lIEhfTgkJCSgxVUw8PCg2My02MSkpCisjZGVmaW5lIEhfUFAxCQkJKDFVTDw8KDYzLTYyKSkKKyNkZWZpbmUgSF9QUDIJCQkoMVVMPDwoNjMtNjMpKQorCisvKiBwU2VyaWVzIGh5cGVydmlzb3Igb3Bjb2RlcyAqLworI2RlZmluZSBIX1JFTU9WRQkJMHgwNAorI2RlZmluZSBIX0VOVEVSCQkJMHgwOAorI2RlZmluZSBIX1JFQUQJCQkweDBjCisjZGVmaW5lIEhfQ0xFQVJfTU9ECQkweDEwCisjZGVmaW5lIEhfQ0xFQVJfUkVGCQkweDE0CisjZGVmaW5lIEhfUFJPVEVDVAkJMHgxOAorI2RlZmluZSBIX0dFVF9UQ0UJCTB4MWMKKyNkZWZpbmUgSF9QVVRfVENFCQkweDIwCisjZGVmaW5lIEhfU0VUX1NQUkcwCQkweDI0CisjZGVmaW5lIEhfU0VUX0RBQlIJCTB4MjgKKyNkZWZpbmUgSF9QQUdFX0lOSVQJCTB4MmMKKyNkZWZpbmUgSF9TRVRfQVNSCQkweDMwCisjZGVmaW5lIEhfQVNSX09OCQkweDM0CisjZGVmaW5lIEhfQVNSX09GRgkJMHgzOAorI2RlZmluZSBIX0xPR0lDQUxfQ0lfTE9BRAkweDNjCisjZGVmaW5lIEhfTE9HSUNBTF9DSV9TVE9SRQkweDQwCisjZGVmaW5lIEhfTE9HSUNBTF9DQUNIRV9MT0FECTB4NDQKKyNkZWZpbmUgSF9MT0dJQ0FMX0NBQ0hFX1NUT1JFCTB4NDgKKyNkZWZpbmUgSF9MT0dJQ0FMX0lDQkkJCTB4NGMKKyNkZWZpbmUgSF9MT0dJQ0FMX0RDQkYJCTB4NTAKKyNkZWZpbmUgSF9HRVRfVEVSTV9DSEFSCQkweDU0CisjZGVmaW5lIEhfUFVUX1RFUk1fQ0hBUgkJMHg1OAorI2RlZmluZSBIX1JFQUxfVE9fTE9HSUNBTAkweDVjCisjZGVmaW5lIEhfSFlQRVJWSVNPUl9EQVRBCTB4NjAKKyNkZWZpbmUgSF9FT0kJCQkweDY0CisjZGVmaW5lIEhfQ1BQUgkJCTB4NjgKKyNkZWZpbmUgSF9JUEkJCQkweDZjCisjZGVmaW5lIEhfSVBPTEwJCQkweDcwCisjZGVmaW5lIEhfWElSUgkJCTB4NzQKKyNkZWZpbmUgSF9QRVJGTU9OCQkweDdjCisjZGVmaW5lIEhfTUlHUkFURV9ETUEJCTB4NzgKKyNkZWZpbmUgSF9SRUdJU1RFUl9WUEEJCTB4REMKKyNkZWZpbmUgSF9DRURFCQkgICAgICAgIDB4RTAKKyNkZWZpbmUgSF9DT05GRVIJCTB4RTQKKyNkZWZpbmUgSF9QUk9ECQkgICAgICAgIDB4RTgKKyNkZWZpbmUgSF9HRVRfUFBQCQkweEVDCisjZGVmaW5lIEhfU0VUX1BQUAkJMHhGMAorI2RlZmluZSBIX1BVUlIJCQkweEY0CisjZGVmaW5lIEhfUElDCQkgICAgICAgIDB4RjgKKyNkZWZpbmUgSF9SRUdfQ1JRCQkweEZDCisjZGVmaW5lIEhfRlJFRV9DUlEJCTB4MTAwCisjZGVmaW5lIEhfVklPX1NJR05BTAkJMHgxMDQKKyNkZWZpbmUgSF9TRU5EX0NSUQkJMHgxMDgKKyNkZWZpbmUgSF9DT1BZX1JETUEgICAgICAgICAgICAgMHgxMTAKKyNkZWZpbmUgSF9TVFVGRl9UQ0UJCTB4MTM4CisjZGVmaW5lIEhfUFVUX1RDRV9JTkRJUkVDVAkweDEzQworI2RlZmluZSBIX1ZURVJNX1BBUlRORVJfSU5GTwkweDE1MAorI2RlZmluZSBIX1JFR0lTVEVSX1ZURVJNCTB4MTU0CisjZGVmaW5lIEhfRlJFRV9WVEVSTQkJMHgxNTgKKyNkZWZpbmUgSF9QT0xMX1BFTkRJTkcJICAgICAgICAweDFEOAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisvKiBwbHBhcl9oY2FsbCgpIC0tIEdlbmVyaWMgY2FsbCBpbnRlcmZhY2UgdXNpbmcgYWJvdmUgb3Bjb2RlcworICoKKyAqIFRoZSBhY3R1YWwgY2FsbCBpbnRlcmZhY2UgaXMgYSBoeXBlcnZpc29yIGNhbGwgaW5zdHJ1Y3Rpb24gd2l0aAorICogdGhlIG9wY29kZSBpbiBSMyBhbmQgaW5wdXQgYXJncyBpbiBSNC1SNy4KKyAqIFN0YXR1cyBpcyByZXR1cm5lZCBpbiBSMyB3aXRoIHZhcmlhYmxlIG91dHB1dCB2YWx1ZXMgaW4gUjQtUjExLgorICogT25seSBIX1BURV9SRUFEIHdpdGggSF9SRUFEXzQgdXNlcyBSNi1SMTEgc28gd2UgaWdub3JlIGl0IGZvciBub3cKKyAqIGFuZCByZXR1cm4gb25seSB0d28gb3V0IGFyZ3Mgd2hpY2ggTVVTVCBBTFdBWVMgQkUgUFJPVklERUQuCisgKi8KK2xvbmcgcGxwYXJfaGNhbGwodW5zaWduZWQgbG9uZyBvcGNvZGUsCisJCSB1bnNpZ25lZCBsb25nIGFyZzEsCisJCSB1bnNpZ25lZCBsb25nIGFyZzIsCisJCSB1bnNpZ25lZCBsb25nIGFyZzMsCisJCSB1bnNpZ25lZCBsb25nIGFyZzQsCisJCSB1bnNpZ25lZCBsb25nICpvdXQxLAorCQkgdW5zaWduZWQgbG9uZyAqb3V0MiwKKwkJIHVuc2lnbmVkIGxvbmcgKm91dDMpOworCisvKiBTYW1lIGFzIHBscGFyX2hjYWxsIGJ1dCBmb3IgdGhvc2Ugb3Bjb2RlcyB0aGF0IHJldHVybiBubyB2YWx1ZXMKKyAqIG90aGVyIHRoYW4gc3RhdHVzLiAgU2xpZ2h0bHkgbW9yZSBlZmZpY2llbnQuCisgKi8KK2xvbmcgcGxwYXJfaGNhbGxfbm9yZXRzKHVuc2lnbmVkIGxvbmcgb3Bjb2RlLCAuLi4pOworCisvKiAKKyAqIFNwZWNpYWwgaGNhbGwgaW50ZXJmYWNlIGZvciBpYm12ZXRoIHN1cHBvcnQuCisgKiBUYWtlcyA4IGlucHV0IHBhcm1zLiBSZXR1cm5zIGEgcmMgYW5kIHN0b3JlcyB0aGUKKyAqIFI0IHJldHVybiB2YWx1ZSBpbiAqb3V0MS4KKyAqLworbG9uZyBwbHBhcl9oY2FsbF84YXJnXzJyZXQodW5zaWduZWQgbG9uZyBvcGNvZGUsCisJCQkgICB1bnNpZ25lZCBsb25nIGFyZzEsCisJCSAgCSAgIHVuc2lnbmVkIGxvbmcgYXJnMiwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgYXJnMywKKwkJCSAgIHVuc2lnbmVkIGxvbmcgYXJnNCwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgYXJnNSwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgYXJnNiwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgYXJnNywKKwkJCSAgIHVuc2lnbmVkIGxvbmcgYXJnOCwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgKm91dDEpOworIAorLyogcGxwYXJfaGNhbGxfNG91dCgpCisgKgorICogc2FtZSBhcyBwbHBhcl9oY2FsbCBleGNlcHQgd2l0aCA0IG91dHB1dCBhcmd1bWVudHMuICAKKyAqIAorICovCitsb25nIHBscGFyX2hjYWxsXzRvdXQodW5zaWduZWQgbG9uZyBvcGNvZGUsCisJCSAgICAgIHVuc2lnbmVkIGxvbmcgYXJnMSwKKwkJICAgICAgdW5zaWduZWQgbG9uZyBhcmcyLAorCQkgICAgICB1bnNpZ25lZCBsb25nIGFyZzMsCisJCSAgICAgIHVuc2lnbmVkIGxvbmcgYXJnNCwKKwkJICAgICAgdW5zaWduZWQgbG9uZyAqb3V0MSwKKwkJICAgICAgdW5zaWduZWQgbG9uZyAqb3V0MiwKKwkJICAgICAgdW5zaWduZWQgbG9uZyAqb3V0MywKKwkJICAgICAgdW5zaWduZWQgbG9uZyAqb3V0NCk7CisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKyNlbmRpZiAvKiBfUFBDNjRfSFZDQUxMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L2h2Y29uc29sZS5oIGIvaW5jbHVkZS9hc20tcHBjNjQvaHZjb25zb2xlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg5ZDk0YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L2h2Y29uc29sZS5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBodmNvbnNvbGUuaAorICogQ29weXJpZ2h0IChDKSAyMDA0IFJ5YW4gUyBBcm5vbGQsIElCTSBDb3Jwb3JhdGlvbgorICoKKyAqIExQQVIgY29uc29sZSBzdXBwb3J0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICovCisKKyNpZm5kZWYgX1BQQzY0X0hWQ09OU09MRV9ICisjZGVmaW5lIF9QUEM2NF9IVkNPTlNPTEVfSAorCisvKgorICogVGhpcyBpcyB0aGUgbWF4IG51bWJlciBvZiBjb25zb2xlIGFkYXB0ZXJzIHRoYXQgY2FuL3dpbGwgYmUgZm91bmQgYXMKKyAqIGNvbnNvbGUgZGV2aWNlcyBvbiBmaXJzdCBzdGFnZSBjb25zb2xlIGluaXQuICBBbnkgbnVtYmVyIGJleW9uZCB0aGlzIHJhbmdlCisgKiBjYW4ndCBiZSB1c2VkIGFzIGEgY29uc29sZSBkZXZpY2UgYnV0IGlzIHN0aWxsIGEgdmFsaWQgdHR5IGRldmljZS4KKyAqLworI2RlZmluZSBNQVhfTlJfSFZDX0NPTlNPTEVTCTE2CisKK2V4dGVybiBpbnQgaHZjX2dldF9jaGFycyh1aW50MzJfdCB2dGVybW5vLCBjaGFyICpidWYsIGludCBjb3VudCk7CitleHRlcm4gaW50IGh2Y19wdXRfY2hhcnModWludDMyX3QgdnRlcm1ubywgY29uc3QgY2hhciAqYnVmLCBpbnQgY291bnQpOworCisvKiBFYXJseSBkaXNjb3Zlcnkgb2YgY29uc29sZSBhZGFwdGVycy4gKi8KK2V4dGVybiBpbnQgaHZjX2ZpbmRfdnR5cyh2b2lkKTsKKworLyogSW1wbGVtZW50ZWQgYnkgYSBjb25zb2xlIGRyaXZlciAqLworZXh0ZXJuIGludCBodmNfaW5zdGFudGlhdGUodWludDMyX3QgdnRlcm1ubywgaW50IGluZGV4KTsKKyNlbmRpZiAvKiBfUFBDNjRfSFZDT05TT0xFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L2h2Y3NlcnZlci5oIGIvaW5jbHVkZS9hc20tcHBjNjQvaHZjc2VydmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVjYmE5NgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L2h2Y3NlcnZlci5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBodmNzZXJ2ZXIuaAorICogQ29weXJpZ2h0IChDKSAyMDA0IFJ5YW4gUyBBcm5vbGQsIElCTSBDb3Jwb3JhdGlvbgorICoKKyAqIFBQQzY0IHZpcnR1YWwgSS9PIGNvbnNvbGUgc2VydmVyIHN1cHBvcnQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2lmbmRlZiBfUFBDNjRfSFZDU0VSVkVSX0gKKyNkZWZpbmUgX1BQQzY0X0hWQ1NFUlZFUl9ICisKKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisKKy8qIENvbnZlcmdlZCBMb2NhdGlvbiBDb2RlIGxlbmd0aCAqLworI2RlZmluZSBIVkNTX0NMQ19MRU5HVEgJNzkKKworLyoqCisgKiBodmNzX3BhcnRuZXJfaW5mbyAtIGFuIGVsZW1lbnQgaW4gYSBsaXN0IG9mIHBhcnRuZXIgaW5mbworICogQG5vZGU6IGxpc3RfaGVhZCBkZW5vdGluZyB0aGlzIHBhcnRuZXJfaW5mbyBzdHJ1Y3QncyBwb3NpdGlvbiBpbiB0aGUgbGlzdCBvZgorICoJcGFydG5lciBpbmZvLgorICogQHVuaXRfYWRkcmVzczogVGhlIHBhcnRuZXIgdW5pdCBhZGRyZXNzIG9mIHRoaXMgZW50cnkuCisgKiBAcGFydGl0aW9uX0lEOiBUaGUgcGFydG5lciBwYXJ0aXRpb24gSUQgb2YgdGhpcyBlbnRyeS4KKyAqIEBsb2NhdGlvbl9jb2RlOiBUaGUgY29udmVyZ2VkIGxvY2F0aW9uIGNvZGUgb2YgdGhpcyBlbnRyeSArIDEgY2hhciBmb3IgdGhlCisgKgludWxsLXRlcm0uCisgKgorICogVGhpcyBzdHJ1Y3R1cmUgb3V0bGluZXMgdGhlIGZvcm1hdCB0aGF0IHBhcnRuZXIgaW5mbyBpcyBwcmVzZW50ZWQgdG8gYSBjYWxsZXIKKyAqIG9mIHRoZSBodmNzIHBhcnRuZXIgaW5mbyBmZXRjaGluZyBmdW5jdGlvbnMuICBUaGVzZSBhcmUgc3RydW5nIHRvZ2V0aGVyIGludG8KKyAqIGEgbGlzdCB1c2luZyBsaW51eCBrZXJuZWwgbGlzdHMuCisgKi8KK3N0cnVjdCBodmNzX3BhcnRuZXJfaW5mbyB7CisJc3RydWN0IGxpc3RfaGVhZCBub2RlOworCXVpbnQzMl90IHVuaXRfYWRkcmVzczsKKwl1aW50MzJfdCBwYXJ0aXRpb25fSUQ7CisJY2hhciBsb2NhdGlvbl9jb2RlW0hWQ1NfQ0xDX0xFTkdUSCArIDFdOyAvKiBDTEMgKyAxIG51bGwtdGVybSBjaGFyICovCit9OworCitleHRlcm4gaW50IGh2Y3NfZnJlZV9wYXJ0bmVyX2luZm8oc3RydWN0IGxpc3RfaGVhZCAqaGVhZCk7CitleHRlcm4gaW50IGh2Y3NfZ2V0X3BhcnRuZXJfaW5mbyh1aW50MzJfdCB1bml0X2FkZHJlc3MsCisJCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHVuc2lnbmVkIGxvbmcgKnBpX2J1ZmYpOworZXh0ZXJuIGludCBodmNzX3JlZ2lzdGVyX2Nvbm5lY3Rpb24odWludDMyX3QgdW5pdF9hZGRyZXNzLAorCQl1aW50MzJfdCBwX3BhcnRpdGlvbl9JRCwgdWludDMyX3QgcF91bml0X2FkZHJlc3MpOworZXh0ZXJuIGludCBodmNzX2ZyZWVfY29ubmVjdGlvbih1aW50MzJfdCB1bml0X2FkZHJlc3MpOworCisjZW5kaWYgLyogX1BQQzY0X0hWQ1NFUlZFUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9od19pcnEuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L2h3X2lycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhZWE0MGUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9od19pcnEuaApAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBDb3J0IERvdWdhbiA8Y29ydEBjcy5ubXQuZWR1PgorICoKKyAqIFVzZSBpbmxpbmUgSVJRcyB3aGVyZSBwb3NzaWJsZSAtIEFudG9uIEJsYW5jaGFyZCA8YW50b25AYXUuaWJtLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisjaWZkZWYgX19LRVJORUxfXworI2lmbmRlZiBfUFBDNjRfSFdfSVJRX0gKKyNkZWZpbmUgX1BQQzY0X0hXX0lSUV9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKworaW50IHRpbWVyX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqKTsKK2V4dGVybiB2b2lkIHBwY19pcnFfZGlzcGF0Y2hfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGlycSk7CisKKyNpZmRlZiBDT05GSUdfUFBDX0lTRVJJRVMKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9jYWxfZ2V0X2ZsYWdzKHZvaWQpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9jYWxfaXJxX2Rpc2FibGUodm9pZCk7CitleHRlcm4gdm9pZCBsb2NhbF9pcnFfcmVzdG9yZSh1bnNpZ25lZCBsb25nKTsKKworI2RlZmluZSBsb2NhbF9pcnFfZW5hYmxlKCkJbG9jYWxfaXJxX3Jlc3RvcmUoMSkKKyNkZWZpbmUgbG9jYWxfc2F2ZV9mbGFncyhmbGFncykJKChmbGFncykgPSBsb2NhbF9nZXRfZmxhZ3MoKSkKKyNkZWZpbmUgbG9jYWxfaXJxX3NhdmUoZmxhZ3MpCSgoZmxhZ3MpID0gbG9jYWxfaXJxX2Rpc2FibGUoKSkKKworI2RlZmluZSBpcnFzX2Rpc2FibGVkKCkJCShsb2NhbF9nZXRfZmxhZ3MoKSA9PSAwKQorCisjZWxzZQorCisjZGVmaW5lIGxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpCSgoZmxhZ3MpID0gbWZtc3IoKSkKKyNkZWZpbmUgbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpIGRvIHsgXAorCV9fYXNtX18gX192b2xhdGlsZV9fKCIiOiA6IDoibWVtb3J5Iik7IFwKKwlfX210bXNyZCgoZmxhZ3MpLCAxKTsgXAorfSB3aGlsZSgwKQorCitzdGF0aWMgaW5saW5lIHZvaWQgbG9jYWxfaXJxX2Rpc2FibGUodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIG1zcjsKKwltc3IgPSBtZm1zcigpOworCV9fbXRtc3JkKG1zciAmIH5NU1JfRUUsIDEpOworCV9fYXNtX18gX192b2xhdGlsZV9fKCIiOiA6IDoibWVtb3J5Iik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2NhbF9pcnFfZW5hYmxlKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBtc3I7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oIiI6IDogOiJtZW1vcnkiKTsKKwltc3IgPSBtZm1zcigpOworCV9fbXRtc3JkKG1zciB8IE1TUl9FRSwgMSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2RvX3NhdmVfYW5kX2NsaSh1bnNpZ25lZCBsb25nICpmbGFncykKK3sKKwl1bnNpZ25lZCBsb25nIG1zcjsKKwltc3IgPSBtZm1zcigpOworCSpmbGFncyA9IG1zcjsKKwlfX210bXNyZChtc3IgJiB+TVNSX0VFLCAxKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygiIjogOiA6Im1lbW9yeSIpOworfQorCisjZGVmaW5lIGxvY2FsX2lycV9zYXZlKGZsYWdzKSAgICAgICAgICBfX2RvX3NhdmVfYW5kX2NsaSgmZmxhZ3MpCisKKyNkZWZpbmUgaXJxc19kaXNhYmxlZCgpCQkJCVwKKyh7CQkJCQkJXAorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CQkJXAorCWxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpOwkJXAorCSEoZmxhZ3MgJiBNU1JfRUUpOwkJCVwKK30pCisKKyNlbmRpZiAvKiBDT05GSUdfUFBDX0lTRVJJRVMgKi8KKworI2RlZmluZSBtYXNrX2lycShpcnEpCQkJCQkJXAorCSh7CQkJCQkJCVwKKwkgCWlycV9kZXNjX3QgKmRlc2MgPSBnZXRfaXJxX2Rlc2MoaXJxKTsJCVwKKwkJaWYgKGRlc2MtPmhhbmRsZXIgJiYgZGVzYy0+aGFuZGxlci0+ZGlzYWJsZSkJXAorCQkJZGVzYy0+aGFuZGxlci0+ZGlzYWJsZShpcnEpOwkJXAorCX0pCisjZGVmaW5lIHVubWFza19pcnEoaXJxKQkJCQkJCVwKKwkoewkJCQkJCQlcCisJIAlpcnFfZGVzY190ICpkZXNjID0gZ2V0X2lycV9kZXNjKGlycSk7CQlcCisJCWlmIChkZXNjLT5oYW5kbGVyICYmIGRlc2MtPmhhbmRsZXItPmVuYWJsZSkJXAorCQkJZGVzYy0+aGFuZGxlci0+ZW5hYmxlKGlycSk7CQlcCisJfSkKKyNkZWZpbmUgYWNrX2lycShpcnEpCQkJCQkJXAorCSh7CQkJCQkJCVwKKwkgCWlycV9kZXNjX3QgKmRlc2MgPSBnZXRfaXJxX2Rlc2MoaXJxKTsJCVwKKwkJaWYgKGRlc2MtPmhhbmRsZXIgJiYgZGVzYy0+aGFuZGxlci0+YWNrKQlcCisJCQlkZXNjLT5oYW5kbGVyLT5hY2soaXJxKTsJCVwKKwl9KQorCisvKiBTaG91bGQgd2UgaGFuZGxlIHRoaXMgdmlhIGxvc3QgaW50ZXJydXB0cyBhbmQgSVBJcyBvciBzaG91bGQgd2UgZG9uJ3QgY2FyZSBsaWtlCisgKiB3ZSBkbyBub3cgPyAtLUJlbkguCisgKi8KK3N0cnVjdCBod19pbnRlcnJ1cHRfdHlwZTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBod19yZXNlbmRfaXJxKHN0cnVjdCBod19pbnRlcnJ1cHRfdHlwZSAqaCwgdW5zaWduZWQgaW50IGkpIHt9CisgCisjZW5kaWYgLyogX1BQQzY0X0hXX0lSUV9IICovCisjZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvaVNlcmllcy9IdkNhbGwuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvSHZDYWxsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDlhMmU3NAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvSHZDYWxsLmgKQEAgLTAsMCArMSwyMDUgQEAKKy8qCisgKiBIdkNhbGwuaAorICogQ29weXJpZ2h0IChDKSAyMDAxICBNaWtlIENvcnJpZ2FuIElCTSBDb3Jwb3JhdGlvbgorICogCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICogCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICovCisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8JVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSAiaHlwZXJ2aXNvciBjYWxsIiBpbnRlcmZhY2Ugd2hpY2ggaXMgdXNlZCB0bworLy8JZHJpdmUgdGhlIGh5cGVydmlzb3IgZnJvbSB0aGUgT1MuCisvLworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyNpZm5kZWYgX0hWQ0FMTF9ICisjZGVmaW5lIF9IVkNBTExfSAorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFN0YW5kYXJkIEluY2x1ZGVzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyNpbmNsdWRlIDxhc20vaVNlcmllcy9IdkNhbGxTYy5oPgorI2luY2x1ZGUgPGFzbS9pU2VyaWVzL0h2VHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vcGFjYS5oPgorCisvKgorZW51bSBIdkNhbGxfUmV0dXJuQ29kZQoreworCUh2Q2FsbF9Hb29kCQk9IDAsCisJSHZDYWxsX1BhcnRpYWwJCT0gMSwKKwlIdkNhbGxfTm90T3duZWQJCT0gMiwKKwlIdkNhbGxfTm90RnJlZWQJCT0gMywKKwlIdkNhbGxfVW5zcGVjaWZpZWRFcnJvcgk9IDQKK307CisKK2VudW0gSHZDYWxsX1R5cGVPZlNJVAoreworCUh2Q2FsbF9SZWR1Y2VPbmx5CT0gMCwKKwlIdkNhbGxfVW5jb25kaXRpb25hbAk9IDEKK307CisKK2VudW0gSHZDYWxsX1R5cGVPZllpZWxkCit7CisJSHZDYWxsX1lpZWxkVGltZWQJPSAwLAkvLyBZaWVsZCB1bnRpbCBzcGVjaWZpZWQgdGltZQorCUh2Q2FsbF9ZaWVsZFRvQWN0aXZlCT0gMSwJLy8gWWllbGQgdW50aWwgYWxsIGFjdGl2ZSBwcm9jcyBoYXZlIHJ1bgorCUh2Q2FsbF9ZaWVsZFRvUHJvYwk9IDIJLy8gWWllbGQgdW50aWwgdGhlIHNwZWNpZmllZCBwcm9jZXNzb3IgaGFzIHJ1bgorfTsKKworZW51bSBIdkNhbGxfSW50ZXJydXB0TWFza3MKK3sKKwlIdkNhbGxfTWFza0lQSQkJPSAweDAwMDAwMDAxLAorCUh2Q2FsbF9NYXNrTHBFdmVudAk9IDB4MDAwMDAwMDIsCisJSHZDYWxsX01hc2tMcFByb2QJPSAweDAwMDAwMDA0LAorCUh2Q2FsbF9NYXNrVGltZW91dAk9IDB4MDAwMDAwMDgKK307CisKK2VudW0gSHZDYWxsX1ZhcnlPZmZDaHVua1JjCit7CisJSHZDYWxsX1ZhcnlPZmZTdWNjZWVkZWQJCT0gMCwKKwlIdkNhbGxfVmFyeU9mZldpdGhkcmF3bgkJPSAxLAorCUh2Q2FsbF9DaHVua0luTG9hZEFyZWEJCT0gMiwKKwlIdkNhbGxfQ2h1bmtJbkhQVAkJPSAzLAorCUh2Q2FsbF9DaHVua05vdEFjY2Vzc2libGUJPSA0LAorCUh2Q2FsbF9DaHVua0luVXNlCQk9IDUKK307CisqLworCisvKiBUeXBlIG9mIHlpZWxkIGZvciBIdkNhbGxCYXNlWWllbGRQcm9jZXNzb3IgKi8KKyNkZWZpbmUgSHZDYWxsX1lpZWxkVGltZWQgCTAJLy8gWWllbGQgdW50aWwgc3BlY2lmaWVkIHRpbWUgKHRiKQorI2RlZmluZSBIdkNhbGxfWWllbGRUb0FjdGl2ZQkxCS8vIFlpZWxkIHVudGlsIGFsbCBhY3RpdmUgcHJvY3MgaGF2ZSBydW4KKyNkZWZpbmUgSHZDYWxsX1lpZWxkVG9Qcm9jCTIJLy8gWWllbGQgdW50aWwgdGhlIHNwZWNpZmllZCBwcm9jZXNzb3IgaGFzIHJ1bgorCisvKiBpbnRlcnJ1cHQgbWFza3MgZm9yIHNldEVuYWJsZWRJbnRlcnJ1cHRzICovCisjZGVmaW5lIEh2Q2FsbF9NYXNrSVBJCQkweDAwMDAwMDAxCisjZGVmaW5lIEh2Q2FsbF9NYXNrTHBFdmVudAkweDAwMDAwMDAyCisjZGVmaW5lIEh2Q2FsbF9NYXNrTHBQcm9kCTB4MDAwMDAwMDQKKyNkZWZpbmUgSHZDYWxsX01hc2tUaW1lb3V0CTB4MDAwMDAwMDgKKworLyogTG9nIGJ1ZmZlciBmb3JtYXRzICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBIdkNhbGxfTG9nQnVmZmVyX0FTQ0lJICAgICAgICAgIDAKKyNkZWZpbmUgSHZDYWxsX0xvZ0J1ZmZlcl9FQkNESUMgICAgICAgICAxCisKKyNkZWZpbmUgSHZDYWxsQmFzZUFja0RlZmVycmVkSW50cwkJCUh2Q2FsbEJhc2UgKyAgMAorI2RlZmluZSBIdkNhbGxCYXNlQ3BtUG93ZXJPZmYJCQkJSHZDYWxsQmFzZSArICAxCisjZGVmaW5lIEh2Q2FsbEJhc2VHZXRId1BhdGNoCQkJCUh2Q2FsbEJhc2UgKyAgMgorI2RlZmluZSBIdkNhbGxCYXNlUmVJcGxTcEF0dG4JCQkJSHZDYWxsQmFzZSArICAzCisjZGVmaW5lIEh2Q2FsbEJhc2VTZXRBU1IJCQkJSHZDYWxsQmFzZSArICA0CisjZGVmaW5lIEh2Q2FsbEJhc2VTZXRBU1JBbmRSZmkJCQkJSHZDYWxsQmFzZSArICA1IAorI2RlZmluZSBIdkNhbGxCYXNlU2V0SU1SCQkJCUh2Q2FsbEJhc2UgKyAgNgorI2RlZmluZSBIdkNhbGxCYXNlU2VuZElQSQkJCQlIdkNhbGxCYXNlICsgIDcKKyNkZWZpbmUgSHZDYWxsQmFzZVRlcm1pbmF0ZU1hY2hpbmUJCQlIdkNhbGxCYXNlICsgIDgKKyNkZWZpbmUgSHZDYWxsQmFzZVRlcm1pbmF0ZU1hY2hpbmVTcmMJCQlIdkNhbGxCYXNlICsgIDkKKyNkZWZpbmUgSHZDYWxsQmFzZVByb2Nlc3NQbGljSW50ZXJydXB0cwkJCUh2Q2FsbEJhc2UgKyAxMAorI2RlZmluZSBIdkNhbGxCYXNlSXNQcmltYXJ5Q3BtT3JNc2RJcGwJCQlIdkNhbGxCYXNlICsgMTEKKyNkZWZpbmUgSHZDYWxsQmFzZVNldFZpcnR1YWxTSVQJCQkJSHZDYWxsQmFzZSArIDEyCisjZGVmaW5lIEh2Q2FsbEJhc2VWYXJ5T2ZmVGhpc1Byb2Nlc3NvcgkJCUh2Q2FsbEJhc2UgKyAxMworI2RlZmluZSBIdkNhbGxCYXNlVmFyeU9mZk1lbW9yeUNodW5rCQkJSHZDYWxsQmFzZSArIDE0CisjZGVmaW5lIEh2Q2FsbEJhc2VWYXJ5T2ZmSW50ZXJhY3RpdmVQZXJjZW50YWdlCQlIdkNhbGxCYXNlICsgMTUKKyNkZWZpbmUgSHZDYWxsQmFzZVNlbmRMcFByb2QJCQkJSHZDYWxsQmFzZSArIDE2CisjZGVmaW5lIEh2Q2FsbEJhc2VTZXRFbmFibGVkSW50ZXJydXB0cwkJCUh2Q2FsbEJhc2UgKyAxNworI2RlZmluZSBIdkNhbGxCYXNlWWllbGRQcm9jZXNzb3IJCQlIdkNhbGxCYXNlICsgMTgKKyNkZWZpbmUgSHZDYWxsQmFzZVZhcnlPZmZTaGFyZWRQcm9jVW5pdHMJCUh2Q2FsbEJhc2UgKyAxOQorI2RlZmluZSBIdkNhbGxCYXNlU2V0VmlydHVhbERlY3IJCQlIdkNhbGxCYXNlICsgMjAKKyNkZWZpbmUgSHZDYWxsQmFzZUNsZWFyTG9nQnVmZmVyCQkJSHZDYWxsQmFzZSArIDIxCisjZGVmaW5lIEh2Q2FsbEJhc2VHZXRMb2dCdWZmZXJDb2RlUGFnZQkJCUh2Q2FsbEJhc2UgKyAyMgorI2RlZmluZSBIdkNhbGxCYXNlR2V0TG9nQnVmZmVyRm9ybWF0CQkJSHZDYWxsQmFzZSArIDIzCisjZGVmaW5lIEh2Q2FsbEJhc2VHZXRMb2dCdWZmZXJMZW5ndGgJCQlIdkNhbGxCYXNlICsgMjQKKyNkZWZpbmUgSHZDYWxsQmFzZVJlYWRMb2dCdWZmZXIgCQkJSHZDYWxsQmFzZSArIDI1CisjZGVmaW5lIEh2Q2FsbEJhc2VTZXRMb2dCdWZmZXJGb3JtYXRBbmRDb2RlUGFnZQkJSHZDYWxsQmFzZSArIDI2CisjZGVmaW5lIEh2Q2FsbEJhc2VXcml0ZUxvZ0J1ZmZlciAgICAgICAgICAgICAgIAkJSHZDYWxsQmFzZSArIDI3CisjZGVmaW5lIEh2Q2FsbEJhc2VSb3V0ZXIyOAkJCQlIdkNhbGxCYXNlICsgMjgKKyNkZWZpbmUgSHZDYWxsQmFzZVJvdXRlcjI5CQkJCUh2Q2FsbEJhc2UgKyAyOQorI2RlZmluZSBIdkNhbGxCYXNlUm91dGVyMzAJCQkJSHZDYWxsQmFzZSArIDMwCisjZGVmaW5lIEh2Q2FsbEJhc2VTZXREZWJ1Z0J1cyAJCQkJSHZDYWxsQmFzZSArIDMxCisKKyNkZWZpbmUgSHZDYWxsQ2NTZXREQUJSICAJCQkJSHZDYWxsQ2MgKyA3CisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorc3RhdGljIGlubGluZSB2b2lkCQlIdkNhbGxfc2V0VmlydHVhbERlY3Iodm9pZCkKK3sKKwkvKiBJZ25vcmUgYW55IGVycm9yIHJldHVybiBjb2RlcyAtIG1vc3QgbGlrZWx5IG1lYW5zIHRoYXQgdGhlIHRhcmdldCB2YWx1ZSBmb3IgdGhlCisJICogTFAgaGFzIGJlZW4gaW5jcmVhc2VkIGFuZCB0aGlzIHZhcnkgb2ZmIHdvdWxkIGJyaW5nIHVzIGJlbG93IHRoZSBuZXcgdGFyZ2V0LiAqLworCUh2Q2FsbDAoSHZDYWxsQmFzZVNldFZpcnR1YWxEZWNyKTsKK30KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitzdGF0aWMgaW5saW5lIHZvaWQJCUh2Q2FsbF95aWVsZFByb2Nlc3Nvcih1bnNpZ25lZCB0eXBlT2ZZaWVsZCwgdTY0IHlpZWxkUGFybSkKK3sKKwlIdkNhbGwyKCBIdkNhbGxCYXNlWWllbGRQcm9jZXNzb3IsIHR5cGVPZllpZWxkLCB5aWVsZFBhcm0gKTsKK30KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitzdGF0aWMgaW5saW5lIHZvaWQJCUh2Q2FsbF9zZXRFbmFibGVkSW50ZXJydXB0cyh1NjQgZW5hYmxlZEludGVycnVwdHMpCit7CisJSHZDYWxsMShIdkNhbGxCYXNlU2V0RW5hYmxlZEludGVycnVwdHMsZW5hYmxlZEludGVycnVwdHMpOworfQorCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorc3RhdGljIGlubGluZSB2b2lkCQlIdkNhbGxfY2xlYXJMb2dCdWZmZXIoSHZMcEluZGV4IGxwaW5kZXgpCit7CisJSHZDYWxsMShIdkNhbGxCYXNlQ2xlYXJMb2dCdWZmZXIsbHBpbmRleCk7Cit9CisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitzdGF0aWMgaW5saW5lIHUzMiAgCQlIdkNhbGxfZ2V0TG9nQnVmZmVyQ29kZVBhZ2UoSHZMcEluZGV4IGxwaW5kZXgpCit7CisJdTMyIHJldFZhbCA9IEh2Q2FsbDEoSHZDYWxsQmFzZUdldExvZ0J1ZmZlckNvZGVQYWdlLGxwaW5kZXgpOworCXJldHVybiByZXRWYWw7Cit9CisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitzdGF0aWMgaW5saW5lIGludCAgCQlIdkNhbGxfZ2V0TG9nQnVmZmVyRm9ybWF0KEh2THBJbmRleCBscGluZGV4KQoreworCWludCByZXRWYWwgPSBIdkNhbGwxKEh2Q2FsbEJhc2VHZXRMb2dCdWZmZXJGb3JtYXQsbHBpbmRleCk7CisJcmV0dXJuIHJldFZhbDsKK30KKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3N0YXRpYyBpbmxpbmUgdTMyICAJCUh2Q2FsbF9nZXRMb2dCdWZmZXJMZW5ndGgoSHZMcEluZGV4IGxwaW5kZXgpCit7CisJdTMyIHJldFZhbCA9IEh2Q2FsbDEoSHZDYWxsQmFzZUdldExvZ0J1ZmZlckxlbmd0aCxscGluZGV4KTsKKwlyZXR1cm4gcmV0VmFsOworfQorCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorc3RhdGljIGlubGluZSB2b2lkICAJCUh2Q2FsbF9zZXRMb2dCdWZmZXJGb3JtYXRBbmRDb2RlcGFnZShpbnQgZm9ybWF0LCB1MzIgY29kZVBhZ2UpCit7CisJSHZDYWxsMihIdkNhbGxCYXNlU2V0TG9nQnVmZmVyRm9ybWF0QW5kQ29kZVBhZ2UsZm9ybWF0LCBjb2RlUGFnZSk7Cit9CisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitpbnQgSHZDYWxsX3JlYWRMb2dCdWZmZXIoSHZMcEluZGV4IGxwaW5kZXgsIHZvaWQgKmJ1ZmZlciwgdTY0IGJ1Zkxlbik7Cit2b2lkIEh2Q2FsbF93cml0ZUxvZ0J1ZmZlcihjb25zdCB2b2lkICpidWZmZXIsIHU2NCBidWZMZW4pOworCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorc3RhdGljIGlubGluZSB2b2lkCQlIdkNhbGxfc2VuZElQSShzdHJ1Y3QgcGFjYV9zdHJ1Y3QgKiB0YXJnZXRQYWNhKQoreworCUh2Q2FsbDEoIEh2Q2FsbEJhc2VTZW5kSVBJLCB0YXJnZXRQYWNhLT5wYWNhX2luZGV4ICk7Cit9CisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitzdGF0aWMgaW5saW5lIHZvaWQJCUh2Q2FsbF90ZXJtaW5hdGVNYWNoaW5lU3JjKHZvaWQpCit7CisJSHZDYWxsMCggSHZDYWxsQmFzZVRlcm1pbmF0ZU1hY2hpbmVTcmMgKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIEh2Q2FsbF9zZXREQUJSKHVuc2lnbmVkIGxvbmcgdmFsKQoreworCUh2Q2FsbDEoSHZDYWxsQ2NTZXREQUJSLCB2YWwpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgSHZDYWxsX3NldERlYnVnQnVzKHVuc2lnbmVkIGxvbmcgdmFsKQoreworCUh2Q2FsbDEoSHZDYWxsQmFzZVNldERlYnVnQnVzLCB2YWwpOworfQorCisjZW5kaWYgLyogX0hWQ0FMTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL0h2Q2FsbENmZy5oIGIvaW5jbHVkZS9hc20tcHBjNjQvaVNlcmllcy9IdkNhbGxDZmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjQwZjE2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvaVNlcmllcy9IdkNhbGxDZmcuaApAQCAtMCwwICsxLDIxMyBAQAorLyoKKyAqIEh2Q2FsbENmZy5oCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgIE1pa2UgQ29ycmlnYW4gSUJNIENvcnBvcmF0aW9uCisgKiAKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiAKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKiAKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKi8KKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8JVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSAiaHlwZXJ2aXNvciBjYWxsIiBpbnRlcmZhY2Ugd2hpY2ggaXMgdXNlZCB0bworLy8JZHJpdmUgdGhlIGh5cGVydmlzb3IgZnJvbSB0aGUgT1MuCisvLworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjaWZuZGVmIF9IVkNBTExDRkdfSAorI2RlZmluZSBfSFZDQUxMQ0ZHX0gKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBTdGFuZGFyZCBJbmNsdWRlcworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjaW5jbHVkZSA8YXNtL2lTZXJpZXMvSHZDYWxsU2MuaD4KKyNpbmNsdWRlIDxhc20vaVNlcmllcy9IdlR5cGVzLmg+CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gQ29uc3RhbnRzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZW51bSBIdkNhbGxDZmdfUmVxUXVhbAoreworCUh2Q2FsbENmZ19DdXIJPSAwLAorCUh2Q2FsbENmZ19Jbml0CT0gMSwKKwlIdkNhbGxDZmdfTWF4CT0gMiwKKwlIdkNhbGxDZmdfTWluCT0gMworfTsKKworI2RlZmluZSBIdkNhbGxDZmdHZXRMcHMJCQkJCUh2Q2FsbENmZyArICAwCisjZGVmaW5lIEh2Q2FsbENmZ0dldEFjdGl2ZUxwTWFwCQkJCUh2Q2FsbENmZyArICAxCisjZGVmaW5lIEh2Q2FsbENmZ0dldExwVnJtSW5kZXgJCQkJSHZDYWxsQ2ZnICsgIDIKKyNkZWZpbmUgSHZDYWxsQ2ZnR2V0THBNaW5TdXBwb3J0ZWRQbGljVnJtSW5kZXgJCUh2Q2FsbENmZyArICAzCisjZGVmaW5lIEh2Q2FsbENmZ0dldExwTWluQ29tcGF0YWJsZVBsaWNWcm1JbmRleAkJSHZDYWxsQ2ZnICsgIDQKKyNkZWZpbmUgSHZDYWxsQ2ZnR2V0THBWcm1OYW1lCQkJCUh2Q2FsbENmZyArICA1IAorI2RlZmluZSBIdkNhbGxDZmdHZXRTeXN0ZW1QaHlzaWNhbFByb2Nlc3NvcnMJCUh2Q2FsbENmZyArICA2CisjZGVmaW5lIEh2Q2FsbENmZ0dldFBoeXNpY2FsUHJvY2Vzc29ycwkJCUh2Q2FsbENmZyArICA3CisjZGVmaW5lIEh2Q2FsbENmZ0dldFN5c3RlbU1zQ2h1bmtzCQkJSHZDYWxsQ2ZnICsgIDgKKyNkZWZpbmUgSHZDYWxsQ2ZnR2V0TXNDaHVua3MJCQkJSHZDYWxsQ2ZnICsgIDkKKyNkZWZpbmUgSHZDYWxsQ2ZnR2V0SW50ZXJhY3RpdmVQZXJjZW50YWdlCQlIdkNhbGxDZmcgKyAxMAorI2RlZmluZSBIdkNhbGxDZmdJc0J1c0RlZGljYXRlZAkJCQlIdkNhbGxDZmcgKyAxMQorI2RlZmluZSBIdkNhbGxDZmdHZXRCdXNPd25lcgkJCQlIdkNhbGxDZmcgKyAxMgorI2RlZmluZSBIdkNhbGxDZmdHZXRCdXNBbGxvY2F0aW9uCQkJSHZDYWxsQ2ZnICsgMTMKKyNkZWZpbmUgSHZDYWxsQ2ZnR2V0QnVzVW5pdE93bmVyCQkJSHZDYWxsQ2ZnICsgMTQKKyNkZWZpbmUgSHZDYWxsQ2ZnR2V0QnVzVW5pdEFsbG9jYXRpb24JCQlIdkNhbGxDZmcgKyAxNQorI2RlZmluZSBIdkNhbGxDZmdHZXRWaXJ0dWFsQnVzUG9vbAkJCUh2Q2FsbENmZyArIDE2CisjZGVmaW5lIEh2Q2FsbENmZ0dldEJ1c1VuaXRJbnRlcnJ1cHRQcm9jCQlIdkNhbGxDZmcgKyAxNworI2RlZmluZSBIdkNhbGxDZmdHZXRDb25maWd1cmVkQnVzVW5pdHNGb3JJbnRQcm9jCUh2Q2FsbENmZyArIDE4CisjZGVmaW5lIEh2Q2FsbENmZ0dldFJpb1NhbkJ1c1Bvb2wJCQlIdkNhbGxDZmcgKyAxOQorI2RlZmluZSBIdkNhbGxDZmdHZXRTaGFyZWRQb29sSW5kZXgJCQlIdkNhbGxDZmcgKyAyMAorI2RlZmluZSBIdkNhbGxDZmdHZXRTaGFyZWRQcm9jVW5pdHMJCQlIdkNhbGxDZmcgKyAyMQorI2RlZmluZSBIdkNhbGxDZmdHZXROdW1Qcm9jc0luU2hhcmVkUG9vbAkJSHZDYWxsQ2ZnICsgMjIKKyNkZWZpbmUgSHZDYWxsQ2ZnUm91dGVyMjMJCQkJSHZDYWxsQ2ZnICsgMjMKKyNkZWZpbmUgSHZDYWxsQ2ZnUm91dGVyMjQJCQkJSHZDYWxsQ2ZnICsgMjQKKyNkZWZpbmUgSHZDYWxsQ2ZnUm91dGVyMjUJCQkJSHZDYWxsQ2ZnICsgMjUKKyNkZWZpbmUgSHZDYWxsQ2ZnUm91dGVyMjYJCQkJSHZDYWxsQ2ZnICsgMjYKKyNkZWZpbmUgSHZDYWxsQ2ZnUm91dGVyMjcJCQkJSHZDYWxsQ2ZnICsgMjcKKyNkZWZpbmUgSHZDYWxsQ2ZnR2V0TWluUnVudGltZU1zQ2h1bmtzCQkJSHZDYWxsQ2ZnICsgMjgKKyNkZWZpbmUgSHZDYWxsQ2ZnU2V0TWluUnVudGltZU1zQ2h1bmtzCQkJSHZDYWxsQ2ZnICsgMjkKKyNkZWZpbmUgSHZDYWxsQ2ZnR2V0VmlydHVhbExhbkluZGV4TWFwCQkJSHZDYWxsQ2ZnICsgMzAKKyNkZWZpbmUgSHZDYWxsQ2ZnR2V0THBFeGVjdXRpb25Nb2RlCQkJSHZDYWxsQ2ZnICsgMzEKKyNkZWZpbmUgSHZDYWxsQ2ZnR2V0SG9zdGluZ0xwSW5kZXggCQkJSHZDYWxsQ2ZnICsgMzIKKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorc3RhdGljIGlubGluZSBIdkxwSW5kZXgJSHZDYWxsQ2ZnX2dldExwcyh2b2lkKQoreworCUh2THBJbmRleCByZXRWYWwgPSBIdkNhbGwwKEh2Q2FsbENmZ0dldExwcyk7CisJLy8gZ2V0UGFjYSgpLT5hZGp1c3RIbXRGb3JOb09mU3BpbkxvY2tzSGVsZCgpOworCXJldHVybiByZXRWYWw7Cit9CisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitzdGF0aWMgaW5saW5lIGludAkJSHZDYWxsQ2ZnX2lzQnVzRGVkaWNhdGVkKHU2NCBidXNJbmRleCkKK3sKKwlpbnQgcmV0VmFsID0gSHZDYWxsMShIdkNhbGxDZmdJc0J1c0RlZGljYXRlZCxidXNJbmRleCk7CisJLy8gZ2V0UGFjYSgpLT5hZGp1c3RIbXRGb3JOb09mU3BpbkxvY2tzSGVsZCgpOworCXJldHVybiByZXRWYWw7Cit9CisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitzdGF0aWMgaW5saW5lIEh2THBJbmRleAlIdkNhbGxDZmdfZ2V0QnVzT3duZXIodTY0IGJ1c0luZGV4KQoreworCUh2THBJbmRleCByZXRWYWwgPSBIdkNhbGwxKEh2Q2FsbENmZ0dldEJ1c093bmVyLGJ1c0luZGV4KTsKKwkvLyBnZXRQYWNhKCktPmFkanVzdEhtdEZvck5vT2ZTcGluTG9ja3NIZWxkKCk7CisJcmV0dXJuIHJldFZhbDsKK30KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3N0YXRpYyBpbmxpbmUgSHZMcEluZGV4TWFwCUh2Q2FsbENmZ19nZXRCdXNBbGxvY2F0aW9uKHU2NCBidXNJbmRleCkKK3sKKwlIdkxwSW5kZXhNYXAgcmV0VmFsID0gSHZDYWxsMShIdkNhbGxDZmdHZXRCdXNBbGxvY2F0aW9uLGJ1c0luZGV4KTsKKwkvLyBnZXRQYWNhKCktPmFkanVzdEhtdEZvck5vT2ZTcGluTG9ja3NIZWxkKCk7CisJcmV0dXJuIHJldFZhbDsKK30KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3N0YXRpYyBpbmxpbmUgSHZMcEluZGV4TWFwCUh2Q2FsbENmZ19nZXRBY3RpdmVMcE1hcCh2b2lkKQoreworCUh2THBJbmRleE1hcCByZXRWYWwgPSBIdkNhbGwwKEh2Q2FsbENmZ0dldEFjdGl2ZUxwTWFwKTsKKwkvLyBnZXRQYWNhKCktPmFkanVzdEhtdEZvck5vT2ZTcGluTG9ja3NIZWxkKCk7CisJcmV0dXJuIHJldFZhbDsKK30KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3N0YXRpYyBpbmxpbmUgSHZMcFZpcnR1YWxMYW5JbmRleE1hcAlIdkNhbGxDZmdfZ2V0VmlydHVhbExhbkluZGV4TWFwKEh2THBJbmRleCBscCkKK3sKKwkvLyBUaGlzIGlzIGEgbmV3IGZ1bmN0aW9uIGluIFY1UjEgc28gY2FsbHMgdG8gdGhpcyBvbiBvbGRlciAKKwkvLyBoeXBlcnZpc29ycyB3aWxsIHJldHVybiAtMQorCXU2NCByZXRWYWwgPSBIdkNhbGwxKEh2Q2FsbENmZ0dldFZpcnR1YWxMYW5JbmRleE1hcCwgbHApOworCWlmKHJldFZhbCA9PSAtMSkKKwkJcmV0VmFsID0gMDsKKwkvLyBnZXRQYWNhKCktPmFkanVzdEhtdEZvck5vT2ZTcGluTG9ja3NIZWxkKCk7CisJcmV0dXJuIHJldFZhbDsKK30KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorc3RhdGljIGlubGluZSB1NjQJCUh2Q2FsbENmZ19nZXRTeXN0ZW1Nc0NodW5rcyh2b2lkKQoreworCXU2NCByZXRWYWwgPSBIdkNhbGwwKEh2Q2FsbENmZ0dldFN5c3RlbU1zQ2h1bmtzKTsKKwkvLyBnZXRQYWNhKCktPmFkanVzdEhtdEZvck5vT2ZTcGluTG9ja3NIZWxkKCk7CisJcmV0dXJuIHJldFZhbDsKK30KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorc3RhdGljIGlubGluZSB1NjQJCUh2Q2FsbENmZ19nZXRNc0NodW5rcyhIdkxwSW5kZXggbHAsZW51bSBIdkNhbGxDZmdfUmVxUXVhbCBxdWFsKQoreworCXU2NCByZXRWYWwgPSBIdkNhbGwyKEh2Q2FsbENmZ0dldE1zQ2h1bmtzLGxwLHF1YWwpOworCS8vIGdldFBhY2EoKS0+YWRqdXN0SG10Rm9yTm9PZlNwaW5Mb2Nrc0hlbGQoKTsKKwlyZXR1cm4gcmV0VmFsOworfQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitzdGF0aWMgaW5saW5lIHU2NAkJSHZDYWxsQ2ZnX2dldE1pblJ1bnRpbWVNc0NodW5rcyhIdkxwSW5kZXggbHApCit7CisJLy8gTk9URTogVGhpcyBmdW5jdGlvbiB3YXMgYWRkZWQgaW4gdjVyMSBzbyBvbGRlciBoeXBlcnZpc29ycyB3aWxsIHJldHVybiBhIC0xIHZhbHVlCisJdTY0IHJldFZhbCA9IEh2Q2FsbDEoSHZDYWxsQ2ZnR2V0TWluUnVudGltZU1zQ2h1bmtzLGxwKTsKKwkvLyBnZXRQYWNhKCktPmFkanVzdEhtdEZvck5vT2ZTcGluTG9ja3NIZWxkKCk7CisJcmV0dXJuIHJldFZhbDsKK30KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorc3RhdGljIGlubGluZSB1NjQJCUh2Q2FsbENmZ19zZXRNaW5SdW50aW1lTXNDaHVua3ModTY0IGNodW5rcykKK3sKKwl1NjQgcmV0VmFsID0gSHZDYWxsMShIdkNhbGxDZmdTZXRNaW5SdW50aW1lTXNDaHVua3MsY2h1bmtzKTsKKwkvLyBnZXRQYWNhKCktPmFkanVzdEhtdEZvck5vT2ZTcGluTG9ja3NIZWxkKCk7CisJcmV0dXJuIHJldFZhbDsKK30KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorc3RhdGljIGlubGluZSB1NjQJCUh2Q2FsbENmZ19nZXRTeXN0ZW1QaHlzaWNhbFByb2Nlc3NvcnModm9pZCkKK3sKKwl1NjQgcmV0VmFsID0gSHZDYWxsMChIdkNhbGxDZmdHZXRTeXN0ZW1QaHlzaWNhbFByb2Nlc3NvcnMpOworCS8vIGdldFBhY2EoKS0+YWRqdXN0SG10Rm9yTm9PZlNwaW5Mb2Nrc0hlbGQoKTsKKwlyZXR1cm4gcmV0VmFsOworfQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitzdGF0aWMgaW5saW5lIHU2NAkJSHZDYWxsQ2ZnX2dldFBoeXNpY2FsUHJvY2Vzc29ycyhIdkxwSW5kZXggbHAsZW51bSBIdkNhbGxDZmdfUmVxUXVhbCBxdWFsKQoreworCXU2NCByZXRWYWwgPSBIdkNhbGwyKEh2Q2FsbENmZ0dldFBoeXNpY2FsUHJvY2Vzc29ycyxscCxxdWFsKTsKKwkvLyBnZXRQYWNhKCktPmFkanVzdEhtdEZvck5vT2ZTcGluTG9ja3NIZWxkKCk7CisJcmV0dXJuIHJldFZhbDsKK30KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorc3RhdGljIGlubGluZSB1NjQJCUh2Q2FsbENmZ19nZXRDb25maWd1cmVkQnVzVW5pdHNGb3JJbnRlcnJ1cHRQcm9jKEh2THBJbmRleCBscCwKKwkJCQkJCQkJCQl1MTYgaHZMb2dpY2FsUHJvY0luZGV4KQoreworCXU2NCByZXRWYWwgPSBIdkNhbGwyKEh2Q2FsbENmZ0dldENvbmZpZ3VyZWRCdXNVbml0c0ZvckludFByb2MsbHAsaHZMb2dpY2FsUHJvY0luZGV4KTsKKwkvLyBnZXRQYWNhKCktPmFkanVzdEhtdEZvck5vT2ZTcGluTG9ja3NIZWxkKCk7CisJcmV0dXJuIHJldFZhbDsKKworfQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3N0YXRpYyBpbmxpbmUgSHZMcFNoYXJlZFBvb2xJbmRleAlIdkNhbGxDZmdfZ2V0U2hhcmVkUG9vbEluZGV4KEh2THBJbmRleCBscCkKK3sKKwlIdkxwU2hhcmVkUG9vbEluZGV4IHJldFZhbCA9CisJCUh2Q2FsbDEoSHZDYWxsQ2ZnR2V0U2hhcmVkUG9vbEluZGV4LGxwKTsKKwkvLyBnZXRQYWNhKCktPmFkanVzdEhtdEZvck5vT2ZTcGluTG9ja3NIZWxkKCk7CisJcmV0dXJuIHJldFZhbDsKKworfQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3N0YXRpYyBpbmxpbmUgdTY0CUh2Q2FsbENmZ19nZXRTaGFyZWRQcm9jVW5pdHMoSHZMcEluZGV4IGxwLGVudW0gSHZDYWxsQ2ZnX1JlcVF1YWwgcXVhbCkKK3sKKwl1NjQgcmV0VmFsID0gSHZDYWxsMihIdkNhbGxDZmdHZXRTaGFyZWRQcm9jVW5pdHMsbHAscXVhbCk7CisJLy8gZ2V0UGFjYSgpLT5hZGp1c3RIbXRGb3JOb09mU3BpbkxvY2tzSGVsZCgpOworCXJldHVybiByZXRWYWw7CisKK30KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitzdGF0aWMgaW5saW5lIHU2NAlIdkNhbGxDZmdfZ2V0TnVtUHJvY3NJblNoYXJlZFBvb2woSHZMcFNoYXJlZFBvb2xJbmRleCBzUEkpCit7CisJdTE2IHJldFZhbCA9IEh2Q2FsbDEoSHZDYWxsQ2ZnR2V0TnVtUHJvY3NJblNoYXJlZFBvb2wsc1BJKTsKKwkvLyBnZXRQYWNhKCktPmFkanVzdEhtdEZvck5vT2ZTcGluTG9ja3NIZWxkKCk7CisJcmV0dXJuIHJldFZhbDsKKworfQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3N0YXRpYyBpbmxpbmUgSHZMcEluZGV4CUh2Q2FsbENmZ19nZXRIb3N0aW5nTHBJbmRleChIdkxwSW5kZXggbHApCit7CisJdTY0IHJldFZhbCA9IEh2Q2FsbDEoSHZDYWxsQ2ZnR2V0SG9zdGluZ0xwSW5kZXgsbHApOworCS8vIGdldFBhY2EoKS0+YWRqdXN0SG10Rm9yTm9PZlNwaW5Mb2Nrc0hlbGQoKTsKKwlyZXR1cm4gcmV0VmFsOworCit9CisKKyNlbmRpZiAvKiBfSFZDQUxMQ0ZHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvSHZDYWxsRXZlbnQuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvSHZDYWxsRXZlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTFkZGNlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvaVNlcmllcy9IdkNhbGxFdmVudC5oCkBAIC0wLDAgKzEsMjk3IEBACisvKgorICogSHZDYWxsRXZlbnQuaAorICogQ29weXJpZ2h0IChDKSAyMDAxICBNaWtlIENvcnJpZ2FuIElCTSBDb3Jwb3JhdGlvbgorICogCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICogCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICovCisKKy8qCisgKglUaGlzIGZpbGUgY29udGFpbnMgdGhlICJoeXBlcnZpc29yIGNhbGwiIGludGVyZmFjZSB3aGljaCBpcyB1c2VkIHRvCisgKglkcml2ZSB0aGUgaHlwZXJ2aXNvciBmcm9tIHRoZSBPUy4KKyAqLworI2lmbmRlZiBfSFZDQUxMRVZFTlRfSAorI2RlZmluZSBfSFZDQUxMRVZFTlRfSAorCisvKgorICogU3RhbmRhcmQgSW5jbHVkZXMKKyAqLworI2luY2x1ZGUgPGFzbS9pU2VyaWVzL0h2Q2FsbFNjLmg+CisjaW5jbHVkZSA8YXNtL2lTZXJpZXMvSHZUeXBlcy5oPgorI2luY2x1ZGUgPGFzbS9hYnNfYWRkci5oPgorCitzdHJ1Y3QgSHZMcEV2ZW50OworCit0eXBlZGVmIHU4IEh2THBFdmVudF9UeXBlOwordHlwZWRlZiB1OCBIdkxwRXZlbnRfQWNrSW5kOwordHlwZWRlZiB1OCBIdkxwRXZlbnRfQWNrVHlwZTsKKworc3RydWN0CUh2Q2FsbEV2ZW50X1BhY2tlZFBhcm1zIHsKKwl1OAkJeEFja1R5cGU6MTsKKwl1OAkJeEFja0luZDoxOworCXU4CQl4UnN2ZDoxOworCXU4CQl4VGFyZ2V0THA6NTsKKwl1OAkJeFR5cGU7CisJdTE2CQl4U3VidHlwZTsKKwlIdkxwSW5zdGFuY2VJZAl4U291cmNlSW5zdElkOworCUh2THBJbnN0YW5jZUlkCXhUYXJnZXRJbnN0SWQ7Cit9OworCit0eXBlZGVmIHU4IEh2THBEbWFfRGlyZWN0aW9uOwordHlwZWRlZiB1OCBIdkxwRG1hX0FkZHJlc3NUeXBlOworCitzdHJ1Y3QJSHZDYWxsRXZlbnRfUGFja2VkRG1hUGFybXMgeworCXU4CQl4RGlyZWN0aW9uOjE7CisJdTgJCXhMb2NhbEFkZHJUeXBlOjE7CisJdTgJCXhSZW1vdGVBZGRyVHlwZToxOworCXU4CQl4UnN2ZDE6NTsKKwlIdkxwSW5kZXgJeFJlbW90ZUxwOworCXU4CQl4VHlwZTsKKwl1OAkJeFJzdmQyOworCUh2THBJbnN0YW5jZUlkCXhMb2NhbEluc3RJZDsKKwlIdkxwSW5zdGFuY2VJZAl4UmVtb3RlSW5zdElkOworfTsKKwordHlwZWRlZiB1NjQgSHZMcEV2ZW50X1JjOwordHlwZWRlZiB1NjQgSHZMcERtYV9SYzsKKworI2RlZmluZSBIdkNhbGxFdmVudEFja0xwRXZlbnQJCQkJSHZDYWxsRXZlbnQgKyAgMAorI2RlZmluZSBIdkNhbGxFdmVudENhbmNlbExwRXZlbnQJCQlIdkNhbGxFdmVudCArICAxCisjZGVmaW5lIEh2Q2FsbEV2ZW50Q2xvc2VMcEV2ZW50UGF0aAkJCUh2Q2FsbEV2ZW50ICsgIDIKKyNkZWZpbmUgSHZDYWxsRXZlbnREbWFCdWZMaXN0CQkJCUh2Q2FsbEV2ZW50ICsgIDMKKyNkZWZpbmUgSHZDYWxsRXZlbnREbWFTaW5nbGUJCQkJSHZDYWxsRXZlbnQgKyAgNAorI2RlZmluZSBIdkNhbGxFdmVudERtYVRvU3AJCQkJSHZDYWxsRXZlbnQgKyAgNSAKKyNkZWZpbmUgSHZDYWxsRXZlbnRHZXRPdmVyZmxvd0xwRXZlbnRzCQkJSHZDYWxsRXZlbnQgKyAgNgorI2RlZmluZSBIdkNhbGxFdmVudEdldFNvdXJjZUxwSW5zdGFuY2VJZAkJSHZDYWxsRXZlbnQgKyAgNworI2RlZmluZSBIdkNhbGxFdmVudEdldFRhcmdldExwSW5zdGFuY2VJZAkJSHZDYWxsRXZlbnQgKyAgOAorI2RlZmluZSBIdkNhbGxFdmVudE9wZW5McEV2ZW50UGF0aAkJCUh2Q2FsbEV2ZW50ICsgIDkKKyNkZWZpbmUgSHZDYWxsRXZlbnRTZXRMcEV2ZW50U3RhY2sJCQlIdkNhbGxFdmVudCArIDEwCisjZGVmaW5lIEh2Q2FsbEV2ZW50U2lnbmFsTHBFdmVudAkJCUh2Q2FsbEV2ZW50ICsgMTEKKyNkZWZpbmUgSHZDYWxsRXZlbnRTaWduYWxMcEV2ZW50UGFybXMJCQlIdkNhbGxFdmVudCArIDEyCisjZGVmaW5lIEh2Q2FsbEV2ZW50U2V0SW50ZXJMcFF1ZXVlSW5kZXgJCQlIdkNhbGxFdmVudCArIDEzCisjZGVmaW5lIEh2Q2FsbEV2ZW50U2V0THBFdmVudFF1ZXVlSW50ZXJydXB0UHJvYwkJSHZDYWxsRXZlbnQgKyAxNAorI2RlZmluZSBIdkNhbGxFdmVudFJvdXRlcjE1CQkJCUh2Q2FsbEV2ZW50ICsgMTUKKworc3RhdGljIGlubGluZSB2b2lkIEh2Q2FsbEV2ZW50X2dldE92ZXJmbG93THBFdmVudHModTggcXVldWVJbmRleCkKK3sKKwlIdkNhbGwxKEh2Q2FsbEV2ZW50R2V0T3ZlcmZsb3dMcEV2ZW50cyxxdWV1ZUluZGV4KTsKKwkvLyBnZXRQYWNhKCktPmFkanVzdEhtdEZvck5vT2ZTcGluTG9ja3NIZWxkKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBIdkNhbGxFdmVudF9zZXRJbnRlckxwUXVldWVJbmRleCh1OCBxdWV1ZUluZGV4KQoreworCUh2Q2FsbDEoSHZDYWxsRXZlbnRTZXRJbnRlckxwUXVldWVJbmRleCxxdWV1ZUluZGV4KTsKKwkvLyBnZXRQYWNhKCktPmFkanVzdEhtdEZvck5vT2ZTcGluTG9ja3NIZWxkKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBIdkNhbGxFdmVudF9zZXRMcEV2ZW50U3RhY2sodTggcXVldWVJbmRleCwKKwkJY2hhciAqZXZlbnRTdGFja0FkZHIsIHUzMiBldmVudFN0YWNrU2l6ZSkKK3sKKwl1NjQgYWJzX2FkZHI7CisKKwlhYnNfYWRkciA9IHZpcnRfdG9fYWJzKGV2ZW50U3RhY2tBZGRyKTsKKwlIdkNhbGwzKEh2Q2FsbEV2ZW50U2V0THBFdmVudFN0YWNrLCBxdWV1ZUluZGV4LCBhYnNfYWRkciwKKwkJCWV2ZW50U3RhY2tTaXplKTsKKwkvLyBnZXRQYWNhKCktPmFkanVzdEhtdEZvck5vT2ZTcGluTG9ja3NIZWxkKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBIdkNhbGxFdmVudF9zZXRMcEV2ZW50UXVldWVJbnRlcnJ1cHRQcm9jKHU4IHF1ZXVlSW5kZXgsCisJCXUxNiBscExvZ2ljYWxQcm9jSW5kZXgpCit7CisJSHZDYWxsMihIdkNhbGxFdmVudFNldExwRXZlbnRRdWV1ZUludGVycnVwdFByb2MsIHF1ZXVlSW5kZXgsCisJCQlscExvZ2ljYWxQcm9jSW5kZXgpOworCS8vIGdldFBhY2EoKS0+YWRqdXN0SG10Rm9yTm9PZlNwaW5Mb2Nrc0hlbGQoKTsKK30KKworc3RhdGljIGlubGluZSBIdkxwRXZlbnRfUmMgSHZDYWxsRXZlbnRfc2lnbmFsTHBFdmVudChzdHJ1Y3QgSHZMcEV2ZW50ICpldmVudCkKK3sKKwl1NjQgYWJzX2FkZHI7CisJSHZMcEV2ZW50X1JjIHJldFZhbDsKKworI2lmZGVmIERFQlVHX1NFTkRFVkVOVAorCXByaW50aygiSHZDYWxsRXZlbnRfc2lnbmFsTHBFdmVudDogKmV2ZW50ID0gJTAxNmx4XG4gIiwKKwkJCSh1bnNpZ25lZCBsb25nKWV2ZW50KTsKKyNlbmRpZgorCWFic19hZGRyID0gdmlydF90b19hYnMoZXZlbnQpOworCXJldFZhbCA9IChIdkxwRXZlbnRfUmMpSHZDYWxsMShIdkNhbGxFdmVudFNpZ25hbExwRXZlbnQsIGFic19hZGRyKTsKKwkvLyBnZXRQYWNhKCktPmFkanVzdEhtdEZvck5vT2ZTcGluTG9ja3NIZWxkKCk7CisJcmV0dXJuIHJldFZhbDsKK30KKworc3RhdGljIGlubGluZSBIdkxwRXZlbnRfUmMgSHZDYWxsRXZlbnRfc2lnbmFsTHBFdmVudEZhc3QoSHZMcEluZGV4IHRhcmdldExwLAorCQlIdkxwRXZlbnRfVHlwZSB0eXBlLCB1MTYgc3VidHlwZSwgSHZMcEV2ZW50X0Fja0luZCBhY2tJbmQsCisJCUh2THBFdmVudF9BY2tUeXBlIGFja1R5cGUsIEh2THBJbnN0YW5jZUlkIHNvdXJjZUluc3RhbmNlSWQsCisJCUh2THBJbnN0YW5jZUlkIHRhcmdldEluc3RhbmNlSWQsIHU2NCBjb3JyZWxhdGlvblRva2VuLAorCQl1NjQgZXZlbnREYXRhMSwgdTY0IGV2ZW50RGF0YTIsIHU2NCBldmVudERhdGEzLAorCQl1NjQgZXZlbnREYXRhNCwgdTY0IGV2ZW50RGF0YTUpCit7CisJSHZMcEV2ZW50X1JjIHJldFZhbDsKKworCS8vIFBhY2sgdGhlIG1pc2MgYml0cyBpbnRvIGEgc2luZ2xlIER3b3JkIHRvIHBhc3MgdG8gUExJQworCXVuaW9uIHsKKwkJc3RydWN0IEh2Q2FsbEV2ZW50X1BhY2tlZFBhcm1zCXBhcm1zOworCQl1NjQJCWR3b3JkOworCX0gcGFja2VkOworCXBhY2tlZC5wYXJtcy54QWNrVHlwZQk9IGFja1R5cGU7CisJcGFja2VkLnBhcm1zLnhBY2tJbmQJPSBhY2tJbmQ7CisJcGFja2VkLnBhcm1zLnhSc3ZkCT0gMDsKKwlwYWNrZWQucGFybXMueFRhcmdldExwCT0gdGFyZ2V0THA7CisJcGFja2VkLnBhcm1zLnhUeXBlCT0gdHlwZTsKKwlwYWNrZWQucGFybXMueFN1YnR5cGUJPSBzdWJ0eXBlOworCXBhY2tlZC5wYXJtcy54U291cmNlSW5zdElkCT0gc291cmNlSW5zdGFuY2VJZDsKKwlwYWNrZWQucGFybXMueFRhcmdldEluc3RJZAk9IHRhcmdldEluc3RhbmNlSWQ7CisKKwlyZXRWYWwgPSAoSHZMcEV2ZW50X1JjKUh2Q2FsbDcoSHZDYWxsRXZlbnRTaWduYWxMcEV2ZW50UGFybXMsCisJCQlwYWNrZWQuZHdvcmQsIGNvcnJlbGF0aW9uVG9rZW4sIGV2ZW50RGF0YTEsZXZlbnREYXRhMiwKKwkJCWV2ZW50RGF0YTMsZXZlbnREYXRhNCwgZXZlbnREYXRhNSk7CisJLy8gZ2V0UGFjYSgpLT5hZGp1c3RIbXRGb3JOb09mU3BpbkxvY2tzSGVsZCgpOworCXJldHVybiByZXRWYWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgSHZMcEV2ZW50X1JjIEh2Q2FsbEV2ZW50X2Fja0xwRXZlbnQoc3RydWN0IEh2THBFdmVudCAqZXZlbnQpCit7CisJdTY0IGFic19hZGRyOworCUh2THBFdmVudF9SYyByZXRWYWw7CisKKwlhYnNfYWRkciA9IHZpcnRfdG9fYWJzKGV2ZW50KTsKKwlyZXRWYWwgPSAoSHZMcEV2ZW50X1JjKUh2Q2FsbDEoSHZDYWxsRXZlbnRBY2tMcEV2ZW50LCBhYnNfYWRkcik7CisJLy8gZ2V0UGFjYSgpLT5hZGp1c3RIbXRGb3JOb09mU3BpbkxvY2tzSGVsZCgpOworCXJldHVybiByZXRWYWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgSHZMcEV2ZW50X1JjIEh2Q2FsbEV2ZW50X2NhbmNlbExwRXZlbnQoc3RydWN0IEh2THBFdmVudCAqZXZlbnQpCit7CisJdTY0IGFic19hZGRyOworCUh2THBFdmVudF9SYyByZXRWYWw7CisKKwlhYnNfYWRkciA9IHZpcnRfdG9fYWJzKGV2ZW50KTsKKwlyZXRWYWwgPSAoSHZMcEV2ZW50X1JjKUh2Q2FsbDEoSHZDYWxsRXZlbnRDYW5jZWxMcEV2ZW50LCBhYnNfYWRkcik7CisJLy8gZ2V0UGFjYSgpLT5hZGp1c3RIbXRGb3JOb09mU3BpbkxvY2tzSGVsZCgpOworCXJldHVybiByZXRWYWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgSHZMcEluc3RhbmNlSWQgSHZDYWxsRXZlbnRfZ2V0U291cmNlTHBJbnN0YW5jZUlkKAorCQlIdkxwSW5kZXggdGFyZ2V0THAsIEh2THBFdmVudF9UeXBlIHR5cGUpCit7CisJSHZMcEluc3RhbmNlSWQgcmV0VmFsOwkKKworCXJldFZhbCA9IEh2Q2FsbDIoSHZDYWxsRXZlbnRHZXRTb3VyY2VMcEluc3RhbmNlSWQsIHRhcmdldExwLCB0eXBlKTsKKwkvLyBnZXRQYWNhKCktPmFkanVzdEhtdEZvck5vT2ZTcGluTG9ja3NIZWxkKCk7CisJcmV0dXJuIHJldFZhbDsKK30KKworc3RhdGljIGlubGluZSBIdkxwSW5zdGFuY2VJZCBIdkNhbGxFdmVudF9nZXRUYXJnZXRMcEluc3RhbmNlSWQoCisJCUh2THBJbmRleCB0YXJnZXRMcCwgSHZMcEV2ZW50X1R5cGUgdHlwZSkKK3sKKwlIdkxwSW5zdGFuY2VJZCByZXRWYWw7CQorCisJcmV0VmFsID0gSHZDYWxsMihIdkNhbGxFdmVudEdldFRhcmdldExwSW5zdGFuY2VJZCwgdGFyZ2V0THAsIHR5cGUpOworCS8vIGdldFBhY2EoKS0+YWRqdXN0SG10Rm9yTm9PZlNwaW5Mb2Nrc0hlbGQoKTsKKwlyZXR1cm4gcmV0VmFsOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgSHZDYWxsRXZlbnRfb3BlbkxwRXZlbnRQYXRoKEh2THBJbmRleCB0YXJnZXRMcCwKKwkJSHZMcEV2ZW50X1R5cGUgdHlwZSkKK3sKKwlIdkNhbGwyKEh2Q2FsbEV2ZW50T3BlbkxwRXZlbnRQYXRoLCB0YXJnZXRMcCwgdHlwZSk7CisJLy8gZ2V0UGFjYSgpLT5hZGp1c3RIbXRGb3JOb09mU3BpbkxvY2tzSGVsZCgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgSHZDYWxsRXZlbnRfY2xvc2VMcEV2ZW50UGF0aChIdkxwSW5kZXggdGFyZ2V0THAsCisJCUh2THBFdmVudF9UeXBlIHR5cGUpCit7CisJSHZDYWxsMihIdkNhbGxFdmVudENsb3NlTHBFdmVudFBhdGgsIHRhcmdldExwLCB0eXBlKTsKKwkvLyBnZXRQYWNhKCktPmFkanVzdEhtdEZvck5vT2ZTcGluTG9ja3NIZWxkKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgSHZMcERtYV9SYyBIdkNhbGxFdmVudF9kbWFCdWZMaXN0KEh2THBFdmVudF9UeXBlIHR5cGUsCisJCUh2THBJbmRleCByZW1vdGVMcCwgSHZMcERtYV9EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQlIdkxwSW5zdGFuY2VJZCBsb2NhbEluc3RhbmNlSWQsCisJCUh2THBJbnN0YW5jZUlkIHJlbW90ZUluc3RhbmNlSWQsCisJCUh2THBEbWFfQWRkcmVzc1R5cGUgbG9jYWxBZGRyZXNzVHlwZSwKKwkJSHZMcERtYV9BZGRyZXNzVHlwZSByZW1vdGVBZGRyZXNzVHlwZSwKKwkJLyogRG8gdGhlc2UgbmVlZCB0byBiZSBjb252ZXJ0ZWQgdG8gYWJzb2x1dGUgYWRkcmVzc2VzPyAqLworCQl1NjQgbG9jYWxCdWZMaXN0LCB1NjQgcmVtb3RlQnVmTGlzdCwgdTMyIHRyYW5zZmVyTGVuZ3RoKQoreworCUh2THBEbWFfUmMgcmV0VmFsOworCS8vIFBhY2sgdGhlIG1pc2MgYml0cyBpbnRvIGEgc2luZ2xlIER3b3JkIHRvIHBhc3MgdG8gUExJQworCXVuaW9uIHsKKwkJc3RydWN0IEh2Q2FsbEV2ZW50X1BhY2tlZERtYVBhcm1zCXBhcm1zOworCQl1NjQJCWR3b3JkOworCX0gcGFja2VkOworCisJcGFja2VkLnBhcm1zLnhEaXJlY3Rpb24JCT0gZGlyZWN0aW9uOworCXBhY2tlZC5wYXJtcy54TG9jYWxBZGRyVHlwZQk9IGxvY2FsQWRkcmVzc1R5cGU7CisJcGFja2VkLnBhcm1zLnhSZW1vdGVBZGRyVHlwZQk9IHJlbW90ZUFkZHJlc3NUeXBlOworCXBhY2tlZC5wYXJtcy54UnN2ZDEJCT0gMDsKKwlwYWNrZWQucGFybXMueFJlbW90ZUxwCQk9IHJlbW90ZUxwOworCXBhY2tlZC5wYXJtcy54VHlwZQkJPSB0eXBlOworCXBhY2tlZC5wYXJtcy54UnN2ZDIJCT0gMDsKKwlwYWNrZWQucGFybXMueExvY2FsSW5zdElkCT0gbG9jYWxJbnN0YW5jZUlkOworCXBhY2tlZC5wYXJtcy54UmVtb3RlSW5zdElkCT0gcmVtb3RlSW5zdGFuY2VJZDsKKworCXJldFZhbCA9IChIdkxwRG1hX1JjKUh2Q2FsbDQoSHZDYWxsRXZlbnREbWFCdWZMaXN0LAorCQkJcGFja2VkLmR3b3JkLCBsb2NhbEJ1Zkxpc3QsIHJlbW90ZUJ1Zkxpc3QsCisJCQl0cmFuc2Zlckxlbmd0aCk7CisJLy8gZ2V0UGFjYSgpLT5hZGp1c3RIbXRGb3JOb09mU3BpbkxvY2tzSGVsZCgpOworCXJldHVybiByZXRWYWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgSHZMcERtYV9SYyBIdkNhbGxFdmVudF9kbWFTaW5nbGUoSHZMcEV2ZW50X1R5cGUgdHlwZSwKKwkJSHZMcEluZGV4IHJlbW90ZUxwLCBIdkxwRG1hX0RpcmVjdGlvbiBkaXJlY3Rpb24sCisJCUh2THBJbnN0YW5jZUlkIGxvY2FsSW5zdGFuY2VJZCwKKwkJSHZMcEluc3RhbmNlSWQgcmVtb3RlSW5zdGFuY2VJZCwKKwkJSHZMcERtYV9BZGRyZXNzVHlwZSBsb2NhbEFkZHJlc3NUeXBlLAorCQlIdkxwRG1hX0FkZHJlc3NUeXBlIHJlbW90ZUFkZHJlc3NUeXBlLAorCQl1NjQgbG9jYWxBZGRyT3JUY2UsIHU2NCByZW1vdGVBZGRyT3JUY2UsIHUzMiB0cmFuc2Zlckxlbmd0aCkKK3sKKwlIdkxwRG1hX1JjIHJldFZhbDsKKwkvLyBQYWNrIHRoZSBtaXNjIGJpdHMgaW50byBhIHNpbmdsZSBEd29yZCB0byBwYXNzIHRvIFBMSUMKKwl1bmlvbiB7CisJCXN0cnVjdCBIdkNhbGxFdmVudF9QYWNrZWREbWFQYXJtcwlwYXJtczsKKwkJdTY0CQlkd29yZDsKKwl9IHBhY2tlZDsKKworCXBhY2tlZC5wYXJtcy54RGlyZWN0aW9uCQk9IGRpcmVjdGlvbjsKKwlwYWNrZWQucGFybXMueExvY2FsQWRkclR5cGUJPSBsb2NhbEFkZHJlc3NUeXBlOworCXBhY2tlZC5wYXJtcy54UmVtb3RlQWRkclR5cGUJPSByZW1vdGVBZGRyZXNzVHlwZTsKKwlwYWNrZWQucGFybXMueFJzdmQxCQk9IDA7CisJcGFja2VkLnBhcm1zLnhSZW1vdGVMcAkJPSByZW1vdGVMcDsKKwlwYWNrZWQucGFybXMueFR5cGUJCT0gdHlwZTsKKwlwYWNrZWQucGFybXMueFJzdmQyCQk9IDA7CisJcGFja2VkLnBhcm1zLnhMb2NhbEluc3RJZAk9IGxvY2FsSW5zdGFuY2VJZDsKKwlwYWNrZWQucGFybXMueFJlbW90ZUluc3RJZAk9IHJlbW90ZUluc3RhbmNlSWQ7CisKKwlyZXRWYWwgPSAoSHZMcERtYV9SYylIdkNhbGw0KEh2Q2FsbEV2ZW50RG1hU2luZ2xlLAorCQkJcGFja2VkLmR3b3JkLCBsb2NhbEFkZHJPclRjZSwgcmVtb3RlQWRkck9yVGNlLAorCQkJdHJhbnNmZXJMZW5ndGgpOworCS8vIGdldFBhY2EoKS0+YWRqdXN0SG10Rm9yTm9PZlNwaW5Mb2Nrc0hlbGQoKTsKKwlyZXR1cm4gcmV0VmFsOworfQorCitzdGF0aWMgaW5saW5lIEh2THBEbWFfUmMgSHZDYWxsRXZlbnRfZG1hVG9TcCh2b2lkKiBsb2NhbCwgdTMyIHJlbW90ZSwKKwkJdTMyIGxlbmd0aCwgSHZMcERtYV9EaXJlY3Rpb24gZGlyKQoreworCXU2NCBhYnNfYWRkcjsKKwlIdkxwRG1hX1JjIHJldFZhbDsKKworCWFic19hZGRyID0gdmlydF90b19hYnMobG9jYWwpOworCXJldFZhbCA9IChIdkxwRG1hX1JjKUh2Q2FsbDQoSHZDYWxsRXZlbnREbWFUb1NwLCBhYnNfYWRkciwgcmVtb3RlLAorCQkJbGVuZ3RoLCBkaXIpOworCS8vIGdldFBhY2EoKS0+YWRqdXN0SG10Rm9yTm9PZlNwaW5Mb2Nrc0hlbGQoKTsKKwlyZXR1cm4gcmV0VmFsOworfQorCisKKyNlbmRpZiAvKiBfSFZDQUxMRVZFTlRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvaVNlcmllcy9IdkNhbGxIcHQuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvSHZDYWxsSHB0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE3Njk4NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvSHZDYWxsSHB0LmgKQEAgLTAsMCArMSwxMjcgQEAKKy8qCisgKiBIdkNhbGxIcHQuaAorICogQ29weXJpZ2h0IChDKSAyMDAxICBNaWtlIENvcnJpZ2FuIElCTSBDb3Jwb3JhdGlvbgorICogCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICogCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICovCisjaWZuZGVmIF9IVkNBTExIUFRfSAorI2RlZmluZSBfSFZDQUxMSFBUX0gKKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8JVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSAiaHlwZXJ2aXNvciBjYWxsIiBpbnRlcmZhY2Ugd2hpY2ggaXMgdXNlZCB0bworLy8JZHJpdmUgdGhlIGh5cGVydmlzb3IgZnJvbSB0aGUgT1MuCisvLworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyNpbmNsdWRlIDxhc20vaVNlcmllcy9IdkNhbGxTYy5oPgorI2luY2x1ZGUgPGFzbS9pU2VyaWVzL0h2VHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbW11Lmg+CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIENvbnN0YW50cworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjZGVmaW5lIEh2Q2FsbEhwdEdldEhwdEFkZHJlc3MJCUh2Q2FsbEhwdCArICAwCisjZGVmaW5lIEh2Q2FsbEhwdEdldEhwdFBhZ2VzCQlIdkNhbGxIcHQgKyAgMQorI2RlZmluZSBIdkNhbGxIcHRTZXRQcAkJCUh2Q2FsbEhwdCArICA1CisjZGVmaW5lIEh2Q2FsbEhwdFNldFN3Qml0cwkJSHZDYWxsSHB0ICsgIDYKKyNkZWZpbmUgSHZDYWxsSHB0VXBkYXRlCQkJSHZDYWxsSHB0ICsgIDcKKyNkZWZpbmUgSHZDYWxsSHB0SW52YWxpZGF0ZU5vU3luY0lDYWNoZQlIdkNhbGxIcHQgKyAgOAorI2RlZmluZSBIdkNhbGxIcHRHZXQJCQlIdkNhbGxIcHQgKyAxMQorI2RlZmluZSBIdkNhbGxIcHRGaW5kTmV4dFZhbGlkCQlIdkNhbGxIcHQgKyAxMgorI2RlZmluZSBIdkNhbGxIcHRGaW5kVmFsaWQJCUh2Q2FsbEhwdCArIDEzCisjZGVmaW5lIEh2Q2FsbEhwdEFkZFZhbGlkYXRlCQlIdkNhbGxIcHQgKyAxNgorI2RlZmluZSBIdkNhbGxIcHRJbnZhbGlkYXRlU2V0U3dCaXRzR2V0IEh2Q2FsbEhwdCArIDE4CisKKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitzdGF0aWMgaW5saW5lIHU2NAkJSHZDYWxsSHB0X2dldEhwdEFkZHJlc3Modm9pZCkKK3sKKwl1NjQgcmV0dmFsID0gSHZDYWxsMChIdkNhbGxIcHRHZXRIcHRBZGRyZXNzKTsKKwkvLyBnZXRQYWNhKCktPmFkanVzdEhtdEZvck5vT2ZTcGluTG9ja3NIZWxkKCk7CisJcmV0dXJuIHJldHZhbDsKK30KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorc3RhdGljIGlubGluZSB1NjQJCUh2Q2FsbEhwdF9nZXRIcHRQYWdlcyh2b2lkKQorewkKKwl1NjQgcmV0dmFsID0gSHZDYWxsMChIdkNhbGxIcHRHZXRIcHRQYWdlcyk7CisJLy8gZ2V0UGFjYSgpLT5hZGp1c3RIbXRGb3JOb09mU3BpbkxvY2tzSGVsZCgpOworCXJldHVybiByZXR2YWw7Cit9CisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitzdGF0aWMgaW5saW5lIHZvaWQJCUh2Q2FsbEhwdF9zZXRQcCh1MzIgaHB0ZUluZGV4LCB1OCB2YWx1ZSkKK3sKKwlIdkNhbGwyKCBIdkNhbGxIcHRTZXRQcCwgaHB0ZUluZGV4LCB2YWx1ZSApOworCS8vIGdldFBhY2EoKS0+YWRqdXN0SG10Rm9yTm9PZlNwaW5Mb2Nrc0hlbGQoKTsKK30KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3N0YXRpYyBpbmxpbmUgdm9pZAkJSHZDYWxsSHB0X3NldFN3Qml0cyh1MzIgaHB0ZUluZGV4LCB1OCBiaXRzb24sIHU4IGJpdHNvZmYgKQoreworCUh2Q2FsbDMoIEh2Q2FsbEhwdFNldFN3Qml0cywgaHB0ZUluZGV4LCBiaXRzb24sIGJpdHNvZmYgKTsKKwkvLyBnZXRQYWNhKCktPmFkanVzdEhtdEZvck5vT2ZTcGluTG9ja3NIZWxkKCk7Cit9CisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitzdGF0aWMgaW5saW5lIHZvaWQJCUh2Q2FsbEhwdF9pbnZhbGlkYXRlTm9TeW5jSUNhY2hlKHUzMiBocHRlSW5kZXgpCisJCQkJCQkKK3sKKwlIdkNhbGwxKCBIdkNhbGxIcHRJbnZhbGlkYXRlTm9TeW5jSUNhY2hlLCBocHRlSW5kZXggKTsKKwkvLyBnZXRQYWNhKCktPmFkanVzdEhtdEZvck5vT2ZTcGluTG9ja3NIZWxkKCk7Cit9CisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitzdGF0aWMgaW5saW5lIHU2NAkJSHZDYWxsSHB0X2ludmFsaWRhdGVTZXRTd0JpdHNHZXQodTMyIGhwdGVJbmRleCwgdTggYml0c29uLCB1OCBiaXRzb2ZmICkKKwkJCQkJCQoreworCXU2NCBjb21wcmVzc2VkU3RhdHVzOworCWNvbXByZXNzZWRTdGF0dXMgPSBIdkNhbGw0KCBIdkNhbGxIcHRJbnZhbGlkYXRlU2V0U3dCaXRzR2V0LCBocHRlSW5kZXgsIGJpdHNvbiwgYml0c29mZiwgMSApOworCUh2Q2FsbDEoIEh2Q2FsbEhwdEludmFsaWRhdGVOb1N5bmNJQ2FjaGUsIGhwdGVJbmRleCApOworCS8vIGdldFBhY2EoKS0+YWRqdXN0SG10Rm9yTm9PZlNwaW5Mb2Nrc0hlbGQoKTsKKwlyZXR1cm4gY29tcHJlc3NlZFN0YXR1czsKK30KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3N0YXRpYyBpbmxpbmUgdTY0CQlIdkNhbGxIcHRfZmluZFZhbGlkKCBIUFRFICpocHRlLCB1NjQgdnBuICkKK3sKKwl1NjQgcmV0SW5kZXggPSBIdkNhbGwzUmV0MTYoIEh2Q2FsbEhwdEZpbmRWYWxpZCwgaHB0ZSwgdnBuLCAwLCAwICk7CisJLy8gZ2V0UGFjYSgpLT5hZGp1c3RIbXRGb3JOb09mU3BpbkxvY2tzSGVsZCgpOworCXJldHVybiByZXRJbmRleDsKK30KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3N0YXRpYyBpbmxpbmUgdTY0CQlIdkNhbGxIcHRfZmluZE5leHRWYWxpZCggSFBURSAqaHB0ZSwgdTMyIGhwdGVJbmRleCwgdTggYml0c29uLCB1OCBiaXRzb2ZmICkKK3sKKwl1NjQgcmV0SW5kZXggPSBIdkNhbGwzUmV0MTYoIEh2Q2FsbEhwdEZpbmROZXh0VmFsaWQsIGhwdGUsIGhwdGVJbmRleCwgYml0c29uLCBiaXRzb2ZmICk7CisJLy8gZ2V0UGFjYSgpLT5hZGp1c3RIbXRGb3JOb09mU3BpbkxvY2tzSGVsZCgpOworCXJldHVybiByZXRJbmRleDsKK30KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3N0YXRpYyBpbmxpbmUgdm9pZAkJSHZDYWxsSHB0X2dldCggSFBURSAqaHB0ZSwgdTMyIGhwdGVJbmRleCApCit7CisJSHZDYWxsMlJldDE2KCBIdkNhbGxIcHRHZXQsIGhwdGUsIGhwdGVJbmRleCwgMCApOworCS8vIGdldFBhY2EoKS0+YWRqdXN0SG10Rm9yTm9PZlNwaW5Mb2Nrc0hlbGQoKTsKK30KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorc3RhdGljIGlubGluZSB2b2lkCQlIdkNhbGxIcHRfYWRkVmFsaWRhdGUoIHUzMiBocHRlSW5kZXgsCisJCQkJCQkgICAgICAgdTMyIGhCaXQsCisJCQkJCQkgICAgICAgSFBURSAqaHB0ZSApCisJCQkJCQkKK3sKKwlIdkNhbGw0KCBIdkNhbGxIcHRBZGRWYWxpZGF0ZSwgaHB0ZUluZGV4LAorCQkgaEJpdCwgKCooKHU2NCAqKWhwdGUpKSwgKCooKCh1NjQgKilocHRlKSsxKSkgKTsKKwkvLyBnZXRQYWNhKCktPmFkanVzdEhtdEZvck5vT2ZTcGluTG9ja3NIZWxkKCk7Cit9CisKKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjZW5kaWYgLyogX0hWQ0FMTEhQVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL0h2Q2FsbFBjaS5oIGIvaW5jbHVkZS9hc20tcHBjNjQvaVNlcmllcy9IdkNhbGxQY2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODg3YjYxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvaVNlcmllcy9IdkNhbGxQY2kuaApAQCAtMCwwICsxLDY3MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFByb3ZpZGVzIHRoZSBIeXBlcnZpc29yIFBDSSBjYWxscyBmb3IgaVNlcmllcyBMaW51eCBQYXJpdGlvbi4gICAgICAgICovCisvKiBDb3B5cmlnaHQgKEMpIDIwMDEgIDxXYXluZSBHIEhvbG0+IDxJQk0gQ29ycG9yYXRpb24+ICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICovCisvKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAqLworLyogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgKi8KKy8qIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgKi8gCisvKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAqLworLyogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgKi8KKy8qIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgKi8gCisvKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGU6ICAgICAgICAgICAgICAgICAgICAgICAqLworLyogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gCisvKiA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAKKy8qIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogQ2hhbmdlIEFjdGl2aXR5OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgQ3JlYXRlZCwgSmFuIDksIDIwMDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9IVkNBTExQQ0lfSAorI2RlZmluZSBfSFZDQUxMUENJX0gKKworI2luY2x1ZGUgPGFzbS9pU2VyaWVzL0h2Q2FsbFNjLmg+CisjaW5jbHVkZSA8YXNtL2lTZXJpZXMvSHZUeXBlcy5oPgorCisvKgorICogRFNBID09IERpcmVjdCBTZWxlY3QgQWRkcmVzcworICogdGhpcyBzdHJ1Y3QgbXVzdCBiZSA2NCBiaXRzIGluIHRvdGFsCisgKi8KK3N0cnVjdCBIdkNhbGxQY2lfRHNhQWRkciB7CisJdTE2CQlidXNOdW1iZXI7CQkvKiBQSEIgaW5kZXg/ICovCisJdTgJCXN1YkJ1c051bWJlcjsgCQkvKiBQQ0kgYnVzIG51bWJlcj8gKi8KKwl1OAkJZGV2aWNlSWQ7ICAgICAJCS8qIGRldmljZSBhbmQgZnVuY3Rpb24/ICovCisJdTgJCWJhck51bWJlcjsKKwl1OAkJcmVzZXJ2ZWRbM107Cit9OworCit1bmlvbiBIdkRzYU1hcCB7CisJdTY0CURzYUFkZHI7CisJc3RydWN0IEh2Q2FsbFBjaV9Ec2FBZGRyIERzYTsKK307CisKK3N0cnVjdCBIdkNhbGxQY2lfTG9hZFJldHVybiB7CisJdTY0CQlyYzsKKwl1NjQJCXZhbHVlOworfTsKKworZW51bSBIdkNhbGxQY2lfRGV2aWNlVHlwZSB7CisJSHZDYWxsUGNpX05vZGVEZXZpY2UJPSAxLAorCUh2Q2FsbFBjaV9TcERldmljZQk9IDIsCQorCUh2Q2FsbFBjaV9Jb3BEZXZpY2UgICAgID0gMywJCisJSHZDYWxsUGNpX0JyaWRnZURldmljZQk9IDQsCQorCUh2Q2FsbFBjaV9NdWx0aUZ1bmN0aW9uRGV2aWNlID0gNSwJCisJSHZDYWxsUGNpX0lvYURldmljZQk9IDYJCit9OworCisKK3N0cnVjdCBIdkNhbGxQY2lfRGV2aWNlSW5mbyB7CisJdTMyCWRldmljZVR5cGU7CQkvLyBTZWUgRGV2aWNlVHlwZSBlbnVtIGZvciB2YWx1ZXMKK307CisgICAgCitzdHJ1Y3QgSHZDYWxsUGNpX0J1c1VuaXRJbmZvIHsKKwl1MzIJc2l6ZVJldHVybmVkOwkJLy8gbGVuZ3RoIG9mIGRhdGEgcmV0dXJuZWQKKwl1MzIJZGV2aWNlVHlwZTsJCS8vIHNlZSBEZXZpY2VUeXBlIGVudW0gZm9yIHZhbHVlcworfTsKKworc3RydWN0IEh2Q2FsbFBjaV9CcmlkZ2VJbmZvIHsKKwlzdHJ1Y3QgSHZDYWxsUGNpX0J1c1VuaXRJbmZvIGJ1c1VuaXRJbmZvOyAgLy8gR2VuZXJpYyBidXMgdW5pdCBpbmZvCisJdTgJCXN1YkJ1c051bWJlcjsJCS8vIEJ1cyBudW1iZXIgb2Ygc2Vjb25kYXJ5IGJ1cworCXU4CQltYXhBZ2VudHM7CQkvLyBNYXggaWRzZWxzIG9uIHNlY29uZGFyeSBidXMKKyAgICAgICAgdTggICAgICAgICAgICAgIG1heFN1YkJ1c051bWJlcjsgICAgICAgIC8vIE1heCBTdWIgQnVzCisJdTgJCWxvZ2ljYWxTbG90TnVtYmVyOwkvLyBMb2dpY2FsIFNsb3QgTnVtYmVyIGZvciBJT0EgCit9OworICAgIAorCisvLyAgTWF4aW11bSBCdXNVbml0SW5mbyBidWZmZXIgc2l6ZS4gIFByb3ZpZGVkIGZvciBjbGllbnRzIHNvIHRoZXkgY2FuIGFsbG9jYXRlCisvLyAgYSBidWZmZXIgYmlnIGVub3VnaCBmb3IgYW55IHR5cGUgb2YgYnVzIHVuaXQuICBJbmNyZWFzZSBhcyBuZWVkZWQuCitlbnVtIHtIdkNhbGxQY2lfTWF4QnVzVW5pdEluZm9TaXplID0gMTI4fTsKKworc3RydWN0IEh2Q2FsbFBjaV9CYXJQYXJtcyB7CisJdTY0CQl2YWRkcjsKKwl1NjQJCXJhZGRyOworCXU2NAkJc2l6ZTsKKwl1NjQJCXByb3RlY3RTdGFydDsKKwl1NjQJCXByb3RlY3RFbmQ7CisJdTY0CQlyZWxvY2F0aW9uT2Zmc2V0OworCXU2NAkJcGNpQWRkcmVzczsJCQorCXU2NAkJcmVzZXJ2ZWRbM107Cit9OwkJCQkJCisKK2VudW0gSHZDYWxsUGNpX1ZwZFR5cGUgeworCUh2Q2FsbFBjaV9CdXNWcGQJCT0gMSwKKwlIdkNhbGxQY2lfQnVzQWRhcHRlclZwZAk9IDIKK307CisKKyNkZWZpbmUgSHZDYWxsUGNpQ29uZmlnTG9hZDgJCUh2Q2FsbFBjaSArIDAKKyNkZWZpbmUgSHZDYWxsUGNpQ29uZmlnTG9hZDE2CQlIdkNhbGxQY2kgKyAxCisjZGVmaW5lIEh2Q2FsbFBjaUNvbmZpZ0xvYWQzMgkJSHZDYWxsUGNpICsgMgorI2RlZmluZSBIdkNhbGxQY2lDb25maWdTdG9yZTgJCUh2Q2FsbFBjaSArIDMKKyNkZWZpbmUgSHZDYWxsUGNpQ29uZmlnU3RvcmUxNgkJSHZDYWxsUGNpICsgNAorI2RlZmluZSBIdkNhbGxQY2lDb25maWdTdG9yZTMyCQlIdkNhbGxQY2kgKyA1CisjZGVmaW5lIEh2Q2FsbFBjaUVvaQkJCUh2Q2FsbFBjaSArIDE2CisjZGVmaW5lIEh2Q2FsbFBjaUdldEJhclBhcm1zCQlIdkNhbGxQY2kgKyAxOAorI2RlZmluZSBIdkNhbGxQY2lNYXNrRmlzcgkJSHZDYWxsUGNpICsgMjAKKyNkZWZpbmUgSHZDYWxsUGNpVW5tYXNrRmlzcgkJSHZDYWxsUGNpICsgMjEKKyNkZWZpbmUgSHZDYWxsUGNpU2V0U2xvdFJlc2V0CQlIdkNhbGxQY2kgKyAyNQorI2RlZmluZSBIdkNhbGxQY2lHZXREZXZpY2VJbmZvCQlIdkNhbGxQY2kgKyAyNworI2RlZmluZSBIdkNhbGxQY2lHZXRDYXJkVnBkCQlIdkNhbGxQY2kgKyAyOAorI2RlZmluZSBIdkNhbGxQY2lCYXJMb2FkOAkJSHZDYWxsUGNpICsgNDAKKyNkZWZpbmUgSHZDYWxsUGNpQmFyTG9hZDE2CQlIdkNhbGxQY2kgKyA0MQorI2RlZmluZSBIdkNhbGxQY2lCYXJMb2FkMzIJCUh2Q2FsbFBjaSArIDQyCisjZGVmaW5lIEh2Q2FsbFBjaUJhckxvYWQ2NAkJSHZDYWxsUGNpICsgNDMKKyNkZWZpbmUgSHZDYWxsUGNpQmFyU3RvcmU4CQlIdkNhbGxQY2kgKyA0NAorI2RlZmluZSBIdkNhbGxQY2lCYXJTdG9yZTE2CQlIdkNhbGxQY2kgKyA0NQorI2RlZmluZSBIdkNhbGxQY2lCYXJTdG9yZTMyCQlIdkNhbGxQY2kgKyA0NgorI2RlZmluZSBIdkNhbGxQY2lCYXJTdG9yZTY0CQlIdkNhbGxQY2kgKyA0NworI2RlZmluZSBIdkNhbGxQY2lNYXNrSW50ZXJydXB0cwkJSHZDYWxsUGNpICsgNDgKKyNkZWZpbmUgSHZDYWxsUGNpVW5tYXNrSW50ZXJydXB0cwlIdkNhbGxQY2kgKyA0OQorI2RlZmluZSBIdkNhbGxQY2lHZXRCdXNVbml0SW5mbwkJSHZDYWxsUGNpICsgNTAKKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitzdGF0aWMgaW5saW5lIHU2NCBIdkNhbGxQY2lfY29uZmlnTG9hZDgodTE2IGJ1c051bWJlciwgdTggc3ViQnVzTnVtYmVyLAorCQkJCQl1OCBkZXZpY2VJZCwgdTMyIG9mZnNldCwKKwkJCQkJdTggKnZhbHVlKQoreworCXN0cnVjdCBIdkNhbGxQY2lfRHNhQWRkciBkc2E7CisJc3RydWN0IEh2Q2FsbFBjaV9Mb2FkUmV0dXJuIHJldFZhbDsKKworCSooKHU2NCopJmRzYSkgPSAwOwkJCQkKKworCWRzYS5idXNOdW1iZXIgPSBidXNOdW1iZXI7CisJZHNhLnN1YkJ1c051bWJlciA9IHN1YkJ1c051bWJlcjsKKwlkc2EuZGV2aWNlSWQgPSBkZXZpY2VJZDsKKworCUh2Q2FsbDNSZXQxNihIdkNhbGxQY2lDb25maWdMb2FkOCwgJnJldFZhbCwgKih1NjQgKikmZHNhLCBvZmZzZXQsIDApOworCisJLy8gZ2V0UGFjYSgpLT5hZGp1c3RIbXRGb3JOb09mU3BpbkxvY2tzSGVsZCgpOworCisJKnZhbHVlID0gcmV0VmFsLnZhbHVlOworCisJcmV0dXJuIHJldFZhbC5yYzsKK30KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorc3RhdGljIGlubGluZSB1NjQgSHZDYWxsUGNpX2NvbmZpZ0xvYWQxNih1MTYgYnVzTnVtYmVyLCB1OCBzdWJCdXNOdW1iZXIsCisJCQkJCSB1OCBkZXZpY2VJZCwgdTMyIG9mZnNldCwKKwkJCQkJIHUxNiAqdmFsdWUpCit7CisJc3RydWN0IEh2Q2FsbFBjaV9Ec2FBZGRyIGRzYTsKKwlzdHJ1Y3QgSHZDYWxsUGNpX0xvYWRSZXR1cm4gcmV0VmFsOworCisJKigodTY0KikmZHNhKSA9IDA7CQkJCQorCisJZHNhLmJ1c051bWJlciA9IGJ1c051bWJlcjsKKwlkc2Euc3ViQnVzTnVtYmVyID0gc3ViQnVzTnVtYmVyOworCWRzYS5kZXZpY2VJZCA9IGRldmljZUlkOworCisJSHZDYWxsM1JldDE2KEh2Q2FsbFBjaUNvbmZpZ0xvYWQxNiwgJnJldFZhbCwgKih1NjQgKikmZHNhLCBvZmZzZXQsIDApOworCisJLy8gZ2V0UGFjYSgpLT5hZGp1c3RIbXRGb3JOb09mU3BpbkxvY2tzSGVsZCgpOworCisJKnZhbHVlID0gcmV0VmFsLnZhbHVlOworCisJcmV0dXJuIHJldFZhbC5yYzsKK30KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorc3RhdGljIGlubGluZSB1NjQJSHZDYWxsUGNpX2NvbmZpZ0xvYWQzMih1MTYgYnVzTnVtYmVyLCB1OCBzdWJCdXNOdW1iZXIsCisJCQkJCSAgICAgIHU4IGRldmljZUlkLCB1MzIgb2Zmc2V0LAorCQkJCQkgICAgICB1MzIgKnZhbHVlKQoreworCXN0cnVjdCBIdkNhbGxQY2lfRHNhQWRkciBkc2E7CisJc3RydWN0IEh2Q2FsbFBjaV9Mb2FkUmV0dXJuIHJldFZhbDsKKworCSooKHU2NCopJmRzYSkgPSAwOwkJCQkKKworCWRzYS5idXNOdW1iZXIgPSBidXNOdW1iZXI7CisJZHNhLnN1YkJ1c051bWJlciA9IHN1YkJ1c051bWJlcjsKKwlkc2EuZGV2aWNlSWQgPSBkZXZpY2VJZDsKKworCUh2Q2FsbDNSZXQxNihIdkNhbGxQY2lDb25maWdMb2FkMzIsICZyZXRWYWwsICoodTY0ICopJmRzYSwgb2Zmc2V0LCAwKTsKKworCS8vIGdldFBhY2EoKS0+YWRqdXN0SG10Rm9yTm9PZlNwaW5Mb2Nrc0hlbGQoKTsKKworCSp2YWx1ZSA9IHJldFZhbC52YWx1ZTsKKworCXJldHVybiByZXRWYWwucmM7Cit9CisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3N0YXRpYyBpbmxpbmUgdTY0CUh2Q2FsbFBjaV9jb25maWdTdG9yZTgodTE2IGJ1c051bWJlciwgdTggc3ViQnVzTnVtYmVyLAorCQkJCQkgICAgICB1OCBkZXZpY2VJZCwgdTMyIG9mZnNldCwKKwkJCQkJICAgICAgdTggIHZhbHVlKQoreworCXN0cnVjdCBIdkNhbGxQY2lfRHNhQWRkciBkc2E7CisJdTY0IHJldFZhbDsKKworCSooKHU2NCopJmRzYSkgPSAwOwkJCQkKKworCWRzYS5idXNOdW1iZXIgPSBidXNOdW1iZXI7CisJZHNhLnN1YkJ1c051bWJlciA9IHN1YkJ1c051bWJlcjsKKwlkc2EuZGV2aWNlSWQgPSBkZXZpY2VJZDsKKworCXJldFZhbCA9IEh2Q2FsbDQoSHZDYWxsUGNpQ29uZmlnU3RvcmU4LCAqKHU2NCAqKSZkc2EsIG9mZnNldCwgdmFsdWUsIDApOworCisJLy8gZ2V0UGFjYSgpLT5hZGp1c3RIbXRGb3JOb09mU3BpbkxvY2tzSGVsZCgpOworCisJcmV0dXJuIHJldFZhbDsKK30KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorc3RhdGljIGlubGluZSB1NjQJSHZDYWxsUGNpX2NvbmZpZ1N0b3JlMTYodTE2IGJ1c051bWJlciwgdTggc3ViQnVzTnVtYmVyLAorCQkJCQkgICAgICB1OCBkZXZpY2VJZCwgdTMyIG9mZnNldCwKKwkJCQkJICAgICAgdTE2ICB2YWx1ZSkKK3sKKwlzdHJ1Y3QgSHZDYWxsUGNpX0RzYUFkZHIgZHNhOworCXU2NCByZXRWYWw7CisKKwkqKCh1NjQqKSZkc2EpID0gMDsJCQkJCisKKwlkc2EuYnVzTnVtYmVyID0gYnVzTnVtYmVyOworCWRzYS5zdWJCdXNOdW1iZXIgPSBzdWJCdXNOdW1iZXI7CisJZHNhLmRldmljZUlkID0gZGV2aWNlSWQ7CisKKwlyZXRWYWwgPSBIdkNhbGw0KEh2Q2FsbFBjaUNvbmZpZ1N0b3JlMTYsICoodTY0ICopJmRzYSwgb2Zmc2V0LCB2YWx1ZSwgMCk7CisKKwkvLyBnZXRQYWNhKCktPmFkanVzdEhtdEZvck5vT2ZTcGluTG9ja3NIZWxkKCk7CisKKwlyZXR1cm4gcmV0VmFsOworfQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitzdGF0aWMgaW5saW5lIHU2NAlIdkNhbGxQY2lfY29uZmlnU3RvcmUzMih1MTYgYnVzTnVtYmVyLCB1OCBzdWJCdXNOdW1iZXIsCisJCQkJCSAgICAgIHU4IGRldmljZUlkLCB1MzIgb2Zmc2V0LAorCQkJCQkgICAgICB1MzIgIHZhbHVlKQoreworCXN0cnVjdCBIdkNhbGxQY2lfRHNhQWRkciBkc2E7CisJdTY0IHJldFZhbDsKKworCSooKHU2NCopJmRzYSkgPSAwOwkJCQkKKworCWRzYS5idXNOdW1iZXIgPSBidXNOdW1iZXI7CisJZHNhLnN1YkJ1c051bWJlciA9IHN1YkJ1c051bWJlcjsKKwlkc2EuZGV2aWNlSWQgPSBkZXZpY2VJZDsKKworCXJldFZhbCA9IEh2Q2FsbDQoSHZDYWxsUGNpQ29uZmlnU3RvcmUzMiwgKih1NjQgKikmZHNhLCBvZmZzZXQsIHZhbHVlLCAwKTsKKworCS8vIGdldFBhY2EoKS0+YWRqdXN0SG10Rm9yTm9PZlNwaW5Mb2Nrc0hlbGQoKTsKKworCXJldHVybiByZXRWYWw7Cit9CisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3N0YXRpYyBpbmxpbmUgdTY0CUh2Q2FsbFBjaV9iYXJMb2FkOCh1MTYJYnVzTnVtYmVyUGFybSwKKwkJCQkJICAgdTgJCXN1YkJ1c1Bhcm0sCisJCQkJCSAgIHU4CQlkZXZpY2VJZFBhcm0sCisJCQkJCSAgIHU4CQliYXJOdW1iZXJQYXJtLAorCQkJCQkgICB1NjQJCW9mZnNldFBhcm0sCisJCQkJCSAgIHU4KgkJdmFsdWVQYXJtKQoreworCXN0cnVjdCBIdkNhbGxQY2lfRHNhQWRkciBkc2E7CisJc3RydWN0IEh2Q2FsbFBjaV9Mb2FkUmV0dXJuIHJldFZhbDsKKworCSooKHU2NCopJmRzYSkgPSAwOwkJCQkKKworCWRzYS5idXNOdW1iZXIgPSBidXNOdW1iZXJQYXJtOworCWRzYS5zdWJCdXNOdW1iZXIgPSBzdWJCdXNQYXJtOworCWRzYS5kZXZpY2VJZCA9IGRldmljZUlkUGFybTsKKwlkc2EuYmFyTnVtYmVyID0gYmFyTnVtYmVyUGFybTsKKworCUh2Q2FsbDNSZXQxNihIdkNhbGxQY2lCYXJMb2FkOCwgJnJldFZhbCwgKih1NjQgKikmZHNhLCBvZmZzZXRQYXJtLCAwKTsKKworCS8vIGdldFBhY2EoKS0+YWRqdXN0SG10Rm9yTm9PZlNwaW5Mb2Nrc0hlbGQoKTsKKworCSp2YWx1ZVBhcm0gPSByZXRWYWwudmFsdWU7CisKKwlyZXR1cm4gcmV0VmFsLnJjOworfQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitzdGF0aWMgaW5saW5lIHU2NAlIdkNhbGxQY2lfYmFyTG9hZDE2KHUxNglidXNOdW1iZXJQYXJtLAorCQkJCQkgICB1OAkJc3ViQnVzUGFybSwKKwkJCQkJICAgdTgJCWRldmljZUlkUGFybSwKKwkJCQkJICAgdTgJCWJhck51bWJlclBhcm0sCisJCQkJCSAgIHU2NAkJb2Zmc2V0UGFybSwKKwkJCQkJICAgdTE2KgkJdmFsdWVQYXJtKQoreworCXN0cnVjdCBIdkNhbGxQY2lfRHNhQWRkciBkc2E7CisJc3RydWN0IEh2Q2FsbFBjaV9Mb2FkUmV0dXJuIHJldFZhbDsKKworCSooKHU2NCopJmRzYSkgPSAwOwkJCQkKKworCWRzYS5idXNOdW1iZXIgPSBidXNOdW1iZXJQYXJtOworCWRzYS5zdWJCdXNOdW1iZXIgPSBzdWJCdXNQYXJtOworCWRzYS5kZXZpY2VJZCA9IGRldmljZUlkUGFybTsKKwlkc2EuYmFyTnVtYmVyID0gYmFyTnVtYmVyUGFybTsKKworCUh2Q2FsbDNSZXQxNihIdkNhbGxQY2lCYXJMb2FkMTYsICZyZXRWYWwsICoodTY0ICopJmRzYSwgb2Zmc2V0UGFybSwgMCk7CisKKwkvLyBnZXRQYWNhKCktPmFkanVzdEhtdEZvck5vT2ZTcGluTG9ja3NIZWxkKCk7CisKKwkqdmFsdWVQYXJtID0gcmV0VmFsLnZhbHVlOworCisJcmV0dXJuIHJldFZhbC5yYzsKK30KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorc3RhdGljIGlubGluZSB1NjQJSHZDYWxsUGNpX2JhckxvYWQzMih1MTYJYnVzTnVtYmVyUGFybSwKKwkJCQkJICAgdTgJCXN1YkJ1c1Bhcm0sCisJCQkJCSAgIHU4CQlkZXZpY2VJZFBhcm0sCisJCQkJCSAgIHU4CQliYXJOdW1iZXJQYXJtLAorCQkJCQkgICB1NjQJCW9mZnNldFBhcm0sCisJCQkJCSAgIHUzMioJCXZhbHVlUGFybSkKK3sKKwlzdHJ1Y3QgSHZDYWxsUGNpX0RzYUFkZHIgZHNhOworCXN0cnVjdCBIdkNhbGxQY2lfTG9hZFJldHVybiByZXRWYWw7CisKKwkqKCh1NjQqKSZkc2EpID0gMDsJCQkJCisKKwlkc2EuYnVzTnVtYmVyID0gYnVzTnVtYmVyUGFybTsKKwlkc2Euc3ViQnVzTnVtYmVyID0gc3ViQnVzUGFybTsKKwlkc2EuZGV2aWNlSWQgPSBkZXZpY2VJZFBhcm07CisJZHNhLmJhck51bWJlciA9IGJhck51bWJlclBhcm07CisKKwlIdkNhbGwzUmV0MTYoSHZDYWxsUGNpQmFyTG9hZDMyLCAmcmV0VmFsLCAqKHU2NCAqKSZkc2EsIG9mZnNldFBhcm0sIDApOworCisJLy8gZ2V0UGFjYSgpLT5hZGp1c3RIbXRGb3JOb09mU3BpbkxvY2tzSGVsZCgpOworCisJKnZhbHVlUGFybSA9IHJldFZhbC52YWx1ZTsKKworCXJldHVybiByZXRWYWwucmM7Cit9CisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3N0YXRpYyBpbmxpbmUgdTY0CUh2Q2FsbFBjaV9iYXJMb2FkNjQodTE2CWJ1c051bWJlclBhcm0sCisJCQkJCSAgIHU4CQlzdWJCdXNQYXJtLAorCQkJCQkgICB1OAkJZGV2aWNlSWRQYXJtLAorCQkJCQkgICB1OAkJYmFyTnVtYmVyUGFybSwKKwkJCQkJICAgdTY0CQlvZmZzZXRQYXJtLAorCQkJCQkgICB1NjQqCQl2YWx1ZVBhcm0pCit7CisJc3RydWN0IEh2Q2FsbFBjaV9Ec2FBZGRyIGRzYTsKKwlzdHJ1Y3QgSHZDYWxsUGNpX0xvYWRSZXR1cm4gcmV0VmFsOworCisJKigodTY0KikmZHNhKSA9IDA7CQkJCQorCisJZHNhLmJ1c051bWJlciA9IGJ1c051bWJlclBhcm07CisJZHNhLnN1YkJ1c051bWJlciA9IHN1YkJ1c1Bhcm07CisJZHNhLmRldmljZUlkID0gZGV2aWNlSWRQYXJtOworCWRzYS5iYXJOdW1iZXIgPSBiYXJOdW1iZXJQYXJtOworCisJSHZDYWxsM1JldDE2KEh2Q2FsbFBjaUJhckxvYWQ2NCwgJnJldFZhbCwgKih1NjQgKikmZHNhLCBvZmZzZXRQYXJtLCAwKTsKKworCS8vIGdldFBhY2EoKS0+YWRqdXN0SG10Rm9yTm9PZlNwaW5Mb2Nrc0hlbGQoKTsKKworCSp2YWx1ZVBhcm0gPSByZXRWYWwudmFsdWU7CisKKwlyZXR1cm4gcmV0VmFsLnJjOworfQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitzdGF0aWMgaW5saW5lIHU2NAlIdkNhbGxQY2lfYmFyU3RvcmU4KHUxNglidXNOdW1iZXJQYXJtLAorCQkJCQkgICAgdTgJCXN1YkJ1c1Bhcm0sCisJCQkJCSAgICB1OAkJZGV2aWNlSWRQYXJtLAorCQkJCQkgICAgdTgJCWJhck51bWJlclBhcm0sCisJCQkJCSAgICB1NjQJCW9mZnNldFBhcm0sCisJCQkJCSAgICB1OAkJdmFsdWVQYXJtKQoreworCXN0cnVjdCBIdkNhbGxQY2lfRHNhQWRkciBkc2E7CisJdTY0IHJldFZhbDsKKworCSooKHU2NCopJmRzYSkgPSAwOworCQkJCQorCWRzYS5idXNOdW1iZXIgPSBidXNOdW1iZXJQYXJtOworCWRzYS5zdWJCdXNOdW1iZXIgPSBzdWJCdXNQYXJtOworCWRzYS5kZXZpY2VJZCA9IGRldmljZUlkUGFybTsKKwlkc2EuYmFyTnVtYmVyID0gYmFyTnVtYmVyUGFybTsKKworCXJldFZhbCA9IEh2Q2FsbDQoSHZDYWxsUGNpQmFyU3RvcmU4LCAqKHU2NCAqKSZkc2EsIG9mZnNldFBhcm0sIHZhbHVlUGFybSwgMCk7CisKKwkvLyBnZXRQYWNhKCktPmFkanVzdEhtdEZvck5vT2ZTcGluTG9ja3NIZWxkKCk7CisKKwlyZXR1cm4gcmV0VmFsOworfQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitzdGF0aWMgaW5saW5lIHU2NAlIdkNhbGxQY2lfYmFyU3RvcmUxNih1MTYJYnVzTnVtYmVyUGFybSwKKwkJCQkJICAgICB1OAkJc3ViQnVzUGFybSwKKwkJCQkJICAgICB1OAkJZGV2aWNlSWRQYXJtLAorCQkJCQkgICAgIHU4CQliYXJOdW1iZXJQYXJtLAorCQkJCQkgICAgIHU2NAlvZmZzZXRQYXJtLAorCQkJCQkgICAgIHUxNgl2YWx1ZVBhcm0pCit7CisJc3RydWN0IEh2Q2FsbFBjaV9Ec2FBZGRyIGRzYTsKKwl1NjQgcmV0VmFsOworCisJKigodTY0KikmZHNhKSA9IDA7CisJCQkJCisJZHNhLmJ1c051bWJlciA9IGJ1c051bWJlclBhcm07CisJZHNhLnN1YkJ1c051bWJlciA9IHN1YkJ1c1Bhcm07CisJZHNhLmRldmljZUlkID0gZGV2aWNlSWRQYXJtOworCWRzYS5iYXJOdW1iZXIgPSBiYXJOdW1iZXJQYXJtOworCisJcmV0VmFsID0gSHZDYWxsNChIdkNhbGxQY2lCYXJTdG9yZTE2LCAqKHU2NCAqKSZkc2EsIG9mZnNldFBhcm0sIHZhbHVlUGFybSwgMCk7CisKKwkvLyBnZXRQYWNhKCktPmFkanVzdEhtdEZvck5vT2ZTcGluTG9ja3NIZWxkKCk7CisKKwlyZXR1cm4gcmV0VmFsOworfQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitzdGF0aWMgaW5saW5lIHU2NAlIdkNhbGxQY2lfYmFyU3RvcmUzMih1MTYJYnVzTnVtYmVyUGFybSwKKwkJCQkJICAgICB1OAkJc3ViQnVzUGFybSwKKwkJCQkJICAgICB1OAkJZGV2aWNlSWRQYXJtLAorCQkJCQkgICAgIHU4CQliYXJOdW1iZXJQYXJtLAorCQkJCQkgICAgIHU2NAlvZmZzZXRQYXJtLAorCQkJCQkgICAgIHUzMgl2YWx1ZVBhcm0pCit7CisJc3RydWN0IEh2Q2FsbFBjaV9Ec2FBZGRyIGRzYTsKKwl1NjQgcmV0VmFsOworCisJKigodTY0KikmZHNhKSA9IDA7CisJCQkJCisJZHNhLmJ1c051bWJlciA9IGJ1c051bWJlclBhcm07CisJZHNhLnN1YkJ1c051bWJlciA9IHN1YkJ1c1Bhcm07CisJZHNhLmRldmljZUlkID0gZGV2aWNlSWRQYXJtOworCWRzYS5iYXJOdW1iZXIgPSBiYXJOdW1iZXJQYXJtOworCisJcmV0VmFsID0gSHZDYWxsNChIdkNhbGxQY2lCYXJTdG9yZTMyLCAqKHU2NCAqKSZkc2EsIG9mZnNldFBhcm0sIHZhbHVlUGFybSwgMCk7CisKKwkvLyBnZXRQYWNhKCktPmFkanVzdEhtdEZvck5vT2ZTcGluTG9ja3NIZWxkKCk7CisKKwlyZXR1cm4gcmV0VmFsOworfQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitzdGF0aWMgaW5saW5lIHU2NAlIdkNhbGxQY2lfYmFyU3RvcmU2NCh1MTYJYnVzTnVtYmVyUGFybSwKKwkJCQkJICAgICB1OAkJc3ViQnVzUGFybSwKKwkJCQkJICAgICB1OAkJZGV2aWNlSWRQYXJtLAorCQkJCQkgICAgIHU4CQliYXJOdW1iZXJQYXJtLAorCQkJCQkgICAgIHU2NAlvZmZzZXRQYXJtLAorCQkJCQkgICAgIHU2NAl2YWx1ZVBhcm0pCit7CisJc3RydWN0IEh2Q2FsbFBjaV9Ec2FBZGRyIGRzYTsKKwl1NjQgcmV0VmFsOworCisJKigodTY0KikmZHNhKSA9IDA7CisJCQkJCisJZHNhLmJ1c051bWJlciA9IGJ1c051bWJlclBhcm07CisJZHNhLnN1YkJ1c051bWJlciA9IHN1YkJ1c1Bhcm07CisJZHNhLmRldmljZUlkID0gZGV2aWNlSWRQYXJtOworCWRzYS5iYXJOdW1iZXIgPSBiYXJOdW1iZXJQYXJtOworCisJcmV0VmFsID0gSHZDYWxsNChIdkNhbGxQY2lCYXJTdG9yZTY0LCAqKHU2NCAqKSZkc2EsIG9mZnNldFBhcm0sIHZhbHVlUGFybSwgMCk7CisKKwkvLyBnZXRQYWNhKCktPmFkanVzdEhtdEZvck5vT2ZTcGluTG9ja3NIZWxkKCk7CisKKwlyZXR1cm4gcmV0VmFsOworfQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitzdGF0aWMgaW5saW5lIHU2NAlIdkNhbGxQY2lfZW9pKHUxNglidXNOdW1iZXJQYXJtLAorCQkJCSAgICAgIHU4CXN1YkJ1c1Bhcm0sICAKKwkJCQkgICAgICB1OAlkZXZpY2VJZFBhcm0pCit7CisJc3RydWN0IEh2Q2FsbFBjaV9Ec2FBZGRyIGRzYTsKKwlzdHJ1Y3QgSHZDYWxsUGNpX0xvYWRSZXR1cm4gcmV0VmFsOworCisJKigodTY0KikmZHNhKSA9IDA7CisKKwlkc2EuYnVzTnVtYmVyID0gYnVzTnVtYmVyUGFybTsKKwlkc2Euc3ViQnVzTnVtYmVyID0gc3ViQnVzUGFybTsKKwlkc2EuZGV2aWNlSWQgPSBkZXZpY2VJZFBhcm07CisKKwlIdkNhbGwxUmV0MTYoSHZDYWxsUGNpRW9pLCAmcmV0VmFsLCAqKHU2NCopJmRzYSk7CisKKwkvLyBnZXRQYWNhKCktPmFkanVzdEhtdEZvck5vT2ZTcGluTG9ja3NIZWxkKCk7CisKKwlyZXR1cm4gcmV0VmFsLnJjOworfQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitzdGF0aWMgaW5saW5lIHU2NAlIdkNhbGxQY2lfZ2V0QmFyUGFybXModTE2CWJ1c051bWJlclBhcm0sCisJCQkJCSAgICAgIHU4CXN1YkJ1c1Bhcm0sICAKKwkJCQkJICAgICAgdTgJZGV2aWNlSWRQYXJtLAorCQkJCQkgICAgICB1OAliYXJOdW1iZXJQYXJtLAorCQkJCQkgICAgICB1NjQJcGFybXMsCisJCQkJCSAgICAgIHUzMglzaXplb2ZQYXJtcykKK3sKKwlzdHJ1Y3QgSHZDYWxsUGNpX0RzYUFkZHIgZHNhOworCXU2NCByZXRWYWw7CisKKwkqKCh1NjQqKSZkc2EpID0gMDsKKworCWRzYS5idXNOdW1iZXIgPSBidXNOdW1iZXJQYXJtOworCWRzYS5zdWJCdXNOdW1iZXIgPSBzdWJCdXNQYXJtOworCWRzYS5kZXZpY2VJZCA9IGRldmljZUlkUGFybTsKKwlkc2EuYmFyTnVtYmVyID0gYmFyTnVtYmVyUGFybTsKKworCXJldFZhbCA9IEh2Q2FsbDMoSHZDYWxsUGNpR2V0QmFyUGFybXMsICoodTY0KikmZHNhLCBwYXJtcywgc2l6ZW9mUGFybXMpOworCisJLy8gZ2V0UGFjYSgpLT5hZGp1c3RIbXRGb3JOb09mU3BpbkxvY2tzSGVsZCgpOworCisJcmV0dXJuIHJldFZhbDsKK30KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorc3RhdGljIGlubGluZSB1NjQJSHZDYWxsUGNpX21hc2tGaXNyKHUxNglidXNOdW1iZXJQYXJtLAorCQkJCQkgICB1OAlzdWJCdXNQYXJtLCAgCisJCQkJCSAgIHU4CWRldmljZUlkUGFybSwKKwkJCQkJICAgdTY0CWZpc3JNYXNrKQoreworCXN0cnVjdCBIdkNhbGxQY2lfRHNhQWRkciBkc2E7CisJdTY0IHJldFZhbDsKKworCSooKHU2NCopJmRzYSkgPSAwOwkJCisKKwlkc2EuYnVzTnVtYmVyID0gYnVzTnVtYmVyUGFybTsKKwlkc2Euc3ViQnVzTnVtYmVyID0gc3ViQnVzUGFybTsKKwlkc2EuZGV2aWNlSWQgPSBkZXZpY2VJZFBhcm07CisKKwlyZXRWYWwgPSBIdkNhbGwyKEh2Q2FsbFBjaU1hc2tGaXNyLCAqKHU2NCopJmRzYSwgZmlzck1hc2spOworCisJLy8gZ2V0UGFjYSgpLT5hZGp1c3RIbXRGb3JOb09mU3BpbkxvY2tzSGVsZCgpOworCisJcmV0dXJuIHJldFZhbDsKK30KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorc3RhdGljIGlubGluZSB1NjQJSHZDYWxsUGNpX3VubWFza0Zpc3IodTE2CWJ1c051bWJlclBhcm0sCisJCQkJCSAgICAgdTgJCXN1YkJ1c1Bhcm0sICAKKwkJCQkJICAgICB1OAkJZGV2aWNlSWRQYXJtLAorCQkJCQkgICAgIHU2NAlmaXNyTWFzaykKK3sKKwlzdHJ1Y3QgSHZDYWxsUGNpX0RzYUFkZHIgZHNhOworCXU2NCByZXRWYWw7CisKKwkqKCh1NjQqKSZkc2EpID0gMDsJCQorCisJZHNhLmJ1c051bWJlciA9IGJ1c051bWJlclBhcm07CisJZHNhLnN1YkJ1c051bWJlciA9IHN1YkJ1c1Bhcm07CisJZHNhLmRldmljZUlkID0gZGV2aWNlSWRQYXJtOworCisJcmV0VmFsID0gSHZDYWxsMihIdkNhbGxQY2lVbm1hc2tGaXNyLCAqKHU2NCopJmRzYSwgZmlzck1hc2spOworCisJLy8gZ2V0UGFjYSgpLT5hZGp1c3RIbXRGb3JOb09mU3BpbkxvY2tzSGVsZCgpOworCisJcmV0dXJuIHJldFZhbDsKK30KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorc3RhdGljIGlubGluZSB1NjQJSHZDYWxsUGNpX3NldFNsb3RSZXNldCh1MTYJCWJ1c051bWJlclBhcm0sCisJCQkJCSAgICAgICB1OAkJc3ViQnVzUGFybSwKKwkJCQkJICAgICAgIHU4CQlkZXZpY2VJZFBhcm0sCisJCQkJCSAgICAgICB1NjQJCW9uTm90T2ZmKQoreworCXN0cnVjdCBIdkNhbGxQY2lfRHNhQWRkciBkc2E7CisJdTY0IHJldFZhbDsKKworCSooKHU2NCopJmRzYSkgPSAwOworCisJZHNhLmJ1c051bWJlciA9IGJ1c051bWJlclBhcm07CisJZHNhLnN1YkJ1c051bWJlciA9IHN1YkJ1c1Bhcm07CisJZHNhLmRldmljZUlkID0gZGV2aWNlSWRQYXJtOworCisJcmV0VmFsID0gSHZDYWxsMihIdkNhbGxQY2lTZXRTbG90UmVzZXQsICoodTY0KikmZHNhLCBvbk5vdE9mZik7CisKKwkvLyBnZXRQYWNhKCktPmFkanVzdEhtdEZvck5vT2ZTcGluTG9ja3NIZWxkKCk7CisKKwlyZXR1cm4gcmV0VmFsOworfQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitzdGF0aWMgaW5saW5lIHU2NAlIdkNhbGxQY2lfZ2V0RGV2aWNlSW5mbyh1MTYJYnVzTnVtYmVyUGFybSwKKwkJCQkJCXU4CXN1YkJ1c1Bhcm0sICAKKwkJCQkJCXU4CWRldmljZU51bWJlclBhcm0sCisJCQkJCQl1NjQgICAgIHBhcm1zLAorCQkJCQkJdTMyCXNpemVvZlBhcm1zKQoreworCXN0cnVjdCBIdkNhbGxQY2lfRHNhQWRkciBkc2E7CisJdTY0IHJldFZhbDsKKworCSooKHU2NCopJmRzYSkgPSAwOworCisJZHNhLmJ1c051bWJlciA9IGJ1c051bWJlclBhcm07CisJZHNhLnN1YkJ1c051bWJlciA9IHN1YkJ1c1Bhcm07CisJZHNhLmRldmljZUlkID0gZGV2aWNlTnVtYmVyUGFybSA8PCA0OworCisJcmV0VmFsID0gSHZDYWxsMyhIdkNhbGxQY2lHZXREZXZpY2VJbmZvLCAqKHU2NCopJmRzYSwgcGFybXMsIHNpemVvZlBhcm1zKTsKKworCS8vIGdldFBhY2EoKS0+YWRqdXN0SG10Rm9yTm9PZlNwaW5Mb2Nrc0hlbGQoKTsKKworCXJldHVybiByZXRWYWw7Cit9CisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3N0YXRpYyBpbmxpbmUgdTY0CUh2Q2FsbFBjaV9tYXNrSW50ZXJydXB0cyh1MTYJYnVzTnVtYmVyUGFybSwKKwkJCQkJCSB1OAlzdWJCdXNQYXJtLCAgCisJCQkJCQkgdTgJZGV2aWNlSWRQYXJtLAorCQkJCQkJIHU2NAlpbnRlcnJ1cHRNYXNrKQoreworCXN0cnVjdCBIdkNhbGxQY2lfRHNhQWRkciBkc2E7CisJdTY0IHJldFZhbDsKKworCSooKHU2NCopJmRzYSkgPSAwOwkJCisKKwlkc2EuYnVzTnVtYmVyID0gYnVzTnVtYmVyUGFybTsKKwlkc2Euc3ViQnVzTnVtYmVyID0gc3ViQnVzUGFybTsKKwlkc2EuZGV2aWNlSWQgPSBkZXZpY2VJZFBhcm07CisKKwlyZXRWYWwgPSBIdkNhbGwyKEh2Q2FsbFBjaU1hc2tJbnRlcnJ1cHRzLCAqKHU2NCopJmRzYSwgaW50ZXJydXB0TWFzayk7CisKKwkvLyBnZXRQYWNhKCktPmFkanVzdEhtdEZvck5vT2ZTcGluTG9ja3NIZWxkKCk7CisKKwlyZXR1cm4gcmV0VmFsOworfQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitzdGF0aWMgaW5saW5lIHU2NAlIdkNhbGxQY2lfdW5tYXNrSW50ZXJydXB0cyh1MTYJYnVzTnVtYmVyUGFybSwKKwkJCQkJCSB1OAkJc3ViQnVzUGFybSwgIAorCQkJCQkJIHU4CQlkZXZpY2VJZFBhcm0sCisJCQkJCQkgdTY0CQlpbnRlcnJ1cHRNYXNrKQoreworCXN0cnVjdCBIdkNhbGxQY2lfRHNhQWRkciBkc2E7CisJdTY0IHJldFZhbDsKKworCSooKHU2NCopJmRzYSkgPSAwOwkJCisKKwlkc2EuYnVzTnVtYmVyID0gYnVzTnVtYmVyUGFybTsKKwlkc2Euc3ViQnVzTnVtYmVyID0gc3ViQnVzUGFybTsKKwlkc2EuZGV2aWNlSWQgPSBkZXZpY2VJZFBhcm07CisKKwlyZXRWYWwgPSBIdkNhbGwyKEh2Q2FsbFBjaVVubWFza0ludGVycnVwdHMsICoodTY0KikmZHNhLCBpbnRlcnJ1cHRNYXNrKTsKKworCS8vIGdldFBhY2EoKS0+YWRqdXN0SG10Rm9yTm9PZlNwaW5Mb2Nrc0hlbGQoKTsKKworCXJldHVybiByZXRWYWw7Cit9CisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworc3RhdGljIGlubGluZSB1NjQJSHZDYWxsUGNpX2dldEJ1c1VuaXRJbmZvKHUxNgkJYnVzTnVtYmVyUGFybSwKKwkJCQkJCSB1OAkJc3ViQnVzUGFybSwgIAorCQkJCQkJIHU4CQlkZXZpY2VJZFBhcm0sCisJCQkJCQkgdTY0ICAgICAgICAgICAgcGFybXMsCisJCQkJCQkgdTMyCQlzaXplb2ZQYXJtcykKK3sKKwlzdHJ1Y3QgSHZDYWxsUGNpX0RzYUFkZHIgZHNhOworCXU2NCByZXRWYWw7CisKKwkqKCh1NjQqKSZkc2EpID0gMDsJCQorCisJZHNhLmJ1c051bWJlciA9IGJ1c051bWJlclBhcm07CisJZHNhLnN1YkJ1c051bWJlciA9IHN1YkJ1c1Bhcm07CisJZHNhLmRldmljZUlkID0gZGV2aWNlSWRQYXJtOworCisJcmV0VmFsID0gSHZDYWxsMyhIdkNhbGxQY2lHZXRCdXNVbml0SW5mbywgKih1NjQqKSZkc2EsIHBhcm1zLCBzaXplb2ZQYXJtcyk7CisKKwkvLyBnZXRQYWNhKCktPmFkanVzdEhtdEZvck5vT2ZTcGluTG9ja3NIZWxkKCk7CisKKwlyZXR1cm4gcmV0VmFsOworfQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3N0YXRpYyBpbmxpbmUgaW50IEh2Q2FsbFBjaV9nZXRCdXNWcGQodTE2IGJ1c051bVBhcm0sIHU2NCBkZXN0UGFybSwgdTE2IHNpemVQYXJtKQoreworCWludCB4UmV0U2l6ZTsKKwl1NjQgeFJjID0gSHZDYWxsNChIdkNhbGxQY2lHZXRDYXJkVnBkLCBidXNOdW1QYXJtLCBkZXN0UGFybSwgc2l6ZVBhcm0sIEh2Q2FsbFBjaV9CdXNWcGQpOworCS8vIGdldFBhY2EoKS0+YWRqdXN0SG10Rm9yTm9PZlNwaW5Mb2Nrc0hlbGQoKTsKKwlpZiAoeFJjID09IC0xKQorCQl4UmV0U2l6ZSA9IC0xOworCWVsc2UKKwkJeFJldFNpemUgPSB4UmMgJiAweEZGRkY7CisJcmV0dXJuIHhSZXRTaXplOworfQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3N0YXRpYyBpbmxpbmUgaW50IEh2Q2FsbFBjaV9nZXRCdXNBZGFwdGVyVnBkKHUxNiBidXNOdW1QYXJtLCB1NjQgZGVzdFBhcm0sIHUxNiBzaXplUGFybSkKK3sKKwlpbnQgeFJldFNpemU7CisJdTY0IHhSYyA9IEh2Q2FsbDQoSHZDYWxsUGNpR2V0Q2FyZFZwZCwgYnVzTnVtUGFybSwgZGVzdFBhcm0sIHNpemVQYXJtLCBIdkNhbGxQY2lfQnVzQWRhcHRlclZwZCk7CisJLy8gZ2V0UGFjYSgpLT5hZGp1c3RIbXRGb3JOb09mU3BpbkxvY2tzSGVsZCgpOworCWlmICh4UmMgPT0gLTEpCisJCXhSZXRTaXplID0gLTE7CisJZWxzZQorCQl4UmV0U2l6ZSA9IHhSYyAmIDB4RkZGRjsKKwlyZXR1cm4geFJldFNpemU7Cit9CisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyNlbmRpZiAvKiBfSFZDQUxMUENJX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvSHZDYWxsU2MuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvSHZDYWxsU2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWEyNTg0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvaVNlcmllcy9IdkNhbGxTYy5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBIdkNhbGxTYy5oCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgIE1pa2UgQ29ycmlnYW4gSUJNIENvcnBvcmF0aW9uCisgKiAKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiAKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKiAKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKi8KKyNpZm5kZWYgX0hWQ0FMTFNDX0gKKyNkZWZpbmUgX0hWQ0FMTFNDX0gKKworI2luY2x1ZGUgPGFzbS9pU2VyaWVzL0h2VHlwZXMuaD4KKworI2RlZmluZSBIdkNhbGxCYXNlCQkweDgwMDAwMDAwMDAwMDAwMDB1bAorI2RlZmluZSBIdkNhbGxDYwkJMHg4MDAxMDAwMDAwMDAwMDAwdWwKKyNkZWZpbmUgSHZDYWxsQ2ZnCQkweDgwMDIwMDAwMDAwMDAwMDB1bAorI2RlZmluZSBIdkNhbGxFdmVudAkJMHg4MDAzMDAwMDAwMDAwMDAwdWwKKyNkZWZpbmUgSHZDYWxsSHB0CQkweDgwMDQwMDAwMDAwMDAwMDB1bAorI2RlZmluZSBIdkNhbGxQY2kJCTB4ODAwNTAwMDAwMDAwMDAwMHVsCisjZGVmaW5lIEh2Q2FsbFNtCQkweDgwMDcwMDAwMDAwMDAwMDB1bAorI2RlZmluZSBIdkNhbGxYbQkJMHg4MDA5MDAwMDAwMDAwMDAwdWwKKwordTY0IEh2Q2FsbDAoIHU2NCApOwordTY0IEh2Q2FsbDEoIHU2NCwgdTY0ICk7Cit1NjQgSHZDYWxsMiggdTY0LCB1NjQsIHU2NCApOwordTY0IEh2Q2FsbDMoIHU2NCwgdTY0LCB1NjQsIHU2NCApOwordTY0IEh2Q2FsbDQoIHU2NCwgdTY0LCB1NjQsIHU2NCwgdTY0ICk7Cit1NjQgSHZDYWxsNSggdTY0LCB1NjQsIHU2NCwgdTY0LCB1NjQsIHU2NCApOwordTY0IEh2Q2FsbDYoIHU2NCwgdTY0LCB1NjQsIHU2NCwgdTY0LCB1NjQsIHU2NCApOwordTY0IEh2Q2FsbDcoIHU2NCwgdTY0LCB1NjQsIHU2NCwgdTY0LCB1NjQsIHU2NCwgdTY0ICk7CisKK3U2NCBIdkNhbGwwUmV0MTYoIHU2NCwgdm9pZCAqICk7Cit1NjQgSHZDYWxsMVJldDE2KCB1NjQsIHZvaWQgKiwgdTY0ICk7Cit1NjQgSHZDYWxsMlJldDE2KCB1NjQsIHZvaWQgKiwgdTY0LCB1NjQgKTsKK3U2NCBIdkNhbGwzUmV0MTYoIHU2NCwgdm9pZCAqLCB1NjQsIHU2NCwgdTY0ICk7Cit1NjQgSHZDYWxsNFJldDE2KCB1NjQsIHZvaWQgKiwgdTY0LCB1NjQsIHU2NCwgdTY0ICk7Cit1NjQgSHZDYWxsNVJldDE2KCB1NjQsIHZvaWQgKiwgdTY0LCB1NjQsIHU2NCwgdTY0LCB1NjQgKTsKK3U2NCBIdkNhbGw2UmV0MTYoIHU2NCwgdm9pZCAqLCB1NjQsIHU2NCwgdTY0LCB1NjQsIHU2NCwgdTY0ICk7Cit1NjQgSHZDYWxsN1JldDE2KCB1NjQsIHZvaWQgKiwgdTY0LCB1NjQgLHU2NCAsdTY0ICx1NjQgLHU2NCAsdTY0ICk7CisKKyNlbmRpZiAvKiBfSFZDQUxMU0NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvaVNlcmllcy9IdkNhbGxTbS5oIGIvaW5jbHVkZS9hc20tcHBjNjQvaVNlcmllcy9IdkNhbGxTbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwNTBjOTQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL0h2Q2FsbFNtLmgKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIEh2Q2FsbFNtLmgKKyAqIENvcHlyaWdodCAoQykgMjAwMSAgTWlrZSBDb3JyaWdhbiBJQk0gQ29ycG9yYXRpb24KKyAqIAorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIAorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqIAorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqLworI2lmbmRlZiBfSFZDQUxMU01fSAorI2RlZmluZSBfSFZDQUxMU01fSAorCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLwlUaGlzIGZpbGUgY29udGFpbnMgdGhlICJoeXBlcnZpc29yIGNhbGwiIGludGVyZmFjZSB3aGljaCBpcyB1c2VkIHRvCisvLwlkcml2ZSB0aGUgaHlwZXJ2aXNvciBmcm9tIHRoZSBPUy4KKy8vCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBTdGFuZGFyZCBJbmNsdWRlcworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjaW5jbHVkZSA8YXNtL2lTZXJpZXMvSHZDYWxsU2MuaD4KKyNpbmNsdWRlIDxhc20vaVNlcmllcy9IdlR5cGVzLmg+CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIENvbnN0YW50cworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjZGVmaW5lIEh2Q2FsbFNtR2V0NjRCaXRzT2ZBY2Nlc3NNYXAJSHZDYWxsU20gICsgMTEKKworCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3N0YXRpYyBpbmxpbmUgdTY0CQlIdkNhbGxTbV9nZXQ2NEJpdHNPZkFjY2Vzc01hcCgKKwkJCQkJSHZMcEluZGV4IGxwSW5kZXgsIHU2NCBpbmRleEludG9CaXRNYXAgKQoreworCXU2NCByZXR2YWwgPSBIdkNhbGwyKEh2Q2FsbFNtR2V0NjRCaXRzT2ZBY2Nlc3NNYXAsIGxwSW5kZXgsCisJCQkgICAgIGluZGV4SW50b0JpdE1hcCApOworCS8vIGdldFBhY2EoKS0+YWRqdXN0SG10Rm9yTm9PZlNwaW5Mb2Nrc0hlbGQoKTsKKwlyZXR1cm4gcmV0dmFsOworfQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjZW5kaWYgLyogX0hWQ0FMTFNNX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvSHZDYWxsWG0uaCBiL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvSHZDYWxsWG0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmI4OThmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvaVNlcmllcy9IdkNhbGxYbS5oCkBAIC0wLDAgKzEsOTUgQEAKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8JCQkJCQkJIEhlYWRlciBGaWxlIElkCisvLyBOYW1lX19fX19fX19fX19fX186CUh2Q2FsbFhtLkgKKy8vCisvLyBEZXNjcmlwdGlvbl9fX19fX186CisvLworLy8JVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSAiaHlwZXJ2aXNvciBjYWxsIiBpbnRlcmZhY2Ugd2hpY2ggaXMgdXNlZCB0bworLy8JZHJpdmUgdGhlIGh5cGVydmlzb3IgZnJvbSBTTElDLgorLy8KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorI2lmbmRlZiBfSFZDQUxMWE1fSAorI2RlZmluZSBfSFZDQUxMWE1fSAorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEZvcndhcmQgZGVjbGFyYXRpb25zIAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gU3RhbmRhcmQgSW5jbHVkZXMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorI2luY2x1ZGUgPGFzbS9pU2VyaWVzL0h2Q2FsbFNjLmg+CisjaW5jbHVkZSA8YXNtL2lTZXJpZXMvSHZUeXBlcy5oPgorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBDb25zdGFudHMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI2RlZmluZSBIdkNhbGxYbUdldFRjZVRhYmxlUGFybXMJSHZDYWxsWG0gKyAgMAorI2RlZmluZSBIdkNhbGxYbVRlc3RCdXMJCQlIdkNhbGxYbSArICAxCisjZGVmaW5lIEh2Q2FsbFhtQ29ubmVjdEJ1c1VuaXQJCUh2Q2FsbFhtICsgIDIKKyNkZWZpbmUgSHZDYWxsWG1Mb2FkVG9kCQkJSHZDYWxsWG0gKyAgOAorI2RlZmluZSBIdkNhbGxYbVRlc3RCdXNVbml0CQlIdkNhbGxYbSArICA5CisjZGVmaW5lIEh2Q2FsbFhtU2V0VGNlCQkJSHZDYWxsWG0gKyAxMQorI2RlZmluZSBIdkNhbGxYbVNldFRjZXMJCQlIdkNhbGxYbSArIDEzCisKKworCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3N0YXRpYyBpbmxpbmUgdm9pZAkJSHZDYWxsWG1fZ2V0VGNlVGFibGVQYXJtcyh1NjQgY2IpCit7CisJSHZDYWxsMShIdkNhbGxYbUdldFRjZVRhYmxlUGFybXMsIGNiKTsKKwkvLyBnZXRQYWNhKCktPmFkanVzdEhtdEZvck5vT2ZTcGluTG9ja3NIZWxkKCk7Cit9CisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3N0YXRpYyBpbmxpbmUgdTY0CQlIdkNhbGxYbV9zZXRUY2UodTY0IHRjZVRhYmxlVG9rZW4sIHU2NCB0Y2VPZmZzZXQsIHU2NCB0Y2UpCit7CQorCXU2NCByZXR2YWwgPSBIdkNhbGwzKEh2Q2FsbFhtU2V0VGNlLCB0Y2VUYWJsZVRva2VuLCB0Y2VPZmZzZXQsIHRjZSApOworCS8vIGdldFBhY2EoKS0+YWRqdXN0SG10Rm9yTm9PZlNwaW5Mb2Nrc0hlbGQoKTsKKwlyZXR1cm4gcmV0dmFsOworfQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitzdGF0aWMgaW5saW5lIHU2NAkJSHZDYWxsWG1fc2V0VGNlcyh1NjQgdGNlVGFibGVUb2tlbiwgdTY0IHRjZU9mZnNldCwgdTY0IG51bVRjZXMsIHU2NCB0Y2UxLCB1NjQgdGNlMiwgdTY0IHRjZTMsIHU2NCB0Y2U0KQorewkKKwl1NjQgcmV0dmFsID0gSHZDYWxsNyhIdkNhbGxYbVNldFRjZXMsIHRjZVRhYmxlVG9rZW4sIHRjZU9mZnNldCwgbnVtVGNlcywKKwkJCSAgICAgdGNlMSwgdGNlMiwgdGNlMywgdGNlNCApOworCS8vIGdldFBhY2EoKS0+YWRqdXN0SG10Rm9yTm9PZlNwaW5Mb2Nrc0hlbGQoKTsKKwlyZXR1cm4gcmV0dmFsOworfQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorc3RhdGljIGlubGluZSB1NjQJSHZDYWxsWG1fdGVzdEJ1cyh1MTYgYnVzTnVtYmVyKQoreworCXU2NCByZXRWYWwgPSBIdkNhbGwxKEh2Q2FsbFhtVGVzdEJ1cywgYnVzTnVtYmVyKTsKKwkvLyBnZXRQYWNhKCktPmFkanVzdEhtdEZvck5vT2ZTcGluTG9ja3NIZWxkKCk7CisJcmV0dXJuIHJldFZhbDsKK30KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorc3RhdGljIGlubGluZSB1NjQJSHZDYWxsWG1fdGVzdEJ1c1VuaXQodTE2IGJ1c051bWJlciwgdTggc3ViQnVzTnVtYmVyLCB1OCBkZXZpY2VJZCkKK3sKKwl1NjQgYnVzVW5pdE51bWJlciA9IChzdWJCdXNOdW1iZXIgPDwgOCkgfCBkZXZpY2VJZDsKKwl1NjQgcmV0VmFsID0gSHZDYWxsMihIdkNhbGxYbVRlc3RCdXNVbml0LCBidXNOdW1iZXIsIGJ1c1VuaXROdW1iZXIpOworCS8vIGdldFBhY2EoKS0+YWRqdXN0SG10Rm9yTm9PZlNwaW5Mb2Nrc0hlbGQoKTsKKwlyZXR1cm4gcmV0VmFsOworfQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitzdGF0aWMgaW5saW5lIHU2NAlIdkNhbGxYbV9jb25uZWN0QnVzVW5pdCh1MTYgYnVzTnVtYmVyLCB1OCBzdWJCdXNOdW1iZXIsIHU4IGRldmljZUlkLAorCQkJCQkJdTY0IGludGVycnVwdFRva2VuKQoreworCXU2NCBidXNVbml0TnVtYmVyID0gKHN1YkJ1c051bWJlciA8PCA4KSB8IGRldmljZUlkOworCXU2NCBxdWV1ZUluZGV4ID0gMDsgLy8gSHZMcENvbmZpZzo6bWFwRHNhVG9RdWV1ZUluZGV4KEh2THBEU0EoYnVzTnVtYmVyLCB4Qm9hcmQsIHhDYXJkKSk7ICAKKworCXU2NCByZXRWYWwgPSBIdkNhbGw1KEh2Q2FsbFhtQ29ubmVjdEJ1c1VuaXQsIGJ1c051bWJlciwgYnVzVW5pdE51bWJlciwKKwkJCSAgICAgaW50ZXJydXB0VG9rZW4sIDAsIHF1ZXVlSW5kZXgpOworCS8vIGdldFBhY2EoKS0+YWRqdXN0SG10Rm9yTm9PZlNwaW5Mb2Nrc0hlbGQoKTsKKwlyZXR1cm4gcmV0VmFsOworfQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitzdGF0aWMgaW5saW5lIHU2NAlIdkNhbGxYbV9sb2FkVG9kKHZvaWQpCit7CisJdTY0IHJldFZhbCA9IEh2Q2FsbDAoSHZDYWxsWG1Mb2FkVG9kKTsKKwkvLyBnZXRQYWNhKCktPmFkanVzdEhtdEZvck5vT2ZTcGluTG9ja3NIZWxkKCk7CisJcmV0dXJuIHJldFZhbDsKK30KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjZW5kaWYgLyogX0hWQ0FMTFhNX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvSHZMcENvbmZpZy5oIGIvaW5jbHVkZS9hc20tcHBjNjQvaVNlcmllcy9IdkxwQ29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRiZDcwZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvSHZMcENvbmZpZy5oCkBAIC0wLDAgKzEsMjgwIEBACisvKgorICogSHZMcENvbmZpZy5oCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgIE1pa2UgQ29ycmlnYW4gSUJNIENvcnBvcmF0aW9uCisgKiAKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiAKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKiAKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKi8KKyNpZm5kZWYgX0hWTFBDT05GSUdfSAorI2RlZmluZSBfSFZMUENPTkZJR19ICisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gICAgICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGludGVyZmFjZSB0byB0aGUgTFBBUiBjb25maWd1cmF0aW9uIGRhdGEKKy8vICB0byBkZXRlcm1pbmUgd2hpY2ggcmVzb3VyY2VzIHNob3VsZCBiZSBhbGxvY2F0ZWQgdG8gZWFjaCBwYXJ0aXRpb24uCisvLworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworI2luY2x1ZGUgPGFzbS9pU2VyaWVzL0h2Q2FsbENmZy5oPgorI2luY2x1ZGUgPGFzbS9pU2VyaWVzL0h2VHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vaVNlcmllcy9JdExwTmFjYS5oPgorI2luY2x1ZGUgPGFzbS9pU2VyaWVzL0xwYXJEYXRhLmg+CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gQ29uc3RhbnRzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZXh0ZXJuIEh2THBJbmRleCBIdkxwQ29uZmlnX2dldExwSW5kZXhfb3V0bGluZSh2b2lkKTsKKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitzdGF0aWMgaW5saW5lIEh2THBJbmRleAlIdkxwQ29uZmlnX2dldExwSW5kZXgodm9pZCkKK3sKKwlyZXR1cm4gaXRMcE5hY2EueExwSW5kZXg7Cit9CisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3N0YXRpYyBpbmxpbmUgSHZMcEluZGV4CUh2THBDb25maWdfZ2V0UHJpbWFyeUxwSW5kZXgodm9pZCkKK3sKKwlyZXR1cm4gaXRMcE5hY2EueFByaW1hcnlMcEluZGV4OworfQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorc3RhdGljIGlubGluZSBIdkxwSW5kZXgJSHZMcENvbmZpZ19nZXRMcHModm9pZCkKK3sKKwlyZXR1cm4gSHZDYWxsQ2ZnX2dldExwcygpOworfQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorc3RhdGljIGlubGluZSBIdkxwSW5kZXhNYXAJSHZMcENvbmZpZ19nZXRBY3RpdmVMcE1hcCh2b2lkKQoreworCXJldHVybiBIdkNhbGxDZmdfZ2V0QWN0aXZlTHBNYXAoKTsKK30KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3N0YXRpYyBpbmxpbmUgdTY0CQlIdkxwQ29uZmlnX2dldFN5c3RlbU1zTWVncyh2b2lkKQoreworCXJldHVybiBIdkNhbGxDZmdfZ2V0U3lzdGVtTXNDaHVua3MoKSAvIEhWQ0hVTktTUEVSTUVHOworfQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorc3RhdGljIGlubGluZSB1NjQJCUh2THBDb25maWdfZ2V0U3lzdGVtTXNDaHVua3Modm9pZCkKK3sKKwlyZXR1cm4gSHZDYWxsQ2ZnX2dldFN5c3RlbU1zQ2h1bmtzKCk7Cit9CisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitzdGF0aWMgaW5saW5lIHU2NAkJSHZMcENvbmZpZ19nZXRTeXN0ZW1Nc1BhZ2VzKHZvaWQpCit7CisJcmV0dXJuIEh2Q2FsbENmZ19nZXRTeXN0ZW1Nc0NodW5rcygpICogSFZQQUdFU1BFUkNIVU5LOworfQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitzdGF0aWMgaW5saW5lIHU2NAkJSHZMcENvbmZpZ19nZXRNc01lZ3Modm9pZCkKK3sKKwlyZXR1cm4gSHZDYWxsQ2ZnX2dldE1zQ2h1bmtzKEh2THBDb25maWdfZ2V0THBJbmRleCgpLEh2Q2FsbENmZ19DdXIpIC8gSFZDSFVOS1NQRVJNRUc7Cit9CisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3N0YXRpYyBpbmxpbmUgdTY0CQlIdkxwQ29uZmlnX2dldE1zQ2h1bmtzKHZvaWQpCit7CisJcmV0dXJuIEh2Q2FsbENmZ19nZXRNc0NodW5rcyhIdkxwQ29uZmlnX2dldExwSW5kZXgoKSxIdkNhbGxDZmdfQ3VyKTsKK30KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorc3RhdGljIGlubGluZSB1NjQJCUh2THBDb25maWdfZ2V0TXNQYWdlcyh2b2lkKQoreworCXJldHVybiBIdkNhbGxDZmdfZ2V0TXNDaHVua3MoSHZMcENvbmZpZ19nZXRMcEluZGV4KCksSHZDYWxsQ2ZnX0N1cikgKiBIVlBBR0VTUEVSQ0hVTks7Cit9CisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3N0YXRpYyBpbmxpbmUgdTY0CQlIdkxwQ29uZmlnX2dldE1pbk1zTWVncyh2b2lkKQoreworCXJldHVybiBIdkNhbGxDZmdfZ2V0TXNDaHVua3MoSHZMcENvbmZpZ19nZXRMcEluZGV4KCksSHZDYWxsQ2ZnX01pbikgLyBIVkNIVU5LU1BFUk1FRzsKK30KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorc3RhdGljIGlubGluZSB1NjQJCUh2THBDb25maWdfZ2V0TWluTXNDaHVua3Modm9pZCkKK3sKKwlyZXR1cm4gSHZDYWxsQ2ZnX2dldE1zQ2h1bmtzKEh2THBDb25maWdfZ2V0THBJbmRleCgpLEh2Q2FsbENmZ19NaW4pOworfQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitzdGF0aWMgaW5saW5lIHU2NAkJSHZMcENvbmZpZ19nZXRNaW5Nc1BhZ2VzKHZvaWQpCit7CisJcmV0dXJuIEh2Q2FsbENmZ19nZXRNc0NodW5rcyhIdkxwQ29uZmlnX2dldExwSW5kZXgoKSxIdkNhbGxDZmdfTWluKSAqIEhWUEFHRVNQRVJDSFVOSzsKK30KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorc3RhdGljIGlubGluZSB1NjQJCUh2THBDb25maWdfZ2V0TWluUnVudGltZU1zTWVncyh2b2lkKQoreworCXJldHVybiBIdkNhbGxDZmdfZ2V0TWluUnVudGltZU1zQ2h1bmtzKEh2THBDb25maWdfZ2V0THBJbmRleCgpKSAvIEhWQ0hVTktTUEVSTUVHOworfQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3N0YXRpYyBpbmxpbmUgdTY0CQlIdkxwQ29uZmlnX2dldE1pblJ1bnRpbWVNc0NodW5rcyh2b2lkKQoreworCXJldHVybiBIdkNhbGxDZmdfZ2V0TWluUnVudGltZU1zQ2h1bmtzKEh2THBDb25maWdfZ2V0THBJbmRleCgpKTsKK30KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitzdGF0aWMgaW5saW5lIHU2NAkJSHZMcENvbmZpZ19nZXRNaW5SdW50aW1lTXNQYWdlcyh2b2lkKQoreworCXJldHVybiBIdkNhbGxDZmdfZ2V0TWluUnVudGltZU1zQ2h1bmtzKEh2THBDb25maWdfZ2V0THBJbmRleCgpKSAqIEhWUEFHRVNQRVJDSFVOSzsKK30KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitzdGF0aWMgaW5saW5lIHU2NAkJSHZMcENvbmZpZ19nZXRNYXhNc01lZ3Modm9pZCkKK3sKKwlyZXR1cm4gSHZDYWxsQ2ZnX2dldE1zQ2h1bmtzKEh2THBDb25maWdfZ2V0THBJbmRleCgpLEh2Q2FsbENmZ19NYXgpIC8gSFZDSFVOS1NQRVJNRUc7Cit9CisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorc3RhdGljIGlubGluZSB1NjQJCUh2THBDb25maWdfZ2V0TWF4TXNDaHVua3Modm9pZCkKK3sKKwlyZXR1cm4gSHZDYWxsQ2ZnX2dldE1zQ2h1bmtzKEh2THBDb25maWdfZ2V0THBJbmRleCgpLEh2Q2FsbENmZ19NYXgpOworfQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3N0YXRpYyBpbmxpbmUgdTY0CQlIdkxwQ29uZmlnX2dldE1heE1zUGFnZXModm9pZCkKK3sKKwlyZXR1cm4gSHZDYWxsQ2ZnX2dldE1zQ2h1bmtzKEh2THBDb25maWdfZ2V0THBJbmRleCgpLEh2Q2FsbENmZ19NYXgpICogSFZQQUdFU1BFUkNIVU5LOworfQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3N0YXRpYyBpbmxpbmUgdTY0CQlIdkxwQ29uZmlnX2dldEluaXRNc01lZ3Modm9pZCkKK3sKKwlyZXR1cm4gSHZDYWxsQ2ZnX2dldE1zQ2h1bmtzKEh2THBDb25maWdfZ2V0THBJbmRleCgpLEh2Q2FsbENmZ19Jbml0KSAvIEhWQ0hVTktTUEVSTUVHOworfQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3N0YXRpYyBpbmxpbmUgdTY0CQlIdkxwQ29uZmlnX2dldEluaXRNc0NodW5rcyh2b2lkKQoreworCXJldHVybiBIdkNhbGxDZmdfZ2V0TXNDaHVua3MoSHZMcENvbmZpZ19nZXRMcEluZGV4KCksSHZDYWxsQ2ZnX0luaXQpOworfQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3N0YXRpYyBpbmxpbmUgdTY0CQlIdkxwQ29uZmlnX2dldEluaXRNc1BhZ2VzKHZvaWQpCit7ICAgIHJldHVybiBIdkNhbGxDZmdfZ2V0TXNDaHVua3MoSHZMcENvbmZpZ19nZXRMcEluZGV4KCksSHZDYWxsQ2ZnX0luaXQpICogSFZQQUdFU1BFUkNIVU5LOworfQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3N0YXRpYyBpbmxpbmUgdTY0CQlIdkxwQ29uZmlnX2dldFN5c3RlbVBoeXNpY2FsUHJvY2Vzc29ycyh2b2lkKQoreworCXJldHVybiBIdkNhbGxDZmdfZ2V0U3lzdGVtUGh5c2ljYWxQcm9jZXNzb3JzKCk7Cit9CisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorc3RhdGljIGlubGluZSB1NjQJCUh2THBDb25maWdfZ2V0U3lzdGVtTG9naWNhbFByb2Nlc3NvcnModm9pZCkKK3sKKwlyZXR1cm4gSHZDYWxsQ2ZnX2dldFN5c3RlbVBoeXNpY2FsUHJvY2Vzc29ycygpICogKC8qZ2V0UGFjYSgpLT5nZXRTZWNvbmRhcnlUaHJlYWRDb3VudCgpICsqLyAxKTsKK30KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitzdGF0aWMgaW5saW5lIHU2NAkJSHZMcENvbmZpZ19nZXROdW1Qcm9jc0luU2hhcmVkUG9vbChIdkxwU2hhcmVkUG9vbEluZGV4IHNQSSkKK3sKKwlyZXR1cm4gSHZDYWxsQ2ZnX2dldE51bVByb2NzSW5TaGFyZWRQb29sKHNQSSk7Cit9CisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorc3RhdGljIGlubGluZSB1NjQJCUh2THBDb25maWdfZ2V0UGh5c2ljYWxQcm9jZXNzb3JzKHZvaWQpCit7CisJcmV0dXJuIEh2Q2FsbENmZ19nZXRQaHlzaWNhbFByb2Nlc3NvcnMoSHZMcENvbmZpZ19nZXRMcEluZGV4KCksSHZDYWxsQ2ZnX0N1cik7Cit9CisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorc3RhdGljIGlubGluZSB1NjQJCUh2THBDb25maWdfZ2V0TG9naWNhbFByb2Nlc3NvcnModm9pZCkKK3sKKwlyZXR1cm4gSHZDYWxsQ2ZnX2dldFBoeXNpY2FsUHJvY2Vzc29ycyhIdkxwQ29uZmlnX2dldExwSW5kZXgoKSxIdkNhbGxDZmdfQ3VyKSAqICgvKmdldFBhY2EoKS0+Z2V0U2Vjb25kYXJ5VGhyZWFkQ291bnQoKSArKi8gMSk7Cit9CisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorc3RhdGljIGlubGluZSBIdkxwU2hhcmVkUG9vbEluZGV4CUh2THBDb25maWdfZ2V0U2hhcmVkUG9vbEluZGV4KHZvaWQpCit7CisJcmV0dXJuIEh2Q2FsbENmZ19nZXRTaGFyZWRQb29sSW5kZXgoSHZMcENvbmZpZ19nZXRMcEluZGV4KCkpOworfQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3N0YXRpYyBpbmxpbmUgdTY0CQlIdkxwQ29uZmlnX2dldFNoYXJlZFByb2NVbml0cyh2b2lkKQoreworCXJldHVybiBIdkNhbGxDZmdfZ2V0U2hhcmVkUHJvY1VuaXRzKEh2THBDb25maWdfZ2V0THBJbmRleCgpLEh2Q2FsbENmZ19DdXIpOworfQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3N0YXRpYyBpbmxpbmUgdTY0CQlIdkxwQ29uZmlnX2dldE1pblNoYXJlZFByb2NVbml0cyh2b2lkKQoreworCXJldHVybiBIdkNhbGxDZmdfZ2V0U2hhcmVkUHJvY1VuaXRzKEh2THBDb25maWdfZ2V0THBJbmRleCgpLEh2Q2FsbENmZ19NaW4pOworfQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3N0YXRpYyBpbmxpbmUgdTY0CQlIdkxwQ29uZmlnX2dldE1heFNoYXJlZFByb2NVbml0cyh2b2lkKQoreworCXJldHVybiBIdkNhbGxDZmdfZ2V0U2hhcmVkUHJvY1VuaXRzKEh2THBDb25maWdfZ2V0THBJbmRleCgpLEh2Q2FsbENmZ19NYXgpOworfQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3N0YXRpYyBpbmxpbmUgdTY0CQlIdkxwQ29uZmlnX2dldE1pblBoeXNpY2FsUHJvY2Vzc29ycyh2b2lkKQoreworCXJldHVybiBIdkNhbGxDZmdfZ2V0UGh5c2ljYWxQcm9jZXNzb3JzKEh2THBDb25maWdfZ2V0THBJbmRleCgpLEh2Q2FsbENmZ19NaW4pOworfQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3N0YXRpYyBpbmxpbmUgdTY0CQlIdkxwQ29uZmlnX2dldE1pbkxvZ2ljYWxQcm9jZXNzb3JzKHZvaWQpCit7CisJcmV0dXJuIEh2Q2FsbENmZ19nZXRQaHlzaWNhbFByb2Nlc3NvcnMoSHZMcENvbmZpZ19nZXRMcEluZGV4KCksSHZDYWxsQ2ZnX01pbikgKiAoLypnZXRQYWNhKCktPmdldFNlY29uZGFyeVRocmVhZENvdW50KCkgKyovIDEpOworfQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3N0YXRpYyBpbmxpbmUgdTY0CQlIdkxwQ29uZmlnX2dldE1heFBoeXNpY2FsUHJvY2Vzc29ycyh2b2lkKQoreworCXJldHVybiBIdkNhbGxDZmdfZ2V0UGh5c2ljYWxQcm9jZXNzb3JzKEh2THBDb25maWdfZ2V0THBJbmRleCgpLEh2Q2FsbENmZ19NYXgpOworfQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3N0YXRpYyBpbmxpbmUgdTY0CQlIdkxwQ29uZmlnX2dldE1heExvZ2ljYWxQcm9jZXNzb3JzKHZvaWQpCit7CisJcmV0dXJuIEh2Q2FsbENmZ19nZXRQaHlzaWNhbFByb2Nlc3NvcnMoSHZMcENvbmZpZ19nZXRMcEluZGV4KCksSHZDYWxsQ2ZnX01heCkgKiAoLypnZXRQYWNhKCktPmdldFNlY29uZGFyeVRocmVhZENvdW50KCkgKyovIDEpOworfQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3N0YXRpYyBpbmxpbmUgdTY0CQlIdkxwQ29uZmlnX2dldEluaXRQaHlzaWNhbFByb2Nlc3NvcnModm9pZCkKK3sKKwlyZXR1cm4gSHZDYWxsQ2ZnX2dldFBoeXNpY2FsUHJvY2Vzc29ycyhIdkxwQ29uZmlnX2dldExwSW5kZXgoKSxIdkNhbGxDZmdfSW5pdCk7Cit9CisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorc3RhdGljIGlubGluZSB1NjQJCUh2THBDb25maWdfZ2V0SW5pdExvZ2ljYWxQcm9jZXNzb3JzKHZvaWQpCit7CisJcmV0dXJuIEh2Q2FsbENmZ19nZXRQaHlzaWNhbFByb2Nlc3NvcnMoSHZMcENvbmZpZ19nZXRMcEluZGV4KCksSHZDYWxsQ2ZnX0luaXQpICogKC8qZ2V0UGFjYSgpLT5nZXRTZWNvbmRhcnlUaHJlYWRDb3VudCgpICsqLyAxKTsKK30KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorc3RhdGljIGlubGluZSBIdkxwVmlydHVhbExhbkluZGV4TWFwCUh2THBDb25maWdfZ2V0VmlydHVhbExhbkluZGV4TWFwKHZvaWQpCit7CisJcmV0dXJuIEh2Q2FsbENmZ19nZXRWaXJ0dWFsTGFuSW5kZXhNYXAoSHZMcENvbmZpZ19nZXRMcEluZGV4X291dGxpbmUoKSk7Cit9CisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorc3RhdGljIGlubGluZSBIdkxwVmlydHVhbExhbkluZGV4TWFwCUh2THBDb25maWdfZ2V0VmlydHVhbExhbkluZGV4TWFwRm9yTHAoSHZMcEluZGV4IGxwKQoreworCXJldHVybiBIdkNhbGxDZmdfZ2V0VmlydHVhbExhbkluZGV4TWFwKGxwKTsKK30KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorc3RhdGljIGlubGluZSBIdkxwSW5kZXgJSHZMcENvbmZpZ19nZXRCdXNPd25lcihIdkJ1c051bWJlciBidXNOdW1iZXIpCit7CisJcmV0dXJuIEh2Q2FsbENmZ19nZXRCdXNPd25lcihidXNOdW1iZXIpOworfQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3N0YXRpYyBpbmxpbmUgaW50CQlIdkxwQ29uZmlnX2lzQnVzRGVkaWNhdGVkKEh2QnVzTnVtYmVyIGJ1c051bWJlcikKK3sKKwlyZXR1cm4gSHZDYWxsQ2ZnX2lzQnVzRGVkaWNhdGVkKGJ1c051bWJlcik7Cit9CisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3N0YXRpYyBpbmxpbmUgSHZMcEluZGV4TWFwCUh2THBDb25maWdfZ2V0QnVzQWxsb2NhdGlvbihIdkJ1c051bWJlciBidXNOdW1iZXIpCit7CisJcmV0dXJuIEh2Q2FsbENmZ19nZXRCdXNBbGxvY2F0aW9uKGJ1c051bWJlcik7Cit9CisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIHJldHVybnMgdGhlIGFic29sdXRlIHJlYWwgYWRkcmVzcyBvZiB0aGUgbG9hZCBhcmVhCitzdGF0aWMgaW5saW5lIHU2NAkJSHZMcENvbmZpZ19nZXRMb2FkQWRkcmVzcyh2b2lkKQoreworCXJldHVybiBpdExwTmFjYS54TG9hZEFyZWFBZGRyICYgMHg3ZmZmZmZmZmZmZmZmZmZmOworfQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitzdGF0aWMgaW5saW5lIHU2NAkJSHZMcENvbmZpZ19nZXRMb2FkUGFnZXModm9pZCkKK3sKKwlyZXR1cm4gaXRMcE5hY2EueExvYWRBcmVhQ2h1bmtzICogSFZQQUdFU1BFUkNIVU5LOworfQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitzdGF0aWMgaW5saW5lIGludAkJSHZMcENvbmZpZ19pc0J1c093bmVkQnlUaGlzTHAoSHZCdXNOdW1iZXIgYnVzTnVtYmVyKQoreworCUh2THBJbmRleCBidXNPd25lciA9IEh2THBDb25maWdfZ2V0QnVzT3duZXIoYnVzTnVtYmVyKTsKKwlyZXR1cm4gKGJ1c093bmVyID09IEh2THBDb25maWdfZ2V0THBJbmRleCgpKTsKK30KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorc3RhdGljIGlubGluZSBpbnQgICAgICAgICBIdkxwQ29uZmlnX2RvTHBzQ29tbXVuaWNhdGVPblZpcnR1YWxMYW4oSHZMcEluZGV4IGxwMSwgSHZMcEluZGV4IGxwMikKK3sKKwlIdkxwVmlydHVhbExhbkluZGV4TWFwIHZpcnR1YWxMYW5JbmRleE1hcDEgPSBIdkNhbGxDZmdfZ2V0VmlydHVhbExhbkluZGV4TWFwKCBscDEgKTsKKwlIdkxwVmlydHVhbExhbkluZGV4TWFwIHZpcnR1YWxMYW5JbmRleE1hcDIgPSBIdkNhbGxDZmdfZ2V0VmlydHVhbExhbkluZGV4TWFwKCBscDIgKTsKKwlyZXR1cm4gKCh2aXJ0dWFsTGFuSW5kZXhNYXAxICYgdmlydHVhbExhbkluZGV4TWFwMikgIT0gMCk7Cit9CisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3N0YXRpYyBpbmxpbmUgSHZMcEluZGV4CQlIdkxwQ29uZmlnX2dldEhvc3RpbmdMcEluZGV4KEh2THBJbmRleCBscCkKK3sKKwlyZXR1cm4gSHZDYWxsQ2ZnX2dldEhvc3RpbmdMcEluZGV4KGxwKTsKK30KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjZW5kaWYgLyogX0hWTFBDT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvaVNlcmllcy9IdkxwRXZlbnQuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvSHZMcEV2ZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA5MzZlNDMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL0h2THBFdmVudC5oCkBAIC0wLDAgKzEsMTQ0IEBACisvKgorICogSHZMcEV2ZW50LmgKKyAqIENvcHlyaWdodCAoQykgMjAwMSAgTWlrZSBDb3JyaWdhbiBJQk0gQ29ycG9yYXRpb24KKyAqIAorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIAorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqIAorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqLworCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLwlUaGlzIGZpbGUgY29udGFpbnMgdGhlIGNsYXNzIGZvciBIViBldmVudHMgaW4gdGhlIHN5c3RlbS4KKy8vCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorI2lmbmRlZiBfSFZMUEVWRU5UX0gKKyNkZWZpbmUgX0hWTFBFVkVOVF9ICisKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisjaW5jbHVkZSA8YXNtL2lTZXJpZXMvSHZUeXBlcy5oPgorI2luY2x1ZGUgPGFzbS9pU2VyaWVzL0h2Q2FsbEV2ZW50Lmg+CisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gSHZMcEV2ZW50IGlzIHRoZSBzdHJ1Y3R1cmUgZm9yIExwIEV2ZW50IG1lc3NhZ2VzIHBhc3NlZCBiZXR3ZWVuCisvLyBwYXJ0aXRpb25zIHRocm91Z2ggUExJQy4gCisvLworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworc3RydWN0IEh2RXZlbnRGbGFncworeworCXU4CXhWYWxpZDoxOwkJLy8gSW5kaWNhdGVzIGEgdmFsaWQgcmVxdWVzdAl4MDAteDAwCisJdTgJeFJzdmQxOjQ7CQkvLyBSZXNlcnZlZAkJCS4uLgorCXU4CXhBY2tUeXBlOjE7CQkvLyBJbW1lZGlhdGUgb3IgZGVmZXJyZWQJLi4uCisJdTgJeEFja0luZDoxOwkJLy8gSW5kaWNhdGVzIGlmIEFDSyByZXF1aXJlZAkuLi4KKwl1OAl4RnVuY3Rpb246MTsJCS8vIEludGVycnVwdCBvciBBY2tub3dsZWRnZQkuLi4KK307CisKKworc3RydWN0IEh2THBFdmVudAoreworCXN0cnVjdCBIdkV2ZW50RmxhZ3MgeEZsYWdzOwkvLyBFdmVudCBmbGFncwkJCXgwMC14MDAKKwl1OAl4VHlwZTsJCQkvLyBUeXBlIG9mIG1lc3NhZ2UJCXgwMS14MDEKKwl1MTYJeFN1YnR5cGU7CQkvLyBTdWJ0eXBlIGZvciBldmVudAkJeDAyLXgwMworCXU4CXhTb3VyY2VMcDsJCS8vIFNvdXJjZSBMUAkJCXgwNC14MDQKKwl1OAl4VGFyZ2V0THA7CQkvLyBUYXJnZXQgTFAJCQl4MDUteDA1CisJdTgJeFNpemVNaW51czE7CQkvLyBTaXplIG9mIERlcml2ZWQgY2xhc3MgLSAxCXgwNi14MDYKKwl1OAl4UmM7CQkJLy8gUkMgZm9yIEFjayBmbG93cwkJeDA3LXgwNworCXUxNgl4U291cmNlSW5zdGFuY2VJZDsJLy8gU291cmNlIHNpZGVzIGluc3RhbmNlIGlkCXgwOC14MDkKKwl1MTYJeFRhcmdldEluc3RhbmNlSWQ7CS8vIFRhcmdldCBzaWRlcyBpbnN0YW5jZSBpZAl4MEEteDBCCisJdW5pb24geworCQl1MzIJeFN1YnR5cGVEYXRhOwkvLyBEYXRhIHVzYWJsZSBieSB0aGUgc3VidHlwZQl4MEMteDBGCisJCXUxNgl4U3VidHlwZURhdGFTaG9ydFsyXTsJLy8gRGF0YSBhcyAyIHNob3J0cworCQl1OAl4U3VidHlwZURhdGFDaGFyWzRdOwkvLyBEYXRhIGFzIDQgY2hhcnMKKwl9IHg7CisKKwl1NjQJeENvcnJlbGF0aW9uVG9rZW47CS8vIFVuaXF1ZSB2YWx1ZSBmb3Igc291cmNlL3R5cGUgeDEwLXgxNworfTsKKworLy8gTHAgRXZlbnQgaGFuZGxlciBmdW5jdGlvbgordHlwZWRlZiB2b2lkICgqTHBFdmVudEhhbmRsZXIpKHN0cnVjdCBIdkxwRXZlbnQgKiwgc3RydWN0IHB0X3JlZ3MgKik7CisKKy8vIFJlZ2lzdGVyIGEgaGFuZGxlciBmb3IgYW4gZXZlbnQgdHlwZQorLy8gIHJldHVybnMgMCBvbiBzdWNjZXNzCitleHRlcm4gaW50IEh2THBFdmVudF9yZWdpc3RlckhhbmRsZXIoIEh2THBFdmVudF9UeXBlIGV2ZW50VHlwZSwgTHBFdmVudEhhbmRsZXIgaGRscik7CisKKy8vIFVucmVnaXN0ZXIgYSBoYW5kbGVyIGZvciBhbiBldmVudCB0eXBlCisvLyAgVGhpcyBjYWxsIHdpbGwgc2xlZXAgdW50aWwgdGhlIGhhbmRsZXIgYmVpbmcgcmVtb3ZlZCBpcyBndWFyYW50ZWVkIHRvCisvLyAgYmUgbm8gbG9uZ2VyIGV4ZWN1dGluZyBvbiBhbnkgQ1BVLiBEbyBub3QgY2FsbCB3aXRoIGxvY2tzIGhlbGQuCisvLworLy8gIHJldHVybnMgMCBvbiBzdWNjZXNzCisvLyAgVW5yZWdpc3RlciB3aWxsIGZhaWwgaWYgdGhlcmUgYXJlIGFueSBwYXRocyBvcGVuIGZvciB0aGUgdHlwZQorZXh0ZXJuIGludCBIdkxwRXZlbnRfdW5yZWdpc3RlckhhbmRsZXIoIEh2THBFdmVudF9UeXBlIGV2ZW50VHlwZSApOworCisvLyBPcGVuIGFuIExwIEV2ZW50IFBhdGggZm9yIGFuIGV2ZW50IHR5cGUKKy8vICByZXR1cm5zIDAgb24gc3VjY2VzcworLy8gIG9wZW5QYXRoIHdpbGwgZmFpbCBpZiB0aGVyZSBpcyBubyBoYW5kbGVyIHJlZ2lzdGVyZWQgZm9yIHRoZSBldmVudCB0eXBlLgorLy8gIFRoZSBscEluZGV4IHNwZWNpZmllZCBpcyB0aGUgcGFydGl0aW9uIGluZGV4IGZvciB0aGUgdGFyZ2V0IHBhcnRpdGlvbgorLy8gIChmb3IgVmlydHVhbElvLCBWaXJ0dWFsTGFuIGFuZCBTZXNzaW9uTWdyKSBvdGhlciB0eXBlcyBzcGVjaWZ5IHplcm8pIAorZXh0ZXJuIGludCBIdkxwRXZlbnRfb3BlblBhdGgoIEh2THBFdmVudF9UeXBlIGV2ZW50VHlwZSwgSHZMcEluZGV4IGxwSW5kZXggKTsKKworCisvLyBDbG9zZSBhbiBMcCBFdmVudCBQYXRoIGZvciBhIHR5cGUgYW5kIHBhcnRpdGlvbgorLy8gIHJldHVybnMgMCBvbiBzdWNlc3MKK2V4dGVybiBpbnQgSHZMcEV2ZW50X2Nsb3NlUGF0aCggSHZMcEV2ZW50X1R5cGUgZXZlbnRUeXBlLCBIdkxwSW5kZXggbHBJbmRleCApOworCisjZGVmaW5lIEh2THBFdmVudF9UeXBlX0h5cGVydmlzb3IgMAorI2RlZmluZSBIdkxwRXZlbnRfVHlwZV9NYWNoaW5lRmFjIDEKKyNkZWZpbmUgSHZMcEV2ZW50X1R5cGVfU2Vzc2lvbk1nciAyCisjZGVmaW5lIEh2THBFdmVudF9UeXBlX1NwZElvICAgICAgMworI2RlZmluZSBIdkxwRXZlbnRfVHlwZV9WaXJ0dWFsQnVzIDQKKyNkZWZpbmUgSHZMcEV2ZW50X1R5cGVfUGNpSW8gICAgICA1CisjZGVmaW5lIEh2THBFdmVudF9UeXBlX1Jpb0lvICAgICAgNgorI2RlZmluZSBIdkxwRXZlbnRfVHlwZV9WaXJ0dWFsTGFuIDcKKyNkZWZpbmUgSHZMcEV2ZW50X1R5cGVfVmlydHVhbElvICA4CisjZGVmaW5lIEh2THBFdmVudF9UeXBlX051bVR5cGVzICAgOQorCisjZGVmaW5lIEh2THBFdmVudF9SY19Hb29kIDAKKyNkZWZpbmUgSHZMcEV2ZW50X1JjX0J1ZmZlck5vdEF2YWlsYWJsZSAxCisjZGVmaW5lIEh2THBFdmVudF9SY19DYW5jZWxsZWQgMgorI2RlZmluZSBIdkxwRXZlbnRfUmNfR2VuZXJpY0Vycm9yIDMKKyNkZWZpbmUgSHZMcEV2ZW50X1JjX0ludmFsaWRBZGRyZXNzIDQKKyNkZWZpbmUgSHZMcEV2ZW50X1JjX0ludmFsaWRQYXJ0aXRpb24gNQorI2RlZmluZSBIdkxwRXZlbnRfUmNfSW52YWxpZFNpemUgNgorI2RlZmluZSBIdkxwRXZlbnRfUmNfSW52YWxpZFN1YnR5cGUgNworI2RlZmluZSBIdkxwRXZlbnRfUmNfSW52YWxpZFN1YnR5cGVEYXRhIDgKKyNkZWZpbmUgSHZMcEV2ZW50X1JjX0ludmFsaWRUeXBlIDkKKyNkZWZpbmUgSHZMcEV2ZW50X1JjX1BhcnRpdGlvbkRlYWQgMTAKKyNkZWZpbmUgSHZMcEV2ZW50X1JjX1BhdGhDbG9zZWQgMTEKKyNkZWZpbmUgSHZMcEV2ZW50X1JjX1N1YnR5cGVFcnJvciAxMgorCisjZGVmaW5lIEh2THBFdmVudF9GdW5jdGlvbl9BY2sgMAorI2RlZmluZSBIdkxwRXZlbnRfRnVuY3Rpb25fSW50IDEKKworI2RlZmluZSBIdkxwRXZlbnRfQWNrSW5kX05vQWNrIDAKKyNkZWZpbmUgSHZMcEV2ZW50X0Fja0luZF9Eb0FjayAxCisKKyNkZWZpbmUgSHZMcEV2ZW50X0Fja1R5cGVfSW1tZWRpYXRlQWNrIDAKKyNkZWZpbmUgSHZMcEV2ZW50X0Fja1R5cGVfRGVmZXJyZWRBY2sgMQorCisjZGVmaW5lIEh2THBEbWFfRGlyZWN0aW9uX0xvY2FsVG9SZW1vdGUgMAorI2RlZmluZSBIdkxwRG1hX0RpcmVjdGlvbl9SZW1vdGVUb0xvY2FsIDEKKworI2RlZmluZSBIdkxwRG1hX0FkZHJlc3NUeXBlX1RjZUluZGV4IDAKKyNkZWZpbmUgSHZMcERtYV9BZGRyZXNzVHlwZV9SZWFsQWRkcmVzcyAxCisKKyNkZWZpbmUgSHZMcERtYV9SY19Hb29kIDAKKyNkZWZpbmUgSHZMcERtYV9SY19FcnJvciAxCisjZGVmaW5lIEh2THBEbWFfUmNfUGFydGl0aW9uRGVhZCAyCisjZGVmaW5lIEh2THBEbWFfUmNfUGF0aENsb3NlZCAzCisjZGVmaW5lIEh2THBEbWFfUmNfSW52YWxpZEFkZHJlc3MgNAorI2RlZmluZSBIdkxwRG1hX1JjX0ludmFsaWRMZW5ndGggNQorCisjZW5kaWYgLy8gX0hWTFBFVkVOVF9ICmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL0h2UmVsZWFzZURhdGEuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvSHZSZWxlYXNlRGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4M2U1ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL0h2UmVsZWFzZURhdGEuaApAQCAtMCwwICsxLDY1IEBACisvKgorICogSHZSZWxlYXNlRGF0YS5oCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgIE1pa2UgQ29ycmlnYW4gSUJNIENvcnBvcmF0aW9uCisgKiAKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiAKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKiAKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKi8KKyNpZm5kZWYgX0hWUkVMRUFTRURBVEFfSAorI2RlZmluZSBfSFZSRUxFQVNFREFUQV9ICisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyAgIFRoaXMgY29udHJvbCBibG9jayBjb250YWlucyB0aGUgY3JpdGljYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIAorLy8gICByZWxlYXNlIHNvIHRoYXQgaXQgY2FuIGJlIGNoYW5nZWQgaW4gdGhlIGZ1dHVyZSAoaWUsIHRoZSB2aXJ0dWFsIAorLy8gICBhZGRyZXNzIG9mIHRoZSBPUydzIE5BQ0EpLgorLy8KKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbmFjYS5oPgorCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8JV2hlbiB3ZSBJUEwgYSBzZWNvbmRhcnkgcGFydGl0aW9uLCB3ZSB3aWxsIGNoZWNrIGlmIGlmIHRoZSAKKy8vCXNlY29uZGFyeSB4TWluUGxpY1ZybUluZGV4ID4gdGhlIHByaW1hcnkgeFZybUluZGV4LiAgCisvLwlJZiBpdCBpcyB0aGVuIHRoaXMgdGVsbHMgUExJQyB0aGF0IHRoaXMgc2Vjb25kYXJ5IGlzIG5vdCAKKy8vCXN1cHBvcnRlZCBydW5uaW5nIG9uIHRoaXMgIm9sZCIgb2YgYSBsZXZlbCBvZiBQTElDLgorLy8KKy8vCUxpa2V3aXNlLCB3ZSB3aWxsIGNvbXBhcmUgdGhlIHByaW1hcnkgeE1pblNsaWNWcm1JbmRleCB0byAKKy8vCXRoZSBzZWNvbmRhcnkgeFZybUluZGV4LiAKKy8vCUlmIHRoZSBwcmltYXJ5IHhNaW5TbGljVnJtRGVsdGEgPiBzZWNvbmRhcnkgeFZybURlbHRhIHRoZW4gd2UgCisvLwlrbm93IHRoYXQgdGhpcyBQTElDIGRvZXMgbm90IHN1cHBvcnQgcnVubmluZyBhbiBPUyAidGhhdCBvbGQiLgorLy8KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworc3RydWN0CUh2UmVsZWFzZURhdGEKK3sKKwl1MzIJeERlc2M7CQkJLy8gRGVzY3JpcHRvcgkiSHZSRCIgZWJjZGljCXgwMC14MDMKKwl1MTYJeFNpemU7CQkJLy8gU2l6ZSBvZiB0aGlzIGNvbnRyb2wgYmxvY2sJeDA0LXgwNQorCXUxNgl4VnBkQXJlYXNQdHJPZmZzZXQ7CS8vIE9mZnNldCBpbiBOQUNBIG9mIEl0VnBkQXJlYXMJeDA2LXgwNworCXN0cnVjdCAgbmFjYV9zdHJ1Y3QgKiB4U2xpY05hY2FBZGRyOyAvLyBWaXJ0IGFkZHIgb2YgU0xJQyBOQUNBICB4MDgteDBGCisJdTMyCXhNc051Y0RhdGFPZmZzZXQ7CS8vIE9mZnNldCBvZiBMaW51eCBNYXBwaW5nIERhdGEgeDEwLXgxMworCXUzMgl4UnN2ZDE7CQkJLy8gUmVzZXJ2ZWQJCQl4MTQteDE3CisJdTE2CXhUYWdzTW9kZToxOwkJLy8gMCA9PSB0YWdzIGFjdGl2ZSwgMSA9PSB0YWdzIGluYWN0aXZlCisJdTE2CXhBZGRyZXNzU2l6ZToxOwkJLy8gMCA9PSA2NC1iaXQsIDEgPT0gMzItYml0CisJdTE2CXhOb1NoYXJlZFByb2NzOjE7CS8vIDAgPT0gc2hhcmVkIHByb2NzLCAxID09IG5vIHNoYXJlZAorCXUxNgl4Tm9ITVQ6MTsJCS8vIDAgPT0gYWxsb3cgSE1ULCAxID09IG5vIEhNVAorCXUxNgl4UnN2ZDI6MTI7CQkvLyBSZXNlcnZlZAkJCXgxOC14MTkKKwl1MTYJeFZybUluZGV4OwkJLy8gVlJNIEluZGV4IG9mIE9TIGltYWdlCXgxQS14MUIKKwl1MTYJeE1pblN1cHBvcnRlZFBsaWNWcm1JbmRleDsvLyBNaW4gUExJQyBsZXZlbCAgKHNvZnQpCXgxQy14MUQKKwl1MTYJeE1pbkNvbXBhdGFibGVQbGljVnJtSW5kZXg7Ly8gTWluIFBMSUMgbGV2ZWxQIChoYXJkKQl4MUUteDFGCisJY2hhcgl4VnJtTmFtZVsxMl07CQkvLyBEaXNwbGF5YWJsZSBuYW1lICAJCXgyMC14MkIKKwljaGFyCXhSc3ZkM1syMF07CQkvLyBSZXNlcnZlZAkJCXgyQy14M0YKK307CisKKyNlbmRpZiAvKiBfSFZSRUxFQVNFREFUQV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL0h2VHlwZXMuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvSHZUeXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlYzQ5YzEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL0h2VHlwZXMuaApAQCAtMCwwICsxLDEyNyBAQAorLyoKKyAqIEh2VHlwZXMuaAorICogQ29weXJpZ2h0IChDKSAyMDAxICBNaWtlIENvcnJpZ2FuIElCTSBDb3Jwb3JhdGlvbgorICogCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICogCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICovCisjaWZuZGVmIF9IVlRZUEVTX0gKKyNkZWZpbmUgX0hWVFlQRVNfSAorCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGVhZGVyIEZpbGUgSWQKKy8vIE5hbWVfX19fX19fX19fX19fXzogIEh2VHlwZXMuSAorLy8KKy8vIERlc2NyaXB0aW9uX19fX19fXzoKKy8vCisvLwlHZW5lcmFsIHR5cGVkZWZzIGZvciB0aGUgaHlwZXJ2aXNvci4KKy8vCisvLyBEZWNsYXJlZCBDbGFzcyhlcyk6CisvLworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFR5cGVkZWZzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3R5cGVkZWYgdTgJSHZMcEluZGV4OwordHlwZWRlZiB1MTYJSHZMcEluc3RhbmNlSWQ7Cit0eXBlZGVmIHU2NCAgICAgSHZMcFRPRDsKK3R5cGVkZWYgdTY0ICAgICBIdkxwU3lzdGVtU2VyaWFsTnVtOwordHlwZWRlZiB1OCAgICAgIEh2THBEZXZpY2VTZXJpYWxOdW1bMTJdOwordHlwZWRlZiB1MTYgICAgIEh2THBTYW5Id1NldDsKK3R5cGVkZWYgdTE2ICAgICBIdkxwQnVzOwordHlwZWRlZiB1MTYgICAgIEh2THBCb2FyZDsKK3R5cGVkZWYgdTE2ICAgICBIdkxwQ2FyZDsKK3R5cGVkZWYgdTggICAgICBIdkxwRGV2aWNlVHlwZVs0XTsKK3R5cGVkZWYgdTggICAgICBIdkxwRGV2aWNlTW9kZWxbM107Cit0eXBlZGVmIHU2NCAgICAgSHZJb1Rva2VuOwordHlwZWRlZiB1OCAgICAgIEh2THBOYW1lWzhdOwordHlwZWRlZiB1MzIJSHZJb0lkOwordHlwZWRlZiB1NjQJSHZSZWFsTWVtb3J5SW5kZXg7Cit0eXBlZGVmIHUzMiAgICAgSHZMcEluZGV4TWFwOwkJLy8gTXVzdCBob2xkIEh2TWF4QXJjaGl0ZWN0ZWRMcHMgYml0cyEhIQordHlwZWRlZiB1MTYJSHZMcFZybUluZGV4OwordHlwZWRlZiB1MzIJSHZYbUdlbmVyYXRpb25JZDsKK3R5cGVkZWYgdTgJSHZMcEJ1c1Bvb2w7CQkJCit0eXBlZGVmIHU4CUh2THBTaGFyZWRQb29sSW5kZXg7CQkKK3R5cGVkZWYgdTE2CUh2THBTaGFyZWRQcm9jVW5pdHNYMTAwOwordHlwZWRlZiB1OAlIdkxwVmlydHVhbExhbkluZGV4OwordHlwZWRlZiB1MTYJSHZMcFZpcnR1YWxMYW5JbmRleE1hcDsJLy8gTXVzdCBob2xkIEh2TWF4QXJjaGl0ZWN0ZWRWaXJ0dWFsTGFucyBiaXRzISEhCit0eXBlZGVmIHUxNglIdkJ1c051bWJlcjsJCS8vIEh5cGVydmlzb3IgQnVzIE51bWJlcgordHlwZWRlZiB1OAlIdlN1YkJ1c051bWJlcjsJCS8vIEh5cGVydmlzb3IgU3ViQnVzIE51bWJlcgordHlwZWRlZiB1OAlIdkFnZW50SWQ7CQkvLyBIeXBlcnZpc29yIERldkZuCisKKworI2RlZmluZSBIVk1BWEFSQ0hJVEVDVEVETFBTIDMyCisjZGVmaW5lIEhWTUFYQVJDSElURUNURURWSVJUVUFMTEFOUyAxNgorI2RlZmluZSBIVk1BWEFSQ0hJVEVDVEVEVklSVFVBTERJU0tTIDMyCisjZGVmaW5lIEhWTUFYQVJDSElURUNURURWSVJUVUFMQ0RST01TIDgKKyNkZWZpbmUgSFZNQVhBUkNISVRFQ1RFRFZJUlRVQUxUQVBFUyA4CisjZGVmaW5lIEhWQ0hVTktTSVpFIDI1NiAqIDEwMjQKKyNkZWZpbmUgSFZQQUdFU0laRSA0ICogMTAyNAorI2RlZmluZSBIVkxQTUlOTUVHU1BSSU1BUlkgMjU2CisjZGVmaW5lIEhWTFBNSU5NRUdTU0VDT05EQVJZIDY0CisjZGVmaW5lIEhWQ0hVTktTUEVSTUVHIDQKKyNkZWZpbmUgSFZQQUdFU1BFUk1FRyAyNTYKKyNkZWZpbmUgSFZQQUdFU1BFUkNIVU5LIDY0CisgCisjZGVmaW5lIEh2TWF4QXJjaGl0ZWN0ZWRMcHMgCQkoKEh2THBJbmRleClIVk1BWEFSQ0hJVEVDVEVETFBTKQorI2RlZmluZSBIdk1heEFyY2hpdGVjdGVkVmlydHVhbExhbnMJKChIdkxwVmlydHVhbExhbkluZGV4KTE2KQorI2RlZmluZSBIdkxwSW5kZXhJbnZhbGlkCQkoKEh2THBJbmRleCkweGZmKQorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBFbnVtcyBmb3IgdGhlIHN1Yi1jb21wb25lbnRzIHVuZGVyIFBMSUMKKy8vIFVzZWQgaW4gSHZDYWxsICBhbmQgSHZQcmltYXJ5Q2FsbAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZW51bSAgIEh2Q2FsbENvbXBJZHMKK3sKKwlIdkNhbGxDb21wSWQgPSAwLAorCUh2Q2FsbENwdUN0bHNDb21wSWQgPSAxLAorCUh2Q2FsbENmZ0NvbXBJZCA9IDIsCisJSHZDYWxsRXZlbnRDb21wSWQgPSAzLAorCUh2Q2FsbEhwdENvbXBJZCA9IDQsCisJSHZDYWxsUGNpQ29tcElkID0gNSwKKwlIdkNhbGxTbG1Db21wSWQgPSA2LAorCUh2Q2FsbFNtQ29tcElkID0gNywKKwlIdkNhbGxTcGRDb21wSWQgPSA4LAorCUh2Q2FsbFhtQ29tcElkID0gOSwKKwlIdkNhbGxSaW9Db21wSWQgPSAxMCwgCisJSHZDYWxsUnN2ZDNDb21wSWQgPSAxMSwKKwlIdkNhbGxSc3ZkMkNvbXBJZCA9IDEyLAorCUh2Q2FsbFJzdmQxQ29tcElkID0gMTMsCisJSHZDYWxsTWF4Q29tcElkID0gMTQsCisJSHZQcmltYXJ5Q2FsbENvbXBJZCA9IDAsICAgIAorCUh2UHJpbWFyeUNhbGxDZmdDb21wSWQgPSAxLAorCUh2UHJpbWFyeUNhbGxQY2lDb21wSWQgPSAyLCAgICAKKwlIdlByaW1hcnlDYWxsU21Db21wSWQgPSAzLAorCUh2UHJpbWFyeUNhbGxTcGRDb21wSWQgPSA0LAorCUh2UHJpbWFyeUNhbGxYbUNvbXBJZCA9IDUsCisJSHZQcmltYXJ5Q2FsbFJpb0NvbXBJZCA9IDYsIAorCUh2UHJpbWFyeUNhbGxSc3ZkN0NvbXBJZCA9IDcsCisJSHZQcmltYXJ5Q2FsbFJzdmQ2Q29tcElkID0gOCwKKwlIdlByaW1hcnlDYWxsUnN2ZDVDb21wSWQgPSA5LAorCUh2UHJpbWFyeUNhbGxSc3ZkNENvbXBJZCA9IDEwLAorCUh2UHJpbWFyeUNhbGxSc3ZkM0NvbXBJZCA9IDExLAorCUh2UHJpbWFyeUNhbGxSc3ZkMkNvbXBJZCA9IDEyLAorCUh2UHJpbWFyeUNhbGxSc3ZkMUNvbXBJZCA9IDEzLAorCUh2UHJpbWFyeUNhbGxNYXhDb21wSWQgPSBIdkNhbGxNYXhDb21wSWQgICAgIAorfTsKKworc3RydWN0IEh2THBCdWZmZXJMaXN0IHsKKwl1NjQgYWRkcjsKKwl1NjQgbGVuOworfTsKKworI2VuZGlmIC8qIF9IVlRZUEVTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvSW9IcmlNYWluU3RvcmUuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvSW9IcmlNYWluU3RvcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjAwZTg2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvaVNlcmllcy9Jb0hyaU1haW5TdG9yZS5oCkBAIC0wLDAgKzEsMTY3IEBACisvKgorICogSW9IcmlNYWluU3RvcmUuaAorICogQ29weXJpZ2h0IChDKSAyMDAxICBNaWtlIENvcnJpZ2FuIElCTSBDb3Jwb3JhdGlvbgorICogCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICogCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICovCisKKyNpZm5kZWYgX0lPSFJJTUFJTlNUT1JFX0gKKyNkZWZpbmUgX0lPSFJJTUFJTlNUT1JFX0gKKworLyogTWFpbiBTdG9yZSBWcGQgZm9yIENvbmRvcixpU3RhcixzU3RhciAqLworc3RydWN0IElvSHJpTWFpblN0b3JlU2VnbWVudDQgeyAgICAKKwl1OAltc0FyZWEwRXhpc3RzOjE7CisJdTgJbXNBcmVhMUV4aXN0czoxOworCXU4CW1zQXJlYTJFeGlzdHM6MTsKKwl1OAltc0FyZWEzRXhpc3RzOjE7CisJdTgJcmVzZXJ2ZWQxOjQ7CisJdTgJcmVzZXJ2ZWQyOworCisJdTgJbXNBcmVhMEZ1bmN0aW9uYWw6MTsKKwl1OAltc0FyZWExRnVuY3Rpb25hbDoxOworCXU4CW1zQXJlYTJGdW5jdGlvbmFsOjE7CisJdTgJbXNBcmVhM0Z1bmN0aW9uYWw6MTsKKwl1OAlyZXNlcnZlZDM6NDsKKwl1OAlyZXNlcnZlZDQ7CisKKwl1MzIJdG90YWxNYWluU3RvcmU7CisKKwl1NjQJbXNBcmVhMFB0cjsKKwl1NjQJbXNBcmVhMVB0cjsKKwl1NjQJbXNBcmVhMlB0cjsKKwl1NjQJbXNBcmVhM1B0cjsKKworCXUzMgljYXJkUHJvZHVjdGlvbkxldmVsOworCisJdTMyCW1zQWRySG9sZTsKKworCXU4CW1zQXJlYTBIYXNSaXNlclZwZDoxOworCXU4CW1zQXJlYTFIYXNSaXNlclZwZDoxOworCXU4CW1zQXJlYTJIYXNSaXNlclZwZDoxOworCXU4CW1zQXJlYTNIYXNSaXNlclZwZDoxOworCXU4CXJlc2VydmVkNTo0OwkKKwl1OAlyZXNlcnZlZDY7CisJdTE2CXJlc2VydmVkNzsKKworCXU4CXJlc2VydmVkOFsyOF07CisKKwl1NjQJbm9uSW50ZXJsZWF2ZWRCbG9ja3NTdGFydEFkcjsKKwl1NjQJbm9uSW50ZXJsZWF2ZWRCbG9ja3NFbmRBZHI7Cit9OworCisvKiBNYWluIFN0b3JlIFZQRCBmb3IgUG93ZXI0ICovCitzdHJ1Y3QgSW9IcmlNYWluU3RvcmVDaGlwSW5mbzEgeworCXUzMgljaGlwTWZnSUQJX19hdHRyaWJ1dGUoKHBhY2tlZCkpOworCWNoYXIJY2hpcEVDTGV2ZWxbNF0JX19hdHRyaWJ1dGUoKHBhY2tlZCkpOworfTsKKworc3RydWN0IElvSHJpTWFpblN0b3JlVnBkSWREYXRhIHsKKwljaGFyCXR5cGVOdW1iZXJbNF07CisJY2hhcgltb2RlbE51bWJlcls0XTsKKwljaGFyCXBhcnROdW1iZXJbMTJdOworCWNoYXIJc2VyaWFsTnVtYmVyWzEyXTsKK307CisKK3N0cnVjdCBJb0hyaU1haW5TdG9yZVZwZEZydURhdGEgeworCWNoYXIJZnJ1TGFiZWxbOF0JX19hdHRyaWJ1dGUoKHBhY2tlZCkpOworCXU4CW51bWJlck9mU2xvdHMJX19hdHRyaWJ1dGUoKHBhY2tlZCkpOworCXU4CXBsdWdnaW5nVHlwZQlfX2F0dHJpYnV0ZSgocGFja2VkKSk7CisJdTE2CXNsb3RNYXBJbmRleAlfX2F0dHJpYnV0ZSgocGFja2VkKSk7Cit9OworCitzdHJ1Y3QgSW9IcmlNYWluU3RvcmVBZHJSYW5nZUJsb2NrIHsKKwl2b2lkICoJYmxvY2tTdGFydCAgICAgIF9fYXR0cmlidXRlKChwYWNrZWQpKTsKKwl2b2lkICoJYmxvY2tFbmQgICAgICAgIF9fYXR0cmlidXRlKChwYWNrZWQpKTsKKwl1MzIJYmxvY2tQcm9jQ2hpcElkIF9fYXR0cmlidXRlKChwYWNrZWQpKTsKK307CisKKyNkZWZpbmUgTWF4QXJlYUFkclJhbmdlQmxvY2tzIDQKKworc3RydWN0IElvSHJpTWFpblN0b3JlQXJlYTQgeworCXUzMgltc1ZwZEZvcm1hdAkJCV9fYXR0cmlidXRlKChwYWNrZWQpKTsKKwl1OAljb250YWluZWRWcGRUeXBlCQlfX2F0dHJpYnV0ZSgocGFja2VkKSk7CisJdTgJcmVzZXJ2ZWQxCQkJX19hdHRyaWJ1dGUoKHBhY2tlZCkpOworCXUxNglyZXNlcnZlZDIJCQlfX2F0dHJpYnV0ZSgocGFja2VkKSk7CisKKwl1NjQJbXNFeGlzdHMJCQlfX2F0dHJpYnV0ZSgocGFja2VkKSk7CisJdTY0CW1zRnVuY3Rpb25hbAkJCV9fYXR0cmlidXRlKChwYWNrZWQpKTsKKworCXUzMgltZW1vcnlTaXplCQkJX19hdHRyaWJ1dGUoKHBhY2tlZCkpOworCXUzMglwcm9jTm9kZUlkCQkJX19hdHRyaWJ1dGUoKHBhY2tlZCkpOworCisJdTMyCW51bUFkclJhbmdlQmxvY2tzCQlfX2F0dHJpYnV0ZSgocGFja2VkKSk7CisJc3RydWN0IElvSHJpTWFpblN0b3JlQWRyUmFuZ2VCbG9jayB4QWRyUmFuZ2VCbG9ja1tNYXhBcmVhQWRyUmFuZ2VCbG9ja3NdIF9fYXR0cmlidXRlKChwYWNrZWQpKTsKKworCXN0cnVjdCBJb0hyaU1haW5TdG9yZUNoaXBJbmZvMQljaGlwSW5mbzAJX19hdHRyaWJ1dGUoKHBhY2tlZCkpOworCXN0cnVjdCBJb0hyaU1haW5TdG9yZUNoaXBJbmZvMQljaGlwSW5mbzEJX19hdHRyaWJ1dGUoKHBhY2tlZCkpOworCXN0cnVjdCBJb0hyaU1haW5TdG9yZUNoaXBJbmZvMQljaGlwSW5mbzIJX19hdHRyaWJ1dGUoKHBhY2tlZCkpOworCXN0cnVjdCBJb0hyaU1haW5TdG9yZUNoaXBJbmZvMQljaGlwSW5mbzMJX19hdHRyaWJ1dGUoKHBhY2tlZCkpOworCXN0cnVjdCBJb0hyaU1haW5TdG9yZUNoaXBJbmZvMQljaGlwSW5mbzQJX19hdHRyaWJ1dGUoKHBhY2tlZCkpOworCXN0cnVjdCBJb0hyaU1haW5TdG9yZUNoaXBJbmZvMQljaGlwSW5mbzUJX19hdHRyaWJ1dGUoKHBhY2tlZCkpOworCXN0cnVjdCBJb0hyaU1haW5TdG9yZUNoaXBJbmZvMQljaGlwSW5mbzYJX19hdHRyaWJ1dGUoKHBhY2tlZCkpOworCXN0cnVjdCBJb0hyaU1haW5TdG9yZUNoaXBJbmZvMQljaGlwSW5mbzcJX19hdHRyaWJ1dGUoKHBhY2tlZCkpOworCisJdm9pZCAqICAgbXNSYW1BcmVhQXJyYXkJCQlfX2F0dHJpYnV0ZSgocGFja2VkKSk7CisJdTMyCW1zUmFtQXJlYUFycmF5TnVtRW50cmllcwlfX2F0dHJpYnV0ZSgocGFja2VkKSk7CisJdTMyCW1zUmFtQXJlYUFycmF5RW50cnlTaXplCQlfX2F0dHJpYnV0ZSgocGFja2VkKSk7CisKKwl1MzIJbnVtYURpbW1FeGlzdHMJCQlfX2F0dHJpYnV0ZSgocGFja2VkKSk7CisJdTMyCW51bWFEaW1tRnVuY3Rpb25hbAkJX19hdHRyaWJ1dGUoKHBhY2tlZCkpOworCXZvaWQgKgludW1hRGltbUFycmF5CQkJX19hdHRyaWJ1dGUoKHBhY2tlZCkpOworCXUzMgludW1hRGltbUFycmF5TnVtRW50cmllcwkJX19hdHRyaWJ1dGUoKHBhY2tlZCkpOworCXUzMgludW1hRGltbUFycmF5RW50cnlTaXplCQlfX2F0dHJpYnV0ZSgocGFja2VkKSk7CisKKwlzdHJ1Y3QgSW9IcmlNYWluU3RvcmVWcGRJZERhdGEgIGlkRGF0YQlfX2F0dHJpYnV0ZSgocGFja2VkKSk7CisKKwl1NjQJcG93ZXJEYXRhCQkJX19hdHRyaWJ1dGUoKHBhY2tlZCkpOworCXU2NAljYXJkQXNzZW1ibHlQYXJ0TnVtCQlfX2F0dHJpYnV0ZSgocGFja2VkKSk7CisJdTY0CWNoaXBTZXJpYWxOdW0JCQlfX2F0dHJpYnV0ZSgocGFja2VkKSk7CisKKwl1NjQJcmVzZXJ2ZWQzCQkJX19hdHRyaWJ1dGUoKHBhY2tlZCkpOworCWNoYXIJcmVzZXJ2ZWQ0WzE2XQkJCV9fYXR0cmlidXRlKChwYWNrZWQpKTsKKworCXN0cnVjdCBJb0hyaU1haW5TdG9yZVZwZEZydURhdGEgZnJ1RGF0YQlfX2F0dHJpYnV0ZSgocGFja2VkKSk7CisKKwl1OAl2cGRQb3J0TnVtCQkJX19hdHRyaWJ1dGUoKHBhY2tlZCkpOworCXU4CXJlc2VydmVkNQkJCV9fYXR0cmlidXRlKChwYWNrZWQpKTsKKwl1OAlmcmFtZUlkCQkJCV9fYXR0cmlidXRlKChwYWNrZWQpKTsKKwl1OAlyYWNrVW5pdAkJCV9fYXR0cmlidXRlKChwYWNrZWQpKTsKKwljaGFyCWFzY2lpS2V5d29yZFZwZFsyNTZdCQlfX2F0dHJpYnV0ZSgocGFja2VkKSk7CisJdTMyCXJlc2VydmVkNgkJCV9fYXR0cmlidXRlKChwYWNrZWQpKTsKK307CisKKworc3RydWN0IElvSHJpTWFpblN0b3JlU2VnbWVudDUgeyAgICAKKwl1MTYJcmVzZXJ2ZWQxOworCXU4CXJlc2VydmVkMjsKKwl1OAltc1ZwZEZvcm1hdDsKKworCXUzMgl0b3RhbE1haW5TdG9yZTsKKwl1NjQJbWF4Q29uZmlndXJlZE1zQWRyOworCisJc3RydWN0IElvSHJpTWFpblN0b3JlQXJlYTQqCW1zQXJlYUFycmF5OworCXUzMgltc0FyZWFBcnJheU51bUVudHJpZXM7CisJdTMyCW1zQXJlYUFycmF5RW50cnlTaXplOworCisJdTMyCW1zQXJlYUV4aXN0czsgICAgCisJdTMyCW1zQXJlYUZ1bmN0aW9uYWw7CisKKwl1NjQJcmVzZXJ2ZWQzOworfTsKKworCisKKyNlbmRpZiAvLyBfSU9IUklNQUlOU1RPUkVfSAorCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL0lvSHJpUHJvY2Vzc29yVnBkLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL0lvSHJpUHJvY2Vzc29yVnBkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY1NDMzOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvSW9IcmlQcm9jZXNzb3JWcGQuaApAQCAtMCwwICsxLDg4IEBACisvKgorICogSW9IcmlQcm9jZXNzb3JWcGQuaAorICogQ29weXJpZ2h0IChDKSAyMDAxICBNaWtlIENvcnJpZ2FuIElCTSBDb3Jwb3JhdGlvbgorICogCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICogCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICovCisjaWZuZGVmIF9JT0hSSVBST0NFU1NPUlZQRF9ICisjZGVmaW5lIF9JT0hSSVBST0NFU1NPUlZQRF9ICisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vCVRoaXMgc3RydWN0IG1hcHMgUHJvY2Vzc29yIFZwZCB0aGF0IGlzIERNQWQgdG8gU0xJQyBieSBDU1AgCisvLworCisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisKK3N0cnVjdCBJb0hyaVByb2Nlc3NvclZwZAoreworCisJdTgJeEZvcm1hdDsJCS8vIFZQRCBmb3JtYXQgaW5kaWNhdG9yCQl4MDAteDAwCisJdTgJeFByb2NTdGF0dXM6ODsJCS8vIFByb2Nlc3NvciBTdGF0ZQkJeDAxLXgwMQorCXU4CXhTZWNvbmRhcnlUaHJlYWRDb3VudDsJLy8gU2Vjb25kYXJ5IHRocmVhZCBjbnQJCXgwMi14MDIKKwl1OAl4U3JjVHlwZToxOwkJLy8gU3JjIFR5cGUJCQl4MDMteDAzCisJdTgJeFNyY1NvZnQ6MTsJCS8vIFNyYyBzdGF5IHNvZnQJCS4uLgorCXU4CXhTcmNQYXJhYmxlOjE7CQkvLyBTcmMgcGFyYWJsZQkJCS4uLgorCXU4CXhSc3ZkMTo1OwkJLy8gUmVzZXJ2ZWQJCQkuLi4KKwl1MTYJeEh2UGh5c2ljYWxQcm9jSW5kZXg7CS8vIEh5cGVydmlzb3IgcGh5c2ljYWwgcHJvYyBpbmRleDA0LXgwNQorCXUxNgl4UnN2ZDI7CQkJLy8gUmVzZXJ2ZWQJCQl4MDYteDA3CisJdTMyCXhId05vZGVJZDsJCS8vIEhhcmR3YXJlIG5vZGUgaWQJCXgwOC14MEIKKwl1MzIJeEh3UHJvY0lkOwkJLy8gSGFyZHdhcmUgcHJvY2Vzc29yIGlkCXgwQy14MEYKKwkKKwl1MzIJeFR5cGVOdW07CQkvLyBDYXJkIFR5cGUvQ0NJTiBudW1iZXIJeDEwLXgxMworCXUzMgl4TW9kZWxOdW07CQkvLyBNb2RlbC9GZWF0dXJlIG51bWJlcgkJeDE0LXgxNworCXU2NAl4U2VyaWFsTnVtOwkJLy8gU2VyaWFsIG51bWJlcgkJeDE4LXgxRgorCWNoYXIgeFBhcnROdW1bMTJdOwkJLy8gQm9vayBQYXJ0IG9yIEZQVSBudW1iZXIJeDIwLXgyQgorCWNoYXIgeE1mZ0lEWzRdOwkJCS8vIE1hbnVmYWN0dXJpbmcgSUQJCXgyQy14MkYKKworCXUzMgl4UHJvY0ZyZXE7CQkvLyBQcm9jZXNzb3IgRnJlcXVlbmN5CQl4MzAteDMzCisJdTMyCXhUaW1lQmFzZUZyZXE7CQkvLyBUaW1lIEJhc2UgRnJlcXVlbmN5CQl4MzQteDM3CisKKwl1MzIJeENoaXBFY0xldmVsOwkJLy8gQ2hpcCBFQyBMZXZlbHMJCXgzOC14M0IKKwl1MzIJeFByb2NJZFJlZzsJCS8vIFBJUiBTUFIgdmFsdWUJCXgzQy14M0YKKwl1MzIJeFBWUjsJCQkvLyBQVlIgdmFsdWUJCQl4NDAteDQzCisJdTgJeFJzdmQzWzEyXTsJCS8vIFJlc2VydmVkCQkJeDQ0LXg0RgorCisJdTMyCXhJbnN0Q2FjaGVTaXplOwkJLy8gSW5zdHJ1Y3Rpb24gY2FjaGUgc2l6ZSBpbiBLQgl4NTAteDUzCisJdTMyCXhJbnN0QmxvY2tTaXplOwkJLy8gSW5zdHJ1Y3Rpb24gY2FjaGUgYmxvY2sgc2l6ZQl4NTQteDU3CisJdTMyCXhEYXRhQ2FjaGVPcGVyYW5kU2l6ZTsJLy8gRGF0YSBjYWNoZSBvcGVyYW5kIHNpemUJeDU4LXg1QgorCXUzMgl4SW5zdENhY2hlT3BlcmFuZFNpemU7CS8vIEluc3QgY2FjaGUgb3BlcmFuZCBzaXplCXg1Qy14NUYKKworCXUzMgl4RGF0YUwxQ2FjaGVTaXplS0I7CS8vIEwxIGRhdGEgY2FjaGUgc2l6ZSBpbiBLQgl4NjAteDYzCisJdTMyCXhEYXRhTDFDYWNoZUxpbmVTaXplOwkvLyBMMSBkYXRhIGNhY2hlIGJsb2NrIHNpemUJeDY0LXg2NworCXU2NAl4UnN2ZDQ7CQkJLy8gUmVzZXJ2ZWQJCQl4NjgteDZGCisKKwl1MzIJeERhdGFMMkNhY2hlU2l6ZUtCOwkvLyBMMiBkYXRhIGNhY2hlIHNpemUgaW4gS0IJeDcwLXg3MworCXUzMgl4RGF0YUwyQ2FjaGVMaW5lU2l6ZTsJLy8gTDIgZGF0YSBjYWNoZSBibG9jayBzaXplCXg3NC14NzcKKwl1NjQJeFJzdmQ1OwkJCS8vIFJlc2VydmVkCQkJeDc4LXg3RgorCisJdTMyCXhEYXRhTDNDYWNoZVNpemVLQjsJLy8gTDMgZGF0YSBjYWNoZSBzaXplIGluIEtCCXg4MC14ODMKKwl1MzIJeERhdGFMM0NhY2hlTGluZVNpemU7CS8vIEwzIGRhdGEgY2FjaGUgYmxvY2sgc2l6ZQl4ODQteDg3CisJdTY0CXhSc3ZkNjsJCQkvLyBSZXNlcnZlZAkJCXg4OC14OEYKKyAgIAorCXU2NAl4RnJ1TGFiZWw7CQkvLyBDYXJkIExvY2F0aW9uIExhYmVsCQl4OTAteDk3CisJdTgJeFNsb3RzT25DYXJkOwkJLy8gU2xvdHMgb24gY2FyZCAoMD1ubyBzbG90cykJeDk4LXg5OAorCXU4CXhQYXJ0TG9jRmxhZzsJCS8vIExvY2F0aW9uIGZsYWcgKDAtcGx1Z2dhYmxlIDEtaW1iZWRkZWQpIHg5OS14OTkKKwl1MTYJeFNsb3RNYXBJbmRleDsJCS8vIEluZGV4IGluIHNsb3QgbWFwIHRhYmxlCXg5QS14OUIKKwl1OAl4U21hcnRDYXJkUG9ydE5vOwkvLyBTbWFydCBjYXJkIHBvcnQgbnVtYmVyCXg5Qy14OUMKKwl1OAl4UnN2ZDc7CQkJLy8gUmVzZXJ2ZWQJCQl4OUQteDlECisJdTE2CXhGcmFtZUlkQW5kUmFja1VuaXQ7CS8vIEZyYW1lIElEIGFuZCByYWNrIHVuaXQgYWRyCXg5RS14OUYKKyAgICAKKwl1OAl4UnN2ZDhbMjRdOwkJLy8gUmVzZXJ2ZWQJCQl4QTAteEI3CisKKwljaGFyIHhQcm9jU3JjWzcyXTsJCS8vIENTUCBmb3JtYXQgU1JDCQl4QjgteEZGCit9OworCisjZW5kaWYgLyogX0lPSFJJUFJPQ0VTU09SVlBEX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvSXRFeHRWcGRQYW5lbC5oIGIvaW5jbHVkZS9hc20tcHBjNjQvaVNlcmllcy9JdEV4dFZwZFBhbmVsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVlNmIxMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvSXRFeHRWcGRQYW5lbC5oCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBJdEV4dFZwZFBhbmVsLmgKKyAqIENvcHlyaWdodCAoQykgMjAwMiAgRGF2ZSBCb3V0Y2hlciBJQk0gQ29ycG9yYXRpb24KKyAqIAorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIAorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqIAorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqLworI2lmbmRlZiBfSVRFWFRWUERQQU5FTF9ICisjZGVmaW5lIF9JVEVYVFZQRFBBTkVMX0gKKworLyoKKyAqCisgKglUaGlzIHN0cnVjdCBtYXBzIHRoZSBwYW5lbCBpbmZvcm1hdGlvbiAKKyAqCisgKiBXYXJuaW5nOgorICoJVGhpcyBkYXRhIG11c3QgbWF0Y2ggdGhlIGFyY2hpdGVjdHVyZSBmb3IgdGhlIHBhbmVsIGluZm9ybWF0aW9uCisgKgorICovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBTdGFuZGFyZCBJbmNsdWRlcworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAorKi8KKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKworc3RydWN0IEl0RXh0VnBkUGFuZWwKK3sKKyAgLy8gRGVmaW5pdGlvbiBvZiB0aGUgRXh0ZW5kZWQgVnBkIE9uIFBhbmVsIERhdGEgQXJlYQorICBjaGFyICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbVNlcmlhbFs4XTsKKyAgY2hhciAgICAgICAgICAgICAgICAgICAgICBtZmdJRFs0XTsKKyAgY2hhciAgICAgICAgICAgICAgICAgICAgICByZXNlcnZlZDFbMjRdOworICBjaGFyICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmVUeXBlWzRdOworICBjaGFyICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbUlEWzZdOworICBjaGFyICAgICAgICAgICAgICAgICAgICAgIHNvbVVuaXF1ZUNudFs0XTsKKyAgY2hhciAgICAgICAgICAgICAgICAgICAgICBzZXJpYWxOdW1iZXJDb3VudDsKKyAgY2hhciAgICAgICAgICAgICAgICAgICAgICByZXNlcnZlZDJbN107CisgIHUxNiAgICAgICAgICAgICAgICAgICAgICAgYmJ1MzsKKyAgdTE2ICAgICAgICAgICAgICAgICAgICAgICBiYnUyOworICB1MTYgICAgICAgICAgICAgICAgICAgICAgIGJidTE7CisgIGNoYXIgICAgICAgICAgICAgICAgICAgICAgeExvY2F0aW9uTGFiZWxbOF07CisgIHU4ICAgICAgICAgICAgICAgICAgICAgICAgeFJzdmQxWzZdOworICB1MTYgICAgICAgICAgICAgICAgICAgICAgIHhGcmFtZUlkOworICB1OCAgICAgICAgICAgICAgICAgICAgICAgIHhSc3ZkMls0OF07Cit9OworCisjZW5kaWYgLyogX0lURVhUVlBEUEFORUxfSCAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvSXRJcGxQYXJtc1JlYWwuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvSXRJcGxQYXJtc1JlYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDhiNDMwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvaVNlcmllcy9JdElwbFBhcm1zUmVhbC5oCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBJdElwbFBhcm1zUmVhbC5oCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgIE1pa2UgQ29ycmlnYW4gSUJNIENvcnBvcmF0aW9uCisgKiAKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiAKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKiAKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKi8KKyNpZm5kZWYgX0lUSVBMUEFSTVNSRUFMX0gKKyNkZWZpbmUgX0lUSVBMUEFSTVNSRUFMX0gKKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLwlUaGlzIHN0cnVjdCBtYXBzIHRoZSBJUEwgUGFyYW1ldGVycyBETUEnZCBmcm9tIHRoZSBTUC4gICAgICAgICAgICAgICAgICAKKy8vCisvLyBXYXJuaW5nOgorLy8JVGhpcyBkYXRhIG11c3QgbWFwIGluIGV4YWN0bHkgNjQgYnl0ZXMgYW5kIG1hdGNoIHRoZSBhcmNoaXRlY3R1cmUgZm9yCisvLwl0aGUgSVBMIHBhcm1zCisvLworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gU3RhbmRhcmQgSW5jbHVkZXMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCitzdHJ1Y3QgSXRJcGxQYXJtc1JlYWwKK3sKKwl1OAl4Rm9ybWF0OwkJLy8gRGVmaW5lcyBmb3JtYXQgb2YgSXBsUGFybXMJCXgwMC14MDAKKwl1OAl4UnN2ZDAxOjY7CQkvLyBSZXNlcnZlZAkJCQl4MDEteDAxCisJdTgJeEFsdGVybmF0ZVNlYXJjaDoxOwkvLyBBbHRlcm5hdGUgc2VhcmNoIGluZGljYXRvcgkJLi4uCisJdTgJeFVhU3VwcGxpZWQ6MTsJCS8vIFVBIFN1cHBsaWVkIG9uIHByb2dyYW1tZWQgSVBMCS4uLgorCXU4CXhMc1VhRm9ybWF0OwkJLy8gRm9ybWF0IGJ5dGUgZm9yIFVBCQkJeDAyLXgwMgorCXU4CXhSc3ZkMDI7CQkvLyBSZXNlcnZlZAkJCQl4MDMteDAzCisJdTMyCXhMc1VhOwkJCS8vIExTIFVBCQkJCXgwNC14MDcKKwl1MzIJeFVudXNlZExzTGlkOwkJLy8gRmlyc3QgT1MgTElEIHRvIGxvYWQJCQl4MDgteDBCCisJdTE2CXhMc0J1c051bWJlcjsJCS8vIExTIEJ1cyBOdW1iZXIJCQl4MEMteDBECisJdTgJeExzQ2FyZEFkcjsJCS8vIExTIENhcmQgQWRkcmVzcwkJCXgwRS14MEUKKwl1OAl4THNCb2FyZEFkcjsJCS8vIExTIEJvYXJkIEFkZHJlc3MJCQl4MEYteDBGCisJdTMyCXhSc3ZkMDM7CQkvLyBSZXNlcnZlZAkJCQl4MTAteDEzCisJdTgJeFNwY25QcmVzZW50OjE7CQkvLyBTUENOIHByZXNlbnQJCQkJeDE0LXgxNAorCXU4CXhDcG1QcmVzZW50OjE7CQkvLyBDUE0gcHJlc2VudAkJCQkuLi4KKwl1OAl4UnN2ZDA0OjY7CQkvLyBSZXNlcnZlZAkJCQkuLi4KKwl1OAl4UnN2ZDA1OjQ7CQkvLyBSZXNlcnZlZAkJCQl4MTUteDE1CisJdTgJeEtleUxvY2s6NDsJCS8vIEtleWxvY2sgc2V0dGluZwkJCS4uLgorCXU4CXhSc3ZkMDY6NjsJCS8vIFJlc2VydmVkCQkJCXgxNi14MTYKKwl1OAl4SXBsTW9kZToyOwkJLy8gSXBsIG1vZGUgKEF8QnxDfEQpCQkJLi4uCisJdTgJeEh3SXBsVHlwZTsJCS8vIEZhc3QgdiBzbG93IHYgc2xvdyBFQyBIVyBJUEwJCXgxNy14MTcKKwl1MTYJeENwbUVuYWJsZWRJcGw6MTsJLy8gQ1BNIGluIGVmZmVjdCB3aGVuIElQTCBpbml0aWF0ZWQJeDE4LXgxOQorCXUxNgl4UG93ZXJPblJlc2V0SXBsOjE7CS8vIEluZGljYXRlIFBPUiBjb25kaXRpb24JCS4uLgorCXUxNgl4TWFpblN0b3JlUHJlc2VydmVkOjE7CS8vIE1haW4gU3RvcmFnZSBpcyBwcmVzZXJ2ZWQJCS4uLgorCXUxNgl4UnN2ZDA3OjEzOwkJLy8gUmVzZXJ2ZWQJCQkJLi4uCisJdTE2CXhJcGxTb3VyY2U6MTY7CQkvLyBJcGwgc291cmNlCQkJCXgxQS14MUIKKwl1OAl4SXBsUmVhc29uOjg7CQkvLyBSZWFzb24gZm9yIHRoaXMgSVBMCQkJeDFDLXgxQworCXU4CXhSc3ZkMDg7CQkvLyBSZXNlcnZlZAkJCQl4MUQteDFECisJdTE2CXhSc3ZkMDk7CQkvLyBSZXNlcnZlZAkJCQl4MUUteDFGCisJdTE2CXhTeXNCb3hUeXBlOwkJLy8gU3lzdGVtIEJveCBUeXBlCQkJeDIwLXgyMQorCXUxNgl4U3lzUHJvY1R5cGU7CQkvLyBTeXN0ZW0gUHJvY2Vzc29yIFR5cGUJCXgyMi14MjMKKwl1MzIJeFJzdmQxMDsJCS8vIFJlc2VydmVkCQkJCXgyNC14MjcKKwl1NjQJeFJzdmQxMTsJCS8vIFJlc2VydmVkCQkJCXgyOC14MkYKKwl1NjQJeFJzdmQxMjsJCS8vIFJlc2VydmVkCQkJCXgzMC14MzcKKwl1NjQJeFJzdmQxMzsJCS8vIFJlc2VydmVkCQkJCXgzOC14M0YKK307CisKKyNlbmRpZiAvKiBfSVRJUExQQVJNU1JFQUxfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvaVNlcmllcy9JdExwTmFjYS5oIGIvaW5jbHVkZS9hc20tcHBjNjQvaVNlcmllcy9JdExwTmFjYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViYWZmZGQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL0l0THBOYWNhLmgKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIEl0THBOYWNhLmgKKyAqIENvcHlyaWdodCAoQykgMjAwMSAgTWlrZSBDb3JyaWdhbiBJQk0gQ29ycG9yYXRpb24KKyAqIAorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIAorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqIAorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqLworI2lmbmRlZiBfSVRMUE5BQ0FfSAorI2RlZmluZSBfSVRMUE5BQ0FfSAorCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8JVGhpcyBjb250cm9sIGJsb2NrIGNvbnRhaW5zIHRoZSBkYXRhIHRoYXQgaXMgc2hhcmVkIGJldHdlZW4gdGhlCisvLwloeXBlcnZpc29yIChQTElDKSBhbmQgdGhlIE9TLgorLy8KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworc3RydWN0IEl0THBOYWNhCit7CisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBDQUNIRV9MSU5FXzEgMHgwMDAwIC0gMHgwMDdGIENvbnRhaW5zIHJlYWQtb25seSBkYXRhCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJdTMyCXhEZXNjOwkJCS8vIEV5ZSBjYXRjaGVyCQkJeDAwLXgwMworCXUxNgl4U2l6ZTsJCQkvLyBTaXplIG9mIHRoaXMgY2xhc3MJCXgwNC14MDUKKwl1MTYJeEludEhkbHJPZmZzZXQ7CQkvLyBPZmZzZXQgdG8gSW50SGRsciBhcnJheQl4MDYteDA3CisJdTgJeE1heEludEhkbHJFbnRyaWVzOwkvLyBOdW1iZXIgb2YgZW50cmllcyBpbiBhcnJheQl4MDgteDA4CisJdTgJeFByaW1hcnlMcEluZGV4OwkvLyBMUCBJbmRleCBvZiBQcmltYXJ5CQl4MDkteDA5CisJdTgJeFNlcnZpY2VMcEluZGV4OwkvLyBMUCBJbmQgb2YgU2VydmljZSBGb2NhbCBQb2ludHgwQS14MEEKKwl1OAl4THBJbmRleDsJCS8vIExQIEluZGV4CQkJeDBCLXgwQgorCXUxNgl4TWF4THBRdWV1ZXM7CQkvLyBOdW1iZXIgb2YgYWxsb2NhdGVkIHF1ZXVlcwl4MEMteDBECisJdTE2CXhMcFF1ZXVlT2Zmc2V0OwkJLy8gT2Zmc2V0IHRvIHN0YXJ0IG9mIExQIHF1ZXVlcwl4MEUteDBGCisJdTgJeFBpckVudmlyb25Nb2RlOjg7CS8vIFBpcmFuaGEgb3IgaGFyZHdhcmUJCXgxMC14MTAKKwl1OAl4UGlyQ29uc29sZU1vZGU6ODsJLy8gUGlyYW5oYSBjb25zb2xlIGluZGljYXRvcgl4MTEteDExCisJdTgJeFBpckRhc2RNb2RlOjg7CQkvLyBQaXJhbmhhIGRhc2QgaW5kaWNhdG9yCXgxMi14MTIKKwl1OAl4UnN2ZDFfMFs1XTsJCS8vIFJlc2VydmVkIGZvciBQaXJhbmhhIHJlbGF0ZWQJeDEzLXgxNworCXU4CXhMcGFySW5zdGFsbGVkOjE7CS8vIElzIExQQVIgaW5zdGFsbGVkIG9uIHN5c3RlbQl4MTgteDFGCisJdTgJeFN5c1BhcnRpdGlvbmVkOjE7CS8vIElzIHRoZSBzeXN0ZW0gcGFydGl0aW9uZWQJLi4uCisJdTgJeEh3U3luY2VkVEJzOjE7CQkvLyBIYXJkd2FyZSBzeW5jZWQgVEJzCQkuLi4KKwl1OAl4SW50UHJvY1V0aWxIbXQ6MTsJLy8gVXRpbGl6ZSBITVQgZm9yIGludGVycnVwdHMJLi4uCisJdTgJeFJzdmQxXzE6NDsJCS8vIFJlc2VydmVkCQkJLi4uCisJdTgJeFNwVnBkRm9ybWF0Ojg7CQkvLyBWUEQgYXJlYXMgYXJlIGluIENTUCBmb3JtYXQJLi4uCisJdTgJeEludFByb2NSYXRpbzo4OwkvLyBSYXRpbyBvZiBpbnQgcHJvY3MgdG8gcHJvY3MJLi4uCisJdTgJeFJzdmQxXzJbNV07CQkvLyBSZXNlcnZlZAkJCS4uLgorCXUxNgl4UnN2ZDFfMzsJCS8vIFJlc2VydmVkCQkJeDIwLXgyMQorCXUxNgl4UGxpY1ZybUluZGV4OwkJLy8gVlJNIGluZGV4IG9mIFBMSUMJCXgyMi14MjMKKwl1MTYJeE1pblN1cHBvcnRlZFNsaWNWcm1JbmQ7Ly8gTWluIHN1cHBvcnRlZCBPUyBWUk0gaW5kZXgJeDI0LXgyNQorCXUxNgl4TWluQ29tcGF0YWJsZVNsaWNWcm1JbmQ7Ly8gTWluIGNvbXBhdGlibGUgT1MgVlJNIGluZGV4IHgyNi14MjcKKwl1NjQJeExvYWRBcmVhQWRkcjsJCS8vIEVSIGFkZHJlc3Mgb2YgbG9hZCBhcmVhCXgyOC14MkYKKwl1MzIJeExvYWRBcmVhQ2h1bmtzOwkvLyBDaHVua3MgZm9yIHRoZSBsb2FkIGFyZWEJeDMwLXgzMworCXUzMgl4UGFzZVN5c0NhbGxDUk1hc2s7CS8vIE1hc2sgdXNlZCB0byB0ZXN0IENSIGJlZm9yZSAgeDM0LXgzNworCS8vIGRvaW5nIGFuIEFTUiBzd2l0Y2ggb24gUEFTRQorCS8vIHN5c3RlbSBjYWxsLgorCXU2NAl4U2xpY1NlZ21lbnRUYWJsZVB0cjsgICAvLyBQb2ludGVyIHRvIFNsaWMgc2VnIHRhYmxlLiAgIHgzOC14M2YKKwl1OAl4UnN2ZDFfNFs2NF07CQkvLyAgICAgICAgIAkJCXg0MC14N0YgCisgICAKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIENBQ0hFX0xJTkVfMiAweDAwODAgLSAweDAwRkYgQ29udGFpbnMgbG9jYWwgcmVhZC13cml0ZSBkYXRhCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJdTgJeFJzdmQyXzBbMTI4XTsJCS8vIFJlc2VydmVkCQkJeDAwLXg3RgorCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBDQUNIRV9MSU5FXzMtNiAweDAxMDAgLSAweDAyRkYgQ29udGFpbnMgTFAgUXVldWUgaW5kaWNhdG9ycworLy8gTkI6IFBhZGRpbmcgcmVxdWlyZWQgdG8ga2VlcCB4SW50ZXJycnVwdEhkbHIgYXQgeDMwMCB3aGljaCBpcyByZXF1aXJlZCAKKy8vIGZvciB2NHI0IFBMSUMuCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJdTgJeE9sZExwUXVldWVbMTI4XTsJLy8gTFAgUXVldWUgbmVlZGVkIGZvciB2NHI0CTEwMC0xN0YKKwl1OAl4UnN2ZDNfMFszODRdOwkJLy8gUmVzZXJ2ZWQJCQkxODAtMkZGCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBDQUNIRV9MSU5FXzctOCAweDAzMDAgLSAweDAzRkYgQ29udGFpbnMgdGhlIGFkZHJlc3Mgb2YgdGhlIE9TIGludGVycnVwdAorLy8gIGhhbmRsZXJzCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJdTY0CXhJbnRlcnJ1cHRIZGxyWzMyXTsJLy8gSW50ZXJydXB0IGhhbmRsZXJzCQkzMDAteDNGRgorfTsKKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjZW5kaWYgLyogX0lUTFBOQUNBX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvSXRMcFF1ZXVlLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL0l0THBRdWV1ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmNGRkZTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL0l0THBRdWV1ZS5oCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBJdExwUXVldWUuaAorICogQ29weXJpZ2h0IChDKSAyMDAxICBNaWtlIENvcnJpZ2FuIElCTSBDb3Jwb3JhdGlvbgorICogCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICogCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICovCisjaWZuZGVmIF9JVExQUVVFVUVfSAorI2RlZmluZSBfSVRMUFFVRVVFX0gKKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vCVRoaXMgY29udHJvbCBibG9jayBkZWZpbmVzIHRoZSBzaW1wbGUgTFAgcXVldWUgc3RydWN0dXJlIHRoYXQgaXMgCisvLwlzaGFyZWQgYmV0d2VlbiB0aGUgaHlwZXJ2aXNvciAoUExJQykgYW5kIHRoZSBPUyBpbiBvcmRlciB0byBzZW5kIAorLy8JZXZlbnRzIHRvIGFuIExQLiAgCisvLyAgICAKKworI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKworc3RydWN0IEh2THBFdmVudDsKKworI2RlZmluZSBJVE1heExwUXVldWVzIDgKKworI2RlZmluZSBOb3RVc2VkCQkwCS8vIFF1ZXVlIHdpbGwgbm90IGJlIHVzZWQgYnkgUExJQworI2RlZmluZSBEZWRpY2F0ZWRJbwkxCS8vIFF1ZXVlIGRlZGljYXRlZCB0byBJTyBwcm9jZXNzb3Igc3BlY2lmaWVkCisjZGVmaW5lIERlZGljYXRlZExwCTIJLy8gUXVldWUgZGVkaWNhdGVkIHRvIExQIHNwZWNpZmllZAorI2RlZmluZSBTaGFyZWQJCTMJLy8gUXVldWUgc2hhcmVkIGZvciBib3RoIElPIGFuZCBMUAorCisjZGVmaW5lIExwRXZlbnRTdGFja1NpemUgNDA5NgorI2RlZmluZSBMcEV2ZW50TWF4U2l6ZSAgIDI1NgorI2RlZmluZSBMcEV2ZW50QWxpZ24JIDY0CisKK3N0cnVjdCBJdExwUXVldWUKK3sKKy8vCisvLyAgVGhlIHhTbGljQ3VyRXZlbnRQdHIgaXMgdGhlIHBvaW50ZXIgdG8gdGhlIG5leHQgZXZlbnQgc3RhY2sgZW50cnkgdGhhdCB3aWxsCisvLyAgYmVjb21lIHZhbGlkLiAgVGhlIE9TIG11c3QgcGVlayBhdCB0aGlzIGVudHJ5IHRvIGRldGVybWluZSBpZiBpdCBpcyB2YWxpZC4KKy8vICBQTElDIHdpbGwgc2V0IHRoZSB2YWxpZCBpbmRpY2F0b3IgYXMgdGhlIHZlcnkgbGFzdCBzdG9yZSBpbnRvIHRoYXQgZW50cnkuCisvLworLy8gIFdoZW4gdGhlIE9TIGhhcyBjb21wbGV0ZWQgcHJvY2Vzc2luZyBvZiB0aGUgZXZlbnQgdGhlbiBpdCB3aWxsIG1hcmsgdGhlIGV2ZW50CisvLyAgYXMgaW52YWxpZCBzbyB0aGF0IFBMSUMga25vd3MgaXQgY2FuIHN0b3JlIGludG8gdGhhdCBldmVudCBsb2NhdGlvbiBhZ2Fpbi4KKy8vCisvLyBJZiB0aGUgZXZlbnQgc3RhY2sgZmlsbHMgYW5kIHRoZXJlIGFyZSBvdmVyZmxvdyBldmVudHMsIHRoZW4gUExJQyB3aWxsIHNldCAKKy8vIHRoZSB4UGxpY092ZXJmbG93SW50UGVuZGluZyBmbGFnIGluIHdoaWNoIGNhc2UgdGhlIE9TIHdpbGwgaGF2ZSB0byBmZXRjaCB0aGUgCisvLyBhZGRpdGlvbmFsIExQIGV2ZW50cyBvbmNlIHRoZXkgaGF2ZSBkcmFpbmVkIHRoZSBldmVudCBzdGFjay4KKy8vCisvLyBUaGUgZmlyc3QgMTYtYnl0ZXMgYXJlIGtub3duIGJ5IGJvdGggdGhlIE9TIGFuZCBQTElDLiAgVGhlIHJlbWFpbmRlciBvZiB0aGUKKy8vIGNhY2hlIGxpbmUgaXMgZm9yIHVzZSBieSB0aGUgT1MuCisvLworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCXU4CXhQbGljT3ZlcmZsb3dJbnRQZW5kaW5nOy8vIDB4MDAgT3ZlcmZsb3cgZXZlbnRzIGFyZSBwZW5kaW5nCisJdTgJeFBsaWNTdGF0dXM7CQkvLyAweDAxIERlZGljYXRlZElvIG9yIERlZGljYXRlZExwIG9yIE5vdFVzZWQKKwl1MTYJeFNsaWNMb2dpY2FsUHJvY0luZGV4OwkvLyAweDAyIExvZ2ljYWwgUHJvYyBJbmRleCBmb3IgY29ycmVsYXRpb24KKwl1OAl4UGxpY1JzdmRbMTJdOwkJLy8gMHgwNAorCWNoYXIqCXhTbGljQ3VyRXZlbnRQdHI7CS8vIDB4MTAKKwljaGFyKgl4U2xpY0xhc3RWYWxpZEV2ZW50UHRyOwkvLyAweDE4CisJY2hhcioJeFNsaWNFdmVudFN0YWNrUHRyOwkvLyAweDIwCisJdTgJeEluZGV4OwkJCS8vIDB4MjggdW5pcXVlIHNlcXVlbnRpYWwgaW5kZXguCisJdTgJeFNsaWNSc3ZkWzNdOwkJLy8gMHgyOS0yYgorCXUzMgl4SW5Vc2VXb3JkOwkJLy8gMHgyQworCXU2NAl4THBJbnRDb3VudDsJCS8vIDB4MzAgVG90YWwgTHAgSW50IG1zZ3MgcHJvY2Vzc2VkCisJdTY0CXhMcEludENvdW50QnlUeXBlWzldOwkvLyAweDM4LTB4N0YgRXZlbnQgY291bnRzIGJ5IHR5cGUKK307CisKK2V4dGVybiBzdHJ1Y3QgSXRMcFF1ZXVlIHhJdExwUXVldWU7CisKK2V4dGVybiBzdHJ1Y3QgSHZMcEV2ZW50ICogSXRMcFF1ZXVlX2dldE5leHRMcEV2ZW50KCBzdHJ1Y3QgSXRMcFF1ZXVlICogKTsKK2V4dGVybiBpbnQgSXRMcFF1ZXVlX2lzTHBJbnRQZW5kaW5nKCBzdHJ1Y3QgSXRMcFF1ZXVlICogKTsgCitleHRlcm4gdW5zaWduZWQgSXRMcFF1ZXVlX3Byb2Nlc3MoIHN0cnVjdCBJdExwUXVldWUgKiwgc3RydWN0IHB0X3JlZ3MgKiApOworZXh0ZXJuIHZvaWQgSXRMcFF1ZXVlX2NsZWFyVmFsaWQoIHN0cnVjdCBIdkxwRXZlbnQgKiApOworCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHByb2Nlc3NfaVNlcmllc19ldmVudHMoIHZvaWQgKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwkiCWxpCTAsMHg1NTU1CVxuXAorCQlzYyIKKwk6IDogOiAicjAiLCAicjMiICk7CQorfQorCisjZW5kaWYgLyogX0lUTFBRVUVVRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL0l0THBSZWdTYXZlLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL0l0THBSZWdTYXZlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFmYzRjOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvSXRMcFJlZ1NhdmUuaApAQCAtMCwwICsxLDg3IEBACisvKgorICogSXRMcFJlZ1NhdmUuaAorICogQ29weXJpZ2h0IChDKSAyMDAxICBNaWtlIENvcnJpZ2FuIElCTSBDb3Jwb3JhdGlvbgorICogCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICogCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICovCisjaWZuZGVmIF9JVExQUkVHU0FWRV9ICisjZGVmaW5lIF9JVExQUkVHU0FWRV9ICisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vCVRoaXMgY29udHJvbCBibG9jayBjb250YWlucyB0aGUgZGF0YSB0aGF0IGlzIHNoYXJlZCBiZXR3ZWVuIFBMSUMKKy8vCWFuZCB0aGUgT1MKKy8vICAgIAorLy8KKworc3RydWN0IEl0THBSZWdTYXZlCit7CisJdTMyCXhEZXNjOwkJLy8gRXllIGNhdGNoZXIgICJMcFJTIiBlYmNkaWMJMDAwLTAwMworCXUxNgl4U2l6ZTsJCS8vIFNpemUgb2YgdGhpcyBjbGFzcwkJMDA0LTAwNQorCXU4CXhJblVzZTsgICAgICAgICAvLyBBcmVhIGlzIGxpdmUgICAgICAgICAgICAgICAgIDAwNi0wMDcKKwl1OAl4UnN2ZDFbOV07IAkvLyBSZXNlcnZlZAkJCTAwNy0wMEYKKworCXU4ICAgICAgeEZpeGVkUmVnU2F2ZVszNTJdOyAvLyBGaXhlZCBSZWdpc3RlciBTYXZlIEFyZWEgMDEwLTE2RiAKKwl1MzIJeENUUkw7CQkvLyBDb250cm9sIFJlZ2lzdGVyCQkxNzAtMTczCisJdTMyCXhERUM7CQkvLyBEZWNyZW1lbnRlcgkJCTE3NC0xNzcgICAgCisJdTMyCXhGUFNDUjsJCS8vIEZQIFN0YXR1cyBhbmQgQ29udHJvbCBSZWcJMTc4LTE3QgorCXUzMgl4UFZSOwkJLy8gUHJvY2Vzc29yIFZlcnNpb24gTnVtYmVyCTE3Qy0xN0YKKyAgICAKKwl1NjQJeE1NQ1IwOwkJLy8gTW9uaXRvciBNb2RlIENvbnRyb2wgUmVnIDAJMTgwLTE4NworCXUzMgl4UE1DMTsJCS8vIFBlcmYgTW9uaXRvciBDb3VudGVyIDEJMTg4LTE4QgorCXUzMgl4UE1DMjsJCS8vIFBlcmYgTW9uaXRvciBDb3VudGVyIDIJMThDLTE4RgorCXUzMgl4UE1DMzsJCS8vIFBlcmYgTW9uaXRvciBDb3VudGVyIDMJMTkwLTE5MworCXUzMgl4UE1DNDsJCS8vIFBlcmYgTW9uaXRvciBDb3VudGVyIDQJMTk0LTE5NworCXUzMgl4UElSOwkJLy8gUHJvY2Vzc29yIElEIFJlZwkJMTk4LTE5QgorICAgIAorCXUzMgl4TU1DUjE7CQkvLyBNb25pdG9yIE1vZGUgQ29udHJvbCBSZWcgMQkxOUMtMTlGCisJdTMyCXhNTUNSQTsJCS8vIE1vbml0b3IgTW9kZSBDb250cm9sIFJlZyBBCTFBMC0xQTMKKwl1MzIJeFBNQzU7CQkvLyBQZXJmIE1vbml0b3IgQ291bnRlciA1CTFBNC0xQTcKKwl1MzIJeFBNQzY7CQkvLyBQZXJmIE1vbml0b3IgQ291bnRlciA2CTFBOC0xQUIKKwl1MzIJeFBNQzc7CQkvLyBQZXJmIE1vbml0b3IgQ291bnRlciA3CTFBQy0xQUYKKwl1MzIJeFBNQzg7CQkvLyBQZXJmIE1vbml0b3IgQ291bnRlciA4CTFCMC0xQjMKKwl1MzIJeFRTQzsJCS8vIFRocmVhZCBTd2l0Y2ggQ29udHJvbAkxQjQtMUI3CisJdTMyCXhUU1Q7CQkvLyBUaHJlYWQgU3dpdGNoIFRpbWVvdXQJMUI4LTFCQgorCXUzMgl4UnN2ZDsgICAgICAgICAgLy8gUmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICAxQkMtMUJGCisKKwl1NjQJeEFDQ1I7CQkvLyBBZGRyZXNzIENvbXBhcmUgQ29udHJvbCBSZWcJMUMwLTFDNworCXU2NAl4SU1SOwkJLy8gSW5zdHJ1Y3Rpb24gTWF0Y2ggUmVnaXN0ZXIJMUM4LTFDRiAgICAKKwl1NjQJeFNEUjE7CQkvLyBTdG9yYWdlIERlc2NyaXB0aW9uIFJlZyAxCTFEMC0xRDcgICAgCisJdTY0CXhTUFJHMDsJCS8vIFNwZWNpYWwgUHVycG9zZSBSZWcgR2VuZXJhbDAJMUQ4LTFERgorCXU2NAl4U1BSRzE7CQkvLyBTcGVjaWFsIFB1cnBvc2UgUmVnIEdlbmVyYWwxCTFFMC0xRTcKKwl1NjQJeFNQUkcyOwkJLy8gU3BlY2lhbCBQdXJwb3NlIFJlZyBHZW5lcmFsMgkxRTgtMUVGCisJdTY0CXhTUFJHMzsJCS8vIFNwZWNpYWwgUHVycG9zZSBSZWcgR2VuZXJhbDMJMUYwLTFGNworCXU2NAl4VEI7CQkvLyBUaW1lIEJhc2UgUmVnaXN0ZXIJCTFGOC0xRkYKKyAgIAorCXU2NAl4RlBSWzMyXTsJLy8gRmxvYXRpbmcgUG9pbnQgUmVnaXN0ZXJzCTIwMC0yRkYKKworCXU2NAl4TVNSOwkJLy8gTWFjaGluZSBTdGF0ZSBSZWdpc3RlciAgCTMwMC0zMDcKKwl1NjQJeE5JQTsJCS8vIE5leHQgSW5zdHJ1Y3Rpb24gQWRkcmVzcwkzMDgtMzBGCisKKwl1NjQJeERBQlI7CQkvLyBEYXRhIEFkZHJlc3MgQnJlYWtwb2ludCBSZWcJMzEwLTMxNworCXU2NAl4SUFCUjsJCS8vIEluc3QgQWRkcmVzcyBCcmVha3BvaW50IFJlZwkzMTgtMzFGCisKKwl1NjQJeEhJRDA7CQkvLyBIVyBJbXBsZW1lbnRhdGlvbiBEZXBlbmRlbnQwCTMyMC0zMjcKKworCXU2NAl4SElENDsJCS8vIEhXIEltcGxlbWVudGF0aW9uIERlcGVuZGVudDQJMzI4LTMyRgorCXU2NAl4U0NPTWQ7CQkvLyBTQ09OIERhdGEgUmVnIChTUFJHNCkgICAgICAgCTMzMC0zMzcKKwl1NjQJeFNDT01jOwkJLy8gU0NPTiBDb21tYW5kIFJlZyAoU1BSRzUpICAgIAkzMzgtMzNGCisJdTY0CXhTREFSOwkJLy8gU2FtcGxlIERhdGEgQWRkcmVzcyBSZWdpc3RlcgkzNDAtMzQ3CisJdTY0CXhTSUFSOwkJLy8gU2FtcGxlIEluc3QgQWRkcmVzcyBSZWdpc3RlcgkzNDgtMzRGCisKKwl1OAl4UnN2ZDNbMTc2XTsJLy8gUmVzZXJ2ZWQJCQkzNTAtM0ZGCit9OworCisjZW5kaWYgLyogX0lUTFBSRUdTQVZFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvSXRTcENvbW1BcmVhLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL0l0U3BDb21tQXJlYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxYjU2ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL0l0U3BDb21tQXJlYS5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBJdFNwQ29tbUFyZWEuaAorICogQ29weXJpZ2h0IChDKSAyMDAxICBNaWtlIENvcnJpZ2FuIElCTSBDb3Jwb3JhdGlvbgorICogCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICogCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICovCisKKworI2lmbmRlZiBfSVRTUENPTU1BUkVBX0gKKyNkZWZpbmUgX0lUU1BDT01NQVJFQV9ICisKKworc3RydWN0IFNwQ29tbUFyZWEKK3sKKwl1MzIJeERlc2M7CQkJLy8gRGVzY3JpcHRvciAob25seSBpbiBuZXcgZm9ybWF0cykJMDAwLTAwMworCXU4CXhGb3JtYXQ7CQkvLyBGb3JtYXQgKG9ubHkgaW4gbmV3IGZvcm1hdHMpCQkwMDQtMDA0CisJdTgJeFJzdmQxWzExXTsJCS8vIFJlc2VydmVkCQkJCTAwNS0wMEYKKwl1NjQJeFJhd1RiQXRJcGxTdGFydDsJLy8gUmF3IEhXIFRCIHZhbHVlIHdoZW4gSVBMIGlzIHN0YXJ0ZWQJMDEwLTAxNworCXU2NAl4UmF3VG9kQXRJcGxTdGFydDsJLy8gUmF3IEhXIFRPRCB2YWx1ZSB3aGVuIElQTCBpcyBzdGFydGVkCTAxOC0wMUYKKwl1NjQJeEJjZFRpbWVBdElwbFN0YXJ0OwkvLyBCQ0QgdGltZSB3aGVuIElQTCBpcyBzdGFydGVkCQkwMjAtMDI3CisJdTY0CXhCY2RUaW1lQXRPc1N0YXJ0OwkvLyBCQ0QgdGltZSB3aGVuIE9TIHBhc3NlZCBjb250cm9sCTAyOC0wMkYKKwl1OAl4UnN2ZDJbODBdOwkJLy8gUmVzZXJ2ZWQJCQkJMDMwLTA3RgorfTsKKworZXh0ZXJuIHN0cnVjdCBTcENvbW1BcmVhIHhTcENvbW1BcmVhOworCisjZW5kaWYgLyogX0lUU1BDT01NQVJFQV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL0l0VnBkQXJlYXMuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvSXRWcGRBcmVhcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxMjA0MzkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL0l0VnBkQXJlYXMuaApAQCAtMCwwICsxLDk2IEBACisvKgorICogSXRWcGRBcmVhcy5oCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgIE1pa2UgQ29ycmlnYW4gSUJNIENvcnBvcmF0aW9uCisgKiAKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiAKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKiAKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKi8KKyNpZm5kZWYgX0lUVlBEQVJFQVNfSAorI2RlZmluZSBfSVRWUERBUkVBU19ICisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vICAgICAgVGhpcyBmaWxlIGRlZmluZXMgdGhlIGFkZHJlc3MgYW5kIGxlbmd0aCBvZiBhbGwgb2YgdGhlIFZQRCBhcmVhIHBhc3NlZCB0bworLy8JdGhlIE9TIGZyb20gUExJQyAobW9zdCBvZiB3aGljaCBzdGFydCBmcm9tIHRoZSBTUCkuCisvLworCisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisKKy8vIFZQRCBFbnRyeSBpbmRleCBpcyBjYXJ2ZWQgaW4gc3RvbmUgLSBjYW5ub3QgYmUgY2hhbmdlZCAoZWFzaWx5KS4KKyNkZWZpbmUgSXRWcGRDZWNWcGQJCQkJICAgMAorI2RlZmluZSBJdFZwZER5bmFtaWNTcGFjZQkJCSAgIDEKKyNkZWZpbmUgSXRWcGRFeHRWcGQJCQkJICAgMgorI2RlZmluZSBJdFZwZEV4dFZwZE9uUGFuZWwJCQkgICAzCisjZGVmaW5lIEl0VnBkRmlyc3RQYWNhCQkJCSAgIDQKKyNkZWZpbmUgSXRWcGRJb1ZwZAkJCQkgICA1CisjZGVmaW5lIEl0VnBkSXBsUGFybXMJCQkJICAgNgorI2RlZmluZSBJdFZwZE1zVnBkCQkJCSAgIDcKKyNkZWZpbmUgSXRWcGRQYW5lbFZwZAkJCQkgICA4CisjZGVmaW5lIEl0VnBkTHBOYWNhCQkJCSAgIDkKKyNkZWZpbmUgSXRWcGRCYWNrcGxhbmVBbmRNYXliZUNsb2NrQ2FyZFZwZCAgICAgICAgMTAgCisjZGVmaW5lIEl0VnBkUmVjb3ZlcnlMb2dCdWZmZXIJCSAgICAgICAgICAxMQorI2RlZmluZSBJdFZwZFNwQ29tbUFyZWEJCQkJICAxMgorI2RlZmluZSBJdFZwZFNwTG9nQnVmZmVyCQkJICAxMworI2RlZmluZSBJdFZwZFNwTG9nQnVmZmVyU2F2ZQkJCSAgMTQKKyNkZWZpbmUgSXRWcGRTcENhcmRWcGQJCQkJICAxNQorI2RlZmluZSBJdFZwZEZpcnN0UHJvY1ZwZAkJCSAgMTYJCisjZGVmaW5lIEl0VnBkQXBNb2RlbFZwZAkJCQkgIDE3CisjZGVmaW5lIEl0VnBkQ2xvY2tDYXJkVnBkCQkJICAxOAorI2RlZmluZSBJdFZwZEJ1c0V4dENhcmRWcGQJCQkgIDE5CisjZGVmaW5lIEl0VnBkUHJvY0NhcGFjaXR5VnBkCQkJICAyMAorI2RlZmluZSBJdFZwZEludGVyYWN0aXZlQ2FwYWNpdHlWcGQJCSAgMjEKKyNkZWZpbmUgSXRWcGRGaXJzdFNsb3RMYWJlbAkJCSAgMjIKKyNkZWZpbmUgSXRWcGRGaXJzdExwUXVldWUJCQkgIDIzCisjZGVmaW5lIEl0VnBkRmlyc3RMM0NhY2hlVnBkCQkJICAyNAkKKyNkZWZpbmUgSXRWcGRGaXJzdFByb2NGcnVWcGQJCQkgIDI1CisKKyNkZWZpbmUgSXRWcGRNYXhFbnRyaWVzCQkJCSAgMjYKKworCisjZGVmaW5lIEl0RG1hTWF4RW50cmllcwkJCQkgIDEwCisKKyNkZWZpbmUgSXRWcGRBcmVhc01heFNsb3RMYWJlbHMJCSAxOTIgCisKKworc3RydWN0IFNsaWNWcGRBZHJzIHsKKwl1MzIJcGFkMTsKKwl2b2lkICogIHZwZEFkZHI7Cit9OworCisKK3N0cnVjdAlJdFZwZEFyZWFzCit7CisJdTMyCXhTbGljRGVzYzsJCS8vIERlc2NyaXB0b3IJCQkJMDAwLTAwMworCXUxNgl4U2xpY1NpemU7CQkvLyBTaXplIG9mIHRoaXMgY29udHJvbCBibG9jawkJMDA0LTAwNQorCXUxNgl4UGxpY0FkanVzdFZwZExlbnM6MTsJLy8gRmxhZyB0byBpbmRpY2F0ZSBuZXcgaW50ZXJmYWNlIAkwMDYtMDA3CisJdTE2CXhSc3ZkMToxNTsJCS8vIFJlc2VydmVkIGJpdHMJCQkuLi4KKwl1MTYJeFNsaWNWcGRFbnRyaWVzOwkvLyBOdW1iZXIgb2YgVlBEIGVudHJpZXMJCTAwOC0wMDkKKwl1MTYJeFNsaWNEbWFFbnRyaWVzOwkvLyBOdW1iZXIgb2YgRE1BIGVudHJpZXMJCTAwQS0wMEIKKwl1MTYJeFNsaWNNYXhMb2dpY2FsUHJvY3M7CS8vIE1heGltdW0gbG9naWNhbCBwcm9jZXNzb3JzCQkwMEMtMDBECisJdTE2CXhTbGljTWF4UGh5c2ljYWxQcm9jczsJLy8gTWF4aW11bSBwaHlzaWNhbCBwcm9jZXNzb3JzCQkwMEUtMDBGCisJdTE2CXhTbGljRG1hVG9rc09mZnNldDsJLy8gT2Zmc2V0IGludG8gdGhpcyBvZiBhcnJheQkJMDEwLTAxMQorCXUxNgl4U2xpY1ZwZEFkcnNPZmZzZXQ7CS8vIE9mZnNldCBpbnRvIHRoaXMgb2YgYXJyYXkJCTAxMi0wMTMKKwl1MTYJeFNsaWNEbWFMZW5zT2Zmc2V0OwkvLyBPZmZzZXQgaW50byB0aGlzIG9mIGFycmF5CQkwMTQtMDE1CisJdTE2CXhTbGljVnBkTGVuc09mZnNldDsJLy8gT2Zmc2V0IGludG8gdGhpcyBvZiBhcnJheQkJMDE2LTAxNworCXUxNgl4U2xpY01heFNsb3RMYWJlbHM7CS8vIE1heGltdW0gbnVtYmVyIG9mIHNsb3QgbGFiZWxzCTAxOC0wMTkKKwl1MTYJeFNsaWNNYXhMcFF1ZXVlczsJLy8gTWF4aW11bSBudW1iZXIgb2YgTFAgUXVldWVzCQkwMUEtMDFCCisJdTgJeFJzdmQyWzRdOwkJLy8gUmVzZXJ2ZWQJCQkJMDFDLTAxRgorCXU2NAl4UnN2ZDNbMTJdOwkJLy8gUmVzZXJ2ZWQJCQkJMDIwLTA3RgorCXUzMgl4UGxpY0RtYUxlbnNbSXREbWFNYXhFbnRyaWVzXTsvLyBBcnJheSBvZiBETUEgbGVuZ3RocwkJMDgwLTBBNworCXUzMgl4UGxpY0RtYVRva3NbSXREbWFNYXhFbnRyaWVzXTsvLyBBcnJheSBvZiBETUEgdG9rZW5zCQkwQTgtMENGCisJdTMyCXhTbGljVnBkTGVuc1tJdFZwZE1heEVudHJpZXNdOy8vIEFycmF5IG9mIFZQRCBsZW5ndGhzCQkwRDAtMTJGCisJdm9pZCAqIHhTbGljVnBkQWRyc1tJdFZwZE1heEVudHJpZXNdOy8vIEFycmF5IG9mIFZQRCBidWZmZXJzCTEzMC0xRUYKK307CisKKyNlbmRpZiAvKiBfSVRWUERBUkVBU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL0xwYXJEYXRhLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL0xwYXJEYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU0ZjNiNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvTHBhckRhdGEuaApAQCAtMCwwICsxLDQ5IEBACisvKgorICogTHBhckRhdGEuaAorICogQ29weXJpZ2h0IChDKSAyMDAxICBNaWtlIENvcnJpZ2FuIElCTSBDb3Jwb3JhdGlvbgorICogCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICogCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICovCisKKyNpZm5kZWYgX0xQQVJEQVRBX0gKKyNkZWZpbmUgX0xQQVJEQVRBX0gKKworI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL2Fic19hZGRyLmg+CisKKyNpbmNsdWRlIDxhc20vaVNlcmllcy9JdExwTmFjYS5oPgorI2luY2x1ZGUgPGFzbS9pU2VyaWVzL0l0THBSZWdTYXZlLmg+CisjaW5jbHVkZSA8YXNtL2lTZXJpZXMvSHZSZWxlYXNlRGF0YS5oPgorI2luY2x1ZGUgPGFzbS9pU2VyaWVzL0xwYXJNYXAuaD4KKyNpbmNsdWRlIDxhc20vaVNlcmllcy9JdFZwZEFyZWFzLmg+CisjaW5jbHVkZSA8YXNtL2lTZXJpZXMvSXRJcGxQYXJtc1JlYWwuaD4KKyNpbmNsdWRlIDxhc20vaVNlcmllcy9JdEV4dFZwZFBhbmVsLmg+CisjaW5jbHVkZSA8YXNtL2lTZXJpZXMvSXRMcFF1ZXVlLmg+CisjaW5jbHVkZSA8YXNtL2lTZXJpZXMvSW9IcmlQcm9jZXNzb3JWcGQuaD4KKworZXh0ZXJuIHN0cnVjdCBMcGFyTWFwCXhMcGFyTWFwOworZXh0ZXJuIHN0cnVjdCBIdlJlbGVhc2VEYXRhIGh2UmVsZWFzZURhdGE7CitleHRlcm4gc3RydWN0IEl0THBOYWNhCWl0THBOYWNhOworZXh0ZXJuIHN0cnVjdCBJdElwbFBhcm1zUmVhbCB4SXRJcGxQYXJtc1JlYWw7CitleHRlcm4gc3RydWN0IEl0RXh0VnBkUGFuZWwgeEl0RXh0VnBkUGFuZWw7CitleHRlcm4gc3RydWN0IElvSHJpUHJvY2Vzc29yVnBkIHhJb0hyaVByb2Nlc3NvclZwZFtdOworZXh0ZXJuIHN0cnVjdCBJdExwUXVldWUgeEl0THBRdWV1ZTsKK2V4dGVybiBzdHJ1Y3QgSXRWcGRBcmVhcyBpdFZwZEFyZWFzOworZXh0ZXJuIHU2NCAgICB4TXNWcGRbXTsKK2V4dGVybiBzdHJ1Y3QgbXNDaHVua3MgbXNDaHVua3M7CisKKworI2VuZGlmIC8qIF9MUEFSREFUQV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL0xwYXJNYXAuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvTHBhck1hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3NTIwNWIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL0xwYXJNYXAuaApAQCAtMCwwICsxLDY3IEBACisvKgorICogTHBhck1hcC5oCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgIE1pa2UgQ29ycmlnYW4gSUJNIENvcnBvcmF0aW9uCisgKiAKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiAKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKiAKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKi8KKyNpZm5kZWYgX0xQQVJNQVBfSAorI2RlZmluZSBfTFBBUk1BUF9ICisKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKworLyogVGhlIGlTZXJpZXMgaHlwZXJ2aXNvciB3aWxsIHNldCB1cCBtYXBwaW5nIGZvciBvbmUgb3IgbW9yZSAKKyAqIEVTSUQvVlNJRCBwYWlycyAoaW4gU0xCL3NlZ21lbnQgcmVnaXN0ZXJzKSBhbmQgd2lsbCBzZXQgdXAKKyAqIG1hcHBpbmdzIG9mIG9uZSBvciBtb3JlIHJhbmdlcyBvZiBwYWdlcyB0byBWQXMuCisgKiBXZSB3aWxsIGhhdmUgdGhlIGh5cGVydmlzb3Igc2V0IHVwIHRoZSBFU0lELT5WU0lEIG1hcHBpbmcKKyAqIGZvciB0aGUgZm91ciBrZXJuZWwgc2VnbWVudHMgKEMtRikuICBXaXRoIHNoYXJlZCBwcm9jZXNzb3JzLAorICogdGhlIGh5cGVydmlzb3Igd2lsbCBjbGVhciBhbGwgc2VnbWVudCByZWdpc3RlcnMgYW5kIHJlbG9hZAorICogdGhlc2UgZm91ciB3aGVuZXZlciB0aGUgcHJvY2Vzc29yIGlzIHN3aXRjaGVkIGZyb20gb25lIAorICogcGFydGl0aW9uIHRvIGFub3RoZXIuCisgKi8KKworLyogVGhlIFZzaWQgYW5kIEVzaWQgaWRlbnRpZmllZCBiZWxvdyB3aWxsIGJlIHVzZWQgYnkgdGhlIGh5cGVydmlzb3IKKyAqIHRvIHNldCB1cCBhIG1lbW9yeSBtYXBwaW5nIGZvciBwYXJ0IG9mIHRoZSBsb2FkIGFyZWEgYmVmb3JlIGdpdmluZworICogY29udHJvbCB0byB0aGUgTGludXgga2VybmVsLiAgVGhlIGxvYWQgYXJlYSBpcyA2NCBNQiwgYnV0IHRoaXMgbXVzdAorICogbm90IGF0dGVtcHQgdG8gbWFwIHRoZSB3aG9sZSBsb2FkIGFyZWEuICBUaGUgSGFzaGVkIFBhZ2UgVGFibGUgbWF5CisgKiBuZWVkIHRvIGJlIGxvY2F0ZWQgd2l0aGluIHRoZSBsb2FkIGFyZWEgKGlmIHRoZSB0b3RhbCBwYXJ0aXRpb24gc2l6ZQorICogaXMgNjQgTUIpLCBidXQgY2Fubm90IGJlIG1hcHBlZC4gIFR5cGljYWxseSwgdGhpcyBzaG91bGQgc3BlY2lmeQorICogdG8gbWFwIGhhbGYgKDMyIE1CKSBvZiB0aGUgbG9hZCBhcmVhLgorICogCisgKiBUaGUgaHlwZXJ2aXNvciB3aWxsIHNldCB1cCBwYWdlIHRhYmxlIGVudHJpZXMgZm9yIHRoZSBudW1iZXIgb2YgCisgKiBwYWdlcyBzcGVjaWZpZWQuCisgKgorICogSW4gMzItYml0IG1vZGUsIHRoZSBoeXBlcnZpc29yIHdpbGwgbG9hZCBhbGwgZm91ciBvZiB0aGUKKyAqIHNlZ21lbnQgcmVnaXN0ZXJzIChpZGVudGlmaWVkIGJ5IHRoZSBsb3ctb3JkZXIgZm91ciBiaXRzIG9mIHRoZSAKKyAqIEVzaWQgZmllbGQuICBJbiA2NC1iaXQgbW9kZSwgdGhlIGh5cGVydmlzb3Igd2lsbCBsb2FkIG9uZSBTTEIKKyAqIGVudHJ5IHRvIG1hcCB0aGUgRXNpZCB0byB0aGUgVnNpZC4KKyovCisKKy8vIEh5cGVydmlzb3IgaW5pdGlhbGx5IG1hcHMgMzJNQiBvZiB0aGUgbG9hZCBhcmVhIAorI2RlZmluZSBIdlBhZ2VzVG9NYXAgODE5MgorCitzdHJ1Y3QgTHBhck1hcAoreworCXU2NAkgIHhOdW1iZXJFc2lkczsJCS8vIE51bWJlciBvZiBFU0lEL1ZTSUQgcGFpcnMgKDEpCisJdTY0CSAgeE51bWJlclJhbmdlczsJLy8gTnVtYmVyIG9mIFZBIHJhbmdlcyB0byBtYXAgKDEpCisJdTY0CSAgeFNlZ21lbnRUYWJsZU9mZnM7CS8vIFBhZ2UgbnVtYmVyIHdpdGhpbiBsb2FkIGFyZWEgb2Ygc2VnIHRhYmxlICgwKQorCXU2NAkgIHhSc3ZkWzVdOwkJLy8gUmVzZXJ2ZWQgKDApCisJdTY0CSAgeEtlcm5lbEVzaWQ7ICAJLy8gRXNpZCB1c2VkIHRvIG1hcCBrZXJuZWwgbG9hZCAoMHgwQzAwMDAwMDAwKQkKKwl1NjQJICB4S2VybmVsVnNpZDsJCS8vIFZzaWQgdXNlZCB0byBtYXAga2VybmVsIGxvYWQgKDB4MEMwMDAwMDAwMCkKKwl1NjQJICB4UGFnZXM7CQkvLyBOdW1iZXIgb2YgcGFnZXMgdG8gYmUgbWFwcGVkCSg4MTkyKQorCXU2NAkgIHhPZmZzZXQ7CQkvLyBPZmZzZXQgZnJvbSBzdGFydCBvZiBsb2FkIGFyZWEgKDApCisJdTY0CSAgeFZQTjsJCQkvLyBWaXJ0dWFsIFBhZ2UgTnVtYmVyICgweDAwMEMwMDAwMDAwMDAwMDApCit9OworCisjZW5kaWYgLyogX0xQQVJNQVBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvaVNlcmllcy9YbVBjaUxwRXZlbnQuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvWG1QY2lMcEV2ZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNkMjdmMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvWG1QY2lMcEV2ZW50LmgKQEAgLTAsMCArMSwxOCBAQAorCisjaWZuZGVmCV9fWE1QQ0lMUEVWRU5UX0hfXworI2RlZmluZQlfX1hNUENJTFBFVkVOVF9IX18KKworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK2ludCBYbVBjaUxwRXZlbnRfaW5pdCh2b2lkKTsKK3ZvaWQgcHBjX2lycV9kaXNwYXRjaF9oYW5kbGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgaXJxKTsKKworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX19YTVBDSUxQRVZFTlRfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL2lTZXJpZXNfaW8uaCBiL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvaVNlcmllc19pby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1MmI3NTkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL2lTZXJpZXNfaW8uaApAQCAtMCwwICsxLDQ2IEBACisjaWZuZGVmIF9JU0VSSUVTX0lPX0gKKyNkZWZpbmUgX0lTRVJJRVNfSU9fSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpZmRlZiBDT05GSUdfUFBDX0lTRVJJRVMKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEZpbGUgaVNlcmllc19pby5oIGNyZWF0ZWQgYnkgQWxsYW4gVHJhdXRtYW4gb24gVGh1IERlYyAyOCAyMDAwLiAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogUmVtYXBzIHRoZSBpby5oIGZvciB0aGUgaVNlcmllcyBJbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIENvcHlyaWdodCAoQykgMjB5eSAgQWxsYW4gSCBUcmF1dG1hbiwgSUJNIENvcnBvcmF0aW9uICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgKi8KKy8qIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICovCisvKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAqLworLyogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAqLyAKKy8qIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICovCisvKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAqLworLyogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAqLyAKKy8qIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZTogICAgICAgICAgICAgICAgICAgICAgICovCisvKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAKKy8qIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovIAorLyogQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBDaGFuZ2UgQWN0aXZpdHk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICBDcmVhdGVkIERlY2VtYmVyIDI4LCAyMDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIEVuZCBDaGFuZ2UgQWN0aXZpdHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIHU4ICAgaVNlcmllc19SZWFkX0J5dGUoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICogSW9BZGRyZXNzKTsKK2V4dGVybiB1MTYgIGlTZXJpZXNfUmVhZF9Xb3JkKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqIElvQWRkcmVzcyk7CitleHRlcm4gdTMyICBpU2VyaWVzX1JlYWRfTG9uZyhjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKiBJb0FkZHJlc3MpOworZXh0ZXJuIHZvaWQgaVNlcmllc19Xcml0ZV9CeXRlKHU4ICBJb0RhdGEsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqIElvQWRkcmVzcyk7CitleHRlcm4gdm9pZCBpU2VyaWVzX1dyaXRlX1dvcmQodTE2IElvRGF0YSwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICogSW9BZGRyZXNzKTsKK2V4dGVybiB2b2lkIGlTZXJpZXNfV3JpdGVfTG9uZyh1MzIgSW9EYXRhLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKiBJb0FkZHJlc3MpOworCitleHRlcm4gdm9pZCBpU2VyaWVzX21lbXNldF9pbyh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmRlc3QsIGNoYXIgeCwgc2l6ZV90IG4pOworZXh0ZXJuIHZvaWQgaVNlcmllc19tZW1jcHlfdG9pbyh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmRlc3QsIHZvaWQgKnNvdXJjZSwgc2l6ZV90IG4pOworZXh0ZXJuIHZvaWQgaVNlcmllc19tZW1jcHlfZnJvbWlvKHZvaWQgKmRlc3QsIGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqc291cmNlLCBzaXplX3Qgbik7CisKKyNlbmRpZiAvKiBDT05GSUdfUFBDX0lTRVJJRVMgKi8KKyNlbmRpZiAvKiBfSVNFUklFU19JT19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL2lTZXJpZXNfaXJxLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL2lTZXJpZXNfaXJxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY4ZGRlZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvaVNlcmllc19pcnEuaApAQCAtMCwwICsxLDE5IEBACisjaWZuZGVmCV9fSVNFUklFU19JUlFfSF9fCisjZGVmaW5lCV9fSVNFUklFU19JUlFfSF9fCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKwordm9pZCBpU2VyaWVzX2luaXRfSVJRKHZvaWQpOworaW50ICBpU2VyaWVzX2FsbG9jYXRlX0lSUShIdkJ1c051bWJlciwgSHZTdWJCdXNOdW1iZXIsIEh2QWdlbnRJZCk7CitpbnQgIGlTZXJpZXNfYXNzaWduX0lSUShpbnQsIEh2QnVzTnVtYmVyLCBIdlN1YkJ1c051bWJlciwgSHZBZ2VudElkKTsKK3ZvaWQgaVNlcmllc19hY3RpdmF0ZV9JUlFzKHZvaWQpOworCitpbnQgWG1QY2lMcEV2ZW50X2luaXQodm9pZCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0lTRVJJRVNfSVJRX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvaVNlcmllcy9pU2VyaWVzX3BjaS5oIGIvaW5jbHVkZS9hc20tcHBjNjQvaVNlcmllcy9pU2VyaWVzX3BjaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3NjljZmYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL2lTZXJpZXNfcGNpLmgKQEAgLTAsMCArMSwxMTIgQEAKKyNpZm5kZWYgX0lTRVJJRVNfNjRfUENJX0gKKyNkZWZpbmUgX0lTRVJJRVNfNjRfUENJX0gKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEZpbGUgaVNlcmllc19wY2kuaCBjcmVhdGVkIGJ5IEFsbGFuIFRyYXV0bWFuIG9uIFR1ZSBGZWIgMjAsIDIwMDEuICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogRGVmaW5lIHNvbWUgdXNlZnVsIG1hY3JvcyBmb3IgdGhlIGlTZXJpZXMgcGNpIHJvdXRpbmVzLiAgICAgICAgICAgICAgKi8KKy8qIENvcHlyaWdodCAoQykgMjAwMSAgQWxsYW4gSCBUcmF1dG1hbiwgSUJNIENvcnBvcmF0aW9uICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgKi8KKy8qIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICovCisvKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAqLworLyogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAqLyAKKy8qIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICovCisvKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAqLworLyogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAqLyAKKy8qIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZTogICAgICAgICAgICAgICAgICAgICAgICovCisvKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAKKy8qIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovIAorLyogQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBDaGFuZ2UgQWN0aXZpdHk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICBDcmVhdGVkIEZlYiAyMCwgMjAwMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgQWRkZWQgZGV2aWNlIHJlc2V0LCBNYXJjaCAyMiwgMjAwMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgIFBvcnRlZCB0byBwcGM2NCwgTWF5IDI1LCAyMDAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogRW5kIENoYW5nZSBBY3Rpdml0eSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxhc20vaVNlcmllcy9IdkNhbGxQY2kuaD4KKyNpbmNsdWRlIDxhc20vYWJzX2FkZHIuaD4KKworc3RydWN0IHBjaV9kZXY7CQkJCS8qIEZvciBGb3J3YXJkIFJlZmVyZW5jZSAgICAgICAgKi8KK3N0cnVjdCBpU2VyaWVzX0RldmljZV9Ob2RlOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogR2V0cyBpU2VyaWVzIEJ1cywgU3ViQnVzLCBEZXZGbiB1c2luZyBpU2VyaWVzX0RldmljZV9Ob2RlIHN0cnVjdHVyZSAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBJU0VSSUVTX0JVUyhEZXZQdHIpCURldlB0ci0+RHNhQWRkci5Ec2EuYnVzTnVtYmVyCisjZGVmaW5lIElTRVJJRVNfU1VCQlVTKERldlB0cikJRGV2UHRyLT5Ec2FBZGRyLkRzYS5zdWJCdXNOdW1iZXIKKyNkZWZpbmUgSVNFUklFU19ERVZJQ0UoRGV2UHRyKQlEZXZQdHItPkRzYUFkZHIuRHNhLmRldmljZUlkCisjZGVmaW5lIElTRVJJRVNfRFNBKERldlB0cikJRGV2UHRyLT5Ec2FBZGRyLkRzYUFkZHIKKyNkZWZpbmUgSVNFUklFU19ERVZGVU4oRGV2UHRyKQlEZXZQdHItPkRldkZuCisjZGVmaW5lIElTRVJJRVNfREVWTk9ERShQY2lEZXYpICgoc3RydWN0IGlTZXJpZXNfRGV2aWNlX05vZGUqKVBjaURldi0+c3lzZGF0YSkKKworI2RlZmluZSBFQURzTWF4QWdlbnRzIDcKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIERlY29kZXMgTGludXggRGV2Rm4gdG8gaVNlcmllcyBEZXZGbiwgYnJpZGdlIGRldmljZSwgb3IgZnVuY3Rpb24uICAgICovCisvKiBGb3IgTGludXgsIHNlZSBQQ0lfU0xPVCBhbmQgUENJX0ZVTkMgaW4gaW5jbHVkZS9saW51eC9wY2kuaCAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBJU0VSSUVTX1BDSV9BR0VOVElEKGlkc2VsLGZ1bmMpCSgoaWRzZWwgJiAweDBGKSA8PCA0KSB8IChmdW5jICAmIDB4MDcpCisjZGVmaW5lIElTRVJJRVNfRU5DT0RFX0RFVklDRShhZ2VudGlkKQkoKDB4MTApIHwgKChhZ2VudGlkJjB4MjApPj4yKSB8IChhZ2VudGlkJjA3KSkKKworI2RlZmluZSBJU0VSSUVTX0dFVF9ERVZJQ0VfRlJPTV9TVUJCVVMoc3ViYnVzKSAgICgoc3ViYnVzID4+IDUpICYgMHg3KQorI2RlZmluZSBJU0VSSUVTX0dFVF9GVU5DVElPTl9GUk9NX1NVQkJVUyhzdWJidXMpICgoc3ViYnVzID4+IDIpICYgMHg3KQorCisvKgorICogTi5CLiB0aGUgSVNFUklFU19ERUNPREVfKiBtYWNyb3MgYXJlIG5vdCB1c2VkIGFueXdoZXJlLCBhbmQgSSB0aGluaworICogdGhlIDB4NzEgKGF0IGxlYXN0KSBtdXN0IGJlIHdyb25nIC0gMHg3OCBtYXliZT8gIC0tIHBhdWx1cy4KKyAqLworI2RlZmluZSBJU0VSSUVTX0RFQ09ERV9ERVZGTihsaW51eGRldmZuKSAgKCgobGludXhkZXZmbiAmIDB4NzEpIDw8IDEpIHwgKGxpbnV4ZGV2Zm4gJiAweDA3KSkKKyNkZWZpbmUgSVNFUklFU19ERUNPREVfREVWSUNFKGxpbnV4ZGV2Zm4pICgoKGxpbnV4ZGV2Zm4gJiAweDM4KSA+PiAzKSB8KCgobGludXhkZXZmbiAmIDB4NDApID4+IDIpICsgMHgxMCkpCisjZGVmaW5lIElTRVJJRVNfREVDT0RFX0ZVTkNUSU9OKGxpbnV4ZGV2Zm4pIChsaW51eGRldmZuICYgMHgwNykKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIENvbnZlcnRzIFZpcnR1YWwgQWRkcmVzcyB0byBSZWFsIEFkZHJlc3MgZm9yIEh5cGVydmlzb3IgY2FsbHMgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIElTRVJJRVNfSFZfQUREUih2aXJ0YWRkcikgICgweDgwMDAwMDAwMDAwMDAwMDAgfCB2aXJ0X3RvX2Ficyh2aXJ0YWRkcikpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBpU2VyaWVzIERldmljZSBJbmZvcm1hdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RydWN0IGlTZXJpZXNfRGV2aWNlX05vZGUgeworCXN0cnVjdCBsaXN0X2hlYWQgRGV2aWNlX0xpc3Q7CisJc3RydWN0IHBjaV9kZXYqIFBjaURldjsgICAgICAgICAvKiBQb2ludGVyIHRvIHBjaV9kZXYgc3RydWN0dXJlKi8KKyAgICAgICAgdW5pb24gSHZEc2FNYXAJRHNhQWRkcjsJLyogRGlyZWN0IFNlbGVjdCBBZGRyZXNzICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYnVzTnVtYmVyLHN1YkJ1c051bWJlciwgICAgICovIAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGV2aWNlSWQsIGJhck51bWJlciAgICAgICAgICovCisJSHZBZ2VudElkICAgICAgIEFnZW50SWQ7CS8qIEh5cGVydmlzb3IgRGV2Rm4gICAgICAgICAgICAqLworCWludCAgICAgICAgICAgICBEZXZGbjsgICAgICAgICAgLyogTGludXggZGV2Zm4gICAgICAgICAgICAgICAgICovCisJaW50ICAgICAgICAgICAgIEJhck9mZnNldDsKKwlpbnQgICAgICAgICAgICAgSXJxOyAgICAgICAgICAgIC8qIEFzc2lnbmVkIElSUSAgICAgICAgICAgICAgICAqLworCWludCAgICAgICAgICAgICBSZXR1cm5Db2RlOwkvKiBSZXR1cm4gQ29kZSBIb2xkZXIgICAgICAgICAgKi8KKwlpbnQgICAgICAgICAgICAgSW9SZXRyeTsgICAgICAgIC8qIEN1cnJlbnQgUmV0cnkgQ291bnQgICAgICAgICAqLworCWludCAgICAgICAgICAgICBGbGFnczsgICAgICAgICAgLyogUG9zc2libGUgZmxhZ3MoZGlzYWJsZS9iaXN0KSovCisJdTE2ICAgICAgICAgICAgIFZlbmRvcjsgICAgICAgICAvKiBWZW5kb3IgSUQgICAgICAgICAgICAgICAgICAgKi8KKwl1OCAgICAgICAgICAgICAgTG9naWNhbFNsb3Q7ICAgIC8qIEh2IFNsb3QgSW5kZXggZm9yIFRjZXMgICAgICAqLworCXN0cnVjdCBpb21tdV90YWJsZSogaW9tbXVfdGFibGU7LyogRGV2aWNlIFRDRSBUYWJsZSAgICAgICAgICAgICovIAorCXU4ICAgICAgICAgICAgICBQaGJJZDsgICAgICAgICAgLyogUGhiIENhcmQgaXMgb24uICAgICAgICAgICAgICovCisJdTE2ICAgICAgICAgICAgIEJvYXJkOyAgICAgICAgICAvKiBCb2FyZCBOdW1iZXIgICAgICAgICAgICAgICAgKi8KKwl1OCAgICAgICAgICAgICAgRnJhbWVJZDsJLyogaVNlcmllcyBzcGNuIEZyYW1lIElkICAgICAgICovCisJY2hhciAgICAgICAgICAgIENhcmRMb2NhdGlvbls0XTsvKiBDaGFyIGZvcm1hdCBvZiBwbGFuYXIgdnBkICAgKi8KKwljaGFyICAgICAgICAgICAgTG9jYXRpb25bMjBdOyAgIC8qIEZyYW1lICAxLCBDYXJkIEMxMCAgICAgICAgICAqLworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitleHRlcm4gaW50ICAgICAgICAgICBpU2VyaWVzX0RldmljZV9JbmZvcm1hdGlvbihzdHJ1Y3QgcGNpX2RldiosY2hhciosIGludCk7CitleHRlcm4gdm9pZCAgICAgICAgICBpU2VyaWVzX0dldF9Mb2NhdGlvbl9Db2RlKHN0cnVjdCBpU2VyaWVzX0RldmljZV9Ob2RlKik7CitleHRlcm4gaW50ICAgICAgICAgICBpU2VyaWVzX0RldmljZV9Ub2dnbGVSZXNldChzdHJ1Y3QgcGNpX2RldiogUGNpRGV2LCBpbnQgQXNzZXJ0VGltZSwgaW50IERlbGF5VGltZSk7CisKKyNlbmRpZiAvKiBfSVNFUklFU182NF9QQ0lfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvaVNlcmllcy9pU2VyaWVzX3Byb2MuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvaVNlcmllc19wcm9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRiNmRjMTQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL2lTZXJpZXNfcHJvYy5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qCisgKiBpU2VyaWVzX3Byb2MuaAorICogQ29weXJpZ2h0IChDKSAyMDAxICBLeWxlIEEuIEx1Y2tlIElCTSBDb3Jwb3JhdGlvbgorICogCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICogCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICovCisjaWZuZGVmIF9JU0VSSUVTX1BST0NfSAorI2RlZmluZSBfSVNFUklFU19QUk9DX0gKKworZXh0ZXJuIHZvaWQgaVNlcmllc19wcm9jX2Vhcmx5X2luaXQodm9pZCk7CisKKyNlbmRpZiAvKiBfaVNlcmllc19QUk9DX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvbWYuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvbWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTU5YThlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvaVNlcmllcy9tZi5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBtZi5oCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgIFRyb3kgRC4gQXJtc3Ryb25nIElCTSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDA0ICBTdGVwaGVuIFJvdGh3ZWxsIElCTSBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgbW9kdWxlcyBleGlzdHMgYXMgYW4gaW50ZXJmYWNlIGJldHdlZW4gYSBMaW51eCBzZWNvbmRhcnkgcGFydGl0aW9uCisgKiBydW5uaW5nIG9uIGFuIGlTZXJpZXMgYW5kIHRoZSBwcmltYXJ5IHBhcnRpdGlvbidzIFZpcnR1YWwgU2VydmljZQorICogUHJvY2Vzc29yIChWU1ApIG9iamVjdC4gIFRoZSBWU1AgaGFzIGZpbmFsIGF1dGhvcml0eSBvdmVyIHBvd2VyaW5nIG9uL29mZgorICogYWxsIHBhcnRpdGlvbnMgaW4gdGhlIGlTZXJpZXMuICBJdCBhbHNvIHByb3ZpZGVzIG1pc2NlbGxhbmVvdXMgbG93LWxldmVsCisgKiBtYWNoaW5lIGZhY2lsaXR5IHR5cGUgb3BlcmF0aW9ucy4KKyAqCisgKiAKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiAKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKiAKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKi8KKyNpZm5kZWYgX0FTTV9QUEM2NF9JU0VSSUVTX01GX0gKKyNkZWZpbmUgX0FTTV9QUEM2NF9JU0VSSUVTX01GX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNpbmNsdWRlIDxhc20vaVNlcmllcy9IdlR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2lTZXJpZXMvSHZDYWxsRXZlbnQuaD4KKworc3RydWN0IHJ0Y190aW1lOworCit0eXBlZGVmIHZvaWQgKCpNRkNvbXBsZXRlSGFuZGxlcikodm9pZCAqY2xpZW50VG9rZW4sIGludCByZXR1cm5Db2RlKTsKKworZXh0ZXJuIHZvaWQgbWZfYWxsb2NhdGVfbHBfZXZlbnRzKEh2THBJbmRleCB0YXJnZXRMcCwgSHZMcEV2ZW50X1R5cGUgdHlwZSwKKwkJdW5zaWduZWQgc2l6ZSwgdW5zaWduZWQgYW1vdW50LCBNRkNvbXBsZXRlSGFuZGxlciBoZGxyLAorCQl2b2lkICp1c2VyVG9rZW4pOworZXh0ZXJuIHZvaWQgbWZfZGVhbGxvY2F0ZV9scF9ldmVudHMoSHZMcEluZGV4IHRhcmdldExwLCBIdkxwRXZlbnRfVHlwZSB0eXBlLAorCQl1bnNpZ25lZCBjb3VudCwgTUZDb21wbGV0ZUhhbmRsZXIgaGRsciwgdm9pZCAqdXNlclRva2VuKTsKKworZXh0ZXJuIHZvaWQgbWZfcG93ZXJfb2ZmKHZvaWQpOworZXh0ZXJuIHZvaWQgbWZfcmVib290KHZvaWQpOworCitleHRlcm4gdm9pZCBtZl9kaXNwbGF5X3NyYyh1MzIgd29yZCk7CitleHRlcm4gdm9pZCBtZl9kaXNwbGF5X3Byb2dyZXNzKHUxNiB2YWx1ZSk7CitleHRlcm4gdm9pZCBtZl9jbGVhcl9zcmModm9pZCk7CisKK2V4dGVybiB2b2lkIG1mX2luaXQodm9pZCk7CisKK2V4dGVybiBpbnQgbWZfZ2V0X3J0YyhzdHJ1Y3QgcnRjX3RpbWUgKnRtKTsKK2V4dGVybiBpbnQgbWZfc2V0X3J0YyhzdHJ1Y3QgcnRjX3RpbWUgKnRtKTsKKworI2VuZGlmIC8qIF9BU01fUFBDNjRfSVNFUklFU19NRl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL3Zpby5oIGIvaW5jbHVkZS9hc20tcHBjNjQvaVNlcmllcy92aW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTU3NjZhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvaVNlcmllcy92aW8uaApAQCAtMCwwICsxLDEyOSBAQAorLyogLSotIGxpbnV4LWMgLSotCisgKiAgZHJpdmVycy9jaGFyL3Zpby5oCisgKgorICogIGlTZXJpZXMgVmlydHVhbCBJL08gTWVzc2FnZSBQYXRoIGhlYWRlcgorICoKKyAqICBBdXRob3JzOiBEYXZlIEJvdXRjaGVyIDxib3V0Y2hlckB1cy5pYm0uY29tPgorICogICAgICAgICAgIFJ5YW4gQXJub2xkIDxyeWFuYXJuQHVzLmlibS5jb20+CisgKiAgICAgICAgICAgQ29saW4gRGV2aWxiaXNzIDxkZXZpbGJpc0B1cy5pYm0uY29tPgorICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMCBJQk0gQ29ycG9yYXRpb24KKyAqIAorICogVGhpcyBoZWFkZXIgZmlsZSBpcyB1c2VkIGJ5IHRoZSBpU2VyaWVzIHZpcnR1YWwgSS9PIGRldmljZQorICogZHJpdmVycy4gIEl0IGRlZmluZXMgdGhlIGludGVyZmFjZXMgdG8gdGhlIGNvbW1vbiBmdW5jdGlvbnMKKyAqIChpbXBsZW1lbnRlZCBpbiBkcml2ZXJzL2NoYXIvdmlvcGF0aC5oKSBhcyB3ZWxsIGFzIGRlZmluaW5nCisgKiBjb21tb24gZnVuY3Rpb25zIGFuZCBzdHJ1Y3R1cmVzLiAgQ3VycmVudGx5IChhdCB0aGUgdGltZSBJIAorICogd3JvdGUgdGhpcyBjb21tZW50KSB0aGUgaVNlcmllcyB2aXJ0dWFsIEkvTyBkZXZpY2UgZHJpdmVycworICogdGhhdCB1c2UgdGhpcyBhcmUgCisgKiAgIGRyaXZlcnMvYmxvY2svdmlvZGFzZC5jIAorICogICBkcml2ZXJzL2NoYXIvdmlvY29ucy5jCisgKiAgIGRyaXZlcnMvY2hhci92aW90YXBlLmMKKyAqICAgZHJpdmVycy9jZHJvbS92aW9jZC5jCisgKgorICogVGhlIGlTZXJpZXMgdmlydHVhbCBldGhlcm5ldCBzdXBwb3J0ICh2ZXRoLmMpIHVzZXMgYSB3aG9sZQorICogZGlmZmVyZW50IHNldCBvZiBmdW5jdGlvbnMuCisgKiAKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyAgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisgKiBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueXUgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIAorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gIAorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIAorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKgorICovCisjaWZuZGVmIF9JU0VSSUVTX1ZJT19ICisjZGVmaW5lIF9JU0VSSUVTX1ZJT19ICisKKyNpbmNsdWRlIDxhc20vaVNlcmllcy9IdlR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2lTZXJpZXMvSHZMcEV2ZW50Lmg+CisKKy8qIGlTZXJpZXMgdmlydHVhbCBJL08gZXZlbnRzIHVzZSB0aGUgc3VidHlwZSBmaWVsZCBpbgorICogSHZMcEV2ZW50IHRvIGZpZ3VyZSBvdXQgd2hhdCBraW5kIG9mIHZpbyBldmVudCBpcyBjb21pbmcKKyAqIGluLiAgV2UgdXNlIGEgdGFibGUgdG8gcm91dGUgdGhlc2UsIGFuZCB0aGlzIGRlZmluZXMKKyAqIHRoZSBtYXhpbXVtIG51bWJlciBvZiBkaXN0aW5jdCBzdWJ0eXBlcworICovCisjZGVmaW5lIFZJT19NQVhfU1VCVFlQRVMgOAorCisvKiBFYWNoIHN1YnR5cGUgY2FuIHJlZ2lzdGVyIGEgaGFuZGxlciB0byBwcm9jZXNzIHRoZWlyIGV2ZW50cy4KKyAqIFRoZSBoYW5kbGVyIG11c3QgaGF2ZSB0aGlzIGludGVyZmFjZS4KKyAqLwordHlwZWRlZiB2b2lkICh2aW9fZXZlbnRfaGFuZGxlcl90KSAoc3RydWN0IEh2THBFdmVudCAqIGV2ZW50KTsKKworaW50IHZpb3BhdGhfb3BlbihIdkxwSW5kZXggcmVtb3RlTHAsIGludCBzdWJ0eXBlLCBpbnQgbnVtUmVxKTsKK2ludCB2aW9wYXRoX2Nsb3NlKEh2THBJbmRleCByZW1vdGVMcCwgaW50IHN1YnR5cGUsIGludCBudW1SZXEpOworaW50IHZpb19zZXRIYW5kbGVyKGludCBzdWJ0eXBlLCB2aW9fZXZlbnRfaGFuZGxlcl90ICogYmVoKTsKK2ludCB2aW9fY2xlYXJIYW5kbGVyKGludCBzdWJ0eXBlKTsKK2ludCB2aW9wYXRoX2lzYWN0aXZlKEh2THBJbmRleCBscCk7CitIdkxwSW5zdGFuY2VJZCB2aW9wYXRoX3NvdXJjZWluc3QoSHZMcEluZGV4IGxwKTsKK0h2THBJbnN0YW5jZUlkIHZpb3BhdGhfdGFyZ2V0aW5zdChIdkxwSW5kZXggbHApOwordm9pZCB2aW9fc2V0X2hvc3RscCh2b2lkKTsKK3ZvaWQgKnZpb19nZXRfZXZlbnRfYnVmZmVyKGludCBzdWJ0eXBlKTsKK3ZvaWQgdmlvX2ZyZWVfZXZlbnRfYnVmZmVyKGludCBzdWJ0eXBlLCB2b2lkICpidWZmZXIpOworCitleHRlcm4gSHZMcEluZGV4IHZpb3BhdGhfaG9zdExwOworZXh0ZXJuIEh2THBJbmRleCB2aW9wYXRoX291ckxwOworCisjZGVmaW5lIFZJT0NIQVJfTUFYX0RBVEEgMjAwCisKKyNkZWZpbmUgVklPTUFKT1JfU1VCVFlQRV9NQVNLIDB4ZmYwMAorI2RlZmluZSBWSU9NSU5PUl9TVUJUWVBFX01BU0sgMHgwMGZmCisjZGVmaW5lIFZJT01BSk9SX1NVQlRZUEVfU0hJRlQgOAorCisjZGVmaW5lIFZJT1ZFUlNJT04gICAgICAgICAgICAweDAxMDEKKworLyoKKyAqIFRoaXMgaXMgdGhlIGdlbmVyYWwgc3RydWN0dXJlIGZvciBWSU8gZXJyb3JzOyBlYWNoIG1vZHVsZSBzaG91bGQgaGF2ZQorICogYSB0YWJsZSBvZiB0aGVtLCBhbmQgZWFjaCB0YWJsZSBzaG91bGQgYmUgdGVybWluYXRlZCBieSBhbiBlbnRyeSBvZgorICogeyAwLCAwLCBOVUxMIH0uICBUaGVuLCB0byBmaW5kIGEgc3BlY2lmaWMgZXJyb3IgbWVzc2FnZSwgYSBtb2R1bGUKKyAqIHNob3VsZCBwYXNzIGl0cyBsb2NhbCB0YWJsZSBhbmQgdGhlIHJldHVybiBjb2RlLgorICovCitzdHJ1Y3QgdmlvX2Vycm9yX2VudHJ5IHsKKwl1MTYgcmM7CisJaW50IGVycm5vOworCWNvbnN0IGNoYXIgKm1zZzsKK307Citjb25zdCBzdHJ1Y3QgdmlvX2Vycm9yX2VudHJ5ICp2aW9fbG9va3VwX3JjKGNvbnN0IHN0cnVjdCB2aW9fZXJyb3JfZW50cnkKKwkJCQkJICAgICpsb2NhbF90YWJsZSwgdTE2IHJjKTsKKworZW51bSB2aW9zdWJ0eXBlcyB7CisJdmlvbWFqb3JzdWJ0eXBlX21vbml0b3IgPSAweDAxMDAsCisJdmlvbWFqb3JzdWJ0eXBlX2Jsb2NraW8gPSAweDAyMDAsCisJdmlvbWFqb3JzdWJ0eXBlX2NoYXJpbyA9IDB4MDMwMCwKKwl2aW9tYWpvcnN1YnR5cGVfY29uZmlnID0gMHgwNDAwLAorCXZpb21ham9yc3VidHlwZV9jZGlvID0gMHgwNTAwLAorCXZpb21ham9yc3VidHlwZV90YXBlID0gMHgwNjAwLAorCXZpb21ham9yc3VidHlwZV9zY3NpID0gMHgwNzAwCit9OworCisKK2VudW0gdmlvY29uZmlnc3VidHlwZSB7CisJdmlvY29uZmlnZ2V0ID0gMHgwMDAxLAorfTsKKworZW51bSB2aW9yYyB7CisJdmlvcmNfZ29vZCA9IDB4MDAwMCwKKwl2aW9yY19ub0Nvbm5lY3Rpb24gPSAweDAwMDEsCisJdmlvcmNfbm9SZWNlaXZlciA9IDB4MDAwMiwKKwl2aW9yY19ub0J1ZmZlckF2YWlsYWJsZSA9IDB4MDAwMywKKwl2aW9yY19pbnZhbGlkTWVzc2FnZVR5cGUgPSAweDAwMDQsCisJdmlvcmNfaW52YWxpZFJhbmdlID0gMHgwMjAxLAorCXZpb3JjX2ludmFsaWRUb2tlbiA9IDB4MDIwMiwKKwl2aW9yY19ETUFFcnJvciA9IDB4MDIwMywKKwl2aW9yY191c2VFcnJvciA9IDB4MDIwNCwKKwl2aW9yY19yZWxlYXNlRXJyb3IgPSAweDAyMDUsCisJdmlvcmNfaW52YWxpZERpc2sgPSAweDAyMDYsCisJdmlvcmNfb3BlblJlamVjdGVkID0gMHgwMzAxCit9OworCitzdHJ1Y3QgZGV2aWNlOworCitleHRlcm4gc3RydWN0IGRldmljZSAqaVNlcmllc192aW9fZGV2OworCisjZW5kaWYgLyogX0lTRVJJRVNfVklPX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L2lkZS5oIGIvaW5jbHVkZS9hc20tcHBjNjQvaWRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFhZTFjNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L2lkZS5oCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tcHBjL2lkZS5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NC0xOTk2IExpbnVzIFRvcnZhbGRzICYgYXV0aG9ycworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworLyoKKyAqICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHBwYzY0IGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBJREUgY29kZS4KKyAqLworCisjaWZuZGVmIF9fQVNNUFBDNjRfSURFX0gKKyNkZWZpbmUgX19BU01QUEM2NF9JREVfSAorCisjaWZkZWYgX19LRVJORUxfXworCisjaWZuZGVmIE1BWF9IV0lGUworIyBkZWZpbmUgTUFYX0hXSUZTCTEwCisjZW5kaWYKKworI2RlZmluZSBJREVfQVJDSF9PQlNPTEVURV9JTklUCisjZGVmaW5lIGlkZV9kZWZhdWx0X2lvX2N0bChiYXNlKQkoKGJhc2UpICsgMHgyMDYpIC8qIG9ic29sZXRlICovCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfX0FTTVBQQzY0X0lERV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9pby5oIGIvaW5jbHVkZS9hc20tcHBjNjQvaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmExZGZhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvaW8uaApAQCAtMCwwICsxLDQ1OCBAQAorI2lmbmRlZiBfUFBDNjRfSU9fSAorI2RlZmluZSBfUFBDNjRfSU9fSAorCisvKiAKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisjaWZkZWYgQ09ORklHX1BQQ19JU0VSSUVTIAorI2luY2x1ZGUgPGFzbS9pU2VyaWVzL2lTZXJpZXNfaW8uaD4KKyNlbmRpZiAgCisjaW5jbHVkZSA8YXNtL21lbW9yeS5oPgorI2luY2x1ZGUgPGFzbS9kZWxheS5oPgorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvaW9tYXAuaD4KKworI2RlZmluZSBfX2lkZV9tbV9pbnN3KHAsIGEsIGMpIF9pbnN3X25zKCh2b2xhdGlsZSB1MTYgKikocCksIChhKSwgKGMpKQorI2RlZmluZSBfX2lkZV9tbV9pbnNsKHAsIGEsIGMpIF9pbnNsX25zKCh2b2xhdGlsZSB1MzIgKikocCksIChhKSwgKGMpKQorI2RlZmluZSBfX2lkZV9tbV9vdXRzdyhwLCBhLCBjKSBfb3V0c3dfbnMoKHZvbGF0aWxlIHUxNiAqKShwKSwgKGEpLCAoYykpCisjZGVmaW5lIF9faWRlX21tX291dHNsKHAsIGEsIGMpIF9vdXRzbF9ucygodm9sYXRpbGUgdTMyICopKHApLCAoYSksIChjKSkKKworCisjZGVmaW5lIFNJT19DT05GSUdfUkEJMHgzOTgKKyNkZWZpbmUgU0lPX0NPTkZJR19SRAkweDM5OQorCisjZGVmaW5lIFNMT1dfRE9XTl9JTworCitleHRlcm4gdW5zaWduZWQgbG9uZyBpc2FfaW9fYmFzZTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHBjaV9pb19iYXNlOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW9fcGFnZV9tYXNrOworCisjZGVmaW5lIE1BWF9JU0FfUE9SVCAweDEwMDAwCisKKyNkZWZpbmUgX0lPX0lTX1ZBTElEKHBvcnQpICgocG9ydCkgPj0gTUFYX0lTQV9QT1JUIHx8ICgxIDw8IChwb3J0Pj5QQUdFX1NISUZUKSkgXAorCQkJICAgICYgaW9fcGFnZV9tYXNrKQorCisjaWZkZWYgQ09ORklHX1BQQ19JU0VSSUVTCisvKiBfX3Jhd18qIGFjY2Vzc29ycyBhcmVuJ3Qgc3VwcG9ydGVkIG9uIGlTZXJpZXMgKi8KKyNkZWZpbmUgX19yYXdfcmVhZGIoYWRkcikJeyBCVUcoKTsgMDsgfQorI2RlZmluZSBfX3Jhd19yZWFkdyhhZGRyKSAgICAgICB7IEJVRygpOyAwOyB9CisjZGVmaW5lIF9fcmF3X3JlYWRsKGFkZHIpICAgICAgIHsgQlVHKCk7IDA7IH0KKyNkZWZpbmUgX19yYXdfcmVhZHEoYWRkcikgICAgICAgeyBCVUcoKTsgMDsgfQorI2RlZmluZSBfX3Jhd193cml0ZWIodiwgYWRkcikgICB7IEJVRygpOyAwOyB9CisjZGVmaW5lIF9fcmF3X3dyaXRldyh2LCBhZGRyKSAgIHsgQlVHKCk7IDA7IH0KKyNkZWZpbmUgX19yYXdfd3JpdGVsKHYsIGFkZHIpICAgeyBCVUcoKTsgMDsgfQorI2RlZmluZSBfX3Jhd193cml0ZXEodiwgYWRkcikgICB7IEJVRygpOyAwOyB9CisjZGVmaW5lIHJlYWRiKGFkZHIpCQlpU2VyaWVzX1JlYWRfQnl0ZShhZGRyKQorI2RlZmluZSByZWFkdyhhZGRyKQkJaVNlcmllc19SZWFkX1dvcmQoYWRkcikKKyNkZWZpbmUgcmVhZGwoYWRkcikJCWlTZXJpZXNfUmVhZF9Mb25nKGFkZHIpCisjZGVmaW5lIHdyaXRlYihkYXRhLCBhZGRyKQlpU2VyaWVzX1dyaXRlX0J5dGUoKGRhdGEpLChhZGRyKSkKKyNkZWZpbmUgd3JpdGV3KGRhdGEsIGFkZHIpCWlTZXJpZXNfV3JpdGVfV29yZCgoZGF0YSksKGFkZHIpKQorI2RlZmluZSB3cml0ZWwoZGF0YSwgYWRkcikJaVNlcmllc19Xcml0ZV9Mb25nKChkYXRhKSwoYWRkcikpCisjZGVmaW5lIG1lbXNldF9pbyhhLGIsYykJaVNlcmllc19tZW1zZXRfaW8oKGEpLChiKSwoYykpCisjZGVmaW5lIG1lbWNweV9mcm9taW8oYSxiLGMpCWlTZXJpZXNfbWVtY3B5X2Zyb21pbygoYSksIChiKSwgKGMpKQorI2RlZmluZSBtZW1jcHlfdG9pbyhhLGIsYykJaVNlcmllc19tZW1jcHlfdG9pbygoYSksIChiKSwgKGMpKQorCisjZGVmaW5lIGluYihhZGRyKQkJcmVhZGIoKCh2b2lkIF9faW9tZW0gKikobG9uZykoYWRkcikpKQorI2RlZmluZSBpbncoYWRkcikJCXJlYWR3KCgodm9pZCBfX2lvbWVtICopKGxvbmcpKGFkZHIpKSkKKyNkZWZpbmUgaW5sKGFkZHIpCQlyZWFkbCgoKHZvaWQgX19pb21lbSAqKShsb25nKShhZGRyKSkpCisjZGVmaW5lIG91dGIoZGF0YSxhZGRyKQkJd3JpdGViKGRhdGEsKCh2b2lkIF9faW9tZW0gKikobG9uZykoYWRkcikpKQorI2RlZmluZSBvdXR3KGRhdGEsYWRkcikJCXdyaXRldyhkYXRhLCgodm9pZCBfX2lvbWVtICopKGxvbmcpKGFkZHIpKSkKKyNkZWZpbmUgb3V0bChkYXRhLGFkZHIpCQl3cml0ZWwoZGF0YSwoKHZvaWQgX19pb21lbSAqKShsb25nKShhZGRyKSkpCisvKgorICogVGhlICpfbnMgdmVyc2lvbnMgYmVsb3cgZG9uJ3QgZG8gYnl0ZS1zd2FwcGluZy4KKyAqIE5laXRoZXIgZG8gdGhlIHN0YW5kYXJkIHZlcnNpb25zIG5vdywgdGhlc2UgYXJlIGp1c3QgaGVyZQorICogZm9yIG9sZGVyIGNvZGUuCisgKi8KKyNkZWZpbmUgaW5zd19ucyhwb3J0LCBidWYsIG5zKQlfaW5zd19ucygodTE2ICopKChwb3J0KStwY2lfaW9fYmFzZSksIChidWYpLCAobnMpKQorI2RlZmluZSBpbnNsX25zKHBvcnQsIGJ1ZiwgbmwpCV9pbnNsX25zKCh1MzIgKikoKHBvcnQpK3BjaV9pb19iYXNlKSwgKGJ1ZiksIChubCkpCisjZWxzZQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgX19yYXdfcmVhZGIoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCXJldHVybiAqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgX19mb3JjZSAqKWFkZHI7Cit9CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IF9fcmF3X3JlYWR3KGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlyZXR1cm4gKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBfX2ZvcmNlICopYWRkcjsKK30KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IF9fcmF3X3JlYWRsKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlyZXR1cm4gKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgX19mb3JjZSAqKWFkZHI7Cit9CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19yYXdfcmVhZHEoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCXJldHVybiAqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgX19mb3JjZSAqKWFkZHI7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfd3JpdGViKHVuc2lnbmVkIGNoYXIgdiwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCSoodm9sYXRpbGUgdW5zaWduZWQgY2hhciBfX2ZvcmNlICopYWRkciA9IHY7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfd3JpdGV3KHVuc2lnbmVkIHNob3J0IHYsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwkqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IF9fZm9yY2UgKilhZGRyID0gdjsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd193cml0ZWwodW5zaWduZWQgaW50IHYsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwkqKHZvbGF0aWxlIHVuc2lnbmVkIGludCBfX2ZvcmNlICopYWRkciA9IHY7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfd3JpdGVxKHVuc2lnbmVkIGxvbmcgdiwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCSoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyBfX2ZvcmNlICopYWRkciA9IHY7Cit9CisjZGVmaW5lIHJlYWRiKGFkZHIpCQllZWhfcmVhZGIoYWRkcikKKyNkZWZpbmUgcmVhZHcoYWRkcikJCWVlaF9yZWFkdyhhZGRyKQorI2RlZmluZSByZWFkbChhZGRyKQkJZWVoX3JlYWRsKGFkZHIpCisjZGVmaW5lIHJlYWRxKGFkZHIpCQllZWhfcmVhZHEoYWRkcikKKyNkZWZpbmUgd3JpdGViKGRhdGEsIGFkZHIpCWVlaF93cml0ZWIoKGRhdGEpLCAoYWRkcikpCisjZGVmaW5lIHdyaXRldyhkYXRhLCBhZGRyKQllZWhfd3JpdGV3KChkYXRhKSwgKGFkZHIpKQorI2RlZmluZSB3cml0ZWwoZGF0YSwgYWRkcikJZWVoX3dyaXRlbCgoZGF0YSksIChhZGRyKSkKKyNkZWZpbmUgd3JpdGVxKGRhdGEsIGFkZHIpCWVlaF93cml0ZXEoKGRhdGEpLCAoYWRkcikpCisjZGVmaW5lIG1lbXNldF9pbyhhLGIsYykJZWVoX21lbXNldF9pbygoYSksKGIpLChjKSkKKyNkZWZpbmUgbWVtY3B5X2Zyb21pbyhhLGIsYykJZWVoX21lbWNweV9mcm9taW8oKGEpLChiKSwoYykpCisjZGVmaW5lIG1lbWNweV90b2lvKGEsYixjKQllZWhfbWVtY3B5X3RvaW8oKGEpLChiKSwoYykpCisjZGVmaW5lIGluYihwb3J0KQkJZWVoX2luYigodW5zaWduZWQgbG9uZylwb3J0KQorI2RlZmluZSBvdXRiKHZhbCwgcG9ydCkJCWVlaF9vdXRiKHZhbCwgKHVuc2lnbmVkIGxvbmcpcG9ydCkKKyNkZWZpbmUgaW53KHBvcnQpCQllZWhfaW53KCh1bnNpZ25lZCBsb25nKXBvcnQpCisjZGVmaW5lIG91dHcodmFsLCBwb3J0KQkJZWVoX291dHcodmFsLCAodW5zaWduZWQgbG9uZylwb3J0KQorI2RlZmluZSBpbmwocG9ydCkJCWVlaF9pbmwoKHVuc2lnbmVkIGxvbmcpcG9ydCkKKyNkZWZpbmUgb3V0bCh2YWwsIHBvcnQpCQllZWhfb3V0bCh2YWwsICh1bnNpZ25lZCBsb25nKXBvcnQpCisKKy8qCisgKiBUaGUgaW5zdy9vdXRzdy9pbnNsL291dHNsIG1hY3JvcyBkb24ndCBkbyBieXRlLXN3YXBwaW5nLgorICogVGhleSBhcmUgb25seSB1c2VkIGluIHByYWN0aWNlIGZvciB0cmFuc2ZlcnJpbmcgYnVmZmVycyB3aGljaAorICogYXJlIGFycmF5cyBvZiBieXRlcywgYW5kIGJ5dGUtc3dhcHBpbmcgaXMgbm90IGFwcHJvcHJpYXRlIGluCisgKiB0aGF0IGNhc2UuICAtIHBhdWx1cyAqLworI2RlZmluZSBpbnNiKHBvcnQsIGJ1ZiwgbnMpCWVlaF9pbnNiKChwb3J0KSwgKGJ1ZiksIChucykpCisjZGVmaW5lIGluc3cocG9ydCwgYnVmLCBucykJZWVoX2luc3dfbnMoKHBvcnQpLCAoYnVmKSwgKG5zKSkKKyNkZWZpbmUgaW5zbChwb3J0LCBidWYsIG5sKQllZWhfaW5zbF9ucygocG9ydCksIChidWYpLCAobmwpKQorI2RlZmluZSBpbnN3X25zKHBvcnQsIGJ1ZiwgbnMpCWVlaF9pbnN3X25zKChwb3J0KSwgKGJ1ZiksIChucykpCisjZGVmaW5lIGluc2xfbnMocG9ydCwgYnVmLCBubCkJZWVoX2luc2xfbnMoKHBvcnQpLCAoYnVmKSwgKG5sKSkKKworI2RlZmluZSBvdXRzYihwb3J0LCBidWYsIG5zKSAgX291dHNiKCh1OCAqKSgocG9ydCkrcGNpX2lvX2Jhc2UpLCAoYnVmKSwgKG5zKSkKKyNkZWZpbmUgb3V0c3cocG9ydCwgYnVmLCBucykgIF9vdXRzd19ucygodTE2ICopKChwb3J0KStwY2lfaW9fYmFzZSksIChidWYpLCAobnMpKQorI2RlZmluZSBvdXRzbChwb3J0LCBidWYsIG5sKSAgX291dHNsX25zKCh1MzIgKikoKHBvcnQpK3BjaV9pb19iYXNlKSwgKGJ1ZiksIChubCkpCisKKyNlbmRpZgorCisjZGVmaW5lIHJlYWRiX3JlbGF4ZWQoYWRkcikgcmVhZGIoYWRkcikKKyNkZWZpbmUgcmVhZHdfcmVsYXhlZChhZGRyKSByZWFkdyhhZGRyKQorI2RlZmluZSByZWFkbF9yZWxheGVkKGFkZHIpIHJlYWRsKGFkZHIpCisjZGVmaW5lIHJlYWRxX3JlbGF4ZWQoYWRkcikgcmVhZHEoYWRkcikKKworZXh0ZXJuIHZvaWQgX2luc2Iodm9sYXRpbGUgdTggKnBvcnQsIHZvaWQgKmJ1ZiwgaW50IG5zKTsKK2V4dGVybiB2b2lkIF9vdXRzYih2b2xhdGlsZSB1OCAqcG9ydCwgY29uc3Qgdm9pZCAqYnVmLCBpbnQgbnMpOworZXh0ZXJuIHZvaWQgX2luc3codm9sYXRpbGUgdTE2ICpwb3J0LCB2b2lkICpidWYsIGludCBucyk7CitleHRlcm4gdm9pZCBfb3V0c3codm9sYXRpbGUgdTE2ICpwb3J0LCBjb25zdCB2b2lkICpidWYsIGludCBucyk7CitleHRlcm4gdm9pZCBfaW5zbCh2b2xhdGlsZSB1MzIgKnBvcnQsIHZvaWQgKmJ1ZiwgaW50IG5sKTsKK2V4dGVybiB2b2lkIF9vdXRzbCh2b2xhdGlsZSB1MzIgKnBvcnQsIGNvbnN0IHZvaWQgKmJ1ZiwgaW50IG5sKTsKK2V4dGVybiB2b2lkIF9pbnN3X25zKHZvbGF0aWxlIHUxNiAqcG9ydCwgdm9pZCAqYnVmLCBpbnQgbnMpOworZXh0ZXJuIHZvaWQgX291dHN3X25zKHZvbGF0aWxlIHUxNiAqcG9ydCwgY29uc3Qgdm9pZCAqYnVmLCBpbnQgbnMpOworZXh0ZXJuIHZvaWQgX2luc2xfbnModm9sYXRpbGUgdTMyICpwb3J0LCB2b2lkICpidWYsIGludCBubCk7CitleHRlcm4gdm9pZCBfb3V0c2xfbnModm9sYXRpbGUgdTMyICpwb3J0LCBjb25zdCB2b2lkICpidWYsIGludCBubCk7CisKKyNkZWZpbmUgbW1pb3diKCkKKworLyoKKyAqIG91dHB1dCBwYXVzZSB2ZXJzaW9ucyBuZWVkIGEgZGVsYXkgYXQgbGVhc3QgZm9yIHRoZQorICogdzgzYzEwNSBpZGUgY29udHJvbGxlciBpbiBhIHA2MTAuCisgKi8KKyNkZWZpbmUgaW5iX3AocG9ydCkgICAgICAgICAgICAgaW5iKHBvcnQpCisjZGVmaW5lIG91dGJfcCh2YWwsIHBvcnQpICAgICAgICh1ZGVsYXkoMSksIG91dGIoKHZhbCksIChwb3J0KSkpCisjZGVmaW5lIGlud19wKHBvcnQpICAgICAgICAgICAgIGludyhwb3J0KQorI2RlZmluZSBvdXR3X3AodmFsLCBwb3J0KSAgICAgICAodWRlbGF5KDEpLCBvdXR3KCh2YWwpLCAocG9ydCkpKQorI2RlZmluZSBpbmxfcChwb3J0KSAgICAgICAgICAgICBpbmwocG9ydCkKKyNkZWZpbmUgb3V0bF9wKHZhbCwgcG9ydCkgICAgICAgKHVkZWxheSgxKSwgb3V0bCgodmFsKSwgKHBvcnQpKSkKKworLyoKKyAqIFRoZSAqX25zIHZlcnNpb25zIGJlbG93IGRvbid0IGRvIGJ5dGUtc3dhcHBpbmcuCisgKiBOZWl0aGVyIGRvIHRoZSBzdGFuZGFyZCB2ZXJzaW9ucyBub3csIHRoZXNlIGFyZSBqdXN0IGhlcmUKKyAqIGZvciBvbGRlciBjb2RlLgorICovCisjZGVmaW5lIG91dHN3X25zKHBvcnQsIGJ1ZiwgbnMpCV9vdXRzd19ucygodTE2ICopKChwb3J0KStwY2lfaW9fYmFzZSksIChidWYpLCAobnMpKQorI2RlZmluZSBvdXRzbF9ucyhwb3J0LCBidWYsIG5sKQlfb3V0c2xfbnMoKHUzMiAqKSgocG9ydCkrcGNpX2lvX2Jhc2UpLCAoYnVmKSwgKG5sKSkKKworCisjZGVmaW5lIElPX1NQQUNFX0xJTUlUIH4oMFVMKQorCisKKyNpZmRlZiBfX0tFUk5FTF9fCitleHRlcm4gaW50IF9faW9yZW1hcF9leHBsaWNpdCh1bnNpZ25lZCBsb25nIHBfYWRkciwgdW5zaWduZWQgbG9uZyB2X2FkZHIsCisJCSAgICAgCSAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBmbGFncyk7CitleHRlcm4gdm9pZCBfX2lvbWVtICpfX2lvcmVtYXAodW5zaWduZWQgbG9uZyBhZGRyZXNzLCB1bnNpZ25lZCBsb25nIHNpemUsCisJCSAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKTsKKworLyoqCisgKiBpb3JlbWFwICAgICAtICAgbWFwIGJ1cyBtZW1vcnkgaW50byBDUFUgc3BhY2UKKyAqIEBhZGRyZXNzOiAgIGJ1cyBhZGRyZXNzIG9mIHRoZSBtZW1vcnkKKyAqIEBzaXplOiAgICAgIHNpemUgb2YgdGhlIHJlc291cmNlIHRvIG1hcAorICoKKyAqIGlvcmVtYXAgcGVyZm9ybXMgYSBwbGF0Zm9ybSBzcGVjaWZpYyBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIHRvCisgKiBtYWtlIGJ1cyBtZW1vcnkgQ1BVIGFjY2Vzc2libGUgdmlhIHRoZSByZWFkYi9yZWFkdy9yZWFkbC93cml0ZWIvCisgKiB3cml0ZXcvd3JpdGVsIGZ1bmN0aW9ucyBhbmQgdGhlIG90aGVyIG1taW8gaGVscGVycy4gVGhlIHJldHVybmVkCisgKiBhZGRyZXNzIGlzIG5vdCBndWFyYW50ZWVkIHRvIGJlIHVzYWJsZSBkaXJlY3RseSBhcyBhIHZpcnR1YWwKKyAqIGFkZHJlc3MuCisgKi8KK2V4dGVybiB2b2lkIF9faW9tZW0gKmlvcmVtYXAodW5zaWduZWQgbG9uZyBhZGRyZXNzLCB1bnNpZ25lZCBsb25nIHNpemUpOworCisjZGVmaW5lIGlvcmVtYXBfbm9jYWNoZShhZGRyLCBzaXplKQlpb3JlbWFwKChhZGRyKSwgKHNpemUpKQorZXh0ZXJuIGludCBpb3VubWFwX2V4cGxpY2l0KHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKTsKK2V4dGVybiB2b2lkIGlvdW5tYXAodm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKTsKK2V4dGVybiB2b2lkIF9faW9tZW0gKiByZXNlcnZlX3BoYl9pb3NwYWNlKHVuc2lnbmVkIGxvbmcgc2l6ZSk7CisKKy8qKgorICoJdmlydF90b19waHlzCS0JbWFwIHZpcnR1YWwgYWRkcmVzc2VzIHRvIHBoeXNpY2FsCisgKglAYWRkcmVzczogYWRkcmVzcyB0byByZW1hcAorICoKKyAqCVRoZSByZXR1cm5lZCBwaHlzaWNhbCBhZGRyZXNzIGlzIHRoZSBwaHlzaWNhbCAoQ1BVKSBtYXBwaW5nIGZvcgorICoJdGhlIG1lbW9yeSBhZGRyZXNzIGdpdmVuLiBJdCBpcyBvbmx5IHZhbGlkIHRvIHVzZSB0aGlzIGZ1bmN0aW9uIG9uCisgKglhZGRyZXNzZXMgZGlyZWN0bHkgbWFwcGVkIG9yIGFsbG9jYXRlZCB2aWEga21hbGxvYy4KKyAqCisgKglUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGdpdmUgYnVzIG1hcHBpbmdzIGZvciBETUEgdHJhbnNmZXJzLiBJbgorICoJYWxtb3N0IGFsbCBjb25jZWl2YWJsZSBjYXNlcyBhIGRldmljZSBkcml2ZXIgc2hvdWxkIG5vdCBiZSB1c2luZworICoJdGhpcyBmdW5jdGlvbgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdmlydF90b19waHlzKHZvbGF0aWxlIHZvaWQgKiBhZGRyZXNzKQoreworCXJldHVybiBfX3BhKCh1bnNpZ25lZCBsb25nKWFkZHJlc3MpOworfQorCisvKioKKyAqCXBoeXNfdG9fdmlydAktCW1hcCBwaHlzaWNhbCBhZGRyZXNzIHRvIHZpcnR1YWwKKyAqCUBhZGRyZXNzOiBhZGRyZXNzIHRvIHJlbWFwCisgKgorICoJVGhlIHJldHVybmVkIHZpcnR1YWwgYWRkcmVzcyBpcyBhIGN1cnJlbnQgQ1BVIG1hcHBpbmcgZm9yCisgKgl0aGUgbWVtb3J5IGFkZHJlc3MgZ2l2ZW4uIEl0IGlzIG9ubHkgdmFsaWQgdG8gdXNlIHRoaXMgZnVuY3Rpb24gb24KKyAqCWFkZHJlc3NlcyB0aGF0IGhhdmUgYSBrZXJuZWwgbWFwcGluZworICoKKyAqCVRoaXMgZnVuY3Rpb24gZG9lcyBub3QgaGFuZGxlIGJ1cyBtYXBwaW5ncyBmb3IgRE1BIHRyYW5zZmVycy4gSW4KKyAqCWFsbW9zdCBhbGwgY29uY2VpdmFibGUgY2FzZXMgYSBkZXZpY2UgZHJpdmVyIHNob3VsZCBub3QgYmUgdXNpbmcKKyAqCXRoaXMgZnVuY3Rpb24KKyAqLworc3RhdGljIGlubGluZSB2b2lkICogcGh5c190b192aXJ0KHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwlyZXR1cm4gKHZvaWQgKilfX3ZhKGFkZHJlc3MpOworfQorCisvKgorICogQ2hhbmdlICJzdHJ1Y3QgcGFnZSIgdG8gcGh5c2ljYWwgYWRkcmVzcy4KKyAqLworI2RlZmluZSBwYWdlX3RvX3BoeXMocGFnZSkJKHBhZ2VfdG9fcGZuKHBhZ2UpIDw8IFBBR0VfU0hJRlQpCisKKy8qIFdlIGRvIE5PVCB3YW50IHZpcnR1YWwgbWVyZ2luZywgaXQgd291bGQgcHV0IHRvbyBtdWNoIHByZXNzdXJlIG9uCisgKiBvdXIgaW9tbXUgYWxsb2NhdG9yLiBJbnN0ZWFkLCB3ZSB3YW50IGRyaXZlcnMgdG8gYmUgc21hcnQgZW5vdWdoCisgKiB0byBjb2FsZXNjZSBzZ2xpc3RzIHRoYXQgaGFwcGVuIHRvIGhhdmUgYmVlbiBtYXBwZWQgaW4gYSBjb250aWd1b3VzCisgKiB3YXkgYnkgdGhlIGlvbW11CisgKi8KKyNkZWZpbmUgQklPX1ZNRVJHRV9CT1VOREFSWQkwCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpb3N5bmModm9pZCkKK3sKKyAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzeW5jIiA6IDogOiAibWVtb3J5Iik7Cit9CisKKy8qIEVuZm9yY2UgaW4tb3JkZXIgZXhlY3V0aW9uIG9mIGRhdGEgSS9PLiAKKyAqIE5vIGRpc3RpbmN0aW9uIGJldHdlZW4gcmVhZC93cml0ZSBvbiBQUEM7IHVzZSBlaWVpbyBmb3IgYWxsIHRocmVlLgorICovCisjZGVmaW5lIGlvYmFycmllcl9ydygpIGVpZWlvKCkKKyNkZWZpbmUgaW9iYXJyaWVyX3IoKSAgZWllaW8oKQorI2RlZmluZSBpb2JhcnJpZXJfdygpICBlaWVpbygpCisKKy8qCisgKiA4LCAxNiBhbmQgMzIgYml0LCBiaWcgYW5kIGxpdHRsZSBlbmRpYW4gSS9PIG9wZXJhdGlvbnMsIHdpdGggYmFycmllci4KKyAqIFRoZXNlIHJvdXRpbmVzIGRvIG5vdCBwZXJmb3JtIEVFSC1yZWxhdGVkIEkvTyBhZGRyZXNzIHRyYW5zbGF0aW9uLAorICogYW5kIHNob3VsZCBub3QgYmUgdXNlZCBkaXJlY3RseSBieSBkZXZpY2UgZHJpdmVycy4gIFVzZSBpbmIvcmVhZGIKKyAqIGluc3RlYWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGluXzgoY29uc3Qgdm9sYXRpbGUgdW5zaWduZWQgY2hhciBfX2lvbWVtICphZGRyKQoreworCWludCByZXQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibGJ6JVUxJVgxICUwLCUxOyB0d2kgMCwlMCwwOyBpc3luYyIKKwkJCSAgICAgOiAiPXIiIChyZXQpIDogIm0iICgqYWRkcikpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvdXRfOCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIF9faW9tZW0gKmFkZHIsIGludCB2YWwpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0YiVVMCVYMCAlMSwlMDsgc3luYyIKKwkJCSAgICAgOiAiPW0iICgqYWRkcikgOiAiciIgKHZhbCkpOworfQorCitzdGF0aWMgaW5saW5lIGludCBpbl9sZTE2KGNvbnN0IHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IF9faW9tZW0gKmFkZHIpCit7CisJaW50IHJldDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKCJsaGJyeCAlMCwwLCUxOyB0d2kgMCwlMCwwOyBpc3luYyIKKwkJCSAgICAgOiAiPXIiIChyZXQpIDogInIiIChhZGRyKSwgIm0iICgqYWRkcikpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGluX2JlMTYoY29uc3Qgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgX19pb21lbSAqYWRkcikKK3sKKwlpbnQgcmV0OworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oImxoeiVVMSVYMSAlMCwlMTsgdHdpIDAsJTAsMDsgaXN5bmMiCisJCQkgICAgIDogIj1yIiAocmV0KSA6ICJtIiAoKmFkZHIpKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgb3V0X2xlMTYodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgX19pb21lbSAqYWRkciwgaW50IHZhbCkKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RoYnJ4ICUxLDAsJTI7IHN5bmMiCisJCQkgICAgIDogIj1tIiAoKmFkZHIpIDogInIiICh2YWwpLCAiciIgKGFkZHIpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG91dF9iZTE2KHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IF9faW9tZW0gKmFkZHIsIGludCB2YWwpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0aCVVMCVYMCAlMSwlMDsgc3luYyIKKwkJCSAgICAgOiAiPW0iICgqYWRkcikgOiAiciIgKHZhbCkpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGluX2xlMzIoY29uc3Qgdm9sYXRpbGUgdW5zaWduZWQgX19pb21lbSAqYWRkcikKK3sKKwl1bnNpZ25lZCByZXQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibHdicnggJTAsMCwlMTsgdHdpIDAsJTAsMDsgaXN5bmMiCisJCQkgICAgIDogIj1yIiAocmV0KSA6ICJyIiAoYWRkciksICJtIiAoKmFkZHIpKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGluX2JlMzIoY29uc3Qgdm9sYXRpbGUgdW5zaWduZWQgX19pb21lbSAqYWRkcikKK3sKKwl1bnNpZ25lZCByZXQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibHd6JVUxJVgxICUwLCUxOyB0d2kgMCwlMCwwOyBpc3luYyIKKwkJCSAgICAgOiAiPXIiIChyZXQpIDogIm0iICgqYWRkcikpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvdXRfbGUzMih2b2xhdGlsZSB1bnNpZ25lZCBfX2lvbWVtICphZGRyLCBpbnQgdmFsKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdHdicnggJTEsMCwlMjsgc3luYyIgOiAiPW0iICgqYWRkcikKKwkJCSAgICAgOiAiciIgKHZhbCksICJyIiAoYWRkcikpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgb3V0X2JlMzIodm9sYXRpbGUgdW5zaWduZWQgX19pb21lbSAqYWRkciwgaW50IHZhbCkKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3R3JVUwJVgwICUxLCUwOyBzeW5jIgorCQkJICAgICA6ICI9bSIgKCphZGRyKSA6ICJyIiAodmFsKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBpbl9sZTY0KGNvbnN0IHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgX19pb21lbSAqYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIHRtcCwgcmV0OworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCQkgICAgICJsZCAlMSwwKCUyKVxuIgorCQkJICAgICAidHdpIDAsJTEsMFxuIgorCQkJICAgICAiaXN5bmNcbiIKKwkJCSAgICAgInJsZGltaSAlMCwlMSw1KjgsMSo4XG4iCisJCQkgICAgICJybGRpbWkgJTAsJTEsMyo4LDIqOFxuIgorCQkJICAgICAicmxkaW1pICUwLCUxLDEqOCwzKjhcbiIKKwkJCSAgICAgInJsZGltaSAlMCwlMSw3KjgsNCo4XG4iCisJCQkgICAgICJybGRpY2wgJTEsJTEsMzIsMFxuIgorCQkJICAgICAicmx3aW1pICUwLCUxLDgsOCwzMVxuIgorCQkJICAgICAicmx3aW1pICUwLCUxLDI0LDE2LDIzXG4iCisJCQkgICAgIDogIj1yIiAocmV0KSAsICI9ciIgKHRtcCkgOiAiYiIgKGFkZHIpICwgIm0iICgqYWRkcikpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBpbl9iZTY0KGNvbnN0IHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgX19pb21lbSAqYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIHJldDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKCJsZCVVMSVYMSAlMCwlMTsgdHdpIDAsJTAsMDsgaXN5bmMiCisJCQkgICAgIDogIj1yIiAocmV0KSA6ICJtIiAoKmFkZHIpKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgb3V0X2xlNjQodm9sYXRpbGUgdW5zaWduZWQgbG9uZyBfX2lvbWVtICphZGRyLCB1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkJICAgICAicmxkaW1pICUwLCUxLDUqOCwxKjhcbiIKKwkJCSAgICAgInJsZGltaSAlMCwlMSwzKjgsMio4XG4iCisJCQkgICAgICJybGRpbWkgJTAsJTEsMSo4LDMqOFxuIgorCQkJICAgICAicmxkaW1pICUwLCUxLDcqOCw0KjhcbiIKKwkJCSAgICAgInJsZGljbCAlMSwlMSwzMiwwXG4iCisJCQkgICAgICJybHdpbWkgJTAsJTEsOCw4LDMxXG4iCisJCQkgICAgICJybHdpbWkgJTAsJTEsMjQsMTYsMjNcbiIKKwkJCSAgICAgInN0ZCAlMCwwKCUzKVxuIgorCQkJICAgICAic3luYyIKKwkJCSAgICAgOiAiPSZyIiAodG1wKSAsICI9JnIiICh2YWwpIDogIjEiICh2YWwpICwgImIiIChhZGRyKSAsICJtIiAoKmFkZHIpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG91dF9iZTY0KHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgX19pb21lbSAqYWRkciwgdW5zaWduZWQgbG9uZyB2YWwpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0ZCVVMCVYMCAlMSwlMDsgc3luYyIgOiAiPW0iICgqYWRkcikgOiAiciIgKHZhbCkpOworfQorCisjaWZuZGVmIENPTkZJR19QUENfSVNFUklFUyAKKyNpbmNsdWRlIDxhc20vZWVoLmg+CisjZW5kaWYKKworI2lmZGVmIF9fS0VSTkVMX18KKworLyoqCisgKgljaGVja19zaWduYXR1cmUJCS0JZmluZCBCSU9TIHNpZ25hdHVyZXMKKyAqCUBpb19hZGRyOiBtbWlvIGFkZHJlc3MgdG8gY2hlY2sKKyAqCUBzaWduYXR1cmU6ICBzaWduYXR1cmUgYmxvY2sKKyAqCUBsZW5ndGg6IGxlbmd0aCBvZiBzaWduYXR1cmUKKyAqCisgKglQZXJmb3JtIGEgc2lnbmF0dXJlIGNvbXBhcmlzb24gd2l0aCB0aGUgbW1pbyBhZGRyZXNzIGlvX2FkZHIuIFRoaXMKKyAqCWFkZHJlc3Mgc2hvdWxkIGhhdmUgYmVlbiBvYnRhaW5lZCBieSBpb3JlbWFwLgorICoJUmV0dXJucyAxIG9uIGEgbWF0Y2guCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGNoZWNrX3NpZ25hdHVyZShjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKiBpb19hZGRyLAorCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNpZ25hdHVyZSwgaW50IGxlbmd0aCkKK3sKKwlpbnQgcmV0dmFsID0gMDsKKyNpZm5kZWYgQ09ORklHX1BQQ19JU0VSSUVTIAorCWRvIHsKKwkJaWYgKHJlYWRiKGlvX2FkZHIpICE9ICpzaWduYXR1cmUpCisJCQlnb3RvIG91dDsKKwkJaW9fYWRkcisrOworCQlzaWduYXR1cmUrKzsKKwkJbGVuZ3RoLS07CisJfSB3aGlsZSAobGVuZ3RoKTsKKwlyZXR2YWwgPSAxOworb3V0OgorI2VuZGlmCisJcmV0dXJuIHJldHZhbDsKK30KKworLyogTm90aGluZyB0byBkbyAqLworCisjZGVmaW5lIGRtYV9jYWNoZV9pbnYoX3N0YXJ0LF9zaXplKQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBkbWFfY2FjaGVfd2JhY2soX3N0YXJ0LF9zaXplKQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBkbWFfY2FjaGVfd2JhY2tfaW52KF9zdGFydCxfc2l6ZSkJZG8geyB9IHdoaWxlICgwKQorCisvKiBDaGVjayBvZiBleGlzdGVuY2Ugb2YgbGVnYWN5IGRldmljZXMgKi8KK2V4dGVybiBpbnQgY2hlY2tfbGVnYWN5X2lvcG9ydCh1bnNpZ25lZCBsb25nIGJhc2VfcG9ydCk7CisKKworLyoKKyAqIENvbnZlcnQgYSBwaHlzaWNhbCBwb2ludGVyIHRvIGEgdmlydHVhbCBrZXJuZWwgcG9pbnRlciBmb3IgL2Rldi9tZW0KKyAqIGFjY2VzcworICovCisjZGVmaW5lIHhsYXRlX2Rldl9tZW1fcHRyKHApCV9fdmEocCkKKworLyoKKyAqIENvbnZlcnQgYSB2aXJ0dWFsIGNhY2hlZCBwb2ludGVyIHRvIGFuIHVuY2FjaGVkIHBvaW50ZXIKKyAqLworI2RlZmluZSB4bGF0ZV9kZXZfa21lbV9wdHIocCkJcAorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX1BQQzY0X0lPX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L2lvY3RsLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9pb2N0bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyYjhjNWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9pb2N0bC5oCkBAIC0wLDAgKzEsNzQgQEAKKyNpZm5kZWYgX1BQQzY0X0lPQ1RMX0gKKyNkZWZpbmUgX1BQQzY0X0lPQ1RMX0gKKworCisvKgorICogVGhpcyB3YXMgY29waWVkIGZyb20gdGhlIGFscGhhIGFzIGl0J3MgYSBiaXQgY2xlYW5lciB0aGVyZS4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgIC0tIENvcnQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNkZWZpbmUgX0lPQ19OUkJJVFMJOAorI2RlZmluZSBfSU9DX1RZUEVCSVRTCTgKKyNkZWZpbmUgX0lPQ19TSVpFQklUUwkxMworI2RlZmluZSBfSU9DX0RJUkJJVFMJMworCisjZGVmaW5lIF9JT0NfTlJNQVNLCSgoMSA8PCBfSU9DX05SQklUUyktMSkKKyNkZWZpbmUgX0lPQ19UWVBFTUFTSwkoKDEgPDwgX0lPQ19UWVBFQklUUyktMSkKKyNkZWZpbmUgX0lPQ19TSVpFTUFTSwkoKDEgPDwgX0lPQ19TSVpFQklUUyktMSkKKyNkZWZpbmUgX0lPQ19ESVJNQVNLCSgoMSA8PCBfSU9DX0RJUkJJVFMpLTEpCisKKyNkZWZpbmUgX0lPQ19OUlNISUZUCTAKKyNkZWZpbmUgX0lPQ19UWVBFU0hJRlQJKF9JT0NfTlJTSElGVCtfSU9DX05SQklUUykKKyNkZWZpbmUgX0lPQ19TSVpFU0hJRlQJKF9JT0NfVFlQRVNISUZUK19JT0NfVFlQRUJJVFMpCisjZGVmaW5lIF9JT0NfRElSU0hJRlQJKF9JT0NfU0laRVNISUZUK19JT0NfU0laRUJJVFMpCisKKy8qCisgKiBEaXJlY3Rpb24gYml0cyBfSU9DX05PTkUgY291bGQgYmUgMCwgYnV0IE9TRi8xIGdpdmVzIGl0IGEgYml0LgorICogQW5kIHRoaXMgdHVybnMgb3V0IHVzZWZ1bCB0byBjYXRjaCBvbGQgaW9jdGwgbnVtYmVycyBpbiBoZWFkZXIKKyAqIGZpbGVzIGZvciB1cy4KKyAqLworI2RlZmluZSBfSU9DX05PTkUJMVUKKyNkZWZpbmUgX0lPQ19SRUFECTJVCisjZGVmaW5lIF9JT0NfV1JJVEUJNFUKKworI2RlZmluZSBfSU9DKGRpcix0eXBlLG5yLHNpemUpIFwKKwkoKChkaXIpICA8PCBfSU9DX0RJUlNISUZUKSB8IFwKKwkgKCh0eXBlKSA8PCBfSU9DX1RZUEVTSElGVCkgfCBcCisJICgobnIpICAgPDwgX0lPQ19OUlNISUZUKSB8IFwKKwkgKChzaXplKSA8PCBfSU9DX1NJWkVTSElGVCkpCisKKy8qIHByb3Zva2UgY29tcGlsZSBlcnJvciBmb3IgaW52YWxpZCB1c2VzIG9mIHNpemUgYXJndW1lbnQgKi8KK2V4dGVybiB1bnNpZ25lZCBpbnQgX19pbnZhbGlkX3NpemVfYXJndW1lbnRfZm9yX0lPQzsKKyNkZWZpbmUgX0lPQ19UWVBFQ0hFQ0sodCkgXAorICAgICAgICgoc2l6ZW9mKHQpID09IHNpemVvZih0WzFdKSAmJiBcCisgICAgICAgICBzaXplb2YodCkgPCAoMSA8PCBfSU9DX1NJWkVCSVRTKSkgPyBcCisgICAgICAgICBzaXplb2YodCkgOiBfX2ludmFsaWRfc2l6ZV9hcmd1bWVudF9mb3JfSU9DKQorCisvKiB1c2VkIHRvIGNyZWF0ZSBudW1iZXJzICovCisjZGVmaW5lIF9JTyh0eXBlLG5yKQkJX0lPQyhfSU9DX05PTkUsKHR5cGUpLChuciksMCkKKyNkZWZpbmUgX0lPUih0eXBlLG5yLHNpemUpCV9JT0MoX0lPQ19SRUFELCh0eXBlKSwobnIpLChfSU9DX1RZUEVDSEVDSyhzaXplKSkpCisjZGVmaW5lIF9JT1codHlwZSxucixzaXplKQlfSU9DKF9JT0NfV1JJVEUsKHR5cGUpLChuciksKF9JT0NfVFlQRUNIRUNLKHNpemUpKSkKKyNkZWZpbmUgX0lPV1IodHlwZSxucixzaXplKQlfSU9DKF9JT0NfUkVBRHxfSU9DX1dSSVRFLCh0eXBlKSwobnIpLChfSU9DX1RZUEVDSEVDSyhzaXplKSkpCisjZGVmaW5lIF9JT1JfQkFEKHR5cGUsbnIsc2l6ZSkJX0lPQyhfSU9DX1JFQUQsKHR5cGUpLChuciksc2l6ZW9mKHNpemUpKQorI2RlZmluZSBfSU9XX0JBRCh0eXBlLG5yLHNpemUpCV9JT0MoX0lPQ19XUklURSwodHlwZSksKG5yKSxzaXplb2Yoc2l6ZSkpCisjZGVmaW5lIF9JT1dSX0JBRCh0eXBlLG5yLHNpemUpCV9JT0MoX0lPQ19SRUFEfF9JT0NfV1JJVEUsKHR5cGUpLChuciksc2l6ZW9mKHNpemUpKQorCisvKiB1c2VkIHRvIGRlY29kZSB0aGVtLi4gKi8KKyNkZWZpbmUgX0lPQ19ESVIobnIpCQkoKChucikgPj4gX0lPQ19ESVJTSElGVCkgJiBfSU9DX0RJUk1BU0spCisjZGVmaW5lIF9JT0NfVFlQRShucikJCSgoKG5yKSA+PiBfSU9DX1RZUEVTSElGVCkgJiBfSU9DX1RZUEVNQVNLKQorI2RlZmluZSBfSU9DX05SKG5yKQkJKCgobnIpID4+IF9JT0NfTlJTSElGVCkgJiBfSU9DX05STUFTSykKKyNkZWZpbmUgX0lPQ19TSVpFKG5yKQkJKCgobnIpID4+IF9JT0NfU0laRVNISUZUKSAmIF9JT0NfU0laRU1BU0spCisKKy8qIHZhcmlvdXMgZHJpdmVycywgc3VjaCBhcyB0aGUgcGNtY2lhIHN0dWZmLCBuZWVkIHRoZXNlLi4uICovCisjZGVmaW5lIElPQ19JTgkJKF9JT0NfV1JJVEUgPDwgX0lPQ19ESVJTSElGVCkKKyNkZWZpbmUgSU9DX09VVAkJKF9JT0NfUkVBRCA8PCBfSU9DX0RJUlNISUZUKQorI2RlZmluZSBJT0NfSU5PVVQJKChfSU9DX1dSSVRFfF9JT0NfUkVBRCkgPDwgX0lPQ19ESVJTSElGVCkKKyNkZWZpbmUgSU9DU0laRV9NQVNLCShfSU9DX1NJWkVNQVNLIDw8IF9JT0NfU0laRVNISUZUKQorI2RlZmluZSBJT0NTSVpFX1NISUZUCShfSU9DX1NJWkVTSElGVCkKKworI2VuZGlmIC8qIF9QUEM2NF9JT0NUTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9pb2N0bHMuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L2lvY3Rscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4Nzk2YmYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9pb2N0bHMuaApAQCAtMCwwICsxLDExNCBAQAorI2lmbmRlZiBfQVNNX1BQQzY0X0lPQ1RMU19ICisjZGVmaW5lIF9BU01fUFBDNjRfSU9DVExTX0gKKworLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGFzbS9pb2N0bC5oPgorCisjZGVmaW5lIEZJT0NMRVgJCV9JTygnZicsIDEpCisjZGVmaW5lIEZJT05DTEVYCV9JTygnZicsIDIpCisjZGVmaW5lIEZJT0FTWU5DCV9JT1coJ2YnLCAxMjUsIGludCkKKyNkZWZpbmUgRklPTkJJTwkJX0lPVygnZicsIDEyNiwgaW50KQorI2RlZmluZSBGSU9OUkVBRAlfSU9SKCdmJywgMTI3LCBpbnQpCisjZGVmaW5lIFRJT0NJTlEJCUZJT05SRUFECisjZGVmaW5lIEZJT1FTSVpFICAgICAgICBfSU9SKCdmJywgMTI4LCBsb2ZmX3QpCisKKyNkZWZpbmUgVElPQ0dFVFAJX0lPUigndCcsIDgsIHN0cnVjdCBzZ3R0eWIpCisjZGVmaW5lIFRJT0NTRVRQCV9JT1coJ3QnLCA5LCBzdHJ1Y3Qgc2d0dHliKQorI2RlZmluZSBUSU9DU0VUTglfSU9XKCd0JywgMTAsIHN0cnVjdCBzZ3R0eWIpCS8qIFRJT0NTRVRQIHdvIGZsdXNoICovCisKKyNkZWZpbmUgVElPQ1NFVEMJX0lPVygndCcsIDE3LCBzdHJ1Y3QgdGNoYXJzKQorI2RlZmluZSBUSU9DR0VUQwlfSU9SKCd0JywgMTgsIHN0cnVjdCB0Y2hhcnMpCisjZGVmaW5lIFRDR0VUUwkJX0lPUigndCcsIDE5LCBzdHJ1Y3QgdGVybWlvcykKKyNkZWZpbmUgVENTRVRTCQlfSU9XKCd0JywgMjAsIHN0cnVjdCB0ZXJtaW9zKQorI2RlZmluZSBUQ1NFVFNXCQlfSU9XKCd0JywgMjEsIHN0cnVjdCB0ZXJtaW9zKQorI2RlZmluZSBUQ1NFVFNGCQlfSU9XKCd0JywgMjIsIHN0cnVjdCB0ZXJtaW9zKQorCisjZGVmaW5lIFRDR0VUQQkJX0lPUigndCcsIDIzLCBzdHJ1Y3QgdGVybWlvKQorI2RlZmluZSBUQ1NFVEEJCV9JT1coJ3QnLCAyNCwgc3RydWN0IHRlcm1pbykKKyNkZWZpbmUgVENTRVRBVwkJX0lPVygndCcsIDI1LCBzdHJ1Y3QgdGVybWlvKQorI2RlZmluZSBUQ1NFVEFGCQlfSU9XKCd0JywgMjgsIHN0cnVjdCB0ZXJtaW8pCisKKyNkZWZpbmUgVENTQlJLCQlfSU8oJ3QnLCAyOSkKKyNkZWZpbmUgVENYT05DCQlfSU8oJ3QnLCAzMCkKKyNkZWZpbmUgVENGTFNICQlfSU8oJ3QnLCAzMSkKKworI2RlZmluZSBUSU9DU1dJTlNaCV9JT1coJ3QnLCAxMDMsIHN0cnVjdCB3aW5zaXplKQorI2RlZmluZSBUSU9DR1dJTlNaCV9JT1IoJ3QnLCAxMDQsIHN0cnVjdCB3aW5zaXplKQorI2RlZmluZQlUSU9DU1RBUlQJX0lPKCd0JywgMTEwKQkJLyogc3RhcnQgb3V0cHV0LCBsaWtlIF5RICovCisjZGVmaW5lCVRJT0NTVE9QCV9JTygndCcsIDExMSkJCS8qIHN0b3Agb3V0cHV0LCBsaWtlIF5TICovCisjZGVmaW5lIFRJT0NPVVRRICAgICAgICBfSU9SKCd0JywgMTE1LCBpbnQpICAgICAvKiBvdXRwdXQgcXVldWUgc2l6ZSAqLworCisjZGVmaW5lIFRJT0NHTFRDCV9JT1IoJ3QnLCAxMTYsIHN0cnVjdCBsdGNoYXJzKQorI2RlZmluZSBUSU9DU0xUQwlfSU9XKCd0JywgMTE3LCBzdHJ1Y3QgbHRjaGFycykKKyNkZWZpbmUgVElPQ1NQR1JQCV9JT1coJ3QnLCAxMTgsIGludCkKKyNkZWZpbmUgVElPQ0dQR1JQCV9JT1IoJ3QnLCAxMTksIGludCkKKworI2RlZmluZSBUSU9DRVhDTAkweDU0MEMKKyNkZWZpbmUgVElPQ05YQ0wJMHg1NDBECisjZGVmaW5lIFRJT0NTQ1RUWQkweDU0MEUKKworI2RlZmluZSBUSU9DU1RJCQkweDU0MTIKKyNkZWZpbmUgVElPQ01HRVQJMHg1NDE1CisjZGVmaW5lIFRJT0NNQklTCTB4NTQxNgorI2RlZmluZSBUSU9DTUJJQwkweDU0MTcKKyNkZWZpbmUgVElPQ01TRVQJMHg1NDE4CisjIGRlZmluZSBUSU9DTV9MRQkweDAwMQorIyBkZWZpbmUgVElPQ01fRFRSCTB4MDAyCisjIGRlZmluZSBUSU9DTV9SVFMJMHgwMDQKKyMgZGVmaW5lIFRJT0NNX1NUCTB4MDA4CisjIGRlZmluZSBUSU9DTV9TUgkweDAxMAorIyBkZWZpbmUgVElPQ01fQ1RTCTB4MDIwCisjIGRlZmluZSBUSU9DTV9DQVIJMHgwNDAKKyMgZGVmaW5lIFRJT0NNX1JORwkweDA4MAorIyBkZWZpbmUgVElPQ01fRFNSCTB4MTAwCisjIGRlZmluZSBUSU9DTV9DRAlUSU9DTV9DQVIKKyMgZGVmaW5lIFRJT0NNX1JJCVRJT0NNX1JORworCisjZGVmaW5lIFRJT0NHU09GVENBUgkweDU0MTkKKyNkZWZpbmUgVElPQ1NTT0ZUQ0FSCTB4NTQxQQorI2RlZmluZSBUSU9DTElOVVgJMHg1NDFDCisjZGVmaW5lIFRJT0NDT05TCTB4NTQxRAorI2RlZmluZSBUSU9DR1NFUklBTAkweDU0MUUKKyNkZWZpbmUgVElPQ1NTRVJJQUwJMHg1NDFGCisjZGVmaW5lIFRJT0NQS1QJCTB4NTQyMAorIyBkZWZpbmUgVElPQ1BLVF9EQVRBCQkgMAorIyBkZWZpbmUgVElPQ1BLVF9GTFVTSFJFQUQJIDEKKyMgZGVmaW5lIFRJT0NQS1RfRkxVU0hXUklURQkgMgorIyBkZWZpbmUgVElPQ1BLVF9TVE9QCQkgNAorIyBkZWZpbmUgVElPQ1BLVF9TVEFSVAkJIDgKKyMgZGVmaW5lIFRJT0NQS1RfTk9TVE9QCQkxNgorIyBkZWZpbmUgVElPQ1BLVF9ET1NUT1AJCTMyCisKKworI2RlZmluZSBUSU9DTk9UVFkJMHg1NDIyCisjZGVmaW5lIFRJT0NTRVRECTB4NTQyMworI2RlZmluZSBUSU9DR0VURAkweDU0MjQKKyNkZWZpbmUgVENTQlJLUAkJMHg1NDI1CS8qIE5lZWRlZCBmb3IgUE9TSVggdGNzZW5kYnJlYWsoKSAqLworI2RlZmluZSBUSU9DU0JSSwkweDU0MjcgIC8qIEJTRCBjb21wYXRpYmlsaXR5ICovCisjZGVmaW5lIFRJT0NDQlJLCTB4NTQyOCAgLyogQlNEIGNvbXBhdGliaWxpdHkgKi8KKyNkZWZpbmUgVElPQ0dTSUQJMHg1NDI5ICAvKiBSZXR1cm4gdGhlIHNlc3Npb24gSUQgb2YgRkQgKi8KKyNkZWZpbmUgVElPQ0dQVE4JX0lPUignVCcsMHgzMCwgdW5zaWduZWQgaW50KSAvKiBHZXQgUHR5IE51bWJlciAob2YgcHR5LW11eCBkZXZpY2UpICovCisjZGVmaW5lIFRJT0NTUFRMQ0sJX0lPVygnVCcsMHgzMSwgaW50KSAgLyogTG9jay91bmxvY2sgUHR5ICovCisKKyNkZWZpbmUgVElPQ1NFUkNPTkZJRwkweDU0NTMKKyNkZWZpbmUgVElPQ1NFUkdXSUxECTB4NTQ1NAorI2RlZmluZSBUSU9DU0VSU1dJTEQJMHg1NDU1CisjZGVmaW5lIFRJT0NHTENLVFJNSU9TCTB4NTQ1NgorI2RlZmluZSBUSU9DU0xDS1RSTUlPUwkweDU0NTcKKyNkZWZpbmUgVElPQ1NFUkdTVFJVQ1QJMHg1NDU4IC8qIEZvciBkZWJ1Z2dpbmcgb25seSAqLworI2RlZmluZSBUSU9DU0VSR0VUTFNSICAgMHg1NDU5IC8qIEdldCBsaW5lIHN0YXR1cyByZWdpc3RlciAqLworICAvKiBpb2N0bCAoZmQsIFRJT0NTRVJHRVRMU1IsICZyZXN1bHQpIHdoZXJlIHJlc3VsdCBtYXkgYmUgYXMgYmVsb3cgKi8KKyMgZGVmaW5lIFRJT0NTRVJfVEVNVCAgICAweDAxCS8qIFRyYW5zbWl0dGVyIHBoeXNpY2FsbHkgZW1wdHkgKi8KKyNkZWZpbmUgVElPQ1NFUkdFVE1VTFRJIDB4NTQ1QSAvKiBHZXQgbXVsdGlwb3J0IGNvbmZpZyAgKi8KKyNkZWZpbmUgVElPQ1NFUlNFVE1VTFRJIDB4NTQ1QiAvKiBTZXQgbXVsdGlwb3J0IGNvbmZpZyAqLworCisjZGVmaW5lIFRJT0NNSVdBSVQJMHg1NDVDCS8qIHdhaXQgZm9yIGEgY2hhbmdlIG9uIHNlcmlhbCBpbnB1dCBsaW5lKHMpICovCisjZGVmaW5lIFRJT0NHSUNPVU5UCTB4NTQ1RAkvKiByZWFkIHNlcmlhbCBwb3J0IGlubGluZSBpbnRlcnJ1cHQgY291bnRzICovCisKKyNlbmRpZiAvKiBfQVNNX1BQQzY0X0lPQ1RMU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9pb21tdS5oIGIvaW5jbHVkZS9hc20tcHBjNjQvaW9tbXUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDUzY2E0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvaW9tbXUuaApAQCAtMCwwICsxLDE2NiBAQAorLyoKKyAqIGlvbW11LmgKKyAqIENvcHlyaWdodCAoQykgMjAwMSBNaWtlIENvcnJpZ2FuICYgRGF2ZSBFbmdlYnJldHNlbiwgSUJNIENvcnBvcmF0aW9uCisgKiBSZXdyaXRlLCBjbGVhbnVwOgorICogQ29weXJpZ2h0IChDKSAyMDA0IE9sb2YgSm9oYW5zc29uIDxvbG9mQGF1c3Rpbi5pYm0uY29tPiwgSUJNIENvcnBvcmF0aW9uCisgKiAKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiAKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKiAKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2lmbmRlZiBfQVNNX0lPTU1VX0gKKyNkZWZpbmUgX0FTTV9JT01NVV9ICisKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisKKy8qCisgKiBJT01BUF9NQVhfT1JERVIgZGVmaW5lcyB0aGUgbGFyZ2VzdCBjb250aWd1b3VzIGJsb2NrCisgKiBvZiBkbWEgKHRjZSkgc3BhY2Ugd2UgY2FuIGdldC4gIElPTUFQX01BWF9PUkRFUiA9IDEzCisgKiBhbGxvd3MgdXAgdG8gMioqMTIgcGFnZXMgKDQwOTYgKiA0MDk2KSA9IDE2IE1CCisgKi8KKyNkZWZpbmUgSU9NQVBfTUFYX09SREVSIDEzCisKKy8qCisgKiBUY2VzIGNvbWUgaW4gdHdvIGZvcm1hdHMsIG9uZSBmb3IgdGhlIHZpcnR1YWwgYnVzIGFuZCBhIGRpZmZlcmVudAorICogZm9ybWF0IGZvciBQQ0kKKyAqLworI2RlZmluZSBUQ0VfVkIgIDAKKyNkZWZpbmUgVENFX1BDSSAxCisKKy8qIHRjZV9lbnRyeQorICogVXNlZCBieSBwU2VyaWVzIChTTVApIGFuZCBpU2VyaWVzL3BTZXJpZXMgTFBBUiwgYnV0IHRoZXJlIGl0J3MKKyAqIGFic3RyYWN0ZWQgc28gbGF5b3V0IGlzIGlycmVsZXZhbnQuCisgKi8KK3VuaW9uIHRjZV9lbnRyeSB7CisgICAJdW5zaWduZWQgbG9uZyB0ZV93b3JkOworCXN0cnVjdCB7CisJCXVuc2lnbmVkIGludCAgdGJfY2FjaGVCaXRzIDo2OwkvKiBDYWNoZSBoYXNoIGJpdHMgLSBub3QgdXNlZCAqLworCQl1bnNpZ25lZCBpbnQgIHRiX3JzdmQgICAgICA6NjsKKwkJdW5zaWduZWQgbG9uZyB0Yl9ycG4gICAgICAgOjQwOwkvKiBSZWFsIHBhZ2UgbnVtYmVyICovCisJCXVuc2lnbmVkIGludCAgdGJfdmFsaWQgICAgIDoxOwkvKiBUY2UgaXMgdmFsaWQgKHZiIG9ubHkpICovCisJCXVuc2lnbmVkIGludCAgdGJfYWxsaW8gICAgIDoxOwkvKiBUY2UgaXMgdmFsaWQgZm9yIGFsbCBscHMgKHZiIG9ubHkpICovCisJCXVuc2lnbmVkIGludCAgdGJfbHBpbmRleCAgIDo4OwkvKiBMcEluZGV4IGZvciB1c2VyIG9mIFRDRSAodmIgb25seSkgKi8KKwkJdW5zaWduZWQgaW50ICB0Yl9wY2l3ciAgICAgOjE7CS8qIFdyaXRlIGFsbG93ZWQgKHBjaSBvbmx5KSAqLworCQl1bnNpZ25lZCBpbnQgIHRiX3Jkd3IgICAgICA6MTsJLyogUmVhZCBhbGxvd2VkICAocGNpKSwgV3JpdGUgYWxsb3dlZCAodmIpICovCisJfSB0ZV9iaXRzOworI2RlZmluZSB0ZV9jYWNoZUJpdHMgdGVfYml0cy50Yl9jYWNoZUJpdHMKKyNkZWZpbmUgdGVfcnBuICAgICAgIHRlX2JpdHMudGJfcnBuCisjZGVmaW5lIHRlX3ZhbGlkICAgICB0ZV9iaXRzLnRiX3ZhbGlkCisjZGVmaW5lIHRlX2FsbGlvICAgICB0ZV9iaXRzLnRiX2FsbGlvCisjZGVmaW5lIHRlX2xwaW5kZXggICB0ZV9iaXRzLnRiX2xwaW5kZXgKKyNkZWZpbmUgdGVfcGNpd3IgICAgIHRlX2JpdHMudGJfcGNpd3IKKyNkZWZpbmUgdGVfcmR3ciAgICAgIHRlX2JpdHMudGJfcmR3cgorfTsKKworCitzdHJ1Y3QgaW9tbXVfdGFibGUgeworCXVuc2lnbmVkIGxvbmcgIGl0X2J1c25vOyAgICAgLyogQnVzIG51bWJlciB0aGlzIHRhYmxlIGJlbG9uZ3MgdG8gKi8KKwl1bnNpZ25lZCBsb25nICBpdF9zaXplOyAgICAgIC8qIFNpemUgb2YgaW9tbXUgdGFibGUgaW4gZW50cmllcyAqLworCXVuc2lnbmVkIGxvbmcgIGl0X29mZnNldDsgICAgLyogT2Zmc2V0IGludG8gZ2xvYmFsIHRhYmxlICovCisJdW5zaWduZWQgbG9uZyAgaXRfYmFzZTsgICAgICAvKiBtYXBwZWQgYWRkcmVzcyBvZiB0Y2UgdGFibGUgKi8KKwl1bnNpZ25lZCBsb25nICBpdF9pbmRleDsgICAgIC8qIHdoaWNoIGlvbW11IHRhYmxlIHRoaXMgaXMgKi8KKwl1bnNpZ25lZCBsb25nICBpdF90eXBlOyAgICAgIC8qIHR5cGU6IFBDSSBvciBWaXJ0dWFsIEJ1cyAqLworCXVuc2lnbmVkIGxvbmcgIGl0X2Jsb2Nrc2l6ZTsgLyogRW50cmllcyBpbiBlYWNoIGJsb2NrIChjYWNoZWxpbmUpICovCisJdW5zaWduZWQgbG9uZyAgaXRfaGludDsgICAgICAvKiBIaW50IGZvciBuZXh0IGFsbG9jICovCisJdW5zaWduZWQgbG9uZyAgaXRfbGFyZ2VoaW50OyAvKiBIaW50IGZvciBsYXJnZSBhbGxvY3MgKi8KKwl1bnNpZ25lZCBsb25nICBpdF9oYWxmcG9pbnQ7IC8qIEJyZWFraW5nIHBvaW50IGZvciBzbWFsbC9sYXJnZSBhbGxvY3MgKi8KKwlzcGlubG9ja190ICAgICBpdF9sb2NrOyAgICAgIC8qIFByb3RlY3RzIGl0X21hcCAqLworCXVuc2lnbmVkIGxvbmcgKml0X21hcDsgICAgICAgLyogQSBzaW1wbGUgYWxsb2NhdGlvbiBiaXRtYXAgZm9yIG5vdyAqLworfTsKKworI2lmZGVmIENPTkZJR19QUENfSVNFUklFUworc3RydWN0IGlvbW11X3RhYmxlX2NiIHsKKwl1bnNpZ25lZCBsb25nCWl0Y19idXNubzsJLyogQnVzIG51bWJlciBmb3IgdGhpcyB0Y2UgdGFibGUgKi8KKwl1bnNpZ25lZCBsb25nCWl0Y19zdGFydDsJLyogV2lsbCBiZSBOVUxMIGZvciBzZWNvbmRhcnkgKi8KKwl1bnNpZ25lZCBsb25nCWl0Y190b3RhbHNpemU7CS8qIFNpemUgKGluIHBhZ2VzKSBvZiB3aG9sZSB0YWJsZSAqLworCXVuc2lnbmVkIGxvbmcJaXRjX29mZnNldDsJLyogSW5kZXggaW50byByZWFsIHRjZSB0YWJsZSBvZiB0aGUKKwkJCQkJICAgc3RhcnQgb2Ygb3VyIHNlY3Rpb24gKi8KKwl1bnNpZ25lZCBsb25nCWl0Y19zaXplOwkvKiBTaXplIChpbiBwYWdlcykgb2Ygb3VyIHNlY3Rpb24gKi8KKwl1bnNpZ25lZCBsb25nCWl0Y19pbmRleDsJLyogSW5kZXggb2YgdGhpcyB0Y2UgdGFibGUgKi8KKwl1bnNpZ25lZCBzaG9ydAlpdGNfbWF4dGFibGVzOwkvKiBNYXggbnVtIG9mIHRhYmxlcyBmb3IgcGFydGl0aW9uICovCisJdW5zaWduZWQgY2hhcglpdGNfdmlydGJ1czsJLyogRmxhZyB0byBpbmRpY2F0ZSB2aXJ0dWFsIGJ1cyAqLworIAl1bnNpZ25lZCBjaGFyCWl0Y19zbG90bm87CS8qIElPQSBUY2UgU2xvdCBJbmRleCAqLworIAl1bnNpZ25lZCBjaGFyCWl0Y19yc3ZkWzRdOworfTsKKworZXh0ZXJuIHN0cnVjdCBpb21tdV90YWJsZSB2aW9fdGNlX3RhYmxlOyAgICAgIC8qIFRjZSB0YWJsZSBmb3IgdmlydHVhbCBidXMgKi8KKyNlbmRpZiAvKiBDT05GSUdfUFBDX0lTRVJJRVMgKi8KKworc3RydWN0IHNjYXR0ZXJsaXN0OworCisjaWZkZWYgQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNCisKKy8qIFdhbGtzIGFsbCBidXNlcyBhbmQgY3JlYXRlcyBpb21tdSB0YWJsZXMgKi8KK2V4dGVybiB2b2lkIGlvbW11X3NldHVwX3BTZXJpZXModm9pZCk7CitleHRlcm4gdm9pZCBpb21tdV9zZXR1cF91Myh2b2lkKTsKKworLyogRnJlZXMgdGFibGUgZm9yIGFuIGluZGl2aWR1YWwgZGV2aWNlIG5vZGUgKi8KK2V4dGVybiB2b2lkIGlvbW11X2ZyZWVfdGFibGUoc3RydWN0IGRldmljZV9ub2RlICpkbik7CisKKyNlbmRpZiAvKiBDT05GSUdfUFBDX01VTFRJUExBVEZPUk0gKi8KKworI2lmZGVmIENPTkZJR19QUENfUFNFUklFUworCisvKiBDcmVhdGVzIHRhYmxlIGZvciBhbiBpbmRpdmlkdWFsIGRldmljZSBub2RlICovCitleHRlcm4gdm9pZCBpb21tdV9kZXZub2RlX2luaXRfcFNlcmllcyhzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuKTsKKworI2VuZGlmIC8qIENPTkZJR19QUENfUFNFUklFUyAqLworCisjaWZkZWYgQ09ORklHX1BQQ19JU0VSSUVTCisKKy8qIFdhbGtzIGFsbCBidXNlcyBhbmQgY3JlYXRlcyBpb21tdSB0YWJsZXMgKi8KK2V4dGVybiB2b2lkIGlvbW11X3NldHVwX2lTZXJpZXModm9pZCk7CisKKy8qIEluaXRpYWxpemVzIHRhYmxlcyBmb3IgYmlvIGJ1c2VzICovCitleHRlcm4gdm9pZCBfX2luaXQgaW9tbXVfdmlvX2luaXQodm9pZCk7CisKK3N0cnVjdCBpU2VyaWVzX0RldmljZV9Ob2RlOworLyogQ3JlYXRlcyB0YWJsZSBmb3IgYW4gaW5kaXZpZHVhbCBkZXZpY2Ugbm9kZSAqLworZXh0ZXJuIHZvaWQgaW9tbXVfZGV2bm9kZV9pbml0X2lTZXJpZXMoc3RydWN0IGlTZXJpZXNfRGV2aWNlX05vZGUgKmRuKTsKKworI2VuZGlmIC8qIENPTkZJR19QUENfSVNFUklFUyAqLworCisvKiBJbml0aWFsaXplcyBhbiBpb21tdV90YWJsZSBiYXNlZCBpbiB2YWx1ZXMgc2V0IGluIHRoZSBwYXNzZWQtaW4KKyAqIHN0cnVjdHVyZQorICovCitleHRlcm4gc3RydWN0IGlvbW11X3RhYmxlICppb21tdV9pbml0X3RhYmxlKHN0cnVjdCBpb21tdV90YWJsZSAqIHRibCk7CisKK2V4dGVybiBpbnQgaW9tbXVfbWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGlvbW11X3RhYmxlICp0YmwsCisJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LCBpbnQgbmVsZW1zLAorCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pOworZXh0ZXJuIHZvaWQgaW9tbXVfdW5tYXBfc2coc3RydWN0IGlvbW11X3RhYmxlICp0YmwsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LAorCQlpbnQgbmVsZW1zLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pOworCitleHRlcm4gdm9pZCAqaW9tbXVfYWxsb2NfY29oZXJlbnQoc3RydWN0IGlvbW11X3RhYmxlICp0YmwsIHNpemVfdCBzaXplLAorCQlkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZmxhZyk7CitleHRlcm4gdm9pZCBpb21tdV9mcmVlX2NvaGVyZW50KHN0cnVjdCBpb21tdV90YWJsZSAqdGJsLCBzaXplX3Qgc2l6ZSwKKwkJdm9pZCAqdmFkZHIsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSk7CitleHRlcm4gZG1hX2FkZHJfdCBpb21tdV9tYXBfc2luZ2xlKHN0cnVjdCBpb21tdV90YWJsZSAqdGJsLCB2b2lkICp2YWRkciwKKwkJc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbik7CitleHRlcm4gdm9pZCBpb21tdV91bm1hcF9zaW5nbGUoc3RydWN0IGlvbW11X3RhYmxlICp0YmwsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKKwkJc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbik7CisKK2V4dGVybiB2b2lkIGlvbW11X2luaXRfZWFybHlfcFNlcmllcyh2b2lkKTsKK2V4dGVybiB2b2lkIGlvbW11X2luaXRfZWFybHlfaVNlcmllcyh2b2lkKTsKK2V4dGVybiB2b2lkIGlvbW11X2luaXRfZWFybHlfdTModm9pZCk7CisKK2V4dGVybiB2b2lkIHBjaV9pb21tdV9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgcGNpX2RpcmVjdF9pb21tdV9pbml0KHZvaWQpOworCitleHRlcm4gdm9pZCBhbGxvY191M19kYXJ0X3RhYmxlKHZvaWQpOworCisjZW5kaWYgLyogX0FTTV9JT01NVV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9pcGMuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L2lwYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0NmUzZDkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9pcGMuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvaXBjLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9pcGNidWYuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L2lwY2J1Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhMzkzYzgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9pcGNidWYuaApAQCAtMCwwICsxLDI4IEBACisjaWZuZGVmIF9fUFBDNjRfSVBDQlVGX0hfXworI2RlZmluZSBfX1BQQzY0X0lQQ0JVRl9IX18KKworLyoKKyAqIFRoZSBpcGM2NF9wZXJtIHN0cnVjdHVyZSBmb3IgdGhlIFBQQyBpcyBpZGVudGljYWwgdG8ga2Vybl9pcGNfcGVybQorICogYXMgd2UgaGF2ZSBhbHdheXMgaGFkIDMyLWJpdCBVSURzIGFuZCBHSURzIGluIHRoZSBrZXJuZWwuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCitzdHJ1Y3QgaXBjNjRfcGVybQoreworCV9fa2VybmVsX2tleV90CWtleTsKKwlfX2tlcm5lbF91aWRfdAl1aWQ7CisJX19rZXJuZWxfZ2lkX3QJZ2lkOworCV9fa2VybmVsX3VpZF90CWN1aWQ7CisJX19rZXJuZWxfZ2lkX3QJY2dpZDsKKwlfX2tlcm5lbF9tb2RlX3QJbW9kZTsKKwl1bnNpZ25lZCBpbnQJc2VxOworCXVuc2lnbmVkIGludAlfX3BhZDE7CisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDE7CisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDI7Cit9OworCisjZW5kaWYgLyogX19QUEM2NF9JUENCVUZfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9pcnEuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L2lycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3MDY3OGIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9pcnEuaApAQCAtMCwwICsxLDExNSBAQAorI2lmZGVmIF9fS0VSTkVMX18KKyNpZm5kZWYgX0FTTV9JUlFfSAorI2RlZmluZSBfQVNNX0lSUV9ICisKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisKKy8qCisgKiBNYXhpbXVtIG51bWJlciBvZiBpbnRlcnJ1cHQgc291cmNlcyB0aGF0IHdlIGNhbiBoYW5kbGUuCisgKi8KKyNkZWZpbmUgTlJfSVJRUwkJNTEyCisKKy8qIHRoaXMgbnVtYmVyIGlzIHVzZWQgd2hlbiBubyBpbnRlcnJ1cHQgaGFzIGJlZW4gYXNzaWduZWQgKi8KKyNkZWZpbmUgTk9fSVJRCQkJKC0xKQorCisvKgorICogVGhlc2UgY29uc3RhbnRzIGFyZSB1c2VkIGZvciBwYXNzaW5nIGluZm9ybWF0aW9uIGFib3V0IGludGVycnVwdAorICogc2lnbmFsIHBvbGFyaXR5IGFuZCBsZXZlbC9lZGdlIHNlbnNpbmcgdG8gdGhlIGxvdy1sZXZlbCBQSUMgY2hpcAorICogZHJpdmVycy4KKyAqLworI2RlZmluZSBJUlFfU0VOU0VfTUFTSwkJMHgxCisjZGVmaW5lIElSUV9TRU5TRV9MRVZFTAkJMHgxCS8qIGludGVycnVwdCBvbiBhY3RpdmUgbGV2ZWwgKi8KKyNkZWZpbmUgSVJRX1NFTlNFX0VER0UJCTB4MAkvKiBpbnRlcnJ1cHQgdHJpZ2dlcmVkIGJ5IGVkZ2UgKi8KKworI2RlZmluZSBJUlFfUE9MQVJJVFlfTUFTSwkweDIKKyNkZWZpbmUgSVJRX1BPTEFSSVRZX1BPU0lUSVZFCTB4MgkvKiBoaWdoIGxldmVsIG9yIGxvdy0+aGlnaCBlZGdlICovCisjZGVmaW5lIElSUV9QT0xBUklUWV9ORUdBVElWRQkweDAJLyogbG93IGxldmVsIG9yIGhpZ2gtPmxvdyBlZGdlICovCisKKyNkZWZpbmUgZ2V0X2lycV9kZXNjKGlycSkgKCZpcnFfZGVzY1soaXJxKV0pCisKKy8qIERlZmluZSBhIHdheSB0byBpdGVyYXRlIGFjcm9zcyBpcnFzLiAqLworI2RlZmluZSBmb3JfZWFjaF9pcnEoaSkgXAorCWZvciAoKGkpID0gMDsgKGkpIDwgTlJfSVJRUzsgKysoaSkpCisKKy8qIEludGVycnVwdCBudW1iZXJzIGFyZSB2aXJ0dWFsIGluIGNhc2UgdGhleSBhcmUgc3BhcnNlbHkKKyAqIGRpc3RyaWJ1dGVkIGJ5IHRoZSBoYXJkd2FyZS4KKyAqLworZXh0ZXJuIHVuc2lnbmVkIGludCB2aXJ0X2lycV90b19yZWFsX21hcFtOUl9JUlFTXTsKKworLyogQ3JlYXRlIGEgbWFwcGluZyBmb3IgYSByZWFsX2lycSBpZiBpdCBkb2Vzbid0IGFscmVhZHkgZXhpc3QuCisgKiBSZXR1cm4gdGhlIHZpcnR1YWwgaXJxIGFzIGEgY29udmVuaWVuY2UuCisgKi8KK2ludCB2aXJ0X2lycV9jcmVhdGVfbWFwcGluZyh1bnNpZ25lZCBpbnQgcmVhbF9pcnEpOwordm9pZCB2aXJ0X2lycV9pbml0KHZvaWQpOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB2aXJ0X2lycV90b19yZWFsKHVuc2lnbmVkIGludCB2aXJ0X2lycSkKK3sKKwlyZXR1cm4gdmlydF9pcnFfdG9fcmVhbF9tYXBbdmlydF9pcnFdOworfQorCitleHRlcm4gdW5zaWduZWQgaW50IHJlYWxfaXJxX3RvX3ZpcnRfc2xvd3BhdGgodW5zaWduZWQgaW50IHJlYWxfaXJxKTsKKworLyoKKyAqIEJlY2F1c2UgbWFueSBzeXN0ZW1zIGhhdmUgdHdvIG92ZXJsYXBwaW5nIG5hbWVzIHNwYWNlcyBmb3IKKyAqIGludGVycnVwdHMgKElTQSBhbmQgWElDUyBmb3IgZXhhbXBsZSksIGFuZCB0aGUgSVNBIGludGVycnVwdHMKKyAqIGhhdmUgaGlzdG9yaWNhbGx5IG5vdCBiZWVuIGVhc3kgdG8gcmVudW1iZXIsIHdlIGFsbG93IElTQQorICogaW50ZXJydXB0cyB0byB0YWtlIHZhbHVlcyAwIC0gMTUsIGFuZCBzaGlmdCB1cCB0aGUgcmVtYWluaW5nCisgKiBpbnRlcnJ1cHRzIGJ5IDB4MTAuCisgKi8KKyNkZWZpbmUgTlVNX0lTQV9JTlRFUlJVUFRTCTB4MTAKK2V4dGVybiBpbnQgX19pcnFfb2Zmc2V0X3ZhbHVlOworCitzdGF0aWMgaW5saW5lIGludCBpcnFfb2Zmc2V0X3VwKGludCBpcnEpCit7CisJcmV0dXJuKGlycSArIF9faXJxX29mZnNldF92YWx1ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGlycV9vZmZzZXRfZG93bihpbnQgaXJxKQoreworCXJldHVybihpcnEgLSBfX2lycV9vZmZzZXRfdmFsdWUpOworfQorCitzdGF0aWMgaW5saW5lIGludCBpcnFfb2Zmc2V0X3ZhbHVlKHZvaWQpCit7CisJcmV0dXJuIF9faXJxX29mZnNldF92YWx1ZTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IGlycV9jYW5vbmljYWxpemUoaW50IGlycSkKK3sKKwlyZXR1cm4gaXJxOworfQorCitleHRlcm4gaW50IGRpc3RyaWJ1dGVfaXJxczsKKworc3RydWN0IGlycWFjdGlvbjsKK3N0cnVjdCBwdF9yZWdzOworCisjaWZkZWYgQ09ORklHX0lSUVNUQUNLUworLyoKKyAqIFBlci1jcHUgc3RhY2tzIGZvciBoYW5kbGluZyBoYXJkIGFuZCBzb2Z0IGludGVycnVwdHMuCisgKi8KK2V4dGVybiBzdHJ1Y3QgdGhyZWFkX2luZm8gKmhhcmRpcnFfY3R4W05SX0NQVVNdOworZXh0ZXJuIHN0cnVjdCB0aHJlYWRfaW5mbyAqc29mdGlycV9jdHhbTlJfQ1BVU107CisKK2V4dGVybiB2b2lkIGlycV9jdHhfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIGNhbGxfZG9fc29mdGlycShzdHJ1Y3QgdGhyZWFkX2luZm8gKnRwKTsKK2V4dGVybiBpbnQgY2FsbF9oYW5kbGVfSVJRX2V2ZW50KGludCBpcnEsIHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkJc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uLCBzdHJ1Y3QgdGhyZWFkX2luZm8gKnRwKTsKKworI2RlZmluZSBfX0FSQ0hfSEFTX0RPX1NPRlRJUlEKKworI2Vsc2UKKyNkZWZpbmUgaXJxX2N0eF9pbml0KCkKKworI2VuZGlmIC8qIENPTkZJR19JUlFTVEFDS1MgKi8KKworI2VuZGlmIC8qIF9BU01fSVJRX0ggKi8KKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9rZGVidWcuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L2tkZWJ1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4ODYzNDIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9rZGVidWcuaApAQCAtMCwwICsxLDQzIEBACisjaWZuZGVmIF9QUEM2NF9LREVCVUdfSAorI2RlZmluZSBfUFBDNjRfS0RFQlVHX0ggMQorCisvKiBuZWFybHkgaWRlbnRpY2FsIHRvIHg4Nl82NC9pMzg2IGNvZGUgKi8KKworI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CisKK3N0cnVjdCBwdF9yZWdzOworCitzdHJ1Y3QgZGllX2FyZ3MgeworCXN0cnVjdCBwdF9yZWdzICpyZWdzOworCWNvbnN0IGNoYXIgKnN0cjsKKwlsb25nIGVycjsKKwlpbnQgdHJhcG5yOworCWludCBzaWducjsKK307CisKKy8qCisgICBOb3RlIC0geW91IHNob3VsZCBuZXZlciB1bnJlZ2lzdGVyIGJlY2F1c2UgdGhhdCBjYW4gcmFjZSB3aXRoIE5NSXMuCisgICBJZiB5b3UgcmVhbGx5IHdhbnQgdG8gZG8gaXQgZmlyc3QgdW5yZWdpc3RlciAtIHRoZW4gc3luY2hyb25pemVfa2VybmVsIC0KKyAgIHRoZW4gZnJlZS4KKyAqLworaW50IHJlZ2lzdGVyX2RpZV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTsKK2V4dGVybiBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnBwYzY0X2RpZV9jaGFpbjsKKworLyogR3Jvc3NseSBtaXNuYW1lZC4gKi8KK2VudW0gZGllX3ZhbCB7CisJRElFX09PUFMgPSAxLAorCURJRV9JQUJSX01BVENILAorCURJRV9EQUJSX01BVENILAorCURJRV9CUFQsCisJRElFX1NTVEVQLAorCURJRV9HUEYsCisJRElFX1BBR0VfRkFVTFQsCit9OworCitzdGF0aWMgaW5saW5lIGludCBub3RpZnlfZGllKGVudW0gZGllX3ZhbCB2YWwsY2hhciAqc3RyLHN0cnVjdCBwdF9yZWdzICpyZWdzLGxvbmcgZXJyLGludCB0cmFwLCBpbnQgc2lnKQoreworCXN0cnVjdCBkaWVfYXJncyBhcmdzID0geyAucmVncz1yZWdzLCAuc3RyPXN0ciwgLmVycj1lcnIsIC50cmFwbnI9dHJhcCwuc2lnbnI9c2lnIH07CisJcmV0dXJuIG5vdGlmaWVyX2NhbGxfY2hhaW4oJnBwYzY0X2RpZV9jaGFpbiwgdmFsLCAmYXJncyk7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQva2V5bGFyZ28uaCBiL2luY2x1ZGUvYXNtLXBwYzY0L2tleWxhcmdvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ3OGUzZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L2tleWxhcmdvLmgKQEAgLTAsMCArMSwyIEBACisjaW5jbHVkZSA8YXNtLXBwYy9rZXlsYXJnby5oPgorCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9rbWFwX3R5cGVzLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9rbWFwX3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQxNTc0NgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L2ttYXBfdHlwZXMuaApAQCAtMCwwICsxLDIzIEBACisjaWZkZWYgX19LRVJORUxfXworI2lmbmRlZiBfQVNNX0tNQVBfVFlQRVNfSAorI2RlZmluZSBfQVNNX0tNQVBfVFlQRVNfSAorCitlbnVtIGttX3R5cGUgeworCUtNX0JPVU5DRV9SRUFELAorCUtNX1NLQl9TVU5SUENfREFUQSwKKwlLTV9TS0JfREFUQV9TT0ZUSVJRLAorCUtNX1VTRVIwLAorCUtNX1VTRVIxLAorCUtNX0JJT19TUkNfSVJRLAorCUtNX0JJT19EU1RfSVJRLAorCUtNX1BURTAsCisJS01fUFRFMSwKKwlLTV9JUlEwLAorCUtNX0lSUTEsCisJS01fU09GVElSUTAsCisJS01fU09GVElSUTEsCQorCUtNX1RZUEVfTlIKK307CisKKyNlbmRpZgorI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L2twcm9iZXMuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L2twcm9iZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWI0NjhiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQva3Byb2Jlcy5oCkBAIC0wLDAgKzEsNjEgQEAKKyNpZm5kZWYgX0FTTV9LUFJPQkVTX0gKKyNkZWZpbmUgX0FTTV9LUFJPQkVTX0gKKy8qCisgKiAgS2VybmVsIFByb2JlcyAoS1Byb2JlcykKKyAqICBpbmNsdWRlL2FzbS1wcGM2NC9rcHJvYmVzLmgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqIENvcHlyaWdodCAoQykgSUJNIENvcnBvcmF0aW9uLCAyMDAyLCAyMDA0CisgKgorICogMjAwMi1PY3QJQ3JlYXRlZCBieSBWYW1zaSBLcmlzaG5hIFMgPHZhbXNpX2tyaXNobmFAaW4uaWJtLmNvbT4gS2VybmVsCisgKgkJUHJvYmVzIGluaXRpYWwgaW1wbGVtZW50YXRpb24gKCBpbmNsdWRlcyBzdWdnZXN0aW9ucyBmcm9tCisgKgkJUnVzdHkgUnVzc2VsbCkuCisgKiAyMDA0LU5vdglNb2RpZmllZCBmb3IgUFBDNjQgYnkgQW5hbnRoIE4gTWF2aW5ha2F5YW5haGFsbGkKKyAqCQk8YW5hbnRoQGluLmlibS5jb20+CisgKi8KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorCitzdHJ1Y3QgcHRfcmVnczsKKwordHlwZWRlZiB1bnNpZ25lZCBpbnQga3Byb2JlX29wY29kZV90OworI2RlZmluZSBCUkVBS1BPSU5UX0lOU1RSVUNUSU9OCTB4N2ZlMDAwMDgJLyogdHJhcCAqLworI2RlZmluZSBNQVhfSU5TTl9TSVpFIDEKKworI2RlZmluZSBJU19UVyhpbnN0cikJCSgoKGluc3RyKSAmIDB4ZmMwMDA3ZmUpID09IDB4N2MwMDAwMDgpCisjZGVmaW5lIElTX1REKGluc3RyKQkJKCgoaW5zdHIpICYgMHhmYzAwMDdmZSkgPT0gMHg3YzAwMDA4OCkKKyNkZWZpbmUgSVNfVERJKGluc3RyKQkJKCgoaW5zdHIpICYgMHhmYzAwMDAwMCkgPT0gMHgwODAwMDAwMCkKKyNkZWZpbmUgSVNfVFdJKGluc3RyKQkJKCgoaW5zdHIpICYgMHhmYzAwMDAwMCkgPT0gMHgwYzAwMDAwMCkKKworI2RlZmluZSBKUFJPQkVfRU5UUlkocGVudHJ5KQkoa3Byb2JlX29wY29kZV90ICopKChmdW5jX2Rlc2NyX3QgKilwZW50cnkpCisKKy8qIEFyY2hpdGVjdHVyZSBzcGVjaWZpYyBjb3B5IG9mIG9yaWdpbmFsIGluc3RydWN0aW9uICovCitzdHJ1Y3QgYXJjaF9zcGVjaWZpY19pbnNuIHsKKwkvKiBjb3B5IG9mIG9yaWdpbmFsIGluc3RydWN0aW9uICovCisJa3Byb2JlX29wY29kZV90IGluc25bTUFYX0lOU05fU0laRV07Cit9OworCisjaWZkZWYgQ09ORklHX0tQUk9CRVMKK2V4dGVybiBpbnQga3Byb2JlX2V4Y2VwdGlvbnNfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKKwkJCQkgICAgdW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKmRhdGEpOworI2Vsc2UJCQkJLyogIUNPTkZJR19LUFJPQkVTICovCitzdGF0aWMgaW5saW5lIGludCBrcHJvYmVfZXhjZXB0aW9uc19ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLAorCQkJCQkgICB1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqZGF0YSkKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorI2VuZGlmCQkJCS8qIF9BU01fS1BST0JFU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9saW5rYWdlLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9saW5rYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkxYzJkMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L2xpbmthZ2UuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19BU01fTElOS0FHRV9ICisjZGVmaW5lIF9fQVNNX0xJTktBR0VfSAorCisvKiBOb3RoaW5nIHRvIHNlZSBoZXJlLi4uICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvbG1iLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9sbWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmNiY2EyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvbG1iLmgKQEAgLTAsMCArMSw2MCBAQAorI2lmbmRlZiBfUFBDNjRfTE1CX0gKKyNkZWZpbmUgX1BQQzY0X0xNQl9ICisKKy8qCisgKiBEZWZpbml0aW9ucyBmb3IgdGFsa2luZyB0byB0aGUgT3BlbiBGaXJtd2FyZSBQUk9NIG9uCisgKiBQb3dlciBNYWNpbnRvc2ggY29tcHV0ZXJzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBCZXJnbmVyLCBJQk0gQ29ycC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8YXNtL3Byb20uaD4KKworI2RlZmluZSBNQVhfTE1CX1JFR0lPTlMgMTI4CisKKyNkZWZpbmUgTE1CX0FMTE9DX0FOWVdIRVJFCTAKKworc3RydWN0IGxtYl9wcm9wZXJ0eSB7CisJdW5zaWduZWQgbG9uZyBiYXNlOworCXVuc2lnbmVkIGxvbmcgcGh5c2Jhc2U7CisJdW5zaWduZWQgbG9uZyBzaXplOworfTsKKworc3RydWN0IGxtYl9yZWdpb24geworCXVuc2lnbmVkIGxvbmcgY250OworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwlzdHJ1Y3QgbG1iX3Byb3BlcnR5IHJlZ2lvbltNQVhfTE1CX1JFR0lPTlMrMV07Cit9OworCitzdHJ1Y3QgbG1iIHsKKwl1bnNpZ25lZCBsb25nIGRlYnVnOworCXVuc2lnbmVkIGxvbmcgcm1vX3NpemU7CisJc3RydWN0IGxtYl9yZWdpb24gbWVtb3J5OworCXN0cnVjdCBsbWJfcmVnaW9uIHJlc2VydmVkOworfTsKKworZXh0ZXJuIHN0cnVjdCBsbWIgbG1iOworCitleHRlcm4gdm9pZCBfX2luaXQgbG1iX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBfX2luaXQgbG1iX2FuYWx5emUodm9pZCk7CitleHRlcm4gbG9uZyBfX2luaXQgbG1iX2FkZCh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKK2V4dGVybiBsb25nIF9faW5pdCBsbWJfcmVzZXJ2ZSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9faW5pdCBsbWJfYWxsb2ModW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBfX2luaXQgbG1iX2FsbG9jX2Jhc2UodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywKKwkJCQkJICAgdW5zaWduZWQgbG9uZyk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBfX2luaXQgbG1iX3BoeXNfbWVtX3NpemUodm9pZCk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBfX2luaXQgbG1iX2VuZF9vZl9EUkFNKHZvaWQpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19pbml0IGxtYl9hYnNfdG9fcGh5cyh1bnNpZ25lZCBsb25nKTsKK2V4dGVybiB2b2lkIF9faW5pdCBsbWJfZW5mb3JjZV9tZW1vcnlfbGltaXQodm9pZCk7CisKK2V4dGVybiB2b2lkIGxtYl9kdW1wX2FsbCh2b2lkKTsKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW9faG9sZV9zdGFydDsKKworI2VuZGlmIC8qIF9QUEM2NF9MTUJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvbG9jYWwuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L2xvY2FsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzExYzUzMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L2xvY2FsLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2xvY2FsLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9scHBhY2EuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L2xwcGFjYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwNzY2YjUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9scHBhY2EuaApAQCAtMCwwICsxLDEzMiBAQAorLyoKKyAqIGxwcGFjYS5oCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgIE1pa2UgQ29ycmlnYW4gSUJNIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKi8KKyNpZm5kZWYgX0FTTV9MUFBBQ0FfSAorI2RlZmluZSBfQVNNX0xQUEFDQV9ICisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLwlUaGlzIGNvbnRyb2wgYmxvY2sgY29udGFpbnMgdGhlIGRhdGEgdGhhdCBpcyBzaGFyZWQgYmV0d2VlbiB0aGUKKy8vCWh5cGVydmlzb3IgKFBMSUMpIGFuZCB0aGUgT1MuCisvLworLy8KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCitzdHJ1Y3QgbHBwYWNhCit7CisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBDQUNIRV9MSU5FXzEgMHgwMDAwIC0gMHgwMDdGIENvbnRhaW5zIHJlYWQtb25seSBkYXRhCisvLyBOT1RFOiBUaGUgeER5blh5eiBmaWVsZHMgYXJlIGZpZWxkcyB0aGF0IHdpbGwgYmUgZHluYW1pY2FsbHkgY2hhbmdlZCBieQorLy8gUExJQyB3aGVuIHByZXBhcmluZyB0byBicmluZyBhIHByb2Nlc3NvciBvbmxpbmUgb3Igd2hlbiBkaXNwYXRjaGluZyBhCisvLyB2aXJ0dWFsIHByb2Nlc3NvciEKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwl1MzIJZGVzYzsJCQkvLyBFeWUgY2F0Y2hlciAweEQzOTdENzgxCXgwMC14MDMKKwl1MTYJc2l6ZTsJCQkvLyBTaXplIG9mIHRoaXMgc3RydWN0CQl4MDQteDA1CisJdTE2CXJlc2VydmVkMTsJCS8vIFJlc2VydmVkCQkJeDA2LXgwNworCXUxNglyZXNlcnZlZDI6MTQ7CQkvLyBSZXNlcnZlZAkJCXgwOC14MDkKKwl1OAlzaGFyZWRfcHJvYzoxOwkJLy8gU2hhcmVkIHByb2Nlc3NvciBpbmRpY2F0b3IJLi4uCisJdTgJc2Vjb25kYXJ5X3RocmVhZDoxOwkvLyBTZWNvbmRhcnkgdGhyZWFkIGluZGljYXRvcgkuLi4KKwl2b2xhdGlsZSB1OCBkeW5fcHJvY19zdGF0dXM6ODsJLy8gRHluYW1pYyBTdGF0dXMgb2YgdGhpcyBwcm9jCXgwQS14MEEKKwl1OAlzZWNvbmRhcnlfdGhyZWFkX2NvdW50OwkvLyBTZWNvbmRhcnkgdGhyZWFkIGNvdW50CXgwQi14MEIKKwl2b2xhdGlsZSB1MTYgZHluX2h2X3BoeXNfcHJvY19pbmRleDsvLyBEeW5hbWljIEhWIFBoeXNpY2FsIFByb2MgSW5kZXgwQy14MEQKKwl2b2xhdGlsZSB1MTYgZHluX2h2X2xvZ19wcm9jX2luZGV4Oy8vIER5bmFtaWMgSFYgTG9naWNhbCBQcm9jIEluZGV4eDBFLXgwRgorCXUzMglkZWNyX3ZhbDsgICAJCS8vIFZhbHVlIGZvciBEZWNyIHByb2dyYW1taW5nIAl4MTAteDEzCisJdTMyCXBtY192YWw7ICAgICAgIAkJLy8gVmFsdWUgZm9yIFBNQyByZWdzICAgICAgICAgCXgxNC14MTcKKwl2b2xhdGlsZSB1MzIgZHluX2h3X25vZGVfaWQ7CS8vIER5bmFtaWMgSGFyZHdhcmUgTm9kZSBpZAl4MTgteDFCCisJdm9sYXRpbGUgdTMyIGR5bl9od19wcm9jX2lkOwkvLyBEeW5hbWljIEhhcmR3YXJlIFByb2MgSWQJeDFDLXgxRgorCXZvbGF0aWxlIHUzMiBkeW5fcGlyOwkJLy8gRHluYW1pYyBQcm9jSWRSZWcgdmFsdWUJeDIwLXgyMworCXUzMglkc2VpX2RhdGE7ICAgICAgICAgICAJLy8gRFNFSSBkYXRhICAgICAgICAgICAgICAgICAgCXgyNC14MjcKKwl1NjQJc3ByZzM7ICAgICAgICAgICAgICAgCS8vIFNQUkczIHZhbHVlICAgICAgICAgICAgICAgIAl4MjgteDJGCisJdTgJcmVzZXJ2ZWQzWzgwXTsJCS8vIFJlc2VydmVkCQkJeDMwLXg3RgorCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBDQUNIRV9MSU5FXzIgMHgwMDgwIC0gMHgwMEZGIENvbnRhaW5zIGxvY2FsIHJlYWQtd3JpdGUgZGF0YQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCS8vIFRoaXMgRHdvcmQgY29udGFpbnMgYSBieXRlIGZvciBlYWNoIHR5cGUgb2YgaW50ZXJydXB0IHRoYXQgY2FuIG9jY3VyLgorCS8vIFRoZSBJUEkgaXMgYSBjb3VudCB3aGlsZSB0aGUgb3RoZXJzIGFyZSBqdXN0IGEgYmluYXJ5IDEgb3IgMC4KKwl1bmlvbiB7CisJCXU2NAlhbnlfaW50OworCQlzdHJ1Y3QgeworCQkJdTE2CXJlc2VydmVkOwkvLyBSZXNlcnZlZCAtIGNsZWFyZWQgYnkgI21wYXNtYmwKKwkJCXU4CXhpcnJfaW50OwkvLyBJbmRpY2F0ZXMgeFhpcnJWYWx1ZSBpcyB2YWxpZCBvciBJbW1lZCBJTworCQkJdTgJaXBpX2NudDsJLy8gSVBJIENvdW50CisJCQl1OAlkZWNyX2ludDsJLy8gREVDUiBpbnRlcnJ1cHQgb2NjdXJyZWQKKwkJCXU4CXBkY19pbnQ7CS8vIFBEQyBpbnRlcnJ1cHQgb2NjdXJyZWQKKwkJCXU4CXF1YW50dW1faW50OwkvLyBJbnRlcnJ1cHQgcXVhbnR1bSByZWFjaGVkCisJCQl1OAlvbGRfcGxpY19kZWZlcnJlZF9leHRfaW50OwkvLyBPbGQgUExJQyBoYXMgYSBkZWZlcnJlZCBYSVJSIHBlbmRpbmcKKwkJfSBmaWVsZHM7CisJfSBpbnRfZHdvcmQ7CisKKwkvLyBXaGVuZXZlciBhbnkgZmllbGRzIGluIHRoaXMgRHdvcmQgYXJlIHNldCB0aGVuIFBMSUMgd2lsbCBkZWZlciB0aGUKKwkvLyBwcm9jZXNzaW5nIG9mIGV4dGVybmFsIGludGVycnVwdHMuICBOb3RlIHRoYXQgUExJQyB3aWxsIHN0b3JlIHRoZQorCS8vIFhJUlIgZGlyZWN0bHkgaW50byB0aGUgeFhpcnJWYWx1ZSBmaWVsZCBzbyB0aGF0IGFub3RoZXIgWElSUiB3aWxsCisJLy8gbm90IGJlIHByZXNlbnRlZCB1bnRpbCB0aGlzIG9uZSBjbGVhcnMuICBUaGUgbGF5b3V0IG9mIHRoZSBsb3cKKwkvLyA0LWJ5dGVzIG9mIHRoaXMgRHdvcmQgaXMgdXB0byBTTElDIC0gUExJQyBqdXN0IGNoZWNrcyB3aGV0aGVyIHRoZQorCS8vIGVudGlyZSBEd29yZCBpcyB6ZXJvIG9yIG5vdC4gIEEgbm9uLXplcm8gdmFsdWUgaW4gdGhlIGxvdyBvcmRlcgorCS8vIDItYnl0ZXMgd2lsbCByZXN1bHQgaW4gU0xJQyBiZWluZyBncmFudGVkIHRoZSBoaWdoZXN0IHRocmVhZAorCS8vIHByaW9yaXR5IHVwb24gcmV0dXJuLiAgQSAwIHdpbGwgcmV0dXJuIHRvIFNMSUMgYXMgbWVkaXVtIHByaW9yaXR5LgorCXU2NAlwbGljX2RlZmVyX2ludHNfYXJlYTsJLy8gRW50aXJlIER3b3JkCisKKwkvLyBVc2VkIHRvIHBhc3MgdGhlIHJlYWwgU1JSMC8xIGZyb20gUExJQyB0byBTTElDIGFzIHdlbGwgYXMgdG8KKwkvLyBwYXNzIHRoZSB0YXJnZXQgU1JSMC8xIGZyb20gU0xJQyB0byBQTElDIG9uIGEgU2V0QXNyQW5kUmZpZC4KKwl1NjQJc2F2ZWRfc3JyMDsJCS8vIFNhdmVkIFNSUjAgICAgICAgICAgICAgICAgICAgeDEwLXgxNworCXU2NAlzYXZlZF9zcnIxOwkJLy8gU2F2ZWQgU1JSMSAgICAgICAgICAgICAgICAgICB4MTgteDFGCisKKwkvLyBVc2VkIHRvIHBhc3MgcGFybXMgZnJvbSB0aGUgT1MgdG8gUExJQyBmb3IgU2V0QXNyQW5kUmZpZAorCXU2NAlzYXZlZF9ncHIzOwkJLy8gU2F2ZWQgR1BSMyAgICAgICAgICAgICAgICAgICB4MjAteDI3CisJdTY0CXNhdmVkX2dwcjQ7CQkvLyBTYXZlZCBHUFI0ICAgICAgICAgICAgICAgICAgIHgyOC14MkYKKwl1NjQJc2F2ZWRfZ3ByNTsJCS8vIFNhdmVkIEdQUjUgICAgICAgICAgICAgICAgICAgeDMwLXgzNworCisJdTgJcmVzZXJ2ZWQ0OwkJLy8gUmVzZXJ2ZWQJCQl4MzgteDM4CisJdTgJY3B1Y3Rsc190YXNrX2F0dHJzOwkvLyBUYXNrIGF0dHJpYnV0ZXMgZm9yIGNwdWN0bHMgIHgzOS14MzkKKwl1OAlmcHJlZ3NfaW5fdXNlOwkJLy8gRlAgcmVncyBpbiB1c2UgICAgICAgICAgICAgICB4M0EteDNBCisJdTgJcG1jcmVnc19pbl91c2U7CQkvLyBQTUMgcmVncyBpbiB1c2UgICAgICAgICAgICAgIHgzQi14M0IKKwl2b2xhdGlsZSB1MzIgc2F2ZWRfZGVjcjsJLy8gU2F2ZWQgRGVjciBWYWx1ZSAgICAgICAgICAgICB4M0MteDNGCisJdm9sYXRpbGUgdTY0IGVtdWxhdGVkX3RpbWVfYmFzZTsvLyBFbXVsYXRlZCBUQiBmb3IgdGhpcyB0aHJlYWQgIHg0MC14NDcKKwl2b2xhdGlsZSB1NjQgY3VyX3BsaWNfbGF0ZW5jeTsJLy8gVW5hY2NvdW50ZWQgUExJQyBsYXRlbmN5ICAgICB4NDgteDRGCisJdTY0CXRvdF9wbGljX2xhdGVuY3k7CS8vIEFjY3VtdWxhdGVkIFBMSUMgbGF0ZW5jeSAgICAgeDUwLXg1NworCXU2NAl3YWl0X3N0YXRlX2N5Y2xlczsJLy8gV2FpdCBjeWNsZXMgZm9yIHRoaXMgcHJvYyAgICB4NTgteDVGCisJdTY0CWVuZF9vZl9xdWFudHVtOwkJLy8gVEIgYXQgZW5kIG9mIHF1YW50dW0gICAgICAgICB4NjAteDY3CisJdTY0CXBkY19zYXZlZF9zcHJnMTsJLy8gU2F2ZWQgU1BSRzEgZm9yIFBNQyBpbnQgICAgICB4NjgteDZGCisJdTY0CXBkY19zYXZlZF9zcnIwOwkJLy8gU2F2ZWQgU1JSMCBmb3IgUE1DIGludCAgICAgICB4NzAteDc3CisJdm9sYXRpbGUgdTMyIHZpcnR1YWxfZGVjcjsJLy8gVmlydHVhbCBERUNSIGZvciBzaGFyZWQgcHJvY3N4NzgteDdCCisJdTE2CXNsYl9jb3VudDsJCS8vICMgb2YgU0xCcyB0byBtYWludGFpbiAgICAgICAgeDdDLXg3RAorCXU4CWlkbGU7CQkJLy8gSW5kaWNhdGUgT1MgaXMgaWRsZSAgICAgICAgICB4N0UKKwl1OAlyZXNlcnZlZDU7CQkvLyBSZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgIHg3RgorCisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIENBQ0hFX0xJTkVfMyAweDAxMDAgLSAweDAwN0Y6IFRoaXMgbGluZSBpcyBzaGFyZWQgd2l0aCBvdGhlciBwcm9jZXNzb3JzCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJLy8gVGhpcyBpcyB0aGUgeWllbGRfY291bnQuICBBbiAib2RkIiB2YWx1ZSAobG93IGJpdCBvbikgbWVhbnMgdGhhdAorCS8vIHRoZSBwcm9jZXNzb3IgaXMgeWllbGRlZCAoZWl0aGVyIGJlY2F1c2Ugb2YgYW4gT1MgeWllbGQgb3IgYSBQTElDCisJLy8gcHJlZW1wdCkuICBBbiBldmVuIHZhbHVlIGltcGxpZXMgdGhhdCB0aGUgcHJvY2Vzc29yIGlzIGN1cnJlbnRseQorCS8vIGV4ZWN1dGluZy4KKwkvLyBOT1RFOiBUaGlzIHZhbHVlIHdpbGwgQUxXQVlTIGJlIHplcm8gZm9yIGRlZGljYXRlZCBwcm9jZXNzb3JzIGFuZAorCS8vIHdpbGwgTkVWRVIgYmUgemVybyBmb3Igc2hhcmVkIHByb2Nlc3NvcnMgKGllLCBpbml0aWFsaXplZCB0byBhIDEpLgorCXZvbGF0aWxlIHUzMiB5aWVsZF9jb3VudDsJLy8gUExJQyBpbmNyZW1lbnRzIGVhY2ggZGlzcGF0Y2h4MDAteDAzCisJdTgJcmVzZXJ2ZWQ2WzEyNF07CQkvLyBSZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgIHgwNC14N0YKKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gQ0FDSEVfTElORV80LTUgMHgwMTAwIC0gMHgwMUZGIENvbnRhaW5zIFBNQyBpbnRlcnJ1cHQgZGF0YQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCXU4CXBtY19zYXZlX2FyZWFbMjU2XTsJLy8gUE1DIGludGVycnVwdCBBcmVhICAgICAgICAgICB4MDAteEZGCit9OworCisjZW5kaWYgLyogX0FTTV9MUFBBQ0FfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvbWFjaGRlcC5oIGIvaW5jbHVkZS9hc20tcHBjNjQvbWFjaGRlcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkM2NkOWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9tYWNoZGVwLmgKQEAgLTAsMCArMSwxODUgQEAKKyNpZmRlZiBfX0tFUk5FTF9fCisjaWZuZGVmIF9QUEM2NF9NQUNIREVQX0gKKyNkZWZpbmUgX1BQQzY0X01BQ0hERVBfSAorCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKworI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorCitzdHJ1Y3QgcHRfcmVnczsKK3N0cnVjdCBwY2lfYnVzOwkKK3N0cnVjdCBkZXZpY2Vfbm9kZTsKK3N0cnVjdCBpb21tdV90YWJsZTsKK3N0cnVjdCBydGNfdGltZTsKK3N0cnVjdCBmaWxlOworCisjaWZkZWYgQ09ORklHX1NNUAorc3RydWN0IHNtcF9vcHNfdCB7CisJdm9pZCAgKCptZXNzYWdlX3Bhc3MpKGludCB0YXJnZXQsIGludCBtc2cpOworCWludCAgICgqcHJvYmUpKHZvaWQpOworCXZvaWQgICgqa2lja19jcHUpKGludCBucik7CisJdm9pZCAgKCpzZXR1cF9jcHUpKGludCBucik7CisJdm9pZCAgKCp0YWtlX3RpbWViYXNlKSh2b2lkKTsKKwl2b2lkICAoKmdpdmVfdGltZWJhc2UpKHZvaWQpOworCWludCAgICgqY3B1X2VuYWJsZSkodW5zaWduZWQgaW50IG5yKTsKKwlpbnQgICAoKmNwdV9kaXNhYmxlKSh2b2lkKTsKKwl2b2lkICAoKmNwdV9kaWUpKHVuc2lnbmVkIGludCBucik7CisJaW50ICAgKCpjcHVfYm9vdGFibGUpKHVuc2lnbmVkIGludCBucik7Cit9OworI2VuZGlmCisKK3N0cnVjdCBtYWNoZGVwX2NhbGxzIHsKKwl2b2lkICAgICAgICAgICAgKCpocHRlX2ludmFsaWRhdGUpKHVuc2lnbmVkIGxvbmcgc2xvdCwKKwkJCQkJICAgdW5zaWduZWQgbG9uZyB2YSwKKwkJCQkJICAgaW50IGxhcmdlLAorCQkJCQkgICBpbnQgbG9jYWwpOworCWxvbmcJCSgqaHB0ZV91cGRhdGVwcCkodW5zaWduZWQgbG9uZyBzbG90LCAKKwkJCQkJIHVuc2lnbmVkIGxvbmcgbmV3cHAsIAorCQkJCQkgdW5zaWduZWQgbG9uZyB2YSwKKwkJCQkJIGludCBsYXJnZSwKKwkJCQkJIGludCBsb2NhbCk7CisJdm9pZCAgICAgICAgICAgICgqaHB0ZV91cGRhdGVib2x0ZWRwcCkodW5zaWduZWQgbG9uZyBuZXdwcCwgCisJCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGVhKTsKKwlsb25nCQkoKmhwdGVfaW5zZXJ0KSh1bnNpZ25lZCBsb25nIGhwdGVfZ3JvdXAsCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgdmEsCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgcHJwbiwKKwkJCQkgICAgICAgaW50IHNlY29uZGFyeSwgCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgaHB0ZWZsYWdzLCAKKwkJCQkgICAgICAgaW50IGJvbHRlZCwKKwkJCQkgICAgICAgaW50IGxhcmdlKTsKKwlsb25nCQkoKmhwdGVfcmVtb3ZlKSh1bnNpZ25lZCBsb25nIGhwdGVfZ3JvdXApOworCXZvaWQJCSgqZmx1c2hfaGFzaF9yYW5nZSkodW5zaWduZWQgbG9uZyBjb250ZXh0LAorCQkJCQkgICAgdW5zaWduZWQgbG9uZyBudW1iZXIsCisJCQkJCSAgICBpbnQgbG9jYWwpOworCS8qIHNwZWNpYWwgZm9yIGtleGVjLCB0byBiZSBjYWxsZWQgaW4gcmVhbCBtb2RlLCBsaW5hciBtYXBwaW5nIGlzCisJICogZGVzdHJveWVkIGFzIHdlbGwgKi8KKwl2b2lkCQkoKmhwdGVfY2xlYXJfYWxsKSh2b2lkKTsKKworCXZvaWQJCSgqdGNlX2J1aWxkKShzdHJ1Y3QgaW9tbXVfdGFibGUgKiB0YmwsCisJCQkJICAgICBsb25nIGluZGV4LAorCQkJCSAgICAgbG9uZyBucGFnZXMsCisJCQkJICAgICB1bnNpZ25lZCBsb25nIHVhZGRyLAorCQkJCSAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKTsKKwl2b2lkCQkoKnRjZV9mcmVlKShzdHJ1Y3QgaW9tbXVfdGFibGUgKnRibCwKKwkJCQkgICAgbG9uZyBpbmRleCwKKwkJCQkgICAgbG9uZyBucGFnZXMpOworCXZvaWQJCSgqdGNlX2ZsdXNoKShzdHJ1Y3QgaW9tbXVfdGFibGUgKnRibCk7CisJdm9pZAkJKCppb21tdV9kZXZfc2V0dXApKHN0cnVjdCBwY2lfZGV2ICpkZXYpOworCXZvaWQJCSgqaW9tbXVfYnVzX3NldHVwKShzdHJ1Y3QgcGNpX2J1cyAqYnVzKTsKKworCWludAkJKCpwcm9iZSkoaW50IHBsYXRmb3JtKTsKKwl2b2lkCQkoKnNldHVwX2FyY2gpKHZvaWQpOworCXZvaWQJCSgqaW5pdF9lYXJseSkodm9pZCk7CisJLyogT3B0aW9uYWwsIG1heSBiZSBOVUxMLiAqLworCXZvaWQJCSgqZ2V0X2NwdWluZm8pKHN0cnVjdCBzZXFfZmlsZSAqbSk7CisKKwl2b2lkCQkoKmluaXRfSVJRKSh2b2lkKTsKKwlpbnQJCSgqZ2V0X2lycSkoc3RydWN0IHB0X3JlZ3MgKik7CisKKwkvKiBQQ0kgc3R1ZmYgKi8KKwl2b2lkCQkoKnBjaWJpb3NfZml4dXApKHZvaWQpOworCisJdm9pZAkJKCpyZXN0YXJ0KShjaGFyICpjbWQpOworCXZvaWQJCSgqcG93ZXJfb2ZmKSh2b2lkKTsKKwl2b2lkCQkoKmhhbHQpKHZvaWQpOworCXZvaWQJCSgqcGFuaWMpKGNoYXIgKnN0cik7CisJdm9pZAkJKCpjcHVfZGllKSh2b2lkKTsKKworCWludAkJKCpzZXRfcnRjX3RpbWUpKHN0cnVjdCBydGNfdGltZSAqKTsKKwl2b2lkCQkoKmdldF9ydGNfdGltZSkoc3RydWN0IHJ0Y190aW1lICopOworCXZvaWQJCSgqZ2V0X2Jvb3RfdGltZSkoc3RydWN0IHJ0Y190aW1lICopOworCisJdm9pZAkJKCpjYWxpYnJhdGVfZGVjcikodm9pZCk7CisKKwl2b2lkCQkoKnByb2dyZXNzKShjaGFyICosIHVuc2lnbmVkIHNob3J0KTsKKworCS8qIERlYnVnIGludGVyZmFjZS4gIExvdyBsZXZlbCBJL08gdG8gc29tZSB0ZXJtaW5hbCBkZXZpY2UgKi8KKwl2b2lkCQkoKnVkYmdfcHV0YykodW5zaWduZWQgY2hhciBjKTsKKwl1bnNpZ25lZCBjaGFyCSgqdWRiZ19nZXRjKSh2b2lkKTsKKwlpbnQJCSgqdWRiZ19nZXRjX3BvbGwpKHZvaWQpOworCisJLyogSW50ZXJmYWNlIGZvciBwbGF0Zm9ybSBlcnJvciBsb2dnaW5nICovCisJdm9pZCAJCSgqbG9nX2Vycm9yKShjaGFyICpidWYsIHVuc2lnbmVkIGludCBlcnJfdHlwZSwgaW50IGZhdGFsKTsKKworCXNzaXplX3QJCSgqbnZyYW1fd3JpdGUpKGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKmluZGV4KTsKKwlzc2l6ZV90CQkoKm52cmFtX3JlYWQpKGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKmluZGV4KTsJCisJc3NpemVfdAkJKCpudnJhbV9zaXplKSh2b2lkKTsJCQorCWludAkJKCpudnJhbV9zeW5jKSh2b2lkKTsKKworCS8qIEV4Y2VwdGlvbiBoYW5kbGVycyAqLworCXZvaWQJCSgqc3lzdGVtX3Jlc2V0X2V4Y2VwdGlvbikoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCWludCAJCSgqbWFjaGluZV9jaGVja19leGNlcHRpb24pKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworCS8qIE1vdGhlcmJvYXJkL2NoaXBzZXQgZmVhdHVyZXMuIFRoaXMgaXMgYSBraW5kIG9mIGdlbmVyYWwgcHVycG9zZQorCSAqIGhvb2sgdXNlZCB0byBjb250cm9sIHNvbWUgbWFjaGluZSBzcGVjaWZpYyBmZWF0dXJlcyAobGlrZSByZXNldAorCSAqIGxpbmVzLCBjaGlwIHBvd2VyIGNvbnRyb2wsIGV0Yy4uLikuCisJICovCisJbG9uZwkgCSgqZmVhdHVyZV9jYWxsKSh1bnNpZ25lZCBpbnQgZmVhdHVyZSwgLi4uKTsKKworCS8qIENoZWNrIGF2YWlsYWJpbGl0eSBvZiBsZWdhY3kgZGV2aWNlcyBsaWtlIGk4MDQyICovCisJaW50IAkJKCpjaGVja19sZWdhY3lfaW9wb3J0KSh1bnNpZ25lZCBpbnQgYmFzZXBvcnQpOworCisJLyogR2V0IGxlZ2FjeSBQQ0kvSURFIGludGVycnVwdCBtYXBwaW5nICovIAorCWludAkJKCpwY2lfZ2V0X2xlZ2FjeV9pZGVfaXJxKShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgY2hhbm5lbCk7CisJCisJLyogR2V0IGFjY2VzcyBwcm90ZWN0aW9uIGZvciAvZGV2L21lbSAqLworCXBncHJvdF90CSgqcGh5c19tZW1fYWNjZXNzX3Byb3QpKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCQkJdW5zaWduZWQgbG9uZyBvZmZzZXQsCisJCQkJCQl1bnNpZ25lZCBsb25nIHNpemUsCisJCQkJCQlwZ3Byb3RfdCB2bWFfcHJvdCk7CisKK307CisKK2V4dGVybiBzdHJ1Y3QgbWFjaGRlcF9jYWxscyBwcGNfbWQ7CitleHRlcm4gY2hhciBjbWRfbGluZVtDT01NQU5EX0xJTkVfU0laRV07CisKKyNpZmRlZiBDT05GSUdfUFBDX1BNQUMKKy8qCisgKiBQb3dlciBtYWNpbnRvc2hlcyBoYXZlIGVpdGhlciBhIENVREEsIFBNVSBvciBTTVUgY29udHJvbGxpbmcKKyAqIHN5c3RlbSByZXNldCwgcG93ZXIsIE5WUkFNLCBSVEMuCisgKi8KK3R5cGVkZWYgZW51bSBzeXNfY3RybGVyX2tpbmQgeworCVNZU19DVFJMRVJfVU5LTk9XTiA9IDAsCisJU1lTX0NUUkxFUl9DVURBID0gMSwKKwlTWVNfQ1RSTEVSX1BNVSA9IDIsCisJU1lTX0NUUkxFUl9TTVUgPSAzLAorfSBzeXNfY3RybGVyX3Q7CitleHRlcm4gc3lzX2N0cmxlcl90IHN5c19jdHJsZXI7CisKKyNlbmRpZiAvKiBDT05GSUdfUFBDX1BNQUMgKi8KKworCisKKy8qIEZ1bmN0aW9ucyB0byBwcm9kdWNlIGNvZGVzIG9uIHRoZSBsZWRzLgorICogVGhlIFNSQyBjb2RlIHNob3VsZCBiZSB1bmlxdWUgZm9yIHRoZSBtZXNzYWdlIGNhdGVnb3J5IGFuZCBzaG91bGQKKyAqIGJlIGxpbWl0ZWQgdG8gdGhlIGxvd2VyIDI0IGJpdHMgKHRoZSB1cHBlciA4IGFyZSBzZXQgYnkgdGhlc2UgZnVuY3MpLAorICogYW5kIChmb3IgYm9vdCAmIGR1bXApIHNob3VsZCBiZSBzb3J0ZWQgbnVtZXJpY2FsbHkgaW4gdGhlIG9yZGVyCisgKiB0aGUgZXZlbnRzIG9jY3VyLgorICovCisvKiBQcmludCBhIGJvb3QgcHJvZ3Jlc3MgbWVzc2FnZS4gKi8KK3ZvaWQgcHBjNjRfYm9vdF9tc2codW5zaWduZWQgaW50IHNyYywgY29uc3QgY2hhciAqbXNnKTsKKy8qIFByaW50IGEgdGVybWluYXRpb24gbWVzc2FnZSAocHJpbnQgb25seSAtLSBkb2VzIG5vdCBzdG9wIHRoZSBrZXJuZWwpICovCit2b2lkIHBwYzY0X3Rlcm1pbmF0ZV9tc2codW5zaWduZWQgaW50IHNyYywgY29uc3QgY2hhciAqbXNnKTsKKy8qIFByaW50IHNvbWV0aGluZyB0aGF0IG5lZWRzIGF0dGVudGlvbiAoZGV2aWNlIGVycm9yLCBldGMpICovCit2b2lkIHBwYzY0X2F0dGVudGlvbl9tc2codW5zaWduZWQgaW50IHNyYywgY29uc3QgY2hhciAqbXNnKTsKKy8qIFByaW50IGEgZHVtcCBwcm9ncmVzcyBtZXNzYWdlLiAqLwordm9pZCBwcGM2NF9kdW1wX21zZyh1bnNpZ25lZCBpbnQgc3JjLCBjb25zdCBjaGFyICptc2cpOworCitzdGF0aWMgaW5saW5lIHZvaWQgbG9nX2Vycm9yKGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50IGVycl90eXBlLCBpbnQgZmF0YWwpCit7CisJaWYgKHBwY19tZC5sb2dfZXJyb3IpCisJCXBwY19tZC5sb2dfZXJyb3IoYnVmLCBlcnJfdHlwZSwgZmF0YWwpOworfQorCisjZW5kaWYgLyogX1BQQzY0X01BQ0hERVBfSCAqLworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L21hY2lvLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9tYWNpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzMDI4YjMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9tYWNpby5oCkBAIC0wLDAgKzEsMiBAQAorI2luY2x1ZGUgPGFzbS1wcGMvbWFjaW8uaD4KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvbWMxNDY4MThydGMuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L21jMTQ2ODE4cnRjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjcxM2UxYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L21jMTQ2ODE4cnRjLmgKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIE1hY2hpbmUgZGVwZW5kZW50IGFjY2VzcyBmdW5jdGlvbnMgZm9yIFJUQyByZWdpc3RlcnMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2lmbmRlZiBfX0FTTV9QUEM2NF9NQzE0NjgxOFJUQ19ICisjZGVmaW5lIF9fQVNNX1BQQzY0X01DMTQ2ODE4UlRDX0gKKworI2luY2x1ZGUgPGFzbS9pby5oPgorCisjaWZuZGVmIFJUQ19QT1JUCisjZGVmaW5lIFJUQ19QT1JUKHgpCSgweDcwICsgKHgpKQorI2RlZmluZSBSVENfQUxXQVlTX0JDRAkxCS8qIFJUQyBvcGVyYXRlcyBpbiBiaW5hcnkgbW9kZSAqLworI2VuZGlmCisKKy8qCisgKiBUaGUgeWV0IHN1cHBvcnRlZCBtYWNoaW5lcyBhbGwgYWNjZXNzIHRoZSBSVEMgaW5kZXggcmVnaXN0ZXIgdmlhCisgKiBhbiBJU0EgcG9ydCBhY2Nlc3MgYnV0IHRoZSB3YXkgdG8gYWNjZXNzIHRoZSBkYXRlIHJlZ2lzdGVyIGRpZmZlcnMgLi4uCisgKi8KKyNkZWZpbmUgQ01PU19SRUFEKGFkZHIpICh7IFwKK291dGJfcCgoYWRkciksUlRDX1BPUlQoMCkpOyBcCitpbmJfcChSVENfUE9SVCgxKSk7IFwKK30pCisjZGVmaW5lIENNT1NfV1JJVEUodmFsLCBhZGRyKSAoeyBcCitvdXRiX3AoKGFkZHIpLFJUQ19QT1JUKDApKTsgXAorb3V0Yl9wKCh2YWwpLFJUQ19QT1JUKDEpKTsgXAorfSkKKworI2VuZGlmIC8qIF9fQVNNX1BQQzY0X01DMTQ2ODE4UlRDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L21lbW9yeS5oIGIvaW5jbHVkZS9hc20tcHBjNjQvbWVtb3J5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZlMDlmYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L21lbW9yeS5oCkBAIC0wLDAgKzEsNTkgQEAKKyNpZm5kZWYgX0FTTV9QUEM2NF9NRU1PUllfSF8gCisjZGVmaW5lIF9BU01fUFBDNjRfTUVNT1JZX0hfIAorCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKy8qCisgKiBBcmd1YWJseSB0aGUgYml0b3BzIGFuZCAqeGNoZyBvcGVyYXRpb25zIGRvbid0IGltcGx5IGFueSBtZW1vcnkgYmFycmllcgorICogb3IgU01QIG9yZGVyaW5nLCBidXQgaW4gZmFjdCBhIGxvdCBvZiBkcml2ZXJzIGV4cGVjdCB0aGVtIHRvIGltcGx5CisgKiBib3RoLCBzaW5jZSB0aGV5IGRvIG9uIHg4NiBjcHVzLgorICovCisjaWZkZWYgQ09ORklHX1NNUAorI2RlZmluZSBFSUVJT19PTl9TTVAJImVpZWlvXG4iCisjZGVmaW5lIElTWU5DX09OX1NNUAkiXG5cdGlzeW5jIgorI2Vsc2UKKyNkZWZpbmUgRUlFSU9fT05fU01QCisjZGVmaW5lIElTWU5DX09OX1NNUAorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBlaWVpbyh2b2lkKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fICgiZWllaW8iIDogOiA6ICJtZW1vcnkiKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGlzeW5jKHZvaWQpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJpc3luYyIgOiA6IDogIm1lbW9yeSIpOworfQorCisjaWZkZWYgQ09ORklHX1NNUAorI2RlZmluZSBlaWVpb19vbl9zbXAoKQllaWVpbygpCisjZGVmaW5lIGlzeW5jX29uX3NtcCgpCWlzeW5jKCkKKyNlbHNlCisjZGVmaW5lIGVpZWlvX29uX3NtcCgpCV9fYXNtX18gX192b2xhdGlsZV9fKCIiOiA6IDoibWVtb3J5IikKKyNkZWZpbmUgaXN5bmNfb25fc21wKCkJX19hc21fXyBfX3ZvbGF0aWxlX18oIiI6IDogOiJtZW1vcnkiKQorI2VuZGlmCisKKy8qIE1hY3JvcyBmb3IgYWRqdXN0aW5nIHRocmVhZCBwcmlvcml0eSAoaGFyZHdhcmUgbXVsdGktdGhyZWFkaW5nKSAqLworI2RlZmluZSBITVRfdmVyeV9sb3coKSAgICBhc20gdm9sYXRpbGUoIm9yIDMxLDMxLDMxICAgIyB2ZXJ5IGxvdyBwcmlvcml0eSIpCisjZGVmaW5lIEhNVF9sb3coKQlhc20gdm9sYXRpbGUoIm9yIDEsMSwxCQkjIGxvdyBwcmlvcml0eSIpCisjZGVmaW5lIEhNVF9tZWRpdW1fbG93KCkgIGFzbSB2b2xhdGlsZSgib3IgNiw2LDYgICAgICAjIG1lZGl1bSBsb3cgcHJpb3JpdHkiKQorI2RlZmluZSBITVRfbWVkaXVtKCkJYXNtIHZvbGF0aWxlKCJvciAyLDIsMgkJIyBtZWRpdW0gcHJpb3JpdHkiKQorI2RlZmluZSBITVRfbWVkaXVtX2hpZ2goKSBhc20gdm9sYXRpbGUoIm9yIDUsNSw1ICAgICAgIyBtZWRpdW0gaGlnaCBwcmlvcml0eSIpCisjZGVmaW5lIEhNVF9oaWdoKCkJYXNtIHZvbGF0aWxlKCJvciAzLDMsMwkJIyBoaWdoIHByaW9yaXR5IikKKworI2RlZmluZSBITVRfVkVSWV9MT1cgICAgIlx0b3IgICAzMSwzMSwzMSAgICAgICAgIyB2ZXJ5IGxvdyBwcmlvcml0eVxuIgorI2RlZmluZSBITVRfTE9XCQkiXHRvcgkxLDEsMQkJIyBsb3cgcHJpb3JpdHlcbiIKKyNkZWZpbmUgSE1UX01FRElVTV9MT1cgICJcdG9yICAgNiw2LDYgICAgICAgICAgICMgbWVkaXVtIGxvdyBwcmlvcml0eVxuIgorI2RlZmluZSBITVRfTUVESVVNCSJcdG9yCTIsMiwyCQkjIG1lZGl1bSBwcmlvcml0eVxuIgorI2RlZmluZSBITVRfTUVESVVNX0hJR0ggIlx0b3IgICA1LDUsNSAgICAgICAgICAgIyBtZWRpdW0gaGlnaCBwcmlvcml0eVxuIgorI2RlZmluZSBITVRfSElHSAkiXHRvcgkzLDMsMwkJIyBoaWdoIHByaW9yaXR5XG4iCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvbW1hbi5oIGIvaW5jbHVkZS9hc20tcHBjNjQvbW1hbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0ZjkzNDQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9tbWFuLmgKQEAgLTAsMCArMSw1MiBAQAorI2lmbmRlZiBfX1BQQzY0X01NQU5fSF9fCisjZGVmaW5lIF9fUFBDNjRfTU1BTl9IX18KKworLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2RlZmluZSBQUk9UX1JFQUQJMHgxCQkvKiBwYWdlIGNhbiBiZSByZWFkICovCisjZGVmaW5lIFBST1RfV1JJVEUJMHgyCQkvKiBwYWdlIGNhbiBiZSB3cml0dGVuICovCisjZGVmaW5lIFBST1RfRVhFQwkweDQJCS8qIHBhZ2UgY2FuIGJlIGV4ZWN1dGVkICovCisjZGVmaW5lIFBST1RfU0VNCTB4OAkJLyogcGFnZSBtYXkgYmUgdXNlZCBmb3IgYXRvbWljIG9wcyAqLworI2RlZmluZSBQUk9UX05PTkUJMHgwCQkvKiBwYWdlIGNhbiBub3QgYmUgYWNjZXNzZWQgKi8KKyNkZWZpbmUgUFJPVF9HUk9XU0RPV04JMHgwMTAwMDAwMAkvKiBtcHJvdGVjdCBmbGFnOiBleHRlbmQgY2hhbmdlIHRvIHN0YXJ0IG9mIGdyb3dzZG93biB2bWEgKi8KKyNkZWZpbmUgUFJPVF9HUk9XU1VQCTB4MDIwMDAwMDAJLyogbXByb3RlY3QgZmxhZzogZXh0ZW5kIGNoYW5nZSB0byBlbmQgb2YgZ3Jvd3N1cCB2bWEgKi8KKworI2RlZmluZSBNQVBfU0hBUkVECTB4MDEJCS8qIFNoYXJlIGNoYW5nZXMgKi8KKyNkZWZpbmUgTUFQX1BSSVZBVEUJMHgwMgkJLyogQ2hhbmdlcyBhcmUgcHJpdmF0ZSAqLworI2RlZmluZSBNQVBfVFlQRQkweDBmCQkvKiBNYXNrIGZvciB0eXBlIG9mIG1hcHBpbmcgKi8KKyNkZWZpbmUgTUFQX0ZJWEVECTB4MTAJCS8qIEludGVycHJldCBhZGRyIGV4YWN0bHkgKi8KKyNkZWZpbmUgTUFQX0FOT05ZTU9VUwkweDIwCQkvKiBkb24ndCB1c2UgYSBmaWxlICovCisjZGVmaW5lIE1BUF9SRU5BTUUgICAgICBNQVBfQU5PTllNT1VTICAgLyogSW4gU3VuT1MgdGVybWlub2xvZ3kgKi8KKyNkZWZpbmUgTUFQX05PUkVTRVJWRSAgIDB4NDAgICAgICAgICAgICAvKiBkb24ndCByZXNlcnZlIHN3YXAgcGFnZXMgKi8KKyNkZWZpbmUgTUFQX0xPQ0tFRAkweDgwCisKKyNkZWZpbmUgTUFQX0dST1dTRE9XTgkweDAxMDAJCS8qIHN0YWNrLWxpa2Ugc2VnbWVudCAqLworI2RlZmluZSBNQVBfREVOWVdSSVRFCTB4MDgwMAkJLyogRVRYVEJTWSAqLworI2RlZmluZSBNQVBfRVhFQ1VUQUJMRQkweDEwMDAJCS8qIG1hcmsgaXQgYXMgYW4gZXhlY3V0YWJsZSAqLworCisjZGVmaW5lIE1TX0FTWU5DCTEJCS8qIHN5bmMgbWVtb3J5IGFzeW5jaHJvbm91c2x5ICovCisjZGVmaW5lIE1TX0lOVkFMSURBVEUJMgkJLyogaW52YWxpZGF0ZSB0aGUgY2FjaGVzICovCisjZGVmaW5lIE1TX1NZTkMJCTQJCS8qIHN5bmNocm9ub3VzIG1lbW9yeSBzeW5jICovCisKKyNkZWZpbmUgTUNMX0NVUlJFTlQgICAgIDB4MjAwMCAgICAgICAgICAvKiBsb2NrIGFsbCBjdXJyZW50bHkgbWFwcGVkIHBhZ2VzICovCisjZGVmaW5lIE1DTF9GVVRVUkUgICAgICAweDQwMDAgICAgICAgICAgLyogbG9jayBhbGwgYWRkaXRpb25zIHRvIGFkZHJlc3Mgc3BhY2UgKi8KKworI2RlZmluZSBNQVBfUE9QVUxBVEUJMHg4MDAwCQkvKiBwb3B1bGF0ZSAocHJlZmF1bHQpIHBhZ2V0YWJsZXMgKi8KKyNkZWZpbmUgTUFQX05PTkJMT0NLCTB4MTAwMDAJCS8qIGRvIG5vdCBibG9jayBvbiBJTyAqLworCisjZGVmaW5lIE1BRFZfTk9STUFMCTB4MAkJLyogZGVmYXVsdCBwYWdlLWluIGJlaGF2aW9yICovCisjZGVmaW5lIE1BRFZfUkFORE9NCTB4MQkJLyogcGFnZS1pbiBtaW5pbXVtIHJlcXVpcmVkICovCisjZGVmaW5lIE1BRFZfU0VRVUVOVElBTAkweDIJCS8qIHJlYWQtYWhlYWQgYWdncmVzc2l2ZWx5ICovCisjZGVmaW5lIE1BRFZfV0lMTE5FRUQJMHgzCQkvKiBwcmUtZmF1bHQgcGFnZXMgKi8KKyNkZWZpbmUgTUFEVl9ET05UTkVFRAkweDQJCS8qIGRpc2NhcmQgdGhlc2UgcGFnZXMgKi8KKworLyogY29tcGF0aWJpbGl0eSBmbGFncyAqLworI2RlZmluZSBNQVBfQU5PTglNQVBfQU5PTllNT1VTCisjZGVmaW5lIE1BUF9GSUxFCTAKKworI2VuZGlmIC8qIF9fUFBDNjRfTU1BTl9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L21tdS5oIGIvaW5jbHVkZS9hc20tcHBjNjQvbW11LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg4OTg3ZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L21tdS5oCkBAIC0wLDAgKzEsMjQyIEBACisvKgorICogUG93ZXJQQyBtZW1vcnkgbWFuYWdlbWVudCBzdHJ1Y3R1cmVzCisgKgorICogRGF2ZSBFbmdlYnJldHNlbiAmIE1pa2UgQ29ycmlnYW4gPHtlbmdlYnJldHxtaWtlamN9QHVzLmlibS5jb20+CisgKiAgIFBQQzY0IHJld29yay4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgX1BQQzY0X01NVV9IXworI2RlZmluZSBfUFBDNjRfTU1VX0hfCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZ2lmeS5oPgorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisvKiBUaW1lIHRvIGFsbG93IGZvciBtb3JlIHRoaW5ncyBoZXJlICovCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbW1fY29udGV4dF9pZF90OwordHlwZWRlZiBzdHJ1Y3QgeworCW1tX2NvbnRleHRfaWRfdCBpZDsKKyNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCisJcGdkX3QgKmh1Z2VfcGdkaXI7CisJdTE2IGh0bGJfc2VnczsgLyogYml0bWFzayAqLworI2VuZGlmCit9IG1tX2NvbnRleHRfdDsKKworI2RlZmluZSBTVEVfRVNJRF9WCTB4ODAKKyNkZWZpbmUgU1RFX0VTSURfS1MJMHgyMAorI2RlZmluZSBTVEVfRVNJRF9LUAkweDEwCisjZGVmaW5lIFNURV9FU0lEX04JMHgwOAorCisjZGVmaW5lIFNURV9WU0lEX1NISUZUCTEyCisKK3N0cnVjdCBzdGFiX2VudHJ5IHsKKwl1bnNpZ25lZCBsb25nIGVzaWRfZGF0YTsKKwl1bnNpZ25lZCBsb25nIHZzaWRfZGF0YTsKK307CisKKy8qIEhhcmR3YXJlIFBhZ2UgVGFibGUgRW50cnkgKi8KKworI2RlZmluZSBIUFRFU19QRVJfR1JPVVAgOAorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgbG9uZyBhdnBuOjU3OyAvKiB2c2lkIHwgYXBpID09IGF2cG4gICovCisJdW5zaWduZWQgbG9uZyA6ICAgICAyOyAvKiBTb2Z0d2FyZSB1c2UgKi8KKwl1bnNpZ25lZCBsb25nIGJvbHRlZDogMTsgLyogSFBURSBpcyAiYm9sdGVkIiAqLworCXVuc2lnbmVkIGxvbmcgbG9jazogMTsgLyogbG9jayBvbiBwU2VyaWVzIFNNUCAqLworCXVuc2lnbmVkIGxvbmcgbDogICAgMTsgLyogVmlydHVhbCBwYWdlIGlzIGxhcmdlIChMPTEpIG9yIDQgS0IgKEw9MCkgKi8KKwl1bnNpZ25lZCBsb25nIGg6ICAgIDE7IC8qIEhhc2ggZnVuY3Rpb24gaWRlbnRpZmllciAqLworCXVuc2lnbmVkIGxvbmcgdjogICAgMTsgLyogVmFsaWQgKHY9MSkgb3IgaW52YWxpZCAodj0wKSAqLworfSBIcHRlX2R3b3JkMDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcgcHAwOiAgMTsgLyogUGFnZSBwcm90ZWN0aW9uIGJpdCAwICovCisJdW5zaWduZWQgbG9uZyB0czogICAxOyAvKiBUYWcgc2V0IGJpdCAqLworCXVuc2lnbmVkIGxvbmcgcnBuOiA1MDsgLyogUmVhbCBwYWdlIG51bWJlciAqLworCXVuc2lnbmVkIGxvbmcgOiAgICAgMjsgLyogUmVzZXJ2ZWQgKi8KKwl1bnNpZ25lZCBsb25nIGFjOiAgIDE7IC8qIEFkZHJlc3MgY29tcGFyZSAqLyAKKwl1bnNpZ25lZCBsb25nIHI6ICAgIDE7IC8qIFJlZmVyZW5jZWQgKi8KKwl1bnNpZ25lZCBsb25nIGM6ICAgIDE7IC8qIENoYW5nZWQgKi8KKwl1bnNpZ25lZCBsb25nIHc6ICAgIDE7IC8qIFdyaXRlLXRocnUgY2FjaGUgbW9kZSAqLworCXVuc2lnbmVkIGxvbmcgaTogICAgMTsgLyogQ2FjaGUgaW5oaWJpdGVkICovCisJdW5zaWduZWQgbG9uZyBtOiAgICAxOyAvKiBNZW1vcnkgY29oZXJlbmNlIHJlcXVpcmVkICovCisJdW5zaWduZWQgbG9uZyBnOiAgICAxOyAvKiBHdWFyZGVkICovCisJdW5zaWduZWQgbG9uZyBuOiAgICAxOyAvKiBOby1leGVjdXRlICovCisJdW5zaWduZWQgbG9uZyBwcDogICAyOyAvKiBQYWdlIHByb3RlY3Rpb24gYml0cyAxOjIgKi8KK30gSHB0ZV9kd29yZDE7CisKK3R5cGVkZWYgc3RydWN0IHsKKwljaGFyIHBhZGRpbmdbNl07CSAgIAkvKiBwYWRkaW5nICovCisJdW5zaWduZWQgbG9uZyA6ICAgICAgIDY7CS8qIHBhZGRpbmcgKi8gCisJdW5zaWduZWQgbG9uZyBmbGFnczogMTA7CS8qIEhQVEUgZmxhZ3MgKi8KK30gSHB0ZV9kd29yZDFfZmxhZ3M7CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bmlvbiB7CisJCXVuc2lnbmVkIGxvbmcgZHdvcmQwOworCQlIcHRlX2R3b3JkMCAgIGR3MDsKKwl9IGR3MDsKKworCXVuaW9uIHsKKwkJdW5zaWduZWQgbG9uZyBkd29yZDE7CisJCUhwdGVfZHdvcmQxIGR3MTsKKwkJSHB0ZV9kd29yZDFfZmxhZ3MgZmxhZ3M7CisJfSBkdzE7Cit9IEhQVEU7IAorCisvKiBWYWx1ZXMgZm9yIFBQIChhc3N1bWVzIEtzPTAsIEtwPTEpICovCisvKiBwcDAgd2lsbCBhbHdheXMgYmUgMCBmb3IgbGludXggICAgICovCisjZGVmaW5lIFBQX1JXWFgJMAkvKiBTdXBlcnZpc29yIHJlYWQvd3JpdGUsIFVzZXIgbm9uZSAqLworI2RlZmluZSBQUF9SV1JYIDEJLyogU3VwZXJ2aXNvciByZWFkL3dyaXRlLCBVc2VyIHJlYWQgKi8KKyNkZWZpbmUgUFBfUldSVyAyCS8qIFN1cGVydmlzb3IgcmVhZC93cml0ZSwgVXNlciByZWFkL3dyaXRlICovCisjZGVmaW5lIFBQX1JYUlggMwkvKiBTdXBlcnZpc29yIHJlYWQsICAgICAgIFVzZXIgcmVhZCAqLworCisKK2V4dGVybiBIUFRFICoJCWh0YWJfYWRkcmVzczsKK2V4dGVybiB1bnNpZ25lZCBsb25nCWh0YWJfaGFzaF9tYXNrOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaHB0X2hhc2godW5zaWduZWQgbG9uZyB2cG4sIGludCBsYXJnZSkKK3sKKwl1bnNpZ25lZCBsb25nIHZzaWQ7CisJdW5zaWduZWQgbG9uZyBwYWdlOworCisJaWYgKGxhcmdlKSB7CisJCXZzaWQgPSB2cG4gPj4gNDsKKwkJcGFnZSA9IHZwbiAmIDB4ZjsKKwl9IGVsc2UgeworCQl2c2lkID0gdnBuID4+IDE2OworCQlwYWdlID0gdnBuICYgMHhmZmZmOworCX0KKworCXJldHVybiAodnNpZCAmIDB4N2ZmZmZmZmZmZlVMKSBeIHBhZ2U7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3RsYmllKHVuc2lnbmVkIGxvbmcgdmEsIGludCBsYXJnZSkKK3sKKwkvKiBjbGVhciB0b3AgMTYgYml0cywgbm9uIFNMUyBzZWdtZW50ICovCisJdmEgJj0gfigweGZmZmZVTEwgPDwgNDgpOworCisJaWYgKGxhcmdlKSB7CisJCXZhICY9IEhQQUdFX01BU0s7CisJCWFzbSB2b2xhdGlsZSgidGxiaWUgJTAsMSIgOiA6ICJyIih2YSkgOiAibWVtb3J5Iik7CisJfSBlbHNlIHsKKwkJdmEgJj0gUEFHRV9NQVNLOworCQlhc20gdm9sYXRpbGUoInRsYmllICUwLDAiIDogOiAiciIodmEpIDogIm1lbW9yeSIpOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIHRsYmllKHVuc2lnbmVkIGxvbmcgdmEsIGludCBsYXJnZSkKK3sKKwlhc20gdm9sYXRpbGUoInB0ZXN5bmMiOiA6IDoibWVtb3J5Iik7CisJX190bGJpZSh2YSwgbGFyZ2UpOworCWFzbSB2b2xhdGlsZSgiZWllaW87IHRsYnN5bmM7IHB0ZXN5bmMiOiA6IDoibWVtb3J5Iik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3RsYmllbCh1bnNpZ25lZCBsb25nIHZhKQoreworCS8qIGNsZWFyIHRvcCAxNiBiaXRzLCBub24gU0xTIHNlZ21lbnQgKi8KKwl2YSAmPSB+KDB4ZmZmZlVMTCA8PCA0OCk7CisJdmEgJj0gUEFHRV9NQVNLOworCisJLyogCisJICogVGhhbmtzIHRvIEFsYW4gTW9kcmEgd2UgYXJlIG5vdyBhYmxlIHRvIHVzZSBtYWNoaW5lIHNwZWNpZmljIAorCSAqIGFzc2VtYmx5IGluc3RydWN0aW9ucyAobGlrZSB0bGJpZWwpIGJ5IHVzaW5nIHRoZSBnYXMgLW1hbnkgZmxhZy4KKwkgKiBIb3dldmVyIHdlIGhhdmUgdG8gc3VwcG9ydCBvbGRlciB0b29sY2hhaW5zIHNvIGZvciB0aGUgbW9tZW50IAorCSAqIHdlIGhhcmR3aXJlIGl0LgorCSAqLworI2lmIDAKKwlhc20gdm9sYXRpbGUoInRsYmllbCAlMCIgOiA6ICJyIih2YSkgOiAibWVtb3J5Iik7CisjZWxzZQorCWFzbSB2b2xhdGlsZSgiLmxvbmcgMHg3YzAwMDIyNCB8ICglMCA8PCAxMSkiIDogOiAiciIodmEpIDogIm1lbW9yeSIpOworI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0bGJpZWwodW5zaWduZWQgbG9uZyB2YSkKK3sKKwlhc20gdm9sYXRpbGUoInB0ZXN5bmMiOiA6IDoibWVtb3J5Iik7CisJX190bGJpZWwodmEpOworCWFzbSB2b2xhdGlsZSgicHRlc3luYyI6IDogOiJtZW1vcnkiKTsKK30KKworLyoKKyAqIEhhbmRsZSBhIGZhdWx0IGJ5IGFkZGluZyBhbiBIUFRFLiBJZiB0aGUgYWRkcmVzcyBjYW4ndCBiZSBkZXRlcm1pbmVkCisgKiB0byBiZSB2YWxpZCB2aWEgTGludXggcGFnZSB0YWJsZXMsIHJldHVybiAxLiBJZiBoYW5kbGVkIHJldHVybiAwCisgKi8KK2V4dGVybiBpbnQgX19oYXNoX3BhZ2UodW5zaWduZWQgbG9uZyBlYSwgdW5zaWduZWQgbG9uZyBhY2Nlc3MsCisJCSAgICAgICB1bnNpZ25lZCBsb25nIHZzaWQsIHB0ZV90ICpwdGVwLCB1bnNpZ25lZCBsb25nIHRyYXAsCisJCSAgICAgICBpbnQgbG9jYWwpOworCitleHRlcm4gdm9pZCBodGFiX2ZpbmlzaF9pbml0KHZvaWQpOworCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKy8qCisgKiBMb2NhdGlvbiBvZiBjcHUwJ3Mgc2VnbWVudCB0YWJsZQorICovCisjZGVmaW5lIFNUQUIwX1BBR0UJMHg5CisjZGVmaW5lIFNUQUIwX1BIWVNfQUREUgkoU1RBQjBfUEFHRTw8UEFHRV9TSElGVCkKKyNkZWZpbmUgU1RBQjBfVklSVF9BRERSCShLRVJORUxCQVNFK1NUQUIwX1BIWVNfQUREUikKKworI2RlZmluZSBTTEJfTlVNX0JPTFRFRAkJMworI2RlZmluZSBTTEJfQ0FDSEVfRU5UUklFUwk4CisKKy8qIEJpdHMgaW4gdGhlIFNMQiBFU0lEIHdvcmQgKi8KKyNkZWZpbmUgU0xCX0VTSURfVgkJMHgwMDAwMDAwMDA4MDAwMDAwCS8qIGVudHJ5IGlzIHZhbGlkICovCisKKy8qIEJpdHMgaW4gdGhlIFNMQiBWU0lEIHdvcmQgKi8KKyNkZWZpbmUgU0xCX1ZTSURfU0hJRlQJCTEyCisjZGVmaW5lIFNMQl9WU0lEX0tTCQkweDAwMDAwMDAwMDAwMDA4MDAKKyNkZWZpbmUgU0xCX1ZTSURfS1AJCTB4MDAwMDAwMDAwMDAwMDQwMAorI2RlZmluZSBTTEJfVlNJRF9OCQkweDAwMDAwMDAwMDAwMDAyMDAJLyogbm8tZXhlY3V0ZSAqLworI2RlZmluZSBTTEJfVlNJRF9MCQkweDAwMDAwMDAwMDAwMDAxMDAJLyogbGFyZ2VwYWdlICg0TSkgKi8KKyNkZWZpbmUgU0xCX1ZTSURfQwkJMHgwMDAwMDAwMDAwMDAwMDgwCS8qIGNsYXNzICovCisKKyNkZWZpbmUgU0xCX1ZTSURfS0VSTkVMCQkoU0xCX1ZTSURfS1B8U0xCX1ZTSURfQykKKyNkZWZpbmUgU0xCX1ZTSURfVVNFUgkJKFNMQl9WU0lEX0tQfFNMQl9WU0lEX0tTKQorCisjZGVmaW5lIFZTSURfTVVMVElQTElFUglBU01fQ09OU1QoMjAwNzMwMTM5KQkvKiAyOC1iaXQgcHJpbWUgKi8KKyNkZWZpbmUgVlNJRF9CSVRTCTM2CisjZGVmaW5lIFZTSURfTU9EVUxVUwkoKDFVTDw8VlNJRF9CSVRTKS0xKQorCisjZGVmaW5lIENPTlRFWFRfQklUUwkyMAorI2RlZmluZSBVU0VSX0VTSURfQklUUwkxNQorCisvKgorICogVGhpcyBtYWNybyBnZW5lcmF0ZXMgYXNtIGNvZGUgdG8gY29tcHV0ZSB0aGUgVlNJRCBzY3JhbWJsZQorICogZnVuY3Rpb24uICBVc2VkIGluIHNsYl9hbGxvY2F0ZSgpIGFuZCBkb19zdGFiX2JvbHRlZC4gIFRoZSBmdW5jdGlvbgorICogY29tcHV0ZWQgaXM6IChwcm90b3ZzaWQqVlNJRF9NVUxUSVBMSUVSKSAlIFZTSURfTU9EVUxVUworICoKKyAqCXJ0ID0gcmVnaXN0ZXIgY29udGluYWluZyB0aGUgcHJvdG8tVlNJRCBhbmQgaW50byB3aGljaCB0aGUKKyAqCQlWU0lEIHdpbGwgYmUgc3RvcmVkCisgKglyeCA9IHNjcmF0Y2ggcmVnaXN0ZXIgKGNsb2JiZXJlZCkKKyAqCisgKiAJLSBydCBhbmQgcnggbXVzdCBiZSBkaWZmZXJlbnQgcmVnaXN0ZXJzCisgKiAJLSBUaGUgYW5zd2VyIHdpbGwgZW5kIHVwIGluIHRoZSBsb3cgMzYgYml0cyBvZiBydC4gIFRoZSBoaWdoZXIKKyAqIAkgIGJpdHMgbWF5IGNvbnRhaW4gb3RoZXIgZ2FyYmFnZSwgc28geW91IG1heSBuZWVkIHRvIG1hc2sgdGhlCisgKiAJICByZXN1bHQuCisgKi8KKyNkZWZpbmUgQVNNX1ZTSURfU0NSQU1CTEUocnQsIHJ4KQlcCisJbGlzCXJ4LFZTSURfTVVMVElQTElFUkBoOwkJCQkJXAorCW9yaQlyeCxyeCxWU0lEX01VTFRJUExJRVJAbDsJCQkJXAorCW11bGxkCXJ0LHJ0LHJ4OwkJLyogcnQgPSBydCAqIE1VTFRJUExJRVIgKi8JXAorCQkJCQkJCQkJXAorCXNyZGkJcngscnQsVlNJRF9CSVRTOwkJCQkJXAorCWNscmxkaQlydCxydCwoNjQtVlNJRF9CSVRTKTsJCQkJCVwKKwlhZGQJcnQscnQscng7CQkvKiBhZGQgaGlnaCBhbmQgbG93IGJpdHMgKi8JXAorCS8qIE5vdywgcjMgPT0gVlNJRCAobW9kIDJeMzYtMSksIGFuZCBsaWVzIGJldHdlZW4gMCBhbmQJCVwKKwkgKiAyXjM2LTErMl4yOC0xLiAgVGhhdCBpbiBwYXJ0aWN1bGFyIG1lYW5zIHRoYXQgaWYgcjMgPj0JXAorCSAqIDJeMzYtMSwgdGhlbiByMysxIGhhcyB0aGUgMl4zNiBiaXQgc2V0LiAgU28sIGlmIHIzKzEgaGFzCVwKKwkgKiB0aGUgYml0IGNsZWFyLCByMyBhbHJlYWR5IGhhcyB0aGUgYW5zd2VyIHdlIHdhbnQsIGlmIGl0CVwKKwkgKiBkb2Vzbid0LCB0aGUgYW5zd2VyIGlzIHRoZSBsb3cgMzYgYml0cyBvZiByMysxLiAgU28gaW4gYWxsCVwKKwkgKiBjYXNlcyB0aGUgYW5zd2VyIGlzIHRoZSBsb3cgMzYgYml0cyBvZiAocjMgKyAoKHIzKzEpID4+IDM2KSkqL1wKKwlhZGRpCXJ4LHJ0LDE7CQkJCQkJXAorCXNyZGkJcngscngsVlNJRF9CSVRTOwkvKiBleHRyYWN0IDJeMzYgYml0ICovCQlcCisJYWRkCXJ0LHJ0LHJ4CisKKyNlbmRpZiAvKiBfUFBDNjRfTU1VX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9tbXVfY29udGV4dC5oIGIvaW5jbHVkZS9hc20tcHBjNjQvbW11X2NvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmU4ZTA0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvbW11X2NvbnRleHQuaApAQCAtMCwwICsxLDE2OSBAQAorI2lmbmRlZiBfX1BQQzY0X01NVV9DT05URVhUX0gKKyNkZWZpbmUgX19QUEM2NF9NTVVfQ09OVEVYVF9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4JCisjaW5jbHVkZSA8bGludXgvbW0uaD4JCisjaW5jbHVkZSA8YXNtL21tdS5oPgkKKyNpbmNsdWRlIDxhc20vY3B1dGFibGUuaD4KKworLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMSBQUEMgNjQgVGVhbSwgSUJNIENvcnAKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKy8qCisgKiBFdmVyeSBhcmNoaXRlY3R1cmUgbXVzdCBkZWZpbmUgdGhpcyBmdW5jdGlvbi4gSXQncyB0aGUgZmFzdGVzdAorICogd2F5IG9mIHNlYXJjaGluZyBhIDE0MC1iaXQgYml0bWFwIHdoZXJlIHRoZSBmaXJzdCAxMDAgYml0cyBhcmUKKyAqIHVubGlrZWx5IHRvIGJlIHNldC4gSXQncyBndWFyYW50ZWVkIHRoYXQgYXQgbGVhc3Qgb25lIG9mIHRoZSAxNDAKKyAqIGJpdHMgaXMgY2xlYXJlZC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgc2NoZWRfZmluZF9maXJzdF9iaXQodW5zaWduZWQgbG9uZyAqYikKK3sKKwlpZiAodW5saWtlbHkoYlswXSkpCisJCXJldHVybiBfX2ZmcyhiWzBdKTsKKwlpZiAodW5saWtlbHkoYlsxXSkpCisJCXJldHVybiBfX2ZmcyhiWzFdKSArIDY0OworCXJldHVybiBfX2ZmcyhiWzJdKSArIDEyODsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGVudGVyX2xhenlfdGxiKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKK30KKworI2RlZmluZSBOT19DT05URVhUCTAKKyNkZWZpbmUgTUFYX0NPTlRFWFQJKDB4MTAwMDAwLTEpCisKK2V4dGVybiBpbnQgaW5pdF9uZXdfY29udGV4dChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0pOworZXh0ZXJuIHZvaWQgZGVzdHJveV9jb250ZXh0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKKworZXh0ZXJuIHZvaWQgc3dpdGNoX3N0YWIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKK2V4dGVybiB2b2lkIHN3aXRjaF9zbGIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKKworLyoKKyAqIHN3aXRjaF9tbSBpcyB0aGUgZW50cnkgcG9pbnQgY2FsbGVkIGZyb20gdGhlIGFyY2hpdGVjdHVyZSBpbmRlcGVuZGVudAorICogY29kZSBpbiBrZXJuZWwvc2NoZWQuYworICovCitzdGF0aWMgaW5saW5lIHZvaWQgc3dpdGNoX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKnByZXYsIHN0cnVjdCBtbV9zdHJ1Y3QgKm5leHQsCisJCQkgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCWlmICghY3B1X2lzc2V0KHNtcF9wcm9jZXNzb3JfaWQoKSwgbmV4dC0+Y3B1X3ZtX21hc2spKQorCQljcHVfc2V0KHNtcF9wcm9jZXNzb3JfaWQoKSwgbmV4dC0+Y3B1X3ZtX21hc2spOworCisJLyogTm8gbmVlZCB0byBmbHVzaCB1c2Vyc3BhY2Ugc2VnbWVudHMgaWYgdGhlIG1tIGRvZXNudCBjaGFuZ2UgKi8KKwlpZiAocHJldiA9PSBuZXh0KQorCQlyZXR1cm47CisKKyNpZmRlZiBDT05GSUdfQUxUSVZFQworCWlmIChjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9BTFRJVkVDKSkKKwkJYXNtIHZvbGF0aWxlICgiZHNzYWxsIik7CisjZW5kaWYgLyogQ09ORklHX0FMVElWRUMgKi8KKworCWlmIChjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9TTEIpKQorCQlzd2l0Y2hfc2xiKHRzaywgbmV4dCk7CisJZWxzZQorCQlzd2l0Y2hfc3RhYih0c2ssIG5leHQpOworfQorCisjZGVmaW5lIGRlYWN0aXZhdGVfbW0odHNrLG1tKQlkbyB7IH0gd2hpbGUgKDApCisKKy8qCisgKiBBZnRlciB3ZSBoYXZlIHNldCBjdXJyZW50LT5tbSB0byBhIG5ldyB2YWx1ZSwgdGhpcyBhY3RpdmF0ZXMKKyAqIHRoZSBjb250ZXh0IGZvciB0aGUgbmV3IG1tIHNvIHdlIHNlZSB0aGUgbmV3IG1hcHBpbmdzLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgYWN0aXZhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqcHJldiwgc3RydWN0IG1tX3N0cnVjdCAqbmV4dCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXN3aXRjaF9tbShwcmV2LCBuZXh0LCBjdXJyZW50KTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKKy8qIFZTSUQgYWxsb2NhdGlvbgorICogPT09PT09PT09PT09PT09CisgKgorICogV2UgZmlyc3QgZ2VuZXJhdGUgYSAzNi1iaXQgInByb3RvLVZTSUQiLiAgRm9yIGtlcm5lbCBhZGRyZXNzZXMgdGhpcworICogaXMgZXF1YWwgdG8gdGhlIEVTSUQsIGZvciB1c2VyIGFkZHJlc3NlcyBpdCBpczoKKyAqCShjb250ZXh0IDw8IDE1KSB8IChlc2lkICYgMHg3ZmZmKQorICoKKyAqIFRoZSB0d28gZm9ybXMgYXJlIGRpc3Rpbmd1aXNoYWJsZSBiZWNhdXNlIHRoZSB0b3AgYml0IGlzIDAgZm9yIHVzZXIKKyAqIGFkZHJlc3Nlcywgd2hlcmVhcyB0aGUgdG9wIHR3byBiaXRzIGFyZSAxIGZvciBrZXJuZWwgYWRkcmVzc2VzLgorICogUHJvdG8tVlNJRHMgd2l0aCB0aGUgdG9wIHR3byBiaXRzIGVxdWFsIHRvIDBiMTAgYXJlIHJlc2VydmVkIGZvcgorICogbm93LgorICoKKyAqIFRoZSBwcm90by1WU0lEcyBhcmUgdGhlbiBzY3JhbWJsZWQgaW50byByZWFsIFZTSURzIHdpdGggdGhlCisgKiBtdWx0aXBsaWNhdGl2ZSBoYXNoOgorICoKKyAqCVZTSUQgPSAocHJvdG8tVlNJRCAqIFZTSURfTVVMVElQTElFUikgJSBWU0lEX01PRFVMVVMKKyAqCXdoZXJlCVZTSURfTVVMVElQTElFUiA9IDI2ODQzNTM5OSA9IDB4RkZGRkZDNworICoJCVZTSURfTU9EVUxVUyA9IDJeMzYtMSA9IDB4RkZGRkZGRkZGCisgKgorICogVGhpcyBzY3JhbWJsZSBpcyBvbmx5IHdlbGwgZGVmaW5lZCBmb3IgcHJvdG8tVlNJRHMgYmVsb3cKKyAqIDB4RkZGRkZGRkZGLCBzbyBib3RoIHByb3RvLVZTSUQgYW5kIGFjdHVhbCBWU0lEIDB4RkZGRkZGRkZGIGFyZQorICogcmVzZXJ2ZWQuICBWU0lEX01VTFRJUExJRVIgaXMgcHJpbWUsIHNvIGluIHBhcnRpY3VsYXIgaXQgaXMKKyAqIGNvLXByaW1lIHRvIFZTSURfTU9EVUxVUywgbWFraW5nIHRoaXMgYSAxOjEgc2NyYW1ibGluZyBmdW5jdGlvbi4KKyAqIEJlY2F1c2UgdGhlIG1vZHVsdXMgaXMgMl5uLTEgd2UgY2FuIGNvbXB1dGUgaXQgZWZmaWNpZW50bHkgd2l0aG91dAorICogYSBkaXZpZGUgb3IgZXh0cmEgbXVsdGlwbHkgKHNlZSBiZWxvdykuCisgKgorICogVGhpcyBzY2hlbWUgaGFzIHNldmVyYWwgYWR2YW50YWdlcyBvdmVyIG9sZGVyIG1ldGhvZHM6CisgKgorICogCS0gV2UgaGF2ZSBWU0lEcyBhbGxvY2F0ZWQgZm9yIGV2ZXJ5IGtlcm5lbCBhZGRyZXNzCisgKiAoaS5lLiBldmVyeXRoaW5nIGFib3ZlIDB4QzAwMDAwMDAwMDAwMDAwMCksIGV4Y2VwdCB0aGUgdmVyeSB0b3AKKyAqIHNlZ21lbnQsIHdoaWNoIHNpbXBsaWZpZXMgc2V2ZXJhbCB0aGluZ3MuCisgKgorICogCS0gV2UgYWxsb3cgZm9yIDE1IHNpZ25pZmljYW50IGJpdHMgb2YgRVNJRCBhbmQgMjAgYml0cyBvZgorICogY29udGV4dCBmb3IgdXNlciBhZGRyZXNzZXMuICBpLmUuIDhUICg0MyBiaXRzKSBvZiBhZGRyZXNzIHNwYWNlIGZvcgorICogdXAgdG8gMU0gY29udGV4dHMgKGFsdGhvdWdoIHRoZSBwYWdlIHRhYmxlIHN0cnVjdHVyZSBhbmQgY29udGV4dAorICogYWxsb2NhdGlvbiB3aWxsIG5lZWQgY2hhbmdlcyB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGlzKS4KKyAqCisgKiAJLSBUaGUgc2NyYW1ibGUgZnVuY3Rpb24gZ2l2ZXMgcm9idXN0IHNjYXR0ZXJpbmcgaW4gdGhlIGhhc2gKKyAqIHRhYmxlIChhdCBsZWFzdCBiYXNlZCBvbiBzb21lIGluaXRpYWwgcmVzdWx0cykuICBUaGUgcHJldmlvdXMKKyAqIG1ldGhvZCB3YXMgbW9yZSBzdXNjZXB0aWJsZSB0byBwYXRob2xvZ2ljYWwgY2FzZXMgZ2l2aW5nIGV4Y2Vzc2l2ZQorICogaGFzaCBjb2xsaXNpb25zLgorICovCisKKy8qCisgKiBXQVJOSU5HIC0gSWYgeW91IGNoYW5nZSB0aGVzZSB5b3UgbXVzdCBtYWtlIHN1cmUgdGhlIGFzbQorICogaW1wbGVtZW50YXRpb25zIGluIHNsYl9hbGxvY2F0ZSgpLCBkb19zdGFiX2JvbHRlZCBhbmQgbW11LmgKKyAqIChBU01fVlNJRF9TQ1JBTUJMRSBtYWNybykgYXJlIGNoYW5nZWQgYWNjb3JkaW5nbHkuCisgKgorICogWW91J2xsIGFsc28gbmVlZCB0byBjaGFuZ2UgdGhlIHByZWNvbXB1dGVkIFZTSUQgdmFsdWVzIGluIGhlYWQuUworICogd2hpY2ggYXJlIHVzZWQgYnkgdGhlIGlTZXJpZXMgZmlybXdhcmUuCisgKi8KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHZzaWRfc2NyYW1ibGUodW5zaWduZWQgbG9uZyBwcm90b3ZzaWQpCit7CisjaWYgMAorCS8qIFRoZSBjb2RlIGJlbG93IGlzIGVxdWl2YWxlbnQgdG8gdGhpcyBmdW5jdGlvbiBmb3IgYXJndW1lbnRzCisJICogPCAyXlZTSURfQklUUywgd2hpY2ggaXMgYWxsIHRoaXMgc2hvdWxkIGV2ZXIgYmUgY2FsbGVkCisJICogd2l0aC4gIEhvd2V2ZXIgZ2NjIGlzIG5vdCBjbGV2ZXIgZW5vdWdoIHRvIGNvbXB1dGUgdGhlCisJICogbW9kdWx1cyAoMl5uLTEpIHdpdGhvdXQgYSBzZWNvbmQgbXVsdGlwbHkuICovCisJcmV0dXJuICgocHJvdG92c2lkICogVlNJRF9NVUxUSVBMSUVSKSAlIFZTSURfTU9EVUxVUyk7CisjZWxzZSAvKiAxICovCisJdW5zaWduZWQgbG9uZyB4OworCisJeCA9IHByb3RvdnNpZCAqIFZTSURfTVVMVElQTElFUjsKKwl4ID0gKHggPj4gVlNJRF9CSVRTKSArICh4ICYgVlNJRF9NT0RVTFVTKTsKKwlyZXR1cm4gKHggKyAoKHgrMSkgPj4gVlNJRF9CSVRTKSkgJiBWU0lEX01PRFVMVVM7CisjZW5kaWYgLyogMSAqLworfQorCisvKiBUaGlzIGlzIG9ubHkgdmFsaWQgZm9yIGFkZHJlc3NlcyA+PSBLRVJORUxCQVNFICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X2tlcm5lbF92c2lkKHVuc2lnbmVkIGxvbmcgZWEpCit7CisJcmV0dXJuIHZzaWRfc2NyYW1ibGUoZWEgPj4gU0lEX1NISUZUKTsKK30KKworLyogVGhpcyBpcyBvbmx5IHZhbGlkIGZvciB1c2VyIGFkZHJlc3NlcyAod2hpY2ggYXJlIGJlbG93IDJeNDEpICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X3ZzaWQodW5zaWduZWQgbG9uZyBjb250ZXh0LCB1bnNpZ25lZCBsb25nIGVhKQoreworCXJldHVybiB2c2lkX3NjcmFtYmxlKChjb250ZXh0IDw8IFVTRVJfRVNJRF9CSVRTKQorCQkJICAgICB8IChlYSA+PiBTSURfU0hJRlQpKTsKK30KKworI2VuZGlmIC8qIF9fUFBDNjRfTU1VX0NPTlRFWFRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvbW16b25lLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9tbXpvbmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjE5YTQxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvbW16b25lLmgKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqIFdyaXR0ZW4gYnkgS2Fub2ogU2FyY2FyIChrYW5vakBzZ2kuY29tKSBBdWcgOTkKKyAqCisgKiBQb3dlclBDNjQgcG9ydDoKKyAqIENvcHlyaWdodCAoQykgMjAwMiBBbnRvbiBCbGFuY2hhcmQsIElCTSBDb3JwLgorICovCisjaWZuZGVmIF9BU01fTU1aT05FX0hfCisjZGVmaW5lIF9BU01fTU1aT05FX0hfCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxhc20vc21wLmg+CisKKyNpZmRlZiBDT05GSUdfRElTQ09OVElHTUVNCisKK2V4dGVybiBzdHJ1Y3QgcGdsaXN0X2RhdGEgKm5vZGVfZGF0YVtdOworCisvKgorICogRm9sbG93aW5nIGFyZSBzcGVjaWZpYyB0byB0aGlzIG51bWEgcGxhdGZvcm0uCisgKi8KKworZXh0ZXJuIGludCBudW1hX2NwdV9sb29rdXBfdGFibGVbXTsKK2V4dGVybiBjaGFyICpudW1hX21lbW9yeV9sb29rdXBfdGFibGU7CitleHRlcm4gY3B1bWFza190IG51bWFfY3B1bWFza19sb29rdXBfdGFibGVbXTsKK2V4dGVybiBpbnQgbnJfY3B1c19pbl9ub2RlW107CisKKy8qIDE2TUIgcmVnaW9ucyAqLworI2RlZmluZSBNRU1PUllfSU5DUkVNRU5UX1NISUZUIDI0CisjZGVmaW5lIE1FTU9SWV9JTkNSRU1FTlQgKDFVTCA8PCBNRU1PUllfSU5DUkVNRU5UX1NISUZUKQorCisvKiBOVU1BIGRlYnVnZ2luZywgd2lsbCBub3Qgd29yayBvbiBhIERMUEFSIG1hY2hpbmUgKi8KKyN1bmRlZiBERUJVR19OVU1BCisKK3N0YXRpYyBpbmxpbmUgaW50IHBhX3RvX25pZCh1bnNpZ25lZCBsb25nIHBhKQoreworCWludCBuaWQ7CisKKwluaWQgPSBudW1hX21lbW9yeV9sb29rdXBfdGFibGVbcGEgPj4gTUVNT1JZX0lOQ1JFTUVOVF9TSElGVF07CisKKyNpZmRlZiBERUJVR19OVU1BCisJLyogdGhlIHBoeXNpY2FsIGFkZHJlc3MgcGFzc2VkIGluIGlzIG5vdCBpbiB0aGUgbWFwIGZvciB0aGUgc3lzdGVtICovCisJaWYgKG5pZCA9PSAtMSkgeworCQlwcmludGsoImJhZCBhZGRyZXNzOiAlbHhcbiIsIHBhKTsKKwkJQlVHKCk7CisJfQorI2VuZGlmCisKKwlyZXR1cm4gbmlkOworfQorCisjZGVmaW5lIHBmbl90b19uaWQocGZuKQkJcGFfdG9fbmlkKChwZm4pIDw8IFBBR0VfU0hJRlQpCisKKy8qCisgKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBub2RlIGRhdGEgZm9yIG5vZGUgbi4KKyAqLworI2RlZmluZSBOT0RFX0RBVEEobmlkKQkJKG5vZGVfZGF0YVtuaWRdKQorCisjZGVmaW5lIG5vZGVfbG9jYWxucihwZm4sIG5pZCkJKChwZm4pIC0gTk9ERV9EQVRBKG5pZCktPm5vZGVfc3RhcnRfcGZuKQorCisvKgorICogRm9sbG93aW5nIGFyZSBtYWNyb3MgdGhhdCBlYWNoIG51bWEgaW1wbG1lbnRhdGlvbiBtdXN0IGRlZmluZS4KKyAqLworCisvKgorICogR2l2ZW4gYSBrZXJuZWwgYWRkcmVzcywgZmluZCB0aGUgaG9tZSBub2RlIG9mIHRoZSB1bmRlcmx5aW5nIG1lbW9yeS4KKyAqLworI2RlZmluZSBrdmFkZHJfdG9fbmlkKGthZGRyKQlwYV90b19uaWQoX19wYShrYWRkcikpCisKKyNkZWZpbmUgbm9kZV9tZW1fbWFwKG5pZCkJKE5PREVfREFUQShuaWQpLT5ub2RlX21lbV9tYXApCisjZGVmaW5lIG5vZGVfc3RhcnRfcGZuKG5pZCkJKE5PREVfREFUQShuaWQpLT5ub2RlX3N0YXJ0X3BmbikKKyNkZWZpbmUgbm9kZV9lbmRfcGZuKG5pZCkJKE5PREVfREFUQShuaWQpLT5ub2RlX2VuZF9wZm4pCisKKyNkZWZpbmUgbG9jYWxfbWFwbnIoa3ZhZGRyKSBcCisJKCAoX19wYShrdmFkZHIpID4+IFBBR0VfU0hJRlQpIC0gbm9kZV9zdGFydF9wZm4oa3ZhZGRyX3RvX25pZChrdmFkZHIpKSAKKworLyogV3JpdHRlbiB0aGlzIHdheSB0byBhdm9pZCBldmFsdWF0aW5nIGFyZ3VtZW50cyB0d2ljZSAqLworI2RlZmluZSBkaXNjb250aWdtZW1fcGZuX3RvX3BhZ2UocGZuKSBcCisoeyBcCisJdW5zaWduZWQgbG9uZyBfX3RtcCA9IHBmbjsgXAorCShub2RlX21lbV9tYXAocGZuX3RvX25pZChfX3RtcCkpICsgXAorCSBub2RlX2xvY2FsbnIoX190bXAsIHBmbl90b19uaWQoX190bXApKSk7IFwKK30pCisKKyNkZWZpbmUgZGlzY29udGlnbWVtX3BhZ2VfdG9fcGZuKHApIFwKKyh7IFwKKwlzdHJ1Y3QgcGFnZSAqX190bXAgPSBwOyBcCisJKCgoX190bXApIC0gcGFnZV96b25lKF9fdG1wKS0+em9uZV9tZW1fbWFwKSArIFwKKwkgcGFnZV96b25lKF9fdG1wKS0+em9uZV9zdGFydF9wZm4pOyBcCit9KQorCisvKiBYWFggZml4IGZvciBkaXNjb250aWd1b3VzIHBoeXNpY2FsIG1lbW9yeSAqLworI2RlZmluZSBkaXNjb250aWdtZW1fcGZuX3ZhbGlkKHBmbikJCSgocGZuKSA8IG51bV9waHlzcGFnZXMpCisKKyNlbmRpZiAvKiBDT05GSUdfRElTQ09OVElHTUVNICovCisjZW5kaWYgLyogX0FTTV9NTVpPTkVfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L21vZHVsZS5oIGIvaW5jbHVkZS9hc20tcHBjNjQvbW9kdWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU4MTYwNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L21vZHVsZS5oCkBAIC0wLDAgKzEsMzYgQEAKKyNpZm5kZWYgX0FTTV9QUEM2NF9NT0RVTEVfSAorI2RlZmluZSBfQVNNX1BQQzY0X01PRFVMRV9ICisKKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8YXNtL2J1Zy5oPgorCitzdHJ1Y3QgbW9kX2FyY2hfc3BlY2lmaWMKK3sKKwkvKiBJbmRleCBvZiBzdHVicyBzZWN0aW9uIHdpdGhpbiBtb2R1bGUuICovCisJdW5zaWduZWQgaW50IHN0dWJzX3NlY3Rpb247CisKKwkvKiBXaGF0IHNlY3Rpb24gaXMgdGhlIFRPQz8gKi8KKwl1bnNpZ25lZCBpbnQgdG9jX3NlY3Rpb247CisKKwkvKiBMaXN0IG9mIEJVRyBhZGRyZXNzZXMsIHNvdXJjZSBsaW5lIG51bWJlcnMgYW5kIGZpbGVuYW1lcyAqLworCXN0cnVjdCBsaXN0X2hlYWQgYnVnX2xpc3Q7CisJc3RydWN0IGJ1Z19lbnRyeSAqYnVnX3RhYmxlOworCXVuc2lnbmVkIGludCBudW1fYnVnczsKK307CisKK2V4dGVybiBzdHJ1Y3QgYnVnX2VudHJ5ICptb2R1bGVfZmluZF9idWcodW5zaWduZWQgbG9uZyBidWdhZGRyKTsKKworI2RlZmluZSBFbGZfU2hkciBFbGY2NF9TaGRyCisjZGVmaW5lIEVsZl9TeW0gRWxmNjRfU3ltCisjZGVmaW5lIEVsZl9FaGRyIEVsZjY0X0VoZHIKKworLyogTWFrZSBlbXB0eSBzZWN0aW9uIGZvciBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zIHRvIGV4cGFuZC4gKi8KKyNpZmRlZiBNT0RVTEUKK2FzbSgiLnNlY3Rpb24gLnN0dWJzLFwiYXhcIixAbm9iaXRzOyAuYWxpZ24gMzsgLnByZXZpb3VzIik7CisjZW5kaWYKKworc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeTsKK3ZvaWQgc29ydF9leF90YWJsZShzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpzdGFydCwKKwkJCXN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmZpbmlzaCk7CisKKyNlbmRpZiAvKiBfQVNNX1BQQzY0X01PRFVMRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9tc2didWYuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L21zZ2J1Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxYzFjYmYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9tc2didWYuaApAQCAtMCwwICsxLDI3IEBACisjaWZuZGVmIF9QUEM2NF9NU0dCVUZfSAorI2RlZmluZSBfUFBDNjRfTVNHQlVGX0gKKworLyogCisgKiBUaGUgbXNxaWQ2NF9kcyBzdHJ1Y3R1cmUgZm9yIHRoZSBQUEMgYXJjaGl0ZWN0dXJlLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworc3RydWN0IG1zcWlkNjRfZHMgeworCXN0cnVjdCBpcGM2NF9wZXJtIG1zZ19wZXJtOworCV9fa2VybmVsX3RpbWVfdCBtc2dfc3RpbWU7CS8qIGxhc3QgbXNnc25kIHRpbWUgKi8KKwlfX2tlcm5lbF90aW1lX3QgbXNnX3J0aW1lOwkvKiBsYXN0IG1zZ3JjdiB0aW1lICovCisJX19rZXJuZWxfdGltZV90IG1zZ19jdGltZTsJLyogbGFzdCBjaGFuZ2UgdGltZSAqLworCXVuc2lnbmVkIGxvbmcgIG1zZ19jYnl0ZXM7CS8qIGN1cnJlbnQgbnVtYmVyIG9mIGJ5dGVzIG9uIHF1ZXVlICovCisJdW5zaWduZWQgbG9uZyAgbXNnX3FudW07CS8qIG51bWJlciBvZiBtZXNzYWdlcyBpbiBxdWV1ZSAqLworCXVuc2lnbmVkIGxvbmcgIG1zZ19xYnl0ZXM7CS8qIG1heCBudW1iZXIgb2YgYnl0ZXMgb24gcXVldWUgKi8KKwlfX2tlcm5lbF9waWRfdCBtc2dfbHNwaWQ7CS8qIHBpZCBvZiBsYXN0IG1zZ3NuZCAqLworCV9fa2VybmVsX3BpZF90IG1zZ19scnBpZDsJLyogbGFzdCByZWNlaXZlIHBpZCAqLworCXVuc2lnbmVkIGxvbmcgIF9fdW51c2VkMTsKKwl1bnNpZ25lZCBsb25nICBfX3VudXNlZDI7Cit9OworCisjZW5kaWYgLyogX1BQQzY0X01TR0JVRl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9uYWNhLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9uYWNhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZiN2NhYTMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9uYWNhLmgKQEAgLTAsMCArMSwzMSBAQAorI2lmbmRlZiBfTkFDQV9ICisjZGVmaW5lIF9OQUNBX0gKKworLyogCisgKiBjIDIwMDEgUFBDIDY0IFRlYW0sIElCTSBDb3JwCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK3N0cnVjdCBuYWNhX3N0cnVjdCB7CisJLyogS2VybmVsIG9ubHkgZGF0YSAtIHVuZGVmaW5lZCBmb3IgdXNlciBzcGFjZSAqLworCXZvaWQgKnhJdFZwZEFyZWFzOyAgICAgICAgICAgICAgLyogVlBEIERhdGEgICAgICAgICAgICAgICAgICAweDAwICovCisJdm9pZCAqeFJhbURpc2s7ICAgICAgICAgICAgICAgICAvKiBpU2VyaWVzIHJhbWRpc2sgICAgICAgICAgIDB4MDggKi8KKwl1NjQgICB4UmFtRGlza1NpemU7CQkvKiBJbiBwYWdlcyAgICAgICAgICAgICAgICAgIDB4MTAgKi8KK307CisKK2V4dGVybiBzdHJ1Y3QgbmFjYV9zdHJ1Y3QgbmFjYTsKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisjZGVmaW5lIE5BQ0FfUEFHRSAgICAgIDB4NAorI2RlZmluZSBOQUNBX1BIWVNfQUREUiAoTkFDQV9QQUdFPDxQQUdFX1NISUZUKQorCisjZW5kaWYgLyogX05BQ0FfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvbmFtZWkuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L25hbWVpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE0MTJhMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L25hbWVpLmgKQEAgLTAsMCArMSwyMyBAQAorLyogCisgKiBsaW51eC9pbmNsdWRlL2FzbS1wcGMvbmFtZWkuaAorICogQWRhcHRlZCBmcm9tIGxpbnV4L2luY2x1ZGUvYXNtLWFscGhhL25hbWVpLmgKKyAqCisgKiBJbmNsdWRlZCBmcm9tIGxpbnV4L2ZzL25hbWVpLmMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgX19QUEM2NF9OQU1FSV9ICisjZGVmaW5lIF9fUFBDNjRfTkFNRUlfSAorCisvKiBUaGlzIGR1bW15IHJvdXRpbmUgbWF5YmUgY2hhbmdlZCB0byBzb21ldGhpbmcgdXNlZnVsCisgKiBmb3IgL3Vzci9nbmVtdWwvIGVtdWxhdGlvbiBzdHVmZi4KKyAqIExvb2sgYXQgYXNtLXNwYXJjL25hbWVpLmggZm9yIGRldGFpbHMuCisgKi8KKworI2RlZmluZSBfX2VtdWxfcHJlZml4KCkgTlVMTAorCisjZW5kaWYgLyogX19QUEM2NF9OQU1FSV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9udW1ub2Rlcy5oIGIvaW5jbHVkZS9hc20tcHBjNjQvbnVtbm9kZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWFlMGI5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvbnVtbm9kZXMuaApAQCAtMCwwICsxLDcgQEAKKyNpZm5kZWYgX0FTTV9NQVhfTlVNTk9ERVNfSAorI2RlZmluZSBfQVNNX01BWF9OVU1OT0RFU19ICisKKy8qIE1heCAxNiBOb2RlcyAqLworI2RlZmluZSBOT0RFU19TSElGVAk0CisKKyNlbmRpZiAvKiBfQVNNX01BWF9OVU1OT0RFU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9udnJhbS5oIGIvaW5jbHVkZS9hc20tcHBjNjQvbnZyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTZkZDM3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvbnZyYW0uaApAQCAtMCwwICsxLDExNSBAQAorLyoKKyAqIFByZVAgY29tcGxpYW50IE5WUkFNIGFjY2VzcworICogVGhpcyBuZWVkcyB0byBiZSB1cGRhdGVkIGZvciBQUEM2NAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfUFBDNjRfTlZSQU1fSAorI2RlZmluZSBfUFBDNjRfTlZSQU1fSAorCisjZGVmaW5lIE5WUldfQ05UIDB4MjAKKyNkZWZpbmUgTlZSQU1fSEVBREVSX0xFTiAxNiAvKiBzaXplb2Yoc3RydWN0IG52cmFtX2hlYWRlcikgKi8KKyNkZWZpbmUgTlZSQU1fQkxPQ0tfTEVOIDE2CisjZGVmaW5lIE5WUkFNX01BWF9SRVEgKDIwODAvTlZSQU1fQkxPQ0tfTEVOKQorI2RlZmluZSBOVlJBTV9NSU5fUkVRICgxMDU2L05WUkFNX0JMT0NLX0xFTikKKworI2RlZmluZSBOVlJBTV9BUzAgIDB4NzQKKyNkZWZpbmUgTlZSQU1fQVMxICAweDc1CisjZGVmaW5lIE5WUkFNX0RBVEEgMHg3NworCisKKy8qIFJUQyBPZmZzZXRzICovCisKKyNkZWZpbmUgTU9UT19SVENfU0VDT05EUwkweDFGRjkKKyNkZWZpbmUgTU9UT19SVENfTUlOVVRFUwkweDFGRkEKKyNkZWZpbmUgTU9UT19SVENfSE9VUlMJCTB4MUZGQgorI2RlZmluZSBNT1RPX1JUQ19EQVlfT0ZfV0VFSwkweDFGRkMKKyNkZWZpbmUgTU9UT19SVENfREFZX09GX01PTlRICTB4MUZGRAorI2RlZmluZSBNT1RPX1JUQ19NT05USAkJMHgxRkZFCisjZGVmaW5lIE1PVE9fUlRDX1lFQVIJCTB4MUZGRgorI2RlZmluZSBNT1RPX1JUQ19DT05UUk9MQSAgICAgICAweDFGRjgKKyNkZWZpbmUgTU9UT19SVENfQ09OVFJPTEIgICAgICAgMHgxRkY5CisKKyNkZWZpbmUgTlZSQU1fU0lHX1NQCTB4MDIJLyogc3VwcG9ydCBwcm9jZXNzb3IgKi8KKyNkZWZpbmUgTlZSQU1fU0lHX09GCTB4NTAJLyogb3BlbiBmaXJtd2FyZSBjb25maWcgKi8KKyNkZWZpbmUgTlZSQU1fU0lHX0ZXCTB4NTEJLyogZ2VuZXJhbCBmaXJtd2FyZSAqLworI2RlZmluZSBOVlJBTV9TSUdfSFcJMHg1MgkvKiBoYXJkd2FyZSAoVlBEKSAqLworI2RlZmluZSBOVlJBTV9TSUdfRkxJUAkweDVhCS8qIEFwcGxlIGZsaXAvZmxvcCBoZWFkZXIgKi8KKyNkZWZpbmUgTlZSQU1fU0lHX0FQUEwJMHg1ZgkvKiBBcHBsZSAic3lzdGVtIiAoPz8/KSAqLworI2RlZmluZSBOVlJBTV9TSUdfU1lTCTB4NzAJLyogc3lzdGVtIGVudiB2YXJzICovCisjZGVmaW5lIE5WUkFNX1NJR19DRkcJMHg3MQkvKiBjb25maWcgZGF0YSAqLworI2RlZmluZSBOVlJBTV9TSUdfRUxPRwkweDcyCS8qIGVycm9yIGxvZyAqLworI2RlZmluZSBOVlJBTV9TSUdfVkVORAkweDdlCS8qIHZlbmRvciBkZWZpbmVkICovCisjZGVmaW5lIE5WUkFNX1NJR19GUkVFCTB4N2YJLyogRnJlZSBzcGFjZSAqLworI2RlZmluZSBOVlJBTV9TSUdfT1MJMHhhMAkvKiBPUyBkZWZpbmVkICovCisjZGVmaW5lIE5WUkFNX1NJR19QQU5JQwkweGExCS8qIEFwcGxlIE9TWCAicGFuaWMiICovCisKKy8qIElmIGNoYW5nZSB0aGlzIHNpemUsIHRoZW4gY2hhbmdlIHRoZSBzaXplIG9mIE5WTkFNRV9MRU4gKi8KK3N0cnVjdCBudnJhbV9oZWFkZXIgeworCXVuc2lnbmVkIGNoYXIgc2lnbmF0dXJlOworCXVuc2lnbmVkIGNoYXIgY2hlY2tzdW07CisJdW5zaWduZWQgc2hvcnQgbGVuZ3RoOworCWNoYXIgbmFtZVsxMl07Cit9OworCitzdHJ1Y3QgbnZyYW1fcGFydGl0aW9uIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHBhcnRpdGlvbjsKKwlzdHJ1Y3QgbnZyYW1faGVhZGVyIGhlYWRlcjsKKwl1bnNpZ25lZCBpbnQgaW5kZXg7Cit9OworCisKK2V4dGVybiBpbnQgbnZyYW1fd3JpdGVfZXJyb3JfbG9nKGNoYXIgKiBidWZmLCBpbnQgbGVuZ3RoLCB1bnNpZ25lZCBpbnQgZXJyX3R5cGUpOworZXh0ZXJuIGludCBudnJhbV9yZWFkX2Vycm9yX2xvZyhjaGFyICogYnVmZiwgaW50IGxlbmd0aCwgdW5zaWduZWQgaW50ICogZXJyX3R5cGUpOworZXh0ZXJuIGludCBudnJhbV9jbGVhcl9lcnJvcl9sb2codm9pZCk7CitleHRlcm4gc3RydWN0IG52cmFtX3BhcnRpdGlvbiAqbnZyYW1fZmluZF9wYXJ0aXRpb24oaW50IHNpZywgY29uc3QgY2hhciAqbmFtZSk7CisKK2V4dGVybiBpbnQgcFNlcmllc19udnJhbV9pbml0KHZvaWQpOworZXh0ZXJuIGludCBwbWFjX252cmFtX2luaXQodm9pZCk7CisKKy8qIFBvd2VyTWFjIHNwZWNpZmljIG52cmFtIHN0dWZmcyAqLworCitlbnVtIHsKKwlwbWFjX252cmFtX09GLAkJLyogT3BlbiBGaXJtd2FyZSBwYXJ0aXRpb24gKi8KKwlwbWFjX252cmFtX1hQUkFNLAkvKiBNYWNPUyBYUFJBTSBwYXJ0aXRpb24gKi8KKwlwbWFjX252cmFtX05SCQkvKiBNYWNPUyBOYW1lIFJlZ2lzdHJ5IHBhcnRpdGlvbiAqLworfTsKKworLyogUmV0dXJuIHBhcnRpdGlvbiBvZmZzZXQgaW4gbnZyYW0gKi8KK2V4dGVybiBpbnQJcG1hY19nZXRfcGFydGl0aW9uKGludCBwYXJ0aXRpb24pOworCisvKiBEaXJlY3QgYWNjZXNzIHRvIFhQUkFNIG9uIFBvd2VyTWFjcyAqLworZXh0ZXJuIHU4CXBtYWNfeHByYW1fcmVhZChpbnQgeHBhZGRyKTsKK2V4dGVybiB2b2lkCXBtYWNfeHByYW1fd3JpdGUoaW50IHhwYWRkciwgdTggZGF0YSk7CisKKy8qIFN5bmNocm9uaXplIE5WUkFNICovCitleHRlcm4gaW50CW52cmFtX3N5bmModm9pZCk7CisKKy8qIFNvbWUgb2Zmc2V0cyBpbiBYUFJBTSAqLworI2RlZmluZSBQTUFDX1hQUkFNX01BQ0hJTkVfTE9DCTB4ZTQKKyNkZWZpbmUgUE1BQ19YUFJBTV9TT1VORF9WT0xVTUUJMHgwOAorCisvKiBNYWNoaW5lIGxvY2F0aW9uIHN0cnVjdHVyZSBpbiBQb3dlck1hYyBYUFJBTSAqLworc3RydWN0IHBtYWNfbWFjaGluZV9sb2NhdGlvbiB7CisJdW5zaWduZWQgaW50CWxhdGl0dWRlOwkvKiAyKzMwIGJpdCBGcmFjdGlvbmFsIG51bWJlciAqLworCXVuc2lnbmVkIGludAlsb25naXR1ZGU7CS8qIDIrMzAgYml0IEZyYWN0aW9uYWwgbnVtYmVyICovCisJdW5zaWduZWQgaW50CWRlbHRhOwkJLyogbWl4IG9mIEdNVCBkZWx0YSBhbmQgRExTICovCit9OworCisvKgorICogL2Rldi9udnJhbSBpb2N0bHMKKyAqCisgKiBOb3RlIHRoYXQgUE1BQ19OVlJBTV9HRVRfT0ZGU0VUIGlzIHN0aWxsIHN1cHBvcnRlZCwgYnV0IGlzCisgKiBkZWZpbml0ZWx5IG9ic29sZXRlLiBEbyBub3QgdXNlIGl0IGlmIHlvdSBjYW4gYXZvaWQgaXQKKyAqLworCisjZGVmaW5lIE9CU09MRVRFX1BNQUNfTlZSQU1fR0VUX09GRlNFVCBcCisJCQkJX0lPV1IoJ3AnLCAweDQwLCBpbnQpCisKKyNkZWZpbmUgSU9DX05WUkFNX0dFVF9PRkZTRVQJX0lPV1IoJ3AnLCAweDQyLCBpbnQpCS8qIEdldCBOVlJBTSBwYXJ0aXRpb24gb2Zmc2V0ICovCisKKyNlbmRpZiAvKiBfUFBDNjRfTlZSQU1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvb2ZfZGV2aWNlLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9vZl9kZXZpY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmMxMzZlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvb2ZfZGV2aWNlLmgKQEAgLTAsMCArMSwyIEBACisjaW5jbHVkZSA8YXNtLXBwYy9vZl9kZXZpY2UuaD4KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvcFNlcmllc19yZWNvbmZpZy5oIGIvaW5jbHVkZS9hc20tcHBjNjQvcFNlcmllc19yZWNvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwZGIxZWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9wU2VyaWVzX3JlY29uZmlnLmgKQEAgLTAsMCArMSwyNSBAQAorI2lmbmRlZiBfUFBDNjRfUFNFUklFU19SRUNPTkZJR19ICisjZGVmaW5lIF9QUEM2NF9QU0VSSUVTX1JFQ09ORklHX0gKKworI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CisKKy8qCisgKiBVc2UgdGhpcyBBUEkgaWYgeW91ciBjb2RlIG5lZWRzIHRvIGtub3cgYWJvdXQgT0YgZGV2aWNlIG5vZGVzIGJlaW5nCisgKiBhZGRlZCBvciByZW1vdmVkIG9uIHBTZXJpZXMgc3lzdGVtcy4KKyAqLworCisjZGVmaW5lIFBTRVJJRVNfUkVDT05GSUdfQUREICAgIDB4MDAwMQorI2RlZmluZSBQU0VSSUVTX1JFQ09ORklHX1JFTU9WRSAweDAwMDIKKworI2lmZGVmIENPTkZJR19QUENfUFNFUklFUworZXh0ZXJuIGludCBwU2VyaWVzX3JlY29uZmlnX25vdGlmaWVyX3JlZ2lzdGVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqKTsKK2V4dGVybiB2b2lkIHBTZXJpZXNfcmVjb25maWdfbm90aWZpZXJfdW5yZWdpc3RlcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKik7CisjZWxzZSAvKiAhQ09ORklHX1BQQ19QU0VSSUVTICovCitzdGF0aWMgaW5saW5lIGludCBwU2VyaWVzX3JlY29uZmlnX25vdGlmaWVyX3JlZ2lzdGVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCit7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgcFNlcmllc19yZWNvbmZpZ19ub3RpZmllcl91bnJlZ2lzdGVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpIHsgfQorI2VuZGlmIC8qIENPTkZJR19QUENfUFNFUklFUyAqLworCisjZW5kaWYgLyogX1BQQzY0X1BTRVJJRVNfUkVDT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvcGFjYS5oIGIvaW5jbHVkZS9hc20tcHBjNjQvcGFjYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMDIyM2IKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9wYWNhLmgKQEAgLTAsMCArMSwxMTkgQEAKKyNpZm5kZWYgX1BQQzY0X1BBQ0FfSAorI2RlZmluZSBfUFBDNjRfUEFDQV9ICisKKy8qCisgKiBpbmNsdWRlL2FzbS1wcGM2NC9wYWNhLmgKKyAqCisgKiBUaGlzIGNvbnRyb2wgYmxvY2sgZGVmaW5lcyB0aGUgUEFDQSB3aGljaCBkZWZpbmVzIHRoZSBwcm9jZXNzb3IgCisgKiBzcGVjaWZpYyBkYXRhIGZvciBlYWNoIGxvZ2ljYWwgcHJvY2Vzc29yIG9uIHRoZSBzeXN0ZW0uICAKKyAqIFRoZXJlIGFyZSBzb21lIHBvaW50ZXJzIGRlZmluZWQgdGhhdCBhcmUgdXRpbGl6ZWQgYnkgUExJQy4KKyAqCisgKiBDIDIwMDEgUFBDIDY0IFRlYW0sIElCTSBDb3JwCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLyAgICAKKworI2luY2x1ZGUJPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUJPGFzbS90eXBlcy5oPgorI2luY2x1ZGUJPGFzbS9scHBhY2EuaD4KKyNpbmNsdWRlCTxhc20vaVNlcmllcy9JdExwUmVnU2F2ZS5oPgorI2luY2x1ZGUJPGFzbS9tbXUuaD4KKworcmVnaXN0ZXIgc3RydWN0IHBhY2Ffc3RydWN0ICpsb2NhbF9wYWNhIGFzbSgicjEzIik7CisjZGVmaW5lIGdldF9wYWNhKCkJbG9jYWxfcGFjYQorCitzdHJ1Y3QgdGFza19zdHJ1Y3Q7CitzdHJ1Y3QgSXRMcFF1ZXVlOworCisvKgorICogRGVmaW5lcyB0aGUgbGF5b3V0IG9mIHRoZSBwYWNhLgorICoKKyAqIFRoaXMgc3RydWN0dXJlIGlzIG5vdCBkaXJlY3RseSBhY2Nlc3NlZCBieSBmaXJtd2FyZSBvciB0aGUgc2VydmljZQorICogcHJvY2Vzc29yIGV4Y2VwdCBmb3IgdGhlIGZpcnN0IHR3byBwb2ludGVycyB0aGF0IHBvaW50IHRvIHRoZQorICogbHBwYWNhIGFyZWEgYW5kIHRoZSBJdExwUmVnU2F2ZSBhcmVhIGZvciB0aGlzIENQVS4gIEJvdGggdGhlCisgKiBscHBhY2EgYW5kIEl0THBSZWdTYXZlIG9iamVjdHMgYXJlIGN1cnJlbnRseSBjb250YWluZWQgd2l0aGluIHRoZQorICogUEFDQSBidXQgdGhleSBkbyBub3QgbmVlZCB0byBiZS4KKyAqLworc3RydWN0IHBhY2Ffc3RydWN0IHsKKwkvKgorCSAqIEJlY2F1c2UgaHdfY3B1X2lkLCB1bmxpa2Ugb3RoZXIgcGFjYSBmaWVsZHMsIGlzIGFjY2Vzc2VkCisJICogcm91dGluZWx5IGZyb20gb3RoZXIgQ1BVcyAoZnJvbSB0aGUgSVJRIGNvZGUpLCB3ZSBzdGljayB0bworCSAqIHJlYWQtb25seSAoYWZ0ZXIgYm9vdCkgZmllbGRzIGluIHRoZSBmaXJzdCBjYWNoZWxpbmUgdG8KKwkgKiBhdm9pZCBjYWNoZWxpbmUgYm91bmNpbmcuCisJICovCisKKwkvKgorCSAqIE1BR0lDOiBUaGVzZSBmaXJzdCB0d28gcG9pbnRlcnMgY2FuJ3QgYmUgbW92ZWQgLSB0aGV5J3JlCisJICogYWNjZXNzZWQgYnkgdGhlIGZpcm13YXJlCisJICovCisJc3RydWN0IGxwcGFjYSAqbHBwYWNhX3B0cjsJLyogUG9pbnRlciB0byBMcFBhY2EgZm9yIFBMSUMgKi8KKwlzdHJ1Y3QgSXRMcFJlZ1NhdmUgKnJlZ19zYXZlX3B0cjsgLyogUG9pbnRlciB0byBMcFJlZ1NhdmUgZm9yIFBMSUMgKi8KKworCS8qCisJICogTUFHSUM6IHRoZSBzcGlubG9jayBmdW5jdGlvbnMgaW4gYXJjaC9wcGM2NC9saWIvbG9ja3MuYworCSAqIGxvYWQgbG9ja190b2tlbiBhbmQgcGFjYV9pbmRleCB3aXRoIGEgc2luZ2xlIGx3egorCSAqIGluc3RydWN0aW9uLiAgVGhleSBtdXN0IHRyYXZlbCB0b2dldGhlciBhbmQgYmUgcHJvcGVybHkKKwkgKiBhbGlnbmVkLgorCSAqLworCXUxNiBsb2NrX3Rva2VuOwkJCS8qIENvbnN0YW50IDB4ODAwMCwgdXNlZCBpbiBsb2NrcyAqLworCXUxNiBwYWNhX2luZGV4OwkJCS8qIExvZ2ljYWwgcHJvY2Vzc29yIG51bWJlciAqLworCisJdTMyIGRlZmF1bHRfZGVjcjsJCS8qIERlZmF1bHQgZGVjcmVtZW50ZXIgdmFsdWUgKi8KKwlzdHJ1Y3QgSXRMcFF1ZXVlICpscHF1ZXVlX3B0cjsJLyogTHBRdWV1ZSBoYW5kbGVkIGJ5IHRoaXMgQ1BVICovCisJdTY0IGtlcm5lbF90b2M7CQkJLyogS2VybmVsIFRPQyBhZGRyZXNzICovCisJdTY0IHN0YWJfcmVhbDsJCQkvKiBBYnNvbHV0ZSBhZGRyZXNzIG9mIHNlZ21lbnQgdGFibGUgKi8KKwl1NjQgc3RhYl9hZGRyOwkJCS8qIFZpcnR1YWwgYWRkcmVzcyBvZiBzZWdtZW50IHRhYmxlICovCisJdm9pZCAqZW1lcmdlbmN5X3NwOwkJLyogcG9pbnRlciB0byBlbWVyZ2VuY3kgc3RhY2sgKi8KKwlzMTYgaHdfY3B1X2lkOwkJCS8qIFBoeXNpY2FsIHByb2Nlc3NvciBudW1iZXIgKi8KKwl1OCBjcHVfc3RhcnQ7CQkJLyogQXQgc3RhcnR1cCwgcHJvY2Vzc29yIHNwaW5zIHVudGlsICovCisJCQkJCS8qIHRoaXMgYmVjb21lcyBub24temVyby4gKi8KKworCS8qCisJICogTm93LCBzdGFydGluZyBpbiBjYWNoZWxpbmUgMiwgdGhlIGV4Y2VwdGlvbiBzYXZlIGFyZWFzCisJICovCisJdTY0IGV4Z2VuWzhdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMHg4MCkpKTsgLyogdXNlZCBmb3IgbW9zdCBpbnRlcnJ1cHRzL2V4Y2VwdGlvbnMgKi8KKwl1NjQgZXhtY1s4XTsJCS8qIHVzZWQgZm9yIG1hY2hpbmUgY2hlY2tzICovCisJdTY0IGV4c2xiWzhdOwkJLyogdXNlZCBmb3IgU0xCL3NlZ21lbnQgdGFibGUgbWlzc2VzCisJCQkJICogb24gdGhlIGxpbmVhciBtYXBwaW5nICovCisJbW1fY29udGV4dF90IGNvbnRleHQ7CisJdTE2IHNsYl9jYWNoZVtTTEJfQ0FDSEVfRU5UUklFU107CisJdTE2IHNsYl9jYWNoZV9wdHI7CisKKwkvKgorCSAqIHRoZW4gbWlzY2VsbGFuZW91cyByZWFkLXdyaXRlIGZpZWxkcworCSAqLworCXN0cnVjdCB0YXNrX3N0cnVjdCAqX19jdXJyZW50OwkvKiBQb2ludGVyIHRvIGN1cnJlbnQgKi8KKwl1NjQga3N0YWNrOwkJCS8qIFNhdmVkIEtlcm5lbCBzdGFjayBhZGRyICovCisJdTY0IHN0YWJfcnI7CQkJLyogc3RhYi9zbGIgcm91bmQtcm9iaW4gY291bnRlciAqLworCXU2NCBuZXh0X2ppZmZ5X3VwZGF0ZV90YjsJLyogVEIgdmFsdWUgZm9yIG5leHQgamlmZnkgdXBkYXRlICovCisJdTY0IHNhdmVkX3IxOwkJCS8qIHIxIHNhdmUgZm9yIFJUQVMgY2FsbHMgKi8KKwl1NjQgc2F2ZWRfbXNyOwkJCS8qIE1TUiBzYXZlZCBoZXJlIGJ5IGVudGVyX3J0YXMgKi8KKwl1MzIgbHBldmVudF9jb3VudDsJCS8qIGxwZXZlbnRzIHByb2Nlc3NlZCAgKi8KKwl1OCBwcm9jX2VuYWJsZWQ7CQkvKiBpcnEgc29mdC1lbmFibGUgZmxhZyAqLworCisJLyogbm90IHlldCB1c2VkICovCisJdTY0IGV4ZHNpWzhdOwkJLyogdXNlZCBmb3IgbGluZWFyIG1hcHBpbmcgaGFzaCB0YWJsZSBtaXNzZXMgKi8KKworCS8qCisJICogaVNlcmllcyBzdHJ1Y3R1cmUgd2hpY2ggdGhlIGh5cGVydmlzb3Iga25vd3MgYWJvdXQgLQorCSAqIHRoaXMgc3RydWN0dXJlIHNob3VsZCBub3QgY3Jvc3MgYSBwYWdlIGJvdW5kYXJ5LgorCSAqIFRoZSB2cGFfaW5pdC9yZWdpc3Rlcl92cGEgY2FsbCBpcyBub3cga25vd24gdG8gZmFpbCBpZiB0aGUKKwkgKiBscHBhY2Egc3RydWN0dXJlIGNyb3NzZXMgYSBwYWdlIGJvdW5kYXJ5LgorCSAqIFRoZSBscHBhY2EgaXMgYWxzbyB1c2VkIG9uIFBPV0VSNSBwU2VyaWVzIGJveGVzLgorCSAqIFRoZSBscHBhY2EgaXMgNjQwIGJ5dGVzIGxvbmcsIGFuZCBjYW5ub3QgcmVhZGlseSBjaGFuZ2UKKwkgKiBzaW5jZSB0aGUgaHlwZXJ2aXNvciBrbm93cyBpdHMgbGF5b3V0LCBzbyBhIDFrQgorCSAqIGFsaWdubWVudCB3aWxsIHN1ZmZpY2UgdG8gZW5zdXJlIHRoYXQgaXQgZG9lc24ndAorCSAqIGNyb3NzIGEgcGFnZSBib3VuZGFyeS4KKwkgKi8KKwlzdHJ1Y3QgbHBwYWNhIGxwcGFjYSBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXygweDQwMCkpKTsKKyNpZmRlZiBDT05GSUdfUFBDX0lTRVJJRVMKKwlzdHJ1Y3QgSXRMcFJlZ1NhdmUgcmVnX3NhdmU7CisjZW5kaWYKK307CisKK2V4dGVybiBzdHJ1Y3QgcGFjYV9zdHJ1Y3QgcGFjYVtdOworCisjZW5kaWYgLyogX1BQQzY0X1BBQ0FfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvcGFnZS5oIGIvaW5jbHVkZS9hc20tcHBjNjQvcGFnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwZTBmMTkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9wYWdlLmgKQEAgLTAsMCArMSwyNjEgQEAKKyNpZm5kZWYgX1BQQzY0X1BBR0VfSAorI2RlZmluZSBfUFBDNjRfUEFHRV9ICisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgUFBDNjQgVGVhbSwgSUJNIENvcnAKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2lmZGVmIF9fQVNTRU1CTFlfXworICAjZGVmaW5lIEFTTV9DT05TVCh4KSB4CisjZWxzZQorICAjZGVmaW5lIF9fQVNNX0NPTlNUKHgpIHgjI1VMCisgICNkZWZpbmUgQVNNX0NPTlNUKHgpIF9fQVNNX0NPTlNUKHgpCisjZW5kaWYKKworLyogUEFHRV9TSElGVCBkZXRlcm1pbmVzIHRoZSBwYWdlIHNpemUgKi8KKyNkZWZpbmUgUEFHRV9TSElGVAkxMgorI2RlZmluZSBQQUdFX1NJWkUJKEFTTV9DT05TVCgxKSA8PCBQQUdFX1NISUZUKQorI2RlZmluZSBQQUdFX01BU0sJKH4oUEFHRV9TSVpFLTEpKQorI2RlZmluZSBQQUdFX09GRlNFVF9NQVNLIChQQUdFX1NJWkUtMSkKKworI2RlZmluZSBTSURfU0hJRlQgICAgICAgMjgKKyNkZWZpbmUgU0lEX01BU0sgICAgICAgIDB4ZmZmZmZmZmZmVUwKKyNkZWZpbmUgRVNJRF9NQVNLCTB4ZmZmZmZmZmZmMDAwMDAwMFVMCisjZGVmaW5lIEdFVF9FU0lEKHgpICAgICAoKCh4KSA+PiBTSURfU0hJRlQpICYgU0lEX01BU0spCisKKyNkZWZpbmUgSFBBR0VfU0hJRlQJMjQKKyNkZWZpbmUgSFBBR0VfU0laRQkoKDFVTCkgPDwgSFBBR0VfU0hJRlQpCisjZGVmaW5lIEhQQUdFX01BU0sJKH4oSFBBR0VfU0laRSAtIDEpKQorCisjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQorCisjZGVmaW5lIEhVR0VUTEJfUEFHRV9PUkRFUgkoSFBBR0VfU0hJRlQgLSBQQUdFX1NISUZUKQorCisvKiBGb3IgNjQtYml0IHByb2Nlc3NlcyB0aGUgaHVnZXBhZ2UgcmFuZ2UgaXMgMVQtMS41VCAqLworI2RlZmluZSBUQVNLX0hQQUdFX0JBU0UgQVNNX0NPTlNUKDB4MDAwMDAxMDAwMDAwMDAwMCkKKyNkZWZpbmUgVEFTS19IUEFHRV9FTkQgCUFTTV9DT05TVCgweDAwMDAwMTgwMDAwMDAwMDApCisKKyNkZWZpbmUgTE9XX0VTSURfTUFTSyhhZGRyLCBsZW4pCSgoKDFVIDw8IChHRVRfRVNJRChhZGRyK2xlbi0xKSsxKSkgXAorCSAgIAkgICAgICAgICAgICAgICAgCS0gKDFVIDw8IEdFVF9FU0lEKGFkZHIpKSkgJiAweGZmZmYpCisKKyNkZWZpbmUgQVJDSF9IQVNfSFVHRVBBR0VfT05MWV9SQU5HRQorI2RlZmluZSBBUkNIX0hBU19QUkVQQVJFX0hVR0VQQUdFX1JBTkdFCisKKyNkZWZpbmUgdG91Y2hlc19odWdlcGFnZV9sb3dfcmFuZ2UobW0sIGFkZHIsIGxlbikgXAorCShMT1dfRVNJRF9NQVNLKChhZGRyKSwgKGxlbikpICYgbW0tPmNvbnRleHQuaHRsYl9zZWdzKQorI2RlZmluZSB0b3VjaGVzX2h1Z2VwYWdlX2hpZ2hfcmFuZ2UoYWRkciwgbGVuKSBcCisJKCgoYWRkcikgPiAoVEFTS19IUEFHRV9CQVNFLShsZW4pKSkgJiYgKChhZGRyKSA8IFRBU0tfSFBBR0VfRU5EKSkKKworI2RlZmluZSBfX3dpdGhpbl9odWdlcGFnZV9sb3dfcmFuZ2UoYWRkciwgbGVuLCBzZWdtYXNrKSBcCisJKChMT1dfRVNJRF9NQVNLKChhZGRyKSwgKGxlbikpIHwgKHNlZ21hc2spKSA9PSAoc2VnbWFzaykpCisjZGVmaW5lIHdpdGhpbl9odWdlcGFnZV9sb3dfcmFuZ2UoYWRkciwgbGVuKSBcCisJX193aXRoaW5faHVnZXBhZ2VfbG93X3JhbmdlKChhZGRyKSwgKGxlbiksIFwKKwkJCQkgICAgY3VycmVudC0+bW0tPmNvbnRleHQuaHRsYl9zZWdzKQorI2RlZmluZSB3aXRoaW5faHVnZXBhZ2VfaGlnaF9yYW5nZShhZGRyLCBsZW4pICgoKGFkZHIpID49IFRBU0tfSFBBR0VfQkFTRSkgXAorCSAgJiYgKChhZGRyKSsobGVuKSA8PSBUQVNLX0hQQUdFX0VORCkgJiYgKChhZGRyKSsobGVuKSA+PSAoYWRkcikpKQorCisjZGVmaW5lIGlzX2h1Z2VwYWdlX29ubHlfcmFuZ2UobW0sIGFkZHIsIGxlbikgXAorCSh0b3VjaGVzX2h1Z2VwYWdlX2hpZ2hfcmFuZ2UoKGFkZHIpLCAobGVuKSkgfHwgXAorCSAgdG91Y2hlc19odWdlcGFnZV9sb3dfcmFuZ2UoKG1tKSwgKGFkZHIpLCAobGVuKSkpCisjZGVmaW5lIEhBVkVfQVJDSF9IVUdFVExCX1VOTUFQUEVEX0FSRUEKKworI2RlZmluZSBpbl9odWdlcGFnZV9hcmVhKGNvbnRleHQsIGFkZHIpIFwKKwkoY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfMTZNX1BBR0UpICYmIFwKKwkgKCAoKChhZGRyKSA+PSBUQVNLX0hQQUdFX0JBU0UpICYmICgoYWRkcikgPCBUQVNLX0hQQUdFX0VORCkpIHx8IFwKKwkgICAoICgoYWRkcikgPCAweDEwMDAwMDAwMEwpICYmIFwKKwkgICAgICgoMSA8PCBHRVRfRVNJRChhZGRyKSkgJiAoY29udGV4dCkuaHRsYl9zZWdzKSApICkgKQorCisjZWxzZSAvKiAhQ09ORklHX0hVR0VUTEJfUEFHRSAqLworCisjZGVmaW5lIGluX2h1Z2VwYWdlX2FyZWEobW0sIGFkZHIpCTAKKworI2VuZGlmIC8qICFDT05GSUdfSFVHRVRMQl9QQUdFICovCisKKy8qIGFsaWduIGFkZHIgb24gYSBzaXplIGJvdW5kYXJ5IC0gYWRqdXN0IGFkZHJlc3MgdXAvZG93biBpZiBuZWVkZWQgKi8KKyNkZWZpbmUgX0FMSUdOX1VQKGFkZHIsc2l6ZSkJKCgoYWRkcikrKChzaXplKS0xKSkmKH4oKHNpemUpLTEpKSkKKyNkZWZpbmUgX0FMSUdOX0RPV04oYWRkcixzaXplKQkoKGFkZHIpJih+KChzaXplKS0xKSkpCisKKy8qIGFsaWduIGFkZHIgb24gYSBzaXplIGJvdW5kYXJ5IC0gYWRqdXN0IGFkZHJlc3MgdXAgaWYgbmVlZGVkICovCisjZGVmaW5lIF9BTElHTihhZGRyLHNpemUpICAgICBfQUxJR05fVVAoYWRkcixzaXplKQorCisvKiB0byBhbGlnbiB0aGUgcG9pbnRlciB0byB0aGUgKG5leHQpIGRvdWJsZSB3b3JkIGJvdW5kYXJ5ICovCisjZGVmaW5lIERPVUJMRVdPUkRfQUxJR04oYWRkcikJX0FMSUdOKGFkZHIsc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKQorCisvKiB0byBhbGlnbiB0aGUgcG9pbnRlciB0byB0aGUgKG5leHQpIHBhZ2UgYm91bmRhcnkgKi8KKyNkZWZpbmUgUEFHRV9BTElHTihhZGRyKQlfQUxJR04oYWRkciwgUEFHRV9TSVpFKQorCisjaWZkZWYgX19LRVJORUxfXworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNpbmNsdWRlIDxhc20vY2FjaGUuaD4KKworI3VuZGVmIFNUUklDVF9NTV9UWVBFQ0hFQ0tTCisKKyNkZWZpbmUgUkVHSU9OX1NJWkUgICA0VUwKKyNkZWZpbmUgUkVHSU9OX1NISUZUICA2MFVMCisjZGVmaW5lIFJFR0lPTl9NQVNLICAgKCgoMVVMPDxSRUdJT05fU0laRSktMVVMKTw8UkVHSU9OX1NISUZUKQorI2RlZmluZSBSRUdJT05fU1RSSURFICgxVUwgPDwgUkVHSU9OX1NISUZUKQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGNsZWFyX3BhZ2Uodm9pZCAqYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIGxpbmVzLCBsaW5lX3NpemU7CisKKwlsaW5lX3NpemUgPSBwcGM2NF9jYWNoZXMuZGxpbmVfc2l6ZTsKKwlsaW5lcyA9IHBwYzY0X2NhY2hlcy5kbGluZXNfcGVyX3BhZ2U7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkibXRjdHIgIAklMQkjIGNsZWFyX3BhZ2VcblwKKzE6ICAgICAgZGNieiAgCTAsJTBcblwKKwlhZGQJJTAsJTAsJTNcblwKKwliZG56KwkxYiIKKyAgICAgICAgOiAiPXIiIChhZGRyKQorICAgICAgICA6ICJyIiAobGluZXMpLCAiMCIgKGFkZHIpLCAiciIgKGxpbmVfc2l6ZSkKKwk6ICJjdHIiLCAibWVtb3J5Iik7Cit9CisKK2V4dGVybiB2b2lkIGNvcHlfcGFnZSh2b2lkICp0bywgdm9pZCAqZnJvbSk7CitzdHJ1Y3QgcGFnZTsKK2V4dGVybiB2b2lkIGNsZWFyX3VzZXJfcGFnZSh2b2lkICpwYWdlLCB1bnNpZ25lZCBsb25nIHZhZGRyLCBzdHJ1Y3QgcGFnZSAqcGcpOworZXh0ZXJuIHZvaWQgY29weV91c2VyX3BhZ2Uodm9pZCAqdG8sIHZvaWQgKmZyb20sIHVuc2lnbmVkIGxvbmcgdmFkZHIsIHN0cnVjdCBwYWdlICpwKTsKKworI2lmZGVmIFNUUklDVF9NTV9UWVBFQ0hFQ0tTCisvKgorICogVGhlc2UgYXJlIHVzZWQgdG8gbWFrZSB1c2Ugb2YgQyB0eXBlLWNoZWNraW5nLiAgCisgKiBFbnRyaWVzIGluIHRoZSBwdGUgdGFibGUgYXJlIDY0Yiwgd2hpbGUgZW50cmllcyBpbiB0aGUgcGdkICYgcG1kIGFyZSAzMmIuCisgKi8KK3R5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBwdGU7IH0gcHRlX3Q7Cit0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGludCAgcG1kOyB9IHBtZF90OwordHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBpbnQgIHBnZDsgfSBwZ2RfdDsKK3R5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBwZ3Byb3Q7IH0gcGdwcm90X3Q7CisKKyNkZWZpbmUgcHRlX3ZhbCh4KQkoKHgpLnB0ZSkKKyNkZWZpbmUgcG1kX3ZhbCh4KQkoKHgpLnBtZCkKKyNkZWZpbmUgcGdkX3ZhbCh4KQkoKHgpLnBnZCkKKyNkZWZpbmUgcGdwcm90X3ZhbCh4KQkoKHgpLnBncHJvdCkKKworI2RlZmluZSBfX3B0ZSh4KQkoKHB0ZV90KSB7ICh4KSB9ICkKKyNkZWZpbmUgX19wbWQoeCkJKChwbWRfdCkgeyAoeCkgfSApCisjZGVmaW5lIF9fcGdkKHgpCSgocGdkX3QpIHsgKHgpIH0gKQorI2RlZmluZSBfX3BncHJvdCh4KQkoKHBncHJvdF90KSB7ICh4KSB9ICkKKworI2Vsc2UKKy8qCisgKiAuLiB3aGlsZSB0aGVzZSBtYWtlIGl0IGVhc2llciBvbiB0aGUgY29tcGlsZXIKKyAqLwordHlwZWRlZiB1bnNpZ25lZCBsb25nIHB0ZV90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQgIHBtZF90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQgIHBnZF90OwordHlwZWRlZiB1bnNpZ25lZCBsb25nIHBncHJvdF90OworCisjZGVmaW5lIHB0ZV92YWwoeCkJKHgpCisjZGVmaW5lIHBtZF92YWwoeCkJKHgpCisjZGVmaW5lIHBnZF92YWwoeCkJKHgpCisjZGVmaW5lIHBncHJvdF92YWwoeCkJKHgpCisKKyNkZWZpbmUgX19wdGUoeCkJKHgpCisjZGVmaW5lIF9fcG1kKHgpCSh4KQorI2RlZmluZSBfX3BnZCh4KQkoeCkKKyNkZWZpbmUgX19wZ3Byb3QoeCkJKHgpCisKKyNlbmRpZgorCisvKiBQdXJlIDJebiB2ZXJzaW9uIG9mIGdldF9vcmRlciAqLworc3RhdGljIGlubGluZSBpbnQgZ2V0X29yZGVyKHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlpbnQgb3JkZXI7CisKKwlzaXplID0gKHNpemUtMSkgPj4gKFBBR0VfU0hJRlQtMSk7CisJb3JkZXIgPSAtMTsKKwlkbyB7CisJCXNpemUgPj49IDE7CisJCW9yZGVyKys7CisJfSB3aGlsZSAoc2l6ZSk7CisJcmV0dXJuIG9yZGVyOworfQorCisjZGVmaW5lIF9fcGEoeCkgKCh1bnNpZ25lZCBsb25nKSh4KS1QQUdFX09GRlNFVCkKKworZXh0ZXJuIGludCBwYWdlX2lzX3JhbSh1bnNpZ25lZCBsb25nIHBmbik7CisKK2V4dGVybiB1NjQgcHBjNjRfcGZ0X3NpemU7CQkvKiBMb2cgMiBvZiBwYWdlIHRhYmxlIHNpemUgKi8KKworLyogV2UgZG8gZGVmaW5lIEFUX1NZU0lORk9fRUhEUiBidXQgZG9uJ3QgdXNlIHRoZSBnYXRlIG1lY2FuaXNtICovCisjZGVmaW5lIF9fSEFWRV9BUkNIX0dBVEVfQVJFQQkJMQorCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKyNpZmRlZiBNT0RVTEUKKyNkZWZpbmUgX19wYWdlX2FsaWduZWQgX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oUEFHRV9TSVpFKSkpCisjZWxzZQorI2RlZmluZSBfX3BhZ2VfYWxpZ25lZCBcCisJX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oUEFHRV9TSVpFKSwgXAorCQlfX3NlY3Rpb25fXygiLmRhdGEucGFnZV9hbGlnbmVkIikpKQorI2VuZGlmCisKKworLyogVGhpcyBtdXN0IG1hdGNoIHRoZSAtVHRleHQgbGlua2VyIGFkZHJlc3MgICAgICAgICAgICAqLworLyogTm90ZTogdG9waHlzICYgdG92aXJ0IG1ha2UgYXNzdW1wdGlvbnMgYWJvdXQgaG93ICAgICAqLworLyogICAgICAgS0VSTkVMQkFTRSBpcyBkZWZpbmVkIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLiAqLworLyogICAgICAgV2hlbiBLRVJORUxCQVNFIG1vdmVzLCB0aG9zZSBtYWNyb3MgbWF5IGhhdmUgICAqLworLyogICAgICAgICAgICAgdG8gY2hhbmdlISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQQUdFX09GRlNFVCAgICAgQVNNX0NPTlNUKDB4QzAwMDAwMDAwMDAwMDAwMCkKKyNkZWZpbmUgS0VSTkVMQkFTRSAgICAgIFBBR0VfT0ZGU0VUCisjZGVmaW5lIFZNQUxMT0NCQVNFICAgICBBU01fQ09OU1QoMHhEMDAwMDAwMDAwMDAwMDAwKQorI2RlZmluZSBJT1JFR0lPTkJBU0UgICAgQVNNX0NPTlNUKDB4RTAwMDAwMDAwMDAwMDAwMCkKKworI2RlZmluZSBJT19SRUdJT05fSUQgICAgICAgKElPUkVHSU9OQkFTRT4+UkVHSU9OX1NISUZUKQorI2RlZmluZSBWTUFMTE9DX1JFR0lPTl9JRCAgKFZNQUxMT0NCQVNFPj5SRUdJT05fU0hJRlQpCisjZGVmaW5lIEtFUk5FTF9SRUdJT05fSUQgICAoS0VSTkVMQkFTRT4+UkVHSU9OX1NISUZUKQorI2RlZmluZSBVU0VSX1JFR0lPTl9JRCAgICAgKDBVTCkKKyNkZWZpbmUgUkVHSU9OX0lEKFgpCSAgICgoKHVuc2lnbmVkIGxvbmcpKFgpKT4+UkVHSU9OX1NISUZUKQorCisjZGVmaW5lIF9fYnBuX3RvX2JhKHgpICgoKCh1bnNpZ25lZCBsb25nKSh4KSk8PFBBR0VfU0hJRlQpICsgS0VSTkVMQkFTRSkKKyNkZWZpbmUgX19iYV90b19icG4oeCkgKCgoKHVuc2lnbmVkIGxvbmcpKHgpKSAmIH5SRUdJT05fTUFTSykgPj4gUEFHRV9TSElGVCkKKworI2RlZmluZSBfX3ZhKHgpICgodm9pZCAqKSgodW5zaWduZWQgbG9uZykoeCkgKyBLRVJORUxCQVNFKSkKKworI2lmZGVmIENPTkZJR19ESVNDT05USUdNRU0KKyNkZWZpbmUgcGFnZV90b19wZm4ocGFnZSkJZGlzY29udGlnbWVtX3BhZ2VfdG9fcGZuKHBhZ2UpCisjZGVmaW5lIHBmbl90b19wYWdlKHBmbikJZGlzY29udGlnbWVtX3Bmbl90b19wYWdlKHBmbikKKyNkZWZpbmUgcGZuX3ZhbGlkKHBmbikJCWRpc2NvbnRpZ21lbV9wZm5fdmFsaWQocGZuKQorI2Vsc2UKKyNkZWZpbmUgcGZuX3RvX3BhZ2UocGZuKQkobWVtX21hcCArIChwZm4pKQorI2RlZmluZSBwYWdlX3RvX3BmbihwYWdlKQkoKHVuc2lnbmVkIGxvbmcpKChwYWdlKSAtIG1lbV9tYXApKQorI2RlZmluZSBwZm5fdmFsaWQocGZuKQkJKChwZm4pIDwgbWF4X21hcG5yKQorI2VuZGlmCisKKyNkZWZpbmUgdmlydF90b19wYWdlKGthZGRyKQlwZm5fdG9fcGFnZShfX3BhKGthZGRyKSA+PiBQQUdFX1NISUZUKQorI2RlZmluZSBwZm5fdG9fa2FkZHIocGZuKQlfX3ZhKChwZm4pIDw8IFBBR0VfU0hJRlQpCisKKyNkZWZpbmUgdmlydF9hZGRyX3ZhbGlkKGthZGRyKQlwZm5fdmFsaWQoX19wYShrYWRkcikgPj4gUEFHRV9TSElGVCkKKworLyoKKyAqIFVuZm9ydHVuYXRlbHkgdGhlIFBMVCBpcyBpbiB0aGUgQlNTIGluIHRoZSBQUEMzMiBFTEYgQUJJLAorICogYW5kIG5lZWRzIHRvIGJlIGV4ZWN1dGFibGUuICBUaGlzIG1lYW5zIHRoZSB3aG9sZSBoZWFwIGVuZHMKKyAqIHVwIGJlaW5nIGV4ZWN1dGFibGUuCisgKi8KKyNkZWZpbmUgVk1fREFUQV9ERUZBVUxUX0ZMQUdTMzIJKFZNX1JFQUQgfCBWTV9XUklURSB8IFZNX0VYRUMgfCBcCisJCQkJIFZNX01BWVJFQUQgfCBWTV9NQVlXUklURSB8IFZNX01BWUVYRUMpCisKKyNkZWZpbmUgVk1fREFUQV9ERUZBVUxUX0ZMQUdTNjQJKFZNX1JFQUQgfCBWTV9XUklURSB8IFwKKwkJCQkgVk1fTUFZUkVBRCB8IFZNX01BWVdSSVRFIHwgVk1fTUFZRVhFQykKKworI2RlZmluZSBWTV9EQVRBX0RFRkFVTFRfRkxBR1MgXAorCSh0ZXN0X3RocmVhZF9mbGFnKFRJRl8zMkJJVCkgPyBcCisJIFZNX0RBVEFfREVGQVVMVF9GTEFHUzMyIDogVk1fREFUQV9ERUZBVUxUX0ZMQUdTNjQpCisKKy8qCisgKiBUaGlzIGlzIHRoZSBkZWZhdWx0IGlmIGEgcHJvZ3JhbSBkb2Vzbid0IGhhdmUgYSBQVF9HTlVfU1RBQ0sKKyAqIHByb2dyYW0gaGVhZGVyIGVudHJ5LgorICovCisjZGVmaW5lIFZNX1NUQUNLX0RFRkFVTFRfRkxBR1MJKFZNX1JFQUQgfCBWTV9XUklURSB8IFZNX0VYRUMgfCBcCisJCQkJIFZNX01BWVJFQUQgfCBWTV9NQVlXUklURSB8IFZNX01BWUVYRUMpCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYgLyogX1BQQzY0X1BBR0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvcGFyYW0uaCBiL2luY2x1ZGUvYXNtLXBwYzY0L3BhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZhZDM4ZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L3BhcmFtLmgKQEAgLTAsMCArMSwyOSBAQAorI2lmbmRlZiBfQVNNX1BQQzY0X1BBUkFNX0gKKyNkZWZpbmUgX0FTTV9QUEM2NF9QQVJBTV9ICisKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZmRlZiBfX0tFUk5FTF9fCisjIGRlZmluZSBIWgkJMTAwMAkJLyogSW50ZXJuYWwga2VybmVsIHRpbWVyIGZyZXF1ZW5jeSAqLworIyBkZWZpbmUgVVNFUl9IWgkxMDAJCS8qIC4uIHNvbWUgdXNlciBpbnRlcmZhY2VzIGFyZSBpbiAidGlja3MiICovCisjIGRlZmluZSBDTE9DS1NfUEVSX1NFQwkoVVNFUl9IWikJLyogbGlrZSB0aW1lcygpICovCisjZW5kaWYKKworI2lmbmRlZiBIWgorI2RlZmluZSBIWiAxMDAKKyNlbmRpZgorCisjZGVmaW5lIEVYRUNfUEFHRVNJWkUJNDA5NgorCisjaWZuZGVmIE5PR1JPVVAKKyNkZWZpbmUgTk9HUk9VUAkJKC0xKQorI2VuZGlmCisKKyNkZWZpbmUgTUFYSE9TVE5BTUVMRU4JNjQJLyogbWF4IGxlbmd0aCBvZiBob3N0bmFtZSAqLworCisjZW5kaWYgLyogX0FTTV9QUEM2NF9QQVJBTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9wYXJwb3J0LmggYi9pbmNsdWRlL2FzbS1wcGM2NC9wYXJwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY4ODc0YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L3BhcnBvcnQuaApAQCAtMCwwICsxLDE4IEBACisvKgorICogcGFycG9ydC5oOiBwbGF0Zm9ybS1zcGVjaWZpYyBQQy1zdHlsZSBwYXJwb3J0IGluaXRpYWxpc2F0aW9uCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwICBUaW0gV2F1Z2ggPHRpbUBjeWJlcmVsay5kZW1vbi5jby51az4KKyAqCisgKiBUaGlzIGZpbGUgc2hvdWxkIG9ubHkgYmUgaW5jbHVkZWQgYnkgZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfcGMuYy4KKyAqLworCisjaWZuZGVmIF9BU01fUFBDNjRfUEFSUE9SVF9ICisjZGVmaW5lIF9BU01fUFBDNjRfUEFSUE9SVF9ICisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHBhcnBvcnRfcGNfZmluZF9pc2FfcG9ydHMgKGludCBhdXRvaXJxLCBpbnQgYXV0b2RtYSk7CitzdGF0aWMgaW50IF9fZGV2aW5pdCBwYXJwb3J0X3BjX2ZpbmRfbm9ucGNpX3BvcnRzIChpbnQgYXV0b2lycSwgaW50IGF1dG9kbWEpCit7CisJcmV0dXJuIHBhcnBvcnRfcGNfZmluZF9pc2FfcG9ydHMgKGF1dG9pcnEsIGF1dG9kbWEpOworfQorCisjZW5kaWYgLyogIShfQVNNX1BQQ19QQVJQT1JUX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9wY2ktYnJpZGdlLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9wY2ktYnJpZGdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRmOTAyMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L3BjaS1icmlkZ2UuaApAQCAtMCwwICsxLDkwIEBACisjaWZkZWYgX19LRVJORUxfXworI2lmbmRlZiBfQVNNX1BDSV9CUklER0VfSAorI2RlZmluZSBfQVNNX1BDSV9CUklER0VfSAorCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKy8qCisgKiBTdHJ1Y3R1cmUgb2YgYSBQQ0kgY29udHJvbGxlciAoaG9zdCBicmlkZ2UpCisgKi8KK3N0cnVjdCBwY2lfY29udHJvbGxlciB7CisJc3RydWN0IHBjaV9idXMgKmJ1czsKKwljaGFyIGlzX2R5bmFtaWM7CisJdm9pZCAqYXJjaF9kYXRhOworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdF9ub2RlOworCisJaW50IGZpcnN0X2J1c25vOworCWludCBsYXN0X2J1c25vOworCisJdm9pZCBfX2lvbWVtICppb19iYXNlX3ZpcnQ7CisJdW5zaWduZWQgbG9uZyBpb19iYXNlX3BoeXM7CisKKwkvKiBTb21lIG1hY2hpbmVzIGhhdmUgYSBub24gMToxIG1hcHBpbmcgb2YKKwkgKiB0aGUgUENJIG1lbW9yeSBzcGFjZSBpbiB0aGUgQ1BVIGJ1cyBzcGFjZQorCSAqLworCXVuc2lnbmVkIGxvbmcgcGNpX21lbV9vZmZzZXQ7CisJdW5zaWduZWQgbG9uZyBwY2lfaW9fc2l6ZTsKKworCXN0cnVjdCBwY2lfb3BzICpvcHM7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50IF9faW9tZW0gKmNmZ19hZGRyOworCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgX19pb21lbSAqY2ZnX2RhdGE7CisKKwkvKiBDdXJyZW50bHksIHdlIGxpbWl0IG91cnNlbHZlcyB0byAxIElPIHJhbmdlIGFuZCAzIG1lbQorCSAqIHJhbmdlcyBzaW5jZSB0aGUgY29tbW9uIHBjaV9idXMgc3RydWN0dXJlIGNhbid0IGhhbmRsZSBtb3JlCisJICovCisJc3RydWN0IHJlc291cmNlIGlvX3Jlc291cmNlOworCXN0cnVjdCByZXNvdXJjZSBtZW1fcmVzb3VyY2VzWzNdOworCWludCBnbG9iYWxfbnVtYmVyOwkJCisJaW50IGxvY2FsX251bWJlcjsJCQorCXVuc2lnbmVkIGxvbmcgYnVpZDsKKwl1bnNpZ25lZCBsb25nIGRtYV93aW5kb3dfYmFzZV9jdXI7CisJdW5zaWduZWQgbG9uZyBkbWFfd2luZG93X3NpemU7Cit9OworCitzdHJ1Y3QgZGV2aWNlX25vZGUgKmZldGNoX2Rldl9kbihzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKKworLyogR2V0IGEgZGV2aWNlX25vZGUgZnJvbSBhIHBjaV9kZXYuICBUaGlzIGNvZGUgbXVzdCBiZSBmYXN0IGV4Y2VwdCBpbiB0aGUgY2FzZQorICogd2hlcmUgdGhlIHN5c2RhdGEgaXMgaW5jb3JyZWN0IGFuZCBuZWVkcyB0byBiZSBmaXhlZCB1cCAoaG9wZWZ1bGx5IGp1c3Qgb25jZSkKKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBjaV9kZXZpY2VfdG9fT0Zfbm9kZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4gPSBkZXYtPnN5c2RhdGE7CisKKwlpZiAoZG4tPmRldmZuID09IGRldi0+ZGV2Zm4gJiYgZG4tPmJ1c25vID09IGRldi0+YnVzLT5udW1iZXIpCisJCXJldHVybiBkbjsJLyogZmFzdCBwYXRoLiAgc3lzZGF0YSBpcyBnb29kICovCisJZWxzZQorCQlyZXR1cm4gZmV0Y2hfZGV2X2RuKGRldik7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGRldmljZV9ub2RlICpwY2lfYnVzX3RvX09GX25vZGUoc3RydWN0IHBjaV9idXMgKmJ1cykKK3sKKwlpZiAoYnVzLT5zZWxmKQorCQlyZXR1cm4gcGNpX2RldmljZV90b19PRl9ub2RlKGJ1cy0+c2VsZik7CisJZWxzZQorCQlyZXR1cm4gYnVzLT5zeXNkYXRhOyAvKiBNdXN0IGJlIHJvb3QgYnVzIChQSEIpICovCit9CisKK2V4dGVybiB2b2lkIHBjaV9wcm9jZXNzX2JyaWRnZV9PRl9yYW5nZXMoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlLAorCQkJCQkgc3RydWN0IGRldmljZV9ub2RlICpkZXYpOworCitleHRlcm4gaW50IHBjaWJpb3NfcmVtb3ZlX3Jvb3RfYnVzKHN0cnVjdCBwY2lfY29udHJvbGxlciAqcGhiKTsKKworZXh0ZXJuIHZvaWQgcGhic19yZW1hcF9pbyh2b2lkKTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKnBjaV9idXNfdG9faG9zdChzdHJ1Y3QgcGNpX2J1cyAqYnVzKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqYnVzZG4gPSBidXMtPnN5c2RhdGE7CisKKwlCVUdfT04oYnVzZG4gPT0gTlVMTCk7CisJcmV0dXJuIGJ1c2RuLT5waGI7Cit9CisKKyNlbmRpZgorI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L3BjaS5oIGIvaW5jbHVkZS9hc20tcHBjNjQvcGNpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNkNTkzZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L3BjaS5oCkBAIC0wLDAgKzEsMTQyIEBACisjaWZuZGVmIF9fUFBDNjRfUENJX0gKKyNkZWZpbmUgX19QUEM2NF9QQ0lfSAorI2lmZGVmIF9fS0VSTkVMX18KKworLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgorI2luY2x1ZGUgPGFzbS9zY2F0dGVybGlzdC5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9wcm9tLmg+CisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wY2ktZG1hLWNvbXBhdC5oPgorCisjZGVmaW5lIFBDSUJJT1NfTUlOX0lPCQkweDEwMDAKKyNkZWZpbmUgUENJQklPU19NSU5fTUVNCQkweDEwMDAwMDAwCisKK3N0cnVjdCBwY2lfZGV2OworCisjaWZkZWYgQ09ORklHX1BQQ19JU0VSSUVTCisjZGVmaW5lIHBjaWJpb3Nfc2Nhbl9hbGxfZm5zKGEsIGIpCTAKKyNlbHNlCitleHRlcm4gaW50IHBjaWJpb3Nfc2Nhbl9hbGxfZm5zKHN0cnVjdCBwY2lfYnVzICpidXMsIGludCBkZXZmbik7CisjZW5kaWYKKworc3RhdGljIGlubGluZSB2b2lkIHBjaWJpb3Nfc2V0X21hc3RlcihzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCS8qIE5vIHNwZWNpYWwgYnVzIG1hc3RlcmluZyBzZXR1cCBoYW5kbGluZyAqLworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGNpYmlvc19wZW5hbGl6ZV9pc2FfaXJxKGludCBpcnEpCit7CisJLyogV2UgZG9uJ3QgZG8gZHluYW1pYyBQQ0kgSVJRIGFsbG9jYXRpb24gKi8KK30KKworI2RlZmluZSBIQVZFX0FSQ0hfUENJX0dFVF9MRUdBQ1lfSURFX0lSUQorc3RhdGljIGlubGluZSBpbnQgcGNpX2dldF9sZWdhY3lfaWRlX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgY2hhbm5lbCkKK3sKKwlpZiAocHBjX21kLnBjaV9nZXRfbGVnYWN5X2lkZV9pcnEpCisJCXJldHVybiBwcGNfbWQucGNpX2dldF9sZWdhY3lfaWRlX2lycShkZXYsIGNoYW5uZWwpOworCXJldHVybiBjaGFubmVsID8gMTUgOiAxNDsKK30KKworI2RlZmluZSBIQVZFX0FSQ0hfUENJX01XSSAxCitzdGF0aWMgaW5saW5lIGludCBwY2liaW9zX3ByZXBfbXdpKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJLyoKKwkgKiBXZSB3b3VsZCBsaWtlIHRvIGF2b2lkIHRvdWNoaW5nIHRoZSBjYWNoZWxpbmUgc2l6ZSBvciBNV0kgYml0CisJICogYnV0IHdlIGNhbnQgZG8gdGhhdCB3aXRoIHRoZSBjdXJyZW50IHBjaWJpb3NfcHJlcF9td2kgCisJICogaW50ZXJmYWNlLiBwU2VyaWVzIGZpcm13YXJlIHNldHMgdGhlIGNhY2hlbGluZSBzaXplICh3aGljaCBpcyBub3QKKwkgKiB0aGUgY3B1IGNhY2hlbGluZSBzaXplIGluIGFsbCBjYXNlcykgYW5kIGhhcmR3YXJlIHRyZWF0cyBNV0kgCisJICogdGhlIHNhbWUgYXMgbWVtb3J5IHdyaXRlLiBTbyB3ZSBkb250IHRvdWNoIHRoZSBjYWNoZWxpbmUgc2l6ZQorCSAqIGhlcmUgYW5kIGFsbG93IHRoZSBnZW5lcmljIGNvZGUgdG8gc2V0IHRoZSBNV0kgYml0LgorCSAqLworCXJldHVybiAwOworfQorCitleHRlcm4gdW5zaWduZWQgaW50IHBjaWJpb3NfYXNzaWduX2FsbF9idXNzZXModm9pZCk7CisKK2V4dGVybiBzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzIHBjaV9kbWFfb3BzOworCisvKiBGb3IgREFDIERNQSwgd2UgY3VycmVudGx5IGRvbid0IHN1cHBvcnQgaXQgYnkgZGVmYXVsdCwgYnV0CisgKiB3ZSBsZXQgdGhlIHBsYXRmb3JtIG92ZXJyaWRlIHRoaXMKKyAqLworc3RhdGljIGlubGluZSBpbnQgcGNpX2RhY19kbWFfc3VwcG9ydGVkKHN0cnVjdCBwY2lfZGV2ICpod2Rldix1NjQgbWFzaykKK3sKKwlpZiAocGNpX2RtYV9vcHMuZGFjX2RtYV9zdXBwb3J0ZWQpCisJCXJldHVybiBwY2lfZG1hX29wcy5kYWNfZG1hX3N1cHBvcnRlZCgmaHdkZXYtPmRldiwgbWFzayk7CisJcmV0dXJuIDA7Cit9CisKK2V4dGVybiBpbnQgcGNpX2RvbWFpbl9ucihzdHJ1Y3QgcGNpX2J1cyAqYnVzKTsKKworLyogRGVjaWRlIHdoZXRoZXIgdG8gZGlzcGxheSB0aGUgZG9tYWluIG51bWJlciBpbiAvcHJvYyAqLworZXh0ZXJuIGludCBwY2lfcHJvY19kb21haW4oc3RydWN0IHBjaV9idXMgKmJ1cyk7CisKK3N0cnVjdCB2bV9hcmVhX3N0cnVjdDsKKy8qIE1hcCBhIHJhbmdlIG9mIFBDSSBtZW1vcnkgb3IgSS9PIHNwYWNlIGZvciBhIGRldmljZSBpbnRvIHVzZXIgc3BhY2UgKi8KK2ludCBwY2lfbW1hcF9wYWdlX3JhbmdlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCWVudW0gcGNpX21tYXBfc3RhdGUgbW1hcF9zdGF0ZSwgaW50IHdyaXRlX2NvbWJpbmUpOworCisvKiBUZWxsIGRyaXZlcnMvcGNpL3Byb2MuYyB0aGF0IHdlIGhhdmUgcGNpX21tYXBfcGFnZV9yYW5nZSgpICovCisjZGVmaW5lIEhBVkVfUENJX01NQVAJMQorCisvKiBwY2lfdW5tYXBfe3NpbmdsZSxwYWdlfSBpcyBub3QgYSBub3AsIHRodXMuLi4gKi8KKyNkZWZpbmUgREVDTEFSRV9QQ0lfVU5NQVBfQUREUihBRERSX05BTUUpCVwKKwlkbWFfYWRkcl90IEFERFJfTkFNRTsKKyNkZWZpbmUgREVDTEFSRV9QQ0lfVU5NQVBfTEVOKExFTl9OQU1FKQkJXAorCV9fdTMyIExFTl9OQU1FOworI2RlZmluZSBwY2lfdW5tYXBfYWRkcihQVFIsIEFERFJfTkFNRSkJCQlcCisJKChQVFIpLT5BRERSX05BTUUpCisjZGVmaW5lIHBjaV91bm1hcF9hZGRyX3NldChQVFIsIEFERFJfTkFNRSwgVkFMKQkJXAorCSgoKFBUUiktPkFERFJfTkFNRSkgPSAoVkFMKSkKKyNkZWZpbmUgcGNpX3VubWFwX2xlbihQVFIsIExFTl9OQU1FKQkJCVwKKwkoKFBUUiktPkxFTl9OQU1FKQorI2RlZmluZSBwY2lfdW5tYXBfbGVuX3NldChQVFIsIExFTl9OQU1FLCBWQUwpCQlcCisJKCgoUFRSKS0+TEVOX05BTUUpID0gKFZBTCkpCisKKy8qIFRoZSBQQ0kgYWRkcmVzcyBzcGFjZSBkb2VzIGVxdWFsIHRoZSBwaHlzaWNhbCBtZW1vcnkKKyAqIGFkZHJlc3Mgc3BhY2UuICBUaGUgbmV0d29ya2luZyBhbmQgYmxvY2sgZGV2aWNlIGxheWVycyB1c2UKKyAqIHRoaXMgYm9vbGVhbiBmb3IgYm91bmNlIGJ1ZmZlciBkZWNpc2lvbnMuCisgKi8KKyNkZWZpbmUgUENJX0RNQV9CVVNfSVNfUEhZUwkoMCkKKwkKK2V4dGVybiB2b2lkCitwY2liaW9zX3Jlc291cmNlX3RvX2J1cyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgcGNpX2J1c19yZWdpb24gKnJlZ2lvbiwKKwkJCXN0cnVjdCByZXNvdXJjZSAqcmVzKTsKKworZXh0ZXJuIGludAordW5tYXBfYnVzX3JhbmdlKHN0cnVjdCBwY2lfYnVzICpidXMpOworCitleHRlcm4gaW50CityZW1hcF9idXNfcmFuZ2Uoc3RydWN0IHBjaV9idXMgKmJ1cyk7CisKK2V4dGVybiB2b2lkCitwY2liaW9zX2ZpeHVwX2RldmljZV9yZXNvdXJjZXMoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IHBjaV9idXMgKmJ1cyk7CisKK2V4dGVybiBzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmluaXRfcGhiX2R5bmFtaWMoc3RydWN0IGRldmljZV9ub2RlICpkbik7CisKK2V4dGVybiBpbnQgcGNpX3JlYWRfaXJxX2xpbmUoc3RydWN0IHBjaV9kZXYgKmRldik7CisKK2V4dGVybiB2b2lkIHBjaWJpb3NfYWRkX3BsYXRmb3JtX2VudHJpZXMoc3RydWN0IHBjaV9kZXYgKmRldik7CisKK3N0cnVjdCBmaWxlOworZXh0ZXJuIHBncHJvdF90CXBjaV9waHlzX21lbV9hY2Nlc3NfcHJvdChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorCQkJCQkgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJCQkgcGdwcm90X3QgcHJvdCk7CisKKworI2VuZGlmCS8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9fUFBDNjRfUENJX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L3BlcmNwdS5oIGIvaW5jbHVkZS9hc20tcHBjNjQvcGVyY3B1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBhNjU5YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L3BlcmNwdS5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfX0FSQ0hfUFBDNjRfUEVSQ1BVX18KKyNkZWZpbmUgX19BUkNIX1BQQzY0X1BFUkNQVV9fCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wZXJjcHUuaD4KKworI2VuZGlmIC8qIF9fQVJDSF9QUEM2NF9QRVJDUFVfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvcGdhbGxvYy5oIGIvaW5jbHVkZS9hc20tcHBjNjQvcGdhbGxvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2MjMyZDcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9wZ2FsbG9jLmgKQEAgLTAsMCArMSw5MSBAQAorI2lmbmRlZiBfUFBDNjRfUEdBTExPQ19ICisjZGVmaW5lIF9QUEM2NF9QR0FMTE9DX0gKKworI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KKworZXh0ZXJuIGttZW1fY2FjaGVfdCAqemVyb19jYWNoZTsKKworLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworc3RhdGljIGlubGluZSBwZ2RfdCAqCitwZ2RfYWxsb2Moc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJcmV0dXJuIGttZW1fY2FjaGVfYWxsb2MoemVyb19jYWNoZSwgR0ZQX0tFUk5FTCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcGdkX2ZyZWUocGdkX3QgKnBnZCkKK3sKKwlrbWVtX2NhY2hlX2ZyZWUoemVyb19jYWNoZSwgcGdkKTsKK30KKworI2RlZmluZSBwZ2RfcG9wdWxhdGUoTU0sIFBHRCwgUE1EKQlwZ2Rfc2V0KFBHRCwgUE1EKQorCitzdGF0aWMgaW5saW5lIHBtZF90ICoKK3BtZF9hbGxvY19vbmUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4ga21lbV9jYWNoZV9hbGxvYyh6ZXJvX2NhY2hlLCBHRlBfS0VSTkVMfF9fR0ZQX1JFUEVBVCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcG1kX2ZyZWUocG1kX3QgKnBtZCkKK3sKKwlrbWVtX2NhY2hlX2ZyZWUoemVyb19jYWNoZSwgcG1kKTsKK30KKworI2RlZmluZSBwbWRfcG9wdWxhdGVfa2VybmVsKG1tLCBwbWQsIHB0ZSkgcG1kX3NldChwbWQsIHB0ZSkKKyNkZWZpbmUgcG1kX3BvcHVsYXRlKG1tLCBwbWQsIHB0ZV9wYWdlKSBcCisJcG1kX3BvcHVsYXRlX2tlcm5lbChtbSwgcG1kLCBwYWdlX2FkZHJlc3MocHRlX3BhZ2UpKQorCitzdGF0aWMgaW5saW5lIHB0ZV90ICpwdGVfYWxsb2Nfb25lX2tlcm5lbChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCXJldHVybiBrbWVtX2NhY2hlX2FsbG9jKHplcm9fY2FjaGUsIEdGUF9LRVJORUx8X19HRlBfUkVQRUFUKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqcHRlX2FsbG9jX29uZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCXB0ZV90ICpwdGUgPSBrbWVtX2NhY2hlX2FsbG9jKHplcm9fY2FjaGUsIEdGUF9LRVJORUx8X19HRlBfUkVQRUFUKTsKKwlpZiAocHRlKQorCQlyZXR1cm4gdmlydF90b19wYWdlKHB0ZSk7CisJcmV0dXJuIE5VTEw7Cit9CisJCQorc3RhdGljIGlubGluZSB2b2lkIHB0ZV9mcmVlX2tlcm5lbChwdGVfdCAqcHRlKQoreworCWttZW1fY2FjaGVfZnJlZSh6ZXJvX2NhY2hlLCBwdGUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcHRlX2ZyZWUoc3RydWN0IHBhZ2UgKnB0ZXBhZ2UpCit7CisJa21lbV9jYWNoZV9mcmVlKHplcm9fY2FjaGUsIHBhZ2VfYWRkcmVzcyhwdGVwYWdlKSk7Cit9CisKK3N0cnVjdCBwdGVfZnJlZWxpc3RfYmF0Y2gKK3sKKwlzdHJ1Y3QgcmN1X2hlYWQJcmN1OworCXVuc2lnbmVkIGludAlpbmRleDsKKwlzdHJ1Y3QgcGFnZSAqCXBhZ2VzWzBdOworfTsKKworI2RlZmluZSBQVEVfRlJFRUxJU1RfU0laRQkoKFBBR0VfU0laRSAtIHNpemVvZihzdHJ1Y3QgcHRlX2ZyZWVsaXN0X2JhdGNoKSkgLyBcCisJCQkJICBzaXplb2Yoc3RydWN0IHBhZ2UgKikpCisKK2V4dGVybiB2b2lkIHB0ZV9mcmVlX25vdyhzdHJ1Y3QgcGFnZSAqcHRlcGFnZSk7CitleHRlcm4gdm9pZCBwdGVfZnJlZV9zdWJtaXQoc3RydWN0IHB0ZV9mcmVlbGlzdF9iYXRjaCAqYmF0Y2gpOworCitERUNMQVJFX1BFUl9DUFUoc3RydWN0IHB0ZV9mcmVlbGlzdF9iYXRjaCAqLCBwdGVfZnJlZWxpc3RfY3VyKTsKKwordm9pZCBfX3B0ZV9mcmVlX3RsYihzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3QgcGFnZSAqcHRlcGFnZSk7CisjZGVmaW5lIF9fcG1kX2ZyZWVfdGxiKHRsYiwgcG1kKQlfX3B0ZV9mcmVlX3RsYih0bGIsIHZpcnRfdG9fcGFnZShwbWQpKQorCisjZGVmaW5lIGNoZWNrX3BndF9jYWNoZSgpCWRvIHsgfSB3aGlsZSAoMCkKKworI2VuZGlmIC8qIF9QUEM2NF9QR0FMTE9DX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L3BndGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzQ4MjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvcGd0YWJsZS5oCkBAIC0wLDAgKzEsNjAyIEBACisjaWZuZGVmIF9QUEM2NF9QR1RBQkxFX0gKKyNkZWZpbmUgX1BQQzY0X1BHVEFCTEVfSAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvNGxldmVsLWZpeHVwLmg+CisKKy8qCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGZ1bmN0aW9ucyBhbmQgZGVmaW5lcyBuZWNlc3NhcnkgdG8gbW9kaWZ5IGFuZCB1c2UKKyAqIHRoZSBwcGM2NCBoYXNoZWQgcGFnZSB0YWJsZS4KKyAqLworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4JCS8qIEZvciBUQVNLX1NJWkUgKi8KKyNpbmNsdWRlIDxhc20vbW11Lmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworLyogUE1EX1NISUZUIGRldGVybWluZXMgd2hhdCBhIHNlY29uZC1sZXZlbCBwYWdlIHRhYmxlIGVudHJ5IGNhbiBtYXAgKi8KKyNkZWZpbmUgUE1EX1NISUZUCShQQUdFX1NISUZUICsgUEFHRV9TSElGVCAtIDMpCisjZGVmaW5lIFBNRF9TSVpFCSgxVUwgPDwgUE1EX1NISUZUKQorI2RlZmluZSBQTURfTUFTSwkofihQTURfU0laRS0xKSkKKworLyogUEdESVJfU0hJRlQgZGV0ZXJtaW5lcyB3aGF0IGEgdGhpcmQtbGV2ZWwgcGFnZSB0YWJsZSBlbnRyeSBjYW4gbWFwICovCisjZGVmaW5lIFBHRElSX1NISUZUCShQQUdFX1NISUZUICsgKFBBR0VfU0hJRlQgLSAzKSArIChQQUdFX1NISUZUIC0gMikpCisjZGVmaW5lIFBHRElSX1NJWkUJKDFVTCA8PCBQR0RJUl9TSElGVCkKKyNkZWZpbmUgUEdESVJfTUFTSwkofihQR0RJUl9TSVpFLTEpKQorCisvKgorICogRW50cmllcyBwZXIgcGFnZSBkaXJlY3RvcnkgbGV2ZWwuICBUaGUgUFRFIGxldmVsIG11c3QgdXNlIGEgNjRiIHJlY29yZAorICogZm9yIGVhY2ggcGFnZSB0YWJsZSBlbnRyeS4gIFRoZSBQTUQgYW5kIFBHRCBsZXZlbCB1c2UgYSAzMmIgcmVjb3JkIGZvciAKKyAqIGVhY2ggZW50cnkgYnkgYXNzdW1pbmcgdGhhdCBlYWNoIGVudHJ5IGlzIHBhZ2UgYWxpZ25lZC4KKyAqLworI2RlZmluZSBQVEVfSU5ERVhfU0laRSAgOQorI2RlZmluZSBQTURfSU5ERVhfU0laRSAgMTAKKyNkZWZpbmUgUEdEX0lOREVYX1NJWkUgIDEwCisKKyNkZWZpbmUgUFRSU19QRVJfUFRFCSgxIDw8IFBURV9JTkRFWF9TSVpFKQorI2RlZmluZSBQVFJTX1BFUl9QTUQJKDEgPDwgUE1EX0lOREVYX1NJWkUpCisjZGVmaW5lIFBUUlNfUEVSX1BHRAkoMSA8PCBQR0RfSU5ERVhfU0laRSkKKworI2RlZmluZSBVU0VSX1BUUlNfUEVSX1BHRAkoMTAyNCkKKyNkZWZpbmUgRklSU1RfVVNFUl9QR0RfTlIJMAorCisjZGVmaW5lIEVBRERSX1NJWkUgKFBURV9JTkRFWF9TSVpFICsgUE1EX0lOREVYX1NJWkUgKyBcCisgICAgICAgICAgICAgICAgICAgIFBHRF9JTkRFWF9TSVpFICsgUEFHRV9TSElGVCkgCisKKy8qCisgKiBTaXplIG9mIEVBIHJhbmdlIG1hcHBlZCBieSBvdXIgcGFnZXRhYmxlcy4KKyAqLworI2RlZmluZSBQR1RBQkxFX0VBX0JJVFMJNDEKKyNkZWZpbmUgUEdUQUJMRV9FQV9NQVNLCSgoMVVMPDxQR1RBQkxFX0VBX0JJVFMpLTEpCisKKy8qCisgKiBEZWZpbmUgdGhlIGFkZHJlc3MgcmFuZ2Ugb2YgdGhlIHZtYWxsb2MgVk0gYXJlYS4KKyAqLworI2RlZmluZSBWTUFMTE9DX1NUQVJUICgweEQwMDAwMDAwMDAwMDAwMDB1bCkKKyNkZWZpbmUgVk1BTExPQ19FTkQgICAoVk1BTExPQ19TVEFSVCArIFBHVEFCTEVfRUFfTUFTSykKKworLyoKKyAqIERlZmluZSB0aGUgYWRkcmVzcyByYW5nZSBvZiB0aGUgaW1hbGxvYyBWTSBhcmVhLgorICogKHVzZWQgZm9yIGlvcmVtYXApCisgKi8KKyNkZWZpbmUgSU1BTExPQ19TVEFSVCAgICAgKGlvcmVtYXBfYm90KQorI2RlZmluZSBJTUFMTE9DX1ZNQUREUih4KSAoKHVuc2lnbmVkIGxvbmcpKHgpKQorI2RlZmluZSBQSEJTX0lPX0JBU0UgIAkgICgweEUwMDAwMDAwMDAwMDAwMDB1bCkJLyogUmVzZXJ2ZSAyIGdpZ3MgZm9yIFBIQnMgKi8KKyNkZWZpbmUgSU1BTExPQ19CQVNFICAgICAgKDB4RTAwMDAwMDA4MDAwMDAwMHVsKSAgCisjZGVmaW5lIElNQUxMT0NfRU5EICAgICAgIChJTUFMTE9DX0JBU0UgKyBQR1RBQkxFX0VBX01BU0spCisKKy8qCisgKiBEZWZpbmUgdGhlIHVzZXIgYWRkcmVzcyByYW5nZQorICovCisjZGVmaW5lIFVTRVJfU1RBUlQgKDBVTCkKKyNkZWZpbmUgVVNFUl9FTkQgICAoVVNFUl9TVEFSVCArIFBHVEFCTEVfRUFfTUFTSykKKworCisvKgorICogQml0cyBpbiBhIGxpbnV4LXN0eWxlIFBURS4gIFRoZXNlIG1hdGNoIHRoZSBiaXRzIGluIHRoZQorICogKGhhcmR3YXJlLWRlZmluZWQpIFBvd2VyUEMgUFRFIGFzIGNsb3NlbHkgYXMgcG9zc2libGUuCisgKi8KKyNkZWZpbmUgX1BBR0VfUFJFU0VOVAkweDAwMDEgLyogc29mdHdhcmU6IHB0ZSBjb250YWlucyBhIHRyYW5zbGF0aW9uICovCisjZGVmaW5lIF9QQUdFX1VTRVIJMHgwMDAyIC8qIG1hdGNoZXMgb25lIG9mIHRoZSBQUCBiaXRzICovCisjZGVmaW5lIF9QQUdFX0ZJTEUJMHgwMDAyIC8qICghcHJlc2VudCBvbmx5KSBzb2Z0d2FyZTogcHRlIGhvbGRzIGZpbGUgb2Zmc2V0ICovCisjZGVmaW5lIF9QQUdFX0VYRUMJMHgwMDA0IC8qIE5vIGV4ZWN1dGUgb24gUE9XRVI0IGFuZCBuZXdlciAod2UgaW52ZXJ0KSAqLworI2RlZmluZSBfUEFHRV9HVUFSREVECTB4MDAwOAorI2RlZmluZSBfUEFHRV9DT0hFUkVOVAkweDAwMTAgLyogTTogZW5mb3JjZSBtZW1vcnkgY29oZXJlbmNlIChTTVAgc3lzdGVtcykgKi8KKyNkZWZpbmUgX1BBR0VfTk9fQ0FDSEUJMHgwMDIwIC8qIEk6IGNhY2hlIGluaGliaXQgKi8KKyNkZWZpbmUgX1BBR0VfV1JJVEVUSFJVCTB4MDA0MCAvKiBXOiBjYWNoZSB3cml0ZS10aHJvdWdoICovCisjZGVmaW5lIF9QQUdFX0RJUlRZCTB4MDA4MCAvKiBDOiBwYWdlIGNoYW5nZWQgKi8KKyNkZWZpbmUgX1BBR0VfQUNDRVNTRUQJMHgwMTAwIC8qIFI6IHBhZ2UgcmVmZXJlbmNlZCAqLworI2RlZmluZSBfUEFHRV9SVwkweDAyMDAgLyogc29mdHdhcmU6IHVzZXIgd3JpdGUgYWNjZXNzIGFsbG93ZWQgKi8KKyNkZWZpbmUgX1BBR0VfSEFTSFBURQkweDA0MDAgLyogc29mdHdhcmU6IHB0ZSBoYXMgYW4gYXNzb2NpYXRlZCBIUFRFICovCisjZGVmaW5lIF9QQUdFX0JVU1kJMHgwODAwIC8qIHNvZnR3YXJlOiBQVEUgJiBoYXNoIGFyZSBidXN5ICovIAorI2RlZmluZSBfUEFHRV9TRUNPTkRBUlkgMHg4MDAwIC8qIHNvZnR3YXJlOiBIUFRFIGlzIGluIHNlY29uZGFyeSBncm91cCAqLworI2RlZmluZSBfUEFHRV9HUk9VUF9JWCAgMHg3MDAwIC8qIHNvZnR3YXJlOiBIUFRFIGluZGV4IHdpdGhpbiBncm91cCAqLworI2RlZmluZSBfUEFHRV9IVUdFCTB4MTAwMDAgLyogMTZNQiBwYWdlICovCisvKiBCaXRzIDB4NzAwMCBpZGVudGlmeSB0aGUgaW5kZXggd2l0aGluIGFuIEhQVCBHcm91cCAqLworI2RlZmluZSBfUEFHRV9IUFRFRkxBR1MgKF9QQUdFX0JVU1kgfCBfUEFHRV9IQVNIUFRFIHwgX1BBR0VfU0VDT05EQVJZIHwgX1BBR0VfR1JPVVBfSVgpCisvKiBQQUdFX01BU0sgZ2l2ZXMgdGhlIHJpZ2h0IGFuc3dlciBiZWxvdywgYnV0IG9ubHkgYnkgYWNjaWRlbnQgKi8KKy8qIEl0IHNob3VsZCBiZSBwcmVzZXJ2aW5nIHRoZSBoaWdoIDQ4IGJpdHMgYW5kIHRoZW4gc3BlY2lmaWNhbGx5ICovCisvKiBwcmVzZXJ2aW5nIF9QQUdFX1NFQ09OREFSWSB8IF9QQUdFX0dST1VQX0lYICovCisjZGVmaW5lIF9QQUdFX0NIR19NQVNLCShQQUdFX01BU0sgfCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX0RJUlRZIHwgX1BBR0VfSFBURUZMQUdTKQorCisjZGVmaW5lIF9QQUdFX0JBU0UJKF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX0NPSEVSRU5UKQorCisjZGVmaW5lIF9QQUdFX1dSRU5BQkxFCShfUEFHRV9SVyB8IF9QQUdFX0RJUlRZKQorCisvKiBfX3BncHJvdCBkZWZpbmVkIGluIGFzbS1wcGM2NC9wYWdlLmggKi8KKyNkZWZpbmUgUEFHRV9OT05FCV9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9BQ0NFU1NFRCkKKworI2RlZmluZSBQQUdFX1NIQVJFRAlfX3BncHJvdChfUEFHRV9CQVNFIHwgX1BBR0VfUlcgfCBfUEFHRV9VU0VSKQorI2RlZmluZSBQQUdFX1NIQVJFRF9YCV9fcGdwcm90KF9QQUdFX0JBU0UgfCBfUEFHRV9SVyB8IF9QQUdFX1VTRVIgfCBfUEFHRV9FWEVDKQorI2RlZmluZSBQQUdFX0NPUFkJX19wZ3Byb3QoX1BBR0VfQkFTRSB8IF9QQUdFX1VTRVIpCisjZGVmaW5lIFBBR0VfQ09QWV9YCV9fcGdwcm90KF9QQUdFX0JBU0UgfCBfUEFHRV9VU0VSIHwgX1BBR0VfRVhFQykKKyNkZWZpbmUgUEFHRV9SRUFET05MWQlfX3BncHJvdChfUEFHRV9CQVNFIHwgX1BBR0VfVVNFUikKKyNkZWZpbmUgUEFHRV9SRUFET05MWV9YCV9fcGdwcm90KF9QQUdFX0JBU0UgfCBfUEFHRV9VU0VSIHwgX1BBR0VfRVhFQykKKyNkZWZpbmUgUEFHRV9LRVJORUwJX19wZ3Byb3QoX1BBR0VfQkFTRSB8IF9QQUdFX1dSRU5BQkxFKQorI2RlZmluZSBQQUdFX0tFUk5FTF9DSQlfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfQUNDRVNTRUQgfCBcCisJCQkgICAgICAgX1BBR0VfV1JFTkFCTEUgfCBfUEFHRV9OT19DQUNIRSB8IF9QQUdFX0dVQVJERUQpCisjZGVmaW5lIFBBR0VfS0VSTkVMX0VYRUMgX19wZ3Byb3QoX1BBR0VfQkFTRSB8IF9QQUdFX1dSRU5BQkxFIHwgX1BBR0VfRVhFQykKKworI2RlZmluZSBQQUdFX0FHUAlfX3BncHJvdChfUEFHRV9CQVNFIHwgX1BBR0VfV1JFTkFCTEUgfCBfUEFHRV9OT19DQUNIRSkKKyNkZWZpbmUgSEFWRV9QQUdFX0FHUAorCisvKgorICogVGhpcyBiaXQgaW4gYSBoYXJkd2FyZSBQVEUgaW5kaWNhdGVzIHRoYXQgdGhlIHBhZ2UgaXMgKm5vdCogZXhlY3V0YWJsZS4KKyAqLworI2RlZmluZSBIV19OT19FWEVDCV9QQUdFX0VYRUMKKworLyoKKyAqIFBPV0VSNCBhbmQgbmV3ZXIgaGF2ZSBwZXIgcGFnZSBleGVjdXRlIHByb3RlY3Rpb24sIG9sZGVyIGNoaXBzIGNhbiBvbmx5CisgKiBkbyB0aGlzIG9uIGEgc2VnbWVudCAoMjU2TUIpIGJhc2lzLgorICoKKyAqIEFsc28sIHdyaXRlIHBlcm1pc3Npb25zIGltcGx5IHJlYWQgcGVybWlzc2lvbnMuCisgKiBUaGlzIGlzIHRoZSBjbG9zZXN0IHdlIGNhbiBnZXQuLgorICoKKyAqIE5vdGUgZHVlIHRvIHRoZSB3YXkgdm0gZmxhZ3MgYXJlIGxhaWQgb3V0LCB0aGUgYml0cyBhcmUgWFdSCisgKi8KKyNkZWZpbmUgX19QMDAwCVBBR0VfTk9ORQorI2RlZmluZSBfX1AwMDEJUEFHRV9SRUFET05MWQorI2RlZmluZSBfX1AwMTAJUEFHRV9DT1BZCisjZGVmaW5lIF9fUDAxMQlQQUdFX0NPUFkKKyNkZWZpbmUgX19QMTAwCVBBR0VfUkVBRE9OTFlfWAorI2RlZmluZSBfX1AxMDEJUEFHRV9SRUFET05MWV9YCisjZGVmaW5lIF9fUDExMAlQQUdFX0NPUFlfWAorI2RlZmluZSBfX1AxMTEJUEFHRV9DT1BZX1gKKworI2RlZmluZSBfX1MwMDAJUEFHRV9OT05FCisjZGVmaW5lIF9fUzAwMQlQQUdFX1JFQURPTkxZCisjZGVmaW5lIF9fUzAxMAlQQUdFX1NIQVJFRAorI2RlZmluZSBfX1MwMTEJUEFHRV9TSEFSRUQKKyNkZWZpbmUgX19TMTAwCVBBR0VfUkVBRE9OTFlfWAorI2RlZmluZSBfX1MxMDEJUEFHRV9SRUFET05MWV9YCisjZGVmaW5lIF9fUzExMAlQQUdFX1NIQVJFRF9YCisjZGVmaW5lIF9fUzExMQlQQUdFX1NIQVJFRF9YCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKy8qCisgKiBaRVJPX1BBR0UgaXMgYSBnbG9iYWwgc2hhcmVkIHBhZ2UgdGhhdCBpcyBhbHdheXMgemVybzogdXNlZAorICogZm9yIHplcm8tbWFwcGVkIG1lbW9yeSBhcmVhcyBldGMuLgorICovCitleHRlcm4gdW5zaWduZWQgbG9uZyBlbXB0eV96ZXJvX3BhZ2VbUEFHRV9TSVpFL3NpemVvZih1bnNpZ25lZCBsb25nKV07CisjZGVmaW5lIFpFUk9fUEFHRSh2YWRkcikgKHZpcnRfdG9fcGFnZShlbXB0eV96ZXJvX3BhZ2UpKQorI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisvKiBzaGlmdCB0byBwdXQgcGFnZSBudW1iZXIgaW50byBwdGUgKi8KKyNkZWZpbmUgUFRFX1NISUZUICgxNykKKworLyogV2UgYWxsb3cgMl40MSBieXRlcyBvZiByZWFsIG1lbW9yeSwgc28gd2UgbmVlZCAyOSBiaXRzIGluIHRoZSBQTUQKKyAqIHRvIGdpdmUgdGhlIFBURSBwYWdlIG51bWJlci4gIFRoZSBib3R0b20gdHdvIGJpdHMgYXJlIGZvciBmbGFncy4gKi8KKyNkZWZpbmUgUE1EX1RPX1BURVBBR0VfU0hJRlQgKDIpCisKKyNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitpbnQgaGFzaF9odWdlX3BhZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWNjZXNzLAorCQkgICB1bnNpZ25lZCBsb25nIGVhLCB1bnNpZ25lZCBsb25nIHZzaWQsIGludCBsb2NhbCk7CisKK3ZvaWQgaHVnZXRsYl9tbV9mcmVlX3BnZChzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKyNkZWZpbmUgSEFWRV9BUkNIX1VOTUFQUEVEX0FSRUEKKyNkZWZpbmUgSEFWRV9BUkNIX1VOTUFQUEVEX0FSRUFfVE9QRE9XTgorI2Vsc2UKKworI2RlZmluZSBoYXNoX2h1Z2VfcGFnZShtbSxhLGVhLHZzaWQsbG9jYWwpCS0xCisjZGVmaW5lIGh1Z2V0bGJfbW1fZnJlZV9wZ2QobW0pCQkJZG8ge30gd2hpbGUgKDApCisKKyNlbmRpZgorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisvKgorICogQ29udmVyc2lvbiBmdW5jdGlvbnM6IGNvbnZlcnQgYSBwYWdlIGFuZCBwcm90ZWN0aW9uIHRvIGEgcGFnZSBlbnRyeSwKKyAqIGFuZCBhIHBhZ2UgZW50cnkgYW5kIHBhZ2UgZGlyZWN0b3J5IHRvIHRoZSBwYWdlIHRoZXkgcmVmZXIgdG8uCisgKgorICogbWtfcHRlIHRha2VzIGEgKHN0cnVjdCBwYWdlICopIGFzIGlucHV0CisgKi8KKyNkZWZpbmUgbWtfcHRlKHBhZ2UsIHBncHJvdCkJcGZuX3B0ZShwYWdlX3RvX3BmbihwYWdlKSwgKHBncHJvdCkpCisKKyNkZWZpbmUgcGZuX3B0ZShwZm4scGdwcm90KQkJCQkJCVwKKyh7CQkJCQkJCQkJXAorCXB0ZV90IHB0ZTsJCQkJCQkJXAorCXB0ZV92YWwocHRlKSA9ICgodW5zaWduZWQgbG9uZykocGZuKSA8PCBQVEVfU0hJRlQpIHwgICAJCVwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBncHJvdF92YWwocGdwcm90KTsJCQkJXAorCXB0ZTsJCQkJCQkJCVwKK30pCisKKyNkZWZpbmUgcHRlX21vZGlmeShfcHRlLCBuZXdwcm90KSBcCisgIChfX3B0ZSgocHRlX3ZhbChfcHRlKSAmIF9QQUdFX0NIR19NQVNLKSB8IHBncHJvdF92YWwobmV3cHJvdCkpKQorCisjZGVmaW5lIHB0ZV9ub25lKHB0ZSkJCSgocHRlX3ZhbChwdGUpICYgfl9QQUdFX0hQVEVGTEFHUykgPT0gMCkKKyNkZWZpbmUgcHRlX3ByZXNlbnQocHRlKQkocHRlX3ZhbChwdGUpICYgX1BBR0VfUFJFU0VOVCkKKworLyogcHRlX2NsZWFyIG1vdmVkIHRvIGxhdGVyIGluIHRoaXMgZmlsZSAqLworCisjZGVmaW5lIHB0ZV9wZm4oeCkJCSgodW5zaWduZWQgbG9uZykoKHB0ZV92YWwoeCkgPj4gUFRFX1NISUZUKSkpCisjZGVmaW5lIHB0ZV9wYWdlKHgpCQlwZm5fdG9fcGFnZShwdGVfcGZuKHgpKQorCisjZGVmaW5lIHBtZF9zZXQocG1kcCwgcHRlcCkgCVwKKwkocG1kX3ZhbCgqKHBtZHApKSA9IChfX2JhX3RvX2JwbihwdGVwKSA8PCBQTURfVE9fUFRFUEFHRV9TSElGVCkpCisjZGVmaW5lIHBtZF9ub25lKHBtZCkJCSghcG1kX3ZhbChwbWQpKQorI2RlZmluZQlwbWRfYmFkKHBtZCkJCShwbWRfdmFsKHBtZCkgPT0gMCkKKyNkZWZpbmUJcG1kX3ByZXNlbnQocG1kKQkocG1kX3ZhbChwbWQpICE9IDApCisjZGVmaW5lCXBtZF9jbGVhcihwbWRwKQkJKHBtZF92YWwoKihwbWRwKSkgPSAwKQorI2RlZmluZSBwbWRfcGFnZV9rZXJuZWwocG1kKQlcCisJKF9fYnBuX3RvX2JhKHBtZF92YWwocG1kKSA+PiBQTURfVE9fUFRFUEFHRV9TSElGVCkpCisjZGVmaW5lIHBtZF9wYWdlKHBtZCkJCXZpcnRfdG9fcGFnZShwbWRfcGFnZV9rZXJuZWwocG1kKSkKKyNkZWZpbmUgcGdkX3NldChwZ2RwLCBwbWRwKQkocGdkX3ZhbCgqKHBnZHApKSA9IChfX2JhX3RvX2JwbihwbWRwKSkpCisjZGVmaW5lIHBnZF9ub25lKHBnZCkJCSghcGdkX3ZhbChwZ2QpKQorI2RlZmluZSBwZ2RfYmFkKHBnZCkJCSgocGdkX3ZhbChwZ2QpKSA9PSAwKQorI2RlZmluZSBwZ2RfcHJlc2VudChwZ2QpCShwZ2RfdmFsKHBnZCkgIT0gMFVMKQorI2RlZmluZSBwZ2RfY2xlYXIocGdkcCkJCShwZ2RfdmFsKCoocGdkcCkpID0gMFVMKQorI2RlZmluZSBwZ2RfcGFnZShwZ2QpCQkoX19icG5fdG9fYmEocGdkX3ZhbChwZ2QpKSkgCisKKy8qIAorICogRmluZCBhbiBlbnRyeSBpbiBhIHBhZ2UtdGFibGUtZGlyZWN0b3J5LiAgV2UgY29tYmluZSB0aGUgYWRkcmVzcyByZWdpb24gCisgKiAodGhlIGhpZ2ggb3JkZXIgTiBiaXRzKSBhbmQgdGhlIHBnZCBwb3J0aW9uIG9mIHRoZSBhZGRyZXNzLgorICovCisvKiB0byBhdm9pZCBvdmVyZmxvdyBpbiBmcmVlX3BndGFibGVzIHdlIGRvbid0IHVzZSBQVFJTX1BFUl9QR0QgaGVyZSAqLworI2RlZmluZSBwZ2RfaW5kZXgoYWRkcmVzcykgKCgoYWRkcmVzcykgPj4gKFBHRElSX1NISUZUKSkgJiAweDdmZikKKworI2RlZmluZSBwZ2Rfb2Zmc2V0KG1tLCBhZGRyZXNzKQkgKChtbSktPnBnZCArIHBnZF9pbmRleChhZGRyZXNzKSkKKworLyogRmluZCBhbiBlbnRyeSBpbiB0aGUgc2Vjb25kLWxldmVsIHBhZ2UgdGFibGUuLiAqLworI2RlZmluZSBwbWRfb2Zmc2V0KGRpcixhZGRyKSBcCisgICgocG1kX3QgKikgcGdkX3BhZ2UoKihkaXIpKSArICgoKGFkZHIpID4+IFBNRF9TSElGVCkgJiAoUFRSU19QRVJfUE1EIC0gMSkpKQorCisvKiBGaW5kIGFuIGVudHJ5IGluIHRoZSB0aGlyZC1sZXZlbCBwYWdlIHRhYmxlLi4gKi8KKyNkZWZpbmUgcHRlX29mZnNldF9rZXJuZWwoZGlyLGFkZHIpIFwKKyAgKChwdGVfdCAqKSBwbWRfcGFnZV9rZXJuZWwoKihkaXIpKSArICgoKGFkZHIpID4+IFBBR0VfU0hJRlQpICYgKFBUUlNfUEVSX1BURSAtIDEpKSkKKworI2RlZmluZSBwdGVfb2Zmc2V0X21hcChkaXIsYWRkcikJcHRlX29mZnNldF9rZXJuZWwoKGRpciksIChhZGRyKSkKKyNkZWZpbmUgcHRlX29mZnNldF9tYXBfbmVzdGVkKGRpcixhZGRyKQlwdGVfb2Zmc2V0X2tlcm5lbCgoZGlyKSwgKGFkZHIpKQorI2RlZmluZSBwdGVfdW5tYXAocHRlKQkJCWRvIHsgfSB3aGlsZSgwKQorI2RlZmluZSBwdGVfdW5tYXBfbmVzdGVkKHB0ZSkJCWRvIHsgfSB3aGlsZSgwKQorCisvKiB0byBmaW5kIGFuIGVudHJ5IGluIGEga2VybmVsIHBhZ2UtdGFibGUtZGlyZWN0b3J5ICovCisvKiBUaGlzIG5vdyBvbmx5IGNvbnRhaW5zIHRoZSB2bWFsbG9jIHBhZ2VzICovCisjZGVmaW5lIHBnZF9vZmZzZXRfayhhZGRyZXNzKSBwZ2Rfb2Zmc2V0KCZpbml0X21tLCBhZGRyZXNzKQorCisvKiB0byBmaW5kIGFuIGVudHJ5IGluIHRoZSBpb3JlbWFwIHBhZ2UtdGFibGUtZGlyZWN0b3J5ICovCisjZGVmaW5lIHBnZF9vZmZzZXRfaShhZGRyZXNzKSAoaW9yZW1hcF9wZ2QgKyBwZ2RfaW5kZXgoYWRkcmVzcykpCisKKyNkZWZpbmUgcGFnZXNfdG9fbWIoeCkJCSgoeCkgPj4gKDIwLVBBR0VfU0hJRlQpKQorCisvKgorICogVGhlIGZvbGxvd2luZyBvbmx5IHdvcmsgaWYgcHRlX3ByZXNlbnQoKSBpcyB0cnVlLgorICogVW5kZWZpbmVkIGJlaGF2aW91ciBpZiBub3QuLgorICovCitzdGF0aWMgaW5saW5lIGludCBwdGVfcmVhZChwdGVfdCBwdGUpICB7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9VU0VSO30KK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV93cml0ZShwdGVfdCBwdGUpIHsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX1JXO30KK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9leGVjKHB0ZV90IHB0ZSkgIHsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX0VYRUM7fQorc3RhdGljIGlubGluZSBpbnQgcHRlX2RpcnR5KHB0ZV90IHB0ZSkgeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfRElSVFk7fQorc3RhdGljIGlubGluZSBpbnQgcHRlX3lvdW5nKHB0ZV90IHB0ZSkgeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfQUNDRVNTRUQ7fQorc3RhdGljIGlubGluZSBpbnQgcHRlX2ZpbGUocHRlX3QgcHRlKSB7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9GSUxFO30KK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9odWdlKHB0ZV90IHB0ZSkgeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfSFVHRTt9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdGVfdW5jYWNoZShwdGVfdCBwdGUpIHsgcHRlX3ZhbChwdGUpIHw9IF9QQUdFX05PX0NBQ0hFOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgcHRlX2NhY2hlKHB0ZV90IHB0ZSkgICB7IHB0ZV92YWwocHRlKSAmPSB+X1BBR0VfTk9fQ0FDSEU7IH0KKworc3RhdGljIGlubGluZSBwdGVfdCBwdGVfcmRwcm90ZWN0KHB0ZV90IHB0ZSkgeworCXB0ZV92YWwocHRlKSAmPSB+X1BBR0VfVVNFUjsgcmV0dXJuIHB0ZTsgfQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfZXhwcm90ZWN0KHB0ZV90IHB0ZSkgeworCXB0ZV92YWwocHRlKSAmPSB+X1BBR0VfRVhFQzsgcmV0dXJuIHB0ZTsgfQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfd3Jwcm90ZWN0KHB0ZV90IHB0ZSkgeworCXB0ZV92YWwocHRlKSAmPSB+KF9QQUdFX1JXKTsgcmV0dXJuIHB0ZTsgfQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtjbGVhbihwdGVfdCBwdGUpIHsKKwlwdGVfdmFsKHB0ZSkgJj0gfihfUEFHRV9ESVJUWSk7IHJldHVybiBwdGU7IH0KK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rb2xkKHB0ZV90IHB0ZSkgeworCXB0ZV92YWwocHRlKSAmPSB+X1BBR0VfQUNDRVNTRUQ7IHJldHVybiBwdGU7IH0KKworc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtyZWFkKHB0ZV90IHB0ZSkgeworCXB0ZV92YWwocHRlKSB8PSBfUEFHRV9VU0VSOyByZXR1cm4gcHRlOyB9CitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta2V4ZWMocHRlX3QgcHRlKSB7CisJcHRlX3ZhbChwdGUpIHw9IF9QQUdFX1VTRVIgfCBfUEFHRV9FWEVDOyByZXR1cm4gcHRlOyB9CitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSkgeworCXB0ZV92YWwocHRlKSB8PSBfUEFHRV9SVzsgcmV0dXJuIHB0ZTsgfQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtkaXJ0eShwdGVfdCBwdGUpIHsKKwlwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfRElSVFk7IHJldHVybiBwdGU7IH0KK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21reW91bmcocHRlX3QgcHRlKSB7CisJcHRlX3ZhbChwdGUpIHw9IF9QQUdFX0FDQ0VTU0VEOyByZXR1cm4gcHRlOyB9CitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta2h1Z2UocHRlX3QgcHRlKSB7CisJcHRlX3ZhbChwdGUpIHw9IF9QQUdFX0hVR0U7IHJldHVybiBwdGU7IH0KKworLyogQXRvbWljIFBURSB1cGRhdGVzICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcHRlX3VwZGF0ZShwdGVfdCAqcCwgdW5zaWduZWQgbG9uZyBjbHIpCit7CisJdW5zaWduZWQgbG9uZyBvbGQsIHRtcDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCSIxOglsZGFyeAklMCwwLCUzCQkjIHB0ZV91cGRhdGVcblwKKwlhbmRpLgklMSwlMCwlNlxuXAorCWJuZS0JMWIgXG5cCisJYW5kYwklMSwlMCwlNCBcblwKKwlzdGRjeC4JJTEsMCwlMyBcblwKKwlibmUtCTFiIgorCTogIj0mciIgKG9sZCksICI9JnIiICh0bXApLCAiPW0iICgqcCkKKwk6ICJyIiAocCksICJyIiAoY2xyKSwgIm0iICgqcCksICJpIiAoX1BBR0VfQlVTWSkKKwk6ICJjYyIgKTsKKwlyZXR1cm4gb2xkOworfQorCisvKiBQVEUgdXBkYXRpbmcgZnVuY3Rpb25zLCB0aGlzIGZ1bmN0aW9uIHB1dHMgdGhlIFBURSBpbiB0aGUKKyAqIGJhdGNoLCBkb2Vzbid0IGFjdHVhbGx5IHRyaWdnZXJzIHRoZSBoYXNoIGZsdXNoIGltbWVkaWF0ZWx5LAorICogeW91IG5lZWQgdG8gY2FsbCBmbHVzaF90bGJfcGVuZGluZygpIHRvIGRvIHRoYXQuCisgKi8KK2V4dGVybiB2b2lkIGhwdGVfdXBkYXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgcHRlLAorCQkJaW50IHdycHJvdCk7CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCkKK3sKKwl1bnNpZ25lZCBsb25nIG9sZDsKKworICAgICAgIAlpZiAoKHB0ZV92YWwoKnB0ZXApICYgKF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfSEFTSFBURSkpID09IDApCisJCXJldHVybiAwOworCW9sZCA9IHB0ZV91cGRhdGUocHRlcCwgX1BBR0VfQUNDRVNTRUQpOworCWlmIChvbGQgJiBfUEFHRV9IQVNIUFRFKSB7CisJCWhwdGVfdXBkYXRlKG1tLCBhZGRyLCBvbGQsIDApOworCQlmbHVzaF90bGJfcGVuZGluZygpOworCX0KKwlyZXR1cm4gKG9sZCAmIF9QQUdFX0FDQ0VTU0VEKSAhPSAwOworfQorI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX1RFU1RfQU5EX0NMRUFSX1lPVU5HCisjZGVmaW5lIHB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoX192bWEsIF9fYWRkciwgX19wdGVwKQkJICAgXAorKHsJCQkJCQkJCQkgICBcCisJaW50IF9fcjsJCQkJCQkJICAgXAorCV9fciA9IF9fcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZygoX192bWEpLT52bV9tbSwgX19hZGRyLCBfX3B0ZXApOyBcCisJX19yOwkJCQkJCQkJICAgXAorfSkKKworLyoKKyAqIE9uIFJXL0RJUlRZIGJpdCB0cmFuc2l0aW9ucyB3ZSBjYW4gYXZvaWQgZmx1c2hpbmcgdGhlIGhwdGUuIEZvciB0aGUKKyAqIG1vbWVudCB3ZSBhbHdheXMgZmx1c2ggYnV0IHdlIG5lZWQgdG8gZml4IGhwdGVfdXBkYXRlIGFuZCB0ZXN0IGlmIHRoZQorICogb3B0aW1pc2F0aW9uIGlzIHdvcnRoIGl0LgorICovCitzdGF0aWMgaW5saW5lIGludCBfX3B0ZXBfdGVzdF9hbmRfY2xlYXJfZGlydHkoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApCit7CisJdW5zaWduZWQgbG9uZyBvbGQ7CisKKyAgICAgICAJaWYgKChwdGVfdmFsKCpwdGVwKSAmIF9QQUdFX0RJUlRZKSA9PSAwKQorCQlyZXR1cm4gMDsKKwlvbGQgPSBwdGVfdXBkYXRlKHB0ZXAsIF9QQUdFX0RJUlRZKTsKKwlpZiAob2xkICYgX1BBR0VfSEFTSFBURSkKKwkJaHB0ZV91cGRhdGUobW0sIGFkZHIsIG9sZCwgMCk7CisJcmV0dXJuIChvbGQgJiBfUEFHRV9ESVJUWSkgIT0gMDsKK30KKyNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFUF9URVNUX0FORF9DTEVBUl9ESVJUWQorI2RlZmluZSBwdGVwX3Rlc3RfYW5kX2NsZWFyX2RpcnR5KF9fdm1hLCBfX2FkZHIsIF9fcHRlcCkJCSAgIFwKKyh7CQkJCQkJCQkJICAgXAorCWludCBfX3I7CQkJCQkJCSAgIFwKKwlfX3IgPSBfX3B0ZXBfdGVzdF9hbmRfY2xlYXJfZGlydHkoKF9fdm1hKS0+dm1fbW0sIF9fYWRkciwgX19wdGVwKTsgXAorCV9fcjsJCQkJCQkJCSAgIFwKK30pCisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFUF9TRVRfV1JQUk9URUNUCitzdGF0aWMgaW5saW5lIHZvaWQgcHRlcF9zZXRfd3Jwcm90ZWN0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKQoreworCXVuc2lnbmVkIGxvbmcgb2xkOworCisgICAgICAgCWlmICgocHRlX3ZhbCgqcHRlcCkgJiBfUEFHRV9SVykgPT0gMCkKKyAgICAgICAJCXJldHVybjsKKwlvbGQgPSBwdGVfdXBkYXRlKHB0ZXAsIF9QQUdFX1JXKTsKKwlpZiAob2xkICYgX1BBR0VfSEFTSFBURSkKKwkJaHB0ZV91cGRhdGUobW0sIGFkZHIsIG9sZCwgMCk7Cit9CisKKy8qCisgKiBXZSBjdXJyZW50bHkgcmVtb3ZlIGVudHJpZXMgZnJvbSB0aGUgaGFzaHRhYmxlIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlcgorICogdGhlIGVudHJ5IHdhcyB5b3VuZyBvciBkaXJ0eS4gVGhlIGdlbmVyaWMgcm91dGluZXMgb25seSBmbHVzaCBpZiB0aGUKKyAqIGVudHJ5IHdhcyB5b3VuZyBvciBkaXJ0eSB3aGljaCBpcyBub3QgZ29vZCBlbm91Z2guCisgKgorICogV2Ugc2hvdWxkIGJlIG1vcmUgaW50ZWxsaWdlbnQgYWJvdXQgdGhpcyBidXQgZm9yIHRoZSBtb21lbnQgd2Ugb3ZlcnJpZGUKKyAqIHRoZXNlIGZ1bmN0aW9ucyBhbmQgZm9yY2UgYSB0bGIgZmx1c2ggdW5jb25kaXRpb25hbGx5CisgKi8KKyNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFUF9DTEVBUl9ZT1VOR19GTFVTSAorI2RlZmluZSBwdGVwX2NsZWFyX2ZsdXNoX3lvdW5nKF9fdm1hLCBfX2FkZHJlc3MsIF9fcHRlcCkJCVwKKyh7CQkJCQkJCQkJXAorCWludCBfX3lvdW5nID0gX19wdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKChfX3ZtYSktPnZtX21tLCBfX2FkZHJlc3MsIFwKKwkJCQkJCSAgX19wdGVwKTsJCVwKKwlfX3lvdW5nOwkJCQkJCQlcCit9KQorCisjZGVmaW5lIF9fSEFWRV9BUkNIX1BURVBfQ0xFQVJfRElSVFlfRkxVU0gKKyNkZWZpbmUgcHRlcF9jbGVhcl9mbHVzaF9kaXJ0eShfX3ZtYSwgX19hZGRyZXNzLCBfX3B0ZXApCQlcCisoewkJCQkJCQkJCVwKKwlpbnQgX19kaXJ0eSA9IF9fcHRlcF90ZXN0X2FuZF9jbGVhcl9kaXJ0eSgoX192bWEpLT52bV9tbSwgX19hZGRyZXNzLCBcCisJCQkJCQkgIF9fcHRlcCk7IAkJXAorCWZsdXNoX3RsYl9wYWdlKF9fdm1hLCBfX2FkZHJlc3MpOwkJCQlcCisJX19kaXJ0eTsJCQkJCQkJXAorfSkKKworI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX0dFVF9BTkRfQ0xFQVIKK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlcF9nZXRfYW5kX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKQoreworCXVuc2lnbmVkIGxvbmcgb2xkID0gcHRlX3VwZGF0ZShwdGVwLCB+MFVMKTsKKworCWlmIChvbGQgJiBfUEFHRV9IQVNIUFRFKQorCQlocHRlX3VwZGF0ZShtbSwgYWRkciwgb2xkLCAwKTsKKwlyZXR1cm4gX19wdGUob2xkKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHB0ZV9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqIHB0ZXApCit7CisJdW5zaWduZWQgbG9uZyBvbGQgPSBwdGVfdXBkYXRlKHB0ZXAsIH4wVUwpOworCisJaWYgKG9sZCAmIF9QQUdFX0hBU0hQVEUpCisJCWhwdGVfdXBkYXRlKG1tLCBhZGRyLCBvbGQsIDApOworfQorCisvKgorICogc2V0X3B0ZSBzdG9yZXMgYSBsaW51eCBQVEUgaW50byB0aGUgbGludXggcGFnZSB0YWJsZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHNldF9wdGVfYXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCSAgICAgIHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpCit7CisJaWYgKHB0ZV9wcmVzZW50KCpwdGVwKSkgeworCQlwdGVfY2xlYXIobW0sIGFkZHIsIHB0ZXApOworCQlmbHVzaF90bGJfcGVuZGluZygpOworCX0KKwkqcHRlcCA9IF9fcHRlKHB0ZV92YWwocHRlKSkgJiB+X1BBR0VfSFBURUZMQUdTOworfQorCisvKiBTZXQgdGhlIGRpcnR5IGFuZC9vciBhY2Nlc3NlZCBiaXRzIGF0b21pY2FsbHkgaW4gYSBsaW51eCBQVEUsIHRoaXMKKyAqIGZ1bmN0aW9uIGRvZXNuJ3QgbmVlZCB0byBmbHVzaCB0aGUgaGFzaCBlbnRyeQorICovCisjZGVmaW5lIF9fSEFWRV9BUkNIX1BURVBfU0VUX0FDQ0VTU19GTEFHUworc3RhdGljIGlubGluZSB2b2lkIF9fcHRlcF9zZXRfYWNjZXNzX2ZsYWdzKHB0ZV90ICpwdGVwLCBwdGVfdCBlbnRyeSwgaW50IGRpcnR5KQoreworCXVuc2lnbmVkIGxvbmcgYml0cyA9IHB0ZV92YWwoZW50cnkpICYKKwkJKF9QQUdFX0RJUlRZIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9SVyB8IF9QQUdFX0VYRUMpOworCXVuc2lnbmVkIGxvbmcgb2xkLCB0bXA7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkiMToJbGRhcngJJTAsMCwlNFxuXAorCQlhbmRpLgklMSwlMCwlNlxuXAorCQlibmUtCTFiIFxuXAorCQlvcgklMCwlMywlMFxuXAorCQlzdGRjeC4JJTAsMCwlNFxuXAorCQlibmUtCTFiIgorCToiPSZyIiAob2xkKSwgIj0mciIgKHRtcCksICI9bSIgKCpwdGVwKQorCToiciIgKGJpdHMpLCAiciIgKHB0ZXApLCAibSIgKCpwdGVwKSwgImkiIChfUEFHRV9CVVNZKQorCToiY2MiKTsKK30KKyNkZWZpbmUgIHB0ZXBfc2V0X2FjY2Vzc19mbGFncyhfX3ZtYSwgX19hZGRyZXNzLCBfX3B0ZXAsIF9fZW50cnksIF9fZGlydHkpIFwKKwlkbyB7CQkJCQkJCQkgICBcCisJCV9fcHRlcF9zZXRfYWNjZXNzX2ZsYWdzKF9fcHRlcCwgX19lbnRyeSwgX19kaXJ0eSk7CSAgIFwKKwkJZmx1c2hfdGxiX3BhZ2Vfbm9oYXNoKF9fdm1hLCBfX2FkZHJlc3MpOwkgICAgICAgCSAgIFwKKwl9IHdoaWxlKDApCisKKy8qCisgKiBNYWNybyB0byBtYXJrIGEgcGFnZSBwcm90ZWN0aW9uIHZhbHVlIGFzICJ1bmNhY2hlYWJsZSIuCisgKi8KKyNkZWZpbmUgcGdwcm90X25vbmNhY2hlZChwcm90KQkoX19wZ3Byb3QocGdwcm90X3ZhbChwcm90KSB8IF9QQUdFX05PX0NBQ0hFIHwgX1BBR0VfR1VBUkRFRCkpCisKK3N0cnVjdCBmaWxlOworZXh0ZXJuIHBncHJvdF90IHBoeXNfbWVtX2FjY2Vzc19wcm90KHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkJICAgICB1bnNpZ25lZCBsb25nIHNpemUsIHBncHJvdF90IHZtYV9wcm90KTsKKyNkZWZpbmUgX19IQVZFX1BIWVNfTUVNX0FDQ0VTU19QUk9UCisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFX1NBTUUKKyNkZWZpbmUgcHRlX3NhbWUoQSxCKQkoKChwdGVfdmFsKEEpIF4gcHRlX3ZhbChCKSkgJiB+X1BBR0VfSFBURUZMQUdTKSA9PSAwKQorCitleHRlcm4gdW5zaWduZWQgbG9uZyBpb3JlbWFwX2JvdCwgaW9yZW1hcF9iYXNlOworCisjZGVmaW5lIFVTRVJfUEdEX1BUUlMgKFBBR0VfT0ZGU0VUID4+IFBHRElSX1NISUZUKQorI2RlZmluZSBLRVJORUxfUEdEX1BUUlMgKFBUUlNfUEVSX1BHRC1VU0VSX1BHRF9QVFJTKQorCisjZGVmaW5lIHB0ZV9FUlJPUihlKSBcCisJcHJpbnRrKCIlczolZDogYmFkIHB0ZSAlMDE2bHguXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sIHB0ZV92YWwoZSkpCisjZGVmaW5lIHBtZF9FUlJPUihlKSBcCisJcHJpbnRrKCIlczolZDogYmFkIHBtZCAlMDh4LlxuIiwgX19GSUxFX18sIF9fTElORV9fLCBwbWRfdmFsKGUpKQorI2RlZmluZSBwZ2RfRVJST1IoZSkgXAorCXByaW50aygiJXM6JWQ6IGJhZCBwZ2QgJTA4eC5cbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgcGdkX3ZhbChlKSkKKworZXh0ZXJuIHBnZF90IHN3YXBwZXJfcGdfZGlyWzEwMjRdOworZXh0ZXJuIHBnZF90IGlvcmVtYXBfZGlyWzEwMjRdOworCitleHRlcm4gdm9pZCBwYWdpbmdfaW5pdCh2b2lkKTsKKworc3RydWN0IG1tdV9nYXRoZXI7Cit2b2lkIGh1Z2V0bGJfZnJlZV9wZ3RhYmxlcyhzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnByZXYsCisJCQkgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7CisKKy8qCisgKiBUaGlzIGdldHMgY2FsbGVkIGF0IHRoZSBlbmQgb2YgaGFuZGxpbmcgYSBwYWdlIGZhdWx0LCB3aGVuCisgKiB0aGUga2VybmVsIGhhcyBwdXQgYSBuZXcgUFRFIGludG8gdGhlIHBhZ2UgdGFibGUgZm9yIHRoZSBwcm9jZXNzLgorICogV2UgdXNlIGl0IHRvIHB1dCBhIGNvcnJlc3BvbmRpbmcgSFBURSBpbnRvIHRoZSBoYXNoIHRhYmxlCisgKiBhaGVhZCBvZiB0aW1lLCBpbnN0ZWFkIG9mIHdhaXRpbmcgZm9yIHRoZSBpbmV2aXRhYmxlIGV4dHJhCisgKiBoYXNoLXRhYmxlIG1pc3MgZXhjZXB0aW9uLgorICovCitzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Q7CitleHRlcm4gdm9pZCB1cGRhdGVfbW11X2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nLCBwdGVfdCk7CisKKy8qIEVuY29kZSBhbmQgZGUtY29kZSBhIHN3YXAgZW50cnkgKi8KKyNkZWZpbmUgX19zd3BfdHlwZShlbnRyeSkJKCgoZW50cnkpLnZhbCA+PiAxKSAmIDB4M2YpCisjZGVmaW5lIF9fc3dwX29mZnNldChlbnRyeSkJKChlbnRyeSkudmFsID4+IDgpCisjZGVmaW5lIF9fc3dwX2VudHJ5KHR5cGUsIG9mZnNldCkgKChzd3BfZW50cnlfdCkgeyAoKHR5cGUpIDw8IDEpIHwgKChvZmZzZXQpIDw8IDgpIH0pCisjZGVmaW5lIF9fcHRlX3RvX3N3cF9lbnRyeShwdGUpCSgoc3dwX2VudHJ5X3QpIHsgcHRlX3ZhbChwdGUpID4+IFBURV9TSElGVCB9KQorI2RlZmluZSBfX3N3cF9lbnRyeV90b19wdGUoeCkJKChwdGVfdCkgeyAoeCkudmFsIDw8IFBURV9TSElGVCB9KQorI2RlZmluZSBwdGVfdG9fcGdvZmYocHRlKQkocHRlX3ZhbChwdGUpID4+IFBURV9TSElGVCkKKyNkZWZpbmUgcGdvZmZfdG9fcHRlKG9mZikJKChwdGVfdCkgeygob2ZmKSA8PCBQVEVfU0hJRlQpfF9QQUdFX0ZJTEV9KQorI2RlZmluZSBQVEVfRklMRV9NQVhfQklUUwkoQklUU19QRVJfTE9ORyAtIFBURV9TSElGVCkKKworLyoKKyAqIGtlcm5fYWRkcl92YWxpZCBpcyBpbnRlbmRlZCB0byBpbmRpY2F0ZSB3aGV0aGVyIGFuIGFkZHJlc3MgaXMgYSB2YWxpZAorICoga2VybmVsIGFkZHJlc3MuICBNb3N0IDMyLWJpdCBhcmNocyBkZWZpbmUgaXQgYXMgYWx3YXlzIHRydWUgKGxpa2UgdGhpcykKKyAqIGJ1dCBtb3N0IDY0LWJpdCBhcmNocyBhY3R1YWxseSBwZXJmb3JtIGEgdGVzdC4gIFdoYXQgc2hvdWxkIHdlIGRvIGhlcmU/CisgKiBUaGUgb25seSB1c2UgaXMgaW4gZnMvbmNwZnMvZGlyLmMKKyAqLworI2RlZmluZSBrZXJuX2FkZHJfdmFsaWQoYWRkcikJKDEpCisKKyNkZWZpbmUgaW9fcmVtYXBfcGFnZV9yYW5nZSh2bWEsIHZhZGRyLCBwYWRkciwgc2l6ZSwgcHJvdCkJCVwKKwkJcmVtYXBfcGZuX3JhbmdlKHZtYSwgdmFkZHIsIChwYWRkcikgPj4gUEFHRV9TSElGVCwgc2l6ZSwgcHJvdCkKKworI2RlZmluZSBpb19yZW1hcF9wZm5fcmFuZ2Uodm1hLCB2YWRkciwgcGZuLCBzaXplLCBwcm90KQkJXAorCQlyZW1hcF9wZm5fcmFuZ2Uodm1hLCB2YWRkciwgcGZuLCBzaXplLCBwcm90KQorCisjZGVmaW5lIE1LX0lPU1BBQ0VfUEZOKHNwYWNlLCBwZm4pCShwZm4pCisjZGVmaW5lIEdFVF9JT1NQQUNFKHBmbikJCTAKKyNkZWZpbmUgR0VUX1BGTihwZm4pCQkJKHBmbikKKwordm9pZCBwZ3RhYmxlX2NhY2hlX2luaXQodm9pZCk7CisKK2V4dGVybiB2b2lkIGhwdGVfaW5pdF9uYXRpdmUodm9pZCk7CitleHRlcm4gdm9pZCBocHRlX2luaXRfbHBhcih2b2lkKTsKK2V4dGVybiB2b2lkIGhwdGVfaW5pdF9pU2VyaWVzKHZvaWQpOworCisvKiBpbWFsbG9jIHJlZ2lvbiB0eXBlcyAqLworI2RlZmluZSBJTV9SRUdJT05fVU5VU0VECTB4MQorI2RlZmluZSBJTV9SRUdJT05fU1VCU0VUCTB4MgorI2RlZmluZSBJTV9SRUdJT05fRVhJU1RTCTB4NAorI2RlZmluZSBJTV9SRUdJT05fT1ZFUkxBUAkweDgKKyNkZWZpbmUgSU1fUkVHSU9OX1NVUEVSU0VUCTB4MTAKKworZXh0ZXJuIHN0cnVjdCB2bV9zdHJ1Y3QgKiBpbV9nZXRfZnJlZV9hcmVhKHVuc2lnbmVkIGxvbmcgc2l6ZSk7CitleHRlcm4gc3RydWN0IHZtX3N0cnVjdCAqIGltX2dldF9hcmVhKHVuc2lnbmVkIGxvbmcgdl9hZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsCisJCQlpbnQgcmVnaW9uX3R5cGUpOwordW5zaWduZWQgbG9uZyBpbV9mcmVlKHZvaWQgKmFkZHIpOworCitleHRlcm4gbG9uZyBwU2VyaWVzX2xwYXJfaHB0ZV9pbnNlcnQodW5zaWduZWQgbG9uZyBocHRlX2dyb3VwLAorCQkJCSAgICAgdW5zaWduZWQgbG9uZyB2YSwgdW5zaWduZWQgbG9uZyBwcnBuLAorCQkJCSAgICAgaW50IHNlY29uZGFyeSwgdW5zaWduZWQgbG9uZyBocHRlZmxhZ3MsCisJCQkJICAgICBpbnQgYm9sdGVkLCBpbnQgbGFyZ2UpOworCitleHRlcm4gbG9uZyBuYXRpdmVfaHB0ZV9pbnNlcnQodW5zaWduZWQgbG9uZyBocHRlX2dyb3VwLCB1bnNpZ25lZCBsb25nIHZhLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgcHJwbiwgaW50IHNlY29uZGFyeSwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIGhwdGVmbGFncywgaW50IGJvbHRlZCwgaW50IGxhcmdlKTsKKworLyoKKyAqIGZpbmRfbGludXhfcHRlIHJldHVybnMgdGhlIGFkZHJlc3Mgb2YgYSBsaW51eCBwdGUgZm9yIGEgZ2l2ZW4gCisgKiBlZmZlY3RpdmUgYWRkcmVzcyBhbmQgZGlyZWN0b3J5LiAgSWYgbm90IGZvdW5kLCBpdCByZXR1cm5zIHplcm8uCisgKi8KK3N0YXRpYyBpbmxpbmUgcHRlX3QgKmZpbmRfbGludXhfcHRlKHBnZF90ICpwZ2RpciwgdW5zaWduZWQgbG9uZyBlYSkKK3sKKwlwZ2RfdCAqcGc7CisJcG1kX3QgKnBtOworCXB0ZV90ICpwdCA9IE5VTEw7CisJcHRlX3QgcHRlOworCisJcGcgPSBwZ2RpciArIHBnZF9pbmRleChlYSk7CisJaWYgKCFwZ2Rfbm9uZSgqcGcpKSB7CisKKwkJcG0gPSBwbWRfb2Zmc2V0KHBnLCBlYSk7CisJCWlmIChwbWRfcHJlc2VudCgqcG0pKSB7IAorCQkJcHQgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbSwgZWEpOworCQkJcHRlID0gKnB0OworCQkJaWYgKCFwdGVfcHJlc2VudChwdGUpKQorCQkJCXB0ID0gTlVMTDsKKwkJfQorCX0KKworCXJldHVybiBwdDsKK30KKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BndGFibGUuaD4KKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYgLyogX1BQQzY0X1BHVEFCTEVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvcGxwYXJfd3JhcHBlcnMuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L3BscGFyX3dyYXBwZXJzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRhNWZiNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L3BscGFyX3dyYXBwZXJzLmgKQEAgLTAsMCArMSwxMTEgQEAKKyNpZm5kZWYgX1BQQzY0X1BMUEFSX1dSQVBQRVJTX0gKKyNkZWZpbmUgX1BQQzY0X1BMUEFSX1dSQVBQRVJTX0gKKworI2luY2x1ZGUgPGFzbS9odmNhbGwuaD4KKworc3RhdGljIGlubGluZSBsb25nIHBvbGxfcGVuZGluZyh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZHVtbXk7CisJcmV0dXJuIHBscGFyX2hjYWxsKEhfUE9MTF9QRU5ESU5HLCAwLCAwLCAwLCAwLAorCQkJICAgJmR1bW15LCAmZHVtbXksICZkdW1teSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgbG9uZyBwcm9kX3Byb2Nlc3Nvcih2b2lkKQoreworCXBscGFyX2hjYWxsX25vcmV0cyhIX1BST0QpOworCXJldHVybigwKTsgCit9CisKK3N0YXRpYyBpbmxpbmUgbG9uZyBjZWRlX3Byb2Nlc3Nvcih2b2lkKQoreworCXBscGFyX2hjYWxsX25vcmV0cyhIX0NFREUpOworCXJldHVybigwKTsgCit9CisKK3N0YXRpYyBpbmxpbmUgbG9uZyByZWdpc3Rlcl92cGEodW5zaWduZWQgbG9uZyBmbGFncywgdW5zaWduZWQgbG9uZyBwcm9jLAorCQkJCXVuc2lnbmVkIGxvbmcgdnBhKQoreworCXJldHVybiBwbHBhcl9oY2FsbF9ub3JldHMoSF9SRUdJU1RFUl9WUEEsIGZsYWdzLCBwcm9jLCB2cGEpOworfQorCit2b2lkIHZwYV9pbml0KGludCBjcHUpOworCitzdGF0aWMgaW5saW5lIGxvbmcgcGxwYXJfcHRlX3JlbW92ZSh1bnNpZ25lZCBsb25nIGZsYWdzLAorCQkJCSAgICB1bnNpZ25lZCBsb25nIHB0ZXgsCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgYXZwbiwKKwkJCQkgICAgdW5zaWduZWQgbG9uZyAqb2xkX3B0ZWhfcmV0LAorCQkJCSAgICB1bnNpZ25lZCBsb25nICpvbGRfcHRlbF9yZXQpCit7CisJdW5zaWduZWQgbG9uZyBkdW1teTsKKwlyZXR1cm4gcGxwYXJfaGNhbGwoSF9SRU1PVkUsIGZsYWdzLCBwdGV4LCBhdnBuLCAwLAorCQkJICAgb2xkX3B0ZWhfcmV0LCBvbGRfcHRlbF9yZXQsICZkdW1teSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgbG9uZyBwbHBhcl9wdGVfcmVhZCh1bnNpZ25lZCBsb25nIGZsYWdzLAorCQkJCSAgdW5zaWduZWQgbG9uZyBwdGV4LAorCQkJCSAgdW5zaWduZWQgbG9uZyAqb2xkX3B0ZWhfcmV0LCB1bnNpZ25lZCBsb25nICpvbGRfcHRlbF9yZXQpCit7CisJdW5zaWduZWQgbG9uZyBkdW1teTsKKwlyZXR1cm4gcGxwYXJfaGNhbGwoSF9SRUFELCBmbGFncywgcHRleCwgMCwgMCwKKwkJCSAgIG9sZF9wdGVoX3JldCwgb2xkX3B0ZWxfcmV0LCAmZHVtbXkpOworfQorCitzdGF0aWMgaW5saW5lIGxvbmcgcGxwYXJfcHRlX3Byb3RlY3QodW5zaWduZWQgbG9uZyBmbGFncywKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgcHRleCwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgYXZwbikKK3sKKwlyZXR1cm4gcGxwYXJfaGNhbGxfbm9yZXRzKEhfUFJPVEVDVCwgZmxhZ3MsIHB0ZXgsIGF2cG4pOworfQorCitzdGF0aWMgaW5saW5lIGxvbmcgcGxwYXJfdGNlX2dldCh1bnNpZ25lZCBsb25nIGxpb2JuLAorCQkJCSB1bnNpZ25lZCBsb25nIGlvYmEsCisJCQkJIHVuc2lnbmVkIGxvbmcgKnRjZV9yZXQpCit7CisJdW5zaWduZWQgbG9uZyBkdW1teTsKKwlyZXR1cm4gcGxwYXJfaGNhbGwoSF9HRVRfVENFLCBsaW9ibiwgaW9iYSwgMCwgMCwKKwkJCSAgIHRjZV9yZXQsICZkdW1teSwgJmR1bW15KTsKK30KKworc3RhdGljIGlubGluZSBsb25nIHBscGFyX3RjZV9wdXQodW5zaWduZWQgbG9uZyBsaW9ibiwKKwkJCQkgdW5zaWduZWQgbG9uZyBpb2JhLAorCQkJCSB1bnNpZ25lZCBsb25nIHRjZXZhbCkKK3sKKwlyZXR1cm4gcGxwYXJfaGNhbGxfbm9yZXRzKEhfUFVUX1RDRSwgbGlvYm4sIGlvYmEsIHRjZXZhbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgbG9uZyBwbHBhcl90Y2VfcHV0X2luZGlyZWN0KHVuc2lnbmVkIGxvbmcgbGlvYm4sCisJCQkJCSAgdW5zaWduZWQgbG9uZyBpb2JhLAorCQkJCQkgIHVuc2lnbmVkIGxvbmcgcGFnZSwKKwkJCQkJICB1bnNpZ25lZCBsb25nIGNvdW50KQoreworCXJldHVybiBwbHBhcl9oY2FsbF9ub3JldHMoSF9QVVRfVENFX0lORElSRUNULCBsaW9ibiwgaW9iYSwgcGFnZSwgY291bnQpOworfQorCitzdGF0aWMgaW5saW5lIGxvbmcgcGxwYXJfdGNlX3N0dWZmKHVuc2lnbmVkIGxvbmcgbGlvYm4sCisJCQkJICAgdW5zaWduZWQgbG9uZyBpb2JhLAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgdGNldmFsLAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgY291bnQpCit7CisJcmV0dXJuIHBscGFyX2hjYWxsX25vcmV0cyhIX1NUVUZGX1RDRSwgbGlvYm4sIGlvYmEsIHRjZXZhbCwgY291bnQpOworfQorCitzdGF0aWMgaW5saW5lIGxvbmcgcGxwYXJfZ2V0X3Rlcm1fY2hhcih1bnNpZ25lZCBsb25nIHRlcm1ubywKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyAqbGVuX3JldCwKKwkJCQkgICAgICAgY2hhciAqYnVmX3JldCkKK3sKKwl1bnNpZ25lZCBsb25nICpsYnVmID0gKHVuc2lnbmVkIGxvbmcgKilidWZfcmV0OyAgLyogVG9EbzogYWxpZ25tZW50PyAqLworCXJldHVybiBwbHBhcl9oY2FsbChIX0dFVF9URVJNX0NIQVIsIHRlcm1ubywgMCwgMCwgMCwKKwkJCSAgIGxlbl9yZXQsIGxidWYrMCwgbGJ1ZisxKTsKK30KKworc3RhdGljIGlubGluZSBsb25nIHBscGFyX3B1dF90ZXJtX2NoYXIodW5zaWduZWQgbG9uZyB0ZXJtbm8sCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgbGVuLAorCQkJCSAgICAgICBjb25zdCBjaGFyICpidWZmZXIpCit7CisJdW5zaWduZWQgbG9uZyAqbGJ1ZiA9ICh1bnNpZ25lZCBsb25nICopYnVmZmVyOyAgLyogVG9EbzogYWxpZ25tZW50PyAqLworCXJldHVybiBwbHBhcl9oY2FsbF9ub3JldHMoSF9QVVRfVEVSTV9DSEFSLCB0ZXJtbm8sIGxlbiwgbGJ1ZlswXSwKKwkJCQkgIGxidWZbMV0pOworfQorCisKKyNlbmRpZiAvKiBfUFBDNjRfUExQQVJfV1JBUFBFUlNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvcG1hY19mZWF0dXJlLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9wbWFjX2ZlYXR1cmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDdlMzZjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvcG1hY19mZWF0dXJlLmgKQEAgLTAsMCArMSwyIEBACisjaW5jbHVkZSA8YXNtLXBwYy9wbWFjX2ZlYXR1cmUuaD4KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvcG1hY19sb3dfaTJjLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9wbWFjX2xvd19pMmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmNmYzcyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvcG1hY19sb3dfaTJjLmgKQEAgLTAsMCArMSwyIEBACisjaW5jbHVkZSA8YXNtLXBwYy9wbWFjX2xvd19pMmMuaD4KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvcG1jLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9wbWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTI0NzQ4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvcG1jLmgKQEAgLTAsMCArMSwyOSBAQAorLyoKKyAqIHBtYy5oCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgIERhdmlkIEdpYnNvbiwgSUJNIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKi8KKyNpZm5kZWYgX1BQQzY0X1BNQ19ICisjZGVmaW5lIF9QUEM2NF9QTUNfSAorCisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorCit0eXBlZGVmIHZvaWQgKCpwZXJmX2lycV90KShzdHJ1Y3QgcHRfcmVncyAqKTsKKworaW50IHJlc2VydmVfcG1jX2hhcmR3YXJlKHBlcmZfaXJxX3QgbmV3X3BlcmZfaXJxKTsKK3ZvaWQgcmVsZWFzZV9wbWNfaGFyZHdhcmUodm9pZCk7CisKKyNlbmRpZiAvKiBfUFBDNjRfUE1DX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L3BvbGwuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L3BvbGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzBmYTNiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvcG9sbC5oCkBAIC0wLDAgKzEsMzIgQEAKKyNpZm5kZWYgX19QUEM2NF9QT0xMX0gKKyNkZWZpbmUgX19QUEM2NF9QT0xMX0gKKworLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMSBQUEM2NCBUZWFtLCBJQk0gQ29ycAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2RlZmluZSBQT0xMSU4JCTB4MDAwMQorI2RlZmluZSBQT0xMUFJJCQkweDAwMDIKKyNkZWZpbmUgUE9MTE9VVAkJMHgwMDA0CisjZGVmaW5lIFBPTExFUlIJCTB4MDAwOAorI2RlZmluZSBQT0xMSFVQCQkweDAwMTAKKyNkZWZpbmUgUE9MTE5WQUwJMHgwMDIwCisjZGVmaW5lIFBPTExSRE5PUk0JMHgwMDQwCisjZGVmaW5lIFBPTExSREJBTkQJMHgwMDgwCisjZGVmaW5lIFBPTExXUk5PUk0JMHgwMTAwCisjZGVmaW5lIFBPTExXUkJBTkQJMHgwMjAwCisjZGVmaW5lIFBPTExNU0cJCTB4MDQwMAorI2RlZmluZSBQT0xMUkVNT1ZFCTB4MTAwMAorCitzdHJ1Y3QgcG9sbGZkIHsKKwlpbnQgZmQ7CisJc2hvcnQgZXZlbnRzOworCXNob3J0IHJldmVudHM7Cit9OworCisjZW5kaWYgLyogX19QUEM2NF9QT0xMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L3Bvc2l4X3R5cGVzLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9wb3NpeF90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxNmRlNzIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9wb3NpeF90eXBlcy5oCkBAIC0wLDAgKzEsMTE5IEBACisjaWZuZGVmIF9QUEM2NF9QT1NJWF9UWVBFU19ICisjZGVmaW5lIF9QUEM2NF9QT1NJWF9UWVBFU19ICisKKy8qCisgKiBUaGlzIGZpbGUgaXMgZ2VuZXJhbGx5IHVzZWQgYnkgdXNlci1sZXZlbCBzb2Z0d2FyZSwgc28geW91IG5lZWQgdG8KKyAqIGJlIGEgbGl0dGxlIGNhcmVmdWwgYWJvdXQgbmFtZXNwYWNlIHBvbGx1dGlvbiBldGMuICBBbHNvLCB3ZSBjYW5ub3QKKyAqIGFzc3VtZSBHQ0MgaXMgYmVpbmcgdXNlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZwlfX2tlcm5lbF9pbm9fdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyAgCV9fa2VybmVsX25saW5rX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludAlfX2tlcm5lbF9tb2RlX3Q7Cit0eXBlZGVmIGxvbmcJCV9fa2VybmVsX29mZl90OwordHlwZWRlZiBsb25nIGxvbmcJX19rZXJuZWxfbG9mZl90OwordHlwZWRlZiBpbnQJCV9fa2VybmVsX3BpZF90OwordHlwZWRlZiBpbnQgICAgICAgICAgICAgX19rZXJuZWxfaXBjX3BpZF90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQJX19rZXJuZWxfdWlkX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludAlfX2tlcm5lbF9naWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZwlfX2tlcm5lbF9zaXplX3Q7Cit0eXBlZGVmIGxvbmcJCV9fa2VybmVsX3NzaXplX3Q7Cit0eXBlZGVmIGxvbmcJCV9fa2VybmVsX3B0cmRpZmZfdDsKK3R5cGVkZWYgbG9uZwkJX19rZXJuZWxfdGltZV90OwordHlwZWRlZiBpbnQJCV9fa2VybmVsX3RpbWVyX3Q7Cit0eXBlZGVmIGludAkJX19rZXJuZWxfY2xvY2tpZF90OwordHlwZWRlZiBsb25nCQlfX2tlcm5lbF9zdXNlY29uZHNfdDsKK3R5cGVkZWYgbG9uZwkJX19rZXJuZWxfY2xvY2tfdDsKK3R5cGVkZWYgaW50CQlfX2tlcm5lbF9kYWRkcl90OwordHlwZWRlZiBjaGFyICoJCV9fa2VybmVsX2NhZGRyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CV9fa2VybmVsX3VpZDE2X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CV9fa2VybmVsX2dpZDE2X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludAlfX2tlcm5lbF91aWQzMl90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQJX19rZXJuZWxfZ2lkMzJfdDsKKwordHlwZWRlZiB1bnNpZ25lZCBpbnQJX19rZXJuZWxfb2xkX3VpZF90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQJX19rZXJuZWxfb2xkX2dpZF90OwordHlwZWRlZiB1bnNpZ25lZCBsb25nCV9fa2VybmVsX29sZF9kZXZfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCWludAl2YWxbMl07Cit9IF9fa2VybmVsX2ZzaWRfdDsKKworI2lmbmRlZiBfX0dOVUNfXworCisjZGVmaW5lCV9fRkRfU0VUKGQsIHNldCkJKChzZXQpLT5mZHNfYml0c1tfX0ZERUxUKGQpXSB8PSBfX0ZETUFTSyhkKSkKKyNkZWZpbmUJX19GRF9DTFIoZCwgc2V0KQkoKHNldCktPmZkc19iaXRzW19fRkRFTFQoZCldICY9IH5fX0ZETUFTSyhkKSkKKyNkZWZpbmUJX19GRF9JU1NFVChkLCBzZXQpCSgoKHNldCktPmZkc19iaXRzW19fRkRFTFQoZCldICYgX19GRE1BU0soZCkpICE9IDApCisjZGVmaW5lCV9fRkRfWkVSTyhzZXQpCVwKKyAgKCh2b2lkKSBtZW1zZXQgKChfX3B0cl90KSAoc2V0KSwgMCwgc2l6ZW9mIChfX2tlcm5lbF9mZF9zZXQpKSkKKworI2Vsc2UgLyogX19HTlVDX18gKi8KKworI2lmIGRlZmluZWQoX19LRVJORUxfXykgfHwgIWRlZmluZWQoX19HTElCQ19fKSB8fCAoX19HTElCQ19fIDwgMikgXAorICAgIHx8IChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPT0gMCkKKy8qIFdpdGggR05VIEMsIHVzZSBpbmxpbmUgZnVuY3Rpb25zIGluc3RlYWQgc28gYXJncyBhcmUgZXZhbHVhdGVkIG9ubHkgb25jZTogKi8KKworI3VuZGVmIF9fRkRfU0VUCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fRkRfU0VUKHVuc2lnbmVkIGxvbmcgZmQsIF9fa2VybmVsX2ZkX3NldCAqZmRzZXRwKQoreworCXVuc2lnbmVkIGxvbmcgX3RtcCA9IGZkIC8gX19ORkRCSVRTOworCXVuc2lnbmVkIGxvbmcgX3JlbSA9IGZkICUgX19ORkRCSVRTOworCWZkc2V0cC0+ZmRzX2JpdHNbX3RtcF0gfD0gKDFVTDw8X3JlbSk7Cit9CisKKyN1bmRlZiBfX0ZEX0NMUgorc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0ZEX0NMUih1bnNpZ25lZCBsb25nIGZkLCBfX2tlcm5lbF9mZF9zZXQgKmZkc2V0cCkKK3sKKwl1bnNpZ25lZCBsb25nIF90bXAgPSBmZCAvIF9fTkZEQklUUzsKKwl1bnNpZ25lZCBsb25nIF9yZW0gPSBmZCAlIF9fTkZEQklUUzsKKwlmZHNldHAtPmZkc19iaXRzW190bXBdICY9IH4oMVVMPDxfcmVtKTsKK30KKworI3VuZGVmIF9fRkRfSVNTRVQKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0ZEX0lTU0VUKHVuc2lnbmVkIGxvbmcgZmQsIF9fa2VybmVsX2ZkX3NldCAqcCkKK3sgCisJdW5zaWduZWQgbG9uZyBfdG1wID0gZmQgLyBfX05GREJJVFM7CisJdW5zaWduZWQgbG9uZyBfcmVtID0gZmQgJSBfX05GREJJVFM7CisJcmV0dXJuIChwLT5mZHNfYml0c1tfdG1wXSAmICgxVUw8PF9yZW0pKSAhPSAwOworfQorCisvKgorICogVGhpcyB3aWxsIHVucm9sbCB0aGUgbG9vcCBmb3IgdGhlIG5vcm1hbCBjb25zdGFudCBjYXNlICg4IGludHMsCisgKiBmb3IgYSAyNTYtYml0IGZkX3NldCkKKyAqLworI3VuZGVmIF9fRkRfWkVSTworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0ZEX1pFUk8oX19rZXJuZWxfZmRfc2V0ICpwKQoreworCXVuc2lnbmVkIGxvbmcgKnRtcCA9ICh1bnNpZ25lZCBsb25nICopcC0+ZmRzX2JpdHM7CisJaW50IGk7CisKKwlpZiAoX19idWlsdGluX2NvbnN0YW50X3AoX19GRFNFVF9MT05HUykpIHsKKwkJc3dpdGNoIChfX0ZEU0VUX0xPTkdTKSB7CisJCSAgICAgIGNhc2UgMTY6CisJCQl0bXBbMTJdID0gMDsgdG1wWzEzXSA9IDA7IHRtcFsxNF0gPSAwOyB0bXBbMTVdID0gMDsKKwkJCXRtcFsgOF0gPSAwOyB0bXBbIDldID0gMDsgdG1wWzEwXSA9IDA7IHRtcFsxMV0gPSAwOworCisJCSAgICAgIGNhc2UgODoKKwkJCXRtcFsgNF0gPSAwOyB0bXBbIDVdID0gMDsgdG1wWyA2XSA9IDA7IHRtcFsgN10gPSAwOworCisJCSAgICAgIGNhc2UgNDoKKwkJCXRtcFsgMF0gPSAwOyB0bXBbIDFdID0gMDsgdG1wWyAyXSA9IDA7IHRtcFsgM10gPSAwOworCQkJcmV0dXJuOworCQl9CisJfQorCWkgPSBfX0ZEU0VUX0xPTkdTOworCXdoaWxlIChpKSB7CisJCWktLTsKKwkJKnRtcCA9IDA7CisJCXRtcCsrOworCX0KK30KKworI2VuZGlmIC8qIGRlZmluZWQoX19LRVJORUxfXykgfHwgIWRlZmluZWQoX19HTElCQ19fKSB8fCAoX19HTElCQ19fIDwgMikgKi8KKyNlbmRpZiAvKiBfX0dOVUNfXyAqLworI2VuZGlmIC8qIF9QUEM2NF9QT1NJWF9UWVBFU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9wcGMzMi5oIGIvaW5jbHVkZS9hc20tcHBjNjQvcHBjMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDA0MDQ4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvcHBjMzIuaApAQCAtMCwwICsxLDEyMiBAQAorI2lmbmRlZiBfUFBDNjRfUFBDMzJfSAorI2RlZmluZSBfUFBDNjRfUFBDMzJfSAorCisjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CisjaW5jbHVkZSA8YXNtL3NpZ2luZm8uaD4KKyNpbmNsdWRlIDxhc20vc2lnbmFsLmg+CisKKy8qCisgKiBEYXRhIHR5cGVzIGFuZCBtYWNyb3MgZm9yIHByb3ZpZGluZyAzMmIgUG93ZXJQQyBzdXBwb3J0LgorICogCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKy8qIFRoZXNlIGFyZSBoZXJlIHRvIHN1cHBvcnQgMzItYml0IHN5c2NhbGxzIG9uIGEgNjQtYml0IGtlcm5lbC4gKi8KKwordHlwZWRlZiBzdHJ1Y3QgY29tcGF0X3NpZ2luZm8geworCWludCBzaV9zaWdubzsKKwlpbnQgc2lfZXJybm87CisJaW50IHNpX2NvZGU7CisKKwl1bmlvbiB7CisJCWludCBfcGFkW1NJX1BBRF9TSVpFMzJdOworCisJCS8qIGtpbGwoKSAqLworCQlzdHJ1Y3QgeworCQkJY29tcGF0X3BpZF90IF9waWQ7CQkvKiBzZW5kZXIncyBwaWQgKi8KKwkJCWNvbXBhdF91aWRfdCBfdWlkOwkJLyogc2VuZGVyJ3MgdWlkICovCisJCX0gX2tpbGw7CisKKwkJLyogUE9TSVguMWIgdGltZXJzICovCisJCXN0cnVjdCB7CisJCQl0aW1lcl90IF90aWQ7CQkJLyogdGltZXIgaWQgKi8KKwkJCWludCBfb3ZlcnJ1bjsJCQkvKiBvdmVycnVuIGNvdW50ICovCisJCQljb21wYXRfc2lndmFsX3QgX3NpZ3ZhbDsJCS8qIHNhbWUgYXMgYmVsb3cgKi8KKwkJCWludCBfc3lzX3ByaXZhdGU7CQkvKiBub3QgdG8gYmUgcGFzc2VkIHRvIHVzZXIgKi8KKwkJfSBfdGltZXI7CisKKwkJLyogUE9TSVguMWIgc2lnbmFscyAqLworCQlzdHJ1Y3QgeworCQkJY29tcGF0X3BpZF90IF9waWQ7CQkvKiBzZW5kZXIncyBwaWQgKi8KKwkJCWNvbXBhdF91aWRfdCBfdWlkOwkJLyogc2VuZGVyJ3MgdWlkICovCisJCQljb21wYXRfc2lndmFsX3QgX3NpZ3ZhbDsKKwkJfSBfcnQ7CisKKwkJLyogU0lHQ0hMRCAqLworCQlzdHJ1Y3QgeworCQkJY29tcGF0X3BpZF90IF9waWQ7CQkvKiB3aGljaCBjaGlsZCAqLworCQkJY29tcGF0X3VpZF90IF91aWQ7CQkvKiBzZW5kZXIncyB1aWQgKi8KKwkJCWludCBfc3RhdHVzOwkJCS8qIGV4aXQgY29kZSAqLworCQkJY29tcGF0X2Nsb2NrX3QgX3V0aW1lOworCQkJY29tcGF0X2Nsb2NrX3QgX3N0aW1lOworCQl9IF9zaWdjaGxkOworCisJCS8qIFNJR0lMTCwgU0lHRlBFLCBTSUdTRUdWLCBTSUdCVVMsIFNJR0VNVCAqLworCQlzdHJ1Y3QgeworCQkJdW5zaWduZWQgaW50IF9hZGRyOyAvKiBmYXVsdGluZyBpbnNuL21lbW9yeSByZWYuICovCisJCX0gX3NpZ2ZhdWx0OworCisJCS8qIFNJR1BPTEwgKi8KKwkJc3RydWN0IHsKKwkJCWludCBfYmFuZDsJLyogUE9MTF9JTiwgUE9MTF9PVVQsIFBPTExfTVNHICovCisJCQlpbnQgX2ZkOworCQl9IF9zaWdwb2xsOworCX0gX3NpZmllbGRzOworfSBjb21wYXRfc2lnaW5mb190OworCisjZGVmaW5lIF9fb2xkX3NpZ2FjdGlvbjMyCW9sZF9zaWdhY3Rpb24zMgorCitzdHJ1Y3QgX19vbGRfc2lnYWN0aW9uMzIgeworCXVuc2lnbmVkCQlzYV9oYW5kbGVyOworCWNvbXBhdF9vbGRfc2lnc2V0X3QgIAlzYV9tYXNrOworCXVuc2lnbmVkIGludCAgICAJc2FfZmxhZ3M7CisJdW5zaWduZWQJCXNhX3Jlc3RvcmVyOyAgICAgLyogbm90IHVzZWQgYnkgTGludXgvU1BBUkMgeWV0ICovCit9OworCisKKworc3RydWN0IHNpZ2FjdGlvbjMyIHsKKyAgICAgICB1bnNpZ25lZCBpbnQgIHNhX2hhbmRsZXI7CS8qIFJlYWxseSBhIHBvaW50ZXIsIGJ1dCBuZWVkIHRvIGRlYWwgd2l0aCAzMiBiaXRzICovCisgICAgICAgdW5zaWduZWQgaW50IHNhX2ZsYWdzOworICAgICAgIHVuc2lnbmVkIGludCBzYV9yZXN0b3JlcjsJLyogQW5vdGhlciAzMiBiaXQgcG9pbnRlciAqLworICAgICAgIGNvbXBhdF9zaWdzZXRfdCBzYV9tYXNrOwkJLyogQSAzMiBiaXQgbWFzayAqLworfTsKKwordHlwZWRlZiBzdHJ1Y3Qgc2lnYWx0c3RhY2tfMzIgeworCXVuc2lnbmVkIGludCBzc19zcDsKKwlpbnQgc3NfZmxhZ3M7CisJY29tcGF0X3NpemVfdCBzc19zaXplOworfSBzdGFja18zMl90OworCitzdHJ1Y3Qgc2lnY29udGV4dDMyIHsKKwl1bnNpZ25lZCBpbnQJX3VudXNlZFs0XTsKKwlpbnQJCXNpZ25hbDsKKwl1bnNpZ25lZCBpbnQJaGFuZGxlcjsKKwl1bnNpZ25lZCBpbnQJb2xkbWFzazsKKwl1MzIgcmVnczsgIC8qIDQgYnl0ZSBwb2ludGVyIHRvIHRoZSBwdF9yZWdzMzIgc3RydWN0dXJlLiAqLworfTsKKworc3RydWN0IG1jb250ZXh0MzIgeworCWVsZl9ncmVnc2V0X3QzMgkJbWNfZ3JlZ3M7CisJZWxmX2ZwcmVnc2V0X3QJCW1jX2ZyZWdzOworCXVuc2lnbmVkIGludAkJbWNfcGFkWzJdOworCWVsZl92cnJlZ3NldF90MzIJbWNfdnJlZ3MgX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oMTYpKSk7Cit9OworCitzdHJ1Y3QgdWNvbnRleHQzMiB7IAorCXVuc2lnbmVkIGludAkgIAl1Y19mbGFnczsKKwl1bnNpZ25lZCBpbnQgCSAgCXVjX2xpbms7CisJc3RhY2tfMzJfdAkgCXVjX3N0YWNrOworCWludAkJIAl1Y19wYWRbN107CisJdTMyCQkJdWNfcmVnczsJLyogcG9pbnRzIHRvIHVjX21jb250ZXh0IGZpZWxkICovCisJY29tcGF0X3NpZ3NldF90CSAJdWNfc2lnbWFzazsJLyogbWFzayBsYXN0IGZvciBleHRlbnNpYmlsaXR5ICovCisJLyogZ2xpYmMgaGFzIDEwMjQtYml0IHNpZ25hbCBtYXNrcywgb3VycyBhcmUgNjQtYml0ICovCisJaW50CQkgCXVjX21hc2tleHRbMzBdOworCWludAkJIAl1Y19wYWQyWzNdOworCXN0cnVjdCBtY29udGV4dDMyCXVjX21jb250ZXh0OworfTsKKworI2VuZGlmICAvKiBfUFBDNjRfUFBDMzJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvcHBjX2FzbS5oIGIvaW5jbHVkZS9hc20tcHBjNjQvcHBjX2FzbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwMzFkOGEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9wcGNfYXNtLmgKQEAgLTAsMCArMSwyNDIgQEAKKy8qCisgKiBhcmNoL3BwYzY0L2tlcm5lbC9wcGNfYXNtLmgKKyAqCisgKiBEZWZpbml0aW9ucyB1c2VkIGJ5IHZhcmlvdXMgYml0cyBvZiBsb3ctbGV2ZWwgYXNzZW1ibHkgY29kZSBvbiBQb3dlclBDLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0xOTk5IEdhcnkgVGhvbWFzLCBQYXVsIE1hY2tlcnJhcywgQ29ydCBEb3VnYW4uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfUFBDNjRfUFBDX0FTTV9ICisjZGVmaW5lIF9QUEM2NF9QUENfQVNNX0gKKy8qCisgKiBNYWNyb3MgZm9yIHN0b3JpbmcgcmVnaXN0ZXJzIGludG8gYW5kIGxvYWRpbmcgcmVnaXN0ZXJzIGZyb20KKyAqIGV4Y2VwdGlvbiBmcmFtZXMuCisgKi8KKyNkZWZpbmUgU0FWRV9HUFIobiwgYmFzZSkJc3RkCW4sR1BSMCs4KihuKShiYXNlKQorI2RlZmluZSBTQVZFXzJHUFJTKG4sIGJhc2UpCVNBVkVfR1BSKG4sIGJhc2UpOyBTQVZFX0dQUihuKzEsIGJhc2UpCisjZGVmaW5lIFNBVkVfNEdQUlMobiwgYmFzZSkJU0FWRV8yR1BSUyhuLCBiYXNlKTsgU0FWRV8yR1BSUyhuKzIsIGJhc2UpCisjZGVmaW5lIFNBVkVfOEdQUlMobiwgYmFzZSkJU0FWRV80R1BSUyhuLCBiYXNlKTsgU0FWRV80R1BSUyhuKzQsIGJhc2UpCisjZGVmaW5lIFNBVkVfMTBHUFJTKG4sIGJhc2UpCVNBVkVfOEdQUlMobiwgYmFzZSk7IFNBVkVfMkdQUlMobis4LCBiYXNlKQorI2RlZmluZSBSRVNUX0dQUihuLCBiYXNlKQlsZAluLEdQUjArOCoobikoYmFzZSkKKyNkZWZpbmUgUkVTVF8yR1BSUyhuLCBiYXNlKQlSRVNUX0dQUihuLCBiYXNlKTsgUkVTVF9HUFIobisxLCBiYXNlKQorI2RlZmluZSBSRVNUXzRHUFJTKG4sIGJhc2UpCVJFU1RfMkdQUlMobiwgYmFzZSk7IFJFU1RfMkdQUlMobisyLCBiYXNlKQorI2RlZmluZSBSRVNUXzhHUFJTKG4sIGJhc2UpCVJFU1RfNEdQUlMobiwgYmFzZSk7IFJFU1RfNEdQUlMobis0LCBiYXNlKQorI2RlZmluZSBSRVNUXzEwR1BSUyhuLCBiYXNlKQlSRVNUXzhHUFJTKG4sIGJhc2UpOyBSRVNUXzJHUFJTKG4rOCwgYmFzZSkKKworI2RlZmluZSBTQVZFX05WR1BSUyhiYXNlKQlTQVZFXzhHUFJTKDE0LCBiYXNlKTsgU0FWRV8xMEdQUlMoMjIsIGJhc2UpCisjZGVmaW5lIFJFU1RfTlZHUFJTKGJhc2UpCVJFU1RfOEdQUlMoMTQsIGJhc2UpOyBSRVNUXzEwR1BSUygyMiwgYmFzZSkKKworI2RlZmluZSBTQVZFX0ZQUihuLCBiYXNlKQlzdGZkCW4sVEhSRUFEX0ZQUjArOCoobikoYmFzZSkKKyNkZWZpbmUgU0FWRV8yRlBSUyhuLCBiYXNlKQlTQVZFX0ZQUihuLCBiYXNlKTsgU0FWRV9GUFIobisxLCBiYXNlKQorI2RlZmluZSBTQVZFXzRGUFJTKG4sIGJhc2UpCVNBVkVfMkZQUlMobiwgYmFzZSk7IFNBVkVfMkZQUlMobisyLCBiYXNlKQorI2RlZmluZSBTQVZFXzhGUFJTKG4sIGJhc2UpCVNBVkVfNEZQUlMobiwgYmFzZSk7IFNBVkVfNEZQUlMobis0LCBiYXNlKQorI2RlZmluZSBTQVZFXzE2RlBSUyhuLCBiYXNlKQlTQVZFXzhGUFJTKG4sIGJhc2UpOyBTQVZFXzhGUFJTKG4rOCwgYmFzZSkKKyNkZWZpbmUgU0FWRV8zMkZQUlMobiwgYmFzZSkJU0FWRV8xNkZQUlMobiwgYmFzZSk7IFNBVkVfMTZGUFJTKG4rMTYsIGJhc2UpCisjZGVmaW5lIFJFU1RfRlBSKG4sIGJhc2UpCWxmZAluLFRIUkVBRF9GUFIwKzgqKG4pKGJhc2UpCisjZGVmaW5lIFJFU1RfMkZQUlMobiwgYmFzZSkJUkVTVF9GUFIobiwgYmFzZSk7IFJFU1RfRlBSKG4rMSwgYmFzZSkKKyNkZWZpbmUgUkVTVF80RlBSUyhuLCBiYXNlKQlSRVNUXzJGUFJTKG4sIGJhc2UpOyBSRVNUXzJGUFJTKG4rMiwgYmFzZSkKKyNkZWZpbmUgUkVTVF84RlBSUyhuLCBiYXNlKQlSRVNUXzRGUFJTKG4sIGJhc2UpOyBSRVNUXzRGUFJTKG4rNCwgYmFzZSkKKyNkZWZpbmUgUkVTVF8xNkZQUlMobiwgYmFzZSkJUkVTVF84RlBSUyhuLCBiYXNlKTsgUkVTVF84RlBSUyhuKzgsIGJhc2UpCisjZGVmaW5lIFJFU1RfMzJGUFJTKG4sIGJhc2UpCVJFU1RfMTZGUFJTKG4sIGJhc2UpOyBSRVNUXzE2RlBSUyhuKzE2LCBiYXNlKQorCisjZGVmaW5lIFNBVkVfVlIobixiLGJhc2UpCWxpIGIsVEhSRUFEX1ZSMCsoMTYqKG4pKTsgIHN0dnggbixiLGJhc2UKKyNkZWZpbmUgU0FWRV8yVlJTKG4sYixiYXNlKQlTQVZFX1ZSKG4sYixiYXNlKTsgU0FWRV9WUihuKzEsYixiYXNlKQorI2RlZmluZSBTQVZFXzRWUlMobixiLGJhc2UpCVNBVkVfMlZSUyhuLGIsYmFzZSk7IFNBVkVfMlZSUyhuKzIsYixiYXNlKQorI2RlZmluZSBTQVZFXzhWUlMobixiLGJhc2UpCVNBVkVfNFZSUyhuLGIsYmFzZSk7IFNBVkVfNFZSUyhuKzQsYixiYXNlKQorI2RlZmluZSBTQVZFXzE2VlJTKG4sYixiYXNlKQlTQVZFXzhWUlMobixiLGJhc2UpOyBTQVZFXzhWUlMobis4LGIsYmFzZSkKKyNkZWZpbmUgU0FWRV8zMlZSUyhuLGIsYmFzZSkJU0FWRV8xNlZSUyhuLGIsYmFzZSk7IFNBVkVfMTZWUlMobisxNixiLGJhc2UpCisjZGVmaW5lIFJFU1RfVlIobixiLGJhc2UpCWxpIGIsVEhSRUFEX1ZSMCsoMTYqKG4pKTsgbHZ4IG4sYixiYXNlCisjZGVmaW5lIFJFU1RfMlZSUyhuLGIsYmFzZSkJUkVTVF9WUihuLGIsYmFzZSk7IFJFU1RfVlIobisxLGIsYmFzZSkKKyNkZWZpbmUgUkVTVF80VlJTKG4sYixiYXNlKQlSRVNUXzJWUlMobixiLGJhc2UpOyBSRVNUXzJWUlMobisyLGIsYmFzZSkKKyNkZWZpbmUgUkVTVF84VlJTKG4sYixiYXNlKQlSRVNUXzRWUlMobixiLGJhc2UpOyBSRVNUXzRWUlMobis0LGIsYmFzZSkKKyNkZWZpbmUgUkVTVF8xNlZSUyhuLGIsYmFzZSkJUkVTVF84VlJTKG4sYixiYXNlKTsgUkVTVF84VlJTKG4rOCxiLGJhc2UpCisjZGVmaW5lIFJFU1RfMzJWUlMobixiLGJhc2UpCVJFU1RfMTZWUlMobixiLGJhc2UpOyBSRVNUXzE2VlJTKG4rMTYsYixiYXNlKQorCisvKiBNYWNyb3MgdG8gYWRqdXN0IHRocmVhZCBwcmlvcml0eSBmb3IgSXNlcmllcyBoYXJkd2FyZSBtdWx0aXRocmVhZGluZyAqLworI2RlZmluZSBITVRfTE9XCQlvciAxLDEsMQorI2RlZmluZSBITVRfTUVESVVNCW9yIDIsMiwyCisjZGVmaW5lIEhNVF9ISUdICW9yIDMsMywzCisKKy8qIEluc2VydCB0aGUgaGlnaCAzMiBiaXRzIG9mIHRoZSBNU1IgaW50byB3aGF0IHdpbGwgYmUgdGhlIG5ldworICAgTVNSICh2aWEgU1JSMSBhbmQgcmZpZCkgIFRoaXMgcHJlc2VydmVzIHRoZSBNU1IuU0YgYW5kIE1TUi5JU0YKKyAgIGJpdHMuICovCisKKyNkZWZpbmUgRklYX1NSUjEocmEsIHJiKQlcCisJbXIJcmIscmE7CQlcCisJbWZtc3IJcmE7CQlcCisJcmxkaW1pCXJhLHJiLDAsMzIKKworI2RlZmluZSBDTFJfVE9QMzIocikJcmx3aW5tCShyKSwociksMCwwLDMxCS8qIGNsZWFyIHRvcCAzMiBiaXRzICovCisKKy8qIAorICogTE9BREFERFIoIHJuLCBuYW1lICkKKyAqICAgbG9hZHMgdGhlIGFkZHJlc3Mgb2YgJ25hbWUnIGludG8gJ3JuJworICoKKyAqIExPQURCQVNFKCBybiwgbmFtZSApCisgKiAgIGxvYWRzIHRoZSBhZGRyZXNzIChsZXNzIHRoZSBsb3cgMTYgYml0cykgb2YgJ25hbWUnIGludG8gJ3JuJworICogICBzdWl0YWJsZSBmb3IgYmFzZStkaXNwIGFkZHJlc3NpbmcKKyAqLworI2RlZmluZSBMT0FEQUREUihybixuYW1lKSBcCisJbGlzCXJuLG5hbWUjI0BoaWdoZXN0OwlcCisJb3JpCXJuLHJuLG5hbWUjI0BoaWdoZXI7CVwKKwlybGRpY3IJcm4scm4sMzIsMzE7CQlcCisJb3JpcwlybixybixuYW1lIyNAaDsJCVwKKwlvcmkJcm4scm4sbmFtZSMjQGwKKworI2RlZmluZSBMT0FEQkFTRShybixuYW1lKSBcCisJbGlzCXJuLG5hbWVAaGlnaGVzdDsJXAorCW9yaQlybixybixuYW1lQGhpZ2hlcjsJXAorCXJsZGljcglybixybiwzMiwzMTsJCVwKKwlvcmlzCXJuLHJuLG5hbWVAaGEKKworCisjZGVmaW5lIFNFVF9SRUdfVE9fQ09OU1QocmVnLCB2YWx1ZSkJICAgICAgICAgCVwKKwlsaXMgICAgIHJlZywoKCh2YWx1ZSk+PjQ4KSYweEZGRkYpOyAgICAgICAgICAgICBcCisJb3JpICAgICByZWcscmVnLCgoKHZhbHVlKT4+MzIpJjB4RkZGRik7ICAgICAgICAgXAorCXJsZGljciAgcmVnLHJlZywzMiwzMTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlvcmlzICAgIHJlZyxyZWcsKCgodmFsdWUpPj4xNikmMHhGRkZGKTsgICAgICAgICBcCisJb3JpICAgICByZWcscmVnLCgodmFsdWUpJjB4RkZGRik7CisKKyNkZWZpbmUgU0VUX1JFR19UT19MQUJFTChyZWcsIGxhYmVsKQkgICAgICAgICAJXAorCWxpcyAgICAgcmVnLChsYWJlbClAaGlnaGVzdDsgICAgICAgICAgICAgICAgICAgIFwKKwlvcmkgICAgIHJlZyxyZWcsKGxhYmVsKUBoaWdoZXI7ICAgICAgICAgICAgICAgICBcCisJcmxkaWNyICByZWcscmVnLDMyLDMxOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCW9yaXMgICAgcmVnLHJlZywobGFiZWwpQGg7ICAgICAgICAgICAgICAgICAgICAgIFwKKwlvcmkgICAgIHJlZyxyZWcsKGxhYmVsKUBsOworCisKKy8qIFBQUEJCQiAtIERSRU5HICBJZiBLRVJORUxCQVNFIGlzIGFsd2F5cyAweEMwLi4uLAorICogVGhlbiB3ZSBjYW4gZWFzaWx5IGRvIHRoaXMgd2l0aCBvbmUgYXNtIGluc24uIC1QZXRlcgorICovCisjZGVmaW5lIHRvcGh5cyhyZCxycykgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGxpcyAgICAgcmQsKChLRVJORUxCQVNFPj40OCkmMHhGRkZGKTsgICBcCisgICAgICAgIHJsZGljciAgcmQscmQsMzIsMzE7ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHN1YiAgICAgcmQscnMscmQKKworI2RlZmluZSB0b3ZpcnQocmQscnMpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBsaXMgICAgIHJkLCgoS0VSTkVMQkFTRT4+NDgpJjB4RkZGRik7ICAgXAorICAgICAgICBybGRpY3IgIHJkLHJkLDMyLDMxOyAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBhZGQgICAgIHJkLHJzLHJkCisKKy8qIENvbmRpdGlvbiBSZWdpc3RlciBCaXQgRmllbGRzICovCisKKyNkZWZpbmUJY3IwCTAKKyNkZWZpbmUJY3IxCTEKKyNkZWZpbmUJY3IyCTIKKyNkZWZpbmUJY3IzCTMKKyNkZWZpbmUJY3I0CTQKKyNkZWZpbmUJY3I1CTUKKyNkZWZpbmUJY3I2CTYKKyNkZWZpbmUJY3I3CTcKKworCisvKiBHZW5lcmFsIFB1cnBvc2UgUmVnaXN0ZXJzIChHUFJzKSAqLworCisjZGVmaW5lCXIwCTAKKyNkZWZpbmUJcjEJMQorI2RlZmluZQlyMgkyCisjZGVmaW5lCXIzCTMKKyNkZWZpbmUJcjQJNAorI2RlZmluZQlyNQk1CisjZGVmaW5lCXI2CTYKKyNkZWZpbmUJcjcJNworI2RlZmluZQlyOAk4CisjZGVmaW5lCXI5CTkKKyNkZWZpbmUJcjEwCTEwCisjZGVmaW5lCXIxMQkxMQorI2RlZmluZQlyMTIJMTIKKyNkZWZpbmUJcjEzCTEzCisjZGVmaW5lCXIxNAkxNAorI2RlZmluZQlyMTUJMTUKKyNkZWZpbmUJcjE2CTE2CisjZGVmaW5lCXIxNwkxNworI2RlZmluZQlyMTgJMTgKKyNkZWZpbmUJcjE5CTE5CisjZGVmaW5lCXIyMAkyMAorI2RlZmluZQlyMjEJMjEKKyNkZWZpbmUJcjIyCTIyCisjZGVmaW5lCXIyMwkyMworI2RlZmluZQlyMjQJMjQKKyNkZWZpbmUJcjI1CTI1CisjZGVmaW5lCXIyNgkyNgorI2RlZmluZQlyMjcJMjcKKyNkZWZpbmUJcjI4CTI4CisjZGVmaW5lCXIyOQkyOQorI2RlZmluZQlyMzAJMzAKKyNkZWZpbmUJcjMxCTMxCisKKworLyogRmxvYXRpbmcgUG9pbnQgUmVnaXN0ZXJzIChGUFJzKSAqLworCisjZGVmaW5lCWZyMAkwCisjZGVmaW5lCWZyMQkxCisjZGVmaW5lCWZyMgkyCisjZGVmaW5lCWZyMwkzCisjZGVmaW5lCWZyNAk0CisjZGVmaW5lCWZyNQk1CisjZGVmaW5lCWZyNgk2CisjZGVmaW5lCWZyNwk3CisjZGVmaW5lCWZyOAk4CisjZGVmaW5lCWZyOQk5CisjZGVmaW5lCWZyMTAJMTAKKyNkZWZpbmUJZnIxMQkxMQorI2RlZmluZQlmcjEyCTEyCisjZGVmaW5lCWZyMTMJMTMKKyNkZWZpbmUJZnIxNAkxNAorI2RlZmluZQlmcjE1CTE1CisjZGVmaW5lCWZyMTYJMTYKKyNkZWZpbmUJZnIxNwkxNworI2RlZmluZQlmcjE4CTE4CisjZGVmaW5lCWZyMTkJMTkKKyNkZWZpbmUJZnIyMAkyMAorI2RlZmluZQlmcjIxCTIxCisjZGVmaW5lCWZyMjIJMjIKKyNkZWZpbmUJZnIyMwkyMworI2RlZmluZQlmcjI0CTI0CisjZGVmaW5lCWZyMjUJMjUKKyNkZWZpbmUJZnIyNgkyNgorI2RlZmluZQlmcjI3CTI3CisjZGVmaW5lCWZyMjgJMjgKKyNkZWZpbmUJZnIyOQkyOQorI2RlZmluZQlmcjMwCTMwCisjZGVmaW5lCWZyMzEJMzEKKworI2RlZmluZQl2cjAJMAorI2RlZmluZQl2cjEJMQorI2RlZmluZQl2cjIJMgorI2RlZmluZQl2cjMJMworI2RlZmluZQl2cjQJNAorI2RlZmluZQl2cjUJNQorI2RlZmluZQl2cjYJNgorI2RlZmluZQl2cjcJNworI2RlZmluZQl2cjgJOAorI2RlZmluZQl2cjkJOQorI2RlZmluZQl2cjEwCTEwCisjZGVmaW5lCXZyMTEJMTEKKyNkZWZpbmUJdnIxMgkxMgorI2RlZmluZQl2cjEzCTEzCisjZGVmaW5lCXZyMTQJMTQKKyNkZWZpbmUJdnIxNQkxNQorI2RlZmluZQl2cjE2CTE2CisjZGVmaW5lCXZyMTcJMTcKKyNkZWZpbmUJdnIxOAkxOAorI2RlZmluZQl2cjE5CTE5CisjZGVmaW5lCXZyMjAJMjAKKyNkZWZpbmUJdnIyMQkyMQorI2RlZmluZQl2cjIyCTIyCisjZGVmaW5lCXZyMjMJMjMKKyNkZWZpbmUJdnIyNAkyNAorI2RlZmluZQl2cjI1CTI1CisjZGVmaW5lCXZyMjYJMjYKKyNkZWZpbmUJdnIyNwkyNworI2RlZmluZQl2cjI4CTI4CisjZGVmaW5lCXZyMjkJMjkKKyNkZWZpbmUJdnIzMAkzMAorI2RlZmluZQl2cjMxCTMxCisKKyNlbmRpZiAvKiBfUFBDNjRfUFBDX0FTTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9wcGNkZWJ1Zy5oIGIvaW5jbHVkZS9hc20tcHBjNjQvcHBjZGVidWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDdmNjk2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvcHBjZGVidWcuaApAQCAtMCwwICsxLDEwOCBAQAorI2lmbmRlZiBfX1BQQ0RFQlVHX0gKKyNkZWZpbmUgX19QUENERUJVR19ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEF1dGhvcjogQWRhbSBMaXRrZSwgSUJNIENvcnAKKyAqIChjKSAyMDAxCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIGRlZmluaXRpb25zIGFuZCBtYWNyb3MgZm9yIGEgcnVudGltZSBkZWJ1Z2dpbmcKKyAqIHN5c3RlbSBmb3IgcHBjNjQgKFRoaXMgc2hvdWxkIGFsc28gd29yayBvbiAzMiBiaXQgd2l0aCBhIGZldyAgICAKKyAqIGFkanVzdG1lbnRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vdWRiZy5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorCisjZGVmaW5lIFBQQ0RCR19CSVRWQUwoWCkgICAgICgoMVVMKTw8KCh1bnNpZ25lZCBsb25nKShYKSkpCisKKy8qIERlZmluZWQgYmVsb3cgYXJlIHRoZSBiaXQgcG9zaXRpb25zIG9mIHZhcmlvdXMgZGVidWcgZmxhZ3MgaW4gdGhlCisgKiBwcGM2NF9kZWJ1Z19zd2l0Y2ggdmFyaWFibGUuCisgKiAtLSBXaGVuIGFkZGluZyBuZXcgdmFsdWVzLCBwbGVhc2UgZW50ZXIgdGhlbSBpbnRvIHRyYWNlIG5hbWVzIGJlbG93IC0tIAorICoKKyAqIFZhbHVlcyA2MiAmIDYzIGNhbiBiZSB1c2VkIHRvIHN0cmVzcyB0aGUgaGFyZHdhcmUgcGFnZSB0YWJsZSBtYW5hZ2VtZW50CisgKiBjb2RlLiAgVGhleSBtdXN0IGJlIHNldCBzdGF0aWNhbGx5LCBhbnkgYXR0ZW1wdCB0byBjaGFuZ2UgdGhlbSBkeW5hbWljYWxseQorICogd291bGQgYmUgYSB2ZXJ5IGJhZCBpZGVhLgorICovCisjZGVmaW5lIFBQQ0RCR19NTUlOSVQgICAgICAgIFBQQ0RCR19CSVRWQUwoMCkKKyNkZWZpbmUgUFBDREJHX01NICAgICAgICAgICAgUFBDREJHX0JJVFZBTCgxKQorI2RlZmluZSBQUENEQkdfU1lTMzIgICAgICAgICBQUENEQkdfQklUVkFMKDIpCisjZGVmaW5lIFBQQ0RCR19TWVMzMk5JICAgICAgIFBQQ0RCR19CSVRWQUwoMykKKyNkZWZpbmUgUFBDREJHX1NZUzMyWAkgICAgIFBQQ0RCR19CSVRWQUwoNCkKKyNkZWZpbmUgUFBDREJHX1NZUzMyTQkgICAgIFBQQ0RCR19CSVRWQUwoNSkKKyNkZWZpbmUgUFBDREJHX1NZUzY0ICAgICAgICAgUFBDREJHX0JJVFZBTCg2KQorI2RlZmluZSBQUENEQkdfU1lTNjROSSAgICAgICBQUENEQkdfQklUVkFMKDcpCisjZGVmaW5lIFBQQ0RCR19TWVM2NFgJICAgICBQUENEQkdfQklUVkFMKDgpCisjZGVmaW5lIFBQQ0RCR19TSUdOQUwgICAgICAgIFBQQ0RCR19CSVRWQUwoOSkKKyNkZWZpbmUgUFBDREJHX1NJR05BTFhNT04gICAgUFBDREJHX0JJVFZBTCgxMCkKKyNkZWZpbmUgUFBDREJHX0JJTkZNVDMyICAgICAgUFBDREJHX0JJVFZBTCgxMSkKKyNkZWZpbmUgUFBDREJHX0JJTkZNVDY0ICAgICAgUFBDREJHX0JJVFZBTCgxMikKKyNkZWZpbmUgUFBDREJHX0JJTkZNVFhNT04gICAgUFBDREJHX0JJVFZBTCgxMykKKyNkZWZpbmUgUFBDREJHX0JJTkZNVF8zMkFERFIgUFBDREJHX0JJVFZBTCgxNCkKKyNkZWZpbmUgUFBDREJHX0FMSUdORklYVVAgICAgUFBDREJHX0JJVFZBTCgxNSkKKyNkZWZpbmUgUFBDREJHX1RDRUlOSVQgICAgICAgUFBDREJHX0JJVFZBTCgxNikKKyNkZWZpbmUgUFBDREJHX1RDRSAgICAgICAgICAgUFBDREJHX0JJVFZBTCgxNykKKyNkZWZpbmUgUFBDREJHX1BIQklOSVQgICAgICAgUFBDREJHX0JJVFZBTCgxOCkKKyNkZWZpbmUgUFBDREJHX1NNUCAgICAgICAgICAgUFBDREJHX0JJVFZBTCgxOSkKKyNkZWZpbmUgUFBDREJHX0JPT1QgICAgICAgICAgUFBDREJHX0JJVFZBTCgyMCkKKyNkZWZpbmUgUFBDREJHX0JVU1dBTEsgICAgICAgUFBDREJHX0JJVFZBTCgyMSkKKyNkZWZpbmUgUFBDREJHX1BST00JICAgICBQUENEQkdfQklUVkFMKDIyKQorI2RlZmluZSBQUENEQkdfUlRBUwkgICAgIFBQQ0RCR19CSVRWQUwoMjMpCisjZGVmaW5lIFBQQ0RCR19IVEFCU1RSRVNTICAgIFBQQ0RCR19CSVRWQUwoNjIpCisjZGVmaW5lIFBQQ0RCR19IVEFCU0laRSAgICAgIFBQQ0RCR19CSVRWQUwoNjMpCisjZGVmaW5lIFBQQ0RCR19OT05FICAgICAgICAgICgwVUwpCisjZGVmaW5lIFBQQ0RCR19BTEwgICAgICAgICAgICgweGZmZmZmZmZmVUwpCisKKy8qIFRoZSBkZWZhdWx0IGluaXRpYWwgdmFsdWUgZm9yIHRoZSBkZWJ1ZyBzd2l0Y2ggKi8KKyNkZWZpbmUgUFBDX0RFQlVHX0RFRkFVTFQgICAgMCAKKy8qICNkZWZpbmUgUFBDX0RFQlVHX0RFRkFVTFQgICAgUFBDREJHX0FMTCAgICAgICAgKi8KKworI2RlZmluZSBQUENEQkdfTlVNX0ZMQUdTICAgICA2NAorCitleHRlcm4gdTY0IHBwYzY0X2RlYnVnX3N3aXRjaDsKKworI2lmZGVmIFdBTlRfUFBDREJHX1RBQgorLyogQSB0YWJsZSBvZiBkZWJ1ZyBzd2l0Y2ggbmFtZXMgdG8gYWxsb3cgbmFtZSBsb29rdXAgaW4geG1vbiAKKyAqIChhbmQgd2hvZXZlciBlbHNlIHdhbnRzIGl0LgorICovCitjaGFyICp0cmFjZV9uYW1lc1tQUENEQkdfTlVNX0ZMQUdTXSA9IHsKKwkvKiBLbm93biBkZWJ1ZyBuYW1lcyAqLworCSJtbWluaXQiLCAJIm1tIiwKKwkic3lzY2FsbDMyIiwgCSJzeXNjYWxsMzJfbmkiLCAic3lzY2FsbDMyeCIsCSJzeXNjYWxsMzJtIiwKKwkic3lzY2FsbDY0IiwgCSJzeXNjYWxsNjRfbmkiLCAic3lzY2FsbDY0eCIsCisJInNpZ25hbCIsCSJzaWduYWxfeG1vbiIsCisJImJpbmZtdDMyIiwJImJpbmZtdDY0IiwJImJpbmZtdF94bW9uIiwJImJpbmZtdF8zMmFkZHIiLAorCSJhbGlnbmZpeHVwIiwgICAidGNlaW5pdCIsICAgICAgInRjZSIsICAgICAgICAgICJwaGJfaW5pdCIsICAgICAKKwkic21wIiwgICAgICAgICAgImJvb3QiLCAgICAgICAgICJidXN3YWxrIiwJInByb20iLAorCSJydGFzIgorfTsKKyNlbHNlCitleHRlcm4gY2hhciAqdHJhY2VfbmFtZXNbNjRdOworI2VuZGlmIC8qIFdBTlRfUFBDREJHX1RBQiAqLworCisjaWZkZWYgQ09ORklHX1BQQ0RCRworLyogTWFjcm8gdG8gY29uZGl0aW9uYWxseSBwcmludCBkZWJ1ZyBiYXNlZCBvbiBkZWJ1Z19zd2l0Y2ggKi8KKyNkZWZpbmUgUFBDREJHKC4uLikgdWRiZ19wcGNkYmcoX19WQV9BUkdTX18pCisKKy8qIE1hY3JvIHRvIGNvbmRpdGlvbmFsbHkgY2FsbCBhIGRlYnVnIHJvdXRpbmUgYmFzZWQgb24gZGVidWdfc3dpdGNoICovCisjZGVmaW5lIFBQQ0RCR0NBTEwoRkxBR1MsRlVOQ1RJT04pIGlmcHBjZGVidWcoRkxBR1MpIEZVTkNUSU9OCisKKy8qIE1hY3JvcyB0byB0ZXN0IGZvciBkZWJ1ZyBzdGF0ZXMgKi8KKyNkZWZpbmUgaWZwcGNkZWJ1ZyhGTEFHUykgaWYgKHVkYmdfaWZkZWJ1ZyhGTEFHUykpCisjZGVmaW5lIHBwY2RlYnVnc2V0KEZMQUdTKSAodWRiZ19pZmRlYnVnKEZMQUdTKSkKKyNkZWZpbmUgUFBDREJHX0JJTkZNVCAodGVzdF90aHJlYWRfZmxhZyhUSUZfMzJCSVQpID8gUFBDREJHX0JJTkZNVDMyIDogUFBDREJHX0JJTkZNVDY0KQorCisjZWxzZQorI2RlZmluZSBQUENEQkcoLi4uKSBkbyB7O30gd2hpbGUgKDApCisjZGVmaW5lIFBQQ0RCR0NBTEwoRkxBR1MsRlVOQ1RJT04pIGRvIHs7fSB3aGlsZSAoMCkKKyNkZWZpbmUgaWZwcGNkZWJ1ZyguLi4pIGlmICgwKQorI2RlZmluZSBwcGNkZWJ1Z3NldChGTEFHUykgKDApCisjZW5kaWYgLyogQ09ORklHX1BQQ0RCRyAqLworCisjZW5kaWYgLypfX1BQQ0RFQlVHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L3Byb2Nlc3Nvci5oIGIvaW5jbHVkZS9hc20tcHBjNjQvcHJvY2Vzc29yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWIzM2QzMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L3Byb2Nlc3Nvci5oCkBAIC0wLDAgKzEsNjY3IEBACisjaWZuZGVmIF9fQVNNX1BQQzY0X1BST0NFU1NPUl9ICisjZGVmaW5lIF9fQVNNX1BQQzY0X1BST0NFU1NPUl9ICisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgUFBDIDY0IFRlYW0sIElCTSBDb3JwCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvc3RyaW5naWZ5Lmg+CisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlIDxhc20vcHBjZGVidWcuaD4KKyNpbmNsdWRlIDxhc20vYS5vdXQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtY2ZnLmg+CisKKy8qIE1hY2hpbmUgU3RhdGUgUmVnaXN0ZXIgKE1TUikgRmllbGRzICovCisjZGVmaW5lIE1TUl9TRl9MRwk2MyAgICAgICAgICAgICAgLyogRW5hYmxlIDY0IGJpdCBtb2RlICovCisjZGVmaW5lIE1TUl9JU0ZfTEcJNjEgICAgICAgICAgICAgIC8qIEludGVycnVwdCA2NGIgbW9kZSB2YWxpZCBvbiA2MzAgKi8KKyNkZWZpbmUgTVNSX0hWX0xHIAk2MCAgICAgICAgICAgICAgLyogSHlwZXJ2aXNvciBzdGF0ZSAqLworI2RlZmluZSBNU1JfVkVDX0xHCTI1CSAgICAgICAgLyogRW5hYmxlIEFsdGlWZWMgKi8KKyNkZWZpbmUgTVNSX1BPV19MRwkxOAkJLyogRW5hYmxlIFBvd2VyIE1hbmFnZW1lbnQgKi8KKyNkZWZpbmUgTVNSX1dFX0xHCTE4CQkvKiBXYWl0IFN0YXRlIEVuYWJsZSAqLworI2RlZmluZSBNU1JfVEdQUl9MRwkxNwkJLyogVExCIFVwZGF0ZSByZWdpc3RlcnMgaW4gdXNlICovCisjZGVmaW5lIE1TUl9DRV9MRwkxNwkJLyogQ3JpdGljYWwgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBNU1JfSUxFX0xHCTE2CQkvKiBJbnRlcnJ1cHQgTGl0dGxlIEVuZGlhbiAqLworI2RlZmluZSBNU1JfRUVfTEcJMTUJCS8qIEV4dGVybmFsIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgTVNSX1BSX0xHCTE0CQkvKiBQcm9ibGVtIFN0YXRlIC8gUHJpdmlsZWdlIExldmVsICovCisjZGVmaW5lIE1TUl9GUF9MRwkxMwkJLyogRmxvYXRpbmcgUG9pbnQgZW5hYmxlICovCisjZGVmaW5lIE1TUl9NRV9MRwkxMgkJLyogTWFjaGluZSBDaGVjayBFbmFibGUgKi8KKyNkZWZpbmUgTVNSX0ZFMF9MRwkxMQkJLyogRmxvYXRpbmcgRXhjZXB0aW9uIG1vZGUgMCAqLworI2RlZmluZSBNU1JfU0VfTEcJMTAJCS8qIFNpbmdsZSBTdGVwICovCisjZGVmaW5lIE1TUl9CRV9MRwk5CQkvKiBCcmFuY2ggVHJhY2UgKi8KKyNkZWZpbmUgTVNSX0RFX0xHCTkgCQkvKiBEZWJ1ZyBFeGNlcHRpb24gRW5hYmxlICovCisjZGVmaW5lIE1TUl9GRTFfTEcJOAkJLyogRmxvYXRpbmcgRXhjZXB0aW9uIG1vZGUgMSAqLworI2RlZmluZSBNU1JfSVBfTEcJNgkJLyogRXhjZXB0aW9uIHByZWZpeCAweDAwMC8weEZGRiAqLworI2RlZmluZSBNU1JfSVJfTEcJNSAJCS8qIEluc3RydWN0aW9uIFJlbG9jYXRlICovCisjZGVmaW5lIE1TUl9EUl9MRwk0IAkJLyogRGF0YSBSZWxvY2F0ZSAqLworI2RlZmluZSBNU1JfUEVfTEcJMwkJLyogUHJvdGVjdGlvbiBFbmFibGUgKi8KKyNkZWZpbmUgTVNSX1BYX0xHCTIJCS8qIFByb3RlY3Rpb24gRXhjbHVzaXZlIE1vZGUgKi8KKyNkZWZpbmUgTVNSX1BNTV9MRwkyCQkvKiBQZXJmb3JtYW5jZSBtb25pdG9yICovCisjZGVmaW5lIE1TUl9SSV9MRwkxCQkvKiBSZWNvdmVyYWJsZSBFeGNlcHRpb24gKi8KKyNkZWZpbmUgTVNSX0xFX0xHCTAgCQkvKiBMaXR0bGUgRW5kaWFuICovCisKKyNpZmRlZiBfX0FTU0VNQkxZX18KKyNkZWZpbmUgX19NQVNLKFgpCSgxPDwoWCkpCisjZWxzZQorI2RlZmluZSBfX01BU0soWCkJKDFVTDw8KFgpKQorI2VuZGlmCisKKyNkZWZpbmUgTVNSX1NGCQlfX01BU0soTVNSX1NGX0xHKQkvKiBFbmFibGUgNjQgYml0IG1vZGUgKi8KKyNkZWZpbmUgTVNSX0lTRgkJX19NQVNLKE1TUl9JU0ZfTEcpCS8qIEludGVycnVwdCA2NGIgbW9kZSB2YWxpZCBvbiA2MzAgKi8KKyNkZWZpbmUgTVNSX0hWIAkJX19NQVNLKE1TUl9IVl9MRykJLyogSHlwZXJ2aXNvciBzdGF0ZSAqLworI2RlZmluZSBNU1JfVkVDCQlfX01BU0soTVNSX1ZFQ19MRykJLyogRW5hYmxlIEFsdGlWZWMgKi8KKyNkZWZpbmUgTVNSX1BPVwkJX19NQVNLKE1TUl9QT1dfTEcpCS8qIEVuYWJsZSBQb3dlciBNYW5hZ2VtZW50ICovCisjZGVmaW5lIE1TUl9XRQkJX19NQVNLKE1TUl9XRV9MRykJLyogV2FpdCBTdGF0ZSBFbmFibGUgKi8KKyNkZWZpbmUgTVNSX1RHUFIJX19NQVNLKE1TUl9UR1BSX0xHKQkvKiBUTEIgVXBkYXRlIHJlZ2lzdGVycyBpbiB1c2UgKi8KKyNkZWZpbmUgTVNSX0NFCQlfX01BU0soTVNSX0NFX0xHKQkvKiBDcml0aWNhbCBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIE1TUl9JTEUJCV9fTUFTSyhNU1JfSUxFX0xHKQkvKiBJbnRlcnJ1cHQgTGl0dGxlIEVuZGlhbiAqLworI2RlZmluZSBNU1JfRUUJCV9fTUFTSyhNU1JfRUVfTEcpCS8qIEV4dGVybmFsIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgTVNSX1BSCQlfX01BU0soTVNSX1BSX0xHKQkvKiBQcm9ibGVtIFN0YXRlIC8gUHJpdmlsZWdlIExldmVsICovCisjZGVmaW5lIE1TUl9GUAkJX19NQVNLKE1TUl9GUF9MRykJLyogRmxvYXRpbmcgUG9pbnQgZW5hYmxlICovCisjZGVmaW5lIE1TUl9NRQkJX19NQVNLKE1TUl9NRV9MRykJLyogTWFjaGluZSBDaGVjayBFbmFibGUgKi8KKyNkZWZpbmUgTVNSX0ZFMAkJX19NQVNLKE1TUl9GRTBfTEcpCS8qIEZsb2F0aW5nIEV4Y2VwdGlvbiBtb2RlIDAgKi8KKyNkZWZpbmUgTVNSX1NFCQlfX01BU0soTVNSX1NFX0xHKQkvKiBTaW5nbGUgU3RlcCAqLworI2RlZmluZSBNU1JfQkUJCV9fTUFTSyhNU1JfQkVfTEcpCS8qIEJyYW5jaCBUcmFjZSAqLworI2RlZmluZSBNU1JfREUJCV9fTUFTSyhNU1JfREVfTEcpCS8qIERlYnVnIEV4Y2VwdGlvbiBFbmFibGUgKi8KKyNkZWZpbmUgTVNSX0ZFMQkJX19NQVNLKE1TUl9GRTFfTEcpCS8qIEZsb2F0aW5nIEV4Y2VwdGlvbiBtb2RlIDEgKi8KKyNkZWZpbmUgTVNSX0lQCQlfX01BU0soTVNSX0lQX0xHKQkvKiBFeGNlcHRpb24gcHJlZml4IDB4MDAwLzB4RkZGICovCisjZGVmaW5lIE1TUl9JUgkJX19NQVNLKE1TUl9JUl9MRykJLyogSW5zdHJ1Y3Rpb24gUmVsb2NhdGUgKi8KKyNkZWZpbmUgTVNSX0RSCQlfX01BU0soTVNSX0RSX0xHKQkvKiBEYXRhIFJlbG9jYXRlICovCisjZGVmaW5lIE1TUl9QRQkJX19NQVNLKE1TUl9QRV9MRykJLyogUHJvdGVjdGlvbiBFbmFibGUgKi8KKyNkZWZpbmUgTVNSX1BYCQlfX01BU0soTVNSX1BYX0xHKQkvKiBQcm90ZWN0aW9uIEV4Y2x1c2l2ZSBNb2RlICovCisjZGVmaW5lIE1TUl9QTU0JCV9fTUFTSyhNU1JfUE1NX0xHKQkvKiBQZXJmb3JtYW5jZSBtb25pdG9yICovCisjZGVmaW5lIE1TUl9SSQkJX19NQVNLKE1TUl9SSV9MRykJLyogUmVjb3ZlcmFibGUgRXhjZXB0aW9uICovCisjZGVmaW5lIE1TUl9MRQkJX19NQVNLKE1TUl9MRV9MRykJLyogTGl0dGxlIEVuZGlhbiAqLworCisjZGVmaW5lIE1TUl8JCU1TUl9NRSB8IE1TUl9SSSB8IE1TUl9JUiB8IE1TUl9EUiB8IE1TUl9JU0YKKyNkZWZpbmUgTVNSX0tFUk5FTCAgICAgIE1TUl8gfCBNU1JfU0YgfCBNU1JfSFYKKworI2RlZmluZSBNU1JfVVNFUjMyCU1TUl8gfCBNU1JfUFIgfCBNU1JfRUUKKyNkZWZpbmUgTVNSX1VTRVI2NAlNU1JfVVNFUjMyIHwgTVNSX1NGCisKKy8qIEZsb2F0aW5nIFBvaW50IFN0YXR1cyBhbmQgQ29udHJvbCBSZWdpc3RlciAoRlBTQ1IpIEZpZWxkcyAqLworCisjZGVmaW5lIEZQU0NSX0ZYCTB4ODAwMDAwMDAJLyogRlBVIGV4Y2VwdGlvbiBzdW1tYXJ5ICovCisjZGVmaW5lIEZQU0NSX0ZFWAkweDQwMDAwMDAwCS8qIEZQVSBlbmFibGVkIGV4Y2VwdGlvbiBzdW1tYXJ5ICovCisjZGVmaW5lIEZQU0NSX1ZYCTB4MjAwMDAwMDAJLyogSW52YWxpZCBvcGVyYXRpb24gc3VtbWFyeSAqLworI2RlZmluZSBGUFNDUl9PWAkweDEwMDAwMDAwCS8qIE92ZXJmbG93IGV4Y2VwdGlvbiBzdW1tYXJ5ICovCisjZGVmaW5lIEZQU0NSX1VYCTB4MDgwMDAwMDAJLyogVW5kZXJmbG93IGV4Y2VwdGlvbiBzdW1tYXJ5ICovCisjZGVmaW5lIEZQU0NSX1pYCTB4MDQwMDAwMDAJLyogWmVyby1kaXZpZGUgZXhjZXB0aW9uIHN1bW1hcnkgKi8KKyNkZWZpbmUgRlBTQ1JfWFgJMHgwMjAwMDAwMAkvKiBJbmV4YWN0IGV4Y2VwdGlvbiBzdW1tYXJ5ICovCisjZGVmaW5lIEZQU0NSX1ZYU05BTgkweDAxMDAwMDAwCS8qIEludmFsaWQgb3AgZm9yIFNOYU4gKi8KKyNkZWZpbmUgRlBTQ1JfVlhJU0kJMHgwMDgwMDAwMAkvKiBJbnZhbGlkIG9wIGZvciBJbnYgLSBJbnYgKi8KKyNkZWZpbmUgRlBTQ1JfVlhJREkJMHgwMDQwMDAwMAkvKiBJbnZhbGlkIG9wIGZvciBJbnYgLyBJbnYgKi8KKyNkZWZpbmUgRlBTQ1JfVlhaRFoJMHgwMDIwMDAwMAkvKiBJbnZhbGlkIG9wIGZvciBaZXJvIC8gWmVybyAqLworI2RlZmluZSBGUFNDUl9WWElNWgkweDAwMTAwMDAwCS8qIEludmFsaWQgb3AgZm9yIEludiAqIFplcm8gKi8KKyNkZWZpbmUgRlBTQ1JfVlhWQwkweDAwMDgwMDAwCS8qIEludmFsaWQgb3AgZm9yIENvbXBhcmUgKi8KKyNkZWZpbmUgRlBTQ1JfRlIJMHgwMDA0MDAwMAkvKiBGcmFjdGlvbiByb3VuZGVkICovCisjZGVmaW5lIEZQU0NSX0ZJCTB4MDAwMjAwMDAJLyogRnJhY3Rpb24gaW5leGFjdCAqLworI2RlZmluZSBGUFNDUl9GUFJGCTB4MDAwMWYwMDAJLyogRlBVIFJlc3VsdCBGbGFncyAqLworI2RlZmluZSBGUFNDUl9GUENDCTB4MDAwMGYwMDAJLyogRlBVIENvbmRpdGlvbiBDb2RlcyAqLworI2RlZmluZSBGUFNDUl9WWFNPRlQJMHgwMDAwMDQwMAkvKiBJbnZhbGlkIG9wIGZvciBzb2Z0d2FyZSByZXF1ZXN0ICovCisjZGVmaW5lIEZQU0NSX1ZYU1FSVAkweDAwMDAwMjAwCS8qIEludmFsaWQgb3AgZm9yIHNxdWFyZSByb290ICovCisjZGVmaW5lIEZQU0NSX1ZYQ1ZJCTB4MDAwMDAxMDAJLyogSW52YWxpZCBvcCBmb3IgaW50ZWdlciBjb252ZXJ0ICovCisjZGVmaW5lIEZQU0NSX1ZFCTB4MDAwMDAwODAJLyogSW52YWxpZCBvcCBleGNlcHRpb24gZW5hYmxlICovCisjZGVmaW5lIEZQU0NSX09FCTB4MDAwMDAwNDAJLyogSUVFRSBvdmVyZmxvdyBleGNlcHRpb24gZW5hYmxlICovCisjZGVmaW5lIEZQU0NSX1VFCTB4MDAwMDAwMjAJLyogSUVFRSB1bmRlcmZsb3cgZXhjZXB0aW9uIGVuYWJsZSAqLworI2RlZmluZSBGUFNDUl9aRQkweDAwMDAwMDEwCS8qIElFRUUgemVybyBkaXZpZGUgZXhjZXB0aW9uIGVuYWJsZSAqLworI2RlZmluZSBGUFNDUl9YRQkweDAwMDAwMDA4CS8qIEZQIGluZXhhY3QgZXhjZXB0aW9uIGVuYWJsZSAqLworI2RlZmluZSBGUFNDUl9OSQkweDAwMDAwMDA0CS8qIEZQVSBub24gSUVFRS1Nb2RlICovCisjZGVmaW5lIEZQU0NSX1JOCTB4MDAwMDAwMDMJLyogRlBVIHJvdW5kaW5nIGNvbnRyb2wgKi8KKworLyogU3BlY2lhbCBQdXJwb3NlIFJlZ2lzdGVycyAoU1BSTnMpKi8KKworI2RlZmluZQlTUFJOX0NEQkNSCTB4M0Q3CS8qIENhY2hlIERlYnVnIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJU1BSTl9DVFIJMHgwMDkJLyogQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJU1BSTl9EQUJSCTB4M0Y1CS8qIERhdGEgQWRkcmVzcyBCcmVha3BvaW50IFJlZ2lzdGVyICovCisjZGVmaW5lCVNQUk5fREFDMQkweDNGNgkvKiBEYXRhIEFkZHJlc3MgQ29tcGFyZSAxICovCisjZGVmaW5lCVNQUk5fREFDMgkweDNGNwkvKiBEYXRhIEFkZHJlc3MgQ29tcGFyZSAyICovCisjZGVmaW5lCVNQUk5fREFSCTB4MDEzCS8qIERhdGEgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZQlTUFJOX0RCQ1IJMHgzRjIJLyogRGVidWcgQ29udHJvbCBSZWdzaXRlciAqLworI2RlZmluZQkgIERCQ1JfRURNCTB4ODAwMDAwMDAKKyNkZWZpbmUJICBEQkNSX0lETQkweDQwMDAwMDAwCisjZGVmaW5lCSAgREJDUl9SU1QoeCkJKCgoeCkgJiAweDMpIDw8IDI4KQorI2RlZmluZQkgICAgREJDUl9SU1RfTk9ORSAgICAgICAJMAorI2RlZmluZQkgICAgREJDUl9SU1RfQ09SRSAgICAgICAJMQorI2RlZmluZQkgICAgREJDUl9SU1RfQ0hJUCAgICAgICAJMgorI2RlZmluZQkgICAgREJDUl9SU1RfU1lTVEVNCQkzCisjZGVmaW5lCSAgREJDUl9JQwkweDA4MDAwMDAwCS8qIEluc3RydWN0aW9uIENvbXBsZXRpb24gRGVidWcgRXZudCAqLworI2RlZmluZQkgIERCQ1JfQlQJMHgwNDAwMDAwMAkvKiBCcmFuY2ggVGFrZW4gRGVidWcgRXZlbnQgKi8KKyNkZWZpbmUJICBEQkNSX0VERQkweDAyMDAwMDAwCS8qIEV4Y2VwdGlvbiBEZWJ1ZyBFdmVudCAqLworI2RlZmluZQkgIERCQ1JfVERFCTB4MDEwMDAwMDAJLyogVFJBUCBEZWJ1ZyBFdmVudCAqLworI2RlZmluZQkgIERCQ1JfRkVSCTB4MDBGODAwMDAJLyogRmlyc3QgRXZlbnRzIFJlbWFpbmluZyBNYXNrICovCisjZGVmaW5lCSAgREJDUl9GVAkweDAwMDQwMDAwCS8qIEZyZWV6ZSBUaW1lcnMgb24gRGVidWcgRXZlbnQgKi8KKyNkZWZpbmUJICBEQkNSX0lBMQkweDAwMDIwMDAwCS8qIEluc3RyLiBBZGRyLiBDb21wYXJlIDEgRW5hYmxlICovCisjZGVmaW5lCSAgREJDUl9JQTIJMHgwMDAxMDAwMAkvKiBJbnN0ci4gQWRkci4gQ29tcGFyZSAyIEVuYWJsZSAqLworI2RlZmluZQkgIERCQ1JfRDFSCTB4MDAwMDgwMDAJLyogRGF0YSBBZGRyLiBDb21wYXJlIDEgUmVhZCBFbmFibGUgKi8KKyNkZWZpbmUJICBEQkNSX0QxVwkweDAwMDA0MDAwCS8qIERhdGEgQWRkci4gQ29tcGFyZSAxIFdyaXRlIEVuYWJsZSAqLworI2RlZmluZQkgIERCQ1JfRDFTKHgpCSgoKHgpICYgMHgzKSA8PCAxMikJLyogRGF0YSBBZHJyLiBDb21wYXJlIDEgU2l6ZSAqLworI2RlZmluZQkgICAgREFDX0JZVEUJMAorI2RlZmluZQkgICAgREFDX0hBTEYJMQorI2RlZmluZQkgICAgREFDX1dPUkQJMgorI2RlZmluZQkgICAgREFDX1FVQUQJMworI2RlZmluZQkgIERCQ1JfRDJSCTB4MDAwMDA4MDAJLyogRGF0YSBBZGRyLiBDb21wYXJlIDIgUmVhZCBFbmFibGUgKi8KKyNkZWZpbmUJICBEQkNSX0QyVwkweDAwMDAwNDAwCS8qIERhdGEgQWRkci4gQ29tcGFyZSAyIFdyaXRlIEVuYWJsZSAqLworI2RlZmluZQkgIERCQ1JfRDJTKHgpCSgoKHgpICYgMHgzKSA8PCA4KQkvKiBEYXRhIEFkZHIuIENvbXBhcmUgMiBTaXplICovCisjZGVmaW5lCSAgREJDUl9TQlQJMHgwMDAwMDA0MAkvKiBTZWNvbmQgQnJhbmNoIFRha2VuIERlYnVnIEV2ZW50ICovCisjZGVmaW5lCSAgREJDUl9TRUQJMHgwMDAwMDAyMAkvKiBTZWNvbmQgRXhjZXB0aW9uIERlYnVnIEV2ZW50ICovCisjZGVmaW5lCSAgREJDUl9TVEQJMHgwMDAwMDAxMAkvKiBTZWNvbmQgVHJhcCBEZWJ1ZyBFdmVudCAqLworI2RlZmluZQkgIERCQ1JfU0lBCTB4MDAwMDAwMDgJLyogU2Vjb25kIElBQyBFbmFibGUgKi8KKyNkZWZpbmUJICBEQkNSX1NEQQkweDAwMDAwMDA0CS8qIFNlY29uZCBEQUMgRW5hYmxlICovCisjZGVmaW5lCSAgREJDUl9KT0kJMHgwMDAwMDAwMgkvKiBKVEFHIFNlcmlhbCBPdXRib3VuZCBJbnQuIEVuYWJsZSAqLworI2RlZmluZQkgIERCQ1JfSklJCTB4MDAwMDAwMDEJLyogSlRBRyBTZXJpYWwgSW5ib3VuZCBJbnQuIEVuYWJsZSAqLworI2RlZmluZQlTUFJOX0RCQ1IwCTB4M0YyCS8qIERlYnVnIENvbnRyb2wgUmVnaXN0ZXIgMCAqLworI2RlZmluZQlTUFJOX0RCQ1IxCTB4M0JECS8qIERlYnVnIENvbnRyb2wgUmVnaXN0ZXIgMSAqLworI2RlZmluZQlTUFJOX0RCU1IJMHgzRjAJLyogRGVidWcgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lCVNQUk5fRENDUgkweDNGQQkvKiBEYXRhIENhY2hlIENhY2hlYWJpbGl0eSBSZWdpc3RlciAqLworI2RlZmluZQkgIERDQ1JfTk9DQUNIRQkJMAkvKiBOb25jYWNoZWFibGUgKi8KKyNkZWZpbmUJICBEQ0NSX0NBQ0hFCQkxCS8qIENhY2hlYWJsZSAqLworI2RlZmluZQlTUFJOX0RDTVAJMHgzRDEJLyogRGF0YSBUTEIgQ29tcGFyZSBSZWdpc3RlciAqLworI2RlZmluZQlTUFJOX0RDV1IJMHgzQkEJLyogRGF0YSBDYWNoZSBXcml0ZS10aHJ1IFJlZ2lzdGVyICovCisjZGVmaW5lCSAgRENXUl9DT1BZCQkwCS8qIENvcHktYmFjayAqLworI2RlZmluZQkgIERDV1JfV1JJVEUJCTEJLyogV3JpdGUtdGhyb3VnaCAqLworI2RlZmluZQlTUFJOX0RFQVIJMHgzRDUJLyogRGF0YSBFcnJvciBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lCVNQUk5fREVDCTB4MDE2CS8qIERlY3JlbWVudCBSZWdpc3RlciAqLworI2RlZmluZQlTUFJOX0RNSVNTCTB4M0QwCS8qIERhdGEgVExCIE1pc3MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJU1BSTl9EU0lTUgkweDAxMgkvKiBEYXRhIFN0b3JhZ2UgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSAgIERTSVNSX05PSFBURQkJMHg0MDAwMDAwMAkvKiBubyB0cmFuc2xhdGlvbiBmb3VuZCAqLworI2RlZmluZSAgIERTSVNSX1BST1RGQVVMVAkweDA4MDAwMDAwCS8qIHByb3RlY3Rpb24gZmF1bHQgKi8KKyNkZWZpbmUgICBEU0lTUl9JU1NUT1JFCQkweDAyMDAwMDAwCS8qIGFjY2VzcyB3YXMgYSBzdG9yZSAqLworI2RlZmluZSAgIERTSVNSX0RBQlJNQVRDSAkweDAwNDAwMDAwCS8qIGhpdCBkYXRhIGJyZWFrcG9pbnQgKi8KKyNkZWZpbmUgICBEU0lTUl9OT1NFR01FTlQJMHgwMDIwMDAwMAkvKiBTVEFCL1NMQiBtaXNzICovCisjZGVmaW5lCVNQUk5fRUFSCTB4MTFBCS8qIEV4dGVybmFsIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJU1BSTl9FU1IJMHgzRDQJLyogRXhjZXB0aW9uIFN5bmRyb21lIFJlZ2lzdGVyICovCisjZGVmaW5lCSAgRVNSX0lNQ1AJMHg4MDAwMDAwMAkvKiBJbnN0ci4gTWFjaGluZSBDaGVjayAtIFByb3RlY3Rpb24gKi8KKyNkZWZpbmUJICBFU1JfSU1DTgkweDQwMDAwMDAwCS8qIEluc3RyLiBNYWNoaW5lIENoZWNrIC0gTm9uLWNvbmZpZyAqLworI2RlZmluZQkgIEVTUl9JTUNCCTB4MjAwMDAwMDAJLyogSW5zdHIuIE1hY2hpbmUgQ2hlY2sgLSBCdXMgZXJyb3IgKi8KKyNkZWZpbmUJICBFU1JfSU1DVAkweDEwMDAwMDAwCS8qIEluc3RyLiBNYWNoaW5lIENoZWNrIC0gVGltZW91dCAqLworI2RlZmluZQkgIEVTUl9QSUwJMHgwODAwMDAwMAkvKiBQcm9ncmFtIEV4Y2VwdGlvbiAtIElsbGVnYWwgKi8KKyNkZWZpbmUJICBFU1JfUFBSCTB4MDQwMDAwMDAJLyogUHJvZ3JhbSBFeGNlcHRpb24gLSBQcml2ZWxlZ2VkICovCisjZGVmaW5lCSAgRVNSX1BUUgkweDAyMDAwMDAwCS8qIFByb2dyYW0gRXhjZXB0aW9uIC0gVHJhcCAqLworI2RlZmluZQkgIEVTUl9EU1QJMHgwMDgwMDAwMAkvKiBTdG9yYWdlIEV4Y2VwdGlvbiAtIERhdGEgbWlzcyAqLworI2RlZmluZQkgIEVTUl9ESVoJMHgwMDQwMDAwMAkvKiBTdG9yYWdlIEV4Y2VwdGlvbiAtIFpvbmUgZmF1bHQgKi8KKyNkZWZpbmUJU1BSTl9FVlBSCTB4M0Q2CS8qIEV4Y2VwdGlvbiBWZWN0b3IgUHJlZml4IFJlZ2lzdGVyICovCisjZGVmaW5lCVNQUk5fSEFTSDEJMHgzRDIJLyogUHJpbWFyeSBIYXNoIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJU1BSTl9IQVNIMgkweDNEMwkvKiBTZWNvbmRhcnkgSGFzaCBBZGRyZXNzIFJlc2dpc3RlciAqLworI2RlZmluZQlTUFJOX0hJRDAJMHgzRjAJLyogSGFyZHdhcmUgSW1wbGVtZW50YXRpb24gUmVnaXN0ZXIgMCAqLworI2RlZmluZQkgIEhJRDBfRU1DUAkoMTw8MzEpCQkvKiBFbmFibGUgTWFjaGluZSBDaGVjayBwaW4gKi8KKyNkZWZpbmUJICBISUQwX0VCQQkoMTw8MjkpCQkvKiBFbmFibGUgQnVzIEFkZHJlc3MgUGFyaXR5ICovCisjZGVmaW5lCSAgSElEMF9FQkQJKDE8PDI4KQkJLyogRW5hYmxlIEJ1cyBEYXRhIFBhcml0eSAqLworI2RlZmluZQkgIEhJRDBfU0JDTEsJKDE8PDI3KQorI2RlZmluZQkgIEhJRDBfRUlDRQkoMTw8MjYpCisjZGVmaW5lCSAgSElEMF9FQ0xLCSgxPDwyNSkKKyNkZWZpbmUJICBISUQwX1BBUgkoMTw8MjQpCisjZGVmaW5lCSAgSElEMF9ET1pFCSgxPDwyMykKKyNkZWZpbmUJICBISUQwX05BUAkoMTw8MjIpCisjZGVmaW5lCSAgSElEMF9TTEVFUAkoMTw8MjEpCisjZGVmaW5lCSAgSElEMF9EUE0JKDE8PDIwKQorI2RlZmluZQkgIEhJRDBfSUNFCSgxPDwxNSkJCS8qIEluc3RydWN0aW9uIENhY2hlIEVuYWJsZSAqLworI2RlZmluZQkgIEhJRDBfRENFCSgxPDwxNCkJCS8qIERhdGEgQ2FjaGUgRW5hYmxlICovCisjZGVmaW5lCSAgSElEMF9JTE9DSwkoMTw8MTMpCQkvKiBJbnN0cnVjdGlvbiBDYWNoZSBMb2NrICovCisjZGVmaW5lCSAgSElEMF9ETE9DSwkoMTw8MTIpCQkvKiBEYXRhIENhY2hlIExvY2sgKi8KKyNkZWZpbmUJICBISUQwX0lDRkkJKDE8PDExKQkJLyogSW5zdHIuIENhY2hlIEZsYXNoIEludmFsaWRhdGUgKi8KKyNkZWZpbmUJICBISUQwX0RDSQkoMTw8MTApCQkvKiBEYXRhIENhY2hlIEludmFsaWRhdGUgKi8KKyNkZWZpbmUgICBISUQwX1NQRAkoMTw8OSkJCS8qIFNwZWN1bGF0aXZlIGRpc2FibGUgKi8KKyNkZWZpbmUgICBISUQwX1NHRQkoMTw8NykJCS8qIFN0b3JlIEdhdGhlcmluZyBFbmFibGUgKi8KKyNkZWZpbmUJICBISUQwX1NJRUQJKDE8PDcpCQkvKiBTZXJpYWwgSW5zdHIuIEV4ZWN1dGlvbiBbRGlzYWJsZV0gKi8KKyNkZWZpbmUgICBISUQwX0JUSUMJKDE8PDUpCQkvKiBCcmFuY2ggVGFyZ2V0IEluc3RydWN0aW9uIENhY2hlIEVuYWJsZSAqLworI2RlZmluZSAgIEhJRDBfQUJFCSgxPDwzKQkJLyogQWRkcmVzcyBCcm9hZGNhc3QgRW5hYmxlICovCisjZGVmaW5lCSAgSElEMF9CSFRFCSgxPDwyKQkJLyogQnJhbmNoIEhpc3RvcnkgVGFibGUgRW5hYmxlICovCisjZGVmaW5lCSAgSElEMF9CVENECSgxPDwxKQkJLyogQnJhbmNoIHRhcmdldCBjYWNoZSBkaXNhYmxlICovCisjZGVmaW5lCVNQUk5fTVNSRE9STQkweDNGMQkvKiBIYXJkd2FyZSBJbXBsZW1lbnRhdGlvbiBSZWdpc3RlciAxICovCisjZGVmaW5lIFNQUk5fSElEMQkweDNGMQkvKiBIYXJkd2FyZSBJbXBsZW1lbnRhdGlvbiBSZWdpc3RlciAxICovCisjZGVmaW5lCVNQUk5fSUFCUgkweDNGMgkvKiBJbnN0cnVjdGlvbiBBZGRyZXNzIEJyZWFrcG9pbnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJU1BSTl9OSUFET1JNCTB4M0YzCS8qIEhhcmR3YXJlIEltcGxlbWVudGF0aW9uIFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgU1BSTl9ISUQ0CTB4M0Y0CS8qIDk3MCBISUQ0ICovCisjZGVmaW5lIFNQUk5fSElENQkweDNGNgkvKiA5NzAgSElENSAqLworI2RlZmluZQlTUFJOX1RTQyAJMHgzRkQJLyogVGhyZWFkIHN3aXRjaCBjb250cm9sICovCisjZGVmaW5lCVNQUk5fVFNUIAkweDNGQwkvKiBUaHJlYWQgc3dpdGNoIHRpbWVvdXQgKi8KKyNkZWZpbmUJU1BSTl9JQUMxCTB4M0Y0CS8qIEluc3RydWN0aW9uIEFkZHJlc3MgQ29tcGFyZSAxICovCisjZGVmaW5lCVNQUk5fSUFDMgkweDNGNQkvKiBJbnN0cnVjdGlvbiBBZGRyZXNzIENvbXBhcmUgMiAqLworI2RlZmluZQlTUFJOX0lDQ1IJMHgzRkIJLyogSW5zdHJ1Y3Rpb24gQ2FjaGUgQ2FjaGVhYmlsaXR5IFJlZ2lzdGVyICovCisjZGVmaW5lCSAgSUNDUl9OT0NBQ0hFCQkwCS8qIE5vbmNhY2hlYWJsZSAqLworI2RlZmluZQkgIElDQ1JfQ0FDSEUJCTEJLyogQ2FjaGVhYmxlICovCisjZGVmaW5lCVNQUk5fSUNEQkRSCTB4M0QzCS8qIEluc3RydWN0aW9uIENhY2hlIERlYnVnIERhdGEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJU1BSTl9JQ01QCTB4M0Q1CS8qIEluc3RydWN0aW9uIFRMQiBDb21wYXJlIFJlZ2lzdGVyICovCisjZGVmaW5lCVNQUk5fSUNUQwkweDNGQgkvKiBJbnN0cnVjdGlvbiBDYWNoZSBUaHJvdHRsaW5nIENvbnRyb2wgUmVnICovCisjZGVmaW5lCVNQUk5fSU1JU1MJMHgzRDQJLyogSW5zdHJ1Y3Rpb24gVExCIE1pc3MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJU1BSTl9JTU1SCTB4MjdFICAJLyogSW50ZXJuYWwgTWVtb3J5IE1hcCBSZWdpc3RlciAqLworI2RlZmluZQlTUFJOX0wyQ1IJMHgzRjkJLyogTGV2ZWwgMiBDYWNoZSBDb250cm9sIFJlZ3NpdGVyICovCisjZGVmaW5lCVNQUk5fTFIJCTB4MDA4CS8qIExpbmsgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJU1BSTl9QQkwxCTB4M0ZDCS8qIFByb3RlY3Rpb24gQm91bmQgTG93ZXIgMSAqLworI2RlZmluZQlTUFJOX1BCTDIJMHgzRkUJLyogUHJvdGVjdGlvbiBCb3VuZCBMb3dlciAyICovCisjZGVmaW5lCVNQUk5fUEJVMQkweDNGRAkvKiBQcm90ZWN0aW9uIEJvdW5kIFVwcGVyIDEgKi8KKyNkZWZpbmUJU1BSTl9QQlUyCTB4M0ZGCS8qIFByb3RlY3Rpb24gQm91bmQgVXBwZXIgMiAqLworI2RlZmluZQlTUFJOX1BJRAkweDNCMQkvKiBQcm9jZXNzIElEICovCisjZGVmaW5lCVNQUk5fUElSCTB4M0ZGCS8qIFByb2Nlc3NvciBJZGVudGlmaWNhdGlvbiBSZWdpc3RlciAqLworI2RlZmluZQlTUFJOX1BJVAkweDNEQgkvKiBQcm9ncmFtbWFibGUgSW50ZXJ2YWwgVGltZXIgKi8KKyNkZWZpbmUJU1BSTl9QVVJSCTB4MTM1CS8qIFByb2Nlc3NvciBVdGlsaXphdGlvbiBvZiBSZXNvdXJjZXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJU1BSTl9QVlIJMHgxMUYJLyogUHJvY2Vzc29yIFZlcnNpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJU1BSTl9SUEEJMHgzRDYJLyogUmVxdWlyZWQgUGh5c2ljYWwgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZQlTUFJOX1NEQQkweDNCRgkvKiBTYW1wbGVkIERhdGEgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZQlTUFJOX1NEUjEJMHgwMTkJLyogTU1VIEhhc2ggQmFzZSBSZWdpc3RlciAqLworI2RlZmluZQlTUFJOX1NHUgkweDNCOQkvKiBTdG9yYWdlIEd1YXJkZWQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJICBTR1JfTk9STUFMCQkwCisjZGVmaW5lCSAgU0dSX0dVQVJERUQJCTEKKyNkZWZpbmUJU1BSTl9TSUEJMHgzQkIJLyogU2FtcGxlZCBJbnN0cnVjdGlvbiBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lCVNQUk5fU1BSRzAJMHgxMTAJLyogU3BlY2lhbCBQdXJwb3NlIFJlZ2lzdGVyIEdlbmVyYWwgMCAqLworI2RlZmluZQlTUFJOX1NQUkcxCTB4MTExCS8qIFNwZWNpYWwgUHVycG9zZSBSZWdpc3RlciBHZW5lcmFsIDEgKi8KKyNkZWZpbmUJU1BSTl9TUFJHMgkweDExMgkvKiBTcGVjaWFsIFB1cnBvc2UgUmVnaXN0ZXIgR2VuZXJhbCAyICovCisjZGVmaW5lCVNQUk5fU1BSRzMJMHgxMTMJLyogU3BlY2lhbCBQdXJwb3NlIFJlZ2lzdGVyIEdlbmVyYWwgMyAqLworI2RlZmluZQlTUFJOX1NSUjAJMHgwMUEJLyogU2F2ZS9SZXN0b3JlIFJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUJU1BSTl9TUlIxCTB4MDFCCS8qIFNhdmUvUmVzdG9yZSBSZWdpc3RlciAxICovCisjZGVmaW5lCVNQUk5fVEJSTAkweDEwQwkvKiBUaW1lIEJhc2UgUmVhZCBMb3dlciBSZWdpc3RlciAodXNlciwgUi9PKSAqLworI2RlZmluZQlTUFJOX1RCUlUJMHgxMEQJLyogVGltZSBCYXNlIFJlYWQgVXBwZXIgUmVnaXN0ZXIgKHVzZXIsIFIvTykgKi8KKyNkZWZpbmUJU1BSTl9UQldMCTB4MTFDCS8qIFRpbWUgQmFzZSBMb3dlciBSZWdpc3RlciAoc3VwZXIsIFcvTykgKi8KKyNkZWZpbmUJU1BSTl9UQldVCTB4MTFECS8qIFRpbWUgQmFzZSBXcml0ZSBVcHBlciBSZWdpc3RlciAoc3VwZXIsIFcvTykgKi8KKyNkZWZpbmUgU1BSTl9ISU9SCTB4MTM3CS8qIDk3MCBIeXBlcnZpc29yIGludGVycnVwdCBvZmZzZXQgKi8KKyNkZWZpbmUJU1BSTl9UQ1IJMHgzREEJLyogVGltZXIgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZQkgIFRDUl9XUCh4KQkJKCgoeCkmMHgzKTw8MzApCS8qIFdEVCBQZXJpb2QgKi8KKyNkZWZpbmUJICAgIFdQXzJfMTcJCTAJCS8qIDJeMTcgY2xvY2tzICovCisjZGVmaW5lCSAgICBXUF8yXzIxCQkxCQkvKiAyXjIxIGNsb2NrcyAqLworI2RlZmluZQkgICAgV1BfMl8yNQkJMgkJLyogMl4yNSBjbG9ja3MgKi8KKyNkZWZpbmUJICAgIFdQXzJfMjkJCTMJCS8qIDJeMjkgY2xvY2tzICovCisjZGVmaW5lCSAgVENSX1dSQyh4KQkJKCgoeCkmMHgzKTw8MjgpCS8qIFdEVCBSZXNldCBDb250cm9sICovCisjZGVmaW5lCSAgICBXUkNfTk9ORQkJMAkJLyogTm8gcmVzZXQgd2lsbCBvY2N1ciAqLworI2RlZmluZQkgICAgV1JDX0NPUkUJCTEJCS8qIENvcmUgcmVzZXQgd2lsbCBvY2N1ciAqLworI2RlZmluZQkgICAgV1JDX0NISVAJCTIJCS8qIENoaXAgcmVzZXQgd2lsbCBvY2N1ciAqLworI2RlZmluZQkgICAgV1JDX1NZU1RFTQkJMwkJLyogU3lzdGVtIHJlc2V0IHdpbGwgb2NjdXIgKi8KKyNkZWZpbmUJICBUQ1JfV0lFCQkweDA4MDAwMDAwCS8qIFdEVCBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lCSAgVENSX1BJRQkJMHgwNDAwMDAwMAkvKiBQSVQgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZQkgIFRDUl9GUCh4KQkJKCgoeCkmMHgzKTw8MjQpCS8qIEZJVCBQZXJpb2QgKi8KKyNkZWZpbmUJICAgIEZQXzJfOQkJMAkJLyogMl45IGNsb2NrcyAqLworI2RlZmluZQkgICAgRlBfMl8xMwkJMQkJLyogMl4xMyBjbG9ja3MgKi8KKyNkZWZpbmUJICAgIEZQXzJfMTcJCTIJCS8qIDJeMTcgY2xvY2tzICovCisjZGVmaW5lCSAgICBGUF8yXzIxCQkzCQkvKiAyXjIxIGNsb2NrcyAqLworI2RlZmluZQkgIFRDUl9GSUUJCTB4MDA4MDAwMDAJLyogRklUIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUJICBUQ1JfQVJFCQkweDAwNDAwMDAwCS8qIEF1dG8gUmVsb2FkIEVuYWJsZSAqLworI2RlZmluZQlTUFJOX1RIUk0xCTB4M0ZDCS8qIFRoZXJtYWwgTWFuYWdlbWVudCBSZWdpc3RlciAxICovCisjZGVmaW5lCSAgVEhSTTFfVElOCQkoMTw8MCkKKyNkZWZpbmUJICBUSFJNMV9USVYJCSgxPDwxKQorI2RlZmluZQkgIFRIUk0xX1RIUkVTCQkoMHg3Zjw8MikKKyNkZWZpbmUJICBUSFJNMV9USUQJCSgxPDwyOSkKKyNkZWZpbmUJICBUSFJNMV9USUUJCSgxPDwzMCkKKyNkZWZpbmUJICBUSFJNMV9WCQkoMTw8MzEpCisjZGVmaW5lCVNQUk5fVEhSTTIJMHgzRkQJLyogVGhlcm1hbCBNYW5hZ2VtZW50IFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUJU1BSTl9USFJNMwkweDNGRQkvKiBUaGVybWFsIE1hbmFnZW1lbnQgUmVnaXN0ZXIgMyAqLworI2RlZmluZQkgIFRIUk0zX0UJCSgxPDwzMSkKKyNkZWZpbmUJU1BSTl9UU1IJMHgzRDgJLyogVGltZXIgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lCSAgVFNSX0VOVwkJMHg4MDAwMDAwMAkvKiBFbmFibGUgTmV4dCBXYXRjaGRvZyAqLworI2RlZmluZQkgIFRTUl9XSVMJCTB4NDAwMDAwMDAJLyogV0RUIEludGVycnVwdCBTdGF0dXMgKi8KKyNkZWZpbmUJICBUU1JfV1JTKHgpCQkoKCh4KSYweDMpPDwyOCkJLyogV0RUIFJlc2V0IFN0YXR1cyAqLworI2RlZmluZQkgICAgV1JTX05PTkUJCTAJCS8qIE5vIFdEVCByZXNldCBvY2N1cnJlZCAqLworI2RlZmluZQkgICAgV1JTX0NPUkUJCTEJCS8qIFdEVCBmb3JjZWQgY29yZSByZXNldCAqLworI2RlZmluZQkgICAgV1JTX0NISVAJCTIJCS8qIFdEVCBmb3JjZWQgY2hpcCByZXNldCAqLworI2RlZmluZQkgICAgV1JTX1NZU1RFTQkJMwkJLyogV0RUIGZvcmNlZCBzeXN0ZW0gcmVzZXQgKi8KKyNkZWZpbmUJICBUU1JfUElTCQkweDA4MDAwMDAwCS8qIFBJVCBJbnRlcnJ1cHQgU3RhdHVzICovCisjZGVmaW5lCSAgVFNSX0ZJUwkJMHgwNDAwMDAwMAkvKiBGSVQgSW50ZXJydXB0IFN0YXR1cyAqLworI2RlZmluZQlTUFJOX1VTSUEJMHgzQUIJLyogVXNlciBTYW1wbGVkIEluc3RydWN0aW9uIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJU1BSTl9YRVIJMHgwMDEJLyogRml4ZWQgUG9pbnQgRXhjZXB0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lCVNQUk5fWlBSCTB4M0IwCS8qIFpvbmUgUHJvdGVjdGlvbiBSZWdpc3RlciAqLworI2RlZmluZSBTUFJOX1ZSU0FWRSAgICAgMHgxMDAgICAvKiBWZWN0b3Igc2F2ZSAqLworCisvKiBQZXJmb3JtYW5jZSBtb25pdG9yIFNQUnMgKi8KKyNkZWZpbmUgU1BSTl9TSUFSCTc4MAorI2RlZmluZSBTUFJOX1NEQVIJNzgxCisjZGVmaW5lIFNQUk5fTU1DUkEJNzg2CisjZGVmaW5lICAgTU1DUkFfU0lIVgkweDEwMDAwMDAwVUwgLyogc3RhdGUgb2YgTVNSIEhWIHdoZW4gU0lBUiBzZXQgKi8KKyNkZWZpbmUgICBNTUNSQV9TSVBSCTB4MDgwMDAwMDBVTCAvKiBzdGF0ZSBvZiBNU1IgUFIgd2hlbiBTSUFSIHNldCAqLworI2RlZmluZSAgIE1NQ1JBX1NBTVBMRV9FTkFCTEUgMHgwMDAwMDAwMVVMIC8qIGVuYWJsZSBzYW1wbGluZyAqLworI2RlZmluZSBTUFJOX1BNQzEJNzg3CisjZGVmaW5lIFNQUk5fUE1DMgk3ODgKKyNkZWZpbmUgU1BSTl9QTUMzCTc4OQorI2RlZmluZSBTUFJOX1BNQzQJNzkwCisjZGVmaW5lIFNQUk5fUE1DNQk3OTEKKyNkZWZpbmUgU1BSTl9QTUM2CTc5MgorI2RlZmluZSBTUFJOX1BNQzcJNzkzCisjZGVmaW5lIFNQUk5fUE1DOAk3OTQKKyNkZWZpbmUgU1BSTl9NTUNSMAk3OTUKKyNkZWZpbmUgICBNTUNSMF9GQwkweDgwMDAwMDAwVUwgLyogZnJlZXplIGNvdW50ZXJzLiBzZXQgdG8gMSBvbiBhIHBlcmZtb24gZXhjZXB0aW9uICovCisjZGVmaW5lICAgTU1DUjBfRkNTCTB4NDAwMDAwMDBVTCAvKiBmcmVlemUgaW4gc3VwZXJ2aXNvciBzdGF0ZSAqLworI2RlZmluZSAgIE1NQ1IwX0tFUk5FTF9ESVNBQkxFIE1NQ1IwX0ZDUworI2RlZmluZSAgIE1NQ1IwX0ZDUAkweDIwMDAwMDAwVUwgLyogZnJlZXplIGluIHByb2JsZW0gc3RhdGUgKi8KKyNkZWZpbmUgICBNTUNSMF9QUk9CTEVNX0RJU0FCTEUgTU1DUjBfRkNQCisjZGVmaW5lICAgTU1DUjBfRkNNMQkweDEwMDAwMDAwVUwgLyogZnJlZXplIGNvdW50ZXJzIHdoaWxlIE1TUiBtYXJrID0gMSAqLworI2RlZmluZSAgIE1NQ1IwX0ZDTTAJMHgwODAwMDAwMFVMIC8qIGZyZWV6ZSBjb3VudGVycyB3aGlsZSBNU1IgbWFyayA9IDAgKi8KKyNkZWZpbmUgICBNTUNSMF9QTVhFCTB4MDQwMDAwMDBVTCAvKiBwZXJmb3JtYW5jZSBtb25pdG9yIGV4Y2VwdGlvbiBlbmFibGUgKi8KKyNkZWZpbmUgICBNTUNSMF9GQ0VDRQkweDAyMDAwMDAwVUwgLyogZnJlZXplIGNvdW50ZXJzIG9uIGVuYWJsZWQgY29uZGl0aW9uIG9yIGV2ZW50ICovCisvKiB0aW1lIGJhc2UgZXhjZXB0aW9uIGVuYWJsZSAqLworI2RlZmluZSAgIE1NQ1IwX1RCRUUJMHgwMDQwMDAwMFVMIC8qIHRpbWUgYmFzZSBleGNlcHRpb24gZW5hYmxlICovCisjZGVmaW5lICAgTU1DUjBfUE1DMUNFCTB4MDAwMDgwMDBVTCAvKiBQTUMxIGNvdW50IGVuYWJsZSovCisjZGVmaW5lICAgTU1DUjBfUE1DakNFCTB4MDAwMDQwMDBVTCAvKiBQTUNqIGNvdW50IGVuYWJsZSovCisjZGVmaW5lICAgTU1DUjBfVFJJR0dFUgkweDAwMDAyMDAwVUwgLyogVFJJR0dFUiBlbmFibGUgKi8KKyNkZWZpbmUgICBNTUNSMF9QTUFPCTB4MDAwMDAwODBVTCAvKiBwZXJmb3JtYW5jZSBtb25pdG9yIGFsZXJ0IGhhcyBvY2N1cnJlZCwgc2V0IHRvIDAgYWZ0ZXIgaGFuZGxpbmcgZXhjZXB0aW9uICovCisjZGVmaW5lICAgTU1DUjBfU0hSRkMJMHgwMDAwMDA0MFVMIC8qIFNIUnJlIGZyZWV6ZSBjb25kaXRpb25zIGJldHdlZW4gdGhyZWFkcyAqLworI2RlZmluZSAgIE1NQ1IwX0ZDVEkJMHgwMDAwMDAwOFVMIC8qIGZyZWV6ZSBjb3VudGVycyBpbiB0YWdzIGluYWN0aXZlIG1vZGUgKi8KKyNkZWZpbmUgICBNTUNSMF9GQ1RBCTB4MDAwMDAwMDRVTCAvKiBmcmVlemUgY291bnRlcnMgaW4gdGFncyBhY3RpdmUgbW9kZSAqLworI2RlZmluZSAgIE1NQ1IwX0ZDV0FJVAkweDAwMDAwMDAyVUwgLyogZnJlZXplIGNvdW50ZXIgaW4gV0FJVCBzdGF0ZSAqLworI2RlZmluZSAgIE1NQ1IwX0ZDSFYJMHgwMDAwMDAwMVVMIC8qIGZyZWV6ZSBjb25kaXRpb25zIGluIGh5cGVydmlzb3IgbW9kZSAqLworI2RlZmluZSBTUFJOX01NQ1IxCTc5OAorCisvKiBTaG9ydC1oYW5kIHZlcnNpb25zIGZvciBhIG51bWJlciBvZiB0aGUgYWJvdmUgU1BSTnMgKi8KKworI2RlZmluZQlDVFIJU1BSTl9DVFIJLyogQ291bnRlciBSZWdpc3RlciAqLworI2RlZmluZQlEQVIJU1BSTl9EQVIJLyogRGF0YSBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lCURBQlIJU1BSTl9EQUJSCS8qIERhdGEgQWRkcmVzcyBCcmVha3BvaW50IFJlZ2lzdGVyICovCisjZGVmaW5lCURDTVAJU1BSTl9EQ01QICAgICAgCS8qIERhdGEgVExCIENvbXBhcmUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJREVDCVNQUk5fREVDICAgICAgIAkvKiBEZWNyZW1lbnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1JU1MJU1BSTl9ETUlTUyAgICAgCS8qIERhdGEgVExCIE1pc3MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRFNJU1IJU1BSTl9EU0lTUgkvKiBEYXRhIFN0b3JhZ2UgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZQlFQVIJU1BSTl9FQVIgICAgICAgCS8qIEV4dGVybmFsIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJSEFTSDEJU1BSTl9IQVNIMQkvKiBQcmltYXJ5IEhhc2ggQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZQlIQVNIMglTUFJOX0hBU0gyCS8qIFNlY29uZGFyeSBIYXNoIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJSElEMAlTUFJOX0hJRDAJLyogSGFyZHdhcmUgSW1wbGVtZW50YXRpb24gUmVnaXN0ZXIgMCAqLworI2RlZmluZQlNU1JET1JNCVNQUk5fTVNSRE9STQkvKiBNU1IgRG9ybWFudCBSZWdpc3RlciAqLworI2RlZmluZQlOSUFET1JNCVNQUk5fTklBRE9STQkvKiBOSUEgRG9ybWFudCBSZWdpc3RlciAqLworI2RlZmluZQlUU0MgICAgCVNQUk5fVFNDIAkvKiBUaHJlYWQgc3dpdGNoIGNvbnRyb2wgKi8KKyNkZWZpbmUJVFNUICAgIAlTUFJOX1RTVCAJLyogVGhyZWFkIHN3aXRjaCB0aW1lb3V0ICovCisjZGVmaW5lCUlBQlIJU1BSTl9JQUJSICAgICAgCS8qIEluc3RydWN0aW9uIEFkZHJlc3MgQnJlYWtwb2ludCBSZWdpc3RlciAqLworI2RlZmluZQlJQ01QCVNQUk5fSUNNUAkvKiBJbnN0cnVjdGlvbiBUTEIgQ29tcGFyZSBSZWdpc3RlciAqLworI2RlZmluZQlJTUlTUwlTUFJOX0lNSVNTCS8qIEluc3RydWN0aW9uIFRMQiBNaXNzIFJlZ2lzdGVyICovCisjZGVmaW5lCUlNTVIJU1BSTl9JTU1SICAgICAgCS8qIFBQQyA4NjAvODIxIEludGVybmFsIE1lbW9yeSBNYXAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJTDJDUglTUFJOX0wyQ1IgICAgCS8qIFBQQyA3NTAgTDIgY29udHJvbCByZWdpc3RlciAqLworI2RlZmluZQlfX0xSCVNQUk5fTFIKKyNkZWZpbmUJUFZSCVNQUk5fUFZSCS8qIFByb2Nlc3NvciBWZXJzaW9uICovCisjZGVmaW5lCVBJUglTUFJOX1BJUgkvKiBQcm9jZXNzb3IgSUQgKi8KKyNkZWZpbmUJUFVSUglTUFJOX1BVUlIJLyogUHJvY2Vzc29yIFV0aWxpemF0aW9uIG9mIFJlc291cmNlIFJlZ2lzdGVyICovCisvLyNkZWZpbmUJUlBBCVNQUk5fUlBBCS8qIFJlcXVpcmVkIFBoeXNpY2FsIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJU0RSMQlTUFJOX1NEUjEgICAgICAJLyogTU1VIGhhc2ggYmFzZSByZWdpc3RlciAqLworI2RlZmluZQlTUFIwCVNQUk5fU1BSRzAJLyogU3VwZXJ2aXNvciBQcml2YXRlIFJlZ2lzdGVycyAqLworI2RlZmluZQlTUFIxCVNQUk5fU1BSRzEKKyNkZWZpbmUJU1BSMglTUFJOX1NQUkcyCisjZGVmaW5lCVNQUjMJU1BSTl9TUFJHMworI2RlZmluZQlTUFJHMCAgIFNQUk5fU1BSRzAKKyNkZWZpbmUJU1BSRzEgICBTUFJOX1NQUkcxCisjZGVmaW5lCVNQUkcyICAgU1BSTl9TUFJHMgorI2RlZmluZQlTUFJHMyAgIFNQUk5fU1BSRzMKKyNkZWZpbmUJU1JSMAlTUFJOX1NSUjAJLyogU2F2ZSBhbmQgUmVzdG9yZSBSZWdpc3RlciAwICovCisjZGVmaW5lCVNSUjEJU1BSTl9TUlIxCS8qIFNhdmUgYW5kIFJlc3RvcmUgUmVnaXN0ZXIgMSAqLworI2RlZmluZQlUQlJMCVNQUk5fVEJSTAkvKiBUaW1lIEJhc2UgUmVhZCBMb3dlciBSZWdpc3RlciAqLworI2RlZmluZQlUQlJVCVNQUk5fVEJSVQkvKiBUaW1lIEJhc2UgUmVhZCBVcHBlciBSZWdpc3RlciAqLworI2RlZmluZQlUQldMCVNQUk5fVEJXTAkvKiBUaW1lIEJhc2UgV3JpdGUgTG93ZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJVEJXVQlTUFJOX1RCV1UJLyogVGltZSBCYXNlIFdyaXRlIFVwcGVyIFJlZ2lzdGVyICovCisjZGVmaW5lIElDVEMJMTAxOQorI2RlZmluZQlUSFJNMQlTUFJOX1RIUk0xCS8qIFRoZXJtYWwgTWFuYWdlbWVudCBSZWdpc3RlciAxICovCisjZGVmaW5lCVRIUk0yCVNQUk5fVEhSTTIJLyogVGhlcm1hbCBNYW5hZ2VtZW50IFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUJVEhSTTMJU1BSTl9USFJNMwkvKiBUaGVybWFsIE1hbmFnZW1lbnQgUmVnaXN0ZXIgMyAqLworI2RlZmluZQlYRVIJU1BSTl9YRVIKKworLyogUHJvY2Vzc29yIFZlcnNpb24gUmVnaXN0ZXIgKFBWUikgZmllbGQgZXh0cmFjdGlvbiAqLworCisjZGVmaW5lCVBWUl9WRVIocHZyKSAgKCgocHZyKSA+PiAgMTYpICYgMHhGRkZGKQkvKiBWZXJzaW9uIGZpZWxkICovCisjZGVmaW5lCVBWUl9SRVYocHZyKSAgKCgocHZyKSA+PiAgIDApICYgMHhGRkZGKQkvKiBSZXZpc29uIGZpZWxkICovCisKKy8qIFByb2Nlc3NvciBWZXJzaW9uIE51bWJlcnMgKi8KKyNkZWZpbmUJUFZfTk9SVEhTVEFSCTB4MDAzMworI2RlZmluZQlQVl9QVUxTQVIJMHgwMDM0CisjZGVmaW5lCVBWX1BPV0VSNAkweDAwMzUKKyNkZWZpbmUJUFZfSUNFU1RBUgkweDAwMzYKKyNkZWZpbmUJUFZfU1NUQVIJMHgwMDM3CisjZGVmaW5lCVBWX1BPV0VSNHAJMHgwMDM4CisjZGVmaW5lIFBWXzk3MAkJMHgwMDM5CisjZGVmaW5lCVBWX1BPV0VSNQkweDAwM0EKKyNkZWZpbmUgUFZfUE9XRVI1cAkweDAwM0IKKyNkZWZpbmUgUFZfOTcwRlgJMHgwMDNDCisjZGVmaW5lCVBWXzYzMCAgICAgICAgCTB4MDA0MAorI2RlZmluZQlQVl82MzBwCSAgICAgICAgMHgwMDQxCisKKy8qIFBsYXRmb3JtcyBzdXBwb3J0ZWQgYnkgUFBDNjQgKi8KKyNkZWZpbmUgUExBVEZPUk1fUFNFUklFUyAgICAgIDB4MDEwMAorI2RlZmluZSBQTEFURk9STV9QU0VSSUVTX0xQQVIgMHgwMTAxCisjZGVmaW5lIFBMQVRGT1JNX0lTRVJJRVNfTFBBUiAweDAyMDEKKyNkZWZpbmUgUExBVEZPUk1fTFBBUiAgICAgICAgIDB4MDAwMQorI2RlZmluZSBQTEFURk9STV9QT1dFUk1BQyAgICAgMHgwNDAwCisjZGVmaW5lIFBMQVRGT1JNX01BUExFICAgICAgICAweDA1MDAKKworLyogQ29tcGF0aWJpbGl0eSB3aXRoIGRyaXZlcnMgY29taW5nIGZyb20gUFBDMzIgd29ybGQgKi8KKyNkZWZpbmUgX21hY2hpbmUJKHN5c3RlbWNmZy0+cGxhdGZvcm0pCisjZGVmaW5lIF9NQUNIX1BtYWMJUExBVEZPUk1fUE9XRVJNQUMKKworLyoKKyAqIExpc3Qgb2YgaW50ZXJydXB0IGNvbnRyb2xsZXJzLgorICovCisjZGVmaW5lIElDX0lOVkFMSUQgICAgMAorI2RlZmluZSBJQ19PUEVOX1BJQyAgIDEKKyNkZWZpbmUgSUNfUFBDX1hJQyAgICAyCisKKyNkZWZpbmUgWEdMVUUoYSxiKSBhIyNiCisjZGVmaW5lIEdMVUUoYSxiKSBYR0xVRShhLGIpCisKKy8qIGlTZXJpZXMgQ1RSTCByZWdpc3RlciAoZm9yIHJ1bmxhdGNoKSAqLworCisjZGVmaW5lIENUUkxUCQkweDA5OAorI2RlZmluZSBDVFJMRgkJMHgwODgKKyNkZWZpbmUgUlVOTEFUQ0gJMHgwMDAxCisKKyNpZmRlZiBfX0FTU0VNQkxZX18KKworI2RlZmluZSBfR0xPQkFMKG5hbWUpIFwKKwkuc2VjdGlvbiAiLnRleHQiOyBcCisJLmFsaWduIDIgOyBcCisJLmdsb2JsIG5hbWU7IFwKKwkuZ2xvYmwgR0xVRSguLG5hbWUpOyBcCisJLnNlY3Rpb24gIi5vcGQiLCJhdyI7IFwKK25hbWU6IFwKKwkucXVhZCBHTFVFKC4sbmFtZSk7IFwKKwkucXVhZCAuVE9DLkB0b2NiYXNlOyBcCisJLnF1YWQgMDsgXAorCS5wcmV2aW91czsgXAorCS50eXBlIEdMVUUoLixuYW1lKSxAZnVuY3Rpb247IFwKK0dMVUUoLixuYW1lKToKKworI2RlZmluZSBfU1RBVElDKG5hbWUpIFwKKwkuc2VjdGlvbiAiLnRleHQiOyBcCisJLmFsaWduIDIgOyBcCisJLnNlY3Rpb24gIi5vcGQiLCJhdyI7IFwKK25hbWU6IFwKKwkucXVhZCBHTFVFKC4sbmFtZSk7IFwKKwkucXVhZCAuVE9DLkB0b2NiYXNlOyBcCisJLnF1YWQgMDsgXAorCS5wcmV2aW91czsgXAorCS50eXBlIEdMVUUoLixuYW1lKSxAZnVuY3Rpb247IFwKK0dMVUUoLixuYW1lKToKKworI2Vsc2UgLyogX19BU1NFTUJMWV9fICovCisKKy8qCisgKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIG1hY3JvIHRoYXQgcmV0dXJucyBjdXJyZW50CisgKiBpbnN0cnVjdGlvbiBwb2ludGVyICgicHJvZ3JhbSBjb3VudGVyIikuCisgKi8KKyNkZWZpbmUgY3VycmVudF90ZXh0X2FkZHIoKSAoeyBfX2xhYmVsX18gX2w7IF9sOiAmJl9sO30pCisKKy8qIE1hY3JvcyBmb3Igc2V0dGluZyBhbmQgcmV0cmlldmluZyBzcGVjaWFsIHB1cnBvc2UgcmVnaXN0ZXJzICovCisKKyNkZWZpbmUgbWZtc3IoKQkJKHt1bnNpZ25lZCBsb25nIHJ2YWw7IFwKKwkJCWFzbSB2b2xhdGlsZSgibWZtc3IgJTAiIDogIj1yIiAocnZhbCkpOyBydmFsO30pCisKKyNkZWZpbmUgX19tdG1zcmQodiwgbCkJYXNtIHZvbGF0aWxlKCJtdG1zcmQgJTAsIiBfX3N0cmluZ2lmeShsKSBcCisJCQkJICAgICA6IDogInIiICh2KSkKKyNkZWZpbmUgbXRtc3JkKHYpCV9fbXRtc3JkKCh2KSwgMCkKKworI2RlZmluZSBtZnNwcihybikJKHt1bnNpZ25lZCBsb25nIHJ2YWw7IFwKKwkJCWFzbSB2b2xhdGlsZSgibWZzcHIgJTAsIiBfX3N0cmluZ2lmeShybikgXAorCQkJCSAgICAgOiAiPXIiIChydmFsKSk7IHJ2YWw7fSkKKyNkZWZpbmUgbXRzcHIocm4sIHYpCWFzbSB2b2xhdGlsZSgibXRzcHIgIiBfX3N0cmluZ2lmeShybikgIiwlMCIgOiA6ICJyIiAodikpCisKKyNkZWZpbmUgbWZ0YigpCQkoe3Vuc2lnbmVkIGxvbmcgcnZhbDsJXAorCQkJYXNtIHZvbGF0aWxlKCJtZnRiICUwIiA6ICI9ciIgKHJ2YWwpKTsgcnZhbDt9KQorCisjZGVmaW5lIG10dGJsKHYpCWFzbSB2b2xhdGlsZSgibXR0YmwgJTAiOjogInIiKHYpKQorI2RlZmluZSBtdHRidSh2KQlhc20gdm9sYXRpbGUoIm10dGJ1ICUwIjo6ICJyIih2KSkKKworI2RlZmluZSBtZmFzcigpCQkoe3Vuc2lnbmVkIGxvbmcgcnZhbDsgXAorCQkJYXNtIHZvbGF0aWxlKCJtZmFzciAlMCIgOiAiPXIiIChydmFsKSk7IHJ2YWw7fSkKKworc3RhdGljIGlubGluZSB2b2lkIHNldF90Yih1bnNpZ25lZCBpbnQgdXBwZXIsIHVuc2lnbmVkIGludCBsb3dlcikKK3sKKwltdHRibCgwKTsKKwltdHRidSh1cHBlcik7CisJbXR0YmwobG93ZXIpOworfQorCisjZGVmaW5lIF9fZ2V0X1NQKCkJKHt1bnNpZ25lZCBsb25nIHNwOyBcCisJCQlhc20gdm9sYXRpbGUoIm1yICUwLDEiOiAiPXIiIChzcCkpOyBzcDt9KQorCisjaWZkZWYgX19LRVJORUxfXworCitleHRlcm4gaW50IGhhdmVfb2Y7CitleHRlcm4gdTY0IHBwYzY0X2ludGVycnVwdF9jb250cm9sbGVyOworCitzdHJ1Y3QgdGFza19zdHJ1Y3Q7Cit2b2lkIHN0YXJ0X3RocmVhZChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBmZHB0ciwgdW5zaWduZWQgbG9uZyBzcCk7Cit2b2lkIHJlbGVhc2VfdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKKworLyogUHJlcGFyZSB0byBjb3B5IHRocmVhZCBzdGF0ZSAtIHVubGF6eSBhbGwgbGF6eSBzdGF0dXMgKi8KK2V4dGVybiB2b2lkIHByZXBhcmVfdG9fY29weShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7CisKKy8qIENyZWF0ZSBhIG5ldyBrZXJuZWwgdGhyZWFkLiAqLworZXh0ZXJuIGxvbmcga2VybmVsX3RocmVhZChpbnQgKCpmbikodm9pZCAqKSwgdm9pZCAqYXJnLCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKKworLyogTGF6eSBGUFUgaGFuZGxpbmcgb24gdW5pLXByb2Nlc3NvciAqLworZXh0ZXJuIHN0cnVjdCB0YXNrX3N0cnVjdCAqbGFzdF90YXNrX3VzZWRfbWF0aDsKK2V4dGVybiBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmxhc3RfdGFza191c2VkX2FsdGl2ZWM7CisKKy8qIDY0LWJpdCB1c2VyIGFkZHJlc3Mgc3BhY2UgaXMgNDEtYml0cyAoMlRCcyB1c2VyIFZNKSAqLworI2RlZmluZSBUQVNLX1NJWkVfVVNFUjY0ICgweDAwMDAwMjAwMDAwMDAwMDBVTCkKKworLyogCisgKiAzMi1iaXQgdXNlciBhZGRyZXNzIHNwYWNlIGlzIDRHQiAtIDEgcGFnZSAKKyAqICh0aGlzIDEgcGFnZSBpcyBuZWVkZWQgc28gcmVmZXJlbmNpbmcgb2YgMHhGRkZGRkZGRiBnZW5lcmF0ZXMgRUZBVUxUCisgKi8KKyNkZWZpbmUgVEFTS19TSVpFX1VTRVIzMiAoMHgwMDAwMDAwMTAwMDAwMDAwVUwgLSAoMSpQQUdFX1NJWkUpKQorCisjZGVmaW5lIFRBU0tfU0laRSAodGVzdF90aHJlYWRfZmxhZyhUSUZfMzJCSVQpID8gXAorCQlUQVNLX1NJWkVfVVNFUjMyIDogVEFTS19TSVpFX1VTRVI2NCkKKworLyogV2UgY2FuJ3QgYWN0dWFsbHkgdGVsbCB0aGUgVEFTS19TSVpFIGdpdmVuIGp1c3QgdGhlIG1tLCBidXQgZGVmYXVsdAorICogdG8gdGhlIDY0LWJpdCBjYXNlIHRvIG1ha2Ugc3VyZSB0aGF0IGVub3VnaCBnZXRzIGNsZWFuZWQgdXAuICovCisjZGVmaW5lIE1NX1ZNX1NJWkUobW0pCVRBU0tfU0laRV9VU0VSNjQKKworLyogVGhpcyBkZWNpZGVzIHdoZXJlIHRoZSBrZXJuZWwgd2lsbCBzZWFyY2ggZm9yIGEgZnJlZSBjaHVuayBvZiB2bQorICogc3BhY2UgZHVyaW5nIG1tYXAncy4KKyAqLworI2RlZmluZSBUQVNLX1VOTUFQUEVEX0JBU0VfVVNFUjMyIChQQUdFX0FMSUdOKFRBU0tfU0laRV9VU0VSMzIgLyA0KSkKKyNkZWZpbmUgVEFTS19VTk1BUFBFRF9CQVNFX1VTRVI2NCAoUEFHRV9BTElHTihUQVNLX1NJWkVfVVNFUjY0IC8gNCkpCisKKyNkZWZpbmUgVEFTS19VTk1BUFBFRF9CQVNFICgodGVzdF90aHJlYWRfZmxhZyhUSUZfMzJCSVQpfHwocHBjZGVidWdzZXQoUFBDREJHX0JJTkZNVF8zMkFERFIpKSkgPyBcCisJCVRBU0tfVU5NQVBQRURfQkFTRV9VU0VSMzIgOiBUQVNLX1VOTUFQUEVEX0JBU0VfVVNFUjY0ICkKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcgc2VnOworfSBtbV9zZWdtZW50X3Q7CisKK3N0cnVjdCB0aHJlYWRfc3RydWN0IHsKKwl1bnNpZ25lZCBsb25nCWtzcDsJCS8qIEtlcm5lbCBzdGFjayBwb2ludGVyICovCisJdW5zaWduZWQgbG9uZwlrc3BfdnNpZDsKKwlzdHJ1Y3QgcHRfcmVncwkqcmVnczsJCS8qIFBvaW50ZXIgdG8gc2F2ZWQgcmVnaXN0ZXIgc3RhdGUgKi8KKwltbV9zZWdtZW50X3QJZnM7CQkvKiBmb3IgZ2V0X2ZzKCkgdmFsaWRhdGlvbiAqLworCWRvdWJsZQkJZnByWzMyXTsJLyogQ29tcGxldGUgZmxvYXRpbmcgcG9pbnQgc2V0ICovCisJdW5zaWduZWQgbG9uZwlmcHNjcjsJCS8qIEZsb2F0aW5nIHBvaW50IHN0YXR1cyAocGx1cyBwYWQpICovCisJdW5zaWduZWQgbG9uZwlmcGV4Y19tb2RlOwkvKiBGbG9hdGluZy1wb2ludCBleGNlcHRpb24gbW9kZSAqLworCXVuc2lnbmVkIGxvbmcJc3RhcnRfdGI7CS8qIFN0YXJ0IHB1cnIgd2hlbiBwcm9jIHN3aXRjaGVkIGluICovCisJdW5zaWduZWQgbG9uZwlhY2N1bV90YjsJLyogVG90YWwgYWNjdW1pbGF0ZWQgcHVyciBmb3IgcHJvY2VzcyAqLworCXVuc2lnbmVkIGxvbmcJdmRzb19iYXNlOwkvKiBiYXNlIG9mIHRoZSB2RFNPIGxpYnJhcnkgKi8KKyNpZmRlZiBDT05GSUdfQUxUSVZFQworCS8qIENvbXBsZXRlIEFsdGlWZWMgcmVnaXN0ZXIgc2V0ICovCisJdmVjdG9yMTI4CXZyWzMyXSBfX2F0dHJpYnV0ZSgoYWxpZ25lZCgxNikpKTsKKwkvKiBBbHRpVmVjIHN0YXR1cyAqLworCXZlY3RvcjEyOAl2c2NyIF9fYXR0cmlidXRlKChhbGlnbmVkKDE2KSkpOworCXVuc2lnbmVkIGxvbmcJdnJzYXZlOworCWludAkJdXNlZF92cjsJLyogc2V0IGlmIHByb2Nlc3MgaGFzIHVzZWQgYWx0aXZlYyAqLworI2VuZGlmIC8qIENPTkZJR19BTFRJVkVDICovCit9OworCisjZGVmaW5lIEFSQ0hfTUlOX1RBU0tBTElHTiAxNgorCisjZGVmaW5lIElOSVRfU1AJCShzaXplb2YoaW5pdF9zdGFjaykgKyAodW5zaWduZWQgbG9uZykgJmluaXRfc3RhY2spCisKKyNkZWZpbmUgSU5JVF9USFJFQUQgIHsgXAorCS5rc3AgPSBJTklUX1NQLCBcCisJLnJlZ3MgPSAoc3RydWN0IHB0X3JlZ3MgKilJTklUX1NQIC0gMSwgXAorCS5mcyA9IEtFUk5FTF9EUywgXAorCS5mcHIgPSB7MH0sIFwKKwkuZnBzY3IgPSAwLCBcCisJLmZwZXhjX21vZGUgPSBNU1JfRkUwfE1TUl9GRTEsIFwKK30KKworLyoKKyAqIE5vdGU6IHRoZSB2bV9zdGFydCBhbmQgdm1fZW5kIGZpZWxkcyBoZXJlIHNob3VsZCAqbm90KgorICogYmUgaW4ga2VybmVsIHNwYWNlLiAgKENvdWxkIHZtX2VuZCA9PSB2bV9zdGFydCBwZXJoYXBzPykKKyAqLworI2RlZmluZSBJT1JFTUFQX01NQVAgeyAmaW9yZW1hcF9tbSwgMCwgMHgxMDAwLCBOVUxMLCBcCisJCSAgICBQQUdFX1NIQVJFRCwgVk1fUkVBRCB8IFZNX1dSSVRFIHwgVk1fRVhFQywgXAorCQkgICAgMSwgTlVMTCwgTlVMTCB9CisKK2V4dGVybiBzdHJ1Y3QgbW1fc3RydWN0IGlvcmVtYXBfbW07CisKKy8qCisgKiBSZXR1cm4gc2F2ZWQgUEMgb2YgYSBibG9ja2VkIHRocmVhZC4gRm9yIG5vdywgdGhpcyBpcyB0aGUgInVzZXIiIFBDCisgKi8KKyNkZWZpbmUgdGhyZWFkX3NhdmVkX3BjKHRzaykgICAgXAorICAgICAgICAoKHRzayktPnRocmVhZC5yZWdzPyAodHNrKS0+dGhyZWFkLnJlZ3MtPm5pcDogMCkKKwordW5zaWduZWQgbG9uZyBnZXRfd2NoYW4oc3RydWN0IHRhc2tfc3RydWN0ICpwKTsKKworI2RlZmluZSBLU1RLX0VJUCh0c2spICAoKHRzayktPnRocmVhZC5yZWdzPyAodHNrKS0+dGhyZWFkLnJlZ3MtPm5pcDogMCkKKyNkZWZpbmUgS1NUS19FU1AodHNrKSAgKCh0c2spLT50aHJlYWQucmVncz8gKHRzayktPnRocmVhZC5yZWdzLT5ncHJbMV06IDApCisKKy8qIEdldC9zZXQgZmxvYXRpbmctcG9pbnQgZXhjZXB0aW9uIG1vZGUgKi8KKyNkZWZpbmUgR0VUX0ZQRVhDX0NUTCh0c2ssIGFkcikgZ2V0X2ZwZXhjX21vZGUoKHRzayksIChhZHIpKQorI2RlZmluZSBTRVRfRlBFWENfQ1RMKHRzaywgdmFsKSBzZXRfZnBleGNfbW9kZSgodHNrKSwgKHZhbCkpCisKK2V4dGVybiBpbnQgZ2V0X2ZwZXhjX21vZGUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHVuc2lnbmVkIGxvbmcgYWRyKTsKK2V4dGVybiBpbnQgc2V0X2ZwZXhjX21vZGUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHVuc2lnbmVkIGludCB2YWwpOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBfX3VucGFja19mZTAxKHVuc2lnbmVkIGxvbmcgbXNyX2JpdHMpCit7CisJcmV0dXJuICgobXNyX2JpdHMgJiBNU1JfRkUwKSA+PiAxMCkgfCAoKG1zcl9iaXRzICYgTVNSX0ZFMSkgPj4gOCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX3BhY2tfZmUwMSh1bnNpZ25lZCBpbnQgZnBtb2RlKQoreworCXJldHVybiAoKGZwbW9kZSA8PCAxMCkgJiBNU1JfRkUwKSB8ICgoZnBtb2RlIDw8IDgpICYgTVNSX0ZFMSk7Cit9CisKKyNkZWZpbmUgY3B1X3JlbGF4KCkJZG8geyBITVRfbG93KCk7IEhNVF9tZWRpdW0oKTsgYmFycmllcigpOyB9IHdoaWxlICgwKQorCisvKgorICogUHJlZmV0Y2ggbWFjcm9zLgorICovCisjZGVmaW5lIEFSQ0hfSEFTX1BSRUZFVENICisjZGVmaW5lIEFSQ0hfSEFTX1BSRUZFVENIVworI2RlZmluZSBBUkNIX0hBU19TUElOTE9DS19QUkVGRVRDSAorCitzdGF0aWMgaW5saW5lIHZvaWQgcHJlZmV0Y2goY29uc3Qgdm9pZCAqeCkKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImRjYnQgMCwlMCIgOiA6ICJyIiAoeCkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcHJlZmV0Y2h3KGNvbnN0IHZvaWQgKngpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJkY2J0c3QgMCwlMCIgOiA6ICJyIiAoeCkpOworfQorCisjZGVmaW5lIHNwaW5fbG9ja19wcmVmZXRjaCh4KQlwcmVmZXRjaHcoeCkKKworI2RlZmluZSBIQVZFX0FSQ0hfUElDS19NTUFQX0xBWU9VVAorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKy8qCisgKiBOdW1iZXIgb2YgZW50cmllcyBpbiB0aGUgU0xCLiBJZiB0aGlzIGV2ZXIgY2hhbmdlcyB3ZSBzaG91bGQgaGFuZGxlCisgKiBpdCB3aXRoIGEgdXNlIGEgY3B1IGZlYXR1cmUgZml4dXAuCisgKi8KKyNkZWZpbmUgU0xCX05VTV9FTlRSSUVTIDY0CisKKyNlbmRpZiAvKiBfX0FTTV9QUEM2NF9QUk9DRVNTT1JfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvcHJvbS5oIGIvaW5jbHVkZS9hc20tcHBjNjQvcHJvbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0NDBhMmMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9wcm9tLmgKQEAgLTAsMCArMSwyMzAgQEAKKyNpZm5kZWYgX1BQQzY0X1BST01fSAorI2RlZmluZSBfUFBDNjRfUFJPTV9ICisKKy8qCisgKiBEZWZpbml0aW9ucyBmb3IgdGFsa2luZyB0byB0aGUgT3BlbiBGaXJtd2FyZSBQUk9NIG9uCisgKiBQb3dlciBNYWNpbnRvc2ggY29tcHV0ZXJzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NiBQYXVsIE1hY2tlcnJhcy4KKyAqCisgKiBVcGRhdGVzIGZvciBQUEM2NCBieSBQZXRlciBCZXJnbmVyICYgRGF2aWQgRW5nZWJyZXRzZW4sIElCTSBDb3JwLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorCisjZGVmaW5lIFBUUlJFTE9DKHgpICAgICAoKHR5cGVvZih4KSkoKHVuc2lnbmVkIGxvbmcpKHgpIC0gb2Zmc2V0KSkKKyNkZWZpbmUgUFRSVU5SRUxPQyh4KSAgICgodHlwZW9mKHgpKSgodW5zaWduZWQgbG9uZykoeCkgKyBvZmZzZXQpKQorI2RlZmluZSBSRUxPQyh4KSAgICAgICAgKCpQVFJSRUxPQygmKHgpKSkKKworLyogRGVmaW5pdGlvbnMgdXNlZCBieSB0aGUgZmxhdHRlbmVkIGRldmljZSB0cmVlICovCisjZGVmaW5lIE9GX0RUX0hFQURFUgkJMHhkMDBkZmVlZAkvKiA0OiB2ZXJzaW9uLCA0OiB0b3RhbCBzaXplICovCisjZGVmaW5lIE9GX0RUX0JFR0lOX05PREUJMHgxCQkvKiBTdGFydCBub2RlOiBmdWxsIG5hbWUgKi8KKyNkZWZpbmUgT0ZfRFRfRU5EX05PREUJCTB4MgkJLyogRW5kIG5vZGUgKi8KKyNkZWZpbmUgT0ZfRFRfUFJPUAkJMHgzCQkvKiBQcm9wZXJ0eTogbmFtZSBvZmYsIHNpemUsIGNvbnRlbnQgKi8KKyNkZWZpbmUgT0ZfRFRfRU5ECQkweDkKKworI2RlZmluZSBPRl9EVF9WRVJTSU9OCQkxCisKKy8qCisgKiBUaGlzIGlzIHdoYXQgZ2V0cyBwYXNzZWQgdG8gdGhlIGtlcm5lbCBieSBwcm9tX2luaXQgb3Iga2V4ZWMKKyAqCisgKiBUaGUgZHQgc3RydWN0IGNvbnRhaW5zIHRoZSBkZXZpY2UgdHJlZSBzdHJ1Y3R1cmUsIGZ1bGwgcGF0aGVzIGFuZAorICogcHJvcGVydHkgY29udGVudHMuIFRoZSBkdCBzdHJpbmdzIGNvbnRhaW4gYSBzZXBhcmF0ZSBibG9jayB3aXRoIGp1c3QKKyAqIHRoZSBzdHJpbmdzIGZvciB0aGUgcHJvcGVydHkgbmFtZXMsIGFuZCBpcyBmdWxseSBwYWdlIGFsaWduZWQgYW5kCisgKiBzZWxmIGNvbnRhaW5lZCBpbiBhIHBhZ2UsIHNvIHRoYXQgaXQgY2FuIGJlIGtlcHQgYXJvdW5kIGJ5IHRoZSBrZXJuZWwsCisgKiBlYWNoIHByb3BlcnR5IG5hbWUgYXBwZWFycyBvbmx5IG9uY2UgaW4gdGhpcyBwYWdlIChjaGVhcCBjb21wcmVzc2lvbikKKyAqCisgKiB0aGUgbWVtX3Jzdm1hcCBjb250YWlucyBhIG1hcCBvZiByZXNlcnZlZCByYW5nZXMgb2YgcGh5c2ljYWwgbWVtb3J5LAorICogcGFzc2luZyBpdCBoZXJlIGluc3RlYWQgb2YgaW4gdGhlIGRldmljZS10cmVlIGl0c2VsZiBncmVhdGx5IHNpbXBsaWZpZXMKKyAqIHRoZSBqb2Igb2YgZXZlcnlib2R5LiBJdCdzIGp1c3QgYSBsaXN0IG9mIHU2NCBwYWlycyAoYmFzZS9zaXplKSB0aGF0CisgKiBlbmRzIHdoZW4gc2l6ZSBpcyAwCisgKi8KK3N0cnVjdCBib290X3BhcmFtX2hlYWRlcgoreworCXUzMgltYWdpYzsJCQkvKiBtYWdpYyB3b3JkIE9GX0RUX0hFQURFUiAqLworCXUzMgl0b3RhbHNpemU7CQkvKiB0b3RhbCBzaXplIG9mIERUIGJsb2NrICovCisJdTMyCW9mZl9kdF9zdHJ1Y3Q7CQkvKiBvZmZzZXQgdG8gc3RydWN0dXJlICovCisJdTMyCW9mZl9kdF9zdHJpbmdzOwkJLyogb2Zmc2V0IHRvIHN0cmluZ3MgKi8KKwl1MzIJb2ZmX21lbV9yc3ZtYXA7CQkvKiBvZmZzZXQgdG8gbWVtb3J5IHJlc2VydmUgbWFwICovCisJdTMyCXZlcnNpb247CQkvKiBmb3JtYXQgdmVyc2lvbiAqLworCXUzMglsYXN0X2NvbXBfdmVyc2lvbjsJLyogbGFzdCBjb21wYXRpYmxlIHZlcnNpb24gKi8KKwkvKiB2ZXJzaW9uIDIgZmllbGRzIGJlbG93ICovCisJdTMyCWJvb3RfY3B1aWRfcGh5czsJLyogV2hpY2ggcGh5c2ljYWwgQ1BVIGlkIHdlJ3JlIGJvb3Rpbmcgb24gKi8KK307CisKKworCit0eXBlZGVmIHUzMiBwaGFuZGxlOwordHlwZWRlZiB1MzIgaWhhbmRsZTsKKworc3RydWN0IGFkZHJlc3NfcmFuZ2UgeworCXVuc2lnbmVkIGxvbmcgc3BhY2U7CisJdW5zaWduZWQgbG9uZyBhZGRyZXNzOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKK307CisKK3N0cnVjdCBpbnRlcnJ1cHRfaW5mbyB7CisJaW50CWxpbmU7CisJaW50CXNlbnNlOwkJLyogK3ZlLy12ZSBsb2dpYywgZWRnZSBvciBsZXZlbCwgZXRjLiAqLworfTsKKworc3RydWN0IHBjaV9hZGRyZXNzIHsKKwl1MzIgYV9oaTsKKwl1MzIgYV9taWQ7CisJdTMyIGFfbG87Cit9OworCitzdHJ1Y3QgaXNhX2FkZHJlc3MgeworCXUzMiBhX2hpOworCXUzMiBhX2xvOworfTsKKworc3RydWN0IGlzYV9yYW5nZSB7CisJc3RydWN0IGlzYV9hZGRyZXNzIGlzYV9hZGRyOworCXN0cnVjdCBwY2lfYWRkcmVzcyBwY2lfYWRkcjsKKwl1bnNpZ25lZCBpbnQgc2l6ZTsKK307CisKK3N0cnVjdCByZWdfcHJvcGVydHkgeworCXVuc2lnbmVkIGxvbmcgYWRkcmVzczsKKwl1bnNpZ25lZCBsb25nIHNpemU7Cit9OworCitzdHJ1Y3QgcmVnX3Byb3BlcnR5MzIgeworCXVuc2lnbmVkIGludCBhZGRyZXNzOworCXVuc2lnbmVkIGludCBzaXplOworfTsKKworc3RydWN0IHJlZ19wcm9wZXJ0eTY0IHsKKwl1bnNpZ25lZCBsb25nIGFkZHJlc3M7CisJdW5zaWduZWQgbG9uZyBzaXplOworfTsKKworc3RydWN0IHByb3BlcnR5IHsKKwljaGFyCSpuYW1lOworCWludAlsZW5ndGg7CisJdW5zaWduZWQgY2hhciAqdmFsdWU7CisJc3RydWN0IHByb3BlcnR5ICpuZXh0OworfTsKKworLyogTk9URTogdGhlIGRldmljZV9ub2RlIGNvbnRhaW5zIFBDSSBzcGVjaWZpYyBpbmZvIGZvciBwY2kgZGV2aWNlcy4KKyAqIFRoaXMgcGVyaGFwcyBjb3VsZCBiZSBodW5nIG9mZiB0aGUgZGV2aWNlX25vZGUgd2l0aCBhbm90aGVyIHN0cnVjdCwKKyAqIGJ1dCBmb3Igbm93IGl0IGlzIGRpcmVjdGx5IGluIHRoZSBub2RlLiAgVGhlIHBoYiBwdHIgaXMgYSBnb29kCisgKiBpbmRpY2F0aW9uIG9mIGEgcmVhbCBQQ0kgbm9kZS4gIE90aGVyIG5vZGVzIGxlYXZlIHRoZXNlIGZpZWxkcyB6ZXJvZWQuCisgKi8KK3N0cnVjdCBwY2lfY29udHJvbGxlcjsKK3N0cnVjdCBpb21tdV90YWJsZTsKKworc3RydWN0IGRldmljZV9ub2RlIHsKKwljaGFyCSpuYW1lOworCWNoYXIJKnR5cGU7CisJcGhhbmRsZQlub2RlOworCXBoYW5kbGUgbGludXhfcGhhbmRsZTsKKwlpbnQJbl9hZGRyczsKKwlzdHJ1Y3QJYWRkcmVzc19yYW5nZSAqYWRkcnM7CisJaW50CW5faW50cnM7CisJc3RydWN0CWludGVycnVwdF9pbmZvICppbnRyczsKKwljaGFyCSpmdWxsX25hbWU7CisKKwkvKiBQQ0kgc3R1ZmYgcHJvYmFibHkgZG9lc24ndCBiZWxvbmcgaGVyZSAqLworCWludAlidXNubzsJCQkvKiBmb3IgcGNpIGRldmljZXMgKi8KKwlpbnQJYnVzc3Vibm87CQkvKiBmb3IgcGNpIGRldmljZXMgKi8KKwlpbnQJZGV2Zm47CQkJLyogZm9yIHBjaSBkZXZpY2VzICovCisJaW50CWVlaF9tb2RlOwkJLyogU2VlIGVlaC5oIGZvciBwb3NzaWJsZSBFRUhfTU9ERXMgKi8KKwlpbnQJZWVoX2NvbmZpZ19hZGRyOworCWludAlwY2lfZXh0X2NvbmZpZ19zcGFjZTsJLyogZm9yIHBjaSBkZXZpY2VzICovCisJc3RydWN0ICBwY2lfY29udHJvbGxlciAqcGhiOwkvKiBmb3IgcGNpIGRldmljZXMgKi8KKwlzdHJ1Y3QJaW9tbXVfdGFibGUgKmlvbW11X3RhYmxlOwkvKiBmb3IgcGhiJ3Mgb3IgYnJpZGdlcyAqLworCisJc3RydWN0CXByb3BlcnR5ICpwcm9wZXJ0aWVzOworCXN0cnVjdAlkZXZpY2Vfbm9kZSAqcGFyZW50OworCXN0cnVjdAlkZXZpY2Vfbm9kZSAqY2hpbGQ7CisJc3RydWN0CWRldmljZV9ub2RlICpzaWJsaW5nOworCXN0cnVjdAlkZXZpY2Vfbm9kZSAqbmV4dDsJLyogbmV4dCBkZXZpY2Ugb2Ygc2FtZSB0eXBlICovCisJc3RydWN0CWRldmljZV9ub2RlICphbGxuZXh0OwkvKiBuZXh0IGluIGxpc3Qgb2YgYWxsIG5vZGVzICovCisJc3RydWN0ICBwcm9jX2Rpcl9lbnRyeSAqcGRlOyAgICAgICAvKiB0aGlzIG5vZGUncyBwcm9jIGRpcmVjdG9yeSAqLworCXN0cnVjdCAgcHJvY19kaXJfZW50cnkgKm5hbWVfbGluazsgLyogbmFtZSBzeW1saW5rICovCisJc3RydWN0ICBwcm9jX2Rpcl9lbnRyeSAqYWRkcl9saW5rOyAvKiBhZGRyIHN5bWxpbmsgKi8KKwlzdHJ1Y3QgIGtyZWYga3JlZjsKKwl1bnNpZ25lZCBsb25nIF9mbGFnczsKK307CisKK2V4dGVybiBzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX2Nob3NlbjsKKworLyogZmxhZyBkZXNjcmlwdGlvbnMgKi8KKyNkZWZpbmUgT0ZfRFlOQU1JQyAxIC8qIG5vZGUgYW5kIHByb3BlcnRpZXMgd2VyZSBhbGxvY2F0ZWQgdmlhIGttYWxsb2MgKi8KKworI2RlZmluZSBPRl9JU19EWU5BTUlDKHgpIHRlc3RfYml0KE9GX0RZTkFNSUMsICZ4LT5fZmxhZ3MpCisjZGVmaW5lIE9GX01BUktfRFlOQU1JQyh4KSBzZXRfYml0KE9GX0RZTkFNSUMsICZ4LT5fZmxhZ3MpCisKKy8qCisgKiBVbnRpbCAzMi1iaXQgcHBjIGNhbiBhZGQgcHJvY19kaXJfZW50cmllcyB0byBpdHMgZGV2aWNlX25vZGUKKyAqIGRlZmluaXRpb24sIHdlIGNhbm5vdCByZWZlciB0byBwZGUsIG5hbWVfbGluaywgYW5kIGFkZHJfbGluaworICogaW4gYXJjaC1pbmRlcGVuZGVudCBjb2RlLgorICovCisjZGVmaW5lIEhBVkVfQVJDSF9ERVZUUkVFX0ZJWFVQUworCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X25vZGVfcHJvY19lbnRyeShzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuLCBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRlKQoreworCWRuLT5wZGUgPSBkZTsKK30KKworc3RhdGljIHZvaWQgaW5saW5lIHNldF9ub2RlX25hbWVfbGluayhzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuLCBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRlKQoreworCWRuLT5uYW1lX2xpbmsgPSBkZTsKK30KKworc3RhdGljIHZvaWQgaW5saW5lIHNldF9ub2RlX2FkZHJfbGluayhzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuLCBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRlKQoreworCWRuLT5hZGRyX2xpbmsgPSBkZTsKK30KKworLyogT0JTT0xFVEU6IE9sZCBzdGx5ZSBub2RlIGxvb2t1cCAqLworZXh0ZXJuIHN0cnVjdCBkZXZpY2Vfbm9kZSAqZmluZF9kZXZpY2VzKGNvbnN0IGNoYXIgKm5hbWUpOworZXh0ZXJuIHN0cnVjdCBkZXZpY2Vfbm9kZSAqZmluZF90eXBlX2RldmljZXMoY29uc3QgY2hhciAqdHlwZSk7CitleHRlcm4gc3RydWN0IGRldmljZV9ub2RlICpmaW5kX3BhdGhfZGV2aWNlKGNvbnN0IGNoYXIgKnBhdGgpOworZXh0ZXJuIHN0cnVjdCBkZXZpY2Vfbm9kZSAqZmluZF9jb21wYXRpYmxlX2RldmljZXMoY29uc3QgY2hhciAqdHlwZSwKKwkJCQkJCSAgIGNvbnN0IGNoYXIgKmNvbXBhdCk7CitleHRlcm4gc3RydWN0IGRldmljZV9ub2RlICpmaW5kX2FsbF9ub2Rlcyh2b2lkKTsKKworLyogTmV3IHN0eWxlIG5vZGUgbG9va3VwICovCitleHRlcm4gc3RydWN0IGRldmljZV9ub2RlICpvZl9maW5kX25vZGVfYnlfbmFtZShzdHJ1Y3QgZGV2aWNlX25vZGUgKmZyb20sCisJY29uc3QgY2hhciAqbmFtZSk7CitleHRlcm4gc3RydWN0IGRldmljZV9ub2RlICpvZl9maW5kX25vZGVfYnlfdHlwZShzdHJ1Y3QgZGV2aWNlX25vZGUgKmZyb20sCisJY29uc3QgY2hhciAqdHlwZSk7CitleHRlcm4gc3RydWN0IGRldmljZV9ub2RlICpvZl9maW5kX2NvbXBhdGlibGVfbm9kZShzdHJ1Y3QgZGV2aWNlX25vZGUgKmZyb20sCisJY29uc3QgY2hhciAqdHlwZSwgY29uc3QgY2hhciAqY29tcGF0KTsKK2V4dGVybiBzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX2ZpbmRfbm9kZV9ieV9wYXRoKGNvbnN0IGNoYXIgKnBhdGgpOworZXh0ZXJuIHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfZmluZF9ub2RlX2J5X3BoYW5kbGUocGhhbmRsZSBoYW5kbGUpOworZXh0ZXJuIHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfZmluZF9hbGxfbm9kZXMoc3RydWN0IGRldmljZV9ub2RlICpwcmV2KTsKK2V4dGVybiBzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX2dldF9wYXJlbnQoY29uc3Qgc3RydWN0IGRldmljZV9ub2RlICpub2RlKTsKK2V4dGVybiBzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX2dldF9uZXh0X2NoaWxkKGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKKwkJCQkJICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnByZXYpOworZXh0ZXJuIHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZV9nZXQoc3RydWN0IGRldmljZV9ub2RlICpub2RlKTsKK2V4dGVybiB2b2lkIG9mX25vZGVfcHV0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSk7CisKKy8qIEZvciB1cGRhdGluZyB0aGUgZGV2aWNlIHRyZWUgYXQgcnVudGltZSAqLworZXh0ZXJuIHZvaWQgb2ZfYXR0YWNoX25vZGUoc3RydWN0IGRldmljZV9ub2RlICopOworZXh0ZXJuIHZvaWQgb2ZfZGV0YWNoX25vZGUoY29uc3Qgc3RydWN0IGRldmljZV9ub2RlICopOworCisvKiBPdGhlciBQcm90b3R5cGVzICovCitleHRlcm4gdW5zaWduZWQgbG9uZyBwcm9tX2luaXQodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywKKwl1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKK2V4dGVybiB2b2lkIGZpbmlzaF9kZXZpY2VfdHJlZSh2b2lkKTsKK2V4dGVybiBpbnQgZGV2aWNlX2lzX2NvbXBhdGlibGUoc3RydWN0IGRldmljZV9ub2RlICpkZXZpY2UsIGNvbnN0IGNoYXIgKik7CitleHRlcm4gaW50IG1hY2hpbmVfaXNfY29tcGF0aWJsZShjb25zdCBjaGFyICpjb21wYXQpOworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgKmdldF9wcm9wZXJ0eShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJICAgaW50ICpsZW5wKTsKK2V4dGVybiB2b2lkIHByaW50X3Byb3BlcnRpZXMoc3RydWN0IGRldmljZV9ub2RlICpub2RlKTsKK2V4dGVybiBpbnQgcHJvbV9uX2FkZHJfY2VsbHMoc3RydWN0IGRldmljZV9ub2RlKiBucCk7CitleHRlcm4gaW50IHByb21fbl9zaXplX2NlbGxzKHN0cnVjdCBkZXZpY2Vfbm9kZSogbnApOworZXh0ZXJuIGludCBwcm9tX25faW50cl9jZWxscyhzdHJ1Y3QgZGV2aWNlX25vZGUqIG5wKTsKK2V4dGVybiB2b2lkIHByb21fZ2V0X2lycV9zZW5zZXModW5zaWduZWQgY2hhciAqc2Vuc2VzLCBpbnQgb2ZmLCBpbnQgbWF4KTsKK2V4dGVybiB2b2lkIHByb21fYWRkX3Byb3BlcnR5KHN0cnVjdCBkZXZpY2Vfbm9kZSogbnAsIHN0cnVjdCBwcm9wZXJ0eSogcHJvcCk7CisKKyNlbmRpZiAvKiBfUFBDNjRfUFJPTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9wdHJhY2UtY29tbW9uLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9wdHJhY2UtY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYwMzU0NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L3B0cmFjZS1jb21tb24uaApAQCAtMCwwICsxLDcyIEBACisvKgorICogIGxpbnV4L2FyY2gvcHBjNjQva2VybmVsL3B0cmFjZS1jb21tb24uaAorICoKKyAqICAgIENvcHlyaWdodCAoYykgMjAwMiBTdGVwaGVuIFJvdGh3ZWxsLCBJQk0gQ29wcm9yYXRpb24KKyAqICAgIEV4dHJhY3RlZCBmcm9tIHB0cmFjZS5jIGFuZCBwdHJhY2UzMi5jCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgUkVBRE1FLmxlZ2FsIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZgorICogdGhpcyBhcmNoaXZlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfUFBDNjRfUFRSQUNFX0NPTU1PTl9ICisjZGVmaW5lIF9QUEM2NF9QVFJBQ0VfQ09NTU9OX0gKKy8qCisgKiBTZXQgb2YgbXNyIGJpdHMgdGhhdCBnZGIgY2FuIGNoYW5nZSBvbiBiZWhhbGYgb2YgYSBwcm9jZXNzLgorICovCisjZGVmaW5lIE1TUl9ERUJVR0NIQU5HRQkoTVNSX0ZFMCB8IE1TUl9TRSB8IE1TUl9CRSB8IE1TUl9GRTEpCisKKy8qCisgKiBHZXQgY29udGVudHMgb2YgcmVnaXN0ZXIgUkVHTk8gaW4gdGFzayBUQVNLLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X3JlZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCByZWdubykKK3sKKwl1bnNpZ25lZCBsb25nIHRtcCA9IDA7CisKKwkvKgorCSAqIFB1dCB0aGUgY29ycmVjdCBGUCBiaXRzIGluLCB0aGV5IG1pZ2h0IGJlIHdyb25nIGFzIGEgcmVzdWx0CisJICogb2Ygb3VyIGxhenkgRlAgcmVzdG9yZS4KKwkgKi8KKwlpZiAocmVnbm8gPT0gUFRfTVNSKSB7CisJCXRtcCA9ICgodW5zaWduZWQgbG9uZyAqKXRhc2stPnRocmVhZC5yZWdzKVtQVF9NU1JdOworCQl0bXAgfD0gdGFzay0+dGhyZWFkLmZwZXhjX21vZGU7CisJfSBlbHNlIGlmIChyZWdubyA8IChzaXplb2Yoc3RydWN0IHB0X3JlZ3MpIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSkgeworCQl0bXAgPSAoKHVuc2lnbmVkIGxvbmcgKil0YXNrLT50aHJlYWQucmVncylbcmVnbm9dOworCX0KKworCXJldHVybiB0bXA7Cit9CisKKy8qCisgKiBXcml0ZSBjb250ZW50cyBvZiByZWdpc3RlciBSRUdOTyBpbiB0YXNrIFRBU0suCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHB1dF9yZWcoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgcmVnbm8sCisJCQkgIHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlpZiAocmVnbm8gPCBQVF9TT0ZURSkgeworCQlpZiAocmVnbm8gPT0gUFRfTVNSKQorCQkJZGF0YSA9IChkYXRhICYgTVNSX0RFQlVHQ0hBTkdFKQorCQkJCXwgKHRhc2stPnRocmVhZC5yZWdzLT5tc3IgJiB+TVNSX0RFQlVHQ0hBTkdFKTsKKwkJKCh1bnNpZ25lZCBsb25nICopdGFzay0+dGhyZWFkLnJlZ3MpW3JlZ25vXSA9IGRhdGE7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldF9zaW5nbGVfc3RlcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCit7CisJc3RydWN0IHB0X3JlZ3MgKnJlZ3MgPSB0YXNrLT50aHJlYWQucmVnczsKKwlpZiAocmVncyAhPSBOVUxMKQorCQlyZWdzLT5tc3IgfD0gTVNSX1NFOworCXNldF90aV90aHJlYWRfZmxhZyh0YXNrLT50aHJlYWRfaW5mbywgVElGX1NJTkdMRVNURVApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfc2luZ2xlX3N0ZXAoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQoreworCXN0cnVjdCBwdF9yZWdzICpyZWdzID0gdGFzay0+dGhyZWFkLnJlZ3M7CisJaWYgKHJlZ3MgIT0gTlVMTCkKKwkJcmVncy0+bXNyICY9IH5NU1JfU0U7CisJY2xlYXJfdGlfdGhyZWFkX2ZsYWcodGFzay0+dGhyZWFkX2luZm8sIFRJRl9TSU5HTEVTVEVQKTsKK30KKworI2VuZGlmIC8qIF9QUEM2NF9QVFJBQ0VfQ09NTU9OX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L3B0cmFjZS5oIGIvaW5jbHVkZS9hc20tcHBjNjQvcHRyYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk2YWFkMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L3B0cmFjZS5oCkBAIC0wLDAgKzEsMTg5IEBACisjaWZuZGVmIF9QUEM2NF9QVFJBQ0VfSAorI2RlZmluZSBfUFBDNjRfUFRSQUNFX0gKKworLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMSBQUEM2NCBUZWFtLCBJQk0gQ29ycAorICoKKyAqIFRoaXMgc3RydWN0IGRlZmluZXMgdGhlIHdheSB0aGUgcmVnaXN0ZXJzIGFyZSBzdG9yZWQgb24gdGhlCisgKiBrZXJuZWwgc3RhY2sgZHVyaW5nIGEgc3lzdGVtIGNhbGwgb3Igb3RoZXIga2VybmVsIGVudHJ5LgorICoKKyAqIHRoaXMgc2hvdWxkIG9ubHkgY29udGFpbiB2b2xhdGlsZSByZWdzCisgKiBzaW5jZSB3ZSBjYW4ga2VlcCBub24tdm9sYXRpbGUgaW4gdGhlIHRocmVhZF9zdHJ1Y3QKKyAqIHNob3VsZCBzZXQgdGhpcyB1cCB3aGVuIG9ubHkgdm9sYXRpbGVzIGFyZSBzYXZlZAorICogYnkgaW50ciBjb2RlLgorICoKKyAqIFNpbmNlIHRoaXMgaXMgZ29pbmcgb24gdGhlIHN0YWNrLCAqQ0FSRSBNVVNUIEJFIFRBS0VOKiB0byBpbnN1cmUKKyAqIHRoYXQgdGhlIG92ZXJhbGwgc3RydWN0dXJlIGlzIGEgbXVsdGlwbGUgb2YgMTYgYnl0ZXMgaW4gbGVuZ3RoLgorICoKKyAqIE5vdGUgdGhhdCB0aGUgb2Zmc2V0cyBvZiB0aGUgZmllbGRzIGluIHRoaXMgc3RydWN0IGNvcnJlc3BvbmQgd2l0aAorICogdGhlIFBUXyogdmFsdWVzIGJlbG93LiAgVGhpcyBzaW1wbGlmaWVzIGFyY2gvcHBjNjQva2VybmVsL3B0cmFjZS5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNkZWZpbmUgUFBDX1JFRyB1bnNpZ25lZCBsb25nCitzdHJ1Y3QgcHRfcmVncyB7CisJUFBDX1JFRyBncHJbMzJdOworCVBQQ19SRUcgbmlwOworCVBQQ19SRUcgbXNyOworCVBQQ19SRUcgb3JpZ19ncHIzOwkvKiBVc2VkIGZvciByZXN0YXJ0aW5nIHN5c3RlbSBjYWxscyAqLworCVBQQ19SRUcgY3RyOworCVBQQ19SRUcgbGluazsKKwlQUENfUkVHIHhlcjsKKwlQUENfUkVHIGNjcjsKKwlQUENfUkVHIHNvZnRlOwkJLyogU29mdCBlbmFibGVkL2Rpc2FibGVkICovCisJUFBDX1JFRyB0cmFwOwkJLyogUmVhc29uIGZvciBiZWluZyBoZXJlICovCisJUFBDX1JFRyBkYXI7CQkvKiBGYXVsdCByZWdpc3RlcnMgKi8KKwlQUENfUkVHIGRzaXNyOworCVBQQ19SRUcgcmVzdWx0OyAJLyogUmVzdWx0IG9mIGEgc3lzdGVtIGNhbGwgKi8KK307CisKKyNkZWZpbmUgUFBDX1JFR18zMiB1bnNpZ25lZCBpbnQKK3N0cnVjdCBwdF9yZWdzMzIgeworCVBQQ19SRUdfMzIgZ3ByWzMyXTsKKwlQUENfUkVHXzMyIG5pcDsKKwlQUENfUkVHXzMyIG1zcjsKKwlQUENfUkVHXzMyIG9yaWdfZ3ByMzsJLyogVXNlZCBmb3IgcmVzdGFydGluZyBzeXN0ZW0gY2FsbHMgKi8KKwlQUENfUkVHXzMyIGN0cjsKKwlQUENfUkVHXzMyIGxpbms7CisJUFBDX1JFR18zMiB4ZXI7CisJUFBDX1JFR18zMiBjY3I7CisJUFBDX1JFR18zMiBtcTsJCS8qIDYwMSBvbmx5IChub3QgdXNlZCBhdCBwcmVzZW50KSAqLworCQkJCS8qIFVzZWQgb24gQVBVUyB0byBob2xkIElQTCB2YWx1ZS4gKi8KKwlQUENfUkVHXzMyIHRyYXA7CQkvKiBSZWFzb24gZm9yIGJlaW5nIGhlcmUgKi8KKwlQUENfUkVHXzMyIGRhcjsJCS8qIEZhdWx0IHJlZ2lzdGVycyAqLworCVBQQ19SRUdfMzIgZHNpc3I7CisJUFBDX1JFR18zMiByZXN1bHQ7IAkvKiBSZXN1bHQgb2YgYSBzeXN0ZW0gY2FsbCAqLworfTsKKworI2RlZmluZSBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpICgocmVncyktPm5pcCkKKyNpZmRlZiBDT05GSUdfU01QCitleHRlcm4gdW5zaWduZWQgbG9uZyBwcm9maWxlX3BjKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKyNlbHNlCisjZGVmaW5lIHByb2ZpbGVfcGMocmVncykgaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworI2RlZmluZSBTVEFDS19GUkFNRV9PVkVSSEVBRAkxMTIJLyogc2l6ZSBvZiBtaW5pbXVtIHN0YWNrIGZyYW1lICovCisKKy8qIFNpemUgb2YgZHVtbXkgc3RhY2sgZnJhbWUgYWxsb2NhdGVkIHdoZW4gY2FsbGluZyBzaWduYWwgaGFuZGxlci4gKi8KKyNkZWZpbmUgX19TSUdOQUxfRlJBTUVTSVpFCTEyOAorI2RlZmluZSBfX1NJR05BTF9GUkFNRVNJWkUzMgk2NAorCisjZGVmaW5lIHVzZXJfbW9kZShyZWdzKSAoKCgocmVncyktPm1zcikgPj4gTVNSX1BSX0xHKSAmIDB4MSkKKworI2RlZmluZSBmb3JjZV9zdWNjZXNzZnVsX3N5c2NhbGxfcmV0dXJuKCkgICBcCisJCShjdXJyZW50X3RocmVhZF9pbmZvKCktPnN5c2NhbGxfbm9lcnJvciA9IDEpCisKKy8qCisgKiBXZSB1c2UgdGhlIGxlYXN0LXNpZ25pZmljYW50IGJpdCBvZiB0aGUgdHJhcCBmaWVsZCB0byBpbmRpY2F0ZQorICogd2hldGhlciB3ZSBoYXZlIHNhdmVkIHRoZSBmdWxsIHNldCBvZiByZWdpc3RlcnMsIG9yIG9ubHkgYQorICogcGFydGlhbCBzZXQuICBBIDEgdGhlcmUgbWVhbnMgdGhlIHBhcnRpYWwgc2V0LgorICovCisjZGVmaW5lIEZVTExfUkVHUyhyZWdzKQkJKCgocmVncyktPnRyYXAgJiAxKSA9PSAwKQorI2RlZmluZSBUUkFQKHJlZ3MpCQkoKHJlZ3MpLT50cmFwICYgfjB4RikKKyNkZWZpbmUgQ0hFQ0tfRlVMTF9SRUdTKHJlZ3MpCUJVR19PTihyZWdzLT50cmFwICYgMSkKKworLyoKKyAqIE9mZnNldHMgdXNlZCBieSAncHRyYWNlJyBzeXN0ZW0gY2FsbCBpbnRlcmZhY2UuCisgKi8KKyNkZWZpbmUgUFRfUjAJMAorI2RlZmluZSBQVF9SMQkxCisjZGVmaW5lIFBUX1IyCTIKKyNkZWZpbmUgUFRfUjMJMworI2RlZmluZSBQVF9SNAk0CisjZGVmaW5lIFBUX1I1CTUKKyNkZWZpbmUgUFRfUjYJNgorI2RlZmluZSBQVF9SNwk3CisjZGVmaW5lIFBUX1I4CTgKKyNkZWZpbmUgUFRfUjkJOQorI2RlZmluZSBQVF9SMTAJMTAKKyNkZWZpbmUgUFRfUjExCTExCisjZGVmaW5lIFBUX1IxMgkxMgorI2RlZmluZSBQVF9SMTMJMTMKKyNkZWZpbmUgUFRfUjE0CTE0CisjZGVmaW5lIFBUX1IxNQkxNQorI2RlZmluZSBQVF9SMTYJMTYKKyNkZWZpbmUgUFRfUjE3CTE3CisjZGVmaW5lIFBUX1IxOAkxOAorI2RlZmluZSBQVF9SMTkJMTkKKyNkZWZpbmUgUFRfUjIwCTIwCisjZGVmaW5lIFBUX1IyMQkyMQorI2RlZmluZSBQVF9SMjIJMjIKKyNkZWZpbmUgUFRfUjIzCTIzCisjZGVmaW5lIFBUX1IyNAkyNAorI2RlZmluZSBQVF9SMjUJMjUKKyNkZWZpbmUgUFRfUjI2CTI2CisjZGVmaW5lIFBUX1IyNwkyNworI2RlZmluZSBQVF9SMjgJMjgKKyNkZWZpbmUgUFRfUjI5CTI5CisjZGVmaW5lIFBUX1IzMAkzMAorI2RlZmluZSBQVF9SMzEJMzEKKworI2RlZmluZSBQVF9OSVAJMzIKKyNkZWZpbmUgUFRfTVNSCTMzCisjaWZkZWYgX19LRVJORUxfXworI2RlZmluZSBQVF9PUklHX1IzIDM0CisjZW5kaWYKKyNkZWZpbmUgUFRfQ1RSCTM1CisjZGVmaW5lIFBUX0xOSwkzNgorI2RlZmluZSBQVF9YRVIJMzcKKyNkZWZpbmUgUFRfQ0NSCTM4CisjZGVmaW5lIFBUX1NPRlRFIDM5CisjZGVmaW5lIFBUX1JFU1VMVCA0MworCisjZGVmaW5lIFBUX0ZQUjAJNDgKKworLyogS2VybmVsIGFuZCB1c2Vyc3BhY2Ugd2lsbCBib3RoIHVzZSB0aGlzIFBUX0ZQU0NSIHZhbHVlLiAgMzItYml0IGFwcHMgd2lsbCBoYXZlCisgKiB2aXNpYmlsaXR5IHRvIHRoZSBhc20tcHBjL3B0cmFjZS5oIGhlYWRlciBpbnN0ZWFkIG9mIHRoaXMgb25lLgorICovCisjZGVmaW5lIFBUX0ZQU0NSIChQVF9GUFIwICsgMzIpCSAgLyogZWFjaCBGUCByZWcgb2NjdXBpZXMgMSBzbG90IGluIDY0LWJpdCBzcGFjZSAqLworCisjaWZkZWYgX19LRVJORUxfXworI2RlZmluZSBQVF9GUFNDUjMyIChQVF9GUFIwICsgMiozMiArIDEpCSAgLyogZWFjaCBGUCByZWcgb2NjdXBpZXMgMiAzMi1iaXQgdXNlcnNwYWNlIHNsb3RzICovCisjZW5kaWYKKworI2RlZmluZSBQVF9WUjAgODIJLyogZWFjaCBWZWN0b3IgcmVnIG9jY3VwaWVzIDIgc2xvdHMgaW4gNjQtYml0ICovCisjZGVmaW5lIFBUX1ZTQ1IgKFBUX1ZSMCArIDMyKjIgKyAxKQorI2RlZmluZSBQVF9WUlNBVkUgKFBUX1ZSMCArIDMzKjIpCisKKyNpZmRlZiBfX0tFUk5FTF9fCisjZGVmaW5lIFBUX1ZSMF8zMiAxNjQJLyogZWFjaCBWZWN0b3IgcmVnIG9jY3VwaWVzIDQgc2xvdHMgaW4gMzItYml0ICovCisjZGVmaW5lIFBUX1ZTQ1JfMzIgKFBUX1ZSMCArIDMyKjQgKyAzKQorI2RlZmluZSBQVF9WUlNBVkVfMzIgKFBUX1ZSMCArIDMzKjQpCisjZW5kaWYKKworLyoKKyAqIEdldC9zZXQgYWxsIHRoZSBhbHRpdmVjIHJlZ2lzdGVycyB2cjAuLnZyMzEsIHZzY3IsIHZyc2F2ZSwgaW4gb25lIGdvLiAKKyAqIFRoZSB0cmFuc2ZlciB0b3RhbHMgMzQgcXVhZHdvcmQuICBRdWFkd29yZHMgMC0zMSBjb250YWluIHRoZSAKKyAqIGNvcnJlc3BvbmRpbmcgdmVjdG9yIHJlZ2lzdGVycy4gIFF1YWR3b3JkIDMyIGNvbnRhaW5zIHRoZSB2c2NyIGFzIHRoZSAKKyAqIGxhc3Qgd29yZCAob2Zmc2V0IDEyKSB3aXRoaW4gdGhhdCBxdWFkd29yZC4gIFF1YWR3b3JkIDMzIGNvbnRhaW5zIHRoZSAKKyAqIHZyc2F2ZSBhcyB0aGUgZmlyc3Qgd29yZCAob2Zmc2V0IDApIHdpdGhpbiB0aGUgcXVhZHdvcmQuCisgKgorICogVGhpcyBkZWZpbml0aW9uIG9mIHRoZSBWTVggc3RhdGUgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBjdXJyZW50IFBQQzMyIAorICogcHRyYWNlIGludGVyZmFjZS4gIFRoaXMgYWxsb3dzIHNpZ25hbCBoYW5kbGluZyBhbmQgcHRyYWNlIHRvIHVzZSB0aGUgc2FtZSAKKyAqIHN0cnVjdHVyZXMuICBUaGlzIGFsc28gc2ltcGxpZmllcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgYSBiaS1hcmNoIAorICogKGNvbWJpbmVkICgzMi0gYW5kIDY0LWJpdCkgZ2RiLgorICovCisjZGVmaW5lIFBUUkFDRV9HRVRWUlJFR1MJMTgKKyNkZWZpbmUgUFRSQUNFX1NFVFZSUkVHUwkxOQorCisvKiBBZGRpdGlvbmFsIFBUUkFDRSByZXF1ZXN0cyBpbXBsZW1lbnRlZCBvbiBQb3dlclBDLiAqLworI2RlZmluZSBQUENfUFRSQUNFX0dFVFJFR1MJICAgICAgMHg5OSAgLyogR2V0IEdQUnMgMCAtIDMxICovCisjZGVmaW5lIFBQQ19QVFJBQ0VfU0VUUkVHUwkgICAgICAweDk4ICAvKiBTZXQgR1BScyAwIC0gMzEgKi8KKyNkZWZpbmUgUFBDX1BUUkFDRV9HRVRGUFJFR1MJICAgIDB4OTcgIC8qIEdldCBGUFJzIDAgLSAzMSAqLworI2RlZmluZSBQUENfUFRSQUNFX1NFVEZQUkVHUwkgICAgMHg5NiAgLyogU2V0IEZQUnMgMCAtIDMxICovCisjZGVmaW5lIFBQQ19QVFJBQ0VfUEVFS1RFWFRfMzI2NCAgMHg5NSAgLyogUmVhZCB3b3JkIGF0IGxvY2F0aW9uIEFERFIgb24gYSA2NC1iaXQgcHJvY2VzcyBmcm9tIGEgMzItYml0IHByb2Nlc3MuICovCisjZGVmaW5lIFBQQ19QVFJBQ0VfUEVFS0RBVEFfMzI2NCAgMHg5NCAgLyogUmVhZCB3b3JkIGF0IGxvY2F0aW9uIEFERFIgb24gYSA2NC1iaXQgcHJvY2VzcyBmcm9tIGEgMzItYml0IHByb2Nlc3MuICovCisjZGVmaW5lIFBQQ19QVFJBQ0VfUE9LRVRFWFRfMzI2NCAgMHg5MyAgLyogV3JpdGUgd29yZCBhdCBsb2NhdGlvbiBBRERSIG9uIGEgNjQtYml0IHByb2Nlc3MgZnJvbSBhIDMyLWJpdCBwcm9jZXNzLiAqLworI2RlZmluZSBQUENfUFRSQUNFX1BPS0VEQVRBXzMyNjQgIDB4OTIgIC8qIFdyaXRlIHdvcmQgYXQgbG9jYXRpb24gQUREUiBvbiBhIDY0LWJpdCBwcm9jZXNzIGZyb20gYSAzMi1iaXQgcHJvY2Vzcy4gKi8KKyNkZWZpbmUgUFBDX1BUUkFDRV9QRUVLVVNSXzMyNjQgICAweDkxICAvKiBSZWFkIGEgcmVnaXN0ZXIgKHNwZWNpZmllZCBieSBBRERSKSBvdXQgb2YgdGhlICJ1c2VyIGFyZWEiIG9uIGEgNjQtYml0IHByb2Nlc3MgZnJvbSBhIDMyLWJpdCBwcm9jZXNzLiAqLworI2RlZmluZSBQUENfUFRSQUNFX1BPS0VVU1JfMzI2NCAgIDB4OTAgIC8qIFdyaXRlIERBVEEgaW50byBsb2NhdGlvbiBBRERSIHdpdGhpbiB0aGUgInVzZXIgYXJlYSIgb24gYSA2NC1iaXQgcHJvY2VzcyBmcm9tIGEgMzItYml0IHByb2Nlc3MuICovCisKKworI2VuZGlmIC8qIF9QUEM2NF9QVFJBQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvcmVzb3VyY2UuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L3Jlc291cmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRkMDMxYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L3Jlc291cmNlLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9QUEM2NF9SRVNPVVJDRV9ICisjZGVmaW5lIF9QUEM2NF9SRVNPVVJDRV9ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9yZXNvdXJjZS5oPgorCisjZW5kaWYgLyogX1BQQzY0X1JFU09VUkNFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L3J0YXMuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L3J0YXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGFiMGU5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvcnRhcy5oCkBAIC0wLDAgKzEsMjQzIEBACisjaWZuZGVmIF9QUEM2NF9SVEFTX0gKKyNkZWZpbmUgX1BQQzY0X1JUQVNfSAorCisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorCisvKgorICogRGVmaW5pdGlvbnMgZm9yIHRhbGtpbmcgdG8gdGhlIFJUQVMgb24gQ0hSUCBtYWNoaW5lcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgQmVyZ25lcgorICogQ29weXJpZ2h0IChDKSAyMDAxIFBQQyA2NCBUZWFtLCBJQk0gQ29ycAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2RlZmluZSBSVEFTX1VOS05PV05fU0VSVklDRSAoLTEpCisjZGVmaW5lIFJUQVNfSU5TVEFOVElBVEVfTUFYICgxVUw8PDMwKSAvKiBEb24ndCBpbnN0YW50aWF0ZSBydGFzIGF0L2Fib3ZlIHRoaXMgdmFsdWUgKi8KKworLyogQnVmZmVyIHNpemUgZm9yIHBwY19ydGFzIHN5c3RlbSBjYWxsLiAqLworI2RlZmluZSBSVEFTX1JNT0JVRl9NQVggKDY0ICogMTAyNCkKKworLyogUlRBUyByZXR1cm4gc3RhdHVzIGNvZGVzICovCisjZGVmaW5lIFJUQVNfQlVTWQkJLTIgICAgLyogUlRBUyBCdXN5ICovCisjZGVmaW5lIFJUQVNfRVhURU5ERURfREVMQVlfTUlOCTk5MDAKKyNkZWZpbmUgUlRBU19FWFRFTkRFRF9ERUxBWV9NQVgJOTkwNQorCisvKgorICogSW4gZ2VuZXJhbCB0byBjYWxsIFJUQVMgdXNlIHJ0YXNfdG9rZW4oInN0cmluZyIpIHRvIGxvb2t1cAorICogYW4gUlRBUyB0b2tlbiBmb3IgdGhlIGdpdmVuIHN0cmluZyAoZS5nLiAiZXZlbnQtc2NhbiIpLgorICogVG8gYWN0dWFsbHkgcGVyZm9ybSB0aGUgY2FsbCB1c2UKKyAqICAgIHJldCA9IHJ0YXNfY2FsbCh0b2tlbiwgbl9pbiwgbl9vdXQsIC4uLikKKyAqIFdoZXJlIG5faW4gaXMgdGhlIG51bWJlciBvZiBpbnB1dCBwYXJhbWV0ZXJzIGFuZAorICogICAgICAgbl9vdXQgaXMgdGhlIG51bWJlciBvZiBvdXRwdXQgcGFyYW1ldGVycworICoKKyAqIElmIHRoZSAic3RyaW5nIiBpcyBpbnZhbGlkIG9uIHRoaXMgc3lzdGVtLCBSVEFTX1VOS05PV05fU0VSVklDRQorICogd2lsbCBiZSByZXR1cm5lZCBhcyBhIHRva2VuLiAgcnRhc19jYWxsKCkgZG9lcyBsb29rIGZvciB0aGlzCisgKiB0b2tlbiBhbmQgZXJyb3Igb3V0IGdyYWNlZnVsbHkgc28gcnRhc19jYWxsKHJ0YXNfdG9rZW4oInN0ciIpLCAuLi4pCisgKiBtYXkgYmUgc2FmZWx5IHVzZWQgZm9yIG9uZS1zaG90IGNhbGxzIHRvIFJUQVMuCisgKgorICovCisKK3R5cGVkZWYgdTMyIHJ0YXNfYXJnX3Q7CisKK3N0cnVjdCBydGFzX2FyZ3MgeworCXUzMiB0b2tlbjsKKwl1MzIgbmFyZ3M7CisJdTMyIG5yZXQ7IAorCXJ0YXNfYXJnX3QgYXJnc1sxNl07CisJcnRhc19hcmdfdCAqcmV0czsgICAgIC8qIFBvaW50ZXIgdG8gcmV0dXJuIHZhbHVlcyBpbiBhcmdzW10uICovCit9OyAgCisKK2V4dGVybiBzdHJ1Y3QgcnRhc19hcmdzIHJ0YXNfc3RvcF9zZWxmX2FyZ3M7CisKK3N0cnVjdCBydGFzX3QgeworCXVuc2lnbmVkIGxvbmcgZW50cnk7CQkvKiBwaHlzaWNhbCBhZGRyZXNzIHBvaW50ZXIgKi8KKwl1bnNpZ25lZCBsb25nIGJhc2U7CQkvKiBwaHlzaWNhbCBhZGRyZXNzIHBvaW50ZXIgKi8KKwl1bnNpZ25lZCBsb25nIHNpemU7CisJc3BpbmxvY2tfdCBsb2NrOworCXN0cnVjdCBydGFzX2FyZ3MgYXJnczsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldjsJLyogdmlydHVhbCBhZGRyZXNzIHBvaW50ZXIgKi8KK307CisKKy8qIFJUQVMgZXZlbnQgY2xhc3NlcyAqLworI2RlZmluZSBSVEFTX0lOVEVSTkFMX0VSUk9SCQkweDgwMDAwMDAwIC8qIHNldCBiaXQgMCAqLworI2RlZmluZSBSVEFTX0VQT1dfV0FSTklORwkJMHg0MDAwMDAwMCAvKiBzZXQgYml0IDEgKi8KKyNkZWZpbmUgUlRBU19QT1dFUk1HTV9FVkVOVFMJCTB4MjAwMDAwMDAgLyogc2V0IGJpdCAyICovCisjZGVmaW5lIFJUQVNfSE9UUExVR19FVkVOVFMJCTB4MTAwMDAwMDAgLyogc2V0IGJpdCAzICovCisjZGVmaW5lIFJUQVNfRVZFTlRfU0NBTl9BTExfRVZFTlRTCTB4ZjAwMDAwMDAKKworLyogUlRBUyBldmVudCBzZXZlcml0eSAqLworI2RlZmluZSBSVEFTX1NFVkVSSVRZX0ZBVEFMCQkweDUKKyNkZWZpbmUgUlRBU19TRVZFUklUWV9FUlJPUgkJMHg0CisjZGVmaW5lIFJUQVNfU0VWRVJJVFlfRVJST1JfU1lOQwkweDMKKyNkZWZpbmUgUlRBU19TRVZFUklUWV9XQVJOSU5HCQkweDIKKyNkZWZpbmUgUlRBU19TRVZFUklUWV9FVkVOVAkJMHgxCisjZGVmaW5lIFJUQVNfU0VWRVJJVFlfTk9fRVJST1IJCTB4MAorCisvKiBSVEFTIGV2ZW50IGRpc3Bvc2l0aW9uICovCisjZGVmaW5lIFJUQVNfRElTUF9GVUxMWV9SRUNPVkVSRUQJMHgwCisjZGVmaW5lIFJUQVNfRElTUF9MSU1JVEVEX1JFQ09WRVJZCTB4MQorI2RlZmluZSBSVEFTX0RJU1BfTk9UX1JFQ09WRVJFRAkJMHgyCisKKy8qIFJUQVMgZXZlbnQgaW5pdGlhdG9yICovCisjZGVmaW5lIFJUQVNfSU5JVElBVE9SX1VOS05PV04JCTB4MAorI2RlZmluZSBSVEFTX0lOSVRJQVRPUl9DUFUJCTB4MQorI2RlZmluZSBSVEFTX0lOSVRJQVRPUl9QQ0kJCTB4MgorI2RlZmluZSBSVEFTX0lOSVRJQVRPUl9JU0EJCTB4MworI2RlZmluZSBSVEFTX0lOSVRJQVRPUl9NRU1PUlkJCTB4NAorI2RlZmluZSBSVEFTX0lOSVRJQVRPUl9QT1dFUk1HTQkJMHg1CisKKy8qIFJUQVMgZXZlbnQgdGFyZ2V0ICovCisjZGVmaW5lIFJUQVNfVEFSR0VUX1VOS05PV04JCTB4MAorI2RlZmluZSBSVEFTX1RBUkdFVF9DUFUJCQkweDEKKyNkZWZpbmUgUlRBU19UQVJHRVRfUENJCQkJMHgyCisjZGVmaW5lIFJUQVNfVEFSR0VUX0lTQQkJCTB4MworI2RlZmluZSBSVEFTX1RBUkdFVF9NRU1PUlkJCTB4NAorI2RlZmluZSBSVEFTX1RBUkdFVF9QT1dFUk1HTQkJMHg1CisKKy8qIFJUQVMgZXZlbnQgdHlwZSAqLworI2RlZmluZSBSVEFTX1RZUEVfUkVUUlkJCQkweDAxCisjZGVmaW5lIFJUQVNfVFlQRV9UQ0VfRVJSCQkweDAyCisjZGVmaW5lIFJUQVNfVFlQRV9JTlRFUk5fREVWX0ZBSUwJMHgwMworI2RlZmluZSBSVEFTX1RZUEVfVElNRU9VVAkJMHgwNAorI2RlZmluZSBSVEFTX1RZUEVfREFUQV9QQVJJVFkJCTB4MDUKKyNkZWZpbmUgUlRBU19UWVBFX0FERFJfUEFSSVRZCQkweDA2CisjZGVmaW5lIFJUQVNfVFlQRV9DQUNIRV9QQVJJVFkJCTB4MDcKKyNkZWZpbmUgUlRBU19UWVBFX0FERFJfSU5WQUxJRAkJMHgwOAorI2RlZmluZSBSVEFTX1RZUEVfRUNDX1VOQ09SUgkJMHgwOQorI2RlZmluZSBSVEFTX1RZUEVfRUNDX0NPUlIJCTB4MGEKKyNkZWZpbmUgUlRBU19UWVBFX0VQT1cJCQkweDQwCisjZGVmaW5lIFJUQVNfVFlQRV9QTEFURk9STQkJMHhFMAorI2RlZmluZSBSVEFTX1RZUEVfSU8JCQkweEUxCisjZGVmaW5lIFJUQVNfVFlQRV9JTkZPCQkJMHhFMgorI2RlZmluZSBSVEFTX1RZUEVfREVBTExPQwkJMHhFMworI2RlZmluZSBSVEFTX1RZUEVfRFVNUAkJCTB4RTQKKy8qIEkgZG9uJ3QgYWRkIFBvd2VyTUdNIGV2ZW50cyByaWdodCBub3csIHRoaXMgaXMgYSBkaWZmZXJlbnQgdG9waWMgKi8gCisjZGVmaW5lIFJUQVNfVFlQRV9QTUdNX1BPV0VSX1NXX09OCTB4NjAKKyNkZWZpbmUgUlRBU19UWVBFX1BNR01fUE9XRVJfU1dfT0ZGCTB4NjEKKyNkZWZpbmUgUlRBU19UWVBFX1BNR01fTElEX09QRU4JCTB4NjIKKyNkZWZpbmUgUlRBU19UWVBFX1BNR01fTElEX0NMT1NFCTB4NjMKKyNkZWZpbmUgUlRBU19UWVBFX1BNR01fU0xFRVBfQlROCTB4NjQKKyNkZWZpbmUgUlRBU19UWVBFX1BNR01fV0FLRV9CVE4JCTB4NjUKKyNkZWZpbmUgUlRBU19UWVBFX1BNR01fQkFUVEVSWV9XQVJOCTB4NjYKKyNkZWZpbmUgUlRBU19UWVBFX1BNR01fQkFUVEVSWV9DUklUCTB4NjcKKyNkZWZpbmUgUlRBU19UWVBFX1BNR01fU1dJVENIX1RPX0JBVAkweDY4CisjZGVmaW5lIFJUQVNfVFlQRV9QTUdNX1NXSVRDSF9UT19BQwkweDY5CisjZGVmaW5lIFJUQVNfVFlQRV9QTUdNX0tCRF9PUl9NT1VTRQkweDZhCisjZGVmaW5lIFJUQVNfVFlQRV9QTUdNX0VOQ0xPU19PUEVOCTB4NmIKKyNkZWZpbmUgUlRBU19UWVBFX1BNR01fRU5DTE9TX0NMT1NFRAkweDZjCisjZGVmaW5lIFJUQVNfVFlQRV9QTUdNX1JJTkdfSU5ESUNBVEUJMHg2ZAorI2RlZmluZSBSVEFTX1RZUEVfUE1HTV9MQU5fQVRURU5USU9OCTB4NmUKKyNkZWZpbmUgUlRBU19UWVBFX1BNR01fVElNRV9BTEFSTQkweDZmCisjZGVmaW5lIFJUQVNfVFlQRV9QTUdNX0NPTkZJR19DSEFOR0UJMHg3MAorI2RlZmluZSBSVEFTX1RZUEVfUE1HTV9TRVJWSUNFX1BST0MJMHg3MQorCitzdHJ1Y3QgcnRhc19lcnJvcl9sb2cgeworCXVuc2lnbmVkIGxvbmcgdmVyc2lvbjo4OwkJLyogQXJjaGl0ZWN0dXJhbCB2ZXJzaW9uICovCisJdW5zaWduZWQgbG9uZyBzZXZlcml0eTozOwkJLyogU2V2ZXJpdHkgbGV2ZWwgb2YgZXJyb3IgKi8KKwl1bnNpZ25lZCBsb25nIGRpc3Bvc2l0aW9uOjI7CQkvKiBEZWdyZWUgb2YgcmVjb3ZlcnkgKi8KKwl1bnNpZ25lZCBsb25nIGV4dGVuZGVkOjE7CQkvKiBleHRlbmRlZCBsb2cgcHJlc2VudD8gKi8KKwl1bnNpZ25lZCBsb25nIC8qIHJlc2VydmVkICovIDoyOwkvKiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqLworCXVuc2lnbmVkIGxvbmcgaW5pdGlhdG9yOjQ7CQkvKiBJbml0aWF0b3Igb2YgZXZlbnQgKi8KKwl1bnNpZ25lZCBsb25nIHRhcmdldDo0OwkJCS8qIFRhcmdldCBvZiBmYWlsZWQgb3BlcmF0aW9uICovCisJdW5zaWduZWQgbG9uZyB0eXBlOjg7CQkJLyogR2VuZXJhbCBldmVudCBvciBlcnJvciovCisJdW5zaWduZWQgbG9uZyBleHRlbmRlZF9sb2dfbGVuZ3RoOjMyOwkvKiBsZW5ndGggaW4gYnl0ZXMgKi8KKwl1bnNpZ25lZCBjaGFyIGJ1ZmZlclsxXTsKK307CisKK3N0cnVjdCBmbGFzaF9ibG9jayB7CisJY2hhciAqZGF0YTsKKwl1bnNpZ25lZCBsb25nIGxlbmd0aDsKK307CisKKy8qIFRoaXMgc3RydWN0IGlzIHZlcnkgc2ltaWxhciBidXQgbm90IGlkZW50aWNhbCB0bworICogdGhhdCBuZWVkZWQgYnkgdGhlIHJ0YXMgZmxhc2ggdXBkYXRlLgorICogQWxsIHdlIG5lZWQgdG8gZG8gZm9yIHJ0YXMgaXMgcmV3cml0ZSBudW1fYmxvY2tzCisgKiBpbnRvIGEgdmVyc2lvbi9sZW5ndGggYW5kIHRyYW5zbGF0ZSB0aGUgcG9pbnRlcnMKKyAqIHRvIGFic29sdXRlLgorICovCisjZGVmaW5lIEZMQVNIX0JMT0NLU19QRVJfTk9ERSAoKFBBR0VfU0laRSAtIDE2KSAvIHNpemVvZihzdHJ1Y3QgZmxhc2hfYmxvY2spKQorc3RydWN0IGZsYXNoX2Jsb2NrX2xpc3QgeworCXVuc2lnbmVkIGxvbmcgbnVtX2Jsb2NrczsKKwlzdHJ1Y3QgZmxhc2hfYmxvY2tfbGlzdCAqbmV4dDsKKwlzdHJ1Y3QgZmxhc2hfYmxvY2sgYmxvY2tzW0ZMQVNIX0JMT0NLU19QRVJfTk9ERV07Cit9Oworc3RydWN0IGZsYXNoX2Jsb2NrX2xpc3RfaGVhZGVyIHsgLyoganVzdCB0aGUgaGVhZGVyIG9mIGZsYXNoX2Jsb2NrX2xpc3QgKi8KKwl1bnNpZ25lZCBsb25nIG51bV9ibG9ja3M7CisJc3RydWN0IGZsYXNoX2Jsb2NrX2xpc3QgKm5leHQ7Cit9OworZXh0ZXJuIHN0cnVjdCBmbGFzaF9ibG9ja19saXN0X2hlYWRlciBydGFzX2Zpcm13YXJlX2ZsYXNoX2xpc3Q7CisKK2V4dGVybiBzdHJ1Y3QgcnRhc190IHJ0YXM7CisKK2V4dGVybiB2b2lkIGVudGVyX3J0YXModW5zaWduZWQgbG9uZyk7CitleHRlcm4gaW50IHJ0YXNfdG9rZW4oY29uc3QgY2hhciAqc2VydmljZSk7CitleHRlcm4gaW50IHJ0YXNfY2FsbChpbnQgdG9rZW4sIGludCwgaW50LCBpbnQgKiwgLi4uKTsKK2V4dGVybiB2b2lkIGNhbGxfcnRhc19kaXNwbGF5X3N0YXR1cyh1bnNpZ25lZCBjaGFyKTsKK2V4dGVybiB2b2lkIHJ0YXNfcmVzdGFydChjaGFyICpjbWQpOworZXh0ZXJuIHZvaWQgcnRhc19wb3dlcl9vZmYodm9pZCk7CitleHRlcm4gdm9pZCBydGFzX2hhbHQodm9pZCk7CitleHRlcm4gdm9pZCBydGFzX29zX3Rlcm0oY2hhciAqc3RyKTsKK2V4dGVybiBpbnQgcnRhc19nZXRfc2Vuc29yKGludCBzZW5zb3IsIGludCBpbmRleCwgaW50ICpzdGF0ZSk7CitleHRlcm4gaW50IHJ0YXNfZ2V0X3Bvd2VyX2xldmVsKGludCBwb3dlcmRvbWFpbiwgaW50ICpsZXZlbCk7CitleHRlcm4gaW50IHJ0YXNfc2V0X3Bvd2VyX2xldmVsKGludCBwb3dlcmRvbWFpbiwgaW50IGxldmVsLCBpbnQgKnNldGxldmVsKTsKK2V4dGVybiBpbnQgcnRhc19zZXRfaW5kaWNhdG9yKGludCBpbmRpY2F0b3IsIGludCBpbmRleCwgaW50IG5ld192YWx1ZSk7CitleHRlcm4gdm9pZCBydGFzX2luaXRpYWxpemUodm9pZCk7CisKKy8qIEdpdmVuIGFuIFJUQVMgc3RhdHVzIGNvZGUgb2YgOTkwMC4uOTkwNSBjb21wdXRlIHRoZSBoaW50ZWQgZGVsYXkgKi8KK3Vuc2lnbmVkIGludCBydGFzX2V4dGVuZGVkX2J1c3lfZGVsYXlfdGltZShpbnQgc3RhdHVzKTsKK3N0YXRpYyBpbmxpbmUgaW50IHJ0YXNfaXNfZXh0ZW5kZWRfYnVzeShpbnQgc3RhdHVzKQoreworCXJldHVybiBzdGF0dXMgPj0gOTkwMCAmJiBzdGF0dXMgPD0gOTkwOTsKK30KKworZXh0ZXJuIHZvaWQgcFNlcmllc19sb2dfZXJyb3IoY2hhciAqYnVmLCB1bnNpZ25lZCBpbnQgZXJyX3R5cGUsIGludCBmYXRhbCk7CisKKy8qIEVycm9yIHR5cGVzIGxvZ2dlZC4gICovCisjZGVmaW5lIEVSUl9GTEFHX0FMUkVBRFlfTE9HR0VECTB4MAorI2RlZmluZSBFUlJfRkxBR19CT09UCQkweDEgCS8qIGxvZyB3YXMgcHVsbGVkIGZyb20gTlZSQU0gb24gYm9vdCAqLworI2RlZmluZSBFUlJfVFlQRV9SVEFTX0xPRwkweDIJLyogZnJvbSBydGFzIGV2ZW50LXNjYW4gKi8KKyNkZWZpbmUgRVJSX1RZUEVfS0VSTkVMX1BBTklDCTB4NAkvKiBmcm9tIHBhbmljKCkgKi8KKworLyogQWxsIHRoZSB0eXBlcyBhbmQgbm90IGZsYWdzICovCisjZGVmaW5lIEVSUl9UWVBFX01BU0sJKEVSUl9UWVBFX1JUQVNfTE9HIHwgRVJSX1RZUEVfS0VSTkVMX1BBTklDKQorCisjZGVmaW5lIFJUQVNfREVCVUcgS0VSTl9ERUJVRyAiUlRBUzogIgorIAorI2RlZmluZSBSVEFTX0VSUk9SX0xPR19NQVggMjA0OAorCisvKgorICogUmV0dXJuIHRoZSBmaXJtd2FyZS1zcGVjaWZpZWQgc2l6ZSBvZiB0aGUgZXJyb3IgbG9nIGJ1ZmZlcgorICogIGZvciBhbGwgcnRhcyBjYWxscyB0aGF0IHJlcXVpcmUgYW4gZXJyb3IgYnVmZmVyIGFyZ3VtZW50LgorICogIFRoaXMgaW5jbHVkZXMgJ2NoZWNrLWV4Y2VwdGlvbicgYW5kICdydGFzLWxhc3QtZXJyb3InLgorICovCitleHRlcm4gaW50IHJ0YXNfZ2V0X2Vycm9yX2xvZ19tYXgodm9pZCk7CisKKy8qIEV2ZW50IFNjYW4gUGFyYW1ldGVycyAqLworI2RlZmluZSBFVkVOVF9TQ0FOX0FMTF9FVkVOVFMJMHhmMDAwMDAwMAorI2RlZmluZSBTVVJWRUlMTEFOQ0VfVE9LRU4JOTAwMAorI2RlZmluZSBMT0dfTlVNQkVSCQk2NAkJLyogbXVzdCBiZSBhIHBvd2VyIG9mIHR3byAqLworI2RlZmluZSBMT0dfTlVNQkVSX01BU0sJCShMT0dfTlVNQkVSLTEpCisKKy8qIFNvbWUgUlRBUyBvcHMgcmVxdWlyZSBhIGRhdGEgYnVmZmVyIGFuZCB0aGF0IGJ1ZmZlciBtdXN0IGJlIDwgNEcuCisgKiBSYXRoZXIgdGhhbiBoYXZpbmcgYSBtZW1vcnkgYWxsb2NhdG9yLCBqdXN0IHVzZSB0aGlzIGJ1ZmZlcgorICogKGdldCB0aGUgbG9jayBmaXJzdCksIG1ha2UgdGhlIFJUQVMgY2FsbC4gIENvcHkgdGhlIGRhdGEgaW5zdGVhZAorICogb2YgaG9sZGluZyB0aGUgYnVmZmVyIGZvciBsb25nLgorICovCisKKyNkZWZpbmUgUlRBU19EQVRBX0JVRl9TSVpFIDQwOTYKK2V4dGVybiBzcGlubG9ja190IHJ0YXNfZGF0YV9idWZfbG9jazsKK2V4dGVybiBjaGFyIHJ0YXNfZGF0YV9idWZbUlRBU19EQVRBX0JVRl9TSVpFXTsKKworZXh0ZXJuIHZvaWQgcnRhc19zdG9wX3NlbGYodm9pZCk7CisKKy8qIFJNTyBidWZmZXIgcmVzZXJ2ZWQgZm9yIHVzZXItc3BhY2UgUlRBUyB1c2UgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIHJ0YXNfcm1vX2J1ZjsKKworI2RlZmluZSBHTE9CQUxfSU5URVJSVVBUX1FVRVVFIDkwMDUKKworI2VuZGlmIC8qIF9QUEM2NF9SVEFTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L3J3c2VtLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9yd3NlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkNWMyZjAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9yd3NlbS5oCkBAIC0wLDAgKzEsMTY3IEBACisvKgorICogaW5jbHVkZS9hc20tcHBjNjQvcndzZW0uaDogUi9XIHNlbWFwaG9yZXMgZm9yIFBQQyB1c2luZyB0aGUgc3R1ZmYKKyAqIGluIGxpYi9yd3NlbS5jLiAgQWRhcHRlZCBsYXJnZWx5IGZyb20gaW5jbHVkZS9hc20taTM4Ni9yd3NlbS5oCisgKiBieSBQYXVsIE1hY2tlcnJhcyA8cGF1bHVzQHNhbWJhLm9yZz4uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9QUEM2NF9SV1NFTV9ICisjZGVmaW5lIF9QUEM2NF9SV1NFTV9ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKworLyoKKyAqIHRoZSBzZW1hcGhvcmUgZGVmaW5pdGlvbgorICovCitzdHJ1Y3Qgcndfc2VtYXBob3JlIHsKKwkvKiBYWFggdGhpcyBzaG91bGQgYmUgYWJsZSB0byBiZSBhbiBhdG9taWNfdCAgLS0gcGF1bHVzICovCisJc2lnbmVkIGludAkJY291bnQ7CisjZGVmaW5lIFJXU0VNX1VOTE9DS0VEX1ZBTFVFCQkweDAwMDAwMDAwCisjZGVmaW5lIFJXU0VNX0FDVElWRV9CSUFTCQkweDAwMDAwMDAxCisjZGVmaW5lIFJXU0VNX0FDVElWRV9NQVNLCQkweDAwMDBmZmZmCisjZGVmaW5lIFJXU0VNX1dBSVRJTkdfQklBUwkJKC0weDAwMDEwMDAwKQorI2RlZmluZSBSV1NFTV9BQ1RJVkVfUkVBRF9CSUFTCQlSV1NFTV9BQ1RJVkVfQklBUworI2RlZmluZSBSV1NFTV9BQ1RJVkVfV1JJVEVfQklBUwkJKFJXU0VNX1dBSVRJTkdfQklBUyArIFJXU0VNX0FDVElWRV9CSUFTKQorCXNwaW5sb2NrX3QJCXdhaXRfbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXdhaXRfbGlzdDsKKyNpZiBSV1NFTV9ERUJVRworCWludAkJCWRlYnVnOworI2VuZGlmCit9OworCisvKgorICogaW5pdGlhbGlzYXRpb24KKyAqLworI2lmIFJXU0VNX0RFQlVHCisjZGVmaW5lIF9fUldTRU1fREVCVUdfSU5JVCAgICAgICwgMAorI2Vsc2UKKyNkZWZpbmUgX19SV1NFTV9ERUJVR19JTklUCS8qICovCisjZW5kaWYKKworI2RlZmluZSBfX1JXU0VNX0lOSVRJQUxJWkVSKG5hbWUpIFwKKwl7IFJXU0VNX1VOTE9DS0VEX1ZBTFVFLCBTUElOX0xPQ0tfVU5MT0NLRUQsIFwKKwkgIExJU1RfSEVBRF9JTklUKChuYW1lKS53YWl0X2xpc3QpIFwKKwkgIF9fUldTRU1fREVCVUdfSU5JVCB9CisKKyNkZWZpbmUgREVDTEFSRV9SV1NFTShuYW1lKQkJXAorCXN0cnVjdCByd19zZW1hcGhvcmUgbmFtZSA9IF9fUldTRU1fSU5JVElBTElaRVIobmFtZSkKKworZXh0ZXJuIHN0cnVjdCByd19zZW1hcGhvcmUgKnJ3c2VtX2Rvd25fcmVhZF9mYWlsZWQoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKTsKK2V4dGVybiBzdHJ1Y3Qgcndfc2VtYXBob3JlICpyd3NlbV9kb3duX3dyaXRlX2ZhaWxlZChzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pOworZXh0ZXJuIHN0cnVjdCByd19zZW1hcGhvcmUgKnJ3c2VtX3dha2Uoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKTsKK2V4dGVybiBzdHJ1Y3Qgcndfc2VtYXBob3JlICpyd3NlbV9kb3duZ3JhZGVfd2FrZShzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pOworCitzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9yd3NlbShzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCit7CisJc2VtLT5jb3VudCA9IFJXU0VNX1VOTE9DS0VEX1ZBTFVFOworCXNwaW5fbG9ja19pbml0KCZzZW0tPndhaXRfbG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJnNlbS0+d2FpdF9saXN0KTsKKyNpZiBSV1NFTV9ERUJVRworCXNlbS0+ZGVidWcgPSAwOworI2VuZGlmCit9CisKKy8qCisgKiBsb2NrIGZvciByZWFkaW5nCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2Rvd25fcmVhZChzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCit7CisJaWYgKHVubGlrZWx5KGF0b21pY19pbmNfcmV0dXJuKChhdG9taWNfdCAqKSgmc2VtLT5jb3VudCkpIDw9IDApKQorCQlyd3NlbV9kb3duX3JlYWRfZmFpbGVkKHNlbSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fZG93bl9yZWFkX3RyeWxvY2soc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQoreworCWludCB0bXA7CisKKwl3aGlsZSAoKHRtcCA9IHNlbS0+Y291bnQpID49IDApIHsKKwkJaWYgKHRtcCA9PSBjbXB4Y2hnKCZzZW0tPmNvdW50LCB0bXAsCisJCQkJICAgdG1wICsgUldTRU1fQUNUSVZFX1JFQURfQklBUykpIHsKKwkJCXJldHVybiAxOworCQl9CisJfQorCXJldHVybiAwOworfQorCisvKgorICogbG9jayBmb3Igd3JpdGluZworICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19kb3duX3dyaXRlKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKK3sKKwlpbnQgdG1wOworCisJdG1wID0gYXRvbWljX2FkZF9yZXR1cm4oUldTRU1fQUNUSVZFX1dSSVRFX0JJQVMsCisJCQkJKGF0b21pY190ICopKCZzZW0tPmNvdW50KSk7CisJaWYgKHVubGlrZWx5KHRtcCAhPSBSV1NFTV9BQ1RJVkVfV1JJVEVfQklBUykpCisJCXJ3c2VtX2Rvd25fd3JpdGVfZmFpbGVkKHNlbSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fZG93bl93cml0ZV90cnlsb2NrKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKK3sKKwlpbnQgdG1wOworCisJdG1wID0gY21weGNoZygmc2VtLT5jb3VudCwgUldTRU1fVU5MT0NLRURfVkFMVUUsCisJCSAgICAgIFJXU0VNX0FDVElWRV9XUklURV9CSUFTKTsKKwlyZXR1cm4gdG1wID09IFJXU0VNX1VOTE9DS0VEX1ZBTFVFOworfQorCisvKgorICogdW5sb2NrIGFmdGVyIHJlYWRpbmcKKyAqLworc3RhdGljIGlubGluZSB2b2lkIF9fdXBfcmVhZChzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCit7CisJaW50IHRtcDsKKworCXRtcCA9IGF0b21pY19kZWNfcmV0dXJuKChhdG9taWNfdCAqKSgmc2VtLT5jb3VudCkpOworCWlmICh1bmxpa2VseSh0bXAgPCAtMSAmJiAodG1wICYgUldTRU1fQUNUSVZFX01BU0spID09IDApKQorCQlyd3NlbV93YWtlKHNlbSk7Cit9CisKKy8qCisgKiB1bmxvY2sgYWZ0ZXIgd3JpdGluZworICovCitzdGF0aWMgaW5saW5lIHZvaWQgX191cF93cml0ZShzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCit7CisJaWYgKHVubGlrZWx5KGF0b21pY19zdWJfcmV0dXJuKFJXU0VNX0FDVElWRV9XUklURV9CSUFTLAorCQkJICAgICAgKGF0b21pY190ICopKCZzZW0tPmNvdW50KSkgPCAwKSkKKwkJcndzZW1fd2FrZShzZW0pOworfQorCisvKgorICogaW1wbGVtZW50IGF0b21pYyBhZGQgZnVuY3Rpb25hbGl0eQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgcndzZW1fYXRvbWljX2FkZChpbnQgZGVsdGEsIHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKK3sKKwlhdG9taWNfYWRkKGRlbHRhLCAoYXRvbWljX3QgKikoJnNlbS0+Y291bnQpKTsKK30KKworLyoKKyAqIGRvd25ncmFkZSB3cml0ZSBsb2NrIHRvIHJlYWQgbG9jaworICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19kb3duZ3JhZGVfd3JpdGUoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQoreworCWludCB0bXA7CisKKwl0bXAgPSBhdG9taWNfYWRkX3JldHVybigtUldTRU1fV0FJVElOR19CSUFTLCAoYXRvbWljX3QgKikoJnNlbS0+Y291bnQpKTsKKwlpZiAodG1wIDwgMCkKKwkJcndzZW1fZG93bmdyYWRlX3dha2Uoc2VtKTsKK30KKworLyoKKyAqIGltcGxlbWVudCBleGNoYW5nZSBhbmQgYWRkIGZ1bmN0aW9uYWxpdHkKKyAqLworc3RhdGljIGlubGluZSBpbnQgcndzZW1fYXRvbWljX3VwZGF0ZShpbnQgZGVsdGEsIHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKK3sKKwlyZXR1cm4gYXRvbWljX2FkZF9yZXR1cm4oZGVsdGEsIChhdG9taWNfdCAqKSgmc2VtLT5jb3VudCkpOworfQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9QUENfUldTRU1fWEFERF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9zY2F0dGVybGlzdC5oIGIvaW5jbHVkZS9hc20tcHBjNjQvc2NhdHRlcmxpc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWNjZTZjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvc2NhdHRlcmxpc3QuaApAQCAtMCwwICsxLDMxIEBACisjaWZuZGVmIF9QUEM2NF9TQ0FUVEVSTElTVF9ICisjZGVmaW5lIF9QUEM2NF9TQ0FUVEVSTElTVF9ICisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgUFBDNjQgVGVhbSwgSUJNIENvcnAKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9kbWEuaD4KKworc3RydWN0IHNjYXR0ZXJsaXN0IHsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0OworCXVuc2lnbmVkIGludCBsZW5ndGg7CisKKwkvKiBGb3IgVENFIHN1cHBvcnQgKi8KKwl1MzIgZG1hX2FkZHJlc3M7CisJdTMyIGRtYV9sZW5ndGg7Cit9OworCisjZGVmaW5lIHNnX2RtYV9hZGRyZXNzKHNnKQkoKHNnKS0+ZG1hX2FkZHJlc3MpCisjZGVmaW5lIHNnX2RtYV9sZW4oc2cpCQkoKHNnKS0+ZG1hX2xlbmd0aCkKKworI2RlZmluZSBJU0FfRE1BX1RIUkVTSE9MRAkofjBVTCkKKworI2VuZGlmIC8qICEoX1BQQzY0X1NDQVRURVJMSVNUX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9zZWNjb21wLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9zZWNjb21wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzEzMGMzMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L3NlY2NvbXAuaApAQCAtMCwwICsxLDIxIEBACisjaWZuZGVmIF9BU01fU0VDQ09NUF9ICisKKyNpbmNsdWRlIDxsaW51eC90aHJlYWRfaW5mby5oPiAvKiBhbHJlYWR5IGRlZmluZXMgVElGXzMyQklUICovCisKKyNpZm5kZWYgVElGXzMyQklUCisjZXJyb3IgInVuZXhwZWN0ZWQgVElGXzMyQklUIG9uIHBwYzY0IgorI2VuZGlmCisKKyNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KKworI2RlZmluZSBfX05SX3NlY2NvbXBfcmVhZCBfX05SX3JlYWQKKyNkZWZpbmUgX19OUl9zZWNjb21wX3dyaXRlIF9fTlJfd3JpdGUKKyNkZWZpbmUgX19OUl9zZWNjb21wX2V4aXQgX19OUl9leGl0CisjZGVmaW5lIF9fTlJfc2VjY29tcF9zaWdyZXR1cm4gX19OUl9ydF9zaWdyZXR1cm4KKworI2RlZmluZSBfX05SX3NlY2NvbXBfcmVhZF8zMiBfX05SX3JlYWQKKyNkZWZpbmUgX19OUl9zZWNjb21wX3dyaXRlXzMyIF9fTlJfd3JpdGUKKyNkZWZpbmUgX19OUl9zZWNjb21wX2V4aXRfMzIgX19OUl9leGl0CisjZGVmaW5lIF9fTlJfc2VjY29tcF9zaWdyZXR1cm5fMzIgX19OUl9zaWdyZXR1cm4KKworI2VuZGlmIC8qIF9BU01fU0VDQ09NUF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9zZWN0aW9ucy5oIGIvaW5jbHVkZS9hc20tcHBjNjQvc2VjdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDhjYTZmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvc2VjdGlvbnMuaApAQCAtMCwwICsxLDI5IEBACisjaWZuZGVmIF9QUEM2NF9TRUNUSU9OU19ICisjZGVmaW5lIF9QUEM2NF9TRUNUSU9OU19ICisKK2V4dGVybiBjaGFyIF9lbmRbXTsKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NlY3Rpb25zLmg+CisKKyNkZWZpbmUgX19wbWFjCisjZGVmaW5lIF9fcG1hY2RhdGEKKworI2RlZmluZSBfX3ByZXAKKyNkZWZpbmUgX19wcmVwZGF0YQorCisjZGVmaW5lIF9fY2hycAorI2RlZmluZSBfX2NocnBkYXRhCisKKyNkZWZpbmUgX19vcGVuZmlybXdhcmUKKyNkZWZpbmUgX19vcGVuZmlybXdhcmVkYXRhCisKKworc3RhdGljIGlubGluZSBpbnQgaW5fa2VybmVsX3RleHQodW5zaWduZWQgbG9uZyBhZGRyKQoreworCWlmIChhZGRyID49ICh1bnNpZ25lZCBsb25nKV9zdGV4dCAmJiBhZGRyIDwgKHVuc2lnbmVkIGxvbmcpX19pbml0X2VuZCkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9zZWdtZW50LmggYi9pbmNsdWRlL2FzbS1wcGM2NC9zZWdtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgwZmI2OAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L3NlZ21lbnQuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19QUEM2NF9TRUdNRU5UX0gKKyNkZWZpbmUgX19QUEM2NF9TRUdNRU5UX0gKKworLyogT25seSBoZXJlIGJlY2F1c2Ugd2UgaGF2ZSBzb21lIG9sZCBoZWFkZXIgZmlsZXMgdGhhdCBleHBlY3QgaXQuLiAqLworCisjZW5kaWYgLyogX19QUEM2NF9TRUdNRU5UX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L3NlbWFwaG9yZS5oIGIvaW5jbHVkZS9hc20tcHBjNjQvc2VtYXBob3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVmZTc3NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L3NlbWFwaG9yZS5oCkBAIC0wLDAgKzEsOTggQEAKKyNpZm5kZWYgX1BQQzY0X1NFTUFQSE9SRV9ICisjZGVmaW5lIF9QUEM2NF9TRU1BUEhPUkVfSAorCisvKgorICogUmVtb3ZlIHNwaW5sb2NrLWJhc2VkIFJXIHNlbWFwaG9yZXM7IFJXIHNlbWFwaG9yZSBkZWZpbml0aW9ucyBhcmUKKyAqIG5vdyBpbiByd3NlbS5oIGFuZCB3ZSB1c2UgdGhlIGdlbmVyaWMgbGliL3J3c2VtLmMgaW1wbGVtZW50YXRpb24uCisgKiBSZXdvcmsgc2VtYXBob3JlcyB0byB1c2UgYXRvbWljX2RlY19pZl9wb3NpdGl2ZS4KKyAqIC0tIFBhdWwgTWFja2VycmFzIChwYXVsdXNAc2FtYmEub3JnKQorICovCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgorCitzdHJ1Y3Qgc2VtYXBob3JlIHsKKwkvKgorCSAqIE5vdGUgdGhhdCBhbnkgbmVnYXRpdmUgdmFsdWUgb2YgY291bnQgaXMgZXF1aXZhbGVudCB0byAwLAorCSAqIGJ1dCBhZGRpdGlvbmFsbHkgaW5kaWNhdGVzIHRoYXQgc29tZSBwcm9jZXNzKGVzKSBtaWdodCBiZQorCSAqIHNsZWVwaW5nIG9uIGB3YWl0Jy4KKwkgKi8KKwlhdG9taWNfdCBjb3VudDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OworfTsKKworI2RlZmluZSBfX1NFTUFQSE9SRV9JTklUSUFMSVpFUihuYW1lLCBuKQkJCQlcCit7CQkJCQkJCQkJXAorCS5jb3VudAkJPSBBVE9NSUNfSU5JVChuKSwJCQkJXAorCS53YWl0CQk9IF9fV0FJVF9RVUVVRV9IRUFEX0lOSVRJQUxJWkVSKChuYW1lKS53YWl0KQlcCit9CisKKyNkZWZpbmUgX19NVVRFWF9JTklUSUFMSVpFUihuYW1lKSBcCisJX19TRU1BUEhPUkVfSU5JVElBTElaRVIobmFtZSwgMSkKKworI2RlZmluZSBfX0RFQ0xBUkVfU0VNQVBIT1JFX0dFTkVSSUMobmFtZSwgY291bnQpIFwKKwlzdHJ1Y3Qgc2VtYXBob3JlIG5hbWUgPSBfX1NFTUFQSE9SRV9JTklUSUFMSVpFUihuYW1lLGNvdW50KQorCisjZGVmaW5lIERFQ0xBUkVfTVVURVgobmFtZSkJCV9fREVDTEFSRV9TRU1BUEhPUkVfR0VORVJJQyhuYW1lLCAxKQorI2RlZmluZSBERUNMQVJFX01VVEVYX0xPQ0tFRChuYW1lKQlfX0RFQ0xBUkVfU0VNQVBIT1JFX0dFTkVSSUMobmFtZSwgMCkKKworc3RhdGljIGlubGluZSB2b2lkIHNlbWFfaW5pdCAoc3RydWN0IHNlbWFwaG9yZSAqc2VtLCBpbnQgdmFsKQoreworCWF0b21pY19zZXQoJnNlbS0+Y291bnQsIHZhbCk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmc2VtLT53YWl0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGluaXRfTVVURVggKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKK3sKKwlzZW1hX2luaXQoc2VtLCAxKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGluaXRfTVVURVhfTE9DS0VEIChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCit7CisJc2VtYV9pbml0KHNlbSwgMCk7Cit9CisKK2V4dGVybiB2b2lkIF9fZG93bihzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKTsKK2V4dGVybiBpbnQgIF9fZG93bl9pbnRlcnJ1cHRpYmxlKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pOworZXh0ZXJuIHZvaWQgX191cChzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKTsKKworc3RhdGljIGlubGluZSB2b2lkIGRvd24oc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKK3sKKwltaWdodF9zbGVlcCgpOworCisJLyoKKwkgKiBUcnkgdG8gZ2V0IHRoZSBzZW1hcGhvcmUsIHRha2UgdGhlIHNsb3cgcGF0aCBpZiB3ZSBmYWlsLgorCSAqLworCWlmICh1bmxpa2VseShhdG9taWNfZGVjX3JldHVybigmc2VtLT5jb3VudCkgPCAwKSkKKwkJX19kb3duKHNlbSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGRvd25faW50ZXJydXB0aWJsZShzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQoreworCWludCByZXQgPSAwOworCisJbWlnaHRfc2xlZXAoKTsKKworCWlmICh1bmxpa2VseShhdG9taWNfZGVjX3JldHVybigmc2VtLT5jb3VudCkgPCAwKSkKKwkJcmV0ID0gX19kb3duX2ludGVycnVwdGlibGUoc2VtKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIGludCBkb3duX3RyeWxvY2soc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKK3sKKwlyZXR1cm4gYXRvbWljX2RlY19pZl9wb3NpdGl2ZSgmc2VtLT5jb3VudCkgPCAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdXAoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKK3sKKwlpZiAodW5saWtlbHkoYXRvbWljX2luY19yZXR1cm4oJnNlbS0+Y291bnQpIDw9IDApKQorCQlfX3VwKHNlbSk7Cit9CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiAhKF9QUEM2NF9TRU1BUEhPUkVfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L3NlbWJ1Zi5oIGIvaW5jbHVkZS9hc20tcHBjNjQvc2VtYnVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTcyZTU5MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L3NlbWJ1Zi5oCkBAIC0wLDAgKzEsMjcgQEAKKyNpZm5kZWYgX1BQQzY0X1NFTUJVRl9ICisjZGVmaW5lIF9QUEM2NF9TRU1CVUZfSAorCisvKiAKKyAqIFRoZSBzZW1pZDY0X2RzIHN0cnVjdHVyZSBmb3IgUFBDIGFyY2hpdGVjdHVyZS4KKyAqCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBQYWQgc3BhY2UgaXMgbGVmdCBmb3I6CisgKiAtIDIgbWlzY2VsbGFuZW91cyA2NC1iaXQgdmFsdWVzCisgKi8KKworc3RydWN0IHNlbWlkNjRfZHMgeworCXN0cnVjdCBpcGM2NF9wZXJtIHNlbV9wZXJtOwkvKiBwZXJtaXNzaW9ucyAuLiBzZWUgaXBjLmggKi8KKwlfX2tlcm5lbF90aW1lX3QJc2VtX290aW1lOwkvKiBsYXN0IHNlbW9wIHRpbWUgKi8KKwlfX2tlcm5lbF90aW1lX3QJc2VtX2N0aW1lOwkvKiBsYXN0IGNoYW5nZSB0aW1lICovCisJdW5zaWduZWQgbG9uZwlzZW1fbnNlbXM7CS8qIG5vLiBvZiBzZW1hcGhvcmVzIGluIGFycmF5ICovCisKKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkMTsKKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkMjsKK307CisKKyNlbmRpZiAvKiBfUFBDNjRfU0VNQlVGX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L3NlcmlhbC5oIGIvaW5jbHVkZS9hc20tcHBjNjQvc2VyaWFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZiY2I3OQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L3NlcmlhbC5oCkBAIC0wLDAgKzEsMjMgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1wcGM2NC9zZXJpYWwuaAorICovCisjaWZuZGVmIF9QUEM2NF9TRVJJQUxfSAorI2RlZmluZSBfUFBDNjRfU0VSSUFMX0gKKworLyoKKyAqIFRoaXMgYXNzdW1lcyB5b3UgaGF2ZSBhIDEuODQzMiBNSHogY2xvY2sgZm9yIHlvdXIgVUFSVC4KKyAqCisgKiBJdCdkIGJlIG5pY2UgaWYgc29tZW9uZSBidWlsdCBhIHNlcmlhbCBjYXJkIHdpdGggYSAyNC41NzYgTUh6CisgKiBjbG9jaywgc2luY2UgdGhlIDE2NTUwQSBpcyBjYXBhYmxlIG9mIGhhbmRsaW5nIGEgdG9wIHNwZWVkIG9mIDEuNQorICogbWVnYWJpdHMvc2Vjb25kOyBidXQgdGhpcyByZXF1aXJlcyB0aGUgZmFzdGVyIGNsb2NrLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworLyogRGVmYXVsdCBiYXVkIGJhc2UgaWYgbm90IGZvdW5kIGluIGRldmljZS10cmVlICovCisjZGVmaW5lIEJBU0VfQkFVRCAoIDE4NDMyMDAgLyAxNiApCisKKyNlbmRpZiAvKiBfUFBDNjRfU0VSSUFMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L3NldHVwLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9zZXR1cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyNTdiODMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9zZXR1cC5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfUFBDX1NFVFVQX0gKKyNkZWZpbmUgX1BQQ19TRVRVUF9ICisKKyNkZWZpbmUgQ09NTUFORF9MSU5FX1NJWkUgNTEyCisKKyNlbmRpZiAvKiBfUFBDX1NFVFVQX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L3NobWJ1Zi5oIGIvaW5jbHVkZS9hc20tcHBjNjQvc2htYnVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJlOTlkNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L3NobWJ1Zi5oCkBAIC0wLDAgKzEsNDMgQEAKKyNpZm5kZWYgX1BQQzY0X1NITUJVRl9ICisjZGVmaW5lIF9QUEM2NF9TSE1CVUZfSAorCisvKiAKKyAqIFRoZSBzaG1pZDY0X2RzIHN0cnVjdHVyZSBmb3IgUFBDNjQgYXJjaGl0ZWN0dXJlLgorICogTm90ZSBleHRyYSBwYWRkaW5nIGJlY2F1c2UgdGhpcyBzdHJ1Y3R1cmUgaXMgcGFzc2VkIGJhY2sgYW5kIGZvcnRoCisgKiBiZXR3ZWVuIGtlcm5lbCBhbmQgdXNlciBzcGFjZS4KKyAqCisgKiBQYWQgc3BhY2UgaXMgbGVmdCBmb3I6CisgKiAtIDIgbWlzY2VsbGFuZW91cyA2NC1iaXQgdmFsdWVzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCitzdHJ1Y3Qgc2htaWQ2NF9kcyB7CisJc3RydWN0IGlwYzY0X3Blcm0Jc2htX3Blcm07CS8qIG9wZXJhdGlvbiBwZXJtcyAqLworCV9fa2VybmVsX3RpbWVfdAkJc2htX2F0aW1lOwkvKiBsYXN0IGF0dGFjaCB0aW1lICovCisJX19rZXJuZWxfdGltZV90CQlzaG1fZHRpbWU7CS8qIGxhc3QgZGV0YWNoIHRpbWUgKi8KKwlfX2tlcm5lbF90aW1lX3QJCXNobV9jdGltZTsJLyogbGFzdCBjaGFuZ2UgdGltZSAqLworCXNpemVfdAkJCXNobV9zZWdzejsJLyogc2l6ZSBvZiBzZWdtZW50IChieXRlcykgKi8KKwlfX2tlcm5lbF9waWRfdAkJc2htX2NwaWQ7CS8qIHBpZCBvZiBjcmVhdG9yICovCisJX19rZXJuZWxfcGlkX3QJCXNobV9scGlkOwkvKiBwaWQgb2YgbGFzdCBvcGVyYXRvciAqLworCXVuc2lnbmVkIGxvbmcJCXNobV9uYXR0Y2g7CS8qIG5vLiBvZiBjdXJyZW50IGF0dGFjaGVzICovCisJdW5zaWduZWQgbG9uZwkJX191bnVzZWQxOworCXVuc2lnbmVkIGxvbmcJCV9fdW51c2VkMjsKK307CisKK3N0cnVjdCBzaG1pbmZvNjQgeworCXVuc2lnbmVkIGxvbmcJc2htbWF4OworCXVuc2lnbmVkIGxvbmcJc2htbWluOworCXVuc2lnbmVkIGxvbmcJc2htbW5pOworCXVuc2lnbmVkIGxvbmcJc2htc2VnOworCXVuc2lnbmVkIGxvbmcJc2htYWxsOworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQxOworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQyOworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQzOworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQ0OworfTsKKworI2VuZGlmIC8qIF9QUEM2NF9TSE1CVUZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvc2htcGFyYW0uaCBiL2luY2x1ZGUvYXNtLXBwYzY0L3NobXBhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI4MjVjZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L3NobXBhcmFtLmgKQEAgLTAsMCArMSwxMyBAQAorI2lmbmRlZiBfUFBDNjRfU0hNUEFSQU1fSAorI2RlZmluZSBfUFBDNjRfU0hNUEFSQU1fSAorCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjZGVmaW5lCVNITUxCQSBQQUdFX1NJWkUJCSAvKiBhdHRhY2ggYWRkciBhIG11bHRpcGxlIG9mIHRoaXMgKi8KKworI2VuZGlmIC8qIF9QUEM2NF9TSE1QQVJBTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9zaWdjb250ZXh0LmggYi9pbmNsdWRlL2FzbS1wcGM2NC9zaWdjb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY4YWVlNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L3NpZ2NvbnRleHQuaApAQCAtMCwwICsxLDQ3IEBACisjaWZuZGVmIF9BU01fUFBDNjRfU0lHQ09OVEVYVF9ICisjZGVmaW5lIF9BU01fUFBDNjRfU0lHQ09OVEVYVF9ICisKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisjaW5jbHVkZSA8YXNtL2VsZi5oPgorCisKK3N0cnVjdCBzaWdjb250ZXh0IHsKKwl1bnNpZ25lZCBsb25nCV91bnVzZWRbNF07CisJaW50CQlzaWduYWw7CisJaW50CQlfcGFkMDsKKwl1bnNpZ25lZCBsb25nCWhhbmRsZXI7CisJdW5zaWduZWQgbG9uZwlvbGRtYXNrOworCXN0cnVjdCBwdF9yZWdzCV9fdXNlciAqcmVnczsKKwllbGZfZ3JlZ3NldF90CWdwX3JlZ3M7CisJZWxmX2ZwcmVnc2V0X3QJZnBfcmVnczsKKy8qCisgKiBUbyBtYWludGFpbiBjb21wYXRpYmlsaXR5IHdpdGggY3VycmVudCBpbXBsZW1lbnRhdGlvbnMgdGhlIHNpZ2NvbnRleHQgaXMgCisgKiBleHRlbmRlZCBieSBhcHBlbmRpbmcgYSBwb2ludGVyICh2X3JlZ3MpIHRvIGEgcXVhZHdvcmQgdHlwZSAoZWxmX3ZycmVnX3QpIAorICogZm9sbG93ZWQgYnkgYW4gdW5zdHJ1Y3R1cmVkICh2bXhfcmVzZXJ2ZSkgZmllbGQgb2YgNjkgZG91Ymxld29yZHMuICBUaGlzIAorICogYWxsb3dzIHRoZSBhcnJheSBvZiB2ZWN0b3IgcmVnaXN0ZXJzIHRvIGJlIHF1YWR3b3JkIGFsaWduZWQgaW5kZXBlbmRlbnQgb2YgCisgKiB0aGUgYWxpZ25tZW50IG9mIHRoZSBjb250YWluaW5nIHNpZ2NvbnRleHQgb3IgdWNvbnRleHQuIEl0IGlzIHRoZSAKKyAqIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBjb2RlIHNldHRpbmcgdGhlIHNpZ2NvbnRleHQgdG8gc2V0IHRoaXMgcG9pbnRlciB0byAKKyAqIGVpdGhlciBOVUxMIChpZiB0aGlzIHByb2Nlc3NvciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBWTVggZmVhdHVyZSkgb3IgdGhlIAorICogYWRkcmVzcyBvZiB0aGUgZmlyc3QgcXVhZHdvcmQgd2l0aGluIHRoZSBhbGxvY2F0ZWQgKHZteF9yZXNlcnZlKSBhcmVhLgorICoKKyAqIFRoZSBwb2ludGVyICh2X3JlZ3MpIG9mIHZlY3RvciB0eXBlIChlbGZfdnJyZWdfdCkgaXMgdHlwZSBjb21wYXRpYmxlIHdpdGggCisgKiBhbiBhcnJheSBvZiAzNCBxdWFkd29yZCBlbnRyaWVzIChlbGZfdnJyZWdzZXRfdCkuICBUaGUgZW50cmllcyB3aXRoIAorICogaW5kZXhlcyAwLTMxIGNvbnRhaW4gdGhlIGNvcnJlc3BvbmRpbmcgdmVjdG9yIHJlZ2lzdGVycy4gIFRoZSBlbnRyeSB3aXRoIAorICogaW5kZXggMzIgY29udGFpbnMgdGhlIHZzY3IgYXMgdGhlIGxhc3Qgd29yZCAob2Zmc2V0IDEyKSB3aXRoaW4gdGhlIAorICogcXVhZHdvcmQuICBUaGlzIGFsbG93cyB0aGUgdnNjciB0byBiZSBzdG9yZWQgYXMgZWl0aGVyIGEgcXVhZHdvcmQgKHNpbmNlIAorICogaXQgbXVzdCBiZSBjb3BpZWQgdmlhIGEgdmVjdG9yIHJlZ2lzdGVyIHRvL2Zyb20gc3RvcmFnZSkgb3IgYXMgYSB3b3JkLiAgCisgKiBUaGUgZW50cnkgd2l0aCBpbmRleCAzMyBjb250YWlucyB0aGUgdnJzYXZlIGFzIHRoZSBmaXJzdCB3b3JkIChvZmZzZXQgMCkgCisgKiB3aXRoaW4gdGhlIHF1YWR3b3JkLgorICovCisJZWxmX3ZycmVnX3QJX191c2VyICp2X3JlZ3M7CisJbG9uZwkJdm14X3Jlc2VydmVbRUxGX05WUlJFRytFTEZfTlZSUkVHKzFdOworfTsKKworI2VuZGlmIC8qIF9BU01fUFBDNjRfU0lHQ09OVEVYVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9zaWdpbmZvLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9zaWdpbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2E3YzIzZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L3NpZ2luZm8uaApAQCAtMCwwICsxLDE2IEBACisjaWZuZGVmIF9QUEM2NF9TSUdJTkZPX0gKKyNkZWZpbmUgX1BQQzY0X1NJR0lORk9fSAorCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjZGVmaW5lIF9fQVJDSF9TSV9QUkVBTUJMRV9TSVpFCSg0ICogc2l6ZW9mKGludCkpCisjZGVmaW5lIFNJX1BBRF9TSVpFMzIJCSgoU0lfTUFYX1NJWkUvc2l6ZW9mKGludCkpIC0gMykKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NpZ2luZm8uaD4KKworI2VuZGlmIC8qIF9QUEM2NF9TSUdJTkZPX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L3NpZ25hbC5oIGIvaW5jbHVkZS9hc20tcHBjNjQvc2lnbmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU1NDAxYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L3NpZ25hbC5oCkBAIC0wLDAgKzEsMTU5IEBACisjaWZuZGVmIF9BU01QUEM2NF9TSUdOQUxfSAorI2RlZmluZSBfQVNNUFBDNjRfU0lHTkFMX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxhc20vc2lnaW5mby5oPgorCisvKiBBdm9pZCB0b28gbWFueSBoZWFkZXIgb3JkZXJpbmcgcHJvYmxlbXMuICAqLworc3RydWN0IHNpZ2luZm87CisKKyNkZWZpbmUgX05TSUcJCTY0CisjZGVmaW5lIF9OU0lHX0JQVwk2NAorI2RlZmluZSBfTlNJR19XT1JEUwkoX05TSUcgLyBfTlNJR19CUFcpCisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBvbGRfc2lnc2V0X3Q7CQkvKiBhdCBsZWFzdCAzMiBiaXRzICovCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBsb25nIHNpZ1tfTlNJR19XT1JEU107Cit9IHNpZ3NldF90OworCisjZGVmaW5lIFNJR0hVUAkJIDEKKyNkZWZpbmUgU0lHSU5UCQkgMgorI2RlZmluZSBTSUdRVUlUCQkgMworI2RlZmluZSBTSUdJTEwJCSA0CisjZGVmaW5lIFNJR1RSQVAJCSA1CisjZGVmaW5lIFNJR0FCUlQJCSA2CisjZGVmaW5lIFNJR0lPVAkJIDYKKyNkZWZpbmUgU0lHQlVTCQkgNworI2RlZmluZSBTSUdGUEUJCSA4CisjZGVmaW5lIFNJR0tJTEwJCSA5CisjZGVmaW5lIFNJR1VTUjEJCTEwCisjZGVmaW5lIFNJR1NFR1YJCTExCisjZGVmaW5lIFNJR1VTUjIJCTEyCisjZGVmaW5lIFNJR1BJUEUJCTEzCisjZGVmaW5lIFNJR0FMUk0JCTE0CisjZGVmaW5lIFNJR1RFUk0JCTE1CisjZGVmaW5lIFNJR1NUS0ZMVAkxNgorI2RlZmluZSBTSUdDSExECQkxNworI2RlZmluZSBTSUdDT05UCQkxOAorI2RlZmluZSBTSUdTVE9QCQkxOQorI2RlZmluZSBTSUdUU1RQCQkyMAorI2RlZmluZSBTSUdUVElOCQkyMQorI2RlZmluZSBTSUdUVE9VCQkyMgorI2RlZmluZSBTSUdVUkcJCTIzCisjZGVmaW5lIFNJR1hDUFUJCTI0CisjZGVmaW5lIFNJR1hGU1oJCTI1CisjZGVmaW5lIFNJR1ZUQUxSTQkyNgorI2RlZmluZSBTSUdQUk9GCQkyNworI2RlZmluZSBTSUdXSU5DSAkyOAorI2RlZmluZSBTSUdJTwkJMjkKKyNkZWZpbmUgU0lHUE9MTAkJU0lHSU8KKy8qCisjZGVmaW5lIFNJR0xPU1QJCTI5CisqLworI2RlZmluZSBTSUdQV1IJCTMwCisjZGVmaW5lIFNJR1NZUwkJMzEKKyNkZWZpbmUJU0lHVU5VU0VECTMxCisKKy8qIFRoZXNlIHNob3VsZCBub3QgYmUgY29uc2lkZXJlZCBjb25zdGFudHMgZnJvbSB1c2VybGFuZC4gICovCisjZGVmaW5lIFNJR1JUTUlOCTMyCisjZGVmaW5lIFNJR1JUTUFYCV9OU0lHCisKKy8qCisgKiBTQV9GTEFHUyB2YWx1ZXM6CisgKgorICogU0FfT05TVEFDSyBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZCwgYnV0IHdpbGwgYWxsb3cgc2lnYWx0c3RhY2soMikuCisgKiBTQV9JTlRFUlJVUFQgaXMgYSBuby1vcCwgYnV0IGxlZnQgZHVlIHRvIGhpc3RvcmljYWwgcmVhc29ucy4gVXNlIHRoZQorICogU0FfUkVTVEFSVCBmbGFnIHRvIGdldCByZXN0YXJ0aW5nIHNpZ25hbHMgKHdoaWNoIHdlcmUgdGhlIGRlZmF1bHQgbG9uZyBhZ28pCisgKiBTQV9OT0NMRFNUT1AgZmxhZyB0byB0dXJuIG9mZiBTSUdDSExEIHdoZW4gY2hpbGRyZW4gc3RvcC4KKyAqIFNBX1JFU0VUSEFORCBjbGVhcnMgdGhlIGhhbmRsZXIgd2hlbiB0aGUgc2lnbmFsIGlzIGRlbGl2ZXJlZC4KKyAqIFNBX05PQ0xEV0FJVCBmbGFnIG9uIFNJR0NITEQgdG8gaW5oaWJpdCB6b21iaWVzLgorICogU0FfTk9ERUZFUiBwcmV2ZW50cyB0aGUgY3VycmVudCBzaWduYWwgZnJvbSBiZWluZyBtYXNrZWQgaW4gdGhlIGhhbmRsZXIuCisgKgorICogU0FfT05FU0hPVCBhbmQgU0FfTk9NQVNLIGFyZSB0aGUgaGlzdG9yaWNhbCBMaW51eCBuYW1lcyBmb3IgdGhlIFNpbmdsZQorICogVW5peCBuYW1lcyBSRVNFVEhBTkQgYW5kIE5PREVGRVIgcmVzcGVjdGl2ZWx5LgorICovCisjZGVmaW5lIFNBX05PQ0xEU1RPUAkweDAwMDAwMDAxdQorI2RlZmluZSBTQV9OT0NMRFdBSVQJMHgwMDAwMDAwMnUKKyNkZWZpbmUgU0FfU0lHSU5GTwkweDAwMDAwMDA0dQorI2RlZmluZSBTQV9PTlNUQUNLCTB4MDgwMDAwMDB1CisjZGVmaW5lIFNBX1JFU1RBUlQJMHgxMDAwMDAwMHUKKyNkZWZpbmUgU0FfTk9ERUZFUgkweDQwMDAwMDAwdQorI2RlZmluZSBTQV9SRVNFVEhBTkQJMHg4MDAwMDAwMHUKKworI2RlZmluZSBTQV9OT01BU0sJU0FfTk9ERUZFUgorI2RlZmluZSBTQV9PTkVTSE9UCVNBX1JFU0VUSEFORAorI2RlZmluZSBTQV9JTlRFUlJVUFQJMHgyMDAwMDAwMHUgLyogZHVtbXkgLS0gaWdub3JlZCAqLworCisjZGVmaW5lIFNBX1JFU1RPUkVSCTB4MDQwMDAwMDB1CisKKy8qIAorICogc2lnYWx0c3RhY2sgY29udHJvbHMKKyAqLworI2RlZmluZSBTU19PTlNUQUNLCTEKKyNkZWZpbmUgU1NfRElTQUJMRQkyCisKKyNkZWZpbmUgTUlOU0lHU1RLU1oJMjA0OAorI2RlZmluZSBTSUdTVEtTWgk4MTkyCisjaWZkZWYgX19LRVJORUxfXworCisvKgorICogVGhlc2UgdmFsdWVzIG9mIHNhX2ZsYWdzIGFyZSB1c2VkIG9ubHkgYnkgdGhlIGtlcm5lbCBhcyBwYXJ0IG9mIHRoZQorICogaXJxIGhhbmRsaW5nIHJvdXRpbmVzLgorICoKKyAqIFNBX0lOVEVSUlVQVCBpcyBhbHNvIHVzZWQgYnkgdGhlIGlycSBoYW5kbGluZyByb3V0aW5lcy4KKyAqIFNBX1NISVJRIGlzIGZvciBzaGFyZWQgaW50ZXJydXB0IHN1cHBvcnQgb24gUENJIGFuZCBFSVNBLgorICovCisjZGVmaW5lIFNBX1BST0JFCQlTQV9PTkVTSE9UCisjZGVmaW5lIFNBX1NBTVBMRV9SQU5ET00JU0FfUkVTVEFSVAorI2RlZmluZSBTQV9TSElSUQkJMHgwNDAwMDAwMAorI2VuZGlmCisKKyNkZWZpbmUgU0lHX0JMT0NLICAgICAgICAgIDAJLyogZm9yIGJsb2NraW5nIHNpZ25hbHMgKi8KKyNkZWZpbmUgU0lHX1VOQkxPQ0sgICAgICAgIDEJLyogZm9yIHVuYmxvY2tpbmcgc2lnbmFscyAqLworI2RlZmluZSBTSUdfU0VUTUFTSyAgICAgICAgMgkvKiBmb3Igc2V0dGluZyB0aGUgc2lnbmFsIG1hc2sgKi8KKworLyogVHlwZSBvZiBhIHNpZ25hbCBoYW5kbGVyLiAgKi8KK3R5cGVkZWYgdm9pZCBfX3NpZ2Z1bmN0aW9uKGludCk7Cit0eXBlZGVmIF9fc2lnZnVuY3Rpb24gX191c2VyICogX19zaWdoYW5kbGVyX3Q7CisKKy8qIFR5cGUgb2YgdGhlIHJlc3RvcmVyIGZ1bmN0aW9uICovCit0eXBlZGVmIHZvaWQgX19zaWdyZXN0b3Jlcih2b2lkKTsKK3R5cGVkZWYgX19zaWdyZXN0b3JlciBfX3VzZXIgKiBfX3NpZ3Jlc3RvcmVyX3Q7CisKKyNkZWZpbmUgU0lHX0RGTAkoKF9fc2lnaGFuZGxlcl90KTApCS8qIGRlZmF1bHQgc2lnbmFsIGhhbmRsaW5nICovCisjZGVmaW5lIFNJR19JR04JKChfX3NpZ2hhbmRsZXJfdCkxKQkvKiBpZ25vcmUgc2lnbmFsICovCisjZGVmaW5lIFNJR19FUlIJKChfX3NpZ2hhbmRsZXJfdCktMSkJLyogZXJyb3IgcmV0dXJuIGZyb20gc2lnbmFsICovCisKK3N0cnVjdCBvbGRfc2lnYWN0aW9uIHsKKwlfX3NpZ2hhbmRsZXJfdCBzYV9oYW5kbGVyOworCW9sZF9zaWdzZXRfdCBzYV9tYXNrOworCXVuc2lnbmVkIGxvbmcgc2FfZmxhZ3M7CisJX19zaWdyZXN0b3Jlcl90IHNhX3Jlc3RvcmVyOworfTsKKworc3RydWN0IHNpZ2FjdGlvbiB7CisJX19zaWdoYW5kbGVyX3Qgc2FfaGFuZGxlcjsKKwl1bnNpZ25lZCBsb25nIHNhX2ZsYWdzOworCV9fc2lncmVzdG9yZXJfdCBzYV9yZXN0b3JlcjsKKwlzaWdzZXRfdCBzYV9tYXNrOwkJLyogbWFzayBsYXN0IGZvciBleHRlbnNpYmlsaXR5ICovCit9OworCitzdHJ1Y3Qga19zaWdhY3Rpb24geworCXN0cnVjdCBzaWdhY3Rpb24gc2E7Cit9OworCit0eXBlZGVmIHN0cnVjdCBzaWdhbHRzdGFjayB7CisJdm9pZCBfX3VzZXIgKnNzX3NwOworCWludCBzc19mbGFnczsKKwlzaXplX3Qgc3Nfc2l6ZTsKK30gc3RhY2tfdDsKKworc3RydWN0IHB0X3JlZ3M7CitzdHJ1Y3QgdGltZXNwZWM7CitleHRlcm4gaW50IGRvX3NpZ25hbChzaWdzZXRfdCAqb2xkc2V0LCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitleHRlcm4gaW50IGRvX3NpZ25hbDMyKHNpZ3NldF90ICpvbGRzZXQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKyNkZWZpbmUgcHRyYWNlX3NpZ25hbF9kZWxpdmVyKHJlZ3MsIGNvb2tpZSkgZG8geyB9IHdoaWxlICgwKQorCisjZW5kaWYgLyogX0FTTVBQQzY0X1NJR05BTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9zbXAuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L3NtcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4NjQ2ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9zbXAuaApAQCAtMCwwICsxLDkxIEBACisvKiAKKyAqIHNtcC5oOiBQUEM2NCBzcGVjaWZpYyBTTVAgY29kZS4KKyAqCisgKiBPcmlnaW5hbCB3YXMgYSBjb3B5IG9mIHNwYXJjIHNtcC5oLiAgTm93IGhlYXZpbHkgbW9kaWZpZWQKKyAqIGZvciBQUEMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk2IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAxIENvcnQgRG91Z2FuIDxjb3J0QGZzbWxhYnMuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmZGVmIF9fS0VSTkVMX18KKyNpZm5kZWYgX1BQQzY0X1NNUF9ICisjZGVmaW5lIF9QUEM2NF9TTVBfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworI2luY2x1ZGUgPGFzbS9wYWNhLmg+CisKK2V4dGVybiBpbnQgYm9vdF9jcHVpZDsKK2V4dGVybiBpbnQgYm9vdF9jcHVpZF9waHlzOworCitleHRlcm4gdm9pZCBjcHVfZGllKHZvaWQpOworCisjaWZkZWYgQ09ORklHX1NNUAorCitleHRlcm4gdm9pZCBzbXBfc2VuZF9kZWJ1Z2dlcl9icmVhayhpbnQgY3B1KTsKK3N0cnVjdCBwdF9yZWdzOworZXh0ZXJuIHZvaWQgc21wX21lc3NhZ2VfcmVjdihpbnQsIHN0cnVjdCBwdF9yZWdzICopOworCisjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCitleHRlcm4gdm9pZCBmaXh1cF9pcnFzKGNwdW1hc2tfdCBtYXApOworaW50IGdlbmVyaWNfY3B1X2Rpc2FibGUodm9pZCk7CitpbnQgZ2VuZXJpY19jcHVfZW5hYmxlKHVuc2lnbmVkIGludCBjcHUpOwordm9pZCBnZW5lcmljX2NwdV9kaWUodW5zaWduZWQgaW50IGNwdSk7Cit2b2lkIGdlbmVyaWNfbWFjaF9jcHVfZGllKHZvaWQpOworI2VuZGlmCisKKyNkZWZpbmUgX19zbXBfcHJvY2Vzc29yX2lkKCkgKGdldF9wYWNhKCktPnBhY2FfaW5kZXgpCisjZGVmaW5lIGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpIChnZXRfcGFjYSgpLT5od19jcHVfaWQpCisKK2V4dGVybiBjcHVtYXNrX3QgY3B1X3NpYmxpbmdfbWFwW05SX0NQVVNdOworCisvKiBTaW5jZSBPcGVuUElDIGhhcyBvbmx5IDQgSVBJcywgd2UgdXNlIHNsaWdodGx5IGRpZmZlcmVudCBtZXNzYWdlIG51bWJlcnMuCisgKgorICogTWFrZSBzdXJlIHRoaXMgbWF0Y2hlcyBvcGVucGljX3JlcXVlc3RfSVBJcyBpbiBvcGVuX3BpYy5jLCBvciB3aGF0IHNob3dzIHVwCisgKiBpbiAvcHJvYy9pbnRlcnJ1cHRzIHdpbGwgYmUgd3JvbmchISEgLS1Ucm95ICovCisjZGVmaW5lIFBQQ19NU0dfQ0FMTF9GVU5DVElPTiAgIDAKKyNkZWZpbmUgUFBDX01TR19SRVNDSEVEVUxFICAgICAgMQorLyogVGhpcyBpcyB1bnVzZWQgbm93ICovCisjaWYgMAorI2RlZmluZSBQUENfTVNHX01JR1JBVEVfVEFTSyAgICAyCisjZW5kaWYKKyNkZWZpbmUgUFBDX01TR19ERUJVR0dFUl9CUkVBSyAgMworCit2b2lkIHNtcF9pbml0X2lTZXJpZXModm9pZCk7Cit2b2lkIHNtcF9pbml0X3BTZXJpZXModm9pZCk7CisKK2V4dGVybiBpbnQgX19jcHVfZGlzYWJsZSh2b2lkKTsKK2V4dGVybiB2b2lkIF9fY3B1X2RpZSh1bnNpZ25lZCBpbnQgY3B1KTsKKyNlbmRpZiAvKiBDT05GSUdfU01QICovCisKKyNkZWZpbmUgZ2V0X2hhcmRfc21wX3Byb2Nlc3Nvcl9pZChDUFUpIChwYWNhWyhDUFUpXS5od19jcHVfaWQpCisjZGVmaW5lIHNldF9oYXJkX3NtcF9wcm9jZXNzb3JfaWQoQ1BVLCBWQUwpIFwKKwlkbyB7IChwYWNhWyhDUFUpXS5od19jcHVfaWQgPSAoVkFMKSk7IH0gd2hpbGUgKDApCisKK2V4dGVybiBpbnQgc210X2VuYWJsZWRfYXRfYm9vdDsKKworZXh0ZXJuIGludCBzbXBfbXBpY19wcm9iZSh2b2lkKTsKK2V4dGVybiB2b2lkIHNtcF9tcGljX3NldHVwX2NwdShpbnQgY3B1KTsKK2V4dGVybiB2b2lkIHNtcF9tcGljX21lc3NhZ2VfcGFzcyhpbnQgdGFyZ2V0LCBpbnQgbXNnKTsKK2V4dGVybiB2b2lkIHNtcF9nZW5lcmljX2tpY2tfY3B1KGludCBucik7CisKK2V4dGVybiB2b2lkIHNtcF9nZW5lcmljX2dpdmVfdGltZWJhc2Uodm9pZCk7CitleHRlcm4gdm9pZCBzbXBfZ2VuZXJpY190YWtlX3RpbWViYXNlKHZvaWQpOworCitleHRlcm4gc3RydWN0IHNtcF9vcHNfdCAqc21wX29wczsKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYgLyogIShfUFBDNjRfU01QX0gpICovCisjZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvc211LmggYi9pbmNsdWRlL2FzbS1wcGM2NC9zbXUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGI0Mzk3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvc211LmgKQEAgLTAsMCArMSwyMiBAQAorLyoKKyAqIERlZmluaXRpb25zIGZvciB0YWxraW5nIHRvIHRoZSBTTVUgY2hpcCBpbiBuZXdlciBHNSBQb3dlck1hY3MKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKy8qCisgKiBCYXNpYyByb3V0aW5lcyBmb3IgdXNlIGJ5IGFyY2hpdGVjdHVyZS4gVG8gYmUgZXh0ZW5kZWQgYXMKKyAqIHdlIHVuZGVyc3RhbmQgbW9yZSBvZiB0aGUgY2hpcAorICovCitleHRlcm4gaW50IHNtdV9pbml0KHZvaWQpOworZXh0ZXJuIGludCBzbXVfcHJlc2VudCh2b2lkKTsKK2V4dGVybiB2b2lkIHNtdV9zaHV0ZG93bih2b2lkKTsKK2V4dGVybiB2b2lkIHNtdV9yZXN0YXJ0KHZvaWQpOworZXh0ZXJuIGludCBzbXVfZ2V0X3J0Y190aW1lKHN0cnVjdCBydGNfdGltZSAqdGltZSk7CitleHRlcm4gaW50IHNtdV9zZXRfcnRjX3RpbWUoc3RydWN0IHJ0Y190aW1lICp0aW1lKTsKKworLyoKKyAqIFNNVSBjb21tYW5kIGJ1ZmZlciBhYnNvbHV0ZSBhZGRyZXNzLCBleHBvcnRlZCBieSBwbWFjX3NldHVwLAorICogdGhpcyBpcyBhbGxvY2F0ZWQgdmVyeSBlYXJseSBkdXJpbmcgYm9vdC4KKyAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc211X2NtZGJ1Zl9hYnM7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9zb2NrZXQuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L3NvY2tldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5ZTAwZGYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9zb2NrZXQuaApAQCAtMCwwICsxLDU3IEBACisjaWZuZGVmIF9BU01fU09DS0VUX0gKKyNkZWZpbmUgX0FTTV9TT0NLRVRfSAorCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8YXNtL3NvY2tpb3MuaD4KKworLyogRm9yIHNldHNvY2tvcHRpb25zKDIpICovCisjZGVmaW5lIFNPTF9TT0NLRVQJMQorCisjZGVmaW5lIFNPX0RFQlVHCTEKKyNkZWZpbmUgU09fUkVVU0VBRERSCTIKKyNkZWZpbmUgU09fVFlQRQkJMworI2RlZmluZSBTT19FUlJPUgk0CisjZGVmaW5lIFNPX0RPTlRST1VURQk1CisjZGVmaW5lIFNPX0JST0FEQ0FTVAk2CisjZGVmaW5lIFNPX1NOREJVRgk3CisjZGVmaW5lIFNPX1JDVkJVRgk4CisjZGVmaW5lIFNPX0tFRVBBTElWRQk5CisjZGVmaW5lIFNPX09PQklOTElORQkxMAorI2RlZmluZSBTT19OT19DSEVDSwkxMQorI2RlZmluZSBTT19QUklPUklUWQkxMgorI2RlZmluZSBTT19MSU5HRVIJMTMKKyNkZWZpbmUgU09fQlNEQ09NUEFUCTE0CisvKiBUbyBhZGQgOiNkZWZpbmUgU09fUkVVU0VQT1JUIDE1ICovCisjZGVmaW5lIFNPX1JDVkxPV0FUCTE2CisjZGVmaW5lIFNPX1NORExPV0FUCTE3CisjZGVmaW5lIFNPX1JDVlRJTUVPCTE4CisjZGVmaW5lIFNPX1NORFRJTUVPCTE5CisjZGVmaW5lIFNPX1BBU1NDUkVECTIwCisjZGVmaW5lIFNPX1BFRVJDUkVECTIxCisKKy8qIFNlY3VyaXR5IGxldmVscyAtIGFzIHBlciBOUkwgSVB2NiAtIGRvbid0IGFjdHVhbGx5IGRvIGFueXRoaW5nICovCisjZGVmaW5lIFNPX1NFQ1VSSVRZX0FVVEhFTlRJQ0FUSU9OCQkyMgorI2RlZmluZSBTT19TRUNVUklUWV9FTkNSWVBUSU9OX1RSQU5TUE9SVAkyMworI2RlZmluZSBTT19TRUNVUklUWV9FTkNSWVBUSU9OX05FVFdPUksJCTI0CisKKyNkZWZpbmUgU09fQklORFRPREVWSUNFCTI1CisKKy8qIFNvY2tldCBmaWx0ZXJpbmcgKi8KKyNkZWZpbmUgU09fQVRUQUNIX0ZJTFRFUgkyNgorI2RlZmluZSBTT19ERVRBQ0hfRklMVEVSCTI3CisKKyNkZWZpbmUgU09fUEVFUk5BTUUJCTI4CisjZGVmaW5lIFNPX1RJTUVTVEFNUAkJMjkKKyNkZWZpbmUgU0NNX1RJTUVTVEFNUAkJU09fVElNRVNUQU1QCisKKyNkZWZpbmUgU09fQUNDRVBUQ09OTiAgICAgICAgICAgMzAKKworI2RlZmluZSBTT19QRUVSU0VDICAgICAgICAgICAgIDMxCisKKyNlbmRpZiAvKiBfQVNNX1NPQ0tFVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9zb2NraW9zLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9zb2NraW9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJkMWEyMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L3NvY2tpb3MuaApAQCAtMCwwICsxLDE5IEBACisjaWZuZGVmIF9BU01fUFBDNjRfU09DS0lPU19ICisjZGVmaW5lIF9BU01fUFBDNjRfU09DS0lPU19ICisKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKy8qIFNvY2tldC1sZXZlbCBJL08gY29udHJvbCBjYWxscy4gKi8KKyNkZWZpbmUgRklPU0VUT1dOIAkweDg5MDEKKyNkZWZpbmUgU0lPQ1NQR1JQCTB4ODkwMgorI2RlZmluZSBGSU9HRVRPV04JMHg4OTAzCisjZGVmaW5lIFNJT0NHUEdSUAkweDg5MDQKKyNkZWZpbmUgU0lPQ0FUTUFSSwkweDg5MDUKKyNkZWZpbmUgU0lPQ0dTVEFNUAkweDg5MDYJCS8qIEdldCBzdGFtcCAqLworCisjZW5kaWYgLyogX0FTTV9QUEM2NF9TT0NLSU9TX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L3NwaW5sb2NrLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9zcGlubG9jay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5YjJhMTEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9zcGlubG9jay5oCkBAIC0wLDAgKzEsMjYwIEBACisjaWZuZGVmIF9fQVNNX1NQSU5MT0NLX0gKKyNkZWZpbmUgX19BU01fU1BJTkxPQ0tfSAorCisvKgorICogU2ltcGxlIHNwaW4gbG9jayBvcGVyYXRpb25zLiAgCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMDQgUGF1bCBNYWNrZXJyYXMgPHBhdWx1c0BhdS5pYm0uY29tPiwgSUJNCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgQW50b24gQmxhbmNoYXJkIDxhbnRvbkBhdS5pYm0uY29tPiwgSUJNCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgRGF2ZSBFbmdlYnJldHNlbiA8ZW5nZWJyZXRAdXMuaWJtLmNvbT4sIElCTQorICoJUmV3b3JrIHRvIHN1cHBvcnQgdmlydHVhbCBwcm9jZXNzb3JzCisgKgorICogVHlwZSBvZiBpbnQgaXMgdXNlZCBhcyBhIGZ1bGwgNjRiIHdvcmQgaXMgbm90IG5lY2Vzc2FyeS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL3BhY2EuaD4KKyNpbmNsdWRlIDxhc20vaHZjYWxsLmg+CisjaW5jbHVkZSA8YXNtL2lTZXJpZXMvSHZDYWxsLmg+CisKK3R5cGVkZWYgc3RydWN0IHsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbG9jazsKKyNpZmRlZiBDT05GSUdfUFJFRU1QVAorCXVuc2lnbmVkIGludCBicmVha19sb2NrOworI2VuZGlmCit9IHNwaW5sb2NrX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKwl2b2xhdGlsZSBzaWduZWQgaW50IGxvY2s7CisjaWZkZWYgQ09ORklHX1BSRUVNUFQKKwl1bnNpZ25lZCBpbnQgYnJlYWtfbG9jazsKKyNlbmRpZgorfSByd2xvY2tfdDsKKworI2lmZGVmIF9fS0VSTkVMX18KKyNkZWZpbmUgU1BJTl9MT0NLX1VOTE9DS0VECShzcGlubG9ja190KSB7IDAgfQorCisjZGVmaW5lIHNwaW5faXNfbG9ja2VkKHgpCSgoeCktPmxvY2sgIT0gMCkKKyNkZWZpbmUgc3Bpbl9sb2NrX2luaXQoeCkJZG8geyAqKHgpID0gU1BJTl9MT0NLX1VOTE9DS0VEOyB9IHdoaWxlKDApCisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX3Jhd19zcGluX3VubG9jayhzcGlubG9ja190ICpsb2NrKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKCJsd3N5bmMJIyBzcGluX3VubG9jayI6IDogOiJtZW1vcnkiKTsKKwlsb2NrLT5sb2NrID0gMDsKK30KKworLyoKKyAqIE9uIGEgc3lzdGVtIHdpdGggc2hhcmVkIHByb2Nlc3NvcnMgKHRoYXQgaXMsIHdoZXJlIGEgcGh5c2ljYWwKKyAqIHByb2Nlc3NvciBpcyBtdWx0aXBsZXhlZCBiZXR3ZWVuIHNldmVyYWwgdmlydHVhbCBwcm9jZXNzb3JzKSwKKyAqIHRoZXJlIGlzIG5vIHBvaW50IHNwaW5uaW5nIG9uIGEgbG9jayBpZiB0aGUgaG9sZGVyIG9mIHRoZSBsb2NrCisgKiBpc24ndCBjdXJyZW50bHkgc2NoZWR1bGVkIG9uIGEgcGh5c2ljYWwgcHJvY2Vzc29yLiAgSW5zdGVhZAorICogd2UgZGV0ZWN0IHRoaXMgc2l0dWF0aW9uIGFuZCBhc2sgdGhlIGh5cGVydmlzb3IgdG8gZ2l2ZSB0aGUKKyAqIHJlc3Qgb2Ygb3VyIHRpbWVzbGljZSB0byB0aGUgbG9jayBob2xkZXIuCisgKgorICogU28gdGhhdCB3ZSBjYW4gdGVsbCB3aGljaCB2aXJ0dWFsIHByb2Nlc3NvciBpcyBob2xkaW5nIGEgbG9jaywKKyAqIHdlIHB1dCAweDgwMDAwMDAwIHwgc21wX3Byb2Nlc3Nvcl9pZCgpIGluIHRoZSBsb2NrIHdoZW4gaXQgaXMKKyAqIGhlbGQuICBDb252ZW5pZW50bHksIHdlIGhhdmUgYSB3b3JkIGluIHRoZSBwYWNhIHRoYXQgaG9sZHMgdGhpcworICogdmFsdWUuCisgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1BQQ19TUExQQVIpIHx8IGRlZmluZWQoQ09ORklHX1BQQ19JU0VSSUVTKQorLyogV2Ugb25seSB5aWVsZCB0byB0aGUgaHlwZXJ2aXNvciBpZiB3ZSBhcmUgaW4gc2hhcmVkIHByb2Nlc3NvciBtb2RlICovCisjZGVmaW5lIFNIQVJFRF9QUk9DRVNTT1IgKGdldF9wYWNhKCktPmxwcGFjYS5zaGFyZWRfcHJvYykKK2V4dGVybiB2b2lkIF9fc3Bpbl95aWVsZChzcGlubG9ja190ICpsb2NrKTsKK2V4dGVybiB2b2lkIF9fcndfeWllbGQocndsb2NrX3QgKmxvY2spOworI2Vsc2UgLyogU1BMUEFSIHx8IElTRVJJRVMgKi8KKyNkZWZpbmUgX19zcGluX3lpZWxkKHgpCWJhcnJpZXIoKQorI2RlZmluZSBfX3J3X3lpZWxkKHgpCWJhcnJpZXIoKQorI2RlZmluZSBTSEFSRURfUFJPQ0VTU09SCTAKKyNlbmRpZgorZXh0ZXJuIHZvaWQgc3Bpbl91bmxvY2tfd2FpdChzcGlubG9ja190ICpsb2NrKTsKKworLyoKKyAqIFRoaXMgcmV0dXJucyB0aGUgb2xkIHZhbHVlIGluIHRoZSBsb2NrLCBzbyB3ZSBzdWNjZWVkZWQKKyAqIGluIGdldHRpbmcgdGhlIGxvY2sgaWYgdGhlIHJldHVybiB2YWx1ZSBpcyAwLgorICovCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIF9fc3Bpbl90cnlsb2NrKHNwaW5sb2NrX3QgKmxvY2spCit7CisJdW5zaWduZWQgbG9uZyB0bXAsIHRtcDI7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKyIJbHd6CQklMSwlMygxMykJCSMgX19zcGluX3RyeWxvY2tcblwKKzE6CWx3YXJ4CQklMCwwLCUyXG5cCisJY21wd2kJCTAsJTAsMFxuXAorCWJuZS0JCTJmXG5cCisJc3R3Y3guCQklMSwwLCUyXG5cCisJYm5lLQkJMWJcblwKKwlpc3luY1xuXAorMjoiCTogIj0mciIgKHRtcCksICI9JnIiICh0bXAyKQorCTogInIiICgmbG9jay0+bG9jayksICJpIiAob2Zmc2V0b2Yoc3RydWN0IHBhY2Ffc3RydWN0LCBsb2NrX3Rva2VuKSkKKwk6ICJjcjAiLCAibWVtb3J5Iik7CisKKwlyZXR1cm4gdG1wOworfQorCitzdGF0aWMgaW50IF9faW5saW5lX18gX3Jhd19zcGluX3RyeWxvY2soc3BpbmxvY2tfdCAqbG9jaykKK3sKKwlyZXR1cm4gX19zcGluX3RyeWxvY2sobG9jaykgPT0gMDsKK30KKworc3RhdGljIHZvaWQgX19pbmxpbmVfXyBfcmF3X3NwaW5fbG9jayhzcGlubG9ja190ICpsb2NrKQoreworCXdoaWxlICgxKSB7CisJCWlmIChsaWtlbHkoX19zcGluX3RyeWxvY2sobG9jaykgPT0gMCkpCisJCQlicmVhazsKKwkJZG8geworCQkJSE1UX2xvdygpOworCQkJaWYgKFNIQVJFRF9QUk9DRVNTT1IpCisJCQkJX19zcGluX3lpZWxkKGxvY2spOworCQl9IHdoaWxlIChsaWtlbHkobG9jay0+bG9jayAhPSAwKSk7CisJCUhNVF9tZWRpdW0oKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9faW5saW5lX18gX3Jhd19zcGluX2xvY2tfZmxhZ3Moc3BpbmxvY2tfdCAqbG9jaywgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzX2RpczsKKworCXdoaWxlICgxKSB7CisJCWlmIChsaWtlbHkoX19zcGluX3RyeWxvY2sobG9jaykgPT0gMCkpCisJCQlicmVhazsKKwkJbG9jYWxfc2F2ZV9mbGFncyhmbGFnc19kaXMpOworCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJCWRvIHsKKwkJCUhNVF9sb3coKTsKKwkJCWlmIChTSEFSRURfUFJPQ0VTU09SKQorCQkJCV9fc3Bpbl95aWVsZChsb2NrKTsKKwkJfSB3aGlsZSAobGlrZWx5KGxvY2stPmxvY2sgIT0gMCkpOworCQlITVRfbWVkaXVtKCk7CisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzX2Rpcyk7CisJfQorfQorCisvKgorICogUmVhZC13cml0ZSBzcGlubG9ja3MsIGFsbG93aW5nIG11bHRpcGxlIHJlYWRlcnMKKyAqIGJ1dCBvbmx5IG9uZSB3cml0ZXIuCisgKgorICogTk9URSEgaXQgaXMgcXVpdGUgY29tbW9uIHRvIGhhdmUgcmVhZGVycyBpbiBpbnRlcnJ1cHRzCisgKiBidXQgbm8gaW50ZXJydXB0IHdyaXRlcnMuIEZvciB0aG9zZSBjaXJjdW1zdGFuY2VzIHdlCisgKiBjYW4gIm1peCIgaXJxLXNhZmUgbG9ja3MgLSBhbnkgd3JpdGVyIG5lZWRzIHRvIGdldCBhCisgKiBpcnEtc2FmZSB3cml0ZS1sb2NrLCBidXQgcmVhZGVycyBjYW4gZ2V0IG5vbi1pcnFzYWZlCisgKiByZWFkLWxvY2tzLgorICovCisjZGVmaW5lIFJXX0xPQ0tfVU5MT0NLRUQgKHJ3bG9ja190KSB7IDAgfQorCisjZGVmaW5lIHJ3bG9ja19pbml0KHgpCQlkbyB7ICooeCkgPSBSV19MT0NLX1VOTE9DS0VEOyB9IHdoaWxlKDApCisKKyNkZWZpbmUgcmVhZF9jYW5fbG9jayhydykJKChydyktPmxvY2sgPj0gMCkKKyNkZWZpbmUgd3JpdGVfY2FuX2xvY2socncpCSghKHJ3KS0+bG9jaykKKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfcmF3X3dyaXRlX3VubG9jayhyd2xvY2tfdCAqcncpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oImx3c3luYwkJIyB3cml0ZV91bmxvY2siOiA6IDoibWVtb3J5Iik7CisJcnctPmxvY2sgPSAwOworfQorCisvKgorICogVGhpcyByZXR1cm5zIHRoZSBvbGQgdmFsdWUgaW4gdGhlIGxvY2sgKyAxLAorICogc28gd2UgZ290IGEgcmVhZCBsb2NrIGlmIHRoZSByZXR1cm4gdmFsdWUgaXMgPiAwLgorICovCitzdGF0aWMgbG9uZyBfX2lubGluZV9fIF9fcmVhZF90cnlsb2NrKHJ3bG9ja190ICpydykKK3sKKwlsb25nIHRtcDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorIjE6CWx3YXJ4CQklMCwwLCUxCQkjIHJlYWRfdHJ5bG9ja1xuXAorCWV4dHN3CQklMCwlMFxuXAorCWFkZGljLgkJJTAsJTAsMVxuXAorCWJsZS0JCTJmXG5cCisJc3R3Y3guCQklMCwwLCUxXG5cCisJYm5lLQkJMWJcblwKKwlpc3luY1xuXAorMjoiCTogIj0mciIgKHRtcCkKKwk6ICJyIiAoJnJ3LT5sb2NrKQorCTogImNyMCIsICJ4ZXIiLCAibWVtb3J5Iik7CisKKwlyZXR1cm4gdG1wOworfQorCitzdGF0aWMgaW50IF9faW5saW5lX18gX3Jhd19yZWFkX3RyeWxvY2socndsb2NrX3QgKnJ3KQoreworCXJldHVybiBfX3JlYWRfdHJ5bG9jayhydykgPiAwOworfQorCitzdGF0aWMgdm9pZCBfX2lubGluZV9fIF9yYXdfcmVhZF9sb2NrKHJ3bG9ja190ICpydykKK3sKKwl3aGlsZSAoMSkgeworCQlpZiAobGlrZWx5KF9fcmVhZF90cnlsb2NrKHJ3KSA+IDApKQorCQkJYnJlYWs7CisJCWRvIHsKKwkJCUhNVF9sb3coKTsKKwkJCWlmIChTSEFSRURfUFJPQ0VTU09SKQorCQkJCV9fcndfeWllbGQocncpOworCQl9IHdoaWxlIChsaWtlbHkocnctPmxvY2sgPCAwKSk7CisJCUhNVF9tZWRpdW0oKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9faW5saW5lX18gX3Jhd19yZWFkX3VubG9jayhyd2xvY2tfdCAqcncpCit7CisJbG9uZyB0bXA7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkiZWllaW8JCQkJIyByZWFkX3VubG9ja1xuXAorMToJbHdhcngJCSUwLDAsJTFcblwKKwlhZGRpYwkJJTAsJTAsLTFcblwKKwlzdHdjeC4JCSUwLDAsJTFcblwKKwlibmUtCQkxYiIKKwk6ICI9JnIiKHRtcCkKKwk6ICJyIigmcnctPmxvY2spCisJOiAiY3IwIiwgIm1lbW9yeSIpOworfQorCisvKgorICogVGhpcyByZXR1cm5zIHRoZSBvbGQgdmFsdWUgaW4gdGhlIGxvY2ssCisgKiBzbyB3ZSBnb3QgdGhlIHdyaXRlIGxvY2sgaWYgdGhlIHJldHVybiB2YWx1ZSBpcyAwLgorICovCitzdGF0aWMgX19pbmxpbmVfXyBsb25nIF9fd3JpdGVfdHJ5bG9jayhyd2xvY2tfdCAqcncpCit7CisJbG9uZyB0bXAsIHRtcDI7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKyIJbHd6CQklMSwlMygxMykJIyB3cml0ZV90cnlsb2NrXG5cCisxOglsd2FyeAkJJTAsMCwlMlxuXAorCWNtcHdpCQkwLCUwLDBcblwKKwlibmUtCQkyZlxuXAorCXN0d2N4LgkJJTEsMCwlMlxuXAorCWJuZS0JCTFiXG5cCisJaXN5bmNcblwKKzI6Igk6ICI9JnIiICh0bXApLCAiPSZyIiAodG1wMikKKwk6ICJyIiAoJnJ3LT5sb2NrKSwgImkiIChvZmZzZXRvZihzdHJ1Y3QgcGFjYV9zdHJ1Y3QsIGxvY2tfdG9rZW4pKQorCTogImNyMCIsICJtZW1vcnkiKTsKKworCXJldHVybiB0bXA7Cit9CisKK3N0YXRpYyBpbnQgX19pbmxpbmVfXyBfcmF3X3dyaXRlX3RyeWxvY2socndsb2NrX3QgKnJ3KQoreworCXJldHVybiBfX3dyaXRlX3RyeWxvY2socncpID09IDA7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5saW5lX18gX3Jhd193cml0ZV9sb2NrKHJ3bG9ja190ICpydykKK3sKKwl3aGlsZSAoMSkgeworCQlpZiAobGlrZWx5KF9fd3JpdGVfdHJ5bG9jayhydykgPT0gMCkpCisJCQlicmVhazsKKwkJZG8geworCQkJSE1UX2xvdygpOworCQkJaWYgKFNIQVJFRF9QUk9DRVNTT1IpCisJCQkJX19yd195aWVsZChydyk7CisJCX0gd2hpbGUgKGxpa2VseShydy0+bG9jayAhPSAwKSk7CisJCUhNVF9tZWRpdW0oKTsKKwl9Cit9CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYgLyogX19BU01fU1BJTkxPQ0tfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvc3N0ZXAuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L3NzdGVwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE2OGRiNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L3NzdGVwLmgKQEAgLTAsMCArMSwyNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBQYXVsIE1hY2tlcnJhcyA8cGF1bHVzQGF1LmlibS5jb20+LCBJQk0KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKK3N0cnVjdCBwdF9yZWdzOworCisvKgorICogV2UgZG9uJ3QgYWxsb3cgc2luZ2xlLXN0ZXBwaW5nIGFuIG10bXNyZCB0aGF0IHdvdWxkIGNsZWFyCisgKiBNU1JfUkksIHNpbmNlIHRoYXQgd291bGQgbWFrZSB0aGUgZXhjZXB0aW9uIHVucmVjb3ZlcmFibGUuCisgKiBTaW5jZSB3ZSBuZWVkIHRvIHNpbmdsZS1zdGVwIHRvIHByb2NlZWQgZnJvbSBhIGJyZWFrcG9pbnQsCisgKiB3ZSBkb24ndCBhbGxvdyBwdXR0aW5nIGEgYnJlYWtwb2ludCBvbiBhbiBtdG1zcmQgaW5zdHJ1Y3Rpb24uCisgKiBTaW1pbGFybHkgd2UgZG9uJ3QgYWxsb3cgYnJlYWtwb2ludHMgb24gcmZpZCBpbnN0cnVjdGlvbnMuCisgKiBUaGVzZSBtYWNyb3MgdGVsbCB1cyBpZiBhbiBpbnN0cnVjdGlvbiBpcyBhIG10bXNyZCBvciByZmlkLgorICovCisjZGVmaW5lIElTX01UTVNSRChpbnN0cikJKCgoaW5zdHIpICYgMHhmYzAwMDdmZSkgPT0gMHg3YzAwMDE2NCkKKyNkZWZpbmUgSVNfUkZJRChpbnN0cikJCSgoKGluc3RyKSAmIDB4ZmMwMDA3ZmUpID09IDB4NGMwMDAwMjQpCisKKy8qIEVtdWxhdGUgaW5zdHJ1Y3Rpb25zIHRoYXQgY2F1c2UgYSB0cmFuc2ZlciBvZiBjb250cm9sLiAqLworZXh0ZXJuIGludCBlbXVsYXRlX3N0ZXAoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGludCBpbnN0cik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9zdGF0LmggYi9pbmNsdWRlL2FzbS1wcGM2NC9zdGF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTczYTVmOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L3N0YXQuaApAQCAtMCwwICsxLDYwIEBACisjaWZuZGVmIF9QUEM2NF9TVEFUX0gKKyNkZWZpbmUgX1BQQzY0X1NUQVRfSAorCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IHN0YXQgeworCXVuc2lnbmVkIGxvbmcJc3RfZGV2OworCWlub190CQlzdF9pbm87CisJbmxpbmtfdAkJc3Rfbmxpbms7CisJbW9kZV90CQlzdF9tb2RlOworCXVpZF90IAkJc3RfdWlkOworCWdpZF90IAkJc3RfZ2lkOworCXVuc2lnbmVkIGxvbmcJc3RfcmRldjsKKwlvZmZfdAkJc3Rfc2l6ZTsKKwl1bnNpZ25lZCBsb25nICAJc3RfYmxrc2l6ZTsKKwl1bnNpZ25lZCBsb25nICAJc3RfYmxvY2tzOworCXVuc2lnbmVkIGxvbmcgIAlzdF9hdGltZTsKKwl1bnNpZ25lZCBsb25nCXN0X2F0aW1lX25zZWM7CisJdW5zaWduZWQgbG9uZyAgCXN0X210aW1lOworCXVuc2lnbmVkIGxvbmcgIAlzdF9tdGltZV9uc2VjOworCXVuc2lnbmVkIGxvbmcgIAlzdF9jdGltZTsKKwl1bnNpZ25lZCBsb25nICAJc3RfY3RpbWVfbnNlYzsKKwl1bnNpZ25lZCBsb25nICAJX191bnVzZWQ0OworCXVuc2lnbmVkIGxvbmcgIAlfX3VudXNlZDU7CisJdW5zaWduZWQgbG9uZyAgCV9fdW51c2VkNjsKK307CisKKyNkZWZpbmUgU1RBVF9IQVZFX05TRUMgMQorCisvKiBUaGlzIG1hdGNoZXMgc3RydWN0IHN0YXQ2NCBpbiBnbGliYzIuMS4gT25seSB1c2VkIGZvciAzMiBiaXQuICovCitzdHJ1Y3Qgc3RhdDY0IHsKKwl1bnNpZ25lZCBsb25nIHN0X2RldjsgCQkvKiBEZXZpY2UuICAqLworCXVuc2lnbmVkIGxvbmcgc3RfaW5vOwkJLyogRmlsZSBzZXJpYWwgbnVtYmVyLiAgKi8KKwl1bnNpZ25lZCBpbnQgc3RfbW9kZTsJCS8qIEZpbGUgbW9kZS4gICovCisJdW5zaWduZWQgaW50IHN0X25saW5rOwkJLyogTGluayBjb3VudC4gICovCisJdW5zaWduZWQgaW50IHN0X3VpZDsJCS8qIFVzZXIgSUQgb2YgdGhlIGZpbGUncyBvd25lci4gICovCisJdW5zaWduZWQgaW50IHN0X2dpZDsJCS8qIEdyb3VwIElEIG9mIHRoZSBmaWxlJ3MgZ3JvdXAuICovCisJdW5zaWduZWQgbG9uZyBzdF9yZGV2OyAJCS8qIERldmljZSBudW1iZXIsIGlmIGRldmljZS4gICovCisJdW5zaWduZWQgc2hvcnQgX19wYWQyOworCWxvbmcgc3Rfc2l6ZTsJCQkvKiBTaXplIG9mIGZpbGUsIGluIGJ5dGVzLiAgKi8KKwlpbnQgIHN0X2Jsa3NpemU7CQkvKiBPcHRpbWFsIGJsb2NrIHNpemUgZm9yIEkvTy4gICovCisKKwlsb25nIHN0X2Jsb2NrczsJCQkvKiBOdW1iZXIgNTEyLWJ5dGUgYmxvY2tzIGFsbG9jYXRlZC4gKi8KKwlpbnQgICBzdF9hdGltZTsJCQkvKiBUaW1lIG9mIGxhc3QgYWNjZXNzLiAgKi8KKwlpbnQgICBzdF9hdGltZV9uc2VjOworCWludCAgIHN0X210aW1lOwkJCS8qIFRpbWUgb2YgbGFzdCBtb2RpZmljYXRpb24uICAqLworCWludCAgIHN0X210aW1lX25zZWM7CisJaW50ICAgc3RfY3RpbWU7CQkJLyogVGltZSBvZiBsYXN0IHN0YXR1cyBjaGFuZ2UuICAqLworCWludCAgIHN0X2N0aW1lX25zZWM7CisJdW5zaWduZWQgaW50ICAgX191bnVzZWQ0OworCXVuc2lnbmVkIGludCAgIF9fdW51c2VkNTsKK307CisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L3N0YXRmcy5oIGIvaW5jbHVkZS9hc20tcHBjNjQvc3RhdGZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M5ODVlNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L3N0YXRmcy5oCkBAIC0wLDAgKzEsNjEgQEAKKyNpZm5kZWYgX1BQQzY0X1NUQVRGU19ICisjZGVmaW5lIF9QUEM2NF9TVEFURlNfSAorCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9fS0VSTkVMX1NUUklDVF9OQU1FUworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Cit0eXBlZGVmIF9fa2VybmVsX2ZzaWRfdAlmc2lkX3Q7CisjZW5kaWYKKworLyoKKyAqIFdlJ3JlIGFscmVhZHkgNjQtYml0LCBzbyBkdXBsaWNhdGUgdGhlIGRlZmluaXRpb24KKyAqLworc3RydWN0IHN0YXRmcyB7CisJbG9uZyBmX3R5cGU7CisJbG9uZyBmX2JzaXplOworCWxvbmcgZl9ibG9ja3M7CisJbG9uZyBmX2JmcmVlOworCWxvbmcgZl9iYXZhaWw7CisJbG9uZyBmX2ZpbGVzOworCWxvbmcgZl9mZnJlZTsKKwlfX2tlcm5lbF9mc2lkX3QgZl9mc2lkOworCWxvbmcgZl9uYW1lbGVuOworCWxvbmcgZl9mcnNpemU7CisJbG9uZyBmX3NwYXJlWzVdOworfTsKKworc3RydWN0IHN0YXRmczY0IHsKKwlsb25nIGZfdHlwZTsKKwlsb25nIGZfYnNpemU7CisJbG9uZyBmX2Jsb2NrczsKKwlsb25nIGZfYmZyZWU7CisJbG9uZyBmX2JhdmFpbDsKKwlsb25nIGZfZmlsZXM7CisJbG9uZyBmX2ZmcmVlOworCV9fa2VybmVsX2ZzaWRfdCBmX2ZzaWQ7CisJbG9uZyBmX25hbWVsZW47CisJbG9uZyBmX2Zyc2l6ZTsKKwlsb25nIGZfc3BhcmVbNV07Cit9OworCitzdHJ1Y3QgY29tcGF0X3N0YXRmczY0IHsKKwlfX3UzMiBmX3R5cGU7CisJX191MzIgZl9ic2l6ZTsKKwlfX3U2NCBmX2Jsb2NrczsKKwlfX3U2NCBmX2JmcmVlOworCV9fdTY0IGZfYmF2YWlsOworCV9fdTY0IGZfZmlsZXM7CisJX191NjQgZl9mZnJlZTsKKwlfX2tlcm5lbF9mc2lkX3QgZl9mc2lkOworCV9fdTMyIGZfbmFtZWxlbjsKKwlfX3UzMiBmX2Zyc2l6ZTsKKwlfX3UzMiBmX3NwYXJlWzVdOworfTsKKworI2VuZGlmICAvKiBfUFBDNjRfU1RBVEZTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L3N0cmluZy5oIGIvaW5jbHVkZS9hc20tcHBjNjQvc3RyaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWVjYTY4ZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L3N0cmluZy5oCkBAIC0wLDAgKzEsMzUgQEAKKyNpZm5kZWYgX1BQQzY0X1NUUklOR19IXworI2RlZmluZSBfUFBDNjRfU1RSSU5HX0hfCisKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSQ1BZCisjZGVmaW5lIF9fSEFWRV9BUkNIX1NUUk5DUFkKKyNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSTEVOCisjZGVmaW5lIF9fSEFWRV9BUkNIX1NUUkNNUAorI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJDQVQKKyNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNU0VUCisjZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNQWQorI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1NT1ZFCisjZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNNUAorI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1DSFIKKworZXh0ZXJuIGludCBzdHJjYXNlY21wKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKK2V4dGVybiBpbnQgc3RybmNhc2VjbXAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGludCk7CitleHRlcm4gY2hhciAqIHN0cmNweShjaGFyICosY29uc3QgY2hhciAqKTsKK2V4dGVybiBjaGFyICogc3RybmNweShjaGFyICosY29uc3QgY2hhciAqLCBfX2tlcm5lbF9zaXplX3QpOworZXh0ZXJuIF9fa2VybmVsX3NpemVfdCBzdHJsZW4oY29uc3QgY2hhciAqKTsKK2V4dGVybiBpbnQgc3RyY21wKGNvbnN0IGNoYXIgKixjb25zdCBjaGFyICopOworZXh0ZXJuIGNoYXIgKiBzdHJjYXQoY2hhciAqLCBjb25zdCBjaGFyICopOworZXh0ZXJuIHZvaWQgKiBtZW1zZXQodm9pZCAqLGludCxfX2tlcm5lbF9zaXplX3QpOworZXh0ZXJuIHZvaWQgKiBtZW1jcHkodm9pZCAqLGNvbnN0IHZvaWQgKixfX2tlcm5lbF9zaXplX3QpOworZXh0ZXJuIHZvaWQgKiBtZW1tb3ZlKHZvaWQgKixjb25zdCB2b2lkICosX19rZXJuZWxfc2l6ZV90KTsKK2V4dGVybiBpbnQgbWVtY21wKGNvbnN0IHZvaWQgKixjb25zdCB2b2lkICosX19rZXJuZWxfc2l6ZV90KTsKK2V4dGVybiB2b2lkICogbWVtY2hyKGNvbnN0IHZvaWQgKixpbnQsX19rZXJuZWxfc2l6ZV90KTsKKworI2VuZGlmIC8qIF9QUEM2NF9TVFJJTkdfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tcHBjNjQvc3lzdGVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThkMTIwYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L3N5c3RlbS5oCkBAIC0wLDAgKzEsMzA2IEBACisjaWZuZGVmIF9fUFBDNjRfU1lTVEVNX0gKKyNkZWZpbmUgX19QUEM2NF9TWVNURU1fSAorCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vaHdfaXJxLmg+CisjaW5jbHVkZSA8YXNtL21lbW9yeS5oPgorCisvKgorICogTWVtb3J5IGJhcnJpZXIuCisgKiBUaGUgc3luYyBpbnN0cnVjdGlvbiBndWFyYW50ZWVzIHRoYXQgYWxsIG1lbW9yeSBhY2Nlc3NlcyBpbml0aWF0ZWQKKyAqIGJ5IHRoaXMgcHJvY2Vzc29yIGhhdmUgYmVlbiBwZXJmb3JtZWQgKHdpdGggcmVzcGVjdCB0byBhbGwgb3RoZXIKKyAqIG1lY2hhbmlzbXMgdGhhdCBhY2Nlc3MgbWVtb3J5KS4gIFRoZSBlaWVpbyBpbnN0cnVjdGlvbiBpcyBhIGJhcnJpZXIKKyAqIHByb3ZpZGluZyBhbiBvcmRlcmluZyAoc2VwYXJhdGVseSkgZm9yIChhKSBjYWNoZWFibGUgc3RvcmVzIGFuZCAoYikKKyAqIGxvYWRzIGFuZCBzdG9yZXMgdG8gbm9uLWNhY2hlYWJsZSBtZW1vcnkgKGUuZy4gSS9PIGRldmljZXMpLgorICoKKyAqIG1iKCkgcHJldmVudHMgbG9hZHMgYW5kIHN0b3JlcyBiZWluZyByZW9yZGVyZWQgYWNyb3NzIHRoaXMgcG9pbnQuCisgKiBybWIoKSBwcmV2ZW50cyBsb2FkcyBiZWluZyByZW9yZGVyZWQgYWNyb3NzIHRoaXMgcG9pbnQuCisgKiB3bWIoKSBwcmV2ZW50cyBzdG9yZXMgYmVpbmcgcmVvcmRlcmVkIGFjcm9zcyB0aGlzIHBvaW50LgorICogcmVhZF9iYXJyaWVyX2RlcGVuZHMoKSBwcmV2ZW50cyBkYXRhLWRlcGVuZGVudCBsb2FkcyBiZWluZyByZW9yZGVyZWQKKyAqCWFjcm9zcyB0aGlzIHBvaW50IChub3Agb24gUFBDKS4KKyAqCisgKiBXZSBoYXZlIHRvIHVzZSB0aGUgc3luYyBpbnN0cnVjdGlvbnMgZm9yIG1iKCksIHNpbmNlIGx3c3luYyBkb2Vzbid0CisgKiBvcmRlciBsb2FkcyB3aXRoIHJlc3BlY3QgdG8gcHJldmlvdXMgc3RvcmVzLiAgTHdzeW5jIGlzIGZpbmUgZm9yCisgKiBybWIoKSwgdGhvdWdoLgorICogRm9yIHdtYigpLCB3ZSB1c2Ugc3luYyBzaW5jZSB3bWIgaXMgdXNlZCBpbiBkcml2ZXJzIHRvIG9yZGVyCisgKiBzdG9yZXMgdG8gc3lzdGVtIG1lbW9yeSB3aXRoIHJlc3BlY3QgdG8gd3JpdGVzIHRvIHRoZSBkZXZpY2UuCisgKiBIb3dldmVyLCBzbXBfd21iKCkgY2FuIGJlIGEgbGlnaHRlci13ZWlnaHQgZWllaW8gYmFycmllciBvbgorICogU01QIHNpbmNlIGl0IGlzIG9ubHkgdXNlZCB0byBvcmRlciB1cGRhdGVzIHRvIHN5c3RlbSBtZW1vcnkuCisgKi8KKyNkZWZpbmUgbWIoKSAgIF9fYXNtX18gX192b2xhdGlsZV9fICgic3luYyIgOiA6IDogIm1lbW9yeSIpCisjZGVmaW5lIHJtYigpICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImx3c3luYyIgOiA6IDogIm1lbW9yeSIpCisjZGVmaW5lIHdtYigpICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN5bmMiIDogOiA6ICJtZW1vcnkiKQorI2RlZmluZSByZWFkX2JhcnJpZXJfZGVwZW5kcygpICBkbyB7IH0gd2hpbGUoMCkKKworI2RlZmluZSBzZXRfbWIodmFyLCB2YWx1ZSkJZG8geyB2YXIgPSB2YWx1ZTsgc21wX21iKCk7IH0gd2hpbGUgKDApCisjZGVmaW5lIHNldF93bWIodmFyLCB2YWx1ZSkJZG8geyB2YXIgPSB2YWx1ZTsgc21wX3dtYigpOyB9IHdoaWxlICgwKQorCisjaWZkZWYgQ09ORklHX1NNUAorI2RlZmluZSBzbXBfbWIoKQltYigpCisjZGVmaW5lIHNtcF9ybWIoKQlybWIoKQorI2RlZmluZSBzbXBfd21iKCkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJlaWVpbyIgOiA6IDogIm1lbW9yeSIpCisjZGVmaW5lIHNtcF9yZWFkX2JhcnJpZXJfZGVwZW5kcygpICByZWFkX2JhcnJpZXJfZGVwZW5kcygpCisjZWxzZQorI2RlZmluZSBzbXBfbWIoKQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiIjogOiA6Im1lbW9yeSIpCisjZGVmaW5lIHNtcF9ybWIoKQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiIjogOiA6Im1lbW9yeSIpCisjZGVmaW5lIHNtcF93bWIoKQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiIjogOiA6Im1lbW9yeSIpCisjZGVmaW5lIHNtcF9yZWFkX2JhcnJpZXJfZGVwZW5kcygpICBkbyB7IH0gd2hpbGUoMCkKKyNlbmRpZiAvKiBDT05GSUdfU01QICovCisKKyNpZmRlZiBfX0tFUk5FTF9fCitzdHJ1Y3QgdGFza19zdHJ1Y3Q7CitzdHJ1Y3QgcHRfcmVnczsKKworI2lmZGVmIENPTkZJR19ERUJVR0dFUgorCitleHRlcm4gaW50ICgqX19kZWJ1Z2dlcikoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworZXh0ZXJuIGludCAoKl9fZGVidWdnZXJfaXBpKShzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitleHRlcm4gaW50ICgqX19kZWJ1Z2dlcl9icHQpKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2V4dGVybiBpbnQgKCpfX2RlYnVnZ2VyX3NzdGVwKShzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitleHRlcm4gaW50ICgqX19kZWJ1Z2dlcl9pYWJyX21hdGNoKShzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitleHRlcm4gaW50ICgqX19kZWJ1Z2dlcl9kYWJyX21hdGNoKShzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitleHRlcm4gaW50ICgqX19kZWJ1Z2dlcl9mYXVsdF9oYW5kbGVyKShzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKKyNkZWZpbmUgREVCVUdHRVJfQk9JTEVSUExBVEUoX19OQU1FKSBcCitzdGF0aWMgaW5saW5lIGludCBfX05BTUUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpIFwKK3sgXAorCWlmICh1bmxpa2VseShfXyAjIyBfX05BTUUpKSBcCisJCXJldHVybiBfXyAjIyBfX05BTUUocmVncyk7IFwKKwlyZXR1cm4gMDsgXAorfQorCitERUJVR0dFUl9CT0lMRVJQTEFURShkZWJ1Z2dlcikKK0RFQlVHR0VSX0JPSUxFUlBMQVRFKGRlYnVnZ2VyX2lwaSkKK0RFQlVHR0VSX0JPSUxFUlBMQVRFKGRlYnVnZ2VyX2JwdCkKK0RFQlVHR0VSX0JPSUxFUlBMQVRFKGRlYnVnZ2VyX3NzdGVwKQorREVCVUdHRVJfQk9JTEVSUExBVEUoZGVidWdnZXJfaWFicl9tYXRjaCkKK0RFQlVHR0VSX0JPSUxFUlBMQVRFKGRlYnVnZ2VyX2RhYnJfbWF0Y2gpCitERUJVR0dFUl9CT0lMRVJQTEFURShkZWJ1Z2dlcl9mYXVsdF9oYW5kbGVyKQorCisjaWZkZWYgQ09ORklHX1hNT04KK2V4dGVybiB2b2lkIHhtb25faW5pdCh2b2lkKTsKKyNlbmRpZgorCisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgZGVidWdnZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgaW50IGRlYnVnZ2VyX2lwaShzdHJ1Y3QgcHRfcmVncyAqcmVncykgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSBpbnQgZGVidWdnZXJfYnB0KHN0cnVjdCBwdF9yZWdzICpyZWdzKSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIGludCBkZWJ1Z2dlcl9zc3RlcChzdHJ1Y3QgcHRfcmVncyAqcmVncykgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSBpbnQgZGVidWdnZXJfaWFicl9tYXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncykgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSBpbnQgZGVidWdnZXJfZGFicl9tYXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncykgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSBpbnQgZGVidWdnZXJfZmF1bHRfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncykgeyByZXR1cm4gMDsgfQorI2VuZGlmCisKK2V4dGVybiBpbnQgZml4X2FsaWdubWVudChzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitleHRlcm4gdm9pZCBiYWRfcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAorCQkJICAgaW50IHNpZyk7CitleHRlcm4gdm9pZCBzaG93X3JlZ3Moc3RydWN0IHB0X3JlZ3MgKiByZWdzKTsKK2V4dGVybiB2b2lkIGxvd19oYXNoX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpOworZXh0ZXJuIGludCBkaWUoY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgbG9uZyBlcnIpOworCitleHRlcm4gaW50IF9nZXRfUFZSKHZvaWQpOworZXh0ZXJuIHZvaWQgZ2l2ZXVwX2ZwdShzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CitleHRlcm4gdm9pZCBkaXNhYmxlX2tlcm5lbF9mcCh2b2lkKTsKK2V4dGVybiB2b2lkIGZsdXNoX2ZwX3RvX3RocmVhZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CitleHRlcm4gdm9pZCBlbmFibGVfa2VybmVsX2ZwKHZvaWQpOworZXh0ZXJuIHZvaWQgZ2l2ZXVwX2FsdGl2ZWMoc3RydWN0IHRhc2tfc3RydWN0ICopOworZXh0ZXJuIHZvaWQgZGlzYWJsZV9rZXJuZWxfYWx0aXZlYyh2b2lkKTsKK2V4dGVybiB2b2lkIGVuYWJsZV9rZXJuZWxfYWx0aXZlYyh2b2lkKTsKK2V4dGVybiBpbnQgZW11bGF0ZV9hbHRpdmVjKHN0cnVjdCBwdF9yZWdzICopOworZXh0ZXJuIHZvaWQgY3Z0X2ZkKGZsb2F0ICpmcm9tLCBkb3VibGUgKnRvLCB1bnNpZ25lZCBsb25nICpmcHNjcik7CitleHRlcm4gdm9pZCBjdnRfZGYoZG91YmxlICpmcm9tLCBmbG9hdCAqdG8sIHVuc2lnbmVkIGxvbmcgKmZwc2NyKTsKKworI2lmZGVmIENPTkZJR19BTFRJVkVDCitleHRlcm4gdm9pZCBmbHVzaF9hbHRpdmVjX3RvX3RocmVhZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2FsdGl2ZWNfdG9fdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCkKK3sKK30KKyNlbmRpZgorCitleHRlcm4gaW50IG1lbV9pbml0X2RvbmU7CS8qIHNldCBvbiBib290IG9uY2Uga21hbGxvYyBjYW4gYmUgY2FsbGVkICovCisKKy8qIEVCQ0RJQyAtPiBBU0NJSSBjb252ZXJzaW9uIGZvciBbMC05QS1aXSBvbiBpU2VyaWVzICovCitleHRlcm4gdW5zaWduZWQgY2hhciBlMmEodW5zaWduZWQgY2hhcik7CisKK2V4dGVybiBzdHJ1Y3QgdGFza19zdHJ1Y3QgKl9fc3dpdGNoX3RvKHN0cnVjdCB0YXNrX3N0cnVjdCAqLAorCQkJCSAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CisjZGVmaW5lIHN3aXRjaF90byhwcmV2LCBuZXh0LCBsYXN0KQkoKGxhc3QpID0gX19zd2l0Y2hfdG8oKHByZXYpLCAobmV4dCkpKQorCitzdHJ1Y3QgdGhyZWFkX3N0cnVjdDsKK2V4dGVybiBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBfc3dpdGNoKHN0cnVjdCB0aHJlYWRfc3RydWN0ICpwcmV2LAorCQkJCSAgICBzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqbmV4dCk7CisKK3N0YXRpYyBpbmxpbmUgaW50IF9faXNfcHJvY2Vzc29yKHVuc2lnbmVkIGxvbmcgcHYpCit7CisJdW5zaWduZWQgbG9uZyBwdnI7CisJYXNtKCJtZnNwciAlMCwgMHgxMUYiIDogIj1yIiAocHZyKSk7IAorCXJldHVybihQVlJfVkVSKHB2cikgPT0gcHYpOworfQorCisvKgorICogQXRvbWljIGV4Y2hhbmdlCisgKgorICogQ2hhbmdlcyB0aGUgbWVtb3J5IGxvY2F0aW9uICcqcHRyJyB0byBiZSB2YWwgYW5kIHJldHVybnMKKyAqIHRoZSBwcmV2aW91cyB2YWx1ZSBzdG9yZWQgdGhlcmUuCisgKgorICogSW5saW5lIGFzbSBwdWxsZWQgZnJvbSBhcmNoL3BwYy9rZXJuZWwvbWlzYy5TIHNvIHBwYzY0CisgKiBpcyBtb3JlIGxpa2UgbW9zdCBvZiB0aGUgb3RoZXIgYXJjaGl0ZWN0dXJlcy4KKyAqLworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZworX194Y2hnX3UzMih2b2xhdGlsZSBpbnQgKm0sIHVuc2lnbmVkIGxvbmcgdmFsKQoreworCXVuc2lnbmVkIGxvbmcgZHVtbXk7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwlFSUVJT19PTl9TTVAKKyIxOglsd2FyeCAlMCwwLCUzCQkjIF9feGNoZ191MzJcblwKKwlzdHdjeC4gJTIsMCwlM1xuXAorMjoJYm5lLSAxYiIKKwlJU1lOQ19PTl9TTVAKKyAJOiAiPSZyIiAoZHVtbXkpLCAiPW0iICgqbSkKKwk6ICJyIiAodmFsKSwgInIiIChtKQorCTogImNjIiwgIm1lbW9yeSIpOworCisJcmV0dXJuIChkdW1teSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcKK19feGNoZ191NjQodm9sYXRpbGUgbG9uZyAqbSwgdW5zaWduZWQgbG9uZyB2YWwpCit7CisJdW5zaWduZWQgbG9uZyBkdW1teTsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCUVJRUlPX09OX1NNUAorIjE6CWxkYXJ4ICUwLDAsJTMJCSMgX194Y2hnX3U2NFxuXAorCXN0ZGN4LiAlMiwwLCUzXG5cCisyOglibmUtIDFiIgorCUlTWU5DX09OX1NNUAorCTogIj0mciIgKGR1bW15KSwgIj1tIiAoKm0pCisJOiAiciIgKHZhbCksICJyIiAobSkKKwk6ICJjYyIsICJtZW1vcnkiKTsKKworCXJldHVybiAoZHVtbXkpOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGV4aXN0LCBzbyB5b3UnbGwgZ2V0IGEgbGlua2VyIGVycm9yCisgKiBpZiBzb21ldGhpbmcgdHJpZXMgdG8gZG8gYW4gaW52YWxpZCB4Y2hnKCkuCisgKi8KK2V4dGVybiB2b2lkIF9feGNoZ19jYWxsZWRfd2l0aF9iYWRfcG9pbnRlcih2b2lkKTsKKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZworX194Y2hnKHZvbGF0aWxlIHZvaWQgKnB0ciwgdW5zaWduZWQgbG9uZyB4LCBpbnQgc2l6ZSkKK3sKKwlzd2l0Y2ggKHNpemUpIHsKKwljYXNlIDQ6CisJCXJldHVybiBfX3hjaGdfdTMyKHB0ciwgeCk7CisJY2FzZSA4OgorCQlyZXR1cm4gX194Y2hnX3U2NChwdHIsIHgpOworCX0KKwlfX3hjaGdfY2FsbGVkX3dpdGhfYmFkX3BvaW50ZXIoKTsKKwlyZXR1cm4geDsKK30KKworI2RlZmluZSB4Y2hnKHB0cix4KQkJCQkJCQkgICAgIFwKKyAgKHsJCQkJCQkJCQkgICAgIFwKKyAgICAgX190eXBlb2ZfXygqKHB0cikpIF94XyA9ICh4KTsJCQkJCSAgICAgXAorICAgICAoX190eXBlb2ZfXygqKHB0cikpKSBfX3hjaGcoKHB0ciksICh1bnNpZ25lZCBsb25nKV94Xywgc2l6ZW9mKCoocHRyKSkpOyBcCisgIH0pCisKKyNkZWZpbmUgdGFzKHB0cikgKHhjaGcoKHB0ciksMSkpCisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfQ01QWENIRwkxCisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcKK19fY21weGNoZ191MzIodm9sYXRpbGUgaW50ICpwLCBpbnQgb2xkLCBpbnQgbmV3KQoreworCXVuc2lnbmVkIGludCBwcmV2OworCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCUVJRUlPX09OX1NNUAorIjE6CWx3YXJ4CSUwLDAsJTIJCSMgX19jbXB4Y2hnX3UzMlxuXAorCWNtcHcJMCwlMCwlM1xuXAorCWJuZS0JMmZcblwKKwlzdHdjeC4JJTQsMCwlMlxuXAorCWJuZS0JMWIiCisJSVNZTkNfT05fU01QCisJIlxuXAorMjoiCisJOiAiPSZyIiAocHJldiksICI9bSIgKCpwKQorCTogInIiIChwKSwgInIiIChvbGQpLCAiciIgKG5ldyksICJtIiAoKnApCisJOiAiY2MiLCAibWVtb3J5Iik7CisKKwlyZXR1cm4gcHJldjsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZworX19jbXB4Y2hnX3U2NCh2b2xhdGlsZSBsb25nICpwLCB1bnNpZ25lZCBsb25nIG9sZCwgdW5zaWduZWQgbG9uZyBuZXcpCit7CisJdW5zaWduZWQgbG9uZyBwcmV2OworCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCUVJRUlPX09OX1NNUAorIjE6CWxkYXJ4CSUwLDAsJTIJCSMgX19jbXB4Y2hnX3U2NFxuXAorCWNtcGQJMCwlMCwlM1xuXAorCWJuZS0JMmZcblwKKwlzdGRjeC4JJTQsMCwlMlxuXAorCWJuZS0JMWIiCisJSVNZTkNfT05fU01QCisJIlxuXAorMjoiCisJOiAiPSZyIiAocHJldiksICI9bSIgKCpwKQorCTogInIiIChwKSwgInIiIChvbGQpLCAiciIgKG5ldyksICJtIiAoKnApCisJOiAiY2MiLCAibWVtb3J5Iik7CisKKwlyZXR1cm4gcHJldjsKK30KKworLyogVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGV4aXN0LCBzbyB5b3UnbGwgZ2V0IGEgbGlua2VyIGVycm9yCisgICBpZiBzb21ldGhpbmcgdHJpZXMgdG8gZG8gYW4gaW52YWxpZCBjbXB4Y2hnKCkuICAqLworZXh0ZXJuIHZvaWQgX19jbXB4Y2hnX2NhbGxlZF93aXRoX2JhZF9wb2ludGVyKHZvaWQpOworCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nCitfX2NtcHhjaGcodm9sYXRpbGUgdm9pZCAqcHRyLCB1bnNpZ25lZCBsb25nIG9sZCwgdW5zaWduZWQgbG9uZyBuZXcsIGludCBzaXplKQoreworCXN3aXRjaCAoc2l6ZSkgeworCWNhc2UgNDoKKwkJcmV0dXJuIF9fY21weGNoZ191MzIocHRyLCBvbGQsIG5ldyk7CisJY2FzZSA4OgorCQlyZXR1cm4gX19jbXB4Y2hnX3U2NChwdHIsIG9sZCwgbmV3KTsKKwl9CisJX19jbXB4Y2hnX2NhbGxlZF93aXRoX2JhZF9wb2ludGVyKCk7CisJcmV0dXJuIG9sZDsKK30KKworI2RlZmluZSBjbXB4Y2hnKHB0cixvLG4pCQkJCQkJIFwKKyAgKHsJCQkJCQkJCQkgXAorICAgICBfX3R5cGVvZl9fKCoocHRyKSkgX29fID0gKG8pOwkJCQkJIFwKKyAgICAgX190eXBlb2ZfXygqKHB0cikpIF9uXyA9IChuKTsJCQkJCSBcCisgICAgIChfX3R5cGVvZl9fKCoocHRyKSkpIF9fY21weGNoZygocHRyKSwgKHVuc2lnbmVkIGxvbmcpX29fLAkJIFwKKwkJCQkgICAgKHVuc2lnbmVkIGxvbmcpX25fLCBzaXplb2YoKihwdHIpKSk7IFwKKyAgfSkKKworLyoKKyAqIFdlIGhhbmRsZSBtb3N0IHVuYWxpZ25lZCBhY2Nlc3NlcyBpbiBoYXJkd2FyZS4gT24gdGhlIG90aGVyIGhhbmQgCisgKiB1bmFsaWduZWQgRE1BIGNhbiBiZSB2ZXJ5IGV4cGVuc2l2ZSBvbiBzb21lIHBwYzY0IElPIGNoaXBzIChpdCBkb2VzCisgKiBwb3dlcnMgb2YgMiB3cml0ZXMgdW50aWwgaXQgcmVhY2hlcyBzdWZmaWNpZW50IGFsaWdubWVudCkuCisgKgorICogQmFzZWQgb24gdGhpcyB3ZSBkaXNhYmxlIHRoZSBJUCBoZWFkZXIgYWxpZ25tZW50IGluIG5ldHdvcmsgZHJpdmVycy4KKyAqLworI2RlZmluZSBORVRfSVBfQUxJR04gICAwCisKKyNkZWZpbmUgYXJjaF9hbGlnbl9zdGFjayh4KSAoeCkKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvc3lzdGVtY2ZnLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9zeXN0ZW1jZmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Yjg2YjUzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvc3lzdGVtY2ZnLmgKQEAgLTAsMCArMSw2NCBAQAorI2lmbmRlZiBfU1lTVEVNQ0ZHX0gKKyNkZWZpbmUgX1NZU1RFTUNGR19ICisKKy8qIAorICogQ29weXJpZ2h0IChDKSAyMDAyIFBldGVyIEJlcmduZXIgPGJlcmduZXJAdm5ldC5pYm0uY29tPiwgSUJNCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisvKiBDaGFuZ2UgQWN0aXZpdHk6CisgKiAyMDAyLzA5LzMwIDogYmVyZ25lciAgOiBDcmVhdGVkCisgKiBFbmQgQ2hhbmdlIEFjdGl2aXR5IAorICovCisKKy8qCisgKiBJZiB0aGUgbWFqb3IgdmVyc2lvbiBjaGFuZ2VzIHdlIGFyZSBpbmNvbXBhdGlibGUuCisgKiBNaW5vciB2ZXJzaW9uIGNoYW5nZXMgYXJlIGEgaGludC4KKyAqLworI2RlZmluZSBTWVNURU1DRkdfTUFKT1IgMQorI2RlZmluZSBTWVNURU1DRkdfTUlOT1IgMQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CisKKyNkZWZpbmUgU1lTQ0FMTF9NQVBfU0laRSAgICAgICgoX19OUl9zeXNjYWxscyArIDMxKSAvIDMyKQorCitzdHJ1Y3Qgc3lzdGVtY2ZnIHsKKwlfX3U4ICBleWVfY2F0Y2hlclsxNl07CQkvKiBFeWVjYXRjaGVyOiBTWVNURU1DRkc6UFBDNjQJMHgwMCAqLworCXN0cnVjdCB7CQkJLyogU3lzdGVtY2ZnIHZlcnNpb24gbnVtYmVycwkgICAgICovCisJCV9fdTMyIG1ham9yOwkJLyogTWFqb3IgbnVtYmVyCQkJMHgxMCAqLworCQlfX3UzMiBtaW5vcjsJCS8qIE1pbm9yIG51bWJlcgkJCTB4MTQgKi8KKwl9IHZlcnNpb247CisKKwlfX3UzMiBwbGF0Zm9ybTsJCQkvKiBQbGF0Zm9ybSBmbGFncwkJMHgxOCAqLworCV9fdTMyIHByb2Nlc3NvcjsJCS8qIFByb2Nlc3NvciB0eXBlCQkweDFDICovCisJX191NjQgcHJvY2Vzc29yQ291bnQ7CQkvKiAjIG9mIHBoeXNpY2FsIHByb2Nlc3NvcnMJMHgyMCAqLworCV9fdTY0IHBoeXNpY2FsTWVtb3J5U2l6ZTsJLyogU2l6ZSBvZiByZWFsIG1lbW9yeShCKQkweDI4ICovCisJX191NjQgdGJfb3JpZ19zdGFtcDsJCS8qIFRpbWViYXNlIGF0IGJvb3QJCTB4MzAgKi8KKwlfX3U2NCB0Yl90aWNrc19wZXJfc2VjOwkJLyogVGltZWJhc2UgdGljcyAvIHNlYwkJMHgzOCAqLworCV9fdTY0IHRiX3RvX3hzOwkJCS8qIEludmVyc2Ugb2YgVEIgdG8gMl4yMAkweDQwICovCisJX191NjQgc3RhbXBfeHNlYzsJCS8qCQkJCTB4NDggKi8KKwlfX3U2NCB0Yl91cGRhdGVfY291bnQ7CQkvKiBUaW1lYmFzZSBhdG9taWNpdHkgY3RyCTB4NTAgKi8KKwlfX3UzMiB0el9taW51dGVzd2VzdDsJCS8qIE1pbnV0ZXMgd2VzdCBvZiBHcmVlbndpY2gJMHg1OCAqLworCV9fdTMyIHR6X2RzdHRpbWU7CQkvKiBUeXBlIG9mIGRzdCBjb3JyZWN0aW9uCTB4NUMgKi8KKwkvKiBuZXh0IGZvdXIgYXJlIG5vIGxvbmdlciB1c2VkIGV4Y2VwdCB0byBiZSBleHBvcnRlZCB0byAvcHJvYyAqLworCV9fdTMyIGRjYWNoZV9zaXplOwkJLyogTDEgZC1jYWNoZSBzaXplCQkweDYwICovCisJX191MzIgZGNhY2hlX2xpbmVfc2l6ZTsJCS8qIEwxIGQtY2FjaGUgbGluZSBzaXplCQkweDY0ICovCisJX191MzIgaWNhY2hlX3NpemU7CQkvKiBMMSBpLWNhY2hlIHNpemUJCTB4NjggKi8KKwlfX3UzMiBpY2FjaGVfbGluZV9zaXplOwkJLyogTDEgaS1jYWNoZSBsaW5lIHNpemUJCTB4NkMgKi8KKyAgIAlfX3UzMiBzeXNjYWxsX21hcF82NFtTWVNDQUxMX01BUF9TSVpFXTsgLyogbWFwIG9mIGF2YWlsYWJsZSBzeXNjYWxscyAweDcwICovCisgICAJX191MzIgc3lzY2FsbF9tYXBfMzJbU1lTQ0FMTF9NQVBfU0laRV07IC8qIG1hcCBvZiBhdmFpbGFibGUgc3lzY2FsbHMgKi8KK307CisKKyNpZmRlZiBfX0tFUk5FTF9fCitleHRlcm4gc3RydWN0IHN5c3RlbWNmZyAqc3lzdGVtY2ZnOworI2VuZGlmCisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworI2VuZGlmIC8qIF9TWVNURU1DRkdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvdGVybWJpdHMuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L3Rlcm1iaXRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFhMmJlZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L3Rlcm1iaXRzLmgKQEAgLTAsMCArMSwxOTMgQEAKKyNpZm5kZWYgX1BQQzY0X1RFUk1CSVRTX0gKKyNkZWZpbmUgX1BQQzY0X1RFUk1CSVRTX0gKKworLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3Bvc2l4X3R5cGVzLmg+CisKK3R5cGVkZWYgdW5zaWduZWQgY2hhcgljY190OwordHlwZWRlZiB1bnNpZ25lZCBpbnQJc3BlZWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50CXRjZmxhZ190OworCisvKgorICogdGVybWlvcyB0eXBlIGFuZCBtYWNybyBkZWZpbml0aW9ucy4gIEJlIGNhcmVmdWwgYWJvdXQgYWRkaW5nIHN0dWZmCisgKiB0byB0aGlzIGZpbGUgc2luY2UgaXQncyB1c2VkIGluIEdOVSBsaWJjIGFuZCB0aGVyZSBhcmUgc3RyaWN0IHJ1bGVzCisgKiBjb25jZXJuaW5nIG5hbWVzcGFjZSBwb2xsdXRpb24uCisgKi8KKworI2RlZmluZSBOQ0NTIDE5CitzdHJ1Y3QgdGVybWlvcyB7CisJdGNmbGFnX3QgY19pZmxhZzsJCS8qIGlucHV0IG1vZGUgZmxhZ3MgKi8KKwl0Y2ZsYWdfdCBjX29mbGFnOwkJLyogb3V0cHV0IG1vZGUgZmxhZ3MgKi8KKwl0Y2ZsYWdfdCBjX2NmbGFnOwkJLyogY29udHJvbCBtb2RlIGZsYWdzICovCisJdGNmbGFnX3QgY19sZmxhZzsJCS8qIGxvY2FsIG1vZGUgZmxhZ3MgKi8KKwljY190IGNfY2NbTkNDU107CQkvKiBjb250cm9sIGNoYXJhY3RlcnMgKi8KKwljY190IGNfbGluZTsJCQkvKiBsaW5lIGRpc2NpcGxpbmUgKD09IGNfY2NbMTldKSAqLworCXNwZWVkX3QgY19pc3BlZWQ7CQkvKiBpbnB1dCBzcGVlZCAqLworCXNwZWVkX3QgY19vc3BlZWQ7CQkvKiBvdXRwdXQgc3BlZWQgKi8KK307CisKKy8qIGNfY2MgY2hhcmFjdGVycyAqLworI2RlZmluZSBWSU5UUiAJICAgICAgICAgMAorI2RlZmluZSBWUVVJVCAJICAgICAgICAgMQorI2RlZmluZSBWRVJBU0UgCSAgICAgICAgIDIKKyNkZWZpbmUgVktJTEwJICAgICAgICAgMworI2RlZmluZSBWRU9GCSAgICAgICAgIDQKKyNkZWZpbmUgVk1JTgkgICAgICAgICA1CisjZGVmaW5lIFZFT0wJICAgICAgICAgNgorI2RlZmluZSBWVElNRQkgICAgICAgICA3CisjZGVmaW5lIFZFT0wyCSAgICAgICAgIDgKKyNkZWZpbmUgVlNXVEMJICAgICAgICAgOQorI2RlZmluZSBWV0VSQVNFIAkxMAorI2RlZmluZSBWUkVQUklOVAkxMQorI2RlZmluZSBWU1VTUCAJCTEyCisjZGVmaW5lIFZTVEFSVAkJMTMKKyNkZWZpbmUgVlNUT1AJCTE0CisjZGVmaW5lIFZMTkVYVAkJMTUKKyNkZWZpbmUgVkRJU0NBUkQJMTYKKworLyogY19pZmxhZyBiaXRzICovCisjZGVmaW5lIElHTkJSSwkwMDAwMDAxCisjZGVmaW5lIEJSS0lOVAkwMDAwMDAyCisjZGVmaW5lIElHTlBBUgkwMDAwMDA0CisjZGVmaW5lIFBBUk1SSwkwMDAwMDEwCisjZGVmaW5lIElOUENLCTAwMDAwMjAKKyNkZWZpbmUgSVNUUklQCTAwMDAwNDAKKyNkZWZpbmUgSU5MQ1IJMDAwMDEwMAorI2RlZmluZSBJR05DUgkwMDAwMjAwCisjZGVmaW5lIElDUk5MCTAwMDA0MDAKKyNkZWZpbmUgSVhPTgkwMDAxMDAwCisjZGVmaW5lIElYT0ZGCTAwMDIwMDAKKyNkZWZpbmUgSVhBTlkJMDAwNDAwMAorI2RlZmluZSBJVUNMQwkwMDEwMDAwCisjZGVmaW5lIElNQVhCRUwJMDAyMDAwMAorI2RlZmluZQlJVVRGOAkwMDQwMDAwCisKKy8qIGNfb2ZsYWcgYml0cyAqLworI2RlZmluZSBPUE9TVAkwMDAwMDAxCisjZGVmaW5lIE9OTENSCTAwMDAwMDIKKyNkZWZpbmUgT0xDVUMJMDAwMDAwNAorCisjZGVmaW5lIE9DUk5MCTAwMDAwMTAKKyNkZWZpbmUgT05PQ1IJMDAwMDAyMAorI2RlZmluZSBPTkxSRVQJMDAwMDA0MAorCisjZGVmaW5lIE9GSUxMCTAwMDAwMTAwCisjZGVmaW5lIE9GREVMCTAwMDAwMjAwCisjZGVmaW5lIE5MRExZCTAwMDAxNDAwCisjZGVmaW5lICAgTkwwCTAwMDAwMDAwCisjZGVmaW5lICAgTkwxCTAwMDAwNDAwCisjZGVmaW5lICAgTkwyCTAwMDAxMDAwCisjZGVmaW5lICAgTkwzCTAwMDAxNDAwCisjZGVmaW5lIFRBQkRMWQkwMDAwNjAwMAorI2RlZmluZSAgIFRBQjAJMDAwMDAwMDAKKyNkZWZpbmUgICBUQUIxCTAwMDAyMDAwCisjZGVmaW5lICAgVEFCMgkwMDAwNDAwMAorI2RlZmluZSAgIFRBQjMJMDAwMDYwMDAKKyNkZWZpbmUgICBYVEFCUwkwMDAwNjAwMAkvKiByZXF1aXJlZCBieSBQT1NJWCB0byA9PSBUQUIzICovCisjZGVmaW5lIENSRExZCTAwMDMwMDAwCisjZGVmaW5lICAgQ1IwCTAwMDAwMDAwCisjZGVmaW5lICAgQ1IxCTAwMDEwMDAwCisjZGVmaW5lICAgQ1IyCTAwMDIwMDAwCisjZGVmaW5lICAgQ1IzCTAwMDMwMDAwCisjZGVmaW5lIEZGRExZCTAwMDQwMDAwCisjZGVmaW5lICAgRkYwCTAwMDAwMDAwCisjZGVmaW5lICAgRkYxCTAwMDQwMDAwCisjZGVmaW5lIEJTRExZCTAwMTAwMDAwCisjZGVmaW5lICAgQlMwCTAwMDAwMDAwCisjZGVmaW5lICAgQlMxCTAwMTAwMDAwCisjZGVmaW5lIFZURExZCTAwMjAwMDAwCisjZGVmaW5lICAgVlQwCTAwMDAwMDAwCisjZGVmaW5lICAgVlQxCTAwMjAwMDAwCisKKy8qIGNfY2ZsYWcgYml0IG1lYW5pbmcgKi8KKyNkZWZpbmUgQ0JBVUQJMDAwMDM3NworI2RlZmluZSAgQjAJMDAwMDAwMAkJLyogaGFuZyB1cCAqLworI2RlZmluZSAgQjUwCTAwMDAwMDEKKyNkZWZpbmUgIEI3NQkwMDAwMDAyCisjZGVmaW5lICBCMTEwCTAwMDAwMDMKKyNkZWZpbmUgIEIxMzQJMDAwMDAwNAorI2RlZmluZSAgQjE1MAkwMDAwMDA1CisjZGVmaW5lICBCMjAwCTAwMDAwMDYKKyNkZWZpbmUgIEIzMDAJMDAwMDAwNworI2RlZmluZSAgQjYwMAkwMDAwMDEwCisjZGVmaW5lICBCMTIwMAkwMDAwMDExCisjZGVmaW5lICBCMTgwMAkwMDAwMDEyCisjZGVmaW5lICBCMjQwMAkwMDAwMDEzCisjZGVmaW5lICBCNDgwMAkwMDAwMDE0CisjZGVmaW5lICBCOTYwMAkwMDAwMDE1CisjZGVmaW5lICBCMTkyMDAJMDAwMDAxNgorI2RlZmluZSAgQjM4NDAwCTAwMDAwMTcKKyNkZWZpbmUgIEVYVEEgICBCMTkyMDAKKyNkZWZpbmUgIEVYVEIgICBCMzg0MDAKKyNkZWZpbmUgIENCQVVERVggMDAwMDAwMAorI2RlZmluZSAgQjU3NjAwICAgMDAwMjAKKyNkZWZpbmUgIEIxMTUyMDAgIDAwMDIxCisjZGVmaW5lICBCMjMwNDAwICAwMDAyMgorI2RlZmluZSAgQjQ2MDgwMCAgMDAwMjMKKyNkZWZpbmUgIEI1MDAwMDAgIDAwMDI0CisjZGVmaW5lICBCNTc2MDAwICAwMDAyNQorI2RlZmluZSAgQjkyMTYwMCAgMDAwMjYKKyNkZWZpbmUgQjEwMDAwMDAgIDAwMDI3CisjZGVmaW5lIEIxMTUyMDAwICAwMDAzMAorI2RlZmluZSBCMTUwMDAwMCAgMDAwMzEKKyNkZWZpbmUgQjIwMDAwMDAgIDAwMDMyCisjZGVmaW5lIEIyNTAwMDAwICAwMDAzMworI2RlZmluZSBCMzAwMDAwMCAgMDAwMzQKKyNkZWZpbmUgQjM1MDAwMDAgIDAwMDM1CisjZGVmaW5lIEI0MDAwMDAwICAwMDAzNgorCisjZGVmaW5lIENTSVpFCTAwMDAxNDAwCisjZGVmaW5lICAgQ1M1CTAwMDAwMDAwCisjZGVmaW5lICAgQ1M2CTAwMDAwNDAwCisjZGVmaW5lICAgQ1M3CTAwMDAxMDAwCisjZGVmaW5lICAgQ1M4CTAwMDAxNDAwCisKKyNkZWZpbmUgQ1NUT1BCCTAwMDAyMDAwCisjZGVmaW5lIENSRUFECTAwMDA0MDAwCisjZGVmaW5lIFBBUkVOQgkwMDAxMDAwMAorI2RlZmluZSBQQVJPREQJMDAwMjAwMDAKKyNkZWZpbmUgSFVQQ0wJMDAwNDAwMDAKKworI2RlZmluZSBDTE9DQUwJMDAxMDAwMDAKKyNkZWZpbmUgQ1JUU0NUUwkgIDAyMDAwMDAwMDAwMAkJLyogZmxvdyBjb250cm9sICovCisKKy8qIGNfbGZsYWcgYml0cyAqLworI2RlZmluZSBJU0lHCTB4MDAwMDAwODAKKyNkZWZpbmUgSUNBTk9OCTB4MDAwMDAxMDAKKyNkZWZpbmUgWENBU0UJMHgwMDAwNDAwMAorI2RlZmluZSBFQ0hPCTB4MDAwMDAwMDgKKyNkZWZpbmUgRUNIT0UJMHgwMDAwMDAwMgorI2RlZmluZSBFQ0hPSwkweDAwMDAwMDA0CisjZGVmaW5lIEVDSE9OTAkweDAwMDAwMDEwCisjZGVmaW5lIE5PRkxTSAkweDgwMDAwMDAwCisjZGVmaW5lIFRPU1RPUAkweDAwNDAwMDAwCisjZGVmaW5lIEVDSE9DVEwJMHgwMDAwMDA0MAorI2RlZmluZSBFQ0hPUFJUCTB4MDAwMDAwMjAKKyNkZWZpbmUgRUNIT0tFCTB4MDAwMDAwMDEKKyNkZWZpbmUgRkxVU0hPCTB4MDA4MDAwMDAKKyNkZWZpbmUgUEVORElOCTB4MjAwMDAwMDAKKyNkZWZpbmUgSUVYVEVOCTB4MDAwMDA0MDAKKworLyogVmFsdWVzIGZvciB0aGUgQUNUSU9OIGFyZ3VtZW50IHRvIGB0Y2Zsb3cnLiAgKi8KKyNkZWZpbmUJVENPT0ZGCQkwCisjZGVmaW5lCVRDT09OCQkxCisjZGVmaW5lCVRDSU9GRgkJMgorI2RlZmluZQlUQ0lPTgkJMworCisvKiBWYWx1ZXMgZm9yIHRoZSBRVUVVRV9TRUxFQ1RPUiBhcmd1bWVudCB0byBgdGNmbHVzaCcuICAqLworI2RlZmluZQlUQ0lGTFVTSAkwCisjZGVmaW5lCVRDT0ZMVVNICTEKKyNkZWZpbmUJVENJT0ZMVVNICTIKKworLyogVmFsdWVzIGZvciB0aGUgT1BUSU9OQUxfQUNUSU9OUyBhcmd1bWVudCB0byBgdGNzZXRhdHRyJy4gICovCisjZGVmaW5lCVRDU0FOT1cJCTAKKyNkZWZpbmUJVENTQURSQUlOCTEKKyNkZWZpbmUJVENTQUZMVVNICTIKKworI2VuZGlmIC8qIF9QUEM2NF9URVJNQklUU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC90ZXJtaW9zLmggYi9pbmNsdWRlL2FzbS1wcGM2NC90ZXJtaW9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJjM2QyOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L3Rlcm1pb3MuaApAQCAtMCwwICsxLDIzNSBAQAorI2lmbmRlZiBfUFBDNjRfVEVSTUlPU19ICisjZGVmaW5lIF9QUEM2NF9URVJNSU9TX0gKKworLyoKKyAqIExpYmVyYWxseSBhZGFwdGVkIGZyb20gYWxwaGEvdGVybWlvcy5oLiAgSW4gcGFydGljdWxhciwgdGhlIGNfY2NbXQorICogZmllbGRzIGhhdmUgYmVlbiByZW9yZGVyZWQgc28gdGhhdCB0ZXJtaW8gJiB0ZXJtaW9zIHNoYXJlIHRoZQorICogY29tbW9uIHN1YnNldCBpbiB0aGUgc2FtZSBvcmRlciAoZm9yIGJyYWluIGRlYWQgcHJvZ3JhbXMgdGhhdCBkb24ndAorICoga25vdyBvciBjYXJlIGFib3V0IHRoZSBkaWZmZXJlbmNlcykuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8YXNtL2lvY3Rscy5oPgorI2luY2x1ZGUgPGFzbS90ZXJtYml0cy5oPgorCitzdHJ1Y3Qgc2d0dHliIHsKKwljaGFyCXNnX2lzcGVlZDsKKwljaGFyCXNnX29zcGVlZDsKKwljaGFyCXNnX2VyYXNlOworCWNoYXIJc2dfa2lsbDsKKwlzaG9ydAlzZ19mbGFnczsKK307CisKK3N0cnVjdCB0Y2hhcnMgeworCWNoYXIJdF9pbnRyYzsKKwljaGFyCXRfcXVpdGM7CisJY2hhcgl0X3N0YXJ0YzsKKwljaGFyCXRfc3RvcGM7CisJY2hhcgl0X2VvZmM7CisJY2hhcgl0X2Jya2M7Cit9OworCitzdHJ1Y3QgbHRjaGFycyB7CisJY2hhcgl0X3N1c3BjOworCWNoYXIJdF9kc3VzcGM7CisJY2hhcgl0X3Jwcm50YzsKKwljaGFyCXRfZmx1c2hjOworCWNoYXIJdF93ZXJhc2M7CisJY2hhcgl0X2xuZXh0YzsKK307CisKK3N0cnVjdCB3aW5zaXplIHsKKwl1bnNpZ25lZCBzaG9ydCB3c19yb3c7CisJdW5zaWduZWQgc2hvcnQgd3NfY29sOworCXVuc2lnbmVkIHNob3J0IHdzX3hwaXhlbDsKKwl1bnNpZ25lZCBzaG9ydCB3c195cGl4ZWw7Cit9OworCisjZGVmaW5lIE5DQyAxMAorc3RydWN0IHRlcm1pbyB7CisJdW5zaWduZWQgc2hvcnQgY19pZmxhZzsJCS8qIGlucHV0IG1vZGUgZmxhZ3MgKi8KKwl1bnNpZ25lZCBzaG9ydCBjX29mbGFnOwkJLyogb3V0cHV0IG1vZGUgZmxhZ3MgKi8KKwl1bnNpZ25lZCBzaG9ydCBjX2NmbGFnOwkJLyogY29udHJvbCBtb2RlIGZsYWdzICovCisJdW5zaWduZWQgc2hvcnQgY19sZmxhZzsJCS8qIGxvY2FsIG1vZGUgZmxhZ3MgKi8KKwl1bnNpZ25lZCBjaGFyIGNfbGluZTsJCS8qIGxpbmUgZGlzY2lwbGluZSAqLworCXVuc2lnbmVkIGNoYXIgY19jY1tOQ0NdOwkvKiBjb250cm9sIGNoYXJhY3RlcnMgKi8KK307CisKKy8qIGNfY2MgY2hhcmFjdGVycyAqLworI2RlZmluZSBfVklOVFIJMAorI2RlZmluZSBfVlFVSVQJMQorI2RlZmluZSBfVkVSQVNFCTIKKyNkZWZpbmUgX1ZLSUxMCTMKKyNkZWZpbmUgX1ZFT0YJNAorI2RlZmluZSBfVk1JTgk1CisjZGVmaW5lIF9WRU9MCTYKKyNkZWZpbmUgX1ZUSU1FCTcKKyNkZWZpbmUgX1ZFT0wyCTgKKyNkZWZpbmUgX1ZTV1RDCTkKKworLyogbGluZSBkaXNjaXBsaW5lcyAqLworI2RlZmluZSBOX1RUWQkJMAorI2RlZmluZSBOX1NMSVAJCTEKKyNkZWZpbmUgTl9NT1VTRQkJMgorI2RlZmluZSBOX1BQUAkJMworI2RlZmluZSBOX1NUUklQCQk0CisjZGVmaW5lIE5fQVgyNQkJNQorI2RlZmluZSBOX1gyNQkJNgkvKiBYLjI1IGFzeW5jICovCisjZGVmaW5lIE5fNlBBQ0sJCTcKKyNkZWZpbmUgTl9NQVNDCQk4CS8qIFJlc2VydmVkIGZvciBNb2JpdGV4IG1vZHVsZSA8a2F6QGNhZmUubmV0PiAqLworI2RlZmluZSBOX1IzOTY0CQk5CS8qIFJlc2VydmVkIGZvciBTaW1hdGljIFIzOTY0IG1vZHVsZSAqLworI2RlZmluZSBOX1BST0ZJQlVTX0ZETAkxMAkvKiBSZXNlcnZlZCBmb3IgUHJvZmlidXMgPERhdmVAbXZoaS5jb20+ICovCisjZGVmaW5lIE5fSVJEQQkJMTEJLyogTGludXggSXJEYSAtIGh0dHA6Ly93d3cuY3MudWl0Lm5vL35kYWdiL2lyZGEvaXJkYS5odG1sICovCisjZGVmaW5lIE5fU01TQkxPQ0sJMTIJLyogU01TIGJsb2NrIG1vZGUgLSBmb3IgdGFsa2luZyB0byBHU00gZGF0YSBjYXJkcyBhYm91dCBTTVMgbWVzc2FnZXMgKi8KKyNkZWZpbmUgTl9IRExDCQkxMwkvKiBzeW5jaHJvbm91cyBIRExDICovCisjZGVmaW5lIE5fU1lOQ19QUFAJMTQKKworI2lmZGVmIF9fS0VSTkVMX18KKy8qICAgICAgICAgICAgICAgICAgIF5DICBeXCBkZWwgIF5VICBeRCAgIDEgICAwICAgMCAgIDAgICAwICBeVyAgXlIgIF5aICBeUSAgXlMgIF5WICBeVSAgKi8KKyNkZWZpbmUgSU5JVF9DX0NDICJcMDAzXDAzNFwxNzdcMDI1XDAwNFwwMDFcMDAwXDAwMFwwMDBcMDAwXDAyN1wwMjJcMDMyXDAyMVwwMjNcMDI2XDAyNSIgCisjZW5kaWYKKworI2RlZmluZSBGSU9DTEVYCQlfSU8oJ2YnLCAxKQorI2RlZmluZSBGSU9OQ0xFWAlfSU8oJ2YnLCAyKQorI2RlZmluZSBGSU9BU1lOQwlfSU9XKCdmJywgMTI1LCBpbnQpCisjZGVmaW5lIEZJT05CSU8JCV9JT1coJ2YnLCAxMjYsIGludCkKKyNkZWZpbmUgRklPTlJFQUQJX0lPUignZicsIDEyNywgaW50KQorI2RlZmluZSBUSU9DSU5RCQlGSU9OUkVBRAorCisjZGVmaW5lIFRJT0NHRVRQCV9JT1IoJ3QnLCA4LCBzdHJ1Y3Qgc2d0dHliKQorI2RlZmluZSBUSU9DU0VUUAlfSU9XKCd0JywgOSwgc3RydWN0IHNndHR5YikKKyNkZWZpbmUgVElPQ1NFVE4JX0lPVygndCcsIDEwLCBzdHJ1Y3Qgc2d0dHliKQkvKiBUSU9DU0VUUCB3byBmbHVzaCAqLworCisjZGVmaW5lIFRJT0NTRVRDCV9JT1coJ3QnLCAxNywgc3RydWN0IHRjaGFycykKKyNkZWZpbmUgVElPQ0dFVEMJX0lPUigndCcsIDE4LCBzdHJ1Y3QgdGNoYXJzKQorI2RlZmluZSBUQ0dFVFMJCV9JT1IoJ3QnLCAxOSwgc3RydWN0IHRlcm1pb3MpCisjZGVmaW5lIFRDU0VUUwkJX0lPVygndCcsIDIwLCBzdHJ1Y3QgdGVybWlvcykKKyNkZWZpbmUgVENTRVRTVwkJX0lPVygndCcsIDIxLCBzdHJ1Y3QgdGVybWlvcykKKyNkZWZpbmUgVENTRVRTRgkJX0lPVygndCcsIDIyLCBzdHJ1Y3QgdGVybWlvcykKKworI2RlZmluZSBUQ0dFVEEJCV9JT1IoJ3QnLCAyMywgc3RydWN0IHRlcm1pbykKKyNkZWZpbmUgVENTRVRBCQlfSU9XKCd0JywgMjQsIHN0cnVjdCB0ZXJtaW8pCisjZGVmaW5lIFRDU0VUQVcJCV9JT1coJ3QnLCAyNSwgc3RydWN0IHRlcm1pbykKKyNkZWZpbmUgVENTRVRBRgkJX0lPVygndCcsIDI4LCBzdHJ1Y3QgdGVybWlvKQorCisjZGVmaW5lIFRDU0JSSwkJX0lPKCd0JywgMjkpCisjZGVmaW5lIFRDWE9OQwkJX0lPKCd0JywgMzApCisjZGVmaW5lIFRDRkxTSAkJX0lPKCd0JywgMzEpCisKKyNkZWZpbmUgVElPQ1NXSU5TWglfSU9XKCd0JywgMTAzLCBzdHJ1Y3Qgd2luc2l6ZSkKKyNkZWZpbmUgVElPQ0dXSU5TWglfSU9SKCd0JywgMTA0LCBzdHJ1Y3Qgd2luc2l6ZSkKKyNkZWZpbmUJVElPQ1NUQVJUCV9JTygndCcsIDExMCkJCS8qIHN0YXJ0IG91dHB1dCwgbGlrZSBeUSAqLworI2RlZmluZQlUSU9DU1RPUAlfSU8oJ3QnLCAxMTEpCQkvKiBzdG9wIG91dHB1dCwgbGlrZSBeUyAqLworI2RlZmluZSBUSU9DT1VUUSAgICAgICAgX0lPUigndCcsIDExNSwgaW50KSAgICAgLyogb3V0cHV0IHF1ZXVlIHNpemUgKi8KKworI2RlZmluZSBUSU9DR0xUQwlfSU9SKCd0JywgMTE2LCBzdHJ1Y3QgbHRjaGFycykKKyNkZWZpbmUgVElPQ1NMVEMJX0lPVygndCcsIDExNywgc3RydWN0IGx0Y2hhcnMpCisjZGVmaW5lIFRJT0NTUEdSUAlfSU9XKCd0JywgMTE4LCBpbnQpCisjZGVmaW5lIFRJT0NHUEdSUAlfSU9SKCd0JywgMTE5LCBpbnQpCisKKyNkZWZpbmUgVElPQ0VYQ0wJMHg1NDBDCisjZGVmaW5lIFRJT0NOWENMCTB4NTQwRAorI2RlZmluZSBUSU9DU0NUVFkJMHg1NDBFCisKKyNkZWZpbmUgVElPQ1NUSQkJMHg1NDEyCisjZGVmaW5lIFRJT0NNR0VUCTB4NTQxNQorI2RlZmluZSBUSU9DTUJJUwkweDU0MTYKKyNkZWZpbmUgVElPQ01CSUMJMHg1NDE3CisjZGVmaW5lIFRJT0NNU0VUCTB4NTQxOAorI2RlZmluZSBUSU9DR1NPRlRDQVIJMHg1NDE5CisjZGVmaW5lIFRJT0NTU09GVENBUgkweDU0MUEKKyNkZWZpbmUgVElPQ0xJTlVYCTB4NTQxQworI2RlZmluZSBUSU9DQ09OUwkweDU0MUQKKyNkZWZpbmUgVElPQ0dTRVJJQUwJMHg1NDFFCisjZGVmaW5lIFRJT0NTU0VSSUFMCTB4NTQxRgorI2RlZmluZSBUSU9DUEtUCQkweDU0MjAKKworI2RlZmluZSBUSU9DTk9UVFkJMHg1NDIyCisjZGVmaW5lIFRJT0NTRVRECTB4NTQyMworI2RlZmluZSBUSU9DR0VURAkweDU0MjQKKyNkZWZpbmUgVENTQlJLUAkJMHg1NDI1CS8qIE5lZWRlZCBmb3IgUE9TSVggdGNzZW5kYnJlYWsoKSAqLworCisjZGVmaW5lIFRJT0NTRVJDT05GSUcJMHg1NDUzCisjZGVmaW5lIFRJT0NTRVJHV0lMRAkweDU0NTQKKyNkZWZpbmUgVElPQ1NFUlNXSUxECTB4NTQ1NQorI2RlZmluZSBUSU9DR0xDS1RSTUlPUwkweDU0NTYKKyNkZWZpbmUgVElPQ1NMQ0tUUk1JT1MJMHg1NDU3CisjZGVmaW5lIFRJT0NTRVJHU1RSVUNUCTB4NTQ1OCAvKiBGb3IgZGVidWdnaW5nIG9ubHkgKi8KKyNkZWZpbmUgVElPQ1NFUkdFVExTUiAgIDB4NTQ1OSAvKiBHZXQgbGluZSBzdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgVElPQ1NFUkdFVE1VTFRJIDB4NTQ1QSAvKiBHZXQgbXVsdGlwb3J0IGNvbmZpZyAgKi8KKyNkZWZpbmUgVElPQ1NFUlNFVE1VTFRJIDB4NTQ1QiAvKiBTZXQgbXVsdGlwb3J0IGNvbmZpZyAqLworCisjZGVmaW5lIFRJT0NNSVdBSVQJMHg1NDVDCS8qIHdhaXQgZm9yIGEgY2hhbmdlIG9uIHNlcmlhbCBpbnB1dCBsaW5lKHMpICovCisjZGVmaW5lIFRJT0NHSUNPVU5UCTB4NTQ1RAkvKiByZWFkIHNlcmlhbCBwb3J0IGlubGluZSBpbnRlcnJ1cHQgY291bnRzICovCisKKy8qIFVzZWQgZm9yIHBhY2tldCBtb2RlICovCisjZGVmaW5lIFRJT0NQS1RfREFUQQkJIDAKKyNkZWZpbmUgVElPQ1BLVF9GTFVTSFJFQUQJIDEKKyNkZWZpbmUgVElPQ1BLVF9GTFVTSFdSSVRFCSAyCisjZGVmaW5lIFRJT0NQS1RfU1RPUAkJIDQKKyNkZWZpbmUgVElPQ1BLVF9TVEFSVAkJIDgKKyNkZWZpbmUgVElPQ1BLVF9OT1NUT1AJCTE2CisjZGVmaW5lIFRJT0NQS1RfRE9TVE9QCQkzMgorCisvKiBtb2RlbSBsaW5lcyAqLworI2RlZmluZSBUSU9DTV9MRQkweDAwMQorI2RlZmluZSBUSU9DTV9EVFIJMHgwMDIKKyNkZWZpbmUgVElPQ01fUlRTCTB4MDA0CisjZGVmaW5lIFRJT0NNX1NUCTB4MDA4CisjZGVmaW5lIFRJT0NNX1NSCTB4MDEwCisjZGVmaW5lIFRJT0NNX0NUUwkweDAyMAorI2RlZmluZSBUSU9DTV9DQVIJMHgwNDAKKyNkZWZpbmUgVElPQ01fUk5HCTB4MDgwCisjZGVmaW5lIFRJT0NNX0RTUgkweDEwMAorI2RlZmluZSBUSU9DTV9DRAlUSU9DTV9DQVIKKyNkZWZpbmUgVElPQ01fUkkJVElPQ01fUk5HCisjZGVmaW5lIFRJT0NNX09VVDEJMHgyMDAwCisjZGVmaW5lIFRJT0NNX09VVDIJMHg0MDAwCisjZGVmaW5lIFRJT0NNX0xPT1AJMHg4MDAwCisKKy8qIGlvY3RsIChmZCwgVElPQ1NFUkdFVExTUiwgJnJlc3VsdCkgd2hlcmUgcmVzdWx0IG1heSBiZSBhcyBiZWxvdyAqLworI2RlZmluZSBUSU9DU0VSX1RFTVQgICAgMHgwMQkvKiBUcmFuc21pdHRlciBwaHlzaWNhbGx5IGVtcHR5ICovCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKy8qCisgKiBUcmFuc2xhdGUgYSAidGVybWlvIiBzdHJ1Y3R1cmUgaW50byBhICJ0ZXJtaW9zIi4gVWdoLgorICovCisjZGVmaW5lIFNFVF9MT1dfVEVSTUlPU19CSVRTKHRlcm1pb3MsIHRlcm1pbywgeCkgeyBcCisJdW5zaWduZWQgc2hvcnQgX190bXA7IFwKKwlnZXRfdXNlcihfX3RtcCwmKHRlcm1pbyktPngpOyBcCisJKHRlcm1pb3MpLT54ID0gKDB4ZmZmZjAwMDAgJiAodGVybWlvcyktPngpIHwgX190bXA7IFwKK30KKworI2RlZmluZSB1c2VyX3Rlcm1pb190b19rZXJuZWxfdGVybWlvcyh0ZXJtaW9zLCB0ZXJtaW8pIFwKKyh7IFwKKwlTRVRfTE9XX1RFUk1JT1NfQklUUyh0ZXJtaW9zLCB0ZXJtaW8sIGNfaWZsYWcpOyBcCisJU0VUX0xPV19URVJNSU9TX0JJVFModGVybWlvcywgdGVybWlvLCBjX29mbGFnKTsgXAorCVNFVF9MT1dfVEVSTUlPU19CSVRTKHRlcm1pb3MsIHRlcm1pbywgY19jZmxhZyk7IFwKKwlTRVRfTE9XX1RFUk1JT1NfQklUUyh0ZXJtaW9zLCB0ZXJtaW8sIGNfbGZsYWcpOyBcCisJY29weV9mcm9tX3VzZXIoKHRlcm1pb3MpLT5jX2NjLCAodGVybWlvKS0+Y19jYywgTkNDKTsgXAorfSkKKworLyoKKyAqIFRyYW5zbGF0ZSBhICJ0ZXJtaW9zIiBzdHJ1Y3R1cmUgaW50byBhICJ0ZXJtaW8iLiBVZ2guCisgKi8KKyNkZWZpbmUga2VybmVsX3Rlcm1pb3NfdG9fdXNlcl90ZXJtaW8odGVybWlvLCB0ZXJtaW9zKSBcCisoeyBcCisJcHV0X3VzZXIoKHRlcm1pb3MpLT5jX2lmbGFnLCAmKHRlcm1pbyktPmNfaWZsYWcpOyBcCisJcHV0X3VzZXIoKHRlcm1pb3MpLT5jX29mbGFnLCAmKHRlcm1pbyktPmNfb2ZsYWcpOyBcCisJcHV0X3VzZXIoKHRlcm1pb3MpLT5jX2NmbGFnLCAmKHRlcm1pbyktPmNfY2ZsYWcpOyBcCisJcHV0X3VzZXIoKHRlcm1pb3MpLT5jX2xmbGFnLCAmKHRlcm1pbyktPmNfbGZsYWcpOyBcCisJcHV0X3VzZXIoKHRlcm1pb3MpLT5jX2xpbmUsICAmKHRlcm1pbyktPmNfbGluZSk7IFwKKwljb3B5X3RvX3VzZXIoKHRlcm1pbyktPmNfY2MsICh0ZXJtaW9zKS0+Y19jYywgTkNDKTsgXAorfSkKKworI2RlZmluZSB1c2VyX3Rlcm1pb3NfdG9fa2VybmVsX3Rlcm1pb3MoaywgdSkgY29weV9mcm9tX3VzZXIoaywgdSwgc2l6ZW9mKHN0cnVjdCB0ZXJtaW9zKSkKKyNkZWZpbmUga2VybmVsX3Rlcm1pb3NfdG9fdXNlcl90ZXJtaW9zKHUsIGspIGNvcHlfdG9fdXNlcih1LCBrLCBzaXplb2Yoc3RydWN0IHRlcm1pb3MpKQorCisjZW5kaWYJLyogX19LRVJORUxfXyAqLworCisjZW5kaWYJLyogX1BQQzY0X1RFUk1JT1NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvdGhyZWFkX2luZm8uaCBiL2luY2x1ZGUvYXNtLXBwYzY0L3RocmVhZF9pbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM3YjVlMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L3RocmVhZF9pbmZvLmgKQEAgLTAsMCArMSwxMjUgQEAKKy8qIHRocmVhZF9pbmZvLmg6IFBQQyBsb3ctbGV2ZWwgdGhyZWFkIGluZm9ybWF0aW9uCisgKiBhZGFwdGVkIGZyb20gdGhlIGkzODYgdmVyc2lvbiBieSBQYXVsIE1hY2tlcnJhcworICoKKyAqIENvcHlyaWdodCAoQykgMjAwMiAgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqIC0gSW5jb3Jwb3JhdGluZyBzdWdnZXN0aW9ucyBtYWRlIGJ5IExpbnVzIFRvcnZhbGRzIGFuZCBEYXZlIE1pbGxlcgorICovCisKKyNpZm5kZWYgX0FTTV9USFJFQURfSU5GT19ICisjZGVmaW5lIF9BU01fVEhSRUFEX0lORk9fSAorCisjaWZkZWYgX19LRVJORUxfXworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5naWZ5Lmg+CisKKy8qCisgKiBsb3cgbGV2ZWwgdGFzayBkYXRhLgorICovCitzdHJ1Y3QgdGhyZWFkX2luZm8geworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsJCS8qIG1haW4gdGFzayBzdHJ1Y3R1cmUgKi8KKwlzdHJ1Y3QgZXhlY19kb21haW4gKmV4ZWNfZG9tYWluOwkvKiBleGVjdXRpb24gZG9tYWluICovCisJaW50CQljcHU7CQkJLyogY3B1IHdlJ3JlIG9uICovCisJaW50CQlwcmVlbXB0X2NvdW50OworCXN0cnVjdCByZXN0YXJ0X2Jsb2NrIHJlc3RhcnRfYmxvY2s7CisJLyogc2V0IGJ5IGZvcmNlX3N1Y2Nlc3NmdWxfc3lzY2FsbF9yZXR1cm4gKi8KKwl1bnNpZ25lZCBjaGFyCXN5c2NhbGxfbm9lcnJvcjsKKwkvKiBsb3cgbGV2ZWwgZmxhZ3MgLSBoYXMgYXRvbWljIG9wZXJhdGlvbnMgZG9uZSBvbiBpdCAqLworCXVuc2lnbmVkIGxvbmcJZmxhZ3MgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKK307CisKKy8qCisgKiBtYWNyb3MvZnVuY3Rpb25zIGZvciBnYWluaW5nIGFjY2VzcyB0byB0aGUgdGhyZWFkIGluZm9ybWF0aW9uIHN0cnVjdHVyZQorICoKKyAqIHByZWVtcHRfY291bnQgbmVlZHMgdG8gYmUgMSBpbml0aWFsbHksIHVudGlsIHRoZSBzY2hlZHVsZXIgaXMgZnVuY3Rpb25hbC4KKyAqLworI2RlZmluZSBJTklUX1RIUkVBRF9JTkZPKHRzaykJCQlcCit7CQkJCQkJXAorCS50YXNrID0JCSZ0c2ssCQkJXAorCS5leGVjX2RvbWFpbiA9CSZkZWZhdWx0X2V4ZWNfZG9tYWluLAlcCisJLmNwdSA9CQkwLAkJCVwKKwkucHJlZW1wdF9jb3VudCA9IDEsCQkJXAorCS5yZXN0YXJ0X2Jsb2NrID0gewkJCVwKKwkJLmZuID0gZG9fbm9fcmVzdGFydF9zeXNjYWxsLAlcCisJfSwJCQkJCVwKKwkuZmxhZ3MgPQkwLAkJCVwKK30KKworI2RlZmluZSBpbml0X3RocmVhZF9pbmZvCShpbml0X3RocmVhZF91bmlvbi50aHJlYWRfaW5mbykKKyNkZWZpbmUgaW5pdF9zdGFjawkJKGluaXRfdGhyZWFkX3VuaW9uLnN0YWNrKQorCisvKiB0aHJlYWQgaW5mb3JtYXRpb24gYWxsb2NhdGlvbiAqLworCisjZGVmaW5lIFRIUkVBRF9PUkRFUgkJMgorI2RlZmluZSBUSFJFQURfU0laRQkJKFBBR0VfU0laRSA8PCBUSFJFQURfT1JERVIpCisjZGVmaW5lIFRIUkVBRF9TSElGVAkJKFBBR0VfU0hJRlQgKyBUSFJFQURfT1JERVIpCisjaWZkZWYgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFCisjZGVmaW5lIGFsbG9jX3RocmVhZF9pbmZvKHRzaykJCQkJCVwKKwkoewkJCQkJCQlcCisJCXN0cnVjdCB0aHJlYWRfaW5mbyAqcmV0OwkJCVwKKwkJCQkJCQkJXAorCQlyZXQgPSBrbWFsbG9jKFRIUkVBRF9TSVpFLCBHRlBfS0VSTkVMKTsJCVwKKwkJaWYgKHJldCkJCQkJCVwKKwkJCW1lbXNldChyZXQsIDAsIFRIUkVBRF9TSVpFKTsJCVwKKwkJcmV0OwkJCQkJCVwKKwl9KQorI2Vsc2UKKyNkZWZpbmUgYWxsb2NfdGhyZWFkX2luZm8odHNrKSBrbWFsbG9jKFRIUkVBRF9TSVpFLCBHRlBfS0VSTkVMKQorI2VuZGlmCisjZGVmaW5lIGZyZWVfdGhyZWFkX2luZm8odGkpCWtmcmVlKHRpKQorI2RlZmluZSBnZXRfdGhyZWFkX2luZm8odGkpCWdldF90YXNrX3N0cnVjdCgodGkpLT50YXNrKQorI2RlZmluZSBwdXRfdGhyZWFkX2luZm8odGkpCXB1dF90YXNrX3N0cnVjdCgodGkpLT50YXNrKQorCisvKiBob3cgdG8gZ2V0IHRoZSB0aHJlYWQgaW5mb3JtYXRpb24gc3RydWN0IGZyb20gQyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgdGhyZWFkX2luZm8gKmN1cnJlbnRfdGhyZWFkX2luZm8odm9pZCkKK3sKKwlzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpOworCV9fYXNtX18oImNscnJkaSAlMCwxLCUxIiA6ICI9ciIodGkpIDogImkiIChUSFJFQURfU0hJRlQpKTsKKwlyZXR1cm4gdGk7Cit9CisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworI2RlZmluZSBQUkVFTVBUX0FDVElWRQkJMHgxMDAwMDAwMAorCisvKgorICogdGhyZWFkIGluZm9ybWF0aW9uIGZsYWcgYml0IG51bWJlcnMKKyAqLworI2RlZmluZSBUSUZfU1lTQ0FMTF9UUkFDRQkwCS8qIHN5c2NhbGwgdHJhY2UgYWN0aXZlICovCisjZGVmaW5lIFRJRl9OT1RJRllfUkVTVU1FCTEJLyogcmVzdW1wdGlvbiBub3RpZmljYXRpb24gcmVxdWVzdGVkICovCisjZGVmaW5lIFRJRl9TSUdQRU5ESU5HCQkyCS8qIHNpZ25hbCBwZW5kaW5nICovCisjZGVmaW5lIFRJRl9ORUVEX1JFU0NIRUQJMwkvKiByZXNjaGVkdWxpbmcgbmVjZXNzYXJ5ICovCisjZGVmaW5lIFRJRl9QT0xMSU5HX05SRkxBRwk0CS8qIHRydWUgaWYgcG9sbF9pZGxlKCkgaXMgcG9sbGluZworCQkJCQkgICBUSUZfTkVFRF9SRVNDSEVEICovCisjZGVmaW5lIFRJRl8zMkJJVAkJNQkvKiAzMiBiaXQgYmluYXJ5ICovCisjZGVmaW5lIFRJRl9SVU5fTElHSFQJCTYJLyogaVNlcmllcyBydW4gbGlnaHQgKi8KKyNkZWZpbmUgVElGX0FCSV9QRU5ESU5HCQk3CS8qIDMyLzY0IGJpdCBzd2l0Y2ggbmVlZGVkICovCisjZGVmaW5lIFRJRl9TWVNDQUxMX0FVRElUCTgJLyogc3lzY2FsbCBhdWRpdGluZyBhY3RpdmUgKi8KKyNkZWZpbmUgVElGX1NJTkdMRVNURVAJCTkJLyogc2luZ2xlc3RlcHBpbmcgYWN0aXZlICovCisjZGVmaW5lIFRJRl9NRU1ESUUJCTEwCisjZGVmaW5lIFRJRl9TRUNDT01QCQkxMQkvKiBzZWN1cmUgY29tcHV0aW5nICovCisKKy8qIGFzIGFib3ZlLCBidXQgYXMgYml0IHZhbHVlcyAqLworI2RlZmluZSBfVElGX1NZU0NBTExfVFJBQ0UJKDE8PFRJRl9TWVNDQUxMX1RSQUNFKQorI2RlZmluZSBfVElGX05PVElGWV9SRVNVTUUJKDE8PFRJRl9OT1RJRllfUkVTVU1FKQorI2RlZmluZSBfVElGX1NJR1BFTkRJTkcJCSgxPDxUSUZfU0lHUEVORElORykKKyNkZWZpbmUgX1RJRl9ORUVEX1JFU0NIRUQJKDE8PFRJRl9ORUVEX1JFU0NIRUQpCisjZGVmaW5lIF9USUZfUE9MTElOR19OUkZMQUcJKDE8PFRJRl9QT0xMSU5HX05SRkxBRykKKyNkZWZpbmUgX1RJRl8zMkJJVAkJKDE8PFRJRl8zMkJJVCkKKyNkZWZpbmUgX1RJRl9SVU5fTElHSFQJCSgxPDxUSUZfUlVOX0xJR0hUKQorI2RlZmluZSBfVElGX0FCSV9QRU5ESU5HCSgxPDxUSUZfQUJJX1BFTkRJTkcpCisjZGVmaW5lIF9USUZfU1lTQ0FMTF9BVURJVAkoMTw8VElGX1NZU0NBTExfQVVESVQpCisjZGVmaW5lIF9USUZfU0lOR0xFU1RFUAkJKDE8PFRJRl9TSU5HTEVTVEVQKQorI2RlZmluZSBfVElGX1NFQ0NPTVAJCSgxPDxUSUZfU0VDQ09NUCkKKyNkZWZpbmUgX1RJRl9TWVNDQUxMX1RfT1JfQQkoX1RJRl9TWVNDQUxMX1RSQUNFfF9USUZfU1lTQ0FMTF9BVURJVHxfVElGX1NFQ0NPTVApCisKKyNkZWZpbmUgX1RJRl9VU0VSX1dPUktfTUFTSwkoX1RJRl9OT1RJRllfUkVTVU1FIHwgX1RJRl9TSUdQRU5ESU5HIHwgXAorCQkJCSBfVElGX05FRURfUkVTQ0hFRCkKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9BU01fVEhSRUFEX0lORk9fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvdGltZS5oIGIvaW5jbHVkZS9hc20tcHBjNjQvdGltZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkNmUzNzYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC90aW1lLmgKQEAgLTAsMCArMSwxMTUgQEAKKy8qCisgKiBDb21tb24gdGltZSBwcm90b3R5cGVzIGFuZCBzdWNoIGZvciBhbGwgcHBjIG1hY2hpbmVzLgorICoKKyAqIFdyaXR0ZW4gYnkgQ29ydCBEb3VnYW4gKGNvcnRAY3Mubm10LmVkdSkgdG8gbWVyZ2UKKyAqIFBhdWwgTWFja2VycmFzJyB2ZXJzaW9uIGFuZCBtaW5lIGZvciBQUmVQIGFuZCBQbWFjLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfX1BQQzY0X1RJTUVfSAorI2RlZmluZSBfX1BQQzY0X1RJTUVfSAorCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbWMxNDY4MThydGMuaD4KKworI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vcGFjYS5oPgorI2luY2x1ZGUgPGFzbS9pU2VyaWVzL0h2Q2FsbC5oPgorCisvKiB0aW1lLmMgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIHRiX3RpY2tzX3Blcl9qaWZmeTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHRiX3RpY2tzX3Blcl91c2VjOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdGJfdGlja3NfcGVyX3NlYzsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHRiX3RvX3hzOworZXh0ZXJuIHVuc2lnbmVkICAgICAgdGJfdG9fdXM7CitleHRlcm4gdW5zaWduZWQgbG9uZyB0Yl9sYXN0X3N0YW1wOworCitzdHJ1Y3QgcnRjX3RpbWU7CitleHRlcm4gdm9pZCB0b190bShpbnQgdGltLCBzdHJ1Y3QgcnRjX3RpbWUgKiB0bSk7CitleHRlcm4gdGltZV90IGxhc3RfcnRjX3VwZGF0ZTsKKworLyoKKyAqIEJ5IHB1dHRpbmcgYWxsIG9mIHRoaXMgc3R1ZmYgaW50byBhIHNpbmdsZSBzdHJ1Y3Qgd2UgCisgKiByZWR1Y2UgdGhlIG51bWJlciBvZiBjYWNoZSBsaW5lcyB0b3VjaGVkIGJ5IGRvX2dldHRpbWVvZmRheS4KKyAqIEJvdGggYnkgY29sbGVjdGluZyBhbGwgb2YgdGhlIGRhdGEgaW4gb25lIGNhY2hlIGxpbmUgYW5kCisgKiBieSB0b3VjaGluZyBvbmx5IG9uZSBUT0MgZW50cnkKKyAqLworc3RydWN0IGdldHRpbWVvZmRheV92YXJzIHsKKwl1bnNpZ25lZCBsb25nIHRiX3RvX3hzOworCXVuc2lnbmVkIGxvbmcgc3RhbXBfeHNlYzsKKwl1bnNpZ25lZCBsb25nIHRiX29yaWdfc3RhbXA7Cit9OworCitzdHJ1Y3QgZ2V0dGltZW9mZGF5X3N0cnVjdCB7CisJdW5zaWduZWQgbG9uZyB0Yl90aWNrc19wZXJfc2VjOworCXN0cnVjdCBnZXR0aW1lb2ZkYXlfdmFycyB2YXJzWzJdOworCXN0cnVjdCBnZXR0aW1lb2ZkYXlfdmFycyAqIHZvbGF0aWxlIHZhcnA7CisJdW5zaWduZWQgICAgICB2YXJfaWR4OworCXVuc2lnbmVkICAgICAgdGJfdG9fdXM7Cit9OworCitzdHJ1Y3QgZGl2X3Jlc3VsdCB7CisJdW5zaWduZWQgbG9uZyByZXN1bHRfaGlnaDsKKwl1bnNpZ25lZCBsb25nIHJlc3VsdF9sb3c7Cit9OworCitpbnQgdmlhX2NhbGlicmF0ZV9kZWNyKHZvaWQpOworCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGdldF90Yih2b2lkKQoreworCXJldHVybiBtZnRiKCk7Cit9CisKKy8qIEFjY2Vzc29yIGZ1bmN0aW9ucyBmb3IgdGhlIGRlY3JlbWVudGVyIHJlZ2lzdGVyLiAqLworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IGdldF9kZWModm9pZCkKK3sKKwlyZXR1cm4gKG1mc3ByKFNQUk5fREVDKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgc2V0X2RlYyhpbnQgdmFsKQoreworI2lmZGVmIENPTkZJR19QUENfSVNFUklFUworCXN0cnVjdCBwYWNhX3N0cnVjdCAqbHBhY2EgPSBnZXRfcGFjYSgpOworCWludCBjdXJfZGVjOworCisJaWYgKGxwYWNhLT5scHBhY2Euc2hhcmVkX3Byb2MpIHsKKwkJbHBhY2EtPmxwcGFjYS52aXJ0dWFsX2RlY3IgPSB2YWw7CisJCWN1cl9kZWMgPSBnZXRfZGVjKCk7CisJCWlmIChjdXJfZGVjID4gdmFsKQorCQkJSHZDYWxsX3NldFZpcnR1YWxEZWNyKCk7CisJfSBlbHNlCisjZW5kaWYKKwkJbXRzcHIoU1BSTl9ERUMsIHZhbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB0Yl90aWNrc19zaW5jZSh1bnNpZ25lZCBsb25nIHRzdGFtcCkKK3sKKwlyZXR1cm4gZ2V0X3RiKCkgLSB0c3RhbXA7Cit9CisKKyNkZWZpbmUgbXVsaHd1KHgseSkgXAorKHt1bnNpZ25lZCB6OyBhc20gKCJtdWxod3UgJTAsJTEsJTIiIDogIj1yIiAoeikgOiAiciIgKHgpLCAiciIgKHkpKTsgejt9KQorI2RlZmluZSBtdWxoZHUoeCx5KSBcCisoe3Vuc2lnbmVkIGxvbmcgejsgYXNtICgibXVsaGR1ICUwLCUxLCUyIiA6ICI9ciIgKHopIDogInIiICh4KSwgInIiICh5KSk7IHo7fSkKKworCit1bnNpZ25lZCBtdWxod3Vfc2NhbGVfZmFjdG9yKHVuc2lnbmVkLCB1bnNpZ25lZCk7Cit2b2lkIGRpdjEyOF9ieV8zMiggdW5zaWduZWQgbG9uZyBkaXZpZGVuZF9oaWdoLCB1bnNpZ25lZCBsb25nIGRpdmlkZW5kX2xvdywKKwkJICAgdW5zaWduZWQgZGl2aXNvciwgc3RydWN0IGRpdl9yZXN1bHQgKmRyICk7CisKKy8qIFVzZWQgdG8gc3RvcmUgUHJvY2Vzc29yIFV0aWxpemF0aW9uIHJlZ2lzdGVyIChwdXJyKSB2YWx1ZXMgKi8KKworc3RydWN0IGNwdV91c2FnZSB7CisgICAgICAgIHU2NCBjdXJyZW50X3RiOyAgLyogSG9sZHMgdGhlIGN1cnJlbnQgcHVyciByZWdpc3RlciB2YWx1ZXMgKi8KK307CisKK0RFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgY3B1X3VzYWdlLCBjcHVfdXNhZ2VfYXJyYXkpOworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9fUFBDNjRfVElNRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC90aW1leC5oIGIvaW5jbHVkZS9hc20tcHBjNjQvdGltZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGI0ZGE0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvdGltZXguaApAQCAtMCwwICsxLDI2IEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tcHBjL3RpbWV4LmgKKyAqCisgKiBQUEM2NCBhcmNoaXRlY3R1cmUgdGltZXggc3BlY2lmaWNhdGlvbnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisjaWZuZGVmIF9BU01QUEM2NF9USU1FWF9ICisjZGVmaW5lIF9BU01QUEM2NF9USU1FWF9ICisKKyNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFCTExOTMxODAgLyogVW5kZXJseWluZyBIWiAqLworCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgY3ljbGVzX3Q7CisKK3N0YXRpYyBpbmxpbmUgY3ljbGVzX3QgZ2V0X2N5Y2xlcyh2b2lkKQoreworCWN5Y2xlc190IHJldDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKCJtZnRiICUwIiA6ICI9ciIgKHJldCkgOiApOworCXJldHVybiByZXQ7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvdGxiLmggYi9pbmNsdWRlL2FzbS1wcGM2NC90bGIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2NiNjk2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvdGxiLmgKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqCVRMQiBzaG9vdGRvd24gc3BlY2lmaWNzIGZvciBQUEM2NAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMiBBbnRvbiBCbGFuY2hhcmQsIElCTSBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAyIFBhdWwgTWFja2VycmFzLCBJQk0gQ29ycC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisjaWZuZGVmIF9QUEM2NF9UTEJfSAorI2RlZmluZSBfUFBDNjRfVExCX0gKKworI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgorCitzdHJ1Y3QgbW11X2dhdGhlcjsKKworZXh0ZXJuIHZvaWQgcHRlX2ZyZWVfZmluaXNoKHZvaWQpOworCitzdGF0aWMgaW5saW5lIHZvaWQgdGxiX2ZsdXNoKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIpCit7CisJZmx1c2hfdGxiX3BlbmRpbmcoKTsKKwlwdGVfZnJlZV9maW5pc2goKTsKK30KKworLyogQXZvaWQgcHVsbGluZyBpbiBhbm90aGVyIGluY2x1ZGUganVzdCBmb3IgdGhpcyAqLworI2RlZmluZSBjaGVja19wZ3RfY2FjaGUoKQlkbyB7IH0gd2hpbGUgKDApCisKKy8qIEdldCB0aGUgZ2VuZXJpYyBiaXRzLi4uICovCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdGxiLmg+CisKKy8qIE5vdGhpbmcgbmVlZGVkIGhlcmUgaW4gZmFjdC4uLiAqLworI2RlZmluZSB0bGJfc3RhcnRfdm1hKHRsYiwgdm1hKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHRsYl9lbmRfdm1hKHRsYiwgdm1hKQlkbyB7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgX190bGJfcmVtb3ZlX3RsYl9lbnRyeSh0bGIsIHB0ZSwgYWRkcmVzcykgZG8geyB9IHdoaWxlICgwKQorCisjZW5kaWYgLyogX1BQQzY0X1RMQl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC90bGJmbHVzaC5oIGIvaW5jbHVkZS9hc20tcHBjNjQvdGxiZmx1c2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTQxMWE2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvdGxiZmx1c2guaApAQCAtMCwwICsxLDU0IEBACisjaWZuZGVmIF9QUEM2NF9UTEJGTFVTSF9ICisjZGVmaW5lIF9QUEM2NF9UTEJGTFVTSF9ICisKKy8qCisgKiBUTEIgZmx1c2hpbmc6CisgKgorICogIC0gZmx1c2hfdGxiX21tKG1tKSBmbHVzaGVzIHRoZSBzcGVjaWZpZWQgbW0gY29udGV4dCBUTEIncworICogIC0gZmx1c2hfdGxiX3BhZ2Uodm1hLCB2bWFkZHIpIGZsdXNoZXMgb25lIHBhZ2UKKyAqICAtIGZsdXNoX3RsYl9wYWdlX25vaGFzaCh2bWEsIHZtYWRkcikgZmx1c2hlcyBvbmUgcGFnZSBpZiBTVyBsb2FkZWQgVExCCisgKiAgLSBmbHVzaF90bGJfcmFuZ2Uodm1hLCBzdGFydCwgZW5kKSBmbHVzaGVzIGEgcmFuZ2Ugb2YgcGFnZXMKKyAqICAtIGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2Uoc3RhcnQsIGVuZCkgZmx1c2hlcyBhIHJhbmdlIG9mIGtlcm5lbCBwYWdlcworICogIC0gZmx1c2hfdGxiX3BndGFibGVzKG1tLCBzdGFydCwgZW5kKSBmbHVzaGVzIGEgcmFuZ2Ugb2YgcGFnZSB0YWJsZXMKKyAqLworCisjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKworI2RlZmluZSBQUEM2NF9UTEJfQkFUQ0hfTlIgMTkyCisKK3N0cnVjdCBtbV9zdHJ1Y3Q7CitzdHJ1Y3QgcHBjNjRfdGxiX2JhdGNoIHsKKwl1bnNpZ25lZCBsb25nIGluZGV4OworCXVuc2lnbmVkIGxvbmcgY29udGV4dDsKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKKwlwdGVfdCBwdGVbUFBDNjRfVExCX0JBVENIX05SXTsKKwl1bnNpZ25lZCBsb25nIGFkZHJbUFBDNjRfVExCX0JBVENIX05SXTsKKwl1bnNpZ25lZCBsb25nIHZhZGRyW1BQQzY0X1RMQl9CQVRDSF9OUl07Cit9OworREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCBwcGM2NF90bGJfYmF0Y2gsIHBwYzY0X3RsYl9iYXRjaCk7CisKK2V4dGVybiB2b2lkIF9fZmx1c2hfdGxiX3BlbmRpbmcoc3RydWN0IHBwYzY0X3RsYl9iYXRjaCAqYmF0Y2gpOworCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX3BlbmRpbmcodm9pZCkKK3sKKwlzdHJ1Y3QgcHBjNjRfdGxiX2JhdGNoICpiYXRjaCA9ICZnZXRfY3B1X3ZhcihwcGM2NF90bGJfYmF0Y2gpOworCisJaWYgKGJhdGNoLT5pbmRleCkKKwkJX19mbHVzaF90bGJfcGVuZGluZyhiYXRjaCk7CisJcHV0X2NwdV92YXIocHBjNjRfdGxiX2JhdGNoKTsKK30KKworI2RlZmluZSBmbHVzaF90bGJfbW0obW0pCQkJZmx1c2hfdGxiX3BlbmRpbmcoKQorI2RlZmluZSBmbHVzaF90bGJfcGFnZSh2bWEsIGFkZHIpCQlmbHVzaF90bGJfcGVuZGluZygpCisjZGVmaW5lIGZsdXNoX3RsYl9wYWdlX25vaGFzaCh2bWEsIGFkZHIpICAgICAgIAlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX3RsYl9yYW5nZSh2bWEsIHN0YXJ0LCBlbmQpIFwKKwkJZG8geyAodm9pZCkoc3RhcnQpOyBmbHVzaF90bGJfcGVuZGluZygpOyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF90bGJfa2VybmVsX3JhbmdlKHN0YXJ0LCBlbmQpCWZsdXNoX3RsYl9wZW5kaW5nKCkKKyNkZWZpbmUgZmx1c2hfdGxiX3BndGFibGVzKG1tLCBzdGFydCwgZW5kKQlkbyB7IH0gd2hpbGUgKDApCisKK2V4dGVybiB2b2lkIGZsdXNoX2hhc2hfcGFnZSh1bnNpZ25lZCBsb25nIGNvbnRleHQsIHVuc2lnbmVkIGxvbmcgZWEsIHB0ZV90IHB0ZSwKKwkJCSAgICBpbnQgbG9jYWwpOwordm9pZCBmbHVzaF9oYXNoX3JhbmdlKHVuc2lnbmVkIGxvbmcgY29udGV4dCwgdW5zaWduZWQgbG9uZyBudW1iZXIsIGludCBsb2NhbCk7CisKKyNlbmRpZiAvKiBfUFBDNjRfVExCRkxVU0hfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvdG9wb2xvZ3kuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L3RvcG9sb2d5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU4ZDlkZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L3RvcG9sb2d5LmgKQEAgLTAsMCArMSw2OCBAQAorI2lmbmRlZiBfQVNNX1BQQzY0X1RPUE9MT0dZX0gKKyNkZWZpbmUgX0FTTV9QUEM2NF9UT1BPTE9HWV9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxhc20vbW16b25lLmg+CisKKyNpZmRlZiBDT05GSUdfTlVNQQorCitzdGF0aWMgaW5saW5lIGludCBjcHVfdG9fbm9kZShpbnQgY3B1KQoreworCWludCBub2RlOworCisJbm9kZSA9IG51bWFfY3B1X2xvb2t1cF90YWJsZVtjcHVdOworCisjaWZkZWYgREVCVUdfTlVNQQorCUJVR19PTihub2RlID09IC0xKTsKKyNlbmRpZgorCisJcmV0dXJuIG5vZGU7Cit9CisKKyNkZWZpbmUgcGFyZW50X25vZGUobm9kZSkJKG5vZGUpCisKK3N0YXRpYyBpbmxpbmUgY3B1bWFza190IG5vZGVfdG9fY3B1bWFzayhpbnQgbm9kZSkKK3sKKwlyZXR1cm4gbnVtYV9jcHVtYXNrX2xvb2t1cF90YWJsZVtub2RlXTsKK30KKworc3RhdGljIGlubGluZSBpbnQgbm9kZV90b19maXJzdF9jcHUoaW50IG5vZGUpCit7CisJY3B1bWFza190IHRtcDsKKwl0bXAgPSBub2RlX3RvX2NwdW1hc2sobm9kZSk7CisJcmV0dXJuIGZpcnN0X2NwdSh0bXApOworfQorCisjZGVmaW5lIHBjaWJ1c190b19jcHVtYXNrKGJ1cykJKGNwdV9vbmxpbmVfbWFwKQorCisjZGVmaW5lIG5yX2NwdXNfbm9kZShub2RlKQkobnJfY3B1c19pbl9ub2RlW25vZGVdKQorCisvKiBzY2hlZF9kb21haW5zIFNEX05PREVfSU5JVCBmb3IgUFBDNjQgbWFjaGluZXMgKi8KKyNkZWZpbmUgU0RfTk9ERV9JTklUIChzdHJ1Y3Qgc2NoZWRfZG9tYWluKSB7CQlcCisJLnNwYW4JCQk9IENQVV9NQVNLX05PTkUsCVwKKwkucGFyZW50CQkJPSBOVUxMLAkJCVwKKwkuZ3JvdXBzCQkJPSBOVUxMLAkJCVwKKwkubWluX2ludGVydmFsCQk9IDgsCQkJXAorCS5tYXhfaW50ZXJ2YWwJCT0gMzIsCQkJXAorCS5idXN5X2ZhY3RvcgkJPSAzMiwJCQlcCisJLmltYmFsYW5jZV9wY3QJCT0gMTI1LAkJCVwKKwkuY2FjaGVfaG90X3RpbWUJCT0gKDEwKjEwMDAwMDApLAkJXAorCS5jYWNoZV9uaWNlX3RyaWVzCT0gMSwJCQlcCisJLnBlcl9jcHVfZ2FpbgkJPSAxMDAsCQkJXAorCS5mbGFncwkJCT0gU0RfTE9BRF9CQUxBTkNFCVwKKwkJCQl8IFNEX0JBTEFOQ0VfRVhFQwlcCisJCQkJfCBTRF9CQUxBTkNFX05FV0lETEUJXAorCQkJCXwgU0RfV0FLRV9JRExFCQlcCisJCQkJfCBTRF9XQUtFX0JBTEFOQ0UsCVwKKwkubGFzdF9iYWxhbmNlCQk9IGppZmZpZXMsCQlcCisJLmJhbGFuY2VfaW50ZXJ2YWwJPSAxLAkJCVwKKwkubnJfYmFsYW5jZV9mYWlsZWQJPSAwLAkJCVwKK30KKworI2Vsc2UgLyogIUNPTkZJR19OVU1BICovCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy90b3BvbG9neS5oPgorCisjZW5kaWYgLyogQ09ORklHX05VTUEgKi8KKworI2VuZGlmIC8qIF9BU01fUFBDNjRfVE9QT0xPR1lfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvdHlwZXMuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI4YzJjZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L3R5cGVzLmgKQEAgLTAsMCArMSw4MCBAQAorI2lmbmRlZiBfUFBDNjRfVFlQRVNfSAorI2RlZmluZSBfUFBDNjRfVFlQRVNfSAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisvKgorICogVGhpcyBmaWxlIGlzIG5ldmVyIGluY2x1ZGVkIGJ5IGFwcGxpY2F0aW9uIHNvZnR3YXJlIHVubGVzcworICogZXhwbGljaXRseSByZXF1ZXN0ZWQgKGUuZy4sIHZpYSBsaW51eC90eXBlcy5oKSBpbiB3aGljaCBjYXNlIHRoZQorICogYXBwbGljYXRpb24gaXMgTGludXggc3BlY2lmaWMgc28gKHVzZXItKSBuYW1lIHNwYWNlIHBvbGx1dGlvbiBpcworICogbm90IGEgbWFqb3IgaXNzdWUuICBIb3dldmVyLCBmb3IgaW50ZXJvcGVyYWJpbGl0eSwgbGlicmFyaWVzIHN0aWxsCisgKiBuZWVkIHRvIGJlIGNhcmVmdWwgdG8gYXZvaWQgYSBuYW1lIGNsYXNoZXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCit0eXBlZGVmIHVuc2lnbmVkIGludCB1bW9kZV90OworCisvKgorICogX194eCBpcyBvazogaXQgZG9lc24ndCBwb2xsdXRlIHRoZSBQT1NJWCBuYW1lc3BhY2UuIFVzZSB0aGVzZSBpbiB0aGUKKyAqIGhlYWRlciBmaWxlcyBleHBvcnRlZCB0byB1c2VyIHNwYWNlCisgKi8KKwordHlwZWRlZiBfX3NpZ25lZF9fIGNoYXIgX19zODsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBfX3U4OworCit0eXBlZGVmIF9fc2lnbmVkX18gc2hvcnQgX19zMTY7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fdTE2OworCit0eXBlZGVmIF9fc2lnbmVkX18gaW50IF9fczMyOwordHlwZWRlZiB1bnNpZ25lZCBpbnQgX191MzI7CisKK3R5cGVkZWYgX19zaWduZWRfXyBsb25nIF9fczY0OwordHlwZWRlZiB1bnNpZ25lZCBsb25nIF9fdTY0OworCit0eXBlZGVmIHN0cnVjdCB7CisJX191MzIgdVs0XTsKK30gX19hdHRyaWJ1dGUoKGFsaWduZWQoMTYpKSkgX192ZWN0b3IxMjg7CisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworI2lmZGVmIF9fS0VSTkVMX18KKy8qCisgKiBUaGVzZSBhcmVuJ3QgZXhwb3J0ZWQgb3V0c2lkZSB0aGUga2VybmVsIHRvIGF2b2lkIG5hbWUgc3BhY2UgY2xhc2hlcworICovCisjZGVmaW5lIEJJVFNfUEVSX0xPTkcgNjQKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKwordHlwZWRlZiBzaWduZWQgY2hhciBzODsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciB1ODsKKwordHlwZWRlZiBzaWduZWQgc2hvcnQgczE2OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1MTY7CisKK3R5cGVkZWYgc2lnbmVkIGludCBzMzI7Cit0eXBlZGVmIHVuc2lnbmVkIGludCB1MzI7CisKK3R5cGVkZWYgc2lnbmVkIGxvbmcgczY0OwordHlwZWRlZiB1bnNpZ25lZCBsb25nIHU2NDsKKwordHlwZWRlZiBfX3ZlY3RvcjEyOCB2ZWN0b3IxMjg7CisKK3R5cGVkZWYgdTMyIGRtYV9hZGRyX3Q7Cit0eXBlZGVmIHU2NCBkbWE2NF9hZGRyX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBsb25nIGVudHJ5OworCXVuc2lnbmVkIGxvbmcgdG9jOworCXVuc2lnbmVkIGxvbmcgZW52OworfSBmdW5jX2Rlc2NyX3Q7CisKK3R5cGVkZWYgdW5zaWduZWQgaW50IGttZW1fYnVmY3RsX3Q7CisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfUFBDNjRfVFlQRVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvdWFjY2Vzcy5oIGIvaW5jbHVkZS9hc20tcHBjNjQvdWFjY2Vzcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1YjU5NDMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC91YWNjZXNzLmgKQEAgLTAsMCArMSwzNDYgQEAKKyNpZm5kZWYgX1BQQzY0X1VBQ0NFU1NfSAorI2RlZmluZSBfUFBDNjRfVUFDQ0VTU19ICisKKy8qIAorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisKKyNkZWZpbmUgVkVSSUZZX1JFQUQJMAorI2RlZmluZSBWRVJJRllfV1JJVEUJMQorCisvKgorICogVGhlIGZzIHZhbHVlIGRldGVybWluZXMgd2hldGhlciBhcmd1bWVudCB2YWxpZGl0eSBjaGVja2luZyBzaG91bGQgYmUKKyAqIHBlcmZvcm1lZCBvciBub3QuICBJZiBnZXRfZnMoKSA9PSBVU0VSX0RTLCBjaGVja2luZyBpcyBwZXJmb3JtZWQsIHdpdGgKKyAqIGdldF9mcygpID09IEtFUk5FTF9EUywgY2hlY2tpbmcgaXMgYnlwYXNzZWQuCisgKgorICogRm9yIGhpc3RvcmljYWwgcmVhc29ucywgdGhlc2UgbWFjcm9zIGFyZSBncm9zc2x5IG1pc25hbWVkLgorICovCisKKyNkZWZpbmUgTUFLRV9NTV9TRUcocykgICgobW1fc2VnbWVudF90KSB7IChzKSB9KQorCisjZGVmaW5lIEtFUk5FTF9EUwlNQUtFX01NX1NFRygwVUwpCisjZGVmaW5lIFVTRVJfRFMJCU1BS0VfTU1fU0VHKDB4ZjAwMDAwMDAwMDAwMDAwMFVMKQorCisjZGVmaW5lIGdldF9kcygpCShLRVJORUxfRFMpCisjZGVmaW5lIGdldF9mcygpCShjdXJyZW50LT50aHJlYWQuZnMpCisjZGVmaW5lIHNldF9mcyh2YWwpCShjdXJyZW50LT50aHJlYWQuZnMgPSAodmFsKSkKKworI2RlZmluZSBzZWdtZW50X2VxKGEsYikJKChhKS5zZWcgPT0gKGIpLnNlZykKKworLyoKKyAqIFVzZSB0aGUgYWxwaGEgdHJpY2sgZm9yIGNoZWNraW5nIHJhbmdlczoKKyAqCisgKiBJcyBhIGFkZHJlc3MgdmFsaWQ/IFRoaXMgZG9lcyBhIHN0cmFpZ2h0Zm9yd2FyZCBjYWxjdWxhdGlvbiByYXRoZXIKKyAqIHRoYW4gdGVzdHMuCisgKgorICogQWRkcmVzcyB2YWxpZCBpZjoKKyAqICAtICJhZGRyIiBkb2Vzbid0IGhhdmUgYW55IGhpZ2gtYml0cyBzZXQKKyAqICAtIEFORCAic2l6ZSIgZG9lc24ndCBoYXZlIGFueSBoaWdoLWJpdHMgc2V0CisgKiAgLSBPUiB3ZSBhcmUgaW4ga2VybmVsIG1vZGUuCisgKgorICogV2UgZG9udCBoYXZlIHRvIGNoZWNrIGZvciBoaWdoIGJpdHMgaW4gKGFkZHIrc2l6ZSkgYmVjYXVzZSB0aGUgZmlyc3QKKyAqIHR3byBjaGVja3MgZm9yY2UgdGhlIG1heGltdW0gcmVzdWx0IHRvIGJlIGJlbG93IHRoZSBzdGFydCBvZiB0aGUKKyAqIGtlcm5lbCByZWdpb24uCisgKi8KKyNkZWZpbmUgX19hY2Nlc3Nfb2soYWRkcixzaXplLHNlZ21lbnQpIFwKKwkoKChzZWdtZW50KS5zZWcgJiAoYWRkciB8IHNpemUgKSkgPT0gMCkKKworI2RlZmluZSBhY2Nlc3Nfb2sodHlwZSxhZGRyLHNpemUpIFwKKwlfX2FjY2Vzc19vaygoKF9fZm9yY2UgdW5zaWduZWQgbG9uZykoYWRkcikpLChzaXplKSxnZXRfZnMoKSkKKworLyogdGhpcyBmdW5jdGlvbiB3aWxsIGdvIGF3YXkgc29vbiAtIHVzZSBhY2Nlc3Nfb2soKSBpbnN0ZWFkICovCitzdGF0aWMgaW5saW5lIGludCBfX2RlcHJlY2F0ZWQgdmVyaWZ5X2FyZWEoaW50IHR5cGUsIGNvbnN0IHZvaWQgX191c2VyICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJcmV0dXJuIGFjY2Vzc19vayh0eXBlLGFkZHIsc2l6ZSkgPyAwIDogLUVGQVVMVDsKK30KKworCisvKgorICogVGhlIGV4Y2VwdGlvbiB0YWJsZSBjb25zaXN0cyBvZiBwYWlycyBvZiBhZGRyZXNzZXM6IHRoZSBmaXJzdCBpcyB0aGUKKyAqIGFkZHJlc3Mgb2YgYW4gaW5zdHJ1Y3Rpb24gdGhhdCBpcyBhbGxvd2VkIHRvIGZhdWx0LCBhbmQgdGhlIHNlY29uZCBpcworICogdGhlIGFkZHJlc3MgYXQgd2hpY2ggdGhlIHByb2dyYW0gc2hvdWxkIGNvbnRpbnVlLiAgTm8gcmVnaXN0ZXJzIGFyZQorICogbW9kaWZpZWQsIHNvIGl0IGlzIGVudGlyZWx5IHVwIHRvIHRoZSBjb250aW51YXRpb24gY29kZSB0byBmaWd1cmUgb3V0CisgKiB3aGF0IHRvIGRvLgorICoKKyAqIEFsbCB0aGUgcm91dGluZXMgYmVsb3cgdXNlIGJpdHMgb2YgZml4dXAgY29kZSB0aGF0IGFyZSBvdXQgb2YgbGluZQorICogd2l0aCB0aGUgbWFpbiBpbnN0cnVjdGlvbiBwYXRoLiAgVGhpcyBtZWFucyB3aGVuIGV2ZXJ5dGhpbmcgaXMgd2VsbCwKKyAqIHdlIGRvbid0IGV2ZW4gaGF2ZSB0byBqdW1wIG92ZXIgdGhlbS4gIEZ1cnRoZXIsIHRoZXkgZG8gbm90IGludHJ1ZGUKKyAqIG9uIG91ciBjYWNoZSBvciB0bGIgZW50cmllcy4KKyAqLworCitzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5Cit7CisJdW5zaWduZWQgbG9uZyBpbnNuLCBmaXh1cDsKK307CisKKy8qIFJldHVybnMgMCBpZiBleGNlcHRpb24gbm90IGZvdW5kIGFuZCBmaXh1cCBvdGhlcndpc2UuICAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc2VhcmNoX2V4Y2VwdGlvbl90YWJsZSh1bnNpZ25lZCBsb25nKTsKKworLyoKKyAqIFRoZXNlIGFyZSB0aGUgbWFpbiBzaW5nbGUtdmFsdWUgdHJhbnNmZXIgcm91dGluZXMuICBUaGV5IGF1dG9tYXRpY2FsbHkKKyAqIHVzZSB0aGUgcmlnaHQgc2l6ZSBpZiB3ZSBqdXN0IGhhdmUgdGhlIHJpZ2h0IHBvaW50ZXIgdHlwZS4KKyAqCisgKiBUaGlzIGdldHMga2luZCBvZiB1Z2x5LiBXZSB3YW50IHRvIHJldHVybiBfdHdvXyB2YWx1ZXMgaW4gImdldF91c2VyKCkiCisgKiBhbmQgeWV0IHdlIGRvbid0IHdhbnQgdG8gZG8gYW55IHBvaW50ZXJzLCBiZWNhdXNlIHRoYXQgaXMgdG9vIG11Y2gKKyAqIG9mIGEgcGVyZm9ybWFuY2UgaW1wYWN0LiBUaHVzIHdlIGhhdmUgYSBmZXcgcmF0aGVyIHVnbHkgbWFjcm9zIGhlcmUsCisgKiBhbmQgaGlkZSBhbGwgdGhlIHVnbGluZXNzIGZyb20gdGhlIHVzZXIuCisgKgorICogVGhlICJfX3h4eCIgdmVyc2lvbnMgb2YgdGhlIHVzZXIgYWNjZXNzIGZ1bmN0aW9ucyBhcmUgdmVyc2lvbnMgdGhhdAorICogZG8gbm90IHZlcmlmeSB0aGUgYWRkcmVzcyBzcGFjZSwgdGhhdCBtdXN0IGhhdmUgYmVlbiBkb25lIHByZXZpb3VzbHkKKyAqIHdpdGggYSBzZXBhcmF0ZSAiYWNjZXNzX29rKCkiIGNhbGwgKHRoaXMgaXMgdXNlZCB3aGVuIHdlIGRvIG11bHRpcGxlCisgKiBhY2Nlc3NlcyB0byB0aGUgc2FtZSBhcmVhIG9mIHVzZXIgbWVtb3J5KS4KKyAqCisgKiBBcyB3ZSB1c2UgdGhlIHNhbWUgYWRkcmVzcyBzcGFjZSBmb3Iga2VybmVsIGFuZCB1c2VyIGRhdGEgb24gdGhlCisgKiBQb3dlclBDLCB3ZSBjYW4ganVzdCBkbyB0aGVzZSBhcyBkaXJlY3QgYXNzaWdubWVudHMuICAoT2YgY291cnNlLCB0aGUKKyAqIGV4Y2VwdGlvbiBoYW5kbGluZyBtZWFucyB0aGF0IGl0J3Mgbm8gbG9uZ2VyICJqdXN0Ii4uLikKKyAqLworI2RlZmluZSBnZXRfdXNlcih4LHB0cikgXAorICBfX2dldF91c2VyX2NoZWNrKCh4KSwocHRyKSxzaXplb2YoKihwdHIpKSkKKyNkZWZpbmUgcHV0X3VzZXIoeCxwdHIpIFwKKyAgX19wdXRfdXNlcl9jaGVjaygoX190eXBlb2ZfXygqKHB0cikpKSh4KSwocHRyKSxzaXplb2YoKihwdHIpKSkKKworI2RlZmluZSBfX2dldF91c2VyKHgscHRyKSBcCisgIF9fZ2V0X3VzZXJfbm9jaGVjaygoeCksKHB0ciksc2l6ZW9mKCoocHRyKSkpCisjZGVmaW5lIF9fcHV0X3VzZXIoeCxwdHIpIFwKKyAgX19wdXRfdXNlcl9ub2NoZWNrKChfX3R5cGVvZl9fKCoocHRyKSkpKHgpLChwdHIpLHNpemVvZigqKHB0cikpKQorCisjZGVmaW5lIF9fZ2V0X3VzZXJfdW5hbGlnbmVkIF9fZ2V0X3VzZXIKKyNkZWZpbmUgX19wdXRfdXNlcl91bmFsaWduZWQgX19wdXRfdXNlcgorCitleHRlcm4gbG9uZyBfX3B1dF91c2VyX2JhZCh2b2lkKTsKKworI2RlZmluZSBfX3B1dF91c2VyX25vY2hlY2soeCxwdHIsc2l6ZSkJCQkJXAorKHsJCQkJCQkJCVwKKwlsb25nIF9fcHVfZXJyOwkJCQkJCVwKKwltaWdodF9zbGVlcCgpOwkJCQkJCVwKKwlfX2Noa191c2VyX3B0cihwdHIpOwkJCQkJXAorCV9fcHV0X3VzZXJfc2l6ZSgoeCksKHB0ciksKHNpemUpLF9fcHVfZXJyLC1FRkFVTFQpOwlcCisJX19wdV9lcnI7CQkJCQkJXAorfSkKKworI2RlZmluZSBfX3B1dF91c2VyX2NoZWNrKHgscHRyLHNpemUpCQkJCQlcCisoewkJCQkJCQkJCVwKKwlsb25nIF9fcHVfZXJyID0gLUVGQVVMVDsJCQkJCVwKKwl2b2lkIF9fdXNlciAqX19wdV9hZGRyID0gKHB0cik7CQkJCQlcCisJbWlnaHRfc2xlZXAoKTsJCQkJCQkJXAorCWlmIChhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLF9fcHVfYWRkcixzaXplKSkJCQlcCisJCV9fcHV0X3VzZXJfc2l6ZSgoeCksX19wdV9hZGRyLChzaXplKSxfX3B1X2VyciwtRUZBVUxUKTsJXAorCV9fcHVfZXJyOwkJCQkJCQlcCit9KQorCisjZGVmaW5lIF9fcHV0X3VzZXJfc2l6ZSh4LHB0cixzaXplLHJldHZhbCxlcnJyZXQpCQkJXAorZG8gewkJCQkJCQkJCVwKKwlyZXR2YWwgPSAwOwkJCQkJCQlcCisJc3dpdGNoIChzaXplKSB7CQkJCQkJCVwKKwkgIGNhc2UgMTogX19wdXRfdXNlcl9hc20oeCxwdHIscmV0dmFsLCJzdGIiLGVycnJldCk7IGJyZWFrOwlcCisJICBjYXNlIDI6IF9fcHV0X3VzZXJfYXNtKHgscHRyLHJldHZhbCwic3RoIixlcnJyZXQpOyBicmVhazsJXAorCSAgY2FzZSA0OiBfX3B1dF91c2VyX2FzbSh4LHB0cixyZXR2YWwsInN0dyIsZXJycmV0KTsgYnJlYWs7CVwKKwkgIGNhc2UgODogX19wdXRfdXNlcl9hc20oeCxwdHIscmV0dmFsLCJzdGQiLGVycnJldCk7IGJyZWFrOyAJXAorCSAgZGVmYXVsdDogX19wdXRfdXNlcl9iYWQoKTsJCQkJCVwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisvKgorICogV2UgZG9uJ3QgdGVsbCBnY2MgdGhhdCB3ZSBhcmUgYWNjZXNzaW5nIG1lbW9yeSwgYnV0IHRoaXMgaXMgT0sKKyAqIGJlY2F1c2Ugd2UgZG8gbm90IHdyaXRlIHRvIGFueSBtZW1vcnkgZ2NjIGtub3dzIGFib3V0LCBzbyB0aGVyZQorICogYXJlIG5vIGFsaWFzaW5nIGlzc3Vlcy4KKyAqLworI2RlZmluZSBfX3B1dF91c2VyX2FzbSh4LCBhZGRyLCBlcnIsIG9wLCBlcnJyZXQpCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQlcCisJCSIxOgkib3AiICUxLDAoJTIpICAJIyBwdXRfdXNlclxuIiAJIAlcCisJCSIyOlxuIgkJCQkJCVwKKwkJIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIJCQlcCisJCSIzOglsaSAlMCwlM1xuIgkJCQlcCisJCSIJYiAyYlxuIgkJCQkJXAorCQkiLnByZXZpb3VzXG4iCQkJCQlcCisJCSIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCQkJXAorCQkiCS5hbGlnbiAzXG4iCQkJCVwKKwkJIgkubGxvbmcgMWIsM2JcbiIJCQkJXAorCQkiLnByZXZpb3VzIgkJCQkJXAorCQk6ICI9ciIoZXJyKQkJCQkJXAorCQk6ICJyIih4KSwgImIiKGFkZHIpLCAiaSIoZXJycmV0KSwgIjAiKGVycikpCisKKworI2RlZmluZSBfX2dldF91c2VyX25vY2hlY2soeCxwdHIsc2l6ZSkJCQkJXAorKHsJCQkJCQkJCVwKKwlsb25nIF9fZ3VfZXJyLCBfX2d1X3ZhbDsJCQkJXAorCW1pZ2h0X3NsZWVwKCk7CQkJCQkJXAorCV9fZ2V0X3VzZXJfc2l6ZShfX2d1X3ZhbCwocHRyKSwoc2l6ZSksX19ndV9lcnIsLUVGQVVMVCk7XAorCSh4KSA9IChfX3R5cGVvZl9fKCoocHRyKSkpX19ndV92YWw7CQkJXAorCV9fZ3VfZXJyOwkJCQkJCVwKK30pCisKKyNkZWZpbmUgX19nZXRfdXNlcl9jaGVjayh4LHB0cixzaXplKQkJCQkJXAorKHsJCQkJCQkJCQlcCisJbG9uZyBfX2d1X2VyciA9IC1FRkFVTFQsIF9fZ3VfdmFsID0gMDsJCQkJXAorCWNvbnN0IF9fdHlwZW9mX18oKihwdHIpKSBfX3VzZXIgKl9fZ3VfYWRkciA9IChwdHIpOwkJXAorCW1pZ2h0X3NsZWVwKCk7CQkJCQkJCVwKKwlpZiAoYWNjZXNzX29rKFZFUklGWV9SRUFELF9fZ3VfYWRkcixzaXplKSkJCQlcCisJCV9fZ2V0X3VzZXJfc2l6ZShfX2d1X3ZhbCxfX2d1X2FkZHIsKHNpemUpLF9fZ3VfZXJyLC1FRkFVTFQpO1wKKwkoeCkgPSAoX190eXBlb2ZfXygqKHB0cikpKV9fZ3VfdmFsOwkJCQlcCisJX19ndV9lcnI7CQkJCQkJCVwKK30pCisKK2V4dGVybiBsb25nIF9fZ2V0X3VzZXJfYmFkKHZvaWQpOworCisjZGVmaW5lIF9fZ2V0X3VzZXJfc2l6ZSh4LHB0cixzaXplLHJldHZhbCxlcnJyZXQpCQkJXAorZG8gewkJCQkJCQkJCVwKKwlyZXR2YWwgPSAwOwkJCQkJCQlcCisJX19jaGtfdXNlcl9wdHIocHRyKTsJCQkJCQlcCisJc3dpdGNoIChzaXplKSB7CQkJCQkJCVwKKwkgIGNhc2UgMTogX19nZXRfdXNlcl9hc20oeCxwdHIscmV0dmFsLCJsYnoiLGVycnJldCk7IGJyZWFrOwlcCisJICBjYXNlIDI6IF9fZ2V0X3VzZXJfYXNtKHgscHRyLHJldHZhbCwibGh6IixlcnJyZXQpOyBicmVhazsJXAorCSAgY2FzZSA0OiBfX2dldF91c2VyX2FzbSh4LHB0cixyZXR2YWwsImx3eiIsZXJycmV0KTsgYnJlYWs7CVwKKwkgIGNhc2UgODogX19nZXRfdXNlcl9hc20oeCxwdHIscmV0dmFsLCJsZCIsZXJycmV0KTsgIGJyZWFrOwlcCisJICBkZWZhdWx0OiAoeCkgPSBfX2dldF91c2VyX2JhZCgpOwkJCQlcCisJfQkJCQkJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBfX2dldF91c2VyX2FzbSh4LCBhZGRyLCBlcnIsIG9wLCBlcnJyZXQpCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJXAorCQkiMToJIm9wIiAlMSwwKCUyKQkjIGdldF91c2VyXG4iICAJXAorCQkiMjpcbiIJCQkJCVwKKwkJIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIJCVwKKwkJIjM6CWxpICUwLCUzXG4iCQkJXAorCQkiCWxpICUxLDBcbiIJCQlcCisJCSIJYiAyYlxuIgkJCQlcCisJCSIucHJldmlvdXNcbiIJCQkJXAorCQkiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgkJXAorCQkiCS5hbGlnbiAzXG4iCQkJXAorCQkiCS5sbG9uZyAxYiwzYlxuIgkJCVwKKwkJIi5wcmV2aW91cyIJCQkJXAorCQk6ICI9ciIoZXJyKSwgIj1yIih4KQkJCVwKKwkJOiAiYiIoYWRkciksICJpIihlcnJyZXQpLCAiMCIoZXJyKSkKKworLyogbW9yZSBjb21wbGV4IHJvdXRpbmVzICovCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fY29weV90b2Zyb21fdXNlcih2b2lkIF9fdXNlciAqdG8sIGNvbnN0IHZvaWQgX191c2VyICpmcm9tLAorCQkJCQl1bnNpZ25lZCBsb25nIHNpemUpOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK19fY29weV9mcm9tX3VzZXJfaW5hdG9taWModm9pZCAqdG8sIGNvbnN0IHZvaWQgX191c2VyICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pCit7CisJaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKG4pKSB7CisJCXVuc2lnbmVkIGxvbmcgcmV0OworCisJCXN3aXRjaCAobikgeworCQljYXNlIDE6CisJCQlfX2dldF91c2VyX3NpemUoKih1OCAqKXRvLCBmcm9tLCAxLCByZXQsIDEpOworCQkJcmV0dXJuIHJldDsKKwkJY2FzZSAyOgorCQkJX19nZXRfdXNlcl9zaXplKCoodTE2ICopdG8sIGZyb20sIDIsIHJldCwgMik7CisJCQlyZXR1cm4gcmV0OworCQljYXNlIDQ6CisJCQlfX2dldF91c2VyX3NpemUoKih1MzIgKil0bywgZnJvbSwgNCwgcmV0LCA0KTsKKwkJCXJldHVybiByZXQ7CisJCWNhc2UgODoKKwkJCV9fZ2V0X3VzZXJfc2l6ZSgqKHU2NCAqKXRvLCBmcm9tLCA4LCByZXQsIDgpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKwlyZXR1cm4gX19jb3B5X3RvZnJvbV91c2VyKChfX2ZvcmNlIHZvaWQgX191c2VyICopIHRvLCBmcm9tLCBuKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCitfX2NvcHlfZnJvbV91c2VyKHZvaWQgKnRvLCBjb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKQoreworCW1pZ2h0X3NsZWVwKCk7CisJcmV0dXJuIF9fY29weV9mcm9tX3VzZXJfaW5hdG9taWModG8sIGZyb20sIG4pOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK19fY29weV90b191c2VyX2luYXRvbWljKHZvaWQgX191c2VyICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKQoreworCWlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChuKSkgeworCQl1bnNpZ25lZCBsb25nIHJldDsKKworCQlzd2l0Y2ggKG4pIHsKKwkJY2FzZSAxOgorCQkJX19wdXRfdXNlcl9zaXplKCoodTggKilmcm9tLCAodTggX191c2VyICopdG8sIDEsIHJldCwgMSk7CisJCQlyZXR1cm4gcmV0OworCQljYXNlIDI6CisJCQlfX3B1dF91c2VyX3NpemUoKih1MTYgKilmcm9tLCAodTE2IF9fdXNlciAqKXRvLCAyLCByZXQsIDIpOworCQkJcmV0dXJuIHJldDsKKwkJY2FzZSA0OgorCQkJX19wdXRfdXNlcl9zaXplKCoodTMyICopZnJvbSwgKHUzMiBfX3VzZXIgKil0bywgNCwgcmV0LCA0KTsKKwkJCXJldHVybiByZXQ7CisJCWNhc2UgODoKKwkJCV9fcHV0X3VzZXJfc2l6ZSgqKHU2NCAqKWZyb20sICh1NjQgX191c2VyICopdG8sIDgsIHJldCwgOCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCXJldHVybiBfX2NvcHlfdG9mcm9tX3VzZXIodG8sIChfX2ZvcmNlIGNvbnN0IHZvaWQgX191c2VyICopIGZyb20sIG4pOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK19fY29weV90b191c2VyKHZvaWQgX191c2VyICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKQoreworCW1pZ2h0X3NsZWVwKCk7CisJcmV0dXJuIF9fY29weV90b191c2VyX2luYXRvbWljKHRvLCBmcm9tLCBuKTsKK30KKworI2RlZmluZSBfX2NvcHlfaW5fdXNlcih0bywgZnJvbSwgc2l6ZSkgXAorCV9fY29weV90b2Zyb21fdXNlcigodG8pLCAoZnJvbSksIChzaXplKSkKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgY29weV9mcm9tX3VzZXIodm9pZCAqdG8sIGNvbnN0IHZvaWQgX191c2VyICpmcm9tLAorCQkJCSAgICB1bnNpZ25lZCBsb25nIG4pOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgY29weV90b191c2VyKHZvaWQgX191c2VyICp0bywgY29uc3Qgdm9pZCAqZnJvbSwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgbik7CitleHRlcm4gdW5zaWduZWQgbG9uZyBjb3B5X2luX3VzZXIodm9pZCBfX3VzZXIgKnRvLCBjb25zdCB2b2lkIF9fdXNlciAqZnJvbSwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgbik7CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fY2xlYXJfdXNlcih2b2lkIF9fdXNlciAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCitjbGVhcl91c2VyKHZvaWQgX191c2VyICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJbWlnaHRfc2xlZXAoKTsKKwlpZiAobGlrZWx5KGFjY2Vzc19vayhWRVJJRllfV1JJVEUsIGFkZHIsIHNpemUpKSkKKwkJc2l6ZSA9IF9fY2xlYXJfdXNlcihhZGRyLCBzaXplKTsKKwlyZXR1cm4gc2l6ZTsKK30KKworZXh0ZXJuIGludCBfX3N0cm5jcHlfZnJvbV91c2VyKGNoYXIgKmRzdCwgY29uc3QgY2hhciBfX3VzZXIgKnNyYywgbG9uZyBjb3VudCk7CisKK3N0YXRpYyBpbmxpbmUgbG9uZworc3RybmNweV9mcm9tX3VzZXIoY2hhciAqZHN0LCBjb25zdCBjaGFyIF9fdXNlciAqc3JjLCBsb25nIGNvdW50KQoreworCW1pZ2h0X3NsZWVwKCk7CisJaWYgKGxpa2VseShhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIHNyYywgMSkpKQorCQlyZXR1cm4gX19zdHJuY3B5X2Zyb21fdXNlcihkc3QsIHNyYywgY291bnQpOworCXJldHVybiAtRUZBVUxUOworfQorCisvKgorICogUmV0dXJuIHRoZSBzaXplIG9mIGEgc3RyaW5nIChpbmNsdWRpbmcgdGhlIGVuZGluZyAwKQorICoKKyAqIFJldHVybiAwIGZvciBlcnJvcgorICovCitleHRlcm4gaW50IF9fc3Rybmxlbl91c2VyKGNvbnN0IGNoYXIgX191c2VyICpzdHIsIGxvbmcgbGVuKTsKKworLyoKKyAqIFJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIGF0IHN0ciAoaW5jbHVkaW5nIHRoZSBudWxsIGJ5dGUpLAorICogb3IgMCBpZiB3ZSBoaXQgYSBwYWdlIHdlIGNhbid0IGFjY2VzcywKKyAqIG9yIHNvbWV0aGluZyA+IGxlbiBpZiB3ZSBkaWRuJ3QgZmluZCBhIG51bGwgYnl0ZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgc3Rybmxlbl91c2VyKGNvbnN0IGNoYXIgX191c2VyICpzdHIsIGxvbmcgbGVuKQoreworCW1pZ2h0X3NsZWVwKCk7CisJaWYgKGxpa2VseShhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIHN0ciwgMSkpKQorCQlyZXR1cm4gX19zdHJubGVuX3VzZXIoc3RyLCBsZW4pOworCXJldHVybiAwOworfQorCisjZGVmaW5lIHN0cmxlbl91c2VyKHN0cikJc3Rybmxlbl91c2VyKChzdHIpLCAweDdmZmZmZmZlKQorCisjZW5kaWYgIC8qIF9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYJLyogX1BQQzY0X1VBQ0NFU1NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvdWNvbnRleHQuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L3Vjb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY4Y2M1YgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L3Vjb250ZXh0LmgKQEAgLTAsMCArMSwyMiBAQAorI2lmbmRlZiBfQVNNUFBDNjRfVUNPTlRFWFRfSAorI2RlZmluZSBfQVNNUFBDNjRfVUNPTlRFWFRfSAorCisjaW5jbHVkZSA8YXNtL3NpZ2NvbnRleHQuaD4KKworLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworc3RydWN0IHVjb250ZXh0IHsKKwl1bnNpZ25lZCBsb25nCSAgdWNfZmxhZ3M7CisJc3RydWN0IHVjb250ZXh0ICAqdWNfbGluazsKKwlzdGFja190CQkgIHVjX3N0YWNrOworCXNpZ3NldF90CSAgdWNfc2lnbWFzazsKKwlzaWdzZXRfdAkgIF9fdW5zdWVkWzE1XTsJLyogQWxsb3cgZm9yIHVjX3NpZ21hc2sgZ3Jvd3RoICovCisJc3RydWN0IHNpZ2NvbnRleHQgdWNfbWNvbnRleHQ7ICAvKiBsYXN0IGZvciBleHRlbnNpYmlsaXR5ICovCit9OworCisjZW5kaWYgLyogX0FTTVBQQzY0X1VDT05URVhUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L3VkYmcuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L3VkYmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmUwNGQwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvdWRiZy5oCkBAIC0wLDAgKzEsMjggQEAKKyNpZm5kZWYgX19VREJHX0hEUgorI2RlZmluZSBfX1VEQkdfSERSCisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorCisvKgorICogYyAyMDAxIFBQQyA2NCBUZWFtLCBJQk0gQ29ycAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKwordm9pZCB1ZGJnX2luaXRfdWFydCh2b2lkIF9faW9tZW0gKmNvbXBvcnQsIHVuc2lnbmVkIGludCBzcGVlZCk7Cit2b2lkIHVkYmdfcHV0Yyh1bnNpZ25lZCBjaGFyIGMpOwordW5zaWduZWQgY2hhciB1ZGJnX2dldGModm9pZCk7CitpbnQgdWRiZ19nZXRjX3BvbGwodm9pZCk7Cit2b2lkIHVkYmdfcHV0cyhjb25zdCBjaGFyICpzKTsKK2ludCB1ZGJnX3dyaXRlKGNvbnN0IGNoYXIgKnMsIGludCBuKTsKK2ludCB1ZGJnX3JlYWQoY2hhciAqYnVmLCBpbnQgYnVmbGVuKTsKK3N0cnVjdCBjb25zb2xlOwordm9pZCB1ZGJnX2NvbnNvbGVfd3JpdGUoc3RydWN0IGNvbnNvbGUgKmNvbiwgY29uc3QgY2hhciAqcywgdW5zaWduZWQgaW50IG4pOwordm9pZCB1ZGJnX3ByaW50Zihjb25zdCBjaGFyICpmbXQsIC4uLik7Cit2b2lkIHVkYmdfcHBjZGJnKHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKK3Vuc2lnbmVkIGxvbmcgdWRiZ19pZmRlYnVnKHVuc2lnbmVkIGxvbmcgZmxhZ3MpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L3VuYWxpZ25lZC5oIGIvaW5jbHVkZS9hc20tcHBjNjQvdW5hbGlnbmVkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM2ZTkzYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L3VuYWxpZ25lZC5oCkBAIC0wLDAgKzEsMjEgQEAKKyNpZm5kZWYgX19QUEM2NF9VTkFMSUdORURfSAorI2RlZmluZSBfX1BQQzY0X1VOQUxJR05FRF9ICisKKy8qCisgKiBUaGUgUG93ZXJQQyBjYW4gZG8gdW5hbGlnbmVkIGFjY2Vzc2VzIGl0c2VsZiBpbiBiaWcgZW5kaWFuIG1vZGUuIAorICoKKyAqIFRoZSBzdHJhbmdlIG1hY3JvcyBhcmUgdGhlcmUgdG8gbWFrZSBzdXJlIHRoZXNlIGNhbid0CisgKiBiZSBtaXN1c2VkIGluIGEgd2F5IHRoYXQgbWFrZXMgdGhlbSBub3Qgd29yayBvbiBvdGhlcgorICogYXJjaGl0ZWN0dXJlcyB3aGVyZSB1bmFsaWduZWQgYWNjZXNzZXMgYXJlbid0IGFzIHNpbXBsZS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNkZWZpbmUgZ2V0X3VuYWxpZ25lZChwdHIpICgqKHB0cikpCisKKyNkZWZpbmUgcHV0X3VuYWxpZ25lZCh2YWwsIHB0cikgKCh2b2lkKSggKihwdHIpID0gKHZhbCkgKSkKKworI2VuZGlmIC8qIF9fUFBDNjRfVU5BTElHTkVEX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L3VuaW5vcnRoLmggYi9pbmNsdWRlL2FzbS1wcGM2NC91bmlub3J0aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhZDcwNTkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC91bmlub3J0aC5oCkBAIC0wLDAgKzEsMiBAQAorI2luY2x1ZGUgPGFzbS1wcGMvdW5pbm9ydGguaD4KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1wcGM2NC91bmlzdGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDVkOTFlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvdW5pc3RkLmgKQEAgLTAsMCArMSw0ODIgQEAKKyNpZm5kZWYgX0FTTV9QUENfVU5JU1REX0hfCisjZGVmaW5lIF9BU01fUFBDX1VOSVNURF9IXworCisvKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBzeXN0ZW0gY2FsbCBudW1iZXJzLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2RlZmluZSBfX05SX3Jlc3RhcnRfc3lzY2FsbAkgIDAKKyNkZWZpbmUgX19OUl9leGl0CQkgIDEKKyNkZWZpbmUgX19OUl9mb3JrCQkgIDIKKyNkZWZpbmUgX19OUl9yZWFkCQkgIDMKKyNkZWZpbmUgX19OUl93cml0ZQkJICA0CisjZGVmaW5lIF9fTlJfb3BlbgkJICA1CisjZGVmaW5lIF9fTlJfY2xvc2UJCSAgNgorI2RlZmluZSBfX05SX3dhaXRwaWQJCSAgNworI2RlZmluZSBfX05SX2NyZWF0CQkgIDgKKyNkZWZpbmUgX19OUl9saW5rCQkgIDkKKyNkZWZpbmUgX19OUl91bmxpbmsJCSAxMAorI2RlZmluZSBfX05SX2V4ZWN2ZQkJIDExCisjZGVmaW5lIF9fTlJfY2hkaXIJCSAxMgorI2RlZmluZSBfX05SX3RpbWUJCSAxMworI2RlZmluZSBfX05SX21rbm9kCQkgMTQKKyNkZWZpbmUgX19OUl9jaG1vZAkJIDE1CisjZGVmaW5lIF9fTlJfbGNob3duCQkgMTYKKyNkZWZpbmUgX19OUl9icmVhawkJIDE3CisjZGVmaW5lIF9fTlJfb2xkc3RhdAkJIDE4CisjZGVmaW5lIF9fTlJfbHNlZWsJCSAxOQorI2RlZmluZSBfX05SX2dldHBpZAkJIDIwCisjZGVmaW5lIF9fTlJfbW91bnQJCSAyMQorI2RlZmluZSBfX05SX3Vtb3VudAkJIDIyCisjZGVmaW5lIF9fTlJfc2V0dWlkCQkgMjMKKyNkZWZpbmUgX19OUl9nZXR1aWQJCSAyNAorI2RlZmluZSBfX05SX3N0aW1lCQkgMjUKKyNkZWZpbmUgX19OUl9wdHJhY2UJCSAyNgorI2RlZmluZSBfX05SX2FsYXJtCQkgMjcKKyNkZWZpbmUgX19OUl9vbGRmc3RhdAkJIDI4CisjZGVmaW5lIF9fTlJfcGF1c2UJCSAyOQorI2RlZmluZSBfX05SX3V0aW1lCQkgMzAKKyNkZWZpbmUgX19OUl9zdHR5CQkgMzEKKyNkZWZpbmUgX19OUl9ndHR5CQkgMzIKKyNkZWZpbmUgX19OUl9hY2Nlc3MJCSAzMworI2RlZmluZSBfX05SX25pY2UJCSAzNAorI2RlZmluZSBfX05SX2Z0aW1lCQkgMzUKKyNkZWZpbmUgX19OUl9zeW5jCQkgMzYKKyNkZWZpbmUgX19OUl9raWxsCQkgMzcKKyNkZWZpbmUgX19OUl9yZW5hbWUJCSAzOAorI2RlZmluZSBfX05SX21rZGlyCQkgMzkKKyNkZWZpbmUgX19OUl9ybWRpcgkJIDQwCisjZGVmaW5lIF9fTlJfZHVwCQkgNDEKKyNkZWZpbmUgX19OUl9waXBlCQkgNDIKKyNkZWZpbmUgX19OUl90aW1lcwkJIDQzCisjZGVmaW5lIF9fTlJfcHJvZgkJIDQ0CisjZGVmaW5lIF9fTlJfYnJrCQkgNDUKKyNkZWZpbmUgX19OUl9zZXRnaWQJCSA0NgorI2RlZmluZSBfX05SX2dldGdpZAkJIDQ3CisjZGVmaW5lIF9fTlJfc2lnbmFsCQkgNDgKKyNkZWZpbmUgX19OUl9nZXRldWlkCQkgNDkKKyNkZWZpbmUgX19OUl9nZXRlZ2lkCQkgNTAKKyNkZWZpbmUgX19OUl9hY2N0CQkgNTEKKyNkZWZpbmUgX19OUl91bW91bnQyCQkgNTIKKyNkZWZpbmUgX19OUl9sb2NrCQkgNTMKKyNkZWZpbmUgX19OUl9pb2N0bAkJIDU0CisjZGVmaW5lIF9fTlJfZmNudGwJCSA1NQorI2RlZmluZSBfX05SX21weAkJIDU2CisjZGVmaW5lIF9fTlJfc2V0cGdpZAkJIDU3CisjZGVmaW5lIF9fTlJfdWxpbWl0CQkgNTgKKyNkZWZpbmUgX19OUl9vbGRvbGR1bmFtZQkgNTkKKyNkZWZpbmUgX19OUl91bWFzawkJIDYwCisjZGVmaW5lIF9fTlJfY2hyb290CQkgNjEKKyNkZWZpbmUgX19OUl91c3RhdAkJIDYyCisjZGVmaW5lIF9fTlJfZHVwMgkJIDYzCisjZGVmaW5lIF9fTlJfZ2V0cHBpZAkJIDY0CisjZGVmaW5lIF9fTlJfZ2V0cGdycAkJIDY1CisjZGVmaW5lIF9fTlJfc2V0c2lkCQkgNjYKKyNkZWZpbmUgX19OUl9zaWdhY3Rpb24JCSA2NworI2RlZmluZSBfX05SX3NnZXRtYXNrCQkgNjgKKyNkZWZpbmUgX19OUl9zc2V0bWFzawkJIDY5CisjZGVmaW5lIF9fTlJfc2V0cmV1aWQJCSA3MAorI2RlZmluZSBfX05SX3NldHJlZ2lkCQkgNzEKKyNkZWZpbmUgX19OUl9zaWdzdXNwZW5kCQkgNzIKKyNkZWZpbmUgX19OUl9zaWdwZW5kaW5nCQkgNzMKKyNkZWZpbmUgX19OUl9zZXRob3N0bmFtZQkgNzQKKyNkZWZpbmUgX19OUl9zZXRybGltaXQJCSA3NQorI2RlZmluZSBfX05SX2dldHJsaW1pdAkJIDc2CisjZGVmaW5lIF9fTlJfZ2V0cnVzYWdlCQkgNzcKKyNkZWZpbmUgX19OUl9nZXR0aW1lb2ZkYXkJIDc4CisjZGVmaW5lIF9fTlJfc2V0dGltZW9mZGF5CSA3OQorI2RlZmluZSBfX05SX2dldGdyb3VwcwkJIDgwCisjZGVmaW5lIF9fTlJfc2V0Z3JvdXBzCQkgODEKKyNkZWZpbmUgX19OUl9zZWxlY3QJCSA4MgorI2RlZmluZSBfX05SX3N5bWxpbmsJCSA4MworI2RlZmluZSBfX05SX29sZGxzdGF0CQkgODQKKyNkZWZpbmUgX19OUl9yZWFkbGluawkJIDg1CisjZGVmaW5lIF9fTlJfdXNlbGliCQkgODYKKyNkZWZpbmUgX19OUl9zd2Fwb24JCSA4NworI2RlZmluZSBfX05SX3JlYm9vdAkJIDg4CisjZGVmaW5lIF9fTlJfcmVhZGRpcgkJIDg5CisjZGVmaW5lIF9fTlJfbW1hcAkJIDkwCisjZGVmaW5lIF9fTlJfbXVubWFwCQkgOTEKKyNkZWZpbmUgX19OUl90cnVuY2F0ZQkJIDkyCisjZGVmaW5lIF9fTlJfZnRydW5jYXRlCQkgOTMKKyNkZWZpbmUgX19OUl9mY2htb2QJCSA5NAorI2RlZmluZSBfX05SX2ZjaG93bgkJIDk1CisjZGVmaW5lIF9fTlJfZ2V0cHJpb3JpdHkJIDk2CisjZGVmaW5lIF9fTlJfc2V0cHJpb3JpdHkJIDk3CisjZGVmaW5lIF9fTlJfcHJvZmlsCQkgOTgKKyNkZWZpbmUgX19OUl9zdGF0ZnMJCSA5OQorI2RlZmluZSBfX05SX2ZzdGF0ZnMJCTEwMAorI2RlZmluZSBfX05SX2lvcGVybQkJMTAxCisjZGVmaW5lIF9fTlJfc29ja2V0Y2FsbAkJMTAyCisjZGVmaW5lIF9fTlJfc3lzbG9nCQkxMDMKKyNkZWZpbmUgX19OUl9zZXRpdGltZXIJCTEwNAorI2RlZmluZSBfX05SX2dldGl0aW1lcgkJMTA1CisjZGVmaW5lIF9fTlJfc3RhdAkJMTA2CisjZGVmaW5lIF9fTlJfbHN0YXQJCTEwNworI2RlZmluZSBfX05SX2ZzdGF0CQkxMDgKKyNkZWZpbmUgX19OUl9vbGR1bmFtZQkJMTA5CisjZGVmaW5lIF9fTlJfaW9wbAkJMTEwCisjZGVmaW5lIF9fTlJfdmhhbmd1cAkJMTExCisjZGVmaW5lIF9fTlJfaWRsZQkJMTEyCisjZGVmaW5lIF9fTlJfdm04NgkJMTEzCisjZGVmaW5lIF9fTlJfd2FpdDQJCTExNAorI2RlZmluZSBfX05SX3N3YXBvZmYJCTExNQorI2RlZmluZSBfX05SX3N5c2luZm8JCTExNgorI2RlZmluZSBfX05SX2lwYwkJMTE3CisjZGVmaW5lIF9fTlJfZnN5bmMJCTExOAorI2RlZmluZSBfX05SX3NpZ3JldHVybgkJMTE5CisjZGVmaW5lIF9fTlJfY2xvbmUJCTEyMAorI2RlZmluZSBfX05SX3NldGRvbWFpbm5hbWUJMTIxCisjZGVmaW5lIF9fTlJfdW5hbWUJCTEyMgorI2RlZmluZSBfX05SX21vZGlmeV9sZHQJCTEyMworI2RlZmluZSBfX05SX2FkanRpbWV4CQkxMjQKKyNkZWZpbmUgX19OUl9tcHJvdGVjdAkJMTI1CisjZGVmaW5lIF9fTlJfc2lncHJvY21hc2sJMTI2CisjZGVmaW5lIF9fTlJfY3JlYXRlX21vZHVsZQkxMjcKKyNkZWZpbmUgX19OUl9pbml0X21vZHVsZQkxMjgKKyNkZWZpbmUgX19OUl9kZWxldGVfbW9kdWxlCTEyOQorI2RlZmluZSBfX05SX2dldF9rZXJuZWxfc3ltcwkxMzAKKyNkZWZpbmUgX19OUl9xdW90YWN0bAkJMTMxCisjZGVmaW5lIF9fTlJfZ2V0cGdpZAkJMTMyCisjZGVmaW5lIF9fTlJfZmNoZGlyCQkxMzMKKyNkZWZpbmUgX19OUl9iZGZsdXNoCQkxMzQKKyNkZWZpbmUgX19OUl9zeXNmcwkJMTM1CisjZGVmaW5lIF9fTlJfcGVyc29uYWxpdHkJMTM2CisjZGVmaW5lIF9fTlJfYWZzX3N5c2NhbGwJMTM3IC8qIFN5c2NhbGwgZm9yIEFuZHJldyBGaWxlIFN5c3RlbSAqLworI2RlZmluZSBfX05SX3NldGZzdWlkCQkxMzgKKyNkZWZpbmUgX19OUl9zZXRmc2dpZAkJMTM5CisjZGVmaW5lIF9fTlJfX2xsc2VlawkJMTQwCisjZGVmaW5lIF9fTlJfZ2V0ZGVudHMJCTE0MQorI2RlZmluZSBfX05SX19uZXdzZWxlY3QJCTE0MgorI2RlZmluZSBfX05SX2Zsb2NrCQkxNDMKKyNkZWZpbmUgX19OUl9tc3luYwkJMTQ0CisjZGVmaW5lIF9fTlJfcmVhZHYJCTE0NQorI2RlZmluZSBfX05SX3dyaXRldgkJMTQ2CisjZGVmaW5lIF9fTlJfZ2V0c2lkCQkxNDcKKyNkZWZpbmUgX19OUl9mZGF0YXN5bmMJCTE0OAorI2RlZmluZSBfX05SX19zeXNjdGwJCTE0OQorI2RlZmluZSBfX05SX21sb2NrCQkxNTAKKyNkZWZpbmUgX19OUl9tdW5sb2NrCQkxNTEKKyNkZWZpbmUgX19OUl9tbG9ja2FsbAkJMTUyCisjZGVmaW5lIF9fTlJfbXVubG9ja2FsbAkJMTUzCisjZGVmaW5lIF9fTlJfc2NoZWRfc2V0cGFyYW0JCTE1NAorI2RlZmluZSBfX05SX3NjaGVkX2dldHBhcmFtCQkxNTUKKyNkZWZpbmUgX19OUl9zY2hlZF9zZXRzY2hlZHVsZXIJCTE1NgorI2RlZmluZSBfX05SX3NjaGVkX2dldHNjaGVkdWxlcgkJMTU3CisjZGVmaW5lIF9fTlJfc2NoZWRfeWllbGQJCTE1OAorI2RlZmluZSBfX05SX3NjaGVkX2dldF9wcmlvcml0eV9tYXgJMTU5CisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbgkxNjAKKyNkZWZpbmUgX19OUl9zY2hlZF9ycl9nZXRfaW50ZXJ2YWwJMTYxCisjZGVmaW5lIF9fTlJfbmFub3NsZWVwCQkxNjIKKyNkZWZpbmUgX19OUl9tcmVtYXAJCTE2MworI2RlZmluZSBfX05SX3NldHJlc3VpZAkJMTY0CisjZGVmaW5lIF9fTlJfZ2V0cmVzdWlkCQkxNjUKKyNkZWZpbmUgX19OUl9xdWVyeV9tb2R1bGUJMTY2CisjZGVmaW5lIF9fTlJfcG9sbAkJMTY3CisjZGVmaW5lIF9fTlJfbmZzc2VydmN0bAkJMTY4CisjZGVmaW5lIF9fTlJfc2V0cmVzZ2lkCQkxNjkKKyNkZWZpbmUgX19OUl9nZXRyZXNnaWQJCTE3MAorI2RlZmluZSBfX05SX3ByY3RsCQkxNzEKKyNkZWZpbmUgX19OUl9ydF9zaWdyZXR1cm4JMTcyCisjZGVmaW5lIF9fTlJfcnRfc2lnYWN0aW9uCTE3MworI2RlZmluZSBfX05SX3J0X3NpZ3Byb2NtYXNrCTE3NAorI2RlZmluZSBfX05SX3J0X3NpZ3BlbmRpbmcJMTc1CisjZGVmaW5lIF9fTlJfcnRfc2lndGltZWR3YWl0CTE3NgorI2RlZmluZSBfX05SX3J0X3NpZ3F1ZXVlaW5mbwkxNzcKKyNkZWZpbmUgX19OUl9ydF9zaWdzdXNwZW5kCTE3OAorI2RlZmluZSBfX05SX3ByZWFkNjQJCTE3OQorI2RlZmluZSBfX05SX3B3cml0ZTY0CQkxODAKKyNkZWZpbmUgX19OUl9jaG93bgkJMTgxCisjZGVmaW5lIF9fTlJfZ2V0Y3dkCQkxODIKKyNkZWZpbmUgX19OUl9jYXBnZXQJCTE4MworI2RlZmluZSBfX05SX2NhcHNldAkJMTg0CisjZGVmaW5lIF9fTlJfc2lnYWx0c3RhY2sJMTg1CisjZGVmaW5lIF9fTlJfc2VuZGZpbGUJCTE4NgorI2RlZmluZSBfX05SX2dldHBtc2cJCTE4NwkvKiBzb21lIHBlb3BsZSBhY3R1YWxseSB3YW50IHN0cmVhbXMgKi8KKyNkZWZpbmUgX19OUl9wdXRwbXNnCQkxODgJLyogc29tZSBwZW9wbGUgYWN0dWFsbHkgd2FudCBzdHJlYW1zICovCisjZGVmaW5lIF9fTlJfdmZvcmsJCTE4OQorI2RlZmluZSBfX05SX3VnZXRybGltaXQJCTE5MAkvKiBTdVMgY29tcGxpYW50IGdldHJsaW1pdCAqLworI2RlZmluZSBfX05SX3JlYWRhaGVhZAkJMTkxCisvKiAjZGVmaW5lIF9fTlJfbW1hcDIJCTE5MgkzMmJpdCBvbmx5ICovCisvKiAjZGVmaW5lIF9fTlJfdHJ1bmNhdGU2NAkxOTMJMzJiaXQgb25seSAqLworLyogI2RlZmluZSBfX05SX2Z0cnVuY2F0ZTY0CTE5NAkzMmJpdCBvbmx5ICovCisvKiAjZGVmaW5lIF9fTlJfc3RhdDY0CQkxOTUJMzJiaXQgb25seSAqLworLyogI2RlZmluZSBfX05SX2xzdGF0NjQJCTE5NgkzMmJpdCBvbmx5ICovCisvKiAjZGVmaW5lIF9fTlJfZnN0YXQ2NAkJMTk3CTMyYml0IG9ubHkgKi8KKyNkZWZpbmUgX19OUl9wY2ljb25maWdfcmVhZAkxOTgKKyNkZWZpbmUgX19OUl9wY2ljb25maWdfd3JpdGUJMTk5CisjZGVmaW5lIF9fTlJfcGNpY29uZmlnX2lvYmFzZQkyMDAKKyNkZWZpbmUgX19OUl9tdWx0aXBsZXhlcgkyMDEKKyNkZWZpbmUgX19OUl9nZXRkZW50czY0CQkyMDIKKyNkZWZpbmUgX19OUl9waXZvdF9yb290CQkyMDMKKy8qICNkZWZpbmUgX19OUl9mY250bDY0CQkyMDQJMzJiaXQgb25seSAqLworI2RlZmluZSBfX05SX21hZHZpc2UJCTIwNQorI2RlZmluZSBfX05SX21pbmNvcmUJCTIwNgorI2RlZmluZSBfX05SX2dldHRpZAkJMjA3CisjZGVmaW5lIF9fTlJfdGtpbGwJCTIwOAorI2RlZmluZSBfX05SX3NldHhhdHRyCQkyMDkKKyNkZWZpbmUgX19OUl9sc2V0eGF0dHIJCTIxMAorI2RlZmluZSBfX05SX2ZzZXR4YXR0cgkJMjExCisjZGVmaW5lIF9fTlJfZ2V0eGF0dHIJCTIxMgorI2RlZmluZSBfX05SX2xnZXR4YXR0cgkJMjEzCisjZGVmaW5lIF9fTlJfZmdldHhhdHRyCQkyMTQKKyNkZWZpbmUgX19OUl9saXN0eGF0dHIJCTIxNQorI2RlZmluZSBfX05SX2xsaXN0eGF0dHIJCTIxNgorI2RlZmluZSBfX05SX2ZsaXN0eGF0dHIJCTIxNworI2RlZmluZSBfX05SX3JlbW92ZXhhdHRyCTIxOAorI2RlZmluZSBfX05SX2xyZW1vdmV4YXR0cgkyMTkKKyNkZWZpbmUgX19OUl9mcmVtb3ZleGF0dHIJMjIwCisjZGVmaW5lIF9fTlJfZnV0ZXgJCTIyMQorI2RlZmluZSBfX05SX3NjaGVkX3NldGFmZmluaXR5CTIyMgorI2RlZmluZSBfX05SX3NjaGVkX2dldGFmZmluaXR5CTIyMworLyogMjI0IGN1cnJlbnRseSB1bnVzZWQgKi8KKyNkZWZpbmUgX19OUl90dXhjYWxsCQkyMjUKKy8qICNkZWZpbmUgX19OUl9zZW5kZmlsZTY0CTIyNgkzMmJpdCBvbmx5ICovCisjZGVmaW5lIF9fTlJfaW9fc2V0dXAJCTIyNworI2RlZmluZSBfX05SX2lvX2Rlc3Ryb3kJCTIyOAorI2RlZmluZSBfX05SX2lvX2dldGV2ZW50cwkyMjkKKyNkZWZpbmUgX19OUl9pb19zdWJtaXQJCTIzMAorI2RlZmluZSBfX05SX2lvX2NhbmNlbAkJMjMxCisjZGVmaW5lIF9fTlJfc2V0X3RpZF9hZGRyZXNzCTIzMgorI2RlZmluZSBfX05SX2ZhZHZpc2U2NAkJMjMzCisjZGVmaW5lIF9fTlJfZXhpdF9ncm91cAkJMjM0CisjZGVmaW5lIF9fTlJfbG9va3VwX2Rjb29raWUJMjM1CisjZGVmaW5lIF9fTlJfZXBvbGxfY3JlYXRlCTIzNgorI2RlZmluZSBfX05SX2Vwb2xsX2N0bAkJMjM3CisjZGVmaW5lIF9fTlJfZXBvbGxfd2FpdAkJMjM4CisjZGVmaW5lIF9fTlJfcmVtYXBfZmlsZV9wYWdlcwkyMzkKKyNkZWZpbmUgX19OUl90aW1lcl9jcmVhdGUJMjQwCisjZGVmaW5lIF9fTlJfdGltZXJfc2V0dGltZQkyNDEKKyNkZWZpbmUgX19OUl90aW1lcl9nZXR0aW1lCTI0MgorI2RlZmluZSBfX05SX3RpbWVyX2dldG92ZXJydW4JMjQzCisjZGVmaW5lIF9fTlJfdGltZXJfZGVsZXRlCTI0NAorI2RlZmluZSBfX05SX2Nsb2NrX3NldHRpbWUJMjQ1CisjZGVmaW5lIF9fTlJfY2xvY2tfZ2V0dGltZQkyNDYKKyNkZWZpbmUgX19OUl9jbG9ja19nZXRyZXMJMjQ3CisjZGVmaW5lIF9fTlJfY2xvY2tfbmFub3NsZWVwCTI0OAorI2RlZmluZSBfX05SX3N3YXBjb250ZXh0CTI0OQorI2RlZmluZSBfX05SX3Rna2lsbAkJMjUwCisjZGVmaW5lIF9fTlJfdXRpbWVzCQkyNTEKKyNkZWZpbmUgX19OUl9zdGF0ZnM2NAkJMjUyCisjZGVmaW5lIF9fTlJfZnN0YXRmczY0CQkyNTMKKy8qICNkZWZpbmUgX19OUl9mYWR2aXNlNjRfNjQJMjU0CTMyYml0IG9ubHkgKi8KKyNkZWZpbmUgX19OUl9ydGFzCQkyNTUKKy8qIE51bWJlciAyNTYgaXMgcmVzZXJ2ZWQgZm9yIHN5c19kZWJ1Z19zZXRjb250ZXh0ICovCisvKiBOdW1iZXIgMjU3IGlzIHJlc2VydmVkIGZvciB2c2VydmVyICovCisvKiBOdW1iZXIgMjU4IGlzIHJlc2VydmVkIGZvciBuZXcgc3lzX3JlbWFwX2ZpbGVfcGFnZXMgKi8KKyNkZWZpbmUgX19OUl9tYmluZAkJMjU5CisjZGVmaW5lIF9fTlJfZ2V0X21lbXBvbGljeQkyNjAKKyNkZWZpbmUgX19OUl9zZXRfbWVtcG9saWN5CTI2MQorI2RlZmluZSBfX05SX21xX29wZW4JCTI2MgorI2RlZmluZSBfX05SX21xX3VubGluawkJMjYzCisjZGVmaW5lIF9fTlJfbXFfdGltZWRzZW5kCTI2NAorI2RlZmluZSBfX05SX21xX3RpbWVkcmVjZWl2ZQkyNjUKKyNkZWZpbmUgX19OUl9tcV9ub3RpZnkJCTI2NgorI2RlZmluZSBfX05SX21xX2dldHNldGF0dHIJMjY3CisjZGVmaW5lIF9fTlJfa2V4ZWNfbG9hZAkJMjY4CisjZGVmaW5lIF9fTlJfYWRkX2tleQkJMjY5CisjZGVmaW5lIF9fTlJfcmVxdWVzdF9rZXkJMjcwCisjZGVmaW5lIF9fTlJfa2V5Y3RsCQkyNzEKKyNkZWZpbmUgX19OUl93YWl0aWQJCTI3MgorCisjZGVmaW5lIF9fTlJfc3lzY2FsbHMJCTI3MworI2lmZGVmIF9fS0VSTkVMX18KKyNkZWZpbmUgTlJfc3lzY2FsbHMJX19OUl9zeXNjYWxscworI2VuZGlmCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKy8qIE9uIHBvd2VycGMgYSBzeXN0ZW0gY2FsbCBiYXNpY2FsbHkgY2xvYmJlcnMgdGhlIHNhbWUgcmVnaXN0ZXJzIGxpa2UgYQorICogZnVuY3Rpb24gY2FsbCwgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIExSICh3aGljaCBpcyBuZWVkZWQgZm9yIHRoZQorICogInNjOyBibnNsciIgc2VxdWVuY2UpIGFuZCBDUiAod2hlcmUgb25seSBDUjAuU08gaXMgY2xvYmJlcmVkIHRvIHNpZ25hbAorICogYW4gZXJyb3IgcmV0dXJuIHN0YXR1cykuCisgKi8KKworI2RlZmluZSBfX3N5c2NhbGxfbnIobnIsIHR5cGUsIG5hbWUsIGFyZ3MuLi4pCQkJCVwKKwl1bnNpZ25lZCBsb25nIF9fc2NfcmV0LCBfX3NjX2VycjsJCQkJXAorCXsJCQkJCQkJCVwKKwkJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3NjXzAgIF9fYXNtX18gKCJyMCIpOwkJXAorCQlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fc2NfMyAgX19hc21fXyAoInIzIik7CQlcCisJCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19zY180ICBfX2FzbV9fICgicjQiKTsJCVwKKwkJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3NjXzUgIF9fYXNtX18gKCJyNSIpOwkJXAorCQlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fc2NfNiAgX19hc21fXyAoInI2Iik7CQlcCisJCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19zY183ICBfX2FzbV9fICgicjciKTsJCVwKKwkJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3NjXzggIF9fYXNtX18gKCJyOCIpOwkJXAorCQkJCQkJCQkJXAorCQlfX3NjX2xvYWRhcmdzXyMjbnIobmFtZSwgYXJncyk7CQkJCVwKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18JCQkJCVwKKwkJCSgic2MgICAgICAgICAgIFxuXHQiCQkJCVwKKwkJCSAibWZjciAlMCAgICAgICIJCQkJXAorCQkJOiAiPSZyIiAoX19zY18wKSwJCQkJXAorCQkJICAiPSZyIiAoX19zY18zKSwgICI9JnIiIChfX3NjXzQpLAkJXAorCQkJICAiPSZyIiAoX19zY181KSwgICI9JnIiIChfX3NjXzYpLAkJXAorCQkJICAiPSZyIiAoX19zY183KSwgICI9JnIiIChfX3NjXzgpCQlcCisJCQk6IF9fc2NfYXNtX2lucHV0XyMjbnIJCQkJXAorCQkJOiAiY3IwIiwgImN0ciIsICJtZW1vcnkiLAkJCVwKKwkJCSAgICAgICAgInI5IiwgInIxMCIsInIxMSIsICJyMTIiKTsJCVwKKwkJX19zY19yZXQgPSBfX3NjXzM7CQkJCQlcCisJCV9fc2NfZXJyID0gX19zY18wOwkJCQkJXAorCX0JCQkJCQkJCVwKKwlpZiAoX19zY19lcnIgJiAweDEwMDAwMDAwKQkJCQkJXAorCXsJCQkJCQkJCVwKKwkJZXJybm8gPSBfX3NjX3JldDsJCQkJCVwKKwkJX19zY19yZXQgPSAtMTsJCQkJCQlcCisJfQkJCQkJCQkJXAorCXJldHVybiAodHlwZSkgX19zY19yZXQKKworI2RlZmluZSBfX3NjX2xvYWRhcmdzXzAobmFtZSwgZHVtbXkuLi4pCQkJCQlcCisJX19zY18wID0gX19OUl8jI25hbWUKKyNkZWZpbmUgX19zY19sb2FkYXJnc18xKG5hbWUsIGFyZzEpCQkJCQlcCisJX19zY19sb2FkYXJnc18wKG5hbWUpOwkJCQkJCVwKKwlfX3NjXzMgPSAodW5zaWduZWQgbG9uZykgKGFyZzEpCisjZGVmaW5lIF9fc2NfbG9hZGFyZ3NfMihuYW1lLCBhcmcxLCBhcmcyKQkJCQlcCisJX19zY19sb2FkYXJnc18xKG5hbWUsIGFyZzEpOwkJCQkJXAorCV9fc2NfNCA9ICh1bnNpZ25lZCBsb25nKSAoYXJnMikKKyNkZWZpbmUgX19zY19sb2FkYXJnc18zKG5hbWUsIGFyZzEsIGFyZzIsIGFyZzMpCQkJCVwKKwlfX3NjX2xvYWRhcmdzXzIobmFtZSwgYXJnMSwgYXJnMik7CQkJCVwKKwlfX3NjXzUgPSAodW5zaWduZWQgbG9uZykgKGFyZzMpCisjZGVmaW5lIF9fc2NfbG9hZGFyZ3NfNChuYW1lLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0KQkJCVwKKwlfX3NjX2xvYWRhcmdzXzMobmFtZSwgYXJnMSwgYXJnMiwgYXJnMyk7CQkJXAorCV9fc2NfNiA9ICh1bnNpZ25lZCBsb25nKSAoYXJnNCkKKyNkZWZpbmUgX19zY19sb2FkYXJnc181KG5hbWUsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUpCQlcCisJX19zY19sb2FkYXJnc180KG5hbWUsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQpOwkJCVwKKwlfX3NjXzcgPSAodW5zaWduZWQgbG9uZykgKGFyZzUpCisjZGVmaW5lIF9fc2NfbG9hZGFyZ3NfNihuYW1lLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1LCBhcmc2KQlcCisJX19zY19sb2FkYXJnc181KG5hbWUsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUpOwkJXAorCV9fc2NfOCA9ICh1bnNpZ25lZCBsb25nKSAoYXJnNikKKworI2RlZmluZSBfX3NjX2FzbV9pbnB1dF8wICIwIiAoX19zY18wKQorI2RlZmluZSBfX3NjX2FzbV9pbnB1dF8xIF9fc2NfYXNtX2lucHV0XzAsICIxIiAoX19zY18zKQorI2RlZmluZSBfX3NjX2FzbV9pbnB1dF8yIF9fc2NfYXNtX2lucHV0XzEsICIyIiAoX19zY180KQorI2RlZmluZSBfX3NjX2FzbV9pbnB1dF8zIF9fc2NfYXNtX2lucHV0XzIsICIzIiAoX19zY181KQorI2RlZmluZSBfX3NjX2FzbV9pbnB1dF80IF9fc2NfYXNtX2lucHV0XzMsICI0IiAoX19zY182KQorI2RlZmluZSBfX3NjX2FzbV9pbnB1dF81IF9fc2NfYXNtX2lucHV0XzQsICI1IiAoX19zY183KQorI2RlZmluZSBfX3NjX2FzbV9pbnB1dF82IF9fc2NfYXNtX2lucHV0XzUsICI2IiAoX19zY184KQorCisjZGVmaW5lIF9zeXNjYWxsMCh0eXBlLG5hbWUpCQkJCQkJXAordHlwZSBuYW1lKHZvaWQpCQkJCQkJCQlcCit7CQkJCQkJCQkJXAorCV9fc3lzY2FsbF9ucigwLCB0eXBlLCBuYW1lKTsJCQkJCVwKK30KKworI2RlZmluZSBfc3lzY2FsbDEodHlwZSxuYW1lLHR5cGUxLGFyZzEpCQkJCQlcCit0eXBlIG5hbWUodHlwZTEgYXJnMSkJCQkJCQkJXAorewkJCQkJCQkJCVwKKwlfX3N5c2NhbGxfbnIoMSwgdHlwZSwgbmFtZSwgYXJnMSk7CQkJCVwKK30KKworI2RlZmluZSBfc3lzY2FsbDIodHlwZSxuYW1lLHR5cGUxLGFyZzEsdHlwZTIsYXJnMikJCQlcCit0eXBlIG5hbWUodHlwZTEgYXJnMSwgdHlwZTIgYXJnMikJCQkJCVwKK3sJCQkJCQkJCQlcCisJX19zeXNjYWxsX25yKDIsIHR5cGUsIG5hbWUsIGFyZzEsIGFyZzIpOwkJCVwKK30KKworI2RlZmluZSBfc3lzY2FsbDModHlwZSxuYW1lLHR5cGUxLGFyZzEsdHlwZTIsYXJnMix0eXBlMyxhcmczKQkJXAordHlwZSBuYW1lKHR5cGUxIGFyZzEsIHR5cGUyIGFyZzIsIHR5cGUzIGFyZzMpCQkJCVwKK3sJCQkJCQkJCQlcCisJX19zeXNjYWxsX25yKDMsIHR5cGUsIG5hbWUsIGFyZzEsIGFyZzIsIGFyZzMpOwkJCVwKK30KKworI2RlZmluZSBfc3lzY2FsbDQodHlwZSxuYW1lLHR5cGUxLGFyZzEsdHlwZTIsYXJnMix0eXBlMyxhcmczLHR5cGU0LGFyZzQpIFwKK3R5cGUgbmFtZSh0eXBlMSBhcmcxLCB0eXBlMiBhcmcyLCB0eXBlMyBhcmczLCB0eXBlNCBhcmc0KQkJXAorewkJCQkJCQkJCVwKKwlfX3N5c2NhbGxfbnIoNCwgdHlwZSwgbmFtZSwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCk7CQlcCit9CisKKyNkZWZpbmUgX3N5c2NhbGw1KHR5cGUsbmFtZSx0eXBlMSxhcmcxLHR5cGUyLGFyZzIsdHlwZTMsYXJnMyx0eXBlNCxhcmc0LHR5cGU1LGFyZzUpIFwKK3R5cGUgbmFtZSh0eXBlMSBhcmcxLCB0eXBlMiBhcmcyLCB0eXBlMyBhcmczLCB0eXBlNCBhcmc0LCB0eXBlNSBhcmc1KQlcCit7CQkJCQkJCQkJXAorCV9fc3lzY2FsbF9ucig1LCB0eXBlLCBuYW1lLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1KTsJXAorfQorI2RlZmluZSBfc3lzY2FsbDYodHlwZSxuYW1lLHR5cGUxLGFyZzEsdHlwZTIsYXJnMix0eXBlMyxhcmczLHR5cGU0LGFyZzQsdHlwZTUsYXJnNSx0eXBlNixhcmc2KSBcCit0eXBlIG5hbWUodHlwZTEgYXJnMSwgdHlwZTIgYXJnMiwgdHlwZTMgYXJnMywgdHlwZTQgYXJnNCwgdHlwZTUgYXJnNSwgdHlwZTYgYXJnNikJXAorewkJCQkJCQkJCVwKKwlfX3N5c2NhbGxfbnIoNiwgdHlwZSwgbmFtZSwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSwgYXJnNik7CVwKK30KKworI2lmZGVmIF9fS0VSTkVMX1NZU0NBTExTX18KKworLyoKKyAqIEZvcmtpbmcgZnJvbSBrZXJuZWwgc3BhY2Ugd2lsbCByZXN1bHQgaW4gdGhlIGNoaWxkIGdldHRpbmcgYSBuZXcsCisgKiBlbXB0eSBrZXJuZWwgc3RhY2sgYXJlYS4gIFRodXMgdGhlIGNoaWxkIGNhbm5vdCBhY2Nlc3MgYXV0b21hdGljCisgKiB2YXJpYWJsZXMgc2V0IGluIHRoZSBwYXJlbnQgdW5sZXNzIHRoZXkgYXJlIGluIHJlZ2lzdGVycywgYW5kIHRoZQorICogcHJvY2VkdXJlIHdoZXJlIHRoZSBmb3JrIHdhcyBkb25lIGNhbm5vdCByZXR1cm4gdG8gaXRzIGNhbGxlciBpbgorICogdGhlIGNoaWxkLgorICovCisKKy8qCisgKiBTeXN0ZW0gY2FsbCBwcm90b3R5cGVzLgorICovCitzdGF0aWMgaW5saW5lIF9zeXNjYWxsMyhpbnQsIGV4ZWN2ZSwgX19jb25zdF9fIGNoYXIgKiwgZmlsZSwgY2hhciAqKiwgYXJndiwKKwkJCWNoYXIgKiosZW52cCkKKworI2VuZGlmIC8qIF9fS0VSTkVMX1NZU0NBTExTX18gKi8KKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisKKyNkZWZpbmUgX19BUkNIX1dBTlRfSVBDX1BBUlNFX1ZFUlNJT04KKyNkZWZpbmUgX19BUkNIX1dBTlRfT0xEX1JFQURESVIKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1RBVDY0CisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19BTEFSTQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfR0VUSE9TVE5BTUUKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1BBVVNFCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TR0VUTUFTSworI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHTkFMCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19USU1FCisjZGVmaW5lIF9fQVJDSF9XQU5UX0NPTVBBVF9TWVNfVElNRQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfVVRJTUUKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1dBSVRQSUQKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NPQ0tFVENBTEwKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0ZBRFZJU0U2NAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfR0VUUEdSUAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfTExTRUVLCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19OSUNFCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19PTERfR0VUUkxJTUlUCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19PTERVTU9VTlQKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR1BFTkRJTkcKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR1BST0NNQVNLCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19SVF9TSUdBQ1RJT04KKwordW5zaWduZWQgbG9uZyBzeXNfbW1hcCh1bnNpZ25lZCBsb25nIGFkZHIsIHNpemVfdCBsZW4sIHVuc2lnbmVkIGxvbmcgcHJvdCwKKwkJICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHVuc2lnbmVkIGxvbmcgZmQsIG9mZl90IG9mZnNldCk7CitzdHJ1Y3QgcHRfcmVnczsKK2ludCBzeXNfZXhlY3ZlKHVuc2lnbmVkIGxvbmcgYTAsIHVuc2lnbmVkIGxvbmcgYTEsIHVuc2lnbmVkIGxvbmcgYTIsCisJCXVuc2lnbmVkIGxvbmcgYTMsIHVuc2lnbmVkIGxvbmcgYTQsIHVuc2lnbmVkIGxvbmcgYTUsCisJCXN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2ludCBzeXNfY2xvbmUodW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywgdW5zaWduZWQgbG9uZyBwMiwgdW5zaWduZWQgbG9uZyBwMywKKwkJdW5zaWduZWQgbG9uZyBwNCwgdW5zaWduZWQgbG9uZyBwNSwgdW5zaWduZWQgbG9uZyBwNiwKKwkJc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworaW50IHN5c19mb3JrKHVuc2lnbmVkIGxvbmcgcDEsIHVuc2lnbmVkIGxvbmcgcDIsIHVuc2lnbmVkIGxvbmcgcDMsCisJCXVuc2lnbmVkIGxvbmcgcDQsIHVuc2lnbmVkIGxvbmcgcDUsIHVuc2lnbmVkIGxvbmcgcDYsCisJCXN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2ludCBzeXNfdmZvcmsodW5zaWduZWQgbG9uZyBwMSwgdW5zaWduZWQgbG9uZyBwMiwgdW5zaWduZWQgbG9uZyBwMywKKwkJdW5zaWduZWQgbG9uZyBwNCwgdW5zaWduZWQgbG9uZyBwNSwgdW5zaWduZWQgbG9uZyBwNiwKKwkJc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworaW50IHN5c19waXBlKGludCBfX3VzZXIgKmZpbGRlcyk7CitpbnQgc3lzX3B0cmFjZShsb25nIHJlcXVlc3QsIGxvbmcgcGlkLCBsb25nIGFkZHIsIGxvbmcgZGF0YSk7CitzdHJ1Y3Qgc2lnYWN0aW9uOworbG9uZyBzeXNfcnRfc2lnYWN0aW9uKGludCBzaWcsIGNvbnN0IHN0cnVjdCBzaWdhY3Rpb24gX191c2VyICphY3QsCisJCSAgICAgIHN0cnVjdCBzaWdhY3Rpb24gX191c2VyICpvYWN0LCBzaXplX3Qgc2lnc2V0c2l6ZSk7CisKKy8qCisgKiAiQ29uZGl0aW9uYWwiIHN5c2NhbGxzCisgKgorICogV2hhdCB3ZSB3YW50IGlzIF9fYXR0cmlidXRlX18oKHdlYWssYWxpYXMoInN5c19uaV9zeXNjYWxsIikpKSwKKyAqIGJ1dCBpdCBkb2Vzbid0IHdvcmsgb24gYWxsIHRvb2xjaGFpbnMsIHNvIHdlIGp1c3QgZG8gaXQgYnkgaGFuZAorICovCisjZGVmaW5lIGNvbmRfc3lzY2FsbCh4KSBhc20oIi53ZWFrXHQuIiAjeCAiXG5cdC5zZXRcdC4iICN4ICIsLnN5c19uaV9zeXNjYWxsIikKKworI2VuZGlmCQkvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZgkJLyogX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiBfQVNNX1BQQ19VTklTVERfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L3VzZXIuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L3VzZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2Q2NTU0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvdXNlci5oCkBAIC0wLDAgKzEsNTggQEAKKyNpZm5kZWYgX1BQQ19VU0VSX0gKKyNkZWZpbmUgX1BQQ19VU0VSX0gKKworLyogQWRhcHRlZCBmcm9tIDxhc20tYWxwaGEvdXNlci5oPiAKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKworLyoKKyAqIENvcmUgZmlsZSBmb3JtYXQ6IFRoZSBjb3JlIGZpbGUgaXMgd3JpdHRlbiBpbiBzdWNoIGEgd2F5IHRoYXQgZ2RiCisgKiBjYW4gdW5kZXJzdGFuZCBpdCBhbmQgcHJvdmlkZSB1c2VmdWwgaW5mb3JtYXRpb24gdG8gdGhlIHVzZXIgKHVuZGVyCisgKiBsaW51eCB3ZSB1c2UgdGhlIGB0cmFkLWNvcmUnIGJmZCwgTk9UIHRoZSBvc2YtY29yZSkuICBUaGUgZmlsZSBjb250ZW50cworICogYXJlIGFzIGZvbGxvd3M6CisgKgorICogIHVwYWdlOiAxIHBhZ2UgY29uc2lzdGluZyBvZiBhIHVzZXIgc3RydWN0IHRoYXQgdGVsbHMgZ2RiCisgKgl3aGF0IGlzIHByZXNlbnQgaW4gdGhlIGZpbGUuICBEaXJlY3RseSBhZnRlciB0aGlzIGlzIGEKKyAqCWNvcHkgb2YgdGhlIHRhc2tfc3RydWN0LCB3aGljaCBpcyBjdXJyZW50bHkgbm90IHVzZWQgYnkgZ2RiLAorICoJYnV0IGl0IG1heSBjb21lIGluIGhhbmR5IGF0IHNvbWUgcG9pbnQuICBBbGwgb2YgdGhlIHJlZ2lzdGVycworICoJYXJlIHN0b3JlZCBhcyBwYXJ0IG9mIHRoZSB1cGFnZS4gIFRoZSB1cGFnZSBzaG91bGQgYWx3YXlzIGJlCisgKglvbmx5IG9uZSBwYWdlIGxvbmcuCisgKiAgZGF0YTogVGhlIGRhdGEgc2VnbWVudCBmb2xsb3dzIG5leHQuICBXZSB1c2UgY3VycmVudC0+ZW5kX3RleHQgdG8KKyAqCWN1cnJlbnQtPmJyayB0byBwaWNrIHVwIGFsbCBvZiB0aGUgdXNlciB2YXJpYWJsZXMsIHBsdXMgYW55IG1lbW9yeQorICoJdGhhdCBtYXkgaGF2ZSBiZWVuIHNicmsnZWQuICBObyBhdHRlbXB0IGlzIG1hZGUgdG8gZGV0ZXJtaW5lIGlmIGEKKyAqCXBhZ2UgaXMgZGVtYW5kLXplcm8gb3IgaWYgYSBwYWdlIGlzIHRvdGFsbHkgdW51c2VkLCB3ZSBqdXN0IGNvdmVyCisgKgl0aGUgZW50aXJlIHJhbmdlLiAgQWxsIG9mIHRoZSBhZGRyZXNzZXMgYXJlIHJvdW5kZWQgaW4gc3VjaCBhIHdheQorICoJdGhhdCBhbiBpbnRlZ3JhbCBudW1iZXIgb2YgcGFnZXMgaXMgd3JpdHRlbi4KKyAqICBzdGFjazogV2UgbmVlZCB0aGUgc3RhY2sgaW5mb3JtYXRpb24gaW4gb3JkZXIgdG8gZ2V0IGEgbWVhbmluZ2Z1bAorICoJYmFja3RyYWNlLiAgV2UgbmVlZCB0byB3cml0ZSB0aGUgZGF0YSBmcm9tIHVzcCB0bworICoJY3VycmVudC0+c3RhcnRfc3RhY2ssIHNvIHdlIHJvdW5kIGVhY2ggb2YgdGhlc2UgaW4gb3JkZXIgdG8gYmUgYWJsZQorICoJdG8gd3JpdGUgYW4gaW50ZWdlciBudW1iZXIgb2YgcGFnZXMuCisgKi8KK3N0cnVjdCB1c2VyIHsKKwlzdHJ1Y3QgcHRfcmVncwlyZWdzOwkJCS8qIGVudGlyZSBtYWNoaW5lIHN0YXRlICovCisJc2l6ZV90CQl1X3RzaXplOwkJLyogdGV4dCBzaXplIChwYWdlcykgKi8KKwlzaXplX3QJCXVfZHNpemU7CQkvKiBkYXRhIHNpemUgKHBhZ2VzKSAqLworCXNpemVfdAkJdV9zc2l6ZTsJCS8qIHN0YWNrIHNpemUgKHBhZ2VzKSAqLworCXVuc2lnbmVkIGxvbmcJc3RhcnRfY29kZTsJCS8qIHRleHQgc3RhcnRpbmcgYWRkcmVzcyAqLworCXVuc2lnbmVkIGxvbmcJc3RhcnRfZGF0YTsJCS8qIGRhdGEgc3RhcnRpbmcgYWRkcmVzcyAqLworCXVuc2lnbmVkIGxvbmcJc3RhcnRfc3RhY2s7CQkvKiBzdGFjayBzdGFydGluZyBhZGRyZXNzICovCisJbG9uZyBpbnQJc2lnbmFsOwkJCS8qIHNpZ25hbCBjYXVzaW5nIGNvcmUgZHVtcCAqLworCXN0cnVjdCByZWdzICoJdV9hcjA7CQkJLyogaGVscCBnZGIgZmluZCByZWdpc3RlcnMgKi8KKwl1bnNpZ25lZCBsb25nCW1hZ2ljOwkJCS8qIGlkZW50aWZpZXMgYSBjb3JlIGZpbGUgKi8KKwljaGFyCQl1X2NvbW1bMzJdOwkJLyogdXNlciBjb21tYW5kIG5hbWUgKi8KK307CisKKyNkZWZpbmUgTkJQRwkJCVBBR0VfU0laRQorI2RlZmluZSBVUEFHRVMJCQkxCisjZGVmaW5lIEhPU1RfVEVYVF9TVEFSVF9BRERSCSh1LnN0YXJ0X2NvZGUpCisjZGVmaW5lIEhPU1RfREFUQV9TVEFSVF9BRERSCSh1LnN0YXJ0X2RhdGEpCisjZGVmaW5lIEhPU1RfU1RBQ0tfRU5EX0FERFIJKHUuc3RhcnRfc3RhY2sgKyB1LnVfc3NpemUgKiBOQlBHKQorCisjZW5kaWYgLyogX1BQQ19VU0VSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L3Zkc28uaCBiL2luY2x1ZGUvYXNtLXBwYzY0L3Zkc28uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzRlMTZjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvdmRzby5oCkBAIC0wLDAgKzEsODMgQEAKKyNpZm5kZWYgX19QUEM2NF9WRFNPX0hfXworI2RlZmluZSBfX1BQQzY0X1ZEU09fSF9fCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKy8qIERlZmF1bHQgbGluayBhZGRyZXNzZXMgZm9yIHRoZSB2RFNPcyAqLworI2RlZmluZSBWRFNPMzJfTEJBU0UJMAorI2RlZmluZSBWRFNPNjRfTEJBU0UJMAorCisvKiBEZWZhdWx0IG1hcCBhZGRyZXNzZXMgKi8KKyNkZWZpbmUgVkRTTzMyX01CQVNFCTB4MTAwMDAwCisjZGVmaW5lIFZEU082NF9NQkFTRQkweDEwMDAwMAorCisjZGVmaW5lIFZEU09fVkVSU0lPTl9TVFJJTkcJTElOVVhfMi42LjEyCisKKy8qIERlZmluZSBpZiA2NCBiaXRzIFZEU08gaGFzIHByb2NlZHVyZSBkZXNjcmlwdG9ycyAqLworI3VuZGVmIFZEUzY0X0hBU19ERVNDUklQVE9SUworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCitleHRlcm4gdW5zaWduZWQgaW50IHZkc282NF9wYWdlczsKK2V4dGVybiB1bnNpZ25lZCBpbnQgdmRzbzMyX3BhZ2VzOworCisvKiBPZmZzZXRzIHJlbGF0aXZlIHRvIHRocmVhZC0+dmRzb19iYXNlICovCitleHRlcm4gdW5zaWduZWQgbG9uZyB2ZHNvNjRfcnRfc2lndHJhbXA7CitleHRlcm4gdW5zaWduZWQgbG9uZyB2ZHNvMzJfc2lndHJhbXA7CitleHRlcm4gdW5zaWduZWQgbG9uZyB2ZHNvMzJfcnRfc2lndHJhbXA7CisKK2V4dGVybiB2b2lkIHZkc29faW5pdCh2b2lkKTsKKworI2Vsc2UgLyogX19BU1NFTUJMWV9fICovCisKKyNpZmRlZiBfX1ZEU082NF9fCisjaWZkZWYgVkRTNjRfSEFTX0RFU0NSSVBUT1JTCisjZGVmaW5lIFZfRlVOQ1RJT05fQkVHSU4obmFtZSkJCVwKKwkuZ2xvYmwgbmFtZTsJCQlcCisgICAgICAgIC5zZWN0aW9uICIub3BkIiwiYSI7CQlcCisgICAgICAgIC5hbGlnbiAzOwkJCVwKKwluYW1lOgkJCQlcCisJLnF1YWQgLm5hbWUsLlRPQy5AdG9jYmFzZSwwOwlcCisJLnByZXZpb3VzOwkJCVwKKwkuZ2xvYmwgLm5hbWU7CQkJXAorCS50eXBlIC5uYW1lLEBmdW5jdGlvbjsgCQlcCisJLm5hbWU6CQkJCVwKKworI2RlZmluZSBWX0ZVTkNUSU9OX0VORChuYW1lKQkJXAorCS5zaXplIC5uYW1lLC4tLm5hbWU7CisKKyNkZWZpbmUgVl9MT0NBTF9GVU5DKG5hbWUpICgubmFtZSkKKworI2Vsc2UgLyogVkRTNjRfSEFTX0RFU0NSSVBUT1JTICovCisKKyNkZWZpbmUgVl9GVU5DVElPTl9CRUdJTihuYW1lKQkJXAorCS5nbG9ibCBuYW1lOwkJCVwKKwluYW1lOgkJCQlcCisKKyNkZWZpbmUgVl9GVU5DVElPTl9FTkQobmFtZSkJCVwKKwkuc2l6ZSBuYW1lLC4tbmFtZTsKKworI2RlZmluZSBWX0xPQ0FMX0ZVTkMobmFtZSkgKG5hbWUpCisKKyNlbmRpZiAvKiBWRFM2NF9IQVNfREVTQ1JJUFRPUlMgKi8KKyNlbmRpZiAvKiBfX1ZEU082NF9fICovCisKKyNpZmRlZiBfX1ZEU08zMl9fCisKKyNkZWZpbmUgVl9GVU5DVElPTl9CRUdJTihuYW1lKQkJXAorCS5nbG9ibCBuYW1lOwkJCVwKKwkudHlwZSBuYW1lLEBmdW5jdGlvbjsgCQlcCisJbmFtZToJCQkJXAorCisjZGVmaW5lIFZfRlVOQ1RJT05fRU5EKG5hbWUpCQlcCisJLnNpemUgbmFtZSwuLW5hbWU7CisKKyNkZWZpbmUgVl9MT0NBTF9GVU5DKG5hbWUpIChuYW1lKQorCisjZW5kaWYgLyogX19WRFNPMzJfXyAqLworCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfX1BQQzY0X1ZEU09fSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC92Z2EuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L3ZnYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwOTg0OTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC92Z2EuaApAQCAtMCwwICsxLDUwIEBACisvKgorICoJQWNjZXNzIHRvIFZHQSB2aWRlb3JhbQorICoKKyAqCShjKSAxOTk4IE1hcnRpbiBNYXJlcyA8bWpAdWN3LmN6PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfTElOVVhfQVNNX1ZHQV9IXworI2RlZmluZSBfTElOVVhfQVNNX1ZHQV9IXworCisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2lmIGRlZmluZWQoQ09ORklHX1ZHQV9DT05TT0xFKSB8fCBkZWZpbmVkKENPTkZJR19NREFfQ09OU09MRSkKKworI2RlZmluZSBWVF9CVUZfSEFWRV9SVworLyoKKyAqICBUaGVzZSBhcmUgb25seSBuZWVkZWQgZm9yIHN1cHBvcnRpbmcgVkdBIG9yIE1EQSB0ZXh0IG1vZGUsIHdoaWNoIHVzZSBsaXR0bGUKKyAqICBlbmRpYW4gYnl0ZSBvcmRlcmluZy4KKyAqICBJbiBvdGhlciBjYXNlcywgd2UgY2FuIG9wdGltaXplIGJ5IHVzaW5nIG5hdGl2ZSBieXRlIG9yZGVyaW5nIGFuZAorICogIDxsaW51eC92dF9idWZmZXIuaD4gaGFzIGFscmVhZHkgZG9uZSB0aGUgcmlnaHQgam9iIGZvciB1cy4KKyAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgc2NyX3dyaXRldyh1MTYgdmFsLCB2b2xhdGlsZSB1MTYgKmFkZHIpCit7CisgICAgc3RfbGUxNihhZGRyLCB2YWwpOworfQorCitzdGF0aWMgaW5saW5lIHUxNiBzY3JfcmVhZHcodm9sYXRpbGUgY29uc3QgdTE2ICphZGRyKQoreworICAgIHJldHVybiBsZF9sZTE2KGFkZHIpOworfQorCisjZGVmaW5lIFZUX0JVRl9IQVZFX01FTUNQWVcKKyNkZWZpbmUgc2NyX21lbWNweXcJbWVtY3B5CisKKyNlbmRpZiAvKiAhQ09ORklHX1ZHQV9DT05TT0xFICYmICFDT05GSUdfTURBX0NPTlNPTEUgKi8KKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdmdhY29uX3JlbWFwX2Jhc2U7CisjZGVmaW5lIFZHQV9NQVBfTUVNKHgpICgodW5zaWduZWQgbG9uZykgaW9yZW1hcCgoeCksIDApKQorCisjZGVmaW5lIHZnYV9yZWFkYih4KSAoKih4KSkKKyNkZWZpbmUgdmdhX3dyaXRlYih4LHkpICgqKHkpID0gKHgpKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L3Zpby5oIGIvaW5jbHVkZS9hc20tcHBjNjQvdmlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBjZDk4ZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L3Zpby5oCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogSUJNIFBvd2VyUEMgVmlydHVhbCBJL08gSW5mcmFzdHJ1Y3R1cmUgU3VwcG9ydC4KKyAqCisgKiAgICBDb3B5cmlnaHQgKGMpIDIwMDMgSUJNIENvcnAuCisgKiAgICAgRGF2ZSBFbmdlYnJldHNlbiBlbmdlYnJldEB1cy5pYm0uY29tCisgKiAgICAgU2FudGlhZ28gTGVvbiBzYW50aWxAdXMuaWJtLmNvbQorICoKKyAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICAgICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqICAgICAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9BU01fVklPX0gKKyNkZWZpbmUgX0FTTV9WSU9fSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxhc20vaHZjYWxsLmg+CisjaW5jbHVkZSA8YXNtL3Byb20uaD4KKyNpbmNsdWRlIDxhc20vc2NhdHRlcmxpc3QuaD4KKy8qIAorICogQXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvbnN0YW50cyBmb3IgZHJpdmVycyB0bworICogZXh0cmFjdCBhdHRyaWJ1dGVzIG9mIHRoZSBkZXZpY2UgdXNpbmcgdmlvX2dldF9hdHRyaWJ1dGUoKQorKi8KKyNkZWZpbmUgVkVUSF9NQUNfQUREUiAibG9jYWwtbWFjLWFkZHJlc3MiCisjZGVmaW5lIFZFVEhfTUNBU1RfRklMVEVSX1NJWkUgImlibSxtYWMtYWRkcmVzcy1maWx0ZXJzIgorCisvKiBFbmQgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvbnN0YW50cyAqLworCisjZGVmaW5lIGhfdmlvX3NpZ25hbCh1YSwgbW9kZSkgXAorICBwbHBhcl9oY2FsbF9ub3JldHMoSF9WSU9fU0lHTkFMLCB1YSwgbW9kZSkKKworI2RlZmluZSBWSU9fSVJRX0RJU0FCTEUJCTBVTAorI2RlZmluZSBWSU9fSVJRX0VOQUJMRQkJMVVMCisKK3N0cnVjdCB2aW9fZGV2Oworc3RydWN0IHZpb19kcml2ZXI7CitzdHJ1Y3QgdmlvX2RldmljZV9pZDsKK3N0cnVjdCBpb21tdV90YWJsZTsKKworaW50IHZpb19yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHZpb19kcml2ZXIgKmRydik7Cit2b2lkIHZpb191bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgdmlvX2RyaXZlciAqZHJ2KTsKKworI2lmZGVmIENPTkZJR19QUENfUFNFUklFUworc3RydWN0IHZpb19kZXYgKiBfX2RldmluaXQgdmlvX3JlZ2lzdGVyX2RldmljZV9ub2RlKAorCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGVfdmRldik7CisjZW5kaWYKK3ZvaWQgX19kZXZpbml0IHZpb191bnJlZ2lzdGVyX2RldmljZShzdHJ1Y3QgdmlvX2RldiAqZGV2KTsKK3N0cnVjdCB2aW9fZGV2ICp2aW9fZmluZF9ub2RlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqdm5vZGUpOworCitjb25zdCB2b2lkICogdmlvX2dldF9hdHRyaWJ1dGUoc3RydWN0IHZpb19kZXYgKnZkZXYsIHZvaWQqIHdoaWNoLCBpbnQqIGxlbmd0aCk7CitpbnQgdmlvX2dldF9pcnEoc3RydWN0IHZpb19kZXYgKmRldik7CitpbnQgdmlvX2VuYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCB2aW9fZGV2ICpkZXYpOworaW50IHZpb19kaXNhYmxlX2ludGVycnVwdHMoc3RydWN0IHZpb19kZXYgKmRldik7CisKK2V4dGVybiBzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzIHZpb19kbWFfb3BzOworCitleHRlcm4gc3RydWN0IGJ1c190eXBlIHZpb19idXNfdHlwZTsKKworc3RydWN0IHZpb19kZXZpY2VfaWQgeworCWNoYXIgKnR5cGU7CisJY2hhciAqY29tcGF0OworfTsKKworc3RydWN0IHZpb19kcml2ZXIgeworCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKKwljaGFyICpuYW1lOworCWNvbnN0IHN0cnVjdCB2aW9fZGV2aWNlX2lkICppZF90YWJsZTsJLyogTlVMTCBpZiB3YW50cyBhbGwgZGV2aWNlcyAqLworCWludCAgKCpwcm9iZSkgIChzdHJ1Y3QgdmlvX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgdmlvX2RldmljZV9pZCAqaWQpOwkvKiBOZXcgZGV2aWNlIGluc2VydGVkICovCisJaW50ICgqcmVtb3ZlKSAoc3RydWN0IHZpb19kZXYgKmRldik7CS8qIERldmljZSByZW1vdmVkIChOVUxMIGlmIG5vdCBhIGhvdC1wbHVnIGNhcGFibGUgZHJpdmVyKSAqLworCXVuc2lnbmVkIGxvbmcgZHJpdmVyX2RhdGE7CisKKwlzdHJ1Y3QgZGV2aWNlX2RyaXZlciBkcml2ZXI7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCB2aW9fZHJpdmVyICp0b192aW9fZHJpdmVyKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihkcnYsIHN0cnVjdCB2aW9fZHJpdmVyLCBkcml2ZXIpOworfQorCisvKgorICogVGhlIHZpb19kZXYgc3RydWN0dXJlIGlzIHVzZWQgdG8gZGVzY3JpYmUgdmlydHVhbCBJL08gZGV2aWNlcy4KKyAqLworc3RydWN0IHZpb19kZXYgeworCXN0cnVjdCBpb21tdV90YWJsZSAqaW9tbXVfdGFibGU7ICAgICAvKiB2aW9fbWFwXyogdXNlcyB0aGlzICovCisJY2hhciAqbmFtZTsKKwljaGFyICp0eXBlOworCXVpbnQzMl90IHVuaXRfYWRkcmVzczsJCisJdW5zaWduZWQgaW50IGlycTsKKworCXN0cnVjdCBkZXZpY2UgZGV2OworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdmlvX2RldiAqdG9fdmlvX2RldihzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCB2aW9fZGV2LCBkZXYpOworfQorCisjZW5kaWYgLyogX0FTTV9WSU9fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQveGljcy5oIGIvaW5jbHVkZS9hc20tcHBjNjQveGljcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwMjdkYTQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC94aWNzLmgKQEAgLTAsMCArMSwzNiBAQAorLyogCisgKiBhcmNoL3BwYzY0L2tlcm5lbC94aWNzLmgKKyAqCisgKiBDb3B5cmlnaHQgMjAwMCBJQk0gQ29ycG9yYXRpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfUFBDNjRfS0VSTkVMX1hJQ1NfSAorI2RlZmluZSBfUFBDNjRfS0VSTkVMX1hJQ1NfSAorCisjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KKwordm9pZCB4aWNzX2luaXRfSVJRKHZvaWQpOworaW50IHhpY3NfZ2V0X2lycShzdHJ1Y3QgcHRfcmVncyAqKTsKK3ZvaWQgeGljc19zZXR1cF9jcHUodm9pZCk7Cit2b2lkIHhpY3NfY2F1c2VfSVBJKGludCBjcHUpOwordm9pZCB4aWNzX3JlcXVlc3RfSVBJcyh2b2lkKTsKK3ZvaWQgeGljc19taWdyYXRlX2lycXNfYXdheSh2b2lkKTsKKworLyogZmlyc3QgYXJndW1lbnQgaXMgaWdub3JlZCBmb3Igbm93Ki8KK3ZvaWQgcFNlcmllc0xQX2NwcHJfaW5mbyhpbnQgbl9jcHUsIHU4IHZhbHVlKTsKKworc3RydWN0IHhpY3NfaXBpX3N0cnVjdCB7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyB2YWx1ZTsKK30gX19fX2NhY2hlbGluZV9hbGlnbmVkOworCitleHRlcm4gc3RydWN0IHhpY3NfaXBpX3N0cnVjdCB4aWNzX2lwaV9tZXNzYWdlW05SX0NQVVNdIF9fY2FjaGVsaW5lX2FsaWduZWQ7CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgZGVmYXVsdF9kaXN0cmliX3NlcnZlcjsKK2V4dGVybiB1bnNpZ25lZCBpbnQgaW50ZXJydXB0X3NlcnZlcl9zaXplOworCisjZW5kaWYgLyogX1BQQzY0X0tFUk5FTF9YSUNTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L3hvci5oIGIvaW5jbHVkZS9hc20tcHBjNjQveG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzgyZWIxMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L3hvci5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy94b3IuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvYS5vdXQuaCBiL2luY2x1ZGUvYXNtLXMzOTAvYS5vdXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmFkZWU2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tczM5MC9hLm91dC5oCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiAgaW5jbHVkZS9hc20tczM5MC9hLm91dC5oCisgKgorICogIFMzOTAgdmVyc2lvbgorICogICAgQ29weXJpZ2h0IChDKSAxOTk5IElCTSBEZXV0c2NobGFuZCBFbnR3aWNrbHVuZyBHbWJILCBJQk0gQ29ycG9yYXRpb24KKyAqCisgKiAgRGVyaXZlZCBmcm9tICJpbmNsdWRlL2FzbS1pMzg2L2Eub3V0LmgiCisgKiAgICBDb3B5cmlnaHQgKEMpIDE5OTIsIExpbnVzIFRvcnZhbGRzCisgKgorICogSSBkb24ndCB0aGluayB3ZSdsbCBldmVyIG5lZWQgYS5vdXQgLi4uCisgKi8KKworI2lmbmRlZiBfX1MzOTBfQV9PVVRfSF9fCisjZGVmaW5lIF9fUzM5MF9BX09VVF9IX18KKworc3RydWN0IGV4ZWMKK3sKKyAgdW5zaWduZWQgbG9uZyBhX2luZm87CQkvKiBVc2UgbWFjcm9zIE5fTUFHSUMsIGV0YyBmb3IgYWNjZXNzICovCisgIHVuc2lnbmVkIGFfdGV4dDsJCS8qIGxlbmd0aCBvZiB0ZXh0LCBpbiBieXRlcyAqLworICB1bnNpZ25lZCBhX2RhdGE7CQkvKiBsZW5ndGggb2YgZGF0YSwgaW4gYnl0ZXMgKi8KKyAgdW5zaWduZWQgYV9ic3M7CQkvKiBsZW5ndGggb2YgdW5pbml0aWFsaXplZCBkYXRhIGFyZWEgZm9yIGZpbGUsIGluIGJ5dGVzICovCisgIHVuc2lnbmVkIGFfc3ltczsJCS8qIGxlbmd0aCBvZiBzeW1ib2wgdGFibGUgZGF0YSBpbiBmaWxlLCBpbiBieXRlcyAqLworICB1bnNpZ25lZCBhX2VudHJ5OwkJLyogc3RhcnQgYWRkcmVzcyAqLworICB1bnNpZ25lZCBhX3Ryc2l6ZTsJCS8qIGxlbmd0aCBvZiByZWxvY2F0aW9uIGluZm8gZm9yIHRleHQsIGluIGJ5dGVzICovCisgIHVuc2lnbmVkIGFfZHJzaXplOwkJLyogbGVuZ3RoIG9mIHJlbG9jYXRpb24gaW5mbyBmb3IgZGF0YSwgaW4gYnl0ZXMgKi8KK307CisKKyNkZWZpbmUgTl9UUlNJWkUoYSkJKChhKS5hX3Ryc2l6ZSkKKyNkZWZpbmUgTl9EUlNJWkUoYSkJKChhKS5hX2Ryc2l6ZSkKKyNkZWZpbmUgTl9TWU1TSVpFKGEpCSgoYSkuYV9zeW1zKQorCisjaWZkZWYgX19LRVJORUxfXworCisjZGVmaW5lIFNUQUNLX1RPUAlUQVNLX1NJWkUKKworI2VuZGlmCisKKyNlbmRpZiAvKiBfX0FfT1VUX0dOVV9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvYXRvbWljLmggYi9pbmNsdWRlL2FzbS1zMzkwL2F0b21pYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1YTA1Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL2F0b21pYy5oCkBAIC0wLDAgKzEsMjA3IEBACisjaWZuZGVmIF9fQVJDSF9TMzkwX0FUT01JQ19fCisjZGVmaW5lIF9fQVJDSF9TMzkwX0FUT01JQ19fCisKKy8qCisgKiAgaW5jbHVkZS9hc20tczM5MC9hdG9taWMuaAorICoKKyAqICBTMzkwIHZlcnNpb24KKyAqICAgIENvcHlyaWdodCAoQykgMTk5OS0yMDAzIElCTSBEZXV0c2NobGFuZCBFbnR3aWNrbHVuZyBHbWJILCBJQk0gQ29ycG9yYXRpb24KKyAqICAgIEF1dGhvcihzKTogTWFydGluIFNjaHdpZGVmc2t5IChzY2h3aWRlZnNreUBkZS5pYm0uY29tKSwKKyAqICAgICAgICAgICAgICAgRGVuaXMgSm9zZXBoIEJhcnJvdywKKyAqCQkgQXJuZCBCZXJnbWFubiAoYXJuZGJAZGUuaWJtLmNvbSkKKyAqCisgKiAgRGVyaXZlZCBmcm9tICJpbmNsdWRlL2FzbS1pMzg2L2JpdG9wcy5oIgorICogICAgQ29weXJpZ2h0IChDKSAxOTkyLCBMaW51cyBUb3J2YWxkcworICoKKyAqLworCisvKgorICogQXRvbWljIG9wZXJhdGlvbnMgdGhhdCBDIGNhbid0IGd1YXJhbnRlZSB1cy4gIFVzZWZ1bCBmb3IKKyAqIHJlc291cmNlIGNvdW50aW5nIGV0Yy4uCisgKiBTMzkwIHVzZXMgJ0NvbXBhcmUgQW5kIFN3YXAnIGZvciBhdG9taWNpdHkgaW4gU01QIGVudmlyb21lbnQKKyAqLworCit0eXBlZGVmIHN0cnVjdCB7CisJdm9sYXRpbGUgaW50IGNvdW50ZXI7Cit9IF9fYXR0cmlidXRlX18gKChhbGlnbmVkICg0KSkpIGF0b21pY190OworI2RlZmluZSBBVE9NSUNfSU5JVChpKSAgeyAoaSkgfQorCisjaWZkZWYgX19LRVJORUxfXworCisjZGVmaW5lIF9fQ1NfTE9PUChwdHIsIG9wX3ZhbCwgb3Bfc3RyaW5nKSAoewkJCQlcCisJdHlwZW9mKHB0ci0+Y291bnRlcikgb2xkX3ZhbCwgbmV3X3ZhbDsJCQkJXAorICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiICAgbCAgICAgJTAsMCglMylcbiIJCQlcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIwOiBsciAgICAlMSwlMFxuIgkJCQlcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wX3N0cmluZyAiICAlMSwlNFxuIgkJCVwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgIGNzICAgICUwLCUxLDAoJTMpXG4iCQkJXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgamwgICAgMGIiCQkJCVwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiPSZkIiAob2xkX3ZhbCksICI9JmQiIChuZXdfdmFsKSwJXAorCQkJICAgICAgICI9bSIgKCgoYXRvbWljX3QgKikocHRyKSktPmNvdW50ZXIpCVwKKwkJCSAgICAgOiAiYSIgKHB0ciksICJkIiAob3BfdmFsKSwJCQlcCisJCQkgICAgICAgIm0iICgoKGF0b21pY190ICopKHB0cikpLT5jb3VudGVyKQlcCisJCQkgICAgIDogImNjIiwgIm1lbW9yeSIgKTsJCQlcCisJbmV3X3ZhbDsJCQkJCQkJXAorfSkKKyNkZWZpbmUgYXRvbWljX3JlYWQodikgICAgICAgICAgKCh2KS0+Y291bnRlcikKKyNkZWZpbmUgYXRvbWljX3NldCh2LGkpICAgICAgICAgKCgodiktPmNvdW50ZXIpID0gKGkpKQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGF0b21pY19hZGQoaW50IGksIGF0b21pY190ICogdikKK3sKKwkgICAgICAgX19DU19MT09QKHYsIGksICJhciIpOworfQorc3RhdGljIF9faW5saW5lX18gaW50IGF0b21pY19hZGRfcmV0dXJuKGludCBpLCBhdG9taWNfdCAqIHYpCit7CisJcmV0dXJuIF9fQ1NfTE9PUCh2LCBpLCAiYXIiKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIGludCBhdG9taWNfYWRkX25lZ2F0aXZlKGludCBpLCBhdG9taWNfdCAqIHYpCit7CisJcmV0dXJuIF9fQ1NfTE9PUCh2LCBpLCAiYXIiKSA8IDA7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGF0b21pY19zdWIoaW50IGksIGF0b21pY190ICogdikKK3sKKwkgICAgICAgX19DU19MT09QKHYsIGksICJzciIpOworfQorc3RhdGljIF9faW5saW5lX18gaW50IGF0b21pY19zdWJfcmV0dXJuKGludCBpLCBhdG9taWNfdCAqIHYpCit7CisJcmV0dXJuIF9fQ1NfTE9PUCh2LCBpLCAic3IiKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgYXRvbWljX2luYyh2b2xhdGlsZSBhdG9taWNfdCAqIHYpCit7CisJICAgICAgIF9fQ1NfTE9PUCh2LCAxLCAiYXIiKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIGludCBhdG9taWNfaW5jX3JldHVybih2b2xhdGlsZSBhdG9taWNfdCAqIHYpCit7CisJcmV0dXJuIF9fQ1NfTE9PUCh2LCAxLCAiYXIiKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IGF0b21pY19pbmNfYW5kX3Rlc3Qodm9sYXRpbGUgYXRvbWljX3QgKiB2KQoreworCXJldHVybiBfX0NTX0xPT1AodiwgMSwgImFyIikgPT0gMDsKK30KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgYXRvbWljX2RlYyh2b2xhdGlsZSBhdG9taWNfdCAqIHYpCit7CisJICAgICAgIF9fQ1NfTE9PUCh2LCAxLCAic3IiKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIGludCBhdG9taWNfZGVjX3JldHVybih2b2xhdGlsZSBhdG9taWNfdCAqIHYpCit7CisJcmV0dXJuIF9fQ1NfTE9PUCh2LCAxLCAic3IiKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIGludCBhdG9taWNfZGVjX2FuZF90ZXN0KHZvbGF0aWxlIGF0b21pY190ICogdikKK3sKKwlyZXR1cm4gX19DU19MT09QKHYsIDEsICJzciIpID09IDA7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGF0b21pY19jbGVhcl9tYXNrKHVuc2lnbmVkIGxvbmcgbWFzaywgYXRvbWljX3QgKiB2KQoreworCSAgICAgICBfX0NTX0xPT1Aodiwgfm1hc2ssICJuciIpOworfQorc3RhdGljIF9faW5saW5lX18gdm9pZCBhdG9taWNfc2V0X21hc2sodW5zaWduZWQgbG9uZyBtYXNrLCBhdG9taWNfdCAqIHYpCit7CisJICAgICAgIF9fQ1NfTE9PUCh2LCBtYXNrLCAib3IiKTsKK30KKyN1bmRlZiBfX0NTX0xPT1AKKworI2lmZGVmIF9fczM5MHhfXwordHlwZWRlZiBzdHJ1Y3QgeworCXZvbGF0aWxlIGxvbmcgbG9uZyBjb3VudGVyOworfSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoOCkpKSBhdG9taWM2NF90OworI2RlZmluZSBBVE9NSUM2NF9JTklUKGkpICB7IChpKSB9CisKKyNkZWZpbmUgX19DU0dfTE9PUChwdHIsIG9wX3ZhbCwgb3Bfc3RyaW5nKSAoewkJCQlcCisJdHlwZW9mKHB0ci0+Y291bnRlcikgb2xkX3ZhbCwgbmV3X3ZhbDsJCQkJXAorICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiICAgbGcgICAgJTAsMCglMylcbiIJCQlcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIwOiBsZ3IgICAlMSwlMFxuIgkJCQlcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wX3N0cmluZyAiICAlMSwlNFxuIgkJCVwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgIGNzZyAgICUwLCUxLDAoJTMpXG4iCQkJXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgamwgICAgMGIiCQkJCVwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiPSZkIiAob2xkX3ZhbCksICI9JmQiIChuZXdfdmFsKSwJXAorCQkJICAgICAgICI9bSIgKCgoYXRvbWljX3QgKikocHRyKSktPmNvdW50ZXIpCVwKKwkJCSAgICAgOiAiYSIgKHB0ciksICJkIiAob3BfdmFsKSwJCQlcCisJCQkgICAgICAgIm0iICgoKGF0b21pY190ICopKHB0cikpLT5jb3VudGVyKQlcCisJCQkgICAgIDogImNjIiwgIm1lbW9yeSIgKTsJCQlcCisJbmV3X3ZhbDsJCQkJCQkJXAorfSkKKyNkZWZpbmUgYXRvbWljNjRfcmVhZCh2KSAgICAgICAgICAoKHYpLT5jb3VudGVyKQorI2RlZmluZSBhdG9taWM2NF9zZXQodixpKSAgICAgICAgICgoKHYpLT5jb3VudGVyKSA9IChpKSkKKworc3RhdGljIF9faW5saW5lX18gdm9pZCBhdG9taWM2NF9hZGQoaW50IGksIGF0b21pYzY0X3QgKiB2KQoreworCSAgICAgICBfX0NTR19MT09QKHYsIGksICJhZ3IiKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIGxvbmcgbG9uZyBhdG9taWM2NF9hZGRfcmV0dXJuKGludCBpLCBhdG9taWM2NF90ICogdikKK3sKKwlyZXR1cm4gX19DU0dfTE9PUCh2LCBpLCAiYWdyIik7Cit9CitzdGF0aWMgX19pbmxpbmVfXyBsb25nIGxvbmcgYXRvbWljNjRfYWRkX25lZ2F0aXZlKGludCBpLCBhdG9taWM2NF90ICogdikKK3sKKwlyZXR1cm4gX19DU0dfTE9PUCh2LCBpLCAiYWdyIikgPCAwOworfQorc3RhdGljIF9faW5saW5lX18gdm9pZCBhdG9taWM2NF9zdWIoaW50IGksIGF0b21pYzY0X3QgKiB2KQoreworCSAgICAgICBfX0NTR19MT09QKHYsIGksICJzZ3IiKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgYXRvbWljNjRfaW5jKHZvbGF0aWxlIGF0b21pYzY0X3QgKiB2KQoreworCSAgICAgICBfX0NTR19MT09QKHYsIDEsICJhZ3IiKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIGxvbmcgbG9uZyBhdG9taWM2NF9pbmNfcmV0dXJuKHZvbGF0aWxlIGF0b21pYzY0X3QgKiB2KQoreworCXJldHVybiBfX0NTR19MT09QKHYsIDEsICJhZ3IiKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIGxvbmcgbG9uZyBhdG9taWM2NF9pbmNfYW5kX3Rlc3Qodm9sYXRpbGUgYXRvbWljNjRfdCAqIHYpCit7CisJcmV0dXJuIF9fQ1NHX0xPT1AodiwgMSwgImFnciIpID09IDA7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGF0b21pYzY0X2RlYyh2b2xhdGlsZSBhdG9taWM2NF90ICogdikKK3sKKwkgICAgICAgX19DU0dfTE9PUCh2LCAxLCAic2dyIik7Cit9CitzdGF0aWMgX19pbmxpbmVfXyBsb25nIGxvbmcgYXRvbWljNjRfZGVjX3JldHVybih2b2xhdGlsZSBhdG9taWM2NF90ICogdikKK3sKKwlyZXR1cm4gX19DU0dfTE9PUCh2LCAxLCAic2dyIik7Cit9CitzdGF0aWMgX19pbmxpbmVfXyBsb25nIGxvbmcgYXRvbWljNjRfZGVjX2FuZF90ZXN0KHZvbGF0aWxlIGF0b21pYzY0X3QgKiB2KQoreworCXJldHVybiBfX0NTR19MT09QKHYsIDEsICJzZ3IiKSA9PSAwOworfQorc3RhdGljIF9faW5saW5lX18gdm9pZCBhdG9taWM2NF9jbGVhcl9tYXNrKHVuc2lnbmVkIGxvbmcgbWFzaywgYXRvbWljNjRfdCAqIHYpCit7CisJICAgICAgIF9fQ1NHX0xPT1Aodiwgfm1hc2ssICJuZ3IiKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgYXRvbWljNjRfc2V0X21hc2sodW5zaWduZWQgbG9uZyBtYXNrLCBhdG9taWM2NF90ICogdikKK3sKKwkgICAgICAgX19DU0dfTE9PUCh2LCBtYXNrLCAib2dyIik7Cit9CisKKyN1bmRlZiBfX0NTR19MT09QCisjZW5kaWYKKworLyoKKyAgcmV0dXJucyAwICBpZiBleHBlY3RlZF9vbGR2YWw9PXZhbHVlIGluICp2ICggc3dhcCB3YXMgc3VjY2Vzc2Z1bCApCisgIHJldHVybnMgMSAgaWYgdW5zdWNjZXNzZnVsLgorCisgIFRoaXMgaXMgbm9uLXBvcnRhYmxlLCB1c2UgYml0b3BzIG9yIHNwaW5sb2NrcyBpbnN0ZWFkIQorKi8KK3N0YXRpYyBfX2lubGluZV9fIGludAorYXRvbWljX2NvbXBhcmVfYW5kX3N3YXAoaW50IGV4cGVjdGVkX29sZHZhbCxpbnQgbmV3X3ZhbCxhdG9taWNfdCAqdikKK3sKKyAgICAgICAgaW50IHJldHZhbDsKKworICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygKKyAgICAgICAgICAgICAgICAiICBsciAgICUwLCUzXG4iCisgICAgICAgICAgICAgICAgIiAgY3MgICAlMCwlNCwwKCUyKVxuIgorICAgICAgICAgICAgICAgICIgIGlwbSAgJTBcbiIKKyAgICAgICAgICAgICAgICAiICBzcmwgICUwLDI4XG4iCisgICAgICAgICAgICAgICAgIjA6IgorICAgICAgICAgICAgICAgIDogIj0mZCIgKHJldHZhbCksICI9bSIgKHYtPmNvdW50ZXIpCisgICAgICAgICAgICAgICAgOiAiYSIgKHYpLCAiZCIgKGV4cGVjdGVkX29sZHZhbCkgLCAiZCIgKG5ld192YWwpLAorCQkgICJtIiAodi0+Y291bnRlcikgOiAiY2MiLCAibWVtb3J5IiApOworICAgICAgICByZXR1cm4gcmV0dmFsOworfQorCisjZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19kZWMoKQlzbXBfbWIoKQorI2RlZmluZSBzbXBfbWJfX2FmdGVyX2F0b21pY19kZWMoKQlzbXBfbWIoKQorI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfaW5jKCkJc21wX21iKCkKKyNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWNfaW5jKCkJc21wX21iKCkKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAvKiBfX0FSQ0hfUzM5MF9BVE9NSUNfXyAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvYml0b3BzLmggYi9pbmNsdWRlL2FzbS1zMzkwL2JpdG9wcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2YmIwODQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL2JpdG9wcy5oCkBAIC0wLDAgKzEsMTE4OCBAQAorI2lmbmRlZiBfUzM5MF9CSVRPUFNfSAorI2RlZmluZSBfUzM5MF9CSVRPUFNfSAorCisvKgorICogIGluY2x1ZGUvYXNtLXMzOTAvYml0b3BzLmgKKyAqCisgKiAgUzM5MCB2ZXJzaW9uCisgKiAgICBDb3B5cmlnaHQgKEMpIDE5OTkgSUJNIERldXRzY2hsYW5kIEVudHdpY2tsdW5nIEdtYkgsIElCTSBDb3Jwb3JhdGlvbgorICogICAgQXV0aG9yKHMpOiBNYXJ0aW4gU2Nod2lkZWZza3kgKHNjaHdpZGVmc2t5QGRlLmlibS5jb20pCisgKgorICogIERlcml2ZWQgZnJvbSAiaW5jbHVkZS9hc20taTM4Ni9iaXRvcHMuaCIKKyAqICAgIENvcHlyaWdodCAoQykgMTk5MiwgTGludXMgVG9ydmFsZHMKKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorCisvKgorICogMzIgYml0IGJpdG9wcyBmb3JtYXQ6CisgKiBiaXQgMCBpcyB0aGUgTFNCIG9mICphZGRyOyBiaXQgMzEgaXMgdGhlIE1TQiBvZiAqYWRkcjsKKyAqIGJpdCAzMiBpcyB0aGUgTFNCIG9mICooYWRkcis0KS4gVGhhdCBjb21iaW5lZCB3aXRoIHRoZQorICogYmlnIGVuZGlhbiBieXRlIG9yZGVyIG9uIFMzOTAgZ2l2ZSB0aGUgZm9sbG93aW5nIGJpdAorICogb3JkZXIgaW4gbWVtb3J5OgorICogICAgMWYgMWUgMWQgMWMgMWIgMWEgMTkgMTggMTcgMTYgMTUgMTQgMTMgMTIgMTEgMTAgXAorICogICAgMGYgMGUgMGQgMGMgMGIgMGEgMDkgMDggMDcgMDYgMDUgMDQgMDMgMDIgMDEgMDAKKyAqIGFmdGVyIHRoYXQgZm9sbG93cyB0aGUgbmV4dCBsb25nIHdpdGggYml0IG51bWJlcnMKKyAqICAgIDNmIDNlIDNkIDNjIDNiIDNhIDM5IDM4IDM3IDM2IDM1IDM0IDMzIDMyIDMxIDMwCisgKiAgICAyZiAyZSAyZCAyYyAyYiAyYSAyOSAyOCAyNyAyNiAyNSAyNCAyMyAyMiAyMSAyMAorICogVGhlIHJlYXNvbiBmb3IgdGhpcyBiaXQgb3JkZXJpbmcgaXMgdGhlIGZhY3QgdGhhdAorICogaW4gdGhlIGFyY2hpdGVjdHVyZSBpbmRlcGVuZGVudCBjb2RlIGJpdHMgb3BlcmF0aW9ucworICogb2YgdGhlIGZvcm0gImZsYWdzIHw9ICgxIDw8IGJpdG5yKSIgYXJlIHVzZWQgSU5URVJNSVhFRAorICogd2l0aCBvcGVyYXRpb24gb2YgdGhlIGZvcm0gInNldF9iaXQoYml0bnIsIGZsYWdzKSIuCisgKgorICogNjQgYml0IGJpdG9wcyBmb3JtYXQ6CisgKiBiaXQgMCBpcyB0aGUgTFNCIG9mICphZGRyOyBiaXQgNjMgaXMgdGhlIE1TQiBvZiAqYWRkcjsKKyAqIGJpdCA2NCBpcyB0aGUgTFNCIG9mICooYWRkcis4KS4gVGhhdCBjb21iaW5lZCB3aXRoIHRoZQorICogYmlnIGVuZGlhbiBieXRlIG9yZGVyIG9uIFMzOTAgZ2l2ZSB0aGUgZm9sbG93aW5nIGJpdAorICogb3JkZXIgaW4gbWVtb3J5OgorICogICAgM2YgM2UgM2QgM2MgM2IgM2EgMzkgMzggMzcgMzYgMzUgMzQgMzMgMzIgMzEgMzAKKyAqICAgIDJmIDJlIDJkIDJjIDJiIDJhIDI5IDI4IDI3IDI2IDI1IDI0IDIzIDIyIDIxIDIwCisgKiAgICAxZiAxZSAxZCAxYyAxYiAxYSAxOSAxOCAxNyAxNiAxNSAxNCAxMyAxMiAxMSAxMAorICogICAgMGYgMGUgMGQgMGMgMGIgMGEgMDkgMDggMDcgMDYgMDUgMDQgMDMgMDIgMDEgMDAKKyAqIGFmdGVyIHRoYXQgZm9sbG93cyB0aGUgbmV4dCBsb25nIHdpdGggYml0IG51bWJlcnMKKyAqICAgIDdmIDdlIDdkIDdjIDdiIDdhIDc5IDc4IDc3IDc2IDc1IDc0IDczIDcyIDcxIDcwCisgKiAgICA2ZiA2ZSA2ZCA2YyA2YiA2YSA2OSA2OCA2NyA2NiA2NSA2NCA2MyA2MiA2MSA2MAorICogICAgNWYgNWUgNWQgNWMgNWIgNWEgNTkgNTggNTcgNTYgNTUgNTQgNTMgNTIgNTEgNTAKKyAqICAgIDRmIDRlIDRkIDRjIDRiIDRhIDQ5IDQ4IDQ3IDQ2IDQ1IDQ0IDQzIDQyIDQxIDQwCisgKiBUaGUgcmVhc29uIGZvciB0aGlzIGJpdCBvcmRlcmluZyBpcyB0aGUgZmFjdCB0aGF0CisgKiBpbiB0aGUgYXJjaGl0ZWN0dXJlIGluZGVwZW5kZW50IGNvZGUgYml0cyBvcGVyYXRpb25zCisgKiBvZiB0aGUgZm9ybSAiZmxhZ3MgfD0gKDEgPDwgYml0bnIpIiBhcmUgdXNlZCBJTlRFUk1JWEVECisgKiB3aXRoIG9wZXJhdGlvbiBvZiB0aGUgZm9ybSAic2V0X2JpdChiaXRuciwgZmxhZ3MpIi4KKyAqLworCisvKiBzZXQgQUxJR05fQ1MgdG8gMSBpZiB0aGUgU01QIHNhZmUgYml0IG9wZXJhdGlvbnMgc2hvdWxkCisgKiBhbGlnbiB0aGUgYWRkcmVzcyB0byA0IGJ5dGUgYm91bmRhcnkuIEl0IHNlZW1zIHRvIHdvcmsKKyAqIHdpdGhvdXQgdGhlIGFsaWdubWVudC4gCisgKi8KKyNpZmRlZiBfX0tFUk5FTF9fCisjZGVmaW5lIEFMSUdOX0NTIDAKKyNlbHNlCisjZGVmaW5lIEFMSUdOX0NTIDEKKyNpZm5kZWYgQ09ORklHX1NNUAorI2Vycm9yICJiaXRvcHMgd29uJ3Qgd29yayB3aXRob3V0IENPTkZJR19TTVAiCisjZW5kaWYKKyNlbmRpZgorCisvKiBiaXRtYXAgdGFibGVzIGZyb20gYXJjaC9TMzkwL2tlcm5lbC9iaXRtYXAuUyAqLworZXh0ZXJuIGNvbnN0IGNoYXIgX29pX2JpdG1hcFtdOworZXh0ZXJuIGNvbnN0IGNoYXIgX25pX2JpdG1hcFtdOworZXh0ZXJuIGNvbnN0IGNoYXIgX3piX2ZpbmRtYXBbXTsKK2V4dGVybiBjb25zdCBjaGFyIF9zYl9maW5kbWFwW107CisKKyNpZm5kZWYgX19zMzkweF9fCisKKyNkZWZpbmUgX19CSVRPUFNfQUxJR04JCTMKKyNkZWZpbmUgX19CSVRPUFNfV09SRFNJWkUJMzIKKyNkZWZpbmUgX19CSVRPUFNfT1IJCSJvciIKKyNkZWZpbmUgX19CSVRPUFNfQU5ECQkibnIiCisjZGVmaW5lIF9fQklUT1BTX1hPUgkJInhyIgorCisjZGVmaW5lIF9fQklUT1BTX0xPT1AoX19vbGQsIF9fbmV3LCBfX2FkZHIsIF9fdmFsLCBfX29wX3N0cmluZykJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygiICAgbCAgICUwLDAoJTQpXG4iCQkJXAorCQkJICAgICAiMDogbHIgICUxLCUwXG4iCQkJCVwKKwkJCSAgICAgX19vcF9zdHJpbmcgIiAgJTEsJTNcbiIJCQlcCisJCQkgICAgICIgICBjcyAgJTAsJTEsMCglNClcbiIJCQlcCisJCQkgICAgICIgICBqbCAgMGIiCQkJCVwKKwkJCSAgICAgOiAiPSZkIiAoX19vbGQpLCAiPSZkIiAoX19uZXcpLAkgICAgICAgCVwKKwkJCSAgICAgICAiPW0iICgqKHVuc2lnbmVkIGxvbmcgKikgX19hZGRyKQkJXAorCQkJICAgICA6ICJkIiAoX192YWwpLCAiYSIgKF9fYWRkciksCQlcCisJCQkgICAgICAgIm0iICgqKHVuc2lnbmVkIGxvbmcgKikgX19hZGRyKSA6ICJjYyIgKTsKKworI2Vsc2UgLyogX19zMzkweF9fICovCisKKyNkZWZpbmUgX19CSVRPUFNfQUxJR04JCTcKKyNkZWZpbmUgX19CSVRPUFNfV09SRFNJWkUJNjQKKyNkZWZpbmUgX19CSVRPUFNfT1IJCSJvZ3IiCisjZGVmaW5lIF9fQklUT1BTX0FORAkJIm5nciIKKyNkZWZpbmUgX19CSVRPUFNfWE9SCQkieGdyIgorCisjZGVmaW5lIF9fQklUT1BTX0xPT1AoX19vbGQsIF9fbmV3LCBfX2FkZHIsIF9fdmFsLCBfX29wX3N0cmluZykJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygiICAgbGcgICUwLDAoJTQpXG4iCQkJXAorCQkJICAgICAiMDogbGdyICUxLCUwXG4iCQkJCVwKKwkJCSAgICAgX19vcF9zdHJpbmcgIiAgJTEsJTNcbiIJCQlcCisJCQkgICAgICIgICBjc2cgJTAsJTEsMCglNClcbiIJCQlcCisJCQkgICAgICIgICBqbCAgMGIiCQkJCVwKKwkJCSAgICAgOiAiPSZkIiAoX19vbGQpLCAiPSZkIiAoX19uZXcpLAkgICAgICAgCVwKKwkJCSAgICAgICAiPW0iICgqKHVuc2lnbmVkIGxvbmcgKikgX19hZGRyKQkJXAorCQkJICAgICA6ICJkIiAoX192YWwpLCAiYSIgKF9fYWRkciksCQlcCisJCQkgICAgICAgIm0iICgqKHVuc2lnbmVkIGxvbmcgKikgX19hZGRyKSA6ICJjYyIgKTsKKworI2VuZGlmIC8qIF9fczM5MHhfXyAqLworCisjZGVmaW5lIF9fQklUT1BTX1dPUkRTKGJpdHMpICgoKGJpdHMpK19fQklUT1BTX1dPUkRTSVpFLTEpL19fQklUT1BTX1dPUkRTSVpFKQorI2RlZmluZSBfX0JJVE9QU19CQVJSSUVSKCkgX19hc21fXyBfX3ZvbGF0aWxlX18gKCAiIiA6IDogOiAibWVtb3J5IiApCisKKyNpZmRlZiBDT05GSUdfU01QCisvKgorICogU01QIHNhZmUgc2V0X2JpdCByb3V0aW5lIGJhc2VkIG9uIGNvbXBhcmUgYW5kIHN3YXAgKENTKQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2JpdF9jcyh1bnNpZ25lZCBsb25nIG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICpwdHIpCit7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgb2xkLCBuZXcsIG1hc2s7CisKKwlhZGRyID0gKHVuc2lnbmVkIGxvbmcpIHB0cjsKKyNpZiBBTElHTl9DUyA9PSAxCisJbnIgKz0gKGFkZHIgJiBfX0JJVE9QU19BTElHTikgPDwgMzsgICAgLyogYWRkIGFsaWdubWVudCB0byBiaXQgbnVtYmVyICovCisJYWRkciBePSBhZGRyICYgX19CSVRPUFNfQUxJR047CSAgICAgICAvKiBhbGlnbiBhZGRyZXNzIHRvIDggKi8KKyNlbmRpZgorCS8qIGNhbGN1bGF0ZSBhZGRyZXNzIGZvciBDUyAqLworCWFkZHIgKz0gKG5yIF4gKG5yICYgKF9fQklUT1BTX1dPUkRTSVpFIC0gMSkpKSA+PiAzOworCS8qIG1ha2UgT1IgbWFzayAqLworCW1hc2sgPSAxVUwgPDwgKG5yICYgKF9fQklUT1BTX1dPUkRTSVpFIC0gMSkpOworCS8qIERvIHRoZSBhdG9taWMgdXBkYXRlLiAqLworCV9fQklUT1BTX0xPT1Aob2xkLCBuZXcsIGFkZHIsIG1hc2ssIF9fQklUT1BTX09SKTsKK30KKworLyoKKyAqIFNNUCBzYWZlIGNsZWFyX2JpdCByb3V0aW5lIGJhc2VkIG9uIGNvbXBhcmUgYW5kIHN3YXAgKENTKQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfYml0X2NzKHVuc2lnbmVkIGxvbmcgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKnB0cikKK3sKKyAgICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBvbGQsIG5ldywgbWFzazsKKworCWFkZHIgPSAodW5zaWduZWQgbG9uZykgcHRyOworI2lmIEFMSUdOX0NTID09IDEKKwluciArPSAoYWRkciAmIF9fQklUT1BTX0FMSUdOKSA8PCAzOyAgICAvKiBhZGQgYWxpZ25tZW50IHRvIGJpdCBudW1iZXIgKi8KKwlhZGRyIF49IGFkZHIgJiBfX0JJVE9QU19BTElHTjsJICAgICAgIC8qIGFsaWduIGFkZHJlc3MgdG8gOCAqLworI2VuZGlmCisJLyogY2FsY3VsYXRlIGFkZHJlc3MgZm9yIENTICovCisJYWRkciArPSAobnIgXiAobnIgJiAoX19CSVRPUFNfV09SRFNJWkUgLSAxKSkpID4+IDM7CisJLyogbWFrZSBBTkQgbWFzayAqLworCW1hc2sgPSB+KDFVTCA8PCAobnIgJiAoX19CSVRPUFNfV09SRFNJWkUgLSAxKSkpOworCS8qIERvIHRoZSBhdG9taWMgdXBkYXRlLiAqLworCV9fQklUT1BTX0xPT1Aob2xkLCBuZXcsIGFkZHIsIG1hc2ssIF9fQklUT1BTX0FORCk7Cit9CisKKy8qCisgKiBTTVAgc2FmZSBjaGFuZ2VfYml0IHJvdXRpbmUgYmFzZWQgb24gY29tcGFyZSBhbmQgc3dhcCAoQ1MpCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGFuZ2VfYml0X2NzKHVuc2lnbmVkIGxvbmcgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKnB0cikKK3sKKyAgICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBvbGQsIG5ldywgbWFzazsKKworCWFkZHIgPSAodW5zaWduZWQgbG9uZykgcHRyOworI2lmIEFMSUdOX0NTID09IDEKKwluciArPSAoYWRkciAmIF9fQklUT1BTX0FMSUdOKSA8PCAzOyAgICAvKiBhZGQgYWxpZ25tZW50IHRvIGJpdCBudW1iZXIgKi8KKwlhZGRyIF49IGFkZHIgJiBfX0JJVE9QU19BTElHTjsJICAgICAgIC8qIGFsaWduIGFkZHJlc3MgdG8gOCAqLworI2VuZGlmCisJLyogY2FsY3VsYXRlIGFkZHJlc3MgZm9yIENTICovCisJYWRkciArPSAobnIgXiAobnIgJiAoX19CSVRPUFNfV09SRFNJWkUgLSAxKSkpID4+IDM7CisJLyogbWFrZSBYT1IgbWFzayAqLworCW1hc2sgPSAxVUwgPDwgKG5yICYgKF9fQklUT1BTX1dPUkRTSVpFIC0gMSkpOworCS8qIERvIHRoZSBhdG9taWMgdXBkYXRlLiAqLworCV9fQklUT1BTX0xPT1Aob2xkLCBuZXcsIGFkZHIsIG1hc2ssIF9fQklUT1BTX1hPUik7Cit9CisKKy8qCisgKiBTTVAgc2FmZSB0ZXN0X2FuZF9zZXRfYml0IHJvdXRpbmUgYmFzZWQgb24gY29tcGFyZSBhbmQgc3dhcCAoQ1MpCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50Cit0ZXN0X2FuZF9zZXRfYml0X2NzKHVuc2lnbmVkIGxvbmcgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKnB0cikKK3sKKyAgICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBvbGQsIG5ldywgbWFzazsKKworCWFkZHIgPSAodW5zaWduZWQgbG9uZykgcHRyOworI2lmIEFMSUdOX0NTID09IDEKKwluciArPSAoYWRkciAmIF9fQklUT1BTX0FMSUdOKSA8PCAzOyAgICAvKiBhZGQgYWxpZ25tZW50IHRvIGJpdCBudW1iZXIgKi8KKwlhZGRyIF49IGFkZHIgJiBfX0JJVE9QU19BTElHTjsJICAgICAgIC8qIGFsaWduIGFkZHJlc3MgdG8gOCAqLworI2VuZGlmCisJLyogY2FsY3VsYXRlIGFkZHJlc3MgZm9yIENTICovCisJYWRkciArPSAobnIgXiAobnIgJiAoX19CSVRPUFNfV09SRFNJWkUgLSAxKSkpID4+IDM7CisJLyogbWFrZSBPUi90ZXN0IG1hc2sgKi8KKwltYXNrID0gMVVMIDw8IChuciAmIChfX0JJVE9QU19XT1JEU0laRSAtIDEpKTsKKwkvKiBEbyB0aGUgYXRvbWljIHVwZGF0ZS4gKi8KKwlfX0JJVE9QU19MT09QKG9sZCwgbmV3LCBhZGRyLCBtYXNrLCBfX0JJVE9QU19PUik7CisJX19CSVRPUFNfQkFSUklFUigpOworCXJldHVybiAob2xkICYgbWFzaykgIT0gMDsKK30KKworLyoKKyAqIFNNUCBzYWZlIHRlc3RfYW5kX2NsZWFyX2JpdCByb3V0aW5lIGJhc2VkIG9uIGNvbXBhcmUgYW5kIHN3YXAgKENTKQorICovCitzdGF0aWMgaW5saW5lIGludAordGVzdF9hbmRfY2xlYXJfYml0X2NzKHVuc2lnbmVkIGxvbmcgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKnB0cikKK3sKKyAgICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBvbGQsIG5ldywgbWFzazsKKworCWFkZHIgPSAodW5zaWduZWQgbG9uZykgcHRyOworI2lmIEFMSUdOX0NTID09IDEKKwluciArPSAoYWRkciAmIF9fQklUT1BTX0FMSUdOKSA8PCAzOyAgICAvKiBhZGQgYWxpZ25tZW50IHRvIGJpdCBudW1iZXIgKi8KKwlhZGRyIF49IGFkZHIgJiBfX0JJVE9QU19BTElHTjsJICAgICAgIC8qIGFsaWduIGFkZHJlc3MgdG8gOCAqLworI2VuZGlmCisJLyogY2FsY3VsYXRlIGFkZHJlc3MgZm9yIENTICovCisJYWRkciArPSAobnIgXiAobnIgJiAoX19CSVRPUFNfV09SRFNJWkUgLSAxKSkpID4+IDM7CisJLyogbWFrZSBBTkQvdGVzdCBtYXNrICovCisJbWFzayA9IH4oMVVMIDw8IChuciAmIChfX0JJVE9QU19XT1JEU0laRSAtIDEpKSk7CisJLyogRG8gdGhlIGF0b21pYyB1cGRhdGUuICovCisJX19CSVRPUFNfTE9PUChvbGQsIG5ldywgYWRkciwgbWFzaywgX19CSVRPUFNfQU5EKTsKKwlfX0JJVE9QU19CQVJSSUVSKCk7CisJcmV0dXJuIChvbGQgXiBuZXcpICE9IDA7Cit9CisKKy8qCisgKiBTTVAgc2FmZSB0ZXN0X2FuZF9jaGFuZ2VfYml0IHJvdXRpbmUgYmFzZWQgb24gY29tcGFyZSBhbmQgc3dhcCAoQ1MpIAorICovCitzdGF0aWMgaW5saW5lIGludAordGVzdF9hbmRfY2hhbmdlX2JpdF9jcyh1bnNpZ25lZCBsb25nIG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICpwdHIpCit7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgb2xkLCBuZXcsIG1hc2s7CisKKwlhZGRyID0gKHVuc2lnbmVkIGxvbmcpIHB0cjsKKyNpZiBBTElHTl9DUyA9PSAxCisJbnIgKz0gKGFkZHIgJiBfX0JJVE9QU19BTElHTikgPDwgMzsgIC8qIGFkZCBhbGlnbm1lbnQgdG8gYml0IG51bWJlciAqLworCWFkZHIgXj0gYWRkciAmIF9fQklUT1BTX0FMSUdOOwkgICAgIC8qIGFsaWduIGFkZHJlc3MgdG8gOCAqLworI2VuZGlmCisJLyogY2FsY3VsYXRlIGFkZHJlc3MgZm9yIENTICovCisJYWRkciArPSAobnIgXiAobnIgJiAoX19CSVRPUFNfV09SRFNJWkUgLSAxKSkpID4+IDM7CisJLyogbWFrZSBYT1IvdGVzdCBtYXNrICovCisJbWFzayA9IDFVTCA8PCAobnIgJiAoX19CSVRPUFNfV09SRFNJWkUgLSAxKSk7CisJLyogRG8gdGhlIGF0b21pYyB1cGRhdGUuICovCisJX19CSVRPUFNfTE9PUChvbGQsIG5ldywgYWRkciwgbWFzaywgX19CSVRPUFNfWE9SKTsKKwlfX0JJVE9QU19CQVJSSUVSKCk7CisJcmV0dXJuIChvbGQgJiBtYXNrKSAhPSAwOworfQorI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KKworLyoKKyAqIGZhc3QsIG5vbi1TTVAgc2V0X2JpdCByb3V0aW5lCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3NldF9iaXQodW5zaWduZWQgbG9uZyBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqcHRyKQoreworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKworCWFkZHIgPSAodW5zaWduZWQgbG9uZykgcHRyICsgKChuciBeIChfX0JJVE9QU19XT1JEU0laRSAtIDgpKSA+PiAzKTsKKyAgICAgICAgYXNtIHZvbGF0aWxlKCJvYyAwKDEsJTEpLDAoJTIpIgorCQkgICAgIDogIj1tIiAoKihjaGFyICopIGFkZHIpCisJCSAgICAgOiAiYSIgKGFkZHIpLCAiYSIgKF9vaV9iaXRtYXAgKyAobnIgJiA3KSksCisJCSAgICAgICAibSIgKCooY2hhciAqKSBhZGRyKSA6ICJjYyIgKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIAorX19jb25zdGFudF9zZXRfYml0KGNvbnN0IHVuc2lnbmVkIGxvbmcgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKnB0cikKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisKKwlhZGRyID0gKCh1bnNpZ25lZCBsb25nKSBwdHIpICsgKChuciBeIChfX0JJVE9QU19XT1JEU0laRSAtIDgpKSA+PiAzKTsKKwlzd2l0Y2ggKG5yJjcpIHsKKwljYXNlIDA6CisJCWFzbSB2b2xhdGlsZSAoIm9pIDAoJTEpLDB4MDEiIDogIj1tIiAoKihjaGFyICopIGFkZHIpCisJCQkgICAgICA6ICJhIiAoYWRkciksICJtIiAoKihjaGFyICopIGFkZHIpIDogImNjIiApOworCQlicmVhazsKKwljYXNlIDE6CisJCWFzbSB2b2xhdGlsZSAoIm9pIDAoJTEpLDB4MDIiIDogIj1tIiAoKihjaGFyICopIGFkZHIpCisJCQkgICAgICA6ICJhIiAoYWRkciksICJtIiAoKihjaGFyICopIGFkZHIpIDogImNjIiApOworCQlicmVhazsKKwljYXNlIDI6CisJCWFzbSB2b2xhdGlsZSAoIm9pIDAoJTEpLDB4MDQiIDogIj1tIiAoKihjaGFyICopIGFkZHIpCisJCQkgICAgICA6ICJhIiAoYWRkciksICJtIiAoKihjaGFyICopIGFkZHIpIDogImNjIiApOworCQlicmVhazsKKwljYXNlIDM6CisJCWFzbSB2b2xhdGlsZSAoIm9pIDAoJTEpLDB4MDgiIDogIj1tIiAoKihjaGFyICopIGFkZHIpCisJCQkgICAgICA6ICJhIiAoYWRkciksICJtIiAoKihjaGFyICopIGFkZHIpIDogImNjIiApOworCQlicmVhazsKKwljYXNlIDQ6CisJCWFzbSB2b2xhdGlsZSAoIm9pIDAoJTEpLDB4MTAiIDogIj1tIiAoKihjaGFyICopIGFkZHIpCisJCQkgICAgICA6ICJhIiAoYWRkciksICJtIiAoKihjaGFyICopIGFkZHIpIDogImNjIiApOworCQlicmVhazsKKwljYXNlIDU6CisJCWFzbSB2b2xhdGlsZSAoIm9pIDAoJTEpLDB4MjAiIDogIj1tIiAoKihjaGFyICopIGFkZHIpCisJCQkgICAgICA6ICJhIiAoYWRkciksICJtIiAoKihjaGFyICopIGFkZHIpIDogImNjIiApOworCQlicmVhazsKKwljYXNlIDY6CisJCWFzbSB2b2xhdGlsZSAoIm9pIDAoJTEpLDB4NDAiIDogIj1tIiAoKihjaGFyICopIGFkZHIpCisJCQkgICAgICA6ICJhIiAoYWRkciksICJtIiAoKihjaGFyICopIGFkZHIpIDogImNjIiApOworCQlicmVhazsKKwljYXNlIDc6CisJCWFzbSB2b2xhdGlsZSAoIm9pIDAoJTEpLDB4ODAiIDogIj1tIiAoKihjaGFyICopIGFkZHIpCisJCQkgICAgICA6ICJhIiAoYWRkciksICJtIiAoKihjaGFyICopIGFkZHIpIDogImNjIiApOworCQlicmVhazsKKwl9Cit9CisKKyNkZWZpbmUgc2V0X2JpdF9zaW1wbGUobnIsYWRkcikgXAorKF9fYnVpbHRpbl9jb25zdGFudF9wKChucikpID8gXAorIF9fY29uc3RhbnRfc2V0X2JpdCgobnIpLChhZGRyKSkgOiBcCisgX19zZXRfYml0KChuciksKGFkZHIpKSApCisKKy8qCisgKiBmYXN0LCBub24tU01QIGNsZWFyX2JpdCByb3V0aW5lCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCAKK19fY2xlYXJfYml0KHVuc2lnbmVkIGxvbmcgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKnB0cikKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisKKwlhZGRyID0gKHVuc2lnbmVkIGxvbmcpIHB0ciArICgobnIgXiAoX19CSVRPUFNfV09SRFNJWkUgLSA4KSkgPj4gMyk7CisgICAgICAgIGFzbSB2b2xhdGlsZSgibmMgMCgxLCUxKSwwKCUyKSIKKwkJICAgICA6ICI9bSIgKCooY2hhciAqKSBhZGRyKQorCQkgICAgIDogImEiIChhZGRyKSwgImEiIChfbmlfYml0bWFwICsgKG5yICYgNykpLAorCQkgICAgICAgIm0iICgqKGNoYXIgKikgYWRkcikgOiAiY2MiICk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAKK19fY29uc3RhbnRfY2xlYXJfYml0KGNvbnN0IHVuc2lnbmVkIGxvbmcgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKnB0cikKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisKKwlhZGRyID0gKCh1bnNpZ25lZCBsb25nKSBwdHIpICsgKChuciBeIChfX0JJVE9QU19XT1JEU0laRSAtIDgpKSA+PiAzKTsKKwlzd2l0Y2ggKG5yJjcpIHsKKwljYXNlIDA6CisJCWFzbSB2b2xhdGlsZSAoIm5pIDAoJTEpLDB4RkUiIDogIj1tIiAoKihjaGFyICopIGFkZHIpCisJCQkgICAgICA6ICJhIiAoYWRkciksICJtIiAoKihjaGFyICopIGFkZHIpIDogImNjIiApOworCQlicmVhazsKKwljYXNlIDE6CisJCWFzbSB2b2xhdGlsZSAoIm5pIDAoJTEpLDB4RkQiOiAiPW0iICgqKGNoYXIgKikgYWRkcikKKwkJCSAgICAgIDogImEiIChhZGRyKSwgIm0iICgqKGNoYXIgKikgYWRkcikgOiAiY2MiICk7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJYXNtIHZvbGF0aWxlICgibmkgMCglMSksMHhGQiIgOiAiPW0iICgqKGNoYXIgKikgYWRkcikKKwkJCSAgICAgIDogImEiIChhZGRyKSwgIm0iICgqKGNoYXIgKikgYWRkcikgOiAiY2MiICk7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJYXNtIHZvbGF0aWxlICgibmkgMCglMSksMHhGNyIgOiAiPW0iICgqKGNoYXIgKikgYWRkcikKKwkJCSAgICAgIDogImEiIChhZGRyKSwgIm0iICgqKGNoYXIgKikgYWRkcikgOiAiY2MiICk7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJYXNtIHZvbGF0aWxlICgibmkgMCglMSksMHhFRiIgOiAiPW0iICgqKGNoYXIgKikgYWRkcikKKwkJCSAgICAgIDogImEiIChhZGRyKSwgIm0iICgqKGNoYXIgKikgYWRkcikgOiAiY2MiICk7CisJCWJyZWFrOworCWNhc2UgNToKKwkJYXNtIHZvbGF0aWxlICgibmkgMCglMSksMHhERiIgOiAiPW0iICgqKGNoYXIgKikgYWRkcikKKwkJCSAgICAgIDogImEiIChhZGRyKSwgIm0iICgqKGNoYXIgKikgYWRkcikgOiAiY2MiICk7CisJCWJyZWFrOworCWNhc2UgNjoKKwkJYXNtIHZvbGF0aWxlICgibmkgMCglMSksMHhCRiIgOiAiPW0iICgqKGNoYXIgKikgYWRkcikKKwkJCSAgICAgIDogImEiIChhZGRyKSwgIm0iICgqKGNoYXIgKikgYWRkcikgOiAiY2MiICk7CisJCWJyZWFrOworCWNhc2UgNzoKKwkJYXNtIHZvbGF0aWxlICgibmkgMCglMSksMHg3RiIgOiAiPW0iICgqKGNoYXIgKikgYWRkcikKKwkJCSAgICAgIDogImEiIChhZGRyKSwgIm0iICgqKGNoYXIgKikgYWRkcikgOiAiY2MiICk7CisJCWJyZWFrOworCX0KK30KKworI2RlZmluZSBjbGVhcl9iaXRfc2ltcGxlKG5yLGFkZHIpIFwKKyhfX2J1aWx0aW5fY29uc3RhbnRfcCgobnIpKSA/IFwKKyBfX2NvbnN0YW50X2NsZWFyX2JpdCgobnIpLChhZGRyKSkgOiBcCisgX19jbGVhcl9iaXQoKG5yKSwoYWRkcikpICkKKworLyogCisgKiBmYXN0LCBub24tU01QIGNoYW5nZV9iaXQgcm91dGluZSAKKyAqLworc3RhdGljIGlubGluZSB2b2lkIF9fY2hhbmdlX2JpdCh1bnNpZ25lZCBsb25nIG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICpwdHIpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCisJYWRkciA9ICh1bnNpZ25lZCBsb25nKSBwdHIgKyAoKG5yIF4gKF9fQklUT1BTX1dPUkRTSVpFIC0gOCkpID4+IDMpOworICAgICAgICBhc20gdm9sYXRpbGUoInhjIDAoMSwlMSksMCglMikiCisJCSAgICAgOiAgIj1tIiAoKihjaGFyICopIGFkZHIpCisJCSAgICAgOiAiYSIgKGFkZHIpLCAiYSIgKF9vaV9iaXRtYXAgKyAobnIgJiA3KSksCisJCSAgICAgICAibSIgKCooY2hhciAqKSBhZGRyKSA6ICJjYyIgKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIAorX19jb25zdGFudF9jaGFuZ2VfYml0KGNvbnN0IHVuc2lnbmVkIGxvbmcgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKnB0cikgCit7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCisJYWRkciA9ICgodW5zaWduZWQgbG9uZykgcHRyKSArICgobnIgXiAoX19CSVRPUFNfV09SRFNJWkUgLSA4KSkgPj4gMyk7CisJc3dpdGNoIChuciY3KSB7CisJY2FzZSAwOgorCQlhc20gdm9sYXRpbGUgKCJ4aSAwKCUxKSwweDAxIiA6ICI9bSIgKCooY2hhciAqKSBhZGRyKQorCQkJICAgICAgOiAiYSIgKGFkZHIpLCAibSIgKCooY2hhciAqKSBhZGRyKSA6ICJjYyIgKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlhc20gdm9sYXRpbGUgKCJ4aSAwKCUxKSwweDAyIiA6ICI9bSIgKCooY2hhciAqKSBhZGRyKQorCQkJICAgICAgOiAiYSIgKGFkZHIpLCAibSIgKCooY2hhciAqKSBhZGRyKSA6ICJjYyIgKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlhc20gdm9sYXRpbGUgKCJ4aSAwKCUxKSwweDA0IiA6ICI9bSIgKCooY2hhciAqKSBhZGRyKQorCQkJICAgICAgOiAiYSIgKGFkZHIpLCAibSIgKCooY2hhciAqKSBhZGRyKSA6ICJjYyIgKTsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlhc20gdm9sYXRpbGUgKCJ4aSAwKCUxKSwweDA4IiA6ICI9bSIgKCooY2hhciAqKSBhZGRyKQorCQkJICAgICAgOiAiYSIgKGFkZHIpLCAibSIgKCooY2hhciAqKSBhZGRyKSA6ICJjYyIgKTsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlhc20gdm9sYXRpbGUgKCJ4aSAwKCUxKSwweDEwIiA6ICI9bSIgKCooY2hhciAqKSBhZGRyKQorCQkJICAgICAgOiAiYSIgKGFkZHIpLCAibSIgKCooY2hhciAqKSBhZGRyKSA6ICJjYyIgKTsKKwkJYnJlYWs7CisJY2FzZSA1OgorCQlhc20gdm9sYXRpbGUgKCJ4aSAwKCUxKSwweDIwIiA6ICI9bSIgKCooY2hhciAqKSBhZGRyKQorCQkJICAgICAgOiAiYSIgKGFkZHIpLCAibSIgKCooY2hhciAqKSBhZGRyKSA6ICJjYyIgKTsKKwkJYnJlYWs7CisJY2FzZSA2OgorCQlhc20gdm9sYXRpbGUgKCJ4aSAwKCUxKSwweDQwIiA6ICI9bSIgKCooY2hhciAqKSBhZGRyKQorCQkJICAgICAgOiAiYSIgKGFkZHIpLCAibSIgKCooY2hhciAqKSBhZGRyKSA6ICJjYyIgKTsKKwkJYnJlYWs7CisJY2FzZSA3OgorCQlhc20gdm9sYXRpbGUgKCJ4aSAwKCUxKSwweDgwIiA6ICI9bSIgKCooY2hhciAqKSBhZGRyKQorCQkJICAgICAgOiAiYSIgKGFkZHIpLCAibSIgKCooY2hhciAqKSBhZGRyKSA6ICJjYyIgKTsKKwkJYnJlYWs7CisJfQorfQorCisjZGVmaW5lIGNoYW5nZV9iaXRfc2ltcGxlKG5yLGFkZHIpIFwKKyhfX2J1aWx0aW5fY29uc3RhbnRfcCgobnIpKSA/IFwKKyBfX2NvbnN0YW50X2NoYW5nZV9iaXQoKG5yKSwoYWRkcikpIDogXAorIF9fY2hhbmdlX2JpdCgobnIpLChhZGRyKSkgKQorCisvKgorICogZmFzdCwgbm9uLVNNUCB0ZXN0X2FuZF9zZXRfYml0IHJvdXRpbmUKKyAqLworc3RhdGljIGlubGluZSBpbnQKK3Rlc3RfYW5kX3NldF9iaXRfc2ltcGxlKHVuc2lnbmVkIGxvbmcgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKnB0cikKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisJdW5zaWduZWQgY2hhciBjaDsKKworCWFkZHIgPSAodW5zaWduZWQgbG9uZykgcHRyICsgKChuciBeIChfX0JJVE9QU19XT1JEU0laRSAtIDgpKSA+PiAzKTsKKwljaCA9ICoodW5zaWduZWQgY2hhciAqKSBhZGRyOworICAgICAgICBhc20gdm9sYXRpbGUoIm9jIDAoMSwlMSksMCglMikiCisJCSAgICAgOiAiPW0iICgqKGNoYXIgKikgYWRkcikKKwkJICAgICA6ICJhIiAoYWRkciksICJhIiAoX29pX2JpdG1hcCArIChuciAmIDcpKSwKKwkJICAgICAgICJtIiAoKihjaGFyICopIGFkZHIpIDogImNjIiwgIm1lbW9yeSIgKTsKKwlyZXR1cm4gKGNoID4+IChuciAmIDcpKSAmIDE7Cit9CisjZGVmaW5lIF9fdGVzdF9hbmRfc2V0X2JpdChYLFkpCQl0ZXN0X2FuZF9zZXRfYml0X3NpbXBsZShYLFkpCisKKy8qCisgKiBmYXN0LCBub24tU01QIHRlc3RfYW5kX2NsZWFyX2JpdCByb3V0aW5lCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50Cit0ZXN0X2FuZF9jbGVhcl9iaXRfc2ltcGxlKHVuc2lnbmVkIGxvbmcgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKnB0cikKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisJdW5zaWduZWQgY2hhciBjaDsKKworCWFkZHIgPSAodW5zaWduZWQgbG9uZykgcHRyICsgKChuciBeIChfX0JJVE9QU19XT1JEU0laRSAtIDgpKSA+PiAzKTsKKwljaCA9ICoodW5zaWduZWQgY2hhciAqKSBhZGRyOworICAgICAgICBhc20gdm9sYXRpbGUoIm5jIDAoMSwlMSksMCglMikiCisJCSAgICAgOiAiPW0iICgqKGNoYXIgKikgYWRkcikKKwkJICAgICA6ICJhIiAoYWRkciksICJhIiAoX25pX2JpdG1hcCArIChuciAmIDcpKSwKKwkJICAgICAgICJtIiAoKihjaGFyICopIGFkZHIpIDogImNjIiwgIm1lbW9yeSIgKTsKKwlyZXR1cm4gKGNoID4+IChuciAmIDcpKSAmIDE7Cit9CisjZGVmaW5lIF9fdGVzdF9hbmRfY2xlYXJfYml0KFgsWSkJdGVzdF9hbmRfY2xlYXJfYml0X3NpbXBsZShYLFkpCisKKy8qCisgKiBmYXN0LCBub24tU01QIHRlc3RfYW5kX2NoYW5nZV9iaXQgcm91dGluZQorICovCitzdGF0aWMgaW5saW5lIGludAordGVzdF9hbmRfY2hhbmdlX2JpdF9zaW1wbGUodW5zaWduZWQgbG9uZyBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqcHRyKQoreworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwl1bnNpZ25lZCBjaGFyIGNoOworCisJYWRkciA9ICh1bnNpZ25lZCBsb25nKSBwdHIgKyAoKG5yIF4gKF9fQklUT1BTX1dPUkRTSVpFIC0gOCkpID4+IDMpOworCWNoID0gKih1bnNpZ25lZCBjaGFyICopIGFkZHI7CisgICAgICAgIGFzbSB2b2xhdGlsZSgieGMgMCgxLCUxKSwwKCUyKSIKKwkJICAgICA6ICI9bSIgKCooY2hhciAqKSBhZGRyKQorCQkgICAgIDogImEiIChhZGRyKSwgImEiIChfb2lfYml0bWFwICsgKG5yICYgNykpLAorCQkgICAgICAgIm0iICgqKGNoYXIgKikgYWRkcikgOiAiY2MiLCAibWVtb3J5IiApOworCXJldHVybiAoY2ggPj4gKG5yICYgNykpICYgMTsKK30KKyNkZWZpbmUgX190ZXN0X2FuZF9jaGFuZ2VfYml0KFgsWSkJdGVzdF9hbmRfY2hhbmdlX2JpdF9zaW1wbGUoWCxZKQorCisjaWZkZWYgQ09ORklHX1NNUAorI2RlZmluZSBzZXRfYml0ICAgICAgICAgICAgIHNldF9iaXRfY3MKKyNkZWZpbmUgY2xlYXJfYml0ICAgICAgICAgICBjbGVhcl9iaXRfY3MKKyNkZWZpbmUgY2hhbmdlX2JpdCAgICAgICAgICBjaGFuZ2VfYml0X2NzCisjZGVmaW5lIHRlc3RfYW5kX3NldF9iaXQgICAgdGVzdF9hbmRfc2V0X2JpdF9jcworI2RlZmluZSB0ZXN0X2FuZF9jbGVhcl9iaXQgIHRlc3RfYW5kX2NsZWFyX2JpdF9jcworI2RlZmluZSB0ZXN0X2FuZF9jaGFuZ2VfYml0IHRlc3RfYW5kX2NoYW5nZV9iaXRfY3MKKyNlbHNlCisjZGVmaW5lIHNldF9iaXQgICAgICAgICAgICAgc2V0X2JpdF9zaW1wbGUKKyNkZWZpbmUgY2xlYXJfYml0ICAgICAgICAgICBjbGVhcl9iaXRfc2ltcGxlCisjZGVmaW5lIGNoYW5nZV9iaXQgICAgICAgICAgY2hhbmdlX2JpdF9zaW1wbGUKKyNkZWZpbmUgdGVzdF9hbmRfc2V0X2JpdCAgICB0ZXN0X2FuZF9zZXRfYml0X3NpbXBsZQorI2RlZmluZSB0ZXN0X2FuZF9jbGVhcl9iaXQgIHRlc3RfYW5kX2NsZWFyX2JpdF9zaW1wbGUKKyNkZWZpbmUgdGVzdF9hbmRfY2hhbmdlX2JpdCB0ZXN0X2FuZF9jaGFuZ2VfYml0X3NpbXBsZQorI2VuZGlmCisKKworLyoKKyAqIFRoaXMgcm91dGluZSBkb2Vzbid0IG5lZWQgdG8gYmUgYXRvbWljLgorICovCisKK3N0YXRpYyBpbmxpbmUgaW50IF9fdGVzdF9iaXQodW5zaWduZWQgbG9uZyBuciwgY29uc3Qgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqcHRyKQoreworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwl1bnNpZ25lZCBjaGFyIGNoOworCisJYWRkciA9ICh1bnNpZ25lZCBsb25nKSBwdHIgKyAoKG5yIF4gKF9fQklUT1BTX1dPUkRTSVpFIC0gOCkpID4+IDMpOworCWNoID0gKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIGFkZHI7CisJcmV0dXJuIChjaCA+PiAobnIgJiA3KSkgJiAxOworfQorCitzdGF0aWMgaW5saW5lIGludCAKK19fY29uc3RhbnRfdGVzdF9iaXQodW5zaWduZWQgbG9uZyBuciwgY29uc3Qgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcikgeworICAgIHJldHVybiAoKCh2b2xhdGlsZSBjaGFyICopIGFkZHIpCisJICAgIFsobnJeKF9fQklUT1BTX1dPUkRTSVpFLTgpKT4+M10gJiAoMTw8KG5yJjcpKSk7Cit9CisKKyNkZWZpbmUgdGVzdF9iaXQobnIsYWRkcikgXAorKF9fYnVpbHRpbl9jb25zdGFudF9wKChucikpID8gXAorIF9fY29uc3RhbnRfdGVzdF9iaXQoKG5yKSwoYWRkcikpIDogXAorIF9fdGVzdF9iaXQoKG5yKSwoYWRkcikpICkKKworI2lmbmRlZiBfX3MzOTB4X18KKworLyoKKyAqIEZpbmQtYml0IHJvdXRpbmVzLi4KKyAqLworc3RhdGljIGlubGluZSBpbnQKK2ZpbmRfZmlyc3RfemVyb19iaXQoY29uc3QgdW5zaWduZWQgbG9uZyAqIGFkZHIsIHVuc2lnbmVkIGludCBzaXplKQoreworCXR5cGVkZWYgc3RydWN0IHsgbG9uZyBfW19fQklUT1BTX1dPUkRTKHNpemUpXTsgfSBhZGRydHlwZTsKKwl1bnNpZ25lZCBsb25nIGNtcCwgY291bnQ7CisgICAgICAgIHVuc2lnbmVkIGludCByZXM7CisKKyAgICAgICAgaWYgKCFzaXplKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBfX2FzbV9fKCIgICBsaGkgICUxLC0xXG4iCisgICAgICAgICAgICAgICAgIiAgIGxyICAgJTIsJTNcbiIKKyAgICAgICAgICAgICAgICAiICAgc2xyICAlMCwlMFxuIgorICAgICAgICAgICAgICAgICIgICBhaGkgICUyLDMxXG4iCisgICAgICAgICAgICAgICAgIiAgIHNybCAgJTIsNVxuIgorICAgICAgICAgICAgICAgICIwOiBjICAgICUxLDAoJTAsJTQpXG4iCisgICAgICAgICAgICAgICAgIiAgIGpuZSAgMWZcbiIKKyAgICAgICAgICAgICAgICAiICAgYWhpICAlMCw0XG4iCisgICAgICAgICAgICAgICAgIiAgIGJyY3QgJTIsMGJcbiIKKyAgICAgICAgICAgICAgICAiICAgbHIgICAlMCwlM1xuIgorICAgICAgICAgICAgICAgICIgICBqICAgIDRmXG4iCisgICAgICAgICAgICAgICAgIjE6IGwgICAgJTIsMCglMCwlNClcbiIKKyAgICAgICAgICAgICAgICAiICAgc2xsICAlMCwzXG4iCisgICAgICAgICAgICAgICAgIiAgIGxoaSAgJTEsMHhmZlxuIgorICAgICAgICAgICAgICAgICIgICB0bWwgICUyLDB4ZmZmZlxuIgorICAgICAgICAgICAgICAgICIgICBqbm8gIDJmXG4iCisgICAgICAgICAgICAgICAgIiAgIGFoaSAgJTAsMTZcbiIKKyAgICAgICAgICAgICAgICAiICAgc3JsICAlMiwxNlxuIgorICAgICAgICAgICAgICAgICIyOiB0bWwgICUyLDB4MDBmZlxuIgorICAgICAgICAgICAgICAgICIgICBqbm8gIDNmXG4iCisgICAgICAgICAgICAgICAgIiAgIGFoaSAgJTAsOFxuIgorICAgICAgICAgICAgICAgICIgICBzcmwgICUyLDhcbiIKKyAgICAgICAgICAgICAgICAiMzogbnIgICAlMiwlMVxuIgorICAgICAgICAgICAgICAgICIgICBpYyAgICUyLDAoJTIsJTUpXG4iCisgICAgICAgICAgICAgICAgIiAgIGFsciAgJTAsJTJcbiIKKyAgICAgICAgICAgICAgICAiNDoiCisgICAgICAgICAgICAgICAgOiAiPSZhIiAocmVzKSwgIj0mZCIgKGNtcCksICI9JmEiIChjb3VudCkKKyAgICAgICAgICAgICAgICA6ICJhIiAoc2l6ZSksICJhIiAoYWRkciksICJhIiAoJl96Yl9maW5kbWFwKSwKKwkJICAibSIgKCooYWRkcnR5cGUgKikgYWRkcikgOiAiY2MiICk7CisgICAgICAgIHJldHVybiAocmVzIDwgc2l6ZSkgPyByZXMgOiBzaXplOworfQorCitzdGF0aWMgaW5saW5lIGludAorZmluZF9maXJzdF9iaXQoY29uc3QgdW5zaWduZWQgbG9uZyAqIGFkZHIsIHVuc2lnbmVkIGludCBzaXplKQoreworCXR5cGVkZWYgc3RydWN0IHsgbG9uZyBfW19fQklUT1BTX1dPUkRTKHNpemUpXTsgfSBhZGRydHlwZTsKKwl1bnNpZ25lZCBsb25nIGNtcCwgY291bnQ7CisgICAgICAgIHVuc2lnbmVkIGludCByZXM7CisKKyAgICAgICAgaWYgKCFzaXplKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBfX2FzbV9fKCIgICBzbHIgICUxLCUxXG4iCisgICAgICAgICAgICAgICAgIiAgIGxyICAgJTIsJTNcbiIKKyAgICAgICAgICAgICAgICAiICAgc2xyICAlMCwlMFxuIgorICAgICAgICAgICAgICAgICIgICBhaGkgICUyLDMxXG4iCisgICAgICAgICAgICAgICAgIiAgIHNybCAgJTIsNVxuIgorICAgICAgICAgICAgICAgICIwOiBjICAgICUxLDAoJTAsJTQpXG4iCisgICAgICAgICAgICAgICAgIiAgIGpuZSAgMWZcbiIKKyAgICAgICAgICAgICAgICAiICAgYWhpICAlMCw0XG4iCisgICAgICAgICAgICAgICAgIiAgIGJyY3QgJTIsMGJcbiIKKyAgICAgICAgICAgICAgICAiICAgbHIgICAlMCwlM1xuIgorICAgICAgICAgICAgICAgICIgICBqICAgIDRmXG4iCisgICAgICAgICAgICAgICAgIjE6IGwgICAgJTIsMCglMCwlNClcbiIKKyAgICAgICAgICAgICAgICAiICAgc2xsICAlMCwzXG4iCisgICAgICAgICAgICAgICAgIiAgIGxoaSAgJTEsMHhmZlxuIgorICAgICAgICAgICAgICAgICIgICB0bWwgICUyLDB4ZmZmZlxuIgorICAgICAgICAgICAgICAgICIgICBqbnogIDJmXG4iCisgICAgICAgICAgICAgICAgIiAgIGFoaSAgJTAsMTZcbiIKKyAgICAgICAgICAgICAgICAiICAgc3JsICAlMiwxNlxuIgorICAgICAgICAgICAgICAgICIyOiB0bWwgICUyLDB4MDBmZlxuIgorICAgICAgICAgICAgICAgICIgICBqbnogIDNmXG4iCisgICAgICAgICAgICAgICAgIiAgIGFoaSAgJTAsOFxuIgorICAgICAgICAgICAgICAgICIgICBzcmwgICUyLDhcbiIKKyAgICAgICAgICAgICAgICAiMzogbnIgICAlMiwlMVxuIgorICAgICAgICAgICAgICAgICIgICBpYyAgICUyLDAoJTIsJTUpXG4iCisgICAgICAgICAgICAgICAgIiAgIGFsciAgJTAsJTJcbiIKKyAgICAgICAgICAgICAgICAiNDoiCisgICAgICAgICAgICAgICAgOiAiPSZhIiAocmVzKSwgIj0mZCIgKGNtcCksICI9JmEiIChjb3VudCkKKyAgICAgICAgICAgICAgICA6ICJhIiAoc2l6ZSksICJhIiAoYWRkciksICJhIiAoJl9zYl9maW5kbWFwKSwKKwkJICAibSIgKCooYWRkcnR5cGUgKikgYWRkcikgOiAiY2MiICk7CisgICAgICAgIHJldHVybiAocmVzIDwgc2l6ZSkgPyByZXMgOiBzaXplOworfQorCitzdGF0aWMgaW5saW5lIGludAorZmluZF9uZXh0X3plcm9fYml0IChjb25zdCB1bnNpZ25lZCBsb25nICogYWRkciwgaW50IHNpemUsIGludCBvZmZzZXQpCit7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgKiBwID0gKCh1bnNpZ25lZCBsb25nICopIGFkZHIpICsgKG9mZnNldCA+PiA1KTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBiaXR2ZWMsIHJlZzsKKyAgICAgICAgaW50IHNldCwgYml0ID0gb2Zmc2V0ICYgMzEsIHJlczsKKworICAgICAgICBpZiAoYml0KSB7CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBMb29rIGZvciB6ZXJvIGluIGZpcnN0IHdvcmQKKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBiaXR2ZWMgPSAoKnApID4+IGJpdDsKKyAgICAgICAgICAgICAgICBfX2FzbV9fKCIgICBzbHIgICUwLCUwXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAiICAgbGhpICAlMiwweGZmXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAiICAgdG1sICAlMSwweGZmZmZcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICIgICBqbm8gIDBmXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAiICAgYWhpICAlMCwxNlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgIiAgIHNybCAgJTEsMTZcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICIwOiB0bWwgICUxLDB4MDBmZlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgIiAgIGpubyAgMWZcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICIgICBhaGkgICUwLDhcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICIgICBzcmwgICUxLDhcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICIxOiBuciAgICUxLCUyXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAiICAgaWMgICAlMSwwKCUxLCUzKVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgIiAgIGFsciAgJTAsJTEiCisgICAgICAgICAgICAgICAgICAgICAgICA6ICI9JmQiIChzZXQpLCAiK2EiIChiaXR2ZWMpLCAiPSZkIiAocmVnKQorICAgICAgICAgICAgICAgICAgICAgICAgOiAiYSIgKCZfemJfZmluZG1hcCkgOiAiY2MiICk7CisgICAgICAgICAgICAgICAgaWYgKHNldCA8ICgzMiAtIGJpdCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0ICsgb2Zmc2V0OworICAgICAgICAgICAgICAgIG9mZnNldCArPSAzMiAtIGJpdDsKKyAgICAgICAgICAgICAgICBwKys7CisgICAgICAgIH0KKyAgICAgICAgLyoKKyAgICAgICAgICogTm8gemVybyB5ZXQsIHNlYXJjaCByZW1haW5pbmcgZnVsbCB3b3JkcyBmb3IgYSB6ZXJvCisgICAgICAgICAqLworICAgICAgICByZXMgPSBmaW5kX2ZpcnN0X3plcm9fYml0IChwLCBzaXplIC0gMzIgKiAocCAtICh1bnNpZ25lZCBsb25nICopIGFkZHIpKTsKKyAgICAgICAgcmV0dXJuIChvZmZzZXQgKyByZXMpOworfQorCitzdGF0aWMgaW5saW5lIGludAorZmluZF9uZXh0X2JpdCAoY29uc3QgdW5zaWduZWQgbG9uZyAqIGFkZHIsIGludCBzaXplLCBpbnQgb2Zmc2V0KQoreworICAgICAgICB1bnNpZ25lZCBsb25nICogcCA9ICgodW5zaWduZWQgbG9uZyAqKSBhZGRyKSArIChvZmZzZXQgPj4gNSk7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgYml0dmVjLCByZWc7CisgICAgICAgIGludCBzZXQsIGJpdCA9IG9mZnNldCAmIDMxLCByZXM7CisKKyAgICAgICAgaWYgKGJpdCkgeworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogTG9vayBmb3Igc2V0IGJpdCBpbiBmaXJzdCB3b3JkCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgYml0dmVjID0gKCpwKSA+PiBiaXQ7CisgICAgICAgICAgICAgICAgX19hc21fXygiICAgc2xyICAlMCwlMFxuIgorICAgICAgICAgICAgICAgICAgICAgICAgIiAgIGxoaSAgJTIsMHhmZlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgIiAgIHRtbCAgJTEsMHhmZmZmXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAiICAgam56ICAwZlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgIiAgIGFoaSAgJTAsMTZcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICIgICBzcmwgICUxLDE2XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAiMDogdG1sICAlMSwweDAwZmZcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICIgICBqbnogIDFmXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAiICAgYWhpICAlMCw4XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAiICAgc3JsICAlMSw4XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAiMTogbnIgICAlMSwlMlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgIiAgIGljICAgJTEsMCglMSwlMylcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICIgICBhbHIgICUwLCUxIgorICAgICAgICAgICAgICAgICAgICAgICAgOiAiPSZkIiAoc2V0KSwgIithIiAoYml0dmVjKSwgIj0mZCIgKHJlZykKKyAgICAgICAgICAgICAgICAgICAgICAgIDogImEiICgmX3NiX2ZpbmRtYXApIDogImNjIiApOworICAgICAgICAgICAgICAgIGlmIChzZXQgPCAoMzIgLSBiaXQpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldCArIG9mZnNldDsKKyAgICAgICAgICAgICAgICBvZmZzZXQgKz0gMzIgLSBiaXQ7CisgICAgICAgICAgICAgICAgcCsrOworICAgICAgICB9CisgICAgICAgIC8qCisgICAgICAgICAqIE5vIHNldCBiaXQgeWV0LCBzZWFyY2ggcmVtYWluaW5nIGZ1bGwgd29yZHMgZm9yIGEgYml0CisgICAgICAgICAqLworICAgICAgICByZXMgPSBmaW5kX2ZpcnN0X2JpdCAocCwgc2l6ZSAtIDMyICogKHAgLSAodW5zaWduZWQgbG9uZyAqKSBhZGRyKSk7CisgICAgICAgIHJldHVybiAob2Zmc2V0ICsgcmVzKTsKK30KKworI2Vsc2UgLyogX19zMzkweF9fICovCisKKy8qCisgKiBGaW5kLWJpdCByb3V0aW5lcy4uCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZworZmluZF9maXJzdF96ZXJvX2JpdChjb25zdCB1bnNpZ25lZCBsb25nICogYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXR5cGVkZWYgc3RydWN0IHsgbG9uZyBfW19fQklUT1BTX1dPUkRTKHNpemUpXTsgfSBhZGRydHlwZTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyByZXMsIGNtcCwgY291bnQ7CisKKyAgICAgICAgaWYgKCFzaXplKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBfX2FzbV9fKCIgICBsZ2hpICAlMSwtMVxuIgorICAgICAgICAgICAgICAgICIgICBsZ3IgICAlMiwlM1xuIgorICAgICAgICAgICAgICAgICIgICBzbGdyICAlMCwlMFxuIgorICAgICAgICAgICAgICAgICIgICBhZ2hpICAlMiw2M1xuIgorICAgICAgICAgICAgICAgICIgICBzcmxnICAlMiwlMiw2XG4iCisgICAgICAgICAgICAgICAgIjA6IGNnICAgICUxLDAoJTAsJTQpXG4iCisgICAgICAgICAgICAgICAgIiAgIGpuZSAgIDFmXG4iCisgICAgICAgICAgICAgICAgIiAgIGFnaGkgICUwLDhcbiIKKyAgICAgICAgICAgICAgICAiICAgYnJjdCAgJTIsMGJcbiIKKyAgICAgICAgICAgICAgICAiICAgbGdyICAgJTAsJTNcbiIKKyAgICAgICAgICAgICAgICAiICAgaiAgICAgNWZcbiIKKyAgICAgICAgICAgICAgICAiMTogbGcgICAgJTIsMCglMCwlNClcbiIKKyAgICAgICAgICAgICAgICAiICAgc2xsZyAgJTAsJTAsM1xuIgorICAgICAgICAgICAgICAgICIgICBjbHIgICAlMiwlMVxuIgorCQkiICAgam5lICAgMmZcbiIKKwkJIiAgIGFnaGkgICUwLDMyXG4iCisgICAgICAgICAgICAgICAgIiAgIHNybGcgICUyLCUyLDMyXG4iCisJCSIyOiBsZ2hpICAlMSwweGZmXG4iCisgICAgICAgICAgICAgICAgIiAgIHRtbGwgICUyLDB4ZmZmZlxuIgorICAgICAgICAgICAgICAgICIgICBqbm8gICAzZlxuIgorICAgICAgICAgICAgICAgICIgICBhZ2hpICAlMCwxNlxuIgorICAgICAgICAgICAgICAgICIgICBzcmwgICAlMiwxNlxuIgorICAgICAgICAgICAgICAgICIzOiB0bWxsICAlMiwweDAwZmZcbiIKKyAgICAgICAgICAgICAgICAiICAgam5vICAgNGZcbiIKKyAgICAgICAgICAgICAgICAiICAgYWdoaSAgJTAsOFxuIgorICAgICAgICAgICAgICAgICIgICBzcmwgICAlMiw4XG4iCisgICAgICAgICAgICAgICAgIjQ6IG5nciAgICUyLCUxXG4iCisgICAgICAgICAgICAgICAgIiAgIGljICAgICUyLDAoJTIsJTUpXG4iCisgICAgICAgICAgICAgICAgIiAgIGFsZ3IgICUwLCUyXG4iCisgICAgICAgICAgICAgICAgIjU6IgorICAgICAgICAgICAgICAgIDogIj0mYSIgKHJlcyksICI9JmQiIChjbXApLCAiPSZhIiAoY291bnQpCisJCTogImEiIChzaXplKSwgImEiIChhZGRyKSwgImEiICgmX3piX2ZpbmRtYXApLAorCQkgICJtIiAoKihhZGRydHlwZSAqKSBhZGRyKSA6ICJjYyIgKTsKKyAgICAgICAgcmV0dXJuIChyZXMgPCBzaXplKSA/IHJlcyA6IHNpemU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZworZmluZF9maXJzdF9iaXQoY29uc3QgdW5zaWduZWQgbG9uZyAqIGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwl0eXBlZGVmIHN0cnVjdCB7IGxvbmcgX1tfX0JJVE9QU19XT1JEUyhzaXplKV07IH0gYWRkcnR5cGU7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgcmVzLCBjbXAsIGNvdW50OworCisgICAgICAgIGlmICghc2l6ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgX19hc21fXygiICAgc2xnciAgJTEsJTFcbiIKKyAgICAgICAgICAgICAgICAiICAgbGdyICAgJTIsJTNcbiIKKyAgICAgICAgICAgICAgICAiICAgc2xnciAgJTAsJTBcbiIKKyAgICAgICAgICAgICAgICAiICAgYWdoaSAgJTIsNjNcbiIKKyAgICAgICAgICAgICAgICAiICAgc3JsZyAgJTIsJTIsNlxuIgorICAgICAgICAgICAgICAgICIwOiBjZyAgICAlMSwwKCUwLCU0KVxuIgorICAgICAgICAgICAgICAgICIgICBqbmUgICAxZlxuIgorICAgICAgICAgICAgICAgICIgICBhZ2hpICAlMCw4XG4iCisgICAgICAgICAgICAgICAgIiAgIGJyY3QgICUyLDBiXG4iCisgICAgICAgICAgICAgICAgIiAgIGxnciAgICUwLCUzXG4iCisgICAgICAgICAgICAgICAgIiAgIGogICAgIDVmXG4iCisgICAgICAgICAgICAgICAgIjE6IGxnICAgICUyLDAoJTAsJTQpXG4iCisgICAgICAgICAgICAgICAgIiAgIHNsbGcgICUwLCUwLDNcbiIKKyAgICAgICAgICAgICAgICAiICAgY2xyICAgJTIsJTFcbiIKKwkJIiAgIGpuZSAgIDJmXG4iCisJCSIgICBhZ2hpICAlMCwzMlxuIgorICAgICAgICAgICAgICAgICIgICBzcmxnICAlMiwlMiwzMlxuIgorCQkiMjogbGdoaSAgJTEsMHhmZlxuIgorICAgICAgICAgICAgICAgICIgICB0bWxsICAlMiwweGZmZmZcbiIKKyAgICAgICAgICAgICAgICAiICAgam56ICAgM2ZcbiIKKyAgICAgICAgICAgICAgICAiICAgYWdoaSAgJTAsMTZcbiIKKyAgICAgICAgICAgICAgICAiICAgc3JsICAgJTIsMTZcbiIKKyAgICAgICAgICAgICAgICAiMzogdG1sbCAgJTIsMHgwMGZmXG4iCisgICAgICAgICAgICAgICAgIiAgIGpueiAgIDRmXG4iCisgICAgICAgICAgICAgICAgIiAgIGFnaGkgICUwLDhcbiIKKyAgICAgICAgICAgICAgICAiICAgc3JsICAgJTIsOFxuIgorICAgICAgICAgICAgICAgICI0OiBuZ3IgICAlMiwlMVxuIgorICAgICAgICAgICAgICAgICIgICBpYyAgICAlMiwwKCUyLCU1KVxuIgorICAgICAgICAgICAgICAgICIgICBhbGdyICAlMCwlMlxuIgorICAgICAgICAgICAgICAgICI1OiIKKyAgICAgICAgICAgICAgICA6ICI9JmEiIChyZXMpLCAiPSZkIiAoY21wKSwgIj0mYSIgKGNvdW50KQorCQk6ICJhIiAoc2l6ZSksICJhIiAoYWRkciksICJhIiAoJl9zYl9maW5kbWFwKSwKKwkJICAibSIgKCooYWRkcnR5cGUgKikgYWRkcikgOiAiY2MiICk7CisgICAgICAgIHJldHVybiAocmVzIDwgc2l6ZSkgPyByZXMgOiBzaXplOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK2ZpbmRfbmV4dF96ZXJvX2JpdCAoY29uc3QgdW5zaWduZWQgbG9uZyAqIGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpCit7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgKiBwID0gKCh1bnNpZ25lZCBsb25nICopIGFkZHIpICsgKG9mZnNldCA+PiA2KTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBiaXR2ZWMsIHJlZzsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBzZXQsIGJpdCA9IG9mZnNldCAmIDYzLCByZXM7CisKKyAgICAgICAgaWYgKGJpdCkgeworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogTG9vayBmb3IgemVybyBpbiBmaXJzdCB3b3JkCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgYml0dmVjID0gKCpwKSA+PiBiaXQ7CisgICAgICAgICAgICAgICAgX19hc21fXygiICAgbGhpICAlMiwtMVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgIiAgIHNsZ3IgJTAsJTBcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICIgICBjbHIgICUxLCUyXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAiICAgam5lICAwZlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgIiAgIGFnaGkgJTAsMzJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICIgICBzcmxnICUxLCUxLDMyXG4iCisJCQkiMDogbGdoaSAlMiwweGZmXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAiICAgdG1sbCAlMSwweGZmZmZcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICIgICBqbm8gIDFmXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAiICAgYWdoaSAlMCwxNlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgIiAgIHNybGcgJTEsJTEsMTZcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICIxOiB0bWxsICUxLDB4MDBmZlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgIiAgIGpubyAgMmZcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICIgICBhZ2hpICUwLDhcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICIgICBzcmxnICUxLCUxLDhcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICIyOiBuZ3IgICUxLCUyXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAiICAgaWMgICAlMSwwKCUxLCUzKVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgIiAgIGFsZ3IgJTAsJTEiCisgICAgICAgICAgICAgICAgICAgICAgICA6ICI9JmQiIChzZXQpLCAiK2EiIChiaXR2ZWMpLCAiPSZkIiAocmVnKQorICAgICAgICAgICAgICAgICAgICAgICAgOiAiYSIgKCZfemJfZmluZG1hcCkgOiAiY2MiICk7CisgICAgICAgICAgICAgICAgaWYgKHNldCA8ICg2NCAtIGJpdCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0ICsgb2Zmc2V0OworICAgICAgICAgICAgICAgIG9mZnNldCArPSA2NCAtIGJpdDsKKyAgICAgICAgICAgICAgICBwKys7CisgICAgICAgIH0KKyAgICAgICAgLyoKKyAgICAgICAgICogTm8gemVybyB5ZXQsIHNlYXJjaCByZW1haW5pbmcgZnVsbCB3b3JkcyBmb3IgYSB6ZXJvCisgICAgICAgICAqLworICAgICAgICByZXMgPSBmaW5kX2ZpcnN0X3plcm9fYml0IChwLCBzaXplIC0gNjQgKiAocCAtICh1bnNpZ25lZCBsb25nICopIGFkZHIpKTsKKyAgICAgICAgcmV0dXJuIChvZmZzZXQgKyByZXMpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK2ZpbmRfbmV4dF9iaXQgKGNvbnN0IHVuc2lnbmVkIGxvbmcgKiBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQoreworICAgICAgICB1bnNpZ25lZCBsb25nICogcCA9ICgodW5zaWduZWQgbG9uZyAqKSBhZGRyKSArIChvZmZzZXQgPj4gNik7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgYml0dmVjLCByZWc7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgc2V0LCBiaXQgPSBvZmZzZXQgJiA2MywgcmVzOworCisgICAgICAgIGlmIChiaXQpIHsKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIExvb2sgZm9yIHplcm8gaW4gZmlyc3Qgd29yZAorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIGJpdHZlYyA9ICgqcCkgPj4gYml0OworICAgICAgICAgICAgICAgIF9fYXNtX18oIiAgIHNsZ3IgJTAsJTBcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICIgICBsdHIgICUxLCUxXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAiICAgam56ICAwZlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgIiAgIGFnaGkgJTAsMzJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICIgICBzcmxnICUxLCUxLDMyXG4iCisJCQkiMDogbGdoaSAlMiwweGZmXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAiICAgdG1sbCAlMSwweGZmZmZcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICIgICBqbnogIDFmXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAiICAgYWdoaSAlMCwxNlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgIiAgIHNybGcgJTEsJTEsMTZcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICIxOiB0bWxsICUxLDB4MDBmZlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgIiAgIGpueiAgMmZcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICIgICBhZ2hpICUwLDhcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICIgICBzcmxnICUxLCUxLDhcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICIyOiBuZ3IgICUxLCUyXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAiICAgaWMgICAlMSwwKCUxLCUzKVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgIiAgIGFsZ3IgJTAsJTEiCisgICAgICAgICAgICAgICAgICAgICAgICA6ICI9JmQiIChzZXQpLCAiK2EiIChiaXR2ZWMpLCAiPSZkIiAocmVnKQorICAgICAgICAgICAgICAgICAgICAgICAgOiAiYSIgKCZfc2JfZmluZG1hcCkgOiAiY2MiICk7CisgICAgICAgICAgICAgICAgaWYgKHNldCA8ICg2NCAtIGJpdCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0ICsgb2Zmc2V0OworICAgICAgICAgICAgICAgIG9mZnNldCArPSA2NCAtIGJpdDsKKyAgICAgICAgICAgICAgICBwKys7CisgICAgICAgIH0KKyAgICAgICAgLyoKKyAgICAgICAgICogTm8gc2V0IGJpdCB5ZXQsIHNlYXJjaCByZW1haW5pbmcgZnVsbCB3b3JkcyBmb3IgYSBiaXQKKyAgICAgICAgICovCisgICAgICAgIHJlcyA9IGZpbmRfZmlyc3RfYml0IChwLCBzaXplIC0gNjQgKiAocCAtICh1bnNpZ25lZCBsb25nICopIGFkZHIpKTsKKyAgICAgICAgcmV0dXJuIChvZmZzZXQgKyByZXMpOworfQorCisjZW5kaWYgLyogX19zMzkweF9fICovCisKKy8qCisgKiBmZnogPSBGaW5kIEZpcnN0IFplcm8gaW4gd29yZC4gVW5kZWZpbmVkIGlmIG5vIHplcm8gZXhpc3RzLAorICogc28gY29kZSBzaG91bGQgY2hlY2sgYWdhaW5zdCB+MFVMIGZpcnN0Li4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGZmeih1bnNpZ25lZCBsb25nIHdvcmQpCit7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgYml0ID0gMDsKKworI2lmZGVmIF9fczM5MHhfXworCWlmIChsaWtlbHkoKHdvcmQgJiAweGZmZmZmZmZmKSA9PSAweGZmZmZmZmZmKSkgeworCQl3b3JkID4+PSAzMjsKKwkJYml0ICs9IDMyOworCX0KKyNlbmRpZgorCWlmIChsaWtlbHkoKHdvcmQgJiAweGZmZmYpID09IDB4ZmZmZikpIHsKKwkJd29yZCA+Pj0gMTY7CisJCWJpdCArPSAxNjsKKwl9CisJaWYgKGxpa2VseSgod29yZCAmIDB4ZmYpID09IDB4ZmYpKSB7CisJCXdvcmQgPj49IDg7CisJCWJpdCArPSA4OworCX0KKwlyZXR1cm4gYml0ICsgX3piX2ZpbmRtYXBbd29yZCAmIDB4ZmZdOworfQorCisvKgorICogX19mZnMgPSBmaW5kIGZpcnN0IGJpdCBpbiB3b3JkLiBVbmRlZmluZWQgaWYgbm8gYml0IGV4aXN0cywKKyAqIHNvIGNvZGUgc2hvdWxkIGNoZWNrIGFnYWluc3QgMFVMIGZpcnN0Li4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fZmZzICh1bnNpZ25lZCBsb25nIHdvcmQpCit7CisJdW5zaWduZWQgbG9uZyBiaXQgPSAwOworCisjaWZkZWYgX19zMzkweF9fCisJaWYgKGxpa2VseSgod29yZCAmIDB4ZmZmZmZmZmYpID09IDApKSB7CisJCXdvcmQgPj49IDMyOworCQliaXQgKz0gMzI7CisJfQorI2VuZGlmCisJaWYgKGxpa2VseSgod29yZCAmIDB4ZmZmZikgPT0gMCkpIHsKKwkJd29yZCA+Pj0gMTY7CisJCWJpdCArPSAxNjsKKwl9CisJaWYgKGxpa2VseSgod29yZCAmIDB4ZmYpID09IDApKSB7CisJCXdvcmQgPj49IDg7CisJCWJpdCArPSA4OworCX0KKwlyZXR1cm4gYml0ICsgX3NiX2ZpbmRtYXBbd29yZCAmIDB4ZmZdOworfQorCisvKgorICogRXZlcnkgYXJjaGl0ZWN0dXJlIG11c3QgZGVmaW5lIHRoaXMgZnVuY3Rpb24uIEl0J3MgdGhlIGZhc3Rlc3QKKyAqIHdheSBvZiBzZWFyY2hpbmcgYSAxNDAtYml0IGJpdG1hcCB3aGVyZSB0aGUgZmlyc3QgMTAwIGJpdHMgYXJlCisgKiB1bmxpa2VseSB0byBiZSBzZXQuIEl0J3MgZ3VhcmFudGVlZCB0aGF0IGF0IGxlYXN0IG9uZSBvZiB0aGUgMTQwCisgKiBiaXRzIGlzIGNsZWFyZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHNjaGVkX2ZpbmRfZmlyc3RfYml0KHVuc2lnbmVkIGxvbmcgKmIpCit7CisJcmV0dXJuIGZpbmRfZmlyc3RfYml0KGIsIDE0MCk7Cit9CisKKy8qCisgKiBmZnM6IGZpbmQgZmlyc3QgYml0IHNldC4gVGhpcyBpcyBkZWZpbmVkIHRoZSBzYW1lIHdheSBhcworICogdGhlIGxpYmMgYW5kIGNvbXBpbGVyIGJ1aWx0aW4gZmZzIHJvdXRpbmVzLCB0aGVyZWZvcmUKKyAqIGRpZmZlcnMgaW4gc3Bpcml0IGZyb20gdGhlIGFib3ZlIGZmeiAobWFuIGZmcykuCisgKi8KKyNkZWZpbmUgZmZzKHgpIGdlbmVyaWNfZmZzKHgpCisKKy8qCisgKiBmbHM6IGZpbmQgbGFzdCBiaXQgc2V0LgorICovCisjZGVmaW5lIGZscyh4KSBnZW5lcmljX2Zscyh4KQorCisvKgorICogaHdlaWdodE46IHJldHVybnMgdGhlIGhhbW1pbmcgd2VpZ2h0IChpLmUuIHRoZSBudW1iZXIKKyAqIG9mIGJpdHMgc2V0KSBvZiBhIE4tYml0IHdvcmQKKyAqLworI2RlZmluZSBod2VpZ2h0NjQoeCkJCQkJCQlcCisoewkJCQkJCQkJXAorCXVuc2lnbmVkIGxvbmcgX194ID0gKHgpOwkJCQlcCisJdW5zaWduZWQgaW50IF9fdzsJCQkJCVwKKwlfX3cgPSBnZW5lcmljX2h3ZWlnaHQzMigodW5zaWduZWQgaW50KSBfX3gpOwkJXAorCV9fdyArPSBnZW5lcmljX2h3ZWlnaHQzMigodW5zaWduZWQgaW50KSAoX194Pj4zMikpOwlcCisJX193OwkJCQkJCQlcCit9KQorI2RlZmluZSBod2VpZ2h0MzIoeCkgZ2VuZXJpY19od2VpZ2h0MzIoeCkKKyNkZWZpbmUgaHdlaWdodDE2KHgpIGdlbmVyaWNfaHdlaWdodDE2KHgpCisjZGVmaW5lIGh3ZWlnaHQ4KHgpIGdlbmVyaWNfaHdlaWdodDgoeCkKKworCisjaWZkZWYgX19LRVJORUxfXworCisvKgorICogQVRURU5USU9OOiBpbnRlbCBieXRlIG9yZGVyaW5nIGNvbnZlbnRpb24gZm9yIGV4dDIgYW5kIG1pbml4ICEhCisgKiBiaXQgMCBpcyB0aGUgTFNCIG9mIGFkZHI7IGJpdCAzMSBpcyB0aGUgTVNCIG9mIGFkZHI7CisgKiBiaXQgMzIgaXMgdGhlIExTQiBvZiAoYWRkcis0KS4KKyAqIFRoYXQgY29tYmluZWQgd2l0aCB0aGUgbGl0dGxlIGVuZGlhbiBieXRlIG9yZGVyIG9mIEludGVsIGdpdmVzIHRoZQorICogZm9sbG93aW5nIGJpdCBvcmRlciBpbiBtZW1vcnk6CisgKiAgICAwNyAwNiAwNSAwNCAwMyAwMiAwMSAwMCAxNSAxNCAxMyAxMiAxMSAxMCAwOSAwOCBcCisgKiAgICAyMyAyMiAyMSAyMCAxOSAxOCAxNyAxNiAzMSAzMCAyOSAyOCAyNyAyNiAyNSAyNAorICovCisKKyNkZWZpbmUgZXh0Ml9zZXRfYml0KG5yLCBhZGRyKSAgICAgICBcCisJdGVzdF9hbmRfc2V0X2JpdCgobnIpXihfX0JJVE9QU19XT1JEU0laRSAtIDgpLCAodW5zaWduZWQgbG9uZyAqKWFkZHIpCisjZGVmaW5lIGV4dDJfc2V0X2JpdF9hdG9taWMobG9jaywgbnIsIGFkZHIpICAgICAgIFwKKwl0ZXN0X2FuZF9zZXRfYml0KChucileKF9fQklUT1BTX1dPUkRTSVpFIC0gOCksICh1bnNpZ25lZCBsb25nICopYWRkcikKKyNkZWZpbmUgZXh0Ml9jbGVhcl9iaXQobnIsIGFkZHIpICAgICBcCisJdGVzdF9hbmRfY2xlYXJfYml0KChucileKF9fQklUT1BTX1dPUkRTSVpFIC0gOCksICh1bnNpZ25lZCBsb25nICopYWRkcikKKyNkZWZpbmUgZXh0Ml9jbGVhcl9iaXRfYXRvbWljKGxvY2ssIG5yLCBhZGRyKSAgICAgXAorCXRlc3RfYW5kX2NsZWFyX2JpdCgobnIpXihfX0JJVE9QU19XT1JEU0laRSAtIDgpLCAodW5zaWduZWQgbG9uZyAqKWFkZHIpCisjZGVmaW5lIGV4dDJfdGVzdF9iaXQobnIsIGFkZHIpICAgICAgXAorCXRlc3RfYml0KChucileKF9fQklUT1BTX1dPUkRTSVpFIC0gOCksICh1bnNpZ25lZCBsb25nICopYWRkcikKKworI2lmbmRlZiBfX3MzOTB4X18KKworc3RhdGljIGlubGluZSBpbnQgCitleHQyX2ZpbmRfZmlyc3RfemVyb19iaXQodm9pZCAqdmFkZHIsIHVuc2lnbmVkIGludCBzaXplKQoreworCXR5cGVkZWYgc3RydWN0IHsgbG9uZyBfW19fQklUT1BTX1dPUkRTKHNpemUpXTsgfSBhZGRydHlwZTsKKwl1bnNpZ25lZCBsb25nIGNtcCwgY291bnQ7CisgICAgICAgIHVuc2lnbmVkIGludCByZXM7CisKKyAgICAgICAgaWYgKCFzaXplKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBfX2FzbV9fKCIgICBsaGkgICUxLC0xXG4iCisgICAgICAgICAgICAgICAgIiAgIGxyICAgJTIsJTNcbiIKKyAgICAgICAgICAgICAgICAiICAgYWhpICAlMiwzMVxuIgorICAgICAgICAgICAgICAgICIgICBzcmwgICUyLDVcbiIKKyAgICAgICAgICAgICAgICAiICAgc2xyICAlMCwlMFxuIgorICAgICAgICAgICAgICAgICIwOiBjbCAgICUxLDAoJTAsJTQpXG4iCisgICAgICAgICAgICAgICAgIiAgIGpuZSAgMWZcbiIKKyAgICAgICAgICAgICAgICAiICAgYWhpICAlMCw0XG4iCisgICAgICAgICAgICAgICAgIiAgIGJyY3QgJTIsMGJcbiIKKyAgICAgICAgICAgICAgICAiICAgbHIgICAlMCwlM1xuIgorICAgICAgICAgICAgICAgICIgICBqICAgIDRmXG4iCisgICAgICAgICAgICAgICAgIjE6IGwgICAgJTIsMCglMCwlNClcbiIKKyAgICAgICAgICAgICAgICAiICAgc2xsICAlMCwzXG4iCisgICAgICAgICAgICAgICAgIiAgIGFoaSAgJTAsMjRcbiIKKyAgICAgICAgICAgICAgICAiICAgbGhpICAlMSwweGZmXG4iCisgICAgICAgICAgICAgICAgIiAgIHRtaCAgJTIsMHhmZmZmXG4iCisgICAgICAgICAgICAgICAgIiAgIGpvICAgMmZcbiIKKyAgICAgICAgICAgICAgICAiICAgYWhpICAlMCwtMTZcbiIKKyAgICAgICAgICAgICAgICAiICAgc3JsICAlMiwxNlxuIgorICAgICAgICAgICAgICAgICIyOiB0bWwgICUyLDB4ZmYwMFxuIgorICAgICAgICAgICAgICAgICIgICBqbyAgIDNmXG4iCisgICAgICAgICAgICAgICAgIiAgIGFoaSAgJTAsLThcbiIKKyAgICAgICAgICAgICAgICAiICAgc3JsICAlMiw4XG4iCisgICAgICAgICAgICAgICAgIjM6IG5yICAgJTIsJTFcbiIKKyAgICAgICAgICAgICAgICAiICAgaWMgICAlMiwwKCUyLCU1KVxuIgorICAgICAgICAgICAgICAgICIgICBhbHIgICUwLCUyXG4iCisgICAgICAgICAgICAgICAgIjQ6IgorICAgICAgICAgICAgICAgIDogIj0mYSIgKHJlcyksICI9JmQiIChjbXApLCAiPSZhIiAoY291bnQpCisgICAgICAgICAgICAgICAgOiAiYSIgKHNpemUpLCAiYSIgKHZhZGRyKSwgImEiICgmX3piX2ZpbmRtYXApLAorCQkgICJtIiAoKihhZGRydHlwZSAqKSB2YWRkcikgOiAiY2MiICk7CisgICAgICAgIHJldHVybiAocmVzIDwgc2l6ZSkgPyByZXMgOiBzaXplOworfQorCitzdGF0aWMgaW5saW5lIGludCAKK2V4dDJfZmluZF9uZXh0X3plcm9fYml0KHZvaWQgKnZhZGRyLCB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgb2Zmc2V0KQoreworICAgICAgICB1bnNpZ25lZCBsb25nICphZGRyID0gdmFkZHI7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgKnAgPSBhZGRyICsgKG9mZnNldCA+PiA1KTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyB3b3JkLCByZWc7CisgICAgICAgIHVuc2lnbmVkIGludCBiaXQgPSBvZmZzZXQgJiAzMVVMLCByZXM7CisKKyAgICAgICAgaWYgKG9mZnNldCA+PSBzaXplKQorICAgICAgICAgICAgICAgIHJldHVybiBzaXplOworCisgICAgICAgIGlmIChiaXQpIHsKKyAgICAgICAgICAgICAgICBfX2FzbV9fKCIgICBpYyAgICUwLDAoJTEpXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAiICAgaWNtICAlMCwyLDEoJTEpXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAiICAgaWNtICAlMCw0LDIoJTEpXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAiICAgaWNtICAlMCw4LDMoJTEpIgorICAgICAgICAgICAgICAgICAgICAgICAgOiAiPSZhIiAod29yZCkgOiAiYSIgKHApIDogImNjIiApOworCQl3b3JkID4+PSBiaXQ7CisgICAgICAgICAgICAgICAgcmVzID0gYml0OworICAgICAgICAgICAgICAgIC8qIExvb2sgZm9yIHplcm8gaW4gZmlyc3QgbG9uZ3dvcmQgKi8KKyAgICAgICAgICAgICAgICBfX2FzbV9fKCIgICBsaGkgICUyLDB4ZmZcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICIgICB0bWwgICUxLDB4ZmZmZlxuIgorICAgICAgICAgICAgICAgIAkiICAgam5vICAwZlxuIgorICAgICAgICAgICAgICAgIAkiICAgYWhpICAlMCwxNlxuIgorICAgICAgICAgICAgICAgIAkiICAgc3JsICAlMSwxNlxuIgorICAgICAgICAgICAgICAgIAkiMDogdG1sICAlMSwweDAwZmZcbiIKKyAgICAgICAgICAgICAgICAJIiAgIGpubyAgMWZcbiIKKyAgICAgICAgICAgICAgICAJIiAgIGFoaSAgJTAsOFxuIgorICAgICAgICAgICAgICAgIAkiICAgc3JsICAlMSw4XG4iCisgICAgICAgICAgICAgICAgCSIxOiBuciAgICUxLCUyXG4iCisgICAgICAgICAgICAgICAgCSIgICBpYyAgICUxLDAoJTEsJTMpXG4iCisgICAgICAgICAgICAgICAgCSIgICBhbHIgICUwLCUxIgorICAgICAgICAgICAgICAgIAk6ICIrJmQiIChyZXMpLCAiKyZhIiAod29yZCksICI9JmQiIChyZWcpCisgICAgICAgICAgICAgICAgICAJOiAiYSIgKCZfemJfZmluZG1hcCkgOiAiY2MiICk7CisgICAgICAgICAgICAgICAgaWYgKHJlcyA8IDMyKQorCQkJcmV0dXJuIChwIC0gYWRkcikqMzIgKyByZXM7CisgICAgICAgICAgICAgICAgcCsrOworICAgICAgICB9CisgICAgICAgIC8qIE5vIHplcm8geWV0LCBzZWFyY2ggcmVtYWluaW5nIGZ1bGwgYnl0ZXMgZm9yIGEgemVybyAqLworICAgICAgICByZXMgPSBleHQyX2ZpbmRfZmlyc3RfemVyb19iaXQgKHAsIHNpemUgLSAzMiAqIChwIC0gYWRkcikpOworICAgICAgICByZXR1cm4gKHAgLSBhZGRyKSAqIDMyICsgcmVzOworfQorCisjZWxzZSAvKiBfX3MzOTB4X18gKi8KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCitleHQyX2ZpbmRfZmlyc3RfemVyb19iaXQodm9pZCAqdmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwl0eXBlZGVmIHN0cnVjdCB7IGxvbmcgX1tfX0JJVE9QU19XT1JEUyhzaXplKV07IH0gYWRkcnR5cGU7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgcmVzLCBjbXAsIGNvdW50OworCisgICAgICAgIGlmICghc2l6ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgX19hc21fXygiICAgbGdoaSAgJTEsLTFcbiIKKyAgICAgICAgICAgICAgICAiICAgbGdyICAgJTIsJTNcbiIKKyAgICAgICAgICAgICAgICAiICAgYWdoaSAgJTIsNjNcbiIKKyAgICAgICAgICAgICAgICAiICAgc3JsZyAgJTIsJTIsNlxuIgorICAgICAgICAgICAgICAgICIgICBzbGdyICAlMCwlMFxuIgorICAgICAgICAgICAgICAgICIwOiBjbGcgICAlMSwwKCUwLCU0KVxuIgorICAgICAgICAgICAgICAgICIgICBqbmUgICAxZlxuIgorICAgICAgICAgICAgICAgICIgICBhZ2hpICAlMCw4XG4iCisgICAgICAgICAgICAgICAgIiAgIGJyY3QgICUyLDBiXG4iCisgICAgICAgICAgICAgICAgIiAgIGxnciAgICUwLCUzXG4iCisgICAgICAgICAgICAgICAgIiAgIGogICAgIDVmXG4iCisgICAgICAgICAgICAgICAgIjE6IGNsICAgICUxLDAoJTAsJTQpXG4iCisJCSIgICBqbmUgICAyZlxuIgorCQkiICAgYWdoaSAgJTAsNFxuIgorCQkiMjogbCAgICAgJTIsMCglMCwlNClcbiIKKyAgICAgICAgICAgICAgICAiICAgc2xsZyAgJTAsJTAsM1xuIgorICAgICAgICAgICAgICAgICIgICBhZ2hpICAlMCwyNFxuIgorICAgICAgICAgICAgICAgICIgICBsZ2hpICAlMSwweGZmXG4iCisgICAgICAgICAgICAgICAgIiAgIHRtbGggICUyLDB4ZmZmZlxuIgorICAgICAgICAgICAgICAgICIgICBqbyAgICAzZlxuIgorICAgICAgICAgICAgICAgICIgICBhZ2hpICAlMCwtMTZcbiIKKyAgICAgICAgICAgICAgICAiICAgc3JsICAgJTIsMTZcbiIKKyAgICAgICAgICAgICAgICAiMzogdG1sbCAgJTIsMHhmZjAwXG4iCisgICAgICAgICAgICAgICAgIiAgIGpvICAgIDRmXG4iCisgICAgICAgICAgICAgICAgIiAgIGFnaGkgICUwLC04XG4iCisgICAgICAgICAgICAgICAgIiAgIHNybCAgICUyLDhcbiIKKyAgICAgICAgICAgICAgICAiNDogbmdyICAgJTIsJTFcbiIKKyAgICAgICAgICAgICAgICAiICAgaWMgICAgJTIsMCglMiwlNSlcbiIKKyAgICAgICAgICAgICAgICAiICAgYWxnciAgJTAsJTJcbiIKKyAgICAgICAgICAgICAgICAiNToiCisgICAgICAgICAgICAgICAgOiAiPSZhIiAocmVzKSwgIj0mZCIgKGNtcCksICI9JmEiIChjb3VudCkKKwkJOiAiYSIgKHNpemUpLCAiYSIgKHZhZGRyKSwgImEiICgmX3piX2ZpbmRtYXApLAorCQkgICJtIiAoKihhZGRydHlwZSAqKSB2YWRkcikgOiAiY2MiICk7CisgICAgICAgIHJldHVybiAocmVzIDwgc2l6ZSkgPyByZXMgOiBzaXplOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK2V4dDJfZmluZF9uZXh0X3plcm9fYml0KHZvaWQgKnZhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQoreworICAgICAgICB1bnNpZ25lZCBsb25nICphZGRyID0gdmFkZHI7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgKnAgPSBhZGRyICsgKG9mZnNldCA+PiA2KTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyB3b3JkLCByZWc7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgYml0ID0gb2Zmc2V0ICYgNjNVTCwgcmVzOworCisgICAgICAgIGlmIChvZmZzZXQgPj0gc2l6ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc2l6ZTsKKworICAgICAgICBpZiAoYml0KSB7CisgICAgICAgICAgICAgICAgX19hc21fXygiICAgbHJ2ZyAlMCwlMSIgLyogbG9hZCByZXZlcnNlZCwgbmVhdCBpbnN0cnVjdGlvbiAqLworICAgICAgICAgICAgICAgICAgICAgICAgOiAiPWEiICh3b3JkKSA6ICJtIiAoKnApICk7CisgICAgICAgICAgICAgICAgd29yZCA+Pj0gYml0OworICAgICAgICAgICAgICAgIHJlcyA9IGJpdDsKKyAgICAgICAgICAgICAgICAvKiBMb29rIGZvciB6ZXJvIGluIGZpcnN0IDggYnl0ZSB3b3JkICovCisgICAgICAgICAgICAgICAgX19hc21fXygiICAgbGdoaSAlMiwweGZmXG4iCisJCQkiICAgdG1sbCAlMSwweGZmZmZcbiIKKwkJCSIgICBqbm8gIDJmXG4iCisJCQkiICAgYWhpICAlMCwxNlxuIgorCQkJIiAgIHNybGcgJTEsJTEsMTZcbiIKKyAgICAgICAgICAgICAgICAJIjA6IHRtbGwgJTEsMHhmZmZmXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAiICAgam5vICAyZlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgIiAgIGFoaSAgJTAsMTZcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICIgICBzcmxnICUxLCUxLDE2XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAiMTogdG1sbCAlMSwweGZmZmZcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICIgICBqbm8gIDJmXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAiICAgYWhpICAlMCwxNlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgIiAgIHNybCAgJTEsMTZcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICIyOiB0bWxsICUxLDB4MDBmZlxuIgorICAgICAgICAgICAgICAgIAkiICAgam5vICAzZlxuIgorICAgICAgICAgICAgICAgIAkiICAgYWhpICAlMCw4XG4iCisgICAgICAgICAgICAgICAgCSIgICBzcmwgICUxLDhcbiIKKyAgICAgICAgICAgICAgICAJIjM6IG5nciAgJTEsJTJcbiIKKyAgICAgICAgICAgICAgICAJIiAgIGljICAgJTEsMCglMSwlMylcbiIKKyAgICAgICAgICAgICAgICAJIiAgIGFsciAgJTAsJTEiCisgICAgICAgICAgICAgICAgCTogIismZCIgKHJlcyksICIrYSIgKHdvcmQpLCAiPSZkIiAocmVnKQorICAgICAgICAgICAgICAgICAgCTogImEiICgmX3piX2ZpbmRtYXApIDogImNjIiApOworICAgICAgICAgICAgICAgIGlmIChyZXMgPCA2NCkKKwkJCXJldHVybiAocCAtIGFkZHIpKjY0ICsgcmVzOworICAgICAgICAgICAgICAgIHArKzsKKyAgICAgICAgfQorICAgICAgICAvKiBObyB6ZXJvIHlldCwgc2VhcmNoIHJlbWFpbmluZyBmdWxsIGJ5dGVzIGZvciBhIHplcm8gKi8KKyAgICAgICAgcmVzID0gZXh0Ml9maW5kX2ZpcnN0X3plcm9fYml0IChwLCBzaXplIC0gNjQgKiAocCAtIGFkZHIpKTsKKyAgICAgICAgcmV0dXJuIChwIC0gYWRkcikgKiA2NCArIHJlczsKK30KKworI2VuZGlmIC8qIF9fczM5MHhfXyAqLworCisvKiBCaXRtYXAgZnVuY3Rpb25zIGZvciB0aGUgbWluaXggZmlsZXN5c3RlbS4gICovCisvKiBGSVhNRSAhISEgKi8KKyNkZWZpbmUgbWluaXhfdGVzdF9hbmRfc2V0X2JpdChucixhZGRyKSBcCisJdGVzdF9hbmRfc2V0X2JpdChuciwodW5zaWduZWQgbG9uZyAqKWFkZHIpCisjZGVmaW5lIG1pbml4X3NldF9iaXQobnIsYWRkcikgXAorCXNldF9iaXQobnIsKHVuc2lnbmVkIGxvbmcgKilhZGRyKQorI2RlZmluZSBtaW5peF90ZXN0X2FuZF9jbGVhcl9iaXQobnIsYWRkcikgXAorCXRlc3RfYW5kX2NsZWFyX2JpdChuciwodW5zaWduZWQgbG9uZyAqKWFkZHIpCisjZGVmaW5lIG1pbml4X3Rlc3RfYml0KG5yLGFkZHIpIFwKKwl0ZXN0X2JpdChuciwodW5zaWduZWQgbG9uZyAqKWFkZHIpCisjZGVmaW5lIG1pbml4X2ZpbmRfZmlyc3RfemVyb19iaXQoYWRkcixzaXplKSBcCisJZmluZF9maXJzdF96ZXJvX2JpdChhZGRyLHNpemUpCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfUzM5MF9CSVRPUFNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9idWcuaCBiL2luY2x1ZGUvYXNtLXMzOTAvYnVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI4ZDZkNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvYnVnLmgKQEAgLTAsMCArMSwxNCBAQAorI2lmbmRlZiBfUzM5MF9CVUdfSAorI2RlZmluZSBfUzM5MF9CVUdfSAorCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKKyNkZWZpbmUgQlVHKCkgZG8geyBcCisgICAgICAgIHByaW50aygia2VybmVsIEJVRyBhdCAlczolZCFcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyk7IFwKKyAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oIi5sb25nIDAiKTsgXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBIQVZFX0FSQ0hfQlVHCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYnVnLmg+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9idWdzLmggYi9pbmNsdWRlL2FzbS1zMzkwL2J1Z3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzM2NTk2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tczM5MC9idWdzLmgKQEAgLTAsMCArMSwyMiBAQAorLyoKKyAqICBpbmNsdWRlL2FzbS1zMzkwL2J1Z3MuaAorICoKKyAqICBTMzkwIHZlcnNpb24KKyAqICAgIENvcHlyaWdodCAoQykgMTk5OSBJQk0gRGV1dHNjaGxhbmQgRW50d2lja2x1bmcgR21iSCwgSUJNIENvcnBvcmF0aW9uCisgKiAgICBBdXRob3Iocyk6IE1hcnRpbiBTY2h3aWRlZnNreSAoc2Nod2lkZWZza3lAZGUuaWJtLmNvbSkKKyAqCisgKiAgRGVyaXZlZCBmcm9tICJpbmNsdWRlL2FzbS1pMzg2L2J1Z3MuaCIKKyAqICAgIENvcHlyaWdodCAoQykgMTk5NCAgTGludXMgVG9ydmFsZHMKKyAqLworCisvKgorICogVGhpcyBpcyBpbmNsdWRlZCBieSBpbml0L21haW4uYyB0byBjaGVjayBmb3IgYXJjaGl0ZWN0dXJlLWRlcGVuZGVudCBidWdzLgorICoKKyAqIE5lZWRzOgorICogICAgICB2b2lkIGNoZWNrX2J1Z3Modm9pZCk7CisgKi8KKworc3RhdGljIHZvaWQgX19pbml0IGNoZWNrX2J1Z3Modm9pZCkKK3sKKyAgLyogczM5MCBoYXMgbm8gYnVncyAuLi4gKi8KK30KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvYnl0ZW9yZGVyLmggYi9pbmNsdWRlL2FzbS1zMzkwL2J5dGVvcmRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjYzM1YTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL2J5dGVvcmRlci5oCkBAIC0wLDAgKzEsMTMxIEBACisjaWZuZGVmIF9TMzkwX0JZVEVPUkRFUl9ICisjZGVmaW5lIF9TMzkwX0JZVEVPUkRFUl9ICisKKy8qCisgKiAgaW5jbHVkZS9hc20tczM5MC9ieXRlb3JkZXIuaAorICoKKyAqICBTMzkwIHZlcnNpb24KKyAqICAgIENvcHlyaWdodCAoQykgMTk5OSBJQk0gRGV1dHNjaGxhbmQgRW50d2lja2x1bmcgR21iSCwgSUJNIENvcnBvcmF0aW9uCisgKiAgICBBdXRob3Iocyk6IE1hcnRpbiBTY2h3aWRlZnNreSAoc2Nod2lkZWZza3lAZGUuaWJtLmNvbSkKKyAqLworCisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisKKyNpZmRlZiBfX0dOVUNfXworCisjaWZkZWYgX19zMzkweF9fCitzdGF0aWMgX19pbmxpbmVfXyBfX3U2NCBfX19hcmNoX19zd2FiNjRwKGNvbnN0IF9fdTY0ICp4KQoreworCV9fdTY0IHJlc3VsdDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwkJIiAgIGxydmcgJTAsJTEiCisJCTogIj1kIiAocmVzdWx0KSA6ICJtIiAoKngpICk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIF9faW5saW5lX18gX191NjQgX19fYXJjaF9fc3dhYjY0KF9fdTY0IHgpCit7CisJX191NjQgcmVzdWx0OworCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCQkiICAgbHJ2Z3IgJTAsJTEiCisJCTogIj1kIiAocmVzdWx0KSA6ICJkIiAoeCkgKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fX2FyY2hfX3N3YWI2NHMoX191NjQgKngpCit7CisJKnggPSBfX19hcmNoX19zd2FiNjRwKHgpOworfQorI2VuZGlmIC8qIF9fczM5MHhfXyAqLworCitzdGF0aWMgX19pbmxpbmVfXyBfX3UzMiBfX19hcmNoX19zd2FiMzJwKGNvbnN0IF9fdTMyICp4KQoreworCV9fdTMyIHJlc3VsdDsKKwkKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisjaWZuZGVmIF9fczM5MHhfXworCQkiICAgICAgICBpY20gICAlMCw4LDMoJTEpXG4iCisJCSIgICAgICAgIGljbSAgICUwLDQsMiglMSlcbiIKKwkJIiAgICAgICAgaWNtICAgJTAsMiwxKCUxKVxuIgorCQkiICAgICAgICBpYyAgICAlMCwwKCUxKSIKKwkJOiAiPSZkIiAocmVzdWx0KSA6ICJhIiAoeCksICJtIiAoKngpIDogImNjIiApOworI2Vsc2UgLyogX19zMzkweF9fICovCisJCSIgICBscnYgICUwLCUxIgorCQk6ICI9ZCIgKHJlc3VsdCkgOiAibSIgKCp4KSApOworI2VuZGlmIC8qIF9fczM5MHhfXyAqLworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fdTMyIF9fX2FyY2hfX3N3YWIzMihfX3UzMiB4KQoreworI2lmbmRlZiBfX3MzOTB4X18KKwlyZXR1cm4gX19fYXJjaF9fc3dhYjMycCgmeCk7CisjZWxzZSAvKiBfX3MzOTB4X18gKi8KKwlfX3UzMiByZXN1bHQ7CisJCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCQkiICAgbHJ2ciAgJTAsJTEiCisJCTogIj1kIiAocmVzdWx0KSA6ICJkIiAoeCkgKTsKKwlyZXR1cm4gcmVzdWx0OworI2VuZGlmIC8qIF9fczM5MHhfXyAqLworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fX2FyY2hfX3N3YWIzMnMoX191MzIgKngpCit7CisJKnggPSBfX19hcmNoX19zd2FiMzJwKHgpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX3UxNiBfX19hcmNoX19zd2FiMTZwKGNvbnN0IF9fdTE2ICp4KQoreworCV9fdTE2IHJlc3VsdDsKKwkKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisjaWZuZGVmIF9fczM5MHhfXworCQkiICAgICAgICBpY20gICAlMCwyLDEoJTEpXG4iCisJCSIgICAgICAgIGljICAgICUwLDAoJTEpXG4iCisJCTogIj0mZCIgKHJlc3VsdCkgOiAiYSIgKHgpLCAibSIgKCp4KSA6ICJjYyIgKTsKKyNlbHNlIC8qIF9fczM5MHhfXyAqLworCQkiICAgbHJ2aCAlMCwlMSIKKwkJOiAiPWQiIChyZXN1bHQpIDogIm0iICgqeCkgKTsKKyNlbmRpZiAvKiBfX3MzOTB4X18gKi8KKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX3UxNiBfX19hcmNoX19zd2FiMTYoX191MTYgeCkKK3sKKwlyZXR1cm4gX19fYXJjaF9fc3dhYjE2cCgmeCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19fYXJjaF9fc3dhYjE2cyhfX3UxNiAqeCkKK3sKKwkqeCA9IF9fX2FyY2hfX3N3YWIxNnAoeCk7Cit9CisKKyNpZmRlZiBfX3MzOTB4X18KKyNkZWZpbmUgX19hcmNoX19zd2FiNjQoeCkgX19fYXJjaF9fc3dhYjY0KHgpCisjZGVmaW5lIF9fYXJjaF9fc3dhYjY0cCh4KSBfX19hcmNoX19zd2FiNjRwKHgpCisjZGVmaW5lIF9fYXJjaF9fc3dhYjY0cyh4KSBfX19hcmNoX19zd2FiNjRzKHgpCisjZW5kaWYgLyogX19zMzkweF9fICovCisjZGVmaW5lIF9fYXJjaF9fc3dhYjMyKHgpIF9fX2FyY2hfX3N3YWIzMih4KQorI2RlZmluZSBfX2FyY2hfX3N3YWIxNih4KSBfX19hcmNoX19zd2FiMTYoeCkKKyNkZWZpbmUgX19hcmNoX19zd2FiMzJwKHgpIF9fX2FyY2hfX3N3YWIzMnAoeCkKKyNkZWZpbmUgX19hcmNoX19zd2FiMTZwKHgpIF9fX2FyY2hfX3N3YWIxNnAoeCkKKyNkZWZpbmUgX19hcmNoX19zd2FiMzJzKHgpIF9fX2FyY2hfX3N3YWIzMnMoeCkKKyNkZWZpbmUgX19hcmNoX19zd2FiMTZzKHgpIF9fX2FyY2hfX3N3YWIxNnMoeCkKKworI2lmbmRlZiBfX3MzOTB4X18KKyNpZiAhZGVmaW5lZChfX1NUUklDVF9BTlNJX18pIHx8IGRlZmluZWQoX19LRVJORUxfXykKKyMgIGRlZmluZSBfX0JZVEVPUkRFUl9IQVNfVTY0X18KKyMgIGRlZmluZSBfX1NXQUJfNjRfVEhSVV8zMl9fCisjZW5kaWYKKyNlbHNlIC8qIF9fczM5MHhfXyAqLworI2RlZmluZSBfX0JZVEVPUkRFUl9IQVNfVTY0X18KKyNlbmRpZiAvKiBfX3MzOTB4X18gKi8KKworI2VuZGlmIC8qIF9fR05VQ19fICovCisKKyNpbmNsdWRlIDxsaW51eC9ieXRlb3JkZXIvYmlnX2VuZGlhbi5oPgorCisjZW5kaWYgLyogX1MzOTBfQllURU9SREVSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvY2FjaGUuaCBiL2luY2x1ZGUvYXNtLXMzOTAvY2FjaGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTg0NTM3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tczM5MC9jYWNoZS5oCkBAIC0wLDAgKzEsMjAgQEAKKy8qCisgKiAgaW5jbHVkZS9hc20tczM5MC9jYWNoZS5oCisgKgorICogIFMzOTAgdmVyc2lvbgorICogICAgQ29weXJpZ2h0IChDKSAxOTk5IElCTSBEZXV0c2NobGFuZCBFbnR3aWNrbHVuZyBHbWJILCBJQk0gQ29ycG9yYXRpb24KKyAqCisgKiAgRGVyaXZlZCBmcm9tICJpbmNsdWRlL2FzbS1pMzg2L2NhY2hlLmgiCisgKiAgICBDb3B5cmlnaHQgKEMpIDE5OTIsIExpbnVzIFRvcnZhbGRzCisgKi8KKworI2lmbmRlZiBfX0FSQ0hfUzM5MF9DQUNIRV9ICisjZGVmaW5lIF9fQVJDSF9TMzkwX0NBQ0hFX0gKKworI2RlZmluZSBMMV9DQUNIRV9CWVRFUyAgICAgMjU2CisjZGVmaW5lIEwxX0NBQ0hFX1NISUZUICAgICA4CisjZGVmaW5lIEwxX0NBQ0hFX1NISUZUX01BWCA4CS8qIGxhcmdlc3QgTDEgd2hpY2ggdGhpcyBhcmNoIHN1cHBvcnRzICovCisKKyNkZWZpbmUgQVJDSF9LTUFMTE9DX01JTkFMSUdOCTgKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL2NhY2hlZmx1c2guaCBiL2luY2x1ZGUvYXNtLXMzOTAvY2FjaGVmbHVzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzOTlhOGIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL2NhY2hlZmx1c2guaApAQCAtMCwwICsxLDI2IEBACisjaWZuZGVmIF9TMzkwX0NBQ0hFRkxVU0hfSAorI2RlZmluZSBfUzM5MF9DQUNIRUZMVVNIX0gKKworLyogS2VlcCBpbmNsdWRlcyB0aGUgc2FtZSBhY3Jvc3MgYXJjaGVzLiAgKi8KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorCisvKiBDYWNoZXMgYXJlbid0IGJyYWluLWRlYWQgb24gdGhlIHMzOTAuICovCisjZGVmaW5lIGZsdXNoX2NhY2hlX2FsbCgpCQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9jYWNoZV9tbShtbSkJCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2NhY2hlX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9jYWNoZV9wYWdlKHZtYSwgdm1hZGRyLCBwZm4pCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSkJCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2RjYWNoZV9tbWFwX2xvY2sobWFwcGluZykJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfZGNhY2hlX21tYXBfdW5sb2NrKG1hcHBpbmcpCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfaWNhY2hlX3JhbmdlKHN0YXJ0LCBlbmQpCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2ljYWNoZV9wYWdlKHZtYSxwZykJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfaWNhY2hlX3VzZXJfcmFuZ2Uodm1hLHBnLGFkcixsZW4pCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfdm1hcChzdGFydCwgZW5kKQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9jYWNoZV92dW5tYXAoc3RhcnQsIGVuZCkJCWRvIHsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBjb3B5X3RvX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIHZhZGRyLCBkc3QsIHNyYywgbGVuKSBcCisJbWVtY3B5KGRzdCwgc3JjLCBsZW4pCisjZGVmaW5lIGNvcHlfZnJvbV91c2VyX3BhZ2Uodm1hLCBwYWdlLCB2YWRkciwgZHN0LCBzcmMsIGxlbikgXAorCW1lbWNweShkc3QsIHNyYywgbGVuKQorCisjZW5kaWYgLyogX1MzOTBfQ0FDSEVGTFVTSF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL2Njd2Rldi5oIGIvaW5jbHVkZS9hc20tczM5MC9jY3dkZXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWIyMzFhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tczM5MC9jY3dkZXYuaApAQCAtMCwwICsxLDE5MiBAQAorLyoKKyAqICBpbmNsdWRlL2FzbS1zMzkwL2Njd2Rldi5oCisgKiAgaW5jbHVkZS9hc20tczM5MHgvY2N3ZGV2LmgKKyAqCisgKiAgICBDb3B5cmlnaHQgKEMpIDIwMDIgSUJNIERldXRzY2hsYW5kIEVudHdpY2tsdW5nIEdtYkgsIElCTSBDb3Jwb3JhdGlvbgorICogICAgQXV0aG9yKHMpOiBBcm5kIEJlcmdtYW5uIDxhcm5kYkBkZS5pYm0uY29tPgorICoKKyAqICBJbnRlcmZhY2UgZm9yIENDVyBkZXZpY2UgZHJpdmVycworICovCisjaWZuZGVmIF9TMzkwX0NDV0RFVl9IXworI2RlZmluZSBfUzM5MF9DQ1dERVZfSF8KKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZF9kZXZpY2V0YWJsZS5oPgorCisvKiBzdHJ1Y3RzIGZyb20gYXNtL2Npby5oICovCitzdHJ1Y3QgaXJiOworc3RydWN0IGNjdzE7CisKKy8qIHNpbXBsaWZpZWQgaW5pdGlhbGl6ZXJzIGZvciBzdHJ1Y3QgY2N3X2RldmljZToKKyAqIENDV19ERVZJQ0UgYW5kIENDV19ERVZJQ0VfREVWVFlQRSBpbml0aWFsaXplIG9uZQorICogZW50cnkgaW4geW91ciBNT0RVTEVfREVWSUNFX1RBQkxFIGFuZCBzZXQgdGhlIG1hdGNoX2ZsYWcgY29ycmVjdGx5ICovCisjZGVmaW5lIENDV19ERVZJQ0UoY3UsIGN1bSkgCQkJCQkJXAorCS5jdV90eXBlPShjdSksIC5jdV9tb2RlbD0oY3VtKSwJCQkJCVwKKwkubWF0Y2hfZmxhZ3M9KENDV19ERVZJQ0VfSURfTUFUQ0hfQ1VfVFlQRQkJCVwKKwkJICAgfCAoY3VtID8gQ0NXX0RFVklDRV9JRF9NQVRDSF9DVV9NT0RFTCA6IDApKQorCisjZGVmaW5lIENDV19ERVZJQ0VfREVWVFlQRShjdSwgY3VtLCBkZXYsIGRldm0pCQkJCVwKKwkuY3VfdHlwZT0oY3UpLCAuY3VfbW9kZWw9KGN1bSksIC5kZXZfdHlwZT0oZGV2KSwgLmRldl9tb2RlbD0oZGV2bSksXAorCS5tYXRjaF9mbGFncz1DQ1dfREVWSUNFX0lEX01BVENIX0NVX1RZUEUJCQlcCisJCSAgIHwgKChjdW0pID8gQ0NXX0RFVklDRV9JRF9NQVRDSF9DVV9NT0RFTCA6IDApIAlcCisJCSAgIHwgQ0NXX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0VfVFlQRQkJCVwKKwkJICAgfCAoKGRldm0pID8gQ0NXX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0VfTU9ERUwgOiAwKQorCisvKiBzY2FuIHRocm91Z2ggYW4gYXJyYXkgb2YgZGV2aWNlIGlkcyBhbmQgcmV0dXJuIHRoZSBmaXJzdAorICogZW50cnkgdGhhdCBtYXRjaGVzIHRoZSBkZXZpY2UuCisgKgorICogdGhlIGFycmF5IG11c3QgZW5kIHdpdGggYW4gZW50cnkgY29udGFpbmluZyB6ZXJvIG1hdGNoX2ZsYWdzCisgKi8KK3N0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IGNjd19kZXZpY2VfaWQgKgorY2N3X2RldmljZV9pZF9tYXRjaChjb25zdCBzdHJ1Y3QgY2N3X2RldmljZV9pZCAqYXJyYXksCisJCQljb25zdCBzdHJ1Y3QgY2N3X2RldmljZV9pZCAqbWF0Y2gpCit7CisJY29uc3Qgc3RydWN0IGNjd19kZXZpY2VfaWQgKmlkID0gYXJyYXk7CisKKwlmb3IgKGlkID0gYXJyYXk7IGlkLT5tYXRjaF9mbGFnczsgaWQrKykgeworCQlpZiAoKGlkLT5tYXRjaF9mbGFncyAmIENDV19ERVZJQ0VfSURfTUFUQ0hfQ1VfVFlQRSkKKwkJICAgICYmIChpZC0+Y3VfdHlwZSAhPSBtYXRjaC0+Y3VfdHlwZSkpCisJCQljb250aW51ZTsKKworCQlpZiAoKGlkLT5tYXRjaF9mbGFncyAmIENDV19ERVZJQ0VfSURfTUFUQ0hfQ1VfTU9ERUwpCisJCSAgICAmJiAoaWQtPmN1X21vZGVsICE9IG1hdGNoLT5jdV9tb2RlbCkpCisJCQljb250aW51ZTsKKworCQlpZiAoKGlkLT5tYXRjaF9mbGFncyAmIENDV19ERVZJQ0VfSURfTUFUQ0hfREVWSUNFX1RZUEUpCisJCSAgICAmJiAoaWQtPmRldl90eXBlICE9IG1hdGNoLT5kZXZfdHlwZSkpCisJCQljb250aW51ZTsKKworCQlpZiAoKGlkLT5tYXRjaF9mbGFncyAmIENDV19ERVZJQ0VfSURfTUFUQ0hfREVWSUNFX01PREVMKQorCQkgICAgJiYgKGlkLT5kZXZfbW9kZWwgIT0gbWF0Y2gtPmRldl9tb2RlbCkpCisJCQljb250aW51ZTsKKworCQlyZXR1cm4gaWQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIFRoZSBzdHJ1Y3QgY2N3IGRldmljZSBpcyBvdXIgcmVwbGFjZW1lbnQgZm9yIHRoZSBnbG9iYWxseSBhY2Nlc3NpYmxlCisgKiBpb2luZm8gYXJyYXkuIGlvaW5mbyB3aWxsIG11dGF0ZSBpbnRvIGEgc3ViY2hhbm5lbCBkZXZpY2UgbGF0ZXIuCisgKgorICogUmVmZXJlbmNlOiBEb2N1bWVudGF0aW9uL3MzOTAvZHJpdmVyLW1vZGVsLnR4dCAqLworc3RydWN0IGNjd19kZXZpY2UgeworCXNwaW5sb2NrX3QgKmNjd2xvY2s7CisJc3RydWN0IGNjd19kZXZpY2VfcHJpdmF0ZSAqcHJpdmF0ZTsJLyogY2lvIHByaXZhdGUgaW5mb3JtYXRpb24gKi8KKwlzdHJ1Y3QgY2N3X2RldmljZV9pZCBpZDsJLyogaWQgb2YgdGhpcyBkZXZpY2UsIGRyaXZlcl9pbmZvIGlzCisJCQkJCSAgIHNldCBieSBjY3dfZmluZF9kcml2ZXIgKi8KKwlzdHJ1Y3QgY2N3X2RyaXZlciAqZHJ2OwkJLyogKi8KKwlzdHJ1Y3QgZGV2aWNlIGRldjsJCS8qICovCisJaW50IG9ubGluZTsKKwkvKiBUaGlzIGlzIHNpY2ssIGJ1dCBhIGRyaXZlciBjYW4gaGF2ZSBkaWZmZXJlbnQgaW50ZXJydXB0IGhhbmRsZXJzIAorCSAgIGZvciBkaWZmZXJlbnQgY2N3X2RldmljZXMgKG11bHRpLXN1YmNoYW5uZWwgZHJpdmVycykuLi4gKi8KKwl2b2lkICgqaGFuZGxlcikgKHN0cnVjdCBjY3dfZGV2aWNlICosIHVuc2lnbmVkIGxvbmcsIHN0cnVjdCBpcmIgKik7Cit9OworCisKKy8qIEVhY2ggY2N3IGRyaXZlciByZWdpc3RlcnMgd2l0aCB0aGUgY2N3IHJvb3QgYnVzICovCitzdHJ1Y3QgY2N3X2RyaXZlciB7CisJc3RydWN0IG1vZHVsZSAqb3duZXI7CQkvKiBmb3IgYXV0b21hdGljIE1PRF9JTkNfVVNFX0NPVU5UICAgKi8KKwlzdHJ1Y3QgY2N3X2RldmljZV9pZCAqaWRzOwkvKiBwcm9iZSBkcml2ZXIgd2l0aCB0aGVzZSBkZXZzICAgICAgKi8KKwlpbnQgKCpwcm9iZSkgKHN0cnVjdCBjY3dfZGV2aWNlICopOyAvKiBhc2sgZHJpdmVyIHRvIHByb2JlIGRldiAJICAgICAqLworCXZvaWQgKCpyZW1vdmUpIChzdHJ1Y3QgY2N3X2RldmljZSAqKTsKKwkJCQkJLyogZGV2aWNlIGlzIG5vIGxvbmdlciBhdmFpbGFibGUgICAgICovCisJaW50ICgqc2V0X29ubGluZSkgKHN0cnVjdCBjY3dfZGV2aWNlICopOworCWludCAoKnNldF9vZmZsaW5lKSAoc3RydWN0IGNjd19kZXZpY2UgKik7CisJaW50ICgqbm90aWZ5KSAoc3RydWN0IGNjd19kZXZpY2UgKiwgaW50KTsKKwlzdHJ1Y3QgZGV2aWNlX2RyaXZlciBkcml2ZXI7CS8qIGhpZ2hlciBsZXZlbCBzdHJ1Y3R1cmUsIGRvbid0IGluaXQKKwkJCQkJICAgdGhpcyBmcm9tIHlvdXIgZHJpdmVyCSAgICAgKi8KKwljaGFyICpuYW1lOworfTsKKworZXh0ZXJuIHN0cnVjdCBjY3dfZGV2aWNlICpnZXRfY2N3ZGV2X2J5X2J1c2lkKHN0cnVjdCBjY3dfZHJpdmVyICpjZHJ2LAorCQkJCQkgICAgICBjb25zdCBjaGFyICpidXNfaWQpOworCisvKiBkZXZpY2VzIGRyaXZlcnMgY2FsbCB0aGVzZSBkdXJpbmcgbW9kdWxlIGxvYWQgYW5kIHVubG9hZC4KKyAqIFdoZW4gYSBkcml2ZXIgaXMgcmVnaXN0ZXJlZCwgaXRzIHByb2JlIG1ldGhvZCBpcyBjYWxsZWQKKyAqIHdoZW4gbmV3IGRldmljZXMgZm9yIGl0cyB0eXBlIHBvcCB1cCAqLworZXh0ZXJuIGludCAgY2N3X2RyaXZlcl9yZWdpc3RlciAgIChzdHJ1Y3QgY2N3X2RyaXZlciAqZHJpdmVyKTsKK2V4dGVybiB2b2lkIGNjd19kcml2ZXJfdW5yZWdpc3RlciAoc3RydWN0IGNjd19kcml2ZXIgKmRyaXZlcik7CisKK3N0cnVjdCBjY3cxOworCitleHRlcm4gaW50IGNjd19kZXZpY2Vfc2V0X29wdGlvbnMoc3RydWN0IGNjd19kZXZpY2UgKiwgdW5zaWduZWQgbG9uZyk7CisKKy8qIEFsbG93IGZvciBpL28gY29tcGxldGlvbiBub3RpZmljYXRpb24gYWZ0ZXIgcHJpbWFyeSBpbnRlcnJ1cHQgc3RhdHVzLiAqLworI2RlZmluZSBDQ1dERVZfRUFSTFlfTk9USUZJQ0FUSU9OCTB4MDAwMQorLyogUmVwb3J0IGFsbCBpbnRlcnJ1cHQgY29uZGl0aW9ucy4gKi8KKyNkZWZpbmUgQ0NXREVWX1JFUE9SVF9BTEwJIAkweDAwMDIKKy8qIFRyeSB0byBwZXJmb3JtIHBhdGggZ3JvdXBpbmcuICovCisjZGVmaW5lIENDV0RFVl9ET19QQVRIR1JPVVAgICAgICAgICAgICAgMHgwMDA0CisvKiBBbGxvdyBmb3JjZWQgb25saW5pbmcgb2YgYm94ZWQgZGV2aWNlcy4gKi8KKyNkZWZpbmUgQ0NXREVWX0FMTE9XX0ZPUkNFICAgICAgICAgICAgICAweDAwMDgKKworLyoKKyAqIGNjd19kZXZpY2Vfc3RhcnQoKQorICoKKyAqICBTdGFydCBhIFMvMzkwIGNoYW5uZWwgcHJvZ3JhbS4gV2hlbiB0aGUgaW50ZXJydXB0IGFycml2ZXMsIHRoZQorICogIElSUSBoYW5kbGVyIGlzIGNhbGxlZCwgZWl0aGVyIGltbWVkaWF0ZWx5LCBkZWxheWVkIChkZXYtZW5kIG1pc3NpbmcsCisgKiAgb3Igc2Vuc2UgcmVxdWlyZWQpIG9yIG5ldmVyIChubyBJUlEgaGFuZGxlciByZWdpc3RlcmVkKS4KKyAqICBEZXBlbmRpbmcgb24gdGhlIGFjdGlvbiB0YWtlbiwgY2N3X2RldmljZV9zdGFydCgpIHJldHVybnM6ICAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgMAkgICAgIC0gU3VjY2VzcworICoJCQkgICAgIC1FQlVTWSAgLSBEZXZpY2UgYnVzeSwgb3Igc3RhdHVzIHBlbmRpbmcKKyAqCQkJICAgICAtRU5PREVWIC0gRGV2aWNlIG5vdCBvcGVyYXRpb25hbAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAtRUlOVkFMIC0gRGV2aWNlIGludmFsaWQgZm9yIG9wZXJhdGlvbgorICovCitleHRlcm4gaW50IGNjd19kZXZpY2Vfc3RhcnQoc3RydWN0IGNjd19kZXZpY2UgKiwgc3RydWN0IGNjdzEgKiwKKwkJCSAgICB1bnNpZ25lZCBsb25nLCBfX3U4LCB1bnNpZ25lZCBsb25nKTsKKy8qCisgKiBjY3dfZGV2aWNlX3N0YXJ0X3RpbWVvdXQoKQorICoKKyAqIFRoaXMgZnVuY3Rpb24gbm90aWZpZXMgdGhlIGRldmljZSBkcml2ZXIgaWYgdGhlIGNoYW5uZWwgcHJvZ3JhbSBoYXMgbm90CisgKiBjb21wbGV0ZWQgZHVyaW5nIHRoZSBzcGVjaWZpZWQgdGltZS4gSWYgYSB0aW1lb3V0IG9jY3VycywgdGhlIGNoYW5uZWwKKyAqIHByb2dyYW0gaXMgdGVybWluYXRlZCB2aWEgeHNjaCgpLCBoc2NoKCkgb3IgY3NjaCgpLgorICovCitleHRlcm4gaW50IGNjd19kZXZpY2Vfc3RhcnRfdGltZW91dChzdHJ1Y3QgY2N3X2RldmljZSAqLCBzdHJ1Y3QgY2N3MSAqLAorCQkJCSAgICB1bnNpZ25lZCBsb25nLCBfX3U4LCB1bnNpZ25lZCBsb25nLCBpbnQpOworLyoKKyAqIGNjd19kZXZpY2Vfc3RhcnRfa2V5KCkKKyAqIGNjd19kZXZpY2Vfc3RhcnRfa2V5X3RpbWVvdXQoKQorICoKKyAqIFNhbWUgYXMgY2N3X2RldmljZV9zdGFydCgpIGFuZCBjY3dfZGV2aWNlX3N0YXJ0X3RpbWVvdXQoKSwgZXhjZXB0IGEKKyAqIHN0b3JhZ2Uga2V5ICE9IGRlZmF1bHQga2V5IGNhbiBiZSBwcm92aWRlZCBmb3IgdGhlIEkvTy4KKyAqLworZXh0ZXJuIGludCBjY3dfZGV2aWNlX3N0YXJ0X2tleShzdHJ1Y3QgY2N3X2RldmljZSAqLCBzdHJ1Y3QgY2N3MSAqLAorCQkJCXVuc2lnbmVkIGxvbmcsIF9fdTgsIF9fdTgsIHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuIGludCBjY3dfZGV2aWNlX3N0YXJ0X3RpbWVvdXRfa2V5KHN0cnVjdCBjY3dfZGV2aWNlICosIHN0cnVjdCBjY3cxICosCisJCQkJCXVuc2lnbmVkIGxvbmcsIF9fdTgsIF9fdTgsCisJCQkJCXVuc2lnbmVkIGxvbmcsIGludCk7CisKKworZXh0ZXJuIGludCBjY3dfZGV2aWNlX3Jlc3VtZShzdHJ1Y3QgY2N3X2RldmljZSAqKTsKK2V4dGVybiBpbnQgY2N3X2RldmljZV9oYWx0KHN0cnVjdCBjY3dfZGV2aWNlICosIHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuIGludCBjY3dfZGV2aWNlX2NsZWFyKHN0cnVjdCBjY3dfZGV2aWNlICosIHVuc2lnbmVkIGxvbmcpOworCitleHRlcm4gaW50IHJlYWRfZGV2X2NoYXJzKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LCB2b2lkICoqYnVmZmVyLCBpbnQgbGVuZ3RoKTsKK2V4dGVybiBpbnQgcmVhZF9jb25mX2RhdGEoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYsIHZvaWQgKipidWZmZXIsIGludCAqbGVuZ3RoKTsKK2V4dGVybiBpbnQgcmVhZF9jb25mX2RhdGFfbHBtKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LCB2b2lkICoqYnVmZmVyLAorCQkJICAgICAgaW50ICpsZW5ndGgsIF9fdTggbHBtKTsKKworZXh0ZXJuIGludCBjY3dfZGV2aWNlX3NldF9vbmxpbmUoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYpOworZXh0ZXJuIGludCBjY3dfZGV2aWNlX3NldF9vZmZsaW5lKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KTsKKworCitleHRlcm4gc3RydWN0IGNpdyAqY2N3X2RldmljZV9nZXRfY2l3KHN0cnVjdCBjY3dfZGV2aWNlICosIF9fdTMyIGNtZCk7CitleHRlcm4gX191OCBjY3dfZGV2aWNlX2dldF9wYXRoX21hc2soc3RydWN0IGNjd19kZXZpY2UgKik7CisKKyNkZWZpbmUgZ2V0X2Njd2Rldl9sb2NrKHgpICh4KS0+Y2N3bG9jaworCisjZGVmaW5lIHRvX2Njd2RldihuKSBjb250YWluZXJfb2Yobiwgc3RydWN0IGNjd19kZXZpY2UsIGRldikKKyNkZWZpbmUgdG9fY2N3ZHJ2KG4pIGNvbnRhaW5lcl9vZihuLCBzdHJ1Y3QgY2N3X2RyaXZlciwgZHJpdmVyKQorCitleHRlcm4gc3RydWN0IGNjd19kZXZpY2UgKmNjd19kZXZpY2VfcHJvYmVfY29uc29sZSh2b2lkKTsKKworLy8gRklYTUU6IHRoZXNlIGhhdmUgdG8gZ28KK2V4dGVybiBpbnQgX2Njd19kZXZpY2VfZ2V0X2RldmljZV9udW1iZXIoc3RydWN0IGNjd19kZXZpY2UgKik7CitleHRlcm4gaW50IF9jY3dfZGV2aWNlX2dldF9zdWJjaGFubmVsX251bWJlcihzdHJ1Y3QgY2N3X2RldmljZSAqKTsKKworZXh0ZXJuIHN0cnVjdCBkZXZpY2UgKnMzOTBfcm9vdF9kZXZfcmVnaXN0ZXIoY29uc3QgY2hhciAqKTsKK2V4dGVybiB2b2lkIHMzOTBfcm9vdF9kZXZfdW5yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICopOworCitleHRlcm4gdm9pZCAqY2N3X2RldmljZV9nZXRfY2hwX2Rlc2Moc3RydWN0IGNjd19kZXZpY2UgKiwgaW50KTsKKyNlbmRpZiAvKiBfUzM5MF9DQ1dERVZfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvY2N3Z3JvdXAuaCBiL2luY2x1ZGUvYXNtLXMzOTAvY2N3Z3JvdXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMmY5YzBkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tczM5MC9jY3dncm91cC5oCkBAIC0wLDAgKzEsNDUgQEAKKyNpZm5kZWYgUzM5MF9DQ1dHUk9VUF9ICisjZGVmaW5lIFMzOTBfQ0NXR1JPVVBfSAorCitzdHJ1Y3QgY2N3X2RldmljZTsKK3N0cnVjdCBjY3dfZHJpdmVyOworCitzdHJ1Y3QgY2N3Z3JvdXBfZGV2aWNlIHsKKwl1bnNpZ25lZCBsb25nIGNyZWF0b3JfaWQ7CS8qIHVuaXF1ZSBudW1iZXIgb2YgdGhlIGRyaXZlciAqLworCWVudW0geworCQlDQ1dHUk9VUF9PRkZMSU5FLAorCQlDQ1dHUk9VUF9PTkxJTkUsCisJfSBzdGF0ZTsKKwlhdG9taWNfdCBvbm9mZjsKKwl1bnNpZ25lZCBpbnQgY291bnQ7CQkvKiBudW1iZXIgb2YgYXR0YWNoZWQgc2xhdmUgZGV2aWNlcyAqLworCXN0cnVjdCBkZXZpY2UJZGV2OwkJLyogbWFzdGVyIGRldmljZQkJICAgICovCisJc3RydWN0IGNjd19kZXZpY2UgKmNkZXZbMF07CS8qIHZhcmlhYmxlIG51bWJlciwgYWxsb2NhdGUgYXMgbmVlZGVkICovCit9OworCitzdHJ1Y3QgY2N3Z3JvdXBfZHJpdmVyIHsKKwlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKKwljaGFyICpuYW1lOworCWludCBtYXhfc2xhdmVzOworCXVuc2lnbmVkIGxvbmcgZHJpdmVyX2lkOworCisJaW50ICgqcHJvYmUpIChzdHJ1Y3QgY2N3Z3JvdXBfZGV2aWNlICopOworCXZvaWQgKCpyZW1vdmUpIChzdHJ1Y3QgY2N3Z3JvdXBfZGV2aWNlICopOworCWludCAoKnNldF9vbmxpbmUpIChzdHJ1Y3QgY2N3Z3JvdXBfZGV2aWNlICopOworCWludCAoKnNldF9vZmZsaW5lKSAoc3RydWN0IGNjd2dyb3VwX2RldmljZSAqKTsKKworCXN0cnVjdCBkZXZpY2VfZHJpdmVyIGRyaXZlcjsJCS8qIHRoaXMgZHJpdmVyICovCit9OworCitleHRlcm4gaW50ICBjY3dncm91cF9kcml2ZXJfcmVnaXN0ZXIgICAoc3RydWN0IGNjd2dyb3VwX2RyaXZlciAqY2RyaXZlcik7CitleHRlcm4gdm9pZCBjY3dncm91cF9kcml2ZXJfdW5yZWdpc3RlciAoc3RydWN0IGNjd2dyb3VwX2RyaXZlciAqY2RyaXZlcik7CitleHRlcm4gaW50IGNjd2dyb3VwX2NyZWF0ZSAoc3RydWN0IGRldmljZSAqcm9vdCwKKwkJCSAgICB1bnNpZ25lZCBpbnQgY3JlYXRvcl9pZCwKKwkJCSAgICBzdHJ1Y3QgY2N3X2RyaXZlciAqZ2RydiwKKwkJCSAgICBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKworZXh0ZXJuIGludCBjY3dncm91cF9wcm9iZV9jY3dkZXYoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYpOworZXh0ZXJuIHZvaWQgY2N3Z3JvdXBfcmVtb3ZlX2Njd2RldihzdHJ1Y3QgY2N3X2RldmljZSAqY2Rldik7CisKKyNkZWZpbmUgdG9fY2N3Z3JvdXBkZXYoeCkgY29udGFpbmVyX29mKCh4KSwgc3RydWN0IGNjd2dyb3VwX2RldmljZSwgZGV2KQorI2RlZmluZSB0b19jY3dncm91cGRydih4KSBjb250YWluZXJfb2YoKHgpLCBzdHJ1Y3QgY2N3Z3JvdXBfZHJpdmVyLCBkcml2ZXIpCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvY2hlY2tzdW0uaCBiL2luY2x1ZGUvYXNtLXMzOTAvY2hlY2tzdW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzFmMmFmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tczM5MC9jaGVja3N1bS5oCkBAIC0wLDAgKzEsMjY0IEBACisjaWZuZGVmIF9TMzkwX0NIRUNLU1VNX0gKKyNkZWZpbmUgX1MzOTBfQ0hFQ0tTVU1fSAorCisvKgorICogIGluY2x1ZGUvYXNtLXMzOTAvY2hlY2tzdW0uaAorICogICAgUzM5MCBmYXN0IG5ldHdvcmsgY2hlY2tzdW0gcm91dGluZXMKKyAqICAgIHNlZSBhbHNvIGFyY2gvUzM5MC9saWIvY2hlY2tzdW0uYworICoKKyAqICBTMzkwIHZlcnNpb24KKyAqICAgIENvcHlyaWdodCAoQykgMTk5OSBJQk0gRGV1dHNjaGxhbmQgRW50d2lja2x1bmcgR21iSCwgSUJNIENvcnBvcmF0aW9uCisgKiAgICBBdXRob3Iocyk6IFVscmljaCBIaWxkICAgICAgICAoZmlyc3QgdmVyc2lvbikKKyAqICAgICAgICAgICAgICAgTWFydGluIFNjaHdpZGVmc2t5IChoZWF2aWx5IG9wdGltaXplZCBDS1NNIHZlcnNpb24pCisgKiAgICAgICAgICAgICAgIEQuSi4gQmFycm93ICAgICAgICAodGhpcmQgYXR0ZW1wdCkgCisgKi8KKworI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisKKy8qCisgKiBjb21wdXRlcyB0aGUgY2hlY2tzdW0gb2YgYSBtZW1vcnkgYmxvY2sgYXQgYnVmZiwgbGVuZ3RoIGxlbiwKKyAqIGFuZCBhZGRzIGluICJzdW0iICgzMi1iaXQpCisgKgorICogcmV0dXJucyBhIDMyLWJpdCBudW1iZXIgc3VpdGFibGUgZm9yIGZlZWRpbmcgaW50byBpdHNlbGYKKyAqIG9yIGNzdW1fdGNwdWRwX21hZ2ljCisgKgorICogdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIGV2ZW4gbGVuZ3RocywgZXhjZXB0CisgKiBmb3IgdGhlIGxhc3QgZnJhZ21lbnQsIHdoaWNoIG1heSBiZSBvZGQKKyAqCisgKiBpdCdzIGJlc3QgdG8gaGF2ZSBidWZmIGFsaWduZWQgb24gYSAzMi1iaXQgYm91bmRhcnkKKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKK2NzdW1fcGFydGlhbChjb25zdCB1bnNpZ25lZCBjaGFyICogYnVmZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IHN1bSkKK3sKKwkvKgorCSAqIEV4cGVyaW1lbnRzIHdpdGggZXRoZXJuZXQgYW5kIHNsaXAgY29ubmVjdGlvbnMgc2hvdyB0aGF0IGJ1ZgorCSAqIGlzIGFsaWduZWQgb24gZWl0aGVyIGEgMi1ieXRlIG9yIDQtYnl0ZSBib3VuZGFyeS4KKwkgKi8KKyNpZm5kZWYgX19zMzkweF9fCisJcmVnaXN0ZXJfcGFpciBycDsKKworCXJwLnN1YnJlZy5ldmVuID0gKHVuc2lnbmVkIGxvbmcpIGJ1ZmY7CisJcnAuc3VicmVnLm9kZCA9ICh1bnNpZ25lZCBsb25nKSBsZW47CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCQkiMDogIGNrc20gJTAsJTFcbiIJLyogZG8gY2hlY2tzdW0gb24gbG9uZ3MgKi8KKwkJIiAgICBqbyAgIDBiXG4iCisJCTogIismZCIgKHN1bSksICIrJmEiIChycCkgOiA6ICJjYyIsICJtZW1vcnkiICk7CisjZWxzZSAvKiBfX3MzOTB4X18gKi8KKyAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAorICAgICAgICAgICAgICAgICIgICAgbGdyICAyLCUxXG4iICAgIC8qIGFkZHJlc3MgaW4gZ3ByIDIgKi8KKyAgICAgICAgICAgICAgICAiICAgIGxnZnIgMywlMlxuIiAgICAvKiBsZW5ndGggaW4gZ3ByIDMgKi8KKyAgICAgICAgICAgICAgICAiMDogIGNrc20gJTAsMlxuIiAgICAvKiBkbyBjaGVja3N1bSBvbiBsb25ncyAqLworICAgICAgICAgICAgICAgICIgICAgam8gICAwYlxuIgorICAgICAgICAgICAgICAgIDogIismZCIgKHN1bSkKKyAgICAgICAgICAgICAgICA6ICJkIiAoYnVmZiksICJkIiAobGVuKQorICAgICAgICAgICAgICAgIDogImNjIiwgIm1lbW9yeSIsICIyIiwgIjMiICk7CisjZW5kaWYgLyogX19zMzkweF9fICovCisJcmV0dXJuIHN1bTsKK30KKworLyoKKyAqIGNzdW1fcGFydGlhbCBhcyBhbiBpbmxpbmUgZnVuY3Rpb24KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgCitjc3VtX3BhcnRpYWxfaW5saW5lKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiBidWZmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgc3VtKQoreworI2lmbmRlZiBfX3MzOTB4X18KKwlyZWdpc3Rlcl9wYWlyIHJwOworCisJcnAuc3VicmVnLmV2ZW4gPSAodW5zaWduZWQgbG9uZykgYnVmZjsKKwlycC5zdWJyZWcub2RkID0gKHVuc2lnbmVkIGxvbmcpIGxlbjsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCSIwOiAgY2tzbSAlMCwlMVxuIiAgICAvKiBkbyBjaGVja3N1bSBvbiBsb25ncyAqLworCQkiICAgIGpvICAgMGJcbiIKKyAgICAgICAgICAgICAgICA6ICIrJmQiIChzdW0pLCAiKyZhIiAocnApIDogOiAiY2MiLCAibWVtb3J5IiApOworI2Vsc2UgLyogX19zMzkweF9fICovCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCQkiICAgIGxnciAgMiwlMVxuIiAgICAvKiBhZGRyZXNzIGluIGdwciAyICovCisJCSIgICAgbGdmciAzLCUyXG4iICAgIC8qIGxlbmd0aCBpbiBncHIgMyAqLworCQkiMDogIGNrc20gJTAsMlxuIiAgICAvKiBkbyBjaGVja3N1bSBvbiBsb25ncyAqLworCQkiICAgIGpvICAgMGJcbiIKKyAgICAgICAgICAgICAgICA6ICIrJmQiIChzdW0pCisJCTogImQiIChidWZmKSwgImQiIChsZW4pCisgICAgICAgICAgICAgICAgOiAiY2MiLCAibWVtb3J5IiwgIjIiLCAiMyIgKTsKKyNlbmRpZiAvKiBfX3MzOTB4X18gKi8KKwlyZXR1cm4gc3VtOworfQorCisvKgorICogdGhlIHNhbWUgYXMgY3N1bV9wYXJ0aWFsX2NvcHksIGJ1dCBjb3BpZXMgZnJvbSB1c2VyIHNwYWNlLgorICoKKyAqIGhlcmUgZXZlbiBtb3JlIGltcG9ydGFudCB0byBhbGlnbiBzcmMgYW5kIGRzdCBvbiBhIDMyLWJpdCAob3IgZXZlbgorICogYmV0dGVyIDY0LWJpdCkgYm91bmRhcnkKKyAqCisgKiBDb3B5IGZyb20gdXNlcnNwYWNlIGFuZCBjb21wdXRlIGNoZWNrc3VtLiAgSWYgd2UgY2F0Y2ggYW4gZXhjZXB0aW9uCisgKiB0aGVuIHplcm8gdGhlIHJlc3Qgb2YgdGhlIGJ1ZmZlci4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKK2NzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlcihjb25zdCBjaGFyIF9fdXNlciAqc3JjLCBjaGFyICpkc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgc3VtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICplcnJfcHRyKQoreworCWludCBtaXNzaW5nOworCisJbWlzc2luZyA9IGNvcHlfZnJvbV91c2VyKGRzdCwgc3JjLCBsZW4pOworCWlmIChtaXNzaW5nKSB7CisJCW1lbXNldChkc3QgKyBsZW4gLSBtaXNzaW5nLCAwLCBtaXNzaW5nKTsKKwkJKmVycl9wdHIgPSAtRUZBVUxUOworCX0KKwkJCisJcmV0dXJuIGNzdW1fcGFydGlhbChkc3QsIGxlbiwgc3VtKTsKK30KKworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAorY3N1bV9wYXJ0aWFsX2NvcHlfbm9jaGVjayAoY29uc3QgY2hhciAqc3JjLCBjaGFyICpkc3QsIGludCBsZW4sIHVuc2lnbmVkIGludCBzdW0pCit7CisgICAgICAgIG1lbWNweShkc3Qsc3JjLGxlbik7CisgICAgICAgIHJldHVybiBjc3VtX3BhcnRpYWxfaW5saW5lKGRzdCwgbGVuLCBzdW0pOworfQorCisvKgorICogICAgICBGb2xkIGEgcGFydGlhbCBjaGVja3N1bSB3aXRob3V0IGFkZGluZyBwc2V1ZG8gaGVhZGVycworICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0Citjc3VtX2ZvbGQodW5zaWduZWQgaW50IHN1bSkKK3sKKyNpZm5kZWYgX19zMzkweF9fCisJcmVnaXN0ZXJfcGFpciBycDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwkJIiAgICBzbHIgICVOMSwlTjFcbiIgLyogJTAgPSBIIEwgKi8KKwkJIiAgICBsciAgICUxLCUwXG4iICAgLyogJTAgPSBIIEwsICUxID0gSCBMIDAgMCAqLworCQkiICAgIHNyZGwgJTEsMTZcbiIgICAvKiAlMCA9IEggTCwgJTEgPSAwIEggTCAwICovCisJCSIgICAgYWxyICAlMSwlTjFcbiIgIC8qICUwID0gSCBMLCAlMSA9IEwgSCBMIDAgKi8KKwkJIiAgICBhbHIgICUwLCUxXG4iICAgLyogJTAgPSBIK0wrQyBMK0ggKi8KKwkJIiAgICBzcmwgICUwLDE2XG4iICAgLyogJTAgPSBIK0wrQyAqLworCQk6ICIrJmQiIChzdW0pLCAiPWQiIChycCkgOiA6ICJjYyIgKTsKKyNlbHNlIC8qIF9fczM5MHhfXyAqLworCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwkJIiAgICBzciAgIDMsM1xuIiAgIC8qICUwID0gSCo2NTUzNiArIEwgKi8KKwkJIiAgICBsciAgIDIsJTBcbiIgIC8qICUwID0gSCBMLCBSMi9SMyA9IEggTCAvIDAgMCAqLworCQkiICAgIHNyZGwgMiwxNlxuIiAgLyogJTAgPSBIIEwsIFIyL1IzID0gMCBIIC8gTCAwICovCisJCSIgICAgYWxyICAyLDNcbiIgICAvKiAlMCA9IEggTCwgUjIvUjMgPSBMIEggLyBMIDAgKi8KKwkJIiAgICBhbHIgICUwLDJcbiIgIC8qICUwID0gSCtMK0MgTCtIICovCisgICAgICAgICAgICAgICAgIiAgICBzcmwgICUwLDE2XG4iIC8qICUwID0gSCtMK0MgKi8KKwkJOiAiKyZkIiAoc3VtKSA6IDogImNjIiwgIjIiLCAiMyIpOworI2VuZGlmIC8qIF9fczM5MHhfXyAqLworCXJldHVybiAoKHVuc2lnbmVkIHNob3J0KSB+c3VtKTsKK30KKworLyoKKyAqCVRoaXMgaXMgYSB2ZXJzaW9uIG9mIGlwX2NvbXB1dGVfY3N1bSgpIG9wdGltaXplZCBmb3IgSVAgaGVhZGVycywKKyAqCXdoaWNoIGFsd2F5cyBjaGVja3N1bSBvbiA0IG9jdGV0IGJvdW5kYXJpZXMuCisgKgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0CitpcF9mYXN0X2NzdW0odW5zaWduZWQgY2hhciAqaXBoLCB1bnNpZ25lZCBpbnQgaWhsKQoreworCXVuc2lnbmVkIGxvbmcgc3VtOworI2lmbmRlZiBfX3MzOTB4X18KKwlyZWdpc3Rlcl9wYWlyIHJwOworCisJcnAuc3VicmVnLmV2ZW4gPSAodW5zaWduZWQgbG9uZykgaXBoOworCXJwLnN1YnJlZy5vZGQgPSAodW5zaWduZWQgbG9uZykgaWhsKjQ7CisgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKKwkJIiAgICBzciAgICUwLCUwXG4iICAgLyogc2V0IHN1bSB0byB6ZXJvICovCisgICAgICAgICAgICAgICAgIjA6ICBja3NtICUwLCUxXG4iICAgLyogZG8gY2hlY2tzdW0gb24gbG9uZ3MgKi8KKyAgICAgICAgICAgICAgICAiICAgIGpvICAgMGJcbiIKKyAgICAgICAgICAgICAgICA6ICI9JmQiIChzdW0pLCAiKyZhIiAocnApIDogOiAiY2MiLCAibWVtb3J5IiApOworI2Vsc2UgLyogX19zMzkweF9fICovCisgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKKwkJIiAgICBzbGdyICUwLCUwXG4iICAgLyogc2V0IHN1bSB0byB6ZXJvICovCisgICAgICAgICAgICAgICAgIiAgICBsZ3IgIDIsJTFcbiIgICAgLyogYWRkcmVzcyBpbiBncHIgMiAqLworICAgICAgICAgICAgICAgICIgICAgbGdmciAzLCUyXG4iICAgIC8qIGxlbmd0aCBpbiBncHIgMyAqLworICAgICAgICAgICAgICAgICIwOiAgY2tzbSAlMCwyXG4iICAgIC8qIGRvIGNoZWNrc3VtIG9uIGludHMgKi8KKyAgICAgICAgICAgICAgICAiICAgIGpvICAgMGJcbiIKKyAgICAgICAgICAgICAgICA6ICI9JmQiIChzdW0pCisgICAgICAgICAgICAgICAgOiAiZCIgKGlwaCksICJkIiAoaWhsKjQpCisgICAgICAgICAgICAgICAgOiAiY2MiLCAibWVtb3J5IiwgIjIiLCAiMyIgKTsKKyNlbmRpZiAvKiBfX3MzOTB4X18gKi8KKyAgICAgICAgcmV0dXJuIGNzdW1fZm9sZChzdW0pOworfQorCisvKgorICogY29tcHV0ZXMgdGhlIGNoZWNrc3VtIG9mIHRoZSBUQ1AvVURQIHBzZXVkby1oZWFkZXIKKyAqIHJldHVybnMgYSAzMi1iaXQgY2hlY2tzdW0KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgCitjc3VtX3RjcHVkcF9ub2ZvbGQodW5zaWduZWQgbG9uZyBzYWRkciwgdW5zaWduZWQgbG9uZyBkYWRkciwKKyAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBsZW4sIHVuc2lnbmVkIHNob3J0IHByb3RvLAorICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzdW0pCit7CisjaWZuZGVmIF9fczM5MHhfXworCV9fYXNtX18gX192b2xhdGlsZV9fICgKKyAgICAgICAgICAgICAgICAiICAgIGFsciAgICUwLCUxXG4iICAvKiBzdW0gKz0gc2FkZHIgKi8KKyAgICAgICAgICAgICAgICAiICAgIGJyYyAgIDEyLDBmXG4iCisJCSIgICAgYWhpICAgJTAsMVxuIiAgIC8qIGFkZCBjYXJyeSAqLworCQkiMDoiCisJCTogIismZCIgKHN1bSkgOiAiZCIgKHNhZGRyKSA6ICJjYyIgKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisgICAgICAgICAgICAgICAgIiAgICBhbHIgICAlMCwlMVxuIiAgLyogc3VtICs9IGRhZGRyICovCisgICAgICAgICAgICAgICAgIiAgICBicmMgICAxMiwxZlxuIgorICAgICAgICAgICAgICAgICIgICAgYWhpICAgJTAsMVxuIiAgIC8qIGFkZCBjYXJyeSAqLworCQkiMToiCisJCTogIismZCIgKHN1bSkgOiAiZCIgKGRhZGRyKSA6ICJjYyIgKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisgICAgICAgICAgICAgICAgIiAgICBhbHIgICAlMCwlMVxuIiAgLyogc3VtICs9IChsZW48PDE2KSArIChwcm90bzw8OCkgKi8KKwkJIiAgICBicmMgICAxMiwyZlxuIgorCQkiICAgIGFoaSAgICUwLDFcbiIgICAvKiBhZGQgY2FycnkgKi8KKwkJIjI6IgorCQk6ICIrJmQiIChzdW0pCisJCTogImQiICgoKHVuc2lnbmVkIGludCkgbGVuPDwxNikgKyAodW5zaWduZWQgaW50KSBwcm90bykKKwkJOiAiY2MiICk7CisjZWxzZSAvKiBfX3MzOTB4X18gKi8KKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisgICAgICAgICAgICAgICAgIiAgICBsZ2ZyICAlMCwlMFxuIgorICAgICAgICAgICAgICAgICIgICAgYWxnciAgJTAsJTFcbiIgIC8qIHN1bSArPSBzYWRkciAqLworICAgICAgICAgICAgICAgICIgICAgYnJjICAgMTIsMGZcbiIKKwkJIiAgICBhZ2hpICAlMCwxXG4iICAgLyogYWRkIGNhcnJ5ICovCisJCSIwOiAgYWxnciAgJTAsJTJcbiIgIC8qIHN1bSArPSBkYWRkciAqLworICAgICAgICAgICAgICAgICIgICAgYnJjICAgMTIsMWZcbiIKKyAgICAgICAgICAgICAgICAiICAgIGFnaGkgICUwLDFcbiIgICAvKiBhZGQgY2FycnkgKi8KKwkJIjE6ICBhbGdmciAlMCwlM1xuIiAgLyogc3VtICs9IChsZW48PDE2KSArIHByb3RvICovCisJCSIgICAgYnJjICAgMTIsMmZcbiIKKwkJIiAgICBhZ2hpICAlMCwxXG4iICAgLyogYWRkIGNhcnJ5ICovCisJCSIyOiAgc3JsZyAgMCwlMCwzMlxuIgorICAgICAgICAgICAgICAgICIgICAgYWxyICAgJTAsMFxuIiAgIC8qIGZvbGQgdG8gMzIgYml0cyAqLworICAgICAgICAgICAgICAgICIgICAgYnJjICAgMTIsM2ZcbiIKKyAgICAgICAgICAgICAgICAiICAgIGFoaSAgICUwLDFcbiIgICAvKiBhZGQgY2FycnkgKi8KKyAgICAgICAgICAgICAgICAiMzogIGxsZ2ZyICUwLCUwIgorCQk6ICIrJmQiIChzdW0pCisJCTogImQiIChzYWRkciksICJkIiAoZGFkZHIpLAorCQkgICJkIiAoKCh1bnNpZ25lZCBpbnQpIGxlbjw8MTYpICsgKHVuc2lnbmVkIGludCkgcHJvdG8pCisJCTogImNjIiwgIjAiICk7CisjZW5kaWYgLyogX19zMzkweF9fICovCisJcmV0dXJuIHN1bTsKK30KKworLyoKKyAqIGNvbXB1dGVzIHRoZSBjaGVja3N1bSBvZiB0aGUgVENQL1VEUCBwc2V1ZG8taGVhZGVyCisgKiByZXR1cm5zIGEgMTYtYml0IGNoZWNrc3VtLCBhbHJlYWR5IGNvbXBsZW1lbnRlZAorICovCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgaW50Citjc3VtX3RjcHVkcF9tYWdpYyh1bnNpZ25lZCBsb25nIHNhZGRyLCB1bnNpZ25lZCBsb25nIGRhZGRyLAorICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgbGVuLCB1bnNpZ25lZCBzaG9ydCBwcm90bywKKyAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzdW0pCit7CisJcmV0dXJuIGNzdW1fZm9sZChjc3VtX3RjcHVkcF9ub2ZvbGQoc2FkZHIsZGFkZHIsbGVuLHByb3RvLHN1bSkpOworfQorCisvKgorICogdGhpcyByb3V0aW5lIGlzIHVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgSVAtbGlrZSBjaGVja3N1bXMsIG1haW5seQorICogaW4gaWNtcC5jCisgKi8KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydAoraXBfY29tcHV0ZV9jc3VtKHVuc2lnbmVkIGNoYXIgKiBidWZmLCBpbnQgbGVuKQoreworCXJldHVybiBjc3VtX2ZvbGQoY3N1bV9wYXJ0aWFsKGJ1ZmYsIGxlbiwgMCkpOworfQorCisjZW5kaWYgLyogX1MzOTBfQ0hFQ0tTVU1fSCAqLworCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvY2lvLmggYi9pbmNsdWRlL2FzbS1zMzkwL2Npby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4OWNmNTYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL2Npby5oCkBAIC0wLDAgKzEsMjgxIEBACisvKgorICogIGluY2x1ZGUvYXNtLXMzOTAvY2lvLmgKKyAqICBpbmNsdWRlL2FzbS1zMzkweC9jaW8uaAorICoKKyAqIENvbW1vbiBpbnRlcmZhY2UgZm9yIEkvTyBvbiBTLzM5MAorICovCisjaWZuZGVmIF9BU01fUzM5MF9DSU9fSF8KKyNkZWZpbmUgX0FTTV9TMzkwX0NJT19IXworCisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKworI2lmZGVmIF9fS0VSTkVMX18KKworI2RlZmluZSBMUE1fQU5ZUEFUSCAweGZmCisKKy8qCisgKiBzdWJjaGFubmVsIHN0YXR1cyB3b3JkCisgKi8KK3N0cnVjdCBzY3N3IHsKKwlfX3UzMiBrZXkgIDogNDsJCS8qIHN1YmNoYW5uZWwga2V5ICovCisJX191MzIgc2N0bCA6IDE7IAkvKiBzdXNwZW5kIGNvbnRyb2wgKi8KKwlfX3UzMiBlc3dmIDogMTsgCS8qIEVTVyBmb3JtYXQgKi8KKwlfX3UzMiBjYyAgIDogMjsgCS8qIGRlZmVycmVkIGNvbmRpdGlvbiBjb2RlICovCisJX191MzIgZm10ICA6IDE7IAkvKiBmb3JtYXQgKi8KKwlfX3UzMiBwZmNoIDogMTsgCS8qIHByZWZldGNoICovCisJX191MzIgaXNpYyA6IDE7IAkvKiBpbml0aWFsLXN0YXR1cyBpbnRlcnJ1cHRpb24gY29udHJvbCAqLworCV9fdTMyIGFsY2MgOiAxOyAJLyogYWRkcmVzcy1saW1pdCBjaGVja2luZyBjb250cm9sICovCisJX191MzIgc3NpICA6IDE7IAkvKiBzdXByZXNzLXN1c3BlbmRlZCBpbnRlcnJ1cHRpb24gKi8KKwlfX3UzMiB6Y2MgIDogMTsgCS8qIHplcm8gY29uZGl0aW9uIGNvZGUgKi8KKwlfX3UzMiBlY3RsIDogMTsgCS8qIGV4dGVuZGVkIGNvbnRyb2wgKi8KKwlfX3UzMiBwbm8gIDogMTsJICAgIAkvKiBwYXRoIG5vdCBvcGVyYXRpb25hbCAqLworCV9fdTMyIHJlcyAgOiAxOwkgICAgCS8qIHJlc2VydmVkICovCisJX191MzIgZmN0bCA6IDM7CSAgICAJLyogZnVuY3Rpb24gY29udHJvbCAqLworCV9fdTMyIGFjdGwgOiA3OwkgICAgCS8qIGFjdGl2aXR5IGNvbnRyb2wgKi8KKwlfX3UzMiBzdGN0bCA6IDU7ICAgIAkvKiBzdGF0dXMgY29udHJvbCAqLworCV9fdTMyIGNwYTsJICAgIAkvKiBjaGFubmVsIHByb2dyYW0gYWRkcmVzcyAqLworCV9fdTMyIGRzdGF0IDogODsgICAgCS8qIGRldmljZSBzdGF0dXMgKi8KKwlfX3UzMiBjc3RhdCA6IDg7ICAgIAkvKiBzdWJjaGFubmVsIHN0YXR1cyAqLworCV9fdTMyIGNvdW50IDogMTY7ICAgCS8qIHJlc2lkdWFsIGNvdW50ICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2RlZmluZSBTQ1NXX0ZDVExfQ0xFQVJfRlVOQwkgMHgxCisjZGVmaW5lIFNDU1dfRkNUTF9IQUxUX0ZVTkMJIDB4MgorI2RlZmluZSBTQ1NXX0ZDVExfU1RBUlRfRlVOQwkgMHg0CisKKyNkZWZpbmUgU0NTV19BQ1RMX1NVU1BFTkRFRAkgMHgxCisjZGVmaW5lIFNDU1dfQUNUTF9ERVZBQ1QJIDB4MgorI2RlZmluZSBTQ1NXX0FDVExfU0NIQUNUCSAweDQKKyNkZWZpbmUgU0NTV19BQ1RMX0NMRUFSX1BFTkQJIDB4OAorI2RlZmluZSBTQ1NXX0FDVExfSEFMVF9QRU5ECSAweDEwCisjZGVmaW5lIFNDU1dfQUNUTF9TVEFSVF9QRU5ECSAweDIwCisjZGVmaW5lIFNDU1dfQUNUTF9SRVNVTUVfUEVORAkgMHg0MAorCisjZGVmaW5lIFNDU1dfU1RDVExfU1RBVFVTX1BFTkQJIDB4MQorI2RlZmluZSBTQ1NXX1NUQ1RMX1NFQ19TVEFUVVMJIDB4MgorI2RlZmluZSBTQ1NXX1NUQ1RMX1BSSU1fU1RBVFVTCSAweDQKKyNkZWZpbmUgU0NTV19TVENUTF9JTlRFUl9TVEFUVVMJIDB4OAorI2RlZmluZSBTQ1NXX1NUQ1RMX0FMRVJUX1NUQVRVUwkgMHgxMAorCisjZGVmaW5lIERFVl9TVEFUX0FUVEVOVElPTgkgMHg4MAorI2RlZmluZSBERVZfU1RBVF9TVEFUX01PRAkgMHg0MAorI2RlZmluZSBERVZfU1RBVF9DVV9FTkQJCSAweDIwCisjZGVmaW5lIERFVl9TVEFUX0JVU1kJCSAweDEwCisjZGVmaW5lIERFVl9TVEFUX0NITl9FTkQJIDB4MDgKKyNkZWZpbmUgREVWX1NUQVRfREVWX0VORAkgMHgwNAorI2RlZmluZSBERVZfU1RBVF9VTklUX0NIRUNLCSAweDAyCisjZGVmaW5lIERFVl9TVEFUX1VOSVRfRVhDRVAJIDB4MDEKKworI2RlZmluZSBTQ0hOX1NUQVRfUENJCQkgMHg4MAorI2RlZmluZSBTQ0hOX1NUQVRfSU5DT1JSX0xFTgkgMHg0MAorI2RlZmluZSBTQ0hOX1NUQVRfUFJPR19DSEVDSwkgMHgyMAorI2RlZmluZSBTQ0hOX1NUQVRfUFJPVF9DSEVDSwkgMHgxMAorI2RlZmluZSBTQ0hOX1NUQVRfQ0hOX0RBVEFfQ0hLCSAweDA4CisjZGVmaW5lIFNDSE5fU1RBVF9DSE5fQ1RSTF9DSEsJIDB4MDQKKyNkZWZpbmUgU0NITl9TVEFUX0lOVEZfQ1RSTF9DSEsJIDB4MDIKKyNkZWZpbmUgU0NITl9TVEFUX0NIQUlOX0NIRUNLCSAweDAxCisKKy8qCisgKiBhcmNoaXRlY3R1cmVkIHZhbHVlcyBmb3IgZmlyc3Qgc2Vuc2UgYnl0ZQorICovCisjZGVmaW5lIFNOUzBfQ01EX1JFSkVDVAkJMHg4MAorI2RlZmluZSBTTlNfQ01EX1JFSkVDVAkJU05TMF9DTURfUkVKRUMKKyNkZWZpbmUgU05TMF9JTlRFUlZFTlRJT05fUkVRCTB4NDAKKyNkZWZpbmUgU05TMF9CVVNfT1VUX0NIRUNLCTB4MjAKKyNkZWZpbmUgU05TMF9FUVVJUE1FTlRfQ0hFQ0sJMHgxMAorI2RlZmluZSBTTlMwX0RBVEFfQ0hFQ0sJCTB4MDgKKyNkZWZpbmUgU05TMF9PVkVSUlVOCQkweDA0CisjZGVmaW5lIFNOUzBfSU5DT01QTF9ET01BSU4JMHgwMQorCisvKgorICogYXJjaGl0ZWN0dXJlZCB2YWx1ZXMgZm9yIHNlY29uZCBzZW5zZSBieXRlCisgKi8KKyNkZWZpbmUgU05TMV9QRVJNX0VSUgkJMHg4MAorI2RlZmluZSBTTlMxX0lOVl9UUkFDS19GT1JNQVQJMHg0MAorI2RlZmluZSBTTlMxX0VPQwkJMHgyMAorI2RlZmluZSBTTlMxX01FU1NBR0VfVE9fT1BFUgkweDEwCisjZGVmaW5lIFNOUzFfTk9fUkVDX0ZPVU5ECTB4MDgKKyNkZWZpbmUgU05TMV9GSUxFX1BST1RFQ1RFRAkweDA0CisjZGVmaW5lIFNOUzFfV1JJVEVfSU5ISUJJVEVECTB4MDIKKyNkZWZpbmUgU05TMV9JTlBSRUNJU0VfRU5ECTB4MDEKKworLyoKKyAqIGFyY2hpdGVjdHVyZWQgdmFsdWVzIGZvciB0aGlyZCBzZW5zZSBieXRlCisgKi8KKyNkZWZpbmUgU05TMl9SRVFfSU5IX1dSSVRFCTB4ODAKKyNkZWZpbmUgU05TMl9DT1JSRUNUQUJMRQkweDQwCisjZGVmaW5lIFNOUzJfRklSU1RfTE9HX0VSUgkweDIwCisjZGVmaW5lIFNOUzJfRU5WX0RBVEFfUFJFU0VOVAkweDEwCisjZGVmaW5lIFNOUzJfSU5QUkVDSVNFX0VORAkweDA0CisKK3N0cnVjdCBjY3cxIHsKKwlfX3U4ICBjbWRfY29kZTsJCS8qIGNvbW1hbmQgY29kZSAqLworCV9fdTggIGZsYWdzOyAgIAkJLyogZmxhZ3MsIGxpa2UgSURBIGFkZHJlc3NpbmcsIGV0Yy4gKi8KKwlfX3UxNiBjb3VudDsgICAJCS8qIGJ5dGUgY291bnQgKi8KKwlfX3UzMiBjZGE7ICAgICAJCS8qIGRhdGEgYWRkcmVzcyAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkLGFsaWduZWQoOCkpKTsKKworI2RlZmluZSBDQ1dfRkxBR19EQwkJMHg4MAorI2RlZmluZSBDQ1dfRkxBR19DQwkJMHg0MAorI2RlZmluZSBDQ1dfRkxBR19TTEkJCTB4MjAKKyNkZWZpbmUgQ0NXX0ZMQUdfU0tJUAkJMHgxMAorI2RlZmluZSBDQ1dfRkxBR19QQ0kJCTB4MDgKKyNkZWZpbmUgQ0NXX0ZMQUdfSURBCQkweDA0CisjZGVmaW5lIENDV19GTEFHX1NVU1BFTkQJMHgwMgorCisjZGVmaW5lIENDV19DTURfUkVBRF9JUEwJMHgwMgorI2RlZmluZSBDQ1dfQ01EX05PT1AJCTB4MDMKKyNkZWZpbmUgQ0NXX0NNRF9CQVNJQ19TRU5TRQkweDA0CisjZGVmaW5lIENDV19DTURfVElDCQkweDA4CisjZGVmaW5lIENDV19DTURfU1RMQ0sgICAgICAgICAgIDB4MTQKKyNkZWZpbmUgQ0NXX0NNRF9TRU5TRV9QR0lECTB4MzQKKyNkZWZpbmUgQ0NXX0NNRF9TVVNQRU5EX1JFQ09OTgkweDVCCisjZGVmaW5lIENDV19DTURfUkRDCQkweDY0CisjZGVmaW5lIENDV19DTURfUkVMRUFTRQkJMHg5NAorI2RlZmluZSBDQ1dfQ01EX1NFVF9QR0lECTB4QUYKKyNkZWZpbmUgQ0NXX0NNRF9TRU5TRV9JRAkweEU0CisjZGVmaW5lIENDV19DTURfRENUTAkJMHhGMworCisjZGVmaW5lIFNFTlNFX01BWF9DT1VOVAkJMHgyMAorCitzdHJ1Y3QgZXJ3IHsKKwlfX3UzMiByZXMwICA6IDM7ICAJLyogcmVzZXJ2ZWQgKi8KKwlfX3UzMiBhdXRoICA6IDE7CS8qIEF1dGhvcml6YXRpb24gY2hlY2sgKi8KKwlfX3UzMiBwdnJmICA6IDE7ICAJLyogcGF0aC12ZXJpZmljYXRpb24tcmVxdWlyZWQgZmxhZyAqLworCV9fdTMyIGNwdCAgIDogMTsgIAkvKiBjaGFubmVsLXBhdGggdGltZW91dCAqLworCV9fdTMyIGZzYXZmIDogMTsgIAkvKiBGYWlsaW5nIHN0b3JhZ2UgYWRkcmVzcyB2YWxpZGl0eSBmbGFnICovCisJX191MzIgY29ucyAgOiAxOyAgCS8qIGNvbmN1cnJlbnQtc2Vuc2UgKi8KKwlfX3UzMiBzY2F2ZiA6IDE7CS8qIFNlY29uZGFyeSBjY3cgYWRkcmVzcyB2YWxpZGl0eSBmbGFnICovCisJX191MzIgZnNhZiAgOiAxOwkvKiBGYWlsaW5nIHN0b3JhZ2UgYWRkcmVzcyBmb3JtYXQgKi8KKwlfX3UzMiBzY250ICA6IDY7ICAJLyogc2Vuc2UgY291bnQgaWYgY29ucyA9PSAxICovCisJX191MzIgcmVzMTYgOiAxNjsgCS8qIHJlc2VydmVkICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyoKKyAqIHN1YmNoYW5uZWwgbG9nb3V0IGFyZWEKKyAqLworc3RydWN0IHN1YmxvZyB7CisJX191MzIgcmVzMCAgOiAxOyAgCS8qIHJlc2VydmVkICovCisJX191MzIgZXNmICAgOiA3OyAgCS8qIGV4dGVuZGVkIHN0YXR1cyBmbGFncyAqLworCV9fdTMyIGxwdW0gIDogODsgIAkvKiBsYXN0IHBhdGggdXNlZCBtYXNrICovCisJX191MzIgYXJlcCAgOiAxOyAgCS8qIGFuY2lsbGFyeSByZXBvcnQgKi8KKwlfX3UzMiBmdmYgICA6IDU7ICAJLyogZmllbGQtdmFsaWRpdHkgZmxhZ3MgKi8KKwlfX3UzMiBzYWNjICA6IDI7ICAJLyogc3RvcmFnZSBhY2Nlc3MgY29kZSAqLworCV9fdTMyIHRlcm1jIDogMjsgIAkvKiB0ZXJtaW5hdGlvbiBjb2RlICovCisJX191MzIgZGV2c2MgOiAxOyAgCS8qIGRldmljZS1zdGF0dXMgY2hlY2sgKi8KKwlfX3UzMiBzZXJyICA6IDE7ICAJLyogc2Vjb25kYXJ5IGVycm9yICovCisJX191MzIgaW9lcnIgOiAxOyAgCS8qIGkvby1lcnJvciBhbGVydCAqLworCV9fdTMyIHNlcWMgIDogMzsgIAkvKiBzZXF1ZW5jZSBjb2RlICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyoKKyAqIEZvcm1hdCAwIEV4dGVuZGVkIFN0YXR1cyBXb3JkIChFU1cpCisgKi8KK3N0cnVjdCBlc3cwIHsKKwlzdHJ1Y3Qgc3VibG9nIHN1YmxvZzsJLyogc3ViY2hhbm5lbCBsb2dvdXQgKi8KKwlzdHJ1Y3QgZXJ3IGVydzsJICAgIAkvKiBleHRlbmRlZCByZXBvcnQgd29yZCAqLworCV9fdTMyICBmYWRkclsyXTsgICAgCS8qIGZhaWxpbmcgc3RvcmFnZSBhZGRyZXNzICovCisJX191MzIgIHNhZGRyOyAgCQkvKiBzZWNvbmRhcnkgY2N3IGFkZHJlc3MgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKgorICogRm9ybWF0IDEgRXh0ZW5kZWQgU3RhdHVzIFdvcmQgKEVTVykKKyAqLworc3RydWN0IGVzdzEgeworCV9fdTggIHplcm8wOwkJLyogcmVzZXJ2ZWQgemVyb3MgKi8KKwlfX3U4ICBscHVtOwkJLyogbGFzdCBwYXRoIHVzZWQgbWFzayAqLworCV9fdTE2IHplcm8xNjsJCS8qIHJlc2VydmVkIHplcm9zICovCisJc3RydWN0IGVydyBlcnc7CQkvKiBleHRlbmRlZCByZXBvcnQgd29yZCAqLworCV9fdTMyIHplcm9zWzNdOyAJLyogMiBmdWxsd29yZHMgb2YgemVyb3MgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKgorICogRm9ybWF0IDIgRXh0ZW5kZWQgU3RhdHVzIFdvcmQgKEVTVykKKyAqLworc3RydWN0IGVzdzIgeworCV9fdTggIHplcm8wOwkJLyogcmVzZXJ2ZWQgemVyb3MgKi8KKwlfX3U4ICBscHVtOwkJLyogbGFzdCBwYXRoIHVzZWQgbWFzayAqLworCV9fdTE2IGRjdGk7CQkvKiBkZXZpY2UtY29ubmVjdC10aW1lIGludGVydmFsICovCisJc3RydWN0IGVydyBlcnc7CQkvKiBleHRlbmRlZCByZXBvcnQgd29yZCAqLworCV9fdTMyIHplcm9zWzNdOyAJLyogMiBmdWxsd29yZHMgb2YgemVyb3MgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKgorICogRm9ybWF0IDMgRXh0ZW5kZWQgU3RhdHVzIFdvcmQgKEVTVykKKyAqLworc3RydWN0IGVzdzMgeworCV9fdTggIHplcm8wOwkJLyogcmVzZXJ2ZWQgemVyb3MgKi8KKwlfX3U4ICBscHVtOwkJLyogbGFzdCBwYXRoIHVzZWQgbWFzayAqLworCV9fdTE2IHJlczsJCS8qIHJlc2VydmVkICovCisJc3RydWN0IGVydyBlcnc7CQkvKiBleHRlbmRlZCByZXBvcnQgd29yZCAqLworCV9fdTMyIHplcm9zWzNdOyAJLyogMiBmdWxsd29yZHMgb2YgemVyb3MgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKgorICogaW50ZXJydXB0aW9uIHJlc3BvbnNlIGJsb2NrCisgKi8KK3N0cnVjdCBpcmIgeworCXN0cnVjdCBzY3N3IHNjc3c7CS8qIHN1YmNoYW5uZWwgc3RhdHVzIHdvcmQgKi8KKwl1bmlvbiB7CQkJLyogZXh0ZW5kZWQgc3RhdHVzIHdvcmQsIDQgZm9ybWF0cyAqLworCQlzdHJ1Y3QgZXN3MCBlc3cwOworCQlzdHJ1Y3QgZXN3MSBlc3cxOworCQlzdHJ1Y3QgZXN3MiBlc3cyOworCQlzdHJ1Y3QgZXN3MyBlc3czOworCX0gZXN3OworCV9fdTggICBlY3dbMzJdOwkJLyogZXh0ZW5kZWQgY29udHJvbCB3b3JkICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQsYWxpZ25lZCg0KSkpOworCisvKgorICogY29tbWFuZCBpbmZvcm1hdGlvbiB3b3JkICAoQ0lXKSBsYXlvdXQKKyAqLworc3RydWN0IGNpdyB7CisJX191MzIgZXQgICAgICAgOiAgMjsgCS8qIGVudHJ5IHR5cGUgKi8KKwlfX3UzMiByZXNlcnZlZCA6ICAyOyAJLyogcmVzZXJ2ZWQgKi8KKwlfX3UzMiBjdCAgICAgICA6ICA0OyAJLyogY29tbWFuZCB0eXBlICovCisJX191MzIgY21kICAgICAgOiAgODsgCS8qIGNvbW1hbmQgKi8KKwlfX3UzMiBjb3VudCAgICA6IDE2OyAJLyogY291biAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgQ0lXX1RZUEVfUkNECTB4MCAgICAJLyogcmVhZCBjb25maWd1cmF0aW9uIGRhdGEgKi8KKyNkZWZpbmUgQ0lXX1RZUEVfU0lJCTB4MSAgICAJLyogc2V0IGludGVyZmFjZSBpZGVudGlmaWVyICovCisjZGVmaW5lIENJV19UWVBFX1JOSQkweDIgICAgCS8qIHJlYWQgbm9kZSBpZGVudGlmaWVyICovCisKKy8qCisgKiBGbGFncyB1c2VkIGFzIGlucHV0IHBhcmFtZXRlcnMgZm9yIGRvX0lPKCkKKyAqLworI2RlZmluZSBET0lPX0FMTE9XX1NVU1BFTkQJIDB4MDAwMSAvKiBhbGxvdyBmb3IgY2hhbm5lbCBwcm9nLiBzdXNwZW5kICovCisjZGVmaW5lIERPSU9fREVOWV9QUkVGRVRDSAkgMHgwMDAyIC8qIGRvbid0IGFsbG93IGZvciBDQ1cgcHJlZmV0Y2ggKi8KKyNkZWZpbmUgRE9JT19TVVBQUkVTU19JTlRFUgkgMHgwMDA0IC8qIHN1cHByZXNzIGludGVybWVkaWF0ZSBpbnRlci4gKi8KKwkJCQkJLyogLi4uIGZvciBzdXNwZW5kZWQgQ0NXcyAqLworLyogRGV2aWNlIG9yIHN1YmNoYW5uZWwgZ29uZS4gKi8KKyNkZWZpbmUgQ0lPX0dPTkUgICAgICAgMHgwMDAxCisvKiBObyBwYXRoIHRvIGRldmljZS4gKi8KKyNkZWZpbmUgQ0lPX05PX1BBVEggICAgMHgwMDAyCisvKiBEZXZpY2UgaGFzIGFwcGVhcmVkLiAqLworI2RlZmluZSBDSU9fT1BFUiAgICAgICAweDAwMDQKKy8qIFNpY2sgcmV2YWxpZGF0aW9uIG9mIGRldmljZS4gKi8KKyNkZWZpbmUgQ0lPX1JFVkFMSURBVEUgMHgwMDA4CisKK3N0cnVjdCBkaWFnMjEwIHsKKwlfX3UxNiB2cmRjZHZubyA6IDE2OyAgIC8qIGRldmljZSBudW1iZXIgKGlucHV0KSAqLworCV9fdTE2IHZyZGNsZW4gIDogMTY7ICAgLyogZGF0YSBibG9jayBsZW5ndGggKGlucHV0KSAqLworCV9fdTMyIHZyZGN2Y2xhIDogODsgICAgLyogdmlydHVhbCBkZXZpY2UgY2xhc3MgKG91dHB1dCkgKi8KKwlfX3UzMiB2cmRjdnR5cCA6IDg7ICAgIC8qIHZpcnR1YWwgZGV2aWNlIHR5cGUgKG91dHB1dCkgKi8KKwlfX3UzMiB2cmRjdnN0YSA6IDg7ICAgIC8qIHZpcnR1YWwgZGV2aWNlIHN0YXR1cyAob3V0cHV0KSAqLworCV9fdTMyIHZyZGN2ZmxhIDogODsgICAgLyogdmlydHVhbCBkZXZpY2UgZmxhZ3MgKG91dHB1dCkgKi8KKwlfX3UzMiB2cmRjcmNjbCA6IDg7ICAgIC8qIHJlYWwgZGV2aWNlIGNsYXNzIChvdXRwdXQpICovCisJX191MzIgdnJkY2NydHkgOiA4OyAgICAvKiByZWFsIGRldmljZSB0eXBlIChvdXRwdXQpICovCisJX191MzIgdnJkY2NybWQgOiA4OyAgICAvKiByZWFsIGRldmljZSBtb2RlbCAob3V0cHV0KSAqLworCV9fdTMyIHZyZGNjcmZ0IDogODsgICAgLyogcmVhbCBkZXZpY2UgZmVhdHVyZSAob3V0cHV0KSAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkLGFsaWduZWQoNCkpKTsKKworZXh0ZXJuIGludCBkaWFnMjEwKHN0cnVjdCBkaWFnMjEwICphZGRyKTsKKworZXh0ZXJuIHZvaWQgd2FpdF9jb25zX2Rldih2b2lkKTsKKworZXh0ZXJuIHZvaWQgY2xlYXJfYWxsX3N1YmNoYW5uZWxzKHZvaWQpOworCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL2NtYi5oIGIvaW5jbHVkZS9hc20tczM5MC9jbWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmZlMmJkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tczM5MC9jbWIuaApAQCAtMCwwICsxLDk4IEBACisjaWZuZGVmIFMzOTBfQ01CX0gKKyNkZWZpbmUgUzM5MF9DTUJfSAorLyoqCisgKiBzdHJ1Y3QgY21iZGF0YSAtLSBjaGFubmVsIG1lYXN1cmVtZW50IGJsb2NrIGRhdGEgZm9yIHVzZXIgc3BhY2UKKyAqCisgKiBAc2l6ZToJc2l6ZSBvZiB0aGUgc3RvcmVkIGRhdGEKKyAqIEBzc2NoX3JzY2hfY291bnQ6IFhYWAorICogQHNhbXBsZV9jb3VudDoKKyAqIEBkZXZpY2VfY29ubmVjdF90aW1lOgorICogQGZ1bmN0aW9uX3BlbmRpbmdfdGltZToKKyAqIEBkZXZpY2VfZGlzY29ubmVjdF90aW1lOgorICogQGNvbnRyb2xfdW5pdF9xdWV1aW5nX3RpbWU6CisgKiBAZGV2aWNlX2FjdGl2ZV9vbmx5X3RpbWU6CisgKiBAZGV2aWNlX2J1c3lfdGltZToKKyAqIEBpbml0aWFsX2NvbW1hbmRfcmVzcG9uc2VfdGltZToKKyAqCisgKiBhbGwgdmFsdWVzIGFyZSBzdG9yZWQgYXMgNjQgYml0IGZvciBzaW1wbGljaXR5LCBlc3BlY2lhbGx5CisgKiBpbiAzMiBiaXQgZW11bGF0aW9uIG1vZGUuIEFsbCB0aW1lIHZhbHVlcyBhcmUgbm9ybWFsaXplZCB0bworICogbmFub3NlY29uZHMuCisgKiBDdXJyZW50bHksIHR3byBmb3JtYXRzIGFyZSBrbm93biwgd2hpY2ggZGlmZmVyIGJ5IHRoZSBzaXplIG9mCisgKiB0aGlzIHN0cnVjdHVyZSwgaS5lLiB0aGUgbGFzdCB0d28gbWVtYmVycyBhcmUgb25seSBzZXQgd2hlbgorICogdGhlIGV4dGVuZGVkIGNoYW5uZWwgbWVhc3VyZW1lbnQgZmFjaWxpdHkgKGZpcnN0IHNoaXBwZWQgaW4KKyAqIHo5OTAgbWFjaGluZXMpIGlzIGFjdGl2YXRlZC4KKyAqIFBvdGVudGlhbGx5LCBtb3JlIGZpZWxkcyBjb3VsZCBiZSBhZGRlZCwgd2hpY2ggcmVzdWx0cyBpbiBhCisgKiBuZXcgaW9jdGwgbnVtYmVyLgorICoqLworc3RydWN0IGNtYmRhdGEgeworCV9fdTY0IHNpemU7CisJX191NjQgZWxhcHNlZF90aW1lOworIC8qIGJhc2ljIGFuZCBleGVuZGVkIGZvcm1hdDogKi8KKwlfX3U2NCBzc2NoX3JzY2hfY291bnQ7CisJX191NjQgc2FtcGxlX2NvdW50OworCV9fdTY0IGRldmljZV9jb25uZWN0X3RpbWU7CisJX191NjQgZnVuY3Rpb25fcGVuZGluZ190aW1lOworCV9fdTY0IGRldmljZV9kaXNjb25uZWN0X3RpbWU7CisJX191NjQgY29udHJvbF91bml0X3F1ZXVpbmdfdGltZTsKKwlfX3U2NCBkZXZpY2VfYWN0aXZlX29ubHlfdGltZTsKKyAvKiBleHRlbmRlZCBmb3JtYXQgb25seTogKi8KKwlfX3U2NCBkZXZpY2VfYnVzeV90aW1lOworCV9fdTY0IGluaXRpYWxfY29tbWFuZF9yZXNwb25zZV90aW1lOworfTsKKworLyogZW5hYmxlIGNoYW5uZWwgbWVhc3VyZW1lbnQgKi8KKyNkZWZpbmUgQklPREFTRENNRkVOQUJMRQlfSU8oREFTRF9JT0NUTF9MRVRURVIsMzIpCisvKiBlbmFibGUgY2hhbm5lbCBtZWFzdXJlbWVudCAqLworI2RlZmluZSBCSU9EQVNEQ01GRElTQUJMRQlfSU8oREFTRF9JT0NUTF9MRVRURVIsMzMpCisvKiByZXNldCBjaGFubmVsIG1lYXN1cmVtZW50IGJsb2NrICovCisjZGVmaW5lIEJJT0RBU0RSRVNFVENNQgkJX0lPKERBU0RfSU9DVExfTEVUVEVSLDM0KQorLyogcmVhZCBjaGFubmVsIG1lYXN1cmVtZW50IGRhdGEgKi8KKyNkZWZpbmUgQklPREFTRFJFQURDTUIJCV9JT1dSKERBU0RfSU9DVExfTEVUVEVSLDMyLHU2NCkKKy8qIHJlYWQgY2hhbm5lbCBtZWFzdXJlbWVudCBkYXRhICovCisjZGVmaW5lIEJJT0RBU0RSRUFEQUxMQ01CCV9JT1dSKERBU0RfSU9DVExfTEVUVEVSLDMzLHN0cnVjdCBjbWJkYXRhKQorCisjaWZkZWYgX19LRVJORUxfXworCisvKioKKyAqIGVuYWJsZV9jbWYoKSAtIHN3aXRjaCBvbiB0aGUgY2hhbm5lbCBtZWFzdXJlbWVudCBmb3IgYSBzcGVjaWZpYyBkZXZpY2UKKyAqICBAY2RldjoJVGhlIGNjdyBkZXZpY2UgdG8gYmUgZW5hYmxlZAorICogIHJldHVybnMgMCBmb3Igc3VjY2VzcyBvciBhIG5lZ2F0aXZlIGVycm9yIHZhbHVlLgorICoKKyAqICBDb250ZXh0OgorICogICAgbm9uLWF0b21pYworICoqLworZXh0ZXJuIGludCBlbmFibGVfY21mKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KTsKKworLyoqCisgKiBkaXNhYmxlX2NtZigpIC0gc3dpdGNoIG9mZiB0aGUgY2hhbm5lbCBtZWFzdXJlbWVudCBmb3IgYSBzcGVjaWZpYyBkZXZpY2UKKyAqICBAY2RldjoJVGhlIGNjdyBkZXZpY2UgdG8gYmUgZGlzYWJsZWQKKyAqICByZXR1cm5zIDAgZm9yIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciB2YWx1ZS4KKyAqCisgKiAgQ29udGV4dDoKKyAqICAgIG5vbi1hdG9taWMKKyAqKi8KK2V4dGVybiBpbnQgZGlzYWJsZV9jbWYoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYpOworCisvKioKKyAqIGNtZl9yZWFkKCkgLSByZWFkIG9uZSB2YWx1ZSBmcm9tIHRoZSBjdXJyZW50IGNoYW5uZWwgbWVhc3VyZW1lbnQgYmxvY2sKKyAqIEBjbWY6CXRoZSBjaGFubmVsIHRvIGJlIHJlYWQKKyAqIEBpbmRleDoJdGhlIG5hbWUgb2YgdGhlIHZhbHVlIHRoYXQgaXMgcmVhZAorICoKKyAqICBDb250ZXh0OgorICogICAgYW55CisgKiovCisKK2V4dGVybiB1NjQgY21mX3JlYWQoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYsIGludCBpbmRleCk7CisvKioKKyAqIGNtZl9yZWFkYWxsKCkgLSByZWFkIG9uZSB2YWx1ZSBmcm9tIHRoZSBjdXJyZW50IGNoYW5uZWwgbWVhc3VyZW1lbnQgYmxvY2sKKyAqIEBjbWY6CXRoZSBjaGFubmVsIHRvIGJlIHJlYWQKKyAqIEBkYXRhOglhIHBvaW50ZXIgdG8gYSBkYXRhIGJsb2NrIHRoYXQgd2lsbCBiZSBmaWxsZWQKKyAqCisgKiAgQ29udGV4dDoKKyAqICAgIGFueQorICoqLworZXh0ZXJuIGludCBjbWZfcmVhZGFsbChzdHJ1Y3QgY2N3X2RldmljZSAqY2Rldiwgc3RydWN0IGNtYmRhdGEqZGF0YSk7CitleHRlcm4gdm9pZCBjbWZfcmVzZXQoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYpOworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIFMzOTBfQ01CX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvY29tcGF0LmggYi9pbmNsdWRlL2FzbS1zMzkwL2NvbXBhdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmOGY1NDQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL2NvbXBhdC5oCkBAIC0wLDAgKzEsMTk4IEBACisjaWZuZGVmIF9BU01fUzM5MFhfQ09NUEFUX0gKKyNkZWZpbmUgX0FTTV9TMzkwWF9DT01QQVRfSAorLyoKKyAqIEFyY2hpdGVjdHVyZSBzcGVjaWZpYyBjb21wYXRpYmlsaXR5IHR5cGVzCisgKi8KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisKKyNkZWZpbmUgQ09NUEFUX1VTRVJfSFoJMTAwCisKK3R5cGVkZWYgdTMyCQljb21wYXRfc2l6ZV90OwordHlwZWRlZiBzMzIJCWNvbXBhdF9zc2l6ZV90OwordHlwZWRlZiBzMzIJCWNvbXBhdF90aW1lX3Q7Cit0eXBlZGVmIHMzMgkJY29tcGF0X2Nsb2NrX3Q7Cit0eXBlZGVmIHMzMgkJY29tcGF0X3BpZF90OwordHlwZWRlZiB1MTYJCWNvbXBhdF91aWRfdDsKK3R5cGVkZWYgdTE2CQljb21wYXRfZ2lkX3Q7Cit0eXBlZGVmIHUzMgkJY29tcGF0X3VpZDMyX3Q7Cit0eXBlZGVmIHUzMgkJY29tcGF0X2dpZDMyX3Q7Cit0eXBlZGVmIHUxNgkJY29tcGF0X21vZGVfdDsKK3R5cGVkZWYgdTMyCQljb21wYXRfaW5vX3Q7Cit0eXBlZGVmIHUxNgkJY29tcGF0X2Rldl90OwordHlwZWRlZiBzMzIJCWNvbXBhdF9vZmZfdDsKK3R5cGVkZWYgczY0CQljb21wYXRfbG9mZl90OwordHlwZWRlZiB1MTYJCWNvbXBhdF9ubGlua190OwordHlwZWRlZiB1MTYJCWNvbXBhdF9pcGNfcGlkX3Q7Cit0eXBlZGVmIHMzMgkJY29tcGF0X2RhZGRyX3Q7Cit0eXBlZGVmIHUzMgkJY29tcGF0X2NhZGRyX3Q7Cit0eXBlZGVmIF9fa2VybmVsX2ZzaWRfdAljb21wYXRfZnNpZF90OwordHlwZWRlZiBzMzIJCWNvbXBhdF9rZXlfdDsKK3R5cGVkZWYgczMyCQljb21wYXRfdGltZXJfdDsKKwordHlwZWRlZiBzMzIJCWNvbXBhdF9pbnRfdDsKK3R5cGVkZWYgczMyCQljb21wYXRfbG9uZ190OwordHlwZWRlZiB1MzIJCWNvbXBhdF91aW50X3Q7Cit0eXBlZGVmIHUzMgkJY29tcGF0X3Vsb25nX3Q7CisKK3N0cnVjdCBjb21wYXRfdGltZXNwZWMgeworCWNvbXBhdF90aW1lX3QJdHZfc2VjOworCXMzMgkJdHZfbnNlYzsKK307CisKK3N0cnVjdCBjb21wYXRfdGltZXZhbCB7CisJY29tcGF0X3RpbWVfdAl0dl9zZWM7CisJczMyCQl0dl91c2VjOworfTsKKworc3RydWN0IGNvbXBhdF9zdGF0IHsKKwljb21wYXRfZGV2X3QJc3RfZGV2OworCXUxNgkJX19wYWQxOworCWNvbXBhdF9pbm9fdAlzdF9pbm87CisJY29tcGF0X21vZGVfdAlzdF9tb2RlOworCWNvbXBhdF9ubGlua190CXN0X25saW5rOworCWNvbXBhdF91aWRfdAlzdF91aWQ7CisJY29tcGF0X2dpZF90CXN0X2dpZDsKKwljb21wYXRfZGV2X3QJc3RfcmRldjsKKwl1MTYJCV9fcGFkMjsKKwl1MzIJCXN0X3NpemU7CisJdTMyCQlzdF9ibGtzaXplOworCXUzMgkJc3RfYmxvY2tzOworCXUzMgkJc3RfYXRpbWU7CisJdTMyCQlzdF9hdGltZV9uc2VjOworCXUzMgkJc3RfbXRpbWU7CisJdTMyCQlzdF9tdGltZV9uc2VjOworCXUzMgkJc3RfY3RpbWU7CisJdTMyCQlzdF9jdGltZV9uc2VjOworCXUzMgkJX191bnVzZWQ0OworCXUzMgkJX191bnVzZWQ1OworfTsKKworc3RydWN0IGNvbXBhdF9mbG9jayB7CisJc2hvcnQJCWxfdHlwZTsKKwlzaG9ydAkJbF93aGVuY2U7CisJY29tcGF0X29mZl90CWxfc3RhcnQ7CisJY29tcGF0X29mZl90CWxfbGVuOworCWNvbXBhdF9waWRfdAlsX3BpZDsKK307CisKKyNkZWZpbmUgRl9HRVRMSzY0ICAgICAgIDEyCisjZGVmaW5lIEZfU0VUTEs2NCAgICAgICAxMworI2RlZmluZSBGX1NFVExLVzY0ICAgICAgMTQgICAgCisKK3N0cnVjdCBjb21wYXRfZmxvY2s2NCB7CisJc2hvcnQJCWxfdHlwZTsKKwlzaG9ydAkJbF93aGVuY2U7CisJY29tcGF0X2xvZmZfdAlsX3N0YXJ0OworCWNvbXBhdF9sb2ZmX3QJbF9sZW47CisJY29tcGF0X3BpZF90CWxfcGlkOworfTsKKworc3RydWN0IGNvbXBhdF9zdGF0ZnMgeworCXMzMgkJZl90eXBlOworCXMzMgkJZl9ic2l6ZTsKKwlzMzIJCWZfYmxvY2tzOworCXMzMgkJZl9iZnJlZTsKKwlzMzIJCWZfYmF2YWlsOworCXMzMgkJZl9maWxlczsKKwlzMzIJCWZfZmZyZWU7CisJY29tcGF0X2ZzaWRfdAlmX2ZzaWQ7CisJczMyCQlmX25hbWVsZW47CisJczMyCQlmX2Zyc2l6ZTsKKwlzMzIJCWZfc3BhcmVbNl07Cit9OworCisjZGVmaW5lIENPTVBBVF9STElNX09MRF9JTkZJTklUWQkweDdmZmZmZmZmCisjZGVmaW5lIENPTVBBVF9STElNX0lORklOSVRZCQkweGZmZmZmZmZmCisKK3R5cGVkZWYgdTMyCQljb21wYXRfb2xkX3NpZ3NldF90OwkvKiBhdCBsZWFzdCAzMiBiaXRzICovCisKKyNkZWZpbmUgX0NPTVBBVF9OU0lHCQk2NAorI2RlZmluZSBfQ09NUEFUX05TSUdfQlBXCTMyCisKK3R5cGVkZWYgdTMyCQljb21wYXRfc2lnc2V0X3dvcmQ7CisKKyNkZWZpbmUgQ09NUEFUX09GRl9UX01BWAkweDdmZmZmZmZmCisjZGVmaW5lIENPTVBBVF9MT0ZGX1RfTUFYCTB4N2ZmZmZmZmZmZmZmZmZmZkwKKworLyoKKyAqIEEgcG9pbnRlciBwYXNzZWQgaW4gZnJvbSB1c2VyIG1vZGUuIFRoaXMgc2hvdWxkIG5vdAorICogYmUgdXNlZCBmb3Igc3lzY2FsbCBwYXJhbWV0ZXJzLCBqdXN0IGRlY2xhcmUgdGhlbQorICogYXMgcG9pbnRlcnMgYmVjYXVzZSB0aGUgc3lzY2FsbCBlbnRyeSBjb2RlIHdpbGwgaGF2ZQorICogYXBwcm9wcmlhdGVseSBjb212ZXJ0ZWQgdGhlbSBhbHJlYWR5LgorICovCit0eXBlZGVmCXUzMgkJY29tcGF0X3VwdHJfdDsKKworc3RhdGljIGlubGluZSB2b2lkIF9fdXNlciAqY29tcGF0X3B0cihjb21wYXRfdXB0cl90IHVwdHIpCit7CisJcmV0dXJuICh2b2lkIF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKSh1cHRyICYgMHg3ZmZmZmZmZlVMKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fdXNlciAqY29tcGF0X2FsbG9jX3VzZXJfc3BhY2UobG9uZyBsZW4pCit7CisJdW5zaWduZWQgbG9uZyBzdGFjazsKKworCXN0YWNrID0gS1NUS19FU1AoY3VycmVudCk7CisJaWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGXzMxQklUKSkKKwkJc3RhY2sgJj0gMHg3ZmZmZmZmZlVMOworCXJldHVybiAodm9pZCBfX3VzZXIgKikgKHN0YWNrIC0gbGVuKTsKK30KKworc3RydWN0IGNvbXBhdF9pcGM2NF9wZXJtIHsKKwljb21wYXRfa2V5X3Qga2V5OworCWNvbXBhdF91aWQzMl90IHVpZDsKKwljb21wYXRfZ2lkMzJfdCBnaWQ7CisJY29tcGF0X3VpZDMyX3QgY3VpZDsKKwljb21wYXRfZ2lkMzJfdCBjZ2lkOworCWNvbXBhdF9tb2RlX3QgbW9kZTsKKwl1bnNpZ25lZCBzaG9ydCBfX3BhZDE7CisJdW5zaWduZWQgc2hvcnQgc2VxOworCXVuc2lnbmVkIHNob3J0IF9fcGFkMjsKKwl1bnNpZ25lZCBpbnQgX191bnVzZWQxOworCXVuc2lnbmVkIGludCBfX3VudXNlZDI7Cit9OworCitzdHJ1Y3QgY29tcGF0X3NlbWlkNjRfZHMgeworCXN0cnVjdCBjb21wYXRfaXBjNjRfcGVybSBzZW1fcGVybTsKKwljb21wYXRfdGltZV90ICBzZW1fb3RpbWU7CisJY29tcGF0X3Vsb25nX3QgX19wYWQxOworCWNvbXBhdF90aW1lX3QgIHNlbV9jdGltZTsKKwljb21wYXRfdWxvbmdfdCBfX3BhZDI7CisJY29tcGF0X3Vsb25nX3Qgc2VtX25zZW1zOworCWNvbXBhdF91bG9uZ190IF9fdW51c2VkMTsKKwljb21wYXRfdWxvbmdfdCBfX3VudXNlZDI7Cit9OworCitzdHJ1Y3QgY29tcGF0X21zcWlkNjRfZHMgeworCXN0cnVjdCBjb21wYXRfaXBjNjRfcGVybSBtc2dfcGVybTsKKwljb21wYXRfdGltZV90ICAgbXNnX3N0aW1lOworCWNvbXBhdF91bG9uZ190IF9fcGFkMTsKKwljb21wYXRfdGltZV90ICAgbXNnX3J0aW1lOworCWNvbXBhdF91bG9uZ190IF9fcGFkMjsKKwljb21wYXRfdGltZV90ICAgbXNnX2N0aW1lOworCWNvbXBhdF91bG9uZ190IF9fcGFkMzsKKwljb21wYXRfdWxvbmdfdCBtc2dfY2J5dGVzOworCWNvbXBhdF91bG9uZ190IG1zZ19xbnVtOworCWNvbXBhdF91bG9uZ190IG1zZ19xYnl0ZXM7CisJY29tcGF0X3BpZF90ICAgbXNnX2xzcGlkOworCWNvbXBhdF9waWRfdCAgIG1zZ19scnBpZDsKKwljb21wYXRfdWxvbmdfdCBfX3VudXNlZDE7CisJY29tcGF0X3Vsb25nX3QgX191bnVzZWQyOworfTsKKworc3RydWN0IGNvbXBhdF9zaG1pZDY0X2RzIHsKKwlzdHJ1Y3QgY29tcGF0X2lwYzY0X3Blcm0gc2htX3Blcm07CisJY29tcGF0X3NpemVfdCAgc2htX3NlZ3N6OworCWNvbXBhdF90aW1lX3QgIHNobV9hdGltZTsKKwljb21wYXRfdWxvbmdfdCBfX3BhZDE7CisJY29tcGF0X3RpbWVfdCAgc2htX2R0aW1lOworCWNvbXBhdF91bG9uZ190IF9fcGFkMjsKKwljb21wYXRfdGltZV90ICBzaG1fY3RpbWU7CisJY29tcGF0X3Vsb25nX3QgX19wYWQzOworCWNvbXBhdF9waWRfdCAgIHNobV9jcGlkOworCWNvbXBhdF9waWRfdCAgIHNobV9scGlkOworCWNvbXBhdF91bG9uZ190IHNobV9uYXR0Y2g7CisJY29tcGF0X3Vsb25nX3QgX191bnVzZWQxOworCWNvbXBhdF91bG9uZ190IF9fdW51c2VkMjsKK307CisjZW5kaWYgLyogX0FTTV9TMzkwWF9DT01QQVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9jcGNtZC5oIGIvaW5jbHVkZS9hc20tczM5MC9jcGNtZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkMzNjNWRhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tczM5MC9jcGNtZC5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qCisgKiAgYXJjaC9zMzkwL2tlcm5lbC9jcGNtZC5oCisgKgorICogIFMzOTAgdmVyc2lvbgorICogICAgQ29weXJpZ2h0IChDKSAxOTk5IElCTSBEZXV0c2NobGFuZCBFbnR3aWNrbHVuZyBHbWJILCBJQk0gQ29ycG9yYXRpb24KKyAqICAgIEF1dGhvcihzKTogTWFydGluIFNjaHdpZGVmc2t5IChzY2h3aWRlZnNreUBkZS5pYm0uY29tKSwKKyAqICAgICAgICAgICAgICAgQ2hyaXN0aWFuIEJvcm50cmFlZ2VyIChjYm9ybnRyYUBkZS5pYm0uY29tKSwKKyAqLworCisjaWZuZGVmIF9fQ1BDTURfXworI2RlZmluZSBfX0NQQ01EX18KKworLyoKKyAqIHRoZSBjYWxsZXIgb2YgX19jcGNtZCBoYXMgdG8gZW5zdXJlIHRoYXQgdGhlIHJlc3BvbnNlIGJ1ZmZlciBpcyBiZWxvdyAyIEdCCisgKi8KK2V4dGVybiB2b2lkIF9fY3BjbWQoY2hhciAqY21kLCBjaGFyICpyZXNwb25zZSwgaW50IHJsZW4pOworCisjaWZuZGVmIF9fczM5MHhfXworI2RlZmluZSBjcGNtZCBfX2NwY21kCisjZWxzZQorZXh0ZXJuIHZvaWQgY3BjbWQoY2hhciAqY21kLCBjaGFyICpyZXNwb25zZSwgaW50IHJsZW4pOworI2VuZGlmIC8qX19zMzkweF9fKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL2NwdXRpbWUuaCBiL2luY2x1ZGUvYXNtLXMzOTAvY3B1dGltZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiM2VmN2MKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL2NwdXRpbWUuaApAQCAtMCwwICsxLDE3NiBAQAorLyoKKyAqICBpbmNsdWRlL2FzbS1zMzkwL2NwdXRpbWUuaAorICoKKyAqICAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAyMDA0CisgKgorICogIEF1dGhvcjogTWFydGluIFNjaHdpZGVmc2t5IDxzY2h3aWRlZnNreUBkZS5pYm0uY29tPgorICovCisKKyNpZm5kZWYgX1MzOTBfQ1BVVElNRV9ICisjZGVmaW5lIF9TMzkwX0NQVVRJTUVfSAorCisjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CisKKy8qIFdlIHdhbnQgdG8gdXNlIG1pY3JvLXNlY29uZCByZXNvbHV0aW9uLiAqLworCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBjcHV0aW1lX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBjcHV0aW1lNjRfdDsKKworI2lmbmRlZiBfX3MzOTB4X18KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKK19fZGl2KHVuc2lnbmVkIGxvbmcgbG9uZyBuLCB1bnNpZ25lZCBpbnQgYmFzZSkKK3sKKwlyZWdpc3Rlcl9wYWlyIHJwOworCisJcnAucGFpciA9IG4gPj4gMTsKKwlhc20gKCJkciAlMCwlMSIgOiAiK2QiIChycCkgOiAiZCIgKGJhc2UgPj4gMSkpOworCXJldHVybiBycC5zdWJyZWcub2RkOworfQorCisjZWxzZSAvKiBfX3MzOTB4X18gKi8KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKK19fZGl2KHVuc2lnbmVkIGxvbmcgbG9uZyBuLCB1bnNpZ25lZCBpbnQgYmFzZSkKK3sKKwlyZXR1cm4gbiAvIGJhc2U7Cit9CisKKyNlbmRpZiAvKiBfX3MzOTB4X18gKi8KKworI2RlZmluZSBjcHV0aW1lX3plcm8JCQkoMFVMTCkKKyNkZWZpbmUgY3B1dGltZV9tYXgJCQkoKH4wVUwgPj4gMSkgLSAxKQorI2RlZmluZSBjcHV0aW1lX2FkZChfX2EsIF9fYikJCSgoX19hKSArICAoX19iKSkKKyNkZWZpbmUgY3B1dGltZV9zdWIoX19hLCBfX2IpCQkoKF9fYSkgLSAgKF9fYikpCisjZGVmaW5lIGNwdXRpbWVfZGl2KF9fYSwgX19uKSAoewkJXAorCXVuc2lnbmVkIGxvbmcgbG9uZyBfX2RpdiA9IChfX2EpOwlcCisJZG9fZGl2KF9fZGl2LF9fbik7CQkJXAorCV9fZGl2OwkJCQkJXAorfSkKKyNkZWZpbmUgY3B1dGltZV9oYWx2ZShfX2EpCQkoKF9fYSkgPj4gMSkKKyNkZWZpbmUgY3B1dGltZV9lcShfX2EsIF9fYikJCSgoX19hKSA9PSAoX19iKSkKKyNkZWZpbmUgY3B1dGltZV9ndChfX2EsIF9fYikJCSgoX19hKSA+ICAoX19iKSkKKyNkZWZpbmUgY3B1dGltZV9nZShfX2EsIF9fYikJCSgoX19hKSA+PSAoX19iKSkKKyNkZWZpbmUgY3B1dGltZV9sdChfX2EsIF9fYikJCSgoX19hKSA8ICAoX19iKSkKKyNkZWZpbmUgY3B1dGltZV9sZShfX2EsIF9fYikJCSgoX19hKSA8PSAoX19iKSkKKyNkZWZpbmUgY3B1dGltZV90b19qaWZmaWVzKF9fY3QpCShfX2RpdigoX19jdCksIDEwMDAwMDAgLyBIWikpCisjZGVmaW5lIGppZmZpZXNfdG9fY3B1dGltZShfX2h6KQkoKGNwdXRpbWVfdCkoX19oeikgKiAoMTAwMDAwMCAvIEhaKSkKKworI2RlZmluZSBjcHV0aW1lNjRfemVybwkJCSgwVUxMKQorI2RlZmluZSBjcHV0aW1lNjRfYWRkKF9fYSwgX19iKQkJKChfX2EpICsgKF9fYikpCisjZGVmaW5lIGNwdXRpbWVfdG9fY3B1dGltZTY0KF9fY3QpCShfX2N0KQorCitzdGF0aWMgaW5saW5lIHU2NAorY3B1dGltZTY0X3RvX2ppZmZpZXM2NChjcHV0aW1lNjRfdCBjcHV0aW1lKQoreworCWRvX2RpdihjcHV0aW1lLCAxMDAwMDAwIC8gSFopOworCXJldHVybiBjcHV0aW1lOworfQorCisvKgorICogQ29udmVydCBjcHV0aW1lIHRvIG1pbGxpc2Vjb25kcyBhbmQgYmFjay4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKK2NwdXRpbWVfdG9fbXNlY3MoY29uc3QgY3B1dGltZV90IGNwdXRpbWUpCit7CisJcmV0dXJuIF9fZGl2KGNwdXRpbWUsIDEwMDApOworfQorCitzdGF0aWMgaW5saW5lIGNwdXRpbWVfdAorbXNlY3NfdG9fY3B1dGltZShjb25zdCB1bnNpZ25lZCBpbnQgbSkKK3sKKwlyZXR1cm4gKGNwdXRpbWVfdCkgbSAqIDEwMDA7Cit9CisKKy8qCisgKiBDb252ZXJ0IGNwdXRpbWUgdG8gbWlsbGlzZWNvbmRzIGFuZCBiYWNrLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAorY3B1dGltZV90b19zZWNzKGNvbnN0IGNwdXRpbWVfdCBjcHV0aW1lKQoreworCXJldHVybiBfX2RpdihjcHV0aW1lLCAxMDAwMDAwKTsKK30KKworc3RhdGljIGlubGluZSBjcHV0aW1lX3QKK3NlY3NfdG9fY3B1dGltZShjb25zdCB1bnNpZ25lZCBpbnQgcykKK3sKKwlyZXR1cm4gKGNwdXRpbWVfdCkgcyAqIDEwMDAwMDA7Cit9CisKKy8qCisgKiBDb252ZXJ0IGNwdXRpbWUgdG8gdGltZXNwZWMgYW5kIGJhY2suCisgKi8KK3N0YXRpYyBpbmxpbmUgY3B1dGltZV90Cit0aW1lc3BlY190b19jcHV0aW1lKGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqdmFsdWUpCit7CisgICAgICAgIHJldHVybiB2YWx1ZS0+dHZfbnNlYyAvIDEwMDAgKyAodTY0KSB2YWx1ZS0+dHZfc2VjICogMTAwMDAwMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitjcHV0aW1lX3RvX3RpbWVzcGVjKGNvbnN0IGNwdXRpbWVfdCBjcHV0aW1lLCBzdHJ1Y3QgdGltZXNwZWMgKnZhbHVlKQoreworI2lmbmRlZiBfX3MzOTB4X18KKwlyZWdpc3Rlcl9wYWlyIHJwOworCisJcnAucGFpciA9IGNwdXRpbWUgPj4gMTsKKwlhc20gKCJkciAlMCwlMSIgOiAiK2QiIChycCkgOiAiZCIgKDEwMDAwMDAgPj4gMSkpOworCXZhbHVlLT50dl9uc2VjID0gcnAuc3VicmVnLmV2ZW4gKiAxMDAwOworCXZhbHVlLT50dl9zZWMgPSBycC5zdWJyZWcub2RkOworI2Vsc2UKKwl2YWx1ZS0+dHZfbnNlYyA9IChjcHV0aW1lICUgMTAwMDAwMCkgKiAxMDAwOworCXZhbHVlLT50dl9zZWMgPSBjcHV0aW1lIC8gMTAwMDAwMDsKKyNlbmRpZgorfQorCisvKgorICogQ29udmVydCBjcHV0aW1lIHRvIHRpbWV2YWwgYW5kIGJhY2suCisgKiBTaW5jZSBjcHV0aW1lIGFuZCB0aW1ldmFsIGhhdmUgdGhlIHNhbWUgcmVzb2x1dGlvbiAobWljcm9zZWNvbmRzKQorICogdGhpcyBpcyBlYXN5LgorICovCitzdGF0aWMgaW5saW5lIGNwdXRpbWVfdAordGltZXZhbF90b19jcHV0aW1lKGNvbnN0IHN0cnVjdCB0aW1ldmFsICp2YWx1ZSkKK3sKKyAgICAgICAgcmV0dXJuIHZhbHVlLT50dl91c2VjICsgKHU2NCkgdmFsdWUtPnR2X3NlYyAqIDEwMDAwMDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorY3B1dGltZV90b190aW1ldmFsKGNvbnN0IGNwdXRpbWVfdCBjcHV0aW1lLCBzdHJ1Y3QgdGltZXZhbCAqdmFsdWUpCit7CisjaWZuZGVmIF9fczM5MHhfXworCXJlZ2lzdGVyX3BhaXIgcnA7CisKKwlycC5wYWlyID0gY3B1dGltZSA+PiAxOworCWFzbSAoImRyICUwLCUxIiA6ICIrZCIgKHJwKSA6ICJkIiAoMTAwMDAwMCA+PiAxKSk7CisJdmFsdWUtPnR2X3VzZWMgPSBycC5zdWJyZWcuZXZlbjsKKwl2YWx1ZS0+dHZfc2VjID0gcnAuc3VicmVnLm9kZDsKKyNlbHNlCisJdmFsdWUtPnR2X3VzZWMgPSBjcHV0aW1lICUgMTAwMDAwMDsKKwl2YWx1ZS0+dHZfc2VjID0gY3B1dGltZSAvIDEwMDAwMDA7CisjZW5kaWYKK30KKworLyoKKyAqIENvbnZlcnQgY3B1dGltZSB0byBjbG9jayBhbmQgYmFjay4KKyAqLworc3RhdGljIGlubGluZSBjbG9ja190CitjcHV0aW1lX3RvX2Nsb2NrX3QoY3B1dGltZV90IGNwdXRpbWUpCit7CisJcmV0dXJuIF9fZGl2KGNwdXRpbWUsIDEwMDAwMDAgLyBVU0VSX0haKTsKK30KKworc3RhdGljIGlubGluZSBjcHV0aW1lX3QKK2Nsb2NrX3RfdG9fY3B1dGltZSh1bnNpZ25lZCBsb25nIHgpCit7CisJcmV0dXJuIChjcHV0aW1lX3QpIHggKiAoMTAwMDAwMCAvIFVTRVJfSFopOworfQorCisvKgorICogQ29udmVydCBjcHV0aW1lNjQgdG8gY2xvY2suCisgKi8KK3N0YXRpYyBpbmxpbmUgY2xvY2tfdAorY3B1dGltZTY0X3RvX2Nsb2NrX3QoY3B1dGltZTY0X3QgY3B1dGltZSkKK3sKKyAgICAgICByZXR1cm4gX19kaXYoY3B1dGltZSwgMTAwMDAwMCAvIFVTRVJfSFopOworfQorCisjZW5kaWYgLyogX1MzOTBfQ1BVVElNRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL2N1cnJlbnQuaCBiL2luY2x1ZGUvYXNtLXMzOTAvY3VycmVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzY2YzNmMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL2N1cnJlbnQuaApAQCAtMCwwICsxLDIzIEBACisvKgorICogIGluY2x1ZGUvYXNtLXMzOTAvY3VycmVudC5oCisgKgorICogIFMzOTAgdmVyc2lvbgorICogICAgQ29weXJpZ2h0IChDKSAxOTk5IElCTSBEZXV0c2NobGFuZCBFbnR3aWNrbHVuZyBHbWJILCBJQk0gQ29ycG9yYXRpb24KKyAqICAgIEF1dGhvcihzKTogTWFydGluIFNjaHdpZGVmc2t5IChzY2h3aWRlZnNreUBkZS5pYm0uY29tKQorICoKKyAqICBEZXJpdmVkIGZyb20gImluY2x1ZGUvYXNtLWkzODYvY3VycmVudC5oIgorICovCisKKyNpZm5kZWYgX1MzOTBfQ1VSUkVOVF9ICisjZGVmaW5lIF9TMzkwX0NVUlJFTlRfSAorCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGFzbS9sb3djb3JlLmg+CisKK3N0cnVjdCB0YXNrX3N0cnVjdDsKKworI2RlZmluZSBjdXJyZW50ICgoc3RydWN0IHRhc2tfc3RydWN0ICpjb25zdClTMzkwX2xvd2NvcmUuY3VycmVudF90YXNrKQorCisjZW5kaWYKKworI2VuZGlmIC8qICEoX1MzOTBfQ1VSUkVOVF9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9kYXNkLmggYi9pbmNsdWRlL2FzbS1zMzkwL2Rhc2QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2IxMGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tczM5MC9kYXNkLmgKQEAgLTAsMCArMSwyNjggQEAKKy8qIAorICogRmlsZS4uLi4uLi4uLi4uOiBsaW51eC9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jCisgKiBBdXRob3IocykuLi4uLi46IEhvbGdlciBTbW9saW5za2kgPEhvbGdlci5TbW9saW5za2lAZGUuaWJtLmNvbT4KKyAqIEJ1Z3JlcG9ydHMudG8uLjogPExpbnV4MzkwQGRlLmlibS5jb20+CisgKiAoQykgSUJNIENvcnBvcmF0aW9uLCBJQk0gRGV1dHNjaGxhbmQgRW50d2lja2x1bmcgR21iSCwgMTk5OSwyMDAwCisgKgorICogVGhpcyBmaWxlIGlzIHRoZSBpbnRlcmZhY2Ugb2YgdGhlIERBU0QgZGV2aWNlIGRyaXZlciwgd2hpY2ggaXMgZXhwb3J0ZWQgdG8gdXNlciBzcGFjZQorICogYW55IGZ1dHVyZSBjaGFuZ2VzIHdydCB0aGUgQVBJIHdpbGwgcmVzdWx0IGluIGEgY2hhbmdlIG9mIHRoZSBBUElWRVJTSU9OIHJlcG9ydGVkCisgKiB0byB1c2Vyc3BhY2UgYnkgdGhlIERBU0RBUElWRVItaW9jdGwKKyAqCisgKiAkUmV2aXNpb246IDEuNiAkCisgKgorICovCisKKyNpZm5kZWYgREFTRF9ICisjZGVmaW5lIERBU0RfSAorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisKKyNkZWZpbmUgREFTRF9JT0NUTF9MRVRURVIgJ0QnCisKKyNkZWZpbmUgREFTRF9BUElfVkVSU0lPTiA2CisKKy8qIAorICogc3RydWN0IGRhc2RfaW5mb3JtYXRpb24yX3QKKyAqIHJlcHJlc2VudHMgYW55IGRhdGEgYWJvdXQgdGhlIGRldmljZSwgd2hpY2ggaXMgdmlzaWJsZSB0byB1c2Vyc3BhY2UuCisgKiAgaW5jbHVkaW5nIGZvcmFtdCBhbmQgZmVhdHVlcmVzLgorICovCit0eXBlZGVmIHN0cnVjdCBkYXNkX2luZm9ybWF0aW9uMl90IHsKKyAgICAgICAgdW5zaWduZWQgaW50IGRldm5vOyAgICAgICAgIC8qIFMvMzkwIGRldm5vICovCisgICAgICAgIHVuc2lnbmVkIGludCByZWFsX2Rldm5vOyAgICAvKiBmb3IgYWxpYXNlcyAqLworICAgICAgICB1bnNpZ25lZCBpbnQgc2NoaWQ7ICAgICAgICAgLyogUy8zOTAgc3ViY2hhbm5lbCBpZGVudGlmaWVyICovCisgICAgICAgIHVuc2lnbmVkIGludCBjdV90eXBlICA6IDE2OyAvKiBmcm9tIFNlbnNlSUQgKi8KKyAgICAgICAgdW5zaWduZWQgaW50IGN1X21vZGVsIDogIDg7IC8qIGZyb20gU2Vuc2VJRCAqLworICAgICAgICB1bnNpZ25lZCBpbnQgZGV2X3R5cGUgOiAxNjsgLyogZnJvbSBTZW5zZUlEICovCisgICAgICAgIHVuc2lnbmVkIGludCBkZXZfbW9kZWwgOiA4OyAvKiBmcm9tIFNlbnNlSUQgKi8KKyAgICAgICAgdW5zaWduZWQgaW50IG9wZW5fY291bnQ7IAorICAgICAgICB1bnNpZ25lZCBpbnQgcmVxX3F1ZXVlX2xlbjsgCisgICAgICAgIHVuc2lnbmVkIGludCBjaGFucV9sZW47ICAgICAvKiBsZW5ndGggb2YgY2hhbnEgKi8KKyAgICAgICAgY2hhciB0eXBlWzRdOyAgICAgICAgICAgICAgIC8qIGZyb20gZGlzY2lwbGluZS5uYW1lLCAnbm9uZScgZm9yIHVua25vd24gKi8KKyAgICAgICAgdW5zaWduZWQgaW50IHN0YXR1czsgICAgICAgIC8qIGN1cnJlbnQgZGV2aWNlIGxldmVsICovCisgICAgICAgIHVuc2lnbmVkIGludCBsYWJlbF9ibG9jazsgICAvKiB3aGVyZSB0byBmaW5kIHRoZSBWT0xTRVIgKi8KKyAgICAgICAgdW5zaWduZWQgaW50IEZCQV9sYXlvdXQ7ICAgIC8qIGZpeGVkIGJsb2NrIHNpemUgKGxpa2UgQUlYVk9MKSAqLworICAgICAgICB1bnNpZ25lZCBpbnQgY2hhcmFjdGVyaXN0aWNzX3NpemU7CisgICAgICAgIHVuc2lnbmVkIGludCBjb25mZGF0YV9zaXplOworICAgICAgICBjaGFyIGNoYXJhY3RlcmlzdGljc1s2NF07ICAgLyogZnJvbSByZWFkX2RldmljZV9jaGFyYWN0ZXJpc3RpY3MgKi8KKyAgICAgICAgY2hhciBjb25maWd1cmF0aW9uX2RhdGFbMjU2XTsgLyogZnJvbSByZWFkX2NvbmZpZ3VyYXRpb25fZGF0YSAqLworICAgICAgICB1bnNpZ25lZCBpbnQgZm9ybWF0OyAgICAgICAgICAvKiBmb3JtYXQgaW5mbyBsaWtlIGZvcm1hdHRlZC9jZGwvbGRsLy4uLiAqLworICAgICAgICB1bnNpZ25lZCBpbnQgZmVhdHVyZXM7ICAgICAgICAvKiBkYXNkIGZlYXR1cmVzIGxpa2UgJ3JvJywuLi4gICAgICAgICAgICAqLworICAgICAgICB1bnNpZ25lZCBpbnQgcmVzZXJ2ZWQwOyAgICAgICAvKiByZXNlcnZlZCBmb3IgZnVydGhlciB1c2UgLC4uLiAgICAgICAgICAqLworICAgICAgICB1bnNpZ25lZCBpbnQgcmVzZXJ2ZWQxOyAgICAgICAvKiByZXNlcnZlZCBmb3IgZnVydGhlciB1c2UgLC4uLiAgICAgICAgICAqLworICAgICAgICB1bnNpZ25lZCBpbnQgcmVzZXJ2ZWQyOyAgICAgICAvKiByZXNlcnZlZCBmb3IgZnVydGhlciB1c2UgLC4uLiAgICAgICAgICAqLworICAgICAgICB1bnNpZ25lZCBpbnQgcmVzZXJ2ZWQzOyAgICAgICAvKiByZXNlcnZlZCBmb3IgZnVydGhlciB1c2UgLC4uLiAgICAgICAgICAqLworICAgICAgICB1bnNpZ25lZCBpbnQgcmVzZXJ2ZWQ0OyAgICAgICAvKiByZXNlcnZlZCBmb3IgZnVydGhlciB1c2UgLC4uLiAgICAgICAgICAqLworICAgICAgICB1bnNpZ25lZCBpbnQgcmVzZXJ2ZWQ1OyAgICAgICAvKiByZXNlcnZlZCBmb3IgZnVydGhlciB1c2UgLC4uLiAgICAgICAgICAqLworICAgICAgICB1bnNpZ25lZCBpbnQgcmVzZXJ2ZWQ2OyAgICAgICAvKiByZXNlcnZlZCBmb3IgZnVydGhlciB1c2UgLC4uLiAgICAgICAgICAqLworICAgICAgICB1bnNpZ25lZCBpbnQgcmVzZXJ2ZWQ3OyAgICAgICAvKiByZXNlcnZlZCBmb3IgZnVydGhlciB1c2UgLC4uLiAgICAgICAgICAqLworfSBkYXNkX2luZm9ybWF0aW9uMl90OworCisvKgorICogdmFsdWVzIHRvIGJlIHVzZWQgZm9yIGRhc2RfaW5mb3JtYXRpb25fdC5mb3JtYXQKKyAqIDB4MDA6IE5PVCBmb3JtYXR0ZWQKKyAqIDB4MDE6IExpbnV4IGRpc2MgbGF5b3V0CisgKiAweDAyOiBDb21tb24gZGlzYyBsYXlvdXQKKyAqLworI2RlZmluZSBEQVNEX0ZPUk1BVF9OT05FIDAKKyNkZWZpbmUgREFTRF9GT1JNQVRfTERMICAxCisjZGVmaW5lIERBU0RfRk9STUFUX0NETCAgMgorLyoKKyAqIHZhbHVlcyB0byBiZSB1c2VkIGZvciBkYXNkX2luZm9ybWF0aW9uX3QuZmVhdHVyZXMKKyAqIDB4MDA6IGRlZmF1bHQgZmVhdHVyZXMKKyAqIDB4MDE6IHJlYWRvbmx5IChybykKKyAqIDB4MDI6IHVzZSBkaWFnIGRpc2NpcGxpbmUgKGRpYWcpCisgKi8KKyNkZWZpbmUgREFTRF9GRUFUVVJFX0RFRkFVTFQgIDAKKyNkZWZpbmUgREFTRF9GRUFUVVJFX1JFQURPTkxZIDEKKyNkZWZpbmUgREFTRF9GRUFUVVJFX1VTRURJQUcgIDIKKworI2RlZmluZSBEQVNEX1BBUlROX0JJVFMgMgorCisvKiAKKyAqIHN0cnVjdCBkYXNkX2luZm9ybWF0aW9uX3QKKyAqIHJlcHJlc2VudHMgYW55IGRhdGEgYWJvdXQgdGhlIGRhdGEsIHdoaWNoIGlzIHZpc2libGUgdG8gdXNlcnNwYWNlCisgKi8KK3R5cGVkZWYgc3RydWN0IGRhc2RfaW5mb3JtYXRpb25fdCB7CisgICAgICAgIHVuc2lnbmVkIGludCBkZXZubzsgICAgICAgICAvKiBTLzM5MCBkZXZubyAqLworICAgICAgICB1bnNpZ25lZCBpbnQgcmVhbF9kZXZubzsgICAgLyogZm9yIGFsaWFzZXMgKi8KKyAgICAgICAgdW5zaWduZWQgaW50IHNjaGlkOyAgICAgICAgIC8qIFMvMzkwIHN1YmNoYW5uZWwgaWRlbnRpZmllciAqLworICAgICAgICB1bnNpZ25lZCBpbnQgY3VfdHlwZSAgOiAxNjsgLyogZnJvbSBTZW5zZUlEICovCisgICAgICAgIHVuc2lnbmVkIGludCBjdV9tb2RlbCA6ICA4OyAvKiBmcm9tIFNlbnNlSUQgKi8KKyAgICAgICAgdW5zaWduZWQgaW50IGRldl90eXBlIDogMTY7IC8qIGZyb20gU2Vuc2VJRCAqLworICAgICAgICB1bnNpZ25lZCBpbnQgZGV2X21vZGVsIDogODsgLyogZnJvbSBTZW5zZUlEICovCisgICAgICAgIHVuc2lnbmVkIGludCBvcGVuX2NvdW50OyAKKyAgICAgICAgdW5zaWduZWQgaW50IHJlcV9xdWV1ZV9sZW47IAorICAgICAgICB1bnNpZ25lZCBpbnQgY2hhbnFfbGVuOyAgICAgLyogbGVuZ3RoIG9mIGNoYW5xICovCisgICAgICAgIGNoYXIgdHlwZVs0XTsgICAgICAgICAgICAgICAvKiBmcm9tIGRpc2NpcGxpbmUubmFtZSwgJ25vbmUnIGZvciB1bmtub3duICovCisgICAgICAgIHVuc2lnbmVkIGludCBzdGF0dXM7ICAgICAgICAvKiBjdXJyZW50IGRldmljZSBsZXZlbCAqLworICAgICAgICB1bnNpZ25lZCBpbnQgbGFiZWxfYmxvY2s7ICAgLyogd2hlcmUgdG8gZmluZCB0aGUgVk9MU0VSICovCisgICAgICAgIHVuc2lnbmVkIGludCBGQkFfbGF5b3V0OyAgICAvKiBmaXhlZCBibG9jayBzaXplIChsaWtlIEFJWFZPTCkgKi8KKyAgICAgICAgdW5zaWduZWQgaW50IGNoYXJhY3RlcmlzdGljc19zaXplOworICAgICAgICB1bnNpZ25lZCBpbnQgY29uZmRhdGFfc2l6ZTsKKyAgICAgICAgY2hhciBjaGFyYWN0ZXJpc3RpY3NbNjRdOyAgIC8qIGZyb20gcmVhZF9kZXZpY2VfY2hhcmFjdGVyaXN0aWNzICovCisgICAgICAgIGNoYXIgY29uZmlndXJhdGlvbl9kYXRhWzI1Nl07IC8qIGZyb20gcmVhZF9jb25maWd1cmF0aW9uX2RhdGEgKi8KK30gZGFzZF9pbmZvcm1hdGlvbl90OworCisvKgorICogUmVhZCBTdWJzeXN0ZW0gRGF0YSAtIFBlcmZvbWFuY2UgU3RhdGlzdGljcworICovIAordHlwZWRlZiBzdHJ1Y3QgZGFzZF9yc3NkX3BlcmZfc3RhdHNfdCB7CisJdW5zaWduZWQgY2hhciAgaW52YWxpZDoxOworCXVuc2lnbmVkIGNoYXIgIGZvcm1hdDozOworCXVuc2lnbmVkIGNoYXIgIGRhdGFfZm9ybWF0OjQ7CisJdW5zaWduZWQgY2hhciAgdW5pdF9hZGRyZXNzOworCXVuc2lnbmVkIHNob3J0IGRldmljZV9zdGF0dXM7CisJdW5zaWduZWQgaW50ICAgbnJfcmVhZF9ub3JtYWw7CisJdW5zaWduZWQgaW50ICAgbnJfcmVhZF9ub3JtYWxfaGl0czsKKwl1bnNpZ25lZCBpbnQgICBucl93cml0ZV9ub3JtYWw7CisJdW5zaWduZWQgaW50ICAgbnJfd3JpdGVfZmFzdF9ub3JtYWxfaGl0czsKKwl1bnNpZ25lZCBpbnQgICBucl9yZWFkX3NlcTsKKwl1bnNpZ25lZCBpbnQgICBucl9yZWFkX3NlcV9oaXRzOworCXVuc2lnbmVkIGludCAgIG5yX3dyaXRlX3NlcTsKKwl1bnNpZ25lZCBpbnQgICBucl93cml0ZV9mYXN0X3NlcV9oaXRzOworCXVuc2lnbmVkIGludCAgIG5yX3JlYWRfY2FjaGU7CisJdW5zaWduZWQgaW50ICAgbnJfcmVhZF9jYWNoZV9oaXRzOworCXVuc2lnbmVkIGludCAgIG5yX3dyaXRlX2NhY2hlOworCXVuc2lnbmVkIGludCAgIG5yX3dyaXRlX2Zhc3RfY2FjaGVfaGl0czsKKwl1bnNpZ25lZCBpbnQgICBucl9pbmhpYml0X2NhY2hlOworCXVuc2lnbmVkIGludCAgIG5yX2J5YmFzc19jYWNoZTsKKwl1bnNpZ25lZCBpbnQgICBucl9zZXFfZGFzZF90b19jYWNoZTsKKwl1bnNpZ25lZCBpbnQgICBucl9kYXNkX3RvX2NhY2hlOworCXVuc2lnbmVkIGludCAgIG5yX2NhY2hlX3RvX2Rhc2Q7CisJdW5zaWduZWQgaW50ICAgbnJfZGVsYXllZF9mYXN0X3dyaXRlOworCXVuc2lnbmVkIGludCAgIG5yX25vcm1hbF9mYXN0X3dyaXRlOworCXVuc2lnbmVkIGludCAgIG5yX3NlcV9mYXN0X3dyaXRlOworCXVuc2lnbmVkIGludCAgIG5yX2NhY2hlX21pc3M7CisJdW5zaWduZWQgY2hhciAgc3RhdHVzMjsKKwl1bnNpZ25lZCBpbnQgICBucl9xdWlja193cml0ZV9wcm9tb3RlczsKKwl1bnNpZ25lZCBjaGFyICByZXNlcnZlZDsKKwl1bnNpZ25lZCBzaG9ydCBzc2lkOworCXVuc2lnbmVkIGNoYXIgIHJlc2V2ZWQyWzk2XTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZGFzZF9yc3NkX3BlcmZfc3RhdHNfdDsKKworLyogCisgKiBzdHJ1Y3QgcHJvZmlsZV9pbmZvX3QKKyAqIGhvbGRzIHRoZSBwcm9maW5saW5nIGluZm9ybWF0aW9uIAorICovCit0eXBlZGVmIHN0cnVjdCBkYXNkX3Byb2ZpbGVfaW5mb190IHsKKyAgICAgICAgdW5zaWduZWQgaW50IGRhc2RfaW9fcmVxczsJIC8qIG51bWJlciBvZiByZXF1ZXN0cyBwcm9jZXNzZWQgYXQgYWxsICovCisgICAgICAgIHVuc2lnbmVkIGludCBkYXNkX2lvX3NlY3RzOwkgLyogbnVtYmVyIG9mIHNlY3RvcnMgcHJvY2Vzc2VkIGF0IGFsbCAqLworICAgICAgICB1bnNpZ25lZCBpbnQgZGFzZF9pb19zZWNzWzMyXTsJIC8qIGhpc3RvZ3JhbSBvZiByZXF1ZXN0J3Mgc2l6ZXMgKi8KKyAgICAgICAgdW5zaWduZWQgaW50IGRhc2RfaW9fdGltZXNbMzJdOwkgLyogaGlzdG9ncmFtIG9mIHJlcXVlc3RzJ3MgdGltZXMgKi8KKyAgICAgICAgdW5zaWduZWQgaW50IGRhc2RfaW9fdGltcHNbMzJdOwkgLyogaGlzdG9ncmFtIG9mIHJlcXVlc3RzJ3MgdGltZXMgcGVyIHNlY3RvciAqLworICAgICAgICB1bnNpZ25lZCBpbnQgZGFzZF9pb190aW1lMVszMl07CSAvKiBoaXN0b2dyYW0gb2YgdGltZSBmcm9tIGJ1aWxkIHRvIHN0YXJ0ICovCisgICAgICAgIHVuc2lnbmVkIGludCBkYXNkX2lvX3RpbWUyWzMyXTsJIC8qIGhpc3RvZ3JhbSBvZiB0aW1lIGZyb20gc3RhcnQgdG8gaXJxICovCisgICAgICAgIHVuc2lnbmVkIGludCBkYXNkX2lvX3RpbWUycHNbMzJdOyAvKiBoaXN0b2dyYW0gb2YgdGltZSBmcm9tIHN0YXJ0IHRvIGlycSAqLworICAgICAgICB1bnNpZ25lZCBpbnQgZGFzZF9pb190aW1lM1szMl07CSAvKiBoaXN0b2dyYW0gb2YgdGltZSBmcm9tIGlycSB0byBlbmQgKi8KKyAgICAgICAgdW5zaWduZWQgaW50IGRhc2RfaW9fbnJfcmVxWzMyXTsgLyogaGlzdG9ncmFtIG9mICMgb2YgcmVxdWVzdHMgaW4gY2hhbnEgKi8KK30gZGFzZF9wcm9maWxlX2luZm9fdDsKKworLyogCisgKiBzdHJ1Y3QgZm9ybWF0X2RhdGFfdAorICogcmVwcmVzZW50cyBhbGwgZGF0YSBuZWNlc3NhcnkgdG8gZm9ybWF0IGEgZGFzZAorICovCit0eXBlZGVmIHN0cnVjdCBmb3JtYXRfZGF0YV90IHsKKwlpbnQgc3RhcnRfdW5pdDsgLyogZnJvbSB0cmFjayAqLworCWludCBzdG9wX3VuaXQ7ICAvKiB0byB0cmFjayAqLworCWludCBibGtzaXplOyAgICAvKiBzZWN0b3JzaXplICovCisgICAgICAgIGludCBpbnRlbnNpdHk7ICAKK30gZm9ybWF0X2RhdGFfdDsKKworLyoKKyAqIHZhbHVlcyB0byBiZSB1c2VkIGZvciBmb3JtYXRfZGF0YV90LmludGVuc2l0eQorICogMC84OiBub3JtYWwgZm9ybWF0CisgKiAxLzk6IGFsc28gd3JpdGUgcmVjb3JkIHplcm8KKyAqIDMvMTE6IGFsc28gd3JpdGUgaG9tZSBhZGRyZXNzCisgKiA0LzEyOiBpbnZhbGlkYXRlIHRyYWNrCisgKi8KKyNkZWZpbmUgREFTRF9GTVRfSU5UX0ZNVF9SMCAxIC8qIHdyaXRlIHJlY29yZCB6ZXJvICovCisjZGVmaW5lIERBU0RfRk1UX0lOVF9GTVRfSEEgMiAvKiB3cml0ZSBob21lIGFkZHJlc3MsIGFsc28gc2V0IEZNVF9SMCAhICovCisjZGVmaW5lIERBU0RfRk1UX0lOVF9JTlZBTCAgNCAvKiBpbnZhbGlkYXRlIHRyYWNrcyAqLworI2RlZmluZSBEQVNEX0ZNVF9JTlRfQ09NUEFUIDggLyogdXNlIE9TLzM5MCBjb21wYXRpYmxlIGRpc2sgbGF5b3V0ICovCisKKworLyogCisgKiBzdHJ1Y3QgYXR0cmliX2RhdGFfdAorICogcmVwcmVzZW50cyB0aGUgb3BlcmF0aW9uIChjYWNoZSkgYml0cyBmb3IgdGhlIGRldmljZS4KKyAqIFVzZWQgaW4gREUgdG8gaW5mbHVlbmNlIGNhY2hpbmcgb2YgdGhlIERBU0QuCisgKi8KK3R5cGVkZWYgc3RydWN0IGF0dHJpYl9kYXRhX3QgeworCXVuc2lnbmVkIGNoYXIgb3BlcmF0aW9uOjM7ICAgICAvKiBjYWNoZSBvcGVyYXRpb24gbW9kZSAqLworCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWQ6NTsgICAgICAvKiBjYWNoZSBvcGVyYXRpb24gbW9kZSAqLworCV9fdTE2ICAgICAgICAgbnJfY3lsOyAgICAgICAgICAvKiBubyBvZiBjeWxpbmVycyBmb3IgcmVhZCBhaGFlZCAqLworCV9fdTggICAgICAgICAgcmVzZXJ2ZWQyWzI5XTsgICAvKiBmb3IgZnV0dXJlIHVzZSAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgYXR0cmliX2RhdGFfdDsKKworLyogZGVmaW5pdGlvbiBvZiBvcGVyYXRpb24gKGNhY2hlKSBiaXRzIHdpdGhpbiBhdHRyaWJ1dGVzIG9mIERFICovCisjZGVmaW5lIERBU0RfTk9STUFMX0NBQ0hFICAweDAKKyNkZWZpbmUgREFTRF9CWVBBU1NfQ0FDSEUgIDB4MQorI2RlZmluZSBEQVNEX0lOSElCSVRfTE9BRCAgMHgyCisjZGVmaW5lIERBU0RfU0VRX0FDQ0VTUyAgICAweDMKKyNkZWZpbmUgREFTRF9TRVFfUFJFU1RBR0UgIDB4NAorI2RlZmluZSBEQVNEX1JFQ19BQ0NFU1MgICAgMHg1CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBTRUNUSU9OOiBEZWZpbml0aW9uIG9mIElPQ1RMcworICoKKyAqIEhlcmUgaXN0IGhvdyB0aGUgaW9jdGwtbnIgc2hvdWxkIGJlIHVzZWQ6CisgKiAgICAwIC0gICAzMSAgIERBU0QgZHJpdmVyIGl0c2VsZgorICogICAzMiAtICAyMzkgICBzdGlsbCBvcGVuCisgKiAgMjQwIC0gIDI1NSAgIHJlc2VydmVkIGZvciBFTUMgCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogRGlzYWJsZSB0aGUgdm9sdW1lIChmb3IgTGludXgpICovCisjZGVmaW5lIEJJT0RBU0RESVNBQkxFIF9JTyhEQVNEX0lPQ1RMX0xFVFRFUiwwKSAKKy8qIEVuYWJsZSB0aGUgdm9sdW1lIChmb3IgTGludXgpICovCisjZGVmaW5lIEJJT0RBU0RFTkFCTEUgIF9JTyhEQVNEX0lPQ1RMX0xFVFRFUiwxKSAgCisvKiBJc3N1ZSBhIHJlc2VydmUvcmVsZWFzZSBjb21tYW5kLCByc3AuICovCisjZGVmaW5lIEJJT0RBU0RSU1JWICAgIF9JTyhEQVNEX0lPQ1RMX0xFVFRFUiwyKSAvKiByZXNlcnZlICovCisjZGVmaW5lIEJJT0RBU0RSTFNFICAgIF9JTyhEQVNEX0lPQ1RMX0xFVFRFUiwzKSAvKiByZWxlYXNlICovCisjZGVmaW5lIEJJT0RBU0RTTENLICAgIF9JTyhEQVNEX0lPQ1RMX0xFVFRFUiw0KSAvKiBzdGVhbCBsb2NrICovCisvKiByZXNldCBwcm9maWxpbmcgaW5mb3JtYXRpb24gb2YgYSBkZXZpY2UgKi8KKyNkZWZpbmUgQklPREFTRFBSUlNUICAgX0lPKERBU0RfSU9DVExfTEVUVEVSLDUpCisvKiBRdWllc2NlIElPIG9uIGRldmljZSAqLworI2RlZmluZSBCSU9EQVNEUVVJRVNDRSBfSU8oREFTRF9JT0NUTF9MRVRURVIsNikgCisvKiBSZXN1bWUgSU8gb24gZGV2aWNlICovCisjZGVmaW5lIEJJT0RBU0RSRVNVTUUgIF9JTyhEQVNEX0lPQ1RMX0xFVFRFUiw3KSAKKworCisvKiByZXRyaWV2ZSBBUEkgdmVyc2lvbiBudW1iZXIgKi8KKyNkZWZpbmUgREFTREFQSVZFUiAgICAgX0lPUihEQVNEX0lPQ1RMX0xFVFRFUiwwLGludCkKKy8qIEdldCBpbmZvcm1hdGlvbiBvbiBhIGRhc2QgZGV2aWNlICovCisjZGVmaW5lIEJJT0RBU0RJTkZPICAgIF9JT1IoREFTRF9JT0NUTF9MRVRURVIsMSxkYXNkX2luZm9ybWF0aW9uX3QpCisvKiByZXRyaWV2ZSBwcm9maWxpbmcgaW5mb3JtYXRpb24gb2YgYSBkZXZpY2UgKi8KKyNkZWZpbmUgQklPREFTRFBSUkQgICAgX0lPUihEQVNEX0lPQ1RMX0xFVFRFUiwyLGRhc2RfcHJvZmlsZV9pbmZvX3QpCisvKiBHZXQgaW5mb3JtYXRpb24gb24gYSBkYXNkIGRldmljZSAoZW5oYW5jZWQpICovCisjZGVmaW5lIEJJT0RBU0RJTkZPMiAgIF9JT1IoREFTRF9JT0NUTF9MRVRURVIsMyxkYXNkX2luZm9ybWF0aW9uMl90KQorLyogUGVyZm9ybWFuY2UgU3RhdGlzdGljcyBSZWFkICovCisjZGVmaW5lIEJJT0RBU0RQU1JEICAgIF9JT1IoREFTRF9JT0NUTF9MRVRURVIsNCxkYXNkX3Jzc2RfcGVyZl9zdGF0c190KQorLyogR2V0IEF0dHJpYnV0ZXMgKGNhY2hlIG9wZXJhdGlvbnMpICovCisjZGVmaW5lIEJJT0RBU0RHQVRUUiAgIF9JT1IoREFTRF9JT0NUTF9MRVRURVIsNSxhdHRyaWJfZGF0YV90KSAKKworCisvKiAjZGVmaW5lIEJJT0RBU0RGT1JNQVQgIF9JT1coSU9DVExfTEVUVEVSLDAsZm9ybWF0X2RhdGFfdCkgLCBkZXByZWNhdGVkICovCisjZGVmaW5lIEJJT0RBU0RGTVQgICAgIF9JT1coREFTRF9JT0NUTF9MRVRURVIsMSxmb3JtYXRfZGF0YV90KSAKKy8qIFNldCBBdHRyaWJ1dGVzIChjYWNoZSBvcGVyYXRpb25zKSAqLworI2RlZmluZSBCSU9EQVNEU0FUVFIgICBfSU9XKERBU0RfSU9DVExfTEVUVEVSLDIsYXR0cmliX2RhdGFfdCkgCisKKworI2VuZGlmCQkJCS8qIERBU0RfSCAqLworCisvKgorICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCisgKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKKyAqIGFkanVzdCB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgYnVmZmVyIG9ubHkuICBUaGlzIG11c3QgcmVtYWluIGF0IHRoZSBlbmQKKyAqIG9mIHRoZSBmaWxlLgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiBjLWluZGVudC1sZXZlbDogNCAKKyAqIGMtYnJhY2UtaW1hZ2luYXJ5LW9mZnNldDogMAorICogYy1icmFjZS1vZmZzZXQ6IC00CisgKiBjLWFyZ2RlY2wtaW5kZW50OiA0CisgKiBjLWxhYmVsLW9mZnNldDogLTQKKyAqIGMtY29udGludWVkLXN0YXRlbWVudC1vZmZzZXQ6IDQKKyAqIGMtY29udGludWVkLWJyYWNlLW9mZnNldDogMAorICogaW5kZW50LXRhYnMtbW9kZTogbmlsCisgKiB0YWItd2lkdGg6IDgKKyAqIEVuZDoKKyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9kZWJ1Zy5oIGIvaW5jbHVkZS9hc20tczM5MC9kZWJ1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4ZWYyMzUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL2RlYnVnLmgKQEAgLTAsMCArMSwyNDkgQEAKKy8qCisgKiAgaW5jbHVkZS9hc20tczM5MC9kZWJ1Zy5oCisgKiAgIFMvMzkwIGRlYnVnIGZhY2lsaXR5CisgKgorICogICAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwIElCTSBEZXV0c2NobGFuZCBFbnR3aWNrbHVuZyBHbWJILAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIElCTSBDb3Jwb3JhdGlvbgorICovCisKKyNpZm5kZWYgREVCVUdfSAorI2RlZmluZSBERUJVR19ICisKKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKworLyogTm90ZToKKyAqIHN0cnVjdCBfX2RlYnVnX2VudHJ5IG11c3QgYmUgZGVmaW5lZCBvdXRzaWRlIG9mICNpZmRlZiBfX0tFUk5FTF9fIAorICogaW4gb3JkZXIgdG8gYWxsb3cgYSB1c2VyIHByb2dyYW0gdG8gYW5hbHl6ZSB0aGUgJ3Jhdyctdmlldy4KKyAqLworCitzdHJ1Y3QgX19kZWJ1Z19lbnRyeXsKKyAgICAgICAgdW5pb24geworICAgICAgICAgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgY2xvY2s6NTI7CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgZXhjZXB0aW9uOjE7CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgbGV2ZWw6MzsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBjcHVpZDo4OworICAgICAgICAgICAgICAgIH0gZmllbGRzOworCisgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIHN0Y2s7CisgICAgICAgIH0gaWQ7CisgICAgICAgIHZvaWQqIGNhbGxlcjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKworI2RlZmluZSBfX0RFQlVHX0ZFQVRVUkVfVkVSU0lPTiAgICAgIDEgIC8qIHZlcnNpb24gb2YgZGVidWcgZmVhdHVyZSAqLworCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKworI2RlZmluZSBERUJVR19NQVhfTEVWRUwgICAgICAgICAgICA2ICAvKiBkZWJ1ZyBsZXZlbHMgcmFuZ2UgZnJvbSAwIHRvIDYgKi8KKyNkZWZpbmUgREVCVUdfT0ZGX0xFVkVMICAgICAgICAgICAgLTEgLyogbGV2ZWwgd2hlcmUgZGVidWcgaXMgc3dpdGNoZWQgb2ZmICovCisjZGVmaW5lIERFQlVHX0ZMVVNIX0FMTCAgICAgICAgICAgIC0xIC8qIHBhcmFtZXRlciB0byBmbHVzaCBhbGwgYXJlYXMgKi8KKyNkZWZpbmUgREVCVUdfTUFYX1ZJRVdTICAgICAgICAgICAgMTAgLyogbWF4IG51bWJlciBvZiB2aWV3cyBpbiBwcm9jIGZzICovCisjZGVmaW5lIERFQlVHX01BWF9QUk9DRl9MRU4gICAgICAgIDE2IC8qIG1heCBsZW5ndGggZm9yIGEgcHJvYyBmaWxlIG5hbWUgKi8KKyNkZWZpbmUgREVCVUdfREVGQVVMVF9MRVZFTCAgICAgICAgMyAgLyogaW5pdGlhbCBkZWJ1ZyBsZXZlbCAqLworCisjZGVmaW5lIERFQlVHX0RJUl9ST09UICJzMzkwZGJmIiAvKiBuYW1lIG9mIGRlYnVnIHJvb3QgZGlyZWN0b3J5IGluIHByb2MgZnMgKi8KKworI2RlZmluZSBERUJVR19EQVRBKGVudHJ5KSAoY2hhciopKGVudHJ5ICsgMSkgLyogZGF0YSBpcyBzdG9yZWQgYmVoaW5kICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0aGUgZW50cnkgaW5mb3JtYXRpb24gKi8KKworI2RlZmluZSBTVENLKHgpCWFzbSB2b2xhdGlsZSAoIlNUQ0sgMCglMSkiIDogIj1tIiAoeCkgOiAiYSIgKCYoeCkpIDogImNjIikKKwordHlwZWRlZiBzdHJ1Y3QgX19kZWJ1Z19lbnRyeSBkZWJ1Z19lbnRyeV90OworCitzdHJ1Y3QgZGVidWdfdmlldzsKKwordHlwZWRlZiBzdHJ1Y3QgZGVidWdfaW5mbyB7CQorCXN0cnVjdCBkZWJ1Z19pbmZvKiBuZXh0OworCXN0cnVjdCBkZWJ1Z19pbmZvKiBwcmV2OworCWF0b21pY190IHJlZl9jb3VudDsKKwlzcGlubG9ja190IGxvY2s7CQkJCisJaW50IGxldmVsOworCWludCBucl9hcmVhczsKKwlpbnQgcGFnZV9vcmRlcjsKKwlpbnQgYnVmX3NpemU7CisJaW50IGVudHJ5X3NpemU7CQorCWRlYnVnX2VudHJ5X3QqKiBhcmVhczsKKwlpbnQgYWN0aXZlX2FyZWE7CisJaW50ICphY3RpdmVfZW50cnk7CisJc3RydWN0IHByb2NfZGlyX2VudHJ5KiBwcm9jX3Jvb3RfZW50cnk7CisJc3RydWN0IHByb2NfZGlyX2VudHJ5KiBwcm9jX2VudHJpZXNbREVCVUdfTUFYX1ZJRVdTXTsKKwlzdHJ1Y3QgZGVidWdfdmlldyogdmlld3NbREVCVUdfTUFYX1ZJRVdTXTsJCisJY2hhciBuYW1lW0RFQlVHX01BWF9QUk9DRl9MRU5dOworfSBkZWJ1Z19pbmZvX3Q7CisKK3R5cGVkZWYgaW50IChkZWJ1Z19oZWFkZXJfcHJvY190KSAoZGVidWdfaW5mb190KiBpZCwKKwkJCQkgICBzdHJ1Y3QgZGVidWdfdmlldyogdmlldywKKwkJCQkgICBpbnQgYXJlYSwKKwkJCQkgICBkZWJ1Z19lbnRyeV90KiBlbnRyeSwKKwkJCQkgICBjaGFyKiBvdXRfYnVmKTsKKwordHlwZWRlZiBpbnQgKGRlYnVnX2Zvcm1hdF9wcm9jX3QpIChkZWJ1Z19pbmZvX3QqIGlkLAorCQkJCSAgIHN0cnVjdCBkZWJ1Z192aWV3KiB2aWV3LCBjaGFyKiBvdXRfYnVmLAorCQkJCSAgIGNvbnN0IGNoYXIqIGluX2J1Zik7Cit0eXBlZGVmIGludCAoZGVidWdfcHJvbG9nX3Byb2NfdCkgKGRlYnVnX2luZm9fdCogaWQsCisJCQkJICAgc3RydWN0IGRlYnVnX3ZpZXcqIHZpZXcsCisJCQkJICAgY2hhciogb3V0X2J1Zik7Cit0eXBlZGVmIGludCAoZGVidWdfaW5wdXRfcHJvY190KSAoZGVidWdfaW5mb190KiBpZCwKKwkJCQkgIHN0cnVjdCBkZWJ1Z192aWV3KiB2aWV3LAorCQkJCSAgc3RydWN0IGZpbGUqIGZpbGUsCisJCQkJICBjb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCQkJICBzaXplX3QgaW5fYnVmX3NpemUsIGxvZmZfdCogb2Zmc2V0KTsKKworaW50IGRlYnVnX2RmbHRfaGVhZGVyX2ZuKGRlYnVnX2luZm9fdCogaWQsIHN0cnVjdCBkZWJ1Z192aWV3KiB2aWV3LAorCQkgICAgICAgICBpbnQgYXJlYSwgZGVidWdfZW50cnlfdCogZW50cnksIGNoYXIqIG91dF9idWYpOwkJCQkJCQorCQkJCQorc3RydWN0IGRlYnVnX3ZpZXcgeworCWNoYXIgbmFtZVtERUJVR19NQVhfUFJPQ0ZfTEVOXTsKKwlkZWJ1Z19wcm9sb2dfcHJvY190KiBwcm9sb2dfcHJvYzsKKwlkZWJ1Z19oZWFkZXJfcHJvY190KiBoZWFkZXJfcHJvYzsKKwlkZWJ1Z19mb3JtYXRfcHJvY190KiBmb3JtYXRfcHJvYzsKKwlkZWJ1Z19pbnB1dF9wcm9jX3QqICBpbnB1dF9wcm9jOworCXZvaWQqICAgICAgICAgICAgICAgIHByaXZhdGVfZGF0YTsKK307CisKK2V4dGVybiBzdHJ1Y3QgZGVidWdfdmlldyBkZWJ1Z19oZXhfYXNjaWlfdmlldzsKK2V4dGVybiBzdHJ1Y3QgZGVidWdfdmlldyBkZWJ1Z19yYXdfdmlldzsKK2V4dGVybiBzdHJ1Y3QgZGVidWdfdmlldyBkZWJ1Z19zcHJpbnRmX3ZpZXc7CisKKy8qIGRvIE5PVCB1c2UgdGhlIF9jb21tb24gZnVuY3Rpb25zICovCisKK2RlYnVnX2VudHJ5X3QqIGRlYnVnX2V2ZW50X2NvbW1vbihkZWJ1Z19pbmZvX3QqIGlkLCBpbnQgbGV2ZWwsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqIGRhdGEsIGludCBsZW5ndGgpOworCitkZWJ1Z19lbnRyeV90KiBkZWJ1Z19leGNlcHRpb25fY29tbW9uKGRlYnVnX2luZm9fdCogaWQsIGludCBsZXZlbCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqIGRhdGEsIGludCBsZW5ndGgpOworCisvKiBEZWJ1ZyBGZWF0dXJlIEFQSTogKi8KKworZGVidWdfaW5mb190KiBkZWJ1Z19yZWdpc3RlcihjaGFyKiBuYW1lLCBpbnQgcGFnZXNfaW5kZXgsIGludCBucl9hcmVhcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJ1Zl9zaXplKTsKKwordm9pZCBkZWJ1Z191bnJlZ2lzdGVyKGRlYnVnX2luZm9fdCogaWQpOworCit2b2lkIGRlYnVnX3NldF9sZXZlbChkZWJ1Z19pbmZvX3QqIGlkLCBpbnQgbmV3X2xldmVsKTsKKwordm9pZCBkZWJ1Z19zdG9wX2FsbCh2b2lkKTsKKworZXh0ZXJuIGlubGluZSBkZWJ1Z19lbnRyeV90KiAKK2RlYnVnX2V2ZW50KGRlYnVnX2luZm9fdCogaWQsIGludCBsZXZlbCwgdm9pZCogZGF0YSwgaW50IGxlbmd0aCkKK3sKKwlpZiAoKCFpZCkgfHwgKGxldmVsID4gaWQtPmxldmVsKSkgcmV0dXJuIE5VTEw7CisgICAgICAgIHJldHVybiBkZWJ1Z19ldmVudF9jb21tb24oaWQsbGV2ZWwsZGF0YSxsZW5ndGgpOworfQorCitleHRlcm4gaW5saW5lIGRlYnVnX2VudHJ5X3QqIAorZGVidWdfaW50X2V2ZW50KGRlYnVnX2luZm9fdCogaWQsIGludCBsZXZlbCwgdW5zaWduZWQgaW50IHRhZykKK3sKKyAgICAgICAgdW5zaWduZWQgaW50IHQ9dGFnOworCWlmICgoIWlkKSB8fCAobGV2ZWwgPiBpZC0+bGV2ZWwpKSByZXR1cm4gTlVMTDsKKyAgICAgICAgcmV0dXJuIGRlYnVnX2V2ZW50X2NvbW1vbihpZCxsZXZlbCwmdCxzaXplb2YodW5zaWduZWQgaW50KSk7Cit9CisKK2V4dGVybiBpbmxpbmUgZGVidWdfZW50cnlfdCAqCitkZWJ1Z19sb25nX2V2ZW50IChkZWJ1Z19pbmZvX3QqIGlkLCBpbnQgbGV2ZWwsIHVuc2lnbmVkIGxvbmcgdGFnKQoreworICAgICAgICB1bnNpZ25lZCBsb25nIHQ9dGFnOworCWlmICgoIWlkKSB8fCAobGV2ZWwgPiBpZC0+bGV2ZWwpKSByZXR1cm4gTlVMTDsKKyAgICAgICAgcmV0dXJuIGRlYnVnX2V2ZW50X2NvbW1vbihpZCxsZXZlbCwmdCxzaXplb2YodW5zaWduZWQgbG9uZykpOworfQorCitleHRlcm4gaW5saW5lIGRlYnVnX2VudHJ5X3QqIAorZGVidWdfdGV4dF9ldmVudChkZWJ1Z19pbmZvX3QqIGlkLCBpbnQgbGV2ZWwsIGNvbnN0IGNoYXIqIHR4dCkKK3sKKwlpZiAoKCFpZCkgfHwgKGxldmVsID4gaWQtPmxldmVsKSkgcmV0dXJuIE5VTEw7CisgICAgICAgIHJldHVybiBkZWJ1Z19ldmVudF9jb21tb24oaWQsbGV2ZWwsdHh0LHN0cmxlbih0eHQpKTsKK30KKworZXh0ZXJuIGRlYnVnX2VudHJ5X3QgKgorZGVidWdfc3ByaW50Zl9ldmVudChkZWJ1Z19pbmZvX3QqIGlkLGludCBsZXZlbCxjaGFyICpzdHJpbmcsLi4uKQorCV9fYXR0cmlidXRlX18gKChmb3JtYXQocHJpbnRmLCAzLCA0KSkpOworCisKK2V4dGVybiBpbmxpbmUgZGVidWdfZW50cnlfdCogCitkZWJ1Z19leGNlcHRpb24oZGVidWdfaW5mb190KiBpZCwgaW50IGxldmVsLCB2b2lkKiBkYXRhLCBpbnQgbGVuZ3RoKQoreworCWlmICgoIWlkKSB8fCAobGV2ZWwgPiBpZC0+bGV2ZWwpKSByZXR1cm4gTlVMTDsKKyAgICAgICAgcmV0dXJuIGRlYnVnX2V4Y2VwdGlvbl9jb21tb24oaWQsbGV2ZWwsZGF0YSxsZW5ndGgpOworfQorCitleHRlcm4gaW5saW5lIGRlYnVnX2VudHJ5X3QqIAorZGVidWdfaW50X2V4Y2VwdGlvbihkZWJ1Z19pbmZvX3QqIGlkLCBpbnQgbGV2ZWwsIHVuc2lnbmVkIGludCB0YWcpCit7CisgICAgICAgIHVuc2lnbmVkIGludCB0PXRhZzsKKwlpZiAoKCFpZCkgfHwgKGxldmVsID4gaWQtPmxldmVsKSkgcmV0dXJuIE5VTEw7CisgICAgICAgIHJldHVybiBkZWJ1Z19leGNlcHRpb25fY29tbW9uKGlkLGxldmVsLCZ0LHNpemVvZih1bnNpZ25lZCBpbnQpKTsKK30KKworZXh0ZXJuIGlubGluZSBkZWJ1Z19lbnRyeV90ICogCitkZWJ1Z19sb25nX2V4Y2VwdGlvbiAoZGVidWdfaW5mb190KiBpZCwgaW50IGxldmVsLCB1bnNpZ25lZCBsb25nIHRhZykKK3sKKyAgICAgICAgdW5zaWduZWQgbG9uZyB0PXRhZzsKKwlpZiAoKCFpZCkgfHwgKGxldmVsID4gaWQtPmxldmVsKSkgcmV0dXJuIE5VTEw7CisgICAgICAgIHJldHVybiBkZWJ1Z19leGNlcHRpb25fY29tbW9uKGlkLGxldmVsLCZ0LHNpemVvZih1bnNpZ25lZCBsb25nKSk7Cit9CisKK2V4dGVybiBpbmxpbmUgZGVidWdfZW50cnlfdCogCitkZWJ1Z190ZXh0X2V4Y2VwdGlvbihkZWJ1Z19pbmZvX3QqIGlkLCBpbnQgbGV2ZWwsIGNvbnN0IGNoYXIqIHR4dCkKK3sKKwlpZiAoKCFpZCkgfHwgKGxldmVsID4gaWQtPmxldmVsKSkgcmV0dXJuIE5VTEw7CisgICAgICAgIHJldHVybiBkZWJ1Z19leGNlcHRpb25fY29tbW9uKGlkLGxldmVsLHR4dCxzdHJsZW4odHh0KSk7Cit9CisKKworZXh0ZXJuIGRlYnVnX2VudHJ5X3QgKgorZGVidWdfc3ByaW50Zl9leGNlcHRpb24oZGVidWdfaW5mb190KiBpZCxpbnQgbGV2ZWwsY2hhciAqc3RyaW5nLC4uLikKKwlfX2F0dHJpYnV0ZV9fICgoZm9ybWF0KHByaW50ZiwgMywgNCkpKTsKKworaW50IGRlYnVnX3JlZ2lzdGVyX3ZpZXcoZGVidWdfaW5mb190KiBpZCwgc3RydWN0IGRlYnVnX3ZpZXcqIHZpZXcpOworaW50IGRlYnVnX3VucmVnaXN0ZXJfdmlldyhkZWJ1Z19pbmZvX3QqIGlkLCBzdHJ1Y3QgZGVidWdfdmlldyogdmlldyk7CisKKy8qCisgICBkZWZpbmUgdGhlIGRlYnVnIGxldmVsczoKKyAgIC0gMCBObyBkZWJ1Z2dpbmcgb3V0cHV0IHRvIGNvbnNvbGUgb3Igc3lzbG9nCisgICAtIDEgTG9nIGludGVybmFsIGVycm9ycyB0byBzeXNsb2csIGlnbm9yZSBjaGVjayBjb25kaXRpb25zIAorICAgLSAyIExvZyBpbnRlcm5hbCBlcnJvcnMgYW5kIGNoZWNrIGNvbmRpdGlvbnMgdG8gc3lzbG9nCisgICAtIDMgTG9nIGludGVybmFsIGVycm9ycyB0byBjb25zb2xlLCBsb2cgY2hlY2sgY29uZGl0aW9ucyB0byBzeXNsb2cKKyAgIC0gNCBMb2cgaW50ZXJuYWwgZXJyb3JzIGFuZCBjaGVjayBjb25kaXRpb25zIHRvIGNvbnNvbGUKKyAgIC0gNSBwYW5pYyBvbiBpbnRlcm5hbCBlcnJvcnMsIGxvZyBjaGVjayBjb25kaXRpb25zIHRvIGNvbnNvbGUKKyAgIC0gNiBwYW5pYyBvbiBib3RoLCBpbnRlcm5hbCBlcnJvcnMgYW5kIGNoZWNrIGNvbmRpdGlvbnMKKyAqLworCisjaWZuZGVmIERFQlVHX0xFVkVMCisjZGVmaW5lIERFQlVHX0xFVkVMIDQKKyNlbmRpZgorCisjZGVmaW5lIElOVEVSTkFMX0VSUk1TRyh4LHkuLi4pICJFIiBfX0ZJTEVfXyAiJWQ6ICIgeCwgX19MSU5FX18sIHkKKyNkZWZpbmUgSU5URVJOQUxfV1JOTVNHKHgseS4uLikgIlciIF9fRklMRV9fICIlZDogIiB4LCBfX0xJTkVfXywgeQorI2RlZmluZSBJTlRFUk5BTF9JTkZNU0coeCx5Li4uKSAiSSIgX19GSUxFX18gIiVkOiAiIHgsIF9fTElORV9fLCB5CisjZGVmaW5lIElOVEVSTkFMX0RFQk1TRyh4LHkuLi4pICJEIiBfX0ZJTEVfXyAiJWQ6ICIgeCwgX19MSU5FX18sIHkKKworI2lmIERFQlVHX0xFVkVMID4gMAorI2RlZmluZSBQUklOVF9ERUJVRyh4Li4uKSBwcmludGsgKCBLRVJOX0RFQlVHIFBSSU5US19IRUFERVIgeCApCisjZGVmaW5lIFBSSU5UX0lORk8oeC4uLikgcHJpbnRrICggS0VSTl9JTkZPIFBSSU5US19IRUFERVIgeCApCisjZGVmaW5lIFBSSU5UX1dBUk4oeC4uLikgcHJpbnRrICggS0VSTl9XQVJOSU5HIFBSSU5US19IRUFERVIgeCApCisjZGVmaW5lIFBSSU5UX0VSUih4Li4uKSBwcmludGsgKCBLRVJOX0VSUiBQUklOVEtfSEVBREVSIHggKQorI2RlZmluZSBQUklOVF9GQVRBTCh4Li4uKSBwYW5pYyAoIFBSSU5US19IRUFERVIgeCApCisjZWxzZQorI2RlZmluZSBQUklOVF9ERUJVRyh4Li4uKSBwcmludGsgKCBLRVJOX0RFQlVHIFBSSU5US19IRUFERVIgeCApCisjZGVmaW5lIFBSSU5UX0lORk8oeC4uLikgcHJpbnRrICggS0VSTl9ERUJVRyBQUklOVEtfSEVBREVSIHggKQorI2RlZmluZSBQUklOVF9XQVJOKHguLi4pIHByaW50ayAoIEtFUk5fREVCVUcgUFJJTlRLX0hFQURFUiB4ICkKKyNkZWZpbmUgUFJJTlRfRVJSKHguLi4pIHByaW50ayAoIEtFUk5fREVCVUcgUFJJTlRLX0hFQURFUiB4ICkKKyNkZWZpbmUgUFJJTlRfRkFUQUwoeC4uLikgcHJpbnRrICggS0VSTl9ERUJVRyBQUklOVEtfSEVBREVSIHggKQorI2VuZGlmCQkJCS8qIERBU0RfREVCVUcgKi8KKworI3VuZGVmIERFQlVHX01BTExPQworI2lmZGVmIERFQlVHX01BTExPQwordm9pZCAqYjsKKyNkZWZpbmUga21hbGxvYyh4Li4uKSAoUFJJTlRfSU5GTygiIGttYWxsb2MgJXBcbiIsYj1rbWFsbG9jKHgpKSxiKQorI2RlZmluZSBrZnJlZSh4KSBQUklOVF9JTkZPKCIga2ZyZWUgJXBcbiIseCk7a2ZyZWUoeCkKKyNkZWZpbmUgZ2V0X3plcm9lZF9wYWdlKHguLi4pIChQUklOVF9JTkZPKCIgZ2ZwICVwXG4iLGI9Z2V0X3plcm9lZF9wYWdlKHgpKSxiKQorI2RlZmluZSBfX2dldF9mcmVlX3BhZ2VzKHguLi4pIChQUklOVF9JTkZPKCIgZ2ZwcyAlcFxuIixiPV9fZ2V0X2ZyZWVfcGFnZXMoeCkpLGIpCisjZW5kaWYJCQkJLyogREVCVUdfTUFMTE9DICovCisKKyNlbmRpZgkJCQkvKiBfX0tFUk5FTF9fICovCisjZW5kaWYJCQkJLyogREVCVUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9kZWxheS5oIGIvaW5jbHVkZS9hc20tczM5MC9kZWxheS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4MzU3MzEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL2RlbGF5LmgKQEAgLTAsMCArMSwyMiBAQAorLyoKKyAqICBpbmNsdWRlL2FzbS1zMzkwL2RlbGF5LmgKKyAqCisgKiAgUzM5MCB2ZXJzaW9uCisgKiAgICBDb3B5cmlnaHQgKEMpIDE5OTkgSUJNIERldXRzY2hsYW5kIEVudHdpY2tsdW5nIEdtYkgsIElCTSBDb3Jwb3JhdGlvbgorICogICAgQXV0aG9yKHMpOiBNYXJ0aW4gU2Nod2lkZWZza3kgKHNjaHdpZGVmc2t5QGRlLmlibS5jb20pCisgKgorICogIERlcml2ZWQgZnJvbSAiaW5jbHVkZS9hc20taTM4Ni9kZWxheS5oIgorICogICAgQ29weXJpZ2h0IChDKSAxOTkzIExpbnVzIFRvcnZhbGRzCisgKgorICogIERlbGF5IHJvdXRpbmVzIGNhbGxpbmcgZnVuY3Rpb25zIGluIGFyY2gvczM5MC9saWIvZGVsYXkuYworICovCisgCisjaWZuZGVmIF9TMzkwX0RFTEFZX0gKKyNkZWZpbmUgX1MzOTBfREVMQVlfSAorCitleHRlcm4gdm9pZCBfX3VkZWxheSh1bnNpZ25lZCBsb25nIHVzZWNzKTsKK2V4dGVybiB2b2lkIF9fZGVsYXkodW5zaWduZWQgbG9uZyBsb29wcyk7CisKKyNkZWZpbmUgdWRlbGF5KG4pIF9fdWRlbGF5KG4pCisKKyNlbmRpZiAvKiBkZWZpbmVkKF9TMzkwX0RFTEFZX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL2RpdjY0LmggYi9pbmNsdWRlL2FzbS1zMzkwL2RpdjY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYwOThkYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvZGl2NjQuaApAQCAtMCwwICsxLDQ5IEBACisjaWZuZGVmIF9fUzM5MF9ESVY2NAorI2RlZmluZSBfX1MzOTBfRElWNjQKKworI2lmbmRlZiBfX3MzOTB4X18KKworLyogZm9yIGRvX2RpdiAiYmFzZSIgbmVlZHMgdG8gYmUgc21hbGxlciB0aGFuIDJeMzEtMSAqLworI2RlZmluZSBkb19kaXYobiwgYmFzZSkgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl1bnNpZ25lZCBsb25nIGxvbmcgX19uID0gKG4pOwkJCQlcCisJdW5zaWduZWQgbG9uZyBfX3I7CQkJCQlcCisJCQkJCQkJCVwKKwlhc20gKCIgICBzbHIgIDAsMFxuIgkJCQkJXAorCSAgICAgIiAgIGwgICAgMSwlMVxuIgkJCQkJXAorCSAgICAgIiAgIHNyZGwgMCwxXG4iCQkJCQlcCisJICAgICAiICAgZHIgICAwLCUyXG4iCQkJCQlcCisJICAgICAiICAgYWxyICAxLDFcbiIJCQkJCVwKKwkgICAgICIgICBhbHIgIDAsMFxuIgkJCQkJXAorCSAgICAgIiAgIGxoaSAgMiwxXG4iCQkJCQlcCisJICAgICAiICAgbiAgICAyLCUxXG4iCQkJCQlcCisJICAgICAiICAgYWxyICAwLDJcbiIJCQkJCVwKKwkgICAgICIgICBjbHIgIDAsJTJcbiIJCQkJCVwKKwkgICAgICIgICBqbCAgIDBmXG4iCQkJCQlcCisJICAgICAiICAgc2xyICAwLCUyXG4iCQkJCQlcCisgICAgICAgICAgICAgIiAgIGFoaSAgMSwxXG4iCQkJCQlcCisJICAgICAiMDogc3QgICAxLCUxXG4iCQkJCQlcCisJICAgICAiICAgbCAgICAxLDQrJTFcbiIJCQkJCVwKKwkgICAgICIgICBzcmRsIDAsMVxuIgkJCQkJXAorICAgICAgICAgICAgICIgICBkciAgIDAsJTJcbiIJCQkJCVwKKwkgICAgICIgICBhbHIgIDEsMVxuIgkJCQkJXAorCSAgICAgIiAgIGFsciAgMCwwXG4iCQkJCQlcCisJICAgICAiICAgbGhpICAyLDFcbiIJCQkJCVwKKwkgICAgICIgICBuICAgIDIsNCslMVxuIgkJCQkJXAorCSAgICAgIiAgIGFsciAgMCwyXG4iCQkJCQlcCisJICAgICAiICAgY2xyICAwLCUyXG4iCQkJCQlcCisgICAgICAgICAgICAgIiAgIGpsICAgMWZcbiIJCQkJCVwKKwkgICAgICIgICBzbHIgIDAsJTJcbiIJCQkJCVwKKwkgICAgICIgICBhaGkgIDEsMVxuIgkJCQkJXAorCSAgICAgIjE6IHN0ICAgMSw0KyUxXG4iCQkJCQlcCisgICAgICAgICAgICAgIiAgIGxyICAgJTAsMCIJCQkJCVwKKwkgICAgIDogIj1kIiAoX19yKSwgIj1tIiAoX19uKQkJCQlcCisJICAgICA6ICJkIiAoYmFzZSksICJtIiAoX19uKSA6ICIwIiwgIjEiLCAiMiIsICJjYyIgKTsJXAorCShuKSA9IChfX24pOwkJCQkJCVwKKyAgICAgICAgX19yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9KQorCisjZWxzZSAvKiBfX3MzOTB4X18gKi8KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9kaXY2NC5oPgorI2VuZGlmIC8qIF9fczM5MHhfXyAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvZG1hLW1hcHBpbmcuaCBiL2luY2x1ZGUvYXNtLXMzOTAvZG1hLW1hcHBpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWJiN2IwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tczM5MC9kbWEtbWFwcGluZy5oCkBAIC0wLDAgKzEsMTQgQEAKKy8qCisgKiAgaW5jbHVkZS9hc20tczM5MC9kbWEtbWFwcGluZy5oCisgKgorICogIFMzOTAgdmVyc2lvbgorICoKKyAqICBUaGlzIGZpbGUgZXhpc3RzIHNvIHRoYXQgI2luY2x1ZGUgPGRtYS1tYXBwaW5nLmg+IGRvZXNuJ3QgYnJlYWsgYW55dGhpbmcuCisgKi8KKworI2lmbmRlZiBfQVNNX0RNQV9NQVBQSU5HX0gKKyNkZWZpbmUgX0FTTV9ETUFfTUFQUElOR19ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9kbWEtbWFwcGluZy1icm9rZW4uaD4KKworI2VuZGlmIC8qIF9BU01fRE1BX01BUFBJTkdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9kbWEuaCBiL2luY2x1ZGUvYXNtLXMzOTAvZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI3MjBjNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvZG1hLmgKQEAgLTAsMCArMSwxNiBAQAorLyoKKyAqICBpbmNsdWRlL2FzbS1zMzkwL2RtYS5oCisgKgorICogIFMzOTAgdmVyc2lvbgorICovCisKKyNpZm5kZWYgX0FTTV9ETUFfSAorI2RlZmluZSBfQVNNX0RNQV9ICisKKyNpbmNsdWRlIDxhc20vaW8uaD4JCS8qIG5lZWQgYnl0ZSBJTyAqLworCisjZGVmaW5lIE1BWF9ETUFfQUREUkVTUyAgICAgICAgIDB4ODAwMDAwMDAKKworI2RlZmluZSBmcmVlX2RtYSh4KQorCisjZW5kaWYgLyogX0FTTV9ETUFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9lYmNkaWMuaCBiL2luY2x1ZGUvYXNtLXMzOTAvZWJjZGljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBlODFlOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvZWJjZGljLmgKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqICBpbmNsdWRlL2FzbS1zMzkwL2ViY2RpYy5oCisgKiAgICBFQkNESUMgLT4gQVNDSUksIEFTQ0lJIC0+IEVCQ0RJQyBjb252ZXJzaW9uIHJvdXRpbmVzLgorICoKKyAqICBTMzkwIHZlcnNpb24KKyAqICAgIENvcHlyaWdodCAoQykgMTk5OSBJQk0gRGV1dHNjaGxhbmQgRW50d2lja2x1bmcgR21iSCwgSUJNIENvcnBvcmF0aW9uCisgKiAgICBBdXRob3Iocyk6IE1hcnRpbiBTY2h3aWRlZnNreSA8c2Nod2lkZWZza3lAZGUuaWJtLmNvbT4KKyAqLworCisjaWZuZGVmIF9FQkNESUNfSAorI2RlZmluZSBfRUJDRElDX0gKKworI2lmbmRlZiBfUzM5MF9UWVBFU19ICisjaW5jbHVkZSA8dHlwZXMuaD4KKyNlbmRpZgorCitleHRlcm4gX191OCBfYXNjZWJjXzUwMFtdOyAgIC8qIEFTQ0lJIC0+IEVCQ0RJQyA1MDAgY29udmVyc2lvbiB0YWJsZSAqLworZXh0ZXJuIF9fdTggX2ViY2FzY181MDBbXTsgICAvKiBFQkNESUMgNTAwIC0+IEFTQ0lJIGNvbnZlcnNpb24gdGFibGUgKi8KK2V4dGVybiBfX3U4IF9hc2NlYmNbXTsgICAvKiBBU0NJSSAtPiBFQkNESUMgY29udmVyc2lvbiB0YWJsZSAqLworZXh0ZXJuIF9fdTggX2ViY2FzY1tdOyAgIC8qIEVCQ0RJQyAtPiBBU0NJSSBjb252ZXJzaW9uIHRhYmxlICovCitleHRlcm4gX191OCBfZWJjX3RvbG93ZXJbXTsgLyogRUJDRElDIC0+IGxvd2VyY2FzZSAqLworZXh0ZXJuIF9fdTggX2ViY190b3VwcGVyW107IC8qIEVCQ0RJQyAtPiB1cHBlcmNhc2UgKi8KKworZXh0ZXJuIF9faW5saW5lX18gdm9pZAorY29kZXBhZ2VfY29udmVydChjb25zdCBfX3U4ICpjb2RlcGFnZSwgdm9sYXRpbGUgX191OCAqIGFkZHIsIHVuc2lnbmVkIGxvbmcgbnIpCit7CisJaWYgKG5yLS0gPD0gMCkKKwkJcmV0dXJuOworICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJIiAgIGJyYXMgMSwxZlxuIgorCQkiICAgdHIgICAwKDEsJTApLDAoJTIpXG4iCisgICAgICAgICAgICAgICAgIjA6IHRyICAgMCgyNTYsJTApLDAoJTIpXG4iCisJCSIgICBsYSAgICUwLDI1NiglMClcbiIKKwkJIjE6IGFoaSAgJTEsLTI1NlxuIgorCQkiICAgam5tICAwYlxuIgorCQkiICAgZXggICAlMSwwKDEpIgorICAgICAgICAgICAgICAgIDogIismYSIgKGFkZHIpLCAiKyZhIiAobnIpCisgICAgICAgICAgICAgICAgOiAiYSIgKGNvZGVwYWdlKSA6ICJjYyIsICJtZW1vcnkiLCAiMSIgKTsKK30KKworI2RlZmluZSBBU0NFQkMoYWRkcixucikgY29kZXBhZ2VfY29udmVydChfYXNjZWJjLCBhZGRyLCBucikKKyNkZWZpbmUgRUJDQVNDKGFkZHIsbnIpIGNvZGVwYWdlX2NvbnZlcnQoX2ViY2FzYywgYWRkciwgbnIpCisjZGVmaW5lIEFTQ0VCQ181MDAoYWRkcixucikgY29kZXBhZ2VfY29udmVydChfYXNjZWJjXzUwMCwgYWRkciwgbnIpCisjZGVmaW5lIEVCQ0FTQ181MDAoYWRkcixucikgY29kZXBhZ2VfY29udmVydChfZWJjYXNjXzUwMCwgYWRkciwgbnIpCisjZGVmaW5lIEVCQ19UT0xPV0VSKGFkZHIsbnIpIGNvZGVwYWdlX2NvbnZlcnQoX2ViY190b2xvd2VyLCBhZGRyLCBucikKKyNkZWZpbmUgRUJDX1RPVVBQRVIoYWRkcixucikgY29kZXBhZ2VfY29udmVydChfZWJjX3RvdXBwZXIsIGFkZHIsIG5yKQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9lbGYuaCBiL2luY2x1ZGUvYXNtLXMzOTAvZWxmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I4YmQ0NgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvZWxmLmgKQEAgLTAsMCArMSwyMTUgQEAKKy8qCisgKiAgaW5jbHVkZS9hc20tczM5MC9lbGYuaAorICoKKyAqICBTMzkwIHZlcnNpb24KKyAqCisgKiAgRGVyaXZlZCBmcm9tICJpbmNsdWRlL2FzbS1pMzg2L2VsZi5oIgorICovCisKKyNpZm5kZWYgX19BU01TMzkwX0VMRl9ICisjZGVmaW5lIF9fQVNNUzM5MF9FTEZfSAorCisvKiBzMzkwIHJlbG9jYXRpb25zIGRlZmluZWQgYnkgdGhlIEFCSXMgKi8KKyNkZWZpbmUgUl8zOTBfTk9ORQkJMAkvKiBObyByZWxvYy4gICovCisjZGVmaW5lIFJfMzkwXzgJCQkxCS8qIERpcmVjdCA4IGJpdC4gICovCisjZGVmaW5lIFJfMzkwXzEyCQkyCS8qIERpcmVjdCAxMiBiaXQuICAqLworI2RlZmluZSBSXzM5MF8xNgkJMwkvKiBEaXJlY3QgMTYgYml0LiAgKi8KKyNkZWZpbmUgUl8zOTBfMzIJCTQJLyogRGlyZWN0IDMyIGJpdC4gICovCisjZGVmaW5lIFJfMzkwX1BDMzIJCTUJLyogUEMgcmVsYXRpdmUgMzIgYml0LgkqLworI2RlZmluZSBSXzM5MF9HT1QxMgkJNgkvKiAxMiBiaXQgR09UIG9mZnNldC4gICovCisjZGVmaW5lIFJfMzkwX0dPVDMyCQk3CS8qIDMyIGJpdCBHT1Qgb2Zmc2V0LiAgKi8KKyNkZWZpbmUgUl8zOTBfUExUMzIJCTgJLyogMzIgYml0IFBDIHJlbGF0aXZlIFBMVCBhZGRyZXNzLiAgKi8KKyNkZWZpbmUgUl8zOTBfQ09QWQkJOQkvKiBDb3B5IHN5bWJvbCBhdCBydW50aW1lLiAgKi8KKyNkZWZpbmUgUl8zOTBfR0xPQl9EQVQJCTEwCS8qIENyZWF0ZSBHT1QgZW50cnkuICAqLworI2RlZmluZSBSXzM5MF9KTVBfU0xPVAkJMTEJLyogQ3JlYXRlIFBMVCBlbnRyeS4gICovCisjZGVmaW5lIFJfMzkwX1JFTEFUSVZFCQkxMgkvKiBBZGp1c3QgYnkgcHJvZ3JhbSBiYXNlLiAgKi8KKyNkZWZpbmUgUl8zOTBfR09UT0ZGMzIJCTEzCS8qIDMyIGJpdCBvZmZzZXQgdG8gR09ULgkgKi8KKyNkZWZpbmUgUl8zOTBfR09UUEMJCTE0CS8qIDMyIGJpdCBQQyByZWwuIG9mZnNldCB0byBHT1QuICAqLworI2RlZmluZSBSXzM5MF9HT1QxNgkJMTUJLyogMTYgYml0IEdPVCBvZmZzZXQuICAqLworI2RlZmluZSBSXzM5MF9QQzE2CQkxNgkvKiBQQyByZWxhdGl2ZSAxNiBiaXQuCSovCisjZGVmaW5lIFJfMzkwX1BDMTZEQkwJCTE3CS8qIFBDIHJlbGF0aXZlIDE2IGJpdCBzaGlmdGVkIGJ5IDEuICAqLworI2RlZmluZSBSXzM5MF9QTFQxNkRCTAkJMTgJLyogMTYgYml0IFBDIHJlbC4gUExUIHNoaWZ0ZWQgYnkgMS4gICovCisjZGVmaW5lIFJfMzkwX1BDMzJEQkwJCTE5CS8qIFBDIHJlbGF0aXZlIDMyIGJpdCBzaGlmdGVkIGJ5IDEuICAqLworI2RlZmluZSBSXzM5MF9QTFQzMkRCTAkJMjAJLyogMzIgYml0IFBDIHJlbC4gUExUIHNoaWZ0ZWQgYnkgMS4gICovCisjZGVmaW5lIFJfMzkwX0dPVFBDREJMCQkyMQkvKiAzMiBiaXQgUEMgcmVsLiBHT1Qgc2hpZnRlZCBieSAxLiAgKi8KKyNkZWZpbmUgUl8zOTBfNjQJCTIyCS8qIERpcmVjdCA2NCBiaXQuICAqLworI2RlZmluZSBSXzM5MF9QQzY0CQkyMwkvKiBQQyByZWxhdGl2ZSA2NCBiaXQuCSovCisjZGVmaW5lIFJfMzkwX0dPVDY0CQkyNAkvKiA2NCBiaXQgR09UIG9mZnNldC4gICovCisjZGVmaW5lIFJfMzkwX1BMVDY0CQkyNQkvKiA2NCBiaXQgUEMgcmVsYXRpdmUgUExUIGFkZHJlc3MuICAqLworI2RlZmluZSBSXzM5MF9HT1RFTlQJCTI2CS8qIDMyIGJpdCBQQyByZWwuIHRvIEdPVCBlbnRyeSA+PiAxLiAqLworI2RlZmluZSBSXzM5MF9HT1RPRkYxNgkJMjcJLyogMTYgYml0IG9mZnNldCB0byBHT1QuICovCisjZGVmaW5lIFJfMzkwX0dPVE9GRjY0CQkyOAkvKiA2NCBiaXQgb2Zmc2V0IHRvIEdPVC4gKi8KKyNkZWZpbmUgUl8zOTBfR09UUExUMTIJCTI5CS8qIDEyIGJpdCBvZmZzZXQgdG8ganVtcCBzbG90LgkqLworI2RlZmluZSBSXzM5MF9HT1RQTFQxNgkJMzAJLyogMTYgYml0IG9mZnNldCB0byBqdW1wIHNsb3QuCSovCisjZGVmaW5lIFJfMzkwX0dPVFBMVDMyCQkzMQkvKiAzMiBiaXQgb2Zmc2V0IHRvIGp1bXAgc2xvdC4JKi8KKyNkZWZpbmUgUl8zOTBfR09UUExUNjQJCTMyCS8qIDY0IGJpdCBvZmZzZXQgdG8ganVtcCBzbG90LgkqLworI2RlZmluZSBSXzM5MF9HT1RQTFRFTlQJCTMzCS8qIDMyIGJpdCByZWwuIG9mZnNldCB0byBqdW1wIHNsb3QuICAqLworI2RlZmluZSBSXzM5MF9QTFRPRkYxNgkJMzQJLyogMTYgYml0IG9mZnNldCBmcm9tIEdPVCB0byBQTFQuICovCisjZGVmaW5lIFJfMzkwX1BMVE9GRjMyCQkzNQkvKiAzMiBiaXQgb2Zmc2V0IGZyb20gR09UIHRvIFBMVC4gKi8KKyNkZWZpbmUgUl8zOTBfUExUT0ZGNjQJCTM2CS8qIDE2IGJpdCBvZmZzZXQgZnJvbSBHT1QgdG8gUExULiAqLworI2RlZmluZSBSXzM5MF9UTFNfTE9BRAkJMzcJLyogVGFnIGZvciBsb2FkIGluc24gaW4gVExTIGNvZGUuICovCisjZGVmaW5lIFJfMzkwX1RMU19HRENBTEwJMzgJLyogVGFnIGZvciBmdW5jdGlvbiBjYWxsIGluIGdlbmVyYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkeW5hbWljIFRMUyBjb2RlLiAgKi8KKyNkZWZpbmUgUl8zOTBfVExTX0xEQ0FMTAkzOQkvKiBUYWcgZm9yIGZ1bmN0aW9uIGNhbGwgaW4gbG9jYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkeW5hbWljIFRMUyBjb2RlLiAgKi8KKyNkZWZpbmUgUl8zOTBfVExTX0dEMzIJCTQwCS8qIERpcmVjdCAzMiBiaXQgZm9yIGdlbmVyYWwgZHluYW1pYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVhZCBsb2NhbCBkYXRhLiAgKi8KKyNkZWZpbmUgUl8zOTBfVExTX0dENjQJCTQxCS8qIERpcmVjdCA2NCBiaXQgZm9yIGdlbmVyYWwgZHluYW1pYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVhZCBsb2NhbCBkYXRhLiAgKi8KKyNkZWZpbmUgUl8zOTBfVExTX0dPVElFMTIJNDIJLyogMTIgYml0IEdPVCBvZmZzZXQgZm9yIHN0YXRpYyBUTFMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9jayBvZmZzZXQuICAqLworI2RlZmluZSBSXzM5MF9UTFNfR09USUUzMgk0MwkvKiAzMiBiaXQgR09UIG9mZnNldCBmb3Igc3RhdGljIFRMUworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrIG9mZnNldC4gICovCisjZGVmaW5lIFJfMzkwX1RMU19HT1RJRTY0CTQ0CS8qIDY0IGJpdCBHT1Qgb2Zmc2V0IGZvciBzdGF0aWMgVExTCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2sgb2Zmc2V0LiAgKi8KKyNkZWZpbmUgUl8zOTBfVExTX0xETTMyCQk0NQkvKiBEaXJlY3QgMzIgYml0IGZvciBsb2NhbCBkeW5hbWljCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWFkIGxvY2FsIGRhdGEgaW4gTEQgY29kZS4gICovCisjZGVmaW5lIFJfMzkwX1RMU19MRE02NAkJNDYJLyogRGlyZWN0IDY0IGJpdCBmb3IgbG9jYWwgZHluYW1pYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVhZCBsb2NhbCBkYXRhIGluIExEIGNvZGUuICAqLworI2RlZmluZSBSXzM5MF9UTFNfSUUzMgkJNDcJLyogMzIgYml0IGFkZHJlc3Mgb2YgR09UIGVudHJ5IGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lZ2F0ZWQgc3RhdGljIFRMUyBibG9jayBvZmZzZXQuICAqLworI2RlZmluZSBSXzM5MF9UTFNfSUU2NAkJNDgJLyogNjQgYml0IGFkZHJlc3Mgb2YgR09UIGVudHJ5IGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lZ2F0ZWQgc3RhdGljIFRMUyBibG9jayBvZmZzZXQuICAqLworI2RlZmluZSBSXzM5MF9UTFNfSUVFTlQJCTQ5CS8qIDMyIGJpdCByZWwuIG9mZnNldCB0byBHT1QgZW50cnkgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVnYXRlZCBzdGF0aWMgVExTIGJsb2NrIG9mZnNldC4gICovCisjZGVmaW5lIFJfMzkwX1RMU19MRTMyCQk1MAkvKiAzMiBiaXQgbmVnYXRlZCBvZmZzZXQgcmVsYXRpdmUgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWMgVExTIGJsb2NrLiAgKi8KKyNkZWZpbmUgUl8zOTBfVExTX0xFNjQJCTUxCS8qIDY0IGJpdCBuZWdhdGVkIG9mZnNldCByZWxhdGl2ZSB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpYyBUTFMgYmxvY2suICAqLworI2RlZmluZSBSXzM5MF9UTFNfTERPMzIJCTUyCS8qIDMyIGJpdCBvZmZzZXQgcmVsYXRpdmUgdG8gVExTCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2suICAqLworI2RlZmluZSBSXzM5MF9UTFNfTERPNjQJCTUzCS8qIDY0IGJpdCBvZmZzZXQgcmVsYXRpdmUgdG8gVExTCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2suICAqLworI2RlZmluZSBSXzM5MF9UTFNfRFRQTU9ECTU0CS8qIElEIG9mIG1vZHVsZSBjb250YWluaW5nIHN5bWJvbC4gICovCisjZGVmaW5lIFJfMzkwX1RMU19EVFBPRkYJNTUJLyogT2Zmc2V0IGluIFRMUyBibG9jay4gICovCisjZGVmaW5lIFJfMzkwX1RMU19UUE9GRgkJNTYJLyogTmVnYXRlIG9mZnNldCBpbiBzdGF0aWMgVExTCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2suICAqLworI2RlZmluZSBSXzM5MF8yMAkJNTcJLyogRGlyZWN0IDIwIGJpdC4gICovCisjZGVmaW5lIFJfMzkwX0dPVDIwCQk1OAkvKiAyMCBiaXQgR09UIG9mZnNldC4gICovCisjZGVmaW5lIFJfMzkwX0dPVFBMVDIwCQk1OQkvKiAyMCBiaXQgb2Zmc2V0IHRvIGp1bXAgc2xvdC4gICovCisjZGVmaW5lIFJfMzkwX1RMU19HT1RJRTIwCTYwCS8qIDIwIGJpdCBHT1Qgb2Zmc2V0IGZvciBzdGF0aWMgVExTCisJCQkJCSAgIGJsb2NrIG9mZnNldC4gICovCisvKiBLZWVwIHRoaXMgdGhlIGxhc3QgZW50cnkuICAqLworI2RlZmluZSBSXzM5MF9OVU0JNjEKKworLyoKKyAqIEVMRiByZWdpc3RlciBkZWZpbml0aW9ucy4uCisgKi8KKworI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vdXNlci5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4JCS8qIGZvciBzYXZlX2FjY2Vzc19yZWdzICovCisKKwordHlwZWRlZiBzMzkwX2ZwX3JlZ3MgZWxmX2ZwcmVnc2V0X3Q7Cit0eXBlZGVmIHMzOTBfcmVncyBlbGZfZ3JlZ3NldF90OworCisvKgorICogVGhlc2UgYXJlIHVzZWQgdG8gc2V0IHBhcmFtZXRlcnMgaW4gdGhlIGNvcmUgZHVtcHMuCisgKi8KKyNpZm5kZWYgX19zMzkweF9fCisjZGVmaW5lIEVMRl9DTEFTUwlFTEZDTEFTUzMyCisjZWxzZSAvKiBfX3MzOTB4X18gKi8KKyNkZWZpbmUgRUxGX0NMQVNTCUVMRkNMQVNTNjQKKyNlbmRpZiAvKiBfX3MzOTB4X18gKi8KKyNkZWZpbmUgRUxGX0RBVEEJRUxGREFUQTJNU0IKKyNkZWZpbmUgRUxGX0FSQ0gJRU1fUzM5MAorCisvKgorICogVGhpcyBpcyB1c2VkIHRvIGVuc3VyZSB3ZSBkb24ndCBsb2FkIHNvbWV0aGluZyBmb3IgdGhlIHdyb25nIGFyY2hpdGVjdHVyZS4KKyAqLworI2RlZmluZSBlbGZfY2hlY2tfYXJjaCh4KSBcCisJKCgoeCktPmVfbWFjaGluZSA9PSBFTV9TMzkwIHx8ICh4KS0+ZV9tYWNoaW5lID09IEVNX1MzOTBfT0xEKSBcCisgICAgICAgICAmJiAoeCktPmVfaWRlbnRbRUlfQ0xBU1NdID09IEVMRl9DTEFTUykgCisKKy8qIEZvciBTVlI0L1MzOTAgdGhlIGZ1bmN0aW9uIHBvaW50ZXIgdG8gYmUgcmVnaXN0ZXJlZCB3aXRoIGBhdGV4aXRgIGlzCisgICBwYXNzZWQgaW4gUjE0LiAqLworI2RlZmluZSBFTEZfUExBVF9JTklUKF9yLCBsb2FkX2FkZHIpIFwKKwlkbyB7IFwKKwkJX3ItPmdwcnNbMTRdID0gMDsgXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgVVNFX0VMRl9DT1JFX0RVTVAKKyNkZWZpbmUgRUxGX0VYRUNfUEFHRVNJWkUJNDA5NgorCisvKiBUaGlzIGlzIHRoZSBsb2NhdGlvbiB0aGF0IGFuIEVUX0RZTiBwcm9ncmFtIGlzIGxvYWRlZCBpZiBleGVjJ2VkLiAgVHlwaWNhbAorICAgdXNlIG9mIHRoaXMgaXMgdG8gaW52b2tlICIuL2xkLnNvIHNvbWVwcm9nIiB0byB0ZXN0IG91dCBhIG5ldyB2ZXJzaW9uIG9mCisgICB0aGUgbG9hZGVyLiAgV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBpdCBpcyBvdXQgb2YgdGhlIHdheSBvZiB0aGUgcHJvZ3JhbQorICAgdGhhdCBpdCB3aWxsICJleGVjIiwgYW5kIHRoYXQgdGhlcmUgaXMgc3VmZmljaWVudCByb29tIGZvciB0aGUgYnJrLiAgKi8KKworI2lmbmRlZiBfX3MzOTB4X18KKyNkZWZpbmUgRUxGX0VUX0RZTl9CQVNFICAgICAgICAgKChUQVNLX1NJWkUgJiAweDgwMDAwMDAwKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gVEFTS19TSVpFIC8gMyAqIDIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDIgKiBUQVNLX1NJWkUgLyAzKQorI2Vsc2UgLyogX19zMzkweF9fICovCisjZGVmaW5lIEVMRl9FVF9EWU5fQkFTRSAgICAgICAgIChUQVNLX1NJWkUgLyAzICogMikKKyNlbmRpZiAvKiBfX3MzOTB4X18gKi8KKworLyogV293LCB0aGUgIm1haW4iIGFyY2ggbmVlZHMgYXJjaCBkZXBlbmRlbnQgZnVuY3Rpb25zIHRvby4uIDopICovCisKKy8qIHJlZ3MgaXMgc3RydWN0IHB0X3JlZ3MsIHByX3JlZyBpcyBlbGZfZ3JlZ3NldF90ICh3aGljaCBpcworICAgbm93IHN0cnVjdF91c2VyX3JlZ3MsIHRoZXkgYXJlIGRpZmZlcmVudCkgKi8KKworc3RhdGljIGlubGluZSBpbnQgZHVtcF9yZWdzKHN0cnVjdCBwdF9yZWdzICpwdHJlZ3MsIGVsZl9ncmVnc2V0X3QgKnJlZ3MpCit7CisJbWVtY3B5KCZyZWdzLT5wc3csICZwdHJlZ3MtPnBzdywgc2l6ZW9mKHJlZ3MtPnBzdykrc2l6ZW9mKHJlZ3MtPmdwcnMpKTsKKwlzYXZlX2FjY2Vzc19yZWdzKHJlZ3MtPmFjcnMpOworCXJlZ3MtPm9yaWdfZ3ByMiA9IHB0cmVncy0+b3JpZ19ncHIyOworCXJldHVybiAxOworfQorCisjZGVmaW5lIEVMRl9DT1JFX0NPUFlfUkVHUyhwcl9yZWcsIHJlZ3MpIGR1bXBfcmVncyhyZWdzLCAmcHJfcmVnKTsKKworc3RhdGljIGlubGluZSBpbnQgZHVtcF90YXNrX3JlZ3Moc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGVsZl9ncmVnc2V0X3QgKnJlZ3MpCit7CisJc3RydWN0IHB0X3JlZ3MgKnB0cmVncyA9IF9fS1NUS19QVFJFR1ModHNrKTsKKwltZW1jcHkoJnJlZ3MtPnBzdywgJnB0cmVncy0+cHN3LCBzaXplb2YocmVncy0+cHN3KStzaXplb2YocmVncy0+Z3BycykpOworCW1lbWNweShyZWdzLT5hY3JzLCB0c2stPnRocmVhZC5hY3JzLCBzaXplb2YocmVncy0+YWNycykpOworCXJlZ3MtPm9yaWdfZ3ByMiA9IHB0cmVncy0+b3JpZ19ncHIyOworCXJldHVybiAxOworfQorCisjZGVmaW5lIEVMRl9DT1JFX0NPUFlfVEFTS19SRUdTKHRzaywgcmVncykgZHVtcF90YXNrX3JlZ3ModHNrLCByZWdzKQorCitzdGF0aWMgaW5saW5lIGludCBkdW1wX3Rhc2tfZnB1KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBlbGZfZnByZWdzZXRfdCAqZnByZWdzKQoreworCWlmICh0c2sgPT0gY3VycmVudCkKKwkJc2F2ZV9mcF9yZWdzKGZwcmVncyk7CisJZWxzZQorCQltZW1jcHkoZnByZWdzLCAmdHNrLT50aHJlYWQuZnBfcmVncywgc2l6ZW9mKGVsZl9mcHJlZ3NldF90KSk7CisJcmV0dXJuIDE7Cit9CisKKyNkZWZpbmUgRUxGX0NPUkVfQ09QWV9GUFJFR1ModHNrLCBmcHJlZ3MpIGR1bXBfdGFza19mcHUodHNrLCBmcHJlZ3MpCisKKworLyogVGhpcyB5aWVsZHMgYSBtYXNrIHRoYXQgdXNlciBwcm9ncmFtcyBjYW4gdXNlIHRvIGZpZ3VyZSBvdXQgd2hhdAorICAgaW5zdHJ1Y3Rpb24gc2V0IHRoaXMgQ1BVIHN1cHBvcnRzLiAqLworCisjZGVmaW5lIEVMRl9IV0NBUCAoMCkKKworLyogVGhpcyB5aWVsZHMgYSBzdHJpbmcgdGhhdCBsZC5zbyB3aWxsIHVzZSB0byBsb2FkIGltcGxlbWVudGF0aW9uCisgICBzcGVjaWZpYyBsaWJyYXJpZXMgZm9yIG9wdGltaXphdGlvbi4gIFRoaXMgaXMgbW9yZSBzcGVjaWZpYyBpbgorICAgaW50ZW50IHRoYW4gcG9raW5nIGF0IHVuYW1lIG9yIC9wcm9jL2NwdWluZm8uCisKKyAgIEZvciB0aGUgbW9tZW50LCB3ZSBoYXZlIG9ubHkgb3B0aW1pemF0aW9ucyBmb3IgdGhlIEludGVsIGdlbmVyYXRpb25zLAorICAgYnV0IHRoYXQgY291bGQgY2hhbmdlLi4uICovCisKKyNkZWZpbmUgRUxGX1BMQVRGT1JNIChOVUxMKQorCisjaWZkZWYgX19LRVJORUxfXworI2lmbmRlZiBfX3MzOTB4X18KKyNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4LCBpYmNzMikgc2V0X3BlcnNvbmFsaXR5KChpYmNzMik/UEVSX1NWUjQ6UEVSX0xJTlVYKQorI2Vsc2UgLyogX19zMzkweF9fICovCisjZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCwgaWJjczIpCQkJXAorZG8gewkJCQkJCQlcCisJaWYgKGliY3MyKQkJCQkJXAorCQlzZXRfcGVyc29uYWxpdHkoUEVSX1NWUjQpOwkJXAorCWVsc2UgaWYgKGN1cnJlbnQtPnBlcnNvbmFsaXR5ICE9IFBFUl9MSU5VWDMyKQlcCisJCXNldF9wZXJzb25hbGl0eShQRVJfTElOVVgpOwkJXAorCWNsZWFyX3RocmVhZF9mbGFnKFRJRl8zMUJJVCk7CQkJXAorfSB3aGlsZSAoMCkKKyNlbmRpZiAvKiBfX3MzOTB4X18gKi8KKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvZXJybm8uaCBiL2luY2x1ZGUvYXNtLXMzOTAvZXJybm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDFkNWIzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tczM5MC9lcnJuby5oCkBAIC0wLDAgKzEsMTMgQEAKKy8qCisgKiAgaW5jbHVkZS9hc20tczM5MC9lcnJuby5oCisgKgorICogIFMzOTAgdmVyc2lvbgorICoKKyAqLworCisjaWZuZGVmIF9TMzkwX0VSUk5PX0gKKyNkZWZpbmUgX1MzOTBfRVJSTk9fSAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZXJybm8uaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL2V4dG1lbS5oIGIvaW5jbHVkZS9hc20tczM5MC9leHRtZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODgwMmM5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tczM5MC9leHRtZW0uaApAQCAtMCwwICsxLDMyIEBACisvKgorICogIGluY2x1ZGUvYXNtLXMzOTB4L2V4dG1lbS5oCisgKgorICogIGRlZmluaXRpb25zIGZvciBleHRlcm5hbCBtZW1vcnkgc2VnbWVudCBzdXBwb3J0CisgKiAgQ29weXJpZ2h0IChDKSAyMDAzIElCTSBEZXV0c2NobGFuZCBFbnR3aWNrbHVuZyBHbWJILCBJQk0gQ29ycG9yYXRpb24KKyAqLworCisjaWZuZGVmIF9BU01fUzM5MFhfRENTU19ICisjZGVmaW5lIF9BU01fUzM5MFhfRENTU19ICisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisvKiBwb3NzaWJsZSB2YWx1ZXMgZm9yIHNlZ21lbnQgdHlwZSBhcyByZXR1cm5lZCBieSBzZWdtZW50X2luZm8gKi8KKyNkZWZpbmUgU0VHX1RZUEVfU1cgMAorI2RlZmluZSBTRUdfVFlQRV9FVyAxCisjZGVmaW5lIFNFR19UWVBFX1NSIDIKKyNkZWZpbmUgU0VHX1RZUEVfRVIgMworI2RlZmluZSBTRUdfVFlQRV9TTiA0CisjZGVmaW5lIFNFR19UWVBFX0VOIDUKKyNkZWZpbmUgU0VHX1RZUEVfU0MgNgorI2RlZmluZSBTRUdfVFlQRV9FV0VOIDcKKworI2RlZmluZSBTRUdNRU5UX1NIQVJFRCAwCisjZGVmaW5lIFNFR01FTlRfRVhDTFVTSVZFIDEKKworZXh0ZXJuIGludCBzZWdtZW50X2xvYWQgKGNoYXIgKm5hbWUsaW50IHNlZ3R5cGUsdW5zaWduZWQgbG9uZyAqYWRkcix1bnNpZ25lZCBsb25nICpsZW5ndGgpOworZXh0ZXJuIHZvaWQgc2VnbWVudF91bmxvYWQoY2hhciAqbmFtZSk7CitleHRlcm4gdm9pZCBzZWdtZW50X3NhdmUoY2hhciAqbmFtZSk7CitleHRlcm4gaW50IHNlZ21lbnRfdHlwZSAoY2hhciogbmFtZSk7CitleHRlcm4gaW50IHNlZ21lbnRfbW9kaWZ5X3NoYXJlZCAoY2hhciAqbmFtZSwgaW50IGRvX25vbnNoYXJlZCk7CisKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL2ZjbnRsLmggYi9pbmNsdWRlL2FzbS1zMzkwL2ZjbnRsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhmNjkyYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvZmNudGwuaApAQCAtMCwwICsxLDk3IEBACisvKgorICogIGluY2x1ZGUvYXNtLXMzOTAvZmNudGwuaAorICoKKyAqICBTMzkwIHZlcnNpb24KKyAqCisgKiAgRGVyaXZlZCBmcm9tICJpbmNsdWRlL2FzbS1pMzg2L2ZjbnRsLmgiCisgKi8KKyNpZm5kZWYgX1MzOTBfRkNOVExfSAorI2RlZmluZSBfUzM5MF9GQ05UTF9ICisKKy8qIG9wZW4vZmNudGwgLSBPX1NZTkMgaXMgb25seSBpbXBsZW1lbnRlZCBvbiBibG9ja3MgZGV2aWNlcyBhbmQgb24gZmlsZXMKKyAgIGxvY2F0ZWQgb24gYW4gZXh0MiBmaWxlIHN5c3RlbSAqLworI2RlZmluZSBPX0FDQ01PREUJICAgMDAwMworI2RlZmluZSBPX1JET05MWQkgICAgIDAwCisjZGVmaW5lIE9fV1JPTkxZCSAgICAgMDEKKyNkZWZpbmUgT19SRFdSCQkgICAgIDAyCisjZGVmaW5lIE9fQ1JFQVQJCSAgIDAxMDAJLyogbm90IGZjbnRsICovCisjZGVmaW5lIE9fRVhDTAkJICAgMDIwMAkvKiBub3QgZmNudGwgKi8KKyNkZWZpbmUgT19OT0NUVFkJICAgMDQwMAkvKiBub3QgZmNudGwgKi8KKyNkZWZpbmUgT19UUlVOQwkJICAwMTAwMAkvKiBub3QgZmNudGwgKi8KKyNkZWZpbmUgT19BUFBFTkQJICAwMjAwMAorI2RlZmluZSBPX05PTkJMT0NLCSAgMDQwMDAKKyNkZWZpbmUgT19OREVMQVkJT19OT05CTE9DSworI2RlZmluZSBPX1NZTkMJCSAwMTAwMDAKKyNkZWZpbmUgRkFTWU5DCQkgMDIwMDAwCS8qIGZjbnRsLCBmb3IgQlNEIGNvbXBhdGliaWxpdHkgKi8KKyNkZWZpbmUgT19ESVJFQ1QJIDA0MDAwMAkvKiBkaXJlY3QgZGlzayBhY2Nlc3MgaGludCAqLworI2RlZmluZSBPX0xBUkdFRklMRQkwMTAwMDAwCisjZGVmaW5lIE9fRElSRUNUT1JZCTAyMDAwMDAJLyogbXVzdCBiZSBhIGRpcmVjdG9yeSAqLworI2RlZmluZSBPX05PRk9MTE9XCTA0MDAwMDAgLyogZG9uJ3QgZm9sbG93IGxpbmtzICovCisjZGVmaW5lIE9fTk9BVElNRQkwMTAwMDAwMAorCisjZGVmaW5lIEZfRFVQRkQJCTAJLyogZHVwICovCisjZGVmaW5lIEZfR0VURkQJCTEJLyogZ2V0IGNsb3NlX29uX2V4ZWMgKi8KKyNkZWZpbmUgRl9TRVRGRAkJMgkvKiBzZXQvY2xlYXIgY2xvc2Vfb25fZXhlYyAqLworI2RlZmluZSBGX0dFVEZMCQkzCS8qIGdldCBmaWxlLT5mX2ZsYWdzICovCisjZGVmaW5lIEZfU0VURkwJCTQJLyogc2V0IGZpbGUtPmZfZmxhZ3MgKi8KKyNkZWZpbmUgRl9HRVRMSwkJNQorI2RlZmluZSBGX1NFVExLCQk2CisjZGVmaW5lIEZfU0VUTEtXCTcKKworI2RlZmluZSBGX1NFVE9XTgk4CS8qICBmb3Igc29ja2V0cy4gKi8KKyNkZWZpbmUgRl9HRVRPV04JOQkvKiAgZm9yIHNvY2tldHMuICovCisjZGVmaW5lIEZfU0VUU0lHCTEwCS8qICBmb3Igc29ja2V0cy4gKi8KKyNkZWZpbmUgRl9HRVRTSUcJMTEJLyogIGZvciBzb2NrZXRzLiAqLworCisjaWZuZGVmIF9fczM5MHhfXworI2RlZmluZSBGX0dFVExLNjQJMTIJLyogIHVzaW5nICdzdHJ1Y3QgZmxvY2s2NCcgKi8KKyNkZWZpbmUgRl9TRVRMSzY0CTEzCisjZGVmaW5lIEZfU0VUTEtXNjQJMTQKKyNlbmRpZiAvKiAhIF9fczM5MHhfXyAqLworCisvKiBmb3IgRl9bR0VUfFNFVF1GTCAqLworI2RlZmluZSBGRF9DTE9FWEVDCTEJLyogYWN0dWFsbHkgYW55dGhpbmcgd2l0aCBsb3cgYml0IHNldCBnb2VzICovCisKKy8qIGZvciBwb3NpeCBmY250bCgpIGFuZCBsb2NrZigpICovCisjZGVmaW5lIEZfUkRMQ0sJCTAKKyNkZWZpbmUgRl9XUkxDSwkJMQorI2RlZmluZSBGX1VOTENLCQkyCisKKy8qIGZvciBvbGQgaW1wbGVtZW50YXRpb24gb2YgYnNkIGZsb2NrICgpICovCisjZGVmaW5lIEZfRVhMQ0sJCTQJLyogb3IgMyAqLworI2RlZmluZSBGX1NITENLCQk4CS8qIG9yIDQgKi8KKworLyogZm9yIGxlYXNlcyAqLworI2RlZmluZSBGX0lOUFJPR1JFU1MJMTYKKworLyogb3BlcmF0aW9ucyBmb3IgYnNkIGZsb2NrKCksIGFsc28gdXNlZCBieSB0aGUga2VybmVsIGltcGxlbWVudGF0aW9uICovCisjZGVmaW5lIExPQ0tfU0gJCTEJLyogc2hhcmVkIGxvY2sgKi8KKyNkZWZpbmUgTE9DS19FWAkJMgkvKiBleGNsdXNpdmUgbG9jayAqLworI2RlZmluZSBMT0NLX05CCQk0CS8qIG9yJ2Qgd2l0aCBvbmUgb2YgdGhlIGFib3ZlIHRvIHByZXZlbnQKKwkJCQkgICBibG9ja2luZyAqLworI2RlZmluZSBMT0NLX1VOCQk4CS8qIHJlbW92ZSBsb2NrICovCisKKyNkZWZpbmUgTE9DS19NQU5ECTMyCS8qIFRoaXMgaXMgYSBtYW5kYXRvcnkgZmxvY2sgKi8KKyNkZWZpbmUgTE9DS19SRUFECTY0CS8qIC4uLiBXaGljaCBhbGxvd3MgY29uY3VycmVudCByZWFkIG9wZXJhdGlvbnMgKi8KKyNkZWZpbmUgTE9DS19XUklURQkxMjgJLyogLi4uIFdoaWNoIGFsbG93cyBjb25jdXJyZW50IHdyaXRlIG9wZXJhdGlvbnMgKi8KKyNkZWZpbmUgTE9DS19SVwkJMTkyCS8qIC4uLiBXaGljaCBhbGxvd3MgY29uY3VycmVudCByZWFkICYgd3JpdGUgb3BzICovCisKK3N0cnVjdCBmbG9jayB7CisJc2hvcnQgbF90eXBlOworCXNob3J0IGxfd2hlbmNlOworCW9mZl90IGxfc3RhcnQ7CisJb2ZmX3QgbF9sZW47CisJcGlkX3QgbF9waWQ7Cit9OworCisjaWZuZGVmIF9fczM5MHhfXworc3RydWN0IGZsb2NrNjQgeworCXNob3J0ICBsX3R5cGU7CisJc2hvcnQgIGxfd2hlbmNlOworCWxvZmZfdCBsX3N0YXJ0OworCWxvZmZfdCBsX2xlbjsKKwlwaWRfdCAgbF9waWQ7Cit9OworI2VuZGlmCisjZGVmaW5lIEZfTElOVVhfU1BFQ0lGSUNfQkFTRQkxMDI0CisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvaGFyZGlycS5oIGIvaW5jbHVkZS9hc20tczM5MC9oYXJkaXJxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc5MmM1NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvaGFyZGlycS5oCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiAgaW5jbHVkZS9hc20tczM5MC9oYXJkaXJxLmgKKyAqCisgKiAgUzM5MCB2ZXJzaW9uCisgKiAgICBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBJQk0gRGV1dHNjaGxhbmQgRW50d2lja2x1bmcgR21iSCwgSUJNIENvcnBvcmF0aW9uCisgKiAgICBBdXRob3Iocyk6IE1hcnRpbiBTY2h3aWRlZnNreSAoc2Nod2lkZWZza3lAZGUuaWJtLmNvbSksCisgKiAgICAgICAgICAgICAgIERlbmlzIEpvc2VwaCBCYXJyb3cgKGRqYmFycm93QGRlLmlibS5jb20sYmFycm93X2RqQHlhaG9vLmNvbSkKKyAqCisgKiAgRGVyaXZlZCBmcm9tICJpbmNsdWRlL2FzbS1pMzg2L2hhcmRpcnEuaCIKKyAqLworCisjaWZuZGVmIF9fQVNNX0hBUkRJUlFfSAorI2RlZmluZSBfX0FTTV9IQVJESVJRX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8YXNtL2xvd2NvcmUuaD4KKworLyogaXJxX2NwdXN0YXRfdCBpcyB1bnVzZWQgY3VycmVudGx5LCBidXQgY291bGQgYmUgY29udmVydGVkCisgKiBpbnRvIGEgcGVyY3B1IHZhcmlhYmxlIGluc3RlYWQgb2Ygc3RvcmluZyBzb2Z0aXJxX3BlbmRpbmcKKyAqIG9uIHRoZSBsb3djb3JlICovCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgaW50IF9fc29mdGlycV9wZW5kaW5nOworfSBpcnFfY3B1c3RhdF90OworCisjZGVmaW5lIGxvY2FsX3NvZnRpcnFfcGVuZGluZygpIChTMzkwX2xvd2NvcmUuc29mdGlycV9wZW5kaW5nKQorCisjZGVmaW5lIF9fQVJDSF9JUlFfU1RBVAorI2RlZmluZSBfX0FSQ0hfSEFTX0RPX1NPRlRJUlEKKworI2RlZmluZSBIQVJESVJRX0JJVFMJOAorCitleHRlcm4gdm9pZCBhY2NvdW50X3RpY2tzKHN0cnVjdCBwdF9yZWdzICopOworCisjZW5kaWYgLyogX19BU01fSEFSRElSUV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL2lkYWxzLmggYi9pbmNsdWRlL2FzbS1zMzkwL2lkYWxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAzODg1OAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvaWRhbHMuaApAQCAtMCwwICsxLDI1NyBAQAorLyogCisgKiBGaWxlLi4uLi4uLi4uLi46IGxpbnV4L2luY2x1ZGUvYXNtLXMzOTB4L2lkYWxzLmgKKyAqIEF1dGhvcihzKS4uLi4uLjogSG9sZ2VyIFNtb2xpbnNraSA8SG9sZ2VyLlNtb2xpbnNraUBkZS5pYm0uY29tPgorICoJCSAgICBNYXJ0aW4gU2Nod2lkZWZza3kgPHNjaHdpZGVmc2t5QGRlLmlibS5jb20+CisgKiBCdWdyZXBvcnRzLnRvLi46IDxMaW51eDM5MEBkZS5pYm0uY29tPgorICogKEMpIElCTSBDb3Jwb3JhdGlvbiwgSUJNIERldXRzY2hsYW5kIEVudHdpY2tsdW5nIEdtYkgsIDIwMDBhCisgCisgKiBIaXN0b3J5IG9mIGNoYW5nZXMKKyAqIDA3LzI0LzAwIG5ldyBmaWxlCisgKiAwNS8wNC8wMiBjb2RlIHJlc3RydWN0dXJpbmcuCisgKi8KKworI2lmbmRlZiBfUzM5MF9JREFMU19ICisjZGVmaW5lIF9TMzkwX0lEQUxTX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8YXNtL2Npby5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisKKyNpZmRlZiBfX3MzOTB4X18KKyNkZWZpbmUgSURBX1NJWkVfTE9HIDEyIC8qIDExIGZvciAyayAsIDEyIGZvciA0ayAqLworI2Vsc2UKKyNkZWZpbmUgSURBX1NJWkVfTE9HIDExIC8qIDExIGZvciAyayAsIDEyIGZvciA0ayAqLworI2VuZGlmCisjZGVmaW5lIElEQV9CTE9DS19TSVpFICgxTDw8SURBX1NJWkVfTE9HKQorCisvKgorICogVGVzdCBpZiBhbiBhZGRyZXNzL2xlbmd0aCBwYWlyIG5lZWRzIGFuIGlkYWwgbGlzdC4KKyAqLworc3RhdGljIGlubGluZSBpbnQKK2lkYWxfaXNfbmVlZGVkKHZvaWQgKnZhZGRyLCB1bnNpZ25lZCBpbnQgbGVuZ3RoKQoreworI2lmZGVmIF9fczM5MHhfXworCXJldHVybiAoKF9fcGEodmFkZHIpICsgbGVuZ3RoIC0gMSkgPj4gMzEpICE9IDA7CisjZWxzZQorCXJldHVybiAwOworI2VuZGlmCit9CisKKworLyoKKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGlkYWwgd29yZHMgbmVlZGVkIGZvciBhbiBhZGRyZXNzL2xlbmd0aCBwYWlyLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAoraWRhbF9ucl93b3Jkcyh2b2lkICp2YWRkciwgdW5zaWduZWQgaW50IGxlbmd0aCkKK3sKKyNpZmRlZiBfX3MzOTB4X18KKwlpZiAoaWRhbF9pc19uZWVkZWQodmFkZHIsIGxlbmd0aCkpCisJCXJldHVybiAoKF9fcGEodmFkZHIpICYgKElEQV9CTE9DS19TSVpFLTEpKSArIGxlbmd0aCArIAorCQkJKElEQV9CTE9DS19TSVpFLTEpKSA+PiBJREFfU0laRV9MT0c7CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENyZWF0ZSB0aGUgbGlzdCBvZiBpZGFsIHdvcmRzIGZvciBhbiBhZGRyZXNzL2xlbmd0aCBwYWlyLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgKgoraWRhbF9jcmVhdGVfd29yZHModW5zaWduZWQgbG9uZyAqaWRhd3MsIHZvaWQgKnZhZGRyLCB1bnNpZ25lZCBpbnQgbGVuZ3RoKQoreworI2lmZGVmIF9fczM5MHhfXworCXVuc2lnbmVkIGxvbmcgcGFkZHI7CisJdW5zaWduZWQgaW50IGNpZGF3OworCisJcGFkZHIgPSBfX3BhKHZhZGRyKTsKKwljaWRhdyA9ICgocGFkZHIgJiAoSURBX0JMT0NLX1NJWkUtMSkpICsgbGVuZ3RoICsgCisJCSAoSURBX0JMT0NLX1NJWkUtMSkpID4+IElEQV9TSVpFX0xPRzsKKwkqaWRhd3MrKyA9IHBhZGRyOworCXBhZGRyICY9IC1JREFfQkxPQ0tfU0laRTsKKwl3aGlsZSAoLS1jaWRhdyA+IDApIHsKKwkJcGFkZHIgKz0gSURBX0JMT0NLX1NJWkU7CisJCSppZGF3cysrID0gcGFkZHI7CisJfQorI2VuZGlmCisJcmV0dXJuIGlkYXdzOworfQorCisvKgorICogU2V0cyB0aGUgYWRkcmVzcyBvZiB0aGUgZGF0YSBpbiBDQ1cuCisgKiBJZiBuZWNlc3NhcnkgaXQgYWxsb2NhdGVzIGFuIElEQUwgYW5kIHNldHMgdGhlIGFwcHJvcHJpYXRlIGZsYWdzLgorICovCitzdGF0aWMgaW5saW5lIGludAorc2V0X25vcm1hbGl6ZWRfY2RhKHN0cnVjdCBjY3cxICogY2N3LCB2b2lkICp2YWRkcikKK3sKKyNpZmRlZiBfX3MzOTB4X18KKwl1bnNpZ25lZCBpbnQgbnJpZGF3czsKKwl1bnNpZ25lZCBsb25nICppZGFsOworCisJaWYgKGNjdy0+ZmxhZ3MgJiBDQ1dfRkxBR19JREEpCisJCXJldHVybiAtRUlOVkFMOworCW5yaWRhd3MgPSBpZGFsX25yX3dvcmRzKHZhZGRyLCBjY3ctPmNvdW50KTsKKwlpZiAobnJpZGF3cyA+IDApIHsKKwkJaWRhbCA9IGttYWxsb2MobnJpZGF3cyAqIHNpemVvZih1bnNpZ25lZCBsb25nKSwKKwkJCSAgICAgICBHRlBfQVRPTUlDIHwgR0ZQX0RNQSApOworCQlpZiAoaWRhbCA9PSBOVUxMKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCWlkYWxfY3JlYXRlX3dvcmRzKGlkYWwsIHZhZGRyLCBjY3ctPmNvdW50KTsKKwkJY2N3LT5mbGFncyB8PSBDQ1dfRkxBR19JREE7CisJCXZhZGRyID0gaWRhbDsKKwl9CisjZW5kaWYKKwljY3ctPmNkYSA9IChfX3UzMikodW5zaWduZWQgbG9uZykgdmFkZHI7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBSZWxlYXNlcyBhbnkgYWxsb2NhdGVkIElEQUwgcmVsYXRlZCB0byB0aGUgQ0NXLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2NsZWFyX25vcm1hbGl6ZWRfY2RhKHN0cnVjdCBjY3cxICogY2N3KQoreworI2lmZGVmIF9fczM5MHhfXworCWlmIChjY3ctPmZsYWdzICYgQ0NXX0ZMQUdfSURBKSB7CisJCWtmcmVlKCh2b2lkICopKHVuc2lnbmVkIGxvbmcpIGNjdy0+Y2RhKTsKKwkJY2N3LT5mbGFncyAmPSB+Q0NXX0ZMQUdfSURBOworCX0KKyNlbmRpZgorCWNjdy0+Y2RhID0gMDsKK30KKworLyoKKyAqIElkYWwgYnVmZmVyIGV4dGVuc2lvbgorICovCitzdHJ1Y3QgaWRhbF9idWZmZXIgeworCXNpemVfdCBzaXplOworCXNpemVfdCBwYWdlX29yZGVyOworCXZvaWQgKmRhdGFbMF07Cit9OworCisvKgorICogQWxsb2NhdGUgYW4gaWRhbCBidWZmZXIKKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgaWRhbF9idWZmZXIgKgoraWRhbF9idWZmZXJfYWxsb2Moc2l6ZV90IHNpemUsIGludCBwYWdlX29yZGVyKQoreworCXN0cnVjdCBpZGFsX2J1ZmZlciAqaWI7CisJaW50IG5yX2NodW5rcywgbnJfcHRycywgaTsKKworCW5yX3B0cnMgPSAoc2l6ZSArIElEQV9CTE9DS19TSVpFIC0gMSkgPj4gSURBX1NJWkVfTE9HOworCW5yX2NodW5rcyA9ICg0MDk2IDw8IHBhZ2Vfb3JkZXIpID4+IElEQV9TSVpFX0xPRzsKKwlpYiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpZGFsX2J1ZmZlcikgKyBucl9wdHJzKnNpemVvZih2b2lkICopLAorCQkgICAgIEdGUF9ETUEgfCBHRlBfS0VSTkVMKTsKKwlpZiAoaWIgPT0gTlVMTCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJaWItPnNpemUgPSBzaXplOworCWliLT5wYWdlX29yZGVyID0gcGFnZV9vcmRlcjsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfcHRyczsgaSsrKSB7CisJCWlmICgoaSAmIChucl9jaHVua3MgLSAxKSkgIT0gMCkgeworCQkJaWItPmRhdGFbaV0gPSBpYi0+ZGF0YVtpLTFdICsgSURBX0JMT0NLX1NJWkU7CisJCQljb250aW51ZTsKKwkJfQorCQlpYi0+ZGF0YVtpXSA9ICh2b2lkICopCisJCQlfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwsIHBhZ2Vfb3JkZXIpOworCQlpZiAoaWItPmRhdGFbaV0gIT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCQkvLyBOb3QgZW5vdWdoIG1lbW9yeQorCQl3aGlsZSAoaSA+PSBucl9jaHVua3MpIHsKKwkJCWkgLT0gbnJfY2h1bmtzOworCQkJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZykgaWItPmRhdGFbaV0sCisJCQkJICAgaWItPnBhZ2Vfb3JkZXIpOworCQl9CisJCWtmcmVlKGliKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJfQorCXJldHVybiBpYjsKK30KKworLyoKKyAqIEZyZWUgYW4gaWRhbCBidWZmZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAoraWRhbF9idWZmZXJfZnJlZShzdHJ1Y3QgaWRhbF9idWZmZXIgKmliKQoreworCWludCBucl9jaHVua3MsIG5yX3B0cnMsIGk7CisKKwlucl9wdHJzID0gKGliLT5zaXplICsgSURBX0JMT0NLX1NJWkUgLSAxKSA+PiBJREFfU0laRV9MT0c7CisJbnJfY2h1bmtzID0gKDQwOTYgPDwgaWItPnBhZ2Vfb3JkZXIpID4+IElEQV9TSVpFX0xPRzsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfcHRyczsgaSArPSBucl9jaHVua3MpCisJCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpIGliLT5kYXRhW2ldLCBpYi0+cGFnZV9vcmRlcik7CisJa2ZyZWUoaWIpOworfQorCisvKgorICogVGVzdCBpZiBhIGlkYWwgbGlzdCBpcyByZWFsbHkgbmVlZGVkLgorICovCitzdGF0aWMgaW5saW5lIGludAorX19pZGFsX2J1ZmZlcl9pc19uZWVkZWQoc3RydWN0IGlkYWxfYnVmZmVyICppYikKK3sKKyNpZmRlZiBfX3MzOTB4X18KKwlyZXR1cm4gaWItPnNpemUgPiAoNDA5NnVsIDw8IGliLT5wYWdlX29yZGVyKSB8fAorCQlpZGFsX2lzX25lZWRlZChpYi0+ZGF0YVswXSwgaWItPnNpemUpOworI2Vsc2UKKwlyZXR1cm4gaWItPnNpemUgPiAoNDA5NnVsIDw8IGliLT5wYWdlX29yZGVyKTsKKyNlbmRpZgorfQorCisvKgorICogU2V0IGNoYW5uZWwgZGF0YSBhZGRyZXNzIHRvIGlkYWwgYnVmZmVyLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2lkYWxfYnVmZmVyX3NldF9jZGEoc3RydWN0IGlkYWxfYnVmZmVyICppYiwgc3RydWN0IGNjdzEgKmNjdykKK3sKKwlpZiAoX19pZGFsX2J1ZmZlcl9pc19uZWVkZWQoaWIpKSB7CisJCS8vIHNldHVwIGlkYWxzOworCQljY3ctPmNkYSA9ICh1MzIpKGFkZHJfdCkgaWItPmRhdGE7CisJCWNjdy0+ZmxhZ3MgfD0gQ0NXX0ZMQUdfSURBOworCX0gZWxzZQorCQkvLyB3ZSBkbyBub3QgbmVlZCBpZGFscyAtIHVzZSBkaXJlY3QgYWRkcmVzc2luZworCQljY3ctPmNkYSA9ICh1MzIpKGFkZHJfdCkgaWItPmRhdGFbMF07CisJY2N3LT5jb3VudCA9IGliLT5zaXplOworfQorCisvKgorICogQ29weSBjb3VudCBieXRlcyBmcm9tIGFuIGlkYWwgYnVmZmVyIHRvIHVzZXIgbWVtb3J5CisgKi8KK3N0YXRpYyBpbmxpbmUgc2l6ZV90CitpZGFsX2J1ZmZlcl90b191c2VyKHN0cnVjdCBpZGFsX2J1ZmZlciAqaWIsIHZvaWQgX191c2VyICp0bywgc2l6ZV90IGNvdW50KQoreworCXNpemVfdCBsZWZ0OworCWludCBpOworCisJQlVHX09OKGNvdW50ID4gaWItPnNpemUpOworCWZvciAoaSA9IDA7IGNvdW50ID4gSURBX0JMT0NLX1NJWkU7IGkrKykgeworCQlsZWZ0ID0gY29weV90b191c2VyKHRvLCBpYi0+ZGF0YVtpXSwgSURBX0JMT0NLX1NJWkUpOworCQlpZiAobGVmdCkKKwkJCXJldHVybiBsZWZ0ICsgY291bnQgLSBJREFfQkxPQ0tfU0laRTsKKwkJdG8gPSAodm9pZCBfX3VzZXIgKikgdG8gKyBJREFfQkxPQ0tfU0laRTsKKwkJY291bnQgLT0gSURBX0JMT0NLX1NJWkU7CisJfQorCXJldHVybiBjb3B5X3RvX3VzZXIodG8sIGliLT5kYXRhW2ldLCBjb3VudCk7Cit9CisKKy8qCisgKiBDb3B5IGNvdW50IGJ5dGVzIGZyb20gdXNlciBtZW1vcnkgdG8gYW4gaWRhbCBidWZmZXIKKyAqLworc3RhdGljIGlubGluZSBzaXplX3QKK2lkYWxfYnVmZmVyX2Zyb21fdXNlcihzdHJ1Y3QgaWRhbF9idWZmZXIgKmliLCBjb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgc2l6ZV90IGNvdW50KQoreworCXNpemVfdCBsZWZ0OworCWludCBpOworCisJQlVHX09OKGNvdW50ID4gaWItPnNpemUpOworCWZvciAoaSA9IDA7IGNvdW50ID4gSURBX0JMT0NLX1NJWkU7IGkrKykgeworCQlsZWZ0ID0gY29weV9mcm9tX3VzZXIoaWItPmRhdGFbaV0sIGZyb20sIElEQV9CTE9DS19TSVpFKTsKKwkJaWYgKGxlZnQpCisJCQlyZXR1cm4gbGVmdCArIGNvdW50IC0gSURBX0JMT0NLX1NJWkU7CisJCWZyb20gPSAodm9pZCBfX3VzZXIgKikgZnJvbSArIElEQV9CTE9DS19TSVpFOworCQljb3VudCAtPSBJREFfQkxPQ0tfU0laRTsKKwl9CisJcmV0dXJuIGNvcHlfZnJvbV91c2VyKGliLT5kYXRhW2ldLCBmcm9tLCBjb3VudCk7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9pby5oIGIvaW5jbHVkZS9hc20tczM5MC9pby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxODhmZGMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL2lvLmgKQEAgLTAsMCArMSwxMjMgQEAKKy8qCisgKiAgaW5jbHVkZS9hc20tczM5MC9pby5oCisgKgorICogIFMzOTAgdmVyc2lvbgorICogICAgQ29weXJpZ2h0IChDKSAxOTk5IElCTSBEZXV0c2NobGFuZCBFbnR3aWNrbHVuZyBHbWJILCBJQk0gQ29ycG9yYXRpb24KKyAqICAgIEF1dGhvcihzKTogTWFydGluIFNjaHdpZGVmc2t5IChzY2h3aWRlZnNreUBkZS5pYm0uY29tKQorICoKKyAqICBEZXJpdmVkIGZyb20gImluY2x1ZGUvYXNtLWkzODYvaW8uaCIKKyAqLworCisjaWZuZGVmIF9TMzkwX0lPX0gKKyNkZWZpbmUgX1MzOTBfSU9fSAorCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisKKyNkZWZpbmUgSU9fU1BBQ0VfTElNSVQgMHhmZmZmZmZmZgorCisjZGVmaW5lIF9faW9fdmlydCh4KSAgICAgICAgICAgICgodm9pZCAqKShQQUdFX09GRlNFVCB8ICh1bnNpZ25lZCBsb25nKSh4KSkpCisKKy8qCisgKiBDaGFuZ2UgdmlydHVhbCBhZGRyZXNzZXMgdG8gcGh5c2ljYWwgYWRkcmVzc2VzIGFuZCB2di4KKyAqIFRoZXNlIGFyZSBwcmV0dHkgdHJpdmlhbAorICovCitleHRlcm4gaW5saW5lIHVuc2lnbmVkIGxvbmcgdmlydF90b19waHlzKHZvbGF0aWxlIHZvaWQgKiBhZGRyZXNzKQoreworCXVuc2lnbmVkIGxvbmcgcmVhbF9hZGRyZXNzOworCV9fYXNtX18gKAorI2lmbmRlZiBfX3MzOTB4X18KKwkJICIgICBscmEgICAgJTAsMCglMSlcbiIKKyAgICAgICAgICAgICAgICAgIiAgIGp6ICAgICAwZlxuIgorICAgICAgICAgICAgICAgICAiICAgc3IgICAgICUwLCUwXG4iCisjZWxzZSAvKiBfX3MzOTB4X18gKi8KKwkJICIgICBscmFnICAgJTAsMCglMSlcbiIKKyAgICAgICAgICAgICAgICAgIiAgIGp6ICAgICAwZlxuIgorICAgICAgICAgICAgICAgICAiICAgc2xnciAgICUwLCUwXG4iCisjZW5kaWYgLyogX19zMzkweF9fICovCisgICAgICAgICAgICAgICAgICIwOiIKKyAgICAgICAgICAgICAgICAgOiAiPWEiIChyZWFsX2FkZHJlc3MpIDogImEiIChhZGRyZXNzKSA6ICJjYyIgKTsKKyAgICAgICAgcmV0dXJuIHJlYWxfYWRkcmVzczsKK30KKworZXh0ZXJuIGlubGluZSB2b2lkICogcGh5c190b192aXJ0KHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKyAgICAgICAgcmV0dXJuIF9faW9fdmlydChhZGRyZXNzKTsKK30KKworLyoKKyAqIENoYW5nZSAic3RydWN0IHBhZ2UiIHRvIHBoeXNpY2FsIGFkZHJlc3MuCisgKi8KKyNkZWZpbmUgcGFnZV90b19waHlzKHBhZ2UpCSgocGFnZSAtIG1lbV9tYXApIDw8IFBBR0VfU0hJRlQpCisKK2V4dGVybiB2b2lkICogX19pb3JlbWFwKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOworCitleHRlcm4gaW5saW5lIHZvaWQgKiBpb3JlbWFwICh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKQoreworICAgICAgICByZXR1cm4gX19pb3JlbWFwKG9mZnNldCwgc2l6ZSwgMCk7Cit9CisKKy8qCisgKiBUaGlzIG9uZSBtYXBzIGhpZ2ggYWRkcmVzcyBkZXZpY2UgbWVtb3J5IGFuZCB0dXJucyBvZmYgY2FjaGluZyBmb3IgdGhhdCBhcmVhLgorICogaXQncyB1c2VmdWwgaWYgc29tZSBjb250cm9sIHJlZ2lzdGVycyBhcmUgaW4gc3VjaCBhbiBhcmVhIGFuZCB3cml0ZSBjb21iaW5pbmcKKyAqIG9yIHJlYWQgY2FjaGluZyBpcyBub3QgZGVzaXJhYmxlOgorICovCitleHRlcm4gaW5saW5lIHZvaWQgKiBpb3JlbWFwX25vY2FjaGUgKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisgICAgICAgIHJldHVybiBfX2lvcmVtYXAob2Zmc2V0LCBzaXplLCAwKTsKK30KKworZXh0ZXJuIHZvaWQgaW91bm1hcCh2b2lkICphZGRyKTsKKworLyoKKyAqIElPIGJ1cyBtZW1vcnkgYWRkcmVzc2VzIGFyZSBhbHNvIDE6MSB3aXRoIHRoZSBwaHlzaWNhbCBhZGRyZXNzCisgKi8KKyNkZWZpbmUgdmlydF90b19idXMgdmlydF90b19waHlzCisjZGVmaW5lIGJ1c190b192aXJ0IHBoeXNfdG9fdmlydAorCisvKgorICogcmVhZFgvd3JpdGVYKCkgYXJlIHVzZWQgdG8gYWNjZXNzIG1lbW9yeSBtYXBwZWQgZGV2aWNlcy4gT24gc29tZQorICogYXJjaGl0ZWN0dXJlcyB0aGUgbWVtb3J5IG1hcHBlZCBJTyBzdHVmZiBuZWVkcyB0byBiZSBhY2Nlc3NlZAorICogZGlmZmVyZW50bHkuCisgKi8KKworI2RlZmluZSByZWFkYihhZGRyKSAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIF9faW9fdmlydChhZGRyKSkKKyNkZWZpbmUgcmVhZHcoYWRkcikgKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikgX19pb192aXJ0KGFkZHIpKQorI2RlZmluZSByZWFkbChhZGRyKSAoKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgX19pb192aXJ0KGFkZHIpKQorCisjZGVmaW5lIHJlYWRiX3JlbGF4ZWQoYWRkcikgcmVhZGIoYWRkcikKKyNkZWZpbmUgcmVhZHdfcmVsYXhlZChhZGRyKSByZWFkdyhhZGRyKQorI2RlZmluZSByZWFkbF9yZWxheGVkKGFkZHIpIHJlYWRsKGFkZHIpCisKKyNkZWZpbmUgd3JpdGViKGIsYWRkcikgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSBfX2lvX3ZpcnQoYWRkcikgPSAoYikpCisjZGVmaW5lIHdyaXRldyhiLGFkZHIpICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopIF9faW9fdmlydChhZGRyKSA9IChiKSkKKyNkZWZpbmUgd3JpdGVsKGIsYWRkcikgKCoodm9sYXRpbGUgdW5zaWduZWQgaW50ICopIF9faW9fdmlydChhZGRyKSA9IChiKSkKKworI2RlZmluZSBtZW1zZXRfaW8oYSxiLGMpICAgICAgICBtZW1zZXQoX19pb192aXJ0KGEpLChiKSwoYykpCisjZGVmaW5lIG1lbWNweV9mcm9taW8oYSxiLGMpICAgIG1lbWNweSgoYSksX19pb192aXJ0KGIpLChjKSkKKyNkZWZpbmUgbWVtY3B5X3RvaW8oYSxiLGMpICAgICAgbWVtY3B5KF9faW9fdmlydChhKSwoYiksKGMpKQorCisjZGVmaW5lIGluYl9wKGFkZHIpIHJlYWRiKGFkZHIpCisjZGVmaW5lIGluYihhZGRyKSByZWFkYihhZGRyKQorCisjZGVmaW5lIG91dGIoeCxhZGRyKSAoKHZvaWQpIHdyaXRlYih4LGFkZHIpKQorI2RlZmluZSBvdXRiX3AoeCxhZGRyKSBvdXRiKHgsYWRkcikKKworI2RlZmluZSBtbWlvd2IoKQorCisvKgorICogQ29udmVydCBhIHBoeXNpY2FsIHBvaW50ZXIgdG8gYSB2aXJ0dWFsIGtlcm5lbCBwb2ludGVyIGZvciAvZGV2L21lbQorICogYWNjZXNzCisgKi8KKyNkZWZpbmUgeGxhdGVfZGV2X21lbV9wdHIocCkJX192YShwKQorCisvKgorICogQ29udmVydCBhIHZpcnR1YWwgY2FjaGVkIHBvaW50ZXIgdG8gYW4gdW5jYWNoZWQgcG9pbnRlcgorICovCisjZGVmaW5lIHhsYXRlX2Rldl9rbWVtX3B0cihwKQlwCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9pb2N0bC5oIGIvaW5jbHVkZS9hc20tczM5MC9pb2N0bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmNzM5NDMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL2lvY3RsLmgKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqICBpbmNsdWRlL2FzbS1zMzkwL2lvY3RsLmgKKyAqCisgKiAgUzM5MCB2ZXJzaW9uCisgKgorICogIERlcml2ZWQgZnJvbSAiaW5jbHVkZS9hc20taTM4Ni9pb2N0bC5oIgorICovCisKKyNpZm5kZWYgX1MzOTBfSU9DVExfSAorI2RlZmluZSBfUzM5MF9JT0NUTF9ICisKKy8qIGlvY3RsIGNvbW1hbmQgZW5jb2Rpbmc6IDMyIGJpdHMgdG90YWwsIGNvbW1hbmQgaW4gbG93ZXIgMTYgYml0cywKKyAqIHNpemUgb2YgdGhlIHBhcmFtZXRlciBzdHJ1Y3R1cmUgaW4gdGhlIGxvd2VyIDE0IGJpdHMgb2YgdGhlCisgKiB1cHBlciAxNiBiaXRzLgorICogRW5jb2RpbmcgdGhlIHNpemUgb2YgdGhlIHBhcmFtZXRlciBzdHJ1Y3R1cmUgaW4gdGhlIGlvY3RsIHJlcXVlc3QKKyAqIGlzIHVzZWZ1bCBmb3IgY2F0Y2hpbmcgcHJvZ3JhbXMgY29tcGlsZWQgd2l0aCBvbGQgdmVyc2lvbnMKKyAqIGFuZCB0byBhdm9pZCBvdmVyd3JpdGluZyB1c2VyIHNwYWNlIG91dHNpZGUgdGhlIHVzZXIgYnVmZmVyIGFyZWEuCisgKiBUaGUgaGlnaGVzdCAyIGJpdHMgYXJlIHJlc2VydmVkIGZvciBpbmRpY2F0aW5nIHRoZSBgYGFjY2VzcyBtb2RlJycuCisgKiBOT1RFOiBUaGlzIGxpbWl0cyB0aGUgbWF4IHBhcmFtZXRlciBzaXplIHRvIDE2a0IgLTEgIQorICovCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGlzIGZvciBjb21wYXRpYmlsaXR5IGFjcm9zcyB0aGUgdmFyaW91cyBMaW51eAorICogcGxhdGZvcm1zLiAgVGhlIGkzODYgaW9jdGwgbnVtYmVyaW5nIHNjaGVtZSBkb2Vzbid0IHJlYWxseSBlbmZvcmNlCisgKiBhIHR5cGUgZmllbGQuICBEZSBmYWN0bywgaG93ZXZlciwgdGhlIHRvcCA4IGJpdHMgb2YgdGhlIGxvd2VyIDE2CisgKiBiaXRzIGFyZSBpbmRlZWQgdXNlZCBhcyBhIHR5cGUgZmllbGQsIHNvIHdlIG1pZ2h0IGp1c3QgYXMgd2VsbCBtYWtlCisgKiB0aGlzIGV4cGxpY2l0IGhlcmUuICBQbGVhc2UgYmUgc3VyZSB0byB1c2UgdGhlIGRlY29kaW5nIG1hY3JvcworICogYmVsb3cgZnJvbSBub3cgb24uCisgKi8KKyNkZWZpbmUgX0lPQ19OUkJJVFMJOAorI2RlZmluZSBfSU9DX1RZUEVCSVRTCTgKKyNkZWZpbmUgX0lPQ19TSVpFQklUUwkxNAorI2RlZmluZSBfSU9DX0RJUkJJVFMJMgorCisjZGVmaW5lIF9JT0NfTlJNQVNLCSgoMSA8PCBfSU9DX05SQklUUyktMSkKKyNkZWZpbmUgX0lPQ19UWVBFTUFTSwkoKDEgPDwgX0lPQ19UWVBFQklUUyktMSkKKyNkZWZpbmUgX0lPQ19TSVpFTUFTSwkoKDEgPDwgX0lPQ19TSVpFQklUUyktMSkKKyNkZWZpbmUgX0lPQ19ESVJNQVNLCSgoMSA8PCBfSU9DX0RJUkJJVFMpLTEpCisKKyNkZWZpbmUgX0lPQ19OUlNISUZUCTAKKyNkZWZpbmUgX0lPQ19UWVBFU0hJRlQJKF9JT0NfTlJTSElGVCtfSU9DX05SQklUUykKKyNkZWZpbmUgX0lPQ19TSVpFU0hJRlQJKF9JT0NfVFlQRVNISUZUK19JT0NfVFlQRUJJVFMpCisjZGVmaW5lIF9JT0NfRElSU0hJRlQJKF9JT0NfU0laRVNISUZUK19JT0NfU0laRUJJVFMpCisKKy8qCisgKiBEaXJlY3Rpb24gYml0cy4KKyAqLworI2RlZmluZSBfSU9DX05PTkUJMFUKKyNkZWZpbmUgX0lPQ19XUklURQkxVQorI2RlZmluZSBfSU9DX1JFQUQJMlUKKworI2RlZmluZSBfSU9DKGRpcix0eXBlLG5yLHNpemUpIFwKKwkoKChkaXIpICA8PCBfSU9DX0RJUlNISUZUKSB8IFwKKwkgKCh0eXBlKSA8PCBfSU9DX1RZUEVTSElGVCkgfCBcCisJICgobnIpICAgPDwgX0lPQ19OUlNISUZUKSB8IFwKKwkgKChzaXplKSA8PCBfSU9DX1NJWkVTSElGVCkpCisKKy8qIHByb3Zva2UgY29tcGlsZSBlcnJvciBmb3IgaW52YWxpZCB1c2VzIG9mIHNpemUgYXJndW1lbnQgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIF9faW52YWxpZF9zaXplX2FyZ3VtZW50X2Zvcl9JT0M7CisjZGVmaW5lIF9JT0NfVFlQRUNIRUNLKHQpIFwKKwkoKHNpemVvZih0KSA9PSBzaXplb2YodFsxXSkgJiYgXAorCSAgc2l6ZW9mKHQpIDwgKDEgPDwgX0lPQ19TSVpFQklUUykpID8gXAorCSAgc2l6ZW9mKHQpIDogX19pbnZhbGlkX3NpemVfYXJndW1lbnRfZm9yX0lPQykKKworLyogdXNlZCB0byBjcmVhdGUgbnVtYmVycyAqLworI2RlZmluZSBfSU8odHlwZSxucikJCV9JT0MoX0lPQ19OT05FLCh0eXBlKSwobnIpLDApCisjZGVmaW5lIF9JT1IodHlwZSxucixzaXplKQlfSU9DKF9JT0NfUkVBRCwodHlwZSksKG5yKSwoX0lPQ19UWVBFQ0hFQ0soc2l6ZSkpKQorI2RlZmluZSBfSU9XKHR5cGUsbnIsc2l6ZSkJX0lPQyhfSU9DX1dSSVRFLCh0eXBlKSwobnIpLChfSU9DX1RZUEVDSEVDSyhzaXplKSkpCisjZGVmaW5lIF9JT1dSKHR5cGUsbnIsc2l6ZSkJX0lPQyhfSU9DX1JFQUR8X0lPQ19XUklURSwodHlwZSksKG5yKSwoX0lPQ19UWVBFQ0hFQ0soc2l6ZSkpKQorI2RlZmluZSBfSU9SX0JBRCh0eXBlLG5yLHNpemUpCV9JT0MoX0lPQ19SRUFELCh0eXBlKSwobnIpLHNpemVvZihzaXplKSkKKyNkZWZpbmUgX0lPV19CQUQodHlwZSxucixzaXplKQlfSU9DKF9JT0NfV1JJVEUsKHR5cGUpLChuciksc2l6ZW9mKHNpemUpKQorI2RlZmluZSBfSU9XUl9CQUQodHlwZSxucixzaXplKQlfSU9DKF9JT0NfUkVBRHxfSU9DX1dSSVRFLCh0eXBlKSwobnIpLHNpemVvZihzaXplKSkKKworLyogdXNlZCB0byBkZWNvZGUgaW9jdGwgbnVtYmVycy4uICovCisjZGVmaW5lIF9JT0NfRElSKG5yKQkJKCgobnIpID4+IF9JT0NfRElSU0hJRlQpICYgX0lPQ19ESVJNQVNLKQorI2RlZmluZSBfSU9DX1RZUEUobnIpCQkoKChucikgPj4gX0lPQ19UWVBFU0hJRlQpICYgX0lPQ19UWVBFTUFTSykKKyNkZWZpbmUgX0lPQ19OUihucikJCSgoKG5yKSA+PiBfSU9DX05SU0hJRlQpICYgX0lPQ19OUk1BU0spCisjZGVmaW5lIF9JT0NfU0laRShucikJCSgoKG5yKSA+PiBfSU9DX1NJWkVTSElGVCkgJiBfSU9DX1NJWkVNQVNLKQorCisvKiAuLi5hbmQgZm9yIHRoZSBkcml2ZXJzL3NvdW5kIGZpbGVzLi4uICovCisKKyNkZWZpbmUgSU9DX0lOCQkoX0lPQ19XUklURSA8PCBfSU9DX0RJUlNISUZUKQorI2RlZmluZSBJT0NfT1VUCQkoX0lPQ19SRUFEIDw8IF9JT0NfRElSU0hJRlQpCisjZGVmaW5lIElPQ19JTk9VVAkoKF9JT0NfV1JJVEV8X0lPQ19SRUFEKSA8PCBfSU9DX0RJUlNISUZUKQorI2RlZmluZSBJT0NTSVpFX01BU0sJKF9JT0NfU0laRU1BU0sgPDwgX0lPQ19TSVpFU0hJRlQpCisjZGVmaW5lIElPQ1NJWkVfU0hJRlQJKF9JT0NfU0laRVNISUZUKQorCisjZW5kaWYgLyogX1MzOTBfSU9DVExfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9pb2N0bHMuaCBiL2luY2x1ZGUvYXNtLXMzOTAvaW9jdGxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdlMTliMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvaW9jdGxzLmgKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqICBpbmNsdWRlL2FzbS1zMzkwL2lvY3Rscy5oCisgKgorICogIFMzOTAgdmVyc2lvbgorICoKKyAqICBEZXJpdmVkIGZyb20gImluY2x1ZGUvYXNtLWkzODYvaW9jdGxzLmgiCisgKi8KKworI2lmbmRlZiBfX0FSQ0hfUzM5MF9JT0NUTFNfSF9fCisjZGVmaW5lIF9fQVJDSF9TMzkwX0lPQ1RMU19IX18KKworI2luY2x1ZGUgPGFzbS9pb2N0bC5oPgorCisvKiAweDU0IGlzIGp1c3QgYSBtYWdpYyBudW1iZXIgdG8gbWFrZSB0aGVzZSByZWxhdGl2ZWx5IHVuaXF1ZSAoJ1QnKSAqLworCisjZGVmaW5lIFRDR0VUUwkJMHg1NDAxCisjZGVmaW5lIFRDU0VUUwkJMHg1NDAyCisjZGVmaW5lIFRDU0VUU1cJCTB4NTQwMworI2RlZmluZSBUQ1NFVFNGCQkweDU0MDQKKyNkZWZpbmUgVENHRVRBCQkweDU0MDUKKyNkZWZpbmUgVENTRVRBCQkweDU0MDYKKyNkZWZpbmUgVENTRVRBVwkJMHg1NDA3CisjZGVmaW5lIFRDU0VUQUYJCTB4NTQwOAorI2RlZmluZSBUQ1NCUksJCTB4NTQwOQorI2RlZmluZSBUQ1hPTkMJCTB4NTQwQQorI2RlZmluZSBUQ0ZMU0gJCTB4NTQwQgorI2RlZmluZSBUSU9DRVhDTAkweDU0MEMKKyNkZWZpbmUgVElPQ05YQ0wJMHg1NDBECisjZGVmaW5lIFRJT0NTQ1RUWQkweDU0MEUKKyNkZWZpbmUgVElPQ0dQR1JQCTB4NTQwRgorI2RlZmluZSBUSU9DU1BHUlAJMHg1NDEwCisjZGVmaW5lIFRJT0NPVVRRCTB4NTQxMQorI2RlZmluZSBUSU9DU1RJCQkweDU0MTIKKyNkZWZpbmUgVElPQ0dXSU5TWgkweDU0MTMKKyNkZWZpbmUgVElPQ1NXSU5TWgkweDU0MTQKKyNkZWZpbmUgVElPQ01HRVQJMHg1NDE1CisjZGVmaW5lIFRJT0NNQklTCTB4NTQxNgorI2RlZmluZSBUSU9DTUJJQwkweDU0MTcKKyNkZWZpbmUgVElPQ01TRVQJMHg1NDE4CisjZGVmaW5lIFRJT0NHU09GVENBUgkweDU0MTkKKyNkZWZpbmUgVElPQ1NTT0ZUQ0FSCTB4NTQxQQorI2RlZmluZSBGSU9OUkVBRAkweDU0MUIKKyNkZWZpbmUgVElPQ0lOUQkJRklPTlJFQUQKKyNkZWZpbmUgVElPQ0xJTlVYCTB4NTQxQworI2RlZmluZSBUSU9DQ09OUwkweDU0MUQKKyNkZWZpbmUgVElPQ0dTRVJJQUwJMHg1NDFFCisjZGVmaW5lIFRJT0NTU0VSSUFMCTB4NTQxRgorI2RlZmluZSBUSU9DUEtUCQkweDU0MjAKKyNkZWZpbmUgRklPTkJJTwkJMHg1NDIxCisjZGVmaW5lIFRJT0NOT1RUWQkweDU0MjIKKyNkZWZpbmUgVElPQ1NFVEQJMHg1NDIzCisjZGVmaW5lIFRJT0NHRVRECTB4NTQyNAorI2RlZmluZSBUQ1NCUktQCQkweDU0MjUJLyogTmVlZGVkIGZvciBQT1NJWCB0Y3NlbmRicmVhaygpICovCisjZGVmaW5lIFRJT0NTQlJLCTB4NTQyNyAgLyogQlNEIGNvbXBhdGliaWxpdHkgKi8KKyNkZWZpbmUgVElPQ0NCUksJMHg1NDI4ICAvKiBCU0QgY29tcGF0aWJpbGl0eSAqLworI2RlZmluZSBUSU9DR1NJRAkweDU0MjkgIC8qIFJldHVybiB0aGUgc2Vzc2lvbiBJRCBvZiBGRCAqLworI2RlZmluZSBUSU9DR1BUTglfSU9SKCdUJywweDMwLCB1bnNpZ25lZCBpbnQpIC8qIEdldCBQdHkgTnVtYmVyIChvZiBwdHktbXV4IGRldmljZSkgKi8KKyNkZWZpbmUgVElPQ1NQVExDSwlfSU9XKCdUJywweDMxLCBpbnQpICAvKiBMb2NrL3VubG9jayBQdHkgKi8KKworI2RlZmluZSBGSU9OQ0xFWAkweDU0NTAgIC8qIHRoZXNlIG51bWJlcnMgbmVlZCB0byBiZSBhZGp1c3RlZC4gKi8KKyNkZWZpbmUgRklPQ0xFWAkJMHg1NDUxCisjZGVmaW5lIEZJT0FTWU5DCTB4NTQ1MgorI2RlZmluZSBUSU9DU0VSQ09ORklHCTB4NTQ1MworI2RlZmluZSBUSU9DU0VSR1dJTEQJMHg1NDU0CisjZGVmaW5lIFRJT0NTRVJTV0lMRAkweDU0NTUKKyNkZWZpbmUgVElPQ0dMQ0tUUk1JT1MJMHg1NDU2CisjZGVmaW5lIFRJT0NTTENLVFJNSU9TCTB4NTQ1NworI2RlZmluZSBUSU9DU0VSR1NUUlVDVAkweDU0NTggLyogRm9yIGRlYnVnZ2luZyBvbmx5ICovCisjZGVmaW5lIFRJT0NTRVJHRVRMU1IgICAweDU0NTkgLyogR2V0IGxpbmUgc3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIFRJT0NTRVJHRVRNVUxUSSAweDU0NUEgLyogR2V0IG11bHRpcG9ydCBjb25maWcgICovCisjZGVmaW5lIFRJT0NTRVJTRVRNVUxUSSAweDU0NUIgLyogU2V0IG11bHRpcG9ydCBjb25maWcgKi8KKworI2RlZmluZSBUSU9DTUlXQUlUCTB4NTQ1QwkvKiB3YWl0IGZvciBhIGNoYW5nZSBvbiBzZXJpYWwgaW5wdXQgbGluZShzKSAqLworI2RlZmluZSBUSU9DR0lDT1VOVAkweDU0NUQJLyogcmVhZCBzZXJpYWwgcG9ydCBpbmxpbmUgaW50ZXJydXB0IGNvdW50cyAqLworI2RlZmluZSBGSU9RU0laRQkweDU0NUUKKworLyogVXNlZCBmb3IgcGFja2V0IG1vZGUgKi8KKyNkZWZpbmUgVElPQ1BLVF9EQVRBCQkgMAorI2RlZmluZSBUSU9DUEtUX0ZMVVNIUkVBRAkgMQorI2RlZmluZSBUSU9DUEtUX0ZMVVNIV1JJVEUJIDIKKyNkZWZpbmUgVElPQ1BLVF9TVE9QCQkgNAorI2RlZmluZSBUSU9DUEtUX1NUQVJUCQkgOAorI2RlZmluZSBUSU9DUEtUX05PU1RPUAkJMTYKKyNkZWZpbmUgVElPQ1BLVF9ET1NUT1AJCTMyCisKKyNkZWZpbmUgVElPQ1NFUl9URU1UICAgIDB4MDEJLyogVHJhbnNtaXR0ZXIgcGh5c2ljYWxseSBlbXB0eSAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvaXBjLmggYi9pbmNsdWRlL2FzbS1zMzkwL2lwYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0NmUzZDkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL2lwYy5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pcGMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvaXBjYnVmLmggYi9pbmNsdWRlL2FzbS1zMzkwL2lwY2J1Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3ZjI5M2QKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL2lwY2J1Zi5oCkBAIC0wLDAgKzEsMzEgQEAKKyNpZm5kZWYgX19TMzkwX0lQQ0JVRl9IX18KKyNkZWZpbmUgX19TMzkwX0lQQ0JVRl9IX18KKworLyoKKyAqIFRoZSB1c2VyX2lwY19wZXJtIHN0cnVjdHVyZSBmb3IgUy8zOTAgYXJjaGl0ZWN0dXJlLgorICogTm90ZSBleHRyYSBwYWRkaW5nIGJlY2F1c2UgdGhpcyBzdHJ1Y3R1cmUgaXMgcGFzc2VkIGJhY2sgYW5kIGZvcnRoCisgKiBiZXR3ZWVuIGtlcm5lbCBhbmQgdXNlciBzcGFjZS4KKyAqCisgKiBQYWQgc3BhY2UgaXMgbGVmdCBmb3I6CisgKiAtIDMyLWJpdCBtb2RlX3QgYW5kIHNlcQorICogLSAyIG1pc2NlbGxhbmVvdXMgMzItYml0IHZhbHVlcworICovCisKK3N0cnVjdCBpcGM2NF9wZXJtCit7CisJX19rZXJuZWxfa2V5X3QJCWtleTsKKwlfX2tlcm5lbF91aWQzMl90CXVpZDsKKwlfX2tlcm5lbF9naWQzMl90CWdpZDsKKwlfX2tlcm5lbF91aWQzMl90CWN1aWQ7CisJX19rZXJuZWxfZ2lkMzJfdAljZ2lkOworCV9fa2VybmVsX21vZGVfdAkJbW9kZTsKKwl1bnNpZ25lZCBzaG9ydAkJX19wYWQxOworCXVuc2lnbmVkIHNob3J0CQlzZXE7CisjaWZuZGVmIF9fczM5MHhfXworCXVuc2lnbmVkIHNob3J0CQlfX3BhZDI7CisjZW5kaWYgLyogISBfX3MzOTB4X18gKi8KKwl1bnNpZ25lZCBsb25nCQlfX3VudXNlZDE7CisJdW5zaWduZWQgbG9uZwkJX191bnVzZWQyOworfTsKKworI2VuZGlmIC8qIF9fUzM5MF9JUENCVUZfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL2lycS5oIGIvaW5jbHVkZS9hc20tczM5MC9pcnEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTZhMWFhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tczM5MC9pcnEuaApAQCAtMCwwICsxLDMwIEBACisjaWZuZGVmIF9BU01fSVJRX0gKKyNkZWZpbmUgX0FTTV9JUlFfSAorCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KKworLyoKKyAqIHRoZSBkZWZpbml0aW9uIG9mIGlycXMgaGFzIGNoYW5nZWQgaW4gMi41LjQ2OgorICogTlJfSVJRUyBpcyBubyBsb25nZXIgdGhlIG51bWJlciBvZiBpL28KKyAqIGludGVycnVwdHMgKDY1NTM2KSwgYnV0IHJhdGhlciB0aGUgbnVtYmVyCisgKiBvZiBpbnRlcnJ1cHQgY2xhc3NlcyAoMikuCisgKiBPbmx5IGV4dGVybmFsIGFuZCBpL28gaW50ZXJydXB0cyBtYWtlIG11Y2ggc2Vuc2UgaGVyZSAoQ0gpLgorICovCisKK2VudW0gaW50ZXJydXB0aW9uX2NsYXNzIHsKKwlFWFRFUk5BTF9JTlRFUlJVUFQsCisJSU9fSU5URVJSVVBULAorCisJTlJfSVJRUywKK307CisKKyNkZWZpbmUgdG91Y2hfbm1pX3dhdGNoZG9nKCkgZG8geyB9IHdoaWxlKDApCisKK3N0cnVjdCBpcnFhY3Rpb247CitzdHJ1Y3QgcHRfcmVnczsKK2ludCBoYW5kbGVfSVJRX2V2ZW50KHVuc2lnbmVkIGludCwgc3RydWN0IHB0X3JlZ3MgKiwgc3RydWN0IGlycWFjdGlvbiAqKTsKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZgorCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL2ttYXBfdHlwZXMuaCBiL2luY2x1ZGUvYXNtLXMzOTAva21hcF90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkMTU3NDYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL2ttYXBfdHlwZXMuaApAQCAtMCwwICsxLDIzIEBACisjaWZkZWYgX19LRVJORUxfXworI2lmbmRlZiBfQVNNX0tNQVBfVFlQRVNfSAorI2RlZmluZSBfQVNNX0tNQVBfVFlQRVNfSAorCitlbnVtIGttX3R5cGUgeworCUtNX0JPVU5DRV9SRUFELAorCUtNX1NLQl9TVU5SUENfREFUQSwKKwlLTV9TS0JfREFUQV9TT0ZUSVJRLAorCUtNX1VTRVIwLAorCUtNX1VTRVIxLAorCUtNX0JJT19TUkNfSVJRLAorCUtNX0JJT19EU1RfSVJRLAorCUtNX1BURTAsCisJS01fUFRFMSwKKwlLTV9JUlEwLAorCUtNX0lSUTEsCisJS01fU09GVElSUTAsCisJS01fU09GVElSUTEsCQorCUtNX1RZUEVfTlIKK307CisKKyNlbmRpZgorI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvbGlua2FnZS5oIGIvaW5jbHVkZS9hc20tczM5MC9saW5rYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkxYzJkMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvbGlua2FnZS5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfX0FTTV9MSU5LQUdFX0gKKyNkZWZpbmUgX19BU01fTElOS0FHRV9ICisKKy8qIE5vdGhpbmcgdG8gc2VlIGhlcmUuLi4gKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL2xvY2FsLmggYi9pbmNsdWRlL2FzbS1zMzkwL2xvY2FsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y4MTg5MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvbG9jYWwuaApAQCAtMCwwICsxLDU5IEBACisjaWZuZGVmIF9BU01fTE9DQUxfSAorI2RlZmluZSBfQVNNX0xPQ0FMX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKworI2lmbmRlZiBfX3MzOTB4X18KKwordHlwZWRlZiBhdG9taWNfdCBsb2NhbF90OworCisjZGVmaW5lIExPQ0FMX0lOSVQoaSkJQVRPTUlDX0lOSVQoaSkKKyNkZWZpbmUgbG9jYWxfcmVhZCh2KQlhdG9taWNfcmVhZCh2KQorI2RlZmluZSBsb2NhbF9zZXQodixpKQlhdG9taWNfc2V0KHYsaSkKKworI2RlZmluZSBsb2NhbF9pbmModikJYXRvbWljX2luYyh2KQorI2RlZmluZSBsb2NhbF9kZWModikJYXRvbWljX2RlYyh2KQorI2RlZmluZSBsb2NhbF9hZGQoaSwgdikJYXRvbWljX2FkZChpLCB2KQorI2RlZmluZSBsb2NhbF9zdWIoaSwgdikJYXRvbWljX3N1YihpLCB2KQorCisjZWxzZQorCit0eXBlZGVmIGF0b21pYzY0X3QgbG9jYWxfdDsKKworI2RlZmluZSBMT0NBTF9JTklUKGkpCUFUT01JQzY0X0lOSVQoaSkKKyNkZWZpbmUgbG9jYWxfcmVhZCh2KQlhdG9taWM2NF9yZWFkKHYpCisjZGVmaW5lIGxvY2FsX3NldCh2LGkpCWF0b21pYzY0X3NldCh2LGkpCisKKyNkZWZpbmUgbG9jYWxfaW5jKHYpCWF0b21pYzY0X2luYyh2KQorI2RlZmluZSBsb2NhbF9kZWModikJYXRvbWljNjRfZGVjKHYpCisjZGVmaW5lIGxvY2FsX2FkZChpLCB2KQlhdG9taWM2NF9hZGQoaSwgdikKKyNkZWZpbmUgbG9jYWxfc3ViKGksIHYpCWF0b21pYzY0X3N1YihpLCB2KQorCisjZW5kaWYKKworI2RlZmluZSBfX2xvY2FsX2luYyh2KQkJKCh2KS0+Y291bnRlcisrKQorI2RlZmluZSBfX2xvY2FsX2RlYyh2KQkJKCh2KS0+Y291bnRlci0tKQorI2RlZmluZSBfX2xvY2FsX2FkZChpLHYpCSgodiktPmNvdW50ZXIrPShpKSkKKyNkZWZpbmUgX19sb2NhbF9zdWIoaSx2KQkoKHYpLT5jb3VudGVyLT0oaSkpCisKKy8qCisgKiBVc2UgdGhlc2UgZm9yIHBlci1jcHUgbG9jYWxfdCB2YXJpYWJsZXM6IG9uIHNvbWUgYXJjaHMgdGhleSBhcmUKKyAqIG11Y2ggbW9yZSBlZmZpY2llbnQgdGhhbiB0aGVzZSBuYWl2ZSBpbXBsZW1lbnRhdGlvbnMuICBOb3RlIHRoZXkgdGFrZQorICogYSB2YXJpYWJsZSwgbm90IGFuIGFkZHJlc3MuCisgKi8KKyNkZWZpbmUgY3B1X2xvY2FsX3JlYWQodikJbG9jYWxfcmVhZCgmX19nZXRfY3B1X3Zhcih2KSkKKyNkZWZpbmUgY3B1X2xvY2FsX3NldCh2LCBpKQlsb2NhbF9zZXQoJl9fZ2V0X2NwdV92YXIodiksIChpKSkKKworI2RlZmluZSBjcHVfbG9jYWxfaW5jKHYpCWxvY2FsX2luYygmX19nZXRfY3B1X3Zhcih2KSkKKyNkZWZpbmUgY3B1X2xvY2FsX2RlYyh2KQlsb2NhbF9kZWMoJl9fZ2V0X2NwdV92YXIodikpCisjZGVmaW5lIGNwdV9sb2NhbF9hZGQoaSwgdikJbG9jYWxfYWRkKChpKSwgJl9fZ2V0X2NwdV92YXIodikpCisjZGVmaW5lIGNwdV9sb2NhbF9zdWIoaSwgdikJbG9jYWxfc3ViKChpKSwgJl9fZ2V0X2NwdV92YXIodikpCisKKyNkZWZpbmUgX19jcHVfbG9jYWxfaW5jKHYpCV9fbG9jYWxfaW5jKCZfX2dldF9jcHVfdmFyKHYpKQorI2RlZmluZSBfX2NwdV9sb2NhbF9kZWModikJX19sb2NhbF9kZWMoJl9fZ2V0X2NwdV92YXIodikpCisjZGVmaW5lIF9fY3B1X2xvY2FsX2FkZChpLCB2KQlfX2xvY2FsX2FkZCgoaSksICZfX2dldF9jcHVfdmFyKHYpKQorI2RlZmluZSBfX2NwdV9sb2NhbF9zdWIoaSwgdikJX19sb2NhbF9zdWIoKGkpLCAmX19nZXRfY3B1X3Zhcih2KSkKKworI2VuZGlmIC8qIF9BU01fTE9DQUxfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9sb3djb3JlLmggYi9pbmNsdWRlL2FzbS1zMzkwL2xvd2NvcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjUxNzJmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tczM5MC9sb3djb3JlLmgKQEAgLTAsMCArMSwzNTEgQEAKKy8qCisgKiAgaW5jbHVkZS9hc20tczM5MC9sb3djb3JlLmgKKyAqCisgKiAgUzM5MCB2ZXJzaW9uCisgKiAgICBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBJQk0gRGV1dHNjaGxhbmQgRW50d2lja2x1bmcgR21iSCwgSUJNIENvcnBvcmF0aW9uCisgKiAgICBBdXRob3Iocyk6IEhhcnRtdXQgUGVubmVyIChocEBkZS5pYm0uY29tKSwKKyAqICAgICAgICAgICAgICAgTWFydGluIFNjaHdpZGVmc2t5IChzY2h3aWRlZnNreUBkZS5pYm0uY29tKSwKKyAqICAgICAgICAgICAgICAgRGVuaXMgSm9zZXBoIEJhcnJvdyAoZGpiYXJyb3dAZGUuaWJtLmNvbSxiYXJyb3dfZGpAeWFob28uY29tKQorICovCisKKyNpZm5kZWYgX0FTTV9TMzkwX0xPV0NPUkVfSAorI2RlZmluZSBfQVNNX1MzOTBfTE9XQ09SRV9ICisKKyNpZm5kZWYgX19zMzkweF9fCisjZGVmaW5lIF9fTENfRVhUX09MRF9QU1cgICAgICAgICAgICAgICAgMHgwMTgKKyNkZWZpbmUgX19MQ19TVkNfT0xEX1BTVyAgICAgICAgICAgICAgICAweDAyMAorI2RlZmluZSBfX0xDX1BHTV9PTERfUFNXICAgICAgICAgICAgICAgIDB4MDI4CisjZGVmaW5lIF9fTENfTUNLX09MRF9QU1cgICAgICAgICAgICAgICAgMHgwMzAKKyNkZWZpbmUgX19MQ19JT19PTERfUFNXICAgICAgICAgICAgICAgICAweDAzOAorI2RlZmluZSBfX0xDX0VYVF9ORVdfUFNXICAgICAgICAgICAgICAgIDB4MDU4CisjZGVmaW5lIF9fTENfU1ZDX05FV19QU1cgICAgICAgICAgICAgICAgMHgwNjAKKyNkZWZpbmUgX19MQ19QR01fTkVXX1BTVyAgICAgICAgICAgICAgICAweDA2OAorI2RlZmluZSBfX0xDX01DS19ORVdfUFNXICAgICAgICAgICAgICAgIDB4MDcwCisjZGVmaW5lIF9fTENfSU9fTkVXX1BTVyAgICAgICAgICAgICAgICAgMHgwNzgKKyNlbHNlIC8qICFfX3MzOTB4X18gKi8KKyNkZWZpbmUgX19MQ19FWFRfT0xEX1BTVyAgICAgICAgICAgICAgICAweDAxMzAKKyNkZWZpbmUgX19MQ19TVkNfT0xEX1BTVyAgICAgICAgICAgICAgICAweDAxNDAKKyNkZWZpbmUgX19MQ19QR01fT0xEX1BTVyAgICAgICAgICAgICAgICAweDAxNTAKKyNkZWZpbmUgX19MQ19NQ0tfT0xEX1BTVyAgICAgICAgICAgICAgICAweDAxNjAKKyNkZWZpbmUgX19MQ19JT19PTERfUFNXICAgICAgICAgICAgICAgICAweDAxNzAKKyNkZWZpbmUgX19MQ19FWFRfTkVXX1BTVyAgICAgICAgICAgICAgICAweDAxYjAKKyNkZWZpbmUgX19MQ19TVkNfTkVXX1BTVyAgICAgICAgICAgICAgICAweDAxYzAKKyNkZWZpbmUgX19MQ19QR01fTkVXX1BTVyAgICAgICAgICAgICAgICAweDAxZDAKKyNkZWZpbmUgX19MQ19NQ0tfTkVXX1BTVyAgICAgICAgICAgICAgICAweDAxZTAKKyNkZWZpbmUgX19MQ19JT19ORVdfUFNXICAgICAgICAgICAgICAgICAweDAxZjAKKyNlbmRpZiAvKiAhX19zMzkweF9fICovCisKKyNkZWZpbmUgX19MQ19FWFRfUEFSQU1TICAgICAgICAgICAgICAgICAweDA4MAorI2RlZmluZSBfX0xDX0NQVV9BRERSRVNTICAgICAgICAgICAgICAgIDB4MDg0CisjZGVmaW5lIF9fTENfRVhUX0lOVF9DT0RFICAgICAgICAgICAgICAgMHgwODYKKworI2RlZmluZSBfX0xDX1NWQ19JTEMgICAgICAgICAgICAgICAgICAgIDB4MDg4CisjZGVmaW5lIF9fTENfU1ZDX0lOVF9DT0RFICAgICAgICAgICAgICAgMHgwOEEKKyNkZWZpbmUgX19MQ19QR01fSUxDICAgICAgICAgICAgICAgICAgICAweDA4QworI2RlZmluZSBfX0xDX1BHTV9JTlRfQ09ERSAgICAgICAgICAgICAgIDB4MDhFCisKKyNkZWZpbmUgX19MQ19QRVJfQVRNSUQJCQkweDA5NgorI2RlZmluZSBfX0xDX1BFUl9BRERSRVNTCQkweDA5OAorI2RlZmluZSBfX0xDX1BFUl9BQ0NFU1NfSUQJCTB4MEExCisKKyNkZWZpbmUgX19MQ19TVUJDSEFOTkVMX0lEICAgICAgICAgICAgICAweDBCOAorI2RlZmluZSBfX0xDX1NVQkNIQU5ORUxfTlIgICAgICAgICAgICAgIDB4MEJBCisjZGVmaW5lIF9fTENfSU9fSU5UX1BBUk0gICAgICAgICAgICAgICAgMHgwQkMKKyNkZWZpbmUgX19MQ19JT19JTlRfV09SRCAgICAgICAgICAgICAgICAweDBDMAorI2RlZmluZSBfX0xDX01DQ0tfQ09ERSAgICAgICAgICAgICAgICAgIDB4MEU4CisKKyNkZWZpbmUgX19MQ19SRVRVUk5fUFNXICAgICAgICAgICAgICAgICAweDIwMAorCisjZGVmaW5lIF9fTENfU0FWRV9BUkVBICAgICAgICAgICAgICAgICAgMHhDMDAKKworI2lmbmRlZiBfX3MzOTB4X18KKyNkZWZpbmUgX19MQ19JUkIJCQkweDIwOAorI2RlZmluZSBfX0xDX1NZTkNfRU5URVJfVElNRVIJCTB4MjQ4CisjZGVmaW5lIF9fTENfQVNZTkNfRU5URVJfVElNRVIJCTB4MjUwCisjZGVmaW5lIF9fTENfRVhJVF9USU1FUgkJCTB4MjU4CisjZGVmaW5lIF9fTENfTEFTVF9VUERBVEVfVElNRVIJCTB4MjYwCisjZGVmaW5lIF9fTENfVVNFUl9USU1FUgkJCTB4MjY4CisjZGVmaW5lIF9fTENfU1lTVEVNX1RJTUVSCQkweDI3MAorI2RlZmluZSBfX0xDX0xBU1RfVVBEQVRFX0NMT0NLCQkweDI3OAorI2RlZmluZSBfX0xDX1NURUFMX0NMT0NLCQkweDI4MAorI2RlZmluZSBfX0xDX0tFUk5FTF9TVEFDSyAgICAgICAgICAgICAgIDB4QzQwCisjZGVmaW5lIF9fTENfVEhSRUFEX0lORk8JCTB4QzQ0CisjZGVmaW5lIF9fTENfQVNZTkNfU1RBQ0sgICAgICAgICAgICAgICAgMHhDNDgKKyNkZWZpbmUgX19MQ19LRVJORUxfQVNDRQkJMHhDNEMKKyNkZWZpbmUgX19MQ19VU0VSX0FTQ0UJCQkweEM1MAorI2RlZmluZSBfX0xDX1BBTklDX1NUQUNLICAgICAgICAgICAgICAgIDB4QzU0CisjZGVmaW5lIF9fTENfQ1BVSUQgICAgICAgICAgICAgICAgICAgICAgMHhDNjAKKyNkZWZpbmUgX19MQ19DUFVBRERSICAgICAgICAgICAgICAgICAgICAweEM2OAorI2RlZmluZSBfX0xDX0lQTERFViAgICAgICAgICAgICAgICAgICAgIDB4QzdDCisjZGVmaW5lIF9fTENfSklGRllfVElNRVIJCTB4QzgwCisjZGVmaW5lIF9fTENfQ1VSUkVOVAkJCTB4QzkwCisjZGVmaW5lIF9fTENfSU5UX0NMT0NLCQkJMHhDOTgKKyNlbHNlIC8qIF9fczM5MHhfXyAqLworI2RlZmluZSBfX0xDX0lSQgkJCTB4MjEwCisjZGVmaW5lIF9fTENfU1lOQ19FTlRFUl9USU1FUgkJMHgyNTAKKyNkZWZpbmUgX19MQ19BU1lOQ19FTlRFUl9USU1FUgkJMHgyNTgKKyNkZWZpbmUgX19MQ19FWElUX1RJTUVSCQkJMHgyNjAKKyNkZWZpbmUgX19MQ19MQVNUX1VQREFURV9USU1FUgkJMHgyNjgKKyNkZWZpbmUgX19MQ19VU0VSX1RJTUVSCQkJMHgyNzAKKyNkZWZpbmUgX19MQ19TWVNURU1fVElNRVIJCTB4Mjc4CisjZGVmaW5lIF9fTENfTEFTVF9VUERBVEVfQ0xPQ0sJCTB4MjgwCisjZGVmaW5lIF9fTENfU1RFQUxfQ0xPQ0sJCTB4Mjg4CisjZGVmaW5lIF9fTENfRElBRzQ0X09QQ09ERQkJMHgyOTAKKyNkZWZpbmUgX19MQ19LRVJORUxfU1RBQ0sgICAgICAgICAgICAgICAweEQ0MAorI2RlZmluZSBfX0xDX1RIUkVBRF9JTkZPCQkweEQ0OAorI2RlZmluZSBfX0xDX0FTWU5DX1NUQUNLICAgICAgICAgICAgICAgIDB4RDUwCisjZGVmaW5lIF9fTENfS0VSTkVMX0FTQ0UJCTB4RDU4CisjZGVmaW5lIF9fTENfVVNFUl9BU0NFCQkJMHhENjAKKyNkZWZpbmUgX19MQ19QQU5JQ19TVEFDSyAgICAgICAgICAgICAgICAweEQ2OAorI2RlZmluZSBfX0xDX0NQVUlEICAgICAgICAgICAgICAgICAgICAgIDB4RDkwCisjZGVmaW5lIF9fTENfQ1BVQUREUiAgICAgICAgICAgICAgICAgICAgMHhEOTgKKyNkZWZpbmUgX19MQ19JUExERVYgICAgICAgICAgICAgICAgICAgICAweERCOAorI2RlZmluZSBfX0xDX0pJRkZZX1RJTUVSCQkweERDMAorI2RlZmluZSBfX0xDX0NVUlJFTlQJCQkweEREOAorI2RlZmluZSBfX0xDX0lOVF9DTE9DSwkJCTB4REU4CisjZW5kaWYgLyogX19zMzkweF9fICovCisKKyNkZWZpbmUgX19MQ19QQU5JQ19NQUdJQyAgICAgICAgICAgICAgICAweEUwMAorCisjaWZuZGVmIF9fczM5MHhfXworI2RlZmluZSBfX0xDX1BGQVVMVF9JTlRQQVJNICAgICAgICAgICAgIDB4MDgwCisjZGVmaW5lIF9fTENfQVJFR1NfU0FWRV9BUkVBICAgICAgICAgICAgMHgxMjAKKyNkZWZpbmUgX19MQ19DUkVHU19TQVZFX0FSRUEgICAgICAgICAgICAweDFDMAorI2Vsc2UgLyogX19zMzkweF9fICovCisjZGVmaW5lIF9fTENfUEZBVUxUX0lOVFBBUk0gICAgICAgICAgICAgMHgxMUI4CisjZGVmaW5lIF9fTENfQVJFR1NfU0FWRV9BUkVBICAgICAgICAgICAgMHgxMzQwCisjZGVmaW5lIF9fTENfQ1JFR1NfU0FWRV9BUkVBICAgICAgICAgICAgMHgxMzgwCisjZW5kaWYgLyogX19zMzkweF9fICovCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vc2lncC5oPgorCit2b2lkIHJlc3RhcnRfaW50X2hhbmRsZXIodm9pZCk7Cit2b2lkIGV4dF9pbnRfaGFuZGxlcih2b2lkKTsKK3ZvaWQgc3lzdGVtX2NhbGwodm9pZCk7Cit2b2lkIHBnbV9jaGVja19oYW5kbGVyKHZvaWQpOwordm9pZCBtY2NrX2ludF9oYW5kbGVyKHZvaWQpOwordm9pZCBpb19pbnRfaGFuZGxlcih2b2lkKTsKKworc3RydWN0IF9sb3djb3JlCit7CisjaWZuZGVmIF9fczM5MHhfXworICAgICAgICAvKiBwcmVmaXggYXJlYTogZGVmaW5lZCBieSBhcmNoaXRlY3R1cmUgKi8KKwlwc3dfdCAgICAgICAgcmVzdGFydF9wc3c7ICAgICAgICAgICAgICAvKiAweDAwMCAqLworCV9fdTMyICAgICAgICBjY3cyWzRdOyAgICAgICAgICAgICAgICAgIC8qIDB4MDA4ICovCisJcHN3X3QgICAgICAgIGV4dGVybmFsX29sZF9wc3c7ICAgICAgICAgLyogMHgwMTggKi8KKwlwc3dfdCAgICAgICAgc3ZjX29sZF9wc3c7ICAgICAgICAgICAgICAvKiAweDAyMCAqLworCXBzd190ICAgICAgICBwcm9ncmFtX29sZF9wc3c7ICAgICAgICAgIC8qIDB4MDI4ICovCisJcHN3X3QgICAgICAgIG1jY2tfb2xkX3BzdzsgICAgICAgICAgICAgLyogMHgwMzAgKi8KKwlwc3dfdCAgICAgICAgaW9fb2xkX3BzdzsgICAgICAgICAgICAgICAvKiAweDAzOCAqLworCV9fdTggICAgICAgICBwYWQxWzB4NTgtMHg0MF07ICAgICAgICAgIC8qIDB4MDQwICovCisJcHN3X3QgICAgICAgIGV4dGVybmFsX25ld19wc3c7ICAgICAgICAgLyogMHgwNTggKi8KKwlwc3dfdCAgICAgICAgc3ZjX25ld19wc3c7ICAgICAgICAgICAgICAvKiAweDA2MCAqLworCXBzd190ICAgICAgICBwcm9ncmFtX25ld19wc3c7ICAgICAgICAgIC8qIDB4MDY4ICovCisJcHN3X3QgICAgICAgIG1jY2tfbmV3X3BzdzsgICAgICAgICAgICAgLyogMHgwNzAgKi8KKwlwc3dfdCAgICAgICAgaW9fbmV3X3BzdzsgICAgICAgICAgICAgICAvKiAweDA3OCAqLworCV9fdTMyICAgICAgICBleHRfcGFyYW1zOyAgICAgICAgICAgICAgIC8qIDB4MDgwICovCisJX191MTYgICAgICAgIGNwdV9hZGRyOyAgICAgICAgICAgICAgICAgLyogMHgwODQgKi8KKwlfX3UxNiAgICAgICAgZXh0X2ludF9jb2RlOyAgICAgICAgICAgICAvKiAweDA4NiAqLworICAgICAgICBfX3UxNiAgICAgICAgc3ZjX2lsYzsgICAgICAgICAgICAgICAgICAvKiAweDA4OCAqLworICAgICAgICBfX3UxNiAgICAgICAgc3ZjX2NvZGU7ICAgICAgICAgICAgICAgICAvKiAweDA4YSAqLworICAgICAgICBfX3UxNiAgICAgICAgcGdtX2lsYzsgICAgICAgICAgICAgICAgICAvKiAweDA4YyAqLworICAgICAgICBfX3UxNiAgICAgICAgcGdtX2NvZGU7ICAgICAgICAgICAgICAgICAvKiAweDA4ZSAqLworCV9fdTMyICAgICAgICB0cmFuc19leGNfY29kZTsgICAgICAgICAgIC8qIDB4MDkwICovCisJX191MTYgICAgICAgIG1vbl9jbGFzc19udW07ICAgICAgICAgICAgLyogMHgwOTQgKi8KKwlfX3UxNiAgICAgICAgcGVyX3BlcmNfYXRtaWQ7ICAgICAgICAgICAvKiAweDA5NiAqLworCV9fdTMyICAgICAgICBwZXJfYWRkcmVzczsgICAgICAgICAgICAgIC8qIDB4MDk4ICovCisJX191MzIgICAgICAgIG1vbml0b3JfY29kZTsgICAgICAgICAgICAgLyogMHgwOWMgKi8KKwlfX3U4ICAgICAgICAgZXhjX2FjY2Vzc19pZDsgICAgICAgICAgICAvKiAweDBhMCAqLworCV9fdTggICAgICAgICBwZXJfYWNjZXNzX2lkOyAgICAgICAgICAgIC8qIDB4MGExICovCisJX191OCAgICAgICAgIHBhZDJbMHhCOC0weEEyXTsgICAgICAgICAgLyogMHgwYTIgKi8KKwlfX3UxNiAgICAgICAgc3ViY2hhbm5lbF9pZDsgICAgICAgICAgICAvKiAweDBiOCAqLworCV9fdTE2ICAgICAgICBzdWJjaGFubmVsX25yOyAgICAgICAgICAgIC8qIDB4MGJhICovCisJX191MzIgICAgICAgIGlvX2ludF9wYXJtOyAgICAgICAgICAgICAgLyogMHgwYmMgKi8KKwlfX3UzMiAgICAgICAgaW9faW50X3dvcmQ7ICAgICAgICAgICAgICAvKiAweDBjMCAqLworICAgICAgICBfX3U4ICAgICAgICAgcGFkM1sweEQ4LTB4QzRdOyAgICAgICAgICAvKiAweDBjNCAqLworCV9fdTMyICAgICAgICBjcHVfdGltZXJfc2F2ZV9hcmVhWzJdOyAgIC8qIDB4MGQ4ICovCisJX191MzIgICAgICAgIGNsb2NrX2NvbXBfc2F2ZV9hcmVhWzJdOyAgLyogMHgwZTAgKi8KKwlfX3UzMiAgICAgICAgbWNja19pbnRlcnJ1cHRpb25fY29kZVsyXTsgLyogMHgwZTggKi8KKwlfX3U4ICAgICAgICAgcGFkNFsweGY0LTB4ZjBdOyAgICAgICAgICAvKiAweDBmMCAqLworCV9fdTMyICAgICAgICBleHRlcm5hbF9kYW1hZ2VfY29kZTsgICAgIC8qIDB4MGY0ICovCisJX191MzIgICAgICAgIGZhaWxpbmdfc3RvcmFnZV9hZGRyZXNzOyAgLyogMHgwZjggKi8KKwlfX3U4ICAgICAgICAgcGFkNVsweDEwMC0weGZjXTsgICAgICAgICAvKiAweDBmYyAqLworCV9fdTMyICAgICAgICBzdF9zdGF0dXNfZml4ZWRfbG9nb3V0WzRdOy8qIDB4MTAwICovCisJX191OCAgICAgICAgIHBhZDZbMHgxMjAtMHgxMTBdOyAgICAgICAgLyogMHgxMTAgKi8KKwlfX3UzMiAgICAgICAgYWNjZXNzX3JlZ3Nfc2F2ZV9hcmVhWzE2XTsvKiAweDEyMCAqLworCV9fdTMyICAgICAgICBmbG9hdGluZ19wdF9zYXZlX2FyZWFbOF07IC8qIDB4MTYwICovCisJX191MzIgICAgICAgIGdwcmVnc19zYXZlX2FyZWFbMTZdOyAgICAgLyogMHgxODAgKi8KKwlfX3UzMiAgICAgICAgY3JlZ3Nfc2F2ZV9hcmVhWzE2XTsgICAgICAvKiAweDFjMCAqLwkKKworICAgICAgICBwc3dfdCAgICAgICAgcmV0dXJuX3BzdzsgICAgICAgICAgICAgICAvKiAweDIwMCAqLworCV9fdTgJICAgICBpcmJbNjRdOwkJICAgICAgIC8qIDB4MjA4ICovCisJX191NjQgICAgICAgIHN5bmNfZW50ZXJfdGltZXI7ICAgICAgICAgLyogMHgyNDggKi8KKwlfX3U2NCAgICAgICAgYXN5bmNfZW50ZXJfdGltZXI7ICAgICAgICAvKiAweDI1MCAqLworCV9fdTY0ICAgICAgICBleGl0X3RpbWVyOyAgICAgICAgICAgICAgIC8qIDB4MjU4ICovCisJX191NjQgICAgICAgIGxhc3RfdXBkYXRlX3RpbWVyOyAgICAgICAgLyogMHgyNjAgKi8KKwlfX3U2NCAgICAgICAgdXNlcl90aW1lcjsgICAgICAgICAgICAgICAvKiAweDI2OCAqLworCV9fdTY0ICAgICAgICBzeXN0ZW1fdGltZXI7ICAgICAgICAgICAgIC8qIDB4MjcwICovCisJX191NjQgICAgICAgIGxhc3RfdXBkYXRlX2Nsb2NrOyAgICAgICAgLyogMHgyNzggKi8KKwlfX3U2NCAgICAgICAgc3RlYWxfY2xvY2s7ICAgICAgICAgICAgICAvKiAweDI4MCAqLworCV9fdTggICAgICAgICBwYWQ4WzB4YzAwLTB4Mjg4XTsgICAgICAgIC8qIDB4Mjg4ICovCisKKyAgICAgICAgLyogU3lzdGVtIGluZm8gYXJlYSAqLworCV9fdTMyICAgICAgICBzYXZlX2FyZWFbMTZdOyAgICAgICAgICAgIC8qIDB4YzAwICovCisJX191MzIgICAgICAgIGtlcm5lbF9zdGFjazsgICAgICAgICAgICAgLyogMHhjNDAgKi8KKwlfX3UzMiAgICAgICAgdGhyZWFkX2luZm87ICAgICAgICAgICAgICAvKiAweGM0NCAqLworCV9fdTMyICAgICAgICBhc3luY19zdGFjazsgICAgICAgICAgICAgIC8qIDB4YzQ4ICovCisJX191MzIgICAgICAgIGtlcm5lbF9hc2NlOyAgICAgICAgICAgICAgLyogMHhjNGMgKi8KKwlfX3UzMiAgICAgICAgdXNlcl9hc2NlOyAgICAgICAgICAgICAgICAvKiAweGM1MCAqLworCV9fdTMyICAgICAgICBwYW5pY19zdGFjazsgICAgICAgICAgICAgIC8qIDB4YzU0ICovCisJX191OCAgICAgICAgIHBhZDEwWzB4YzYwLTB4YzU4XTsgICAgICAgLyogMHhjNTggKi8KKwkvKiBlbnRyeS5TIHNlbnNpdGl2ZSBhcmVhIHN0YXJ0ICovCisJc3RydWN0ICAgICAgIGNwdWluZm9fUzM5MCBjcHVfZGF0YTsgICAgLyogMHhjNjAgKi8KKwlfX3UzMiAgICAgICAgaXBsX2RldmljZTsgICAgICAgICAgICAgICAvKiAweGM3YyAqLworCS8qIGVudHJ5LlMgc2Vuc2l0aXZlIGFyZWEgZW5kICovCisKKyAgICAgICAgLyogU01QIGluZm8gYXJlYTogZGVmaW5lZCBieSBESkIgKi8KKyAgICAgICAgX191NjQgICAgICAgIGppZmZ5X3RpbWVyOyAgICAgICAgICAgICAgLyogMHhjODAgKi8KKwlfX3UzMiAgICAgICAgZXh0X2NhbGxfZmFzdDsgICAgICAgICAgICAvKiAweGM4OCAqLworCV9fdTMyICAgICAgICBwZXJjcHVfb2Zmc2V0OyAgICAgICAgICAgIC8qIDB4YzhjICovCisJX191MzIgICAgICAgIGN1cnJlbnRfdGFzazsJICAgICAgIC8qIDB4YzkwICovCisJX191MzIgICAgICAgIHNvZnRpcnFfcGVuZGluZzsJICAgICAgIC8qIDB4Yzk0ICovCisJX191NjQgICAgICAgIGludF9jbG9jazsgICAgICAgICAgICAgICAgLyogMHhjOTggKi8KKyAgICAgICAgX191OCAgICAgICAgIHBhZDExWzB4ZTAwLTB4Y2EwXTsgICAgICAgLyogMHhjYTAgKi8KKworICAgICAgICAvKiAweGUwMCBpcyB1c2VkIGFzIGluZGljYXRvciBmb3IgZHVtcCB0b29scyAqLworICAgICAgICAvKiB3aGV0aGVyIHRoZSBrZXJuZWwgZGllZCB3aXRoIHBhbmljKCkgb3Igbm90ICovCisgICAgICAgIF9fdTMyICAgICAgICBwYW5pY19tYWdpYzsgICAgICAgICAgICAgIC8qIDB4ZTAwICovCisKKyAgICAgICAgLyogQWxpZ24gdG8gdGhlIHRvcCAxayBvZiBwcmVmaXggYXJlYSAqLworCV9fdTggICAgICAgICBwYWQxMlsweDEwMDAtMHhlMDRdOyAgICAgIC8qIDB4ZTA0ICovCisjZWxzZSAvKiAhX19zMzkweF9fICovCisgICAgICAgIC8qIHByZWZpeCBhcmVhOiBkZWZpbmVkIGJ5IGFyY2hpdGVjdHVyZSAqLworCV9fdTMyICAgICAgICBjY3cxWzJdOyAgICAgICAgICAgICAgICAgIC8qIDB4MDAwICovCisJX191MzIgICAgICAgIGNjdzJbNF07ICAgICAgICAgICAgICAgICAgLyogMHgwMDggKi8KKwlfX3U4ICAgICAgICAgcGFkMVsweDgwLTB4MThdOyAgICAgICAgICAvKiAweDAxOCAqLworCV9fdTMyICAgICAgICBleHRfcGFyYW1zOyAgICAgICAgICAgICAgIC8qIDB4MDgwICovCisJX191MTYgICAgICAgIGNwdV9hZGRyOyAgICAgICAgICAgICAgICAgLyogMHgwODQgKi8KKwlfX3UxNiAgICAgICAgZXh0X2ludF9jb2RlOyAgICAgICAgICAgICAvKiAweDA4NiAqLworICAgICAgICBfX3UxNiAgICAgICAgc3ZjX2lsYzsgICAgICAgICAgICAgICAgICAvKiAweDA4OCAqLworICAgICAgICBfX3UxNiAgICAgICAgc3ZjX2NvZGU7ICAgICAgICAgICAgICAgICAvKiAweDA4YSAqLworICAgICAgICBfX3UxNiAgICAgICAgcGdtX2lsYzsgICAgICAgICAgICAgICAgICAvKiAweDA4YyAqLworICAgICAgICBfX3UxNiAgICAgICAgcGdtX2NvZGU7ICAgICAgICAgICAgICAgICAvKiAweDA4ZSAqLworCV9fdTMyICAgICAgICBkYXRhX2V4Y19jb2RlOyAgICAgICAgICAgIC8qIDB4MDkwICovCisJX191MTYgICAgICAgIG1vbl9jbGFzc19udW07ICAgICAgICAgICAgLyogMHgwOTQgKi8KKwlfX3UxNiAgICAgICAgcGVyX3BlcmNfYXRtaWQ7ICAgICAgICAgICAvKiAweDA5NiAqLworCWFkZHJfdCAgICAgICBwZXJfYWRkcmVzczsgICAgICAgICAgICAgIC8qIDB4MDk4ICovCisJX191OCAgICAgICAgIGV4Y19hY2Nlc3NfaWQ7ICAgICAgICAgICAgLyogMHgwYTAgKi8KKwlfX3U4ICAgICAgICAgcGVyX2FjY2Vzc19pZDsgICAgICAgICAgICAvKiAweDBhMSAqLworCV9fdTggICAgICAgICBvcF9hY2Nlc3NfaWQ7ICAgICAgICAgICAgIC8qIDB4MGEyICovCisJX191OCAgICAgICAgIGFyX2FjY2Vzc19pZDsgICAgICAgICAgICAgLyogMHgwYTMgKi8KKwlfX3U4ICAgICAgICAgcGFkMlsweEE4LTB4QTRdOyAgICAgICAgICAvKiAweDBhNCAqLworCWFkZHJfdCAgICAgICB0cmFuc19leGNfY29kZTsgICAgICAgICAgIC8qIDB4MEEwICovCisJYWRkcl90ICAgICAgIG1vbml0b3JfY29kZTsgICAgICAgICAgICAgLyogMHgwOWMgKi8KKwlfX3UxNiAgICAgICAgc3ViY2hhbm5lbF9pZDsgICAgICAgICAgICAvKiAweDBiOCAqLworCV9fdTE2ICAgICAgICBzdWJjaGFubmVsX25yOyAgICAgICAgICAgIC8qIDB4MGJhICovCisJX191MzIgICAgICAgIGlvX2ludF9wYXJtOyAgICAgICAgICAgICAgLyogMHgwYmMgKi8KKwlfX3UzMiAgICAgICAgaW9faW50X3dvcmQ7ICAgICAgICAgICAgICAvKiAweDBjMCAqLworCV9fdTggICAgICAgICBwYWQzWzB4YzgtMHhjNF07ICAgICAgICAgIC8qIDB4MGM0ICovCisJX191MzIgICAgICAgIHN0ZmxfZmFjX2xpc3Q7ICAgICAgICAgICAgLyogMHgwYzggKi8KKwlfX3U4ICAgICAgICAgcGFkNFsweGU4LTB4Y2NdOyAgICAgICAgICAvKiAweDBjYyAqLworCV9fdTMyICAgICAgICBtY2NrX2ludGVycnVwdGlvbl9jb2RlWzJdOyAvKiAweDBlOCAqLworCV9fdTggICAgICAgICBwYWQ1WzB4ZjQtMHhmMF07ICAgICAgICAgIC8qIDB4MGYwICovCisJX191MzIgICAgICAgIGV4dGVybmFsX2RhbWFnZV9jb2RlOyAgICAgLyogMHgwZjQgKi8KKwlhZGRyX3QgICAgICAgZmFpbGluZ19zdG9yYWdlX2FkZHJlc3M7ICAvKiAweDBmOCAqLworCV9fdTggICAgICAgICBwYWQ2WzB4MTIwLTB4MTAwXTsgICAgICAgIC8qIDB4MTAwICovCisJcHN3X3QgICAgICAgIHJlc3RhcnRfb2xkX3BzdzsgICAgICAgICAgLyogMHgxMjAgKi8KKwlwc3dfdCAgICAgICAgZXh0ZXJuYWxfb2xkX3BzdzsgICAgICAgICAvKiAweDEzMCAqLworCXBzd190ICAgICAgICBzdmNfb2xkX3BzdzsgICAgICAgICAgICAgIC8qIDB4MTQwICovCisJcHN3X3QgICAgICAgIHByb2dyYW1fb2xkX3BzdzsgICAgICAgICAgLyogMHgxNTAgKi8KKwlwc3dfdCAgICAgICAgbWNja19vbGRfcHN3OyAgICAgICAgICAgICAvKiAweDE2MCAqLworCXBzd190ICAgICAgICBpb19vbGRfcHN3OyAgICAgICAgICAgICAgIC8qIDB4MTcwICovCisJX191OCAgICAgICAgIHBhZDdbMHgxYTAtMHgxODBdOyAgICAgICAgLyogMHgxODAgKi8KKwlwc3dfdCAgICAgICAgcmVzdGFydF9wc3c7ICAgICAgICAgICAgICAvKiAweDFhMCAqLworCXBzd190ICAgICAgICBleHRlcm5hbF9uZXdfcHN3OyAgICAgICAgIC8qIDB4MWIwICovCisJcHN3X3QgICAgICAgIHN2Y19uZXdfcHN3OyAgICAgICAgICAgICAgLyogMHgxYzAgKi8KKwlwc3dfdCAgICAgICAgcHJvZ3JhbV9uZXdfcHN3OyAgICAgICAgICAvKiAweDFkMCAqLworCXBzd190ICAgICAgICBtY2NrX25ld19wc3c7ICAgICAgICAgICAgIC8qIDB4MWUwICovCisJcHN3X3QgICAgICAgIGlvX25ld19wc3c7ICAgICAgICAgICAgICAgLyogMHgxZjAgKi8KKyAgICAgICAgcHN3X3QgICAgICAgIHJldHVybl9wc3c7ICAgICAgICAgICAgICAgLyogMHgyMDAgKi8KKwlfX3U4CSAgICAgaXJiWzY0XTsJCSAgICAgICAvKiAweDIxMCAqLworCV9fdTY0ICAgICAgICBzeW5jX2VudGVyX3RpbWVyOyAgICAgICAgIC8qIDB4MjUwICovCisJX191NjQgICAgICAgIGFzeW5jX2VudGVyX3RpbWVyOyAgICAgICAgLyogMHgyNTggKi8KKwlfX3U2NCAgICAgICAgZXhpdF90aW1lcjsgICAgICAgICAgICAgICAvKiAweDI2MCAqLworCV9fdTY0ICAgICAgICBsYXN0X3VwZGF0ZV90aW1lcjsgICAgICAgIC8qIDB4MjY4ICovCisJX191NjQgICAgICAgIHVzZXJfdGltZXI7ICAgICAgICAgICAgICAgLyogMHgyNzAgKi8KKwlfX3U2NCAgICAgICAgc3lzdGVtX3RpbWVyOyAgICAgICAgICAgICAvKiAweDI3OCAqLworCV9fdTY0ICAgICAgICBsYXN0X3VwZGF0ZV9jbG9jazsgICAgICAgIC8qIDB4MjgwICovCisJX191NjQgICAgICAgIHN0ZWFsX2Nsb2NrOyAgICAgICAgICAgICAgLyogMHgyODggKi8KKwlfX3UzMiAgICAgICAgZGlhZzQ0X29wY29kZTsgICAgICAgICAgICAvKiAweDI5MCAqLworICAgICAgICBfX3U4ICAgICAgICAgcGFkOFsweGMwMC0weDI5NF07ICAgICAgICAvKiAweDI5NCAqLworICAgICAgICAvKiBTeXN0ZW0gaW5mbyBhcmVhICovCisJX191NjQgICAgICAgIHNhdmVfYXJlYVsxNl07ICAgICAgICAgICAgLyogMHhjMDAgKi8KKyAgICAgICAgX191OCAgICAgICAgIHBhZDlbMHhkNDAtMHhjODBdOyAgICAgICAgLyogMHhjODAgKi8KKyAJX191NjQgICAgICAgIGtlcm5lbF9zdGFjazsgICAgICAgICAgICAgLyogMHhkNDAgKi8KKwlfX3U2NCAgICAgICAgdGhyZWFkX2luZm87ICAgICAgICAgICAgICAvKiAweGQ0OCAqLworCV9fdTY0ICAgICAgICBhc3luY19zdGFjazsgICAgICAgICAgICAgIC8qIDB4ZDUwICovCisJX191NjQgICAgICAgIGtlcm5lbF9hc2NlOyAgICAgICAgICAgICAgLyogMHhkNTggKi8KKwlfX3U2NCAgICAgICAgdXNlcl9hc2NlOyAgICAgICAgICAgICAgICAvKiAweGQ2MCAqLworCV9fdTY0ICAgICAgICBwYW5pY19zdGFjazsgICAgICAgICAgICAgIC8qIDB4ZDY4ICovCisJX191OCAgICAgICAgIHBhZDEwWzB4ZDgwLTB4ZDcwXTsgICAgICAgLyogMHhkNzAgKi8KKwkvKiBlbnRyeS5TIHNlbnNpdGl2ZSBhcmVhIHN0YXJ0ICovCisJc3RydWN0ICAgICAgIGNwdWluZm9fUzM5MCBjcHVfZGF0YTsgICAgLyogMHhkODAgKi8KKwlfX3UzMiAgICAgICAgaXBsX2RldmljZTsgICAgICAgICAgICAgICAvKiAweGRiOCAqLworCV9fdTMyICAgICAgICBwYWQxMTsgICAgICAgICAgICAgICAgICAgIC8qIDB4ZGJjICovCisJLyogZW50cnkuUyBzZW5zaXRpdmUgYXJlYSBlbmQgKi8KKworICAgICAgICAvKiBTTVAgaW5mbyBhcmVhOiBkZWZpbmVkIGJ5IERKQiAqLworICAgICAgICBfX3U2NCAgICAgICAgamlmZnlfdGltZXI7ICAgICAgICAgICAgICAvKiAweGRjMCAqLworCV9fdTY0ICAgICAgICBleHRfY2FsbF9mYXN0OyAgICAgICAgICAgIC8qIDB4ZGM4ICovCisJX191NjQgICAgICAgIHBlcmNwdV9vZmZzZXQ7ICAgICAgICAgICAgLyogMHhkZDAgKi8KKwlfX3U2NCAgICAgICAgY3VycmVudF90YXNrOwkgICAgICAgLyogMHhkZDggKi8KKwlfX3U2NCAgICAgICAgc29mdGlycV9wZW5kaW5nOwkgICAgICAgLyogMHhkZTAgKi8KKwlfX3U2NCAgICAgICAgaW50X2Nsb2NrOyAgICAgICAgICAgICAgICAvKiAweGRlOCAqLworICAgICAgICBfX3U4ICAgICAgICAgcGFkMTJbMHhlMDAtMHhkZjBdOyAgICAgICAvKiAweGRmMCAqLworCisgICAgICAgIC8qIDB4ZTAwIGlzIHVzZWQgYXMgaW5kaWNhdG9yIGZvciBkdW1wIHRvb2xzICovCisgICAgICAgIC8qIHdoZXRoZXIgdGhlIGtlcm5lbCBkaWVkIHdpdGggcGFuaWMoKSBvciBub3QgKi8KKyAgICAgICAgX191MzIgICAgICAgIHBhbmljX21hZ2ljOyAgICAgICAgICAgICAgLyogMHhlMDAgKi8KKworCV9fdTggICAgICAgICBwYWQxM1sweDEyMDAtMHhlMDRdOyAgICAgIC8qIDB4ZTA0ICovCisKKyAgICAgICAgLyogU3lzdGVtIGluZm8gYXJlYSAqLyAKKworCV9fdTY0ICAgICAgICBmbG9hdGluZ19wdF9zYXZlX2FyZWFbMTZdOyAvKiAweDEyMDAgKi8KKwlfX3U2NCAgICAgICAgZ3ByZWdzX3NhdmVfYXJlYVsxNl07ICAgICAgLyogMHgxMjgwICovCisJX191MzIgICAgICAgIHN0X3N0YXR1c19maXhlZF9sb2dvdXRbNF07IC8qIDB4MTMwMCAqLworCV9fdTggICAgICAgICBwYWQxNFsweDEzMTgtMHgxMzEwXTsgICAgICAvKiAweDEzMTAgKi8KKwlfX3UzMiAgICAgICAgcHJlZml4cmVnX3NhdmVfYXJlYTsgICAgICAgLyogMHgxMzE4ICovCisJX191MzIgICAgICAgIGZwdF9jcmVnX3NhdmVfYXJlYTsgICAgICAgIC8qIDB4MTMxYyAqLworCV9fdTggICAgICAgICBwYWQxNVsweDEzMjQtMHgxMzIwXTsgICAgICAvKiAweDEzMjAgKi8KKwlfX3UzMiAgICAgICAgdG9kX3Byb2dyZWdfc2F2ZV9hcmVhOyAgICAgLyogMHgxMzI0ICovCisJX191MzIgICAgICAgIGNwdV90aW1lcl9zYXZlX2FyZWFbMl07ICAgIC8qIDB4MTMyOCAqLworCV9fdTMyICAgICAgICBjbG9ja19jb21wX3NhdmVfYXJlYVsyXTsgICAvKiAweDEzMzAgKi8KKwlfX3U4ICAgICAgICAgcGFkMTZbMHgxMzQwLTB4MTMzOF07ICAgICAgLyogMHgxMzM4ICovIAorCV9fdTMyICAgICAgICBhY2Nlc3NfcmVnc19zYXZlX2FyZWFbMTZdOyAvKiAweDEzNDAgKi8gCisJX191NjQgICAgICAgIGNyZWdzX3NhdmVfYXJlYVsxNl07ICAgICAgIC8qIDB4MTM4MCAqLworCisJLyogYWxpZ24gdG8gdGhlIHRvcCBvZiB0aGUgcHJlZml4IGFyZWEgKi8KKworCV9fdTggICAgICAgICBwYWQxN1sweDIwMDAtMHgxNDAwXTsgICAgICAvKiAweDE0MDAgKi8KKyNlbmRpZiAvKiAhX19zMzkweF9fICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOyAvKiBFbmQgc3RydWN0dXJlKi8KKworI2RlZmluZSBTMzkwX2xvd2NvcmUgKCooKHN0cnVjdCBfbG93Y29yZSAqKSAwKSkKK2V4dGVybiBzdHJ1Y3QgX2xvd2NvcmUgKmxvd2NvcmVfcHRyW107CisKK2V4dGVybiBfX2lubGluZV9fIHZvaWQgc2V0X3ByZWZpeChfX3UzMiBhZGRyZXNzKQoreworICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInNweCAlMCIgOiA6ICJtIiAoYWRkcmVzcykgOiAibWVtb3J5IiApOworfQorCisjZGVmaW5lIF9fUEFOSUNfTUFHSUMgICAgICAgICAgIDB4REVBREMwREUKKworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9tYXRoZW11LmggYi9pbmNsdWRlL2FzbS1zMzkwL21hdGhlbXUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGRkMWJhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tczM5MC9tYXRoZW11LmgKQEAgLTAsMCArMSwyOSBAQAorLyoKKyAqICBhcmNoL3MzOTAva2VybmVsL21hdGhlbXUuaAorICogICAgSUVFRSBmbG9hdGluZyBwb2ludCBlbXVsYXRpb24uCisgKgorICogIFMzOTAgdmVyc2lvbgorICogICAgQ29weXJpZ2h0IChDKSAxOTk5IElCTSBEZXV0c2NobGFuZCBFbnR3aWNrbHVuZyBHbWJILCBJQk0gQ29ycG9yYXRpb24KKyAqICAgIEF1dGhvcihzKTogTWFydGluIFNjaHdpZGVmc2t5IChzY2h3aWRlZnNreUBkZS5pYm0uY29tKQorICovCisKKyNpZm5kZWYgX19NQVRIRU1VX18KKyNkZWZpbmUgX19NQVRIRU1VX18KKworZXh0ZXJuIGludCBtYXRoX2VtdV9iMyhfX3U4ICosIHN0cnVjdCBwdF9yZWdzICopOworZXh0ZXJuIGludCBtYXRoX2VtdV9lZChfX3U4ICosIHN0cnVjdCBwdF9yZWdzICopOworZXh0ZXJuIGludCBtYXRoX2VtdV9sZHIoX191OCAqKTsKK2V4dGVybiBpbnQgbWF0aF9lbXVfbGVyKF9fdTggKik7CitleHRlcm4gaW50IG1hdGhfZW11X3N0ZChfX3U4ICosIHN0cnVjdCBwdF9yZWdzICopOworZXh0ZXJuIGludCBtYXRoX2VtdV9sZChfX3U4ICosIHN0cnVjdCBwdF9yZWdzICopOworZXh0ZXJuIGludCBtYXRoX2VtdV9zdGUoX191OCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKK2V4dGVybiBpbnQgbWF0aF9lbXVfbGUoX191OCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKK2V4dGVybiBpbnQgbWF0aF9lbXVfbGZwYyhfX3U4ICosIHN0cnVjdCBwdF9yZWdzICopOworZXh0ZXJuIGludCBtYXRoX2VtdV9zdGZwYyhfX3U4ICosIHN0cnVjdCBwdF9yZWdzICopOworZXh0ZXJuIGludCBtYXRoX2VtdV9zcm5tKF9fdTggKiwgc3RydWN0IHB0X3JlZ3MgKik7CisKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9fTUFUSEVNVV9fICAgICAgICAgICAgICAgICAgICAgICovCisKKworCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvbW1hbi5oIGIvaW5jbHVkZS9hc20tczM5MC9tbWFuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE4NmJkMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvbW1hbi5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiAgaW5jbHVkZS9hc20tczM5MC9tbWFuLmgKKyAqCisgKiAgUzM5MCB2ZXJzaW9uCisgKgorICogIERlcml2ZWQgZnJvbSAiaW5jbHVkZS9hc20taTM4Ni9tbWFuLmgiCisgKi8KKworI2lmbmRlZiBfX1MzOTBfTU1BTl9IX18KKyNkZWZpbmUgX19TMzkwX01NQU5fSF9fCisKKyNkZWZpbmUgUFJPVF9SRUFECTB4MQkJLyogcGFnZSBjYW4gYmUgcmVhZCAqLworI2RlZmluZSBQUk9UX1dSSVRFCTB4MgkJLyogcGFnZSBjYW4gYmUgd3JpdHRlbiAqLworI2RlZmluZSBQUk9UX0VYRUMJMHg0CQkvKiBwYWdlIGNhbiBiZSBleGVjdXRlZCAqLworI2RlZmluZSBQUk9UX1NFTQkweDgJCS8qIHBhZ2UgbWF5IGJlIHVzZWQgZm9yIGF0b21pYyBvcHMgKi8KKyNkZWZpbmUgUFJPVF9OT05FCTB4MAkJLyogcGFnZSBjYW4gbm90IGJlIGFjY2Vzc2VkICovCisjZGVmaW5lIFBST1RfR1JPV1NET1dOCTB4MDEwMDAwMDAJLyogbXByb3RlY3QgZmxhZzogZXh0ZW5kIGNoYW5nZSB0byBzdGFydCBvZiBncm93c2Rvd24gdm1hICovCisjZGVmaW5lIFBST1RfR1JPV1NVUAkweDAyMDAwMDAwCS8qIG1wcm90ZWN0IGZsYWc6IGV4dGVuZCBjaGFuZ2UgdG8gZW5kIG9mIGdyb3dzdXAgdm1hICovCisKKyNkZWZpbmUgTUFQX1NIQVJFRAkweDAxCQkvKiBTaGFyZSBjaGFuZ2VzICovCisjZGVmaW5lIE1BUF9QUklWQVRFCTB4MDIJCS8qIENoYW5nZXMgYXJlIHByaXZhdGUgKi8KKyNkZWZpbmUgTUFQX1RZUEUJMHgwZgkJLyogTWFzayBmb3IgdHlwZSBvZiBtYXBwaW5nICovCisjZGVmaW5lIE1BUF9GSVhFRAkweDEwCQkvKiBJbnRlcnByZXQgYWRkciBleGFjdGx5ICovCisjZGVmaW5lIE1BUF9BTk9OWU1PVVMJMHgyMAkJLyogZG9uJ3QgdXNlIGEgZmlsZSAqLworCisjZGVmaW5lIE1BUF9HUk9XU0RPV04JMHgwMTAwCQkvKiBzdGFjay1saWtlIHNlZ21lbnQgKi8KKyNkZWZpbmUgTUFQX0RFTllXUklURQkweDA4MDAJCS8qIEVUWFRCU1kgKi8KKyNkZWZpbmUgTUFQX0VYRUNVVEFCTEUJMHgxMDAwCQkvKiBtYXJrIGl0IGFzIGFuIGV4ZWN1dGFibGUgKi8KKyNkZWZpbmUgTUFQX0xPQ0tFRAkweDIwMDAJCS8qIHBhZ2VzIGFyZSBsb2NrZWQgKi8KKyNkZWZpbmUgTUFQX05PUkVTRVJWRQkweDQwMDAJCS8qIGRvbid0IGNoZWNrIGZvciByZXNlcnZhdGlvbnMgKi8KKyNkZWZpbmUgTUFQX1BPUFVMQVRFCTB4ODAwMAkJLyogcG9wdWxhdGUgKHByZWZhdWx0KSBwYWdldGFibGVzICovCisjZGVmaW5lIE1BUF9OT05CTE9DSwkweDEwMDAwCQkvKiBkbyBub3QgYmxvY2sgb24gSU8gKi8KKworI2RlZmluZSBNU19BU1lOQwkxCQkvKiBzeW5jIG1lbW9yeSBhc3luY2hyb25vdXNseSAqLworI2RlZmluZSBNU19JTlZBTElEQVRFCTIJCS8qIGludmFsaWRhdGUgdGhlIGNhY2hlcyAqLworI2RlZmluZSBNU19TWU5DCQk0CQkvKiBzeW5jaHJvbm91cyBtZW1vcnkgc3luYyAqLworCisjZGVmaW5lIE1DTF9DVVJSRU5UCTEJCS8qIGxvY2sgYWxsIGN1cnJlbnQgbWFwcGluZ3MgKi8KKyNkZWZpbmUgTUNMX0ZVVFVSRQkyCQkvKiBsb2NrIGFsbCBmdXR1cmUgbWFwcGluZ3MgKi8KKworI2RlZmluZSBNQURWX05PUk1BTCAgICAweDAgICAgICAgICAgICAgIC8qIGRlZmF1bHQgcGFnZS1pbiBiZWhhdmlvciAqLworI2RlZmluZSBNQURWX1JBTkRPTSAgICAweDEgICAgICAgICAgICAgIC8qIHBhZ2UtaW4gbWluaW11bSByZXF1aXJlZCAqLworI2RlZmluZSBNQURWX1NFUVVFTlRJQUwgICAgICAgIDB4MiAgICAgICAgICAgICAvKiByZWFkLWFoZWFkIGFnZ3Jlc3NpdmVseSAqLworI2RlZmluZSBNQURWX1dJTExORUVEICAweDMgICAgICAgICAgICAgIC8qIHByZS1mYXVsdCBwYWdlcyAqLworI2RlZmluZSBNQURWX0RPTlRORUVEICAweDQgICAgICAgICAgICAgIC8qIGRpc2NhcmQgdGhlc2UgcGFnZXMgKi8KKworLyogY29tcGF0aWJpbGl0eSBmbGFncyAqLworI2RlZmluZSBNQVBfQU5PTglNQVBfQU5PTllNT1VTCisjZGVmaW5lIE1BUF9GSUxFCTAKKworI2VuZGlmIC8qIF9fUzM5MF9NTUFOX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9tbXUuaCBiL2luY2x1ZGUvYXNtLXMzOTAvbW11LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NkMzZkMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvbW11LmgKQEAgLTAsMCArMSw3IEBACisjaWZuZGVmIF9fTU1VX0gKKyNkZWZpbmUgX19NTVVfSAorCisvKiBEZWZhdWx0ICJ1bnNpZ25lZCBsb25nIiBjb250ZXh0ICovCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbW1fY29udGV4dF90OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvbW11X2NvbnRleHQuaCBiL2luY2x1ZGUvYXNtLXMzOTAvbW11X2NvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTNiYjNmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tczM5MC9tbXVfY29udGV4dC5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiAgaW5jbHVkZS9hc20tczM5MC9tbXVfY29udGV4dC5oCisgKgorICogIFMzOTAgdmVyc2lvbgorICoKKyAqICBEZXJpdmVkIGZyb20gImluY2x1ZGUvYXNtLWkzODYvbW11X2NvbnRleHQuaCIKKyAqLworCisjaWZuZGVmIF9fUzM5MF9NTVVfQ09OVEVYVF9ICisjZGVmaW5lIF9fUzM5MF9NTVVfQ09OVEVYVF9ICisKKy8qCisgKiBnZXQgYSBuZXcgbW11IGNvbnRleHQuLiBTMzkwIGRvbid0IGtub3cgYWJvdXQgY29udGV4dHMuCisgKi8KKyNkZWZpbmUgaW5pdF9uZXdfY29udGV4dCh0c2ssbW0pICAgICAgICAwCisKKyNkZWZpbmUgZGVzdHJveV9jb250ZXh0KG1tKSAgICAgICAgICAgICBkbyB7IH0gd2hpbGUgKDApCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBlbnRlcl9sYXp5X3RsYihzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN3aXRjaF9tbShzdHJ1Y3QgbW1fc3RydWN0ICpwcmV2LCBzdHJ1Y3QgbW1fc3RydWN0ICpuZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKyAgICAgICAgaWYgKHByZXYgIT0gbmV4dCkgeworI2lmbmRlZiBfX3MzOTB4X18KKwkgICAgICAgIFMzOTBfbG93Y29yZS51c2VyX2FzY2UgPSAoX19wYShuZXh0LT5wZ2QpJlBBR0VfTUFTSykgfAorICAgICAgICAgICAgICAgICAgICAgIChfU0VHTUVOVF9UQUJMRXxVU0VSX1NURF9NQVNLKTsKKyAgICAgICAgICAgICAgICAvKiBMb2FkIGhvbWUgc3BhY2UgcGFnZSB0YWJsZSBvcmlnaW4uICovCisgICAgICAgICAgICAgICAgYXNtIHZvbGF0aWxlKCJsY3RsICAxMywxMywlMCIKKwkJCSAgICAgOiA6ICJtIiAoUzM5MF9sb3djb3JlLnVzZXJfYXNjZSkgKTsKKyNlbHNlIC8qIF9fczM5MHhfXyAqLworICAgICAgICAgICAgICAgIFMzOTBfbG93Y29yZS51c2VyX2FzY2UgPSAoX19wYShuZXh0LT5wZ2QpICYgUEFHRV9NQVNLKSB8CisJCQkoX1JFR0lPTl9UQUJMRXxVU0VSX1NURF9NQVNLKTsKKwkJLyogTG9hZCBob21lIHNwYWNlIHBhZ2UgdGFibGUgb3JpZ2luLiAqLworCQlhc20gdm9sYXRpbGUoImxjdGxnICAxMywxMywlMCIKKwkJCSAgICAgOiA6ICJtIiAoUzM5MF9sb3djb3JlLnVzZXJfYXNjZSkgKTsKKyNlbmRpZiAvKiBfX3MzOTB4X18gKi8KKyAgICAgICAgfQorCWNwdV9zZXQoc21wX3Byb2Nlc3Nvcl9pZCgpLCBuZXh0LT5jcHVfdm1fbWFzayk7Cit9CisKKyNkZWZpbmUgZGVhY3RpdmF0ZV9tbSh0c2ssbW0pCWRvIHsgfSB3aGlsZSAoMCkKKworZXh0ZXJuIGlubGluZSB2b2lkIGFjdGl2YXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKnByZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG1tX3N0cnVjdCAqbmV4dCkKK3sKKyAgICAgICAgc3dpdGNoX21tKHByZXYsIG5leHQsIGN1cnJlbnQpOworCXNldF9mcyhjdXJyZW50LT50aHJlYWQubW1fc2VnbWVudCk7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9tb2R1bGUuaCBiL2luY2x1ZGUvYXNtLXMzOTAvbW9kdWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNjMWM1YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvbW9kdWxlLmgKQEAgLTAsMCArMSw0NiBAQAorI2lmbmRlZiBfQVNNX1MzOTBfTU9EVUxFX0gKKyNkZWZpbmUgX0FTTV9TMzkwX01PRFVMRV9ICisvKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBtb2R1bGUgY29kZS4KKyAqLworCitzdHJ1Y3QgbW9kX2FyY2hfc3ltaW5mbworeworCXVuc2lnbmVkIGxvbmcgZ290X29mZnNldDsKKwl1bnNpZ25lZCBsb25nIHBsdF9vZmZzZXQ7CisJaW50IGdvdF9pbml0aWFsaXplZDsKKwlpbnQgcGx0X2luaXRpYWxpemVkOworfTsKKworc3RydWN0IG1vZF9hcmNoX3NwZWNpZmljCit7CisJLyogU3RhcnRpbmcgb2Zmc2V0IG9mIGdvdCBpbiB0aGUgbW9kdWxlIGNvcmUgbWVtb3J5LiAqLworCXVuc2lnbmVkIGxvbmcgZ290X29mZnNldDsKKwkvKiBTdGFydGluZyBvZmZzZXQgb2YgcGx0IGluIHRoZSBtb2R1bGUgY29yZSBtZW1vcnkuICovCisJdW5zaWduZWQgbG9uZyBwbHRfb2Zmc2V0OworCS8qIFNpemUgb2YgdGhlIGdvdC4gKi8KKwl1bnNpZ25lZCBsb25nIGdvdF9zaXplOworCS8qIFNpemUgb2YgdGhlIHBsdC4gKi8KKwl1bnNpZ25lZCBsb25nIHBsdF9zaXplOworCS8qIE51bWJlciBvZiBzeW1ib2xzIGluIHN5bWluZm8uICovCisJaW50IG5zeW1zOworCS8qIEFkZGl0aW9uYWwgc3ltYm9sIGluZm9ybWF0aW9uIChnb3QgYW5kIHBsdCBvZmZzZXRzKS4gKi8KKwlzdHJ1Y3QgbW9kX2FyY2hfc3ltaW5mbyAqc3ltaW5mbzsKK307CisKKyNpZmRlZiBfX3MzOTB4X18KKyNkZWZpbmUgRWxmVyh4KSBFbGY2NF8gIyMgeAorI2RlZmluZSBFTEZXKHgpIEVMRjY0XyAjIyB4CisjZWxzZQorI2RlZmluZSBFbGZXKHgpIEVsZjMyXyAjIyB4CisjZGVmaW5lIEVMRlcoeCkgRUxGMzJfICMjIHgKKyNlbmRpZgorCisjZGVmaW5lIEVsZl9BZGRyIEVsZlcoQWRkcikKKyNkZWZpbmUgRWxmX1JlbGEgRWxmVyhSZWxhKQorI2RlZmluZSBFbGZfU2hkciBFbGZXKFNoZHIpCisjZGVmaW5lIEVsZl9TeW0gRWxmVyhTeW0pCisjZGVmaW5lIEVsZl9FaGRyIEVsZlcoRWhkcikKKyNkZWZpbmUgRUxGX1JfU1lNIEVMRlcoUl9TWU0pCisjZGVmaW5lIEVMRl9SX1RZUEUgRUxGVyhSX1RZUEUpCisjZW5kaWYgLyogX0FTTV9TMzkwX01PRFVMRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL21zZ2J1Zi5oIGIvaW5jbHVkZS9hc20tczM5MC9tc2didWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmJkZWU5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tczM5MC9tc2didWYuaApAQCAtMCwwICsxLDM3IEBACisjaWZuZGVmIF9TMzkwX01TR0JVRl9ICisjZGVmaW5lIF9TMzkwX01TR0JVRl9ICisKKy8qIAorICogVGhlIG1zcWlkNjRfZHMgc3RydWN0dXJlIGZvciBTLzM5MCBhcmNoaXRlY3R1cmUuCisgKiBOb3RlIGV4dHJhIHBhZGRpbmcgYmVjYXVzZSB0aGlzIHN0cnVjdHVyZSBpcyBwYXNzZWQgYmFjayBhbmQgZm9ydGgKKyAqIGJldHdlZW4ga2VybmVsIGFuZCB1c2VyIHNwYWNlLgorICoKKyAqIFBhZCBzcGFjZSBpcyBsZWZ0IGZvcjoKKyAqIC0gNjQtYml0IHRpbWVfdCB0byBzb2x2ZSB5MjAzOCBwcm9ibGVtCisgKiAtIDIgbWlzY2VsbGFuZW91cyAzMi1iaXQgdmFsdWVzCisgKi8KKworc3RydWN0IG1zcWlkNjRfZHMgeworCXN0cnVjdCBpcGM2NF9wZXJtIG1zZ19wZXJtOworCV9fa2VybmVsX3RpbWVfdCBtc2dfc3RpbWU7CS8qIGxhc3QgbXNnc25kIHRpbWUgKi8KKyNpZm5kZWYgX19zMzkweF9fCisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDE7CisjZW5kaWYgLyogISBfX3MzOTB4X18gKi8KKwlfX2tlcm5lbF90aW1lX3QgbXNnX3J0aW1lOwkvKiBsYXN0IG1zZ3JjdiB0aW1lICovCisjaWZuZGVmIF9fczM5MHhfXworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQyOworI2VuZGlmIC8qICEgX19zMzkweF9fICovCisJX19rZXJuZWxfdGltZV90IG1zZ19jdGltZTsJLyogbGFzdCBjaGFuZ2UgdGltZSAqLworI2lmbmRlZiBfX3MzOTB4X18KKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkMzsKKyNlbmRpZiAvKiAhIF9fczM5MHhfXyAqLworCXVuc2lnbmVkIGxvbmcgIG1zZ19jYnl0ZXM7CS8qIGN1cnJlbnQgbnVtYmVyIG9mIGJ5dGVzIG9uIHF1ZXVlICovCisJdW5zaWduZWQgbG9uZyAgbXNnX3FudW07CS8qIG51bWJlciBvZiBtZXNzYWdlcyBpbiBxdWV1ZSAqLworCXVuc2lnbmVkIGxvbmcgIG1zZ19xYnl0ZXM7CS8qIG1heCBudW1iZXIgb2YgYnl0ZXMgb24gcXVldWUgKi8KKwlfX2tlcm5lbF9waWRfdCBtc2dfbHNwaWQ7CS8qIHBpZCBvZiBsYXN0IG1zZ3NuZCAqLworCV9fa2VybmVsX3BpZF90IG1zZ19scnBpZDsJLyogbGFzdCByZWNlaXZlIHBpZCAqLworCXVuc2lnbmVkIGxvbmcgIF9fdW51c2VkNDsKKwl1bnNpZ25lZCBsb25nICBfX3VudXNlZDU7Cit9OworCisjZW5kaWYgLyogX1MzOTBfTVNHQlVGX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvbmFtZWkuaCBiL2luY2x1ZGUvYXNtLXMzOTAvbmFtZWkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTI4NmJkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tczM5MC9uYW1laS5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiAgaW5jbHVkZS9hc20tczM5MC9uYW1laS5oCisgKgorICogIFMzOTAgdmVyc2lvbgorICoKKyAqICBEZXJpdmVkIGZyb20gImluY2x1ZGUvYXNtLWkzODYvbmFtZWkuaCIKKyAqCisgKiAgSW5jbHVkZWQgZnJvbSBsaW51eC9mcy9uYW1laS5jCisgKi8KKworI2lmbmRlZiBfX1MzOTBfTkFNRUlfSAorI2RlZmluZSBfX1MzOTBfTkFNRUlfSAorCisvKiBUaGlzIGR1bW15IHJvdXRpbmUgbWF5YmUgY2hhbmdlZCB0byBzb21ldGhpbmcgdXNlZnVsCisgKiBmb3IgL3Vzci9nbmVtdWwvIGVtdWxhdGlvbiBzdHVmZi4KKyAqIExvb2sgYXQgYXNtLXNwYXJjL25hbWVpLmggZm9yIGRldGFpbHMuCisgKi8KKworI2RlZmluZSBfX2VtdWxfcHJlZml4KCkgTlVMTAorCisjZW5kaWYgLyogX19TMzkwX05BTUVJX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvcGFnZS5oIGIvaW5jbHVkZS9hc20tczM5MC9wYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE0ZTJhOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvcGFnZS5oCkBAIC0wLDAgKzEsMjA4IEBACisvKgorICogIGluY2x1ZGUvYXNtLXMzOTAvcGFnZS5oCisgKgorICogIFMzOTAgdmVyc2lvbgorICogICAgQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgSUJNIERldXRzY2hsYW5kIEVudHdpY2tsdW5nIEdtYkgsIElCTSBDb3Jwb3JhdGlvbgorICogICAgQXV0aG9yKHMpOiBIYXJ0bXV0IFBlbm5lciAoaHBAZGUuaWJtLmNvbSkKKyAqLworCisjaWZuZGVmIF9TMzkwX1BBR0VfSAorI2RlZmluZSBfUzM5MF9QQUdFX0gKKworI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCisvKiBQQUdFX1NISUZUIGRldGVybWluZXMgdGhlIHBhZ2Ugc2l6ZSAqLworI2RlZmluZSBQQUdFX1NISUZUICAgICAgMTIKKyNkZWZpbmUgUEFHRV9TSVpFICAgICAgICgxVUwgPDwgUEFHRV9TSElGVCkKKyNkZWZpbmUgUEFHRV9NQVNLICAgICAgICh+KFBBR0VfU0laRS0xKSkKKworI2lmZGVmIF9fS0VSTkVMX18KKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNpZm5kZWYgX19zMzkweF9fCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9wYWdlKHZvaWQgKnBhZ2UpCit7CisJcmVnaXN0ZXJfcGFpciBycDsKKworCXJwLnN1YnJlZy5ldmVuID0gKHVuc2lnbmVkIGxvbmcpIHBhZ2U7CisJcnAuc3VicmVnLm9kZCA9ICh1bnNpZ25lZCBsb25nKSA0MDk2OworICAgICAgICBhc20gdm9sYXRpbGUgKCIgICBzbHIgIDEsMVxuIgorCQkgICAgICAiICAgbXZjbCAlMCwwIgorCQkgICAgICA6ICIrJmEiIChycCkgOiA6ICJtZW1vcnkiLCAiY2MiLCAiMSIgKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNvcHlfcGFnZSh2b2lkICp0bywgdm9pZCAqZnJvbSkKK3sKKyAgICAgICAgaWYgKE1BQ0hJTkVfSEFTX01WUEcpCisJCWFzbSB2b2xhdGlsZSAoIiAgIHNyICAgMCwwXG4iCisJCQkgICAgICAiICAgbXZwZyAlMCwlMSIKKwkJCSAgICAgIDogOiAiYSIgKCh2b2lkICopKHRvKSksICJhIiAoKHZvaWQgKikoZnJvbSkpCisJCQkgICAgICA6ICJtZW1vcnkiLCAiY2MiLCAiMCIgKTsKKwllbHNlCisJCWFzbSB2b2xhdGlsZSAoIiAgIG12YyAgMCgyNTYsJTApLDAoJTEpXG4iCisJCQkgICAgICAiICAgbXZjICAyNTYoMjU2LCUwKSwyNTYoJTEpXG4iCisJCQkgICAgICAiICAgbXZjICA1MTIoMjU2LCUwKSw1MTIoJTEpXG4iCisJCQkgICAgICAiICAgbXZjICA3NjgoMjU2LCUwKSw3NjgoJTEpXG4iCisJCQkgICAgICAiICAgbXZjICAxMDI0KDI1NiwlMCksMTAyNCglMSlcbiIKKwkJCSAgICAgICIgICBtdmMgIDEyODAoMjU2LCUwKSwxMjgwKCUxKVxuIgorCQkJICAgICAgIiAgIG12YyAgMTUzNigyNTYsJTApLDE1MzYoJTEpXG4iCisJCQkgICAgICAiICAgbXZjICAxNzkyKDI1NiwlMCksMTc5MiglMSlcbiIKKwkJCSAgICAgICIgICBtdmMgIDIwNDgoMjU2LCUwKSwyMDQ4KCUxKVxuIgorCQkJICAgICAgIiAgIG12YyAgMjMwNCgyNTYsJTApLDIzMDQoJTEpXG4iCisJCQkgICAgICAiICAgbXZjICAyNTYwKDI1NiwlMCksMjU2MCglMSlcbiIKKwkJCSAgICAgICIgICBtdmMgIDI4MTYoMjU2LCUwKSwyODE2KCUxKVxuIgorCQkJICAgICAgIiAgIG12YyAgMzA3MigyNTYsJTApLDMwNzIoJTEpXG4iCisJCQkgICAgICAiICAgbXZjICAzMzI4KDI1NiwlMCksMzMyOCglMSlcbiIKKwkJCSAgICAgICIgICBtdmMgIDM1ODQoMjU2LCUwKSwzNTg0KCUxKVxuIgorCQkJICAgICAgIiAgIG12YyAgMzg0MCgyNTYsJTApLDM4NDAoJTEpXG4iCisJCQkgICAgICA6IDogImEiKCh2b2lkICopKHRvKSksImEiKCh2b2lkICopKGZyb20pKSAKKwkJCSAgICAgIDogIm1lbW9yeSIgKTsKK30KKworI2Vsc2UgLyogX19zMzkweF9fICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9wYWdlKHZvaWQgKnBhZ2UpCit7CisgICAgICAgIGFzbSB2b2xhdGlsZSAoIiAgIGxnciAgMiwlMFxuIgorICAgICAgICAgICAgICAgICAgICAgICIgICBsZ2hpIDMsNDA5NlxuIgorICAgICAgICAgICAgICAgICAgICAgICIgICBzbGdyIDEsMVxuIgorICAgICAgICAgICAgICAgICAgICAgICIgICBtdmNsIDIsMCIKKyAgICAgICAgICAgICAgICAgICAgICA6IDogImEiICgodm9pZCAqKSAocGFnZSkpCisJCSAgICAgIDogIm1lbW9yeSIsICJjYyIsICIxIiwgIjIiLCAiMyIgKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNvcHlfcGFnZSh2b2lkICp0bywgdm9pZCAqZnJvbSkKK3sKKyAgICAgICAgaWYgKE1BQ0hJTkVfSEFTX01WUEcpCisJCWFzbSB2b2xhdGlsZSAoIiAgIHNnciAgMCwwXG4iCisJCQkgICAgICAiICAgbXZwZyAlMCwlMSIKKwkJCSAgICAgIDogOiAiYSIgKCh2b2lkICopKHRvKSksICJhIiAoKHZvaWQgKikoZnJvbSkpCisJCQkgICAgICA6ICJtZW1vcnkiLCAiY2MiLCAiMCIgKTsKKwllbHNlCisJCWFzbSB2b2xhdGlsZSAoIiAgIG12YyAgMCgyNTYsJTApLDAoJTEpXG4iCisJCQkgICAgICAiICAgbXZjICAyNTYoMjU2LCUwKSwyNTYoJTEpXG4iCisJCQkgICAgICAiICAgbXZjICA1MTIoMjU2LCUwKSw1MTIoJTEpXG4iCisJCQkgICAgICAiICAgbXZjICA3NjgoMjU2LCUwKSw3NjgoJTEpXG4iCisJCQkgICAgICAiICAgbXZjICAxMDI0KDI1NiwlMCksMTAyNCglMSlcbiIKKwkJCSAgICAgICIgICBtdmMgIDEyODAoMjU2LCUwKSwxMjgwKCUxKVxuIgorCQkJICAgICAgIiAgIG12YyAgMTUzNigyNTYsJTApLDE1MzYoJTEpXG4iCisJCQkgICAgICAiICAgbXZjICAxNzkyKDI1NiwlMCksMTc5MiglMSlcbiIKKwkJCSAgICAgICIgICBtdmMgIDIwNDgoMjU2LCUwKSwyMDQ4KCUxKVxuIgorCQkJICAgICAgIiAgIG12YyAgMjMwNCgyNTYsJTApLDIzMDQoJTEpXG4iCisJCQkgICAgICAiICAgbXZjICAyNTYwKDI1NiwlMCksMjU2MCglMSlcbiIKKwkJCSAgICAgICIgICBtdmMgIDI4MTYoMjU2LCUwKSwyODE2KCUxKVxuIgorCQkJICAgICAgIiAgIG12YyAgMzA3MigyNTYsJTApLDMwNzIoJTEpXG4iCisJCQkgICAgICAiICAgbXZjICAzMzI4KDI1NiwlMCksMzMyOCglMSlcbiIKKwkJCSAgICAgICIgICBtdmMgIDM1ODQoMjU2LCUwKSwzNTg0KCUxKVxuIgorCQkJICAgICAgIiAgIG12YyAgMzg0MCgyNTYsJTApLDM4NDAoJTEpXG4iCisJCQkgICAgICA6IDogImEiKCh2b2lkICopKHRvKSksImEiKCh2b2lkICopKGZyb20pKSAKKwkJCSAgICAgIDogIm1lbW9yeSIgKTsKK30KKworI2VuZGlmIC8qIF9fczM5MHhfXyAqLworCisjZGVmaW5lIGNsZWFyX3VzZXJfcGFnZShwYWdlLCB2YWRkciwgcGcpCWNsZWFyX3BhZ2UocGFnZSkKKyNkZWZpbmUgY29weV91c2VyX3BhZ2UodG8sIGZyb20sIHZhZGRyLCBwZykJY29weV9wYWdlKHRvLCBmcm9tKQorCisjZGVmaW5lIGFsbG9jX3plcm9lZF91c2VyX2hpZ2hwYWdlKHZtYSwgdmFkZHIpIGFsbG9jX3BhZ2Vfdm1hKEdGUF9ISUdIVVNFUiB8IF9fR0ZQX1pFUk8sIHZtYSwgdmFkZHIpCisjZGVmaW5lIF9fSEFWRV9BUkNIX0FMTE9DX1pFUk9FRF9VU0VSX0hJR0hQQUdFCisKKy8qIFB1cmUgMl5uIHZlcnNpb24gb2YgZ2V0X29yZGVyICovCitleHRlcm4gX19pbmxpbmVfXyBpbnQgZ2V0X29yZGVyKHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKyAgICAgICAgaW50IG9yZGVyOworCisgICAgICAgIHNpemUgPSAoc2l6ZS0xKSA+PiAoUEFHRV9TSElGVC0xKTsKKyAgICAgICAgb3JkZXIgPSAtMTsKKyAgICAgICAgZG8geworICAgICAgICAgICAgICAgIHNpemUgPj49IDE7CisgICAgICAgICAgICAgICAgb3JkZXIrKzsKKyAgICAgICAgfSB3aGlsZSAoc2l6ZSk7CisgICAgICAgIHJldHVybiBvcmRlcjsKK30KKworLyoKKyAqIFRoZXNlIGFyZSB1c2VkIHRvIG1ha2UgdXNlIG9mIEMgdHlwZS1jaGVja2luZy4uCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHBncHJvdDsgfSBwZ3Byb3RfdDsKK3R5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBwdGU7IH0gcHRlX3Q7CisKKyNkZWZpbmUgcHRlX3ZhbCh4KSAgICAgICgoeCkucHRlKQorI2RlZmluZSBwZ3Byb3RfdmFsKHgpICAgKCh4KS5wZ3Byb3QpCisKKyNpZm5kZWYgX19zMzkweF9fCisKK3R5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBwbWQ7IH0gcG1kX3Q7Cit0eXBlZGVmIHN0cnVjdCB7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgcGdkMDsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBwZ2QxOworICAgICAgICB1bnNpZ25lZCBsb25nIHBnZDI7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgcGdkMzsKKyAgICAgICAgfSBwZ2RfdDsKKworI2RlZmluZSBwbWRfdmFsKHgpICAgICAgKCh4KS5wbWQpCisjZGVmaW5lIHBnZF92YWwoeCkgICAgICAoKHgpLnBnZDApCisKKyNlbHNlIC8qIF9fczM5MHhfXyAqLworCit0eXBlZGVmIHN0cnVjdCB7IAorICAgICAgICB1bnNpZ25lZCBsb25nIHBtZDA7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgcG1kMTsgCisgICAgICAgIH0gcG1kX3Q7Cit0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgcGdkOyB9IHBnZF90OworCisjZGVmaW5lIHBtZF92YWwoeCkgICAgICAoKHgpLnBtZDApCisjZGVmaW5lIHBtZF92YWwxKHgpICAgICAoKHgpLnBtZDEpCisjZGVmaW5lIHBnZF92YWwoeCkgICAgICAoKHgpLnBnZCkKKworI2VuZGlmIC8qIF9fczM5MHhfXyAqLworCisjZGVmaW5lIF9fcHRlKHgpICAgICAgICAoKHB0ZV90KSB7ICh4KSB9ICkKKyNkZWZpbmUgX19wbWQoeCkgICAgICAgICgocG1kX3QpIHsgKHgpIH0gKQorI2RlZmluZSBfX3BnZCh4KSAgICAgICAgKChwZ2RfdCkgeyAoeCkgfSApCisjZGVmaW5lIF9fcGdwcm90KHgpICAgICAoKHBncHJvdF90KSB7ICh4KSB9ICkKKworLyogZGVmYXVsdCBzdG9yYWdlIGtleSB1c2VkIGZvciBhbGwgcGFnZXMgKi8KK2V4dGVybiB1bnNpZ25lZCBpbnQgZGVmYXVsdF9zdG9yYWdlX2tleTsKKworc3RhdGljIGlubGluZSB2b2lkCitwYWdlX3NldF9zdG9yYWdlX2tleSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGludCBza2V5KQoreworCWFzbSB2b2xhdGlsZSAoICJzc2tlICUwLCUxIiA6IDogImQiIChza2V5KSwgImEiIChhZGRyKSApOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAorcGFnZV9nZXRfc3RvcmFnZV9rZXkodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXVuc2lnbmVkIGludCBza2V5OworCisJYXNtIHZvbGF0aWxlICggImlza2UgJTAsJTEiIDogIj1kIiAoc2tleSkgOiAiYSIgKGFkZHIpLCAiMCIgKDApICk7CisKKwlyZXR1cm4gc2tleTsKK30KKworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKworLyogdG8gYWxpZ24gdGhlIHBvaW50ZXIgdG8gdGhlIChuZXh0KSBwYWdlIGJvdW5kYXJ5ICovCisjZGVmaW5lIFBBR0VfQUxJR04oYWRkcikgICAgICAgICgoKGFkZHIpK1BBR0VfU0laRS0xKSZQQUdFX01BU0spCisKKyNkZWZpbmUgX19QQUdFX09GRlNFVCAgICAgICAgICAgMHgwVUwKKyNkZWZpbmUgUEFHRV9PRkZTRVQgICAgICAgICAgICAgMHgwVUwKKyNkZWZpbmUgX19wYSh4KSAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpKHgpCisjZGVmaW5lIF9fdmEoeCkgICAgICAgICAgICAgICAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpKHgpCisjZGVmaW5lIHBmbl90b19wYWdlKHBmbikJKG1lbV9tYXAgKyAocGZuKSkKKyNkZWZpbmUgcGFnZV90b19wZm4ocGFnZSkJKCh1bnNpZ25lZCBsb25nKSgocGFnZSkgLSBtZW1fbWFwKSkKKyNkZWZpbmUgdmlydF90b19wYWdlKGthZGRyKQlwZm5fdG9fcGFnZShfX3BhKGthZGRyKSA+PiBQQUdFX1NISUZUKQorCisjZGVmaW5lIHBmbl92YWxpZChwZm4pCQkoKHBmbikgPCBtYXhfbWFwbnIpCisjZGVmaW5lIHZpcnRfYWRkcl92YWxpZChrYWRkcikJcGZuX3ZhbGlkKF9fcGEoa2FkZHIpID4+IFBBR0VfU0hJRlQpCisKKyNkZWZpbmUgVk1fREFUQV9ERUZBVUxUX0ZMQUdTCShWTV9SRUFEIHwgVk1fV1JJVEUgfCBWTV9FWEVDIHwgXAorCQkJCSBWTV9NQVlSRUFEIHwgVk1fTUFZV1JJVEUgfCBWTV9NQVlFWEVDKQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX1MzOTBfUEFHRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL3BhcmFtLmggYi9pbmNsdWRlL2FzbS1zMzkwL3BhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg1YTdlMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvcGFyYW0uaApAQCAtMCwwICsxLDMwIEBACisvKgorICogIGluY2x1ZGUvYXNtLXMzOTAvcGFyYW0uaAorICoKKyAqICBTMzkwIHZlcnNpb24KKyAqCisgKiAgRGVyaXZlZCBmcm9tICJpbmNsdWRlL2FzbS1pMzg2L3BhcmFtLmgiCisgKi8KKworI2lmbmRlZiBfQVNNUzM5MF9QQVJBTV9ICisjZGVmaW5lIF9BU01TMzkwX1BBUkFNX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKyMgZGVmaW5lIEhaCQkxMDAJCS8qIEludGVybmFsIGtlcm5lbCB0aW1lciBmcmVxdWVuY3kgKi8KKyMgZGVmaW5lIFVTRVJfSFoJMTAwCQkvKiAuLiBzb21lIHVzZXIgaW50ZXJmYWNlcyBhcmUgaW4gInRpY2tzIiAqLworIyBkZWZpbmUgQ0xPQ0tTX1BFUl9TRUMJKFVTRVJfSFopCS8qIGxpa2UgdGltZXMoKSAqLworI2VuZGlmCisKKyNpZm5kZWYgSFoKKyNkZWZpbmUgSFogMTAwCisjZW5kaWYKKworI2RlZmluZSBFWEVDX1BBR0VTSVpFCTQwOTYKKworI2lmbmRlZiBOT0dST1VQCisjZGVmaW5lIE5PR1JPVVAJCSgtMSkKKyNlbmRpZgorCisjZGVmaW5lIE1BWEhPU1ROQU1FTEVOCTY0CS8qIG1heCBsZW5ndGggb2YgaG9zdG5hbWUgKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL3BjaS5oIGIvaW5jbHVkZS9hc20tczM5MC9wY2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmExNDVjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tczM5MC9wY2kuaApAQCAtMCwwICsxLDEwIEBACisjaWZuZGVmIF9fQVNNX1MzOTBfUENJX0gKKyNkZWZpbmUgX19BU01fUzM5MF9QQ0lfSAorCisvKiBTLzM5MCBzeXN0ZW1zIGRvbid0IGhhdmUgYSBQQ0kgYnVzLiBUaGlzIGZpbGUgaXMganVzdCBoZXJlIGJlY2F1c2Ugc29tZSBzdHVwaWQgLmMgY29kZQorICogaW5jbHVkZXMgaXQgZXZlbiBpZiBDT05GSUdfUENJIGlzIG5vdCBzZXQuCisgKi8KKyNkZWZpbmUgUENJX0RNQV9CVVNfSVNfUEhZUyAoMCkKKworI2VuZGlmIC8qIF9fQVNNX1MzOTBfUENJX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9wZXJjcHUuaCBiL2luY2x1ZGUvYXNtLXMzOTAvcGVyY3B1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTIzZmNhYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvcGVyY3B1LmgKQEAgLTAsMCArMSw3MCBAQAorI2lmbmRlZiBfX0FSQ0hfUzM5MF9QRVJDUFVfXworI2RlZmluZSBfX0FSQ0hfUzM5MF9QRVJDUFVfXworCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxhc20vbG93Y29yZS5oPgorCisjZGVmaW5lIF9fR0VORVJJQ19QRVJfQ1BVCisKKy8qCisgKiBzMzkwIHVzZXMgaXRzIG93biBpbXBsZW1lbnRhdGlvbiBmb3IgcGVyIGNwdSBkYXRhLCB0aGUgb2Zmc2V0IG9mCisgKiB0aGUgY3B1IGxvY2FsIGRhdGEgYXJlYSBpcyBjYWNoZWQgaW4gdGhlIGNwdSdzIGxvd2NvcmUgbWVtb3J5LgorICogRm9yIDY0IGJpdCBtb2R1bGUgY29kZSBzMzkwIGZvcmNlcyB0aGUgdXNlIG9mIGEgR09UIHNsb3QgZm9yIHRoZQorICogYWRkcmVzcyBvZiB0aGUgcGVyIGNwdSB2YXJpYWJsZS4gVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSB0aGUgbW9kdWxlCisgKiBtYXkgYmUgbW9yZSB0aGFuIDRHIGFib3ZlIHRoZSBwZXIgY3B1IGFyZWEuCisgKi8KKyNpZiBkZWZpbmVkKF9fczM5MHhfXykgJiYgZGVmaW5lZChNT0RVTEUpCisKKyNkZWZpbmUgX19yZWxvY19oaWRlKHZhcixvZmZzZXQpIFwKKyAgKCooeyB1bnNpZ25lZCBsb25nICpfX3B0cjsgXAorICAgICAgIGFzbSAoICJsYXJsICUwLHBlcl9jcHVfXyIjdmFyIkBHT1RFTlQiIFwKKyAgICAgICAgICAgICA6ICI9YSIgKF9fcHRyKSA6ICJYIiAocGVyX2NwdV9fIyN2YXIpICk7IFwKKyAgICAgICAodHlwZW9mKCZwZXJfY3B1X18jI3ZhcikpKCgqX19wdHIpICsgKG9mZnNldCkpOyB9KSkKKworI2Vsc2UKKworI2RlZmluZSBfX3JlbG9jX2hpZGUodmFyLCBvZmZzZXQpIFwKKyAgKCooeyB1bnNpZ25lZCBsb25nIF9fcHRyOyBcCisgICAgICAgYXNtICggIiIgOiAiPWEiIChfX3B0cikgOiAiMCIgKCZwZXJfY3B1X18jI3ZhcikgKTsgXAorICAgICAgICh0eXBlb2YoJnBlcl9jcHVfXyMjdmFyKSkgKF9fcHRyICsgKG9mZnNldCkpOyB9KSkKKworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfU01QCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fcGVyX2NwdV9vZmZzZXRbTlJfQ1BVU107CisKKy8qIFNlcGFyYXRlIG91dCB0aGUgdHlwZSwgc28gKGludFszXSwgZm9vKSB3b3Jrcy4gKi8KKyNkZWZpbmUgREVGSU5FX1BFUl9DUFUodHlwZSwgbmFtZSkgXAorICAgIF9fYXR0cmlidXRlX18oKF9fc2VjdGlvbl9fKCIuZGF0YS5wZXJjcHUiKSkpIFwKKyAgICBfX3R5cGVvZl9fKHR5cGUpIHBlcl9jcHVfXyMjbmFtZQorCisjZGVmaW5lIF9fZ2V0X2NwdV92YXIodmFyKSBfX3JlbG9jX2hpZGUodmFyLFMzOTBfbG93Y29yZS5wZXJjcHVfb2Zmc2V0KQorI2RlZmluZSBwZXJfY3B1KHZhcixjcHUpIF9fcmVsb2NfaGlkZSh2YXIsX19wZXJfY3B1X29mZnNldFtjcHVdKQorCisvKiBBIG1hY3JvIHRvIGF2b2lkICNpbmNsdWRlIGhlbGwuLi4gKi8KKyNkZWZpbmUgcGVyY3B1X21vZGNvcHkocGNwdWRzdCwgc3JjLCBzaXplKQkJCVwKK2RvIHsJCQkJCQkJCVwKKwl1bnNpZ25lZCBpbnQgX19pOwkJCQkJXAorCWZvciAoX19pID0gMDsgX19pIDwgTlJfQ1BVUzsgX19pKyspCQkJXAorCQlpZiAoY3B1X3Bvc3NpYmxlKF9faSkpCQkJCVwKKwkJCW1lbWNweSgocGNwdWRzdCkrX19wZXJfY3B1X29mZnNldFtfX2ldLAlcCisJCQkgICAgICAgKHNyYyksIChzaXplKSk7CQkJXAorfSB3aGlsZSAoMCkKKworI2Vsc2UgLyogISBTTVAgKi8KKworI2RlZmluZSBERUZJTkVfUEVSX0NQVSh0eXBlLCBuYW1lKSBcCisgICAgX190eXBlb2ZfXyh0eXBlKSBwZXJfY3B1X18jI25hbWUKKworI2RlZmluZSBfX2dldF9jcHVfdmFyKHZhcikgX19yZWxvY19oaWRlKHZhciwwKQorI2RlZmluZSBwZXJfY3B1KHZhcixjcHUpIF9fcmVsb2NfaGlkZSh2YXIsMCkKKworI2VuZGlmIC8qIFNNUCAqLworCisjZGVmaW5lIERFQ0xBUkVfUEVSX0NQVSh0eXBlLCBuYW1lKSBleHRlcm4gX190eXBlb2ZfXyh0eXBlKSBwZXJfY3B1X18jI25hbWUKKworI2RlZmluZSBFWFBPUlRfUEVSX0NQVV9TWU1CT0wodmFyKSBFWFBPUlRfU1lNQk9MKHBlcl9jcHVfXyMjdmFyKQorI2RlZmluZSBFWFBPUlRfUEVSX0NQVV9TWU1CT0xfR1BMKHZhcikgRVhQT1JUX1NZTUJPTF9HUEwocGVyX2NwdV9fIyN2YXIpCisKKyNlbmRpZiAvKiBfX0FSQ0hfUzM5MF9QRVJDUFVfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9wZ2FsbG9jLmggYi9pbmNsdWRlL2FzbS1zMzkwL3BnYWxsb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDE3ZGQ3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tczM5MC9wZ2FsbG9jLmgKQEAgLTAsMCArMSwxNjggQEAKKy8qCisgKiAgaW5jbHVkZS9hc20tczM5MC9wZ2FsbG9jLmgKKyAqCisgKiAgUzM5MCB2ZXJzaW9uCisgKiAgICBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBJQk0gRGV1dHNjaGxhbmQgRW50d2lja2x1bmcgR21iSCwgSUJNIENvcnBvcmF0aW9uCisgKiAgICBBdXRob3Iocyk6IEhhcnRtdXQgUGVubmVyIChocEBkZS5pYm0uY29tKQorICogICAgICAgICAgICAgICBNYXJ0aW4gU2Nod2lkZWZza3kgKHNjaHdpZGVmc2t5QGRlLmlibS5jb20pCisgKgorICogIERlcml2ZWQgZnJvbSAiaW5jbHVkZS9hc20taTM4Ni9wZ2FsbG9jLmgiCisgKiAgICBDb3B5cmlnaHQgKEMpIDE5OTQgIExpbnVzIFRvcnZhbGRzCisgKi8KKworI2lmbmRlZiBfUzM5MF9QR0FMTE9DX0gKKyNkZWZpbmUgX1MzOTBfUEdBTExPQ19ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisjaW5jbHVkZSA8bGludXgvZ2ZwLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKworI2RlZmluZSBjaGVja19wZ3RfY2FjaGUoKQlkbyB7fSB3aGlsZSAoMCkKKworZXh0ZXJuIHZvaWQgZGlhZzEwKHVuc2lnbmVkIGxvbmcgYWRkcik7CisKKy8qCisgKiBBbGxvY2F0ZSBhbmQgZnJlZSBwYWdlIHRhYmxlcy4gVGhlIHh4eF9rZXJuZWwoKSB2ZXJzaW9ucyBhcmUKKyAqIHVzZWQgdG8gYWxsb2NhdGUgYSBrZXJuZWwgcGFnZSB0YWJsZSAtIHRoaXMgdHVybnMgb24gQVNOIGJpdHMKKyAqIGlmIGFueS4KKyAqLworCitzdGF0aWMgaW5saW5lIHBnZF90ICpwZ2RfYWxsb2Moc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJcGdkX3QgKnBnZDsKKwlpbnQgaTsKKworI2lmbmRlZiBfX3MzOTB4X18KKwlwZ2QgPSAocGdkX3QgKikgX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMLDEpOworICAgICAgICBpZiAocGdkICE9IE5VTEwpCisJCWZvciAoaSA9IDA7IGkgPCBVU0VSX1BUUlNfUEVSX1BHRDsgaSsrKQorCQkJcG1kX2NsZWFyKHBtZF9vZmZzZXQocGdkICsgaSwgaSpQR0RJUl9TSVpFKSk7CisjZWxzZSAvKiBfX3MzOTB4X18gKi8KKwlwZ2QgPSAocGdkX3QgKikgX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMLDIpOworICAgICAgICBpZiAocGdkICE9IE5VTEwpCisJCWZvciAoaSA9IDA7IGkgPCBQVFJTX1BFUl9QR0Q7IGkrKykKKwkJCXBnZF9jbGVhcihwZ2QgKyBpKTsKKyNlbmRpZiAvKiBfX3MzOTB4X18gKi8KKwlyZXR1cm4gcGdkOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGdkX2ZyZWUocGdkX3QgKnBnZCkKK3sKKyNpZm5kZWYgX19zMzkweF9fCisgICAgICAgIGZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpIHBnZCwgMSk7CisjZWxzZSAvKiBfX3MzOTB4X18gKi8KKyAgICAgICAgZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZykgcGdkLCAyKTsKKyNlbmRpZiAvKiBfX3MzOTB4X18gKi8KK30KKworI2lmbmRlZiBfX3MzOTB4X18KKy8qCisgKiBwYWdlIG1pZGRsZSBkaXJlY3RvcnkgYWxsb2NhdGlvbi9mcmVlIHJvdXRpbmVzLgorICogV2UgdXNlIHBtZCBjYWNoZSBvbmx5IG9uIHMzOTB4LCBzbyB0aGVzZSBhcmUgZHVtbXkgcm91dGluZXMuIFRoaXMKKyAqIGNvZGUgbmV2ZXIgdHJpZ2dlcnMgYmVjYXVzZSB0aGUgcGdkIHdpbGwgYWx3YXlzIGJlIHByZXNlbnQuCisgKi8KKyNkZWZpbmUgcG1kX2FsbG9jX29uZShtbSxhZGRyZXNzKSAgICAgICAoeyBCVUcoKTsgKChwbWRfdCAqKTIpOyB9KQorI2RlZmluZSBwbWRfZnJlZSh4KSAgICAgICAgICAgICAgICAgICAgIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgX19wbWRfZnJlZV90bGIodGxiLHgpCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHBnZF9wb3B1bGF0ZShtbSwgcG1kLCBwdGUpICAgICAgQlVHKCkKKyNlbHNlIC8qIF9fczM5MHhfXyAqLworc3RhdGljIGlubGluZSBwbWRfdCAqIHBtZF9hbGxvY19vbmUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgdm1hZGRyKQoreworCXBtZF90ICpwbWQ7CisgICAgICAgIGludCBpOworCisJcG1kID0gKHBtZF90ICopIF9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwgMik7CisJaWYgKHBtZCAhPSBOVUxMKSB7CisJCWZvciAoaT0wOyBpIDwgUFRSU19QRVJfUE1EOyBpKyspCisJCQlwbWRfY2xlYXIocG1kK2kpOworCX0KKwlyZXR1cm4gcG1kOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcG1kX2ZyZWUgKHBtZF90ICpwbWQpCit7CisJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZykgcG1kLCAyKTsKK30KKworI2RlZmluZSBfX3BtZF9mcmVlX3RsYih0bGIscG1kKQkJCVwKKwlkbyB7CQkJCQlcCisJCXRsYl9mbHVzaF9tbXUodGxiLCAwLCAwKTsJXAorCQlwbWRfZnJlZShwbWQpOwkJCVwKKwkgfSB3aGlsZSAoMCkKKworc3RhdGljIGlubGluZSB2b2lkIHBnZF9wb3B1bGF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKnBnZCwgcG1kX3QgKnBtZCkKK3sKKwlwZ2RfdmFsKCpwZ2QpID0gX1BHRF9FTlRSWSB8IF9fcGEocG1kKTsKK30KKworI2VuZGlmIC8qIF9fczM5MHhfXyAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgCitwbWRfcG9wdWxhdGVfa2VybmVsKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLCBwdGVfdCAqcHRlKQoreworI2lmbmRlZiBfX3MzOTB4X18KKwlwbWRfdmFsKHBtZFswXSkgPSBfUEFHRV9UQUJMRSArIF9fcGEocHRlKTsKKwlwbWRfdmFsKHBtZFsxXSkgPSBfUEFHRV9UQUJMRSArIF9fcGEocHRlKzI1Nik7CisJcG1kX3ZhbChwbWRbMl0pID0gX1BBR0VfVEFCTEUgKyBfX3BhKHB0ZSs1MTIpOworCXBtZF92YWwocG1kWzNdKSA9IF9QQUdFX1RBQkxFICsgX19wYShwdGUrNzY4KTsKKyNlbHNlIC8qIF9fczM5MHhfXyAqLworCXBtZF92YWwoKnBtZCkgPSBfUE1EX0VOVFJZICsgX19wYShwdGUpOworCXBtZF92YWwxKCpwbWQpID0gX1BNRF9FTlRSWSArIF9fcGEocHRlKzI1Nik7CisjZW5kaWYgLyogX19zMzkweF9fICovCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcG1kX3BvcHVsYXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlwbWRfcG9wdWxhdGVfa2VybmVsKG1tLCBwbWQsIChwdGVfdCAqKSgocGFnZS1tZW1fbWFwKSA8PCBQQUdFX1NISUZUKSk7Cit9CisKKy8qCisgKiBwYWdlIHRhYmxlIGVudHJ5IGFsbG9jYXRpb24vZnJlZSByb3V0aW5lcy4KKyAqLworc3RhdGljIGlubGluZSBwdGVfdCAqCitwdGVfYWxsb2Nfb25lX2tlcm5lbChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyB2bWFkZHIpCit7CisJcHRlX3QgKnB0ZTsKKyAgICAgICAgaW50IGk7CisKKwlwdGUgPSAocHRlX3QgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTHxfX0dGUF9SRVBFQVQpOworCWlmIChwdGUgIT0gTlVMTCkgeworCQlmb3IgKGk9MDsgaSA8IFBUUlNfUEVSX1BURTsgaSsrKSB7CisJCQlwdGVfY2xlYXIobW0sIHZtYWRkciwgcHRlK2kpOworCQkJdm1hZGRyICs9IFBBR0VfU0laRTsKKwkJfQorCX0KKwlyZXR1cm4gcHRlOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICoKK3B0ZV9hbGxvY19vbmUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgdm1hZGRyKQoreworCXB0ZV90ICpwdGUgPSBwdGVfYWxsb2Nfb25lX2tlcm5lbChtbSwgdm1hZGRyKTsKKwlpZiAocHRlKQorCQlyZXR1cm4gdmlydF90b19wYWdlKHB0ZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdGVfZnJlZV9rZXJuZWwocHRlX3QgKnB0ZSkKK3sKKyAgICAgICAgZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBwdGUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcHRlX2ZyZWUoc3RydWN0IHBhZ2UgKnB0ZSkKK3sKKyAgICAgICAgX19mcmVlX3BhZ2UocHRlKTsKK30KKworI2RlZmluZSBfX3B0ZV9mcmVlX3RsYih0bGIscHRlKSB0bGJfcmVtb3ZlX3BhZ2UodGxiLHB0ZSkKKworLyoKKyAqIFRoaXMgZXN0YWJsaXNoZXMga2VybmVsIHZpcnR1YWwgbWFwcGluZ3MgKGUuZy4sIGFzIGEgcmVzdWx0IG9mIGEKKyAqIHZtYWxsb2MgY2FsbCkuICBTaW5jZSBzMzkwLWVzYW1lIHVzZXMgYSBzZXBhcmF0ZSBrZXJuZWwgcGFnZSB0YWJsZSwKKyAqIHRoZXJlIGlzIG5vdGhpbmcgdG8gZG8gaGVyZS4uLiA6KQorICovCisjZGVmaW5lIHNldF9wZ2RpcihhZGRyLGVudHJ5KSBkbyB7IH0gd2hpbGUoMCkKKworI2VuZGlmIC8qIF9TMzkwX1BHQUxMT0NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1zMzkwL3BndGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjMzY2I3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tczM5MC9wZ3RhYmxlLmgKQEAgLTAsMCArMSw4MTMgQEAKKy8qCisgKiAgaW5jbHVkZS9hc20tczM5MC9wZ3RhYmxlLmgKKyAqCisgKiAgUzM5MCB2ZXJzaW9uCisgKiAgICBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBJQk0gRGV1dHNjaGxhbmQgRW50d2lja2x1bmcgR21iSCwgSUJNIENvcnBvcmF0aW9uCisgKiAgICBBdXRob3Iocyk6IEhhcnRtdXQgUGVubmVyIChocEBkZS5pYm0uY29tKQorICogICAgICAgICAgICAgICBVbHJpY2ggV2VpZ2FuZCAod2VpZ2FuZEBkZS5pYm0uY29tKQorICogICAgICAgICAgICAgICBNYXJ0aW4gU2Nod2lkZWZza3kgKHNjaHdpZGVmc2t5QGRlLmlibS5jb20pCisgKgorICogIERlcml2ZWQgZnJvbSAiaW5jbHVkZS9hc20taTM4Ni9wZ3RhYmxlLmgiCisgKi8KKworI2lmbmRlZiBfQVNNX1MzOTBfUEdUQUJMRV9ICisjZGVmaW5lIF9BU01fUzM5MF9QR1RBQkxFX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljLzRsZXZlbC1maXh1cC5oPgorCisvKgorICogVGhlIExpbnV4IG1lbW9yeSBtYW5hZ2VtZW50IGFzc3VtZXMgYSB0aHJlZS1sZXZlbCBwYWdlIHRhYmxlIHNldHVwLiBGb3IKKyAqIHMzOTAgMzEgYml0IHdlICJmb2xkIiB0aGUgbWlkIGxldmVsIGludG8gdGhlIHRvcC1sZXZlbCBwYWdlIHRhYmxlLCBzbworICogdGhhdCB3ZSBwaHlzaWNhbGx5IGhhdmUgdGhlIHNhbWUgdHdvLWxldmVsIHBhZ2UgdGFibGUgYXMgdGhlIHMzOTAgbW11CisgKiBleHBlY3RzIGluIDMxIGJpdCBtb2RlLiBGb3IgczM5MCA2NCBiaXQgd2UgdXNlIHRocmVlIG9mIHRoZSBmaXZlIGxldmVscworICogdGhlIGhhcmR3YXJlIHByb3ZpZGVzIChyZWdpb24gZmlyc3QgYW5kIHJlZ2lvbiBzZWNvbmQgdGFibGVzIGFyZSBub3QKKyAqIHVzZWQpLgorICoKKyAqIFRoZSAicGdkX3h4eCgpIiBmdW5jdGlvbnMgYXJlIHRyaXZpYWwgZm9yIGEgZm9sZGVkIHR3by1sZXZlbAorICogc2V0dXA6IHRoZSBwZ2QgaXMgbmV2ZXIgYmFkLCBhbmQgYSBwbWQgYWx3YXlzIGV4aXN0cyAoYXMgaXQncyBmb2xkZWQKKyAqIGludG8gdGhlIHBnZCBlbnRyeSkKKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGZ1bmN0aW9ucyBhbmQgZGVmaW5lcyBuZWNlc3NhcnkgdG8gbW9kaWZ5IGFuZCB1c2UKKyAqIHRoZSBTMzkwIHBhZ2UgdGFibGUgdHJlZS4KKyAqLworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNpbmNsdWRlIDxhc20vYnVnLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKworc3RydWN0IHZtX2FyZWFfc3RydWN0OyAvKiBmb3J3YXJkIGRlY2xhcmF0aW9uIChpbmNsdWRlL2xpbnV4L21tLmgpICovCisKK2V4dGVybiBwZ2RfdCBzd2FwcGVyX3BnX2RpcltdIF9fYXR0cmlidXRlX18gKChhbGlnbmVkICg0MDk2KSkpOworZXh0ZXJuIHZvaWQgcGFnaW5nX2luaXQodm9pZCk7CisKKy8qCisgKiBUaGUgUzM5MCBkb2Vzbid0IGhhdmUgYW55IGV4dGVybmFsIE1NVSBpbmZvOiB0aGUga2VybmVsIHBhZ2UKKyAqIHRhYmxlcyBjb250YWluIGFsbCB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uLgorICovCisjZGVmaW5lIHVwZGF0ZV9tbXVfY2FjaGUodm1hLCBhZGRyZXNzLCBwdGUpICAgICBkbyB7IH0gd2hpbGUgKDApCisKKy8qCisgKiBaRVJPX1BBR0UgaXMgYSBnbG9iYWwgc2hhcmVkIHBhZ2UgdGhhdCBpcyBhbHdheXMgemVybzogdXNlZAorICogZm9yIHplcm8tbWFwcGVkIG1lbW9yeSBhcmVhcyBldGMuLgorICovCitleHRlcm4gY2hhciBlbXB0eV96ZXJvX3BhZ2VbUEFHRV9TSVpFXTsKKyNkZWZpbmUgWkVST19QQUdFKHZhZGRyKSAodmlydF90b19wYWdlKGVtcHR5X3plcm9fcGFnZSkpCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisvKgorICogUE1EX1NISUZUIGRldGVybWluZXMgdGhlIHNpemUgb2YgdGhlIGFyZWEgYSBzZWNvbmQtbGV2ZWwgcGFnZQorICogdGFibGUgY2FuIG1hcAorICogUEdESVJfU0hJRlQgZGV0ZXJtaW5lcyB3aGF0IGEgdGhpcmQtbGV2ZWwgcGFnZSB0YWJsZSBlbnRyeSBjYW4gbWFwCisgKi8KKyNpZm5kZWYgX19zMzkweF9fCisjIGRlZmluZSBQTURfU0hJRlQJMjIKKyMgZGVmaW5lIFBHRElSX1NISUZUCTIyCisjZWxzZSAvKiBfX3MzOTB4X18gKi8KKyMgZGVmaW5lIFBNRF9TSElGVAkyMQorIyBkZWZpbmUgUEdESVJfU0hJRlQJMzEKKyNlbmRpZiAvKiBfX3MzOTB4X18gKi8KKworI2RlZmluZSBQTURfU0laRSAgICAgICAgKDFVTCA8PCBQTURfU0hJRlQpCisjZGVmaW5lIFBNRF9NQVNLICAgICAgICAofihQTURfU0laRS0xKSkKKyNkZWZpbmUgUEdESVJfU0laRSAgICAgICgxVUwgPDwgUEdESVJfU0hJRlQpCisjZGVmaW5lIFBHRElSX01BU0sgICAgICAofihQR0RJUl9TSVpFLTEpKQorCisvKgorICogZW50cmllcyBwZXIgcGFnZSBkaXJlY3RvcnkgbGV2ZWw6IHRoZSBTMzkwIGlzIHR3by1sZXZlbCwgc28KKyAqIHdlIGRvbid0IHJlYWxseSBoYXZlIGFueSBQTUQgZGlyZWN0b3J5IHBoeXNpY2FsbHkuCisgKiBmb3IgUzM5MCBzZWdtZW50LXRhYmxlIGVudHJpZXMgYXJlIGNvbWJpbmVkIHRvIG9uZSBQR0QKKyAqIHRoYXQgbGVhZHMgdG8gMTAyNCBwdGUgcGVyIHBnZAorICovCisjaWZuZGVmIF9fczM5MHhfXworIyBkZWZpbmUgUFRSU19QRVJfUFRFICAgIDEwMjQKKyMgZGVmaW5lIFBUUlNfUEVSX1BNRCAgICAxCisjIGRlZmluZSBQVFJTX1BFUl9QR0QgICAgNTEyCisjZWxzZSAvKiBfX3MzOTB4X18gKi8KKyMgZGVmaW5lIFBUUlNfUEVSX1BURSAgICA1MTIKKyMgZGVmaW5lIFBUUlNfUEVSX1BNRCAgICAxMDI0CisjIGRlZmluZSBQVFJTX1BFUl9QR0QgICAgMjA0OAorI2VuZGlmIC8qIF9fczM5MHhfXyAqLworCisvKgorICogcGdkIGVudHJpZXMgdXNlZCB1cCBieSB1c2VyL2tlcm5lbDoKKyAqLworI2lmbmRlZiBfX3MzOTB4X18KKyMgZGVmaW5lIFVTRVJfUFRSU19QRVJfUEdEICA1MTIKKyMgZGVmaW5lIFVTRVJfUEdEX1BUUlMgICAgICA1MTIKKyMgZGVmaW5lIEtFUk5FTF9QR0RfUFRSUyAgICA1MTIKKyMgZGVmaW5lIEZJUlNUX1VTRVJfUEdEX05SICAwCisjZWxzZSAvKiBfX3MzOTB4X18gKi8KKyMgZGVmaW5lIFVTRVJfUFRSU19QRVJfUEdEICAyMDQ4CisjIGRlZmluZSBVU0VSX1BHRF9QVFJTICAgICAgMjA0OAorIyBkZWZpbmUgS0VSTkVMX1BHRF9QVFJTICAgIDIwNDgKKyMgZGVmaW5lIEZJUlNUX1VTRVJfUEdEX05SICAwCisjZW5kaWYgLyogX19zMzkweF9fICovCisKKyNkZWZpbmUgcHRlX0VSUk9SKGUpIFwKKwlwcmludGsoIiVzOiVkOiBiYWQgcHRlICVwLlxuIiwgX19GSUxFX18sIF9fTElORV9fLCAodm9pZCAqKSBwdGVfdmFsKGUpKQorI2RlZmluZSBwbWRfRVJST1IoZSkgXAorCXByaW50aygiJXM6JWQ6IGJhZCBwbWQgJXAuXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sICh2b2lkICopIHBtZF92YWwoZSkpCisjZGVmaW5lIHBnZF9FUlJPUihlKSBcCisJcHJpbnRrKCIlczolZDogYmFkIHBnZCAlcC5cbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgKHZvaWQgKikgcGdkX3ZhbChlKSkKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKy8qCisgKiBKdXN0IGFueSBhcmJpdHJhcnkgb2Zmc2V0IHRvIHRoZSBzdGFydCBvZiB0aGUgdm1hbGxvYyBWTSBhcmVhOiB0aGUKKyAqIGN1cnJlbnQgOE1CIHZhbHVlIGp1c3QgbWVhbnMgdGhhdCB0aGVyZSB3aWxsIGJlIGEgOE1CICJob2xlIiBhZnRlciB0aGUKKyAqIHBoeXNpY2FsIG1lbW9yeSB1bnRpbCB0aGUga2VybmVsIHZpcnR1YWwgbWVtb3J5IHN0YXJ0cy4gIFRoYXQgbWVhbnMgdGhhdAorICogYW55IG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIHdpbGwgaG9wZWZ1bGx5IGJlIGNhdWdodC4KKyAqIFRoZSB2bWFsbG9jKCkgcm91dGluZXMgbGVhdmVzIGEgaG9sZSBvZiA0a0IgYmV0d2VlbiBlYWNoIHZtYWxsb2NlZAorICogYXJlYSBmb3IgdGhlIHNhbWUgcmVhc29uLiA7KQorICovCisjZGVmaW5lIFZNQUxMT0NfT0ZGU0VUICAoOCoxMDI0KjEwMjQpCisjZGVmaW5lIFZNQUxMT0NfU1RBUlQgICAoKCh1bnNpZ25lZCBsb25nKSBoaWdoX21lbW9yeSArIFZNQUxMT0NfT0ZGU0VUKSBcCisJCQkgJiB+KFZNQUxMT0NfT0ZGU0VULTEpKQorI2lmbmRlZiBfX3MzOTB4X18KKyMgZGVmaW5lIFZNQUxMT0NfRU5EICAgICAoMHg3ZmZmZmZmZkwpCisjZWxzZSAvKiBfX3MzOTB4X18gKi8KKyMgZGVmaW5lIFZNQUxMT0NfRU5EICAgICAoMHg0MDAwMDAwMDAwMEwpCisjZW5kaWYgLyogX19zMzkweF9fICovCisKKworLyoKKyAqIEEgMzEgYml0IHBhZ2V0YWJsZSBlbnRyeSBvZiBTMzkwIGhhcyBmb2xsb3dpbmcgZm9ybWF0OgorICogIHwgICBQRlJBICAgICAgICAgIHwgICAgfCAgT1MgIHwKKyAqIDAgICAgICAgICAgICAgICAgICAgMElQMAorICogMDAwMDAwMDAwMDExMTExMTExMTEyMjIyMjIyMjIyMzMKKyAqIDAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxCisgKgorICogSSBQYWdlLUludmFsaWQgQml0OiAgICBQYWdlIGlzIG5vdCBhdmFpbGFibGUgZm9yIGFkZHJlc3MtdHJhbnNsYXRpb24KKyAqIFAgUGFnZS1Qcm90ZWN0aW9uIEJpdDogU3RvcmUgYWNjZXNzIG5vdCBwb3NzaWJsZSBmb3IgcGFnZQorICoKKyAqIEEgMzEgYml0IHNlZ21lbnR0YWJsZSBlbnRyeSBvZiBTMzkwIGhhcyBmb2xsb3dpbmcgZm9ybWF0OgorICogIHwgICBQLXRhYmxlIG9yaWdpbiAgICAgIHwgIHxQVEwKKyAqIDAgICAgICAgICAgICAgICAgICAgICAgICAgSUMKKyAqIDAwMDAwMDAwMDAxMTExMTExMTExMjIyMjIyMjIyMjMzCisgKiAwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMQorICoKKyAqIEkgU2VnbWVudC1JbnZhbGlkIEJpdDogICAgU2VnbWVudCBpcyBub3QgYXZhaWxhYmxlIGZvciBhZGRyZXNzLXRyYW5zbGF0aW9uCisgKiBDIENvbW1vbi1TZWdtZW50IEJpdDogICAgIFNlZ21lbnQgaXMgbm90IHByaXZhdGUgKFBvUCAzLTMwKQorICogUFRMIFBhZ2UtVGFibGUtTGVuZ3RoOiAgICBQYWdlLXRhYmxlIGxlbmd0aCAoUFRMKzEqMTYgZW50cmllcyAtPiB1cCB0byAyNTYpCisgKgorICogVGhlIDMxIGJpdCBzZWdtZW50dGFibGUgb3JpZ2luIG9mIFMzOTAgaGFzIGZvbGxvd2luZyBmb3JtYXQ6CisgKgorICogIHxTLXRhYmxlIG9yaWdpbiAgIHwgICAgIHwgU1RMIHwKKyAqIFggICAgICAgICAgICAgICAgICAgKipHUFMKKyAqIDAwMDAwMDAwMDAxMTExMTExMTExMjIyMjIyMjIyMjMzCisgKiAwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMQorICoKKyAqIFggU3BhY2UtU3dpdGNoIGV2ZW50OgorICogRyBTZWdtZW50LUludmFsaWQgQml0OiAgICAgKgorICogUCBQcml2YXRlLVNwYWNlIEJpdDogICAgICAgU2VnbWVudCBpcyBub3QgcHJpdmF0ZSAoUG9QIDMtMzApCisgKiBTIFN0b3JhZ2UtQWx0ZXJhdGlvbjoKKyAqIFNUTCBTZWdtZW50LVRhYmxlLUxlbmd0aDogIFNlZ21lbnQtdGFibGUgbGVuZ3RoIChTVEwrMSoxNiBlbnRyaWVzIC0+IHVwIHRvIDIwNDgpCisgKgorICogQSA2NCBiaXQgcGFnZXRhYmxlIGVudHJ5IG9mIFMzOTAgaGFzIGZvbGxvd2luZyBmb3JtYXQ6CisgKiB8ICAgICAgICAgICAgICAgICAgICAgUEZSQSAgICAgICAgICAgICAgICAgICAgICAgICB8MElQMHwgIE9TICB8CisgKiAwMDAwMDAwMDAwMTExMTExMTExMTIyMjIyMjIyMjIzMzMzMzMzMzMzNDQ0NDQ0NDQ0NDU1NTU1NTU1NTU2NjY2CisgKiAwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzCisgKgorICogSSBQYWdlLUludmFsaWQgQml0OiAgICBQYWdlIGlzIG5vdCBhdmFpbGFibGUgZm9yIGFkZHJlc3MtdHJhbnNsYXRpb24KKyAqIFAgUGFnZS1Qcm90ZWN0aW9uIEJpdDogU3RvcmUgYWNjZXNzIG5vdCBwb3NzaWJsZSBmb3IgcGFnZQorICoKKyAqIEEgNjQgYml0IHNlZ21lbnR0YWJsZSBlbnRyeSBvZiBTMzkwIGhhcyBmb2xsb3dpbmcgZm9ybWF0OgorICogfCAgICAgICAgUC10YWJsZSBvcmlnaW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgVFQKKyAqIDAwMDAwMDAwMDAxMTExMTExMTExMjIyMjIyMjIyMjMzMzMzMzMzMzM0NDQ0NDQ0NDQ0NTU1NTU1NTU1NTY2NjYKKyAqIDAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjMKKyAqCisgKiBJIFNlZ21lbnQtSW52YWxpZCBCaXQ6ICAgIFNlZ21lbnQgaXMgbm90IGF2YWlsYWJsZSBmb3IgYWRkcmVzcy10cmFuc2xhdGlvbgorICogQyBDb21tb24tU2VnbWVudCBCaXQ6ICAgICBTZWdtZW50IGlzIG5vdCBwcml2YXRlIChQb1AgMy0zMCkKKyAqIFAgUGFnZS1Qcm90ZWN0aW9uIEJpdDogU3RvcmUgYWNjZXNzIG5vdCBwb3NzaWJsZSBmb3IgcGFnZQorICogVFQgVHlwZSAwMAorICoKKyAqIEEgNjQgYml0IHJlZ2lvbiB0YWJsZSBlbnRyeSBvZiBTMzkwIGhhcyBmb2xsb3dpbmcgZm9ybWF0OgorICogfCAgICAgICAgUy10YWJsZSBvcmlnaW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBURiAgVFRUTAorICogMDAwMDAwMDAwMDExMTExMTExMTEyMjIyMjIyMjIyMzMzMzMzMzMzMzQ0NDQ0NDQ0NDQ1NTU1NTU1NTU1NjY2NgorICogMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMworICoKKyAqIEkgU2VnbWVudC1JbnZhbGlkIEJpdDogICAgU2VnbWVudCBpcyBub3QgYXZhaWxhYmxlIGZvciBhZGRyZXNzLXRyYW5zbGF0aW9uCisgKiBUVCBUeXBlIDAxCisgKiBURgorICogVEwgVGFibGUgbGVuZ2h0CisgKgorICogVGhlIDY0IGJpdCByZWdpb250YWJsZSBvcmlnaW4gb2YgUzM5MCBoYXMgZm9sbG93aW5nIGZvcm1hdDoKKyAqIHwgICAgICByZWdpb24gdGFibGUgb3JpZ29uICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIERUVEwKKyAqIDAwMDAwMDAwMDAxMTExMTExMTExMjIyMjIyMjIyMjMzMzMzMzMzMzM0NDQ0NDQ0NDQ0NTU1NTU1NTU1NTY2NjYKKyAqIDAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjMKKyAqCisgKiBYIFNwYWNlLVN3aXRjaCBldmVudDoKKyAqIEcgU2VnbWVudC1JbnZhbGlkIEJpdDogIAorICogUCBQcml2YXRlLVNwYWNlIEJpdDogICAgCisgKiBTIFN0b3JhZ2UtQWx0ZXJhdGlvbjoKKyAqIFIgUmVhbCBzcGFjZQorICogVEwgVGFibGUtTGVuZ3RoOgorICoKKyAqIEEgc3RvcmFnZSBrZXkgaGFzIHRoZSBmb2xsb3dpbmcgZm9ybWF0OgorICogfCBBQ0MgfEZ8UnxDfDB8CisgKiAgMCAgIDMgNCA1IDYgNworICogQUNDOiBhY2Nlc3Mga2V5CisgKiBGICA6IGZldGNoIHByb3RlY3Rpb24gYml0CisgKiBSICA6IHJlZmVyZW5jZWQgYml0CisgKiBDICA6IGNoYW5nZWQgYml0CisgKi8KKworLyogSGFyZHdhcmUgYml0cyBpbiB0aGUgcGFnZSB0YWJsZSBlbnRyeSAqLworI2RlZmluZSBfUEFHRV9STyAgICAgICAgMHgyMDAgICAgICAgICAgLyogSFcgcmVhZC1vbmx5ICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX1BBR0VfSU5WQUxJRCAgIDB4NDAwICAgICAgICAgIC8qIEhXIGludmFsaWQgICAgICAgICAgICAgICAgICAgICAgICovCisKKy8qIE1hc2sgYW5kIGZvdXIgZGlmZmVyZW50IGtpbmRzIG9mIGludmFsaWQgcGFnZXMuICovCisjZGVmaW5lIF9QQUdFX0lOVkFMSURfTUFTSwkweDYwMQorI2RlZmluZSBfUEFHRV9JTlZBTElEX0VNUFRZCTB4NDAwCisjZGVmaW5lIF9QQUdFX0lOVkFMSURfTk9ORQkweDQwMQorI2RlZmluZSBfUEFHRV9JTlZBTElEX1NXQVAJMHg2MDAKKyNkZWZpbmUgX1BBR0VfSU5WQUxJRF9GSUxFCTB4NjAxCisKKyNpZm5kZWYgX19zMzkweF9fCisKKy8qIEJpdHMgaW4gdGhlIHNlZ21lbnQgdGFibGUgZW50cnkgKi8KKyNkZWZpbmUgX1BBR0VfVEFCTEVfTEVOIDB4ZiAgICAgICAgICAgIC8qIG9ubHkgZnVsbCBwYWdlLXRhYmxlcyAgICAgICAgICAgICovCisjZGVmaW5lIF9QQUdFX1RBQkxFX0NPTSAweDEwICAgICAgICAgICAvKiBjb21tb24gcGFnZS10YWJsZSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfUEFHRV9UQUJMRV9JTlYgMHgyMCAgICAgICAgICAgLyogaW52YWxpZCBwYWdlLXRhYmxlICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX1NFR19QUkVTRU5UICAgIDB4MDAxICAgICAgICAgIC8qIFNvZnR3YXJlIChvdmVybGFwIHdpdGggUFRMKSAgICAgICovCisKKy8qIEJpdHMgaW50IHRoZSBzdG9yYWdlIGtleSAqLworI2RlZmluZSBfUEFHRV9DSEFOR0VEICAgIDB4MDIgICAgICAgICAgLyogSFcgY2hhbmdlZCBiaXQgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX1BBR0VfUkVGRVJFTkNFRCAweDA0ICAgICAgICAgIC8qIEhXIHJlZmVyZW5jZWQgYml0ICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgX1VTRVJfU0VHX1RBQkxFX0xFTiAgICAweDdmICAgIC8qIHVzZXItc2VnbWVudC10YWJsZSB1cCB0byAyIEdCICAgICovCisjZGVmaW5lIF9LRVJORUxfU0VHX1RBQkxFX0xFTiAgMHg3ZiAgICAvKiBrZXJuZWwtc2VnbWVudC10YWJsZSB1cCB0byAyIEdCICAqLworCisvKgorICogVXNlciBhbmQgS2VybmVsIHBhZ2V0YWJsZXMgYXJlIGlkZW50aWNhbAorICovCisjZGVmaW5lIF9QQUdFX1RBQkxFCV9QQUdFX1RBQkxFX0xFTgorI2RlZmluZSBfS0VSTlBHX1RBQkxFCV9QQUdFX1RBQkxFX0xFTgorCisvKgorICogVGhlIEtlcm5lbCBzZWdtZW50LXRhYmxlcyBpbmNsdWRlcyB0aGUgVXNlciBzZWdtZW50LXRhYmxlCisgKi8KKworI2RlZmluZSBfU0VHTUVOVF9UQUJMRQkoX1VTRVJfU0VHX1RBQkxFX0xFTnwweDgwMDAwMDAwfDB4MTAwKQorI2RlZmluZSBfS0VSTlNFR19UQUJMRQlfS0VSTkVMX1NFR19UQUJMRV9MRU4KKworI2RlZmluZSBVU0VSX1NURF9NQVNLCTB4MDAwMDAwODBVTAorCisjZWxzZSAvKiBfX3MzOTB4X18gKi8KKworLyogQml0cyBpbiB0aGUgc2VnbWVudCB0YWJsZSBlbnRyeSAqLworI2RlZmluZSBfUE1EX0VOVFJZX0lOViAgIDB4MjAgICAgICAgICAgLyogaW52YWxpZCBzZWdtZW50IHRhYmxlIGVudHJ5ICAgICAgKi8KKyNkZWZpbmUgX1BNRF9FTlRSWSAgICAgICAweDAwICAgICAgICAKKworLyogQml0cyBpbiB0aGUgcmVnaW9uIHRoaXJkIHRhYmxlIGVudHJ5ICovCisjZGVmaW5lIF9QR0RfRU5UUllfSU5WICAgMHgyMCAgICAgICAgICAvKiBpbnZhbGlkIHJlZ2lvbiB0YWJsZSBlbnRyeSAgICAgICAqLworI2RlZmluZSBfUEdEX0VOVFJZICAgICAgIDB4MDcKKworLyoKKyAqIFVzZXIgYW5kIGtlcm5lbCBwYWdlIGRpcmVjdG9yeQorICovCisjZGVmaW5lIF9SRUdJT05fVEhJUkQgICAgICAgMHg0CisjZGVmaW5lIF9SRUdJT05fVEhJUkRfTEVOICAgMHgzIAorI2RlZmluZSBfUkVHSU9OX1RBQkxFICAgICAgIChfUkVHSU9OX1RISVJEfF9SRUdJT05fVEhJUkRfTEVOfDB4NDB8MHgxMDApCisjZGVmaW5lIF9LRVJOX1JFR0lPTl9UQUJMRSAgKF9SRUdJT05fVEhJUkR8X1JFR0lPTl9USElSRF9MRU4pCisKKyNkZWZpbmUgVVNFUl9TVERfTUFTSyAgICAgICAgICAgMHgwMDAwMDAwMDAwMDAwMDgwVUwKKworLyogQml0cyBpbiB0aGUgc3RvcmFnZSBrZXkgKi8KKyNkZWZpbmUgX1BBR0VfQ0hBTkdFRCAgICAweDAyICAgICAgICAgIC8qIEhXIGNoYW5nZWQgYml0ICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9QQUdFX1JFRkVSRU5DRUQgMHgwNCAgICAgICAgICAvKiBIVyByZWZlcmVuY2VkIGJpdCAgICAgICAgICAgICAgICAqLworCisjZW5kaWYgLyogX19zMzkweF9fICovCisKKy8qCisgKiBObyBtYXBwaW5nIGF2YWlsYWJsZQorICovCisjZGVmaW5lIFBBR0VfTk9ORV9TSEFSRUQgIF9fcGdwcm90KF9QQUdFX0lOVkFMSURfTk9ORSkKKyNkZWZpbmUgUEFHRV9OT05FX1BSSVZBVEUgX19wZ3Byb3QoX1BBR0VfSU5WQUxJRF9OT05FKQorI2RlZmluZSBQQUdFX1JPX1NIQVJFRAkgIF9fcGdwcm90KF9QQUdFX1JPKQorI2RlZmluZSBQQUdFX1JPX1BSSVZBVEUJICBfX3BncHJvdChfUEFHRV9STykKKyNkZWZpbmUgUEFHRV9DT1BZCSAgX19wZ3Byb3QoX1BBR0VfUk8pCisjZGVmaW5lIFBBR0VfU0hBUkVECSAgX19wZ3Byb3QoMCkKKyNkZWZpbmUgUEFHRV9LRVJORUwJICBfX3BncHJvdCgwKQorCisvKgorICogVGhlIFMzOTAgY2FuJ3QgZG8gcGFnZSBwcm90ZWN0aW9uIGZvciBleGVjdXRlLCBhbmQgY29uc2lkZXJzIHRoYXQgdGhlCisgKiBzYW1lIGFyZSByZWFkLiBBbHNvLCB3cml0ZSBwZXJtaXNzaW9ucyBpbXBseSByZWFkIHBlcm1pc3Npb25zLiBUaGlzIGlzCisgKiB0aGUgY2xvc2VzdCB3ZSBjYW4gZ2V0Li4KKyAqLworICAgICAgICAgLyp4d3IqLworI2RlZmluZSBfX1AwMDAgIFBBR0VfTk9ORV9QUklWQVRFCisjZGVmaW5lIF9fUDAwMSAgUEFHRV9ST19QUklWQVRFCisjZGVmaW5lIF9fUDAxMCAgUEFHRV9DT1BZCisjZGVmaW5lIF9fUDAxMSAgUEFHRV9DT1BZCisjZGVmaW5lIF9fUDEwMCAgUEFHRV9ST19QUklWQVRFCisjZGVmaW5lIF9fUDEwMSAgUEFHRV9ST19QUklWQVRFCisjZGVmaW5lIF9fUDExMCAgUEFHRV9DT1BZCisjZGVmaW5lIF9fUDExMSAgUEFHRV9DT1BZCisKKyNkZWZpbmUgX19TMDAwICBQQUdFX05PTkVfU0hBUkVECisjZGVmaW5lIF9fUzAwMSAgUEFHRV9ST19TSEFSRUQKKyNkZWZpbmUgX19TMDEwICBQQUdFX1NIQVJFRAorI2RlZmluZSBfX1MwMTEgIFBBR0VfU0hBUkVECisjZGVmaW5lIF9fUzEwMCAgUEFHRV9ST19TSEFSRUQKKyNkZWZpbmUgX19TMTAxICBQQUdFX1JPX1NIQVJFRAorI2RlZmluZSBfX1MxMTAgIFBBR0VfU0hBUkVECisjZGVmaW5lIF9fUzExMSAgUEFHRV9TSEFSRUQKKworLyoKKyAqIENlcnRhaW4gYXJjaGl0ZWN0dXJlcyBuZWVkIHRvIGRvIHNwZWNpYWwgdGhpbmdzIHdoZW4gUFRFcworICogd2l0aGluIGEgcGFnZSB0YWJsZSBhcmUgZGlyZWN0bHkgbW9kaWZpZWQuICBUaHVzLCB0aGUgZm9sbG93aW5nCisgKiBob29rIGlzIG1hZGUgYXZhaWxhYmxlLgorICovCitleHRlcm4gaW5saW5lIHZvaWQgc2V0X3B0ZShwdGVfdCAqcHRlcHRyLCBwdGVfdCBwdGV2YWwpCit7CisJKnB0ZXB0ciA9IHB0ZXZhbDsKK30KKyNkZWZpbmUgc2V0X3B0ZV9hdChtbSxhZGRyLHB0ZXAscHRldmFsKSBzZXRfcHRlKHB0ZXAscHRldmFsKQorCisvKgorICogcGdkL3BtZC9wdGUgcXVlcnkgZnVuY3Rpb25zCisgKi8KKyNpZm5kZWYgX19zMzkweF9fCisKK2V4dGVybiBpbmxpbmUgaW50IHBnZF9wcmVzZW50KHBnZF90IHBnZCkgeyByZXR1cm4gMTsgfQorZXh0ZXJuIGlubGluZSBpbnQgcGdkX25vbmUocGdkX3QgcGdkKSAgICB7IHJldHVybiAwOyB9CitleHRlcm4gaW5saW5lIGludCBwZ2RfYmFkKHBnZF90IHBnZCkgICAgIHsgcmV0dXJuIDA7IH0KKworZXh0ZXJuIGlubGluZSBpbnQgcG1kX3ByZXNlbnQocG1kX3QgcG1kKSB7IHJldHVybiBwbWRfdmFsKHBtZCkgJiBfU0VHX1BSRVNFTlQ7IH0KK2V4dGVybiBpbmxpbmUgaW50IHBtZF9ub25lKHBtZF90IHBtZCkgICAgeyByZXR1cm4gcG1kX3ZhbChwbWQpICYgX1BBR0VfVEFCTEVfSU5WOyB9CitleHRlcm4gaW5saW5lIGludCBwbWRfYmFkKHBtZF90IHBtZCkKK3sKKwlyZXR1cm4gKHBtZF92YWwocG1kKSAmICh+UEFHRV9NQVNLICYgfl9QQUdFX1RBQkxFX0lOVikpICE9IF9QQUdFX1RBQkxFOworfQorCisjZWxzZSAvKiBfX3MzOTB4X18gKi8KKworZXh0ZXJuIGlubGluZSBpbnQgcGdkX3ByZXNlbnQocGdkX3QgcGdkKQoreworCXJldHVybiAocGdkX3ZhbChwZ2QpICYgflBBR0VfTUFTSykgPT0gX1BHRF9FTlRSWTsKK30KKworZXh0ZXJuIGlubGluZSBpbnQgcGdkX25vbmUocGdkX3QgcGdkKQoreworCXJldHVybiBwZ2RfdmFsKHBnZCkgJiBfUEdEX0VOVFJZX0lOVjsKK30KKworZXh0ZXJuIGlubGluZSBpbnQgcGdkX2JhZChwZ2RfdCBwZ2QpCit7CisJcmV0dXJuIChwZ2RfdmFsKHBnZCkgJiAoflBBR0VfTUFTSyAmIH5fUEdEX0VOVFJZX0lOVikpICE9IF9QR0RfRU5UUlk7Cit9CisKK2V4dGVybiBpbmxpbmUgaW50IHBtZF9wcmVzZW50KHBtZF90IHBtZCkKK3sKKwlyZXR1cm4gKHBtZF92YWwocG1kKSAmIH5QQUdFX01BU0spID09IF9QTURfRU5UUlk7Cit9CisKK2V4dGVybiBpbmxpbmUgaW50IHBtZF9ub25lKHBtZF90IHBtZCkKK3sKKwlyZXR1cm4gcG1kX3ZhbChwbWQpICYgX1BNRF9FTlRSWV9JTlY7Cit9CisKK2V4dGVybiBpbmxpbmUgaW50IHBtZF9iYWQocG1kX3QgcG1kKQoreworCXJldHVybiAocG1kX3ZhbChwbWQpICYgKH5QQUdFX01BU0sgJiB+X1BNRF9FTlRSWV9JTlYpKSAhPSBfUE1EX0VOVFJZOworfQorCisjZW5kaWYgLyogX19zMzkweF9fICovCisKK2V4dGVybiBpbmxpbmUgaW50IHB0ZV9ub25lKHB0ZV90IHB0ZSkKK3sKKwlyZXR1cm4gKHB0ZV92YWwocHRlKSAmIF9QQUdFX0lOVkFMSURfTUFTSykgPT0gX1BBR0VfSU5WQUxJRF9FTVBUWTsKK30KKworZXh0ZXJuIGlubGluZSBpbnQgcHRlX3ByZXNlbnQocHRlX3QgcHRlKQoreworCXJldHVybiAhKHB0ZV92YWwocHRlKSAmIF9QQUdFX0lOVkFMSUQpIHx8CisJCShwdGVfdmFsKHB0ZSkgJiBfUEFHRV9JTlZBTElEX01BU0spID09IF9QQUdFX0lOVkFMSURfTk9ORTsKK30KKworZXh0ZXJuIGlubGluZSBpbnQgcHRlX2ZpbGUocHRlX3QgcHRlKQoreworCXJldHVybiAocHRlX3ZhbChwdGUpICYgX1BBR0VfSU5WQUxJRF9NQVNLKSA9PSBfUEFHRV9JTlZBTElEX0ZJTEU7Cit9CisKKyNkZWZpbmUgcHRlX3NhbWUoYSxiKQkocHRlX3ZhbChhKSA9PSBwdGVfdmFsKGIpKQorCisvKgorICogcXVlcnkgZnVuY3Rpb25zIHB0ZV93cml0ZS9wdGVfZGlydHkvcHRlX3lvdW5nIG9ubHkgd29yayBpZgorICogcHRlX3ByZXNlbnQoKSBpcyB0cnVlLiBVbmRlZmluZWQgYmVoYXZpb3VyIGlmIG5vdC4uCisgKi8KK2V4dGVybiBpbmxpbmUgaW50IHB0ZV93cml0ZShwdGVfdCBwdGUpCit7CisJcmV0dXJuIChwdGVfdmFsKHB0ZSkgJiBfUEFHRV9STykgPT0gMDsKK30KKworZXh0ZXJuIGlubGluZSBpbnQgcHRlX2RpcnR5KHB0ZV90IHB0ZSkKK3sKKwkvKiBBIHB0ZSBpcyBuZWl0aGVyIGNsZWFuIG5vciBkaXJ0eSBvbiBzLzM5MC4gVGhlIGRpcnR5IGJpdAorCSAqIGlzIGluIHRoZSBzdG9yYWdlIGtleS4gU2VlIHBhZ2VfdGVzdF9hbmRfY2xlYXJfZGlydHkgZm9yCisJICogZGV0YWlscy4KKwkgKi8KKwlyZXR1cm4gMDsKK30KKworZXh0ZXJuIGlubGluZSBpbnQgcHRlX3lvdW5nKHB0ZV90IHB0ZSkKK3sKKwkvKiBBIHB0ZSBpcyBuZWl0aGVyIHlvdW5nIG5vciBvbGQgb24gcy8zOTAuIFRoZSB5b3VuZyBiaXQKKwkgKiBpcyBpbiB0aGUgc3RvcmFnZSBrZXkuIFNlZSBwYWdlX3Rlc3RfYW5kX2NsZWFyX3lvdW5nIGZvcgorCSAqIGRldGFpbHMuCisJICovCisJcmV0dXJuIDA7Cit9CisKK2V4dGVybiBpbmxpbmUgaW50IHB0ZV9yZWFkKHB0ZV90IHB0ZSkKK3sKKwkvKiBBbGwgcGFnZXMgYXJlIHJlYWRhYmxlIHNpbmNlIHdlIGRvbid0IHVzZSB0aGUgZmV0Y2gKKwkgKiBwcm90ZWN0aW9uIGJpdCBpbiB0aGUgc3RvcmFnZSBrZXkuCisJICovCisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBwZ2QvcG1kL3B0ZSBtb2RpZmljYXRpb24gZnVuY3Rpb25zCisgKi8KKworI2lmbmRlZiBfX3MzOTB4X18KKworZXh0ZXJuIGlubGluZSB2b2lkIHBnZF9jbGVhcihwZ2RfdCAqIHBnZHApICAgICAgeyB9CisKK2V4dGVybiBpbmxpbmUgdm9pZCBwbWRfY2xlYXIocG1kX3QgKiBwbWRwKQoreworCXBtZF92YWwocG1kcFswXSkgPSBfUEFHRV9UQUJMRV9JTlY7CisJcG1kX3ZhbChwbWRwWzFdKSA9IF9QQUdFX1RBQkxFX0lOVjsKKwlwbWRfdmFsKHBtZHBbMl0pID0gX1BBR0VfVEFCTEVfSU5WOworCXBtZF92YWwocG1kcFszXSkgPSBfUEFHRV9UQUJMRV9JTlY7Cit9CisKKyNlbHNlIC8qIF9fczM5MHhfXyAqLworCitleHRlcm4gaW5saW5lIHZvaWQgcGdkX2NsZWFyKHBnZF90ICogcGdkcCkKK3sKKwlwZ2RfdmFsKCpwZ2RwKSA9IF9QR0RfRU5UUllfSU5WIHwgX1BHRF9FTlRSWTsKK30KKworZXh0ZXJuIGlubGluZSB2b2lkIHBtZF9jbGVhcihwbWRfdCAqIHBtZHApCit7CisJcG1kX3ZhbCgqcG1kcCkgPSBfUE1EX0VOVFJZX0lOViB8IF9QTURfRU5UUlk7CisJcG1kX3ZhbDEoKnBtZHApID0gX1BNRF9FTlRSWV9JTlYgfCBfUE1EX0VOVFJZOworfQorCisjZW5kaWYgLyogX19zMzkweF9fICovCisKK2V4dGVybiBpbmxpbmUgdm9pZCBwdGVfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApCit7CisJcHRlX3ZhbCgqcHRlcCkgPSBfUEFHRV9JTlZBTElEX0VNUFRZOworfQorCisvKgorICogVGhlIGZvbGxvd2luZyBwdGUgbW9kaWZpY2F0aW9uIGZ1bmN0aW9ucyBvbmx5IHdvcmsgaWYKKyAqIHB0ZV9wcmVzZW50KCkgaXMgdHJ1ZS4gVW5kZWZpbmVkIGJlaGF2aW91ciBpZiBub3QuLgorICovCitleHRlcm4gaW5saW5lIHB0ZV90IHB0ZV9tb2RpZnkocHRlX3QgcHRlLCBwZ3Byb3RfdCBuZXdwcm90KQoreworCXB0ZV92YWwocHRlKSAmPSBQQUdFX01BU0s7CisJcHRlX3ZhbChwdGUpIHw9IHBncHJvdF92YWwobmV3cHJvdCk7CisJcmV0dXJuIHB0ZTsKK30KKworZXh0ZXJuIGlubGluZSBwdGVfdCBwdGVfd3Jwcm90ZWN0KHB0ZV90IHB0ZSkKK3sKKwkvKiBEbyBub3QgY2xvYmJlciBfUEFHRV9JTlZBTElEX05PTkUgcGFnZXMhICAqLworCWlmICghKHB0ZV92YWwocHRlKSAmIF9QQUdFX0lOVkFMSUQpKQorCQlwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfUk87CisJcmV0dXJuIHB0ZTsKK30KKworZXh0ZXJuIGlubGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUpIAoreworCXB0ZV92YWwocHRlKSAmPSB+X1BBR0VfUk87CisJcmV0dXJuIHB0ZTsKK30KKworZXh0ZXJuIGlubGluZSBwdGVfdCBwdGVfbWtjbGVhbihwdGVfdCBwdGUpCit7CisJLyogVGhlIG9ubHkgdXNlciBvZiBwdGVfbWtjbGVhbiBpcyB0aGUgZm9yaygpIGNvZGUuCisJICAgV2UgbXVzdCAqbm90KiBjbGVhciB0aGUgKnBoeXNpY2FsKiBwYWdlIGRpcnR5IGJpdAorCSAgIGp1c3QgYmVjYXVzZSBmb3JrKCkgd2FudHMgdG8gY2xlYXIgdGhlIGRpcnR5IGJpdCBpbgorCSAgICpvbmUqIG9mIHRoZSBwYWdlJ3MgbWFwcGluZ3MuICBTbyB3ZSBqdXN0IGRvIG5vdGhpbmcuICovCisJcmV0dXJuIHB0ZTsKK30KKworZXh0ZXJuIGlubGluZSBwdGVfdCBwdGVfbWtkaXJ0eShwdGVfdCBwdGUpCit7CisJLyogV2UgZG8gbm90IGV4cGxpY2l0bHkgc2V0IHRoZSBkaXJ0eSBiaXQgYmVjYXVzZSB0aGUKKwkgKiBzc2tlIGluc3RydWN0aW9uIGlzIHNsb3cuIEl0IGlzIGZhc3RlciB0byBsZXQgdGhlCisJICogbmV4dCBpbnN0cnVjdGlvbiBzZXQgdGhlIGRpcnR5IGJpdC4KKwkgKi8KKwlyZXR1cm4gcHRlOworfQorCitleHRlcm4gaW5saW5lIHB0ZV90IHB0ZV9ta29sZChwdGVfdCBwdGUpCit7CisJLyogUy8zOTAgZG9lc24ndCBrZWVwIGl0cyBkaXJ0eS9yZWZlcmVuY2VkIGJpdCBpbiB0aGUgcHRlLgorCSAqIFRoZXJlIGlzIG5vIHBvaW50IGluIGNsZWFyaW5nIHRoZSByZWFsIHJlZmVyZW5jZWQgYml0LgorCSAqLworCXJldHVybiBwdGU7Cit9CisKK2V4dGVybiBpbmxpbmUgcHRlX3QgcHRlX21reW91bmcocHRlX3QgcHRlKQoreworCS8qIFMvMzkwIGRvZXNuJ3Qga2VlcCBpdHMgZGlydHkvcmVmZXJlbmNlZCBiaXQgaW4gdGhlIHB0ZS4KKwkgKiBUaGVyZSBpcyBubyBwb2ludCBpbiBzZXR0aW5nIHRoZSByZWFsIHJlZmVyZW5jZWQgYml0LgorCSAqLworCXJldHVybiBwdGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitwdGVwX2NsZWFyX2ZsdXNoX3lvdW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdGVfdCAqcHRlcCkKK3sKKwkvKiBObyBuZWVkIHRvIGZsdXNoIFRMQjsgYml0cyBhcmUgaW4gc3RvcmFnZSBrZXkgKi8KKwlyZXR1cm4gcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZyh2bWEsIGFkZHJlc3MsIHB0ZXApOworfQorCitzdGF0aWMgaW5saW5lIGludCBwdGVwX3Rlc3RfYW5kX2NsZWFyX2RpcnR5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludAorcHRlcF9jbGVhcl9mbHVzaF9kaXJ0eShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCXVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgKnB0ZXApCit7CisJLyogTm8gbmVlZCB0byBmbHVzaCBUTEI7IGJpdHMgYXJlIGluIHN0b3JhZ2Uga2V5ICovCisJcmV0dXJuIHB0ZXBfdGVzdF9hbmRfY2xlYXJfZGlydHkodm1hLCBhZGRyZXNzLCBwdGVwKTsKK30KKworc3RhdGljIGlubGluZSBwdGVfdCBwdGVwX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApCit7CisJcHRlX3QgcHRlID0gKnB0ZXA7CisJcHRlX2NsZWFyKG1tLCBhZGRyLCBwdGVwKTsKKwlyZXR1cm4gcHRlOworfQorCitzdGF0aWMgaW5saW5lIHB0ZV90CitwdGVwX2NsZWFyX2ZsdXNoKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdGVfdCAqcHRlcCkKK3sKKwlwdGVfdCBwdGUgPSAqcHRlcDsKKyNpZm5kZWYgX19zMzkweF9fCisJaWYgKCEocHRlX3ZhbChwdGUpICYgX1BBR0VfSU5WQUxJRCkpIHsKKwkJLyogUzM5MCBoYXMgMW1iIHNlZ21lbnRzLCB3ZSBhcmUgZW11bGF0aW5nIDRNQiBzZWdtZW50cyAqLworCQlwdGVfdCAqcHRvID0gKHB0ZV90ICopICgoKHVuc2lnbmVkIGxvbmcpIHB0ZXApICYgMHg3ZmZmZmMwMCk7CisJCV9fYXNtX18gX192b2xhdGlsZV9fICgiaXB0ZSAlMiwlMyIKKwkJCQkgICAgICA6ICI9bSIgKCpwdGVwKSA6ICJtIiAoKnB0ZXApLAorCQkJCSAgICAgICAgImEiIChwdG8pLCAiYSIgKGFkZHJlc3MpICk7CisJfQorI2Vsc2UgLyogX19zMzkweF9fICovCisJaWYgKCEocHRlX3ZhbChwdGUpICYgX1BBR0VfSU5WQUxJRCkpIAorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImlwdGUgJTIsJTMiCisJCQkJICAgICAgOiAiPW0iICgqcHRlcCkgOiAibSIgKCpwdGVwKSwKKwkJCQkgICAgICAgICJhIiAocHRlcCksICJhIiAoYWRkcmVzcykgKTsKKyNlbmRpZiAvKiBfX3MzOTB4X18gKi8KKwlwdGVfdmFsKCpwdGVwKSA9IF9QQUdFX0lOVkFMSURfRU1QVFk7CisJcmV0dXJuIHB0ZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHB0ZXBfc2V0X3dycHJvdGVjdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCkKK3sKKwlwdGVfdCBvbGRfcHRlID0gKnB0ZXA7CisJc2V0X3B0ZV9hdChtbSwgYWRkciwgcHRlcCwgcHRlX3dycHJvdGVjdChvbGRfcHRlKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcHRlcF9lc3RhYmxpc2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIAorCSAgICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90ICpwdGVwLAorCSAgICAgICBwdGVfdCBlbnRyeSkKK3sKKwlwdGVwX2NsZWFyX2ZsdXNoKHZtYSwgYWRkcmVzcywgcHRlcCk7CisJc2V0X3B0ZShwdGVwLCBlbnRyeSk7Cit9CisKKyNkZWZpbmUgcHRlcF9zZXRfYWNjZXNzX2ZsYWdzKF9fdm1hLCBfX2FkZHJlc3MsIF9fcHRlcCwgX19lbnRyeSwgX19kaXJ0eSkgXAorCXB0ZXBfZXN0YWJsaXNoKF9fdm1hLCBfX2FkZHJlc3MsIF9fcHRlcCwgX19lbnRyeSkKKworLyoKKyAqIFRlc3QgYW5kIGNsZWFyIGRpcnR5IGJpdCBpbiBzdG9yYWdlIGtleS4KKyAqIFdlIGNhbid0IGNsZWFyIHRoZSBjaGFuZ2VkIGJpdCBhdG9taWNhbGx5LiBUaGlzIGlzIGEgcG90ZW50aWFsCisgKiByYWNlIGFnYWluc3QgbW9kaWZpY2F0aW9uIG9mIHRoZSByZWZlcmVuY2VkIGJpdC4gVGhpcyBmdW5jdGlvbgorICogc2hvdWxkIHRoZXJlZm9yZSBvbmx5IGJlIGNhbGxlZCBpZiBpdCBpcyBub3QgbWFwcGVkIGluIGFueQorICogYWRkcmVzcyBzcGFjZS4KKyAqLworI2RlZmluZSBwYWdlX3Rlc3RfYW5kX2NsZWFyX2RpcnR5KF9wYWdlKQkJCQkgIFwKKyh7CQkJCQkJCQkJICBcCisJc3RydWN0IHBhZ2UgKl9fcGFnZSA9IChfcGFnZSk7CQkJCQkgIFwKKwl1bnNpZ25lZCBsb25nIF9fcGh5c3BhZ2UgPSBfX3BhKChfX3BhZ2UtbWVtX21hcCkgPDwgUEFHRV9TSElGVCk7ICBcCisJaW50IF9fc2tleSA9IHBhZ2VfZ2V0X3N0b3JhZ2Vfa2V5KF9fcGh5c3BhZ2UpOwkJCSAgXAorCWlmIChfX3NrZXkgJiBfUEFHRV9DSEFOR0VEKQkJCQkJICBcCisJCXBhZ2Vfc2V0X3N0b3JhZ2Vfa2V5KF9fcGh5c3BhZ2UsIF9fc2tleSAmIH5fUEFHRV9DSEFOR0VEKTtcCisJKF9fc2tleSAmIF9QQUdFX0NIQU5HRUQpOwkJCQkJICBcCit9KQorCisvKgorICogVGVzdCBhbmQgY2xlYXIgcmVmZXJlbmNlZCBiaXQgaW4gc3RvcmFnZSBrZXkuCisgKi8KKyNkZWZpbmUgcGFnZV90ZXN0X2FuZF9jbGVhcl95b3VuZyhwYWdlKQkJCQkJICBcCisoewkJCQkJCQkJCSAgXAorCXN0cnVjdCBwYWdlICpfX3BhZ2UgPSAocGFnZSk7CQkJCQkgIFwKKwl1bnNpZ25lZCBsb25nIF9fcGh5c3BhZ2UgPSBfX3BhKChfX3BhZ2UtbWVtX21hcCkgPDwgUEFHRV9TSElGVCk7ICBcCisJaW50IF9fY2NvZGU7CQkJCQkJCSAgXAorCWFzbSB2b2xhdGlsZSAoInJyYmUgMCwlMVxuXHQiCQkJCQkgIFwKKwkJICAgICAgImlwbSAgJTBcblx0IgkJCQkJICBcCisJCSAgICAgICJzcmwgICUwLDI4XG5cdCIgCQkJCQkgIFwKKyAgICAgICAgICAgICAgICAgICAgICA6ICI9ZCIgKF9fY2NvZGUpIDogImEiIChfX3BoeXNwYWdlKSA6ICJjYyIgKTsJICBcCisJKF9fY2NvZGUgJiAyKTsJCQkJCQkJICBcCit9KQorCisvKgorICogQ29udmVyc2lvbiBmdW5jdGlvbnM6IGNvbnZlcnQgYSBwYWdlIGFuZCBwcm90ZWN0aW9uIHRvIGEgcGFnZSBlbnRyeSwKKyAqIGFuZCBhIHBhZ2UgZW50cnkgYW5kIHBhZ2UgZGlyZWN0b3J5IHRvIHRoZSBwYWdlIHRoZXkgcmVmZXIgdG8uCisgKi8KK3N0YXRpYyBpbmxpbmUgcHRlX3QgbWtfcHRlX3BoeXModW5zaWduZWQgbG9uZyBwaHlzcGFnZSwgcGdwcm90X3QgcGdwcm90KQoreworCXB0ZV90IF9fcHRlOworCXB0ZV92YWwoX19wdGUpID0gcGh5c3BhZ2UgKyBwZ3Byb3RfdmFsKHBncHJvdCk7CisJcmV0dXJuIF9fcHRlOworfQorCisjZGVmaW5lIG1rX3B0ZShwZywgcGdwcm90KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXN0cnVjdCBwYWdlICpfX3BhZ2UgPSAocGcpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlwZ3Byb3RfdCBfX3BncHJvdCA9IChwZ3Byb3QpOwkJCQkJICBcCisJdW5zaWduZWQgbG9uZyBfX3BoeXNwYWdlID0gX19wYSgoX19wYWdlLW1lbV9tYXApIDw8IFBBR0VfU0hJRlQpOyAgXAorCXB0ZV90IF9fcHRlID0gbWtfcHRlX3BoeXMoX19waHlzcGFnZSwgX19wZ3Byb3QpOyAgICAgICAgICAgICAgICAgIFwKKwlfX3B0ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9KQorCisjZGVmaW5lIHBmbl9wdGUocGZuLCBwZ3Byb3QpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXBncHJvdF90IF9fcGdwcm90ID0gKHBncHJvdCk7CQkJCQkgIFwKKwl1bnNpZ25lZCBsb25nIF9fcGh5c3BhZ2UgPSBfX3BhKChwZm4pIDw8IFBBR0VfU0hJRlQpOyAgICAgICAgICAgICBcCisJcHRlX3QgX19wdGUgPSBta19wdGVfcGh5cyhfX3BoeXNwYWdlLCBfX3BncHJvdCk7ICAgICAgICAgICAgICAgICAgXAorCV9fcHRlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30pCisKKyNkZWZpbmUgU2V0UGFnZVVwdG9kYXRlKF9wYWdlKSBcCisJZG8gewkJCQkJCQkJICAgICAgXAorCQlzdHJ1Y3QgcGFnZSAqX19wYWdlID0gKF9wYWdlKTsJCQkJICAgICAgXAorCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoUEdfdXB0b2RhdGUsICZfX3BhZ2UtPmZsYWdzKSkJICAgICAgXAorCQkJcGFnZV90ZXN0X2FuZF9jbGVhcl9kaXJ0eShfcGFnZSk7CQkgICAgICBcCisJfSB3aGlsZSAoMCkKKworI2lmZGVmIF9fczM5MHhfXworCisjZGVmaW5lIHBmbl9wbWQocGZuLCBwZ3Byb3QpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXBncHJvdF90IF9fcGdwcm90ID0gKHBncHJvdCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl1bnNpZ25lZCBsb25nIF9fcGh5c3BhZ2UgPSBfX3BhKChwZm4pIDw8IFBBR0VfU0hJRlQpOyAgICAgICAgICAgICBcCisJcG1kX3QgX19wbWQgPSBfX3BtZChfX3BoeXNwYWdlICsgcGdwcm90X3ZhbChfX3BncHJvdCkpOyAgICAgICAgICAgXAorCV9fcG1kOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30pCisKKyNlbmRpZiAvKiBfX3MzOTB4X18gKi8KKworI2RlZmluZSBwdGVfcGZuKHgpIChwdGVfdmFsKHgpID4+IFBBR0VfU0hJRlQpCisjZGVmaW5lIHB0ZV9wYWdlKHgpIHBmbl90b19wYWdlKHB0ZV9wZm4oeCkpCisKKyNkZWZpbmUgcG1kX3BhZ2Vfa2VybmVsKHBtZCkgKHBtZF92YWwocG1kKSAmIFBBR0VfTUFTSykKKworI2RlZmluZSBwbWRfcGFnZShwbWQpIChtZW1fbWFwKyhwbWRfdmFsKHBtZCkgPj4gUEFHRV9TSElGVCkpCisKKyNkZWZpbmUgcGdkX3BhZ2Vfa2VybmVsKHBnZCkgKHBnZF92YWwocGdkKSAmIFBBR0VfTUFTSykKKworLyogdG8gZmluZCBhbiBlbnRyeSBpbiBhIHBhZ2UtdGFibGUtZGlyZWN0b3J5ICovCisjZGVmaW5lIHBnZF9pbmRleChhZGRyZXNzKSAoKChhZGRyZXNzKSA+PiBQR0RJUl9TSElGVCkgJiAoUFRSU19QRVJfUEdELTEpKQorI2RlZmluZSBwZ2Rfb2Zmc2V0KG1tLCBhZGRyZXNzKSAoKG1tKS0+cGdkK3BnZF9pbmRleChhZGRyZXNzKSkKKworLyogdG8gZmluZCBhbiBlbnRyeSBpbiBhIGtlcm5lbCBwYWdlLXRhYmxlLWRpcmVjdG9yeSAqLworI2RlZmluZSBwZ2Rfb2Zmc2V0X2soYWRkcmVzcykgcGdkX29mZnNldCgmaW5pdF9tbSwgYWRkcmVzcykKKworI2lmbmRlZiBfX3MzOTB4X18KKworLyogRmluZCBhbiBlbnRyeSBpbiB0aGUgc2Vjb25kLWxldmVsIHBhZ2UgdGFibGUuLiAqLworZXh0ZXJuIGlubGluZSBwbWRfdCAqIHBtZF9vZmZzZXQocGdkX3QgKiBkaXIsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKyAgICAgICAgcmV0dXJuIChwbWRfdCAqKSBkaXI7Cit9CisKKyNlbHNlIC8qIF9fczM5MHhfXyAqLworCisvKiBGaW5kIGFuIGVudHJ5IGluIHRoZSBzZWNvbmQtbGV2ZWwgcGFnZSB0YWJsZS4uICovCisjZGVmaW5lIHBtZF9pbmRleChhZGRyZXNzKSAoKChhZGRyZXNzKSA+PiBQTURfU0hJRlQpICYgKFBUUlNfUEVSX1BNRC0xKSkKKyNkZWZpbmUgcG1kX29mZnNldChkaXIsYWRkcikgXAorCSgocG1kX3QgKikgcGdkX3BhZ2Vfa2VybmVsKCooZGlyKSkgKyBwbWRfaW5kZXgoYWRkcikpCisKKyNlbmRpZiAvKiBfX3MzOTB4X18gKi8KKworLyogRmluZCBhbiBlbnRyeSBpbiB0aGUgdGhpcmQtbGV2ZWwgcGFnZSB0YWJsZS4uICovCisjZGVmaW5lIHB0ZV9pbmRleChhZGRyZXNzKSAoKChhZGRyZXNzKSA+PiBQQUdFX1NISUZUKSAmIChQVFJTX1BFUl9QVEUtMSkpCisjZGVmaW5lIHB0ZV9vZmZzZXRfa2VybmVsKHBtZCwgYWRkcmVzcykgXAorCSgocHRlX3QgKikgcG1kX3BhZ2Vfa2VybmVsKCoocG1kKSkgKyBwdGVfaW5kZXgoYWRkcmVzcykpCisjZGVmaW5lIHB0ZV9vZmZzZXRfbWFwKHBtZCwgYWRkcmVzcykgcHRlX29mZnNldF9rZXJuZWwocG1kLCBhZGRyZXNzKQorI2RlZmluZSBwdGVfb2Zmc2V0X21hcF9uZXN0ZWQocG1kLCBhZGRyZXNzKSBwdGVfb2Zmc2V0X2tlcm5lbChwbWQsIGFkZHJlc3MpCisjZGVmaW5lIHB0ZV91bm1hcChwdGUpIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgcHRlX3VubWFwX25lc3RlZChwdGUpIGRvIHsgfSB3aGlsZSAoMCkKKworLyoKKyAqIDMxIGJpdCBzd2FwIGVudHJ5IGZvcm1hdDoKKyAqIEEgcGFnZS10YWJsZSBlbnRyeSBoYXMgc29tZSBiaXRzIHdlIGhhdmUgdG8gdHJlYXQgaW4gYSBzcGVjaWFsIHdheS4KKyAqIEJpdHMgMCwgMjAgYW5kIGJpdCAyMyBoYXZlIHRvIGJlIHplcm8sIG90aGVyd2lzZSBhbiBzcGVjaWZpY2F0aW9uCisgKiBleGNlcHRpb24gd2lsbCBvY2N1ciBpbnN0ZWFkIG9mIGEgcGFnZSB0cmFuc2xhdGlvbiBleGNlcHRpb24uIFRoZQorICogc3BlY2lmaWF0aW9uIGV4Y2VwdGlvbiBoYXMgdGhlIGJhZCBoYWJpdCBub3QgdG8gc3RvcmUgbmVjZXNzYXJ5CisgKiBpbmZvcm1hdGlvbiBpbiB0aGUgbG93Y29yZS4KKyAqIEJpdCAyMSBhbmQgYml0IDIyIGFyZSB0aGUgcGFnZSBpbnZhbGlkIGJpdCBhbmQgdGhlIHBhZ2UgcHJvdGVjdGlvbgorICogYml0LiBXZSBzZXQgYm90aCB0byBpbmRpY2F0ZSBhIHN3YXBwZWQgcGFnZS4KKyAqIEJpdCAzMCBhbmQgMzEgYXJlIHVzZWQgdG8gZGlzdGluZ3Vpc2ggdGhlIGRpZmZlcmVudCBwYWdlIHR5cGVzLiBGb3IKKyAqIGEgc3dhcHBlZCBwYWdlIHRoZXNlIGJpdHMgbmVlZCB0byBiZSB6ZXJvLgorICogVGhpcyBsZWF2ZXMgdGhlIGJpdHMgMS0xOSBhbmQgYml0cyAyNC0yOSB0byBzdG9yZSB0eXBlIGFuZCBvZmZzZXQuCisgKiBXZSB1c2UgdGhlIDUgYml0cyBmcm9tIDI1LTI5IGZvciB0aGUgdHlwZSBhbmQgdGhlIDIwIGJpdHMgZnJvbSAxLTE5CisgKiBwbHVzIDI0IGZvciB0aGUgb2Zmc2V0LgorICogMHwgICAgIG9mZnNldCAgICAgICAgfDAxMTB8b3x0eXBlIHwwMHwKKyAqIDAgMDAwMDAwMDAwMTExMTExMTExMSAyMjIyIDIgMjIyMjIgMzMKKyAqIDAgMTIzNDU2Nzg5MDEyMzQ1Njc4OSAwMTIzIDQgNTY3ODkgMDEKKyAqCisgKiA2NCBiaXQgc3dhcCBlbnRyeSBmb3JtYXQ6CisgKiBBIHBhZ2UtdGFibGUgZW50cnkgaGFzIHNvbWUgYml0cyB3ZSBoYXZlIHRvIHRyZWF0IGluIGEgc3BlY2lhbCB3YXkuCisgKiBCaXRzIDUyIGFuZCBiaXQgNTUgaGF2ZSB0byBiZSB6ZXJvLCBvdGhlcndpc2UgYW4gc3BlY2lmaWNhdGlvbgorICogZXhjZXB0aW9uIHdpbGwgb2NjdXIgaW5zdGVhZCBvZiBhIHBhZ2UgdHJhbnNsYXRpb24gZXhjZXB0aW9uLiBUaGUKKyAqIHNwZWNpZmlhdGlvbiBleGNlcHRpb24gaGFzIHRoZSBiYWQgaGFiaXQgbm90IHRvIHN0b3JlIG5lY2Vzc2FyeQorICogaW5mb3JtYXRpb24gaW4gdGhlIGxvd2NvcmUuCisgKiBCaXQgNTMgYW5kIGJpdCA1NCBhcmUgdGhlIHBhZ2UgaW52YWxpZCBiaXQgYW5kIHRoZSBwYWdlIHByb3RlY3Rpb24KKyAqIGJpdC4gV2Ugc2V0IGJvdGggdG8gaW5kaWNhdGUgYSBzd2FwcGVkIHBhZ2UuCisgKiBCaXQgNjIgYW5kIDYzIGFyZSB1c2VkIHRvIGRpc3Rpbmd1aXNoIHRoZSBkaWZmZXJlbnQgcGFnZSB0eXBlcy4gRm9yCisgKiBhIHN3YXBwZWQgcGFnZSB0aGVzZSBiaXRzIG5lZWQgdG8gYmUgemVyby4KKyAqIFRoaXMgbGVhdmVzIHRoZSBiaXRzIDAtNTEgYW5kIGJpdHMgNTYtNjEgdG8gc3RvcmUgdHlwZSBhbmQgb2Zmc2V0LgorICogV2UgdXNlIHRoZSA1IGJpdHMgZnJvbSA1Ny02MSBmb3IgdGhlIHR5cGUgYW5kIHRoZSA1MyBiaXRzIGZyb20gMC01MQorICogcGx1cyA1NiBmb3IgdGhlIG9mZnNldC4KKyAqIHwgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICAgICAgICAgICAgICAgICAgICAgICAgfDAxMTB8b3x0eXBlIHwwMHwKKyAqICAwMDAwMDAwMDAwMTExMTExMTExMTIyMjIyMjIyMjIzMzMzMzMzMzMzNDQ0NDQ0NDQ0NDU1IDU1NTUgNSA1NTU2NiA2NgorICogIDAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEgMjM0NSA2IDc4OTAxIDIzCisgKi8KKyNpZm5kZWYgX19zMzkweF9fCisjZGVmaW5lIF9fU1dQX09GRlNFVF9NQVNLICh+MFVMID4+IDEyKQorI2Vsc2UKKyNkZWZpbmUgX19TV1BfT0ZGU0VUX01BU0sgKH4wVUwgPj4gMTEpCisjZW5kaWYKK2V4dGVybiBpbmxpbmUgcHRlX3QgbWtfc3dhcF9wdGUodW5zaWduZWQgbG9uZyB0eXBlLCB1bnNpZ25lZCBsb25nIG9mZnNldCkKK3sKKwlwdGVfdCBwdGU7CisJb2Zmc2V0ICY9IF9fU1dQX09GRlNFVF9NQVNLOworCXB0ZV92YWwocHRlKSA9IF9QQUdFX0lOVkFMSURfU1dBUCB8ICgodHlwZSAmIDB4MWYpIDw8IDIpIHwKKwkJKChvZmZzZXQgJiAxVUwpIDw8IDcpIHwgKChvZmZzZXQgJiB+MVVMKSA8PCAxMSk7CisJcmV0dXJuIHB0ZTsKK30KKworI2RlZmluZSBfX3N3cF90eXBlKGVudHJ5KQkoKChlbnRyeSkudmFsID4+IDIpICYgMHgxZikKKyNkZWZpbmUgX19zd3Bfb2Zmc2V0KGVudHJ5KQkoKChlbnRyeSkudmFsID4+IDExKSB8ICgoKGVudHJ5KS52YWwgPj4gNykgJiAxKSkKKyNkZWZpbmUgX19zd3BfZW50cnkodHlwZSxvZmZzZXQpICgoc3dwX2VudHJ5X3QpIHsgcHRlX3ZhbChta19zd2FwX3B0ZSgodHlwZSksKG9mZnNldCkpKSB9KQorCisjZGVmaW5lIF9fcHRlX3RvX3N3cF9lbnRyeShwdGUpCSgoc3dwX2VudHJ5X3QpIHsgcHRlX3ZhbChwdGUpIH0pCisjZGVmaW5lIF9fc3dwX2VudHJ5X3RvX3B0ZSh4KQkoKHB0ZV90KSB7ICh4KS52YWwgfSkKKworI2lmbmRlZiBfX3MzOTB4X18KKyMgZGVmaW5lIFBURV9GSUxFX01BWF9CSVRTCTI2CisjZWxzZSAvKiBfX3MzOTB4X18gKi8KKyMgZGVmaW5lIFBURV9GSUxFX01BWF9CSVRTCTU5CisjZW5kaWYgLyogX19zMzkweF9fICovCisKKyNkZWZpbmUgcHRlX3RvX3Bnb2ZmKF9fcHRlKSBcCisJKCgoKF9fcHRlKS5wdGUgPj4gMTIpIDw8IDcpICsgKCgoX19wdGUpLnB0ZSA+PiAxKSAmIDB4N2YpKQorCisjZGVmaW5lIHBnb2ZmX3RvX3B0ZShfX29mZikgXAorCSgocHRlX3QpIHsgKCgoKF9fb2ZmKSAmIDB4N2YpIDw8IDEpICsgKCgoX19vZmYpID4+IDcpIDw8IDEyKSkgXAorCQkgICB8IF9QQUdFX0lOVkFMSURfRklMRSB9KQorCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisjZGVmaW5lIGtlcm5fYWRkcl92YWxpZChhZGRyKSAgICgxKQorCisvKgorICogTm8gcGFnZSB0YWJsZSBjYWNoZXMgdG8gaW5pdGlhbGlzZQorICovCisjZGVmaW5lIHBndGFibGVfY2FjaGVfaW5pdCgpCWRvIHsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX0VTVEFCTElTSAorI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX1NFVF9BQ0NFU1NfRkxBR1MKKyNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFUF9URVNUX0FORF9DTEVBUl9ZT1VORworI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX0NMRUFSX1lPVU5HX0ZMVVNICisjZGVmaW5lIF9fSEFWRV9BUkNIX1BURVBfVEVTVF9BTkRfQ0xFQVJfRElSVFkKKyNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFUF9DTEVBUl9ESVJUWV9GTFVTSAorI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX0dFVF9BTkRfQ0xFQVIKKyNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFUF9DTEVBUl9GTFVTSAorI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX1NFVF9XUlBST1RFQ1QKKyNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFX1NBTUUKKyNkZWZpbmUgX19IQVZFX0FSQ0hfUEFHRV9URVNUX0FORF9DTEVBUl9ESVJUWQorI2RlZmluZSBfX0hBVkVfQVJDSF9QQUdFX1RFU1RfQU5EX0NMRUFSX1lPVU5HCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGd0YWJsZS5oPgorCisjZW5kaWYgLyogX1MzOTBfUEFHRV9IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvcG9sbC5oIGIvaW5jbHVkZS9hc20tczM5MC9wb2xsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTkwYTVjYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvcG9sbC5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiAgaW5jbHVkZS9hc20tczM5MC9wb2xsLmgKKyAqCisgKiAgUzM5MCB2ZXJzaW9uCisgKgorICogIERlcml2ZWQgZnJvbSAiaW5jbHVkZS9hc20taTM4Ni9wb2xsLmgiCisgKi8KKworI2lmbmRlZiBfX1MzOTBfUE9MTF9ICisjZGVmaW5lIF9fUzM5MF9QT0xMX0gKKworLyogVGhlc2UgYXJlIHNwZWNpZmllZCBieSBpQkNTMiAqLworI2RlZmluZSBQT0xMSU4gICAgICAgICAgMHgwMDAxCisjZGVmaW5lIFBPTExQUkkgICAgICAgICAweDAwMDIKKyNkZWZpbmUgUE9MTE9VVCAgICAgICAgIDB4MDAwNAorI2RlZmluZSBQT0xMRVJSICAgICAgICAgMHgwMDA4CisjZGVmaW5lIFBPTExIVVAgICAgICAgICAweDAwMTAKKyNkZWZpbmUgUE9MTE5WQUwgICAgICAgIDB4MDAyMAorCisvKiBUaGUgcmVzdCBzZWVtIHRvIGJlIG1vcmUtb3ItbGVzcyBub25zdGFuZGFyZC4gQ2hlY2sgdGhlbSEgKi8KKyNkZWZpbmUgUE9MTFJETk9STQkweDAwNDAKKyNkZWZpbmUgUE9MTFJEQkFORAkweDAwODAKKyNkZWZpbmUgUE9MTFdSTk9STQkweDAxMDAKKyNkZWZpbmUgUE9MTFdSQkFORAkweDAyMDAKKyNkZWZpbmUgUE9MTE1TRwkJMHgwNDAwCisjZGVmaW5lIFBPTExSRU1PVkUJMHgxMDAwCisKK3N0cnVjdCBwb2xsZmQgeworCWludCBmZDsKKwlzaG9ydCBldmVudHM7CisJc2hvcnQgcmV2ZW50czsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9wb3NpeF90eXBlcy5oIGIvaW5jbHVkZS9hc20tczM5MC9wb3NpeF90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxNzg4ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL3Bvc2l4X3R5cGVzLmgKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAqICBpbmNsdWRlL2FzbS1zMzkwL3Bvc2l4X3R5cGVzLmgKKyAqCisgKiAgUzM5MCB2ZXJzaW9uCisgKgorICogIERlcml2ZWQgZnJvbSAiaW5jbHVkZS9hc20taTM4Ni9wb3NpeF90eXBlcy5oIgorICovCisKKyNpZm5kZWYgX19BUkNIX1MzOTBfUE9TSVhfVFlQRVNfSAorI2RlZmluZSBfX0FSQ0hfUzM5MF9QT1NJWF9UWVBFU19ICisKKy8qCisgKiBUaGlzIGZpbGUgaXMgZ2VuZXJhbGx5IHVzZWQgYnkgdXNlci1sZXZlbCBzb2Z0d2FyZSwgc28geW91IG5lZWQgdG8KKyAqIGJlIGEgbGl0dGxlIGNhcmVmdWwgYWJvdXQgbmFtZXNwYWNlIHBvbGx1dGlvbiBldGMuICBBbHNvLCB3ZSBjYW5ub3QKKyAqIGFzc3VtZSBHQ0MgaXMgYmVpbmcgdXNlZC4KKyAqLworCit0eXBlZGVmIGxvbmcgICAgICAgICAgICBfX2tlcm5lbF9vZmZfdDsKK3R5cGVkZWYgaW50ICAgICAgICAgICAgIF9fa2VybmVsX3BpZF90OwordHlwZWRlZiB1bnNpZ25lZCBsb25nICAgX19rZXJuZWxfc2l6ZV90OwordHlwZWRlZiBsb25nICAgICAgICAgICAgX19rZXJuZWxfdGltZV90OwordHlwZWRlZiBsb25nICAgICAgICAgICAgX19rZXJuZWxfc3VzZWNvbmRzX3Q7Cit0eXBlZGVmIGxvbmcgICAgICAgICAgICBfX2tlcm5lbF9jbG9ja190OwordHlwZWRlZiBpbnQJCV9fa2VybmVsX3RpbWVyX3Q7Cit0eXBlZGVmIGludAkJX19rZXJuZWxfY2xvY2tpZF90OwordHlwZWRlZiBpbnQgICAgICAgICAgICAgX19rZXJuZWxfZGFkZHJfdDsKK3R5cGVkZWYgY2hhciAqICAgICAgICAgIF9fa2VybmVsX2NhZGRyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CV9fa2VybmVsX3VpZDE2X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CV9fa2VybmVsX2dpZDE2X3Q7CisKKyNpZmRlZiBfX0dOVUNfXwordHlwZWRlZiBsb25nIGxvbmcgICAgICAgX19rZXJuZWxfbG9mZl90OworI2VuZGlmCisKKyNpZm5kZWYgX19zMzkweF9fCisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyAgIF9fa2VybmVsX2lub190OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCAgX19rZXJuZWxfbW9kZV90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCAgX19rZXJuZWxfbmxpbmtfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgIF9fa2VybmVsX2lwY19waWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgIF9fa2VybmVsX3VpZF90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCAgX19rZXJuZWxfZ2lkX3Q7Cit0eXBlZGVmIGludCAgICAgICAgICAgICBfX2tlcm5lbF9zc2l6ZV90OwordHlwZWRlZiBpbnQgICAgICAgICAgICAgX19rZXJuZWxfcHRyZGlmZl90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQJX19rZXJuZWxfdWlkMzJfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50CV9fa2VybmVsX2dpZDMyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CV9fa2VybmVsX29sZF91aWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJX19rZXJuZWxfb2xkX2dpZF90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAlfX2tlcm5lbF9vbGRfZGV2X3Q7CisKKyNlbHNlIC8qIF9fczM5MHhfXyAqLworCit0eXBlZGVmIHVuc2lnbmVkIGludCAgICBfX2tlcm5lbF9pbm9fdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50ICAgIF9fa2VybmVsX21vZGVfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50ICAgIF9fa2VybmVsX25saW5rX3Q7Cit0eXBlZGVmIGludCAgICAgICAgICAgICBfX2tlcm5lbF9pcGNfcGlkX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludCAgICBfX2tlcm5lbF91aWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50ICAgIF9fa2VybmVsX2dpZF90OwordHlwZWRlZiBsb25nICAgICAgICAgICAgX19rZXJuZWxfc3NpemVfdDsKK3R5cGVkZWYgbG9uZyAgICAgICAgICAgIF9fa2VybmVsX3B0cmRpZmZfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyAgIF9fa2VybmVsX3NpZ3NldF90OyAgICAgIC8qIGF0IGxlYXN0IDMyIGJpdHMgKi8KK3R5cGVkZWYgX19rZXJuZWxfdWlkX3QgX19rZXJuZWxfb2xkX3VpZF90OwordHlwZWRlZiBfX2tlcm5lbF9naWRfdCBfX2tlcm5lbF9vbGRfZ2lkX3Q7Cit0eXBlZGVmIF9fa2VybmVsX3VpZF90IF9fa2VybmVsX3VpZDMyX3Q7Cit0eXBlZGVmIF9fa2VybmVsX2dpZF90IF9fa2VybmVsX2dpZDMyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fa2VybmVsX29sZF9kZXZfdDsKKworI2VuZGlmIC8qIF9fczM5MHhfXyAqLworCit0eXBlZGVmIHN0cnVjdCB7CisjaWYgZGVmaW5lZChfX0tFUk5FTF9fKSB8fCBkZWZpbmVkKF9fVVNFX0FMTCkKKyAgICAgICAgaW50ICAgICB2YWxbMl07CisjZWxzZSAgICAgICAgICAgICAgICAgICAgICAgIC8qICFkZWZpbmVkKF9fS0VSTkVMX18pICYmICFkZWZpbmVkKF9fVVNFX0FMTCkqLworICAgICAgICBpbnQgICAgIF9fdmFsWzJdOworI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAvKiAhZGVmaW5lZChfX0tFUk5FTF9fKSAmJiAhZGVmaW5lZChfX1VTRV9BTEwpKi8KK30gX19rZXJuZWxfZnNpZF90OworCisKKyNpZiBkZWZpbmVkKF9fS0VSTkVMX18pIHx8ICFkZWZpbmVkKF9fR0xJQkNfXykgfHwgKF9fR0xJQkNfXyA8IDIpCisKKyNpZm5kZWYgX1MzOTBfQklUT1BTX0gKKyNpbmNsdWRlIDxhc20vYml0b3BzLmg+CisjZW5kaWYKKworI3VuZGVmICBfX0ZEX1NFVAorI2RlZmluZSBfX0ZEX1NFVChmZCxmZHNldHApICBzZXRfYml0KChmZCksKGZkc2V0cCktPmZkc19iaXRzKQorCisjdW5kZWYgIF9fRkRfQ0xSCisjZGVmaW5lIF9fRkRfQ0xSKGZkLGZkc2V0cCkgIGNsZWFyX2JpdCgoZmQpLChmZHNldHApLT5mZHNfYml0cykKKworI3VuZGVmICBfX0ZEX0lTU0VUCisjZGVmaW5lIF9fRkRfSVNTRVQoZmQsZmRzZXRwKSAgdGVzdF9iaXQoKGZkKSwoZmRzZXRwKS0+ZmRzX2JpdHMpCisKKyN1bmRlZiAgX19GRF9aRVJPCisjZGVmaW5lIF9fRkRfWkVSTyhmZHNldHApIChtZW1zZXQgKChmZHNldHApLCAwLCBzaXplb2YoKihmZF9zZXQgKikoZmRzZXRwKSkpKQorCisjZW5kaWYgICAgIC8qIGRlZmluZWQoX19LRVJORUxfXykgfHwgIWRlZmluZWQoX19HTElCQ19fKSB8fCAoX19HTElCQ19fIDwgMikqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvcHJvY2Vzc29yLmggYi9pbmNsdWRlL2FzbS1zMzkwL3Byb2Nlc3Nvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiYmQxMTQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL3Byb2Nlc3Nvci5oCkBAIC0wLDAgKzEsMzU1IEBACisvKgorICogIGluY2x1ZGUvYXNtLXMzOTAvcHJvY2Vzc29yLmgKKyAqCisgKiAgUzM5MCB2ZXJzaW9uCisgKiAgICBDb3B5cmlnaHQgKEMpIDE5OTkgSUJNIERldXRzY2hsYW5kIEVudHdpY2tsdW5nIEdtYkgsIElCTSBDb3Jwb3JhdGlvbgorICogICAgQXV0aG9yKHMpOiBIYXJ0bXV0IFBlbm5lciAoaHBAZGUuaWJtLmNvbSksCisgKiAgICAgICAgICAgICAgIE1hcnRpbiBTY2h3aWRlZnNreSAoc2Nod2lkZWZza3lAZGUuaWJtLmNvbSkKKyAqCisgKiAgRGVyaXZlZCBmcm9tICJpbmNsdWRlL2FzbS1pMzg2L3Byb2Nlc3Nvci5oIgorICogICAgQ29weXJpZ2h0IChDKSAxOTk0LCBMaW51cyBUb3J2YWxkcworICovCisKKyNpZm5kZWYgX19BU01fUzM5MF9QUk9DRVNTT1JfSAorI2RlZmluZSBfX0FTTV9TMzkwX1BST0NFU1NPUl9ICisKKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKworI2lmZGVmIF9fS0VSTkVMX18KKy8qCisgKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIG1hY3JvIHRoYXQgcmV0dXJucyBjdXJyZW50CisgKiBpbnN0cnVjdGlvbiBwb2ludGVyICgicHJvZ3JhbSBjb3VudGVyIikuCisgKi8KKyNkZWZpbmUgY3VycmVudF90ZXh0X2FkZHIoKSAoeyB2b2lkICpwYzsgX19hc21fXygiYmFzciAlMCwwIjoiPWEiKHBjKSk7IHBjOyB9KQorCisvKgorICogIENQVSB0eXBlIGFuZCBoYXJkd2FyZSBidWcgZmxhZ3MuIEtlcHQgc2VwYXJhdGVseSBmb3IgZWFjaCBDUFUuCisgKiAgTWVtYmVycyBvZiB0aGlzIHN0cnVjdHVyZSBhcmUgcmVmZXJlbmNlZCBpbiBoZWFkLlMsIHNvIHRoaW5rIHR3aWNlCisgKiAgYmVmb3JlIHRvdWNoaW5nIHRoZW0uIFttal0KKyAqLworCit0eXBlZGVmIHN0cnVjdAoreworICAgICAgICB1bnNpZ25lZCBpbnQgdmVyc2lvbiA6ICA4OworICAgICAgICB1bnNpZ25lZCBpbnQgaWRlbnQgICA6IDI0OworICAgICAgICB1bnNpZ25lZCBpbnQgbWFjaGluZSA6IDE2OworICAgICAgICB1bnNpZ25lZCBpbnQgdW51c2VkICA6IDE2OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgY3B1aWRfdDsKKworc3RydWN0IGNwdWluZm9fUzM5MAoreworICAgICAgICBjcHVpZF90ICBjcHVfaWQ7CisgICAgICAgIF9fdTE2ICAgIGNwdV9hZGRyOworICAgICAgICBfX3UxNiAgICBjcHVfbnI7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9vcHNfcGVyX2ppZmZ5OworICAgICAgICB1bnNpZ25lZCBsb25nICpwZ2RfcXVpY2s7CisjaWZkZWYgX19zMzkweF9fCisgICAgICAgIHVuc2lnbmVkIGxvbmcgKnBtZF9xdWljazsKKyNlbmRpZiAvKiBfX3MzOTB4X18gKi8KKyAgICAgICAgdW5zaWduZWQgbG9uZyAqcHRlX3F1aWNrOworICAgICAgICB1bnNpZ25lZCBsb25nIHBndGFibGVfY2FjaGVfc3o7Cit9OworCitleHRlcm4gdm9pZCBwcmludF9jcHVfaW5mbyhzdHJ1Y3QgY3B1aW5mb19TMzkwICopOworCisvKiBMYXp5IEZQVSBoYW5kbGluZyBvbiB1bmktcHJvY2Vzc29yICovCitleHRlcm4gc3RydWN0IHRhc2tfc3RydWN0ICpsYXN0X3Rhc2tfdXNlZF9tYXRoOworCisvKgorICogVXNlciBzcGFjZSBwcm9jZXNzIHNpemU6IDJHQiBmb3IgMzEgYml0LCA0VEIgZm9yIDY0IGJpdC4KKyAqLworI2lmbmRlZiBfX3MzOTB4X18KKworIyBkZWZpbmUgVEFTS19TSVpFCQkoMHg4MDAwMDAwMFVMKQorIyBkZWZpbmUgVEFTS19VTk1BUFBFRF9CQVNFCShUQVNLX1NJWkUgLyAyKQorIyBkZWZpbmUgREVGQVVMVF9UQVNLX1NJWkUJKDB4ODAwMDAwMDBVTCkKKworI2Vsc2UgLyogX19zMzkweF9fICovCisKKyMgZGVmaW5lIFRBU0tfU0laRQkJKHRlc3RfdGhyZWFkX2ZsYWcoVElGXzMxQklUKSA/IFwKKwkJCQkJKDB4ODAwMDAwMDBVTCkgOiAoMHg0MDAwMDAwMDAwMFVMKSkKKyMgZGVmaW5lIFRBU0tfVU5NQVBQRURfQkFTRQkoVEFTS19TSVpFIC8gMikKKyMgZGVmaW5lIERFRkFVTFRfVEFTS19TSVpFCSgweDQwMDAwMDAwMDAwVUwpCisKKyNlbmRpZiAvKiBfX3MzOTB4X18gKi8KKworI2RlZmluZSBNTV9WTV9TSVpFKG1tKQkJREVGQVVMVF9UQVNLX1NJWkUKKworI2RlZmluZSBIQVZFX0FSQ0hfUElDS19NTUFQX0xBWU9VVAorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgICAgIF9fdTMyIGFyNDsKK30gbW1fc2VnbWVudF90OworCisvKgorICogVGhyZWFkIHN0cnVjdHVyZQorICovCitzdHJ1Y3QgdGhyZWFkX3N0cnVjdCB7CisJczM5MF9mcF9yZWdzIGZwX3JlZ3M7CisJdW5zaWduZWQgaW50ICBhY3JzW05VTV9BQ1JTXTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBrc3A7ICAgICAgICAgICAgICAvKiBrZXJuZWwgc3RhY2sgcG9pbnRlciAgICAgICAgICAgICAqLworICAgICAgICB1bnNpZ25lZCBsb25nIHVzZXJfc2VnOyAgICAgICAgIC8qIEhTVEQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJbW1fc2VnbWVudF90IG1tX3NlZ21lbnQ7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgcHJvdF9hZGRyOyAgICAgICAgLyogYWRkcmVzcyBvZiBwcm90ZWN0aW9uLWV4Y2VwLiAgICAgKi8KKyAgICAgICAgdW5zaWduZWQgaW50IGVycm9yX2NvZGU7ICAgICAgICAvKiBlcnJvci1jb2RlIG9mIGxhc3QgcHJvZy1leGNlcC4gICAqLworICAgICAgICB1bnNpZ25lZCBpbnQgdHJhcF9ubzsKKyAgICAgICAgcGVyX3N0cnVjdCBwZXJfaW5mbzsKKwkvKiBVc2VkIHRvIGdpdmUgZmFpbGluZyBpbnN0cnVjdGlvbiBiYWNrIHRvIHVzZXIgZm9yIGllZWUgZXhjZXB0aW9ucyAqLworCXVuc2lnbmVkIGxvbmcgaWVlZV9pbnN0cnVjdGlvbl9wb2ludGVyOyAKKyAgICAgICAgLyogcGZhdWx0X3dhaXQgaXMgdXNlZCB0byBibG9jayB0aGUgcHJvY2VzcyBvbiBhIHBmYXVsdCBldmVudCAqLworCXVuc2lnbmVkIGxvbmcgcGZhdWx0X3dhaXQ7Cit9OworCit0eXBlZGVmIHN0cnVjdCB0aHJlYWRfc3RydWN0IHRocmVhZF9zdHJ1Y3Q7CisKKy8qCisgKiBTdGFjayBsYXlvdXQgb2YgYSBDIHN0YWNrIGZyYW1lLgorICovCisjaWZuZGVmIF9fUEFDS19TVEFDSworc3RydWN0IHN0YWNrX2ZyYW1lIHsKKwl1bnNpZ25lZCBsb25nIGJhY2tfY2hhaW47CisJdW5zaWduZWQgbG9uZyBlbXB0eTFbNV07CisJdW5zaWduZWQgbG9uZyBncHJzWzEwXTsKKwl1bnNpZ25lZCBpbnQgIGVtcHR5Mls4XTsKK307CisjZWxzZQorc3RydWN0IHN0YWNrX2ZyYW1lIHsKKwl1bnNpZ25lZCBsb25nIGVtcHR5MVs1XTsKKwl1bnNpZ25lZCBpbnQgIGVtcHR5Mls4XTsKKwl1bnNpZ25lZCBsb25nIGdwcnNbMTBdOworCXVuc2lnbmVkIGxvbmcgYmFja19jaGFpbjsKK307CisjZW5kaWYKKworI2RlZmluZSBBUkNIX01JTl9UQVNLQUxJR04JOAorCisjaWZuZGVmIF9fczM5MHhfXworIyBkZWZpbmUgX19TV0FQUEVSX1BHX0RJUiBfX3BhKCZzd2FwcGVyX3BnX2RpclswXSkgKyBfU0VHTUVOVF9UQUJMRQorI2Vsc2UgLyogX19zMzkweF9fICovCisjIGRlZmluZSBfX1NXQVBQRVJfUEdfRElSIF9fcGEoJnN3YXBwZXJfcGdfZGlyWzBdKSArIF9SRUdJT05fVEFCTEUKKyNlbmRpZiAvKiBfX3MzOTB4X18gKi8KKworI2RlZmluZSBJTklUX1RIUkVBRCB7ezAse3swfSx7MH0sezB9LHswfSx7MH0sezB9LHswfSx7MH0sezB9LHswfSwJICAgICAgIFwKKwkJCSAgICB7MH0sezB9LHswfSx7MH0sezB9LHswfX19LAkJCSAgICAgICBcCisJCSAgICAgezAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9LAkgICAgICAgXAorCQkgICAgIHNpemVvZihpbml0X3N0YWNrKSArICh1bnNpZ25lZCBsb25nKSAmaW5pdF9zdGFjaywJICAgICAgIFwKKwkJICAgICBfX1NXQVBQRVJfUEdfRElSLAkJCQkJICAgICAgIFwKKwkJICAgICB7MH0sCQkJCQkJICAgICAgIFwKKwkJICAgICAwLDAsMCwJCQkJCQkgICAgICAgXAorCQkgICAgIChwZXJfc3RydWN0KSB7e3t7MCx9fX0sMCwwLDAsMCx7ezAsfX19LAkJICAgICAgIFwKKwkJICAgICAwLCAwCQkJCQkJICAgICAgIFwKK30gCisKKy8qCisgKiBEbyBuZWNlc3Nhcnkgc2V0dXAgdG8gc3RhcnQgdXAgYSBuZXcgdGhyZWFkLgorICovCisjaWZuZGVmIF9fczM5MHhfXworCisjZGVmaW5lIHN0YXJ0X3RocmVhZChyZWdzLCBuZXdfcHN3LCBuZXdfc3RhY2twKSBkbyB7ICAgICAgICAgICAgXAorICAgICAgICByZWdzLT5wc3cubWFzayAgPSBQU1dfVVNFUl9CSVRTOyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmVncy0+cHN3LmFkZHIgID0gbmV3X3BzdyB8IFBTV19BRERSX0FNT0RFOyAgICAgICAgICAgICBcCisgICAgICAgIHJlZ3MtPmdwcnNbMTVdICA9IG5ld19zdGFja3AgOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSB3aGlsZSAoMCkKKworI2Vsc2UgLyogX19zMzkweF9fICovCisKKyNkZWZpbmUgc3RhcnRfdGhyZWFkKHJlZ3MsIG5ld19wc3csIG5ld19zdGFja3ApIGRvIHsgICAgICAgICAgICBcCisgICAgICAgIHJlZ3MtPnBzdy5tYXNrICA9IFBTV19VU0VSX0JJVFM7ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICByZWdzLT5wc3cuYWRkciAgPSBuZXdfcHN3OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmVncy0+Z3Byc1sxNV0gID0gbmV3X3N0YWNrcDsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIHN0YXJ0X3RocmVhZDMxKHJlZ3MsIG5ld19wc3csIG5ld19zdGFja3ApIGRvIHsgICAgICAgICAgXAorCXJlZ3MtPnBzdy5tYXNrICA9IFBTV19VU0VSMzJfQklUUzsJCQlcCisgICAgICAgIHJlZ3MtPnBzdy5hZGRyICA9IG5ld19wc3c7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICByZWdzLT5ncHJzWzE1XSAgPSBuZXdfc3RhY2twOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gd2hpbGUgKDApCisKKyNlbmRpZiAvKiBfX3MzOTB4X18gKi8KKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbiwgYSBzdHJhbmdlIEMgdGhpbmcgKi8KK3N0cnVjdCB0YXNrX3N0cnVjdDsKK3N0cnVjdCBtbV9zdHJ1Y3Q7CisKKy8qIEZyZWUgYWxsIHJlc291cmNlcyBoZWxkIGJ5IGEgdGhyZWFkLiAqLworZXh0ZXJuIHZvaWQgcmVsZWFzZV90aHJlYWQoc3RydWN0IHRhc2tfc3RydWN0ICopOworZXh0ZXJuIGludCBrZXJuZWxfdGhyZWFkKGludCAoKmZuKSh2b2lkICopLCB2b2lkICogYXJnLCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKKworLyogUHJlcGFyZSB0byBjb3B5IHRocmVhZCBzdGF0ZSAtIHVubGF6eSBhbGwgbGF6eSBzdGF0dXMgKi8KKyNkZWZpbmUgcHJlcGFyZV90b19jb3B5KHRzaykJZG8geyB9IHdoaWxlICgwKQorCisvKgorICogUmV0dXJuIHNhdmVkIFBDIG9mIGEgYmxvY2tlZCB0aHJlYWQuCisgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIHRocmVhZF9zYXZlZF9wYyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpOworCisvKgorICogUHJpbnQgcmVnaXN0ZXIgb2YgdGFzayBpbnRvIGJ1ZmZlci4gVXNlZCBpbiBmcy9wcm9jL2FycmF5LmMuCisgKi8KK2V4dGVybiBjaGFyICp0YXNrX3Nob3dfcmVncyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGNoYXIgKmJ1ZmZlcik7CisKK2V4dGVybiB2b2lkIHNob3dfcmVnaXN0ZXJzKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2V4dGVybiB2b2lkIHNob3dfdHJhY2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB1bnNpZ25lZCBsb25nICpzcCk7CisKK3Vuc2lnbmVkIGxvbmcgZ2V0X3djaGFuKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7CisjZGVmaW5lIF9fS1NUS19QVFJFR1ModHNrKSAoKHN0cnVjdCBwdF9yZWdzICopIFwKKyAgICAgICAgKCh1bnNpZ25lZCBsb25nKSB0c2stPnRocmVhZF9pbmZvICsgVEhSRUFEX1NJWkUgLSBzaXplb2Yoc3RydWN0IHB0X3JlZ3MpKSkKKyNkZWZpbmUgS1NUS19FSVAodHNrKQkoX19LU1RLX1BUUkVHUyh0c2spLT5wc3cuYWRkcikKKyNkZWZpbmUgS1NUS19FU1AodHNrKQkoX19LU1RLX1BUUkVHUyh0c2spLT5ncHJzWzE1XSkKKworLyoKKyAqIEdpdmUgdXAgdGhlIHRpbWUgc2xpY2Ugb2YgdGhlIHZpcnR1YWwgUFUuCisgKi8KKyNpZm5kZWYgX19zMzkweF9fCisjIGRlZmluZSBjcHVfcmVsYXgoKQlhc20gdm9sYXRpbGUgKCJkaWFnIDAsMCw2OCIgOiA6IDogIm1lbW9yeSIpCisjZWxzZSAvKiBfX3MzOTB4X18gKi8KKyMgZGVmaW5lIGNwdV9yZWxheCgpIFwKKwlhc20gdm9sYXRpbGUgKCJleCAwLCUwIiA6IDogImkiIChfX0xDX0RJQUc0NF9PUENPREUpIDogIm1lbW9yeSIpCisjZW5kaWYgLyogX19zMzkweF9fICovCisKKy8qCisgKiBTZXQgUFNXIG1hc2sgdG8gc3BlY2lmaWVkIHZhbHVlLCB3aGlsZSBsZWF2aW5nIHRoZQorICogUFNXIGFkZHIgcG9pbnRpbmcgdG8gdGhlIG5leHQgaW5zdHJ1Y3Rpb24uCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkIF9fbG9hZF9wc3dfbWFzayAodW5zaWduZWQgbG9uZyBtYXNrKQoreworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKworCXBzd190IHBzdzsKKwlwc3cubWFzayA9IG1hc2s7CisKKyNpZm5kZWYgX19zMzkweF9fCisJYXNtIHZvbGF0aWxlICgKKwkJIiAgICBiYXNyICUwLDBcbiIKKwkJIjA6ICBhaGkgICUwLDFmLTBiXG4iCisJCSIgICAgc3QJICAlMCw0KCUxKVxuIgorCQkiICAgIGxwc3cgMCglMSlcbiIKKwkJIjE6IgorCQk6ICI9JmQiIChhZGRyKSA6ICJhIiAoJnBzdyksICJtIiAocHN3KSA6ICJtZW1vcnkiLCAiY2MiICk7CisjZWxzZSAvKiBfX3MzOTB4X18gKi8KKwlhc20gdm9sYXRpbGUgKAorCQkiICAgIGxhcmwgICUwLDFmXG4iCisJCSIgICAgc3RnICAgJTAsOCglMSlcbiIKKwkJIiAgICBscHN3ZSAwKCUxKVxuIgorCQkiMToiCisJCTogIj0mZCIgKGFkZHIpIDogImEiICgmcHN3KSwgIm0iIChwc3cpIDogIm1lbW9yeSIsICJjYyIgKTsKKyNlbmRpZiAvKiBfX3MzOTB4X18gKi8KK30KKyAKKy8qCisgKiBGdW5jdGlvbiB0byBzdG9wIGEgcHJvY2Vzc29yIHVudGlsIGFuIGludGVycnVwdGlvbiBvY2N1cnJlZAorICovCitzdGF0aWMgaW5saW5lIHZvaWQgZW5hYmxlZF93YWl0KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyByZWc7CisJcHN3X3Qgd2FpdF9wc3c7CisKKwl3YWl0X3Bzdy5tYXNrID0gUFNXX0JBU0VfQklUUyB8IFBTV19NQVNLX0lPIHwgUFNXX01BU0tfRVhUIHwKKwkJUFNXX01BU0tfTUNIRUNLIHwgUFNXX01BU0tfV0FJVDsKKyNpZm5kZWYgX19zMzkweF9fCisJYXNtIHZvbGF0aWxlICgKKwkJIiAgICBiYXNyICUwLDBcbiIKKwkJIjA6ICBsYSAgICUwLDFmLTBiKCUwKVxuIgorCQkiICAgIHN0ICAgJTAsNCglMSlcbiIKKwkJIiAgICBvaSAgIDQoJTEpLDB4ODBcbiIKKwkJIiAgICBscHN3IDAoJTEpXG4iCisJCSIxOiIKKwkJOiAiPSZhIiAocmVnKSA6ICJhIiAoJndhaXRfcHN3KSwgIm0iICh3YWl0X3BzdykKKwkJOiAibWVtb3J5IiwgImNjIiApOworI2Vsc2UgLyogX19zMzkweF9fICovCisJYXNtIHZvbGF0aWxlICgKKwkJIiAgICBsYXJsICAlMCwwZlxuIgorCQkiICAgIHN0ZyAgICUwLDgoJTEpXG4iCisJCSIgICAgbHBzd2UgMCglMSlcbiIKKwkJIjA6IgorCQk6ICI9JmEiIChyZWcpIDogImEiICgmd2FpdF9wc3cpLCAibSIgKHdhaXRfcHN3KQorCQk6ICJtZW1vcnkiLCAiY2MiICk7CisjZW5kaWYgLyogX19zMzkweF9fICovCit9CisKKy8qCisgKiBGdW5jdGlvbiB0byBkcm9wIGEgcHJvY2Vzc29yIGludG8gZGlzYWJsZWQgd2FpdCBzdGF0ZQorICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkaXNhYmxlZF93YWl0KHVuc2lnbmVkIGxvbmcgY29kZSkKK3sKKyAgICAgICAgY2hhciBwc3dfYnVmZmVyWzIqc2l6ZW9mKHBzd190KV07CisgICAgICAgIHVuc2lnbmVkIGxvbmcgY3RsX2J1ZjsKKyAgICAgICAgcHN3X3QgKmR3X3BzdyA9IChwc3dfdCAqKSgoKHVuc2lnbmVkIGxvbmcpICZwc3dfYnVmZmVyK3NpemVvZihwc3dfdCktMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIC1zaXplb2YocHN3X3QpKTsKKworICAgICAgICBkd19wc3ctPm1hc2sgPSBQU1dfQkFTRV9CSVRTIHwgUFNXX01BU0tfV0FJVDsKKyAgICAgICAgZHdfcHN3LT5hZGRyID0gY29kZTsKKyAgICAgICAgLyogCisgICAgICAgICAqIFN0b3JlIHN0YXR1cyBhbmQgdGhlbiBsb2FkIGRpc2FibGVkIHdhaXQgcHN3LAorICAgICAgICAgKiB0aGUgcHJvY2Vzc29yIGlzIGRlYWQgYWZ0ZXJ3YXJkcworICAgICAgICAgKi8KKyNpZm5kZWYgX19zMzkweF9fCisgICAgICAgIGFzbSB2b2xhdGlsZSAoIiAgICBzdGN0bCAwLDAsMCglMilcbiIKKyAgICAgICAgICAgICAgICAgICAgICAiICAgIG5pICAgIDAoJTIpLDB4ZWZcbiIgLyogc3dpdGNoIG9mZiBwcm90ZWN0aW9uICovCisgICAgICAgICAgICAgICAgICAgICAgIiAgICBsY3RsICAwLDAsMCglMilcbiIKKyAgICAgICAgICAgICAgICAgICAgICAiICAgIHN0cHQgIDB4ZDhcbiIgICAgICAgLyogc3RvcmUgdGltZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAiICAgIHN0Y2tjIDB4ZTBcbiIgICAgICAgLyogc3RvcmUgY2xvY2sgY29tcGFyYXRvciAqLworICAgICAgICAgICAgICAgICAgICAgICIgICAgc3RweCAgMHgxMDhcbiIgICAgICAvKiBzdG9yZSBwcmVmaXggcmVnaXN0ZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAiICAgIHN0YW0gIDAsMTUsMHgxMjBcbiIgLyogc3RvcmUgYWNjZXNzIHJlZ2lzdGVycyAqLworICAgICAgICAgICAgICAgICAgICAgICIgICAgc3RkICAgMCwweDE2MFxuIiAgICAvKiBzdG9yZSBmMCAqLworICAgICAgICAgICAgICAgICAgICAgICIgICAgc3RkICAgMiwweDE2OFxuIiAgICAvKiBzdG9yZSBmMiAqLworICAgICAgICAgICAgICAgICAgICAgICIgICAgc3RkICAgNCwweDE3MFxuIiAgICAvKiBzdG9yZSBmNCAqLworICAgICAgICAgICAgICAgICAgICAgICIgICAgc3RkICAgNiwweDE3OFxuIiAgICAvKiBzdG9yZSBmNiAqLworICAgICAgICAgICAgICAgICAgICAgICIgICAgc3RtICAgMCwxNSwweDE4MFxuIiAvKiBzdG9yZSBnZW5lcmFsIHJlZ2lzdGVycyAqLworICAgICAgICAgICAgICAgICAgICAgICIgICAgc3RjdGwgMCwxNSwweDFjMFxuIiAvKiBzdG9yZSBjb250cm9sIHJlZ2lzdGVycyAqLworICAgICAgICAgICAgICAgICAgICAgICIgICAgb2kgICAgMHgxYzAsMHgxMFxuIiAvKiBmYWtlIHByb3RlY3Rpb24gYml0ICovCisgICAgICAgICAgICAgICAgICAgICAgIiAgICBscHN3IDAoJTEpIgorICAgICAgICAgICAgICAgICAgICAgIDogIj1tIiAoY3RsX2J1ZikKKwkJICAgICAgOiAiYSIgKGR3X3BzdyksICJhIiAoJmN0bF9idWYpLCAibSIgKGR3X3BzdykgOiAiY2MiICk7CisjZWxzZSAvKiBfX3MzOTB4X18gKi8KKyAgICAgICAgYXNtIHZvbGF0aWxlICgiICAgIHN0Y3RnIDAsMCwwKCUyKVxuIgorICAgICAgICAgICAgICAgICAgICAgICIgICAgbmkgICAgNCglMiksMHhlZlxuIiAvKiBzd2l0Y2ggb2ZmIHByb3RlY3Rpb24gKi8KKyAgICAgICAgICAgICAgICAgICAgICAiICAgIGxjdGxnIDAsMCwwKCUyKVxuIgorICAgICAgICAgICAgICAgICAgICAgICIgICAgbGdoaSAgMSwweDEwMDBcbiIKKyAgICAgICAgICAgICAgICAgICAgICAiICAgIHN0cHQgIDB4MzI4KDEpXG4iICAgICAgLyogc3RvcmUgdGltZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAiICAgIHN0Y2tjIDB4MzMwKDEpXG4iICAgICAgLyogc3RvcmUgY2xvY2sgY29tcGFyYXRvciAqLworICAgICAgICAgICAgICAgICAgICAgICIgICAgc3RweCAgMHgzMTgoMSlcbiIgICAgICAvKiBzdG9yZSBwcmVmaXggcmVnaXN0ZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAiICAgIHN0YW0gIDAsMTUsMHgzNDAoMSlcbiIgLyogc3RvcmUgYWNjZXNzIHJlZ2lzdGVycyAqLworICAgICAgICAgICAgICAgICAgICAgICIgICAgc3RmcGMgMHgzMWMoMSlcbiIgICAgICAvKiBzdG9yZSBmcHUgY29udHJvbCAqLworICAgICAgICAgICAgICAgICAgICAgICIgICAgc3RkICAgMCwweDIwMCgxKVxuIiAgICAvKiBzdG9yZSBmMCAqLworICAgICAgICAgICAgICAgICAgICAgICIgICAgc3RkICAgMSwweDIwOCgxKVxuIiAgICAvKiBzdG9yZSBmMSAqLworICAgICAgICAgICAgICAgICAgICAgICIgICAgc3RkICAgMiwweDIxMCgxKVxuIiAgICAvKiBzdG9yZSBmMiAqLworICAgICAgICAgICAgICAgICAgICAgICIgICAgc3RkICAgMywweDIxOCgxKVxuIiAgICAvKiBzdG9yZSBmMyAqLworICAgICAgICAgICAgICAgICAgICAgICIgICAgc3RkICAgNCwweDIyMCgxKVxuIiAgICAvKiBzdG9yZSBmNCAqLworICAgICAgICAgICAgICAgICAgICAgICIgICAgc3RkICAgNSwweDIyOCgxKVxuIiAgICAvKiBzdG9yZSBmNSAqLworICAgICAgICAgICAgICAgICAgICAgICIgICAgc3RkICAgNiwweDIzMCgxKVxuIiAgICAvKiBzdG9yZSBmNiAqLworICAgICAgICAgICAgICAgICAgICAgICIgICAgc3RkICAgNywweDIzOCgxKVxuIiAgICAvKiBzdG9yZSBmNyAqLworICAgICAgICAgICAgICAgICAgICAgICIgICAgc3RkICAgOCwweDI0MCgxKVxuIiAgICAvKiBzdG9yZSBmOCAqLworICAgICAgICAgICAgICAgICAgICAgICIgICAgc3RkICAgOSwweDI0OCgxKVxuIiAgICAvKiBzdG9yZSBmOSAqLworICAgICAgICAgICAgICAgICAgICAgICIgICAgc3RkICAgMTAsMHgyNTAoMSlcbiIgICAvKiBzdG9yZSBmMTAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAiICAgIHN0ZCAgIDExLDB4MjU4KDEpXG4iICAgLyogc3RvcmUgZjExICovCisgICAgICAgICAgICAgICAgICAgICAgIiAgICBzdGQgICAxMiwweDI2MCgxKVxuIiAgIC8qIHN0b3JlIGYxMiAqLworICAgICAgICAgICAgICAgICAgICAgICIgICAgc3RkICAgMTMsMHgyNjgoMSlcbiIgICAvKiBzdG9yZSBmMTMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAiICAgIHN0ZCAgIDE0LDB4MjcwKDEpXG4iICAgLyogc3RvcmUgZjE0ICovCisgICAgICAgICAgICAgICAgICAgICAgIiAgICBzdGQgICAxNSwweDI3OCgxKVxuIiAgIC8qIHN0b3JlIGYxNSAqLworICAgICAgICAgICAgICAgICAgICAgICIgICAgc3RtZyAgMCwxNSwweDI4MCgxKVxuIiAvKiBzdG9yZSBnZW5lcmFsIHJlZ2lzdGVycyAqLworICAgICAgICAgICAgICAgICAgICAgICIgICAgc3RjdGcgMCwxNSwweDM4MCgxKVxuIiAvKiBzdG9yZSBjb250cm9sIHJlZ2lzdGVycyAqLworICAgICAgICAgICAgICAgICAgICAgICIgICAgb2kgICAgMHgzODQoMSksMHgxMFxuIiAvKiBmYWtlIHByb3RlY3Rpb24gYml0ICovCisgICAgICAgICAgICAgICAgICAgICAgIiAgICBscHN3ZSAwKCUxKSIKKyAgICAgICAgICAgICAgICAgICAgICA6ICI9bSIgKGN0bF9idWYpCisJCSAgICAgIDogImEiIChkd19wc3cpLCAiYSIgKCZjdGxfYnVmKSwKKwkJICAgICAgICAibSIgKGR3X3BzdykgOiAiY2MiLCAiMCIsICIxIik7CisjZW5kaWYgLyogX19zMzkweF9fICovCit9CisKKy8qCisgKiBDUFUgaWRsZSBub3RpZmllciBjaGFpbi4KKyAqLworI2RlZmluZSBDUFVfSURMRQkwCisjZGVmaW5lIENQVV9OT1RfSURMRQkxCisKK3N0cnVjdCBub3RpZmllcl9ibG9jazsKK2ludCByZWdpc3Rlcl9pZGxlX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpOworaW50IHVucmVnaXN0ZXJfaWRsZV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTsKKworI2VuZGlmCisKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9fQVNNX1MzOTBfUFJPQ0VTU09SX0ggICAgICAgICAgICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL3B0cmFjZS5oIGIvaW5jbHVkZS9hc20tczM5MC9wdHJhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGM4MDY2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tczM5MC9wdHJhY2UuaApAQCAtMCwwICsxLDQ3NSBAQAorLyoKKyAqICBpbmNsdWRlL2FzbS1zMzkwL3B0cmFjZS5oCisgKgorICogIFMzOTAgdmVyc2lvbgorICogICAgQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgSUJNIERldXRzY2hsYW5kIEVudHdpY2tsdW5nIEdtYkgsIElCTSBDb3Jwb3JhdGlvbgorICogICAgQXV0aG9yKHMpOiBEZW5pcyBKb3NlcGggQmFycm93IChkamJhcnJvd0BkZS5pYm0uY29tLGJhcnJvd19kakB5YWhvby5jb20pCisgKi8KKworI2lmbmRlZiBfUzM5MF9QVFJBQ0VfSAorI2RlZmluZSBfUzM5MF9QVFJBQ0VfSAorCisvKgorICogT2Zmc2V0cyBpbiB0aGUgdXNlcl9yZWdzX3N0cnVjdC4gVGhleSBhcmUgdXNlZCBmb3IgdGhlIHB0cmFjZQorICogc3lzdGVtIGNhbGwgYW5kIGluIGVudHJ5LlMKKyAqLworI2lmbmRlZiBfX3MzOTB4X18KKworI2RlZmluZSBQVF9QU1dNQVNLICAweDAwCisjZGVmaW5lIFBUX1BTV0FERFIgIDB4MDQKKyNkZWZpbmUgUFRfR1BSMCAgICAgMHgwOAorI2RlZmluZSBQVF9HUFIxICAgICAweDBDCisjZGVmaW5lIFBUX0dQUjIgICAgIDB4MTAKKyNkZWZpbmUgUFRfR1BSMyAgICAgMHgxNAorI2RlZmluZSBQVF9HUFI0ICAgICAweDE4CisjZGVmaW5lIFBUX0dQUjUgICAgIDB4MUMKKyNkZWZpbmUgUFRfR1BSNiAgICAgMHgyMAorI2RlZmluZSBQVF9HUFI3ICAgICAweDI0CisjZGVmaW5lIFBUX0dQUjggICAgIDB4MjgKKyNkZWZpbmUgUFRfR1BSOSAgICAgMHgyQworI2RlZmluZSBQVF9HUFIxMCAgICAweDMwCisjZGVmaW5lIFBUX0dQUjExICAgIDB4MzQKKyNkZWZpbmUgUFRfR1BSMTIgICAgMHgzOAorI2RlZmluZSBQVF9HUFIxMyAgICAweDNDCisjZGVmaW5lIFBUX0dQUjE0ICAgIDB4NDAKKyNkZWZpbmUgUFRfR1BSMTUgICAgMHg0NAorI2RlZmluZSBQVF9BQ1IwICAgICAweDQ4CisjZGVmaW5lIFBUX0FDUjEgICAgIDB4NEMKKyNkZWZpbmUgUFRfQUNSMiAgICAgMHg1MAorI2RlZmluZSBQVF9BQ1IzICAgICAweDU0CisjZGVmaW5lIFBUX0FDUjQJICAgIDB4NTgKKyNkZWZpbmUgUFRfQUNSNQkgICAgMHg1QworI2RlZmluZSBQVF9BQ1I2CSAgICAweDYwCisjZGVmaW5lIFBUX0FDUjcJICAgIDB4NjQKKyNkZWZpbmUgUFRfQUNSOAkgICAgMHg2OAorI2RlZmluZSBQVF9BQ1I5CSAgICAweDZDCisjZGVmaW5lIFBUX0FDUjEwICAgIDB4NzAKKyNkZWZpbmUgUFRfQUNSMTEgICAgMHg3NAorI2RlZmluZSBQVF9BQ1IxMiAgICAweDc4CisjZGVmaW5lIFBUX0FDUjEzICAgIDB4N0MKKyNkZWZpbmUgUFRfQUNSMTQgICAgMHg4MAorI2RlZmluZSBQVF9BQ1IxNSAgICAweDg0CisjZGVmaW5lIFBUX09SSUdHUFIyIDB4ODgKKyNkZWZpbmUgUFRfRlBDCSAgICAweDkwCisvKgorICogQSBuYXN0eSBmYWN0IG9mIGxpZmUgdGhhdCB0aGUgcHRyYWNlIGFwaQorICogb25seSBzdXBwb3J0cyBwYXNzaW5nIG9mIGxvbmdzLgorICovCisjZGVmaW5lIFBUX0ZQUjBfSEkgIDB4OTgKKyNkZWZpbmUgUFRfRlBSMF9MTyAgMHg5QworI2RlZmluZSBQVF9GUFIxX0hJICAweEEwCisjZGVmaW5lIFBUX0ZQUjFfTE8gIDB4QTQKKyNkZWZpbmUgUFRfRlBSMl9ISSAgMHhBOAorI2RlZmluZSBQVF9GUFIyX0xPICAweEFDCisjZGVmaW5lIFBUX0ZQUjNfSEkgIDB4QjAKKyNkZWZpbmUgUFRfRlBSM19MTyAgMHhCNAorI2RlZmluZSBQVF9GUFI0X0hJICAweEI4CisjZGVmaW5lIFBUX0ZQUjRfTE8gIDB4QkMKKyNkZWZpbmUgUFRfRlBSNV9ISSAgMHhDMAorI2RlZmluZSBQVF9GUFI1X0xPICAweEM0CisjZGVmaW5lIFBUX0ZQUjZfSEkgIDB4QzgKKyNkZWZpbmUgUFRfRlBSNl9MTyAgMHhDQworI2RlZmluZSBQVF9GUFI3X0hJICAweEQwCisjZGVmaW5lIFBUX0ZQUjdfTE8gIDB4RDQKKyNkZWZpbmUgUFRfRlBSOF9ISSAgMHhEOAorI2RlZmluZSBQVF9GUFI4X0xPICAwWERDCisjZGVmaW5lIFBUX0ZQUjlfSEkgIDB4RTAKKyNkZWZpbmUgUFRfRlBSOV9MTyAgMHhFNAorI2RlZmluZSBQVF9GUFIxMF9ISSAweEU4CisjZGVmaW5lIFBUX0ZQUjEwX0xPIDB4RUMKKyNkZWZpbmUgUFRfRlBSMTFfSEkgMHhGMAorI2RlZmluZSBQVF9GUFIxMV9MTyAweEY0CisjZGVmaW5lIFBUX0ZQUjEyX0hJIDB4RjgKKyNkZWZpbmUgUFRfRlBSMTJfTE8gMHhGQworI2RlZmluZSBQVF9GUFIxM19ISSAweDEwMAorI2RlZmluZSBQVF9GUFIxM19MTyAweDEwNAorI2RlZmluZSBQVF9GUFIxNF9ISSAweDEwOAorI2RlZmluZSBQVF9GUFIxNF9MTyAweDEwQworI2RlZmluZSBQVF9GUFIxNV9ISSAweDExMAorI2RlZmluZSBQVF9GUFIxNV9MTyAweDExNAorI2RlZmluZSBQVF9DUl85CSAgICAweDExOAorI2RlZmluZSBQVF9DUl8xMCAgICAweDExQworI2RlZmluZSBQVF9DUl8xMSAgICAweDEyMAorI2RlZmluZSBQVF9JRUVFX0lQICAweDEzQworI2RlZmluZSBQVF9MQVNUT0ZGICBQVF9JRUVFX0lQCisjZGVmaW5lIFBUX0VORFJFR1MgIDB4MTQwLTEKKworI2RlZmluZSBHUFJfU0laRQk0CisjZGVmaW5lIENSX1NJWkUJCTQKKworI2RlZmluZSBTVEFDS19GUkFNRV9PVkVSSEVBRAk5NgkvKiBzaXplIG9mIG1pbmltdW0gc3RhY2sgZnJhbWUgKi8KKworI2Vsc2UgLyogX19zMzkweF9fICovCisKKyNkZWZpbmUgUFRfUFNXTUFTSyAgMHgwMAorI2RlZmluZSBQVF9QU1dBRERSICAweDA4CisjZGVmaW5lIFBUX0dQUjAgICAgIDB4MTAKKyNkZWZpbmUgUFRfR1BSMSAgICAgMHgxOAorI2RlZmluZSBQVF9HUFIyICAgICAweDIwCisjZGVmaW5lIFBUX0dQUjMgICAgIDB4MjgKKyNkZWZpbmUgUFRfR1BSNCAgICAgMHgzMAorI2RlZmluZSBQVF9HUFI1ICAgICAweDM4CisjZGVmaW5lIFBUX0dQUjYgICAgIDB4NDAKKyNkZWZpbmUgUFRfR1BSNyAgICAgMHg0OAorI2RlZmluZSBQVF9HUFI4ICAgICAweDUwCisjZGVmaW5lIFBUX0dQUjkgICAgIDB4NTgKKyNkZWZpbmUgUFRfR1BSMTAgICAgMHg2MAorI2RlZmluZSBQVF9HUFIxMSAgICAweDY4CisjZGVmaW5lIFBUX0dQUjEyICAgIDB4NzAKKyNkZWZpbmUgUFRfR1BSMTMgICAgMHg3OAorI2RlZmluZSBQVF9HUFIxNCAgICAweDgwCisjZGVmaW5lIFBUX0dQUjE1ICAgIDB4ODgKKyNkZWZpbmUgUFRfQUNSMCAgICAgMHg5MAorI2RlZmluZSBQVF9BQ1IxICAgICAweDk0CisjZGVmaW5lIFBUX0FDUjIgICAgIDB4OTgKKyNkZWZpbmUgUFRfQUNSMyAgICAgMHg5QworI2RlZmluZSBQVF9BQ1I0CSAgICAweEEwCisjZGVmaW5lIFBUX0FDUjUJICAgIDB4QTQKKyNkZWZpbmUgUFRfQUNSNgkgICAgMHhBOAorI2RlZmluZSBQVF9BQ1I3CSAgICAweEFDCisjZGVmaW5lIFBUX0FDUjgJICAgIDB4QjAKKyNkZWZpbmUgUFRfQUNSOQkgICAgMHhCNAorI2RlZmluZSBQVF9BQ1IxMCAgICAweEI4CisjZGVmaW5lIFBUX0FDUjExICAgIDB4QkMKKyNkZWZpbmUgUFRfQUNSMTIgICAgMHhDMAorI2RlZmluZSBQVF9BQ1IxMyAgICAweEM0CisjZGVmaW5lIFBUX0FDUjE0ICAgIDB4QzgKKyNkZWZpbmUgUFRfQUNSMTUgICAgMHhDQworI2RlZmluZSBQVF9PUklHR1BSMiAweEQwCisjZGVmaW5lIFBUX0ZQQwkgICAgMHhEOAorI2RlZmluZSBQVF9GUFIwICAgICAweEUwCisjZGVmaW5lIFBUX0ZQUjEgICAgIDB4RTgKKyNkZWZpbmUgUFRfRlBSMiAgICAgMHhGMAorI2RlZmluZSBQVF9GUFIzICAgICAweEY4CisjZGVmaW5lIFBUX0ZQUjQgICAgIDB4MTAwCisjZGVmaW5lIFBUX0ZQUjUgICAgIDB4MTA4CisjZGVmaW5lIFBUX0ZQUjYgICAgIDB4MTEwCisjZGVmaW5lIFBUX0ZQUjcgICAgIDB4MTE4CisjZGVmaW5lIFBUX0ZQUjggICAgIDB4MTIwCisjZGVmaW5lIFBUX0ZQUjkgICAgIDB4MTI4CisjZGVmaW5lIFBUX0ZQUjEwICAgIDB4MTMwCisjZGVmaW5lIFBUX0ZQUjExICAgIDB4MTM4CisjZGVmaW5lIFBUX0ZQUjEyICAgIDB4MTQwCisjZGVmaW5lIFBUX0ZQUjEzICAgIDB4MTQ4CisjZGVmaW5lIFBUX0ZQUjE0ICAgIDB4MTUwCisjZGVmaW5lIFBUX0ZQUjE1ICAgIDB4MTU4CisjZGVmaW5lIFBUX0NSXzkgICAgIDB4MTYwCisjZGVmaW5lIFBUX0NSXzEwICAgIDB4MTY4CisjZGVmaW5lIFBUX0NSXzExICAgIDB4MTcwCisjZGVmaW5lIFBUX0lFRUVfSVAgIDB4MUE4CisjZGVmaW5lIFBUX0xBU1RPRkYgIFBUX0lFRUVfSVAKKyNkZWZpbmUgUFRfRU5EUkVHUyAgMHgxQjAtMQorCisjZGVmaW5lIEdQUl9TSVpFCTgKKyNkZWZpbmUgQ1JfU0laRQkJOAorCisjZGVmaW5lIFNUQUNLX0ZSQU1FX09WRVJIRUFEICAgIDE2MCAgICAgIC8qIHNpemUgb2YgbWluaW11bSBzdGFjayBmcmFtZSAqLworCisjZW5kaWYgLyogX19zMzkweF9fICovCisKKyNkZWZpbmUgTlVNX0dQUlMJMTYKKyNkZWZpbmUgTlVNX0ZQUlMJMTYKKyNkZWZpbmUgTlVNX0NSUwkJMTYKKyNkZWZpbmUgTlVNX0FDUlMJMTYKKworI2RlZmluZSBGUFJfU0laRQk4CisjZGVmaW5lIEZQQ19TSVpFCTQKKyNkZWZpbmUgRlBDX1BBRF9TSVpFCTQgLyogZ2NjIGluc2lzdHMgb24gYWxpZ25pbmcgdGhlIGZwcmVncyAqLworI2RlZmluZSBBQ1JfU0laRQk0CisKKworI2RlZmluZSBQVFJBQ0VfT0xEU0VUT1BUSU9OUyAgICAgICAgIDIxCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKwordHlwZWRlZiB1bmlvbgoreworCWZsb2F0ICAgZjsKKwlkb3VibGUgIGQ7CisgICAgICAgIF9fdTY0ICAgdWk7CisJc3RydWN0CisJeworCQlfX3UzMiBoaTsKKwkJX191MzIgbG87CisJfSBmcDsKK30gZnJlZ190OworCit0eXBlZGVmIHN0cnVjdAoreworCV9fdTMyICAgZnBjOworCWZyZWdfdCAgZnByc1tOVU1fRlBSU107ICAgICAgICAgICAgICAKK30gczM5MF9mcF9yZWdzOworCisjZGVmaW5lIEZQQ19FWENFUFRJT05fTUFTSyAgICAgIDB4RjgwMDAwMDAKKyNkZWZpbmUgRlBDX0ZMQUdTX01BU0sgICAgICAgICAgMHgwMEY4MDAwMAorI2RlZmluZSBGUENfRFhDX01BU0sgICAgICAgICAgICAweDAwMDBGRjAwCisjZGVmaW5lIEZQQ19STV9NQVNLICAgICAgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgRlBDX1ZBTElEX01BU0sgICAgICAgICAgMHhGOEY4RkYwMworCisvKiB0aGlzIHR5cGVkZWYgZGVmaW5lcyBob3cgYSBQcm9ncmFtIFN0YXR1cyBXb3JkIGxvb2tzIGxpa2UgKi8KK3R5cGVkZWYgc3RydWN0IAoreworICAgICAgICB1bnNpZ25lZCBsb25nIG1hc2s7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcjsKK30gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoOCkpKSBwc3dfdDsKKworI2lmbmRlZiBfX3MzOTB4X18KKworI2RlZmluZSBQU1dfTUFTS19QRVIJCTB4NDAwMDAwMDBVTAorI2RlZmluZSBQU1dfTUFTS19EQVQJCTB4MDQwMDAwMDBVTAorI2RlZmluZSBQU1dfTUFTS19JTwkJMHgwMjAwMDAwMFVMCisjZGVmaW5lIFBTV19NQVNLX0VYVAkJMHgwMTAwMDAwMFVMCisjZGVmaW5lIFBTV19NQVNLX0tFWQkJMHgwMEYwMDAwMFVMCisjZGVmaW5lIFBTV19NQVNLX01DSEVDSwkJMHgwMDA0MDAwMFVMCisjZGVmaW5lIFBTV19NQVNLX1dBSVQJCTB4MDAwMjAwMDBVTAorI2RlZmluZSBQU1dfTUFTS19QU1RBVEUJCTB4MDAwMTAwMDBVTAorI2RlZmluZSBQU1dfTUFTS19BU0MJCTB4MDAwMEMwMDBVTAorI2RlZmluZSBQU1dfTUFTS19DQwkJMHgwMDAwMzAwMFVMCisjZGVmaW5lIFBTV19NQVNLX1BNCQkweDAwMDAwRjAwVUwKKworI2RlZmluZSBQU1dfQUREUl9BTU9ERQkJMHg4MDAwMDAwMFVMCisjZGVmaW5lIFBTV19BRERSX0lOU04JCTB4N0ZGRkZGRkZVTAorCisjZGVmaW5lIFBTV19CQVNFX0JJVFMJCTB4MDAwODAwMDBVTAorCisjZGVmaW5lIFBTV19BU0NfUFJJTUFSWQkJMHgwMDAwMDAwMFVMCisjZGVmaW5lIFBTV19BU0NfQUNDUkVHCQkweDAwMDA0MDAwVUwKKyNkZWZpbmUgUFNXX0FTQ19TRUNPTkRBUlkJMHgwMDAwODAwMFVMCisjZGVmaW5lIFBTV19BU0NfSE9NRQkJMHgwMDAwQzAwMFVMCisKKyNlbHNlIC8qIF9fczM5MHhfXyAqLworCisjZGVmaW5lIFBTV19NQVNLX1BFUgkJMHg0MDAwMDAwMDAwMDAwMDAwVUwKKyNkZWZpbmUgUFNXX01BU0tfREFUCQkweDA0MDAwMDAwMDAwMDAwMDBVTAorI2RlZmluZSBQU1dfTUFTS19JTwkJMHgwMjAwMDAwMDAwMDAwMDAwVUwKKyNkZWZpbmUgUFNXX01BU0tfRVhUCQkweDAxMDAwMDAwMDAwMDAwMDBVTAorI2RlZmluZSBQU1dfTUFTS19LRVkJCTB4MDBGMDAwMDAwMDAwMDAwMFVMCisjZGVmaW5lIFBTV19NQVNLX01DSEVDSwkJMHgwMDA0MDAwMDAwMDAwMDAwVUwKKyNkZWZpbmUgUFNXX01BU0tfV0FJVAkJMHgwMDAyMDAwMDAwMDAwMDAwVUwKKyNkZWZpbmUgUFNXX01BU0tfUFNUQVRFCQkweDAwMDEwMDAwMDAwMDAwMDBVTAorI2RlZmluZSBQU1dfTUFTS19BU0MJCTB4MDAwMEMwMDAwMDAwMDAwMFVMCisjZGVmaW5lIFBTV19NQVNLX0NDCQkweDAwMDAzMDAwMDAwMDAwMDBVTAorI2RlZmluZSBQU1dfTUFTS19QTQkJMHgwMDAwMEYwMDAwMDAwMDAwVUwKKworI2RlZmluZSBQU1dfQUREUl9BTU9ERQkJMHgwMDAwMDAwMDAwMDAwMDAwVUwKKyNkZWZpbmUgUFNXX0FERFJfSU5TTgkJMHhGRkZGRkZGRkZGRkZGRkZGVUwKKworI2RlZmluZSBQU1dfQkFTRV9CSVRTCQkweDAwMDAwMDAxODAwMDAwMDBVTAorI2RlZmluZSBQU1dfQkFTRTMyX0JJVFMJCTB4MDAwMDAwMDA4MDAwMDAwMFVMCisKKyNkZWZpbmUgUFNXX0FTQ19QUklNQVJZCQkweDAwMDAwMDAwMDAwMDAwMDBVTAorI2RlZmluZSBQU1dfQVNDX0FDQ1JFRwkJMHgwMDAwNDAwMDAwMDAwMDAwVUwKKyNkZWZpbmUgUFNXX0FTQ19TRUNPTkRBUlkJMHgwMDAwODAwMDAwMDAwMDAwVUwKKyNkZWZpbmUgUFNXX0FTQ19IT01FCQkweDAwMDBDMDAwMDAwMDAwMDBVTAorCisjZGVmaW5lIFBTV19VU0VSMzJfQklUUyAoUFNXX0JBU0UzMl9CSVRTIHwgUFNXX01BU0tfREFUIHwgUFNXX0FTQ19IT01FIHwgXAorCQkJIFBTV19NQVNLX0lPIHwgUFNXX01BU0tfRVhUIHwgUFNXX01BU0tfTUNIRUNLIHwgXAorCQkJIFBTV19NQVNLX1BTVEFURSkKKworI2VuZGlmIC8qIF9fczM5MHhfXyAqLworCisjZGVmaW5lIFBTV19LRVJORUxfQklUUwkoUFNXX0JBU0VfQklUUyB8IFBTV19NQVNLX0RBVCB8IFBTV19BU0NfUFJJTUFSWSkKKyNkZWZpbmUgUFNXX1VTRVJfQklUUwkoUFNXX0JBU0VfQklUUyB8IFBTV19NQVNLX0RBVCB8IFBTV19BU0NfSE9NRSB8IFwKKwkJCSBQU1dfTUFTS19JTyB8IFBTV19NQVNLX0VYVCB8IFBTV19NQVNLX01DSEVDSyB8IFwKKwkJCSBQU1dfTUFTS19QU1RBVEUpCisKKy8qIFRoaXMgbWFjcm8gbWVyZ2VzIGEgTkVXIFBTVyBtYXNrIHNwZWNpZmllZCBieSB0aGUgdXNlciBpbnRvCisgICB0aGUgY3VycmVudGx5IGFjdGl2ZSBQU1cgbWFzayBDVVJSRU5ULCBtb2RpZnlpbmcgb25seSB0aG9zZQorICAgYml0cyBpbiBDVVJSRU5UIHRoYXQgdGhlIHVzZXIgbWF5IGJlIGFsbG93ZWQgdG8gY2hhbmdlOiB0aGlzCisgICBpcyB0aGUgY29uZGl0aW9uIGNvZGUgYW5kIHRoZSBwcm9ncmFtIG1hc2sgYml0cy4gICovCisjZGVmaW5lIFBTV19NQVNLX01FUkdFKENVUlJFTlQsTkVXKSBcCisJKCgoQ1VSUkVOVCkgJiB+KFBTV19NQVNLX0NDfFBTV19NQVNLX1BNKSkgfCBcCisJICgoTkVXKSAmIChQU1dfTUFTS19DQ3xQU1dfTUFTS19QTSkpKQorCisvKgorICogVGhlIHMzOTBfcmVncyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBkZWZpbmUgdGhlIGVsZl9ncmVnc2V0X3QuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJcHN3X3QgcHN3OworCXVuc2lnbmVkIGxvbmcgZ3Byc1tOVU1fR1BSU107CisJdW5zaWduZWQgaW50ICBhY3JzW05VTV9BQ1JTXTsKKwl1bnNpZ25lZCBsb25nIG9yaWdfZ3ByMjsKK30gczM5MF9yZWdzOworCisjaWZkZWYgX19LRVJORUxfXworLyoKKyAqIFRoZSBwdF9yZWdzIHN0cnVjdCBkZWZpbmVzIHRoZSB3YXkgdGhlIHJlZ2lzdGVycyBhcmUgc3RvcmVkIG9uCisgKiB0aGUgc3RhY2sgZHVyaW5nIGEgc3lzdGVtIGNhbGwuCisgKi8KK3N0cnVjdCBwdF9yZWdzIAoreworCXVuc2lnbmVkIGxvbmcgYXJnc1sxXTsKKwlwc3dfdCBwc3c7CisJdW5zaWduZWQgbG9uZyBncHJzW05VTV9HUFJTXTsKKwl1bnNpZ25lZCBsb25nIG9yaWdfZ3ByMjsKKwl1bnNpZ25lZCBzaG9ydCBpbGM7CisJdW5zaWduZWQgc2hvcnQgdHJhcDsKK307CisjZW5kaWYKKworLyoKKyAqIE5vdyBmb3IgdGhlIHByb2dyYW0gZXZlbnQgcmVjb3JkaW5nICh0cmFjZSkgZGVmaW5pdGlvbnMuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJdW5zaWduZWQgbG9uZyBjclszXTsKK30gcGVyX2NyX3dvcmRzOworCisjZGVmaW5lIFBFUl9FTV9NQVNLIDB4RTgwMDAwMDBVTAorCit0eXBlZGVmCXN0cnVjdAoreworI2lmZGVmIF9fczM5MHhfXworCXVuc2lnbmVkICAgICAgICAgICAgICAgICAgICAgICA6IDMyOworI2VuZGlmIC8qIF9fczM5MHhfXyAqLworCXVuc2lnbmVkIGVtX2JyYW5jaGluZyAgICAgICAgICA6IDE7CisJdW5zaWduZWQgZW1faW5zdHJ1Y3Rpb25fZmV0Y2ggIDogMTsKKwkvKgorCSAqIFN3aXRjaGluZyBvbiBzdG9yYWdlIGFsdGVyYXRpb24gYXV0b21hdGljYWxseSBmaXhlcworCSAqIHRoZSBzdG9yYWdlIGFsdGVyYXRpb24gZXZlbnQgYml0IGluIHRoZSB1c2VycyBzdGQuCisJICovCisJdW5zaWduZWQgZW1fc3RvcmFnZV9hbHRlcmF0aW9uIDogMTsKKwl1bnNpZ25lZCBlbV9ncHJfYWx0X3VudXNlZCAgICAgOiAxOworCXVuc2lnbmVkIGVtX3N0b3JlX3JlYWxfYWRkcmVzcyA6IDE7CisJdW5zaWduZWQgICAgICAgICAgICAgICAgICAgICAgIDogMzsKKwl1bnNpZ25lZCBicmFuY2hfYWRkcl9jdGwgICAgICAgOiAxOworCXVuc2lnbmVkICAgICAgICAgICAgICAgICAgICAgICA6IDE7CisJdW5zaWduZWQgc3RvcmFnZV9hbHRfc3BhY2VfY3RsIDogMTsKKwl1bnNpZ25lZCAgICAgICAgICAgICAgICAgICAgICAgOiAyMTsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0aW5nX2FkZHI7CisJdW5zaWduZWQgbG9uZyBlbmRpbmdfYWRkcjsKK30gcGVyX2NyX2JpdHM7CisKK3R5cGVkZWYgc3RydWN0Cit7CisJdW5zaWduZWQgc2hvcnQgcGVyY19hdG1pZDsKKwl1bnNpZ25lZCBsb25nIGFkZHJlc3M7CisJdW5zaWduZWQgY2hhciBhY2Nlc3NfaWQ7Cit9IHBlcl9sb3djb3JlX3dvcmRzOworCit0eXBlZGVmIHN0cnVjdAoreworCXVuc2lnbmVkIHBlcmNfYnJhbmNoaW5nICAgICAgICAgIDogMTsKKwl1bnNpZ25lZCBwZXJjX2luc3RydWN0aW9uX2ZldGNoICA6IDE7CisJdW5zaWduZWQgcGVyY19zdG9yYWdlX2FsdGVyYXRpb24gOiAxOworCXVuc2lnbmVkIHBlcmNfZ3ByX2FsdF91bnVzZWQgICAgIDogMTsKKwl1bnNpZ25lZCBwZXJjX3N0b3JlX3JlYWxfYWRkcmVzcyA6IDE7CisJdW5zaWduZWQgICAgICAgICAgICAgICAgICAgICAgICAgOiAzOworCXVuc2lnbmVkIGF0bWlkX3Bzd19iaXRfMzEgICAgICAgIDogMTsKKwl1bnNpZ25lZCBhdG1pZF92YWxpZGl0eV9iaXQgICAgICA6IDE7CisJdW5zaWduZWQgYXRtaWRfcHN3X2JpdF8zMiAgICAgICAgOiAxOworCXVuc2lnbmVkIGF0bWlkX3Bzd19iaXRfNSAgICAgICAgIDogMTsKKwl1bnNpZ25lZCBhdG1pZF9wc3dfYml0XzE2ICAgICAgICA6IDE7CisJdW5zaWduZWQgYXRtaWRfcHN3X2JpdF8xNyAgICAgICAgOiAxOworCXVuc2lnbmVkIHNpICAgICAgICAgICAgICAgICAgICAgIDogMjsKKwl1bnNpZ25lZCBsb25nIGFkZHJlc3M7CisJdW5zaWduZWQgICAgICAgICAgICAgICAgICAgICAgICAgOiA0OworCXVuc2lnbmVkIGFjY2Vzc19pZCAgICAgICAgICAgICAgIDogNDsKK30gcGVyX2xvd2NvcmVfYml0czsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKwl1bmlvbiB7CisJCXBlcl9jcl93b3JkcyAgIHdvcmRzOworCQlwZXJfY3JfYml0cyAgICBiaXRzOworCX0gY29udHJvbF9yZWdzOworCS8qCisJICogVXNlIHRoZXNlIGZsYWdzIGluc3RlYWQgb2Ygc2V0dGluZyBlbV9pbnN0cnVjdGlvbl9mZXRjaAorCSAqIGRpcmVjdGx5IHRoZXkgYXJlIHVzZWQgc28gdGhhdCBzaW5nbGUgc3RlcHBpbmcgY2FuIGJlCisJICogc3dpdGNoZWQgb24gJiBvZmYgd2hpbGUgbm90IGFmZmVjdGluZyBvdGhlciB0cmFjaW5nCisJICovCisJdW5zaWduZWQgIHNpbmdsZV9zdGVwICAgICAgIDogMTsKKwl1bnNpZ25lZCAgaW5zdHJ1Y3Rpb25fZmV0Y2ggOiAxOworCXVuc2lnbmVkICAgICAgICAgICAgICAgICAgICA6IDMwOworCS8qCisJICogVGhlc2UgYWRkcmVzc2VzIGFyZSBjb3BpZWQgaW50byBjcjEwICYgY3IxMSBpZiBzaW5nbGUKKwkgKiBzdGVwcGluZyBpcyBzd2l0Y2hlZCBvZmYKKwkgKi8KKwl1bnNpZ25lZCBsb25nIHN0YXJ0aW5nX2FkZHI7CisJdW5zaWduZWQgbG9uZyBlbmRpbmdfYWRkcjsKKwl1bmlvbiB7CisJCXBlcl9sb3djb3JlX3dvcmRzIHdvcmRzOworCQlwZXJfbG93Y29yZV9iaXRzICBiaXRzOworCX0gbG93Y29yZTsgCit9IHBlcl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisJdW5zaWduZWQgaW50ICBsZW47CisJdW5zaWduZWQgbG9uZyBrZXJuZWxfYWRkcjsKKwl1bnNpZ25lZCBsb25nIHByb2Nlc3NfYWRkcjsKK30gcHRyYWNlX2FyZWE7CisKKy8qCisgKiBTLzM5MCBzcGVjaWZpYyBub24gcG9zaXggcHRyYWNlIHJlcXVlc3RzLiBJIGNob3NlIHVudXN1YWwgdmFsdWVzIHNvCisgKiB0aGV5IGFyZSB1bmxpa2VseSB0byBjbGFzaCB3aXRoIGZ1dHVyZSBwdHJhY2UgZGVmaW5pdGlvbnMuCisgKi8KKyNkZWZpbmUgUFRSQUNFX1BFRUtVU1JfQVJFQSAgICAgICAgICAgMHg1MDAwCisjZGVmaW5lIFBUUkFDRV9QT0tFVVNSX0FSRUEgICAgICAgICAgIDB4NTAwMQorI2RlZmluZSBQVFJBQ0VfUEVFS1RFWFRfQVJFQQkgICAgICAweDUwMDIKKyNkZWZpbmUgUFRSQUNFX1BFRUtEQVRBX0FSRUEJICAgICAgMHg1MDAzCisjZGVmaW5lIFBUUkFDRV9QT0tFVEVYVF9BUkVBCSAgICAgIDB4NTAwNAorI2RlZmluZSBQVFJBQ0VfUE9LRURBVEFfQVJFQSAJICAgICAgMHg1MDA1CisKKy8qCisgKiBQVF9QUk9UIGRlZmluaXRpb24gaXMgbG9vc2VseSBiYXNlZCBvbiBocHBhIGJzZCBkZWZpbml0aW9uIGluCisgKiBnZGIvaHBwYWItbmF0LmMKKyAqLworI2RlZmluZSBQVFJBQ0VfUFJPVCAgICAgICAgICAgICAgICAgICAgICAgMjEKKwordHlwZWRlZiBlbnVtCit7CisJcHRwcm90X3NldF9hY2Nlc3Nfd2F0Y2hwb2ludCwKKwlwdHByb3Rfc2V0X3dyaXRlX3dhdGNocG9pbnQsCisJcHRwcm90X2Rpc2FibGVfd2F0Y2hwb2ludAorfSBwdHByb3RfZmxhZ3M7CisKK3R5cGVkZWYgc3RydWN0Cit7CisJdW5zaWduZWQgbG9uZyBsb3dhZGRyOworCXVuc2lnbmVkIGxvbmcgaGlhZGRyOworCXB0cHJvdF9mbGFncyBwcm90OworfSBwdHByb3RfYXJlYTsgICAgICAgICAgICAgICAgICAgICAKKworLyogU2VxdWVuY2Ugb2YgYnl0ZXMgZm9yIGJyZWFrcG9pbnQgaWxsZWdhbCBpbnN0cnVjdGlvbi4gICovCisjZGVmaW5lIFMzOTBfQlJFQUtQT0lOVCAgICAgezB4MCwweDF9CisjZGVmaW5lIFMzOTBfQlJFQUtQT0lOVF9VMTYgKChfX3UxNikweDAwMDEpCisjZGVmaW5lIFMzOTBfU1lTQ0FMTF9PUENPREUgKChfX3UxNikweDBhMDApCisjZGVmaW5lIFMzOTBfU1lTQ0FMTF9TSVpFICAgMgorCisvKgorICogVGhlIHVzZXJfcmVnc19zdHJ1Y3QgZGVmaW5lcyB0aGUgd2F5IHRoZSB1c2VyIHJlZ2lzdGVycyBhcmUKKyAqIHN0b3JlIG9uIHRoZSBzdGFjayBmb3Igc2lnbmFsIGhhbmRsaW5nLgorICovCitzdHJ1Y3QgdXNlcl9yZWdzX3N0cnVjdAoreworCXBzd190IHBzdzsKKwl1bnNpZ25lZCBsb25nIGdwcnNbTlVNX0dQUlNdOworCXVuc2lnbmVkIGludCAgYWNyc1tOVU1fQUNSU107CisJdW5zaWduZWQgbG9uZyBvcmlnX2dwcjI7CisJczM5MF9mcF9yZWdzIGZwX3JlZ3M7CisJLyoKKwkgKiBUaGVzZSBwZXIgcmVnaXN0ZXJzIGFyZSBpbiBoZXJlIHNvIHRoYXQgZ2RiIGNhbiBtb2RpZnkgdGhlbQorCSAqIGl0c2VsZiBhcyB0aGVyZSBpcyBubyAib2ZmaWNpYWwiIHB0cmFjZSBpbnRlcmZhY2UgZm9yIGhhcmR3YXJlCisJICogd2F0Y2hwb2ludHMuIFRoaXMgaXMgdGhlIHdheSBpbnRlbCBkb2VzIGl0LgorCSAqLworCXBlcl9zdHJ1Y3QgcGVyX2luZm87CisJdW5zaWduZWQgbG9uZyBpZWVlX2luc3RydWN0aW9uX3BvaW50ZXI7IAorCS8qIFVzZWQgdG8gZ2l2ZSBmYWlsaW5nIGluc3RydWN0aW9uIGJhY2sgdG8gdXNlciBmb3IgaWVlZSBleGNlcHRpb25zICovCit9OworCisjaWZkZWYgX19LRVJORUxfXworI2RlZmluZSB1c2VyX21vZGUocmVncykgKCgocmVncyktPnBzdy5tYXNrICYgUFNXX01BU0tfUFNUQVRFKSAhPSAwKQorI2RlZmluZSBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpICgocmVncyktPnBzdy5hZGRyICYgUFNXX0FERFJfSU5TTikKKyNkZWZpbmUgcHJvZmlsZV9wYyhyZWdzKSBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpCitleHRlcm4gdm9pZCBzaG93X3JlZ3Moc3RydWN0IHB0X3JlZ3MgKiByZWdzKTsKKyNlbmRpZgorCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiBfUzM5MF9QVFJBQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9xZGlvLmggYi9pbmNsdWRlL2FzbS1zMzkwL3FkaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGRmMGE4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tczM5MC9xZGlvLmgKQEAgLTAsMCArMSw0MDEgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS9xZGlvLmgKKyAqCisgKiBMaW51eCBmb3IgUy8zOTAgUURJTyBiYXNlIHN1cHBvcnQsIEhpcGVyc29ja2V0IGJhc2Ugc3VwcG9ydAorICogdmVyc2lvbiAyCisgKgorICogQ29weXJpZ2h0IDIwMDAsMjAwMiBJQk0gQ29ycG9yYXRpb24KKyAqIEF1dGhvcihzKTogVXR6IEJhY2hlciA8dXR6LmJhY2hlckBkZS5pYm0uY29tPgorICoKKyAqLworI2lmbmRlZiBfX1FESU9fSF9fCisjZGVmaW5lIF9fUURJT19IX18KKworI2RlZmluZSBWRVJTSU9OX1FESU9fSCAiJFJldmlzaW9uOiAxLjU3ICQiCisKKy8qIG5vdGUsIHRoYXQgbW9zdCBvZiB0aGUgdHlwZWRlZidzIGFyZSBmcm9tIGluZ28uICovCisKKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxhc20vY2lvLmg+CisjaW5jbHVkZSA8YXNtL2Njd2Rldi5oPgorCisjZGVmaW5lIFFESU9fTkFNRSAicWRpbyAiCisKKyNpZm5kZWYgX19zMzkweF9fCisjZGVmaW5lIFFESU9fMzJfQklUCisjZW5kaWYgLyogX19zMzkweF9fICovCisKKy8qKioqIENPTlNUQU5UUywgdGhhdCBhcmUgcmVsaWVkIG9uIHdpdGhvdXQgdXNpbmcgdGhlc2Ugc3ltYm9scyAqKioqKi8KKyNkZWZpbmUgUURJT19NQVhfUVVFVUVTX1BFUl9JUlEgMzIgLyogdXNlZCBpbiB3aWR0aCBvZiB1bnNpZ25lZCBpbnQgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKiogRU5EIG9mIENPTlNUQU5UUyAqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgUURJT19NQVhfQlVGRkVSU19QRVJfUSAxMjggLyogbXVzdCBiZSBhIHBvd2VyIG9mIDIgKCV4PSYoeC0xKSovCisjZGVmaW5lIFFESU9fQlVGX09SREVSIDcgLyogMioqdGhpcyA9PSBudW1iZXIgb2YgcGFnZXMgdXNlZCBmb3Igc2JhbHMgaW4gMSBxICovCisjZGVmaW5lIFFESU9fTUFYX0VMRU1FTlRTX1BFUl9CVUZGRVIgMTYKKyNkZWZpbmUgU0JBTF9TSVpFIDI1NgorCisjZGVmaW5lIFFESU9fUUVUSF9RRk1UIDAKKyNkZWZpbmUgUURJT19aRkNQX1FGTVQgMQorI2RlZmluZSBRRElPX0lRRElPX1FGTVQgMgorCitzdHJ1Y3QgcWRpb19idWZmZXJfZWxlbWVudHsKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CisJdW5zaWduZWQgaW50IGxlbmd0aDsKKyNpZmRlZiBRRElPXzMyX0JJVAorCXZvaWQgKnJlc2VydmVkOworI2VuZGlmIC8qIFFESU9fMzJfQklUICovCisJdm9pZCAqYWRkcjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCxhbGlnbmVkKDE2KSkpOworCitzdHJ1Y3QgcWRpb19idWZmZXJ7CisJdm9sYXRpbGUgc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQgZWxlbWVudFsxNl07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQsYWxpZ25lZCgyNTYpKSk7CisKKworLyogcGFyYW1zIGFyZTogY2N3X2RldmljZSwgc3RhdHVzLCBxZGlvX2Vycm9yLCBzaWdhX2Vycm9yLAorICAgcXVldWVfbnVtYmVyLCBmaXJzdCBlbGVtZW50IHByb2Nlc3NlZCwgbnVtYmVyIG9mIGVsZW1lbnRzIHByb2Nlc3NlZCwKKyAgIGludF9wYXJtICovCit0eXBlZGVmIHZvaWQgcWRpb19oYW5kbGVyX3Qoc3RydWN0IGNjd19kZXZpY2UgKix1bnNpZ25lZCBpbnQsdW5zaWduZWQgaW50LAorCQkJICAgIHVuc2lnbmVkIGludCx1bnNpZ25lZCBpbnQsaW50LGludCx1bnNpZ25lZCBsb25nKTsKKworCisjZGVmaW5lIFFESU9fU1RBVFVTX0lOQk9VTkRfSU5UIDB4MDEKKyNkZWZpbmUgUURJT19TVEFUVVNfT1VUQk9VTkRfSU5UIDB4MDIKKyNkZWZpbmUgUURJT19TVEFUVVNfTE9PS19GT1JfRVJST1IgMHgwNAorI2RlZmluZSBRRElPX1NUQVRVU19NT1JFX1RIQU5fT05FX1FESU9fRVJST1IgMHgwOAorI2RlZmluZSBRRElPX1NUQVRVU19NT1JFX1RIQU5fT05FX1NJR0FfRVJST1IgMHgxMAorI2RlZmluZSBRRElPX1NUQVRVU19BQ1RJVkFURV9DSEVDS19DT05ESVRJT04gMHgyMAorCisjZGVmaW5lIFFESU9fU0lHQV9FUlJPUl9BQ0NFU1NfRVhDRVBUSU9OIDB4MTAKKyNkZWZpbmUgUURJT19TSUdBX0VSUk9SX0JfQklUX1NFVCAweDIwCisKKy8qIGZvciBxZGlvX2luaXRpYWxpemUgKi8KKyNkZWZpbmUgUURJT19JTkJPVU5EXzBDT1BZX1NCQUxTIDB4MDEKKyNkZWZpbmUgUURJT19PVVRCT1VORF8wQ09QWV9TQkFMUyAweDAyCisjZGVmaW5lIFFESU9fVVNFX09VVEJPVU5EX1BDSVMgMHgwNAorCisvKiBmb3IgcWRpb19jbGVhbnVwICovCisjZGVmaW5lIFFESU9fRkxBR19DTEVBTlVQX1VTSU5HX0NMRUFSIDB4MDEKKyNkZWZpbmUgUURJT19GTEFHX0NMRUFOVVBfVVNJTkdfSEFMVCAweDAyCisKK3N0cnVjdCBxZGlvX2luaXRpYWxpemUgeworCXN0cnVjdCBjY3dfZGV2aWNlICpjZGV2OworCXVuc2lnbmVkIGNoYXIgcV9mb3JtYXQ7CisJdW5zaWduZWQgY2hhciBhZGFwdGVyX25hbWVbOF07CisgICAgICAgCXVuc2lnbmVkIGludCBxaWJfcGFyYW1fZmllbGRfZm9ybWF0OyAvKmFkYXB0ZXIgZGVwZW5kZW50Ki8KKwkvKiBwb2ludGVyIHRvIDEyOCBieXRlcyBvciBOVUxMLCBpZiBubyBwYXJhbSBmaWVsZCAqLworCXVuc2lnbmVkIGNoYXIgKnFpYl9wYXJhbV9maWVsZDsgLyogYWRhcHRlciBkZXBlbmRlbnQgKi8KKwkvKiBwb2ludGVyIHRvIG5vX3F1ZXVlcyoxMjggd29yZHMgb2YgZGF0YSBvciBOVUxMICovCisJdW5zaWduZWQgbG9uZyAqaW5wdXRfc2xpYl9lbGVtZW50czsKKwl1bnNpZ25lZCBsb25nICpvdXRwdXRfc2xpYl9lbGVtZW50czsKKwl1bnNpZ25lZCBpbnQgbWluX2lucHV0X3RocmVzaG9sZDsKKwl1bnNpZ25lZCBpbnQgbWF4X2lucHV0X3RocmVzaG9sZDsKKwl1bnNpZ25lZCBpbnQgbWluX291dHB1dF90aHJlc2hvbGQ7CisJdW5zaWduZWQgaW50IG1heF9vdXRwdXRfdGhyZXNob2xkOworCXVuc2lnbmVkIGludCBub19pbnB1dF9xczsKKwl1bnNpZ25lZCBpbnQgbm9fb3V0cHV0X3FzOworCXFkaW9faGFuZGxlcl90ICppbnB1dF9oYW5kbGVyOworCXFkaW9faGFuZGxlcl90ICpvdXRwdXRfaGFuZGxlcjsKKwl1bnNpZ25lZCBsb25nIGludF9wYXJtOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdm9pZCAqKmlucHV0X3NiYWxfYWRkcl9hcnJheTsgLyogYWRkciBvZiBuKjEyOCB2b2lkIHB0cnMgKi8KKwl2b2lkICoqb3V0cHV0X3NiYWxfYWRkcl9hcnJheTsgLyogYWRkciBvZiBuKjEyOCB2b2lkIHB0cnMgKi8KK307CisKK2V4dGVybiBpbnQgcWRpb19pbml0aWFsaXplKHN0cnVjdCBxZGlvX2luaXRpYWxpemUgKmluaXRfZGF0YSk7CitleHRlcm4gaW50IHFkaW9fYWxsb2NhdGUoc3RydWN0IHFkaW9faW5pdGlhbGl6ZSAqaW5pdF9kYXRhKTsKK2V4dGVybiBpbnQgcWRpb19lc3RhYmxpc2goc3RydWN0IHFkaW9faW5pdGlhbGl6ZSAqaW5pdF9kYXRhKTsKKworZXh0ZXJuIGludCBxZGlvX2FjdGl2YXRlKHN0cnVjdCBjY3dfZGV2aWNlICosaW50IGZsYWdzKTsKKworI2RlZmluZSBRRElPX1NUQVRFX01VU1RfVVNFX09VVEJfUENJCTB4MDAwMDAwMDEKKyNkZWZpbmUgUURJT19TVEFURV9JTkFDVElWRSAJCTB4MDAwMDAwMDIgLyogYWZ0ZXIgcWRpb19jbGVhbnVwICovCisjZGVmaW5lIFFESU9fU1RBVEVfRVNUQUJMSVNIRUQgCQkweDAwMDAwMDA0IC8qIGFmdGVyIHFkaW9faW5pdGlhbGl6ZSAqLworI2RlZmluZSBRRElPX1NUQVRFX0FDVElWRSAJCTB4MDAwMDAwMDggLyogYWZ0ZXIgcWRpb19hY3RpdmF0ZSAqLworI2RlZmluZSBRRElPX1NUQVRFX1NUT1BQRUQgCQkweDAwMDAwMDEwIC8qIGFmdGVyIHF1ZXVlcyB3ZW50IGRvd24gKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIHFkaW9fZ2V0X3N0YXR1cyhpbnQgaXJxKTsKKworCisjZGVmaW5lIFFESU9fRkxBR19TWU5DX0lOUFVUICAgICAweDAxCisjZGVmaW5lIFFESU9fRkxBR19TWU5DX09VVFBVVCAgICAweDAyCisjZGVmaW5lIFFESU9fRkxBR19VTkRFUl9JTlRFUlJVUFQgMHgwNAorI2RlZmluZSBRRElPX0ZMQUdfTk9fSU5QVVRfSU5URVJSVVBUX0NPTlRFWFQgMHgwOCAvKiBubyBlZmZlY3Qgb24KKwkJCQkJCSAgICAgYWRhcHRlciBpbnRlcnJ1cHRzICovCisjZGVmaW5lIFFESU9fRkxBR19ET05UX1NJR0EgMHgxMAorCitleHRlcm4gaW50IGRvX1FESU8oc3RydWN0IGNjd19kZXZpY2UqLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIAorCQkgICB1bnNpZ25lZCBpbnQgcXVldWVfbnVtYmVyLAorCQkgICB1bnNpZ25lZCBpbnQgcWlkeCx1bnNpZ25lZCBpbnQgY291bnQsCisJCSAgIHN0cnVjdCBxZGlvX2J1ZmZlciAqYnVmZmVycyk7CisKK2V4dGVybiBpbnQgcWRpb19zeW5jaHJvbml6ZShzdHJ1Y3QgY2N3X2RldmljZSosIHVuc2lnbmVkIGludCBmbGFncywKKwkJCSAgICB1bnNpZ25lZCBpbnQgcXVldWVfbnVtYmVyKTsKKworZXh0ZXJuIGludCBxZGlvX2NsZWFudXAoc3RydWN0IGNjd19kZXZpY2UqLCBpbnQgaG93KTsKK2V4dGVybiBpbnQgcWRpb19zaHV0ZG93bihzdHJ1Y3QgY2N3X2RldmljZSosIGludCBob3cpOworZXh0ZXJuIGludCBxZGlvX2ZyZWUoc3RydWN0IGNjd19kZXZpY2UqKTsKKwordW5zaWduZWQgY2hhciBxZGlvX2dldF9zbHNiX3N0YXRlKHN0cnVjdCBjY3dfZGV2aWNlKiwgdW5zaWduZWQgaW50IGZsYWcsCisJCQkJICB1bnNpZ25lZCBpbnQgcXVldWVfbnVtYmVyLAorCQkJCSAgdW5zaWduZWQgaW50IHFpZHgpOworCitleHRlcm4gdm9pZCBxZGlvX2luaXRfc2NydWJiZXIodm9pZCk7CisKK3N0cnVjdCBxZGVzZm10MCB7CisjaWZkZWYgUURJT18zMl9CSVQKKwl1bnNpZ25lZCBsb25nIHJlczE7ICAgICAgICAgICAgIC8qIHJlc2VydmVkICovCisjZW5kaWYgLyogUURJT18zMl9CSVQgKi8KKwl1bnNpZ25lZCBsb25nIHNsaWJhOyAgICAgICAgICAgIC8qIHN0b3JhZ2UtbGlzdC1pbmZvcm1hdGlvbi1ibG9jaworCQkJCQkgICBhZGRyZXNzICovCisjaWZkZWYgUURJT18zMl9CSVQKKwl1bnNpZ25lZCBsb25nIHJlczI7ICAgICAgICAgICAgIC8qIHJlc2VydmVkICovCisjZW5kaWYgLyogUURJT18zMl9CSVQgKi8KKwl1bnNpZ25lZCBsb25nIHNsYTsgICAgICAgICAgICAgIC8qIHN0b3JhZ2UtbGlzdCBhZGRyZXNzICovCisjaWZkZWYgUURJT18zMl9CSVQKKwl1bnNpZ25lZCBsb25nIHJlczM7ICAgICAgICAgICAgIC8qIHJlc2VydmVkICovCisjZW5kaWYgLyogUURJT18zMl9CSVQgKi8KKwl1bnNpZ25lZCBsb25nIHNsc2JhOyAgICAgICAgICAgIC8qIHN0b3JhZ2UtbGlzdC1zdGF0ZS1ibG9jayBhZGRyZXNzICovCisJdW5zaWduZWQgaW50ICByZXM0OwkJLyogcmVzZXJ2ZWQgKi8KKwl1bnNpZ25lZCBpbnQgIGFrZXkgIDogIDQ7ICAgICAgIC8qIGFjY2VzcyBrZXkgZm9yIERMSUIgKi8KKwl1bnNpZ25lZCBpbnQgIGJrZXkgIDogIDQ7ICAgICAgIC8qIGFjY2VzcyBrZXkgZm9yIFNMICovCisJdW5zaWduZWQgaW50ICBja2V5ICA6ICA0OyAgICAgICAvKiBhY2Nlc3Mga2V5IGZvciBTQkFMcyAqLworCXVuc2lnbmVkIGludCAgZGtleSAgOiAgNDsgICAgICAgLyogYWNjZXNzIGtleSBmb3IgU0xTQiAqLworCXVuc2lnbmVkIGludCAgcmVzNSAgOiAxNjsgICAgICAgLyogcmVzZXJ2ZWQgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKgorICogUXVldWUtRGVzY3JpcHRpb24gcmVjb3JkIChRRFIpCisgKi8KK3N0cnVjdCBxZHIgeworCXVuc2lnbmVkIGludCAgcWZtdCAgICA6ICA4OyAgICAgLyogcXVldWUgZm9ybWF0ICovCisJdW5zaWduZWQgaW50ICBwZm10ICAgIDogIDg7ICAgICAvKiBpbXBsLiBkZXAuIHBhcmFtZXRlciBmb3JtYXQgKi8KKwl1bnNpZ25lZCBpbnQgIHJlczEgICAgOiAgODsgICAgIC8qIHJlc2VydmVkICovCisJdW5zaWduZWQgaW50ICBhYyAgICAgIDogIDg7ICAgICAvKiBhZGFwdGVyIGNoYXJhY3RlcmlzdGljcyAqLworCXVuc2lnbmVkIGludCAgcmVzMiAgICA6ICA4OyAgICAgLyogcmVzZXJ2ZWQgKi8KKwl1bnNpZ25lZCBpbnQgIGlxZGNudCAgOiAgODsgICAgIC8qIGlucHV0LXF1ZXVlLWRlc2NyaXB0b3IgY291bnQgKi8KKwl1bnNpZ25lZCBpbnQgIHJlczMgICAgOiAgODsgICAgIC8qIHJlc2VydmVkICovCisJdW5zaWduZWQgaW50ICBvcWRjbnQgIDogIDg7ICAgICAvKiBvdXRwdXQtcXVldWUtZGVzY3JpcHRvciBjb3VudCAqLworCXVuc2lnbmVkIGludCAgcmVzNCAgICA6ICA4OyAgICAgLyogcmVzZXJ2ZWQgKi8KKwl1bnNpZ25lZCBpbnQgIGlxZHN6ICAgOiAgODsgICAgIC8qIGlucHV0LXF1ZXVlLWRlc2NyaXB0b3Igc2l6ZSAqLworCXVuc2lnbmVkIGludCAgcmVzNSAgICA6ICA4OyAgICAgLyogcmVzZXJ2ZWQgKi8KKwl1bnNpZ25lZCBpbnQgIG9xZHN6ICAgOiAgODsgICAgIC8qIG91dHB1dC1xdWV1ZS1kZXNjcmlwdG9yIHNpemUgKi8KKwl1bnNpZ25lZCBpbnQgIHJlczZbOV07ICAgICAgICAgIC8qIHJlc2VydmVkICovCisjaWZkZWYgUURJT18zMl9CSVQKKwl1bnNpZ25lZCBsb25nIHJlczc7CQkvKiByZXNlcnZlZCAqLworI2VuZGlmIC8qIFFESU9fMzJfQklUICovCisJdW5zaWduZWQgbG9uZyBxaWJhOyAgICAgICAgICAgICAvKiBxdWV1ZS1pbmZvcm1hdGlvbi1ibG9jayBhZGRyZXNzICovCisJdW5zaWduZWQgaW50ICByZXM4OyAgICAgICAgICAgICAvKiByZXNlcnZlZCAqLworCXVuc2lnbmVkIGludCAgcWtleSAgICA6ICA0OyAgICAgLyogcXVldWUtaW5mb3JtYXRpby1ibG9jayBrZXkgKi8KKwl1bnNpZ25lZCBpbnQgIHJlczkgICAgOiAyODsgICAgIC8qIHJlc2VydmVkICovCisvKgl1bmlvbiBfcWQgeyovIC8qIHdoeSB0aGlzPyAqLworCQlzdHJ1Y3QgcWRlc2ZtdDAgcWRmMFsxMjZdOworLyoJfSBxZDsqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkLGFsaWduZWQoNDA5NikpKTsKKworCisvKgorICogcXVldWUgaW5mb3JtYXRpb24gYmxvY2sgKFFJQikKKyAqLworI2RlZmluZSBRSUJfQUNfSU5CT1VORF9QQ0lfU1VQUE9SVEVEIDB4ODAKKyNkZWZpbmUgUUlCX0FDX09VVEJPVU5EX1BDSV9TVVBQT1JURUQgMHg0MAorc3RydWN0IHFpYiB7CisJdW5zaWduZWQgaW50ICBxZm10ICAgIDogIDg7ICAgICAvKiBxdWV1ZSBmb3JtYXQgKi8KKwl1bnNpZ25lZCBpbnQgIHBmbXQgICAgOiAgODsgICAgIC8qIGltcGwuIGRlcC4gcGFyYW1ldGVyIGZvcm1hdCAqLworCXVuc2lnbmVkIGludCAgcmVzMSAgICA6ICA4OyAgICAgLyogcmVzZXJ2ZWQgKi8KKwl1bnNpZ25lZCBpbnQgIGFjICAgICAgOiAgODsgICAgIC8qIGFkYXB0ZXIgY2hhcmFjdGVyaXN0aWNzICovCisJdW5zaWduZWQgaW50ICByZXMyOyAgICAgICAgICAgICAvKiByZXNlcnZlZCAqLworI2lmZGVmIFFESU9fMzJfQklUCisJdW5zaWduZWQgbG9uZyByZXMzOyAgICAgICAgICAgICAvKiByZXNlcnZlZCAqLworI2VuZGlmIC8qIFFESU9fMzJfQklUICovCisJdW5zaWduZWQgbG9uZyBpc2xpYmE7ICAgICAgICAgICAvKiBhYnNvbHV0ZSBhZGRyZXNzIG9mIDFzdAorCQkJCQkgICBpbnB1dCBTTElCICovCisjaWZkZWYgUURJT18zMl9CSVQKKwl1bnNpZ25lZCBsb25nIHJlczQ7ICAgICAgICAgICAgIC8qIHJlc2VydmVkICovCisjZW5kaWYgLyogUURJT18zMl9CSVQgKi8KKwl1bnNpZ25lZCBsb25nIG9zbGliYTsgICAgICAgICAgIC8qIGFic29sdXRlIGFkZHJlc3Mgb2YgMXN0CisJCQkJCSAgIG91dHB1dCBTTElCICovCisJdW5zaWduZWQgaW50ICByZXM1OyAgICAgICAgICAgICAvKiByZXNlcnZlZCAqLworCXVuc2lnbmVkIGludCAgcmVzNjsgICAgICAgICAgICAgLyogcmVzZXJ2ZWQgKi8KKwl1bnNpZ25lZCBjaGFyIGViY25hbVs4XTsgICAgICAgIC8qIGFkYXB0ZXIgaWRlbnRpZmllciBpbiBFQkNESUMgKi8KKwl1bnNpZ25lZCBjaGFyIHJlczdbODhdOyAgICAgICAgIC8qIHJlc2VydmVkICovCisJdW5zaWduZWQgY2hhciBwYXJtW1FESU9fTUFYX0JVRkZFUlNfUEVSX1FdOworCQkJCQkvKiBpbXBsZW1lbnRhdGlvbiBkZXBlbmRlbnQKKwkJCQkJICAgcGFyYW1ldGVycyAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkLGFsaWduZWQoMjU2KSkpOworCisKKy8qCisgKiBzdG9yYWdlLWxpc3QtaW5mb3JtYXRpb24gYmxvY2sgZWxlbWVudCAoU0xJQkUpCisgKi8KK3N0cnVjdCBzbGliZSB7CisjaWZkZWYgUURJT18zMl9CSVQKKwl1bnNpZ25lZCBsb25nIHJlczsgICAgICAgICAgICAgIC8qIHJlc2VydmVkICovCisjZW5kaWYgLyogUURJT18zMl9CSVQgKi8KKwl1bnNpZ25lZCBsb25nIHBhcm1zOyAgICAgICAgICAgIC8qIGltcGxlbWVudGF0aW9uIGRlcGVuZGVudAorCQkJCQkgICBwYXJhbWV0ZXJzICovCit9OworCisvKgorICogc3RvcmFnZS1saXN0LWluZm9ybWF0aW9uIGJsb2NrIChTTElCKQorICovCitzdHJ1Y3Qgc2xpYiB7CisjaWZkZWYgUURJT18zMl9CSVQKKwl1bnNpZ25lZCBsb25nIHJlczE7ICAgICAgICAgICAgIC8qIHJlc2VydmVkICovCisjZW5kaWYgLyogUURJT18zMl9CSVQgKi8KKyAgICAgICAgdW5zaWduZWQgbG9uZyBuc2xpYmE7ICAgICAgICAgICAvKiBuZXh0IFNMSUIgYWRkcmVzcyAoaWYgYW55KSAqLworI2lmZGVmIFFESU9fMzJfQklUCisJdW5zaWduZWQgbG9uZyByZXMyOyAgICAgICAgICAgICAvKiByZXNlcnZlZCAqLworI2VuZGlmIC8qIFFESU9fMzJfQklUICovCisJdW5zaWduZWQgbG9uZyBzbGE7ICAgICAgICAgICAgICAvKiBTTCBhZGRyZXNzICovCisjaWZkZWYgUURJT18zMl9CSVQKKwl1bnNpZ25lZCBsb25nIHJlczM7ICAgICAgICAgICAgIC8qIHJlc2VydmVkICovCisjZW5kaWYgLyogUURJT18zMl9CSVQgKi8KKwl1bnNpZ25lZCBsb25nIHNsc2JhOyAgICAgICAgICAgIC8qIFNMU0IgYWRkcmVzcyAqLworCXVuc2lnbmVkIGNoYXIgcmVzNFsxMDAwXTsgICAgICAgLyogcmVzZXJ2ZWQgKi8KKwlzdHJ1Y3Qgc2xpYmUgc2xpYmVbUURJT19NQVhfQlVGRkVSU19QRVJfUV07ICAgIC8qIFNMSUIgZWxlbWVudHMgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCxhbGlnbmVkKDIwNDgpKSk7CisKK3N0cnVjdCBzYmFsX2ZsYWdzIHsKKwl1bnNpZ25lZCBjaGFyIHJlczEgIDogMTsgICAvKiByZXNlcnZlZCAqLworCXVuc2lnbmVkIGNoYXIgbGFzdCAgOiAxOyAgIC8qIGxhc3QgZW50cnkgKi8KKwl1bnNpZ25lZCBjaGFyIGNvbnQgIDogMTsgICAvKiBjb250aWd1b3VzIHN0b3JhZ2UgKi8KKwl1bnNpZ25lZCBjaGFyIHJlczIgIDogMTsgICAvKiByZXNlcnZlZCAqLworCXVuc2lnbmVkIGNoYXIgZnJhZyAgOiAyOyAgIC8qIGZyYWdtZW50YXRpb24gKHMuYmVsb3cpICovCisJdW5zaWduZWQgY2hhciByZXMzICA6IDI7ICAgLyogcmVzZXJ2ZWQgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZGVmaW5lIFNCQUxfRkxBR1NfRklSU1RfRlJBRwkgICAgIDB4MDQwMDAwMDBVTAorI2RlZmluZSBTQkFMX0ZMQUdTX01JRERMRV9GUkFHCSAgICAgMHgwODAwMDAwMFVMCisjZGVmaW5lIFNCQUxfRkxBR1NfTEFTVF9GUkFHCSAgICAgMHgwYzAwMDAwMFVMCisjZGVmaW5lIFNCQUxfRkxBR1NfTEFTVF9FTlRSWQkgICAgIDB4NDAwMDAwMDBVTAorI2RlZmluZSBTQkFMX0ZMQUdTX0NPTlRJR1VPVVMJICAgICAweDIwMDAwMDAwVUwKKworI2RlZmluZSBTQkFMX0ZMQUdTMF9EQVRBX0NPTlRJTlVBVElPTiAweDIwVUwKKworLyogQXdlc29tZSBPcGVuRkNQIGV4dGVuc2lvbnMgKi8KKyNkZWZpbmUgU0JBTF9GTEFHUzBfVFlQRV9TVEFUVVMgICAgICAgMHgwMFVMCisjZGVmaW5lIFNCQUxfRkxBR1MwX1RZUEVfV1JJVEUgICAgICAgIDB4MDhVTAorI2RlZmluZSBTQkFMX0ZMQUdTMF9UWVBFX1JFQUQgICAgICAgICAweDEwVUwKKyNkZWZpbmUgU0JBTF9GTEFHUzBfVFlQRV9XUklURV9SRUFEICAgMHgxOFVMCisjZGVmaW5lIFNCQUxfRkxBR1MwX01PUkVfU0JBTFMJICAgICAgMHgwNFVMCisjZGVmaW5lIFNCQUxfRkxBR1MwX0NPTU1BTkQgICAgICAgICAgIDB4MDJVTAorI2RlZmluZSBTQkFMX0ZMQUdTMF9MQVNUX1NCQUwgICAgICAgICAweDAwVUwKKyNkZWZpbmUgU0JBTF9GTEFHUzBfT05MWV9TQkFMICAgICAgICAgU0JBTF9GTEFHUzBfQ09NTUFORAorI2RlZmluZSBTQkFMX0ZMQUdTMF9NSURETEVfU0JBTCAgICAgICBTQkFMX0ZMQUdTMF9NT1JFX1NCQUxTCisjZGVmaW5lIFNCQUxfRkxBR1MwX0ZJUlNUX1NCQUwgICAgICAgIFNCQUxfRkxBR1MwX01PUkVfU0JBTFMgfCBTQkFMX0ZMQUdTMF9DT01NQU5ECisvKiBOYXVnaHQgb2YgaW50ZXJlc3QgYmV5b25kIHRoaXMgcG9pbnQgKi8KKworI2RlZmluZSBTQkFMX0ZMQUdTMF9QQ0kJCTB4NDAKK3N0cnVjdCBzYmFsX3NiYWxmXzAgeworCXVuc2lnbmVkIGNoYXIgcmVzMSAgOiAxOyAgIC8qIHJlc2VydmVkICovCisJdW5zaWduZWQgY2hhciBwY2kgICA6IDE7ICAgLyogUENJIGluZGljYXRvciAqLworCXVuc2lnbmVkIGNoYXIgY29udCAgOiAxOyAgIC8qIGRhdGEgY29udGludWF0aW9uICovCisJdW5zaWduZWQgY2hhciBzYnR5cGU6IDI7ICAgLyogc3RvcmFnZS1ibG9jayB0eXBlIChPcGVuRkNQKSAqLworCXVuc2lnbmVkIGNoYXIgcmVzMiAgOiAzOyAgIC8qIHJlc2VydmVkICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHNiYWxfc2JhbGZfMSB7CisJdW5zaWduZWQgY2hhciByZXMxICA6IDQ7ICAgLyogcmVzZXJ2ZWQgKi8KKwl1bnNpZ25lZCBjaGFyIGtleSAgIDogNDsgICAvKiBzdG9yYWdlIGtleSAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBzYmFsX3NiYWxmXzE0IHsKKwl1bnNpZ25lZCBjaGFyIHJlczEgICA6IDQ7ICAvKiByZXNlcnZlZCAqLworCXVuc2lnbmVkIGNoYXIgZXJyaWR4IDogNDsgIC8qIGVycm9yIGluZGV4ICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHNiYWxfc2JhbGZfMTUgeworCXVuc2lnbmVkIGNoYXIgcmVhc29uOyAgICAgIC8qIHJlc2VydmVkICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwordW5pb24gc2JhbF9zYmFsZiB7CisJc3RydWN0IHNiYWxfc2JhbGZfMCAgaTA7CisJc3RydWN0IHNiYWxfc2JhbGZfMSAgaTE7CisJc3RydWN0IHNiYWxfc2JhbGZfMTQgaTE0OworCXN0cnVjdCBzYmFsX3NiYWxmXzE1IGkxNTsKKwl1bnNpZ25lZCBjaGFyIHZhbHVlOworfTsKKworc3RydWN0IHNiYWxfZWxlbWVudCB7CisJdW5pb24geworCQlzdHJ1Y3Qgc2JhbF9mbGFncyAgYml0czsgICAgICAgLyogZmxhZ3MgKi8KKwkJdW5zaWduZWQgY2hhciB2YWx1ZTsKKwl9IGZsYWdzOworCXVuc2lnbmVkIGludCAgcmVzMSAgOiAxNjsgICAvKiByZXNlcnZlZCAqLworCXVuaW9uIHNiYWxfc2JhbGYgIHNiYWxmOyAgICAgICAvKiBTQkFMIGZsYWdzICovCisJdW5zaWduZWQgaW50ICByZXMyICA6IDE2OyAgLyogcmVzZXJ2ZWQgKi8KKwl1bnNpZ25lZCBpbnQgIGNvdW50IDogMTY7ICAvKiBkYXRhIGNvdW50ICovCisjaWZkZWYgUURJT18zMl9CSVQKKwl1bnNpZ25lZCBsb25nIHJlczM7ICAgICAgICAvKiByZXNlcnZlZCAqLworI2VuZGlmIC8qIFFESU9fMzJfQklUICovCisJdW5zaWduZWQgbG9uZyBhZGRyOyAgICAgICAgLyogYWJzb2x1dGUgZGF0YSBhZGRyZXNzICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQsYWxpZ25lZCgxNikpKTsKKworLyoKKyAqIHN0cm9yYWdlLWJsb2NrIGFjY2Vzcy1saXN0IChTQkFMKQorICovCitzdHJ1Y3Qgc2JhbCB7CisJc3RydWN0IHNiYWxfZWxlbWVudCBlbGVtZW50W1FESU9fTUFYX0VMRU1FTlRTX1BFUl9CVUZGRVJdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkLGFsaWduZWQoMjU2KSkpOworCisvKgorICogc3RvcmFnZS1saXN0IChTTCkKKyAqLworc3RydWN0IHNsX2VsZW1lbnQgeworI2lmZGVmIFFESU9fMzJfQklUCisgICAgICAgIHVuc2lnbmVkIGxvbmcgcmVzOyAgICAgLyogcmVzZXJ2ZWQgKi8KKyNlbmRpZiAvKiBRRElPXzMyX0JJVCAqLworICAgICAgICB1bnNpZ25lZCBsb25nIHNiYWw7ICAgIC8qIGFic29sdXRlIFNCQUwgYWRkcmVzcyAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBzbCB7CisJc3RydWN0IHNsX2VsZW1lbnQgZWxlbWVudFtRRElPX01BWF9CVUZGRVJTX1BFUl9RXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCxhbGlnbmVkKDEwMjQpKSk7CisKKy8qCisgKiBzdG9yYWdlLWxpc3Qtc3RhdGUgYmxvY2sgKFNMU0IpCisgKi8KK3N0cnVjdCBzbHNiX2ZsYWdzIHsKKwl1bnNpZ25lZCBjaGFyIG93bmVyICA6IDI7ICAgLyogU0JBTCBvd25lciAqLworCXVuc2lnbmVkIGNoYXIgdHlwZSAgIDogMTsgICAvKiBidWZmZXIgdHlwZSAqLworCXVuc2lnbmVkIGNoYXIgc3RhdGUgIDogNTsgICAvKiBwcm9jZXNzaW5nIHN0YXRlICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworCitzdHJ1Y3Qgc2xzYiB7CisJdW5pb24geworCQl1bnNpZ25lZCBjaGFyIHZhbFtRRElPX01BWF9CVUZGRVJTX1BFUl9RXTsKKwkJc3RydWN0IHNsc2JfZmxhZ3MgZmxhZ3NbUURJT19NQVhfQlVGRkVSU19QRVJfUV07CisJfSBhY2M7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQsYWxpZ25lZCgyNTYpKSk7CisKKy8qCisgKiBTTFNCIHZhbHVlcworICovCisjZGVmaW5lIFNMU0JfT1dORVJfUFJPRyAgICAgICAgICAgICAgMQorI2RlZmluZSBTTFNCX09XTkVSX0NVICAgICAgICAgICAgICAgIDIKKworI2RlZmluZSBTTFNCX1RZUEVfSU5QVVQgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU0xTQl9UWVBFX09VVFBVVCAgICAgICAgICAgICAxCisKKyNkZWZpbmUgU0xTQl9TVEFURV9OT1RfSU5JVCAgICAgICAgICAwCisjZGVmaW5lIFNMU0JfU1RBVEVfRU1QVFkgICAgICAgICAgICAgMQorI2RlZmluZSBTTFNCX1NUQVRFX1BSSU1FRCAgICAgICAgICAgIDIKKyNkZWZpbmUgU0xTQl9TVEFURV9IQUxURUQgICAgICAgICAgMHhlCisjZGVmaW5lIFNMU0JfU1RBVEVfRVJST1IgICAgICAgICAgIDB4ZgorCisjZGVmaW5lIFNMU0JfUF9JTlBVVF9OT1RfSU5JVCAgICAgMHg4MAorI2RlZmluZSBTTFNCX1BfSU5QVVRfUFJPQ0VTU0lORwkgIDB4ODEKKyNkZWZpbmUgU0xTQl9DVV9JTlBVVF9FTVBUWSAgICAgICAweDQxCisjZGVmaW5lIFNMU0JfUF9JTlBVVF9QUklNRUQgICAgICAgMHg4MgorI2RlZmluZSBTTFNCX1BfSU5QVVRfSEFMVEVEICAgICAgIDB4OEUKKyNkZWZpbmUgU0xTQl9QX0lOUFVUX0VSUk9SICAgICAgICAweDhGCisKKyNkZWZpbmUgU0xTQl9QX09VVFBVVF9OT1RfSU5JVCAgICAweEEwCisjZGVmaW5lIFNMU0JfUF9PVVRQVVRfRU1QVFkgICAgICAgMHhBMQorI2RlZmluZSBTTFNCX0NVX09VVFBVVF9QUklNRUQgICAgIDB4NjIKKyNkZWZpbmUgU0xTQl9QX09VVFBVVF9IQUxURUQgICAgICAweEFFCisjZGVmaW5lIFNMU0JfUF9PVVRQVVRfRVJST1IgICAgICAgMHhBRgorCisjZGVmaW5lIFNMU0JfRVJST1JfRFVSSU5HX0xPT0tVUCAgMHhGRgorCisjZW5kaWYgLyogX19RRElPX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9xZXRoLmggYi9pbmNsdWRlL2FzbS1zMzkwL3FldGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzBkMzc4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tczM5MC9xZXRoLmgKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLXMzOTAvcWV0aC5oCisgKgorICogaW9jdGwgZGVmaW5pdGlvbnMgZm9yIHFldGggZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IElCTSBDb3Jwb3JhdGlvbgorICoKKyAqIEF1dGhvcihzKToJVGhvbWFzIFNwYXR6aWVyIDx0c3BhdEBkZS5pYm0uY29tPgorICoKKyAqLworI2lmbmRlZiBfX0FTTV9TMzkwX1FFVEhfSU9DVExfSF9fCisjZGVmaW5lIF9fQVNNX1MzOTBfUUVUSF9JT0NUTF9IX18KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorCisjZGVmaW5lIFNJT0NfUUVUSF9BUlBfU0VUX05PX0VOVFJJRVMgICAgKFNJT0NERVZQUklWQVRFKQorI2RlZmluZSBTSU9DX1FFVEhfQVJQX1FVRVJZX0lORk8gICAgICAgIChTSU9DREVWUFJJVkFURSArIDEpCisjZGVmaW5lIFNJT0NfUUVUSF9BUlBfQUREX0VOVFJZICAgICAgICAgKFNJT0NERVZQUklWQVRFICsgMikKKyNkZWZpbmUgU0lPQ19RRVRIX0FSUF9SRU1PVkVfRU5UUlkgICAgICAoU0lPQ0RFVlBSSVZBVEUgKyAzKQorI2RlZmluZSBTSU9DX1FFVEhfQVJQX0ZMVVNIX0NBQ0hFICAgICAgIChTSU9DREVWUFJJVkFURSArIDQpCisjZGVmaW5lIFNJT0NfUUVUSF9BRFBfU0VUX1NOTVBfQ09OVFJPTCAgKFNJT0NERVZQUklWQVRFICsgNSkKKyNkZWZpbmUgU0lPQ19RRVRIX0dFVF9DQVJEX1RZUEUgICAgICAgICAoU0lPQ0RFVlBSSVZBVEUgKyA2KQorCitzdHJ1Y3QgcWV0aF9hcnBfY2FjaGVfZW50cnkgeworCV9fdTggIG1hY2FkZHJbNl07CisJX191OCAgcmVzZXJ2ZWQxWzJdOworCV9fdTggIGlwYWRkclsxNl07IC8qIGZvciBib3RoICBJUHY0IGFuZCBJUHY2ICovCisJX191OCAgcmVzZXJ2ZWQyWzMyXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgcWV0aF9hcnBfcWlfZW50cnk3IHsKKwlfX3U4IG1lZGlhX3NwZWNpZmljWzMyXTsKKwlfX3U4IG1hY2FkZHJfdHlwZTsKKwlfX3U4IGlwYWRkcl90eXBlOworCV9fdTggbWFjYWRkcls2XTsKKwlfX3U4IGlwYWRkcls0XTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBxZXRoX2FycF9xaV9lbnRyeTdfc2hvcnQgeworCV9fdTggbWFjYWRkcl90eXBlOworCV9fdTggaXBhZGRyX3R5cGU7CisJX191OCBtYWNhZGRyWzZdOworCV9fdTggaXBhZGRyWzRdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IHFldGhfYXJwX3FpX2VudHJ5NSB7CisJX191OCBtZWRpYV9zcGVjaWZpY1szMl07CisJX191OCBtYWNhZGRyX3R5cGU7CisJX191OCBpcGFkZHJfdHlwZTsKKwlfX3U4IGlwYWRkcls0XTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBxZXRoX2FycF9xaV9lbnRyeTVfc2hvcnQgeworCV9fdTggbWFjYWRkcl90eXBlOworCV9fdTggaXBhZGRyX3R5cGU7CisJX191OCBpcGFkZHJbNF07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKgorICogY2FuIGJlIHNldCBieSB1c2VyIGlmIG5vICJtZWRpYSBzcGVjaWZpYyBpbmZvcm1hdGlvbiIgaXMgd2FudGVkCisgKiAtPiBzYXZlcyBhIGxvdCBvZiBzcGFjZSBpbiB1c2VyIHNwYWNlIGJ1ZmZlcgorICovCisjZGVmaW5lIFFFVEhfUUFSUF9TVFJJUF9FTlRSSUVTICAweDgwMDAKKyNkZWZpbmUgUUVUSF9RQVJQX1JFUVVFU1RfTUFTSyAgIDB4MDBmZgorCisvKiBkYXRhIHNlbnQgdG8gdXNlciBzcGFjZSBhcyByZXN1bHQgb2YgcXVlcnkgYXJwIGlvY3RsICovCisjZGVmaW5lIFFFVEhfUUFSUF9VU0VSX0RBVEFfU0laRSAyMDAwMAorI2RlZmluZSBRRVRIX1FBUlBfTUFTS19PRkZTRVQgICAgNAorI2RlZmluZSBRRVRIX1FBUlBfRU5UUklFU19PRkZTRVQgNgorc3RydWN0IHFldGhfYXJwX3F1ZXJ5X3VzZXJfZGF0YSB7CisJdW5pb24geworCQlfX3UzMiBkYXRhX2xlbjsJCS8qIHNldCBieSB1c2VyIHNwYWNlIHByb2dyYW0gKi8KKwkJX191MzIgbm9fZW50cmllczsJLyogc2V0IGJ5IGtlcm5lbCAqLworCX0gdTsKKwlfX3UxNiBtYXNrX2JpdHM7CisJY2hhciAqZW50cmllczsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNlbmRpZiAvKiBfX0FTTV9TMzkwX1FFVEhfSU9DVExfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL3Jlc291cmNlLmggYi9pbmNsdWRlL2FzbS1zMzkwL3Jlc291cmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY2YzAxZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvcmVzb3VyY2UuaApAQCAtMCwwICsxLDE1IEBACisvKgorICogIGluY2x1ZGUvYXNtLXMzOTAvcmVzb3VyY2UuaAorICoKKyAqICBTMzkwIHZlcnNpb24KKyAqCisgKiAgRGVyaXZlZCBmcm9tICJpbmNsdWRlL2FzbS1pMzg2L3Jlc291cmNlcy5oIgorICovCisKKyNpZm5kZWYgX1MzOTBfUkVTT1VSQ0VfSAorI2RlZmluZSBfUzM5MF9SRVNPVVJDRV9ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9yZXNvdXJjZS5oPgorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9yd3NlbS5oIGIvaW5jbHVkZS9hc20tczM5MC9yd3NlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjMGNlYmIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL3J3c2VtLmgKQEAgLTAsMCArMSwzNTUgQEAKKyNpZm5kZWYgX1MzOTBfUldTRU1fSAorI2RlZmluZSBfUzM5MF9SV1NFTV9ICisKKy8qCisgKiAgaW5jbHVkZS9hc20tczM5MC9yd3NlbS5oCisgKgorICogIFMzOTAgdmVyc2lvbgorICogICAgQ29weXJpZ2h0IChDKSAyMDAyIElCTSBEZXV0c2NobGFuZCBFbnR3aWNrbHVuZyBHbWJILCBJQk0gQ29ycG9yYXRpb24KKyAqICAgIEF1dGhvcihzKTogTWFydGluIFNjaHdpZGVmc2t5IChzY2h3aWRlZnNreUBkZS5pYm0uY29tKQorICoKKyAqICBCYXNlZCBvbiBhc20tYWxwaGEvc2VtYXBob3JlLmggYW5kIGFzbS1pMzg2L3J3c2VtLmgKKyAqLworCisvKgorICoKKyAqIFRoZSBNU1cgb2YgdGhlIGNvdW50IGlzIHRoZSBuZWdhdGVkIG51bWJlciBvZiBhY3RpdmUgd3JpdGVycyBhbmQgd2FpdGluZworICogbG9ja2VycywgYW5kIHRoZSBMU1cgaXMgdGhlIHRvdGFsIG51bWJlciBvZiBhY3RpdmUgbG9ja3MKKyAqCisgKiBUaGUgbG9jayBjb3VudCBpcyBpbml0aWFsaXplZCB0byAwIChubyBhY3RpdmUgYW5kIG5vIHdhaXRpbmcgbG9ja2VycykuCisgKgorICogV2hlbiBhIHdyaXRlciBzdWJ0cmFjdHMgV1JJVEVfQklBUywgaXQnbGwgZ2V0IDB4ZmZmZjAwMDEgZm9yIHRoZSBjYXNlIG9mIGFuCisgKiB1bmNvbnRlbmRlZCBsb2NrLiBUaGlzIGNhbiBiZSBkZXRlcm1pbmVkIGJlY2F1c2UgWEFERCByZXR1cm5zIHRoZSBvbGQgdmFsdWUuCisgKiBSZWFkZXJzIGluY3JlbWVudCBieSAxIGFuZCBzZWUgYSBwb3NpdGl2ZSB2YWx1ZSB3aGVuIHVuY29udGVuZGVkLCBuZWdhdGl2ZQorICogaWYgdGhlcmUgYXJlIHdyaXRlcnMgKGFuZCBtYXliZSkgcmVhZGVycyB3YWl0aW5nIChpbiB3aGljaCBjYXNlIGl0IGdvZXMgdG8KKyAqIHNsZWVwKS4KKyAqCisgKiBUaGUgdmFsdWUgb2YgV0FJVElOR19CSUFTIHN1cHBvcnRzIHVwIHRvIDMyNzY2IHdhaXRpbmcgcHJvY2Vzc2VzLiBUaGlzIGNhbgorICogYmUgZXh0ZW5kZWQgdG8gNjU1MzQgYnkgbWFudWFsbHkgY2hlY2tpbmcgdGhlIHdob2xlIE1TVyByYXRoZXIgdGhhbiByZWx5aW5nCisgKiBvbiB0aGUgUyBmbGFnLgorICoKKyAqIFRoZSB2YWx1ZSBvZiBBQ1RJVkVfQklBUyBzdXBwb3J0cyB1cCB0byA2NTUzNSBhY3RpdmUgcHJvY2Vzc2VzLgorICoKKyAqIFRoaXMgc2hvdWxkIGJlIHRvdGFsbHkgZmFpciAtIGlmIGFueXRoaW5nIGlzIHdhaXRpbmcsIGEgcHJvY2VzcyB0aGF0IHdhbnRzIGEKKyAqIGxvY2sgd2lsbCBnbyB0byB0aGUgYmFjayBvZiB0aGUgcXVldWUuIFdoZW4gdGhlIGN1cnJlbnRseSBhY3RpdmUgbG9jayBpcworICogcmVsZWFzZWQsIGlmIHRoZXJlJ3MgYSB3cml0ZXIgYXQgdGhlIGZyb250IG9mIHRoZSBxdWV1ZSwgdGhlbiB0aGF0IGFuZCBvbmx5CisgKiB0aGF0IHdpbGwgYmUgd29rZW4gdXA7IGlmIHRoZXJlJ3MgYSBidW5jaCBvZiBjb25zZXF1dGl2ZSByZWFkZXJzIGF0IHRoZQorICogZnJvbnQsIHRoZW4gdGhleSdsbCBhbGwgYmUgd29rZW4gdXAsIGJ1dCBubyBvdGhlciByZWFkZXJzIHdpbGwgYmUuCisgKi8KKworI2lmbmRlZiBfTElOVVhfUldTRU1fSAorI2Vycm9yICJwbGVhc2UgZG9uJ3QgaW5jbHVkZSBhc20vcndzZW0uaCBkaXJlY3RseSwgdXNlIGxpbnV4L3J3c2VtLmggaW5zdGVhZCIKKyNlbmRpZgorCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisKK3N0cnVjdCByd3NlbV93YWl0ZXI7CisKK2V4dGVybiBzdHJ1Y3Qgcndfc2VtYXBob3JlICpyd3NlbV9kb3duX3JlYWRfZmFpbGVkKHN0cnVjdCByd19zZW1hcGhvcmUgKik7CitleHRlcm4gc3RydWN0IHJ3X3NlbWFwaG9yZSAqcndzZW1fZG93bl93cml0ZV9mYWlsZWQoc3RydWN0IHJ3X3NlbWFwaG9yZSAqKTsKK2V4dGVybiBzdHJ1Y3Qgcndfc2VtYXBob3JlICpyd3NlbV93YWtlKHN0cnVjdCByd19zZW1hcGhvcmUgKik7CitleHRlcm4gc3RydWN0IHJ3X3NlbWFwaG9yZSAqcndzZW1fZG93bmdyYWRlX3dha2Uoc3RydWN0IHJ3X3NlbWFwaG9yZSAqKTsKK2V4dGVybiBzdHJ1Y3Qgcndfc2VtYXBob3JlICpyd3NlbV9kb3duZ3JhZGVfd3JpdGUoc3RydWN0IHJ3X3NlbWFwaG9yZSAqKTsKKworLyoKKyAqIHRoZSBzZW1hcGhvcmUgZGVmaW5pdGlvbgorICovCitzdHJ1Y3Qgcndfc2VtYXBob3JlIHsKKwlzaWduZWQgbG9uZwkJY291bnQ7CisJc3BpbmxvY2tfdAkJd2FpdF9sb2NrOworCXN0cnVjdCBsaXN0X2hlYWQJd2FpdF9saXN0OworfTsKKworI2lmbmRlZiBfX3MzOTB4X18KKyNkZWZpbmUgUldTRU1fVU5MT0NLRURfVkFMVUUJMHgwMDAwMDAwMAorI2RlZmluZSBSV1NFTV9BQ1RJVkVfQklBUwkweDAwMDAwMDAxCisjZGVmaW5lIFJXU0VNX0FDVElWRV9NQVNLCTB4MDAwMGZmZmYKKyNkZWZpbmUgUldTRU1fV0FJVElOR19CSUFTCSgtMHgwMDAxMDAwMCkKKyNlbHNlIC8qIF9fczM5MHhfXyAqLworI2RlZmluZSBSV1NFTV9VTkxPQ0tFRF9WQUxVRQkweDAwMDAwMDAwMDAwMDAwMDBMCisjZGVmaW5lIFJXU0VNX0FDVElWRV9CSUFTCTB4MDAwMDAwMDAwMDAwMDAwMUwKKyNkZWZpbmUgUldTRU1fQUNUSVZFX01BU0sJMHgwMDAwMDAwMGZmZmZmZmZmTAorI2RlZmluZSBSV1NFTV9XQUlUSU5HX0JJQVMJKC0weDAwMDAwMDAxMDAwMDAwMDBMKQorI2VuZGlmIC8qIF9fczM5MHhfXyAqLworI2RlZmluZSBSV1NFTV9BQ1RJVkVfUkVBRF9CSUFTCVJXU0VNX0FDVElWRV9CSUFTCisjZGVmaW5lIFJXU0VNX0FDVElWRV9XUklURV9CSUFTCShSV1NFTV9XQUlUSU5HX0JJQVMgKyBSV1NFTV9BQ1RJVkVfQklBUykKKworLyoKKyAqIGluaXRpYWxpc2F0aW9uCisgKi8KKyNkZWZpbmUgX19SV1NFTV9JTklUSUFMSVpFUihuYW1lKSBcCit7IFJXU0VNX1VOTE9DS0VEX1ZBTFVFLCBTUElOX0xPQ0tfVU5MT0NLRUQsIExJU1RfSEVBRF9JTklUKChuYW1lKS53YWl0X2xpc3QpIH0KKworI2RlZmluZSBERUNMQVJFX1JXU0VNKG5hbWUpIFwKKwlzdHJ1Y3Qgcndfc2VtYXBob3JlIG5hbWUgPSBfX1JXU0VNX0lOSVRJQUxJWkVSKG5hbWUpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3J3c2VtKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKK3sKKwlzZW0tPmNvdW50ID0gUldTRU1fVU5MT0NLRURfVkFMVUU7CisJc3Bpbl9sb2NrX2luaXQoJnNlbS0+d2FpdF9sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmc2VtLT53YWl0X2xpc3QpOworfQorCisvKgorICogbG9jayBmb3IgcmVhZGluZworICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19kb3duX3JlYWQoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQoreworCXNpZ25lZCBsb25nIG9sZCwgbmV3OworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisjaWZuZGVmIF9fczM5MHhfXworCQkiICAgbCAgICAlMCwwKCUzKVxuIgorCQkiMDogbHIgICAlMSwlMFxuIgorCQkiICAgYWhpICAlMSwlNVxuIgorCQkiICAgY3MgICAlMCwlMSwwKCUzKVxuIgorCQkiICAgamwgICAwYiIKKyNlbHNlIC8qIF9fczM5MHhfXyAqLworCQkiICAgbGcgICAlMCwwKCUzKVxuIgorCQkiMDogbGdyICAlMSwlMFxuIgorCQkiICAgYWdoaSAlMSwlNVxuIgorCQkiICAgY3NnICAlMCwlMSwwKCUzKVxuIgorCQkiICAgamwgICAwYiIKKyNlbmRpZiAvKiBfX3MzOTB4X18gKi8KKyAgICAgICAgICAgICAgICA6ICI9JmQiIChvbGQpLCAiPSZkIiAobmV3KSwgIj1tIiAoc2VtLT5jb3VudCkKKwkJOiAiYSIgKCZzZW0tPmNvdW50KSwgIm0iIChzZW0tPmNvdW50KSwKKwkJICAiaSIgKFJXU0VNX0FDVElWRV9SRUFEX0JJQVMpIDogImNjIiwgIm1lbW9yeSIgKTsKKwlpZiAob2xkIDwgMCkKKwkJcndzZW1fZG93bl9yZWFkX2ZhaWxlZChzZW0pOworfQorCisvKgorICogdHJ5bG9jayBmb3IgcmVhZGluZyAtLSByZXR1cm5zIDEgaWYgc3VjY2Vzc2Z1bCwgMCBpZiBjb250ZW50aW9uCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IF9fZG93bl9yZWFkX3RyeWxvY2soc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQoreworCXNpZ25lZCBsb25nIG9sZCwgbmV3OworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisjaWZuZGVmIF9fczM5MHhfXworCQkiICAgbCAgICAlMCwwKCUzKVxuIgorCQkiMDogbHRyICAlMSwlMFxuIgorCQkiICAgam0gICAxZlxuIgorCQkiICAgYWhpICAlMSwlNVxuIgorCQkiICAgY3MgICAlMCwlMSwwKCUzKVxuIgorCQkiICAgamwgICAwYlxuIgorCQkiMToiCisjZWxzZSAvKiBfX3MzOTB4X18gKi8KKwkJIiAgIGxnICAgJTAsMCglMylcbiIKKwkJIjA6IGx0Z3IgJTEsJTBcbiIKKwkJIiAgIGptICAgMWZcbiIKKwkJIiAgIGFnaGkgJTEsJTVcbiIKKwkJIiAgIGNzZyAgJTAsJTEsMCglMylcbiIKKwkJIiAgIGpsICAgMGJcbiIKKwkJIjE6IgorI2VuZGlmIC8qIF9fczM5MHhfXyAqLworICAgICAgICAgICAgICAgIDogIj0mZCIgKG9sZCksICI9JmQiIChuZXcpLCAiPW0iIChzZW0tPmNvdW50KQorCQk6ICJhIiAoJnNlbS0+Y291bnQpLCAibSIgKHNlbS0+Y291bnQpLAorCQkgICJpIiAoUldTRU1fQUNUSVZFX1JFQURfQklBUykgOiAiY2MiLCAibWVtb3J5IiApOworCXJldHVybiBvbGQgPj0gMCA/IDEgOiAwOworfQorCisvKgorICogbG9jayBmb3Igd3JpdGluZworICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19kb3duX3dyaXRlKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKK3sKKwlzaWduZWQgbG9uZyBvbGQsIG5ldywgdG1wOworCisJdG1wID0gUldTRU1fQUNUSVZFX1dSSVRFX0JJQVM7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisjaWZuZGVmIF9fczM5MHhfXworCQkiICAgbCAgICAlMCwwKCUzKVxuIgorCQkiMDogbHIgICAlMSwlMFxuIgorCQkiICAgYSAgICAlMSwlNVxuIgorCQkiICAgY3MgICAlMCwlMSwwKCUzKVxuIgorCQkiICAgamwgICAwYiIKKyNlbHNlIC8qIF9fczM5MHhfXyAqLworCQkiICAgbGcgICAlMCwwKCUzKVxuIgorCQkiMDogbGdyICAlMSwlMFxuIgorCQkiICAgYWcgICAlMSwlNVxuIgorCQkiICAgY3NnICAlMCwlMSwwKCUzKVxuIgorCQkiICAgamwgICAwYiIKKyNlbmRpZiAvKiBfX3MzOTB4X18gKi8KKyAgICAgICAgICAgICAgICA6ICI9JmQiIChvbGQpLCAiPSZkIiAobmV3KSwgIj1tIiAoc2VtLT5jb3VudCkKKwkJOiAiYSIgKCZzZW0tPmNvdW50KSwgIm0iIChzZW0tPmNvdW50KSwgIm0iICh0bXApCisJCTogImNjIiwgIm1lbW9yeSIgKTsKKwlpZiAob2xkICE9IDApCisJCXJ3c2VtX2Rvd25fd3JpdGVfZmFpbGVkKHNlbSk7Cit9CisKKy8qCisgKiB0cnlsb2NrIGZvciB3cml0aW5nIC0tIHJldHVybnMgMSBpZiBzdWNjZXNzZnVsLCAwIGlmIGNvbnRlbnRpb24KKyAqLworc3RhdGljIGlubGluZSBpbnQgX19kb3duX3dyaXRlX3RyeWxvY2soc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQoreworCXNpZ25lZCBsb25nIG9sZDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorI2lmbmRlZiBfX3MzOTB4X18KKwkJIiAgIGwgICAgJTAsMCglMilcbiIKKwkJIjA6IGx0ciAgJTAsJTBcbiIKKwkJIiAgIGpueiAgMWZcbiIKKwkJIiAgIGNzICAgJTAsJTQsMCglMilcbiIKKwkJIiAgIGpsICAgMGJcbiIKKyNlbHNlIC8qIF9fczM5MHhfXyAqLworCQkiICAgbGcgICAlMCwwKCUyKVxuIgorCQkiMDogbHRnciAlMCwlMFxuIgorCQkiICAgam56ICAxZlxuIgorCQkiICAgY3NnICAlMCwlNCwwKCUyKVxuIgorCQkiICAgamwgICAwYlxuIgorI2VuZGlmIC8qIF9fczM5MHhfXyAqLworCQkiMToiCisgICAgICAgICAgICAgICAgOiAiPSZkIiAob2xkKSwgIj1tIiAoc2VtLT5jb3VudCkKKwkJOiAiYSIgKCZzZW0tPmNvdW50KSwgIm0iIChzZW0tPmNvdW50KSwKKwkJICAiZCIgKFJXU0VNX0FDVElWRV9XUklURV9CSUFTKSA6ICJjYyIsICJtZW1vcnkiICk7CisJcmV0dXJuIChvbGQgPT0gUldTRU1fVU5MT0NLRURfVkFMVUUpID8gMSA6IDA7Cit9CisKKy8qCisgKiB1bmxvY2sgYWZ0ZXIgcmVhZGluZworICovCitzdGF0aWMgaW5saW5lIHZvaWQgX191cF9yZWFkKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKK3sKKwlzaWduZWQgbG9uZyBvbGQsIG5ldzsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorI2lmbmRlZiBfX3MzOTB4X18KKwkJIiAgIGwgICAgJTAsMCglMylcbiIKKwkJIjA6IGxyICAgJTEsJTBcbiIKKwkJIiAgIGFoaSAgJTEsJTVcbiIKKwkJIiAgIGNzICAgJTAsJTEsMCglMylcbiIKKwkJIiAgIGpsICAgMGIiCisjZWxzZSAvKiBfX3MzOTB4X18gKi8KKwkJIiAgIGxnICAgJTAsMCglMylcbiIKKwkJIjA6IGxnciAgJTEsJTBcbiIKKwkJIiAgIGFnaGkgJTEsJTVcbiIKKwkJIiAgIGNzZyAgJTAsJTEsMCglMylcbiIKKwkJIiAgIGpsICAgMGIiCisjZW5kaWYgLyogX19zMzkweF9fICovCisgICAgICAgICAgICAgICAgOiAiPSZkIiAob2xkKSwgIj0mZCIgKG5ldyksICI9bSIgKHNlbS0+Y291bnQpCisJCTogImEiICgmc2VtLT5jb3VudCksICJtIiAoc2VtLT5jb3VudCksCisJCSAgImkiICgtUldTRU1fQUNUSVZFX1JFQURfQklBUykKKwkJOiAiY2MiLCAibWVtb3J5IiApOworCWlmIChuZXcgPCAwKQorCQlpZiAoKG5ldyAmIFJXU0VNX0FDVElWRV9NQVNLKSA9PSAwKQorCQkJcndzZW1fd2FrZShzZW0pOworfQorCisvKgorICogdW5sb2NrIGFmdGVyIHdyaXRpbmcKKyAqLworc3RhdGljIGlubGluZSB2b2lkIF9fdXBfd3JpdGUoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQoreworCXNpZ25lZCBsb25nIG9sZCwgbmV3LCB0bXA7CisKKwl0bXAgPSAtUldTRU1fQUNUSVZFX1dSSVRFX0JJQVM7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisjaWZuZGVmIF9fczM5MHhfXworCQkiICAgbCAgICAlMCwwKCUzKVxuIgorCQkiMDogbHIgICAlMSwlMFxuIgorCQkiICAgYSAgICAlMSwlNVxuIgorCQkiICAgY3MgICAlMCwlMSwwKCUzKVxuIgorCQkiICAgamwgICAwYiIKKyNlbHNlIC8qIF9fczM5MHhfXyAqLworCQkiICAgbGcgICAlMCwwKCUzKVxuIgorCQkiMDogbGdyICAlMSwlMFxuIgorCQkiICAgYWcgICAlMSwlNVxuIgorCQkiICAgY3NnICAlMCwlMSwwKCUzKVxuIgorCQkiICAgamwgICAwYiIKKyNlbmRpZiAvKiBfX3MzOTB4X18gKi8KKyAgICAgICAgICAgICAgICA6ICI9JmQiIChvbGQpLCAiPSZkIiAobmV3KSwgIj1tIiAoc2VtLT5jb3VudCkKKwkJOiAiYSIgKCZzZW0tPmNvdW50KSwgIm0iIChzZW0tPmNvdW50KSwgIm0iICh0bXApCisJCTogImNjIiwgIm1lbW9yeSIgKTsKKwlpZiAobmV3IDwgMCkKKwkJaWYgKChuZXcgJiBSV1NFTV9BQ1RJVkVfTUFTSykgPT0gMCkKKwkJCXJ3c2VtX3dha2Uoc2VtKTsKK30KKworLyoKKyAqIGRvd25ncmFkZSB3cml0ZSBsb2NrIHRvIHJlYWQgbG9jaworICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19kb3duZ3JhZGVfd3JpdGUoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQoreworCXNpZ25lZCBsb25nIG9sZCwgbmV3LCB0bXA7CisKKwl0bXAgPSAtUldTRU1fV0FJVElOR19CSUFTOworCV9fYXNtX18gX192b2xhdGlsZV9fKAorI2lmbmRlZiBfX3MzOTB4X18KKwkJIiAgIGwgICAgJTAsMCglMylcbiIKKwkJIjA6IGxyICAgJTEsJTBcbiIKKwkJIiAgIGEgICAgJTEsJTVcbiIKKwkJIiAgIGNzICAgJTAsJTEsMCglMylcbiIKKwkJIiAgIGpsICAgMGIiCisjZWxzZSAvKiBfX3MzOTB4X18gKi8KKwkJIiAgIGxnICAgJTAsMCglMylcbiIKKwkJIjA6IGxnciAgJTEsJTBcbiIKKwkJIiAgIGFnICAgJTEsJTVcbiIKKwkJIiAgIGNzZyAgJTAsJTEsMCglMylcbiIKKwkJIiAgIGpsICAgMGIiCisjZW5kaWYgLyogX19zMzkweF9fICovCisgICAgICAgICAgICAgICAgOiAiPSZkIiAob2xkKSwgIj0mZCIgKG5ldyksICI9bSIgKHNlbS0+Y291bnQpCisJCTogImEiICgmc2VtLT5jb3VudCksICJtIiAoc2VtLT5jb3VudCksICJtIiAodG1wKQorCQk6ICJjYyIsICJtZW1vcnkiICk7CisJaWYgKG5ldyA+IDEpCisJCXJ3c2VtX2Rvd25ncmFkZV93YWtlKHNlbSk7Cit9CisKKy8qCisgKiBpbXBsZW1lbnQgYXRvbWljIGFkZCBmdW5jdGlvbmFsaXR5CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCByd3NlbV9hdG9taWNfYWRkKGxvbmcgZGVsdGEsIHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKK3sKKwlzaWduZWQgbG9uZyBvbGQsIG5ldzsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorI2lmbmRlZiBfX3MzOTB4X18KKwkJIiAgIGwgICAgJTAsMCglMylcbiIKKwkJIjA6IGxyICAgJTEsJTBcbiIKKwkJIiAgIGFyICAgJTEsJTVcbiIKKwkJIiAgIGNzICAgJTAsJTEsMCglMylcbiIKKwkJIiAgIGpsICAgMGIiCisjZWxzZSAvKiBfX3MzOTB4X18gKi8KKwkJIiAgIGxnICAgJTAsMCglMylcbiIKKwkJIjA6IGxnciAgJTEsJTBcbiIKKwkJIiAgIGFnciAgJTEsJTVcbiIKKwkJIiAgIGNzZyAgJTAsJTEsMCglMylcbiIKKwkJIiAgIGpsICAgMGIiCisjZW5kaWYgLyogX19zMzkweF9fICovCisgICAgICAgICAgICAgICAgOiAiPSZkIiAob2xkKSwgIj0mZCIgKG5ldyksICI9bSIgKHNlbS0+Y291bnQpCisJCTogImEiICgmc2VtLT5jb3VudCksICJtIiAoc2VtLT5jb3VudCksICJkIiAoZGVsdGEpCisJCTogImNjIiwgIm1lbW9yeSIgKTsKK30KKworLyoKKyAqIGltcGxlbWVudCBleGNoYW5nZSBhbmQgYWRkIGZ1bmN0aW9uYWxpdHkKKyAqLworc3RhdGljIGlubGluZSBsb25nIHJ3c2VtX2F0b21pY191cGRhdGUobG9uZyBkZWx0YSwgc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQoreworCXNpZ25lZCBsb25nIG9sZCwgbmV3OworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisjaWZuZGVmIF9fczM5MHhfXworCQkiICAgbCAgICAlMCwwKCUzKVxuIgorCQkiMDogbHIgICAlMSwlMFxuIgorCQkiICAgYXIgICAlMSwlNVxuIgorCQkiICAgY3MgICAlMCwlMSwwKCUzKVxuIgorCQkiICAgamwgICAwYiIKKyNlbHNlIC8qIF9fczM5MHhfXyAqLworCQkiICAgbGcgICAlMCwwKCUzKVxuIgorCQkiMDogbGdyICAlMSwlMFxuIgorCQkiICAgYWdyICAlMSwlNVxuIgorCQkiICAgY3NnICAlMCwlMSwwKCUzKVxuIgorCQkiICAgamwgICAwYiIKKyNlbmRpZiAvKiBfX3MzOTB4X18gKi8KKyAgICAgICAgICAgICAgICA6ICI9JmQiIChvbGQpLCAiPSZkIiAobmV3KSwgIj1tIiAoc2VtLT5jb3VudCkKKwkJOiAiYSIgKCZzZW0tPmNvdW50KSwgIm0iIChzZW0tPmNvdW50KSwgImQiIChkZWx0YSkKKwkJOiAiY2MiLCAibWVtb3J5IiApOworCXJldHVybiBuZXc7Cit9CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYgLyogX1MzOTBfUldTRU1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9zMzkwX2V4dC5oIGIvaW5jbHVkZS9hc20tczM5MC9zMzkwX2V4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5YTI4NjIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL3MzOTBfZXh0LmgKQEAgLTAsMCArMSwzNCBAQAorI2lmbmRlZiBfUzM5MF9FWFRJTlRfSAorI2RlZmluZSBfUzM5MF9FWFRJTlRfSAorCisvKgorICogIGluY2x1ZGUvYXNtLXMzOTAvczM5MF9leHQuaAorICoKKyAqICBTMzkwIHZlcnNpb24KKyAqICAgIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIElCTSBEZXV0c2NobGFuZCBFbnR3aWNrbHVuZyBHbWJILCBJQk0gQ29ycG9yYXRpb24KKyAqICAgIEF1dGhvcihzKTogSG9sZ2VyIFNtb2xpbnNraSAoSG9sZ2VyLlNtb2xpbnNraUBkZS5pYm0uY29tKSwKKyAqICAgICAgICAgICAgICAgTWFydGluIFNjaHdpZGVmc2t5IChzY2h3aWRlZnNreUBkZS5pYm0uY29tKQorICovCisKK3R5cGVkZWYgdm9pZCAoKmV4dF9pbnRfaGFuZGxlcl90KShzdHJ1Y3QgcHRfcmVncyAqcmVncywgX191MTYgY29kZSk7CisKKy8qCisgKiBXYXJuaW5nOiBpZiB5b3UgY2hhbmdlIGV4dF9pbnRfaW5mb190IHlvdSBoYXZlIHRvIGNoYW5nZSB0aGUKKyAqIGV4dGVybmFsIGludGVycnVwdCBoYW5kbGVyIGluIGVudHJ5LlMgdG9vLgorICovIAordHlwZWRlZiBzdHJ1Y3QgZXh0X2ludF9pbmZvX3QgeworCXN0cnVjdCBleHRfaW50X2luZm9fdCAqbmV4dDsKKwlleHRfaW50X2hhbmRsZXJfdCBoYW5kbGVyOworCV9fdTE2IGNvZGU7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBleHRfaW50X2luZm9fdDsKKworZXh0ZXJuIGV4dF9pbnRfaW5mb190ICpleHRfaW50X2hhc2hbXTsKKworaW50IHJlZ2lzdGVyX2V4dGVybmFsX2ludGVycnVwdChfX3UxNiBjb2RlLCBleHRfaW50X2hhbmRsZXJfdCBoYW5kbGVyKTsKK2ludCByZWdpc3Rlcl9lYXJseV9leHRlcm5hbF9pbnRlcnJ1cHQoX191MTYgY29kZSwgZXh0X2ludF9oYW5kbGVyX3QgaGFuZGxlciwKKwkJCQkgICAgICBleHRfaW50X2luZm9fdCAqaW5mbyk7CitpbnQgdW5yZWdpc3Rlcl9leHRlcm5hbF9pbnRlcnJ1cHQoX191MTYgY29kZSwgZXh0X2ludF9oYW5kbGVyX3QgaGFuZGxlcik7CitpbnQgdW5yZWdpc3Rlcl9lYXJseV9leHRlcm5hbF9pbnRlcnJ1cHQoX191MTYgY29kZSwgZXh0X2ludF9oYW5kbGVyX3QgaGFuZGxlciwKKwkJCQkJZXh0X2ludF9pbmZvX3QgKmluZm8pOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvc2NhdHRlcmxpc3QuaCBiL2luY2x1ZGUvYXNtLXMzOTAvc2NhdHRlcmxpc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDNiM2FmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tczM5MC9zY2F0dGVybGlzdC5oCkBAIC0wLDAgKzEsMTYgQEAKKyNpZm5kZWYgX0FTTVMzOTBfU0NBVFRFUkxJU1RfSAorI2RlZmluZSBfQVNNUzM5MF9TQ0FUVEVSTElTVF9ICisKK3N0cnVjdCBzY2F0dGVybGlzdCB7CisgICAgc3RydWN0IHBhZ2UgKnBhZ2U7CisgICAgdW5zaWduZWQgaW50IG9mZnNldDsKKyAgICB1bnNpZ25lZCBpbnQgbGVuZ3RoOworfTsKKworI2lmZGVmIF9fczM5MHhfXworI2RlZmluZSBJU0FfRE1BX1RIUkVTSE9MRCAoMHhmZmZmZmZmZmZmZmZmZmZmVUwpCisjZWxzZQorI2RlZmluZSBJU0FfRE1BX1RIUkVTSE9MRCAoMHhmZmZmZmZmZlVMKQorI2VuZGlmCisKKyNlbmRpZiAvKiBfQVNNUzM5MFhfU0NBVFRFUkxJU1RfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9zZWN0aW9ucy5oIGIvaW5jbHVkZS9hc20tczM5MC9zZWN0aW9ucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhMGI4ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL3NlY3Rpb25zLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9TMzkwX1NFQ1RJT05TX0gKKyNkZWZpbmUgX1MzOTBfU0VDVElPTlNfSAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2VjdGlvbnMuaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL3NlZ21lbnQuaCBiL2luY2x1ZGUvYXNtLXMzOTAvc2VnbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiZmNlMzQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL3NlZ21lbnQuaApAQCAtMCwwICsxLDQgQEAKKyNpZm5kZWYgX0FTTV9TRUdNRU5UX0gKKyNkZWZpbmUgX0FTTV9TRUdNRU5UX0gKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL3NlbWFwaG9yZS5oIGIvaW5jbHVkZS9hc20tczM5MC9zZW1hcGhvcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzNkZWY2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tczM5MC9zZW1hcGhvcmUuaApAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqICBpbmNsdWRlL2FzbS1zMzkwL3NlbWFwaG9yZS5oCisgKgorICogIFMzOTAgdmVyc2lvbgorICogICAgQ29weXJpZ2h0IChDKSAxOTk5IElCTSBEZXV0c2NobGFuZCBFbnR3aWNrbHVuZyBHbWJILCBJQk0gQ29ycG9yYXRpb24KKyAqCisgKiAgRGVyaXZlZCBmcm9tICJpbmNsdWRlL2FzbS1pMzg2L3NlbWFwaG9yZS5oIgorICogICAgKEMpIENvcHlyaWdodCAxOTk2IExpbnVzIFRvcnZhbGRzCisgKi8KKworI2lmbmRlZiBfUzM5MF9TRU1BUEhPUkVfSAorI2RlZmluZSBfUzM5MF9TRU1BUEhPUkVfSAorCisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KKworc3RydWN0IHNlbWFwaG9yZSB7CisJLyoKKwkgKiBOb3RlIHRoYXQgYW55IG5lZ2F0aXZlIHZhbHVlIG9mIGNvdW50IGlzIGVxdWl2YWxlbnQgdG8gMCwKKwkgKiBidXQgYWRkaXRpb25hbGx5IGluZGljYXRlcyB0aGF0IHNvbWUgcHJvY2VzcyhlcykgbWlnaHQgYmUKKwkgKiBzbGVlcGluZyBvbiBgd2FpdCcuCisJICovCisJYXRvbWljX3QgY291bnQ7CisJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKK307CisKKyNkZWZpbmUgX19TRU1BUEhPUkVfSU5JVElBTElaRVIobmFtZSxjb3VudCkgXAorCXsgQVRPTUlDX0lOSVQoY291bnQpLCBfX1dBSVRfUVVFVUVfSEVBRF9JTklUSUFMSVpFUigobmFtZSkud2FpdCkgfQorCisjZGVmaW5lIF9fTVVURVhfSU5JVElBTElaRVIobmFtZSkgXAorCV9fU0VNQVBIT1JFX0lOSVRJQUxJWkVSKG5hbWUsMSkKKworI2RlZmluZSBfX0RFQ0xBUkVfU0VNQVBIT1JFX0dFTkVSSUMobmFtZSxjb3VudCkgXAorCXN0cnVjdCBzZW1hcGhvcmUgbmFtZSA9IF9fU0VNQVBIT1JFX0lOSVRJQUxJWkVSKG5hbWUsY291bnQpCisKKyNkZWZpbmUgREVDTEFSRV9NVVRFWChuYW1lKSBfX0RFQ0xBUkVfU0VNQVBIT1JFX0dFTkVSSUMobmFtZSwxKQorI2RlZmluZSBERUNMQVJFX01VVEVYX0xPQ0tFRChuYW1lKSBfX0RFQ0xBUkVfU0VNQVBIT1JFX0dFTkVSSUMobmFtZSwwKQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2VtYV9pbml0IChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0sIGludCB2YWwpCit7CisJKnNlbSA9IChzdHJ1Y3Qgc2VtYXBob3JlKSBfX1NFTUFQSE9SRV9JTklUSUFMSVpFUigoKnNlbSksdmFsKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGluaXRfTVVURVggKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKK3sKKwlzZW1hX2luaXQoc2VtLCAxKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGluaXRfTVVURVhfTE9DS0VEIChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCit7CisJc2VtYV9pbml0KHNlbSwgMCk7Cit9CisKK2FzbWxpbmthZ2Ugdm9pZCBfX2Rvd24oc3RydWN0IHNlbWFwaG9yZSAqIHNlbSk7Cithc21saW5rYWdlIGludCAgX19kb3duX2ludGVycnVwdGlibGUoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSk7Cithc21saW5rYWdlIGludCAgX19kb3duX3RyeWxvY2soc3RydWN0IHNlbWFwaG9yZSAqIHNlbSk7Cithc21saW5rYWdlIHZvaWQgX191cChzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKTsKKworc3RhdGljIGlubGluZSB2b2lkIGRvd24oc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKK3sKKwltaWdodF9zbGVlcCgpOworCWlmIChhdG9taWNfZGVjX3JldHVybigmc2VtLT5jb3VudCkgPCAwKQorCQlfX2Rvd24oc2VtKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZG93bl9pbnRlcnJ1cHRpYmxlKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCit7CisJaW50IHJldCA9IDA7CisKKwltaWdodF9zbGVlcCgpOworCWlmIChhdG9taWNfZGVjX3JldHVybigmc2VtLT5jb3VudCkgPCAwKQorCQlyZXQgPSBfX2Rvd25faW50ZXJydXB0aWJsZShzZW0pOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGRvd25fdHJ5bG9jayhzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQoreworCWludCBvbGRfdmFsLCBuZXdfdmFsOworCisJLyoKKwkgKiBUaGlzIGlubGluZSBhc3NlbWJseSBhdG9taWNhbGx5IGltcGxlbWVudHMgdGhlIGVxdWl2YWxlbnQKKwkgKiB0byB0aGUgZm9sbG93aW5nIEMgY29kZToKKwkgKiAgIG9sZF92YWwgPSBzZW0tPmNvdW50LmNvdW50ZXI7CisJICogICBpZiAoKG5ld192YWwgPSBvbGRfdmFsKSA+IDApCisJICogICAgICAgc2VtLT5jb3VudC5jb3VudGVyID0gLS1uZXdfdmFsOworCSAqIEluIHRoZSBwcGMgY29kZSB0aGlzIGlzIGNhbGxlZCBhdG9taWNfZGVjX2lmX3Bvc2l0aXZlLgorCSAqLworCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwkJIiAgIGwgICAgJTAsMCglMylcbiIKKwkJIjA6IGx0ciAgJTEsJTBcbiIKKwkJIiAgIGpsZSAgMWZcbiIKKwkJIiAgIGFoaSAgJTEsLTFcbiIKKwkJIiAgIGNzICAgJTAsJTEsMCglMylcbiIKKwkJIiAgIGpsICAgMGJcbiIKKwkJIjE6IgorCQk6ICI9JmQiIChvbGRfdmFsKSwgIj0mZCIgKG5ld192YWwpLCAiPW0iIChzZW0tPmNvdW50LmNvdW50ZXIpCisJCTogImEiICgmc2VtLT5jb3VudC5jb3VudGVyKSwgIm0iIChzZW0tPmNvdW50LmNvdW50ZXIpCisJCTogImNjIiwgIm1lbW9yeSIgKTsKKwlyZXR1cm4gb2xkX3ZhbCA8PSAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdXAoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKK3sKKwlpZiAoYXRvbWljX2luY19yZXR1cm4oJnNlbS0+Y291bnQpIDw9IDApCisJCV9fdXAoc2VtKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL3NlbWJ1Zi5oIGIvaW5jbHVkZS9hc20tczM5MC9zZW1idWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjYyNmIwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tczM5MC9zZW1idWYuaApAQCAtMCwwICsxLDI5IEBACisjaWZuZGVmIF9TMzkwX1NFTUJVRl9ICisjZGVmaW5lIF9TMzkwX1NFTUJVRl9ICisKKy8qIAorICogVGhlIHNlbWlkNjRfZHMgc3RydWN0dXJlIGZvciBTLzM5MCBhcmNoaXRlY3R1cmUuCisgKiBOb3RlIGV4dHJhIHBhZGRpbmcgYmVjYXVzZSB0aGlzIHN0cnVjdHVyZSBpcyBwYXNzZWQgYmFjayBhbmQgZm9ydGgKKyAqIGJldHdlZW4ga2VybmVsIGFuZCB1c2VyIHNwYWNlLgorICoKKyAqIFBhZCBzcGFjZSBpcyBsZWZ0IGZvcjoKKyAqIC0gNjQtYml0IHRpbWVfdCB0byBzb2x2ZSB5MjAzOCBwcm9ibGVtIChmb3IgIV9fczM5MHhfXykKKyAqIC0gMiBtaXNjZWxsYW5lb3VzIDMyLWJpdCB2YWx1ZXMKKyAqLworCitzdHJ1Y3Qgc2VtaWQ2NF9kcyB7CisJc3RydWN0IGlwYzY0X3Blcm0gc2VtX3Blcm07CQkvKiBwZXJtaXNzaW9ucyAuLiBzZWUgaXBjLmggKi8KKwlfX2tlcm5lbF90aW1lX3QJc2VtX290aW1lOwkJLyogbGFzdCBzZW1vcCB0aW1lICovCisjaWZuZGVmIF9fczM5MHhfXworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQxOworI2VuZGlmIC8qICEgX19zMzkweF9fICovCisJX19rZXJuZWxfdGltZV90CXNlbV9jdGltZTsJCS8qIGxhc3QgY2hhbmdlIHRpbWUgKi8KKyNpZm5kZWYgX19zMzkweF9fCisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDI7CisjZW5kaWYgLyogISBfX3MzOTB4X18gKi8KKwl1bnNpZ25lZCBsb25nCXNlbV9uc2VtczsJCS8qIG5vLiBvZiBzZW1hcGhvcmVzIGluIGFycmF5ICovCisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDM7CisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDQ7Cit9OworCisjZW5kaWYgLyogX1MzOTBfU0VNQlVGX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvc2V0dXAuaCBiL2luY2x1ZGUvYXNtLXMzOTAvc2V0dXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDUxYzQ4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tczM5MC9zZXR1cC5oCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiAgaW5jbHVkZS9hc20tczM5MC9zZXR1cC5oCisgKgorICogIFMzOTAgdmVyc2lvbgorICogICAgQ29weXJpZ2h0IChDKSAxOTk5IElCTSBEZXV0c2NobGFuZCBFbnR3aWNrbHVuZyBHbWJILCBJQk0gQ29ycG9yYXRpb24KKyAqLworCisjaWZuZGVmIF9BU01fUzM5MF9TRVRVUF9ICisjZGVmaW5lIF9BU01fUzM5MF9TRVRVUF9ICisKKyNkZWZpbmUgUEFSTUFSRUEJCTB4MTA0MDAKKyNkZWZpbmUgQ09NTUFORF9MSU5FX1NJWkUgCTg5NgorI2RlZmluZSBSQU1ESVNLX09SSUdJTgkJMHg4MDAwMDAKKyNkZWZpbmUgUkFNRElTS19TSVpFCQkweDgwMDAwMAorI2RlZmluZSBNRU1PUllfQ0hVTktTCQkxNgkvKiBtYXggMHg3ZmZmICovCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNpZm5kZWYgX19zMzkweF9fCisjZGVmaW5lIElQTF9ERVZJQ0UgICAgICAgICgqKHVuc2lnbmVkIGxvbmcgKikgICgweDEwNDA0KSkKKyNkZWZpbmUgSU5JVFJEX1NUQVJUICAgICAgKCoodW5zaWduZWQgbG9uZyAqKSAgKDB4MTA0MEMpKQorI2RlZmluZSBJTklUUkRfU0laRSAgICAgICAoKih1bnNpZ25lZCBsb25nICopICAoMHgxMDQxNCkpCisjZWxzZSAvKiBfX3MzOTB4X18gKi8KKyNkZWZpbmUgSVBMX0RFVklDRSAgICAgICAgKCoodW5zaWduZWQgbG9uZyAqKSAgKDB4MTA0MDApKQorI2RlZmluZSBJTklUUkRfU1RBUlQgICAgICAoKih1bnNpZ25lZCBsb25nICopICAoMHgxMDQwOCkpCisjZGVmaW5lIElOSVRSRF9TSVpFICAgICAgICgqKHVuc2lnbmVkIGxvbmcgKikgICgweDEwNDEwKSkKKyNlbmRpZiAvKiBfX3MzOTB4X18gKi8KKyNkZWZpbmUgQ09NTUFORF9MSU5FICAgICAgKChjaGFyICopICAgICAgICAgICAgKDB4MTA0ODApKQorCisvKgorICogTWFjaGluZSBmZWF0dXJlcyBkZXRlY3RlZCBpbiBoZWFkLlMKKyAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWFjaGluZV9mbGFnczsKKworI2RlZmluZSBNQUNISU5FX0lTX1ZNCQkobWFjaGluZV9mbGFncyAmIDEpCisjZGVmaW5lIE1BQ0hJTkVfSVNfUDM5MAkJKG1hY2hpbmVfZmxhZ3MgJiA0KQorI2RlZmluZSBNQUNISU5FX0hBU19NVlBHCShtYWNoaW5lX2ZsYWdzICYgMTYpCisjZGVmaW5lIE1BQ0hJTkVfSEFTX0RJQUc0NAkobWFjaGluZV9mbGFncyAmIDMyKQorI2RlZmluZSBNQUNISU5FX0hBU19JRFRFCShtYWNoaW5lX2ZsYWdzICYgMTI4KQorCisjaWZuZGVmIF9fczM5MHhfXworI2RlZmluZSBNQUNISU5FX0hBU19JRUVFCShtYWNoaW5lX2ZsYWdzICYgMikKKyNkZWZpbmUgTUFDSElORV9IQVNfQ1NQCQkobWFjaGluZV9mbGFncyAmIDgpCisjZWxzZSAvKiBfX3MzOTB4X18gKi8KKyNkZWZpbmUgTUFDSElORV9IQVNfSUVFRQkoMSkKKyNkZWZpbmUgTUFDSElORV9IQVNfQ1NQCQkoMSkKKyNlbmRpZiAvKiBfX3MzOTB4X18gKi8KKworCisjZGVmaW5lIE1BQ0hJTkVfSEFTX1NDTFAJKCFNQUNISU5FX0lTX1AzOTApCisKKy8qCisgKiBDb25zb2xlIG1vZGUuIE92ZXJyaWRlIHdpdGggY29ubW9kZT0KKyAqLworZXh0ZXJuIHVuc2lnbmVkIGludCBjb25zb2xlX21vZGU7CitleHRlcm4gdW5zaWduZWQgaW50IGNvbnNvbGVfZGV2bm87CitleHRlcm4gdW5zaWduZWQgaW50IGNvbnNvbGVfaXJxOworCisjZGVmaW5lIENPTlNPTEVfSVNfVU5ERUZJTkVECShjb25zb2xlX21vZGUgPT0gMCkKKyNkZWZpbmUgQ09OU09MRV9JU19TQ0xQCQkoY29uc29sZV9tb2RlID09IDEpCisjZGVmaW5lIENPTlNPTEVfSVNfMzIxNQkJKGNvbnNvbGVfbW9kZSA9PSAyKQorI2RlZmluZSBDT05TT0xFX0lTXzMyNzAJCShjb25zb2xlX21vZGUgPT0gMykKKyNkZWZpbmUgU0VUX0NPTlNPTEVfU0NMUAlkbyB7IGNvbnNvbGVfbW9kZSA9IDE7IH0gd2hpbGUgKDApCisjZGVmaW5lIFNFVF9DT05TT0xFXzMyMTUJZG8geyBjb25zb2xlX21vZGUgPSAyOyB9IHdoaWxlICgwKQorI2RlZmluZSBTRVRfQ09OU09MRV8zMjcwCWRvIHsgY29uc29sZV9tb2RlID0gMzsgfSB3aGlsZSAoMCkKKworI2Vsc2UgCisKKyNpZm5kZWYgX19zMzkweF9fCisjZGVmaW5lIElQTF9ERVZJQ0UgICAgICAgIDB4MTA0MDQKKyNkZWZpbmUgSU5JVFJEX1NUQVJUICAgICAgMHgxMDQwQworI2RlZmluZSBJTklUUkRfU0laRSAgICAgICAweDEwNDE0CisjZWxzZSAvKiBfX3MzOTB4X18gKi8KKyNkZWZpbmUgSVBMX0RFVklDRSAgICAgICAgMHgxMDQwMAorI2RlZmluZSBJTklUUkRfU1RBUlQgICAgICAweDEwNDA4CisjZGVmaW5lIElOSVRSRF9TSVpFICAgICAgIDB4MTA0MTAKKyNlbmRpZiAvKiBfX3MzOTB4X18gKi8KKyNkZWZpbmUgQ09NTUFORF9MSU5FICAgICAgMHgxMDQ4MAorCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL3NmcC1tYWNoaW5lLmggYi9pbmNsdWRlL2FzbS1zMzkwL3NmcC1tYWNoaW5lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M3OWI1MwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvc2ZwLW1hY2hpbmUuaApAQCAtMCwwICsxLDEzOSBAQAorLyogTWFjaGluZS1kZXBlbmRlbnQgc29mdHdhcmUgZmxvYXRpbmctcG9pbnQgZGVmaW5pdGlvbnMuCisgICBTLzM5MCBrZXJuZWwgdmVyc2lvbi4KKyAgIENvcHlyaWdodCAoQykgMTk5NywxOTk4LDE5OTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKyAgIENvbnRyaWJ1dGVkIGJ5IFJpY2hhcmQgSGVuZGVyc29uIChydGhAY3lnbnVzLmNvbSksCisJCSAgSmFrdWIgSmVsaW5layAoampAdWx0cmEubGludXguY3opLAorCQkgIERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AcmVkaGF0LmNvbSkgYW5kCisJCSAgUGV0ZXIgTWF5ZGVsbCAocG1heWRlbGxAY2hpYXJrLmdyZWVuZW5kLm9yZy51aykuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisgICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYKKyAgIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworCisjaWZuZGVmIF9TRlBfTUFDSElORV9ICisjZGVmaW5lIF9TRlBfTUFDSElORV9ICisgICAKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2RlZmluZSBfRlBfV19UWVBFX1NJWkUJCTMyCisjZGVmaW5lIF9GUF9XX1RZUEUJCXVuc2lnbmVkIGxvbmcKKyNkZWZpbmUgX0ZQX1dTX1RZUEUJCXNpZ25lZCBsb25nCisjZGVmaW5lIF9GUF9JX1RZUEUJCWxvbmcKKworI2RlZmluZSBfRlBfTVVMX01FQVRfUyhSLFgsWSkJCQkJCVwKKyAgX0ZQX01VTF9NRUFUXzFfd2lkZShfRlBfV0ZSQUNCSVRTX1MsUixYLFksdW11bF9wcG1tKQorI2RlZmluZSBfRlBfTVVMX01FQVRfRChSLFgsWSkJCQkJCVwKKyAgX0ZQX01VTF9NRUFUXzJfd2lkZShfRlBfV0ZSQUNCSVRTX0QsUixYLFksdW11bF9wcG1tKQorI2RlZmluZSBfRlBfTVVMX01FQVRfUShSLFgsWSkJCQkJCVwKKyAgX0ZQX01VTF9NRUFUXzRfd2lkZShfRlBfV0ZSQUNCSVRTX1EsUixYLFksdW11bF9wcG1tKQorCisjZGVmaW5lIF9GUF9ESVZfTUVBVF9TKFIsWCxZKQlfRlBfRElWX01FQVRfMV91ZGl2KFMsUixYLFkpCisjZGVmaW5lIF9GUF9ESVZfTUVBVF9EKFIsWCxZKQlfRlBfRElWX01FQVRfMl91ZGl2KEQsUixYLFkpCisjZGVmaW5lIF9GUF9ESVZfTUVBVF9RKFIsWCxZKQlfRlBfRElWX01FQVRfNF91ZGl2KFEsUixYLFkpCisKKyNkZWZpbmUgX0ZQX05BTkZSQUNfUwkJKChfRlBfUU5BTkJJVF9TIDw8IDEpIC0gMSkKKyNkZWZpbmUgX0ZQX05BTkZSQUNfRAkJKChfRlBfUU5BTkJJVF9EIDw8IDEpIC0gMSksIC0xCisjZGVmaW5lIF9GUF9OQU5GUkFDX1EJCSgoX0ZQX1FOQU5CSVRfUSA8PCAxKSAtIDEpLCAtMSwgLTEsIC0xCisjZGVmaW5lIF9GUF9OQU5TSUdOX1MJCTAKKyNkZWZpbmUgX0ZQX05BTlNJR05fRAkJMAorI2RlZmluZSBfRlBfTkFOU0lHTl9RCQkwCisKKyNkZWZpbmUgX0ZQX0tFRVBOQU5GUkFDUCAxCisKKy8qCisgKiBJZiBvbmUgTmFOIGlzIHNpZ25hbGluZyBhbmQgdGhlIG90aGVyIGlzIG5vdCwKKyAqIHdlIGNob29zZSB0aGF0IG9uZSwgb3RoZXJ3aXNlIHdlIGNob29zZSBYLgorICovCisjZGVmaW5lIF9GUF9DSE9PU0VOQU4oZnMsIHdjLCBSLCBYLCBZLCBPUCkgICAgICAgICAgICAgICAgICAgICAgXAorICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoKF9GUF9GUkFDX0hJR0hfUkFXXyMjZnMoWCkgJiBfRlBfUU5BTkJJVF8jI2ZzKSAgICAgICAgICBcCisgICAgICAgICYmICEoX0ZQX0ZSQUNfSElHSF9SQVdfIyNmcyhZKSAmIF9GUF9RTkFOQklUXyMjZnMpKSAgICAgXAorICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgUiMjX3MgPSBZIyNfczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIF9GUF9GUkFDX0NPUFlfIyN3YyhSLFkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBSIyNfcyA9IFgjI19zOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgX0ZQX0ZSQUNfQ09QWV8jI3djKFIsWCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFIjI19jID0gRlBfQ0xTX05BTjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfSB3aGlsZSAoMCkKKworLyogU29tZSBhc3NlbWJseSB0byBzcGVlZCB0aGluZ3MgdXAuICovCisjZGVmaW5lIF9fRlBfRlJBQ19BRERfMyhyMixyMSxyMCx4Mix4MSx4MCx5Mix5MSx5MCkgKHsJCVwKKwl1bnNpZ25lZCBpbnQgX19yMiA9ICh4MikgKyAoeTIpOwkJCVwKKwl1bnNpZ25lZCBpbnQgX19yMSA9ICh4MSk7CQkJCVwKKwl1bnNpZ25lZCBpbnQgX19yMCA9ICh4MCk7CQkJCVwKKwlfX2FzbV9fICgiICAgYWxyICUyLCUzXG4iCQkJCVwKKwkJICIgICBicmMgMTIsMGZcbiIJCQkJXAorCQkgIiAgIGxoaSAwLDFcbiIJCQkJCVwKKwkJICIgICBhbHIgJTEsMFxuIgkJCQlcCisJCSAiICAgYnJjIDEyLDBmXG4iCQkJCVwKKwkJICIgICBhbHIgJTAsMFxuIgkJCQlcCisJCSAiMDoiCQkJCQkJXAorCQkgOiAiKyZkIiAoX19yMiksICIrJmQiIChfX3IxKSwgIismZCIgKF9fcjApCVwKKwkJIDogImQiICh5MCksICJpIiAoMSkgOiAiY2MiLCAiMCIgKTsJCVwKKwlfX2FzbV9fICgiICAgYWxyICUxLCUyXG4iCQkJCVwKKwkJICIgICBicmMgMTIsMGZcbiIJCQkJXAorCQkgIiAgIGFoaSAlMCwxXG4iCQkJCVwKKwkJICIwOiIJCQkJCQlcCisJCSA6ICIrJmQiIChfX3IyKSwgIismZCIgKF9fcjEpCQkJXAorCQkgOiAiZCIgKHkxKSA6ICJjYyIgKTsJCQkJXAorCShyMikgPSBfX3IyOwkJCQkJCVwKKwkocjEpID0gX19yMTsJCQkJCQlcCisJKHIwKSA9IF9fcjA7CQkJCQkJXAorfSkKKworI2RlZmluZSBfX0ZQX0ZSQUNfU1VCXzMocjIscjEscjAseDIseDEseDAseTIseTEseTApICh7CQlcCisJdW5zaWduZWQgaW50IF9fcjIgPSAoeDIpIC0gKHkyKTsJCQlcCisJdW5zaWduZWQgaW50IF9fcjEgPSAoeDEpOwkJCQlcCisJdW5zaWduZWQgaW50IF9fcjAgPSAoeDApOwkJCQlcCisJX19hc21fXyAoIiAgIHNsciAlMiwlM1xuIgkJCQlcCisJCSAiICAgYnJjIDMsMGZcbiIJCQkJXAorCQkgIiAgIGxoaSAwLDFcbiIJCQkJCVwKKwkJICIgICBzbHIgJTEsMFxuIgkJCQlcCisJCSAiICAgYnJjIDMsMGZcbiIJCQkJXAorCQkgIiAgIHNsciAlMCwwXG4iCQkJCVwKKwkJICIwOiIJCQkJCQlcCisJCSA6ICIrJmQiIChfX3IyKSwgIismZCIgKF9fcjEpLCAiKyZkIiAoX19yMCkJXAorCQkgOiAiZCIgKHkwKSA6ICJjYyIsICIwIiApOwkJCVwKKwlfX2FzbV9fICgiICAgc2xyICUxLCUyXG4iCQkJCVwKKwkJICIgICBicmMgMywwZlxuIgkJCQlcCisJCSAiICAgYWhpICUwLC0xXG4iCQkJCVwKKwkJICIwOiIJCQkJCQlcCisJCSA6ICIrJmQiIChfX3IyKSwgIismZCIgKF9fcjEpCQkJXAorCQkgOiAiZCIgKHkxKSA6ICJjYyIgKTsJCQkJXAorCShyMikgPSBfX3IyOwkJCQkJCVwKKwkocjEpID0gX19yMTsJCQkJCQlcCisJKHIwKSA9IF9fcjA7CQkJCQkJXAorfSkKKworI2RlZmluZSBfX0ZQX0ZSQUNfREVDXzMoeDIseDEseDAseTIseTEseTApIF9fRlBfRlJBQ19TVUJfMyh4Mix4MSx4MCx4Mix4MSx4MCx5Mix5MSx5MCkKKworLyogT2J0YWluIHRoZSBjdXJyZW50IHJvdW5kaW5nIG1vZGUuICovCisjZGVmaW5lIEZQX1JPVU5ETU9ERQltb2RlCisKKy8qIEV4Y2VwdGlvbiBmbGFncy4gKi8KKyNkZWZpbmUgRlBfRVhfSU5WQUxJRAkJMHg4MDAwMDAKKyNkZWZpbmUgRlBfRVhfRElWWkVSTwkJMHg0MDAwMDAKKyNkZWZpbmUgRlBfRVhfT1ZFUkZMT1cJCTB4MjAwMDAwCisjZGVmaW5lIEZQX0VYX1VOREVSRkxPVwkJMHgxMDAwMDAKKyNkZWZpbmUgRlBfRVhfSU5FWEFDVAkJMHgwODAwMDAKKworLyogV2Ugd3JpdGUgdGhlIHJlc3VsdHMgYWx3YXlzICovCisjZGVmaW5lIEZQX0lOSElCSVRfUkVTVUxUUyAwCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9zaG1idWYuaCBiL2luY2x1ZGUvYXNtLXMzOTAvc2htYnVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWVkMmUyOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvc2htYnVmLmgKQEAgLTAsMCArMSw0OCBAQAorI2lmbmRlZiBfUzM5MF9TSE1CVUZfSAorI2RlZmluZSBfUzM5MF9TSE1CVUZfSAorCisvKiAKKyAqIFRoZSBzaG1pZDY0X2RzIHN0cnVjdHVyZSBmb3IgUy8zOTAgYXJjaGl0ZWN0dXJlLgorICogTm90ZSBleHRyYSBwYWRkaW5nIGJlY2F1c2UgdGhpcyBzdHJ1Y3R1cmUgaXMgcGFzc2VkIGJhY2sgYW5kIGZvcnRoCisgKiBiZXR3ZWVuIGtlcm5lbCBhbmQgdXNlciBzcGFjZS4KKyAqCisgKiBQYWQgc3BhY2UgaXMgbGVmdCBmb3I6CisgKiAtIDY0LWJpdCB0aW1lX3QgdG8gc29sdmUgeTIwMzggcHJvYmxlbSAoZm9yICFfX3MzOTB4X18pCisgKiAtIDIgbWlzY2VsbGFuZW91cyAzMi1iaXQgdmFsdWVzCisgKi8KKworc3RydWN0IHNobWlkNjRfZHMgeworCXN0cnVjdCBpcGM2NF9wZXJtCXNobV9wZXJtOwkvKiBvcGVyYXRpb24gcGVybXMgKi8KKwlzaXplX3QJCQlzaG1fc2Vnc3o7CS8qIHNpemUgb2Ygc2VnbWVudCAoYnl0ZXMpICovCisJX19rZXJuZWxfdGltZV90CQlzaG1fYXRpbWU7CS8qIGxhc3QgYXR0YWNoIHRpbWUgKi8KKyNpZm5kZWYgX19zMzkweF9fCisJdW5zaWduZWQgbG9uZwkJX191bnVzZWQxOworI2VuZGlmIC8qICEgX19zMzkweF9fICovCisJX19rZXJuZWxfdGltZV90CQlzaG1fZHRpbWU7CS8qIGxhc3QgZGV0YWNoIHRpbWUgKi8KKyNpZm5kZWYgX19zMzkweF9fCisJdW5zaWduZWQgbG9uZwkJX191bnVzZWQyOworI2VuZGlmIC8qICEgX19zMzkweF9fICovCisJX19rZXJuZWxfdGltZV90CQlzaG1fY3RpbWU7CS8qIGxhc3QgY2hhbmdlIHRpbWUgKi8KKyNpZm5kZWYgX19zMzkweF9fCisJdW5zaWduZWQgbG9uZwkJX191bnVzZWQzOworI2VuZGlmIC8qICEgX19zMzkweF9fICovCisJX19rZXJuZWxfcGlkX3QJCXNobV9jcGlkOwkvKiBwaWQgb2YgY3JlYXRvciAqLworCV9fa2VybmVsX3BpZF90CQlzaG1fbHBpZDsJLyogcGlkIG9mIGxhc3Qgb3BlcmF0b3IgKi8KKwl1bnNpZ25lZCBsb25nCQlzaG1fbmF0dGNoOwkvKiBuby4gb2YgY3VycmVudCBhdHRhY2hlcyAqLworCXVuc2lnbmVkIGxvbmcJCV9fdW51c2VkNDsKKwl1bnNpZ25lZCBsb25nCQlfX3VudXNlZDU7Cit9OworCitzdHJ1Y3Qgc2htaW5mbzY0IHsKKwl1bnNpZ25lZCBsb25nCXNobW1heDsKKwl1bnNpZ25lZCBsb25nCXNobW1pbjsKKwl1bnNpZ25lZCBsb25nCXNobW1uaTsKKwl1bnNpZ25lZCBsb25nCXNobXNlZzsKKwl1bnNpZ25lZCBsb25nCXNobWFsbDsKKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkMTsKKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkMjsKKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkMzsKKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkNDsKK307CisKKyNlbmRpZiAvKiBfUzM5MF9TSE1CVUZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9zaG1wYXJhbS5oIGIvaW5jbHVkZS9hc20tczM5MC9zaG1wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyZTBjMDUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL3NobXBhcmFtLmgKQEAgLTAsMCArMSwxMyBAQAorLyoKKyAqICBpbmNsdWRlL2FzbS1zMzkwL3NobXBhcmFtLmgKKyAqCisgKiAgUzM5MCB2ZXJzaW9uCisgKgorICogIERlcml2ZWQgZnJvbSAiaW5jbHVkZS9hc20taTM4Ni9zaG1wYXJhbS5oIgorICovCisjaWZuZGVmIF9BU01fUzM5MF9TSE1QQVJBTV9ICisjZGVmaW5lIF9BU01fUzM5MF9TSE1QQVJBTV9ICisKKyNkZWZpbmUgU0hNTEJBIFBBR0VfU0laRSAgICAgICAgICAgICAgICAgLyogYXR0YWNoIGFkZHIgYSBtdWx0aXBsZSBvZiB0aGlzICovCisKKyNlbmRpZiAvKiBfQVNNX1MzOTBfU0hNUEFSQU1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9zaWdjb250ZXh0LmggYi9pbmNsdWRlL2FzbS1zMzkwL3NpZ2NvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTdiYzBjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tczM5MC9zaWdjb250ZXh0LmgKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqICBpbmNsdWRlL2FzbS1zMzkwL3NpZ2NvbnRleHQuaAorICoKKyAqICBTMzkwIHZlcnNpb24KKyAqICAgIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIElCTSBEZXV0c2NobGFuZCBFbnR3aWNrbHVuZyBHbWJILCBJQk0gQ29ycG9yYXRpb24KKyAqLworCisjaWZuZGVmIF9BU01fUzM5MF9TSUdDT05URVhUX0gKKyNkZWZpbmUgX0FTTV9TMzkwX1NJR0NPTlRFWFRfSAorCisjZGVmaW5lIF9fTlVNX0dQUlMgMTYKKyNkZWZpbmUgX19OVU1fRlBSUyAxNgorI2RlZmluZSBfX05VTV9BQ1JTIDE2CisKKyNpZm5kZWYgX19zMzkweF9fCisKKy8qIEhhcyB0byBiZSBhdCBsZWFzdCBfTlNJR19XT1JEUyBmcm9tIGFzbS9zaWduYWwuaCAqLworI2RlZmluZSBfU0lHQ09OVEVYVF9OU0lHCTY0CisjZGVmaW5lIF9TSUdDT05URVhUX05TSUdfQlBXCTMyCisvKiBTaXplIG9mIHN0YWNrIGZyYW1lIGFsbG9jYXRlZCB3aGVuIGNhbGxpbmcgc2lnbmFsIGhhbmRsZXIuICovCisjZGVmaW5lIF9fU0lHTkFMX0ZSQU1FU0laRQk5NgorCisjZWxzZSAvKiBfX3MzOTB4X18gKi8KKworLyogSGFzIHRvIGJlIGF0IGxlYXN0IF9OU0lHX1dPUkRTIGZyb20gYXNtL3NpZ25hbC5oICovCisjZGVmaW5lIF9TSUdDT05URVhUX05TSUcJNjQKKyNkZWZpbmUgX1NJR0NPTlRFWFRfTlNJR19CUFcJNjQgCisvKiBTaXplIG9mIHN0YWNrIGZyYW1lIGFsbG9jYXRlZCB3aGVuIGNhbGxpbmcgc2lnbmFsIGhhbmRsZXIuICovCisjZGVmaW5lIF9fU0lHTkFMX0ZSQU1FU0laRQkxNjAKKworI2VuZGlmIC8qIF9fczM5MHhfXyAqLworCisjZGVmaW5lIF9TSUdDT05URVhUX05TSUdfV09SRFMJKF9TSUdDT05URVhUX05TSUcgLyBfU0lHQ09OVEVYVF9OU0lHX0JQVykKKyNkZWZpbmUgX1NJR01BU0tfQ09QWV9TSVpFCShzaXplb2YodW5zaWduZWQgbG9uZykqX1NJR0NPTlRFWFRfTlNJR19XT1JEUykKKwordHlwZWRlZiBzdHJ1Y3QgCit7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgbWFzazsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBhZGRyOworfSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCg4KSkpIF9wc3dfdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlfcHN3X3QgcHN3OworCXVuc2lnbmVkIGxvbmcgZ3Byc1tfX05VTV9HUFJTXTsKKwl1bnNpZ25lZCBpbnQgIGFjcnNbX19OVU1fQUNSU107Cit9IF9zMzkwX3JlZ3NfY29tbW9uOworCit0eXBlZGVmIHN0cnVjdAoreworCXVuc2lnbmVkIGludCBmcGM7CisJZG91YmxlICAgZnByc1tfX05VTV9GUFJTXTsKK30gX3MzOTBfZnBfcmVnczsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlfczM5MF9yZWdzX2NvbW1vbiByZWdzOworCV9zMzkwX2ZwX3JlZ3MgICAgIGZwcmVnczsKK30gX3NpZ3JlZ3M7CisKK3N0cnVjdCBzaWdjb250ZXh0Cit7CisJdW5zaWduZWQgbG9uZwlvbGRtYXNrW19TSUdDT05URVhUX05TSUdfV09SRFNdOworCV9zaWdyZWdzICAgICAgICAqc3JlZ3M7Cit9OworCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL3NpZ2luZm8uaCBiL2luY2x1ZGUvYXNtLXMzOTAvc2lnaW5mby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyMzAzNTMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL3NpZ2luZm8uaApAQCAtMCwwICsxLDI0IEBACisvKgorICogIGluY2x1ZGUvYXNtLXMzOTAvc2lnaW5mby5oCisgKgorICogIFMzOTAgdmVyc2lvbgorICoKKyAqICBEZXJpdmVkIGZyb20gImluY2x1ZGUvYXNtLWkzODYvc2lnaW5mby5oIgorICovCisKKyNpZm5kZWYgX1MzOTBfU0lHSU5GT19ICisjZGVmaW5lIF9TMzkwX1NJR0lORk9fSAorCisjaWZkZWYgX19zMzkweF9fCisjZGVmaW5lIF9fQVJDSF9TSV9QUkVBTUJMRV9TSVpFICg0ICogc2l6ZW9mKGludCkpCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19BUkNIX1MzOTBYCisjZGVmaW5lIFNJR0VWX1BBRF9TSVpFICgoU0lHRVZfTUFYX1NJWkUvc2l6ZW9mKGludCkpIC0gNCkKKyNlbHNlCisjZGVmaW5lIFNJR0VWX1BBRF9TSVpFICgoU0lHRVZfTUFYX1NJWkUvc2l6ZW9mKGludCkpIC0gMykKKyNlbmRpZgorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2lnaW5mby5oPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvc2lnbmFsLmggYi9pbmNsdWRlL2FzbS1zMzkwL3NpZ25hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyNzNjZGMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL3NpZ25hbC5oCkBAIC0wLDAgKzEsMTk3IEBACisvKgorICogIGluY2x1ZGUvYXNtLXMzOTAvc2lnbmFsLmgKKyAqCisgKiAgUzM5MCB2ZXJzaW9uCisgKgorICogIERlcml2ZWQgZnJvbSAiaW5jbHVkZS9hc20taTM4Ni9zaWduYWwuaCIKKyAqLworCisjaWZuZGVmIF9BU01TMzkwX1NJR05BTF9ICisjZGVmaW5lIF9BU01TMzkwX1NJR05BTF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKworLyogQXZvaWQgdG9vIG1hbnkgaGVhZGVyIG9yZGVyaW5nIHByb2JsZW1zLiAgKi8KK3N0cnVjdCBzaWdpbmZvOworc3RydWN0IHB0X3JlZ3M7CisKKyNpZmRlZiBfX0tFUk5FTF9fCisvKiBNb3N0IHRoaW5ncyBzaG91bGQgYmUgY2xlYW4gZW5vdWdoIHRvIHJlZGVmaW5lIHRoaXMgYXQgd2lsbCwgaWYgY2FyZQorICAgaXMgdGFrZW4gdG8gbWFrZSBsaWJjIG1hdGNoLiAgKi8KKyNpbmNsdWRlIDxhc20vc2lnY29udGV4dC5oPgorI2RlZmluZSBfTlNJRyAgICAgICAgICAgX1NJR0NPTlRFWFRfTlNJRworI2RlZmluZSBfTlNJR19CUFcgICAgICAgX1NJR0NPTlRFWFRfTlNJR19CUFcKKyNkZWZpbmUgX05TSUdfV09SRFMgICAgIF9TSUdDT05URVhUX05TSUdfV09SRFMKKwordHlwZWRlZiB1bnNpZ25lZCBsb25nIG9sZF9zaWdzZXRfdDsgICAgICAgICAgICAgLyogYXQgbGVhc3QgMzIgYml0cyAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgc2lnW19OU0lHX1dPUkRTXTsKK30gc2lnc2V0X3Q7CisKKyNlbHNlCisvKiBIZXJlIHdlIG11c3QgY2F0ZXIgdG8gbGliY3MgdGhhdCBwb2tlIGFib3V0IGluIGtlcm5lbCBoZWFkZXJzLiAgKi8KKworI2RlZmluZSBOU0lHICAgICAgICAgICAgMzIKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBzaWdzZXRfdDsKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2RlZmluZSBTSUdIVVAgICAgICAgICAgIDEKKyNkZWZpbmUgU0lHSU5UICAgICAgICAgICAyCisjZGVmaW5lIFNJR1FVSVQgICAgICAgICAgMworI2RlZmluZSBTSUdJTEwgICAgICAgICAgIDQKKyNkZWZpbmUgU0lHVFJBUCAgICAgICAgICA1CisjZGVmaW5lIFNJR0FCUlQgICAgICAgICAgNgorI2RlZmluZSBTSUdJT1QgICAgICAgICAgIDYKKyNkZWZpbmUgU0lHQlVTICAgICAgICAgICA3CisjZGVmaW5lIFNJR0ZQRSAgICAgICAgICAgOAorI2RlZmluZSBTSUdLSUxMICAgICAgICAgIDkKKyNkZWZpbmUgU0lHVVNSMSAgICAgICAgIDEwCisjZGVmaW5lIFNJR1NFR1YgICAgICAgICAxMQorI2RlZmluZSBTSUdVU1IyICAgICAgICAgMTIKKyNkZWZpbmUgU0lHUElQRSAgICAgICAgIDEzCisjZGVmaW5lIFNJR0FMUk0gICAgICAgICAxNAorI2RlZmluZSBTSUdURVJNICAgICAgICAgMTUKKyNkZWZpbmUgU0lHU1RLRkxUICAgICAgIDE2CisjZGVmaW5lIFNJR0NITEQgICAgICAgICAxNworI2RlZmluZSBTSUdDT05UICAgICAgICAgMTgKKyNkZWZpbmUgU0lHU1RPUCAgICAgICAgIDE5CisjZGVmaW5lIFNJR1RTVFAgICAgICAgICAyMAorI2RlZmluZSBTSUdUVElOICAgICAgICAgMjEKKyNkZWZpbmUgU0lHVFRPVSAgICAgICAgIDIyCisjZGVmaW5lIFNJR1VSRyAgICAgICAgICAyMworI2RlZmluZSBTSUdYQ1BVICAgICAgICAgMjQKKyNkZWZpbmUgU0lHWEZTWiAgICAgICAgIDI1CisjZGVmaW5lIFNJR1ZUQUxSTSAgICAgICAyNgorI2RlZmluZSBTSUdQUk9GICAgICAgICAgMjcKKyNkZWZpbmUgU0lHV0lOQ0ggICAgICAgIDI4CisjZGVmaW5lIFNJR0lPICAgICAgICAgICAyOQorI2RlZmluZSBTSUdQT0xMICAgICAgICAgU0lHSU8KKy8qCisjZGVmaW5lIFNJR0xPU1QgICAgICAgICAyOQorKi8KKyNkZWZpbmUgU0lHUFdSICAgICAgICAgIDMwCisjZGVmaW5lIFNJR1NZUwkJMzEKKyNkZWZpbmUgU0lHVU5VU0VEICAgICAgIDMxCisKKy8qIFRoZXNlIHNob3VsZCBub3QgYmUgY29uc2lkZXJlZCBjb25zdGFudHMgZnJvbSB1c2VybGFuZC4gICovCisjZGVmaW5lIFNJR1JUTUlOICAgICAgICAzMgorI2RlZmluZSBTSUdSVE1BWCAgICAgICAgX05TSUcKKworLyoKKyAqIFNBX0ZMQUdTIHZhbHVlczoKKyAqCisgKiBTQV9PTlNUQUNLIGluZGljYXRlcyB0aGF0IGEgcmVnaXN0ZXJlZCBzdGFja190IHdpbGwgYmUgdXNlZC4KKyAqIFNBX0lOVEVSUlVQVCBpcyBhIG5vLW9wLCBidXQgbGVmdCBkdWUgdG8gaGlzdG9yaWNhbCByZWFzb25zLiBVc2UgdGhlCisgKiBTQV9SRVNUQVJUIGZsYWcgdG8gZ2V0IHJlc3RhcnRpbmcgc2lnbmFscyAod2hpY2ggd2VyZSB0aGUgZGVmYXVsdCBsb25nIGFnbykKKyAqIFNBX05PQ0xEU1RPUCBmbGFnIHRvIHR1cm4gb2ZmIFNJR0NITEQgd2hlbiBjaGlsZHJlbiBzdG9wLgorICogU0FfUkVTRVRIQU5EIGNsZWFycyB0aGUgaGFuZGxlciB3aGVuIHRoZSBzaWduYWwgaXMgZGVsaXZlcmVkLgorICogU0FfTk9DTERXQUlUIGZsYWcgb24gU0lHQ0hMRCB0byBpbmhpYml0IHpvbWJpZXMuCisgKiBTQV9OT0RFRkVSIHByZXZlbnRzIHRoZSBjdXJyZW50IHNpZ25hbCBmcm9tIGJlaW5nIG1hc2tlZCBpbiB0aGUgaGFuZGxlci4KKyAqCisgKiBTQV9PTkVTSE9UIGFuZCBTQV9OT01BU0sgYXJlIHRoZSBoaXN0b3JpY2FsIExpbnV4IG5hbWVzIGZvciB0aGUgU2luZ2xlCisgKiBVbml4IG5hbWVzIFJFU0VUSEFORCBhbmQgTk9ERUZFUiByZXNwZWN0aXZlbHkuCisgKi8KKyNkZWZpbmUgU0FfTk9DTERTVE9QICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU0FfTk9DTERXQUlUICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgU0FfU0lHSU5GTyAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgU0FfT05TVEFDSyAgICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgU0FfUkVTVEFSVCAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgU0FfTk9ERUZFUiAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgU0FfUkVTRVRIQU5EICAgIDB4ODAwMDAwMDAKKworI2RlZmluZSBTQV9OT01BU0sgICAgICAgU0FfTk9ERUZFUgorI2RlZmluZSBTQV9PTkVTSE9UICAgICAgU0FfUkVTRVRIQU5ECisjZGVmaW5lIFNBX0lOVEVSUlVQVCAgICAweDIwMDAwMDAwIC8qIGR1bW15IC0tIGlnbm9yZWQgKi8KKworI2RlZmluZSBTQV9SRVNUT1JFUiAgICAgMHgwNDAwMDAwMAorCisvKgorICogc2lnYWx0c3RhY2sgY29udHJvbHMKKyAqLworI2RlZmluZSBTU19PTlNUQUNLICAgICAgMQorI2RlZmluZSBTU19ESVNBQkxFICAgICAgMgorCisjZGVmaW5lIE1JTlNJR1NUS1NaICAgICAyMDQ4CisjZGVmaW5lIFNJR1NUS1NaICAgICAgICA4MTkyCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKy8qCisgKiBUaGVzZSB2YWx1ZXMgb2Ygc2FfZmxhZ3MgYXJlIHVzZWQgb25seSBieSB0aGUga2VybmVsIGFzIHBhcnQgb2YgdGhlCisgKiBpcnEgaGFuZGxpbmcgcm91dGluZXMuCisgKgorICogU0FfSU5URVJSVVBUIGlzIGFsc28gdXNlZCBieSB0aGUgaXJxIGhhbmRsaW5nIHJvdXRpbmVzLgorICogU0FfU0hJUlEgaXMgZm9yIHNoYXJlZCBpbnRlcnJ1cHQgc3VwcG9ydCBvbiBQQ0kgYW5kIEVJU0EuCisgKi8KKyNkZWZpbmUgU0FfUFJPQkUgICAgICAgICAgICAgICAgU0FfT05FU0hPVAorI2RlZmluZSBTQV9TQU1QTEVfUkFORE9NICAgICAgICBTQV9SRVNUQVJUCisjZGVmaW5lIFNBX1NISVJRICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNlbmRpZgorCisjZGVmaW5lIFNJR19CTE9DSyAgICAgICAgICAwICAgIC8qIGZvciBibG9ja2luZyBzaWduYWxzICovCisjZGVmaW5lIFNJR19VTkJMT0NLICAgICAgICAxICAgIC8qIGZvciB1bmJsb2NraW5nIHNpZ25hbHMgKi8KKyNkZWZpbmUgU0lHX1NFVE1BU0sgICAgICAgIDIgICAgLyogZm9yIHNldHRpbmcgdGhlIHNpZ25hbCBtYXNrICovCisKKy8qIFR5cGUgb2YgYSBzaWduYWwgaGFuZGxlci4gICovCit0eXBlZGVmIHZvaWQgKCpfX3NpZ2hhbmRsZXJfdCkoaW50KTsKKworI2RlZmluZSBTSUdfREZMICgoX19zaWdoYW5kbGVyX3QpMCkgICAgIC8qIGRlZmF1bHQgc2lnbmFsIGhhbmRsaW5nICovCisjZGVmaW5lIFNJR19JR04gKChfX3NpZ2hhbmRsZXJfdCkxKSAgICAgLyogaWdub3JlIHNpZ25hbCAqLworI2RlZmluZSBTSUdfRVJSICgoX19zaWdoYW5kbGVyX3QpLTEpICAgIC8qIGVycm9yIHJldHVybiBmcm9tIHNpZ25hbCAqLworCisjaWZkZWYgX19LRVJORUxfXworc3RydWN0IG9sZF9zaWdhY3Rpb24geworICAgICAgICBfX3NpZ2hhbmRsZXJfdCBzYV9oYW5kbGVyOworICAgICAgICBvbGRfc2lnc2V0X3Qgc2FfbWFzazsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBzYV9mbGFnczsKKyAgICAgICAgdm9pZCAoKnNhX3Jlc3RvcmVyKSh2b2lkKTsKK307CisKK3N0cnVjdCBzaWdhY3Rpb24geworICAgICAgICBfX3NpZ2hhbmRsZXJfdCBzYV9oYW5kbGVyOworICAgICAgICB1bnNpZ25lZCBsb25nIHNhX2ZsYWdzOworICAgICAgICB2b2lkICgqc2FfcmVzdG9yZXIpKHZvaWQpOworICAgICAgICBzaWdzZXRfdCBzYV9tYXNrOyAgICAgICAgICAgICAgIC8qIG1hc2sgbGFzdCBmb3IgZXh0ZW5zaWJpbGl0eSAqLworfTsKKworc3RydWN0IGtfc2lnYWN0aW9uIHsKKyAgICAgICAgc3RydWN0IHNpZ2FjdGlvbiBzYTsKK307CisKKyNkZWZpbmUgcHRyYWNlX3NpZ25hbF9kZWxpdmVyKHJlZ3MsIGNvb2tpZSkgZG8geyB9IHdoaWxlICgwKQorCisjZWxzZQorLyogSGVyZSB3ZSBtdXN0IGNhdGVyIHRvIGxpYmNzIHRoYXQgcG9rZSBhYm91dCBpbiBrZXJuZWwgaGVhZGVycy4gICovCisKK3N0cnVjdCBzaWdhY3Rpb24geworICAgICAgICB1bmlvbiB7CisgICAgICAgICAgX19zaWdoYW5kbGVyX3QgX3NhX2hhbmRsZXI7CisgICAgICAgICAgdm9pZCAoKl9zYV9zaWdhY3Rpb24pKGludCwgc3RydWN0IHNpZ2luZm8gKiwgdm9pZCAqKTsKKyAgICAgICAgfSBfdTsKKyNpZm5kZWYgX19zMzkweF9fIC8qIGxvdmVseSAqLworICAgICAgICBzaWdzZXRfdCBzYV9tYXNrOworICAgICAgICB1bnNpZ25lZCBsb25nIHNhX2ZsYWdzOworICAgICAgICB2b2lkICgqc2FfcmVzdG9yZXIpKHZvaWQpOworI2Vsc2UgIC8qIF9fczM5MHhfXyAqLworICAgICAgICB1bnNpZ25lZCBsb25nIHNhX2ZsYWdzOworICAgICAgICB2b2lkICgqc2FfcmVzdG9yZXIpKHZvaWQpOworCXNpZ3NldF90IHNhX21hc2s7CisjZW5kaWYgLyogX19zMzkweF9fICovCit9OworCisjZGVmaW5lIHNhX2hhbmRsZXIgICAgICBfdS5fc2FfaGFuZGxlcgorI2RlZmluZSBzYV9zaWdhY3Rpb24gICAgX3UuX3NhX3NpZ2FjdGlvbgorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCit0eXBlZGVmIHN0cnVjdCBzaWdhbHRzdGFjayB7CisgICAgICAgIHZvaWQgKnNzX3NwOworICAgICAgICBpbnQgc3NfZmxhZ3M7CisgICAgICAgIHNpemVfdCBzc19zaXplOworfSBzdGFja190OworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9zaWdwLmggYi9pbmNsdWRlL2FzbS1zMzkwL3NpZ3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTc5YmMzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tczM5MC9zaWdwLmgKQEAgLTAsMCArMSwxMzEgQEAKKy8qCisgKiAgaW5jbHVkZS9hc20tczM5MC9zaWdwLmgKKyAqCisgKiAgUzM5MCB2ZXJzaW9uCisgKiAgICBDb3B5cmlnaHQgKEMpIDE5OTkgSUJNIERldXRzY2hsYW5kIEVudHdpY2tsdW5nIEdtYkgsIElCTSBDb3Jwb3JhdGlvbgorICogICAgQXV0aG9yKHMpOiBEZW5pcyBKb3NlcGggQmFycm93IChkamJhcnJvd0BkZS5pYm0uY29tLGJhcnJvd19kakB5YWhvby5jb20pLAorICogICAgICAgICAgICAgICBNYXJ0aW4gU2Nod2lkZWZza3kgKHNjaHdpZGVmc2t5QGRlLmlibS5jb20pCisgKiAgICAgICAgICAgICAgIEhlaWtvIENhcnN0ZW5zIChoZWlrby5jYXJzdGVuc0BkZS5pYm0uY29tKQorICoKKyAqICBzaWdwLmggYnkgRC5KLiBCYXJyb3cgKGMpIElCTSAxOTk5CisgKiAgY29udGFpbnMgcm91dGluZXMgLyBzdHJ1Y3R1cmVzIGZvciBzaWduYWxsaW5nIG90aGVyIFMvMzkwIHByb2Nlc3NvcnMgaW4gYW4KKyAqICBTTVAgY29uZmlndXJhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fU0lHUF9fCisjZGVmaW5lIF9fU0lHUF9fCisKKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorCisvKiBnZXQgcmVhbCBjcHUgYWRkcmVzcyBmcm9tIGxvZ2ljYWwgY3B1IG51bWJlciAqLworZXh0ZXJuIHZvbGF0aWxlIGludCBfX2NwdV9sb2dpY2FsX21hcFtdOworCit0eXBlZGVmIGVudW0KK3sKKwlzaWdwX3VuYXNzaWduZWQ9MHgwLAorCXNpZ3Bfc2Vuc2UsCisJc2lncF9leHRlcm5hbF9jYWxsLAorCXNpZ3BfZW1lcmdlbmN5X3NpZ25hbCwKKwlzaWdwX3N0YXJ0LAorCXNpZ3Bfc3RvcCwKKwlzaWdwX3Jlc3RhcnQsCisJc2lncF91bmFzc2lnbmVkMSwKKwlzaWdwX3VuYXNzaWduZWQyLAorCXNpZ3Bfc3RvcF9hbmRfc3RvcmVfc3RhdHVzLAorCXNpZ3BfdW5hc3NpZ25lZDMsCisJc2lncF9pbml0aWFsX2NwdV9yZXNldCwKKwlzaWdwX2NwdV9yZXNldCwKKwlzaWdwX3NldF9wcmVmaXgsCisJc2lncF9zdG9yZV9zdGF0dXNfYXRfYWRkcmVzcywKKwlzaWdwX3N0b3JlX2V4dGVuZGVkX3N0YXR1c19hdF9hZGRyZXNzCit9IHNpZ3Bfb3JkZXJfY29kZTsKKwordHlwZWRlZiBfX3UzMiBzaWdwX3N0YXR1c193b3JkOworCit0eXBlZGVmIGVudW0KK3sKKyAgICAgICAgc2lncF9vcmRlcl9jb2RlX2FjY2VwdGVkPTAsCisJc2lncF9zdGF0dXNfc3RvcmVkLAorCXNpZ3BfYnVzeSwKKwlzaWdwX25vdF9vcGVyYXRpb25hbAorfSBzaWdwX2Njb2RlOworCisKKy8qCisgKiBEZWZpbml0aW9ucyBmb3IgdGhlIGV4dGVybmFsIGNhbGwKKyAqLworCisvKiAnQml0JyBzaWduYWxzLCBhc3luY2hyb25vdXMgKi8KK3R5cGVkZWYgZW51bQoreworCWVjX3NjaGVkdWxlPTAsCisJZWNfY2FsbF9mdW5jdGlvbiwKKwllY19iaXRfbGFzdAorfSBlY19iaXRfc2lnOworCisvKgorICogU2lnbmFsIHByb2Nlc3NvcgorICovCitleHRlcm4gX19pbmxpbmVfXyBzaWdwX2Njb2RlCitzaWduYWxfcHJvY2Vzc29yKF9fdTE2IGNwdV9hZGRyLCBzaWdwX29yZGVyX2NvZGUgb3JkZXJfY29kZSkKK3sKKwlzaWdwX2Njb2RlIGNjb2RlOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSIgICAgc3IgICAgIDEsMVxuIiAgICAgICAgLyogcGFyYW1ldGVyPTAgaW4gZ3ByIDEgKi8KKwkJIiAgICBzaWdwICAgMSwlMSwwKCUyKVxuIgorCQkiICAgIGlwbSAgICAlMFxuIgorCQkiICAgIHNybCAgICAlMCwyOFxuIgorCQk6ICI9ZCIgKGNjb2RlKQorCQk6ICJkIiAoX19jcHVfbG9naWNhbF9tYXBbY3B1X2FkZHJdKSwgImEiIChvcmRlcl9jb2RlKQorCQk6ICJjYyIgLCAibWVtb3J5IiwgIjEiICk7CisJcmV0dXJuIGNjb2RlOworfQorCisvKgorICogU2lnbmFsIHByb2Nlc3NvciB3aXRoIHBhcmFtZXRlcgorICovCitleHRlcm4gX19pbmxpbmVfXyBzaWdwX2Njb2RlCitzaWduYWxfcHJvY2Vzc29yX3AoX191MzIgcGFyYW1ldGVyLCBfX3UxNiBjcHVfYWRkciwKKwkJICAgc2lncF9vcmRlcl9jb2RlIG9yZGVyX2NvZGUpCit7CisJc2lncF9jY29kZSBjY29kZTsKKwkKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJIiAgICBsciAgICAgMSwlMVxuIiAgICAgICAvKiBwYXJhbWV0ZXIgaW4gZ3ByIDEgKi8KKwkJIiAgICBzaWdwICAgMSwlMiwwKCUzKVxuIgorCQkiICAgIGlwbSAgICAlMFxuIgorCQkiICAgIHNybCAgICAlMCwyOFxuIgorCQk6ICI9ZCIgKGNjb2RlKQorCQk6ICJkIiAocGFyYW1ldGVyKSwgImQiIChfX2NwdV9sb2dpY2FsX21hcFtjcHVfYWRkcl0pLAorICAgICAgICAgICAgICAgICAgImEiIChvcmRlcl9jb2RlKQorCQk6ICJjYyIgLCAibWVtb3J5IiwgIjEiICk7CisJcmV0dXJuIGNjb2RlOworfQorCisvKgorICogU2lnbmFsIHByb2Nlc3NvciB3aXRoIHBhcmFtZXRlciBhbmQgcmV0dXJuIHN0YXR1cworICovCitleHRlcm4gX19pbmxpbmVfXyBzaWdwX2Njb2RlCitzaWduYWxfcHJvY2Vzc29yX3BzKF9fdTMyICpzdGF0dXNwdHIsIF9fdTMyIHBhcmFtZXRlciwKKwkJICAgIF9fdTE2IGNwdV9hZGRyLCBzaWdwX29yZGVyX2NvZGUgb3JkZXJfY29kZSkKK3sKKwlzaWdwX2Njb2RlIGNjb2RlOworCQorCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkiICAgIHNyICAgICAyLDJcbiIgICAgICAgIC8qIGNsZWFyIHN0YXR1cyAqLworCQkiICAgIGxyICAgICAzLCUyXG4iICAgICAgIC8qIHBhcmFtZXRlciBpbiBncHIgMyAqLworCQkiICAgIHNpZ3AgICAyLCUzLDAoJTQpXG4iCisJCSIgICAgc3QgICAgIDIsJTFcbiIKKwkJIiAgICBpcG0gICAgJTBcbiIKKwkJIiAgICBzcmwgICAgJTAsMjhcbiIKKwkJOiAiPWQiIChjY29kZSksICI9bSIgKCpzdGF0dXNwdHIpCisJCTogImQiIChwYXJhbWV0ZXIpLCAiZCIgKF9fY3B1X2xvZ2ljYWxfbWFwW2NwdV9hZGRyXSksCisgICAgICAgICAgICAgICAgICAiYSIgKG9yZGVyX2NvZGUpCisJCTogImNjIiAsICJtZW1vcnkiLCAiMiIgLCAiMyIKKwkJKTsKKyAgIHJldHVybiBjY29kZTsKK30KKworI2VuZGlmIC8qIF9fU0lHUF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL3NtcC5oIGIvaW5jbHVkZS9hc20tczM5MC9zbXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDczNzg2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tczM5MC9zbXAuaApAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqICBpbmNsdWRlL2FzbS1zMzkwL3NtcC5oCisgKgorICogIFMzOTAgdmVyc2lvbgorICogICAgQ29weXJpZ2h0IChDKSAxOTk5IElCTSBEZXV0c2NobGFuZCBFbnR3aWNrbHVuZyBHbWJILCBJQk0gQ29ycG9yYXRpb24KKyAqICAgIEF1dGhvcihzKTogRGVuaXMgSm9zZXBoIEJhcnJvdyAoZGpiYXJyb3dAZGUuaWJtLmNvbSxiYXJyb3dfZGpAeWFob28uY29tKSwKKyAqICAgICAgICAgICAgICAgTWFydGluIFNjaHdpZGVmc2t5IChzY2h3aWRlZnNreUBkZS5pYm0uY29tKQorICogICAgICAgICAgICAgICBIZWlrbyBDYXJzdGVucyAoaGVpa28uY2Fyc3RlbnNAZGUuaWJtLmNvbSkKKyAqLworI2lmbmRlZiBfX0FTTV9TTVBfSAorI2RlZmluZSBfX0FTTV9TTVBfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKworI2lmIGRlZmluZWQoX19LRVJORUxfXykgJiYgZGVmaW5lZChDT05GSUdfU01QKSAmJiAhZGVmaW5lZChfX0FTU0VNQkxZX18pCisKKyNpbmNsdWRlIDxhc20vbG93Y29yZS5oPgorI2luY2x1ZGUgPGFzbS9zaWdwLmg+CisKKy8qCisgIHMzOTAgc3BlY2lmaWMgc21wLmMgaGVhZGVycworICovCit0eXBlZGVmIHN0cnVjdAoreworCWludCAgICAgICAgaW50cmVzdGluZzsKKwlzaWdwX2Njb2RlIGNjb2RlOyAKKwlfX3UzMiAgICAgIHN0YXR1czsKKwlfX3UxNiAgICAgIGNwdTsKK30gc2lncF9pbmZvOworCitleHRlcm4gaW50IHNtcF9jYWxsX2Z1bmN0aW9uX29uKHZvaWQgKCpmdW5jKSAodm9pZCAqaW5mbyksIHZvaWQgKmluZm8sCisJCQkJaW50IG5vbmF0b21pYywgaW50IHdhaXQsIGludCBjcHUpOworI2RlZmluZSBOT19QUk9DX0lECQkweEZGCQkvKiBObyBwcm9jZXNzb3IgbWFnaWMgbWFya2VyICovCisKKy8qCisgKglUaGlzIG1hZ2ljIGNvbnN0YW50IGNvbnRyb2xzIG91ciB3aWxsaW5nbmVzcyB0byB0cmFuc2ZlcgorICoJYSBwcm9jZXNzIGFjcm9zcyBDUFVzLiBTdWNoIGEgdHJhbnNmZXIgaW5jdXJzIG1pc3NlcyBvbiB0aGUgTDEKKyAqCWNhY2hlLCBhbmQgb24gYSBQNiBvciBQNSB3aXRoIG11bHRpcGxlIEwyIGNhY2hlcyBMMiBoaXRzLiBNeQorICoJZ3V0IGZlZWxpbmcgaXMgdGhpcyB3aWxsIHZhcnkgYnkgYm9hcmQgaW4gdmFsdWUuIEZvciBhIGJvYXJkCisgKgl3aXRoIHNlcGFyYXRlIEwyIGNhY2hlIGl0IHByb2JhYmx5IGRlcGVuZHMgYWxzbyBvbiB0aGUgUlNTLCBhbmQKKyAqCWZvciBhIGJvYXJkIHdpdGggc2hhcmVkIEwyIGNhY2hlIGl0IG91Z2h0IHRvIGRlY2F5IGZhc3QgYXMgb3RoZXIKKyAqCXByb2Nlc3NlcyBhcmUgcnVuLgorICovCisgCisjZGVmaW5lIFBST0NfQ0hBTkdFX1BFTkFMVFkJMjAJCS8qIFNjaGVkdWxlIHBlbmFsdHkgKi8KKworI2RlZmluZSBzbXBfcHJvY2Vzc29yX2lkKCkgKFMzOTBfbG93Y29yZS5jcHVfZGF0YS5jcHVfbnIpCisKK2V4dGVybiBpbnQgc21wX2dldF9jcHUoY3B1bWFza190IGNwdV9tYXApOworZXh0ZXJuIHZvaWQgc21wX3B1dF9jcHUoaW50IGNwdSk7CisKK2V4dGVybiBfX2lubGluZV9fIF9fdTE2IGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCh2b2lkKQoreworICAgICAgICBfX3UxNiBjcHVfYWRkcmVzczsKKyAKKyAgICAgICAgX19hc21fXyAoInN0YXAgJTBcbiIgOiAiPW0iIChjcHVfYWRkcmVzcykpOworICAgICAgICByZXR1cm4gY3B1X2FkZHJlc3M7Cit9CisKKy8qCisgKiByZXR1cm5zIDEgaWYgY3B1IGlzIGluIHN0b3BwZWQvY2hlY2sgc3RvcHBlZCBzdGF0ZSBvciBub3Qgb3BlcmF0aW9uYWwKKyAqIHJldHVybnMgMCBvdGhlcndpc2UKKyAqLworc3RhdGljIGlubGluZSBpbnQKK3NtcF9jcHVfbm90X3J1bm5pbmcoaW50IGNwdSkKK3sKKwlfX3UzMiBzdGF0dXM7CisKKwlzd2l0Y2ggKHNpZ25hbF9wcm9jZXNzb3JfcHMoJnN0YXR1cywgMCwgY3B1LCBzaWdwX3NlbnNlKSkgeworCWNhc2Ugc2lncF9vcmRlcl9jb2RlX2FjY2VwdGVkOgorCWNhc2Ugc2lncF9zdGF0dXNfc3RvcmVkOgorCQkvKiBDaGVjayBmb3Igc3RvcHBlZCBhbmQgY2hlY2sgc3RvcCBzdGF0ZSAqLworCQlpZiAoc3RhdHVzICYgMHg1MCkKKwkJCXJldHVybiAxOworCQlicmVhazsKKwljYXNlIHNpZ3Bfbm90X29wZXJhdGlvbmFsOgorCQlyZXR1cm4gMTsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgY3B1X2xvZ2ljYWxfbWFwKGNwdSkgKGNwdSkKKworZXh0ZXJuIGludCBfX2NwdV9kaXNhYmxlICh2b2lkKTsKK2V4dGVybiB2b2lkIF9fY3B1X2RpZSAodW5zaWduZWQgaW50IGNwdSk7CitleHRlcm4gdm9pZCBjcHVfZGllICh2b2lkKSBfX2F0dHJpYnV0ZV9fICgobm9yZXR1cm4pKTsKK2V4dGVybiBpbnQgX19jcHVfdXAgKHVuc2lnbmVkIGludCBjcHUpOworCisjZW5kaWYKKworI2lmbmRlZiBDT05GSUdfU01QCitzdGF0aWMgaW5saW5lIGludAorc21wX2NhbGxfZnVuY3Rpb25fb24odm9pZCAoKmZ1bmMpICh2b2lkICppbmZvKSwgdm9pZCAqaW5mbywKKwkJICAgICBpbnQgbm9uYXRvbWljLCBpbnQgd2FpdCwgaW50IGNwdSkKK3sKKwlmdW5jKGluZm8pOworCXJldHVybiAwOworfQorI2RlZmluZSBzbXBfZ2V0X2NwdShjcHUpICh7IDA7IH0pCisjZGVmaW5lIHNtcF9wdXRfY3B1KGNwdSkgKHsgMDsgfSkKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvc29ja2V0LmggYi9pbmNsdWRlL2FzbS1zMzkwL3NvY2tldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlOTZlZWMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL3NvY2tldC5oCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiAgaW5jbHVkZS9hc20tczM5MC9zb2NrZXQuaAorICoKKyAqICBTMzkwIHZlcnNpb24KKyAqCisgKiAgRGVyaXZlZCBmcm9tICJpbmNsdWRlL2FzbS1pMzg2L3NvY2tldC5oIgorICovCisKKyNpZm5kZWYgX0FTTV9TT0NLRVRfSAorI2RlZmluZSBfQVNNX1NPQ0tFVF9ICisKKyNpbmNsdWRlIDxhc20vc29ja2lvcy5oPgorCisvKiBGb3Igc2V0c29ja29wdCgyKSAqLworI2RlZmluZSBTT0xfU09DS0VUCTEKKworI2RlZmluZSBTT19ERUJVRwkxCisjZGVmaW5lIFNPX1JFVVNFQUREUgkyCisjZGVmaW5lIFNPX1RZUEUJCTMKKyNkZWZpbmUgU09fRVJST1IJNAorI2RlZmluZSBTT19ET05UUk9VVEUJNQorI2RlZmluZSBTT19CUk9BRENBU1QJNgorI2RlZmluZSBTT19TTkRCVUYJNworI2RlZmluZSBTT19SQ1ZCVUYJOAorI2RlZmluZSBTT19LRUVQQUxJVkUJOQorI2RlZmluZSBTT19PT0JJTkxJTkUJMTAKKyNkZWZpbmUgU09fTk9fQ0hFQ0sJMTEKKyNkZWZpbmUgU09fUFJJT1JJVFkJMTIKKyNkZWZpbmUgU09fTElOR0VSCTEzCisjZGVmaW5lIFNPX0JTRENPTVBBVAkxNAorLyogVG8gYWRkIDojZGVmaW5lIFNPX1JFVVNFUE9SVCAxNSAqLworI2RlZmluZSBTT19QQVNTQ1JFRAkxNgorI2RlZmluZSBTT19QRUVSQ1JFRAkxNworI2RlZmluZSBTT19SQ1ZMT1dBVAkxOAorI2RlZmluZSBTT19TTkRMT1dBVAkxOQorI2RlZmluZSBTT19SQ1ZUSU1FTwkyMAorI2RlZmluZSBTT19TTkRUSU1FTwkyMQorCisvKiBTZWN1cml0eSBsZXZlbHMgLSBhcyBwZXIgTlJMIElQdjYgLSBkb24ndCBhY3R1YWxseSBkbyBhbnl0aGluZyAqLworI2RlZmluZSBTT19TRUNVUklUWV9BVVRIRU5USUNBVElPTgkJMjIKKyNkZWZpbmUgU09fU0VDVVJJVFlfRU5DUllQVElPTl9UUkFOU1BPUlQJMjMKKyNkZWZpbmUgU09fU0VDVVJJVFlfRU5DUllQVElPTl9ORVRXT1JLCQkyNAorCisjZGVmaW5lIFNPX0JJTkRUT0RFVklDRQkyNQorCisvKiBTb2NrZXQgZmlsdGVyaW5nICovCisjZGVmaW5lIFNPX0FUVEFDSF9GSUxURVIgICAgICAgIDI2CisjZGVmaW5lIFNPX0RFVEFDSF9GSUxURVIgICAgICAgIDI3CisKKyNkZWZpbmUgU09fUEVFUk5BTUUJCTI4CisjZGVmaW5lIFNPX1RJTUVTVEFNUAkJMjkKKyNkZWZpbmUgU0NNX1RJTUVTVEFNUAkJU09fVElNRVNUQU1QCisKKyNkZWZpbmUgU09fQUNDRVBUQ09OTgkJMzAKKworI2RlZmluZSBTT19QRUVSU0VDCQkzMQorCisjZW5kaWYgLyogX0FTTV9TT0NLRVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9zb2NraW9zLmggYi9pbmNsdWRlL2FzbS1zMzkwL3NvY2tpb3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTJhZWI0ZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvc29ja2lvcy5oCkBAIC0wLDAgKzEsMjAgQEAKKy8qCisgKiAgaW5jbHVkZS9hc20tczM5MC9zb2NraW9zLmgKKyAqCisgKiAgUzM5MCB2ZXJzaW9uCisgKgorICogIERlcml2ZWQgZnJvbSAiaW5jbHVkZS9hc20taTM4Ni9zb2NraW9zLmgiCisgKi8KKworI2lmbmRlZiBfX0FSQ0hfUzM5MF9TT0NLSU9TX18KKyNkZWZpbmUgX19BUkNIX1MzOTBfU09DS0lPU19fCisKKy8qIFNvY2tldC1sZXZlbCBJL08gY29udHJvbCBjYWxscy4gKi8KKyNkZWZpbmUgRklPU0VUT1dOIAkweDg5MDEKKyNkZWZpbmUgU0lPQ1NQR1JQCTB4ODkwMgorI2RlZmluZSBGSU9HRVRPV04JMHg4OTAzCisjZGVmaW5lIFNJT0NHUEdSUAkweDg5MDQKKyNkZWZpbmUgU0lPQ0FUTUFSSwkweDg5MDUKKyNkZWZpbmUgU0lPQ0dTVEFNUAkweDg5MDYJCS8qIEdldCBzdGFtcCAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvc3BpbmxvY2suaCBiL2luY2x1ZGUvYXNtLXMzOTAvc3BpbmxvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2NjNzM2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tczM5MC9zcGlubG9jay5oCkBAIC0wLDAgKzEsMjUxIEBACisvKgorICogIGluY2x1ZGUvYXNtLXMzOTAvc3BpbmxvY2suaAorICoKKyAqICBTMzkwIHZlcnNpb24KKyAqICAgIENvcHlyaWdodCAoQykgMTk5OSBJQk0gRGV1dHNjaGxhbmQgRW50d2lja2x1bmcgR21iSCwgSUJNIENvcnBvcmF0aW9uCisgKiAgICBBdXRob3Iocyk6IE1hcnRpbiBTY2h3aWRlZnNreSAoc2Nod2lkZWZza3lAZGUuaWJtLmNvbSkKKyAqCisgKiAgRGVyaXZlZCBmcm9tICJpbmNsdWRlL2FzbS1pMzg2L3NwaW5sb2NrLmgiCisgKi8KKworI2lmbmRlZiBfX0FTTV9TUElOTE9DS19ICisjZGVmaW5lIF9fQVNNX1NQSU5MT0NLX0gKKworI2lmZGVmIF9fczM5MHhfXworLyoKKyAqIEdybXBoLCB0YWtlIGNhcmUgb2YgJSYjISB1c2VyIHNwYWNlIHByb2dyYW1zIHRoYXQgaW5jbHVkZQorICogYXNtL3NwaW5sb2NrLmguIFRoZSBkaWFnbm9zZSBpcyBvbmx5IGF2YWlsYWJsZSBpbiBrZXJuZWwKKyAqIGNvbnRleHQuCisgKi8KKyNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8YXNtL2xvd2NvcmUuaD4KKyNkZWZpbmUgX19ESUFHNDRfSU5TTiAiZXgiCisjZGVmaW5lIF9fRElBRzQ0X09QRVJBTkQgX19MQ19ESUFHNDRfT1BDT0RFCisjZWxzZQorI2RlZmluZSBfX0RJQUc0NF9JTlNOICIjIgorI2RlZmluZSBfX0RJQUc0NF9PUEVSQU5EIDAKKyNlbmRpZgorI2VuZGlmIC8qIF9fczM5MHhfXyAqLworCisvKgorICogU2ltcGxlIHNwaW4gbG9jayBvcGVyYXRpb25zLiAgVGhlcmUgYXJlIHR3byB2YXJpYW50cywgb25lIGNsZWFycyBJUlEncworICogb24gdGhlIGxvY2FsIHByb2Nlc3Nvciwgb25lIGRvZXMgbm90LgorICoKKyAqIFdlIG1ha2Ugbm8gZmFpcm5lc3MgYXNzdW1wdGlvbnMuIFRoZXkgaGF2ZSBhIGNvc3QuCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworCXZvbGF0aWxlIHVuc2lnbmVkIGludCBsb2NrOworI2lmZGVmIENPTkZJR19QUkVFTVBUCisJdW5zaWduZWQgaW50IGJyZWFrX2xvY2s7CisjZW5kaWYKK30gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKDQpKSkgc3BpbmxvY2tfdDsKKworI2RlZmluZSBTUElOX0xPQ0tfVU5MT0NLRUQgKHNwaW5sb2NrX3QpIHsgMCB9CisjZGVmaW5lIHNwaW5fbG9ja19pbml0KGxwKSBkbyB7IChscCktPmxvY2sgPSAwOyB9IHdoaWxlKDApCisjZGVmaW5lIHNwaW5fdW5sb2NrX3dhaXQobHApCWRvIHsgYmFycmllcigpOyB9IHdoaWxlKCgodm9sYXRpbGUgc3BpbmxvY2tfdCAqKShscCkpLT5sb2NrKQorI2RlZmluZSBzcGluX2lzX2xvY2tlZCh4KSAoKHgpLT5sb2NrICE9IDApCisjZGVmaW5lIF9yYXdfc3Bpbl9sb2NrX2ZsYWdzKGxvY2ssIGZsYWdzKSBfcmF3X3NwaW5fbG9jayhsb2NrKQorCitleHRlcm4gaW5saW5lIHZvaWQgX3Jhd19zcGluX2xvY2soc3BpbmxvY2tfdCAqbHApCit7CisjaWZuZGVmIF9fczM5MHhfXworCXVuc2lnbmVkIGludCByZWcxLCByZWcyOworICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiICAgIGJyYXMgICUwLDFmXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiMDogIGRpYWcgIDAsMCw2OFxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIjE6ICBzbHIgICAlMSwlMVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBjcyAgICAlMSwlMCwwKCUzKVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBqbCAgICAwYlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiPSZkIiAocmVnMSksICI9JmQiIChyZWcyKSwgIj1tIiAobHAtPmxvY2spCisJCQkgICA6ICJhIiAoJmxwLT5sb2NrKSwgIm0iIChscC0+bG9jaykKKwkJCSAgIDogImNjIiwgIm1lbW9yeSIgKTsKKyNlbHNlIC8qIF9fczM5MHhfXyAqLworCXVuc2lnbmVkIGxvbmcgcmVnMSwgcmVnMjsKKyAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oIiAgICBicmFzICAlMSwxZlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIjA6ICAiIF9fRElBRzQ0X0lOU04gIiAwLCU0XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTogIHNsciAgICUwLCUwXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGNzICAgICUwLCUxLDAoJTMpXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGpsICAgIDBiXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICI9JmQiIChyZWcxKSwgIj0mZCIgKHJlZzIpLCAiPW0iIChscC0+bG9jaykKKwkJCSAgIDogImEiICgmbHAtPmxvY2spLCAiaSIgKF9fRElBRzQ0X09QRVJBTkQpLAorCQkJICAgICAibSIgKGxwLT5sb2NrKSA6ICJjYyIsICJtZW1vcnkiICk7CisjZW5kaWYgLyogX19zMzkweF9fICovCit9CisKK2V4dGVybiBpbmxpbmUgaW50IF9yYXdfc3Bpbl90cnlsb2NrKHNwaW5sb2NrX3QgKmxwKQoreworCXVuc2lnbmVkIGxvbmcgcmVnOworCXVuc2lnbmVkIGludCByZXN1bHQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygiICAgIGJhc3IgICUxLDBcbiIKKwkJCSAgICIwOiAgY3MgICAgJTAsJTEsMCglMykiCisJCQkgICA6ICI9ZCIgKHJlc3VsdCksICI9JmQiIChyZWcpLCAiPW0iIChscC0+bG9jaykKKwkJCSAgIDogImEiICgmbHAtPmxvY2spLCAibSIgKGxwLT5sb2NrKSwgIjAiICgwKQorCQkJICAgOiAiY2MiLCAibWVtb3J5IiApOworCXJldHVybiAhcmVzdWx0OworfQorCitleHRlcm4gaW5saW5lIHZvaWQgX3Jhd19zcGluX3VubG9jayhzcGlubG9ja190ICpscCkKK3sKKwl1bnNpZ25lZCBpbnQgb2xkOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oImNzICUwLCUzLDAoJTQpIgorCQkJICAgOiAiPWQiIChvbGQpLCAiPW0iIChscC0+bG9jaykKKwkJCSAgIDogIjAiIChscC0+bG9jayksICJkIiAoMCksICJhIiAobHApCisJCQkgICA6ICJjYyIsICJtZW1vcnkiICk7Cit9CisJCQorLyoKKyAqIFJlYWQtd3JpdGUgc3BpbmxvY2tzLCBhbGxvd2luZyBtdWx0aXBsZSByZWFkZXJzCisgKiBidXQgb25seSBvbmUgd3JpdGVyLgorICoKKyAqIE5PVEUhIGl0IGlzIHF1aXRlIGNvbW1vbiB0byBoYXZlIHJlYWRlcnMgaW4gaW50ZXJydXB0cworICogYnV0IG5vIGludGVycnVwdCB3cml0ZXJzLiBGb3IgdGhvc2UgY2lyY3Vtc3RhbmNlcyB3ZQorICogY2FuICJtaXgiIGlycS1zYWZlIGxvY2tzIC0gYW55IHdyaXRlciBuZWVkcyB0byBnZXQgYQorICogaXJxLXNhZmUgd3JpdGUtbG9jaywgYnV0IHJlYWRlcnMgY2FuIGdldCBub24taXJxc2FmZQorICogcmVhZC1sb2Nrcy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgbG9jazsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIG93bmVyX3BjOworI2lmZGVmIENPTkZJR19QUkVFTVBUCisJdW5zaWduZWQgaW50IGJyZWFrX2xvY2s7CisjZW5kaWYKK30gcndsb2NrX3Q7CisKKyNkZWZpbmUgUldfTE9DS19VTkxPQ0tFRCAocndsb2NrX3QpIHsgMCwgMCB9CisKKyNkZWZpbmUgcndsb2NrX2luaXQoeCkJZG8geyAqKHgpID0gUldfTE9DS19VTkxPQ0tFRDsgfSB3aGlsZSgwKQorCisvKioKKyAqIHJlYWRfY2FuX2xvY2sgLSB3b3VsZCByZWFkX3RyeWxvY2soKSBzdWNjZWVkPworICogQGxvY2s6IHRoZSByd2xvY2sgaW4gcXVlc3Rpb24uCisgKi8KKyNkZWZpbmUgcmVhZF9jYW5fbG9jayh4KSAoKGludCkoeCktPmxvY2sgPj0gMCkKKworLyoqCisgKiB3cml0ZV9jYW5fbG9jayAtIHdvdWxkIHdyaXRlX3RyeWxvY2soKSBzdWNjZWVkPworICogQGxvY2s6IHRoZSByd2xvY2sgaW4gcXVlc3Rpb24uCisgKi8KKyNkZWZpbmUgd3JpdGVfY2FuX2xvY2soeCkgKCh4KS0+bG9jayA9PSAwKQorCisjaWZuZGVmIF9fczM5MHhfXworI2RlZmluZSBfcmF3X3JlYWRfbG9jayhydykgICBcCisgICAgICAgIGFzbSB2b2xhdGlsZSgiICAgbCAgICAgMiwwKCUxKVxuIiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICIgICBqICAgICAxZlxuIiAgICAgXAorICAgICAgICAgICAgICAgICAgICAgIjA6IGRpYWcgIDAsMCw2OFxuIiBcCisgICAgICAgICAgICAgICAgICAgICAiMTogbGEgICAgMiwwKDIpXG4iICAgICAvKiBjbGVhciBoaWdoICg9d3JpdGUpIGJpdCAqLyBcCisgICAgICAgICAgICAgICAgICAgICAiICAgbGEgICAgMywxKDIpXG4iICAgICAvKiBvbmUgbW9yZSByZWFkZXIgKi8gXAorICAgICAgICAgICAgICAgICAgICAgIiAgIGNzICAgIDIsMywwKCUxKVxuIiAgLyogdHJ5IHRvIHdyaXRlIG5ldyB2YWx1ZSAqLyBcCisgICAgICAgICAgICAgICAgICAgICAiICAgamwgICAgMGIiICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgIDogIj1tIiAoKHJ3KS0+bG9jaykgOiAiYSIgKCYocncpLT5sb2NrKSwgXAorCQkgICAgICAgIm0iICgocncpLT5sb2NrKSA6ICIyIiwgIjMiLCAiY2MiLCAibWVtb3J5IiApCisjZWxzZSAvKiBfX3MzOTB4X18gKi8KKyNkZWZpbmUgX3Jhd19yZWFkX2xvY2socncpICAgXAorICAgICAgICBhc20gdm9sYXRpbGUoIiAgIGxnICAgIDIsMCglMSlcbiIgICBcCisgICAgICAgICAgICAgICAgICAgICAiICAgaiAgICAgMWZcbiIgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICIwOiAiIF9fRElBRzQ0X0lOU04gIiAwLCUyXG4iIFwKKyAgICAgICAgICAgICAgICAgICAgICIxOiBuaWhoICAyLDB4N2ZmZlxuIiAvKiBjbGVhciBoaWdoICg9d3JpdGUpIGJpdCAqLyBcCisgICAgICAgICAgICAgICAgICAgICAiICAgbGEgICAgMywxKDIpXG4iICAgLyogb25lIG1vcmUgcmVhZGVyICovICBcCisgICAgICAgICAgICAgICAgICAgICAiICAgY3NnICAgMiwzLDAoJTEpXG4iIC8qIHRyeSB0byB3cml0ZSBuZXcgdmFsdWUgKi8gXAorICAgICAgICAgICAgICAgICAgICAgIiAgIGpsICAgIDBiIiAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICA6ICI9bSIgKChydyktPmxvY2spIFwKKwkJICAgICA6ICJhIiAoJihydyktPmxvY2spLCAiaSIgKF9fRElBRzQ0X09QRVJBTkQpLCBcCisJCSAgICAgICAibSIgKChydyktPmxvY2spIDogIjIiLCAiMyIsICJjYyIsICJtZW1vcnkiICkKKyNlbmRpZiAvKiBfX3MzOTB4X18gKi8KKworI2lmbmRlZiBfX3MzOTB4X18KKyNkZWZpbmUgX3Jhd19yZWFkX3VubG9jayhydykgXAorICAgICAgICBhc20gdm9sYXRpbGUoIiAgIGwgICAgIDIsMCglMSlcbiIgICBcCisgICAgICAgICAgICAgICAgICAgICAiICAgaiAgICAgMWZcbiIgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICIwOiBkaWFnICAwLDAsNjhcbiIgXAorICAgICAgICAgICAgICAgICAgICAgIjE6IGxyICAgIDMsMlxuIiAgICBcCisgICAgICAgICAgICAgICAgICAgICAiICAgYWhpICAgMywtMVxuIiAgICAvKiBvbmUgbGVzcyByZWFkZXIgKi8gXAorICAgICAgICAgICAgICAgICAgICAgIiAgIGNzICAgIDIsMywwKCUxKVxuIiBcCisgICAgICAgICAgICAgICAgICAgICAiICAgamwgICAgMGIiICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgIDogIj1tIiAoKHJ3KS0+bG9jaykgOiAiYSIgKCYocncpLT5sb2NrKSwgXAorCQkgICAgICAgIm0iICgocncpLT5sb2NrKSA6ICIyIiwgIjMiLCAiY2MiLCAibWVtb3J5IiApCisjZWxzZSAvKiBfX3MzOTB4X18gKi8KKyNkZWZpbmUgX3Jhd19yZWFkX3VubG9jayhydykgXAorICAgICAgICBhc20gdm9sYXRpbGUoIiAgIGxnICAgIDIsMCglMSlcbiIgICBcCisgICAgICAgICAgICAgICAgICAgICAiICAgaiAgICAgMWZcbiIgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICIwOiAiIF9fRElBRzQ0X0lOU04gIiAwLCUyXG4iIFwKKyAgICAgICAgICAgICAgICAgICAgICIxOiBsZ3IgICAzLDJcbiIgICAgXAorICAgICAgICAgICAgICAgICAgICAgIiAgIGJjdGdyIDMsMFxuIiAgICAvKiBvbmUgbGVzcyByZWFkZXIgKi8gXAorICAgICAgICAgICAgICAgICAgICAgIiAgIGNzZyAgIDIsMywwKCUxKVxuIiBcCisgICAgICAgICAgICAgICAgICAgICAiICAgamwgICAgMGIiICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgIDogIj1tIiAoKHJ3KS0+bG9jaykgXAorCQkgICAgIDogImEiICgmKHJ3KS0+bG9jayksICJpIiAoX19ESUFHNDRfT1BFUkFORCksIFwKKwkJICAgICAgICJtIiAoKHJ3KS0+bG9jaykgOiAiMiIsICIzIiwgImNjIiwgIm1lbW9yeSIgKQorI2VuZGlmIC8qIF9fczM5MHhfXyAqLworCisjaWZuZGVmIF9fczM5MHhfXworI2RlZmluZSBfcmF3X3dyaXRlX2xvY2socncpIFwKKyAgICAgICAgYXNtIHZvbGF0aWxlKCIgICBsaGkgICAzLDFcbiIgICAgXAorICAgICAgICAgICAgICAgICAgICAgIiAgIHNsbCAgIDMsMzFcbiIgICAgLyogbmV3IGxvY2sgdmFsdWUgPSAweDgwMDAwMDAwICovIFwKKyAgICAgICAgICAgICAgICAgICAgICIgICBqICAgICAxZlxuIiAgICAgXAorICAgICAgICAgICAgICAgICAgICAgIjA6IGRpYWcgIDAsMCw2OFxuIiBcCisgICAgICAgICAgICAgICAgICAgICAiMTogc2xyICAgMiwyXG4iICAgICAvKiBvbGQgbG9jayB2YWx1ZSBtdXN0IGJlIDAgKi8gXAorICAgICAgICAgICAgICAgICAgICAgIiAgIGNzICAgIDIsMywwKCUxKVxuIiBcCisgICAgICAgICAgICAgICAgICAgICAiICAgamwgICAgMGIiICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgIDogIj1tIiAoKHJ3KS0+bG9jaykgOiAiYSIgKCYocncpLT5sb2NrKSwgXAorCQkgICAgICAgIm0iICgocncpLT5sb2NrKSA6ICIyIiwgIjMiLCAiY2MiLCAibWVtb3J5IiApCisjZWxzZSAvKiBfX3MzOTB4X18gKi8KKyNkZWZpbmUgX3Jhd193cml0ZV9sb2NrKHJ3KSBcCisgICAgICAgIGFzbSB2b2xhdGlsZSgiICAgbGxpaGggMywweDgwMDBcbiIgLyogbmV3IGxvY2sgdmFsdWUgPSAweDgwLi4uMCAqLyBcCisgICAgICAgICAgICAgICAgICAgICAiICAgaiAgICAgMWZcbiIgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgIjA6ICIgX19ESUFHNDRfSU5TTiAiIDAsJTJcbiIgICBcCisgICAgICAgICAgICAgICAgICAgICAiMTogc2xnciAgMiwyXG4iICAgICAgLyogb2xkIGxvY2sgdmFsdWUgbXVzdCBiZSAwICovIFwKKyAgICAgICAgICAgICAgICAgICAgICIgICBjc2cgICAyLDMsMCglMSlcbiIgXAorICAgICAgICAgICAgICAgICAgICAgIiAgIGpsICAgIDBiIiAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgIDogIj1tIiAoKHJ3KS0+bG9jaykgXAorCQkgICAgIDogImEiICgmKHJ3KS0+bG9jayksICJpIiAoX19ESUFHNDRfT1BFUkFORCksIFwKKwkJICAgICAgICJtIiAoKHJ3KS0+bG9jaykgOiAiMiIsICIzIiwgImNjIiwgIm1lbW9yeSIgKQorI2VuZGlmIC8qIF9fczM5MHhfXyAqLworCisjaWZuZGVmIF9fczM5MHhfXworI2RlZmluZSBfcmF3X3dyaXRlX3VubG9jayhydykgXAorICAgICAgICBhc20gdm9sYXRpbGUoIiAgIHNsciAgIDMsM1xuIiAgICAgLyogbmV3IGxvY2sgdmFsdWUgPSAwICovIFwKKyAgICAgICAgICAgICAgICAgICAgICIgICBqICAgICAxZlxuIiAgICAgXAorICAgICAgICAgICAgICAgICAgICAgIjA6IGRpYWcgIDAsMCw2OFxuIiBcCisgICAgICAgICAgICAgICAgICAgICAiMTogbGhpICAgMiwxXG4iICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICIgICBzbGwgICAyLDMxXG4iICAgIC8qIG9sZCBsb2NrIHZhbHVlIG11c3QgYmUgMHg4MDAwMDAwMCAqLyBcCisgICAgICAgICAgICAgICAgICAgICAiICAgY3MgICAgMiwzLDAoJTEpXG4iIFwKKyAgICAgICAgICAgICAgICAgICAgICIgICBqbCAgICAwYiIgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgOiAiPW0iICgocncpLT5sb2NrKSA6ICJhIiAoJihydyktPmxvY2spLCBcCisJCSAgICAgICAibSIgKChydyktPmxvY2spIDogIjIiLCAiMyIsICJjYyIsICJtZW1vcnkiICkKKyNlbHNlIC8qIF9fczM5MHhfXyAqLworI2RlZmluZSBfcmF3X3dyaXRlX3VubG9jayhydykgXAorICAgICAgICBhc20gdm9sYXRpbGUoIiAgIHNsZ3IgIDMsM1xuIiAgICAgIC8qIG5ldyBsb2NrIHZhbHVlID0gMCAqLyBcCisgICAgICAgICAgICAgICAgICAgICAiICAgaiAgICAgMWZcbiIgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgIjA6ICIgX19ESUFHNDRfSU5TTiAiIDAsJTJcbiIgICBcCisgICAgICAgICAgICAgICAgICAgICAiMTogbGxpaGggMiwweDgwMDBcbiIgLyogb2xkIGxvY2sgdmFsdWUgbXVzdCBiZSAweDguLjAgKi9cCisgICAgICAgICAgICAgICAgICAgICAiICAgY3NnICAgMiwzLDAoJTEpXG4iICAgXAorICAgICAgICAgICAgICAgICAgICAgIiAgIGpsICAgIDBiIiAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgIDogIj1tIiAoKHJ3KS0+bG9jaykgXAorCQkgICAgIDogImEiICgmKHJ3KS0+bG9jayksICJpIiAoX19ESUFHNDRfT1BFUkFORCksIFwKKwkJICAgICAgICJtIiAoKHJ3KS0+bG9jaykgOiAiMiIsICIzIiwgImNjIiwgIm1lbW9yeSIgKQorI2VuZGlmIC8qIF9fczM5MHhfXyAqLworCisjZGVmaW5lIF9yYXdfcmVhZF90cnlsb2NrKGxvY2spIGdlbmVyaWNfcmF3X3JlYWRfdHJ5bG9jayhsb2NrKQorCitleHRlcm4gaW5saW5lIGludCBfcmF3X3dyaXRlX3RyeWxvY2socndsb2NrX3QgKnJ3KQoreworCXVuc2lnbmVkIGxvbmcgcmVzdWx0LCByZWc7CisJCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisjaWZuZGVmIF9fczM5MHhfXworCQkJICAgICAiICAgbGhpICAlMSwxXG4iCisJCQkgICAgICIgICBzbGwgICUxLDMxXG4iCisJCQkgICAgICIgICBjcyAgICUwLCUxLDAoJTMpIgorI2Vsc2UgLyogX19zMzkweF9fICovCisJCQkgICAgICIgICBsbGloaCAlMSwweDgwMDBcbiIKKwkJCSAgICAgIjA6IGNzZyAlMCwlMSwwKCUzKVxuIgorI2VuZGlmIC8qIF9fczM5MHhfXyAqLworCQkJICAgICA6ICI9ZCIgKHJlc3VsdCksICI9JmQiIChyZWcpLCAiPW0iIChydy0+bG9jaykKKwkJCSAgICAgOiAiYSIgKCZydy0+bG9jayksICJtIiAocnctPmxvY2spLCAiMCIgKDBVTCkKKwkJCSAgICAgOiAiY2MiLCAibWVtb3J5IiApOworCXJldHVybiByZXN1bHQgPT0gMDsKK30KKworI2VuZGlmIC8qIF9fQVNNX1NQSU5MT0NLX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvc3RhdC5oIGIvaW5jbHVkZS9hc20tczM5MC9zdGF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkyOTU5ZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvc3RhdC5oCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogIGluY2x1ZGUvYXNtLXMzOTAvc3RhdC5oCisgKgorICogIFMzOTAgdmVyc2lvbgorICoKKyAqICBEZXJpdmVkIGZyb20gImluY2x1ZGUvYXNtLWkzODYvc3RhdC5oIgorICovCisKKyNpZm5kZWYgX1MzOTBfU1RBVF9ICisjZGVmaW5lIF9TMzkwX1NUQVRfSAorCisjaWZuZGVmIF9fczM5MHhfXworc3RydWN0IF9fb2xkX2tlcm5lbF9zdGF0IHsKKyAgICAgICAgdW5zaWduZWQgc2hvcnQgc3RfZGV2OworICAgICAgICB1bnNpZ25lZCBzaG9ydCBzdF9pbm87CisgICAgICAgIHVuc2lnbmVkIHNob3J0IHN0X21vZGU7CisgICAgICAgIHVuc2lnbmVkIHNob3J0IHN0X25saW5rOworICAgICAgICB1bnNpZ25lZCBzaG9ydCBzdF91aWQ7CisgICAgICAgIHVuc2lnbmVkIHNob3J0IHN0X2dpZDsKKyAgICAgICAgdW5zaWduZWQgc2hvcnQgc3RfcmRldjsKKyAgICAgICAgdW5zaWduZWQgbG9uZyAgc3Rfc2l6ZTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyAgc3RfYXRpbWU7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgIHN0X210aW1lOworICAgICAgICB1bnNpZ25lZCBsb25nICBzdF9jdGltZTsKK307CisKK3N0cnVjdCBzdGF0IHsKKyAgICAgICAgdW5zaWduZWQgc2hvcnQgc3RfZGV2OworICAgICAgICB1bnNpZ25lZCBzaG9ydCBfX3BhZDE7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgIHN0X2lubzsKKyAgICAgICAgdW5zaWduZWQgc2hvcnQgc3RfbW9kZTsKKyAgICAgICAgdW5zaWduZWQgc2hvcnQgc3Rfbmxpbms7CisgICAgICAgIHVuc2lnbmVkIHNob3J0IHN0X3VpZDsKKyAgICAgICAgdW5zaWduZWQgc2hvcnQgc3RfZ2lkOworICAgICAgICB1bnNpZ25lZCBzaG9ydCBzdF9yZGV2OworICAgICAgICB1bnNpZ25lZCBzaG9ydCBfX3BhZDI7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgIHN0X3NpemU7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgIHN0X2Jsa3NpemU7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgIHN0X2Jsb2NrczsKKyAgICAgICAgdW5zaWduZWQgbG9uZyAgc3RfYXRpbWU7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgIHN0X2F0aW1lX25zZWM7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgIHN0X210aW1lOworICAgICAgICB1bnNpZ25lZCBsb25nICBzdF9tdGltZV9uc2VjOworICAgICAgICB1bnNpZ25lZCBsb25nICBzdF9jdGltZTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyAgc3RfY3RpbWVfbnNlYzsKKyAgICAgICAgdW5zaWduZWQgbG9uZyAgX191bnVzZWQ0OworICAgICAgICB1bnNpZ25lZCBsb25nICBfX3VudXNlZDU7Cit9OworCisvKiBUaGlzIG1hdGNoZXMgc3RydWN0IHN0YXQ2NCBpbiBnbGliYzIuMSwgaGVuY2UgdGhlIGFic29sdXRlbHkKKyAqIGluc2FuZSBhbW91bnRzIG9mIHBhZGRpbmcgYXJvdW5kIGRldl90J3MuCisgKi8KK3N0cnVjdCBzdGF0NjQgeworICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcJc3RfZGV2OworICAgICAgICB1bnNpZ25lZCBpbnQgICAgX19wYWQxOworI2RlZmluZSBTVEFUNjRfSEFTX0JST0tFTl9TVF9JTk8gICAgICAgIDEKKyAgICAgICAgdW5zaWduZWQgbG9uZyAgIF9fc3RfaW5vOworICAgICAgICB1bnNpZ25lZCBpbnQgICAgc3RfbW9kZTsKKyAgICAgICAgdW5zaWduZWQgaW50ICAgIHN0X25saW5rOworICAgICAgICB1bnNpZ25lZCBsb25nICAgc3RfdWlkOworICAgICAgICB1bnNpZ25lZCBsb25nICAgc3RfZ2lkOworICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcJc3RfcmRldjsKKyAgICAgICAgdW5zaWduZWQgaW50ICAgIF9fcGFkMzsKKyAgICAgICAgbG9uZyBsb25nCXN0X3NpemU7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgICBzdF9ibGtzaXplOworICAgICAgICB1bnNpZ25lZCBjaGFyICAgX19wYWQ0WzRdOworICAgICAgICB1bnNpZ25lZCBsb25nICAgX19wYWQ1OyAgICAgLyogZnV0dXJlIHBvc3NpYmxlIHN0X2Jsb2NrcyBoaWdoIGJpdHMgKi8KKyAgICAgICAgdW5zaWduZWQgbG9uZyAgIHN0X2Jsb2NrczsgIC8qIE51bWJlciA1MTItYnl0ZSBibG9ja3MgYWxsb2NhdGVkLiAqLworICAgICAgICB1bnNpZ25lZCBsb25nICAgc3RfYXRpbWU7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgICBzdF9hdGltZV9uc2VjOworICAgICAgICB1bnNpZ25lZCBsb25nICAgc3RfbXRpbWU7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgICBzdF9tdGltZV9uc2VjOworICAgICAgICB1bnNpZ25lZCBsb25nICAgc3RfY3RpbWU7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgICBzdF9jdGltZV9uc2VjOyAgLyogd2lsbCBiZSBoaWdoIDMyIGJpdHMgb2YgY3RpbWUgc29tZWRheSAqLworICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcJc3RfaW5vOworfTsKKworI2Vsc2UgLyogX19zMzkweF9fICovCisKK3N0cnVjdCBzdGF0IHsKKyAgICAgICAgdW5zaWduZWQgbG9uZyAgc3RfZGV2OworICAgICAgICB1bnNpZ25lZCBsb25nICBzdF9pbm87CisgICAgICAgIHVuc2lnbmVkIGxvbmcgIHN0X25saW5rOworICAgICAgICB1bnNpZ25lZCBpbnQgICBzdF9tb2RlOworICAgICAgICB1bnNpZ25lZCBpbnQgICBzdF91aWQ7CisgICAgICAgIHVuc2lnbmVkIGludCAgIHN0X2dpZDsKKyAgICAgICAgdW5zaWduZWQgaW50ICAgX19wYWQxOworICAgICAgICB1bnNpZ25lZCBsb25nICBzdF9yZGV2OworICAgICAgICB1bnNpZ25lZCBsb25nICBzdF9zaXplOworICAgICAgICB1bnNpZ25lZCBsb25nICBzdF9hdGltZTsKKwl1bnNpZ25lZCBsb25nICBzdF9hdGltZV9uc2VjOworICAgICAgICB1bnNpZ25lZCBsb25nICBzdF9tdGltZTsKKwl1bnNpZ25lZCBsb25nICBzdF9tdGltZV9uc2VjOworICAgICAgICB1bnNpZ25lZCBsb25nICBzdF9jdGltZTsKKwl1bnNpZ25lZCBsb25nICBzdF9jdGltZV9uc2VjOworICAgICAgICB1bnNpZ25lZCBsb25nICBzdF9ibGtzaXplOworICAgICAgICBsb25nICAgICAgICAgICBzdF9ibG9ja3M7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgIF9fdW51c2VkWzNdOworfTsKKworI2VuZGlmIC8qIF9fczM5MHhfXyAqLworCisjZGVmaW5lIFNUQVRfSEFWRV9OU0VDIDEKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL3N0YXRmcy5oIGIvaW5jbHVkZS9hc20tczM5MC9zdGF0ZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTlhNDU1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tczM5MC9zdGF0ZnMuaApAQCAtMCwwICsxLDcxIEBACisvKgorICogIGluY2x1ZGUvYXNtLXMzOTAvc3RhdGZzLmgKKyAqCisgKiAgUzM5MCB2ZXJzaW9uCisgKgorICogIERlcml2ZWQgZnJvbSAiaW5jbHVkZS9hc20taTM4Ni9zdGF0ZnMuaCIKKyAqLworCisjaWZuZGVmIF9TMzkwX1NUQVRGU19ICisjZGVmaW5lIF9TMzkwX1NUQVRGU19ICisKKyNpZm5kZWYgX19zMzkweF9fCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc3RhdGZzLmg+CisjZWxzZQorCisjaWZuZGVmIF9fS0VSTkVMX1NUUklDVF9OQU1FUworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwordHlwZWRlZiBfX2tlcm5lbF9mc2lkX3QJZnNpZF90OworCisjZW5kaWYKKworLyoKKyAqIFRoaXMgaXMgdWdseSAtLSB3ZSdyZSBhbHJlYWR5IDY0LWJpdCBjbGVhbiwgc28ganVzdCBkdXBsaWNhdGUgdGhlIAorICogZGVmaW5pdGlvbnMuCisgKi8KK3N0cnVjdCBzdGF0ZnMgeworCWludCAgZl90eXBlOworCWludCAgZl9ic2l6ZTsKKwlsb25nIGZfYmxvY2tzOworCWxvbmcgZl9iZnJlZTsKKwlsb25nIGZfYmF2YWlsOworCWxvbmcgZl9maWxlczsKKwlsb25nIGZfZmZyZWU7CisJX19rZXJuZWxfZnNpZF90IGZfZnNpZDsKKwlpbnQgIGZfbmFtZWxlbjsKKwlpbnQgIGZfZnJzaXplOworCWludCAgZl9zcGFyZVs1XTsKK307CisKK3N0cnVjdCBzdGF0ZnM2NCB7CisJaW50ICBmX3R5cGU7CisJaW50ICBmX2JzaXplOworCWxvbmcgZl9ibG9ja3M7CisJbG9uZyBmX2JmcmVlOworCWxvbmcgZl9iYXZhaWw7CisJbG9uZyBmX2ZpbGVzOworCWxvbmcgZl9mZnJlZTsKKwlfX2tlcm5lbF9mc2lkX3QgZl9mc2lkOworCWludCAgZl9uYW1lbGVuOworCWludCAgZl9mcnNpemU7CisJaW50ICBmX3NwYXJlWzVdOworfTsKKworc3RydWN0IGNvbXBhdF9zdGF0ZnM2NCB7CisJX191MzIgZl90eXBlOworCV9fdTMyIGZfYnNpemU7CisJX191NjQgZl9ibG9ja3M7CisJX191NjQgZl9iZnJlZTsKKwlfX3U2NCBmX2JhdmFpbDsKKwlfX3U2NCBmX2ZpbGVzOworCV9fdTY0IGZfZmZyZWU7CisJX19rZXJuZWxfZnNpZF90IGZfZnNpZDsKKwlfX3UzMiBmX25hbWVsZW47CisJX191MzIgZl9mcnNpemU7CisJX191MzIgZl9zcGFyZVs1XTsKK307CisKKyNlbmRpZiAvKiBfX3MzOTB4X18gKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9zdHJpbmcuaCBiL2luY2x1ZGUvYXNtLXMzOTAvc3RyaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNhNGMzOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvc3RyaW5nLmgKQEAgLTAsMCArMSwxMzcgQEAKKy8qCisgKiAgaW5jbHVkZS9hc20tczM5MC9zdHJpbmcuaAorICoKKyAqICBTMzkwIHZlcnNpb24KKyAqICAgIENvcHlyaWdodCAoQykgMTk5OSBJQk0gRGV1dHNjaGxhbmQgRW50d2lja2x1bmcgR21iSCwgSUJNIENvcnBvcmF0aW9uCisgKiAgICBBdXRob3Iocyk6IE1hcnRpbiBTY2h3aWRlZnNreSAoc2Nod2lkZWZza3lAZGUuaWJtLmNvbSksCisgKi8KKworI2lmbmRlZiBfUzM5MF9TVFJJTkdfSF8KKyNkZWZpbmUgX1MzOTBfU1RSSU5HX0hfCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpZm5kZWYgX0xJTlVYX1RZUEVTX0gKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2VuZGlmCisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNQ0hSCS8qIGlubGluZSAmIGFyY2ggZnVuY3Rpb24gKi8KKyNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNQ01QCS8qIGFyY2ggZnVuY3Rpb24gKi8KKyNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNQ1BZCS8qIGdjYyBidWlsdGluICYgYXJjaCBmdW5jdGlvbiAqLworI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1TQ0FOCS8qIGlubGluZSAmIGFyY2ggZnVuY3Rpb24gKi8KKyNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNU0VUCS8qIGdjYyBidWlsdGluICYgYXJjaCBmdW5jdGlvbiAqLworI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJDQVQJLyogaW5saW5lICYgYXJjaCBmdW5jdGlvbiAqLworI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJDTVAJLyogYXJjaCBmdW5jdGlvbiAqLworI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJDUFkJLyogaW5saW5lICYgYXJjaCBmdW5jdGlvbiAqLworI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJMQ0FUCS8qIGFyY2ggZnVuY3Rpb24gKi8KKyNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSTENQWQkvKiBhcmNoIGZ1bmN0aW9uICovCisjZGVmaW5lIF9fSEFWRV9BUkNIX1NUUkxFTgkvKiBpbmxpbmUgJiBhcmNoIGZ1bmN0aW9uICovCisjZGVmaW5lIF9fSEFWRV9BUkNIX1NUUk5DQVQJLyogYXJjaCBmdW5jdGlvbiAqLworI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJOQ1BZCS8qIGFyY2ggZnVuY3Rpb24gKi8KKyNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSTkxFTgkvKiBpbmxpbmUgJiBhcmNoIGZ1bmN0aW9uICovCisjZGVmaW5lIF9fSEFWRV9BUkNIX1NUUlJDSFIJLyogYXJjaCBmdW5jdGlvbiAqLworI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJTVFIJLyogYXJjaCBmdW5jdGlvbiAqLworCisvKiBQcm90b3R5cGVzIGZvciBub24taW5saW5lZCBhcmNoIHN0cmluZ3MgZnVuY3Rpb25zLiAqLworZXh0ZXJuIGludCBtZW1jbXAoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVfdCk7CitleHRlcm4gdm9pZCAqbWVtY3B5KHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOworZXh0ZXJuIHZvaWQgKm1lbXNldCh2b2lkICosIGludCwgc2l6ZV90KTsKK2V4dGVybiBpbnQgc3RyY21wKGNvbnN0IGNoYXIgKixjb25zdCBjaGFyICopOworZXh0ZXJuIHNpemVfdCBzdHJsY2F0KGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOworZXh0ZXJuIHNpemVfdCBzdHJsY3B5KGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOworZXh0ZXJuIGNoYXIgKnN0cm5jYXQoY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CitleHRlcm4gY2hhciAqc3RybmNweShjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKK2V4dGVybiBjaGFyICpzdHJyY2hyKGNvbnN0IGNoYXIgKiwgaW50KTsKK2V4dGVybiBjaGFyICpzdHJzdHIoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworCisjdW5kZWYgX19IQVZFX0FSQ0hfTUVNTU9WRQorI3VuZGVmIF9fSEFWRV9BUkNIX1NUUkNIUgorI3VuZGVmIF9fSEFWRV9BUkNIX1NUUk5DSFIKKyN1bmRlZiBfX0hBVkVfQVJDSF9TVFJOQ01QCisjdW5kZWYgX19IQVZFX0FSQ0hfU1RSTklDTVAKKyN1bmRlZiBfX0hBVkVfQVJDSF9TVFJQQlJLCisjdW5kZWYgX19IQVZFX0FSQ0hfU1RSU0VQCisjdW5kZWYgX19IQVZFX0FSQ0hfU1RSU1BOCisKKyNpZiAhZGVmaW5lZChJTl9BUkNIX1NUUklOR19DKQorCitzdGF0aWMgaW5saW5lIHZvaWQgKm1lbWNocihjb25zdCB2b2lkICogcywgaW50IGMsIHNpemVfdCBuKQoreworCXJlZ2lzdGVyIGludCByMCBhc20oIjAiKSA9IChjaGFyKSBjOworCWNvbnN0IHZvaWQgKnJldCA9IHMgKyBuOworCisJYXNtIHZvbGF0aWxlICgiMDogc3JzdCAgJTAsJTFcbiIKKwkJICAgICAgIiAgIGpvICAgIDBiXG4iCisJCSAgICAgICIgICBqbAkxZlxuIgorCQkgICAgICAiICAgbGEgICAgJTAsMFxuIgorCQkgICAgICAiMToiCisJCSAgICAgIDogIithIiAocmV0KSwgIismYSIgKHMpIDogImQiIChyMCkgOiAiY2MiICk7CisJcmV0dXJuICh2b2lkICopIHJldDsKK30KKworc3RhdGljIGlubGluZSB2b2lkICptZW1zY2FuKHZvaWQgKnMsIGludCBjLCBzaXplX3QgbikKK3sKKwlyZWdpc3RlciBpbnQgcjAgYXNtKCIwIikgPSAoY2hhcikgYzsKKwljb25zdCB2b2lkICpyZXQgPSBzICsgbjsKKworCWFzbSB2b2xhdGlsZSAoIjA6IHNyc3QgICUwLCUxXG4iCisJCSAgICAgICIgICBqbyAgICAwYlxuIgorCQkgICAgICA6ICIrYSIgKHJldCksICIrJmEiIChzKSA6ICJkIiAocjApIDogImNjIiApOworCXJldHVybiAodm9pZCAqKSByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgY2hhciAqc3RyY2F0KGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjKQoreworCXJlZ2lzdGVyIGludCByMCBhc20oIjAiKSA9IDA7CisJdW5zaWduZWQgbG9uZyBkdW1teTsKKwljaGFyICpyZXQgPSBkc3Q7CisKKwlhc20gdm9sYXRpbGUgKCIwOiBzcnN0ICAlMCwlMVxuIgorCQkgICAgICAiICAgam8gICAgMGJcbiIKKwkJICAgICAgIjE6IG12c3QgICUwLCUyXG4iCisJCSAgICAgICIgICBqbyAgICAxYiIKKwkJICAgICAgOiAiPSZhIiAoZHVtbXkpLCAiK2EiIChkc3QpLCAiK2EiIChzcmMpCisJCSAgICAgIDogImQiIChyMCksICIwIiAoMCkgOiAiY2MiLCAibWVtb3J5IiApOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgY2hhciAqc3RyY3B5KGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjKQoreworCXJlZ2lzdGVyIGludCByMCBhc20oIjAiKSA9IDA7CisJY2hhciAqcmV0ID0gZHN0OworCisJYXNtIHZvbGF0aWxlICgiMDogbXZzdCAgJTAsJTFcbiIKKwkJICAgICAgIiAgIGpvICAgIDBiIgorCQkgICAgICA6ICIrJmEiIChkc3QpLCAiKyZhIiAoc3JjKSA6ICJkIiAocjApCisJCSAgICAgIDogImNjIiwgIm1lbW9yeSIgKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIHNpemVfdCBzdHJsZW4oY29uc3QgY2hhciAqcykKK3sKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIHIwIGFzbSgiMCIpID0gMDsKKwljb25zdCBjaGFyICp0bXAgPSBzOworCisJYXNtIHZvbGF0aWxlICgiMDogc3JzdCAgJTAsJTFcbiIKKwkJICAgICAgIiAgIGpvICAgIDBiIgorCQkgICAgICA6ICIrZCIgKHIwKSwgIithIiAodG1wKSA6ICA6ICJjYyIgKTsKKwlyZXR1cm4gcjAgLSAodW5zaWduZWQgbG9uZykgczsKK30KKworc3RhdGljIGlubGluZSBzaXplX3Qgc3Rybmxlbihjb25zdCBjaGFyICogcywgc2l6ZV90IG4pCit7CisJcmVnaXN0ZXIgaW50IHIwIGFzbSgiMCIpID0gMDsKKwljb25zdCBjaGFyICp0bXAgPSBzOworCWNvbnN0IGNoYXIgKmVuZCA9IHMgKyBuOworCisJYXNtIHZvbGF0aWxlICgiMDogc3JzdCAgJTAsJTFcbiIKKwkJICAgICAgIiAgIGpvICAgIDBiIgorCQkgICAgICA6ICIrYSIgKGVuZCksICIrYSIgKHRtcCkgOiAiZCIgKHIwKSAgOiAiY2MiICk7CisJcmV0dXJuIGVuZCAtIHM7Cit9CisKKyNlbmRpZiAvKiAhSU5fQVJDSF9TVFJJTkdfQyAqLworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX19TMzkwX1NUUklOR19IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9zdXNwZW5kLmggYi9pbmNsdWRlL2FzbS1zMzkwL3N1c3BlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjM0NTgwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tczM5MC9zdXNwZW5kLmgKQEAgLTAsMCArMSw1IEBACisjaWZuZGVmIF9fQVNNX1MzOTBfU1VTUEVORF9ICisjZGVmaW5lIF9fQVNNX1MzOTBfU1VTUEVORF9ICisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tczM5MC9zeXN0ZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTUxNGQ3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tczM5MC9zeXN0ZW0uaApAQCAtMCwwICsxLDQ3NyBAQAorLyoKKyAqICBpbmNsdWRlL2FzbS1zMzkwL3N5c3RlbS5oCisgKgorICogIFMzOTAgdmVyc2lvbgorICogICAgQ29weXJpZ2h0IChDKSAxOTk5IElCTSBEZXV0c2NobGFuZCBFbnR3aWNrbHVuZyBHbWJILCBJQk0gQ29ycG9yYXRpb24KKyAqICAgIEF1dGhvcihzKTogTWFydGluIFNjaHdpZGVmc2t5IChzY2h3aWRlZnNreUBkZS5pYm0uY29tKSwKKyAqCisgKiAgRGVyaXZlZCBmcm9tICJpbmNsdWRlL2FzbS1pMzg2L3N5c3RlbS5oIgorICovCisKKyNpZm5kZWYgX19BU01fU1lTVEVNX0gKKyNkZWZpbmUgX19BU01fU1lTVEVNX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKworI2lmZGVmIF9fS0VSTkVMX18KKworc3RydWN0IHRhc2tfc3RydWN0OworCitleHRlcm4gc3RydWN0IHRhc2tfc3RydWN0ICpfX3N3aXRjaF90byh2b2lkICosIHZvaWQgKik7CisKKyNpZmRlZiBfX3MzOTB4X18KKyNkZWZpbmUgX19GTEFHX1NISUZUIDU2CisjZWxzZSAvKiAhIF9fczM5MHhfXyAqLworI2RlZmluZSBfX0ZMQUdfU0hJRlQgMjQKKyNlbmRpZiAvKiAhIF9fczM5MHhfXyAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgc2F2ZV9mcF9yZWdzKHMzOTBfZnBfcmVncyAqZnByZWdzKQoreworCWFzbSB2b2xhdGlsZSAoCisJCSIgICBzdGQgICAwLDgoJTEpXG4iCisJCSIgICBzdGQgICAyLDI0KCUxKVxuIgorCQkiICAgc3RkICAgNCw0MCglMSlcbiIKKwkJIiAgIHN0ZCAgIDYsNTYoJTEpIgorCQk6ICI9bSIgKCpmcHJlZ3MpIDogImEiIChmcHJlZ3MpLCAibSIgKCpmcHJlZ3MpIDogIm1lbW9yeSIgKTsKKwlpZiAoIU1BQ0hJTkVfSEFTX0lFRUUpCisJCXJldHVybjsKKwlhc20gdm9sYXRpbGUoCisJCSIgICBzdGZwYyAwKCUxKVxuIgorCQkiICAgc3RkICAgMSwxNiglMSlcbiIKKwkJIiAgIHN0ZCAgIDMsMzIoJTEpXG4iCisJCSIgICBzdGQgICA1LDQ4KCUxKVxuIgorCQkiICAgc3RkICAgNyw2NCglMSlcbiIKKwkJIiAgIHN0ZCAgIDgsNzIoJTEpXG4iCisJCSIgICBzdGQgICA5LDgwKCUxKVxuIgorCQkiICAgc3RkICAgMTAsODgoJTEpXG4iCisJCSIgICBzdGQgICAxMSw5NiglMSlcbiIKKwkJIiAgIHN0ZCAgIDEyLDEwNCglMSlcbiIKKwkJIiAgIHN0ZCAgIDEzLDExMiglMSlcbiIKKwkJIiAgIHN0ZCAgIDE0LDEyMCglMSlcbiIKKwkJIiAgIHN0ZCAgIDE1LDEyOCglMSlcbiIKKwkJOiAiPW0iICgqZnByZWdzKSA6ICJhIiAoZnByZWdzKSwgIm0iICgqZnByZWdzKSA6ICJtZW1vcnkiICk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByZXN0b3JlX2ZwX3JlZ3MoczM5MF9mcF9yZWdzICpmcHJlZ3MpCit7CisJYXNtIHZvbGF0aWxlICgKKwkJIiAgIGxkICAgIDAsOCglMClcbiIKKwkJIiAgIGxkICAgIDIsMjQoJTApXG4iCisJCSIgICBsZCAgICA0LDQwKCUwKVxuIgorCQkiICAgbGQgICAgNiw1NiglMCkiCisJCTogOiAiYSIgKGZwcmVncyksICJtIiAoKmZwcmVncykgKTsKKwlpZiAoIU1BQ0hJTkVfSEFTX0lFRUUpCisJCXJldHVybjsKKwlhc20gdm9sYXRpbGUoCisJCSIgICBsZnBjICAwKCUwKVxuIgorCQkiICAgbGQgICAgMSwxNiglMClcbiIKKwkJIiAgIGxkICAgIDMsMzIoJTApXG4iCisJCSIgICBsZCAgICA1LDQ4KCUwKVxuIgorCQkiICAgbGQgICAgNyw2NCglMClcbiIKKwkJIiAgIGxkICAgIDgsNzIoJTApXG4iCisJCSIgICBsZCAgICA5LDgwKCUwKVxuIgorCQkiICAgbGQgICAgMTAsODgoJTApXG4iCisJCSIgICBsZCAgICAxMSw5NiglMClcbiIKKwkJIiAgIGxkICAgIDEyLDEwNCglMClcbiIKKwkJIiAgIGxkICAgIDEzLDExMiglMClcbiIKKwkJIiAgIGxkICAgIDE0LDEyMCglMClcbiIKKwkJIiAgIGxkICAgIDE1LDEyOCglMClcbiIKKwkJOiA6ICJhIiAoZnByZWdzKSwgIm0iICgqZnByZWdzKSApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2F2ZV9hY2Nlc3NfcmVncyh1bnNpZ25lZCBpbnQgKmFjcnMpCit7CisJYXNtIHZvbGF0aWxlICgic3RhbSAwLDE1LDAoJTApIiA6IDogImEiIChhY3JzKSA6ICJtZW1vcnkiICk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByZXN0b3JlX2FjY2Vzc19yZWdzKHVuc2lnbmVkIGludCAqYWNycykKK3sKKwlhc20gdm9sYXRpbGUgKCJsYW0gMCwxNSwwKCUwKSIgOiA6ICJhIiAoYWNycykgKTsKK30KKworI2RlZmluZSBzd2l0Y2hfdG8ocHJldixuZXh0LGxhc3QpIGRvIHsJCQkJCSAgICAgXAorCWlmIChwcmV2ID09IG5leHQpCQkJCQkJICAgICBcCisJCWJyZWFrOwkJCQkJCQkgICAgIFwKKwlzYXZlX2ZwX3JlZ3MoJnByZXYtPnRocmVhZC5mcF9yZWdzKTsJCQkJICAgICBcCisJcmVzdG9yZV9mcF9yZWdzKCZuZXh0LT50aHJlYWQuZnBfcmVncyk7CQkJCSAgICAgXAorCXNhdmVfYWNjZXNzX3JlZ3MoJnByZXYtPnRocmVhZC5hY3JzWzBdKTsJCQkgICAgIFwKKwlyZXN0b3JlX2FjY2Vzc19yZWdzKCZuZXh0LT50aHJlYWQuYWNyc1swXSk7CQkJICAgICBcCisJcHJldiA9IF9fc3dpdGNoX3RvKHByZXYsbmV4dCk7CQkJCQkgICAgIFwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgcHJlcGFyZV9hcmNoX3N3aXRjaChycSwgbmV4dCkJZG8geyB9IHdoaWxlKDApCisjZGVmaW5lIHRhc2tfcnVubmluZyhycSwgcCkJCSgocnEpLT5jdXJyID09IChwKSkKKworI2lmZGVmIENPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HCitleHRlcm4gdm9pZCBhY2NvdW50X3VzZXJfdnRpbWUoc3RydWN0IHRhc2tfc3RydWN0ICopOworZXh0ZXJuIHZvaWQgYWNjb3VudF9zeXN0ZW1fdnRpbWUoc3RydWN0IHRhc2tfc3RydWN0ICopOworCisjZGVmaW5lIGZpbmlzaF9hcmNoX3N3aXRjaChycSwgcHJldikgZG8gewkJCQkgICAgIFwKKwlzZXRfZnMoY3VycmVudC0+dGhyZWFkLm1tX3NlZ21lbnQpOwkJCQkgICAgIFwKKwlzcGluX3VubG9jaygmKHJxKS0+bG9jayk7CQkJCQkgICAgIFwKKwlhY2NvdW50X3N5c3RlbV92dGltZShwcmV2KTsJCQkJCSAgICAgXAorCWxvY2FsX2lycV9lbmFibGUoKTsJCQkJCQkgICAgIFwKK30gd2hpbGUgKDApCisKKyNlbHNlCisKKyNkZWZpbmUgZmluaXNoX2FyY2hfc3dpdGNoKHJxLCBwcmV2KSBkbyB7CQkJCSAgICAgXAorCXNldF9mcyhjdXJyZW50LT50aHJlYWQubW1fc2VnbWVudCk7CQkJCSAgICAgXAorCXNwaW5fdW5sb2NrX2lycSgmKHJxKS0+bG9jayk7CQkJCQkgICAgIFwKK30gd2hpbGUgKDApCisKKyNlbmRpZgorCisjZGVmaW5lIG5vcCgpIF9fYXNtX18gX192b2xhdGlsZV9fICgibm9wIikKKworI2RlZmluZSB4Y2hnKHB0cix4KSBcCisgICgoX190eXBlb2ZfXygqKHB0cikpKV9feGNoZygodW5zaWduZWQgbG9uZykoeCksKHZvaWQgKikocHRyKSxzaXplb2YoKihwdHIpKSkpCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX3hjaGcodW5zaWduZWQgbG9uZyB4LCB2b2lkICogcHRyLCBpbnQgc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHIsIG9sZDsKKwlpbnQgc2hpZnQ7CisKKyAgICAgICAgc3dpdGNoIChzaXplKSB7CisJY2FzZSAxOgorCQlhZGRyID0gKHVuc2lnbmVkIGxvbmcpIHB0cjsKKwkJc2hpZnQgPSAoMyBeIChhZGRyICYgMykpIDw8IDM7CisJCWFkZHIgXj0gYWRkciAmIDM7CisJCWFzbSB2b2xhdGlsZSgKKwkJCSIgICAgbCAgICUwLDAoJTQpXG4iCisJCQkiMDogIGxyICAwLCUwXG4iCisJCQkiICAgIG5yICAwLCUzXG4iCisJCQkiICAgIG9yICAwLCUyXG4iCisJCQkiICAgIGNzICAlMCwwLDAoJTQpXG4iCisJCQkiICAgIGpsICAwYlxuIgorCQkJOiAiPSZkIiAob2xkKSwgIj1tIiAoKihpbnQgKikgYWRkcikKKwkJCTogImQiICh4IDw8IHNoaWZ0KSwgImQiICh+KDI1NSA8PCBzaGlmdCkpLCAiYSIgKGFkZHIpLAorCQkJICAibSIgKCooaW50ICopIGFkZHIpIDogIm1lbW9yeSIsICJjYyIsICIwIiApOworCQl4ID0gb2xkID4+IHNoaWZ0OworCQlicmVhazsKKwljYXNlIDI6CisJCWFkZHIgPSAodW5zaWduZWQgbG9uZykgcHRyOworCQlzaGlmdCA9ICgyIF4gKGFkZHIgJiAyKSkgPDwgMzsKKwkJYWRkciBePSBhZGRyICYgMjsKKwkJYXNtIHZvbGF0aWxlKAorCQkJIiAgICBsICAgJTAsMCglNClcbiIKKwkJCSIwOiAgbHIgIDAsJTBcbiIKKwkJCSIgICAgbnIgIDAsJTNcbiIKKwkJCSIgICAgb3IgIDAsJTJcbiIKKwkJCSIgICAgY3MgICUwLDAsMCglNClcbiIKKwkJCSIgICAgamwgIDBiXG4iCisJCQk6ICI9JmQiIChvbGQpLCAiPW0iICgqKGludCAqKSBhZGRyKQorCQkJOiAiZCIgKHggPDwgc2hpZnQpLCAiZCIgKH4oNjU1MzUgPDwgc2hpZnQpKSwgImEiIChhZGRyKSwKKwkJCSAgIm0iICgqKGludCAqKSBhZGRyKSA6ICJtZW1vcnkiLCAiY2MiLCAiMCIgKTsKKwkJeCA9IG9sZCA+PiBzaGlmdDsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlhc20gdm9sYXRpbGUgKAorCQkJIiAgICBsICAgJTAsMCglMylcbiIKKwkJCSIwOiAgY3MgICUwLCUyLDAoJTMpXG4iCisJCQkiICAgIGpsICAwYlxuIgorCQkJOiAiPSZkIiAob2xkKSwgIj1tIiAoKihpbnQgKikgcHRyKQorCQkJOiAiZCIgKHgpLCAiYSIgKHB0ciksICJtIiAoKihpbnQgKikgcHRyKQorCQkJOiAibWVtb3J5IiwgImNjIiApOworCQl4ID0gb2xkOworCQlicmVhazsKKyNpZmRlZiBfX3MzOTB4X18KKwljYXNlIDg6CisJCWFzbSB2b2xhdGlsZSAoCisJCQkiICAgIGxnICAlMCwwKCUzKVxuIgorCQkJIjA6ICBjc2cgJTAsJTIsMCglMylcbiIKKwkJCSIgICAgamwgIDBiXG4iCisJCQk6ICI9JmQiIChvbGQpLCAiPW0iICgqKGxvbmcgKikgcHRyKQorCQkJOiAiZCIgKHgpLCAiYSIgKHB0ciksICJtIiAoKihsb25nICopIHB0cikKKwkJCTogIm1lbW9yeSIsICJjYyIgKTsKKwkJeCA9IG9sZDsKKwkJYnJlYWs7CisjZW5kaWYgLyogX19zMzkweF9fICovCisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHg7Cit9CisKKy8qCisgKiBBdG9taWMgY29tcGFyZSBhbmQgZXhjaGFuZ2UuICBDb21wYXJlIE9MRCB3aXRoIE1FTSwgaWYgaWRlbnRpY2FsLAorICogc3RvcmUgTkVXIGluIE1FTS4gIFJldHVybiB0aGUgaW5pdGlhbCB2YWx1ZSBpbiBNRU0uICBTdWNjZXNzIGlzCisgKiBpbmRpY2F0ZWQgYnkgY29tcGFyaW5nIFJFVFVSTiB3aXRoIE9MRC4KKyAqLworCisjZGVmaW5lIF9fSEFWRV9BUkNIX0NNUFhDSEcgMQorCisjZGVmaW5lIGNtcHhjaGcocHRyLG8sbilcCisJKChfX3R5cGVvZl9fKCoocHRyKSkpX19jbXB4Y2hnKChwdHIpLCh1bnNpZ25lZCBsb25nKShvKSxcCisJCQkJCSh1bnNpZ25lZCBsb25nKShuKSxzaXplb2YoKihwdHIpKSkpCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZworX19jbXB4Y2hnKHZvbGF0aWxlIHZvaWQgKnB0ciwgdW5zaWduZWQgbG9uZyBvbGQsIHVuc2lnbmVkIGxvbmcgbmV3LCBpbnQgc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHIsIHByZXYsIHRtcDsKKwlpbnQgc2hpZnQ7CisKKyAgICAgICAgc3dpdGNoIChzaXplKSB7CisJY2FzZSAxOgorCQlhZGRyID0gKHVuc2lnbmVkIGxvbmcpIHB0cjsKKwkJc2hpZnQgPSAoMyBeIChhZGRyICYgMykpIDw8IDM7CisJCWFkZHIgXj0gYWRkciAmIDM7CisJCWFzbSB2b2xhdGlsZSgKKwkJCSIgICAgbCAgICUwLDAoJTQpXG4iCisJCQkiMDogIG5yICAlMCwlNVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBsciAgJTEsJTBcbiIKKwkJCSIgICAgb3IgICUwLCUyXG4iCisJCQkiICAgIG9yICAlMSwlM1xuIgorCQkJIiAgICBjcyAgJTAsJTEsMCglNClcbiIKKwkJCSIgICAgam5sIDFmXG4iCisJCQkiICAgIHhyICAlMSwlMFxuIgorCQkJIiAgICBuciAgJTEsJTVcbiIKKwkJCSIgICAgam56IDBiXG4iCisJCQkiMToiCisJCQk6ICI9JmQiIChwcmV2KSwgIj0mZCIgKHRtcCkKKwkJCTogImQiIChvbGQgPDwgc2hpZnQpLCAiZCIgKG5ldyA8PCBzaGlmdCksICJhIiAocHRyKSwKKwkJCSAgImQiICh+KDI1NSA8PCBzaGlmdCkpCisJCQk6ICJtZW1vcnkiLCAiY2MiICk7CisJCXJldHVybiBwcmV2ID4+IHNoaWZ0OworCWNhc2UgMjoKKwkJYWRkciA9ICh1bnNpZ25lZCBsb25nKSBwdHI7CisJCXNoaWZ0ID0gKDIgXiAoYWRkciAmIDIpKSA8PCAzOworCQlhZGRyIF49IGFkZHIgJiAyOworCQlhc20gdm9sYXRpbGUoCisJCQkiICAgIGwgICAlMCwwKCU0KVxuIgorCQkJIjA6ICBuciAgJTAsJTVcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICIgICAgbHIgICUxLCUwXG4iCisJCQkiICAgIG9yICAlMCwlMlxuIgorCQkJIiAgICBvciAgJTEsJTNcbiIKKwkJCSIgICAgY3MgICUwLCUxLDAoJTQpXG4iCisJCQkiICAgIGpubCAxZlxuIgorCQkJIiAgICB4ciAgJTEsJTBcbiIKKwkJCSIgICAgbnIgICUxLCU1XG4iCisJCQkiICAgIGpueiAwYlxuIgorCQkJIjE6IgorCQkJOiAiPSZkIiAocHJldiksICI9JmQiICh0bXApCisJCQk6ICJkIiAob2xkIDw8IHNoaWZ0KSwgImQiIChuZXcgPDwgc2hpZnQpLCAiYSIgKHB0ciksCisJCQkgICJkIiAofig2NTUzNSA8PCBzaGlmdCkpCisJCQk6ICJtZW1vcnkiLCAiY2MiICk7CisJCXJldHVybiBwcmV2ID4+IHNoaWZ0OworCWNhc2UgNDoKKwkJYXNtIHZvbGF0aWxlICgKKwkJCSIgICAgY3MgICUwLCUyLDAoJTMpXG4iCisJCQk6ICI9JmQiIChwcmV2KSA6ICIwIiAob2xkKSwgImQiIChuZXcpLCAiYSIgKHB0cikKKwkJCTogIm1lbW9yeSIsICJjYyIgKTsKKwkJcmV0dXJuIHByZXY7CisjaWZkZWYgX19zMzkweF9fCisJY2FzZSA4OgorCQlhc20gdm9sYXRpbGUgKAorCQkJIiAgICBjc2cgJTAsJTIsMCglMylcbiIKKwkJCTogIj0mZCIgKHByZXYpIDogIjAiIChvbGQpLCAiZCIgKG5ldyksICJhIiAocHRyKQorCQkJOiAibWVtb3J5IiwgImNjIiApOworCQlyZXR1cm4gcHJldjsKKyNlbmRpZiAvKiBfX3MzOTB4X18gKi8KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gb2xkOworfQorCisvKgorICogRm9yY2Ugc3RyaWN0IENQVSBvcmRlcmluZy4KKyAqIEFuZCB5ZXMsIHRoaXMgaXMgcmVxdWlyZWQgb24gVVAgdG9vIHdoZW4gd2UncmUgdGFsa2luZworICogdG8gZGV2aWNlcy4KKyAqCisgKiBUaGlzIGlzIHZlcnkgc2ltaWxhciB0byB0aGUgcHBjIGVpZWlvL3N5bmMgaW5zdHJ1Y3Rpb24gaW4gdGhhdCBpcworICogZG9lcyBhIGNoZWNrcG9pbnQgc3luY3JvbmlzYXRpb24gJiBtYWtlcyBzdXJlIHRoYXQgCisgKiBhbGwgbWVtb3J5IG9wcyBoYXZlIGNvbXBsZXRlZCB3cnQgb3RoZXIgQ1BVJ3MgKCBzZWUgNy0xNSBQT1AgIERKQiApLgorICovCisKKyNkZWZpbmUgZWllaW8oKSAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCAiYmNyIDE1LDAiIDogOiA6ICJtZW1vcnkiICkgCisjIGRlZmluZSBTWU5DX09USEVSX0NPUkVTKHgpICAgZWllaW8oKSAKKyNkZWZpbmUgbWIoKSAgICBlaWVpbygpCisjZGVmaW5lIHJtYigpICAgZWllaW8oKQorI2RlZmluZSB3bWIoKSAgIGVpZWlvKCkKKyNkZWZpbmUgcmVhZF9iYXJyaWVyX2RlcGVuZHMoKSBkbyB7IH0gd2hpbGUoMCkKKyNkZWZpbmUgc21wX21iKCkgICAgICAgbWIoKQorI2RlZmluZSBzbXBfcm1iKCkgICAgICBybWIoKQorI2RlZmluZSBzbXBfd21iKCkgICAgICB3bWIoKQorI2RlZmluZSBzbXBfcmVhZF9iYXJyaWVyX2RlcGVuZHMoKSAgICByZWFkX2JhcnJpZXJfZGVwZW5kcygpCisjZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpICAgICBzbXBfbWIoKQorI2RlZmluZSBzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpICAgICAgc21wX21iKCkKKworCisjZGVmaW5lIHNldF9tYih2YXIsIHZhbHVlKSAgICAgIGRvIHsgdmFyID0gdmFsdWU7IG1iKCk7IH0gd2hpbGUgKDApCisjZGVmaW5lIHNldF93bWIodmFyLCB2YWx1ZSkgICAgIGRvIHsgdmFyID0gdmFsdWU7IHdtYigpOyB9IHdoaWxlICgwKQorCisvKiBpbnRlcnJ1cHQgY29udHJvbC4uICovCisjZGVmaW5lIGxvY2FsX2lycV9lbmFibGUoKSAoeyBcCisgICAgICAgIHVuc2lnbmVkIGxvbmcgIF9fZHVtbXk7IFwKKyAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCBcCisgICAgICAgICAgICAgICAgInN0b3NtIDAoJTEpLDB4MDMiIFwKKwkJOiAiPW0iIChfX2R1bW15KSA6ICJhIiAoJl9fZHVtbXkpIDogIm1lbW9yeSIgKTsgXAorICAgICAgICB9KQorCisjZGVmaW5lIGxvY2FsX2lycV9kaXNhYmxlKCkgKHsgXAorICAgICAgICB1bnNpZ25lZCBsb25nIF9fZmxhZ3M7IFwKKyAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCBcCisgICAgICAgICAgICAgICAgInN0bnNtIDAoJTEpLDB4ZmMiIDogIj1tIiAoX19mbGFncykgOiAiYSIgKCZfX2ZsYWdzKSApOyBcCisgICAgICAgIF9fZmxhZ3M7IFwKKyAgICAgICAgfSkKKworI2RlZmluZSBsb2NhbF9zYXZlX2ZsYWdzKHgpIFwKKyAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInN0b3NtIDAoJTEpLDAiIDogIj1tIiAoeCkgOiAiYSIgKCZ4KSwgIm0iICh4KSApCisKKyNkZWZpbmUgbG9jYWxfaXJxX3Jlc3RvcmUoeCkgXAorICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygic3NtICAgMCglMCkiIDogOiAiYSIgKCZ4KSwgIm0iICh4KSA6ICJtZW1vcnkiKQorCisjZGVmaW5lIGlycXNfZGlzYWJsZWQoKQkJCVwKKyh7CQkJCQlcCisJdW5zaWduZWQgbG9uZyBmbGFnczsJCVwKKwlsb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKTsJXAorICAgICAgICAhKChmbGFncyA+PiBfX0ZMQUdfU0hJRlQpICYgMyk7CVwKK30pCisKKyNpZmRlZiBfX3MzOTB4X18KKworI2RlZmluZSBfX2xvYWRfcHN3KHBzdykgXAorICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygibHBzd2UgMCglMCkiIDogOiAiYSIgKCZwc3cpLCAibSIgKHBzdykgOiAiY2MiICk7CisKKyNkZWZpbmUgX19jdGxfbG9hZChhcnJheSwgbG93LCBoaWdoKSAoeyBcCisJdHlwZWRlZiBzdHJ1Y3QgeyBjaGFyIF9bc2l6ZW9mKGFycmF5KV07IH0gYWRkcnR5cGU7IFwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIFwKKwkJIiAgIGJyYXMgIDEsMGZcbiIgXAorICAgICAgICAgICAgICAgICIgICBsY3RsZyAwLDAsMCglMClcbiIgXAorCQkiMDogZXggICAgJTEsMCgxKSIgXAorCQk6IDogImEiICgmYXJyYXkpLCAiYSIgKCgobG93KTw8NCkrKGhpZ2gpKSwgXAorCQkgICAgIm0iICgqKGFkZHJ0eXBlICopKGFycmF5KSkgOiAiMSIgKTsgXAorCX0pCisKKyNkZWZpbmUgX19jdGxfc3RvcmUoYXJyYXksIGxvdywgaGlnaCkgKHsgXAorCXR5cGVkZWYgc3RydWN0IHsgY2hhciBfW3NpemVvZihhcnJheSldOyB9IGFkZHJ0eXBlOyBcCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCBcCisJCSIgICBicmFzICAxLDBmXG4iIFwKKwkJIiAgIHN0Y3RnIDAsMCwwKCUxKVxuIiBcCisJCSIwOiBleCAgICAlMiwwKDEpIiBcCisJCTogIj1tIiAoKihhZGRydHlwZSAqKShhcnJheSkpIFwKKwkJOiAiYSIgKCZhcnJheSksICJhIiAoKChsb3cpPDw0KSsoaGlnaCkpIDogIjEiICk7IFwKKwl9KQorCisjZGVmaW5lIF9fY3RsX3NldF9iaXQoY3IsIGJpdCkgKHsgXAorICAgICAgICBfX3U4IF9fZHVtbXlbMjRdOyBcCisgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICggXAorICAgICAgICAgICAgICAgICIgICAgYnJhcyAgMSwwZlxuIiAgICAgICAvKiBza2lwIGluZGlyZWN0IGluc25zICovIFwKKyAgICAgICAgICAgICAgICAiICAgIHN0Y3RnIDAsMCwwKCUxKVxuIiBcCisgICAgICAgICAgICAgICAgIiAgICBsY3RsZyAwLDAsMCglMSlcbiIgXAorICAgICAgICAgICAgICAgICIwOiAgZXggICAgJTIsMCgxKVxuIiAgICAvKiBleGVjdXRlIHN0Y3RsICovIFwKKyAgICAgICAgICAgICAgICAiICAgIGxnICAgIDAsMCglMSlcbiIgXAorICAgICAgICAgICAgICAgICIgICAgb2dyICAgMCwlM1xuIiAgICAgICAvKiBzZXQgdGhlIGJpdCAqLyBcCisgICAgICAgICAgICAgICAgIiAgICBzdGcgICAwLDAoJTEpXG4iIFwKKyAgICAgICAgICAgICAgICAiMTogIGV4ICAgICUyLDYoMSkiICAgICAgLyogZXhlY3V0ZSBsY3RsICovIFwKKyAgICAgICAgICAgICAgICA6ICI9bSIgKF9fZHVtbXkpIFwKKwkJOiAiYSIgKCgoKHVuc2lnbmVkIGxvbmcpICZfX2R1bW15KSArIDcpICYgfjdVTCksIFwKKwkJICAiYSIgKGNyKjE3KSwgImEiICgxTDw8KGJpdCkpIFwKKyAgICAgICAgICAgICAgICA6ICJjYyIsICIwIiwgIjEiICk7IFwKKyAgICAgICAgfSkKKworI2RlZmluZSBfX2N0bF9jbGVhcl9iaXQoY3IsIGJpdCkgKHsgXAorICAgICAgICBfX3U4IF9fZHVtbXlbMTZdOyBcCisgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICggXAorICAgICAgICAgICAgICAgICIgICAgYnJhcyAgMSwwZlxuIiAgICAgICAvKiBza2lwIGluZGlyZWN0IGluc25zICovIFwKKyAgICAgICAgICAgICAgICAiICAgIHN0Y3RnIDAsMCwwKCUxKVxuIiBcCisgICAgICAgICAgICAgICAgIiAgICBsY3RsZyAwLDAsMCglMSlcbiIgXAorICAgICAgICAgICAgICAgICIwOiAgZXggICAgJTIsMCgxKVxuIiAgICAvKiBleGVjdXRlIHN0Y3RsICovIFwKKyAgICAgICAgICAgICAgICAiICAgIGxnICAgIDAsMCglMSlcbiIgXAorICAgICAgICAgICAgICAgICIgICAgbmdyICAgMCwlM1xuIiAgICAgICAvKiBzZXQgdGhlIGJpdCAqLyBcCisgICAgICAgICAgICAgICAgIiAgICBzdGcgICAwLDAoJTEpXG4iIFwKKyAgICAgICAgICAgICAgICAiMTogIGV4ICAgICUyLDYoMSkiICAgICAgLyogZXhlY3V0ZSBsY3RsICovIFwKKyAgICAgICAgICAgICAgICA6ICI9bSIgKF9fZHVtbXkpIFwKKwkJOiAiYSIgKCgoKHVuc2lnbmVkIGxvbmcpICZfX2R1bW15KSArIDcpICYgfjdVTCksIFwKKwkJICAiYSIgKGNyKjE3KSwgImEiICh+KDFMPDwoYml0KSkpIFwKKyAgICAgICAgICAgICAgICA6ICJjYyIsICIwIiwgIjEiICk7IFwKKyAgICAgICAgfSkKKworI2Vsc2UgLyogX19zMzkweF9fICovCisKKyNkZWZpbmUgX19sb2FkX3Bzdyhwc3cpIFwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibHBzdyAwKCUwKSIgOiA6ICJhIiAoJnBzdykgOiAiY2MiICk7CisKKyNkZWZpbmUgX19jdGxfbG9hZChhcnJheSwgbG93LCBoaWdoKSAoeyBcCisJdHlwZWRlZiBzdHJ1Y3QgeyBjaGFyIF9bc2l6ZW9mKGFycmF5KV07IH0gYWRkcnR5cGU7IFwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIFwKKwkJIiAgIGJyYXMgIDEsMGZcbiIgXAorICAgICAgICAgICAgICAgICIgICBsY3RsIDAsMCwwKCUwKVxuIiBcCisJCSIwOiBleCAgICAlMSwwKDEpIiBcCisJCTogOiAiYSIgKCZhcnJheSksICJhIiAoKChsb3cpPDw0KSsoaGlnaCkpLCBcCisJCSAgICAibSIgKCooYWRkcnR5cGUgKikoYXJyYXkpKSA6ICIxIiApOyBcCisJfSkKKworI2RlZmluZSBfX2N0bF9zdG9yZShhcnJheSwgbG93LCBoaWdoKSAoeyBcCisJdHlwZWRlZiBzdHJ1Y3QgeyBjaGFyIF9bc2l6ZW9mKGFycmF5KV07IH0gYWRkcnR5cGU7IFwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIFwKKwkJIiAgIGJyYXMgIDEsMGZcbiIgXAorCQkiICAgc3RjdGwgMCwwLDAoJTEpXG4iIFwKKwkJIjA6IGV4ICAgICUyLDAoMSkiIFwKKwkJOiAiPW0iICgqKGFkZHJ0eXBlICopKGFycmF5KSkgXAorCQk6ICJhIiAoJmFycmF5KSwgImEiICgoKGxvdyk8PDQpKyhoaWdoKSk6ICIxIiApOyBcCisJfSkKKworI2RlZmluZSBfX2N0bF9zZXRfYml0KGNyLCBiaXQpICh7IFwKKyAgICAgICAgX191OCBfX2R1bW15WzE2XTsgXAorICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIFwKKyAgICAgICAgICAgICAgICAiICAgIGJyYXMgIDEsMGZcbiIgICAgICAgLyogc2tpcCBpbmRpcmVjdCBpbnNucyAqLyBcCisgICAgICAgICAgICAgICAgIiAgICBzdGN0bCAwLDAsMCglMSlcbiIgXAorICAgICAgICAgICAgICAgICIgICAgbGN0bCAgMCwwLDAoJTEpXG4iIFwKKyAgICAgICAgICAgICAgICAiMDogIGV4ICAgICUyLDAoMSlcbiIgICAgLyogZXhlY3V0ZSBzdGN0bCAqLyBcCisgICAgICAgICAgICAgICAgIiAgICBsICAgICAwLDAoJTEpXG4iIFwKKyAgICAgICAgICAgICAgICAiICAgIG9yICAgIDAsJTNcbiIgICAgICAgLyogc2V0IHRoZSBiaXQgKi8gXAorICAgICAgICAgICAgICAgICIgICAgc3QgICAgMCwwKCUxKVxuIiBcCisgICAgICAgICAgICAgICAgIjE6ICBleCAgICAlMiw0KDEpIiAgICAgIC8qIGV4ZWN1dGUgbGN0bCAqLyBcCisgICAgICAgICAgICAgICAgOiAiPW0iIChfX2R1bW15KSBcCisJCTogImEiICgoKCh1bnNpZ25lZCBsb25nKSAmX19kdW1teSkgKyA3KSAmIH43VUwpLCBcCisJCSAgImEiIChjcioxNyksICJhIiAoMTw8KGJpdCkpIFwKKyAgICAgICAgICAgICAgICA6ICJjYyIsICIwIiwgIjEiICk7IFwKKyAgICAgICAgfSkKKworI2RlZmluZSBfX2N0bF9jbGVhcl9iaXQoY3IsIGJpdCkgKHsgXAorICAgICAgICBfX3U4IF9fZHVtbXlbMTZdOyBcCisgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICggXAorICAgICAgICAgICAgICAgICIgICAgYnJhcyAgMSwwZlxuIiAgICAgICAvKiBza2lwIGluZGlyZWN0IGluc25zICovIFwKKyAgICAgICAgICAgICAgICAiICAgIHN0Y3RsIDAsMCwwKCUxKVxuIiBcCisgICAgICAgICAgICAgICAgIiAgICBsY3RsICAwLDAsMCglMSlcbiIgXAorICAgICAgICAgICAgICAgICIwOiAgZXggICAgJTIsMCgxKVxuIiAgICAvKiBleGVjdXRlIHN0Y3RsICovIFwKKyAgICAgICAgICAgICAgICAiICAgIGwgICAgIDAsMCglMSlcbiIgXAorICAgICAgICAgICAgICAgICIgICAgbnIgICAgMCwlM1xuIiAgICAgICAvKiBzZXQgdGhlIGJpdCAqLyBcCisgICAgICAgICAgICAgICAgIiAgICBzdCAgICAwLDAoJTEpXG4iIFwKKyAgICAgICAgICAgICAgICAiMTogIGV4ICAgICUyLDQoMSkiICAgICAgLyogZXhlY3V0ZSBsY3RsICovIFwKKyAgICAgICAgICAgICAgICA6ICI9bSIgKF9fZHVtbXkpIFwKKwkJOiAiYSIgKCgoKHVuc2lnbmVkIGxvbmcpICZfX2R1bW15KSArIDcpICYgfjdVTCksIFwKKwkJICAiYSIgKGNyKjE3KSwgImEiICh+KDE8PChiaXQpKSkgXAorICAgICAgICAgICAgICAgIDogImNjIiwgIjAiLCAiMSIgKTsgXAorICAgICAgICB9KQorI2VuZGlmIC8qIF9fczM5MHhfXyAqLworCisvKiBGb3Igc3BpbmxvY2tzIGV0YyAqLworI2RlZmluZSBsb2NhbF9pcnFfc2F2ZSh4KQkoKHgpID0gbG9jYWxfaXJxX2Rpc2FibGUoKSkKKworI2lmZGVmIENPTkZJR19TTVAKKworZXh0ZXJuIHZvaWQgc21wX2N0bF9zZXRfYml0KGludCBjciwgaW50IGJpdCk7CitleHRlcm4gdm9pZCBzbXBfY3RsX2NsZWFyX2JpdChpbnQgY3IsIGludCBiaXQpOworI2RlZmluZSBjdGxfc2V0X2JpdChjciwgYml0KSBzbXBfY3RsX3NldF9iaXQoY3IsIGJpdCkKKyNkZWZpbmUgY3RsX2NsZWFyX2JpdChjciwgYml0KSBzbXBfY3RsX2NsZWFyX2JpdChjciwgYml0KQorCisjZWxzZQorCisjZGVmaW5lIGN0bF9zZXRfYml0KGNyLCBiaXQpIF9fY3RsX3NldF9iaXQoY3IsIGJpdCkKKyNkZWZpbmUgY3RsX2NsZWFyX2JpdChjciwgYml0KSBfX2N0bF9jbGVhcl9iaXQoY3IsIGJpdCkKKworI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KKworZXh0ZXJuIHZvaWQgKCpfbWFjaGluZV9yZXN0YXJ0KShjaGFyICpjb21tYW5kKTsKK2V4dGVybiB2b2lkICgqX21hY2hpbmVfaGFsdCkodm9pZCk7CitleHRlcm4gdm9pZCAoKl9tYWNoaW5lX3Bvd2VyX29mZikodm9pZCk7CisKKyNkZWZpbmUgYXJjaF9hbGlnbl9zdGFjayh4KSAoeCkKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvdGFwZTM5MC5oIGIvaW5jbHVkZS9hc20tczM5MC90YXBlMzkwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFkNjZiYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvdGFwZTM5MC5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogdGFwZTM5MC5oCisgKiAgICAgICAgIGVuYWJsZXMgdXNlciBwcm9ncmFtcyB0byBkaXNwbGF5IG1lc3NhZ2VzIG9uIHRoZSB0YXBlIGRldmljZQorICoKKyAqICBTMzkwIGFuZCB6U2VyaWVzIHZlcnNpb24KKyAqICAgICAgICAgQ29weXJpZ2h0IChDKSAyMDAxIElCTSBDb3Jwb3JhdGlvbgorICogICAgICAgICBBdXRob3Iocyk6IERlc3BpbmEgUGFwYWRvcG91bG91IDxkZXNwaW5hX3BAZGUuaWJtLmNvbT4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfVEFQRTM5MF9ICisjZGVmaW5lIF9UQVBFMzkwX0gKKworI2RlZmluZSBUQVBFMzkwX0RJU1BMQVkgX0lPVygnZCcsIDEsIHN0cnVjdCBkaXNwbGF5X3N0cnVjdCkKKworLyoKKyAqIFRoZSBUQVBFMzkwX0RJU1BMQVkgaW9jdGwgY2FsbHMgdGhlIExvYWQgRGlzcGxheSBjb21tYW5kCisgKiB3aGljaCB0cmFuc2ZlcnMgMTcgYnl0ZXMgb2YgZGF0YSBmcm9tIHRoZSBjaGFubmVsIHRvIHRoZSBzdWJzeXN0ZW06CisgKiAgICAgLSAxIGZvcm1hdCBjb250cm9sIGJ5dGUsIGFuZAorICogICAgIC0gdHdvIDgtYnl0ZSBtZXNzYWdlcworICoKKyAqIEZvcm1hdCBjb250cm9sIGJ5dGU6CisgKiAgIDAtMjogTmV3IE1lc3NhZ2UgT3ZlcmxheQorICogICAgIDM6IEFsdGVybmF0ZSBNZXNzYWdlcworICogICAgIDQ6IEJsaW5rIE1lc3NhZ2UKKyAqICAgICA1OiBEaXNwbGF5IExvdy9IaWdoIE1lc3NhZ2UKKyAqICAgICA2OiBSZXNlcnZlZAorICogICAgIDc6IEF1dG9tYXRpYyBMb2FkIFJlcXVlc3QKKyAqCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgZGlzcGxheV9zdHJ1Y3QgeworICAgICAgICBjaGFyIGNudHJsOworICAgICAgICBjaGFyIG1lc3NhZ2UxWzhdOworICAgICAgICBjaGFyIG1lc3NhZ2UyWzhdOworfSBkaXNwbGF5X3N0cnVjdDsKKworI2VuZGlmIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC90ZXJtYml0cy5oIGIvaW5jbHVkZS9hc20tczM5MC90ZXJtYml0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViM2Y4YmYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL3Rlcm1iaXRzLmgKQEAgLTAsMCArMSwxODEgQEAKKy8qCisgKiAgaW5jbHVkZS9hc20tczM5MC90ZXJtYml0cy5oCisgKgorICogIFMzOTAgdmVyc2lvbgorICoKKyAqICBEZXJpdmVkIGZyb20gImluY2x1ZGUvYXNtLWkzODYvdGVybWJpdHMuaCIKKyAqLworCisjaWZuZGVmIF9fQVJDSF9TMzkwX1RFUk1CSVRTX0hfXworI2RlZmluZSBfX0FSQ0hfUzM5MF9URVJNQklUU19IX18KKworI2luY2x1ZGUgPGxpbnV4L3Bvc2l4X3R5cGVzLmg+CisKK3R5cGVkZWYgdW5zaWduZWQgY2hhcgljY190OwordHlwZWRlZiB1bnNpZ25lZCBpbnQJc3BlZWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50CXRjZmxhZ190OworCisjZGVmaW5lIE5DQ1MgMTkKK3N0cnVjdCB0ZXJtaW9zIHsKKwl0Y2ZsYWdfdCBjX2lmbGFnOwkJLyogaW5wdXQgbW9kZSBmbGFncyAqLworCXRjZmxhZ190IGNfb2ZsYWc7CQkvKiBvdXRwdXQgbW9kZSBmbGFncyAqLworCXRjZmxhZ190IGNfY2ZsYWc7CQkvKiBjb250cm9sIG1vZGUgZmxhZ3MgKi8KKwl0Y2ZsYWdfdCBjX2xmbGFnOwkJLyogbG9jYWwgbW9kZSBmbGFncyAqLworCWNjX3QgY19saW5lOwkJCS8qIGxpbmUgZGlzY2lwbGluZSAqLworCWNjX3QgY19jY1tOQ0NTXTsJCS8qIGNvbnRyb2wgY2hhcmFjdGVycyAqLworfTsKKworLyogY19jYyBjaGFyYWN0ZXJzICovCisjZGVmaW5lIFZJTlRSIDAKKyNkZWZpbmUgVlFVSVQgMQorI2RlZmluZSBWRVJBU0UgMgorI2RlZmluZSBWS0lMTCAzCisjZGVmaW5lIFZFT0YgNAorI2RlZmluZSBWVElNRSA1CisjZGVmaW5lIFZNSU4gNgorI2RlZmluZSBWU1dUQyA3CisjZGVmaW5lIFZTVEFSVCA4CisjZGVmaW5lIFZTVE9QIDkKKyNkZWZpbmUgVlNVU1AgMTAKKyNkZWZpbmUgVkVPTCAxMQorI2RlZmluZSBWUkVQUklOVCAxMgorI2RlZmluZSBWRElTQ0FSRCAxMworI2RlZmluZSBWV0VSQVNFIDE0CisjZGVmaW5lIFZMTkVYVCAxNQorI2RlZmluZSBWRU9MMiAxNgorCisvKiBjX2lmbGFnIGJpdHMgKi8KKyNkZWZpbmUgSUdOQlJLCTAwMDAwMDEKKyNkZWZpbmUgQlJLSU5UCTAwMDAwMDIKKyNkZWZpbmUgSUdOUEFSCTAwMDAwMDQKKyNkZWZpbmUgUEFSTVJLCTAwMDAwMTAKKyNkZWZpbmUgSU5QQ0sJMDAwMDAyMAorI2RlZmluZSBJU1RSSVAJMDAwMDA0MAorI2RlZmluZSBJTkxDUgkwMDAwMTAwCisjZGVmaW5lIElHTkNSCTAwMDAyMDAKKyNkZWZpbmUgSUNSTkwJMDAwMDQwMAorI2RlZmluZSBJVUNMQwkwMDAxMDAwCisjZGVmaW5lIElYT04JMDAwMjAwMAorI2RlZmluZSBJWEFOWQkwMDA0MDAwCisjZGVmaW5lIElYT0ZGCTAwMTAwMDAKKyNkZWZpbmUgSU1BWEJFTAkwMDIwMDAwCisjZGVmaW5lIElVVEY4CTAwNDAwMDAKKworLyogY19vZmxhZyBiaXRzICovCisjZGVmaW5lIE9QT1NUCTAwMDAwMDEKKyNkZWZpbmUgT0xDVUMJMDAwMDAwMgorI2RlZmluZSBPTkxDUgkwMDAwMDA0CisjZGVmaW5lIE9DUk5MCTAwMDAwMTAKKyNkZWZpbmUgT05PQ1IJMDAwMDAyMAorI2RlZmluZSBPTkxSRVQJMDAwMDA0MAorI2RlZmluZSBPRklMTAkwMDAwMTAwCisjZGVmaW5lIE9GREVMCTAwMDAyMDAKKyNkZWZpbmUgTkxETFkJMDAwMDQwMAorI2RlZmluZSAgIE5MMAkwMDAwMDAwCisjZGVmaW5lICAgTkwxCTAwMDA0MDAKKyNkZWZpbmUgQ1JETFkJMDAwMzAwMAorI2RlZmluZSAgIENSMAkwMDAwMDAwCisjZGVmaW5lICAgQ1IxCTAwMDEwMDAKKyNkZWZpbmUgICBDUjIJMDAwMjAwMAorI2RlZmluZSAgIENSMwkwMDAzMDAwCisjZGVmaW5lIFRBQkRMWQkwMDE0MDAwCisjZGVmaW5lICAgVEFCMAkwMDAwMDAwCisjZGVmaW5lICAgVEFCMQkwMDA0MDAwCisjZGVmaW5lICAgVEFCMgkwMDEwMDAwCisjZGVmaW5lICAgVEFCMwkwMDE0MDAwCisjZGVmaW5lICAgWFRBQlMJMDAxNDAwMAorI2RlZmluZSBCU0RMWQkwMDIwMDAwCisjZGVmaW5lICAgQlMwCTAwMDAwMDAKKyNkZWZpbmUgICBCUzEJMDAyMDAwMAorI2RlZmluZSBWVERMWQkwMDQwMDAwCisjZGVmaW5lICAgVlQwCTAwMDAwMDAKKyNkZWZpbmUgICBWVDEJMDA0MDAwMAorI2RlZmluZSBGRkRMWQkwMTAwMDAwCisjZGVmaW5lICAgRkYwCTAwMDAwMDAKKyNkZWZpbmUgICBGRjEJMDEwMDAwMAorCisvKiBjX2NmbGFnIGJpdCBtZWFuaW5nICovCisjZGVmaW5lIENCQVVECTAwMTAwMTcKKyNkZWZpbmUgIEIwCTAwMDAwMDAJCS8qIGhhbmcgdXAgKi8KKyNkZWZpbmUgIEI1MAkwMDAwMDAxCisjZGVmaW5lICBCNzUJMDAwMDAwMgorI2RlZmluZSAgQjExMAkwMDAwMDAzCisjZGVmaW5lICBCMTM0CTAwMDAwMDQKKyNkZWZpbmUgIEIxNTAJMDAwMDAwNQorI2RlZmluZSAgQjIwMAkwMDAwMDA2CisjZGVmaW5lICBCMzAwCTAwMDAwMDcKKyNkZWZpbmUgIEI2MDAJMDAwMDAxMAorI2RlZmluZSAgQjEyMDAJMDAwMDAxMQorI2RlZmluZSAgQjE4MDAJMDAwMDAxMgorI2RlZmluZSAgQjI0MDAJMDAwMDAxMworI2RlZmluZSAgQjQ4MDAJMDAwMDAxNAorI2RlZmluZSAgQjk2MDAJMDAwMDAxNQorI2RlZmluZSAgQjE5MjAwCTAwMDAwMTYKKyNkZWZpbmUgIEIzODQwMAkwMDAwMDE3CisjZGVmaW5lIEVYVEEgQjE5MjAwCisjZGVmaW5lIEVYVEIgQjM4NDAwCisjZGVmaW5lIENTSVpFCTAwMDAwNjAKKyNkZWZpbmUgICBDUzUJMDAwMDAwMAorI2RlZmluZSAgIENTNgkwMDAwMDIwCisjZGVmaW5lICAgQ1M3CTAwMDAwNDAKKyNkZWZpbmUgICBDUzgJMDAwMDA2MAorI2RlZmluZSBDU1RPUEIJMDAwMDEwMAorI2RlZmluZSBDUkVBRAkwMDAwMjAwCisjZGVmaW5lIFBBUkVOQgkwMDAwNDAwCisjZGVmaW5lIFBBUk9ERAkwMDAxMDAwCisjZGVmaW5lIEhVUENMCTAwMDIwMDAKKyNkZWZpbmUgQ0xPQ0FMCTAwMDQwMDAKKyNkZWZpbmUgQ0JBVURFWCAwMDEwMDAwCisjZGVmaW5lICBCNTc2MDAgIDAwMTAwMDEKKyNkZWZpbmUgIEIxMTUyMDAgMDAxMDAwMgorI2RlZmluZSAgQjIzMDQwMCAwMDEwMDAzCisjZGVmaW5lICBCNDYwODAwIDAwMTAwMDQKKyNkZWZpbmUgICBCNTAwMDAwIDAwMTAwMDUKKyNkZWZpbmUgICBCNTc2MDAwIDAwMTAwMDYKKyNkZWZpbmUgICBCOTIxNjAwIDAwMTAwMDcKKyNkZWZpbmUgIEIxMDAwMDAwIDAwMTAwMTAKKyNkZWZpbmUgIEIxMTUyMDAwIDAwMTAwMTEKKyNkZWZpbmUgIEIxNTAwMDAwIDAwMTAwMTIKKyNkZWZpbmUgIEIyMDAwMDAwIDAwMTAwMTMKKyNkZWZpbmUgIEIyNTAwMDAwIDAwMTAwMTQKKyNkZWZpbmUgIEIzMDAwMDAwIDAwMTAwMTUKKyNkZWZpbmUgIEIzNTAwMDAwIDAwMTAwMTYKKyNkZWZpbmUgIEI0MDAwMDAwIDAwMTAwMTcKKyNkZWZpbmUgQ0lCQVVECSAgMDAyMDAzNjAwMDAwCS8qIGlucHV0IGJhdWQgcmF0ZSAobm90IHVzZWQpICovCisjZGVmaW5lIENNU1BBUgkgIDAxMDAwMDAwMDAwMAkJLyogbWFyayBvciBzcGFjZSAoc3RpY2spIHBhcml0eSAqLworI2RlZmluZSBDUlRTQ1RTCSAgMDIwMDAwMDAwMDAwCQkvKiBmbG93IGNvbnRyb2wgKi8KKworLyogY19sZmxhZyBiaXRzICovCisjZGVmaW5lIElTSUcJMDAwMDAwMQorI2RlZmluZSBJQ0FOT04JMDAwMDAwMgorI2RlZmluZSBYQ0FTRQkwMDAwMDA0CisjZGVmaW5lIEVDSE8JMDAwMDAxMAorI2RlZmluZSBFQ0hPRQkwMDAwMDIwCisjZGVmaW5lIEVDSE9LCTAwMDAwNDAKKyNkZWZpbmUgRUNIT05MCTAwMDAxMDAKKyNkZWZpbmUgTk9GTFNICTAwMDAyMDAKKyNkZWZpbmUgVE9TVE9QCTAwMDA0MDAKKyNkZWZpbmUgRUNIT0NUTAkwMDAxMDAwCisjZGVmaW5lIEVDSE9QUlQJMDAwMjAwMAorI2RlZmluZSBFQ0hPS0UJMDAwNDAwMAorI2RlZmluZSBGTFVTSE8JMDAxMDAwMAorI2RlZmluZSBQRU5ESU4JMDA0MDAwMAorI2RlZmluZSBJRVhURU4JMDEwMDAwMAorCisvKiB0Y2Zsb3coKSBhbmQgVENYT05DIHVzZSB0aGVzZSAqLworI2RlZmluZQlUQ09PRkYJCTAKKyNkZWZpbmUJVENPT04JCTEKKyNkZWZpbmUJVENJT0ZGCQkyCisjZGVmaW5lCVRDSU9OCQkzCisKKy8qIHRjZmx1c2goKSBhbmQgVENGTFNIIHVzZSB0aGVzZSAqLworI2RlZmluZQlUQ0lGTFVTSAkwCisjZGVmaW5lCVRDT0ZMVVNICTEKKyNkZWZpbmUJVENJT0ZMVVNICTIKKworLyogdGNzZXRhdHRyIHVzZXMgdGhlc2UgKi8KKyNkZWZpbmUJVENTQU5PVwkJMAorI2RlZmluZQlUQ1NBRFJBSU4JMQorI2RlZmluZQlUQ1NBRkxVU0gJMgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvdGVybWlvcy5oIGIvaW5jbHVkZS9hc20tczM5MC90ZXJtaW9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFlMjljYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvdGVybWlvcy5oCkBAIC0wLDAgKzEsMTE0IEBACisvKgorICogIGluY2x1ZGUvYXNtLXMzOTAvdGVybWlvcy5oCisgKgorICogIFMzOTAgdmVyc2lvbgorICoKKyAqICBEZXJpdmVkIGZyb20gImluY2x1ZGUvYXNtLWkzODYvdGVybWlvcy5oIgorICovCisKKyNpZm5kZWYgX1MzOTBfVEVSTUlPU19ICisjZGVmaW5lIF9TMzkwX1RFUk1JT1NfSAorCisjaW5jbHVkZSA8YXNtL3Rlcm1iaXRzLmg+CisjaW5jbHVkZSA8YXNtL2lvY3Rscy5oPgorCitzdHJ1Y3Qgd2luc2l6ZSB7CisJdW5zaWduZWQgc2hvcnQgd3Nfcm93OworCXVuc2lnbmVkIHNob3J0IHdzX2NvbDsKKwl1bnNpZ25lZCBzaG9ydCB3c194cGl4ZWw7CisJdW5zaWduZWQgc2hvcnQgd3NfeXBpeGVsOworfTsKKworI2RlZmluZSBOQ0MgOAorc3RydWN0IHRlcm1pbyB7CisJdW5zaWduZWQgc2hvcnQgY19pZmxhZzsJCS8qIGlucHV0IG1vZGUgZmxhZ3MgKi8KKwl1bnNpZ25lZCBzaG9ydCBjX29mbGFnOwkJLyogb3V0cHV0IG1vZGUgZmxhZ3MgKi8KKwl1bnNpZ25lZCBzaG9ydCBjX2NmbGFnOwkJLyogY29udHJvbCBtb2RlIGZsYWdzICovCisJdW5zaWduZWQgc2hvcnQgY19sZmxhZzsJCS8qIGxvY2FsIG1vZGUgZmxhZ3MgKi8KKwl1bnNpZ25lZCBjaGFyIGNfbGluZTsJCS8qIGxpbmUgZGlzY2lwbGluZSAqLworCXVuc2lnbmVkIGNoYXIgY19jY1tOQ0NdOwkvKiBjb250cm9sIGNoYXJhY3RlcnMgKi8KK307CisKKy8qIG1vZGVtIGxpbmVzICovCisjZGVmaW5lIFRJT0NNX0xFCTB4MDAxCisjZGVmaW5lIFRJT0NNX0RUUgkweDAwMgorI2RlZmluZSBUSU9DTV9SVFMJMHgwMDQKKyNkZWZpbmUgVElPQ01fU1QJMHgwMDgKKyNkZWZpbmUgVElPQ01fU1IJMHgwMTAKKyNkZWZpbmUgVElPQ01fQ1RTCTB4MDIwCisjZGVmaW5lIFRJT0NNX0NBUgkweDA0MAorI2RlZmluZSBUSU9DTV9STkcJMHgwODAKKyNkZWZpbmUgVElPQ01fRFNSCTB4MTAwCisjZGVmaW5lIFRJT0NNX0NECVRJT0NNX0NBUgorI2RlZmluZSBUSU9DTV9SSQlUSU9DTV9STkcKKyNkZWZpbmUgVElPQ01fT1VUMQkweDIwMDAKKyNkZWZpbmUgVElPQ01fT1VUMgkweDQwMDAKKyNkZWZpbmUgVElPQ01fTE9PUAkweDgwMDAKKworLyogaW9jdGwgKGZkLCBUSU9DU0VSR0VUTFNSLCAmcmVzdWx0KSB3aGVyZSByZXN1bHQgbWF5IGJlIGFzIGJlbG93ICovCisKKy8qIGxpbmUgZGlzY2lwbGluZXMgKi8KKyNkZWZpbmUgTl9UVFkJCTAKKyNkZWZpbmUgTl9TTElQCQkxCisjZGVmaW5lIE5fTU9VU0UJCTIKKyNkZWZpbmUgTl9QUFAJCTMKKyNkZWZpbmUgTl9TVFJJUAkJNAorI2RlZmluZSBOX0FYMjUJCTUKKyNkZWZpbmUgTl9YMjUJCTYJLyogWC4yNSBhc3luYyAqLworI2RlZmluZSBOXzZQQUNLCQk3CisjZGVmaW5lIE5fTUFTQwkJOAkvKiBSZXNlcnZlZCBmb3IgTW9iaXRleCBtb2R1bGUgPGthekBjYWZlLm5ldD4gKi8KKyNkZWZpbmUgTl9SMzk2NAkJOQkvKiBSZXNlcnZlZCBmb3IgU2ltYXRpYyBSMzk2NCBtb2R1bGUgKi8KKyNkZWZpbmUgTl9QUk9GSUJVU19GREwJMTAJLyogUmVzZXJ2ZWQgZm9yIFByb2ZpYnVzIDxEYXZlQG12aGkuY29tPiAqLworI2RlZmluZSBOX0lSREEJCTExCS8qIExpbnV4IElSIC0gaHR0cDovL2lyZGEuc291cmNlZm9yZ2UubmV0LyAqLworI2RlZmluZSBOX1NNU0JMT0NLCTEyCS8qIFNNUyBibG9jayBtb2RlIC0gZm9yIHRhbGtpbmcgdG8gR1NNIGRhdGEgY2FyZHMgYWJvdXQgU01TIG1lc3NhZ2VzICovCisjZGVmaW5lIE5fSERMQwkJMTMJLyogc3luY2hyb25vdXMgSERMQyAqLworI2RlZmluZSBOX1NZTkNfUFBQCTE0CS8qIHN5bmNocm9ub3VzIFBQUCAqLworI2RlZmluZSBOX0hDSQkJMTUgIC8qIEJsdWV0b290aCBIQ0kgVUFSVCAqLworCisjaWZkZWYgX19LRVJORUxfXworCisvKglpbnRyPV5DCQlxdWl0PV5cCQllcmFzZT1kZWwJa2lsbD1eVQorCWVvZj1eRAkJdnRpbWU9XDAJdm1pbj1cMQkJc3h0Yz1cMAorCXN0YXJ0PV5RCXN0b3A9XlMJCXN1c3A9XloJCWVvbD1cMAorCXJlcHJpbnQ9XlIJZGlzY2FyZD1eVQl3ZXJhc2U9XlcJbG5leHQ9XlYKKwllb2wyPVwwCisqLworI2RlZmluZSBJTklUX0NfQ0MgIlwwMDNcMDM0XDE3N1wwMjVcMDA0XDBcMVwwXDAyMVwwMjNcMDMyXDBcMDIyXDAxN1wwMjdcMDI2XDAiCisKKy8qCisgKiBUcmFuc2xhdGUgYSAidGVybWlvIiBzdHJ1Y3R1cmUgaW50byBhICJ0ZXJtaW9zIi4gVWdoLgorICovCisjZGVmaW5lIFNFVF9MT1dfVEVSTUlPU19CSVRTKHRlcm1pb3MsIHRlcm1pbywgeCkgeyBcCisJdW5zaWduZWQgc2hvcnQgX190bXA7IFwKKwlnZXRfdXNlcihfX3RtcCwmKHRlcm1pbyktPngpOyBcCisJKHRlcm1pb3MpLT54ID0gKDB4ZmZmZjAwMDAgJiAoKHRlcm1pb3MpLT54KSkgfCBfX3RtcDsgXAorfQorCisjZGVmaW5lIHVzZXJfdGVybWlvX3RvX2tlcm5lbF90ZXJtaW9zKHRlcm1pb3MsIHRlcm1pbykgXAorKHsgXAorCVNFVF9MT1dfVEVSTUlPU19CSVRTKHRlcm1pb3MsIHRlcm1pbywgY19pZmxhZyk7IFwKKwlTRVRfTE9XX1RFUk1JT1NfQklUUyh0ZXJtaW9zLCB0ZXJtaW8sIGNfb2ZsYWcpOyBcCisJU0VUX0xPV19URVJNSU9TX0JJVFModGVybWlvcywgdGVybWlvLCBjX2NmbGFnKTsgXAorCVNFVF9MT1dfVEVSTUlPU19CSVRTKHRlcm1pb3MsIHRlcm1pbywgY19sZmxhZyk7IFwKKwljb3B5X2Zyb21fdXNlcigodGVybWlvcyktPmNfY2MsICh0ZXJtaW8pLT5jX2NjLCBOQ0MpOyBcCit9KQorCisvKgorICogVHJhbnNsYXRlIGEgInRlcm1pb3MiIHN0cnVjdHVyZSBpbnRvIGEgInRlcm1pbyIuIFVnaC4KKyAqLworI2RlZmluZSBrZXJuZWxfdGVybWlvc190b191c2VyX3Rlcm1pbyh0ZXJtaW8sIHRlcm1pb3MpIFwKKyh7IFwKKwlwdXRfdXNlcigodGVybWlvcyktPmNfaWZsYWcsICYodGVybWlvKS0+Y19pZmxhZyk7IFwKKwlwdXRfdXNlcigodGVybWlvcyktPmNfb2ZsYWcsICYodGVybWlvKS0+Y19vZmxhZyk7IFwKKwlwdXRfdXNlcigodGVybWlvcyktPmNfY2ZsYWcsICYodGVybWlvKS0+Y19jZmxhZyk7IFwKKwlwdXRfdXNlcigodGVybWlvcyktPmNfbGZsYWcsICYodGVybWlvKS0+Y19sZmxhZyk7IFwKKwlwdXRfdXNlcigodGVybWlvcyktPmNfbGluZSwgICYodGVybWlvKS0+Y19saW5lKTsgXAorCWNvcHlfdG9fdXNlcigodGVybWlvKS0+Y19jYywgKHRlcm1pb3MpLT5jX2NjLCBOQ0MpOyBcCit9KQorCisjZGVmaW5lIHVzZXJfdGVybWlvc190b19rZXJuZWxfdGVybWlvcyhrLCB1KSBjb3B5X2Zyb21fdXNlcihrLCB1LCBzaXplb2Yoc3RydWN0IHRlcm1pb3MpKQorI2RlZmluZSBrZXJuZWxfdGVybWlvc190b191c2VyX3Rlcm1pb3ModSwgaykgY29weV90b191c2VyKHUsIGssIHNpemVvZihzdHJ1Y3QgdGVybWlvcykpCisKKyNlbmRpZgkvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZgkvKiBfUzM5MF9URVJNSU9TX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvdGhyZWFkX2luZm8uaCBiL2luY2x1ZGUvYXNtLXMzOTAvdGhyZWFkX2luZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWRlODVjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tczM5MC90aHJlYWRfaW5mby5oCkBAIC0wLDAgKzEsMTIwIEBACisvKgorICogIGluY2x1ZGUvYXNtLXMzOTAvdGhyZWFkX2luZm8uaAorICoKKyAqICBTMzkwIHZlcnNpb24KKyAqICAgIENvcHlyaWdodCAoQykgMjAwMiBJQk0gRGV1dHNjaGxhbmQgRW50d2lja2x1bmcgR21iSCwgSUJNIENvcnBvcmF0aW9uCisgKiAgICBBdXRob3Iocyk6IE1hcnRpbiBTY2h3aWRlZnNreSAoc2Nod2lkZWZza3lAZGUuaWJtLmNvbSkKKyAqLworCisjaWZuZGVmIF9BU01fVEhSRUFEX0lORk9fSAorI2RlZmluZSBfQVNNX1RIUkVBRF9JTkZPX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKworLyoKKyAqIFNpemUgb2Yga2VybmVsIHN0YWNrIGZvciBlYWNoIHByb2Nlc3MKKyAqLworI2lmbmRlZiBfX3MzOTB4X18KKyNpZm5kZWYgX19TTUFMTF9TVEFDSworI2RlZmluZSBUSFJFQURfT1JERVIgMQorI2RlZmluZSBBU1lOQ19PUkRFUiAgMQorI2Vsc2UKKyNkZWZpbmUgVEhSRUFEX09SREVSIDAKKyNkZWZpbmUgQVNZTkNfT1JERVIgIDAKKyNlbmRpZgorI2Vsc2UgLyogX19zMzkweF9fICovCisjaWZuZGVmIF9fU01BTExfU1RBQ0sKKyNkZWZpbmUgVEhSRUFEX09SREVSIDIKKyNkZWZpbmUgQVNZTkNfT1JERVIgIDIKKyNlbHNlCisjZGVmaW5lIFRIUkVBRF9PUkRFUiAxCisjZGVmaW5lIEFTWU5DX09SREVSICAxCisjZW5kaWYKKyNlbmRpZiAvKiBfX3MzOTB4X18gKi8KKworI2RlZmluZSBUSFJFQURfU0laRSAoUEFHRV9TSVpFIDw8IFRIUkVBRF9PUkRFUikKKyNkZWZpbmUgQVNZTkNfU0laRSAgKFBBR0VfU0laRSA8PCBBU1lOQ19PUkRFUikKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL2xvd2NvcmUuaD4KKworLyoKKyAqIGxvdyBsZXZlbCB0YXNrIGRhdGEgdGhhdCBlbnRyeS5TIG5lZWRzIGltbWVkaWF0ZSBhY2Nlc3MgdG8KKyAqIC0gdGhpcyBzdHJ1Y3Qgc2hvdWxkIGZpdCBlbnRpcmVseSBpbnNpZGUgb2Ygb25lIGNhY2hlIGxpbmUKKyAqIC0gdGhpcyBzdHJ1Y3Qgc2hhcmVzIHRoZSBzdXBlcnZpc29yIHN0YWNrIHBhZ2VzCisgKiAtIGlmIHRoZSBjb250ZW50cyBvZiB0aGlzIHN0cnVjdHVyZSBhcmUgY2hhbmdlZCwgdGhlIGFzc2VtYmx5IGNvbnN0YW50cyBtdXN0IGFsc28gYmUgY2hhbmdlZAorICovCitzdHJ1Y3QgdGhyZWFkX2luZm8geworCXN0cnVjdCB0YXNrX3N0cnVjdAkqdGFzazsJCS8qIG1haW4gdGFzayBzdHJ1Y3R1cmUgKi8KKwlzdHJ1Y3QgZXhlY19kb21haW4JKmV4ZWNfZG9tYWluOwkvKiBleGVjdXRpb24gZG9tYWluICovCisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CQkvKiBsb3cgbGV2ZWwgZmxhZ3MgKi8KKwl1bnNpZ25lZCBpbnQJCWNwdTsJCS8qIGN1cnJlbnQgQ1BVICovCisJdW5zaWduZWQgaW50CQlwcmVlbXB0X2NvdW50OyAvKiAwID0+IHByZWVtcHRhYmxlICovCisJc3RydWN0IHJlc3RhcnRfYmxvY2sJcmVzdGFydF9ibG9jazsKK307CisKKy8qCisgKiBtYWNyb3MvZnVuY3Rpb25zIGZvciBnYWluaW5nIGFjY2VzcyB0byB0aGUgdGhyZWFkIGluZm9ybWF0aW9uIHN0cnVjdHVyZQorICovCisjZGVmaW5lIElOSVRfVEhSRUFEX0lORk8odHNrKQkJCVwKK3sJCQkJCQlcCisJLnRhc2sJCT0gJnRzaywJCQlcCisJLmV4ZWNfZG9tYWluCT0gJmRlZmF1bHRfZXhlY19kb21haW4sCVwKKwkuZmxhZ3MJCT0gMCwJCQlcCisJLmNwdQkJPSAwLAkJCVwKKwkucmVzdGFydF9ibG9jawk9IHsJCQlcCisJCS5mbiA9IGRvX25vX3Jlc3RhcnRfc3lzY2FsbCwJXAorCX0sCQkJCQlcCit9CisKKyNkZWZpbmUgaW5pdF90aHJlYWRfaW5mbwkoaW5pdF90aHJlYWRfdW5pb24udGhyZWFkX2luZm8pCisjZGVmaW5lIGluaXRfc3RhY2sJCShpbml0X3RocmVhZF91bmlvbi5zdGFjaykKKworLyogaG93IHRvIGdldCB0aGUgdGhyZWFkIGluZm9ybWF0aW9uIHN0cnVjdCBmcm9tIEMgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRocmVhZF9pbmZvICpjdXJyZW50X3RocmVhZF9pbmZvKHZvaWQpCit7CisJcmV0dXJuIChzdHJ1Y3QgdGhyZWFkX2luZm8gKikoKCoodW5zaWduZWQgbG9uZyAqKSBfX0xDX0tFUk5FTF9TVEFDSyktVEhSRUFEX1NJWkUpOworfQorCisvKiB0aHJlYWQgaW5mb3JtYXRpb24gYWxsb2NhdGlvbiAqLworI2RlZmluZSBhbGxvY190aHJlYWRfaW5mbyh0c2spICgoc3RydWN0IHRocmVhZF9pbmZvICopIFwKKwlfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwsVEhSRUFEX09SREVSKSkKKyNkZWZpbmUgZnJlZV90aHJlYWRfaW5mbyh0aSkgZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZykgKHRpKSxUSFJFQURfT1JERVIpCisjZGVmaW5lIGdldF90aHJlYWRfaW5mbyh0aSkgZ2V0X3Rhc2tfc3RydWN0KCh0aSktPnRhc2spCisjZGVmaW5lIHB1dF90aHJlYWRfaW5mbyh0aSkgcHV0X3Rhc2tfc3RydWN0KCh0aSktPnRhc2spCisKKyNlbmRpZgorCisvKgorICogdGhyZWFkIGluZm9ybWF0aW9uIGZsYWdzIGJpdCBudW1iZXJzCisgKi8KKyNkZWZpbmUgVElGX1NZU0NBTExfVFJBQ0UJMAkvKiBzeXNjYWxsIHRyYWNlIGFjdGl2ZSAqLworI2RlZmluZSBUSUZfTk9USUZZX1JFU1VNRQkxCS8qIHJlc3VtcHRpb24gbm90aWZpY2F0aW9uIHJlcXVlc3RlZCAqLworI2RlZmluZSBUSUZfU0lHUEVORElORwkJMgkvKiBzaWduYWwgcGVuZGluZyAqLworI2RlZmluZSBUSUZfTkVFRF9SRVNDSEVECTMJLyogcmVzY2hlZHVsaW5nIG5lY2Vzc2FyeSAqLworI2RlZmluZSBUSUZfUkVTVEFSVF9TVkMJCTQJLyogcmVzdGFydCBzdmMgd2l0aCBuZXcgc3ZjIG51bWJlciAqLworI2RlZmluZSBUSUZfU1lTQ0FMTF9BVURJVAk1CS8qIHN5c2NhbGwgYXVkaXRpbmcgYWN0aXZlICovCisjZGVmaW5lIFRJRl9TSU5HTEVfU1RFUAkJNgkvKiBkZWxpdmVyIHNpZ3RyYXAgb24gcmV0dXJuIHRvIHVzZXIgKi8KKyNkZWZpbmUgVElGX1VTRURGUFUJCTE2CS8qIEZQVSB3YXMgdXNlZCBieSB0aGlzIHRhc2sgdGhpcyBxdWFudHVtIChTTVApICovCisjZGVmaW5lIFRJRl9QT0xMSU5HX05SRkxBRwkxNwkvKiB0cnVlIGlmIHBvbGxfaWRsZSgpIGlzIHBvbGxpbmcgCisJCQkJCSAgIFRJRl9ORUVEX1JFU0NIRUQgKi8KKyNkZWZpbmUgVElGXzMxQklUCQkxOAkvKiAzMmJpdCBwcm9jZXNzICovIAorI2RlZmluZSBUSUZfTUVNRElFCQkxOQorCisjZGVmaW5lIF9USUZfU1lTQ0FMTF9UUkFDRQkoMTw8VElGX1NZU0NBTExfVFJBQ0UpCisjZGVmaW5lIF9USUZfTk9USUZZX1JFU1VNRQkoMTw8VElGX05PVElGWV9SRVNVTUUpCisjZGVmaW5lIF9USUZfU0lHUEVORElORwkJKDE8PFRJRl9TSUdQRU5ESU5HKQorI2RlZmluZSBfVElGX05FRURfUkVTQ0hFRAkoMTw8VElGX05FRURfUkVTQ0hFRCkKKyNkZWZpbmUgX1RJRl9SRVNUQVJUX1NWQwkoMTw8VElGX1JFU1RBUlRfU1ZDKQorI2RlZmluZSBfVElGX1NZU0NBTExfQVVESVQJKDE8PFRJRl9TWVNDQUxMX0FVRElUKQorI2RlZmluZSBfVElGX1NJTkdMRV9TVEVQCSgxPDxUSUZfU0lOR0xFX1NURVApCisjZGVmaW5lIF9USUZfVVNFREZQVQkJKDE8PFRJRl9VU0VERlBVKQorI2RlZmluZSBfVElGX1BPTExJTkdfTlJGTEFHCSgxPDxUSUZfUE9MTElOR19OUkZMQUcpCisjZGVmaW5lIF9USUZfMzFCSVQJCSgxPDxUSUZfMzFCSVQpCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNkZWZpbmUgUFJFRU1QVF9BQ1RJVkUJCTB4NDAwMDAwMAorCisjZW5kaWYgLyogX0FTTV9USFJFQURfSU5GT19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL3RpbWVyLmggYi9pbmNsdWRlL2FzbS1zMzkwL3RpbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWEwNzg4OQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvdGltZXIuaApAQCAtMCwwICsxLDQ2IEBACisvKgorICogIGluY2x1ZGUvYXNtLXMzOTAvdGltZXIuaAorICoKKyAqICAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAyMDAzCisgKiAgVmlydHVhbCBDUFUgdGltZXIKKyAqCisgKiAgQXV0aG9yOiBKYW4gR2xhdWJlciAoamFuZ0BkZS5pYm0uY29tKQorICovCisKKyNpZm5kZWYgX0FTTV9TMzkwX1RJTUVSX0gKKyNkZWZpbmUgX0FTTV9TMzkwX1RJTUVSX0gKKworI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisKKyNkZWZpbmUgVlRJTUVSX01BWF9TTElDRSAoMHg3ZmZmZmZmZmZmZmZmMDAwTEwpCisKK3N0cnVjdCB2dGltZXJfbGlzdCB7CisJc3RydWN0IGxpc3RfaGVhZCBlbnRyeTsKKworCWludCBjcHU7CisJX191NjQgZXhwaXJlczsKKwlfX3U2NCBpbnRlcnZhbDsKKworCXNwaW5sb2NrX3QgbG9jazsKKwl1bnNpZ25lZCBsb25nIG1hZ2ljOworCisJdm9pZCAoKmZ1bmN0aW9uKSh1bnNpZ25lZCBsb25nLCBzdHJ1Y3QgcHRfcmVncyopOworCXVuc2lnbmVkIGxvbmcgZGF0YTsKK307CisKKy8qIHRoZSBvZmZzZXQgdmFsdWUgd2lsbCB3cmFwIGFmdGVyIGNhLiA3MSB5ZWFycyAqLworc3RydWN0IHZ0aW1lcl9xdWV1ZSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXNwaW5sb2NrX3QgbG9jazsKKwlfX3U2NCB0b19leHBpcmU7CSAgLyogY3VycmVudCBldmVudCBleHBpcmUgdGltZSAqLworCV9fdTY0IG9mZnNldDsJCSAgLyogbGlzdCBvZmZzZXQgdG8gemVybyAqLworCV9fdTY0IGlkbGU7CQkgIC8qIHRlbXAgdmFyIGZvciBpZGxlICovCit9OworCitleHRlcm4gdm9pZCBpbml0X3ZpcnRfdGltZXIoc3RydWN0IHZ0aW1lcl9saXN0ICp0aW1lcik7CitleHRlcm4gdm9pZCBhZGRfdmlydF90aW1lcih2b2lkICpuZXcpOworZXh0ZXJuIHZvaWQgYWRkX3ZpcnRfdGltZXJfcGVyaW9kaWModm9pZCAqbmV3KTsKK2V4dGVybiBpbnQgbW9kX3ZpcnRfdGltZXIoc3RydWN0IHZ0aW1lcl9saXN0ICp0aW1lciwgX191NjQgZXhwaXJlcyk7CitleHRlcm4gaW50IGRlbF92aXJ0X3RpbWVyKHN0cnVjdCB2dGltZXJfbGlzdCAqdGltZXIpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvdGltZXguaCBiL2luY2x1ZGUvYXNtLXMzOTAvdGltZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODQ4MDU3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tczM5MC90aW1leC5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiAgaW5jbHVkZS9hc20tczM5MC90aW1leC5oCisgKgorICogIFMzOTAgdmVyc2lvbgorICogICAgQ29weXJpZ2h0IChDKSAxOTk5IElCTSBEZXV0c2NobGFuZCBFbnR3aWNrbHVuZyBHbWJILCBJQk0gQ29ycG9yYXRpb24KKyAqCisgKiAgRGVyaXZlZCBmcm9tICJpbmNsdWRlL2FzbS1pMzg2L3RpbWV4LmgiCisgKiAgICBDb3B5cmlnaHQgKEMpIDE5OTIsIExpbnVzIFRvcnZhbGRzCisgKi8KKworI2lmbmRlZiBfQVNNX1MzOTBfVElNRVhfSAorI2RlZmluZSBfQVNNX1MzOTBfVElNRVhfSAorCisjZGVmaW5lIENMT0NLX1RJQ0tfUkFURQkxMTkzMTgwIC8qIFVuZGVybHlpbmcgSFogKi8KKwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgY3ljbGVzX3Q7CisKK3N0YXRpYyBpbmxpbmUgY3ljbGVzX3QgZ2V0X2N5Y2xlcyh2b2lkKQoreworCWN5Y2xlc190IGN5Y2xlczsKKworCV9fYXNtX18oInN0Y2sgMCglMSkiIDogIj1tIiAoY3ljbGVzKSA6ICJhIiAoJmN5Y2xlcykgOiAiY2MiKTsKKwlyZXR1cm4gY3ljbGVzID4+IDI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIGdldF9jbG9jayAodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgY2xrOworCisJX19hc21fXygic3RjayAwKCUxKSIgOiAiPW0iIChjbGspIDogImEiICgmY2xrKSA6ICJjYyIpOworCXJldHVybiBjbGs7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC90bGIuaCBiL2luY2x1ZGUvYXNtLXMzOTAvdGxiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFiZDk1NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvdGxiLmgKQEAgLTAsMCArMSwyMCBAQAorI2lmbmRlZiBfUzM5MF9UTEJfSAorI2RlZmluZSBfUzM5MF9UTEJfSAorCisvKgorICogczM5MCBkb2Vzbid0IG5lZWQgYW55IHNwZWNpYWwgcGVyLXB0ZSBvcgorICogcGVyLXZtYSBoYW5kbGluZy4uCisgKi8KKyNkZWZpbmUgdGxiX3N0YXJ0X3ZtYSh0bGIsIHZtYSkgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSB0bGJfZW5kX3ZtYSh0bGIsIHZtYSkgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBfX3RsYl9yZW1vdmVfdGxiX2VudHJ5KHRsYiwgcHRlcCwgYWRkcmVzcykgZG8geyB9IHdoaWxlICgwKQorCisvKgorICogLi4gYmVjYXVzZSB3ZSBmbHVzaCB0aGUgd2hvbGUgbW0gd2hlbiBpdAorICogZmlsbHMgdXAuCisgKi8KKyNkZWZpbmUgdGxiX2ZsdXNoKHRsYikgZmx1c2hfdGxiX21tKCh0bGIpLT5tbSkKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3RsYi5oPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvdGxiZmx1c2guaCBiL2luY2x1ZGUvYXNtLXMzOTAvdGxiZmx1c2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmI3M2IwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tczM5MC90bGJmbHVzaC5oCkBAIC0wLDAgKzEsMTUzIEBACisjaWZuZGVmIF9TMzkwX1RMQkZMVVNIX0gKKyNkZWZpbmUgX1MzOTBfVExCRkxVU0hfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisKKy8qCisgKiBUTEIgZmx1c2hpbmc6CisgKgorICogIC0gZmx1c2hfdGxiKCkgZmx1c2hlcyB0aGUgY3VycmVudCBtbSBzdHJ1Y3QgVExCcworICogIC0gZmx1c2hfdGxiX2FsbCgpIGZsdXNoZXMgYWxsIHByb2Nlc3NlcyBUTEJzIAorICogIC0gZmx1c2hfdGxiX21tKG1tKSBmbHVzaGVzIHRoZSBzcGVjaWZpZWQgbW0gY29udGV4dCBUTEIncworICogIC0gZmx1c2hfdGxiX3BhZ2Uodm1hLCB2bWFkZHIpIGZsdXNoZXMgb25lIHBhZ2UKKyAqICAtIGZsdXNoX3RsYl9yYW5nZSh2bWEsIHN0YXJ0LCBlbmQpIGZsdXNoZXMgYSByYW5nZSBvZiBwYWdlcworICogIC0gZmx1c2hfdGxiX2tlcm5lbF9yYW5nZShzdGFydCwgZW5kKSBmbHVzaGVzIGEgcmFuZ2Ugb2Yga2VybmVsIHBhZ2VzCisgKiAgLSBmbHVzaF90bGJfcGd0YWJsZXMobW0sIHN0YXJ0LCBlbmQpIGZsdXNoZXMgYSByYW5nZSBvZiBwYWdlIHRhYmxlcworICovCisKKy8qCisgKiBTLzM5MCBoYXMgdGhyZWUgd2F5cyBvZiBmbHVzaGluZyBUTEJzCisgKiAncHRsYicgZG9lcyBhIGZsdXNoIG9mIHRoZSBsb2NhbCBwcm9jZXNzb3IKKyAqICdjc3AnIGZsdXNoZXMgdGhlIFRMQnMgb24gYWxsIFBVcyBvZiBhIFNNUAorICogJ2lwdGUnIGludmFsaWRhdGVzIGEgcHRlIGluIGEgcGFnZSB0YWJsZSBhbmQgZmx1c2hlcyB0aGF0IG91dCBvZgorICogdGhlIFRMQnMgb2YgYWxsIFBVcyBvZiBhIFNNUAorICovCisKKyNkZWZpbmUgbG9jYWxfZmx1c2hfdGxiKCkgXAorZG8geyAgX19hc21fXyBfX3ZvbGF0aWxlX18oInB0bGIiOiA6IDoibWVtb3J5Iik7IH0gd2hpbGUgKDApCisKKyNpZm5kZWYgQ09ORklHX1NNUAorCisvKgorICogV2UgYWx3YXlzIG5lZWQgdG8gZmx1c2gsIHNpbmNlIHMzOTAgZG9lcyBub3QgZmx1c2ggdGxiCisgKiBvbiBlYWNoIGNvbnRleHQgc3dpdGNoCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYih2b2lkKQoreworCWxvY2FsX2ZsdXNoX3RsYigpOworfQorc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9hbGwodm9pZCkKK3sKKwlsb2NhbF9mbHVzaF90bGIoKTsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pIAoreworCWxvY2FsX2ZsdXNoX3RsYigpOworfQorc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJCSAgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCWxvY2FsX2ZsdXNoX3RsYigpOworfQorc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCQkgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwlsb2NhbF9mbHVzaF90bGIoKTsKK30KKworI2RlZmluZSBmbHVzaF90bGJfa2VybmVsX3JhbmdlKHN0YXJ0LCBlbmQpIFwKKwlsb2NhbF9mbHVzaF90bGIoKTsKKworI2Vsc2UKKworI2luY2x1ZGUgPGFzbS9zbXAuaD4KKworZXh0ZXJuIHZvaWQgc21wX3B0bGJfYWxsKHZvaWQpOworCitzdGF0aWMgaW5saW5lIHZvaWQgZ2xvYmFsX2ZsdXNoX3RsYih2b2lkKQoreworI2lmbmRlZiBfX3MzOTB4X18KKwlpZiAoIU1BQ0hJTkVfSEFTX0NTUCkgeworCQlzbXBfcHRsYl9hbGwoKTsKKwkJcmV0dXJuOworCX0KKyNlbmRpZiAvKiBfX3MzOTB4X18gKi8KKwl7CisJCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgYWRkciBhc20oIjQiKTsKKwkJbG9uZyBkdW1teTsKKworCQlkdW1teSA9IDA7CisJCWFkZHIgPSAoKHVuc2lnbmVkIGxvbmcpICZkdW1teSkgKyAxOworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCQkiICAgIHNsciAgMiwyXG4iCisJCQkiICAgIHNsciAgMywzXG4iCisJCQkiICAgIGNzcCAgMiwlMCIKKwkJCTogOiAiYSIgKGFkZHIpLCAibSIgKGR1bW15KSA6ICJjYyIsICIyIiwgIjMiICk7CisJfQorfQorCisvKgorICogV2Ugb25seSBoYXZlIHRvIGRvIGdsb2JhbCBmbHVzaCBvZiB0bGIgaWYgcHJvY2VzcyBydW4gc2luY2UgbGFzdAorICogZmx1c2ggb24gYW55IG90aGVyIHB1IHRoYW4gY3VycmVudC4gCisgKiBJZiB3ZSBoYXZlIHRocmVhZHMgKG1tLT5jb3VudCA+IDEpIHdlIGFsd2F5cyBkbyBhIGdsb2JhbCBmbHVzaCwgCisgKiBzaW5jZSB0aGUgcHJvY2VzcyBydW5zIG9uIG1vcmUgdGhhbiBvbmUgcHJvY2Vzc29yIGF0IHRoZSBzYW1lIHRpbWUuCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkIF9fZmx1c2hfdGxiX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKiBtbSkKK3sKKwljcHVtYXNrX3QgbG9jYWxfY3B1bWFzazsKKworCWlmICh1bmxpa2VseShjcHVzX2VtcHR5KG1tLT5jcHVfdm1fbWFzaykpKQorCQlyZXR1cm47CisJaWYgKE1BQ0hJTkVfSEFTX0lEVEUpIHsKKwkJYXNtIHZvbGF0aWxlICgiLmluc24gcnJmLDB4Yjk4ZTAwMDAsMCwlMCwlMSwwIgorCQkJICAgICAgOiA6ICJhIiAoMjA0OCksCisJCQkgICAgICAiYSIgKF9fcGEobW0tPnBnZCkmUEFHRV9NQVNLKSA6ICJjYyIgKTsKKwkJcmV0dXJuOworCX0KKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwlsb2NhbF9jcHVtYXNrID0gY3B1bWFza19vZl9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwlpZiAoY3B1c19lcXVhbChtbS0+Y3B1X3ZtX21hc2ssIGxvY2FsX2NwdW1hc2spKQorCQlsb2NhbF9mbHVzaF90bGIoKTsKKwllbHNlCisJCWdsb2JhbF9mbHVzaF90bGIoKTsKKwlwcmVlbXB0X2VuYWJsZSgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiKHZvaWQpCit7CisJX19mbHVzaF90bGJfbW0oY3VycmVudC0+bW0pOworfQorc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9hbGwodm9pZCkKK3sKKwlnbG9iYWxfZmx1c2hfdGxiKCk7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKSAKK3sKKwlfX2ZsdXNoX3RsYl9tbShtbSk7IAorfQorc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJCSAgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCV9fZmx1c2hfdGxiX21tKHZtYS0+dm1fbW0pOworfQorc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCQkgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwlfX2ZsdXNoX3RsYl9tbSh2bWEtPnZtX21tKTsgCit9CisKKyNkZWZpbmUgZmx1c2hfdGxiX2tlcm5lbF9yYW5nZShzdGFydCwgZW5kKSBnbG9iYWxfZmx1c2hfdGxiKCkKKworI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfcGd0YWJsZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworICAgICAgICAvKiBTLzM5MCBkb2VzIG5vdCBrZWVwIGFueSBwYWdlIHRhYmxlIGNhY2hlcyBpbiBUTEIgKi8KK30KKworI2VuZGlmIC8qIF9TMzkwX1RMQkZMVVNIX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvdG9kY2xrLmggYi9pbmNsdWRlL2FzbS1zMzkwL3RvZGNsay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3ZjYyMDUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL3RvZGNsay5oCkBAIC0wLDAgKzEsMjMgQEAKKy8qCisgKiBGaWxlLi4uLi4uLi4uLi46IGxpbnV4L2luY2x1ZGUvYXNtL3RvZGNsay5oCisgKiBBdXRob3IocykuLi4uLi46IEhvbGdlciBTbW9saW5za2kgPEhvbGdlci5TbW9saW5za2lAZGUuaWJtLmNvbT4KKyAqIEJ1Z3JlcG9ydHMudG8uLjogPExpbnV4MzkwQGRlLmlibS5jb20+CisgKiAoQykgSUJNIENvcnBvcmF0aW9uLCBJQk0gRGV1dHNjaGxhbmQgRW50d2lja2x1bmcgR21iSCwgMTk5OSwyMDAwCisgKgorICogSGlzdG9yeSBvZiBjaGFuZ2VzIChzdGFydHMgSnVseSAyMDAwKQorICovCisKKyNpZm5kZWYgX19BU01fVE9EQ0xLX0gKKyNkZWZpbmUgX19BU01fVE9EQ0xLX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2RlZmluZSBUT0RfdVNFQyAoMHgxMDAwVUxMKQorI2RlZmluZSBUT0RfbVNFQyAoMTAwMCAqIFRPRF91U0VDKQorI2RlZmluZSBUT0RfU0VDICgxMDAwICogVE9EX21TRUMpCisjZGVmaW5lIFRPRF9NSU4gKDYwICogVE9EX1NFQykKKyNkZWZpbmUgVE9EX0hPVVIgKDYwICogVE9EX01JTikKKworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC90b3BvbG9neS5oIGIvaW5jbHVkZS9hc20tczM5MC90b3BvbG9neS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxM2FhNjQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL3RvcG9sb2d5LmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9BU01fUzM5MF9UT1BPTE9HWV9ICisjZGVmaW5lIF9BU01fUzM5MF9UT1BPTE9HWV9ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy90b3BvbG9neS5oPgorCisjZW5kaWYgLyogX0FTTV9TMzkwX1RPUE9MT0dZX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvdHlwZXMuaCBiL2luY2x1ZGUvYXNtLXMzOTAvdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmVmZDYxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tczM5MC90eXBlcy5oCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogIGluY2x1ZGUvYXNtLXMzOTAvdHlwZXMuaAorICoKKyAqICBTMzkwIHZlcnNpb24KKyAqCisgKiAgRGVyaXZlZCBmcm9tICJpbmNsdWRlL2FzbS1pMzg2L3R5cGVzLmgiCisgKi8KKworI2lmbmRlZiBfUzM5MF9UWVBFU19ICisjZGVmaW5lIF9TMzkwX1RZUEVTX0gKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1bW9kZV90OworCisvKgorICogX194eCBpcyBvazogaXQgZG9lc24ndCBwb2xsdXRlIHRoZSBQT1NJWCBuYW1lc3BhY2UuIFVzZSB0aGVzZSBpbiB0aGUKKyAqIGhlYWRlciBmaWxlcyBleHBvcnRlZCB0byB1c2VyIHNwYWNlCisgKi8KKwordHlwZWRlZiBfX3NpZ25lZF9fIGNoYXIgX19zODsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBfX3U4OworCit0eXBlZGVmIF9fc2lnbmVkX18gc2hvcnQgX19zMTY7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fdTE2OworCit0eXBlZGVmIF9fc2lnbmVkX18gaW50IF9fczMyOwordHlwZWRlZiB1bnNpZ25lZCBpbnQgX191MzI7CisKKyNpZm5kZWYgX19zMzkweF9fCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoX19TVFJJQ1RfQU5TSV9fKQordHlwZWRlZiBfX3NpZ25lZF9fIGxvbmcgbG9uZyBfX3M2NDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIF9fdTY0OworI2VuZGlmCisjZWxzZSAvKiBfX3MzOTB4X18gKi8KK3R5cGVkZWYgX19zaWduZWRfXyBsb25nIF9fczY0OwordHlwZWRlZiB1bnNpZ25lZCBsb25nIF9fdTY0OworI2VuZGlmCisKKy8qIEEgYWRkcmVzcyB0eXBlIHNvIHRoYXQgYXJpdGhtZXRpYyBjYW4gYmUgZG9uZSBvbiBpdCAmIGl0IGNhbiBiZSB1cGdyYWRlZCB0bworICAgNjQgYml0IHdoZW4gbmVjZXNzYXJ5IAorKi8KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBhZGRyX3Q7IAordHlwZWRlZiBfX3NpZ25lZF9fIGxvbmcgc2FkZHJfdDsKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisvKgorICogVGhlc2UgYXJlbid0IGV4cG9ydGVkIG91dHNpZGUgdGhlIGtlcm5lbCB0byBhdm9pZCBuYW1lIHNwYWNlIGNsYXNoZXMKKyAqLworI2lmZGVmIF9fS0VSTkVMX18KKworI2lmbmRlZiBfX3MzOTB4X18KKyNkZWZpbmUgQklUU19QRVJfTE9ORyAzMgorI2Vsc2UKKyNkZWZpbmUgQklUU19QRVJfTE9ORyA2NAorI2VuZGlmCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKwordHlwZWRlZiBzaWduZWQgY2hhciBzODsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciB1ODsKKwordHlwZWRlZiBzaWduZWQgc2hvcnQgczE2OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1MTY7CisKK3R5cGVkZWYgc2lnbmVkIGludCBzMzI7Cit0eXBlZGVmIHVuc2lnbmVkIGludCB1MzI7CisKKyNpZm5kZWYgX19zMzkweF9fCit0eXBlZGVmIHNpZ25lZCBsb25nIGxvbmcgczY0OwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdTY0OworI2Vsc2UgLyogX19zMzkweF9fICovCit0eXBlZGVmIHNpZ25lZCBsb25nIHM2NDsKK3R5cGVkZWYgdW5zaWduZWQgIGxvbmcgdTY0OworI2VuZGlmIC8qIF9fczM5MHhfXyAqLworCit0eXBlZGVmIHUzMiBkbWFfYWRkcl90OworCit0eXBlZGVmIHVuc2lnbmVkIGludCBrbWVtX2J1ZmN0bF90OworCisjaWZuZGVmIF9fczM5MHhfXwordHlwZWRlZiB1bmlvbiB7CisJdW5zaWduZWQgbG9uZyBsb25nIHBhaXI7CisJc3RydWN0IHsKKwkJdW5zaWduZWQgbG9uZyBldmVuOworCQl1bnNpZ25lZCBsb25nIG9kZDsKKwl9IHN1YnJlZzsKK30gcmVnaXN0ZXJfcGFpcjsKKworI2lmZGVmIENPTkZJR19MQkQKK3R5cGVkZWYgdTY0IHNlY3Rvcl90OworI2RlZmluZSBIQVZFX1NFQ1RPUl9UCisjZW5kaWYKKworI2VuZGlmIC8qICEgX19zMzkweF9fICAgKi8KKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gICovCisjZW5kaWYgLyogX19LRVJORUxfXyAgICAqLworI2VuZGlmIC8qIF9TMzkwX1RZUEVTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvdWFjY2Vzcy5oIGIvaW5jbHVkZS9hc20tczM5MC91YWNjZXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdmNDNhMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvdWFjY2Vzcy5oCkBAIC0wLDAgKzEsNDM2IEBACisvKgorICogIGluY2x1ZGUvYXNtLXMzOTAvdWFjY2Vzcy5oCisgKgorICogIFMzOTAgdmVyc2lvbgorICogICAgQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgSUJNIERldXRzY2hsYW5kIEVudHdpY2tsdW5nIEdtYkgsIElCTSBDb3Jwb3JhdGlvbgorICogICAgQXV0aG9yKHMpOiBIYXJ0bXV0IFBlbm5lciAoaHBAZGUuaWJtLmNvbSksCisgKiAgICAgICAgICAgICAgIE1hcnRpbiBTY2h3aWRlZnNreSAoc2Nod2lkZWZza3lAZGUuaWJtLmNvbSkKKyAqCisgKiAgRGVyaXZlZCBmcm9tICJpbmNsdWRlL2FzbS1pMzg2L3VhY2Nlc3MuaCIKKyAqLworI2lmbmRlZiBfX1MzOTBfVUFDQ0VTU19ICisjZGVmaW5lIF9fUzM5MF9VQUNDRVNTX0gKKworLyoKKyAqIFVzZXIgc3BhY2UgbWVtb3J5IGFjY2VzcyBmdW5jdGlvbnMKKyAqLworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKworI2RlZmluZSBWRVJJRllfUkVBRCAgICAgMAorI2RlZmluZSBWRVJJRllfV1JJVEUgICAgMQorCisKKy8qCisgKiBUaGUgZnMgdmFsdWUgZGV0ZXJtaW5lcyB3aGV0aGVyIGFyZ3VtZW50IHZhbGlkaXR5IGNoZWNraW5nIHNob3VsZCBiZQorICogcGVyZm9ybWVkIG9yIG5vdC4gIElmIGdldF9mcygpID09IFVTRVJfRFMsIGNoZWNraW5nIGlzIHBlcmZvcm1lZCwgd2l0aAorICogZ2V0X2ZzKCkgPT0gS0VSTkVMX0RTLCBjaGVja2luZyBpcyBieXBhc3NlZC4KKyAqCisgKiBGb3IgaGlzdG9yaWNhbCByZWFzb25zLCB0aGVzZSBtYWNyb3MgYXJlIGdyb3NzbHkgbWlzbmFtZWQuCisgKi8KKworI2RlZmluZSBNQUtFX01NX1NFRyhhKSAgKChtbV9zZWdtZW50X3QpIHsgKGEpIH0pCisKKworI2RlZmluZSBLRVJORUxfRFMgICAgICAgTUFLRV9NTV9TRUcoMCkKKyNkZWZpbmUgVVNFUl9EUyAgICAgICAgIE1BS0VfTU1fU0VHKDEpCisKKyNkZWZpbmUgZ2V0X2RzKCkgICAgICAgIChLRVJORUxfRFMpCisjZGVmaW5lIGdldF9mcygpICAgICAgICAoY3VycmVudC0+dGhyZWFkLm1tX3NlZ21lbnQpCisKKyNpZmRlZiBfX3MzOTB4X18KKyNkZWZpbmUgc2V0X2ZzKHgpIFwKKyh7CQkJCQkJCQkJXAorCXVuc2lnbmVkIGxvbmcgX19wdG87CQkJCQkJXAorCWN1cnJlbnQtPnRocmVhZC5tbV9zZWdtZW50ID0gKHgpOwkJCQlcCisJX19wdG8gPSBjdXJyZW50LT50aHJlYWQubW1fc2VnbWVudC5hcjQgPwkJCVwKKwkJUzM5MF9sb3djb3JlLnVzZXJfYXNjZSA6IFMzOTBfbG93Y29yZS5rZXJuZWxfYXNjZTsJXAorCWFzbSB2b2xhdGlsZSAoImxjdGxnIDcsNywlMCIgOiA6ICJtIiAoX19wdG8pICk7CQkJXAorfSkKKyNlbHNlCisjZGVmaW5lIHNldF9mcyh4KSBcCisoewkJCQkJCQkJCVwKKwl1bnNpZ25lZCBsb25nIF9fcHRvOwkJCQkJCVwKKwljdXJyZW50LT50aHJlYWQubW1fc2VnbWVudCA9ICh4KTsJCQkJXAorCV9fcHRvID0gY3VycmVudC0+dGhyZWFkLm1tX3NlZ21lbnQuYXI0ID8JCQlcCisJCVMzOTBfbG93Y29yZS51c2VyX2FzY2UgOiBTMzkwX2xvd2NvcmUua2VybmVsX2FzY2U7CVwKKwlhc20gdm9sYXRpbGUgKCJsY3RsICA3LDcsJTAiIDogOiAibSIgKF9fcHRvKSApOwkJCVwKK30pCisjZW5kaWYKKworI2RlZmluZSBzZWdtZW50X2VxKGEsYikgKChhKS5hcjQgPT0gKGIpLmFyNCkKKworCisjZGVmaW5lIF9fYWNjZXNzX29rKGFkZHIsc2l6ZSkgKDEpCisKKyNkZWZpbmUgYWNjZXNzX29rKHR5cGUsYWRkcixzaXplKSBfX2FjY2Vzc19vayhhZGRyLHNpemUpCisKKy8qIHRoaXMgZnVuY3Rpb24gd2lsbCBnbyBhd2F5IHNvb24gLSB1c2UgYWNjZXNzX29rKCkgaW5zdGVhZCAqLworZXh0ZXJuIGlubGluZSBpbnQgX19kZXByZWNhdGVkIHZlcmlmeV9hcmVhKGludCB0eXBlLCBjb25zdCB2b2lkIF9fdXNlciAqYWRkciwKKwkJCQkJCXVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlyZXR1cm4gYWNjZXNzX29rKHR5cGUsIGFkZHIsIHNpemUpID8gMCA6IC1FRkFVTFQ7Cit9CisKKy8qCisgKiBUaGUgZXhjZXB0aW9uIHRhYmxlIGNvbnNpc3RzIG9mIHBhaXJzIG9mIGFkZHJlc3NlczogdGhlIGZpcnN0IGlzIHRoZQorICogYWRkcmVzcyBvZiBhbiBpbnN0cnVjdGlvbiB0aGF0IGlzIGFsbG93ZWQgdG8gZmF1bHQsIGFuZCB0aGUgc2Vjb25kIGlzCisgKiB0aGUgYWRkcmVzcyBhdCB3aGljaCB0aGUgcHJvZ3JhbSBzaG91bGQgY29udGludWUuICBObyByZWdpc3RlcnMgYXJlCisgKiBtb2RpZmllZCwgc28gaXQgaXMgZW50aXJlbHkgdXAgdG8gdGhlIGNvbnRpbnVhdGlvbiBjb2RlIHRvIGZpZ3VyZSBvdXQKKyAqIHdoYXQgdG8gZG8uCisgKgorICogQWxsIHRoZSByb3V0aW5lcyBiZWxvdyB1c2UgYml0cyBvZiBmaXh1cCBjb2RlIHRoYXQgYXJlIG91dCBvZiBsaW5lCisgKiB3aXRoIHRoZSBtYWluIGluc3RydWN0aW9uIHBhdGguICBUaGlzIG1lYW5zIHdoZW4gZXZlcnl0aGluZyBpcyB3ZWxsLAorICogd2UgZG9uJ3QgZXZlbiBoYXZlIHRvIGp1bXAgb3ZlciB0aGVtLiAgRnVydGhlciwgdGhleSBkbyBub3QgaW50cnVkZQorICogb24gb3VyIGNhY2hlIG9yIHRsYiBlbnRyaWVzLgorICovCisKK3N0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkKK3sKKyAgICAgICAgdW5zaWduZWQgbG9uZyBpbnNuLCBmaXh1cDsKK307CisKKyNpZm5kZWYgX19zMzkweF9fCisjZGVmaW5lIF9fdWFjY2Vzc19maXh1cCBcCisJIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIJXAorCSIyOiBsaGkgICAgJTAsJTRcbiIJCVwKKwkiICAgYnJhcyAgIDEsM2ZcbiIJCVwKKwkiICAgLmxvbmcgIDFiXG4iCQlcCisJIjM6IGwgICAgICAxLDAoMSlcbiIJCVwKKwkiICAgYnIgICAgIDFcbiIJCQlcCisJIi5wcmV2aW91c1xuIgkJCVwKKwkiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIglcCisJIiAgIC5hbGlnbiA0XG4iCQkJXAorCSIgICAubG9uZyAgMGIsMmJcbiIJCVwKKwkiLnByZXZpb3VzIgorI2RlZmluZSBfX3VhY2Nlc3NfY2xvYmJlciAiY2MiLCAiMSIKKyNlbHNlIC8qIF9fczM5MHhfXyAqLworI2RlZmluZSBfX3VhY2Nlc3NfZml4dXAgXAorCSIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iCVwKKwkiMjogbGdoaSAgICUwLCU0XG4iCQlcCisJIiAgIGpnICAgICAxYlxuIgkJXAorCSIucHJldmlvdXNcbiIJCQlcCisJIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIJXAorCSIgICAuYWxpZ24gOFxuIgkJCVwKKwkiICAgLnF1YWQgIDBiLDJiXG4iCQlcCisJIi5wcmV2aW91cyIKKyNkZWZpbmUgX191YWNjZXNzX2Nsb2JiZXIgImNjIgorI2VuZGlmIC8qIF9fczM5MHhfXyAqLworCisvKgorICogVGhlc2UgYXJlIHRoZSBtYWluIHNpbmdsZS12YWx1ZSB0cmFuc2ZlciByb3V0aW5lcy4gIFRoZXkgYXV0b21hdGljYWxseQorICogdXNlIHRoZSByaWdodCBzaXplIGlmIHdlIGp1c3QgaGF2ZSB0aGUgcmlnaHQgcG9pbnRlciB0eXBlLgorICovCisjaWYgX19HTlVDX18gPiAzIHx8IChfX0dOVUNfXyA9PSAzICYmIF9fR05VQ19NSU5PUl9fID4gMikKKyNkZWZpbmUgX19wdXRfdXNlcl9hc20oeCwgcHRyLCBlcnIpIFwKKyh7CQkJCQkJCQlcCisJZXJyID0gMDsJCQkJCQlcCisJYXNtIHZvbGF0aWxlKAkJCQkJCVwKKwkJIjA6IG12Y3MgIDAoJTEsJTIpLCUzLCUwXG4iCQkJXAorCQkiMTpcbiIJCQkJCQlcCisJCV9fdWFjY2Vzc19maXh1cAkJCQkJXAorCQk6ICIrJmQiIChlcnIpCQkJCQlcCisJCTogImQiIChzaXplb2YoKihwdHIpKSksICJhIiAocHRyKSwgIlEiICh4KSwJXAorCQkgICJLIiAoLUVGQVVMVCkJCQkJCVwKKwkJOiBfX3VhY2Nlc3NfY2xvYmJlciApOwkJCQlcCit9KQorI2Vsc2UKKyNkZWZpbmUgX19wdXRfdXNlcl9hc20oeCwgcHRyLCBlcnIpIFwKKyh7CQkJCQkJCQlcCisJZXJyID0gMDsJCQkJCQlcCisJYXNtIHZvbGF0aWxlKAkJCQkJCVwKKwkJIjA6IG12Y3MgIDAoJTEsJTIpLDAoJTMpLCUwXG4iCQkJXAorCQkiMTpcbiIJCQkJCQlcCisJCV9fdWFjY2Vzc19maXh1cAkJCQkJXAorCQk6ICIrJmQiIChlcnIpCQkJCQlcCisJCTogImQiIChzaXplb2YoKihwdHIpKSksICJhIiAocHRyKSwgImEiICgmKHgpKSwJXAorCQkgICJLIiAoLUVGQVVMVCksICJtIiAoeCkJCQlcCisJCTogX191YWNjZXNzX2Nsb2JiZXIgKTsJCQkJXAorfSkKKyNlbmRpZgorCisjaWZuZGVmIF9fQ0hFQ0tFUl9fCisjZGVmaW5lIF9fcHV0X3VzZXIoeCwgcHRyKSBcCisoewkJCQkJCQkJXAorCV9fdHlwZW9mX18oKihwdHIpKSBfX3ggPSAoeCk7CQkJCVwKKwlpbnQgX19wdV9lcnI7CQkJCQkJXAorCXN3aXRjaCAoc2l6ZW9mICgqKHB0cikpKSB7CQkJCVwKKwljYXNlIDE6CQkJCQkJCVwKKwljYXNlIDI6CQkJCQkJCVwKKwljYXNlIDQ6CQkJCQkJCVwKKwljYXNlIDg6CQkJCQkJCVwKKwkJX19wdXRfdXNlcl9hc20oX194LCBwdHIsIF9fcHVfZXJyKTsJCVwKKwkJYnJlYWs7CQkJCQkJXAorCWRlZmF1bHQ6CQkJCQkJXAorCQlfX3B1dF91c2VyX2JhZCgpOwkJCQlcCisJCWJyZWFrOwkJCQkJCVwKKwkgfQkJCQkJCQlcCisJX19wdV9lcnI7CQkJCQkJXAorfSkKKyNlbHNlCisjZGVmaW5lIF9fcHV0X3VzZXIoeCwgcHRyKQkJCVwKKyh7CQkJCQkJXAorCXZvaWQgX191c2VyICpwOwkJCQlcCisJcCA9IChwdHIpOwkJCQlcCisJMDsJCQkJCVwKK30pCisjZW5kaWYKKworI2RlZmluZSBwdXRfdXNlcih4LCBwdHIpCQkJCQlcCisoewkJCQkJCQkJXAorCW1pZ2h0X3NsZWVwKCk7CQkJCQkJXAorCV9fcHV0X3VzZXIoeCwgcHRyKTsJCQkJCVwKK30pCisKKworZXh0ZXJuIGludCBfX3B1dF91c2VyX2JhZCh2b2lkKSBfX2F0dHJpYnV0ZV9fKChub3JldHVybikpOworCisjaWYgX19HTlVDX18gPiAzIHx8IChfX0dOVUNfXyA9PSAzICYmIF9fR05VQ19NSU5PUl9fID4gMikKKyNkZWZpbmUgX19nZXRfdXNlcl9hc20oeCwgcHRyLCBlcnIpIFwKKyh7CQkJCQkJCQlcCisJZXJyID0gMDsJCQkJCQlcCisJYXNtIHZvbGF0aWxlICgJCQkJCQlcCisJCSIwOiBtdmNwICAlTzEoJTIsJVIxKSwwKCUzKSwlMFxuIgkJXAorCQkiMTpcbiIJCQkJCQlcCisJCV9fdWFjY2Vzc19maXh1cAkJCQkJXAorCQk6ICIrJmQiIChlcnIpLCAiPVEiICh4KQkJCQlcCisJCTogImQiIChzaXplb2YoKihwdHIpKSksICJhIiAocHRyKSwJCVwKKwkJICAiSyIgKC1FRkFVTFQpCQkJCQlcCisJCTogX191YWNjZXNzX2Nsb2JiZXIgKTsJCQkJXAorfSkKKyNlbHNlCisjZGVmaW5lIF9fZ2V0X3VzZXJfYXNtKHgsIHB0ciwgZXJyKSBcCisoewkJCQkJCQkJXAorCWVyciA9IDA7CQkJCQkJXAorCWFzbSB2b2xhdGlsZSAoCQkJCQkJXAorCQkiMDogbXZjcCAgMCglMiwlNSksMCglMyksJTBcbiIJCQlcCisJCSIxOlxuIgkJCQkJCVwKKwkJX191YWNjZXNzX2ZpeHVwCQkJCQlcCisJCTogIismZCIgKGVyciksICI9bSIgKHgpCQkJCVwKKwkJOiAiZCIgKHNpemVvZigqKHB0cikpKSwgImEiIChwdHIpLAkJXAorCQkgICJLIiAoLUVGQVVMVCksICJhIiAoJih4KSkJCQlcCisJCTogX191YWNjZXNzX2Nsb2JiZXIgKTsJCQkJXAorfSkKKyNlbmRpZgorCisjaWZuZGVmIF9fQ0hFQ0tFUl9fCisjZGVmaW5lIF9fZ2V0X3VzZXIoeCwgcHRyKQkJCQkJXAorKHsJCQkJCQkJCVwKKwlfX3R5cGVvZl9fKCoocHRyKSkgX194OwkJCQkJXAorCWludCBfX2d1X2VycjsJCQkJCQlcCisJc3dpdGNoIChzaXplb2YoKihwdHIpKSkgewkJCQlcCisJY2FzZSAxOgkJCQkJCQlcCisJY2FzZSAyOgkJCQkJCQlcCisJY2FzZSA0OgkJCQkJCQlcCisJY2FzZSA4OgkJCQkJCQlcCisJCV9fZ2V0X3VzZXJfYXNtKF9feCwgcHRyLCBfX2d1X2Vycik7CQlcCisJCWJyZWFrOwkJCQkJCVwKKwlkZWZhdWx0OgkJCQkJCVwKKwkJX19nZXRfdXNlcl9iYWQoKTsJCQkJXAorCQlicmVhazsJCQkJCQlcCisJfQkJCQkJCQlcCisJKHgpID0gX194OwkJCQkJCVwKKwlfX2d1X2VycjsJCQkJCQlcCit9KQorI2Vsc2UKKyNkZWZpbmUgX19nZXRfdXNlcih4LCBwdHIpCQkJXAorKHsJCQkJCQlcCisJdm9pZCBfX3VzZXIgKnA7CQkJCVwKKwlwID0gKHB0cik7CQkJCVwKKwkwOwkJCQkJXAorfSkKKyNlbmRpZgorCisKKyNkZWZpbmUgZ2V0X3VzZXIoeCwgcHRyKQkJCQkJXAorKHsJCQkJCQkJCVwKKwltaWdodF9zbGVlcCgpOwkJCQkJCVwKKwlfX2dldF91c2VyKHgsIHB0cik7CQkJCQlcCit9KQorCitleHRlcm4gaW50IF9fZ2V0X3VzZXJfYmFkKHZvaWQpIF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSk7CisKKyNkZWZpbmUgX19wdXRfdXNlcl91bmFsaWduZWQgX19wdXRfdXNlcgorI2RlZmluZSBfX2dldF91c2VyX3VuYWxpZ25lZCBfX2dldF91c2VyCisKK2V4dGVybiBsb25nIF9fY29weV90b191c2VyX2FzbShjb25zdCB2b2lkICpmcm9tLCBsb25nIG4sIHZvaWQgX191c2VyICp0byk7CisKKy8qKgorICogX19jb3B5X3RvX3VzZXI6IC0gQ29weSBhIGJsb2NrIG9mIGRhdGEgaW50byB1c2VyIHNwYWNlLCB3aXRoIGxlc3MgY2hlY2tpbmcuCisgKiBAdG86ICAgRGVzdGluYXRpb24gYWRkcmVzcywgaW4gdXNlciBzcGFjZS4KKyAqIEBmcm9tOiBTb3VyY2UgYWRkcmVzcywgaW4ga2VybmVsIHNwYWNlLgorICogQG46ICAgIE51bWJlciBvZiBieXRlcyB0byBjb3B5LgorICoKKyAqIENvbnRleHQ6IFVzZXIgY29udGV4dCBvbmx5LiAgVGhpcyBmdW5jdGlvbiBtYXkgc2xlZXAuCisgKgorICogQ29weSBkYXRhIGZyb20ga2VybmVsIHNwYWNlIHRvIHVzZXIgc3BhY2UuICBDYWxsZXIgbXVzdCBjaGVjaworICogdGhlIHNwZWNpZmllZCBibG9jayB3aXRoIGFjY2Vzc19vaygpIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisgKgorICogUmV0dXJucyBudW1iZXIgb2YgYnl0ZXMgdGhhdCBjb3VsZCBub3QgYmUgY29waWVkLgorICogT24gc3VjY2VzcywgdGhpcyB3aWxsIGJlIHplcm8uCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZworX19jb3B5X3RvX3VzZXIodm9pZCBfX3VzZXIgKnRvLCBjb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pCit7CisJcmV0dXJuIF9fY29weV90b191c2VyX2FzbShmcm9tLCBuLCB0byk7Cit9CisKKyNkZWZpbmUgX19jb3B5X3RvX3VzZXJfaW5hdG9taWMgX19jb3B5X3RvX3VzZXIKKyNkZWZpbmUgX19jb3B5X2Zyb21fdXNlcl9pbmF0b21pYyBfX2NvcHlfZnJvbV91c2VyCisKKy8qKgorICogY29weV90b191c2VyOiAtIENvcHkgYSBibG9jayBvZiBkYXRhIGludG8gdXNlciBzcGFjZS4KKyAqIEB0bzogICBEZXN0aW5hdGlvbiBhZGRyZXNzLCBpbiB1c2VyIHNwYWNlLgorICogQGZyb206IFNvdXJjZSBhZGRyZXNzLCBpbiBrZXJuZWwgc3BhY2UuCisgKiBAbjogICAgTnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkuCisgKgorICogQ29udGV4dDogVXNlciBjb250ZXh0IG9ubHkuICBUaGlzIGZ1bmN0aW9uIG1heSBzbGVlcC4KKyAqCisgKiBDb3B5IGRhdGEgZnJvbSBrZXJuZWwgc3BhY2UgdG8gdXNlciBzcGFjZS4KKyAqCisgKiBSZXR1cm5zIG51bWJlciBvZiBieXRlcyB0aGF0IGNvdWxkIG5vdCBiZSBjb3BpZWQuCisgKiBPbiBzdWNjZXNzLCB0aGlzIHdpbGwgYmUgemVyby4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCitjb3B5X3RvX3VzZXIodm9pZCBfX3VzZXIgKnRvLCBjb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pCit7CisJbWlnaHRfc2xlZXAoKTsKKwlpZiAoYWNjZXNzX29rKFZFUklGWV9XUklURSwgdG8sIG4pKQorCQluID0gX19jb3B5X3RvX3VzZXIodG8sIGZyb20sIG4pOworCXJldHVybiBuOworfQorCitleHRlcm4gbG9uZyBfX2NvcHlfZnJvbV91c2VyX2FzbSh2b2lkICp0bywgbG9uZyBuLCBjb25zdCB2b2lkIF9fdXNlciAqZnJvbSk7CisKKy8qKgorICogX19jb3B5X2Zyb21fdXNlcjogLSBDb3B5IGEgYmxvY2sgb2YgZGF0YSBmcm9tIHVzZXIgc3BhY2UsIHdpdGggbGVzcyBjaGVja2luZy4KKyAqIEB0bzogICBEZXN0aW5hdGlvbiBhZGRyZXNzLCBpbiBrZXJuZWwgc3BhY2UuCisgKiBAZnJvbTogU291cmNlIGFkZHJlc3MsIGluIHVzZXIgc3BhY2UuCisgKiBAbjogICAgTnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkuCisgKgorICogQ29udGV4dDogVXNlciBjb250ZXh0IG9ubHkuICBUaGlzIGZ1bmN0aW9uIG1heSBzbGVlcC4KKyAqCisgKiBDb3B5IGRhdGEgZnJvbSB1c2VyIHNwYWNlIHRvIGtlcm5lbCBzcGFjZS4gIENhbGxlciBtdXN0IGNoZWNrCisgKiB0aGUgc3BlY2lmaWVkIGJsb2NrIHdpdGggYWNjZXNzX29rKCkgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKyAqCisgKiBSZXR1cm5zIG51bWJlciBvZiBieXRlcyB0aGF0IGNvdWxkIG5vdCBiZSBjb3BpZWQuCisgKiBPbiBzdWNjZXNzLCB0aGlzIHdpbGwgYmUgemVyby4KKyAqCisgKiBJZiBzb21lIGRhdGEgY291bGQgbm90IGJlIGNvcGllZCwgdGhpcyBmdW5jdGlvbiB3aWxsIHBhZCB0aGUgY29waWVkCisgKiBkYXRhIHRvIHRoZSByZXF1ZXN0ZWQgc2l6ZSB1c2luZyB6ZXJvIGJ5dGVzLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK19fY29weV9mcm9tX3VzZXIodm9pZCAqdG8sIGNvbnN0IHZvaWQgX191c2VyICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pCit7CisJcmV0dXJuIF9fY29weV9mcm9tX3VzZXJfYXNtKHRvLCBuLCBmcm9tKTsKK30KKworLyoqCisgKiBjb3B5X2Zyb21fdXNlcjogLSBDb3B5IGEgYmxvY2sgb2YgZGF0YSBmcm9tIHVzZXIgc3BhY2UuCisgKiBAdG86ICAgRGVzdGluYXRpb24gYWRkcmVzcywgaW4ga2VybmVsIHNwYWNlLgorICogQGZyb206IFNvdXJjZSBhZGRyZXNzLCBpbiB1c2VyIHNwYWNlLgorICogQG46ICAgIE51bWJlciBvZiBieXRlcyB0byBjb3B5LgorICoKKyAqIENvbnRleHQ6IFVzZXIgY29udGV4dCBvbmx5LiAgVGhpcyBmdW5jdGlvbiBtYXkgc2xlZXAuCisgKgorICogQ29weSBkYXRhIGZyb20gdXNlciBzcGFjZSB0byBrZXJuZWwgc3BhY2UuCisgKgorICogUmV0dXJucyBudW1iZXIgb2YgYnl0ZXMgdGhhdCBjb3VsZCBub3QgYmUgY29waWVkLgorICogT24gc3VjY2VzcywgdGhpcyB3aWxsIGJlIHplcm8uCisgKgorICogSWYgc29tZSBkYXRhIGNvdWxkIG5vdCBiZSBjb3BpZWQsIHRoaXMgZnVuY3Rpb24gd2lsbCBwYWQgdGhlIGNvcGllZAorICogZGF0YSB0byB0aGUgcmVxdWVzdGVkIHNpemUgdXNpbmcgemVybyBieXRlcy4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCitjb3B5X2Zyb21fdXNlcih2b2lkICp0bywgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGxvbmcgbikKK3sKKwltaWdodF9zbGVlcCgpOworCWlmIChhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGZyb20sIG4pKQorCQluID0gX19jb3B5X2Zyb21fdXNlcih0bywgZnJvbSwgbik7CisJZWxzZQorCQltZW1zZXQodG8sIDAsIG4pOworCXJldHVybiBuOworfQorCitleHRlcm4gdW5zaWduZWQgbG9uZyBfX2NvcHlfaW5fdXNlcl9hc20oY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIGxvbmcgbiwKKwkJCQkJCQl2b2lkIF9fdXNlciAqdG8pOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK19fY29weV9pbl91c2VyKHZvaWQgX191c2VyICp0bywgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGxvbmcgbikKK3sKKwlyZXR1cm4gX19jb3B5X2luX3VzZXJfYXNtKGZyb20sIG4sIHRvKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCitjb3B5X2luX3VzZXIodm9pZCBfX3VzZXIgKnRvLCBjb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKQoreworCW1pZ2h0X3NsZWVwKCk7CisJaWYgKF9fYWNjZXNzX29rKGZyb20sbikgJiYgX19hY2Nlc3Nfb2sodG8sbikpCisJCW4gPSBfX2NvcHlfaW5fdXNlcl9hc20oZnJvbSwgbiwgdG8pOworCXJldHVybiBuOworfQorCisvKgorICogQ29weSBhIG51bGwgdGVybWluYXRlZCBzdHJpbmcgZnJvbSB1c2Vyc3BhY2UuCisgKi8KK2V4dGVybiBsb25nIF9fc3RybmNweV9mcm9tX3VzZXJfYXNtKGxvbmcgY291bnQsIGNoYXIgKmRzdCwKKwkJCQkJY29uc3QgY2hhciBfX3VzZXIgKnNyYyk7CisKK3N0YXRpYyBpbmxpbmUgbG9uZworc3RybmNweV9mcm9tX3VzZXIoY2hhciAqZHN0LCBjb25zdCBjaGFyIF9fdXNlciAqc3JjLCBsb25nIGNvdW50KQoreworICAgICAgICBsb25nIHJlcyA9IC1FRkFVTFQ7CisgICAgICAgIG1pZ2h0X3NsZWVwKCk7CisgICAgICAgIGlmIChhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIHNyYywgMSkpCisgICAgICAgICAgICAgICAgcmVzID0gX19zdHJuY3B5X2Zyb21fdXNlcl9hc20oY291bnQsIGRzdCwgc3JjKTsKKyAgICAgICAgcmV0dXJuIHJlczsKK30KKworCitleHRlcm4gbG9uZyBfX3N0cm5sZW5fdXNlcl9hc20obG9uZyBjb3VudCwgY29uc3QgY2hhciBfX3VzZXIgKnNyYyk7CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZworc3Rybmxlbl91c2VyKGNvbnN0IGNoYXIgX191c2VyICogc3JjLCB1bnNpZ25lZCBsb25nIG4pCit7CisJbWlnaHRfc2xlZXAoKTsKKwlyZXR1cm4gX19zdHJubGVuX3VzZXJfYXNtKG4sIHNyYyk7Cit9CisKKy8qKgorICogc3RybGVuX3VzZXI6IC0gR2V0IHRoZSBzaXplIG9mIGEgc3RyaW5nIGluIHVzZXIgc3BhY2UuCisgKiBAc3RyOiBUaGUgc3RyaW5nIHRvIG1lYXN1cmUuCisgKgorICogQ29udGV4dDogVXNlciBjb250ZXh0IG9ubHkuICBUaGlzIGZ1bmN0aW9uIG1heSBzbGVlcC4KKyAqCisgKiBHZXQgdGhlIHNpemUgb2YgYSBOVUwtdGVybWluYXRlZCBzdHJpbmcgaW4gdXNlciBzcGFjZS4KKyAqCisgKiBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBzdHJpbmcgSU5DTFVESU5HIHRoZSB0ZXJtaW5hdGluZyBOVUwuCisgKiBPbiBleGNlcHRpb24sIHJldHVybnMgMC4KKyAqCisgKiBJZiB0aGVyZSBpcyBhIGxpbWl0IG9uIHRoZSBsZW5ndGggb2YgYSB2YWxpZCBzdHJpbmcsIHlvdSBtYXkgd2lzaCB0bworICogY29uc2lkZXIgdXNpbmcgc3Rybmxlbl91c2VyKCkgaW5zdGVhZC4KKyAqLworI2RlZmluZSBzdHJsZW5fdXNlcihzdHIpIHN0cm5sZW5fdXNlcihzdHIsIH4wVUwpCisKKy8qCisgKiBaZXJvIFVzZXJzcGFjZQorICovCisKK2V4dGVybiBsb25nIF9fY2xlYXJfdXNlcl9hc20odm9pZCBfX3VzZXIgKnRvLCBsb25nIG4pOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK19fY2xlYXJfdXNlcih2b2lkIF9fdXNlciAqdG8sIHVuc2lnbmVkIGxvbmcgbikKK3sKKwlyZXR1cm4gX19jbGVhcl91c2VyX2FzbSh0bywgbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZworY2xlYXJfdXNlcih2b2lkIF9fdXNlciAqdG8sIHVuc2lnbmVkIGxvbmcgbikKK3sKKwltaWdodF9zbGVlcCgpOworCWlmIChhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCB0bywgbikpCisJCW4gPSBfX2NsZWFyX3VzZXJfYXNtKHRvLCBuKTsKKwlyZXR1cm4gbjsKK30KKworI2VuZGlmIC8qIF9fUzM5MF9VQUNDRVNTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvdWNvbnRleHQuaCBiL2luY2x1ZGUvYXNtLXMzOTAvdWNvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjliZWMwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tczM5MC91Y29udGV4dC5oCkBAIC0wLDAgKzEsMjAgQEAKKy8qCisgKiAgaW5jbHVkZS9hc20tczM5MC91Y29udGV4dC5oCisgKgorICogIFMzOTAgdmVyc2lvbgorICoKKyAqICBEZXJpdmVkIGZyb20gImluY2x1ZGUvYXNtLWkzODYvdWNvbnRleHQuaCIKKyAqLworCisjaWZuZGVmIF9BU01fUzM5MF9VQ09OVEVYVF9ICisjZGVmaW5lIF9BU01fUzM5MF9VQ09OVEVYVF9ICisKK3N0cnVjdCB1Y29udGV4dCB7CisJdW5zaWduZWQgbG9uZwkgIHVjX2ZsYWdzOworCXN0cnVjdCB1Y29udGV4dCAgKnVjX2xpbms7CisJc3RhY2tfdAkJICB1Y19zdGFjazsKKwlfc2lncmVncyAgICAgICAgICB1Y19tY29udGV4dDsKKwlzaWdzZXRfdAkgIHVjX3NpZ21hc2s7CS8qIG1hc2sgbGFzdCBmb3IgZXh0ZW5zaWJpbGl0eSAqLworfTsKKworI2VuZGlmIC8qICFfQVNNX1MzOTBfVUNPTlRFWFRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC91bmFsaWduZWQuaCBiL2luY2x1ZGUvYXNtLXMzOTAvdW5hbGlnbmVkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVlODZkYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvdW5hbGlnbmVkLmgKQEAgLTAsMCArMSwyNCBAQAorLyoKKyAqICBpbmNsdWRlL2FzbS1zMzkwL3VuYWxpZ25lZC5oCisgKgorICogIFMzOTAgdmVyc2lvbgorICoKKyAqICBEZXJpdmVkIGZyb20gImluY2x1ZGUvYXNtLWkzODYvdW5hbGlnbmVkLmgiCisgKi8KKworI2lmbmRlZiBfX1MzOTBfVU5BTElHTkVEX0gKKyNkZWZpbmUgX19TMzkwX1VOQUxJR05FRF9ICisKKy8qCisgKiBUaGUgUzM5MCBjYW4gZG8gdW5hbGlnbmVkIGFjY2Vzc2VzIGl0c2VsZi4gCisgKgorICogVGhlIHN0cmFuZ2UgbWFjcm9zIGFyZSB0aGVyZSB0byBtYWtlIHN1cmUgdGhlc2UgY2FuJ3QKKyAqIGJlIG1pc3VzZWQgaW4gYSB3YXkgdGhhdCBtYWtlcyB0aGVtIG5vdCB3b3JrIG9uIG90aGVyCisgKiBhcmNoaXRlY3R1cmVzIHdoZXJlIHVuYWxpZ25lZCBhY2Nlc3NlcyBhcmVuJ3QgYXMgc2ltcGxlLgorICovCisKKyNkZWZpbmUgZ2V0X3VuYWxpZ25lZChwdHIpICgqKHB0cikpCisKKyNkZWZpbmUgcHV0X3VuYWxpZ25lZCh2YWwsIHB0cikgKCh2b2lkKSggKihwdHIpID0gKHZhbCkgKSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20tczM5MC91bmlzdGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWEyMDRmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tczM5MC91bmlzdGQuaApAQCAtMCwwICsxLDYwNSBAQAorLyoKKyAqICBpbmNsdWRlL2FzbS1zMzkwL3VuaXN0ZC5oCisgKgorICogIFMzOTAgdmVyc2lvbgorICoKKyAqICBEZXJpdmVkIGZyb20gImluY2x1ZGUvYXNtLWkzODYvdW5pc3RkLmgiCisgKi8KKworI2lmbmRlZiBfQVNNX1MzOTBfVU5JU1REX0hfCisjZGVmaW5lIF9BU01fUzM5MF9VTklTVERfSF8KKworLyoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgc3lzdGVtIGNhbGwgbnVtYmVycy4KKyAqLworCisjZGVmaW5lIF9fTlJfZXhpdCAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBfX05SX2ZvcmsgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgX19OUl9yZWFkICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIF9fTlJfd3JpdGUgICAgICAgICAgICAgICAgNAorI2RlZmluZSBfX05SX29wZW4gICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgX19OUl9jbG9zZSAgICAgICAgICAgICAgICA2CisjZGVmaW5lIF9fTlJfcmVzdGFydF9zeXNjYWxsCSAgNworI2RlZmluZSBfX05SX2NyZWF0ICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgX19OUl9saW5rICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIF9fTlJfdW5saW5rICAgICAgICAgICAgICAxMAorI2RlZmluZSBfX05SX2V4ZWN2ZSAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgX19OUl9jaGRpciAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIF9fTlJfdGltZSAgICAgICAgICAgICAgICAxMworI2RlZmluZSBfX05SX21rbm9kICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgX19OUl9jaG1vZCAgICAgICAgICAgICAgIDE1CisjZGVmaW5lIF9fTlJfbGNob3duICAgICAgICAgICAgICAxNgorI2RlZmluZSBfX05SX2xzZWVrICAgICAgICAgICAgICAgMTkKKyNkZWZpbmUgX19OUl9nZXRwaWQgICAgICAgICAgICAgIDIwCisjZGVmaW5lIF9fTlJfbW91bnQgICAgICAgICAgICAgICAyMQorI2RlZmluZSBfX05SX3Vtb3VudCAgICAgICAgICAgICAgMjIKKyNkZWZpbmUgX19OUl9zZXR1aWQgICAgICAgICAgICAgIDIzCisjZGVmaW5lIF9fTlJfZ2V0dWlkICAgICAgICAgICAgICAyNAorI2RlZmluZSBfX05SX3N0aW1lICAgICAgICAgICAgICAgMjUKKyNkZWZpbmUgX19OUl9wdHJhY2UgICAgICAgICAgICAgIDI2CisjZGVmaW5lIF9fTlJfYWxhcm0gICAgICAgICAgICAgICAyNworI2RlZmluZSBfX05SX3BhdXNlICAgICAgICAgICAgICAgMjkKKyNkZWZpbmUgX19OUl91dGltZSAgICAgICAgICAgICAgIDMwCisjZGVmaW5lIF9fTlJfYWNjZXNzICAgICAgICAgICAgICAzMworI2RlZmluZSBfX05SX25pY2UgICAgICAgICAgICAgICAgMzQKKyNkZWZpbmUgX19OUl9zeW5jICAgICAgICAgICAgICAgIDM2CisjZGVmaW5lIF9fTlJfa2lsbCAgICAgICAgICAgICAgICAzNworI2RlZmluZSBfX05SX3JlbmFtZSAgICAgICAgICAgICAgMzgKKyNkZWZpbmUgX19OUl9ta2RpciAgICAgICAgICAgICAgIDM5CisjZGVmaW5lIF9fTlJfcm1kaXIgICAgICAgICAgICAgICA0MAorI2RlZmluZSBfX05SX2R1cCAgICAgICAgICAgICAgICAgNDEKKyNkZWZpbmUgX19OUl9waXBlICAgICAgICAgICAgICAgIDQyCisjZGVmaW5lIF9fTlJfdGltZXMgICAgICAgICAgICAgICA0MworI2RlZmluZSBfX05SX2JyayAgICAgICAgICAgICAgICAgNDUKKyNkZWZpbmUgX19OUl9zZXRnaWQgICAgICAgICAgICAgIDQ2CisjZGVmaW5lIF9fTlJfZ2V0Z2lkICAgICAgICAgICAgICA0NworI2RlZmluZSBfX05SX3NpZ25hbCAgICAgICAgICAgICAgNDgKKyNkZWZpbmUgX19OUl9nZXRldWlkICAgICAgICAgICAgIDQ5CisjZGVmaW5lIF9fTlJfZ2V0ZWdpZCAgICAgICAgICAgICA1MAorI2RlZmluZSBfX05SX2FjY3QgICAgICAgICAgICAgICAgNTEKKyNkZWZpbmUgX19OUl91bW91bnQyICAgICAgICAgICAgIDUyCisjZGVmaW5lIF9fTlJfaW9jdGwgICAgICAgICAgICAgICA1NAorI2RlZmluZSBfX05SX2ZjbnRsICAgICAgICAgICAgICAgNTUKKyNkZWZpbmUgX19OUl9zZXRwZ2lkICAgICAgICAgICAgIDU3CisjZGVmaW5lIF9fTlJfdW1hc2sgICAgICAgICAgICAgICA2MAorI2RlZmluZSBfX05SX2Nocm9vdCAgICAgICAgICAgICAgNjEKKyNkZWZpbmUgX19OUl91c3RhdCAgICAgICAgICAgICAgIDYyCisjZGVmaW5lIF9fTlJfZHVwMiAgICAgICAgICAgICAgICA2MworI2RlZmluZSBfX05SX2dldHBwaWQgICAgICAgICAgICAgNjQKKyNkZWZpbmUgX19OUl9nZXRwZ3JwICAgICAgICAgICAgIDY1CisjZGVmaW5lIF9fTlJfc2V0c2lkICAgICAgICAgICAgICA2NgorI2RlZmluZSBfX05SX3NpZ2FjdGlvbiAgICAgICAgICAgNjcKKyNkZWZpbmUgX19OUl9zZXRyZXVpZCAgICAgICAgICAgIDcwCisjZGVmaW5lIF9fTlJfc2V0cmVnaWQgICAgICAgICAgICA3MQorI2RlZmluZSBfX05SX3NpZ3N1c3BlbmQgICAgICAgICAgNzIKKyNkZWZpbmUgX19OUl9zaWdwZW5kaW5nICAgICAgICAgIDczCisjZGVmaW5lIF9fTlJfc2V0aG9zdG5hbWUgICAgICAgICA3NAorI2RlZmluZSBfX05SX3NldHJsaW1pdCAgICAgICAgICAgNzUKKyNkZWZpbmUgX19OUl9nZXRybGltaXQgICAgICAgICAgIDc2CisjZGVmaW5lIF9fTlJfZ2V0cnVzYWdlICAgICAgICAgICA3NworI2RlZmluZSBfX05SX2dldHRpbWVvZmRheSAgICAgICAgNzgKKyNkZWZpbmUgX19OUl9zZXR0aW1lb2ZkYXkgICAgICAgIDc5CisjZGVmaW5lIF9fTlJfZ2V0Z3JvdXBzICAgICAgICAgICA4MAorI2RlZmluZSBfX05SX3NldGdyb3VwcyAgICAgICAgICAgODEKKyNkZWZpbmUgX19OUl9zeW1saW5rICAgICAgICAgICAgIDgzCisjZGVmaW5lIF9fTlJfcmVhZGxpbmsgICAgICAgICAgICA4NQorI2RlZmluZSBfX05SX3VzZWxpYiAgICAgICAgICAgICAgODYKKyNkZWZpbmUgX19OUl9zd2Fwb24gICAgICAgICAgICAgIDg3CisjZGVmaW5lIF9fTlJfcmVib290ICAgICAgICAgICAgICA4OAorI2RlZmluZSBfX05SX3JlYWRkaXIgICAgICAgICAgICAgODkKKyNkZWZpbmUgX19OUl9tbWFwICAgICAgICAgICAgICAgIDkwCisjZGVmaW5lIF9fTlJfbXVubWFwICAgICAgICAgICAgICA5MQorI2RlZmluZSBfX05SX3RydW5jYXRlICAgICAgICAgICAgOTIKKyNkZWZpbmUgX19OUl9mdHJ1bmNhdGUgICAgICAgICAgIDkzCisjZGVmaW5lIF9fTlJfZmNobW9kICAgICAgICAgICAgICA5NAorI2RlZmluZSBfX05SX2ZjaG93biAgICAgICAgICAgICAgOTUKKyNkZWZpbmUgX19OUl9nZXRwcmlvcml0eSAgICAgICAgIDk2CisjZGVmaW5lIF9fTlJfc2V0cHJpb3JpdHkgICAgICAgICA5NworI2RlZmluZSBfX05SX3N0YXRmcyAgICAgICAgICAgICAgOTkKKyNkZWZpbmUgX19OUl9mc3RhdGZzICAgICAgICAgICAgMTAwCisjZGVmaW5lIF9fTlJfaW9wZXJtICAgICAgICAgICAgIDEwMQorI2RlZmluZSBfX05SX3NvY2tldGNhbGwgICAgICAgICAxMDIKKyNkZWZpbmUgX19OUl9zeXNsb2cgICAgICAgICAgICAgMTAzCisjZGVmaW5lIF9fTlJfc2V0aXRpbWVyICAgICAgICAgIDEwNAorI2RlZmluZSBfX05SX2dldGl0aW1lciAgICAgICAgICAxMDUKKyNkZWZpbmUgX19OUl9zdGF0ICAgICAgICAgICAgICAgMTA2CisjZGVmaW5lIF9fTlJfbHN0YXQgICAgICAgICAgICAgIDEwNworI2RlZmluZSBfX05SX2ZzdGF0ICAgICAgICAgICAgICAxMDgKKyNkZWZpbmUgX19OUl9sb29rdXBfZGNvb2tpZSAgICAgMTEwCisjZGVmaW5lIF9fTlJfdmhhbmd1cCAgICAgICAgICAgIDExMQorI2RlZmluZSBfX05SX2lkbGUgICAgICAgICAgICAgICAxMTIKKyNkZWZpbmUgX19OUl93YWl0NCAgICAgICAgICAgICAgMTE0CisjZGVmaW5lIF9fTlJfc3dhcG9mZiAgICAgICAgICAgIDExNQorI2RlZmluZSBfX05SX3N5c2luZm8gICAgICAgICAgICAxMTYKKyNkZWZpbmUgX19OUl9pcGMgICAgICAgICAgICAgICAgMTE3CisjZGVmaW5lIF9fTlJfZnN5bmMgICAgICAgICAgICAgIDExOAorI2RlZmluZSBfX05SX3NpZ3JldHVybiAgICAgICAgICAxMTkKKyNkZWZpbmUgX19OUl9jbG9uZSAgICAgICAgICAgICAgMTIwCisjZGVmaW5lIF9fTlJfc2V0ZG9tYWlubmFtZSAgICAgIDEyMQorI2RlZmluZSBfX05SX3VuYW1lICAgICAgICAgICAgICAxMjIKKyNkZWZpbmUgX19OUl9hZGp0aW1leCAgICAgICAgICAgMTI0CisjZGVmaW5lIF9fTlJfbXByb3RlY3QgICAgICAgICAgIDEyNQorI2RlZmluZSBfX05SX3NpZ3Byb2NtYXNrICAgICAgICAxMjYKKyNkZWZpbmUgX19OUl9jcmVhdGVfbW9kdWxlICAgICAgMTI3CisjZGVmaW5lIF9fTlJfaW5pdF9tb2R1bGUgICAgICAgIDEyOAorI2RlZmluZSBfX05SX2RlbGV0ZV9tb2R1bGUgICAgICAxMjkKKyNkZWZpbmUgX19OUl9nZXRfa2VybmVsX3N5bXMgICAgMTMwCisjZGVmaW5lIF9fTlJfcXVvdGFjdGwgICAgICAgICAgIDEzMQorI2RlZmluZSBfX05SX2dldHBnaWQgICAgICAgICAgICAxMzIKKyNkZWZpbmUgX19OUl9mY2hkaXIgICAgICAgICAgICAgMTMzCisjZGVmaW5lIF9fTlJfYmRmbHVzaCAgICAgICAgICAgIDEzNAorI2RlZmluZSBfX05SX3N5c2ZzICAgICAgICAgICAgICAxMzUKKyNkZWZpbmUgX19OUl9wZXJzb25hbGl0eSAgICAgICAgMTM2CisjZGVmaW5lIF9fTlJfYWZzX3N5c2NhbGwgICAgICAgIDEzNyAvKiBTeXNjYWxsIGZvciBBbmRyZXcgRmlsZSBTeXN0ZW0gKi8KKyNkZWZpbmUgX19OUl9zZXRmc3VpZCAgICAgICAgICAgMTM4CisjZGVmaW5lIF9fTlJfc2V0ZnNnaWQgICAgICAgICAgIDEzOQorI2RlZmluZSBfX05SX19sbHNlZWsgICAgICAgICAgICAxNDAKKyNkZWZpbmUgX19OUl9nZXRkZW50cyAgICAgICAgICAgMTQxCisjZGVmaW5lIF9fTlJfX25ld3NlbGVjdCAgICAgICAgIDE0MgorI2RlZmluZSBfX05SX2Zsb2NrICAgICAgICAgICAgICAxNDMKKyNkZWZpbmUgX19OUl9tc3luYyAgICAgICAgICAgICAgMTQ0CisjZGVmaW5lIF9fTlJfcmVhZHYgICAgICAgICAgICAgIDE0NQorI2RlZmluZSBfX05SX3dyaXRldiAgICAgICAgICAgICAxNDYKKyNkZWZpbmUgX19OUl9nZXRzaWQgICAgICAgICAgICAgMTQ3CisjZGVmaW5lIF9fTlJfZmRhdGFzeW5jICAgICAgICAgIDE0OAorI2RlZmluZSBfX05SX19zeXNjdGwgICAgICAgICAgICAxNDkKKyNkZWZpbmUgX19OUl9tbG9jayAgICAgICAgICAgICAgMTUwCisjZGVmaW5lIF9fTlJfbXVubG9jayAgICAgICAgICAgIDE1MQorI2RlZmluZSBfX05SX21sb2NrYWxsICAgICAgICAgICAxNTIKKyNkZWZpbmUgX19OUl9tdW5sb2NrYWxsICAgICAgICAgMTUzCisjZGVmaW5lIF9fTlJfc2NoZWRfc2V0cGFyYW0gICAgICAgICAgICAgMTU0CisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0cGFyYW0gICAgICAgICAgICAgMTU1CisjZGVmaW5lIF9fTlJfc2NoZWRfc2V0c2NoZWR1bGVyICAgICAgICAgMTU2CisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0c2NoZWR1bGVyICAgICAgICAgMTU3CisjZGVmaW5lIF9fTlJfc2NoZWRfeWllbGQgICAgICAgICAgICAgICAgMTU4CisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21heCAgICAgMTU5CisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiAgICAgMTYwCisjZGVmaW5lIF9fTlJfc2NoZWRfcnJfZ2V0X2ludGVydmFsICAgICAgMTYxCisjZGVmaW5lIF9fTlJfbmFub3NsZWVwICAgICAgICAgIDE2MgorI2RlZmluZSBfX05SX21yZW1hcCAgICAgICAgICAgICAxNjMKKyNkZWZpbmUgX19OUl9zZXRyZXN1aWQgICAgICAgICAgMTY0CisjZGVmaW5lIF9fTlJfZ2V0cmVzdWlkICAgICAgICAgIDE2NQorI2RlZmluZSBfX05SX3F1ZXJ5X21vZHVsZSAgICAgICAxNjcKKyNkZWZpbmUgX19OUl9wb2xsICAgICAgICAgICAgICAgMTY4CisjZGVmaW5lIF9fTlJfbmZzc2VydmN0bCAgICAgICAgIDE2OQorI2RlZmluZSBfX05SX3NldHJlc2dpZCAgICAgICAgICAxNzAKKyNkZWZpbmUgX19OUl9nZXRyZXNnaWQgICAgICAgICAgMTcxCisjZGVmaW5lIF9fTlJfcHJjdGwgICAgICAgICAgICAgIDE3MgorI2RlZmluZSBfX05SX3J0X3NpZ3JldHVybiAgICAgICAxNzMKKyNkZWZpbmUgX19OUl9ydF9zaWdhY3Rpb24gICAgICAgMTc0CisjZGVmaW5lIF9fTlJfcnRfc2lncHJvY21hc2sgICAgIDE3NQorI2RlZmluZSBfX05SX3J0X3NpZ3BlbmRpbmcgICAgICAxNzYKKyNkZWZpbmUgX19OUl9ydF9zaWd0aW1lZHdhaXQgICAgMTc3CisjZGVmaW5lIF9fTlJfcnRfc2lncXVldWVpbmZvICAgIDE3OAorI2RlZmluZSBfX05SX3J0X3NpZ3N1c3BlbmQgICAgICAxNzkKKyNkZWZpbmUgX19OUl9wcmVhZDY0ICAgICAgICAgICAgMTgwCisjZGVmaW5lIF9fTlJfcHdyaXRlNjQgICAgICAgICAgIDE4MQorI2RlZmluZSBfX05SX2Nob3duICAgICAgICAgICAgICAxODIKKyNkZWZpbmUgX19OUl9nZXRjd2QgICAgICAgICAgICAgMTgzCisjZGVmaW5lIF9fTlJfY2FwZ2V0ICAgICAgICAgICAgIDE4NAorI2RlZmluZSBfX05SX2NhcHNldCAgICAgICAgICAgICAxODUKKyNkZWZpbmUgX19OUl9zaWdhbHRzdGFjayAgICAgICAgMTg2CisjZGVmaW5lIF9fTlJfc2VuZGZpbGUgICAgICAgICAgIDE4NworI2RlZmluZSBfX05SX2dldHBtc2cJCTE4OAorI2RlZmluZSBfX05SX3B1dHBtc2cJCTE4OQorI2RlZmluZSBfX05SX3Zmb3JrCQkxOTAKKyNkZWZpbmUgX19OUl91Z2V0cmxpbWl0CQkxOTEJLyogU3VTIGNvbXBsaWFudCBnZXRybGltaXQgKi8KKyNkZWZpbmUgX19OUl9tbWFwMgkJMTkyCisjZGVmaW5lIF9fTlJfdHJ1bmNhdGU2NAkJMTkzCisjZGVmaW5lIF9fTlJfZnRydW5jYXRlNjQJMTk0CisjZGVmaW5lIF9fTlJfc3RhdDY0CQkxOTUKKyNkZWZpbmUgX19OUl9sc3RhdDY0CQkxOTYKKyNkZWZpbmUgX19OUl9mc3RhdDY0CQkxOTcKKyNkZWZpbmUgX19OUl9sY2hvd24zMgkJMTk4CisjZGVmaW5lIF9fTlJfZ2V0dWlkMzIJCTE5OQorI2RlZmluZSBfX05SX2dldGdpZDMyCQkyMDAKKyNkZWZpbmUgX19OUl9nZXRldWlkMzIJCTIwMQorI2RlZmluZSBfX05SX2dldGVnaWQzMgkJMjAyCisjZGVmaW5lIF9fTlJfc2V0cmV1aWQzMgkJMjAzCisjZGVmaW5lIF9fTlJfc2V0cmVnaWQzMgkJMjA0CisjZGVmaW5lIF9fTlJfZ2V0Z3JvdXBzMzIJMjA1CisjZGVmaW5lIF9fTlJfc2V0Z3JvdXBzMzIJMjA2CisjZGVmaW5lIF9fTlJfZmNob3duMzIJCTIwNworI2RlZmluZSBfX05SX3NldHJlc3VpZDMyCTIwOAorI2RlZmluZSBfX05SX2dldHJlc3VpZDMyCTIwOQorI2RlZmluZSBfX05SX3NldHJlc2dpZDMyCTIxMAorI2RlZmluZSBfX05SX2dldHJlc2dpZDMyCTIxMQorI2RlZmluZSBfX05SX2Nob3duMzIJCTIxMgorI2RlZmluZSBfX05SX3NldHVpZDMyCQkyMTMKKyNkZWZpbmUgX19OUl9zZXRnaWQzMgkJMjE0CisjZGVmaW5lIF9fTlJfc2V0ZnN1aWQzMgkJMjE1CisjZGVmaW5lIF9fTlJfc2V0ZnNnaWQzMgkJMjE2CisjZGVmaW5lIF9fTlJfcGl2b3Rfcm9vdCAgICAgICAgIDIxNworI2RlZmluZSBfX05SX21pbmNvcmUgICAgICAgICAgICAyMTgKKyNkZWZpbmUgX19OUl9tYWR2aXNlICAgICAgICAgICAgMjE5CisjZGVmaW5lIF9fTlJfZ2V0ZGVudHM2NAkJMjIwCisjZGVmaW5lIF9fTlJfZmNudGw2NAkJMjIxCisjZGVmaW5lIF9fTlJfcmVhZGFoZWFkCQkyMjIKKyNkZWZpbmUgX19OUl9zZW5kZmlsZTY0CQkyMjMKKyNkZWZpbmUgX19OUl9zZXR4YXR0cgkJMjI0CisjZGVmaW5lIF9fTlJfbHNldHhhdHRyCQkyMjUKKyNkZWZpbmUgX19OUl9mc2V0eGF0dHIJCTIyNgorI2RlZmluZSBfX05SX2dldHhhdHRyCQkyMjcKKyNkZWZpbmUgX19OUl9sZ2V0eGF0dHIJCTIyOAorI2RlZmluZSBfX05SX2ZnZXR4YXR0cgkJMjI5CisjZGVmaW5lIF9fTlJfbGlzdHhhdHRyCQkyMzAKKyNkZWZpbmUgX19OUl9sbGlzdHhhdHRyCQkyMzEKKyNkZWZpbmUgX19OUl9mbGlzdHhhdHRyCQkyMzIKKyNkZWZpbmUgX19OUl9yZW1vdmV4YXR0cgkyMzMKKyNkZWZpbmUgX19OUl9scmVtb3ZleGF0dHIJMjM0CisjZGVmaW5lIF9fTlJfZnJlbW92ZXhhdHRyCTIzNQorI2RlZmluZSBfX05SX2dldHRpZAkJMjM2CisjZGVmaW5lIF9fTlJfdGtpbGwJCTIzNworI2RlZmluZSBfX05SX2Z1dGV4CQkyMzgKKyNkZWZpbmUgX19OUl9zY2hlZF9zZXRhZmZpbml0eQkyMzkKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRhZmZpbml0eQkyNDAKKyNkZWZpbmUgX19OUl90Z2tpbGwJCTI0MQorLyogTnVtYmVyIDI0MiBpcyByZXNlcnZlZCBmb3IgdHV4ICovCisjZGVmaW5lIF9fTlJfaW9fc2V0dXAJCTI0MworI2RlZmluZSBfX05SX2lvX2Rlc3Ryb3kJCTI0NAorI2RlZmluZSBfX05SX2lvX2dldGV2ZW50cwkyNDUKKyNkZWZpbmUgX19OUl9pb19zdWJtaXQJCTI0NgorI2RlZmluZSBfX05SX2lvX2NhbmNlbAkJMjQ3CisjZGVmaW5lIF9fTlJfZXhpdF9ncm91cAkJMjQ4CisjZGVmaW5lIF9fTlJfZXBvbGxfY3JlYXRlCTI0OQorI2RlZmluZSBfX05SX2Vwb2xsX2N0bAkJMjUwCisjZGVmaW5lIF9fTlJfZXBvbGxfd2FpdAkJMjUxCisjZGVmaW5lIF9fTlJfc2V0X3RpZF9hZGRyZXNzCTI1MgorI2RlZmluZSBfX05SX2ZhZHZpc2U2NAkJMjUzCisjZGVmaW5lIF9fTlJfdGltZXJfY3JlYXRlCTI1NAorI2RlZmluZSBfX05SX3RpbWVyX3NldHRpbWUJKF9fTlJfdGltZXJfY3JlYXRlKzEpCisjZGVmaW5lIF9fTlJfdGltZXJfZ2V0dGltZQkoX19OUl90aW1lcl9jcmVhdGUrMikKKyNkZWZpbmUgX19OUl90aW1lcl9nZXRvdmVycnVuCShfX05SX3RpbWVyX2NyZWF0ZSszKQorI2RlZmluZSBfX05SX3RpbWVyX2RlbGV0ZQkoX19OUl90aW1lcl9jcmVhdGUrNCkKKyNkZWZpbmUgX19OUl9jbG9ja19zZXR0aW1lCShfX05SX3RpbWVyX2NyZWF0ZSs1KQorI2RlZmluZSBfX05SX2Nsb2NrX2dldHRpbWUJKF9fTlJfdGltZXJfY3JlYXRlKzYpCisjZGVmaW5lIF9fTlJfY2xvY2tfZ2V0cmVzCShfX05SX3RpbWVyX2NyZWF0ZSs3KQorI2RlZmluZSBfX05SX2Nsb2NrX25hbm9zbGVlcAkoX19OUl90aW1lcl9jcmVhdGUrOCkKKy8qIE51bWJlciAyNjMgaXMgcmVzZXJ2ZWQgZm9yIHZzZXJ2ZXIgKi8KKyNkZWZpbmUgX19OUl9mYWR2aXNlNjRfNjQJMjY0CisjZGVmaW5lIF9fTlJfc3RhdGZzNjQJCTI2NQorI2RlZmluZSBfX05SX2ZzdGF0ZnM2NAkJMjY2CisjZGVmaW5lIF9fTlJfcmVtYXBfZmlsZV9wYWdlcwkyNjcKKy8qIE51bWJlciAyNjggaXMgcmVzZXJ2ZWQgZm9yIG5ldyBzeXNfbWJpbmQgKi8KKy8qIE51bWJlciAyNjkgaXMgcmVzZXJ2ZWQgZm9yIG5ldyBzeXNfZ2V0X21lbXBvbGljeSAqLworLyogTnVtYmVyIDI3MCBpcyByZXNlcnZlZCBmb3IgbmV3IHN5c19zZXRfbWVtcG9saWN5ICovCisjZGVmaW5lIF9fTlJfbXFfb3BlbgkJMjcxCisjZGVmaW5lIF9fTlJfbXFfdW5saW5rCQkyNzIKKyNkZWZpbmUgX19OUl9tcV90aW1lZHNlbmQJMjczCisjZGVmaW5lIF9fTlJfbXFfdGltZWRyZWNlaXZlCTI3NAorI2RlZmluZSBfX05SX21xX25vdGlmeQkJMjc1CisjZGVmaW5lIF9fTlJfbXFfZ2V0c2V0YXR0cgkyNzYKKy8qIE51bWJlciAyNzcgaXMgcmVzZXJ2ZWQgZm9yIG5ldyBzeXNfa2V4ZWNfbG9hZCAqLworI2RlZmluZSBfX05SX2FkZF9rZXkJCTI3OAorI2RlZmluZSBfX05SX3JlcXVlc3Rfa2V5CTI3OQorI2RlZmluZSBfX05SX2tleWN0bAkJMjgwCisjZGVmaW5lIF9fTlJfd2FpdGlkCQkyODEKKworI2RlZmluZSBOUl9zeXNjYWxscyAyODIKKworLyogCisgKiBUaGVyZSBhcmUgc29tZSBzeXN0ZW0gY2FsbHMgdGhhdCBhcmUgbm90IHByZXNlbnQgb24gNjQgYml0LCBzb21lCisgKiBoYXZlIGEgZGlmZmVyZW50IG5hbWUgYWx0aG91Z2ggdGhleSBkbyB0aGUgc2FtZSAoZS5nLiBfX05SX2Nob3duMzIKKyAqIGlzIF9fTlJfY2hvd24gb24gNjQgYml0KS4KKyAqLworI2lmZGVmIF9fczM5MHhfXworI3VuZGVmICBfX05SX3RpbWUKKyN1bmRlZiAgX19OUl9sY2hvd24KKyN1bmRlZiAgX19OUl9zZXR1aWQKKyN1bmRlZiAgX19OUl9nZXR1aWQKKyN1bmRlZiAgX19OUl9zdGltZQorI3VuZGVmICBfX05SX3NldGdpZAorI3VuZGVmICBfX05SX2dldGdpZAorI3VuZGVmICBfX05SX2dldGV1aWQKKyN1bmRlZiAgX19OUl9nZXRlZ2lkCisjdW5kZWYgIF9fTlJfc2V0cmV1aWQKKyN1bmRlZiAgX19OUl9zZXRyZWdpZAorI3VuZGVmICBfX05SX2dldHJsaW1pdAorI3VuZGVmICBfX05SX2dldGdyb3VwcworI3VuZGVmICBfX05SX3NldGdyb3VwcworI3VuZGVmICBfX05SX2ZjaG93bgorI3VuZGVmICBfX05SX2lvcGVybQorI3VuZGVmICBfX05SX3NldGZzdWlkCisjdW5kZWYgIF9fTlJfc2V0ZnNnaWQKKyN1bmRlZiAgX19OUl9fbGxzZWVrCisjdW5kZWYgIF9fTlJfX25ld3NlbGVjdAorI3VuZGVmICBfX05SX3NldHJlc3VpZAorI3VuZGVmICBfX05SX2dldHJlc3VpZAorI3VuZGVmICBfX05SX3NldHJlc2dpZAorI3VuZGVmICBfX05SX2dldHJlc2dpZAorI3VuZGVmICBfX05SX2Nob3duCisjdW5kZWYgIF9fTlJfdWdldHJsaW1pdAorI3VuZGVmICBfX05SX21tYXAyCisjdW5kZWYgIF9fTlJfdHJ1bmNhdGU2NAorI3VuZGVmICBfX05SX2Z0cnVuY2F0ZTY0CisjdW5kZWYgIF9fTlJfc3RhdDY0CisjdW5kZWYgIF9fTlJfbHN0YXQ2NAorI3VuZGVmICBfX05SX2ZzdGF0NjQKKyN1bmRlZiAgX19OUl9sY2hvd24zMgorI3VuZGVmICBfX05SX2dldHVpZDMyCisjdW5kZWYgIF9fTlJfZ2V0Z2lkMzIKKyN1bmRlZiAgX19OUl9nZXRldWlkMzIKKyN1bmRlZiAgX19OUl9nZXRlZ2lkMzIKKyN1bmRlZiAgX19OUl9zZXRyZXVpZDMyCisjdW5kZWYgIF9fTlJfc2V0cmVnaWQzMgorI3VuZGVmICBfX05SX2dldGdyb3VwczMyCisjdW5kZWYgIF9fTlJfc2V0Z3JvdXBzMzIKKyN1bmRlZiAgX19OUl9mY2hvd24zMgorI3VuZGVmICBfX05SX3NldHJlc3VpZDMyCisjdW5kZWYgIF9fTlJfZ2V0cmVzdWlkMzIKKyN1bmRlZiAgX19OUl9zZXRyZXNnaWQzMgorI3VuZGVmICBfX05SX2dldHJlc2dpZDMyCisjdW5kZWYgIF9fTlJfY2hvd24zMgorI3VuZGVmICBfX05SX3NldHVpZDMyCisjdW5kZWYgIF9fTlJfc2V0Z2lkMzIKKyN1bmRlZiAgX19OUl9zZXRmc3VpZDMyCisjdW5kZWYgIF9fTlJfc2V0ZnNnaWQzMgorI3VuZGVmICBfX05SX2ZjbnRsNjQKKyN1bmRlZiAgX19OUl9zZW5kZmlsZTY0CisjdW5kZWYgIF9fTlJfZmFkdmlzZTY0XzY0CisKKyNkZWZpbmUgX19OUl9zZWxlY3QJCTE0MgorI2RlZmluZSBfX05SX2dldHJsaW1pdAkJMTkxCS8qIFN1UyBjb21wbGlhbnQgZ2V0cmxpbWl0ICovCisjZGVmaW5lIF9fTlJfbGNob3duICAJCTE5OAorI2RlZmluZSBfX05SX2dldHVpZCAgCQkxOTkKKyNkZWZpbmUgX19OUl9nZXRnaWQgIAkJMjAwCisjZGVmaW5lIF9fTlJfZ2V0ZXVpZCAgCQkyMDEKKyNkZWZpbmUgX19OUl9nZXRlZ2lkICAJCTIwMgorI2RlZmluZSBfX05SX3NldHJldWlkICAJCTIwMworI2RlZmluZSBfX05SX3NldHJlZ2lkICAJCTIwNAorI2RlZmluZSBfX05SX2dldGdyb3VwcyAgCTIwNQorI2RlZmluZSBfX05SX3NldGdyb3VwcyAgCTIwNgorI2RlZmluZSBfX05SX2ZjaG93biAgCQkyMDcKKyNkZWZpbmUgX19OUl9zZXRyZXN1aWQgIAkyMDgKKyNkZWZpbmUgX19OUl9nZXRyZXN1aWQgIAkyMDkKKyNkZWZpbmUgX19OUl9zZXRyZXNnaWQgIAkyMTAKKyNkZWZpbmUgX19OUl9nZXRyZXNnaWQgIAkyMTEKKyNkZWZpbmUgX19OUl9jaG93biAgCQkyMTIKKyNkZWZpbmUgX19OUl9zZXR1aWQgIAkJMjEzCisjZGVmaW5lIF9fTlJfc2V0Z2lkICAJCTIxNAorI2RlZmluZSBfX05SX3NldGZzdWlkICAJCTIxNQorI2RlZmluZSBfX05SX3NldGZzZ2lkICAJCTIxNgorCisjZW5kaWYKKworLyogdXNlci12aXNpYmxlIGVycm9yIG51bWJlcnMgYXJlIGluIHRoZSByYW5nZSAtMSAtIC0xMjI6IHNlZSA8YXNtLXMzOTAvZXJybm8uaD4gKi8KKworI2RlZmluZSBfX3N5c2NhbGxfcmV0dXJuKHR5cGUsIHJlcykJCQkgICAgIFwKK2RvIHsJCQkJCQkJICAgICBcCisJaWYgKCh1bnNpZ25lZCBsb25nKShyZXMpID49ICh1bnNpZ25lZCBsb25nKSgtMTI1KSkgeyBcCisJCWVycm5vID0gLShyZXMpOwkJCQkgICAgIFwKKwkJcmVzID0gLTE7CQkJCSAgICAgXAorCX0JCQkJCQkgICAgIFwKKwlyZXR1cm4gKHR5cGUpIChyZXMpOwkJCQkgICAgIFwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgX3N2Y19jbG9iYmVyICIxIiwgImNjIiwgIm1lbW9yeSIKKworI2RlZmluZSBfc3lzY2FsbDAodHlwZSxuYW1lKQkJCQkgICAgIFwKK3R5cGUgbmFtZSh2b2lkKSB7CQkJCQkgICAgIFwKKwlyZWdpc3RlciBsb25nIF9fc3ZjcmVzIGFzbSgiMiIpOwkJICAgICBcCisJbG9uZyBfX3JlczsJCQkJCSAgICAgXAorCV9fYXNtX18gX192b2xhdGlsZV9fICgJCQkJICAgICBcCisJCSIgICAgLmlmICUxIDwgMjU2XG4iCQkJICAgICBcCisJCSIgICAgc3ZjICViMVxuIgkJCQkgICAgIFwKKwkJIiAgICAuZWxzZVxuIgkJCQkgICAgIFwKKwkJIiAgICBsYSAgJSVyMSwlMVxuIgkJCSAgICAgXAorCQkiICAgIHN2YyAwXG4iCQkJCSAgICAgXAorCQkiICAgIC5lbmRpZiIJCQkJICAgICBcCisJCTogIj1kIiAoX19zdmNyZXMpCQkJICAgICBcCisJCTogImkiIChfX05SXyMjbmFtZSkJCQkgICAgIFwKKwkJOiBfc3ZjX2Nsb2JiZXIgKTsJCQkgICAgIFwKKwlfX3JlcyA9IF9fc3ZjcmVzOwkJCQkgICAgIFwKKwlfX3N5c2NhbGxfcmV0dXJuKHR5cGUsX19yZXMpOwkJCSAgICAgXAorfQorCisjZGVmaW5lIF9zeXNjYWxsMSh0eXBlLG5hbWUsdHlwZTEsYXJnMSkJCQkgICAgIFwKK3R5cGUgbmFtZSh0eXBlMSBhcmcxKSB7CQkJCQkgICAgIFwKKwlyZWdpc3RlciB0eXBlMSBfX2FyZzEgYXNtKCIyIikgPSBhcmcxOwkJICAgICBcCisJcmVnaXN0ZXIgbG9uZyBfX3N2Y3JlcyBhc20oIjIiKTsJCSAgICAgXAorCWxvbmcgX19yZXM7CQkJCQkgICAgIFwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCSAgICAgXAorCQkiICAgIC5pZiAlMSA8IDI1NlxuIgkJCSAgICAgXAorCQkiICAgIHN2YyAlYjFcbiIJCQkJICAgICBcCisJCSIgICAgLmVsc2VcbiIJCQkJICAgICBcCisJCSIgICAgbGEgICUlcjEsJTFcbiIJCQkgICAgIFwKKwkJIiAgICBzdmMgMFxuIgkJCQkgICAgIFwKKwkJIiAgICAuZW5kaWYiCQkJCSAgICAgXAorCQk6ICI9ZCIgKF9fc3ZjcmVzKQkJCSAgICAgXAorCQk6ICJpIiAoX19OUl8jI25hbWUpLAkJCSAgICAgXAorCQkgICIwIiAoX19hcmcxKQkJCQkgICAgIFwKKwkJOiBfc3ZjX2Nsb2JiZXIgKTsJCQkgICAgIFwKKwlfX3JlcyA9IF9fc3ZjcmVzOwkJCQkgICAgIFwKKwlfX3N5c2NhbGxfcmV0dXJuKHR5cGUsX19yZXMpOwkJCSAgICAgXAorfQorCisjZGVmaW5lIF9zeXNjYWxsMih0eXBlLG5hbWUsdHlwZTEsYXJnMSx0eXBlMixhcmcyKQkgICAgIFwKK3R5cGUgbmFtZSh0eXBlMSBhcmcxLCB0eXBlMiBhcmcyKSB7CQkJICAgICBcCisJcmVnaXN0ZXIgdHlwZTEgX19hcmcxIGFzbSgiMiIpID0gYXJnMTsJCSAgICAgXAorCXJlZ2lzdGVyIHR5cGUyIF9fYXJnMiBhc20oIjMiKSA9IGFyZzI7CQkgICAgIFwKKwlyZWdpc3RlciBsb25nIF9fc3ZjcmVzIGFzbSgiMiIpOwkJICAgICBcCisJbG9uZyBfX3JlczsJCQkJCSAgICAgXAorCV9fYXNtX18gX192b2xhdGlsZV9fICgJCQkJICAgICBcCisJCSIgICAgLmlmICUxIDwgMjU2XG4iCQkJICAgICBcCisJCSIgICAgc3ZjICViMVxuIgkJCQkgICAgIFwKKwkJIiAgICAuZWxzZVxuIgkJCQkgICAgIFwKKwkJIiAgICBsYSAlJXIxLCUxXG4iCQkJICAgICBcCisJCSIgICAgc3ZjIDBcbiIJCQkJICAgICBcCisJCSIgICAgLmVuZGlmIgkJCQkgICAgIFwKKwkJOiAiPWQiIChfX3N2Y3JlcykJCQkgICAgIFwKKwkJOiAiaSIgKF9fTlJfIyNuYW1lKSwJCQkgICAgIFwKKwkJICAiMCIgKF9fYXJnMSksCQkJCSAgICAgXAorCQkgICJkIiAoX19hcmcyKQkJCQkgICAgIFwKKwkJOiBfc3ZjX2Nsb2JiZXIgKTsJCQkgICAgIFwKKwlfX3JlcyA9IF9fc3ZjcmVzOwkJCQkgICAgIFwKKwlfX3N5c2NhbGxfcmV0dXJuKHR5cGUsX19yZXMpOwkJCSAgICAgXAorfQorCisjZGVmaW5lIF9zeXNjYWxsMyh0eXBlLG5hbWUsdHlwZTEsYXJnMSx0eXBlMixhcmcyLHR5cGUzLGFyZzMpXAordHlwZSBuYW1lKHR5cGUxIGFyZzEsIHR5cGUyIGFyZzIsIHR5cGUzIGFyZzMpIHsJCSAgICAgXAorCXJlZ2lzdGVyIHR5cGUxIF9fYXJnMSBhc20oIjIiKSA9IGFyZzE7CQkgICAgIFwKKwlyZWdpc3RlciB0eXBlMiBfX2FyZzIgYXNtKCIzIikgPSBhcmcyOwkJICAgICBcCisJcmVnaXN0ZXIgdHlwZTMgX19hcmczIGFzbSgiNCIpID0gYXJnMzsJCSAgICAgXAorCXJlZ2lzdGVyIGxvbmcgX19zdmNyZXMgYXNtKCIyIik7CQkgICAgIFwKKwlsb25nIF9fcmVzOwkJCQkJICAgICBcCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJCQkgICAgIFwKKwkJIiAgICAuaWYgJTEgPCAyNTZcbiIJCQkgICAgIFwKKwkJIiAgICBzdmMgJWIxXG4iCQkJCSAgICAgXAorCQkiICAgIC5lbHNlXG4iCQkJCSAgICAgXAorCQkiICAgIGxhICAlJXIxLCUxXG4iCQkJICAgICBcCisJCSIgICAgc3ZjIDBcbiIJCQkJICAgICBcCisJCSIgICAgLmVuZGlmIgkJCQkgICAgIFwKKwkJOiAiPWQiIChfX3N2Y3JlcykJCQkgICAgIFwKKwkJOiAiaSIgKF9fTlJfIyNuYW1lKSwJCQkgICAgIFwKKwkJICAiMCIgKF9fYXJnMSksCQkJCSAgICAgXAorCQkgICJkIiAoX19hcmcyKSwJCQkJICAgICBcCisJCSAgImQiIChfX2FyZzMpCQkJCSAgICAgXAorCQk6IF9zdmNfY2xvYmJlciApOwkJCSAgICAgXAorCV9fcmVzID0gX19zdmNyZXM7CQkJCSAgICAgXAorCV9fc3lzY2FsbF9yZXR1cm4odHlwZSxfX3Jlcyk7CQkJICAgICBcCit9CisKKyNkZWZpbmUgX3N5c2NhbGw0KHR5cGUsbmFtZSx0eXBlMSxhcmcxLHR5cGUyLGFyZzIsdHlwZTMsYXJnMyxcCisJCSAgdHlwZTQsbmFtZTQpCQkJCSAgICAgXAordHlwZSBuYW1lKHR5cGUxIGFyZzEsIHR5cGUyIGFyZzIsIHR5cGUzIGFyZzMsIHR5cGU0IGFyZzQpIHsgIFwKKwlyZWdpc3RlciB0eXBlMSBfX2FyZzEgYXNtKCIyIikgPSBhcmcxOwkJICAgICBcCisJcmVnaXN0ZXIgdHlwZTIgX19hcmcyIGFzbSgiMyIpID0gYXJnMjsJCSAgICAgXAorCXJlZ2lzdGVyIHR5cGUzIF9fYXJnMyBhc20oIjQiKSA9IGFyZzM7CQkgICAgIFwKKwlyZWdpc3RlciB0eXBlNCBfX2FyZzQgYXNtKCI1IikgPSBhcmc0OwkJICAgICBcCisJcmVnaXN0ZXIgbG9uZyBfX3N2Y3JlcyBhc20oIjIiKTsJCSAgICAgXAorCWxvbmcgX19yZXM7CQkJCQkgICAgIFwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCSAgICAgXAorCQkiICAgIC5pZiAlMSA8IDI1NlxuIgkJCSAgICAgXAorCQkiICAgIHN2YyAlYjFcbiIJCQkJICAgICBcCisJCSIgICAgLmVsc2VcbiIJCQkJICAgICBcCisJCSIgICAgbGEgICUlcjEsJTFcbiIJCQkgICAgIFwKKwkJIiAgICBzdmMgMFxuIgkJCQkgICAgIFwKKwkJIiAgICAuZW5kaWYiCQkJCSAgICAgXAorCQk6ICI9ZCIgKF9fc3ZjcmVzKQkJCSAgICAgXAorCQk6ICJpIiAoX19OUl8jI25hbWUpLAkJCSAgICAgXAorCQkgICIwIiAoX19hcmcxKSwJCQkJICAgICBcCisJCSAgImQiIChfX2FyZzIpLAkJCQkgICAgIFwKKwkJICAiZCIgKF9fYXJnMyksCQkJCSAgICAgXAorCQkgICJkIiAoX19hcmc0KQkJCQkgICAgIFwKKwkJOiBfc3ZjX2Nsb2JiZXIgKTsJCQkgICAgIFwKKwlfX3JlcyA9IF9fc3ZjcmVzOwkJCQkgICAgIFwKKwlfX3N5c2NhbGxfcmV0dXJuKHR5cGUsX19yZXMpOwkJCSAgICAgXAorfQorCisjZGVmaW5lIF9zeXNjYWxsNSh0eXBlLG5hbWUsdHlwZTEsYXJnMSx0eXBlMixhcmcyLHR5cGUzLGFyZzMsXAorCQkgIHR5cGU0LG5hbWU0LHR5cGU1LG5hbWU1KQkJICAgICBcCit0eXBlIG5hbWUodHlwZTEgYXJnMSwgdHlwZTIgYXJnMiwgdHlwZTMgYXJnMywgdHlwZTQgYXJnNCwgICAgXAorCSAgdHlwZTUgYXJnNSkgewkJCQkJICAgICBcCisJcmVnaXN0ZXIgdHlwZTEgX19hcmcxIGFzbSgiMiIpID0gYXJnMTsJCSAgICAgXAorCXJlZ2lzdGVyIHR5cGUyIF9fYXJnMiBhc20oIjMiKSA9IGFyZzI7CQkgICAgIFwKKwlyZWdpc3RlciB0eXBlMyBfX2FyZzMgYXNtKCI0IikgPSBhcmczOwkJICAgICBcCisJcmVnaXN0ZXIgdHlwZTQgX19hcmc0IGFzbSgiNSIpID0gYXJnNDsJCSAgICAgXAorCXJlZ2lzdGVyIHR5cGU1IF9fYXJnNSBhc20oIjYiKSA9IGFyZzU7CQkgICAgIFwKKwlyZWdpc3RlciBsb25nIF9fc3ZjcmVzIGFzbSgiMiIpOwkJICAgICBcCisJbG9uZyBfX3JlczsJCQkJCSAgICAgXAorCV9fYXNtX18gX192b2xhdGlsZV9fICgJCQkJICAgICBcCisJCSIgICAgLmlmICUxIDwgMjU2XG4iCQkJICAgICBcCisJCSIgICAgc3ZjICViMVxuIgkJCQkgICAgIFwKKwkJIiAgICAuZWxzZVxuIgkJCQkgICAgIFwKKwkJIiAgICBsYSAgJSVyMSwlMVxuIgkJCSAgICAgXAorCQkiICAgIHN2YyAwXG4iCQkJCSAgICAgXAorCQkiICAgIC5lbmRpZiIJCQkJICAgICBcCisJCTogIj1kIiAoX19zdmNyZXMpCQkJICAgICBcCisJCTogImkiIChfX05SXyMjbmFtZSksCQkJICAgICBcCisJCSAgIjAiIChfX2FyZzEpLAkJCQkgICAgIFwKKwkJICAiZCIgKF9fYXJnMiksCQkJCSAgICAgXAorCQkgICJkIiAoX19hcmczKSwJCQkJICAgICBcCisJCSAgImQiIChfX2FyZzQpLAkJCQkgICAgIFwKKwkJICAiZCIgKF9fYXJnNSkJCQkJICAgICBcCisJCTogX3N2Y19jbG9iYmVyICk7CQkJICAgICBcCisJX19yZXMgPSBfX3N2Y3JlczsJCQkJICAgICBcCisJX19zeXNjYWxsX3JldHVybih0eXBlLF9fcmVzKTsJCQkgICAgIFwKK30KKworI2lmZGVmIF9fS0VSTkVMX18KKyNkZWZpbmUgX19BUkNIX1dBTlRfSVBDX1BBUlNFX1ZFUlNJT04KKyNkZWZpbmUgX19BUkNIX1dBTlRfT0xEX1JFQURESVIKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0FMQVJNCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19HRVRIT1NUTkFNRQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfUEFVU0UKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR05BTAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfVVRJTUUKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NPQ0tFVENBTEwKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0ZBRFZJU0U2NAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfR0VUUEdSUAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfTExTRUVLCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19OSUNFCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19PTERfR0VUUkxJTUlUCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19PTERVTU9VTlQKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR1BFTkRJTkcKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR1BST0NNQVNLCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19SVF9TSUdBQ1RJT04KKyMgaWZkZWYgQ09ORklHX0FSQ0hfUzM5MF8zMQorIyAgIGRlZmluZSBfX0FSQ0hfV0FOVF9TVEFUNjQKKyMgICBkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1RJTUUKKyMgZW5kaWYKKyMgZGVmaW5lIF9fQVJDSF9XQU5UX0NPTVBBVF9TWVNfVElNRQorI2VuZGlmCisKKyNpZmRlZiBfX0tFUk5FTF9TWVNDQUxMU19fCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS9zdGF0Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KKworLyoKKyAqIHdlIG5lZWQgdGhpcyBpbmxpbmUgLSBmb3JraW5nIGZyb20ga2VybmVsIHNwYWNlIHdpbGwgcmVzdWx0CisgKiBpbiBOTyBDT1BZIE9OIFdSSVRFICghISEpLCB1bnRpbCBhbiBleGVjdmUgaXMgZXhlY3V0ZWQuIFRoaXMKKyAqIGlzIG5vIHByb2JsZW0sIGJ1dCBmb3IgdGhlIHN0YWNrLiBUaGlzIGlzIGhhbmRsZWQgYnkgbm90IGxldHRpbmcKKyAqIG1haW4oKSB1c2UgdGhlIHN0YWNrIGF0IGFsbCBhZnRlciBmb3JrKCkuIFRodXMsIG5vIGZ1bmN0aW9uCisgKiBjYWxscyAtIHdoaWNoIG1lYW5zIGlubGluZSBjb2RlIGZvciBmb3JrIHRvbywgYXMgb3RoZXJ3aXNlIHdlCisgKiB3b3VsZCB1c2UgdGhlIHN0YWNrIHVwb24gZXhpdCBmcm9tICdmb3JrKCknLgorICoKKyAqIEFjdHVhbGx5IG9ubHkgcGF1c2UgYW5kIGZvcmsgYXJlIG5lZWRlZCBpbmxpbmUsIHNvIHRoYXQgdGhlcmUKKyAqIHdvbid0IGJlIGFueSBtZXNzaW5nIHdpdGggdGhlIHN0YWNrIGZyb20gbWFpbigpLCBidXQgd2UgZGVmaW5lCisgKiBzb21lIG90aGVycyB0b28uCisgKi8KKyNkZWZpbmUgX19OUl9fZXhpdCBfX05SX2V4aXQKK3N0YXRpYyBpbmxpbmUgX3N5c2NhbGwwKHBpZF90LHNldHNpZCkKK3N0YXRpYyBpbmxpbmUgX3N5c2NhbGwzKGludCx3cml0ZSxpbnQsZmQsY29uc3QgY2hhciAqLGJ1ZixvZmZfdCxjb3VudCkKK3N0YXRpYyBpbmxpbmUgX3N5c2NhbGwzKGludCxyZWFkLGludCxmZCxjaGFyICosYnVmLG9mZl90LGNvdW50KQorc3RhdGljIGlubGluZSBfc3lzY2FsbDMob2ZmX3QsbHNlZWssaW50LGZkLG9mZl90LG9mZnNldCxpbnQsY291bnQpCitzdGF0aWMgaW5saW5lIF9zeXNjYWxsMShpbnQsZHVwLGludCxmZCkKK3N0YXRpYyBpbmxpbmUgX3N5c2NhbGwzKGludCxleGVjdmUsY29uc3QgY2hhciAqLGZpbGUsY2hhciAqKixhcmd2LGNoYXIgKiosZW52cCkKK3N0YXRpYyBpbmxpbmUgX3N5c2NhbGwzKGludCxvcGVuLGNvbnN0IGNoYXIgKixmaWxlLGludCxmbGFnLGludCxtb2RlKQorc3RhdGljIGlubGluZSBfc3lzY2FsbDEoaW50LGNsb3NlLGludCxmZCkKK3N0YXRpYyBpbmxpbmUgX3N5c2NhbGwyKGxvbmcsc3RhdCxjaGFyICosZmlsZW5hbWUsc3RydWN0IHN0YXQgKixzdGF0YnVmKQorCitzdGF0aWMgaW5saW5lIHBpZF90IHdhaXRwaWQoaW50IHBpZCwgaW50ICp3YWl0X3N0YXQsIGludCBmbGFncykKK3sKKwlyZXR1cm4gc3lzX3dhaXQ0KHBpZCwgd2FpdF9zdGF0LCBmbGFncywgTlVMTCk7Cit9CitzdHJ1Y3QgbW1hcF9hcmdfc3RydWN0OworYXNtbGlua2FnZSBsb25nIHN5c19tbWFwMihzdHJ1Y3QgbW1hcF9hcmdfc3RydWN0IF9fdXNlciAqYXJnKTsKKworYXNtbGlua2FnZSBsb25nIHN5c19leGVjdmUoc3RydWN0IHB0X3JlZ3MgcmVncyk7Cithc21saW5rYWdlIGxvbmcgc3lzX2Nsb25lKHN0cnVjdCBwdF9yZWdzIHJlZ3MpOworYXNtbGlua2FnZSBsb25nIHN5c19mb3JrKHN0cnVjdCBwdF9yZWdzIHJlZ3MpOworYXNtbGlua2FnZSBsb25nIHN5c192Zm9yayhzdHJ1Y3QgcHRfcmVncyByZWdzKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfcGlwZSh1bnNpZ25lZCBsb25nIF9fdXNlciAqZmlsZGVzKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfcHRyYWNlKGxvbmcgcmVxdWVzdCwgbG9uZyBwaWQsIGxvbmcgYWRkciwgbG9uZyBkYXRhKTsKK3N0cnVjdCBzaWdhY3Rpb247Cithc21saW5rYWdlIGxvbmcgc3lzX3J0X3NpZ2FjdGlvbihpbnQgc2lnLAorCQkJCWNvbnN0IHN0cnVjdCBzaWdhY3Rpb24gX191c2VyICphY3QsCisJCQkJc3RydWN0IHNpZ2FjdGlvbiBfX3VzZXIgKm9hY3QsCisJCQkJc2l6ZV90IHNpZ3NldHNpemUpOworCisjZW5kaWYKKworLyoKKyAqICJDb25kaXRpb25hbCIgc3lzY2FsbHMKKyAqCisgKiBXaGF0IHdlIHdhbnQgaXMgX19hdHRyaWJ1dGVfXygod2VhayxhbGlhcygic3lzX25pX3N5c2NhbGwiKSkpLAorICogYnV0IGl0IGRvZXNuJ3Qgd29yayBvbiBhbGwgdG9vbGNoYWlucywgc28gd2UganVzdCBkbyBpdCBieSBoYW5kCisgKi8KKyNkZWZpbmUgY29uZF9zeXNjYWxsKHgpIGFzbSgiLndlYWtcdCIgI3ggIlxuXHQuc2V0XHQiICN4ICIsc3lzX25pX3N5c2NhbGwiKQorCisjZW5kaWYgLyogX0FTTV9TMzkwX1VOSVNURF9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC91c2VyLmggYi9pbmNsdWRlL2FzbS1zMzkwL3VzZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjRmOGMxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tczM5MC91c2VyLmgKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqICBpbmNsdWRlL2FzbS1zMzkwL3VzZXIuaAorICoKKyAqICBTMzkwIHZlcnNpb24KKyAqCisgKiAgRGVyaXZlZCBmcm9tICJpbmNsdWRlL2FzbS1pMzg2L3Vzci5oIgorICovCisKKyNpZm5kZWYgX1MzOTBfVVNFUl9ICisjZGVmaW5lIF9TMzkwX1VTRVJfSAorCisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKy8qIENvcmUgZmlsZSBmb3JtYXQ6IFRoZSBjb3JlIGZpbGUgaXMgd3JpdHRlbiBpbiBzdWNoIGEgd2F5IHRoYXQgZ2RiCisgICBjYW4gdW5kZXJzdGFuZCBpdCBhbmQgcHJvdmlkZSB1c2VmdWwgaW5mb3JtYXRpb24gdG8gdGhlIHVzZXIgKHVuZGVyCisgICBsaW51eCB3ZSB1c2UgdGhlICd0cmFkLWNvcmUnIGJmZCkuICBUaGVyZSBhcmUgcXVpdGUgYSBudW1iZXIgb2YKKyAgIG9ic3RhY2xlcyB0byBiZWluZyBhYmxlIHRvIHZpZXcgdGhlIGNvbnRlbnRzIG9mIHRoZSBmbG9hdGluZyBwb2ludAorICAgcmVnaXN0ZXJzLCBhbmQgdW50aWwgdGhlc2UgYXJlIHNvbHZlZCB5b3Ugd2lsbCBub3QgYmUgYWJsZSB0byB2aWV3IHRoZQorICAgY29udGVudHMgb2YgdGhlbS4gIEFjdHVhbGx5LCB5b3UgY2FuIHJlYWQgaW4gdGhlIGNvcmUgZmlsZSBhbmQgbG9vayBhdAorICAgdGhlIGNvbnRlbnRzIG9mIHRoZSB1c2VyIHN0cnVjdCB0byBmaW5kIG91dCB3aGF0IHRoZSBmbG9hdGluZyBwb2ludAorICAgcmVnaXN0ZXJzIGNvbnRhaW4uCisgICBUaGUgYWN0dWFsIGZpbGUgY29udGVudHMgYXJlIGFzIGZvbGxvd3M6CisgICBVUEFHRTogMSBwYWdlIGNvbnNpc3Rpbmcgb2YgYSB1c2VyIHN0cnVjdCB0aGF0IHRlbGxzIGdkYiB3aGF0IGlzIHByZXNlbnQKKyAgIGluIHRoZSBmaWxlLiAgRGlyZWN0bHkgYWZ0ZXIgdGhpcyBpcyBhIGNvcHkgb2YgdGhlIHRhc2tfc3RydWN0LCB3aGljaAorICAgaXMgY3VycmVudGx5IG5vdCB1c2VkIGJ5IGdkYiwgYnV0IGl0IG1heSBjb21lIGluIHVzZWZ1bCBhdCBzb21lIHBvaW50LgorICAgQWxsIG9mIHRoZSByZWdpc3RlcnMgYXJlIHN0b3JlZCBhcyBwYXJ0IG9mIHRoZSB1cGFnZS4gIFRoZSB1cGFnZSBzaG91bGQKKyAgIGFsd2F5cyBiZSBvbmx5IG9uZSBwYWdlLgorICAgREFUQTogVGhlIGRhdGEgYXJlYSBpcyBzdG9yZWQuICBXZSB1c2UgY3VycmVudC0+ZW5kX3RleHQgdG8KKyAgIGN1cnJlbnQtPmJyayB0byBwaWNrIHVwIGFsbCBvZiB0aGUgdXNlciB2YXJpYWJsZXMsIHBsdXMgYW55IG1lbW9yeQorICAgdGhhdCBtYXkgaGF2ZSBiZWVuIG1hbGxvY2VkLiAgTm8gYXR0ZW1wdCBpcyBtYWRlIHRvIGRldGVybWluZSBpZiBhIHBhZ2UKKyAgIGlzIGRlbWFuZC16ZXJvIG9yIGlmIGEgcGFnZSBpcyB0b3RhbGx5IHVudXNlZCwgd2UganVzdCBjb3ZlciB0aGUgZW50aXJlCisgICByYW5nZS4gIEFsbCBvZiB0aGUgYWRkcmVzc2VzIGFyZSByb3VuZGVkIGluIHN1Y2ggYSB3YXkgdGhhdCBhbiBpbnRlZ3JhbAorICAgbnVtYmVyIG9mIHBhZ2VzIGlzIHdyaXR0ZW4uCisgICBTVEFDSzogV2UgbmVlZCB0aGUgc3RhY2sgaW5mb3JtYXRpb24gaW4gb3JkZXIgdG8gZ2V0IGEgbWVhbmluZ2Z1bAorICAgYmFja3RyYWNlLiAgV2UgbmVlZCB0byB3cml0ZSB0aGUgZGF0YSBmcm9tIChlc3ApIHRvCisgICBjdXJyZW50LT5zdGFydF9zdGFjaywgc28gd2Ugcm91bmQgZWFjaCBvZiB0aGVzZSBvZmYgaW4gb3JkZXIgdG8gYmUgYWJsZQorICAgdG8gd3JpdGUgYW4gaW50ZWdlciBudW1iZXIgb2YgcGFnZXMuCisgICBUaGUgbWluaW11bSBjb3JlIGZpbGUgc2l6ZSBpcyAzIHBhZ2VzLCBvciAxMjI4OCBieXRlcy4KKyovCisKKworLyoKKyAqIFRoaXMgaXMgdGhlIG9sZCBsYXlvdXQgb2YgInN0cnVjdCBwdF9yZWdzIiwgYW5kCisgKiBpcyBzdGlsbCB0aGUgbGF5b3V0IHVzZWQgYnkgdXNlciBtb2RlICh0aGUgbmV3CisgKiBwdF9yZWdzIGRvZXNuJ3QgaGF2ZSBhbGwgcmVnaXN0ZXJzIGFzIHRoZSBrZXJuZWwKKyAqIGRvZXNuJ3QgdXNlIHRoZSBleHRyYSBzZWdtZW50IHJlZ2lzdGVycykKKyAqLworCisvKiBXaGVuIHRoZSBrZXJuZWwgZHVtcHMgY29yZSwgaXQgc3RhcnRzIGJ5IGR1bXBpbmcgdGhlIHVzZXIgc3RydWN0IC0KKyAgIHRoaXMgd2lsbCBiZSB1c2VkIGJ5IGdkYiB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBkYXRhIGFuZCBzdGFjayBzZWdtZW50cworICAgYXJlIHdpdGhpbiB0aGUgZmlsZSwgYW5kIHdoYXQgdmlydHVhbCBhZGRyZXNzZXMgdG8gdXNlLiAqLworc3RydWN0IHVzZXIgeworLyogV2Ugc3RhcnQgd2l0aCB0aGUgcmVnaXN0ZXJzLCB0byBtaW1pYyB0aGUgd2F5IHRoYXQgIm1lbW9yeSIgaXMgcmV0dXJuZWQKKyAgIGZyb20gdGhlIHB0cmFjZSgzLC4uLikgZnVuY3Rpb24uICAqLworICBzdHJ1Y3QgdXNlcl9yZWdzX3N0cnVjdCByZWdzOwkJLyogV2hlcmUgdGhlIHJlZ2lzdGVycyBhcmUgYWN0dWFsbHkgc3RvcmVkICovCisvKiBUaGUgcmVzdCBvZiB0aGlzIGp1bmsgaXMgdG8gaGVscCBnZGIgZmlndXJlIG91dCB3aGF0IGdvZXMgd2hlcmUgKi8KKyAgdW5zaWduZWQgbG9uZyBpbnQgdV90c2l6ZTsJLyogVGV4dCBzZWdtZW50IHNpemUgKHBhZ2VzKS4gKi8KKyAgdW5zaWduZWQgbG9uZyBpbnQgdV9kc2l6ZTsJLyogRGF0YSBzZWdtZW50IHNpemUgKHBhZ2VzKS4gKi8KKyAgdW5zaWduZWQgbG9uZyBpbnQgdV9zc2l6ZTsJLyogU3RhY2sgc2VnbWVudCBzaXplIChwYWdlcykuICovCisgIHVuc2lnbmVkIGxvbmcgc3RhcnRfY29kZTsgICAgIC8qIFN0YXJ0aW5nIHZpcnR1YWwgYWRkcmVzcyBvZiB0ZXh0LiAqLworICB1bnNpZ25lZCBsb25nIHN0YXJ0X3N0YWNrOwkvKiBTdGFydGluZyB2aXJ0dWFsIGFkZHJlc3Mgb2Ygc3RhY2sgYXJlYS4KKwkJCQkgICBUaGlzIGlzIGFjdHVhbGx5IHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLAorCQkJCSAgIHRoZSB0b3Agb2YgdGhlIHN0YWNrIGlzIGFsd2F5cyBmb3VuZCBpbiB0aGUKKwkJCQkgICBlc3AgcmVnaXN0ZXIuICAqLworICBsb25nIGludCBzaWduYWw7ICAgICAJCS8qIFNpZ25hbCB0aGF0IGNhdXNlZCB0aGUgY29yZSBkdW1wLiAqLworICBzdHJ1Y3QgdXNlcl9yZWdzX3N0cnVjdCAqdV9hcjA7CisJCQkJLyogVXNlZCBieSBnZGIgdG8gaGVscCBmaW5kIHRoZSB2YWx1ZXMgZm9yICovCisJCQkJLyogdGhlIHJlZ2lzdGVycy4gKi8KKyAgdW5zaWduZWQgbG9uZyBtYWdpYzsJCS8qIFRvIHVuaXF1ZWx5IGlkZW50aWZ5IGEgY29yZSBmaWxlICovCisgIGNoYXIgdV9jb21tWzMyXTsJCS8qIFVzZXIgY29tbWFuZCB0aGF0IHdhcyByZXNwb25zaWJsZSAqLworfTsKKyNkZWZpbmUgTkJQRyBQQUdFX1NJWkUKKyNkZWZpbmUgVVBBR0VTIDEKKyNkZWZpbmUgSE9TVF9URVhUX1NUQVJUX0FERFIgKHUuc3RhcnRfY29kZSkKKyNkZWZpbmUgSE9TVF9TVEFDS19FTkRfQUREUiAodS5zdGFydF9zdGFjayArIHUudV9zc2l6ZSAqIE5CUEcpCisKKyNlbmRpZiAvKiBfUzM5MF9VU0VSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvdnRvYy5oIGIvaW5jbHVkZS9hc20tczM5MC92dG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE0ZTM0ZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvdnRvYy5oCkBAIC0wLDAgKzEsMzcyIEBACisjaWZuZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisKKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KKyNpbmNsdWRlIDxhc20vZGFzZC5oPgorI2VuZGlmCisKKworI2RlZmluZSBMSU5FX0xFTkdUSCA4MAorI2RlZmluZSBWVE9DX1NUQVJUX0NDIDB4MAorI2RlZmluZSBWVE9DX1NUQVJUX0hIIDB4MQorI2RlZmluZSBGSVJTVF9VU0FCTEVfQ1lMIDEKKyNkZWZpbmUgRklSU1RfVVNBQkxFX1RSSyAyCisKKyNkZWZpbmUgREFTRF8zMzgwX1RZUEUgMTMxNDgKKyNkZWZpbmUgREFTRF8zMzkwX1RZUEUgMTMyMDAKKyNkZWZpbmUgREFTRF85MzQ1X1RZUEUgMzc3MDEKKworI2RlZmluZSBEQVNEXzMzODBfVkFMVUUgMHhiYjYwCisjZGVmaW5lIERBU0RfMzM5MF9WQUxVRSAweGU1YTIKKyNkZWZpbmUgREFTRF85MzQ1X1ZBTFVFIDB4YmM5OAorCisjZGVmaW5lIFZPTFNFUl9MRU5HVEggNgorI2RlZmluZSBCSUdfRElTS19TSVpFIDB4MTAwMDAKKworI2RlZmluZSBWVE9DX0VSUk9SICJWVE9DIGVycm9yOiIKKworCit0eXBlZGVmIHN0cnVjdCB0dHIgCit7CisgICAgICAgIF9fdTE2IHR0OworICAgICAgICBfX3U4ICByOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgdHRyX3Q7CisKK3R5cGVkZWYgc3RydWN0IGNjaGhiIAoreworICAgICAgICBfX3UxNiBjYzsKKyAgICAgICAgX191MTYgaGg7CisgICAgICAgIF9fdTggYjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGNjaGhiX3Q7CisKK3R5cGVkZWYgc3RydWN0IGNjaGggCit7CisgICAgICAgIF9fdTE2IGNjOworICAgICAgICBfX3UxNiBoaDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGNjaGhfdDsKKwordHlwZWRlZiBzdHJ1Y3QgbGFiZWxkYXRlIAoreworICAgICAgICBfX3U4ICB5ZWFyOworICAgICAgICBfX3UxNiBkYXk7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBsYWJlbGRhdGVfdDsKKworCit0eXBlZGVmIHN0cnVjdCB2b2x1bWVfbGFiZWwgCit7CisgICAgICAgIGNoYXIgdm9sa2V5WzRdOyAgICAgICAgIC8qIHZvbHVtZSBrZXkgPSB2b2x1bWUgbGFiZWwgICAgICAgICAgICAgICAgICovCisJY2hhciB2b2xsYmxbNF07CSAgICAgICAgLyogdm9sdW1lIGxhYmVsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwljaGFyIHZvbGlkWzZdOwkgICAgICAgIC8qIHZvbHVtZSBpZGVudGlmaWVyICAgICAgICAgICAgICAgICAgICAgICAgICovCisJX191OCBzZWN1cml0eTsJICAgICAgICAvKiBzZWN1cml0eSBieXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCWNjaGhiX3QgdnRvYzsgICAgICAgICAgIC8qIFZUT0MgYWRkcmVzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJY2hhciByZXMxWzVdOwkgICAgICAgIC8qIHJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIGNoYXIgY2lzaXplWzRdOwkgICAgICAgIC8qIENJLXNpemUgZm9yIEZCQSwuLi4gICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC4uLmJsYW5rcyBmb3IgQ0tEICAgICAgICAgICAgICAgICAgICAgICAgICovCisJY2hhciBibGtwZXJjaVs0XTsgICAgICAgLyogbm8gb2YgYmxvY2tzIHBlciBDSSAoRkJBKSwgYmxhbmtzIGZvciBDS0QgKi8KKwljaGFyIGxhYnBlcmNpWzRdOyAgICAgICAvKiBubyBvZiBsYWJlbHMgcGVyIENJIChGQkEpLCBibGFua3MgZm9yIENLRCAqLworCWNoYXIgcmVzMls0XTsJICAgICAgICAvKiByZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCWNoYXIgbHZ0b2NbMTRdOwkgICAgICAgIC8qIG93bmVyIGNvZGUgZm9yIExWVE9DICAgICAgICAgICAgICAgICAgICAgICovCisJY2hhciByZXMzWzI5XTsJICAgICAgICAvKiByZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgdm9sdW1lX2xhYmVsX3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QgZXh0ZW50IAoreworICAgICAgICBfX3U4ICB0eXBlaW5kOyAgICAgICAgICAvKiBleHRlbnQgdHlwZSBpbmRpY2F0b3IgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICBfX3U4ICBzZXFubzsgICAgICAgICAgICAvKiBleHRlbnQgc2VxdWVuY2UgbnVtYmVyICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICBjY2hoX3QgbGxpbWl0OyAgICAgICAgICAvKiBzdGFydGluZyBwb2ludCBvZiB0aGlzIGV4dGVudCAgICAgICAgICAgICAqLworICAgICAgICBjY2hoX3QgdWxpbWl0OyAgICAgICAgICAvKiBlbmRpbmcgcG9pbnQgb2YgdGhpcyBleHRlbnQgICAgICAgICAgICAgICAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgZXh0ZW50X3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QgZGV2X2NvbnN0IAoreworICAgICAgICBfX3UxNiBEUzREU0NZTDsgICAgICAgICAgIC8qIG51bWJlciBvZiBsb2dpY2FsIGN5bHMgICAgICAgICAgICAgICAgICAqLworICAgICAgICBfX3UxNiBEUzREU1RSSzsgICAgICAgICAgIC8qIG51bWJlciBvZiB0cmFja3MgaW4gYSBsb2dpY2FsIGN5bGluZGVyICAqLworICAgICAgICBfX3UxNiBEUzRERVZUSzsgICAgICAgICAgIC8qIGRldmljZSB0cmFjayBsZW5ndGggICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICBfX3U4ICBEUzRERVZJOyAgICAgICAgICAgIC8qIG5vbi1sYXN0IGtleWVkIHJlY29yZCBvdmVyaGVhZCAgICAgICAgICAqLworICAgICAgICBfX3U4ICBEUzRERVZMOyAgICAgICAgICAgIC8qIGxhc3Qga2V5ZWQgcmVjb3JkIG92ZXJoZWFkICAgICAgICAgICAgICAqLworICAgICAgICBfX3U4ICBEUzRERVZLOyAgICAgICAgICAgIC8qIG5vbi1rZXllZCByZWNvcmQgb3ZlcmhlYWQgZGlmZmVyZW50aWFsICAqLworICAgICAgICBfX3U4ICBEUzRERVZGRzsgICAgICAgICAgIC8qIGZsYWcgYnl0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICBfX3UxNiBEUzRERVZUTDsgICAgICAgICAgIC8qIGRldmljZSB0b2xlcmFuY2UgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICBfX3U4ICBEUzRERVZEVDsgICAgICAgICAgIC8qIG51bWJlciBvZiBEU0NCJ3MgcGVyIHRyYWNrICAgICAgICAgICAgICAqLworICAgICAgICBfX3U4ICBEUzRERVZEQjsgICAgICAgICAgIC8qIG51bWJlciBvZiBkaXJlY3RvcnkgYmxvY2tzIHBlciB0cmFjayAgICAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgZGV2X2NvbnN0X3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QgZm9ybWF0MV9sYWJlbCAKK3sKKwljaGFyICBEUzFEU05BTVs0NF07ICAgICAgIC8qIGRhdGEgc2V0IG5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCV9fdTggIERTMUZNVElEOyAgICAgICAgICAgLyogZm9ybWF0IGlkZW50aWZpZXIgICAgICAgICAgICAgICAgICAgICAgICovCisJY2hhciAgRFMxRFNTTls2XTsgICAgICAgICAvKiBkYXRhIHNldCBzZXJpYWwgbnVtYmVyICAgICAgICAgICAgICAgICAgKi8KKwlfX3UxNiBEUzFWT0xTUTsgICAgICAgICAgIC8qIHZvbHVtZSBzZXF1ZW5jZSBudW1iZXIgICAgICAgICAgICAgICAgICAqLworCWxhYmVsZGF0ZV90IERTMUNSRURUOyAgICAgLyogY3JlYXRpb24gZGF0ZTogeWRkICAgICAgICAgICAgICAgICAgICAgICovCisJbGFiZWxkYXRlX3QgRFMxRVhQRFQ7ICAgICAvKiBleHBpcmF0aW9uIGRhdGUgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwlfX3U4ICBEUzFOT0VQVjsgICAgICAgICAgIC8qIG51bWJlciBvZiBleHRlbnRzIG9uIHZvbHVtZSAgICAgICAgICAgICAqLworICAgICAgICBfX3U4ICBEUzFOT0JEQjsgICAgICAgICAgIC8qIG5vLiBvZiBieXRlcyB1c2VkIGluIGxhc3QgZGlyZWN0aW9uIGJsayAqLworCV9fdTggIERTMUZMQUcxOyAgICAgICAgICAgLyogZmxhZyAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJY2hhciAgRFMxU1lTQ0RbMTNdOyAgICAgICAvKiBzeXN0ZW0gY29kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwlsYWJlbGRhdGVfdCBEUzFSRUZEOyAgICAgIC8qIGRhdGUgbGFzdCByZWZlcmVuY2VkICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICBfX3U4ICBEUzFTTVNGRzsgICAgICAgICAgIC8qIHN5c3RlbSBtYW5hZ2VkIHN0b3JhZ2UgaW5kaWNhdG9ycyAgICAgICAqLworICAgICAgICBfX3U4ICBEUzFTQ1hURjsgICAgICAgICAgIC8qIHNlYy4gc3BhY2UgZXh0ZW5zaW9uIGZsYWcgYnl0ZSAgICAgICAgICAqLworICAgICAgICBfX3UxNiBEUzFTQ1hUVjsgICAgICAgICAgIC8qIHNlY29uZGFyeSBzcGFjZSBleHRlbnNpb24gdmFsdWUgICAgICAgICAqLworICAgICAgICBfX3U4ICBEUzFEU1JHMTsgICAgICAgICAgIC8qIGRhdGEgc2V0IG9yZ2FuaXNhdGlvbiBieXRlIDEgICAgICAgICAgICAqLworICAgICAgICBfX3U4ICBEUzFEU1JHMjsgICAgICAgICAgIC8qIGRhdGEgc2V0IG9yZ2FuaXNhdGlvbiBieXRlIDIgICAgICAgICAgICAqLworICAJX191OCAgRFMxUkVDRk07ICAgICAgICAgICAvKiByZWNvcmQgZm9ybWF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwlfX3U4ICBEUzFPUFRDRDsgICAgICAgICAgIC8qIG9wdGlvbiBjb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCV9fdTE2IERTMUJMS0w7ICAgICAgICAgICAgLyogYmxvY2sgbGVuZ3RoICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJX191MTYgRFMxTFJFQ0w7ICAgICAgICAgICAvKiByZWNvcmQgbGVuZ3RoICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwlfX3U4ICBEUzFLRVlMOyAgICAgICAgICAgIC8qIGtleSBsZW5ndGggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCV9fdTE2IERTMVJLUDsgICAgICAgICAgICAgLyogcmVsYXRpdmUga2V5IHBvc2l0aW9uICAgICAgICAgICAgICAgICAgICovCisJX191OCAgRFMxRFNJTkQ7ICAgICAgICAgICAvKiBkYXRhIHNldCBpbmRpY2F0b3JzICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgX191OCAgRFMxU0NBTDE7ICAgICAgICAgICAvKiBzZWNvbmRhcnkgYWxsb2NhdGlvbiBmbGFnIGJ5dGUgICAgICAgICAgKi8KKyAgCWNoYXIgRFMxU0NBTDNbM107ICAgICAgICAgLyogc2Vjb25kYXJ5IGFsbG9jYXRpb24gcXVhbnRpdHkgICAgICAgICAgICovCisJdHRyX3QgRFMxTFNUQVI7ICAgICAgICAgICAvKiBsYXN0IHVzZWQgdHJhY2sgYW5kIGJsb2NrIG9uIHRyYWNrICAgICAgKi8KKwlfX3UxNiBEUzFUUkJBTDsgICAgICAgICAgIC8qIHNwYWNlIHJlbWFpbmluZyBvbiBsYXN0IHVzZWQgdHJhY2sgICAgICAqLworICAgICAgICBfX3UxNiByZXMxOyAgICAgICAgICAgICAgIC8qIHJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCWV4dGVudF90IERTMUVYVDE7ICAgICAgICAgLyogZmlyc3QgZXh0ZW50IGRlc2NyaXB0aW9uICAgICAgICAgICAgICAgICovCisJZXh0ZW50X3QgRFMxRVhUMjsgICAgICAgICAvKiBzZWNvbmQgZXh0ZW50IGRlc2NyaXB0aW9uICAgICAgICAgICAgICAgKi8KKwlleHRlbnRfdCBEUzFFWFQzOyAgICAgICAgIC8qIHRoaXJkIGV4dGVudCBkZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAqLworCWNjaGhiX3QgRFMxUFRSRFM7ICAgICAgICAgLyogcG9zc2libGUgcG9pbnRlciB0byBmMiBvciBmMyBEU0NCICAgICAgICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBmb3JtYXQxX2xhYmVsX3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QgZm9ybWF0NF9sYWJlbCAKK3sKKwljaGFyICBEUzRLRVlDRFs0NF07ICAgICAgIC8qIGtleSBjb2RlIGZvciBWVE9DIGxhYmVsczogNDQgdGltZXMgMHgwNCAqLworICAgICAgICBfX3U4ICBEUzRJREZNVDsgICAgICAgICAgIC8qIGZvcm1hdCBpZGVudGlmaWVyICAgICAgICAgICAgICAgICAgICAgICAqLworCWNjaGhiX3QgRFM0SFBDSFI7ICAgICAgICAgLyogaGlnaGVzdCBhZGRyZXNzIG9mIGEgZm9ybWF0IDEgRFNDQiAgICAgICovCisgICAgICAgIF9fdTE2IERTNERTUkVDOyAgICAgICAgICAgLyogbnVtYmVyIG9mIGF2YWlsYWJsZSBEU0NCJ3MgICAgICAgICAgICAgICovCisgICAgICAgIGNjaGhfdCBEUzRIQ0NISDsgICAgICAgICAgLyogQ0NISCBvZiBuZXh0IGF2YWlsYWJsZSBhbHRlcm5hdGUgdHJhY2sgICovCisgICAgICAgIF9fdTE2IERTNE5PQVRLOyAgICAgICAgICAgLyogbnVtYmVyIG9mIHJlbWFpbmluZyBhbHRlcm5hdGUgdHJhY2tzICAgICovCisgICAgICAgIF9fdTggIERTNFZUT0NJOyAgICAgICAgICAgLyogVlRPQyBpbmRpY2F0b3JzICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIF9fdTggIERTNE5PRVhUOyAgICAgICAgICAgLyogbnVtYmVyIG9mIGV4dGVudHMgaW4gVlRPQyAgICAgICAgICAgICAgICovCisgICAgICAgIF9fdTggIERTNFNNU0ZHOyAgICAgICAgICAgLyogc3lzdGVtIG1hbmFnZWQgc3RvcmFnZSBpbmRpY2F0b3JzICAgICAgICovCisgICAgICAgIF9fdTggIERTNERFVkFDOyAgICAgICAgICAgLyogbnVtYmVyIG9mIGFsdGVybmF0ZSBjeWxpbmRlcnMuIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1YnRyYWN0IGZyb20gZmlyc3QgdHdvIGJ5dGVzIG9mIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERTNERFVlNaIHRvIGdldCBudW1iZXIgb2YgdXNhYmxlCisJCQkJICAgICBjeWxpbmRlcnMuIGNhbiBiZSB6ZXJvLiB2YWxpZAorCQkJCSAgICAgb25seSBpZiBEUzRERVZBViBvbi4gICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIGRldl9jb25zdF90IERTNERFVkNUOyAgICAgLyogZGV2aWNlIGNvbnN0YW50cyAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIGNoYXIgRFM0QU1USU1bOF07ICAgICAgICAgLyogVlNBTSB0aW1lIHN0YW1wICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIGNoYXIgRFM0QU1DQVRbM107ICAgICAgICAgLyogVlNBTSBjYXRhbG9nIGluZGljYXRvciAgICAgICAgICAgICAgICAgICovCisgICAgICAgIGNoYXIgRFM0UjJUSU1bOF07ICAgICAgICAgLyogVlNBTSB2b2x1bWUvY2F0YWxvZyBtYXRjaCB0aW1lIHN0YW1wICAgICovCisgICAgICAgIGNoYXIgcmVzMVs1XTsgICAgICAgICAgICAgLyogcmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIGNoYXIgRFM0RjZQVFJbNV07ICAgICAgICAgLyogcG9pbnRlciB0byBmaXJzdCBmb3JtYXQgNiBEU0NCICAgICAgICAgICovCisgICAgICAgIGV4dGVudF90IERTNFZUT0NFOyAgICAgICAgLyogVlRPQyBleHRlbnQgZGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICovCisgICAgICAgIGNoYXIgcmVzMlsxMF07ICAgICAgICAgICAgLyogcmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIF9fdTggRFM0RUZMVkw7ICAgICAgICAgICAgLyogZXh0ZW5kZWQgZnJlZS1zcGFjZSBtYW5hZ2VtZW50IGxldmVsICAgICovCisgICAgICAgIGNjaGhiX3QgRFM0RUZQVFI7ICAgICAgICAgLyogcG9pbnRlciB0byBleHRlbmRlZCBmcmVlLXNwYWNlIGluZm8gICAgICovCisgICAgICAgIGNoYXIgcmVzM1s5XTsgICAgICAgICAgICAgLyogcmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBmb3JtYXQ0X2xhYmVsX3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QgZHM1ZXh0IAoreworCV9fdTE2IHQ7ICAgICAgICAgICAgICAgICAgLyogUlRBIG9mIHRoZSBmaXJzdCB0cmFjayBvZiBmcmVlIGV4dGVudCAgICovCisJX191MTYgZmM7ICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2Ygd2hvbGUgY3lsaW5kZXJzIGluIGZyZWUgZXh0LiAgKi8KKwlfX3U4ICBmdDsgICAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiByZW1haW5pbmcgZnJlZSB0cmFja3MgICAgICAgICAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgZHM1ZXh0X3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QgZm9ybWF0NV9sYWJlbCAKK3sKKwljaGFyIERTNUtFWUlEWzRdOyAgICAgICAgIC8qIGtleSBpZGVudGlmaWVyICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCWRzNWV4dF90IERTNUFWRVhUOyAgICAgICAgLyogZmlyc3QgYXZhaWxhYmxlIChmcmVlLXNwYWNlKSBleHRlbnQuICAgICovCisJZHM1ZXh0X3QgRFM1RVhUQVZbN107ICAgICAvKiBzZXZlbiBhdmFpbGFibGUgZXh0ZW50cyAgICAgICAgICAgICAgICAgKi8KKwlfX3U4IERTNUZNVElEOyAgICAgICAgICAgIC8qIGZvcm1hdCBpZGVudGlmaWVyICAgICAgICAgICAgICAgICAgICAgICAqLworCWRzNWV4dF90IERTNU1BVkVUWzE4XTsgICAgLyogZWlnaHRlZW4gYXZhaWxhYmxlIGV4dGVudHMgICAgICAgICAgICAgICovCisJY2NoaGJfdCBEUzVQVFJEUzsgICAgICAgICAvKiBwb2ludGVyIHRvIG5leHQgZm9ybWF0NSBEU0NCICAgICAgICAgICAgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGZvcm1hdDVfbGFiZWxfdDsKKworCit0eXBlZGVmIHN0cnVjdCBkczdleHQgCit7CisJX191MzIgYTsgICAgICAgICAgICAgICAgICAvKiBzdGFydGluZyBSVEEgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgKi8KKwlfX3UzMiBiOyAgICAgICAgICAgICAgICAgIC8qIGVuZGluZyBSVEEgdmFsdWUgKyAxICAgICAgICAgICAgICAgICAgICAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgZHM3ZXh0X3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QgZm9ybWF0N19sYWJlbCAKK3sKKwljaGFyIERTN0tFWUlEWzRdOyAgICAgICAgIC8qIGtleSBpZGVudGlmaWVyICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCWRzN2V4dF90IERTN0VYVE5UWzVdOyAgICAgLyogc3BhY2UgZm9yIDUgZXh0ZW50IGRlc2NyaXB0aW9ucyAgICAgICAgICovCisJX191OCBEUzdGTVRJRDsgICAgICAgICAgICAvKiBmb3JtYXQgaWRlbnRpZmllciAgICAgICAgICAgICAgICAgICAgICAgKi8KKwlkczdleHRfdCBEUzdBREVYVFsxMV07ICAgIC8qIHNwYWNlIGZvciAxMSBleHRlbnQgZGVzY3JpcHRpb25zICAgICAgICAqLworCWNoYXIgcmVzMVsyXTsgICAgICAgICAgICAgLyogcmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJY2NoaGJfdCBEUzdQVFJEUzsgICAgICAgICAvKiBwb2ludGVyIHRvIG5leHQgRk1UNyBEU0NCICAgICAgICAgICAgICAgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGZvcm1hdDdfbGFiZWxfdDsKKworCitjaGFyICogdnRvY19lYmNkaWNfZW5jICgKKyAgICAgICAgdW5zaWduZWQgY2hhciBzb3VyY2VbTElORV9MRU5HVEhdLAorICAgICAgICB1bnNpZ25lZCBjaGFyIHRhcmdldFtMSU5FX0xFTkdUSF0sCisJaW50IGwpOworY2hhciAqIHZ0b2NfZWJjZGljX2RlYyAoCisgICAgICAgIHVuc2lnbmVkIGNoYXIgc291cmNlW0xJTkVfTEVOR1RIXSwKKwl1bnNpZ25lZCBjaGFyIHRhcmdldFtMSU5FX0xFTkdUSF0sCisJaW50IGwpOwordm9pZCB2dG9jX3NldF9leHRlbnQgKAorICAgICAgICBleHRlbnRfdCAqIGV4dCwKKyAgICAgICAgX191OCB0eXBlaW5kLAorICAgICAgICBfX3U4IHNlcW5vLAorICAgICAgICBjY2hoX3QgKiBsb3dlciwKKyAgICAgICAgY2NoaF90ICogdXBwZXIpOwordm9pZCB2dG9jX3NldF9jY2hoICgKKyAgICAgICAgY2NoaF90ICogYWRkciwKKwlfX3UxNiBjYywKKwlfX3UxNiBoaCk7Cit2b2lkIHZ0b2Nfc2V0X2NjaGhiICgKKyAgICAgICAgY2NoaGJfdCAqIGFkZHIsCisgICAgICAgIF9fdTE2IGNjLAorICAgICAgICBfX3UxNiBoaCwKKyAgICAgICAgX191OCBiKTsKK3ZvaWQgdnRvY19zZXRfZGF0ZSAoCisgICAgICAgIGxhYmVsZGF0ZV90ICogZCwKKyAgICAgICAgX191OCB5ZWFyLAorICAgICAgICBfX3UxNiBkYXkpOworCit2b2lkIHZ0b2Nfdm9sdW1lX2xhYmVsX2luaXQgKAorCXZvbHVtZV9sYWJlbF90ICp2bGFiZWwpOworCitpbnQgdnRvY19yZWFkX3ZvbHVtZV9sYWJlbCAoCisgICAgICAgIGNoYXIgKiBkZXZpY2UsCisgICAgICAgIHVuc2lnbmVkIGxvbmcgdmxhYmVsX3N0YXJ0LAorICAgICAgICB2b2x1bWVfbGFiZWxfdCAqIHZsYWJlbCk7CisKK2ludCB2dG9jX3dyaXRlX3ZvbHVtZV9sYWJlbCAoCisgICAgICAgIGNoYXIgKmRldmljZSwKKyAgICAgICAgdW5zaWduZWQgbG9uZyB2bGFiZWxfc3RhcnQsCisgICAgICAgIHZvbHVtZV9sYWJlbF90ICp2bGFiZWwpOworCit2b2lkIHZ0b2Nfdm9sdW1lX2xhYmVsX3NldF92b2xzZXIgKAorCXZvbHVtZV9sYWJlbF90ICp2bGFiZWwsCisJY2hhciAqdm9sc2VyKTsKKworY2hhciAqdnRvY192b2x1bWVfbGFiZWxfZ2V0X3ZvbHNlciAoCisJdm9sdW1lX2xhYmVsX3QgKnZsYWJlbCwKKwljaGFyICp2b2xzZXIpOworCit2b2lkIHZ0b2Nfdm9sdW1lX2xhYmVsX3NldF9rZXkgKAorICAgICAgICB2b2x1bWVfbGFiZWxfdCAqdmxhYmVsLAorICAgICAgICBjaGFyICprZXkpOyAgICAgCisKK3ZvaWQgdnRvY192b2x1bWVfbGFiZWxfc2V0X2xhYmVsICgKKwl2b2x1bWVfbGFiZWxfdCAqdmxhYmVsLAorCWNoYXIgKmxibCk7CisKK2NoYXIgKnZ0b2Nfdm9sdW1lX2xhYmVsX2dldF9sYWJlbCAoCisJdm9sdW1lX2xhYmVsX3QgKnZsYWJlbCwKKwljaGFyICpsYmwpOworCit2b2lkIHZ0b2NfcmVhZF9sYWJlbCAoCisgICAgICAgIGNoYXIgKmRldmljZSwKKyAgICAgICAgdW5zaWduZWQgbG9uZyBwb3NpdGlvbiwKKyAgICAgICAgZm9ybWF0MV9sYWJlbF90ICpmMSwKKyAgICAgICAgZm9ybWF0NF9sYWJlbF90ICpmNCwKKyAgICAgICAgZm9ybWF0NV9sYWJlbF90ICpmNSwKKyAgICAgICAgZm9ybWF0N19sYWJlbF90ICpmNyk7CisKK3ZvaWQgdnRvY193cml0ZV9sYWJlbCAoCisgICAgICAgIGNoYXIgKmRldmljZSwKKyAgICAgICAgdW5zaWduZWQgbG9uZyBwb3NpdGlvbiwKKyAgICAgICAgZm9ybWF0MV9sYWJlbF90ICpmMSwKKwlmb3JtYXQ0X2xhYmVsX3QgKmY0LAorCWZvcm1hdDVfbGFiZWxfdCAqZjUsCisJZm9ybWF0N19sYWJlbF90ICpmNyk7CisKKwordm9pZCB2dG9jX2luaXRfZm9ybWF0MV9sYWJlbCAoCisgICAgICAgIGNoYXIgKnZvbGlkLAorICAgICAgICB1bnNpZ25lZCBpbnQgYmxrc2l6ZSwKKyAgICAgICAgZXh0ZW50X3QgKnBhcnRfZXh0ZW50LAorICAgICAgICBmb3JtYXQxX2xhYmVsX3QgKmYxKTsKKworCit2b2lkIHZ0b2NfaW5pdF9mb3JtYXQ0X2xhYmVsICgKKyAgICAgICAgZm9ybWF0NF9sYWJlbF90ICpmNGxibCwKKwl1bnNpZ25lZCBpbnQgdXNhYmxlX3BhcnRpdGlvbnMsCisJdW5zaWduZWQgaW50IGN5bGluZGVycywKKwl1bnNpZ25lZCBpbnQgdHJhY2tzLAorCXVuc2lnbmVkIGludCBibG9ja3MsCisJdW5zaWduZWQgaW50IGJsa3NpemUsCisJX191MTYgZGV2X3R5cGUpOworCit2b2lkIHZ0b2NfdXBkYXRlX2Zvcm1hdDRfbGFiZWwgKAorCWZvcm1hdDRfbGFiZWxfdCAqZjQsCisJY2NoaGJfdCAqaGlnaGVzdF9mMSwKKwlfX3UxNiB1bnVzZWRfdXBkYXRlKTsKKworCit2b2lkIHZ0b2NfaW5pdF9mb3JtYXQ1X2xhYmVsICgKKwlmb3JtYXQ1X2xhYmVsX3QgKmY1KTsKKwordm9pZCB2dG9jX3VwZGF0ZV9mb3JtYXQ1X2xhYmVsX2FkZCAoCisJZm9ybWF0NV9sYWJlbF90ICpmNSwKKwlpbnQgdmVyYm9zZSwKKwlpbnQgY3lsLAorCWludCB0cmssCisJX191MTYgYSwgCisJX191MTYgYiwgCisJX191OCBjKTsKKyAKK3ZvaWQgdnRvY191cGRhdGVfZm9ybWF0NV9sYWJlbF9kZWwgKAorCWZvcm1hdDVfbGFiZWxfdCAqZjUsCisJaW50IHZlcmJvc2UsCisJaW50IGN5bCwKKwlpbnQgdHJrLAorCV9fdTE2IGEsIAorCV9fdTE2IGIsIAorCV9fdTggYyk7CisKKwordm9pZCB2dG9jX2luaXRfZm9ybWF0N19sYWJlbCAoCisJZm9ybWF0N19sYWJlbF90ICpmNyk7CisKK3ZvaWQgdnRvY191cGRhdGVfZm9ybWF0N19sYWJlbF9hZGQgKAorCWZvcm1hdDdfbGFiZWxfdCAqZjcsCisJaW50IHZlcmJvc2UsCisJX191MzIgYSwgCisJX191MzIgYik7CisKK3ZvaWQgdnRvY191cGRhdGVfZm9ybWF0N19sYWJlbF9kZWwgKAorCWZvcm1hdDdfbGFiZWxfdCAqZjcsIAorCWludCB2ZXJib3NlLAorCV9fdTMyIGEsIAorCV9fdTMyIGIpOworCisKK3ZvaWQgdnRvY19zZXRfZnJlZXNwYWNlKAorCWZvcm1hdDRfbGFiZWxfdCAqZjQsCisJZm9ybWF0NV9sYWJlbF90ICpmNSwKKwlmb3JtYXQ3X2xhYmVsX3QgKmY3LAorCWNoYXIgY2gsCisJaW50IHZlcmJvc2UsCisJX191MzIgc3RhcnQsCisJX191MzIgc3RvcCwKKwlpbnQgY3lsLAorCWludCB0cmspOworCisKKworCisKKworCisKKworCisKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC94b3IuaCBiL2luY2x1ZGUvYXNtLXMzOTAveG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzgyZWIxMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAveG9yLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL3hvci5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvYS5vdXQuaCBiL2luY2x1ZGUvYXNtLXNoL2Eub3V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU5ZmNhOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL2Eub3V0LmgKQEAgLTAsMCArMSwyNiBAQAorI2lmbmRlZiBfX0FTTV9TSF9BX09VVF9ICisjZGVmaW5lIF9fQVNNX1NIX0FfT1VUX0gKKworc3RydWN0IGV4ZWMKK3sKKyAgdW5zaWduZWQgbG9uZyBhX2luZm87CQkvKiBVc2UgbWFjcm9zIE5fTUFHSUMsIGV0YyBmb3IgYWNjZXNzICovCisgIHVuc2lnbmVkIGFfdGV4dDsJCS8qIGxlbmd0aCBvZiB0ZXh0LCBpbiBieXRlcyAqLworICB1bnNpZ25lZCBhX2RhdGE7CQkvKiBsZW5ndGggb2YgZGF0YSwgaW4gYnl0ZXMgKi8KKyAgdW5zaWduZWQgYV9ic3M7CQkvKiBsZW5ndGggb2YgdW5pbml0aWFsaXplZCBkYXRhIGFyZWEgZm9yIGZpbGUsIGluIGJ5dGVzICovCisgIHVuc2lnbmVkIGFfc3ltczsJCS8qIGxlbmd0aCBvZiBzeW1ib2wgdGFibGUgZGF0YSBpbiBmaWxlLCBpbiBieXRlcyAqLworICB1bnNpZ25lZCBhX2VudHJ5OwkJLyogc3RhcnQgYWRkcmVzcyAqLworICB1bnNpZ25lZCBhX3Ryc2l6ZTsJCS8qIGxlbmd0aCBvZiByZWxvY2F0aW9uIGluZm8gZm9yIHRleHQsIGluIGJ5dGVzICovCisgIHVuc2lnbmVkIGFfZHJzaXplOwkJLyogbGVuZ3RoIG9mIHJlbG9jYXRpb24gaW5mbyBmb3IgZGF0YSwgaW4gYnl0ZXMgKi8KK307CisKKyNkZWZpbmUgTl9UUlNJWkUoYSkJKChhKS5hX3Ryc2l6ZSkKKyNkZWZpbmUgTl9EUlNJWkUoYSkJKChhKS5hX2Ryc2l6ZSkKKyNkZWZpbmUgTl9TWU1TSVpFKGEpCSgoYSkuYV9zeW1zKQorCisjaWZkZWYgX19LRVJORUxfXworCisjZGVmaW5lIFNUQUNLX1RPUAlUQVNLX1NJWkUKKworI2VuZGlmCisKKyNlbmRpZiAvKiBfX0FTTV9TSF9BX09VVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9hZGMuaCBiL2luY2x1ZGUvYXNtLXNoL2FkYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmODVjZjcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9hZGMuaApAQCAtMCwwICsxLDEzIEBACisjaWZuZGVmIF9fQVNNX0FEQ19ICisjZGVmaW5lIF9fQVNNX0FEQ19ICisjaWZkZWYgX19LRVJORUxfXworLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCAgQW5kcml5IFNrdWx5c2gKKyAqLworCisjaW5jbHVkZSA8YXNtL2NwdS9hZGMuaD4KKworaW50IGFkY19zaW5nbGUodW5zaWduZWQgaW50IGNoYW5uZWwpOworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9fQVNNX0FEQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9hZGRyc3BhY2UuaCBiL2luY2x1ZGUvYXNtLXNoL2FkZHJzcGFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiYjA1ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9hZGRyc3BhY2UuaApAQCAtMCwwICsxLDM4IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5IGJ5IEtheiBLb2ppbWEKKyAqCisgKiBEZWZpdGlvbnMgZm9yIHRoZSBhZGRyZXNzIHNwYWNlcyBvZiB0aGUgU0ggQ1BVcy4KKyAqLworI2lmbmRlZiBfX0FTTV9TSF9BRERSU1BBQ0VfSAorI2RlZmluZSBfX0FTTV9TSF9BRERSU1BBQ0VfSAorI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGFzbS9jcHUvYWRkcnNwYWNlLmg+CisKKy8qIE1lbW9yeSBzZWdtZW50cyAoMzJiaXQgUHJpdmlsZWRnZWQgbW9kZSBhZGRyZXNzZXMpICAqLworI2RlZmluZSBQMFNFRwkJMHgwMDAwMDAwMAorI2RlZmluZSBQMVNFRwkJMHg4MDAwMDAwMAorI2RlZmluZSBQMlNFRwkJMHhhMDAwMDAwMAorI2RlZmluZSBQM1NFRwkJMHhjMDAwMDAwMAorI2RlZmluZSBQNFNFRwkJMHhlMDAwMDAwMAorCisvKiBSZXR1cm5zIHRoZSBwcml2aWxlZ2VkIHNlZ21lbnQgYmFzZSBvZiBhIGdpdmVuIGFkZHJlc3MgICovCisjZGVmaW5lIFBYU0VHKGEpCSgoKHVuc2lnbmVkIGxvbmcpKGEpKSAmIDB4ZTAwMDAwMDApCisKKy8qIFJldHVybnMgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgYSBQblNFRyAobj0xLDIpIGFkZHJlc3MgICAqLworI2RlZmluZSBQSFlTQUREUihhKQkoKCh1bnNpZ25lZCBsb25nKShhKSkgJiAweDFmZmZmZmZmKQorCisvKgorICogTWFwIGFuIGFkZHJlc3MgdG8gYSBjZXJ0YWluIHByaXZpbGVnZWQgc2VnbWVudAorICovCisjZGVmaW5lIFAxU0VHQUREUihhKQkoKF9fdHlwZW9mX18oYSkpKCgodW5zaWduZWQgbG9uZykoYSkgJiAweDFmZmZmZmZmKSB8IFAxU0VHKSkKKyNkZWZpbmUgUDJTRUdBRERSKGEpCSgoX190eXBlb2ZfXyhhKSkoKCh1bnNpZ25lZCBsb25nKShhKSAmIDB4MWZmZmZmZmYpIHwgUDJTRUcpKQorI2RlZmluZSBQM1NFR0FERFIoYSkJKChfX3R5cGVvZl9fKGEpKSgoKHVuc2lnbmVkIGxvbmcpKGEpICYgMHgxZmZmZmZmZikgfCBQM1NFRykpCisjZGVmaW5lIFA0U0VHQUREUihhKQkoKF9fdHlwZW9mX18oYSkpKCgodW5zaWduZWQgbG9uZykoYSkgJiAweDFmZmZmZmZmKSB8IFA0U0VHKSkKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAvKiBfX0FTTV9TSF9BRERSU1BBQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvYWR4L2lvLmggYi9pbmNsdWRlL2FzbS1zaC9hZHgvaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjEyMjVmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvYWR4L2lvLmgKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLXNoL2lvX2FkeC5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAxIEEmRCBDby4sIEx0ZC4KKyAqCisgKiBUaGlzIGZpbGUgbWF5IGJlIGNvcGllZCBvciBtb2RpZmllZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFNlZSBsaW51eC9DT1BZSU5HIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICoKKyAqIElPIGZ1bmN0aW9ucyBmb3IgYW4gQSZEIEFEWCBCb2FyZAorICovCisKKyNpZm5kZWYgX0FTTV9TSF9JT19BRFhfSAorI2RlZmluZSBfQVNNX1NIX0lPX0FEWF9ICisKKyNpbmNsdWRlIDxhc20vaW9fZ2VuZXJpYy5oPgorCitleHRlcm4gdW5zaWduZWQgY2hhciBhZHhfaW5iKHVuc2lnbmVkIGxvbmcgcG9ydCk7CitleHRlcm4gdW5zaWduZWQgc2hvcnQgYWR4X2ludyh1bnNpZ25lZCBsb25nIHBvcnQpOworZXh0ZXJuIHVuc2lnbmVkIGludCBhZHhfaW5sKHVuc2lnbmVkIGxvbmcgcG9ydCk7CisKK2V4dGVybiB2b2lkIGFkeF9vdXRiKHVuc2lnbmVkIGNoYXIgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCk7CitleHRlcm4gdm9pZCBhZHhfb3V0dyh1bnNpZ25lZCBzaG9ydCB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KTsKK2V4dGVybiB2b2lkIGFkeF9vdXRsKHVuc2lnbmVkIGludCB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KTsKKworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgYWR4X2luYl9wKHVuc2lnbmVkIGxvbmcgcG9ydCk7CitleHRlcm4gdm9pZCBhZHhfb3V0Yl9wKHVuc2lnbmVkIGNoYXIgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCk7CisKK2V4dGVybiB2b2lkIGFkeF9pbnNiKHVuc2lnbmVkIGxvbmcgcG9ydCwgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCk7CitleHRlcm4gdm9pZCBhZHhfaW5zdyh1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpOworZXh0ZXJuIHZvaWQgYWR4X2luc2wodW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKK2V4dGVybiB2b2lkIGFkeF9vdXRzYih1bnNpZ25lZCBsb25nIHBvcnQsIGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpOworZXh0ZXJuIHZvaWQgYWR4X291dHN3KHVuc2lnbmVkIGxvbmcgcG9ydCwgY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCk7CitleHRlcm4gdm9pZCBhZHhfb3V0c2wodW5zaWduZWQgbG9uZyBwb3J0LCBjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKKworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgYWR4X3JlYWRiKHVuc2lnbmVkIGxvbmcgYWRkcik7CitleHRlcm4gdW5zaWduZWQgc2hvcnQgYWR4X3JlYWR3KHVuc2lnbmVkIGxvbmcgYWRkcik7CitleHRlcm4gdW5zaWduZWQgaW50IGFkeF9yZWFkbCh1bnNpZ25lZCBsb25nIGFkZHIpOworZXh0ZXJuIHZvaWQgYWR4X3dyaXRlYih1bnNpZ25lZCBjaGFyIGIsIHVuc2lnbmVkIGxvbmcgYWRkcik7CitleHRlcm4gdm9pZCBhZHhfd3JpdGV3KHVuc2lnbmVkIHNob3J0IGIsIHVuc2lnbmVkIGxvbmcgYWRkcik7CitleHRlcm4gdm9pZCBhZHhfd3JpdGVsKHVuc2lnbmVkIGludCBiLCB1bnNpZ25lZCBsb25nIGFkZHIpOworCitleHRlcm4gdm9pZCAqIGFkeF9pb3JlbWFwKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUpOworZXh0ZXJuIHZvaWQgYWR4X2lvdW5tYXAodm9pZCAqYWRkcik7CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIGFkeF9pc2FfcG9ydDJhZGRyKHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKKworZXh0ZXJuIHZvaWQgc2V0dXBfYWR4KHZvaWQpOworZXh0ZXJuIHZvaWQgaW5pdF9hZHhfSVJRKHZvaWQpOworCisjaWZkZWYgX19XQU5UX0lPX0RFRgorCisjZGVmaW5lIF9faW5iCQlhZHhfaW5iCisjZGVmaW5lIF9faW53CQlhZHhfaW53CisjZGVmaW5lIF9faW5sCQlhZHhfaW5sCisjZGVmaW5lIF9fb3V0YgkJYWR4X291dGIKKyNkZWZpbmUgX19vdXR3CQlhZHhfb3V0dworI2RlZmluZSBfX291dGwJCWFkeF9vdXRsCisKKyNkZWZpbmUgX19pbmJfcAkJYWR4X2luYl9wCisjZGVmaW5lIF9faW53X3AJCWFkeF9pbncKKyNkZWZpbmUgX19pbmxfcAkJYWR4X2lubAorI2RlZmluZSBfX291dGJfcAlhZHhfb3V0Yl9wCisjZGVmaW5lIF9fb3V0d19wCWFkeF9vdXR3CisjZGVmaW5lIF9fb3V0bF9wCWFkeF9vdXRsCisKKyNkZWZpbmUgX19pbnNiCQlhZHhfaW5zYgorI2RlZmluZSBfX2luc3cJCWFkeF9pbnN3CisjZGVmaW5lIF9faW5zbAkJYWR4X2luc2wKKyNkZWZpbmUgX19vdXRzYgkJYWR4X291dHNiCisjZGVmaW5lIF9fb3V0c3cJCWFkeF9vdXRzdworI2RlZmluZSBfX291dHNsCQlhZHhfb3V0c2wKKworI2RlZmluZSBfX3JlYWRiCQlhZHhfcmVhZGIKKyNkZWZpbmUgX19yZWFkdwkJYWR4X3JlYWR3CisjZGVmaW5lIF9fcmVhZGwJCWFkeF9yZWFkbAorI2RlZmluZSBfX3dyaXRlYglhZHhfd3JpdGViCisjZGVmaW5lIF9fd3JpdGV3CWFkeF93cml0ZXcKKyNkZWZpbmUgX193cml0ZWwJYWR4X3dyaXRlbAorCisjZGVmaW5lIF9faXNhX3BvcnQyYWRkcglhZHhfaXNhX3BvcnQyYWRkcgorI2RlZmluZSBfX2lvcmVtYXAJYWR4X2lvcmVtYXAKKyNkZWZpbmUgX19pb3VubWFwCWFkeF9pb3VubWFwCisKKyNlbmRpZgorCisjZW5kaWYgLyogX0FTTV9TSF9JT19BQU5ERF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9hdG9taWMuaCBiL2luY2x1ZGUvYXNtLXNoL2F0b21pYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjNGY4MDVkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvYXRvbWljLmgKQEAgLTAsMCArMSwxMTQgQEAKKyNpZm5kZWYgX19BU01fU0hfQVRPTUlDX0gKKyNkZWZpbmUgX19BU01fU0hfQVRPTUlDX0gKKworLyoKKyAqIEF0b21pYyBvcGVyYXRpb25zIHRoYXQgQyBjYW4ndCBndWFyYW50ZWUgdXMuICBVc2VmdWwgZm9yCisgKiByZXNvdXJjZSBjb3VudGluZyBldGMuLgorICoKKyAqLworCit0eXBlZGVmIHN0cnVjdCB7IHZvbGF0aWxlIGludCBjb3VudGVyOyB9IGF0b21pY190OworCisjZGVmaW5lIEFUT01JQ19JTklUKGkpCSggKGF0b21pY190KSB7IChpKSB9ICkKKworI2RlZmluZSBhdG9taWNfcmVhZCh2KQkJKCh2KS0+Y291bnRlcikKKyNkZWZpbmUgYXRvbWljX3NldCh2LGkpCQkoKHYpLT5jb3VudGVyID0gKGkpKQorCisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorCisvKgorICogVG8gZ2V0IHByb3BlciBicmFuY2ggcHJlZGljdGlvbiBmb3IgdGhlIG1haW4gbGluZSwgd2UgbXVzdCBicmFuY2gKKyAqIGZvcndhcmQgdG8gY29kZSBhdCB0aGUgZW5kIG9mIHRoaXMgb2JqZWN0J3MgLnRleHQgc2VjdGlvbiwgdGhlbgorICogYnJhbmNoIGJhY2sgdG8gcmVzdGFydCB0aGUgb3BlcmF0aW9uLgorICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgYXRvbWljX2FkZChpbnQgaSwgYXRvbWljX3QgKiB2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJKihsb25nICopdiArPSBpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBhdG9taWNfc3ViKGludCBpLCBhdG9taWNfdCAqdikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCSoobG9uZyAqKXYgLT0gaTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBhdG9taWNfYWRkX3JldHVybihpbnQgaSwgYXRvbWljX3QgKiB2KQoreworCXVuc2lnbmVkIGxvbmcgdGVtcCwgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJdGVtcCA9ICoobG9uZyAqKXY7CisJdGVtcCArPSBpOworCSoobG9uZyAqKXYgPSB0ZW1wOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCXJldHVybiB0ZW1wOworfQorCisjZGVmaW5lIGF0b21pY19hZGRfbmVnYXRpdmUoYSwgdikJKGF0b21pY19hZGRfcmV0dXJuKChhKSwgKHYpKSA8IDApCisKK3N0YXRpYyBfX2lubGluZV9fIGludCBhdG9taWNfc3ViX3JldHVybihpbnQgaSwgYXRvbWljX3QgKiB2KQoreworCXVuc2lnbmVkIGxvbmcgdGVtcCwgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJdGVtcCA9ICoobG9uZyAqKXY7CisJdGVtcCAtPSBpOworCSoobG9uZyAqKXYgPSB0ZW1wOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCXJldHVybiB0ZW1wOworfQorCisjZGVmaW5lIGF0b21pY19kZWNfcmV0dXJuKHYpIGF0b21pY19zdWJfcmV0dXJuKDEsKHYpKQorI2RlZmluZSBhdG9taWNfaW5jX3JldHVybih2KSBhdG9taWNfYWRkX3JldHVybigxLCh2KSkKKworLyoKKyAqIGF0b21pY19pbmNfYW5kX3Rlc3QgLSBpbmNyZW1lbnQgYW5kIHRlc3QKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqCisgKiBBdG9taWNhbGx5IGluY3JlbWVudHMgQHYgYnkgMQorICogYW5kIHJldHVybnMgdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIHplcm8sIG9yIGZhbHNlIGZvciBhbGwKKyAqIG90aGVyIGNhc2VzLgorICovCisjZGVmaW5lIGF0b21pY19pbmNfYW5kX3Rlc3QodikgKGF0b21pY19pbmNfcmV0dXJuKHYpID09IDApCisKKyNkZWZpbmUgYXRvbWljX3N1Yl9hbmRfdGVzdChpLHYpIChhdG9taWNfc3ViX3JldHVybigoaSksICh2KSkgPT0gMCkKKyNkZWZpbmUgYXRvbWljX2RlY19hbmRfdGVzdCh2KSAoYXRvbWljX3N1Yl9yZXR1cm4oMSwgKHYpKSA9PSAwKQorCisjZGVmaW5lIGF0b21pY19pbmModikgYXRvbWljX2FkZCgxLCh2KSkKKyNkZWZpbmUgYXRvbWljX2RlYyh2KSBhdG9taWNfc3ViKDEsKHYpKQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGF0b21pY19jbGVhcl9tYXNrKHVuc2lnbmVkIGludCBtYXNrLCBhdG9taWNfdCAqdikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCSoobG9uZyAqKXYgJj0gfm1hc2s7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGF0b21pY19zZXRfbWFzayh1bnNpZ25lZCBpbnQgbWFzaywgYXRvbWljX3QgKnYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkqKGxvbmcgKil2IHw9IG1hc2s7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCisvKiBBdG9taWMgb3BlcmF0aW9ucyBhcmUgYWxyZWFkeSBzZXJpYWxpemluZyBvbiBTSCAqLworI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfZGVjKCkJYmFycmllcigpCisjZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2RlYygpCWJhcnJpZXIoKQorI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfaW5jKCkJYmFycmllcigpCisjZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpCWJhcnJpZXIoKQorCisjZW5kaWYgLyogX19BU01fU0hfQVRPTUlDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2JpZ3N1ci9iaWdzdXIuaCBiL2luY2x1ZGUvYXNtLXNoL2JpZ3N1ci9iaWdzdXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjcyNDVmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvYmlnc3VyL2JpZ3N1ci5oCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKgorICogSGl0YWNoaSBCaWcgU3VyIEV2YWwgQm9hcmQgc3VwcG9ydAorICoKKyAqIER1c3RpbiBNY0ludGlyZSAoZHVzdGluQHNlbnNvcmlhLmNvbSkKKyAqCisgKiBNYXkgYmUgY29waWVkIG9yIG1vZGlmaWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIGxpbnV4L0NPUFlJTkcgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgKgorICogRGVyaXZlZCBmcm9tIEhpdGFjaGkgU0g3NzUxIHJlZmVyZW5jZSBtYW51YWwKKyAqIAorICovCisKKyNpZm5kZWYgX0FTTV9CSUdTVVJfSF8KKyNkZWZpbmUgX0FTTV9CSUdTVVJfSF8KKworI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vaGQ2NDQ2NS9oZDY0NDY1Lmg+CisKKy8qIDc3NTEgSW50ZXJuYWwgSVJRJ3MgdXNlZCBieSBleHRlcm5hbCBDUExEIGNvbnRyb2xsZXIgKi8KKyNkZWZpbmUgQklHU1VSX0lSUV9MT1cJMAorI2RlZmluZSBCSUdTVVJfSVJRX05VTSAgMTQgICAgICAgICAvKiBFeHRlcm5hbCBDUExEIGxldmVsIDEgSVJRcyAqLworI2RlZmluZSBCSUdTVVJfSVJRX0hJR0ggKEJJR1NVUl9JUlFfTE9XICsgQklHU1VSX0lSUV9OVU0pCisjZGVmaW5lIEJJR1NVUl8yTkRMVkxfSVJRX0xPVyAgIChIRDY0NDY1X0lSUV9CQVNFK0hENjQ0NjVfSVJRX05VTSkgIAorI2RlZmluZSBCSUdTVVJfMk5ETFZMX0lSUV9OVU0gICAzMiAvKiBMZXZlbCAyIElSUXMgPSA0IHJlZ3MgKiA4IGJpdHMgKi8KKyNkZWZpbmUgQklHU1VSXzJORExWTF9JUlFfSElHSCAgKEJJR1NVUl8yTkRMVkxfSVJRX0xPVyArIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJJR1NVUl8yTkRMVkxfSVJRX05VTSkKKworLyogUENJIGludGVycnVwdCBiYXNlIG51bWJlciAoQV9JTlRBLUFfSU5URCkgKi8KKyNkZWZpbmUgQklHU1VSX1NINzc1MV9QQ0lfSVJRX0JBU0UgIChCSUdTVVJfMk5ETFZMX0lSUV9MT1crMTApICAKKworLyogQ1BMRCByZWdpc3RlcnMgYW5kIGV4dGVybmFsIGNoaXAgYWRkcmVzc2VzICovCisjZGVmaW5lIEJJR1NVUl9IRDY0NDY0X0FERFIJMHhCMjAwMDAwMAorI2RlZmluZSBCSUdTVVJfREdEUgkweEIxRkZGRTAwCisjZGVmaW5lIEJJR1NVUl9CSURSCTB4QjFGRkZEMDAKKyNkZWZpbmUgQklHU1VSX0NTTFIJMHhCMUZGRkMwMAorI2RlZmluZSBCSUdTVVJfU1cxUgkweEIxRkZGQjAwCisjZGVmaW5lIEJJR1NVUl9EQkdSCTB4QjFGRkZBMDAKKyNkZWZpbmUgQklHU1VSX0JEVFIJMHhCMUZGRjkwMAorI2RlZmluZSBCSUdTVVJfQkRSUgkweEIxRkZGODAwCisjZGVmaW5lIEJJR1NVUl9QUFIxCTB4QjFGRkY3MDAKKyNkZWZpbmUgQklHU1VSX1BQUjIJMHhCMUZGRjYwMAorI2RlZmluZSBCSUdTVVJfSURFMgkweEIxRkZGNTAwCisjZGVmaW5lIEJJR1NVUl9JREUzCTB4QjFGRkY0MDAKKyNkZWZpbmUgQklHU1VSX1NQQ1IJMHhCMUZGRjMwMAorI2RlZmluZSBCSUdTVVJfRVRIUgkweEIxRkUwMDAwCisjZGVmaW5lIEJJR1NVUl9QUERSCTB4QjFGREZGMDAKKyNkZWZpbmUgQklHU1VSX0lDVEwJMHhCMUZERkUwMAorI2RlZmluZSBCSUdTVVJfSUNNRAkweEIxRkRGRDAwCisjZGVmaW5lIEJJR1NVUl9ETUEwCTB4QjFGREZDMDAKKyNkZWZpbmUgQklHU1VSX0RNQTEJMHhCMUZERkIwMAorI2RlZmluZSBCSUdTVVJfSVJRMAkweEIxRkRGQTAwCisjZGVmaW5lIEJJR1NVUl9JUlExCTB4QjFGREY5MDAKKyNkZWZpbmUgQklHU1VSX0lSUTIJMHhCMUZERjgwMAorI2RlZmluZSBCSUdTVVJfSVJRMwkweEIxRkRGNzAwCisjZGVmaW5lIEJJR1NVUl9JTVIwCTB4QjFGREY2MDAKKyNkZWZpbmUgQklHU1VSX0lNUjEJMHhCMUZERjUwMAorI2RlZmluZSBCSUdTVVJfSU1SMgkweEIxRkRGNDAwCisjZGVmaW5lIEJJR1NVUl9JTVIzCTB4QjFGREYzMDAKKyNkZWZpbmUgQklHU1VSX0lSTE1SMAkweEIxRkRGMjAwCisjZGVmaW5lIEJJR1NVUl9JUkxNUjEJMHhCMUZERjEwMAorI2RlZmluZSBCSUdTVVJfVjMyMFVTQ19BRERSICAweEIxMDAwMDAwCisjZGVmaW5lIEJJR1NVUl9IRDY0NDY1X0FERFIgIDB4QjAwMDAwMDAKKyNkZWZpbmUgQklHU1VSX0lOVEVSTkFMX0JBU0UgMHhCMDAwMDAwMAorCisvKiBTTUMgZXRoZXJuZXQgY2FyZCBwYXJhbWV0ZXJzICovCisjZGVmaW5lIEJJR1NVUl9FVEhFUl9JT1BPUlQJCTB4MjIwCisKKy8qIElERSByZWdpc3RlciBwYXJhbXRlcnMgKi8KKyNkZWZpbmUgQklHU1VSX0lERUNNRF9JT1BPUlQJMHgxZjAKKyNkZWZpbmUgQklHU1VSX0lERUNUTF9JT1BPUlQJMHgxZjgKKworLyogTEVEIGJpdCBwb3NpdGlvbiBpbiBCSUdTVVJfQ1NMUiAqLworI2RlZmluZSBCSUdTVVJfTEVEICAoMTw8NCkKKworLyogUENJOiBkZWZhdWx0IExPQ0FMIG1lbW9yeSB3aW5kb3cgc2l6ZXMgKHNlZW4gZnJvbSBQQ0kgYnVzKSAqLworI2RlZmluZSBCSUdTVVJfTFNSMF9TSVpFICAgICg2NCooMTw8MjApKSAvLzY0TUIKKyNkZWZpbmUgQklHU1VSX0xTUjFfU0laRSAgICAoNjQqKDE8PDIwKSkgLy82NE1CCisKKyNlbmRpZiAvKiBfQVNNX0JJR1NVUl9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvYmlnc3VyL2lvLmggYi9pbmNsdWRlL2FzbS1zaC9iaWdzdXIvaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Mzk3MzVlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvYmlnc3VyL2lvLmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLXNoL2lvX2JpZ3N1ci5oCisgKgorICogQnkgRHVzdGluIE1jSW50aXJlIChkdXN0aW5Ac2Vuc29yaWEuY29tKSAoYykyMDAxCisgKiBEZXJpdmVkIGZyb20gaW9faGQ2NDQ2NS5oLCB3aGljaCBib3JlIHRoZSBtZXNzYWdlOgorICogQnkgR3JlZyBCYW5rcyA8Z2JhbmtzQHBvY2tldHBlbmd1aW5zLmNvbT4KKyAqIChjKSAyMDAwIFBvY2tldFBlbmd1aW5zIEluYy4gCisgKiBhbmQgZnJvbSBpb19oZDY0NDYxLmgsIHdoaWNoIGJvcmUgdGhlIG1lc3NhZ2U6CisgKiBDb3B5cmlnaHQgMjAwMCBTdHVhcnQgTWVuZWZ5IChzdHVhcnQubWVuZWZ5QHN0LmNvbSkKKyAqCisgKiBNYXkgYmUgY29waWVkIG9yIG1vZGlmaWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIGxpbnV4L0NPUFlJTkcgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgKgorICogSU8gZnVuY3Rpb25zIGZvciBhIEhpdGFjaGkgQmlnIFN1ciBFdmFsdWF0aW9uIEJvYXJkLgorICovCisKKyNpZm5kZWYgX0FTTV9TSF9JT19CSUdTVVJfSAorI2RlZmluZSBfQVNNX1NIX0lPX0JJR1NVUl9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitleHRlcm4gdW5zaWduZWQgbG9uZyBiaWdzdXJfaXNhX3BvcnQyYWRkcih1bnNpZ25lZCBsb25nIG9mZnNldCk7CitleHRlcm4gaW50IGJpZ3N1cl9pcnFfZGVtdXgoaW50IGlycSk7CisvKiBQcm92aXNpb24gZm9yIGdlbmVyaWMgc2Vjb25kYXJ5IGRlbXV4IHN0ZXAgLS0gdXNlZCBieSBQQ01DSUEgY29kZSAqLworZXh0ZXJuIHZvaWQgYmlnc3VyX3JlZ2lzdGVyX2lycV9kZW11eChpbnQgaXJxLAorCQlpbnQgKCpkZW11eCkoaW50IGlycSwgdm9pZCAqZGV2KSwgdm9pZCAqZGV2KTsKK2V4dGVybiB2b2lkIGJpZ3N1cl91bnJlZ2lzdGVyX2lycV9kZW11eChpbnQgaXJxKTsKKy8qIFNldCB0aGlzIHZhcmlhYmxlIHRvIDEgdG8gc2VlIHBvcnQgdHJhZmZpYyAqLworZXh0ZXJuIGludCBiaWdzdXJfaW9fZGVidWc7CisvKiBNYXAgYSByYW5nZSBvZiBwb3J0cyB0byBhIHJhbmdlIG9mIGtlcm5lbCB2aXJ0dWFsIG1lbW9yeS4gKi8KK2V4dGVybiB2b2lkIGJpZ3N1cl9wb3J0X21hcCh1MzIgYmFzZXBvcnQsIHUzMiBucG9ydHMsIHUzMiBhZGRyLCB1OCBzaGlmdCk7CitleHRlcm4gdm9pZCBiaWdzdXJfcG9ydF91bm1hcCh1MzIgYmFzZXBvcnQsIHUzMiBucG9ydHMpOworCisjZW5kaWYgLyogX0FTTV9TSF9JT19CSUdTVVJfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9iaWdzdXIvc2VyaWFsLmggYi9pbmNsdWRlL2FzbS1zaC9iaWdzdXIvc2VyaWFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQwZjEyMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL2JpZ3N1ci9zZXJpYWwuaApAQCAtMCwwICsxLDI3IEBACisvKgorICogaW5jbHVkZS9hc20tc2gvc2VyaWFsLWJpZ3N1ci5oCisgKgorICogQ29uZmlndXJhdGlvbiBkZXRhaWxzIGZvciBCaWcgU3VyIDE2NTUwIGJhc2VkIHNlcmlhbCBwb3J0cyAKKyAqIGkuZS4gSEQ2NDQ2NSwgUENNQ0lBLCBldGMuCisgKi8KKworI2lmbmRlZiBfQVNNX1NFUklBTF9CSUdTVVJfSAorI2RlZmluZSBfQVNNX1NFUklBTF9CSUdTVVJfSAorI2luY2x1ZGUgPGFzbS9oZDY0NDY1Lmg+CisKKyNkZWZpbmUgQkFTRV9CQVVEICgzMzc5MjAwIC8gMTYpCisKKyNkZWZpbmUgU1REX0NPTV9GTEFHUyAoQVNZTkNfQk9PVF9BVVRPQ09ORiB8IEFTWU5DX1NLSVBfVEVTVCkKKworCisjZGVmaW5lIFNURF9TRVJJQUxfUE9SVF9ERUZOUyAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIC8qIFVBUlQgQ0xLICAgUE9SVCBJUlEgICAgIEZMQUdTICAgICAgICAqLyAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHsgMCwgQkFTRV9CQVVELCAweDNGOCwgSEQ2NDQ2NV9JUlFfVUFSVCwgU1REX0NPTV9GTEFHUyB9IC8qIHR0eVMwICovIAorCisKKyNkZWZpbmUgU0VSSUFMX1BPUlRfREZOUyBTVERfU0VSSUFMX1BPUlRfREVGTlMKKworLyogWFhYOiBUaGlzIHNob3VsZCBiZSBtb3ZlZCBpbm8gaXJxLmggKi8KKyNkZWZpbmUgaXJxX2Nhbm5vbmljYWxpemUoeCkgKHgpCisKKyNlbmRpZiAvKiBfQVNNX1NFUklBTF9CSUdTVVJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvYml0b3BzLmggYi9pbmNsdWRlL2FzbS1zaC9iaXRvcHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTYzZDFmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvYml0b3BzLmgKQEAgLTAsMCArMSw0NzYgQEAKKyNpZm5kZWYgX19BU01fU0hfQklUT1BTX0gKKyNkZWZpbmUgX19BU01fU0hfQklUT1BTX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisvKiBGb3IgX19zd2FiMzIgKi8KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgc2V0X2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQoreworCWludAltYXNrOworCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqYSA9IGFkZHI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWEgKz0gbnIgPj4gNTsKKwltYXNrID0gMSA8PCAobnIgJiAweDFmKTsKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJKmEgfD0gbWFzazsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19zZXRfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCit7CisJaW50CW1hc2s7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50ICphID0gYWRkcjsKKworCWEgKz0gbnIgPj4gNTsKKwltYXNrID0gMSA8PCAobnIgJiAweDFmKTsKKwkqYSB8PSBtYXNrOworfQorCisvKgorICogY2xlYXJfYml0KCkgZG9lc24ndCBwcm92aWRlIGFueSBiYXJyaWVyIGZvciB0aGUgY29tcGlsZXIuCisgKi8KKyNkZWZpbmUgc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCkJYmFycmllcigpCisjZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCkJYmFycmllcigpCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGNsZWFyX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQoreworCWludAltYXNrOworCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqYSA9IGFkZHI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWEgKz0gbnIgPj4gNTsKKwltYXNrID0gMSA8PCAobnIgJiAweDFmKTsKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJKmEgJj0gfm1hc2s7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fY2xlYXJfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCit7CisJaW50CW1hc2s7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50ICphID0gYWRkcjsKKworCWEgKz0gbnIgPj4gNTsKKwltYXNrID0gMSA8PCAobnIgJiAweDFmKTsKKwkqYSAmPSB+bWFzazsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBjaGFuZ2VfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCit7CisJaW50CW1hc2s7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50ICphID0gYWRkcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJYSArPSBuciA+PiA1OworCW1hc2sgPSAxIDw8IChuciAmIDB4MWYpOworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkqYSBePSBtYXNrOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX2NoYW5nZV9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKK3sKKwlpbnQJbWFzazsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKmEgPSBhZGRyOworCisJYSArPSBuciA+PiA1OworCW1hc2sgPSAxIDw8IChuciAmIDB4MWYpOworCSphIF49IG1hc2s7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCB0ZXN0X2FuZF9zZXRfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCit7CisJaW50CW1hc2ssIHJldHZhbDsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKmEgPSBhZGRyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlhICs9IG5yID4+IDU7CisJbWFzayA9IDEgPDwgKG5yICYgMHgxZik7CisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXJldHZhbCA9IChtYXNrICYgKmEpICE9IDA7CisJKmEgfD0gbWFzazsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX190ZXN0X2FuZF9zZXRfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCit7CisJaW50CW1hc2ssIHJldHZhbDsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKmEgPSBhZGRyOworCisJYSArPSBuciA+PiA1OworCW1hc2sgPSAxIDw8IChuciAmIDB4MWYpOworCXJldHZhbCA9IChtYXNrICYgKmEpICE9IDA7CisJKmEgfD0gbWFzazsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCB0ZXN0X2FuZF9jbGVhcl9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKK3sKKwlpbnQJbWFzaywgcmV0dmFsOworCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqYSA9IGFkZHI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWEgKz0gbnIgPj4gNTsKKwltYXNrID0gMSA8PCAobnIgJiAweDFmKTsKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJcmV0dmFsID0gKG1hc2sgJiAqYSkgIT0gMDsKKwkqYSAmPSB+bWFzazsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX190ZXN0X2FuZF9jbGVhcl9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKK3sKKwlpbnQJbWFzaywgcmV0dmFsOworCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqYSA9IGFkZHI7CisKKwlhICs9IG5yID4+IDU7CisJbWFzayA9IDEgPDwgKG5yICYgMHgxZik7CisJcmV0dmFsID0gKG1hc2sgJiAqYSkgIT0gMDsKKwkqYSAmPSB+bWFzazsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCB0ZXN0X2FuZF9jaGFuZ2VfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCit7CisJaW50CW1hc2ssIHJldHZhbDsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKmEgPSBhZGRyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlhICs9IG5yID4+IDU7CisJbWFzayA9IDEgPDwgKG5yICYgMHgxZik7CisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXJldHZhbCA9IChtYXNrICYgKmEpICE9IDA7CisJKmEgXj0gbWFzazsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX190ZXN0X2FuZF9jaGFuZ2VfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCit7CisJaW50CW1hc2ssIHJldHZhbDsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKmEgPSBhZGRyOworCisJYSArPSBuciA+PiA1OworCW1hc2sgPSAxIDw8IChuciAmIDB4MWYpOworCXJldHZhbCA9IChtYXNrICYgKmEpICE9IDA7CisJKmEgXj0gbWFzazsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCB0ZXN0X2JpdChpbnQgbnIsIGNvbnN0IHZvbGF0aWxlIHZvaWQgKmFkZHIpCit7CisJcmV0dXJuIDFVTCAmICgoKGNvbnN0IHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSBhZGRyKVtuciA+PiA1XSA+PiAobnIgJiAzMSkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGZmeih1bnNpZ25lZCBsb25nIHdvcmQpCit7CisJdW5zaWduZWQgbG9uZyByZXN1bHQ7CisKKwlfX2FzbV9fKCIxOlxuXHQiCisJCSJzaGxyCSUxXG5cdCIKKwkJImJ0L3MJMWJcblx0IgorCQkiIGFkZAkjMSwgJTAiCisJCTogIj1yIiAocmVzdWx0KSwgIj1yIiAod29yZCkKKwkJOiAiMCIgKH4wTCksICIxIiAod29yZCkKKwkJOiAidCIpOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogX19mZnMgLSBmaW5kIGZpcnN0IGJpdCBpbiB3b3JkLgorICogQHdvcmQ6IFRoZSB3b3JkIHRvIHNlYXJjaAorICoKKyAqIFVuZGVmaW5lZCBpZiBubyBiaXQgZXhpc3RzLCBzbyBjb2RlIHNob3VsZCBjaGVjayBhZ2FpbnN0IDAgZmlyc3QuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgX19mZnModW5zaWduZWQgbG9uZyB3b3JkKQoreworCXVuc2lnbmVkIGxvbmcgcmVzdWx0OworCisJX19hc21fXygiMTpcblx0IgorCQkic2hscgklMVxuXHQiCisJCSJiZi9zCTFiXG5cdCIKKwkJIiBhZGQJIzEsICUwIgorCQk6ICI9ciIgKHJlc3VsdCksICI9ciIgKHdvcmQpCisJCTogIjAiICh+MEwpLCAiMSIgKHdvcmQpCisJCTogInQiKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKioKKyAqIGZpbmRfbmV4dF9iaXQgLSBmaW5kIHRoZSBuZXh0IHNldCBiaXQgaW4gYSBtZW1vcnkgcmVnaW9uCisgKiBAYWRkcjogVGhlIGFkZHJlc3MgdG8gYmFzZSB0aGUgc2VhcmNoIG9uCisgKiBAb2Zmc2V0OiBUaGUgYml0bnVtYmVyIHRvIHN0YXJ0IHNlYXJjaGluZyBhdAorICogQHNpemU6IFRoZSBtYXhpbXVtIHNpemUgdG8gc2VhcmNoCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgZmluZF9uZXh0X2JpdChjb25zdCB1bnNpZ25lZCBsb25nICphZGRyLAorCXVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpCit7CisJdW5zaWduZWQgaW50ICpwID0gKCh1bnNpZ25lZCBpbnQgKikgYWRkcikgKyAob2Zmc2V0ID4+IDUpOworCXVuc2lnbmVkIGludCByZXN1bHQgPSBvZmZzZXQgJiB+MzFVTDsKKwl1bnNpZ25lZCBpbnQgdG1wOworCisJaWYgKG9mZnNldCA+PSBzaXplKQorCQlyZXR1cm4gc2l6ZTsKKwlzaXplIC09IHJlc3VsdDsKKwlvZmZzZXQgJj0gMzFVTDsKKwlpZiAob2Zmc2V0KSB7CisJCXRtcCA9ICpwKys7CisJCXRtcCAmPSB+MFVMIDw8IG9mZnNldDsKKwkJaWYgKHNpemUgPCAzMikKKwkJCWdvdG8gZm91bmRfZmlyc3Q7CisJCWlmICh0bXApCisJCQlnb3RvIGZvdW5kX21pZGRsZTsKKwkJc2l6ZSAtPSAzMjsKKwkJcmVzdWx0ICs9IDMyOworCX0KKwl3aGlsZSAoc2l6ZSA+PSAzMikgeworCQlpZiAoKHRtcCA9ICpwKyspICE9IDApCisJCQlnb3RvIGZvdW5kX21pZGRsZTsKKwkJcmVzdWx0ICs9IDMyOworCQlzaXplIC09IDMyOworCX0KKwlpZiAoIXNpemUpCisJCXJldHVybiByZXN1bHQ7CisJdG1wID0gKnA7CisKK2ZvdW5kX2ZpcnN0OgorCXRtcCAmPSB+MFVMID4+ICgzMiAtIHNpemUpOworCWlmICh0bXAgPT0gMFVMKSAgICAgICAgLyogQXJlIGFueSBiaXRzIHNldD8gKi8KKwkJcmV0dXJuIHJlc3VsdCArIHNpemU7IC8qIE5vcGUuICovCitmb3VuZF9taWRkbGU6CisJcmV0dXJuIHJlc3VsdCArIF9fZmZzKHRtcCk7Cit9CisKKy8qKgorICogZmluZF9maXJzdF9iaXQgLSBmaW5kIHRoZSBmaXJzdCBzZXQgYml0IGluIGEgbWVtb3J5IHJlZ2lvbgorICogQGFkZHI6IFRoZSBhZGRyZXNzIHRvIHN0YXJ0IHRoZSBzZWFyY2ggYXQKKyAqIEBzaXplOiBUaGUgbWF4aW11bSBzaXplIHRvIHNlYXJjaAorICoKKyAqIFJldHVybnMgdGhlIGJpdC1udW1iZXIgb2YgdGhlIGZpcnN0IHNldCBiaXQsIG5vdCB0aGUgbnVtYmVyIG9mIHRoZSBieXRlCisgKiBjb250YWluaW5nIGEgYml0LgorICovCisjZGVmaW5lIGZpbmRfZmlyc3RfYml0KGFkZHIsIHNpemUpIFwKKwlmaW5kX25leHRfYml0KChhZGRyKSwgKHNpemUpLCAwKQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgZmluZF9uZXh0X3plcm9fYml0KGNvbnN0IHVuc2lnbmVkIGxvbmcgKmFkZHIsIGludCBzaXplLCBpbnQgb2Zmc2V0KQoreworCWNvbnN0IHVuc2lnbmVkIGxvbmcgKnAgPSAoKHVuc2lnbmVkIGxvbmcgKikgYWRkcikgKyAob2Zmc2V0ID4+IDUpOworCXVuc2lnbmVkIGxvbmcgcmVzdWx0ID0gb2Zmc2V0ICYgfjMxVUw7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlpZiAob2Zmc2V0ID49IHNpemUpCisJCXJldHVybiBzaXplOworCXNpemUgLT0gcmVzdWx0OworCW9mZnNldCAmPSAzMVVMOworCWlmIChvZmZzZXQpIHsKKwkJdG1wID0gKihwKyspOworCQl0bXAgfD0gfjBVTCA+PiAoMzItb2Zmc2V0KTsKKwkJaWYgKHNpemUgPCAzMikKKwkJCWdvdG8gZm91bmRfZmlyc3Q7CisJCWlmICh+dG1wKQorCQkJZ290byBmb3VuZF9taWRkbGU7CisJCXNpemUgLT0gMzI7CisJCXJlc3VsdCArPSAzMjsKKwl9CisJd2hpbGUgKHNpemUgJiB+MzFVTCkgeworCQlpZiAofih0bXAgPSAqKHArKykpKQorCQkJZ290byBmb3VuZF9taWRkbGU7CisJCXJlc3VsdCArPSAzMjsKKwkJc2l6ZSAtPSAzMjsKKwl9CisJaWYgKCFzaXplKQorCQlyZXR1cm4gcmVzdWx0OworCXRtcCA9ICpwOworCitmb3VuZF9maXJzdDoKKwl0bXAgfD0gfjBVTCA8PCBzaXplOworZm91bmRfbWlkZGxlOgorCXJldHVybiByZXN1bHQgKyBmZnoodG1wKTsKK30KKworI2RlZmluZSBmaW5kX2ZpcnN0X3plcm9fYml0KGFkZHIsIHNpemUpIFwKKyAgICAgICAgZmluZF9uZXh0X3plcm9fYml0KChhZGRyKSwgKHNpemUpLCAwKQorCisvKgorICogZmZzOiBmaW5kIGZpcnN0IGJpdCBzZXQuIFRoaXMgaXMgZGVmaW5lZCB0aGUgc2FtZSB3YXkgYXMKKyAqIHRoZSBsaWJjIGFuZCBjb21waWxlciBidWlsdGluIGZmcyByb3V0aW5lcywgdGhlcmVmb3JlCisgKiBkaWZmZXJzIGluIHNwaXJpdCBmcm9tIHRoZSBhYm92ZSBmZnogKG1hbiBmZnMpLgorICovCisKKyNkZWZpbmUgZmZzKHgpIGdlbmVyaWNfZmZzKHgpCisKKy8qCisgKiBod2VpZ2h0TjogcmV0dXJucyB0aGUgaGFtbWluZyB3ZWlnaHQgKGkuZS4gdGhlIG51bWJlcgorICogb2YgYml0cyBzZXQpIG9mIGEgTi1iaXQgd29yZAorICovCisKKyNkZWZpbmUgaHdlaWdodDMyKHgpIGdlbmVyaWNfaHdlaWdodDMyKHgpCisjZGVmaW5lIGh3ZWlnaHQxNih4KSBnZW5lcmljX2h3ZWlnaHQxNih4KQorI2RlZmluZSBod2VpZ2h0OCh4KSBnZW5lcmljX2h3ZWlnaHQ4KHgpCisKKy8qCisgKiBFdmVyeSBhcmNoaXRlY3R1cmUgbXVzdCBkZWZpbmUgdGhpcyBmdW5jdGlvbi4gSXQncyB0aGUgZmFzdGVzdAorICogd2F5IG9mIHNlYXJjaGluZyBhIDE0MC1iaXQgYml0bWFwIHdoZXJlIHRoZSBmaXJzdCAxMDAgYml0cyBhcmUKKyAqIHVubGlrZWx5IHRvIGJlIHNldC4gSXQncyBndWFyYW50ZWVkIHRoYXQgYXQgbGVhc3Qgb25lIG9mIHRoZSAxNDAKKyAqIGJpdHMgaXMgY2xlYXJlZC4KKyAqLworCitzdGF0aWMgaW5saW5lIGludCBzY2hlZF9maW5kX2ZpcnN0X2JpdChjb25zdCB1bnNpZ25lZCBsb25nICpiKQoreworCWlmICh1bmxpa2VseShiWzBdKSkKKwkJcmV0dXJuIF9fZmZzKGJbMF0pOworCWlmICh1bmxpa2VseShiWzFdKSkKKwkJcmV0dXJuIF9fZmZzKGJbMV0pICsgMzI7CisJaWYgKHVubGlrZWx5KGJbMl0pKQorCQlyZXR1cm4gX19mZnMoYlsyXSkgKyA2NDsKKwlpZiAoYlszXSkKKwkJcmV0dXJuIF9fZmZzKGJbM10pICsgOTY7CisJcmV0dXJuIF9fZmZzKGJbNF0pICsgMTI4OworfQorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgZXh0Ml9zZXRfYml0KG5yLCBhZGRyKSB0ZXN0X2FuZF9zZXRfYml0KChuciksIChhZGRyKSkKKyNkZWZpbmUgZXh0Ml9jbGVhcl9iaXQobnIsIGFkZHIpIHRlc3RfYW5kX2NsZWFyX2JpdCgobnIpLCAoYWRkcikpCisjZGVmaW5lIGV4dDJfdGVzdF9iaXQobnIsIGFkZHIpIHRlc3RfYml0KChuciksIChhZGRyKSkKKyNkZWZpbmUgZXh0Ml9maW5kX2ZpcnN0X3plcm9fYml0KGFkZHIsIHNpemUpIGZpbmRfZmlyc3RfemVyb19iaXQoKGFkZHIpLCAoc2l6ZSkpCisjZGVmaW5lIGV4dDJfZmluZF9uZXh0X3plcm9fYml0KGFkZHIsIHNpemUsIG9mZnNldCkgXAorICAgICAgICAgICAgICAgIGZpbmRfbmV4dF96ZXJvX2JpdCgodW5zaWduZWQgbG9uZyAqKShhZGRyKSwgKHNpemUpLCAob2Zmc2V0KSkKKyNlbHNlCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgZXh0Ml9zZXRfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCit7CisJaW50CQltYXNrLCByZXR2YWw7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKwl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyCSpBRERSID0gKHVuc2lnbmVkIGNoYXIgKikgYWRkcjsKKworCUFERFIgKz0gbnIgPj4gMzsKKwltYXNrID0gMSA8PCAobnIgJiAweDA3KTsKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJcmV0dmFsID0gKG1hc2sgJiAqQUREUikgIT0gMDsKKwkqQUREUiB8PSBtYXNrOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgZXh0Ml9jbGVhcl9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKK3sKKwlpbnQJCW1hc2ssIHJldHZhbDsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIJKkFERFIgPSAodW5zaWduZWQgY2hhciAqKSBhZGRyOworCisJQUREUiArPSBuciA+PiAzOworCW1hc2sgPSAxIDw8IChuciAmIDB4MDcpOworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlyZXR2YWwgPSAobWFzayAmICpBRERSKSAhPSAwOworCSpBRERSICY9IH5tYXNrOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgZXh0Ml90ZXN0X2JpdChpbnQgbnIsIGNvbnN0IHZvbGF0aWxlIHZvaWQgKiBhZGRyKQoreworCWludAkJCW1hc2s7CisJY29uc3Qgdm9sYXRpbGUgdW5zaWduZWQgY2hhcgkqQUREUiA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopIGFkZHI7CisKKwlBRERSICs9IG5yID4+IDM7CisJbWFzayA9IDEgPDwgKG5yICYgMHgwNyk7CisJcmV0dXJuICgobWFzayAmICpBRERSKSAhPSAwKTsKK30KKworI2RlZmluZSBleHQyX2ZpbmRfZmlyc3RfemVyb19iaXQoYWRkciwgc2l6ZSkgXAorICAgICAgICBleHQyX2ZpbmRfbmV4dF96ZXJvX2JpdCgoYWRkciksIChzaXplKSwgMCkKKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBleHQyX2ZpbmRfbmV4dF96ZXJvX2JpdCh2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQoreworCXVuc2lnbmVkIGxvbmcgKnAgPSAoKHVuc2lnbmVkIGxvbmcgKikgYWRkcikgKyAob2Zmc2V0ID4+IDUpOworCXVuc2lnbmVkIGxvbmcgcmVzdWx0ID0gb2Zmc2V0ICYgfjMxVUw7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlpZiAob2Zmc2V0ID49IHNpemUpCisJCXJldHVybiBzaXplOworCXNpemUgLT0gcmVzdWx0OworCW9mZnNldCAmPSAzMVVMOworCWlmKG9mZnNldCkgeworCQkvKiBXZSBob2xkIHRoZSBsaXR0bGUgZW5kaWFuIHZhbHVlIGluIHRtcCwgYnV0IHRoZW4gdGhlCisJCSAqIHNoaWZ0IGlzIGlsbGVnYWwuIFNvIHdlIGNvdWxkIGtlZXAgYSBiaWcgZW5kaWFuIHZhbHVlCisJCSAqIGluIHRtcCwgbGlrZSB0aGlzOgorCQkgKgorCQkgKiB0bXAgPSBfX3N3YWIzMigqKHArKykpOworCQkgKiB0bXAgfD0gfjBVTCA+PiAoMzItb2Zmc2V0KTsKKwkJICoKKwkJICogYnV0IHRoaXMgd291bGQgZGVjcmVhc2UgcHJlZm9ybWFuY2UsIHNvIHdlIGNoYW5nZSB0aGUKKwkJICogc2hpZnQ6CisJCSAqLworCQl0bXAgPSAqKHArKyk7CisJCXRtcCB8PSBfX3N3YWIzMih+MFVMID4+ICgzMi1vZmZzZXQpKTsKKwkJaWYoc2l6ZSA8IDMyKQorCQkJZ290byBmb3VuZF9maXJzdDsKKwkJaWYofnRtcCkKKwkJCWdvdG8gZm91bmRfbWlkZGxlOworCQlzaXplIC09IDMyOworCQlyZXN1bHQgKz0gMzI7CisJfQorCXdoaWxlKHNpemUgJiB+MzFVTCkgeworCQlpZih+KHRtcCA9ICoocCsrKSkpCisJCQlnb3RvIGZvdW5kX21pZGRsZTsKKwkJcmVzdWx0ICs9IDMyOworCQlzaXplIC09IDMyOworCX0KKwlpZighc2l6ZSkKKwkJcmV0dXJuIHJlc3VsdDsKKwl0bXAgPSAqcDsKKworZm91bmRfZmlyc3Q6CisJLyogdG1wIGlzIGxpdHRsZSBlbmRpYW4sIHNvIHdlIHdvdWxkIGhhdmUgdG8gc3dhYiB0aGUgc2hpZnQsCisJICogc2VlIGFib3ZlLiBCdXQgdGhlbiB3ZSBoYXZlIHRvIHN3YWIgdG1wIGJlbG93IGZvciBmZnosIHNvCisJICogd2UgbWlnaHQgYXMgd2VsbCBkbyB0aGlzIGhlcmUuCisJICovCisJcmV0dXJuIHJlc3VsdCArIGZmeihfX3N3YWIzMih0bXApIHwgKH4wVUwgPDwgc2l6ZSkpOworZm91bmRfbWlkZGxlOgorCXJldHVybiByZXN1bHQgKyBmZnooX19zd2FiMzIodG1wKSk7Cit9CisjZW5kaWYKKworI2RlZmluZSBleHQyX3NldF9iaXRfYXRvbWljKGxvY2ssIG5yLCBhZGRyKQkJXAorCSh7CQkJCQkJXAorCQlpbnQgcmV0OwkJCQlcCisJCXNwaW5fbG9jayhsb2NrKTsJCQlcCisJCXJldCA9IGV4dDJfc2V0X2JpdCgobnIpLCAoYWRkcikpOwlcCisJCXNwaW5fdW5sb2NrKGxvY2spOwkJCVwKKwkJcmV0OwkJCQkJXAorCX0pCisKKyNkZWZpbmUgZXh0Ml9jbGVhcl9iaXRfYXRvbWljKGxvY2ssIG5yLCBhZGRyKQkJXAorCSh7CQkJCQkJXAorCQlpbnQgcmV0OwkJCQlcCisJCXNwaW5fbG9jayhsb2NrKTsJCQlcCisJCXJldCA9IGV4dDJfY2xlYXJfYml0KChuciksIChhZGRyKSk7CVwKKwkJc3Bpbl91bmxvY2sobG9jayk7CQkJXAorCQlyZXQ7CQkJCQlcCisJfSkKKworLyogQml0bWFwIGZ1bmN0aW9ucyBmb3IgdGhlIG1pbml4IGZpbGVzeXN0ZW0uICAqLworI2RlZmluZSBtaW5peF90ZXN0X2FuZF9zZXRfYml0KG5yLGFkZHIpIHRlc3RfYW5kX3NldF9iaXQobnIsYWRkcikKKyNkZWZpbmUgbWluaXhfc2V0X2JpdChucixhZGRyKSBzZXRfYml0KG5yLGFkZHIpCisjZGVmaW5lIG1pbml4X3Rlc3RfYW5kX2NsZWFyX2JpdChucixhZGRyKSB0ZXN0X2FuZF9jbGVhcl9iaXQobnIsYWRkcikKKyNkZWZpbmUgbWluaXhfdGVzdF9iaXQobnIsYWRkcikgdGVzdF9iaXQobnIsYWRkcikKKyNkZWZpbmUgbWluaXhfZmluZF9maXJzdF96ZXJvX2JpdChhZGRyLHNpemUpIGZpbmRfZmlyc3RfemVyb19iaXQoYWRkcixzaXplKQorCisvKgorICogZmxzOiBmaW5kIGxhc3QgYml0IHNldC4KKyAqLworCisjZGVmaW5lIGZscyh4KSBnZW5lcmljX2Zscyh4KQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX19BU01fU0hfQklUT1BTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2J1Zy5oIGIvaW5jbHVkZS9hc20tc2gvYnVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzAxNzIyMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL2J1Zy5oCkBAIC0wLDAgKzEsMTcgQEAKKyNpZm5kZWYgX19BU01fU0hfQlVHX0gKKyNkZWZpbmUgX19BU01fU0hfQlVHX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisvKgorICogVGVsbCB0aGUgdXNlciB0aGVyZSBpcyBzb21lIHByb2JsZW0uCisgKi8KKyNkZWZpbmUgQlVHKCkgZG8geyBcCisJcHJpbnRrKCJrZXJuZWwgQlVHIGF0ICVzOiVkIVxuIiwgX19GSUxFX18sIF9fTElORV9fKTsgXAorCSoodm9sYXRpbGUgaW50ICopMCA9IDA7IFwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgSEFWRV9BUkNIX0JVRworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2J1Zy5oPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2J1Z3MuaCBiL2luY2x1ZGUvYXNtLXNoL2J1Z3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmRlM2QwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvYnVncy5oCkBAIC0wLDAgKzEsNTAgQEAKKyNpZm5kZWYgX19BU01fU0hfQlVHU19ICisjZGVmaW5lIF9fQVNNX1NIX0JVR1NfSAorCisvKgorICogVGhpcyBpcyBpbmNsdWRlZCBieSBpbml0L21haW4uYyB0byBjaGVjayBmb3IgYXJjaGl0ZWN0dXJlLWRlcGVuZGVudCBidWdzLgorICoKKyAqIE5lZWRzOgorICoJdm9pZCBjaGVja19idWdzKHZvaWQpOworICovCisKKy8qCisgKiBJIGRvbid0IGtub3cgb2YgYW55IFN1cGVyLUggYnVncyB5ZXQuCisgKi8KKworI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKworc3RhdGljIHZvaWQgX19pbml0IGNoZWNrX2J1Z3Modm9pZCkKK3sKKwlleHRlcm4gY2hhciAqZ2V0X2NwdV9zdWJ0eXBlKHZvaWQpOworCWV4dGVybiB1bnNpZ25lZCBsb25nIGxvb3BzX3Blcl9qaWZmeTsKKwljaGFyICpwPSAmc3lzdGVtX3V0c25hbWUubWFjaGluZVsyXTsgLyogInNoIiAqLworCisJY3B1X2RhdGEtPmxvb3BzX3Blcl9qaWZmeSA9IGxvb3BzX3Blcl9qaWZmeTsKKworCXN3aXRjaCAoY3B1X2RhdGEtPnR5cGUpIHsKKwljYXNlIENQVV9TSDc2MDQ6CisJCSpwKysgPSAnMic7CisJCWJyZWFrOworCWNhc2UgQ1BVX1NINzcwNSAuLi4gQ1BVX1NINzMwMDoKKwkJKnArKyA9ICczJzsKKwkJYnJlYWs7CisJY2FzZSBDUFVfU0g3NzUwIC4uLiBDUFVfU0g0XzUwMToKKwkJKnArKyA9ICc0JzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJKnArKyA9ICc/JzsKKwkJKnArKyA9ICchJzsKKwkJYnJlYWs7CisJfQorCisJcHJpbnRrKCJDUFU6ICVzXG4iLCBnZXRfY3B1X3N1YnR5cGUoKSk7CisKKyNpZm5kZWYgX19MSVRUTEVfRU5ESUFOX18KKwkvKiAnZWInIG1lYW5zICdFbmRpYW4gQmlnJyAqLworCSpwKysgPSAnZSc7CisJKnArKyA9ICdiJzsKKyNlbmRpZgorCSpwID0gJ1wwJzsKK30KKyNlbmRpZiAvKiBfX0FTTV9TSF9CVUdTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2J1cy1zaC5oIGIvaW5jbHVkZS9hc20tc2gvYnVzLXNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc4MmEzMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL2J1cy1zaC5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1zaC9idXMtc2guaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBQYXVsIE11bmR0CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX19BU01fU0hfQlVTX1NIX0gKKyNkZWZpbmUgX19BU01fU0hfQlVTX1NIX0gKKworZXh0ZXJuIHN0cnVjdCBidXNfdHlwZSBzaF9idXNfdHlwZXNbXTsKKworc3RydWN0IHNoX2RldiB7CisJc3RydWN0IGRldmljZQlkZXY7CisJY2hhcgkJKm5hbWU7CisJdW5zaWduZWQgaW50CWRldl9pZDsKKwl1bnNpZ25lZCBpbnQJYnVzX2lkOworCXN0cnVjdCByZXNvdXJjZQlyZXM7CisJdm9pZAkJKm1hcGJhc2U7CisJdW5zaWduZWQgaW50CWlycVs2XTsKKwl1NjQJCSpkbWFfbWFzazsKK307CisKKyNkZWZpbmUgdG9fc2hfZGV2KGQpCWNvbnRhaW5lcl9vZigoZCksIHN0cnVjdCBzaF9kZXYsIGRldikKKworI2RlZmluZSBzaF9nZXRfZHJ2ZGF0YShkKQlkZXZfZ2V0X2RydmRhdGEoJihkKS0+ZGV2KQorI2RlZmluZSBzaF9zZXRfZHJ2ZGF0YShkLHApCWRldl9zZXRfZHJ2ZGF0YSgmKGQpLT5kZXYsIChwKSkKKworc3RydWN0IHNoX2RyaXZlciB7CisJc3RydWN0IGRldmljZV9kcml2ZXIJZHJ2OworCXVuc2lnbmVkIGludAkJZGV2X2lkOworCXVuc2lnbmVkIGludAkJYnVzX2lkOworCWludCAoKnByb2JlKShzdHJ1Y3Qgc2hfZGV2ICopOworCWludCAoKnJlbW92ZSkoc3RydWN0IHNoX2RldiAqKTsKKwlpbnQgKCpzdXNwZW5kKShzdHJ1Y3Qgc2hfZGV2ICosIHUzMik7CisJaW50ICgqcmVzdW1lKShzdHJ1Y3Qgc2hfZGV2ICopOworfTsKKworI2RlZmluZSB0b19zaF9kcml2ZXIoZCkJY29udGFpbmVyX29mKChkKSwgc3RydWN0IHNoX2RyaXZlciwgZHJ2KQorI2RlZmluZSBzaF9uYW1lKGQpCSgoZCktPmRldi5kcml2ZXItPm5hbWUpCisKKy8qCisgKiBEZXZpY2UgSUQgbnVtYmVycyBmb3IgYnVzIHR5cGVzCisgKi8KK2VudW0geworCVNIX0RFVl9JRF9VU0JfT0hDSSwKK307CisKKyNkZWZpbmUgU0hfTlJfQlVTRVMJCTEKKyNkZWZpbmUgU0hfQlVTX05BTUVfVklSVAkic2hidXMiCisKK2VudW0geworCVNIX0JVU19WSVJULAorfTsKKworLyogYXJjaC9zaC9rZXJuZWwvY3B1L2J1cy5jICovCitleHRlcm4gaW50IHNoX2RldmljZV9yZWdpc3RlcihzdHJ1Y3Qgc2hfZGV2ICpkZXYpOworZXh0ZXJuIHZvaWQgc2hfZGV2aWNlX3VucmVnaXN0ZXIoc3RydWN0IHNoX2RldiAqZGV2KTsKK2V4dGVybiBpbnQgc2hfZHJpdmVyX3JlZ2lzdGVyKHN0cnVjdCBzaF9kcml2ZXIgKmRydik7CitleHRlcm4gdm9pZCBzaF9kcml2ZXJfdW5yZWdpc3RlcihzdHJ1Y3Qgc2hfZHJpdmVyICpkcnYpOworCisjZW5kaWYgLyogX19BU01fU0hfQlVTX1NIX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvYnl0ZW9yZGVyLmggYi9pbmNsdWRlL2FzbS1zaC9ieXRlb3JkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmYyYjEzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvYnl0ZW9yZGVyLmgKQEAgLTAsMCArMSw1NiBAQAorI2lmbmRlZiBfX0FTTV9TSF9CWVRFT1JERVJfSAorI2RlZmluZSBfX0FTTV9TSF9CWVRFT1JERVJfSAorCisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5ICBOaWliZSBZdXRha2EKKyAqLworCisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKworc3RhdGljIF9faW5saW5lX18gX19hdHRyaWJ1dGVfY29uc3RfXyBfX3UzMiBfX19hcmNoX19zd2FiMzIoX191MzIgeCkKK3sKKwlfX2FzbV9fKCJzd2FwLmIJJTAsICUwXG5cdCIKKwkJInN3YXAudyAlMCwgJTBcblx0IgorCQkic3dhcC5iICUwLCAlMCIKKwkJOiAiPXIiICh4KQorCQk6ICIwIiAoeCkpOworCXJldHVybiB4OworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX2F0dHJpYnV0ZV9jb25zdF9fIF9fdTE2IF9fX2FyY2hfX3N3YWIxNihfX3UxNiB4KQoreworCV9fYXNtX18oInN3YXAuYiAlMCwgJTAiCisJCTogIj1yIiAoeCkKKwkJOiAgIjAiICh4KSk7CisJcmV0dXJuIHg7Cit9CisKK3N0YXRpYyBpbmxpbmUgX191NjQgX19fYXJjaF9fc3dhYjY0KF9fdTY0IHZhbCkgCit7IAorCXVuaW9uIHsgCisJCXN0cnVjdCB7IF9fdTMyIGEsYjsgfSBzOworCQlfX3U2NCB1OworCX0gdiwgdzsKKwl2LnUgPSB2YWw7CisJdy5zLmIgPSBfX19hcmNoX19zd2FiMzIodi5zLmEpOyAKKwl3LnMuYSA9IF9fX2FyY2hfX3N3YWIzMih2LnMuYik7IAorCXJldHVybiB3LnU7CQorfSAKKworI2RlZmluZSBfX2FyY2hfX3N3YWI2NCh4KSBfX19hcmNoX19zd2FiNjQoeCkKKyNkZWZpbmUgX19hcmNoX19zd2FiMzIoeCkgX19fYXJjaF9fc3dhYjMyKHgpCisjZGVmaW5lIF9fYXJjaF9fc3dhYjE2KHgpIF9fX2FyY2hfX3N3YWIxNih4KQorCisjaWYgIWRlZmluZWQoX19TVFJJQ1RfQU5TSV9fKSB8fCBkZWZpbmVkKF9fS0VSTkVMX18pCisjICBkZWZpbmUgX19CWVRFT1JERVJfSEFTX1U2NF9fCisjICBkZWZpbmUgX19TV0FCXzY0X1RIUlVfMzJfXworI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9saXR0bGVfZW5kaWFuLmg+CisjZWxzZQorI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9iaWdfZW5kaWFuLmg+CisjZW5kaWYKKworI2VuZGlmIC8qIF9fQVNNX1NIX0JZVEVPUkRFUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9jYWNoZS5oIGIvaW5jbHVkZS9hc20tc2gvY2FjaGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjRkZDZkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvY2FjaGUuaApAQCAtMCwwICsxLDQ4IEBACisvKiAkSWQ6IGNhY2hlLmgsdiAxLjYgMjAwNC8wMy8xMSAxODowODowNSBsZXRoYWwgRXhwICQKKyAqCisgKiBpbmNsdWRlL2FzbS1zaC9jYWNoZS5oCisgKgorICogQ29weXJpZ2h0IDE5OTkgKEMpIE5paWJlIFl1dGFrYQorICogQ29weXJpZ2h0IDIwMDIsIDIwMDMgKEMpIFBhdWwgTXVuZHQKKyAqLworI2lmbmRlZiBfX0FTTV9TSF9DQUNIRV9ICisjZGVmaW5lIF9fQVNNX1NIX0NBQ0hFX0gKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxhc20vY3B1L2NhY2hlLmg+CisjaW5jbHVkZSA8YXNtL2NwdS9jYWNoZWZsdXNoLmg+CisKKyNkZWZpbmUgU0hfQ0FDSEVfVkFMSUQJCTEKKyNkZWZpbmUgU0hfQ0FDSEVfVVBEQVRFRAkyCisjZGVmaW5lIFNIX0NBQ0hFX0NPTUJJTkVECTQKKyNkZWZpbmUgU0hfQ0FDSEVfQVNTT0MJCTgKKworI2RlZmluZSBMMV9DQUNIRV9CWVRFUwkJKDEgPDwgTDFfQ0FDSEVfU0hJRlQpCisjZGVmaW5lIFNNUF9DQUNIRV9CWVRFUwkJTDFfQ0FDSEVfQllURVMKKworI2RlZmluZSBMMV9DQUNIRV9BTElHTih4KQkoKCh4KSsoTDFfQ0FDSEVfQllURVMtMSkpJn4oTDFfQ0FDSEVfQllURVMtMSkpCisKKyNkZWZpbmUgTDFfQ0FDSEVfU0hJRlRfTUFYIAk1CS8qIGxhcmdlc3QgTDEgd2hpY2ggdGhpcyBhcmNoIHN1cHBvcnRzICovCisKK3N0cnVjdCBjYWNoZV9pbmZvIHsKKwl1bnNpZ25lZCBpbnQgd2F5czsKKwl1bnNpZ25lZCBpbnQgc2V0czsKKwl1bnNpZ25lZCBpbnQgbGluZXN6OworCisJdW5zaWduZWQgaW50IHdheV9pbmNyOworCisJdW5zaWduZWQgaW50IGVudHJ5X3NoaWZ0OworCXVuc2lnbmVkIGludCBlbnRyeV9tYXNrOworCisJdW5zaWduZWQgbG9uZyBmbGFnczsKK307CisKKy8qIEZsdXNoICh3cml0ZS1iYWNrIG9ubHkpIGEgcmVnaW9uIChzbWFsbGVyIHRoYW4gYSBwYWdlKSAqLworZXh0ZXJuIHZvaWQgX19mbHVzaF93YmFja19yZWdpb24odm9pZCAqc3RhcnQsIGludCBzaXplKTsKKy8qIEZsdXNoICh3cml0ZS1iYWNrICYgaW52YWxpZGF0ZSkgYSByZWdpb24gKHNtYWxsZXIgdGhhbiBhIHBhZ2UpICovCitleHRlcm4gdm9pZCBfX2ZsdXNoX3B1cmdlX3JlZ2lvbih2b2lkICpzdGFydCwgaW50IHNpemUpOworLyogRmx1c2ggKGludmFsaWRhdGUgb25seSkgYSByZWdpb24gKHNtYWxsZXIgdGhhbiBhIHBhZ2UpICovCitleHRlcm4gdm9pZCBfX2ZsdXNoX2ludmFsaWRhdGVfcmVnaW9uKHZvaWQgKnN0YXJ0LCBpbnQgc2l6ZSk7CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYgLyogX19BU01fU0hfQ0FDSEVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvY2FjaGVmbHVzaC5oIGIvaW5jbHVkZS9hc20tc2gvY2FjaGVmbHVzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZmIzM2UKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9jYWNoZWZsdXNoLmgKQEAgLTAsMCArMSwzMSBAQAorI2lmbmRlZiBfX0FTTV9TSF9DQUNIRUZMVVNIX0gKKyNkZWZpbmUgX19BU01fU0hfQ0FDSEVGTFVTSF9ICisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8YXNtL2NwdS9jYWNoZWZsdXNoLmg+CisKKy8qIEZsdXNoICh3cml0ZS1iYWNrIG9ubHkpIGEgcmVnaW9uIChzbWFsbGVyIHRoYW4gYSBwYWdlKSAqLworZXh0ZXJuIHZvaWQgX19mbHVzaF93YmFja19yZWdpb24odm9pZCAqc3RhcnQsIGludCBzaXplKTsKKy8qIEZsdXNoICh3cml0ZS1iYWNrICYgaW52YWxpZGF0ZSkgYSByZWdpb24gKHNtYWxsZXIgdGhhbiBhIHBhZ2UpICovCitleHRlcm4gdm9pZCBfX2ZsdXNoX3B1cmdlX3JlZ2lvbih2b2lkICpzdGFydCwgaW50IHNpemUpOworLyogRmx1c2ggKGludmFsaWRhdGUgb25seSkgYSByZWdpb24gKHNtYWxsZXIgdGhhbiBhIHBhZ2UpICovCitleHRlcm4gdm9pZCBfX2ZsdXNoX2ludmFsaWRhdGVfcmVnaW9uKHZvaWQgKnN0YXJ0LCBpbnQgc2l6ZSk7CisKKyNkZWZpbmUgZmx1c2hfY2FjaGVfdm1hcChzdGFydCwgZW5kKQkJZmx1c2hfY2FjaGVfYWxsKCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfdnVubWFwKHN0YXJ0LCBlbmQpCQlmbHVzaF9jYWNoZV9hbGwoKQorCisjZGVmaW5lIGNvcHlfdG9fdXNlcl9wYWdlKHZtYSwgcGFnZSwgdmFkZHIsIGRzdCwgc3JjLCBsZW4pIFwKKwlkbyB7CQkJCQkJCVwKKwkJZmx1c2hfY2FjaGVfcGFnZSh2bWEsIHZhZGRyLCBwYWdlX3RvX3BmbihwYWdlKSk7XAorCQltZW1jcHkoZHN0LCBzcmMsIGxlbik7CQkJCVwKKwkJZmx1c2hfaWNhY2hlX3VzZXJfcmFuZ2Uodm1hLCBwYWdlLCB2YWRkciwgbGVuKTsJXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgY29weV9mcm9tX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIHZhZGRyLCBkc3QsIHNyYywgbGVuKSBcCisJZG8gewkJCQkJCQlcCisJCWZsdXNoX2NhY2hlX3BhZ2Uodm1hLCB2YWRkciwgcGFnZV90b19wZm4ocGFnZSkpO1wKKwkJbWVtY3B5KGRzdCwgc3JjLCBsZW4pOwkJCQlcCisJfSB3aGlsZSAoMCkKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAvKiBfX0FTTV9TSF9DQUNIRUZMVVNIX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2NhdDY4NzAxL2lvLmggYi9pbmNsdWRlL2FzbS1zaC9jYXQ2ODcwMS9pby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1M2I4NDYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9jYXQ2ODcwMS9pby5oCkBAIC0wLDAgKzEsMjIgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1zaC9pb19jYXQ2ODcwMS5oCisgKgorICogQ29weXJpZ2h0IDIwMDAgU3R1YXJ0IE1lbmVmeSAoc3R1YXJ0Lm1lbmVmeUBzdC5jb20pCisgKiAgICAgICAgICAgMjAwMSBZdXRhcm91IEViaWhhciAoZWJpaGFyYUBzaS1saW51eC5jb20pCisgKgorICogTWF5IGJlIGNvcGllZCBvciBtb2RpZmllZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSBsaW51eC9DT1BZSU5HIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICoKKyAqIElPIGZ1bmN0aW9ucyBmb3IgYW4gQU9ORSBDb3JwLiBDQVQtNjg3MDEgU0g3NzA4IEJvcmFkCisgKi8KKworI2lmbmRlZiBfQVNNX1NIX0lPX0NBVDY4NzAxX0gKKyNkZWZpbmUgX0FTTV9TSF9JT19DQVQ2ODcwMV9ICisKK2V4dGVybiB1bnNpZ25lZCBsb25nIGNhdDY4NzAxX2lzYV9wb3J0MmFkZHIodW5zaWduZWQgbG9uZyBvZmZzZXQpOworZXh0ZXJuIGludCBjYXQ2ODcwMV9pcnFfZGVtdXgoaW50IGlycSk7CisKK2V4dGVybiB2b2lkIGluaXRfY2F0Njg3MDFfSVJRKHZvaWQpOworZXh0ZXJuIHZvaWQgaGVhcnRiZWF0X2NhdDY4NzAxKHZvaWQpOworCisjZW5kaWYgLyogX0FTTV9TSF9JT19DQVQ2ODcwMV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9jaGVja3N1bS5oIGIvaW5jbHVkZS9hc20tc2gvY2hlY2tzdW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTEzYzdmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvY2hlY2tzdW0uaApAQCAtMCwwICsxLDIxNiBAQAorI2lmbmRlZiBfX0FTTV9TSF9DSEVDS1NVTV9ICisjZGVmaW5lIF9fQVNNX1NIX0NIRUNLU1VNX0gKKworLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBieSBLYXogS29qaW1hICYgTmlpYmUgWXV0YWthCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2luNi5oPgorCisvKgorICogY29tcHV0ZXMgdGhlIGNoZWNrc3VtIG9mIGEgbWVtb3J5IGJsb2NrIGF0IGJ1ZmYsIGxlbmd0aCBsZW4sCisgKiBhbmQgYWRkcyBpbiAic3VtIiAoMzItYml0KQorICoKKyAqIHJldHVybnMgYSAzMi1iaXQgbnVtYmVyIHN1aXRhYmxlIGZvciBmZWVkaW5nIGludG8gaXRzZWxmCisgKiBvciBjc3VtX3RjcHVkcF9tYWdpYworICoKKyAqIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aCBldmVuIGxlbmd0aHMsIGV4Y2VwdAorICogZm9yIHRoZSBsYXN0IGZyYWdtZW50LCB3aGljaCBtYXkgYmUgb2RkCisgKgorICogaXQncyBiZXN0IHRvIGhhdmUgYnVmZiBhbGlnbmVkIG9uIGEgMzItYml0IGJvdW5kYXJ5CisgKi8KK2FzbWxpbmthZ2UgdW5zaWduZWQgaW50IGNzdW1fcGFydGlhbChjb25zdCB1bnNpZ25lZCBjaGFyICogYnVmZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IHN1bSk7CisKKy8qCisgKiB0aGUgc2FtZSBhcyBjc3VtX3BhcnRpYWwsIGJ1dCBjb3BpZXMgZnJvbSBzcmMgd2hpbGUgaXQKKyAqIGNoZWNrc3VtcywgYW5kIGhhbmRsZXMgdXNlci1zcGFjZSBwb2ludGVyIGV4Y2VwdGlvbnMgY29ycmVjdGx5LCB3aGVuIG5lZWRlZC4KKyAqCisgKiBoZXJlIGV2ZW4gbW9yZSBpbXBvcnRhbnQgdG8gYWxpZ24gc3JjIGFuZCBkc3Qgb24gYSAzMi1iaXQgKG9yIGV2ZW4KKyAqIGJldHRlciA2NC1iaXQpIGJvdW5kYXJ5CisgKi8KKworYXNtbGlua2FnZSB1bnNpZ25lZCBpbnQgY3N1bV9wYXJ0aWFsX2NvcHlfZ2VuZXJpYyhjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMsIHVuc2lnbmVkIGNoYXIgKmRzdCwKKwkJCQkJCSAgaW50IGxlbiwgaW50IHN1bSwgaW50ICpzcmNfZXJyX3B0ciwgaW50ICpkc3RfZXJyX3B0cik7CisKKy8qCisgKglOb3RlOiB3aGVuIHlvdSBnZXQgYSBOVUxMIHBvaW50ZXIgZXhjZXB0aW9uIGhlcmUgdGhpcyBtZWFucyBzb21lb25lCisgKglwYXNzZWQgaW4gYW4gaW5jb3JyZWN0IGtlcm5lbCBhZGRyZXNzIHRvIG9uZSBvZiB0aGVzZSBmdW5jdGlvbnMuIAorICoJCisgKglJZiB5b3UgdXNlIHRoZXNlIGZ1bmN0aW9ucyBkaXJlY3RseSBwbGVhc2UgZG9uJ3QgZm9yZ2V0IHRoZSAKKyAqCXZlcmlmeV9hcmVhKCkuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fCit1bnNpZ25lZCBpbnQgY3N1bV9wYXJ0aWFsX2NvcHlfbm9jaGVjayAoY29uc3QgdW5zaWduZWQgY2hhciAqc3JjLCB1bnNpZ25lZCBjaGFyICpkc3QsCisJCQkJCWludCBsZW4sIGludCBzdW0pCit7CisJcmV0dXJuIGNzdW1fcGFydGlhbF9jb3B5X2dlbmVyaWMgKCBzcmMsIGRzdCwgbGVuLCBzdW0sIE5VTEwsIE5VTEwpOworfQorCitzdGF0aWMgX19pbmxpbmVfXwordW5zaWduZWQgaW50IGNzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlciAoY29uc3QgdW5zaWduZWQgY2hhciAqc3JjLCB1bnNpZ25lZCBjaGFyICpkc3QsCisJCQkJCQlpbnQgbGVuLCBpbnQgc3VtLCBpbnQgKmVycl9wdHIpCit7CisJcmV0dXJuIGNzdW1fcGFydGlhbF9jb3B5X2dlbmVyaWMgKCBzcmMsIGRzdCwgbGVuLCBzdW0sIGVycl9wdHIsIE5VTEwpOworfQorCisvKgorICoJRm9sZCBhIHBhcnRpYWwgY2hlY2tzdW0KKyAqLworCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBpbnQgY3N1bV9mb2xkKHVuc2lnbmVkIGludCBzdW0pCit7CisJdW5zaWduZWQgaW50IF9fZHVtbXk7CisJX19hc21fXygic3dhcC53ICUwLCAlMVxuXHQiCisJCSJleHR1LncJJTAsICUwXG5cdCIKKwkJImV4dHUudwklMSwgJTFcblx0IgorCQkiYWRkCSUxLCAlMFxuXHQiCisJCSJzd2FwLncJJTAsICUxXG5cdCIKKwkJImFkZAklMSwgJTBcblx0IgorCQkibm90CSUwLCAlMFxuXHQiCisJCTogIj1yIiAoc3VtKSwgIj0mciIgKF9fZHVtbXkpCisJCTogIjAiIChzdW0pCisJCTogInQiKTsKKwlyZXR1cm4gc3VtOworfQorCisvKgorICoJVGhpcyBpcyBhIHZlcnNpb24gb2YgaXBfY29tcHV0ZV9jc3VtKCkgb3B0aW1pemVkIGZvciBJUCBoZWFkZXJzLAorICoJd2hpY2ggYWx3YXlzIGNoZWNrc3VtIG9uIDQgb2N0ZXQgYm91bmRhcmllcy4KKyAqCisgKiAgICAgIGkzODYgdmVyc2lvbiBieSBKb3JnZSBDd2lrIDxqb3JnZUBsYXNlci5zYXRsaW5rLm5ldD4sIGFkYXB0ZWQKKyAqICAgICAgZm9yIGxpbnV4IGJ5ICogQXJudCBHdWxicmFuZHNlbi4KKyAqLworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgc2hvcnQgaXBfZmFzdF9jc3VtKHVuc2lnbmVkIGNoYXIgKiBpcGgsIHVuc2lnbmVkIGludCBpaGwpCit7CisJdW5zaWduZWQgaW50IHN1bSwgX19kdW1teTAsIF9fZHVtbXkxOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSJtb3YubAlAJTErLCAlMFxuXHQiCisJCSJtb3YubAlAJTErLCAlM1xuXHQiCisJCSJhZGQJIy0yLCAlMlxuXHQiCisJCSJjbHJ0XG5cdCIKKwkJIjE6XHQiCisJCSJhZGRjCSUzLCAlMFxuXHQiCisJCSJtb3Z0CSU0XG5cdCIKKwkJIm1vdi5sCUAlMSssICUzXG5cdCIKKwkJImR0CSUyXG5cdCIKKwkJImJmL3MJMWJcblx0IgorCQkiIGNtcC9lcSAjMSwgJTRcblx0IgorCQkiYWRkYwklMywgJTBcblx0IgorCQkiYWRkYwklMiwgJTAiCSAgICAvKiBIZXJlICUyIGlzIDAsIGFkZCBjYXJyeS1iaXQgKi8KKwkvKiBTaW5jZSB0aGUgaW5wdXQgcmVnaXN0ZXJzIHdoaWNoIGFyZSBsb2FkZWQgd2l0aCBpcGggYW5kIGlobAorCSAgIGFyZSBtb2RpZmllZCwgd2UgbXVzdCBhbHNvIHNwZWNpZnkgdGhlbSBhcyBvdXRwdXRzLCBvciBnY2MKKwkgICB3aWxsIGFzc3VtZSB0aGV5IGNvbnRhaW4gdGhlaXIgb3JpZ2luYWwgdmFsdWVzLiAqLworCTogIj1yIiAoc3VtKSwgIj1yIiAoaXBoKSwgIj1yIiAoaWhsKSwgIj0mciIgKF9fZHVtbXkwKSwgIj0meiIgKF9fZHVtbXkxKQorCTogIjEiIChpcGgpLCAiMiIgKGlobCkKKwk6ICJ0Iik7CisKKwlyZXR1cm4JY3N1bV9mb2xkKHN1bSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgY3N1bV90Y3B1ZHBfbm9mb2xkKHVuc2lnbmVkIGxvbmcgc2FkZHIsCisJCQkJCQkgICB1bnNpZ25lZCBsb25nIGRhZGRyLAorCQkJCQkJICAgdW5zaWduZWQgc2hvcnQgbGVuLAorCQkJCQkJICAgdW5zaWduZWQgc2hvcnQgcHJvdG8sCisJCQkJCQkgICB1bnNpZ25lZCBpbnQgc3VtKSAKK3sKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworCXVuc2lnbmVkIGxvbmcgbGVuX3Byb3RvID0gKG50b2hzKGxlbik8PDE2KStwcm90byoyNTY7CisjZWxzZQorCXVuc2lnbmVkIGxvbmcgbGVuX3Byb3RvID0gKHByb3RvPDwxNikrbGVuOworI2VuZGlmCisJX19hc21fXygiY2xydFxuXHQiCisJCSJhZGRjCSUwLCAlMVxuXHQiCisJCSJhZGRjCSUyLCAlMVxuXHQiCisJCSJhZGRjCSUzLCAlMVxuXHQiCisJCSJtb3Z0CSUwXG5cdCIKKwkJImFkZAklMSwgJTAiCisJCTogIj1yIiAoc3VtKSwgIj1yIiAobGVuX3Byb3RvKQorCQk6ICJyIiAoZGFkZHIpLCAiciIgKHNhZGRyKSwgIjEiIChsZW5fcHJvdG8pLCAiMCIgKHN1bSkKKwkJOiAidCIpOworCXJldHVybiBzdW07Cit9CisKKy8qCisgKiBjb21wdXRlcyB0aGUgY2hlY2tzdW0gb2YgdGhlIFRDUC9VRFAgcHNldWRvLWhlYWRlcgorICogcmV0dXJucyBhIDE2LWJpdCBjaGVja3N1bSwgYWxyZWFkeSBjb21wbGVtZW50ZWQKKyAqLworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgc2hvcnQgaW50IGNzdW1fdGNwdWRwX21hZ2ljKHVuc2lnbmVkIGxvbmcgc2FkZHIsCisJCQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBkYWRkciwKKwkJCQkJCSAgICAgICB1bnNpZ25lZCBzaG9ydCBsZW4sCisJCQkJCQkgICAgICAgdW5zaWduZWQgc2hvcnQgcHJvdG8sCisJCQkJCQkgICAgICAgdW5zaWduZWQgaW50IHN1bSkgCit7CisJcmV0dXJuIGNzdW1fZm9sZChjc3VtX3RjcHVkcF9ub2ZvbGQoc2FkZHIsZGFkZHIsbGVuLHByb3RvLHN1bSkpOworfQorCisvKgorICogdGhpcyByb3V0aW5lIGlzIHVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgSVAtbGlrZSBjaGVja3N1bXMsIG1haW5seQorICogaW4gaWNtcC5jCisgKi8KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgc2hvcnQgaXBfY29tcHV0ZV9jc3VtKHVuc2lnbmVkIGNoYXIgKiBidWZmLCBpbnQgbGVuKQoreworICAgIHJldHVybiBjc3VtX2ZvbGQgKGNzdW1fcGFydGlhbChidWZmLCBsZW4sIDApKTsKK30KKworI2RlZmluZSBfSEFWRV9BUkNIX0lQVjZfQ1NVTQorc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgc2hvcnQgaW50IGNzdW1faXB2Nl9tYWdpYyhzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLAorCQkJCQkJICAgICBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAorCQkJCQkJICAgICBfX3UzMiBsZW4sCisJCQkJCQkgICAgIHVuc2lnbmVkIHNob3J0IHByb3RvLAorCQkJCQkJICAgICB1bnNpZ25lZCBpbnQgc3VtKSAKK3sKKwl1bnNpZ25lZCBpbnQgX19kdW1teTsKKwlfX2FzbV9fKCJjbHJ0XG5cdCIKKwkJIm1vdi5sCUAoMCwlMiksICUxXG5cdCIKKwkJImFkZGMJJTEsICUwXG5cdCIKKwkJIm1vdi5sCUAoNCwlMiksICUxXG5cdCIKKwkJImFkZGMJJTEsICUwXG5cdCIKKwkJIm1vdi5sCUAoOCwlMiksICUxXG5cdCIKKwkJImFkZGMJJTEsICUwXG5cdCIKKwkJIm1vdi5sCUAoMTIsJTIpLCAlMVxuXHQiCisJCSJhZGRjCSUxLCAlMFxuXHQiCisJCSJtb3YubAlAKDAsJTMpLCAlMVxuXHQiCisJCSJhZGRjCSUxLCAlMFxuXHQiCisJCSJtb3YubAlAKDQsJTMpLCAlMVxuXHQiCisJCSJhZGRjCSUxLCAlMFxuXHQiCisJCSJtb3YubAlAKDgsJTMpLCAlMVxuXHQiCisJCSJhZGRjCSUxLCAlMFxuXHQiCisJCSJtb3YubAlAKDEyLCUzKSwgJTFcblx0IgorCQkiYWRkYwklMSwgJTBcblx0IgorCQkiYWRkYwklNCwgJTBcblx0IgorCQkiYWRkYwklNSwgJTBcblx0IgorCQkibW92dAklMVxuXHQiCisJCSJhZGQJJTEsICUwXG4iCisJCTogIj1yIiAoc3VtKSwgIj0mciIgKF9fZHVtbXkpCisJCTogInIiIChzYWRkciksICJyIiAoZGFkZHIpLCAKKwkJICAiciIgKGh0b25sKGxlbikpLCAiciIgKGh0b25sKHByb3RvKSksICIwIiAoc3VtKQorCQk6ICJ0Iik7CisKKwlyZXR1cm4gY3N1bV9mb2xkKHN1bSk7Cit9CisKKy8qIAorICoJQ29weSBhbmQgY2hlY2tzdW0gdG8gdXNlcgorICovCisjZGVmaW5lIEhBVkVfQ1NVTV9DT1BZX1VTRVIKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCBjc3VtX2FuZF9jb3B5X3RvX3VzZXIgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYywKKwkJCQkJCSAgICAgIHVuc2lnbmVkIGNoYXIgX191c2VyICpkc3QsCisJCQkJCQkgICAgICBpbnQgbGVuLCBpbnQgc3VtLAorCQkJCQkJICAgICAgaW50ICplcnJfcHRyKQoreworCWlmIChhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBkc3QsIGxlbikpCisJCXJldHVybiBjc3VtX3BhcnRpYWxfY29weV9nZW5lcmljKHNyYywgZHN0LCBsZW4sIHN1bSwgTlVMTCwgZXJyX3B0cik7CisKKwlpZiAobGVuKQorCQkqZXJyX3B0ciA9IC1FRkFVTFQ7CisKKwlyZXR1cm4gLTE7IC8qIGludmFsaWQgY2hlY2tzdW0gKi8KK30KKyNlbmRpZiAvKiBfX0FTTV9TSF9DSEVDS1NVTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9jcHUtc2gyL2FkZHJzcGFjZS5oIGIvaW5jbHVkZS9hc20tc2gvY3B1LXNoMi9hZGRyc3BhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzA2YzkwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvY3B1LXNoMi9hZGRyc3BhY2UuaApAQCAtMCwwICsxLDE2IEBACisvKgorICogRGVmaW5pdGlvbnMgZm9yIHRoZSBhZGRyZXNzIHNwYWNlcyBvZiB0aGUgU0gtMiBDUFVzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMyAgUGF1bCBNdW5kdAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9fQVNNX0NQVV9TSDJfQUREUlNQQUNFX0gKKyNkZWZpbmUgX19BU01fQ1BVX1NIMl9BRERSU1BBQ0VfSAorCisvKiBTaG91bGQgZmlsbCBoZXJlICovCisKKyNlbmRpZiAvKiBfX0FTTV9DUFVfU0gyX0FERFJTUEFDRV9IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDIvY2FjaGUuaCBiL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDIvY2FjaGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDk2NDAyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvY3B1LXNoMi9jYWNoZS5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1zaC9jcHUtc2gyL2NhY2hlLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgUGF1bCBNdW5kdAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9fQVNNX0NQVV9TSDJfQ0FDSEVfSAorI2RlZmluZSBfX0FTTV9DUFVfU0gyX0NBQ0hFX0gKKworI2RlZmluZSBMMV9DQUNIRV9TSElGVAk0CisKKyNkZWZpbmUgQ0NSCQkweGZmZmZmZTkyCS8qIEFkZHJlc3Mgb2YgQ2FjaGUgQ29udHJvbCBSZWdpc3RlciAqLworCisjZGVmaW5lIENDUl9DQUNIRV9DRQkweDAxCS8qIENhY2hlIGVuYWJsZSAqLworI2RlZmluZSBDQ1JfQ0FDSEVfSUQJMHgwMgkvKiBJbnN0cnVjdGlvbiBSZXBsYWNlbWVudCBkaXNhYmxlICovCisjZGVmaW5lIENDUl9DQUNIRV9PRAkweDA0CS8qIERhdGEgUmVwbGFjZW1lbnQgZGlzYWJsZSAqLworI2RlZmluZSBDQ1JfQ0FDSEVfVFcJMHgwOAkvKiBUd28td2F5IG1vZGUgKi8KKyNkZWZpbmUgQ0NSX0NBQ0hFX0NQCTB4MTAJLyogQ2FjaGUgcHVyZ2UgKi8KKworI2RlZmluZSBDQUNIRV9PQ19BRERSRVNTX0FSUkFZCTB4NjAwMDAwMDAKKworI2RlZmluZSBDQ1JfQ0FDSEVfRU5BQkxFCUNDUl9DQUNIRV9DRQorI2RlZmluZSBDQ1JfQ0FDSEVfSU5WQUxJREFURQlDQ1JfQ0FDSEVfQ1AKKyNkZWZpbmUgQ0NSX0NBQ0hFX09SQQkJQ0NSX0NBQ0hFX1RXCisjZGVmaW5lIENDUl9DQUNIRV9XVAkJMHgwMAkvKiBTSC0yIGlzIF9hbHdheXNfIHdyaXRlLXRocm91Z2ggKi8KKworI2VuZGlmIC8qIF9fQVNNX0NQVV9TSDJfQ0FDSEVfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9jcHUtc2gyL2NhY2hlZmx1c2guaCBiL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDIvY2FjaGVmbHVzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1NTZmYTgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9jcHUtc2gyL2NhY2hlZmx1c2guaApAQCAtMCwwICsxLDQyIEBACisvKgorICogaW5jbHVkZS9hc20tc2gvY3B1LXNoMi9jYWNoZWZsdXNoLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgUGF1bCBNdW5kdAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9fQVNNX0NQVV9TSDJfQ0FDSEVGTFVTSF9ICisjZGVmaW5lIF9fQVNNX0NQVV9TSDJfQ0FDSEVGTFVTSF9ICisKKy8qIAorICogQ2FjaGUgZmx1c2hpbmc6CisgKgorICogIC0gZmx1c2hfY2FjaGVfYWxsKCkgZmx1c2hlcyBlbnRpcmUgY2FjaGUKKyAqICAtIGZsdXNoX2NhY2hlX21tKG1tKSBmbHVzaGVzIHRoZSBzcGVjaWZpZWQgbW0gY29udGV4dCdzIGNhY2hlIGxpbmVzCisgKiAgLSBmbHVzaF9jYWNoZV9wYWdlKG1tLCB2bWFkZHIsIHBmbikgZmx1c2hlcyBhIHNpbmdsZSBwYWdlCisgKiAgLSBmbHVzaF9jYWNoZV9yYW5nZSh2bWEsIHN0YXJ0LCBlbmQpIGZsdXNoZXMgYSByYW5nZSBvZiBwYWdlcworICoKKyAqICAtIGZsdXNoX2RjYWNoZV9wYWdlKHBnKSBmbHVzaGVzKHdiYWNrJmludmFsaWRhdGVzKSBhIHBhZ2UgZm9yIGRjYWNoZQorICogIC0gZmx1c2hfaWNhY2hlX3JhbmdlKHN0YXJ0LCBlbmQpIGZsdXNoZXMoaW52YWxpZGF0ZXMpIGEgcmFuZ2UgZm9yIGljYWNoZQorICogIC0gZmx1c2hfaWNhY2hlX3BhZ2Uodm1hLCBwZykgZmx1c2hlcyhpbnZhbGlkYXRlcykgYSBwYWdlIGZvciBpY2FjaGUKKyAqCisgKiAgQ2FjaGVzIGFyZSBpbmRleGVkIChlZmZlY3RpdmVseSkgYnkgcGh5c2ljYWwgYWRkcmVzcyBvbiBTSC0yLCBzbworICogIHdlIGRvbid0IG5lZWQgdGhlbS4KKyAqLworI2RlZmluZSBmbHVzaF9jYWNoZV9hbGwoKQkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfbW0obW0pCQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9jYWNoZV9yYW5nZSh2bWEsIHN0YXJ0LCBlbmQpCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfcGFnZSh2bWEsIHZtYWRkciwgcGZuKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpCQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9kY2FjaGVfbW1hcF9sb2NrKG1hcHBpbmcpCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2RjYWNoZV9tbWFwX3VubG9jayhtYXBwaW5nKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2ljYWNoZV9yYW5nZShzdGFydCwgZW5kKQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9pY2FjaGVfcGFnZSh2bWEscGcpCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2ljYWNoZV91c2VyX3JhbmdlKHZtYSxwZyxhZHIsbGVuKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2NhY2hlX3NpZ3RyYW1wKHZhZGRyKQkJZG8geyB9IHdoaWxlICgwKQorCisjZGVmaW5lIHAzX2NhY2hlX2luaXQoKQkJCQlkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYgLyogX19BU01fQ1BVX1NIMl9DQUNIRUZMVVNIX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvY3B1LXNoMi9kbWEuaCBiL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDIvZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY2YjQzYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDIvZG1hLmgKQEAgLTAsMCArMSwyMyBAQAorLyoKKyAqIERlZmluaXRpb25zIGZvciB0aGUgU0gtMiBETUFDLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMyAgUGF1bCBNdW5kdAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9fQVNNX0NQVV9TSDJfRE1BX0gKKyNkZWZpbmUgX19BU01fQ1BVX1NIMl9ETUFfSAorCisjZGVmaW5lIFNIX01BWF9ETUFfQ0hBTk5FTFMJMgorCisjZGVmaW5lIFNBUgkoKHVuc2lnbmVkIGxvbmdbXSl7IDB4ZmZmZmZmODAsIDB4ZmZmZmZmOTAgfSkKKyNkZWZpbmUgREFSCSgodW5zaWduZWQgbG9uZ1tdKXsgMHhmZmZmZmY4NCwgMHhmZmZmZmY5NCB9KQorI2RlZmluZSBETUFUQ1IJKCh1bnNpZ25lZCBsb25nW10peyAweGZmZmZmZjg4LCAweGZmZmZmZjk4IH0pCisjZGVmaW5lIENIQ1IJKCh1bnNpZ25lZCBsb25nW10peyAweGZmZmZmZmZjLCAweGZmZmZmZjljIH0pCisKKyNkZWZpbmUgRE1BT1IJMHhmZmZmZmZiMAorCisjZW5kaWYgLyogX19BU01fQ1BVX1NIMl9ETUFfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9jcHUtc2gyL3NobXBhcmFtLmggYi9pbmNsdWRlL2FzbS1zaC9jcHUtc2gyL3NobXBhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE3YzE4MgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDIvc2htcGFyYW0uaApAQCAtMCwwICsxLDE2IEBACisvKgorICogaW5jbHVkZS9hc20tc2gvY3B1LXNoMi9zaG1wYXJhbS5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzICBQYXVsIE11bmR0CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX19BU01fQ1BVX1NIMl9TSE1QQVJBTV9ICisjZGVmaW5lIF9fQVNNX0NQVV9TSDJfU0hNUEFSQU1fSAorCisjZGVmaW5lCVNITUxCQSBQQUdFX1NJWkUJCSAvKiBhdHRhY2ggYWRkciBhIG11bHRpcGxlIG9mIHRoaXMgKi8KKworI2VuZGlmIC8qIF9fQVNNX0NQVV9TSDJfU0hNUEFSQU1fSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9jcHUtc2gyL3NpZ2NvbnRleHQuaCBiL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDIvc2lnY29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlNWMxNWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9jcHUtc2gyL3NpZ2NvbnRleHQuaApAQCAtMCwwICsxLDE3IEBACisjaWZuZGVmIF9fQVNNX0NQVV9TSDJfU0lHQ09OVEVYVF9ICisjZGVmaW5lIF9fQVNNX0NQVV9TSDJfU0lHQ09OVEVYVF9ICisKK3N0cnVjdCBzaWdjb250ZXh0IHsKKwl1bnNpZ25lZCBsb25nCW9sZG1hc2s7CisKKwkvKiBDUFUgcmVnaXN0ZXJzICovCisJdW5zaWduZWQgbG9uZyBzY19yZWdzWzE2XTsKKwl1bnNpZ25lZCBsb25nIHNjX3BjOworCXVuc2lnbmVkIGxvbmcgc2NfcHI7CisJdW5zaWduZWQgbG9uZyBzY19zcjsKKwl1bnNpZ25lZCBsb25nIHNjX2dicjsKKwl1bnNpZ25lZCBsb25nIHNjX21hY2g7CisJdW5zaWduZWQgbG9uZyBzY19tYWNsOworfTsKKworI2VuZGlmIC8qIF9fQVNNX0NQVV9TSDJfU0lHQ09OVEVYVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9jcHUtc2gyL3ViYy5oIGIvaW5jbHVkZS9hc20tc2gvY3B1LXNoMi91YmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTBlODdmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvY3B1LXNoMi91YmMuaApAQCAtMCwwICsxLDMyIEBACisvKgorICogaW5jbHVkZS9hc20tc2gvY3B1LXNoMi91YmMuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMyBQYXVsIE11bmR0CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX19BU01fQ1BVX1NIMl9VQkNfSAorI2RlZmluZSBfX0FTTV9DUFVfU0gyX1VCQ19ICisKKyNkZWZpbmUgVUJDX0JBUkEgICAgICAgICAgICAgICAgMHhmZmZmZmY0MAorI2RlZmluZSBVQkNfQkFNUkEgICAgICAgICAgICAgICAweGZmZmZmZjQ0CisjZGVmaW5lIFVCQ19CQlJBICAgICAgICAgICAgICAgIDB4ZmZmZmZmNDgKKyNkZWZpbmUgVUJDX0JBUkIgICAgICAgICAgICAgICAgMHhmZmZmZmY2MAorI2RlZmluZSBVQkNfQkFNUkIgICAgICAgICAgICAgICAweGZmZmZmZjY0CisjZGVmaW5lIFVCQ19CQlJCICAgICAgICAgICAgICAgIDB4ZmZmZmZmNjgKKyNkZWZpbmUgVUJDX0JEUkIgICAgICAgICAgICAgICAgMHhmZmZmZmY3MAorI2RlZmluZSBVQkNfQkRNUkIgICAgICAgICAgICAgICAweGZmZmZmZjc0CisjZGVmaW5lIFVCQ19CUkNSICAgICAgICAgICAgICAgIDB4ZmZmZmZmNzgKKworLyoKKyAqIFdlIGRvbid0IGhhdmUgYW55IEFTSUQgY2hhbmdlcyB0byBtYWtlIGluIHRoZSBVQkMgb24gdGhlIFNILTIuCisgKgorICogTWFrZSB0aGVzZSBwdXJwb3NlbHkgaW52YWxpZCB0byB0cmFjayBtaXN1c2UuCisgKi8KKyNkZWZpbmUgVUJDX0JBU1JBCQkweDAwMDAwMDAwCisjZGVmaW5lIFVCQ19CQVNSQgkJMHgwMDAwMDAwMAorCisjZW5kaWYgLyogX19BU01fQ1BVX1NIMl9VQkNfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9jcHUtc2gyL3dhdGNoZG9nLmggYi9pbmNsdWRlL2FzbS1zaC9jcHUtc2gyL3dhdGNoZG9nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzkzMTYxYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDIvd2F0Y2hkb2cuaApAQCAtMCwwICsxLDY5IEBACisvKgorICogaW5jbHVkZS9hc20tc2gvY3B1LXNoMi93YXRjaGRvZy5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzIFBhdWwgTXVuZHQKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfX0FTTV9DUFVfU0gyX1dBVENIRE9HX0gKKyNkZWZpbmUgX19BU01fQ1BVX1NIMl9XQVRDSERPR19ICisKKy8qCisgKiBNb3JlIFNILTIgYnJpbGxpYW5jZSAuLiBpdHMgbm90IGdvb2QgZW5vdWdoIHRoYXQgd2UgY2FuJ3QgcmVhZAorICogYW5kIHdyaXRlIHRoZSBzYW1lIHNpemVzIHRvIFdUQ05ULCBub3cgd2UgaGF2ZSB0byByZWFkIGFuZCB3cml0ZQorICogd2l0aCBkaWZmZXJlbnQgc2l6ZXMgYXQgZGlmZmVyZW50IGFkZHJlc3NlcyBmb3IgV1RDTlQgX2FuZF8gUlNUQ1NSLgorICoKKyAqIEF0IGxlYXN0IG9uIHRoZSBicmlnaHQgc2lkZSBubyBvbmUgaGFzIG1hbmFnZWQgdG8gc2NyZXcgb3ZlciBXVENTUgorICogaW4gdGhpcyBmYXNoaW9uIC4uIHlldC4KKyAqLworLyogUmVnaXN0ZXIgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgV1RDTlQJCTB4ZmZmZmZlODAKKyNkZWZpbmUgV1RDU1IJCTB4ZmZmZmZlODAKKyNkZWZpbmUgUlNUQ1NSCQkweGZmZmZmZTgyCisKKyNkZWZpbmUgV1RDTlRfUgkJKFdUQ05UICsgMSkKKyNkZWZpbmUgUlNUQ1NSX1IJKFJTVENTUiArIDEpCisKKy8qIEJpdCBkZWZpbml0aW9ucyAqLworI2RlZmluZSBXVENTUl9JT1ZGCTB4ODAKKyNkZWZpbmUgV1RDU1JfV1QJMHg0MAorI2RlZmluZSBXVENTUl9UTUUJMHgyMAorI2RlZmluZSBXVENTUl9SU1RTCTB4MDAKKworI2RlZmluZSBSU1RDU1JfUlNUUwkweDIwCisKKy8qKgorICogCXNoX3dkdF9yZWFkX3JzdGNzciAtIFJlYWQgZnJvbSBSZXNldCBDb250cm9sL1N0YXR1cyBSZWdpc3RlcgorICoKKyAqCVJlYWRzIGJhY2sgdGhlIFJTVENTUiB2YWx1ZS4KKyAqLworc3RhdGljIGlubGluZSBfX3U4IHNoX3dkdF9yZWFkX3JzdGNzcih2b2lkKQoreworCS8qCisJICogU2FtZSByZWFkL3dyaXRlIGJyYWluLWRhbWFnZSBhcyBmb3IgV1RDTlQgaGVyZS4uCisJICovCisJcmV0dXJuIGN0cmxfaW5iKFJTVENTUl9SKTsKK30KKworLyoqCisgKiAJc2hfd2R0X3dyaXRlX2NzciAtIFdyaXRlIHRvIFJlc2V0IENvbnRyb2wvU3RhdHVzIFJlZ2lzdGVyCisgKgorICogCUB2YWw6IFZhbHVlIHRvIHdyaXRlCisgKgorICogCVdyaXRlcyB0aGUgZ2l2ZW4gdmFsdWUgQHZhbCB0byB0aGUgbG93ZXIgYnl0ZSBvZiB0aGUgY29udHJvbC9zdGF0dXMKKyAqIAlyZWdpc3Rlci4gVGhlIHVwcGVyIGJ5dGUgaXMgc2V0IG1hbnVhbGx5IG9uIGVhY2ggd3JpdGUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzaF93ZHRfd3JpdGVfcnN0Y3NyKF9fdTggdmFsKQoreworCS8qCisJICogTm90ZTogRHVlIHRvIHRoZSBicmFpbi1kYW1hZ2VkIG5hdHVyZSBvZiB0aGlzIHJlZ2lzdGVyLAorCSAqIHdlIGNhbid0IHByZXNlbnRseSB0b3VjaCB0aGUgV09WRiBiaXQsIHNpbmNlIHRoZSB1cHBlciBieXRlCisJICogaGFzIHRvIGJlIHN3YXBwZWQgZm9yIHRoaXMuIFNvIGp1c3QgbGVhdmUgaXQgYWxvbmUuLgorCSAqLworCWN0cmxfb3V0dygoV1RDTlRfSElHSCA8PCA4KSB8IChfX3UxNil2YWwsIFJTVENTUik7Cit9CisKKyNlbmRpZiAvKiBfX0FTTV9DUFVfU0gyX1dBVENIRE9HX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvY3B1LXNoMy9hZGMuaCBiL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDMvYWRjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI4OWUzYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDMvYWRjLmgKQEAgLTAsMCArMSwyOCBAQAorI2lmbmRlZiBfX0FTTV9DUFVfU0gzX0FEQ19ICisjZGVmaW5lIF9fQVNNX0NQVV9TSDNfQURDX0gKKworLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCAgQW5kcml5IFNrdWx5c2gKKyAqLworCisKKyNkZWZpbmUgQUREUkFICTB4YTQwMDAwODAKKyNkZWZpbmUgQUREUkFMCTB4YTQwMDAwODIKKyNkZWZpbmUgQUREUkJICTB4YTQwMDAwODQKKyNkZWZpbmUgQUREUkJMCTB4YTQwMDAwODYKKyNkZWZpbmUgQUREUkNICTB4YTQwMDAwODgKKyNkZWZpbmUgQUREUkNMCTB4YTQwMDAwOGEKKyNkZWZpbmUgQUREUkRICTB4YTQwMDAwOGMKKyNkZWZpbmUgQUREUkRMCTB4YTQwMDAwOGUKKyNkZWZpbmUgQURDU1IJMHhhNDAwMDA5MAorCisjZGVmaW5lIEFEQ1NSX0FERgkweDgwCisjZGVmaW5lIEFEQ1NSX0FESUUJMHg0MAorI2RlZmluZSBBRENTUl9BRFNUCTB4MjAKKyNkZWZpbmUgQURDU1JfTVVMVEkJMHgxMAorI2RlZmluZSBBRENTUl9DS1MJMHgwOAorI2RlZmluZSBBRENTUl9DSF9NQVNLCTB4MDcKKworI2RlZmluZSBBRENSCTB4YTQwMDAwOTIKKworI2VuZGlmIC8qIF9fQVNNX0NQVV9TSDNfQURDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDMvYWRkcnNwYWNlLmggYi9pbmNsdWRlL2FzbS1zaC9jcHUtc2gzL2FkZHJzcGFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3MmU5ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9jcHUtc2gzL2FkZHJzcGFjZS5oCkBAIC0wLDAgKzEsMTYgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgYnkgS2F6IEtvamltYQorICoKKyAqIERlZml0aW9ucyBmb3IgdGhlIGFkZHJlc3Mgc3BhY2VzIG9mIHRoZSBTSC0zIENQVXMuCisgKi8KKyNpZm5kZWYgX19BU01fQ1BVX1NIM19BRERSU1BBQ0VfSAorI2RlZmluZSBfX0FTTV9DUFVfU0gzX0FERFJTUEFDRV9ICisKKy8qIFNob3VsZCBmaWxsIGhlcmUgKi8KKworI2VuZGlmIC8qIF9fQVNNX0NQVV9TSDNfQUREUlNQQUNFX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvY3B1LXNoMy9jYWNoZS5oIGIvaW5jbHVkZS9hc20tc2gvY3B1LXNoMy9jYWNoZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwNmFhOGQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9jcHUtc2gzL2NhY2hlLmgKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLXNoL2NwdS1zaDMvY2FjaGUuaAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBOaWliZSBZdXRha2EKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfX0FTTV9DUFVfU0gzX0NBQ0hFX0gKKyNkZWZpbmUgX19BU01fQ1BVX1NIM19DQUNIRV9ICisKKyNkZWZpbmUgTDFfQ0FDSEVfU0hJRlQJNAorCisjZGVmaW5lIENDUgkJMHhmZmZmZmZlYwkvKiBBZGRyZXNzIG9mIENhY2hlIENvbnRyb2wgUmVnaXN0ZXIgKi8KKworI2RlZmluZSBDQ1JfQ0FDSEVfQ0UJMHgwMQkvKiBDYWNoZSBFbmFibGUgKi8KKyNkZWZpbmUgQ0NSX0NBQ0hFX1dUCTB4MDIJLyogV3JpdGUtVGhyb3VnaCAoZm9yIFAwLFUwLFAzKSAoZWxzZSB3cml0ZWJhY2spICovCisjZGVmaW5lIENDUl9DQUNIRV9DQgkweDA0CS8qIFdyaXRlLUJhY2sgKGZvciBQMSkgKGVsc2Ugd3JpdGV0aHJvdWdoKSAqLworI2RlZmluZSBDQ1JfQ0FDSEVfQ0YJMHgwOAkvKiBDYWNoZSBGbHVzaCAqLworI2RlZmluZSBDQ1JfQ0FDSEVfT1JBCTB4MjAJLyogUkFNIG1vZGUgKi8KKworI2RlZmluZSBDQUNIRV9PQ19BRERSRVNTX0FSUkFZCTB4ZjAwMDAwMDAKKyNkZWZpbmUgQ0FDSEVfUEhZU0FERFJfTUFTSwkweDFmZmZmYzAwCisKKyNkZWZpbmUgQ0NSX0NBQ0hFX0VOQUJMRQlDQ1JfQ0FDSEVfQ0UKKyNkZWZpbmUgQ0NSX0NBQ0hFX0lOVkFMSURBVEUJQ0NSX0NBQ0hFX0NGCisKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDUpCisjZGVmaW5lIENDUjMJMHhhNDAwMDBiNAorI2RlZmluZSBDQ1JfQ0FDSEVfMTZLQiAgMHgwMDAxMDAwMAorI2RlZmluZSBDQ1JfQ0FDSEVfMzJLQgkweDAwMDIwMDAwCisjZW5kaWYKKworCisjZW5kaWYgLyogX19BU01fQ1BVX1NIM19DQUNIRV9IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDMvY2FjaGVmbHVzaC5oIGIvaW5jbHVkZS9hc20tc2gvY3B1LXNoMy9jYWNoZWZsdXNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjUxYWVkMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDMvY2FjaGVmbHVzaC5oCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1zaC9jcHUtc2gzL2NhY2hlZmx1c2guaAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBOaWliZSBZdXRha2EKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfX0FTTV9DUFVfU0gzX0NBQ0hFRkxVU0hfSAorI2RlZmluZSBfX0FTTV9DUFVfU0gzX0NBQ0hFRkxVU0hfSAorCisvKiAKKyAqIENhY2hlIGZsdXNoaW5nOgorICoKKyAqICAtIGZsdXNoX2NhY2hlX2FsbCgpIGZsdXNoZXMgZW50aXJlIGNhY2hlCisgKiAgLSBmbHVzaF9jYWNoZV9tbShtbSkgZmx1c2hlcyB0aGUgc3BlY2lmaWVkIG1tIGNvbnRleHQncyBjYWNoZSBsaW5lcworICogIC0gZmx1c2hfY2FjaGVfcGFnZShtbSwgdm1hZGRyLCBwZm4pIGZsdXNoZXMgYSBzaW5nbGUgcGFnZQorICogIC0gZmx1c2hfY2FjaGVfcmFuZ2Uodm1hLCBzdGFydCwgZW5kKSBmbHVzaGVzIGEgcmFuZ2Ugb2YgcGFnZXMKKyAqCisgKiAgLSBmbHVzaF9kY2FjaGVfcGFnZShwZykgZmx1c2hlcyh3YmFjayZpbnZhbGlkYXRlcykgYSBwYWdlIGZvciBkY2FjaGUKKyAqICAtIGZsdXNoX2ljYWNoZV9yYW5nZShzdGFydCwgZW5kKSBmbHVzaGVzKGludmFsaWRhdGVzKSBhIHJhbmdlIGZvciBpY2FjaGUKKyAqICAtIGZsdXNoX2ljYWNoZV9wYWdlKHZtYSwgcGcpIGZsdXNoZXMoaW52YWxpZGF0ZXMpIGEgcGFnZSBmb3IgaWNhY2hlCisgKgorICogIENhY2hlcyBhcmUgaW5kZXhlZCAoZWZmZWN0aXZlbHkpIGJ5IHBoeXNpY2FsIGFkZHJlc3Mgb24gU0gtMywgc28KKyAqICB3ZSBkb24ndCBuZWVkIHRoZW0uCisgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1NINzcwNV9DQUNIRV8zMktCKQorCisvKiBTSDc3MDUgaXMgYW4gU0gzIHByb2Nlc3NvciB3aXRoIDMyS0IgY2FjaGUuIFRoaXMgaGFzIGFsaWFzIGlzc3VlcyBsaWtlIHRoZQorICogU0g0LiBVbmxpa2UgdGhlIFNINCB0aGlzIGlzIGEgdW5pZmllZCBjYWNoZSBzbyB3ZSBuZWVkIHRvIGRvIHNvbWUgd29yaworICogaW4gbW1hcCB3aGVuICdleGVjJ2luZyBhIG5ldyBiaW5hcnkKKyAqLworIC8qIDMyS0IgY2FjaGUsIDRrYiBQQUdFIHNpemVzIG5lZWQgdG8gY2hlY2sgYml0IDEyICovCisjZGVmaW5lIENBQ0hFX0FMSUFTIDB4MDAwMDEwMDAKKworc3RydWN0IHBhZ2U7CitzdHJ1Y3QgbW1fc3RydWN0Oworc3RydWN0IHZtX2FyZWFfc3RydWN0OworCitleHRlcm4gdm9pZCBmbHVzaF9jYWNoZV9hbGwodm9pZCk7CitleHRlcm4gdm9pZCBmbHVzaF9jYWNoZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CitleHRlcm4gdm9pZCBmbHVzaF9jYWNoZV9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kKTsKK2V4dGVybiB2b2lkIGZsdXNoX2NhY2hlX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBwZm4pOworZXh0ZXJuIHZvaWQgZmx1c2hfZGNhY2hlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBnKTsKK2V4dGVybiB2b2lkIGZsdXNoX2ljYWNoZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7CitleHRlcm4gdm9pZCBmbHVzaF9pY2FjaGVfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHBhZ2UgKnBhZ2UpOworCisjZGVmaW5lIGZsdXNoX2RjYWNoZV9tbWFwX2xvY2sobWFwcGluZykJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfZGNhY2hlX21tYXBfdW5sb2NrKG1hcHBpbmcpCWRvIHsgfSB3aGlsZSAoMCkKKworLyogU0gzIGhhcyB1bmlmaWVkIGNhY2hlIHNvIG5vIHNwZWNpYWwgYWN0aW9uIG5lZWRlZCBoZXJlICovCisjZGVmaW5lIGZsdXNoX2NhY2hlX3NpZ3RyYW1wKHZhZGRyKQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9wYWdlX3RvX3JhbShwYWdlKQkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfaWNhY2hlX3VzZXJfcmFuZ2Uodm1hLHBnLGFkcixsZW4pCWRvIHsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBwM19jYWNoZV9pbml0KCkJCQkJZG8geyB9IHdoaWxlICgwKQorCisjZGVmaW5lIFBHX21hcHBlZAlQR19hcmNoXzEKKworLyogV2UgcHJvdmlkZSBvdXIgb3duIGdldF91bm1hcHBlZF9hcmVhIHRvIGF2b2lkIGNhY2hlIGFsaWFzIGlzc3VlICovCisjZGVmaW5lIEhBVkVfQVJDSF9VTk1BUFBFRF9BUkVBCisKKyNlbHNlCisKKyNkZWZpbmUgZmx1c2hfY2FjaGVfYWxsKCkJCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2NhY2hlX21tKG1tKQkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfcmFuZ2Uodm1hLCBzdGFydCwgZW5kKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2NhY2hlX3BhZ2Uodm1hLCB2bWFkZHIsIHBmbikJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9kY2FjaGVfcGFnZShwYWdlKQkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfZGNhY2hlX21tYXBfbG9jayhtYXBwaW5nKQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9kY2FjaGVfbW1hcF91bmxvY2sobWFwcGluZykJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9pY2FjaGVfcmFuZ2Uoc3RhcnQsIGVuZCkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfaWNhY2hlX3BhZ2Uodm1hLHBnKQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9pY2FjaGVfdXNlcl9yYW5nZSh2bWEscGcsYWRyLGxlbikJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9jYWNoZV9zaWd0cmFtcCh2YWRkcikJCWRvIHsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBwM19jYWNoZV9pbml0KCkJCQkJZG8geyB9IHdoaWxlICgwKQorCisjZGVmaW5lIEhBVkVfQVJDSF9VTk1BUFBFRF9BUkVBCisKKyNlbmRpZgorCisjZW5kaWYgLyogX19BU01fQ1BVX1NIM19DQUNIRUZMVVNIX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvY3B1LXNoMy9kYWMuaCBiL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDMvZGFjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVmZGE4MwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDMvZGFjLmgKQEAgLTAsMCArMSw0MSBAQAorI2lmbmRlZiBfX0FTTV9DUFVfU0gzX0RBQ19ICisjZGVmaW5lIF9fQVNNX0NQVV9TSDNfREFDX0gKKworLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMyAgQW5kcml5IFNrdWx5c2gKKyAqLworCisKKyNkZWZpbmUgREFEUjAJMHhhNDAwMDBhMAorI2RlZmluZSBEQURSMQkweGE0MDAwMGEyCisjZGVmaW5lIERBQ1IJMHhhNDAwMDBhNAorI2RlZmluZSBEQUNSX0RBT0UxCTB4ODAKKyNkZWZpbmUgREFDUl9EQU9FMAkweDQwCisjZGVmaW5lIERBQ1JfREFFCTB4MjAKKworCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHNoX2RhY19lbmFibGUoaW50IGNoYW5uZWwpCit7CisJdW5zaWduZWQgY2hhciB2OworCXYgPSBjdHJsX2luYihEQUNSKTsKKwlpZihjaGFubmVsKSB2IHw9IERBQ1JfREFPRTE7CisJZWxzZSB2IHw9IERBQ1JfREFPRTA7CisJY3RybF9vdXRiKHYsREFDUik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgc2hfZGFjX2Rpc2FibGUoaW50IGNoYW5uZWwpCit7CisJdW5zaWduZWQgY2hhciB2OworCXYgPSBjdHJsX2luYihEQUNSKTsKKwlpZihjaGFubmVsKSB2ICY9IH5EQUNSX0RBT0UxOworCWVsc2UgdiAmPSB+REFDUl9EQU9FMDsKKwljdHJsX291dGIodixEQUNSKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBzaF9kYWNfb3V0cHV0KHU4IHZhbHVlLCBpbnQgY2hhbm5lbCkKK3sKKwlpZihjaGFubmVsKSBjdHJsX291dGIodmFsdWUsREFEUjEpOworCWVsc2UgY3RybF9vdXRiKHZhbHVlLERBRFIwKTsKK30KKworI2VuZGlmIC8qIF9fQVNNX0NQVV9TSDNfREFDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDMvZG1hLmggYi9pbmNsdWRlL2FzbS1zaC9jcHUtc2gzL2RtYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5NzJlNzEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9jcHUtc2gzL2RtYS5oCkBAIC0wLDAgKzEsNyBAQAorI2lmbmRlZiBfX0FTTV9DUFVfU0gzX0RNQV9ICisjZGVmaW5lIF9fQVNNX0NQVV9TSDNfRE1BX0gKKworI2RlZmluZSBTSF9ETUFDX0JBU0UJMHhhNDAwMDAyMAorCisjZW5kaWYgLyogX19BU01fQ1BVX1NIM19ETUFfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9jcHUtc2gzL2ZyZXEuaCBiL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDMvZnJlcS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2MWI2ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9jcHUtc2gzL2ZyZXEuaApAQCAtMCwwICsxLDIyIEBACisvKgorICogaW5jbHVkZS9hc20tc2gvY3B1LXNoMy9mcmVxLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMgUGF1bCBNdW5kdAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9fQVNNX0NQVV9TSDNfRlJFUV9ICisjZGVmaW5lIF9fQVNNX0NQVV9TSDNfRlJFUV9ICisKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDczMDApCisjZGVmaW5lIEZSUUNSCQkJMHhhNDE1ZmY4MAorI2Vsc2UKKyNkZWZpbmUgRlJRQ1IJCQkweGZmZmZmZjgwCisjZW5kaWYKKyNkZWZpbmUgTUlOX0RJVklTT1JfTlIJCTAKKyNkZWZpbmUgTUFYX0RJVklTT1JfTlIJCTQKKworI2VuZGlmIC8qIF9fQVNNX0NQVV9TSDNfRlJFUV9IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDMvbW11X2NvbnRleHQuaCBiL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDMvbW11X2NvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2ZhYTZiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvY3B1LXNoMy9tbXVfY29udGV4dC5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1zaC9jcHUtc2gzL21tdV9jb250ZXh0LmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTmlpYmUgWXV0YWthCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX19BU01fQ1BVX1NIM19NTVVfQ09OVEVYVF9ICisjZGVmaW5lIF9fQVNNX0NQVV9TSDNfTU1VX0NPTlRFWFRfSAorCisjZGVmaW5lIE1NVV9QVEVICTB4RkZGRkZGRjAJLyogUGFnZSB0YWJsZSBlbnRyeSByZWdpc3RlciBISUdIICovCisjZGVmaW5lIE1NVV9QVEVMCTB4RkZGRkZGRjQJLyogUGFnZSB0YWJsZSBlbnRyeSByZWdpc3RlciBMT1cgKi8KKyNkZWZpbmUgTU1VX1RUQgkJMHhGRkZGRkZGOAkvKiBUcmFuc2xhdGlvbiB0YWJsZSBiYXNlIHJlZ2lzdGVyICovCisjZGVmaW5lIE1NVV9URUEJCTB4RkZGRkZGRkMJLyogVExCIEV4Y2VwdGlvbiBBZGRyZXNzICovCisKKyNkZWZpbmUgTU1VQ1IJCTB4RkZGRkZGRTAJLyogTU1VIENvbnRyb2wgUmVnaXN0ZXIgKi8KKworI2RlZmluZSBNTVVfVExCX0FERFJFU1NfQVJSQVkJMHhGMjAwMDAwMAorI2RlZmluZSBNTVVfUEFHRV9BU1NPQ19CSVQJMHg4MAorCisjZGVmaW5lIE1NVV9OVExCX0VOVFJJRVMJMTI4CS8qIGZvciA3NzA4ICovCisjZGVmaW5lIE1NVV9OVExCX1dBWVMJCTQKKyNkZWZpbmUgTU1VX0NPTlRST0xfSU5JVAkweDAwNwkvKiBTVj0wLCBURj0xLCBJWD0xLCBBVD0xICovCisKKyNlbmRpZiAvKiBfX0FTTV9DUFVfU0gzX01NVV9DT05URVhUX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvY3B1LXNoMy9ydGMuaCBiL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDMvcnRjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ5MjY2NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDMvcnRjLmgKQEAgLTAsMCArMSwyNSBAQAorI2lmbmRlZiBfX0FTTV9DUFVfU0gzX1JUQ19ICisjZGVmaW5lIF9fQVNNX0NQVV9TSDNfUlRDX0gKKworLyogU0gtMyBSVEMgKi8KKyNkZWZpbmUgUjY0Q05UICAJMHhmZmZmZmVjMAorI2RlZmluZSBSU0VDQ05UIAkweGZmZmZmZWMyCisjZGVmaW5lIFJNSU5DTlQgCTB4ZmZmZmZlYzQKKyNkZWZpbmUgUkhSQ05UICAJMHhmZmZmZmVjNgorI2RlZmluZSBSV0tDTlQgIAkweGZmZmZmZWM4CisjZGVmaW5lIFJEQVlDTlQgCTB4ZmZmZmZlY2EKKyNkZWZpbmUgUk1PTkNOVCAJMHhmZmZmZmVjYworI2RlZmluZSBSWVJDTlQgIAkweGZmZmZmZWNlCisjZGVmaW5lIFJTRUNBUiAgCTB4ZmZmZmZlZDAKKyNkZWZpbmUgUk1JTkFSICAJMHhmZmZmZmVkMgorI2RlZmluZSBSSFJBUiAgIAkweGZmZmZmZWQ0CisjZGVmaW5lIFJXS0FSICAgCTB4ZmZmZmZlZDYKKyNkZWZpbmUgUkRBWUFSICAJMHhmZmZmZmVkOAorI2RlZmluZSBSTU9OQVIgIAkweGZmZmZmZWRhCisjZGVmaW5lIFJDUjEgICAgCTB4ZmZmZmZlZGMKKyNkZWZpbmUgUkNSMiAgICAJMHhmZmZmZmVkZQorCisjZGVmaW5lIFJUQ19CSVRfSU5WRVJURUQJMAkvKiBObyBidWcgb24gU0g3NzA4LCBTSDc3MDlBICovCisKKyNlbmRpZiAvKiBfX0FTTV9DUFVfU0gzX1JUQ19IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDMvc2htcGFyYW0uaCBiL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDMvc2htcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTViNWVlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvY3B1LXNoMy9zaG1wYXJhbS5oCkBAIC0wLDAgKzEsMTYgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1zaC9jcHUtc2gzL3NobXBhcmFtLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTmlpYmUgWXV0YWthCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX19BU01fQ1BVX1NIM19TSE1QQVJBTV9ICisjZGVmaW5lIF9fQVNNX0NQVV9TSDNfU0hNUEFSQU1fSAorCisjZGVmaW5lCVNITUxCQSBQQUdFX1NJWkUJCSAvKiBhdHRhY2ggYWRkciBhIG11bHRpcGxlIG9mIHRoaXMgKi8KKworI2VuZGlmIC8qIF9fQVNNX0NQVV9TSDNfU0hNUEFSQU1fSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9jcHUtc2gzL3NpZ2NvbnRleHQuaCBiL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDMvc2lnY29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MzEwZGMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9jcHUtc2gzL3NpZ2NvbnRleHQuaApAQCAtMCwwICsxLDE3IEBACisjaWZuZGVmIF9fQVNNX0NQVV9TSDNfU0lHQ09OVEVYVF9ICisjZGVmaW5lIF9fQVNNX0NQVV9TSDNfU0lHQ09OVEVYVF9ICisKK3N0cnVjdCBzaWdjb250ZXh0IHsKKwl1bnNpZ25lZCBsb25nCW9sZG1hc2s7CisKKwkvKiBDUFUgcmVnaXN0ZXJzICovCisJdW5zaWduZWQgbG9uZyBzY19yZWdzWzE2XTsKKwl1bnNpZ25lZCBsb25nIHNjX3BjOworCXVuc2lnbmVkIGxvbmcgc2NfcHI7CisJdW5zaWduZWQgbG9uZyBzY19zcjsKKwl1bnNpZ25lZCBsb25nIHNjX2dicjsKKwl1bnNpZ25lZCBsb25nIHNjX21hY2g7CisJdW5zaWduZWQgbG9uZyBzY19tYWNsOworfTsKKworI2VuZGlmIC8qIF9fQVNNX0NQVV9TSDNfU0lHQ09OVEVYVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9jcHUtc2gzL3RpbWVyLmggYi9pbmNsdWRlL2FzbS1zaC9jcHUtc2gzL3RpbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q4ZTk1ZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDMvdGltZXIuaApAQCAtMCwwICsxLDY0IEBACisvKgorICogaW5jbHVkZS9hc20tc2gvY3B1LXNoMy90aW1lci5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IExpbmVvIFNvbHV0aW9ucywgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9fQVNNX0NQVV9TSDNfVElNRVJfSAorI2RlZmluZSBfX0FTTV9DUFVfU0gzX1RJTUVSX0gKKworLyoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVE1VIENvbW1vbiBkZWZpbml0aW9ucyBmb3IgU0gzIHByb2Nlc3NvcnMKKyAqCVNINzcwNgorICoJU0g3NzA5UworICoJU0g3NzI3CisgKglTSDc3MjlSCisgKglTSDc3MTAKKyAqCVNINzcyMAorICoJU0g3MzAwCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzAwKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTApCisjZGVmaW5lIFRNVV9UU1RSCTB4YTQxMmZlOTIJLyogQnl0ZSBhY2Nlc3MgKi8KKworI2RlZmluZSBUTVUwX1RDT1IJMHhhNDEyZmU5NAkvKiBMb25nIGFjY2VzcyAqLworI2RlZmluZSBUTVUwX1RDTlQJMHhhNDEyZmU5OAkvKiBMb25nIGFjY2VzcyAqLworI2RlZmluZSBUTVUwX1RDUgkweGE0MTJmZTljCS8qIFdvcmQgYWNjZXNzICovCisKKyNkZWZpbmUgVE1VMV9UQ09SCTB4YTQxMmZlYTAJLyogTG9uZyBhY2Nlc3MgKi8KKyNkZWZpbmUgVE1VMV9UQ05UCTB4YTQxMmZlYTQJLyogTG9uZyBhY2Nlc3MgKi8KKyNkZWZpbmUgVE1VMV9UQ1IJMHhhNDEyZmVhOAkvKiBXb3JkIGFjY2VzcyAqLworCisjZGVmaW5lIFRNVTJfVENPUgkweGE0MTJmZWFjCS8qIExvbmcgYWNjZXNzICovCisjZGVmaW5lIFRNVTJfVENOVAkweGE0MTJmZWIwCS8qIExvbmcgYWNjZXNzICovCisjZGVmaW5lIFRNVTJfVENSCTB4YTQxMmZlYjQJLyogV29yZCBhY2Nlc3MgKi8KKworI2Vsc2UKKyNpZiAhZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI3KQorI2RlZmluZSBUTVVfVE9DUgkweGZmZmZmZTkwCS8qIEJ5dGUgYWNjZXNzICovCisjZW5kaWYKKyNkZWZpbmUgVE1VX1RTVFIJMHhmZmZmZmU5MgkvKiBCeXRlIGFjY2VzcyAqLworCisjZGVmaW5lIFRNVTBfVENPUgkweGZmZmZmZTk0CS8qIExvbmcgYWNjZXNzICovCisjZGVmaW5lIFRNVTBfVENOVAkweGZmZmZmZTk4CS8qIExvbmcgYWNjZXNzICovCisjZGVmaW5lIFRNVTBfVENSCTB4ZmZmZmZlOWMJLyogV29yZCBhY2Nlc3MgKi8KKworI2RlZmluZSBUTVUxX1RDT1IJMHhmZmZmZmVhMAkvKiBMb25nIGFjY2VzcyAqLworI2RlZmluZSBUTVUxX1RDTlQJMHhmZmZmZmVhNAkvKiBMb25nIGFjY2VzcyAqLworI2RlZmluZSBUTVUxX1RDUgkweGZmZmZmZWE4CS8qIFdvcmQgYWNjZXNzICovCisKKyNkZWZpbmUgVE1VMl9UQ09SCTB4ZmZmZmZlYWMJLyogTG9uZyBhY2Nlc3MgKi8KKyNkZWZpbmUgVE1VMl9UQ05UCTB4ZmZmZmZlYjAJLyogTG9uZyBhY2Nlc3MgKi8KKyNkZWZpbmUgVE1VMl9UQ1IJMHhmZmZmZmViNAkvKiBXb3JkIGFjY2VzcyAqLworI2lmICFkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjcpCisjZGVmaW5lIFRNVTJfVENQUjIJMHhmZmZmZmViOAkvKiBMb25nIGFjY2VzcyAqLworI2VuZGlmCisjZW5kaWYKKworI2VuZGlmIC8qIF9fQVNNX0NQVV9TSDNfVElNRVJfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9jcHUtc2gzL3ViYy5oIGIvaW5jbHVkZS9hc20tc2gvY3B1LXNoMy91YmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjgwOWRlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvY3B1LXNoMy91YmMuaApAQCAtMCwwICsxLDI3IEBACisvKgorICogaW5jbHVkZS9hc20tc2gvY3B1LXNoMy91YmMuaAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBOaWliZSBZdXRha2EKKyAqIENvcHlyaWdodCAoQykgMjAwMyBQYXVsIE11bmR0CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX19BU01fQ1BVX1NIM19VQkNfSAorI2RlZmluZSBfX0FTTV9DUFVfU0gzX1VCQ19ICisKKyNkZWZpbmUgVUJDX0JBUkEgICAgICAgICAgICAgICAgMHhmZmZmZmZiMAorI2RlZmluZSBVQkNfQkFNUkEgICAgICAgICAgICAgICAweGZmZmZmZmI0CisjZGVmaW5lIFVCQ19CQlJBICAgICAgICAgICAgICAgIDB4ZmZmZmZmYjgKKyNkZWZpbmUgVUJDX0JBU1JBICAgICAgICAgICAgICAgMHhmZmZmZmZlNAorI2RlZmluZSBVQkNfQkFSQiAgICAgICAgICAgICAgICAweGZmZmZmZmEwCisjZGVmaW5lIFVCQ19CQU1SQiAgICAgICAgICAgICAgIDB4ZmZmZmZmYTQKKyNkZWZpbmUgVUJDX0JCUkIgICAgICAgICAgICAgICAgMHhmZmZmZmZhOAorI2RlZmluZSBVQkNfQkFTUkIgICAgICAgICAgICAgICAweGZmZmZmZmU4CisjZGVmaW5lIFVCQ19CRFJCICAgICAgICAgICAgICAgIDB4ZmZmZmZmOTAKKyNkZWZpbmUgVUJDX0JETVJCICAgICAgICAgICAgICAgMHhmZmZmZmY5NAorI2RlZmluZSBVQkNfQlJDUiAgICAgICAgICAgICAgICAweGZmZmZmZjk4CisKKyNlbmRpZiAvKiBfX0FTTV9DUFVfU0gzX1VCQ19IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDMvd2F0Y2hkb2cuaCBiL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDMvd2F0Y2hkb2cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWUwMzQ3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvY3B1LXNoMy93YXRjaGRvZy5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1zaC9jcHUtc2gzL3dhdGNoZG9nLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMgUGF1bCBNdW5kdAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9fQVNNX0NQVV9TSDNfV0FUQ0hET0dfSAorI2RlZmluZSBfX0FTTV9DUFVfU0gzX1dBVENIRE9HX0gKKworLyogUmVnaXN0ZXIgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgV1RDTlQJCTB4ZmZmZmZmODQKKyNkZWZpbmUgV1RDU1IJCTB4ZmZmZmZmODYKKworLyogQml0IGRlZmluaXRpb25zICovCisjZGVmaW5lIFdUQ1NSX1RNRQkweDgwCisjZGVmaW5lIFdUQ1NSX1dUCTB4NDAKKyNkZWZpbmUgV1RDU1JfUlNUUwkweDIwCisjZGVmaW5lIFdUQ1NSX1dPVkYJMHgxMAorI2RlZmluZSBXVENTUl9JT1ZGCTB4MDgKKworI2VuZGlmIC8qIF9fQVNNX0NQVV9TSDNfV0FUQ0hET0dfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9jcHUtc2g0L2FkZHJzcGFjZS5oIGIvaW5jbHVkZS9hc20tc2gvY3B1LXNoNC9hZGRyc3BhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Mjc2MzRkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvY3B1LXNoNC9hZGRyc3BhY2UuaApAQCAtMCwwICsxLDI2IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5IGJ5IEtheiBLb2ppbWEKKyAqCisgKiBEZWZpdGlvbnMgZm9yIHRoZSBhZGRyZXNzIHNwYWNlcyBvZiB0aGUgU0gtNCBDUFVzLgorICovCisjaWZuZGVmIF9fQVNNX0NQVV9TSDRfQUREUlNQQUNFX0gKKyNkZWZpbmUgX19BU01fQ1BVX1NINF9BRERSU1BBQ0VfSAorCisvKiBEZXRhaWxlZCBQNFNFRyAgKi8KKyNkZWZpbmUgUDRTRUdfU1RPUkVfUVVFCShQNFNFRykKKyNkZWZpbmUgUDRTRUdfSUNfQUREUgkweGYwMDAwMDAwCisjZGVmaW5lIFA0U0VHX0lDX0RBVEEJMHhmMTAwMDAwMAorI2RlZmluZSBQNFNFR19JVExCX0FERFIJMHhmMjAwMDAwMAorI2RlZmluZSBQNFNFR19JVExCX0RBVEEJMHhmMzAwMDAwMAorI2RlZmluZSBQNFNFR19PQ19BRERSCTB4ZjQwMDAwMDAKKyNkZWZpbmUgUDRTRUdfT0NfREFUQQkweGY1MDAwMDAwCisjZGVmaW5lIFA0U0VHX1RMQl9BRERSCTB4ZjYwMDAwMDAKKyNkZWZpbmUgUDRTRUdfVExCX0RBVEEJMHhmNzAwMDAwMAorI2RlZmluZSBQNFNFR19SRUdfQkFTRQkweGZmMDAwMDAwCisKKyNlbmRpZiAvKiBfX0FTTV9DUFVfU0g0X0FERFJTUEFDRV9IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDQvY2FjaGUuaCBiL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDQvY2FjaGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmUyMDM1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvY3B1LXNoNC9jYWNoZS5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1zaC9jcHUtc2g0L2NhY2hlLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTmlpYmUgWXV0YWthCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX19BU01fQ1BVX1NINF9DQUNIRV9ICisjZGVmaW5lIF9fQVNNX0NQVV9TSDRfQ0FDSEVfSAorCisjZGVmaW5lIEwxX0NBQ0hFX1NISUZUCTUKKworI2RlZmluZSBDQ1IJCTB4ZmYwMDAwMWMJLyogQWRkcmVzcyBvZiBDYWNoZSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIENDUl9DQUNIRV9PQ0UJMHgwMDAxCS8qIE9wZXJhbmQgQ2FjaGUgRW5hYmxlICovCisjZGVmaW5lIENDUl9DQUNIRV9XVAkweDAwMDIJLyogV3JpdGUtVGhyb3VnaCAoZm9yIFAwLFUwLFAzKSAoZWxzZSB3cml0ZWJhY2spKi8KKyNkZWZpbmUgQ0NSX0NBQ0hFX0NCCTB4MDAwNAkvKiBDb3B5LUJhY2sgKGZvciBQMSkgKGVsc2Ugd3JpdGV0aHJvdWdoKSAqLworI2RlZmluZSBDQ1JfQ0FDSEVfT0NJCTB4MDAwOAkvKiBPQyBJbnZhbGlkYXRlICovCisjZGVmaW5lIENDUl9DQUNIRV9PUkEJMHgwMDIwCS8qIE9DIFJBTSBNb2RlICovCisjZGVmaW5lIENDUl9DQUNIRV9PSVgJMHgwMDgwCS8qIE9DIEluZGV4IEVuYWJsZSAqLworI2RlZmluZSBDQ1JfQ0FDSEVfSUNFCTB4MDEwMAkvKiBJbnN0cnVjdGlvbiBDYWNoZSBFbmFibGUgKi8KKyNkZWZpbmUgQ0NSX0NBQ0hFX0lDSQkweDA4MDAJLyogSUMgSW52YWxpZGF0ZSAqLworI2RlZmluZSBDQ1JfQ0FDSEVfSUlYCTB4ODAwMAkvKiBJQyBJbmRleCBFbmFibGUgKi8KKyNkZWZpbmUgQ0NSX0NBQ0hFX0VNT0RFCTB4ODAwMDAwMDAJLyogRU1PREUgRW5hYmxlICovCisKKy8qIERlZmF1bHQgQ0NSIHNldHVwOiA4aysxNmstYnl0ZSBjYWNoZSxQMS13YixlbmFibGUgKi8KKyNkZWZpbmUgQ0NSX0NBQ0hFX0VOQUJMRQkoQ0NSX0NBQ0hFX09DRXxDQ1JfQ0FDSEVfSUNFKQorI2RlZmluZSBDQ1JfQ0FDSEVfSU5WQUxJREFURQkoQ0NSX0NBQ0hFX09DSXxDQ1JfQ0FDSEVfSUNJKQorCisjZGVmaW5lIENBQ0hFX0lDX0FERFJFU1NfQVJSQVkJMHhmMDAwMDAwMAorI2RlZmluZSBDQUNIRV9PQ19BRERSRVNTX0FSUkFZCTB4ZjQwMDAwMDAKKworI2VuZGlmIC8qIF9fQVNNX0NQVV9TSDRfQ0FDSEVfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9jcHUtc2g0L2NhY2hlZmx1c2guaCBiL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDQvY2FjaGVmbHVzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzMjM1NjcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9jcHUtc2g0L2NhY2hlZmx1c2guaApAQCAtMCwwICsxLDY0IEBACisvKgorICogaW5jbHVkZS9hc20tc2gvY3B1LXNoNC9jYWNoZWZsdXNoLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTmlpYmUgWXV0YWthCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgUGF1bCBNdW5kdAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9fQVNNX0NQVV9TSDRfQ0FDSEVGTFVTSF9ICisjZGVmaW5lIF9fQVNNX0NQVV9TSDRfQ0FDSEVGTFVTSF9ICisKKy8qCisgKiAgQ2FjaGVzIGFyZSBicm9rZW4gb24gU0gtNCAodW5sZXNzIHdlIHVzZSB3cml0ZS10aHJvdWdoCisgKiAgY2FjaGluZzsgaW4gd2hpY2ggY2FzZSB0aGV5J3JlIG9ubHkgc2VtaS1icm9rZW4pLAorICogIHNvIHdlIG5lZWQgdGhlbS4KKyAqLworCisvKiBQYWdlIGlzIDRLLCBPQyBzaXplIGlzIDE2SywgdGhlcmUgYXJlIGZvdXIgbGluZXMuICovCisjZGVmaW5lIENBQ0hFX0FMSUFTIDB4MDAwMDMwMDAKKworc3RydWN0IHBhZ2U7CitzdHJ1Y3QgbW1fc3RydWN0Oworc3RydWN0IHZtX2FyZWFfc3RydWN0OworCitleHRlcm4gdm9pZCBmbHVzaF9jYWNoZV9hbGwodm9pZCk7CitleHRlcm4gdm9pZCBmbHVzaF9jYWNoZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CitleHRlcm4gdm9pZCBmbHVzaF9jYWNoZV9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZW5kKTsKK2V4dGVybiB2b2lkIGZsdXNoX2NhY2hlX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBwZm4pOworZXh0ZXJuIHZvaWQgZmx1c2hfZGNhY2hlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBnKTsKKworI2RlZmluZSBmbHVzaF9kY2FjaGVfbW1hcF9sb2NrKG1hcHBpbmcpCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2RjYWNoZV9tbWFwX3VubG9jayhtYXBwaW5nKQlkbyB7IH0gd2hpbGUgKDApCisKK2V4dGVybiB2b2lkIGZsdXNoX2ljYWNoZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7CitleHRlcm4gdm9pZCBmbHVzaF9jYWNoZV9zaWd0cmFtcCh1bnNpZ25lZCBsb25nIGFkZHIpOworZXh0ZXJuIHZvaWQgZmx1c2hfaWNhY2hlX3VzZXJfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQkJICAgIHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkJICAgIGludCBsZW4pOworCisjZGVmaW5lIGZsdXNoX2ljYWNoZV9wYWdlKHZtYSxwZykJCWRvIHsgfSB3aGlsZSAoMCkKKworLyogSW5pdGlhbGl6YXRpb24gb2YgUDMgYXJlYSBmb3IgY29weV91c2VyX3BhZ2UgKi8KK2V4dGVybiB2b2lkIHAzX2NhY2hlX2luaXQodm9pZCk7CisKKyNkZWZpbmUgUEdfbWFwcGVkCVBHX2FyY2hfMQorCisvKiBXZSBwcm92aWRlIG91ciBvd24gZ2V0X3VubWFwcGVkX2FyZWEgdG8gYXZvaWQgY2FjaGUgYWxpYXMgaXNzdWUgKi8KKyNkZWZpbmUgSEFWRV9BUkNIX1VOTUFQUEVEX0FSRUEKKworI2lmZGVmIENPTkZJR19NTVUKK2V4dGVybiBpbnQgcmVtYXBfYXJlYV9wYWdlcyh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLAorCQkJICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBmbGFncyk7CisjZWxzZSAvKiBDT05GSUdfTU1VICovCitzdGF0aWMgaW5saW5lIGludCByZW1hcF9hcmVhX3BhZ2VzKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBwaHlzX2FkZHIsCisJCQkJICAgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXJldHVybiAwOworfQorI2VuZGlmIC8qIENPTkZJR19NTVUgKi8KKyNlbmRpZiAvKiBfX0FTTV9DUFVfU0g0X0NBQ0hFRkxVU0hfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9jcHUtc2g0L2RtYS5oIGIvaW5jbHVkZS9hc20tc2gvY3B1LXNoNC9kbWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmI5MWFkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvY3B1LXNoNC9kbWEuaApAQCAtMCwwICsxLDE3IEBACisjaWZuZGVmIF9fQVNNX0NQVV9TSDRfRE1BX0gKKyNkZWZpbmUgX19BU01fQ1BVX1NINF9ETUFfSAorCisjZGVmaW5lIFNIX0RNQUNfQkFTRQkweGZmYTAwMDAwCisKKyNkZWZpbmUgU0FSCSgodW5zaWduZWQgbG9uZ1tdKXtTSF9ETUFDX0JBU0UgKyAweDAwLCBTSF9ETUFDX0JBU0UgKyAweDEwLCBcCisJCQkJICAgU0hfRE1BQ19CQVNFICsgMHgyMCwgU0hfRE1BQ19CQVNFICsgMHgzMH0pCisjZGVmaW5lIERBUgkoKHVuc2lnbmVkIGxvbmdbXSl7U0hfRE1BQ19CQVNFICsgMHgwNCwgU0hfRE1BQ19CQVNFICsgMHgxNCwgXAorCQkJCSAgIFNIX0RNQUNfQkFTRSArIDB4MjQsIFNIX0RNQUNfQkFTRSArIDB4MzR9KQorI2RlZmluZSBETUFUQ1IJKCh1bnNpZ25lZCBsb25nW10pe1NIX0RNQUNfQkFTRSArIDB4MDgsIFNIX0RNQUNfQkFTRSArIDB4MTgsIFwKKwkJCQkgICBTSF9ETUFDX0JBU0UgKyAweDI4LCBTSF9ETUFDX0JBU0UgKyAweDM4fSkKKyNkZWZpbmUgQ0hDUgkoKHVuc2lnbmVkIGxvbmdbXSl7U0hfRE1BQ19CQVNFICsgMHgwYywgU0hfRE1BQ19CQVNFICsgMHgxYywgXAorCQkJCSAgIFNIX0RNQUNfQkFTRSArIDB4MmMsIFNIX0RNQUNfQkFTRSArIDB4M2N9KQorI2RlZmluZSBETUFPUgkoU0hfRE1BQ19CQVNFICsgMHg0MCkKKworI2VuZGlmIC8qIF9fQVNNX0NQVV9TSDRfRE1BX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvY3B1LXNoNC9mcmVxLmggYi9pbmNsdWRlL2FzbS1zaC9jcHUtc2g0L2ZyZXEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDFkOTRmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvY3B1LXNoNC9mcmVxLmgKQEAgLTAsMCArMSwyMiBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLXNoL2NwdS1zaDQvZnJlcS5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzIFBhdWwgTXVuZHQKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfX0FTTV9DUFVfU0g0X0ZSRVFfSAorI2RlZmluZSBfX0FTTV9DUFVfU0g0X0ZSRVFfSAorCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzE4MCkKKyNkZWZpbmUgRlJRQ1IJCSAgICAgICAgMHhhNDE1MDAwMAorI2Vsc2UKKyNkZWZpbmUgRlJRQ1IJCQkweGZmYzAwMDAwCisjZW5kaWYKKyNkZWZpbmUgTUlOX0RJVklTT1JfTlIJCTAKKyNkZWZpbmUgTUFYX0RJVklTT1JfTlIJCTMKKworI2VuZGlmIC8qIF9fQVNNX0NQVV9TSDRfRlJFUV9IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDQvbW11X2NvbnRleHQuaCBiL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDQvbW11X2NvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjY0ZDA0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvY3B1LXNoNC9tbXVfY29udGV4dC5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1zaC9jcHUtc2g0L21tdV9jb250ZXh0LmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTmlpYmUgWXV0YWthCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX19BU01fQ1BVX1NINF9NTVVfQ09OVEVYVF9ICisjZGVmaW5lIF9fQVNNX0NQVV9TSDRfTU1VX0NPTlRFWFRfSAorCisjZGVmaW5lIE1NVV9QVEVICTB4RkYwMDAwMDAJLyogUGFnZSB0YWJsZSBlbnRyeSByZWdpc3RlciBISUdIICovCisjZGVmaW5lIE1NVV9QVEVMCTB4RkYwMDAwMDQJLyogUGFnZSB0YWJsZSBlbnRyeSByZWdpc3RlciBMT1cgKi8KKyNkZWZpbmUgTU1VX1RUQgkJMHhGRjAwMDAwOAkvKiBUcmFuc2xhdGlvbiB0YWJsZSBiYXNlIHJlZ2lzdGVyICovCisjZGVmaW5lIE1NVV9URUEJCTB4RkYwMDAwMEMJLyogVExCIEV4Y2VwdGlvbiBBZGRyZXNzICovCisjZGVmaW5lIE1NVV9QVEVBCTB4RkYwMDAwMzQJLyogUGFnZSB0YWJsZSBlbnRyeSBhc3Npc3RhbmNlIHJlZ2lzdGVyICovCisKKyNkZWZpbmUgTU1VQ1IJCTB4RkYwMDAwMTAJLyogTU1VIENvbnRyb2wgUmVnaXN0ZXIgKi8KKworI2RlZmluZSBNTVVfSVRMQl9BRERSRVNTX0FSUkFZCTB4RjIwMDAwMDAKKyNkZWZpbmUgTU1VX1VUTEJfQUREUkVTU19BUlJBWQkweEY2MDAwMDAwCisjZGVmaW5lIE1NVV9QQUdFX0FTU09DX0JJVAkweDgwCisKKyNkZWZpbmUgTU1VX05UTEJfRU5UUklFUwk2NAkvKiBmb3IgNzc1MCAqLworI2RlZmluZSBNTVVfQ09OVFJPTF9JTklUCTB4MjA1CS8qIFNRTUQ9MSwgU1Y9MCwgVEk9MSwgQVQ9MSAqLworCisjZGVmaW5lIE1NVV9JVExCX0RBVEFfQVJSQVkJMHhGMzAwMDAwMAorI2RlZmluZSBNTVVfVVRMQl9EQVRBX0FSUkFZCTB4RjcwMDAwMDAKKworI2RlZmluZSBNTVVfVVRMQl9FTlRSSUVTCSAgIDY0CisjZGVmaW5lIE1NVV9VX0VOVFJZX1NISUZUCSAgICA4CisjZGVmaW5lIE1NVV9VVExCX1ZBTElECQkweDEwMAorI2RlZmluZSBNTVVfSVRMQl9FTlRSSUVTCSAgICA0CisjZGVmaW5lIE1NVV9JX0VOVFJZX1NISUZUCSAgICA4CisjZGVmaW5lIE1NVV9JVExCX1ZBTElECQkweDEwMAorCisjZW5kaWYgLyogX19BU01fQ1BVX1NINF9NTVVfQ09OVEVYVF9IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDQvcnRjLmggYi9pbmNsdWRlL2FzbS1zaC9jcHUtc2g0L3J0Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwOTFlMzIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9jcHUtc2g0L3J0Yy5oCkBAIC0wLDAgKzEsMjUgQEAKKyNpZm5kZWYgX19BU01fQ1BVX1NINF9SVENfSAorI2RlZmluZSBfX0FTTV9DUFVfU0g0X1JUQ19ICisKKy8qIFNILTQgUlRDICovCisjZGVmaW5lIFI2NENOVCAgCTB4ZmZjODAwMDAKKyNkZWZpbmUgUlNFQ0NOVCAJMHhmZmM4MDAwNAorI2RlZmluZSBSTUlOQ05UIAkweGZmYzgwMDA4CisjZGVmaW5lIFJIUkNOVCAgCTB4ZmZjODAwMGMKKyNkZWZpbmUgUldLQ05UICAJMHhmZmM4MDAxMAorI2RlZmluZSBSREFZQ05UIAkweGZmYzgwMDE0CisjZGVmaW5lIFJNT05DTlQgCTB4ZmZjODAwMTgKKyNkZWZpbmUgUllSQ05UICAJMHhmZmM4MDAxYyAgLyogMTZiaXQgKi8KKyNkZWZpbmUgUlNFQ0FSICAJMHhmZmM4MDAyMAorI2RlZmluZSBSTUlOQVIgIAkweGZmYzgwMDI0CisjZGVmaW5lIFJIUkFSICAgCTB4ZmZjODAwMjgKKyNkZWZpbmUgUldLQVIgICAJMHhmZmM4MDAyYworI2RlZmluZSBSREFZQVIgIAkweGZmYzgwMDMwCisjZGVmaW5lIFJNT05BUiAgCTB4ZmZjODAwMzQKKyNkZWZpbmUgUkNSMSAgICAJMHhmZmM4MDAzOAorI2RlZmluZSBSQ1IyICAgIAkweGZmYzgwMDNjCisKKyNkZWZpbmUgUlRDX0JJVF9JTlZFUlRFRAkweDQwCS8qIGJ1ZyBvbiBTSDc3NTAsIFNINzc1MFMgKi8KKworI2VuZGlmIC8qIF9fQVNNX0NQVV9TSDRfUlRDX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvY3B1LXNoNC9zaG1wYXJhbS5oIGIvaW5jbHVkZS9hc20tc2gvY3B1LXNoNC9zaG1wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1YTBhYTkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9jcHUtc2g0L3NobXBhcmFtLmgKQEAgLTAsMCArMSwxOSBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLXNoL2NwdS1zaDQvc2htcGFyYW0uaAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBOaWliZSBZdXRha2EKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfX0FTTV9DUFVfU0g0X1NITVBBUkFNX0gKKyNkZWZpbmUgX19BU01fQ1BVX1NINF9TSE1QQVJBTV9ICisKKy8qCisgKiBTSC00IGhhcyBELWNhY2hlIGFsaWFzIGlzc3VlCisgKi8KKyNkZWZpbmUJU0hNTEJBIChQQUdFX1NJWkUqNCkJCSAvKiBhdHRhY2ggYWRkciBhIG11bHRpcGxlIG9mIHRoaXMgKi8KKworI2VuZGlmIC8qIF9fQVNNX0NQVV9TSDRfU0hNUEFSQU1fSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9jcHUtc2g0L3NpZ2NvbnRleHQuaCBiL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDQvc2lnY29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiMzkyZjEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9jcHUtc2g0L3NpZ2NvbnRleHQuaApAQCAtMCwwICsxLDI0IEBACisjaWZuZGVmIF9fQVNNX0NQVV9TSDRfU0lHQ09OVEVYVF9ICisjZGVmaW5lIF9fQVNNX0NQVV9TSDRfU0lHQ09OVEVYVF9ICisKK3N0cnVjdCBzaWdjb250ZXh0IHsKKwl1bnNpZ25lZCBsb25nCW9sZG1hc2s7CisKKwkvKiBDUFUgcmVnaXN0ZXJzICovCisJdW5zaWduZWQgbG9uZyBzY19yZWdzWzE2XTsKKwl1bnNpZ25lZCBsb25nIHNjX3BjOworCXVuc2lnbmVkIGxvbmcgc2NfcHI7CisJdW5zaWduZWQgbG9uZyBzY19zcjsKKwl1bnNpZ25lZCBsb25nIHNjX2dicjsKKwl1bnNpZ25lZCBsb25nIHNjX21hY2g7CisJdW5zaWduZWQgbG9uZyBzY19tYWNsOworCisJLyogRlBVIHJlZ2lzdGVycyAqLworCXVuc2lnbmVkIGxvbmcgc2NfZnByZWdzWzE2XTsKKwl1bnNpZ25lZCBsb25nIHNjX3hmcHJlZ3NbMTZdOworCXVuc2lnbmVkIGludCBzY19mcHNjcjsKKwl1bnNpZ25lZCBpbnQgc2NfZnB1bDsKKwl1bnNpZ25lZCBpbnQgc2Nfb3duZWRmcDsKK307CisKKyNlbmRpZiAvKiBfX0FTTV9DUFVfU0g0X1NJR0NPTlRFWFRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvY3B1LXNoNC9zcS5oIGIvaW5jbHVkZS9hc20tc2gvY3B1LXNoNC9zcS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2NmIwOTEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9jcHUtc2g0L3NxLmgKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLXNoL2NwdS1zaDQvc3EuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMyAgUGF1bCBNdW5kdAorICogQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyICBNLiBSLiBCcm93bgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9fQVNNX0NQVV9TSDRfU1FfSAorI2RlZmluZSBfX0FTTV9DUFVfU0g0X1NRX0gKKworI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KKworLyoKKyAqIFN0b3JlIHF1ZXVlcyByYW5nZSBmcm9tIGUwMDAwMDAwLWUzZmZmZmZjLCBhbGxvd2luZyBhcHByb3guIDY0TUIgdG8gYmUKKyAqIG1hcHBlZCB0byBhbnkgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZS4gU2luY2UgZGF0YSBpcyB3cml0dGVuIChhbmQgYWxpZ25lZCkKKyAqIHRvIDMyLWJ5dGUgYm91bmRhcmllcywgd2UgbmVlZCB0byBiZSBzdXJlIHRoYXQgYWxsIGFsbG9jYXRpb25zIGFyZSBhbGlnbmVkLgorICovIAorI2RlZmluZSBTUV9TSVpFICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBTUV9BTElHTl9NQVNLICAgICAgICAgICAofihTUV9TSVpFIC0gMSkpCisjZGVmaW5lIFNRX0FMSUdOKGFkZHIpICAgICAgICAgICgoKGFkZHIpK1NRX1NJWkUtMSkgJiBTUV9BTElHTl9NQVNLKQorCisjZGVmaW5lIFNRX1FBQ1IwCQkoUDRTRUdfUkVHX0JBU0UgICsgMHgzOCkKKyNkZWZpbmUgU1FfUUFDUjEJCShQNFNFR19SRUdfQkFTRSAgKyAweDNjKQorI2RlZmluZSBTUV9BRERSTUFYICAgICAgICAgICAgICAoUDRTRUdfU1RPUkVfUVVFICsgMHgwNDAwMDAwMCkKKworc3RydWN0IHNxX21hcHBpbmcgeworCWNvbnN0IGNoYXIgKm5hbWU7CisKKwl1bnNpZ25lZCBsb25nIHNxX2FkZHI7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCXVuc2lnbmVkIGludCBzaXplOworCisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworfTsKKworLyogYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zcS5jICovCitleHRlcm4gc3RydWN0IHNxX21hcHBpbmcgKnNxX3JlbWFwKHVuc2lnbmVkIGxvbmcgcGh5cywgdW5zaWduZWQgaW50IHNpemUsIGNvbnN0IGNoYXIgKm5hbWUpOworZXh0ZXJuIHZvaWQgc3FfdW5tYXAoc3RydWN0IHNxX21hcHBpbmcgKm1hcCk7CisKK2V4dGVybiB2b2lkIHNxX2NsZWFyKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgaW50IGxlbik7CitleHRlcm4gdm9pZCBzcV9mbHVzaCh2b2lkICphZGRyKTsKK2V4dGVybiB2b2lkIHNxX2ZsdXNoX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGludCBsZW4pOworCisjZW5kaWYgLyogX19BU01fQ1BVX1NINF9TUV9IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDQvdGltZXIuaCBiL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDQvdGltZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTRhZjEyNmMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9jcHUtc2g0L3RpbWVyLmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLXNoL2NwdS1zaDQvdGltZXIuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBMaW5lbyBTb2x1dGlvbnMsIEluYy4gCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX19BU01fQ1BVX1NINF9USU1FUl9ICisjZGVmaW5lIF9fQVNNX0NQVV9TSDRfVElNRVJfSAorCisvKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBUTVUgQ29tbW9uIGRlZmluaXRpb25zIGZvciBTSDQgcHJvY2Vzc29ycworICoJU0g3NzUwUy9TSDc3NTBSCisgKglTSDc3NTEvU0g3NzUxUgorICoJU0g3NzYwCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaWYgIWRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MCkKKyNkZWZpbmUgVE1VX1RPQ1IgICAgICAgIDB4ZmZkODAwMDAgICAgICAvKiBCeXRlIGFjY2VzcyAqLworI2VuZGlmCisjZGVmaW5lIFRNVV9UU1RSICAgICAgICAweGZmZDgwMDA0ICAgICAgLyogQnl0ZSBhY2Nlc3MgKi8KKworI2RlZmluZSBUTVUwX1RDT1IgICAgICAgMHhmZmQ4MDAwOCAgICAgIC8qIExvbmcgYWNjZXNzICovCisjZGVmaW5lIFRNVTBfVENOVCAgICAgICAweGZmZDgwMDBjICAgICAgLyogTG9uZyBhY2Nlc3MgKi8KKyNkZWZpbmUgVE1VMF9UQ1IgICAgICAgIDB4ZmZkODAwMTAgICAgICAvKiBXb3JkIGFjY2VzcyAqLworCisjZGVmaW5lIFRNVTFfVENPUiAgICAgICAweGZmZDgwMDE0ICAgICAgLyogTG9uZyBhY2Nlc3MgKi8KKyNkZWZpbmUgVE1VMV9UQ05UICAgICAgIDB4ZmZkODAwMTggICAgICAvKiBMb25nIGFjY2VzcyAqLworI2RlZmluZSBUTVUxX1RDUiAgICAgICAgMHhmZmQ4MDAxYyAgICAgIC8qIFdvcmQgYWNjZXNzICovCisKKyNkZWZpbmUgVE1VMl9UQ09SICAgICAgIDB4ZmZkODAwMjAgICAgICAvKiBMb25nIGFjY2VzcyAqLworI2RlZmluZSBUTVUyX1RDTlQgICAgICAgMHhmZmQ4MDAyNCAgICAgIC8qIExvbmcgYWNjZXNzICovCisjZGVmaW5lIFRNVTJfVENSICAgICAgICAweGZmZDgwMDI4ICAgICAgLyogV29yZCBhY2Nlc3MgKi8KKyNkZWZpbmUgVE1VMl9UQ1BSCTB4ZmZkODAwMmMJLyogTG9uZyBhY2Nlc3MgKi8KKworI2lmICFkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjApCisjZGVmaW5lIFRNVTNfVENPUiAgICAgICAweGZlMTAwMDA4ICAgICAgLyogTG9uZyBhY2Nlc3MgKi8KKyNkZWZpbmUgVE1VM19UQ05UICAgICAgIDB4ZmUxMDAwMGMgICAgICAvKiBMb25nIGFjY2VzcyAqLworI2RlZmluZSBUTVUzX1RDUiAgICAgICAgMHhmZTEwMDAxMCAgICAgIC8qIFdvcmQgYWNjZXNzICovCisKKyNkZWZpbmUgVE1VNF9UQ09SICAgICAgIDB4ZmUxMDAwMTQgICAgICAvKiBMb25nIGFjY2VzcyAqLworI2RlZmluZSBUTVU0X1RDTlQgICAgICAgMHhmZTEwMDAxOCAgICAgIC8qIExvbmcgYWNjZXNzICovCisjZGVmaW5lIFRNVTRfVENSICAgICAgICAweGZlMTAwMDFjICAgICAgLyogV29yZCBhY2Nlc3MgKi8KKyNlbmRpZgorCisjZW5kaWYgLyogX19BU01fQ1BVX1NINF9USU1FUl9IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDQvdWJjLmggYi9pbmNsdWRlL2FzbS1zaC9jcHUtc2g0L3ViYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkMDk0MzEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9jcHUtc2g0L3ViYy5oCkBAIC0wLDAgKzEsMjcgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1zaC9jcHUtc2g0L3ViYy5oCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5IE5paWJlIFl1dGFrYQorICogQ29weXJpZ2h0IChDKSAyMDAzIFBhdWwgTXVuZHQKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfX0FTTV9DUFVfU0g0X1VCQ19ICisjZGVmaW5lIF9fQVNNX0NQVV9TSDRfVUJDX0gKKworI2RlZmluZSBVQkNfQkFSQQkJMHhmZjIwMDAwMAorI2RlZmluZSBVQkNfQkFNUkEJCTB4ZmYyMDAwMDQKKyNkZWZpbmUgVUJDX0JCUkEJCTB4ZmYyMDAwMDgKKyNkZWZpbmUgVUJDX0JBU1JBCQkweGZmMDAwMDE0CisjZGVmaW5lIFVCQ19CQVJCCQkweGZmMjAwMDBjCisjZGVmaW5lIFVCQ19CQU1SQgkJMHhmZjIwMDAxMAorI2RlZmluZSBVQkNfQkJSQgkJMHhmZjIwMDAxNAorI2RlZmluZSBVQkNfQkFTUkIJCTB4ZmYwMDAwMTgKKyNkZWZpbmUgVUJDX0JEUkIJCTB4ZmYyMDAwMTgKKyNkZWZpbmUgVUJDX0JETVJCCQkweGZmMjAwMDFjCisjZGVmaW5lIFVCQ19CUkNSCQkweGZmMjAwMDIwCisKKyNlbmRpZiAvKiBfX0FTTV9DUFVfU0g0X1VCQ19IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDQvd2F0Y2hkb2cuaCBiL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDQvd2F0Y2hkb2cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTlmNmEwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvY3B1LXNoNC93YXRjaGRvZy5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1zaC9jcHUtc2g0L3dhdGNoZG9nLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMgUGF1bCBNdW5kdAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9fQVNNX0NQVV9TSDRfV0FUQ0hET0dfSAorI2RlZmluZSBfX0FTTV9DUFVfU0g0X1dBVENIRE9HX0gKKworLyogUmVnaXN0ZXIgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgV1RDTlQJCTB4ZmZjMDAwMDgKKyNkZWZpbmUgV1RDU1IJCTB4ZmZjMDAwMGMKKworLyogQml0IGRlZmluaXRpb25zICovCisjZGVmaW5lIFdUQ1NSX1RNRQkweDgwCisjZGVmaW5lIFdUQ1NSX1dUCTB4NDAKKyNkZWZpbmUgV1RDU1JfUlNUUwkweDIwCisjZGVmaW5lIFdUQ1NSX1dPVkYJMHgxMAorI2RlZmluZSBXVENTUl9JT1ZGCTB4MDgKKworI2VuZGlmIC8qIF9fQVNNX0NQVV9TSDRfV0FUQ0hET0dfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9jcHV0aW1lLmggYi9pbmNsdWRlL2FzbS1zaC9jcHV0aW1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNhMzk1ZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL2NwdXRpbWUuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19TSF9DUFVUSU1FX0gKKyNkZWZpbmUgX19TSF9DUFVUSU1FX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2NwdXRpbWUuaD4KKworI2VuZGlmIC8qIF9fU0hfQ1BVVElNRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9jcXJlZWsvY3FyZWVrLmggYi9pbmNsdWRlL2FzbS1zaC9jcXJlZWsvY3FyZWVrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDlhZWNjMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL2NxcmVlay9jcXJlZWsuaApAQCAtMCwwICsxLDI3IEBACisjaWZuZGVmIF9fQVNNX1NIX0NRUkVFS19DUVJFRUtfSAorI2RlZmluZSBfX0FTTV9TSF9DUVJFRUtfQ1FSRUVLX0gKKworI2RlZmluZSBCUklER0VfRkVBVFVSRQkJMHgwMDAyCisKKyNkZWZpbmUgQlJJREdFX0lERV9DVFJMCQkweDAwMTgKKyNkZWZpbmUgQlJJREdFX0lERV9JTlRSX0xWTCAgICAJMHgwMDFBCisjZGVmaW5lIEJSSURHRV9JREVfSU5UUl9NQVNLCTB4MDAxQworI2RlZmluZSBCUklER0VfSURFX0lOVFJfU1RBVAkweDAwMUUKKworI2RlZmluZSBCUklER0VfSVNBX0NUUkwJCTB4MDAyOAorI2RlZmluZSBCUklER0VfSVNBX0lOVFJfTFZMICAgIAkweDAwMkEKKyNkZWZpbmUgQlJJREdFX0lTQV9JTlRSX01BU0sJMHgwMDJDCisjZGVmaW5lIEJSSURHRV9JU0FfSU5UUl9TVEFUCTB4MDAyRQorCisvKiBhcmNoL3NoL2JvYXJkcy9jcXJlZWsvc2V0dXAuYyAqLworZXh0ZXJuIHZvaWQgc2V0dXBfY3FyZWVrKHZvaWQpOworCisvKiBhcmNoL3NoL2JvYXJkcy9jcXJlZWsvaXJxLmMgKi8KK2V4dGVybiBpbnQgY3FyZWVrX2hhc19pZGUsIGNxcmVla19oYXNfaXNhOworZXh0ZXJuIHZvaWQgaW5pdF9jcXJlZWtfSVJRKHZvaWQpOworCisvKiBhcmNoL3NoL2JvYXJkcy9jcXJlZWsvaW8uYyAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgY3FyZWVrX3BvcnQyYWRkcih1bnNpZ25lZCBsb25nIHBvcnQpOworCisjZW5kaWYgLyogX19BU01fU0hfQ1FSRUVLX0NRUkVFS19IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2N1cnJlbnQuaCBiL2luY2x1ZGUvYXNtLXNoL2N1cnJlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmI2Mzg4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvY3VycmVudC5oCkBAIC0wLDAgKzEsMjAgQEAKKyNpZm5kZWYgX19BU01fU0hfQ1VSUkVOVF9ICisjZGVmaW5lIF9fQVNNX1NIX0NVUlJFTlRfSAorCisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5IE5paWJlIFl1dGFrYQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvdGhyZWFkX2luZm8uaD4KKworc3RydWN0IHRhc2tfc3RydWN0OworCitzdGF0aWMgX19pbmxpbmVfXyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBnZXRfY3VycmVudCh2b2lkKQoreworCXJldHVybiBjdXJyZW50X3RocmVhZF9pbmZvKCktPnRhc2s7Cit9CisKKyNkZWZpbmUgY3VycmVudCBnZXRfY3VycmVudCgpCisKKyNlbmRpZiAvKiBfX0FTTV9TSF9DVVJSRU5UX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2RlbGF5LmggYi9pbmNsdWRlL2FzbS1zaC9kZWxheS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiNTk5YjIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9kZWxheS5oCkBAIC0wLDAgKzEsMjcgQEAKKyNpZm5kZWYgX19BU01fU0hfREVMQVlfSAorI2RlZmluZSBfX0FTTV9TSF9ERUxBWV9ICisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTMgTGludXMgVG9ydmFsZHMKKyAqCisgKiBEZWxheSByb3V0aW5lcyBjYWxsaW5nIGZ1bmN0aW9ucyBpbiBhcmNoL3NoL2xpYi9kZWxheS5jCisgKi8KKyAKK2V4dGVybiB2b2lkIF9fYmFkX3VkZWxheSh2b2lkKTsKK2V4dGVybiB2b2lkIF9fYmFkX25kZWxheSh2b2lkKTsKKworZXh0ZXJuIHZvaWQgX191ZGVsYXkodW5zaWduZWQgbG9uZyB1c2Vjcyk7CitleHRlcm4gdm9pZCBfX25kZWxheSh1bnNpZ25lZCBsb25nIG5zZWNzKTsKK2V4dGVybiB2b2lkIF9fY29uc3RfdWRlbGF5KHVuc2lnbmVkIGxvbmcgdXNlY3MpOworZXh0ZXJuIHZvaWQgX19kZWxheSh1bnNpZ25lZCBsb25nIGxvb3BzKTsKKworI2RlZmluZSB1ZGVsYXkobikgKF9fYnVpbHRpbl9jb25zdGFudF9wKG4pID8gXAorCSgobikgPiAyMDAwMCA/IF9fYmFkX3VkZWxheSgpIDogX19jb25zdF91ZGVsYXkoKG4pICogMHgxMGM2dWwpKSA6IFwKKwlfX3VkZWxheShuKSkKKworCisjZGVmaW5lIG5kZWxheShuKSAoX19idWlsdGluX2NvbnN0YW50X3AobikgPyBcCisJKChuKSA+IDIwMDAwID8gX19iYWRfbmRlbGF5KCkgOiBfX2NvbnN0X3VkZWxheSgobikgKiA1dWwpKSA6IFwKKwlfX25kZWxheShuKSkKKworI2VuZGlmIC8qIF9fQVNNX1NIX0RFTEFZX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2RpdjY0LmggYi9pbmNsdWRlL2FzbS1zaC9kaXY2NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjZDk3OGMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9kaXY2NC5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9kaXY2NC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvZG1hLW1hcHBpbmcuaCBiL2luY2x1ZGUvYXNtLXNoL2RtYS1tYXBwaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBkMTY0YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL2RtYS1tYXBwaW5nLmgKQEAgLTAsMCArMSwxNzkgQEAKKyNpZm5kZWYgX19BU01fU0hfRE1BX01BUFBJTkdfSAorI2RlZmluZSBfX0FTTV9TSF9ETUFfTUFQUElOR19ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGFzbS9zY2F0dGVybGlzdC5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCitleHRlcm4gc3RydWN0IGJ1c190eXBlIHBjaV9idXNfdHlwZTsKKworLyogYXJjaC9zaC9tbS9jb25zaXN0ZW50LmMgKi8KK2V4dGVybiB2b2lkICpjb25zaXN0ZW50X2FsbG9jKGludCBnZnAsIHNpemVfdCBzaXplLCBkbWFfYWRkcl90ICpoYW5kbGUpOworZXh0ZXJuIHZvaWQgY29uc2lzdGVudF9mcmVlKHZvaWQgKnZhZGRyLCBzaXplX3Qgc2l6ZSk7CitleHRlcm4gdm9pZCBjb25zaXN0ZW50X3N5bmModm9pZCAqdmFkZHIsIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKTsKKworI2RlZmluZSBkbWFfc3VwcG9ydGVkKGRldiwgbWFzaykJKDEpCisKK3N0YXRpYyBpbmxpbmUgaW50IGRtYV9zZXRfbWFzayhzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBtYXNrKQoreworCWlmICghZGV2LT5kbWFfbWFzayB8fCAhZG1hX3N1cHBvcnRlZChkZXYsIG1hc2spKQorCQlyZXR1cm4gLUVJTzsKKworCSpkZXYtPmRtYV9tYXNrID0gbWFzazsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKmRtYV9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAorCQkJIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGludCBmbGFnKQoreworCWlmIChzaF9tdi5tdl9jb25zaXN0ZW50X2FsbG9jKSB7CisJCXZvaWQgKnJldDsKKworCQlyZXQgPSBzaF9tdi5tdl9jb25zaXN0ZW50X2FsbG9jKGRldiwgc2l6ZSwgZG1hX2hhbmRsZSwgZmxhZyk7CisJCWlmIChyZXQgIT0gTlVMTCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIGNvbnNpc3RlbnRfYWxsb2MoZmxhZywgc2l6ZSwgZG1hX2hhbmRsZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkbWFfZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAorCQkgICAgICAgdm9pZCAqdmFkZHIsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSkKK3sKKwlpZiAoc2hfbXYubXZfY29uc2lzdGVudF9mcmVlKSB7CisJCWludCByZXQ7CisKKwkJcmV0ID0gc2hfbXYubXZfY29uc2lzdGVudF9mcmVlKGRldiwgc2l6ZSwgdmFkZHIsIGRtYV9oYW5kbGUpOworCQlpZiAocmV0ID09IDApCisJCQlyZXR1cm47CisJfQorCisJY29uc2lzdGVudF9mcmVlKHZhZGRyLCBzaXplKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRtYV9jYWNoZV9zeW5jKHZvaWQgKnZhZGRyLCBzaXplX3Qgc2l6ZSwKKwkJCQkgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3sKKwljb25zaXN0ZW50X3N5bmModmFkZHIsIHNpemUsIChpbnQpZGlyKTsKK30KKworc3RhdGljIGlubGluZSBkbWFfYWRkcl90IGRtYV9tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwKKwkJCQkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQoreworI2lmIGRlZmluZWQoQ09ORklHX1BDSSkgJiYgIWRlZmluZWQoQ09ORklHX1NIX1BDSURNQV9OT05DT0hFUkVOVCkKKwlpZiAoZGV2LT5idXMgPT0gJnBjaV9idXNfdHlwZSkKKwkJcmV0dXJuIHZpcnRfdG9fYnVzKHB0cik7CisjZW5kaWYKKwlkbWFfY2FjaGVfc3luYyhwdHIsIHNpemUsIGRpcik7CisKKwlyZXR1cm4gdmlydF90b19idXMocHRyKTsKK30KKworI2RlZmluZSBkbWFfdW5tYXBfc2luZ2xlKGRldiwgYWRkciwgc2l6ZSwgZGlyKQlkbyB7IH0gd2hpbGUgKDApCisKK3N0YXRpYyBpbmxpbmUgaW50IGRtYV9tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCQkJICAgICBpbnQgbmVudHMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBuZW50czsgaSsrKSB7CisjaWYgIWRlZmluZWQoQ09ORklHX1BDSSkgfHwgZGVmaW5lZChDT05GSUdfU0hfUENJRE1BX05PTkNPSEVSRU5UKQorCQlkbWFfY2FjaGVfc3luYyhwYWdlX2FkZHJlc3Moc2dbaV0ucGFnZSkgKyBzZ1tpXS5vZmZzZXQsCisJCQkgICAgICAgc2dbaV0ubGVuZ3RoLCBkaXIpOworI2VuZGlmCisJCXNnW2ldLmRtYV9hZGRyZXNzID0gcGFnZV90b19waHlzKHNnW2ldLnBhZ2UpICsgc2dbaV0ub2Zmc2V0OworCX0KKworCXJldHVybiBuZW50czsKK30KKworI2RlZmluZSBkbWFfdW5tYXBfc2coZGV2LCBzZywgbmVudHMsIGRpcikJZG8geyB9IHdoaWxlICgwKQorCitzdGF0aWMgaW5saW5lIGRtYV9hZGRyX3QgZG1hX21hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLAorCQkJCSAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3sKKwlyZXR1cm4gZG1hX21hcF9zaW5nbGUoZGV2LCBwYWdlX2FkZHJlc3MocGFnZSkgKyBvZmZzZXQsIHNpemUsIGRpcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkbWFfdW5tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHJlc3MsCisJCQkJICBzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQoreworCWRtYV91bm1hcF9zaW5nbGUoZGV2LCBkbWFfYWRkcmVzcywgc2l6ZSwgZGlyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRtYV9zeW5jX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKKwkJCQkgICBzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQoreworI2lmIGRlZmluZWQoQ09ORklHX1BDSSkgJiYgIWRlZmluZWQoQ09ORklHX1NIX1BDSURNQV9OT05DT0hFUkVOVCkKKwlpZiAoZGV2LT5idXMgPT0gJnBjaV9idXNfdHlwZSkKKwkJcmV0dXJuOworI2VuZGlmCisJZG1hX2NhY2hlX3N5bmMoYnVzX3RvX3ZpcnQoZG1hX2hhbmRsZSksIHNpemUsIGRpcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkbWFfc3luY19zaW5nbGVfcmFuZ2Uoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAorCQkJCQkgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLAorCQkJCQkgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQoreworI2lmIGRlZmluZWQoQ09ORklHX1BDSSkgJiYgIWRlZmluZWQoQ09ORklHX1NIX1BDSURNQV9OT05DT0hFUkVOVCkKKwlpZiAoZGV2LT5idXMgPT0gJnBjaV9idXNfdHlwZSkKKwkJcmV0dXJuOworI2VuZGlmCisJZG1hX2NhY2hlX3N5bmMoYnVzX3RvX3ZpcnQoZG1hX2hhbmRsZSkgKyBvZmZzZXQsIHNpemUsIGRpcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkbWFfc3luY19zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJCQkgICAgICAgaW50IG5lbGVtcywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG5lbGVtczsgaSsrKSB7CisjaWYgIWRlZmluZWQoQ09ORklHX1BDSSkgfHwgZGVmaW5lZChDT05GSUdfU0hfUENJRE1BX05PTkNPSEVSRU5UKQorCQlkbWFfY2FjaGVfc3luYyhwYWdlX2FkZHJlc3Moc2dbaV0ucGFnZSkgKyBzZ1tpXS5vZmZzZXQsCisJCQkgICAgICAgc2dbaV0ubGVuZ3RoLCBkaXIpOworI2VuZGlmCisJCXNnW2ldLmRtYV9hZGRyZXNzID0gcGFnZV90b19waHlzKHNnW2ldLnBhZ2UpICsgc2dbaV0ub2Zmc2V0OworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIGRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJICAgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCBzaXplX3Qgc2l6ZSwKKwkJCQkJICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQorCV9fYXR0cmlidXRlX18gKChhbGlhcygiZG1hX3N5bmNfc2luZ2xlIikpKTsKKworc3RhdGljIGlubGluZSB2b2lkIGRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJICAgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCBzaXplX3Qgc2l6ZSwKKwkJCQkJICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQorCV9fYXR0cmlidXRlX18gKChhbGlhcygiZG1hX3N5bmNfc2luZ2xlIikpKTsKKworc3RhdGljIGlubGluZSB2b2lkIGRtYV9zeW5jX3NnX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVsZW1zLAorCQkJCSAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCisJX19hdHRyaWJ1dGVfXyAoKGFsaWFzKCJkbWFfc3luY19zZyIpKSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkbWFfc3luY19zZ19mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbGVtcywKKwkJCQkgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQorCV9fYXR0cmlidXRlX18gKChhbGlhcygiZG1hX3N5bmNfc2ciKSkpOworCitzdGF0aWMgaW5saW5lIGludCBkbWFfZ2V0X2NhY2hlX2FsaWdubWVudCh2b2lkKQoreworCS8qCisJICogRWFjaCBwcm9jZXNzb3IgZmFtaWx5IHdpbGwgZGVmaW5lIGl0cyBvd24gTDFfQ0FDSEVfU0hJRlQsCisJICogTDFfQ0FDSEVfQllURVMgd3JhcHMgdG8gdGhpcywgc28gdGhpcyBpcyBhbHdheXMgc2FmZS4KKwkgKi8KKwlyZXR1cm4gTDFfQ0FDSEVfQllURVM7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGRtYV9tYXBwaW5nX2Vycm9yKGRtYV9hZGRyX3QgZG1hX2FkZHIpCit7CisJcmV0dXJuIGRtYV9hZGRyID09IDA7Cit9CisKKyNlbmRpZiAvKiBfX0FTTV9TSF9ETUFfTUFQUElOR19IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2RtYS5oIGIvaW5jbHVkZS9hc20tc2gvZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU5NDM2MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL2RtYS5oCkBAIC0wLDAgKzEsMTQzIEBACisvKgorICogaW5jbHVkZS9hc20tc2gvZG1hLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQgIFBhdWwgTXVuZHQKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfX0FTTV9TSF9ETUFfSAorI2RlZmluZSBfX0FTTV9TSF9ETUFfSAorI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGFzbS9jcHUvZG1hLmg+CisjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgorCisvKiBUaGUgbWF4aW11bSBhZGRyZXNzIHRoYXQgd2UgY2FuIHBlcmZvcm0gYSBETUEgdHJhbnNmZXIgdG8gb24gdGhpcyBwbGF0Zm9ybSAqLworLyogRG9uJ3QgZGVmaW5lIE1BWF9ETUFfQUREUkVTUzsgaXQncyB1c2VsZXNzIG9uIHRoZSBTdXBlckggYW5kIGFueQorICAgb2NjdXJyZW5jZSBzaG91bGQgYmUgZmxhZ2dlZCBhcyBhbiBlcnJvci4gICovCisvKiBCdXQuLi4gKi8KKy8qIFhYWDogVGhpcyBpcyBub3QgYXBwbGljYWJsZSB0byBTdXBlckgsIGp1c3QgbmVlZGVkIGZvciBhbGxvY19ib290bWVtICovCisjZGVmaW5lIE1BWF9ETUFfQUREUkVTUwkJKFBBR0VfT0ZGU0VUKzB4MTAwMDAwMDApCisKKyNpZmRlZiBDT05GSUdfTlJfRE1BX0NIQU5ORUxTCisjICBkZWZpbmUgTUFYX0RNQV9DSEFOTkVMUwkoQ09ORklHX05SX0RNQV9DSEFOTkVMUykKKyNlbHNlCisjICBkZWZpbmUgTUFYX0RNQV9DSEFOTkVMUwkoQ09ORklHX05SX09OQ0hJUF9ETUFfQ0hBTk5FTFMpCisjZW5kaWYKKworLyoKKyAqIFJlYWQgYW5kIHdyaXRlIG1vZGVzIGNhbiBtZWFuIGRyYXN0aWNhbGx5IGRpZmZlcmVudCB0aGluZ3MgZGVwZW5kaW5nIG9uIHRoZQorICogY2hhbm5lbCBjb25maWd1cmF0aW9uLiBDb25zdWx0IHlvdXIgRE1BQyBkb2N1bWVudGF0aW9uIGFuZCBtb2R1bGUKKyAqIGltcGxlbWVudGF0aW9uIGZvciBmdXJ0aGVyIGNsdWVzLgorICovCisjZGVmaW5lIERNQV9NT0RFX1JFQUQJCTB4MDAKKyNkZWZpbmUgRE1BX01PREVfV1JJVEUJCTB4MDEKKyNkZWZpbmUgRE1BX01PREVfTUFTSwkJMHgwMQorCisjZGVmaW5lIERNQV9BVVRPSU5JVAkJMHgxMAorCisvKgorICogRE1BQyAoZG1hX2luZm8pIGZsYWdzCisgKi8KK2VudW0geworCURNQUNfQ0hBTk5FTFNfQ09ORklHVVJFRAk9IDB4MDAsCisJRE1BQ19DSEFOTkVMU19URUlfQ0FQQUJMRQk9IDB4MDEsCit9OworCisvKgorICogRE1BIGNoYW5uZWwgY2FwYWJpbGl0aWVzIC8gZmxhZ3MKKyAqLworZW51bSB7CisJRE1BX0NPTkZJR1VSRUQJCQk9IDB4MDAsCisJRE1BX1RFSV9DQVBBQkxFCQkJPSAweDAxLAorfTsKKworZXh0ZXJuIHNwaW5sb2NrX3QgZG1hX3NwaW5fbG9jazsKKworc3RydWN0IGRtYV9jaGFubmVsOworCitzdHJ1Y3QgZG1hX29wcyB7CisJaW50ICgqcmVxdWVzdCkoc3RydWN0IGRtYV9jaGFubmVsICpjaGFuKTsKKwl2b2lkICgqZnJlZSkoc3RydWN0IGRtYV9jaGFubmVsICpjaGFuKTsKKworCWludCAoKmdldF9yZXNpZHVlKShzdHJ1Y3QgZG1hX2NoYW5uZWwgKmNoYW4pOworCWludCAoKnhmZXIpKHN0cnVjdCBkbWFfY2hhbm5lbCAqY2hhbik7CisJdm9pZCAoKmNvbmZpZ3VyZSkoc3RydWN0IGRtYV9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKK307CisKK3N0cnVjdCBkbWFfY2hhbm5lbCB7CisJY2hhciBkZXZfaWRbMTZdOworCisJdW5zaWduZWQgaW50IGNoYW47CisJdW5zaWduZWQgaW50IG1vZGU7CisJdW5zaWduZWQgaW50IGNvdW50OworCisJdW5zaWduZWQgbG9uZyBzYXI7CisJdW5zaWduZWQgbG9uZyBkYXI7CisKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWF0b21pY190IGJ1c3k7CisKKwlzdHJ1Y3Qgc2VtYXBob3JlIHNlbTsKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0X3F1ZXVlOworCisJc3RydWN0IHN5c19kZXZpY2UgZGV2OworfTsKKworc3RydWN0IGRtYV9pbmZvIHsKKwljb25zdCBjaGFyICpuYW1lOworCXVuc2lnbmVkIGludCBucl9jaGFubmVsczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3RydWN0IGRtYV9vcHMgKm9wczsKKwlzdHJ1Y3QgZG1hX2NoYW5uZWwgKmNoYW5uZWxzOworCisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworfTsKKworI2RlZmluZSB0b19kbWFfY2hhbm5lbChjaGFubmVsKSBjb250YWluZXJfb2YoY2hhbm5lbCwgc3RydWN0IGRtYV9jaGFubmVsLCBkZXYpCisKKy8qIGFyY2gvc2gvZHJpdmVycy9kbWEvZG1hLWFwaS5jICovCitleHRlcm4gaW50IGRtYV94ZmVyKHVuc2lnbmVkIGludCBjaGFuLCB1bnNpZ25lZCBsb25nIGZyb20sCisJCSAgICB1bnNpZ25lZCBsb25nIHRvLCBzaXplX3Qgc2l6ZSwgdW5zaWduZWQgaW50IG1vZGUpOworCisjZGVmaW5lIGRtYV93cml0ZShjaGFuLCBmcm9tLCB0bywgc2l6ZSkJXAorCWRtYV94ZmVyKGNoYW4sIGZyb20sIHRvLCBzaXplLCBETUFfTU9ERV9XUklURSkKKyNkZWZpbmUgZG1hX3dyaXRlX3BhZ2UoY2hhbiwgZnJvbSwgdG8pCVwKKwlkbWFfd3JpdGUoY2hhbiwgZnJvbSwgdG8sIFBBR0VfU0laRSkKKworI2RlZmluZSBkbWFfcmVhZChjaGFuLCBmcm9tLCB0bywgc2l6ZSkJXAorCWRtYV94ZmVyKGNoYW4sIGZyb20sIHRvLCBzaXplLCBETUFfTU9ERV9SRUFEKQorI2RlZmluZSBkbWFfcmVhZF9wYWdlKGNoYW4sIGZyb20sIHRvKQlcCisJZG1hX3JlYWQoY2hhbiwgZnJvbSwgdG8sIFBBR0VfU0laRSkKKworZXh0ZXJuIGludCByZXF1ZXN0X2RtYSh1bnNpZ25lZCBpbnQgY2hhbiwgY29uc3QgY2hhciAqZGV2X2lkKTsKK2V4dGVybiB2b2lkIGZyZWVfZG1hKHVuc2lnbmVkIGludCBjaGFuKTsKK2V4dGVybiBpbnQgZ2V0X2RtYV9yZXNpZHVlKHVuc2lnbmVkIGludCBjaGFuKTsKK2V4dGVybiBzdHJ1Y3QgZG1hX2luZm8gKmdldF9kbWFfaW5mbyh1bnNpZ25lZCBpbnQgY2hhbik7CitleHRlcm4gc3RydWN0IGRtYV9jaGFubmVsICpnZXRfZG1hX2NoYW5uZWwodW5zaWduZWQgaW50IGNoYW4pOworZXh0ZXJuIHZvaWQgZG1hX3dhaXRfZm9yX2NvbXBsZXRpb24odW5zaWduZWQgaW50IGNoYW4pOworZXh0ZXJuIHZvaWQgZG1hX2NvbmZpZ3VyZV9jaGFubmVsKHVuc2lnbmVkIGludCBjaGFuLCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKKworZXh0ZXJuIGludCByZWdpc3Rlcl9kbWFjKHN0cnVjdCBkbWFfaW5mbyAqaW5mbyk7CitleHRlcm4gdm9pZCB1bnJlZ2lzdGVyX2RtYWMoc3RydWN0IGRtYV9pbmZvICppbmZvKTsKKworI2lmZGVmIENPTkZJR19TWVNGUworLyogYXJjaC9zaC9kcml2ZXJzL2RtYS9kbWEtc3lzZnMuYyAqLworZXh0ZXJuIGludCBkbWFfY3JlYXRlX3N5c2ZzX2ZpbGVzKHN0cnVjdCBkbWFfY2hhbm5lbCAqKTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1BDSQorZXh0ZXJuIGludCBpc2FfZG1hX2JyaWRnZV9idWdneTsKKyNlbHNlCisjZGVmaW5lIGlzYV9kbWFfYnJpZGdlX2J1Z2d5CSgwKQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYgLyogX19BU01fU0hfRE1BX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2RtaWRhL2lvLmggYi9pbmNsdWRlL2FzbS1zaC9kbWlkYS9pby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxYmQ0MTYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9kbWlkYS9pby5oCkBAIC0wLDAgKzEsMTAgQEAKKyNpZm5kZWYgX19BU01fU0hfRE1JREFfSU9fSAorI2RlZmluZSBfX0FTTV9TSF9ETUlEQV9JT19ICisKKy8qCisgKiBOb3RoaW5nIHNwZWNpYWwgaGVyZS4uIGp1c3QgdXNlIHRoZSBnZW5lcmljIGNjaGlwIGlvIHJvdXRpbmVzLgorICovCisjaW5jbHVkZSA8YXNtL2hkNjQ0NjUvaW8uaD4KKworI2VuZGlmIC8qIF9fQVNNX1NIX0RNSURBX0lPX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvZHJlYW1jYXN0L2RtYS5oIGIvaW5jbHVkZS9hc20tc2gvZHJlYW1jYXN0L2RtYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkZDY4ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9kcmVhbWNhc3QvZG1hLmgKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLXNoL2RyZWFtY2FzdC9kbWEuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMyBQYXVsIE11bmR0CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX19BU01fU0hfRFJFQU1DQVNUX0RNQV9ICisjZGVmaW5lIF9fQVNNX1NIX0RSRUFNQ0FTVF9ETUFfSAorCisvKiBOdW1iZXIgb2YgRE1BIGNoYW5uZWxzICovCisjZGVmaW5lIE9OQ0hJUF9OUl9ETUFfQ0hBTk5FTFMJNAorI2RlZmluZSBHMl9OUl9ETUFfQ0hBTk5FTFMJNAorI2RlZmluZSBQVlIyX05SX0RNQV9DSEFOTkVMUwkxCisKKy8qIENoYW5uZWxzIGZvciBjYXNjYWRpbmcgKi8KKyNkZWZpbmUgUFZSMl9DQVNDQURFX0NIQU4JMgorI2RlZmluZSBHMl9DQVNDQURFX0NIQU4JCTMKKworLyogUFZSMiBETUEgUmVnaXN0ZXJzICovCisjZGVmaW5lIFBWUjJfRE1BX0JBU0UJCTB4YTA1ZjY4MDAKKyNkZWZpbmUgUFZSMl9ETUFfQUREUgkJKFBWUjJfRE1BX0JBU0UgKyAwKQorI2RlZmluZSBQVlIyX0RNQV9DT1VOVAkJKFBWUjJfRE1BX0JBU0UgKyA0KQorI2RlZmluZSBQVlIyX0RNQV9NT0RFCQkoUFZSMl9ETUFfQkFTRSArIDgpCisjZGVmaW5lIFBWUjJfRE1BX0xNTU9ERTAJKFBWUjJfRE1BX0JBU0UgKyAxMzIpCisjZGVmaW5lIFBWUjJfRE1BX0xNTU9ERTEJKFBWUjJfRE1BX0JBU0UgKyAxMzYpCisKKy8qIEcyIERNQSBSZWdpc3RlciAqLworI2RlZmluZSBHMl9ETUFfQkFTRQkJMHhhMDVmNzgwMAorCisjZW5kaWYgLyogX19BU01fU0hfRFJFQU1DQVNUX0RNQV9IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2RyZWFtY2FzdC9wY2kuaCBiL2luY2x1ZGUvYXNtLXNoL2RyZWFtY2FzdC9wY2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDAxYjI0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvZHJlYW1jYXN0L3BjaS5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1zaC9kcmVhbWNhc3QvcGNpLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIgIE0uIFIuIEJyb3duCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMgIFBhdWwgTXVuZHQKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfX0FTTV9TSF9EUkVBTUNBU1RfUENJX0gKKyNkZWZpbmUgX19BU01fU0hfRFJFQU1DQVNUX1BDSV9ICisKKyNpbmNsdWRlIDxhc20vbWFjaC9zeXNhc2ljLmg+CisKKyNkZWZpbmUJR0FQU1BDSV9SRUdTCQkweDAxMDAxNDAwCisjZGVmaW5lIEdBUFNQQ0lfRE1BX0JBU0UJMHgwMTg0MDAwMAorI2RlZmluZSBHQVBTUENJX0RNQV9TSVpFCTMyNzY4CisjZGVmaW5lIEdBUFNQQ0lfQkJBX0NPTkZJRwkweDAxMDAxNjAwCisjZGVmaW5lIEdBUFNQQ0lfQkJBX0NPTkZJR19TSVpFCTB4MjAwMAorCisjZGVmaW5lCUdBUFNQQ0lfSVJRCQlIV19FVkVOVF9FWFRFUk5BTAorCisjZW5kaWYgLyogX19BU01fU0hfRFJFQU1DQVNUX1BDSV9IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2RyZWFtY2FzdC9zeXNhc2ljLmggYi9pbmNsdWRlL2FzbS1zaC9kcmVhbWNhc3Qvc3lzYXNpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4ODU4NTMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9kcmVhbWNhc3Qvc3lzYXNpYy5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qIGluY2x1ZGUvYXNtLXNoL2RjX3N5c2FzaWMuaAorICoKKyAqIERlZmluaXRpb25zIGZvciB0aGUgRHJlYW1jYXN0IFN5c3RlbSBBU0lDIGFuZCByZWxhdGVkIHBlcmlwaGVyYWxzLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMSBNLiBSLiBCcm93biA8bXJicm93bkBsaW51eGRjLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwMyBQYXVsIE11bmR0IDxsZXRoYWxAbGludXgtc2gub3JnPgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMaW51eERDIHByb2plY3QgKHd3dy5saW51eGRjLm9yZykKKyAqCisgKiBSZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgdjIuMC4KKyAqCisgKi8KKyNpZm5kZWYgX19BU01fU0hfRFJFQU1DQVNUX1NZU0FTSUNfSAorI2RlZmluZSBfX0FTTV9TSF9EUkVBTUNBU1RfU1lTQVNJQ19ICisKKyNpbmNsdWRlIDxhc20vaXJxLmg+CisKKy8qIEhhcmR3YXJlIGV2ZW50cyAtCisKKyAgIEVhY2ggb2YgdGhlc2UgZXZlbnRzIGNvcnJlc3BvbmQgdG8gYSBiaXQgd2l0aGluIHRoZSBFdmVudCBNYXNrIFJlZ2lzdGVycy8KKyAgIEV2ZW50IFN0YXR1cyBSZWdpc3RlcnMuICBCZWNhdXNlIG9mIHRoZSB2aXJ0dWFsIElSUSBudW1iZXJpbmcgc2NoZW1lLCBhCisgICBiYXNlIG9mZnNldCBtdXN0IGJlIHVzZWQgd2hlbiBjYWxjdWxhdGluZyB0aGUgdmlydHVhbCBJUlEgdGhhdCBlYWNoIGV2ZW50CisgICB0YWtlcy4KKyovCisKKyNkZWZpbmUgSFdfRVZFTlRfSVJRX0JBU0UgIE9GRkNISVBfSVJRX0JBU0UgLyogNDggKi8KKworLyogSVJRIDEzICovCisjZGVmaW5lIEhXX0VWRU5UX1ZTWU5DICAgICAoSFdfRVZFTlRfSVJRX0JBU0UgKyAgNSkgLyogVlN5bmMgKi8KKyNkZWZpbmUgSFdfRVZFTlRfTUFQTEVfRE1BIChIV19FVkVOVF9JUlFfQkFTRSArIDEyKSAvKiBNYXBsZSBETUEgY29tcGxldGUgKi8KKyNkZWZpbmUgSFdfRVZFTlRfR0RST01fRE1BIChIV19FVkVOVF9JUlFfQkFTRSArIDE0KSAvKiBHRC1ST00gRE1BIGNvbXBsZXRlICovCisjZGVmaW5lIEhXX0VWRU5UX0cyX0RNQSAgICAoSFdfRVZFTlRfSVJRX0JBU0UgKyAxNSkgLyogRzIgRE1BIGNvbXBsZXRlICovCisjZGVmaW5lIEhXX0VWRU5UX1BWUjJfRE1BICAoSFdfRVZFTlRfSVJRX0JBU0UgKyAxOSkgLyogUFZSMiBETUEgY29tcGxldGUgKi8KKworLyogSVJRIDExICovCisjZGVmaW5lIEhXX0VWRU5UX0dEUk9NX0NNRCAoSFdfRVZFTlRfSVJRX0JBU0UgKyAzMikgLyogR0QtUk9NIGNtZC4gY29tcGxldGUgKi8KKyNkZWZpbmUgSFdfRVZFTlRfQUlDQV9TWVMgIChIV19FVkVOVF9JUlFfQkFTRSArIDMzKSAvKiBBSUNBLXJlbGF0ZWQgKi8KKyNkZWZpbmUgSFdfRVZFTlRfRVhURVJOQUwgIChIV19FVkVOVF9JUlFfQkFTRSArIDM1KSAvKiBFeHQuIChleHBhbnNpb24pICovCisKKyNkZWZpbmUgSFdfRVZFTlRfSVJRX01BWCAoSFdfRVZFTlRfSVJRX0JBU0UgKyA5NSkKKworI2VuZGlmIC8qIF9fQVNNX1NIX0RSRUFNQ0FTVF9TWVNBU0lDX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvZWMzMTA0L2VjMzEwNC5oIGIvaW5jbHVkZS9hc20tc2gvZWMzMTA0L2VjMzEwNC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzOWNmYTQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9lYzMxMDQvZWMzMTA0LmgKQEAgLTAsMCArMSw0MyBAQAorI2lmbmRlZiBfX0FTTV9FQzMxMDRfSAorI2RlZmluZSBfX0FTTV9FQzMxMDRfSAorCisKKy8qCisgKiBNb3N0IG9mIHRoZSByZWdpc3RlciBzZXQgaXMgYXQgMHhiMGVjMDAwMCAtIDB4YjBlY2ZmZmYuCisgKgorICogYXMgZmFyIGFzIEkndmUgZmlndXJlZCBpdCBvdXQgdGhlIHJlZ2lzdGVyIG1hcCBpczoKKyAqIDB4YjBlYzAwMDAgLSBpZCBzdHJpbmcKKyAqIDB4YjBlYzBYWFggLSBwb3dlciBtYW5hZ2VtZW50CisgKiAweGIwZWMxWFhYIC0gaW50ZXJydXB0IGNvbnRyb2wKKyAqIDB4YjBlYzNYWFggLSBwczIgcG9ydCAodG91Y2ggcGFkIG9uIGFlcm8gODAwMCkKKyAqIDB4YjBlYzZYWFggLSBpMmMKKyAqIDB4YjBlYzcwMDAgLSBmaXJzdCBzZXJpYWwgcG9ydCAocHJvcHJpZXRhcnkgY29ubmVjdG9yIG9uIGFlcm8gODAwMCkKKyAqIDB4YjBlYzgwMDAgLSBzZWNvbmQgc2VyaWFsIHBvcnQKKyAqIDB4YjBlYzkwMDAgLSB0aGlyZCBzZXJpYWwgcG9ydAorICogMHhiMGVjYTAwMCAtIGZvdXJ0aCBzZXJpYWwgcG9ydCAoa2V5Ym9hcmQgY29udHJvbGxlciBvbiBhZXJvIDgwMDApCisgKiAweGIwZWNjWFhYIC0gR1BJTworICogMHhiMGVjZFhYWCAtIEdQSU8KKyAqLworCisjZGVmaW5lIEVDMzEwNF9CQVNFCTB4YjBlYzAwMDAKKworI2RlZmluZSBFQzMxMDRfU0VSNF9EQVRBCShFQzMxMDRfQkFTRSsweGEwMDApCisjZGVmaW5lIEVDMzEwNF9TRVI0X0lJUgkJKEVDMzEwNF9CQVNFKzB4YTAwOCkKKyNkZWZpbmUgRUMzMTA0X1NFUjRfTUNSCQkoRUMzMTA0X0JBU0UrMHhhMDEwKQorI2RlZmluZSBFQzMxMDRfU0VSNF9MU1IJCShFQzMxMDRfQkFTRSsweGEwMTQpCisjZGVmaW5lIEVDMzEwNF9TRVI0X01TUgkJKEVDMzEwNF9CQVNFKzB4YTAxOCkKKworLyoKKyAqIG91ciBJU0EgYnVzLiAgdGhpcyBzZWVtcyB0byBiZSByZWFsIElTQS4KKyAqLworI2RlZmluZSBFQzMxMDRfSVNBX0JBU0UJMHhhNTAwMDAwMAorCisjZGVmaW5lIEVDMzEwNF9JUlEJMTEKKyNkZWZpbmUgRUMzMTA0X0lSUUJBU0UJNjQKKworI2RlZmluZSBFQzMxMDRfSVJRX1NFUjEJRUMzMTA0X0lSUUJBU0UgKyA3CisjZGVmaW5lIEVDMzEwNF9JUlFfU0VSMglFQzMxMDRfSVJRQkFTRSArIDgKKyNkZWZpbmUgRUMzMTA0X0lSUV9TRVIzCUVDMzEwNF9JUlFCQVNFICsgOQorI2RlZmluZSBFQzMxMDRfSVJRX1NFUjQJRUMzMTA0X0lSUUJBU0UgKyAxMAorCisjZW5kaWYgLyogX19BU01fRUMzMTA0X0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2VjMzEwNC9pby5oIGIvaW5jbHVkZS9hc20tc2gvZWMzMTA0L2lvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE1YzhlNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL2VjMzEwNC9pby5oCkBAIC0wLDAgKzEsMTYgQEAKKyNpZm5kZWYgX0FTTV9TSF9JT19FQzMxMDRfSAorI2RlZmluZSBfQVNNX1NIX0lPX0VDMzEwNF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitleHRlcm4gdW5zaWduZWQgY2hhciBlYzMxMDRfaW5iKHVuc2lnbmVkIGxvbmcgcG9ydCk7CitleHRlcm4gdW5zaWduZWQgc2hvcnQgZWMzMTA0X2ludyh1bnNpZ25lZCBsb25nIHBvcnQpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZWMzMTA0X2lubCh1bnNpZ25lZCBsb25nIHBvcnQpOworCitleHRlcm4gdm9pZCBlYzMxMDRfb3V0Yih1bnNpZ25lZCBjaGFyIHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpOworZXh0ZXJuIHZvaWQgZWMzMTA0X291dHcodW5zaWduZWQgc2hvcnQgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCk7CitleHRlcm4gdm9pZCBlYzMxMDRfb3V0bCh1bnNpZ25lZCBsb25nIHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpOworCitleHRlcm4gaW50IGVjMzEwNF9pcnFfZGVtdXgoaW50IGlycSk7CisKKyNlbmRpZiAvKiBfQVNNX1NIX0lPX0VDMzEwNF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9lYzMxMDQva2V5Ym9hcmQuaCBiL2luY2x1ZGUvYXNtLXNoL2VjMzEwNC9rZXlib2FyZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkZWU3YjAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9lYzMxMDQva2V5Ym9hcmQuaApAQCAtMCwwICsxLDE3IEBACitleHRlcm4gdW5zaWduZWQgY2hhciBlYzMxMDRfa2JkX3N5c3JxX3hsYXRlW107CitleHRlcm4gaW50IGVjMzEwNF9rYmRfc2V0a2V5Y29kZSh1bnNpZ25lZCBpbnQgc2NhbmNvZGUsIHVuc2lnbmVkIGludCBrZXljb2RlKTsKK2V4dGVybiBpbnQgZWMzMTA0X2tiZF9nZXRrZXljb2RlKHVuc2lnbmVkIGludCBzY2FuY29kZSk7CitleHRlcm4gaW50IGVjMzEwNF9rYmRfdHJhbnNsYXRlKHVuc2lnbmVkIGNoYXIsIHVuc2lnbmVkIGNoYXIgKiwgY2hhcik7CitleHRlcm4gY2hhciBlYzMxMDRfa2JkX3VuZXhwZWN0ZWRfdXAodW5zaWduZWQgY2hhcik7CitleHRlcm4gdm9pZCBlYzMxMDRfa2JkX2xlZHModW5zaWduZWQgY2hhcik7CitleHRlcm4gdm9pZCBlYzMxMDRfa2JkX2luaXRfaHcodm9pZCk7CisKKyNkZWZpbmUgU1lTUlFfS0VZIDB4NTQKKworI2RlZmluZSBrYmRfc3lzcnFfeGxhdGUgZWMzMTA0X2tiZF9zeXNycV94bGF0ZQorI2RlZmluZSBrYmRfc2V0a2V5Y29kZSBlYzMxMDRfa2JkX3NldGtleWNvZGUKKyNkZWZpbmUga2JkX2dldGtleWNvZGUgZWMzMTA0X2tiZF9nZXRrZXljb2RlCisjZGVmaW5lIGtiZF90cmFuc2xhdGUgZWMzMTA0X2tiZF90cmFuc2xhdGUKKyNkZWZpbmUga2JkX3VuZXhwZWN0ZWRfdXAgZWMzMTA0X2tiZF91bmV4cGVjdGVkX3VwCisjZGVmaW5lIGtiZF9sZWRzIGVjMzEwNF9rYmRfbGVkcworI2RlZmluZSBrYmRfaW5pdF9odyBlYzMxMDRfa2JkX2luaXRfaHcKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2VjMzEwNC9zZXJpYWwuaCBiL2luY2x1ZGUvYXNtLXNoL2VjMzEwNC9zZXJpYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOGViMTYzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvZWMzMTA0L3NlcmlhbC5oCkBAIC0wLDAgKzEsMjIgQEAKKyNpbmNsdWRlIDxhc20vZWMzMTA0Lmg+CisvKiBOYXR1cmFsbHkgd2UgZG9uJ3Qga25vdyB0aGUgZXhhY3QgdmFsdWUgYnV0IDExNTIwMCBiYXVkIGhhcyBhIGRpdmlzb3IKKyAqIG9mIDkgYW5kIDE5MjAwIGJhdWQgaGFzIGEgZGl2aXNvciBvZiA1Miwgc28gdGhpcyBzZWVtcyBsaWtlIGEgZ29vZAorICogZ3Vlc3MuICAqLworI2RlZmluZSBCQVNFX0JBVUQgKDE2ODAwMDAwIC8gMTYpCisKKyNkZWZpbmUgU1REX0NPTV9GTEFHUyAoQVNZTkNfQk9PVF9BVVRPQ09ORiB8IEFTWU5DX1NLSVBfVEVTVCkKKworLyogdGhlcmUgaXMgYSBmb3VydGggc2VyaWFsIHBvcnQgd2l0aCB0aGUgZXhwZWN0ZWQgdmFsdWVzIGFzIHdlbGwsIGJ1dAorICogaXQncyBnb3QgdGhlIGtleWJvYXJkIGNvbnRyb2xsZXIgYmVoaW5kIGl0IHNvIHdlIGNhbid0IHJlYWxseSB1c2UgaXQKKyAqICh3aXRob3V0IG1vdmluZyB0aGUga2V5Ym9hcmQgZHJpdmVyIHRvIHVzZXJzcGFjZSwgd2hpY2ggZG9lc24ndCBzb3VuZAorICogbGlrZSBhIHZlcnkgZ29vZCBpZGVhKSAqLworI2RlZmluZSBTVERfU0VSSUFMX1BPUlRfREVGTlMJCQlcCisJLyogVUFSVCBDTEsgICBQT1JUIElSUSAgICAgRkxBR1MgICAgICAgICovCQkJXAorCXsgMCwgQkFTRV9CQVVELCAweDExQzAwLCBFQzMxMDRfSVJRQkFTRSs3LCBTVERfQ09NX0ZMQUdTIH0sIC8qIHR0eVMwICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgxMjAwMCwgRUMzMTA0X0lSUUJBU0UrOCwgU1REX0NPTV9GTEFHUyB9LCAvKiB0dHlTMSAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MTI0MDAsIEVDMzEwNF9JUlFCQVNFKzksIFNURF9DT01fRkxBR1MgfSwgLyogdHR5UzIgKi8KKworI2RlZmluZSBTRVJJQUxfUE9SVF9ERk5TIFNURF9TRVJJQUxfUE9SVF9ERUZOUworCisvKiBYWFg6IFRoaXMgc2hvdWxkIGJlIG1vdmVkIGlubyBpcnEuaCAqLworI2RlZmluZSBpcnFfY2Fubm9uaWNhbGl6ZSh4KSAoeCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2Vkb3NrNzcwNS9pby5oIGIvaW5jbHVkZS9hc20tc2gvZWRvc2s3NzA1L2lvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTEwODlhNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL2Vkb3NrNzcwNS9pby5oCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1zaC9lZG9zazc3MDUvaW8uaAorICoKKyAqIE1vZGlmaWVkIHZlcnNpb24gb2YgaW9fc2UuaCBmb3IgdGhlIEVET1NLNzcwNSBzcGVjaWZpYyBmdW5jdGlvbnMuCisgKgorICogTWF5IGJlIGNvcGllZCBvciBtb2RpZmllZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSBsaW51eC9DT1BZSU5HIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICoKKyAqIElPIGZ1bmN0aW9ucyBmb3IgYW4gSGl0YWNoaSBFRE9TSzc3MDUgZGV2ZWxvcG1lbnQgYm9hcmQKKyAqLworCisjaWZuZGVmIF9fQVNNX1NIX0VET1NLNzcwNV9JT19ICisjZGVmaW5lIF9fQVNNX1NIX0VET1NLNzcwNV9JT19ICisKKyNpbmNsdWRlIDxhc20vaW9fZ2VuZXJpYy5oPgorCitleHRlcm4gdW5zaWduZWQgY2hhciBzaF9lZG9zazc3MDVfaW5iKHVuc2lnbmVkIGxvbmcgcG9ydCk7CitleHRlcm4gdW5zaWduZWQgaW50IHNoX2Vkb3NrNzcwNV9pbmwodW5zaWduZWQgbG9uZyBwb3J0KTsKKworZXh0ZXJuIHZvaWQgc2hfZWRvc2s3NzA1X291dGIodW5zaWduZWQgY2hhciB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KTsKK2V4dGVybiB2b2lkIHNoX2Vkb3NrNzcwNV9vdXRsKHVuc2lnbmVkIGludCB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KTsKKworZXh0ZXJuIHZvaWQgc2hfZWRvc2s3NzA1X2luc2IodW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKK2V4dGVybiB2b2lkIHNoX2Vkb3NrNzcwNV9pbnNsKHVuc2lnbmVkIGxvbmcgcG9ydCwgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCk7CitleHRlcm4gdm9pZCBzaF9lZG9zazc3MDVfb3V0c2IodW5zaWduZWQgbG9uZyBwb3J0LCBjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKK2V4dGVybiB2b2lkIHNoX2Vkb3NrNzcwNV9vdXRzbCh1bnNpZ25lZCBsb25nIHBvcnQsIGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpOworCitleHRlcm4gdW5zaWduZWQgbG9uZyBzaF9lZG9zazc3MDVfaXNhX3BvcnQyYWRkcih1bnNpZ25lZCBsb25nIG9mZnNldCk7CisKKyNlbmRpZiAvKiBfX0FTTV9TSF9FRE9TSzc3MDVfSU9fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvZWxmLmggYi9pbmNsdWRlL2FzbS1zaC9lbGYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmUwMGExCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvZWxmLmgKQEAgLTAsMCArMSwxMjEgQEAKKyNpZm5kZWYgX19BU01fU0hfRUxGX0gKKyNkZWZpbmUgX19BU01fU0hfRUxGX0gKKworLyogU0ggcmVsb2NhdGlvbiB0eXBlcyAgKi8KKyNkZWZpbmUJUl9TSF9OT05FCQkwCisjZGVmaW5lCVJfU0hfRElSMzIJCTEKKyNkZWZpbmUJUl9TSF9SRUwzMgkJMgorI2RlZmluZQlSX1NIX0RJUjhXUE4JCTMKKyNkZWZpbmUJUl9TSF9JTkQxMlcJCTQKKyNkZWZpbmUJUl9TSF9ESVI4V1BMCQk1CisjZGVmaW5lCVJfU0hfRElSOFdQWgkJNgorI2RlZmluZQlSX1NIX0RJUjhCUAkJNworI2RlZmluZQlSX1NIX0RJUjhXCQk4CisjZGVmaW5lCVJfU0hfRElSOEwJCTkKKyNkZWZpbmUJUl9TSF9TV0lUQ0gxNgkJMjUKKyNkZWZpbmUJUl9TSF9TV0lUQ0gzMgkJMjYKKyNkZWZpbmUJUl9TSF9VU0VTCQkyNworI2RlZmluZQlSX1NIX0NPVU5UCQkyOAorI2RlZmluZQlSX1NIX0FMSUdOCQkyOQorI2RlZmluZQlSX1NIX0NPREUJCTMwCisjZGVmaW5lCVJfU0hfREFUQQkJMzEKKyNkZWZpbmUJUl9TSF9MQUJFTAkJMzIKKyNkZWZpbmUJUl9TSF9TV0lUQ0g4CQkzMworI2RlZmluZQlSX1NIX0dOVV9WVElOSEVSSVQJMzQKKyNkZWZpbmUJUl9TSF9HTlVfVlRFTlRSWQkzNQorI2RlZmluZQlSX1NIX1RMU19HRF8zMgkJMTQ0CisjZGVmaW5lCVJfU0hfVExTX0xEXzMyCQkxNDUKKyNkZWZpbmUJUl9TSF9UTFNfTERPXzMyCQkxNDYKKyNkZWZpbmUJUl9TSF9UTFNfSUVfMzIJCTE0NworI2RlZmluZQlSX1NIX1RMU19MRV8zMgkJMTQ4CisjZGVmaW5lCVJfU0hfVExTX0RUUE1PRDMyCTE0OQorI2RlZmluZQlSX1NIX1RMU19EVFBPRkYzMgkxNTAKKyNkZWZpbmUJUl9TSF9UTFNfVFBPRkYzMgkxNTEKKyNkZWZpbmUJUl9TSF9HT1QzMgkJMTYwCisjZGVmaW5lCVJfU0hfUExUMzIJCTE2MQorI2RlZmluZQlSX1NIX0NPUFkJCTE2MgorI2RlZmluZQlSX1NIX0dMT0JfREFUCQkxNjMKKyNkZWZpbmUJUl9TSF9KTVBfU0xPVAkJMTY0CisjZGVmaW5lCVJfU0hfUkVMQVRJVkUJCTE2NQorI2RlZmluZQlSX1NIX0dPVE9GRgkJMTY2CisjZGVmaW5lCVJfU0hfR09UUEMJCTE2NworLyogS2VlcCB0aGlzIHRoZSBsYXN0IGVudHJ5LiAgKi8KKyNkZWZpbmUJUl9TSF9OVU0JCTI1NgorCisvKgorICogRUxGIHJlZ2lzdGVyIGRlZmluaXRpb25zLi4KKyAqLworCisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS91c2VyLmg+CisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBlbGZfZ3JlZ190OworCisjZGVmaW5lIEVMRl9OR1JFRyAoc2l6ZW9mIChzdHJ1Y3QgcHRfcmVncykgLyBzaXplb2YoZWxmX2dyZWdfdCkpCit0eXBlZGVmIGVsZl9ncmVnX3QgZWxmX2dyZWdzZXRfdFtFTEZfTkdSRUddOworCit0eXBlZGVmIHN0cnVjdCB1c2VyX2ZwdV9zdHJ1Y3QgZWxmX2ZwcmVnc2V0X3Q7CisKKy8qCisgKiBUaGlzIGlzIHVzZWQgdG8gZW5zdXJlIHdlIGRvbid0IGxvYWQgc29tZXRoaW5nIGZvciB0aGUgd3JvbmcgYXJjaGl0ZWN0dXJlLgorICovCisjZGVmaW5lIGVsZl9jaGVja19hcmNoKHgpICggKHgpLT5lX21hY2hpbmUgPT0gRU1fU0ggKQorCisvKgorICogVGhlc2UgYXJlIHVzZWQgdG8gc2V0IHBhcmFtZXRlcnMgaW4gdGhlIGNvcmUgZHVtcHMuCisgKi8KKyNkZWZpbmUgRUxGX0NMQVNTCUVMRkNMQVNTMzIKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSBFTEZfREFUQQlFTEZEQVRBMkxTQgorI2Vsc2UKKyNkZWZpbmUgRUxGX0RBVEEJRUxGREFUQTJNU0IKKyNlbmRpZgorI2RlZmluZSBFTEZfQVJDSAlFTV9TSAorCisjZGVmaW5lIFVTRV9FTEZfQ09SRV9EVU1QCisjZGVmaW5lIEVMRl9FWEVDX1BBR0VTSVpFCTQwOTYKKworLyogVGhpcyBpcyB0aGUgbG9jYXRpb24gdGhhdCBhbiBFVF9EWU4gcHJvZ3JhbSBpcyBsb2FkZWQgaWYgZXhlYydlZC4gIFR5cGljYWwKKyAgIHVzZSBvZiB0aGlzIGlzIHRvIGludm9rZSAiLi9sZC5zbyBzb21lcHJvZyIgdG8gdGVzdCBvdXQgYSBuZXcgdmVyc2lvbiBvZgorICAgdGhlIGxvYWRlci4gIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgaXQgaXMgb3V0IG9mIHRoZSB3YXkgb2YgdGhlIHByb2dyYW0KKyAgIHRoYXQgaXQgd2lsbCAiZXhlYyIsIGFuZCB0aGF0IHRoZXJlIGlzIHN1ZmZpY2llbnQgcm9vbSBmb3IgdGhlIGJyay4gICovCisKKyNkZWZpbmUgRUxGX0VUX0RZTl9CQVNFICAgICAgICAgKDIgKiBUQVNLX1NJWkUgLyAzKQorCisKKyNkZWZpbmUgRUxGX0NPUkVfQ09QWV9SRUdTKF9kZXN0LF9yZWdzKQkJCQlcCisJbWVtY3B5KChjaGFyICopICZfZGVzdCwgKGNoYXIgKikgX3JlZ3MsCQkJXAorCSAgICAgICBzaXplb2Yoc3RydWN0IHB0X3JlZ3MpKTsKKworLyogVGhpcyB5aWVsZHMgYSBtYXNrIHRoYXQgdXNlciBwcm9ncmFtcyBjYW4gdXNlIHRvIGZpZ3VyZSBvdXQgd2hhdAorICAgaW5zdHJ1Y3Rpb24gc2V0IHRoaXMgQ1BVIHN1cHBvcnRzLiAgVGhpcyBjb3VsZCBiZSBkb25lIGluIHVzZXIgc3BhY2UsCisgICBidXQgaXQncyBub3QgZWFzeSwgYW5kIHdlJ3ZlIGFscmVhZHkgZG9uZSBpdCBoZXJlLiAgKi8KKworI2RlZmluZSBFTEZfSFdDQVAJKDApCisKKy8qIFRoaXMgeWllbGRzIGEgc3RyaW5nIHRoYXQgbGQuc28gd2lsbCB1c2UgdG8gbG9hZCBpbXBsZW1lbnRhdGlvbgorICAgc3BlY2lmaWMgbGlicmFyaWVzIGZvciBvcHRpbWl6YXRpb24uICBUaGlzIGlzIG1vcmUgc3BlY2lmaWMgaW4KKyAgIGludGVudCB0aGFuIHBva2luZyBhdCB1bmFtZSBvciAvcHJvYy9jcHVpbmZvLgorCisgICBGb3IgdGhlIG1vbWVudCwgd2UgaGF2ZSBvbmx5IG9wdGltaXphdGlvbnMgZm9yIHRoZSBJbnRlbCBnZW5lcmF0aW9ucywKKyAgIGJ1dCB0aGF0IGNvdWxkIGNoYW5nZS4uLiAqLworCisjZGVmaW5lIEVMRl9QTEFURk9STSAgKE5VTEwpCisKKyNkZWZpbmUgRUxGX1BMQVRfSU5JVChfciwgbG9hZF9hZGRyKSBcCisgIGRvIHsgX3ItPnJlZ3NbMF09MDsgX3ItPnJlZ3NbMV09MDsgX3ItPnJlZ3NbMl09MDsgX3ItPnJlZ3NbM109MDsgXAorICAgICAgIF9yLT5yZWdzWzRdPTA7IF9yLT5yZWdzWzVdPTA7IF9yLT5yZWdzWzZdPTA7IF9yLT5yZWdzWzddPTA7IFwKKyAgICAgICBfci0+cmVnc1s4XT0wOyBfci0+cmVnc1s5XT0wOyBfci0+cmVnc1sxMF09MDsgX3ItPnJlZ3NbMTFdPTA7IFwKKyAgICAgICBfci0+cmVnc1sxMl09MDsgX3ItPnJlZ3NbMTNdPTA7IF9yLT5yZWdzWzE0XT0wOyBcCisgICAgICAgX3ItPnNyID0gU1JfRkQ7IH0gd2hpbGUgKDApCisKKyNpZmRlZiBfX0tFUk5FTF9fCisjZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCwgaWJjczIpIHNldF9wZXJzb25hbGl0eShQRVJfTElOVVhfMzJCSVQpCitleHRlcm4gaW50IGR1bXBfdGFza19yZWdzIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgZWxmX2dyZWdzZXRfdCAqKTsKK2V4dGVybiBpbnQgZHVtcF90YXNrX2ZwdSAoc3RydWN0IHRhc2tfc3RydWN0ICosIGVsZl9mcHJlZ3NldF90ICopOworCisjZGVmaW5lIEVMRl9DT1JFX0NPUFlfVEFTS19SRUdTKHRzaywgZWxmX3JlZ3MpIGR1bXBfdGFza19yZWdzKHRzaywgZWxmX3JlZ3MpCisjZGVmaW5lIEVMRl9DT1JFX0NPUFlfRlBSRUdTKHRzaywgZWxmX2ZwcmVncykgZHVtcF90YXNrX2ZwdSh0c2ssIGVsZl9mcHJlZ3MpCisjZW5kaWYKKworI2VuZGlmIC8qIF9fQVNNX1NIX0VMRl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9lcnJuby5oIGIvaW5jbHVkZS9hc20tc2gvZXJybm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MWNmNmY5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvZXJybm8uaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19BU01fU0hfRVJSTk9fSAorI2RlZmluZSBfX0FTTV9TSF9FUlJOT19ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9lcnJuby5oPgorCisjZW5kaWYgLyogX19BU01fU0hfRVJSTk9fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvZmNudGwuaCBiL2luY2x1ZGUvYXNtLXNoL2ZjbnRsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGIzYWU1MgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL2ZjbnRsLmgKQEAgLTAsMCArMSw4OCBAQAorI2lmbmRlZiBfX0FTTV9TSF9GQ05UTF9ICisjZGVmaW5lIF9fQVNNX1NIX0ZDTlRMX0gKKworLyogb3Blbi9mY250bCAtIE9fU1lOQyBpcyBvbmx5IGltcGxlbWVudGVkIG9uIGJsb2NrcyBkZXZpY2VzIGFuZCBvbiBmaWxlcworICAgbG9jYXRlZCBvbiBhbiBleHQyIGZpbGUgc3lzdGVtICovCisjZGVmaW5lIE9fQUNDTU9ERQkgICAwMDAzCisjZGVmaW5lIE9fUkRPTkxZCSAgICAgMDAKKyNkZWZpbmUgT19XUk9OTFkJICAgICAwMQorI2RlZmluZSBPX1JEV1IJCSAgICAgMDIKKyNkZWZpbmUgT19DUkVBVAkJICAgMDEwMAkvKiBub3QgZmNudGwgKi8KKyNkZWZpbmUgT19FWENMCQkgICAwMjAwCS8qIG5vdCBmY250bCAqLworI2RlZmluZSBPX05PQ1RUWQkgICAwNDAwCS8qIG5vdCBmY250bCAqLworI2RlZmluZSBPX1RSVU5DCQkgIDAxMDAwCS8qIG5vdCBmY250bCAqLworI2RlZmluZSBPX0FQUEVORAkgIDAyMDAwCisjZGVmaW5lIE9fTk9OQkxPQ0sJICAwNDAwMAorI2RlZmluZSBPX05ERUxBWQlPX05PTkJMT0NLCisjZGVmaW5lIE9fU1lOQwkJIDAxMDAwMAorI2RlZmluZSBGQVNZTkMJCSAwMjAwMDAJLyogZmNudGwsIGZvciBCU0QgY29tcGF0aWJpbGl0eSAqLworI2RlZmluZSBPX0RJUkVDVAkgMDQwMDAwCS8qIGRpcmVjdCBkaXNrIGFjY2VzcyBoaW50IC0gY3VycmVudGx5IGlnbm9yZWQgKi8KKyNkZWZpbmUgT19MQVJHRUZJTEUJMDEwMDAwMAorI2RlZmluZSBPX0RJUkVDVE9SWQkwMjAwMDAwCS8qIG11c3QgYmUgYSBkaXJlY3RvcnkgKi8KKyNkZWZpbmUgT19OT0ZPTExPVwkwNDAwMDAwIC8qIGRvbid0IGZvbGxvdyBsaW5rcyAqLworI2RlZmluZSBPX05PQVRJTUUJMDEwMDAwMDAKKworI2RlZmluZSBGX0RVUEZECQkwCS8qIGR1cCAqLworI2RlZmluZSBGX0dFVEZECQkxCS8qIGdldCBjbG9zZV9vbl9leGVjICovCisjZGVmaW5lIEZfU0VURkQJCTIJLyogc2V0L2NsZWFyIGNsb3NlX29uX2V4ZWMgKi8KKyNkZWZpbmUgRl9HRVRGTAkJMwkvKiBnZXQgZmlsZS0+Zl9mbGFncyAqLworI2RlZmluZSBGX1NFVEZMCQk0CS8qIHNldCBmaWxlLT5mX2ZsYWdzICovCisjZGVmaW5lIEZfR0VUTEsJCTUKKyNkZWZpbmUgRl9TRVRMSwkJNgorI2RlZmluZSBGX1NFVExLVwk3CisKKyNkZWZpbmUgRl9TRVRPV04JOAkvKiAgZm9yIHNvY2tldHMuICovCisjZGVmaW5lIEZfR0VUT1dOCTkJLyogIGZvciBzb2NrZXRzLiAqLworI2RlZmluZSBGX1NFVFNJRwkxMAkvKiAgZm9yIHNvY2tldHMuICovCisjZGVmaW5lIEZfR0VUU0lHCTExCS8qICBmb3Igc29ja2V0cy4gKi8KKworI2RlZmluZSBGX0dFVExLNjQJMTIJLyogIHVzaW5nICdzdHJ1Y3QgZmxvY2s2NCcgKi8KKyNkZWZpbmUgRl9TRVRMSzY0CTEzCisjZGVmaW5lIEZfU0VUTEtXNjQJMTQKKworLyogZm9yIEZfW0dFVHxTRVRdRkwgKi8KKyNkZWZpbmUgRkRfQ0xPRVhFQwkxCS8qIGFjdHVhbGx5IGFueXRoaW5nIHdpdGggbG93IGJpdCBzZXQgZ29lcyAqLworCisvKiBmb3IgcG9zaXggZmNudGwoKSBhbmQgbG9ja2YoKSAqLworI2RlZmluZSBGX1JETENLCQkwCisjZGVmaW5lIEZfV1JMQ0sJCTEKKyNkZWZpbmUgRl9VTkxDSwkJMgorCisvKiBmb3Igb2xkIGltcGxlbWVudGF0aW9uIG9mIGJzZCBmbG9jayAoKSAqLworI2RlZmluZSBGX0VYTENLCQk0CS8qIG9yIDMgKi8KKyNkZWZpbmUgRl9TSExDSwkJOAkvKiBvciA0ICovCisKKy8qIGZvciBsZWFzZXMgKi8KKyNkZWZpbmUgRl9JTlBST0dSRVNTCTE2CisKKy8qIG9wZXJhdGlvbnMgZm9yIGJzZCBmbG9jaygpLCBhbHNvIHVzZWQgYnkgdGhlIGtlcm5lbCBpbXBsZW1lbnRhdGlvbiAqLworI2RlZmluZSBMT0NLX1NICQkxCS8qIHNoYXJlZCBsb2NrICovCisjZGVmaW5lIExPQ0tfRVgJCTIJLyogZXhjbHVzaXZlIGxvY2sgKi8KKyNkZWZpbmUgTE9DS19OQgkJNAkvKiBvcidkIHdpdGggb25lIG9mIHRoZSBhYm92ZSB0byBwcmV2ZW50CisJCQkJICAgYmxvY2tpbmcgKi8KKyNkZWZpbmUgTE9DS19VTgkJOAkvKiByZW1vdmUgbG9jayAqLworCisjZGVmaW5lIExPQ0tfTUFORAkzMgkvKiBUaGlzIGlzIGEgbWFuZGF0b3J5IGZsb2NrICovCisjZGVmaW5lIExPQ0tfUkVBRAk2NAkvKiAuLi4gV2hpY2ggYWxsb3dzIGNvbmN1cnJlbnQgcmVhZCBvcGVyYXRpb25zICovCisjZGVmaW5lIExPQ0tfV1JJVEUJMTI4CS8qIC4uLiBXaGljaCBhbGxvd3MgY29uY3VycmVudCB3cml0ZSBvcGVyYXRpb25zICovCisjZGVmaW5lIExPQ0tfUlcJCTE5MgkvKiAuLi4gV2hpY2ggYWxsb3dzIGNvbmN1cnJlbnQgcmVhZCAmIHdyaXRlIG9wcyAqLworCitzdHJ1Y3QgZmxvY2sgeworCXNob3J0IGxfdHlwZTsKKwlzaG9ydCBsX3doZW5jZTsKKwlvZmZfdCBsX3N0YXJ0OworCW9mZl90IGxfbGVuOworCXBpZF90IGxfcGlkOworfTsKKworc3RydWN0IGZsb2NrNjQgeworCXNob3J0ICBsX3R5cGU7CisJc2hvcnQgIGxfd2hlbmNlOworCWxvZmZfdCBsX3N0YXJ0OworCWxvZmZfdCBsX2xlbjsKKwlwaWRfdCAgbF9waWQ7Cit9OworCisjZGVmaW5lIEZfTElOVVhfU1BFQ0lGSUNfQkFTRQkxMDI0CisjZW5kaWYgLyogX19BU01fU0hfRkNOVExfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9maXhtYXAuaCBiL2luY2x1ZGUvYXNtLXNoL2ZpeG1hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwOTIyNGIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9maXhtYXAuaApAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqIGZpeG1hcC5oOiBjb21waWxlLXRpbWUgdmlydHVhbCBtZW1vcnkgYWxsb2NhdGlvbgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCBJbmdvIE1vbG5hcgorICoKKyAqIFN1cHBvcnQgb2YgQklHTUVNIGFkZGVkIGJ5IEdlcmhhcmQgV2ljaGVydCwgU2llbWVucyBBRywgSnVseSAxOTk5CisgKi8KKworI2lmbmRlZiBfQVNNX0ZJWE1BUF9ICisjZGVmaW5lIF9BU01fRklYTUFQX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaWZkZWYgQ09ORklHX0hJR0hNRU0KKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisjaW5jbHVkZSA8YXNtL2ttYXBfdHlwZXMuaD4KKyNlbmRpZgorCisvKgorICogSGVyZSB3ZSBkZWZpbmUgYWxsIHRoZSBjb21waWxlLXRpbWUgJ3NwZWNpYWwnIHZpcnR1YWwKKyAqIGFkZHJlc3Nlcy4gVGhlIHBvaW50IGlzIHRvIGhhdmUgYSBjb25zdGFudCBhZGRyZXNzIGF0CisgKiBjb21waWxlIHRpbWUsIGJ1dCB0byBzZXQgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb25seQorICogaW4gdGhlIGJvb3QgcHJvY2Vzcy4gV2UgYWxsb2NhdGUgdGhlc2Ugc3BlY2lhbCAgYWRkcmVzc2VzCisgKiBmcm9tIHRoZSBlbmQgb2YgdmlydHVhbCBtZW1vcnkgKDB4ZmZmZmYwMDApIGJhY2t3YXJkcy4KKyAqIEFsc28gdGhpcyBsZXRzIHVzIGRvIGZhaWwtc2FmZSB2bWFsbG9jKCksIHdlCisgKiBjYW4gZ3VhcmFudGVlIHRoYXQgdGhlc2Ugc3BlY2lhbCBhZGRyZXNzZXMgYW5kCisgKiB2bWFsbG9jKCktZWQgYWRkcmVzc2VzIG5ldmVyIG92ZXJsYXAuCisgKgorICogdGhlc2UgJ2NvbXBpbGUtdGltZSBhbGxvY2F0ZWQnIG1lbW9yeSBidWZmZXJzIGFyZQorICogZml4ZWQtc2l6ZSA0ayBwYWdlcy4gKG9yIGxhcmdlciBpZiB1c2VkIHdpdGggYW4gaW5jcmVtZW50CisgKiBoaWdoZ2VyIHRoYW4gMSkgdXNlIGZpeG1hcF9zZXQoaWR4LHBoeXMpIHRvIGFzc29jaWF0ZQorICogcGh5c2ljYWwgbWVtb3J5IHdpdGggZml4bWFwIGluZGljZXMuCisgKgorICogVExCIGVudHJpZXMgb2Ygc3VjaCBidWZmZXJzIHdpbGwgbm90IGJlIGZsdXNoZWQgYWNyb3NzCisgKiB0YXNrIHN3aXRjaGVzLgorICovCisKKy8qCisgKiBvbiBVUCBjdXJyZW50bHkgd2Ugd2lsbCBoYXZlIG5vIHRyYWNlIG9mIHRoZSBmaXhtYXAgbWVjaGFuaXptLAorICogbm8gcGFnZSB0YWJsZSBhbGxvY2F0aW9ucywgZXRjLiBUaGlzIG1pZ2h0IGNoYW5nZSBpbiB0aGUKKyAqIGZ1dHVyZSwgc2F5IGZyYW1lYnVmZmVycyBmb3IgdGhlIGNvbnNvbGUgZHJpdmVyKHMpIGNvdWxkIGJlCisgKiBmaXgtbWFwcGVkPworICovCitlbnVtIGZpeGVkX2FkZHJlc3NlcyB7CisjaWZkZWYgQ09ORklHX0hJR0hNRU0KKwlGSVhfS01BUF9CRUdJTiwJLyogcmVzZXJ2ZWQgcHRlJ3MgZm9yIHRlbXBvcmFyeSBrZXJuZWwgbWFwcGluZ3MgKi8KKwlGSVhfS01BUF9FTkQgPSBGSVhfS01BUF9CRUdJTisoS01fVFlQRV9OUipOUl9DUFVTKS0xLAorI2VuZGlmCisJX19lbmRfb2ZfZml4ZWRfYWRkcmVzc2VzCit9OworCitleHRlcm4gdm9pZCBfX3NldF9maXhtYXAgKGVudW0gZml4ZWRfYWRkcmVzc2VzIGlkeCwKKwkJCQkJdW5zaWduZWQgbG9uZyBwaHlzLCBwZ3Byb3RfdCBmbGFncyk7CisKKyNkZWZpbmUgc2V0X2ZpeG1hcChpZHgsIHBoeXMpIFwKKwkJX19zZXRfZml4bWFwKGlkeCwgcGh5cywgUEFHRV9LRVJORUwpCisvKgorICogU29tZSBoYXJkd2FyZSB3YW50cyB0byBnZXQgZml4bWFwcGVkIHdpdGhvdXQgY2FjaGluZy4KKyAqLworI2RlZmluZSBzZXRfZml4bWFwX25vY2FjaGUoaWR4LCBwaHlzKSBcCisJCV9fc2V0X2ZpeG1hcChpZHgsIHBoeXMsIFBBR0VfS0VSTkVMX05PQ0FDSEUpCisvKgorICogdXNlZCBieSB2bWFsbG9jLmMuCisgKgorICogTGVhdmUgb25lIGVtcHR5IHBhZ2UgYmV0d2VlbiB2bWFsbG9jJ2VkIGFyZWFzIGFuZAorICogdGhlIHN0YXJ0IG9mIHRoZSBmaXhtYXAsIGFuZCBsZWF2ZSBvbmUgcGFnZSBlbXB0eQorICogYXQgdGhlIHRvcCBvZiBtZW0uLgorICovCisjZGVmaW5lIEZJWEFERFJfVE9QCShQNFNFRyAtIFBBR0VfU0laRSkKKyNkZWZpbmUgRklYQUREUl9TSVpFCShfX2VuZF9vZl9maXhlZF9hZGRyZXNzZXMgPDwgUEFHRV9TSElGVCkKKyNkZWZpbmUgRklYQUREUl9TVEFSVAkoRklYQUREUl9UT1AgLSBGSVhBRERSX1NJWkUpCisKKyNkZWZpbmUgX19maXhfdG9fdmlydCh4KQkoRklYQUREUl9UT1AgLSAoKHgpIDw8IFBBR0VfU0hJRlQpKQorI2RlZmluZSBfX3ZpcnRfdG9fZml4KHgpCSgoRklYQUREUl9UT1AgLSAoKHgpJlBBR0VfTUFTSykpID4+IFBBR0VfU0hJRlQpCisKK2V4dGVybiB2b2lkIF9fdGhpc19maXhtYXBfZG9lc19ub3RfZXhpc3Qodm9pZCk7CisKKy8qCisgKiAnaW5kZXggdG8gYWRkcmVzcycgdHJhbnNsYXRpb24uIElmIGFueW9uZSB0cmllcyB0byB1c2UgdGhlIGlkeAorICogZGlyZWN0bHkgd2l0aG91dCB0cmFubGF0aW9uLCB3ZSBjYXRjaCB0aGUgYnVnIHdpdGggYSBOVUxMLWRlZmVyZW5jZQorICoga2VybmVsIG9vcHMuIElsbGVnYWwgcmFuZ2VzIG9mIGluY29taW5nIGluZGljZXMgYXJlIGNhdWdodCB0b28uCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBmaXhfdG9fdmlydChjb25zdCB1bnNpZ25lZCBpbnQgaWR4KQoreworCS8qCisJICogdGhpcyBicmFuY2ggZ2V0cyBjb21wbGV0ZWx5IGVsaW1pbmF0ZWQgYWZ0ZXIgaW5saW5pbmcsCisJICogZXhjZXB0IHdoZW4gc29tZW9uZSB0cmllcyB0byB1c2UgZml4YWRkciBpbmRpY2VzIGluIGFuCisJICogaWxsZWdhbCB3YXkuIChzdWNoIGFzIG1peGluZyB1cCBhZGRyZXNzIHR5cGVzIG9yIHVzaW5nCisJICogb3V0LW9mLXJhbmdlIGluZGljZXMpLgorCSAqCisJICogSWYgaXQgZG9lc24ndCBnZXQgcmVtb3ZlZCwgdGhlIGxpbmtlciB3aWxsIGNvbXBsYWluCisJICogbG91ZGx5IHdpdGggYSByZWFzb25hYmx5IGNsZWFyIGVycm9yIG1lc3NhZ2UuLgorCSAqLworCWlmIChpZHggPj0gX19lbmRfb2ZfZml4ZWRfYWRkcmVzc2VzKQorCQlfX3RoaXNfZml4bWFwX2RvZXNfbm90X2V4aXN0KCk7CisKKyAgICAgICAgcmV0dXJuIF9fZml4X3RvX3ZpcnQoaWR4KTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHZpcnRfdG9fZml4KGNvbnN0IHVuc2lnbmVkIGxvbmcgdmFkZHIpCit7CisJQlVHX09OKHZhZGRyID49IEZJWEFERFJfVE9QIHx8IHZhZGRyIDwgRklYQUREUl9TVEFSVCk7CisJcmV0dXJuIF9fdmlydF90b19maXgodmFkZHIpOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2ZsYXQuaCBiL2luY2x1ZGUvYXNtLXNoL2ZsYXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjkwNzJlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvZmxhdC5oCkBAIC0wLDAgKzEsMjMgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1zaC9mbGF0LmgKKyAqCisgKiB1Q2xpbnV4IGZsYXQtZm9ybWF0IGV4ZWN1dGFibGVzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzICBQYXVsIE11bmR0CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX19BU01fU0hfRkxBVF9ICisjZGVmaW5lIF9fQVNNX1NIX0ZMQVRfSAorCisjZGVmaW5lCWZsYXRfc3RhY2tfYWxpZ24oc3ApCQkJLyogbm90aGluZyBuZWVkZWQgKi8KKyNkZWZpbmUJZmxhdF9hcmd2cF9lbnZwX29uX3N0YWNrKCkJCTEKKyNkZWZpbmUJZmxhdF9vbGRfcmFtX2ZsYWcoZmxhZ3MpCQkoZmxhZ3MpCisjZGVmaW5lCWZsYXRfcmVsb2NfdmFsaWQocmVsb2MsIHNpemUpCQkoKHJlbG9jKSA8PSAoc2l6ZSkpCisjZGVmaW5lCWZsYXRfZ2V0X2FkZHJfZnJvbV9ycChycCwgcmVsdmFsLCBmbGFncykJZ2V0X3VuYWxpZ25lZChycCkKKyNkZWZpbmUJZmxhdF9wdXRfYWRkcl9hdF9ycChycCwgdmFsLCByZWx2YWwpCXB1dF91bmFsaWduZWQodmFsLHJwKQorI2RlZmluZQlmbGF0X2dldF9yZWxvY2F0ZV9hZGRyKHJlbCkJCShyZWwpCisKKyNlbmRpZiAvKiBfX0FTTV9TSF9GTEFUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2Zsb3BweS5oIGIvaW5jbHVkZS9hc20tc2gvZmxvcHB5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjAzMGNhMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL2Zsb3BweS5oCkBAIC0wLDAgKzEsMjc0IEBACisvKgorICogQXJjaGl0ZWN0dXJlIHNwZWNpZmljIHBhcnRzIG9mIHRoZSBGbG9wcHkgZHJpdmVyCisgKiAgIGluY2x1ZGUvYXNtLWkzODYvZmxvcHB5LmgKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUKKyAqLworI2lmbmRlZiBfX0FTTV9TSF9GTE9QUFlfSAorI2RlZmluZSBfX0FTTV9TSF9GTE9QUFlfSAorCisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorCisKKy8qCisgKiBUaGUgRE1BIGNoYW5uZWwgdXNlZCBieSB0aGUgZmxvcHB5IGNvbnRyb2xsZXIgY2Fubm90IGFjY2VzcyBkYXRhIGF0CisgKiBhZGRyZXNzZXMgPj0gMTZNQgorICoKKyAqIFdlbnQgYmFjayB0byB0aGUgMU1CIGxpbWl0LCBhcyBzb21lIHBlb3BsZSBoYWQgcHJvYmxlbXMgd2l0aCB0aGUgZmxvcHB5CisgKiBkcml2ZXIgb3RoZXJ3aXNlLiBJdCBkb2Vzbid0IG1hdHRlciBtdWNoIGZvciBwZXJmb3JtYW5jZSBhbnl3YXksIGFzIG1vc3QKKyAqIGZsb3BweSBhY2Nlc3NlcyBnbyB0aHJvdWdoIHRoZSB0cmFjayBidWZmZXIuCisgKi8KKyNkZWZpbmUgX0NST1NTXzY0S0IoYSxzLHZkbWEpIFwKKyghdmRtYSAmJiAoKHVuc2lnbmVkIGxvbmcpKGEpL0tfNjQgIT0gKCh1bnNpZ25lZCBsb25nKShhKSArIChzKSAtIDEpIC8gS182NCkpCisKKyNkZWZpbmUgQ1JPU1NfNjRLQihhLHMpIF9DUk9TU182NEtCKGEscyx1c2VfdmlydHVhbF9kbWEgJiAxKQorCisKKyNkZWZpbmUgU1cgZmRfcm91dGluZVt1c2VfdmlydHVhbF9kbWEmMV0KKyNkZWZpbmUgQ1NXIGZkX3JvdXRpbmVbY2FuX3VzZV92aXJ0dWFsX2RtYSAmIDFdCisKKworI2RlZmluZSBmZF9pbmIocG9ydCkJCQlpbmJfcChwb3J0KQorI2RlZmluZSBmZF9vdXRiKHZhbHVlLHBvcnQpCQlvdXRiX3AodmFsdWUscG9ydCkKKworI2RlZmluZSBmZF9yZXF1ZXN0X2RtYSgpICAgICAgICBDU1cuX3JlcXVlc3RfZG1hKEZMT1BQWV9ETUEsImZsb3BweSIpCisjZGVmaW5lIGZkX2ZyZWVfZG1hKCkgICAgICAgICAgIENTVy5fZnJlZV9kbWEoRkxPUFBZX0RNQSkKKyNkZWZpbmUgZmRfZW5hYmxlX2lycSgpICAgICAgICAgZW5hYmxlX2lycShGTE9QUFlfSVJRKQorI2RlZmluZSBmZF9kaXNhYmxlX2lycSgpICAgICAgICBkaXNhYmxlX2lycShGTE9QUFlfSVJRKQorI2RlZmluZSBmZF9mcmVlX2lycSgpCQlmcmVlX2lycShGTE9QUFlfSVJRLCBOVUxMKQorI2RlZmluZSBmZF9nZXRfZG1hX3Jlc2lkdWUoKSAgICBTVy5fZ2V0X2RtYV9yZXNpZHVlKEZMT1BQWV9ETUEpCisjZGVmaW5lIGZkX2RtYV9tZW1fYWxsb2Moc2l6ZSkJU1cuX2RtYV9tZW1fYWxsb2Moc2l6ZSkKKyNkZWZpbmUgZmRfZG1hX3NldHVwKGFkZHIsIHNpemUsIG1vZGUsIGlvKSBTVy5fZG1hX3NldHVwKGFkZHIsIHNpemUsIG1vZGUsIGlvKQorCisjZGVmaW5lIEZMT1BQWV9DQU5fRkFMTEJBQ0tfT05fTk9ETUEKKworc3RhdGljIGludCB2aXJ0dWFsX2RtYV9jb3VudDsKK3N0YXRpYyBpbnQgdmlydHVhbF9kbWFfcmVzaWR1ZTsKK3N0YXRpYyBjaGFyICp2aXJ0dWFsX2RtYV9hZGRyOworc3RhdGljIGludCB2aXJ0dWFsX2RtYV9tb2RlOworc3RhdGljIGludCBkb2luZ19wZG1hOworCitzdGF0aWMgdm9pZCBmbG9wcHlfaGFyZGludChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICogcmVncykKK3sKKwlyZWdpc3RlciB1bnNpZ25lZCBjaGFyIHN0OworCisjdW5kZWYgVFJBQ0VfRkxQWV9JTlQKKworI2lmZGVmIFRSQUNFX0ZMUFlfSU5UCisJc3RhdGljIGludCBjYWxscz0wOworCXN0YXRpYyBpbnQgYnl0ZXM9MDsKKwlzdGF0aWMgaW50IGRtYV93YWl0PTA7CisjZW5kaWYKKwlpZighZG9pbmdfcGRtYSkgeworCQlmbG9wcHlfaW50ZXJydXB0KGlycSwgZGV2X2lkLCByZWdzKTsKKwkJcmV0dXJuOworCX0KKworI2lmZGVmIFRSQUNFX0ZMUFlfSU5UCisJaWYoIWNhbGxzKQorCQlieXRlcyA9IHZpcnR1YWxfZG1hX2NvdW50OworI2VuZGlmCisKKwl7CisJCXJlZ2lzdGVyIGludCBsY291bnQ7CisJCXJlZ2lzdGVyIGNoYXIgKmxwdHI7CisKKwkJc3QgPSAxOworCQlmb3IobGNvdW50PXZpcnR1YWxfZG1hX2NvdW50LCBscHRyPXZpcnR1YWxfZG1hX2FkZHI7IAorCQkgICAgbGNvdW50OyBsY291bnQtLSwgbHB0cisrKSB7CisJCQlzdD1pbmIodmlydHVhbF9kbWFfcG9ydCs0KSAmIDB4YTAgOworCQkJaWYoc3QgIT0gMHhhMCkgCisJCQkJYnJlYWs7CisJCQlpZih2aXJ0dWFsX2RtYV9tb2RlKQorCQkJCW91dGJfcCgqbHB0ciwgdmlydHVhbF9kbWFfcG9ydCs1KTsKKwkJCWVsc2UKKwkJCQkqbHB0ciA9IGluYl9wKHZpcnR1YWxfZG1hX3BvcnQrNSk7CisJCX0KKwkJdmlydHVhbF9kbWFfY291bnQgPSBsY291bnQ7CisJCXZpcnR1YWxfZG1hX2FkZHIgPSBscHRyOworCQlzdCA9IGluYih2aXJ0dWFsX2RtYV9wb3J0KzQpOworCX0KKworI2lmZGVmIFRSQUNFX0ZMUFlfSU5UCisJY2FsbHMrKzsKKyNlbmRpZgorCWlmKHN0ID09IDB4MjApCisJCXJldHVybjsKKwlpZighKHN0ICYgMHgyMCkpIHsKKwkJdmlydHVhbF9kbWFfcmVzaWR1ZSArPSB2aXJ0dWFsX2RtYV9jb3VudDsKKwkJdmlydHVhbF9kbWFfY291bnQ9MDsKKyNpZmRlZiBUUkFDRV9GTFBZX0lOVAorCQlwcmludGsoImNvdW50PSV4LCByZXNpZHVlPSV4IGNhbGxzPSVkIGJ5dGVzPSVkIGRtYV93YWl0PSVkXG4iLCAKKwkJICAgICAgIHZpcnR1YWxfZG1hX2NvdW50LCB2aXJ0dWFsX2RtYV9yZXNpZHVlLCBjYWxscywgYnl0ZXMsCisJCSAgICAgICBkbWFfd2FpdCk7CisJCWNhbGxzID0gMDsKKwkJZG1hX3dhaXQ9MDsKKyNlbmRpZgorCQlkb2luZ19wZG1hID0gMDsKKwkJZmxvcHB5X2ludGVycnVwdChpcnEsIGRldl9pZCwgcmVncyk7CisJCXJldHVybjsKKwl9CisjaWZkZWYgVFJBQ0VfRkxQWV9JTlQKKwlpZighdmlydHVhbF9kbWFfY291bnQpCisJCWRtYV93YWl0Kys7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgZmRfZGlzYWJsZV9kbWEodm9pZCkKK3sKKwlpZighIChjYW5fdXNlX3ZpcnR1YWxfZG1hICYgMSkpCisJCWRpc2FibGVfZG1hKEZMT1BQWV9ETUEpOworCWRvaW5nX3BkbWEgPSAwOworCXZpcnR1YWxfZG1hX3Jlc2lkdWUgKz0gdmlydHVhbF9kbWFfY291bnQ7CisJdmlydHVhbF9kbWFfY291bnQ9MDsKK30KKworc3RhdGljIGludCB2ZG1hX3JlcXVlc3RfZG1hKHVuc2lnbmVkIGludCBkbWFuciwgY29uc3QgY2hhciAqIGRldmljZV9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdmRtYV9ub3AodW5zaWduZWQgaW50IGR1bW15KQoreworfQorCisKK3N0YXRpYyBpbnQgdmRtYV9nZXRfZG1hX3Jlc2lkdWUodW5zaWduZWQgaW50IGR1bW15KQoreworCXJldHVybiB2aXJ0dWFsX2RtYV9jb3VudCArIHZpcnR1YWxfZG1hX3Jlc2lkdWU7Cit9CisKKworc3RhdGljIGludCBmZF9yZXF1ZXN0X2lycSh2b2lkKQoreworCWlmKGNhbl91c2VfdmlydHVhbF9kbWEpCisJCXJldHVybiByZXF1ZXN0X2lycShGTE9QUFlfSVJRLCBmbG9wcHlfaGFyZGludCxTQV9JTlRFUlJVUFQsCisJCQkJCQkgICAiZmxvcHB5IiwgTlVMTCk7CisJZWxzZQorCQlyZXR1cm4gcmVxdWVzdF9pcnEoRkxPUFBZX0lSUSwgZmxvcHB5X2ludGVycnVwdCwKKwkJCQkJCSAgIFNBX0lOVEVSUlVQVHxTQV9TQU1QTEVfUkFORE9NLAorCQkJCQkJICAgImZsb3BweSIsIE5VTEwpOwkKKworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBkbWFfbWVtX2FsbG9jKHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlyZXR1cm4gX19nZXRfZG1hX3BhZ2VzKEdGUF9LRVJORUwsZ2V0X29yZGVyKHNpemUpKTsKK30KKworCitzdGF0aWMgdW5zaWduZWQgbG9uZyB2ZG1hX21lbV9hbGxvYyh1bnNpZ25lZCBsb25nIHNpemUpCit7CisJcmV0dXJuICh1bnNpZ25lZCBsb25nKSB2bWFsbG9jKHNpemUpOworCit9CisKKyNkZWZpbmUgbm9kbWFfbWVtX2FsbG9jKHNpemUpIHZkbWFfbWVtX2FsbG9jKHNpemUpCisKK3N0YXRpYyB2b2lkIF9mZF9kbWFfbWVtX2ZyZWUodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJaWYoKHVuc2lnbmVkIGludCkgYWRkciA+PSAodW5zaWduZWQgaW50KSBoaWdoX21lbW9yeSkKKwkJcmV0dXJuIHZmcmVlKCh2b2lkICopYWRkcik7CisJZWxzZQorCQlmcmVlX3BhZ2VzKGFkZHIsIGdldF9vcmRlcihzaXplKSk7CQkKK30KKworI2RlZmluZSBmZF9kbWFfbWVtX2ZyZWUoYWRkciwgc2l6ZSkgIF9mZF9kbWFfbWVtX2ZyZWUoYWRkciwgc2l6ZSkgCisKK3N0YXRpYyB2b2lkIF9mZF9jaG9zZV9kbWFfbW9kZShjaGFyICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJaWYoY2FuX3VzZV92aXJ0dWFsX2RtYSA9PSAyKSB7CisJCWlmKCh1bnNpZ25lZCBpbnQpIGFkZHIgPj0gKHVuc2lnbmVkIGludCkgaGlnaF9tZW1vcnkgfHwKKwkJICAgdmlydF90b19idXMoYWRkcikgPj0gMHgxMDAwMDAwMCkKKwkJCXVzZV92aXJ0dWFsX2RtYSA9IDE7CisJCWVsc2UKKwkJCXVzZV92aXJ0dWFsX2RtYSA9IDA7CisJfSBlbHNlIHsKKwkJdXNlX3ZpcnR1YWxfZG1hID0gY2FuX3VzZV92aXJ0dWFsX2RtYSAmIDE7CisJfQorfQorCisjZGVmaW5lIGZkX2Nob3NlX2RtYV9tb2RlKGFkZHIsIHNpemUpIF9mZF9jaG9zZV9kbWFfbW9kZShhZGRyLCBzaXplKQorCisKK3N0YXRpYyBpbnQgdmRtYV9kbWFfc2V0dXAoY2hhciAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLCBpbnQgbW9kZSwgaW50IGlvKQoreworCWRvaW5nX3BkbWEgPSAxOworCXZpcnR1YWxfZG1hX3BvcnQgPSBpbzsKKwl2aXJ0dWFsX2RtYV9tb2RlID0gKG1vZGUgID09IERNQV9NT0RFX1dSSVRFKTsKKwl2aXJ0dWFsX2RtYV9hZGRyID0gYWRkcjsKKwl2aXJ0dWFsX2RtYV9jb3VudCA9IHNpemU7CisJdmlydHVhbF9kbWFfcmVzaWR1ZSA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGFyZF9kbWFfc2V0dXAoY2hhciAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLCBpbnQgbW9kZSwgaW50IGlvKQoreworI2lmZGVmIEZMT1BQWV9TQU5JVFlfQ0hFQ0sKKwlpZiAoQ1JPU1NfNjRLQihhZGRyLCBzaXplKSkgeworCQlwcmludGsoIkRNQSBjcm9zc2luZyA2NC1LIGJvdW5kYXJ5ICVwLSVwXG4iLCBhZGRyLCBhZGRyK3NpemUpOworCQlyZXR1cm4gLTE7CisJfQorI2VuZGlmCisKKwlkbWFfY2FjaGVfd2JhY2tfaW52KGFkZHIsIHNpemUpOworCisJLyogYWN0dWFsLCBwaHlzaWNhbCBETUEgKi8KKwlkb2luZ19wZG1hID0gMDsKKwljbGVhcl9kbWFfZmYoRkxPUFBZX0RNQSk7CisJc2V0X2RtYV9tb2RlKEZMT1BQWV9ETUEsbW9kZSk7CisJc2V0X2RtYV9hZGRyKEZMT1BQWV9ETUEsdmlydF90b19idXMoYWRkcikpOworCXNldF9kbWFfY291bnQoRkxPUFBZX0RNQSxzaXplKTsKKwllbmFibGVfZG1hKEZMT1BQWV9ETUEpOworCXJldHVybiAwOworfQorCitzdHJ1Y3QgZmRfcm91dGluZV9sIHsKKwlpbnQgKCpfcmVxdWVzdF9kbWEpKHVuc2lnbmVkIGludCBkbWFuciwgY29uc3QgY2hhciAqIGRldmljZV9pZCk7CisJdm9pZCAoKl9mcmVlX2RtYSkodW5zaWduZWQgaW50IGRtYW5yKTsKKwlpbnQgKCpfZ2V0X2RtYV9yZXNpZHVlKSh1bnNpZ25lZCBpbnQgZHVtbXkpOworCXVuc2lnbmVkIGxvbmcgKCpfZG1hX21lbV9hbGxvYykgKHVuc2lnbmVkIGxvbmcgc2l6ZSk7CisJaW50ICgqX2RtYV9zZXR1cCkoY2hhciAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLCBpbnQgbW9kZSwgaW50IGlvKTsKK30gZmRfcm91dGluZVtdID0geworCXsKKwkJcmVxdWVzdF9kbWEsCisJCWZyZWVfZG1hLAorCQlnZXRfZG1hX3Jlc2lkdWUsCisJCWRtYV9tZW1fYWxsb2MsCisJCWhhcmRfZG1hX3NldHVwCisJfSwKKwl7CisJCXZkbWFfcmVxdWVzdF9kbWEsCisJCXZkbWFfbm9wLAorCQl2ZG1hX2dldF9kbWFfcmVzaWR1ZSwKKwkJdmRtYV9tZW1fYWxsb2MsCisJCXZkbWFfZG1hX3NldHVwCisJfQorfTsKKworCitzdGF0aWMgaW50IEZEQzEgPSAweDNmMDsKK3N0YXRpYyBpbnQgRkRDMiA9IC0xOworCisvKgorICogRmxvcHB5IHR5cGVzIGFyZSBzdG9yZWQgaW4gdGhlIHJ0YydzIENNT1MgUkFNIGFuZCBzbyBydGNfbG9jaworICogaXMgbmVlZGVkIHRvIHByZXZlbnQgY29ycnVwdGVkIENNT1MgUkFNIGluIGNhc2UgImluc21vZCBmbG9wcHkiCisgKiBjb2luY2lkZXMgd2l0aCBhbm90aGVyIHJ0YyBDTU9TIHVzZXIuCQlQYXVsIEcuCisgKi8KKyNkZWZpbmUgRkxPUFBZMF9UWVBFCSg0KQorI2RlZmluZSBGTE9QUFkxX1RZUEUJKDApCisKKyNkZWZpbmUgTl9GREMgMgorI2RlZmluZSBOX0RSSVZFIDgKKworI2RlZmluZSBGTE9QUFlfTU9UT1JfTUFTSyAweGYwCisKKyNkZWZpbmUgQVVUT19ETUEKKworI2RlZmluZSBFWFRSQV9GTE9QUFlfUEFSQU1TCisKKyNlbmRpZiAvKiBfX0FTTV9TSF9GTE9QUFlfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvZnJlcS5oIGIvaW5jbHVkZS9hc20tc2gvZnJlcS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMGZkZTQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9mcmVxLmgKQEAgLTAsMCArMSwyOSBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLXNoL2ZyZXEuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMyBQYXVsIE11bmR0CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2lmbmRlZiBfX0FTTV9TSF9GUkVRX0gKKyNkZWZpbmUgX19BU01fU0hfRlJFUV9ICisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8YXNtL2NwdS9mcmVxLmg+CisKKy8qIGFyY2gvc2gva2VybmVsL3RpbWUuYyAqLworZXh0ZXJuIHZvaWQgZ2V0X2N1cnJlbnRfZnJlcXVlbmN5X2Rpdmlzb3JzKHVuc2lnbmVkIGludCAqaWZjLCB1bnNpZ25lZCBpbnQgKnBmYywgdW5zaWduZWQgaW50ICpiZmMpOworCitleHRlcm4gdW5zaWduZWQgaW50IGdldF9pZmNfZGl2aXNvcih1bnNpZ25lZCBpbnQgdmFsdWUpOworZXh0ZXJuIHVuc2lnbmVkIGludCBnZXRfaWZjX2Rpdmlzb3IodW5zaWduZWQgaW50IHZhbHVlKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgZ2V0X2lmY19kaXZpc29yKHVuc2lnbmVkIGludCB2YWx1ZSk7CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgZ2V0X2lmY192YWx1ZSh1bnNpZ25lZCBpbnQgZGl2aXNvcik7CitleHRlcm4gdW5zaWduZWQgaW50IGdldF9wZmNfdmFsdWUodW5zaWduZWQgaW50IGRpdmlzb3IpOworZXh0ZXJuIHVuc2lnbmVkIGludCBnZXRfYmZjX3ZhbHVlKHVuc2lnbmVkIGludCBkaXZpc29yKTsKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAvKiBfX0FTTV9TSF9GUkVRX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2hhcmRpcnEuaCBiL2luY2x1ZGUvYXNtLXNoL2hhcmRpcnEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmZkZjBmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvaGFyZGlycS5oCkBAIC0wLDAgKzEsMTcgQEAKKyNpZm5kZWYgX19BU01fU0hfSEFSRElSUV9ICisjZGVmaW5lIF9fQVNNX1NIX0hBUkRJUlFfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorCisvKiBlbnRyeS5TIGlzIHNlbnNpdGl2ZSB0byB0aGUgb2Zmc2V0cyBvZiB0aGVzZSBmaWVsZHMgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQgX19zb2Z0aXJxX3BlbmRpbmc7Cit9IF9fX19jYWNoZWxpbmVfYWxpZ25lZCBpcnFfY3B1c3RhdF90OworCisjaW5jbHVkZSA8bGludXgvaXJxX2NwdXN0YXQuaD4JLyogU3RhbmRhcmQgbWFwcGluZ3MgZm9yIGlycV9jcHVzdGF0X3QgYWJvdmUgKi8KKworZXh0ZXJuIHZvaWQgYWNrX2JhZF9pcnEodW5zaWduZWQgaW50IGlycSk7CisKKyNlbmRpZiAvKiBfX0FTTV9TSF9IQVJESVJRX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2hhcnAvaGFycC5oIGIvaW5jbHVkZS9hc20tc2gvaGFycC9oYXJwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJmYmNmYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL2hhcnAvaGFycC5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qIAorICogQ29weXJpZ2h0IChDKSAyMDAxIERhdmlkIEouIE1ja2F5IChkYXZpZC5tY2theUBzdC5jb20pCisgKgorICogTWF5IGJlIGNvcGllZCBvciBtb2RpZmllZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSBsaW51eC9DT1BZSU5HIGZvciBtb3JlIGluZm9ybWF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAqCisgKiBEZWZpbnRpb25zIGFwcGxpY2FibGUgdG8gdGhlIFNUTWljcm9lbGVjdHJvbmljcyBTVDQwU1RCMSBIQVJQIGFuZAorICogY29tcGF0aWJsZSBib2FyZHMuCisgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1NIX1NUQjFfSEFSUCkKKworI2RlZmluZSBFUExEX0JBU0UgICAgIDB4YTA4MDAwMDAKKworI2RlZmluZSBFUExEX0xFRCAgICAgIChFUExEX0JBU0UrMHgwMDBjMDAwMCkKKyNkZWZpbmUgRVBMRF9JTlRTVEFUMCAoRVBMRF9CQVNFKzB4MDAyMDAwMDApCisjZGVmaW5lIEVQTERfSU5UU1RBVDEgKEVQTERfQkFTRSsweDAwMjQwMDAwKQorI2RlZmluZSBFUExEX0lOVE1BU0swIChFUExEX0JBU0UrMHgwMDI4MDAwMCkKKyNkZWZpbmUgRVBMRF9JTlRNQVNLMSAoRVBMRF9CQVNFKzB4MDAyYzAwMDApCisjZGVmaW5lIEVQTERfUEFHRUFERFIgKEVQTERfQkFTRSsweDAwMzAwMDAwKQorI2RlZmluZSBFUExEX1JFVklEMSAgIChFUExEX0JBU0UrMHgwMDM4MDAwMCkKKyNkZWZpbmUgRVBMRF9SRVZJRDIgICAoRVBMRF9CQVNFKzB4MDAzYzAwMDApCisKKyNkZWZpbmUgRVBMRF9MRURfT04gIDEKKyNkZWZpbmUgRVBMRF9MRURfT0ZGIDAKKworI2VsaWYgZGVmaW5lZChDT05GSUdfU0hfU1RCMV9PVkVSRFJJVkUpCisKKyNkZWZpbmUgRVBMRF9CQVNFICAgICAweGE3MDAwMDAwCisKKyNkZWZpbmUgRVBMRF9SRVZJRCAgICAoRVBMRF9CQVNFKzB4MDAwMDAwMDApCisjZGVmaW5lIEVQTERfTEVEICAgICAgKEVQTERfQkFTRSsweDAwMDQwMDAwKQorI2RlZmluZSBFUExEX0lOVE1BU0swIChFUExEX0JBU0UrMHgwMDFjMDAwMCkKKyNkZWZpbmUgRVBMRF9JTlRNQVNLMSAoRVBMRF9CQVNFKzB4MDAyMDAwMDApCisjZGVmaW5lIEVQTERfSU5UU1RBVDAgKEVQTERfQkFTRSsweDAwMjQwMDAwKQorI2RlZmluZSBFUExEX0lOVFNUQVQxIChFUExEX0JBU0UrMHgwMDI4MDAwMCkKKworI2RlZmluZSBFUExEX0xFRF9PTiAgMAorI2RlZmluZSBFUExEX0xFRF9PRkYgMQorCisjZWxzZQorI2Vycm9yIFVua25vd24gYm9hcmQKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvaGFycC9pby5oIGIvaW5jbHVkZS9hc20tc2gvaGFycC9pby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4ZjM5ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9oYXJwL2lvLmgKQEAgLTAsMCArMSwxMCBAQAorI2lmbmRlZiBfX0FTTV9TSF9IQVJQX0lPX0gKKyNkZWZpbmUgX19BU01fU0hfSEFSUF9JT19ICisKKy8qCisgKiBOb3RoaW5nIHNwZWNpYWwgaGVyZS4uIGp1c3QgdXNlIHRoZSBnZW5lcmljIGNjaGlwIGlvIHJvdXRpbmVzLgorICovCisjaW5jbHVkZSA8YXNtL2hkNjQ0NjUvaW8uaD4KKworI2VuZGlmIC8qIF9fQVNNX1NIX0hBUlBfSU9fSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9oZDY0NDYxL2hkNjQ0NjEuaCBiL2luY2x1ZGUvYXNtLXNoL2hkNjQ0NjEvaGQ2NDQ2MS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0NTdjYTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9oZDY0NDYxL2hkNjQ0NjEuaApAQCAtMCwwICsxLDIwMyBAQAorI2lmbmRlZiBfX0FTTV9TSF9IRDY0NDYxCisjZGVmaW5lIF9fQVNNX1NIX0hENjQ0NjEKKy8qCisgKgkkSWQ6IGhkNjQ0NjEuaCx2IDEuNSAyMDA0LzAzLzE2IDAwOjA3OjUxIGxldGhhbCBFeHAgJAorICoJQ29weXJpZ2h0IChDKSAyMDAwIFlBRUdBU0hJIFRha2VzaGkKKyAqCUhpdGFjaGkgSEQ2NDQ2MSBjb21wYW5pb24gY2hpcCBzdXBwb3J0CisgKi8KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworLyogQ29uc3RhbnRzIGZvciBQQ01DSUEgbWFwcGluZ3MgKi8KKyNkZWZpbmUgSEQ2NDQ2MV9QQ0NfV0lORE9XCTB4MDEwMDAwMDAKKworI2RlZmluZSBIRDY0NDYxX1BDQzBfQkFTRQkweGI4MDAwMDAwCS8qIGFyZWEgNiAqLworI2RlZmluZSBIRDY0NDYxX1BDQzBfQVRUUgkoSEQ2NDQ2MV9QQ0MwX0JBU0UpCisjZGVmaW5lIEhENjQ0NjFfUENDMF9DT01NCShIRDY0NDYxX1BDQzBfQkFTRStIRDY0NDYxX1BDQ19XSU5ET1cpCisjZGVmaW5lIEhENjQ0NjFfUENDMF9JTwkJKEhENjQ0NjFfUENDMF9CQVNFKzIqSEQ2NDQ2MV9QQ0NfV0lORE9XKQorCisjZGVmaW5lIEhENjQ0NjFfUENDMV9CQVNFCTB4YjQwMDAwMDAJLyogYXJlYSA1ICovCisjZGVmaW5lIEhENjQ0NjFfUENDMV9BVFRSCShIRDY0NDYxX1BDQzFfQkFTRSkKKyNkZWZpbmUgSEQ2NDQ2MV9QQ0MxX0NPTU0JKEhENjQ0NjFfUENDMV9CQVNFK0hENjQ0NjFfUENDX1dJTkRPVykKKworI2RlZmluZSBIRDY0NDYxX1NUQkNSCTB4MTAwMDAKKyNkZWZpbmUgSEQ2NDQ2MV9TVEJDUl9DS0lPX1NUQlkJCQkweDIwMDAKKyNkZWZpbmUgSEQ2NDQ2MV9TVEJDUl9TQUZFQ0tFX0lTVAkJMHgxMDAwCisjZGVmaW5lIEhENjQ0NjFfU1RCQ1JfU0xDS0VfSVNUCQkJMHgwODAwCisjZGVmaW5lIEhENjQ0NjFfU1RCQ1JfU0FGRUNLRV9PU1QJCTB4MDQwMAorI2RlZmluZSBIRDY0NDYxX1NUQkNSX1NMQ0tFX09TVAkJCTB4MDIwMAorI2RlZmluZSBIRDY0NDYxX1NUQkNSX1NNSUFTVAkJCTB4MDEwMAorI2RlZmluZSBIRDY0NDYxX1NUQkNSX1NMQ0RTVAkJCTB4MDA4MAorI2RlZmluZSBIRDY0NDYxX1NUQkNSX1NQQzBTVAkJCTB4MDA0MAorI2RlZmluZSBIRDY0NDYxX1NUQkNSX1NQQzFTVAkJCTB4MDAyMAorI2RlZmluZSBIRDY0NDYxX1NUQkNSX1NBRkVTVAkJCTB4MDAxMAorI2RlZmluZSBIRDY0NDYxX1NUQkNSX1NUTTBTVAkJCTB4MDAwOAorI2RlZmluZSBIRDY0NDYxX1NUQkNSX1NUTTFTVAkJCTB4MDAwNAorI2RlZmluZSBIRDY0NDYxX1NUQkNSX1NJUlNUCQkJCTB4MDAwMgorI2RlZmluZSBIRDY0NDYxX1NUQkNSX1NVUlRTVAkJCTB4MDAwMQorCisjZGVmaW5lIEhENjQ0NjFfU1lTQ1IJMHgxMDAwMgorI2RlZmluZSBIRDY0NDYxX1NDUFVDUgkweDEwMDA0CisKKyNkZWZpbmUgSEQ2NDQ2MV9MQ0RDQkFSCQkweDExMDAwCisjZGVmaW5lIEhENjQ0NjFfTENEQ0xPUgkJMHgxMTAwMgorI2RlZmluZSBIRDY0NDYxX0xDRENDUgkJMHgxMTAwNAorI2RlZmluZSBIRDY0NDYxX0xDRENDUl9NT0ZGCTB4ODAKKworI2RlZmluZQlIRDY0NDYxX0xEUjEJCTB4MTEwMTAKKyNkZWZpbmUJSEQ2NDQ2MV9MRFIxX0RPTgkweDAxCisjZGVmaW5lCUhENjQ0NjFfTERSMV9ESU5WCTB4ODAKKworI2RlZmluZQlIRDY0NDYxX0xEUjIJCTB4MTEwMTIKKyNkZWZpbmUJSEQ2NDQ2MV9MREhOQ1IJCTB4MTEwMTQKKyNkZWZpbmUJSEQ2NDQ2MV9MREhOU1IJCTB4MTEwMTYKKyNkZWZpbmUgSEQ2NDQ2MV9MRFZOVFIJCTB4MTEwMTgKKyNkZWZpbmUgSEQ2NDQ2MV9MRFZORFIJCTB4MTEwMWEKKyNkZWZpbmUgSEQ2NDQ2MV9MRFZTUFIJCTB4MTEwMWMKKyNkZWZpbmUgSEQ2NDQ2MV9MRFIzCQkweDExMDFlCisKKyNkZWZpbmUgSEQ2NDQ2MV9DUFRXQVIJCTB4MTEwMzAJCisjZGVmaW5lIEhENjQ0NjFfQ1BUV0RSCQkweDExMDMyCisjZGVmaW5lIEhENjQ0NjFfQ1BUUkFSCQkweDExMDM0CQorI2RlZmluZSBIRDY0NDYxX0NQVFJEUgkJMHgxMTAzNgorCisjZGVmaW5lIEhENjQ0NjFfR1JET1IJCTB4MTEwNDAKKyNkZWZpbmUgSEQ2NDQ2MV9HUlNDUgkJMHgxMTA0MgorI2RlZmluZSBIRDY0NDYxX0dSQ0ZHUgkJMHgxMTA0NAorI2RlZmluZSBIRDY0NDYxX0dSQ0ZHUl9BQ0NTVEFUVVMJCTB4MTAKKyNkZWZpbmUgSEQ2NDQ2MV9HUkNGR1JfQUNDUkVTRVQJCQkweDA4CisjZGVmaW5lIEhENjQ0NjFfR1JDRkdSX0FDQ1NUQVJUX0JJVEJMVAkweDA2CisjZGVmaW5lIEhENjQ0NjFfR1JDRkdSX0FDQ1NUQVJUX0xJTkUJMHgwNAorI2RlZmluZSBIRDY0NDYxX0dSQ0ZHUl9DT0xPUkRFUFRIMTYJCTB4MDEKKworI2RlZmluZSBIRDY0NDYxX0xOU0FSSAkJMHgxMTA0NgorI2RlZmluZSBIRDY0NDYxX0xOU0FSTAkJMHgxMTA0OAorI2RlZmluZSBIRDY0NDYxX0xOQVhMUgkJMHgxMTA0YQorI2RlZmluZSBIRDY0NDYxX0xOREdSCQkweDExMDRjCisjZGVmaW5lIEhENjQ0NjFfTE5BWFIJCTB4MTEwNGUKKyNkZWZpbmUgSEQ2NDQ2MV9MTkVSVFIJCTB4MTEwNTAKKyNkZWZpbmUgSEQ2NDQ2MV9MTk1EUgkJMHgxMTA1MgorI2RlZmluZSBIRDY0NDYxX0JCVFNTQVJICTB4MTEwNTQKKyNkZWZpbmUgSEQ2NDQ2MV9CQlRTU0FSTAkweDExMDU2CisjZGVmaW5lIEhENjQ0NjFfQkJURFNBUkgJMHgxMTA1OAorI2RlZmluZSBIRDY0NDYxX0JCVERTQVJMCTB4MTEwNWEKKyNkZWZpbmUgSEQ2NDQ2MV9CQlREV1IJCTB4MTEwNWMKKyNkZWZpbmUgSEQ2NDQ2MV9CQlRESFIJCTB4MTEwNWUKKyNkZWZpbmUgSEQ2NDQ2MV9CQlRQQVJICQkweDExMDYwCisjZGVmaW5lIEhENjQ0NjFfQkJUUEFSTAkJMHgxMTA2MgorI2RlZmluZSBIRDY0NDYxX0JCVE1BUkgJCTB4MTEwNjQKKyNkZWZpbmUgSEQ2NDQ2MV9CQlRNQVJMCQkweDExMDY2CisjZGVmaW5lIEhENjQ0NjFfQkJUUk9QUgkJMHgxMTA2OAorI2RlZmluZSBIRDY0NDYxX0JCVE1EUgkJMHgxMTA2YQorCisvKiBQQyBDYXJkIENvbnRyb2xsZXIgUmVnaXN0ZXJzICovCisjZGVmaW5lIEhENjQ0NjFfUENDMElTUiAgICAgICAgIDB4MTIwMDAgLyogc29ja2V0IDAgaW50ZXJmYWNlIHN0YXR1cyAqLworI2RlZmluZSBIRDY0NDYxX1BDQzBHQ1IgICAgICAgICAweDEyMDAyIC8qIHNvY2tldCAwIGdlbmVyYWwgY29udHJvbCAqLworI2RlZmluZSBIRDY0NDYxX1BDQzBDU0NSICAgICAgICAweDEyMDA0IC8qIHNvY2tldCAwIGNhcmQgc3RhdHVzIGNoYW5nZSAqLworI2RlZmluZSBIRDY0NDYxX1BDQzBDU0NJRVIgICAgICAweDEyMDA2IC8qIHNvY2tldCAwIGNhcmQgc3RhdHVzIGNoYW5nZSBpbnRlcnJ1cHQgZW5hYmxlICovCisjZGVmaW5lIEhENjQ0NjFfUENDMFNDUiAgICAgICAgIDB4MTIwMDggLyogc29ja2V0IDAgc29mdHdhcmUgY29udHJvbCAqLworI2RlZmluZSBIRDY0NDYxX1BDQzFJU1IgICAgICAgICAweDEyMDEwIC8qIHNvY2tldCAxIGludGVyZmFjZSBzdGF0dXMgKi8KKyNkZWZpbmUgSEQ2NDQ2MV9QQ0MxR0NSICAgICAgICAgMHgxMjAxMiAvKiBzb2NrZXQgMSBnZW5lcmFsIGNvbnRyb2wgKi8KKyNkZWZpbmUgSEQ2NDQ2MV9QQ0MxQ1NDUiAgICAgICAgMHgxMjAxNCAvKiBzb2NrZXQgMSBjYXJkIHN0YXR1cyBjaGFuZ2UgKi8KKyNkZWZpbmUgSEQ2NDQ2MV9QQ0MxQ1NDSUVSICAgICAgMHgxMjAxNiAvKiBzb2NrZXQgMSBjYXJkIHN0YXR1cyBjaGFuZ2UgaW50ZXJydXB0IGVuYWJsZSAqLworI2RlZmluZSBIRDY0NDYxX1BDQzFTQ1IgICAgICAgICAweDEyMDE4IC8qIHNvY2tldCAxIHNvZnR3YXJlIGNvbnRyb2wgKi8KKworLyogUENDIEludGVyZmFjZSBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSEQ2NDQ2MV9QQ0NJU1JfUkVBRFkJCTB4ODAJLyogY2FyZCByZWFkeSAqLworI2RlZmluZSBIRDY0NDYxX1BDQ0lTUl9NV1AJCTB4NDAJLyogY2FyZCB3cml0ZS1wcm90ZWN0ZWQgKi8KKyNkZWZpbmUgSEQ2NDQ2MV9QQ0NJU1JfVlMyCQkweDIwCS8qIHZvbHRhZ2Ugc2VsZWN0IHBpbiAyICovCisjZGVmaW5lIEhENjQ0NjFfUENDSVNSX1ZTMQkJMHgxMAkvKiB2b2x0YWdlIHNlbGVjdCBwaW4gMSAqLworI2RlZmluZSBIRDY0NDYxX1BDQ0lTUl9DRDIJCTB4MDgJLyogY2FyZCBkZXRlY3QgMiAqLworI2RlZmluZSBIRDY0NDYxX1BDQ0lTUl9DRDEJCTB4MDQJLyogY2FyZCBkZXRlY3QgMSAqLworI2RlZmluZSBIRDY0NDYxX1BDQ0lTUl9CVkQyCQkweDAyCS8qIGJhdHRlcnkgMSAqLworI2RlZmluZSBIRDY0NDYxX1BDQ0lTUl9CVkQxCQkweDAxCS8qIGJhdHRlcnkgMSAqLworCisjZGVmaW5lIEhENjQ0NjFfUENDSVNSX1BDRF9NQVNLCQkweDBjICAgIC8qIGNhcmQgZGV0ZWN0ICovCisjZGVmaW5lIEhENjQ0NjFfUENDSVNSX0JWRF9NQVNLCTB4MDMgICAgLyogYmF0dGVyeSB2b2x0YWdlICovCisjZGVmaW5lIEhENjQ0NjFfUENDSVNSX0JWRF9CQVRHT09ECTB4MDMgICAgLyogYmF0dGVyeSBnb29kICovCisjZGVmaW5lIEhENjQ0NjFfUENDSVNSX0JWRF9CQVRXQVJOCTB4MDEgICAgLyogYmF0dGVyeSBsb3cgd2FybmluZyAqLworI2RlZmluZSBIRDY0NDYxX1BDQ0lTUl9CVkRfQkFUREVBRDEJMHgwMiAgICAvKiBiYXR0ZXJ5IGRlYWQgKi8KKyNkZWZpbmUgSEQ2NDQ2MV9QQ0NJU1JfQlZEX0JBVERFQUQyCTB4MDAgICAgLyogYmF0dGVyeSBkZWFkICovCisKKy8qIFBDQyBHZW5lcmFsIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSEQ2NDQ2MV9QQ0NHQ1JfRFJWRQkJMHg4MCAgICAvKiBvdXRwdXQgZHJpdmUgKi8KKyNkZWZpbmUgSEQ2NDQ2MV9QQ0NHQ1JfUENDUgkJMHg0MCAgICAvKiBQQyBjYXJkIHJlc2V0ICovCisjZGVmaW5lIEhENjQ0NjFfUENDR0NSX1BDQ1QJCTB4MjAgICAgLyogUEMgY2FyZCB0eXBlLCAxPUlPJm1lbSwgMD1tZW0gKi8KKyNkZWZpbmUgSEQ2NDQ2MV9QQ0NHQ1JfVkNDMAkJMHgxMCAgICAvKiB2b2x0YWdlIGNvbnRyb2wgcGluIFZDQzBTRUwwICovCisjZGVmaW5lIEhENjQ0NjFfUENDR0NSX1BNTU9ECQkweDA4ICAgIC8qIG1lbW9yeSBtb2RlICovCisjZGVmaW5lIEhENjQ0NjFfUENDR0NSX1BBMjUJCTB4MDQgICAgLyogcGluIEEyNSAqLworI2RlZmluZSBIRDY0NDYxX1BDQ0dDUl9QQTI0CQkweDAyICAgIC8qIHBpbiBBMjQgKi8KKyNkZWZpbmUgSEQ2NDQ2MV9QQ0NHQ1JfUkVHCQkweDAxICAgIC8qIHBpbiBQQ0MwUkVHIyAqLworCisvKiBQQ0MgQ2FyZCBTdGF0dXMgQ2hhbmdlIFJlZ2lzdGVyICovCisjZGVmaW5lIEhENjQ0NjFfUENDQ1NDUl9TQ0RJCQkweDgwICAgIC8qIHN3IGNhcmQgZGV0ZWN0IGludHIgKi8KKyNkZWZpbmUgSEQ2NDQ2MV9QQ0NDU0NSX1NSVjEJCTB4NDAgICAgLyogcmVzZXJ2ZWQgKi8KKyNkZWZpbmUgSEQ2NDQ2MV9QQ0NDU0NSX0lSRVEJCTB4MjAgICAgLyogSVJFUSBpbnRyIHJlcSAqLworI2RlZmluZSBIRDY0NDYxX1BDQ0NTQ1JfU0MJCTB4MTAgICAgLyogU1RTQ0hHIChzdGF0dXMgY2hhbmdlKSBwaW4gKi8KKyNkZWZpbmUgSEQ2NDQ2MV9QQ0NDU0NSX0NEQwkJMHgwOCAgICAvKiBDRCAoY2FyZCBkZXRlY3QpIGNoYW5nZSAqLworI2RlZmluZSBIRDY0NDYxX1BDQ0NTQ1JfUkMJCTB4MDQgICAgLyogUkVBRFkgY2hhbmdlICovCisjZGVmaW5lIEhENjQ0NjFfUENDQ1NDUl9CVwkJMHgwMiAgICAvKiBiYXR0ZXJ5IHdhcm5pbmcgY2hhbmdlICovCisjZGVmaW5lIEhENjQ0NjFfUENDQ1NDUl9CRAkJMHgwMSAgICAvKiBiYXR0ZXJ5IGRlYWQgY2hhbmdlICovCisKKy8qIFBDQyBDYXJkIFN0YXR1cyBDaGFuZ2UgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLworI2RlZmluZSBIRDY0NDYxX1BDQ0NTQ0lFUl9DUkUJCTB4ODAgICAgLyogY2hhbmdlIHJlc2V0IGVuYWJsZSAqLworI2RlZmluZSBIRDY0NDYxX1BDQ0NTQ0lFUl9JUkVRRV9NQVNLICAgCTB4NjAgICAvKiBJUkVRIGVuYWJsZSAqLworI2RlZmluZSBIRDY0NDYxX1BDQ0NTQ0lFUl9JUkVRRV9ESVNBQkxFRAkweDAwICAgLyogSVJFUSBkaXNhYmxlZCAqLworI2RlZmluZSBIRDY0NDYxX1BDQ0NTQ0lFUl9JUkVRRV9MRVZFTCAgCTB4MjAgICAvKiBJUkVRIGxldmVsLXRyaWdnZXJlZCAqLworI2RlZmluZSBIRDY0NDYxX1BDQ0NTQ0lFUl9JUkVRRV9GQUxMSU5HCTB4NDAgICAvKiBJUkVRIGZhbGxpbmctZWRnZS10cmlnICovCisjZGVmaW5lIEhENjQ0NjFfUENDQ1NDSUVSX0lSRVFFX1JJU0lORyAJMHg2MCAgIC8qIElSRVEgcmlzaW5nLWVkZ2UtdHJpZyAqLworCisjZGVmaW5lIEhENjQ0NjFfUENDQ1NDSUVSX1NDRQkJMHgxMCAgICAvKiBzdGF0dXMgY2hhbmdlIGVuYWJsZSAqLworI2RlZmluZSBIRDY0NDYxX1BDQ0NTQ0lFUl9DREUJCTB4MDggICAgLyogY2FyZCBkZXRlY3QgY2hhbmdlIGVuYWJsZSAqLworI2RlZmluZSBIRDY0NDYxX1BDQ0NTQ0lFUl9SRQkJMHgwNCAgICAvKiByZWFkeSBjaGFuZ2UgZW5hYmxlICovCisjZGVmaW5lIEhENjQ0NjFfUENDQ1NDSUVSX0JXRQkJMHgwMiAgICAvKiBiYXR0ZXJ5IHdhcm4gY2hhbmdlIGVuYWJsZSAqLworI2RlZmluZSBIRDY0NDYxX1BDQ0NTQ0lFUl9CREUJCTB4MDEgICAgLyogYmF0dGVyeSBkZWFkIGNoYW5nZSBlbmFibGUqLworCisvKiBQQ0MgU29mdHdhcmUgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBIRDY0NDYxX1BDQ1NDUl9WQ0MxCQkweDAyCS8qIHZvbHRhZ2UgY29udHJvbCBwaW4gMSAqLworI2RlZmluZSBIRDY0NDYxX1BDQ1NDUl9TV1AJCTB4MDEgICAgLyogd3JpdGUgcHJvdGVjdCAqLworCisKKyNkZWZpbmUgSEQ2NDQ2MV9QME9DUiAgICAgICAgICAgMHgxMjAyYQorI2RlZmluZSBIRDY0NDYxX1AxT0NSICAgICAgICAgICAweDEyMDJjCisjZGVmaW5lIEhENjQ0NjFfUEdDUiAgICAgICAgICAgIDB4MTIwMmUKKworI2RlZmluZSBIRDY0NDYxX0dQQUNSCQkweDE0MDAwCisjZGVmaW5lIEhENjQ0NjFfR1BCQ1IJCTB4MTQwMDIKKyNkZWZpbmUgSEQ2NDQ2MV9HUENDUgkJMHgxNDAwNAorI2RlZmluZSBIRDY0NDYxX0dQRENSCQkweDE0MDA2CisjZGVmaW5lIEhENjQ0NjFfR1BBRFIJCTB4MTQwMTAKKyNkZWZpbmUgSEQ2NDQ2MV9HUEJEUgkJMHgxNDAxMgorI2RlZmluZSBIRDY0NDYxX0dQQ0RSCQkweDE0MDE0CisjZGVmaW5lIEhENjQ0NjFfR1BERFIJCTB4MTQwMTYKKyNkZWZpbmUgSEQ2NDQ2MV9HUEFJQ1IJCTB4MTQwMjAKKyNkZWZpbmUgSEQ2NDQ2MV9HUEJJQ1IJCTB4MTQwMjIKKyNkZWZpbmUgSEQ2NDQ2MV9HUENJQ1IJCTB4MTQwMjQKKyNkZWZpbmUgSEQ2NDQ2MV9HUERJQ1IJCTB4MTQwMjYKKyNkZWZpbmUgSEQ2NDQ2MV9HUEFJU1IJCTB4MTQwNDAKKyNkZWZpbmUgSEQ2NDQ2MV9HUEJJU1IJCTB4MTQwNDIKKyNkZWZpbmUgSEQ2NDQ2MV9HUENJU1IJCTB4MTQwNDQKKyNkZWZpbmUgSEQ2NDQ2MV9HUERJU1IJCTB4MTQwNDYKKworI2RlZmluZSBIRDY0NDYxX05JUlIJCTB4MTUwMDAKKyNkZWZpbmUgSEQ2NDQ2MV9OSU1SCQkweDE1MDAyCisKKyNpZm5kZWYgQ09ORklHX0hENjQ0NjFfSU9CQVNFCisjZGVmaW5lIENPTkZJR19IRDY0NDYxX0lPQkFTRQkweGIwMDAwMDAwCisjZW5kaWYKKyNpZm5kZWYgQ09ORklHX0hENjQ0NjFfSVJRCisjZGVmaW5lIENPTkZJR19IRDY0NDYxX0lSUQkzNgorI2VuZGlmCisKKyNkZWZpbmUgSEQ2NDQ2MV9JUlFCQVNFCQlPRkZDSElQX0lSUV9CQVNFCisjZGVmaW5lIEhENjQ0NjFfSVJRX05VTSAJMTYKKworI2RlZmluZSBIRDY0NDYxX0lSUV9VQVJUICAgIAkoSEQ2NDQ2MV9JUlFCQVNFKzUpCisjZGVmaW5lIEhENjQ0NjFfSVJRX0lSREEgICAgCShIRDY0NDYxX0lSUUJBU0UrNikKKyNkZWZpbmUgSEQ2NDQ2MV9JUlFfVE1VMSAgIAkoSEQ2NDQ2MV9JUlFCQVNFKzkpCisjZGVmaW5lIEhENjQ0NjFfSVJRX1RNVTAgIAkoSEQ2NDQ2MV9JUlFCQVNFKzEwKQorI2RlZmluZSBIRDY0NDYxX0lSUV9HUElPICAgIAkoSEQ2NDQ2MV9JUlFCQVNFKzExKQorI2RlZmluZSBIRDY0NDYxX0lSUV9BRkUgICAgIAkoSEQ2NDQ2MV9JUlFCQVNFKzEyKQorI2RlZmluZSBIRDY0NDYxX0lSUV9QQ0MxIAkoSEQ2NDQ2MV9JUlFCQVNFKzEzKQorI2RlZmluZSBIRDY0NDYxX0lSUV9QQ0MwIAkoSEQ2NDQ2MV9JUlFCQVNFKzE0KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2hkNjQ0NjEvaW8uaCBiL2luY2x1ZGUvYXNtLXNoL2hkNjQ0NjEvaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2YyNDg5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvaGQ2NDQ2MS9pby5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1zaC9pb19oZDY0NDYxLmgKKyAqCisgKiBDb3B5cmlnaHQgMjAwMCBTdHVhcnQgTWVuZWZ5IChzdHVhcnQubWVuZWZ5QHN0LmNvbSkKKyAqCisgKiBNYXkgYmUgY29waWVkIG9yIG1vZGlmaWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIGxpbnV4L0NPUFlJTkcgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgKgorICogSU8gZnVuY3Rpb25zIGZvciBhbiBIRDY0NDYxCisgKi8KKworI2lmbmRlZiBfQVNNX1NIX0lPX0hENjQ0NjFfSAorI2RlZmluZSBfQVNNX1NIX0lPX0hENjQ0NjFfSAorCitleHRlcm4gdW5zaWduZWQgY2hhciBoZDY0NDYxX2luYih1bnNpZ25lZCBsb25nIHBvcnQpOworZXh0ZXJuIHVuc2lnbmVkIHNob3J0IGhkNjQ0NjFfaW53KHVuc2lnbmVkIGxvbmcgcG9ydCk7CitleHRlcm4gdW5zaWduZWQgaW50IGhkNjQ0NjFfaW5sKHVuc2lnbmVkIGxvbmcgcG9ydCk7CisKK2V4dGVybiB2b2lkIGhkNjQ0NjFfb3V0Yih1bnNpZ25lZCBjaGFyIHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpOworZXh0ZXJuIHZvaWQgaGQ2NDQ2MV9vdXR3KHVuc2lnbmVkIHNob3J0IHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpOworZXh0ZXJuIHZvaWQgaGQ2NDQ2MV9vdXRsKHVuc2lnbmVkIGludCB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KTsKKworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgaGQ2NDQ2MV9pbmJfcCh1bnNpZ25lZCBsb25nIHBvcnQpOworZXh0ZXJuIHZvaWQgaGQ2NDQ2MV9vdXRiX3AodW5zaWduZWQgY2hhciB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KTsKKworZXh0ZXJuIHZvaWQgaGQ2NDQ2MV9pbnNiKHVuc2lnbmVkIGxvbmcgcG9ydCwgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCk7CitleHRlcm4gdm9pZCBoZDY0NDYxX2luc3codW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKK2V4dGVybiB2b2lkIGhkNjQ0NjFfaW5zbCh1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpOworCitleHRlcm4gdm9pZCBoZDY0NDYxX291dHNiKHVuc2lnbmVkIGxvbmcgcG9ydCwgY29uc3Qgdm9pZCAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKK2V4dGVybiB2b2lkIGhkNjQ0NjFfb3V0c3codW5zaWduZWQgbG9uZyBwb3J0LCBjb25zdCB2b2lkICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgY291bnQpOworZXh0ZXJuIHZvaWQgaGQ2NDQ2MV9vdXRzbCh1bnNpZ25lZCBsb25nIHBvcnQsIGNvbnN0IHZvaWQgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBjb3VudCk7CisKK2V4dGVybiB1bnNpZ25lZCBzaG9ydCBoZDY0NDYxX3JlYWR3KHVuc2lnbmVkIGxvbmcgYWRkcik7CitleHRlcm4gdm9pZCBoZDY0NDYxX3dyaXRldyh1bnNpZ25lZCBzaG9ydCBiLCB1bnNpZ25lZCBsb25nIGFkZHIpOworCisKK2V4dGVybiBpbnQgaGQ2NDQ2MV9pcnFfZGVtdXgoaW50IGlycSk7CitleHRlcm4gdm9pZCBoZDY0NDYxX3JlZ2lzdGVyX2lycV9kZW11eChpbnQgaXJxLAorCQlpbnQgKCpkZW11eCkoaW50IGlycSwgdm9pZCAqZGV2KSwgdm9pZCAqZGV2KTsKK2V4dGVybiB2b2lkIGhkNjQ0NjFfdW5yZWdpc3Rlcl9pcnFfZGVtdXgoaW50IGlycSk7CisKKyNlbmRpZiAvKiBfQVNNX1NIX0lPX0hENjQ0NjFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvaGQ2NDQ2NS9ncGlvLmggYi9pbmNsdWRlL2FzbS1zaC9oZDY0NDY1L2dwaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2NkY2EyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvaGQ2NDQ2NS9ncGlvLmgKQEAgLTAsMCArMSw0NiBAQAorI2lmbmRlZiBfQVNNX1NIX0hENjQ0NjVfR1BJT18KKyNkZWZpbmUgX0FTTV9TSF9IRDY0NDY1X0dQSU9fIDEKKy8qCisgKiAkSWQ6IGdwaW8uaCx2IDEuMyAyMDAzLzA1LzA0IDE5OjMwOjE0IGxldGhhbCBFeHAgJAorICoKKyAqIEhpdGFjaGkgSEQ2NDQ2NSBjb21wYW5pb24gY2hpcDogR2VuZXJhbCBQdXJwb3NlIElPIHBpbnMgc3VwcG9ydC4KKyAqIFRoaXMgbGF5ZXIgZW5hYmxlcyBvdGhlciBkZXZpY2UgZHJpdmVycyB0byBjb25maWd1cmUgR1BJTworICogcGlucywgZ2V0IGFuZCBzZXQgdGhlaXIgdmFsdWVzLCBhbmQgcmVnaXN0ZXIgYW4gaW50ZXJydXB0CisgKiByb3V0aW5lIGZvciB3aGVuIGlucHV0IHBpbnMgY2hhbmdlIGluIGhhcmR3YXJlLgorICoKKyAqIGJ5IEdyZWcgQmFua3MgPGdiYW5rc0Bwb2NrZXRwZW5ndWlucy5jb20+CisgKiAoYykgMjAwMCBQb2NrZXRQZW5ndWlucyBJbmMuCisgKi8KKyNpbmNsdWRlIDxhc20vaGQ2NDQ2NS5oPgorCisvKiBNYWNybyB0byBjb25zdHJ1Y3QgYSBwb3J0cGluIG51bWJlciAodXNlZCBpbiBhbGwKKyAqIHN1YnNlcXVlbnQgZnVuY3Rpb25zKSBmcm9tIGEgcG9ydCBsZXR0ZXIgYW5kIGEgcGluCisgKiBudW1iZXIsIGUuZy4gSEQ2NDQ2NV9HUElPX1BPUlRQSU4oJ0EnLCA1KS4KKyAqLworI2RlZmluZSBIRDY0NDY1X0dQSU9fUE9SVFBJTihwb3J0LHBpbikJKCgocG9ydCktJ0EnKTw8M3wocGluKSkKKworLyogUGluIGNvbmZpZ3VyYXRpb24gY29uc3RhbnRzIGZvciBfY29uZmlndXJlKCkgKi8KKyNkZWZpbmUgSEQ2NDQ2NV9HUElPX0ZVTkNUSU9OMgkwCS8qIHVzZSB0aGUgcGluJ3MgKm90aGVyKiBmdW5jdGlvbiAqLworI2RlZmluZSBIRDY0NDY1X0dQSU9fT1VUCTEJLyogb3V0cHV0ICovCisjZGVmaW5lIEhENjQ0NjVfR1BJT19JTl9QVUxMVVAJMgkvKiBpbnB1dCwgcHVsbC11cCBNT1Mgb24gKi8KKyNkZWZpbmUgSEQ2NDQ2NV9HUElPX0lOCQkzCS8qIGlucHV0ICovCisKKy8qIENvbmZpZ3VyZSBhIHBpbidzIGRpcmVjdGlvbiAqLworZXh0ZXJuIHZvaWQgaGQ2NDQ2NV9ncGlvX2NvbmZpZ3VyZShpbnQgcG9ydHBpbiwgaW50IGRpcmVjdGlvbik7CisKKy8qIEdldCwgc2V0IHZhbHVlICovCitleHRlcm4gdm9pZCBoZDY0NDY1X2dwaW9fc2V0X3BpbihpbnQgcG9ydHBpbiwgdW5zaWduZWQgaW50IHZhbHVlKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgaGQ2NDQ2NV9ncGlvX2dldF9waW4oaW50IHBvcnRwaW4pOworZXh0ZXJuIHZvaWQgaGQ2NDQ2NV9ncGlvX3NldF9wb3J0KGludCBwb3J0LCB1bnNpZ25lZCBpbnQgdmFsdWUpOworZXh0ZXJuIHVuc2lnbmVkIGludCBoZDY0NDY1X2dwaW9fZ2V0X3BvcnQoaW50IHBvcnQpOworCisvKiBtb2RlIGNvbnN0YW50cyBmb3IgX3JlZ2lzdGVyX2lycSgpICovCisjZGVmaW5lIEhENjQ0NjVfR1BJT19GQUxMSU5HCTAKKyNkZWZpbmUgSEQ2NDQ2NV9HUElPX1JJU0lORwkxCisKKy8qIEludGVycnVwdCBvbiBleHRlcm5hbCB2YWx1ZSBjaGFuZ2UgKi8KK2V4dGVybiB2b2lkIGhkNjQ0NjVfZ3Bpb19yZWdpc3Rlcl9pcnEoaW50IHBvcnRwaW4sIGludCBtb2RlLAorCXZvaWQgKCpoYW5kbGVyKShpbnQgcG9ydHBpbiwgdm9pZCAqZGV2KSwgdm9pZCAqZGV2KTsKK2V4dGVybiB2b2lkIGhkNjQ0NjVfZ3Bpb191bnJlZ2lzdGVyX2lycShpbnQgcG9ydHBpbik7CisKKyNlbmRpZiAvKiBfQVNNX1NIX0hENjQ0NjVfR1BJT18gICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9oZDY0NDY1L2hkNjQ0NjUuaCBiL2luY2x1ZGUvYXNtLXNoL2hkNjQ0NjUvaGQ2NDQ2NS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2NzIwMzIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9oZDY0NDY1L2hkNjQ0NjUuaApAQCAtMCwwICsxLDI1NyBAQAorI2lmbmRlZiBfQVNNX1NIX0hENjQ0NjVfCisjZGVmaW5lIF9BU01fU0hfSEQ2NDQ2NV8gMQorLyoKKyAqICRJZDogaGQ2NDQ2NS5oLHYgMS4zIDIwMDMvMDUvMDQgMTk6MzA6MTUgbGV0aGFsIEV4cCAkCisgKgorICogSGl0YWNoaSBIRDY0NDY1IGNvbXBhbmlvbiBjaGlwIHN1cHBvcnQKKyAqCisgKiBieSBHcmVnIEJhbmtzIDxnYmFua3NAcG9ja2V0cGVuZ3VpbnMuY29tPgorICogKGMpIDIwMDAgUG9ja2V0UGVuZ3VpbnMgSW5jLgorICoKKyAqIERlcml2ZWQgZnJvbSA8YXNtL2hkNjQ0NjEuaD4gd2hpY2ggYm9yZSB0aGUgbWVzc2FnZToKKyAqIENvcHlyaWdodCAoQykgMjAwMCBZQUVHQVNISSBUYWtlc2hpCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisKKy8qCisgKiBOb3RlIHRoYXQgcmVnaXN0ZXJzIGFyZSBkZWZpbmVkIGhlcmUgYXMgdmlydHVhbCBwb3J0IG51bWJlcnMsCisgKiB3aGljaCBoYXZlIG5vIG1lYW5pbmcgZXhjZXB0IHRvIGdldCB0cmFuc2xhdGVkIGJ5IGhkNjQ0NjVfaXNhX3BvcnQyYWRkcigpCisgKiB0byBhbiBhZGRyZXNzIGluIHRoZSByYW5nZSAweGIwMDAwMDAwLTB4YjNmZmZmZmYuICBOb3RlIHRoYXQKKyAqIHRoaXMgdHJhbnNsYXRpb24gaGFwcGVucyB0byBjb25zaXN0IG9mIGFkZGluZyB0aGUgbG93ZXIgMTYgYml0cworICogb2YgdGhlIHZpcnR1YWwgcG9ydCBudW1iZXIgdG8gMHhiMDAwMDAwMC4gIE5vdGUgYWxzbyB0aGF0IHRoZSBtYW51YWwKKyAqIHNob3dzIGFkZHJlc3NlcyBhcyBhYnNvbHV0ZSBwaHlzaWNhbCBhZGRyZXNzZXMgc3RhcnRpbmcgYXQgMHgxMDAwMDAwMCwKKyAqIHNvIGUuZy4gdGhlIE5JUlIgcmVnaXN0ZXIgaXMgbGlzdGVkIGFzIDB4MTUwMDAgaGVyZSwgMHgxMDAwNTAwMCBpbiB0aGUKKyAqIG1hbnVhbCwgYW5kIGFjY2Vzc2VkIHVzaW5nIGFkZHJlc3MgMHhiMDAwNTAwMCAtIEdyZWcuCisgKi8KKworLyogU3lzdGVtIHJlZ2lzdGVycyAqLworI2RlZmluZSBIRDY0NDY1X1JFR19TUlIgICAgIDB4MTAwMGMgCS8qIFN5c3RlbSBSZXZpc2lvbiBSZWdpc3RlciAqLworI2RlZmluZSBIRDY0NDY1X1JFR19TRElEICAgIDB4MTAwMTAgCS8qIFN5c3RlbSBEZXZpY2UgSUQgUmVnICovCisjZGVmaW5lICAgICBIRDY0NDY1X1NESUQgICAgICAgICAgICAweDgxMjIgIC8qIDY0NDY1IGRldmljZSBJRCAqLworCisvKiBQb3dlciBNYW5hZ2VtZW50IHJlZ2lzdGVycyAqLworI2RlZmluZSBIRDY0NDY1X1JFR19TTVNDUiAgIDB4MTAwMDAgCS8qIFN5c3RlbSBNb2R1bGUgU3RhbmRieSBDb250cm9sIFJlZyAqLworI2RlZmluZQkgICAgSEQ2NDQ2NV9TTVNDUl9QUzJTVCAgICAgMHg0MDAwICAvKiBQUy8yIFN0YW5kYnkgKi8KKyNkZWZpbmUJICAgIEhENjQ0NjVfU01TQ1JfQURDU1QgICAgIDB4MTAwMCAgLyogQURDIFN0YW5kYnkgKi8KKyNkZWZpbmUJICAgIEhENjQ0NjVfU01TQ1JfVUFSVFNUICAgIDB4MDgwMCAgLyogVUFSVCBTdGFuZGJ5ICovCisjZGVmaW5lCSAgICBIRDY0NDY1X1NNU0NSX1NDRElTVCAgICAweDAyMDAgIC8qIFNlcmlhbCBDb2RlYyBTdGFuZGJ5ICovCisjZGVmaW5lCSAgICBIRDY0NDY1X1NNU0NSX1BQU1QJICAgIDB4MDEwMCAgLyogUGFyYWxsZWwgUG9ydCBTdGFuZGJ5ICovCisjZGVmaW5lCSAgICBIRDY0NDY1X1NNU0NSX1BDMFNUICAgICAweDAwNDAgIC8qIFBDTUNJQTAgU3RhbmRieSAqLworI2RlZmluZQkgICAgSEQ2NDQ2NV9TTVNDUl9QQzFTVCAgICAgMHgwMDIwICAvKiBQQ01DSUExIFN0YW5kYnkgKi8KKyNkZWZpbmUJICAgIEhENjQ0NjVfU01TQ1JfQUZFU1QgICAgIDB4MDAxMCAgLyogQUZFIFN0YW5kYnkgKi8KKyNkZWZpbmUJICAgIEhENjQ0NjVfU01TQ1JfVE0wU1QgICAgIDB4MDAwOCAgLyogVGltZXIwIFN0YW5kYnkgKi8KKyNkZWZpbmUJICAgIEhENjQ0NjVfU01TQ1JfVE0xU1QgICAgIDB4MDAwNCAgLyogVGltZXIxIFN0YW5kYnkgKi8KKyNkZWZpbmUJICAgIEhENjQ0NjVfU01TQ1JfSVJEQVNUICAgIDB4MDAwMiAgLyogSVJEQSBTdGFuZGJ5ICovCisjZGVmaW5lCSAgICBIRDY0NDY1X1NNU0NSX0tCQ1NUICAgICAweDAwMDEgIC8qIEtleWJvYXJkIENvbnRyb2xsZXIgU3RhbmRieSAqLworIAorLyogSW50ZXJydXB0IENvbnRyb2xsZXIgcmVnaXN0ZXJzICovCisjZGVmaW5lIEhENjQ0NjVfUkVHX05JUlIgICAgMHgxNTAwMCAgCS8qIEludGVycnVwdCBSZXF1ZXN0IFJlZ2lzdGVyICovCisjZGVmaW5lIEhENjQ0NjVfUkVHX05JTVIgICAgMHgxNTAwMiAgCS8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovCisjZGVmaW5lIEhENjQ0NjVfUkVHX05JVFIgICAgMHgxNTAwNCAgCS8qIEludGVycnVwdCBUcmlnZ2VyIE1vZGUgUmVnaXN0ZXIgKi8KKworLyogVGltZXIgcmVnaXN0ZXJzICovCisjZGVmaW5lIEhENjQ0NjVfUkVHX1RDVlIxICAgMHgxNjAwMCAgCS8qIFRpbWVyIDEgY29uc3RhbnQgdmFsdWUgcmVnaXN0ZXIgICovCisjZGVmaW5lIEhENjQ0NjVfUkVHX1RDVlIwICAgMHgxNjAwMgkvKiBUaW1lciAwIGNvbnN0YW50IHZhbHVlIHJlZ2lzdGVyICAqLworI2RlZmluZSBIRDY0NDY1X1JFR19UUlZSMSAgIDB4MTYwMDQJLyogVGltZXIgMSByZWFkIHZhbHVlIHJlZ2lzdGVyICAqLworI2RlZmluZSBIRDY0NDY1X1JFR19UUlZSMCAgIDB4MTYwMDYJLyogVGltZXIgMCByZWFkIHZhbHVlIHJlZ2lzdGVyICAqLworI2RlZmluZSBIRDY0NDY1X1JFR19UQ1IxICAgIDB4MTYwMDgJLyogVGltZXIgMSBjb250cm9sIHJlZ2lzdGVyICAqLworI2RlZmluZSBIRDY0NDY1X1JFR19UQ1IwICAgIDB4MTYwMEEJLyogVGltZXIgMCBjb250cm9sIHJlZ2lzdGVyICAqLworI2RlZmluZQkgICAgSEQ2NDQ2NV9UQ1JfRUFEVCAJMHgxMAkgICAgLyogRW5hYmxlIEFEVFJJRyMgc2lnbmFsICovCisjZGVmaW5lCSAgICBIRDY0NDY1X1RDUl9FVE1PIAkweDA4CSAgICAvKiBFbmFibGUgVE1PIHNpZ25hbCAqLworI2RlZmluZQkgICAgSEQ2NDQ2NV9UQ1JfUFNUX01BU0sgMHgwNgkgICAgLyogQ2xvY2sgUHJlc2NhbGUgKi8KKyNkZWZpbmUJICAgIEhENjQ0NjVfVENSX1BTVF8xIAkweDA2CSAgICAvKiAxOjEgKi8KKyNkZWZpbmUJICAgIEhENjQ0NjVfVENSX1BTVF80IAkweDA0CSAgICAvKiAxOjQgKi8KKyNkZWZpbmUJICAgIEhENjQ0NjVfVENSX1BTVF84IAkweDAyCSAgICAvKiAxOjggKi8KKyNkZWZpbmUJICAgIEhENjQ0NjVfVENSX1BTVF8xNiAJMHgwMAkgICAgLyogMToxNiAqLworI2RlZmluZQkgICAgSEQ2NDQ2NV9UQ1JfVFNUUCAJMHgwMQkgICAgLyogU3RhcnQvU3RvcCB0aW1lciAqLworI2RlZmluZSBIRDY0NDY1X1JFR19USVJSICAgIDB4MTYwMEMJLyogVGltZXIgaW50ZXJydXB0IHJlcXVlc3QgcmVnaXN0ZXIgICovCisjZGVmaW5lIEhENjQ0NjVfUkVHX1RJRFIgICAgMHgxNjAwRQkvKiBUaW1lciBpbnRlcnJ1cHQgZGlzYWJsZSByZWdpc3RlciAgKi8KKyNkZWZpbmUgSEQ2NDQ2NV9SRUdfUFdNMUNTICAweDE2MDEwCS8qIFBXTSAxIGNsb2NrIHNjYWxlIHJlZ2lzdGVyICAqLworI2RlZmluZSBIRDY0NDY1X1JFR19QV00xTFBDIDB4MTYwMTIJLyogUFdNIDEgbG93IHB1bHNlIHdpZHRoIGNvdW50ZXIgcmVnaXN0ZXIgICovCisjZGVmaW5lIEhENjQ0NjVfUkVHX1BXTTFIUEMgMHgxNjAxNAkvKiBQV00gMSBoaWdoIHB1bHNlIHdpZHRoIGNvdW50ZXIgcmVnaXN0ZXIgICovCisjZGVmaW5lIEhENjQ0NjVfUkVHX1BXTTBDUyAgMHgxNjAxOAkvKiBQV00gMCBjbG9jayBzY2FsZSByZWdpc3RlciAgKi8KKyNkZWZpbmUgSEQ2NDQ2NV9SRUdfUFdNMExQQyAweDE2MDFBCS8qIFBXTSAwIGxvdyBwdWxzZSB3aWR0aCBjb3VudGVyIHJlZ2lzdGVyICAqLworI2RlZmluZSBIRDY0NDY1X1JFR19QV00wSFBDIDB4MTYwMUMJLyogUFdNIDAgaGlnaCBwdWxzZSB3aWR0aCBjb3VudGVyIHJlZ2lzdGVyICAqLworCisvKiBBbmFsb2cvRGlnaXRhbCBDb252ZXJ0ZXIgcmVnaXN0ZXJzICovCisjZGVmaW5lIEhENjQ0NjVfUkVHX0FERFJBICAgMHgxRTAwMAkvKiBBL0QgZGF0YSByZWdpc3RlciBBICovCisjZGVmaW5lIEhENjQ0NjVfUkVHX0FERFJCICAgMHgxRTAwMgkvKiBBL0QgZGF0YSByZWdpc3RlciBCICovCisjZGVmaW5lIEhENjQ0NjVfUkVHX0FERFJDICAgMHgxRTAwNAkvKiBBL0QgZGF0YSByZWdpc3RlciBDICovCisjZGVmaW5lIEhENjQ0NjVfUkVHX0FERFJEICAgMHgxRTAwNgkvKiBBL0QgZGF0YSByZWdpc3RlciBEICovCisjZGVmaW5lIEhENjQ0NjVfUkVHX0FEQ1NSICAgMHgxRTAwOAkvKiBBL0QgY29udHJvbC9zdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgIEhENjQ0NjVfQURDU1JfQURGCSAgICAweDgwICAgIC8qIEEvRCBFbmQgRmxhZyAqLworI2RlZmluZSAgICAgSEQ2NDQ2NV9BRENTUl9BRFNUCSAgICAweDQwICAgIC8qIEEvRCBTdGFydCBGbGFnICovCisjZGVmaW5lICAgICBIRDY0NDY1X0FEQ1NSX0FESVMJICAgIDB4MjAgICAgLyogQS9EIEludGVycnVwdCBTdGF0dXMgKi8KKyNkZWZpbmUgICAgIEhENjQ0NjVfQURDU1JfVFJHRQkgICAgMHgxMCAgICAvKiBBL0QgVHJpZ2dlciBFbmFibGUgKi8KKyNkZWZpbmUgICAgIEhENjQ0NjVfQURDU1JfQURJRQkgICAgMHgwOCAgICAvKiBBL0QgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSAgICAgSEQ2NDQ2NV9BRENTUl9TQ0FOCSAgICAweDA0ICAgIC8qIEEvRCBTY2FuIE1vZGUgKi8KKyNkZWZpbmUgICAgIEhENjQ0NjVfQURDU1JfQ0hfTUFTSyAgIDB4MDMgICAgLyogQS9EIENoYW5uZWwgKi8KKyNkZWZpbmUgSEQ2NDQ2NV9SRUdfQURDQUxDUiAweDFFMDBBICAJLyogQS9EIGNhbGlicmF0aW9uIHNhbXBsZSBjb250cm9sICovCisjZGVmaW5lIEhENjQ0NjVfUkVHX0FEQ0FMICAgMHgxRTAwQyAgCS8qIEEvRCBjYWxpYnJhdGlvbiBkYXRhIHJlZ2lzdGVyICovCisKKworLyogR2VuZXJhbCBQdXJwb3NlIEkvTyBwb3J0cyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgSEQ2NDQ2NV9SRUdfR1BBQ1IgICAweDE0MDAwICAJLyogUG9ydCBBIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSEQ2NDQ2NV9SRUdfR1BCQ1IgICAweDE0MDAyICAJLyogUG9ydCBCIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSEQ2NDQ2NV9SRUdfR1BDQ1IgICAweDE0MDA0ICAJLyogUG9ydCBDIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSEQ2NDQ2NV9SRUdfR1BEQ1IgICAweDE0MDA2ICAJLyogUG9ydCBEIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSEQ2NDQ2NV9SRUdfR1BFQ1IgICAweDE0MDA4ICAJLyogUG9ydCBFIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSEQ2NDQ2NV9SRUdfR1BBRFIgICAweDE0MDEwICAJLyogUG9ydCBBIERhdGEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSEQ2NDQ2NV9SRUdfR1BCRFIgICAweDE0MDEyICAJLyogUG9ydCBCIERhdGEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSEQ2NDQ2NV9SRUdfR1BDRFIgICAweDE0MDE0ICAJLyogUG9ydCBDIERhdGEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSEQ2NDQ2NV9SRUdfR1BERFIgICAweDE0MDE2ICAJLyogUG9ydCBEIERhdGEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSEQ2NDQ2NV9SRUdfR1BFRFIgICAweDE0MDE4ICAJLyogUG9ydCBFIERhdGEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSEQ2NDQ2NV9SRUdfR1BBSUNSICAweDE0MDIwICAJLyogUG9ydCBBIEludGVycnVwdCBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIEhENjQ0NjVfUkVHX0dQQklDUiAgMHgxNDAyMiAgCS8qIFBvcnQgQiBJbnRlcnJ1cHQgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBIRDY0NDY1X1JFR19HUENJQ1IgIDB4MTQwMjQgIAkvKiBQb3J0IEMgSW50ZXJydXB0IENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSEQ2NDQ2NV9SRUdfR1BESUNSICAweDE0MDI2ICAJLyogUG9ydCBEIEludGVycnVwdCBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIEhENjQ0NjVfUkVHX0dQRUlDUiAgMHgxNDAyOCAgCS8qIFBvcnQgRSBJbnRlcnJ1cHQgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBIRDY0NDY1X1JFR19HUEFJU1IgIDB4MTQwNDAgIAkvKiBQb3J0IEEgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBIRDY0NDY1X1JFR19HUEJJU1IgIDB4MTQwNDIgIAkvKiBQb3J0IEIgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBIRDY0NDY1X1JFR19HUENJU1IgIDB4MTQwNDQgIAkvKiBQb3J0IEMgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBIRDY0NDY1X1JFR19HUERJU1IgIDB4MTQwNDYgIAkvKiBQb3J0IEQgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBIRDY0NDY1X1JFR19HUEVJU1IgIDB4MTQwNDggIAkvKiBQb3J0IEUgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLworCisvKiBQQ01DSUEgYnJpZGdlIGludGVyZmFjZSAqLworI2RlZmluZSBIRDY0NDY1X1JFR19QQ0MwSVNSCTB4MTIwMDAJLyogc29ja2V0IDAgaW50ZXJmYWNlIHN0YXR1cyAqLyAKKyNkZWZpbmUgICAgIEhENjQ0NjVfUENDSVNSX1BSRUFEWSAgIAkgMHg4MCAgICAvKiBtZW0gY2FyZCByZWFkeSAvIGlvIGNhcmQgSVJFUSAqLworI2RlZmluZSAgICAgSEQ2NDQ2NV9QQ0NJU1JfUElSRVEgICAgCSAweDgwCisjZGVmaW5lICAgICBIRDY0NDY1X1BDQ0lTUl9QTVdQICAgICAJIDB4NDAgICAgLyogbWVtIGNhcmQgd3JpdGUtcHJvdGVjdGVkICovCisjZGVmaW5lICAgICBIRDY0NDY1X1BDQ0lTUl9QVlMyIAkgMHgyMCAgICAvKiB2b2x0YWdlIHNlbGVjdCBwaW4gMiAqLworI2RlZmluZSAgICAgSEQ2NDQ2NV9QQ0NJU1JfUFZTMSAJIDB4MTAgICAgLyogdm9sdGFnZSBzZWxlY3QgcGluIDEgKi8KKyNkZWZpbmUgICAgIEhENjQ0NjVfUENDSVNSX1BDRF9NQVNLIAkgMHgwYyAgICAvKiBjYXJkIGRldGVjdCAqLworI2RlZmluZSAgICAgSEQ2NDQ2NV9QQ0NJU1JfUEJWRF9NQVNLICAgICAweDAzICAgIC8qIGJhdHRlcnkgdm9sdGFnZSAqLworI2RlZmluZSAgICAgSEQ2NDQ2NV9QQ0NJU1JfUEJWRF9CQVRHT09EICAweDAzICAgIC8qIGJhdHRlcnkgZ29vZCAqLworI2RlZmluZSAgICAgSEQ2NDQ2NV9QQ0NJU1JfUEJWRF9CQVRXQVJOICAweDAxICAgIC8qIGJhdHRlcnkgbG93IHdhcm5pbmcgKi8KKyNkZWZpbmUgICAgIEhENjQ0NjVfUENDSVNSX1BCVkRfQkFUREVBRDEgMHgwMiAgICAvKiBiYXR0ZXJ5IGRlYWQgKi8KKyNkZWZpbmUgICAgIEhENjQ0NjVfUENDSVNSX1BCVkRfQkFUREVBRDIgMHgwMCAgICAvKiBiYXR0ZXJ5IGRlYWQgKi8KKyNkZWZpbmUgSEQ2NDQ2NV9SRUdfUENDMEdDUgkweDEyMDAyCS8qIHNvY2tldCAwIGdlbmVyYWwgY29udHJvbCAqLyAKKyNkZWZpbmUgICAgIEhENjQ0NjVfUENDR0NSX1BEUlYgICAJIDB4ODAgICAgLyogb3V0cHV0IGRyaXZlICovCisjZGVmaW5lICAgICBIRDY0NDY1X1BDQ0dDUl9QQ0NSICAgCSAweDQwICAgIC8qIFBDIGNhcmQgcmVzZXQgKi8KKyNkZWZpbmUgICAgIEhENjQ0NjVfUENDR0NSX1BDQ1QgICAJIDB4MjAgICAgLyogUEMgY2FyZCB0eXBlLCAxPUlPJm1lbSwgMD1tZW0gKi8KKyNkZWZpbmUgICAgIEhENjQ0NjVfUENDR0NSX1BWQ0MwICAgCSAweDEwICAgIC8qIHZvbHRhZ2UgY29udHJvbCBwaW4gVkNDMFNFTDAgKi8KKyNkZWZpbmUgICAgIEhENjQ0NjVfUENDR0NSX1BNTU9EICAgCSAweDA4ICAgIC8qIG1lbW9yeSBtb2RlICovCisjZGVmaW5lICAgICBIRDY0NDY1X1BDQ0dDUl9QUEEyNSAgIAkgMHgwNCAgICAvKiBwaW4gQTI1ICovCisjZGVmaW5lICAgICBIRDY0NDY1X1BDQ0dDUl9QUEEyNCAgIAkgMHgwMiAgICAvKiBwaW4gQTI0ICovCisjZGVmaW5lICAgICBIRDY0NDY1X1BDQ0dDUl9QUkVHICAgCSAweDAxICAgIC8qIHBpbmcgUENDMFJFRyMgKi8KKyNkZWZpbmUgSEQ2NDQ2NV9SRUdfUENDMENTQ1IJMHgxMjAwNAkvKiBzb2NrZXQgMCBjYXJkIHN0YXR1cyBjaGFuZ2UgKi8gCisjZGVmaW5lICAgICBIRDY0NDY1X1BDQ0NTQ1JfUFNDREkgICAJIDB4ODAgICAgLyogc3cgY2FyZCBkZXRlY3QgaW50ciAqLworI2RlZmluZSAgICAgSEQ2NDQ2NV9QQ0NDU0NSX1BTV1NFTCAgIAkgMHg0MCAgICAvKiBwb3dlciBzZWxlY3QgKi8KKyNkZWZpbmUgICAgIEhENjQ0NjVfUENDQ1NDUl9QSVJFUSAgIAkgMHgyMCAgICAvKiBJUkVRIGludHIgcmVxICovCisjZGVmaW5lICAgICBIRDY0NDY1X1BDQ0NTQ1JfUFNDICAgCSAweDEwICAgIC8qIFNUU0NIRyAoc3RhdHVzIGNoYW5nZSkgcGluICovCisjZGVmaW5lICAgICBIRDY0NDY1X1BDQ0NTQ1JfUENEQyAgIAkgMHgwOCAgICAvKiBDRCAoY2FyZCBkZXRlY3QpIGNoYW5nZSAqLworI2RlZmluZSAgICAgSEQ2NDQ2NV9QQ0NDU0NSX1BSQyAgIAkgMHgwNCAgICAvKiByZWFkeSBjaGFuZ2UgKi8KKyNkZWZpbmUgICAgIEhENjQ0NjVfUENDQ1NDUl9QQlcgICAJIDB4MDIgICAgLyogYmF0dGVyeSB3YXJuaW5nIGNoYW5nZSAqLworI2RlZmluZSAgICAgSEQ2NDQ2NV9QQ0NDU0NSX1BCRCAgIAkgMHgwMSAgICAvKiBiYXR0ZXJ5IGRlYWQgY2hhbmdlICovCisjZGVmaW5lIEhENjQ0NjVfUkVHX1BDQzBDU0NJRVIJMHgxMjAwNgkvKiBzb2NrZXQgMCBjYXJkIHN0YXR1cyBjaGFuZ2UgaW50ZXJydXB0IGVuYWJsZSAqLyAKKyNkZWZpbmUgICAgIEhENjQ0NjVfUENDQ1NDSUVSX1BDUkUgICAJIDB4ODAgICAgLyogY2hhbmdlIHJlc2V0IGVuYWJsZSAqLworI2RlZmluZSAgICAgSEQ2NDQ2NV9QQ0NDU0NJRVJfUElSRVFFX01BU0sgICAJMHg2MCAgIC8qIElSRVEgZW5hYmxlICovCisjZGVmaW5lICAgICBIRDY0NDY1X1BDQ0NTQ0lFUl9QSVJFUUVfRElTQUJMRUQJMHgwMCAgIC8qIElSRVEgZGlzYWJsZWQgKi8KKyNkZWZpbmUgICAgIEhENjQ0NjVfUENDQ1NDSUVSX1BJUkVRRV9MRVZFTCAgCTB4MjAgICAvKiBJUkVRIGxldmVsLXRyaWdnZXJlZCAqLworI2RlZmluZSAgICAgSEQ2NDQ2NV9QQ0NDU0NJRVJfUElSRVFFX0ZBTExJTkcJMHg0MCAgIC8qIElSRVEgZmFsbGluZy1lZGdlLXRyaWcgKi8KKyNkZWZpbmUgICAgIEhENjQ0NjVfUENDQ1NDSUVSX1BJUkVRRV9SSVNJTkcgCTB4NjAgICAvKiBJUkVRIHJpc2luZy1lZGdlLXRyaWcgKi8KKyNkZWZpbmUgICAgIEhENjQ0NjVfUENDQ1NDSUVSX1BTQ0UgICAJIDB4MTAgICAgLyogc3RhdHVzIGNoYW5nZSBlbmFibGUgKi8KKyNkZWZpbmUgICAgIEhENjQ0NjVfUENDQ1NDSUVSX1BDREUgICAJIDB4MDggICAgLyogY2FyZCBkZXRlY3QgY2hhbmdlIGVuYWJsZSAqLworI2RlZmluZSAgICAgSEQ2NDQ2NV9QQ0NDU0NJRVJfUFJFICAgCSAweDA0ICAgIC8qIHJlYWR5IGNoYW5nZSBlbmFibGUgKi8KKyNkZWZpbmUgICAgIEhENjQ0NjVfUENDQ1NDSUVSX1BCV0UgICAJIDB4MDIgICAgLyogYmF0dGVyeSB3YXJuIGNoYW5nZSBlbmFibGUgKi8KKyNkZWZpbmUgICAgIEhENjQ0NjVfUENDQ1NDSUVSX1BCREUgICAJIDB4MDEgICAgLyogYmF0dGVyeSBkZWFkIGNoYW5nZSBlbmFibGUqLworI2RlZmluZSBIRDY0NDY1X1JFR19QQ0MwU0NSCTB4MTIwMDgJLyogc29ja2V0IDAgc29mdHdhcmUgY29udHJvbCAqLyAKKyNkZWZpbmUgICAgIEhENjQ0NjVfUENDU0NSX1NIRE4gICAJIDB4MTAgICAgLyogVFBTMjIwNiBTSHV0RG93TiBwaW4gKi8KKyNkZWZpbmUgICAgIEhENjQ0NjVfUENDU0NSX1NXUCAgIAkgMHgwMSAgICAvKiB3cml0ZSBwcm90ZWN0ICovCisjZGVmaW5lIEhENjQ0NjVfUkVHX1BDQ1BTUgkweDEyMDBBCS8qIHNlcmlhbCBwb3dlciBzd2l0Y2ggY29udHJvbCAqLyAKKyNkZWZpbmUgSEQ2NDQ2NV9SRUdfUENDMUlTUgkweDEyMDEwCS8qIHNvY2tldCAxIGludGVyZmFjZSBzdGF0dXMgKi8gCisjZGVmaW5lIEhENjQ0NjVfUkVHX1BDQzFHQ1IJMHgxMjAxMgkvKiBzb2NrZXQgMSBnZW5lcmFsIGNvbnRyb2wgKi8gCisjZGVmaW5lIEhENjQ0NjVfUkVHX1BDQzFDU0NSCTB4MTIwMTQJLyogc29ja2V0IDEgY2FyZCBzdGF0dXMgY2hhbmdlICovIAorI2RlZmluZSBIRDY0NDY1X1JFR19QQ0MxQ1NDSUVSCTB4MTIwMTYJLyogc29ja2V0IDEgY2FyZCBzdGF0dXMgY2hhbmdlIGludGVycnVwdCBlbmFibGUgKi8gCisjZGVmaW5lIEhENjQ0NjVfUkVHX1BDQzFTQ1IJMHgxMjAxOAkvKiBzb2NrZXQgMSBzb2Z0d2FyZSBjb250cm9sICovIAorCisKKy8qIFBTLzIgS2V5Ym9hcmQgYW5kIG1vdXNlIGNvbnRyb2xsZXIgLS0gKm5vdCogcmVnaXN0ZXIgY29tcGF0aWJsZSAqLworI2RlZmluZSBIRDY0NDY1X1JFR19LQkNTUiAgIAkweDFkYzAwIC8qIEtleWJvYXJkIENvbnRyb2wvU3RhdHVzIHJlZyAqLworI2RlZmluZSAgICAgSEQ2NDQ2NV9LQkNTUl9LQkNJRSAgIAkgMHg4MDAwICAgIC8qIEtCQ0sgSW5wdXQgRW5hYmxlICovCisjZGVmaW5lICAgICBIRDY0NDY1X0tCQ1NSX0tCQ09FICAgCSAweDQwMDAgICAgLyogS0JDSyBPdXRwdXQgRW5hYmxlICovCisjZGVmaW5lICAgICBIRDY0NDY1X0tCQ1NSX0tCRE9FICAgCSAweDIwMDAgICAgLyogS0IgREFUQSBPdXRwdXQgRW5hYmxlICovCisjZGVmaW5lICAgICBIRDY0NDY1X0tCQ1NSX0tCQ0QgICAJIDB4MTAwMCAgICAvKiBLQkNLIERyaXZlbiAqLworI2RlZmluZSAgICAgSEQ2NDQ2NV9LQkNTUl9LQkREICAgCSAweDA4MDAgICAgLyogS0IgREFUQSBEcml2ZW4gKi8KKyNkZWZpbmUgICAgIEhENjQ0NjVfS0JDU1JfS0JDUyAgIAkgMHgwNDAwICAgIC8qIEtCQ0sgcGluIFN0YXR1cyAqLworI2RlZmluZSAgICAgSEQ2NDQ2NV9LQkNTUl9LQkRTICAgCSAweDAyMDAgICAgLyogS0IgREFUQSBwaW4gU3RhdHVzICovCisjZGVmaW5lICAgICBIRDY0NDY1X0tCQ1NSX0tCRFAgICAJIDB4MDEwMCAgICAvKiBLQiBEQVRBIFBhcml0eSBiaXQgKi8KKyNkZWZpbmUgICAgIEhENjQ0NjVfS0JDU1JfS0JEX01BU0sgICAJIDB4MDBmZiAgICAvKiBLRCBEQVRBIHNoaWZ0IHJlZyAqLworI2RlZmluZSBIRDY0NDY1X1JFR19LQklTUiAgIAkweDFkYzA0IC8qIEtleWJvYXJkIEludGVycnVwdCBTdGF0dXMgcmVnICovCisjZGVmaW5lICAgICBIRDY0NDY1X0tCSVNSX0tCUkRGICAgCSAweDAwMDEgICAgLyogS0IgUmVjZWl2ZWQgRGF0YSBGdWxsICovCisjZGVmaW5lIEhENjQ0NjVfUkVHX01TQ1NSICAgCTB4MWRjMTAgLyogTW91c2UgQ29udHJvbC9TdGF0dXMgcmVnICovCisjZGVmaW5lIEhENjQ0NjVfUkVHX01TSVNSICAgCTB4MWRjMTQgLyogTW91c2UgSW50ZXJydXB0IFN0YXR1cyByZWcgKi8KKworCisvKgorICogTG9naWNhbCBhZGRyZXNzIGF0IHdoaWNoIHRoZSBIRDY0NDY1IGlzIG1hcHBlZC4gIE5vdGUgdGhhdCB0aGlzCisgKiBzaG91bGQgYWx3YXlzIGJlIGluIHRoZSBQMiBzZWdtZW50ICh1bmNhY2hlZCBhbmQgdW50cmFuc2xhdGVkKS4KKyAqLworI2lmbmRlZiBDT05GSUdfSEQ2NDQ2NV9JT0JBU0UKKyNkZWZpbmUgQ09ORklHX0hENjQ0NjVfSU9CQVNFCTB4YjAwMDAwMDAKKyNlbmRpZgorLyoKKyAqIFRoZSBIRDY0NDY1IG11bHRpcGxleGVzIGFsbCBpdHMgbW9kdWxlcycgaW50ZXJydXB0cyBvbnRvCisgKiB0aGlzIHNpbmdsZSBpbnRlcnJ1cHQuCisgKi8KKyNpZm5kZWYgQ09ORklHX0hENjQ0NjVfSVJRCisjZGVmaW5lIENPTkZJR19IRDY0NDY1X0lSUQk1CisjZW5kaWYKKworCisjZGVmaW5lIF9IRDY0NDY1X0lPX01BU0sJMHhmODAwMDAwMAorI2RlZmluZSBpc19oZDY0NDY1X2FkZHIoYWRkcikgXAorCSgoYWRkciAmIF9IRDY0NDY1X0lPX01BU0spID09IChDT05GSUdfSEQ2NDQ2NV9JT0JBU0UgJiBfSEQ2NDQ2NV9JT19NQVNLKSkKKworLyoKKyAqIEEgcmFuZ2Ugb2YgMTYgdmlydHVhbCBpbnRlcnJ1cHRzIGdlbmVyYXRlZCBieQorICogZGVtdXhpbmcgdGhlIEhENjQ0NjUgbXV4ZWQgaW50ZXJydXB0LgorICovCisjZGVmaW5lIEhENjQ0NjVfSVJRX0JBU0UJT0ZGQ0hJUF9JUlFfQkFTRQorI2RlZmluZSBIRDY0NDY1X0lSUV9OVU0gCTE2CisjZGVmaW5lIEhENjQ0NjVfSVJRX0FEQyAgICAgCShIRDY0NDY1X0lSUV9CQVNFKzApCisjZGVmaW5lIEhENjQ0NjVfSVJRX1VTQiAgICAgCShIRDY0NDY1X0lSUV9CQVNFKzEpCisjZGVmaW5lIEhENjQ0NjVfSVJRX1NDREkgICAgCShIRDY0NDY1X0lSUV9CQVNFKzIpCisjZGVmaW5lIEhENjQ0NjVfSVJRX1BBUkFMTEVMCShIRDY0NDY1X0lSUV9CQVNFKzMpCisvKiBiaXQgNCBpcyByZXNlcnZlZCAqLworI2RlZmluZSBIRDY0NDY1X0lSUV9VQVJUICAgIAkoSEQ2NDQ2NV9JUlFfQkFTRSs1KQorI2RlZmluZSBIRDY0NDY1X0lSUV9JUkRBICAgIAkoSEQ2NDQ2NV9JUlFfQkFTRSs2KQorI2RlZmluZSBIRDY0NDY1X0lSUV9QUzJNT1VTRQkoSEQ2NDQ2NV9JUlFfQkFTRSs3KQorI2RlZmluZSBIRDY0NDY1X0lSUV9LQkMgICAgIAkoSEQ2NDQ2NV9JUlFfQkFTRSs4KQorI2RlZmluZSBIRDY0NDY1X0lSUV9USU1FUjEgICAJKEhENjQ0NjVfSVJRX0JBU0UrOSkKKyNkZWZpbmUgSEQ2NDQ2NV9JUlFfVElNRVIwICAJKEhENjQ0NjVfSVJRX0JBU0UrMTApCisjZGVmaW5lIEhENjQ0NjVfSVJRX0dQSU8gICAgCShIRDY0NDY1X0lSUV9CQVNFKzExKQorI2RlZmluZSBIRDY0NDY1X0lSUV9BRkUgICAgIAkoSEQ2NDQ2NV9JUlFfQkFTRSsxMikKKyNkZWZpbmUgSEQ2NDQ2NV9JUlFfUENNQ0lBMSAJKEhENjQ0NjVfSVJRX0JBU0UrMTMpCisjZGVmaW5lIEhENjQ0NjVfSVJRX1BDTUNJQTAgCShIRDY0NDY1X0lSUV9CQVNFKzE0KQorI2RlZmluZSBIRDY0NDY1X0lSUV9QUzJLQkQgICAgIAkoSEQ2NDQ2NV9JUlFfQkFTRSsxNSkKKworLyogQ29uc3RhbnRzIGZvciBQQ01DSUEgbWFwcGluZ3MgKi8KKyNkZWZpbmUgSEQ2NDQ2NV9QQ0NfV0lORE9XCTB4MDEwMDAwMDAKKworI2RlZmluZSBIRDY0NDY1X1BDQzBfQkFTRQkweGI4MDAwMDAwCS8qIGFyZWEgNiAqLworI2RlZmluZSBIRDY0NDY1X1BDQzBfQVRUUgkoSEQ2NDQ2NV9QQ0MwX0JBU0UpCisjZGVmaW5lIEhENjQ0NjVfUENDMF9DT01NCShIRDY0NDY1X1BDQzBfQkFTRStIRDY0NDY1X1BDQ19XSU5ET1cpCisjZGVmaW5lIEhENjQ0NjVfUENDMF9JTwkJKEhENjQ0NjVfUENDMF9CQVNFKzIqSEQ2NDQ2NV9QQ0NfV0lORE9XKQorCisjZGVmaW5lIEhENjQ0NjVfUENDMV9CQVNFCTB4YjQwMDAwMDAJLyogYXJlYSA1ICovCisjZGVmaW5lIEhENjQ0NjVfUENDMV9BVFRSCShIRDY0NDY1X1BDQzFfQkFTRSkKKyNkZWZpbmUgSEQ2NDQ2NV9QQ0MxX0NPTU0JKEhENjQ0NjVfUENDMV9CQVNFK0hENjQ0NjVfUENDX1dJTkRPVykKKyNkZWZpbmUgSEQ2NDQ2NV9QQ0MxX0lPCQkoSEQ2NDQ2NV9QQ0MxX0JBU0UrMipIRDY0NDY1X1BDQ19XSU5ET1cpCisKKy8qCisgKiBCYXNlIG9mIFVTQiBjb250cm9sbGVyIGludGVyZmFjZSAoYXMgbWVtb3J5KQorICovCisjZGVmaW5lIEhENjQ0NjVfVVNCX0JBU0UgICAgCShDT05GSUdfSEQ2NDQ2NV9JT0JBU0UrMHhiMDAwKQorI2RlZmluZSBIRDY0NDY1X1VTQl9MRU4gICAgCTB4MTAwMAorLyoKKyAqIEJhc2Ugb2YgZW1iZWRkZWQgU1JBTSwgdXNlZCBmb3IgVVNCIGNvbnRyb2xsZXIuCisgKi8KKyNkZWZpbmUgSEQ2NDQ2NV9TUkFNX0JBU0UgICAgCShDT05GSUdfSEQ2NDQ2NV9JT0JBU0UrMHg5MDAwKQorI2RlZmluZSBIRDY0NDY1X1NSQU1fTEVOICAgIAkweDEwMDAKKworCisKKyNlbmRpZiAvKiBfQVNNX1NIX0hENjQ0NjVfICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvaGQ2NDQ2NS9pby5oIGIvaW5jbHVkZS9hc20tc2gvaGQ2NDQ2NS9pby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMDBiY2YKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9oZDY0NDY1L2lvLmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLXNoL2lvX2hkNjQ0NjUuaAorICoKKyAqIEJ5IEdyZWcgQmFua3MgPGdiYW5rc0Bwb2NrZXRwZW5ndWlucy5jb20+CisgKiAoYykgMjAwMCBQb2NrZXRQZW5ndWlucyBJbmMuCisgKgorICogRGVyaXZlZCBmcm9tIGlvX2hkNjQ0NjEuaCwgd2hpY2ggYm9yZSB0aGUgbWVzc2FnZToKKyAqIENvcHlyaWdodCAyMDAwIFN0dWFydCBNZW5lZnkgKHN0dWFydC5tZW5lZnlAc3QuY29tKQorICoKKyAqIE1heSBiZSBjb3BpZWQgb3IgbW9kaWZpZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgbGludXgvQ09QWUlORyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAqCisgKiBJTyBmdW5jdGlvbnMgZm9yIGFuIEhENjQ0NjUgIldpbmRvd3MgQ0UgSW50ZWxsaWdlbnQgUGVyaXBoZXJhbCBDb250cm9sbGVyIi4KKyAqLworCisjaWZuZGVmIF9BU01fU0hfSU9fSEQ2NDQ2NV9ICisjZGVmaW5lIF9BU01fU0hfSU9fSEQ2NDQ2NV9ICisKK2V4dGVybiB1bnNpZ25lZCBjaGFyIGhkNjQ0NjVfaW5iKHVuc2lnbmVkIGxvbmcgcG9ydCk7CitleHRlcm4gdW5zaWduZWQgc2hvcnQgaGQ2NDQ2NV9pbncodW5zaWduZWQgbG9uZyBwb3J0KTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgaGQ2NDQ2NV9pbmwodW5zaWduZWQgbG9uZyBwb3J0KTsKKworZXh0ZXJuIHZvaWQgaGQ2NDQ2NV9vdXRiKHVuc2lnbmVkIGNoYXIgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCk7CitleHRlcm4gdm9pZCBoZDY0NDY1X291dHcodW5zaWduZWQgc2hvcnQgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCk7CitleHRlcm4gdm9pZCBoZDY0NDY1X291dGwodW5zaWduZWQgaW50IHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpOworCitleHRlcm4gdW5zaWduZWQgY2hhciBoZDY0NDY1X2luYl9wKHVuc2lnbmVkIGxvbmcgcG9ydCk7CitleHRlcm4gdm9pZCBoZDY0NDY1X291dGJfcCh1bnNpZ25lZCBjaGFyIHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpOworCitleHRlcm4gdW5zaWduZWQgbG9uZyBoZDY0NDY1X2lzYV9wb3J0MmFkZHIodW5zaWduZWQgbG9uZyBvZmZzZXQpOworZXh0ZXJuIGludCBoZDY0NDY1X2lycV9kZW11eChpbnQgaXJxKTsKKy8qIFByb3Zpc2lvbiBmb3IgZ2VuZXJpYyBzZWNvbmRhcnkgZGVtdXggc3RlcCAtLSB1c2VkIGJ5IFBDTUNJQSBjb2RlICovCitleHRlcm4gdm9pZCBoZDY0NDY1X3JlZ2lzdGVyX2lycV9kZW11eChpbnQgaXJxLAorCQlpbnQgKCpkZW11eCkoaW50IGlycSwgdm9pZCAqZGV2KSwgdm9pZCAqZGV2KTsKK2V4dGVybiB2b2lkIGhkNjQ0NjVfdW5yZWdpc3Rlcl9pcnFfZGVtdXgoaW50IGlycSk7CisvKiBTZXQgdGhpcyB2YXJpYWJsZSB0byAxIHRvIHNlZSBwb3J0IHRyYWZmaWMgKi8KK2V4dGVybiBpbnQgaGQ2NDQ2NV9pb19kZWJ1ZzsKKy8qIE1hcCBhIHJhbmdlIG9mIHBvcnRzIHRvIGEgcmFuZ2Ugb2Yga2VybmVsIHZpcnR1YWwgbWVtb3J5LgorICovCitleHRlcm4gdm9pZCBoZDY0NDY1X3BvcnRfbWFwKHVuc2lnbmVkIHNob3J0IGJhc2Vwb3J0LCB1bnNpZ25lZCBpbnQgbnBvcnRzLAorCQkJICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGNoYXIgc2hpZnQpOworZXh0ZXJuIHZvaWQgaGQ2NDQ2NV9wb3J0X3VubWFwKHVuc2lnbmVkIHNob3J0IGJhc2Vwb3J0LCB1bnNpZ25lZCBpbnQgbnBvcnRzKTsKKworI2VuZGlmIC8qIF9BU01fU0hfSU9fSEQ2NDQ2NV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9oZHJlZy5oIGIvaW5jbHVkZS9hc20tc2gvaGRyZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjdmZDFhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvaGRyZWcuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvaGRyZWcuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2hwNnh4L2hwNnh4LmggYi9pbmNsdWRlL2FzbS1zaC9ocDZ4eC9ocDZ4eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyNjI0N2YKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9ocDZ4eC9ocDZ4eC5oCkBAIC0wLDAgKzEsMzEgQEAKKyNpZm5kZWYgX19BU01fU0hfSFA2WFhfSAorI2RlZmluZSBfX0FTTV9TSF9IUDZYWF9ICisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgIEFuZHJpeSBTa3VseXNoCisgKi8KKworI2RlZmluZSBIUDY4MF9UU19JUlEgSVJRM19JUlEKKworI2RlZmluZSBEQUNfTENEX0JSSUdIVE5FU1MJMAorI2RlZmluZSBEQUNfU1BFQUtFUl9WT0xVTUUJMQorCisjZGVmaW5lIFBIRFJfVFNfUEVOX0RPV04JMHgwOAorCisjZGVmaW5lIFNDUERSX1RTX1NDQU5fRU5BQkxFCTB4MjAKKyNkZWZpbmUgU0NQRFJfVFNfU0NBTl9ZCQkweDAyCisjZGVmaW5lIFNDUERSX1RTX1NDQU5fWAkJMHgwMQorCisjZGVmaW5lIFNDUENSX1RTX0VOQUJMRQkJMHg0MDUKKyNkZWZpbmUgU0NQQ1JfVFNfTUFTSwkJMHhjMGYKKworI2RlZmluZSBBRENfQ0hBTk5FTF9UU19ZCTEKKyNkZWZpbmUgQURDX0NIQU5ORUxfVFNfWAkyCisKKyNkZWZpbmUgSEQ2NDQ2MV9HUEFEUl9TUEVBS0VSCTB4MDEKKyNkZWZpbmUgSEQ2NDQ2MV9HUEFEUl9QQ01DSUEwCSgweDAyfDB4MDgpCisjZGVmaW5lIEhENjQ0NjFfR1BCRFJfTENET0ZGCTB4MDEKKyNkZWZpbmUgSEQ2NDQ2MV9HUEJEUl9MRURfUkVECTB4ODAKKworCisjZW5kaWYgLyogX19BU01fU0hfSFA2WFhfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvaHA2eHgvaWRlLmggYi9pbmNsdWRlL2FzbS1zaC9ocDZ4eC9pZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzAzOTVhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvaHA2eHgvaWRlLmgKQEAgLTAsMCArMSw4IEBACisjaWZuZGVmIF9fQVNNX1NIX0hQNlhYX0lERV9ICisjZGVmaW5lIF9fQVNNX1NIX0hQNlhYX0lERV9ICisKKyNkZWZpbmUgSVJRX0NGQ0FSRAk5MworI2RlZmluZSBJUlFfUENNQ0lBCTk0CisKKyNlbmRpZiAvKiBfX0FTTV9TSF9IUDZYWF9JREVfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9ocDZ4eC9pby5oIGIvaW5jbHVkZS9hc20tc2gvaHA2eHgvaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzE3OTgwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvaHA2eHgvaW8uaApAQCAtMCwwICsxLDEwIEBACisjaWZuZGVmIF9fQVNNX1NIX0hQNlhYX0lPX0gKKyNkZWZpbmUgX19BU01fU0hfSFA2WFhfSU9fSAorCisvKgorICogTm90aGluZyBzcGVjaWFsIGhlcmUuLiBqdXN0IHVzZSB0aGUgZ2VuZXJpYyBjY2hpcCBpbyByb3V0aW5lcy4KKyAqLworI2luY2x1ZGUgPGFzbS9oZDY0NDYxL2lvLmg+CisKKyNlbmRpZiAvKiBfX0FTTV9TSF9IUDZYWF9JT19IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2hzNzc1MXJ2b2lwL2hzNzc1MXJ2b2lwLmggYi9pbmNsdWRlL2FzbS1zaC9oczc3NTFydm9pcC9oczc3NTFydm9pcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmOTk1ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9oczc3NTFydm9pcC9oczc3NTFydm9pcC5oCkBAIC0wLDAgKzEsNDcgQEAKKyNpZm5kZWYgX19BU01fU0hfUkVORVNBU19IUzc3NTFSVk9JUF9ICisjZGVmaW5lIF9fQVNNX1NIX1JFTkVTQVNfSFM3NzUxUlZPSVBfSAorCisvKgorICogbGludXgvaW5jbHVkZS9hc20tc2gvaHM3NzUxcnZvaXAvaHM3NzUxcnZvaXAuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCAgQXRvbSBDcmVhdGUgRW5naW5lZXJpbmcgQ28uLCBMdGQuCisgKgorICogUmVuZXNhcyBUZWNobm9sb2d5IFNhbGVzIEhTNzc1MVJWb0lQIHN1cHBvcnQKKyAqLworCisvKiBCb3ggc3BlY2lmaWMgYWRkcmVzc2VzLiAgKi8KKworI2RlZmluZSBQQV9CQ1IJCTB4YTQwMDAwMDAJLyogRlBHQSAqLworI2RlZmluZSBQQV9TTElDQ05UUjEJMHhhNDAwMDAwNgkvKiBTTElDIFBJTyBDb250cm9sIDEgKi8KKyNkZWZpbmUgUEFfU0xJQ0NOVFIyCTB4YTQwMDAwMDgJLyogU0xJQyBQSU8gQ29udHJvbCAyICovCisjZGVmaW5lIFBBX0RNQUNOVFIJMHhhNDAwMDAwYQkvKiBVU0IgRE1BIENvbnRyb2wgKi8KKyNkZWZpbmUgUEFfSU5QT1JUUgkweGE0MDAwMDBjCS8qIElucHV0IFBvcnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUEFfT1VUUE9SVFIJMHhhNDAwMDAwZQkvKiBPdXRwdXQgUG9ydCBSZWd1c3RlciAqLworI2RlZmluZSBQQV9WRVJSRUcJMHhhNDAwMDAxNAkvKiBGUEdBIFZlcnNpb24gUmVnaXN0ZXIgKi8KKworI2RlZmluZSBQQV9BUkVBNV9JTwkweGI0MDAwMDAwCS8qIEFyZWEgNSBJTyBNZW1vcnkgKi8KKyNkZWZpbmUgUEFfQVJFQTZfSU8JMHhiODAwMDAwMAkvKiBBcmVhIDYgSU8gTWVtb3J5ICovCisjZGVmaW5lIFBBX0lERV9PRkZTRVQJMHgxZjAJCS8qIENGIElERSBPZmZzZXQgKi8KKworI2RlZmluZSBJUkxDTlRSMQkoUEFfQkNSICsgMCkJLyogSW50ZXJydXB0IENvbnRyb2wgUmVnaXN0ZXIxICovCisjZGVmaW5lIElSTENOVFIyCShQQV9CQ1IgKyAyKQkvKiBJbnRlcnJ1cHQgQ29udHJvbCBSZWdpc3RlcjIgKi8KKyNkZWZpbmUgSVJMQ05UUjMJKFBBX0JDUiArIDQpCS8qIEludGVycnVwdCBDb250cm9sIFJlZ2lzdGVyMyAqLworI2RlZmluZSBJUkxDTlRSNAkoUEFfQkNSICsgMTYpCS8qIEludGVycnVwdCBDb250cm9sIFJlZ2lzdGVyNCAqLworI2RlZmluZSBJUkxDTlRSNQkoUEFfQkNSICsgMTgpCS8qIEludGVycnVwdCBDb250cm9sIFJlZ2lzdGVyNSAqLworCisjZGVmaW5lIElSUV9QQ0lFVEgJNgkJLyogUENJIEV0aGVybmV0IElSUSAqLworI2RlZmluZSBJUlFfUENJSFVCCTcJCS8qIFBDSSBFdGhlcm5ldCBIdWIgSVJRICovCisjZGVmaW5lIElSUV9VU0JDT00JOAkJLyogVVNCIENvbXVuaWNhdGlvbiBJUlEgKi8KKyNkZWZpbmUgSVJRX1VTQkNPTgk5CQkvKiBVU0IgQ29ubmVjdCBJUlEgKi8KKyNkZWZpbmUgSVJRX1VTQkRNQQkxMAkJLyogVVNCIERNQSBJUlEgKi8KKyNkZWZpbmUgSVJRX0NGQ0FSRAkxMQkJLyogQ0YgQ2FyZCBJUlEgKi8KKyNkZWZpbmUgSVJRX1BDTUNJQQkxMgkJLyogUENNQ0lBIElSUSAqLworI2RlZmluZSBJUlFfUENJU0xPVAkxMwkJLyogUENJIFNsb3QgIzEgSVJRICovCisjZGVmaW5lIElSUV9PTkhPT0sxCTAJCS8qIE9OIEhPT0sxIElSUSAqLworI2RlZmluZSBJUlFfT0ZGSE9PSzEJMQkJLyogT0ZGIEhPT0sxIElSUSAqLworI2RlZmluZSBJUlFfT05IT09LMgkyCQkvKiBPTiBIT09LMiBJUlEgKi8KKyNkZWZpbmUgSVJRX09GRkhPT0syCTMJCS8qIE9GRiBIT09LMiBJUlEgKi8KKyNkZWZpbmUJSVJRX1JJTkdJTkcJNAkJLyogUmluZ2luZyBJUlEgKi8KKyNkZWZpbmUJSVJRX0NPREVDCTUJCS8qIENPREVDIElSUSAqLworCisjZW5kaWYgIC8qIF9fQVNNX1NIX1JFTkVTQVNfSFM3NzUxUlZPSVAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2hzNzc1MXJ2b2lwL2lkZS5oIGIvaW5jbHVkZS9hc20tc2gvaHM3NzUxcnZvaXAvaWRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVhZDFkMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL2hzNzc1MXJ2b2lwL2lkZS5oCkBAIC0wLDAgKzEsOCBAQAorI2lmbmRlZiBfX0FTTV9TSF9IUzc3NTFSVk9JUF9JREVfSAorI2RlZmluZSBfX0FTTV9TSF9IUzc3NTFSVk9JUF9JREVfSAorCisvKiBOb3RoaW5nIHRvIHNlZSBoZXJlLi4gKi8KKyNpbmNsdWRlIDxhc20vaHM3NzUxcnZvaXAvaHM3NzUxcnZvaXAuaD4KKworI2VuZGlmIC8qIF9fQVNNX1NIX0hTNzc1MVJWT0lQX0lERV9IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2hzNzc1MXJ2b2lwL2lvLmggYi9pbmNsdWRlL2FzbS1zaC9oczc3NTFydm9pcC9pby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxM2M4NTEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9oczc3NTFydm9pcC9pby5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1zaC9oczc3NTFydm9pcC9oczc3NTFydm9pcC5oCisgKgorICogTW9kaWZpZWQgdmVyc2lvbiBvZiBpb19zZS5oIGZvciB0aGUgaHM3NzUxcnZvaXAtc3BlY2lmaWMgZnVuY3Rpb25zLgorICoKKyAqIE1heSBiZSBjb3BpZWQgb3IgbW9kaWZpZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgbGludXgvQ09QWUlORyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAqCisgKiBJTyBmdW5jdGlvbnMgZm9yIGFuIFJlbmVzYXMgVGVjaG5vbG9neSBzYWxlcyBIUzc3NTFSVk9JUAorICovCisKKyNpZm5kZWYgX0FTTV9TSF9JT19IUzc3NTFSVk9JUF9ICisjZGVmaW5lIF9BU01fU0hfSU9fSFM3NzUxUlZPSVBfSAorCisjaW5jbHVkZSA8YXNtL2lvX2dlbmVyaWMuaD4KKworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgaHM3NzUxcnZvaXBfaW5iKHVuc2lnbmVkIGxvbmcgcG9ydCk7CitleHRlcm4gdW5zaWduZWQgc2hvcnQgaHM3NzUxcnZvaXBfaW53KHVuc2lnbmVkIGxvbmcgcG9ydCk7CitleHRlcm4gdW5zaWduZWQgaW50IGhzNzc1MXJ2b2lwX2lubCh1bnNpZ25lZCBsb25nIHBvcnQpOworCitleHRlcm4gdm9pZCBoczc3NTFydm9pcF9vdXRiKHVuc2lnbmVkIGNoYXIgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCk7CitleHRlcm4gdm9pZCBoczc3NTFydm9pcF9vdXR3KHVuc2lnbmVkIHNob3J0IHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpOworZXh0ZXJuIHZvaWQgaHM3NzUxcnZvaXBfb3V0bCh1bnNpZ25lZCBpbnQgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCk7CisKK2V4dGVybiB1bnNpZ25lZCBjaGFyIGhzNzc1MXJ2b2lwX2luYl9wKHVuc2lnbmVkIGxvbmcgcG9ydCk7CitleHRlcm4gdm9pZCBoczc3NTFydm9pcF9vdXRiX3AodW5zaWduZWQgY2hhciB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KTsKKworZXh0ZXJuIHZvaWQgaHM3NzUxcnZvaXBfaW5zYih1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpOworZXh0ZXJuIHZvaWQgaHM3NzUxcnZvaXBfaW5zdyh1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpOworZXh0ZXJuIHZvaWQgaHM3NzUxcnZvaXBfaW5zbCh1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpOworZXh0ZXJuIHZvaWQgaHM3NzUxcnZvaXBfb3V0c2IodW5zaWduZWQgbG9uZyBwb3J0LCBjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKK2V4dGVybiB2b2lkIGhzNzc1MXJ2b2lwX291dHN3KHVuc2lnbmVkIGxvbmcgcG9ydCwgY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCk7CitleHRlcm4gdm9pZCBoczc3NTFydm9pcF9vdXRzbCh1bnNpZ25lZCBsb25nIHBvcnQsIGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpOworCitleHRlcm4gdm9pZCAqaHM3NzUxcnZvaXBfaW9yZW1hcCh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKTsKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaHM3NzUxcnZvaXBfaXNhX3BvcnQyYWRkcih1bnNpZ25lZCBsb25nIG9mZnNldCk7CisKKyNlbmRpZiAvKiBfQVNNX1NIX0lPX0hTNzc1MVJWT0lQX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2h3X2lycS5oIGIvaW5jbHVkZS9hc20tc2gvaHdfaXJxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ5MzRmYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL2h3X2lycS5oCkBAIC0wLDAgKzEsOSBAQAorI2lmbmRlZiBfX0FTTV9TSF9IV19JUlFfSAorI2RlZmluZSBfX0FTTV9TSF9IV19JUlFfSAorCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfcmVzZW5kX2lycShzdHJ1Y3QgaHdfaW50ZXJydXB0X3R5cGUgKmgsIHVuc2lnbmVkIGludCBpKQoreworCS8qIE5vdGhpbmcgdG8gZG8gKi8KK30KKworI2VuZGlmIC8qIF9fQVNNX1NIX0hXX0lSUV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9pZGUuaCBiL2luY2x1ZGUvYXNtLXNoL2lkZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0MmNmMzkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9pZGUuaApAQCAtMCwwICsxLDI5IEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLXNoL2lkZS5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NC0xOTk2ICBMaW51cyBUb3J2YWxkcyAmIGF1dGhvcnMKKyAqLworCisvKgorICogIFRoaXMgZmlsZSBjb250YWlucyB0aGUgaTM4NiBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgSURFIGNvZGUuCisgKiAgSW4gZnV0dXJlLCBTdXBlckggY29kZS4KKyAqLworCisjaWZuZGVmIF9fQVNNX1NIX0lERV9ICisjZGVmaW5lIF9fQVNNX1NIX0lERV9ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2lmbmRlZiBNQVhfSFdJRlMKKyNkZWZpbmUgTUFYX0hXSUZTCUNPTkZJR19JREVfTUFYX0hXSUZTCisjZW5kaWYKKworI2RlZmluZSBpZGVfZGVmYXVsdF9pb19jdGwoYmFzZSkJKDApCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pZGVfaW9wcy5oPgorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX19BU01fU0hfSURFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2lvLmggYi9pbmNsdWRlL2FzbS1zaC9pby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiYzM0M2ZlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvaW8uaApAQCAtMCwwICsxLDMxMSBAQAorI2lmbmRlZiBfX0FTTV9TSF9JT19ICisjZGVmaW5lIF9fQVNNX1NIX0lPX0gKKworLyoKKyAqIENvbnZlbnRpb246CisgKiAgICByZWFke2IsdyxsfS93cml0ZXtiLHcsbH0gYXJlIGZvciBQQ0ksCisgKiAgICB3aGlsZSBpbntiLHcsbH0vb3V0e2IsdyxsfSBhcmUgZm9yIElTQQorICogVGhlc2UgbWF5ICh3aWxsKSBiZSBwbGF0Zm9ybSBzcGVjaWZpYyBmdW5jdGlvbi4KKyAqIEluIGFkZGl0aW9uIHdlIGhhdmUgJ3BhdXNpbmcnIHZlcnNpb25zOiBpbntiLHcsbH1fcC9vdXR7Yix3LGx9X3AKKyAqIGFuZCAnc3RyaW5nJyB2ZXJzaW9uczogaW5ze2IsdyxsfS9vdXRze2IsdyxsfQorICogRm9yIHJlYWR7Yix3LGx9IGFuZCB3cml0ZXtiLHcsbH0gdGhlcmUgYXJlIGFsc28gX19yYXcgdmVyc2lvbnMsIHdoaWNoCisgKiBkbyBub3QgaGF2ZSBhIG1lbW9yeSBiYXJyaWVyIGFmdGVyIHRoZW0uCisgKgorICogSW4gYWRkaXRpb24sIHdlIGhhdmUgCisgKiAgIGN0cmxfaW57Yix3LGx9L2N0cmxfb3V0e2IsdyxsfSBmb3IgU3VwZXJIIHNwZWNpZmljIEkvTy4KKyAqICAgd2hpY2ggYXJlIHByb2Nlc3NvciBzcGVjaWZpYy4KKyAqLworCisvKgorICogV2UgZm9sbG93IHRoZSBBbHBoYSBjb252ZW50aW9uIGhlcmU6CisgKiAgX19pbmIgZXhwYW5kcyB0byBhbiBpbmxpbmUgZnVuY3Rpb24gY2FsbCAod2hpY2ggY2FsbHMgdmlhIHRoZSBtdikKKyAqICBfaW5iICBpcyBhIHJlYWwgZnVuY3Rpb24gY2FsbCAobm90ZSBfX19yYXcgZm5zIGFyZSBfIHZlcnNpb24gb2YgX19yYXcpCisgKiAgaW5iICAgYnkgZGVmYXVsdCBleHBhbmRzIHRvIF9pbmIsIGJ1dCB0aGUgbWFjaGluZSBzcGVjaWZpYyBjb2RlIG1heQorICogICAgICAgIGRlZmluZSBpdCB0byBfX2luYiBpZiBpdCBjaG9vc2VzLgorICovCisKKyNpbmNsdWRlIDxhc20vY2FjaGUuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+CisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKy8qCisgKiBEZXBlbmRpbmcgb24gd2hpY2ggcGxhdGZvcm0gd2UgYXJlIHJ1bm5pbmcgb24sIHdlIG5lZWQgZGlmZmVyZW50CisgKiBJL08gZnVuY3Rpb25zLgorICovCisKKyNpZmRlZiBfX0tFUk5FTF9fCisvKgorICogU2luY2UgYm9hcmRzIGFyZSBhYmxlIHRvIGRlZmluZSB0aGVpciBvd24gc2V0IG9mIEkvTyByb3V0aW5lcyB0aHJvdWdoCisgKiB0aGVpciByZXNwZWN0aXZlIG1hY2hpbmUgdmVjdG9yLCB3ZSBhbHdheXMgd3JhcCB0aHJvdWdoIHRoZSBtdi4KKyAqCisgKiBBbHNvLCBpbiB0aGUgZXZlbnQgdGhhdCBhIGJvYXJkIGhhc24ndCBwcm92aWRlZCBpdHMgb3duIGRlZmluaXRpb24gZm9yCisgKiBhIGdpdmVuIHJvdXRpbmUsIGl0IHdpbGwgYmUgd3JhcHBlZCB0byBnZW5lcmljIGNvZGUgYXQgcnVuLXRpbWUuCisgKi8KKworIyBkZWZpbmUgX19pbmIocCkJc2hfbXYubXZfaW5iKChwKSkKKyMgZGVmaW5lIF9faW53KHApCXNoX212Lm12X2ludygocCkpCisjIGRlZmluZSBfX2lubChwKQlzaF9tdi5tdl9pbmwoKHApKQorIyBkZWZpbmUgX19vdXRiKHgscCkJc2hfbXYubXZfb3V0YigoeCksKHApKQorIyBkZWZpbmUgX19vdXR3KHgscCkJc2hfbXYubXZfb3V0dygoeCksKHApKQorIyBkZWZpbmUgX19vdXRsKHgscCkJc2hfbXYubXZfb3V0bCgoeCksKHApKQorCisjIGRlZmluZSBfX2luYl9wKHApCXNoX212Lm12X2luYl9wKChwKSkKKyMgZGVmaW5lIF9faW53X3AocCkJc2hfbXYubXZfaW53X3AoKHApKQorIyBkZWZpbmUgX19pbmxfcChwKQlzaF9tdi5tdl9pbmxfcCgocCkpCisjIGRlZmluZSBfX291dGJfcCh4LHApCXNoX212Lm12X291dGJfcCgoeCksKHApKQorIyBkZWZpbmUgX19vdXR3X3AoeCxwKQlzaF9tdi5tdl9vdXR3X3AoKHgpLChwKSkKKyMgZGVmaW5lIF9fb3V0bF9wKHgscCkJc2hfbXYubXZfb3V0bF9wKCh4KSwocCkpCisKKyMgZGVmaW5lIF9faW5zYihwLGIsYykJc2hfbXYubXZfaW5zYigocCksIChiKSwgKGMpKQorIyBkZWZpbmUgX19pbnN3KHAsYixjKQlzaF9tdi5tdl9pbnN3KChwKSwgKGIpLCAoYykpCisjIGRlZmluZSBfX2luc2wocCxiLGMpCXNoX212Lm12X2luc2woKHApLCAoYiksIChjKSkKKyMgZGVmaW5lIF9fb3V0c2IocCxiLGMpCXNoX212Lm12X291dHNiKChwKSwgKGIpLCAoYykpCisjIGRlZmluZSBfX291dHN3KHAsYixjKQlzaF9tdi5tdl9vdXRzdygocCksIChiKSwgKGMpKQorIyBkZWZpbmUgX19vdXRzbChwLGIsYykJc2hfbXYubXZfb3V0c2woKHApLCAoYiksIChjKSkKKworIyBkZWZpbmUgX19yZWFkYihhKQlzaF9tdi5tdl9yZWFkYigoYSkpCisjIGRlZmluZSBfX3JlYWR3KGEpCXNoX212Lm12X3JlYWR3KChhKSkKKyMgZGVmaW5lIF9fcmVhZGwoYSkJc2hfbXYubXZfcmVhZGwoKGEpKQorIyBkZWZpbmUgX193cml0ZWIodixhKQlzaF9tdi5tdl93cml0ZWIoKHYpLChhKSkKKyMgZGVmaW5lIF9fd3JpdGV3KHYsYSkJc2hfbXYubXZfd3JpdGV3KCh2KSwoYSkpCisjIGRlZmluZSBfX3dyaXRlbCh2LGEpCXNoX212Lm12X3dyaXRlbCgodiksKGEpKQorCisjIGRlZmluZSBfX2lvcmVtYXAoYSxzKQlzaF9tdi5tdl9pb3JlbWFwKChhKSwgKHMpKQorIyBkZWZpbmUgX19pb3VubWFwKGEpCXNoX212Lm12X2lvdW5tYXAoKGEpKQorCisjIGRlZmluZSBfX2lzYV9wb3J0MmFkZHIoYSkJc2hfbXYubXZfaXNhX3BvcnQyYWRkcihhKQorCisjIGRlZmluZSBpbmIJCV9faW5iCisjIGRlZmluZSBpbncJCV9faW53CisjIGRlZmluZSBpbmwJCV9faW5sCisjIGRlZmluZSBvdXRiCQlfX291dGIKKyMgZGVmaW5lIG91dHcJCV9fb3V0dworIyBkZWZpbmUgb3V0bAkJX19vdXRsCisKKyMgZGVmaW5lIGluYl9wCQlfX2luYl9wCisjIGRlZmluZSBpbndfcAkJX19pbndfcAorIyBkZWZpbmUgaW5sX3AJCV9faW5sX3AKKyMgZGVmaW5lIG91dGJfcAkJX19vdXRiX3AKKyMgZGVmaW5lIG91dHdfcAkJX19vdXR3X3AKKyMgZGVmaW5lIG91dGxfcAkJX19vdXRsX3AKKworIyBkZWZpbmUgaW5zYgkJX19pbnNiCisjIGRlZmluZSBpbnN3CQlfX2luc3cKKyMgZGVmaW5lIGluc2wJCV9faW5zbAorIyBkZWZpbmUgb3V0c2IJCV9fb3V0c2IKKyMgZGVmaW5lIG91dHN3CQlfX291dHN3CisjIGRlZmluZSBvdXRzbAkJX19vdXRzbAorCisjIGRlZmluZSBfX3Jhd19yZWFkYglfX3JlYWRiCisjIGRlZmluZSBfX3Jhd19yZWFkdwlfX3JlYWR3CisjIGRlZmluZSBfX3Jhd19yZWFkbAlfX3JlYWRsCisjIGRlZmluZSBfX3Jhd193cml0ZWIJX193cml0ZWIKKyMgZGVmaW5lIF9fcmF3X3dyaXRldwlfX3dyaXRldworIyBkZWZpbmUgX19yYXdfd3JpdGVsCV9fd3JpdGVsCisKKy8qCisgKiBUaGUgcGxhdGZvcm0gaGVhZGVyIGZpbGVzIG1heSBkZWZpbmUgc29tZSBvZiB0aGVzZSBtYWNyb3MgdG8gdXNlCisgKiB0aGUgaW5saW5lZCB2ZXJzaW9ucyB3aGVyZSBhcHByb3ByaWF0ZS4gIFRoZXNlIG1hY3JvcyBtYXkgYWxzbyBiZQorICogcmVkZWZpbmVkIGJ5IHVzZXJsZXZlbCBwcm9ncmFtcy4KKyAqLworI2lmZGVmIF9fcmF3X3JlYWRiCisjIGRlZmluZSByZWFkYihhKQkoeyB1bnNpZ25lZCBsb25nIHJfID0gX19yYXdfcmVhZGIoKHVuc2lnbmVkIGxvbmcpYSk7IG1iKCk7IHJfOyB9KQorI2VuZGlmCisjaWZkZWYgX19yYXdfcmVhZHcKKyMgZGVmaW5lIHJlYWR3KGEpCSh7IHVuc2lnbmVkIGxvbmcgcl8gPSBfX3Jhd19yZWFkdygodW5zaWduZWQgbG9uZylhKTsgbWIoKTsgcl87IH0pCisjZW5kaWYKKyNpZmRlZiBfX3Jhd19yZWFkbAorIyBkZWZpbmUgcmVhZGwoYSkJKHsgdW5zaWduZWQgbG9uZyByXyA9IF9fcmF3X3JlYWRsKCh1bnNpZ25lZCBsb25nKWEpOyBtYigpOyByXzsgfSkKKyNlbmRpZgorCisjaWZkZWYgX19yYXdfd3JpdGViCisjIGRlZmluZSB3cml0ZWIodixhKQkoeyBfX3Jhd193cml0ZWIoKHYpLCh1bnNpZ25lZCBsb25nKShhKSk7IG1iKCk7IH0pCisjZW5kaWYKKyNpZmRlZiBfX3Jhd193cml0ZXcKKyMgZGVmaW5lIHdyaXRldyh2LGEpCSh7IF9fcmF3X3dyaXRldygodiksKHVuc2lnbmVkIGxvbmcpKGEpKTsgbWIoKTsgfSkKKyNlbmRpZgorI2lmZGVmIF9fcmF3X3dyaXRlbAorIyBkZWZpbmUgd3JpdGVsKHYsYSkJKHsgX19yYXdfd3JpdGVsKCh2KSwodW5zaWduZWQgbG9uZykoYSkpOyBtYigpOyB9KQorI2VuZGlmCisKKyNkZWZpbmUgcmVhZGJfcmVsYXhlZChhKSByZWFkYihhKQorI2RlZmluZSByZWFkd19yZWxheGVkKGEpIHJlYWR3KGEpCisjZGVmaW5lIHJlYWRsX3JlbGF4ZWQoYSkgcmVhZGwoYSkKKworI2RlZmluZSBtbWlvd2IoKQorCisvKgorICogSWYgdGhlIHBsYXRmb3JtIGhhcyBQQy1saWtlIEkvTywgdGhpcyBmdW5jdGlvbiBjb252ZXJ0cyB0aGUgb2Zmc2V0IGludG8KKyAqIGFuIGFkZHJlc3MuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgaXNhX3BvcnQyYWRkcih1bnNpZ25lZCBsb25nIG9mZnNldCkKK3sKKwlyZXR1cm4gX19pc2FfcG9ydDJhZGRyKG9mZnNldCk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHByb3ZpZGVzIGEgbWV0aG9kIGZvciB0aGUgZ2VuZXJpYyBjYXNlIHdoZXJlIGEgYm9hcmQtc3BlY2lmaWMKKyAqIGlzYV9wb3J0MmFkZHIgc2ltcGx5IG5lZWRzIHRvIHJldHVybiB0aGUgcG9ydCArIHNvbWUgYXJiaXRyYXJ5IHBvcnQgYmFzZS4KKyAqCisgKiBXZSB1c2UgdGhpcyBhdCBib2FyZCBzZXR1cCB0aW1lIHRvIGltcGxpY2l0bHkgc2V0IHRoZSBwb3J0IGJhc2UsIGFuZAorICogYXMgYSByZXN1bHQsIHdlIGNhbiB1c2UgdGhlIGdlbmVyaWMgaXNhX3BvcnQyYWRkci4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIF9fc2V0X2lvX3BvcnRfYmFzZSh1bnNpZ25lZCBsb25nIHBiYXNlKQoreworCWV4dGVybiB1bnNpZ25lZCBsb25nIGdlbmVyaWNfaW9fYmFzZTsKKworCWdlbmVyaWNfaW9fYmFzZSA9IHBiYXNlOworfQorCisjZGVmaW5lIGlzYV9yZWFkYihhKSByZWFkYihpc2FfcG9ydDJhZGRyKGEpKQorI2RlZmluZSBpc2FfcmVhZHcoYSkgcmVhZHcoaXNhX3BvcnQyYWRkcihhKSkKKyNkZWZpbmUgaXNhX3JlYWRsKGEpIHJlYWRsKGlzYV9wb3J0MmFkZHIoYSkpCisjZGVmaW5lIGlzYV93cml0ZWIoYixhKSB3cml0ZWIoYixpc2FfcG9ydDJhZGRyKGEpKQorI2RlZmluZSBpc2Ffd3JpdGV3KHcsYSkgd3JpdGV3KHcsaXNhX3BvcnQyYWRkcihhKSkKKyNkZWZpbmUgaXNhX3dyaXRlbChsLGEpIHdyaXRlbChsLGlzYV9wb3J0MmFkZHIoYSkpCisjZGVmaW5lIGlzYV9tZW1zZXRfaW8oYSxiLGMpIFwKKyAgbWVtc2V0KCh2b2lkICopKGlzYV9wb3J0MmFkZHIoKHVuc2lnbmVkIGxvbmcpYSkpLChiKSwoYykpCisjZGVmaW5lIGlzYV9tZW1jcHlfZnJvbWlvKGEsYixjKSBcCisgIG1lbWNweSgoYSksKHZvaWQgKikoaXNhX3BvcnQyYWRkcigodW5zaWduZWQgbG9uZykoYikpKSwoYykpCisjZGVmaW5lIGlzYV9tZW1jcHlfdG9pbyhhLGIsYykgXAorICBtZW1jcHkoKHZvaWQgKikoaXNhX3BvcnQyYWRkcigodW5zaWduZWQgbG9uZykoYSkpKSwoYiksKGMpKQorCisvKiBXZSByZWFsbHkgd2FudCB0byB0cnkgYW5kIGdldCB0aGVzZSB0byBtZW1jcHkgZXRjICovCitleHRlcm4gdm9pZCBtZW1jcHlfZnJvbWlvKHZvaWQgKiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CitleHRlcm4gdm9pZCBtZW1jcHlfdG9pbyh1bnNpZ25lZCBsb25nLCBjb25zdCB2b2lkICosIHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuIHZvaWQgbWVtc2V0X2lvKHVuc2lnbmVkIGxvbmcsIGludCwgdW5zaWduZWQgbG9uZyk7CisKKy8qIFN1cGVySCBvbi1jaGlwIEkvTyBmdW5jdGlvbnMgKi8KK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGNoYXIgY3RybF9pbmIodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXJldHVybiAqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIqKWFkZHI7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIHNob3J0IGN0cmxfaW53KHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCopYWRkcjsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IGN0cmxfaW5sKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nKilhZGRyOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGN0cmxfb3V0Yih1bnNpZ25lZCBjaGFyIGIsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwkqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIqKWFkZHIgPSBiOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGN0cmxfb3V0dyh1bnNpZ25lZCBzaG9ydCBiLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCopYWRkciA9IGI7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgY3RybF9vdXRsKHVuc2lnbmVkIGludCBiLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisgICAgICAgICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyopYWRkciA9IGI7Cit9CisKKyNkZWZpbmUgSU9fU1BBQ0VfTElNSVQgMHhmZmZmZmZmZgorCisvKgorICogQ2hhbmdlIHZpcnR1YWwgYWRkcmVzc2VzIHRvIHBoeXNpY2FsIGFkZHJlc3NlcyBhbmQgdnYuCisgKiBUaGVzZSBhcmUgdHJpdmlhbCBvbiB0aGUgMToxIExpbnV4L1N1cGVySCBtYXBwaW5nCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgdmlydF90b19waHlzKHZvbGF0aWxlIHZvaWQgKiBhZGRyZXNzKQoreworCXJldHVybiBQSFlTQUREUihhZGRyZXNzKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCAqIHBoeXNfdG9fdmlydCh1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisJcmV0dXJuICh2b2lkICopUDFTRUdBRERSKGFkZHJlc3MpOworfQorCisjZGVmaW5lIHZpcnRfdG9fYnVzIHZpcnRfdG9fcGh5cworI2RlZmluZSBidXNfdG9fdmlydCBwaHlzX3RvX3ZpcnQKKyNkZWZpbmUgcGFnZV90b19idXMgcGFnZV90b19waHlzCisKKy8qCisgKiByZWFkWC93cml0ZVgoKSBhcmUgdXNlZCB0byBhY2Nlc3MgbWVtb3J5IG1hcHBlZCBkZXZpY2VzLiBPbiBzb21lCisgKiBhcmNoaXRlY3R1cmVzIHRoZSBtZW1vcnkgbWFwcGVkIElPIHN0dWZmIG5lZWRzIHRvIGJlIGFjY2Vzc2VkCisgKiBkaWZmZXJlbnRseS4gT24gdGhlIHg4NiBhcmNoaXRlY3R1cmUsIHdlIGp1c3QgcmVhZC93cml0ZSB0aGUKKyAqIG1lbW9yeSBsb2NhdGlvbiBkaXJlY3RseS4KKyAqCisgKiBPbiBTSCwgd2UgaGF2ZSB0aGUgd2hvbGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZSBtYXBwZWQgYXQgYWxsIHRpbWVzCisgKiAoYXMgTUlQUyBkb2VzKSwgc28gImlvcmVtYXAoKSIgYW5kICJpb3VubWFwKCkiIGRvIG5vdCBuZWVkIHRvIGRvCisgKiBhbnl0aGluZy4gIChUaGlzIGlzbid0IHRydWUgZm9yIGFsbCBtYWNoaW5lcyBidXQgd2Ugc3RpbGwgaGFuZGxlCisgKiB0aGVzZSBjYXNlcyB3aXRoIHdpcmVkIFRMQiBlbnRyaWVzIGFueXdheSAuLi4pCisgKgorICogV2UgY2hlYXQgYSBiaXQgYW5kIGFsd2F5cyByZXR1cm4gdW5jYWNoYWJsZSBhcmVhcyB1bnRpbCB3ZSd2ZSBmaXhlZAorICogdGhlIGRyaXZlcnMgdG8gaGFuZGxlIGNhY2hpbmcgcHJvcGVybHkuICAKKyAqLworc3RhdGljIF9faW5saW5lX18gdm9pZCAqIGlvcmVtYXAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlyZXR1cm4gX19pb3JlbWFwKG9mZnNldCwgc2l6ZSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgaW91bm1hcCh2b2lkICphZGRyKQoreworCXJldHVybiBfX2lvdW5tYXAoYWRkcik7Cit9CisKKyNkZWZpbmUgaW9yZW1hcF9ub2NhY2hlKG9mZixzaXplKSBpb3JlbWFwKG9mZixzaXplKQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgY2hlY2tfc2lnbmF0dXJlKHVuc2lnbmVkIGxvbmcgaW9fYWRkciwKKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNpZ25hdHVyZSwgaW50IGxlbmd0aCkKK3sKKwlpbnQgcmV0dmFsID0gMDsKKwlkbyB7CisJCWlmIChyZWFkYihpb19hZGRyKSAhPSAqc2lnbmF0dXJlKQorCQkJZ290byBvdXQ7CisJCWlvX2FkZHIrKzsKKwkJc2lnbmF0dXJlKys7CisJCWxlbmd0aC0tOworCX0gd2hpbGUgKGxlbmd0aCk7CisJcmV0dmFsID0gMTsKK291dDoKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKgorICogVGhlIGNhY2hlcyBvbiBzb21lIGFyY2hpdGVjdHVyZXMgYXJlbid0IGRtYS1jb2hlcmVudCBhbmQgaGF2ZSBuZWVkIHRvCisgKiBoYW5kbGUgdGhpcyBpbiBzb2Z0d2FyZS4gIFRoZXJlIGFyZSB0aHJlZSB0eXBlcyBvZiBvcGVyYXRpb25zIHRoYXQKKyAqIGNhbiBiZSBhcHBsaWVkIHRvIGRtYSBidWZmZXJzLgorICoKKyAqICAtIGRtYV9jYWNoZV93YmFja19pbnYoc3RhcnQsIHNpemUpIG1ha2VzIGNhY2hlcyBhbmQgUkFNIGNvaGVyZW50IGJ5CisgKiAgICB3cml0aW5nIHRoZSBjb250ZW50IG9mIHRoZSBjYWNoZXMgYmFjayB0byBtZW1vcnksIGlmIG5lY2Vzc2FyeS4KKyAqICAgIFRoZSBmdW5jdGlvbiBhbHNvIGludmFsaWRhdGVzIHRoZSBhZmZlY3RlZCBwYXJ0IG9mIHRoZSBjYWNoZXMgYXMKKyAqICAgIG5lY2Vzc2FyeSBiZWZvcmUgRE1BIHRyYW5zZmVycyBmcm9tIG91dHNpZGUgdG8gbWVtb3J5LgorICogIC0gZG1hX2NhY2hlX2ludihzdGFydCwgc2l6ZSkgaW52YWxpZGF0ZXMgdGhlIGFmZmVjdGVkIHBhcnRzIG9mIHRoZQorICogICAgY2FjaGVzLiAgRGlydHkgbGluZXMgb2YgdGhlIGNhY2hlcyBtYXkgYmUgd3JpdHRlbiBiYWNrIG9yIHNpbXBseQorICogICAgYmUgZGlzY2FyZGVkLiAgVGhpcyBvcGVyYXRpb24gaXMgbmVjZXNzYXJ5IGJlZm9yZSBkbWEgb3BlcmF0aW9ucworICogICAgdG8gdGhlIG1lbW9yeS4KKyAqICAtIGRtYV9jYWNoZV93YmFjayhzdGFydCwgc2l6ZSkgd3JpdGVzIGJhY2sgYW55IGRpcnR5IGxpbmVzIGJ1dCBkb2VzCisgKiAgICBub3QgaW52YWxpZGF0ZSB0aGUgY2FjaGUuICBUaGlzIGNhbiBiZSB1c2VkIGJlZm9yZSBETUEgcmVhZHMgZnJvbQorICogICAgbWVtb3J5LAorICovCisKKyNkZWZpbmUgZG1hX2NhY2hlX3diYWNrX2ludihfc3RhcnQsX3NpemUpIFwKKyAgICBfX2ZsdXNoX3B1cmdlX3JlZ2lvbihfc3RhcnQsX3NpemUpCisjZGVmaW5lIGRtYV9jYWNoZV9pbnYoX3N0YXJ0LF9zaXplKSBcCisgICAgX19mbHVzaF9pbnZhbGlkYXRlX3JlZ2lvbihfc3RhcnQsX3NpemUpCisjZGVmaW5lIGRtYV9jYWNoZV93YmFjayhfc3RhcnQsX3NpemUpIFwKKyAgICBfX2ZsdXNoX3diYWNrX3JlZ2lvbihfc3RhcnQsX3NpemUpCisKKy8qCisgKiBDb252ZXJ0IGEgcGh5c2ljYWwgcG9pbnRlciB0byBhIHZpcnR1YWwga2VybmVsIHBvaW50ZXIgZm9yIC9kZXYvbWVtCisgKiBhY2Nlc3MKKyAqLworI2RlZmluZSB4bGF0ZV9kZXZfbWVtX3B0cihwKQlfX3ZhKHApCisKKy8qCisgKiBDb252ZXJ0IGEgdmlydHVhbCBjYWNoZWQgcG9pbnRlciB0byBhbiB1bmNhY2hlZCBwb2ludGVyCisgKi8KKyNkZWZpbmUgeGxhdGVfZGV2X2ttZW1fcHRyKHApCXAKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9fQVNNX1NIX0lPX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2lvX2dlbmVyaWMuaCBiL2luY2x1ZGUvYXNtLXNoL2lvX2dlbmVyaWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTE0NTg3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvaW9fZ2VuZXJpYy5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1zaC9pb19nZW5lcmljLmgKKyAqCisgKiBDb3B5cmlnaHQgMjAwMCBTdHVhcnQgTWVuZWZ5IChzdHVhcnQubWVuZWZ5QHN0LmNvbSkKKyAqCisgKiBNYXkgYmUgY29waWVkIG9yIG1vZGlmaWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIGxpbnV4L0NPUFlJTkcgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgKgorICogR2VuZXJpYyBJTyBmdW5jdGlvbnMKKyAqLworCisjaWZuZGVmIF9BU01fU0hfSU9fR0VORVJJQ19ICisjZGVmaW5lIF9BU01fU0hfSU9fR0VORVJJQ19ICisKK2V4dGVybiB1bnNpZ25lZCBsb25nIGdlbmVyaWNfaW9fYmFzZTsKKworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgZ2VuZXJpY19pbmIodW5zaWduZWQgbG9uZyBwb3J0KTsKK2V4dGVybiB1bnNpZ25lZCBzaG9ydCBnZW5lcmljX2ludyh1bnNpZ25lZCBsb25nIHBvcnQpOworZXh0ZXJuIHVuc2lnbmVkIGludCBnZW5lcmljX2lubCh1bnNpZ25lZCBsb25nIHBvcnQpOworCitleHRlcm4gdm9pZCBnZW5lcmljX291dGIodW5zaWduZWQgY2hhciB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KTsKK2V4dGVybiB2b2lkIGdlbmVyaWNfb3V0dyh1bnNpZ25lZCBzaG9ydCB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KTsKK2V4dGVybiB2b2lkIGdlbmVyaWNfb3V0bCh1bnNpZ25lZCBpbnQgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCk7CisKK2V4dGVybiB1bnNpZ25lZCBjaGFyIGdlbmVyaWNfaW5iX3AodW5zaWduZWQgbG9uZyBwb3J0KTsKK2V4dGVybiB1bnNpZ25lZCBzaG9ydCBnZW5lcmljX2lud19wKHVuc2lnbmVkIGxvbmcgcG9ydCk7CitleHRlcm4gdW5zaWduZWQgaW50IGdlbmVyaWNfaW5sX3AodW5zaWduZWQgbG9uZyBwb3J0KTsKK2V4dGVybiB2b2lkIGdlbmVyaWNfb3V0Yl9wKHVuc2lnbmVkIGNoYXIgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCk7CitleHRlcm4gdm9pZCBnZW5lcmljX291dHdfcCh1bnNpZ25lZCBzaG9ydCB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KTsKK2V4dGVybiB2b2lkIGdlbmVyaWNfb3V0bF9wKHVuc2lnbmVkIGludCB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KTsKKworZXh0ZXJuIHZvaWQgZ2VuZXJpY19pbnNiKHVuc2lnbmVkIGxvbmcgcG9ydCwgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCk7CitleHRlcm4gdm9pZCBnZW5lcmljX2luc3codW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKK2V4dGVybiB2b2lkIGdlbmVyaWNfaW5zbCh1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpOworZXh0ZXJuIHZvaWQgZ2VuZXJpY19vdXRzYih1bnNpZ25lZCBsb25nIHBvcnQsIGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpOworZXh0ZXJuIHZvaWQgZ2VuZXJpY19vdXRzdyh1bnNpZ25lZCBsb25nIHBvcnQsIGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpOworZXh0ZXJuIHZvaWQgZ2VuZXJpY19vdXRzbCh1bnNpZ25lZCBsb25nIHBvcnQsIGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpOworCitleHRlcm4gdW5zaWduZWQgY2hhciBnZW5lcmljX3JlYWRiKHVuc2lnbmVkIGxvbmcgYWRkcik7CitleHRlcm4gdW5zaWduZWQgc2hvcnQgZ2VuZXJpY19yZWFkdyh1bnNpZ25lZCBsb25nIGFkZHIpOworZXh0ZXJuIHVuc2lnbmVkIGludCBnZW5lcmljX3JlYWRsKHVuc2lnbmVkIGxvbmcgYWRkcik7CitleHRlcm4gdm9pZCBnZW5lcmljX3dyaXRlYih1bnNpZ25lZCBjaGFyIGIsIHVuc2lnbmVkIGxvbmcgYWRkcik7CitleHRlcm4gdm9pZCBnZW5lcmljX3dyaXRldyh1bnNpZ25lZCBzaG9ydCBiLCB1bnNpZ25lZCBsb25nIGFkZHIpOworZXh0ZXJuIHZvaWQgZ2VuZXJpY193cml0ZWwodW5zaWduZWQgaW50IGIsIHVuc2lnbmVkIGxvbmcgYWRkcik7CisKK2V4dGVybiB2b2lkICpnZW5lcmljX2lvcmVtYXAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CitleHRlcm4gdm9pZCBnZW5lcmljX2lvdW5tYXAodm9pZCAqYWRkcik7CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIGdlbmVyaWNfaXNhX3BvcnQyYWRkcih1bnNpZ25lZCBsb25nIG9mZnNldCk7CisKKyNlbmRpZiAvKiBfQVNNX1NIX0lPX0dFTkVSSUNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvaW9jdGwuaCBiL2luY2x1ZGUvYXNtLXNoL2lvY3RsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI0NzAwZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL2lvY3RsLmgKQEAgLTAsMCArMSw3NSBAQAorLyogJElkOiBpb2N0bC5oLHYgMS4xLjEuMSAyMDAxLzEwLzE1IDIwOjQ1OjA5IG1yYnJvd24gRXhwICQKKyAqCisgKiBsaW51eC9pb2N0bC5oIGZvciBMaW51eCBieSBILkguIEJlcmdtYW4uCisgKi8KKworI2lmbmRlZiBfX0FTTV9TSF9JT0NUTF9ICisjZGVmaW5lIF9fQVNNX1NIX0lPQ1RMX0gKKworLyogaW9jdGwgY29tbWFuZCBlbmNvZGluZzogMzIgYml0cyB0b3RhbCwgY29tbWFuZCBpbiBsb3dlciAxNiBiaXRzLAorICogc2l6ZSBvZiB0aGUgcGFyYW1ldGVyIHN0cnVjdHVyZSBpbiB0aGUgbG93ZXIgMTQgYml0cyBvZiB0aGUKKyAqIHVwcGVyIDE2IGJpdHMuCisgKiBFbmNvZGluZyB0aGUgc2l6ZSBvZiB0aGUgcGFyYW1ldGVyIHN0cnVjdHVyZSBpbiB0aGUgaW9jdGwgcmVxdWVzdAorICogaXMgdXNlZnVsIGZvciBjYXRjaGluZyBwcm9ncmFtcyBjb21waWxlZCB3aXRoIG9sZCB2ZXJzaW9ucworICogYW5kIHRvIGF2b2lkIG92ZXJ3cml0aW5nIHVzZXIgc3BhY2Ugb3V0c2lkZSB0aGUgdXNlciBidWZmZXIgYXJlYS4KKyAqIFRoZSBoaWdoZXN0IDIgYml0cyBhcmUgcmVzZXJ2ZWQgZm9yIGluZGljYXRpbmcgdGhlIGBgYWNjZXNzIG1vZGUnJy4KKyAqIE5PVEU6IFRoaXMgbGltaXRzIHRoZSBtYXggcGFyYW1ldGVyIHNpemUgdG8gMTZrQiAtMSAhCisgKi8KKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgaXMgZm9yIGNvbXBhdGliaWxpdHkgYWNyb3NzIHRoZSB2YXJpb3VzIExpbnV4CisgKiBwbGF0Zm9ybXMuICBUaGUgaTM4NiBpb2N0bCBudW1iZXJpbmcgc2NoZW1lIGRvZXNuJ3QgcmVhbGx5IGVuZm9yY2UKKyAqIGEgdHlwZSBmaWVsZC4gIERlIGZhY3RvLCBob3dldmVyLCB0aGUgdG9wIDggYml0cyBvZiB0aGUgbG93ZXIgMTYKKyAqIGJpdHMgYXJlIGluZGVlZCB1c2VkIGFzIGEgdHlwZSBmaWVsZCwgc28gd2UgbWlnaHQganVzdCBhcyB3ZWxsIG1ha2UKKyAqIHRoaXMgZXhwbGljaXQgaGVyZS4gIFBsZWFzZSBiZSBzdXJlIHRvIHVzZSB0aGUgZGVjb2RpbmcgbWFjcm9zCisgKiBiZWxvdyBmcm9tIG5vdyBvbi4KKyAqLworI2RlZmluZSBfSU9DX05SQklUUwk4CisjZGVmaW5lIF9JT0NfVFlQRUJJVFMJOAorI2RlZmluZSBfSU9DX1NJWkVCSVRTCTE0CisjZGVmaW5lIF9JT0NfRElSQklUUwkyCisKKyNkZWZpbmUgX0lPQ19OUk1BU0sJKCgxIDw8IF9JT0NfTlJCSVRTKS0xKQorI2RlZmluZSBfSU9DX1RZUEVNQVNLCSgoMSA8PCBfSU9DX1RZUEVCSVRTKS0xKQorI2RlZmluZSBfSU9DX1NJWkVNQVNLCSgoMSA8PCBfSU9DX1NJWkVCSVRTKS0xKQorI2RlZmluZSBfSU9DX0RJUk1BU0sJKCgxIDw8IF9JT0NfRElSQklUUyktMSkKKworI2RlZmluZSBfSU9DX05SU0hJRlQJMAorI2RlZmluZSBfSU9DX1RZUEVTSElGVAkoX0lPQ19OUlNISUZUK19JT0NfTlJCSVRTKQorI2RlZmluZSBfSU9DX1NJWkVTSElGVAkoX0lPQ19UWVBFU0hJRlQrX0lPQ19UWVBFQklUUykKKyNkZWZpbmUgX0lPQ19ESVJTSElGVAkoX0lPQ19TSVpFU0hJRlQrX0lPQ19TSVpFQklUUykKKworLyoKKyAqIERpcmVjdGlvbiBiaXRzLgorICovCisjZGVmaW5lIF9JT0NfTk9ORQkwVQorI2RlZmluZSBfSU9DX1dSSVRFCTFVCisjZGVmaW5lIF9JT0NfUkVBRAkyVQorCisjZGVmaW5lIF9JT0MoZGlyLHR5cGUsbnIsc2l6ZSkgXAorCSgoKGRpcikgIDw8IF9JT0NfRElSU0hJRlQpIHwgXAorCSAoKHR5cGUpIDw8IF9JT0NfVFlQRVNISUZUKSB8IFwKKwkgKChucikgICA8PCBfSU9DX05SU0hJRlQpIHwgXAorCSAoKHNpemUpIDw8IF9JT0NfU0laRVNISUZUKSkKKworLyogdXNlZCB0byBjcmVhdGUgbnVtYmVycyAqLworI2RlZmluZSBfSU8odHlwZSxucikJCV9JT0MoX0lPQ19OT05FLCh0eXBlKSwobnIpLDApCisjZGVmaW5lIF9JT1IodHlwZSxucixzaXplKQlfSU9DKF9JT0NfUkVBRCwodHlwZSksKG5yKSxzaXplb2Yoc2l6ZSkpCisjZGVmaW5lIF9JT1codHlwZSxucixzaXplKQlfSU9DKF9JT0NfV1JJVEUsKHR5cGUpLChuciksc2l6ZW9mKHNpemUpKQorI2RlZmluZSBfSU9XUih0eXBlLG5yLHNpemUpCV9JT0MoX0lPQ19SRUFEfF9JT0NfV1JJVEUsKHR5cGUpLChuciksc2l6ZW9mKHNpemUpKQorCisvKiB1c2VkIHRvIGRlY29kZSBpb2N0bCBudW1iZXJzLi4gKi8KKyNkZWZpbmUgX0lPQ19ESVIobnIpCQkoKChucikgPj4gX0lPQ19ESVJTSElGVCkgJiBfSU9DX0RJUk1BU0spCisjZGVmaW5lIF9JT0NfVFlQRShucikJCSgoKG5yKSA+PiBfSU9DX1RZUEVTSElGVCkgJiBfSU9DX1RZUEVNQVNLKQorI2RlZmluZSBfSU9DX05SKG5yKQkJKCgobnIpID4+IF9JT0NfTlJTSElGVCkgJiBfSU9DX05STUFTSykKKyNkZWZpbmUgX0lPQ19TSVpFKG5yKQkJKCgobnIpID4+IF9JT0NfU0laRVNISUZUKSAmIF9JT0NfU0laRU1BU0spCisKKy8qIC4uLmFuZCBmb3IgdGhlIGRyaXZlcnMvc291bmQgZmlsZXMuLi4gKi8KKworI2RlZmluZSBJT0NfSU4JCShfSU9DX1dSSVRFIDw8IF9JT0NfRElSU0hJRlQpCisjZGVmaW5lIElPQ19PVVQJCShfSU9DX1JFQUQgPDwgX0lPQ19ESVJTSElGVCkKKyNkZWZpbmUgSU9DX0lOT1VUCSgoX0lPQ19XUklURXxfSU9DX1JFQUQpIDw8IF9JT0NfRElSU0hJRlQpCisjZGVmaW5lIElPQ1NJWkVfTUFTSwkoX0lPQ19TSVpFTUFTSyA8PCBfSU9DX1NJWkVTSElGVCkKKyNkZWZpbmUgSU9DU0laRV9TSElGVAkoX0lPQ19TSVpFU0hJRlQpCisKKyNlbmRpZiAvKiBfX0FTTV9TSF9JT0NUTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9pb2N0bHMuaCBiL2luY2x1ZGUvYXNtLXNoL2lvY3Rscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4NjZmM2YKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9pb2N0bHMuaApAQCAtMCwwICsxLDk5IEBACisjaWZuZGVmIF9fQVNNX1NIX0lPQ1RMU19ICisjZGVmaW5lIF9fQVNNX1NIX0lPQ1RMU19ICisKKyNpbmNsdWRlIDxhc20vaW9jdGwuaD4KKworI2RlZmluZSBGSU9DTEVYCQlfSU8oJ2YnLCAxKQorI2RlZmluZSBGSU9OQ0xFWAlfSU8oJ2YnLCAyKQorI2RlZmluZSBGSU9BU1lOQwlfSU9XKCdmJywgMTI1LCBpbnQpCisjZGVmaW5lIEZJT05CSU8JCV9JT1coJ2YnLCAxMjYsIGludCkKKyNkZWZpbmUgRklPTlJFQUQJX0lPUignZicsIDEyNywgaW50KQorI2RlZmluZSBUSU9DSU5RCQlGSU9OUkVBRAorI2RlZmluZSBGSU9RU0laRQlfSU9SKCdmJywgMTI4LCBsb2ZmX3QpCisKKyNkZWZpbmUgVENHRVRTCQkweDU0MDEKKyNkZWZpbmUgVENTRVRTCQkweDU0MDIKKyNkZWZpbmUgVENTRVRTVwkJMHg1NDAzCisjZGVmaW5lIFRDU0VUU0YJCTB4NTQwNAorCisjZGVmaW5lIFRDR0VUQQkJX0lPUigndCcsIDIzLCBzdHJ1Y3QgdGVybWlvKQorI2RlZmluZSBUQ1NFVEEJCV9JT1coJ3QnLCAyNCwgc3RydWN0IHRlcm1pbykKKyNkZWZpbmUgVENTRVRBVwkJX0lPVygndCcsIDI1LCBzdHJ1Y3QgdGVybWlvKQorI2RlZmluZSBUQ1NFVEFGCQlfSU9XKCd0JywgMjgsIHN0cnVjdCB0ZXJtaW8pCisKKyNkZWZpbmUgVENTQlJLCQlfSU8oJ3QnLCAyOSkKKyNkZWZpbmUgVENYT05DCQlfSU8oJ3QnLCAzMCkKKyNkZWZpbmUgVENGTFNICQlfSU8oJ3QnLCAzMSkKKworI2RlZmluZSBUSU9DU1dJTlNaCV9JT1coJ3QnLCAxMDMsIHN0cnVjdCB3aW5zaXplKQorI2RlZmluZSBUSU9DR1dJTlNaCV9JT1IoJ3QnLCAxMDQsIHN0cnVjdCB3aW5zaXplKQorI2RlZmluZQlUSU9DU1RBUlQJX0lPKCd0JywgMTEwKQkJLyogc3RhcnQgb3V0cHV0LCBsaWtlIF5RICovCisjZGVmaW5lCVRJT0NTVE9QCV9JTygndCcsIDExMSkJCS8qIHN0b3Agb3V0cHV0LCBsaWtlIF5TICovCisjZGVmaW5lIFRJT0NPVVRRICAgICAgICBfSU9SKCd0JywgMTE1LCBpbnQpICAgICAvKiBvdXRwdXQgcXVldWUgc2l6ZSAqLworCisjZGVmaW5lIFRJT0NTUEdSUAlfSU9XKCd0JywgMTE4LCBpbnQpCisjZGVmaW5lIFRJT0NHUEdSUAlfSU9SKCd0JywgMTE5LCBpbnQpCisKKyNkZWZpbmUgVElPQ0VYQ0wJX0lPKCdUJywgMTIpIC8qIDB4NTQwQyAqLworI2RlZmluZSBUSU9DTlhDTAlfSU8oJ1QnLCAxMykgLyogMHg1NDBEICovCisjZGVmaW5lIFRJT0NTQ1RUWQlfSU8oJ1QnLCAxNCkgLyogMHg1NDBFICovCisKKyNkZWZpbmUgVElPQ1NUSQkJX0lPVygnVCcsIDE4LCBjaGFyKSAvKiAweDU0MTIgKi8KKyNkZWZpbmUgVElPQ01HRVQJX0lPUignVCcsIDIxLCB1bnNpZ25lZCBpbnQpIC8qIDB4NTQxNSAqLworI2RlZmluZSBUSU9DTUJJUwlfSU9XKCdUJywgMjIsIHVuc2lnbmVkIGludCkgLyogMHg1NDE2ICovCisjZGVmaW5lIFRJT0NNQklDCV9JT1coJ1QnLCAyMywgdW5zaWduZWQgaW50KSAvKiAweDU0MTcgKi8KKyNkZWZpbmUgVElPQ01TRVQJX0lPVygnVCcsIDI0LCB1bnNpZ25lZCBpbnQpIC8qIDB4NTQxOCAqLworIyBkZWZpbmUgVElPQ01fTEUJMHgwMDEKKyMgZGVmaW5lIFRJT0NNX0RUUgkweDAwMgorIyBkZWZpbmUgVElPQ01fUlRTCTB4MDA0CisjIGRlZmluZSBUSU9DTV9TVAkweDAwOAorIyBkZWZpbmUgVElPQ01fU1IJMHgwMTAKKyMgZGVmaW5lIFRJT0NNX0NUUwkweDAyMAorIyBkZWZpbmUgVElPQ01fQ0FSCTB4MDQwCisjIGRlZmluZSBUSU9DTV9STkcJMHgwODAKKyMgZGVmaW5lIFRJT0NNX0RTUgkweDEwMAorIyBkZWZpbmUgVElPQ01fQ0QJVElPQ01fQ0FSCisjIGRlZmluZSBUSU9DTV9SSQlUSU9DTV9STkcKKworI2RlZmluZSBUSU9DR1NPRlRDQVIJX0lPUignVCcsIDI1LCB1bnNpZ25lZCBpbnQpIC8qIDB4NTQxOSAqLworI2RlZmluZSBUSU9DU1NPRlRDQVIJX0lPVygnVCcsIDI2LCB1bnNpZ25lZCBpbnQpIC8qIDB4NTQxQSAqLworI2RlZmluZSBUSU9DTElOVVgJX0lPVygnVCcsIDI4LCBjaGFyKSAvKiAweDU0MUMgKi8KKyNkZWZpbmUgVElPQ0NPTlMJX0lPKCdUJywgMjkpIC8qIDB4NTQxRCAqLworI2RlZmluZSBUSU9DR1NFUklBTAlfSU9SKCdUJywgMzAsIHN0cnVjdCBzZXJpYWxfc3RydWN0KSAvKiAweDU0MUUgKi8KKyNkZWZpbmUgVElPQ1NTRVJJQUwJX0lPVygnVCcsIDMxLCBzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCkgLyogMHg1NDFGICovCisjZGVmaW5lIFRJT0NQS1QJCV9JT1coJ1QnLCAzMiwgaW50KSAvKiAweDU0MjAgKi8KKyMgZGVmaW5lIFRJT0NQS1RfREFUQQkJIDAKKyMgZGVmaW5lIFRJT0NQS1RfRkxVU0hSRUFECSAxCisjIGRlZmluZSBUSU9DUEtUX0ZMVVNIV1JJVEUJIDIKKyMgZGVmaW5lIFRJT0NQS1RfU1RPUAkJIDQKKyMgZGVmaW5lIFRJT0NQS1RfU1RBUlQJCSA4CisjIGRlZmluZSBUSU9DUEtUX05PU1RPUAkJMTYKKyMgZGVmaW5lIFRJT0NQS1RfRE9TVE9QCQkzMgorCisKKyNkZWZpbmUgVElPQ05PVFRZCV9JTygnVCcsIDM0KSAvKiAweDU0MjIgKi8KKyNkZWZpbmUgVElPQ1NFVEQJX0lPVygnVCcsIDM1LCBpbnQpIC8qIDB4NTQyMyAqLworI2RlZmluZSBUSU9DR0VURAlfSU9SKCdUJywgMzYsIGludCkgLyogMHg1NDI0ICovCisjZGVmaW5lIFRDU0JSS1AJCV9JT1coJ1QnLCAzNywgaW50KSAvKiAweDU0MjUgKi8JLyogTmVlZGVkIGZvciBQT1NJWCB0Y3NlbmRicmVhaygpICovCisjZGVmaW5lIFRJT0NTQlJLCV9JTygnVCcsIDM5KSAvKiAweDU0MjcgKi8gLyogQlNEIGNvbXBhdGliaWxpdHkgKi8KKyNkZWZpbmUgVElPQ0NCUksJX0lPKCdUJywgNDApIC8qIDB4NTQyOCAqLyAvKiBCU0QgY29tcGF0aWJpbGl0eSAqLworI2RlZmluZSBUSU9DR1NJRAlfSU9SKCdUJywgNDEsIHBpZF90KSAvKiAweDU0MjkgKi8gLyogUmV0dXJuIHRoZSBzZXNzaW9uIElEIG9mIEZEICovCisjZGVmaW5lIFRJT0NHUFROCV9JT1IoJ1QnLDB4MzAsIHVuc2lnbmVkIGludCkgLyogR2V0IFB0eSBOdW1iZXIgKG9mIHB0eS1tdXggZGV2aWNlKSAqLworI2RlZmluZSBUSU9DU1BUTENLCV9JT1coJ1QnLDB4MzEsIGludCkgIC8qIExvY2svdW5sb2NrIFB0eSAqLworCisjZGVmaW5lIFRJT0NTRVJDT05GSUcJX0lPKCdUJywgODMpIC8qIDB4NTQ1MyAqLworI2RlZmluZSBUSU9DU0VSR1dJTEQJX0lPUignVCcsIDg0LCAgaW50KSAvKiAweDU0NTQgKi8KKyNkZWZpbmUgVElPQ1NFUlNXSUxECV9JT1coJ1QnLCA4NSwgIGludCkgLyogMHg1NDU1ICovCisjZGVmaW5lIFRJT0NHTENLVFJNSU9TCTB4NTQ1NgorI2RlZmluZSBUSU9DU0xDS1RSTUlPUwkweDU0NTcKKyNkZWZpbmUgVElPQ1NFUkdTVFJVQ1QJX0lPUignVCcsIDg4LCBzdHJ1Y3QgYXN5bmNfc3RydWN0KSAvKiAweDU0NTggKi8gLyogRm9yIGRlYnVnZ2luZyBvbmx5ICovCisjZGVmaW5lIFRJT0NTRVJHRVRMU1IgICBfSU9SKCdUJywgODksIHVuc2lnbmVkIGludCkgLyogMHg1NDU5ICovIC8qIEdldCBsaW5lIHN0YXR1cyByZWdpc3RlciAqLworICAvKiBpb2N0bCAoZmQsIFRJT0NTRVJHRVRMU1IsICZyZXN1bHQpIHdoZXJlIHJlc3VsdCBtYXkgYmUgYXMgYmVsb3cgKi8KKyMgZGVmaW5lIFRJT0NTRVJfVEVNVCAgICAweDAxCS8qIFRyYW5zbWl0dGVyIHBoeXNpY2FsbHkgZW1wdHkgKi8KKyNkZWZpbmUgVElPQ1NFUkdFVE1VTFRJIF9JT1IoJ1QnLCA5MCwgc3RydWN0IHNlcmlhbF9tdWx0aXBvcnRfc3RydWN0KSAvKiAweDU0NUEgKi8gLyogR2V0IG11bHRpcG9ydCBjb25maWcgICovCisjZGVmaW5lIFRJT0NTRVJTRVRNVUxUSSBfSU9XKCdUJywgOTEsIHN0cnVjdCBzZXJpYWxfbXVsdGlwb3J0X3N0cnVjdCkgLyogMHg1NDVCICovIC8qIFNldCBtdWx0aXBvcnQgY29uZmlnICovCisKKyNkZWZpbmUgVElPQ01JV0FJVAlfSU8oJ1QnLCA5MikgLyogMHg1NDVDICovCS8qIHdhaXQgZm9yIGEgY2hhbmdlIG9uIHNlcmlhbCBpbnB1dCBsaW5lKHMpICovCisjZGVmaW5lIFRJT0NHSUNPVU5UCV9JT1IoJ1QnLCA5Mywgc3RydWN0IGFzeW5jX2ljb3VudCkgLyogMHg1NDVEICovCS8qIHJlYWQgc2VyaWFsIHBvcnQgaW5saW5lIGludGVycnVwdCBjb3VudHMgKi8KKworI2VuZGlmIC8qIF9fQVNNX1NIX0lPQ1RMU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9pcGMuaCBiL2luY2x1ZGUvYXNtLXNoL2lwYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0NmUzZDkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9pcGMuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvaXBjLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9pcGNidWYuaCBiL2luY2x1ZGUvYXNtLXNoL2lwY2J1Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmZmM5OTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9pcGNidWYuaApAQCAtMCwwICsxLDI5IEBACisjaWZuZGVmIF9fQVNNX1NIX0lQQ0JVRl9IX18KKyNkZWZpbmUgX19BU01fU0hfSVBDQlVGX0hfXworCisvKgorICogVGhlIGlwYzY0X3Blcm0gc3RydWN0dXJlIGZvciBpMzg2IGFyY2hpdGVjdHVyZS4KKyAqIE5vdGUgZXh0cmEgcGFkZGluZyBiZWNhdXNlIHRoaXMgc3RydWN0dXJlIGlzIHBhc3NlZCBiYWNrIGFuZCBmb3J0aAorICogYmV0d2VlbiBrZXJuZWwgYW5kIHVzZXIgc3BhY2UuCisgKgorICogUGFkIHNwYWNlIGlzIGxlZnQgZm9yOgorICogLSAzMi1iaXQgbW9kZV90IGFuZCBzZXEKKyAqIC0gMiBtaXNjZWxsYW5lb3VzIDMyLWJpdCB2YWx1ZXMKKyAqLworCitzdHJ1Y3QgaXBjNjRfcGVybQoreworCV9fa2VybmVsX2tleV90CQlrZXk7CisJX19rZXJuZWxfdWlkMzJfdAl1aWQ7CisJX19rZXJuZWxfZ2lkMzJfdAlnaWQ7CisJX19rZXJuZWxfdWlkMzJfdAljdWlkOworCV9fa2VybmVsX2dpZDMyX3QJY2dpZDsKKwlfX2tlcm5lbF9tb2RlX3QJCW1vZGU7CisJdW5zaWduZWQgc2hvcnQJCV9fcGFkMTsKKwl1bnNpZ25lZCBzaG9ydAkJc2VxOworCXVuc2lnbmVkIHNob3J0CQlfX3BhZDI7CisJdW5zaWduZWQgbG9uZwkJX191bnVzZWQxOworCXVuc2lnbmVkIGxvbmcJCV9fdW51c2VkMjsKK307CisKKyNlbmRpZiAvKiBfX0FTTV9TSF9JUENCVUZfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9pcnEtc2g3MzE4MC5oIGIvaW5jbHVkZS9hc20tc2gvaXJxLXNoNzMxODAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjJlNDMxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvaXJxLXNoNzMxODAuaApAQCAtMCwwICsxLDM1MCBAQAorI2lmbmRlZiBfX0FTTV9TSF9JUlFfU0g3MzE4MF9ICisjZGVmaW5lIF9fQVNNX1NIX0lSUV9TSDczMTgwX0gKKworLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLXNoL2lycS1zaDczMTgwLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgVGFrYXNoaSBTSFVETyA8c2h1ZG9AaGl0YWNoaS11bC5jby5qcD4KKyAqLworCisjdW5kZWYgSU5UQ19JUFJBCisjdW5kZWYgSU5UQ19JUFJCCisjdW5kZWYgSU5UQ19JUFJDCisjdW5kZWYgSU5UQ19JUFJECisKKyN1bmRlZiBETVRFMF9JUlEKKyN1bmRlZiBETVRFMV9JUlEKKyN1bmRlZiBETVRFMl9JUlEKKyN1bmRlZiBETVRFM19JUlEKKyN1bmRlZiBETVRFNF9JUlEKKyN1bmRlZiBETVRFNV9JUlEKKyN1bmRlZiBETVRFNl9JUlEKKyN1bmRlZiBETVRFN19JUlEKKyN1bmRlZiBETUFFX0lSUQorI3VuZGVmIERNQV9JUFJfQUREUgorI3VuZGVmIERNQV9JUFJfUE9TCisjdW5kZWYgRE1BX1BSSU9SSVRZCisKKyN1bmRlZiBOUl9JUlFTCisKKyN1bmRlZiBfX2lycV9kZW11eAorI3VuZGVmIGlycV9kZW11eAorCisjdW5kZWYgSU5UQ19JTUNSMAorI3VuZGVmIElOVENfSU1DUjEKKyN1bmRlZiBJTlRDX0lNQ1IyCisjdW5kZWYgSU5UQ19JTUNSMworI3VuZGVmIElOVENfSU1DUjQKKyN1bmRlZiBJTlRDX0lNQ1I1CisjdW5kZWYgSU5UQ19JTUNSNgorI3VuZGVmIElOVENfSU1DUjcKKyN1bmRlZiBJTlRDX0lNQ1I4CisjdW5kZWYgSU5UQ19JTUNSOQorI3VuZGVmIElOVENfSU1DUjEwCisKKworI2RlZmluZSBJTlRDX0lQUkEgIAkweEE0MDgwMDAwVUwKKyNkZWZpbmUgSU5UQ19JUFJCICAJMHhBNDA4MDAwNFVMCisjZGVmaW5lIElOVENfSVBSQyAgCTB4QTQwODAwMDhVTAorI2RlZmluZSBJTlRDX0lQUkQgIAkweEE0MDgwMDBDVUwKKyNkZWZpbmUgSU5UQ19JUFJFICAJMHhBNDA4MDAxMFVMCisjZGVmaW5lIElOVENfSVBSRiAgCTB4QTQwODAwMTRVTAorI2RlZmluZSBJTlRDX0lQUkcgIAkweEE0MDgwMDE4VUwKKyNkZWZpbmUgSU5UQ19JUFJIICAJMHhBNDA4MDAxQ1VMCisjZGVmaW5lIElOVENfSVBSSSAgCTB4QTQwODAwMjBVTAorI2RlZmluZSBJTlRDX0lQUkogIAkweEE0MDgwMDI0VUwKKyNkZWZpbmUgSU5UQ19JUFJLICAJMHhBNDA4MDAyOFVMCisKKyNkZWZpbmUgSU5UQ19JTVIwCTB4QTQwODAwODBVTAorI2RlZmluZSBJTlRDX0lNUjEJMHhBNDA4MDA4NFVMCisjZGVmaW5lIElOVENfSU1SMgkweEE0MDgwMDg4VUwKKyNkZWZpbmUgSU5UQ19JTVIzCTB4QTQwODAwOENVTAorI2RlZmluZSBJTlRDX0lNUjQJMHhBNDA4MDA5MFVMCisjZGVmaW5lIElOVENfSU1SNQkweEE0MDgwMDk0VUwKKyNkZWZpbmUgSU5UQ19JTVI2CTB4QTQwODAwOThVTAorI2RlZmluZSBJTlRDX0lNUjcJMHhBNDA4MDA5Q1VMCisjZGVmaW5lIElOVENfSU1SOAkweEE0MDgwMEEwVUwKKyNkZWZpbmUgSU5UQ19JTVI5CTB4QTQwODAwQTRVTAorI2RlZmluZSBJTlRDX0lNUjEwCTB4QTQwODAwQThVTAorI2RlZmluZSBJTlRDX0lNUjExCTB4QTQwODAwQUNVTAorCisjZGVmaW5lIElOVENfSU1DUjAJMHhBNDA4MDBDMFVMCisjZGVmaW5lIElOVENfSU1DUjEJMHhBNDA4MDBDNFVMCisjZGVmaW5lIElOVENfSU1DUjIJMHhBNDA4MDBDOFVMCisjZGVmaW5lIElOVENfSU1DUjMJMHhBNDA4MDBDQ1VMCisjZGVmaW5lIElOVENfSU1DUjQJMHhBNDA4MDBEMFVMCisjZGVmaW5lIElOVENfSU1DUjUJMHhBNDA4MDBENFVMCisjZGVmaW5lIElOVENfSU1DUjYJMHhBNDA4MDBEOFVMCisjZGVmaW5lIElOVENfSU1DUjcJMHhBNDA4MDBEQ1VMCisjZGVmaW5lIElOVENfSU1DUjgJMHhBNDA4MDBFMFVMCisjZGVmaW5lIElOVENfSU1DUjkJMHhBNDA4MDBFNFVMCisjZGVmaW5lIElOVENfSU1DUjEwCTB4QTQwODAwRThVTAorI2RlZmluZSBJTlRDX0lNQ1IxMQkweEE0MDgwMEVDVUwKKworI2RlZmluZSBJTlRDX0lDUjAJMHhBNDE0MDAwMFVMCisjZGVmaW5lIElOVENfSUNSMQkweEE0MTQwMDFDVUwKKworI2RlZmluZSBJTlRNU0swCQkweGE0MTQwMDQ0CisjZGVmaW5lIElOVE1TS0NMUjAJMHhhNDE0MDA2NAorI2RlZmluZSBJTlRDX0lOVFBSSTAJMHhhNDE0MDAxMAorCisvKgorICBOT1RFOgorCisgICpfSVJRID0gKElOVEVWVDIgLSAweDIwMCkvMHgyMAorKi8KKworLyogVE1VMCAqLworI2RlZmluZSBUTVUwX0lSUQkxNgorI2RlZmluZSBUTVUwX0lQUl9BRERSCUlOVENfSVBSQQorI2RlZmluZSBUTVUwX0lQUl9QT1MJIDMKKyNkZWZpbmUgVE1VMF9QUklPUklUWQkgMgorCisjZGVmaW5lIFRJTUVSX0lSUSAgICAgICAxNgorI2RlZmluZSBUSU1FUl9JUFJfQUREUiAgSU5UQ19JUFJBCisjZGVmaW5lIFRJTUVSX0lQUl9QT1MgICAgMworI2RlZmluZSBUSU1FUl9QUklPUklUWSAgIDIKKworLyogVE1VMSAqLworI2RlZmluZSBUTVUxX0lSUQkxNworI2RlZmluZSBUTVUxX0lQUl9BRERSCUlOVENfSVBSQQorI2RlZmluZSBUTVUxX0lQUl9QT1MJIDIKKyNkZWZpbmUgVE1VMV9QUklPUklUWQkgMgorCisvKiBUTVUyICovCisjZGVmaW5lIFRNVTJfSVJRCTE4CisjZGVmaW5lIFRNVTJfSVBSX0FERFIJSU5UQ19JUFJBCisjZGVmaW5lIFRNVTJfSVBSX1BPUwkgMQorI2RlZmluZSBUTVUyX1BSSU9SSVRZCSAyCisKKy8qIExDREMgKi8KKyNkZWZpbmUgTENEQ19JUlEJMjgKKyNkZWZpbmUgTENEQ19JUFJfQUREUglJTlRDX0lQUkIKKyNkZWZpbmUgTENEQ19JUFJfUE9TCSAyCisjZGVmaW5lIExDRENfUFJJT1JJVFkJIDIKKworLyogVklPIChWaWRlbyBJL08pICovCisjZGVmaW5lIENFVV9JUlEJCTUyCisjZGVmaW5lIEJFVV9JUlEJCTUzCisjZGVmaW5lIFZFVV9JUlEJCTU0CisjZGVmaW5lIFZPVV9JUlEJCTU1CisjZGVmaW5lIFZJT19JUFJfQUREUglJTlRDX0lQUkUKKyNkZWZpbmUgVklPX0lQUl9QT1MJIDIKKyNkZWZpbmUgVklPX1BSSU9SSVRZCSAyCisKKy8qIE1GSSAoTXVsdGkgRnVuY3Rpb25hbCBJbnRlcmZhY2UpICovCisjZGVmaW5lIE1GSV9JUlEJCTU2CisjZGVmaW5lIE1GSV9JUFJfQUREUglJTlRDX0lQUkUKKyNkZWZpbmUgTUZJX0lQUl9QT1MJIDEKKyNkZWZpbmUgTUZJX1BSSU9SSVRZCSAyCisKKy8qIFZQVSAoVmlkZW8gUHJvY2Vzc2luZyBVbml0KSAqLworI2RlZmluZSBWUFVfSVJRCQk2MAorI2RlZmluZSBWUFVfSVBSX0FERFIJSU5UQ19JUFJFCisjZGVmaW5lIFZQVV9JUFJfUE9TCSAwCisjZGVmaW5lIFZQVV9QUklPUklUWQkgMgorCisvKiAzREcgKi8KKyNkZWZpbmUgVERHX0lSUQkJNjMKKyNkZWZpbmUgVERHX0lQUl9BRERSCUlOVENfSVBSSgorI2RlZmluZSBUREdfSVBSX1BPUwkgMgorI2RlZmluZSBUREdfUFJJT1JJVFkJIDIKKworLyogRE1BQygxKSAqLworI2RlZmluZSBETVRFMF9JUlEJNDgKKyNkZWZpbmUgRE1URTFfSVJRCTQ5CisjZGVmaW5lIERNVEUyX0lSUQk1MAorI2RlZmluZSBETVRFM19JUlEJNTEKKyNkZWZpbmUgRE1BMV9JUFJfQUREUglJTlRDX0lQUkUKKyNkZWZpbmUgRE1BMV9JUFJfUE9TCTMKKyNkZWZpbmUgRE1BMV9QUklPUklUWQk3CisKKy8qIERNQUMoMikgKi8KKyNkZWZpbmUgRE1URTRfSVJRCTc2CisjZGVmaW5lIERNVEU1X0lSUQk3NworI2RlZmluZSBETUEyX0lQUl9BRERSCUlOVENfSVBSRgorI2RlZmluZSBETUEyX0lQUl9QT1MJMgorI2RlZmluZSBETUEyX1BSSU9SSVRZCTcKKworLyogU0NJRjAgKi8KKyNkZWZpbmUgU0NJRl9FUklfSVJRCTgwCisjZGVmaW5lIFNDSUZfUlhJX0lSUQk4MQorI2RlZmluZSBTQ0lGX0JSSV9JUlEJODIKKyNkZWZpbmUgU0NJRl9UWElfSVJRCTgzCisjZGVmaW5lIFNDSUZfSVBSX0FERFIJSU5UQ19JUFJHCisjZGVmaW5lIFNDSUZfSVBSX1BPUwkzCisjZGVmaW5lIFNDSUZfUFJJT1JJVFkJMworCisvKiBTSU9GMCAqLworI2RlZmluZSBTSU9GMF9JUlEJODQKKyNkZWZpbmUgU0lPRjBfSVBSX0FERFIJSU5UQ19JUFJICisjZGVmaW5lIFNJT0YwX0lQUl9QT1MJMworI2RlZmluZSBTSU9GMF9QUklPUklUWQkzCisKKy8qIEZMQ1RMIChGbGFzaCBNZW1vcnkgQ29udHJvbGxlcikgKi8KKyNkZWZpbmUgRkxTVEVfSVJRCTkyCisjZGVmaW5lIEZMVEVORF9JUlEJOTMKKyNkZWZpbmUgRkxUUlEwX0lSUQk5NAorI2RlZmluZSBGTFRSUTFfSVJRCTk1CisjZGVmaW5lIEZMQ1RMX0lQUl9BRERSCUlOVENfSVBSSAorI2RlZmluZSBGTENUTF9JUFJfUE9TCTEKKyNkZWZpbmUgRkxDVExfUFJJT1JJVFkJMworCisvKiBJSUMoMCkgKElJQyBCdXMgSW50ZXJmYWNlKSAqLworI2RlZmluZSBJSUMwX0FMSV9JUlEJOTYKKyNkZWZpbmUgSUlDMF9UQUNLSV9JUlEJOTcKKyNkZWZpbmUgSUlDMF9XQUlUSV9JUlEJOTgKKyNkZWZpbmUgSUlDMF9EVEVJX0lSUQk5OQorI2RlZmluZSBJSUMwX0lQUl9BRERSCUlOVENfSVBSSAorI2RlZmluZSBJSUMwX0lQUl9QT1MJMAorI2RlZmluZSBJSUMwX1BSSU9SSVRZCTMKKworLyogSUlDKDEpIChJSUMgQnVzIEludGVyZmFjZSkgKi8KKyNkZWZpbmUgSUlDMV9BTElfSVJRCTQ0CisjZGVmaW5lIElJQzFfVEFDS0lfSVJRCTQ1CisjZGVmaW5lIElJQzFfV0FJVElfSVJRCTQ2CisjZGVmaW5lIElJQzFfRFRFSV9JUlEJNDcKKyNkZWZpbmUgSUlDMV9JUFJfQUREUglJTlRDX0lQUkcKKyNkZWZpbmUgSUlDMV9JUFJfUE9TCTAKKyNkZWZpbmUgSUlDMV9QUklPUklUWQkzCisKKy8qIFNJTzAgKi8KKyNkZWZpbmUgU0lPMF9JUlEJODgKKyNkZWZpbmUgU0lPMF9JUFJfQUREUglJTlRDX0lQUkkKKyNkZWZpbmUgU0lPMF9JUFJfUE9TCTMKKyNkZWZpbmUgU0lPMF9QUklPUklUWQkzCisKKy8qIFNESEkgKi8KKyNkZWZpbmUgU0RISV9TREhJSTBfSVJRCTEwMAorI2RlZmluZSBTREhJX1NESElJMV9JUlEJMTAxCisjZGVmaW5lIFNESElfU0RISUkyX0lSUQkxMDIKKyNkZWZpbmUgU0RISV9TREhJSTNfSVJRCTEwMworI2RlZmluZSBTREhJX0lQUl9BRERSCUlOVENfSVBSSworI2RlZmluZSBTREhJX0lQUl9QT1MJMAorI2RlZmluZSBTREhJX1BSSU9SSVRZCTMKKworLyogU0lVIChTb3VuZCBJbnRlcmZhY2UgVW5pdCkgKi8KKyNkZWZpbmUgU0lVX0lSUQkJMTA4CisjZGVmaW5lIFNJVV9JUFJfQUREUglJTlRDX0lQUkoKKyNkZWZpbmUgU0lVX0lQUl9QT1MJMQorI2RlZmluZSBTSVVfUFJJT1JJVFkJMworCisKKy8qIE9OQ0hJUF9OUl9JUlFTICovCisjZGVmaW5lIE5SX0lSUVMgMTA5CisKKy8qIEluIGEgZ2VuZXJpYyBrZXJuZWwsIE5SX0lSUVMgaXMgYW4gdXBwZXIgYm91bmQsIGFuZCB3ZSBzaG91bGQgdXNlCisgKiBBQ1RVQUxfTlJfSVJRUyAod2hpY2ggdXNlcyB0aGUgbWFjaGluZSB2ZWN0b3IpIHRvIGdldCB0aGUgY29ycmVjdCB2YWx1ZS4KKyAqLworI2RlZmluZSBBQ1RVQUxfTlJfSVJRUyBOUl9JUlFTCisKKworZXh0ZXJuIHZvaWQgZGlzYWJsZV9pcnEodW5zaWduZWQgaW50KTsKK2V4dGVybiB2b2lkIGRpc2FibGVfaXJxX25vc3luYyh1bnNpZ25lZCBpbnQpOworZXh0ZXJuIHZvaWQgZW5hYmxlX2lycSh1bnNpZ25lZCBpbnQpOworCisvKgorICogU2ltcGxlIE1hc2sgUmVnaXN0ZXIgU3VwcG9ydAorICovCitleHRlcm4gdm9pZCBtYWtlX21hc2tyZWdfaXJxKHVuc2lnbmVkIGludCBpcnEpOworZXh0ZXJuIHVuc2lnbmVkIHNob3J0ICppcnFfbWFza19yZWdpc3RlcjsKKworLyoKKyAqIEZ1bmN0aW9uIGZvciAib24gY2hpcCBzdXBwb3J0IG1vZHVsZXMiLgorICovCitleHRlcm4gdm9pZCBtYWtlX2lwcl9pcnEodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IGFkZHIsCisJCQkgaW50IHBvcywgIGludCBwcmlvcml0eSk7CitleHRlcm4gdm9pZCBtYWtlX2ltYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKKworI2RlZmluZSBQT1JUX1BBQ1IJMHhBNDA1MDEwMFVMCisjZGVmaW5lIFBPUlRfUEJDUgkweEE0MDUwMTAyVUwKKyNkZWZpbmUgUE9SVF9QQ0NSCTB4QTQwNTAxMDRVTAorI2RlZmluZSBQT1JUX1BEQ1IJMHhBNDA1MDEwNlVMCisjZGVmaW5lIFBPUlRfUEVDUgkweEE0MDUwMTA4VUwKKyNkZWZpbmUgUE9SVF9QRkNSCTB4QTQwNTAxMEFVTAorI2RlZmluZSBQT1JUX1BHQ1IJMHhBNDA1MDEwQ1VMCisjZGVmaW5lIFBPUlRfUEhDUgkweEE0MDUwMTBFVUwKKyNkZWZpbmUgUE9SVF9QSkNSCTB4QTQwNTAxMTBVTAorI2RlZmluZSBQT1JUX1BLQ1IJMHhBNDA1MDExMlVMCisjZGVmaW5lIFBPUlRfUExDUgkweEE0MDUwMTE0VUwKKyNkZWZpbmUgUE9SVF9TQ1BDUgkweEE0MDUwMTE2VUwKKyNkZWZpbmUgUE9SVF9QTUNSCTB4QTQwNTAxMThVTAorI2RlZmluZSBQT1JUX1BOQ1IJMHhBNDA1MDExQVVMCisjZGVmaW5lIFBPUlRfUFFDUgkweEE0MDUwMTFDVUwKKyNkZWZpbmUgUE9SVF9QUkNSCTB4QTQwNTAxMUVVTAorI2RlZmluZSBQT1JUX1BUQ1IJMHhBNDA1MDE0Q1VMCisjZGVmaW5lIFBPUlRfUFVDUgkweEE0MDUwMTRFVUwKKyNkZWZpbmUgUE9SVF9QVkNSCTB4QTQwNTAxNTBVTAorCisjZGVmaW5lIFBPUlRfUFNFTEEJMHhBNDA1MDE0MFVMCisjZGVmaW5lIFBPUlRfUFNFTEIJMHhBNDA1MDE0MlVMCisjZGVmaW5lIFBPUlRfUFNFTEMJMHhBNDA1MDE0NFVMCisjZGVmaW5lIFBPUlRfUFNFTEUJMHhBNDA1MDE1OFVMCisKKyNkZWZpbmUgUE9SVF9ISVpDUkEJMHhBNDA1MDE0NlVMCisjZGVmaW5lIFBPUlRfSElaQ1JCCTB4QTQwNTAxNDhVTAorI2RlZmluZSBQT1JUX0RSVkNSCTB4QTQwNTAxNEFVTAorCisjZGVmaW5lIFBPUlRfUEFEUiAgCTB4QTQwNTAxMjBVTAorI2RlZmluZSBQT1JUX1BCRFIgIAkweEE0MDUwMTIyVUwKKyNkZWZpbmUgUE9SVF9QQ0RSICAJMHhBNDA1MDEyNFVMCisjZGVmaW5lIFBPUlRfUEREUiAgCTB4QTQwNTAxMjZVTAorI2RlZmluZSBQT1JUX1BFRFIgIAkweEE0MDUwMTI4VUwKKyNkZWZpbmUgUE9SVF9QRkRSICAJMHhBNDA1MDEyQVVMCisjZGVmaW5lIFBPUlRfUEdEUiAgCTB4QTQwNTAxMkNVTAorI2RlZmluZSBQT1JUX1BIRFIgIAkweEE0MDUwMTJFVUwKKyNkZWZpbmUgUE9SVF9QSkRSICAJMHhBNDA1MDEzMFVMCisjZGVmaW5lIFBPUlRfUEtEUiAgCTB4QTQwNTAxMzJVTAorI2RlZmluZSBQT1JUX1BMRFIgIAkweEE0MDUwMTM0VUwKKyNkZWZpbmUgUE9SVF9TQ1BEUiAgCTB4QTQwNTAxMzZVTAorI2RlZmluZSBQT1JUX1BNRFIgIAkweEE0MDUwMTM4VUwKKyNkZWZpbmUgUE9SVF9QTkRSICAJMHhBNDA1MDEzQVVMCisjZGVmaW5lIFBPUlRfUFFEUiAgCTB4QTQwNTAxM0NVTAorI2RlZmluZSBQT1JUX1BSRFIgIAkweEE0MDUwMTNFVUwKKyNkZWZpbmUgUE9SVF9QVERSICAJMHhBNDA1MDE2Q1VMCisjZGVmaW5lIFBPUlRfUFVEUiAgCTB4QTQwNTAxNkVVTAorI2RlZmluZSBQT1JUX1BWRFIgIAkweEE0MDUwMTcwVUwKKworI2RlZmluZSBJUlEwX0lSUQkzMgorI2RlZmluZSBJUlExX0lSUQkzMworI2RlZmluZSBJUlEyX0lSUQkzNAorI2RlZmluZSBJUlEzX0lSUQkzNQorI2RlZmluZSBJUlE0X0lSUQkzNgorI2RlZmluZSBJUlE1X0lSUQkzNworI2RlZmluZSBJUlE2X0lSUQkzOAorI2RlZmluZSBJUlE3X0lSUQkzOQorCisjZGVmaW5lIElOVFBSSTAwCTB4QTQxNDAwMTBVTAorCisjZGVmaW5lIElSUTBfSVBSX0FERFIJSU5UUFJJMDAKKyNkZWZpbmUgSVJRMV9JUFJfQUREUglJTlRQUkkwMAorI2RlZmluZSBJUlEyX0lQUl9BRERSCUlOVFBSSTAwCisjZGVmaW5lIElSUTNfSVBSX0FERFIJSU5UUFJJMDAKKyNkZWZpbmUgSVJRNF9JUFJfQUREUglJTlRQUkkwMAorI2RlZmluZSBJUlE1X0lQUl9BRERSCUlOVFBSSTAwCisjZGVmaW5lIElSUTZfSVBSX0FERFIJSU5UUFJJMDAKKyNkZWZpbmUgSVJRN19JUFJfQUREUglJTlRQUkkwMAorCisjZGVmaW5lIElSUTBfSVBSX1BPUwk3CisjZGVmaW5lIElSUTFfSVBSX1BPUwk2CisjZGVmaW5lIElSUTJfSVBSX1BPUwk1CisjZGVmaW5lIElSUTNfSVBSX1BPUwk0CisjZGVmaW5lIElSUTRfSVBSX1BPUwkzCisjZGVmaW5lIElSUTVfSVBSX1BPUwkyCisjZGVmaW5lIElSUTZfSVBSX1BPUwkxCisjZGVmaW5lIElSUTdfSVBSX1BPUwkwCisKKyNkZWZpbmUgSVJRMF9QUklPUklUWQkxCisjZGVmaW5lIElSUTFfUFJJT1JJVFkJMQorI2RlZmluZSBJUlEyX1BSSU9SSVRZCTEKKyNkZWZpbmUgSVJRM19QUklPUklUWQkxCisjZGVmaW5lIElSUTRfUFJJT1JJVFkJMQorI2RlZmluZSBJUlE1X1BSSU9SSVRZCTEKKyNkZWZpbmUgSVJRNl9QUklPUklUWQkxCisjZGVmaW5lIElSUTdfUFJJT1JJVFkJMQorCitleHRlcm4gaW50IHNobXNlX2lycV9kZW11eChpbnQgaXJxKTsKKyNkZWZpbmUgX19pcnFfZGVtdXgoaXJxKSBzaG1zZV9pcnFfZGVtdXgoaXJxKQorI2RlZmluZSBpcnFfZGVtdXgoaXJxKSBfX2lycV9kZW11eChpcnEpCisKKyNlbmRpZiAvKiBfX0FTTV9TSF9JUlFfU0g3MzE4MF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9pcnEuaCBiL2luY2x1ZGUvYXNtLXNoL2lycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMWU1MmUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9pcnEuaApAQCAtMCwwICsxLDU5OCBAQAorI2lmbmRlZiBfX0FTTV9TSF9JUlFfSAorI2RlZmluZSBfX0FTTV9TSF9JUlFfSAorCisvKgorICoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLXNoL2lycS5oCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5ICBOaWliZSBZdXRha2EgJiBUYWtlc2hpIFlhZWdhc2hpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgIEthenVtb3RvIEtvamltYQorICogQ29weXJpZ2h0IChDKSAyMDAzICBQYXVsIE11bmR0CisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4JCS8qIGZvciBwdF9yZWdzICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19TSF9IUDYwMCkgfHwgXAorICAgIGRlZmluZWQoQ09ORklHX1NIX1JUUzc3NTFSMkQpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19TSF9IUzc3NTFSVk9JUCkgfHwgXAorICAgIGRlZmluZWQoQ09ORklHX1NIX1NIMDMpCisjaW5jbHVkZSA8YXNtL21hY2gvaWRlLmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TSDMpCisjZGVmaW5lIElOVENfSVBSQQkweGZmZmZmZWUyVUwKKyNkZWZpbmUgSU5UQ19JUFJCCTB4ZmZmZmZlZTRVTAorI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NINCkKKyNkZWZpbmUgSU5UQ19JUFJBCTB4ZmZkMDAwMDRVTAorI2RlZmluZSBJTlRDX0lQUkIJMHhmZmQwMDAwOFVMCisjZGVmaW5lIElOVENfSVBSQwkweGZmZDAwMDBjVUwKKyNkZWZpbmUgSU5UQ19JUFJECTB4ZmZkMDAwMTBVTAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfSURFCisjIGlmbmRlZiBJUlFfQ0ZDQVJECisjICBkZWZpbmUgSVJRX0NGQ0FSRAkxNAorIyBlbmRpZgorIyBpZm5kZWYgSVJRX1BDTUNJQQorIyAgZGVmaW5lIElSUV9QQ01DSUEJMTUKKyMgZW5kaWYKKyNlbmRpZgorCisjZGVmaW5lIFRJTUVSX0lSUQkxNgorI2RlZmluZSBUSU1FUl9JUFJfQUREUglJTlRDX0lQUkEKKyNkZWZpbmUgVElNRVJfSVBSX1BPUwkgMworI2RlZmluZSBUSU1FUl9QUklPUklUWQkgMgorCisjZGVmaW5lIFRJTUVSMV9JUlEJMTcKKyNkZWZpbmUgVElNRVIxX0lQUl9BRERSCUlOVENfSVBSQQorI2RlZmluZSBUSU1FUjFfSVBSX1BPUwkgMgorI2RlZmluZSBUSU1FUjFfUFJJT1JJVFkJIDQKKworI2RlZmluZSBSVENfSVJRCQkyMgorI2RlZmluZSBSVENfSVBSX0FERFIJSU5UQ19JUFJBCisjZGVmaW5lIFJUQ19JUFJfUE9TCSAwCisjZGVmaW5lIFJUQ19QUklPUklUWQlUSU1FUl9QUklPUklUWQorCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NIMykKKyNkZWZpbmUgRE1URTBfSVJRCTQ4CisjZGVmaW5lIERNVEUxX0lSUQk0OQorI2RlZmluZSBETVRFMl9JUlEJNTAKKyNkZWZpbmUgRE1URTNfSVJRCTUxCisjZGVmaW5lIERNQV9JUFJfQUREUglJTlRDX0lQUkUKKyNkZWZpbmUgRE1BX0lQUl9QT1MJMworI2RlZmluZSBETUFfUFJJT1JJVFkJNworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzMwMCkKKy8qIFRNVTIgKi8KKyNkZWZpbmUgVElNRVIyX0lSUSAgICAgIDE4CisjZGVmaW5lIFRJTUVSMl9JUFJfQUREUiBJTlRDX0lQUkEKKyNkZWZpbmUgVElNRVIyX0lQUl9QT1MgICAxCisjZGVmaW5lIFRJTUVSMl9QUklPUklUWSAgMgorCisvKiBXRFQgKi8KKyNkZWZpbmUgV0RUX0lSUQkJMjcKKyNkZWZpbmUgV0RUX0lQUl9BRERSCUlOVENfSVBSQgorI2RlZmluZSBXRFRfSVBSX1BPUwkgMworI2RlZmluZSBXRFRfUFJJT1JJVFkJIDIKKworLyogU0lNIChTSU0gQ2FyZCBNb2R1bGUpICovCisjZGVmaW5lIFNJTV9FUklfSVJRCTIzCisjZGVmaW5lIFNJTV9SWElfSVJRCTI0CisjZGVmaW5lIFNJTV9UWElfSVJRCTI1CisjZGVmaW5lIFNJTV9URU5EX0lSUQkyNgorI2RlZmluZSBTSU1fSVBSX0FERFIJSU5UQ19JUFJCCisjZGVmaW5lIFNJTV9JUFJfUE9TCSAxCisjZGVmaW5lIFNJTV9QUklPUklUWQkgMgorCisvKiBWSU8gKFZpZGVvIEkvTykgKi8KKyNkZWZpbmUgVklPX0lSUQkJNTIKKyNkZWZpbmUgVklPX0lQUl9BRERSCUlOVENfSVBSRQorI2RlZmluZSBWSU9fSVBSX1BPUwkgMgorI2RlZmluZSBWSU9fUFJJT1JJVFkJIDIKKworLyogTUZJIChNdWx0aSBGdW5jdGlvbmFsIEludGVyZmFjZSkgKi8KKyNkZWZpbmUgTUZJX0lSUQkJNTYKKyNkZWZpbmUgTUZJX0lQUl9BRERSCUlOVENfSVBSRQorI2RlZmluZSBNRklfSVBSX1BPUwkgMQorI2RlZmluZSBNRklfUFJJT1JJVFkJIDIKKworLyogVlBVIChWaWRlbyBQcm9jZXNzaW5nIFVuaXQpICovCisjZGVmaW5lIFZQVV9JUlEJCTYwCisjZGVmaW5lIFZQVV9JUFJfQUREUglJTlRDX0lQUkUKKyNkZWZpbmUgVlBVX0lQUl9QT1MJIDAKKyNkZWZpbmUgVlBVX1BSSU9SSVRZCSAyCisKKy8qIEtFWSAoS2V5IFNjYW4gSW50ZXJmYWNlKSAqLworI2RlZmluZSBLRVlfSVJRCQk3OQorI2RlZmluZSBLRVlfSVBSX0FERFIJSU5UQ19JUFJGCisjZGVmaW5lIEtFWV9JUFJfUE9TCSAzCisjZGVmaW5lIEtFWV9QUklPUklUWQkgMgorCisvKiBDTVQgKENvbXBhcmUgTWF0Y2ggVGltZXIpICovCisjZGVmaW5lIENNVF9JUlEJCTEwNAorI2RlZmluZSBDTVRfSVBSX0FERFIJSU5UQ19JUFJGCisjZGVmaW5lIENNVF9JUFJfUE9TCSAwCisjZGVmaW5lIENNVF9QUklPUklUWQkgMgorCisvKiBETUFDKDEpICovCisjZGVmaW5lIERNVEUwX0lSUQk0OAorI2RlZmluZSBETVRFMV9JUlEJNDkKKyNkZWZpbmUgRE1URTJfSVJRCTUwCisjZGVmaW5lIERNVEUzX0lSUQk1MQorI2RlZmluZSBETUExX0lQUl9BRERSCUlOVENfSVBSRQorI2RlZmluZSBETUExX0lQUl9QT1MJMworI2RlZmluZSBETUExX1BSSU9SSVRZCTcKKworLyogRE1BQygyKSAqLworI2RlZmluZSBETVRFNF9JUlEJNzYKKyNkZWZpbmUgRE1URTVfSVJRCTc3CisjZGVmaW5lIERNQTJfSVBSX0FERFIJSU5UQ19JUFJGCisjZGVmaW5lIERNQTJfSVBSX1BPUwkyCisjZGVmaW5lIERNQTJfUFJJT1JJVFkJNworCisvKiBTSU9GMCAqLworI2RlZmluZSBTSU9GMF9JUlEJODQKKyNkZWZpbmUgU0lPRjBfSVBSX0FERFIJSU5UQ19JUFJICisjZGVmaW5lIFNJT0YwX0lQUl9QT1MJMworI2RlZmluZSBTSU9GMF9QUklPUklUWQkzCisKKy8qIEZMQ1RMIChGbGFzaCBNZW1vcnkgQ29udHJvbGxlcikgKi8KKyNkZWZpbmUgRkxTVEVfSVJRCTkyCisjZGVmaW5lIEZMVEVORF9JUlEJOTMKKyNkZWZpbmUgRkxUUlEwX0lSUQk5NAorI2RlZmluZSBGTFRSUTFfSVJRCTk1CisjZGVmaW5lIEZMQ1RMX0lQUl9BRERSCUlOVENfSVBSSAorI2RlZmluZSBGTENUTF9JUFJfUE9TCTEKKyNkZWZpbmUgRkxDVExfUFJJT1JJVFkJMworCisvKiBJSUMgKElJQyBCdXMgSW50ZXJmYWNlKSAqLworI2RlZmluZSBJSUNfQUxJX0lSUQk5NgorI2RlZmluZSBJSUNfVEFDS0lfSVJRCTk3CisjZGVmaW5lIElJQ19XQUlUSV9JUlEJOTgKKyNkZWZpbmUgSUlDX0RURUlfSVJRCTk5CisjZGVmaW5lIElJQ19JUFJfQUREUglJTlRDX0lQUkgKKyNkZWZpbmUgSUlDX0lQUl9QT1MJMAorI2RlZmluZSBJSUNfUFJJT1JJVFkJMworCisvKiBTSU8wICovCisjZGVmaW5lIFNJTzBfSVJRCTg4CisjZGVmaW5lIFNJTzBfSVBSX0FERFIJSU5UQ19JUFJJCisjZGVmaW5lIFNJTzBfSVBSX1BPUwkzCisjZGVmaW5lIFNJTzBfUFJJT1JJVFkJMworCisvKiBTSVUgKFNvdW5kIEludGVyZmFjZSBVbml0KSAqLworI2RlZmluZSBTSVVfSVJRCQkxMDgKKyNkZWZpbmUgU0lVX0lQUl9BRERSCUlOVENfSVBSSgorI2RlZmluZSBTSVVfSVBSX1BPUwkxCisjZGVmaW5lIFNJVV9QUklPUklUWQkzCisKKyNlbmRpZgorI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NINCkKKyNkZWZpbmUgRE1URTBfSVJRCTM0CisjZGVmaW5lIERNVEUxX0lSUQkzNQorI2RlZmluZSBETVRFMl9JUlEJMzYKKyNkZWZpbmUgRE1URTNfSVJRCTM3CisjZGVmaW5lIERNVEU0X0lSUQk0NAkvKiA3NzUxUiBvbmx5ICovCisjZGVmaW5lIERNVEU1X0lSUQk0NQkvKiA3NzUxUiBvbmx5ICovCisjZGVmaW5lIERNVEU2X0lSUQk0NgkvKiA3NzUxUiBvbmx5ICovCisjZGVmaW5lIERNVEU3X0lSUQk0NwkvKiA3NzUxUiBvbmx5ICovCisjZGVmaW5lIERNQUVfSVJRCTM4CisjZGVmaW5lIERNQV9JUFJfQUREUglJTlRDX0lQUkMKKyNkZWZpbmUgRE1BX0lQUl9QT1MJMgorI2RlZmluZSBETUFfUFJJT1JJVFkJNworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA3KSB8fCBkZWZpbmVkIChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA4KSB8fCBcCisgICAgZGVmaW5lZCAoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOSkgfHwgZGVmaW5lZCAoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MCkgfHwgXAorICAgIGRlZmluZWQgKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTEpCisjZGVmaW5lIFNDSV9FUklfSVJRCTIzCisjZGVmaW5lIFNDSV9SWElfSVJRCTI0CisjZGVmaW5lIFNDSV9UWElfSVJRCTI1CisjZGVmaW5lIFNDSV9JUFJfQUREUglJTlRDX0lQUkIKKyNkZWZpbmUgU0NJX0lQUl9QT1MJMQorI2RlZmluZSBTQ0lfUFJJT1JJVFkJMworI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDczMDApCisjZGVmaW5lIFNDSUYwX0lSUQk4MAorI2RlZmluZSBTQ0lGMF9JUFJfQUREUglJTlRDX0lQUkcKKyNkZWZpbmUgU0NJRjBfSVBSX1BPUwkzCisjZGVmaW5lIFNDSUYwX1BSSU9SSVRZCTMKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNSkgfHwgXAorICAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA3KSB8fCBcCisgICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDkpCisjZGVmaW5lIFNDSUZfRVJJX0lSUQk1NgorI2RlZmluZSBTQ0lGX1JYSV9JUlEJNTcKKyNkZWZpbmUgU0NJRl9CUklfSVJRCTU4CisjZGVmaW5lIFNDSUZfVFhJX0lSUQk1OQorI2RlZmluZSBTQ0lGX0lQUl9BRERSCUlOVENfSVBSRQorI2RlZmluZSBTQ0lGX0lQUl9QT1MJMQorI2RlZmluZSBTQ0lGX1BSSU9SSVRZCTMKKworI2RlZmluZSBJUkRBX0VSSV9JUlEJNTIKKyNkZWZpbmUgSVJEQV9SWElfSVJRCTUzCisjZGVmaW5lIElSREFfQlJJX0lSUQk1NAorI2RlZmluZSBJUkRBX1RYSV9JUlEJNTUKKyNkZWZpbmUgSVJEQV9JUFJfQUREUglJTlRDX0lQUkUKKyNkZWZpbmUgSVJEQV9JUFJfUE9TCTIKKyNkZWZpbmUgSVJEQV9QUklPUklUWQkzCisjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTApIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MSkgfHwgXAorICAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU1Q0MFNUQjEpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIpCisjZGVmaW5lIFNDSUZfRVJJX0lSUQk0MAorI2RlZmluZSBTQ0lGX1JYSV9JUlEJNDEKKyNkZWZpbmUgU0NJRl9CUklfSVJRCTQyCisjZGVmaW5lIFNDSUZfVFhJX0lSUQk0MworI2RlZmluZSBTQ0lGX0lQUl9BRERSCUlOVENfSVBSQworI2RlZmluZSBTQ0lGX0lQUl9QT1MJMQorI2RlZmluZSBTQ0lGX1BSSU9SSVRZCTMKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TVDQwU1RCMSkKKyNkZWZpbmUgU0NJRjFfRVJJX0lSUQkyMworI2RlZmluZSBTQ0lGMV9SWElfSVJRCTI0CisjZGVmaW5lIFNDSUYxX0JSSV9JUlEJMjUKKyNkZWZpbmUgU0NJRjFfVFhJX0lSUQkyNgorI2RlZmluZSBTQ0lGMV9JUFJfQUREUglJTlRDX0lQUkIKKyNkZWZpbmUgU0NJRjFfSVBSX1BPUwkxCisjZGVmaW5lIFNDSUYxX1BSSU9SSVRZCTMKKyNlbmRpZgorI2VuZGlmCisKKy8qIE5SX0lSUVMgaXMgbWFkZSBmcm9tIHRocmVlIGNvbXBvbmVudHM6CisgKiAgIDEuIE9OQ0hJUF9OUl9JUlFTIC0gbnVtYmVyIG9mIElSTFMgKyBvbi1jaGlwIHBlcmlwaGVyaWFsIG1vZHVsZXMKKyAqICAgMi4gUElOVF9OUl9JUlFTICAgLSBudW1iZXIgb2YgUElOVCBpbnRlcnJ1cHRzCisgKiAgIDMuIE9GRkNISVBfTlJfSVJRUyAtIG51bWJlIG9mIElSUXMgZnJvbSBvZmYtY2hpcCBwZXJpcGhlcmlhbCBtb2R1bGVzCisgKi8KKworLyogMS4gT05DSElQX05SX0lSUVMgKi8KKyNpZmRlZiBDT05GSUdfU0hfR0VORVJJQworIyBkZWZpbmUgT05DSElQX05SX0lSUVMgMTQ0CisjZWxzZQorIyBpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc2MDQpCisjICBkZWZpbmUgT05DSElQX05SX0lSUVMgMjQJLy8gQWN0dWFsbHkgMjEKKyMgZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDcpCisjICBkZWZpbmUgT05DSElQX05SX0lSUVMgNjQKKyMgIGRlZmluZSBQSU5UX05SX0lSUVMgICAxNgorIyBlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOCkKKyMgIGRlZmluZSBPTkNISVBfTlJfSVJRUyAzMgorIyBlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOSkgfHwgXAorICAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNSkKKyMgIGRlZmluZSBPTkNISVBfTlJfSVJRUyA2NAkvLyBBY3R1YWxseSA2MQorIyAgZGVmaW5lIFBJTlRfTlJfSVJRUyAgIDE2CisjIGVsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwKQorIyAgZGVmaW5lIE9OQ0hJUF9OUl9JUlFTIDQ4CS8vIEFjdHVhbGx5IDQ0CisjIGVsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUxKQorIyAgZGVmaW5lIE9OQ0hJUF9OUl9JUlFTIDcyCisjIGVsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYwKQorIyAgZGVmaW5lIE9OQ0hJUF9OUl9JUlFTIDExMAorIyBlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIpCisjICBkZWZpbmUgT05DSElQX05SX0lSUVMgNzIKKyMgZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TVDQwU1RCMSkKKyMgIGRlZmluZSBPTkNISVBfTlJfSVJRUyAxNDQKKyMgZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDczMDApCisjICBkZWZpbmUgT05DSElQX05SX0lSUVMgMTA5CisjIGVuZGlmCisjZW5kaWYKKworLyogMi4gUElOVF9OUl9JUlFTICovCisjaWZkZWYgQ09ORklHX1NIX0dFTkVSSUMKKyMgZGVmaW5lIFBJTlRfTlJfSVJRUyAxNgorI2Vsc2UKKyMgaWZuZGVmIFBJTlRfTlJfSVJRUworIyAgZGVmaW5lIFBJTlRfTlJfSVJRUyAwCisjIGVuZGlmCisjZW5kaWYKKworI2lmIFBJTlRfTlJfSVJRUyA+IDAKKyMgZGVmaW5lIFBJTlRfSVJRX0JBU0UgIE9OQ0hJUF9OUl9JUlFTCisjZW5kaWYKKworLyogMy4gT0ZGQ0hJUF9OUl9JUlFTICovCisjaWZkZWYgQ09ORklHX1NIX0dFTkVSSUMKKyMgZGVmaW5lIE9GRkNISVBfTlJfSVJRUyAxNgorI2Vsc2UKKyMgaWYgZGVmaW5lZChDT05GSUdfSEQ2NDQ2MSkKKyMgIGRlZmluZSBPRkZDSElQX05SX0lSUVMgMTgKKyMgZWxpZiBkZWZpbmVkIChDT05GSUdfU0hfQklHU1VSKSAvKiBtdXN0IGJlIGJlZm9yZSBDT05GSUdfSEQ2NDQ2NSAqLworIyAgZGVmaW5lIE9GRkNISVBfTlJfSVJRUyA0OAorIyBlbGlmIGRlZmluZWQoQ09ORklHX0hENjQ0NjUpCisjICBkZWZpbmUgT0ZGQ0hJUF9OUl9JUlFTIDE2CisjIGVsaWYgZGVmaW5lZCAoQ09ORklHX1NIX0VDMzEwNCkKKyMgIGRlZmluZSBPRkZDSElQX05SX0lSUVMgMTYKKyMgZWxpZiBkZWZpbmVkIChDT05GSUdfU0hfRFJFQU1DQVNUKQorIyAgZGVmaW5lIE9GRkNISVBfTlJfSVJRUyA5NgorIyBlbHNlCisjICBkZWZpbmUgT0ZGQ0hJUF9OUl9JUlFTIDAKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgT0ZGQ0hJUF9OUl9JUlFTID4gMAorIyBkZWZpbmUgT0ZGQ0hJUF9JUlFfQkFTRSAoT05DSElQX05SX0lSUVMgKyBQSU5UX05SX0lSUVMpCisjZW5kaWYKKworLyogTlJfSVJRUy4gMSsyKzMgKi8KKyNkZWZpbmUgTlJfSVJRUyAoT05DSElQX05SX0lSUVMgKyBQSU5UX05SX0lSUVMgKyBPRkZDSElQX05SX0lSUVMpCisKKy8qIEluIGEgZ2VuZXJpYyBrZXJuZWwsIE5SX0lSUVMgaXMgYW4gdXBwZXIgYm91bmQsIGFuZCB3ZSBzaG91bGQgdXNlCisgKiBBQ1RVQUxfTlJfSVJRUyAod2hpY2ggdXNlcyB0aGUgbWFjaGluZSB2ZWN0b3IpIHRvIGdldCB0aGUgY29ycmVjdCB2YWx1ZS4KKyAqLworI2lmZGVmIENPTkZJR19TSF9HRU5FUklDCisjIGRlZmluZSBBQ1RVQUxfTlJfSVJRUyAoc2hfbXYubXZfbnJfaXJxcykKKyNlbHNlCisjIGRlZmluZSBBQ1RVQUxfTlJfSVJRUyBOUl9JUlFTCisjZW5kaWYKKworCitleHRlcm4gdm9pZCBkaXNhYmxlX2lycSh1bnNpZ25lZCBpbnQpOworZXh0ZXJuIHZvaWQgZGlzYWJsZV9pcnFfbm9zeW5jKHVuc2lnbmVkIGludCk7CitleHRlcm4gdm9pZCBlbmFibGVfaXJxKHVuc2lnbmVkIGludCk7CisKKy8qCisgKiBTaW1wbGUgTWFzayBSZWdpc3RlciBTdXBwb3J0CisgKi8KK2V4dGVybiB2b2lkIG1ha2VfbWFza3JlZ19pcnEodW5zaWduZWQgaW50IGlycSk7CitleHRlcm4gdW5zaWduZWQgc2hvcnQgKmlycV9tYXNrX3JlZ2lzdGVyOworCisvKgorICogRnVuY3Rpb24gZm9yICJvbiBjaGlwIHN1cHBvcnQgbW9kdWxlcyIuCisgKi8KK2V4dGVybiB2b2lkIG1ha2VfaXByX2lycSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgYWRkciwKKwkJCSBpbnQgcG9zLCAgaW50IHByaW9yaXR5KTsKK2V4dGVybiB2b2lkIG1ha2VfaW1hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpOworCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzAwKQorI3VuZGVmIElOVENfSVBSQQorI3VuZGVmIElOVENfSVBSQgorI2RlZmluZSBJTlRDX0lQUkEgIAkweEE0MTRGRUUyVUwKKyNkZWZpbmUgSU5UQ19JUFJCICAJMHhBNDE0RkVFNFVMCisjZGVmaW5lIElOVENfSVBSQyAgCTB4QTQxNDAwMTZVTAorI2RlZmluZSBJTlRDX0lQUkQgIAkweEE0MTQwMDE4VUwKKyNkZWZpbmUgSU5UQ19JUFJFICAJMHhBNDE0MDAxQVVMCisjZGVmaW5lIElOVENfSVBSRiAgCTB4QTQwODAwMDBVTAorI2RlZmluZSBJTlRDX0lQUkcgIAkweEE0MDgwMDAyVUwKKyNkZWZpbmUgSU5UQ19JUFJIICAJMHhBNDA4MDAwNFVMCisjZGVmaW5lIElOVENfSVBSSSAgCTB4QTQwODAwMDZVTAorI2RlZmluZSBJTlRDX0lQUkogIAkweEE0MDgwMDA4VUwKKworI2RlZmluZSBJTlRDX0lNUjAJMHhBNDA4MDA0MFVMCisjZGVmaW5lIElOVENfSU1SMQkweEE0MDgwMDQyVUwKKyNkZWZpbmUgSU5UQ19JTVIyCTB4QTQwODAwNDRVTAorI2RlZmluZSBJTlRDX0lNUjMJMHhBNDA4MDA0NlVMCisjZGVmaW5lIElOVENfSU1SNAkweEE0MDgwMDQ4VUwKKyNkZWZpbmUgSU5UQ19JTVI1CTB4QTQwODAwNEFVTAorI2RlZmluZSBJTlRDX0lNUjYJMHhBNDA4MDA0Q1VMCisjZGVmaW5lIElOVENfSU1SNwkweEE0MDgwMDRFVUwKKyNkZWZpbmUgSU5UQ19JTVI4CTB4QTQwODAwNTBVTAorI2RlZmluZSBJTlRDX0lNUjkJMHhBNDA4MDA1MlVMCisjZGVmaW5lIElOVENfSU1SMTAJMHhBNDA4MDA1NFVMCisKKyNkZWZpbmUgSU5UQ19JTUNSMAkweEE0MDgwMDYwVUwKKyNkZWZpbmUgSU5UQ19JTUNSMQkweEE0MDgwMDYyVUwKKyNkZWZpbmUgSU5UQ19JTUNSMgkweEE0MDgwMDY0VUwKKyNkZWZpbmUgSU5UQ19JTUNSMwkweEE0MDgwMDY2VUwKKyNkZWZpbmUgSU5UQ19JTUNSNAkweEE0MDgwMDY4VUwKKyNkZWZpbmUgSU5UQ19JTUNSNQkweEE0MDgwMDZBVUwKKyNkZWZpbmUgSU5UQ19JTUNSNgkweEE0MDgwMDZDVUwKKyNkZWZpbmUgSU5UQ19JTUNSNwkweEE0MDgwMDZFVUwKKyNkZWZpbmUgSU5UQ19JTUNSOAkweEE0MDgwMDcwVUwKKyNkZWZpbmUgSU5UQ19JTUNSOQkweEE0MDgwMDcyVUwKKyNkZWZpbmUgSU5UQ19JTUNSMTAJMHhBNDA4MDA3NFVMCisKKyNkZWZpbmUgSU5UQ19JQ1IwCTB4QTQxNEZFRTBVTAorI2RlZmluZSBJTlRDX0lDUjEJMHhBNDE0MDAxMFVMCisKKyNkZWZpbmUgSU5UQ19JUlIwCTB4QTQxNDAwMDRVTAorCisjZGVmaW5lIFBPUlRfUEFDUgkweEE0MDUwMTAwVUwKKyNkZWZpbmUgUE9SVF9QQkNSCTB4QTQwNTAxMDJVTAorI2RlZmluZSBQT1JUX1BDQ1IJMHhBNDA1MDEwNFVMCisjZGVmaW5lIFBPUlRfUERDUgkweEE0MDUwMTA2VUwKKyNkZWZpbmUgUE9SVF9QRUNSCTB4QTQwNTAxMDhVTAorI2RlZmluZSBQT1JUX1BGQ1IJMHhBNDA1MDEwQVVMCisjZGVmaW5lIFBPUlRfUEdDUgkweEE0MDUwMTBDVUwKKyNkZWZpbmUgUE9SVF9QSENSCTB4QTQwNTAxMEVVTAorI2RlZmluZSBQT1JUX1BKQ1IJMHhBNDA1MDExMFVMCisjZGVmaW5lIFBPUlRfUEtDUgkweEE0MDUwMTEyVUwKKyNkZWZpbmUgUE9SVF9QTENSCTB4QTQwNTAxMTRVTAorI2RlZmluZSBQT1JUX1NDUENSCTB4QTQwNTAxMTZVTAorI2RlZmluZSBQT1JUX1BNQ1IJMHhBNDA1MDExOFVMCisjZGVmaW5lIFBPUlRfUE5DUgkweEE0MDUwMTFBVUwKKyNkZWZpbmUgUE9SVF9QUUNSCTB4QTQwNTAxMUNVTAorCisjZGVmaW5lIFBPUlRfUFNFTEEJMHhBNDA1MDE0MFVMCisjZGVmaW5lIFBPUlRfUFNFTEIJMHhBNDA1MDE0MlVMCisjZGVmaW5lIFBPUlRfUFNFTEMJMHhBNDA1MDE0NFVMCisKKyNkZWZpbmUgUE9SVF9ISVpDUkEJMHhBNDA1MDE0NlVMCisjZGVmaW5lIFBPUlRfSElaQ1JCCTB4QTQwNTAxNDhVTAorI2RlZmluZSBQT1JUX0RSVkNSCTB4QTQwNTAxNTBVTAorCisjZGVmaW5lIFBPUlRfUEFEUiAgCTB4QTQwNTAxMjBVTAorI2RlZmluZSBQT1JUX1BCRFIgIAkweEE0MDUwMTIyVUwKKyNkZWZpbmUgUE9SVF9QQ0RSICAJMHhBNDA1MDEyNFVMCisjZGVmaW5lIFBPUlRfUEREUiAgCTB4QTQwNTAxMjZVTAorI2RlZmluZSBQT1JUX1BFRFIgIAkweEE0MDUwMTI4VUwKKyNkZWZpbmUgUE9SVF9QRkRSICAJMHhBNDA1MDEyQVVMCisjZGVmaW5lIFBPUlRfUEdEUiAgCTB4QTQwNTAxMkNVTAorI2RlZmluZSBQT1JUX1BIRFIgIAkweEE0MDUwMTJFVUwKKyNkZWZpbmUgUE9SVF9QSkRSICAJMHhBNDA1MDEzMFVMCisjZGVmaW5lIFBPUlRfUEtEUiAgCTB4QTQwNTAxMzJVTAorI2RlZmluZSBQT1JUX1BMRFIgIAkweEE0MDUwMTM0VUwKKyNkZWZpbmUgUE9SVF9TQ1BEUiAgCTB4QTQwNTAxMzZVTAorI2RlZmluZSBQT1JUX1BNRFIgIAkweEE0MDUwMTM4VUwKKyNkZWZpbmUgUE9SVF9QTkRSICAJMHhBNDA1MDEzQVVMCisjZGVmaW5lIFBPUlRfUFFEUiAgCTB4QTQwNTAxM0NVTAorCisjZGVmaW5lIElSUTBfSVJRCTMyCisjZGVmaW5lIElSUTFfSVJRCTMzCisjZGVmaW5lIElSUTJfSVJRCTM0CisjZGVmaW5lIElSUTNfSVJRCTM1CisjZGVmaW5lIElSUTRfSVJRCTM2CisjZGVmaW5lIElSUTVfSVJRCTM3CisKKyNkZWZpbmUgSVJRMF9JUFJfQUREUglJTlRDX0lQUkMKKyNkZWZpbmUgSVJRMV9JUFJfQUREUglJTlRDX0lQUkMKKyNkZWZpbmUgSVJRMl9JUFJfQUREUglJTlRDX0lQUkMKKyNkZWZpbmUgSVJRM19JUFJfQUREUglJTlRDX0lQUkMKKyNkZWZpbmUgSVJRNF9JUFJfQUREUglJTlRDX0lQUkQKKyNkZWZpbmUgSVJRNV9JUFJfQUREUglJTlRDX0lQUkQKKworI2RlZmluZSBJUlEwX0lQUl9QT1MJMAorI2RlZmluZSBJUlExX0lQUl9QT1MJMQorI2RlZmluZSBJUlEyX0lQUl9QT1MJMgorI2RlZmluZSBJUlEzX0lQUl9QT1MJMworI2RlZmluZSBJUlE0X0lQUl9QT1MJMAorI2RlZmluZSBJUlE1X0lQUl9QT1MJMQorCisjZGVmaW5lIElSUTBfUFJJT1JJVFkJMQorI2RlZmluZSBJUlExX1BSSU9SSVRZCTEKKyNkZWZpbmUgSVJRMl9QUklPUklUWQkxCisjZGVmaW5lIElSUTNfUFJJT1JJVFkJMQorI2RlZmluZSBJUlE0X1BSSU9SSVRZCTEKKyNkZWZpbmUgSVJRNV9QUklPUklUWQkxCisKK2V4dGVybiBpbnQgaXByX2lycV9kZW11eChpbnQgaXJxKTsKKyNkZWZpbmUgX19pcnFfZGVtdXgoaXJxKSBpcHJfaXJxX2RlbXV4KGlycSkKKworI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NjA0KQorI2RlZmluZSBJTlRDX0lQUkEJMHhmZmZmZmVlMlVMCisjZGVmaW5lIElOVENfSVBSQgkweGZmZmZmZTYwVUwKKworI2RlZmluZSBJTlRDX1ZDUkEJMHhmZmZmZmU2MlVMCisjZGVmaW5lIElOVENfVkNSQgkweGZmZmZmZTY0VUwKKyNkZWZpbmUgSU5UQ19WQ1JDCTB4ZmZmZmZlNjZVTAorI2RlZmluZSBJTlRDX1ZDUkQJMHhmZmZmZmU2OFVMCisKKyNkZWZpbmUgSU5UQ19WQ1JXRFQJMHhmZmZmZmVlNFVMCisjZGVmaW5lIElOVENfVkNSRElWCTB4ZmZmZmZmMGNVTAorI2RlZmluZSBJTlRDX1ZDUkRNQTAJMHhmZmZmZmZhMFVMCisjZGVmaW5lIElOVENfVkNSRE1BMQkweGZmZmZmZmE4VUwKKworI2RlZmluZSBJTlRDX0lDUgkweGZmZmZmZWUwVUwKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNSkgfHwgXAorICAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA3KSB8fCBcCisgICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDkpCisjZGVmaW5lIElOVENfSVJSMAkweGE0MDAwMDA0VUwKKyNkZWZpbmUgSU5UQ19JUlIxCTB4YTQwMDAwMDZVTAorI2RlZmluZSBJTlRDX0lSUjIJMHhhNDAwMDAwOFVMCisKKyNkZWZpbmUgSU5UQ19JQ1IwCTB4ZmZmZmZlZTBVTAorI2RlZmluZSBJTlRDX0lDUjEJMHhhNDAwMDAxMFVMCisjZGVmaW5lIElOVENfSUNSMgkweGE0MDAwMDEyVUwKKyNkZWZpbmUgSU5UQ19JTlRFUgkweGE0MDAwMDE0VUwKKworI2RlZmluZSBJTlRDX0lQUkMJMHhhNDAwMDAxNlVMCisjZGVmaW5lIElOVENfSVBSRAkweGE0MDAwMDE4VUwKKyNkZWZpbmUgSU5UQ19JUFJFCTB4YTQwMDAwMWFVTAorI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNykKKyNkZWZpbmUgSU5UQ19JUFJGCTB4YTQwMDAwMWNVTAorI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA1KQorI2RlZmluZSBJTlRDX0lQUkYJMHhhNDA4MDAwMFVMCisjZGVmaW5lIElOVENfSVBSRwkweGE0MDgwMDAyVUwKKyNkZWZpbmUgSU5UQ19JUFJICTB4YTQwODAwMDRVTAorI2VuZGlmCisKKyNkZWZpbmUgUE9SVF9QQUNSCTB4YTQwMDAxMDBVTAorI2RlZmluZSBQT1JUX1BCQ1IJMHhhNDAwMDEwMlVMCisjZGVmaW5lIFBPUlRfUENDUgkweGE0MDAwMTA0VUwKKyNkZWZpbmUgUE9SVF9QRkNSCTB4YTQwMDAxMGFVTAorI2RlZmluZSBQT1JUX1BBRFIgIAkweGE0MDAwMTIwVUwKKyNkZWZpbmUgUE9SVF9QQkRSICAJMHhhNDAwMDEyMlVMCisjZGVmaW5lIFBPUlRfUENEUiAgCTB4YTQwMDAxMjRVTAorI2RlZmluZSBQT1JUX1BGRFIgIAkweGE0MDAwMTJhVUwKKworI2RlZmluZSBJUlEwX0lSUQkzMgorI2RlZmluZSBJUlExX0lSUQkzMworI2RlZmluZSBJUlEyX0lSUQkzNAorI2RlZmluZSBJUlEzX0lSUQkzNQorI2RlZmluZSBJUlE0X0lSUQkzNgorI2RlZmluZSBJUlE1X0lSUQkzNworCisjZGVmaW5lIElSUTBfSVBSX0FERFIJSU5UQ19JUFJDCisjZGVmaW5lIElSUTFfSVBSX0FERFIJSU5UQ19JUFJDCisjZGVmaW5lIElSUTJfSVBSX0FERFIJSU5UQ19JUFJDCisjZGVmaW5lIElSUTNfSVBSX0FERFIJSU5UQ19JUFJDCisjZGVmaW5lIElSUTRfSVBSX0FERFIJSU5UQ19JUFJECisjZGVmaW5lIElSUTVfSVBSX0FERFIJSU5UQ19JUFJECisKKyNkZWZpbmUgSVJRMF9JUFJfUE9TCTAKKyNkZWZpbmUgSVJRMV9JUFJfUE9TCTEKKyNkZWZpbmUgSVJRMl9JUFJfUE9TCTIKKyNkZWZpbmUgSVJRM19JUFJfUE9TCTMKKyNkZWZpbmUgSVJRNF9JUFJfUE9TCTAKKyNkZWZpbmUgSVJRNV9JUFJfUE9TCTEKKworI2RlZmluZSBJUlEwX1BSSU9SSVRZCTEKKyNkZWZpbmUgSVJRMV9QUklPUklUWQkxCisjZGVmaW5lIElSUTJfUFJJT1JJVFkJMQorI2RlZmluZSBJUlEzX1BSSU9SSVRZCTEKKyNkZWZpbmUgSVJRNF9QUklPUklUWQkxCisjZGVmaW5lIElSUTVfUFJJT1JJVFkJMQorCisjZGVmaW5lIFBJTlQwX0lSUQk0MAorI2RlZmluZSBQSU5UOF9JUlEJNDEKKworI2RlZmluZSBQSU5UMF9JUFJfQUREUglJTlRDX0lQUkQKKyNkZWZpbmUgUElOVDhfSVBSX0FERFIJSU5UQ19JUFJECisKKyNkZWZpbmUgUElOVDBfSVBSX1BPUwkzCisjZGVmaW5lIFBJTlQ4X0lQUl9QT1MJMgorI2RlZmluZSBQSU5UMF9QUklPUklUWQkyCisjZGVmaW5lIFBJTlQ4X1BSSU9SSVRZCTIKKworZXh0ZXJuIGludCBpcHJfaXJxX2RlbXV4KGludCBpcnEpOworI2RlZmluZSBfX2lycV9kZW11eChpcnEpIGlwcl9pcnFfZGVtdXgoaXJxKQorCisjZWxzZQorI2RlZmluZSBfX2lycV9kZW11eChpcnEpIGlycQorI2VuZGlmIC8qIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDcgfHwgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOSAqLworCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTEpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TVDQwU1RCMSkgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMikKKyNkZWZpbmUgSU5UQ19JQ1IgICAgICAgIDB4ZmZkMDAwMDAKKyNkZWZpbmUgSU5UQ19JQ1JfTk1JTAkoMTw8MTUpCisjZGVmaW5lIElOVENfSUNSX01BSQkoMTw8MTQpCisjZGVmaW5lIElOVENfSUNSX05NSUIJKDE8PDkpCisjZGVmaW5lIElOVENfSUNSX05NSUUJKDE8PDgpCisjZGVmaW5lIElOVENfSUNSX0lSTE0JKDE8PDcpCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUFVfU1VCVFlQRV9TVDQwU1RCMQorCisjZGVmaW5lIElOVEMyX0ZJUlNUX0lSUSA2NAorI2RlZmluZSBOUl9JTlRDMl9JUlFTIDI1CisKKyNkZWZpbmUgSU5UQzJfQkFTRQkweGZlMDgwMDAwCisjZGVmaW5lIElOVEMyX0lOVEMyTU9ERQkoSU5UQzJfQkFTRSsweDgwKQorCisjZGVmaW5lIElOVEMyX0lOVFBSSV9PRkZTRVQJMHgwMAorI2RlZmluZSBJTlRDMl9JTlRSRVFfT0ZGU0VUCTB4MjAKKyNkZWZpbmUgSU5UQzJfSU5UTVNLX09GRlNFVAkweDQwCisjZGVmaW5lIElOVEMyX0lOVE1TS0NMUl9PRkZTRVQJMHg2MAorCit2b2lkIG1ha2VfaW50YzJfaXJxKHVuc2lnbmVkIGludCBpcnEsCisJCSAgICB1bnNpZ25lZCBpbnQgaXByX29mZnNldCwgdW5zaWduZWQgaW50IGlwcl9zaGlmdCwKKwkJICAgIHVuc2lnbmVkIGludCBtc2tfb2Zmc2V0LCB1bnNpZ25lZCBpbnQgbXNrX3NoaWZ0LAorCQkgICAgdW5zaWduZWQgaW50IHByaW9yaXR5KTsKK3ZvaWQgaW5pdF9JUlFfaW50YzIodm9pZCk7Cit2b2lkIGludGMyX2FkZF9jbGVhcl9pcnEoaW50IGlycSwgaW50ICgqZm4pKGludCkpOworCisjZW5kaWYJLyogQ09ORklHX0NQVV9TVUJUWVBFX1NUNDBTVEIxICovCisKK3N0YXRpYyBpbmxpbmUgaW50IGdlbmVyaWNfaXJxX2RlbXV4KGludCBpcnEpCit7CisJcmV0dXJuIGlycTsKK30KKworI2RlZmluZSBpcnFfY2Fub25pY2FsaXplKGlycSkJKGlycSkKKyNkZWZpbmUgaXJxX2RlbXV4KGlycSkJCV9faXJxX2RlbXV4KHNoX212Lm12X2lycV9kZW11eChpcnEpKQorCitzdHJ1Y3QgaXJxYWN0aW9uOworc3RydWN0IHB0X3JlZ3M7CitpbnQgaGFuZGxlX0lSUV9ldmVudCh1bnNpZ25lZCBpbnQsIHN0cnVjdCBwdF9yZWdzICosIHN0cnVjdCBpcnFhY3Rpb24gKik7CisKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDczMTgwKQorI2luY2x1ZGUgPGFzbS9pcnEtc2g3MzE4MC5oPgorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0FTTV9TSF9JUlFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gva2V5Ym9hcmQuaCBiL2luY2x1ZGUvYXNtLXNoL2tleWJvYXJkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTEwM2RmMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL2tleWJvYXJkLmgKQEAgLTAsMCArMSwxNCBAQAorI2lmbmRlZglfX0FTTV9TSF9LRVlCT0FSRF9ICisjZGVmaW5lCV9fQVNNX1NIX0tFWUJPQVJEX0gKKy8qCisgKgkkSWQ6IGtleWJvYXJkLmgsdiAxLjEuMS4xIDIwMDEvMTAvMTUgMjA6NDU6MDkgbXJicm93biBFeHAgJAorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+CisKKyNpZmRlZiBDT05GSUdfU0hfTVBDMTIxMQorI2luY2x1ZGUgPGFzbS9tcGMxMjExL2tleWJvYXJkLW1wYzEyMTEuaD4KKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9rZ2RiLmggYi9pbmNsdWRlL2FzbS1zaC9rZ2RiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY1M2ZmYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL2tnZGIuaApAQCAtMCwwICsxLDEzMSBAQAorLyoKKyAqIE1heSBiZSBjb3BpZWQgb3IgbW9kaWZpZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgbGludXgvQ09QWUlORyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAqCisgKiBCYXNlZCBvbiBvcmlnaW5hbCBjb2RlIGJ5IEdsZW5uIEVuZ2VsLCBKaW0gS2luZ2RvbiwKKyAqIERhdmlkIEdyb3RoZSA8ZGF2ZUBnY29tLmNvbT4sIFRpZ3JhbiBBaXZhemlhbiwgPHRpZ3JhbkBzY28uY29tPiBhbmQKKyAqIEFtaXQgUy4gS2FsZSA8YWthbGVAdmVyaXRhcy5jb20+CisgKiAKKyAqIFN1cGVyLUggcG9ydCBiYXNlZCBvbiBzaC1zdHViLmMgKEJlbiBMZWUgYW5kIFN0ZXZlIENoYW1iZXJsYWluKSBieQorICogSGVucnkgQmVsbCA8aGVucnkuYmVsbEBzdC5jb20+CisgKiAKKyAqIEhlYWRlciBmaWxlIGZvciBsb3ctbGV2ZWwgc3VwcG9ydCBmb3IgcmVtb3RlIGRlYnVnIHVzaW5nIEdEQi4gCisgKgorICovCisKKyNpZm5kZWYgX19LR0RCX0gKKyNkZWZpbmUgX19LR0RCX0gKKworI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKworc3RydWN0IGNvbnNvbGU7CisKKy8qIFNhbWUgYXMgcHRfcmVncyBidXQgaGFzIHZiciBpbiBwbGFjZSBvZiBzeXNjYWxsX25yICovCitzdHJ1Y3Qga2dkYl9yZWdzIHsKKyAgICAgICAgdW5zaWduZWQgbG9uZyByZWdzWzE2XTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBwYzsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBwcjsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBzcjsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBnYnI7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgbWFjaDsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBtYWNsOworICAgICAgICB1bnNpZ25lZCBsb25nIHZicjsKK307CisKKy8qIFN0YXRlIGluZm8gKi8KK2V4dGVybiBjaGFyIGtnZGJfaW5fZ2RiX21vZGU7CitleHRlcm4gaW50IGtnZGJfZG9uZV9pbml0OworZXh0ZXJuIGludCBrZ2RiX2VuYWJsZWQ7CitleHRlcm4gaW50IGtnZGJfbm9mYXVsdDsJLyogSWdub3JlIGJ1cyBlcnJvcnMgKGluIGdkYiBtZW0gYWNjZXNzKSAqLworZXh0ZXJuIGludCBrZ2RiX2hhbHQ7CQkvKiBFeGVjdXRlIGluaXRpYWwgYnJlYWtwb2ludCBhdCBzdGFydHVwICovCitleHRlcm4gY2hhciBpbl9ubWk7CQkvKiBEZWJvdW5jZSBmbGFnIHRvIHByZXZlbnQgTk1JIHJlZW50cnkqLworCisvKiBTQ0kgKi8KK2V4dGVybiBpbnQga2dkYl9wb3J0bnVtOworZXh0ZXJuIGludCBrZ2RiX2JhdWQ7CitleHRlcm4gY2hhciBrZ2RiX3Bhcml0eTsKK2V4dGVybiBjaGFyIGtnZGJfYml0czsKK2V4dGVybiBpbnQga2dkYl9jb25zb2xlX3NldHVwKHN0cnVjdCBjb25zb2xlICosIGNoYXIgKik7CisKKy8qIEluaXQgYW5kIGludGVyZmFjZSBzdHVmZiAqLworZXh0ZXJuIGludCBrZ2RiX2luaXQodm9pZCk7CitleHRlcm4gaW50ICgqa2dkYl9zZXJpYWxfc2V0dXApKHZvaWQpOworZXh0ZXJuIGludCAoKmtnZGJfZ2V0Y2hhcikodm9pZCk7CitleHRlcm4gdm9pZCAoKmtnZGJfcHV0Y2hhcikoaW50KTsKKworc3RydWN0IGtnZGJfc2VybWFwIHsKKwljaGFyICpuYW1lOworCWludCBuYW1lbGVuOworCWludCAoKnNldHVwX2ZuKShzdHJ1Y3QgY29uc29sZSAqLCBjaGFyICopOworCXN0cnVjdCBrZ2RiX3Nlcm1hcCAqbmV4dDsKK307CitleHRlcm4gdm9pZCBrZ2RiX3JlZ2lzdGVyX3Nlcm1hcChzdHJ1Y3Qga2dkYl9zZXJtYXAgKm1hcCk7CitleHRlcm4gc3RydWN0IGtnZGJfc2VybWFwICprZ2RiX3BvcnR0eXBlOworCisvKiBUcmFwIGZ1bmN0aW9ucyAqLwordHlwZWRlZiB2b2lkIChrZ2RiX2RlYnVnX2hvb2tfdCkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOyAKK3R5cGVkZWYgdm9pZCAoa2dkYl9idXNfZXJyb3JfaG9va190KSh2b2lkKTsKK2V4dGVybiBrZ2RiX2RlYnVnX2hvb2tfdCAgKmtnZGJfZGVidWdfaG9vazsKK2V4dGVybiBrZ2RiX2J1c19lcnJvcl9ob29rX3QgKmtnZGJfYnVzX2Vycl9ob29rOworCitleHRlcm4gdm9pZCBicmVha3BvaW50KHZvaWQpOworCisvKiBDb25zb2xlICovCitzdHJ1Y3QgY29uc29sZTsKK3ZvaWQga2dkYl9jb25zb2xlX3dyaXRlKHN0cnVjdCBjb25zb2xlICpjbywgY29uc3QgY2hhciAqcywgdW5zaWduZWQgY291bnQpOwordm9pZCBrZ2RiX2NvbnNvbGVfaW5pdCh2b2lkKTsKKworLyogUHJvdG90eXBlcyBmb3Igam1wIGZucyAqLworI2RlZmluZSBfSkJMRU4gOQordHlwZWRlZiAgICAgICAgaW50IGptcF9idWZbX0pCTEVOXTsKK2V4dGVybiB2b2lkICAgIGxvbmdqbXAoam1wX2J1ZiBfX2ptcGIsIGludCBfX3JldHZhbCk7CitleHRlcm4gaW50ICAgICBzZXRqbXAoam1wX2J1ZiBfX2ptcGIpOworCisvKiBWYXJpYWRpYyBtYWNybyB0byBwcmludCBvdXIgb3duIG1lc3NhZ2UgdG8gdGhlIGNvbnNvbGUgKi8KKyNkZWZpbmUgS0dEQl9QUklOVEsoLi4uKSBwcmludGsoIktHREI6ICIgX19WQV9BUkdTX18pCisKKy8qIEZvcmNlZCBicmVha3BvaW50ICovCisjZGVmaW5lIEJSRUFLUE9JTlQoKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgaWYgKGtnZGJfZW5hYmxlZCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGFzbSB2b2xhdGlsZSgidHJhcGEgICAjMHhmZiIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gd2hpbGUgKDApCisKKy8qIEtHREIgc2hvdWxkIGJlIGFibGUgdG8gZmx1c2ggYWxsIGtlcm5lbCB0ZXh0IHNwYWNlICovCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NINCkKKyNkZWZpbmUga2dkYl9mbHVzaF9pY2FjaGVfcmFuZ2Uoc3RhcnQsIGVuZCkgXAorewkJCQkJCQkJCVwKKwlleHRlcm4gdm9pZCBfX2ZsdXNoX3B1cmdlX3JlZ2lvbih2b2lkICosIGludCk7CQkJXAorCV9fZmx1c2hfcHVyZ2VfcmVnaW9uKCh2b2lkKikoc3RhcnQpLCAoaW50KShlbmQpIC0gKGludCkoc3RhcnQpKTtcCisJZmx1c2hfaWNhY2hlX3JhbmdlKChzdGFydCksIChlbmQpKTsJCQkJXAorfQorI2Vsc2UKKyNkZWZpbmUga2dkYl9mbHVzaF9pY2FjaGVfcmFuZ2Uoc3RhcnQsIGVuZCkJZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKKy8qIEtlcm5lbCBhc3NlcnQgbWFjcm9zICovCisjaWZkZWYgQ09ORklHX0tHREJfS0VSTkVMX0FTU0VSVFMKKworLyogUHJlZGVmaW5lZCBjb25kaXRpb25zICovCisjZGVmaW5lIEtBX1ZBTElEX0VSUk5PKGVycm5vKSAoKGVycm5vKSA+IDAgJiYgKGVycm5vKSA8PSBFTUVESVVNVFlQRSkKKyNkZWZpbmUgS0FfVkFMSURfUFRSX0VSUihwdHIpIEtBX1ZBTElEX0VSUk5PKC1QVFJfRVJSKHB0cikpCisjZGVmaW5lIEtBX1ZBTElEX0tQVFIocHRyKSAgKCEocHRyKSB8fCBcCisgICAgICAgICAgICAgICgodm9pZCAqKShwdHIpID49ICh2b2lkICopUEFHRV9PRkZTRVQgJiYgIFwKKyAgICAgICAgICAgICAgICh2b2lkICopKHB0cikgPCBFUlJfUFRSKC1FTUVESVVNVFlQRSkpKQorI2RlZmluZSBLQV9WQUxJRF9QVFJPUkVSUihlcnJwdHIpIFwKKyAgICAgICAgICAgICAgIChLQV9WQUxJRF9LUFRSKGVycnB0cikgfHwgS0FfVkFMSURfUFRSX0VSUihlcnJwdHIpKQorI2RlZmluZSBLQV9IRUxEX0dLTCgpICAoY3VycmVudC0+bG9ja19kZXB0aCA+PSAwKQorCisvKiBUaGUgYWN0dWFsIGFzc2VydCAqLworI2RlZmluZSBLR0RCX0FTU0VSVChjb25kaXRpb24sIG1lc3NhZ2UpIGRvIHsgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGlmICghKGNvbmRpdGlvbikgJiYgKGtnZGJfZW5hYmxlZCkpIHsgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgS0dEQl9QUklOVEsoIkFzc2VydGlvbiBmYWlsZWQgYXQgJXM6JWQ6ICVzXG4iLCAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgbWVzc2FnZSk7XAorICAgICAgICAgICAgICAgQlJFQUtQT0lOVCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSB3aGlsZSAoMCkKKyNlbHNlCisjZGVmaW5lIEtHREJfQVNTRVJUKGNvbmRpdGlvbiwgbWVzc2FnZSkKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2ttYXBfdHlwZXMuaCBiL2luY2x1ZGUvYXNtLXNoL2ttYXBfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDkyYmEwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gva21hcF90eXBlcy5oCkBAIC0wLDAgKzEsMzMgQEAKKyNpZm5kZWYgX19TSF9LTUFQX1RZUEVTX0gKKyNkZWZpbmUgX19TSF9LTUFQX1RZUEVTX0gKKworLyogRHVtbXkgaGVhZGVyIGp1c3QgdG8gZGVmaW5lIGttX3R5cGUuICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2lmZGVmIENPTkZJR19ERUJVR19ISUdITUVNCisjIGRlZmluZSBEKG4pIF9fS01fRkVOQ0VfIyNuICwKKyNlbHNlCisjIGRlZmluZSBEKG4pCisjZW5kaWYKKworZW51bSBrbV90eXBlIHsKK0QoMCkJS01fQk9VTkNFX1JFQUQsCitEKDEpCUtNX1NLQl9TVU5SUENfREFUQSwKK0QoMikJS01fU0tCX0RBVEFfU09GVElSUSwKK0QoMykJS01fVVNFUjAsCitEKDQpCUtNX1VTRVIxLAorRCg1KQlLTV9CSU9fU1JDX0lSUSwKK0QoNikJS01fQklPX0RTVF9JUlEsCitEKDcpCUtNX1BURTAsCitEKDgpCUtNX1BURTEsCitEKDkpCUtNX0lSUTAsCitEKDEwKQlLTV9JUlExLAorRCgxMSkJS01fU09GVElSUTAsCitEKDEyKQlLTV9TT0ZUSVJRMSwKK0QoMTMpCUtNX1RZUEVfTlIKK307CisKKyN1bmRlZiBECisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvbGlua2FnZS5oIGIvaW5jbHVkZS9hc20tc2gvbGlua2FnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1NjVhNGYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9saW5rYWdlLmgKQEAgLTAsMCArMSw3IEBACisjaWZuZGVmIF9fQVNNX0xJTktBR0VfSAorI2RlZmluZSBfX0FTTV9MSU5LQUdFX0gKKworI2RlZmluZSBfX0FMSUdOIC5iYWxpZ24gNAorI2RlZmluZSBfX0FMSUdOX1NUUiAiLmJhbGlnbiA0IgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2xvY2FsLmggYi9pbmNsdWRlL2FzbS1zaC9sb2NhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllZDliOWMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9sb2NhbC5oCkBAIC0wLDAgKzEsNyBAQAorI2lmbmRlZiBfX0FTTV9TSF9MT0NBTF9ICisjZGVmaW5lIF9fQVNNX1NIX0xPQ0FMX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2xvY2FsLmg+CisKKyNlbmRpZiAvKiBfX0FTTV9TSF9MT0NBTF9IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL21hY2h2ZWMuaCBiL2luY2x1ZGUvYXNtLXNoL21hY2h2ZWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzcxZjRiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvbWFjaHZlYy5oCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1zaC9tYWNodmVjLmgKKyAqCisgKiBDb3B5cmlnaHQgMjAwMCBTdHVhcnQgTWVuZWZ5IChzdHVhcnQubWVuZWZ5QHN0LmNvbSkKKyAqCisgKiBNYXkgYmUgY29waWVkIG9yIG1vZGlmaWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIGxpbnV4L0NPUFlJTkcgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgKi8KKworI2lmbmRlZiBfQVNNX1NIX01BQ0hWRUNfSAorI2RlZmluZSBfQVNNX1NIX01BQ0hWRUNfSCAxCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNodHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaHZlY19pbml0Lmg+CisKK3N0cnVjdCBkZXZpY2U7CitzdHJ1Y3QgdGltZXZhbDsKKworc3RydWN0IHNoX21hY2hpbmVfdmVjdG9yCit7CisJaW50IG12X25yX2lycXM7CisKKwl1bnNpZ25lZCBjaGFyICgqbXZfaW5iKSh1bnNpZ25lZCBsb25nKTsKKwl1bnNpZ25lZCBzaG9ydCAoKm12X2ludykodW5zaWduZWQgbG9uZyk7CisJdW5zaWduZWQgaW50ICgqbXZfaW5sKSh1bnNpZ25lZCBsb25nKTsKKwl2b2lkICgqbXZfb3V0YikodW5zaWduZWQgY2hhciwgdW5zaWduZWQgbG9uZyk7CisJdm9pZCAoKm12X291dHcpKHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBsb25nKTsKKwl2b2lkICgqbXZfb3V0bCkodW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTsKKworCXVuc2lnbmVkIGNoYXIgKCptdl9pbmJfcCkodW5zaWduZWQgbG9uZyk7CisJdW5zaWduZWQgc2hvcnQgKCptdl9pbndfcCkodW5zaWduZWQgbG9uZyk7CisJdW5zaWduZWQgaW50ICgqbXZfaW5sX3ApKHVuc2lnbmVkIGxvbmcpOworCXZvaWQgKCptdl9vdXRiX3ApKHVuc2lnbmVkIGNoYXIsIHVuc2lnbmVkIGxvbmcpOworCXZvaWQgKCptdl9vdXR3X3ApKHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBsb25nKTsKKwl2b2lkICgqbXZfb3V0bF9wKSh1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpOworCisJdm9pZCAoKm12X2luc2IpKHVuc2lnbmVkIGxvbmcgcG9ydCwgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCk7CisJdm9pZCAoKm12X2luc3cpKHVuc2lnbmVkIGxvbmcgcG9ydCwgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCk7CisJdm9pZCAoKm12X2luc2wpKHVuc2lnbmVkIGxvbmcgcG9ydCwgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCk7CisJdm9pZCAoKm12X291dHNiKSh1bnNpZ25lZCBsb25nIHBvcnQsIGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpOworCXZvaWQgKCptdl9vdXRzdykodW5zaWduZWQgbG9uZyBwb3J0LCBjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKKwl2b2lkICgqbXZfb3V0c2wpKHVuc2lnbmVkIGxvbmcgcG9ydCwgY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCk7CisKKwl1bnNpZ25lZCBjaGFyICgqbXZfcmVhZGIpKHVuc2lnbmVkIGxvbmcpOworCXVuc2lnbmVkIHNob3J0ICgqbXZfcmVhZHcpKHVuc2lnbmVkIGxvbmcpOworCXVuc2lnbmVkIGludCAoKm12X3JlYWRsKSh1bnNpZ25lZCBsb25nKTsKKwl2b2lkICgqbXZfd3JpdGViKSh1bnNpZ25lZCBjaGFyLCB1bnNpZ25lZCBsb25nKTsKKwl2b2lkICgqbXZfd3JpdGV3KSh1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgbG9uZyk7CisJdm9pZCAoKm12X3dyaXRlbCkodW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTsKKworCXZvaWQqICgqbXZfaW9yZW1hcCkodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CisJdm9pZCAoKm12X2lvdW5tYXApKHZvaWQgKmFkZHIpOworCisJdW5zaWduZWQgbG9uZyAoKm12X2lzYV9wb3J0MmFkZHIpKHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKKworCWludCAoKm12X2lycV9kZW11eCkoaW50IGlycSk7CisKKwl2b2lkICgqbXZfaW5pdF9pcnEpKHZvaWQpOworCXZvaWQgKCptdl9pbml0X3BjaSkodm9pZCk7CisKKwl2b2lkICgqbXZfaGVhcnRiZWF0KSh2b2lkKTsKKworCXZvaWQgKigqbXZfY29uc2lzdGVudF9hbGxvYykoc3RydWN0IGRldmljZSAqLCBzaXplX3QsIGRtYV9hZGRyX3QgKiwgaW50KTsKKwlpbnQgKCptdl9jb25zaXN0ZW50X2ZyZWUpKHN0cnVjdCBkZXZpY2UgKiwgc2l6ZV90LCB2b2lkICosIGRtYV9hZGRyX3QpOworfTsKKworZXh0ZXJuIHN0cnVjdCBzaF9tYWNoaW5lX3ZlY3RvciBzaF9tdjsKKworI2VuZGlmIC8qIF9BU01fU0hfTUFDSFZFQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9tYWNodmVjX2luaXQuaCBiL2luY2x1ZGUvYXNtLXNoL21hY2h2ZWNfaW5pdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllN2RlODAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9tYWNodmVjX2luaXQuaApAQCAtMCwwICsxLDU0IEBACisvKgorICogaW5jbHVkZS9hc20tc2gvbWFjaHZlY19pbml0LmgKKyAqCisgKiBDb3B5cmlnaHQgMjAwMCBTdHVhcnQgTWVuZWZ5IChzdHVhcnQubWVuZWZ5QHN0LmNvbSkKKyAqCisgKiBNYXkgYmUgY29waWVkIG9yIG1vZGlmaWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIGxpbnV4L0NPUFlJTkcgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgKgorICogVGhpcyBmaWxlIGhhcyBnb29kaWVzIHRvIGhlbHAgc2ltcGxpZnkgaW5zdGFudGlhdGlvbiBvZiBtYWNoaW5lIHZlY3RvcnMuCisgKi8KKworI2lmbmRlZiBfX1NIX01BQ0hWRUNfSU5JVF9ICisjZGVmaW5lIF9fU0hfTUFDSFZFQ19JTklUX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisvKgorICogSW4gYSBHRU5FUklDIGtlcm5lbCwgd2UgaGF2ZSBsb3RzIG9mIHRoZXNlIHZlY3RvcnMgZmxvYXRpbmcgYWJvdXQsCisgKiBhbGwgYnV0IG9uZSBvZiB3aGljaCB3ZSB3YW50IHRvIGdvIGF3YXkuICBJbiBhIG5vbi1HRU5FUklDIGtlcm5lbCwKKyAqIHdlIHdhbnQgb25seSBvbmUsIGV2ZXIuCisgKgorICogQWNjb21wbGlzaCB0aGlzIGluIHRoZSBHRU5FUklDIGtlcm5lbCBieSBwdXRpbmcgYWxsIG9mIHRoZSB2ZWN0b3JzCisgKiBpbiB0aGUgLmluaXQuZGF0YSBzZWN0aW9uIHdoZXJlIHRoZXknbGwgZ28gYXdheS4gIFdlJ2xsIGNvcHkgdGhlCisgKiBvbmUgd2Ugd2FudCB0byB0aGUgcmVhbCBhbHBoYV9tdiB2ZWN0b3IgaW4gc2V0dXBfYXJjaC4KKyAqCisgKiBBY2NvbXBsaXNoIHRoaXMgaW4gYSBub24tR0VORVJJQyBrZXJuZWwgYnkgaWZkZWYnaW5nIG91dCBhbGwgYnV0CisgKiBvbmUgb2YgdGhlIHZlY3RvcnMsIHdoaWNoIHdpbGwgbm90IHJlc2lkZSBpbiAuaW5pdC5kYXRhLiAgV2UgdGhlbgorICogYWxpYXMgdGhpcyBvbmUgdmVjdG9yIHRvIGFscGhhX212LCBzbyBubyBjb3B5IGlzIG5lZWRlZC4KKyAqCisgKiBVcHNob3Q6IHNldCBfX2luaXRkYXRhIHRvIG5vdGhpbmcgZm9yIG5vbi1HRU5FUklDIGtlcm5lbHMuCisgKgorICogTm90ZSB3ZSBkbyB0aGUgc2FtZSB0aGluZyBmb3IgdGhlIFVOS05PV04ga2VybmVsLCBhcyB3ZSBuZWVkIHRvIHdyaXRlCisgKiB0byB0aGUgbWFjaGluZSB2ZWN0b3Igd2hpbGUgc2V0dGluZyBpdCB1cC4KKyAqLworCisjaWYgZGVmaW5lZChDT05GSUdfU0hfR0VORVJJQykgfHwgZGVmaW5lZChDT05GSUdfU0hfVU5LTk9XTikKKyNkZWZpbmUgX19pbml0bXYgX19hdHRyaWJ1dGVfXygodW51c2VkLF9fc2VjdGlvbl9fICgiLm1hY2h2ZWMuaW5pdCIpKSkKKyNkZWZpbmUgQUxJQVNfTVYoeCkKKyNlbHNlCisjZGVmaW5lIF9faW5pdG12CisKKy8qIEdDQyBhY3R1YWxseSBoYXMgYSBzeW50YXggZm9yIGRlZmluaW5nIGFsaWFzZXMsIGJ1dCBpcyB1bmRlciBzb21lCisgICBkZWx1c2lvbiB0aGF0IHlvdSBzaG91bGRuJ3QgYmUgYWJsZSB0byBkZWNsYXJlIGl0IGV4dGVybiBzb21ld2hlcmUKKyAgIGVsc2UgYmVmb3JlaGFuZC4gIEZpbmUuICBXZSdsbCBkbyBpdCBvdXJzZWx2ZXMuICAqLworI2lmIDAKKyNkZWZpbmUgQUxJQVNfTVYoc3lzdGVtKSBcCisgIHN0cnVjdCBzaF9tYWNoaW5lX3ZlY3RvciBzaF9tdiBfX2F0dHJpYnV0ZV9fKChhbGlhcygibXZfIiNzeXN0ZW0pKSk7CisjZWxzZQorI2RlZmluZSBBTElBU19NVihzeXN0ZW0pIFwKKyAgYXNtKCIuZ2xvYmFsIHNoX212XG5zaF9tdiA9IG12XyIjc3lzdGVtICk7CisjZW5kaWYKKyNlbmRpZiAvKiBHRU5FUklDICovCisKKyNlbmRpZiAvKiBfX1NIX01BQ0hWRUNfSU5JVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9tYzE0NjgxOHJ0Yy5oIGIvaW5jbHVkZS9hc20tc2gvbWMxNDY4MThydGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzA3Y2ZiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvbWMxNDY4MThydGMuaApAQCAtMCwwICsxLDE3NiBAQAorLyoKKyAqIE1hY2hpbmUgZGVwZW5kZW50IGFjY2VzcyBmdW5jdGlvbnMgZm9yIFJUQyByZWdpc3RlcnMuCisgKi8KKyNpZm5kZWYgX0FTTV9NQzE0NjgxOFJUQ19ICisjZGVmaW5lIF9BU01fTUMxNDY4MThSVENfSAorCisjaWZkZWYgQ09ORklHX1NIX01QQzEyMTEKKyN1bmRlZiAgX0FTTV9NQzE0NjgxOFJUQ19ICisjdW5kZWYgIFJUQ19JUlEKKyNpbmNsdWRlIDxhc20vbXBjMTIxMS9tYzE0NjgxOHJ0Yy5oPgorI2Vsc2UKKworI2luY2x1ZGUgPGFzbS9ydGMuaD4KKworI2RlZmluZSBSVENfQUxXQVlTX0JDRAkxCisKKy8qIEZJWE1FOlJUQyBJbnRlcnJ1cHQgZmVhdHVyZSBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiAqLworI3VuZGVmICBSVENfSVJRCisjZGVmaW5lIFJUQ19JUlEJCTAKKworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TSDMpCisjZGVmaW5lIFJUQ19QT1JUKG4pCQkoUjY0Q05UKyhuKSoyKQorI2RlZmluZSBDTU9TX1JFQUQoYWRkcikJCV9fQ01PU19SRUFEKGFkZHIsYikKKyNkZWZpbmUgQ01PU19XUklURSh2YWwsYWRkcikJX19DTU9TX1dSSVRFKHZhbCxhZGRyLGIpCisKKyNlbGlmIGRlZmluZWQoQ09ORklHX1NIX1NFQ1VSRUVER0U1NDEwKQorI2luY2x1ZGUgPGFzbS9zbmFwZ2Vhci9pby5oPgorCisjZGVmaW5lIFJUQ19QT1JUKG4pICAgICAgICAgICAgIFNFQ1VSRUVER0VfSU9QT1JUX0FERFIKKyNkZWZpbmUgQ01PU19SRUFEKGFkZHIpICAgICAgICAgc2VjdXJlZWRnZTU0MTBfY21vc19yZWFkKGFkZHIpCisjZGVmaW5lIENNT1NfV1JJVEUodmFsLGFkZHIpICAgIHNlY3VyZWVkZ2U1NDEwX2Ntb3Nfd3JpdGUodmFsLGFkZHIpCitleHRlcm4gdW5zaWduZWQgY2hhciBzZWN1cmVlZGdlNTQxMF9jbW9zX3JlYWQoaW50IGFkZHIpOworZXh0ZXJuIHZvaWQgc2VjdXJlZWRnZTU0MTBfY21vc193cml0ZSh1bnNpZ25lZCBjaGFyIHZhbCwgaW50IGFkZHIpOworCisjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU0g0KQorI2RlZmluZSBSVENfUE9SVChuKQkJKFI2NENOVCsobikqNCkKKyNkZWZpbmUgQ01PU19SRUFEKGFkZHIpCQlfX0NNT1NfUkVBRChhZGRyLHcpCisjZGVmaW5lIENNT1NfV1JJVEUodmFsLGFkZHIpCV9fQ01PU19XUklURSh2YWwsYWRkcix3KQorI2VuZGlmCisKKyNkZWZpbmUgX19DTU9TX1JFQUQoYWRkciwgcykgKHsJCQkJCQlcCisJdW5zaWduZWQgY2hhciB2YWw9MCwgcmNyMSwgcmNyMiwgcjY0Y250LCByZXRyeTsJCQlcCisJc3dpdGNoKGFkZHIpIHsJCQkJCQkJXAorCQljYXNlIFJUQ19TRUNPTkRTOgkJCQkJXAorCQkJdmFsID0gY3RybF9pbmIoUlNFQ0NOVCk7CQkJXAorCQkJYnJlYWs7CQkJCQkJXAorCQljYXNlIFJUQ19TRUNPTkRTX0FMQVJNOgkJCQkJXAorCQkJdmFsID0gY3RybF9pbmIoUlNFQ0FSKTsJCQkJXAorCQkJYnJlYWs7CQkJCQkJXAorCQljYXNlIFJUQ19NSU5VVEVTOgkJCQkJXAorCQkJdmFsID0gY3RybF9pbmIoUk1JTkNOVCk7CQkJXAorCQkJYnJlYWs7CQkJCQkJXAorCQljYXNlIFJUQ19NSU5VVEVTX0FMQVJNOgkJCQkJXAorCQkJdmFsID0gY3RybF9pbmIoUk1JTkFSKTsJCQkJXAorCQkJYnJlYWs7CQkJCQkJXAorCQljYXNlIFJUQ19IT1VSUzoJCQkJCQlcCisJCQl2YWwgPSBjdHJsX2luYihSSFJDTlQpOwkJCQlcCisJCQlicmVhazsJCQkJCQlcCisJCWNhc2UgUlRDX0hPVVJTX0FMQVJNOgkJCQkJXAorCQkJdmFsID0gY3RybF9pbmIoUkhSQVIpOwkJCQlcCisJCQlicmVhazsJCQkJCQlcCisJCWNhc2UgUlRDX0RBWV9PRl9XRUVLOgkJCQkJXAorCQkJdmFsID0gY3RybF9pbmIoUldLQ05UKTsJCQkJXAorCQkJYnJlYWs7CQkJCQkJXAorCQljYXNlIFJUQ19EQVlfT0ZfTU9OVEg6CQkJCQlcCisJCQl2YWwgPSBjdHJsX2luYihSREFZQ05UKTsJCQlcCisJCQlicmVhazsJCQkJCQlcCisJCWNhc2UgUlRDX01PTlRIOgkJCQkJCVwKKwkJCXZhbCA9IGN0cmxfaW5iKFJNT05DTlQpOwkJCVwKKwkJCWJyZWFrOwkJCQkJCVwKKwkJY2FzZSBSVENfWUVBUjoJCQkJCQlcCisJCQl2YWwgPSBjdHJsX2luIyNzKFJZUkNOVCk7CQkJXAorCQkJYnJlYWs7CQkJCQkJXAorCQljYXNlIFJUQ19SRUdfQTogLyogUlRDX0ZSRVFfU0VMRUNUICovCQkJXAorCQkJcmNyMiA9IGN0cmxfaW5iKFJDUjIpOwkJCQlcCisJCQl2YWwgPSAocmNyMiAmIFJDUjJfUEVTTUFTSykgPj4gNDsJCVwKKwkJCXJjcjEgPSBjdHJsX2luYihSQ1IxKTsJCQkJXAorCQkJcmNyMSA9IChyY3IxICYgKFJDUjFfQ0lFIHwgUkNSMV9BSUUpKSB8IFJDUjFfQUY7XAorCQkJcmV0cnkgPSAwOwkJCQkJXAorCQkJZG8gewkJCQkJCVwKKwkJCQljdHJsX291dGIocmNyMSwgUkNSMSk7IC8qIGNsZWFyIENGICovCVwKKwkJCQlyNjRjbnQgPSBjdHJsX2luYihSNjRDTlQpOwkJXAorCQkJfSB3aGlsZSgoY3RybF9pbmIoUkNSMSkgJiBSQ1IxX0NGKSAmJiByZXRyeSsrIDwgMTAwMCk7XAorCQkJcjY0Y250IF49IFJUQ19CSVRfSU5WRVJURUQ7CQkJXAorCQkJaWYocjY0Y250ID09IDB4N2YgfHwgcjY0Y250ID09IDApCQlcCisJCQkJdmFsIHw9IFJUQ19VSVA7CQkJCVwKKwkJCWJyZWFrOwkJCQkJCVwKKwkJY2FzZSBSVENfUkVHX0I6CS8qIFJUQ19DT05UUk9MICovCQkJXAorCQkJcmNyMSA9IGN0cmxfaW5iKFJDUjEpOwkJCQlcCisJCQlyY3IyID0gY3RybF9pbmIoUkNSMik7CQkJCVwKKwkJCWlmKHJjcjEgJiBSQ1IxX0NJRSkJdmFsIHw9IFJUQ19VSUU7CQlcCisJCQlpZihyY3IxICYgUkNSMV9BSUUpCXZhbCB8PSBSVENfQUlFOwkJXAorCQkJaWYocmNyMiAmIFJDUjJfUEVTTUFTSykJdmFsIHw9IFJUQ19QSUU7CQlcCisJCQlpZighKHJjcjIgJiBSQ1IyX1NUQVJUKSl2YWwgfD0gUlRDX1NFVDsJCVwKKwkJCXZhbCB8PSBSVENfMjRIOwkJCQkJXAorCQkJYnJlYWs7CQkJCQkJXAorCQljYXNlIFJUQ19SRUdfQzoJLyogUlRDX0lOVFJfRkxBR1MgKi8JCQlcCisJCQlyY3IxID0gY3RybF9pbmIoUkNSMSk7CQkJCVwKKwkJCXJjcjEgJj0gfihSQ1IxX0NGIHwgUkNSMV9BRik7CQkJXAorCQkJY3RybF9vdXRiKHJjcjEsIFJDUjEpOwkJCQlcCisJCQlyY3IyID0gY3RybF9pbmIoUkNSMik7CQkJCVwKKwkJCXJjcjIgJj0gflJDUjJfUEVGOwkJCQlcCisJCQljdHJsX291dGIocmNyMiwgUkNSMik7CQkJCVwKKwkJCWJyZWFrOwkJCQkJCVwKKwkJY2FzZSBSVENfUkVHX0Q6CS8qIFJUQ19WQUxJRCAqLwkJCQlcCisJCQkvKiBBbHdheXMgdmFsaWQgLi4uICovCQkJCVwKKwkJCXZhbCA9IFJUQ19WUlQ7CQkJCQlcCisJCQlicmVhazsJCQkJCQlcCisJCWRlZmF1bHQ6CQkJCQkJXAorCQkJYnJlYWs7CQkJCQkJXAorCX0JCQkJCQkJCVwKKwl2YWw7CQkJCQkJCQlcCit9KQorCisjZGVmaW5lIF9fQ01PU19XUklURSh2YWwsIGFkZHIsIHMpICh7CQkJCQlcCisJdW5zaWduZWQgY2hhciByY3IxLHJjcjI7CQkJCQlcCisJc3dpdGNoKGFkZHIpIHsJCQkJCQkJXAorCQljYXNlIFJUQ19TRUNPTkRTOgkJCQkJXAorCQkJY3RybF9vdXRiKHZhbCwgUlNFQ0NOVCk7CQkJXAorCQkJYnJlYWs7CQkJCQkJXAorCQljYXNlIFJUQ19TRUNPTkRTX0FMQVJNOgkJCQkJXAorCQkJY3RybF9vdXRiKHZhbCwgUlNFQ0FSKTsJCQkJXAorCQkJYnJlYWs7CQkJCQkJXAorCQljYXNlIFJUQ19NSU5VVEVTOgkJCQkJXAorCQkJY3RybF9vdXRiKHZhbCwgUk1JTkNOVCk7CQkJXAorCQkJYnJlYWs7CQkJCQkJXAorCQljYXNlIFJUQ19NSU5VVEVTX0FMQVJNOgkJCQkJXAorCQkJY3RybF9vdXRiKHZhbCwgUk1JTkFSKTsJCQkJXAorCQkJYnJlYWs7CQkJCQkJXAorCQljYXNlIFJUQ19IT1VSUzoJCQkJCQlcCisJCQljdHJsX291dGIodmFsLCBSSFJDTlQpOwkJCQlcCisJCQlicmVhazsJCQkJCQlcCisJCWNhc2UgUlRDX0hPVVJTX0FMQVJNOgkJCQkJXAorCQkJY3RybF9vdXRiKHZhbCwgUkhSQVIpOwkJCQlcCisJCQlicmVhazsJCQkJCQlcCisJCWNhc2UgUlRDX0RBWV9PRl9XRUVLOgkJCQkJXAorCQkJY3RybF9vdXRiKHZhbCwgUldLQ05UKTsJCQkJXAorCQkJYnJlYWs7CQkJCQkJXAorCQljYXNlIFJUQ19EQVlfT0ZfTU9OVEg6CQkJCQlcCisJCQljdHJsX291dGIodmFsLCBSREFZQ05UKTsJCQlcCisJCQlicmVhazsJCQkJCQlcCisJCWNhc2UgUlRDX01PTlRIOgkJCQkJCVwKKwkJCWN0cmxfb3V0Yih2YWwsIFJNT05DTlQpOwkJCVwKKwkJCWJyZWFrOwkJCQkJCVwKKwkJY2FzZSBSVENfWUVBUjoJCQkJCQlcCisJCQljdHJsX291dCMjcygoY3RybF9pbiMjcyhSWVJDTlQpICYgMHhmZjAwKSB8ICh2YWwgJiAweGZmKSwgUllSQ05UKTtcCisJCQlicmVhazsJCQkJCQlcCisJCWNhc2UgUlRDX1JFR19BOiAvKiBSVENfRlJFUV9TRUxFQ1QgKi8JCQlcCisJCQlyY3IyID0gY3RybF9pbmIoUkNSMik7CQkJCVwKKwkJCWlmKCh2YWwgJiBSVENfRElWX0NUTCkgPT0gUlRDX0RJVl9SRVNFVDIpCVwKKwkJCQlyY3IyIHw9IFJDUjJfUkVTRVQ7CQkJXAorCQkJY3RybF9vdXRiKHJjcjIsIFJDUjIpOwkJCQlcCisJCQlicmVhazsJCQkJCQlcCisJCWNhc2UgUlRDX1JFR19COgkvKiBSVENfQ09OVFJPTCAqLwkJCVwKKwkJCXJjcjEgPSAoY3RybF9pbmIoUkNSMSkgJiAweDk5KSB8IFJDUjFfQUY7CVwKKwkJCWlmKHZhbCAmIFJUQ19BSUUpIHJjcjEgfD0gUkNSMV9BSUU7CQlcCisJCQllbHNlICAgICAgICAgICAgICByY3IxICY9IH5SQ1IxX0FJRTsJCVwKKwkJCWlmKHZhbCAmIFJUQ19VSUUpIHJjcjEgfD0gUkNSMV9DSUU7CQlcCisJCQllbHNlICAgICAgICAgICAgICByY3IxICY9IH5SQ1IxX0NJRTsJCVwKKwkJCWN0cmxfb3V0YihyY3IxLCBSQ1IxKTsJCQkJXAorCQkJcmNyMiA9IGN0cmxfaW5iKFJDUjIpOwkJCQlcCisJCQlpZih2YWwgJiBSVENfU0VUKSByY3IyICY9IH5SQ1IyX1NUQVJUOwkJXAorCQkJZWxzZSAgICAgICAgICAgICAgcmNyMiB8PSBSQ1IyX1NUQVJUOwkJXAorCQkJY3RybF9vdXRiKHJjcjIsIFJDUjIpOwkJCQlcCisJCQlicmVhazsJCQkJCQlcCisJCWNhc2UgUlRDX1JFR19DOgkvKiBSVENfSU5UUl9GTEFHUyAqLwkJCVwKKwkJCWJyZWFrOwkJCQkJCVwKKwkJY2FzZSBSVENfUkVHX0Q6CS8qIFJUQ19WQUxJRCAqLwkJCQlcCisJCQlicmVhazsJCQkJCQlcCisJCWRlZmF1bHQ6CQkJCQkJXAorCQkJYnJlYWs7CQkJCQkJXAorCX0JCQkJCQkJCVwKK30pCisKKyNlbmRpZiAvKiBDT05GSUdfU0hfTVBDMTIxMSAqLworI2VuZGlmIC8qIF9BU01fTUMxNDY4MThSVENfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvbWljcm9kZXYvaW8uaCBiL2luY2x1ZGUvYXNtLXNoL21pY3JvZGV2L2lvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJjYTRhYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL21pY3JvZGV2L2lvLmgKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLXNoL2lvX21pY3JvZGV2LmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgU2VhbiBNY0dvb2dhbiAoU2Vhbi5NY0dvb2dhbkBzdXBlcmguY29tKQorICoKKyAqIElPIGZ1bmN0aW9ucyBmb3IgdGhlIFN1cGVySCBTSDQtMjAyIE1pY3JvRGV2IGJvYXJkLgorICoKKyAqIE1heSBiZSBjb3BpZWQgb3IgbW9kaWZpZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgbGludXgvQ09QWUlORyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAqCisgKi8KKworCisjaWZuZGVmIF9BU01fU0hfSU9fTUlDUk9ERVZfSAorI2RlZmluZSBfQVNNX1NIX0lPX01JQ1JPREVWX0gKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWljcm9kZXZfaXNhX3BvcnQyYWRkcih1bnNpZ25lZCBsb25nIG9mZnNldCk7CisKK2V4dGVybiB1bnNpZ25lZCBjaGFyIG1pY3JvZGV2X2luYih1bnNpZ25lZCBsb25nIHBvcnQpOworZXh0ZXJuIHVuc2lnbmVkIHNob3J0IG1pY3JvZGV2X2ludyh1bnNpZ25lZCBsb25nIHBvcnQpOworZXh0ZXJuIHVuc2lnbmVkIGludCBtaWNyb2Rldl9pbmwodW5zaWduZWQgbG9uZyBwb3J0KTsKKworZXh0ZXJuIHZvaWQgbWljcm9kZXZfb3V0Yih1bnNpZ25lZCBjaGFyIHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpOworZXh0ZXJuIHZvaWQgbWljcm9kZXZfb3V0dyh1bnNpZ25lZCBzaG9ydCB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KTsKK2V4dGVybiB2b2lkIG1pY3JvZGV2X291dGwodW5zaWduZWQgaW50IHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpOworCitleHRlcm4gdW5zaWduZWQgY2hhciBtaWNyb2Rldl9pbmJfcCh1bnNpZ25lZCBsb25nIHBvcnQpOworZXh0ZXJuIHVuc2lnbmVkIHNob3J0IG1pY3JvZGV2X2lud19wKHVuc2lnbmVkIGxvbmcgcG9ydCk7CitleHRlcm4gdW5zaWduZWQgaW50IG1pY3JvZGV2X2lubF9wKHVuc2lnbmVkIGxvbmcgcG9ydCk7CisKK2V4dGVybiB2b2lkIG1pY3JvZGV2X291dGJfcCh1bnNpZ25lZCBjaGFyIHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpOworZXh0ZXJuIHZvaWQgbWljcm9kZXZfb3V0d19wKHVuc2lnbmVkIHNob3J0IHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpOworZXh0ZXJuIHZvaWQgbWljcm9kZXZfb3V0bF9wKHVuc2lnbmVkIGludCB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KTsKKworZXh0ZXJuIHZvaWQgbWljcm9kZXZfaW5zYih1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpOworZXh0ZXJuIHZvaWQgbWljcm9kZXZfaW5zdyh1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpOworZXh0ZXJuIHZvaWQgbWljcm9kZXZfaW5zbCh1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpOworCitleHRlcm4gdm9pZCBtaWNyb2Rldl9vdXRzYih1bnNpZ25lZCBsb25nIHBvcnQsIGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpOworZXh0ZXJuIHZvaWQgbWljcm9kZXZfb3V0c3codW5zaWduZWQgbG9uZyBwb3J0LCBjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKK2V4dGVybiB2b2lkIG1pY3JvZGV2X291dHNsKHVuc2lnbmVkIGxvbmcgcG9ydCwgY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCk7CisKKyNpZiBkZWZpbmVkKENPTkZJR19QQ0kpCitleHRlcm4gdW5zaWduZWQgY2hhciAgbWljcm9kZXZfcGNpX2luYih1bnNpZ25lZCBsb25nIHBvcnQpOworZXh0ZXJuIHVuc2lnbmVkIHNob3J0IG1pY3JvZGV2X3BjaV9pbncodW5zaWduZWQgbG9uZyBwb3J0KTsKK2V4dGVybiB1bnNpZ25lZCBsb25nICBtaWNyb2Rldl9wY2lfaW5sKHVuc2lnbmVkIGxvbmcgcG9ydCk7CitleHRlcm4gdm9pZCAgICAgICAgICAgbWljcm9kZXZfcGNpX291dGIodW5zaWduZWQgY2hhciAgZGF0YSwgdW5zaWduZWQgbG9uZyBwb3J0KTsKK2V4dGVybiB2b2lkICAgICAgICAgICBtaWNyb2Rldl9wY2lfb3V0dyh1bnNpZ25lZCBzaG9ydCBkYXRhLCB1bnNpZ25lZCBsb25nIHBvcnQpOworZXh0ZXJuIHZvaWQgICAgICAgICAgIG1pY3JvZGV2X3BjaV9vdXRsKHVuc2lnbmVkIGxvbmcgIGRhdGEsIHVuc2lnbmVkIGxvbmcgcG9ydCk7CisjZW5kaWYKKworI2VuZGlmIC8qIF9BU01fU0hfSU9fTUlDUk9ERVZfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9taWNyb2Rldi9pcnEuaCBiL2luY2x1ZGUvYXNtLXNoL21pY3JvZGV2L2lycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3ZjZmNzcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9taWNyb2Rldi9pcnEuaApAQCAtMCwwICsxLDcyIEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tc2gvaXJxX21pY3JvZGV2LmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgU2VhbiBNY0dvb2dhbiAoU2Vhbi5NY0dvb2dhbkBzdXBlcmguY29tKQorICoKKyAqIElSUSBmdW5jdGlvbnMgZm9yIHRoZSBTdXBlckggU0g0LTIwMiBNaWNyb0RldiBib2FyZC4KKyAqCisgKiBNYXkgYmUgY29waWVkIG9yIG1vZGlmaWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIGxpbnV4L0NPUFlJTkcgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgKgorICovCisKKworI2lmbmRlZiBfQVNNX1NIX0lSUV9NSUNST0RFVl9ICisjZGVmaW5lIF9BU01fU0hfSVJRX01JQ1JPREVWX0gKKworZXh0ZXJuIHZvaWQgaW5pdF9taWNyb2Rldl9pcnEodm9pZCk7CitleHRlcm4gdm9pZCBtaWNyb2Rldl9wcmludF9mcGdhX2ludGNfc3RhdHVzKHZvaWQpOworCisKKwkvKgorCSAqCVRoZSBmb2xsb3dpbmcgYXJlIHVzZWZ1bCBtYWNyb3MgZm9yIG1hbmlwdWxhdGluZyB0aGUKKwkgKglpbnRlcnJ1cHQgY29udHJvbGxlciAoSU5UQykgb24gdGhlIENQVS1ib2FyZCBGUEdBLgorCSAqCUl0IHNob3VsZCBiZSBub3RlZCB0aGF0IHRoZXJlIGlzIGFuIElOVEMgb24gdGhlIEZQR0EsCisJICoJYW5kIGEgc2VwZXJhdGUgSU5UQyBvbiB0aGUgU0g0LTIwMiBjb3JlIC0gdGhlc2UgYXJlCisJICoJdHdvIGRpZmZlcmVudCB0aGluZ3MsIGJvdGggb2Ygd2hpY2ggbmVlZCB0byBiZSBwcm9yYW1tZWQKKwkgKgl0byBjb3JyZWN0bHkgcm91dGUgLSB1bmZvcnR1bmF0ZWx5LCB0aGV5IGhhdmUgdGhlCisJICoJc2FtZSBuYW1lIGFuZCBhYmJyZXZpYXRpb25zIQorCSAqLworI2RlZmluZQlNSUNST0RFVl9GUEdBX0lOVENfQkFTRQkJMHhhNjExMDAwMHVsCQkJCS8qIElOVEMgYmFzZSBhZGRyZXNzIG9uIENQVS1ib2FyZCBGUEdBICovCisjZGVmaW5lCU1JQ1JPREVWX0ZQR0FfSU5URU5CX1JFRwkoTUlDUk9ERVZfRlBHQV9JTlRDX0JBU0UrMHVsKQkJLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciBvbiBJTlRDIG9uIENQVS1ib2FyZCBGUEdBICovCisjZGVmaW5lCU1JQ1JPREVWX0ZQR0FfSU5URFNCX1JFRwkoTUlDUk9ERVZfRlBHQV9JTlRDX0JBU0UrOHVsKQkJLyogSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgb24gSU5UQyBvbiBDUFUtYm9hcmQgRlBHQSAqLworI2RlZmluZQlNSUNST0RFVl9GUEdBX0lOVENfTUFTSyhuKQkoMXVsPDwobikpCQkJCS8qIEludGVydXB0IG1hc2sgdG8gZW5hYmxlL2Rpc2FibGUgSU5UQyBpbiBDUFUtYm9hcmQgRlBHQSAqLworI2RlZmluZQlNSUNST0RFVl9GUEdBX0lOVFBSSV9SRUcobikJKE1JQ1JPREVWX0ZQR0FfSU5UQ19CQVNFKzB4MTArKChuKS84KSo4KS8qIEludGVycnVwdCBQcmlvcml0eSBSZWdpc3RlciBvbiBJTlRDIG9uIENQVS1ib2FyZCBGUEdBICovCisjZGVmaW5lCU1JQ1JPREVWX0ZQR0FfSU5UUFJJX0xFVkVMKG4seCkJKCh4KTw8KCgobiklOCkqNCkpCQkJLyogTUlDUk9ERVZfRlBHQV9JTlRQUklfTEVWRUwoaW50X251bWJlciwgaW50X2xldmVsKSAqLworI2RlZmluZQlNSUNST0RFVl9GUEdBX0lOVFBSSV9NQVNLKG4pCShNSUNST0RFVl9GUEdBX0lOVFBSSV9MRVZFTCgobiksMHhmdWwpKQkvKiBJbnRlcnJ1cHQgUHJpb3JpdHkgTWFzayBvbiBJTlRDIG9uIENQVS1ib2FyZCBGUEdBICovCisjZGVmaW5lCU1JQ1JPREVWX0ZQR0FfSU5UU1JDX1JFRwkoTUlDUk9ERVZfRlBHQV9JTlRDX0JBU0UrMHgzMHVsKQkvKiBJbnRlcnJ1cHQgU291cmNlIFJlZ2lzdGVyIG9uIElOVEMgb24gQ1BVLWJvYXJkIEZQR0EgKi8KKyNkZWZpbmUJTUlDUk9ERVZfRlBHQV9JTlRSRVFfUkVHCShNSUNST0RFVl9GUEdBX0lOVENfQkFTRSsweDM4dWwpCS8qIEludGVycnVwdCBSZXF1ZXN0IFJlZ2lzdGVyIG9uIElOVEMgb24gQ1BVLWJvYXJkIEZQR0EgKi8KKworCisJLyoKKwkgKglUaGUgZm9sbG93aW5nIGFyZSB0aGUgSVJRIG51bWJlcnMgZm9yIHRoZSBMaW51eCBLZXJuZWwgZm9yIGV4dGVybmFsIGludGVycnVwdHMuCisJICoJaS5lLiB0aGUgbnVtYmVycyBzZWVuIGJ5ICdjYXQgL3Byb2MvaW50ZXJydXB0Jy4KKwkgKi8KKyNkZWZpbmUgTUlDUk9ERVZfTElOVVhfSVJRX0tFWUJPQVJECSAxCS8qIFN1cGVySU8gS2V5Ym9hcmQgKi8KKyNkZWZpbmUgTUlDUk9ERVZfTElOVVhfSVJRX1NFUklBTDEJIDIJLyogU3VwZXJJTyBTZXJpYWwgIzEgKi8KKyNkZWZpbmUgTUlDUk9ERVZfTElOVVhfSVJRX0VUSEVSTkVUCSAzCS8qIG9uLWJvYXJkIEV0aG5lcm5ldCAqLworI2RlZmluZSBNSUNST0RFVl9MSU5VWF9JUlFfU0VSSUFMMgkgNAkvKiBTdXBlcklPIFNlcmlhbCAjMiAqLworI2RlZmluZSBNSUNST0RFVl9MSU5VWF9JUlFfVVNCX0hDCSA3CS8qIG9uLWJvYXJkIFVTQiBIQyAqLworI2RlZmluZSBNSUNST0RFVl9MSU5VWF9JUlFfTU9VU0UJMTIJLyogU3VwZXJJTyBQUy8yIE1vdXNlICovCisjZGVmaW5lIE1JQ1JPREVWX0xJTlVYX0lSUV9JREUyCQkxMwkvKiBTdXBlcklPIElERSAjMiAqLworI2RlZmluZSBNSUNST0RFVl9MSU5VWF9JUlFfSURFMQkJMTQJLyogU3VwZXJJTyBJREUgIzEgKi8KKworCS8qCisJICoJVGhlIGZvbGxvd2luZyBhcmUgdGhlIElSUSBudW1iZXJzIGZvciB0aGUgSU5UQyBvbiB0aGUgRlBHQSBmb3IgZXh0ZXJuYWwgaW50ZXJydXB0cy4KKwkgKglpLmUuIHRoZSBiaXRzIGluIHRoZSBJTlRDIHJlZ2lzdGVycyBpbiB0aGUgRlBHQS4KKwkgKi8KKyNkZWZpbmUgTUlDUk9ERVZfRlBHQV9JUlFfS0VZQk9BUkQJIDEJLyogU3VwZXJJTyBLZXlib2FyZCAqLworI2RlZmluZSBNSUNST0RFVl9GUEdBX0lSUV9TRVJJQUwxCSAzCS8qIFN1cGVySU8gU2VyaWFsICMxICovCisjZGVmaW5lIE1JQ1JPREVWX0ZQR0FfSVJRX1NFUklBTDIJIDQJLyogU3VwZXJJTyBTZXJpYWwgIzIgKi8KKyNkZWZpbmUgTUlDUk9ERVZfRlBHQV9JUlFfTU9VU0UJCTEyCS8qIFN1cGVySU8gUFMvMiBNb3VzZSAqLworI2RlZmluZSBNSUNST0RFVl9GUEdBX0lSUV9JREUxCQkxNAkvKiBTdXBlcklPIElERSAjMSAqLworI2RlZmluZSBNSUNST0RFVl9GUEdBX0lSUV9JREUyCQkxNQkvKiBTdXBlcklPIElERSAjMiAqLworI2RlZmluZSBNSUNST0RFVl9GUEdBX0lSUV9VU0JfSEMJMTYJLyogb24tYm9hcmQgVVNCIEhDICovCisjZGVmaW5lIE1JQ1JPREVWX0ZQR0FfSVJRX0VUSEVSTkVUCTE4CS8qIG9uLWJvYXJkIEV0aG5lcm5ldCAqLworCisjZGVmaW5lIE1JQ1JPREVWX0lSUV9QQ0lfSU5UQQkJIDgKKyNkZWZpbmUgTUlDUk9ERVZfSVJRX1BDSV9JTlRCCQkgOQorI2RlZmluZSBNSUNST0RFVl9JUlFfUENJX0lOVEMJCTEwCisjZGVmaW5lIE1JQ1JPREVWX0lSUV9QQ0lfSU5URAkJMTEKKworI2VuZGlmIC8qIF9BU01fU0hfSVJRX01JQ1JPREVWX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL21tYW4uaCBiL2luY2x1ZGUvYXNtLXNoL21tYW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWJhYjVmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvbW1hbi5oCkBAIC0wLDAgKzEsNDMgQEAKKyNpZm5kZWYgX19BU01fU0hfTU1BTl9ICisjZGVmaW5lIF9fQVNNX1NIX01NQU5fSAorCisjZGVmaW5lIFBST1RfUkVBRAkweDEJCS8qIHBhZ2UgY2FuIGJlIHJlYWQgKi8KKyNkZWZpbmUgUFJPVF9XUklURQkweDIJCS8qIHBhZ2UgY2FuIGJlIHdyaXR0ZW4gKi8KKyNkZWZpbmUgUFJPVF9FWEVDCTB4NAkJLyogcGFnZSBjYW4gYmUgZXhlY3V0ZWQgKi8KKyNkZWZpbmUgUFJPVF9TRU0JMHg4CQkvKiBwYWdlIG1heSBiZSB1c2VkIGZvciBhdG9taWMgb3BzICovCisjZGVmaW5lIFBST1RfTk9ORQkweDAJCS8qIHBhZ2UgY2FuIG5vdCBiZSBhY2Nlc3NlZCAqLworI2RlZmluZSBQUk9UX0dST1dTRE9XTgkweDAxMDAwMDAwCS8qIG1wcm90ZWN0IGZsYWc6IGV4dGVuZCBjaGFuZ2UgdG8gc3RhcnQgb2YgZ3Jvd3Nkb3duIHZtYSAqLworI2RlZmluZSBQUk9UX0dST1dTVVAJMHgwMjAwMDAwMAkvKiBtcHJvdGVjdCBmbGFnOiBleHRlbmQgY2hhbmdlIHRvIGVuZCBvZiBncm93c3VwIHZtYSAqLworCisjZGVmaW5lIE1BUF9TSEFSRUQJMHgwMQkJLyogU2hhcmUgY2hhbmdlcyAqLworI2RlZmluZSBNQVBfUFJJVkFURQkweDAyCQkvKiBDaGFuZ2VzIGFyZSBwcml2YXRlICovCisjZGVmaW5lIE1BUF9UWVBFCTB4MGYJCS8qIE1hc2sgZm9yIHR5cGUgb2YgbWFwcGluZyAqLworI2RlZmluZSBNQVBfRklYRUQJMHgxMAkJLyogSW50ZXJwcmV0IGFkZHIgZXhhY3RseSAqLworI2RlZmluZSBNQVBfQU5PTllNT1VTCTB4MjAJCS8qIGRvbid0IHVzZSBhIGZpbGUgKi8KKworI2RlZmluZSBNQVBfR1JPV1NET1dOCTB4MDEwMAkJLyogc3RhY2stbGlrZSBzZWdtZW50ICovCisjZGVmaW5lIE1BUF9ERU5ZV1JJVEUJMHgwODAwCQkvKiBFVFhUQlNZICovCisjZGVmaW5lIE1BUF9FWEVDVVRBQkxFCTB4MTAwMAkJLyogbWFyayBpdCBhcyBhbiBleGVjdXRhYmxlICovCisjZGVmaW5lIE1BUF9MT0NLRUQJMHgyMDAwCQkvKiBwYWdlcyBhcmUgbG9ja2VkICovCisjZGVmaW5lIE1BUF9OT1JFU0VSVkUJMHg0MDAwCQkvKiBkb24ndCBjaGVjayBmb3IgcmVzZXJ2YXRpb25zICovCisjZGVmaW5lIE1BUF9QT1BVTEFURQkweDgwMDAJCS8qIHBvcHVsYXRlIChwcmVmYXVsdCkgcGFnZSB0YWJsZXMgKi8KKyNkZWZpbmUgTUFQX05PTkJMT0NLCTB4MTAwMDAJCS8qIGRvIG5vdCBibG9jayBvbiBJTyAqLworCisjZGVmaW5lIE1TX0FTWU5DCTEJCS8qIHN5bmMgbWVtb3J5IGFzeW5jaHJvbm91c2x5ICovCisjZGVmaW5lIE1TX0lOVkFMSURBVEUJMgkJLyogaW52YWxpZGF0ZSB0aGUgY2FjaGVzICovCisjZGVmaW5lIE1TX1NZTkMJCTQJCS8qIHN5bmNocm9ub3VzIG1lbW9yeSBzeW5jICovCisKKyNkZWZpbmUgTUNMX0NVUlJFTlQJMQkJLyogbG9jayBhbGwgY3VycmVudCBtYXBwaW5ncyAqLworI2RlZmluZSBNQ0xfRlVUVVJFCTIJCS8qIGxvY2sgYWxsIGZ1dHVyZSBtYXBwaW5ncyAqLworCisjZGVmaW5lIE1BRFZfTk9STUFMCTB4MAkJLyogZGVmYXVsdCBwYWdlLWluIGJlaGF2aW9yICovCisjZGVmaW5lIE1BRFZfUkFORE9NCTB4MQkJLyogcGFnZS1pbiBtaW5pbXVtIHJlcXVpcmVkICovCisjZGVmaW5lIE1BRFZfU0VRVUVOVElBTAkweDIJCS8qIHJlYWQtYWhlYWQgYWdncmVzc2l2ZWx5ICovCisjZGVmaW5lIE1BRFZfV0lMTE5FRUQJMHgzCQkvKiBwcmUtZmF1bHQgcGFnZXMgKi8KKyNkZWZpbmUgTUFEVl9ET05UTkVFRAkweDQJCS8qIGRpc2NhcmQgdGhlc2UgcGFnZXMgKi8KKworLyogY29tcGF0aWJpbGl0eSBmbGFncyAqLworI2RlZmluZSBNQVBfQU5PTglNQVBfQU5PTllNT1VTCisjZGVmaW5lIE1BUF9GSUxFCTAKKworI2VuZGlmIC8qIF9fQVNNX1NIX01NQU5fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvbW11LmggYi9pbmNsdWRlL2FzbS1zaC9tbXUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmYwN2JlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvbW11LmgKQEAgLTAsMCArMSwyOSBAQAorI2lmbmRlZiBfX01NVV9ICisjZGVmaW5lIF9fTU1VX0gKKworI2lmICFkZWZpbmVkKENPTkZJR19NTVUpCisKK3N0cnVjdCBtbV9yYmxvY2tfc3RydWN0IHsKKwlpbnQJc2l6ZTsKKwlpbnQJcmVmY291bnQ7CisJdm9pZAkqa2Jsb2NrOworfTsKKworc3RydWN0IG1tX3RibG9ja19zdHJ1Y3QgeworCXN0cnVjdCBtbV9yYmxvY2tfc3RydWN0ICpyYmxvY2s7CisJc3RydWN0IG1tX3RibG9ja19zdHJ1Y3QgKm5leHQ7Cit9OworCit0eXBlZGVmIHN0cnVjdCB7CisJc3RydWN0IG1tX3RibG9ja19zdHJ1Y3QgdGJsb2NrOworCXVuc2lnbmVkIGxvbmcJCWVuZF9icms7Cit9IG1tX2NvbnRleHRfdDsKKworI2Vsc2UKKworLyogRGVmYXVsdCAidW5zaWduZWQgbG9uZyIgY29udGV4dCAqLwordHlwZWRlZiB1bnNpZ25lZCBsb25nIG1tX2NvbnRleHRfdDsKKworI2VuZGlmIC8qIENPTkZJR19NTVUgKi8KKyNlbmRpZiAvKiBfX01NSF9IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL21tdV9jb250ZXh0LmggYi9pbmNsdWRlL2FzbS1zaC9tbXVfY29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3NjBkMDYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9tbXVfY29udGV4dC5oCkBAIC0wLDAgKzEsMjA2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5IE5paWJlIFl1dGFrYQorICogQ29weXJpZ2h0IChDKSAyMDAzIFBhdWwgTXVuZHQKKyAqCisgKiBBU0lEIGhhbmRsaW5nIGlkZWEgdGFrZW4gZnJvbSBNSVBTIGltcGxlbWVudGF0aW9uLgorICovCisjaWZuZGVmIF9fQVNNX1NIX01NVV9DT05URVhUX0gKKyNkZWZpbmUgX19BU01fU0hfTU1VX0NPTlRFWFRfSAorI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGFzbS9jcHUvbW11X2NvbnRleHQuaD4KKyNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKy8qCisgKiBUaGUgTU1VICJjb250ZXh0IiBjb25zaXN0cyBvZiB0d28gdGhpbmdzOgorICogICAgKGEpIFRMQiBjYWNoZSB2ZXJzaW9uIChvciByb3VuZCwgY3ljbGUgd2hhdGV2ZXIgZXhwcmVzc2lvbiB5b3UgbGlrZSkKKyAqICAgIChiKSBBU0lEIChBZGRyZXNzIFNwYWNlIElEZW50aWZpZXIpCisgKi8KKworLyoKKyAqIENhY2hlIG9mIE1NVSBjb250ZXh0IGxhc3QgdXNlZC4KKyAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbW11X2NvbnRleHRfY2FjaGU7CisKKyNkZWZpbmUgTU1VX0NPTlRFWFRfQVNJRF9NQVNLCQkweDAwMDAwMGZmCisjZGVmaW5lIE1NVV9DT05URVhUX1ZFUlNJT05fTUFTSwkweGZmZmZmZjAwCisjZGVmaW5lIE1NVV9DT05URVhUX0ZJUlNUX1ZFUlNJT04JMHgwMDAwMDEwMAorI2RlZmluZSBOT19DT05URVhUCQkJMAorCisvKiBBU0lEIGlzIDgtYml0IHZhbHVlLCBzbyBpdCBjYW4ndCBiZSAweDEwMCAqLworI2RlZmluZSBNTVVfTk9fQVNJRAkJCTB4MTAwCisKKy8qCisgKiBWaXJ0dWFsIFBhZ2UgTnVtYmVyIG1hc2sKKyAqLworI2RlZmluZSBNTVVfVlBOX01BU0sJMHhmZmZmZjAwMAorCisjaWZkZWYgQ09ORklHX01NVQorLyoKKyAqIEdldCBNTVUgY29udGV4dCBpZiBuZWVkZWQuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQKK2dldF9tbXVfY29udGV4dChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlleHRlcm4gdm9pZCBmbHVzaF90bGJfYWxsKHZvaWQpOworCXVuc2lnbmVkIGxvbmcgbWMgPSBtbXVfY29udGV4dF9jYWNoZTsKKworCS8qIENoZWNrIGlmIHdlIGhhdmUgb2xkIHZlcnNpb24gb2YgY29udGV4dC4gKi8KKwlpZiAoKChtbS0+Y29udGV4dCBeIG1jKSAmIE1NVV9DT05URVhUX1ZFUlNJT05fTUFTSykgPT0gMCkKKwkJLyogSXQncyB1cCB0byBkYXRlLCBkbyBub3RoaW5nICovCisJCXJldHVybjsKKworCS8qIEl0J3Mgb2xkLCB3ZSBuZWVkIHRvIGdldCBuZXcgY29udGV4dCB3aXRoIG5ldyB2ZXJzaW9uLiAqLworCW1jID0gKyttbXVfY29udGV4dF9jYWNoZTsKKwlpZiAoIShtYyAmIE1NVV9DT05URVhUX0FTSURfTUFTSykpIHsKKwkJLyoKKwkJICogV2UgZXhoYXVzdCBBU0lEIG9mIHRoaXMgdmVyc2lvbi4KKwkJICogRmx1c2ggYWxsIFRMQiBhbmQgc3RhcnQgbmV3IGN5Y2xlLgorCQkgKi8KKwkJZmx1c2hfdGxiX2FsbCgpOworCQkvKgorCQkgKiBGaXggdmVyc2lvbjsgTm90ZSB0aGF0IHdlIGF2b2lkIHZlcnNpb24gIzAKKwkJICogdG8gZGlzdGluZ3VzaCBOT19DT05URVhULgorCQkgKi8KKwkJaWYgKCFtYykKKwkJCW1tdV9jb250ZXh0X2NhY2hlID0gbWMgPSBNTVVfQ09OVEVYVF9GSVJTVF9WRVJTSU9OOworCX0KKwltbS0+Y29udGV4dCA9IG1jOworfQorCisvKgorICogSW5pdGlhbGl6ZSB0aGUgY29udGV4dCByZWxhdGVkIGluZm8gZm9yIGEgbmV3IG1tX3N0cnVjdAorICogaW5zdGFuY2UuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIGludCBpbml0X25ld19jb250ZXh0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLAorCQkJCSAgICAgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwltbS0+Y29udGV4dCA9IE5PX0NPTlRFWFQ7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIERlc3Ryb3kgY29udGV4dCByZWxhdGVkIGluZm8gZm9yIGFuIG1tX3N0cnVjdCB0aGF0IGlzIGFib3V0CisgKiB0byBiZSBwdXQgdG8gcmVzdC4KKyAqLworc3RhdGljIF9faW5saW5lX18gdm9pZCBkZXN0cm95X2NvbnRleHQoc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJLyogRG8gbm90aGluZyAqLworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHNldF9hc2lkKHVuc2lnbmVkIGxvbmcgYXNpZCkKK3sKKwl1bnNpZ25lZCBsb25nIF9fZHVtbXk7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1vdi5sCSUyLCAlMFxuXHQiCisJCQkgICAgICAiYW5kCSUzLCAlMFxuXHQiCisJCQkgICAgICAib3IJJTEsICUwXG5cdCIKKwkJCSAgICAgICJtb3YubAklMCwgJTIiCisJCQkgICAgICA6ICI9JnIiIChfX2R1bW15KQorCQkJICAgICAgOiAiciIgKGFzaWQpLCAibSIgKF9fbShNTVVfUFRFSCkpLAorCQkJICAgICAgICAiciIgKDB4ZmZmZmZmMDApKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBnZXRfYXNpZCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgYXNpZDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fICgibW92LmwJJTEsICUwIgorCQkJICAgICAgOiAiPXIiIChhc2lkKQorCQkJICAgICAgOiAibSIgKF9fbShNTVVfUFRFSCkpKTsKKwlhc2lkICY9IE1NVV9DT05URVhUX0FTSURfTUFTSzsKKwlyZXR1cm4gYXNpZDsKK30KKworLyoKKyAqIEFmdGVyIHdlIGhhdmUgc2V0IGN1cnJlbnQtPm1tIHRvIGEgbmV3IHZhbHVlLCB0aGlzIGFjdGl2YXRlcworICogdGhlIGNvbnRleHQgZm9yIHRoZSBuZXcgbW0gc28gd2Ugc2VlIHRoZSBuZXcgbWFwcGluZ3MuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgYWN0aXZhdGVfY29udGV4dChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlnZXRfbW11X2NvbnRleHQobW0pOworCXNldF9hc2lkKG1tLT5jb250ZXh0ICYgTU1VX0NPTlRFWFRfQVNJRF9NQVNLKTsKK30KKworLyogTU1VX1RUQiBjYW4gYmUgdXNlZCBmb3Igb3B0aW1pemluZyB0aGUgZmF1bHQgaGFuZGxpbmcuCisgICAoQ3VycmVudGx5IG5vdCB1c2VkKSAqLworc3RhdGljIF9faW5saW5lX18gdm9pZCBzd2l0Y2hfbW0oc3RydWN0IG1tX3N0cnVjdCAqcHJldiwKKwkJCQkgc3RydWN0IG1tX3N0cnVjdCAqbmV4dCwKKwkJCQkgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJaWYgKGxpa2VseShwcmV2ICE9IG5leHQpKSB7CisJCXVuc2lnbmVkIGxvbmcgX19wZ2RpciA9ICh1bnNpZ25lZCBsb25nKW5leHQtPnBnZDsKKworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygibW92LmwJJTAsICUxIgorCQkJCSAgICAgOiAvKiBubyBvdXRwdXQgKi8KKwkJCQkgICAgIDogInIiIChfX3BnZGlyKSwgIm0iIChfX20oTU1VX1RUQikpKTsKKwkJYWN0aXZhdGVfY29udGV4dChuZXh0KTsKKwl9Cit9CisKKyNkZWZpbmUgZGVhY3RpdmF0ZV9tbSh0c2ssbW0pCWRvIHsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBhY3RpdmF0ZV9tbShwcmV2LCBuZXh0KSBcCisJc3dpdGNoX21tKChwcmV2KSwobmV4dCksTlVMTCkKKworc3RhdGljIF9faW5saW5lX18gdm9pZAorZW50ZXJfbGF6eV90bGIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworfQorI2Vsc2UgLyogIUNPTkZJR19NTVUgKi8KKyNkZWZpbmUgZ2V0X21tdV9jb250ZXh0KG1tKQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBpbml0X25ld19jb250ZXh0KHRzayxtbSkJKDApCisjZGVmaW5lIGRlc3Ryb3lfY29udGV4dChtbSkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgc2V0X2FzaWQoYXNpZCkJCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGdldF9hc2lkKCkJCQkoMCkKKyNkZWZpbmUgYWN0aXZhdGVfY29udGV4dChtbSkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgc3dpdGNoX21tKHByZXYsbmV4dCx0c2spCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZGVhY3RpdmF0ZV9tbSh0c2ssbW0pCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGFjdGl2YXRlX21tKHByZXYsbmV4dCkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZW50ZXJfbGF6eV90bGIobW0sdHNrKQkJZG8geyB9IHdoaWxlICgwKQorI2VuZGlmIC8qIENPTkZJR19NTVUgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TSDMpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TSDQpCisvKgorICogSWYgdGhpcyBwcm9jZXNzb3IgaGFzIGFuIE1NVSwgd2UgbmVlZCBtZXRob2RzIHRvIHR1cm4gaXQgb2ZmL29uIC4uCisgKiBwYWdpbmdfaW5pdCgpIHdpbGwgYWxzbyBoYXZlIHRvIGJlIHVwZGF0ZWQgZm9yIHRoZSBwcm9jZXNzb3IgaW4KKyAqIHF1ZXN0aW9uLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgZW5hYmxlX21tdSh2b2lkKQoreworCS8qIEVuYWJsZSBNTVUgKi8KKwljdHJsX291dGwoTU1VX0NPTlRST0xfSU5JVCwgTU1VQ1IpOworCisJLyogVGhlIG1hbnVhbCBzdWdnZXN0cyBkb2luZyBzb21lIG5vcHMgYWZ0ZXIgdHVybmluZyBvbiB0aGUgTU1VICovCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJub3A7bm9wO25vcDtub3A7bm9wO25vcDtub3A7bm9wXG5cdCIpOworCisJaWYgKG1tdV9jb250ZXh0X2NhY2hlID09IE5PX0NPTlRFWFQpCisJCW1tdV9jb250ZXh0X2NhY2hlID0gTU1VX0NPTlRFWFRfRklSU1RfVkVSU0lPTjsKKworCXNldF9hc2lkKG1tdV9jb250ZXh0X2NhY2hlICYgTU1VX0NPTlRFWFRfQVNJRF9NQVNLKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRpc2FibGVfbW11KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBjcjsKKworCWNyID0gY3RybF9pbmwoTU1VQ1IpOworCWNyICY9IH5NTVVfQ09OVFJPTF9JTklUOworCWN0cmxfb3V0bChjciwgTU1VQ1IpOworCV9fYXNtX18gX192b2xhdGlsZV9fICgibm9wO25vcDtub3A7bm9wO25vcDtub3A7bm9wO25vcFxuXHQiKTsKK30KKyNlbHNlCisvKgorICogTU1VIGNvbnRyb2wgaGFuZGxlcnMgZm9yIHByb2Nlc3NvcnMgbGFja2luZyBtZW1vcnkKKyAqIG1hbmFnZW1lbnQgaGFyZHdhcmUuCisgKi8KKyNkZWZpbmUgZW5hYmxlX21tdSgpCWRvIHsgQlVHKCk7IH0gd2hpbGUgKDApCisjZGVmaW5lIGRpc2FibGVfbW11KCkJZG8geyBCVUcoKTsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9fQVNNX1NIX01NVV9DT05URVhUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL21tem9uZS5oIGIvaW5jbHVkZS9hc20tc2gvbW16b25lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU3NDA2NgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL21tem9uZS5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tc2gvbW16b25lLmgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaWZuZGVmIF9fQVNNX1NIX01NWk9ORV9ICisjZGVmaW5lIF9fQVNNX1NIX01NWk9ORV9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2lmZGVmIENPTkZJR19ESVNDT05USUdNRU0KKworLyogQ3VycmVudGx5LCBqdXN0IGZvciBIUDY5MCAqLworI2RlZmluZSBQSFlTQUREUl9UT19OSUQocGh5cykJKCgoKHBoeXMpIC0gX19NRU1PUllfU1RBUlQpID49IDB4MDEwMDAwMDApPzE6MCkKKworZXh0ZXJuIHBnX2RhdGFfdCBkaXNjb250aWdfcGFnZV9kYXRhW01BWF9OVU1OT0RFU107CitleHRlcm4gYm9vdG1lbV9kYXRhX3QgZGlzY29udGlnX25vZGVfYmRhdGFbTUFYX05VTU5PREVTXTsKKworLyoKKyAqIEZvbGxvd2luZyBhcmUgbWFjcm9zIHRoYXQgZWFjaCBudW1hIGltcGxtZW50YXRpb24gbXVzdCBkZWZpbmUuCisgKi8KKworLyoKKyAqIEdpdmVuIGEga2VybmVsIGFkZHJlc3MsIGZpbmQgdGhlIGhvbWUgbm9kZSBvZiB0aGUgdW5kZXJseWluZyBtZW1vcnkuCisgKi8KKyNkZWZpbmUgS1ZBRERSX1RPX05JRChrYWRkcikJUEhZU0FERFJfVE9fTklEKF9fcGEoa2FkZHIpKQorCisvKgorICogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgbm9kZSBkYXRhIGZvciBub2RlIG4uCisgKi8KKyNkZWZpbmUgTk9ERV9EQVRBKG5pZCkJCSgmZGlzY29udGlnX3BhZ2VfZGF0YVtuaWRdKQorCisvKgorICogTk9ERV9NRU1fTUFQIGdpdmVzIHRoZSBrYWRkciBmb3IgdGhlIG1lbV9tYXAgb2YgdGhlIG5vZGUuCisgKi8KKyNkZWZpbmUgTk9ERV9NRU1fTUFQKG5pZCkJKE5PREVfREFUQShuaWQpLT5ub2RlX21lbV9tYXApCisKKyNkZWZpbmUgcGh5c190b19wYWdlKHBoeXMpCQkJCQkJXAorKHsgdW5zaWduZWQgaW50IG5vZGUgPSBQSFlTQUREUl9UT19OSUQocGh5cyk7IAkJICAgICAgCQlcCisgICBOT0RFX01FTV9NQVAobm9kZSkJCQkJIAkJIAlcCisgICAgICsgKCgocGh5cykgLSBOT0RFX0RBVEEobm9kZSktPm5vZGVfc3RhcnRfcGFkZHIpID4+IFBBR0VfU0hJRlQpOyB9KQorCitzdGF0aWMgaW5saW5lIGludCBpc192YWxpZF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQoreworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9OVU1OT0RFUzsgaSsrKSB7CisJCWlmIChwYWdlID49IE5PREVfTUVNX01BUChpKSAmJgorCQkgICAgcGFnZSA8IE5PREVfTUVNX01BUChpKSArIE5PREVfREFUQShpKS0+bm9kZV9zaXplKQorCQkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCisjZGVmaW5lIFZBTElEX1BBR0UocGFnZSkJaXNfdmFsaWRfcGFnZShwYWdlKQorI2RlZmluZSBwYWdlX3RvX3BoeXMocGFnZSkJUEhZU0FERFIocGFnZV9hZGRyZXNzKHBhZ2UpKQorCisjZW5kaWYgLyogQ09ORklHX0RJU0NPTlRJR01FTSAqLworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9tb2R1bGUuaCBiL2luY2x1ZGUvYXNtLXNoL21vZHVsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExOGQ1YTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9tb2R1bGUuaApAQCAtMCwwICsxLDQwIEBACisjaWZuZGVmIF9BU01fU0hfTU9EVUxFX0gKKyNkZWZpbmUgX0FTTV9TSF9NT0RVTEVfSAorCisvKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBTSCBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgbW9kdWxlIGNvZGUuCisgKi8KKworc3RydWN0IG1vZF9hcmNoX3NwZWNpZmljIHsKKwkvKiBOb3RoaW5nIHRvIHNlZSBoZXJlIC4uICovCit9OworCisjZGVmaW5lIEVsZl9TaGRyCQlFbGYzMl9TaGRyCisjZGVmaW5lIEVsZl9TeW0JCQlFbGYzMl9TeW0KKyNkZWZpbmUgRWxmX0VoZHIJCUVsZjMyX0VoZHIKKworI2lmZGVmIENPTkZJR19DUFVfTElUVExFX0VORElBTgorIyBpZmRlZiBDT05GSUdfQ1BVX1NIMgorIyAgZGVmaW5lIE1PRFVMRV9QUk9DX0ZBTUlMWSAiU0gyTEUgIgorIyBlbGlmIGRlZmluZWQgIENPTkZJR19DUFVfU0gzCisjICBkZWZpbmUgTU9EVUxFX1BST0NfRkFNSUxZICJTSDNMRSAiCisjIGVsaWYgZGVmaW5lZCAgQ09ORklHX0NQVV9TSDQKKyMgIGRlZmluZSBNT0RVTEVfUFJPQ19GQU1JTFkgIlNINExFICIKKyMgZWxzZQorIyAgZXJyb3IgdW5rbm93biBwcm9jZXNzb3IgZmFtaWx5CisjIGVuZGlmCisjZWxzZQorIyBpZmRlZiBDT05GSUdfQ1BVX1NIMgorIyAgZGVmaW5lIE1PRFVMRV9QUk9DX0ZBTUlMWSAiU0gyQkUgIgorIyBlbGlmIGRlZmluZWQgIENPTkZJR19DUFVfU0gzCisjICBkZWZpbmUgTU9EVUxFX1BST0NfRkFNSUxZICJTSDNCRSAiCisjIGVsaWYgZGVmaW5lZCAgQ09ORklHX0NQVV9TSDQKKyMgIGRlZmluZSBNT0RVTEVfUFJPQ19GQU1JTFkgIlNINEJFICIKKyMgZWxzZQorIyAgZXJyb3IgdW5rbm93biBwcm9jZXNzb3IgZmFtaWx5CisjIGVuZGlmCisjZW5kaWYKKworI2RlZmluZSBNT0RVTEVfQVJDSF9WRVJNQUdJQyBNT0RVTEVfUFJPQ19GQU1JTFkKKworI2VuZGlmIC8qIF9BU01fU0hfTU9EVUxFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL21wYzEyMTEvZG1hLmggYi9pbmNsdWRlL2FzbS1zaC9tcGMxMjExL2RtYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhMmZkYWIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9tcGMxMjExL2RtYS5oCkBAIC0wLDAgKzEsMzA0IEBACisvKiAkSWQ6IGRtYS5oLHYgMS43IDE5OTIvMTIvMTQgMDA6Mjk6MzQgcm9vdCBFeHAgcm9vdCAkCisgKiBsaW51eC9pbmNsdWRlL2FzbS9kbWEuaDogRGVmaW5lcyBmb3IgdXNpbmcgYW5kIGFsbG9jYXRpbmcgZG1hIGNoYW5uZWxzLgorICogV3JpdHRlbiBieSBIZW5udXMgQmVyZ21hbiwgMTk5Mi4KKyAqIEhpZ2ggRE1BIGNoYW5uZWwgc3VwcG9ydCAmIGluZm8gYnkgSGFubnUgU2F2b2xhaW5lbgorICogYW5kIEpvaG4gQm95ZCwgTm92LiAxOTkyLgorICovCisKKyNpZm5kZWYgX0FTTV9NUEMxMjExX0RNQV9ICisjZGVmaW5lIF9BU01fTVBDMTIxMV9ETUFfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4JLyogQW5kIHNwaW5sb2NrcyAqLworI2luY2x1ZGUgPGFzbS9pby5oPgkJLyogbmVlZCBieXRlIElPICovCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworCisjaWZkZWYgSEFWRV9SRUFMTFlfU0xPV19ETUFfQ09OVFJPTExFUgorI2RlZmluZSBkbWFfb3V0YglvdXRiX3AKKyNlbHNlCisjZGVmaW5lIGRtYV9vdXRiCW91dGIKKyNlbmRpZgorCisjZGVmaW5lIGRtYV9pbmIJCWluYgorCisvKgorICogTk9URVMgYWJvdXQgRE1BIHRyYW5zZmVyczoKKyAqCisgKiAgY29udHJvbGxlciAxOiBjaGFubmVscyAwLTMsIGJ5dGUgb3BlcmF0aW9ucywgcG9ydHMgMDAtMUYKKyAqICBjb250cm9sbGVyIDI6IGNoYW5uZWxzIDQtNywgd29yZCBvcGVyYXRpb25zLCBwb3J0cyBDMC1ERgorICoKKyAqICAtIEFMTCByZWdpc3RlcnMgYXJlIDggYml0cyBvbmx5LCByZWdhcmRsZXNzIG9mIHRyYW5zZmVyIHNpemUKKyAqICAtIGNoYW5uZWwgNCBpcyBub3QgdXNlZCAtIGNhc2NhZGVzIDEgaW50byAyLgorICogIC0gY2hhbm5lbHMgMC0zIGFyZSBieXRlIC0gYWRkcmVzc2VzL2NvdW50cyBhcmUgZm9yIHBoeXNpY2FsIGJ5dGVzCisgKiAgLSBjaGFubmVscyA1LTcgYXJlIHdvcmQgLSBhZGRyZXNzZXMvY291bnRzIGFyZSBmb3IgcGh5c2ljYWwgd29yZHMKKyAqICAtIHRyYW5zZmVycyBtdXN0IG5vdCBjcm9zcyBwaHlzaWNhbCA2NEsgKDAtMykgb3IgMTI4SyAoNS03KSBib3VuZGFyaWVzCisgKiAgLSB0cmFuc2ZlciBjb3VudCBsb2FkZWQgdG8gcmVnaXN0ZXJzIGlzIDEgbGVzcyB0aGFuIGFjdHVhbCBjb3VudAorICogIC0gY29udHJvbGxlciAyIG9mZnNldHMgYXJlIGFsbCBldmVuICgyeCBvZmZzZXRzIGZvciBjb250cm9sbGVyIDEpCisgKiAgLSBwYWdlIHJlZ2lzdGVycyBmb3IgNS03IGRvbid0IHVzZSBkYXRhIGJpdCAwLCByZXByZXNlbnQgMTI4SyBwYWdlcworICogIC0gcGFnZSByZWdpc3RlcnMgZm9yIDAtMyB1c2UgYml0IDAsIHJlcHJlc2VudCA2NEsgcGFnZXMKKyAqCisgKiBETUEgdHJhbnNmZXJzIGFyZSBsaW1pdGVkIHRvIHRoZSBsb3dlciAxNk1CIG9mIF9waHlzaWNhbF8gbWVtb3J5LiAgCisgKiBOb3RlIHRoYXQgYWRkcmVzc2VzIGxvYWRlZCBpbnRvIHJlZ2lzdGVycyBtdXN0IGJlIF9waHlzaWNhbF8gYWRkcmVzc2VzLAorICogbm90IGxvZ2ljYWwgYWRkcmVzc2VzICh3aGljaCBtYXkgZGlmZmVyIGlmIHBhZ2luZyBpcyBhY3RpdmUpLgorICoKKyAqICBBZGRyZXNzIG1hcHBpbmcgZm9yIGNoYW5uZWxzIDAtMzoKKyAqCisgKiAgIEEyMyAuLi4gQTE2IEExNSAuLi4gQTggIEE3IC4uLiBBMCAgICAoUGh5c2ljYWwgYWRkcmVzc2VzKQorICogICAgfCAgLi4uICB8ICAgfCAgLi4uIHwgICB8ICAuLi4gfAorICogICAgfCAgLi4uICB8ICAgfCAgLi4uIHwgICB8ICAuLi4gfAorICogICAgfCAgLi4uICB8ICAgfCAgLi4uIHwgICB8ICAuLi4gfAorICogICBQNyAgLi4uICBQMCAgQTcgLi4uIEEwICBBNyAuLi4gQTAgICAKKyAqIHwgICAgUGFnZSAgICB8IEFkZHIgTVNCIHwgQWRkciBMU0IgfCAgIChETUEgcmVnaXN0ZXJzKQorICoKKyAqICBBZGRyZXNzIG1hcHBpbmcgZm9yIGNoYW5uZWxzIDUtNzoKKyAqCisgKiAgIEEyMyAuLi4gQTE3IEExNiBBMTUgLi4uIEE5IEE4IEE3IC4uLiBBMSBBMCAgICAoUGh5c2ljYWwgYWRkcmVzc2VzKQorICogICAgfCAgLi4uICB8ICAgXCAgIFwgICAuLi4gXCAgXCAgXCAgLi4uIFwgIFwKKyAqICAgIHwgIC4uLiAgfCAgICBcICAgXCAgIC4uLiBcICBcICBcICAuLi4gXCAgKG5vdCB1c2VkKQorICogICAgfCAgLi4uICB8ICAgICBcICAgXCAgIC4uLiBcICBcICBcICAuLi4gXAorICogICBQNyAgLi4uICBQMSAoMCkgQTcgQTYgIC4uLiBBMCBBNyBBNiAuLi4gQTAgICAKKyAqIHwgICAgICBQYWdlICAgICAgfCAgQWRkciBNU0IgICB8ICBBZGRyIExTQiAgfCAgIChETUEgcmVnaXN0ZXJzKQorICoKKyAqIEFnYWluLCBjaGFubmVscyA1LTcgdHJhbnNmZXIgX3BoeXNpY2FsXyB3b3JkcyAoMTYgYml0cyksIHNvIGFkZHJlc3NlcworICogYW5kIGNvdW50cyBfbXVzdF8gYmUgd29yZC1hbGlnbmVkICh0aGUgbG93ZXN0IGFkZHJlc3MgYml0IGlzIF9pZ25vcmVkXyBhdAorICogdGhlIGhhcmR3YXJlIGxldmVsLCBzbyBvZGQtYnl0ZSB0cmFuc2ZlcnMgYXJlbid0IHBvc3NpYmxlKS4KKyAqCisgKiBUcmFuc2ZlciBjb3VudCAoX25vdCAjIGJ5dGVzXykgaXMgbGltaXRlZCB0byA2NEssIHJlcHJlc2VudGVkIGFzIGFjdHVhbAorICogY291bnQgLSAxIDogNjRLID0+IDB4RkZGRiwgMSA9PiAweDAwMDAuICBUaHVzLCBjb3VudCBpcyBhbHdheXMgMSBvciBtb3JlLAorICogYW5kIHVwIHRvIDEyOEsgYnl0ZXMgbWF5IGJlIHRyYW5zZmVycmVkIG9uIGNoYW5uZWxzIDUtNyBpbiBvbmUgb3BlcmF0aW9uLiAKKyAqCisgKi8KKworI2RlZmluZSBNQVhfRE1BX0NIQU5ORUxTCTgKKworLyogVGhlIG1heGltdW0gYWRkcmVzcyB0aGF0IHdlIGNhbiBwZXJmb3JtIGEgRE1BIHRyYW5zZmVyIHRvIG9uIHRoaXMgcGxhdGZvcm0gKi8KKyNkZWZpbmUgTUFYX0RNQV9BRERSRVNTICAgICAgKFBBR0VfT0ZGU0VUKzB4MTAwMDAwMDApCisKKy8qIDgyMzcgRE1BIGNvbnRyb2xsZXJzICovCisjZGVmaW5lIElPX0RNQTFfQkFTRQkweDAwCS8qIDggYml0IHNsYXZlIERNQSwgY2hhbm5lbHMgMC4uMyAqLworI2RlZmluZSBJT19ETUEyX0JBU0UJMHhDMAkvKiAxNiBiaXQgbWFzdGVyIERNQSwgY2ggNCg9c2xhdmUgaW5wdXQpLi43ICovCisKKy8qIERNQSBjb250cm9sbGVyIHJlZ2lzdGVycyAqLworI2RlZmluZSBETUExX0NNRF9SRUcJCTB4MDgJLyogY29tbWFuZCByZWdpc3RlciAodykgKi8KKyNkZWZpbmUgRE1BMV9TVEFUX1JFRwkJMHgwOAkvKiBzdGF0dXMgcmVnaXN0ZXIgKHIpICovCisjZGVmaW5lIERNQTFfUkVRX1JFRyAgICAgICAgICAgIDB4MDkgICAgLyogcmVxdWVzdCByZWdpc3RlciAodykgKi8KKyNkZWZpbmUgRE1BMV9NQVNLX1JFRwkJMHgwQQkvKiBzaW5nbGUtY2hhbm5lbCBtYXNrICh3KSAqLworI2RlZmluZSBETUExX01PREVfUkVHCQkweDBCCS8qIG1vZGUgcmVnaXN0ZXIgKHcpICovCisjZGVmaW5lIERNQTFfQ0xFQVJfRkZfUkVHCTB4MEMJLyogY2xlYXIgcG9pbnRlciBmbGlwLWZsb3AgKHcpICovCisjZGVmaW5lIERNQTFfVEVNUF9SRUcgICAgICAgICAgIDB4MEQgICAgLyogVGVtcG9yYXJ5IFJlZ2lzdGVyIChyKSAqLworI2RlZmluZSBETUExX1JFU0VUX1JFRwkJMHgwRAkvKiBNYXN0ZXIgQ2xlYXIgKHcpICovCisjZGVmaW5lIERNQTFfQ0xSX01BU0tfUkVHICAgICAgIDB4MEUgICAgLyogQ2xlYXIgTWFzayAqLworI2RlZmluZSBETUExX01BU0tfQUxMX1JFRyAgICAgICAweDBGICAgIC8qIGFsbC1jaGFubmVscyBtYXNrICh3KSAqLworCisjZGVmaW5lIERNQTJfQ01EX1JFRwkJMHhEMAkvKiBjb21tYW5kIHJlZ2lzdGVyICh3KSAqLworI2RlZmluZSBETUEyX1NUQVRfUkVHCQkweEQwCS8qIHN0YXR1cyByZWdpc3RlciAocikgKi8KKyNkZWZpbmUgRE1BMl9SRVFfUkVHICAgICAgICAgICAgMHhEMiAgICAvKiByZXF1ZXN0IHJlZ2lzdGVyICh3KSAqLworI2RlZmluZSBETUEyX01BU0tfUkVHCQkweEQ0CS8qIHNpbmdsZS1jaGFubmVsIG1hc2sgKHcpICovCisjZGVmaW5lIERNQTJfTU9ERV9SRUcJCTB4RDYJLyogbW9kZSByZWdpc3RlciAodykgKi8KKyNkZWZpbmUgRE1BMl9DTEVBUl9GRl9SRUcJMHhEOAkvKiBjbGVhciBwb2ludGVyIGZsaXAtZmxvcCAodykgKi8KKyNkZWZpbmUgRE1BMl9URU1QX1JFRyAgICAgICAgICAgMHhEQSAgICAvKiBUZW1wb3JhcnkgUmVnaXN0ZXIgKHIpICovCisjZGVmaW5lIERNQTJfUkVTRVRfUkVHCQkweERBCS8qIE1hc3RlciBDbGVhciAodykgKi8KKyNkZWZpbmUgRE1BMl9DTFJfTUFTS19SRUcgICAgICAgMHhEQyAgICAvKiBDbGVhciBNYXNrICovCisjZGVmaW5lIERNQTJfTUFTS19BTExfUkVHICAgICAgIDB4REUgICAgLyogYWxsLWNoYW5uZWxzIG1hc2sgKHcpICovCisKKyNkZWZpbmUgRE1BX0FERFJfMCAgICAgICAgICAgICAgMHgwMCAgICAvKiBETUEgYWRkcmVzcyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgRE1BX0FERFJfMSAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBETUFfQUREUl8yICAgICAgICAgICAgICAweDA0CisjZGVmaW5lIERNQV9BRERSXzMgICAgICAgICAgICAgIDB4MDYKKyNkZWZpbmUgRE1BX0FERFJfNCAgICAgICAgICAgICAgMHhDMAorI2RlZmluZSBETUFfQUREUl81ICAgICAgICAgICAgICAweEM0CisjZGVmaW5lIERNQV9BRERSXzYgICAgICAgICAgICAgIDB4QzgKKyNkZWZpbmUgRE1BX0FERFJfNyAgICAgICAgICAgICAgMHhDQworCisjZGVmaW5lIERNQV9DTlRfMCAgICAgICAgICAgICAgIDB4MDEgICAgLyogRE1BIGNvdW50IHJlZ2lzdGVycyAqLworI2RlZmluZSBETUFfQ05UXzEgICAgICAgICAgICAgICAweDAzCisjZGVmaW5lIERNQV9DTlRfMiAgICAgICAgICAgICAgIDB4MDUKKyNkZWZpbmUgRE1BX0NOVF8zICAgICAgICAgICAgICAgMHgwNworI2RlZmluZSBETUFfQ05UXzQgICAgICAgICAgICAgICAweEMyCisjZGVmaW5lIERNQV9DTlRfNSAgICAgICAgICAgICAgIDB4QzYKKyNkZWZpbmUgRE1BX0NOVF82ICAgICAgICAgICAgICAgMHhDQQorI2RlZmluZSBETUFfQ05UXzcgICAgICAgICAgICAgICAweENFCisKKyNkZWZpbmUgRE1BX1BBR0VfMCAgICAgICAgICAgICAgMHg4NyAgICAvKiBETUEgcGFnZSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgRE1BX1BBR0VfMSAgICAgICAgICAgICAgMHg4MworI2RlZmluZSBETUFfUEFHRV8yICAgICAgICAgICAgICAweDgxCisjZGVmaW5lIERNQV9QQUdFXzMgICAgICAgICAgICAgIDB4ODIKKyNkZWZpbmUgRE1BX1BBR0VfNSAgICAgICAgICAgICAgMHg4QgorI2RlZmluZSBETUFfUEFHRV82ICAgICAgICAgICAgICAweDg5CisjZGVmaW5lIERNQV9QQUdFXzcgICAgICAgICAgICAgIDB4OEEKKworI2RlZmluZSBETUFfTU9ERV9SRUFECTB4NDQJLyogSS9PIHRvIG1lbW9yeSwgbm8gYXV0b2luaXQsIGluY3JlbWVudCwgc2luZ2xlIG1vZGUgKi8KKyNkZWZpbmUgRE1BX01PREVfV1JJVEUJMHg0OAkvKiBtZW1vcnkgdG8gSS9PLCBubyBhdXRvaW5pdCwgaW5jcmVtZW50LCBzaW5nbGUgbW9kZSAqLworI2RlZmluZSBETUFfTU9ERV9DQVNDQURFIDB4QzAgICAvKiBwYXNzIHRocnUgRFJFUS0+SFJRLCBEQUNLPC1ITERBIG9ubHkgKi8KKworI2RlZmluZSBETUFfQVVUT0lOSVQJMHgxMAorCisKK2V4dGVybiBzcGlubG9ja190ICBkbWFfc3Bpbl9sb2NrOworCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGNsYWltX2RtYV9sb2NrKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZG1hX3NwaW5fbG9jaywgZmxhZ3MpOworCXJldHVybiBmbGFnczsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCByZWxlYXNlX2RtYV9sb2NrKHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZG1hX3NwaW5fbG9jaywgZmxhZ3MpOworfQorCisvKiBlbmFibGUvZGlzYWJsZSBhIHNwZWNpZmljIERNQSBjaGFubmVsICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGVuYWJsZV9kbWEodW5zaWduZWQgaW50IGRtYW5yKQoreworCWlmIChkbWFucjw9MykKKwkJZG1hX291dGIoZG1hbnIsICBETUExX01BU0tfUkVHKTsKKwllbHNlCisJCWRtYV9vdXRiKGRtYW5yICYgMywgIERNQTJfTUFTS19SRUcpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGRpc2FibGVfZG1hKHVuc2lnbmVkIGludCBkbWFucikKK3sKKwlpZiAoZG1hbnI8PTMpCisJCWRtYV9vdXRiKGRtYW5yIHwgNCwgIERNQTFfTUFTS19SRUcpOworCWVsc2UKKwkJZG1hX291dGIoKGRtYW5yICYgMykgfCA0LCAgRE1BMl9NQVNLX1JFRyk7Cit9CisKKy8qIENsZWFyIHRoZSAnRE1BIFBvaW50ZXIgRmxpcCBGbG9wJy4KKyAqIFdyaXRlIDAgZm9yIExTQi9NU0IsIDEgZm9yIE1TQi9MU0IgYWNjZXNzLgorICogVXNlIHRoaXMgb25jZSB0byBpbml0aWFsaXplIHRoZSBGRiB0byBhIGtub3duIHN0YXRlLgorICogQWZ0ZXIgdGhhdCwga2VlcCB0cmFjayBvZiBpdC4gOi0pCisgKiAtLS0gSW4gb3JkZXIgdG8gZG8gdGhhdCwgdGhlIERNQSByb3V0aW5lcyBiZWxvdyBzaG91bGQgLS0tCisgKiAtLS0gb25seSBiZSB1c2VkIHdoaWxlIGhvbGRpbmcgdGhlIERNQSBsb2NrICEgLS0tCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgY2xlYXJfZG1hX2ZmKHVuc2lnbmVkIGludCBkbWFucikKK3sKKwlpZiAoZG1hbnI8PTMpCisJCWRtYV9vdXRiKDAsICBETUExX0NMRUFSX0ZGX1JFRyk7CisJZWxzZQorCQlkbWFfb3V0YigwLCAgRE1BMl9DTEVBUl9GRl9SRUcpOworfQorCisvKiBzZXQgbW9kZSAoYWJvdmUpIGZvciBhIHNwZWNpZmljIERNQSBjaGFubmVsICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHNldF9kbWFfbW9kZSh1bnNpZ25lZCBpbnQgZG1hbnIsIGNoYXIgbW9kZSkKK3sKKwlpZiAoZG1hbnI8PTMpCisJCWRtYV9vdXRiKG1vZGUgfCBkbWFuciwgIERNQTFfTU9ERV9SRUcpOworCWVsc2UKKwkJZG1hX291dGIobW9kZSB8IChkbWFuciYzKSwgIERNQTJfTU9ERV9SRUcpOworfQorCisvKiBTZXQgb25seSB0aGUgcGFnZSByZWdpc3RlciBiaXRzIG9mIHRoZSB0cmFuc2ZlciBhZGRyZXNzLgorICogVGhpcyBpcyB1c2VkIGZvciBzdWNjZXNzaXZlIHRyYW5zZmVycyB3aGVuIHdlIGtub3cgdGhlIGNvbnRlbnRzIG9mCisgKiB0aGUgbG93ZXIgMTYgYml0cyBvZiB0aGUgRE1BIGN1cnJlbnQgYWRkcmVzcyByZWdpc3RlciwgYnV0IGEgNjRrIGJvdW5kYXJ5CisgKiBtYXkgaGF2ZSBiZWVuIGNyb3NzZWQuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgc2V0X2RtYV9wYWdlKHVuc2lnbmVkIGludCBkbWFuciwgdW5zaWduZWQgaW50IHBhZ2VucikKK3sKKwlzd2l0Y2goZG1hbnIpIHsKKwkJY2FzZSAwOgorCQkJZG1hX291dGIoIHBhZ2VuciAgICAgICAmIDB4ZmYsIERNQV9QQUdFXzApOworCQkJZG1hX291dGIoKHBhZ2VuciA+PiA4KSAmIDB4ZmYsIERNQV9QQUdFXzAgKyAweDQwMCk7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJZG1hX291dGIoIHBhZ2VuciAgICAgICAmIDB4ZmYsIERNQV9QQUdFXzEpOworCQkJZG1hX291dGIoKHBhZ2VuciA+PiA4KSAmIDB4ZmYsIERNQV9QQUdFXzEgKyAweDQwMCk7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJZG1hX291dGIoIHBhZ2VuciAgICAgICAmIDB4ZmYsIERNQV9QQUdFXzIpOworCQkJZG1hX291dGIoKHBhZ2VuciA+PiA4KSAmIDB4ZmYsIERNQV9QQUdFXzIgKyAweDQwMCk7CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJZG1hX291dGIoIHBhZ2VuciAgICAgICAmIDB4ZmYsIERNQV9QQUdFXzMpOworCQkJZG1hX291dGIoKHBhZ2VuciA+PiA4KSAmIDB4ZmYsIERNQV9QQUdFXzMgKyAweDQwMCk7CisJCQlicmVhazsKKwkJY2FzZSA1OgorCQkJZG1hX291dGIoIHBhZ2VuciAgICAgICAmIDB4ZmUsIERNQV9QQUdFXzUpOworCQkJZG1hX291dGIoKHBhZ2VuciA+PiA4KSAmIDB4ZmYsIERNQV9QQUdFXzUgKyAweDQwMCk7CisJCQlicmVhazsKKwkJY2FzZSA2OgorCQkJZG1hX291dGIoIHBhZ2VuciAgICAgICAmIDB4ZmUsIERNQV9QQUdFXzYpOworCQkJZG1hX291dGIoKHBhZ2VuciA+PiA4KSAmIDB4ZmYsIERNQV9QQUdFXzYgKyAweDQwMCk7CisJCQlicmVhazsKKwkJY2FzZSA3OgorCQkJZG1hX291dGIoIHBhZ2VuciAgICAgICAmIDB4ZmUsIERNQV9QQUdFXzcpOworCQkJZG1hX291dGIoKHBhZ2VuciA+PiA4KSAmIDB4ZmYsIERNQV9QQUdFXzcgKyAweDQwMCk7CisJCQlicmVhazsKKyAgICAgICAJfQorfQorCisKKy8qIFNldCB0cmFuc2ZlciBhZGRyZXNzICYgcGFnZSBiaXRzIGZvciBzcGVjaWZpYyBETUEgY2hhbm5lbC4KKyAqIEFzc3VtZXMgZG1hIGZsaXBmbG9wIGlzIGNsZWFyLgorICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHNldF9kbWFfYWRkcih1bnNpZ25lZCBpbnQgZG1hbnIsIHVuc2lnbmVkIGludCBhKQoreworCXNldF9kbWFfcGFnZShkbWFuciwgYT4+MTYpOworCWlmIChkbWFuciA8PSAzKSAgeworCSAgICBkbWFfb3V0YiggYSAmIDB4ZmYsICgoZG1hbnImMyk8PDEpICsgSU9fRE1BMV9CQVNFICk7CisgICAgICAgICAgICBkbWFfb3V0YiggKGE+PjgpICYgMHhmZiwgKChkbWFuciYzKTw8MSkgKyBJT19ETUExX0JBU0UgKTsKKwl9ICBlbHNlICB7CisJICAgIGRtYV9vdXRiKCAoYT4+MSkgJiAweGZmLCAoKGRtYW5yJjMpPDwyKSArIElPX0RNQTJfQkFTRSApOworCSAgICBkbWFfb3V0YiggKGE+PjkpICYgMHhmZiwgKChkbWFuciYzKTw8MikgKyBJT19ETUEyX0JBU0UgKTsKKwl9Cit9CisKKworLyogU2V0IHRyYW5zZmVyIHNpemUgKG1heCA2NGsgZm9yIERNQTEuLjMsIDEyOGsgZm9yIERNQTUuLjcpIGZvcgorICogYSBzcGVjaWZpYyBETUEgY2hhbm5lbC4KKyAqIFlvdSBtdXN0IGVuc3VyZSB0aGUgcGFyYW1ldGVycyBhcmUgdmFsaWQuCisgKiBOT1RFOiBmcm9tIGEgbWFudWFsOiAidGhlIG51bWJlciBvZiB0cmFuc2ZlcnMgaXMgb25lIG1vcmUKKyAqIHRoYW4gdGhlIGluaXRpYWwgd29yZCBjb3VudCIhIFRoaXMgaXMgdGFrZW4gaW50byBhY2NvdW50LgorICogQXNzdW1lcyBkbWEgZmxpcC1mbG9wIGlzIGNsZWFyLgorICogTk9URSAyOiAiY291bnQiIHJlcHJlc2VudHMgX2J5dGVzXyBhbmQgbXVzdCBiZSBldmVuIGZvciBjaGFubmVscyA1LTcuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgc2V0X2RtYV9jb3VudCh1bnNpZ25lZCBpbnQgZG1hbnIsIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKyAgICAgICAgY291bnQtLTsKKwlpZiAoZG1hbnIgPD0gMykgIHsKKwkgICAgZG1hX291dGIoIGNvdW50ICYgMHhmZiwgKChkbWFuciYzKTw8MSkgKyAxICsgSU9fRE1BMV9CQVNFICk7CisJICAgIGRtYV9vdXRiKCAoY291bnQ+PjgpICYgMHhmZiwgKChkbWFuciYzKTw8MSkgKyAxICsgSU9fRE1BMV9CQVNFICk7CisgICAgICAgIH0gZWxzZSB7CisJICAgIGRtYV9vdXRiKCAoY291bnQ+PjEpICYgMHhmZiwgKChkbWFuciYzKTw8MikgKyAyICsgSU9fRE1BMl9CQVNFICk7CisJICAgIGRtYV9vdXRiKCAoY291bnQ+PjkpICYgMHhmZiwgKChkbWFuciYzKTw8MikgKyAyICsgSU9fRE1BMl9CQVNFICk7CisgICAgICAgIH0KK30KKworCisvKiBHZXQgRE1BIHJlc2lkdWUgY291bnQuIEFmdGVyIGEgRE1BIHRyYW5zZmVyLCB0aGlzCisgKiBzaG91bGQgcmV0dXJuIHplcm8uIFJlYWRpbmcgdGhpcyB3aGlsZSBhIERNQSB0cmFuc2ZlciBpcworICogc3RpbGwgaW4gcHJvZ3Jlc3Mgd2lsbCByZXR1cm4gdW5wcmVkaWN0YWJsZSByZXN1bHRzLgorICogSWYgY2FsbGVkIGJlZm9yZSB0aGUgY2hhbm5lbCBoYXMgYmVlbiB1c2VkLCBpdCBtYXkgcmV0dXJuIDEuCisgKiBPdGhlcndpc2UsIGl0IHJldHVybnMgdGhlIG51bWJlciBvZiBfYnl0ZXNfIGxlZnQgdG8gdHJhbnNmZXIuCisgKgorICogQXNzdW1lcyBETUEgZmxpcC1mbG9wIGlzIGNsZWFyLgorICovCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgZ2V0X2RtYV9yZXNpZHVlKHVuc2lnbmVkIGludCBkbWFucikKK3sKKwl1bnNpZ25lZCBpbnQgaW9fcG9ydCA9IChkbWFucjw9Myk/ICgoZG1hbnImMyk8PDEpICsgMSArIElPX0RNQTFfQkFTRQorCQkJCQkgOiAoKGRtYW5yJjMpPDwyKSArIDIgKyBJT19ETUEyX0JBU0U7CisKKwkvKiB1c2luZyBzaG9ydCB0byBnZXQgMTYtYml0IHdyYXAgYXJvdW5kICovCisJdW5zaWduZWQgc2hvcnQgY291bnQ7CisKKwljb3VudCA9IDEgKyBkbWFfaW5iKGlvX3BvcnQpOworCWNvdW50ICs9IGRtYV9pbmIoaW9fcG9ydCkgPDwgODsKKwlyZXR1cm4gKGRtYW5yPD0zKT8gY291bnQgOiAoY291bnQ8PDEpOworfQorCisKKy8qIFRoZXNlIGFyZSBpbiBrZXJuZWwvZG1hLmM6ICovCitleHRlcm4gaW50IHJlcXVlc3RfZG1hKHVuc2lnbmVkIGludCBkbWFuciwgY29uc3QgY2hhciAqIGRldmljZV9pZCk7CS8qIHJlc2VydmUgYSBETUEgY2hhbm5lbCAqLworZXh0ZXJuIHZvaWQgZnJlZV9kbWEodW5zaWduZWQgaW50IGRtYW5yKTsJLyogcmVsZWFzZSBpdCBhZ2FpbiAqLworCisvKiBGcm9tIFBDSSAqLworCisjaWZkZWYgQ09ORklHX1BDSQorZXh0ZXJuIGludCBpc2FfZG1hX2JyaWRnZV9idWdneTsKKyNlbHNlCisjZGVmaW5lIGlzYV9kbWFfYnJpZGdlX2J1Z2d5IAkoMCkKKyNlbmRpZgorCisjZW5kaWYgLyogX0FTTV9NUEMxMjExX0RNQV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9tcGMxMjExL2lvLmggYi9pbmNsdWRlL2FzbS1zaC9tcGMxMjExL2lvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJhOGEwYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL21wYzEyMTEvaW8uaApAQCAtMCwwICsxLDIyIEBACisvKgorICogaW5jbHVkZS9hc20tc2gvaW9fbXBjMTIxMS5oCisgKgorICogQ29weXJpZ2h0IDIwMDEgU2FpdG8uSyAmIEplYW5uZQorICoKKyAqIElPIGZ1bmN0aW9ucyBmb3IgYW4gSW50ZXJmYWNlIE1QQy0xMjExCisgKi8KKworI2lmbmRlZiBfQVNNX1NIX0lPX01QQzEyMTFfSAorI2RlZmluZSBfQVNNX1NIX0lPX01QQzEyMTFfSAorCisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorCitleHRlcm4gaW50IG1wYzEyMTFfaXJxX2RlbXV4KGludCBpcnEpOworCitleHRlcm4gdm9pZCBpbml0X21wYzEyMTFfSVJRKHZvaWQpOworZXh0ZXJuIHZvaWQgaGVhcnRiZWF0X21wYzEyMTEodm9pZCk7CisKK2V4dGVybiB2b2lkIG1wYzEyMTFfcnRjX2dldHRpbWVvZmRheShzdHJ1Y3QgdGltZXZhbCAqdHYpOworZXh0ZXJuIGludCBtcGMxMjExX3J0Y19zZXR0aW1lb2ZkYXkoY29uc3Qgc3RydWN0IHRpbWV2YWwgKnR2KTsKKworI2VuZGlmIC8qIF9BU01fU0hfSU9fTVBDMTIxMV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9tcGMxMjExL2tleWJvYXJkLmggYi9pbmNsdWRlL2FzbS1zaC9tcGMxMjExL2tleWJvYXJkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWYwYjkwOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL21wYzEyMTEva2V5Ym9hcmQuaApAQCAtMCwwICsxLDY0IEBACisvKgorICogIE1QQzEyMTEgc3BlY2lmaWMga2V5Ym9yZCBkZWZpbml0aW9ucworICogIFRha2VuIGZyb20gdGhlIG9sZCBhc20taTM4Ni9rZXlib3JkLmggZm9yIFBDL0FULXN0eWxlIGRlZmluaXRpb25zCisgKiAgY3JlYXRlZCAzIE5vdiAxOTk2IGJ5IEdlZXJ0IFV5dHRlcmhvZXZlbi4KKyAqLworCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgva2QuaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCisjZGVmaW5lIEtFWUJPQVJEX0lSUQkJCTEKKyNkZWZpbmUgRElTQUJMRV9LQkRfRFVSSU5HX0lOVEVSUlVQVFMJMAorCitleHRlcm4gaW50IHBja2JkX3NldGtleWNvZGUodW5zaWduZWQgaW50IHNjYW5jb2RlLCB1bnNpZ25lZCBpbnQga2V5Y29kZSk7CitleHRlcm4gaW50IHBja2JkX2dldGtleWNvZGUodW5zaWduZWQgaW50IHNjYW5jb2RlKTsKK2V4dGVybiBpbnQgcGNrYmRfdHJhbnNsYXRlKHVuc2lnbmVkIGNoYXIgc2NhbmNvZGUsIHVuc2lnbmVkIGNoYXIgKmtleWNvZGUsCisJCQkgICBjaGFyIHJhd19tb2RlKTsKK2V4dGVybiBjaGFyIHBja2JkX3VuZXhwZWN0ZWRfdXAodW5zaWduZWQgY2hhciBrZXljb2RlKTsKK2V4dGVybiB2b2lkIHBja2JkX2xlZHModW5zaWduZWQgY2hhciBsZWRzKTsKK2V4dGVybiB2b2lkIHBja2JkX2luaXRfaHcodm9pZCk7CitleHRlcm4gaW50IHBja2JkX3BtX3Jlc3VtZShzdHJ1Y3QgcG1fZGV2ICosIHBtX3JlcXVlc3RfdCwgdm9pZCAqKTsKK2V4dGVybiBwbV9jYWxsYmFjayBwbV9rYmRfcmVxdWVzdF9vdmVycmlkZTsKK2V4dGVybiB1bnNpZ25lZCBjaGFyIHBja2JkX3N5c3JxX3hsYXRlWzEyOF07CisKKyNkZWZpbmUga2JkX3NldGtleWNvZGUJCXBja2JkX3NldGtleWNvZGUKKyNkZWZpbmUga2JkX2dldGtleWNvZGUJCXBja2JkX2dldGtleWNvZGUKKyNkZWZpbmUga2JkX3RyYW5zbGF0ZQkJcGNrYmRfdHJhbnNsYXRlCisjZGVmaW5lIGtiZF91bmV4cGVjdGVkX3VwCXBja2JkX3VuZXhwZWN0ZWRfdXAKKyNkZWZpbmUga2JkX2xlZHMJCXBja2JkX2xlZHMKKyNkZWZpbmUga2JkX2luaXRfaHcJCXBja2JkX2luaXRfaHcKKyNkZWZpbmUga2JkX3N5c3JxX3hsYXRlCQlwY2tiZF9zeXNycV94bGF0ZQorCisjZGVmaW5lIFNZU1JRX0tFWSAweDU0CisKKy8qIHJlc291cmNlIGFsbG9jYXRpb24gKi8KKyNkZWZpbmUga2JkX3JlcXVlc3RfcmVnaW9uKCkKKyNkZWZpbmUga2JkX3JlcXVlc3RfaXJxKGhhbmRsZXIpIHJlcXVlc3RfaXJxKEtFWUJPQVJEX0lSUSwgaGFuZGxlciwgMCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImtleWJvYXJkIiwgTlVMTCkKKworLyogSG93IHRvIGFjY2VzcyB0aGUga2V5Ym9hcmQgbWFjcm9zIG9uIHRoaXMgcGxhdGZvcm0uICAqLworI2RlZmluZSBrYmRfcmVhZF9pbnB1dCgpIGluYihLQkRfREFUQV9SRUcpCisjZGVmaW5lIGtiZF9yZWFkX3N0YXR1cygpIGluYihLQkRfU1RBVFVTX1JFRykKKyNkZWZpbmUga2JkX3dyaXRlX291dHB1dCh2YWwpIG91dGIodmFsLCBLQkRfREFUQV9SRUcpCisjZGVmaW5lIGtiZF93cml0ZV9jb21tYW5kKHZhbCkgb3V0Yih2YWwsIEtCRF9DTlRMX1JFRykKKworLyogU29tZSBzdG9uZWFnZSBoYXJkd2FyZSBuZWVkcyBkZWxheXMgYWZ0ZXIgc29tZSBvcGVyYXRpb25zLiAgKi8KKyNkZWZpbmUga2JkX3BhdXNlKCkgZG8geyB9IHdoaWxlKDApCisKKy8qCisgKiBNYWNoaW5lIHNwZWNpZmljIGJpdHMgZm9yIHRoZSBQUy8yIGRyaXZlcgorICovCisKKyNkZWZpbmUgQVVYX0lSUSAxMgorCisjZGVmaW5lIGF1eF9yZXF1ZXN0X2lycShoYW5kLCBkZXZfaWQpCQkJCQlcCisJcmVxdWVzdF9pcnEoQVVYX0lSUSwgaGFuZCwgU0FfU0hJUlEsICJQUzIgTW91c2UiLCBkZXZfaWQpCisKKyNkZWZpbmUgYXV4X2ZyZWVfaXJxKGRldl9pZCkgZnJlZV9pcnEoQVVYX0lSUSwgZGV2X2lkKQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvbXBjMTIxMS9tMTU0M2MuaCBiL2luY2x1ZGUvYXNtLXNoL21wYzEyMTEvbTE1NDNjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk1ZDEzMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL21wYzEyMTEvbTE1NDNjLmgKQEAgLTAsMCArMSwyMDAgQEAKKyNpZm5kZWYgX19BU01fU0hfTTE1NDNDX0gKKyNkZWZpbmUgX19BU01fU0hfTTE1NDNDX0gKKworLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLXNoL20xNTQzYy5oCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgIE5vYnVoaXJvIFNha2F3YQorICogTTE1NDNDOlBDSS1JU0EgQnVzIEJyaWRnZSB3aXRoIFN1cGVyIElPIENoaXAgc3VwcG9ydAorICoKKyAqIGZyb20KKyAqCisgKiBsaW51eC9pbmNsdWRlL2FzbS1zaC9zbWMzN2M5M3guaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCAgS2F6dW1vdG8gS29qaW1hCisgKgorICogU01TQyAzN0M5M3ggU3VwZXIgSU8gQ2hpcCBzdXBwb3J0CisgKi8KKworLyogRGVmYXVsdCBiYXNlIEkvTyBhZGRyZXNzICovCisjZGVmaW5lIEZEQ19QUklNQVJZX0JBU0UJMHgzZjAKKyNkZWZpbmUgSURFMV9QUklNQVJZX0JBU0UJMHgxZjAKKyNkZWZpbmUgSURFMV9TRUNPTkRBUllfQkFTRQkweDE3MAorI2RlZmluZSBQQVJQT1JUX1BSSU1BUllfQkFTRQkweDM3OAorI2RlZmluZSBDT00xX1BSSU1BUllfQkFTRQkweDJmOAorI2RlZmluZSBDT00yX1BSSU1BUllfQkFTRQkweDNmOAorI2RlZmluZSBDT00zX1BSSU1BUllfQkFTRQkweDNlOAorI2RlZmluZSBSVENfUFJJTUFSWV9CQVNFCTB4MDcwCisjZGVmaW5lIEtCQ19QUklNQVJZX0JBU0UJMHgwNjAKKyNkZWZpbmUgQVVYSU9fUFJJTUFSWV9CQVNFCTB4MDAwCS8qIFhYWCAqLworI2RlZmluZSBJODI1OV9NX0NSCQkweDIwCisjZGVmaW5lIEk4MjU5X01fTVIJCTB4MjEKKyNkZWZpbmUgSTgyNTlfU19DUgkJMHhhMAorI2RlZmluZSBJODI1OV9TX01SCQkweGExCisKKy8qIExvZ2ljYWwgZGV2aWNlIG51bWJlciAqLworI2RlZmluZSBMRE5fRkRDCQkJMAorI2RlZmluZSBMRE5fSURFMQkJMQorI2RlZmluZSBMRE5fSURFMgkJMgorI2RlZmluZSBMRE5fUEFSUE9SVAkJMworI2RlZmluZSBMRE5fQ09NMQkJNAorI2RlZmluZSBMRE5fQ09NMgkJNQorI2RlZmluZSBMRE5fQ09NMwkJMTEKKyNkZWZpbmUgTEROX1JUQwkJCTYKKyNkZWZpbmUgTEROX0tCQwkJCTcKKworLyogQ29uZmlndXJhdGlvbiBwb3J0IGFuZCBrZXkgKi8KKyNkZWZpbmUgQ09ORklHX1BPUlQJCTB4M2YwCisjZGVmaW5lIElOREVYX1BPUlQJCUNPTkZJR19QT1JUCisjZGVmaW5lIERBVEFfUE9SVAkJMHgzZjEKKyNkZWZpbmUgQ09ORklHX0VOVEVSMQkJMHg1MQorI2RlZmluZSBDT05GSUdfRU5URVIyCQkweDIzCisjZGVmaW5lIENPTkZJR19FWElUCQkweGJiCisKKy8qIENvbmZpZ3VyYXRpb24gaW5kZXggKi8KKyNkZWZpbmUgQ1VSUkVOVF9MRE5fSU5ERVgJMHgwNworI2RlZmluZSBQT1dFUl9DT05UUk9MX0lOREVYCTB4MjIKKyNkZWZpbmUgQUNUSVZBVEVfSU5ERVgJCTB4MzAKKyNkZWZpbmUgSU9fQkFTRV9ISV9JTkRFWAkweDYwCisjZGVmaW5lIElPX0JBU0VfTE9fSU5ERVgJMHg2MQorI2RlZmluZSBJUlFfU0VMRUNUX0lOREVYCTB4NzAKKyNkZWZpbmUgUFMyX0lSUV9JTkRFWAkJMHg3MgorI2RlZmluZSBETUFfU0VMRUNUX0lOREVYCTB4NzQKKworLyogVUFSVCBzdHVmZi4gT25seSBmb3IgZGVidWdnaW5nLiAgKi8KKy8qIFVBUlQgUmVnaXN0ZXIgKi8KKworI2RlZmluZSBVQVJUX1JCUgkweDAJLyogUmVjZWl2ZXIgQnVmZmVyIFJlZ2lzdGVyIChSZWFkIE9ubHkpICovCisjZGVmaW5lIFVBUlRfVEhSCTB4MAkvKiBUcmFuc21pdHRlciBIb2xkaW5nIFJlZ2lzdGVyIChXcml0ZSBPbmx5KSAqLworI2RlZmluZSBVQVJUX0lFUgkweDIJLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLworI2RlZmluZSBVQVJUX0lJUgkweDQJLyogSW50ZXJydXB0IElkZW50IFJlZ2lzdGVyIChSZWFkIE9ubHkpICovCisjZGVmaW5lIFVBUlRfRkNSCTB4NAkvKiBGSUZPIENvbnRyb2wgUmVnaXN0ZXIgKFdyaXRlIE9ubHkpICovCisjZGVmaW5lIFVBUlRfTENSCTB4NgkvKiBMaW5lIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVUFSVF9NQ1IJMHg4CS8qIE1PREVNIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVUFSVF9MU1IJMHhhCS8qIExpbmUgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIFVBUlRfTVNSCTB4YwkvKiBNT0RFTSBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVUFSVF9TQ1IJMHhlCS8qIFNjcmF0Y2ggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVUFSVF9ETEwJMHgwCS8qIERpdmlzb3IgTGF0Y2ggKExTKSAqLworI2RlZmluZSBVQVJUX0RMTQkweDIJLyogRGl2aXNvciBMYXRjaCAoTVMpICovCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCit0eXBlZGVmIHN0cnVjdCB1YXJ0X3JlZyB7CisJdm9sYXRpbGUgX191MTYgcmJyOworCXZvbGF0aWxlIF9fdTE2IGllcjsKKwl2b2xhdGlsZSBfX3UxNiBpaXI7CisJdm9sYXRpbGUgX191MTYgbGNyOworCXZvbGF0aWxlIF9fdTE2IG1jcjsKKwl2b2xhdGlsZSBfX3UxNiBsc3I7CisJdm9sYXRpbGUgX191MTYgbXNyOworCXZvbGF0aWxlIF9fdTE2IHNjcjsKK30gdWFydF9yZWc7CisjZW5kaWYgLyogISBfX0FTU0VNQkxZX18gKi8KKworLyogQWxpYXMgZm9yIFdyaXRlIE9ubHkgUmVnaXN0ZXIgKi8KKworI2RlZmluZSB0aHIJcmJyCisjZGVmaW5lIHRjcglpaXIKKworLyogQWxpYXMgZm9yIERpdmlzb3IgTGF0Y2ggUmVnaXN0ZXIgKi8KKworI2RlZmluZSBkbGwJcmJyCisjZGVmaW5lIGRsbQlpZXIKKyNkZWZpbmUgZmNyCWlpcgorCisvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovCisKKyNkZWZpbmUgSUVSX0VSREFJCTB4MDEwMAkvKiBFbmFibGUgUmVjZWl2ZWQgRGF0YSBBdmFpbGFibGUgSW50ZXJydXB0ICovCisjZGVmaW5lIElFUl9FVEhSRUkJMHgwMjAwCS8qIEVuYWJsZSBUcmFuc21pdHRlciBIb2xkaW5nIFJlZ2lzdGVyIEVtcHR5IEludGVycnVwdCAqLworI2RlZmluZSBJRVJfRUxTSQkweDA0MDAJLyogRW5hYmxlIFJlY2VpdmVyIExpbmUgU3RhdHVzIEludGVycnVwdCAqLworI2RlZmluZSBJRVJfRU1TSQkweDA4MDAJLyogRW5hYmxlIE1PREVNIFN0YXR1cyBJbnRlcnJ1cHQgKi8KKworLyogSW50ZXJydXB0IElkZW50IFJlZ2lzdGVyICovCisKKyNkZWZpbmUgSUlSX0lQCQkweDAxMDAJLyogIjAiIGlmIEludGVycnVwdCBQZW5kaW5nICovCisjZGVmaW5lIElJUl9JSUIwCTB4MDIwMAkvKiBJbnRlcnJ1cHQgSUQgQml0IDAgKi8KKyNkZWZpbmUgSUlSX0lJQjEJMHgwNDAwCS8qIEludGVycnVwdCBJRCBCaXQgMSAqLworI2RlZmluZSBJSVJfSUlCMgkweDA4MDAJLyogSW50ZXJydXB0IElEIEJpdCAyICovCisjZGVmaW5lIElJUl9GSUZPCTB4YzAwMAkvKiBGSUZPcyBlbmFibGVkICovCisKKy8qIEZJRk8gQ29udHJvbCBSZWdpc3RlciAqLworCisjZGVmaW5lIEZDUl9GRU4JCTB4MDEwMAkvKiBGSUZPIGVuYWJsZSAqLworI2RlZmluZSBGQ1JfUkZSRVMJMHgwMjAwCS8qIFJlY2VpdmVyIEZJRk8gcmVzZXQgKi8KKyNkZWZpbmUgRkNSX1RGUkVTCTB4MDQwMAkvKiBUcmFuc21pdHRlciBGSUZPIHJlc2V0ICovCisjZGVmaW5lIEZDUl9ETUEJCTB4MDgwMAkvKiBETUEgbW9kZSBzZWxlY3QgKi8KKyNkZWZpbmUgRkNSX1JUTAkJMHg0MDAwCS8qIFJlY2VpdmVyIHRyaWdlciAoTFNCKSAqLworI2RlZmluZSBGQ1JfUlRNCQkweDgwMDAJLyogUmVjZWl2ZXIgdHJpZ2VyIChNU0IpICovCisKKy8qIExpbmUgQ29udHJvbCBSZWdpc3RlciAqLworCisjZGVmaW5lIExDUl9XTFMwCTB4MDEwMAkvKiBXb3JkIExlbmd0aCBTZWxlY3QgQml0IDAgKi8KKyNkZWZpbmUgTENSX1dMUzEJMHgwMjAwCS8qIFdvcmQgTGVuZ3RoIFNlbGVjdCBCaXQgMSAqLworI2RlZmluZSBMQ1JfU1RCCQkweDA0MDAJLyogTnVtYmVyIG9mIFN0b3AgQml0cyAqLworI2RlZmluZSBMQ1JfUEVOCQkweDA4MDAJLyogUGFyaXR5IEVuYWJsZSAqLworI2RlZmluZSBMQ1JfRVBTCQkweDEwMDAJLyogRXZlbiBQYXJpdHkgU2VsZWN0ICovCisjZGVmaW5lIExDUl9TUAkJMHgyMDAwCS8qIFN0aWNrIFBhcml0eSAqLworI2RlZmluZSBMQ1JfU0IJCTB4NDAwMAkvKiBTZXQgQnJlYWsgKi8KKyNkZWZpbmUgTENSX0RMQUIJMHg4MDAwCS8qIERpdmlzb3IgTGF0Y2ggQWNjZXNzIEJpdCAqLworCisvKiBNT0RFTSBDb250cm9sIFJlZ2lzdGVyICovCisKKyNkZWZpbmUgTUNSX0RUUgkJMHgwMTAwCS8qIERhdGEgVGVybWluYWwgUmVhZHkgKi8KKyNkZWZpbmUgTUNSX1JUUwkJMHgwMjAwCS8qIFJlcXVlc3QgdG8gU2VuZCAqLworI2RlZmluZSBNQ1JfT1VUMQkweDA0MDAJLyogT3V0IDEgKi8KKyNkZWZpbmUgTUNSX0lSUUVOCTB4MDgwMAkvKiBJUlEgRW5hYmxlICovCisjZGVmaW5lIE1DUl9MT09QCTB4MTAwMAkvKiBMb29wICovCisKKy8qIExpbmUgU3RhdHVzIFJlZ2lzdGVyICovCisKKyNkZWZpbmUgTFNSX0RSCQkweDAxMDAJLyogRGF0YSBSZWFkeSAqLworI2RlZmluZSBMU1JfT0UJCTB4MDIwMAkvKiBPdmVycnVuIEVycm9yICovCisjZGVmaW5lIExTUl9QRQkJMHgwNDAwCS8qIFBhcml0eSBFcnJvciAqLworI2RlZmluZSBMU1JfRkUJCTB4MDgwMAkvKiBGcmFtaW5nIEVycm9yICovCisjZGVmaW5lIExTUl9CSQkJMHgxMDAwCS8qIEJyZWFrIEludGVycnVwdCAqLworI2RlZmluZSBMU1JfVEhSRQkweDIwMDAJLyogVHJhbnNtaXR0ZXIgSG9sZGluZyBSZWdpc3RlciBFbXB0eSAqLworI2RlZmluZSBMU1JfVEVNVAkweDQwMDAJLyogVHJhbnNtaXR0ZXIgRW1wdHkgKi8KKyNkZWZpbmUgTFNSX0ZJRk9FCTB4ODAwMAkvKiBSZWNlaXZlciBGSUZPIGVycm9yICovCisKKy8qIE1PREVNIFN0YXR1cyBSZWdpc3RlciAqLworCisjZGVmaW5lIE1TUl9EQ1RTCTB4MDEwMAkvKiBEZWx0YSBDbGVhciB0byBTZW5kICovCisjZGVmaW5lIE1TUl9ERFNSCTB4MDIwMAkvKiBEZWx0YSBEYXRhIFNldCBSZWFkeSAqLworI2RlZmluZSBNU1JfVEVSSQkweDA0MDAJLyogVHJhaWxpbmcgRWRnZSBSaW5nIEluZGljYXRvciAqLworI2RlZmluZSBNU1JfRERDRAkweDA4MDAJLyogRGVsdGEgRGF0YSBDYXJyaWVyIERldGVjdCAqLworI2RlZmluZSBNU1JfQ1RTCQkweDEwMDAJLyogQ2xlYXIgdG8gU2VuZCAqLworI2RlZmluZSBNU1JfRFNSCQkweDIwMDAJLyogRGF0YSBTZXQgUmVhZHkgKi8KKyNkZWZpbmUgTVNSX1JJCQkweDQwMDAJLyogUmluZyBJbmRpY2F0b3IgKi8KKyNkZWZpbmUgTVNSX0RDRAkJMHg4MDAwCS8qIERhdGEgQ2FycmllciBEZXRlY3QgKi8KKworLyogQmF1ZCBSYXRlIERpdmlzb3IgKi8KKworI2RlZmluZSBVQVJUX0NMSwkoMTg0MzIwMCkJLyogMS44NDMyIE1IeiAqLworI2RlZmluZSBVQVJUX0JBVUQoeCkJKFVBUlRfQ0xLIC8gKDE2ICogKHgpKSkKKworLyogUlRDIHJlZ2lzdGVyIGRlZmluaXRpb24gKi8KKyNkZWZpbmUgUlRDX1NFQ09ORFMgICAgICAgICAgICAgMAorI2RlZmluZSBSVENfU0VDT05EU19BTEFSTSAgICAgICAxCisjZGVmaW5lIFJUQ19NSU5VVEVTICAgICAgICAgICAgIDIKKyNkZWZpbmUgUlRDX01JTlVURVNfQUxBUk0gICAgICAgMworI2RlZmluZSBSVENfSE9VUlMgICAgICAgICAgICAgICA0CisjZGVmaW5lIFJUQ19IT1VSU19BTEFSTSAgICAgICAgIDUKKyNkZWZpbmUgUlRDX0RBWV9PRl9XRUVLICAgICAgICAgNgorI2RlZmluZSBSVENfREFZX09GX01PTlRIICAgICAgICA3CisjZGVmaW5lIFJUQ19NT05USCAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgUlRDX1lFQVIgICAgICAgICAgICAgICAgOQorI2RlZmluZSBSVENfRlJFUV9TRUxFQ1QJCTEwCisjIGRlZmluZSBSVENfVUlQIDB4ODAKKyMgZGVmaW5lIFJUQ19ESVZfQ1RMIDB4NzAKKy8qIFRoaXMgUlRDIGNhbiB3b3JrIHVuZGVyIDMyLjc2OEtIeiBjbG9jayBvbmx5LiAgKi8KKyMgZGVmaW5lIFJUQ19PU0NfRU5BQkxFIDB4MjAKKyMgZGVmaW5lIFJUQ19PU0NfRElTQUJMRSAweDAwCisjZGVmaW5lIFJUQ19DT05UUk9MICAgICAJMTEKKyMgZGVmaW5lIFJUQ19TRVQgMHg4MAorIyBkZWZpbmUgUlRDX1BJRSAweDQwCisjIGRlZmluZSBSVENfQUlFIDB4MjAKKyMgZGVmaW5lIFJUQ19VSUUgMHgxMAorIyBkZWZpbmUgUlRDX1NRV0UgMHgwOAorIyBkZWZpbmUgUlRDX0RNX0JJTkFSWSAweDA0CisjIGRlZmluZSBSVENfMjRIIDB4MDIKKyMgZGVmaW5lIFJUQ19EU1RfRU4gMHgwMQorCisjZW5kaWYgIC8qIF9fQVNNX1NIX00xNTQzQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9tcGMxMjExL21jMTQ2ODE4cnRjLmggYi9pbmNsdWRlL2FzbS1zaC9tcGMxMjExL21jMTQ2ODE4cnRjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGVjNzhmNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL21wYzEyMTEvbWMxNDY4MThydGMuaApAQCAtMCwwICsxLDYgQEAKKy8qCisgKiBNUEMxMjExIHVzZXMgUEMvQVQgc3R5bGUgUlRDIGRlZmluaXRpb25zLgorICovCisjaW5jbHVkZSA8YXNtLWkzODYvbWMxNDY4MThydGMuaD4KKworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9tcGMxMjExL21wYzEyMTEuaCBiL2luY2x1ZGUvYXNtLXNoL21wYzEyMTEvbXBjMTIxMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNDU2YzMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9tcGMxMjExL21wYzEyMTEuaApAQCAtMCwwICsxLDE4IEBACisjaWZuZGVmIF9fQVNNX1NIX01QQzEyMTFfSAorI2RlZmluZSBfX0FTTV9TSF9NUEMxMjExX0gKKworLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLXNoL21wYzEyMTEuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMSAgU2FpdG8uSyAmIEplYW5uZQorICoKKyAqIEludGVyZmFjZSBNUEMtMTIxMSBzdXBwb3J0CisgKi8KKworI2RlZmluZSBQQV9QQ0lfSU8gICAgICAgKDB4YTQwMDAwMDApICAgIC8qIFBDSSBJL08gc3BhY2UgKi8KKyNkZWZpbmUgUEFfUENJX01FTSAgICAgICgweGIwMDAwMDAwKSAgICAvKiBQQ0kgTUVNIHNwYWNlICovCisKKyNkZWZpbmUgUENJUEFSICAgICAgICAgICgweGE0MDAwY2Y4KSAgICAvKiBQQ0kgQ29uZmlnIGFkZHJlc3MgKi8KKyNkZWZpbmUgUENJUERSICAgICAgICAgICgweGE0MDAwY2ZjKSAgICAvKiBQQ0kgQ29uZmlnIGRhdGEgICAgKi8KKworI2VuZGlmICAvKiBfX0FTTV9TSF9NUEMxMjExX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL21wYzEyMTEvcGNpLmggYi9pbmNsdWRlL2FzbS1zaC9tcGMxMjExL3BjaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkMzcxMmMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9tcGMxMjExL3BjaS5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKglMb3ctTGV2ZWwgUENJIFN1cHBvcnQgZm9yIE1QQy0xMjExCisgKgorICogICAgICAoYykgMjAwMiBTYWl0by5LICYgSmVhbm5lCisgKgorICovCisKKyNpZm5kZWYgX1BDSV9NUEMxMjExX0hfCisjZGVmaW5lIF9QQ0lfTVBDMTIxMV9IXworCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisKKy8qIHNldCBkZWJ1ZyBsZXZlbCA0PXZlcmJvc2UuLi4xPXRlcnNlICovCisvLyNkZWZpbmUgREVCVUdfUENJIDMKKyN1bmRlZiBERUJVR19QQ0kKKworI2lmZGVmIERFQlVHX1BDSQorI2RlZmluZSBQQ0lEQkcobiwgeC4uLikgeyBpZihERUJVR19QQ0k+PW4pIHByaW50ayh4KTsgfQorI2Vsc2UKKyNkZWZpbmUgUENJREJHKG4sIHguLi4pCisjZW5kaWYKKworLyogc3RhcnR1cCB2YWx1ZXMgKi8KKyNkZWZpbmUgUENJX1BST0JFX0JJT1MgICAgMQorI2RlZmluZSBQQ0lfUFJPQkVfQ09ORjEgICAyCisjZGVmaW5lIFBDSV9QUk9CRV9DT05GMiAgIDQKKyNkZWZpbmUgUENJX05PX1NPUlQgICAgICAgMHgxMDAKKyNkZWZpbmUgUENJX0JJT1NfU09SVCAgICAgMHgyMDAKKyNkZWZpbmUgUENJX05PX0NIRUNLUyAgICAgMHg0MDAKKyNkZWZpbmUgUENJX0FTU0lHTl9ST01TICAgMHgxMDAwCisjZGVmaW5lIFBDSV9CSU9TX0lSUV9TQ0FOIDB4MjAwMAorCisvKiBNUEMtMTIxMSBTcGVjaWZpYyBWYWx1ZXMgKi8KKyNkZWZpbmUgUENJUEFSICAgICAgICAgICAgKDB4YTQwMDBjZjgpICAgIC8qIFBDSSBDb25maWcgYWRkcmVzcyAqLworI2RlZmluZSBQQ0lQRFIgICAgICAgICAgICAoMHhhNDAwMGNmYykgICAgLyogUENJIENvbmZpZyBkYXRhICAgICovCisKKyNkZWZpbmUgUEFfUENJX0lPICAgICAgICAgKDB4YTQwMDAwMDApICAgIC8qIFBDSSBJL08gc3BhY2UgKi8KKyNkZWZpbmUgUEFfUENJX01FTSAgICAgICAgKDB4YjAwMDAwMDApICAgIC8qIFBDSSBNRU0gc3BhY2UgKi8KKworI2VuZGlmIC8qIF9QQ0lfTVBDMTIxMV9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvbXNnYnVmLmggYi9pbmNsdWRlL2FzbS1zaC9tc2didWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTc0MzIzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvbXNnYnVmLmgKQEAgLTAsMCArMSwzMSBAQAorI2lmbmRlZiBfX0FTTV9TSF9NU0dCVUZfSAorI2RlZmluZSBfX0FTTV9TSF9NU0dCVUZfSAorCisvKiAKKyAqIFRoZSBtc3FpZDY0X2RzIHN0cnVjdHVyZSBmb3IgaTM4NiBhcmNoaXRlY3R1cmUuCisgKiBOb3RlIGV4dHJhIHBhZGRpbmcgYmVjYXVzZSB0aGlzIHN0cnVjdHVyZSBpcyBwYXNzZWQgYmFjayBhbmQgZm9ydGgKKyAqIGJldHdlZW4ga2VybmVsIGFuZCB1c2VyIHNwYWNlLgorICoKKyAqIFBhZCBzcGFjZSBpcyBsZWZ0IGZvcjoKKyAqIC0gNjQtYml0IHRpbWVfdCB0byBzb2x2ZSB5MjAzOCBwcm9ibGVtCisgKiAtIDIgbWlzY2VsbGFuZW91cyAzMi1iaXQgdmFsdWVzCisgKi8KKworc3RydWN0IG1zcWlkNjRfZHMgeworCXN0cnVjdCBpcGM2NF9wZXJtIG1zZ19wZXJtOworCV9fa2VybmVsX3RpbWVfdCBtc2dfc3RpbWU7CS8qIGxhc3QgbXNnc25kIHRpbWUgKi8KKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkMTsKKwlfX2tlcm5lbF90aW1lX3QgbXNnX3J0aW1lOwkvKiBsYXN0IG1zZ3JjdiB0aW1lICovCisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDI7CisJX19rZXJuZWxfdGltZV90IG1zZ19jdGltZTsJLyogbGFzdCBjaGFuZ2UgdGltZSAqLworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQzOworCXVuc2lnbmVkIGxvbmcgIG1zZ19jYnl0ZXM7CS8qIGN1cnJlbnQgbnVtYmVyIG9mIGJ5dGVzIG9uIHF1ZXVlICovCisJdW5zaWduZWQgbG9uZyAgbXNnX3FudW07CS8qIG51bWJlciBvZiBtZXNzYWdlcyBpbiBxdWV1ZSAqLworCXVuc2lnbmVkIGxvbmcgIG1zZ19xYnl0ZXM7CS8qIG1heCBudW1iZXIgb2YgYnl0ZXMgb24gcXVldWUgKi8KKwlfX2tlcm5lbF9waWRfdCBtc2dfbHNwaWQ7CS8qIHBpZCBvZiBsYXN0IG1zZ3NuZCAqLworCV9fa2VybmVsX3BpZF90IG1zZ19scnBpZDsJLyogbGFzdCByZWNlaXZlIHBpZCAqLworCXVuc2lnbmVkIGxvbmcgIF9fdW51c2VkNDsKKwl1bnNpZ25lZCBsb25nICBfX3VudXNlZDU7Cit9OworCisjZW5kaWYgLyogX19BU01fU0hfTVNHQlVGX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL25hbWVpLmggYi9pbmNsdWRlL2FzbS1zaC9uYW1laS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzOGE1ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9uYW1laS5oCkBAIC0wLDAgKzEsMTcgQEAKKy8qICRJZDogbmFtZWkuaCx2IDEuMyAyMDAwLzA3LzA0IDA2OjI0OjQ5IGduaWliZSBFeHAgJAorICogbGludXgvaW5jbHVkZS9hc20tc2gvbmFtZWkuaAorICoKKyAqIEluY2x1ZGVkIGZyb20gbGludXgvZnMvbmFtZWkuYworICovCisKKyNpZm5kZWYgX19BU01fU0hfTkFNRUlfSAorI2RlZmluZSBfX0FTTV9TSF9OQU1FSV9ICisKKy8qIFRoaXMgZHVtbXkgcm91dGluZSBtYXliZSBjaGFuZ2VkIHRvIHNvbWV0aGluZyB1c2VmdWwKKyAqIGZvciAvdXNyL2duZW11bC8gZW11bGF0aW9uIHN0dWZmLgorICogTG9vayBhdCBhc20tc3BhcmMvbmFtZWkuaCBmb3IgZGV0YWlscy4KKyAqLworCisjZGVmaW5lIF9fZW11bF9wcmVmaXgoKSBOVUxMCisKKyNlbmRpZiAvKiBfX0FTTV9TSF9OQU1FSV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9udW1ub2Rlcy5oIGIvaW5jbHVkZS9hc20tc2gvbnVtbm9kZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzNlODViCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvbnVtbm9kZXMuaApAQCAtMCwwICsxLDcgQEAKKyNpZm5kZWYgX0FTTV9NQVhfTlVNTk9ERVNfSAorI2RlZmluZSBfQVNNX01BWF9OVU1OT0RFU19ICisKKy8qIE1heCAyIE5vZGVzICovCisjZGVmaW5lIE5PREVTX1NISUZUCTEKKworI2VuZGlmIC8qIF9BU01fTUFYX05VTU5PREVTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL292ZXJkcml2ZS9mcGdhLmggYi9pbmNsdWRlL2FzbS1zaC9vdmVyZHJpdmUvZnBnYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjZDg3OTkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9vdmVyZHJpdmUvZnBnYS5oCkBAIC0wLDAgKzEsMTUgQEAKKy8qIAorICogQ29weXJpZ2h0IChDKSAyMDAwIERhdmlkIEouIE1ja2F5IChkYXZpZC5tY2theUBzdC5jb20pCisgKgorICogTWF5IGJlIGNvcGllZCBvciBtb2RpZmllZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSBsaW51eC9DT1BZSU5HIGZvciBtb3JlIGluZm9ybWF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAqCisgKi8KKworI2lmbmRlZiBfX0ZQR0FfT0RfSF9fCisjZGVmaW5lIF9fRlBHQV9PRF9IX18KKworLyogVGhpcyByb3V0aW5lIHdpbGwgcHJvZ3JhbSB1cCB0aGUgZnBnYSB3aGljaCBpbnRlcmZhY2VzIHRvIHRoZSBnYWxpbGVvICovCitpbnQgaW5pdF9vdmVyZHJpdmVfZnBnYSh2b2lkKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9vdmVyZHJpdmUvZ3Q2NDExMS5oIGIvaW5jbHVkZS9hc20tc2gvb3ZlcmRyaXZlL2d0NjQxMTEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWQ1OGJjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvb3ZlcmRyaXZlL2d0NjQxMTEuaApAQCAtMCwwICsxLDEwOSBAQAorI2lmbmRlZiBfR1Q2NDExMV9IXworI2RlZmluZSBfR1Q2NDExMV9IXworCisjZGVmaW5lIE1BU1RFUl9JTlRFUkZBQ0UgICAgICAgICAweDAKKyNkZWZpbmUgUkFTMTBfTE9fREVDX0FEUiAgICAgICAgIDB4OCAgICAgICAgCisjZGVmaW5lIFJBUzEwX0hJX0RFQ19BRFIgICAgICAgICAweDEwCisjZGVmaW5lIFJBUzMyX0xPX0RFQ19BRFIgICAgICAgICAweDE4CisjZGVmaW5lIFJBUzMyX0hJX0RFQ19BRFIgICAgICAgICAweDIwCisjZGVmaW5lIENTMjBfTE9fREVDX0FEUiAgICAgICAgICAweDI4CisjZGVmaW5lIENTMjBfSElfREVDX0FEUiAgICAgICAgICAweDMwCisjZGVmaW5lIENTM19MT19ERUNfQURSICAgICAgICAgICAweDM4CisjZGVmaW5lIENTM19ISV9ERUNfQURSICAgICAgICAgICAweDQwCisjZGVmaW5lIFBDSV9JT19MT19ERUNfQURSICAgICAgICAweDQ4CisjZGVmaW5lIFBDSV9JT19ISV9ERUNfQURSICAgICAgICAweDUwCisjZGVmaW5lIFBDSV9NRU0wX0xPX0RFQ19BRFIgICAgICAweDU4CisjZGVmaW5lIFBDSV9NRU0wX0hJX0RFQ19BRFIgICAgICAweDYwCisjZGVmaW5lIElOVEVSTkFMX1NQQUNFX0RFQyAgICAgICAweDY4CisjZGVmaW5lIEJVU19FUlJfQURSX0xPX0NQVSAgICAgICAweDcwCisjZGVmaW5lIFJFQURPTkxZMCAgICAgICAgICAgICAgICAweDc4CisjZGVmaW5lIFBDSV9NRU0xX0xPX0RFQ19BRFIgICAgICAweDgwCisjZGVmaW5lIFBDSV9NRU0xX0hJX0RFQ19BRFIgICAgICAweDg4CisjZGVmaW5lIFJBUzBfTE9fREVDX0FEUiAgICAgICAgICAweDQwMCAgIAorI2RlZmluZSBSQVMwX0hJX0RFQ19BRFIgICAgICAgICAgMHg0MDQKKyNkZWZpbmUgUkFTMV9MT19ERUNfQURSICAgICAgICAgIDB4NDA4CisjZGVmaW5lIFJBUzFfSElfREVDX0FEUiAgICAgICAgICAweDQwYworI2RlZmluZSBSQVMyX0xPX0RFQ19BRFIgICAgICAgICAgMHg0MTAKKyNkZWZpbmUgUkFTMl9ISV9ERUNfQURSICAgICAgICAgIDB4NDE0CisjZGVmaW5lIFJBUzNfTE9fREVDX0FEUiAgICAgICAgICAweDQxOAorI2RlZmluZSBSQVMzX0hJX0RFQ19BRFIgICAgICAgICAgMHg0MWMKKyNkZWZpbmUgREVWX0NTMF9MT19ERUNfQURSICAgICAgIDB4NDIwCisjZGVmaW5lIERFVl9DUzBfSElfREVDX0FEUiAgICAgICAweDQyNAorI2RlZmluZSBERVZfQ1MxX0xPX0RFQ19BRFIgICAgICAgMHg0MjgKKyNkZWZpbmUgREVWX0NTMV9ISV9ERUNfQURSICAgICAgIDB4NDJjCisjZGVmaW5lIERFVl9DUzJfTE9fREVDX0FEUiAgICAgICAweDQzMAorI2RlZmluZSBERVZfQ1MyX0hJX0RFQ19BRFIgICAgICAgMHg0MzQKKyNkZWZpbmUgREVWX0NTM19MT19ERUNfQURSICAgICAgIDB4NDM4CisjZGVmaW5lIERFVl9DUzNfSElfREVDX0FEUiAgICAgICAweDQzYworI2RlZmluZSBERVZfQk9PVENTX0xPX0RFQ19BRFIgICAgMHg0NDAKKyNkZWZpbmUgREVWX0JPT1RDU19ISV9ERUNfQURSICAgIDB4NDQ0CisjZGVmaW5lIERFVl9BRFJfREVDX0VSUiAgICAgICAgICAweDQ3MAorI2RlZmluZSBEUkFNX0NGRyAgICAgICAgICAgICAgICAgMHg0NDggICAKKyNkZWZpbmUgRFJBTV9CQU5LMF9QQVJNUyAgICAgICAgIDB4NDRjICAgCisjZGVmaW5lIERSQU1fQkFOSzFfUEFSTVMgICAgICAgICAweDQ1MAorI2RlZmluZSBEUkFNX0JBTksyX1BBUk1TICAgICAgICAgMHg0NTQKKyNkZWZpbmUgRFJBTV9CQU5LM19QQVJNUyAgICAgICAgIDB4NDU4CisjZGVmaW5lIERFVl9CQU5LMF9QQVJNUyAgICAgICAgICAweDQ1YworI2RlZmluZSBERVZfQkFOSzFfUEFSTVMgICAgICAgICAgMHg0NjAKKyNkZWZpbmUgREVWX0JBTksyX1BBUk1TICAgICAgICAgIDB4NDY0CisjZGVmaW5lIERFVl9CQU5LM19QQVJNUyAgICAgICAgICAweDQ2OAorI2RlZmluZSBERVZfQk9PVF9CQU5LX1BBUk1TICAgICAgMHg0NmMKKyNkZWZpbmUgQ0gwX0RNQV9CWVRFQ09VTlQgICAgICAgIDB4ODAwCisjZGVmaW5lIENIMV9ETUFfQllURUNPVU5UICAgICAgICAweDgwNAorI2RlZmluZSBDSDJfRE1BX0JZVEVDT1VOVCAgICAgICAgMHg4MDgKKyNkZWZpbmUgQ0gzX0RNQV9CWVRFQ09VTlQgICAgICAgIDB4ODBjCisjZGVmaW5lIENIMF9ETUFfU1JDX0FEUiAgICAgICAgICAweDgxMAorI2RlZmluZSBDSDFfRE1BX1NSQ19BRFIgICAgICAgICAgMHg4MTQKKyNkZWZpbmUgQ0gyX0RNQV9TUkNfQURSICAgICAgICAgIDB4ODE4CisjZGVmaW5lIENIM19ETUFfU1JDX0FEUiAgICAgICAgICAweDgxYworI2RlZmluZSBDSDBfRE1BX0RTVF9BRFIgICAgICAgICAgMHg4MjAKKyNkZWZpbmUgQ0gxX0RNQV9EU1RfQURSICAgICAgICAgIDB4ODI0CisjZGVmaW5lIENIMl9ETUFfRFNUX0FEUiAgICAgICAgICAweDgyOAorI2RlZmluZSBDSDNfRE1BX0RTVF9BRFIgICAgICAgICAgMHg4MmMKKyNkZWZpbmUgQ0gwX05FWFRfUkVDX1BUUiAgICAgICAgIDB4ODMwCisjZGVmaW5lIENIMV9ORVhUX1JFQ19QVFIgICAgICAgICAweDgzNAorI2RlZmluZSBDSDJfTkVYVF9SRUNfUFRSICAgICAgICAgMHg4MzgKKyNkZWZpbmUgQ0gzX05FWFRfUkVDX1BUUiAgICAgICAgIDB4ODNjCisjZGVmaW5lIENIMF9DVFJMICAgICAgICAgICAgICAgICAweDg0MAorI2RlZmluZSBDSDFfQ1RSTCAgICAgICAgICAgICAgICAgMHg4NDQKKyNkZWZpbmUgQ0gyX0NUUkwgICAgICAgICAgICAgICAgIDB4ODQ4CisjZGVmaW5lIENIM19DVFJMICAgICAgICAgICAgICAgICAweDg0YworI2RlZmluZSBETUFfQVJCSVRFUiAgICAgICAgICAgICAgMHg4NjAKKyNkZWZpbmUgVElNRVIwICAgICAgICAgICAgICAgICAgIDB4ODUwCisjZGVmaW5lIFRJTUVSMSAgICAgICAgICAgICAgICAgICAweDg1NAorI2RlZmluZSBUSU1FUjIgICAgICAgICAgICAgICAgICAgMHg4NTgKKyNkZWZpbmUgVElNRVIzICAgICAgICAgICAgICAgICAgIDB4ODVjCisjZGVmaW5lIFRJTUVSX0NUUkwgICAgICAgICAgICAgICAweDg2NAorI2RlZmluZSBQQ0lfQ01EICAgICAgICAgICAgICAgICAgMHhjMDAKKyNkZWZpbmUgUENJX1RJTUVPVVQgICAgICAgICAgICAgIDB4YzA0CisjZGVmaW5lIFBDSV9SQVMxMF9CQU5LX1NJWkUgICAgICAweGMwOAorI2RlZmluZSBQQ0lfUkFTMzJfQkFOS19TSVpFICAgICAgMHhjMGMKKyNkZWZpbmUgUENJX0NTMjBfQkFOS19TSVpFICAgICAgIDB4YzEwCisjZGVmaW5lIFBDSV9DUzNfQkFOS19TSVpFICAgICAgICAweGMxNAorI2RlZmluZSBQQ0lfU0VSUk1BU0sgICAgICAgICAgICAgMHhjMjgKKyNkZWZpbmUgUENJX0lOVEFDSyAgICAgICAgICAgICAgIDB4YzM0CisjZGVmaW5lIFBDSV9CQVJfRU4gICAgICAgICAgICAgICAweGMzYworI2RlZmluZSBQQ0lfQ0ZHX0FEUiAgICAgICAgICAgICAgMHhjZjgKKyNkZWZpbmUgUENJX0NGR19EQVRBICAgICAgICAgICAgIDB4Y2ZjCisjZGVmaW5lIFBDSV9JTlRDQVVTRSAgICAgICAgICAgICAweGMxOAorI2RlZmluZSBQQ0lfTUFTVF9NQVNLICAgICAgICAgICAgMHhjMWMKKyNkZWZpbmUgUENJX1BDSU1BU0sgICAgICAgICAgICAgIDB4YzI0CisjZGVmaW5lIEJBUl9FTkFCTEVfQURSICAgICAgICAgICAweGMzYworCisvKiBUaGVzZSBhcmUgY29uZmlnIHJlZ2lzdGVycywgYWNjZXNzaWJsZSB2aWEgUENJIHNwYWNlICovCisjZGVmaW5lIFBDSV9DT05GSUdfUkFTMTBfQkFTRV9BRFIgICAweDAxMAorI2RlZmluZSBQQ0lfQ09ORklHX1JBUzMyX0JBU0VfQURSICAgMHgwMTQKKyNkZWZpbmUgUENJX0NPTkZJR19DUzIwX0JBU0VfQURSICAgIDB4MDE4CisjZGVmaW5lIFBDSV9DT05GSUdfQ1MzX0JBU0VfQURSICAgICAweDAxYworI2RlZmluZSBQQ0lfQ09ORklHX0lOVF9SRUdfTU1fQURSICAgMHgwMjAKKyNkZWZpbmUgUENJX0NPTkZJR19JTlRfUkVHX0lPX0FEUiAgIDB4MDI0CisjZGVmaW5lIFBDSV9DT05GSUdfQk9BUkRfVkVORE9SICAgICAweDAyYworI2RlZmluZSBQQ0lfQ09ORklHX1JPTV9BRFIgICAgICAgICAgMHgwMzAKKyNkZWZpbmUgUENJX0NPTkZJR19JTlRfUElOX0xJTkUgICAgIDB4MDNjCisKKworCisKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL292ZXJkcml2ZS9pby5oIGIvaW5jbHVkZS9hc20tc2gvb3ZlcmRyaXZlL2lvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRiYTcwMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL292ZXJkcml2ZS9pby5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1zaC9pb19vZC5oCisgKgorICogQ29weXJpZ2h0IDIwMDAgU3R1YXJ0IE1lbmVmeSAoc3R1YXJ0Lm1lbmVmeUBzdC5jb20pCisgKgorICogTWF5IGJlIGNvcGllZCBvciBtb2RpZmllZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSBsaW51eC9DT1BZSU5HIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICoKKyAqIElPIGZ1bmN0aW9ucyBmb3IgYW4gU1RNaWNyb2VsZWN0cm9uaWNzIE92ZXJkcml2ZQorICovCisKKyNpZm5kZWYgX0FTTV9TSF9JT19PRF9ICisjZGVmaW5lIF9BU01fU0hfSU9fT0RfSAorCitleHRlcm4gdW5zaWduZWQgY2hhciBvZF9pbmIodW5zaWduZWQgbG9uZyBwb3J0KTsKK2V4dGVybiB1bnNpZ25lZCBzaG9ydCBvZF9pbncodW5zaWduZWQgbG9uZyBwb3J0KTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgb2RfaW5sKHVuc2lnbmVkIGxvbmcgcG9ydCk7CisKK2V4dGVybiB2b2lkIG9kX291dGIodW5zaWduZWQgY2hhciB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KTsKK2V4dGVybiB2b2lkIG9kX291dHcodW5zaWduZWQgc2hvcnQgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCk7CitleHRlcm4gdm9pZCBvZF9vdXRsKHVuc2lnbmVkIGludCB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KTsKKworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgb2RfaW5iX3AodW5zaWduZWQgbG9uZyBwb3J0KTsKK2V4dGVybiB1bnNpZ25lZCBzaG9ydCBvZF9pbndfcCh1bnNpZ25lZCBsb25nIHBvcnQpOworZXh0ZXJuIHVuc2lnbmVkIGludCBvZF9pbmxfcCh1bnNpZ25lZCBsb25nIHBvcnQpOworZXh0ZXJuIHZvaWQgb2Rfb3V0Yl9wKHVuc2lnbmVkIGNoYXIgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCk7CitleHRlcm4gdm9pZCBvZF9vdXR3X3AodW5zaWduZWQgc2hvcnQgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCk7CitleHRlcm4gdm9pZCBvZF9vdXRsX3AodW5zaWduZWQgaW50IHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpOworCitleHRlcm4gdm9pZCBvZF9pbnNiKHVuc2lnbmVkIGxvbmcgcG9ydCwgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCk7CitleHRlcm4gdm9pZCBvZF9pbnN3KHVuc2lnbmVkIGxvbmcgcG9ydCwgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCk7CitleHRlcm4gdm9pZCBvZF9pbnNsKHVuc2lnbmVkIGxvbmcgcG9ydCwgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCk7CitleHRlcm4gdm9pZCBvZF9vdXRzYih1bnNpZ25lZCBsb25nIHBvcnQsIGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpOworZXh0ZXJuIHZvaWQgb2Rfb3V0c3codW5zaWduZWQgbG9uZyBwb3J0LCBjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKK2V4dGVybiB2b2lkIG9kX291dHNsKHVuc2lnbmVkIGxvbmcgcG9ydCwgY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCk7CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIG9kX2lzYV9wb3J0MmFkZHIodW5zaWduZWQgbG9uZyBvZmZzZXQpOworCisjZW5kaWYgLyogX0FTTV9TSF9JT19PRF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9vdmVyZHJpdmUvb3ZlcmRyaXZlLmggYi9pbmNsdWRlL2FzbS1zaC9vdmVyZHJpdmUvb3ZlcmRyaXZlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE2MmFlNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL292ZXJkcml2ZS9vdmVyZHJpdmUuaApAQCAtMCwwICsxLDg5IEBACisvKiAKKyAqIENvcHlyaWdodCAoQykgMjAwMCBEYXZpZCBKLiBNY2theSAoZGF2aWQubWNrYXlAc3QuY29tKQorICoKKyAqIE1heSBiZSBjb3BpZWQgb3IgbW9kaWZpZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgbGludXgvQ09QWUlORyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2lmbmRlZiBfX09WRVJEUklWRV9IX18KKyNkZWZpbmUgX19PVkVSRFJJVkVfSF9fCisKKyNkZWZpbmUgT1ZFUkRSSVZFX0lOVF9DVCAweGEzYTAwMDAwCisjZGVmaW5lIE9WRVJEUklWRV9JTlRfRFQgMHhhM2IwMDAwMAorCisjZGVmaW5lIE9WRVJEUklWRV9DVFJMICAgIDB4YTMwMDAwMDAKKworLyogU2hvdmluZyBhbGwgdGhlc2UgYml0cyBpbnRvIHRoZSBzYW1lIHJlZ2lzdGVyIGlzIG5vdCBhIGdvb2QgaWRlYS4gCisgKiBBcyBzb29uIGFzIEkgZ2V0IGEgc3BhcmUgbW9tZW50LCBJJ2xsIGNoYW5nZSB0aGUgRlBHQSBhbmQgcHV0IGVhY2ggCisgKiBiaXQgaW4gYSBzZXBhcmF0ZSByZWdpc3RlcgorICovCisKKyNkZWZpbmUgVkFMSURfQ1RSTF9CSVRTCQkgICAgICAgICAgMHgxZgorCisjZGVmaW5lIEVOQUJMRV9SUzIzMl9NQVNLCSAgCSAgMHgxZQorI2RlZmluZSBESVNBQkxFX1JTMjMyX0JJVAkJICAweDAxCisKKyNkZWZpbmUgRU5BQkxFX05NSV9NQVNLCQkJICAweDFkCisjZGVmaW5lIERJU0FCTEVfTk1JX0JJVAkJCSAgMHgwMgorCisjZGVmaW5lIFJFU0VUX1BDSV9NQVNLCQkJICAweDFiCisjZGVmaW5lIEVOQUJMRV9QQ0lfQklUCQkJICAweDA0CisKKyNkZWZpbmUgRU5BQkxFX0xFRF9NQVNLCQkJICAweDE3CisjZGVmaW5lIERJU0FCTEVfTEVEX0JJVAkJCSAgMHgwOAorCisjZGVmaW5lIFJFU0VUX0ZQR0FfTUFTSwkJCSAgMHgwZgorI2RlZmluZSBFTkFCTEVfRlBHQV9CSVQJCQkgIDB4MTAKKworCisjZGVmaW5lIEZQR0FfRENMS19BRERSRVNTICAgICAgICAgICAweEEzQzAwMDAwCisKKyNkZWZpbmUgRlBHQV9EQVRBICAgICAgICAweDAxCS8qICAgVyAqLworI2RlZmluZSBGUEdBX0NPTkZET05FICAgIDB4MDIJLyogUiAgICovCisjZGVmaW5lIEZQR0FfTk9UX1NUQVRVUyAgMHgwNAkvKiBSICAgKi8KKyNkZWZpbmUgRlBHQV9JTklURE9ORSAgICAweDA4CS8qIFIgICAqLworCisjZGVmaW5lIEZQR0FfVElNRU9VVCAgICAgMTAwMDAwCisKKworLyogSW50ZXJydXB0cyBmb3IgdGhlIG92ZXJkcml2ZS4gTm90ZSB0aGF0IHRoZXNlIG51bWJlcnMgaGF2ZSAKKyAqIG5vdGhpbmcgdG8gZG8gd2l0aCB0aGUgYWN0dWFsIElSUSBudW1iZXJzIHRoZXkgYXBwZWFyIG9uLCAKKyAqIHRoaXMgaXMgYWxsIHByb2dyYW1tYWJsZS4gVGhpcyBpcyBzaW1wbHkgdGhlIHBvc2l0aW9uIGluIHRoZSAKKyAqIElOVF9DVCByZWdpc3Rlci4KKyAqLworCisjZGVmaW5lIE9WRVJEUklWRV9QQ0lfSU5UQSAgICAgICAgICAgICAgMAorI2RlZmluZSBPVkVSRFJJVkVfUENJX0lOVEIgICAgICAgICAgICAgIDEKKyNkZWZpbmUgT1ZFUkRSSVZFX1BDSV9JTlRDICAgICAgICAgICAgICAyCisjZGVmaW5lIE9WRVJEUklWRV9QQ0lfSU5URCAgICAgICAgICAgICAgMworI2RlZmluZSBPVkVSRFJJVkVfR0FMSUxFT19JTlQgICAgICAgICAgIDQKKyNkZWZpbmUgT1ZFUkRSSVZFX0dBTElMRU9fTE9DQUxfSU5UICAgICA1CisjZGVmaW5lIE9WRVJEUklWRV9BVURJT19JTlQgICAgICAgICAgICAgNgorI2RlZmluZSBPVkVSRFJJVkVfS0VZQk9BUkRfSU5UICAgICAgICAgIDcKKworLyogV2hpY2ggTGludXggSVJRIHNob3VsZCB3ZSBhc3NpZ24gdG8gZWFjaCBpbnRlcnJ1cHQgc291cmNlPyAqLworI2RlZmluZSBPVkVSRFJJVkVfUENJX0lSUTEgICAgICAgICAgICAgIDIKKyNpZmRlZiBDT05GSUdfSEFDS0VEX05FMksKKyNkZWZpbmUgT1ZFUkRSSVZFX1BDSV9JUlEyICAgICAgICAgICAgICA3CisjZWxzZQorI2RlZmluZSBPVkVSRFJJVkVfUENJX0lSUTIgICAgICAgICAgICAgIDIKKyN1bmRlZiBPVkVSRFJJVkVfUENJX0lOVEIgCisjZGVmaW5lIE9WRVJEUklWRV9QQ0lfSU5UQiBPVkVSRFJJVkVfUENJX0lOVEEKKworI2VuZGlmCisKKy8qIFB1dCB0aGUgRVNTIHNvbG8gYXVkaW8gY2hpcCBvbiBJUlEgNCAqLworI2RlZmluZSBPVkVSRFJJVkVfRVNTX0lSUSAgICAgICAgICAgICAgIDQKKworLyogV2hlcmUgdGhlIG1lbW9yeSBiZWhpbmQgdGhlIFBDSSBidXMgYXBwZWFycyAqLworI2RlZmluZSBQQ0lfRFJBTV9CQVNFICAgMHhiNzAwMDAwMAorI2RlZmluZSBQQ0lfRFJBTV9TSVpFICgxNioxMDI0KjEwMjQpCisjZGVmaW5lIFBDSV9EUkFNX0ZJTklTSCAoUENJX0RSQU1fQkFTRStQQ0lfRFJBTV9TSVpFLTEpCisKKy8qIFdoZXJlIHRoZSBJTyByZWdpb24gYXBwZWFycyBpbiB0aGUgbWVtb3J5ICovCisjZGVmaW5lIFBDSV9HVElPX0JBU0UgICAweGI4MDAwMDAwCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvcGFnZS5oIGIvaW5jbHVkZS9hc20tc2gvcGFnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjNmQxMjkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9wYWdlLmgKQEAgLTAsMCArMSwxNDQgQEAKKyNpZm5kZWYgX19BU01fU0hfUEFHRV9ICisjZGVmaW5lIF9fQVNNX1NIX1BBR0VfSAorCisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5ICBOaWliZSBZdXRha2EKKyAqLworCisvKgorICAgWyBQMC9VMCAodmlydHVhbCkgXQkJMHgwMDAwMDAwMCAgICAgPC0tLS0tLSBVc2VyIHNwYWNlCisgICBbIFAxIChmaXhlZCkgICBjYWNoZWQgXQkweDgwMDAwMDAwICAgICA8LS0tLS0tIEtlcm5lbCBzcGFjZQorICAgWyBQMiAoZml4ZWQpICBub24tY2FjaGFibGVdCTB4QTAwMDAwMDAgICAgIDwtLS0tLS0gUGh5c2ljYWwgYWNjZXNzCisgICBbIFAzICh2aXJ0dWFsKSBjYWNoZWRdCTB4QzAwMDAwMDAgICAgIDwtLS0tLS0gdm1hbGxvY2VkIGFyZWEKKyAgIFsgUDQgY29udHJvbCAgIF0JCTB4RTAwMDAwMDAKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKy8qIFBBR0VfU0hJRlQgZGV0ZXJtaW5lcyB0aGUgcGFnZSBzaXplICovCisjZGVmaW5lIFBBR0VfU0hJRlQJMTIKKyNkZWZpbmUgUEFHRV9TSVpFCSgxVUwgPDwgUEFHRV9TSElGVCkKKyNkZWZpbmUgUEFHRV9NQVNLCSh+KFBBR0VfU0laRS0xKSkKKyNkZWZpbmUgUFRFX01BU0sJUEFHRV9NQVNLCisKKyNpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0VfU0laRV82NEspCisjZGVmaW5lIEhQQUdFX1NISUZUCTE2CisjZWxpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0VfU0laRV8xTUIpCisjZGVmaW5lIEhQQUdFX1NISUZUCTIwCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKKyNkZWZpbmUgSFBBR0VfU0laRQkJKDFVTCA8PCBIUEFHRV9TSElGVCkKKyNkZWZpbmUgSFBBR0VfTUFTSwkJKH4oSFBBR0VfU0laRS0xKSkKKyNkZWZpbmUgSFVHRVRMQl9QQUdFX09SREVSCShIUEFHRV9TSElGVC1QQUdFX1NISUZUKQorI2VuZGlmCisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCitleHRlcm4gdm9pZCAoKmNsZWFyX3BhZ2UpKHZvaWQgKnRvKTsKK2V4dGVybiB2b2lkICgqY29weV9wYWdlKSh2b2lkICp0bywgdm9pZCAqZnJvbSk7CisKK2V4dGVybiB2b2lkIGNsZWFyX3BhZ2Vfc2xvdyh2b2lkICp0byk7CitleHRlcm4gdm9pZCBjb3B5X3BhZ2Vfc2xvdyh2b2lkICp0bywgdm9pZCAqZnJvbSk7CisKKyNpZiBkZWZpbmVkKENPTkZJR19TSDc3MDVfQ0FDSEVfMzJLQikgJiYgZGVmaW5lZChDT05GSUdfTU1VKQorc3RydWN0IHBhZ2U7CitleHRlcm4gdm9pZCBjbGVhcl91c2VyX3BhZ2Uodm9pZCAqdG8sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgc3RydWN0IHBhZ2UgKnBnKTsKK2V4dGVybiB2b2lkIGNvcHlfdXNlcl9wYWdlKHZvaWQgKnRvLCB2b2lkICpmcm9tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHN0cnVjdCBwYWdlICpwZyk7CitleHRlcm4gdm9pZCBfX2NsZWFyX3VzZXJfcGFnZSh2b2lkICp0bywgdm9pZCAqb3JpZ190byk7CitleHRlcm4gdm9pZCBfX2NvcHlfdXNlcl9wYWdlKHZvaWQgKnRvLCB2b2lkICpmcm9tLCB2b2lkICpvcmlnX3RvKTsKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TSDIpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TSDMpIHx8ICFkZWZpbmVkKENPTkZJR19NTVUpCisjZGVmaW5lIGNsZWFyX3VzZXJfcGFnZShwYWdlLCB2YWRkciwgcGcpCWNsZWFyX3BhZ2UocGFnZSkKKyNkZWZpbmUgY29weV91c2VyX3BhZ2UodG8sIGZyb20sIHZhZGRyLCBwZykJY29weV9wYWdlKHRvLCBmcm9tKQorI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NINCkKK3N0cnVjdCBwYWdlOworZXh0ZXJuIHZvaWQgY2xlYXJfdXNlcl9wYWdlKHZvaWQgKnRvLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHN0cnVjdCBwYWdlICpwZyk7CitleHRlcm4gdm9pZCBjb3B5X3VzZXJfcGFnZSh2b2lkICp0bywgdm9pZCAqZnJvbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBzdHJ1Y3QgcGFnZSAqcGcpOworZXh0ZXJuIHZvaWQgX19jbGVhcl91c2VyX3BhZ2Uodm9pZCAqdG8sIHZvaWQgKm9yaWdfdG8pOworZXh0ZXJuIHZvaWQgX19jb3B5X3VzZXJfcGFnZSh2b2lkICp0bywgdm9pZCAqZnJvbSwgdm9pZCAqb3JpZ190byk7CisjZW5kaWYKKworLyoKKyAqIFRoZXNlIGFyZSB1c2VkIHRvIG1ha2UgdXNlIG9mIEMgdHlwZS1jaGVja2luZy4uCisgKi8KK3R5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBwdGU7IH0gcHRlX3Q7Cit0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgcG1kOyB9IHBtZF90OwordHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHBnZDsgfSBwZ2RfdDsKK3R5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBwZ3Byb3Q7IH0gcGdwcm90X3Q7CisKKyNkZWZpbmUgcHRlX3ZhbCh4KQkoKHgpLnB0ZSkKKyNkZWZpbmUgcG1kX3ZhbCh4KQkoKHgpLnBtZCkKKyNkZWZpbmUgcGdkX3ZhbCh4KQkoKHgpLnBnZCkKKyNkZWZpbmUgcGdwcm90X3ZhbCh4KQkoKHgpLnBncHJvdCkKKworI2RlZmluZSBfX3B0ZSh4KSAoKHB0ZV90KSB7ICh4KSB9ICkKKyNkZWZpbmUgX19wbWQoeCkgKChwbWRfdCkgeyAoeCkgfSApCisjZGVmaW5lIF9fcGdkKHgpICgocGdkX3QpIHsgKHgpIH0gKQorI2RlZmluZSBfX3BncHJvdCh4KQkoKHBncHJvdF90KSB7ICh4KSB9ICkKKworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKworLyogdG8gYWxpZ24gdGhlIHBvaW50ZXIgdG8gdGhlIChuZXh0KSBwYWdlIGJvdW5kYXJ5ICovCisjZGVmaW5lIFBBR0VfQUxJR04oYWRkcikJKCgoYWRkcikrUEFHRV9TSVpFLTEpJlBBR0VfTUFTSykKKworLyoKKyAqIElGIFlPVSBDSEFOR0UgVEhJUywgUExFQVNFIEFMU08gQ0hBTkdFCisgKgorICoJYXJjaC9zaC9rZXJuZWwvdm1saW51eC5sZHMuUworICoKKyAqIHdoaWNoIGhhcyB0aGUgc2FtZSBjb25zdGFudCBlbmNvZGVkLi4KKyAqLworCisjZGVmaW5lIF9fTUVNT1JZX1NUQVJUCQlDT05GSUdfTUVNT1JZX1NUQVJUCisjZGVmaW5lIF9fTUVNT1JZX1NJWkUJCUNPTkZJR19NRU1PUllfU0laRQorI2lmZGVmIENPTkZJR19ESVNDT05USUdNRU0KKy8qIEp1c3QgZm9yIEhQNjkwLCBmb3Igbm93Li4gKi8KKyNkZWZpbmUgX19NRU1PUllfU1RBUlRfMk5ECShfX01FTU9SWV9TVEFSVCsweDAyMDAwMDAwKQorI2RlZmluZSBfX01FTU9SWV9TSVpFXzJORAkweDAwMTAwMDAwMCAvKiAxNk1CICovCisjZW5kaWYKKworI2RlZmluZSBQQUdFX09GRlNFVAkJKDB4ODAwMDAwMDBVTCkKKyNkZWZpbmUgX19wYSh4KQkJCSgodW5zaWduZWQgbG9uZykoeCktUEFHRV9PRkZTRVQpCisjZGVmaW5lIF9fdmEoeCkJCQkoKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKHgpK1BBR0VfT0ZGU0VUKSkKKworI2RlZmluZSBNQVBfTlIoYWRkcikJCSgoKHVuc2lnbmVkIGxvbmcpKGFkZHIpLVBBR0VfT0ZGU0VUKSA+PiBQQUdFX1NISUZUKQorCisjaWZuZGVmIENPTkZJR19ESVNDT05USUdNRU0KKyNkZWZpbmUgcGh5c190b19wYWdlKHBoeXMpCShtZW1fbWFwICsgKCgocGh5cyktX19NRU1PUllfU1RBUlQpID4+IFBBR0VfU0hJRlQpKQorI2RlZmluZSBwYWdlX3RvX3BoeXMocGFnZSkJKCgocGFnZSAtIG1lbV9tYXApIDw8IFBBR0VfU0hJRlQpICsgX19NRU1PUllfU1RBUlQpCisjZW5kaWYKKworLyogUEZOIHN0YXJ0IG51bWJlciwgYmVjYXVzZSBvZiBfX01FTU9SWV9TVEFSVCAqLworI2RlZmluZSBQRk5fU1RBUlQJCShfX01FTU9SWV9TVEFSVCA+PiBQQUdFX1NISUZUKQorCisjZGVmaW5lIHBmbl90b19wYWdlKHBmbikJKG1lbV9tYXAgKyAocGZuKSAtIFBGTl9TVEFSVCkKKyNkZWZpbmUgcGFnZV90b19wZm4ocGFnZSkJKCh1bnNpZ25lZCBsb25nKSgocGFnZSkgLSBtZW1fbWFwKSArIFBGTl9TVEFSVCkKKyNkZWZpbmUgdmlydF90b19wYWdlKGthZGRyKQlwZm5fdG9fcGFnZShfX3BhKGthZGRyKSA+PiBQQUdFX1NISUZUKQorI2RlZmluZSBwZm5fdmFsaWQocGZuKQkJKCgocGZuKSAtIFBGTl9TVEFSVCkgPCBtYXhfbWFwbnIpCisjZGVmaW5lIHZpcnRfYWRkcl92YWxpZChrYWRkcikJcGZuX3ZhbGlkKF9fcGEoa2FkZHIpID4+IFBBR0VfU0hJRlQpCisKKyNkZWZpbmUgVk1fREFUQV9ERUZBVUxUX0ZMQUdTCShWTV9SRUFEIHwgVk1fV1JJVEUgfCBWTV9FWEVDIHwgXAorCQkJCSBWTV9NQVlSRUFEIHwgVk1fTUFZV1JJVEUgfCBWTV9NQVlFWEVDKQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisvKiBQdXJlIDJebiB2ZXJzaW9uIG9mIGdldF9vcmRlciAqLworc3RhdGljIF9faW5saW5lX18gaW50IGdldF9vcmRlcih1bnNpZ25lZCBsb25nIHNpemUpCit7CisJaW50IG9yZGVyOworCisJc2l6ZSA9IChzaXplLTEpID4+IChQQUdFX1NISUZULTEpOworCW9yZGVyID0gLTE7CisJZG8geworCQlzaXplID4+PSAxOworCQlvcmRlcisrOworCX0gd2hpbGUgKHNpemUpOworCXJldHVybiBvcmRlcjsKK30KKworI2VuZGlmCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfX0FTTV9TSF9QQUdFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL3BhcmFtLmggYi9pbmNsdWRlL2FzbS1zaC9wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlMTMwNjQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9wYXJhbS5oCkBAIC0wLDAgKzEsMjYgQEAKKyNpZm5kZWYgX19BU01fU0hfUEFSQU1fSAorI2RlZmluZSBfX0FTTV9TSF9QQVJBTV9ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisjIGlmZGVmIENPTkZJR19TSF9XRFQKKyMgIGRlZmluZSBIWgkJMTAwMAkJLyogTmVlZGVkIGZvciBoaWdoLXJlcyBXT1ZGICovCisjIGVsc2UKKyMgIGRlZmluZSBIWgkJMTAwCisjIGVuZGlmCisjIGRlZmluZSBVU0VSX0haCTEwMAkJLyogVXNlciBpbnRlcmZhY2VzIGFyZSBpbiAidGlja3MiICovCisjIGRlZmluZSBDTE9DS1NfUEVSX1NFQwkoVVNFUl9IWikJLyogZnJlcXVlbmN5IGF0IHdoaWNoIHRpbWVzKCkgY291bnRzICovCisjZW5kaWYKKworI2lmbmRlZiBIWgorI2RlZmluZSBIWiAxMDAKKyNlbmRpZgorCisjZGVmaW5lIEVYRUNfUEFHRVNJWkUJNDA5NgorCisjaWZuZGVmIE5PR1JPVVAKKyNkZWZpbmUgTk9HUk9VUAkJKC0xKQorI2VuZGlmCisKKyNkZWZpbmUgTUFYSE9TVE5BTUVMRU4JNjQJLyogbWF4IGxlbmd0aCBvZiBob3N0bmFtZSAqLworCisjZW5kaWYgLyogX19BU01fU0hfUEFSQU1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvcGNpLmggYi9pbmNsdWRlL2FzbS1zaC9wY2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzNiNjNkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvcGNpLmgKQEAgLTAsMCArMSwxMjAgQEAKKyNpZm5kZWYgX19BU01fU0hfUENJX0gKKyNkZWZpbmUgX19BU01fU0hfUENJX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisKKy8qIENhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIHRoZSBsb2dpYyBpbiBwY2lfc2Nhbl9idXMgZm9yIHNraXBwaW5nCisgICBhbHJlYWR5LWNvbmZpZ3VyZWQgYnVzIG51bWJlcnMgLSB0byBiZSB1c2VkIGZvciBidWdneSBCSU9TZXMKKyAgIG9yIGFyY2hpdGVjdHVyZXMgd2l0aCBpbmNvbXBsZXRlIFBDSSBzZXR1cCBieSB0aGUgbG9hZGVyICovCisKKyNkZWZpbmUgcGNpYmlvc19hc3NpZ25fYWxsX2J1c3NlcygpCTEKKyNkZWZpbmUgcGNpYmlvc19zY2FuX2FsbF9mbnMoYSwgYikJMAorCisvKgorICogQSBib2FyZCBjYW4gZGVmaW5lIG9uZSBvciBtb3JlIFBDSSBjaGFubmVscyB0aGF0IHJlcHJlc2VudCBidWlsdC1pbiAob3IKKyAqIGV4dGVybmFsKSBQQ0kgY29udHJvbGxlcnMuCisgKi8KK3N0cnVjdCBwY2lfY2hhbm5lbCB7CisJc3RydWN0IHBjaV9vcHMgKnBjaV9vcHM7CisJc3RydWN0IHJlc291cmNlICppb19yZXNvdXJjZTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKm1lbV9yZXNvdXJjZTsKKwlpbnQgZmlyc3RfZGV2Zm47CisJaW50IGxhc3RfZGV2Zm47Cit9OworCisvKgorICogRWFjaCBib2FyZCBpbml0aWFsaXplcyB0aGlzIGFycmF5IGFuZCB0ZXJtaW5hdGVzIGl0IHdpdGggYSBOVUxMIGVudHJ5LgorICovCitleHRlcm4gc3RydWN0IHBjaV9jaGFubmVsIGJvYXJkX3BjaV9jaGFubmVsc1tdOworCisjZGVmaW5lIFBDSUJJT1NfTUlOX0lPCQlib2FyZF9wY2lfY2hhbm5lbHMtPmlvX3Jlc291cmNlLT5zdGFydAorI2RlZmluZSBQQ0lCSU9TX01JTl9NRU0JCWJvYXJkX3BjaV9jaGFubmVscy0+bWVtX3Jlc291cmNlLT5zdGFydAorCitzdHJ1Y3QgcGNpX2RldjsKKworZXh0ZXJuIHZvaWQgcGNpYmlvc19zZXRfbWFzdGVyKHN0cnVjdCBwY2lfZGV2ICpkZXYpOworCitzdGF0aWMgaW5saW5lIHZvaWQgcGNpYmlvc19wZW5hbGl6ZV9pc2FfaXJxKGludCBpcnEpCit7CisJLyogV2UgZG9uJ3QgZG8gZHluYW1pYyBQQ0kgSVJRIGFsbG9jYXRpb24gKi8KK30KKworLyogRHluYW1pYyBETUEgbWFwcGluZyBzdHVmZi4KKyAqIFN1cGVySCBoYXMgZXZlcnl0aGluZyBtYXBwZWQgc3RhdGljYWxseSBsaWtlIHg4Ni4KKyAqLworCisvKiBUaGUgUENJIGFkZHJlc3Mgc3BhY2UgZG9lcyBlcXVhbCB0aGUgcGh5c2ljYWwgbWVtb3J5CisgKiBhZGRyZXNzIHNwYWNlLiAgVGhlIG5ldHdvcmtpbmcgYW5kIGJsb2NrIGRldmljZSBsYXllcnMgdXNlCisgKiB0aGlzIGJvb2xlYW4gZm9yIGJvdW5jZSBidWZmZXIgZGVjaXNpb25zLgorICovCisjZGVmaW5lIFBDSV9ETUFfQlVTX0lTX1BIWVMJKDEpCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxhc20vc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworLyogcGNpX3VubWFwX3tzaW5nbGUscGFnZX0gYmVpbmcgYSBub3AgZGVwZW5kcyB1cG9uIHRoZQorICogY29uZmlndXJhdGlvbi4KKyAqLworI2lmZGVmIENPTkZJR19TSF9QQ0lETUFfTk9OQ09IRVJFTlQKKyNkZWZpbmUgREVDTEFSRV9QQ0lfVU5NQVBfQUREUihBRERSX05BTUUpCVwKKwlkbWFfYWRkcl90IEFERFJfTkFNRTsKKyNkZWZpbmUgREVDTEFSRV9QQ0lfVU5NQVBfTEVOKExFTl9OQU1FKQkJXAorCV9fdTMyIExFTl9OQU1FOworI2RlZmluZSBwY2lfdW5tYXBfYWRkcihQVFIsIEFERFJfTkFNRSkJCQlcCisJKChQVFIpLT5BRERSX05BTUUpCisjZGVmaW5lIHBjaV91bm1hcF9hZGRyX3NldChQVFIsIEFERFJfTkFNRSwgVkFMKQkJXAorCSgoKFBUUiktPkFERFJfTkFNRSkgPSAoVkFMKSkKKyNkZWZpbmUgcGNpX3VubWFwX2xlbihQVFIsIExFTl9OQU1FKQkJCVwKKwkoKFBUUiktPkxFTl9OQU1FKQorI2RlZmluZSBwY2lfdW5tYXBfbGVuX3NldChQVFIsIExFTl9OQU1FLCBWQUwpCQlcCisJKCgoUFRSKS0+TEVOX05BTUUpID0gKFZBTCkpCisjZWxzZQorI2RlZmluZSBERUNMQVJFX1BDSV9VTk1BUF9BRERSKEFERFJfTkFNRSkKKyNkZWZpbmUgREVDTEFSRV9QQ0lfVU5NQVBfTEVOKExFTl9OQU1FKQorI2RlZmluZSBwY2lfdW5tYXBfYWRkcihQVFIsIEFERFJfTkFNRSkJCSgwKQorI2RlZmluZSBwY2lfdW5tYXBfYWRkcl9zZXQoUFRSLCBBRERSX05BTUUsIFZBTCkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBwY2lfdW5tYXBfbGVuKFBUUiwgTEVOX05BTUUpCQkoMCkKKyNkZWZpbmUgcGNpX3VubWFwX2xlbl9zZXQoUFRSLCBMRU5fTkFNRSwgVkFMKQlkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKworLyogTm90IHN1cHBvcnRpbmcgbW9yZSB0aGFuIDMyLWJpdCBQQ0kgYnVzIGFkZHJlc3NlcyBub3csIGJ1dAorICogbXVzdCBzYXRpc2Z5IHJlZmVyZW5jZXMgdG8gdGhpcyBmdW5jdGlvbi4gIENoYW5nZSBpZiBuZWVkZWQuCisgKi8KKyNkZWZpbmUgcGNpX2RhY19kbWFfc3VwcG9ydGVkKHBjaV9kZXYsIG1hc2spICgwKQorCisvKiBUaGVzZSBtYWNyb3Mgc2hvdWxkIGJlIHVzZWQgYWZ0ZXIgYSBwY2lfbWFwX3NnIGNhbGwgaGFzIGJlZW4gZG9uZQorICogdG8gZ2V0IGJ1cyBhZGRyZXNzZXMgb2YgZWFjaCBvZiB0aGUgU0cgZW50cmllcyBhbmQgdGhlaXIgbGVuZ3Rocy4KKyAqIFlvdSBzaG91bGQgb25seSB3b3JrIHdpdGggdGhlIG51bWJlciBvZiBzZyBlbnRyaWVzIHBjaV9tYXBfc2cKKyAqIHJldHVybnMsIG9yIGFsdGVybmF0aXZlbHkgc3RvcCBvbiB0aGUgZmlyc3Qgc2dfZG1hX2xlbihzZykgd2hpY2gKKyAqIGlzIDAuCisgKi8KKyNkZWZpbmUgc2dfZG1hX2FkZHJlc3Moc2cpCSh2aXJ0X3RvX2J1cygoc2cpLT5kbWFfYWRkcmVzcykpCisjZGVmaW5lIHNnX2RtYV9sZW4oc2cpCQkoKHNnKS0+bGVuZ3RoKQorCisvKiBCb2FyZC1zcGVjaWZpYyBmaXh1cCByb3V0aW5lcy4gKi8KK2V4dGVybiB2b2lkIHBjaWJpb3NfZml4dXAodm9pZCk7CitleHRlcm4gdm9pZCBwY2liaW9zX2ZpeHVwX2lycXModm9pZCk7CisKKyNpZmRlZiBDT05GSUdfUENJX0FVVE8KK2V4dGVybiBpbnQgcGNpYXV0b19hc3NpZ25fcmVzb3VyY2VzKGludCBidXNubywgc3RydWN0IHBjaV9jaGFubmVsICpob3NlKTsKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHZvaWQgcGNpYmlvc19hZGRfcGxhdGZvcm1fZW50cmllcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworfQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisvKiBnZW5lcmljIHBjaSBzdHVmZiAqLworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BjaS5oPgorCisvKiBnZW5lcmljIERNQS1tYXBwaW5nIHN0dWZmICovCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGNpLWRtYS1jb21wYXQuaD4KKworI2VuZGlmIC8qIF9fQVNNX1NIX1BDSV9IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL3BlcmNwdS5oIGIvaW5jbHVkZS9hc20tc2gvcGVyY3B1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRiNGIzOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL3BlcmNwdS5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfX0FSQ0hfU0hfUEVSQ1BVCisjZGVmaW5lIF9fQVJDSF9TSF9QRVJDUFUKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BlcmNwdS5oPgorCisjZW5kaWYgLyogX19BUkNIX1NIX1BFUkNQVSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvcGdhbGxvYy5oIGIvaW5jbHVkZS9hc20tc2gvcGdhbGxvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0ZjIzM2YKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9wZ2FsbG9jLmgKQEAgLTAsMCArMSw4OCBAQAorI2lmbmRlZiBfX0FTTV9TSF9QR0FMTE9DX0gKKyNkZWZpbmUgX19BU01fU0hfUEdBTExPQ19ICisKKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisKKyNkZWZpbmUgcGdkX3F1aWNrbGlzdCAoKHVuc2lnbmVkIGxvbmcgKikwKQorI2RlZmluZSBwbWRfcXVpY2tsaXN0ICgodW5zaWduZWQgbG9uZyAqKTApCisjZGVmaW5lIHB0ZV9xdWlja2xpc3QgKCh1bnNpZ25lZCBsb25nICopMCkKKyNkZWZpbmUgcGd0YWJsZV9jYWNoZV9zaXplIDBMCisKKyNkZWZpbmUgcG1kX3BvcHVsYXRlX2tlcm5lbChtbSwgcG1kLCBwdGUpIFwKKwkJc2V0X3BtZChwbWQsIF9fcG1kKF9QQUdFX1RBQkxFICsgX19wYShwdGUpKSkKKworc3RhdGljIGlubGluZSB2b2lkIHBtZF9wb3B1bGF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZCwKKwkJCQlzdHJ1Y3QgcGFnZSAqcHRlKQoreworCXNldF9wbWQocG1kLCBfX3BtZChfUEFHRV9UQUJMRSArIHBhZ2VfdG9fcGh5cyhwdGUpKSk7Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBhbmQgZnJlZSBwYWdlIHRhYmxlcy4KKyAqLworc3RhdGljIGlubGluZSBwZ2RfdCAqcGdkX2FsbG9jKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCXVuc2lnbmVkIGludCBwZ2Rfc2l6ZSA9IChVU0VSX1BUUlNfUEVSX1BHRCAqIHNpemVvZihwZ2RfdCkpOworCXBnZF90ICpwZ2QgPSAocGdkX3QgKilrbWFsbG9jKHBnZF9zaXplLCBHRlBfS0VSTkVMKTsKKworCWlmIChwZ2QpCisJCW1lbXNldChwZ2QsIDAsIHBnZF9zaXplKTsKKworCXJldHVybiBwZ2Q7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwZ2RfZnJlZShwZ2RfdCAqcGdkKQoreworCWtmcmVlKHBnZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgcHRlX3QgKnB0ZV9hbGxvY19vbmVfa2VybmVsKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJCQkgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwlwdGVfdCAqcHRlOworCisJcHRlID0gKHB0ZV90ICopIF9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMIHwgX19HRlBfUkVQRUFUIHwgX19HRlBfWkVSTyk7CisKKwlyZXR1cm4gcHRlOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpwdGVfYWxsb2Nfb25lKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJCQkgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCXN0cnVjdCBwYWdlICpwdGU7CisKKyAgIAlwdGUgPSBhbGxvY19wYWdlcyhHRlBfS0VSTkVMfF9fR0ZQX1JFUEVBVHxfX0dGUF9aRVJPLCAwKTsKKworCXJldHVybiBwdGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdGVfZnJlZV9rZXJuZWwocHRlX3QgKnB0ZSkKK3sKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcHRlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHB0ZV9mcmVlKHN0cnVjdCBwYWdlICpwdGUpCit7CisJX19mcmVlX3BhZ2UocHRlKTsKK30KKworI2RlZmluZSBfX3B0ZV9mcmVlX3RsYih0bGIscHRlKSB0bGJfcmVtb3ZlX3BhZ2UoKHRsYiksKHB0ZSkpCisKKy8qCisgKiBhbGxvY2F0aW5nIGFuZCBmcmVlaW5nIGEgcG1kIGlzIHRyaXZpYWw6IHRoZSAxLWVudHJ5IHBtZCBpcworICogaW5zaWRlIHRoZSBwZ2QsIHNvIGhhcyBubyBleHRyYSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIGl0LgorICovCisKKyNkZWZpbmUgcG1kX2FsbG9jX29uZShtbSwgYWRkcikJCSh7IEJVRygpOyAoKHBtZF90ICopMik7IH0pCisjZGVmaW5lIHBtZF9mcmVlKHgpCQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBfX3BtZF9mcmVlX3RsYih0bGIseCkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgcGdkX3BvcHVsYXRlKG1tLCBwbWQsIHB0ZSkJQlVHKCkKKyNkZWZpbmUgY2hlY2tfcGd0X2NhY2hlKCkJCWRvIHsgfSB3aGlsZSAoMCkKKworI2lmZGVmIENPTkZJR19DUFVfU0g0CisjZGVmaW5lIFBHX21hcHBlZAkJCVBHX2FyY2hfMQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0FTTV9TSF9QR0FMTE9DX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL3BndGFibGUtMmxldmVsLmggYi9pbmNsdWRlL2FzbS1zaC9wZ3RhYmxlLTJsZXZlbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwNTI4YWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9wZ3RhYmxlLTJsZXZlbC5oCkBAIC0wLDAgKzEsNjcgQEAKKyNpZm5kZWYgX19BU01fU0hfUEdUQUJMRV8yTEVWRUxfSAorI2RlZmluZSBfX0FTTV9TSF9QR1RBQkxFXzJMRVZFTF9ICisKKy8qCisgKiB0cmFkaXRpb25hbCB0d28tbGV2ZWwgcGFnaW5nIHN0cnVjdHVyZToKKyAqLworCisjZGVmaW5lIFBHRElSX1NISUZUCTIyCisjZGVmaW5lIFBUUlNfUEVSX1BHRAkxMDI0CisKKy8qCisgKiB0aGlzIGlzIHR3by1sZXZlbCwgc28gd2UgZG9uJ3QgcmVhbGx5IGhhdmUgYW55CisgKiBQTUQgZGlyZWN0b3J5IHBoeXNpY2FsbHkuCisgKi8KKyNkZWZpbmUgUE1EX1NISUZUCTIyCisjZGVmaW5lIFBUUlNfUEVSX1BNRAkxCisKKyNkZWZpbmUgUFRSU19QRVJfUFRFCTEwMjQKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNkZWZpbmUgcHRlX0VSUk9SKGUpIFwKKwlwcmludGsoIiVzOiVkOiBiYWQgcHRlICUwOGx4LlxuIiwgX19GSUxFX18sIF9fTElORV9fLCBwdGVfdmFsKGUpKQorI2RlZmluZSBwbWRfRVJST1IoZSkgXAorCXByaW50aygiJXM6JWQ6IGJhZCBwbWQgJTA4bHguXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sIHBtZF92YWwoZSkpCisjZGVmaW5lIHBnZF9FUlJPUihlKSBcCisJcHJpbnRrKCIlczolZDogYmFkIHBnZCAlMDhseC5cbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgcGdkX3ZhbChlKSkKKworLyoKKyAqIFRoZSAicGdkX3h4eCgpIiBmdW5jdGlvbnMgaGVyZSBhcmUgdHJpdmlhbCBmb3IgYSBmb2xkZWQgdHdvLWxldmVsCisgKiBzZXR1cDogdGhlIHBnZCBpcyBuZXZlciBiYWQsIGFuZCBhIHBtZCBhbHdheXMgZXhpc3RzIChhcyBpdCdzIGZvbGRlZAorICogaW50byB0aGUgcGdkIGVudHJ5KQorICovCitzdGF0aWMgaW5saW5lIGludCBwZ2Rfbm9uZShwZ2RfdCBwZ2QpCQl7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIGludCBwZ2RfYmFkKHBnZF90IHBnZCkJCXsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHBnZF9wcmVzZW50KHBnZF90IHBnZCkJeyByZXR1cm4gMTsgfQorc3RhdGljIGlubGluZSB2b2lkIHBnZF9jbGVhciAocGdkX3QgKiBwZ2RwKSAJeyB9CisKKy8qCisgKiBDZXJ0YWluIGFyY2hpdGVjdHVyZXMgbmVlZCB0byBkbyBzcGVjaWFsIHRoaW5ncyB3aGVuIFBURXMKKyAqIHdpdGhpbiBhIHBhZ2UgdGFibGUgYXJlIGRpcmVjdGx5IG1vZGlmaWVkLiAgVGh1cywgdGhlIGZvbGxvd2luZworICogaG9vayBpcyBtYWRlIGF2YWlsYWJsZS4KKyAqLworI2RlZmluZSBzZXRfcHRlKHB0ZXB0ciwgcHRldmFsKSAoKihwdGVwdHIpID0gcHRldmFsKQorI2RlZmluZSBzZXRfcHRlX2F0KG1tLGFkZHIscHRlcCxwdGV2YWwpIHNldF9wdGUocHRlcCxwdGV2YWwpCisKKy8qCisgKiAocG1kcyBhcmUgZm9sZGVkIGludG8gcGdkcyBzbyB0aGlzIGRvZXNuJ3QgZ2V0IGFjdHVhbGx5IGNhbGxlZCwKKyAqIGJ1dCB0aGUgZGVmaW5lIGlzIG5lZWRlZCBmb3IgYSBnZW5lcmljIGlubGluZSBmdW5jdGlvbi4pCisgKi8KKyNkZWZpbmUgc2V0X3BtZChwbWRwdHIsIHBtZHZhbCkgKCoocG1kcHRyKSA9IHBtZHZhbCkKKyNkZWZpbmUgc2V0X3BnZChwZ2RwdHIsIHBnZHZhbCkgKCoocGdkcHRyKSA9IHBnZHZhbCkKKworI2RlZmluZSBwZ2RfcGFnZShwZ2QpIFwKKygodW5zaWduZWQgbG9uZykgX192YShwZ2RfdmFsKHBnZCkgJiBQQUdFX01BU0spKQorCitzdGF0aWMgaW5saW5lIHBtZF90ICogcG1kX29mZnNldChwZ2RfdCAqIGRpciwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCXJldHVybiAocG1kX3QgKikgZGlyOworfQorCisjZGVmaW5lIHB0ZV9wZm4oeCkJCSgodW5zaWduZWQgbG9uZykoKCh4KS5wdGUgPj4gUEFHRV9TSElGVCkpKQorI2RlZmluZSBwZm5fcHRlKHBmbiwgcHJvdCkJX19wdGUoKChwZm4pIDw8IFBBR0VfU0hJRlQpIHwgcGdwcm90X3ZhbChwcm90KSkKKyNkZWZpbmUgcGZuX3BtZChwZm4sIHByb3QpCV9fcG1kKCgocGZuKSA8PCBQQUdFX1NISUZUKSB8IHBncHJvdF92YWwocHJvdCkpCisKKyNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiBfX0FTTV9TSF9QR1RBQkxFXzJMRVZFTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1zaC9wZ3RhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE5Njg5ZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL3BndGFibGUuaApAQCAtMCwwICsxLDMwNiBAQAorI2lmbmRlZiBfX0FTTV9TSF9QR1RBQkxFX0gKKyNkZWZpbmUgX19BU01fU0hfUEdUQUJMRV9ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy80bGV2ZWwtZml4dXAuaD4KKworLyoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBOaWliZSBZdXRha2EKKyAqIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMywgMjAwNCBQYXVsIE11bmR0CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLTJsZXZlbC5oPgorCisvKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBmdW5jdGlvbnMgYW5kIGRlZmluZXMgbmVjZXNzYXJ5IHRvIG1vZGlmeSBhbmQgdXNlCisgKiB0aGUgU3VwZXJIIHBhZ2UgdGFibGUgdHJlZS4KKyAqLworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgorI2luY2x1ZGUgPGFzbS9maXhtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisKK2V4dGVybiBwZ2RfdCBzd2FwcGVyX3BnX2RpcltQVFJTX1BFUl9QR0RdOworZXh0ZXJuIHZvaWQgcGFnaW5nX2luaXQodm9pZCk7CisKKy8qCisgKiBCYXNpY2FsbHkgd2UgaGF2ZSB0aGUgc2FtZSB0d28tbGV2ZWwgKHdoaWNoIGlzIHRoZSBsb2dpY2FsIHRocmVlIGxldmVsCisgKiBMaW51eCBwYWdlIHRhYmxlIGxheW91dCBmb2xkZWQpIHBhZ2UgdGFibGVzIGFzIHRoZSBpMzg2LgorICovCisKKy8qCisgKiBaRVJPX1BBR0UgaXMgYSBnbG9iYWwgc2hhcmVkIHBhZ2UgdGhhdCBpcyBhbHdheXMgemVybzogdXNlZAorICogZm9yIHplcm8tbWFwcGVkIG1lbW9yeSBhcmVhcyBldGMuLgorICovCitleHRlcm4gdW5zaWduZWQgbG9uZyBlbXB0eV96ZXJvX3BhZ2VbMTAyNF07CisjZGVmaW5lIFpFUk9fUEFHRSh2YWRkcikgKHZpcnRfdG9fcGFnZShlbXB0eV96ZXJvX3BhZ2UpKQorCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisjZGVmaW5lIFBNRF9TSVpFCSgxVUwgPDwgUE1EX1NISUZUKQorI2RlZmluZSBQTURfTUFTSwkofihQTURfU0laRS0xKSkKKyNkZWZpbmUgUEdESVJfU0laRQkoMVVMIDw8IFBHRElSX1NISUZUKQorI2RlZmluZSBQR0RJUl9NQVNLCSh+KFBHRElSX1NJWkUtMSkpCisKKyNkZWZpbmUgVVNFUl9QVFJTX1BFUl9QR0QJKFRBU0tfU0laRS9QR0RJUl9TSVpFKQorI2RlZmluZSBGSVJTVF9VU0VSX1BHRF9OUgkwCisKKyNkZWZpbmUgUFRFX1BIWVNfTUFTSwkweDFmZmZmMDAwCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisvKgorICogRmlyc3QgMU1CIG1hcCBpcyB1c2VkIGJ5IGZpeGVkIHB1cnBvc2UuCisgKiBDdXJyZW50bHkgb25seSA0LWVudHkgKDE2a0IpIGlzIHVzZWQgKHNlZSBhcmNoL3NoL21tL2NhY2hlLmMpCisgKi8KKyNkZWZpbmUgVk1BTExPQ19TVEFSVAkoUDNTRUcrMHgwMDEwMDAwMCkKKyNkZWZpbmUgVk1BTExPQ19FTkQJKEZJWEFERFJfU1RBUlQtMipQQUdFX1NJWkUpCisKKyNkZWZpbmUJX1BBR0VfV1QJMHgwMDEgIC8qIFdULWJpdCBvbiBTSC00LCAwIG9uIFNILTMgKi8KKyNkZWZpbmUgX1BBR0VfSFdfU0hBUkVECTB4MDAyICAvKiBTSC1iaXQgIDogcGFnZSBpcyBzaGFyZWQgYW1vbmcgcHJvY2Vzc2VzICovCisjZGVmaW5lIF9QQUdFX0RJUlRZCTB4MDA0ICAvKiBELWJpdCAgIDogcGFnZSBjaGFuZ2VkICovCisjZGVmaW5lIF9QQUdFX0NBQ0hBQkxFCTB4MDA4ICAvKiBDLWJpdCAgIDogY2FjaGFibGUgKi8KKyNkZWZpbmUgX1BBR0VfU1owCTB4MDEwICAvKiBTWjAtYml0IDogU2l6ZSBvZiBwYWdlICovCisjZGVmaW5lIF9QQUdFX1JXCTB4MDIwICAvKiBQUjAtYml0IDogd3JpdGUgYWNjZXNzIGFsbG93ZWQgKi8KKyNkZWZpbmUgX1BBR0VfVVNFUgkweDA0MCAgLyogUFIxLWJpdCA6IHVzZXIgc3BhY2UgYWNjZXNzIGFsbG93ZWQgKi8KKyNkZWZpbmUgX1BBR0VfU1oxCTB4MDgwICAvKiBTWjEtYml0IDogU2l6ZSBvZiBwYWdlIChvbiBTSC00KSAqLworI2RlZmluZSBfUEFHRV9QUkVTRU5UCTB4MTAwICAvKiBWLWJpdCAgIDogcGFnZSBpcyB2YWxpZCAqLworI2RlZmluZSBfUEFHRV9QUk9UTk9ORQkweDIwMCAgLyogc29mdHdhcmU6IGlmIG5vdCBwcmVzZW50ICAqLworI2RlZmluZSBfUEFHRV9BQ0NFU1NFRCAJMHg0MDAgIC8qIHNvZnR3YXJlOiBwYWdlIHJlZmVyZW5jZWQgKi8KKyNkZWZpbmUgX1BBR0VfVTBfU0hBUkVEIDB4ODAwICAvKiBzb2Z0d2FyZTogcGFnZSBpcyBzaGFyZWQgaW4gdXNlciBzcGFjZSAqLworCisjZGVmaW5lCV9QQUdFX0ZJTEUJX1BBR0VfV1QgIC8qIHNvZnR3YXJlOiBwYWdlY2FjaGUgb3Igc3dhcD8gKi8KKworLyogc29mdHdhcmU6IG1vdmVzIHRvIFBURUEuVEMgKFRpbWluZyBDb250cm9sKSAqLworI2RlZmluZSBfUEFHRV9QQ0NfQVJFQTUJMHgwMDAwMDAwMAkvKiB1c2UgQlNDIHJlZ2lzdGVycyBmb3IgYXJlYTUgKi8KKyNkZWZpbmUgX1BBR0VfUENDX0FSRUE2CTB4ODAwMDAwMDAJLyogdXNlIEJTQyByZWdpc3RlcnMgZm9yIGFyZWE2ICovCisKKy8qIHNvZnR3YXJlOiBtb3ZlcyB0byBQVEVBLlNBWzI6MF0gKFNwYWNlIEF0dHJpYnV0ZXMpICovCisjZGVmaW5lIF9QQUdFX1BDQ19JT0RZTiAweDAwMDAwMDAxCS8qIElPIHNwYWNlLCBkeW5hbWljYWxseSBzaXplZCBidXMgKi8KKyNkZWZpbmUgX1BBR0VfUENDX0lPOAkweDIwMDAwMDAwCS8qIElPIHNwYWNlLCA4IGJpdCBidXMgKi8KKyNkZWZpbmUgX1BBR0VfUENDX0lPMTYJMHgyMDAwMDAwMQkvKiBJTyBzcGFjZSwgMTYgYml0IGJ1cyAqLworI2RlZmluZSBfUEFHRV9QQ0NfQ09NOAkweDQwMDAwMDAwCS8qIENvbW1vbiBNZW1vcnkgc3BhY2UsIDggYml0IGJ1cyAqLworI2RlZmluZSBfUEFHRV9QQ0NfQ09NMTYJMHg0MDAwMDAwMQkvKiBDb21tb24gTWVtb3J5IHNwYWNlLCAxNiBiaXQgYnVzICovCisjZGVmaW5lIF9QQUdFX1BDQ19BVFI4CTB4NjAwMDAwMDAJLyogQXR0cmlidXRlIE1lbW9yeSBzcGFjZSwgOCBiaXQgYnVzICovCisjZGVmaW5lIF9QQUdFX1BDQ19BVFIxNgkweDYwMDAwMDAxCS8qIEF0dHJpYnV0ZSBNZW1vcnkgc3BhY2UsIDYgYml0IGJ1cyAqLworCisKKy8qIE1hc2sgd2hpY2ggZHJvcCBzb2Z0d2FyZSBmbGFncworICogV2UgYWxzbyBkcm9wIFdUIGJpdCBzaW5jZSBpdCBpcyB1c2VkIGZvciBfUEFHRV9GSUxFCisgKiBiaXQgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbi4KKyAqLworI2RlZmluZSBfUEFHRV9DTEVBUl9GTEFHUwkoX1BBR0VfV1QgfCBfUEFHRV9QUk9UTk9ORSB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfVTBfU0hBUkVEKQorCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NIMykKKy8qCisgKiBNTVUgb24gU0gtMyBoYXMgYnVnIG9uIFNILWJpdDogV2UgY2FuJ3QgdXNlIGl0IGlmIE1NVUNSLklYPTEuCisgKiBXb3JrIGFyb3VuZDogSnVzdCBkcm9wIFNILWJpdC4KKyAqLworI2RlZmluZSBfUEFHRV9GTEFHU19IQVJEV0FSRV9NQVNLCSgweDFmZmZmZmZmICYgfihfUEFHRV9DTEVBUl9GTEFHUyB8IF9QQUdFX0hXX1NIQVJFRCkpCisjZWxzZQorI2RlZmluZSBfUEFHRV9GTEFHU19IQVJEV0FSRV9NQVNLCSgweDFmZmZmZmZmICYgfihfUEFHRV9DTEVBUl9GTEFHUykpCisjZW5kaWYKKworLyogSGFyZHdhcmUgZmxhZ3M6IFNaMD0xICg0ay1ieXRlKSAqLworI2RlZmluZSBfUEFHRV9GTEFHU19IQVJECV9QQUdFX1NaMAorCisjaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfNjRLKQorI2RlZmluZSBfUEFHRV9TWkhVR0UJKF9QQUdFX1NaMSkKKyNlbGlmIGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzFNQikKKyNkZWZpbmUgX1BBR0VfU1pIVUdFCShfUEFHRV9TWjAgfCBfUEFHRV9TWjEpCisjZW5kaWYKKworI2RlZmluZSBfUEFHRV9TSEFSRUQJX1BBR0VfVTBfU0hBUkVECisKKyNkZWZpbmUgX1BBR0VfVEFCTEUJKF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SVyB8IF9QQUdFX1VTRVIgfCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX0RJUlRZKQorI2RlZmluZSBfS0VSTlBHX1RBQkxFCShfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUlcgfCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX0RJUlRZKQorI2RlZmluZSBfUEFHRV9DSEdfTUFTSwkoUFRFX01BU0sgfCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX0NBQ0hBQkxFIHwgX1BBR0VfRElSVFkgfCBfUEFHRV9TSEFSRUQpCisKKyNpZmRlZiBDT05GSUdfTU1VCisjZGVmaW5lIFBBR0VfTk9ORQlfX3BncHJvdChfUEFHRV9QUk9UTk9ORSB8IF9QQUdFX0NBQ0hBQkxFIHxfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX0ZMQUdTX0hBUkQpCisjZGVmaW5lIFBBR0VfU0hBUkVECV9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SVyB8IF9QQUdFX1VTRVIgfCBfUEFHRV9DQUNIQUJMRSB8X1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9TSEFSRUQgfCBfUEFHRV9GTEFHU19IQVJEKQorI2RlZmluZSBQQUdFX0NPUFkJX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1VTRVIgfCBfUEFHRV9DQUNIQUJMRSB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfRkxBR1NfSEFSRCkKKyNkZWZpbmUgUEFHRV9SRUFET05MWQlfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfVVNFUiB8IF9QQUdFX0NBQ0hBQkxFIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9GTEFHU19IQVJEKQorI2RlZmluZSBQQUdFX0tFUk5FTAlfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUlcgfCBfUEFHRV9DQUNIQUJMRSB8IF9QQUdFX0RJUlRZIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9IV19TSEFSRUQgfCBfUEFHRV9GTEFHU19IQVJEKQorI2RlZmluZSBQQUdFX0tFUk5FTF9OT0NBQ0hFIFwKKwkJCV9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SVyB8IF9QQUdFX0RJUlRZIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9IV19TSEFSRUQgfCBfUEFHRV9GTEFHU19IQVJEKQorI2RlZmluZSBQQUdFX0tFUk5FTF9STwlfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfQ0FDSEFCTEUgfCBfUEFHRV9ESVJUWSB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfSFdfU0hBUkVEIHwgX1BBR0VfRkxBR1NfSEFSRCkKKyNkZWZpbmUgUEFHRV9LRVJORUxfUENDKHNsb3QsIHR5cGUpIFwKKwkJCV9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SVyB8IF9QQUdFX0RJUlRZIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9GTEFHU19IQVJEIHwgKHNsb3QgPyBfUEFHRV9QQ0NfQVJFQTUgOiBfUEFHRV9QQ0NfQVJFQTYpIHwgKHR5cGUpKQorI2Vsc2UgLyogbm8gbW11ICovCisjZGVmaW5lIFBBR0VfTk9ORQkJX19wZ3Byb3QoMCkKKyNkZWZpbmUgUEFHRV9TSEFSRUQJCV9fcGdwcm90KDApCisjZGVmaW5lIFBBR0VfQ09QWQkJX19wZ3Byb3QoMCkKKyNkZWZpbmUgUEFHRV9SRUFET05MWQkJX19wZ3Byb3QoMCkKKyNkZWZpbmUgUEFHRV9LRVJORUwJCV9fcGdwcm90KDApCisjZGVmaW5lIFBBR0VfS0VSTkVMX05PQ0FDSEUJX19wZ3Byb3QoMCkKKyNkZWZpbmUgUEFHRV9LRVJORUxfUk8JCV9fcGdwcm90KDApCisjZGVmaW5lIFBBR0VfS0VSTkVMX1BDQwkJX19wZ3Byb3QoMCkKKyNlbmRpZgorCisvKgorICogQXMgaTM4NiBhbmQgTUlQUywgU3VwZXJIIGNhbid0IGRvIHBhZ2UgcHJvdGVjdGlvbiBmb3IgZXhlY3V0ZSwgYW5kCisgKiBjb25zaWRlcnMgdGhhdCB0aGUgc2FtZSBhcyBhIHJlYWQuICBBbHNvLCB3cml0ZSBwZXJtaXNzaW9ucyBpbXBseQorICogcmVhZCBwZXJtaXNzaW9ucy4gVGhpcyBpcyB0aGUgY2xvc2VzdCB3ZSBjYW4gZ2V0Li4gIAorICovCisKKyNkZWZpbmUgX19QMDAwCVBBR0VfTk9ORQorI2RlZmluZSBfX1AwMDEJUEFHRV9SRUFET05MWQorI2RlZmluZSBfX1AwMTAJUEFHRV9DT1BZCisjZGVmaW5lIF9fUDAxMQlQQUdFX0NPUFkKKyNkZWZpbmUgX19QMTAwCVBBR0VfUkVBRE9OTFkKKyNkZWZpbmUgX19QMTAxCVBBR0VfUkVBRE9OTFkKKyNkZWZpbmUgX19QMTEwCVBBR0VfQ09QWQorI2RlZmluZSBfX1AxMTEJUEFHRV9DT1BZCisKKyNkZWZpbmUgX19TMDAwCVBBR0VfTk9ORQorI2RlZmluZSBfX1MwMDEJUEFHRV9SRUFET05MWQorI2RlZmluZSBfX1MwMTAJUEFHRV9TSEFSRUQKKyNkZWZpbmUgX19TMDExCVBBR0VfU0hBUkVECisjZGVmaW5lIF9fUzEwMAlQQUdFX1JFQURPTkxZCisjZGVmaW5lIF9fUzEwMQlQQUdFX1JFQURPTkxZCisjZGVmaW5lIF9fUzExMAlQQUdFX1NIQVJFRAorI2RlZmluZSBfX1MxMTEJUEFHRV9TSEFSRUQKKworI2RlZmluZSBwdGVfbm9uZSh4KQkoIXB0ZV92YWwoeCkpCisjZGVmaW5lIHB0ZV9wcmVzZW50KHgpCShwdGVfdmFsKHgpICYgKF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9QUk9UTk9ORSkpCisjZGVmaW5lIHB0ZV9jbGVhcihtbSxhZGRyLHhwKQlkbyB7IHNldF9wdGVfYXQobW0sIGFkZHIsIHhwLCBfX3B0ZSgwKSk7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgcG1kX25vbmUoeCkJKCFwbWRfdmFsKHgpKQorI2RlZmluZSBwbWRfcHJlc2VudCh4KQkocG1kX3ZhbCh4KSAmIF9QQUdFX1BSRVNFTlQpCisjZGVmaW5lIHBtZF9jbGVhcih4cCkJZG8geyBzZXRfcG1kKHhwLCBfX3BtZCgwKSk7IH0gd2hpbGUgKDApCisjZGVmaW5lCXBtZF9iYWQoeCkJKChwbWRfdmFsKHgpICYgKH5QQUdFX01BU0sgJiB+X1BBR0VfVVNFUikpICE9IF9LRVJOUEdfVEFCTEUpCisKKyNkZWZpbmUgcGFnZXNfdG9fbWIoeCkJKCh4KSA+PiAoMjAtUEFHRV9TSElGVCkpCisjZGVmaW5lIHB0ZV9wYWdlKHgpIAlwaHlzX3RvX3BhZ2UocHRlX3ZhbCh4KSZQVEVfUEhZU19NQVNLKQorCisvKgorICogVGhlIGZvbGxvd2luZyBvbmx5IHdvcmsgaWYgcHRlX3ByZXNlbnQoKSBpcyB0cnVlLgorICogVW5kZWZpbmVkIGJlaGF2aW91ciBpZiBub3QuLgorICovCitzdGF0aWMgaW5saW5lIGludCBwdGVfcmVhZChwdGVfdCBwdGUpIHsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX1VTRVI7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9leGVjKHB0ZV90IHB0ZSkgeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfVVNFUjsgfQorc3RhdGljIGlubGluZSBpbnQgcHRlX2RpcnR5KHB0ZV90IHB0ZSl7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9ESVJUWTsgfQorc3RhdGljIGlubGluZSBpbnQgcHRlX3lvdW5nKHB0ZV90IHB0ZSl7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9BQ0NFU1NFRDsgfQorc3RhdGljIGlubGluZSBpbnQgcHRlX2ZpbGUocHRlX3QgcHRlKSB7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9GSUxFOyB9CitzdGF0aWMgaW5saW5lIGludCBwdGVfd3JpdGUocHRlX3QgcHRlKXsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX1JXOyB9CitzdGF0aWMgaW5saW5lIGludCBwdGVfbm90X3ByZXNlbnQocHRlX3QgcHRlKXsgcmV0dXJuICEocHRlX3ZhbChwdGUpICYgX1BBR0VfUFJFU0VOVCk7IH0KKworc3RhdGljIGlubGluZSBwdGVfdCBwdGVfcmRwcm90ZWN0KHB0ZV90IHB0ZSkJeyBzZXRfcHRlKCZwdGUsIF9fcHRlKHB0ZV92YWwocHRlKSAmIH5fUEFHRV9VU0VSKSk7IHJldHVybiBwdGU7IH0KK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX2V4cHJvdGVjdChwdGVfdCBwdGUpCXsgc2V0X3B0ZSgmcHRlLCBfX3B0ZShwdGVfdmFsKHB0ZSkgJiB+X1BBR0VfVVNFUikpOyByZXR1cm4gcHRlOyB9CitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta2NsZWFuKHB0ZV90IHB0ZSkJeyBzZXRfcHRlKCZwdGUsIF9fcHRlKHB0ZV92YWwocHRlKSAmIH5fUEFHRV9ESVJUWSkpOyByZXR1cm4gcHRlOyB9CitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta29sZChwdGVfdCBwdGUpCXsgc2V0X3B0ZSgmcHRlLCBfX3B0ZShwdGVfdmFsKHB0ZSkgJiB+X1BBR0VfQUNDRVNTRUQpKTsgcmV0dXJuIHB0ZTsgfQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfd3Jwcm90ZWN0KHB0ZV90IHB0ZSkJeyBzZXRfcHRlKCZwdGUsIF9fcHRlKHB0ZV92YWwocHRlKSAmIH5fUEFHRV9SVykpOyByZXR1cm4gcHRlOyB9CitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3JlYWQocHRlX3QgcHRlKQl7IHNldF9wdGUoJnB0ZSwgX19wdGUocHRlX3ZhbChwdGUpIHwgX1BBR0VfVVNFUikpOyByZXR1cm4gcHRlOyB9CitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta2V4ZWMocHRlX3QgcHRlKQl7IHNldF9wdGUoJnB0ZSwgX19wdGUocHRlX3ZhbChwdGUpIHwgX1BBR0VfVVNFUikpOyByZXR1cm4gcHRlOyB9CitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta2RpcnR5KHB0ZV90IHB0ZSkJeyBzZXRfcHRlKCZwdGUsIF9fcHRlKHB0ZV92YWwocHRlKSB8IF9QQUdFX0RJUlRZKSk7IHJldHVybiBwdGU7IH0KK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21reW91bmcocHRlX3QgcHRlKQl7IHNldF9wdGUoJnB0ZSwgX19wdGUocHRlX3ZhbChwdGUpIHwgX1BBR0VfQUNDRVNTRUQpKTsgcmV0dXJuIHB0ZTsgfQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUpCXsgc2V0X3B0ZSgmcHRlLCBfX3B0ZShwdGVfdmFsKHB0ZSkgfCBfUEFHRV9SVykpOyByZXR1cm4gcHRlOyB9CisKKy8qCisgKiBNYWNybyBhbmQgaW1wbGVtZW50YXRpb24gdG8gbWFrZSBhIHBhZ2UgcHJvdGVjdGlvbiBhcyB1bmNhY2hhYmxlLgorICovCisjZGVmaW5lIHBncHJvdF9ub25jYWNoZWQgcGdwcm90X25vbmNhY2hlZAorCitzdGF0aWMgaW5saW5lIHBncHJvdF90IHBncHJvdF9ub25jYWNoZWQocGdwcm90X3QgX3Byb3QpCit7CisJdW5zaWduZWQgbG9uZyBwcm90ID0gcGdwcm90X3ZhbChfcHJvdCk7CisKKwlwcm90ICY9IH5fUEFHRV9DQUNIQUJMRTsKKwlyZXR1cm4gX19wZ3Byb3QocHJvdCk7Cit9CisKKyNkZWZpbmUgcGdwcm90X3dyaXRlY29tYmluZShwcm90KSBfX3BncHJvdChwZ3Byb3RfdmFsKHByb3QpICYgfl9QQUdFX0NBQ0hBQkxFKQorCisvKgorICogQ29udmVyc2lvbiBmdW5jdGlvbnM6IGNvbnZlcnQgYSBwYWdlIGFuZCBwcm90ZWN0aW9uIHRvIGEgcGFnZSBlbnRyeSwKKyAqIGFuZCBhIHBhZ2UgZW50cnkgYW5kIHBhZ2UgZGlyZWN0b3J5IHRvIHRoZSBwYWdlIHRoZXkgcmVmZXIgdG8uCisgKgorICogZXh0ZXJuIHB0ZV90IG1rX3B0ZShzdHJ1Y3QgcGFnZSAqcGFnZSwgcGdwcm90X3QgcGdwcm90KQorICovCisjZGVmaW5lIG1rX3B0ZShwYWdlLCBwZ3Byb3QpCXBmbl9wdGUocGFnZV90b19wZm4ocGFnZSksIChwZ3Byb3QpKQorCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9tb2RpZnkocHRlX3QgcHRlLCBwZ3Byb3RfdCBuZXdwcm90KQoreyBzZXRfcHRlKCZwdGUsIF9fcHRlKChwdGVfdmFsKHB0ZSkgJiBfUEFHRV9DSEdfTUFTSykgfCBwZ3Byb3RfdmFsKG5ld3Byb3QpKSk7IHJldHVybiBwdGU7IH0KKworI2RlZmluZSBwYWdlX3B0ZShwYWdlKSBwYWdlX3B0ZV9wcm90KHBhZ2UsIF9fcGdwcm90KDApKQorCisjZGVmaW5lIHBtZF9wYWdlX2tlcm5lbChwbWQpIFwKKygodW5zaWduZWQgbG9uZykgX192YShwbWRfdmFsKHBtZCkgJiBQQUdFX01BU0spKQorCisjZGVmaW5lIHBtZF9wYWdlKHBtZCkgXAorCShwaHlzX3RvX3BhZ2UocG1kX3ZhbChwbWQpKSkKKworLyogdG8gZmluZCBhbiBlbnRyeSBpbiBhIHBhZ2UtdGFibGUtZGlyZWN0b3J5LiAqLworI2RlZmluZSBwZ2RfaW5kZXgoYWRkcmVzcykgKCgoYWRkcmVzcykgPj4gUEdESVJfU0hJRlQpICYgKFBUUlNfUEVSX1BHRC0xKSkKKyNkZWZpbmUgcGdkX29mZnNldChtbSwgYWRkcmVzcykgKChtbSktPnBnZCtwZ2RfaW5kZXgoYWRkcmVzcykpCisKKy8qIHRvIGZpbmQgYW4gZW50cnkgaW4gYSBrZXJuZWwgcGFnZS10YWJsZS1kaXJlY3RvcnkgKi8KKyNkZWZpbmUgcGdkX29mZnNldF9rKGFkZHJlc3MpIHBnZF9vZmZzZXQoJmluaXRfbW0sIGFkZHJlc3MpCisKKy8qIEZpbmQgYW4gZW50cnkgaW4gdGhlIHRoaXJkLWxldmVsIHBhZ2UgdGFibGUuLiAqLworI2RlZmluZSBwdGVfaW5kZXgoYWRkcmVzcykgXAorCQkoKGFkZHJlc3MgPj4gUEFHRV9TSElGVCkgJiAoUFRSU19QRVJfUFRFIC0gMSkpCisjZGVmaW5lIHB0ZV9vZmZzZXRfa2VybmVsKGRpciwgYWRkcmVzcykgXAorCSgocHRlX3QgKikgcG1kX3BhZ2Vfa2VybmVsKCooZGlyKSkgKyBwdGVfaW5kZXgoYWRkcmVzcykpCisjZGVmaW5lIHB0ZV9vZmZzZXRfbWFwKGRpciwgYWRkcmVzcykgcHRlX29mZnNldF9rZXJuZWwoZGlyLCBhZGRyZXNzKQorI2RlZmluZSBwdGVfb2Zmc2V0X21hcF9uZXN0ZWQoZGlyLCBhZGRyZXNzKSBwdGVfb2Zmc2V0X2tlcm5lbChkaXIsIGFkZHJlc3MpCisjZGVmaW5lIHB0ZV91bm1hcChwdGUpCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHB0ZV91bm1hcF9uZXN0ZWQocHRlKQlkbyB7IH0gd2hpbGUgKDApCisKK3N0cnVjdCB2bV9hcmVhX3N0cnVjdDsKK2V4dGVybiB2b2lkIHVwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICogdm1hLAorCQkJICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90IHB0ZSk7CisKKy8qIEVuY29kZSBhbmQgZGUtY29kZSBhIHN3YXAgZW50cnkgKi8KKy8qCisgKiBOT1RFOiBXZSBzaG91bGQgc2V0IFpFUk9zIGF0IHRoZSBwb3NpdGlvbiBvZiBfUEFHRV9QUkVTRU5UCisgKiAgICAgICBhbmQgX1BBR0VfUFJPVE5PTkUgYml0cworICovCisjZGVmaW5lIF9fc3dwX3R5cGUoeCkJCSgoeCkudmFsICYgMHhmZikKKyNkZWZpbmUgX19zd3Bfb2Zmc2V0KHgpCQkoKHgpLnZhbCA+PiAxMCkKKyNkZWZpbmUgX19zd3BfZW50cnkodHlwZSwgb2Zmc2V0KSAoKHN3cF9lbnRyeV90KSB7ICh0eXBlKSB8ICgob2Zmc2V0KSA8PCAxMCkgfSkKKyNkZWZpbmUgX19wdGVfdG9fc3dwX2VudHJ5KHB0ZSkJKChzd3BfZW50cnlfdCkgeyBwdGVfdmFsKHB0ZSkgPj4gMSB9KQorI2RlZmluZSBfX3N3cF9lbnRyeV90b19wdGUoeCkJKChwdGVfdCkgeyAoeCkudmFsIDw8IDEgfSkKKworLyoKKyAqIEVuY29kZSBhbmQgZGVjb2RlIGEgbm9ubGluZWFyIGZpbGUgbWFwcGluZyBlbnRyeQorICovCisjZGVmaW5lIFBURV9GSUxFX01BWF9CSVRTCTI5CisjZGVmaW5lIHB0ZV90b19wZ29mZihwdGUpCShwdGVfdmFsKHB0ZSkgPj4gMSkKKyNkZWZpbmUgcGdvZmZfdG9fcHRlKG9mZikJKChwdGVfdCkgeyAoKG9mZikgPDwgMSkgfCBfUEFHRV9GSUxFIH0pCisKK3R5cGVkZWYgcHRlX3QgKnB0ZV9hZGRyX3Q7CisKKyNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCisKKyNkZWZpbmUga2Vybl9hZGRyX3ZhbGlkKGFkZHIpCSgxKQorCisjZGVmaW5lIGlvX3JlbWFwX3BhZ2VfcmFuZ2Uodm1hLCB2YWRkciwgcGFkZHIsIHNpemUsIHByb3QpCQlcCisJCXJlbWFwX3Bmbl9yYW5nZSh2bWEsIHZhZGRyLCAocGFkZHIpID4+IFBBR0VfU0hJRlQsIHNpemUsIHByb3QpCisKKyNkZWZpbmUgaW9fcmVtYXBfcGZuX3JhbmdlKHZtYSwgdmFkZHIsIHBmbiwgc2l6ZSwgcHJvdCkJCVwKKwkJcmVtYXBfcGZuX3JhbmdlKHZtYSwgdmFkZHIsIHBmbiwgc2l6ZSwgcHJvdCkKKworI2RlZmluZSBNS19JT1NQQUNFX1BGTihzcGFjZSwgcGZuKQkocGZuKQorI2RlZmluZSBHRVRfSU9TUEFDRShwZm4pCQkwCisjZGVmaW5lIEdFVF9QRk4ocGZuKQkJCShwZm4pCisKKy8qCisgKiBObyBwYWdlIHRhYmxlIGNhY2hlcyB0byBpbml0aWFsaXNlCisgKi8KKyNkZWZpbmUgcGd0YWJsZV9jYWNoZV9pbml0KCkJZG8geyB9IHdoaWxlICgwKQorCisjaWZuZGVmIENPTkZJR19NTVUKK2V4dGVybiB1bnNpZ25lZCBpbnQga29ianNpemUoY29uc3Qgdm9pZCAqb2JqcCk7CisjZW5kaWYgLyogIUNPTkZJR19NTVUgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TSDQpIHx8IGRlZmluZWQoQ09ORklHX1NINzcwNV9DQUNIRV8zMktCKQorI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX0dFVF9BTkRfQ0xFQVIKK2V4dGVybiBwdGVfdCBwdGVwX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApOworI2VuZGlmCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wZ3RhYmxlLmg+CisKKyNlbmRpZiAvKiBfX0FTTV9TSF9QQUdFX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvcG9sbC5oIGIvaW5jbHVkZS9hc20tc2gvcG9sbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyZjk1YjkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9wb2xsLmgKQEAgLTAsMCArMSwyNiBAQAorI2lmbmRlZiBfX0FTTV9TSF9QT0xMX0gKKyNkZWZpbmUgX19BU01fU0hfUE9MTF9ICisKKy8qIFRoZXNlIGFyZSBzcGVjaWZpZWQgYnkgaUJDUzIgKi8KKyNkZWZpbmUgUE9MTElOCQkweDAwMDEKKyNkZWZpbmUgUE9MTFBSSQkJMHgwMDAyCisjZGVmaW5lIFBPTExPVVQJCTB4MDAwNAorI2RlZmluZSBQT0xMRVJSCQkweDAwMDgKKyNkZWZpbmUgUE9MTEhVUAkJMHgwMDEwCisjZGVmaW5lIFBPTExOVkFMCTB4MDAyMAorCisvKiBUaGUgcmVzdCBzZWVtIHRvIGJlIG1vcmUtb3ItbGVzcyBub25zdGFuZGFyZC4gQ2hlY2sgdGhlbSEgKi8KKyNkZWZpbmUgUE9MTFJETk9STQkweDAwNDAKKyNkZWZpbmUgUE9MTFJEQkFORAkweDAwODAKKyNkZWZpbmUgUE9MTFdSTk9STQkweDAxMDAKKyNkZWZpbmUgUE9MTFdSQkFORAkweDAyMDAKKyNkZWZpbmUgUE9MTE1TRwkJMHgwNDAwCisjZGVmaW5lIFBPTExSRU1PVkUJMHgxMDAwCisKK3N0cnVjdCBwb2xsZmQgeworCWludCBmZDsKKwlzaG9ydCBldmVudHM7CisJc2hvcnQgcmV2ZW50czsKK307CisKKyNlbmRpZiAvKiBfX0FTTV9TSF9QT0xMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL3Bvc2l4X3R5cGVzLmggYi9pbmNsdWRlL2FzbS1zaC9wb3NpeF90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhM2QyZjUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9wb3NpeF90eXBlcy5oCkBAIC0wLDAgKzEsMTIyIEBACisjaWZuZGVmIF9fQVNNX1NIX1BPU0lYX1RZUEVTX0gKKyNkZWZpbmUgX19BU01fU0hfUE9TSVhfVFlQRVNfSAorCisvKgorICogVGhpcyBmaWxlIGlzIGdlbmVyYWxseSB1c2VkIGJ5IHVzZXItbGV2ZWwgc29mdHdhcmUsIHNvIHlvdSBuZWVkIHRvCisgKiBiZSBhIGxpdHRsZSBjYXJlZnVsIGFib3V0IG5hbWVzcGFjZSBwb2xsdXRpb24gZXRjLiAgQWxzbywgd2UgY2Fubm90CisgKiBhc3N1bWUgR0NDIGlzIGJlaW5nIHVzZWQuCisgKi8KKwordHlwZWRlZiB1bnNpZ25lZCBsb25nCV9fa2VybmVsX2lub190OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAlfX2tlcm5lbF9tb2RlX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CV9fa2VybmVsX25saW5rX3Q7Cit0eXBlZGVmIGxvbmcJCV9fa2VybmVsX29mZl90OwordHlwZWRlZiBpbnQJCV9fa2VybmVsX3BpZF90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAlfX2tlcm5lbF9pcGNfcGlkX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CV9fa2VybmVsX3VpZF90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAlfX2tlcm5lbF9naWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50CV9fa2VybmVsX3NpemVfdDsKK3R5cGVkZWYgaW50CQlfX2tlcm5lbF9zc2l6ZV90OwordHlwZWRlZiBpbnQJCV9fa2VybmVsX3B0cmRpZmZfdDsKK3R5cGVkZWYgbG9uZwkJX19rZXJuZWxfdGltZV90OwordHlwZWRlZiBsb25nCQlfX2tlcm5lbF9zdXNlY29uZHNfdDsKK3R5cGVkZWYgbG9uZwkJX19rZXJuZWxfY2xvY2tfdDsKK3R5cGVkZWYgaW50CQlfX2tlcm5lbF90aW1lcl90OwordHlwZWRlZiBpbnQJCV9fa2VybmVsX2Nsb2NraWRfdDsKK3R5cGVkZWYgaW50CQlfX2tlcm5lbF9kYWRkcl90OwordHlwZWRlZiBjaGFyICoJCV9fa2VybmVsX2NhZGRyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CV9fa2VybmVsX3VpZDE2X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CV9fa2VybmVsX2dpZDE2X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludAlfX2tlcm5lbF91aWQzMl90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQJX19rZXJuZWxfZ2lkMzJfdDsKKwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAlfX2tlcm5lbF9vbGRfdWlkX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CV9fa2VybmVsX29sZF9naWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJX19rZXJuZWxfb2xkX2Rldl90OworCisjaWZkZWYgX19HTlVDX18KK3R5cGVkZWYgbG9uZyBsb25nCV9fa2VybmVsX2xvZmZfdDsKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCB7CisjaWYgZGVmaW5lZChfX0tFUk5FTF9fKSB8fCBkZWZpbmVkKF9fVVNFX0FMTCkKKwlpbnQJdmFsWzJdOworI2Vsc2UgLyogIWRlZmluZWQoX19LRVJORUxfXykgJiYgIWRlZmluZWQoX19VU0VfQUxMKSAqLworCWludAlfX3ZhbFsyXTsKKyNlbmRpZiAvKiAhZGVmaW5lZChfX0tFUk5FTF9fKSAmJiAhZGVmaW5lZChfX1VTRV9BTEwpICovCit9IF9fa2VybmVsX2ZzaWRfdDsKKworI2lmIGRlZmluZWQoX19LRVJORUxfXykgfHwgIWRlZmluZWQoX19HTElCQ19fKSB8fCAoX19HTElCQ19fIDwgMikKKworI3VuZGVmCV9fRkRfU0VUCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fRkRfU0VUKHVuc2lnbmVkIGxvbmcgX19mZCwgX19rZXJuZWxfZmRfc2V0ICpfX2Zkc2V0cCkKK3sKKwl1bnNpZ25lZCBsb25nIF9fdG1wID0gX19mZCAvIF9fTkZEQklUUzsKKwl1bnNpZ25lZCBsb25nIF9fcmVtID0gX19mZCAlIF9fTkZEQklUUzsKKwlfX2Zkc2V0cC0+ZmRzX2JpdHNbX190bXBdIHw9ICgxVUw8PF9fcmVtKTsKK30KKworI3VuZGVmCV9fRkRfQ0xSCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fRkRfQ0xSKHVuc2lnbmVkIGxvbmcgX19mZCwgX19rZXJuZWxfZmRfc2V0ICpfX2Zkc2V0cCkKK3sKKwl1bnNpZ25lZCBsb25nIF9fdG1wID0gX19mZCAvIF9fTkZEQklUUzsKKwl1bnNpZ25lZCBsb25nIF9fcmVtID0gX19mZCAlIF9fTkZEQklUUzsKKwlfX2Zkc2V0cC0+ZmRzX2JpdHNbX190bXBdICY9IH4oMVVMPDxfX3JlbSk7Cit9CisKKworI3VuZGVmCV9fRkRfSVNTRVQKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0ZEX0lTU0VUKHVuc2lnbmVkIGxvbmcgX19mZCwgY29uc3QgX19rZXJuZWxfZmRfc2V0ICpfX3ApCit7IAorCXVuc2lnbmVkIGxvbmcgX190bXAgPSBfX2ZkIC8gX19ORkRCSVRTOworCXVuc2lnbmVkIGxvbmcgX19yZW0gPSBfX2ZkICUgX19ORkRCSVRTOworCXJldHVybiAoX19wLT5mZHNfYml0c1tfX3RtcF0gJiAoMVVMPDxfX3JlbSkpICE9IDA7Cit9CisKKy8qCisgKiBUaGlzIHdpbGwgdW5yb2xsIHRoZSBsb29wIGZvciB0aGUgbm9ybWFsIGNvbnN0YW50IGNhc2UgKDggaW50cywKKyAqIGZvciBhIDI1Ni1iaXQgZmRfc2V0KQorICovCisjdW5kZWYJX19GRF9aRVJPCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fRkRfWkVSTyhfX2tlcm5lbF9mZF9zZXQgKl9fcCkKK3sKKwl1bnNpZ25lZCBsb25nICpfX3RtcCA9IF9fcC0+ZmRzX2JpdHM7CisJaW50IF9faTsKKworCWlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChfX0ZEU0VUX0xPTkdTKSkgeworCQlzd2l0Y2ggKF9fRkRTRVRfTE9OR1MpIHsKKwkJY2FzZSAxNjoKKwkJCV9fdG1wWyAwXSA9IDA7IF9fdG1wWyAxXSA9IDA7CisJCQlfX3RtcFsgMl0gPSAwOyBfX3RtcFsgM10gPSAwOworCQkJX190bXBbIDRdID0gMDsgX190bXBbIDVdID0gMDsKKwkJCV9fdG1wWyA2XSA9IDA7IF9fdG1wWyA3XSA9IDA7CisJCQlfX3RtcFsgOF0gPSAwOyBfX3RtcFsgOV0gPSAwOworCQkJX190bXBbMTBdID0gMDsgX190bXBbMTFdID0gMDsKKwkJCV9fdG1wWzEyXSA9IDA7IF9fdG1wWzEzXSA9IDA7CisJCQlfX3RtcFsxNF0gPSAwOyBfX3RtcFsxNV0gPSAwOworCQkJcmV0dXJuOworCisJCWNhc2UgODoKKwkJCV9fdG1wWyAwXSA9IDA7IF9fdG1wWyAxXSA9IDA7CisJCQlfX3RtcFsgMl0gPSAwOyBfX3RtcFsgM10gPSAwOworCQkJX190bXBbIDRdID0gMDsgX190bXBbIDVdID0gMDsKKwkJCV9fdG1wWyA2XSA9IDA7IF9fdG1wWyA3XSA9IDA7CisJCQlyZXR1cm47CisKKwkJY2FzZSA0OgorCQkJX190bXBbIDBdID0gMDsgX190bXBbIDFdID0gMDsKKwkJCV9fdG1wWyAyXSA9IDA7IF9fdG1wWyAzXSA9IDA7CisJCQlyZXR1cm47CisJCX0KKwl9CisJX19pID0gX19GRFNFVF9MT05HUzsKKwl3aGlsZSAoX19pKSB7CisJCV9faS0tOworCQkqX190bXAgPSAwOworCQlfX3RtcCsrOworCX0KK30KKworI2VuZGlmIC8qIGRlZmluZWQoX19LRVJORUxfXykgfHwgIWRlZmluZWQoX19HTElCQ19fKSB8fCAoX19HTElCQ19fIDwgMikgKi8KKworI2VuZGlmIC8qIF9fQVNNX1NIX1BPU0lYX1RZUEVTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL3Byb2Nlc3Nvci5oIGIvaW5jbHVkZS9hc20tc2gvcHJvY2Vzc29yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ5MDQ3OQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL3Byb2Nlc3Nvci5oCkBAIC0wLDAgKzEsMjc1IEBACisvKgorICogaW5jbHVkZS9hc20tc2gvcHJvY2Vzc29yLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAgIE5paWJlIFl1dGFrYQorICogQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzICBQYXVsIE11bmR0CisgKi8KKworI2lmbmRlZiBfX0FTTV9TSF9QUk9DRVNTT1JfSAorI2RlZmluZSBfX0FTTV9TSF9QUk9DRVNTT1JfSAorI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKworLyoKKyAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgbWFjcm8gdGhhdCByZXR1cm5zIGN1cnJlbnQKKyAqIGluc3RydWN0aW9uIHBvaW50ZXIgKCJwcm9ncmFtIGNvdW50ZXIiKS4KKyAqLworI2RlZmluZSBjdXJyZW50X3RleHRfYWRkcigpICh7IHZvaWQgKnBjOyBfX2FzbV9fKCJtb3ZhCTFmLCAlMFxuMToiOiI9eiIgKHBjKSk7IHBjOyB9KQorCisvKiBDb3JlIFByb2Nlc3NvciBWZXJzaW9uIFJlZ2lzdGVyICovCisjZGVmaW5lIENDTl9QVlIJCTB4ZmYwMDAwMzAKKyNkZWZpbmUgQ0NOX0NWUgkJMHhmZjAwMDA0MAorI2RlZmluZSBDQ05fUFJSCQkweGZmMDAwMDQ0CisKKy8qCisgKiAgQ1BVIHR5cGUgYW5kIGhhcmR3YXJlIGJ1ZyBmbGFncy4gS2VwdCBzZXBhcmF0ZWx5IGZvciBlYWNoIENQVS4KKyAqCisgKiAgRWFjaCBvbmUgb2YgdGhlc2UgYWxzbyBuZWVkcyBhIENPTkZJR19DUFVfU1VCVFlQRV94eHggZW50cnkKKyAqICBpbiBhcmNoL3NoL0tjb25maWcsIGFzIHdlbGwgYXMgYW4gZW50cnkgaW4gYXJjaC9zaC9rZXJuZWwvc2V0dXAuYworICogIGZvciBwYXJzaW5nIHRoZSBzdWJ0eXBlIGluIGdldF9jcHVfc3VidHlwZSgpLgorICovCitlbnVtIGNwdV90eXBlIHsKKwkvKiBTSC0yIHR5cGVzICovCisJQ1BVX1NINzYwNCwKKworCS8qIFNILTMgdHlwZXMgKi8KKwlDUFVfU0g3NzA1LCBDUFVfU0g3NzA3LCAgQ1BVX1NINzcwOCwgQ1BVX1NINzcwOFMsIENQVV9TSDc3MDhSLAorCUNQVV9TSDc3MDksIENQVV9TSDc3MDlBLCBDUFVfU0g3NzI5LCBDUFVfU0g3MzAwLAorCisJLyogU0gtNCB0eXBlcyAqLworCUNQVV9TSDc3NTAsIENQVV9TSDc3NTBTLCBDUFVfU0g3NzUwUiwgQ1BVX1NINzc1MSwgQ1BVX1NINzc1MVIsCisJQ1BVX1NINzc2MCwgQ1BVX1NUNDBSQSwgQ1BVX1NUNDBHWDEsIENQVV9TSDRfMjAyLCBDUFVfU0g0XzUwMSwKKwlDUFVfU0g3MzE4MCwKKworCS8qIFVua25vd24gc3VidHlwZSAqLworCUNQVV9TSF9OT05FCit9OworCitzdHJ1Y3Qgc2hfY3B1aW5mbyB7CisJZW51bSBjcHVfdHlwZSB0eXBlOworCWNoYXIJaGFyZF9tYXRoOworCXVuc2lnbmVkIGxvbmcgbG9vcHNfcGVyX2ppZmZ5OworCisJdW5zaWduZWQgaW50IGNwdV9jbG9jaywgbWFzdGVyX2Nsb2NrLCBidXNfY2xvY2ssIG1vZHVsZV9jbG9jazsKKyNpZmRlZiBDT05GSUdfQ1BVX1NVQlRZUEVfU1Q0MFNUQjEKKwl1bnNpZ25lZCBpbnQgbWVtb3J5X2Nsb2NrOworI2VuZGlmCisKKwlzdHJ1Y3QgY2FjaGVfaW5mbyBpY2FjaGU7CisJc3RydWN0IGNhY2hlX2luZm8gZGNhY2hlOworCisJdW5zaWduZWQgbG9uZyBmbGFnczsKK307CisKK2V4dGVybiBzdHJ1Y3Qgc2hfY3B1aW5mbyBib290X2NwdV9kYXRhOworCisjaWZkZWYgQ09ORklHX1NNUAorZXh0ZXJuIHN0cnVjdCBzaF9jcHVpbmZvIGNwdV9kYXRhW107CisjZGVmaW5lIGN1cnJlbnRfY3B1X2RhdGEgY3B1X2RhdGFbc21wX3Byb2Nlc3Nvcl9pZCgpXQorI2Vsc2UKKyNkZWZpbmUgY3B1X2RhdGEgKCZib290X2NwdV9kYXRhKQorI2RlZmluZSBjdXJyZW50X2NwdV9kYXRhIGJvb3RfY3B1X2RhdGEKKyNlbmRpZgorCisvKgorICogVXNlciBzcGFjZSBwcm9jZXNzIHNpemU6IDJHQi4KKyAqCisgKiBTaW5jZSBTSDc3MDkgYW5kIFNINzc1MCBoYXZlICJhcmVhIDciLCB3ZSBjYW4ndCB1c2UgMHg3YzAwMDAwMC0tMHg3ZmZmZmZmZgorICovCisjZGVmaW5lIFRBU0tfU0laRQkweDdjMDAwMDAwVUwKKworLyogVGhpcyBkZWNpZGVzIHdoZXJlIHRoZSBrZXJuZWwgd2lsbCBzZWFyY2ggZm9yIGEgZnJlZSBjaHVuayBvZiB2bQorICogc3BhY2UgZHVyaW5nIG1tYXAncy4KKyAqLworI2RlZmluZSBUQVNLX1VOTUFQUEVEX0JBU0UJKFRBU0tfU0laRSAvIDMpCisKKy8qCisgKiBCaXQgb2YgU1IgcmVnaXN0ZXIKKyAqCisgKiBGRC1iaXQ6CisgKiAgICAgV2hlbiBpdCdzIHNldCwgaXQgbWVhbnMgdGhlIHByb2Nlc3NvciBkb2Vzbid0IGhhdmUgcmlnaHQgdG8gdXNlIEZQVSwKKyAqICAgICBhbmQgaXQgcmVzdWx0cyBleGNlcHRpb24gd2hlbiB0aGUgZmxvYXRpbmcgb3BlcmF0aW9uIGlzIGV4ZWN1dGVkLgorICoKKyAqIElNQVNLLWJpdDoKKyAqICAgICBJbnRlcnJ1cHQgbGV2ZWwgbWFzaworICovCisjZGVmaW5lIFNSX0ZECQkweDAwMDA4MDAwCisjZGVmaW5lIFNSX0RTUAkJMHgwMDAwMTAwMAorI2RlZmluZSBTUl9JTUFTSwkweDAwMDAwMGYwCisKKy8qCisgKiBGUFUgc3RydWN0dXJlIGFuZCBkYXRhCisgKi8KKworc3RydWN0IHNoX2ZwdV9oYXJkX3N0cnVjdCB7CisJdW5zaWduZWQgbG9uZyBmcF9yZWdzWzE2XTsKKwl1bnNpZ25lZCBsb25nIHhmcF9yZWdzWzE2XTsKKwl1bnNpZ25lZCBsb25nIGZwc2NyOworCXVuc2lnbmVkIGxvbmcgZnB1bDsKKworCWxvbmcgc3RhdHVzOyAvKiBzb2Z0d2FyZSBzdGF0dXMgaW5mb3JtYXRpb24gKi8KK307CisKKy8qIER1bW15IGZwdSBlbXVsYXRvciAgKi8KK3N0cnVjdCBzaF9mcHVfc29mdF9zdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcgZnBfcmVnc1sxNl07CisJdW5zaWduZWQgbG9uZyB4ZnBfcmVnc1sxNl07CisJdW5zaWduZWQgbG9uZyBmcHNjcjsKKwl1bnNpZ25lZCBsb25nIGZwdWw7CisKKwl1bnNpZ25lZCBjaGFyIGxvb2thaGVhZDsKKwl1bnNpZ25lZCBsb25nIGVudHJ5X3BjOworfTsKKwordW5pb24gc2hfZnB1X3VuaW9uIHsKKwlzdHJ1Y3Qgc2hfZnB1X2hhcmRfc3RydWN0IGhhcmQ7CisJc3RydWN0IHNoX2ZwdV9zb2Z0X3N0cnVjdCBzb2Z0OworfTsKKworLyogCisgKiBQcm9jZXNzb3IgZmxhZ3MKKyAqLworCisjZGVmaW5lIENQVV9IQVNfRlBVCQkweDAwMDEJLyogSGFyZHdhcmUgRlBVIHN1cHBvcnQgKi8KKyNkZWZpbmUgQ1BVX0hBU19QMl9GTFVTSF9CVUcJMHgwMDAyCS8qIE5lZWQgdG8gZmx1c2ggdGhlIGNhY2hlIGluIFAyIGFyZWEgKi8KKyNkZWZpbmUgQ1BVX0hBU19NTVVfUEFHRV9BU1NPQwkweDAwMDQJLyogU0gzOiBUTEIgd2F5IHNlbGVjdGlvbiBiaXQgc3VwcG9ydCAqLworI2RlZmluZSBDUFVfSEFTX0RTUAkJMHgwMDA4CS8qIFNILURTUDogRFNQIHN1cHBvcnQgKi8KKyNkZWZpbmUgQ1BVX0hBU19QRVJGX0NPVU5URVIJMHgwMDEwCS8qIEhhcmR3YXJlIHBlcmZvcm1hbmNlIGNvdW50ZXJzICovCisKK3N0cnVjdCB0aHJlYWRfc3RydWN0IHsKKwl1bnNpZ25lZCBsb25nIHNwOworCXVuc2lnbmVkIGxvbmcgcGM7CisKKwl1bnNpZ25lZCBsb25nIHRyYXBfbm8sIGVycm9yX2NvZGU7CisJdW5zaWduZWQgbG9uZyBhZGRyZXNzOworCS8qIEhhcmR3YXJlIGRlYnVnZ2luZyByZWdpc3RlcnMgbWF5IGNvbWUgaGVyZSAqLworCXVuc2lnbmVkIGxvbmcgdWJjX3BjOworCisJLyogZmxvYXRpbmcgcG9pbnQgaW5mbyAqLworCXVuaW9uIHNoX2ZwdV91bmlvbiBmcHU7Cit9OworCisvKiBDb3VudCBvZiBhY3RpdmUgdGFza3Mgd2l0aCBVQkMgc2V0dGluZ3MgKi8KK2V4dGVybiBpbnQgdWJjX3VzZXJjbnQ7CisKKyNkZWZpbmUgSU5JVF9USFJFQUQgIHsJCQkJCQlcCisJc2l6ZW9mKGluaXRfc3RhY2spICsgKGxvbmcpICZpbml0X3N0YWNrLCAvKiBzcCAqLwlcCisJMCwJCQkJCSAvKiBwYyAqLwlcCisJMCwgMCwgCQkJCQkJCVwKKwkwLCAJCQkJCQkJXAorCTAsIAkJCQkJCQlcCisJe3t7MCx9fSx9IAkJCQkvKiBmcHUgc3RhdGUgKi8JXAorfQorCisvKgorICogRG8gbmVjZXNzYXJ5IHNldHVwIHRvIHN0YXJ0IHVwIGEgbmV3bHkgZXhlY3V0ZWQgdGhyZWFkLgorICovCisjZGVmaW5lIHN0YXJ0X3RocmVhZChyZWdzLCBuZXdfcGMsIG5ld19zcCkJIFwKKwlzZXRfZnMoVVNFUl9EUyk7CQkJIFwKKwlyZWdzLT5wciA9IDA7ICAgCQkgCSBcCisJcmVncy0+c3IgPSBTUl9GRDsJLyogVXNlciBtb2RlLiAqLyBcCisJcmVncy0+cGMgPSBuZXdfcGM7CQkJIFwKKwlyZWdzLT5yZWdzWzE1XSA9IG5ld19zcAorCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9uLCBhIHN0cmFuZ2UgQyB0aGluZyAqLworc3RydWN0IHRhc2tfc3RydWN0Oworc3RydWN0IG1tX3N0cnVjdDsKKworLyogRnJlZSBhbGwgcmVzb3VyY2VzIGhlbGQgYnkgYSB0aHJlYWQuICovCitleHRlcm4gdm9pZCByZWxlYXNlX3RocmVhZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CisKKy8qIFByZXBhcmUgdG8gY29weSB0aHJlYWQgc3RhdGUgLSB1bmxhenkgYWxsIGxhenkgc3RhdHVzICovCisjZGVmaW5lIHByZXBhcmVfdG9fY29weSh0c2spCWRvIHsgfSB3aGlsZSAoMCkKKworLyoKKyAqIGNyZWF0ZSBhIGtlcm5lbCB0aHJlYWQgd2l0aG91dCByZW1vdmluZyBpdCBmcm9tIHRhc2tsaXN0cworICovCitleHRlcm4gaW50IGtlcm5lbF90aHJlYWQoaW50ICgqZm4pKHZvaWQgKiksIHZvaWQgKiBhcmcsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOworCisvKiBDb3B5IGFuZCByZWxlYXNlIGFsbCBzZWdtZW50IGluZm8gYXNzb2NpYXRlZCB3aXRoIGEgVk0gKi8KKyNkZWZpbmUgY29weV9zZWdtZW50cyhwLCBtbSkJZG8geyB9IHdoaWxlKDApCisjZGVmaW5lIHJlbGVhc2Vfc2VnbWVudHMobW0pCWRvIHsgfSB3aGlsZSgwKQorCisvKgorICogRlBVIGxhenkgc3RhdGUgc2F2ZSBoYW5kbGluZy4KKyAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGRpc2FibGVfZnB1KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBfX2R1bW15OworCisJLyogU2V0IEZEIGZsYWcgaW4gU1IgKi8KKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RjCXNyLCAlMFxuXHQiCisJCQkgICAgICJvcgklMSwgJTBcblx0IgorCQkJICAgICAibGRjCSUwLCBzciIKKwkJCSAgICAgOiAiPSZyIiAoX19kdW1teSkKKwkJCSAgICAgOiAiciIgKFNSX0ZEKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgZW5hYmxlX2ZwdSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgX19kdW1teTsKKworCS8qIENsZWFyIG91dCBGRCBmbGFnIGluIFNSICovCisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0YwlzciwgJTBcblx0IgorCQkJICAgICAiYW5kCSUxLCAlMFxuXHQiCisJCQkgICAgICJsZGMJJTAsIHNyIgorCQkJICAgICA6ICI9JnIiIChfX2R1bW15KQorCQkJICAgICA6ICJyIiAoflNSX0ZEKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgcmVsZWFzZV9mcHUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcmVncy0+c3IgfD0gU1JfRkQ7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgZ3JhYl9mcHUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcmVncy0+c3IgJj0gflNSX0ZEOworfQorCisjaWZkZWYgQ09ORklHX0NQVV9TSDQKK2V4dGVybiB2b2lkIHNhdmVfZnB1KHN0cnVjdCB0YXNrX3N0cnVjdCAqX190c2ssIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKyNlbHNlCisjZGVmaW5lIHNhdmVfZnB1KHRzaykJZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKKyNkZWZpbmUgdW5sYXp5X2ZwdSh0c2ssIHJlZ3MpIGRvIHsgCQkJCVwKKwlpZiAodGVzdF90c2tfdGhyZWFkX2ZsYWcodHNrLCBUSUZfVVNFREZQVSkpIHsJXAorCQlzYXZlX2ZwdSh0c2ssIHJlZ3MpOyAJCQkJXAorCX0JCQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIGNsZWFyX2ZwdSh0c2ssIHJlZ3MpIGRvIHsgCQkJCQlcCisJaWYgKHRlc3RfdHNrX3RocmVhZF9mbGFnKHRzaywgVElGX1VTRURGUFUpKSB7IAkJXAorCQljbGVhcl90c2tfdGhyZWFkX2ZsYWcodHNrLCBUSUZfVVNFREZQVSk7IAlcCisJCXJlbGVhc2VfZnB1KHJlZ3MpOwkJCQkJXAorCX0JCQkJCQkJXAorfSB3aGlsZSAoMCkKKworLyogRG91YmxlIHByZXNpc2lvbiwgTkFOUyBhcyBOQU5TLCByb3VuZGluZyB0byBuZWFyZXN0LCBubyBleGNlcHRpb25zICovCisjZGVmaW5lIEZQU0NSX0lOSVQgIDB4MDAwODAwMDAKKworI2RlZmluZQlGUFNDUl9DQVVTRV9NQVNLCTB4MDAwMWYwMDAJLyogQ2F1c2UgYml0cyAqLworI2RlZmluZQlGUFNDUl9GTEFHX01BU0sJCTB4MDAwMDAwN2MJLyogRmxhZyBiaXRzICovCisKKy8qCisgKiBSZXR1cm4gc2F2ZWQgUEMgb2YgYSBibG9ja2VkIHRocmVhZC4KKyAqLworI2RlZmluZSB0aHJlYWRfc2F2ZWRfcGModHNrKQkodHNrLT50aHJlYWQucGMpCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIGdldF93Y2hhbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApOworCisjZGVmaW5lIEtTVEtfRUlQKHRzaykgICgodHNrKS0+dGhyZWFkLnBjKQorI2RlZmluZSBLU1RLX0VTUCh0c2spICAoKHRzayktPnRocmVhZC5zcCkKKworI2RlZmluZSBjcHVfc2xlZXAoKQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInNsZWVwIiA6IDogOiAibWVtb3J5IikKKyNkZWZpbmUgY3B1X3JlbGF4KCkJZG8geyB9IHdoaWxlICgwKQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9fQVNNX1NIX1BST0NFU1NPUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9wdHJhY2UuaCBiL2luY2x1ZGUvYXNtLXNoL3B0cmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmNzVlMTYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9wdHJhY2UuaApAQCAtMCwwICsxLDEwNCBAQAorI2lmbmRlZiBfX0FTTV9TSF9QVFJBQ0VfSAorI2RlZmluZSBfX0FTTV9TSF9QVFJBQ0VfSAorCisjaW5jbHVkZSA8YXNtL3ViYy5oPgorCisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwICBOaWliZSBZdXRha2EKKyAqCisgKi8KKworLyoKKyAqIEdDQyBkZWZpbmVzIHJlZ2lzdGVyIG51bWJlciBsaWtlIHRoaXM6CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoJIDAgLSAxNSBhcmUgaW50ZWdlciByZWdpc3RlcnMKKyAqCTE3IC0gMjIgYXJlIGNvbnRyb2wvc3BlY2lhbCByZWdpc3RlcnMKKyAqCTI0IC0gMzkgZnAgcmVnaXN0ZXJzCisgKgk0MCAtIDQ3IHhkIHJlZ2lzdGVycworICoJNDggLSAgICBmcHNjciByZWdpc3RlcgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBXZSBmb2xsb3dzIGFib3ZlLCBleGNlcHQ6CisgKgkxNiAtLS0gcHJvZ3JhbSBjb3VudGVyIChQQykKKyAqCTIyIC0tLSBzeXNjYWxsICMKKyAqCTIzIC0tLSBmbG9hdGluZyBwb2ludCBjb21tdW5pY2F0aW9uIHJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgUkVHX1JFRzAJIDAKKyNkZWZpbmUgUkVHX1JFRzE1CTE1CisKKyNkZWZpbmUgUkVHX1BDCQkxNgorCisjZGVmaW5lIFJFR19QUgkJMTcKKyNkZWZpbmUgUkVHX1NSCQkxOAorI2RlZmluZSBSRUdfR0JSICAgICAgCTE5CisjZGVmaW5lIFJFR19NQUNICTIwCisjZGVmaW5lIFJFR19NQUNMCTIxCisKKyNkZWZpbmUgUkVHX1NZU0NBTEwJMjIKKworI2RlZmluZSBSRUdfRlBSRUcwCTIzCisjZGVmaW5lIFJFR19GUFJFRzE1CTM4CisjZGVmaW5lIFJFR19YRlJFRzAJMzkKKyNkZWZpbmUgUkVHX1hGUkVHMTUJNTQKKworI2RlZmluZSBSRUdfRlBTQ1IJNTUKKyNkZWZpbmUgUkVHX0ZQVUwJNTYKKworLyogb3B0aW9ucyBzZXQgdXNpbmcgUFRSQUNFX1NFVE9QVElPTlMgKi8KKyNkZWZpbmUgUFRSQUNFX09fVFJBQ0VTWVNHT09EICAgICAweDAwMDAwMDAxCisKKy8qCisgKiBUaGlzIHN0cnVjdCBkZWZpbmVzIHRoZSB3YXkgdGhlIHJlZ2lzdGVycyBhcmUgc3RvcmVkIG9uIHRoZQorICoga2VybmVsIHN0YWNrIGR1cmluZyBhIHN5c3RlbSBjYWxsIG9yIG90aGVyIGtlcm5lbCBlbnRyeS4KKyAqLworc3RydWN0IHB0X3JlZ3MgeworCXVuc2lnbmVkIGxvbmcgcmVnc1sxNl07CisJdW5zaWduZWQgbG9uZyBwYzsKKwl1bnNpZ25lZCBsb25nIHByOworCXVuc2lnbmVkIGxvbmcgc3I7CisJdW5zaWduZWQgbG9uZyBnYnI7CisJdW5zaWduZWQgbG9uZyBtYWNoOworCXVuc2lnbmVkIGxvbmcgbWFjbDsKKwlsb25nIHRyYTsKK307CisKKy8qCisgKiBUaGlzIHN0cnVjdCBkZWZpbmVzIHRoZSB3YXkgdGhlIERTUCByZWdpc3RlcnMgYXJlIHN0b3JlZCBvbiB0aGUKKyAqIGtlcm5lbCBzdGFjayBkdXJpbmcgYSBzeXN0ZW0gY2FsbCBvciBvdGhlciBrZXJuZWwgZW50cnkuCisgKi8KK3N0cnVjdCBwdF9kc3ByZWdzIHsKKwl1bnNpZ25lZCBsb25nCWExOworCXVuc2lnbmVkIGxvbmcJYTBnOworCXVuc2lnbmVkIGxvbmcJYTFnOworCXVuc2lnbmVkIGxvbmcJbTA7CisJdW5zaWduZWQgbG9uZwltMTsKKwl1bnNpZ25lZCBsb25nCWEwOworCXVuc2lnbmVkIGxvbmcJeDA7CisJdW5zaWduZWQgbG9uZwl4MTsKKwl1bnNpZ25lZCBsb25nCXkwOworCXVuc2lnbmVkIGxvbmcJeTE7CisJdW5zaWduZWQgbG9uZwlkc3I7CisJdW5zaWduZWQgbG9uZwlyczsKKwl1bnNpZ25lZCBsb25nCXJlOworCXVuc2lnbmVkIGxvbmcJbW9kOworfTsKKworI2RlZmluZQlQVFJBQ0VfR0VURFNQUkVHUwk1NQorI2RlZmluZQlQVFJBQ0VfU0VURFNQUkVHUwk1NgorCisjaWZkZWYgX19LRVJORUxfXworI2RlZmluZSB1c2VyX21vZGUocmVncykgKCgocmVncyktPnNyICYgMHg0MDAwMDAwMCk9PTApCisjZGVmaW5lIGluc3RydWN0aW9uX3BvaW50ZXIocmVncykgKChyZWdzKS0+cGMpCitleHRlcm4gdm9pZCBzaG93X3JlZ3Moc3RydWN0IHB0X3JlZ3MgKik7CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwcm9maWxlX3BjKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGxvbmcgcGMgPSBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpOworCisJaWYgKHBjID49IDB4YTAwMDAwMDBVTCAmJiBwYyA8IDB4YzAwMDAwMDBVTCkKKwkJcGMgLT0gMHgyMDAwMDAwMDsKKwlyZXR1cm4gcGM7Cit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9fQVNNX1NIX1BUUkFDRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9yZXNvdXJjZS5oIGIvaW5jbHVkZS9hc20tc2gvcmVzb3VyY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzI0OTlhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvcmVzb3VyY2UuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19BU01fU0hfUkVTT1VSQ0VfSAorI2RlZmluZSBfX0FTTV9TSF9SRVNPVVJDRV9ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9yZXNvdXJjZS5oPgorCisjZW5kaWYgLyogX19BU01fU0hfUkVTT1VSQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvcnRjLmggYi9pbmNsdWRlL2FzbS1zaC9ydGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWE5Y2RmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvcnRjLmgKQEAgLTAsMCArMSwyOSBAQAorI2lmbmRlZiBfQVNNX1JUQ19ICisjZGVmaW5lIF9BU01fUlRDX0gKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgorI2luY2x1ZGUgPGFzbS9jcHUvcnRjLmg+CisKK2V4dGVybiB2b2lkIHNoX3J0Y19nZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWVzcGVjICp0cyk7CitleHRlcm4gaW50IHNoX3J0Y19zZXR0aW1lb2ZkYXkoY29uc3QgdGltZV90IHNlY3MpOworZXh0ZXJuIHZvaWQgKCpib2FyZF90aW1lX2luaXQpKHZvaWQpOworZXh0ZXJuIHZvaWQgKCpydGNfZ2V0X3RpbWUpKHN0cnVjdCB0aW1lc3BlYyAqKTsKK2V4dGVybiBpbnQgKCpydGNfc2V0X3RpbWUpKGNvbnN0IHRpbWVfdCk7CisKKy8qIFJDUjEgQml0cyAqLworI2RlZmluZSBSQ1IxX0NGCQkweDgwCS8qIENhcnJ5IEZsYWcgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkNSMV9DSUUJMHgxMAkvKiBDYXJyeSBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIFJDUjFfQUlFCTB4MDgJLyogQWxhcm0gSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBSQ1IxX0FGCQkweDAxCS8qIEFsYXJtIEZsYWcgICAgICAgICAgICAgKi8KKworLyogUkNSMiBCaXRzICovCisjZGVmaW5lIFJDUjJfUEVGCTB4ODAJLyogUEVyaW9kaWMgaW50ZXJydXB0IEZsYWcgKi8KKyNkZWZpbmUgUkNSMl9QRVNNQVNLCTB4NzAJLyogUGVyaW9kaWMgaW50ZXJydXB0IFNldCAgKi8KKyNkZWZpbmUgUkNSMl9SVENFTgkweDA4CS8qIEVOYWJsZSBSVEMgICAgICAgICAgICAgICovCisjZGVmaW5lIFJDUjJfQURKCTB4MDQJLyogQURKdXN0bWVudCAoMzAtc2Vjb25kKSAgKi8KKyNkZWZpbmUgUkNSMl9SRVNFVAkweDAyCS8qIFJlc2V0IGJpdCAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJDUjJfU1RBUlQJMHgwMQkvKiBTdGFydCBiaXQgICAgICAgICAgICAgICAqLworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9BU01fUlRDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL3J0czc3NTFyMmQvaWRlLmggYi9pbmNsdWRlL2FzbS1zaC9ydHM3NzUxcjJkL2lkZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxNmY5NmIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9ydHM3NzUxcjJkL2lkZS5oCkBAIC0wLDAgKzEsOCBAQAorI2lmbmRlZiBfX0FTTV9TSF9SVFM3NzUxUjJEX0lERV9ICisjZGVmaW5lIF9fQVNNX1NIX1JUUzc3NTFSMkRfSURFX0gKKworLyogTm90aGluZyB0byBzZWUgaGVyZS4uICovCisjaW5jbHVkZSA8YXNtL3J0czc3NTFyMmQvcnRzNzc1MXIyZC5oPgorCisjZW5kaWYgLyogX19BU01fU0hfUlRTNzc1MVIyRF9JREVfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9ydHM3NzUxcjJkL2lvLmggYi9pbmNsdWRlL2FzbS1zaC9ydHM3NzUxcjJkL2lvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQxMDk0MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL3J0czc3NTFyMmQvaW8uaApAQCAtMCwwICsxLDM3IEBACisvKgorICogaW5jbHVkZS9hc20tc2gvaW9fcnRzNzc1MXIyZC5oCisgKgorICogTW9kaWZpZWQgdmVyc2lvbiBvZiBpb19zZS5oIGZvciB0aGUgcnRzNzc1MXIyZC1zcGVjaWZpYyBmdW5jdGlvbnMuCisgKgorICogTWF5IGJlIGNvcGllZCBvciBtb2RpZmllZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSBsaW51eC9DT1BZSU5HIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICoKKyAqIElPIGZ1bmN0aW9ucyBmb3IgYW4gUmVuZXNhcyBUZWNobm9sb2d5IHNhbGVzIFJUUzc3NTFSMkQKKyAqLworCisjaWZuZGVmIF9BU01fU0hfSU9fUlRTNzc1MVIyRF9ICisjZGVmaW5lIF9BU01fU0hfSU9fUlRTNzc1MVIyRF9ICisKK2V4dGVybiB1bnNpZ25lZCBjaGFyIHJ0czc3NTFyMmRfaW5iKHVuc2lnbmVkIGxvbmcgcG9ydCk7CitleHRlcm4gdW5zaWduZWQgc2hvcnQgcnRzNzc1MXIyZF9pbncodW5zaWduZWQgbG9uZyBwb3J0KTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgcnRzNzc1MXIyZF9pbmwodW5zaWduZWQgbG9uZyBwb3J0KTsKKworZXh0ZXJuIHZvaWQgcnRzNzc1MXIyZF9vdXRiKHVuc2lnbmVkIGNoYXIgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCk7CitleHRlcm4gdm9pZCBydHM3NzUxcjJkX291dHcodW5zaWduZWQgc2hvcnQgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCk7CitleHRlcm4gdm9pZCBydHM3NzUxcjJkX291dGwodW5zaWduZWQgaW50IHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpOworCitleHRlcm4gdW5zaWduZWQgY2hhciBydHM3NzUxcjJkX2luYl9wKHVuc2lnbmVkIGxvbmcgcG9ydCk7CitleHRlcm4gdm9pZCBydHM3NzUxcjJkX291dGJfcCh1bnNpZ25lZCBjaGFyIHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpOworCitleHRlcm4gdm9pZCBydHM3NzUxcjJkX2luc2IodW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKK2V4dGVybiB2b2lkIHJ0czc3NTFyMmRfaW5zdyh1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpOworZXh0ZXJuIHZvaWQgcnRzNzc1MXIyZF9pbnNsKHVuc2lnbmVkIGxvbmcgcG9ydCwgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCk7CitleHRlcm4gdm9pZCBydHM3NzUxcjJkX291dHNiKHVuc2lnbmVkIGxvbmcgcG9ydCwgY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCk7CitleHRlcm4gdm9pZCBydHM3NzUxcjJkX291dHN3KHVuc2lnbmVkIGxvbmcgcG9ydCwgY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCk7CitleHRlcm4gdm9pZCBydHM3NzUxcjJkX291dHNsKHVuc2lnbmVkIGxvbmcgcG9ydCwgY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCk7CisKK2V4dGVybiB2b2lkICpydHM3NzUxcjJkX2lvcmVtYXAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIHJ0czc3NTFyMmRfaXNhX3BvcnQyYWRkcih1bnNpZ25lZCBsb25nIG9mZnNldCk7CisKKyNlbmRpZiAvKiBfQVNNX1NIX0lPX1JUUzc3NTFSMkRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvcnRzNzc1MXIyZC9ydHM3NzUxcjJkLmggYi9pbmNsdWRlL2FzbS1zaC9ydHM3NzUxcjJkL3J0czc3NTFyMmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTA5YmE1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvcnRzNzc1MXIyZC9ydHM3NzUxcjJkLmgKQEAgLTAsMCArMSw3MyBAQAorI2lmbmRlZiBfX0FTTV9TSF9SRU5FU0FTX1JUUzc3NTFSMkRfSAorI2RlZmluZSBfX0FTTV9TSF9SRU5FU0FTX1JUUzc3NTFSMkRfSAorCisvKgorICogbGludXgvaW5jbHVkZS9hc20tc2gvcmVuZXNhc19ydHM3NzUxcjJkLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgIEF0b20gQ3JlYXRlIEVuZ2luZWVyaW5nIENvLiwgTHRkLgorICoKKyAqIFJlbmVzYXMgVGVjaG5vbG9neSBTYWxlcyBSVFM3NzUxUjJEIHN1cHBvcnQKKyAqLworCisvKiBCb3ggc3BlY2lmaWMgYWRkcmVzc2VzLiAgKi8KKworI2RlZmluZSBQQV9CQ1IJCTB4YTQwMDAwMDAJLyogRlBHQSAqLworI2RlZmluZSBQQV9JUkxNT04JMHhhNDAwMDAwMgkvKiBJbnRlcnJ1cHQgU3RhdHVzIGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfQ0ZDVEwJMHhhNDAwMDAwNAkvKiBDRiBUaW1pbmcgY29udHJvbCAqLworI2RlZmluZSBQQV9DRlBPVwkweGE0MDAwMDA2CS8qIENGIFBvd2VyIGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfRElTUENUTAkweGE0MDAwMDA4CS8qIERpc3BsYXkgVGltaW5nIGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfU0RNUE9XCTB4YTQwMDAwMGEJLyogU0QgUG93ZXIgY29udHJvbCAqLworI2RlZmluZSBQQV9SVENDRQkweGE0MDAwMDBjCS8qIFJUQyg5NzAxKSBFbmFibGUgY29udHJvbCAqLworI2RlZmluZSBQQV9QQ0lDRAkweGE0MDAwMDBlCS8qIFBDSSBFeHRlbnRpb24gZGV0ZWN0IGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfVk9ZQUdFUlJUUwkweGE0MDAwMDIwCS8qIFZPWUFHRVIgUmVzZXQgY29udHJvbCAqLworI2lmIGRlZmluZWQoQ09ORklHX1JUUzc3NTFSMkRfUkVWMTEpCisjZGVmaW5lIFBBX0FYUlNUCTB4YTQwMDAwMjIJLyogQVhfTEFOIFJlc2V0IGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfQ0ZSU1QJMHhhNDAwMDAyNAkvKiBDRiBSZXNldCBjb250cm9sICovCisjZGVmaW5lCVBBX0FETVJUUwkweGE0MDAwMDI2CS8qIFNEIFJlc2V0IGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfRVhUUlNUCTB4YTQwMDAwMjgJLyogRXh0ZW50aW9uIFJlc2V0IGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfQ0ZDRElOVENMUgkweGE0MDAwMDJhCS8qIENGIEluc2VydCBJbnRlcnJ1cHQgY2xlYXIgKi8KKyNlbHNlCisjZGVmaW5lIFBBX0NGUlNUCTB4YTQwMDAwMjIJLyogQ0YgUmVzZXQgY29udHJvbCAqLworI2RlZmluZQlQQV9BRE1SVFMJMHhhNDAwMDAyNAkvKiBTRCBSZXNldCBjb250cm9sICovCisjZGVmaW5lIFBBX0VYVFJTVAkweGE0MDAwMDI2CS8qIEV4dGVudGlvbiBSZXNldCBjb250cm9sICovCisjZGVmaW5lIFBBX0NGQ0RJTlRDTFIJMHhhNDAwMDAyOAkvKiBDRiBJbnNlcnQgSW50ZXJydXB0IGNsZWFyICovCisjZGVmaW5lCVBBX0tFWUNUTENMUgkweGE0MDAwMDJhCS8qIEtleSBJbnRlcnJ1cHQgY2xlYXIgKi8KKyNlbmRpZgorI2RlZmluZSBQQV9QT1dPRkYJMHhhNDAwMDAzMAkvKiBCb2FyZCBQb3dlciBPRkYgY29udHJvbCAqLworI2RlZmluZSBQQV9WRVJSRUcJMHhhNDAwMDAzMgkvKiBGUEdBIFZlcnNpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUEFfSU5QT1JUCTB4YTQwMDAwMzQJLyogS0VZIElucHV0IFBvcnQgY29udHJvbCAqLworI2RlZmluZSBQQV9PVVRQT1JUCTB4YTQwMDAwMzYJLyogTEVEIGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfRE1QT1JUCTB4YTQwMDAwMzgJLyogRE0yNzAgT3V0cHV0IFBvcnQgY29udHJvbCAqLworCisjZGVmaW5lIFBBX0FYODg3OTZMCTB4YWEwMDA0MDAJLyogQVg4ODc5NkwgQXJlYSAqLworI2RlZmluZSBQQV9WT1lBR0VSCTB4YWIwMDAwMDAJLyogVk9ZQUdFUiBHWCBBcmVhICovCisjZGVmaW5lIFBBX0FSRUE1X0lPCTB4YjQwMDAwMDAJLyogQXJlYSA1IElPIE1lbW9yeSAqLworI2RlZmluZSBQQV9BUkVBNl9JTwkweGI4MDAwMDAwCS8qIEFyZWEgNiBJTyBNZW1vcnkgKi8KKyNkZWZpbmUgUEFfSURFX09GRlNFVAkweDFmMAkJLyogQ0YgSURFIE9mZnNldCAqLworI2RlZmluZSBBWDg4Nzk2TF9JT19CQVNFCTB4MTAwMAkvKiBBWDg4Nzk2TCBJTyBCYXNlIEFkZHJlc3MgKi8KKworI2RlZmluZSBJUkxDTlRSMQkoUEFfQkNSICsgMCkJLyogSW50ZXJydXB0IENvbnRyb2wgUmVnaXN0ZXIxICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19SVFM3NzUxUjJEX1JFVjExKQorI2RlZmluZSBJUlFfUENJRVRICTAJCS8qIFBDSSBFdGhlcm5ldCBJUlEgKi8KKyNkZWZpbmUgSVJRX0NGQ0FSRAkxCQkvKiBDRiBDYXJkIElSUSAqLworI2RlZmluZSBJUlFfQ0ZJTlNUCTIJCS8qIENGIENhcmQgSW5zZXJ0IElSUSAqLworI2RlZmluZSBJUlFfUENNQ0lBCTMJCS8qIFBDTUNJQSBJUlEgKi8KKyNkZWZpbmUgSVJRX1ZPWUFHRVIJNAkJLyogVk9ZQUdFUiBJUlEgKi8KKyNkZWZpbmUgSVJRX09ORVRICTUJCS8qIE9uIGJvYXJkIEV0aGVybmV0IElSUSAqLworI2Vsc2UKKyNkZWZpbmUgSVJRX0tFWUlOCTAJCS8qIEtleSBJbnB1dCBJUlEgKi8KKyNkZWZpbmUgSVJRX1BDSUVUSAkxCQkvKiBQQ0kgRXRoZXJuZXQgSVJRICovCisjZGVmaW5lIElSUV9DRkNBUkQJMgkJLyogQ0YgQ2FyZCBJUlEgKi8KKyNkZWZpbmUgSVJRX0NGSU5TVAkzCQkvKiBDRiBDYXJkIEluc2VydCBJUlEgKi8KKyNkZWZpbmUgSVJRX1BDTUNJQQk0CQkvKiBQQ01DSUEgSVJRICovCisjZGVmaW5lIElSUV9WT1lBR0VSCTUJCS8qIFZPWUFHRVIgSVJRICovCisjZW5kaWYKKyNkZWZpbmUgSVJRX1JUQ0FMTQk2CQkvKiBSVEMgQWxhcm0gSVJRICovCisjZGVmaW5lIElSUV9SVENUSU1FCTcJCS8qIFJUQyBUaW1lciBJUlEgKi8KKyNkZWZpbmUgSVJRX1NEQ0FSRAk4CQkvKiBTRCBDYXJkIElSUSAqLworI2RlZmluZSBJUlFfUENJU0xPVDEJOQkJLyogUENJIFNsb3QgIzEgSVJRICovCisjZGVmaW5lIElSUV9QQ0lTTE9UMgkxMAkJLyogUENJIFNsb3QgIzIgSVJRICovCisjZGVmaW5lCUlSUV9FWFRFTlRJT04JMTEJCS8qIEVYVG4gSVJRICovCisKKyNlbmRpZiAgLyogX19BU01fU0hfUkVORVNBU19SVFM3NzUxUjJEICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9ydHM3NzUxcjJkL3ZveWFnZXJneF9yZWcuaCBiL2luY2x1ZGUvYXNtLXNoL3J0czc3NTFyMmQvdm95YWdlcmd4X3JlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwMzFiNWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9ydHM3NzUxcjJkL3ZveWFnZXJneF9yZWcuaApAQCAtMCwwICsxLDMxMyBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIHZveWFnZXJneF9yZWcuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisgICAgQ29weXJpZ2h0IDIwMDMgKGMpIExpbmVvIHVTb2x1dGlvbnMsSW5jLgorKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZm5kZWYgX1ZPWUFHRVJfR1hfUkVHX0gKKyNkZWZpbmUgX1ZPWUFHRVJfR1hfUkVHX0gKKworI2RlZmluZSBWT1lBR0VSX0JBU0UJCQkweGIzZTAwMDAwCisjZGVmaW5lIFZPWUFHRVJfVVNCSF9CQVNFCQkoMHg0MDAwMCArIFZPWUFHRVJfQkFTRSkKKyNkZWZpbmUgVk9ZQUdFUl9VQVJUX0JBU0UJCSgweDMwMDAwICsgVk9ZQUdFUl9CQVNFKQorI2RlZmluZQlWT1lBR0VSX0FDOTdfQkFTRQkJKDB4YTAwMDAgKyBWT1lBR0VSX0JBU0UpCisKKyNkZWZpbmUgVk9ZQUdFUl9JUlFfTlVNCQkJMzIKKyNkZWZpbmUgVk9ZQUdFUl9JUlFfQkFTRQkJNTAKKyNkZWZpbmUgVk9ZQUdFUl9VU0JIX0lSUQkJVk9ZQUdFUl9JUlFfQkFTRSArIDYKKyNkZWZpbmUgVk9ZQUdFUl84MDUxX0lSUQkJVk9ZQUdFUl9JUlFfQkFTRSArIDEwCisjZGVmaW5lIFZPWUFHRVJfVUFSVDBfSVJRCQlWT1lBR0VSX0lSUV9CQVNFICsgMTIKKyNkZWZpbmUgVk9ZQUdFUl9VQVJUMV9JUlEJCVZPWUFHRVJfSVJRX0JBU0UgKyAxMworI2RlZmluZQlWT1lBR0VSX0FDOTdfSVJRCQlWT1lBR0VSX0lSUV9CQVNFICsgMTcKKworLyogLS0tLS0gTUlTQyBjb250cm9sZSAgcmVnaXN0ZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIE1JU0NfQ1RSTAkJCSgweDAwMDAwNCArIFZPWUFHRVJfQkFTRSkKKyNkZWZpbmUgTUlTQ19DVFJMX1VTQkNMS180OAkJKDMgPDwgMjgpCisjZGVmaW5lIE1JU0NfQ1RSTF9VU0JDTEtfOTYJCSgyIDw8IDI4KQorI2RlZmluZSBNSVNDX0NUUkxfVVNCQ0xLX0NSWVNUQUwJKDEgPDwgMjgpCisKKy8qIC0tLS0tIEdQSU9bMzE6MF0gcmVnaXN0ZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQSU9fTVVYX0xPVwkJCSgweDAwMDAwOCArIFZPWUFHRVJfQkFTRSkKKyNkZWZpbmUgR1BJT19NVVhfTE9XX0FDOTcJCTB4MUYwMDAwMDAKKyNkZWZpbmUgR1BJT19NVVhfTE9XXzgwNTEJCTB4MDAwMGZmZmYKKyNkZWZpbmUgR1BJT19NVVhfTE9XX1BXTQkJKDEgPDwgMjkpCisKKy8qIC0tLS0tIEdQSU9bNjM6MzJdIHJlZ2lzdGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX01VWF9ISUdICQkJKDB4MDAwMDBDICsgVk9ZQUdFUl9CQVNFKQorCisvKiAtLS0tLSBEUkFNIGNvbnRyb2xlICByZWdpc3RlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERSQU1fQ1RSTAkJCSgweDAwMDAxMCArIFZPWUFHRVJfQkFTRSkKKyNkZWZpbmUgRFJBTV9DVFJMX0VNQkVEREVECQkoMSA8PCAzMSkKKyNkZWZpbmUgRFJBTV9DVFJMX0NQVV9CVVJTVF8xCQkoMCA8PCAyOCkKKyNkZWZpbmUgRFJBTV9DVFJMX0NQVV9CVVJTVF8yCQkoMSA8PCAyOCkKKyNkZWZpbmUgRFJBTV9DVFJMX0NQVV9CVVJTVF80CQkoMiA8PCAyOCkKKyNkZWZpbmUgRFJBTV9DVFJMX0NQVV9CVVJTVF84CQkoMyA8PCAyOCkKKyNkZWZpbmUgRFJBTV9DVFJMX0NQVV9DQVNfTEFURU5DWQkoMSA8PCAyNykKKyNkZWZpbmUgRFJBTV9DVFJMX0NQVV9TSVpFXzIJCSgwIDw8IDI0KQorI2RlZmluZSBEUkFNX0NUUkxfQ1BVX1NJWkVfNAkJKDEgPDwgMjQpCisjZGVmaW5lIERSQU1fQ1RSTF9DUFVfU0laRV82NAkJKDQgPDwgMjQpCisjZGVmaW5lIERSQU1fQ1RSTF9DUFVfU0laRV8zMgkJKDUgPDwgMjQpCisjZGVmaW5lIERSQU1fQ1RSTF9DUFVfU0laRV8xNgkJKDYgPDwgMjQpCisjZGVmaW5lIERSQU1fQ1RSTF9DUFVfU0laRV84CQkoNyA8PCAyNCkKKyNkZWZpbmUgRFJBTV9DVFJMX0NQVV9DT0xVTU5fU0laRV8xMDI0CSgwIDw8IDIyKQorI2RlZmluZSBEUkFNX0NUUkxfQ1BVX0NPTFVNTl9TSVpFXzUxMgkoMiA8PCAyMikKKyNkZWZpbmUgRFJBTV9DVFJMX0NQVV9DT0xVTU5fU0laRV8yNTYJKDMgPDwgMjIpCisjZGVmaW5lIERSQU1fQ1RSTF9DUFVfQUNUSVZFX1BSRUNIQVJHRQkoMSA8PCAyMSkKKyNkZWZpbmUgRFJBTV9DVFJMX0NQVV9SRVNFVAkJKDEgPDwgMjApCisjZGVmaW5lIERSQU1fQ1RSTF9DUFVfQkFOS1MJCSgxIDw8IDE5KQorI2RlZmluZSBEUkFNX0NUUkxfQ1BVX1dSSVRFX1BSRUNIQVJHRQkoMSA8PCAxOCkKKyNkZWZpbmUgRFJBTV9DVFJMX0JMT0NLX1dSSVRFCQkoMSA8PCAxNykKKyNkZWZpbmUgRFJBTV9DVFJMX1JFRlJFU0hfQ09NTUFORAkoMSA8PCAxNikKKyNkZWZpbmUgRFJBTV9DVFJMX1NJWkVfNAkJKDAgPDwgMTMpCisjZGVmaW5lIERSQU1fQ1RSTF9TSVpFXzgJCSgxIDw8IDEzKQorI2RlZmluZSBEUkFNX0NUUkxfU0laRV8xNgkJKDIgPDwgMTMpCisjZGVmaW5lIERSQU1fQ1RSTF9TSVpFXzMyCQkoMyA8PCAxMykKKyNkZWZpbmUgRFJBTV9DVFJMX1NJWkVfNjQJCSg0IDw8IDEzKQorI2RlZmluZSBEUkFNX0NUUkxfU0laRV8yCQkoNSA8PCAxMykKKyNkZWZpbmUgRFJBTV9DVFJMX0NPTFVNTl9TSVpFXzI1NgkoMCA8PCAxMSkKKyNkZWZpbmUgRFJBTV9DVFJMX0NPTFVNTl9TSVpFXzUxMgkoMiA8PCAxMSkKKyNkZWZpbmUgRFJBTV9DVFJMX0NPTFVNTl9TSVpFXzEwMjQJKDMgPDwgMTEpCisjZGVmaW5lIERSQU1fQ1RSTF9CTE9DS19XUklURV9USU1FCSgxIDw8IDEwKQorI2RlZmluZSBEUkFNX0NUUkxfQkxPQ0tfV1JJVEVfUFJFQ0hBUkdFCSgxIDw8IDkpCisjZGVmaW5lIERSQU1fQ1RSTF9BQ1RJVkVfUFJFQ0hBUkdFCSgxIDw8IDgpCisjZGVmaW5lIERSQU1fQ1RSTF9SRVNFVAkJCSgxIDw8IDcpCisjZGVmaW5lIERSQU1fQ1RSTF9SRU1BSU5fQUNUSVZFCQkoMSA8PCA2KQorI2RlZmluZSBEUkFNX0NUUkxfQkFOS1MJCQkoMSA8PCAxKQorI2RlZmluZSBEUkFNX0NUUkxfV1JJVEVfUFJFQ0hBUkdFCSgxIDw8IDApCisKKy8qIC0tLS0tIEFydml0cmF0aW9uIGNvbnRyb2wgcmVnaXN0ZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQVJCSVRSQVRJT05fQ1RSTAkJKDB4MDAwMDE0ICsgVk9ZQUdFUl9CQVNFKQorI2RlZmluZSBBUkJJVFJBVElPTl9DVFJMX0NQVU1FTQkJKDEgPDwgMjkpCisjZGVmaW5lIEFSQklUUkFUSU9OX0NUUkxfSU5UTUVNCQkoMSA8PCAyOCkKKyNkZWZpbmUgQVJCSVRSQVRJT05fQ1RSTF9VU0JfT0ZGCSgwIDw8IDI0KQorI2RlZmluZSBBUkJJVFJBVElPTl9DVFJMX1VTQl9QUklPUklUWV8xCSgxIDw8IDI0KQorI2RlZmluZSBBUkJJVFJBVElPTl9DVFJMX1VTQl9QUklPUklUWV8yCSgyIDw8IDI0KQorI2RlZmluZSBBUkJJVFJBVElPTl9DVFJMX1VTQl9QUklPUklUWV8zCSgzIDw8IDI0KQorI2RlZmluZSBBUkJJVFJBVElPTl9DVFJMX1VTQl9QUklPUklUWV80CSg0IDw8IDI0KQorI2RlZmluZSBBUkJJVFJBVElPTl9DVFJMX1VTQl9QUklPUklUWV81CSg1IDw8IDI0KQorI2RlZmluZSBBUkJJVFJBVElPTl9DVFJMX1VTQl9QUklPUklUWV82CSg2IDw8IDI0KQorI2RlZmluZSBBUkJJVFJBVElPTl9DVFJMX1VTQl9QUklPUklUWV83CSg3IDw8IDI0KQorI2RlZmluZSBBUkJJVFJBVElPTl9DVFJMX1BBTkVMX09GRgkoMCA8PCAyMCkKKyNkZWZpbmUgQVJCSVRSQVRJT05fQ1RSTF9QQU5FTF9QUklPUklUWV8xCSgxIDw8IDIwKQorI2RlZmluZSBBUkJJVFJBVElPTl9DVFJMX1BBTkVMX1BSSU9SSVRZXzIJKDIgPDwgMjApCisjZGVmaW5lIEFSQklUUkFUSU9OX0NUUkxfUEFORUxfUFJJT1JJVFlfMwkoMyA8PCAyMCkKKyNkZWZpbmUgQVJCSVRSQVRJT05fQ1RSTF9QQU5FTF9QUklPUklUWV80CSg0IDw8IDIwKQorI2RlZmluZSBBUkJJVFJBVElPTl9DVFJMX1BBTkVMX1BSSU9SSVRZXzUJKDUgPDwgMjApCisjZGVmaW5lIEFSQklUUkFUSU9OX0NUUkxfUEFORUxfUFJJT1JJVFlfNgkoNiA8PCAyMCkKKyNkZWZpbmUgQVJCSVRSQVRJT05fQ1RSTF9QQU5FTF9QUklPUklUWV83CSg3IDw8IDIwKQorI2RlZmluZSBBUkJJVFJBVElPTl9DVFJMX1pWUE9SVF9PRkYJKDAgPDwgMTYpCisjZGVmaW5lIEFSQklUUkFUSU9OX0NUUkxfWlZQT1JUTF9QUklPUklUWV8xCSgxIDw8IDE2KQorI2RlZmluZSBBUkJJVFJBVElPTl9DVFJMX1pWUE9SVExfUFJJT1JJVFlfMgkoMiA8PCAxNikKKyNkZWZpbmUgQVJCSVRSQVRJT05fQ1RSTF9aVlBPUlRMX1BSSU9SSVRZXzMJKDMgPDwgMTYpCisjZGVmaW5lIEFSQklUUkFUSU9OX0NUUkxfWlZQT1JUTF9QUklPUklUWV80CSg0IDw8IDE2KQorI2RlZmluZSBBUkJJVFJBVElPTl9DVFJMX1pWUE9SVExfUFJJT1JJVFlfNQkoNSA8PCAxNikKKyNkZWZpbmUgQVJCSVRSQVRJT05fQ1RSTF9aVlBPUlRMX1BSSU9SSVRZXzYJKDYgPDwgMTYpCisjZGVmaW5lIEFSQklUUkFUSU9OX0NUUkxfWlZQT1JUTF9QUklPUklUWV83CSg3IDw8IDE2KQorI2RlZmluZSBBUkJJVFJBVElPTl9DVFJMX0NNRF9JTlRQUl9PRkYJKDAgPDwgMTIpCisjZGVmaW5lIEFSQklUUkFUSU9OX0NUUkxfQ01EX0lOVFBSX1BSSU9SSVRZXzEJKDEgPDwgMTIpCisjZGVmaW5lIEFSQklUUkFUSU9OX0NUUkxfQ01EX0lOVFBSX1BSSU9SSVRZXzIJKDIgPDwgMTIpCisjZGVmaW5lIEFSQklUUkFUSU9OX0NUUkxfQ01EX0lOVFBSX1BSSU9SSVRZXzMJKDMgPDwgMTIpCisjZGVmaW5lIEFSQklUUkFUSU9OX0NUUkxfQ01EX0lOVFBSX1BSSU9SSVRZXzQJKDQgPDwgMTIpCisjZGVmaW5lIEFSQklUUkFUSU9OX0NUUkxfQ01EX0lOVFBSX1BSSU9SSVRZXzUJKDUgPDwgMTIpCisjZGVmaW5lIEFSQklUUkFUSU9OX0NUUkxfQ01EX0lOVFBSX1BSSU9SSVRZXzYJKDYgPDwgMTIpCisjZGVmaW5lIEFSQklUUkFUSU9OX0NUUkxfQ01EX0lOVFBSX1BSSU9SSVRZXzcJKDcgPDwgMTIpCisjZGVmaW5lIEFSQklUUkFUSU9OX0NUUkxfRE1BX09GRgkoMCA8PCA4KQorI2RlZmluZSBBUkJJVFJBVElPTl9DVFJMX0RNQV9QUklPUklUWV8xCSgxIDw8IDgpCisjZGVmaW5lIEFSQklUUkFUSU9OX0NUUkxfRE1BX1BSSU9SSVRZXzIJKDIgPDwgOCkKKyNkZWZpbmUgQVJCSVRSQVRJT05fQ1RSTF9ETUFfUFJJT1JJVFlfMwkoMyA8PCA4KQorI2RlZmluZSBBUkJJVFJBVElPTl9DVFJMX0RNQV9QUklPUklUWV80CSg0IDw8IDgpCisjZGVmaW5lIEFSQklUUkFUSU9OX0NUUkxfRE1BX1BSSU9SSVRZXzUJKDUgPDwgOCkKKyNkZWZpbmUgQVJCSVRSQVRJT05fQ1RSTF9ETUFfUFJJT1JJVFlfNgkoNiA8PCA4KQorI2RlZmluZSBBUkJJVFJBVElPTl9DVFJMX0RNQV9QUklPUklUWV83CSg3IDw8IDgpCisjZGVmaW5lIEFSQklUUkFUSU9OX0NUUkxfVklERU9fT0ZGCSgwIDw8IDQpCisjZGVmaW5lIEFSQklUUkFUSU9OX0NUUkxfVklERU9fUFJJT1JJVFlfMQkoMSA8PCA0KQorI2RlZmluZSBBUkJJVFJBVElPTl9DVFJMX1ZJREVPX1BSSU9SSVRZXzIJKDIgPDwgNCkKKyNkZWZpbmUgQVJCSVRSQVRJT05fQ1RSTF9WSURFT19QUklPUklUWV8zCSgzIDw8IDQpCisjZGVmaW5lIEFSQklUUkFUSU9OX0NUUkxfVklERU9fUFJJT1JJVFlfNAkoNCA8PCA0KQorI2RlZmluZSBBUkJJVFJBVElPTl9DVFJMX1ZJREVPX1BSSU9SSVRZXzUJKDUgPDwgNCkKKyNkZWZpbmUgQVJCSVRSQVRJT05fQ1RSTF9WSURFT19QUklPUklUWV82CSg2IDw8IDQpCisjZGVmaW5lIEFSQklUUkFUSU9OX0NUUkxfVklERU9fUFJJT1JJVFlfNwkoNyA8PCA0KQorI2RlZmluZSBBUkJJVFJBVElPTl9DVFJMX0NSVF9PRkYJKDAgPDwgMCkKKyNkZWZpbmUgQVJCSVRSQVRJT05fQ1RSTF9DUlRfUFJJT1JJVFlfMQkoMSA8PCAwKQorI2RlZmluZSBBUkJJVFJBVElPTl9DVFJMX0NSVF9QUklPUklUWV8yCSgyIDw8IDApCisjZGVmaW5lIEFSQklUUkFUSU9OX0NUUkxfQ1JUX1BSSU9SSVRZXzMJKDMgPDwgMCkKKyNkZWZpbmUgQVJCSVRSQVRJT05fQ1RSTF9DUlRfUFJJT1JJVFlfNAkoNCA8PCAwKQorI2RlZmluZSBBUkJJVFJBVElPTl9DVFJMX0NSVF9QUklPUklUWV81CSg1IDw8IDApCisjZGVmaW5lIEFSQklUUkFUSU9OX0NUUkxfQ1JUX1BSSU9SSVRZXzYJKDYgPDwgMCkKKyNkZWZpbmUgQVJCSVRSQVRJT05fQ1RSTF9DUlRfUFJJT1JJVFlfNwkoNyA8PCAwKQorCisvKiAtLS0tLSBDb21tYW5kIGxpc3Qgc3RhdHVzIHJlZ2lzdGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIENNRF9JTlRQUl9TVEFUVVMJCSgweDAwMDAyNCArIFZPWUFHRVJfQkFTRSkKKworLyogLS0tLS0gSW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJTlRfU1RBVFVTCQkJKDB4MDAwMDJjICsgVk9ZQUdFUl9CQVNFKQorI2RlZmluZSBJTlRfU1RBVFVTX1VICQkJKDEgPDwgNikKKyNkZWZpbmUgSU5UX1NUQVRVU19NQwkJCSgxIDw8IDEwKQorI2RlZmluZSBJTlRfU1RBVFVTX1UwCQkJKDEgPDwgMTIpCisjZGVmaW5lIElOVF9TVEFUVVNfVTEJCQkoMSA8PCAxMykKKyNkZWZpbmUJSU5UX1NUQVRVU19BQwkJCSgxIDw8IDE3KQorCisvKiAtLS0tLSBJbnRlcnJ1cHQgbWFzayByZWdpc3RlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVk9ZQUdFUl9JTlRfTUFTSwkJKDB4MDAwMDMwICsgVk9ZQUdFUl9CQVNFKQorI2RlZmluZSBWT1lBR0VSX0lOVF9NQVNLX0FDCQkoMSA8PCAxNykKKworLyogLS0tLS0gQ3VycmVudCBHYXRlIHJlZ2lzdGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIENVUlJFTlRfR0FURQkJCSgweDAwMDAzOCArIFZPWUFHRVJfQkFTRSkKKworLyogLS0tLS0gUG93ZXIgbW9kZSAwIGdhdGUgcmVnaXN0ZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBPV0VSX01PREUwX0dBVEUJCSgweDAwMDA0MCArIFZPWUFHRVJfQkFTRSkKKyNkZWZpbmUgUE9XRVJfTU9ERTBfR0FURV9HCQkoMSA8PCA2KQorI2RlZmluZSBQT1dFUl9NT0RFMF9HQVRFX1UwCQkoMSA8PCA3KQorI2RlZmluZSBQT1dFUl9NT0RFMF9HQVRFX1UxCQkoMSA8PCA4KQorI2RlZmluZSBQT1dFUl9NT0RFMF9HQVRFX1VICQkoMSA8PCAxMSkKKyNkZWZpbmUJUE9XRVJfTU9ERTBfR0FURV9BQwkJKDEgPDwgMTgpCisKKy8qIC0tLS0tIFBvd2VyIG1vZGUgMSBnYXRlIHJlZ2lzdGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBQT1dFUl9NT0RFMV9HQVRFCQkoMHgwMDAwNDggKyBWT1lBR0VSX0JBU0UpCisjZGVmaW5lIFBPV0VSX01PREUxX0dBVEVfRwkJKDEgPDwgNikKKyNkZWZpbmUgUE9XRVJfTU9ERTFfR0FURV9VMAkJKDEgPDwgNykKKyNkZWZpbmUgUE9XRVJfTU9ERTFfR0FURV9VMQkJKDEgPDwgOCkKKyNkZWZpbmUgUE9XRVJfTU9ERTFfR0FURV9VSAkJKDEgPDwgMTEpCisjZGVmaW5lCVBPV0VSX01PREUxX0dBVEVfQUMJCSgxIDw8IDE4KQorCisvKiAtLS0tLSBQb3dlciBtb2RlIDAgY2xvY2sgcmVnaXN0ZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUE9XRVJfTU9ERTBfQ0xPQ0sJCSgweDAwMDA0NCArIFZPWUFHRVJfQkFTRSkKKworLyogLS0tLS0gUG93ZXIgbW9kZSAxIGNsb2NrIHJlZ2lzdGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBPV0VSX01PREUxX0NMT0NLCQkoMHgwMDAwNEMgKyBWT1lBR0VSX0JBU0UpCisKKy8qIC0tLS0tIFBvd2VyIG1vZGUgY29udHJvbGwgcmVnaXN0ZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBQT1dFUl9NT0RFX0NUUkwJCQkoMHgwMDAwNTQgKyBWT1lBR0VSX0JBU0UpCisKKy8qIC0tLS0tIE1pc2NlbGxhbmVvdXMgVGltaW5nIHJlZ2lzdGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBTWVNURU1fRFJBTV9DVFJMCQkoMHgwMDAwNjggKyBWT1lBR0VSX0JBU0UpCisKKy8qIC0tLS0tIFBXTSByZWdpc3RlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBQV01fMAkJCQkoMHgwMTAwMjAgKyBWT1lBR0VSX0JBU0UpCisjZGVmaW5lIFBXTV8wX0hDKHgpCQkJKCgoeCkmMHgwZmZmKTw8MjApCisjZGVmaW5lIFBXTV8wX0xDKHgpCQkJKCgoeCkmMHgwZmZmKTw8OCApCisjZGVmaW5lIFBXTV8wX0NMS19ERVYoeCkJCSgoKHgpJjB4MDAwZik8PDQgKQorI2RlZmluZSBQV01fMF9FTgkJCSgxPDwwKQorCisvKiAtLS0tLSBJMkMgcmVnaXN0ZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgSTJDX0JZVEVDT1VOVAkJCSgweDAxMDA0MCArIFZPWUFHRVJfQkFTRSkKKyNkZWZpbmUgSTJDX0NPTlRST0wJCQkoMHgwMTAwNDEgKyBWT1lBR0VSX0JBU0UpCisjZGVmaW5lIEkyQ19TVEFUVVMJCQkoMHgwMTAwNDIgKyBWT1lBR0VSX0JBU0UpCisjZGVmaW5lIEkyQ19SRVNFVAkJCSgweDAxMDA0MiArIFZPWUFHRVJfQkFTRSkKKyNkZWZpbmUgSTJDX1NBRERSRVNTCQkJKDB4MDEwMDQzICsgVk9ZQUdFUl9CQVNFKQorI2RlZmluZSBJMkNfREFUQQkJCSgweDAxMDA0NCArIFZPWUFHRVJfQkFTRSkKKworLyogLS0tLS0gQ29udHJvbGUgcmVnaXN0ZXIgYml0cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkNfQ09OVFJPTF9FCQkJKDEgPDwgMCkKKyNkZWZpbmUgSTJDX0NPTlRST0xfTU9ERQkJKDEgPDwgMSkKKyNkZWZpbmUgSTJDX0NPTlRST0xfU1RBVFVTCQkoMSA8PCAyKQorI2RlZmluZSBJMkNfQ09OVFJPTF9JTlQJCQkoMSA8PCA0KQorI2RlZmluZSBJMkNfQ09OVFJPTF9JTlRBQ0sJCSgxIDw8IDUpCisjZGVmaW5lIEkyQ19DT05UUk9MX1JFUEVBVAkJKDEgPDwgNikKKworLyogLS0tLS0gU3RhdHVzIHJlZ2lzdGVyIGJpdHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgSTJDX1NUQVRVU19CVVNZCQkJKDEgPDwgMCkKKyNkZWZpbmUgSTJDX1NUQVRVU19BQ0sJCQkoMSA8PCAxKQorI2RlZmluZSBJMkNfU1RBVFVTX0VSUk9SCQkoMSA8PCAyKQorI2RlZmluZSBJMkNfU1RBVFVTX0NPTVBMRVRFCQkoMSA8PCAzKQorCisvKiAtLS0tLSBSZXNldCByZWdpc3RlciAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkNfUkVTRVRfRVJST1IJCQkoMSA8PCAyKQorCisvKiAtLS0tLSB0cmFuc21pc3Npb24gZnJlcXVlbmNpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkNfU0FERFJFU1NfU0VMRUNUCQkoMSA8PCAwKQorCisvKiAtLS0tLSBEaXNwbGF5IENvbnRyb2xsIHJlZ2lzdGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBBTkVMX0RJU1BMQVlfQ1RSTAkJKDB4MDgwMDAwICsgVk9ZQUdFUl9CQVNFKQorI2RlZmluZSBQQU5FTF9ESVNQTEFZX0NUUkxfQklBUyAgICAgICAgICgxPDwyNikKKyNkZWZpbmUgUEFORUxfUEFOX0NUUkwJCQkoMHgwODAwMDQgKyBWT1lBR0VSX0JBU0UpCisjZGVmaW5lIFBBTkVMX0NPTE9SX0tFWQkJCSgweDA4MDAwOCArIFZPWUFHRVJfQkFTRSkKKyNkZWZpbmUgUEFORUxfRkJfQUREUkVTUwkJKDB4MDgwMDBDICsgVk9ZQUdFUl9CQVNFKQorI2RlZmluZSBQQU5FTF9GQl9XSURUSAkJCSgweDA4MDAxMCArIFZPWUFHRVJfQkFTRSkKKyNkZWZpbmUgUEFORUxfV0lORE9XX1dJRFRICQkoMHgwODAwMTQgKyBWT1lBR0VSX0JBU0UpCisjZGVmaW5lIFBBTkVMX1dJTkRPV19IRUlHSFQJCSgweDA4MDAxOCArIFZPWUFHRVJfQkFTRSkKKyNkZWZpbmUgUEFORUxfUExBTkVfVEwJCQkoMHgwODAwMUMgKyBWT1lBR0VSX0JBU0UpCisjZGVmaW5lIFBBTkVMX1BMQU5FX0JSCQkJKDB4MDgwMDIwICsgVk9ZQUdFUl9CQVNFKQorI2RlZmluZSBQQU5FTF9IT1JJWk9OVEFMX1RPVEFMCQkoMHgwODAwMjQgKyBWT1lBR0VSX0JBU0UpCisjZGVmaW5lIFBBTkVMX0hPUklaT05UQUxfU1lOQwkJKDB4MDgwMDI4ICsgVk9ZQUdFUl9CQVNFKQorI2RlZmluZSBQQU5FTF9WRVJUSUNBTF9UT1RBTAkJKDB4MDgwMDJDICsgVk9ZQUdFUl9CQVNFKQorI2RlZmluZSBQQU5FTF9WRVJUSUNBTF9TWU5DCQkoMHgwODAwMzAgKyBWT1lBR0VSX0JBU0UpCisjZGVmaW5lIFBBTkVMX0NVUlJFTlRfTElORQkJKDB4MDgwMDM0ICsgVk9ZQUdFUl9CQVNFKQorI2RlZmluZSBWSURFT19ESVNQTEFZX0NUUkwJCSgweDA4MDA0MCArIFZPWUFHRVJfQkFTRSkKKyNkZWZpbmUgVklERU9fRkJfMF9BRERSRVNTCQkoMHgwODAwNDQgKyBWT1lBR0VSX0JBU0UpCisjZGVmaW5lIFZJREVPX0ZCX1dJRFRICQkJKDB4MDgwMDQ4ICsgVk9ZQUdFUl9CQVNFKQorI2RlZmluZSBWSURFT19GQl8wX0xBU1RfQUREUkVTUwkJKDB4MDgwMDRDICsgVk9ZQUdFUl9CQVNFKQorI2RlZmluZSBWSURFT19QTEFORV9UTAkJCSgweDA4MDA1MCArIFZPWUFHRVJfQkFTRSkKKyNkZWZpbmUgVklERU9fUExBTkVfQlIJCQkoMHgwODAwNTQgKyBWT1lBR0VSX0JBU0UpCisjZGVmaW5lIFZJREVPX1NDQUxFCQkJKDB4MDgwMDU4ICsgVk9ZQUdFUl9CQVNFKQorI2RlZmluZSBWSURFT19JTklUSUFMX1NDQUxFCQkoMHgwODAwNUMgKyBWT1lBR0VSX0JBU0UpCisjZGVmaW5lIFZJREVPX1lVVl9DT05TVEFOVFMJCSgweDA4MDA2MCArIFZPWUFHRVJfQkFTRSkKKyNkZWZpbmUgVklERU9fRkJfMV9BRERSRVNTCQkoMHgwODAwNjQgKyBWT1lBR0VSX0JBU0UpCisjZGVmaW5lIFZJREVPX0ZCXzFfTEFTVF9BRERSRVNTCQkoMHgwODAwNjggKyBWT1lBR0VSX0JBU0UpCisjZGVmaW5lIFZJREVPX0FMUEhBX0RJU1BMQVlfQ1RSTAkoMHgwODAwODAgKyBWT1lBR0VSX0JBU0UpCisjZGVmaW5lIFZJREVPX0FMUEhBX0ZCX0FERFJFU1MJCSgweDA4MDA4NCArIFZPWUFHRVJfQkFTRSkKKyNkZWZpbmUgVklERU9fQUxQSEFfRkJfV0lEVEgJCSgweDA4MDA4OCArIFZPWUFHRVJfQkFTRSkKKyNkZWZpbmUgVklERU9fQUxQSEFfRkJfTEFTVF9BRERSRVNTCSgweDA4MDA4QyArIFZPWUFHRVJfQkFTRSkKKyNkZWZpbmUgVklERU9fQUxQSEFfUExBTkVfVEwJCSgweDA4MDA5MCArIFZPWUFHRVJfQkFTRSkKKyNkZWZpbmUgVklERU9fQUxQSEFfUExBTkVfQlIJCSgweDA4MDA5NCArIFZPWUFHRVJfQkFTRSkKKyNkZWZpbmUgVklERU9fQUxQSEFfU0NBTEUJCSgweDA4MDA5OCArIFZPWUFHRVJfQkFTRSkKKyNkZWZpbmUgVklERU9fQUxQSEFfSU5JVElBTF9TQ0FMRQkoMHgwODAwOUMgKyBWT1lBR0VSX0JBU0UpCisjZGVmaW5lIFZJREVPX0FMUEhBX0NIUk9NQV9LRVkJCSgweDA4MDBBMCArIFZPWUFHRVJfQkFTRSkKKyNkZWZpbmUgUEFORUxfSFdDX0FERFJFU1MJCSgweDA4MDBGMCArIFZPWUFHRVJfQkFTRSkKKyNkZWZpbmUgUEFORUxfSFdDX0xPQ0FUSU9OCQkoMHgwODAwRjQgKyBWT1lBR0VSX0JBU0UpCisjZGVmaW5lIFBBTkVMX0hXQ19DT0xPUl8xMgkJKDB4MDgwMEY4ICsgVk9ZQUdFUl9CQVNFKQorI2RlZmluZSBQQU5FTF9IV0NfQ09MT1JfMwkJKDB4MDgwMEZDICsgVk9ZQUdFUl9CQVNFKQorI2RlZmluZSBBTFBIQV9ESVNQTEFZX0NUUkwJCSgweDA4MDEwMCArIFZPWUFHRVJfQkFTRSkKKyNkZWZpbmUgQUxQSEFfRkJfQUREUkVTUwkJKDB4MDgwMTA0ICsgVk9ZQUdFUl9CQVNFKQorI2RlZmluZSBBTFBIQV9GQl9XSURUSAkJCSgweDA4MDEwOCArIFZPWUFHRVJfQkFTRSkKKyNkZWZpbmUgQUxQSEFfUExBTkVfVEwJCQkoMHgwODAxMEMgKyBWT1lBR0VSX0JBU0UpCisjZGVmaW5lIEFMUEhBX1BMQU5FX0JSCQkJKDB4MDgwMTEwICsgVk9ZQUdFUl9CQVNFKQorI2RlZmluZSBBTFBIQV9DSFJPTUFfS0VZCQkoMHgwODAxMTQgKyBWT1lBR0VSX0JBU0UpCisjZGVmaW5lIENSVF9ESVNQTEFZX0NUUkwJCSgweDA4MDIwMCArIFZPWUFHRVJfQkFTRSkKKyNkZWZpbmUgQ1JUX0ZCX0FERFJFU1MJCQkoMHgwODAyMDQgKyBWT1lBR0VSX0JBU0UpCisjZGVmaW5lIENSVF9GQl9XSURUSAkJCSgweDA4MDIwOCArIFZPWUFHRVJfQkFTRSkKKyNkZWZpbmUgQ1JUX0hPUklaT05UQUxfVE9UQUwJCSgweDA4MDIwQyArIFZPWUFHRVJfQkFTRSkKKyNkZWZpbmUgQ1JUX0hPUklaT05UQUxfU1lOQwkJKDB4MDgwMjEwICsgVk9ZQUdFUl9CQVNFKQorI2RlZmluZSBDUlRfVkVSVElDQUxfVE9UQUwJCSgweDA4MDIxNCArIFZPWUFHRVJfQkFTRSkKKyNkZWZpbmUgQ1JUX1ZFUlRJQ0FMX1NZTkMJCSgweDA4MDIxOCArIFZPWUFHRVJfQkFTRSkKKyNkZWZpbmUgQ1JUX1NJR05BVFVSRV9BTkFMWVpFUgkJKDB4MDgwMjFDICsgVk9ZQUdFUl9CQVNFKQorI2RlZmluZSBDUlRfQ1VSUkVOVF9MSU5FCQkoMHgwODAyMjAgKyBWT1lBR0VSX0JBU0UpCisjZGVmaW5lIENSVF9NT05JVE9SX0RFVEVDVAkJKDB4MDgwMjI0ICsgVk9ZQUdFUl9CQVNFKQorI2RlZmluZSBDUlRfSFdDX0FERFJFU1MJCQkoMHgwODAyMzAgKyBWT1lBR0VSX0JBU0UpCisjZGVmaW5lIENSVF9IV0NfTE9DQVRJT04JCSgweDA4MDIzNCArIFZPWUFHRVJfQkFTRSkKKyNkZWZpbmUgQ1JUX0hXQ19DT0xPUl8xMgkJKDB4MDgwMjM4ICsgVk9ZQUdFUl9CQVNFKQorI2RlZmluZSBDUlRfSFdDX0NPTE9SXzMJCQkoMHgwODAyM0MgKyBWT1lBR0VSX0JBU0UpCisjZGVmaW5lIENSVF9QQUxFVFRFX1JBTQkJCSgweDA4MDQwMCArIFZPWUFHRVJfQkFTRSkKKyNkZWZpbmUgUEFORUxfUEFMRVRURV9SQU0JCSgweDA4MDgwMCArIFZPWUFHRVJfQkFTRSkKKyNkZWZpbmUgVklERU9fUEFMRVRURV9SQU0JCSgweDA4MEMwMCArIFZPWUFHRVJfQkFTRSkKKworLyogLS0tLS0gODA1MSBDb250cm9sZSByZWdpc3RlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBWT1lBR0VSXzgwNTFfQkFTRQkJKDB4MDAwYzAwMDAgKyBWT1lBR0VSX0JBU0UpCisjZGVmaW5lIFZPWUFHRVJfODA1MV9SRVNFVAkJKDB4MDAwYjAwMDAgKyBWT1lBR0VSX0JBU0UpCisjZGVmaW5lIFZPWUFHRVJfODA1MV9TRUxFQ1QJCSgweDAwMGIwMDA0ICsgVk9ZQUdFUl9CQVNFKQorI2RlZmluZSBWT1lBR0VSXzgwNTFfQ1BVX0lOVAkJKDB4MDAwYjAwMGMgKyBWT1lBR0VSX0JBU0UpCisKKy8qIC0tLS0tIEFDOTcgQ29udHJvbGUgcmVnaXN0ZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQUM5N19UWF9TTE9UMAkJCSgweDAwMDAwMDAwICsgVk9ZQUdFUl9BQzk3X0JBU0UpCisjZGVmaW5lIEFDOTdfQ09OVFJPTF9TVEFUVVMJCSgweDAwMDAwMDgwICsgVk9ZQUdFUl9BQzk3X0JBU0UpCisjZGVmaW5lIEFDOTdDX1JFQUQJCQkoMSA8PCAxOSkKKyNkZWZpbmUgQUM5N0NfV0RfQklUCQkJKDEgPDwgMikKKyNkZWZpbmUgQUM5N0NfSU5ERVhfTUFTSwkJMHg3ZgorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2VuZGlmIC8qIF9WT1lBR0VSX0dYX1JFR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9yd3NlbS5oIGIvaW5jbHVkZS9hc20tc2gvcndzZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmU0MzM3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvcndzZW0uaApAQCAtMCwwICsxLDE3MCBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLXBwYy9yd3NlbS5oOiBSL1cgc2VtYXBob3JlcyBmb3IgU0ggdXNpbmcgdGhlIHN0dWZmCisgKiBpbiBsaWIvcndzZW0uYy4KKyAqLworCisjaWZuZGVmIF9BU01fU0hfUldTRU1fSAorI2RlZmluZSBfQVNNX1NIX1JXU0VNX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorCisvKgorICogdGhlIHNlbWFwaG9yZSBkZWZpbml0aW9uCisgKi8KK3N0cnVjdCByd19zZW1hcGhvcmUgeworCWxvbmcJCWNvdW50OworI2RlZmluZSBSV1NFTV9VTkxPQ0tFRF9WQUxVRQkJMHgwMDAwMDAwMAorI2RlZmluZSBSV1NFTV9BQ1RJVkVfQklBUwkJMHgwMDAwMDAwMQorI2RlZmluZSBSV1NFTV9BQ1RJVkVfTUFTSwkJMHgwMDAwZmZmZgorI2RlZmluZSBSV1NFTV9XQUlUSU5HX0JJQVMJCSgtMHgwMDAxMDAwMCkKKyNkZWZpbmUgUldTRU1fQUNUSVZFX1JFQURfQklBUwkJUldTRU1fQUNUSVZFX0JJQVMKKyNkZWZpbmUgUldTRU1fQUNUSVZFX1dSSVRFX0JJQVMJCShSV1NFTV9XQUlUSU5HX0JJQVMgKyBSV1NFTV9BQ1RJVkVfQklBUykKKwlzcGlubG9ja190CQl3YWl0X2xvY2s7CisJc3RydWN0IGxpc3RfaGVhZAl3YWl0X2xpc3Q7CisjaWYgUldTRU1fREVCVUcKKwlpbnQJCQlkZWJ1ZzsKKyNlbmRpZgorfTsKKworLyoKKyAqIGluaXRpYWxpc2F0aW9uCisgKi8KKyNpZiBSV1NFTV9ERUJVRworI2RlZmluZSBfX1JXU0VNX0RFQlVHX0lOSVQgICAgICAsIDAKKyNlbHNlCisjZGVmaW5lIF9fUldTRU1fREVCVUdfSU5JVAkvKiAqLworI2VuZGlmCisKKyNkZWZpbmUgX19SV1NFTV9JTklUSUFMSVpFUihuYW1lKSBcCisJeyBSV1NFTV9VTkxPQ0tFRF9WQUxVRSwgU1BJTl9MT0NLX1VOTE9DS0VELCBcCisJICBMSVNUX0hFQURfSU5JVCgobmFtZSkud2FpdF9saXN0KSBcCisJICBfX1JXU0VNX0RFQlVHX0lOSVQgfQorCisjZGVmaW5lIERFQ0xBUkVfUldTRU0obmFtZSkJCVwKKwlzdHJ1Y3Qgcndfc2VtYXBob3JlIG5hbWUgPSBfX1JXU0VNX0lOSVRJQUxJWkVSKG5hbWUpCisKK2V4dGVybiBzdHJ1Y3Qgcndfc2VtYXBob3JlICpyd3NlbV9kb3duX3JlYWRfZmFpbGVkKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSk7CitleHRlcm4gc3RydWN0IHJ3X3NlbWFwaG9yZSAqcndzZW1fZG93bl93cml0ZV9mYWlsZWQoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKTsKK2V4dGVybiBzdHJ1Y3Qgcndfc2VtYXBob3JlICpyd3NlbV93YWtlKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSk7CitleHRlcm4gc3RydWN0IHJ3X3NlbWFwaG9yZSAqcndzZW1fZG93bmdyYWRlX3dha2Uoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKTsKKworc3RhdGljIGlubGluZSB2b2lkIGluaXRfcndzZW0oc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQoreworCXNlbS0+Y291bnQgPSBSV1NFTV9VTkxPQ0tFRF9WQUxVRTsKKwlzcGluX2xvY2tfaW5pdCgmc2VtLT53YWl0X2xvY2spOworCUlOSVRfTElTVF9IRUFEKCZzZW0tPndhaXRfbGlzdCk7CisjaWYgUldTRU1fREVCVUcKKwlzZW0tPmRlYnVnID0gMDsKKyNlbmRpZgorfQorCisvKgorICogbG9jayBmb3IgcmVhZGluZworICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19kb3duX3JlYWQoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQoreworCWlmIChhdG9taWNfaW5jX3JldHVybigoYXRvbWljX3QgKikoJnNlbS0+Y291bnQpKSA+IDApCisJCXNtcF93bWIoKTsKKwllbHNlCisJCXJ3c2VtX2Rvd25fcmVhZF9mYWlsZWQoc2VtKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19kb3duX3JlYWRfdHJ5bG9jayhzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCit7CisJaW50IHRtcDsKKworCXdoaWxlICgodG1wID0gc2VtLT5jb3VudCkgPj0gMCkgeworCQlpZiAodG1wID09IGNtcHhjaGcoJnNlbS0+Y291bnQsIHRtcCwKKwkJCQkgICB0bXAgKyBSV1NFTV9BQ1RJVkVfUkVBRF9CSUFTKSkgeworCQkJc21wX3dtYigpOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBsb2NrIGZvciB3cml0aW5nCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2Rvd25fd3JpdGUoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQoreworCWludCB0bXA7CisKKwl0bXAgPSBhdG9taWNfYWRkX3JldHVybihSV1NFTV9BQ1RJVkVfV1JJVEVfQklBUywKKwkJCQkoYXRvbWljX3QgKikoJnNlbS0+Y291bnQpKTsKKwlpZiAodG1wID09IFJXU0VNX0FDVElWRV9XUklURV9CSUFTKQorCQlzbXBfd21iKCk7CisJZWxzZQorCQlyd3NlbV9kb3duX3dyaXRlX2ZhaWxlZChzZW0pOworfQorCitzdGF0aWMgaW5saW5lIGludCBfX2Rvd25fd3JpdGVfdHJ5bG9jayhzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCit7CisJaW50IHRtcDsKKworCXRtcCA9IGNtcHhjaGcoJnNlbS0+Y291bnQsIFJXU0VNX1VOTE9DS0VEX1ZBTFVFLAorCQkgICAgICBSV1NFTV9BQ1RJVkVfV1JJVEVfQklBUyk7CisJc21wX3dtYigpOworCXJldHVybiB0bXAgPT0gUldTRU1fVU5MT0NLRURfVkFMVUU7Cit9CisKKy8qCisgKiB1bmxvY2sgYWZ0ZXIgcmVhZGluZworICovCitzdGF0aWMgaW5saW5lIHZvaWQgX191cF9yZWFkKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKK3sKKwlpbnQgdG1wOworCisJc21wX3dtYigpOworCXRtcCA9IGF0b21pY19kZWNfcmV0dXJuKChhdG9taWNfdCAqKSgmc2VtLT5jb3VudCkpOworCWlmICh0bXAgPCAtMSAmJiAodG1wICYgUldTRU1fQUNUSVZFX01BU0spID09IDApCisJCXJ3c2VtX3dha2Uoc2VtKTsKK30KKworLyoKKyAqIHVubG9jayBhZnRlciB3cml0aW5nCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3VwX3dyaXRlKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKK3sKKwlzbXBfd21iKCk7CisJaWYgKGF0b21pY19zdWJfcmV0dXJuKFJXU0VNX0FDVElWRV9XUklURV9CSUFTLAorCQkJICAgICAgKGF0b21pY190ICopKCZzZW0tPmNvdW50KSkgPCAwKQorCQlyd3NlbV93YWtlKHNlbSk7Cit9CisKKy8qCisgKiBpbXBsZW1lbnQgYXRvbWljIGFkZCBmdW5jdGlvbmFsaXR5CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCByd3NlbV9hdG9taWNfYWRkKGludCBkZWx0YSwgc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQoreworCWF0b21pY19hZGQoZGVsdGEsIChhdG9taWNfdCAqKSgmc2VtLT5jb3VudCkpOworfQorCisvKgorICogZG93bmdyYWRlIHdyaXRlIGxvY2sgdG8gcmVhZCBsb2NrCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2Rvd25ncmFkZV93cml0ZShzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCit7CisJaW50IHRtcDsKKworCXNtcF93bWIoKTsKKwl0bXAgPSBhdG9taWNfYWRkX3JldHVybigtUldTRU1fV0FJVElOR19CSUFTLCAoYXRvbWljX3QgKikoJnNlbS0+Y291bnQpKTsKKwlpZiAodG1wIDwgMCkKKwkJcndzZW1fZG93bmdyYWRlX3dha2Uoc2VtKTsKK30KKworLyoKKyAqIGltcGxlbWVudCBleGNoYW5nZSBhbmQgYWRkIGZ1bmN0aW9uYWxpdHkKKyAqLworc3RhdGljIGlubGluZSBpbnQgcndzZW1fYXRvbWljX3VwZGF0ZShpbnQgZGVsdGEsIHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKK3sKKwlzbXBfbWIoKTsKKwlyZXR1cm4gYXRvbWljX2FkZF9yZXR1cm4oZGVsdGEsIChhdG9taWNfdCAqKSgmc2VtLT5jb3VudCkpOworfQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9BU01fU0hfUldTRU1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvc2F0dXJuL2lvLmggYi9pbmNsdWRlL2FzbS1zaC9zYXR1cm4vaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWI5YjVkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvc2F0dXJuL2lvLmgKQEAgLTAsMCArMSwxOSBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLXNoL3NhdHVybi9pby5oCisgKgorICogSS9PIGZ1bmN0aW9ucyBmb3IgdXNlIG9uIHRoZSBTZWdhIFNhdHVybi4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgUGF1bCBNdW5kdAorICoKKyAqIFJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCB2Mi4wLgorICovCisjaWZuZGVmIF9fQVNNX1NIX1NBVFVSTl9JT19ICisjZGVmaW5lIF9fQVNNX1NIX1NBVFVSTl9JT19ICisKKy8qIGFyY2gvc2gvYm9hcmRzL3NhdHVybi9pby5jICovCitleHRlcm4gdW5zaWduZWQgbG9uZyBzYXR1cm5faXNhX3BvcnQyYWRkcih1bnNpZ25lZCBsb25nIG9mZnNldCk7CitleHRlcm4gdm9pZCAqc2F0dXJuX2lvcmVtYXAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CitleHRlcm4gdm9pZCBzYXR1cm5faW91bm1hcCh2b2lkICphZGRyKTsKKworI2VuZGlmIC8qIF9fQVNNX1NIX1NBVFVSTl9JT19IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL3NhdHVybi9zbXBjLmggYi9pbmNsdWRlL2FzbS1zaC9zYXR1cm4vc21wYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkZTVjMTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9zYXR1cm4vc21wYy5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1zaC9zYXR1cm4vc21wYy5oCisgKgorICogU3lzdGVtIE1hbmFnZXIgLyBQZXJpcGhlcmFsIENvbnRyb2wgZGVmaW5pdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAyIFBhdWwgTXVuZHQKKyAqCisgKiBSZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgdjIuMC4KKyAqLworI2lmbmRlZiBfX0FTTV9TSF9TQVRVUk5fU01QQ19ICisjZGVmaW5lIF9fQVNNX1NIX1NBVFVSTl9TTVBDX0gKKworI2luY2x1ZGUgPGFzbS9pby5oPgorCisjZGVmaW5lIFNNUENfQ09NTUFORAkweDIwMTAwMDFmCS8qIFNNUEMgY29tbWFuZCByZWdpc3RlciAqLworI2RlZmluZSBTTVBDX1JFU1VMVAkweDIwMTAwMDVmCS8qIFNNUEMgcmVzdWx0IHJlZ2lzdGVyICovCisjZGVmaW5lIFNNUENfU1RBVFVTCTB4MjAxMDAwNjMJLyogU01QQyBzdGF0dXMgcmVnaXN0ZXIgKi8KKworI2RlZmluZSBTTVBDX0NNRF9NU0hPTgkweDAwMDEJCS8qIE1hc3RlciBTSCBPbiAqLworI2RlZmluZSBTTVBDX0NNRF9TU0hPTgkweDAwMDIJCS8qIFNsYXZlIFNIIE9uICovCisjZGVmaW5lIFNNUENfQ01EX1NTSE9GRgkweDAwMDMJCS8qIFNsYXZlIFNIIE9mZiAqLworI2RlZmluZSBTTVBDX0NNRF9TTkRPTgkweDAwMDQJCS8qIFNvdW5kIE9uICovCisjZGVmaW5lIFNNUENfQ01EX1NORE9GRgkweDAwMDUJCS8qIFNvdW5kIE9mZiAqLworI2RlZmluZSBTTVBDX0NNRF9DRE9OCTB4MDAwNgkJLyogQ0QgT24gKi8KKyNkZWZpbmUgU01QQ19DTURfQ0RPRkYJMHgwMDA3CQkvKiBDRCBPZmYgKi8KKworc3RhdGljIGlubGluZSB2b2lkIHNtcGNfYmFycmllcih2b2lkKQoreworCXdoaWxlICgoY3RybF9pbmIoU01QQ19TVEFUVVMpICYgMHgwMDAxKSA9PSAweDAwMDEpCisJCTsKK30KKworI2VuZGlmIC8qIF9fQVNNX1NIX1NBVFVSTl9TTVBDX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvc2NhdHRlcmxpc3QuaCBiL2luY2x1ZGUvYXNtLXNoL3NjYXR0ZXJsaXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I5MWRmMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL3NjYXR0ZXJsaXN0LmgKQEAgLTAsMCArMSwxMyBAQAorI2lmbmRlZiBfX0FTTV9TSF9TQ0FUVEVSTElTVF9ICisjZGVmaW5lIF9fQVNNX1NIX1NDQVRURVJMSVNUX0gKKworc3RydWN0IHNjYXR0ZXJsaXN0IHsKKyAgICBzdHJ1Y3QgcGFnZSAqIHBhZ2U7IC8qIExvY2F0aW9uIGZvciBoaWdobWVtIHBhZ2UsIGlmIGFueSAqLworICAgIHVuc2lnbmVkIGludCBvZmZzZXQ7LyogZm9yIGhpZ2htZW0sIHBhZ2Ugb2Zmc2V0ICovCisgICAgZG1hX2FkZHJfdCBkbWFfYWRkcmVzczsKKyAgICB1bnNpZ25lZCBpbnQgbGVuZ3RoOworfTsKKworI2RlZmluZSBJU0FfRE1BX1RIUkVTSE9MRCAoMHgxZmZmZmZmZikKKworI2VuZGlmIC8qICEoX19BU01fU0hfU0NBVFRFUkxJU1RfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL3NlL2lvLmggYi9pbmNsdWRlL2FzbS1zaC9zZS9pby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllZWI4NmMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9zZS9pby5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1zaC9pb19zZS5oCisgKgorICogQ29weXJpZ2h0IDIwMDAgU3R1YXJ0IE1lbmVmeSAoc3R1YXJ0Lm1lbmVmeUBzdC5jb20pCisgKgorICogTWF5IGJlIGNvcGllZCBvciBtb2RpZmllZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSBsaW51eC9DT1BZSU5HIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICoKKyAqIElPIGZ1bmN0aW9ucyBmb3IgYW4gSGl0YWNoaSBTb2x1dGlvbkVuZ2luZQorICovCisKKyNpZm5kZWYgX0FTTV9TSF9JT19TRV9ICisjZGVmaW5lIF9BU01fU0hfSU9fU0VfSAorCitleHRlcm4gdW5zaWduZWQgY2hhciBzZV9pbmIodW5zaWduZWQgbG9uZyBwb3J0KTsKK2V4dGVybiB1bnNpZ25lZCBzaG9ydCBzZV9pbncodW5zaWduZWQgbG9uZyBwb3J0KTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgc2VfaW5sKHVuc2lnbmVkIGxvbmcgcG9ydCk7CisKK2V4dGVybiB2b2lkIHNlX291dGIodW5zaWduZWQgY2hhciB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KTsKK2V4dGVybiB2b2lkIHNlX291dHcodW5zaWduZWQgc2hvcnQgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCk7CitleHRlcm4gdm9pZCBzZV9vdXRsKHVuc2lnbmVkIGludCB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KTsKKworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgc2VfaW5iX3AodW5zaWduZWQgbG9uZyBwb3J0KTsKK2V4dGVybiB2b2lkIHNlX291dGJfcCh1bnNpZ25lZCBjaGFyIHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpOworCitleHRlcm4gdm9pZCBzZV9pbnNiKHVuc2lnbmVkIGxvbmcgcG9ydCwgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCk7CitleHRlcm4gdm9pZCBzZV9pbnN3KHVuc2lnbmVkIGxvbmcgcG9ydCwgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCk7CitleHRlcm4gdm9pZCBzZV9pbnNsKHVuc2lnbmVkIGxvbmcgcG9ydCwgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCk7CitleHRlcm4gdm9pZCBzZV9vdXRzYih1bnNpZ25lZCBsb25nIHBvcnQsIGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpOworZXh0ZXJuIHZvaWQgc2Vfb3V0c3codW5zaWduZWQgbG9uZyBwb3J0LCBjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKK2V4dGVybiB2b2lkIHNlX291dHNsKHVuc2lnbmVkIGxvbmcgcG9ydCwgY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCk7CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIHNlX2lzYV9wb3J0MmFkZHIodW5zaWduZWQgbG9uZyBvZmZzZXQpOworCisjZW5kaWYgLyogX0FTTV9TSF9JT19TRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9zZS9zZS5oIGIvaW5jbHVkZS9hc20tc2gvc2Uvc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTFjNWRhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvc2Uvc2UuaApAQCAtMCwwICsxLDc3IEBACisjaWZuZGVmIF9fQVNNX1NIX0hJVEFDSElfU0VfSAorI2RlZmluZSBfX0FTTV9TSF9ISVRBQ0hJX1NFX0gKKworLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLXNoL2hpdGFjaGlfc2UuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCAgS2F6dW1vdG8gS29qaW1hCisgKgorICogSGl0YWNoaSBTb2x1dGlvbkVuZ2luZSBzdXBwb3J0CisgKi8KKworLyogQm94IHNwZWNpZmljIGFkZHJlc3Nlcy4gICovCisKKyNkZWZpbmUgUEFfUk9NCQkweDAwMDAwMDAwCS8qIEVQUk9NICovCisjZGVmaW5lIFBBX1JPTV9TSVpFCTB4MDA0MDAwMDAJLyogRVBST00gc2l6ZSA0TSBieXRlICovCisjZGVmaW5lIFBBX0ZST00JCTB4MDEwMDAwMDAJLyogRVBST00gKi8KKyNkZWZpbmUgUEFfRlJPTV9TSVpFCTB4MDA0MDAwMDAJLyogRVBST00gc2l6ZSA0TSBieXRlICovCisjZGVmaW5lIFBBX0VYVDEJCTB4MDQwMDAwMDAKKyNkZWZpbmUgUEFfRVhUMV9TSVpFCTB4MDQwMDAwMDAKKyNkZWZpbmUgUEFfRVhUMgkJMHgwODAwMDAwMAorI2RlZmluZSBQQV9FWFQyX1NJWkUJMHgwNDAwMDAwMAorI2RlZmluZSBQQV9TRFJBTQkweDBjMDAwMDAwCisjZGVmaW5lIFBBX1NEUkFNX1NJWkUJMHgwNDAwMDAwMAorCisjZGVmaW5lIFBBX0VYVDQJCTB4MTIwMDAwMDAKKyNkZWZpbmUgUEFfRVhUNF9TSVpFCTB4MDIwMDAwMDAKKyNkZWZpbmUgUEFfRVhUNQkJMHgxNDAwMDAwMAorI2RlZmluZSBQQV9FWFQ1X1NJWkUJMHgwNDAwMDAwMAorI2RlZmluZSBQQV9QQ0lDCQkweDE4MDAwMDAwCS8qIE1SLVNIUEMtMDEgUENNQ0lBICovCisKKyNkZWZpbmUgUEFfODM5MDIJMHhiMDAwMDAwMAkvKiBEUDgzOTAyQSAqLworI2RlZmluZSBQQV84MzkwMl9JRgkweGIwMDQwMDAwCS8qIERQODM5MDJBIHJlbW90ZSBpbyBwb3J0ICovCisjZGVmaW5lIFBBXzgzOTAyX1JTVAkweGIwMDgwMDAwCS8qIERQODM5MDJBIHJlc2V0IHBvcnQgKi8KKworI2RlZmluZSBQQV9TVVBFUklPCTB4YjA0MDAwMDAJLyogU01DMzdDOTM1QSBzdXBlciBpbyBjaGlwICovCisjZGVmaW5lIFBBX0RJUFNXMAkweGIwODAwMDAwCS8qIERpcCBzd2l0Y2ggNSw2ICovCisjZGVmaW5lIFBBX0RJUFNXMQkweGIwODAwMDAyCS8qIERpcCBzd2l0Y2ggNyw4ICovCisjZGVmaW5lIFBBX0xFRAkJMHhiMGMwMDAwMAkvKiBMRUQgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDUpCisjZGVmaW5lIFBBX0JDUgkJMHhiMGUwMDAwMAorI2Vsc2UKKyNkZWZpbmUgUEFfQkNSCQkweGIxNDAwMDAwCS8qIEZQR0EgKi8KKyNlbmRpZgorCisjZGVmaW5lIFBBX01SU0hQQwkweGI4M2ZmZmUwCS8qIE1SLVNIUEMtMDEgUENNQ0lBIGNvbnRyb2xsZXIgKi8KKyNkZWZpbmUgUEFfTVJTSFBDX01XMQkweGI4NDAwMDAwCS8qIE1SLVNIUEMtMDEgbWVtb3J5IHdpbmRvdyBiYXNlICovCisjZGVmaW5lIFBBX01SU0hQQ19NVzIJMHhiODUwMDAwMAkvKiBNUi1TSFBDLTAxIGF0dHJpYnV0ZSB3aW5kb3cgYmFzZSAqLworI2RlZmluZSBQQV9NUlNIUENfSU8JMHhiODYwMDAwMAkvKiBNUi1TSFBDLTAxIEkvTyB3aW5kb3cgYmFzZSAqLworI2RlZmluZSBNUlNIUENfT1BUSU9OICAgKFBBX01SU0hQQyArIDYpCisjZGVmaW5lIE1SU0hQQ19DU1IgICAgICAoUEFfTVJTSFBDICsgOCkKKyNkZWZpbmUgTVJTSFBDX0lTUiAgICAgIChQQV9NUlNIUEMgKyAxMCkKKyNkZWZpbmUgTVJTSFBDX0lDUiAgICAgIChQQV9NUlNIUEMgKyAxMikKKyNkZWZpbmUgTVJTSFBDX0NQV0NSICAgIChQQV9NUlNIUEMgKyAxNCkKKyNkZWZpbmUgTVJTSFBDX01XMENSMSAgIChQQV9NUlNIUEMgKyAxNikKKyNkZWZpbmUgTVJTSFBDX01XMUNSMSAgIChQQV9NUlNIUEMgKyAxOCkKKyNkZWZpbmUgTVJTSFBDX0lPV0NSMSAgIChQQV9NUlNIUEMgKyAyMCkKKyNkZWZpbmUgTVJTSFBDX01XMENSMiAgIChQQV9NUlNIUEMgKyAyMikKKyNkZWZpbmUgTVJTSFBDX01XMUNSMiAgIChQQV9NUlNIUEMgKyAyNCkKKyNkZWZpbmUgTVJTSFBDX0lPV0NSMiAgIChQQV9NUlNIUEMgKyAyNikKKyNkZWZpbmUgTVJTSFBDX0NEQ1IgICAgIChQQV9NUlNIUEMgKyAyOCkKKyNkZWZpbmUgTVJTSFBDX1BDSUNfSU5GTyAoUEFfTVJTSFBDICsgMzApCisKKyNkZWZpbmUgQkNSX0lMQ1JBCShQQV9CQ1IgKyAwKQorI2RlZmluZSBCQ1JfSUxDUkIJKFBBX0JDUiArIDIpCisjZGVmaW5lIEJDUl9JTENSQwkoUEFfQkNSICsgNCkKKyNkZWZpbmUgQkNSX0lMQ1JECShQQV9CQ1IgKyA2KQorI2RlZmluZSBCQ1JfSUxDUkUJKFBBX0JDUiArIDgpCisjZGVmaW5lIEJDUl9JTENSRgkoUEFfQkNSICsgMTApCisjZGVmaW5lIEJDUl9JTENSRwkoUEFfQkNSICsgMTIpCisKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDUpCisjZGVmaW5lIElSUV9TVE5JQyAgIDEyCisjZWxzZQorI2RlZmluZSBJUlFfU1ROSUMJMTAKKyNlbmRpZgorCisjZW5kaWYgIC8qIF9fQVNNX1NIX0hJVEFDSElfU0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvc2Uvc21jMzdjOTN4LmggYi9pbmNsdWRlL2FzbS1zaC9zZS9zbWMzN2M5M3guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODVkYTJhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvc2Uvc21jMzdjOTN4LmgKQEAgLTAsMCArMSwxOTAgQEAKKyNpZm5kZWYgX19BU01fU0hfU01DMzdDOTNYX0gKKyNkZWZpbmUgX19BU01fU0hfU01DMzdDOTNYX0gKKworLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLXNoL3NtYzM3YzkzeC5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwICBLYXp1bW90byBLb2ppbWEKKyAqCisgKiBTTVNDIDM3QzkzeCBTdXBlciBJTyBDaGlwIHN1cHBvcnQKKyAqLworCisvKiBEZWZhdWx0IGJhc2UgSS9PIGFkZHJlc3MgKi8KKyNkZWZpbmUgRkRDX1BSSU1BUllfQkFTRQkweDNmMAorI2RlZmluZSBJREUxX1BSSU1BUllfQkFTRQkweDFmMAorI2RlZmluZSBJREUxX1NFQ09OREFSWV9CQVNFCTB4MTcwCisjZGVmaW5lIFBBUlBPUlRfUFJJTUFSWV9CQVNFCTB4Mzc4CisjZGVmaW5lIENPTTFfUFJJTUFSWV9CQVNFCTB4MmY4CisjZGVmaW5lIENPTTJfUFJJTUFSWV9CQVNFCTB4M2Y4CisjZGVmaW5lIFJUQ19QUklNQVJZX0JBU0UJMHgwNzAKKyNkZWZpbmUgS0JDX1BSSU1BUllfQkFTRQkweDA2MAorI2RlZmluZSBBVVhJT19QUklNQVJZX0JBU0UJMHgwMDAJLyogWFhYICovCisKKy8qIExvZ2ljYWwgZGV2aWNlIG51bWJlciAqLworI2RlZmluZSBMRE5fRkRDCQkJMAorI2RlZmluZSBMRE5fSURFMQkJMQorI2RlZmluZSBMRE5fSURFMgkJMgorI2RlZmluZSBMRE5fUEFSUE9SVAkJMworI2RlZmluZSBMRE5fQ09NMQkJNAorI2RlZmluZSBMRE5fQ09NMgkJNQorI2RlZmluZSBMRE5fUlRDCQkJNgorI2RlZmluZSBMRE5fS0JDCQkJNworI2RlZmluZSBMRE5fQVVYSU8JCTgKKworLyogQ29uZmlndXJhdGlvbiBwb3J0IGFuZCBrZXkgKi8KKyNkZWZpbmUgQ09ORklHX1BPUlQJCTB4M2YwCisjZGVmaW5lIElOREVYX1BPUlQJCUNPTkZJR19QT1JUCisjZGVmaW5lIERBVEFfUE9SVAkJMHgzZjEKKyNkZWZpbmUgQ09ORklHX0VOVEVSCQkweDU1CisjZGVmaW5lIENPTkZJR19FWElUCQkweGFhCisKKy8qIENvbmZpZ3VyYXRpb24gaW5kZXggKi8KKyNkZWZpbmUgQ1VSUkVOVF9MRE5fSU5ERVgJMHgwNworI2RlZmluZSBQT1dFUl9DT05UUk9MX0lOREVYCTB4MjIKKyNkZWZpbmUgQUNUSVZBVEVfSU5ERVgJCTB4MzAKKyNkZWZpbmUgSU9fQkFTRV9ISV9JTkRFWAkweDYwCisjZGVmaW5lIElPX0JBU0VfTE9fSU5ERVgJMHg2MQorI2RlZmluZSBJUlFfU0VMRUNUX0lOREVYCTB4NzAKKyNkZWZpbmUgRE1BX1NFTEVDVF9JTkRFWAkweDc0CisKKyNkZWZpbmUgR1BJTzQ2X0lOREVYCQkweGM2CisjZGVmaW5lIEdQSU80N19JTkRFWAkJMHhjNworCisvKiBVQVJUIHN0dWZmLiBPbmx5IGZvciBkZWJ1Z2dpbmcuICAqLworLyogVUFSVCBSZWdpc3RlciAqLworCisjZGVmaW5lIFVBUlRfUkJSCTB4MAkvKiBSZWNlaXZlciBCdWZmZXIgUmVnaXN0ZXIgKFJlYWQgT25seSkgKi8KKyNkZWZpbmUgVUFSVF9USFIJMHgwCS8qIFRyYW5zbWl0dGVyIEhvbGRpbmcgUmVnaXN0ZXIgKFdyaXRlIE9ubHkpICovCisjZGVmaW5lIFVBUlRfSUVSCTB4MgkvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovCisjZGVmaW5lIFVBUlRfSUlSCTB4NAkvKiBJbnRlcnJ1cHQgSWRlbnQgUmVnaXN0ZXIgKFJlYWQgT25seSkgKi8KKyNkZWZpbmUgVUFSVF9GQ1IJMHg0CS8qIEZJRk8gQ29udHJvbCBSZWdpc3RlciAoV3JpdGUgT25seSkgKi8KKyNkZWZpbmUgVUFSVF9MQ1IJMHg2CS8qIExpbmUgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBVQVJUX01DUgkweDgJLyogTU9ERU0gQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBVQVJUX0xTUgkweGEJLyogTGluZSBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVUFSVF9NU1IJMHhjCS8qIE1PREVNIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBVQVJUX1NDUgkweGUJLyogU2NyYXRjaCBSZWdpc3RlciAqLworI2RlZmluZSBVQVJUX0RMTAkweDAJLyogRGl2aXNvciBMYXRjaCAoTFMpICovCisjZGVmaW5lIFVBUlRfRExNCTB4MgkvKiBEaXZpc29yIExhdGNoIChNUykgKi8KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK3R5cGVkZWYgc3RydWN0IHVhcnRfcmVnIHsKKwl2b2xhdGlsZSBfX3UxNiByYnI7CisJdm9sYXRpbGUgX191MTYgaWVyOworCXZvbGF0aWxlIF9fdTE2IGlpcjsKKwl2b2xhdGlsZSBfX3UxNiBsY3I7CisJdm9sYXRpbGUgX191MTYgbWNyOworCXZvbGF0aWxlIF9fdTE2IGxzcjsKKwl2b2xhdGlsZSBfX3UxNiBtc3I7CisJdm9sYXRpbGUgX191MTYgc2NyOworfSB1YXJ0X3JlZzsKKyNlbmRpZiAvKiAhIF9fQVNTRU1CTFlfXyAqLworCisvKiBBbGlhcyBmb3IgV3JpdGUgT25seSBSZWdpc3RlciAqLworCisjZGVmaW5lIHRocglyYnIKKyNkZWZpbmUgdGNyCWlpcgorCisvKiBBbGlhcyBmb3IgRGl2aXNvciBMYXRjaCBSZWdpc3RlciAqLworCisjZGVmaW5lIGRsbAlyYnIKKyNkZWZpbmUgZGxtCWllcgorI2RlZmluZSBmY3IJaWlyCisKKy8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8KKworI2RlZmluZSBJRVJfRVJEQUkJMHgwMTAwCS8qIEVuYWJsZSBSZWNlaXZlZCBEYXRhIEF2YWlsYWJsZSBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSUVSX0VUSFJFSQkweDAyMDAJLyogRW5hYmxlIFRyYW5zbWl0dGVyIEhvbGRpbmcgUmVnaXN0ZXIgRW1wdHkgSW50ZXJydXB0ICovCisjZGVmaW5lIElFUl9FTFNJCTB4MDQwMAkvKiBFbmFibGUgUmVjZWl2ZXIgTGluZSBTdGF0dXMgSW50ZXJydXB0ICovCisjZGVmaW5lIElFUl9FTVNJCTB4MDgwMAkvKiBFbmFibGUgTU9ERU0gU3RhdHVzIEludGVycnVwdCAqLworCisvKiBJbnRlcnJ1cHQgSWRlbnQgUmVnaXN0ZXIgKi8KKworI2RlZmluZSBJSVJfSVAJCTB4MDEwMAkvKiAiMCIgaWYgSW50ZXJydXB0IFBlbmRpbmcgKi8KKyNkZWZpbmUgSUlSX0lJQjAJMHgwMjAwCS8qIEludGVycnVwdCBJRCBCaXQgMCAqLworI2RlZmluZSBJSVJfSUlCMQkweDA0MDAJLyogSW50ZXJydXB0IElEIEJpdCAxICovCisjZGVmaW5lIElJUl9JSUIyCTB4MDgwMAkvKiBJbnRlcnJ1cHQgSUQgQml0IDIgKi8KKyNkZWZpbmUgSUlSX0ZJRk8JMHhjMDAwCS8qIEZJRk9zIGVuYWJsZWQgKi8KKworLyogRklGTyBDb250cm9sIFJlZ2lzdGVyICovCisKKyNkZWZpbmUgRkNSX0ZFTgkJMHgwMTAwCS8qIEZJRk8gZW5hYmxlICovCisjZGVmaW5lIEZDUl9SRlJFUwkweDAyMDAJLyogUmVjZWl2ZXIgRklGTyByZXNldCAqLworI2RlZmluZSBGQ1JfVEZSRVMJMHgwNDAwCS8qIFRyYW5zbWl0dGVyIEZJRk8gcmVzZXQgKi8KKyNkZWZpbmUgRkNSX0RNQQkJMHgwODAwCS8qIERNQSBtb2RlIHNlbGVjdCAqLworI2RlZmluZSBGQ1JfUlRMCQkweDQwMDAJLyogUmVjZWl2ZXIgdHJpZ2VyIChMU0IpICovCisjZGVmaW5lIEZDUl9SVE0JCTB4ODAwMAkvKiBSZWNlaXZlciB0cmlnZXIgKE1TQikgKi8KKworLyogTGluZSBDb250cm9sIFJlZ2lzdGVyICovCisKKyNkZWZpbmUgTENSX1dMUzAJMHgwMTAwCS8qIFdvcmQgTGVuZ3RoIFNlbGVjdCBCaXQgMCAqLworI2RlZmluZSBMQ1JfV0xTMQkweDAyMDAJLyogV29yZCBMZW5ndGggU2VsZWN0IEJpdCAxICovCisjZGVmaW5lIExDUl9TVEIJCTB4MDQwMAkvKiBOdW1iZXIgb2YgU3RvcCBCaXRzICovCisjZGVmaW5lIExDUl9QRU4JCTB4MDgwMAkvKiBQYXJpdHkgRW5hYmxlICovCisjZGVmaW5lIExDUl9FUFMJCTB4MTAwMAkvKiBFdmVuIFBhcml0eSBTZWxlY3QgKi8KKyNkZWZpbmUgTENSX1NQCQkweDIwMDAJLyogU3RpY2sgUGFyaXR5ICovCisjZGVmaW5lIExDUl9TQgkJMHg0MDAwCS8qIFNldCBCcmVhayAqLworI2RlZmluZSBMQ1JfRExBQgkweDgwMDAJLyogRGl2aXNvciBMYXRjaCBBY2Nlc3MgQml0ICovCisKKy8qIE1PREVNIENvbnRyb2wgUmVnaXN0ZXIgKi8KKworI2RlZmluZSBNQ1JfRFRSCQkweDAxMDAJLyogRGF0YSBUZXJtaW5hbCBSZWFkeSAqLworI2RlZmluZSBNQ1JfUlRTCQkweDAyMDAJLyogUmVxdWVzdCB0byBTZW5kICovCisjZGVmaW5lIE1DUl9PVVQxCTB4MDQwMAkvKiBPdXQgMSAqLworI2RlZmluZSBNQ1JfSVJRRU4JMHgwODAwCS8qIElSUSBFbmFibGUgKi8KKyNkZWZpbmUgTUNSX0xPT1AJMHgxMDAwCS8qIExvb3AgKi8KKworLyogTGluZSBTdGF0dXMgUmVnaXN0ZXIgKi8KKworI2RlZmluZSBMU1JfRFIJCTB4MDEwMAkvKiBEYXRhIFJlYWR5ICovCisjZGVmaW5lIExTUl9PRQkJMHgwMjAwCS8qIE92ZXJydW4gRXJyb3IgKi8KKyNkZWZpbmUgTFNSX1BFCQkweDA0MDAJLyogUGFyaXR5IEVycm9yICovCisjZGVmaW5lIExTUl9GRQkJMHgwODAwCS8qIEZyYW1pbmcgRXJyb3IgKi8KKyNkZWZpbmUgTFNSX0JJCQkweDEwMDAJLyogQnJlYWsgSW50ZXJydXB0ICovCisjZGVmaW5lIExTUl9USFJFCTB4MjAwMAkvKiBUcmFuc21pdHRlciBIb2xkaW5nIFJlZ2lzdGVyIEVtcHR5ICovCisjZGVmaW5lIExTUl9URU1UCTB4NDAwMAkvKiBUcmFuc21pdHRlciBFbXB0eSAqLworI2RlZmluZSBMU1JfRklGT0UJMHg4MDAwCS8qIFJlY2VpdmVyIEZJRk8gZXJyb3IgKi8KKworLyogTU9ERU0gU3RhdHVzIFJlZ2lzdGVyICovCisKKyNkZWZpbmUgTVNSX0RDVFMJMHgwMTAwCS8qIERlbHRhIENsZWFyIHRvIFNlbmQgKi8KKyNkZWZpbmUgTVNSX0REU1IJMHgwMjAwCS8qIERlbHRhIERhdGEgU2V0IFJlYWR5ICovCisjZGVmaW5lIE1TUl9URVJJCTB4MDQwMAkvKiBUcmFpbGluZyBFZGdlIFJpbmcgSW5kaWNhdG9yICovCisjZGVmaW5lIE1TUl9ERENECTB4MDgwMAkvKiBEZWx0YSBEYXRhIENhcnJpZXIgRGV0ZWN0ICovCisjZGVmaW5lIE1TUl9DVFMJCTB4MTAwMAkvKiBDbGVhciB0byBTZW5kICovCisjZGVmaW5lIE1TUl9EU1IJCTB4MjAwMAkvKiBEYXRhIFNldCBSZWFkeSAqLworI2RlZmluZSBNU1JfUkkJCTB4NDAwMAkvKiBSaW5nIEluZGljYXRvciAqLworI2RlZmluZSBNU1JfRENECQkweDgwMDAJLyogRGF0YSBDYXJyaWVyIERldGVjdCAqLworCisvKiBCYXVkIFJhdGUgRGl2aXNvciAqLworCisjZGVmaW5lIFVBUlRfQ0xLCSgxODQzMjAwKQkvKiAxLjg0MzIgTUh6ICovCisjZGVmaW5lIFVBUlRfQkFVRCh4KQkoVUFSVF9DTEsgLyAoMTYgKiAoeCkpKQorCisvKiBSVEMgcmVnaXN0ZXIgZGVmaW5pdGlvbiAqLworI2RlZmluZSBSVENfU0VDT05EUyAgICAgICAgICAgICAwCisjZGVmaW5lIFJUQ19TRUNPTkRTX0FMQVJNICAgICAgIDEKKyNkZWZpbmUgUlRDX01JTlVURVMgICAgICAgICAgICAgMgorI2RlZmluZSBSVENfTUlOVVRFU19BTEFSTSAgICAgICAzCisjZGVmaW5lIFJUQ19IT1VSUyAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgUlRDX0hPVVJTX0FMQVJNICAgICAgICAgNQorI2RlZmluZSBSVENfREFZX09GX1dFRUsgICAgICAgICA2CisjZGVmaW5lIFJUQ19EQVlfT0ZfTU9OVEggICAgICAgIDcKKyNkZWZpbmUgUlRDX01PTlRIICAgICAgICAgICAgICAgOAorI2RlZmluZSBSVENfWUVBUiAgICAgICAgICAgICAgICA5CisjZGVmaW5lIFJUQ19GUkVRX1NFTEVDVAkJMTAKKyMgZGVmaW5lIFJUQ19VSVAgMHg4MAorIyBkZWZpbmUgUlRDX0RJVl9DVEwgMHg3MAorLyogVGhpcyBSVEMgY2FuIHdvcmsgdW5kZXIgMzIuNzY4S0h6IGNsb2NrIG9ubHkuICAqLworIyBkZWZpbmUgUlRDX09TQ19FTkFCTEUgMHgyMAorIyBkZWZpbmUgUlRDX09TQ19ESVNBQkxFIDB4MDAKKyNkZWZpbmUgUlRDX0NPTlRST0wgICAgIAkxMQorIyBkZWZpbmUgUlRDX1NFVCAweDgwCisjIGRlZmluZSBSVENfUElFIDB4NDAKKyMgZGVmaW5lIFJUQ19BSUUgMHgyMAorIyBkZWZpbmUgUlRDX1VJRSAweDEwCisjIGRlZmluZSBSVENfU1FXRSAweDA4CisjIGRlZmluZSBSVENfRE1fQklOQVJZIDB4MDQKKyMgZGVmaW5lIFJUQ18yNEggMHgwMgorIyBkZWZpbmUgUlRDX0RTVF9FTiAweDAxCisKKyNlbmRpZiAgLyogX19BU01fU0hfU01DMzdDOTNYX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL3NlNzMwMC9pby5oIGIvaW5jbHVkZS9hc20tc2gvc2U3MzAwL2lvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZhZjg1NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL3NlNzMwMC9pby5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1zaC9zZTczMDAvaW8uaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMyBUYWthc2hpIEt1c3VkYSA8a3VzdWRhLXRha2FzaGlAaGl0YWNoaS11bC5jby5qcD4KKyAqIElPIGZ1bmN0aW9ucyBmb3IgU0gtTW9iaWxlKFNINzMwMCkgU29sdXRpb25FbmdpbmUKKyAqLworCisjaWZuZGVmIF9BU01fU0hfSU9fNzMwMFNFX0gKKyNkZWZpbmUgX0FTTV9TSF9JT183MzAwU0VfSAorCitleHRlcm4gdW5zaWduZWQgY2hhciBzaDczMDBzZV9pbmIodW5zaWduZWQgbG9uZyBwb3J0KTsKK2V4dGVybiB1bnNpZ25lZCBzaG9ydCBzaDczMDBzZV9pbncodW5zaWduZWQgbG9uZyBwb3J0KTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgc2g3MzAwc2VfaW5sKHVuc2lnbmVkIGxvbmcgcG9ydCk7CisKK2V4dGVybiB2b2lkIHNoNzMwMHNlX291dGIodW5zaWduZWQgY2hhciB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KTsKK2V4dGVybiB2b2lkIHNoNzMwMHNlX291dHcodW5zaWduZWQgc2hvcnQgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCk7CitleHRlcm4gdm9pZCBzaDczMDBzZV9vdXRsKHVuc2lnbmVkIGludCB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KTsKKworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgc2g3MzAwc2VfaW5iX3AodW5zaWduZWQgbG9uZyBwb3J0KTsKK2V4dGVybiB2b2lkIHNoNzMwMHNlX291dGJfcCh1bnNpZ25lZCBjaGFyIHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpOworCitleHRlcm4gdm9pZCBzaDczMDBzZV9pbnNiKHVuc2lnbmVkIGxvbmcgcG9ydCwgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCk7CitleHRlcm4gdm9pZCBzaDczMDBzZV9pbnN3KHVuc2lnbmVkIGxvbmcgcG9ydCwgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCk7CitleHRlcm4gdm9pZCBzaDczMDBzZV9pbnNsKHVuc2lnbmVkIGxvbmcgcG9ydCwgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCk7CitleHRlcm4gdm9pZCBzaDczMDBzZV9vdXRzYih1bnNpZ25lZCBsb25nIHBvcnQsIGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpOworZXh0ZXJuIHZvaWQgc2g3MzAwc2Vfb3V0c3codW5zaWduZWQgbG9uZyBwb3J0LCBjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKK2V4dGVybiB2b2lkIHNoNzMwMHNlX291dHNsKHVuc2lnbmVkIGxvbmcgcG9ydCwgY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCk7CisKKyNlbmRpZiAvKiBfQVNNX1NIX0lPXzczMDBTRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9zZTczMDAvc2U3MzAwLmggYi9pbmNsdWRlL2FzbS1zaC9zZTczMDAvc2U3MzAwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VjMWRlZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL3NlNzMwMC9zZTczMDAuaApAQCAtMCwwICsxLDYxIEBACisjaWZuZGVmIF9fQVNNX1NIX0hJVEFDSElfU0U3MzAwX0gKKyNkZWZpbmUgX19BU01fU0hfSElUQUNISV9TRTczMDBfSAorCisvKgorICogbGludXgvaW5jbHVkZS9hc20tc2gvc2Uvc2U3MzAwLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgVGFrYXNoaSBLdXN1ZGEgPGt1c3VkYS10YWthc2hpQGhpdGFjaGktdWwuY28uanA+CisgKgorICogU0gtTW9iaWxlIFNvbHV0aW9uRW5naW5lIDczMDAgc3VwcG9ydAorICovCisKKy8qIEJveCBzcGVjaWZpYyBhZGRyZXNzZXMuICAqLworCisvKiBBcmVhIDAgKi8KKyNkZWZpbmUgUEFfUk9NCQkweDAwMDAwMDAwCS8qIEVQUk9NICovCisjZGVmaW5lIFBBX1JPTV9TSVpFCTB4MDA0MDAwMDAJLyogRVBST00gc2l6ZSA0TSBieXRlKEFjdHVhbGx5IDJNQikgKi8KKyNkZWZpbmUgUEFfRlJPTQkJMHgwMDQwMDAwMAkvKiBGbGFzaCBST00gKi8KKyNkZWZpbmUgUEFfRlJPTV9TSVpFCTB4MDA0MDAwMDAJLyogRmxhc2ggc2l6ZSA0TSBieXRlICovCisjZGVmaW5lIFBBX1NSQU0JCTB4MDA4MDAwMDAJLyogU1JBTSAqLworI2RlZmluZSBQQV9GUk9NX1NJWkUJMHgwMDQwMDAwMAkvKiBTUkFNIHNpemUgNE0gYnl0ZSAqLworLyogQXJlYSAxICovCisjZGVmaW5lIFBBX0VYVDEJCTB4MDQwMDAwMDAKKyNkZWZpbmUgUEFfRVhUMV9TSVpFCTB4MDQwMDAwMDAKKy8qIEFyZWEgMiAqLworI2RlZmluZSBQQV9FWFQyCQkweDA4MDAwMDAwCisjZGVmaW5lIFBBX0VYVDJfU0laRQkweDA0MDAwMDAwCisvKiBBcmVhIDMgKi8KKyNkZWZpbmUgUEFfU0RSQU0JMHgwYzAwMDAwMAorI2RlZmluZSBQQV9TRFJBTV9TSVpFCTB4MDQwMDAwMDAKKy8qIEFyZWEgNCAqLworI2RlZmluZSBQQV9QQ0lDCQkweDEwMDAwMDAwCS8qIE1SLVNIUEMtMDEgUENNQ0lBICovCisjZGVmaW5lIFBBX01SU0hQQyAgICAgICAweGIwM2ZmZmUwICAgICAgLyogTVItU0hQQy0wMSBQQ01DSUEgY29udHJvbGxlciAqLworI2RlZmluZSBQQV9NUlNIUENfTVcxICAgMHhiMDQwMDAwMCAgICAgIC8qIE1SLVNIUEMtMDEgbWVtb3J5IHdpbmRvdyBiYXNlICovCisjZGVmaW5lIFBBX01SU0hQQ19NVzIgICAweGIwNTAwMDAwICAgICAgLyogTVItU0hQQy0wMSBhdHRyaWJ1dGUgd2luZG93IGJhc2UgKi8KKyNkZWZpbmUgUEFfTVJTSFBDX0lPICAgIDB4YjA2MDAwMDAgICAgICAvKiBNUi1TSFBDLTAxIEkvTyB3aW5kb3cgYmFzZSAqLworI2RlZmluZSBNUlNIUENfT1BUSU9OICAgKFBBX01SU0hQQyArIDYpCisjZGVmaW5lIE1SU0hQQ19DU1IgICAgICAoUEFfTVJTSFBDICsgOCkKKyNkZWZpbmUgTVJTSFBDX0lTUiAgICAgIChQQV9NUlNIUEMgKyAxMCkKKyNkZWZpbmUgTVJTSFBDX0lDUiAgICAgIChQQV9NUlNIUEMgKyAxMikKKyNkZWZpbmUgTVJTSFBDX0NQV0NSICAgIChQQV9NUlNIUEMgKyAxNCkKKyNkZWZpbmUgTVJTSFBDX01XMENSMSAgIChQQV9NUlNIUEMgKyAxNikKKyNkZWZpbmUgTVJTSFBDX01XMUNSMSAgIChQQV9NUlNIUEMgKyAxOCkKKyNkZWZpbmUgTVJTSFBDX0lPV0NSMSAgIChQQV9NUlNIUEMgKyAyMCkKKyNkZWZpbmUgTVJTSFBDX01XMENSMiAgIChQQV9NUlNIUEMgKyAyMikKKyNkZWZpbmUgTVJTSFBDX01XMUNSMiAgIChQQV9NUlNIUEMgKyAyNCkKKyNkZWZpbmUgTVJTSFBDX0lPV0NSMiAgIChQQV9NUlNIUEMgKyAyNikKKyNkZWZpbmUgTVJTSFBDX0NEQ1IgICAgIChQQV9NUlNIUEMgKyAyOCkKKyNkZWZpbmUgTVJTSFBDX1BDSUNfSU5GTyAoUEFfTVJTSFBDICsgMzApCisjZGVmaW5lIFBBX0xFRAkJMHhiMDgwMDAwMAkvKiBMRUQgKi8KKyNkZWZpbmUgUEFfRElQU1cJMHhiMDkwMDAwMAkvKiBEaXAgc3dpdGNoIDMxICovCisjZGVmaW5lIFBBX0VQTERfTU9ERVNFVAkweGIwYTAwMDAwCS8qIEZQR0EgTW9kZSBzZXQgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUEFfRVBMRF9TVDEJMHhiMGE4MDAwMAkvKiBGUEdBIEludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIxICovCisjZGVmaW5lIFBBX0VQTERfU1QyCTB4YjBhYzAwMDAJLyogRlBHQSBJbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyMiAqLworLyogQXJlYSA1ICovCisjZGVmaW5lIFBBX0VYVDUJCTB4MTQwMDAwMDAKKyNkZWZpbmUgUEFfRVhUNV9TSVpFCTB4MDQwMDAwMDAKKy8qIEFyZWEgNiAqLworI2RlZmluZSBQQV9MQ0QxCQkweGI4MDAwMDAwCisjZGVmaW5lIFBBX0xDRDIJCTB4Yjg4MDAwMDAKKworI2VuZGlmICAvKiBfX0FTTV9TSF9ISVRBQ0hJX1NFNzMwMF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9zZTczMTgwL2lvLmggYi9pbmNsdWRlL2FzbS1zaC9zZTczMTgwL2lvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzljYjFiOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL3NlNzMxODAvaW8uaApAQCAtMCwwICsxLDMyIEBACisvKgorICogaW5jbHVkZS9hc20tc2gvc2U3MzE4MC9pby5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzIFRha2FzaGkgS3VzdWRhIDxrdXN1ZGEtdGFrYXNoaUBoaXRhY2hpLXVsLmNvLmpwPgorICogQmFzZWQgb24gaW5jbHVkZS9hc20tc2gvc2U3MzAwL2lvLmgKKyAqCisgKiBJTyBmdW5jdGlvbnMgZm9yIFNILU1vYmlsZTMoU0g3MzE4MCkgU29sdXRpb25FbmdpbmUKKyAqCisgKi8KKworI2lmbmRlZiBfQVNNX1NIX0lPXzczMTgwU0VfSAorI2RlZmluZSBfQVNNX1NIX0lPXzczMTgwU0VfSAorCitleHRlcm4gdW5zaWduZWQgY2hhciBzaDczMTgwc2VfaW5iKHVuc2lnbmVkIGxvbmcgcG9ydCk7CitleHRlcm4gdW5zaWduZWQgc2hvcnQgc2g3MzE4MHNlX2ludyh1bnNpZ25lZCBsb25nIHBvcnQpOworZXh0ZXJuIHVuc2lnbmVkIGludCBzaDczMTgwc2VfaW5sKHVuc2lnbmVkIGxvbmcgcG9ydCk7CisKK2V4dGVybiB2b2lkIHNoNzMxODBzZV9vdXRiKHVuc2lnbmVkIGNoYXIgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCk7CitleHRlcm4gdm9pZCBzaDczMTgwc2Vfb3V0dyh1bnNpZ25lZCBzaG9ydCB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KTsKK2V4dGVybiB2b2lkIHNoNzMxODBzZV9vdXRsKHVuc2lnbmVkIGludCB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KTsKKworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgc2g3MzE4MHNlX2luYl9wKHVuc2lnbmVkIGxvbmcgcG9ydCk7CitleHRlcm4gdm9pZCBzaDczMTgwc2Vfb3V0Yl9wKHVuc2lnbmVkIGNoYXIgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCk7CisKK2V4dGVybiB2b2lkIHNoNzMxODBzZV9pbnNiKHVuc2lnbmVkIGxvbmcgcG9ydCwgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCk7CitleHRlcm4gdm9pZCBzaDczMTgwc2VfaW5zdyh1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpOworZXh0ZXJuIHZvaWQgc2g3MzE4MHNlX2luc2wodW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKK2V4dGVybiB2b2lkIHNoNzMxODBzZV9vdXRzYih1bnNpZ25lZCBsb25nIHBvcnQsIGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpOworZXh0ZXJuIHZvaWQgc2g3MzE4MHNlX291dHN3KHVuc2lnbmVkIGxvbmcgcG9ydCwgY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCk7CitleHRlcm4gdm9pZCBzaDczMTgwc2Vfb3V0c2wodW5zaWduZWQgbG9uZyBwb3J0LCBjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKKworI2VuZGlmIC8qIF9BU01fU0hfSU9fNzMxODBTRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9zZTczMTgwL3NlNzMxODAuaCBiL2luY2x1ZGUvYXNtLXNoL3NlNzMxODAvc2U3MzE4MC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1YjkzZTMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9zZTczMTgwL3NlNzMxODAuaApAQCAtMCwwICsxLDYyIEBACisjaWZuZGVmIF9fQVNNX1NIX0hJVEFDSElfU0U3MzE4MF9ICisjZGVmaW5lIF9fQVNNX1NIX0hJVEFDSElfU0U3MzE4MF9ICisKKy8qCisgKiBpbmNsdWRlL2FzbS1zaC9zZS9zZTczMTgwLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgVGFrYXNoaSBLdXN1ZGEgPGt1c3VkYS10YWthc2hpQGhpdGFjaGktdWwuY28uanA+CisgKgorICogU0gtTW9iaWxlIFNvbHV0aW9uRW5naW5lIDczMTgwIHN1cHBvcnQKKyAqLworCisvKiBCb3ggc3BlY2lmaWMgYWRkcmVzc2VzLiAgKi8KKworLyogQXJlYSAwICovCisjZGVmaW5lIFBBX1JPTQkJMHgwMDAwMDAwMAkvKiBFUFJPTSAqLworI2RlZmluZSBQQV9ST01fU0laRQkweDAwNDAwMDAwCS8qIEVQUk9NIHNpemUgNE0gYnl0ZShBY3R1YWxseSAyTUIpICovCisjZGVmaW5lIFBBX0ZST00JCTB4MDA0MDAwMDAJLyogRmxhc2ggUk9NICovCisjZGVmaW5lIFBBX0ZST01fU0laRQkweDAwNDAwMDAwCS8qIEZsYXNoIHNpemUgNE0gYnl0ZSAqLworI2RlZmluZSBQQV9TUkFNCQkweDAwODAwMDAwCS8qIFNSQU0gKi8KKyNkZWZpbmUgUEFfRlJPTV9TSVpFCTB4MDA0MDAwMDAJLyogU1JBTSBzaXplIDRNIGJ5dGUgKi8KKy8qIEFyZWEgMSAqLworI2RlZmluZSBQQV9FWFQxCQkweDA0MDAwMDAwCisjZGVmaW5lIFBBX0VYVDFfU0laRQkweDA0MDAwMDAwCisvKiBBcmVhIDIgKi8KKyNkZWZpbmUgUEFfRVhUMgkJMHgwODAwMDAwMAorI2RlZmluZSBQQV9FWFQyX1NJWkUJMHgwNDAwMDAwMAorLyogQXJlYSAzICovCisjZGVmaW5lIFBBX1NEUkFNCTB4MGMwMDAwMDAKKyNkZWZpbmUgUEFfU0RSQU1fU0laRQkweDA0MDAwMDAwCisvKiBBcmVhIDQgKi8KKyNkZWZpbmUgUEFfUENJQwkJMHgxMDAwMDAwMAkvKiBNUi1TSFBDLTAxIFBDTUNJQSAqLworI2RlZmluZSBQQV9NUlNIUEMgICAgICAgMHhiMDNmZmZlMCAgICAgIC8qIE1SLVNIUEMtMDEgUENNQ0lBIGNvbnRyb2xsZXIgKi8KKyNkZWZpbmUgUEFfTVJTSFBDX01XMSAgIDB4YjA0MDAwMDAgICAgICAvKiBNUi1TSFBDLTAxIG1lbW9yeSB3aW5kb3cgYmFzZSAqLworI2RlZmluZSBQQV9NUlNIUENfTVcyICAgMHhiMDUwMDAwMCAgICAgIC8qIE1SLVNIUEMtMDEgYXR0cmlidXRlIHdpbmRvdyBiYXNlICovCisjZGVmaW5lIFBBX01SU0hQQ19JTyAgICAweGIwNjAwMDAwICAgICAgLyogTVItU0hQQy0wMSBJL08gd2luZG93IGJhc2UgKi8KKyNkZWZpbmUgTVJTSFBDX09QVElPTiAgIChQQV9NUlNIUEMgKyA2KQorI2RlZmluZSBNUlNIUENfQ1NSICAgICAgKFBBX01SU0hQQyArIDgpCisjZGVmaW5lIE1SU0hQQ19JU1IgICAgICAoUEFfTVJTSFBDICsgMTApCisjZGVmaW5lIE1SU0hQQ19JQ1IgICAgICAoUEFfTVJTSFBDICsgMTIpCisjZGVmaW5lIE1SU0hQQ19DUFdDUiAgICAoUEFfTVJTSFBDICsgMTQpCisjZGVmaW5lIE1SU0hQQ19NVzBDUjEgICAoUEFfTVJTSFBDICsgMTYpCisjZGVmaW5lIE1SU0hQQ19NVzFDUjEgICAoUEFfTVJTSFBDICsgMTgpCisjZGVmaW5lIE1SU0hQQ19JT1dDUjEgICAoUEFfTVJTSFBDICsgMjApCisjZGVmaW5lIE1SU0hQQ19NVzBDUjIgICAoUEFfTVJTSFBDICsgMjIpCisjZGVmaW5lIE1SU0hQQ19NVzFDUjIgICAoUEFfTVJTSFBDICsgMjQpCisjZGVmaW5lIE1SU0hQQ19JT1dDUjIgICAoUEFfTVJTSFBDICsgMjYpCisjZGVmaW5lIE1SU0hQQ19DRENSICAgICAoUEFfTVJTSFBDICsgMjgpCisjZGVmaW5lIE1SU0hQQ19QQ0lDX0lORk8gKFBBX01SU0hQQyArIDMwKQorI2RlZmluZSBQQV9MRUQJCTB4YjBDMDAwMDAJLyogTEVEICovCisjZGVmaW5lIExFRF9TSElGVCAgICAgICAwCisjZGVmaW5lIFBBX0RJUFNXCTB4YjA5MDAwMDAJLyogRGlwIHN3aXRjaCAzMSAqLworI2RlZmluZSBQQV9FUExEX01PREVTRVQJMHhiMGEwMDAwMAkvKiBGUEdBIE1vZGUgc2V0IHJlZ2lzdGVyICovCisjZGVmaW5lIFBBX0VQTERfU1QxCTB4YjBhODAwMDAJLyogRlBHQSBJbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyMSAqLworI2RlZmluZSBQQV9FUExEX1NUMgkweGIwYWMwMDAwCS8qIEZQR0EgSW50ZXJydXB0IHN0YXR1cyByZWdpc3RlcjIgKi8KKy8qIEFyZWEgNSAqLworI2RlZmluZSBQQV9FWFQ1CQkweDE0MDAwMDAwCisjZGVmaW5lIFBBX0VYVDVfU0laRQkweDA0MDAwMDAwCisvKiBBcmVhIDYgKi8KKyNkZWZpbmUgUEFfTENEMQkJMHhiODAwMDAwMAorI2RlZmluZSBQQV9MQ0QyCQkweGI4ODAwMDAwCisKKyNlbmRpZiAgLyogX19BU01fU0hfSElUQUNISV9TRTczMTgwX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL3NlNzc1MS9pby5oIGIvaW5jbHVkZS9hc20tc2gvc2U3NzUxL2lvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhkOGY1NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL3NlNzc1MS9pby5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1zaC9pb183NzUxc2UuaAorICoKKyAqIE1vZGlmaWVkIHZlcnNpb24gb2YgaW9fc2UuaCBmb3IgdGhlIDc3NTFzZS1zcGVjaWZpYyBmdW5jdGlvbnMuCisgKgorICogTWF5IGJlIGNvcGllZCBvciBtb2RpZmllZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSBsaW51eC9DT1BZSU5HIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICoKKyAqIElPIGZ1bmN0aW9ucyBmb3IgYW4gSGl0YWNoaSBTb2x1dGlvbkVuZ2luZQorICovCisKKyNpZm5kZWYgX0FTTV9TSF9JT183NzUxU0VfSAorI2RlZmluZSBfQVNNX1NIX0lPXzc3NTFTRV9ICisKK2V4dGVybiB1bnNpZ25lZCBjaGFyIHNoNzc1MXNlX2luYih1bnNpZ25lZCBsb25nIHBvcnQpOworZXh0ZXJuIHVuc2lnbmVkIHNob3J0IHNoNzc1MXNlX2ludyh1bnNpZ25lZCBsb25nIHBvcnQpOworZXh0ZXJuIHVuc2lnbmVkIGludCBzaDc3NTFzZV9pbmwodW5zaWduZWQgbG9uZyBwb3J0KTsKKworZXh0ZXJuIHZvaWQgc2g3NzUxc2Vfb3V0Yih1bnNpZ25lZCBjaGFyIHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpOworZXh0ZXJuIHZvaWQgc2g3NzUxc2Vfb3V0dyh1bnNpZ25lZCBzaG9ydCB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KTsKK2V4dGVybiB2b2lkIHNoNzc1MXNlX291dGwodW5zaWduZWQgaW50IHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpOworCitleHRlcm4gdW5zaWduZWQgY2hhciBzaDc3NTFzZV9pbmJfcCh1bnNpZ25lZCBsb25nIHBvcnQpOworZXh0ZXJuIHZvaWQgc2g3NzUxc2Vfb3V0Yl9wKHVuc2lnbmVkIGNoYXIgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCk7CisKK2V4dGVybiB2b2lkIHNoNzc1MXNlX2luc2IodW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKK2V4dGVybiB2b2lkIHNoNzc1MXNlX2luc3codW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKK2V4dGVybiB2b2lkIHNoNzc1MXNlX2luc2wodW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKK2V4dGVybiB2b2lkIHNoNzc1MXNlX291dHNiKHVuc2lnbmVkIGxvbmcgcG9ydCwgY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCk7CitleHRlcm4gdm9pZCBzaDc3NTFzZV9vdXRzdyh1bnNpZ25lZCBsb25nIHBvcnQsIGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpOworZXh0ZXJuIHZvaWQgc2g3NzUxc2Vfb3V0c2wodW5zaWduZWQgbG9uZyBwb3J0LCBjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKKworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgc2g3NzUxc2VfcmVhZGIodW5zaWduZWQgbG9uZyBhZGRyKTsKK2V4dGVybiB1bnNpZ25lZCBzaG9ydCBzaDc3NTFzZV9yZWFkdyh1bnNpZ25lZCBsb25nIGFkZHIpOworZXh0ZXJuIHVuc2lnbmVkIGludCBzaDc3NTFzZV9yZWFkbCh1bnNpZ25lZCBsb25nIGFkZHIpOworZXh0ZXJuIHZvaWQgc2g3NzUxc2Vfd3JpdGViKHVuc2lnbmVkIGNoYXIgYiwgdW5zaWduZWQgbG9uZyBhZGRyKTsKK2V4dGVybiB2b2lkIHNoNzc1MXNlX3dyaXRldyh1bnNpZ25lZCBzaG9ydCBiLCB1bnNpZ25lZCBsb25nIGFkZHIpOworZXh0ZXJuIHZvaWQgc2g3NzUxc2Vfd3JpdGVsKHVuc2lnbmVkIGludCBiLCB1bnNpZ25lZCBsb25nIGFkZHIpOworCitleHRlcm4gdW5zaWduZWQgbG9uZyBzaDc3NTFzZV9pc2FfcG9ydDJhZGRyKHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKKworI2VuZGlmIC8qIF9BU01fU0hfSU9fNzc1MVNFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL3NlNzc1MS9zZTc3NTEuaCBiL2luY2x1ZGUvYXNtLXNoL3NlNzc1MS9zZTc3NTEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzhlMjJiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvc2U3NzUxL3NlNzc1MS5oCkBAIC0wLDAgKzEsNjggQEAKKyNpZm5kZWYgX19BU01fU0hfSElUQUNISV83NzUxU0VfSAorI2RlZmluZSBfX0FTTV9TSF9ISVRBQ0hJXzc3NTFTRV9ICisKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1zaC9oaXRhY2hpXzc3NTFzZS5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwICBLYXp1bW90byBLb2ppbWEKKyAqCisgKiBIaXRhY2hpIFNvbHV0aW9uRW5naW5lIHN1cHBvcnQKKworICogTW9kaWZpZWQgZm9yIDc3NTEgU29sdXRpb24gRW5naW5lIGJ5CisgKiBJYW4gZGEgU2lsdmEgYW5kIEplcmVteSBTaWVnZWwsIDIwMDEuCisgKi8KKworLyogQm94IHNwZWNpZmljIGFkZHJlc3Nlcy4gICovCisKKyNkZWZpbmUgUEFfUk9NCQkweDAwMDAwMDAwCS8qIEVQUk9NICovCisjZGVmaW5lIFBBX1JPTV9TSVpFCTB4MDA0MDAwMDAJLyogRVBST00gc2l6ZSA0TSBieXRlICovCisjZGVmaW5lIFBBX0ZST00JCTB4MDEwMDAwMDAJLyogRVBST00gKi8KKyNkZWZpbmUgUEFfRlJPTV9TSVpFCTB4MDA0MDAwMDAJLyogRVBST00gc2l6ZSA0TSBieXRlICovCisjZGVmaW5lIFBBX0VYVDEJCTB4MDQwMDAwMDAKKyNkZWZpbmUgUEFfRVhUMV9TSVpFCTB4MDQwMDAwMDAKKyNkZWZpbmUgUEFfRVhUMgkJMHgwODAwMDAwMAorI2RlZmluZSBQQV9FWFQyX1NJWkUJMHgwNDAwMDAwMAorI2RlZmluZSBQQV9TRFJBTQkweDBjMDAwMDAwCisjZGVmaW5lIFBBX1NEUkFNX1NJWkUJMHgwNDAwMDAwMAorCisjZGVmaW5lIFBBX0VYVDQJCTB4MTIwMDAwMDAKKyNkZWZpbmUgUEFfRVhUNF9TSVpFCTB4MDIwMDAwMDAKKyNkZWZpbmUgUEFfRVhUNQkJMHgxNDAwMDAwMAorI2RlZmluZSBQQV9FWFQ1X1NJWkUJMHgwNDAwMDAwMAorI2RlZmluZSBQQV9QQ0lDCQkweDE4MDAwMDAwCS8qIE1SLVNIUEMtMDEgUENNQ0lBICovCisKKyNkZWZpbmUgUEFfRElQU1cwCTB4YjkwMDAwMDAJLyogRGlwIHN3aXRjaCA1LDYgKi8KKyNkZWZpbmUgUEFfRElQU1cxCTB4YjkwMDAwMDIJLyogRGlwIHN3aXRjaCA3LDggKi8KKyNkZWZpbmUgUEFfTEVECQkweGJhMDAwMDAwCS8qIExFRCAqLworI2RlZmluZQlQQV9CQ1IJCTB4YmIwMDAwMDAJLyogRlBHQSBvbiB0aGUgTVM3NzUxU0UwMSAqLworCisjZGVmaW5lIFBBX01SU0hQQwkweGI4M2ZmZmUwCS8qIE1SLVNIUEMtMDEgUENNQ0lBIGNvbnRyb2xlciAqLworI2RlZmluZSBQQV9NUlNIUENfTVcxCTB4Yjg0MDAwMDAJLyogTVItU0hQQy0wMSBtZW1vcnkgd2luZG93IGJhc2UgKi8KKyNkZWZpbmUgUEFfTVJTSFBDX01XMgkweGI4NTAwMDAwCS8qIE1SLVNIUEMtMDEgYXR0cmlidXRlIHdpbmRvdyBiYXNlICovCisjZGVmaW5lIFBBX01SU0hQQ19JTwkweGI4NjAwMDAwCS8qIE1SLVNIUEMtMDEgSS9PIHdpbmRvdyBiYXNlICovCisjZGVmaW5lIE1SU0hQQ19NT0RFICAgICAoUEFfTVJTSFBDICsgNCkKKyNkZWZpbmUgTVJTSFBDX09QVElPTiAgIChQQV9NUlNIUEMgKyA2KQorI2RlZmluZSBNUlNIUENfQ1NSICAgICAgKFBBX01SU0hQQyArIDgpCisjZGVmaW5lIE1SU0hQQ19JU1IgICAgICAoUEFfTVJTSFBDICsgMTApCisjZGVmaW5lIE1SU0hQQ19JQ1IgICAgICAoUEFfTVJTSFBDICsgMTIpCisjZGVmaW5lIE1SU0hQQ19DUFdDUiAgICAoUEFfTVJTSFBDICsgMTQpCisjZGVmaW5lIE1SU0hQQ19NVzBDUjEgICAoUEFfTVJTSFBDICsgMTYpCisjZGVmaW5lIE1SU0hQQ19NVzFDUjEgICAoUEFfTVJTSFBDICsgMTgpCisjZGVmaW5lIE1SU0hQQ19JT1dDUjEgICAoUEFfTVJTSFBDICsgMjApCisjZGVmaW5lIE1SU0hQQ19NVzBDUjIgICAoUEFfTVJTSFBDICsgMjIpCisjZGVmaW5lIE1SU0hQQ19NVzFDUjIgICAoUEFfTVJTSFBDICsgMjQpCisjZGVmaW5lIE1SU0hQQ19JT1dDUjIgICAoUEFfTVJTSFBDICsgMjYpCisjZGVmaW5lIE1SU0hQQ19DRENSICAgICAoUEFfTVJTSFBDICsgMjgpCisjZGVmaW5lIE1SU0hQQ19QQ0lDX0lORk8gKFBBX01SU0hQQyArIDMwKQorCisjZGVmaW5lIEJDUl9JTENSQQkoUEFfQkNSICsgMCkKKyNkZWZpbmUgQkNSX0lMQ1JCCShQQV9CQ1IgKyAyKQorI2RlZmluZSBCQ1JfSUxDUkMJKFBBX0JDUiArIDQpCisjZGVmaW5lIEJDUl9JTENSRAkoUEFfQkNSICsgNikKKyNkZWZpbmUgQkNSX0lMQ1JFCShQQV9CQ1IgKyA4KQorI2RlZmluZSBCQ1JfSUxDUkYJKFBBX0JDUiArIDEwKQorI2RlZmluZSBCQ1JfSUxDUkcJKFBBX0JDUiArIDEyKQorCisjZGVmaW5lIElSUV83OUM5NzMJMTMKKworI2VuZGlmICAvKiBfX0FTTV9TSF9ISVRBQ0hJXzc3NTFTRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9zZWN0aW9ucy5oIGIvaW5jbHVkZS9hc20tc2gvc2VjdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2FiZDcwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvc2VjdGlvbnMuaApAQCAtMCwwICsxLDkgQEAKKyNpZm5kZWYgX19BU01fU0hfU0VDVElPTlNfSAorI2RlZmluZSBfX0FTTV9TSF9TRUNUSU9OU19ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zZWN0aW9ucy5oPgorCitleHRlcm4gY2hhciBfZW5kW107CisKKyNlbmRpZiAvKiBfX0FTTV9TSF9TRUNUSU9OU19IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL3NlZ21lbnQuaCBiL2luY2x1ZGUvYXNtLXNoL3NlZ21lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDE3ZWFiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvc2VnbWVudC5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfX0FTTV9TSF9TRUdNRU5UX0gKKyNkZWZpbmUgX19BU01fU0hfU0VHTUVOVF9ICisKKy8qIE9ubHkgaGVyZSBiZWNhdXNlIHdlIGhhdmUgc29tZSBvbGQgaGVhZGVyIGZpbGVzIHRoYXQgZXhwZWN0IGl0Li4gKi8KKworI2VuZGlmIC8qIF9fQVNNX1NIX1NFR01FTlRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvc2VtYXBob3JlLWhlbHBlci5oIGIvaW5jbHVkZS9hc20tc2gvc2VtYXBob3JlLWhlbHBlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkODIzMGMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9zZW1hcGhvcmUtaGVscGVyLmgKQEAgLTAsMCArMSw4OSBAQAorI2lmbmRlZiBfX0FTTV9TSF9TRU1BUEhPUkVfSEVMUEVSX0gKKyNkZWZpbmUgX19BU01fU0hfU0VNQVBIT1JFX0hFTFBFUl9ICisKKy8qCisgKiBTTVAtIGFuZCBpbnRlcnJ1cHQtc2FmZSBzZW1hcGhvcmVzIGhlbHBlciBmdW5jdGlvbnMuCisgKgorICogKEMpIENvcHlyaWdodCAxOTk2IExpbnVzIFRvcnZhbGRzCisgKiAoQykgQ29weXJpZ2h0IDE5OTkgQW5kcmVhIEFyY2FuZ2VsaQorICovCisKKy8qCisgKiBUaGVzZSB0d28gX211c3RfIGV4ZWN1dGUgYXRvbWljYWxseSB3cnQgZWFjaCBvdGhlci4KKyAqCisgKiBUaGlzIGlzIHRyaXZpYWxseSBkb25lIHdpdGggbG9hZF9sb2NrZWQvc3RvcmVfY29uZCwKKyAqIHdoaWNoIHdlIGhhdmUuICBMZXQgdGhlIHJlc3Qgb2YgdGhlIGxvc2VycyBzdWNrIGVnZ3MuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgd2FrZV9vbmVfbW9yZShzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQoreworCWF0b21pY19pbmMoKGF0b21pY190ICopJnNlbS0+c2xlZXBlcnMpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgd2FraW5nX25vbl96ZXJvKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNlbWFwaG9yZV93YWtlX2xvY2ssIGZsYWdzKTsKKwlpZiAoc2VtLT5zbGVlcGVycyA+IDApIHsKKwkJc2VtLT5zbGVlcGVycy0tOworCQlyZXQgPSAxOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZW1hcGhvcmVfd2FrZV9sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIHdha2luZ19ub25femVyb19pbnRlcnJ1cHRpYmxlOgorICoJMQlnb3QgdGhlIGxvY2sKKyAqCTAJZ28gdG8gc2xlZXAKKyAqCS1FSU5UUglpbnRlcnJ1cHRlZAorICoKKyAqIFdlIG11c3QgdW5kbyB0aGUgc2VtLT5jb3VudCBkb3duX2ludGVycnVwdGlibGUoKSBpbmNyZW1lbnQgd2hpbGUgd2UgYXJlCisgKiBwcm90ZWN0ZWQgYnkgdGhlIHNwaW5sb2NrIGluIG9yZGVyIHRvIG1ha2UgYXRvbWljIHRoaXMgYXRvbWljX2luYygpIHdpdGggdGhlCisgKiBhdG9taWNfcmVhZCgpIGluIHdha2Vfb25lX21vcmUoKSwgb3RoZXJ3aXNlIHdlIGNhbiByYWNlLiAtYXJjYQorICovCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgd2FraW5nX25vbl96ZXJvX2ludGVycnVwdGlibGUoc3RydWN0IHNlbWFwaG9yZSAqc2VtLAorCQkJCQkJc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzZW1hcGhvcmVfd2FrZV9sb2NrLCBmbGFncyk7CisJaWYgKHNlbS0+c2xlZXBlcnMgPiAwKSB7CisJCXNlbS0+c2xlZXBlcnMtLTsKKwkJcmV0ID0gMTsKKwl9IGVsc2UgaWYgKHNpZ25hbF9wZW5kaW5nKHRzaykpIHsKKwkJYXRvbWljX2luYygmc2VtLT5jb3VudCk7CisJCXJldCA9IC1FSU5UUjsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VtYXBob3JlX3dha2VfbG9jaywgZmxhZ3MpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiB3YWtpbmdfbm9uX3plcm9fdHJ5bG9jazoKKyAqCTEJZmFpbGVkIHRvIGxvY2sKKyAqCTAJZ290IHRoZSBsb2NrCisgKgorICogV2UgbXVzdCB1bmRvIHRoZSBzZW0tPmNvdW50IGRvd25fdHJ5bG9jaygpIGluY3JlbWVudCB3aGlsZSB3ZSBhcmUKKyAqIHByb3RlY3RlZCBieSB0aGUgc3BpbmxvY2sgaW4gb3JkZXIgdG8gbWFrZSBhdG9taWMgdGhpcyBhdG9taWNfaW5jKCkgd2l0aCB0aGUKKyAqIGF0b21pY19yZWFkKCkgaW4gd2FrZV9vbmVfbW9yZSgpLCBvdGhlcndpc2Ugd2UgY2FuIHJhY2UuIC1hcmNhCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIGludCB3YWtpbmdfbm9uX3plcm9fdHJ5bG9jayhzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gMTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzZW1hcGhvcmVfd2FrZV9sb2NrLCBmbGFncyk7CisJaWYgKHNlbS0+c2xlZXBlcnMgPD0gMCkKKwkJYXRvbWljX2luYygmc2VtLT5jb3VudCk7CisJZWxzZSB7CisJCXNlbS0+c2xlZXBlcnMtLTsKKwkJcmV0ID0gMDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VtYXBob3JlX3dha2VfbG9jaywgZmxhZ3MpOworCXJldHVybiByZXQ7Cit9CisKKyNlbmRpZiAvKiBfX0FTTV9TSF9TRU1BUEhPUkVfSEVMUEVSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL3NlbWFwaG9yZS5oIGIvaW5jbHVkZS9hc20tc2gvc2VtYXBob3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjkyM2E3NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL3NlbWFwaG9yZS5oCkBAIC0wLDAgKzEsMTE5IEBACisjaWZuZGVmIF9fQVNNX1NIX1NFTUFQSE9SRV9ICisjZGVmaW5lIF9fQVNNX1NIX1NFTUFQSE9SRV9ICisKKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisKKyNpZmRlZiBfX0tFUk5FTF9fCisvKgorICogU01QLSBhbmQgaW50ZXJydXB0LXNhZmUgc2VtYXBob3Jlcy4KKyAqCisgKiAoQykgQ29weXJpZ2h0IDE5OTYgTGludXMgVG9ydmFsZHMKKyAqCisgKiBTdXBlckggdmVyaXNvbiBieSBOaWliZSBZdXRha2EKKyAqICAoQ3VycmVudGx5IG5vIGFzbSBpbXBsZW1lbnRhdGlvbiBidXQgZ2VuZXJpYyBDIGNvZGUuLi4pCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisKKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorCitzdHJ1Y3Qgc2VtYXBob3JlIHsKKwlhdG9taWNfdCBjb3VudDsKKwlpbnQgc2xlZXBlcnM7CisJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKK307CisKKyNkZWZpbmUgX19TRU1BUEhPUkVfSU5JVElBTElaRVIobmFtZSwgbikJCQkJXAorewkJCQkJCQkJCVwKKwkuY291bnQJCT0gQVRPTUlDX0lOSVQobiksCQkJCVwKKwkuc2xlZXBlcnMJPSAwLAkJCQkJCVwKKwkud2FpdAkJPSBfX1dBSVRfUVVFVUVfSEVBRF9JTklUSUFMSVpFUigobmFtZSkud2FpdCkJXAorfQorCisjZGVmaW5lIF9fTVVURVhfSU5JVElBTElaRVIobmFtZSkgXAorCV9fU0VNQVBIT1JFX0lOSVRJQUxJWkVSKG5hbWUsMSkKKworI2RlZmluZSBfX0RFQ0xBUkVfU0VNQVBIT1JFX0dFTkVSSUMobmFtZSxjb3VudCkgXAorCXN0cnVjdCBzZW1hcGhvcmUgbmFtZSA9IF9fU0VNQVBIT1JFX0lOSVRJQUxJWkVSKG5hbWUsY291bnQpCisKKyNkZWZpbmUgREVDTEFSRV9NVVRFWChuYW1lKSBfX0RFQ0xBUkVfU0VNQVBIT1JFX0dFTkVSSUMobmFtZSwxKQorI2RlZmluZSBERUNMQVJFX01VVEVYX0xPQ0tFRChuYW1lKSBfX0RFQ0xBUkVfU0VNQVBIT1JFX0dFTkVSSUMobmFtZSwwKQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2VtYV9pbml0IChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0sIGludCB2YWwpCit7CisvKgorICoJKnNlbSA9IChzdHJ1Y3Qgc2VtYXBob3JlKV9fU0VNQVBIT1JFX0lOSVRJQUxJWkVSKCgqc2VtKSx2YWwpOworICoKKyAqIGknZCByYXRoZXIgdXNlIHRoZSBtb3JlIGZsZXhpYmxlIGluaXRpYWxpemF0aW9uIGFib3ZlLCBidXQgc2FkbHkKKyAqIEdDQyAyLjcuMi4zIGVtaXRzIGEgYm9ndXMgd2FybmluZy4gRUdDUyBkb2Vzbid0LiBPaCB3ZWxsLgorICovCisJYXRvbWljX3NldCgmc2VtLT5jb3VudCwgdmFsKTsKKwlzZW0tPnNsZWVwZXJzID0gMDsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzZW0tPndhaXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9NVVRFWCAoc3RydWN0IHNlbWFwaG9yZSAqc2VtKQoreworCXNlbWFfaW5pdChzZW0sIDEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9NVVRFWF9MT0NLRUQgKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKK3sKKwlzZW1hX2luaXQoc2VtLCAwKTsKK30KKworI2lmIDAKK2FzbWxpbmthZ2Ugdm9pZCBfX2Rvd25fZmFpbGVkKHZvaWQgLyogc3BlY2lhbCByZWdpc3RlciBjYWxsaW5nIGNvbnZlbnRpb24gKi8pOworYXNtbGlua2FnZSBpbnQgIF9fZG93bl9mYWlsZWRfaW50ZXJydXB0aWJsZSh2b2lkICAvKiBwYXJhbXMgaW4gcmVnaXN0ZXJzICovKTsKK2FzbWxpbmthZ2UgaW50ICBfX2Rvd25fZmFpbGVkX3RyeWxvY2sodm9pZCAgLyogcGFyYW1zIGluIHJlZ2lzdGVycyAqLyk7Cithc21saW5rYWdlIHZvaWQgX191cF93YWtldXAodm9pZCAvKiBzcGVjaWFsIHJlZ2lzdGVyIGNhbGxpbmcgY29udmVudGlvbiAqLyk7CisjZW5kaWYKKworYXNtbGlua2FnZSB2b2lkIF9fZG93bihzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKTsKK2FzbWxpbmthZ2UgaW50ICBfX2Rvd25faW50ZXJydXB0aWJsZShzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKTsKK2FzbWxpbmthZ2UgaW50ICBfX2Rvd25fdHJ5bG9jayhzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKTsKK2FzbWxpbmthZ2Ugdm9pZCBfX3VwKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pOworCitleHRlcm4gc3BpbmxvY2tfdCBzZW1hcGhvcmVfd2FrZV9sb2NrOworCitzdGF0aWMgaW5saW5lIHZvaWQgZG93bihzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQoreworCW1pZ2h0X3NsZWVwKCk7CisJaWYgKGF0b21pY19kZWNfcmV0dXJuKCZzZW0tPmNvdW50KSA8IDApCisJCV9fZG93bihzZW0pOworfQorCitzdGF0aWMgaW5saW5lIGludCBkb3duX2ludGVycnVwdGlibGUoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKK3sKKwlpbnQgcmV0ID0gMDsKKworCW1pZ2h0X3NsZWVwKCk7CisJaWYgKGF0b21pY19kZWNfcmV0dXJuKCZzZW0tPmNvdW50KSA8IDApCisJCXJldCA9IF9fZG93bl9pbnRlcnJ1cHRpYmxlKHNlbSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSBpbnQgZG93bl90cnlsb2NrKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCit7CisJaW50IHJldCA9IDA7CisKKwlpZiAoYXRvbWljX2RlY19yZXR1cm4oJnNlbS0+Y291bnQpIDwgMCkKKwkJcmV0ID0gX19kb3duX3RyeWxvY2soc2VtKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogTm90ZSEgVGhpcyBpcyBzdWJ0bGUuIFdlIGp1bXAgdG8gd2FrZSBwZW9wbGUgdXAgb25seSBpZgorICogdGhlIHNlbWFwaG9yZSB3YXMgbmVnYXRpdmUgKD09IHNvbWVib2R5IHdhcyB3YWl0aW5nIG9uIGl0KS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHVwKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCit7CisJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZzZW0tPmNvdW50KSA8PSAwKQorCQlfX3VwKHNlbSk7Cit9CisKKyNlbmRpZgorI2VuZGlmIC8qIF9fQVNNX1NIX1NFTUFQSE9SRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9zZW1idWYuaCBiL2luY2x1ZGUvYXNtLXNoL3NlbWJ1Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3OWYzYmQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9zZW1idWYuaApAQCAtMCwwICsxLDI1IEBACisjaWZuZGVmIF9fQVNNX1NIX1NFTUJVRl9ICisjZGVmaW5lIF9fQVNNX1NIX1NFTUJVRl9ICisKKy8qIAorICogVGhlIHNlbWlkNjRfZHMgc3RydWN0dXJlIGZvciBpMzg2IGFyY2hpdGVjdHVyZS4KKyAqIE5vdGUgZXh0cmEgcGFkZGluZyBiZWNhdXNlIHRoaXMgc3RydWN0dXJlIGlzIHBhc3NlZCBiYWNrIGFuZCBmb3J0aAorICogYmV0d2VlbiBrZXJuZWwgYW5kIHVzZXIgc3BhY2UuCisgKgorICogUGFkIHNwYWNlIGlzIGxlZnQgZm9yOgorICogLSA2NC1iaXQgdGltZV90IHRvIHNvbHZlIHkyMDM4IHByb2JsZW0KKyAqIC0gMiBtaXNjZWxsYW5lb3VzIDMyLWJpdCB2YWx1ZXMKKyAqLworCitzdHJ1Y3Qgc2VtaWQ2NF9kcyB7CisJc3RydWN0IGlwYzY0X3Blcm0gc2VtX3Blcm07CQkvKiBwZXJtaXNzaW9ucyAuLiBzZWUgaXBjLmggKi8KKwlfX2tlcm5lbF90aW1lX3QJc2VtX290aW1lOwkJLyogbGFzdCBzZW1vcCB0aW1lICovCisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDE7CisJX19rZXJuZWxfdGltZV90CXNlbV9jdGltZTsJCS8qIGxhc3QgY2hhbmdlIHRpbWUgKi8KKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkMjsKKwl1bnNpZ25lZCBsb25nCXNlbV9uc2VtczsJCS8qIG5vLiBvZiBzZW1hcGhvcmVzIGluIGFycmF5ICovCisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDM7CisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDQ7Cit9OworCisjZW5kaWYgLyogX19BU01fU0hfU0VNQlVGX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL3NlcmlhbC5oIGIvaW5jbHVkZS9hc20tc2gvc2VyaWFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ3NGRiZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL3NlcmlhbC5oCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1zaC9zZXJpYWwuaAorICoKKyAqIENvbmZpZ3VyYXRpb24gZGV0YWlscyBmb3IgODI1MCwgMTY0NTAsIDE2NTUwLCBldGMuIHNlcmlhbCBwb3J0cworICovCisKKyNpZm5kZWYgX0FTTV9TRVJJQUxfSAorI2RlZmluZSBfQVNNX1NFUklBTF9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKworI2lmZGVmIENPTkZJR19TSF9FQzMxMDQKKyNpbmNsdWRlIDxhc20vc2VyaWFsLWVjMzEwNC5oPgorI2VsaWYgZGVmaW5lZCAoQ09ORklHX1NIX0JJR1NVUikKKyNpbmNsdWRlIDxhc20vc2VyaWFsLWJpZ3N1ci5oPgorI2Vsc2UKKy8qCisgKiBUaGlzIGFzc3VtZXMgeW91IGhhdmUgYSAxLjg0MzIgTUh6IGNsb2NrIGZvciB5b3VyIFVBUlQuCisgKgorICogSXQnZCBiZSBuaWNlIGlmIHNvbWVvbmUgYnVpbHQgYSBzZXJpYWwgY2FyZCB3aXRoIGEgMjQuNTc2IE1IegorICogY2xvY2ssIHNpbmNlIHRoZSAxNjU1MEEgaXMgY2FwYWJsZSBvZiBoYW5kbGluZyBhIHRvcCBzcGVlZCBvZiAxLjUKKyAqIG1lZ2FiaXRzL3NlY29uZDsgYnV0IHRoaXMgcmVxdWlyZXMgdGhlIGZhc3RlciBjbG9jay4KKyAqLworI2RlZmluZSBCQVNFX0JBVUQgKCAxODQzMjAwIC8gMTYgKQorCisjZGVmaW5lIFNURF9DT01fRkxBR1MgKEFTWU5DX0JPT1RfQVVUT0NPTkYgfCBBU1lOQ19TS0lQX1RFU1QpCisKKyNpZmRlZiBDT05GSUdfSEQ2NDQ2NQorI2luY2x1ZGUgPGFzbS9oZDY0NDY1Lmg+CisKKyNkZWZpbmUgU1REX1NFUklBTF9QT1JUX0RFRk5TICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLyogVUFSVCBDTEsgICBQT1JUIElSUSAgICAgRkxBR1MgICAgICAgICovICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeyAwLCBCQVNFX0JBVUQsIDB4M0Y4LCBIRDY0NDY1X0lSUV9VQVJULCBTVERfQ09NX0ZMQUdTIH0gIC8qIHR0eVMwICovCisKKyNlbHNlCisKKyNkZWZpbmUgU1REX1NFUklBTF9QT1JUX0RFRk5TCQkJXAorCS8qIFVBUlQgQ0xLICAgUE9SVCBJUlEgICAgIEZMQUdTICAgICAgICAqLwkJCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgzRjgsIDQsIFNURF9DT01fRkxBR1MgfSwJLyogdHR5UzAgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDJGOCwgMywgU1REX0NPTV9GTEFHUyB9CS8qIHR0eVMxICovCisKKyNlbmRpZgorCisjZGVmaW5lIFNFUklBTF9QT1JUX0RGTlMgU1REX1NFUklBTF9QT1JUX0RFRk5TCisKKyNlbmRpZgorI2VuZGlmIC8qIF9BU01fU0VSSUFMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL3NldHVwLmggYi9pbmNsdWRlL2FzbS1zaC9zZXR1cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxOWRlN2MKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9zZXR1cC5oCkBAIC0wLDAgKzEsOCBAQAorI2lmZGVmIF9fS0VSTkVMX18KKyNpZm5kZWYgX1NIX1NFVFVQX0gKKyNkZWZpbmUgX1NIX1NFVFVQX0gKKworI2RlZmluZSBDT01NQU5EX0xJTkVfU0laRSAyNTYKKworI2VuZGlmIC8qIF9TSF9TRVRVUF9IICovCisjZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvc2gwMy9pZGUuaCBiL2luY2x1ZGUvYXNtLXNoL3NoMDMvaWRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNlZTkyZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL3NoMDMvaWRlLmgKQEAgLTAsMCArMSw3IEBACisjaWZuZGVmIF9fQVNNX1NIX1NIMDNfSURFX0gKKyNkZWZpbmUgX19BU01fU0hfU0gwM19JREVfSAorCisjZGVmaW5lIElSUV9DRkNBUkQJOAorI2RlZmluZSBJUlFfUENNQ0lBCTgKKworI2VuZGlmIC8qIF9fQVNNX1NIX1NIMDNfSURFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL3NoMDMvaW8uaCBiL2luY2x1ZGUvYXNtLXNoL3NoMDMvaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTc5MmU5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvc2gwMy9pby5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1zaC9zaDAzL2lvLmgKKyAqCisgKiBDb3B5cmlnaHQgMjAwNCBJbnRlcmZhY2UgQ28uLEx0ZC4gU2FpdG8uSworICoKKyAqIElPIGZ1bmN0aW9ucyBmb3IgYW4gSW50ZXJmYWNlIENUUC9QQ0ktU0gwMworICovCisKKyNpZm5kZWYgX0FTTV9TSF9JT19TSDAzX0gKKyNkZWZpbmUgX0FTTV9TSF9JT19TSDAzX0gKKworI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKworI2RlZmluZSBJTlRDX0lQUkQJMHhmZmQwMDAxMFVMCisKKyNkZWZpbmUgSVJMMF9JUlEJMgorI2RlZmluZSBJUkwwX0lQUl9BRERSCUlOVENfSVBSRAorI2RlZmluZSBJUkwwX0lQUl9QT1MJMworI2RlZmluZSBJUkwwX1BSSU9SSVRZCTEzCisKKyNkZWZpbmUgSVJMMV9JUlEJNQorI2RlZmluZSBJUkwxX0lQUl9BRERSCUlOVENfSVBSRAorI2RlZmluZSBJUkwxX0lQUl9QT1MJMgorI2RlZmluZSBJUkwxX1BSSU9SSVRZCTEwCisKKyNkZWZpbmUgSVJMMl9JUlEJOAorI2RlZmluZSBJUkwyX0lQUl9BRERSCUlOVENfSVBSRAorI2RlZmluZSBJUkwyX0lQUl9QT1MJMQorI2RlZmluZSBJUkwyX1BSSU9SSVRZCTcKKworI2RlZmluZSBJUkwzX0lSUQkxMQorI2RlZmluZSBJUkwzX0lQUl9BRERSCUlOVENfSVBSRAorI2RlZmluZSBJUkwzX0lQUl9QT1MJMAorI2RlZmluZSBJUkwzX1BSSU9SSVRZCTQKKworCitleHRlcm4gdW5zaWduZWQgbG9uZyBzaDAzX2lzYV9wb3J0MmFkZHIodW5zaWduZWQgbG9uZyBvZmZzZXQpOworCitleHRlcm4gdm9pZCBzZXR1cF9zaDAzKHZvaWQpOworZXh0ZXJuIHZvaWQgaW5pdF9zaDAzX0lSUSh2b2lkKTsKK2V4dGVybiB2b2lkIGhlYXJ0YmVhdF9zaDAzKHZvaWQpOworCitleHRlcm4gdm9pZCBzaDAzX3J0Y19nZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWV2YWwgKnR2KTsKK2V4dGVybiBpbnQgc2gwM19ydGNfc2V0dGltZW9mZGF5KGNvbnN0IHN0cnVjdCB0aW1ldmFsICp0dik7CisKKyNlbmRpZiAvKiBfQVNNX1NIX0lPX1NIMDNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvc2gwMy9zaDAzLmggYi9pbmNsdWRlL2FzbS1zaC9zaDAzL3NoMDMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWM0MGI4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvc2gwMy9zaDAzLmgKQEAgLTAsMCArMSwxOCBAQAorI2lmbmRlZiBfX0FTTV9TSF9TSDAzX0gKKyNkZWZpbmUgX19BU01fU0hfU0gwM19ICisKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1zaC9zaDAzL3NoMDMuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCAgSW50ZXJmYWNlIENvLiwgTHRkLiBTYWl0by5LCisgKgorICogSW50ZXJmYWNlIENUUC9QQ0ktU0gwMyBzdXBwb3J0CisgKi8KKworI2RlZmluZSBQQV9QQ0lfSU8gICAgICAgKDB4YmUyNDAwMDApICAgIC8qIFBDSSBJL08gc3BhY2UgKi8KKyNkZWZpbmUgUEFfUENJX01FTSAgICAgICgweGJkMDAwMDAwKSAgICAvKiBQQ0kgTUVNIHNwYWNlICovCisKKyNkZWZpbmUgUENJUEFSICAgICAgICAgICgweGE0MDAwY2Y4KSAgICAvKiBQQ0kgQ29uZmlnIGFkZHJlc3MgKi8KKyNkZWZpbmUgUENJUERSICAgICAgICAgICgweGE0MDAwY2ZjKSAgICAvKiBQQ0kgQ29uZmlnIGRhdGEgICAgKi8KKworI2VuZGlmICAvKiBfX0FTTV9TSF9TSDAzX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL3NoMjAwMC9zaDIwMDAuaCBiL2luY2x1ZGUvYXNtLXNoL3NoMjAwMC9zaDIwMDAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDU0NzMyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvc2gyMDAwL3NoMjAwMC5oCkBAIC0wLDAgKzEsOCBAQAorI2lmbmRlZiBfX0FTTV9TSF9TSDIwMDBfU0gyMDAwX0gKKyNkZWZpbmUgX19BU01fU0hfU0gyMDAwX1NIMjAwMF9ICisKKy8qIGFyY2gvc2gvYm9hcmRzL3NoMjAwMC9zZXR1cC5jICovCitleHRlcm4gaW50IHNldHVwX3NoMjAwMCh2b2lkKTsKKworI2VuZGlmIC8qIF9fQVNNX1NIX1NIMjAwMF9TSDIwMDBfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9zaF9iaW9zLmggYi9pbmNsdWRlL2FzbS1zaC9zaF9iaW9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNhMjYxOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL3NoX2Jpb3MuaApAQCAtMCwwICsxLDE5IEBACisjaWZuZGVmIF9fQVNNX1NIX0JJT1NfSAorI2RlZmluZSBfX0FTTV9TSF9CSU9TX0gKKworLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBHcmVnIEJhbmtzLCBNaXRjaCBEYXZpcworICogQyBBUEkgdG8gaW50ZXJmYWNlIHRvIHRoZSBzdGFuZGFyZCBMaW51eFNIIEJJT1MKKyAqIHVzdWFsbHkgZnJvbSB3aXRoaW4gdGhlIGVhcmx5IHN0YWdlcyBvZiBrZXJuZWwgYm9vdC4KKyAqLworCisKK2V4dGVybiB2b2lkIHNoX2Jpb3NfY29uc29sZV93cml0ZShjb25zdCBjaGFyICpidWYsIHVuc2lnbmVkIGludCBsZW4pOworZXh0ZXJuIHZvaWQgc2hfYmlvc19jaGFyX291dChjaGFyIGNoKTsKK2V4dGVybiBpbnQgc2hfYmlvc19pbl9nZGJfbW9kZSh2b2lkKTsKK2V4dGVybiB2b2lkIHNoX2Jpb3NfZ2RiX2RldGFjaCh2b2lkKTsKKworZXh0ZXJuIHZvaWQgc2hfYmlvc19nZXRfbm9kZV9hZGRyKHVuc2lnbmVkIGNoYXIgKm5vZGVfYWRkcik7CitleHRlcm4gdm9pZCBzaF9iaW9zX3NodXRkb3duKHVuc2lnbmVkIGludCBob3cpOworCisjZW5kaWYgLyogX19BU01fU0hfQklPU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9zaG1idWYuaCBiL2luY2x1ZGUvYXNtLXNoL3NobWJ1Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyMTAxZjQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9zaG1idWYuaApAQCAtMCwwICsxLDQyIEBACisjaWZuZGVmIF9fQVNNX1NIX1NITUJVRl9ICisjZGVmaW5lIF9fQVNNX1NIX1NITUJVRl9ICisKKy8qIAorICogVGhlIHNobWlkNjRfZHMgc3RydWN0dXJlIGZvciBpMzg2IGFyY2hpdGVjdHVyZS4KKyAqIE5vdGUgZXh0cmEgcGFkZGluZyBiZWNhdXNlIHRoaXMgc3RydWN0dXJlIGlzIHBhc3NlZCBiYWNrIGFuZCBmb3J0aAorICogYmV0d2VlbiBrZXJuZWwgYW5kIHVzZXIgc3BhY2UuCisgKgorICogUGFkIHNwYWNlIGlzIGxlZnQgZm9yOgorICogLSA2NC1iaXQgdGltZV90IHRvIHNvbHZlIHkyMDM4IHByb2JsZW0KKyAqIC0gMiBtaXNjZWxsYW5lb3VzIDMyLWJpdCB2YWx1ZXMKKyAqLworCitzdHJ1Y3Qgc2htaWQ2NF9kcyB7CisJc3RydWN0IGlwYzY0X3Blcm0Jc2htX3Blcm07CS8qIG9wZXJhdGlvbiBwZXJtcyAqLworCXNpemVfdAkJCXNobV9zZWdzejsJLyogc2l6ZSBvZiBzZWdtZW50IChieXRlcykgKi8KKwlfX2tlcm5lbF90aW1lX3QJCXNobV9hdGltZTsJLyogbGFzdCBhdHRhY2ggdGltZSAqLworCXVuc2lnbmVkIGxvbmcJCV9fdW51c2VkMTsKKwlfX2tlcm5lbF90aW1lX3QJCXNobV9kdGltZTsJLyogbGFzdCBkZXRhY2ggdGltZSAqLworCXVuc2lnbmVkIGxvbmcJCV9fdW51c2VkMjsKKwlfX2tlcm5lbF90aW1lX3QJCXNobV9jdGltZTsJLyogbGFzdCBjaGFuZ2UgdGltZSAqLworCXVuc2lnbmVkIGxvbmcJCV9fdW51c2VkMzsKKwlfX2tlcm5lbF9waWRfdAkJc2htX2NwaWQ7CS8qIHBpZCBvZiBjcmVhdG9yICovCisJX19rZXJuZWxfcGlkX3QJCXNobV9scGlkOwkvKiBwaWQgb2YgbGFzdCBvcGVyYXRvciAqLworCXVuc2lnbmVkIGxvbmcJCXNobV9uYXR0Y2g7CS8qIG5vLiBvZiBjdXJyZW50IGF0dGFjaGVzICovCisJdW5zaWduZWQgbG9uZwkJX191bnVzZWQ0OworCXVuc2lnbmVkIGxvbmcJCV9fdW51c2VkNTsKK307CisKK3N0cnVjdCBzaG1pbmZvNjQgeworCXVuc2lnbmVkIGxvbmcJc2htbWF4OworCXVuc2lnbmVkIGxvbmcJc2htbWluOworCXVuc2lnbmVkIGxvbmcJc2htbW5pOworCXVuc2lnbmVkIGxvbmcJc2htc2VnOworCXVuc2lnbmVkIGxvbmcJc2htYWxsOworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQxOworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQyOworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQzOworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQ0OworfTsKKworI2VuZGlmIC8qIF9fQVNNX1NIX1NITUJVRl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9zaG1wYXJhbS5oIGIvaW5jbHVkZS9hc20tc2gvc2htcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTk1NjA0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvc2htcGFyYW0uaApAQCAtMCwwICsxLDggQEAKKyNpZm5kZWYgX19BU01fU0hfU0hNUEFSQU1fSAorI2RlZmluZSBfX0FTTV9TSF9TSE1QQVJBTV9ICisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8YXNtL2NwdS9zaG1wYXJhbS5oPgorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9fQVNNX1NIX1NITVBBUkFNX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL3NpZ2NvbnRleHQuaCBiL2luY2x1ZGUvYXNtLXNoL3NpZ2NvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjhlZmZiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvc2lnY29udGV4dC5oCkBAIC0wLDAgKzEsMjYgQEAKKyNpZm5kZWYgX19BU01fU0hfU0lHQ09OVEVYVF9ICisjZGVmaW5lIF9fQVNNX1NIX1NJR0NPTlRFWFRfSAorCitzdHJ1Y3Qgc2lnY29udGV4dCB7CisJdW5zaWduZWQgbG9uZwlvbGRtYXNrOworCisJLyogQ1BVIHJlZ2lzdGVycyAqLworCXVuc2lnbmVkIGxvbmcgc2NfcmVnc1sxNl07CisJdW5zaWduZWQgbG9uZyBzY19wYzsKKwl1bnNpZ25lZCBsb25nIHNjX3ByOworCXVuc2lnbmVkIGxvbmcgc2Nfc3I7CisJdW5zaWduZWQgbG9uZyBzY19nYnI7CisJdW5zaWduZWQgbG9uZyBzY19tYWNoOworCXVuc2lnbmVkIGxvbmcgc2NfbWFjbDsKKworI2lmIGRlZmluZWQoX19TSDRfXykgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NINCkKKwkvKiBGUFUgcmVnaXN0ZXJzICovCisJdW5zaWduZWQgbG9uZyBzY19mcHJlZ3NbMTZdOworCXVuc2lnbmVkIGxvbmcgc2NfeGZwcmVnc1sxNl07CisJdW5zaWduZWQgaW50IHNjX2Zwc2NyOworCXVuc2lnbmVkIGludCBzY19mcHVsOworCXVuc2lnbmVkIGludCBzY19vd25lZGZwOworI2VuZGlmCit9OworCisjZW5kaWYgLyogX19BU01fU0hfU0lHQ09OVEVYVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9zaWdpbmZvLmggYi9pbmNsdWRlL2FzbS1zaC9zaWdpbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODEzMDQwZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL3NpZ2luZm8uaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19BU01fU0hfU0lHSU5GT19ICisjZGVmaW5lIF9fQVNNX1NIX1NJR0lORk9fSAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2lnaW5mby5oPgorCisjZW5kaWYgLyogX19BU01fU0hfU0lHSU5GT19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9zaWduYWwuaCBiL2luY2x1ZGUvYXNtLXNoL3NpZ25hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhN2ZmNzEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9zaWduYWwuaApAQCAtMCwwICsxLDE4NSBAQAorI2lmbmRlZiBfX0FTTV9TSF9TSUdOQUxfSAorI2RlZmluZSBfX0FTTV9TSF9TSUdOQUxfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyogQXZvaWQgdG9vIG1hbnkgaGVhZGVyIG9yZGVyaW5nIHByb2JsZW1zLiAgKi8KK3N0cnVjdCBwdF9yZWdzOworc3RydWN0IHNpZ2luZm87CisKKyNpZmRlZiBfX0tFUk5FTF9fCisvKiBNb3N0IHRoaW5ncyBzaG91bGQgYmUgY2xlYW4gZW5vdWdoIHRvIHJlZGVmaW5lIHRoaXMgYXQgd2lsbCwgaWYgY2FyZQorICAgaXMgdGFrZW4gdG8gbWFrZSBsaWJjIG1hdGNoLiAgKi8KKworI2RlZmluZSBfTlNJRwkJNjQKKyNkZWZpbmUgX05TSUdfQlBXCTMyCisjZGVmaW5lIF9OU0lHX1dPUkRTCShfTlNJRyAvIF9OU0lHX0JQVykKKwordHlwZWRlZiB1bnNpZ25lZCBsb25nIG9sZF9zaWdzZXRfdDsJCS8qIGF0IGxlYXN0IDMyIGJpdHMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcgc2lnW19OU0lHX1dPUkRTXTsKK30gc2lnc2V0X3Q7CisKKyNlbHNlCisvKiBIZXJlIHdlIG11c3QgY2F0ZXIgdG8gbGliY3MgdGhhdCBwb2tlIGFib3V0IGluIGtlcm5lbCBoZWFkZXJzLiAgKi8KKworI2RlZmluZSBOU0lHCQkzMgordHlwZWRlZiB1bnNpZ25lZCBsb25nIHNpZ3NldF90OworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZGVmaW5lIFNJR0hVUAkJIDEKKyNkZWZpbmUgU0lHSU5UCQkgMgorI2RlZmluZSBTSUdRVUlUCQkgMworI2RlZmluZSBTSUdJTEwJCSA0CisjZGVmaW5lIFNJR1RSQVAJCSA1CisjZGVmaW5lIFNJR0FCUlQJCSA2CisjZGVmaW5lIFNJR0lPVAkJIDYKKyNkZWZpbmUgU0lHQlVTCQkgNworI2RlZmluZSBTSUdGUEUJCSA4CisjZGVmaW5lIFNJR0tJTEwJCSA5CisjZGVmaW5lIFNJR1VTUjEJCTEwCisjZGVmaW5lIFNJR1NFR1YJCTExCisjZGVmaW5lIFNJR1VTUjIJCTEyCisjZGVmaW5lIFNJR1BJUEUJCTEzCisjZGVmaW5lIFNJR0FMUk0JCTE0CisjZGVmaW5lIFNJR1RFUk0JCTE1CisjZGVmaW5lIFNJR1NUS0ZMVAkxNgorI2RlZmluZSBTSUdDSExECQkxNworI2RlZmluZSBTSUdDT05UCQkxOAorI2RlZmluZSBTSUdTVE9QCQkxOQorI2RlZmluZSBTSUdUU1RQCQkyMAorI2RlZmluZSBTSUdUVElOCQkyMQorI2RlZmluZSBTSUdUVE9VCQkyMgorI2RlZmluZSBTSUdVUkcJCTIzCisjZGVmaW5lIFNJR1hDUFUJCTI0CisjZGVmaW5lIFNJR1hGU1oJCTI1CisjZGVmaW5lIFNJR1ZUQUxSTQkyNgorI2RlZmluZSBTSUdQUk9GCQkyNworI2RlZmluZSBTSUdXSU5DSAkyOAorI2RlZmluZSBTSUdJTwkJMjkKKyNkZWZpbmUgU0lHUE9MTAkJU0lHSU8KKy8qCisjZGVmaW5lIFNJR0xPU1QJCTI5CisqLworI2RlZmluZSBTSUdQV1IJCTMwCisjZGVmaW5lIFNJR1NZUwkJMzEKKyNkZWZpbmUJU0lHVU5VU0VECTMxCisKKy8qIFRoZXNlIHNob3VsZCBub3QgYmUgY29uc2lkZXJlZCBjb25zdGFudHMgZnJvbSB1c2VybGFuZC4gICovCisjZGVmaW5lIFNJR1JUTUlOCTMyCisjZGVmaW5lIFNJR1JUTUFYCV9OU0lHCisKKy8qCisgKiBTQV9GTEFHUyB2YWx1ZXM6CisgKgorICogU0FfT05TVEFDSyBpbmRpY2F0ZXMgdGhhdCBhIHJlZ2lzdGVyZWQgc3RhY2tfdCB3aWxsIGJlIHVzZWQuCisgKiBTQV9JTlRFUlJVUFQgaXMgYSBuby1vcCwgYnV0IGxlZnQgZHVlIHRvIGhpc3RvcmljYWwgcmVhc29ucy4gVXNlIHRoZQorICogU0FfUkVTVEFSVCBmbGFnIHRvIGdldCByZXN0YXJ0aW5nIHNpZ25hbHMgKHdoaWNoIHdlcmUgdGhlIGRlZmF1bHQgbG9uZyBhZ28pCisgKiBTQV9OT0NMRFNUT1AgZmxhZyB0byB0dXJuIG9mZiBTSUdDSExEIHdoZW4gY2hpbGRyZW4gc3RvcC4KKyAqIFNBX1JFU0VUSEFORCBjbGVhcnMgdGhlIGhhbmRsZXIgd2hlbiB0aGUgc2lnbmFsIGlzIGRlbGl2ZXJlZC4KKyAqIFNBX05PQ0xEV0FJVCBmbGFnIG9uIFNJR0NITEQgdG8gaW5oaWJpdCB6b21iaWVzLgorICogU0FfTk9ERUZFUiBwcmV2ZW50cyB0aGUgY3VycmVudCBzaWduYWwgZnJvbSBiZWluZyBtYXNrZWQgaW4gdGhlIGhhbmRsZXIuCisgKgorICogU0FfT05FU0hPVCBhbmQgU0FfTk9NQVNLIGFyZSB0aGUgaGlzdG9yaWNhbCBMaW51eCBuYW1lcyBmb3IgdGhlIFNpbmdsZQorICogVW5peCBuYW1lcyBSRVNFVEhBTkQgYW5kIE5PREVGRVIgcmVzcGVjdGl2ZWx5LgorICovCisjZGVmaW5lIFNBX05PQ0xEU1RPUAkweDAwMDAwMDAxCisjZGVmaW5lIFNBX05PQ0xEV0FJVAkweDAwMDAwMDAyCisjZGVmaW5lIFNBX1NJR0lORk8JMHgwMDAwMDAwNAorI2RlZmluZSBTQV9PTlNUQUNLCTB4MDgwMDAwMDAKKyNkZWZpbmUgU0FfUkVTVEFSVAkweDEwMDAwMDAwCisjZGVmaW5lIFNBX05PREVGRVIJMHg0MDAwMDAwMAorI2RlZmluZSBTQV9SRVNFVEhBTkQJMHg4MDAwMDAwMAorCisjZGVmaW5lIFNBX05PTUFTSwlTQV9OT0RFRkVSCisjZGVmaW5lIFNBX09ORVNIT1QJU0FfUkVTRVRIQU5ECisjZGVmaW5lIFNBX0lOVEVSUlVQVAkweDIwMDAwMDAwIC8qIGR1bW15IC0tIGlnbm9yZWQgKi8KKworI2RlZmluZSBTQV9SRVNUT1JFUgkweDA0MDAwMDAwCisKKy8qIAorICogc2lnYWx0c3RhY2sgY29udHJvbHMKKyAqLworI2RlZmluZSBTU19PTlNUQUNLCTEKKyNkZWZpbmUgU1NfRElTQUJMRQkyCisKKyNkZWZpbmUgTUlOU0lHU1RLU1oJMjA0OAorI2RlZmluZSBTSUdTVEtTWgk4MTkyCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKy8qCisgKiBUaGVzZSB2YWx1ZXMgb2Ygc2FfZmxhZ3MgYXJlIHVzZWQgb25seSBieSB0aGUga2VybmVsIGFzIHBhcnQgb2YgdGhlCisgKiBpcnEgaGFuZGxpbmcgcm91dGluZXMuCisgKgorICogU0FfSU5URVJSVVBUIGlzIGFsc28gdXNlZCBieSB0aGUgaXJxIGhhbmRsaW5nIHJvdXRpbmVzLgorICogU0FfU0hJUlEgaXMgZm9yIHNoYXJlZCBpbnRlcnJ1cHQgc3VwcG9ydCBvbiBQQ0kgYW5kIEVJU0EuCisgKi8KKyNkZWZpbmUgU0FfUFJPQkUJCVNBX09ORVNIT1QKKyNkZWZpbmUgU0FfU0FNUExFX1JBTkRPTQlTQV9SRVNUQVJUCisjZGVmaW5lIFNBX1NISVJRCQkweDA0MDAwMDAwCisjZW5kaWYKKworI2RlZmluZSBTSUdfQkxPQ0sgICAgICAgICAgMAkvKiBmb3IgYmxvY2tpbmcgc2lnbmFscyAqLworI2RlZmluZSBTSUdfVU5CTE9DSyAgICAgICAgMQkvKiBmb3IgdW5ibG9ja2luZyBzaWduYWxzICovCisjZGVmaW5lIFNJR19TRVRNQVNLICAgICAgICAyCS8qIGZvciBzZXR0aW5nIHRoZSBzaWduYWwgbWFzayAqLworCisvKiBUeXBlIG9mIGEgc2lnbmFsIGhhbmRsZXIuICAqLwordHlwZWRlZiB2b2lkICgqX19zaWdoYW5kbGVyX3QpKGludCk7CisKKyNkZWZpbmUgU0lHX0RGTAkoKF9fc2lnaGFuZGxlcl90KTApCS8qIGRlZmF1bHQgc2lnbmFsIGhhbmRsaW5nICovCisjZGVmaW5lIFNJR19JR04JKChfX3NpZ2hhbmRsZXJfdCkxKQkvKiBpZ25vcmUgc2lnbmFsICovCisjZGVmaW5lIFNJR19FUlIJKChfX3NpZ2hhbmRsZXJfdCktMSkJLyogZXJyb3IgcmV0dXJuIGZyb20gc2lnbmFsICovCisKKyNpZmRlZiBfX0tFUk5FTF9fCitzdHJ1Y3Qgb2xkX3NpZ2FjdGlvbiB7CisJX19zaWdoYW5kbGVyX3Qgc2FfaGFuZGxlcjsKKwlvbGRfc2lnc2V0X3Qgc2FfbWFzazsKKwl1bnNpZ25lZCBsb25nIHNhX2ZsYWdzOworCXZvaWQgKCpzYV9yZXN0b3Jlcikodm9pZCk7Cit9OworCitzdHJ1Y3Qgc2lnYWN0aW9uIHsKKwlfX3NpZ2hhbmRsZXJfdCBzYV9oYW5kbGVyOworCXVuc2lnbmVkIGxvbmcgc2FfZmxhZ3M7CisJdm9pZCAoKnNhX3Jlc3RvcmVyKSh2b2lkKTsKKwlzaWdzZXRfdCBzYV9tYXNrOwkJLyogbWFzayBsYXN0IGZvciBleHRlbnNpYmlsaXR5ICovCit9OworCitzdHJ1Y3Qga19zaWdhY3Rpb24geworCXN0cnVjdCBzaWdhY3Rpb24gc2E7Cit9OworI2Vsc2UKKy8qIEhlcmUgd2UgbXVzdCBjYXRlciB0byBsaWJjcyB0aGF0IHBva2UgYWJvdXQgaW4ga2VybmVsIGhlYWRlcnMuICAqLworCitzdHJ1Y3Qgc2lnYWN0aW9uIHsKKwl1bmlvbiB7CisJICBfX3NpZ2hhbmRsZXJfdCBfc2FfaGFuZGxlcjsKKwkgIHZvaWQgKCpfc2Ffc2lnYWN0aW9uKShpbnQsIHN0cnVjdCBzaWdpbmZvICosIHZvaWQgKik7CisJfSBfdTsKKwlzaWdzZXRfdCBzYV9tYXNrOworCXVuc2lnbmVkIGxvbmcgc2FfZmxhZ3M7CisJdm9pZCAoKnNhX3Jlc3RvcmVyKSh2b2lkKTsKK307CisKKyNkZWZpbmUgc2FfaGFuZGxlcglfdS5fc2FfaGFuZGxlcgorI2RlZmluZSBzYV9zaWdhY3Rpb24JX3UuX3NhX3NpZ2FjdGlvbgorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCit0eXBlZGVmIHN0cnVjdCBzaWdhbHRzdGFjayB7CisJdm9pZCAqc3Nfc3A7CisJaW50IHNzX2ZsYWdzOworCXNpemVfdCBzc19zaXplOworfSBzdGFja190OworCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGFzbS9zaWdjb250ZXh0Lmg+CisKKyNkZWZpbmUgcHRyYWNlX3NpZ25hbF9kZWxpdmVyKHJlZ3MsIGNvb2tpZSkgZG8geyB9IHdoaWxlICgwKQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX19BU01fU0hfU0lHTkFMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL3NtcC5oIGIvaW5jbHVkZS9hc20tc2gvc21wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhiNTQ0NgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL3NtcC5oCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1zaC9zbXAuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMyAgUGF1bCBNdW5kdAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9fQVNNX1NIX1NNUF9ICisjZGVmaW5lIF9fQVNNX1NIX1NNUF9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CisKKyNpZmRlZiBDT05GSUdfU01QCisKKyNpbmNsdWRlIDxhc20vc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8YXNtL2N1cnJlbnQuaD4KKworZXh0ZXJuIGNwdW1hc2tfdCBjcHVfb25saW5lX21hcDsKK2V4dGVybiBjcHVtYXNrX3QgY3B1X3Bvc3NpYmxlX21hcDsKKworI2RlZmluZSBjcHVfb25saW5lKGNwdSkJCWNwdV9pc3NldChjcHUsIGNwdV9vbmxpbmVfbWFwKQorCisjZGVmaW5lIHNtcF9wcm9jZXNzb3JfaWQoKQkoY3VycmVudF90aHJlYWRfaW5mbygpLT5jcHUpCisKKy8qIEkndmUgbm8gaWRlYSB3aGF0IHRoZSByZWFsIG1lYW5pbmcgb2YgdGhpcyBpcyAqLworI2RlZmluZSBQUk9DX0NIQU5HRV9QRU5BTFRZCTIwCisKKyNkZWZpbmUgTk9fUFJPQ19JRAkoLTEpCisKK3N0cnVjdCBzbXBfZm5fY2FsbF9zdHJ1Y3QgeworCXNwaW5sb2NrX3QgbG9jazsKKwlhdG9taWNfdCAgIGZpbmlzaGVkOworCXZvaWQgKCpmbikodm9pZCAqKTsKKwl2b2lkICpkYXRhOworfTsKKworZXh0ZXJuIHN0cnVjdCBzbXBfZm5fY2FsbF9zdHJ1Y3Qgc21wX2ZuX2NhbGw7CisKKyNkZWZpbmUgU01QX01TR19SRVNDSEVEVUxFCTB4MDAwMQorCisjZW5kaWYgLyogQ09ORklHX1NNUCAqLworCisjZW5kaWYgLyogX19BU01fU0hfU01QX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL3NuYXBnZWFyL2lvLmggYi9pbmNsdWRlL2FzbS1zaC9zbmFwZ2Vhci9pby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmYTk3YWMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9zbmFwZ2Vhci9pby5oCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1zaC9zbmFwZ2Vhci9pby5oCisgKgorICogTW9kaWZpZWQgdmVyc2lvbiBvZiBpb19zZS5oIGZvciB0aGUgc25hcGdlYXItc3BlY2lmaWMgZnVuY3Rpb25zLgorICoKKyAqIE1heSBiZSBjb3BpZWQgb3IgbW9kaWZpZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgbGludXgvQ09QWUlORyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAqCisgKiBJTyBmdW5jdGlvbnMgZm9yIGEgU25hcEdlYXIKKyAqLworCisjaWZuZGVmIF9BU01fU0hfSU9fU05BUEdFQVJfSAorI2RlZmluZSBfQVNNX1NIX0lPX1NOQVBHRUFSX0gKKworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TSDQpCisvKgorICogVGhlIGV4dGVybmFsIGludGVycnVwdCBsaW5lcywgdGhlc2UgdGFrZSB1cCBpbnRzIDAgLSAxNSBpbmNsdXNpdmUKKyAqIGRlcGVuZGluZyBvbiB0aGUgcHJpb3JpdHkgZm9yIHRoZSBpbnRlcnJ1cHQuICBJbiBmYWN0IHRoZSBwcmlvcml0eQorICogaXMgdGhlIGludGVycnVwdCA6LSkKKyAqLworCisjZGVmaW5lIElSTDBfSVJRCQkyCisjZGVmaW5lIElSTDBfSVBSX0FERFIJSU5UQ19JUFJECisjZGVmaW5lIElSTDBfSVBSX1BPUwkzCisjZGVmaW5lIElSTDBfUFJJT1JJVFkJMTMKKworI2RlZmluZSBJUkwxX0lSUQkJNQorI2RlZmluZSBJUkwxX0lQUl9BRERSCUlOVENfSVBSRAorI2RlZmluZSBJUkwxX0lQUl9QT1MJMgorI2RlZmluZSBJUkwxX1BSSU9SSVRZCTEwCisKKyNkZWZpbmUgSVJMMl9JUlEJCTgKKyNkZWZpbmUgSVJMMl9JUFJfQUREUglJTlRDX0lQUkQKKyNkZWZpbmUgSVJMMl9JUFJfUE9TCTEKKyNkZWZpbmUgSVJMMl9QUklPUklUWQk3CisKKyNkZWZpbmUgSVJMM19JUlEJCTExCisjZGVmaW5lIElSTDNfSVBSX0FERFIJSU5UQ19JUFJECisjZGVmaW5lIElSTDNfSVBSX1BPUwkwCisjZGVmaW5lIElSTDNfUFJJT1JJVFkJNAorI2VuZGlmCisKK2V4dGVybiB1bnNpZ25lZCBjaGFyIHNuYXBnZWFyX2luYih1bnNpZ25lZCBsb25nIHBvcnQpOworZXh0ZXJuIHVuc2lnbmVkIHNob3J0IHNuYXBnZWFyX2ludyh1bnNpZ25lZCBsb25nIHBvcnQpOworZXh0ZXJuIHVuc2lnbmVkIGludCBzbmFwZ2Vhcl9pbmwodW5zaWduZWQgbG9uZyBwb3J0KTsKKworZXh0ZXJuIHZvaWQgc25hcGdlYXJfb3V0Yih1bnNpZ25lZCBjaGFyIHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpOworZXh0ZXJuIHZvaWQgc25hcGdlYXJfb3V0dyh1bnNpZ25lZCBzaG9ydCB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KTsKK2V4dGVybiB2b2lkIHNuYXBnZWFyX291dGwodW5zaWduZWQgaW50IHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpOworCitleHRlcm4gdW5zaWduZWQgY2hhciBzbmFwZ2Vhcl9pbmJfcCh1bnNpZ25lZCBsb25nIHBvcnQpOworZXh0ZXJuIHZvaWQgc25hcGdlYXJfb3V0Yl9wKHVuc2lnbmVkIGNoYXIgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCk7CisKK2V4dGVybiB2b2lkIHNuYXBnZWFyX2luc2wodW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKK2V4dGVybiB2b2lkIHNuYXBnZWFyX291dHNsKHVuc2lnbmVkIGxvbmcgcG9ydCwgY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCk7CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIHNuYXBnZWFyX2lzYV9wb3J0MmFkZHIodW5zaWduZWQgbG9uZyBvZmZzZXQpOworCisjaWZkZWYgQ09ORklHX1NIX1NFQ1VSRUVER0U1NDEwCisvKgorICogV2UgbmVlZCB0byByZW1lbWJlciB3aGF0IHdhcyB3cml0dGVuIHRvIHRoZSBpb3BvcnQgYXMgc29tZSBiaXRzCisgKiBhcmUgc2hhcmVkIHdpdGggb3RoZXIgZnVuY3Rpb25zIGFuZCB5b3UgY2Fubm90IHJlYWQgYmFjayB3aGF0IHdhcworICogd3JpdHRlbiA6LXwKKyAqCisgKiBCaXQgICAgICAgIFJlYWQgICAgICAgICAgICAgICAgICAgV3JpdGUKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBEMCAgICAgICAgIERDRCBvbiB0dHlTQzEgICAgICAgICAgcG93ZXIKKyAqIEQxICAgICAgICAgUmVzZXQgU3dpdGNoICAgICAgICAgICBoZWF0YmVhdAorICogRDIgICAgICAgICB0dHlTQzAgQ1RTICg3MTAwKSAgICAgIExBTgorICogRDMgICAgICAgICAtICAgICAgICAgICAgICAgICAgICAgIFdBTgorICogRDQgICAgICAgICB0dHlTQzAgRENEICg3MTAwKSAgICAgIENPTlNPTEUKKyAqIEQ1ICAgICAgICAgLSAgICAgICAgICAgICAgICAgICAgICBPTkxJTkUKKyAqIEQ2ICAgICAgICAgLSAgICAgICAgICAgICAgICAgICAgICBWUE4KKyAqIEQ3ICAgICAgICAgLSAgICAgICAgICAgICAgICAgICAgICBEVFIgb24gdHR5U0MxCisgKiBEOCAgICAgICAgIC0gICAgICAgICAgICAgICAgICAgICAgdHR5U0MwIFJUUyAoNzEwMCkKKyAqIEQ5ICAgICAgICAgLSAgICAgICAgICAgICAgICAgICAgICB0dHlTQzAgRFRSICg3MTAwKQorICogRDEwICAgICAgICAtICAgICAgICAgICAgICAgICAgICAgIFJUQyBTQ0xLCisgKiBEMTEgICAgICAgIFJUQyBEQVRBICAgICAgICAgICAgICAgUlRDIERBVEEKKyAqIEQxMiAgICAgICAgLSAgICAgICAgICAgICAgICAgICAgICBSVFMgUkVTRVQKKyAqLworCisgI2RlZmluZSBTRUNVUkVFREdFX0lPUE9SVF9BRERSICgodm9sYXRpbGUgc2hvcnQgKikgMHhiMDAwMDAwMCkKKyBleHRlcm4gdW5zaWduZWQgc2hvcnQgc2VjdXJlZWRnZTU0MTBfaW9wb3J0OworCisgI2RlZmluZSBTRUNVUkVFREdFX1dSSVRFX0lPUE9SVCh2YWwsIG1hc2spICgqU0VDVVJFRURHRV9JT1BPUlRfQUREUiA9IFwKKwkJIChzZWN1cmVlZGdlNTQxMF9pb3BvcnQgPSBcCisJCSAJCSgoc2VjdXJlZWRnZTU0MTBfaW9wb3J0ICYgfihtYXNrKSkgfCAoKHZhbCkgJiAobWFzaykpKSkpCisgI2RlZmluZSBTRUNVUkVFREdFX1JFQURfSU9QT1JUKCkgXAorIAkJICgoKlNFQ1VSRUVER0VfSU9QT1JUX0FERFImMHgwODE3KSB8IChzZWN1cmVlZGdlNTQxMF9pb3BvcnQmfjB4MDgxNykpCisjZW5kaWYKKworI2VuZGlmIC8qIF9BU01fU0hfSU9fU05BUEdFQVJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvc29ja2V0LmggYi9pbmNsdWRlL2FzbS1zaC9zb2NrZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGU2OTZjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvc29ja2V0LmgKQEAgLTAsMCArMSw1MCBAQAorI2lmbmRlZiBfX0FTTV9TSF9TT0NLRVRfSAorI2RlZmluZSBfX0FTTV9TSF9TT0NLRVRfSAorCisjaW5jbHVkZSA8YXNtL3NvY2tpb3MuaD4KKworLyogRm9yIHNldHNvY2tvcHQoMikgKi8KKyNkZWZpbmUgU09MX1NPQ0tFVAkxCisKKyNkZWZpbmUgU09fREVCVUcJMQorI2RlZmluZSBTT19SRVVTRUFERFIJMgorI2RlZmluZSBTT19UWVBFCQkzCisjZGVmaW5lIFNPX0VSUk9SCTQKKyNkZWZpbmUgU09fRE9OVFJPVVRFCTUKKyNkZWZpbmUgU09fQlJPQURDQVNUCTYKKyNkZWZpbmUgU09fU05EQlVGCTcKKyNkZWZpbmUgU09fUkNWQlVGCTgKKyNkZWZpbmUgU09fS0VFUEFMSVZFCTkKKyNkZWZpbmUgU09fT09CSU5MSU5FCTEwCisjZGVmaW5lIFNPX05PX0NIRUNLCTExCisjZGVmaW5lIFNPX1BSSU9SSVRZCTEyCisjZGVmaW5lIFNPX0xJTkdFUgkxMworI2RlZmluZSBTT19CU0RDT01QQVQJMTQKKy8qIFRvIGFkZCA6I2RlZmluZSBTT19SRVVTRVBPUlQgMTUgKi8KKyNkZWZpbmUgU09fUEFTU0NSRUQJMTYKKyNkZWZpbmUgU09fUEVFUkNSRUQJMTcKKyNkZWZpbmUgU09fUkNWTE9XQVQJMTgKKyNkZWZpbmUgU09fU05ETE9XQVQJMTkKKyNkZWZpbmUgU09fUkNWVElNRU8JMjAKKyNkZWZpbmUgU09fU05EVElNRU8JMjEKKworLyogU2VjdXJpdHkgbGV2ZWxzIC0gYXMgcGVyIE5STCBJUHY2IC0gZG9uJ3QgYWN0dWFsbHkgZG8gYW55dGhpbmcgKi8KKyNkZWZpbmUgU09fU0VDVVJJVFlfQVVUSEVOVElDQVRJT04JCTIyCisjZGVmaW5lIFNPX1NFQ1VSSVRZX0VOQ1JZUFRJT05fVFJBTlNQT1JUCTIzCisjZGVmaW5lIFNPX1NFQ1VSSVRZX0VOQ1JZUFRJT05fTkVUV09SSwkJMjQKKworI2RlZmluZSBTT19CSU5EVE9ERVZJQ0UJMjUKKworLyogU29ja2V0IGZpbHRlcmluZyAqLworI2RlZmluZSBTT19BVFRBQ0hfRklMVEVSICAgICAgICAyNgorI2RlZmluZSBTT19ERVRBQ0hfRklMVEVSICAgICAgICAyNworCisjZGVmaW5lIFNPX1BFRVJOQU1FICAgICAgICAgICAgIDI4CisjZGVmaW5lIFNPX1RJTUVTVEFNUAkJMjkKKyNkZWZpbmUgU0NNX1RJTUVTVEFNUAkJU09fVElNRVNUQU1QCisKKyNkZWZpbmUgU09fQUNDRVBUQ09OTgkJMzAKKworI2RlZmluZSBTT19QRUVSU0VDCQkzMQorCisjZW5kaWYgLyogX19BU01fU0hfU09DS0VUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL3NvY2tpb3MuaCBiL2luY2x1ZGUvYXNtLXNoL3NvY2tpb3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGE3MWRmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvc29ja2lvcy5oCkBAIC0wLDAgKzEsMTMgQEAKKyNpZm5kZWYgX19BU01fU0hfU09DS0lPU19ICisjZGVmaW5lIF9fQVNNX1NIX1NPQ0tJT1NfSAorCisvKiBTb2NrZXQtbGV2ZWwgSS9PIGNvbnRyb2wgY2FsbHMuICovCisjZGVmaW5lIEZJT0dFVE9XTglfSU9SKCdmJywgMTIzLCBpbnQpCisjZGVmaW5lIEZJT1NFVE9XTiAJX0lPVygnZicsIDEyNCwgaW50KQorCisjZGVmaW5lIFNJT0NBVE1BUksJX0lPUigncycsIDcsIGludCkKKyNkZWZpbmUgU0lPQ1NQR1JQCV9JT1coJ3MnLCA4LCBwaWRfdCkKKyNkZWZpbmUgU0lPQ0dQR1JQCV9JT1IoJ3MnLCA5LCBwaWRfdCkKKworI2RlZmluZSBTSU9DR1NUQU1QCV9JT1IoJ3MnLCAxMDAsIHN0cnVjdCB0aW1ldmFsKSAvKiBHZXQgc3RhbXAgLSBsaW51eC1zcGVjaWZpYyAqLworI2VuZGlmIC8qIF9fQVNNX1NIX1NPQ0tJT1NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvc3BpbmxvY2suaCBiL2luY2x1ZGUvYXNtLXNoL3NwaW5sb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc3MGI1NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL3NwaW5sb2NrLmgKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1zaC9zcGlubG9jay5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzIFBhdWwgTXVuZHQKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfX0FTTV9TSF9TUElOTE9DS19ICisjZGVmaW5lIF9fQVNNX1NIX1NQSU5MT0NLX0gKKworI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKworLyoKKyAqIFlvdXIgYmFzaWMgU01QIHNwaW5sb2NrcywgYWxsb3dpbmcgb25seSBhIHNpbmdsZSBDUFUgYW55d2hlcmUKKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgbG9jazsKKyNpZmRlZiBDT05GSUdfUFJFRU1QVAorCXVuc2lnbmVkIGludCBicmVha19sb2NrOworI2VuZGlmCit9IHNwaW5sb2NrX3Q7CisKKyNkZWZpbmUgU1BJTl9MT0NLX1VOTE9DS0VECShzcGlubG9ja190KSB7IDAgfQorCisjZGVmaW5lIHNwaW5fbG9ja19pbml0KHgpCWRvIHsgKih4KSA9IFNQSU5fTE9DS19VTkxPQ0tFRDsgfSB3aGlsZSgwKQorCisjZGVmaW5lIHNwaW5faXNfbG9ja2VkKHgpCSgoeCktPmxvY2sgIT0gMCkKKyNkZWZpbmUgc3Bpbl91bmxvY2tfd2FpdCh4KQlkbyB7IGJhcnJpZXIoKTsgfSB3aGlsZSAoc3Bpbl9pc19sb2NrZWQoeCkpCisjZGVmaW5lIF9yYXdfc3Bpbl9sb2NrX2ZsYWdzKGxvY2ssIGZsYWdzKSBfcmF3X3NwaW5fbG9jayhsb2NrKQorCisvKgorICogU2ltcGxlIHNwaW4gbG9jayBvcGVyYXRpb25zLiAgVGhlcmUgYXJlIHR3byB2YXJpYW50cywgb25lIGNsZWFycyBJUlEncworICogb24gdGhlIGxvY2FsIHByb2Nlc3Nvciwgb25lIGRvZXMgbm90LgorICoKKyAqIFdlIG1ha2Ugbm8gZmFpcm5lc3MgYXNzdW1wdGlvbnMuICBUaGV5IGhhdmUgYSBjb3N0LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgX3Jhd19zcGluX2xvY2soc3BpbmxvY2tfdCAqbG9jaykKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCSIxOlxuXHQiCisJCSJ0YXMuYiBAJTBcblx0IgorCQkiYmYvcyAxYlxuXHQiCisJCSJub3Bcblx0IgorCQk6ICI9ciIgKGxvY2stPmxvY2spCisJCTogInIiICgmbG9jay0+bG9jaykKKwkJOiAidCIsICJtZW1vcnkiCisJKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9yYXdfc3Bpbl91bmxvY2soc3BpbmxvY2tfdCAqbG9jaykKK3sKKwlhc3NlcnRfc3Bpbl9sb2NrZWQobG9jayk7CisKKwlsb2NrLT5sb2NrID0gMDsKK30KKworI2RlZmluZSBfcmF3X3NwaW5fdHJ5bG9jayh4KSAoIXRlc3RfYW5kX3NldF9iaXQoMCwgJih4KS0+bG9jaykpCisKKy8qCisgKiBSZWFkLXdyaXRlIHNwaW5sb2NrcywgYWxsb3dpbmcgbXVsdGlwbGUgcmVhZGVycyBidXQgb25seSBvbmUgd3JpdGVyLgorICoKKyAqIE5PVEUhIGl0IGlzIHF1aXRlIGNvbW1vbiB0byBoYXZlIHJlYWRlcnMgaW4gaW50ZXJydXB0cyBidXQgbm8gaW50ZXJydXB0CisgKiB3cml0ZXJzLiBGb3IgdGhvc2UgY2lyY3Vtc3RhbmNlcyB3ZSBjYW4gIm1peCIgaXJxLXNhZmUgbG9ja3MgLSBhbnkgd3JpdGVyCisgKiBuZWVkcyB0byBnZXQgYSBpcnEtc2FmZSB3cml0ZS1sb2NrLCBidXQgcmVhZGVycyBjYW4gZ2V0IG5vbi1pcnFzYWZlCisgKiByZWFkLWxvY2tzLgorICovCit0eXBlZGVmIHN0cnVjdCB7CisJc3BpbmxvY2tfdCBsb2NrOworCWF0b21pY190IGNvdW50ZXI7CisjaWZkZWYgQ09ORklHX1BSRUVNUFQKKwl1bnNpZ25lZCBpbnQgYnJlYWtfbG9jazsKKyNlbmRpZgorfSByd2xvY2tfdDsKKworI2RlZmluZSBSV19MT0NLX0JJQVMJCTB4MDEwMDAwMDAKKyNkZWZpbmUgUldfTE9DS19VTkxPQ0tFRAkocndsb2NrX3QpIHsgeyAwIH0sIHsgUldfTE9DS19CSUFTIH0gfQorI2RlZmluZSByd2xvY2tfaW5pdCh4KQkJZG8geyAqKHgpID0gUldfTE9DS19VTkxPQ0tFRDsgfSB3aGlsZSAoMCkKKworc3RhdGljIGlubGluZSB2b2lkIF9yYXdfcmVhZF9sb2NrKHJ3bG9ja190ICpydykKK3sKKwlfcmF3X3NwaW5fbG9jaygmcnctPmxvY2spOworCisJYXRvbWljX2luYygmcnctPmNvdW50ZXIpOworCisJX3Jhd19zcGluX3VubG9jaygmcnctPmxvY2spOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX3Jhd19yZWFkX3VubG9jayhyd2xvY2tfdCAqcncpCit7CisJX3Jhd19zcGluX2xvY2soJnJ3LT5sb2NrKTsKKworCWF0b21pY19kZWMoJnJ3LT5jb3VudGVyKTsKKworCV9yYXdfc3Bpbl91bmxvY2soJnJ3LT5sb2NrKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9yYXdfd3JpdGVfbG9jayhyd2xvY2tfdCAqcncpCit7CisJX3Jhd19zcGluX2xvY2soJnJ3LT5sb2NrKTsKKwlhdG9taWNfc2V0KCZydy0+Y291bnRlciwgLTEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX3Jhd193cml0ZV91bmxvY2socndsb2NrX3QgKnJ3KQoreworCWF0b21pY19zZXQoJnJ3LT5jb3VudGVyLCAwKTsKKwlfcmF3X3NwaW5fdW5sb2NrKCZydy0+bG9jayk7Cit9CisKKyNkZWZpbmUgX3Jhd19yZWFkX3RyeWxvY2sobG9jaykgZ2VuZXJpY19yYXdfcmVhZF90cnlsb2NrKGxvY2spCisKK3N0YXRpYyBpbmxpbmUgaW50IF9yYXdfd3JpdGVfdHJ5bG9jayhyd2xvY2tfdCAqcncpCit7CisJaWYgKGF0b21pY19zdWJfYW5kX3Rlc3QoUldfTE9DS19CSUFTLCAmcnctPmNvdW50ZXIpKQorCQlyZXR1cm4gMTsKKwkKKwlhdG9taWNfYWRkKFJXX0xPQ0tfQklBUywgJnJ3LT5jb3VudGVyKTsKKworCXJldHVybiAwOworfQorCisjZW5kaWYgLyogX19BU01fU0hfU1BJTkxPQ0tfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9zdGF0LmggYi9pbmNsdWRlL2FzbS1zaC9zdGF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE0ZTNmYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL3N0YXQuaApAQCAtMCwwICsxLDg0IEBACisjaWZuZGVmIF9fQVNNX1NIX1NUQVRfSAorI2RlZmluZSBfX0FTTV9TSF9TVEFUX0gKKworc3RydWN0IF9fb2xkX2tlcm5lbF9zdGF0IHsKKwl1bnNpZ25lZCBzaG9ydCBzdF9kZXY7CisJdW5zaWduZWQgc2hvcnQgc3RfaW5vOworCXVuc2lnbmVkIHNob3J0IHN0X21vZGU7CisJdW5zaWduZWQgc2hvcnQgc3Rfbmxpbms7CisJdW5zaWduZWQgc2hvcnQgc3RfdWlkOworCXVuc2lnbmVkIHNob3J0IHN0X2dpZDsKKwl1bnNpZ25lZCBzaG9ydCBzdF9yZGV2OworCXVuc2lnbmVkIGxvbmcgIHN0X3NpemU7CisJdW5zaWduZWQgbG9uZyAgc3RfYXRpbWU7CisJdW5zaWduZWQgbG9uZyAgc3RfbXRpbWU7CisJdW5zaWduZWQgbG9uZyAgc3RfY3RpbWU7Cit9OworCitzdHJ1Y3Qgc3RhdCB7CisJdW5zaWduZWQgc2hvcnQgc3RfZGV2OworCXVuc2lnbmVkIHNob3J0IF9fcGFkMTsKKwl1bnNpZ25lZCBsb25nIHN0X2lubzsKKwl1bnNpZ25lZCBzaG9ydCBzdF9tb2RlOworCXVuc2lnbmVkIHNob3J0IHN0X25saW5rOworCXVuc2lnbmVkIHNob3J0IHN0X3VpZDsKKwl1bnNpZ25lZCBzaG9ydCBzdF9naWQ7CisJdW5zaWduZWQgc2hvcnQgc3RfcmRldjsKKwl1bnNpZ25lZCBzaG9ydCBfX3BhZDI7CisJdW5zaWduZWQgbG9uZyAgc3Rfc2l6ZTsKKwl1bnNpZ25lZCBsb25nICBzdF9ibGtzaXplOworCXVuc2lnbmVkIGxvbmcgIHN0X2Jsb2NrczsKKwl1bnNpZ25lZCBsb25nICBzdF9hdGltZTsKKwl1bnNpZ25lZCBsb25nICBzdF9hdGltZV9uc2VjOworCXVuc2lnbmVkIGxvbmcgIHN0X210aW1lOworCXVuc2lnbmVkIGxvbmcgIHN0X210aW1lX25zZWM7CisJdW5zaWduZWQgbG9uZyAgc3RfY3RpbWU7CisJdW5zaWduZWQgbG9uZyAgc3RfY3RpbWVfbnNlYzsKKwl1bnNpZ25lZCBsb25nICBfX3VudXNlZDQ7CisJdW5zaWduZWQgbG9uZyAgX191bnVzZWQ1OworfTsKKworI2RlZmluZSBTVEFUX0hBVkVfTlNFQyAxCisKKy8qIFRoaXMgbWF0Y2hlcyBzdHJ1Y3Qgc3RhdDY0IGluIGdsaWJjMi4xLCBoZW5jZSB0aGUgYWJzb2x1dGVseQorICogaW5zYW5lIGFtb3VudHMgb2YgcGFkZGluZyBhcm91bmQgZGV2X3Qncy4KKyAqLworc3RydWN0IHN0YXQ2NCB7CisJdW5zaWduZWQgbG9uZyBsb25nCXN0X2RldjsKKwl1bnNpZ25lZCBjaGFyCV9fcGFkMFs0XTsKKworCXVuc2lnbmVkIGxvbmcJc3RfaW5vOworCXVuc2lnbmVkIGludAlzdF9tb2RlOworCXVuc2lnbmVkIGludAlzdF9ubGluazsKKworCXVuc2lnbmVkIGxvbmcJc3RfdWlkOworCXVuc2lnbmVkIGxvbmcJc3RfZ2lkOworCisJdW5zaWduZWQgbG9uZyBsb25nCXN0X3JkZXY7CisJdW5zaWduZWQgY2hhcglfX3BhZDNbNF07CisKKwlsb25nIGxvbmcJc3Rfc2l6ZTsKKwl1bnNpZ25lZCBsb25nCXN0X2Jsa3NpemU7CisKKyNpZiBkZWZpbmVkKF9fQklHX0VORElBTl9fKQorCXVuc2lnbmVkIGxvbmcJX19wYWQ0OwkJLyogRnV0dXJlIHBvc3NpYmxlIHN0X2Jsb2NrcyBoaSBiaXRzICovCisJdW5zaWduZWQgbG9uZwlzdF9ibG9ja3M7CS8qIE51bWJlciA1MTItYnl0ZSBibG9ja3MgYWxsb2NhdGVkLiAqLworI2Vsc2UgLyogTXVzdCBiZSBsaXR0bGUgKi8KKwl1bnNpZ25lZCBsb25nCXN0X2Jsb2NrczsJLyogTnVtYmVyIDUxMi1ieXRlIGJsb2NrcyBhbGxvY2F0ZWQuICovCisJdW5zaWduZWQgbG9uZwlfX3BhZDQ7CQkvKiBGdXR1cmUgcG9zc2libGUgc3RfYmxvY2tzIGhpIGJpdHMgKi8KKyNlbmRpZgorCisJdW5zaWduZWQgbG9uZwlzdF9hdGltZTsKKwl1bnNpZ25lZCBsb25nCXN0X2F0aW1lX25zZWM7CisKKwl1bnNpZ25lZCBsb25nCXN0X210aW1lOworCXVuc2lnbmVkIGxvbmcJc3RfbXRpbWVfbnNlYzsKKworCXVuc2lnbmVkIGxvbmcJc3RfY3RpbWU7CisJdW5zaWduZWQgbG9uZwlzdF9jdGltZV9uc2VjOyAKKworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQxOworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQyOworfTsKKworI2VuZGlmIC8qIF9fQVNNX1NIX1NUQVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvc3RhdGZzLmggYi9pbmNsdWRlL2FzbS1zaC9zdGF0ZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjAyYTAyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvc3RhdGZzLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fQVNNX1NIX1NUQVRGU19ICisjZGVmaW5lIF9fQVNNX1NIX1NUQVRGU19ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zdGF0ZnMuaD4KKworI2VuZGlmIC8qIF9fQVNNX1NIX1NUQVRGU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9zdHJpbmcuaCBiL2luY2x1ZGUvYXNtLXNoL3N0cmluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMGNmZjAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9zdHJpbmcuaApAQCAtMCwwICsxLDEyNyBAQAorI2lmbmRlZiBfX0FTTV9TSF9TVFJJTkdfSAorI2RlZmluZSBfX0FTTV9TSF9TVFJJTkdfSAorCisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5IE5paWJlIFl1dGFrYQorICogQnV0IGNvbnNpZGVyIHRoZXNlIHRyaXZpYWwgZnVuY3Rpb25zIHRvIGJlIHB1YmxpYyBkb21haW4uCisgKi8KKworI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJDUFkKK3N0YXRpYyBfX2lubGluZV9fIGNoYXIgKnN0cmNweShjaGFyICpfX2Rlc3QsIGNvbnN0IGNoYXIgKl9fc3JjKQoreworCXJlZ2lzdGVyIGNoYXIgKl9feGRlc3QgPSBfX2Rlc3Q7CisJdW5zaWduZWQgbG9uZyBfX2R1bW15OworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oIjE6XG5cdCIKKwkJCSAgICAgIm1vdi5iCUAlMSssICUyXG5cdCIKKwkJCSAgICAgIm1vdi5iCSUyLCBAJTBcblx0IgorCQkJICAgICAiY21wL2VxCSMwLCAlMlxuXHQiCisJCQkgICAgICJiZi9zCTFiXG5cdCIKKwkJCSAgICAgIiBhZGQJIzEsICUwXG5cdCIKKwkJCSAgICAgOiAiPXIiIChfX2Rlc3QpLCAiPXIiIChfX3NyYyksICI9JnoiIChfX2R1bW15KQorCQkJICAgICA6ICIwIiAoX19kZXN0KSwgIjEiIChfX3NyYykKKwkJCSAgICAgOiAibWVtb3J5IiwgInQiKTsKKworCXJldHVybiBfX3hkZXN0OworfQorCisjZGVmaW5lIF9fSEFWRV9BUkNIX1NUUk5DUFkKK3N0YXRpYyBfX2lubGluZV9fIGNoYXIgKnN0cm5jcHkoY2hhciAqX19kZXN0LCBjb25zdCBjaGFyICpfX3NyYywgc2l6ZV90IF9fbikKK3sKKwlyZWdpc3RlciBjaGFyICpfX3hkZXN0ID0gX19kZXN0OworCXVuc2lnbmVkIGxvbmcgX19kdW1teTsKKworCWlmIChfX24gPT0gMCkKKwkJcmV0dXJuIF9feGRlc3Q7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJIjE6XG4iCisJCSJtb3YuYglAJTErLCAlMlxuXHQiCisJCSJtb3YuYgklMiwgQCUwXG5cdCIKKwkJImNtcC9lcQkjMCwgJTJcblx0IgorCQkiYnQvcwkyZlxuXHQiCisJCSIgY21wL2VxCSU1LCUxXG5cdCIKKwkJImJmL3MJMWJcblx0IgorCQkiIGFkZAkjMSwgJTBcbiIKKwkJIjI6IgorCQk6ICI9ciIgKF9fZGVzdCksICI9ciIgKF9fc3JjKSwgIj0meiIgKF9fZHVtbXkpCisJCTogIjAiIChfX2Rlc3QpLCAiMSIgKF9fc3JjKSwgInIiIChfX3NyYytfX24pCisJCTogIm1lbW9yeSIsICJ0Iik7CisKKwlyZXR1cm4gX194ZGVzdDsKK30KKworI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJDTVAKK3N0YXRpYyBfX2lubGluZV9fIGludCBzdHJjbXAoY29uc3QgY2hhciAqX19jcywgY29uc3QgY2hhciAqX19jdCkKK3sKKwlyZWdpc3RlciBpbnQgX19yZXM7CisJdW5zaWduZWQgbG9uZyBfX2R1bW15OworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSJtb3YuYglAJTErLCAlM1xuIgorCQkiMTpcblx0IgorCQkibW92LmIJQCUwKywgJTJcblx0IgorCQkiY21wL2VxICMwLCAlM1xuXHQiCisJCSJidAkyZlxuXHQiCisJCSJjbXAvZXEgJTIsICUzXG5cdCIKKwkJImJ0L3MJMWJcblx0IgorCQkiIG1vdi5iCUAlMSssICUzXG5cdCIKKwkJImFkZAkjLTIsICUxXG5cdCIKKwkJIm1vdi5iCUAlMSwgJTNcblx0IgorCQkic3ViCSUzLCAlMlxuIgorCQkiMjoiCisJCTogIj1yIiAoX19jcyksICI9ciIgKF9fY3QpLCAiPSZyIiAoX19yZXMpLCAiPSZ6IiAoX19kdW1teSkKKwkJOiAiMCIgKF9fY3MpLCAiMSIgKF9fY3QpCisJCTogInQiKTsKKworCXJldHVybiBfX3JlczsKK30KKworI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJOQ01QCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgc3RybmNtcChjb25zdCBjaGFyICpfX2NzLCBjb25zdCBjaGFyICpfX2N0LCBzaXplX3QgX19uKQoreworCXJlZ2lzdGVyIGludCBfX3JlczsKKwl1bnNpZ25lZCBsb25nIF9fZHVtbXk7CisKKwlpZiAoX19uID09IDApCisJCXJldHVybiAwOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSJtb3YuYglAJTErLCAlM1xuIgorCQkiMTpcblx0IgorCQkibW92LmIJQCUwKywgJTJcblx0IgorCQkiY21wL2VxICU2LCAlMFxuXHQiCisJCSJidC9zCTJmXG5cdCIKKwkJIiBjbXAvZXEgIzAsICUzXG5cdCIKKwkJImJ0L3MJM2Zcblx0IgorCQkiIGNtcC9lcSAlMywgJTJcblx0IgorCQkiYnQvcwkxYlxuXHQiCisJCSIgbW92LmIJQCUxKywgJTNcblx0IgorCQkiYWRkCSMtMiwgJTFcblx0IgorCQkibW92LmIJQCUxLCAlM1xuIgorCQkiMjpcblx0IgorCQkic3ViCSUzLCAlMlxuIgorCQkiMzoiCisJCToiPXIiIChfX2NzKSwgIj1yIiAoX19jdCksICI9JnIiIChfX3JlcyksICI9JnoiIChfX2R1bW15KQorCQk6ICIwIiAoX19jcyksICIxIiAoX19jdCksICJyIiAoX19jcytfX24pCisJCTogInQiKTsKKworCXJldHVybiBfX3JlczsKK30KKworI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1TRVQKK2V4dGVybiB2b2lkICptZW1zZXQodm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19jb3VudCk7CisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNQ1BZCitleHRlcm4gdm9pZCAqbWVtY3B5KHZvaWQgKl9fdG8sIF9fY29uc3RfXyB2b2lkICpfX2Zyb20sIHNpemVfdCBfX24pOworCisjZGVmaW5lIF9fSEFWRV9BUkNIX01FTU1PVkUKK2V4dGVybiB2b2lkICptZW1tb3ZlKHZvaWQgKl9fZGVzdCwgX19jb25zdF9fIHZvaWQgKl9fc3JjLCBzaXplX3QgX19uKTsKKworI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1DSFIKK2V4dGVybiB2b2lkICptZW1jaHIoY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKTsKKworI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJMRU4KK2V4dGVybiBzaXplX3Qgc3RybGVuKGNvbnN0IGNoYXIgKik7CisKKyNlbmRpZiAvKiBfX0FTTV9TSF9TVFJJTkdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1zaC9zeXN0ZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGEzYzJkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvc3lzdGVtLmgKQEAgLTAsMCArMSwyNjQgQEAKKyNpZm5kZWYgX19BU01fU0hfU1lTVEVNX0gKKyNkZWZpbmUgX19BU01fU0hfU1lTVEVNX0gKKworLyoKKyAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCAgTmlpYmUgWXV0YWthICAmICBLYXogS29qaW1hCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgUGF1bCBNdW5kdAorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworLyoKKyAqCXN3aXRjaF90bygpIHNob3VsZCBzd2l0Y2ggdGFza3MgdG8gdGFzayBuciBuLCBmaXJzdAorICovCisKKyNkZWZpbmUgc3dpdGNoX3RvKHByZXYsIG5leHQsIGxhc3QpIGRvIHsJCQkJXAorIHRhc2tfdCAqX19sYXN0OwkJCQkJCQlcCisgcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyAqX190czEgX19hc21fXyAoInIxIikgPSAmcHJldi0+dGhyZWFkLnNwOwlcCisgcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyAqX190czIgX19hc21fXyAoInIyIikgPSAmcHJldi0+dGhyZWFkLnBjOwlcCisgcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyAqX190czQgX19hc21fXyAoInI0IikgPSAodW5zaWduZWQgbG9uZyAqKXByZXY7CVwKKyByZWdpc3RlciB1bnNpZ25lZCBsb25nICpfX3RzNSBfX2FzbV9fICgicjUiKSA9ICh1bnNpZ25lZCBsb25nICopbmV4dDsJXAorIHJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgKl9fdHM2IF9fYXNtX18gKCJyNiIpID0gJm5leHQtPnRocmVhZC5zcDsJXAorIHJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX190czcgX19hc21fXyAoInI3IikgPSBuZXh0LT50aHJlYWQucGM7CQlcCisgX19hc21fXyBfX3ZvbGF0aWxlX18gKCIuYmFsaWduIDRcblx0IiAJCQkJCVwKKwkJICAgICAgICJzdGMubAlnYnIsIEAtcjE1XG5cdCIgCQkJXAorCQkgICAgICAgInN0cy5sCXByLCBALXIxNVxuXHQiIAkJCQlcCisJCSAgICAgICAibW92LmwJcjgsIEAtcjE1XG5cdCIgCQkJCVwKKwkJICAgICAgICJtb3YubAlyOSwgQC1yMTVcblx0IiAJCQkJXAorCQkgICAgICAgIm1vdi5sCXIxMCwgQC1yMTVcblx0IiAJCQlcCisJCSAgICAgICAibW92LmwJcjExLCBALXIxNVxuXHQiIAkJCVwKKwkJICAgICAgICJtb3YubAlyMTIsIEAtcjE1XG5cdCIgCQkJXAorCQkgICAgICAgIm1vdi5sCXIxMywgQC1yMTVcblx0IiAJCQlcCisJCSAgICAgICAibW92LmwJcjE0LCBALXIxNVxuXHQiIAkJCVwKKwkJICAgICAgICJtb3YubAlyMTUsIEByMQkhIHNhdmUgU1Bcblx0IgkJXAorCQkgICAgICAgIm1vdi5sCUByNiwgcjE1CSEgY2hhbmdlIHRvIG5ldyBzdGFja1xuXHQiIFwKKwkJICAgICAgICJtb3ZhCTFmLCAlMFxuXHQiIAkJCQlcCisJCSAgICAgICAibW92LmwJJTAsIEByMgkJISBzYXZlIFBDXG5cdCIgCQlcCisJCSAgICAgICAibW92LmwJMmYsICUwXG5cdCIgCQkJCVwKKwkJICAgICAgICJqbXAJQCUwCQkhIGNhbGwgX19zd2l0Y2hfdG9cblx0IiBcCisJCSAgICAgICAiIGxkcwlyNywgcHIJCSEgIHdpdGggcmV0dXJuIHRvIG5ldyBQQ1xuXHQiIFwKKwkJICAgICAgICIuYmFsaWduCTRcbiIJCQkJCVwKKwkJICAgICAgICIyOlxuXHQiCQkJCQkJXAorCQkgICAgICAgIi5sb25nCV9fc3dpdGNoX3RvXG4iCQkJCVwKKwkJICAgICAgICIxOlxuXHQiCQkJCQkJXAorCQkgICAgICAgIm1vdi5sCUByMTUrLCByMTRcblx0IgkJCQlcCisJCSAgICAgICAibW92LmwJQHIxNSssIHIxM1xuXHQiCQkJCVwKKwkJICAgICAgICJtb3YubAlAcjE1KywgcjEyXG5cdCIJCQkJXAorCQkgICAgICAgIm1vdi5sCUByMTUrLCByMTFcblx0IgkJCQlcCisJCSAgICAgICAibW92LmwJQHIxNSssIHIxMFxuXHQiCQkJCVwKKwkJICAgICAgICJtb3YubAlAcjE1Kywgcjlcblx0IgkJCQlcCisJCSAgICAgICAibW92LmwJQHIxNSssIHI4XG5cdCIJCQkJXAorCQkgICAgICAgImxkcy5sCUByMTUrLCBwclxuXHQiCQkJCVwKKwkJICAgICAgICJsZGMubAlAcjE1KywgZ2JyXG5cdCIJCQkJXAorCQkgICAgICAgOiAiPXoiIChfX2xhc3QpCQkJCQlcCisJCSAgICAgICA6ICJyIiAoX190czEpLCAiciIgKF9fdHMyKSwgInIiIChfX3RzNCksIAlcCisJCQkgInIiIChfX3RzNSksICJyIiAoX190czYpLCAiciIgKF9fdHM3KSAJCVwKKwkJICAgICAgIDogInIzIiwgInQiKTsJCQkJCVwKKwlsYXN0ID0gX19sYXN0OwkJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIG5vcCgpIF9fYXNtX18gX192b2xhdGlsZV9fICgibm9wIikKKworCisjZGVmaW5lIHhjaGcocHRyLHgpICgoX190eXBlb2ZfXygqKHB0cikpKV9feGNoZygodW5zaWduZWQgbG9uZykoeCksKHB0ciksc2l6ZW9mKCoocHRyKSkpKQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIHRhcyh2b2xhdGlsZSBpbnQgKm0pCit7IC8qICNkZWZpbmUgdGFzKHB0cikgKHhjaGcoKHB0ciksMSkpICovCisJdW5zaWduZWQgbG9uZyByZXR2YWw7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInRhcy5iCUAlMVxuXHQiCisJCQkgICAgICAibW92dAklMCIKKwkJCSAgICAgIDogIj1yIiAocmV0dmFsKTogInIiIChtKTogInQiLCAibWVtb3J5Iik7CisJcmV0dXJuIHJldHZhbDsKK30KKworZXh0ZXJuIHZvaWQgX194Y2hnX2NhbGxlZF93aXRoX2JhZF9wb2ludGVyKHZvaWQpOworCisjZGVmaW5lIG1iKCkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCIiOiA6IDoibWVtb3J5IikKKyNkZWZpbmUgcm1iKCkJbWIoKQorI2RlZmluZSB3bWIoKQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIiI6IDogOiJtZW1vcnkiKQorI2RlZmluZSByZWFkX2JhcnJpZXJfZGVwZW5kcygpCWRvIHsgfSB3aGlsZSgwKQorCisjaWZkZWYgQ09ORklHX1NNUAorI2RlZmluZSBzbXBfbWIoKQltYigpCisjZGVmaW5lIHNtcF9ybWIoKQlybWIoKQorI2RlZmluZSBzbXBfd21iKCkJd21iKCkKKyNkZWZpbmUgc21wX3JlYWRfYmFycmllcl9kZXBlbmRzKCkJcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQorI2Vsc2UKKyNkZWZpbmUgc21wX21iKCkJYmFycmllcigpCisjZGVmaW5lIHNtcF9ybWIoKQliYXJyaWVyKCkKKyNkZWZpbmUgc21wX3dtYigpCWJhcnJpZXIoKQorI2RlZmluZSBzbXBfcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQlkbyB7IH0gd2hpbGUoMCkKKyNlbmRpZgorCisjZGVmaW5lIHNldF9tYih2YXIsIHZhbHVlKSBkbyB7IHhjaGcoJnZhciwgdmFsdWUpOyB9IHdoaWxlICgwKQorI2RlZmluZSBzZXRfd21iKHZhciwgdmFsdWUpIGRvIHsgdmFyID0gdmFsdWU7IHdtYigpOyB9IHdoaWxlICgwKQorCisvKiBJbnRlcnJ1cHQgQ29udHJvbCAqLworc3RhdGljIF9faW5saW5lX18gdm9pZCBsb2NhbF9pcnFfZW5hYmxlKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBfX2R1bW15MCwgX19kdW1teTE7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RjCXNyLCAlMFxuXHQiCisJCQkgICAgICJhbmQJJTEsICUwXG5cdCIKKwkJCSAgICAgInN0YwlyNl9iYW5rLCAlMVxuXHQiCisJCQkgICAgICJvcgklMSwgJTBcblx0IgorCQkJICAgICAibGRjCSUwLCBzciIKKwkJCSAgICAgOiAiPSZyIiAoX19kdW1teTApLCAiPXIiIChfX2R1bW15MSkKKwkJCSAgICAgOiAiMSIgKH4weDAwMDAwMGYwKQorCQkJICAgICA6ICJtZW1vcnkiKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBsb2NhbF9pcnFfZGlzYWJsZSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgX19kdW1teTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RjCXNyLCAlMFxuXHQiCisJCQkgICAgICJvcgkjMHhmMCwgJTBcblx0IgorCQkJICAgICAibGRjCSUwLCBzciIKKwkJCSAgICAgOiAiPSZ6IiAoX19kdW1teSkKKwkJCSAgICAgOiAvKiBubyBpbnB1dHMgKi8KKwkJCSAgICAgOiAibWVtb3J5Iik7Cit9CisKKyNkZWZpbmUgbG9jYWxfc2F2ZV9mbGFncyh4KSBcCisJX19hc21fXygic3RjIHNyLCAlMDsgYW5kICMweGYwLCAlMCIgOiAiPSZ6IiAoeCkgOi8qKi86ICJtZW1vcnkiICkKKworI2RlZmluZSBpcnFzX2Rpc2FibGVkKCkJCQlcCisoewkJCQkJXAorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CQlcCisJbG9jYWxfc2F2ZV9mbGFncyhmbGFncyk7CVwKKwkoZmxhZ3MgIT0gMCk7CQkJXAorfSkKKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBsb2NhbF9pcnFfc2F2ZSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIF9fZHVtbXk7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RjCXNyLCAlMVxuXHQiCisJCQkgICAgICJtb3YJJTEsICUwXG5cdCIKKwkJCSAgICAgIm9yCSMweGYwLCAlMFxuXHQiCisJCQkgICAgICJsZGMJJTAsIHNyXG5cdCIKKwkJCSAgICAgIm1vdgklMSwgJTBcblx0IgorCQkJICAgICAiYW5kCSMweGYwLCAlMCIKKwkJCSAgICAgOiAiPSZ6IiAoZmxhZ3MpLCAiPSZyIiAoX19kdW1teSkKKwkJCSAgICAgOi8qKi8KKwkJCSAgICAgOiAibWVtb3J5IiApOworCXJldHVybiBmbGFnczsKK30KKworI2lmZGVmIERFQlVHX0NMSV9TVEkKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgIGxvY2FsX2lycV9yZXN0b3JlKHVuc2lnbmVkIGxvbmcgeCkKK3sKKwlpZiAoKHggJiAweDAwMDAwMGYwKSAhPSAweDAwMDAwMGYwKQorCQlsb2NhbF9pcnFfZW5hYmxlKCk7CisJZWxzZSB7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJCWxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpOworCisJCWlmIChmbGFncyA9PSAwKSB7CisJCQlleHRlcm4gdm9pZCBkdW1wX3N0YWNrKHZvaWQpOworCQkJcHJpbnRrKEtFUk5fRVJSICJCVUchXG4iKTsKKwkJCWR1bXBfc3RhY2soKTsKKwkJCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJCX0KKwl9Cit9CisjZWxzZQorI2RlZmluZSBsb2NhbF9pcnFfcmVzdG9yZSh4KSBkbyB7IAkJCVwKKwlpZiAoKHggJiAweDAwMDAwMGYwKSAhPSAweDAwMDAwMGYwKQkJXAorCQlsb2NhbF9pcnFfZW5hYmxlKCk7CQkJCVwKK30gd2hpbGUgKDApCisjZW5kaWYKKworI2RlZmluZSByZWFsbHlfcmVzdG9yZV9mbGFncyh4KSBkbyB7IAkJCVwKKwlpZiAoKHggJiAweDAwMDAwMGYwKSAhPSAweDAwMDAwMGYwKQkJXAorCQlsb2NhbF9pcnFfZW5hYmxlKCk7CQkJCVwKKwllbHNlCQkJCQkJXAorCQlsb2NhbF9pcnFfZGlzYWJsZSgpOwkJCQlcCit9IHdoaWxlICgwKQorCisvKgorICogSnVtcCB0byBQMiBhcmVhLgorICogV2hlbiBoYW5kbGluZyBUTEIgb3IgY2FjaGVzLCB3ZSBuZWVkIHRvIGRvIGl0IGZyb20gUDIgYXJlYS4KKyAqLworI2RlZmluZSBqdW1wX3RvX1AyKCkJCQlcCitkbyB7CQkJCQlcCisJdW5zaWduZWQgbG9uZyBfX2R1bW15OwkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKAkJXAorCQkibW92LmwJMWYsICUwXG5cdCIJXAorCQkib3IJJTEsICUwXG5cdCIJXAorCQkiam1wCUAlMFxuXHQiCVwKKwkJIiBub3Bcblx0IiAJCVwKKwkJIi5iYWxpZ24gNFxuIgkJXAorCQkiMToJLmxvbmcgMmZcbiIJXAorCQkiMjoiCQkJXAorCQk6ICI9JnIiIChfX2R1bW15KQlcCisJCTogInIiICgweDIwMDAwMDAwKSk7CVwKK30gd2hpbGUgKDApCisKKy8qCisgKiBCYWNrIHRvIFAxIGFyZWEuCisgKi8KKyNkZWZpbmUgYmFja190b19QMSgpCQkJCQlcCitkbyB7CQkJCQkJCVwKKwl1bnNpZ25lZCBsb25nIF9fZHVtbXk7CQkJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJXAorCQkibm9wO25vcDtub3A7bm9wO25vcDtub3A7bm9wXG5cdCIJXAorCQkibW92LmwJMWYsICUwXG5cdCIJCQlcCisJCSJqbXAJQCUwXG5cdCIJCQlcCisJCSIgbm9wXG5cdCIJCQkJXAorCQkiLmJhbGlnbiA0XG4iCQkJCVwKKwkJIjE6CS5sb25nIDJmXG4iCQkJXAorCQkiMjoiCQkJCQlcCisJCTogIj0mciIgKF9fZHVtbXkpKTsJCQlcCit9IHdoaWxlICgwKQorCisvKiBGb3Igc3BpbmxvY2tzIGV0YyAqLworI2RlZmluZSBsb2NhbF9pcnFfc2F2ZSh4KQl4ID0gbG9jYWxfaXJxX3NhdmUoKQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIHhjaGdfdTMyKHZvbGF0aWxlIGludCAqIG0sIHVuc2lnbmVkIGxvbmcgdmFsKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHJldHZhbDsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlyZXR2YWwgPSAqbTsKKwkqbSA9IHZhbDsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyB4Y2hnX3U4KHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKiBtLCB1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzLCByZXR2YWw7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJcmV0dmFsID0gKm07CisJKm0gPSB2YWwgJiAweGZmOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIF9feGNoZyh1bnNpZ25lZCBsb25nIHgsIHZvbGF0aWxlIHZvaWQgKiBwdHIsIGludCBzaXplKQoreworCXN3aXRjaCAoc2l6ZSkgeworCWNhc2UgNDoKKwkJcmV0dXJuIHhjaGdfdTMyKHB0ciwgeCk7CisJCWJyZWFrOworCWNhc2UgMToKKwkJcmV0dXJuIHhjaGdfdTgocHRyLCB4KTsKKwkJYnJlYWs7CisJfQorCV9feGNoZ19jYWxsZWRfd2l0aF9iYWRfcG9pbnRlcigpOworCXJldHVybiB4OworfQorCisvKiBYWFgKKyAqIGRpc2FibGUgaGx0IGR1cmluZyBjZXJ0YWluIGNyaXRpY2FsIGkvbyBvcGVyYXRpb25zCisgKi8KKyNkZWZpbmUgSEFWRV9ESVNBQkxFX0hMVAordm9pZCBkaXNhYmxlX2hsdCh2b2lkKTsKK3ZvaWQgZW5hYmxlX2hsdCh2b2lkKTsKKworI2RlZmluZSBhcmNoX2FsaWduX3N0YWNrKHgpICh4KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL3N5c3RlbWgvNzc1MXN5c3RlbWguaCBiL2luY2x1ZGUvYXNtLXNoL3N5c3RlbWgvNzc1MXN5c3RlbWguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTcwNTMxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvc3lzdGVtaC83NzUxc3lzdGVtaC5oCkBAIC0wLDAgKzEsNjggQEAKKyNpZm5kZWYgX19BU01fU0hfU1lTVEVNSF83NzUxU1lTVEVNSF9ICisjZGVmaW5lIF9fQVNNX1NIX1NZU1RFTUhfNzc1MVNZU1RFTUhfSAorCisvKgorICogbGludXgvaW5jbHVkZS9hc20tc2gvc3lzdGVtaC83NzUxc3lzdGVtaC5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwICBLYXp1bW90byBLb2ppbWEKKyAqCisgKiBIaXRhY2hpIFN5c3RlbUggc3VwcG9ydAorCisgKiBNb2RpZmllZCBmb3IgNzc1MSBTeXN0ZW1IIGJ5CisgKiBKb25hdGhhbiBTaG9ydCwgMjAwMi4KKyAqLworCisvKiBCb3ggc3BlY2lmaWMgYWRkcmVzc2VzLiAgKi8KKworI2RlZmluZSBQQV9ST00JCTB4MDAwMDAwMDAJLyogRVBST00gKi8KKyNkZWZpbmUgUEFfUk9NX1NJWkUJMHgwMDQwMDAwMAkvKiBFUFJPTSBzaXplIDRNIGJ5dGUgKi8KKyNkZWZpbmUgUEFfRlJPTQkJMHgwMTAwMDAwMAkvKiBFUFJPTSAqLworI2RlZmluZSBQQV9GUk9NX1NJWkUJMHgwMDQwMDAwMAkvKiBFUFJPTSBzaXplIDRNIGJ5dGUgKi8KKyNkZWZpbmUgUEFfRVhUMQkJMHgwNDAwMDAwMAorI2RlZmluZSBQQV9FWFQxX1NJWkUJMHgwNDAwMDAwMAorI2RlZmluZSBQQV9FWFQyCQkweDA4MDAwMDAwCisjZGVmaW5lIFBBX0VYVDJfU0laRQkweDA0MDAwMDAwCisjZGVmaW5lIFBBX1NEUkFNCTB4MGMwMDAwMDAKKyNkZWZpbmUgUEFfU0RSQU1fU0laRQkweDA0MDAwMDAwCisKKyNkZWZpbmUgUEFfRVhUNAkJMHgxMjAwMDAwMAorI2RlZmluZSBQQV9FWFQ0X1NJWkUJMHgwMjAwMDAwMAorI2RlZmluZSBQQV9FWFQ1CQkweDE0MDAwMDAwCisjZGVmaW5lIFBBX0VYVDVfU0laRQkweDA0MDAwMDAwCisjZGVmaW5lIFBBX1BDSUMJCTB4MTgwMDAwMDAJLyogTVItU0hQQy0wMSBQQ01DSUEgKi8KKworI2RlZmluZSBQQV9ESVBTVzAJMHhiOTAwMDAwMAkvKiBEaXAgc3dpdGNoIDUsNiAqLworI2RlZmluZSBQQV9ESVBTVzEJMHhiOTAwMDAwMgkvKiBEaXAgc3dpdGNoIDcsOCAqLworI2RlZmluZSBQQV9MRUQJCTB4YmEwMDAwMDAJLyogTEVEICovCisjZGVmaW5lCVBBX0JDUgkJMHhiYjAwMDAwMAkvKiBGUEdBIG9uIHRoZSBNUzc3NTFTRTAxICovCisKKyNkZWZpbmUgUEFfTVJTSFBDCTB4YjgzZmZmZTAJLyogTVItU0hQQy0wMSBQQ01DSUEgY29udHJvbGVyICovCisjZGVmaW5lIFBBX01SU0hQQ19NVzEJMHhiODQwMDAwMAkvKiBNUi1TSFBDLTAxIG1lbW9yeSB3aW5kb3cgYmFzZSAqLworI2RlZmluZSBQQV9NUlNIUENfTVcyCTB4Yjg1MDAwMDAJLyogTVItU0hQQy0wMSBhdHRyaWJ1dGUgd2luZG93IGJhc2UgKi8KKyNkZWZpbmUgUEFfTVJTSFBDX0lPCTB4Yjg2MDAwMDAJLyogTVItU0hQQy0wMSBJL08gd2luZG93IGJhc2UgKi8KKyNkZWZpbmUgTVJTSFBDX01PREUgICAgIChQQV9NUlNIUEMgKyA0KQorI2RlZmluZSBNUlNIUENfT1BUSU9OICAgKFBBX01SU0hQQyArIDYpCisjZGVmaW5lIE1SU0hQQ19DU1IgICAgICAoUEFfTVJTSFBDICsgOCkKKyNkZWZpbmUgTVJTSFBDX0lTUiAgICAgIChQQV9NUlNIUEMgKyAxMCkKKyNkZWZpbmUgTVJTSFBDX0lDUiAgICAgIChQQV9NUlNIUEMgKyAxMikKKyNkZWZpbmUgTVJTSFBDX0NQV0NSICAgIChQQV9NUlNIUEMgKyAxNCkKKyNkZWZpbmUgTVJTSFBDX01XMENSMSAgIChQQV9NUlNIUEMgKyAxNikKKyNkZWZpbmUgTVJTSFBDX01XMUNSMSAgIChQQV9NUlNIUEMgKyAxOCkKKyNkZWZpbmUgTVJTSFBDX0lPV0NSMSAgIChQQV9NUlNIUEMgKyAyMCkKKyNkZWZpbmUgTVJTSFBDX01XMENSMiAgIChQQV9NUlNIUEMgKyAyMikKKyNkZWZpbmUgTVJTSFBDX01XMUNSMiAgIChQQV9NUlNIUEMgKyAyNCkKKyNkZWZpbmUgTVJTSFBDX0lPV0NSMiAgIChQQV9NUlNIUEMgKyAyNikKKyNkZWZpbmUgTVJTSFBDX0NEQ1IgICAgIChQQV9NUlNIUEMgKyAyOCkKKyNkZWZpbmUgTVJTSFBDX1BDSUNfSU5GTyAoUEFfTVJTSFBDICsgMzApCisKKyNkZWZpbmUgQkNSX0lMQ1JBCShQQV9CQ1IgKyAwKQorI2RlZmluZSBCQ1JfSUxDUkIJKFBBX0JDUiArIDIpCisjZGVmaW5lIEJDUl9JTENSQwkoUEFfQkNSICsgNCkKKyNkZWZpbmUgQkNSX0lMQ1JECShQQV9CQ1IgKyA2KQorI2RlZmluZSBCQ1JfSUxDUkUJKFBBX0JDUiArIDgpCisjZGVmaW5lIEJDUl9JTENSRgkoUEFfQkNSICsgMTApCisjZGVmaW5lIEJDUl9JTENSRwkoUEFfQkNSICsgMTIpCisKKyNkZWZpbmUgSVJRXzc5Qzk3MwkxMworCisjZW5kaWYgIC8qIF9fQVNNX1NIX1NZU1RFTUhfNzc1MVNZU1RFTUhfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvc3lzdGVtaC9pby5oIGIvaW5jbHVkZS9hc20tc2gvc3lzdGVtaC9pby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyNzg0OWIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9zeXN0ZW1oL2lvLmgKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLXNoL3N5c3RlbWgvaW8uaAorICoKKyAqIFN0dXBpZCBJL08gZGVmaW5pdGlvbnMgZm9yIFN5c3RlbUgsIGNsb25lZCBmcm9tIFNFNzc1MS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgIFBhdWwgTXVuZHQKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfX0FTTV9TSF9TWVNURU1IX0lPX0gKKyNkZWZpbmUgX19BU01fU0hfU1lTVEVNSF9JT19ICisKK2V4dGVybiB1bnNpZ25lZCBjaGFyIHNoNzc1MXN5c3RlbWhfaW5iKHVuc2lnbmVkIGxvbmcgcG9ydCk7CitleHRlcm4gdW5zaWduZWQgc2hvcnQgc2g3NzUxc3lzdGVtaF9pbncodW5zaWduZWQgbG9uZyBwb3J0KTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgc2g3NzUxc3lzdGVtaF9pbmwodW5zaWduZWQgbG9uZyBwb3J0KTsKKworZXh0ZXJuIHZvaWQgc2g3NzUxc3lzdGVtaF9vdXRiKHVuc2lnbmVkIGNoYXIgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCk7CitleHRlcm4gdm9pZCBzaDc3NTFzeXN0ZW1oX291dHcodW5zaWduZWQgc2hvcnQgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCk7CitleHRlcm4gdm9pZCBzaDc3NTFzeXN0ZW1oX291dGwodW5zaWduZWQgaW50IHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpOworCitleHRlcm4gdW5zaWduZWQgY2hhciBzaDc3NTFzeXN0ZW1oX2luYl9wKHVuc2lnbmVkIGxvbmcgcG9ydCk7CitleHRlcm4gdm9pZCBzaDc3NTFzeXN0ZW1oX291dGJfcCh1bnNpZ25lZCBjaGFyIHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpOworCitleHRlcm4gdm9pZCBzaDc3NTFzeXN0ZW1oX2luc2IodW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKK2V4dGVybiB2b2lkIHNoNzc1MXN5c3RlbWhfaW5zdyh1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpOworZXh0ZXJuIHZvaWQgc2g3NzUxc3lzdGVtaF9pbnNsKHVuc2lnbmVkIGxvbmcgcG9ydCwgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCk7CitleHRlcm4gdm9pZCBzaDc3NTFzeXN0ZW1oX291dHNiKHVuc2lnbmVkIGxvbmcgcG9ydCwgY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCk7CitleHRlcm4gdm9pZCBzaDc3NTFzeXN0ZW1oX291dHN3KHVuc2lnbmVkIGxvbmcgcG9ydCwgY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCk7CitleHRlcm4gdm9pZCBzaDc3NTFzeXN0ZW1oX291dHNsKHVuc2lnbmVkIGxvbmcgcG9ydCwgY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCk7CisKK2V4dGVybiB1bnNpZ25lZCBjaGFyIHNoNzc1MXN5c3RlbWhfcmVhZGIodW5zaWduZWQgbG9uZyBhZGRyKTsKK2V4dGVybiB1bnNpZ25lZCBzaG9ydCBzaDc3NTFzeXN0ZW1oX3JlYWR3KHVuc2lnbmVkIGxvbmcgYWRkcik7CitleHRlcm4gdW5zaWduZWQgaW50IHNoNzc1MXN5c3RlbWhfcmVhZGwodW5zaWduZWQgbG9uZyBhZGRyKTsKK2V4dGVybiB2b2lkIHNoNzc1MXN5c3RlbWhfd3JpdGViKHVuc2lnbmVkIGNoYXIgYiwgdW5zaWduZWQgbG9uZyBhZGRyKTsKK2V4dGVybiB2b2lkIHNoNzc1MXN5c3RlbWhfd3JpdGV3KHVuc2lnbmVkIHNob3J0IGIsIHVuc2lnbmVkIGxvbmcgYWRkcik7CitleHRlcm4gdm9pZCBzaDc3NTFzeXN0ZW1oX3dyaXRlbCh1bnNpZ25lZCBpbnQgYiwgdW5zaWduZWQgbG9uZyBhZGRyKTsKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc2g3NzUxc3lzdGVtaF9pc2FfcG9ydDJhZGRyKHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKKworI2VuZGlmIC8qIF9fQVNNX1NIX1NZU1RFTUhfSU9fSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC90ZXJtYml0cy5oIGIvaW5jbHVkZS9hc20tc2gvdGVybWJpdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Zjk4MjJhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvdGVybWJpdHMuaApAQCAtMCwwICsxLDE3MyBAQAorI2lmbmRlZiBfX0FTTV9TSF9URVJNQklUU19ICisjZGVmaW5lIF9fQVNNX1NIX1RFUk1CSVRTX0gKKworI2luY2x1ZGUgPGxpbnV4L3Bvc2l4X3R5cGVzLmg+CisKK3R5cGVkZWYgdW5zaWduZWQgY2hhcgljY190OwordHlwZWRlZiB1bnNpZ25lZCBpbnQJc3BlZWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50CXRjZmxhZ190OworCisjZGVmaW5lIE5DQ1MgMTkKK3N0cnVjdCB0ZXJtaW9zIHsKKwl0Y2ZsYWdfdCBjX2lmbGFnOwkJLyogaW5wdXQgbW9kZSBmbGFncyAqLworCXRjZmxhZ190IGNfb2ZsYWc7CQkvKiBvdXRwdXQgbW9kZSBmbGFncyAqLworCXRjZmxhZ190IGNfY2ZsYWc7CQkvKiBjb250cm9sIG1vZGUgZmxhZ3MgKi8KKwl0Y2ZsYWdfdCBjX2xmbGFnOwkJLyogbG9jYWwgbW9kZSBmbGFncyAqLworCWNjX3QgY19saW5lOwkJCS8qIGxpbmUgZGlzY2lwbGluZSAqLworCWNjX3QgY19jY1tOQ0NTXTsJCS8qIGNvbnRyb2wgY2hhcmFjdGVycyAqLworfTsKKworLyogY19jYyBjaGFyYWN0ZXJzICovCisjZGVmaW5lIFZJTlRSIDAKKyNkZWZpbmUgVlFVSVQgMQorI2RlZmluZSBWRVJBU0UgMgorI2RlZmluZSBWS0lMTCAzCisjZGVmaW5lIFZFT0YgNAorI2RlZmluZSBWVElNRSA1CisjZGVmaW5lIFZNSU4gNgorI2RlZmluZSBWU1dUQyA3CisjZGVmaW5lIFZTVEFSVCA4CisjZGVmaW5lIFZTVE9QIDkKKyNkZWZpbmUgVlNVU1AgMTAKKyNkZWZpbmUgVkVPTCAxMQorI2RlZmluZSBWUkVQUklOVCAxMgorI2RlZmluZSBWRElTQ0FSRCAxMworI2RlZmluZSBWV0VSQVNFIDE0CisjZGVmaW5lIFZMTkVYVCAxNQorI2RlZmluZSBWRU9MMiAxNgorCisvKiBjX2lmbGFnIGJpdHMgKi8KKyNkZWZpbmUgSUdOQlJLCTAwMDAwMDEKKyNkZWZpbmUgQlJLSU5UCTAwMDAwMDIKKyNkZWZpbmUgSUdOUEFSCTAwMDAwMDQKKyNkZWZpbmUgUEFSTVJLCTAwMDAwMTAKKyNkZWZpbmUgSU5QQ0sJMDAwMDAyMAorI2RlZmluZSBJU1RSSVAJMDAwMDA0MAorI2RlZmluZSBJTkxDUgkwMDAwMTAwCisjZGVmaW5lIElHTkNSCTAwMDAyMDAKKyNkZWZpbmUgSUNSTkwJMDAwMDQwMAorI2RlZmluZSBJVUNMQwkwMDAxMDAwCisjZGVmaW5lIElYT04JMDAwMjAwMAorI2RlZmluZSBJWEFOWQkwMDA0MDAwCisjZGVmaW5lIElYT0ZGCTAwMTAwMDAKKyNkZWZpbmUgSU1BWEJFTAkwMDIwMDAwCisjZGVmaW5lIElVVEY4CTAwNDAwMDAKKworLyogY19vZmxhZyBiaXRzICovCisjZGVmaW5lIE9QT1NUCTAwMDAwMDEKKyNkZWZpbmUgT0xDVUMJMDAwMDAwMgorI2RlZmluZSBPTkxDUgkwMDAwMDA0CisjZGVmaW5lIE9DUk5MCTAwMDAwMTAKKyNkZWZpbmUgT05PQ1IJMDAwMDAyMAorI2RlZmluZSBPTkxSRVQJMDAwMDA0MAorI2RlZmluZSBPRklMTAkwMDAwMTAwCisjZGVmaW5lIE9GREVMCTAwMDAyMDAKKyNkZWZpbmUgTkxETFkJMDAwMDQwMAorI2RlZmluZSAgIE5MMAkwMDAwMDAwCisjZGVmaW5lICAgTkwxCTAwMDA0MDAKKyNkZWZpbmUgQ1JETFkJMDAwMzAwMAorI2RlZmluZSAgIENSMAkwMDAwMDAwCisjZGVmaW5lICAgQ1IxCTAwMDEwMDAKKyNkZWZpbmUgICBDUjIJMDAwMjAwMAorI2RlZmluZSAgIENSMwkwMDAzMDAwCisjZGVmaW5lIFRBQkRMWQkwMDE0MDAwCisjZGVmaW5lICAgVEFCMAkwMDAwMDAwCisjZGVmaW5lICAgVEFCMQkwMDA0MDAwCisjZGVmaW5lICAgVEFCMgkwMDEwMDAwCisjZGVmaW5lICAgVEFCMwkwMDE0MDAwCisjZGVmaW5lICAgWFRBQlMJMDAxNDAwMAorI2RlZmluZSBCU0RMWQkwMDIwMDAwCisjZGVmaW5lICAgQlMwCTAwMDAwMDAKKyNkZWZpbmUgICBCUzEJMDAyMDAwMAorI2RlZmluZSBWVERMWQkwMDQwMDAwCisjZGVmaW5lICAgVlQwCTAwMDAwMDAKKyNkZWZpbmUgICBWVDEJMDA0MDAwMAorI2RlZmluZSBGRkRMWQkwMTAwMDAwCisjZGVmaW5lICAgRkYwCTAwMDAwMDAKKyNkZWZpbmUgICBGRjEJMDEwMDAwMAorCisvKiBjX2NmbGFnIGJpdCBtZWFuaW5nICovCisjZGVmaW5lIENCQVVECTAwMTAwMTcKKyNkZWZpbmUgIEIwCTAwMDAwMDAJCS8qIGhhbmcgdXAgKi8KKyNkZWZpbmUgIEI1MAkwMDAwMDAxCisjZGVmaW5lICBCNzUJMDAwMDAwMgorI2RlZmluZSAgQjExMAkwMDAwMDAzCisjZGVmaW5lICBCMTM0CTAwMDAwMDQKKyNkZWZpbmUgIEIxNTAJMDAwMDAwNQorI2RlZmluZSAgQjIwMAkwMDAwMDA2CisjZGVmaW5lICBCMzAwCTAwMDAwMDcKKyNkZWZpbmUgIEI2MDAJMDAwMDAxMAorI2RlZmluZSAgQjEyMDAJMDAwMDAxMQorI2RlZmluZSAgQjE4MDAJMDAwMDAxMgorI2RlZmluZSAgQjI0MDAJMDAwMDAxMworI2RlZmluZSAgQjQ4MDAJMDAwMDAxNAorI2RlZmluZSAgQjk2MDAJMDAwMDAxNQorI2RlZmluZSAgQjE5MjAwCTAwMDAwMTYKKyNkZWZpbmUgIEIzODQwMAkwMDAwMDE3CisjZGVmaW5lIEVYVEEgQjE5MjAwCisjZGVmaW5lIEVYVEIgQjM4NDAwCisjZGVmaW5lIENTSVpFCTAwMDAwNjAKKyNkZWZpbmUgICBDUzUJMDAwMDAwMAorI2RlZmluZSAgIENTNgkwMDAwMDIwCisjZGVmaW5lICAgQ1M3CTAwMDAwNDAKKyNkZWZpbmUgICBDUzgJMDAwMDA2MAorI2RlZmluZSBDU1RPUEIJMDAwMDEwMAorI2RlZmluZSBDUkVBRAkwMDAwMjAwCisjZGVmaW5lIFBBUkVOQgkwMDAwNDAwCisjZGVmaW5lIFBBUk9ERAkwMDAxMDAwCisjZGVmaW5lIEhVUENMCTAwMDIwMDAKKyNkZWZpbmUgQ0xPQ0FMCTAwMDQwMDAKKyNkZWZpbmUgQ0JBVURFWCAwMDEwMDAwCisjZGVmaW5lICAgIEI1NzYwMCAwMDEwMDAxCisjZGVmaW5lICAgQjExNTIwMCAwMDEwMDAyCisjZGVmaW5lICAgQjIzMDQwMCAwMDEwMDAzCisjZGVmaW5lICAgQjQ2MDgwMCAwMDEwMDA0CisjZGVmaW5lICAgQjUwMDAwMCAwMDEwMDA1CisjZGVmaW5lICAgQjU3NjAwMCAwMDEwMDA2CisjZGVmaW5lICAgQjkyMTYwMCAwMDEwMDA3CisjZGVmaW5lICBCMTAwMDAwMCAwMDEwMDEwCisjZGVmaW5lICBCMTE1MjAwMCAwMDEwMDExCisjZGVmaW5lICBCMTUwMDAwMCAwMDEwMDEyCisjZGVmaW5lICBCMjAwMDAwMCAwMDEwMDEzCisjZGVmaW5lICBCMjUwMDAwMCAwMDEwMDE0CisjZGVmaW5lICBCMzAwMDAwMCAwMDEwMDE1CisjZGVmaW5lICBCMzUwMDAwMCAwMDEwMDE2CisjZGVmaW5lICBCNDAwMDAwMCAwMDEwMDE3CisjZGVmaW5lIENJQkFVRAkgIDAwMjAwMzYwMDAwMAkvKiBpbnB1dCBiYXVkIHJhdGUgKG5vdCB1c2VkKSAqLworI2RlZmluZSBDTVNQQVIJICAwMTAwMDAwMDAwMDAJCS8qIG1hcmsgb3Igc3BhY2UgKHN0aWNrKSBwYXJpdHkgKi8KKyNkZWZpbmUgQ1JUU0NUUwkgIDAyMDAwMDAwMDAwMAkJLyogZmxvdyBjb250cm9sICovCisKKy8qIGNfbGZsYWcgYml0cyAqLworI2RlZmluZSBJU0lHCTAwMDAwMDEKKyNkZWZpbmUgSUNBTk9OCTAwMDAwMDIKKyNkZWZpbmUgWENBU0UJMDAwMDAwNAorI2RlZmluZSBFQ0hPCTAwMDAwMTAKKyNkZWZpbmUgRUNIT0UJMDAwMDAyMAorI2RlZmluZSBFQ0hPSwkwMDAwMDQwCisjZGVmaW5lIEVDSE9OTAkwMDAwMTAwCisjZGVmaW5lIE5PRkxTSAkwMDAwMjAwCisjZGVmaW5lIFRPU1RPUAkwMDAwNDAwCisjZGVmaW5lIEVDSE9DVEwJMDAwMTAwMAorI2RlZmluZSBFQ0hPUFJUCTAwMDIwMDAKKyNkZWZpbmUgRUNIT0tFCTAwMDQwMDAKKyNkZWZpbmUgRkxVU0hPCTAwMTAwMDAKKyNkZWZpbmUgUEVORElOCTAwNDAwMDAKKyNkZWZpbmUgSUVYVEVOCTAxMDAwMDAKKworLyogdGNmbG93KCkgYW5kIFRDWE9OQyB1c2UgdGhlc2UgKi8KKyNkZWZpbmUJVENPT0ZGCQkwCisjZGVmaW5lCVRDT09OCQkxCisjZGVmaW5lCVRDSU9GRgkJMgorI2RlZmluZQlUQ0lPTgkJMworCisvKiB0Y2ZsdXNoKCkgYW5kIFRDRkxTSCB1c2UgdGhlc2UgKi8KKyNkZWZpbmUJVENJRkxVU0gJMAorI2RlZmluZQlUQ09GTFVTSAkxCisjZGVmaW5lCVRDSU9GTFVTSAkyCisKKy8qIHRjc2V0YXR0ciB1c2VzIHRoZXNlICovCisjZGVmaW5lCVRDU0FOT1cJCTAKKyNkZWZpbmUJVENTQURSQUlOCTEKKyNkZWZpbmUJVENTQUZMVVNICTIKKworI2VuZGlmIC8qIF9fQVNNX1NIX1RFUk1CSVRTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL3Rlcm1pb3MuaCBiL2luY2x1ZGUvYXNtLXNoL3Rlcm1pb3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGVkZmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvdGVybWlvcy5oCkBAIC0wLDAgKzEsMTA2IEBACisjaWZuZGVmIF9fQVNNX1NIX1RFUk1JT1NfSAorI2RlZmluZSBfX0FTTV9TSF9URVJNSU9TX0gKKworI2luY2x1ZGUgPGFzbS90ZXJtYml0cy5oPgorI2luY2x1ZGUgPGFzbS9pb2N0bHMuaD4KKworc3RydWN0IHdpbnNpemUgeworCXVuc2lnbmVkIHNob3J0IHdzX3JvdzsKKwl1bnNpZ25lZCBzaG9ydCB3c19jb2w7CisJdW5zaWduZWQgc2hvcnQgd3NfeHBpeGVsOworCXVuc2lnbmVkIHNob3J0IHdzX3lwaXhlbDsKK307CisKKyNkZWZpbmUgTkNDIDgKK3N0cnVjdCB0ZXJtaW8geworCXVuc2lnbmVkIHNob3J0IGNfaWZsYWc7CQkvKiBpbnB1dCBtb2RlIGZsYWdzICovCisJdW5zaWduZWQgc2hvcnQgY19vZmxhZzsJCS8qIG91dHB1dCBtb2RlIGZsYWdzICovCisJdW5zaWduZWQgc2hvcnQgY19jZmxhZzsJCS8qIGNvbnRyb2wgbW9kZSBmbGFncyAqLworCXVuc2lnbmVkIHNob3J0IGNfbGZsYWc7CQkvKiBsb2NhbCBtb2RlIGZsYWdzICovCisJdW5zaWduZWQgY2hhciBjX2xpbmU7CQkvKiBsaW5lIGRpc2NpcGxpbmUgKi8KKwl1bnNpZ25lZCBjaGFyIGNfY2NbTkNDXTsJLyogY29udHJvbCBjaGFyYWN0ZXJzICovCit9OworCisvKiBtb2RlbSBsaW5lcyAqLworI2RlZmluZSBUSU9DTV9MRQkweDAwMQorI2RlZmluZSBUSU9DTV9EVFIJMHgwMDIKKyNkZWZpbmUgVElPQ01fUlRTCTB4MDA0CisjZGVmaW5lIFRJT0NNX1NUCTB4MDA4CisjZGVmaW5lIFRJT0NNX1NSCTB4MDEwCisjZGVmaW5lIFRJT0NNX0NUUwkweDAyMAorI2RlZmluZSBUSU9DTV9DQVIJMHgwNDAKKyNkZWZpbmUgVElPQ01fUk5HCTB4MDgwCisjZGVmaW5lIFRJT0NNX0RTUgkweDEwMAorI2RlZmluZSBUSU9DTV9DRAlUSU9DTV9DQVIKKyNkZWZpbmUgVElPQ01fUkkJVElPQ01fUk5HCisjZGVmaW5lIFRJT0NNX09VVDEJMHgyMDAwCisjZGVmaW5lIFRJT0NNX09VVDIJMHg0MDAwCisjZGVmaW5lIFRJT0NNX0xPT1AJMHg4MDAwCisKKy8qIGlvY3RsIChmZCwgVElPQ1NFUkdFVExTUiwgJnJlc3VsdCkgd2hlcmUgcmVzdWx0IG1heSBiZSBhcyBiZWxvdyAqLworCisvKiBsaW5lIGRpc2NpcGxpbmVzICovCisjZGVmaW5lIE5fVFRZCQkwCisjZGVmaW5lIE5fU0xJUAkJMQorI2RlZmluZSBOX01PVVNFCQkyCisjZGVmaW5lIE5fUFBQCQkzCisjZGVmaW5lIE5fU1RSSVAJCTQKKyNkZWZpbmUgTl9BWDI1CQk1CisjZGVmaW5lIE5fWDI1CQk2CS8qIFguMjUgYXN5bmMgKi8KKyNkZWZpbmUgTl82UEFDSwkJNworI2RlZmluZSBOX01BU0MJCTgJLyogUmVzZXJ2ZWQgZm9yIE1vYml0ZXggbW9kdWxlIDxrYXpAY2FmZS5uZXQ+ICovCisjZGVmaW5lIE5fUjM5NjQJCTkJLyogUmVzZXJ2ZWQgZm9yIFNpbWF0aWMgUjM5NjQgbW9kdWxlICovCisjZGVmaW5lIE5fUFJPRklCVVNfRkRMCTEwCS8qIFJlc2VydmVkIGZvciBQcm9maWJ1cyA8RGF2ZUBtdmhpLmNvbT4gKi8KKyNkZWZpbmUgTl9JUkRBCQkxMQkvKiBMaW51eCBJUiAtIGh0dHA6Ly9pcmRhLnNvdXJjZWZvcmdlLm5ldC8gKi8KKyNkZWZpbmUgTl9TTVNCTE9DSwkxMgkvKiBTTVMgYmxvY2sgbW9kZSAtIGZvciB0YWxraW5nIHRvIEdTTSBkYXRhIGNhcmRzIGFib3V0IFNNUyBtZXNzYWdlcyAqLworI2RlZmluZSBOX0hETEMJCTEzCS8qIHN5bmNocm9ub3VzIEhETEMgKi8KKyNkZWZpbmUgTl9TWU5DX1BQUAkxNAorI2RlZmluZSBOX0hDSQkJMTUgIC8qIEJsdWV0b290aCBIQ0kgVUFSVCAqLworCisjaWZkZWYgX19LRVJORUxfXworCisvKglpbnRyPV5DCQlxdWl0PV5cCQllcmFzZT1kZWwJa2lsbD1eVQorCWVvZj1eRAkJdnRpbWU9XDAJdm1pbj1cMQkJc3h0Yz1cMAorCXN0YXJ0PV5RCXN0b3A9XlMJCXN1c3A9XloJCWVvbD1cMAorCXJlcHJpbnQ9XlIJZGlzY2FyZD1eVQl3ZXJhc2U9XlcJbG5leHQ9XlYKKwllb2wyPVwwCisqLworI2RlZmluZSBJTklUX0NfQ0MgIlwwMDNcMDM0XDE3N1wwMjVcMDA0XDBcMVwwXDAyMVwwMjNcMDMyXDBcMDIyXDAxN1wwMjdcMDI2XDAiCisKKy8qCisgKiBUcmFuc2xhdGUgYSAidGVybWlvIiBzdHJ1Y3R1cmUgaW50byBhICJ0ZXJtaW9zIi4gVWdoLgorICovCisjZGVmaW5lIFNFVF9MT1dfVEVSTUlPU19CSVRTKHRlcm1pb3MsIHRlcm1pbywgeCkgeyBcCisJdW5zaWduZWQgc2hvcnQgX190bXA7IFwKKwlnZXRfdXNlcihfX3RtcCwmKHRlcm1pbyktPngpOyBcCisJKih1bnNpZ25lZCBzaG9ydCAqKSAmKHRlcm1pb3MpLT54ID0gX190bXA7IFwKK30KKworI2RlZmluZSB1c2VyX3Rlcm1pb190b19rZXJuZWxfdGVybWlvcyh0ZXJtaW9zLCB0ZXJtaW8pIFwKKyh7IFwKKwlTRVRfTE9XX1RFUk1JT1NfQklUUyh0ZXJtaW9zLCB0ZXJtaW8sIGNfaWZsYWcpOyBcCisJU0VUX0xPV19URVJNSU9TX0JJVFModGVybWlvcywgdGVybWlvLCBjX29mbGFnKTsgXAorCVNFVF9MT1dfVEVSTUlPU19CSVRTKHRlcm1pb3MsIHRlcm1pbywgY19jZmxhZyk7IFwKKwlTRVRfTE9XX1RFUk1JT1NfQklUUyh0ZXJtaW9zLCB0ZXJtaW8sIGNfbGZsYWcpOyBcCisJY29weV9mcm9tX3VzZXIoKHRlcm1pb3MpLT5jX2NjLCAodGVybWlvKS0+Y19jYywgTkNDKTsgXAorfSkKKworLyoKKyAqIFRyYW5zbGF0ZSBhICJ0ZXJtaW9zIiBzdHJ1Y3R1cmUgaW50byBhICJ0ZXJtaW8iLiBVZ2guCisgKi8KKyNkZWZpbmUga2VybmVsX3Rlcm1pb3NfdG9fdXNlcl90ZXJtaW8odGVybWlvLCB0ZXJtaW9zKSBcCisoeyBcCisJcHV0X3VzZXIoKHRlcm1pb3MpLT5jX2lmbGFnLCAmKHRlcm1pbyktPmNfaWZsYWcpOyBcCisJcHV0X3VzZXIoKHRlcm1pb3MpLT5jX29mbGFnLCAmKHRlcm1pbyktPmNfb2ZsYWcpOyBcCisJcHV0X3VzZXIoKHRlcm1pb3MpLT5jX2NmbGFnLCAmKHRlcm1pbyktPmNfY2ZsYWcpOyBcCisJcHV0X3VzZXIoKHRlcm1pb3MpLT5jX2xmbGFnLCAmKHRlcm1pbyktPmNfbGZsYWcpOyBcCisJcHV0X3VzZXIoKHRlcm1pb3MpLT5jX2xpbmUsICAmKHRlcm1pbyktPmNfbGluZSk7IFwKKwljb3B5X3RvX3VzZXIoKHRlcm1pbyktPmNfY2MsICh0ZXJtaW9zKS0+Y19jYywgTkNDKTsgXAorfSkKKworI2RlZmluZSB1c2VyX3Rlcm1pb3NfdG9fa2VybmVsX3Rlcm1pb3MoaywgdSkgY29weV9mcm9tX3VzZXIoaywgdSwgc2l6ZW9mKHN0cnVjdCB0ZXJtaW9zKSkKKyNkZWZpbmUga2VybmVsX3Rlcm1pb3NfdG9fdXNlcl90ZXJtaW9zKHUsIGspIGNvcHlfdG9fdXNlcih1LCBrLCBzaXplb2Yoc3RydWN0IHRlcm1pb3MpKQorCisjZW5kaWYJLyogX19LRVJORUxfXyAqLworCisjZW5kaWYJLyogX19BU01fU0hfVEVSTUlPU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC90aHJlYWRfaW5mby5oIGIvaW5jbHVkZS9hc20tc2gvdGhyZWFkX2luZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODJmODgzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvdGhyZWFkX2luZm8uaApAQCAtMCwwICsxLDEwMiBAQAorI2lmbmRlZiBfX0FTTV9TSF9USFJFQURfSU5GT19ICisjZGVmaW5lIF9fQVNNX1NIX1RIUkVBRF9JTkZPX0gKKworLyogU3VwZXJIIHZlcnNpb24KKyAqIENvcHlyaWdodCAoQykgMjAwMiAgTmlpYmUgWXV0YWthCisgKgorICogVGhlIGNvcHlyaWdodCBvZiBvcmlnaW5hbCBpMzg2IHZlcnNpb24gaXM6CisgKgorICogIENvcHlyaWdodCAoQykgMjAwMiAgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqICAtIEluY29ycG9yYXRpbmcgc3VnZ2VzdGlvbnMgbWFkZSBieSBMaW51cyBUb3J2YWxkcyBhbmQgRGF2ZSBNaWxsZXIKKyAqLworCisjaWZkZWYgX19LRVJORUxfXworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKworc3RydWN0IHRocmVhZF9pbmZvIHsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QJKnRhc2s7CQkvKiBtYWluIHRhc2sgc3RydWN0dXJlICovCisJc3RydWN0IGV4ZWNfZG9tYWluCSpleGVjX2RvbWFpbjsJLyogZXhlY3V0aW9uIGRvbWFpbiAqLworCV9fdTMyCQkJZmxhZ3M7CQkvKiBsb3cgbGV2ZWwgZmxhZ3MgKi8KKwlfX3UzMgkJCWNwdTsKKwlfX3MzMgkJCXByZWVtcHRfY291bnQ7IC8qIDAgPT4gcHJlZW1wdGFibGUsIDwwID0+IEJVRyAqLworCXN0cnVjdCByZXN0YXJ0X2Jsb2NrCXJlc3RhcnRfYmxvY2s7CisJX191OAkJCXN1cGVydmlzb3Jfc3RhY2tbMF07Cit9OworCisjZW5kaWYKKworI2RlZmluZSBQUkVFTVBUX0FDVElWRQkJMHg0MDAwMDAwCisKKy8qCisgKiBtYWNyb3MvZnVuY3Rpb25zIGZvciBnYWluaW5nIGFjY2VzcyB0byB0aGUgdGhyZWFkIGluZm9ybWF0aW9uIHN0cnVjdHVyZQorICovCisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2RlZmluZSBJTklUX1RIUkVBRF9JTkZPKHRzaykJCQlcCit7CQkJCQkJXAorCS50YXNrCQk9ICZ0c2ssCQkJXAorCS5leGVjX2RvbWFpbgk9ICZkZWZhdWx0X2V4ZWNfZG9tYWluLAlcCisJLmZsYWdzCQk9IDAsCQkJXAorCS5jcHUJCT0gMCwJCQlcCisJLnByZWVtcHRfY291bnQJPSAxLAkJCVwKKwkucmVzdGFydF9ibG9jawk9IHsJCQlcCisJCS5mbiA9IGRvX25vX3Jlc3RhcnRfc3lzY2FsbCwJXAorCX0sCQkJCQlcCit9CisKKyNkZWZpbmUgaW5pdF90aHJlYWRfaW5mbwkoaW5pdF90aHJlYWRfdW5pb24udGhyZWFkX2luZm8pCisjZGVmaW5lIGluaXRfc3RhY2sJCShpbml0X3RocmVhZF91bmlvbi5zdGFjaykKKworLyogaG93IHRvIGdldCB0aGUgdGhyZWFkIGluZm9ybWF0aW9uIHN0cnVjdCBmcm9tIEMgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRocmVhZF9pbmZvICpjdXJyZW50X3RocmVhZF9pbmZvKHZvaWQpCit7CisJc3RydWN0IHRocmVhZF9pbmZvICp0aTsKKwlfX2FzbV9fKCJzdGMJcjdfYmFuaywgJTAiIDogIj1yIiAodGkpKTsKKwlyZXR1cm4gdGk7Cit9CisKKy8qIHRocmVhZCBpbmZvcm1hdGlvbiBhbGxvY2F0aW9uICovCisjZGVmaW5lIFRIUkVBRF9TSVpFICgyKlBBR0VfU0laRSkKKyNkZWZpbmUgYWxsb2NfdGhyZWFkX2luZm8odGkpICgoc3RydWN0IHRocmVhZF9pbmZvICopIF9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwxKSkKKyNkZWZpbmUgZnJlZV90aHJlYWRfaW5mbyh0aSkgZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZykgKHRpKSwgMSkKKyNkZWZpbmUgZ2V0X3RocmVhZF9pbmZvKHRpKSBnZXRfdGFza19zdHJ1Y3QoKHRpKS0+dGFzaykKKyNkZWZpbmUgcHV0X3RocmVhZF9pbmZvKHRpKSBwdXRfdGFza19zdHJ1Y3QoKHRpKS0+dGFzaykKKworI2Vsc2UgLyogIV9fQVNTRU1CTFlfXyAqLworCisvKiBob3cgdG8gZ2V0IHRoZSB0aHJlYWQgaW5mb3JtYXRpb24gc3RydWN0IGZyb20gQVNNICovCisjZGVmaW5lIEdFVF9USFJFQURfSU5GTyhyZWcpIFwKKwlzdGMJcjdfYmFuaywgcmVnCisKKyNlbmRpZgorCisvKgorICogdGhyZWFkIGluZm9ybWF0aW9uIGZsYWdzCisgKiAtIHRoZXNlIGFyZSBwcm9jZXNzIHN0YXRlIGZsYWdzIHRoYXQgdmFyaW91cyBhc3NlbWJseSBmaWxlcyBtYXkgbmVlZCB0byBhY2Nlc3MKKyAqIC0gcGVuZGluZyB3b3JrLXRvLWJlLWRvbmUgZmxhZ3MgYXJlIGluIExTVworICogLSBvdGhlciBmbGFncyBpbiBNU1cKKyAqLworI2RlZmluZSBUSUZfU1lTQ0FMTF9UUkFDRQkwCS8qIHN5c2NhbGwgdHJhY2UgYWN0aXZlICovCisjZGVmaW5lIFRJRl9OT1RJRllfUkVTVU1FCTEJLyogcmVzdW1wdGlvbiBub3RpZmljYXRpb24gcmVxdWVzdGVkICovCisjZGVmaW5lIFRJRl9TSUdQRU5ESU5HCQkyCS8qIHNpZ25hbCBwZW5kaW5nICovCisjZGVmaW5lIFRJRl9ORUVEX1JFU0NIRUQJMwkvKiByZXNjaGVkdWxpbmcgbmVjZXNzYXJ5ICovCisjZGVmaW5lIFRJRl9VU0VERlBVCQkxNgkvKiBGUFUgd2FzIHVzZWQgYnkgdGhpcyB0YXNrIHRoaXMgcXVhbnR1bSAoU01QKSAqLworI2RlZmluZSBUSUZfUE9MTElOR19OUkZMQUcJMTcJLyogdHJ1ZSBpZiBwb2xsX2lkbGUoKSBpcyBwb2xsaW5nIFRJRl9ORUVEX1JFU0NIRUQgKi8KKyNkZWZpbmUgVElGX01FTURJRQkJMTgKKyNkZWZpbmUgVElGX1VTRVJTUEFDRQkJMzEJLyogdHJ1ZSBpZiBGUyBzZXRzIHVzZXJzcGFjZSAqLworCisjZGVmaW5lIF9USUZfU1lTQ0FMTF9UUkFDRQkoMTw8VElGX1NZU0NBTExfVFJBQ0UpCisjZGVmaW5lIF9USUZfTk9USUZZX1JFU1VNRQkoMTw8VElGX05PVElGWV9SRVNVTUUpCisjZGVmaW5lIF9USUZfU0lHUEVORElORwkJKDE8PFRJRl9TSUdQRU5ESU5HKQorI2RlZmluZSBfVElGX05FRURfUkVTQ0hFRAkoMTw8VElGX05FRURfUkVTQ0hFRCkKKyNkZWZpbmUgX1RJRl9VU0VERlBVCQkoMTw8VElGX1VTRURGUFUpCisjZGVmaW5lIF9USUZfUE9MTElOR19OUkZMQUcJKDE8PFRJRl9QT0xMSU5HX05SRkxBRykKKyNkZWZpbmUgX1RJRl9VU0VSU1BBQ0UJCSgxPDxUSUZfVVNFUlNQQUNFKQorCisjZGVmaW5lIF9USUZfV09SS19NQVNLCQkweDAwMDAwMEZFCS8qIHdvcmsgdG8gZG8gb24gaW50ZXJydXB0L2V4Y2VwdGlvbiByZXR1cm4gKi8KKyNkZWZpbmUgX1RJRl9BTExXT1JLX01BU0sJMHgwMDAwMDBGRgkvKiB3b3JrIHRvIGRvIG9uIGFueSByZXR1cm4gdG8gdS1zcGFjZSAqLworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX19BU01fU0hfVEhSRUFEX0lORk9fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvdGltZXguaCBiL2luY2x1ZGUvYXNtLXNoL3RpbWV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg3M2UyNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL3RpbWV4LmgKQEAgLTAsMCArMSwxOCBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLXNoL3RpbWV4LmgKKyAqCisgKiBzaCBhcmNoaXRlY3R1cmUgdGltZXggc3BlY2lmaWNhdGlvbnMKKyAqLworI2lmbmRlZiBfX0FTTV9TSF9USU1FWF9ICisjZGVmaW5lIF9fQVNNX1NIX1RJTUVYX0gKKworI2RlZmluZSBDTE9DS19USUNLX1JBVEUJCShDT05GSUdfU0hfUENMS19GUkVRIC8gNCkgLyogVW5kZXJseWluZyBIWiAqLworCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBjeWNsZXNfdDsKKworc3RhdGljIF9faW5saW5lX18gY3ljbGVzX3QgZ2V0X2N5Y2xlcyAodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworI2VuZGlmIC8qIF9fQVNNX1NIX1RJTUVYX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL3RsYi5oIGIvaW5jbHVkZS9hc20tc2gvdGxiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNkMTg1YgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL3RsYi5oCkBAIC0wLDAgKzEsMTggQEAKKyNpZm5kZWYgX19BU01fU0hfVExCX0gKKyNkZWZpbmUgX19BU01fU0hfVExCX0gKKworI2RlZmluZSB0bGJfc3RhcnRfdm1hKHRsYiwgdm1hKSBcCisJZmx1c2hfY2FjaGVfcmFuZ2Uodm1hLCB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX2VuZCkKKworI2RlZmluZSB0bGJfZW5kX3ZtYSh0bGIsIHZtYSkJXAorCWZsdXNoX3RsYl9yYW5nZSh2bWEsIHZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fZW5kKQorCisjZGVmaW5lIF9fdGxiX3JlbW92ZV90bGJfZW50cnkodGxiLCBwdGUsIGFkZHJlc3MpCWRvIHsgfSB3aGlsZSAoMCkKKworLyoKKyAqIEZsdXNoIHdob2xlIFRMQnMgZm9yIE1NCisgKi8KKyNkZWZpbmUgdGxiX2ZsdXNoKHRsYikJCQkJZmx1c2hfdGxiX21tKCh0bGIpLT5tbSkKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3RsYi5oPgorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC90bGJmbHVzaC5oIGIvaW5jbHVkZS9hc20tc2gvdGxiZmx1c2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGMwNzNiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvdGxiZmx1c2guaApAQCAtMCwwICsxLDMxIEBACisjaWZuZGVmIF9fQVNNX1NIX1RMQkZMVVNIX0gKKyNkZWZpbmUgX19BU01fU0hfVExCRkxVU0hfSAorCisvKgorICogVExCIGZsdXNoaW5nOgorICoKKyAqICAtIGZsdXNoX3RsYigpIGZsdXNoZXMgdGhlIGN1cnJlbnQgbW0gc3RydWN0IFRMQnMKKyAqICAtIGZsdXNoX3RsYl9hbGwoKSBmbHVzaGVzIGFsbCBwcm9jZXNzZXMgVExCcworICogIC0gZmx1c2hfdGxiX21tKG1tKSBmbHVzaGVzIHRoZSBzcGVjaWZpZWQgbW0gY29udGV4dCBUTEIncworICogIC0gZmx1c2hfdGxiX3BhZ2Uodm1hLCB2bWFkZHIpIGZsdXNoZXMgb25lIHBhZ2UKKyAqICAtIGZsdXNoX3RsYl9yYW5nZSh2bWEsIHN0YXJ0LCBlbmQpIGZsdXNoZXMgYSByYW5nZSBvZiBwYWdlcworICogIC0gZmx1c2hfdGxiX2tlcm5lbF9yYW5nZShzdGFydCwgZW5kKSBmbHVzaGVzIGEgcmFuZ2Ugb2Yga2VybmVsIHBhZ2VzCisgKiAgLSBmbHVzaF90bGJfcGd0YWJsZXMobW0sIHN0YXJ0LCBlbmQpIGZsdXNoZXMgYSByYW5nZSBvZiBwYWdlIHRhYmxlcworICovCisKK2V4dGVybiB2b2lkIGZsdXNoX3RsYih2b2lkKTsKK2V4dGVybiB2b2lkIGZsdXNoX3RsYl9hbGwodm9pZCk7CitleHRlcm4gdm9pZCBmbHVzaF90bGJfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pOworZXh0ZXJuIHZvaWQgZmx1c2hfdGxiX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQkJICAgIHVuc2lnbmVkIGxvbmcgZW5kKTsKK2V4dGVybiB2b2lkIGZsdXNoX3RsYl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHBhZ2UpOworZXh0ZXJuIHZvaWQgX19mbHVzaF90bGJfcGFnZSh1bnNpZ25lZCBsb25nIGFzaWQsIHVuc2lnbmVkIGxvbmcgcGFnZSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfcGd0YWJsZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7IC8qIE5vdGhpbmcgdG8gZG8gKi8KK30KKworZXh0ZXJuIHZvaWQgZmx1c2hfdGxiX2tlcm5lbF9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7CisKKyNlbmRpZiAvKiBfX0FTTV9TSF9UTEJGTFVTSF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC90b3BvbG9neS5oIGIvaW5jbHVkZS9hc20tc2gvdG9wb2xvZ3kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmYwMDFjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvdG9wb2xvZ3kuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX0FTTV9TSF9UT1BPTE9HWV9ICisjZGVmaW5lIF9BU01fU0hfVE9QT0xPR1lfSAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdG9wb2xvZ3kuaD4KKworI2VuZGlmIC8qIF9BU01fU0hfVE9QT0xPR1lfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvdHlwZXMuaCBiL2luY2x1ZGUvYXNtLXNoL3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRkYzEyNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL3R5cGVzLmgKQEAgLTAsMCArMSw2NyBAQAorI2lmbmRlZiBfX0FTTV9TSF9UWVBFU19ICisjZGVmaW5lIF9fQVNNX1NIX1RZUEVTX0gKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1bW9kZV90OworCisvKgorICogX194eCBpcyBvazogaXQgZG9lc24ndCBwb2xsdXRlIHRoZSBQT1NJWCBuYW1lc3BhY2UuIFVzZSB0aGVzZSBpbiB0aGUKKyAqIGhlYWRlciBmaWxlcyBleHBvcnRlZCB0byB1c2VyIHNwYWNlCisgKi8KKwordHlwZWRlZiBfX3NpZ25lZF9fIGNoYXIgX19zODsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBfX3U4OworCit0eXBlZGVmIF9fc2lnbmVkX18gc2hvcnQgX19zMTY7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fdTE2OworCit0eXBlZGVmIF9fc2lnbmVkX18gaW50IF9fczMyOwordHlwZWRlZiB1bnNpZ25lZCBpbnQgX191MzI7CisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAhZGVmaW5lZChfX1NUUklDVF9BTlNJX18pCit0eXBlZGVmIF9fc2lnbmVkX18gbG9uZyBsb25nIF9fczY0OwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgX191NjQ7CisjZW5kaWYKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisvKgorICogVGhlc2UgYXJlbid0IGV4cG9ydGVkIG91dHNpZGUgdGhlIGtlcm5lbCB0byBhdm9pZCBuYW1lIHNwYWNlIGNsYXNoZXMKKyAqLworI2lmZGVmIF9fS0VSTkVMX18KKworI2RlZmluZSBCSVRTX1BFUl9MT05HIDMyCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKwordHlwZWRlZiBfX3NpZ25lZF9fIGNoYXIgczg7Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdTg7CisKK3R5cGVkZWYgX19zaWduZWRfXyBzaG9ydCBzMTY7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHUxNjsKKwordHlwZWRlZiBfX3NpZ25lZF9fIGludCBzMzI7Cit0eXBlZGVmIHVuc2lnbmVkIGludCB1MzI7CisKK3R5cGVkZWYgX19zaWduZWRfXyBsb25nIGxvbmcgczY0OwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdTY0OworCisvKiBEbWEgYWRkcmVzc2VzIGFyZSAzMi1iaXRzIHdpZGUuICAqLworCit0eXBlZGVmIHUzMiBkbWFfYWRkcl90OworCisjaWZkZWYgQ09ORklHX0xCRAordHlwZWRlZiB1NjQgc2VjdG9yX3Q7CisjZGVmaW5lIEhBVkVfU0VDVE9SX1QKKyNlbmRpZgorCit0eXBlZGVmIHVuc2lnbmVkIGludCBrbWVtX2J1ZmN0bF90OworCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfX0FTTV9TSF9UWVBFU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC91YWNjZXNzLmggYi9pbmNsdWRlL2FzbS1zaC91YWNjZXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI5ZTMzNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL3VhY2Nlc3MuaApAQCAtMCwwICsxLDYwMCBAQAorLyogJElkOiB1YWNjZXNzLmgsdiAxLjExIDIwMDMvMTAvMTMgMDc6MjE6MjAgbGV0aGFsIEV4cCAkCisgKgorICogVXNlciBzcGFjZSBtZW1vcnkgYWNjZXNzIGZ1bmN0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMiAgTmlpYmUgWXV0YWthCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgIFBhdWwgTXVuZHQKKyAqCisgKiAgQmFzZWQgb246CisgKiAgICAgTUlQUyBpbXBsZW1lbnRhdGlvbiB2ZXJzaW9uIDEuMTUgYnkKKyAqICAgICAgICAgICAgICBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTggYnkgUmFsZiBCYWVjaGxlCisgKiAgICAgYW5kIGkzODYgdmVyc2lvbi4KKyAqLworI2lmbmRlZiBfX0FTTV9TSF9VQUNDRVNTX0gKKyNkZWZpbmUgX19BU01fU0hfVUFDQ0VTU19ICisKKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisKKy8qCisgKiBOT1RFOiBNYWNyby9mdW5jdGlvbnMgaW4gdGhpcyBmaWxlIGRlcGVuZHMgb24gdGhyZWFkc19pbmZvLmggaW1wbGVtZW50YXRpb24uCisgKiBBc3N1bWVzOgorICogVElfRkxBR1MgPT0gOAorICogVElGX1VTRVJTUEFDRSA9PSAzMQorICogVVNFUl9BRERSX0xJTUlUID09IDB4ODAwMDAwMDAKKyAqLworCisjZGVmaW5lIFZFUklGWV9SRUFEICAgIDAKKyNkZWZpbmUgVkVSSUZZX1dSSVRFICAgMQorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgaW50IGlzX3VzZXJfc3BhY2U7Cit9IG1tX3NlZ21lbnRfdDsKKworLyoKKyAqIFRoZSBmcyB2YWx1ZSBkZXRlcm1pbmVzIHdoZXRoZXIgYXJndW1lbnQgdmFsaWRpdHkgY2hlY2tpbmcgc2hvdWxkIGJlCisgKiBwZXJmb3JtZWQgb3Igbm90LiAgSWYgZ2V0X2ZzKCkgPT0gVVNFUl9EUywgY2hlY2tpbmcgaXMgcGVyZm9ybWVkLCB3aXRoCisgKiBnZXRfZnMoKSA9PSBLRVJORUxfRFMsIGNoZWNraW5nIGlzIGJ5cGFzc2VkLgorICoKKyAqIEZvciBoaXN0b3JpY2FsIHJlYXNvbnMgKERhdGEgU2VnbWVudCBSZWdpc3Rlcj8pLCB0aGVzZSBtYWNyb3MgYXJlIG1pc25hbWVkLgorICovCisKKyNkZWZpbmUgTUFLRV9NTV9TRUcocykJKChtbV9zZWdtZW50X3QpIHsgKHMpIH0pCisjZGVmaW5lIHNlZ21lbnRfZXEoYSxiKQkoKGEpLmlzX3VzZXJfc3BhY2UgPT0gKGIpLmlzX3VzZXJfc3BhY2UpCisKKyNkZWZpbmUgVVNFUl9BRERSX0xJTUlUCTB4ODAwMDAwMDAKKworI2RlZmluZSBLRVJORUxfRFMJTUFLRV9NTV9TRUcoMCkKKyNkZWZpbmUgVVNFUl9EUwkJTUFLRV9NTV9TRUcoMSkKKworI2RlZmluZSBnZXRfZHMoKQkoS0VSTkVMX0RTKQorCisjaWYgIWRlZmluZWQoQ09ORklHX01NVSkKK3N0YXRpYyBpbmxpbmUgbW1fc2VnbWVudF90IGdldF9mcyh2b2lkKQoreworCXJldHVybiBVU0VSX0RTOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2ZzKG1tX3NlZ21lbnRfdCBzKQoreworfQorCisvKgorICogX19hY2Nlc3Nfb2s6IENoZWNrIGlmIGFkZHJlc3Mgd2l0aCBzaXplIGlzIE9LIG9yIG5vdC4KKyAqCisgKiBJZiB3ZSBkb24ndCBoYXZlIGFuIE1NVSAob3IgaWYgaXRzIGRpc2FibGVkKSB0aGUgb25seSB0aGluZyB3ZSByZWFsbHkgaGF2ZQorICogdG8gbG9vayBvdXQgZm9yIGlzIGlmIHRoZSBhZGRyZXNzIHJlc2lkZXMgc29tZXdoZXJlIG91dHNpZGUgb2Ygd2hhdAorICogYXZhaWxhYmxlIFJBTSB3ZSBoYXZlLgorICoKKyAqIFRPRE86IFRoaXMgY2hlY2sgY291bGQgcHJvYmFibHkgYWxzbyBzdGFuZCB0byBiZSByZXN0cmljdGVkIHNvbWV3aGF0IG1vcmUuLgorICogdGhvdWdoIGl0IHN0aWxsIGRvZXMgdGhlIFJpZ2h0IFRoaW5nKHRtKSBmb3IgdGhlIHRpbWUgYmVpbmcuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IF9fYWNjZXNzX29rKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCWV4dGVybiB1bnNpZ25lZCBsb25nIG1lbW9yeV9zdGFydCwgbWVtb3J5X2VuZDsKKworCXJldHVybiAoKGFkZHIgPj0gbWVtb3J5X3N0YXJ0KSAmJiAoKGFkZHIgKyBzaXplKSA8IG1lbW9yeV9lbmQpKTsKK30KKyNlbHNlIC8qIENPTkZJR19NTVUgKi8KK3N0YXRpYyBpbmxpbmUgbW1fc2VnbWVudF90IGdldF9mcyh2b2lkKQoreworCXJldHVybiBNQUtFX01NX1NFRyh0ZXN0X3RocmVhZF9mbGFnKFRJRl9VU0VSU1BBQ0UpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldF9mcyhtbV9zZWdtZW50X3QgcykKK3sKKwl1bnNpZ25lZCBsb25nIHRpLCBmbGFnOworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkic3RjCXI3X2JhbmssICUwXG5cdCIKKwkJIm1vdi5sCUAoOCwlMCksICUxXG5cdCIKKwkJInNoYWwJJTFcblx0IgorCQkiY21wL3BsCSUyXG5cdCIKKwkJInJvdGNyCSUxXG5cdCIKKwkJIm1vdi5sCSUxLCBAKDgsJTApIgorCQk6ICI9JnIiICh0aSksICI9JnIiIChmbGFnKQorCQk6ICJyIiAocy5pc191c2VyX3NwYWNlKQorCQk6ICJ0Iik7CisvKioqKgorCWlmIChzLmlzX3VzZXJfc3BhY2UpCisJCXNldF90aHJlYWRfZmxhZyhUSUZfVVNFUlNQQUNFKTsKKwllbHNlCisJCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9VU0VSU1BBQ0UpOworKioqKi8KK30KKworLyoKKyAqIF9fYWNjZXNzX29rOiBDaGVjayBpZiBhZGRyZXNzIHdpdGggc2l6ZSBpcyBPSyBvciBub3QuCisgKgorICogV2UgZG8gdGhyZWUgY2hlY2tzOgorICogKDEpIGlzIGl0IHVzZXIgc3BhY2U/IAorICogKDIpIGFkZHIgKyBzaXplIC0tPiBjYXJyeT8KKyAqICgzKSBhZGRyICsgc2l6ZSA+PSAweDgwMDAwMDAwICAoVVNFUl9BRERSX0xJTUlUKQorICoKKyAqICgxKSAoMikgKDMpIHwgUkVTVUxUCisgKiAgMCAgIDAgICAwICB8ICBvaworICogIDAgICAwICAgMSAgfCAgb2sKKyAqICAwICAgMSAgIDAgIHwgIGJhZAorICogIDAgICAxICAgMSAgfCAgYmFkCisgKiAgMSAgIDAgICAwICB8ICBvaworICogIDEgICAwICAgMSAgfCAgYmFkCisgKiAgMSAgIDEgICAwICB8ICBiYWQKKyAqICAxICAgMSAgIDEgIHwgIGJhZAorICovCitzdGF0aWMgaW5saW5lIGludCBfX2FjY2Vzc19vayh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWcsIHRtcDsKKworCV9fYXNtX18oInN0YwlyN19iYW5rLCAlMFxuXHQiCisJCSJtb3YubAlAKDgsJTApLCAlMFxuXHQiCisJCSJjbHJ0XG5cdCIKKwkJImFkZGMJJTIsICUxXG5cdCIKKwkJImFuZAklMSwgJTBcblx0IgorCQkicm90Y2wJJTBcblx0IgorCQkicm90Y2wJJTBcblx0IgorCQkiYW5kCSMzLCAlMCIKKwkJOiAiPSZ6IiAoZmxhZyksICI9ciIgKHRtcCkKKwkJOiAiciIgKGFkZHIpLCAiMSIgKHNpemUpCisJCTogInQiKTsKKworCXJldHVybiBmbGFnID09IDA7Cit9CisjZW5kaWYgLyogQ09ORklHX01NVSAqLworCitzdGF0aWMgaW5saW5lIGludCBhY2Nlc3Nfb2soaW50IHR5cGUsIGNvbnN0IHZvaWQgX191c2VyICpwLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpcDsKKwlyZXR1cm4gX19hY2Nlc3Nfb2soYWRkciwgc2l6ZSk7Cit9CisKKy8qIHRoaXMgZnVuY3Rpb24gd2lsbCBnbyBhd2F5IHNvb24gLSB1c2UgYWNjZXNzX29rKCkgaW5zdGVhZCAqLworc3RhdGljIGlubGluZSBpbnQgX19kZXByZWNhdGVkIHZlcmlmeV9hcmVhKGludCB0eXBlLCBjb25zdCB2b2lkIF9fdXNlciAqIGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlyZXR1cm4gYWNjZXNzX29rKHR5cGUsYWRkcixzaXplKSA/IDAgOiAtRUZBVUxUOworfQorCisvKgorICogVWgsIHRoZXNlIHNob3VsZCBiZWNvbWUgdGhlIG1haW4gc2luZ2xlLXZhbHVlIHRyYW5zZmVyIHJvdXRpbmVzIC4uLgorICogVGhleSBhdXRvbWF0aWNhbGx5IHVzZSB0aGUgcmlnaHQgc2l6ZSBpZiB3ZSBqdXN0IGhhdmUgdGhlIHJpZ2h0CisgKiBwb2ludGVyIHR5cGUgLi4uCisgKgorICogQXMgU3VwZXJIIHVzZXMgdGhlIHNhbWUgYWRkcmVzcyBzcGFjZSBmb3Iga2VybmVsIGFuZCB1c2VyIGRhdGEsIHdlCisgKiBjYW4ganVzdCBkbyB0aGVzZSBhcyBkaXJlY3QgYXNzaWdubWVudHMuCisgKgorICogQ2FyZWZ1bCB0byBub3QKKyAqIChhKSByZS11c2UgdGhlIGFyZ3VtZW50cyBmb3Igc2lkZSBlZmZlY3RzIChzaXplb2YgaXMgb2spCisgKiAoYikgcmVxdWlyZSBhbnkga25vd2xlZGdlIG9mIHByb2Nlc3NlcyBhdCB0aGlzIHN0YWdlCisgKi8KKyNkZWZpbmUgcHV0X3VzZXIoeCxwdHIpCV9fcHV0X3VzZXJfY2hlY2soKHgpLChwdHIpLHNpemVvZigqKHB0cikpKQorI2RlZmluZSBnZXRfdXNlcih4LHB0cikgX19nZXRfdXNlcl9jaGVjaygoeCksKHB0ciksc2l6ZW9mKCoocHRyKSkpCisKKy8qCisgKiBUaGUgIl9feHh4IiB2ZXJzaW9ucyBkbyBub3QgZG8gYWRkcmVzcyBzcGFjZSBjaGVja2luZywgdXNlZnVsIHdoZW4KKyAqIGRvaW5nIG11bHRpcGxlIGFjY2Vzc2VzIHRvIHRoZSBzYW1lIGFyZWEgKHRoZSB1c2VyIGhhcyB0byBkbyB0aGUKKyAqIGNoZWNrcyBieSBoYW5kIHdpdGggImFjY2Vzc19vaygpIikKKyAqLworI2RlZmluZSBfX3B1dF91c2VyKHgscHRyKSBcCisgIF9fcHV0X3VzZXJfbm9jaGVjaygoX190eXBlb2ZfXygqKHB0cikpKSh4KSwocHRyKSxzaXplb2YoKihwdHIpKSkKKyNkZWZpbmUgX19nZXRfdXNlcih4LHB0cikgXAorICBfX2dldF91c2VyX25vY2hlY2soKHgpLChwdHIpLHNpemVvZigqKHB0cikpKQorCitzdHJ1Y3QgX19sYXJnZV9zdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIGJ1ZlsxMDBdOyB9OworI2RlZmluZSBfX20oeCkgKCooc3RydWN0IF9fbGFyZ2Vfc3RydWN0ICopKHgpKQorCisjZGVmaW5lIF9fZ2V0X3VzZXJfc2l6ZSh4LHB0cixzaXplLHJldHZhbCkJCQlcCitkbyB7CQkJCQkJCQlcCisJcmV0dmFsID0gMDsJCQkJCQlcCisJc3dpdGNoIChzaXplKSB7CQkJCQkJXAorCWNhc2UgMToJCQkJCQkJXAorCQlfX2dldF91c2VyX2FzbSh4LCBwdHIsIHJldHZhbCwgImIiKTsJCVwKKwkJYnJlYWs7CQkJCQkJXAorCWNhc2UgMjoJCQkJCQkJXAorCQlfX2dldF91c2VyX2FzbSh4LCBwdHIsIHJldHZhbCwgInciKTsJCVwKKwkJYnJlYWs7CQkJCQkJXAorCWNhc2UgNDoJCQkJCQkJXAorCQlfX2dldF91c2VyX2FzbSh4LCBwdHIsIHJldHZhbCwgImwiKTsJCVwKKwkJYnJlYWs7CQkJCQkJXAorCWRlZmF1bHQ6CQkJCQkJXAorCQlfX2dldF91c2VyX3Vua25vd24oKTsJCQkJXAorCQlicmVhazsJCQkJCQlcCisJfQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIF9fZ2V0X3VzZXJfbm9jaGVjayh4LHB0cixzaXplKQkJCQlcCisoewkJCQkJCQkJXAorCWxvbmcgX19ndV9lcnIsIF9fZ3VfdmFsOwkJCQlcCisJX19nZXRfdXNlcl9zaXplKF9fZ3VfdmFsLCAocHRyKSwgKHNpemUpLCBfX2d1X2Vycik7CVwKKwkoeCkgPSAoX190eXBlb2ZfXygqKHB0cikpKV9fZ3VfdmFsOwkJCVwKKwlfX2d1X2VycjsJCQkJCQlcCit9KQorCisjZGVmaW5lIF9fZ2V0X3VzZXJfY2hlY2soeCxwdHIsc2l6ZSkJCQkJXAorKHsJCQkJCQkJCVwKKwlsb25nIF9fZ3VfZXJyLCBfX2d1X3ZhbDsJCQkJXAorCXN3aXRjaCAoc2l6ZSkgewkJCQkJCVwKKwljYXNlIDE6CQkJCQkJCVwKKwkJX19nZXRfdXNlcl8xKF9fZ3VfdmFsLCAocHRyKSwgX19ndV9lcnIpOwlcCisJCWJyZWFrOwkJCQkJCVwKKwljYXNlIDI6CQkJCQkJCVwKKwkJX19nZXRfdXNlcl8yKF9fZ3VfdmFsLCAocHRyKSwgX19ndV9lcnIpOwlcCisJCWJyZWFrOwkJCQkJCVwKKwljYXNlIDQ6CQkJCQkJCVwKKwkJX19nZXRfdXNlcl80KF9fZ3VfdmFsLCAocHRyKSwgX19ndV9lcnIpOwlcCisJCWJyZWFrOwkJCQkJCVwKKwlkZWZhdWx0OgkJCQkJCVwKKwkJX19nZXRfdXNlcl91bmtub3duKCk7CQkJCVwKKwkJYnJlYWs7CQkJCQkJXAorCX0JCQkJCQkJXAorCQkJCQkJCQlcCisJKHgpID0gKF9fdHlwZW9mX18oKihwdHIpKSlfX2d1X3ZhbDsJCQlcCisJX19ndV9lcnI7CQkJCQkJXAorfSkKKworI2RlZmluZSBfX2dldF91c2VyXzEoeCxhZGRyLGVycikgKHsJCVwKK19fYXNtX18oInN0YwlyN19iYW5rLCAlMVxuXHQiCQlcCisJIm1vdi5sCUAoOCwlMSksICUxXG5cdCIJCVwKKwkiYW5kCSUyLCAlMVxuXHQiCQkJXAorCSJjbXAvcHoJJTFcblx0IgkJCQlcCisJImJ0L3MJMWZcblx0IgkJCQlcCisJIiBtb3YJIzAsICUwXG5cdCIJCQlcCisJIjA6XG4iCQkJCQlcCisJIm1vdgkjLTE0LCAlMFxuXHQiCQkJXAorCSJicmEJMmZcblx0IgkJCQlcCisJIiBtb3YJIzAsICUxXG4iCQkJXAorCSIxOlxuXHQiCQkJCVwKKwkibW92LmIJQCUyLCAlMVxuXHQiCQkJXAorCSJleHR1LmIJJTEsICUxXG4iCQkJXAorCSIyOlxuIgkJCQkJXAorCSIuc2VjdGlvbglfX2V4X3RhYmxlLFwiYVwiXG5cdCIJXAorCSIubG9uZwkxYiwgMGJcblx0IgkJCVwKKwkiLnByZXZpb3VzIgkJCQlcCisJOiAiPSZyIiAoZXJyKSwgIj0mciIgKHgpCQlcCisJOiAiciIgKGFkZHIpCQkJCVwKKwk6ICJ0Iik7CQkJCQlcCit9KQorCisjZGVmaW5lIF9fZ2V0X3VzZXJfMih4LGFkZHIsZXJyKSAoewkJXAorX19hc21fXygic3RjCXI3X2JhbmssICUxXG5cdCIJCVwKKwkibW92LmwJQCg4LCUxKSwgJTFcblx0IgkJXAorCSJhbmQJJTIsICUxXG5cdCIJCQlcCisJImNtcC9wegklMVxuXHQiCQkJCVwKKwkiYnQvcwkxZlxuXHQiCQkJCVwKKwkiIG1vdgkjMCwgJTBcblx0IgkJCVwKKwkiMDpcbiIJCQkJCVwKKwkibW92CSMtMTQsICUwXG5cdCIJCQlcCisJImJyYQkyZlxuXHQiCQkJCVwKKwkiIG1vdgkjMCwgJTFcbiIJCQlcCisJIjE6XG5cdCIJCQkJXAorCSJtb3YudwlAJTIsICUxXG5cdCIJCQlcCisJImV4dHUudwklMSwgJTFcbiIJCQlcCisJIjI6XG4iCQkJCQlcCisJIi5zZWN0aW9uCV9fZXhfdGFibGUsXCJhXCJcblx0IglcCisJIi5sb25nCTFiLCAwYlxuXHQiCQkJXAorCSIucHJldmlvdXMiCQkJCVwKKwk6ICI9JnIiIChlcnIpLCAiPSZyIiAoeCkJCVwKKwk6ICJyIiAoYWRkcikJCQkJXAorCTogInQiKTsJCQkJCVwKK30pCisKKyNkZWZpbmUgX19nZXRfdXNlcl80KHgsYWRkcixlcnIpICh7CQlcCitfX2FzbV9fKCJzdGMJcjdfYmFuaywgJTFcblx0IgkJXAorCSJtb3YubAlAKDgsJTEpLCAlMVxuXHQiCQlcCisJImFuZAklMiwgJTFcblx0IgkJCVwKKwkiY21wL3B6CSUxXG5cdCIJCQkJXAorCSJidC9zCTFmXG5cdCIJCQkJXAorCSIgbW92CSMwLCAlMFxuXHQiCQkJXAorCSIwOlxuIgkJCQkJXAorCSJtb3YJIy0xNCwgJTBcblx0IgkJCVwKKwkiYnJhCTJmXG5cdCIJCQkJXAorCSIgbW92CSMwLCAlMVxuIgkJCVwKKwkiMTpcblx0IgkJCQlcCisJIm1vdi5sCUAlMiwgJTFcblx0IgkJCVwKKwkiMjpcbiIJCQkJCVwKKwkiLnNlY3Rpb24JX19leF90YWJsZSxcImFcIlxuXHQiCVwKKwkiLmxvbmcJMWIsIDBiXG5cdCIJCQlcCisJIi5wcmV2aW91cyIJCQkJXAorCTogIj0mciIgKGVyciksICI9JnIiICh4KQkJXAorCTogInIiIChhZGRyKQkJCQlcCisJOiAidCIpOwkJCQkJXAorfSkKKworI2RlZmluZSBfX2dldF91c2VyX2FzbSh4LCBhZGRyLCBlcnIsIGluc24pIFwKKyh7IFwKK19fYXNtX18gX192b2xhdGlsZV9fKCBcCisJIjE6XG5cdCIgXAorCSJtb3YuIiBpbnNuICIJJTIsICUxXG5cdCIgXAorCSJtb3YJIzAsICUwXG4iIFwKKwkiMjpcbiIgXAorCSIuc2VjdGlvbgkuZml4dXAsXCJheFwiXG4iIFwKKwkiMzpcblx0IiBcCisJIm1vdgkjMCwgJTFcblx0IiBcCisJIm1vdi5sCTRmLCAlMFxuXHQiIFwKKwkiam1wCUAlMFxuXHQiIFwKKwkiIG1vdgklMywgJTBcbiIgXAorCSI0OgkubG9uZwkyYlxuXHQiIFwKKwkiLnByZXZpb3VzXG4iIFwKKwkiLnNlY3Rpb24JX19leF90YWJsZSxcImFcIlxuXHQiIFwKKwkiLmxvbmcJMWIsIDNiXG5cdCIgXAorCSIucHJldmlvdXMiIFwKKwk6Ij0mciIgKGVyciksICI9JnIiICh4KSBcCisJOiJtIiAoX19tKGFkZHIpKSwgImkiICgtRUZBVUxUKSk7IH0pCisKK2V4dGVybiB2b2lkIF9fZ2V0X3VzZXJfdW5rbm93bih2b2lkKTsKKworI2RlZmluZSBfX3B1dF91c2VyX3NpemUoeCxwdHIsc2l6ZSxyZXR2YWwpCQlcCitkbyB7CQkJCQkJCVwKKwlyZXR2YWwgPSAwOwkJCQkJXAorCXN3aXRjaCAoc2l6ZSkgewkJCQkJXAorCWNhc2UgMToJCQkJCQlcCisJCV9fcHV0X3VzZXJfYXNtKHgsIHB0ciwgcmV0dmFsLCAiYiIpOwlcCisJCWJyZWFrOwkJCQkJXAorCWNhc2UgMjoJCQkJCQlcCisJCV9fcHV0X3VzZXJfYXNtKHgsIHB0ciwgcmV0dmFsLCAidyIpOwlcCisJCWJyZWFrOwkJCQkJXAorCWNhc2UgNDoJCQkJCQlcCisJCV9fcHV0X3VzZXJfYXNtKHgsIHB0ciwgcmV0dmFsLCAibCIpOwlcCisJCWJyZWFrOwkJCQkJXAorCWNhc2UgODoJCQkJCQlcCisJCV9fcHV0X3VzZXJfdTY0KHgsIHB0ciwgcmV0dmFsKTsJCVwKKwkJYnJlYWs7CQkJCQlcCisJZGVmYXVsdDoJCQkJCVwKKwkJX19wdXRfdXNlcl91bmtub3duKCk7CQkJXAorCX0JCQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIF9fcHV0X3VzZXJfbm9jaGVjayh4LHB0cixzaXplKQkJCVwKKyh7CQkJCQkJCVwKKwlsb25nIF9fcHVfZXJyOwkJCQkJXAorCV9fcHV0X3VzZXJfc2l6ZSgoeCksKHB0ciksKHNpemUpLF9fcHVfZXJyKTsJXAorCV9fcHVfZXJyOwkJCQkJXAorfSkKKworI2RlZmluZSBfX3B1dF91c2VyX2NoZWNrKHgscHRyLHNpemUpCQkJCVwKKyh7CQkJCQkJCQlcCisJbG9uZyBfX3B1X2VyciA9IC1FRkFVTFQ7CQkJCVwKKwlfX3R5cGVvZl9fKCoocHRyKSkgKl9fcHVfYWRkciA9IChwdHIpOwkJCVwKKwkJCQkJCQkJXAorCWlmIChfX2FjY2Vzc19vaygodW5zaWduZWQgbG9uZylfX3B1X2FkZHIsc2l6ZSkpCQlcCisJCV9fcHV0X3VzZXJfc2l6ZSgoeCksX19wdV9hZGRyLChzaXplKSxfX3B1X2Vycik7CVwKKwlfX3B1X2VycjsJCQkJCQlcCit9KQorCisjZGVmaW5lIF9fcHV0X3VzZXJfYXNtKHgsIGFkZHIsIGVyciwgaW5zbikgXAorKHsgXAorX19hc21fXyBfX3ZvbGF0aWxlX18oIFwKKwkiMTpcblx0IiBcCisJIm1vdi4iIGluc24gIgklMSwgJTJcblx0IiBcCisJIm1vdgkjMCwgJTBcbiIgXAorCSIyOlxuIiBcCisJIi5zZWN0aW9uCS5maXh1cCxcImF4XCJcbiIgXAorCSIzOlxuXHQiIFwKKwkibm9wXG5cdCIgXAorCSJtb3YubAk0ZiwgJTBcblx0IiBcCisJImptcAlAJTBcblx0IiBcCisJIm1vdgklMywgJTBcbiIgXAorCSI0OgkubG9uZwkyYlxuXHQiIFwKKwkiLnByZXZpb3VzXG4iIFwKKwkiLnNlY3Rpb24JX19leF90YWJsZSxcImFcIlxuXHQiIFwKKwkiLmxvbmcJMWIsIDNiXG5cdCIgXAorCSIucHJldmlvdXMiIFwKKwk6Ij0mciIgKGVycikgXAorCToiciIgKHgpLCAibSIgKF9fbShhZGRyKSksICJpIiAoLUVGQVVMVCkgXAorICAgICAgICA6Im1lbW9yeSIpOyB9KQorCisjaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fXykKKyNkZWZpbmUgX19wdXRfdXNlcl91NjQodmFsLGFkZHIscmV0dmFsKSBcCisoeyBcCitfX2FzbV9fIF9fdm9sYXRpbGVfXyggXAorCSIxOlxuXHQiIFwKKwkibW92LmwJJVIxLCUyXG5cdCIgXAorCSJtb3YubAklUzEsJVQyXG5cdCIgXAorCSJtb3YJIzAsJTBcbiIgXAorCSIyOlxuIiBcCisJIi5zZWN0aW9uCS5maXh1cCxcImF4XCJcbiIgXAorCSIzOlxuXHQiIFwKKwkibm9wXG5cdCIgXAorCSJtb3YubAk0ZiwlMFxuXHQiIFwKKwkiam1wCUAlMFxuXHQiIFwKKwkiIG1vdgklMywlMFxuIiBcCisJIjQ6CS5sb25nCTJiXG5cdCIgXAorCSIucHJldmlvdXNcbiIgXAorCSIuc2VjdGlvbglfX2V4X3RhYmxlLFwiYVwiXG5cdCIgXAorCSIubG9uZwkxYiwgM2Jcblx0IiBcCisJIi5wcmV2aW91cyIgXAorCTogIj1yIiAocmV0dmFsKSBcCisJOiAiciIgKHZhbCksICJtIiAoX19tKGFkZHIpKSwgImkiICgtRUZBVUxUKSBcCisgICAgICAgIDogIm1lbW9yeSIpOyB9KQorI2Vsc2UKKyNkZWZpbmUgX19wdXRfdXNlcl91NjQodmFsLGFkZHIscmV0dmFsKSBcCisoeyBcCitfX2FzbV9fIF9fdm9sYXRpbGVfXyggXAorCSIxOlxuXHQiIFwKKwkibW92LmwJJVMxLCUyXG5cdCIgXAorCSJtb3YubAklUjEsJVQyXG5cdCIgXAorCSJtb3YJIzAsJTBcbiIgXAorCSIyOlxuIiBcCisJIi5zZWN0aW9uCS5maXh1cCxcImF4XCJcbiIgXAorCSIzOlxuXHQiIFwKKwkibm9wXG5cdCIgXAorCSJtb3YubAk0ZiwlMFxuXHQiIFwKKwkiam1wCUAlMFxuXHQiIFwKKwkiIG1vdgklMywlMFxuIiBcCisJIjQ6CS5sb25nCTJiXG5cdCIgXAorCSIucHJldmlvdXNcbiIgXAorCSIuc2VjdGlvbglfX2V4X3RhYmxlLFwiYVwiXG5cdCIgXAorCSIubG9uZwkxYiwgM2Jcblx0IiBcCisJIi5wcmV2aW91cyIgXAorCTogIj1yIiAocmV0dmFsKSBcCisJOiAiciIgKHZhbCksICJtIiAoX19tKGFkZHIpKSwgImkiICgtRUZBVUxUKSBcCisgICAgICAgIDogIm1lbW9yeSIpOyB9KQorI2VuZGlmCisKK2V4dGVybiB2b2lkIF9fcHV0X3VzZXJfdW5rbm93bih2b2lkKTsKKwwKKy8qIEdlbmVyaWMgYXJiaXRyYXJ5IHNpemVkIGNvcHkuICAqLworLyogUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgTk9UIGNvcGllZCAqLworZXh0ZXJuIF9fa2VybmVsX3NpemVfdCBfX2NvcHlfdXNlcih2b2lkICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgX19rZXJuZWxfc2l6ZV90IG4pOworCisjZGVmaW5lIGNvcHlfdG9fdXNlcih0byxmcm9tLG4pICh7IFwKK3ZvaWQgKl9fY29weV90byA9ICh2b2lkICopICh0byk7IFwKK19fa2VybmVsX3NpemVfdCBfX2NvcHlfc2l6ZSA9IChfX2tlcm5lbF9zaXplX3QpIChuKTsgXAorX19rZXJuZWxfc2l6ZV90IF9fY29weV9yZXM7IFwKK2lmKF9fY29weV9zaXplICYmIF9fYWNjZXNzX29rKCh1bnNpZ25lZCBsb25nKV9fY29weV90bywgX19jb3B5X3NpemUpKSB7IFwKK19fY29weV9yZXMgPSBfX2NvcHlfdXNlcihfX2NvcHlfdG8sICh2b2lkICopIChmcm9tKSwgX19jb3B5X3NpemUpOyBcCit9IGVsc2UgX19jb3B5X3JlcyA9IF9fY29weV9zaXplOyBcCitfX2NvcHlfcmVzOyB9KQorCisjZGVmaW5lIF9fY29weV90b191c2VyKHRvLGZyb20sbikJCVwKKwlfX2NvcHlfdXNlcigodm9pZCAqKSh0byksCQlcCisJCSAgICAodm9pZCAqKShmcm9tKSwgbikKKworI2RlZmluZSBfX2NvcHlfdG9fdXNlcl9pbmF0b21pYyBfX2NvcHlfdG9fdXNlcgorI2RlZmluZSBfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljIF9fY29weV9mcm9tX3VzZXIKKworCisjZGVmaW5lIGNvcHlfZnJvbV91c2VyKHRvLGZyb20sbikgKHsgXAordm9pZCAqX19jb3B5X3RvID0gKHZvaWQgKikgKHRvKTsgXAordm9pZCAqX19jb3B5X2Zyb20gPSAodm9pZCAqKSAoZnJvbSk7IFwKK19fa2VybmVsX3NpemVfdCBfX2NvcHlfc2l6ZSA9IChfX2tlcm5lbF9zaXplX3QpIChuKTsgXAorX19rZXJuZWxfc2l6ZV90IF9fY29weV9yZXM7IFwKK2lmKF9fY29weV9zaXplICYmIF9fYWNjZXNzX29rKCh1bnNpZ25lZCBsb25nKV9fY29weV9mcm9tLCBfX2NvcHlfc2l6ZSkpIHsgXAorX19jb3B5X3JlcyA9IF9fY29weV91c2VyKF9fY29weV90bywgX19jb3B5X2Zyb20sIF9fY29weV9zaXplKTsgXAorfSBlbHNlIF9fY29weV9yZXMgPSBfX2NvcHlfc2l6ZTsgXAorX19jb3B5X3JlczsgfSkKKworI2RlZmluZSBfX2NvcHlfZnJvbV91c2VyKHRvLGZyb20sbikJCVwKKwlfX2NvcHlfdXNlcigodm9pZCAqKSh0byksCQlcCisJCSAgICAodm9pZCAqKShmcm9tKSwgbikKKworLyoKKyAqIENsZWFyIHRoZSBhcmVhIGFuZCByZXR1cm4gcmVtYWluaW5nIG51bWJlciBvZiBieXRlcworICogKG9uIGZhaWx1cmUuICBVc3VhbGx5IGl0J3MgMC4pCisgKi8KK2V4dGVybiBfX2tlcm5lbF9zaXplX3QgX19jbGVhcl91c2VyKHZvaWQgKmFkZHIsIF9fa2VybmVsX3NpemVfdCBzaXplKTsKKworI2RlZmluZSBjbGVhcl91c2VyKGFkZHIsbikgKHsgXAordm9pZCAqIF9fY2xfYWRkciA9IChhZGRyKTsgXAordW5zaWduZWQgbG9uZyBfX2NsX3NpemUgPSAobik7IFwKK2lmIChfX2NsX3NpemUgJiYgX19hY2Nlc3Nfb2soKCh1bnNpZ25lZCBsb25nKShfX2NsX2FkZHIpKSwgX19jbF9zaXplKSkgXAorX19jbF9zaXplID0gX19jbGVhcl91c2VyKF9fY2xfYWRkciwgX19jbF9zaXplKTsgXAorX19jbF9zaXplOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQKK19fc3RybmNweV9mcm9tX3VzZXIodW5zaWduZWQgbG9uZyBfX2Rlc3QsIHVuc2lnbmVkIGxvbmcgX191c2VyIF9fc3JjLCBpbnQgX19jb3VudCkKK3sKKwlfX2tlcm5lbF9zaXplX3QgcmVzOworCXVuc2lnbmVkIGxvbmcgX19kdW1teSwgX2QsIF9zOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSI5OlxuIgorCQkibW92LmIJQCUyKywgJTFcblx0IgorCQkiY21wL2VxCSMwLCAlMVxuXHQiCisJCSJidC9zCTJmXG4iCisJCSIxOlxuIgorCQkibW92LmIJJTEsIEAlM1xuXHQiCisJCSJkdAklN1xuXHQiCisJCSJiZi9zCTliXG5cdCIKKwkJIiBhZGQJIzEsICUzXG5cdCIKKwkJIjI6XG5cdCIKKwkJInN1YgklNywgJTBcbiIKKwkJIjM6XG4iCisJCSIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iCisJCSI0OlxuXHQiCisJCSJtb3YubAk1ZiwgJTFcblx0IgorCQkiam1wCUAlMVxuXHQiCisJCSIgbW92CSU4LCAlMFxuXHQiCisJCSIuYmFsaWduIDRcbiIKKwkJIjU6CS5sb25nIDNiXG4iCisJCSIucHJldmlvdXNcbiIKKwkJIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIKKwkJIgkuYmFsaWduIDRcbiIKKwkJIgkubG9uZyA5Yiw0YlxuIgorCQkiLnByZXZpb3VzIgorCQk6ICI9ciIgKHJlcyksICI9JnoiIChfX2R1bW15KSwgIj1yIiAoX3MpLCAiPXIiIChfZCkKKwkJOiAiMCIgKF9fY291bnQpLCAiMiIgKF9fc3JjKSwgIjMiIChfX2Rlc3QpLCAiciIgKF9fY291bnQpLAorCQkgICJpIiAoLUVGQVVMVCkKKwkJOiAibWVtb3J5IiwgInQiKTsKKworCXJldHVybiByZXM7Cit9CisKKyNkZWZpbmUgc3RybmNweV9mcm9tX3VzZXIoZGVzdCxzcmMsY291bnQpICh7IFwKK3Vuc2lnbmVkIGxvbmcgX19zZnVfc3JjID0gKHVuc2lnbmVkIGxvbmcpIChzcmMpOyBcCitpbnQgX19zZnVfY291bnQgPSAoaW50KSAoY291bnQpOyBcCitsb25nIF9fc2Z1X3JlcyA9IC1FRkFVTFQ7IFwKK2lmKF9fYWNjZXNzX29rKF9fc2Z1X3NyYywgX19zZnVfY291bnQpKSB7IFwKK19fc2Z1X3JlcyA9IF9fc3RybmNweV9mcm9tX3VzZXIoKHVuc2lnbmVkIGxvbmcpIChkZXN0KSwgX19zZnVfc3JjLCBfX3NmdV9jb3VudCk7IFwKK30gX19zZnVfcmVzOyB9KQorCisvKgorICogUmV0dXJuIHRoZSBzaXplIG9mIGEgc3RyaW5nIChpbmNsdWRpbmcgdGhlIGVuZGluZyAwISkKKyAqLworc3RhdGljIF9faW5saW5lX18gbG9uZyBfX3N0cm5sZW5fdXNlcihjb25zdCBjaGFyIF9fdXNlciAqX19zLCBsb25nIF9fbikKK3sKKwl1bnNpZ25lZCBsb25nIHJlczsKKwl1bnNpZ25lZCBsb25nIF9fZHVtbXk7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJIjk6XG4iCisJCSJjbXAvZXEJJTQsICUwXG5cdCIKKwkJImJ0CTJmXG4iCisJCSIxOlx0IgorCQkibW92LmIJQCglMCwlMyksICUxXG5cdCIKKwkJInRzdAklMSwgJTFcblx0IgorCQkiYmYvcwk5YlxuXHQiCisJCSIgYWRkCSMxLCAlMFxuIgorCQkiMjpcbiIKKwkJIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIKKwkJIjM6XG5cdCIKKwkJIm1vdi5sCTRmLCAlMVxuXHQiCisJCSJqbXAJQCUxXG5cdCIKKwkJIiBtb3YJJTUsICUwXG4iCisJCSIuYmFsaWduIDRcbiIKKwkJIjQ6CS5sb25nIDJiXG4iCisJCSIucHJldmlvdXNcbiIKKwkJIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIKKwkJIgkuYmFsaWduIDRcbiIKKwkJIgkubG9uZyAxYiwzYlxuIgorCQkiLnByZXZpb3VzIgorCQk6ICI9eiIgKHJlcyksICI9JnIiIChfX2R1bW15KQorCQk6ICIwIiAoMCksICJyIiAoX19zKSwgInIiIChfX24pLCAiaSIgKC1FRkFVTFQpCisJCTogInQiKTsKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBsb25nIHN0cm5sZW5fdXNlcihjb25zdCBjaGFyIF9fdXNlciAqcywgbG9uZyBuKQoreworCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBzLCBuKSkKKwkJcmV0dXJuIDA7CisJZWxzZQorCQlyZXR1cm4gX19zdHJubGVuX3VzZXIocywgbik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGxvbmcgc3RybGVuX3VzZXIoY29uc3QgY2hhciBfX3VzZXIgKnMpCit7CisJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIHMsIDApKQorCQlyZXR1cm4gMDsKKwllbHNlCisJCXJldHVybiBfX3N0cm5sZW5fdXNlcihzLCB+MFVMID4+IDEpOworfQorCisvKgorICogVGhlIGV4Y2VwdGlvbiB0YWJsZSBjb25zaXN0cyBvZiBwYWlycyBvZiBhZGRyZXNzZXM6IHRoZSBmaXJzdCBpcyB0aGUKKyAqIGFkZHJlc3Mgb2YgYW4gaW5zdHJ1Y3Rpb24gdGhhdCBpcyBhbGxvd2VkIHRvIGZhdWx0LCBhbmQgdGhlIHNlY29uZCBpcworICogdGhlIGFkZHJlc3MgYXQgd2hpY2ggdGhlIHByb2dyYW0gc2hvdWxkIGNvbnRpbnVlLiAgTm8gcmVnaXN0ZXJzIGFyZQorICogbW9kaWZpZWQsIHNvIGl0IGlzIGVudGlyZWx5IHVwIHRvIHRoZSBjb250aW51YXRpb24gY29kZSB0byBmaWd1cmUgb3V0CisgKiB3aGF0IHRvIGRvLgorICoKKyAqIEFsbCB0aGUgcm91dGluZXMgYmVsb3cgdXNlIGJpdHMgb2YgZml4dXAgY29kZSB0aGF0IGFyZSBvdXQgb2YgbGluZQorICogd2l0aCB0aGUgbWFpbiBpbnN0cnVjdGlvbiBwYXRoLiAgVGhpcyBtZWFucyB3aGVuIGV2ZXJ5dGhpbmcgaXMgd2VsbCwKKyAqIHdlIGRvbid0IGV2ZW4gaGF2ZSB0byBqdW1wIG92ZXIgdGhlbS4gIEZ1cnRoZXIsIHRoZXkgZG8gbm90IGludHJ1ZGUKKyAqIG9uIG91ciBjYWNoZSBvciB0bGIgZW50cmllcy4KKyAqLworCitzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5Cit7CisJdW5zaWduZWQgbG9uZyBpbnNuLCBmaXh1cDsKK307CisKK2V4dGVybiBpbnQgZml4dXBfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworI2VuZGlmIC8qIF9fQVNNX1NIX1VBQ0NFU1NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvdWJjLmggYi9pbmNsdWRlL2FzbS1zaC91YmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTRmNTFmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvdWJjLmgKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLXNoL3ViYy5oCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5IE5paWJlIFl1dGFrYQorICogQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzIFBhdWwgTXVuZHQKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfX0FTTV9TSF9VQkNfSAorI2RlZmluZSBfX0FTTV9TSF9VQkNfSAorI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGFzbS9jcHUvdWJjLmg+CisKKy8qIFVzZXIgQnJlYWsgQ29udHJvbGxlciAqLworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNykgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA5KSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzAwKQorI2RlZmluZSBVQkNfVFlQRV9TSDc3MjkJKGNwdV9kYXRhLT50eXBlID09IENQVV9TSDc3MjkpCisjZWxzZQorI2RlZmluZSBVQkNfVFlQRV9TSDc3MjkJMAorI2VuZGlmCisKKyNkZWZpbmUgQkFNUl9BU0lECQkoMSA8PCAyKQorI2RlZmluZSBCQU1SX05PTkUJCTAKKyNkZWZpbmUgQkFNUl8xMAkJCTB4MQorI2RlZmluZSBCQU1SXzEyCQkJMHgyCisjZGVmaW5lIEJBTVJfQUxMCQkweDMKKyNkZWZpbmUgQkFNUl8xNgkJCTB4OAorI2RlZmluZSBCQU1SXzIwCQkJMHg5CisKKyNkZWZpbmUgQkJSX0lOU1QJCSgxIDw8IDQpCisjZGVmaW5lIEJCUl9EQVRBCQkoMiA8PCA0KQorI2RlZmluZSBCQlJfUkVBRAkJKDEgPDwgMikKKyNkZWZpbmUgQkJSX1dSSVRFCQkoMiA8PCAyKQorI2RlZmluZSBCQlJfQllURQkJMHgxCisjZGVmaW5lIEJCUl9IQUxGCQkweDIKKyNkZWZpbmUgQkJSX0xPTkcJCTB4MworI2RlZmluZSBCQlJfUVVBRAkJKDEgPDwgNikJLyogU0g3NzUwICovCisjZGVmaW5lIEJCUl9DUFUJCQkoMSA8PCA2KQkvKiBTSDc3MDlBLFNINzcyOSAqLworI2RlZmluZSBCQlJfRE1BCQkJKDIgPDwgNikJLyogU0g3NzA5QSxTSDc3MjkgKi8KKworI2RlZmluZSBCUkNSX0NNRkEJCSgxIDw8IDE1KQorI2RlZmluZSBCUkNSX0NNRkIJCSgxIDw8IDE0KQorI2RlZmluZSBCUkNSX1BDVEUJCSgxIDw8IDExKQorI2RlZmluZSBCUkNSX1BDQkEJCSgxIDw8IDEwKQkvKiAxOiBhZnRlciBleGVjdXRpb24gKi8KKyNkZWZpbmUgQlJDUl9EQkVCCQkoMSA8PCA3KQorI2RlZmluZSBCUkNSX1BDQkIJCSgxIDw8IDYpCisjZGVmaW5lIEJSQ1JfU0VRCQkoMSA8PCAzKQorI2RlZmluZSBCUkNSX1VCREUJCSgxIDw8IDApCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisvKiBhcmNoL3NoL2tlcm5lbC91YmMuUyAqLworZXh0ZXJuIHZvaWQgdWJjX3dha2V1cCh2b2lkKTsKK2V4dGVybiB2b2lkIHViY19zbGVlcCh2b2lkKTsKKyNlbmRpZgorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9fQVNNX1NIX1VCQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC91Y29udGV4dC5oIGIvaW5jbHVkZS9hc20tc2gvdWNvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDJlZjFkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvdWNvbnRleHQuaApAQCAtMCwwICsxLDEyIEBACisjaWZuZGVmIF9fQVNNX1NIX1VDT05URVhUX0gKKyNkZWZpbmUgX19BU01fU0hfVUNPTlRFWFRfSAorCitzdHJ1Y3QgdWNvbnRleHQgeworCXVuc2lnbmVkIGxvbmcJICB1Y19mbGFnczsKKwlzdHJ1Y3QgdWNvbnRleHQgICp1Y19saW5rOworCXN0YWNrX3QJCSAgdWNfc3RhY2s7CisJc3RydWN0IHNpZ2NvbnRleHQgdWNfbWNvbnRleHQ7CisJc2lnc2V0X3QJICB1Y19zaWdtYXNrOwkvKiBtYXNrIGxhc3QgZm9yIGV4dGVuc2liaWxpdHkgKi8KK307CisKKyNlbmRpZiAvKiBfX0FTTV9TSF9VQ09OVEVYVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC91bmFsaWduZWQuaCBiL2luY2x1ZGUvYXNtLXNoL3VuYWxpZ25lZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyNTBlMzAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC91bmFsaWduZWQuaApAQCAtMCwwICsxLDcgQEAKKyNpZm5kZWYgX19BU01fU0hfVU5BTElHTkVEX0gKKyNkZWZpbmUgX19BU01fU0hfVU5BTElHTkVEX0gKKworLyogU0ggY2FuJ3QgaGFuZGxlIHVuYWxpZ25lZCBhY2Nlc3Nlcy4gKi8KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy91bmFsaWduZWQuaD4KKworI2VuZGlmIC8qIF9fQVNNX1NIX1VOQUxJR05FRF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLXNoL3VuaXN0ZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0NTQ0NzAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC91bmlzdGQuaApAQCAtMCwwICsxLDUyMyBAQAorI2lmbmRlZiBfX0FTTV9TSF9VTklTVERfSAorI2RlZmluZSBfX0FTTV9TSF9VTklTVERfSAorCisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5ICBOaWliZSBZdXRha2EKKyAqLworCisvKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBzeXN0ZW0gY2FsbCBudW1iZXJzLgorICovCisKKyNkZWZpbmUgX19OUl9yZXN0YXJ0X3N5c2NhbGwJICAwCisjZGVmaW5lIF9fTlJfZXhpdAkJICAxCisjZGVmaW5lIF9fTlJfZm9yawkJICAyCisjZGVmaW5lIF9fTlJfcmVhZAkJICAzCisjZGVmaW5lIF9fTlJfd3JpdGUJCSAgNAorI2RlZmluZSBfX05SX29wZW4JCSAgNQorI2RlZmluZSBfX05SX2Nsb3NlCQkgIDYKKyNkZWZpbmUgX19OUl93YWl0cGlkCQkgIDcKKyNkZWZpbmUgX19OUl9jcmVhdAkJICA4CisjZGVmaW5lIF9fTlJfbGluawkJICA5CisjZGVmaW5lIF9fTlJfdW5saW5rCQkgMTAKKyNkZWZpbmUgX19OUl9leGVjdmUJCSAxMQorI2RlZmluZSBfX05SX2NoZGlyCQkgMTIKKyNkZWZpbmUgX19OUl90aW1lCQkgMTMKKyNkZWZpbmUgX19OUl9ta25vZAkJIDE0CisjZGVmaW5lIF9fTlJfY2htb2QJCSAxNQorI2RlZmluZSBfX05SX2xjaG93bgkJIDE2CisjZGVmaW5lIF9fTlJfYnJlYWsJCSAxNworI2RlZmluZSBfX05SX29sZHN0YXQJCSAxOAorI2RlZmluZSBfX05SX2xzZWVrCQkgMTkKKyNkZWZpbmUgX19OUl9nZXRwaWQJCSAyMAorI2RlZmluZSBfX05SX21vdW50CQkgMjEKKyNkZWZpbmUgX19OUl91bW91bnQJCSAyMgorI2RlZmluZSBfX05SX3NldHVpZAkJIDIzCisjZGVmaW5lIF9fTlJfZ2V0dWlkCQkgMjQKKyNkZWZpbmUgX19OUl9zdGltZQkJIDI1CisjZGVmaW5lIF9fTlJfcHRyYWNlCQkgMjYKKyNkZWZpbmUgX19OUl9hbGFybQkJIDI3CisjZGVmaW5lIF9fTlJfb2xkZnN0YXQJCSAyOAorI2RlZmluZSBfX05SX3BhdXNlCQkgMjkKKyNkZWZpbmUgX19OUl91dGltZQkJIDMwCisjZGVmaW5lIF9fTlJfc3R0eQkJIDMxCisjZGVmaW5lIF9fTlJfZ3R0eQkJIDMyCisjZGVmaW5lIF9fTlJfYWNjZXNzCQkgMzMKKyNkZWZpbmUgX19OUl9uaWNlCQkgMzQKKyNkZWZpbmUgX19OUl9mdGltZQkJIDM1CisjZGVmaW5lIF9fTlJfc3luYwkJIDM2CisjZGVmaW5lIF9fTlJfa2lsbAkJIDM3CisjZGVmaW5lIF9fTlJfcmVuYW1lCQkgMzgKKyNkZWZpbmUgX19OUl9ta2RpcgkJIDM5CisjZGVmaW5lIF9fTlJfcm1kaXIJCSA0MAorI2RlZmluZSBfX05SX2R1cAkJIDQxCisjZGVmaW5lIF9fTlJfcGlwZQkJIDQyCisjZGVmaW5lIF9fTlJfdGltZXMJCSA0MworI2RlZmluZSBfX05SX3Byb2YJCSA0NAorI2RlZmluZSBfX05SX2JyawkJIDQ1CisjZGVmaW5lIF9fTlJfc2V0Z2lkCQkgNDYKKyNkZWZpbmUgX19OUl9nZXRnaWQJCSA0NworI2RlZmluZSBfX05SX3NpZ25hbAkJIDQ4CisjZGVmaW5lIF9fTlJfZ2V0ZXVpZAkJIDQ5CisjZGVmaW5lIF9fTlJfZ2V0ZWdpZAkJIDUwCisjZGVmaW5lIF9fTlJfYWNjdAkJIDUxCisjZGVmaW5lIF9fTlJfdW1vdW50MgkJIDUyCisjZGVmaW5lIF9fTlJfbG9jawkJIDUzCisjZGVmaW5lIF9fTlJfaW9jdGwJCSA1NAorI2RlZmluZSBfX05SX2ZjbnRsCQkgNTUKKyNkZWZpbmUgX19OUl9tcHgJCSA1NgorI2RlZmluZSBfX05SX3NldHBnaWQJCSA1NworI2RlZmluZSBfX05SX3VsaW1pdAkJIDU4CisjZGVmaW5lIF9fTlJfb2xkb2xkdW5hbWUJIDU5CisjZGVmaW5lIF9fTlJfdW1hc2sJCSA2MAorI2RlZmluZSBfX05SX2Nocm9vdAkJIDYxCisjZGVmaW5lIF9fTlJfdXN0YXQJCSA2MgorI2RlZmluZSBfX05SX2R1cDIJCSA2MworI2RlZmluZSBfX05SX2dldHBwaWQJCSA2NAorI2RlZmluZSBfX05SX2dldHBncnAJCSA2NQorI2RlZmluZSBfX05SX3NldHNpZAkJIDY2CisjZGVmaW5lIF9fTlJfc2lnYWN0aW9uCQkgNjcKKyNkZWZpbmUgX19OUl9zZ2V0bWFzawkJIDY4CisjZGVmaW5lIF9fTlJfc3NldG1hc2sJCSA2OQorI2RlZmluZSBfX05SX3NldHJldWlkCQkgNzAKKyNkZWZpbmUgX19OUl9zZXRyZWdpZAkJIDcxCisjZGVmaW5lIF9fTlJfc2lnc3VzcGVuZAkJIDcyCisjZGVmaW5lIF9fTlJfc2lncGVuZGluZwkJIDczCisjZGVmaW5lIF9fTlJfc2V0aG9zdG5hbWUJIDc0CisjZGVmaW5lIF9fTlJfc2V0cmxpbWl0CQkgNzUKKyNkZWZpbmUgX19OUl9nZXRybGltaXQJIAkgNzYJLyogQmFjayBjb21wYXRpYmxlIDJHaWcgbGltaXRlZCBybGltaXQgKi8KKyNkZWZpbmUgX19OUl9nZXRydXNhZ2UJCSA3NworI2RlZmluZSBfX05SX2dldHRpbWVvZmRheQkgNzgKKyNkZWZpbmUgX19OUl9zZXR0aW1lb2ZkYXkJIDc5CisjZGVmaW5lIF9fTlJfZ2V0Z3JvdXBzCQkgODAKKyNkZWZpbmUgX19OUl9zZXRncm91cHMJCSA4MQorI2RlZmluZSBfX05SX3NlbGVjdAkJIDgyCisjZGVmaW5lIF9fTlJfc3ltbGluawkJIDgzCisjZGVmaW5lIF9fTlJfb2xkbHN0YXQJCSA4NAorI2RlZmluZSBfX05SX3JlYWRsaW5rCQkgODUKKyNkZWZpbmUgX19OUl91c2VsaWIJCSA4NgorI2RlZmluZSBfX05SX3N3YXBvbgkJIDg3CisjZGVmaW5lIF9fTlJfcmVib290CQkgODgKKyNkZWZpbmUgX19OUl9yZWFkZGlyCQkgODkKKyNkZWZpbmUgX19OUl9tbWFwCQkgOTAKKyNkZWZpbmUgX19OUl9tdW5tYXAJCSA5MQorI2RlZmluZSBfX05SX3RydW5jYXRlCQkgOTIKKyNkZWZpbmUgX19OUl9mdHJ1bmNhdGUJCSA5MworI2RlZmluZSBfX05SX2ZjaG1vZAkJIDk0CisjZGVmaW5lIF9fTlJfZmNob3duCQkgOTUKKyNkZWZpbmUgX19OUl9nZXRwcmlvcml0eQkgOTYKKyNkZWZpbmUgX19OUl9zZXRwcmlvcml0eQkgOTcKKyNkZWZpbmUgX19OUl9wcm9maWwJCSA5OAorI2RlZmluZSBfX05SX3N0YXRmcwkJIDk5CisjZGVmaW5lIF9fTlJfZnN0YXRmcwkJMTAwCisjZGVmaW5lIF9fTlJfaW9wZXJtCQkxMDEKKyNkZWZpbmUgX19OUl9zb2NrZXRjYWxsCQkxMDIKKyNkZWZpbmUgX19OUl9zeXNsb2cJCTEwMworI2RlZmluZSBfX05SX3NldGl0aW1lcgkJMTA0CisjZGVmaW5lIF9fTlJfZ2V0aXRpbWVyCQkxMDUKKyNkZWZpbmUgX19OUl9zdGF0CQkxMDYKKyNkZWZpbmUgX19OUl9sc3RhdAkJMTA3CisjZGVmaW5lIF9fTlJfZnN0YXQJCTEwOAorI2RlZmluZSBfX05SX29sZHVuYW1lCQkxMDkKKyNkZWZpbmUgX19OUl9pb3BsCQkxMTAKKyNkZWZpbmUgX19OUl92aGFuZ3VwCQkxMTEKKyNkZWZpbmUgX19OUl9pZGxlCQkxMTIKKyNkZWZpbmUgX19OUl92bTg2b2xkCQkxMTMKKyNkZWZpbmUgX19OUl93YWl0NAkJMTE0CisjZGVmaW5lIF9fTlJfc3dhcG9mZgkJMTE1CisjZGVmaW5lIF9fTlJfc3lzaW5mbwkJMTE2CisjZGVmaW5lIF9fTlJfaXBjCQkxMTcKKyNkZWZpbmUgX19OUl9mc3luYwkJMTE4CisjZGVmaW5lIF9fTlJfc2lncmV0dXJuCQkxMTkKKyNkZWZpbmUgX19OUl9jbG9uZQkJMTIwCisjZGVmaW5lIF9fTlJfc2V0ZG9tYWlubmFtZQkxMjEKKyNkZWZpbmUgX19OUl91bmFtZQkJMTIyCisjZGVmaW5lIF9fTlJfbW9kaWZ5X2xkdAkJMTIzCisjZGVmaW5lIF9fTlJfYWRqdGltZXgJCTEyNAorI2RlZmluZSBfX05SX21wcm90ZWN0CQkxMjUKKyNkZWZpbmUgX19OUl9zaWdwcm9jbWFzawkxMjYKKyNkZWZpbmUgX19OUl9jcmVhdGVfbW9kdWxlCTEyNworI2RlZmluZSBfX05SX2luaXRfbW9kdWxlCTEyOAorI2RlZmluZSBfX05SX2RlbGV0ZV9tb2R1bGUJMTI5CisjZGVmaW5lIF9fTlJfZ2V0X2tlcm5lbF9zeW1zCTEzMAorI2RlZmluZSBfX05SX3F1b3RhY3RsCQkxMzEKKyNkZWZpbmUgX19OUl9nZXRwZ2lkCQkxMzIKKyNkZWZpbmUgX19OUl9mY2hkaXIJCTEzMworI2RlZmluZSBfX05SX2JkZmx1c2gJCTEzNAorI2RlZmluZSBfX05SX3N5c2ZzCQkxMzUKKyNkZWZpbmUgX19OUl9wZXJzb25hbGl0eQkxMzYKKyNkZWZpbmUgX19OUl9hZnNfc3lzY2FsbAkxMzcgLyogU3lzY2FsbCBmb3IgQW5kcmV3IEZpbGUgU3lzdGVtICovCisjZGVmaW5lIF9fTlJfc2V0ZnN1aWQJCTEzOAorI2RlZmluZSBfX05SX3NldGZzZ2lkCQkxMzkKKyNkZWZpbmUgX19OUl9fbGxzZWVrCQkxNDAKKyNkZWZpbmUgX19OUl9nZXRkZW50cwkJMTQxCisjZGVmaW5lIF9fTlJfX25ld3NlbGVjdAkJMTQyCisjZGVmaW5lIF9fTlJfZmxvY2sJCTE0MworI2RlZmluZSBfX05SX21zeW5jCQkxNDQKKyNkZWZpbmUgX19OUl9yZWFkdgkJMTQ1CisjZGVmaW5lIF9fTlJfd3JpdGV2CQkxNDYKKyNkZWZpbmUgX19OUl9nZXRzaWQJCTE0NworI2RlZmluZSBfX05SX2ZkYXRhc3luYwkJMTQ4CisjZGVmaW5lIF9fTlJfX3N5c2N0bAkJMTQ5CisjZGVmaW5lIF9fTlJfbWxvY2sJCTE1MAorI2RlZmluZSBfX05SX211bmxvY2sJCTE1MQorI2RlZmluZSBfX05SX21sb2NrYWxsCQkxNTIKKyNkZWZpbmUgX19OUl9tdW5sb2NrYWxsCQkxNTMKKyNkZWZpbmUgX19OUl9zY2hlZF9zZXRwYXJhbQkJMTU0CisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0cGFyYW0JCTE1NQorI2RlZmluZSBfX05SX3NjaGVkX3NldHNjaGVkdWxlcgkJMTU2CisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0c2NoZWR1bGVyCQkxNTcKKyNkZWZpbmUgX19OUl9zY2hlZF95aWVsZAkJMTU4CisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21heAkxNTkKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWluCTE2MAorI2RlZmluZSBfX05SX3NjaGVkX3JyX2dldF9pbnRlcnZhbAkxNjEKKyNkZWZpbmUgX19OUl9uYW5vc2xlZXAJCTE2MgorI2RlZmluZSBfX05SX21yZW1hcAkJMTYzCisjZGVmaW5lIF9fTlJfc2V0cmVzdWlkCQkxNjQKKyNkZWZpbmUgX19OUl9nZXRyZXN1aWQJCTE2NQorI2RlZmluZSBfX05SX3ZtODYJCTE2NgorI2RlZmluZSBfX05SX3F1ZXJ5X21vZHVsZQkxNjcKKyNkZWZpbmUgX19OUl9wb2xsCQkxNjgKKyNkZWZpbmUgX19OUl9uZnNzZXJ2Y3RsCQkxNjkKKyNkZWZpbmUgX19OUl9zZXRyZXNnaWQJCTE3MAorI2RlZmluZSBfX05SX2dldHJlc2dpZAkJMTcxCisjZGVmaW5lIF9fTlJfcHJjdGwgICAgICAgICAgICAgIDE3MgorI2RlZmluZSBfX05SX3J0X3NpZ3JldHVybgkxNzMKKyNkZWZpbmUgX19OUl9ydF9zaWdhY3Rpb24JMTc0CisjZGVmaW5lIF9fTlJfcnRfc2lncHJvY21hc2sJMTc1CisjZGVmaW5lIF9fTlJfcnRfc2lncGVuZGluZwkxNzYKKyNkZWZpbmUgX19OUl9ydF9zaWd0aW1lZHdhaXQJMTc3CisjZGVmaW5lIF9fTlJfcnRfc2lncXVldWVpbmZvCTE3OAorI2RlZmluZSBfX05SX3J0X3NpZ3N1c3BlbmQJMTc5CisjZGVmaW5lIF9fTlJfcHJlYWQ2NAkJMTgwCisjZGVmaW5lIF9fTlJfcHdyaXRlNjQJCTE4MQorI2RlZmluZSBfX05SX2Nob3duCQkxODIKKyNkZWZpbmUgX19OUl9nZXRjd2QJCTE4MworI2RlZmluZSBfX05SX2NhcGdldAkJMTg0CisjZGVmaW5lIF9fTlJfY2Fwc2V0CQkxODUKKyNkZWZpbmUgX19OUl9zaWdhbHRzdGFjawkxODYKKyNkZWZpbmUgX19OUl9zZW5kZmlsZQkJMTg3CisjZGVmaW5lIF9fTlJfc3RyZWFtczEJCTE4OAkvKiBzb21lIHBlb3BsZSBhY3R1YWxseSB3YW50IGl0ICovCisjZGVmaW5lIF9fTlJfc3RyZWFtczIJCTE4OQkvKiBzb21lIHBlb3BsZSBhY3R1YWxseSB3YW50IGl0ICovCisjZGVmaW5lIF9fTlJfdmZvcmsJCTE5MAorI2RlZmluZSBfX05SX3VnZXRybGltaXQJCTE5MQkvKiBTdVMgY29tcGxpYW50IGdldHJsaW1pdCAqLworI2RlZmluZSBfX05SX21tYXAyCQkxOTIKKyNkZWZpbmUgX19OUl90cnVuY2F0ZTY0CQkxOTMKKyNkZWZpbmUgX19OUl9mdHJ1bmNhdGU2NAkxOTQKKyNkZWZpbmUgX19OUl9zdGF0NjQJCTE5NQorI2RlZmluZSBfX05SX2xzdGF0NjQJCTE5NgorI2RlZmluZSBfX05SX2ZzdGF0NjQJCTE5NworI2RlZmluZSBfX05SX2xjaG93bjMyCQkxOTgKKyNkZWZpbmUgX19OUl9nZXR1aWQzMgkJMTk5CisjZGVmaW5lIF9fTlJfZ2V0Z2lkMzIJCTIwMAorI2RlZmluZSBfX05SX2dldGV1aWQzMgkJMjAxCisjZGVmaW5lIF9fTlJfZ2V0ZWdpZDMyCQkyMDIKKyNkZWZpbmUgX19OUl9zZXRyZXVpZDMyCQkyMDMKKyNkZWZpbmUgX19OUl9zZXRyZWdpZDMyCQkyMDQKKyNkZWZpbmUgX19OUl9nZXRncm91cHMzMgkyMDUKKyNkZWZpbmUgX19OUl9zZXRncm91cHMzMgkyMDYKKyNkZWZpbmUgX19OUl9mY2hvd24zMgkJMjA3CisjZGVmaW5lIF9fTlJfc2V0cmVzdWlkMzIJMjA4CisjZGVmaW5lIF9fTlJfZ2V0cmVzdWlkMzIJMjA5CisjZGVmaW5lIF9fTlJfc2V0cmVzZ2lkMzIJMjEwCisjZGVmaW5lIF9fTlJfZ2V0cmVzZ2lkMzIJMjExCisjZGVmaW5lIF9fTlJfY2hvd24zMgkJMjEyCisjZGVmaW5lIF9fTlJfc2V0dWlkMzIJCTIxMworI2RlZmluZSBfX05SX3NldGdpZDMyCQkyMTQKKyNkZWZpbmUgX19OUl9zZXRmc3VpZDMyCQkyMTUKKyNkZWZpbmUgX19OUl9zZXRmc2dpZDMyCQkyMTYKKyNkZWZpbmUgX19OUl9waXZvdF9yb290CQkyMTcKKyNkZWZpbmUgX19OUl9taW5jb3JlCQkyMTgKKyNkZWZpbmUgX19OUl9tYWR2aXNlCQkyMTkKKyNkZWZpbmUgX19OUl9nZXRkZW50czY0CQkyMjAKKyNkZWZpbmUgX19OUl9mY250bDY0CQkyMjEKKy8qIDIyMyBpcyB1bnVzZWQgKi8KKyNkZWZpbmUgX19OUl9nZXR0aWQJCTIyNAorI2RlZmluZSBfX05SX3NldHhhdHRyCQkyMjYKKyNkZWZpbmUgX19OUl9sc2V0eGF0dHIJCTIyNworI2RlZmluZSBfX05SX2ZzZXR4YXR0cgkJMjI4CisjZGVmaW5lIF9fTlJfZ2V0eGF0dHIJCTIyOQorI2RlZmluZSBfX05SX2xnZXR4YXR0cgkJMjMwCisjZGVmaW5lIF9fTlJfZmdldHhhdHRyCQkyMzEKKyNkZWZpbmUgX19OUl9saXN0eGF0dHIJCTIzMgorI2RlZmluZSBfX05SX2xsaXN0eGF0dHIJCTIzMworI2RlZmluZSBfX05SX2ZsaXN0eGF0dHIJCTIzNAorI2RlZmluZSBfX05SX3JlbW92ZXhhdHRyCTIzNQorI2RlZmluZSBfX05SX2xyZW1vdmV4YXR0cgkyMzYKKyNkZWZpbmUgX19OUl9mcmVtb3ZleGF0dHIJMjM3CisjZGVmaW5lIF9fTlJfdGtpbGwJCTIzOAorI2RlZmluZSBfX05SX3NlbmRmaWxlNjQJCTIzOQorI2RlZmluZSBfX05SX2Z1dGV4CQkyNDAKKyNkZWZpbmUgX19OUl9zY2hlZF9zZXRhZmZpbml0eQkyNDEKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRhZmZpbml0eQkyNDIKKyNkZWZpbmUgX19OUl9zZXRfdGhyZWFkX2FyZWEJMjQzCisjZGVmaW5lIF9fTlJfZ2V0X3RocmVhZF9hcmVhCTI0NAorI2RlZmluZSBfX05SX2lvX3NldHVwCQkyNDUKKyNkZWZpbmUgX19OUl9pb19kZXN0cm95CQkyNDYKKyNkZWZpbmUgX19OUl9pb19nZXRldmVudHMJMjQ3CisjZGVmaW5lIF9fTlJfaW9fc3VibWl0CQkyNDgKKyNkZWZpbmUgX19OUl9pb19jYW5jZWwJCTI0OQorI2RlZmluZSBfX05SX2ZhZHZpc2U2NAkJMjUwCisKKyNkZWZpbmUgX19OUl9leGl0X2dyb3VwCQkyNTIKKyNkZWZpbmUgX19OUl9sb29rdXBfZGNvb2tpZQkyNTMKKyNkZWZpbmUgX19OUl9lcG9sbF9jcmVhdGUJMjU0CisjZGVmaW5lIF9fTlJfZXBvbGxfY3RsCQkyNTUKKyNkZWZpbmUgX19OUl9lcG9sbF93YWl0CQkyNTYKKyNkZWZpbmUgX19OUl9yZW1hcF9maWxlX3BhZ2VzCTI1NworI2RlZmluZSBfX05SX3NldF90aWRfYWRkcmVzcwkyNTgKKyNkZWZpbmUgX19OUl90aW1lcl9jcmVhdGUJMjU5CisjZGVmaW5lIF9fTlJfdGltZXJfc2V0dGltZQkoX19OUl90aW1lcl9jcmVhdGUrMSkKKyNkZWZpbmUgX19OUl90aW1lcl9nZXR0aW1lCShfX05SX3RpbWVyX2NyZWF0ZSsyKQorI2RlZmluZSBfX05SX3RpbWVyX2dldG92ZXJydW4JKF9fTlJfdGltZXJfY3JlYXRlKzMpCisjZGVmaW5lIF9fTlJfdGltZXJfZGVsZXRlCShfX05SX3RpbWVyX2NyZWF0ZSs0KQorI2RlZmluZSBfX05SX2Nsb2NrX3NldHRpbWUJKF9fTlJfdGltZXJfY3JlYXRlKzUpCisjZGVmaW5lIF9fTlJfY2xvY2tfZ2V0dGltZQkoX19OUl90aW1lcl9jcmVhdGUrNikKKyNkZWZpbmUgX19OUl9jbG9ja19nZXRyZXMJKF9fTlJfdGltZXJfY3JlYXRlKzcpCisjZGVmaW5lIF9fTlJfY2xvY2tfbmFub3NsZWVwCShfX05SX3RpbWVyX2NyZWF0ZSs4KQorI2RlZmluZSBfX05SX3N0YXRmczY0CQkyNjgKKyNkZWZpbmUgX19OUl9mc3RhdGZzNjQJCTI2OQorI2RlZmluZSBfX05SX3Rna2lsbAkJMjcwCisjZGVmaW5lIF9fTlJfdXRpbWVzCQkyNzEKKyNkZWZpbmUgX19OUl9mYWR2aXNlNjRfNjQJMjcyCisjZGVmaW5lIF9fTlJfdnNlcnZlcgkJMjczCisjZGVmaW5lIF9fTlJfbWJpbmQgICAgICAgICAgICAgIDI3NAorI2RlZmluZSBfX05SX2dldF9tZW1wb2xpY3kgICAgICAyNzUKKyNkZWZpbmUgX19OUl9zZXRfbWVtcG9saWN5ICAgICAgMjc2CisjZGVmaW5lIF9fTlJfbXFfb3BlbiAgICAgICAgICAgIDI3NworI2RlZmluZSBfX05SX21xX3VubGluayAgICAgICAgICAoX19OUl9tcV9vcGVuKzEpCisjZGVmaW5lIF9fTlJfbXFfdGltZWRzZW5kICAgICAgIChfX05SX21xX29wZW4rMikKKyNkZWZpbmUgX19OUl9tcV90aW1lZHJlY2VpdmUgICAgKF9fTlJfbXFfb3BlbiszKQorI2RlZmluZSBfX05SX21xX25vdGlmeSAgICAgICAgICAoX19OUl9tcV9vcGVuKzQpCisjZGVmaW5lIF9fTlJfbXFfZ2V0c2V0YXR0ciAgICAgIChfX05SX21xX29wZW4rNSkKKyNkZWZpbmUgX19OUl9zeXNfa2V4ZWNfbG9hZAkyODMKKyNkZWZpbmUgX19OUl93YWl0aWQJCTI4NAorI2RlZmluZSBfX05SX2FkZF9rZXkJCTI4NQorI2RlZmluZSBfX05SX3JlcXVlc3Rfa2V5CTI4NgorI2RlZmluZSBfX05SX2tleWN0bAkJMjg3CisKKyNkZWZpbmUgTlJfc3lzY2FsbHMgMjg4CisKKy8qIHVzZXItdmlzaWJsZSBlcnJvciBudW1iZXJzIGFyZSBpbiB0aGUgcmFuZ2UgLTEgLSAtMTI0OiBzZWUgPGFzbS1zaC9lcnJuby5oPiAqLworCisjZGVmaW5lIF9fc3lzY2FsbF9yZXR1cm4odHlwZSwgcmVzKSBcCitkbyB7IFwKKwlpZiAoKHVuc2lnbmVkIGxvbmcpKHJlcykgPj0gKHVuc2lnbmVkIGxvbmcpKC0xMjQpKSB7IFwKKwkvKiBBdm9pZCB1c2luZyAicmVzIiB3aGljaCBpcyBkZWNsYXJlZCB0byBiZSBpbiByZWdpc3RlciByMDsgXAorCSAgIGVycm5vIG1pZ2h0IGV4cGFuZCB0byBhIGZ1bmN0aW9uIGNhbGwgYW5kIGNsb2JiZXIgaXQuICAqLyBcCisJCWludCBfX2VyciA9IC0ocmVzKTsgXAorCQllcnJubyA9IF9fZXJyOyBcCisJCXJlcyA9IC0xOyBcCisJfSBcCisJcmV0dXJuICh0eXBlKSAocmVzKTsgXAorfSB3aGlsZSAoMCkKKworLyogWFhYIC0gX2ZvbyBuZWVkcyB0byBiZSBfX2Zvbywgd2hpbGUgX19OUl9iYXIgY291bGQgYmUgX05SX2Jhci4gKi8KKyNkZWZpbmUgX3N5c2NhbGwwKHR5cGUsbmFtZSkgXAordHlwZSBuYW1lKHZvaWQpIFwKK3sgXAorcmVnaXN0ZXIgbG9uZyBfX3NjMCBfX2FzbV9fICgicjMiKSA9IF9fTlJfIyNuYW1lOyBcCitfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInRyYXBhCSMweDEwIiBcCisJOiAiPXoiIChfX3NjMCkgXAorCTogIjAiIChfX3NjMCkgXAorCTogIm1lbW9yeSIgKTsgXAorX19zeXNjYWxsX3JldHVybih0eXBlLF9fc2MwKTsgXAorfQorCisjZGVmaW5lIF9zeXNjYWxsMSh0eXBlLG5hbWUsdHlwZTEsYXJnMSkgXAordHlwZSBuYW1lKHR5cGUxIGFyZzEpIFwKK3sgXAorcmVnaXN0ZXIgbG9uZyBfX3NjMCBfX2FzbV9fICgicjMiKSA9IF9fTlJfIyNuYW1lOyBcCityZWdpc3RlciBsb25nIF9fc2M0IF9fYXNtX18gKCJyNCIpID0gKGxvbmcpIGFyZzE7IFwKK19fYXNtX18gX192b2xhdGlsZV9fICgidHJhcGEJIzB4MTEiIFwKKwk6ICI9eiIgKF9fc2MwKSBcCisJOiAiMCIgKF9fc2MwKSwgInIiIChfX3NjNCkgXAorCTogIm1lbW9yeSIpOyBcCitfX3N5c2NhbGxfcmV0dXJuKHR5cGUsX19zYzApOyBcCit9CisKKyNkZWZpbmUgX3N5c2NhbGwyKHR5cGUsbmFtZSx0eXBlMSxhcmcxLHR5cGUyLGFyZzIpIFwKK3R5cGUgbmFtZSh0eXBlMSBhcmcxLHR5cGUyIGFyZzIpIFwKK3sgXAorcmVnaXN0ZXIgbG9uZyBfX3NjMCBfX2FzbV9fICgicjMiKSA9IF9fTlJfIyNuYW1lOyBcCityZWdpc3RlciBsb25nIF9fc2M0IF9fYXNtX18gKCJyNCIpID0gKGxvbmcpIGFyZzE7IFwKK3JlZ2lzdGVyIGxvbmcgX19zYzUgX19hc21fXyAoInI1IikgPSAobG9uZykgYXJnMjsgXAorX19hc21fXyBfX3ZvbGF0aWxlX18gKCJ0cmFwYQkjMHgxMiIgXAorCTogIj16IiAoX19zYzApIFwKKwk6ICIwIiAoX19zYzApLCAiciIgKF9fc2M0KSwgInIiIChfX3NjNSkgXAorCTogIm1lbW9yeSIpOyBcCitfX3N5c2NhbGxfcmV0dXJuKHR5cGUsX19zYzApOyBcCit9CisKKyNkZWZpbmUgX3N5c2NhbGwzKHR5cGUsbmFtZSx0eXBlMSxhcmcxLHR5cGUyLGFyZzIsdHlwZTMsYXJnMykgXAordHlwZSBuYW1lKHR5cGUxIGFyZzEsdHlwZTIgYXJnMix0eXBlMyBhcmczKSBcCit7IFwKK3JlZ2lzdGVyIGxvbmcgX19zYzAgX19hc21fXyAoInIzIikgPSBfX05SXyMjbmFtZTsgXAorcmVnaXN0ZXIgbG9uZyBfX3NjNCBfX2FzbV9fICgicjQiKSA9IChsb25nKSBhcmcxOyBcCityZWdpc3RlciBsb25nIF9fc2M1IF9fYXNtX18gKCJyNSIpID0gKGxvbmcpIGFyZzI7IFwKK3JlZ2lzdGVyIGxvbmcgX19zYzYgX19hc21fXyAoInI2IikgPSAobG9uZykgYXJnMzsgXAorX19hc21fXyBfX3ZvbGF0aWxlX18gKCJ0cmFwYQkjMHgxMyIgXAorCTogIj16IiAoX19zYzApIFwKKwk6ICIwIiAoX19zYzApLCAiciIgKF9fc2M0KSwgInIiIChfX3NjNSksICJyIiAoX19zYzYpIFwKKwk6ICJtZW1vcnkiKTsgXAorX19zeXNjYWxsX3JldHVybih0eXBlLF9fc2MwKTsgXAorfQorCisjZGVmaW5lIF9zeXNjYWxsNCh0eXBlLG5hbWUsdHlwZTEsYXJnMSx0eXBlMixhcmcyLHR5cGUzLGFyZzMsdHlwZTQsYXJnNCkgXAordHlwZSBuYW1lICh0eXBlMSBhcmcxLCB0eXBlMiBhcmcyLCB0eXBlMyBhcmczLCB0eXBlNCBhcmc0KSBcCit7IFwKK3JlZ2lzdGVyIGxvbmcgX19zYzAgX19hc21fXyAoInIzIikgPSBfX05SXyMjbmFtZTsgXAorcmVnaXN0ZXIgbG9uZyBfX3NjNCBfX2FzbV9fICgicjQiKSA9IChsb25nKSBhcmcxOyBcCityZWdpc3RlciBsb25nIF9fc2M1IF9fYXNtX18gKCJyNSIpID0gKGxvbmcpIGFyZzI7IFwKK3JlZ2lzdGVyIGxvbmcgX19zYzYgX19hc21fXyAoInI2IikgPSAobG9uZykgYXJnMzsgXAorcmVnaXN0ZXIgbG9uZyBfX3NjNyBfX2FzbV9fICgicjciKSA9IChsb25nKSBhcmc0OyBcCitfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInRyYXBhCSMweDE0IiBcCisJOiAiPXoiIChfX3NjMCkgXAorCTogIjAiIChfX3NjMCksICJyIiAoX19zYzQpLCAiciIgKF9fc2M1KSwgInIiIChfX3NjNiksICBcCisJICAiciIgKF9fc2M3KSBcCisJOiAibWVtb3J5IiApOyBcCitfX3N5c2NhbGxfcmV0dXJuKHR5cGUsX19zYzApOyBcCit9CisKKyNkZWZpbmUgX3N5c2NhbGw1KHR5cGUsbmFtZSx0eXBlMSxhcmcxLHR5cGUyLGFyZzIsdHlwZTMsYXJnMyx0eXBlNCxhcmc0LHR5cGU1LGFyZzUpIFwKK3R5cGUgbmFtZSAodHlwZTEgYXJnMSwgdHlwZTIgYXJnMiwgdHlwZTMgYXJnMywgdHlwZTQgYXJnNCwgdHlwZTUgYXJnNSkgXAoreyBcCityZWdpc3RlciBsb25nIF9fc2MzIF9fYXNtX18gKCJyMyIpID0gX19OUl8jI25hbWU7IFwKK3JlZ2lzdGVyIGxvbmcgX19zYzQgX19hc21fXyAoInI0IikgPSAobG9uZykgYXJnMTsgXAorcmVnaXN0ZXIgbG9uZyBfX3NjNSBfX2FzbV9fICgicjUiKSA9IChsb25nKSBhcmcyOyBcCityZWdpc3RlciBsb25nIF9fc2M2IF9fYXNtX18gKCJyNiIpID0gKGxvbmcpIGFyZzM7IFwKK3JlZ2lzdGVyIGxvbmcgX19zYzcgX19hc21fXyAoInI3IikgPSAobG9uZykgYXJnNDsgXAorcmVnaXN0ZXIgbG9uZyBfX3NjMCBfX2FzbV9fICgicjAiKSA9IChsb25nKSBhcmc1OyBcCitfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInRyYXBhCSMweDE1IiBcCisJOiAiPXoiIChfX3NjMCkgXAorCTogIjAiIChfX3NjMCksICJyIiAoX19zYzQpLCAiciIgKF9fc2M1KSwgInIiIChfX3NjNiksICJyIiAoX19zYzcpLCAgXAorCSAgInIiIChfX3NjMykgXAorCTogIm1lbW9yeSIgKTsgXAorX19zeXNjYWxsX3JldHVybih0eXBlLF9fc2MwKTsgXAorfQorCisjZGVmaW5lIF9zeXNjYWxsNih0eXBlLG5hbWUsdHlwZTEsYXJnMSx0eXBlMixhcmcyLHR5cGUzLGFyZzMsdHlwZTQsYXJnNCx0eXBlNSxhcmc1LHR5cGU2LGFyZzYpIFwKK3R5cGUgbmFtZSAodHlwZTEgYXJnMSwgdHlwZTIgYXJnMiwgdHlwZTMgYXJnMywgdHlwZTQgYXJnNCwgdHlwZTUgYXJnNSwgdHlwZTYgYXJnNikgXAoreyBcCityZWdpc3RlciBsb25nIF9fc2MzIF9fYXNtX18gKCJyMyIpID0gX19OUl8jI25hbWU7IFwKK3JlZ2lzdGVyIGxvbmcgX19zYzQgX19hc21fXyAoInI0IikgPSAobG9uZykgYXJnMTsgXAorcmVnaXN0ZXIgbG9uZyBfX3NjNSBfX2FzbV9fICgicjUiKSA9IChsb25nKSBhcmcyOyBcCityZWdpc3RlciBsb25nIF9fc2M2IF9fYXNtX18gKCJyNiIpID0gKGxvbmcpIGFyZzM7IFwKK3JlZ2lzdGVyIGxvbmcgX19zYzcgX19hc21fXyAoInI3IikgPSAobG9uZykgYXJnNDsgXAorcmVnaXN0ZXIgbG9uZyBfX3NjMCBfX2FzbV9fICgicjAiKSA9IChsb25nKSBhcmc1OyBcCityZWdpc3RlciBsb25nIF9fc2MxIF9fYXNtX18gKCJyMSIpID0gKGxvbmcpIGFyZzY7IFwKK19fYXNtX18gX192b2xhdGlsZV9fICgidHJhcGEJIzB4MTUiIFwKKwk6ICI9eiIgKF9fc2MwKSBcCisJOiAiMCIgKF9fc2MwKSwgInIiIChfX3NjNCksICJyIiAoX19zYzUpLCAiciIgKF9fc2M2KSwgInIiIChfX3NjNyksICBcCisJICAiciIgKF9fc2MzKSwgInIiIChfX3NjMSkgXAorCTogIm1lbW9yeSIgKTsgXAorX19zeXNjYWxsX3JldHVybih0eXBlLF9fc2MwKTsgXAorfQorCisjaWZkZWYgX19LRVJORUxfXworI2RlZmluZSBfX0FSQ0hfV0FOVF9JUENfUEFSU0VfVkVSU0lPTgorI2RlZmluZSBfX0FSQ0hfV0FOVF9PTERfUkVBRERJUgorI2RlZmluZSBfX0FSQ0hfV0FOVF9PTERfU1RBVAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TVEFUNjQKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0FMQVJNCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19HRVRIT1NUTkFNRQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfUEFVU0UKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NHRVRNQVNLCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdOQUwKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1RJTUUKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1VUSU1FCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19XQUlUUElECisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TT0NLRVRDQUxMCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19GQURWSVNFNjQKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0dFVFBHUlAKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0xMU0VFSworI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfTklDRQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfT0xEX0dFVFJMSU1JVAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfT0xEVU1PVU5UCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdQRU5ESU5HCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdQUk9DTUFTSworI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfUlRfU0lHQUNUSU9OCisjZW5kaWYKKworI2lmZGVmIF9fS0VSTkVMX1NZU0NBTExTX18KKworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorCisvKgorICogd2UgbmVlZCB0aGlzIGlubGluZSAtIGZvcmtpbmcgZnJvbSBrZXJuZWwgc3BhY2Ugd2lsbCByZXN1bHQKKyAqIGluIE5PIENPUFkgT04gV1JJVEUgKCEhISksIHVudGlsIGFuIGV4ZWN2ZSBpcyBleGVjdXRlZC4gVGhpcworICogaXMgbm8gcHJvYmxlbSwgYnV0IGZvciB0aGUgc3RhY2suIFRoaXMgaXMgaGFuZGxlZCBieSBub3QgbGV0dGluZworICogbWFpbigpIHVzZSB0aGUgc3RhY2sgYXQgYWxsIGFmdGVyIGZvcmsoKS4gVGh1cywgbm8gZnVuY3Rpb24KKyAqIGNhbGxzIC0gd2hpY2ggbWVhbnMgaW5saW5lIGNvZGUgZm9yIGZvcmsgdG9vLCBhcyBvdGhlcndpc2Ugd2UKKyAqIHdvdWxkIHVzZSB0aGUgc3RhY2sgdXBvbiBleGl0IGZyb20gJ2ZvcmsoKScuCisgKgorICogQWN0dWFsbHkgb25seSBwYXVzZSBhbmQgZm9yayBhcmUgbmVlZGVkIGlubGluZSwgc28gdGhhdCB0aGVyZQorICogd29uJ3QgYmUgYW55IG1lc3Npbmcgd2l0aCB0aGUgc3RhY2sgZnJvbSBtYWluKCksIGJ1dCB3ZSBkZWZpbmUKKyAqIHNvbWUgb3RoZXJzIHRvby4KKyAqLworI2RlZmluZSBfX05SX19leGl0IF9fTlJfZXhpdAorc3RhdGljIF9faW5saW5lX18gX3N5c2NhbGwwKGludCxwYXVzZSkKK3N0YXRpYyBfX2lubGluZV9fIF9zeXNjYWxsMChpbnQsc3luYykKK3N0YXRpYyBfX2lubGluZV9fIF9zeXNjYWxsMChwaWRfdCxzZXRzaWQpCitzdGF0aWMgX19pbmxpbmVfXyBfc3lzY2FsbDMoaW50LHdyaXRlLGludCxmZCxjb25zdCBjaGFyICosYnVmLG9mZl90LGNvdW50KQorc3RhdGljIF9faW5saW5lX18gX3N5c2NhbGwzKGludCxyZWFkLGludCxmZCxjaGFyICosYnVmLG9mZl90LGNvdW50KQorc3RhdGljIF9faW5saW5lX18gX3N5c2NhbGwzKG9mZl90LGxzZWVrLGludCxmZCxvZmZfdCxvZmZzZXQsaW50LGNvdW50KQorc3RhdGljIF9faW5saW5lX18gX3N5c2NhbGwxKGludCxkdXAsaW50LGZkKQorc3RhdGljIF9faW5saW5lX18gX3N5c2NhbGwzKGludCxleGVjdmUsY29uc3QgY2hhciAqLGZpbGUsY2hhciAqKixhcmd2LGNoYXIgKiosZW52cCkKK3N0YXRpYyBfX2lubGluZV9fIF9zeXNjYWxsMyhpbnQsb3Blbixjb25zdCBjaGFyICosZmlsZSxpbnQsZmxhZyxpbnQsbW9kZSkKK3N0YXRpYyBfX2lubGluZV9fIF9zeXNjYWxsMShpbnQsY2xvc2UsaW50LGZkKQorc3RhdGljIF9faW5saW5lX18gX3N5c2NhbGwzKHBpZF90LHdhaXRwaWQscGlkX3QscGlkLGludCAqLHdhaXRfc3RhdCxpbnQsb3B0aW9ucykKK3N0YXRpYyBfX2lubGluZV9fIF9zeXNjYWxsMShpbnQsZGVsZXRlX21vZHVsZSxjb25zdCBjaGFyICosbmFtZSkKKworc3RhdGljIF9faW5saW5lX18gcGlkX3Qgd2FpdChpbnQgKiB3YWl0X3N0YXQpCit7CisJcmV0dXJuIHdhaXRwaWQoLTEsd2FpdF9zdGF0LDApOworfQorCithc21saW5rYWdlIGxvbmcgc3lzX21tYXAyKAorCQkJdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwKKwkJCXVuc2lnbmVkIGxvbmcgcHJvdCwgdW5zaWduZWQgbG9uZyBmbGFncywKKwkJCXVuc2lnbmVkIGxvbmcgZmQsIHVuc2lnbmVkIGxvbmcgcGdvZmYpOworYXNtbGlua2FnZSBpbnQgc3lzX2V4ZWN2ZShjaGFyICp1ZmlsZW5hbWUsIGNoYXIgKip1YXJndiwKKwkJCWNoYXIgKip1ZW52cCwgdW5zaWduZWQgbG9uZyByNywKKwkJCXN0cnVjdCBwdF9yZWdzIHJlZ3MpOworYXNtbGlua2FnZSBpbnQgc3lzX2Nsb25lKHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgbmV3c3AsCisJCQl1bnNpZ25lZCBsb25nIHBhcmVudF90aWRwdHIsCisJCQl1bnNpZ25lZCBsb25nIGNoaWxkX3RpZHB0ciwKKwkJCXN0cnVjdCBwdF9yZWdzIHJlZ3MpOworYXNtbGlua2FnZSBpbnQgc3lzX2ZvcmsodW5zaWduZWQgbG9uZyByNCwgdW5zaWduZWQgbG9uZyByNSwKKwkJCXVuc2lnbmVkIGxvbmcgcjYsIHVuc2lnbmVkIGxvbmcgcjcsCisJCQlzdHJ1Y3QgcHRfcmVncyByZWdzKTsKK2FzbWxpbmthZ2UgaW50IHN5c192Zm9yayh1bnNpZ25lZCBsb25nIHI0LCB1bnNpZ25lZCBsb25nIHI1LAorCQkJdW5zaWduZWQgbG9uZyByNiwgdW5zaWduZWQgbG9uZyByNywKKwkJCXN0cnVjdCBwdF9yZWdzIHJlZ3MpOworYXNtbGlua2FnZSBpbnQgc3lzX3BpcGUodW5zaWduZWQgbG9uZyByNCwgdW5zaWduZWQgbG9uZyByNSwKKwkJCXVuc2lnbmVkIGxvbmcgcjYsIHVuc2lnbmVkIGxvbmcgcjcsCisJCQlzdHJ1Y3QgcHRfcmVncyByZWdzKTsKK2FzbWxpbmthZ2UgaW50IHN5c19wdHJhY2UobG9uZyByZXF1ZXN0LCBsb25nIHBpZCwgbG9uZyBhZGRyLCBsb25nIGRhdGEpOworYXNtbGlua2FnZSBzc2l6ZV90IHN5c19wcmVhZF93cmFwcGVyKHVuc2lnbmVkIGludCBmZCwgY2hhciAqYnVmLAorCQkJCXNpemVfdCBjb3VudCwgbG9uZyBkdW1teSwgbG9mZl90IHBvcyk7Cithc21saW5rYWdlIHNzaXplX3Qgc3lzX3B3cml0ZV93cmFwcGVyKHVuc2lnbmVkIGludCBmZCwgY29uc3QgY2hhciAqYnVmLAorCQkJCXNpemVfdCBjb3VudCwgbG9uZyBkdW1teSwgbG9mZl90IHBvcyk7CitzdHJ1Y3Qgc2lnYWN0aW9uOworYXNtbGlua2FnZSBsb25nIHN5c19ydF9zaWdhY3Rpb24oaW50IHNpZywKKwkJCQljb25zdCBzdHJ1Y3Qgc2lnYWN0aW9uIF9fdXNlciAqYWN0LAorCQkJCXN0cnVjdCBzaWdhY3Rpb24gX191c2VyICpvYWN0LAorCQkJCXNpemVfdCBzaWdzZXRzaXplKTsKKworI2VuZGlmCisKKy8qCisgKiAiQ29uZGl0aW9uYWwiIHN5c2NhbGxzCisgKgorICogV2hhdCB3ZSB3YW50IGlzIF9fYXR0cmlidXRlX18oKHdlYWssYWxpYXMoInN5c19uaV9zeXNjYWxsIikpKSwKKyAqIGJ1dCBpdCBkb2Vzbid0IHdvcmsgb24gYWxsIHRvb2xjaGFpbnMsIHNvIHdlIGp1c3QgZG8gaXQgYnkgaGFuZAorICovCisjaWZuZGVmIGNvbmRfc3lzY2FsbAorI2RlZmluZSBjb25kX3N5c2NhbGwoeCkgYXNtKCIud2Vha1x0IiAjeCAiXG5cdC5zZXRcdCIgI3ggIixzeXNfbmlfc3lzY2FsbCIpCisjZW5kaWYKKworI2VuZGlmIC8qIF9fQVNNX1NIX1VOSVNURF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC91c2VyLmggYi9pbmNsdWRlL2FzbS1zaC91c2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFiODUxMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL3VzZXIuaApAQCAtMCwwICsxLDYwIEBACisjaWZuZGVmIF9fQVNNX1NIX1VTRVJfSAorI2RlZmluZSBfX0FTTV9TSF9VU0VSX0gKKworI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorCisvKgorICogQ29yZSBmaWxlIGZvcm1hdDogVGhlIGNvcmUgZmlsZSBpcyB3cml0dGVuIGluIHN1Y2ggYSB3YXkgdGhhdCBnZGIKKyAqIGNhbiB1bmRlcnN0YW5kIGl0IGFuZCBwcm92aWRlIHVzZWZ1bCBpbmZvcm1hdGlvbiB0byB0aGUgdXNlciAodW5kZXIKKyAqIGxpbnV4IHdlIHVzZSB0aGUgYHRyYWQtY29yZScgYmZkKS4gIFRoZSBmaWxlIGNvbnRlbnRzIGFyZSBhcyBmb2xsb3dzOgorICoKKyAqICB1cGFnZTogMSBwYWdlIGNvbnNpc3Rpbmcgb2YgYSB1c2VyIHN0cnVjdCB0aGF0IHRlbGxzIGdkYgorICoJd2hhdCBpcyBwcmVzZW50IGluIHRoZSBmaWxlLiAgRGlyZWN0bHkgYWZ0ZXIgdGhpcyBpcyBhCisgKgljb3B5IG9mIHRoZSB0YXNrX3N0cnVjdCwgd2hpY2ggaXMgY3VycmVudGx5IG5vdCB1c2VkIGJ5IGdkYiwKKyAqCWJ1dCBpdCBtYXkgY29tZSBpbiBoYW5keSBhdCBzb21lIHBvaW50LiAgQWxsIG9mIHRoZSByZWdpc3RlcnMKKyAqCWFyZSBzdG9yZWQgYXMgcGFydCBvZiB0aGUgdXBhZ2UuICBUaGUgdXBhZ2Ugc2hvdWxkIGFsd2F5cyBiZQorICoJb25seSBvbmUgcGFnZSBsb25nLgorICogIGRhdGE6IFRoZSBkYXRhIHNlZ21lbnQgZm9sbG93cyBuZXh0LiAgV2UgdXNlIGN1cnJlbnQtPmVuZF90ZXh0IHRvCisgKgljdXJyZW50LT5icmsgdG8gcGljayB1cCBhbGwgb2YgdGhlIHVzZXIgdmFyaWFibGVzLCBwbHVzIGFueSBtZW1vcnkKKyAqCXRoYXQgbWF5IGhhdmUgYmVlbiBzYnJrJ2VkLiAgTm8gYXR0ZW1wdCBpcyBtYWRlIHRvIGRldGVybWluZSBpZiBhCisgKglwYWdlIGlzIGRlbWFuZC16ZXJvIG9yIGlmIGEgcGFnZSBpcyB0b3RhbGx5IHVudXNlZCwgd2UganVzdCBjb3ZlcgorICoJdGhlIGVudGlyZSByYW5nZS4gIEFsbCBvZiB0aGUgYWRkcmVzc2VzIGFyZSByb3VuZGVkIGluIHN1Y2ggYSB3YXkKKyAqCXRoYXQgYW4gaW50ZWdyYWwgbnVtYmVyIG9mIHBhZ2VzIGlzIHdyaXR0ZW4uCisgKiAgc3RhY2s6IFdlIG5lZWQgdGhlIHN0YWNrIGluZm9ybWF0aW9uIGluIG9yZGVyIHRvIGdldCBhIG1lYW5pbmdmdWwKKyAqCWJhY2t0cmFjZS4gIFdlIG5lZWQgdG8gd3JpdGUgdGhlIGRhdGEgZnJvbSB1c3AgdG8KKyAqCWN1cnJlbnQtPnN0YXJ0X3N0YWNrLCBzbyB3ZSByb3VuZCBlYWNoIG9mIHRoZXNlIGluIG9yZGVyIHRvIGJlIGFibGUKKyAqCXRvIHdyaXRlIGFuIGludGVnZXIgbnVtYmVyIG9mIHBhZ2VzLgorICovCisKK3N0cnVjdCB1c2VyX2ZwdV9zdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcgZnBfcmVnc1sxNl07CisJdW5zaWduZWQgbG9uZyB4ZnBfcmVnc1sxNl07CisJdW5zaWduZWQgbG9uZyBmcHNjcjsKKwl1bnNpZ25lZCBsb25nIGZwdWw7Cit9OworCitzdHJ1Y3QgdXNlciB7CisJc3RydWN0IHB0X3JlZ3MJcmVnczsJCQkvKiBlbnRpcmUgbWFjaGluZSBzdGF0ZSAqLworCXN0cnVjdCB1c2VyX2ZwdV9zdHJ1Y3QgZnB1OwkvKiBNYXRoIENvLXByb2Nlc3NvciByZWdpc3RlcnMgICovCisJaW50IHVfZnB2YWxpZDsJCS8qIFRydWUgaWYgbWF0aCBjby1wcm9jZXNzb3IgYmVpbmcgdXNlZCAqLworCXNpemVfdAkJdV90c2l6ZTsJCS8qIHRleHQgc2l6ZSAocGFnZXMpICovCisJc2l6ZV90CQl1X2RzaXplOwkJLyogZGF0YSBzaXplIChwYWdlcykgKi8KKwlzaXplX3QJCXVfc3NpemU7CQkvKiBzdGFjayBzaXplIChwYWdlcykgKi8KKwl1bnNpZ25lZCBsb25nCXN0YXJ0X2NvZGU7CQkvKiB0ZXh0IHN0YXJ0aW5nIGFkZHJlc3MgKi8KKwl1bnNpZ25lZCBsb25nCXN0YXJ0X2RhdGE7CQkvKiBkYXRhIHN0YXJ0aW5nIGFkZHJlc3MgKi8KKwl1bnNpZ25lZCBsb25nCXN0YXJ0X3N0YWNrOwkJLyogc3RhY2sgc3RhcnRpbmcgYWRkcmVzcyAqLworCWxvbmcgaW50CXNpZ25hbDsJCQkvKiBzaWduYWwgY2F1c2luZyBjb3JlIGR1bXAgKi8KKwlzdHJ1Y3QgcmVncyAqCXVfYXIwOwkJCS8qIGhlbHAgZ2RiIGZpbmQgcmVnaXN0ZXJzICovCisJc3RydWN0IHVzZXJfZnB1X3N0cnVjdCogdV9mcHN0YXRlOwkvKiBNYXRoIENvLXByb2Nlc3NvciBwb2ludGVyICovCisJdW5zaWduZWQgbG9uZwltYWdpYzsJCQkvKiBpZGVudGlmaWVzIGEgY29yZSBmaWxlICovCisJY2hhcgkJdV9jb21tWzMyXTsJCS8qIHVzZXIgY29tbWFuZCBuYW1lICovCit9OworCisjZGVmaW5lIE5CUEcJCQlQQUdFX1NJWkUKKyNkZWZpbmUgVVBBR0VTCQkJMQorI2RlZmluZSBIT1NUX1RFWFRfU1RBUlRfQUREUgkodS5zdGFydF9jb2RlKQorI2RlZmluZSBIT1NUX0RBVEFfU1RBUlRfQUREUgkodS5zdGFydF9kYXRhKQorI2RlZmluZSBIT1NUX1NUQUNLX0VORF9BRERSCSh1LnN0YXJ0X3N0YWNrICsgdS51X3NzaXplICogTkJQRykKKworI2VuZGlmIC8qIF9fQVNNX1NIX1VTRVJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvd2F0Y2hkb2cuaCBiL2luY2x1ZGUvYXNtLXNoL3dhdGNoZG9nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBjZjRiZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL3dhdGNoZG9nLmgKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1zaC93YXRjaGRvZy5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzIFBhdWwgTXVuZHQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisjaWZuZGVmIF9fQVNNX1NIX1dBVENIRE9HX0gKKyNkZWZpbmUgX19BU01fU0hfV0FUQ0hET0dfSAorI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL2NwdS93YXRjaGRvZy5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCisvKiAKKyAqIFNlZSBhc20vY3B1LXNoMi93YXRjaGRvZy5oIGZvciBleHBsYW5hdGlvbiBvZiB0aGlzIHN0dXBpZGl0eS4uCisgKi8KKyNpZm5kZWYgV1RDTlRfUgorIyAgZGVmaW5lIFdUQ05UX1IJV1RDTlQKKyNlbmRpZgorCisjaWZuZGVmIFdUQ1NSX1IKKyMgIGRlZmluZSBXVENTUl9SCVdUQ1NSCisjZW5kaWYKKworI2RlZmluZSBXVENOVF9ISUdICTB4NWEKKyNkZWZpbmUgV1RDU1JfSElHSAkweGE1CisKKyNkZWZpbmUgV1RDU1JfQ0tTMgkweDA0CisjZGVmaW5lIFdUQ1NSX0NLUzEJMHgwMgorI2RlZmluZSBXVENTUl9DS1MwCTB4MDEKKworLyoKKyAqIENLUzAtMiBzdXBwb3J0cyBhIG51bWJlciBvZiBjbG9jayBkaXZpc2lvbiByYXRpb3MuIEF0IHRoZSB0aW1lIHRoZSB3YXRjaGRvZworICogaXMgZW5hYmxlZCwgaXQgZGVmYXVsdHMgdG8gYSA0MSB1c2VjIG92ZXJmbG93IHBlcmlvZCAuLiB3ZSBvdmVybG9hZCB0aGlzIHRvCisgKiBzb21ldGhpbmcgYSBsaXR0bGUgbW9yZSByZWFzb25hYmxlLCBhbmQgcmVhbGx5IGNhbid0IGRlYWwgd2l0aCBhbnl0aGluZworICogbG93ZXIgdGhhbiBXVENTUl9DS1NfMTAyNCwgZWxzZSB3ZSBkcm9wIGJhY2sgaW50byB0aGUgdXNlYyByYW5nZS4KKyAqCisgKiBDbG9jayBEaXZpc2lvbiBSYXRpbyAgICAgICAgIE92ZXJmbG93IFBlcmlvZAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgICAxLzMyIChpbml0aWFsIHZhbHVlKSAgICAgICA0MSB1c2VjcworICogICAgIDEvNjQgICAgICAgICAgICAgICAgICAgICAgIDgyIHVzZWNzCisgKiAgICAgMS8xMjggICAgICAgICAgICAgICAgICAgICAxNjQgdXNlY3MKKyAqICAgICAxLzI1NiAgICAgICAgICAgICAgICAgICAgIDMyOCB1c2VjcworICogICAgIDEvNTEyICAgICAgICAgICAgICAgICAgICAgNjU2IHVzZWNzCisgKiAgICAgMS8xMDI0ICAgICAgICAgICAgICAgICAgIDEuMzEgbXNlY3MKKyAqICAgICAxLzIwNDggICAgICAgICAgICAgICAgICAgMi42MiBtc2VjcworICogICAgIDEvNDA5NiAgICAgICAgICAgICAgICAgICA1LjI1IG1zZWNzCisgKi8KKyNkZWZpbmUgV1RDU1JfQ0tTXzMyCTB4MDAKKyNkZWZpbmUgV1RDU1JfQ0tTXzY0CTB4MDEKKyNkZWZpbmUgV1RDU1JfQ0tTXzEyOAkweDAyCisjZGVmaW5lIFdUQ1NSX0NLU18yNTYJMHgwMworI2RlZmluZSBXVENTUl9DS1NfNTEyCTB4MDQKKyNkZWZpbmUgV1RDU1JfQ0tTXzEwMjQJMHgwNQorI2RlZmluZSBXVENTUl9DS1NfMjA0OAkweDA2CisjZGVmaW5lIFdUQ1NSX0NLU180MDk2CTB4MDcKKworLyoqCisgKiAJc2hfd2R0X3JlYWRfY250IC0gUmVhZCBmcm9tIENvdW50ZXIKKyAqCisgKiAJUmVhZHMgYmFjayB0aGUgV1RDTlQgdmFsdWUuCisgKi8KK3N0YXRpYyBpbmxpbmUgX191OCBzaF93ZHRfcmVhZF9jbnQodm9pZCkKK3sKKwlyZXR1cm4gY3RybF9pbmIoV1RDTlRfUik7Cit9CisKKy8qKgorICoJc2hfd2R0X3dyaXRlX2NudCAtIFdyaXRlIHRvIENvdW50ZXIKKyAqCisgKglAdmFsOiBWYWx1ZSB0byB3cml0ZQorICoKKyAqCVdyaXRlcyB0aGUgZ2l2ZW4gdmFsdWUgQHZhbCB0byB0aGUgbG93ZXIgYnl0ZSBvZiB0aGUgdGltZXIgY291bnRlci4KKyAqCVRoZSB1cHBlciBieXRlIGlzIHNldCBtYW51YWxseSBvbiBlYWNoIHdyaXRlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgc2hfd2R0X3dyaXRlX2NudChfX3U4IHZhbCkKK3sKKwljdHJsX291dHcoKFdUQ05UX0hJR0ggPDwgOCkgfCAoX191MTYpdmFsLCBXVENOVCk7Cit9CisKKy8qKgorICogCXNoX3dkdF9yZWFkX2NzciAtIFJlYWQgZnJvbSBDb250cm9sL1N0YXR1cyBSZWdpc3RlcgorICoKKyAqCVJlYWRzIGJhY2sgdGhlIFdUQ1NSIHZhbHVlLgorICovCitzdGF0aWMgaW5saW5lIF9fdTggc2hfd2R0X3JlYWRfY3NyKHZvaWQpCit7CisJcmV0dXJuIGN0cmxfaW5iKFdUQ1NSX1IpOworfQorCisvKioKKyAqIAlzaF93ZHRfd3JpdGVfY3NyIC0gV3JpdGUgdG8gQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXIKKyAqCisgKiAJQHZhbDogVmFsdWUgdG8gd3JpdGUKKyAqCisgKiAJV3JpdGVzIHRoZSBnaXZlbiB2YWx1ZSBAdmFsIHRvIHRoZSBsb3dlciBieXRlIG9mIHRoZSBjb250cm9sL3N0YXR1cworICogCXJlZ2lzdGVyLiBUaGUgdXBwZXIgYnl0ZSBpcyBzZXQgbWFudWFsbHkgb24gZWFjaCB3cml0ZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHNoX3dkdF93cml0ZV9jc3IoX191OCB2YWwpCit7CisJY3RybF9vdXR3KChXVENTUl9ISUdIIDw8IDgpIHwgKF9fdTE2KXZhbCwgV1RDU1IpOworfQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9fQVNNX1NIX1dBVENIRE9HX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL3hvci5oIGIvaW5jbHVkZS9hc20tc2gveG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzgyZWIxMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL3hvci5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy94b3IuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoNjQvYS5vdXQuaCBiL2luY2x1ZGUvYXNtLXNoNjQvYS5vdXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTk5NWU4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2g2NC9hLm91dC5oCkBAIC0wLDAgKzEsMzcgQEAKKyNpZm5kZWYgX19BU01fU0g2NF9BX09VVF9ICisjZGVmaW5lIF9fQVNNX1NINjRfQV9PVVRfSAorCisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogaW5jbHVkZS9hc20tc2g2NC9hLm91dC5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxICBQYW9sbyBBbGJlcmVsbGkKKyAqCisgKi8KKworc3RydWN0IGV4ZWMKK3sKKyAgdW5zaWduZWQgbG9uZyBhX2luZm87CQkvKiBVc2UgbWFjcm9zIE5fTUFHSUMsIGV0YyBmb3IgYWNjZXNzICovCisgIHVuc2lnbmVkIGFfdGV4dDsJCS8qIGxlbmd0aCBvZiB0ZXh0LCBpbiBieXRlcyAqLworICB1bnNpZ25lZCBhX2RhdGE7CQkvKiBsZW5ndGggb2YgZGF0YSwgaW4gYnl0ZXMgKi8KKyAgdW5zaWduZWQgYV9ic3M7CQkvKiBsZW5ndGggb2YgdW5pbml0aWFsaXplZCBkYXRhIGFyZWEgZm9yIGZpbGUsIGluIGJ5dGVzICovCisgIHVuc2lnbmVkIGFfc3ltczsJCS8qIGxlbmd0aCBvZiBzeW1ib2wgdGFibGUgZGF0YSBpbiBmaWxlLCBpbiBieXRlcyAqLworICB1bnNpZ25lZCBhX2VudHJ5OwkJLyogc3RhcnQgYWRkcmVzcyAqLworICB1bnNpZ25lZCBhX3Ryc2l6ZTsJCS8qIGxlbmd0aCBvZiByZWxvY2F0aW9uIGluZm8gZm9yIHRleHQsIGluIGJ5dGVzICovCisgIHVuc2lnbmVkIGFfZHJzaXplOwkJLyogbGVuZ3RoIG9mIHJlbG9jYXRpb24gaW5mbyBmb3IgZGF0YSwgaW4gYnl0ZXMgKi8KK307CisKKyNkZWZpbmUgTl9UUlNJWkUoYSkJKChhKS5hX3Ryc2l6ZSkKKyNkZWZpbmUgTl9EUlNJWkUoYSkJKChhKS5hX2Ryc2l6ZSkKKyNkZWZpbmUgTl9TWU1TSVpFKGEpCSgoYSkuYV9zeW1zKQorCisjaWZkZWYgX19LRVJORUxfXworCisjZGVmaW5lIFNUQUNLX1RPUAlUQVNLX1NJWkUKKworI2VuZGlmCisKKyNlbmRpZiAvKiBfX0FTTV9TSDY0X0FfT1VUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoNjQvYXRvbWljLmggYi9pbmNsdWRlL2FzbS1zaDY0L2F0b21pYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjMzg3MmQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaDY0L2F0b21pYy5oCkBAIC0wLDAgKzEsMTI2IEBACisjaWZuZGVmIF9fQVNNX1NINjRfQVRPTUlDX0gKKyNkZWZpbmUgX19BU01fU0g2NF9BVE9NSUNfSAorCisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogaW5jbHVkZS9hc20tc2g2NC9hdG9taWMuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSAgUGFvbG8gQWxiZXJlbGxpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgIFBhdWwgTXVuZHQKKyAqCisgKi8KKworLyoKKyAqIEF0b21pYyBvcGVyYXRpb25zIHRoYXQgQyBjYW4ndCBndWFyYW50ZWUgdXMuICBVc2VmdWwgZm9yCisgKiByZXNvdXJjZSBjb3VudGluZyBldGMuLgorICoKKyAqLworCit0eXBlZGVmIHN0cnVjdCB7IHZvbGF0aWxlIGludCBjb3VudGVyOyB9IGF0b21pY190OworCisjZGVmaW5lIEFUT01JQ19JTklUKGkpCSggKGF0b21pY190KSB7IChpKSB9ICkKKworI2RlZmluZSBhdG9taWNfcmVhZCh2KQkJKCh2KS0+Y291bnRlcikKKyNkZWZpbmUgYXRvbWljX3NldCh2LGkpCQkoKHYpLT5jb3VudGVyID0gKGkpKQorCisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorCisvKgorICogVG8gZ2V0IHByb3BlciBicmFuY2ggcHJlZGljdGlvbiBmb3IgdGhlIG1haW4gbGluZSwgd2UgbXVzdCBicmFuY2gKKyAqIGZvcndhcmQgdG8gY29kZSBhdCB0aGUgZW5kIG9mIHRoaXMgb2JqZWN0J3MgLnRleHQgc2VjdGlvbiwgdGhlbgorICogYnJhbmNoIGJhY2sgdG8gcmVzdGFydCB0aGUgb3BlcmF0aW9uLgorICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgYXRvbWljX2FkZChpbnQgaSwgYXRvbWljX3QgKiB2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJKihsb25nICopdiArPSBpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBhdG9taWNfc3ViKGludCBpLCBhdG9taWNfdCAqdikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCSoobG9uZyAqKXYgLT0gaTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBhdG9taWNfYWRkX3JldHVybihpbnQgaSwgYXRvbWljX3QgKiB2KQoreworCXVuc2lnbmVkIGxvbmcgdGVtcCwgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJdGVtcCA9ICoobG9uZyAqKXY7CisJdGVtcCArPSBpOworCSoobG9uZyAqKXYgPSB0ZW1wOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCXJldHVybiB0ZW1wOworfQorCisjZGVmaW5lIGF0b21pY19hZGRfbmVnYXRpdmUoYSwgdikJKGF0b21pY19hZGRfcmV0dXJuKChhKSwgKHYpKSA8IDApCisKK3N0YXRpYyBfX2lubGluZV9fIGludCBhdG9taWNfc3ViX3JldHVybihpbnQgaSwgYXRvbWljX3QgKiB2KQoreworCXVuc2lnbmVkIGxvbmcgdGVtcCwgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJdGVtcCA9ICoobG9uZyAqKXY7CisJdGVtcCAtPSBpOworCSoobG9uZyAqKXYgPSB0ZW1wOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCXJldHVybiB0ZW1wOworfQorCisjZGVmaW5lIGF0b21pY19kZWNfcmV0dXJuKHYpIGF0b21pY19zdWJfcmV0dXJuKDEsKHYpKQorI2RlZmluZSBhdG9taWNfaW5jX3JldHVybih2KSBhdG9taWNfYWRkX3JldHVybigxLCh2KSkKKworLyoKKyAqIGF0b21pY19pbmNfYW5kX3Rlc3QgLSBpbmNyZW1lbnQgYW5kIHRlc3QKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqCisgKiBBdG9taWNhbGx5IGluY3JlbWVudHMgQHYgYnkgMQorICogYW5kIHJldHVybnMgdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIHplcm8sIG9yIGZhbHNlIGZvciBhbGwKKyAqIG90aGVyIGNhc2VzLgorICovCisjZGVmaW5lIGF0b21pY19pbmNfYW5kX3Rlc3QodikgKGF0b21pY19pbmNfcmV0dXJuKHYpID09IDApCisKKyNkZWZpbmUgYXRvbWljX3N1Yl9hbmRfdGVzdChpLHYpIChhdG9taWNfc3ViX3JldHVybigoaSksICh2KSkgPT0gMCkKKyNkZWZpbmUgYXRvbWljX2RlY19hbmRfdGVzdCh2KSAoYXRvbWljX3N1Yl9yZXR1cm4oMSwgKHYpKSA9PSAwKQorCisjZGVmaW5lIGF0b21pY19pbmModikgYXRvbWljX2FkZCgxLCh2KSkKKyNkZWZpbmUgYXRvbWljX2RlYyh2KSBhdG9taWNfc3ViKDEsKHYpKQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGF0b21pY19jbGVhcl9tYXNrKHVuc2lnbmVkIGludCBtYXNrLCBhdG9taWNfdCAqdikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCSoobG9uZyAqKXYgJj0gfm1hc2s7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGF0b21pY19zZXRfbWFzayh1bnNpZ25lZCBpbnQgbWFzaywgYXRvbWljX3QgKnYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkqKGxvbmcgKil2IHw9IG1hc2s7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCisvKiBBdG9taWMgb3BlcmF0aW9ucyBhcmUgYWxyZWFkeSBzZXJpYWxpemluZyBvbiBTSCAqLworI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfZGVjKCkJYmFycmllcigpCisjZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2RlYygpCWJhcnJpZXIoKQorI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfaW5jKCkJYmFycmllcigpCisjZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpCWJhcnJpZXIoKQorCisjZW5kaWYgLyogX19BU01fU0g2NF9BVE9NSUNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2g2NC9iaXRvcHMuaCBiL2luY2x1ZGUvYXNtLXNoNjQvYml0b3BzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFmZjYzZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoNjQvYml0b3BzLmgKQEAgLTAsMCArMSw1MTYgQEAKKyNpZm5kZWYgX19BU01fU0g2NF9CSVRPUFNfSAorI2RlZmluZSBfX0FTTV9TSDY0X0JJVE9QU19ICisKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBpbmNsdWRlL2FzbS1zaDY0L2JpdG9wcy5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxICBQYW9sbyBBbGJlcmVsbGkKKyAqIENvcHlyaWdodCAoQykgMjAwMyAgUGF1bCBNdW5kdAorICovCisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisvKiBGb3IgX19zd2FiMzIgKi8KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgc2V0X2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQoreworCWludAltYXNrOworCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqYSA9IGFkZHI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWEgKz0gbnIgPj4gNTsKKwltYXNrID0gMSA8PCAobnIgJiAweDFmKTsKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJKmEgfD0gbWFzazsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3NldF9iaXQoaW50IG5yLCB2b2lkICphZGRyKQoreworCWludAltYXNrOworCXVuc2lnbmVkIGludCAqYSA9IGFkZHI7CisKKwlhICs9IG5yID4+IDU7CisJbWFzayA9IDEgPDwgKG5yICYgMHgxZik7CisJKmEgfD0gbWFzazsKK30KKworLyoKKyAqIGNsZWFyX2JpdCgpIGRvZXNuJ3QgcHJvdmlkZSBhbnkgYmFycmllciBmb3IgdGhlIGNvbXBpbGVyLgorICovCisjZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpCWJhcnJpZXIoKQorI2RlZmluZSBzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpCWJhcnJpZXIoKQorc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX2JpdChpbnQgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmEpCit7CisJaW50CW1hc2s7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWEgKz0gbnIgPj4gNTsKKwltYXNrID0gMSA8PCAobnIgJiAweDFmKTsKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJKmEgJj0gfm1hc2s7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19jbGVhcl9iaXQoaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphKQoreworCWludAltYXNrOworCisJYSArPSBuciA+PiA1OworCW1hc2sgPSAxIDw8IChuciAmIDB4MWYpOworCSphICY9IH5tYXNrOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGNoYW5nZV9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKK3sKKwlpbnQJbWFzazsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKmEgPSBhZGRyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlhICs9IG5yID4+IDU7CisJbWFzayA9IDEgPDwgKG5yICYgMHgxZik7CisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCSphIF49IG1hc2s7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fY2hhbmdlX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQoreworCWludAltYXNrOworCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqYSA9IGFkZHI7CisKKwlhICs9IG5yID4+IDU7CisJbWFzayA9IDEgPDwgKG5yICYgMHgxZik7CisJKmEgXj0gbWFzazsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IHRlc3RfYW5kX3NldF9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKK3sKKwlpbnQJbWFzaywgcmV0dmFsOworCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqYSA9IGFkZHI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWEgKz0gbnIgPj4gNTsKKwltYXNrID0gMSA8PCAobnIgJiAweDFmKTsKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJcmV0dmFsID0gKG1hc2sgJiAqYSkgIT0gMDsKKwkqYSB8PSBtYXNrOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX3Rlc3RfYW5kX3NldF9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKK3sKKwlpbnQJbWFzaywgcmV0dmFsOworCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqYSA9IGFkZHI7CisKKwlhICs9IG5yID4+IDU7CisJbWFzayA9IDEgPDwgKG5yICYgMHgxZik7CisJcmV0dmFsID0gKG1hc2sgJiAqYSkgIT0gMDsKKwkqYSB8PSBtYXNrOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IHRlc3RfYW5kX2NsZWFyX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQoreworCWludAltYXNrLCByZXR2YWw7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50ICphID0gYWRkcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJYSArPSBuciA+PiA1OworCW1hc2sgPSAxIDw8IChuciAmIDB4MWYpOworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlyZXR2YWwgPSAobWFzayAmICphKSAhPSAwOworCSphICY9IH5tYXNrOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX3Rlc3RfYW5kX2NsZWFyX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQoreworCWludAltYXNrLCByZXR2YWw7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50ICphID0gYWRkcjsKKworCWEgKz0gbnIgPj4gNTsKKwltYXNrID0gMSA8PCAobnIgJiAweDFmKTsKKwlyZXR2YWwgPSAobWFzayAmICphKSAhPSAwOworCSphICY9IH5tYXNrOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IHRlc3RfYW5kX2NoYW5nZV9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKK3sKKwlpbnQJbWFzaywgcmV0dmFsOworCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqYSA9IGFkZHI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWEgKz0gbnIgPj4gNTsKKwltYXNrID0gMSA8PCAobnIgJiAweDFmKTsKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJcmV0dmFsID0gKG1hc2sgJiAqYSkgIT0gMDsKKwkqYSBePSBtYXNrOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX3Rlc3RfYW5kX2NoYW5nZV9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKK3sKKwlpbnQJbWFzaywgcmV0dmFsOworCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqYSA9IGFkZHI7CisKKwlhICs9IG5yID4+IDU7CisJbWFzayA9IDEgPDwgKG5yICYgMHgxZik7CisJcmV0dmFsID0gKG1hc2sgJiAqYSkgIT0gMDsKKwkqYSBePSBtYXNrOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IHRlc3RfYml0KGludCBuciwgY29uc3Qgdm9sYXRpbGUgdm9pZCAqYWRkcikKK3sKKwlyZXR1cm4gMVVMICYgKCgoY29uc3Qgdm9sYXRpbGUgdW5zaWduZWQgaW50ICopIGFkZHIpW25yID4+IDVdID4+IChuciAmIDMxKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgZmZ6KHVuc2lnbmVkIGxvbmcgd29yZCkKK3sKKwl1bnNpZ25lZCBsb25nIHJlc3VsdCwgX19kMiwgX19kMzsKKworICAgICAgICBfX2FzbV9fKCJnZXR0ciAgdHIwLCAlMlxuXHQiCisgICAgICAgICAgICAgICAgInB0YSAgICAkKzMyLCB0cjBcblx0IgorICAgICAgICAgICAgICAgICJhbmRpICAgJTEsIDEsICUzXG5cdCIKKyAgICAgICAgICAgICAgICAiYmVxICAgICUzLCByNjMsIHRyMFxuXHQiCisgICAgICAgICAgICAgICAgInB0YSAgICAkKzQsIHRyMFxuIgorICAgICAgICAgICAgICAgICIwOlxuXHQiCisgICAgICAgICAgICAgICAgInNobHJpLmwgICAgICAgICUxLCAxLCAlMVxuXHQiCisgICAgICAgICAgICAgICAgImFkZGkgICAlMCwgMSwgJTBcblx0IgorICAgICAgICAgICAgICAgICJhbmRpICAgJTEsIDEsICUzXG5cdCIKKyAgICAgICAgICAgICAgICAiYmVxaSAgICUzLCAxLCB0cjBcbiIKKyAgICAgICAgICAgICAgICAiMTpcblx0IgorICAgICAgICAgICAgICAgICJwdGFicyAgJTIsIHRyMFxuXHQiCisgICAgICAgICAgICAgICAgOiAiPXIiIChyZXN1bHQpLCAiPXIiICh3b3JkKSwgIj1yIiAoX19kMiksICI9ciIgKF9fZDMpCisgICAgICAgICAgICAgICAgOiAiMCIgKDBMKSwgIjEiICh3b3JkKSk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKioKKyAqIF9fZmZzIC0gZmluZCBmaXJzdCBiaXQgaW4gd29yZAorICogQHdvcmQ6IFRoZSB3b3JkIHRvIHNlYXJjaAorICoKKyAqIFVuZGVmaW5lZCBpZiBubyBiaXQgZXhpc3RzLCBzbyBjb2RlIHNob3VsZCBjaGVjayBhZ2FpbnN0IDAgZmlyc3QuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX2Zmcyh1bnNpZ25lZCBsb25nIHdvcmQpCit7CisJaW50IHIgPSAwOworCisJaWYgKCF3b3JkKQorCQlyZXR1cm4gMDsKKwlpZiAoISh3b3JkICYgMHhmZmZmKSkgeworCQl3b3JkID4+PSAxNjsKKwkJciArPSAxNjsKKwl9CisJaWYgKCEod29yZCAmIDB4ZmYpKSB7CisJCXdvcmQgPj49IDg7CisJCXIgKz0gODsKKwl9CisJaWYgKCEod29yZCAmIDB4ZikpIHsKKwkJd29yZCA+Pj0gNDsKKwkJciArPSA0OworCX0KKwlpZiAoISh3b3JkICYgMykpIHsKKwkJd29yZCA+Pj0gMjsKKwkJciArPSAyOworCX0KKwlpZiAoISh3b3JkICYgMSkpIHsKKwkJd29yZCA+Pj0gMTsKKwkJciArPSAxOworCX0KKwlyZXR1cm4gcjsKK30KKworLyoqCisgKiBmaW5kX25leHRfYml0IC0gZmluZCB0aGUgbmV4dCBzZXQgYml0IGluIGEgbWVtb3J5IHJlZ2lvbgorICogQGFkZHI6IFRoZSBhZGRyZXNzIHRvIGJhc2UgdGhlIHNlYXJjaCBvbgorICogQG9mZnNldDogVGhlIGJpdG51bWJlciB0byBzdGFydCBzZWFyY2hpbmcgYXQKKyAqIEBzaXplOiBUaGUgbWF4aW11bSBzaXplIHRvIHNlYXJjaAorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZmluZF9uZXh0X2JpdChjb25zdCB1bnNpZ25lZCBsb25nICphZGRyLAorCXVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpCit7CisJdW5zaWduZWQgaW50ICpwID0gKCh1bnNpZ25lZCBpbnQgKikgYWRkcikgKyAob2Zmc2V0ID4+IDUpOworCXVuc2lnbmVkIGludCByZXN1bHQgPSBvZmZzZXQgJiB+MzFVTDsKKwl1bnNpZ25lZCBpbnQgdG1wOworCisJaWYgKG9mZnNldCA+PSBzaXplKQorCQlyZXR1cm4gc2l6ZTsKKwlzaXplIC09IHJlc3VsdDsKKwlvZmZzZXQgJj0gMzFVTDsKKwlpZiAob2Zmc2V0KSB7CisJCXRtcCA9ICpwKys7CisJCXRtcCAmPSB+MFVMIDw8IG9mZnNldDsKKwkJaWYgKHNpemUgPCAzMikKKwkJCWdvdG8gZm91bmRfZmlyc3Q7CisJCWlmICh0bXApCisJCQlnb3RvIGZvdW5kX21pZGRsZTsKKwkJc2l6ZSAtPSAzMjsKKwkJcmVzdWx0ICs9IDMyOworCX0KKwl3aGlsZSAoc2l6ZSA+PSAzMikgeworCQlpZiAoKHRtcCA9ICpwKyspICE9IDApCisJCQlnb3RvIGZvdW5kX21pZGRsZTsKKwkJcmVzdWx0ICs9IDMyOworCQlzaXplIC09IDMyOworCX0KKwlpZiAoIXNpemUpCisJCXJldHVybiByZXN1bHQ7CisJdG1wID0gKnA7CisKK2ZvdW5kX2ZpcnN0OgorCXRtcCAmPSB+MFVMID4+ICgzMiAtIHNpemUpOworCWlmICh0bXAgPT0gMFVMKSAgICAgICAgLyogQXJlIGFueSBiaXRzIHNldD8gKi8KKwkJcmV0dXJuIHJlc3VsdCArIHNpemU7IC8qIE5vcGUuICovCitmb3VuZF9taWRkbGU6CisJcmV0dXJuIHJlc3VsdCArIF9fZmZzKHRtcCk7Cit9CisKKy8qKgorICogZmluZF9maXJzdF9iaXQgLSBmaW5kIHRoZSBmaXJzdCBzZXQgYml0IGluIGEgbWVtb3J5IHJlZ2lvbgorICogQGFkZHI6IFRoZSBhZGRyZXNzIHRvIHN0YXJ0IHRoZSBzZWFyY2ggYXQKKyAqIEBzaXplOiBUaGUgbWF4aW11bSBzaXplIHRvIHNlYXJjaAorICoKKyAqIFJldHVybnMgdGhlIGJpdC1udW1iZXIgb2YgdGhlIGZpcnN0IHNldCBiaXQsIG5vdCB0aGUgbnVtYmVyIG9mIHRoZSBieXRlCisgKiBjb250YWluaW5nIGEgYml0LgorICovCisjZGVmaW5lIGZpbmRfZmlyc3RfYml0KGFkZHIsIHNpemUpIFwKKwlmaW5kX25leHRfYml0KChhZGRyKSwgKHNpemUpLCAwKQorCisKK3N0YXRpYyBpbmxpbmUgaW50IGZpbmRfbmV4dF96ZXJvX2JpdCh2b2lkICphZGRyLCBpbnQgc2l6ZSwgaW50IG9mZnNldCkKK3sKKwl1bnNpZ25lZCBsb25nICpwID0gKCh1bnNpZ25lZCBsb25nICopIGFkZHIpICsgKG9mZnNldCA+PiA1KTsKKwl1bnNpZ25lZCBsb25nIHJlc3VsdCA9IG9mZnNldCAmIH4zMVVMOworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJaWYgKG9mZnNldCA+PSBzaXplKQorCQlyZXR1cm4gc2l6ZTsKKwlzaXplIC09IHJlc3VsdDsKKwlvZmZzZXQgJj0gMzFVTDsKKwlpZiAob2Zmc2V0KSB7CisJCXRtcCA9ICoocCsrKTsKKwkJdG1wIHw9IH4wVUwgPj4gKDMyLW9mZnNldCk7CisJCWlmIChzaXplIDwgMzIpCisJCQlnb3RvIGZvdW5kX2ZpcnN0OworCQlpZiAofnRtcCkKKwkJCWdvdG8gZm91bmRfbWlkZGxlOworCQlzaXplIC09IDMyOworCQlyZXN1bHQgKz0gMzI7CisJfQorCXdoaWxlIChzaXplICYgfjMxVUwpIHsKKwkJaWYgKH4odG1wID0gKihwKyspKSkKKwkJCWdvdG8gZm91bmRfbWlkZGxlOworCQlyZXN1bHQgKz0gMzI7CisJCXNpemUgLT0gMzI7CisJfQorCWlmICghc2l6ZSkKKwkJcmV0dXJuIHJlc3VsdDsKKwl0bXAgPSAqcDsKKworZm91bmRfZmlyc3Q6CisJdG1wIHw9IH4wVUwgPDwgc2l6ZTsKK2ZvdW5kX21pZGRsZToKKwlyZXR1cm4gcmVzdWx0ICsgZmZ6KHRtcCk7Cit9CisKKyNkZWZpbmUgZmluZF9maXJzdF96ZXJvX2JpdChhZGRyLCBzaXplKSBcCisgICAgICAgIGZpbmRfbmV4dF96ZXJvX2JpdCgoYWRkciksIChzaXplKSwgMCkKKworLyoKKyAqIGh3ZWlnaHROOiByZXR1cm5zIHRoZSBoYW1taW5nIHdlaWdodCAoaS5lLiB0aGUgbnVtYmVyCisgKiBvZiBiaXRzIHNldCkgb2YgYSBOLWJpdCB3b3JkCisgKi8KKworI2RlZmluZSBod2VpZ2h0MzIoeCkJZ2VuZXJpY19od2VpZ2h0MzIoeCkKKyNkZWZpbmUgaHdlaWdodDE2KHgpCWdlbmVyaWNfaHdlaWdodDE2KHgpCisjZGVmaW5lIGh3ZWlnaHQ4KHgpCWdlbmVyaWNfaHdlaWdodDgoeCkKKworLyoKKyAqIEV2ZXJ5IGFyY2hpdGVjdHVyZSBtdXN0IGRlZmluZSB0aGlzIGZ1bmN0aW9uLiBJdCdzIHRoZSBmYXN0ZXN0CisgKiB3YXkgb2Ygc2VhcmNoaW5nIGEgMTQwLWJpdCBiaXRtYXAgd2hlcmUgdGhlIGZpcnN0IDEwMCBiaXRzIGFyZQorICogdW5saWtlbHkgdG8gYmUgc2V0LiBJdCdzIGd1YXJhbnRlZWQgdGhhdCBhdCBsZWFzdCBvbmUgb2YgdGhlIDE0MAorICogYml0cyBpcyBjbGVhcmVkLgorICovCisKK3N0YXRpYyBpbmxpbmUgaW50IHNjaGVkX2ZpbmRfZmlyc3RfYml0KHVuc2lnbmVkIGxvbmcgKmIpCit7CisJaWYgKHVubGlrZWx5KGJbMF0pKQorCQlyZXR1cm4gX19mZnMoYlswXSk7CisJaWYgKHVubGlrZWx5KGJbMV0pKQorCQlyZXR1cm4gX19mZnMoYlsxXSkgKyAzMjsKKwlpZiAodW5saWtlbHkoYlsyXSkpCisJCXJldHVybiBfX2ZmcyhiWzJdKSArIDY0OworCWlmIChiWzNdKQorCQlyZXR1cm4gX19mZnMoYlszXSkgKyA5NjsKKwlyZXR1cm4gX19mZnMoYls0XSkgKyAxMjg7Cit9CisKKy8qCisgKiBmZnM6IGZpbmQgZmlyc3QgYml0IHNldC4gVGhpcyBpcyBkZWZpbmVkIHRoZSBzYW1lIHdheSBhcworICogdGhlIGxpYmMgYW5kIGNvbXBpbGVyIGJ1aWx0aW4gZmZzIHJvdXRpbmVzLCB0aGVyZWZvcmUKKyAqIGRpZmZlcnMgaW4gc3Bpcml0IGZyb20gdGhlIGFib3ZlIGZmeiAobWFuIGZmcykuCisgKi8KKworI2RlZmluZSBmZnMoeCkgZ2VuZXJpY19mZnMoeCkKKworLyoKKyAqIGh3ZWlnaHROOiByZXR1cm5zIHRoZSBoYW1taW5nIHdlaWdodCAoaS5lLiB0aGUgbnVtYmVyCisgKiBvZiBiaXRzIHNldCkgb2YgYSBOLWJpdCB3b3JkCisgKi8KKworI2RlZmluZSBod2VpZ2h0MzIoeCkgZ2VuZXJpY19od2VpZ2h0MzIoeCkKKyNkZWZpbmUgaHdlaWdodDE2KHgpIGdlbmVyaWNfaHdlaWdodDE2KHgpCisjZGVmaW5lIGh3ZWlnaHQ4KHgpIGdlbmVyaWNfaHdlaWdodDgoeCkKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIGV4dDJfc2V0X2JpdChuciwgYWRkcikgdGVzdF9hbmRfc2V0X2JpdCgobnIpLCAoYWRkcikpCisjZGVmaW5lIGV4dDJfY2xlYXJfYml0KG5yLCBhZGRyKSB0ZXN0X2FuZF9jbGVhcl9iaXQoKG5yKSwgKGFkZHIpKQorI2RlZmluZSBleHQyX3Rlc3RfYml0KG5yLCBhZGRyKSB0ZXN0X2JpdCgobnIpLCAoYWRkcikpCisjZGVmaW5lIGV4dDJfZmluZF9maXJzdF96ZXJvX2JpdChhZGRyLCBzaXplKSBmaW5kX2ZpcnN0X3plcm9fYml0KChhZGRyKSwgKHNpemUpKQorI2RlZmluZSBleHQyX2ZpbmRfbmV4dF96ZXJvX2JpdChhZGRyLCBzaXplLCBvZmZzZXQpIFwKKyAgICAgICAgICAgICAgICBmaW5kX25leHRfemVyb19iaXQoKGFkZHIpLCAoc2l6ZSksIChvZmZzZXQpKQorI2Vsc2UKK3N0YXRpYyBfX2lubGluZV9fIGludCBleHQyX3NldF9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKK3sKKwlpbnQJCW1hc2ssIHJldHZhbDsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIJKkFERFIgPSAodW5zaWduZWQgY2hhciAqKSBhZGRyOworCisJQUREUiArPSBuciA+PiAzOworCW1hc2sgPSAxIDw8IChuciAmIDB4MDcpOworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlyZXR2YWwgPSAobWFzayAmICpBRERSKSAhPSAwOworCSpBRERSIHw9IG1hc2s7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBleHQyX2NsZWFyX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQoreworCWludAkJbWFzaywgcmV0dmFsOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisJdm9sYXRpbGUgdW5zaWduZWQgY2hhcgkqQUREUiA9ICh1bnNpZ25lZCBjaGFyICopIGFkZHI7CisKKwlBRERSICs9IG5yID4+IDM7CisJbWFzayA9IDEgPDwgKG5yICYgMHgwNyk7CisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXJldHZhbCA9IChtYXNrICYgKkFERFIpICE9IDA7CisJKkFERFIgJj0gfm1hc2s7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBleHQyX3Rlc3RfYml0KGludCBuciwgY29uc3Qgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCit7CisJaW50CQkJbWFzazsKKwljb25zdCB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyCSpBRERSID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgYWRkcjsKKworCUFERFIgKz0gbnIgPj4gMzsKKwltYXNrID0gMSA8PCAobnIgJiAweDA3KTsKKwlyZXR1cm4gKChtYXNrICYgKkFERFIpICE9IDApOworfQorCisjZGVmaW5lIGV4dDJfZmluZF9maXJzdF96ZXJvX2JpdChhZGRyLCBzaXplKSBcCisgICAgICAgIGV4dDJfZmluZF9uZXh0X3plcm9fYml0KChhZGRyKSwgKHNpemUpLCAwKQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGV4dDJfZmluZF9uZXh0X3plcm9fYml0KHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpCit7CisJdW5zaWduZWQgbG9uZyAqcCA9ICgodW5zaWduZWQgbG9uZyAqKSBhZGRyKSArIChvZmZzZXQgPj4gNSk7CisJdW5zaWduZWQgbG9uZyByZXN1bHQgPSBvZmZzZXQgJiB+MzFVTDsKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCWlmIChvZmZzZXQgPj0gc2l6ZSkKKwkJcmV0dXJuIHNpemU7CisJc2l6ZSAtPSByZXN1bHQ7CisJb2Zmc2V0ICY9IDMxVUw7CisJaWYob2Zmc2V0KSB7CisJCS8qIFdlIGhvbGQgdGhlIGxpdHRsZSBlbmRpYW4gdmFsdWUgaW4gdG1wLCBidXQgdGhlbiB0aGUKKwkJICogc2hpZnQgaXMgaWxsZWdhbC4gU28gd2UgY291bGQga2VlcCBhIGJpZyBlbmRpYW4gdmFsdWUKKwkJICogaW4gdG1wLCBsaWtlIHRoaXM6CisJCSAqCisJCSAqIHRtcCA9IF9fc3dhYjMyKCoocCsrKSk7CisJCSAqIHRtcCB8PSB+MFVMID4+ICgzMi1vZmZzZXQpOworCQkgKgorCQkgKiBidXQgdGhpcyB3b3VsZCBkZWNyZWFzZSBwcmVmb3JtYW5jZSwgc28gd2UgY2hhbmdlIHRoZQorCQkgKiBzaGlmdDoKKwkJICovCisJCXRtcCA9ICoocCsrKTsKKwkJdG1wIHw9IF9fc3dhYjMyKH4wVUwgPj4gKDMyLW9mZnNldCkpOworCQlpZihzaXplIDwgMzIpCisJCQlnb3RvIGZvdW5kX2ZpcnN0OworCQlpZih+dG1wKQorCQkJZ290byBmb3VuZF9taWRkbGU7CisJCXNpemUgLT0gMzI7CisJCXJlc3VsdCArPSAzMjsKKwl9CisJd2hpbGUoc2l6ZSAmIH4zMVVMKSB7CisJCWlmKH4odG1wID0gKihwKyspKSkKKwkJCWdvdG8gZm91bmRfbWlkZGxlOworCQlyZXN1bHQgKz0gMzI7CisJCXNpemUgLT0gMzI7CisJfQorCWlmKCFzaXplKQorCQlyZXR1cm4gcmVzdWx0OworCXRtcCA9ICpwOworCitmb3VuZF9maXJzdDoKKwkvKiB0bXAgaXMgbGl0dGxlIGVuZGlhbiwgc28gd2Ugd291bGQgaGF2ZSB0byBzd2FiIHRoZSBzaGlmdCwKKwkgKiBzZWUgYWJvdmUuIEJ1dCB0aGVuIHdlIGhhdmUgdG8gc3dhYiB0bXAgYmVsb3cgZm9yIGZmeiwgc28KKwkgKiB3ZSBtaWdodCBhcyB3ZWxsIGRvIHRoaXMgaGVyZS4KKwkgKi8KKwlyZXR1cm4gcmVzdWx0ICsgZmZ6KF9fc3dhYjMyKHRtcCkgfCAofjBVTCA8PCBzaXplKSk7Citmb3VuZF9taWRkbGU6CisJcmV0dXJuIHJlc3VsdCArIGZmeihfX3N3YWIzMih0bXApKTsKK30KKyNlbmRpZgorCisjZGVmaW5lIGV4dDJfc2V0X2JpdF9hdG9taWMobG9jaywgbnIsIGFkZHIpCQlcCisJKHsJCQkJCQlcCisJCWludCByZXQ7CQkJCVwKKwkJc3Bpbl9sb2NrKGxvY2spOwkJCVwKKwkJcmV0ID0gZXh0Ml9zZXRfYml0KChuciksIChhZGRyKSk7CVwKKwkJc3Bpbl91bmxvY2sobG9jayk7CQkJXAorCQlyZXQ7CQkJCQlcCisJfSkKKworI2RlZmluZSBleHQyX2NsZWFyX2JpdF9hdG9taWMobG9jaywgbnIsIGFkZHIpCQlcCisJKHsJCQkJCQlcCisJCWludCByZXQ7CQkJCVwKKwkJc3Bpbl9sb2NrKGxvY2spOwkJCVwKKwkJcmV0ID0gZXh0Ml9jbGVhcl9iaXQoKG5yKSwgKGFkZHIpKTsJXAorCQlzcGluX3VubG9jayhsb2NrKTsJCQlcCisJCXJldDsJCQkJCVwKKwl9KQorCisvKiBCaXRtYXAgZnVuY3Rpb25zIGZvciB0aGUgbWluaXggZmlsZXN5c3RlbS4gICovCisjZGVmaW5lIG1pbml4X3Rlc3RfYW5kX3NldF9iaXQobnIsYWRkcikgdGVzdF9hbmRfc2V0X2JpdChucixhZGRyKQorI2RlZmluZSBtaW5peF9zZXRfYml0KG5yLGFkZHIpIHNldF9iaXQobnIsYWRkcikKKyNkZWZpbmUgbWluaXhfdGVzdF9hbmRfY2xlYXJfYml0KG5yLGFkZHIpIHRlc3RfYW5kX2NsZWFyX2JpdChucixhZGRyKQorI2RlZmluZSBtaW5peF90ZXN0X2JpdChucixhZGRyKSB0ZXN0X2JpdChucixhZGRyKQorI2RlZmluZSBtaW5peF9maW5kX2ZpcnN0X3plcm9fYml0KGFkZHIsc2l6ZSkgZmluZF9maXJzdF96ZXJvX2JpdChhZGRyLHNpemUpCisKKyNkZWZpbmUgZmZzKHgpCWdlbmVyaWNfZmZzKHgpCisjZGVmaW5lIGZscyh4KQlnZW5lcmljX2Zscyh4KQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX19BU01fU0g2NF9CSVRPUFNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2g2NC9idWcuaCBiL2luY2x1ZGUvYXNtLXNoNjQvYnVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FjZDU0ZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoNjQvYnVnLmgKQEAgLTAsMCArMSwzMiBAQAorI2lmbmRlZiBfX0FTTV9TSDY0X0JVR19ICisjZGVmaW5lIF9fQVNNX1NINjRfQlVHX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisvKgorICogVGVsbCB0aGUgdXNlciB0aGVyZSBpcyBzb21lIHByb2JsZW0sIHRoZW4gZm9yY2UgYSBzZWdmYXVsdCAoaW4gcHJvY2VzcworICogY29udGV4dCkgb3IgYSBwYW5pYyAoaW50ZXJydXB0IGNvbnRleHQpLgorICovCisjZGVmaW5lIEJVRygpIGRvIHsgXAorCXByaW50aygia2VybmVsIEJVRyBhdCAlczolZCFcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyk7IFwKKwkqKHZvbGF0aWxlIGludCAqKTAgPSAwOyBcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIEJVR19PTihjb25kaXRpb24pIGRvIHsgXAorCWlmICh1bmxpa2VseSgoY29uZGl0aW9uKSE9MCkpIFwKKwkJQlVHKCk7IFwKK30gd2hpbGUoMCkKKworI2RlZmluZSBQQUdFX0JVRyhwYWdlKSBkbyB7IFwKKwlCVUcoKTsgXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBXQVJOX09OKGNvbmRpdGlvbikgZG8geyBcCisJaWYgKHVubGlrZWx5KChjb25kaXRpb24pIT0wKSkgeyBcCisJCXByaW50aygiQmFkbmVzcyBpbiAlcyBhdCAlczolZFxuIiwgX19GVU5DVElPTl9fLCBfX0ZJTEVfXywgX19MSU5FX18pOyBcCisJCWR1bXBfc3RhY2soKTsgXAorCX0gXAorfSB3aGlsZSAoMCkKKworI2VuZGlmIC8qIF9fQVNNX1NINjRfQlVHX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2g2NC9idWdzLmggYi9pbmNsdWRlL2FzbS1zaDY0L2J1Z3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTU1NGFhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2g2NC9idWdzLmgKQEAgLTAsMCArMSwzOCBAQAorI2lmbmRlZiBfX0FTTV9TSDY0X0JVR1NfSAorI2RlZmluZSBfX0FTTV9TSDY0X0JVR1NfSAorCisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogaW5jbHVkZS9hc20tc2g2NC9idWdzLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEgIFBhb2xvIEFsYmVyZWxsaQorICogQ29weXJpZ2h0IChDKSAyMDAzICBQYXVsIE11bmR0CisgKgorICovCisKKy8qCisgKiBUaGlzIGlzIGluY2x1ZGVkIGJ5IGluaXQvbWFpbi5jIHRvIGNoZWNrIGZvciBhcmNoaXRlY3R1cmUtZGVwZW5kZW50IGJ1Z3MuCisgKgorICogTmVlZHM6CisgKgl2b2lkIGNoZWNrX2J1Z3Modm9pZCk7CisgKi8KKworLyoKKyAqIEkgZG9uJ3Qga25vdyBvZiBhbnkgU3VwZXItSCBidWdzIHlldC4KKyAqLworCisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorCitzdGF0aWMgdm9pZCBfX2luaXQgY2hlY2tfYnVncyh2b2lkKQoreworCWV4dGVybiBjaGFyICpnZXRfY3B1X3N1YnR5cGUodm9pZCk7CisJZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9vcHNfcGVyX2ppZmZ5OworCisJY3B1X2RhdGEtPmxvb3BzX3Blcl9qaWZmeSA9IGxvb3BzX3Blcl9qaWZmeTsKKworCXByaW50aygiQ1BVOiAlc1xuIiwgZ2V0X2NwdV9zdWJ0eXBlKCkpOworfQorI2VuZGlmIC8qIF9fQVNNX1NINjRfQlVHU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaDY0L2J5dGVvcmRlci5oIGIvaW5jbHVkZS9hc20tc2g2NC9ieXRlb3JkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjAyZWJlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2g2NC9ieXRlb3JkZXIuaApAQCAtMCwwICsxLDQ5IEBACisjaWZuZGVmIF9fQVNNX1NINjRfQllURU9SREVSX0gKKyNkZWZpbmUgX19BU01fU0g2NF9CWVRFT1JERVJfSAorCisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogaW5jbHVkZS9hc20tc2g2NC9ieXRlb3JkZXIuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSAgUGFvbG8gQWxiZXJlbGxpCisgKgorICovCisKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKworc3RhdGljIF9faW5saW5lX18gX19jb25zdF9fIF9fdTMyIF9fX2FyY2hfX3N3YWIzMihfX3UzMiB4KQoreworCV9fYXNtX18oImJ5dGVyZXYJJTAsICUwXG5cdCIKKwkJInNoYXJpCQklMCwgMzIsICUwIgorCQk6ICI9ciIgKHgpCisJCTogIjAiICh4KSk7CisJcmV0dXJuIHg7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fY29uc3RfXyBfX3UxNiBfX19hcmNoX19zd2FiMTYoX191MTYgeCkKK3sKKwlfX2FzbV9fKCJieXRlcmV2CSUwLCAlMFxuXHQiCisJCSJzaGFyaQkJJTAsIDQ4LCAlMCIKKwkJOiAiPXIiICh4KQorCQk6ICIwIiAoeCkpOworCXJldHVybiB4OworfQorCisjZGVmaW5lIF9fYXJjaF9fc3dhYjMyKHgpIF9fX2FyY2hfX3N3YWIzMih4KQorI2RlZmluZSBfX2FyY2hfX3N3YWIxNih4KSBfX19hcmNoX19zd2FiMTYoeCkKKworI2lmICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykgfHwgZGVmaW5lZChfX0tFUk5FTF9fKQorIyAgZGVmaW5lIF9fQllURU9SREVSX0hBU19VNjRfXworIyAgZGVmaW5lIF9fU1dBQl82NF9USFJVXzMyX18KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNpbmNsdWRlIDxsaW51eC9ieXRlb3JkZXIvbGl0dGxlX2VuZGlhbi5oPgorI2Vsc2UKKyNpbmNsdWRlIDxsaW51eC9ieXRlb3JkZXIvYmlnX2VuZGlhbi5oPgorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0FTTV9TSDY0X0JZVEVPUkRFUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaDY0L2NhY2hlLmggYi9pbmNsdWRlL2FzbS1zaDY0L2NhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU0ZTg1ZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoNjQvY2FjaGUuaApAQCAtMCwwICsxLDE0MSBAQAorI2lmbmRlZiBfX0FTTV9TSDY0X0NBQ0hFX0gKKyNkZWZpbmUgX19BU01fU0g2NF9DQUNIRV9ICisKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBpbmNsdWRlL2FzbS1zaDY0L2NhY2hlLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEgIFBhb2xvIEFsYmVyZWxsaQorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0ICBQYXVsIE11bmR0CisgKgorICovCisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKworI2RlZmluZSBMMV9DQUNIRV9TSElGVAkJNQorLyogYnl0ZXMgcGVyIEwxIGNhY2hlIGxpbmUgKi8KKyNkZWZpbmUgTDFfQ0FDSEVfQllURVMJCSgxIDw8IEwxX0NBQ0hFX1NISUZUKQorI2RlZmluZSBMMV9DQUNIRV9BTElHTl9NQVNLCSh+KEwxX0NBQ0hFX0JZVEVTIC0gMSkpCisjZGVmaW5lIEwxX0NBQ0hFX0FMSUdOKHgpCSgoKHgpKyhMMV9DQUNIRV9CWVRFUyAtIDEpKSAmIEwxX0NBQ0hFX0FMSUdOX01BU0spCisjZGVmaW5lIEwxX0NBQ0hFX1NJWkVfQllURVMJKEwxX0NBQ0hFX0JZVEVTIDw8IDEwKQorLyogTGFyZ2VzdCBMMSB3aGljaCB0aGlzIGFyY2ggc3VwcG9ydHMgKi8KKyNkZWZpbmUgTDFfQ0FDSEVfU0hJRlRfTUFYCTUKKworI2lmZGVmIE1PRFVMRQorI2RlZmluZSBfX2NhY2hlbGluZV9hbGlnbmVkIF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKEwxX0NBQ0hFX0JZVEVTKSkpCisjZWxzZQorI2RlZmluZSBfX2NhY2hlbGluZV9hbGlnbmVkCQkJCQlcCisgIF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKEwxX0NBQ0hFX0JZVEVTKSwJCQlcCisJCSBfX3NlY3Rpb25fXygiLmRhdGEuY2FjaGVsaW5lX2FsaWduZWQiKSkpCisjZW5kaWYKKworLyoKKyAqIENvbnRyb2wgUmVnaXN0ZXJzLgorICovCisjZGVmaW5lIElDQ1JfQkFTRQkweDAxNjAwMDAwCS8qIEluc3RydWN0aW9uIENhY2hlIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSUNDUl9SRUcwCTAJCS8qIFJlZ2lzdGVyIDAgb2Zmc2V0ICovCisjZGVmaW5lIElDQ1JfUkVHMQkxCQkvKiBSZWdpc3RlciAxIG9mZnNldCAqLworI2RlZmluZSBJQ0NSMAkJSUNDUl9CQVNFK0lDQ1JfUkVHMAorI2RlZmluZSBJQ0NSMQkJSUNDUl9CQVNFK0lDQ1JfUkVHMQorCisjZGVmaW5lIElDQ1IwX09GRgkweDAJCS8qIFNldCBJQ0FDSEUgb2ZmICovCisjZGVmaW5lIElDQ1IwX09OCTB4MQkJLyogU2V0IElDQUNIRSBvbiAqLworI2RlZmluZSBJQ0NSMF9JQ0kJMHgyCQkvKiBJbnZhbGlkYXRlIGFsbCBpbiBJQyAqLworCisjZGVmaW5lIElDQ1IxX05PTE9DSwkweDAJCS8qIFNldCBObyBMb2NraW5nICovCisKKyNkZWZpbmUgT0NDUl9CQVNFCTB4MDFFMDAwMDAJLyogT3BlcmFuZCBDYWNoZSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIE9DQ1JfUkVHMAkwCQkvKiBSZWdpc3RlciAwIG9mZnNldCAqLworI2RlZmluZSBPQ0NSX1JFRzEJMQkJLyogUmVnaXN0ZXIgMSBvZmZzZXQgKi8KKyNkZWZpbmUgT0NDUjAJCU9DQ1JfQkFTRStPQ0NSX1JFRzAKKyNkZWZpbmUgT0NDUjEJCU9DQ1JfQkFTRStPQ0NSX1JFRzEKKworI2RlZmluZSBPQ0NSMF9PRkYJMHgwCQkvKiBTZXQgT0NBQ0hFIG9mZiAqLworI2RlZmluZSBPQ0NSMF9PTgkweDEJCS8qIFNldCBPQ0FDSEUgb24gKi8KKyNkZWZpbmUgT0NDUjBfT0NJCTB4MgkJLyogSW52YWxpZGF0ZSBhbGwgaW4gT0MgKi8KKyNkZWZpbmUgT0NDUjBfV1QJMHg0CQkvKiBTZXQgT0NBQ0hFIGluIFdUIE1vZGUgKi8KKyNkZWZpbmUgT0NDUjBfV0IJMHgwCQkvKiBTZXQgT0NBQ0hFIGluIFdCIE1vZGUgKi8KKworI2RlZmluZSBPQ0NSMV9OT0xPQ0sJMHgwCQkvKiBTZXQgTm8gTG9ja2luZyAqLworCisKKy8qCisgKiBTSC01CisgKiBBIGJpdCBvZiBkZXNjcmlwdGlvbiBoZXJlLCBmb3IgbmVmZj0zMi4KKyAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8PC0tLSB0YWcgICgxOSBiaXRzKSAtLS0+fAorICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLSsKKyAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwgd2F5cyB8c2V0IGluZGV4IHxvZmZzZXR8CisgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tKworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4gICAgICAgICAgICAgICAgIDIgYml0cyAgIDggYml0cyAgIDUgYml0cworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstIEJpdCAzMQorICoKKyAqIENhY2hlbGluZSBzaXplIGlzIGJhc2VkIG9uIG9mZnNldDogNSBiaXRzID0gMzIgYnl0ZXMgcGVyIGxpbmUKKyAqIEEgY2FjaGUgbGluZSBpcyBpZGVudGlmaWVkIGJ5IGEgdGFnICsgc2V0IGJ1dCBPQ0FDSEVUQUcvSUNBQ0hFVEFHCisgKiBoYXZlIGEgYnJvYWRlciBzcGFjZSBmb3IgcmVnaXN0ZXJzLiBUaGVzZSBhcmUgb3V0bGluZWQgYnkKKyAqIENBQ0hFXz9DXypfU1RFUCBiZWxvdy4KKyAqCisgKi8KKworLyogVmFsaWQgYW5kIERpcnR5IGJpdHMgKi8KKyNkZWZpbmUgU0hfQ0FDSEVfVkFMSUQJCSgxTEw8PDApCisjZGVmaW5lIFNIX0NBQ0hFX1VQREFURUQJKDFMTDw8NTcpCisKKy8qIENhY2hlIGZsYWdzICovCisjZGVmaW5lIFNIX0NBQ0hFX01PREVfV1QJKDFMTDw8MCkKKyNkZWZpbmUgU0hfQ0FDSEVfTU9ERV9XQgkoMUxMPDwxKQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisvKgorICogQ2FjaGUgaW5mb3JtYXRpb24gc3RydWN0dXJlLgorICoKKyAqIERlZmluZWQgZm9yIGJvdGggSSBhbmQgRCBjYWNoZSwgcGVyLXByb2Nlc3Nvci4KKyAqLworc3RydWN0IGNhY2hlX2luZm8geworCXVuc2lnbmVkIGludCB3YXlzOworCXVuc2lnbmVkIGludCBzZXRzOworCXVuc2lnbmVkIGludCBsaW5lc3o7CisKKwl1bnNpZ25lZCBpbnQgd2F5X3NoaWZ0OworCXVuc2lnbmVkIGludCBlbnRyeV9zaGlmdDsKKwl1bnNpZ25lZCBpbnQgc2V0X3NoaWZ0OworCXVuc2lnbmVkIGludCB3YXlfc3RlcF9zaGlmdDsKKwl1bnNpZ25lZCBpbnQgYXNpZF9zaGlmdDsKKworCXVuc2lnbmVkIGludCB3YXlfb2ZzOworCisJdW5zaWduZWQgaW50IGFzaWRfbWFzazsKKwl1bnNpZ25lZCBpbnQgaWR4X21hc2s7CisJdW5zaWduZWQgaW50IGVwbl9tYXNrOworCisJdW5zaWduZWQgbG9uZyBmbGFnczsKK307CisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworLyogSW5zdHJ1Y3Rpb24gY2FjaGUgKi8KKyNkZWZpbmUgQ0FDSEVfSUNfQUREUkVTU19BUlJBWSAweDAxMDAwMDAwCisKKy8qIE9wZXJhbmQgQ2FjaGUgKi8KKyNkZWZpbmUgQ0FDSEVfT0NfQUREUkVTU19BUlJBWSAweDAxODAwMDAwCisKKy8qIFRoZXNlIGRlY2xhcmF0aW9ucyByZWxhdGUgdG8gY2FjaGUgJ3N5bm9ueW1zJyBpbiB0aGUgb3BlcmFuZCBjYWNoZS4gIEEKKyAgICdzeW5vbnltJyBvY2N1cnMgd2hlcmUgZWZmZWN0aXZlIGFkZHJlc3MgYml0cyBvdmVybGFwIGJldHdlZW4gdGhvc2UgdXNlZCBmb3IKKyAgIGluZGV4aW5nIHRoZSBjYWNoZSBzZXRzIGFuZCB0aG9zZSBwYXNzZWQgdG8gdGhlIE1NVSBmb3IgdHJhbnNsYXRpb24uICBJbiB0aGUKKyAgIGNhc2Ugb2YgU0g1LTEwMSAmIFNINS0xMDMsIG9ubHkgYml0IDEyIGlzIGFmZmVjdGVkIGZvciA0ayBwYWdlcy4gKi8KKworI2RlZmluZSBDQUNIRV9PQ19OX1NZTkJJVFMgIDEgICAgICAgICAgICAgICAvKiBOdW1iZXIgb2Ygc3lub255bSBiaXRzICovCisjZGVmaW5lIENBQ0hFX09DX1NZTl9TSElGVCAgMTIKKy8qIE1hc2sgdG8gc2VsZWN0IHN5bm9ueW0gYml0KHMpICovCisjZGVmaW5lIENBQ0hFX09DX1NZTl9NQVNLICAgKCgoMVVMPDxDQUNIRV9PQ19OX1NZTkJJVFMpLTEpPDxDQUNIRV9PQ19TWU5fU0hJRlQpCisKKworLyoKKyAqIEluc3RydWN0aW9uIGNhY2hlIGNhbid0IGJlIGludmFsaWRhdGVkIGJhc2VkIG9uIHBoeXNpY2FsIGFkZHJlc3Nlcy4KKyAqIE5vIEluc3RydWN0aW9uIENhY2hlIGRlZmluZXMgcmVxdWlyZWQsIHRoZW4uCisgKi8KKworI2VuZGlmIC8qIF9fQVNNX1NINjRfQ0FDSEVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2g2NC9jYWNoZWZsdXNoLmggYi9pbmNsdWRlL2FzbS1zaDY0L2NhY2hlZmx1c2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWY3MWFhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2g2NC9jYWNoZWZsdXNoLmgKQEAgLTAsMCArMSw0OCBAQAorI2lmbmRlZiBfX0FTTV9TSDY0X0NBQ0hFRkxVU0hfSAorI2RlZmluZSBfX0FTTV9TSDY0X0NBQ0hFRkxVU0hfSAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKworc3RydWN0IHZtX2FyZWFfc3RydWN0Oworc3RydWN0IHBhZ2U7CitzdHJ1Y3QgbW1fc3RydWN0OworCitleHRlcm4gdm9pZCBmbHVzaF9jYWNoZV9hbGwodm9pZCk7CitleHRlcm4gdm9pZCBmbHVzaF9jYWNoZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CitleHRlcm4gdm9pZCBmbHVzaF9jYWNoZV9zaWd0cmFtcCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7CitleHRlcm4gdm9pZCBmbHVzaF9jYWNoZV9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZW5kKTsKK2V4dGVybiB2b2lkIGZsdXNoX2NhY2hlX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBwZm4pOworZXh0ZXJuIHZvaWQgZmx1c2hfZGNhY2hlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBnKTsKK2V4dGVybiB2b2lkIGZsdXNoX2ljYWNoZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7CitleHRlcm4gdm9pZCBmbHVzaF9pY2FjaGVfdXNlcl9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCQkgICAgc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCQkgICAgaW50IGxlbik7CisKKyNkZWZpbmUgZmx1c2hfZGNhY2hlX21tYXBfbG9jayhtYXBwaW5nKQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9kY2FjaGVfbW1hcF91bmxvY2sobWFwcGluZykJZG8geyB9IHdoaWxlICgwKQorCisjZGVmaW5lIGZsdXNoX2NhY2hlX3ZtYXAoc3RhcnQsIGVuZCkJCWZsdXNoX2NhY2hlX2FsbCgpCisjZGVmaW5lIGZsdXNoX2NhY2hlX3Z1bm1hcChzdGFydCwgZW5kKQkJZmx1c2hfY2FjaGVfYWxsKCkKKworI2RlZmluZSBmbHVzaF9pY2FjaGVfcGFnZSh2bWEsIHBhZ2UpCWRvIHsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBjb3B5X3RvX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIHZhZGRyLCBkc3QsIHNyYywgbGVuKSBcCisJZG8gewkJCQkJCQlcCisJCWZsdXNoX2NhY2hlX3BhZ2Uodm1hLCB2YWRkciwgcGFnZV90b19wZm4ocGFnZSkpO1wKKwkJbWVtY3B5KGRzdCwgc3JjLCBsZW4pOwkJCQlcCisJCWZsdXNoX2ljYWNoZV91c2VyX3JhbmdlKHZtYSwgcGFnZSwgdmFkZHIsIGxlbik7CVwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIGNvcHlfZnJvbV91c2VyX3BhZ2Uodm1hLCBwYWdlLCB2YWRkciwgZHN0LCBzcmMsIGxlbikgXAorCWRvIHsJCQkJCQkJXAorCQlmbHVzaF9jYWNoZV9wYWdlKHZtYSwgdmFkZHIsIHBhZ2VfdG9fcGZuKHBhZ2UpKTtcCisJCW1lbWNweShkc3QsIHNyYywgbGVuKTsJCQkJXAorCX0gd2hpbGUgKDApCisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworI2VuZGlmIC8qIF9fQVNNX1NINjRfQ0FDSEVGTFVTSF9IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoNjQvY2F5bWFuLmggYi9pbmNsdWRlL2FzbS1zaDY0L2NheW1hbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiNmI5NjgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaDY0L2NheW1hbi5oCkBAIC0wLDAgKzEsMjAgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBpbmNsdWRlL2FzbS1zaDY0L2NheW1hbi5oCisgKgorICogQ2F5bWFuIGRlZmluaXRpb25zCisgKgorICogR2xvYmFsIGRlZmludGlvbnMgZm9yIHRoZSBTSDUgQ2F5bWFuIGJvYXJkCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAyIFN0dWFydCBNZW5lZnkKKyAqLworCisKKy8qIFNldHVwIGZvciB0aGUgU01TQyBGREMzN0M5MzUgLyBMQU45MUMxMDBGRCAqLworI2RlZmluZSBTTVNDX0lSUSAgICAgICAgIElSUV9JUkwxCisKKy8qIFNldHVwIGZvciBQQ0kgQnVzIDIsIHdoaWNoIHRyYW5zbWl0cyBpbnRlcnJ1cHRzIHZpYSB0aGUgRVBMRCAqLworI2RlZmluZSBQQ0kyX0lSUSAgICAgICAgIElSUV9JUkwzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaDY0L2NoZWNrc3VtLmggYi9pbmNsdWRlL2FzbS1zaDY0L2NoZWNrc3VtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWEzOTExYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoNjQvY2hlY2tzdW0uaApAQCAtMCwwICsxLDk1IEBACisjaWZuZGVmIF9fQVNNX1NINjRfQ0hFQ0tTVU1fSAorI2RlZmluZSBfX0FTTV9TSDY0X0NIRUNLU1VNX0gKKworLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIGluY2x1ZGUvYXNtLXNoNjQvY2hlY2tzdW0uaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSAgUGFvbG8gQWxiZXJlbGxpCisgKgorICovCisKKyNpbmNsdWRlIDxhc20vcmVnaXN0ZXJzLmg+CisKKy8qCisgKiBjb21wdXRlcyB0aGUgY2hlY2tzdW0gb2YgYSBtZW1vcnkgYmxvY2sgYXQgYnVmZiwgbGVuZ3RoIGxlbiwKKyAqIGFuZCBhZGRzIGluICJzdW0iICgzMi1iaXQpCisgKgorICogcmV0dXJucyBhIDMyLWJpdCBudW1iZXIgc3VpdGFibGUgZm9yIGZlZWRpbmcgaW50byBpdHNlbGYKKyAqIG9yIGNzdW1fdGNwdWRwX21hZ2ljCisgKgorICogdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIGV2ZW4gbGVuZ3RocywgZXhjZXB0CisgKiBmb3IgdGhlIGxhc3QgZnJhZ21lbnQsIHdoaWNoIG1heSBiZSBvZGQKKyAqCisgKiBpdCdzIGJlc3QgdG8gaGF2ZSBidWZmIGFsaWduZWQgb24gYSAzMi1iaXQgYm91bmRhcnkKKyAqLworYXNtbGlua2FnZSB1bnNpZ25lZCBpbnQgY3N1bV9wYXJ0aWFsKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZmYsIGludCBsZW4sCisJCQkJICAgICB1bnNpZ25lZCBpbnQgc3VtKTsKKworLyoKKyAqCU5vdGU6IHdoZW4geW91IGdldCBhIE5VTEwgcG9pbnRlciBleGNlcHRpb24gaGVyZSB0aGlzIG1lYW5zIHNvbWVvbmUKKyAqCXBhc3NlZCBpbiBhbiBpbmNvcnJlY3Qga2VybmVsIGFkZHJlc3MgdG8gb25lIG9mIHRoZXNlIGZ1bmN0aW9ucy4KKyAqCisgKglJZiB5b3UgdXNlIHRoZXNlIGZ1bmN0aW9ucyBkaXJlY3RseSBwbGVhc2UgZG9uJ3QgZm9yZ2V0IHRoZQorICoJdmVyaWZ5X2FyZWEoKS4KKyAqLworCisKK3Vuc2lnbmVkIGludCBjc3VtX3BhcnRpYWxfY29weV9ub2NoZWNrKGNvbnN0IGNoYXIgKnNyYywgY2hhciAqZHN0LCBpbnQgbGVuLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgc3VtKTsKKwordW5zaWduZWQgaW50IGNzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlcihjb25zdCBjaGFyICpzcmMsIGNoYXIgKmRzdCwKKwkJCQkJIGludCBsZW4sIGludCBzdW0sIGludCAqZXJyX3B0cik7CisKKy8qCisgKiBUaGVzZSBhcmUgdGhlIG9sZCAoYW5kIHVuc2FmZSkgd2F5IG9mIGRvaW5nIGNoZWNrc3VtcywgYSB3YXJuaW5nIG1lc3NhZ2Ugd2lsbCBiZQorICogcHJpbnRlZCBpZiB0aGV5IGFyZSB1c2VkIGFuZCBhbiBleGVwdGlvbiBvY2N1cnMuCisgKgorICogdGhlc2UgZnVuY3Rpb25zIHNob3VsZCBnbyBhd2F5IGFmdGVyIHNvbWUgdGltZS4KKyAqLworCisjZGVmaW5lIGNzdW1fcGFydGlhbF9jb3B5X2Zyb211c2VyIGNzdW1fcGFydGlhbF9jb3B5CisKK3Vuc2lnbmVkIGludCBjc3VtX3BhcnRpYWxfY29weShjb25zdCBjaGFyICpzcmMsIGNoYXIgKmRzdCwgaW50IGxlbiwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgc3VtKTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBjc3VtX2ZvbGQodW5zaWduZWQgaW50IHN1bSkKK3sKKyAgICAgICAgc3VtID0gKHN1bSAmIDB4ZmZmZikgKyAoc3VtID4+IDE2KTsKKyAgICAgICAgc3VtID0gKHN1bSAmIDB4ZmZmZikgKyAoc3VtID4+IDE2KTsKKyAgICAgICAgcmV0dXJuIH4oc3VtKTsKK30KKwordW5zaWduZWQgc2hvcnQgaXBfZmFzdF9jc3VtKHVuc2lnbmVkIGNoYXIgKiBpcGgsIHVuc2lnbmVkIGludCBpaGwpOworCit1bnNpZ25lZCBsb25nIGNzdW1fdGNwdWRwX25vZm9sZCh1bnNpZ25lZCBsb25nIHNhZGRyLCB1bnNpZ25lZCBsb25nIGRhZGRyLAorCQkJCSB1bnNpZ25lZCBzaG9ydCBsZW4sIHVuc2lnbmVkIHNob3J0IHByb3RvLAorCQkJCSB1bnNpZ25lZCBpbnQgc3VtKTsKKworLyoKKyAqIGNvbXB1dGVzIHRoZSBjaGVja3N1bSBvZiB0aGUgVENQL1VEUCBwc2V1ZG8taGVhZGVyCisgKiByZXR1cm5zIGEgMTYtYml0IGNoZWNrc3VtLCBhbHJlYWR5IGNvbXBsZW1lbnRlZAorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IGludCBjc3VtX3RjcHVkcF9tYWdpYyh1bnNpZ25lZCBsb25nIHNhZGRyLAorCQkJCQkJICAgdW5zaWduZWQgbG9uZyBkYWRkciwKKwkJCQkJCSAgIHVuc2lnbmVkIHNob3J0IGxlbiwKKwkJCQkJCSAgIHVuc2lnbmVkIHNob3J0IHByb3RvLAorCQkJCQkJICAgdW5zaWduZWQgaW50IHN1bSkKK3sKKwlyZXR1cm4gY3N1bV9mb2xkKGNzdW1fdGNwdWRwX25vZm9sZChzYWRkcixkYWRkcixsZW4scHJvdG8sc3VtKSk7Cit9CisKKy8qCisgKiB0aGlzIHJvdXRpbmUgaXMgdXNlZCBmb3IgbWlzY2VsbGFuZW91cyBJUC1saWtlIGNoZWNrc3VtcywgbWFpbmx5CisgKiBpbiBpY21wLmMKKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBpcF9jb21wdXRlX2NzdW0odW5zaWduZWQgY2hhciAqIGJ1ZmYsIGludCBsZW4pCit7CisJcmV0dXJuIGNzdW1fZm9sZChjc3VtX3BhcnRpYWwoYnVmZiwgbGVuLCAwKSk7Cit9CisKKyNlbmRpZiAvKiBfX0FTTV9TSDY0X0NIRUNLU1VNX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2g2NC9jcHVtYXNrLmggYi9pbmNsdWRlL2FzbS1zaDY0L2NwdW1hc2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2IxMDVkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2g2NC9jcHVtYXNrLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fQVNNX1NINjRfQ1BVTUFTS19ICisjZGVmaW5lIF9fQVNNX1NINjRfQ1BVTUFTS19ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9jcHVtYXNrLmg+CisKKyNlbmRpZiAvKiBfX0FTTV9TSDY0X0NQVU1BU0tfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2g2NC9jcHV0aW1lLmggYi9pbmNsdWRlL2FzbS1zaDY0L2NwdXRpbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmQ4OWRhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2g2NC9jcHV0aW1lLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fU0g2NF9DUFVUSU1FX0gKKyNkZWZpbmUgX19TSDY0X0NQVVRJTUVfSAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvY3B1dGltZS5oPgorCisjZW5kaWYgLyogX19TSDY0X0NQVVRJTUVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2g2NC9jdXJyZW50LmggYi9pbmNsdWRlL2FzbS1zaDY0L2N1cnJlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjEyMjQzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2g2NC9jdXJyZW50LmgKQEAgLTAsMCArMSwyOCBAQAorI2lmbmRlZiBfX0FTTV9TSDY0X0NVUlJFTlRfSAorI2RlZmluZSBfX0FTTV9TSDY0X0NVUlJFTlRfSAorCisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogaW5jbHVkZS9hc20tc2g2NC9jdXJyZW50LmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEgIFBhb2xvIEFsYmVyZWxsaQorICogQ29weXJpZ2h0IChDKSAyMDAzICBQYXVsIE11bmR0CisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC90aHJlYWRfaW5mby5oPgorCitzdHJ1Y3QgdGFza19zdHJ1Y3Q7CisKK3N0YXRpYyBfX2lubGluZV9fIHN0cnVjdCB0YXNrX3N0cnVjdCAqIGdldF9jdXJyZW50KHZvaWQpCit7CisJcmV0dXJuIGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+dGFzazsKK30KKworI2RlZmluZSBjdXJyZW50IGdldF9jdXJyZW50KCkKKworI2VuZGlmIC8qIF9fQVNNX1NINjRfQ1VSUkVOVF9IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoNjQvZGVsYXkuaCBiL2luY2x1ZGUvYXNtLXNoNjQvZGVsYXkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWUzMTMwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2g2NC9kZWxheS5oCkBAIC0wLDAgKzEsMTEgQEAKKyNpZm5kZWYgX19BU01fU0g2NF9ERUxBWV9ICisjZGVmaW5lIF9fQVNNX1NINjRfREVMQVlfSAorCitleHRlcm4gdm9pZCBfX2RlbGF5KGludCBsb29wcyk7CitleHRlcm4gdm9pZCBfX3VkZWxheSh1bnNpZ25lZCBsb25nIGxvbmcgdXNlY3MsIHVuc2lnbmVkIGxvbmcgbHBqKTsKK2V4dGVybiB2b2lkIF9fbmRlbGF5KHVuc2lnbmVkIGxvbmcgbG9uZyBuc2VjcywgdW5zaWduZWQgbG9uZyBscGopOworZXh0ZXJuIHZvaWQgdWRlbGF5KHVuc2lnbmVkIGxvbmcgdXNlY3MpOworZXh0ZXJuIHZvaWQgbmRlbGF5KHVuc2lnbmVkIGxvbmcgbnNlY3MpOworCisjZW5kaWYgLyogX19BU01fU0g2NF9ERUxBWV9IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoNjQvZGl2NjQuaCBiL2luY2x1ZGUvYXNtLXNoNjQvZGl2NjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzU4Njk1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2g2NC9kaXY2NC5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfX0FTTV9TSDY0X0RJVjY0X0gKKyNkZWZpbmUgX19BU01fU0g2NF9ESVY2NF9ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9kaXY2NC5oPgorCisjZW5kaWYgLyogX19BU01fU0g2NF9ESVY2NF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaDY0L2RtYS1tYXBwaW5nLmggYi9pbmNsdWRlL2FzbS1zaDY0L2RtYS1tYXBwaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhkMjZmZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoNjQvZG1hLW1hcHBpbmcuaApAQCAtMCwwICsxLDE2MiBAQAorI2lmbmRlZiBfX0FTTV9TSF9ETUFfTUFQUElOR19ICisjZGVmaW5lIF9fQVNNX1NIX0RNQV9NQVBQSU5HX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKK3N0cnVjdCBwY2lfZGV2OworZXh0ZXJuIHZvaWQgKmNvbnNpc3RlbnRfYWxsb2Moc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCBzaXplX3Qgc2l6ZSwKKwkJCQkgICAgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSk7CitleHRlcm4gdm9pZCBjb25zaXN0ZW50X2ZyZWUoc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCBzaXplX3Qgc2l6ZSwKKwkJCQkgIHZvaWQgKnZhZGRyLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUpOworCisjZGVmaW5lIGRtYV9zdXBwb3J0ZWQoZGV2LCBtYXNrKQkoMSkKKworc3RhdGljIGlubGluZSBpbnQgZG1hX3NldF9tYXNrKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IG1hc2spCit7CisJaWYgKCFkZXYtPmRtYV9tYXNrIHx8ICFkbWFfc3VwcG9ydGVkKGRldiwgbWFzaykpCisJCXJldHVybiAtRUlPOworCisJKmRldi0+ZG1hX21hc2sgPSBtYXNrOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqZG1hX2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCisJCQkgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgaW50IGZsYWcpCit7CisJcmV0dXJuIGNvbnNpc3RlbnRfYWxsb2MoTlVMTCwgc2l6ZSwgZG1hX2hhbmRsZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkbWFfZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAorCQkgICAgICAgdm9pZCAqdmFkZHIsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSkKK3sKKwljb25zaXN0ZW50X2ZyZWUoTlVMTCwgc2l6ZSwgdmFkZHIsIGRtYV9oYW5kbGUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZG1hX2NhY2hlX3N5bmModm9pZCAqdmFkZHIsIHNpemVfdCBzaXplLAorCQkJCSAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQoreworCWRtYV9jYWNoZV93YmFja19pbnYoKHVuc2lnbmVkIGxvbmcpdmFkZHIsIHNpemUpOworfQorCitzdGF0aWMgaW5saW5lIGRtYV9hZGRyX3QgZG1hX21hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQl2b2lkICpwdHIsIHNpemVfdCBzaXplLAorCQkJCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCit7CisjaWYgZGVmaW5lZChDT05GSUdfUENJKSAmJiAhZGVmaW5lZChDT05GSUdfU0hfUENJRE1BX05PTkNPSEVSRU5UKQorCWlmIChkZXYtPmJ1cyA9PSAmcGNpX2J1c190eXBlKQorCQlyZXR1cm4gdmlydF90b19idXMocHRyKTsKKyNlbmRpZgorCWRtYV9jYWNoZV9zeW5jKHB0ciwgc2l6ZSwgZGlyKTsKKworCXJldHVybiB2aXJ0X3RvX2J1cyhwdHIpOworfQorCisjZGVmaW5lIGRtYV91bm1hcF9zaW5nbGUoZGV2LCBhZGRyLCBzaXplLCBkaXIpCWRvIHsgfSB3aGlsZSAoMCkKKworc3RhdGljIGlubGluZSBpbnQgZG1hX21hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJCQkgICAgIGludCBuZW50cywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG5lbnRzOyBpKyspIHsKKyNpZiAhZGVmaW5lZChDT05GSUdfUENJKSB8fCBkZWZpbmVkKENPTkZJR19TSF9QQ0lETUFfTk9OQ09IRVJFTlQpCisJCWRtYV9jYWNoZV9zeW5jKHBhZ2VfYWRkcmVzcyhzZ1tpXS5wYWdlKSArIHNnW2ldLm9mZnNldCwKKwkJCSAgICAgICBzZ1tpXS5sZW5ndGgsIGRpcik7CisjZW5kaWYKKwkJc2dbaV0uZG1hX2FkZHJlc3MgPSBwYWdlX3RvX3BoeXMoc2dbaV0ucGFnZSkgKyBzZ1tpXS5vZmZzZXQ7CisJfQorCisJcmV0dXJuIG5lbnRzOworfQorCisjZGVmaW5lIGRtYV91bm1hcF9zZyhkZXYsIHNnLCBuZW50cywgZGlyKQlkbyB7IH0gd2hpbGUgKDApCisKK3N0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdCBkbWFfbWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsCisJCQkJICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQoreworCXJldHVybiBkbWFfbWFwX3NpbmdsZShkZXYsIHBhZ2VfYWRkcmVzcyhwYWdlKSArIG9mZnNldCwgc2l6ZSwgZGlyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRtYV91bm1hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkcmVzcywKKwkJCQkgIHNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCit7CisJZG1hX3VubWFwX3NpbmdsZShkZXYsIGRtYV9hZGRyZXNzLCBzaXplLCBkaXIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZG1hX3N5bmNfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAorCQkJCSAgIHNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCit7CisjaWYgZGVmaW5lZChDT05GSUdfUENJKSAmJiAhZGVmaW5lZChDT05GSUdfU0hfUENJRE1BX05PTkNPSEVSRU5UKQorCWlmIChkZXYtPmJ1cyA9PSAmcGNpX2J1c190eXBlKQorCQlyZXR1cm47CisjZW5kaWYKKwlkbWFfY2FjaGVfc3luYyhidXNfdG9fdmlydChkbWFfaGFuZGxlKSwgc2l6ZSwgZGlyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRtYV9zeW5jX3NpbmdsZV9yYW5nZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCisJCQkJCSB1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsCisJCQkJCSBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCit7CisjaWYgZGVmaW5lZChDT05GSUdfUENJKSAmJiAhZGVmaW5lZChDT05GSUdfU0hfUENJRE1BX05PTkNPSEVSRU5UKQorCWlmIChkZXYtPmJ1cyA9PSAmcGNpX2J1c190eXBlKQorCQlyZXR1cm47CisjZW5kaWYKKwlkbWFfY2FjaGVfc3luYyhidXNfdG9fdmlydChkbWFfaGFuZGxlKSArIG9mZnNldCwgc2l6ZSwgZGlyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRtYV9zeW5jX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwkJCSAgICAgICBpbnQgbmVsZW1zLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbmVsZW1zOyBpKyspIHsKKyNpZiAhZGVmaW5lZChDT05GSUdfUENJKSB8fCBkZWZpbmVkKENPTkZJR19TSF9QQ0lETUFfTk9OQ09IRVJFTlQpCisJCWRtYV9jYWNoZV9zeW5jKHBhZ2VfYWRkcmVzcyhzZ1tpXS5wYWdlKSArIHNnW2ldLm9mZnNldCwKKwkJCSAgICAgICBzZ1tpXS5sZW5ndGgsIGRpcik7CisjZW5kaWYKKwkJc2dbaV0uZG1hX2FkZHJlc3MgPSBwYWdlX3RvX3BoeXMoc2dbaV0ucGFnZSkgKyBzZ1tpXS5vZmZzZXQ7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgICBkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHNpemVfdCBzaXplLAorCQkJCQkgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCisJX19hdHRyaWJ1dGVfXyAoKGFsaWFzKCJkbWFfc3luY19zaW5nbGUiKSkpOworCitzdGF0aWMgaW5saW5lIHZvaWQgZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgICBkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHNpemVfdCBzaXplLAorCQkJCQkgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCisJX19hdHRyaWJ1dGVfXyAoKGFsaWFzKCJkbWFfc3luY19zaW5nbGUiKSkpOworCitzdGF0aWMgaW5saW5lIHZvaWQgZG1hX3N5bmNfc2dfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZWxlbXMsCisJCQkJICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKKwlfX2F0dHJpYnV0ZV9fICgoYWxpYXMoImRtYV9zeW5jX3NnIikpKTsKKworc3RhdGljIGlubGluZSB2b2lkIGRtYV9zeW5jX3NnX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVsZW1zLAorCQkJCSAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCisJX19hdHRyaWJ1dGVfXyAoKGFsaWFzKCJkbWFfc3luY19zZyIpKSk7CisKK3N0YXRpYyBpbmxpbmUgaW50IGRtYV9nZXRfY2FjaGVfYWxpZ25tZW50KHZvaWQpCit7CisJLyoKKwkgKiBFYWNoIHByb2Nlc3NvciBmYW1pbHkgd2lsbCBkZWZpbmUgaXRzIG93biBMMV9DQUNIRV9TSElGVCwKKwkgKiBMMV9DQUNIRV9CWVRFUyB3cmFwcyB0byB0aGlzLCBzbyB0aGlzIGlzIGFsd2F5cyBzYWZlLgorCSAqLworCXJldHVybiBMMV9DQUNIRV9CWVRFUzsKK30KKworc3RhdGljIGlubGluZSBpbnQgZG1hX21hcHBpbmdfZXJyb3IoZG1hX2FkZHJfdCBkbWFfYWRkcikKK3sKKwlyZXR1cm4gZG1hX2FkZHIgPT0gMDsKK30KKworI2VuZGlmIC8qIF9fQVNNX1NIX0RNQV9NQVBQSU5HX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2g2NC9kbWEuaCBiL2luY2x1ZGUvYXNtLXNoNjQvZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTcwMWYzOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoNjQvZG1hLmgKQEAgLTAsMCArMSw0MSBAQAorI2lmbmRlZiBfX0FTTV9TSDY0X0RNQV9ICisjZGVmaW5lIF9fQVNNX1NINjRfRE1BX0gKKworLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIGluY2x1ZGUvYXNtLXNoNjQvZG1hLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEgIFBhb2xvIEFsYmVyZWxsaQorICogQ29weXJpZ2h0IChDKSAyMDAzICBQYXVsIE11bmR0CisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisKKyNkZWZpbmUgTUFYX0RNQV9DSEFOTkVMUwk0CisKKy8qCisgKiBTSDUgY2FuIERNQSBpbiBhbnkgbWVtb3J5IGFyZWEuCisgKgorICogVGhlIHN0YXRpYyBkZWZpbml0aW9uIGlzIGRvZGd5IGJlY2F1c2UgaXQgc2hvdWxkIGxpbWl0CisgKiB0aGUgaGlnaGVzdCBETUEtYWJsZSBhZGRyZXNzIGJhc2VkIG9uIHRoZSBhY3R1YWwKKyAqIFBoeXNpY2FsIG1lbW9yeSBhdmFpbGFibGUuIFRoaXMgaXMgYWN0dWFsbHkgcGVyZm9ybWVkCisgKiBhdCBydW4gdGltZSBpbiBkZWZpbmluZyB0aGUgbWVtb3J5IGFsbG93ZWQgdG8gRE1BX1pPTkUuCisgKi8KKyNkZWZpbmUgTUFYX0RNQV9BRERSRVNTCQl+KE5QSFlTX01BU0spCisKKyNkZWZpbmUgRE1BX01PREVfUkVBRAkJMAorI2RlZmluZSBETUFfTU9ERV9XUklURQkJMQorCisjaWZkZWYgQ09ORklHX1BDSQorZXh0ZXJuIGludCBpc2FfZG1hX2JyaWRnZV9idWdneTsKKyNlbHNlCisjZGVmaW5lIGlzYV9kbWFfYnJpZGdlX2J1Z2d5IAkoMCkKKyNlbmRpZgorCisjZW5kaWYgLyogX19BU01fU0g2NF9ETUFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2g2NC9lbGYuaCBiL2luY2x1ZGUvYXNtLXNoNjQvZWxmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk5NDI4NgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoNjQvZWxmLmgKQEAgLTAsMCArMSwxMDcgQEAKKyNpZm5kZWYgX19BU01fU0g2NF9FTEZfSAorI2RlZmluZSBfX0FTTV9TSDY0X0VMRl9ICisKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBpbmNsdWRlL2FzbS1zaDY0L2VsZi5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxICBQYW9sbyBBbGJlcmVsbGkKKyAqCisgKi8KKworLyoKKyAqIEVMRiByZWdpc3RlciBkZWZpbml0aW9ucy4uCisgKi8KKworI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vdXNlci5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGVsZl9ncmVnX3Q7CisKKyNkZWZpbmUgRUxGX05HUkVHIChzaXplb2YgKHN0cnVjdCBwdF9yZWdzKSAvIHNpemVvZihlbGZfZ3JlZ190KSkKK3R5cGVkZWYgZWxmX2dyZWdfdCBlbGZfZ3JlZ3NldF90W0VMRl9OR1JFR107CisKK3R5cGVkZWYgc3RydWN0IHVzZXJfZnB1X3N0cnVjdCBlbGZfZnByZWdzZXRfdDsKKworLyoKKyAqIFRoaXMgaXMgdXNlZCB0byBlbnN1cmUgd2UgZG9uJ3QgbG9hZCBzb21ldGhpbmcgZm9yIHRoZSB3cm9uZyBhcmNoaXRlY3R1cmUuCisgKi8KKyNkZWZpbmUgZWxmX2NoZWNrX2FyY2goeCkgKCAoeCktPmVfbWFjaGluZSA9PSBFTV9TSCApCisKKy8qCisgKiBUaGVzZSBhcmUgdXNlZCB0byBzZXQgcGFyYW1ldGVycyBpbiB0aGUgY29yZSBkdW1wcy4KKyAqLworI2RlZmluZSBFTEZfQ0xBU1MJRUxGQ0xBU1MzMgorI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIEVMRl9EQVRBCUVMRkRBVEEyTFNCCisjZWxzZQorI2RlZmluZSBFTEZfREFUQQlFTEZEQVRBMk1TQgorI2VuZGlmCisjZGVmaW5lIEVMRl9BUkNICUVNX1NICisKKyNkZWZpbmUgVVNFX0VMRl9DT1JFX0RVTVAKKyNkZWZpbmUgRUxGX0VYRUNfUEFHRVNJWkUJNDA5NgorCisvKiBUaGlzIGlzIHRoZSBsb2NhdGlvbiB0aGF0IGFuIEVUX0RZTiBwcm9ncmFtIGlzIGxvYWRlZCBpZiBleGVjJ2VkLiAgVHlwaWNhbAorICAgdXNlIG9mIHRoaXMgaXMgdG8gaW52b2tlICIuL2xkLnNvIHNvbWVwcm9nIiB0byB0ZXN0IG91dCBhIG5ldyB2ZXJzaW9uIG9mCisgICB0aGUgbG9hZGVyLiAgV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBpdCBpcyBvdXQgb2YgdGhlIHdheSBvZiB0aGUgcHJvZ3JhbQorICAgdGhhdCBpdCB3aWxsICJleGVjIiwgYW5kIHRoYXQgdGhlcmUgaXMgc3VmZmljaWVudCByb29tIGZvciB0aGUgYnJrLiAgKi8KKworI2RlZmluZSBFTEZfRVRfRFlOX0JBU0UgICAgICAgICAoMiAqIFRBU0tfU0laRSAvIDMpCisKKyNkZWZpbmUJUl9TSF9ESVIzMgkJMQorI2RlZmluZQlSX1NIX1JFTDMyCQkyCisjZGVmaW5lCVJfU0hfSU1NX0xPVzE2CQkyNDYKKyNkZWZpbmUJUl9TSF9JTU1fTE9XMTZfUENSRUwJMjQ3CisjZGVmaW5lCVJfU0hfSU1NX01FRExPVzE2CTI0OAorI2RlZmluZQlSX1NIX0lNTV9NRURMT1cxNl9QQ1JFTAkyNDkKKworI2RlZmluZSBFTEZfQ09SRV9DT1BZX1JFR1MoX2Rlc3QsX3JlZ3MpCQkJCVwKKwltZW1jcHkoKGNoYXIgKikgJl9kZXN0LCAoY2hhciAqKSBfcmVncywJCQlcCisJICAgICAgIHNpemVvZihzdHJ1Y3QgcHRfcmVncykpOworCisvKiBUaGlzIHlpZWxkcyBhIG1hc2sgdGhhdCB1c2VyIHByb2dyYW1zIGNhbiB1c2UgdG8gZmlndXJlIG91dCB3aGF0CisgICBpbnN0cnVjdGlvbiBzZXQgdGhpcyBDUFUgc3VwcG9ydHMuICBUaGlzIGNvdWxkIGJlIGRvbmUgaW4gdXNlciBzcGFjZSwKKyAgIGJ1dCBpdCdzIG5vdCBlYXN5LCBhbmQgd2UndmUgYWxyZWFkeSBkb25lIGl0IGhlcmUuICAqLworCisjZGVmaW5lIEVMRl9IV0NBUAkoMCkKKworLyogVGhpcyB5aWVsZHMgYSBzdHJpbmcgdGhhdCBsZC5zbyB3aWxsIHVzZSB0byBsb2FkIGltcGxlbWVudGF0aW9uCisgICBzcGVjaWZpYyBsaWJyYXJpZXMgZm9yIG9wdGltaXphdGlvbi4gIFRoaXMgaXMgbW9yZSBzcGVjaWZpYyBpbgorICAgaW50ZW50IHRoYW4gcG9raW5nIGF0IHVuYW1lIG9yIC9wcm9jL2NwdWluZm8uCisKKyAgIEZvciB0aGUgbW9tZW50LCB3ZSBoYXZlIG9ubHkgb3B0aW1pemF0aW9ucyBmb3IgdGhlIEludGVsIGdlbmVyYXRpb25zLAorICAgYnV0IHRoYXQgY291bGQgY2hhbmdlLi4uICovCisKKyNkZWZpbmUgRUxGX1BMQVRGT1JNICAoTlVMTCkKKworI2RlZmluZSBFTEZfUExBVF9JTklUKF9yLCBsb2FkX2FkZHIpIFwKKyAgZG8geyBfci0+cmVnc1swXT0wOyBfci0+cmVnc1sxXT0wOyBfci0+cmVnc1syXT0wOyBfci0+cmVnc1szXT0wOyBcCisgICAgICAgX3ItPnJlZ3NbNF09MDsgX3ItPnJlZ3NbNV09MDsgX3ItPnJlZ3NbNl09MDsgX3ItPnJlZ3NbN109MDsgXAorICAgICAgIF9yLT5yZWdzWzhdPTA7IF9yLT5yZWdzWzldPTA7IF9yLT5yZWdzWzEwXT0wOyBfci0+cmVnc1sxMV09MDsgXAorICAgICAgIF9yLT5yZWdzWzEyXT0wOyBfci0+cmVnc1sxM109MDsgX3ItPnJlZ3NbMTRdPTA7IF9yLT5yZWdzWzE1XT0wOyBcCisgICAgICAgX3ItPnJlZ3NbMTZdPTA7IF9yLT5yZWdzWzE3XT0wOyBfci0+cmVnc1sxOF09MDsgX3ItPnJlZ3NbMTldPTA7IFwKKyAgICAgICBfci0+cmVnc1syMF09MDsgX3ItPnJlZ3NbMjFdPTA7IF9yLT5yZWdzWzIyXT0wOyBfci0+cmVnc1syM109MDsgXAorICAgICAgIF9yLT5yZWdzWzI0XT0wOyBfci0+cmVnc1syNV09MDsgX3ItPnJlZ3NbMjZdPTA7IF9yLT5yZWdzWzI3XT0wOyBcCisgICAgICAgX3ItPnJlZ3NbMjhdPTA7IF9yLT5yZWdzWzI5XT0wOyBfci0+cmVnc1szMF09MDsgX3ItPnJlZ3NbMzFdPTA7IFwKKyAgICAgICBfci0+cmVnc1szMl09MDsgX3ItPnJlZ3NbMzNdPTA7IF9yLT5yZWdzWzM0XT0wOyBfci0+cmVnc1szNV09MDsgXAorICAgICAgIF9yLT5yZWdzWzM2XT0wOyBfci0+cmVnc1szN109MDsgX3ItPnJlZ3NbMzhdPTA7IF9yLT5yZWdzWzM5XT0wOyBcCisgICAgICAgX3ItPnJlZ3NbNDBdPTA7IF9yLT5yZWdzWzQxXT0wOyBfci0+cmVnc1s0Ml09MDsgX3ItPnJlZ3NbNDNdPTA7IFwKKyAgICAgICBfci0+cmVnc1s0NF09MDsgX3ItPnJlZ3NbNDVdPTA7IF9yLT5yZWdzWzQ2XT0wOyBfci0+cmVnc1s0N109MDsgXAorICAgICAgIF9yLT5yZWdzWzQ4XT0wOyBfci0+cmVnc1s0OV09MDsgX3ItPnJlZ3NbNTBdPTA7IF9yLT5yZWdzWzUxXT0wOyBcCisgICAgICAgX3ItPnJlZ3NbNTJdPTA7IF9yLT5yZWdzWzUzXT0wOyBfci0+cmVnc1s1NF09MDsgX3ItPnJlZ3NbNTVdPTA7IFwKKyAgICAgICBfci0+cmVnc1s1Nl09MDsgX3ItPnJlZ3NbNTddPTA7IF9yLT5yZWdzWzU4XT0wOyBfci0+cmVnc1s1OV09MDsgXAorICAgICAgIF9yLT5yZWdzWzYwXT0wOyBfci0+cmVnc1s2MV09MDsgX3ItPnJlZ3NbNjJdPTA7IFwKKyAgICAgICBfci0+dHJlZ3NbMF09MDsgX3ItPnRyZWdzWzFdPTA7IF9yLT50cmVnc1syXT0wOyBfci0+dHJlZ3NbM109MDsgXAorICAgICAgIF9yLT50cmVnc1s0XT0wOyBfci0+dHJlZ3NbNV09MDsgX3ItPnRyZWdzWzZdPTA7IF9yLT50cmVnc1s3XT0wOyBcCisgICAgICAgX3ItPnNyID0gU1JfRkQgfCBTUl9NTVU7IH0gd2hpbGUgKDApCisKKyNpZmRlZiBfX0tFUk5FTF9fCisjZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCwgaWJjczIpIHNldF9wZXJzb25hbGl0eShQRVJfTElOVVhfMzJCSVQpCisjZW5kaWYKKworI2VuZGlmIC8qIF9fQVNNX1NINjRfRUxGX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoNjQvZXJybm8uaCBiL2luY2x1ZGUvYXNtLXNoNjQvZXJybm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2I0NmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2g2NC9lcnJuby5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfX0FTTV9TSDY0X0VSUk5PX0gKKyNkZWZpbmUgX19BU01fU0g2NF9FUlJOT19ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9lcnJuby5oPgorCisjZW5kaWYgLyogX19BU01fU0g2NF9FUlJOT19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaDY0L2ZjbnRsLmggYi9pbmNsdWRlL2FzbS1zaDY0L2ZjbnRsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZjYzM2YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoNjQvZmNudGwuaApAQCAtMCwwICsxLDcgQEAKKyNpZm5kZWYgX19BU01fU0g2NF9GQ05UTF9ICisjZGVmaW5lIF9fQVNNX1NINjRfRkNOVExfSAorCisjaW5jbHVkZSA8YXNtLXNoL2ZjbnRsLmg+CisKKyNlbmRpZiAvKiBfX0FTTV9TSDY0X0ZDTlRMX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2g2NC9oYXJkaXJxLmggYi9pbmNsdWRlL2FzbS1zaDY0L2hhcmRpcnEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDIzMzBlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2g2NC9oYXJkaXJxLmgKQEAgLTAsMCArMSwxOSBAQAorI2lmbmRlZiBfX0FTTV9TSDY0X0hBUkRJUlFfSAorI2RlZmluZSBfX0FTTV9TSDY0X0hBUkRJUlFfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorCisvKiBlbnRyeS5TIGlzIHNlbnNpdGl2ZSB0byB0aGUgb2Zmc2V0cyBvZiB0aGVzZSBmaWVsZHMgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQgX19zb2Z0aXJxX3BlbmRpbmc7Cit9IF9fX19jYWNoZWxpbmVfYWxpZ25lZCBpcnFfY3B1c3RhdF90OworCisjaW5jbHVkZSA8bGludXgvaXJxX2NwdXN0YXQuaD4JLyogU3RhbmRhcmQgbWFwcGluZ3MgZm9yIGlycV9jcHVzdGF0X3QgYWJvdmUgKi8KKworLyogYXJjaC9zaDY0L2tlcm5lbC9pcnEuYyAqLworZXh0ZXJuIHZvaWQgYWNrX2JhZF9pcnEodW5zaWduZWQgaW50IGlycSk7CisKKyNlbmRpZiAvKiBfX0FTTV9TSDY0X0hBUkRJUlFfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaDY0L2hhcmR3YXJlLmggYi9pbmNsdWRlL2FzbS1zaDY0L2hhcmR3YXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTMxYzFhZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoNjQvaGFyZHdhcmUuaApAQCAtMCwwICsxLDIyIEBACisjaWZuZGVmIF9fQVNNX1NINjRfSEFSRFdBUkVfSAorI2RlZmluZSBfX0FTTV9TSDY0X0hBUkRXQVJFX0gKKworLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIGluY2x1ZGUvYXNtLXNoNjQvaGFyZHdhcmUuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMiBTdHVhcnQgTWVuZWZ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgUGF1bCBNdW5kdAorICoKKyAqIERlZml0aW9ucyBvZiB0aGUgbG9jYXRpb25zIG9mIHJlZ2lzdGVycyBpbiB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZS4KKyAqLworCisjZGVmaW5lCVBIWVNfUEVSSVBIRVJBTF9CTE9DSwkweDA5MDAwMDAwCisjZGVmaW5lIFBIWVNfRE1BQ19CTE9DSwkJMHgwZTAwMDAwMAorI2RlZmluZSBQSFlTX1BDSV9CTE9DSwkJMHg2MDAwMDAwMAorI2RlZmluZSBQSFlTX0VNSV9CTE9DSwkJMHhmZjAwMDAwMAorCisjZW5kaWYgLyogX19BU01fU0g2NF9IQVJEV0FSRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaDY0L2hkcmVnLmggYi9pbmNsdWRlL2FzbS1zaDY0L2hkcmVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJkOTgzNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoNjQvaGRyZWcuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19BU01fU0g2NF9IRFJFR19ICisjZGVmaW5lIF9fQVNNX1NINjRfSERSRUdfSAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvaGRyZWcuaD4KKworI2VuZGlmIC8qIF9fQVNNX1NINjRfSERSRUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2g2NC9od19pcnEuaCBiL2luY2x1ZGUvYXNtLXNoNjQvaHdfaXJxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU3MThkMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoNjQvaHdfaXJxLmgKQEAgLTAsMCArMSwxNiBAQAorI2lmbmRlZiBfX0FTTV9TSDY0X0hXX0lSUV9ICisjZGVmaW5lIF9fQVNNX1NINjRfSFdfSVJRX0gKKworLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIGluY2x1ZGUvYXNtLXNoNjQvaHdfaXJxLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEgIFBhb2xvIEFsYmVyZWxsaQorICoKKyAqLworc3RhdGljIF9faW5saW5lX18gdm9pZCBod19yZXNlbmRfaXJxKHN0cnVjdCBod19pbnRlcnJ1cHRfdHlwZSAqaCwgdW5zaWduZWQgaW50IGkpIHsgLyogTm90aGluZyB0byBkbyAqLyB9CisKKyNlbmRpZiAvKiBfX0FTTV9TSDY0X0hXX0lSUV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaDY0L2lkZS5oIGIvaW5jbHVkZS9hc20tc2g2NC9pZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmQ1MTRkYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoNjQvaWRlLmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1zaDY0L2lkZS5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NC0xOTk2ICBMaW51cyBUb3J2YWxkcyAmIGF1dGhvcnMKKyAqCisgKiAgc2g2NCB2ZXJzaW9uIGJ5IFJpY2hhcmQgQ3Vybm93ICYgUGF1bCBNdW5kdAorICovCisKKy8qCisgKiAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBzaDY0IGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBJREUgY29kZS4KKyAqLworCisjaWZuZGVmIF9fQVNNX1NINjRfSURFX0gKKyNkZWZpbmUgX19BU01fU0g2NF9JREVfSAorCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpZm5kZWYgTUFYX0hXSUZTCisjZGVmaW5lIE1BWF9IV0lGUwlDT05GSUdfSURFX01BWF9IV0lGUworI2VuZGlmCisKKy8qIFdpdGhvdXQgdGhpcywgdGhlIGluaXRpYWxpc2F0aW9uIG9mIFBDSSBJREUgY2FyZHMgZW5kIHVwIGNhbGxpbmcKKyAqIGlkZV9pbml0X2h3aWZfcG9ydHMsIHdoaWNoIHdvbid0IHdvcmsuICovCisjaWZkZWYgQ09ORklHX0JMS19ERVZfSURFUENJCisjZGVmaW5lIElERV9BUkNIX09CU09MRVRFX0lOSVQgMQorI2RlZmluZSBpZGVfZGVmYXVsdF9pb19jdGwoYmFzZSkJKDApCisjZW5kaWYKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2lkZV9pb3BzLmg+CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfX0FTTV9TSDY0X0lERV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaDY0L2lvLmggYi9pbmNsdWRlL2FzbS1zaDY0L2lvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZhZmFhNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoNjQvaW8uaApAQCAtMCwwICsxLDI1MCBAQAorI2lmbmRlZiBfX0FTTV9TSDY0X0lPX0gKKyNkZWZpbmUgX19BU01fU0g2NF9JT19ICisKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBpbmNsdWRlL2FzbS1zaDY0L2lvLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEgIFBhb2xvIEFsYmVyZWxsaQorICogQ29weXJpZ2h0IChDKSAyMDAzICBQYXVsIE11bmR0CisgKgorICovCisKKy8qCisgKiBDb252ZW50aW9uOgorICogICAgcmVhZHtiLHcsbH0vd3JpdGV7Yix3LGx9IGFyZSBmb3IgUENJLAorICogICAgd2hpbGUgaW57Yix3LGx9L291dHtiLHcsbH0gYXJlIGZvciBJU0EKKyAqIFRoZXNlIG1heSAod2lsbCkgYmUgcGxhdGZvcm0gc3BlY2lmaWMgZnVuY3Rpb24uCisgKgorICogSW4gYWRkaXRpb24sIHdlIGhhdmUKKyAqICAgY3RybF9pbntiLHcsbH0vY3RybF9vdXR7Yix3LGx9IGZvciBTdXBlckggc3BlY2lmaWMgSS9PLgorICogd2hpY2ggYXJlIHByb2Nlc3NvciBzcGVjaWZpYy4gQWRkcmVzcyBzaG91bGQgYmUgdGhlIHJlc3VsdCBvZgorICogb25jaGlwX3JlbWFwKCk7CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvaW9tYXAuaD4KKworI2RlZmluZSB2aXJ0X3RvX2J1cyB2aXJ0X3RvX3BoeXMKKyNkZWZpbmUgYnVzX3RvX3ZpcnQgcGh5c190b192aXJ0CisjZGVmaW5lIHBhZ2VfdG9fYnVzIHBhZ2VfdG9fcGh5cworCisvKgorICogTm90aGluZyBvdmVybHkgc3BlY2lhbCBoZXJlLi4gaW5zdGVhZCBvZiBkb2luZyB0aGUgc2FtZSB0aGluZworICogb3ZlciBhbmQgb3ZlciBhZ2Fpbiwgd2UganVzdCBkZWZpbmUgYSBzZXQgb2Ygc2g2NF9pbi9vdXQgZnVuY3Rpb25zCisgKiB3aXRoIGFuIGltcGxpY2l0IHNpemUuIFRoZSB0cmFkaXRpb25hbCByZWFke2IsdyxsfS93cml0ZXtiLHcsbH0KKyAqIG1lc3MgaXMgd3JhcHBlZCB0byB0aGlzLCBhcyBhcmUgdGhlIFNILXNwZWNpZmljIGN0cmxfaW4vb3V0IHJvdXRpbmVzLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgc2g2NF9pbjgoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCXJldHVybiAqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgX19mb3JjZSAqKWFkZHI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgc2g2NF9pbjE2KGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlyZXR1cm4gKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBfX2ZvcmNlICopYWRkcjsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2g2NF9pbjMyKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlyZXR1cm4gKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgX19mb3JjZSAqKWFkZHI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIHNoNjRfaW42NChjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJcmV0dXJuICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyBsb25nIF9fZm9yY2UgKilhZGRyOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2g2NF9vdXQ4KHVuc2lnbmVkIGNoYXIgYiwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCSoodm9sYXRpbGUgdW5zaWduZWQgY2hhciBfX2ZvcmNlICopYWRkciA9IGI7CisJd21iKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzaDY0X291dDE2KHVuc2lnbmVkIHNob3J0IGIsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwkqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IF9fZm9yY2UgKilhZGRyID0gYjsKKwl3bWIoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNoNjRfb3V0MzIodW5zaWduZWQgaW50IGIsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwkqKHZvbGF0aWxlIHVuc2lnbmVkIGludCBfX2ZvcmNlICopYWRkciA9IGI7CisJd21iKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzaDY0X291dDY0KHVuc2lnbmVkIGxvbmcgbG9uZyBiLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGxvbmcgX19mb3JjZSAqKWFkZHIgPSBiOworCXdtYigpOworfQorCisjZGVmaW5lIHJlYWRiKGFkZHIpCQlzaDY0X2luOChhZGRyKQorI2RlZmluZSByZWFkdyhhZGRyKQkJc2g2NF9pbjE2KGFkZHIpCisjZGVmaW5lIHJlYWRsKGFkZHIpCQlzaDY0X2luMzIoYWRkcikKKyNkZWZpbmUgcmVhZGJfcmVsYXhlZChhZGRyKQlzaDY0X2luOChhZGRyKQorI2RlZmluZSByZWFkd19yZWxheGVkKGFkZHIpCXNoNjRfaW4xNihhZGRyKQorI2RlZmluZSByZWFkbF9yZWxheGVkKGFkZHIpCXNoNjRfaW4zMihhZGRyKQorCisjZGVmaW5lIHdyaXRlYihiLCBhZGRyKQkJc2g2NF9vdXQ4KGIsIGFkZHIpCisjZGVmaW5lIHdyaXRldyhiLCBhZGRyKQkJc2g2NF9vdXQxNihiLCBhZGRyKQorI2RlZmluZSB3cml0ZWwoYiwgYWRkcikJCXNoNjRfb3V0MzIoYiwgYWRkcikKKworI2RlZmluZSBjdHJsX2luYihhZGRyKQkJc2g2NF9pbjgoaW9wb3J0X21hcChhZGRyLCAxKSkKKyNkZWZpbmUgY3RybF9pbncoYWRkcikJCXNoNjRfaW4xNihpb3BvcnRfbWFwKGFkZHIsIDIpKQorI2RlZmluZSBjdHJsX2lubChhZGRyKQkJc2g2NF9pbjMyKGlvcG9ydF9tYXAoYWRkciwgNCkpCisKKyNkZWZpbmUgY3RybF9vdXRiKGIsIGFkZHIpCXNoNjRfb3V0OChiLCBpb3BvcnRfbWFwKGFkZHIsIDEpKQorI2RlZmluZSBjdHJsX291dHcoYiwgYWRkcikJc2g2NF9vdXQxNihiLCBpb3BvcnRfbWFwKGFkZHIsIDIpKQorI2RlZmluZSBjdHJsX291dGwoYiwgYWRkcikJc2g2NF9vdXQzMihiLCBpb3BvcnRfbWFwKGFkZHIsIDQpKQorCisjZGVmaW5lIGlvcmVhZDgoYWRkcikJCXNoNjRfaW44KGFkZHIpCisjZGVmaW5lIGlvcmVhZDE2KGFkZHIpCQlzaDY0X2luMTYoYWRkcikKKyNkZWZpbmUgaW9yZWFkMzIoYWRkcikJCXNoNjRfaW4zMihhZGRyKQorI2RlZmluZSBpb3dyaXRlOChiLCBhZGRyKQlzaDY0X291dDgoYiwgYWRkcikKKyNkZWZpbmUgaW93cml0ZTE2KGIsIGFkZHIpCXNoNjRfb3V0MTYoYiwgYWRkcikKKyNkZWZpbmUgaW93cml0ZTMyKGIsIGFkZHIpCXNoNjRfb3V0MzIoYiwgYWRkcikKKworI2RlZmluZSBpbmIoYWRkcikJCWN0cmxfaW5iKGFkZHIpCisjZGVmaW5lIGludyhhZGRyKQkJY3RybF9pbncoYWRkcikKKyNkZWZpbmUgaW5sKGFkZHIpCQljdHJsX2lubChhZGRyKQorI2RlZmluZSBvdXRiKGIsIGFkZHIpCQljdHJsX291dGIoYiwgYWRkcikKKyNkZWZpbmUgb3V0dyhiLCBhZGRyKQkJY3RybF9vdXR3KGIsIGFkZHIpCisjZGVmaW5lIG91dGwoYiwgYWRkcikJCWN0cmxfb3V0bChiLCBhZGRyKQorCit2b2lkIG91dHN3KHVuc2lnbmVkIGxvbmcgcG9ydCwgY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCk7Cit2b2lkIGluc3codW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKK3ZvaWQgb3V0c2wodW5zaWduZWQgbG9uZyBwb3J0LCBjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKK3ZvaWQgaW5zbCh1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpOworCit2b2lkIG1lbWNweV90b2lvKHZvaWQgX19pb21lbSAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIGxvbmcgY291bnQpOwordm9pZCBtZW1jcHlfZnJvbWlvKHZvaWQgKnRvLCB2b2lkIF9faW9tZW0gKmZyb20sIGxvbmcgY291bnQpOworCisjZGVmaW5lIG1taW93YigpCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpZmRlZiBDT05GSUdfU0hfQ0FZTUFOCitleHRlcm4gdW5zaWduZWQgbG9uZyBzbXNjX3N1cGVyaW9fdmlydDsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19QQ0kKK2V4dGVybiB1bnNpZ25lZCBsb25nIHBjaWlvX3ZpcnQ7CisjZW5kaWYKKworI2RlZmluZSBJT19TUEFDRV9MSU1JVCAweGZmZmZmZmZmCisKKy8qCisgKiBDaGFuZ2UgdmlydHVhbCBhZGRyZXNzZXMgdG8gcGh5c2ljYWwgYWRkcmVzc2VzIGFuZCB2di4KKyAqIFRoZXNlIGFyZSB0cml2aWFsIG9uIHRoZSAxOjEgTGludXgvU3VwZXJIIG1hcHBpbmcKKyAqLworZXh0ZXJuIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyB2aXJ0X3RvX3BoeXModm9sYXRpbGUgdm9pZCAqIGFkZHJlc3MpCit7CisJcmV0dXJuIF9fcGEoYWRkcmVzcyk7Cit9CisKK2V4dGVybiBfX2lubGluZV9fIHZvaWQgKiBwaHlzX3RvX3ZpcnQodW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCXJldHVybiBfX3ZhKGFkZHJlc3MpOworfQorCitleHRlcm4gdm9pZCAqIF9faW9yZW1hcCh1bnNpZ25lZCBsb25nIHBoeXNfYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJdW5zaWduZWQgbG9uZyBmbGFncyk7CisKK2V4dGVybiBfX2lubGluZV9fIHZvaWQgKiBpb3JlbWFwKHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJcmV0dXJuIF9faW9yZW1hcChwaHlzX2FkZHIsIHNpemUsIDEpOworfQorCitleHRlcm4gX19pbmxpbmVfXyB2b2lkICogaW9yZW1hcF9ub2NhY2hlICh1bnNpZ25lZCBsb25nIHBoeXNfYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXJldHVybiBfX2lvcmVtYXAocGh5c19hZGRyLCBzaXplLCAwKTsKK30KKworZXh0ZXJuIHZvaWQgaW91bm1hcCh2b2lkICphZGRyKTsKKwordW5zaWduZWQgbG9uZyBvbmNoaXBfcmVtYXAodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIGNvbnN0IGNoYXIqIG5hbWUpOworZXh0ZXJuIHZvaWQgb25jaGlwX3VubWFwKHVuc2lnbmVkIGxvbmcgdmFkZHIpOworCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgY2hlY2tfc2lnbmF0dXJlKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqaW9fYWRkciwKKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNpZ25hdHVyZSwgaW50IGxlbmd0aCkKK3sKKwlpbnQgcmV0dmFsID0gMDsKKwlkbyB7CisJCWlmIChyZWFkYihpb19hZGRyKSAhPSAqc2lnbmF0dXJlKQorCQkJZ290byBvdXQ7CisJCWlvX2FkZHIrKzsKKwkJc2lnbmF0dXJlKys7CisJCWxlbmd0aC0tOworCX0gd2hpbGUgKGxlbmd0aCk7CisJcmV0dmFsID0gMTsKK291dDoKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKgorICogVGhlIGNhY2hlcyBvbiBzb21lIGFyY2hpdGVjdHVyZXMgYXJlbid0IGRtYS1jb2hlcmVudCBhbmQgaGF2ZSBuZWVkIHRvCisgKiBoYW5kbGUgdGhpcyBpbiBzb2Z0d2FyZS4gIFRoZXJlIGFyZSB0aHJlZSB0eXBlcyBvZiBvcGVyYXRpb25zIHRoYXQKKyAqIGNhbiBiZSBhcHBsaWVkIHRvIGRtYSBidWZmZXJzLgorICoKKyAqICAtIGRtYV9jYWNoZV93YmFja19pbnYoc3RhcnQsIHNpemUpIG1ha2VzIGNhY2hlcyBhbmQgUkFNIGNvaGVyZW50IGJ5CisgKiAgICB3cml0aW5nIHRoZSBjb250ZW50IG9mIHRoZSBjYWNoZXMgYmFjayB0byBtZW1vcnksIGlmIG5lY2Vzc2FyeS4KKyAqICAgIFRoZSBmdW5jdGlvbiBhbHNvIGludmFsaWRhdGVzIHRoZSBhZmZlY3RlZCBwYXJ0IG9mIHRoZSBjYWNoZXMgYXMKKyAqICAgIG5lY2Vzc2FyeSBiZWZvcmUgRE1BIHRyYW5zZmVycyBmcm9tIG91dHNpZGUgdG8gbWVtb3J5LgorICogIC0gZG1hX2NhY2hlX2ludihzdGFydCwgc2l6ZSkgaW52YWxpZGF0ZXMgdGhlIGFmZmVjdGVkIHBhcnRzIG9mIHRoZQorICogICAgY2FjaGVzLiAgRGlydHkgbGluZXMgb2YgdGhlIGNhY2hlcyBtYXkgYmUgd3JpdHRlbiBiYWNrIG9yIHNpbXBseQorICogICAgYmUgZGlzY2FyZGVkLiAgVGhpcyBvcGVyYXRpb24gaXMgbmVjZXNzYXJ5IGJlZm9yZSBkbWEgb3BlcmF0aW9ucworICogICAgdG8gdGhlIG1lbW9yeS4KKyAqICAtIGRtYV9jYWNoZV93YmFjayhzdGFydCwgc2l6ZSkgd3JpdGVzIGJhY2sgYW55IGRpcnR5IGxpbmVzIGJ1dCBkb2VzCisgKiAgICBub3QgaW52YWxpZGF0ZSB0aGUgY2FjaGUuICBUaGlzIGNhbiBiZSB1c2VkIGJlZm9yZSBETUEgcmVhZHMgZnJvbQorICogICAgbWVtb3J5LAorICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgZG1hX2NhY2hlX3diYWNrX2ludiAodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXVuc2lnbmVkIGxvbmcgcyA9IHN0YXJ0ICYgTDFfQ0FDSEVfQUxJR05fTUFTSzsKKwl1bnNpZ25lZCBsb25nIGUgPSAoc3RhcnQgKyBzaXplKSAmIEwxX0NBQ0hFX0FMSUdOX01BU0s7CisKKwlmb3IgKDsgcyA8PSBlOyBzICs9IEwxX0NBQ0hFX0JZVEVTKQorCQlhc20gdm9sYXRpbGUgKCJvY2JwCSUwLCAwIiA6IDogInIiIChzKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgZG1hX2NhY2hlX2ludiAodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCS8vIE5vdGUgdGhhdCBjYWxsZXIgaGFzIHRvIGJlIGNhcmVmdWwgd2l0aCBvdmVyemVhbG91cworCS8vIGludmFsaWRhdGlvbiBzaG91bGQgdGhlcmUgYmUgcGFydGlhbCBjYWNoZSBsaW5lcyBhdCB0aGUgZXh0cmVtaXRpZXMKKwkvLyBvZiB0aGUgc3BlY2lmaWVkIHJhbmdlCisJdW5zaWduZWQgbG9uZyBzID0gc3RhcnQgJiBMMV9DQUNIRV9BTElHTl9NQVNLOworCXVuc2lnbmVkIGxvbmcgZSA9IChzdGFydCArIHNpemUpICYgTDFfQ0FDSEVfQUxJR05fTUFTSzsKKworCWZvciAoOyBzIDw9IGU7IHMgKz0gTDFfQ0FDSEVfQllURVMpCisJCWFzbSB2b2xhdGlsZSAoIm9jYmkJJTAsIDAiIDogOiAiciIgKHMpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBkbWFfY2FjaGVfd2JhY2sgKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIHMgPSBzdGFydCAmIEwxX0NBQ0hFX0FMSUdOX01BU0s7CisJdW5zaWduZWQgbG9uZyBlID0gKHN0YXJ0ICsgc2l6ZSkgJiBMMV9DQUNIRV9BTElHTl9NQVNLOworCisJZm9yICg7IHMgPD0gZTsgcyArPSBMMV9DQUNIRV9CWVRFUykKKwkJYXNtIHZvbGF0aWxlICgib2Nid2IJJTAsIDAiIDogOiAiciIgKHMpKTsKK30KKworLyoKKyAqIENvbnZlcnQgYSBwaHlzaWNhbCBwb2ludGVyIHRvIGEgdmlydHVhbCBrZXJuZWwgcG9pbnRlciBmb3IgL2Rldi9tZW0KKyAqIGFjY2VzcworICovCisjZGVmaW5lIHhsYXRlX2Rldl9tZW1fcHRyKHApCV9fdmEocCkKKworLyoKKyAqIENvbnZlcnQgYSB2aXJ0dWFsIGNhY2hlZCBwb2ludGVyIHRvIGFuIHVuY2FjaGVkIHBvaW50ZXIKKyAqLworI2RlZmluZSB4bGF0ZV9kZXZfa21lbV9wdHIocCkJcAorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9fQVNNX1NINjRfSU9fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2g2NC9pb2N0bC5oIGIvaW5jbHVkZS9hc20tc2g2NC9pb2N0bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwODlhNmYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaDY0L2lvY3RsLmgKQEAgLTAsMCArMSw4MyBAQAorI2lmbmRlZiBfX0FTTV9TSDY0X0lPQ1RMX0gKKyNkZWZpbmUgX19BU01fU0g2NF9JT0NUTF9ICisKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBpbmNsdWRlL2FzbS1zaDY0L2lvY3RsLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEgIFBhb2xvIEFsYmVyZWxsaQorICoKKyAqIGxpbnV4L2lvY3RsLmggZm9yIExpbnV4IGJ5IEguSC4gQmVyZ21hbi4KKyAqCisgKi8KKworLyogaW9jdGwgY29tbWFuZCBlbmNvZGluZzogMzIgYml0cyB0b3RhbCwgY29tbWFuZCBpbiBsb3dlciAxNiBiaXRzLAorICogc2l6ZSBvZiB0aGUgcGFyYW1ldGVyIHN0cnVjdHVyZSBpbiB0aGUgbG93ZXIgMTQgYml0cyBvZiB0aGUKKyAqIHVwcGVyIDE2IGJpdHMuCisgKiBFbmNvZGluZyB0aGUgc2l6ZSBvZiB0aGUgcGFyYW1ldGVyIHN0cnVjdHVyZSBpbiB0aGUgaW9jdGwgcmVxdWVzdAorICogaXMgdXNlZnVsIGZvciBjYXRjaGluZyBwcm9ncmFtcyBjb21waWxlZCB3aXRoIG9sZCB2ZXJzaW9ucworICogYW5kIHRvIGF2b2lkIG92ZXJ3cml0aW5nIHVzZXIgc3BhY2Ugb3V0c2lkZSB0aGUgdXNlciBidWZmZXIgYXJlYS4KKyAqIFRoZSBoaWdoZXN0IDIgYml0cyBhcmUgcmVzZXJ2ZWQgZm9yIGluZGljYXRpbmcgdGhlIGBgYWNjZXNzIG1vZGUnJy4KKyAqIE5PVEU6IFRoaXMgbGltaXRzIHRoZSBtYXggcGFyYW1ldGVyIHNpemUgdG8gMTZrQiAtMSAhCisgKi8KKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgaXMgZm9yIGNvbXBhdGliaWxpdHkgYWNyb3NzIHRoZSB2YXJpb3VzIExpbnV4CisgKiBwbGF0Zm9ybXMuICBUaGUgaTM4NiBpb2N0bCBudW1iZXJpbmcgc2NoZW1lIGRvZXNuJ3QgcmVhbGx5IGVuZm9yY2UKKyAqIGEgdHlwZSBmaWVsZC4gIERlIGZhY3RvLCBob3dldmVyLCB0aGUgdG9wIDggYml0cyBvZiB0aGUgbG93ZXIgMTYKKyAqIGJpdHMgYXJlIGluZGVlZCB1c2VkIGFzIGEgdHlwZSBmaWVsZCwgc28gd2UgbWlnaHQganVzdCBhcyB3ZWxsIG1ha2UKKyAqIHRoaXMgZXhwbGljaXQgaGVyZS4gIFBsZWFzZSBiZSBzdXJlIHRvIHVzZSB0aGUgZGVjb2RpbmcgbWFjcm9zCisgKiBiZWxvdyBmcm9tIG5vdyBvbi4KKyAqLworI2RlZmluZSBfSU9DX05SQklUUwk4CisjZGVmaW5lIF9JT0NfVFlQRUJJVFMJOAorI2RlZmluZSBfSU9DX1NJWkVCSVRTCTE0CisjZGVmaW5lIF9JT0NfRElSQklUUwkyCisKKyNkZWZpbmUgX0lPQ19OUk1BU0sJKCgxIDw8IF9JT0NfTlJCSVRTKS0xKQorI2RlZmluZSBfSU9DX1RZUEVNQVNLCSgoMSA8PCBfSU9DX1RZUEVCSVRTKS0xKQorI2RlZmluZSBfSU9DX1NJWkVNQVNLCSgoMSA8PCBfSU9DX1NJWkVCSVRTKS0xKQorI2RlZmluZSBfSU9DX0RJUk1BU0sJKCgxIDw8IF9JT0NfRElSQklUUyktMSkKKworI2RlZmluZSBfSU9DX05SU0hJRlQJMAorI2RlZmluZSBfSU9DX1RZUEVTSElGVAkoX0lPQ19OUlNISUZUK19JT0NfTlJCSVRTKQorI2RlZmluZSBfSU9DX1NJWkVTSElGVAkoX0lPQ19UWVBFU0hJRlQrX0lPQ19UWVBFQklUUykKKyNkZWZpbmUgX0lPQ19ESVJTSElGVAkoX0lPQ19TSVpFU0hJRlQrX0lPQ19TSVpFQklUUykKKworLyoKKyAqIERpcmVjdGlvbiBiaXRzLgorICovCisjZGVmaW5lIF9JT0NfTk9ORQkwVQorI2RlZmluZSBfSU9DX1dSSVRFCTFVCisjZGVmaW5lIF9JT0NfUkVBRAkyVQorCisjZGVmaW5lIF9JT0MoZGlyLHR5cGUsbnIsc2l6ZSkgXAorCSgoKGRpcikgIDw8IF9JT0NfRElSU0hJRlQpIHwgXAorCSAoKHR5cGUpIDw8IF9JT0NfVFlQRVNISUZUKSB8IFwKKwkgKChucikgICA8PCBfSU9DX05SU0hJRlQpIHwgXAorCSAoKHNpemUpIDw8IF9JT0NfU0laRVNISUZUKSkKKworLyogdXNlZCB0byBjcmVhdGUgbnVtYmVycyAqLworI2RlZmluZSBfSU8odHlwZSxucikJCV9JT0MoX0lPQ19OT05FLCh0eXBlKSwobnIpLDApCisjZGVmaW5lIF9JT1IodHlwZSxucixzaXplKQlfSU9DKF9JT0NfUkVBRCwodHlwZSksKG5yKSxzaXplb2Yoc2l6ZSkpCisjZGVmaW5lIF9JT1codHlwZSxucixzaXplKQlfSU9DKF9JT0NfV1JJVEUsKHR5cGUpLChuciksc2l6ZW9mKHNpemUpKQorI2RlZmluZSBfSU9XUih0eXBlLG5yLHNpemUpCV9JT0MoX0lPQ19SRUFEfF9JT0NfV1JJVEUsKHR5cGUpLChuciksc2l6ZW9mKHNpemUpKQorCisvKiB1c2VkIHRvIGRlY29kZSBpb2N0bCBudW1iZXJzLi4gKi8KKyNkZWZpbmUgX0lPQ19ESVIobnIpCQkoKChucikgPj4gX0lPQ19ESVJTSElGVCkgJiBfSU9DX0RJUk1BU0spCisjZGVmaW5lIF9JT0NfVFlQRShucikJCSgoKG5yKSA+PiBfSU9DX1RZUEVTSElGVCkgJiBfSU9DX1RZUEVNQVNLKQorI2RlZmluZSBfSU9DX05SKG5yKQkJKCgobnIpID4+IF9JT0NfTlJTSElGVCkgJiBfSU9DX05STUFTSykKKyNkZWZpbmUgX0lPQ19TSVpFKG5yKQkJKCgobnIpID4+IF9JT0NfU0laRVNISUZUKSAmIF9JT0NfU0laRU1BU0spCisKKy8qIC4uLmFuZCBmb3IgdGhlIGRyaXZlcnMvc291bmQgZmlsZXMuLi4gKi8KKworI2RlZmluZSBJT0NfSU4JCShfSU9DX1dSSVRFIDw8IF9JT0NfRElSU0hJRlQpCisjZGVmaW5lIElPQ19PVVQJCShfSU9DX1JFQUQgPDwgX0lPQ19ESVJTSElGVCkKKyNkZWZpbmUgSU9DX0lOT1VUCSgoX0lPQ19XUklURXxfSU9DX1JFQUQpIDw8IF9JT0NfRElSU0hJRlQpCisjZGVmaW5lIElPQ1NJWkVfTUFTSwkoX0lPQ19TSVpFTUFTSyA8PCBfSU9DX1NJWkVTSElGVCkKKyNkZWZpbmUgSU9DU0laRV9TSElGVAkoX0lPQ19TSVpFU0hJRlQpCisKKyNlbmRpZiAvKiBfX0FTTV9TSDY0X0lPQ1RMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoNjQvaW9jdGxzLmggYi9pbmNsdWRlL2FzbS1zaDY0L2lvY3Rscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4ZjNjMWYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaDY0L2lvY3Rscy5oCkBAIC0wLDAgKzEsMTE2IEBACisjaWZuZGVmIF9fQVNNX1NINjRfSU9DVExTX0gKKyNkZWZpbmUgX19BU01fU0g2NF9JT0NUTFNfSAorCisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogaW5jbHVkZS9hc20tc2g2NC9pb2N0bHMuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSAgUGFvbG8gQWxiZXJlbGxpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgIFJpY2hhcmQgQ3Vybm93CisgKgorICovCisKKyNpbmNsdWRlIDxhc20vaW9jdGwuaD4KKworI2RlZmluZSBGSU9DTEVYCQkweDY2MDEJCS8qIF9JTygnZicsIDEpICovCisjZGVmaW5lIEZJT05DTEVYCTB4NjYwMgkJLyogX0lPKCdmJywgMikgKi8KKyNkZWZpbmUgRklPQVNZTkMJMHg0MDA0NjY3ZAkvKiBfSU9XKCdmJywgMTI1LCBpbnQpICovCisjZGVmaW5lIEZJT05CSU8JCTB4NDAwNDY2N2UJLyogX0lPVygnZicsIDEyNiwgaW50KSAqLworI2RlZmluZSBGSU9OUkVBRAkweDgwMDQ2NjdmCS8qIF9JT1coJ2YnLCAxMjcsIGludCkgKi8KKyNkZWZpbmUgVElPQ0lOUQkJRklPTlJFQUQKKyNkZWZpbmUgRklPUVNJWkUJMHg4MDA4NjY4MAkvKiBfSU9SKCdmJywgMTI4LCBsb2ZmX3QpICovCisKKyNkZWZpbmUgVENHRVRTCQkweDU0MDEKKyNkZWZpbmUgVENTRVRTCQkweDU0MDIKKyNkZWZpbmUgVENTRVRTVwkJMHg1NDAzCisjZGVmaW5lIFRDU0VUU0YJCTB4NTQwNAorCisjZGVmaW5lIFRDR0VUQQkJMHg4MDEyNzQxNwkvKiBfSU9SKCd0JywgMjMsIHN0cnVjdCB0ZXJtaW8pICovCisjZGVmaW5lIFRDU0VUQQkJMHg0MDEyNzQxOAkvKiBfSU9XKCd0JywgMjQsIHN0cnVjdCB0ZXJtaW8pICovCisjZGVmaW5lIFRDU0VUQVcJCTB4NDAxMjc0MTkJLyogX0lPVygndCcsIDI1LCBzdHJ1Y3QgdGVybWlvKSAqLworI2RlZmluZSBUQ1NFVEFGCQkweDQwMTI3NDFjCS8qIF9JT1coJ3QnLCAyOCwgc3RydWN0IHRlcm1pbykgKi8KKworI2RlZmluZSBUQ1NCUksJCTB4NzQxZAkJLyogX0lPKCd0JywgMjkpICovCisjZGVmaW5lIFRDWE9OQwkJMHg3NDFlCQkvKiBfSU8oJ3QnLCAzMCkgKi8KKyNkZWZpbmUgVENGTFNICQkweDc0MWYJCS8qIF9JTygndCcsIDMxKSAqLworCisjZGVmaW5lIFRJT0NTV0lOU1oJMHg0MDA4NzQ2NwkvKiBfSU9XKCd0JywgMTAzLCBzdHJ1Y3Qgd2luc2l6ZSkgKi8KKyNkZWZpbmUgVElPQ0dXSU5TWgkweDgwMDg3NDY4CS8qIF9JT1IoJ3QnLCAxMDQsIHN0cnVjdCB3aW5zaXplKSAqLworI2RlZmluZQlUSU9DU1RBUlQJMHg3NDZlCQkvKiBfSU8oJ3QnLCAxMTApICBzdGFydCBvdXRwdXQsIGxpa2UgXlEgKi8KKyNkZWZpbmUJVElPQ1NUT1AJMHg3NDZmCQkvKiBfSU8oJ3QnLCAxMTEpICBzdG9wIG91dHB1dCwgbGlrZSBeUyAqLworI2RlZmluZSBUSU9DT1VUUSAgICAgICAgMHg4MDA0NzQ3MwkvKiBfSU9SKCd0JywgMTE1LCBpbnQpIG91dHB1dCBxdWV1ZSBzaXplICovCisKKyNkZWZpbmUgVElPQ1NQR1JQCTB4NDAwNDc0NzYJLyogX0lPVygndCcsIDExOCwgaW50KSAqLworI2RlZmluZSBUSU9DR1BHUlAJMHg4MDA0NzQ3NwkvKiBfSU9SKCd0JywgMTE5LCBpbnQpICovCisKKyNkZWZpbmUgVElPQ0VYQ0wJMHg1NDBjCQkvKiBfSU8oJ1QnLCAxMikgKi8KKyNkZWZpbmUgVElPQ05YQ0wJMHg1NDBkCQkvKiBfSU8oJ1QnLCAxMykgKi8KKyNkZWZpbmUgVElPQ1NDVFRZCTB4NTQwZQkJLyogX0lPKCdUJywgMTQpICovCisKKyNkZWZpbmUgVElPQ1NUSQkJMHg0MDAxNTQxMgkvKiBfSU9XKCdUJywgMTgsIGNoYXIpIDB4NTQxMiAqLworI2RlZmluZSBUSU9DTUdFVAkweDgwMDQ1NDE1CS8qIF9JT1IoJ1QnLCAyMSwgdW5zaWduZWQgaW50KSAweDU0MTUgKi8KKyNkZWZpbmUgVElPQ01CSVMJMHg0MDA0NTQxNgkvKiBfSU9XKCdUJywgMjIsIHVuc2lnbmVkIGludCkgMHg1NDE2ICovCisjZGVmaW5lIFRJT0NNQklDCTB4NDAwNDU0MTcJLyogX0lPVygnVCcsIDIzLCB1bnNpZ25lZCBpbnQpIDB4NTQxNyAqLworI2RlZmluZSBUSU9DTVNFVAkweDQwMDQ1NDE4CS8qIF9JT1coJ1QnLCAyNCwgdW5zaWduZWQgaW50KSAweDU0MTggKi8KKworI2RlZmluZSBUSU9DTV9MRQkweDAwMQorI2RlZmluZSBUSU9DTV9EVFIJMHgwMDIKKyNkZWZpbmUgVElPQ01fUlRTCTB4MDA0CisjZGVmaW5lIFRJT0NNX1NUCTB4MDA4CisjZGVmaW5lIFRJT0NNX1NSCTB4MDEwCisjZGVmaW5lIFRJT0NNX0NUUwkweDAyMAorI2RlZmluZSBUSU9DTV9DQVIJMHgwNDAKKyNkZWZpbmUgVElPQ01fUk5HCTB4MDgwCisjZGVmaW5lIFRJT0NNX0RTUgkweDEwMAorI2RlZmluZSBUSU9DTV9DRAlUSU9DTV9DQVIKKyNkZWZpbmUgVElPQ01fUkkJVElPQ01fUk5HCisKKyNkZWZpbmUgVElPQ0dTT0ZUQ0FSCTB4ODAwNDU0MTkJLyogX0lPUignVCcsIDI1LCB1bnNpZ25lZCBpbnQpIDB4NTQxOSAqLworI2RlZmluZSBUSU9DU1NPRlRDQVIJMHg0MDA0NTQxYQkvKiBfSU9XKCdUJywgMjYsIHVuc2lnbmVkIGludCkgMHg1NDFBICovCisjZGVmaW5lIFRJT0NMSU5VWAkweDQwMDQ1NDFjCS8qIF9JT1coJ1QnLCAyOCwgY2hhcikgMHg1NDFDICovCisjZGVmaW5lIFRJT0NDT05TCTB4NTQxZAkJLyogX0lPKCdUJywgMjkpICovCisjZGVmaW5lIFRJT0NHU0VSSUFMCTB4ODAzYzU0MWUJLyogX0lPUignVCcsIDMwLCBzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCkgMHg1NDFFICovCisjZGVmaW5lIFRJT0NTU0VSSUFMCTB4NDAzYzU0MWYJLyogX0lPVygnVCcsIDMxLCBzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCkgMHg1NDFGICovCisjZGVmaW5lIFRJT0NQS1QJCTB4NDAwNDU0MjAJLyogX0lPVygnVCcsIDMyLCBpbnQpIDB4NTQyMCAqLworCisjZGVmaW5lIFRJT0NQS1RfREFUQQkJIDAKKyNkZWZpbmUgVElPQ1BLVF9GTFVTSFJFQUQJIDEKKyNkZWZpbmUgVElPQ1BLVF9GTFVTSFdSSVRFCSAyCisjZGVmaW5lIFRJT0NQS1RfU1RPUAkJIDQKKyNkZWZpbmUgVElPQ1BLVF9TVEFSVAkJIDgKKyNkZWZpbmUgVElPQ1BLVF9OT1NUT1AJCTE2CisjZGVmaW5lIFRJT0NQS1RfRE9TVE9QCQkzMgorCisKKyNkZWZpbmUgVElPQ05PVFRZCTB4NTQyMgkJLyogX0lPKCdUJywgMzQpICovCisjZGVmaW5lIFRJT0NTRVRECTB4NDAwNDU0MjMJLyogX0lPVygnVCcsIDM1LCBpbnQpIDB4NTQyMyAqLworI2RlZmluZSBUSU9DR0VURAkweDgwMDQ1NDI0CS8qIF9JT1IoJ1QnLCAzNiwgaW50KSAweDU0MjQgKi8KKyNkZWZpbmUgVENTQlJLUAkJMHg0MDA0NTQyNAkvKiBfSU9XKCdUJywgMzcsIGludCkgMHg1NDI1ICovCS8qIE5lZWRlZCBmb3IgUE9TSVggdGNzZW5kYnJlYWsoKSAqLworI2RlZmluZSBUSU9DVFRZR1NUUlVDVAkweDhjMTA1NDI2CS8qIF9JT1IoJ1QnLCAzOCwgc3RydWN0IHR0eV9zdHJ1Y3QpIDB4NTQyNiAqLyAvKiBGb3IgZGVidWdnaW5nIG9ubHkgKi8KKyNkZWZpbmUgVElPQ1NCUksJMHg1NDI3CQkvKiBfSU8oJ1QnLCAzOSkgKi8gLyogQlNEIGNvbXBhdGliaWxpdHkgKi8KKyNkZWZpbmUgVElPQ0NCUksJMHg1NDI4CQkvKiBfSU8oJ1QnLCA0MCkgKi8gLyogQlNEIGNvbXBhdGliaWxpdHkgKi8KKyNkZWZpbmUgVElPQ0dTSUQJMHg4MDA0NTQyOQkvKiBfSU9SKCdUJywgNDEsIHBpZF90KSAweDU0MjkgKi8gLyogUmV0dXJuIHRoZSBzZXNzaW9uIElEIG9mIEZEICovCisjZGVmaW5lIFRJT0NHUFROCTB4ODAwNDU0MzAJLyogX0lPUignVCcsMHgzMCwgdW5zaWduZWQgaW50KSAweDU0MzAgR2V0IFB0eSBOdW1iZXIgKG9mIHB0eS1tdXggZGV2aWNlKSAqLworI2RlZmluZSBUSU9DU1BUTENLCTB4NDAwNDU0MzEJLyogX0lPVygnVCcsMHgzMSwgaW50KSBMb2NrL3VubG9jayBQdHkgKi8KKworI2RlZmluZSBUSU9DU0VSQ09ORklHCTB4NTQ1MwkJLyogX0lPKCdUJywgODMpICovCisjZGVmaW5lIFRJT0NTRVJHV0lMRAkweDgwMDQ1NDU0CS8qIF9JT1IoJ1QnLCA4NCwgIGludCkgMHg1NDU0ICovCisjZGVmaW5lIFRJT0NTRVJTV0lMRAkweDQwMDQ1NDU1CS8qIF9JT1coJ1QnLCA4NSwgIGludCkgMHg1NDU1ICovCisjZGVmaW5lIFRJT0NHTENLVFJNSU9TCTB4NTQ1NgorI2RlZmluZSBUSU9DU0xDS1RSTUlPUwkweDU0NTcKKyNkZWZpbmUgVElPQ1NFUkdTVFJVQ1QJMHg4MGQ4NTQ1OAkvKiBfSU9SKCdUJywgODgsIHN0cnVjdCBhc3luY19zdHJ1Y3QpIDB4NTQ1OCAqLyAvKiBGb3IgZGVidWdnaW5nIG9ubHkgKi8KKyNkZWZpbmUgVElPQ1NFUkdFVExTUiAgIDB4ODAwNDU0NTkJLyogX0lPUignVCcsIDg5LCB1bnNpZ25lZCBpbnQpIDB4NTQ1OSAqLyAvKiBHZXQgbGluZSBzdGF0dXMgcmVnaXN0ZXIgKi8KKworLyogaW9jdGwgKGZkLCBUSU9DU0VSR0VUTFNSLCAmcmVzdWx0KSB3aGVyZSByZXN1bHQgbWF5IGJlIGFzIGJlbG93ICovCisjZGVmaW5lIFRJT0NTRVJfVEVNVCAgICAweDAxCS8qIFRyYW5zbWl0dGVyIHBoeXNpY2FsbHkgZW1wdHkgKi8KKworI2RlZmluZSBUSU9DU0VSR0VUTVVMVEkgMHg4MGE4NTQ1YQkvKiBfSU9SKCdUJywgOTAsIHN0cnVjdCBzZXJpYWxfbXVsdGlwb3J0X3N0cnVjdCkgMHg1NDVBICovIC8qIEdldCBtdWx0aXBvcnQgY29uZmlnICAqLworI2RlZmluZSBUSU9DU0VSU0VUTVVMVEkgMHg0MGE4NTQ1YgkvKiBfSU9XKCdUJywgOTEsIHN0cnVjdCBzZXJpYWxfbXVsdGlwb3J0X3N0cnVjdCkgMHg1NDVCICovIC8qIFNldCBtdWx0aXBvcnQgY29uZmlnICovCisKKyNkZWZpbmUgVElPQ01JV0FJVAkweDU0NWMJCS8qIF9JTygnVCcsIDkyKSB3YWl0IGZvciBhIGNoYW5nZSBvbiBzZXJpYWwgaW5wdXQgbGluZShzKSAqLworI2RlZmluZSBUSU9DR0lDT1VOVAkweDgwMmM1NDVkCS8qIF9JT1IoJ1QnLCA5Mywgc3RydWN0IGFzeW5jX2ljb3VudCkgMHg1NDVEICovCS8qIHJlYWQgc2VyaWFsIHBvcnQgaW5saW5lIGludGVycnVwdCBjb3VudHMgKi8KKworI2VuZGlmIC8qIF9fQVNNX1NINjRfSU9DVExTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoNjQvaXBjLmggYi9pbmNsdWRlL2FzbS1zaDY0L2lwYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0NmUzZDkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaDY0L2lwYy5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pcGMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoNjQvaXBjYnVmLmggYi9pbmNsdWRlL2FzbS1zaDY0L2lwY2J1Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0NDFlMzUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaDY0L2lwY2J1Zi5oCkBAIC0wLDAgKzEsNDAgQEAKKyNpZm5kZWYgX19BU01fU0g2NF9JUENCVUZfSF9fCisjZGVmaW5lIF9fQVNNX1NINjRfSVBDQlVGX0hfXworCisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogaW5jbHVkZS9hc20tc2g2NC9pcGNidWYuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSAgUGFvbG8gQWxiZXJlbGxpCisgKgorICovCisKKy8qCisgKiBUaGUgaXBjNjRfcGVybSBzdHJ1Y3R1cmUgZm9yIGkzODYgYXJjaGl0ZWN0dXJlLgorICogTm90ZSBleHRyYSBwYWRkaW5nIGJlY2F1c2UgdGhpcyBzdHJ1Y3R1cmUgaXMgcGFzc2VkIGJhY2sgYW5kIGZvcnRoCisgKiBiZXR3ZWVuIGtlcm5lbCBhbmQgdXNlciBzcGFjZS4KKyAqCisgKiBQYWQgc3BhY2UgaXMgbGVmdCBmb3I6CisgKiAtIDMyLWJpdCBtb2RlX3QgYW5kIHNlcQorICogLSAyIG1pc2NlbGxhbmVvdXMgMzItYml0IHZhbHVlcworICovCisKK3N0cnVjdCBpcGM2NF9wZXJtCit7CisJX19rZXJuZWxfa2V5X3QJCWtleTsKKwlfX2tlcm5lbF91aWQzMl90CXVpZDsKKwlfX2tlcm5lbF9naWQzMl90CWdpZDsKKwlfX2tlcm5lbF91aWQzMl90CWN1aWQ7CisJX19rZXJuZWxfZ2lkMzJfdAljZ2lkOworCV9fa2VybmVsX21vZGVfdAkJbW9kZTsKKwl1bnNpZ25lZCBzaG9ydAkJX19wYWQxOworCXVuc2lnbmVkIHNob3J0CQlzZXE7CisJdW5zaWduZWQgc2hvcnQJCV9fcGFkMjsKKwl1bnNpZ25lZCBsb25nCQlfX3VudXNlZDE7CisJdW5zaWduZWQgbG9uZwkJX191bnVzZWQyOworfTsKKworI2VuZGlmIC8qIF9fQVNNX1NINjRfSVBDQlVGX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2g2NC9pcnEuaCBiL2luY2x1ZGUvYXNtLXNoNjQvaXJxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjgxNWI0MwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoNjQvaXJxLmgKQEAgLTAsMCArMSwxNDkgQEAKKyNpZm5kZWYgX19BU01fU0g2NF9JUlFfSAorI2RlZmluZSBfX0FTTV9TSDY0X0lSUV9ICisKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBpbmNsdWRlL2FzbS1zaDY0L2lycS5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxICBQYW9sbyBBbGJlcmVsbGkKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisvKgorICogRW5jb2RlZCBJUlFzIGFyZSBub3QgY29uc2lkZXJlZCB3b3J0aCB0byBiZSBzdXBwb3J0ZWQuCisgKiBNYWluIHJlYXNvbiBpcyB0aGF0IHRoZXJlJ3Mgbm8gcGVyLWVuY29kZWQtaW50ZXJydXB0CisgKiBlbmFibGUvZGlzYWJsZSBtZWNoYW5pc20gKGFzIHRoZXJlIHdhcyBpbiBTSDMvNCkuCisgKiBBbiBhbGwgZW5hYmxlZC9hbGwgZGlzYWJsZWQgaXMgd29ydGggb25seSBpZiB0aGVyZSdzCisgKiBhIGNhc2NhZGVkIElDIHRvIGRpc2FibGUvZW5hYmxlL2FjayBvbi4gVW50aWwgc3VjaAorICogSUMgaXMgYXZhaWxhYmxlIHRoZXJlJ3Mgbm8gc3VjaCBzdXBwb3J0LgorICoKKyAqIFByZXN1bWFibHkgRW5jb2RlZCBJUlFzIG1heSB1c2UgZXh0cmEgSVJRcyBiZXlvbmQgNjQsCisgKiBiZWxvdy4gU29tZSBsb2dpYyBtdXN0IGJlIGFkZGVkIHRvIGNvcGUgd2l0aCBJUlFfSVJMPworICogaW4gYW4gZXhjbHVzaXZlIHdheS4KKyAqCisgKiBQcmlvcml0aWVzIGFyZSBzZXQgYXQgUGxhdGZvcm0gbGV2ZWwsIHdoZW4gSVJRX0lSTDAtMworICogYXJlIHNldCB0byAwIEVuY29kaW5nIGlzIGFsbG93ZWQuIE90aGVyd2lzZSBpdCdzIG5vdAorICogYWxsb3dlZC4KKyAqLworCisvKiBJbmRlcGVuZGVudCBJUlFzICovCisjZGVmaW5lIElSUV9JUkwwCTAKKyNkZWZpbmUgSVJRX0lSTDEJMQorI2RlZmluZSBJUlFfSVJMMgkyCisjZGVmaW5lIElSUV9JUkwzCTMKKworI2RlZmluZSBJUlFfSU5UQQk0CisjZGVmaW5lIElSUV9JTlRCCTUKKyNkZWZpbmUgSVJRX0lOVEMJNgorI2RlZmluZSBJUlFfSU5URAk3CisKKyNkZWZpbmUgSVJRX1NFUlIJMTIKKyNkZWZpbmUgSVJRX0VSUgkJMTMKKyNkZWZpbmUgSVJRX1BXUjMJMTQKKyNkZWZpbmUgSVJRX1BXUjIJMTUKKyNkZWZpbmUgSVJRX1BXUjEJMTYKKyNkZWZpbmUgSVJRX1BXUjAJMTcKKworI2RlZmluZSBJUlFfRE1URTAJMTgKKyNkZWZpbmUgSVJRX0RNVEUxCTE5CisjZGVmaW5lIElSUV9ETVRFMgkyMAorI2RlZmluZSBJUlFfRE1URTMJMjEKKyNkZWZpbmUgSVJRX0RBRVJSCTIyCisKKyNkZWZpbmUgSVJRX1RVTkkwCTMyCisjZGVmaW5lIElSUV9UVU5JMQkzMworI2RlZmluZSBJUlFfVFVOSTIJMzQKKyNkZWZpbmUgSVJRX1RJQ1BJMgkzNQorCisjZGVmaW5lIElSUV9BVEkJCTM2CisjZGVmaW5lIElSUV9QUkkJCTM3CisjZGVmaW5lIElSUV9DVUkJCTM4CisKKyNkZWZpbmUgSVJRX0VSSQkJMzkKKyNkZWZpbmUgSVJRX1JYSQkJNDAKKyNkZWZpbmUgSVJRX0JSSQkJNDEKKyNkZWZpbmUgSVJRX1RYSQkJNDIKKworI2RlZmluZSBJUlFfSVRJCQk2MworCisjZGVmaW5lIE5SX0lOVENfSVJRUwk2NAorCisjaWZkZWYgQ09ORklHX1NIX0NBWU1BTgorI2RlZmluZSBOUl9FWFRfSVJRUyAgICAgMzIKKyNkZWZpbmUgU1RBUlRfRVhUX0lSUVMgIDY0CisKKy8qIFBDSSBidXMgMiB1c2VzIGVuY29kZWQgZXh0ZXJuYWwgaW50ZXJydXB0cyBvbiB0aGUgQ2F5bWFuIGJvYXJkICovCisjZGVmaW5lIElSUV9QMklOVEEgICAgICAoU1RBUlRfRVhUX0lSUVMgKyAoMyo4KSArIDApCisjZGVmaW5lIElSUV9QMklOVEIgICAgICAoU1RBUlRfRVhUX0lSUVMgKyAoMyo4KSArIDEpCisjZGVmaW5lIElSUV9QMklOVEMgICAgICAoU1RBUlRfRVhUX0lSUVMgKyAoMyo4KSArIDIpCisjZGVmaW5lIElSUV9QMklOVEQgICAgICAoU1RBUlRfRVhUX0lSUVMgKyAoMyo4KSArIDMpCisKKyNkZWZpbmUgSTgwNDJfS0JEX0lSUQkoU1RBUlRfRVhUX0lSUVMgKyAyKQorI2RlZmluZSBJODA0Ml9BVVhfSVJRCShTVEFSVF9FWFRfSVJRUyArIDYpCisKKyNkZWZpbmUgSVJRX0NGQ0FSRAkoU1RBUlRfRVhUX0lSUVMgKyA3KQorI2RlZmluZSBJUlFfUENNQ0lBCSgwKQorCisjZWxzZQorI2RlZmluZSBOUl9FWFRfSVJRUwkwCisjZW5kaWYKKworI2RlZmluZSBOUl9JUlFTCQkoTlJfSU5UQ19JUlFTK05SX0VYVF9JUlFTKQorCisKKy8qIERlZmF1bHQgSVJRcywgZml4ZWQgKi8KKyNkZWZpbmUgVElNRVJfSVJRCUlSUV9UVU5JMAorI2RlZmluZSBSVENfSVJRCQlJUlFfQ1VJCisKKy8qIERlZmF1bHQgUHJpb3JpdGllcywgUGxhdGZvcm0gbWF5IGNob29zZSBkaWZmZXJlbnRseSAqLworI2RlZmluZQlOT19QUklPUklUWQkwCS8qIERpc2FibGVkICovCisjZGVmaW5lIFRJTUVSX1BSSU9SSVRZCTIKKyNkZWZpbmUgUlRDX1BSSU9SSVRZCVRJTUVSX1BSSU9SSVRZCisjZGVmaW5lIFNDSUZfUFJJT1JJVFkJMworI2RlZmluZSBJTlREX1BSSU9SSVRZCTMKKyNkZWZpbmUJSVJMM19QUklPUklUWQk0CisjZGVmaW5lIElOVENfUFJJT1JJVFkJNgorI2RlZmluZQlJUkwyX1BSSU9SSVRZCTcKKyNkZWZpbmUgSU5UQl9QUklPUklUWQk5CisjZGVmaW5lCUlSTDFfUFJJT1JJVFkJMTAKKyNkZWZpbmUgSU5UQV9QUklPUklUWQkxMgorI2RlZmluZQlJUkwwX1BSSU9SSVRZCTEzCisjZGVmaW5lIFRPUF9QUklPUklUWQkxNQorCitleHRlcm4gdm9pZCBkaXNhYmxlX2lycSh1bnNpZ25lZCBpbnQpOworZXh0ZXJuIHZvaWQgZGlzYWJsZV9pcnFfbm9zeW5jKHVuc2lnbmVkIGludCk7CitleHRlcm4gdm9pZCBlbmFibGVfaXJxKHVuc2lnbmVkIGludCk7CisKK2V4dGVybiBpbnQgaW50Y19ldnRfdG9faXJxWygweEUyMC8weDIwKSsxXTsKK2ludCBpbnRjX2lycV9kZXNjcmliZShjaGFyKiBwLCBpbnQgaXJxKTsKKworI2RlZmluZSBpcnFfY2Fub25pY2FsaXplKGlycSkJKGlycSkKKworI2lmZGVmIENPTkZJR19TSF9DQVlNQU4KK2ludCBjYXltYW5faXJxX2RlbXV4KGludCBldnQpOworaW50IGNheW1hbl9pcnFfZGVzY3JpYmUoY2hhciogcCwgaW50IGlycSk7CisjZGVmaW5lIGlycV9kZW11eCh4KSBjYXltYW5faXJxX2RlbXV4KHgpCisjZGVmaW5lIGlycV9kZXNjcmliZShwLCB4KSBjYXltYW5faXJxX2Rlc2NyaWJlKHAsIHgpCisjZWxzZQorI2RlZmluZSBpcnFfZGVtdXgoeCkgKGludGNfZXZ0X3RvX2lycVt4XSkKKyNkZWZpbmUgaXJxX2Rlc2NyaWJlKHAsIHgpIGludGNfaXJxX2Rlc2NyaWJlKHAsIHgpCisjZW5kaWYKKworLyoKKyAqIEZ1bmN0aW9uIGZvciAib24gY2hpcCBzdXBwb3J0IG1vZHVsZXMiLgorICovCisKKy8qCisgKiBTSC01IHN1cHBvcnRzIFByaW9yaXR5IGJhc2VkIGludGVycnVwdHMgb25seS4KKyAqIEludGVycnVwdCBwcmlvcml0aWVzIGFyZSBkZWZpbmVkIGF0IHBsYXRmb3JtIGxldmVsLgorICovCisjZGVmaW5lIHNldF9pcHJfZGF0YShhLCBiLCBjLCBkKQorI2RlZmluZSBtYWtlX2lwcl9pcnEoYSkKKyNkZWZpbmUgbWFrZV9pbWFza19pcnEoYSkKKworI2VuZGlmIC8qIF9fQVNNX1NINjRfSVJRX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoNjQva2V5Ym9hcmQuaCBiL2luY2x1ZGUvYXNtLXNoNjQva2V5Ym9hcmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzNlMmJiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2g2NC9rZXlib2FyZC5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tc2htZWRpYS9rZXlib2FyZC5oCisgKgorICogQ29waWVkIGZyb20gaTM4NiB2ZXJzaW9uOgorICogICAgQ3JlYXRlZCAzIE5vdiAxOTk2IGJ5IEdlZXJ0IFV5dHRlcmhvZXZlbgorICovCisKKy8qCisgKiAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBpMzg2IGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBrZXlib2FyZCBkZWZpbml0aW9ucworICovCisKKyNpZm5kZWYgX19BU01fU0g2NF9LRVlCT0FSRF9ICisjZGVmaW5lIF9fQVNNX1NINjRfS0VZQk9BUkRfSAorCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNpZmRlZiBDT05GSUdfU0hfQ0FZTUFOCisjZGVmaW5lIEtFWUJPQVJEX0lSUQkJCShTVEFSVF9FWFRfSVJRUyArIDIpIC8qIFNNU0MgU3VwZXJJTyBJUlEgMSAqLworI2VuZGlmCisjZGVmaW5lIERJU0FCTEVfS0JEX0RVUklOR19JTlRFUlJVUFRTCTAKKworZXh0ZXJuIGludCBwY2tiZF9zZXRrZXljb2RlKHVuc2lnbmVkIGludCBzY2FuY29kZSwgdW5zaWduZWQgaW50IGtleWNvZGUpOworZXh0ZXJuIGludCBwY2tiZF9nZXRrZXljb2RlKHVuc2lnbmVkIGludCBzY2FuY29kZSk7CitleHRlcm4gaW50IHBja2JkX3RyYW5zbGF0ZSh1bnNpZ25lZCBjaGFyIHNjYW5jb2RlLCB1bnNpZ25lZCBjaGFyICprZXljb2RlLAorCQkJICAgY2hhciByYXdfbW9kZSk7CitleHRlcm4gY2hhciBwY2tiZF91bmV4cGVjdGVkX3VwKHVuc2lnbmVkIGNoYXIga2V5Y29kZSk7CitleHRlcm4gdm9pZCBwY2tiZF9sZWRzKHVuc2lnbmVkIGNoYXIgbGVkcyk7CitleHRlcm4gdm9pZCBwY2tiZF9pbml0X2h3KHZvaWQpOworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgcGNrYmRfc3lzcnFfeGxhdGVbMTI4XTsKKworI2RlZmluZSBrYmRfc2V0a2V5Y29kZQkJcGNrYmRfc2V0a2V5Y29kZQorI2RlZmluZSBrYmRfZ2V0a2V5Y29kZQkJcGNrYmRfZ2V0a2V5Y29kZQorI2RlZmluZSBrYmRfdHJhbnNsYXRlCQlwY2tiZF90cmFuc2xhdGUKKyNkZWZpbmUga2JkX3VuZXhwZWN0ZWRfdXAJcGNrYmRfdW5leHBlY3RlZF91cAorI2RlZmluZSBrYmRfbGVkcwkJcGNrYmRfbGVkcworI2RlZmluZSBrYmRfaW5pdF9odwkJcGNrYmRfaW5pdF9odworI2RlZmluZSBrYmRfc3lzcnFfeGxhdGUJCXBja2JkX3N5c3JxX3hsYXRlCisKKyNkZWZpbmUgU1lTUlFfS0VZIDB4NTQKKworLyogcmVzb3VyY2UgYWxsb2NhdGlvbiAqLworI2RlZmluZSBrYmRfcmVxdWVzdF9yZWdpb24oKQorI2RlZmluZSBrYmRfcmVxdWVzdF9pcnEoaGFuZGxlcikgcmVxdWVzdF9pcnEoS0VZQk9BUkRfSVJRLCBoYW5kbGVyLCAwLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAia2V5Ym9hcmQiLCBOVUxMKQorCisvKiBIb3cgdG8gYWNjZXNzIHRoZSBrZXlib2FyZCBtYWNyb3Mgb24gdGhpcyBwbGF0Zm9ybS4gICovCisjZGVmaW5lIGtiZF9yZWFkX2lucHV0KCkgaW5iKEtCRF9EQVRBX1JFRykKKyNkZWZpbmUga2JkX3JlYWRfc3RhdHVzKCkgaW5iKEtCRF9TVEFUVVNfUkVHKQorI2RlZmluZSBrYmRfd3JpdGVfb3V0cHV0KHZhbCkgb3V0Yih2YWwsIEtCRF9EQVRBX1JFRykKKyNkZWZpbmUga2JkX3dyaXRlX2NvbW1hbmQodmFsKSBvdXRiKHZhbCwgS0JEX0NOVExfUkVHKQorCisvKiBTb21lIHN0b25lYWdlIGhhcmR3YXJlIG5lZWRzIGRlbGF5cyBhZnRlciBzb21lIG9wZXJhdGlvbnMuICAqLworI2RlZmluZSBrYmRfcGF1c2UoKSBkbyB7IH0gd2hpbGUoMCkKKworLyoKKyAqIE1hY2hpbmUgc3BlY2lmaWMgYml0cyBmb3IgdGhlIFBTLzIgZHJpdmVyCisgKi8KKworI2lmZGVmIENPTkZJR19TSF9DQVlNQU4KKyNkZWZpbmUgQVVYX0lSUSAoU1RBUlRfRVhUX0lSUVMgKyA2KSAvKiBTTVNDIFN1cGVySU8gSVJRMTIgKi8KKyNlbmRpZgorCisjZGVmaW5lIGF1eF9yZXF1ZXN0X2lycShoYW5kLCBkZXZfaWQpCQkJCQlcCisJcmVxdWVzdF9pcnEoQVVYX0lSUSwgaGFuZCwgU0FfU0hJUlEsICJQUzIgTW91c2UiLCBkZXZfaWQpCisKKyNkZWZpbmUgYXV4X2ZyZWVfaXJxKGRldl9pZCkgZnJlZV9pcnEoQVVYX0lSUSwgZGV2X2lkKQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9fQVNNX1NINjRfS0VZQk9BUkRfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaDY0L2ttYXBfdHlwZXMuaCBiL2luY2x1ZGUvYXNtLXNoNjQva21hcF90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhZTdjNzUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaDY0L2ttYXBfdHlwZXMuaApAQCAtMCwwICsxLDcgQEAKKyNpZm5kZWYgX19BU01fU0g2NF9LTUFQX1RZUEVTX0gKKyNkZWZpbmUgX19BU01fU0g2NF9LTUFQX1RZUEVTX0gKKworI2luY2x1ZGUgPGFzbS1zaC9rbWFwX3R5cGVzLmg+CisKKyNlbmRpZiAvKiBfX0FTTV9TSDY0X0tNQVBfVFlQRVNfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaDY0L2xpbmthZ2UuaCBiL2luY2x1ZGUvYXNtLXNoNjQvbGlua2FnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkZDBlODQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaDY0L2xpbmthZ2UuaApAQCAtMCwwICsxLDcgQEAKKyNpZm5kZWYgX19BU01fU0g2NF9MSU5LQUdFX0gKKyNkZWZpbmUgX19BU01fU0g2NF9MSU5LQUdFX0gKKworI2luY2x1ZGUgPGFzbS1zaC9saW5rYWdlLmg+CisKKyNlbmRpZiAvKiBfX0FTTV9TSDY0X0xJTktBR0VfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaDY0L2xvY2FsLmggYi9pbmNsdWRlL2FzbS1zaDY0L2xvY2FsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDliZDk1ZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoNjQvbG9jYWwuaApAQCAtMCwwICsxLDcgQEAKKyNpZm5kZWYgX19BU01fU0g2NF9MT0NBTF9ICisjZGVmaW5lIF9fQVNNX1NINjRfTE9DQUxfSAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbG9jYWwuaD4KKworI2VuZGlmIC8qIF9fQVNNX1NINjRfTE9DQUxfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaDY0L21jMTQ2ODE4cnRjLmggYi9pbmNsdWRlL2FzbS1zaDY0L21jMTQ2ODE4cnRjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNkM2FlYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoNjQvbWMxNDY4MThydGMuaApAQCAtMCwwICsxLDcgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1zaDY0L21jMTQ2ODE4cnRjLmgKKyAqCisqLworCisvKiBGb3Igbm93LCBhbiBlbXB0eSBwbGFjZS1ob2xkZXIgdG8gZ2V0IElERSB0byBjb21waWxlLiAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaDY0L21tYW4uaCBiL2luY2x1ZGUvYXNtLXNoNjQvbW1hbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5YmU2ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaDY0L21tYW4uaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19BU01fU0g2NF9NTUFOX0gKKyNkZWZpbmUgX19BU01fU0g2NF9NTUFOX0gKKworI2luY2x1ZGUgPGFzbS1zaC9tbWFuLmg+CisKKyNlbmRpZiAvKiBfX0FTTV9TSDY0X01NQU5fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2g2NC9tbXUuaCBiL2luY2x1ZGUvYXNtLXNoNjQvbW11LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NkMzZkMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoNjQvbW11LmgKQEAgLTAsMCArMSw3IEBACisjaWZuZGVmIF9fTU1VX0gKKyNkZWZpbmUgX19NTVVfSAorCisvKiBEZWZhdWx0ICJ1bnNpZ25lZCBsb25nIiBjb250ZXh0ICovCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbW1fY29udGV4dF90OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoNjQvbW11X2NvbnRleHQuaCBiL2luY2x1ZGUvYXNtLXNoNjQvbW11X2NvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDYyZTE1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2g2NC9tbXVfY29udGV4dC5oCkBAIC0wLDAgKzEsMjA5IEBACisjaWZuZGVmIF9fQVNNX1NINjRfTU1VX0NPTlRFWFRfSAorI2RlZmluZSBfX0FTTV9TSDY0X01NVV9DT05URVhUX0gKKworLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIGluY2x1ZGUvYXNtLXNoNjQvbW11X2NvbnRleHQuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSAgUGFvbG8gQWxiZXJlbGxpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgIFBhdWwgTXVuZHQKKyAqCisgKiBBU0lEIGhhbmRsaW5nIGlkZWEgdGFrZW4gZnJvbSBNSVBTIGltcGxlbWVudGF0aW9uLgorICoKKyAqLworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisvKgorICogQ2FjaGUgb2YgTU1VIGNvbnRleHQgbGFzdCB1c2VkLgorICoKKyAqIFRoZSBNTVUgImNvbnRleHQiIGNvbnNpc3RzIG9mIHR3byB0aGluZ3M6CisgKiAgIChhKSBUTEIgY2FjaGUgdmVyc2lvbiAob3IgY3ljbGUsIHRvcCAyNCBiaXRzIG9mIG1tdV9jb250ZXh0X2NhY2hlKQorICogICAoYikgQVNJRCAoQWRkcmVzcyBTcGFjZSBJRGVudGlmaWVyLCBib3R0b20gOCBiaXRzIG9mIG1tdV9jb250ZXh0X2NhY2hlKQorICovCitleHRlcm4gdW5zaWduZWQgbG9uZyBtbXVfY29udGV4dF9jYWNoZTsKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisKKworLyogQ3VycmVudCBtbSdzIHBnZCAqLworZXh0ZXJuIHBnZF90ICptbXVfcGR0cF9jYWNoZTsKKworI2RlZmluZSBTUl9BU0lEX01BU0sJCTB4ZmZmZmZmZmZmZjAwZmZmZlVMTAorI2RlZmluZSBTUl9BU0lEX1NISUZUCQkxNgorCisjZGVmaW5lIE1NVV9DT05URVhUX0FTSURfTUFTSwkJMHgwMDAwMDBmZgorI2RlZmluZSBNTVVfQ09OVEVYVF9WRVJTSU9OX01BU0sJMHhmZmZmZmYwMAorI2RlZmluZSBNTVVfQ09OVEVYVF9GSVJTVF9WRVJTSU9OCTB4MDAwMDAxMDAKKyNkZWZpbmUgTk9fQ09OVEVYVAkJCTAKKworLyogQVNJRCBpcyA4LWJpdCB2YWx1ZSwgc28gaXQgY2FuJ3QgYmUgMHgxMDAgKi8KKyNkZWZpbmUgTU1VX05PX0FTSUQJCQkweDEwMAorCisKKy8qCisgKiBWaXJ0dWFsIFBhZ2UgTnVtYmVyIG1hc2sKKyAqLworI2RlZmluZSBNTVVfVlBOX01BU0sJMHhmZmZmZjAwMAorCitleHRlcm4gX19pbmxpbmVfXyB2b2lkCitnZXRfbmV3X21tdV9jb250ZXh0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCWV4dGVybiB2b2lkIGZsdXNoX3RsYl9hbGwodm9pZCk7CisJZXh0ZXJuIHZvaWQgZmx1c2hfY2FjaGVfYWxsKHZvaWQpOworCisJdW5zaWduZWQgbG9uZyBtYyA9ICsrbW11X2NvbnRleHRfY2FjaGU7CisKKwlpZiAoIShtYyAmIE1NVV9DT05URVhUX0FTSURfTUFTSykpIHsKKwkJLyogV2UgZXhoYXVzdCBBU0lEIG9mIHRoaXMgdmVyc2lvbi4KKwkJICAgRmx1c2ggYWxsIFRMQiBhbmQgc3RhcnQgbmV3IGN5Y2xlLiAqLworCQlmbHVzaF90bGJfYWxsKCk7CisJCS8qIFdlIGhhdmUgdG8gZmx1c2ggYWxsIGNhY2hlcyBhcyBBU0lEcyBhcmUKKyAgICAgICAgICAgICAgICAgICB1c2VkIGluIGNhY2hlICovCisJCWZsdXNoX2NhY2hlX2FsbCgpOworCQkvKiBGaXggdmVyc2lvbiBpZiBuZWVkZWQuCisJCSAgIE5vdGUgdGhhdCB3ZSBhdm9pZCB2ZXJzaW9uICMwL2FzaWQgIzAgdG8gZGlzdGluZ3VzaCBOT19DT05URVhULiAqLworCQlpZiAoIW1jKQorCQkJbW11X2NvbnRleHRfY2FjaGUgPSBtYyA9IE1NVV9DT05URVhUX0ZJUlNUX1ZFUlNJT047CisJfQorCW1tLT5jb250ZXh0ID0gbWM7Cit9CisKKy8qCisgKiBHZXQgTU1VIGNvbnRleHQgaWYgbmVlZGVkLgorICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkCitnZXRfbW11X2NvbnRleHQoc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJaWYgKG1tKSB7CisJCXVuc2lnbmVkIGxvbmcgbWMgPSBtbXVfY29udGV4dF9jYWNoZTsKKwkJLyogQ2hlY2sgaWYgd2UgaGF2ZSBvbGQgdmVyc2lvbiBvZiBjb250ZXh0LgorCQkgICBJZiBpdCdzIG9sZCwgd2UgbmVlZCB0byBnZXQgbmV3IGNvbnRleHQgd2l0aCBuZXcgdmVyc2lvbi4gKi8KKwkJaWYgKChtbS0+Y29udGV4dCBeIG1jKSAmIE1NVV9DT05URVhUX1ZFUlNJT05fTUFTSykKKwkJCWdldF9uZXdfbW11X2NvbnRleHQobW0pOworCX0KK30KKworLyoKKyAqIEluaXRpYWxpemUgdGhlIGNvbnRleHQgcmVsYXRlZCBpbmZvIGZvciBhIG5ldyBtbV9zdHJ1Y3QKKyAqIGluc3RhbmNlLgorICovCitzdGF0aWMgaW5saW5lIGludCBpbml0X25ld19jb250ZXh0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLAorCQkJCQlzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwltbS0+Y29udGV4dCA9IE5PX0NPTlRFWFQ7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIERlc3Ryb3kgY29udGV4dCByZWxhdGVkIGluZm8gZm9yIGFuIG1tX3N0cnVjdCB0aGF0IGlzIGFib3V0CisgKiB0byBiZSBwdXQgdG8gcmVzdC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGRlc3Ryb3lfY29udGV4dChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlleHRlcm4gdm9pZCBmbHVzaF90bGJfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pOworCisJLyogV2VsbCwgYXQgbGVhc3QgZnJlZSBUTEIgZW50cmllcyAqLworCWZsdXNoX3RsYl9tbShtbSk7Cit9CisKKyNlbmRpZgkvKiBfX0FTU0VNQkxZX18gKi8KKworLyogQ29tbW9uIGRlZmluZXMgKi8KKyNkZWZpbmUgVExCX1NURVAJMHgwMDAwMDAxMAorI2RlZmluZSBUTEJfUFRFSAkweDAwMDAwMDAwCisjZGVmaW5lIFRMQl9QVEVMCTB4MDAwMDAwMDgKKworLyogUFRFSCBkZWZpbmVzICovCisjZGVmaW5lIFBURUhfQVNJRF9TSElGVAkyCisjZGVmaW5lIFBURUhfVkFMSUQJMHgwMDAwMDAwMDAwMDAwMDAxCisjZGVmaW5lIFBURUhfU0hBUkVECTB4MDAwMDAwMDAwMDAwMDAwMgorI2RlZmluZSBQVEVIX01BVENIX0FTSUQJMHgwMDAwMDAwMDAwMDAwM2ZmCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisvKiBUaGlzIGhhcyB0byBiZSBhIGNvbW1vbiBmdW5jdGlvbiBiZWNhdXNlIHRoZSBuZXh0IGxvY2F0aW9uIHRvIGZpbGwKKyAqIGluZm9ybWF0aW9uIGlzIHNoYXJlZC4gKi8KK2V4dGVybiB2b2lkIF9fZG9fdGxiX3JlZmlsbCh1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHVuc2lnbmVkIGxvbmcgbG9uZyBpc190ZXh0X25vdF9kYXRhLCBwdGVfdCAqcHRlKTsKKworLyogUHJvZmlsaW5nIGNvdW50ZXIuICovCisjaWZkZWYgQ09ORklHX1NINjRfUFJPQ19UTEIKK2V4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgY2FsbHNfdG9fZG9fZmFzdF9wYWdlX2ZhdWx0OworI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfYXNpZCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyBzcjsKKworCWFzbSB2b2xhdGlsZSAoImdldGNvbiAgICIgX19TUiAiLCAlMFxuXHQiCisJCSAgICAgIDogIj1yIiAoc3IpKTsKKworCXNyID0gKHNyID4+IFNSX0FTSURfU0hJRlQpICYgTU1VX0NPTlRFWFRfQVNJRF9NQVNLOworCXJldHVybiAodW5zaWduZWQgbG9uZykgc3I7Cit9CisKKy8qIFNldCBBU0lEIGludG8gU1IgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfYXNpZCh1bnNpZ25lZCBsb25nIGFzaWQpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIHNyLCBwYzsKKworCWFzbSB2b2xhdGlsZSAoImdldGNvbgkiIF9fU1IgIiwgJTAiIDogIj1yIiAoc3IpKTsKKworCXNyID0gKHNyICYgU1JfQVNJRF9NQVNLKSB8IChhc2lkIDw8IFNSX0FTSURfU0hJRlQpOworCisJLyoKKwkgKiBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoaXMgZnVuY3Rpb24gbWF5IGJlIGlubGluZWQgYW5kIHNvIHRvIGF2b2lkCisJICogdGhlIGFzc2VtYmxlciByZXBvcnRpbmcgZHVwbGljYXRlIHN5bWJvbHMgd2UgbWFrZSB1c2Ugb2YgdGhlIGdhcyB0cmljaworCSAqIG9mIGdlbmVyYXRpbmcgc3ltYm9scyB1c2luZyBudW1lcmljcyBhbmQgZm9yd2FyZCByZWZlcmVuY2UuCisJICovCisJYXNtIHZvbGF0aWxlICgibW92aQkxLCAlMVxuXHQiCisJCSAgICAgICJzaGxsaQklMSwgMjgsICUxXG5cdCIKKwkJICAgICAgIm9yCSUwLCAlMSwgJTFcblx0IgorCQkgICAgICAicHV0Y29uCSUxLCAiIF9fU1IgIlxuXHQiCisJCSAgICAgICJwdXRjb24JJTAsICIgX19TU1IgIlxuXHQiCisJCSAgICAgICJtb3ZpCTFmLCAlMVxuXHQiCisJCSAgICAgICJvcmkJJTEsIDEgLCAlMVxuXHQiCisJCSAgICAgICJwdXRjb24JJTEsICIgX19TUEMgIlxuXHQiCisJCSAgICAgICJydGVcbiIKKwkJICAgICAgIjE6XG5cdCIKKwkJICAgICAgOiAiPXIiIChzciksICI9ciIgKHBjKSA6ICIwIiAoc3IpKTsKK30KKworLyoKKyAqIEFmdGVyIHdlIGhhdmUgc2V0IGN1cnJlbnQtPm1tIHRvIGEgbmV3IHZhbHVlLCB0aGlzIGFjdGl2YXRlcworICogdGhlIGNvbnRleHQgZm9yIHRoZSBuZXcgbW0gc28gd2Ugc2VlIHRoZSBuZXcgbWFwcGluZ3MuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgYWN0aXZhdGVfY29udGV4dChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlnZXRfbW11X2NvbnRleHQobW0pOworCXNldF9hc2lkKG1tLT5jb250ZXh0ICYgTU1VX0NPTlRFWFRfQVNJRF9NQVNLKTsKK30KKworCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHN3aXRjaF9tbShzdHJ1Y3QgbW1fc3RydWN0ICpwcmV2LAorCQkJCSBzdHJ1Y3QgbW1fc3RydWN0ICpuZXh0LAorCQkJCSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwlpZiAocHJldiAhPSBuZXh0KSB7CisJCW1tdV9wZHRwX2NhY2hlID0gbmV4dC0+cGdkOworCQlhY3RpdmF0ZV9jb250ZXh0KG5leHQpOworCX0KK30KKworI2RlZmluZSBkZWFjdGl2YXRlX21tKHRzayxtbSkJZG8geyB9IHdoaWxlICgwKQorCisjZGVmaW5lIGFjdGl2YXRlX21tKHByZXYsIG5leHQpIFwKKwlzd2l0Y2hfbW0oKHByZXYpLChuZXh0KSxOVUxMKQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2VudGVyX2xhenlfdGxiKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKK30KKworI2VuZGlmCS8qIF9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYgLyogX19BU01fU0g2NF9NTVVfQ09OVEVYVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaDY0L21vZHVsZS5oIGIvaW5jbHVkZS9hc20tc2g2NC9tb2R1bGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzEzNjUwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2g2NC9tb2R1bGUuaApAQCAtMCwwICsxLDIwIEBACisjaWZuZGVmIF9fQVNNX1NINjRfTU9EVUxFX0gKKyNkZWZpbmUgX19BU01fU0g2NF9NT0RVTEVfSAorLyoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgU0ggYXJjaGl0ZWN0dXJlIHNwZWNpZmljIG1vZHVsZSBjb2RlLgorICovCisKK3N0cnVjdCBtb2RfYXJjaF9zcGVjaWZpYyB7CisJLyogZW1wdHkgKi8KK307CisKKyNkZWZpbmUgRWxmX1NoZHIJCUVsZjMyX1NoZHIKKyNkZWZpbmUgRWxmX1N5bQkJCUVsZjMyX1N5bQorI2RlZmluZSBFbGZfRWhkcgkJRWxmMzJfRWhkcgorCisjZGVmaW5lIG1vZHVsZV9tYXAoeCkJCXZtYWxsb2MoeCkKKyNkZWZpbmUgbW9kdWxlX3VubWFwKHgpCQl2ZnJlZSh4KQorI2RlZmluZSBtb2R1bGVfYXJjaF9pbml0KHgpCSgwKQorI2RlZmluZSBhcmNoX2luaXRfbW9kdWxlcyh4KQlkbyB7IH0gd2hpbGUgKDApCisKKyNlbmRpZiAvKiBfX0FTTV9TSDY0X01PRFVMRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaDY0L21zZ2J1Zi5oIGIvaW5jbHVkZS9hc20tc2g2NC9tc2didWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjA0OTRjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2g2NC9tc2didWYuaApAQCAtMCwwICsxLDQyIEBACisjaWZuZGVmIF9fQVNNX1NINjRfTVNHQlVGX0gKKyNkZWZpbmUgX19BU01fU0g2NF9NU0dCVUZfSAorCisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogaW5jbHVkZS9hc20tc2g2NC9tc2didWYuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSAgUGFvbG8gQWxiZXJlbGxpCisgKgorICovCisKKy8qCisgKiBUaGUgbXNxaWQ2NF9kcyBzdHJ1Y3R1cmUgZm9yIGkzODYgYXJjaGl0ZWN0dXJlLgorICogTm90ZSBleHRyYSBwYWRkaW5nIGJlY2F1c2UgdGhpcyBzdHJ1Y3R1cmUgaXMgcGFzc2VkIGJhY2sgYW5kIGZvcnRoCisgKiBiZXR3ZWVuIGtlcm5lbCBhbmQgdXNlciBzcGFjZS4KKyAqCisgKiBQYWQgc3BhY2UgaXMgbGVmdCBmb3I6CisgKiAtIDY0LWJpdCB0aW1lX3QgdG8gc29sdmUgeTIwMzggcHJvYmxlbQorICogLSAyIG1pc2NlbGxhbmVvdXMgMzItYml0IHZhbHVlcworICovCisKK3N0cnVjdCBtc3FpZDY0X2RzIHsKKwlzdHJ1Y3QgaXBjNjRfcGVybSBtc2dfcGVybTsKKwlfX2tlcm5lbF90aW1lX3QgbXNnX3N0aW1lOwkvKiBsYXN0IG1zZ3NuZCB0aW1lICovCisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDE7CisJX19rZXJuZWxfdGltZV90IG1zZ19ydGltZTsJLyogbGFzdCBtc2dyY3YgdGltZSAqLworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQyOworCV9fa2VybmVsX3RpbWVfdCBtc2dfY3RpbWU7CS8qIGxhc3QgY2hhbmdlIHRpbWUgKi8KKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkMzsKKwl1bnNpZ25lZCBsb25nICBtc2dfY2J5dGVzOwkvKiBjdXJyZW50IG51bWJlciBvZiBieXRlcyBvbiBxdWV1ZSAqLworCXVuc2lnbmVkIGxvbmcgIG1zZ19xbnVtOwkvKiBudW1iZXIgb2YgbWVzc2FnZXMgaW4gcXVldWUgKi8KKwl1bnNpZ25lZCBsb25nICBtc2dfcWJ5dGVzOwkvKiBtYXggbnVtYmVyIG9mIGJ5dGVzIG9uIHF1ZXVlICovCisJX19rZXJuZWxfcGlkX3QgbXNnX2xzcGlkOwkvKiBwaWQgb2YgbGFzdCBtc2dzbmQgKi8KKwlfX2tlcm5lbF9waWRfdCBtc2dfbHJwaWQ7CS8qIGxhc3QgcmVjZWl2ZSBwaWQgKi8KKwl1bnNpZ25lZCBsb25nICBfX3VudXNlZDQ7CisJdW5zaWduZWQgbG9uZyAgX191bnVzZWQ1OworfTsKKworI2VuZGlmIC8qIF9fQVNNX1NINjRfTVNHQlVGX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoNjQvbmFtZWkuaCBiL2luY2x1ZGUvYXNtLXNoNjQvbmFtZWkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWQ3NTlhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2g2NC9uYW1laS5oCkBAIC0wLDAgKzEsMjQgQEAKKyNpZm5kZWYgX19BU01fU0g2NF9OQU1FSV9ICisjZGVmaW5lIF9fQVNNX1NINjRfTkFNRUlfSAorCisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogaW5jbHVkZS9hc20tc2g2NC9uYW1laS5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxICBQYW9sbyBBbGJlcmVsbGkKKyAqCisgKiBJbmNsdWRlZCBmcm9tIGxpbnV4L2ZzL25hbWVpLmMKKyAqCisgKi8KKworLyogVGhpcyBkdW1teSByb3V0aW5lIG1heWJlIGNoYW5nZWQgdG8gc29tZXRoaW5nIHVzZWZ1bAorICogZm9yIC91c3IvZ25lbXVsLyBlbXVsYXRpb24gc3R1ZmYuCisgKiBMb29rIGF0IGFzbS1zcGFyYy9uYW1laS5oIGZvciBkZXRhaWxzLgorICovCisKKyNkZWZpbmUgX19lbXVsX3ByZWZpeCgpIE5VTEwKKworI2VuZGlmIC8qIF9fQVNNX1NINjRfTkFNRUlfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2g2NC9wYWdlLmggYi9pbmNsdWRlL2FzbS1zaDY0L3BhZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWY3ZjVhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2g2NC9wYWdlLmgKQEAgLTAsMCArMSwxMzcgQEAKKyNpZm5kZWYgX19BU01fU0g2NF9QQUdFX0gKKyNkZWZpbmUgX19BU01fU0g2NF9QQUdFX0gKKworLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIGluY2x1ZGUvYXNtLXNoNjQvcGFnZS5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxICBQYW9sbyBBbGJlcmVsbGkKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCAgUGF1bCBNdW5kdAorICoKKyAqIGJlbmVkaWN0Lmdhc3RlckBzdXBlcmguY29tIDE5dGgsIDI0dGggSnVseSAyMDAyLgorICoKKyAqIE1vZGlmaWVkIHRvIHRha2UgYWNjb3VudCBvZiBlbmFibGluZyBmb3IgRC1DQUNIRSBzdXBwb3J0LgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKy8qIFBBR0VfU0hJRlQgZGV0ZXJtaW5lcyB0aGUgcGFnZSBzaXplICovCisjZGVmaW5lIFBBR0VfU0hJRlQJMTIKKyNpZmRlZiBfX0FTU0VNQkxZX18KKyNkZWZpbmUgUEFHRV9TSVpFCTQwOTYKKyNlbHNlCisjZGVmaW5lIFBBR0VfU0laRQkoMVVMIDw8IFBBR0VfU0hJRlQpCisjZW5kaWYKKyNkZWZpbmUgUEFHRV9NQVNLCSh+KFBBR0VfU0laRS0xKSkKKyNkZWZpbmUgUFRFX01BU0sJUEFHRV9NQVNLCisKKyNpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0VfU0laRV82NEspCisjZGVmaW5lIEhQQUdFX1NISUZUCTE2CisjZWxpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0VfU0laRV8xTUIpCisjZGVmaW5lIEhQQUdFX1NISUZUCTIwCisjZWxpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0VfU0laRV81MTJNQikKKyNkZWZpbmUgSFBBR0VfU0hJRlQJMjkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQorI2RlZmluZSBIUEFHRV9TSVpFCQkoMVVMIDw8IEhQQUdFX1NISUZUKQorI2RlZmluZSBIUEFHRV9NQVNLCQkofihIUEFHRV9TSVpFLTEpKQorI2RlZmluZSBIVUdFVExCX1BBR0VfT1JERVIJKEhQQUdFX1NISUZULVBBR0VfU0hJRlQpCisjZW5kaWYKKworI2lmZGVmIF9fS0VSTkVMX18KKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK2V4dGVybiBzdHJ1Y3QgcGFnZSAqbWVtX21hcDsKK2V4dGVybiB2b2lkIHNoNjRfcGFnZV9jbGVhcih2b2lkICpwYWdlKTsKK2V4dGVybiB2b2lkIHNoNjRfcGFnZV9jb3B5KHZvaWQgKmZyb20sIHZvaWQgKnRvKTsKKworI2RlZmluZSBjbGVhcl9wYWdlKHBhZ2UpICAgICAgICAgICAgICAgc2g2NF9wYWdlX2NsZWFyKHBhZ2UpCisjZGVmaW5lIGNvcHlfcGFnZSh0byxmcm9tKSAgICAgICAgICAgICBzaDY0X3BhZ2VfY29weShmcm9tLCB0bykKKworI2lmIGRlZmluZWQoQ09ORklHX0RDQUNIRV9ESVNBQkxFRCkKKworI2RlZmluZSBjbGVhcl91c2VyX3BhZ2UocGFnZSwgdmFkZHIsIHBnKQljbGVhcl9wYWdlKHBhZ2UpCisjZGVmaW5lIGNvcHlfdXNlcl9wYWdlKHRvLCBmcm9tLCB2YWRkciwgcGcpCWNvcHlfcGFnZSh0bywgZnJvbSkKKworI2Vsc2UKKworZXh0ZXJuIHZvaWQgY2xlYXJfdXNlcl9wYWdlKHZvaWQgKnRvLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHN0cnVjdCBwYWdlICpwZyk7CitleHRlcm4gdm9pZCBjb3B5X3VzZXJfcGFnZSh2b2lkICp0bywgdm9pZCAqZnJvbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBzdHJ1Y3QgcGFnZSAqcGcpOworCisjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfRENBQ0hFX0RJU0FCTEVEKSAqLworCisvKgorICogVGhlc2UgYXJlIHVzZWQgdG8gbWFrZSB1c2Ugb2YgQyB0eXBlLWNoZWNraW5nLi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIGxvbmcgcHRlOyB9IHB0ZV90OwordHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHBtZDsgfSBwbWRfdDsKK3R5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBwZ2Q7IH0gcGdkX3Q7Cit0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgcGdwcm90OyB9IHBncHJvdF90OworCisjZGVmaW5lIHB0ZV92YWwoeCkJKCh4KS5wdGUpCisjZGVmaW5lIHBtZF92YWwoeCkJKCh4KS5wbWQpCisjZGVmaW5lIHBnZF92YWwoeCkJKCh4KS5wZ2QpCisjZGVmaW5lIHBncHJvdF92YWwoeCkJKCh4KS5wZ3Byb3QpCisKKyNkZWZpbmUgX19wdGUoeCkgKChwdGVfdCkgeyAoeCkgfSApCisjZGVmaW5lIF9fcG1kKHgpICgocG1kX3QpIHsgKHgpIH0gKQorI2RlZmluZSBfX3BnZCh4KSAoKHBnZF90KSB7ICh4KSB9ICkKKyNkZWZpbmUgX19wZ3Byb3QoeCkJKChwZ3Byb3RfdCkgeyAoeCkgfSApCisKKyNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCisKKy8qIHRvIGFsaWduIHRoZSBwb2ludGVyIHRvIHRoZSAobmV4dCkgcGFnZSBib3VuZGFyeSAqLworI2RlZmluZSBQQUdFX0FMSUdOKGFkZHIpCSgoKGFkZHIpK1BBR0VfU0laRS0xKSZQQUdFX01BU0spCisKKy8qCisgKiBLY29uZmlnIGRlZmluZWQuCisgKi8KKyNkZWZpbmUgX19NRU1PUllfU1RBUlQJCShDT05GSUdfTUVNT1JZX1NUQVJUKQorI2RlZmluZSBQQUdFX09GRlNFVAkJKENPTkZJR19DQUNIRURfTUVNT1JZX09GRlNFVCkKKworI2RlZmluZSBfX3BhKHgpCQkJKCh1bnNpZ25lZCBsb25nKSh4KS1QQUdFX09GRlNFVCkKKyNkZWZpbmUgX192YSh4KQkJCSgodm9pZCAqKSgodW5zaWduZWQgbG9uZykoeCkrUEFHRV9PRkZTRVQpKQorI2RlZmluZSBNQVBfTlIoYWRkcikJCSgoX19wYShhZGRyKS1fX01FTU9SWV9TVEFSVCkgPj4gUEFHRV9TSElGVCkKKyNkZWZpbmUgVkFMSURfUEFHRShwYWdlKQkoKHBhZ2UgLSBtZW1fbWFwKSA8IG1heF9tYXBucikKKworI2RlZmluZSBwaHlzX3RvX3BhZ2UocGh5cykJKG1lbV9tYXAgKyAoKChwaHlzKSAtIF9fTUVNT1JZX1NUQVJUKSA+PiBQQUdFX1NISUZUKSkKKyNkZWZpbmUgcGFnZV90b19waHlzKHBhZ2UpCSgoKHBhZ2UgLSBtZW1fbWFwKSA8PCBQQUdFX1NISUZUKSArIF9fTUVNT1JZX1NUQVJUKQorCisvKiBQRk4gc3RhcnQgbnVtYmVyLCBiZWNhdXNlIG9mIF9fTUVNT1JZX1NUQVJUICovCisjZGVmaW5lIFBGTl9TVEFSVAkJKF9fTUVNT1JZX1NUQVJUID4+IFBBR0VfU0hJRlQpCisKKyNkZWZpbmUgcGZuX3RvX3BhZ2UocGZuKQkobWVtX21hcCArIChwZm4pIC0gUEZOX1NUQVJUKQorI2RlZmluZSBwYWdlX3RvX3BmbihwYWdlKQkoKHVuc2lnbmVkIGxvbmcpKChwYWdlKSAtIG1lbV9tYXApICsgUEZOX1NUQVJUKQorI2RlZmluZSB2aXJ0X3RvX3BhZ2Uoa2FkZHIpCXBmbl90b19wYWdlKF9fcGEoa2FkZHIpID4+IFBBR0VfU0hJRlQpCisjZGVmaW5lIHBmbl92YWxpZChwZm4pCQkoKChwZm4pIC0gUEZOX1NUQVJUKSA8IG1heF9tYXBucikKKyNkZWZpbmUgdmlydF9hZGRyX3ZhbGlkKGthZGRyKQlwZm5fdmFsaWQoX19wYShrYWRkcikgPj4gUEFHRV9TSElGVCkKKworI2RlZmluZSBWTV9EQVRBX0RFRkFVTFRfRkxBR1MJKFZNX1JFQUQgfCBWTV9XUklURSB8IFZNX0VYRUMgfCBcCisJCQkJIFZNX01BWVJFQUQgfCBWTV9NQVlXUklURSB8IFZNX01BWUVYRUMpCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKy8qIFB1cmUgMl5uIHZlcnNpb24gb2YgZ2V0X29yZGVyICovCitleHRlcm4gX19pbmxpbmVfXyBpbnQgZ2V0X29yZGVyKHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlpbnQgb3JkZXI7CisKKwlzaXplID0gKHNpemUtMSkgPj4gKFBBR0VfU0hJRlQtMSk7CisJb3JkZXIgPSAtMTsKKwlkbyB7CisJCXNpemUgPj49IDE7CisJCW9yZGVyKys7CisJfSB3aGlsZSAoc2l6ZSk7CisJcmV0dXJuIG9yZGVyOworfQorCisjZW5kaWYKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9fQVNNX1NINjRfUEFHRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaDY0L3BhcmFtLmggYi9pbmNsdWRlL2FzbS1zaDY0L3BhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE4Y2M4NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoNjQvcGFyYW0uaApAQCAtMCwwICsxLDQzIEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogaW5jbHVkZS9hc20tc2g2NC9wYXJhbS5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxICBQYW9sbyBBbGJlcmVsbGkKKyAqIENvcHlyaWdodCAoQykgMjAwMyAgUGF1bCBNdW5kdAorICoKKyAqLworI2lmbmRlZiBfX0FTTV9TSDY0X1BBUkFNX0gKKyNkZWZpbmUgX19BU01fU0g2NF9QQVJBTV9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2lmZGVmIF9fS0VSTkVMX18KKyMgaWZkZWYgQ09ORklHX1NIX1dEVAorIyAgZGVmaW5lIEhaCQkxMDAwCQkvKiBOZWVkZWQgZm9yIGhpZ2gtcmVzIFdPVkYgKi8KKyMgZWxzZQorIyAgZGVmaW5lIEhaCQkxMDAKKyMgZW5kaWYKKyMgZGVmaW5lIFVTRVJfSFoJMTAwCQkvKiBVc2VyIGludGVyZmFjZXMgYXJlIGluICJ0aWNrcyIgKi8KKyMgZGVmaW5lIENMT0NLU19QRVJfU0VDCShVU0VSX0haKQkvKiBmcmVxdWVuY3kgYXQgd2hpY2ggdGltZXMoKSBjb3VudHMgKi8KKyNlbmRpZgorCisjaWZuZGVmIEhaCisjZGVmaW5lIEhaIDEwMAorI2VuZGlmCisKKyNkZWZpbmUgRVhFQ19QQUdFU0laRQk0MDk2CisKKyNpZm5kZWYgTkdST1VQUworI2RlZmluZSBOR1JPVVBTCQkzMgorI2VuZGlmCisKKyNpZm5kZWYgTk9HUk9VUAorI2RlZmluZSBOT0dST1VQCQkoLTEpCisjZW5kaWYKKworI2RlZmluZSBNQVhIT1NUTkFNRUxFTgk2NAkvKiBtYXggbGVuZ3RoIG9mIGhvc3RuYW1lICovCisKKyNlbmRpZiAvKiBfX0FTTV9TSDY0X1BBUkFNX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoNjQvcGNpLmggYi9pbmNsdWRlL2FzbS1zaDY0L3BjaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjYzE0ZTEzOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoNjQvcGNpLmgKQEAgLTAsMCArMSwxMTAgQEAKKyNpZm5kZWYgX19BU01fU0g2NF9QQ0lfSAorI2RlZmluZSBfX0FTTV9TSDY0X1BDSV9ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorCisvKiBDYW4gYmUgdXNlZCB0byBvdmVycmlkZSB0aGUgbG9naWMgaW4gcGNpX3NjYW5fYnVzIGZvciBza2lwcGluZworICAgYWxyZWFkeS1jb25maWd1cmVkIGJ1cyBudW1iZXJzIC0gdG8gYmUgdXNlZCBmb3IgYnVnZ3kgQklPU2VzCisgICBvciBhcmNoaXRlY3R1cmVzIHdpdGggaW5jb21wbGV0ZSBQQ0kgc2V0dXAgYnkgdGhlIGxvYWRlciAqLworCisjZGVmaW5lIHBjaWJpb3NfYXNzaWduX2FsbF9idXNzZXMoKSAgICAgMQorCisvKgorICogVGhlc2UgYXJlIGN1cnJlbnRseSB0aGUgY29ycmVjdCB2YWx1ZXMgZm9yIHRoZSBTVE0gb3ZlcmRyaXZlIGJvYXJkCisgKiBXZSBuZWVkIHNvbWUgd2F5IG9mIHNldHRpbmcgdGhpcyBvbiBhIGJvYXJkIHNwZWNpZmljIHdheSwgaXQgd2lsbAorICogbm90IGJlIHRoZSBzYW1lIG9uIG90aGVyIGJvYXJkcyBJIHRoaW5rCisgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDVfMTAxKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDVfMTAzKQorI2RlZmluZSBQQ0lCSU9TX01JTl9JTyAgICAgICAgICAweDIwMDAKKyNkZWZpbmUgUENJQklPU19NSU5fTUVNICAgICAgICAgMHg0MDAwMDAwMAorI2VuZGlmCisKK2V4dGVybiB2b2lkIHBjaWJpb3Nfc2V0X21hc3RlcihzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKKworLyoKKyAqIFNldCBwZW5hbGl6ZSBpc2EgaXJxIGZ1bmN0aW9uCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBwY2liaW9zX3BlbmFsaXplX2lzYV9pcnEoaW50IGlycSkKK3sKKwkvKiBXZSBkb24ndCBkbyBkeW5hbWljIFBDSSBJUlEgYWxsb2NhdGlvbiAqLworfQorCisvKiBEeW5hbWljIERNQSBtYXBwaW5nIHN0dWZmLgorICogU3VwZXJIIGhhcyBldmVyeXRoaW5nIG1hcHBlZCBzdGF0aWNhbGx5IGxpa2UgeDg2LgorICovCisKKy8qIFRoZSBQQ0kgYWRkcmVzcyBzcGFjZSBkb2VzIGVxdWFsIHRoZSBwaHlzaWNhbCBtZW1vcnkKKyAqIGFkZHJlc3Mgc3BhY2UuICBUaGUgbmV0d29ya2luZyBhbmQgYmxvY2sgZGV2aWNlIGxheWVycyB1c2UKKyAqIHRoaXMgYm9vbGVhbiBmb3IgYm91bmNlIGJ1ZmZlciBkZWNpc2lvbnMuCisgKi8KKyNkZWZpbmUgUENJX0RNQV9CVVNfSVNfUEhZUwkoMSkKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGFzbS9zY2F0dGVybGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCisvKiBwY2lfdW5tYXBfe3NpbmdsZSxwYWdlfSBiZWluZyBhIG5vcCBkZXBlbmRzIHVwb24gdGhlCisgKiBjb25maWd1cmF0aW9uLgorICovCisjaWZkZWYgQ09ORklHX1NIX1BDSURNQV9OT05DT0hFUkVOVAorI2RlZmluZSBERUNMQVJFX1BDSV9VTk1BUF9BRERSKEFERFJfTkFNRSkJXAorCWRtYV9hZGRyX3QgQUREUl9OQU1FOworI2RlZmluZSBERUNMQVJFX1BDSV9VTk1BUF9MRU4oTEVOX05BTUUpCQlcCisJX191MzIgTEVOX05BTUU7CisjZGVmaW5lIHBjaV91bm1hcF9hZGRyKFBUUiwgQUREUl9OQU1FKQkJCVwKKwkoKFBUUiktPkFERFJfTkFNRSkKKyNkZWZpbmUgcGNpX3VubWFwX2FkZHJfc2V0KFBUUiwgQUREUl9OQU1FLCBWQUwpCQlcCisJKCgoUFRSKS0+QUREUl9OQU1FKSA9IChWQUwpKQorI2RlZmluZSBwY2lfdW5tYXBfbGVuKFBUUiwgTEVOX05BTUUpCQkJXAorCSgoUFRSKS0+TEVOX05BTUUpCisjZGVmaW5lIHBjaV91bm1hcF9sZW5fc2V0KFBUUiwgTEVOX05BTUUsIFZBTCkJCVwKKwkoKChQVFIpLT5MRU5fTkFNRSkgPSAoVkFMKSkKKyNlbHNlCisjZGVmaW5lIERFQ0xBUkVfUENJX1VOTUFQX0FERFIoQUREUl9OQU1FKQorI2RlZmluZSBERUNMQVJFX1BDSV9VTk1BUF9MRU4oTEVOX05BTUUpCisjZGVmaW5lIHBjaV91bm1hcF9hZGRyKFBUUiwgQUREUl9OQU1FKQkJKDApCisjZGVmaW5lIHBjaV91bm1hcF9hZGRyX3NldChQVFIsIEFERFJfTkFNRSwgVkFMKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHBjaV91bm1hcF9sZW4oUFRSLCBMRU5fTkFNRSkJCSgwKQorI2RlZmluZSBwY2lfdW5tYXBfbGVuX3NldChQVFIsIExFTl9OQU1FLCBWQUwpCWRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisvKiBOb3Qgc3VwcG9ydGluZyBtb3JlIHRoYW4gMzItYml0IFBDSSBidXMgYWRkcmVzc2VzIG5vdywgYnV0CisgKiBtdXN0IHNhdGlzZnkgcmVmZXJlbmNlcyB0byB0aGlzIGZ1bmN0aW9uLiAgQ2hhbmdlIGlmIG5lZWRlZC4KKyAqLworI2RlZmluZSBwY2lfZGFjX2RtYV9zdXBwb3J0ZWQocGNpX2RldiwgbWFzaykgKDApCisKKy8qIFRoZXNlIG1hY3JvcyBzaG91bGQgYmUgdXNlZCBhZnRlciBhIHBjaV9tYXBfc2cgY2FsbCBoYXMgYmVlbiBkb25lCisgKiB0byBnZXQgYnVzIGFkZHJlc3NlcyBvZiBlYWNoIG9mIHRoZSBTRyBlbnRyaWVzIGFuZCB0aGVpciBsZW5ndGhzLgorICogWW91IHNob3VsZCBvbmx5IHdvcmsgd2l0aCB0aGUgbnVtYmVyIG9mIHNnIGVudHJpZXMgcGNpX21hcF9zZworICogcmV0dXJucywgb3IgYWx0ZXJuYXRpdmVseSBzdG9wIG9uIHRoZSBmaXJzdCBzZ19kbWFfbGVuKHNnKSB3aGljaAorICogaXMgMC4KKyAqLworI2RlZmluZSBzZ19kbWFfYWRkcmVzcyhzZykJKChzZyktPmRtYV9hZGRyZXNzKQorI2RlZmluZSBzZ19kbWFfbGVuKHNnKQkJKChzZyktPmxlbmd0aCkKKworLyogQm9hcmQtc3BlY2lmaWMgZml4dXAgcm91dGluZXMuICovCitleHRlcm4gdm9pZCBwY2liaW9zX2ZpeHVwKHZvaWQpOworZXh0ZXJuIHZvaWQgcGNpYmlvc19maXh1cF9pcnFzKHZvaWQpOworCisjaWZkZWYgQ09ORklHX1BDSV9BVVRPCitleHRlcm4gaW50IHBjaWF1dG9fYXNzaWduX3Jlc291cmNlcyhpbnQgYnVzbm8sIHN0cnVjdCBwY2lfY2hhbm5lbCAqaG9zZSk7CisjZW5kaWYKKworc3RhdGljIGlubGluZSB2b2lkIHBjaWJpb3NfYWRkX3BsYXRmb3JtX2VudHJpZXMoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKK30KKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworLyogZ2VuZXJpYyBwY2kgc3R1ZmYgKi8KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wY2kuaD4KKworLyogZ2VuZXJpYyBETUEtbWFwcGluZyBzdHVmZiAqLworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BjaS1kbWEtY29tcGF0Lmg+CisKKyNlbmRpZiAvKiBfX0FTTV9TSDY0X1BDSV9IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoNjQvcGVyY3B1LmggYi9pbmNsdWRlL2FzbS1zaDY0L3BlcmNwdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwMWQxNmMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaDY0L3BlcmNwdS5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfX0FTTV9TSDY0X1BFUkNQVQorI2RlZmluZSBfX0FTTV9TSDY0X1BFUkNQVQorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGVyY3B1Lmg+CisKKyNlbmRpZiAvKiBfX0FTTV9TSDY0X1BFUkNQVSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2g2NC9wZ2FsbG9jLmggYi9pbmNsdWRlL2FzbS1zaDY0L3BnYWxsb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjVmNWRmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2g2NC9wZ2FsbG9jLmgKQEAgLTAsMCArMSwxOTUgQEAKKyNpZm5kZWYgX19BU01fU0g2NF9QR0FMTE9DX0gKKyNkZWZpbmUgX19BU01fU0g2NF9QR0FMTE9DX0gKKworLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIGluY2x1ZGUvYXNtLXNoNjQvcGdhbGxvYy5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxICBQYW9sbyBBbGJlcmVsbGkKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCAgUGF1bCBNdW5kdAorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0ICBSaWNoYXJkIEN1cm5vdworICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisKKyNkZWZpbmUgcGdkX3F1aWNrbGlzdCAoY3VycmVudF9jcHVfZGF0YS5wZ2RfcXVpY2spCisjZGVmaW5lIHBtZF9xdWlja2xpc3QgKGN1cnJlbnRfY3B1X2RhdGEucG1kX3F1aWNrKQorI2RlZmluZSBwdGVfcXVpY2tsaXN0IChjdXJyZW50X2NwdV9kYXRhLnB0ZV9xdWljaykKKyNkZWZpbmUgcGd0YWJsZV9jYWNoZV9zaXplIChjdXJyZW50X2NwdV9kYXRhLnBndGFibGVfY2FjaGVfc3opCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwZ2RfaW5pdCh1bnNpZ25lZCBsb25nIHBhZ2UpCit7CisJdW5zaWduZWQgbG9uZyAqcGdkID0gKHVuc2lnbmVkIGxvbmcgKilwYWdlOworCWV4dGVybiBwdGVfdCBlbXB0eV9iYWRfcHRlX3RhYmxlW1BUUlNfUEVSX1BURV07CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgVVNFUl9QVFJTX1BFUl9QR0Q7IGkrKykKKwkJcGdkW2ldID0gKHVuc2lnbmVkIGxvbmcpZW1wdHlfYmFkX3B0ZV90YWJsZTsKK30KKworLyoKKyAqIEFsbG9jYXRlIGFuZCBmcmVlIHBhZ2UgdGFibGVzLiBUaGUgeHh4X2tlcm5lbCgpIHZlcnNpb25zIGFyZQorICogdXNlZCB0byBhbGxvY2F0ZSBhIGtlcm5lbCBwYWdlIHRhYmxlIC0gdGhpcyB0dXJucyBvbiBBU04gYml0cworICogaWYgYW55LgorICovCisKK2V4dGVybiBfX2lubGluZV9fIHBnZF90ICpnZXRfcGdkX3Nsb3codm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgcGdkX3NpemUgPSAoVVNFUl9QVFJTX1BFUl9QR0QgKiBzaXplb2YocGdkX3QpKTsKKwlwZ2RfdCAqcmV0ID0gKHBnZF90ICopa21hbGxvYyhwZ2Rfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJcmV0dXJuIHJldDsKK30KKworZXh0ZXJuIF9faW5saW5lX18gcGdkX3QgKmdldF9wZ2RfZmFzdCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgKnJldDsKKworCWlmICgocmV0ID0gcGdkX3F1aWNrbGlzdCkgIT0gTlVMTCkgeworCQlwZ2RfcXVpY2tsaXN0ID0gKHVuc2lnbmVkIGxvbmcgKikoKnJldCk7CisJCXJldFswXSA9IDA7CisJCXBndGFibGVfY2FjaGVfc2l6ZS0tOworCX0gZWxzZQorCQlyZXQgPSAodW5zaWduZWQgbG9uZyAqKWdldF9wZ2Rfc2xvdygpOworCisJaWYgKHJldCkgeworCQltZW1zZXQocmV0LCAwLCBVU0VSX1BUUlNfUEVSX1BHRCAqIHNpemVvZihwZ2RfdCkpOworCX0KKwlyZXR1cm4gKHBnZF90ICopcmV0OworfQorCitleHRlcm4gX19pbmxpbmVfXyB2b2lkIGZyZWVfcGdkX2Zhc3QocGdkX3QgKnBnZCkKK3sKKwkqKHVuc2lnbmVkIGxvbmcgKilwZ2QgPSAodW5zaWduZWQgbG9uZykgcGdkX3F1aWNrbGlzdDsKKwlwZ2RfcXVpY2tsaXN0ID0gKHVuc2lnbmVkIGxvbmcgKikgcGdkOworCXBndGFibGVfY2FjaGVfc2l6ZSsrOworfQorCitleHRlcm4gX19pbmxpbmVfXyB2b2lkIGZyZWVfcGdkX3Nsb3cocGdkX3QgKnBnZCkKK3sKKwlrZnJlZSgodm9pZCAqKXBnZCk7Cit9CisKK2V4dGVybiBwdGVfdCAqZ2V0X3B0ZV9zbG93KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcmVzc19wcmVhZGp1c3RlZCk7CitleHRlcm4gcHRlX3QgKmdldF9wdGVfa2VybmVsX3Nsb3cocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzX3ByZWFkanVzdGVkKTsKKworZXh0ZXJuIF9faW5saW5lX18gcHRlX3QgKmdldF9wdGVfZmFzdCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgKnJldDsKKworCWlmKChyZXQgPSAodW5zaWduZWQgbG9uZyAqKXB0ZV9xdWlja2xpc3QpICE9IE5VTEwpIHsKKwkJcHRlX3F1aWNrbGlzdCA9ICh1bnNpZ25lZCBsb25nICopKCpyZXQpOworCQlyZXRbMF0gPSByZXRbMV07CisJCXBndGFibGVfY2FjaGVfc2l6ZS0tOworCX0KKwlyZXR1cm4gKHB0ZV90ICopcmV0OworfQorCitleHRlcm4gX19pbmxpbmVfXyB2b2lkIGZyZWVfcHRlX2Zhc3QocHRlX3QgKnB0ZSkKK3sKKwkqKHVuc2lnbmVkIGxvbmcgKilwdGUgPSAodW5zaWduZWQgbG9uZykgcHRlX3F1aWNrbGlzdDsKKwlwdGVfcXVpY2tsaXN0ID0gKHVuc2lnbmVkIGxvbmcgKikgcHRlOworCXBndGFibGVfY2FjaGVfc2l6ZSsrOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcHRlX2ZyZWVfa2VybmVsKHB0ZV90ICpwdGUpCit7CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXB0ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdGVfZnJlZShzdHJ1Y3QgcGFnZSAqcHRlKQoreworCV9fZnJlZV9wYWdlKHB0ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgcHRlX3QgKnB0ZV9hbGxvY19vbmVfa2VybmVsKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJCQkgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisJcHRlX3QgKnB0ZTsKKworCXB0ZSA9IChwdGVfdCAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMIHwgX19HRlBfUkVQRUFUfF9fR0ZQX1pFUk8pOworCisJcmV0dXJuIHB0ZTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqcHRlX2FsbG9jX29uZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCXN0cnVjdCBwYWdlICpwdGU7CisKKwlwdGUgPSBhbGxvY19wYWdlcyhHRlBfS0VSTkVMfF9fR0ZQX1JFUEVBVHxfX0dGUF9aRVJPLCAwKTsKKworCXJldHVybiBwdGU7Cit9CisKKyNkZWZpbmUgX19wdGVfZnJlZV90bGIodGxiLHB0ZSkgdGxiX3JlbW92ZV9wYWdlKCh0bGIpLChwdGUpKQorCisvKgorICogYWxsb2NhdGluZyBhbmQgZnJlZWluZyBhIHBtZCBpcyB0cml2aWFsOiB0aGUgMS1lbnRyeSBwbWQgaXMKKyAqIGluc2lkZSB0aGUgcGdkLCBzbyBoYXMgbm8gZXh0cmEgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCBpdC4KKyAqLworCisjaWYgZGVmaW5lZChDT05GSUdfU0g2NF9QR1RBQkxFXzJfTEVWRUwpCisKKyNkZWZpbmUgcG1kX2FsbG9jX29uZShtbSwgYWRkcikJCSh7IEJVRygpOyAoKHBtZF90ICopMik7IH0pCisjZGVmaW5lIHBtZF9mcmVlKHgpCQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBwZ2RfcG9wdWxhdGUobW0sIHBtZCwgcHRlKQlCVUcoKQorI2RlZmluZSBfX3B0ZV9mcmVlX3RsYih0bGIscHRlKQkJdGxiX3JlbW92ZV9wYWdlKCh0bGIpLChwdGUpKQorI2RlZmluZSBfX3BtZF9mcmVlX3RsYih0bGIscG1kKQkJZG8geyB9IHdoaWxlICgwKQorCisjZWxpZiBkZWZpbmVkKENPTkZJR19TSDY0X1BHVEFCTEVfM19MRVZFTCkKKworc3RhdGljIF9faW5saW5lX18gcG1kX3QgKnBtZF9hbGxvY19vbmUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwlwbWRfdCAqcG1kOworCXBtZCA9IChwbWRfdCAqKSBfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTHxfX0dGUF9SRVBFQVR8X19HRlBfWkVSTyk7CisJcmV0dXJuIHBtZDsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBwbWRfZnJlZShwbWRfdCAqcG1kKQoreworCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgcG1kKTsKK30KKworI2RlZmluZSBwZ2RfcG9wdWxhdGUobW0sIHBnZCwgcG1kKSBwZ2Rfc2V0KHBnZCwgcG1kKQorI2RlZmluZSBfX3BtZF9mcmVlX3RsYih0bGIscG1kKQkJcG1kX2ZyZWUocG1kKQorCisjZWxzZQorI2Vycm9yICJObyBkZWZpbmVkIHBhZ2UgdGFibGUgc2l6ZSIKKyNlbmRpZgorCisjZGVmaW5lIGNoZWNrX3BndF9jYWNoZSgpCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHBnZF9mcmVlKHBnZCkJCWZyZWVfcGdkX3Nsb3cocGdkKQorI2RlZmluZSBwZ2RfYWxsb2MobW0pCQlnZXRfcGdkX2Zhc3QoKQorCitleHRlcm4gaW50IGRvX2NoZWNrX3BndF9jYWNoZShpbnQsIGludCk7CisKK2V4dGVybiBpbmxpbmUgdm9pZCBzZXRfcGdkaXIodW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwZ2RfdCBlbnRyeSkKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBwOworCXBnZF90ICpwZ2Q7CisKKwlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOworCWZvcl9lYWNoX3Byb2Nlc3MocCkgeworCQlpZiAoIXAtPm1tKQorCQkJY29udGludWU7CisJCSpwZ2Rfb2Zmc2V0KHAtPm1tLGFkZHJlc3MpID0gZW50cnk7CisJfQorCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwlmb3IgKHBnZCA9IChwZ2RfdCAqKXBnZF9xdWlja2xpc3Q7IHBnZDsgcGdkID0gKHBnZF90ICopKih1bnNpZ25lZCBsb25nICopcGdkKQorCQlwZ2RbYWRkcmVzcyA+PiBQR0RJUl9TSElGVF0gPSBlbnRyeTsKK30KKworI2RlZmluZSBwbWRfcG9wdWxhdGVfa2VybmVsKG1tLCBwbWQsIHB0ZSkgXAorCXNldF9wbWQocG1kLCBfX3BtZChfUEFHRV9UQUJMRSArICh1bnNpZ25lZCBsb25nKSAocHRlKSkpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwbWRfcG9wdWxhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQsCisJCQkJc3RydWN0IHBhZ2UgKnB0ZSkKK3sKKwlzZXRfcG1kKHBtZCwgX19wbWQoX1BBR0VfVEFCTEUgKyAodW5zaWduZWQgbG9uZykgcGFnZV9hZGRyZXNzIChwdGUpKSk7Cit9CisKKyNlbmRpZiAvKiBfX0FTTV9TSDY0X1BHQUxMT0NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2g2NC9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1zaDY0L3BndGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWY3MGMwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2g2NC9wZ3RhYmxlLmgKQEAgLTAsMCArMSw1MDggQEAKKyNpZm5kZWYgX19BU01fU0g2NF9QR1RBQkxFX0gKKyNkZWZpbmUgX19BU01fU0g2NF9QR1RBQkxFX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljLzRsZXZlbC1maXh1cC5oPgorCisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogaW5jbHVkZS9hc20tc2g2NC9wZ3RhYmxlLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEgIFBhb2xvIEFsYmVyZWxsaQorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0ICBQYXVsIE11bmR0CisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQgIFJpY2hhcmQgQ3Vybm93CisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBmdW5jdGlvbnMgYW5kIGRlZmluZXMgbmVjZXNzYXJ5IHRvIG1vZGlmeSBhbmQgdXNlCisgKiB0aGUgU3VwZXJIIHBhZ2UgdGFibGUgdHJlZS4KKyAqLworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworZXh0ZXJuIHZvaWQgcGFnaW5nX2luaXQodm9pZCk7CisKKy8qIFdlIHByb3ZpZGUgb3VyIG93biBnZXRfdW5tYXBwZWRfYXJlYSB0byBhdm9pZCBjYWNoZSBzeW5vbnltIGlzc3VlICovCisjZGVmaW5lIEhBVkVfQVJDSF9VTk1BUFBFRF9BUkVBCisKKy8qCisgKiBCYXNpY2FsbHkgd2UgaGF2ZSB0aGUgc2FtZSB0d28tbGV2ZWwgKHdoaWNoIGlzIHRoZSBsb2dpY2FsIHRocmVlIGxldmVsCisgKiBMaW51eCBwYWdlIHRhYmxlIGxheW91dCBmb2xkZWQpIHBhZ2UgdGFibGVzIGFzIHRoZSBpMzg2LgorICovCisKKy8qCisgKiBaRVJPX1BBR0UgaXMgYSBnbG9iYWwgc2hhcmVkIHBhZ2UgdGhhdCBpcyBhbHdheXMgemVybzogdXNlZAorICogZm9yIHplcm8tbWFwcGVkIG1lbW9yeSBhcmVhcyBldGMuLgorICovCitleHRlcm4gdW5zaWduZWQgY2hhciBlbXB0eV96ZXJvX3BhZ2VbUEFHRV9TSVpFXTsKKyNkZWZpbmUgWkVST19QQUdFKHZhZGRyKSAobWVtX21hcCArIE1BUF9OUihlbXB0eV96ZXJvX3BhZ2UpKQorCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisvKgorICogTkVGRiBhbmQgTlBIWVMgcmVsYXRlZCBkZWZpbmVzLgorICogRklYTUUgOiBUaGVzZSBuZWVkIHRvIGJlIG1vZGVsLWRlcGVuZGVudC4gIEZvciBub3cgdGhpcyBpcyBPSywgU0g1LTEwMSBhbmQgU0g1LTEwMworICogaW1wbGVtZW50IDMyIGJpdHMgZWZmZWN0aXZlIGFuZCAzMiBiaXRzIHBoeXNpY2FsLiAgQnV0IGZ1dHVyZSBpbXBsZW1lbnRhdGlvbnMgbWF5CisgKiBleHRlbmQgYmV5b25kIHRoaXMuCisgKi8KKyNkZWZpbmUgTkVGRgkJMzIKKyNkZWZpbmUJTkVGRl9TSUdOCSgxTEwgPDwgKE5FRkYgLSAxKSkKKyNkZWZpbmUJTkVGRl9NQVNLCSgtMUxMIDw8IE5FRkYpCisKKyNkZWZpbmUgTlBIWVMJCTMyCisjZGVmaW5lCU5QSFlTX1NJR04JKDFMTCA8PCAoTlBIWVMgLSAxKSkKKyNkZWZpbmUJTlBIWVNfTUFTSwkoLTFMTCA8PCBOUEhZUykKKworLyogVHlwaWNhbGx5IDItbGV2ZWwgaXMgc3VmZmljaWVudCB1cCB0byAzMiBiaXRzIG9mIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSwgYmV5b25kCisgICB0aGF0IDMtbGV2ZWwgd291bGQgYmUgYXBwcm9wcmlhdGUuICovCisjaWYgZGVmaW5lZChDT05GSUdfU0g2NF9QR1RBQkxFXzJfTEVWRUwpCisvKiBGb3IgNGsgcGFnZXMsIHRoaXMgY29udGFpbnMgNTEyIGVudHJpZXMsIGkuZS4gOSBiaXRzIHdvcnRoIG9mIGFkZHJlc3MuICovCisjZGVmaW5lIFBUUlNfUEVSX1BURQkoKDE8PFBBR0VfU0hJRlQpL3NpemVvZih1bnNpZ25lZCBsb25nIGxvbmcpKQorI2RlZmluZSBQVEVfTUFHTklUVURFCTMJICAgICAgLyogc2l6ZW9mKHVuc2lnbmVkIGxvbmcgbG9uZykgbWFnbml0LiAqLworI2RlZmluZSBQVEVfU0hJRlQJUEFHRV9TSElGVAorI2RlZmluZSBQVEVfQklUUwkoUEFHRV9TSElGVCAtIFBURV9NQUdOSVRVREUpCisKKy8qIHRvcCBsZXZlbDogUE1ELiAqLworI2RlZmluZSBQR0RJUl9TSElGVAkoUFRFX1NISUZUICsgUFRFX0JJVFMpCisjZGVmaW5lIFBHRF9CSVRTCShORUZGIC0gUEdESVJfU0hJRlQpCisjZGVmaW5lIFBUUlNfUEVSX1BHRAkoMTw8UEdEX0JJVFMpCisKKy8qIG1pZGRsZSBsZXZlbDogUE1ELiBUaGlzIGRvZXNuJ3QgZG8gYW55dGhpbmcgZm9yIHRoZSAyLWxldmVsIGNhc2UuICovCisjZGVmaW5lIFBUUlNfUEVSX1BNRAkoMSkKKworI2RlZmluZSBQR0RJUl9TSVpFCSgxVUwgPDwgUEdESVJfU0hJRlQpCisjZGVmaW5lIFBHRElSX01BU0sJKH4oUEdESVJfU0laRS0xKSkKKyNkZWZpbmUgUE1EX1NISUZUCVBHRElSX1NISUZUCisjZGVmaW5lIFBNRF9TSVpFCVBHRElSX1NJWkUKKyNkZWZpbmUgUE1EX01BU0sJUEdESVJfTUFTSworCisjZWxpZiBkZWZpbmVkKENPTkZJR19TSDY0X1BHVEFCTEVfM19MRVZFTCkKKy8qCisgKiB0aHJlZS1sZXZlbCBhc3ltbWV0cmljIHBhZ2luZyBzdHJ1Y3R1cmU6IFBHRCBpcyB0b3AgbGV2ZWwuCisgKiBUaGUgYXN5bW1ldHJ5IGNvbWVzIGZyb20gMzItYml0IHBvaW50ZXJzIGFuZCA2NC1iaXQgUFRFcy4KKyAqLworLyogYm90dG9tIGxldmVsOiBQVEUuIEl0J3MgOSBiaXRzID0gNTEyIHBvaW50ZXJzICovCisjZGVmaW5lIFBUUlNfUEVSX1BURQkoKDE8PFBBR0VfU0hJRlQpL3NpemVvZih1bnNpZ25lZCBsb25nIGxvbmcpKQorI2RlZmluZSBQVEVfTUFHTklUVURFCTMJICAgICAgLyogc2l6ZW9mKHVuc2lnbmVkIGxvbmcgbG9uZykgbWFnbml0LiAqLworI2RlZmluZSBQVEVfU0hJRlQJUEFHRV9TSElGVAorI2RlZmluZSBQVEVfQklUUwkoUEFHRV9TSElGVCAtIFBURV9NQUdOSVRVREUpCisKKy8qIG1pZGRsZSBsZXZlbDogUE1ELiBJdCdzIDEwIGJpdHMgPSAxMDI0IHBvaW50ZXJzICovCisjZGVmaW5lIFBUUlNfUEVSX1BNRAkoKDE8PFBBR0VfU0hJRlQpL3NpemVvZih1bnNpZ25lZCBsb25nIGxvbmcgKikpCisjZGVmaW5lIFBNRF9NQUdOSVRVREUJMgkgICAgICAvKiBzaXplb2YodW5zaWduZWQgbG9uZyBsb25nICopIG1hZ25pdC4gKi8KKyNkZWZpbmUgUE1EX1NISUZUCShQVEVfU0hJRlQgKyBQVEVfQklUUykKKyNkZWZpbmUgUE1EX0JJVFMJKFBBR0VfU0hJRlQgLSBQTURfTUFHTklUVURFKQorCisvKiB0b3AgbGV2ZWw6IFBNRC4gSXQncyAxIGJpdCA9IDIgcG9pbnRlcnMgKi8KKyNkZWZpbmUgUEdESVJfU0hJRlQJKFBNRF9TSElGVCArIFBNRF9CSVRTKQorI2RlZmluZSBQR0RfQklUUwkoTkVGRiAtIFBHRElSX1NISUZUKQorI2RlZmluZSBQVFJTX1BFUl9QR0QJKDE8PFBHRF9CSVRTKQorCisjZGVmaW5lIFBNRF9TSVpFCSgxVUwgPDwgUE1EX1NISUZUKQorI2RlZmluZSBQTURfTUFTSwkofihQTURfU0laRS0xKSkKKyNkZWZpbmUgUEdESVJfU0laRQkoMVVMIDw8IFBHRElSX1NISUZUKQorI2RlZmluZSBQR0RJUl9NQVNLCSh+KFBHRElSX1NJWkUtMSkpCisKKyNlbHNlCisjZXJyb3IgIk5vIGRlZmluZWQgbnVtYmVyIG9mIHBhZ2UgdGFibGUgbGV2ZWxzIgorI2VuZGlmCisKKy8qCisgKiBFcnJvciBvdXRwdXRzLgorICovCisjZGVmaW5lIHB0ZV9FUlJPUihlKSBcCisJcHJpbnRrKCIlczolZDogYmFkIHB0ZSAlMDE2THguXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sIHB0ZV92YWwoZSkpCisjZGVmaW5lIHBtZF9FUlJPUihlKSBcCisJcHJpbnRrKCIlczolZDogYmFkIHBtZCAlMDhseC5cbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgcG1kX3ZhbChlKSkKKyNkZWZpbmUgcGdkX0VSUk9SKGUpIFwKKwlwcmludGsoIiVzOiVkOiBiYWQgcGdkICUwOGx4LlxuIiwgX19GSUxFX18sIF9fTElORV9fLCBwZ2RfdmFsKGUpKQorCisvKgorICogVGFibGUgc2V0dGluZyByb3V0aW5lcy4gVXNlZCB3aXRoaW4gYXJjaC9tbSBvbmx5LgorICovCisjZGVmaW5lIHNldF9wZ2QocGdkcHRyLCBwZ2R2YWwpICgqKHBnZHB0cikgPSBwZ2R2YWwpCisjZGVmaW5lIHNldF9wbWQocG1kcHRyLCBwbWR2YWwpICgqKHBtZHB0cikgPSBwbWR2YWwpCisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgc2V0X3B0ZShwdGVfdCAqcHRlcHRyLCBwdGVfdCBwdGV2YWwpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIHggPSAoKHVuc2lnbmVkIGxvbmcgbG9uZykgcHRldmFsLnB0ZSk7CisJdW5zaWduZWQgbG9uZyBsb25nICp4cCA9ICh1bnNpZ25lZCBsb25nIGxvbmcgKikgcHRlcHRyOworCS8qCisJICogU2lnbi1leHRlbmQgYmFzZWQgb24gTlBIWVMuCisJICovCisJKih4cCkgPSAoeCAmIE5QSFlTX1NJR04pID8gKHggfCBOUEhZU19NQVNLKSA6IHg7Cit9CisjZGVmaW5lIHNldF9wdGVfYXQobW0sYWRkcixwdGVwLHB0ZXZhbCkgc2V0X3B0ZShwdGVwLHB0ZXZhbCkKKworc3RhdGljIF9faW5saW5lX18gdm9pZCBwbWRfc2V0KHBtZF90ICpwbWRwLHB0ZV90ICpwdGVwKQoreworCXBtZF92YWwoKnBtZHApID0gKHVuc2lnbmVkIGxvbmcpIHB0ZXA7Cit9CisKKy8qCisgKiBQR0QgZGVmaW5lcy4gVG9wIGxldmVsLgorICovCisKKy8qIFRvIGZpbmQgYW4gZW50cnkgaW4gYSBnZW5lcmljIFBHRC4gKi8KKyNkZWZpbmUgcGdkX2luZGV4KGFkZHJlc3MpICgoKGFkZHJlc3MpID4+IFBHRElSX1NISUZUKSAmIChQVFJTX1BFUl9QR0QtMSkpCisjZGVmaW5lIF9fcGdkX29mZnNldChhZGRyZXNzKSBwZ2RfaW5kZXgoYWRkcmVzcykKKyNkZWZpbmUgcGdkX29mZnNldChtbSwgYWRkcmVzcykgKChtbSktPnBnZCtwZ2RfaW5kZXgoYWRkcmVzcykpCisKKy8qIFRvIGZpbmQgYW4gZW50cnkgaW4gYSBrZXJuZWwgUEdELiAqLworI2RlZmluZSBwZ2Rfb2Zmc2V0X2soYWRkcmVzcykgcGdkX29mZnNldCgmaW5pdF9tbSwgYWRkcmVzcykKKworLyoKKyAqIFBHRCBsZXZlbCBhY2Nlc3Mgcm91dGluZXMuCisgKgorICogTm90ZTE6CisgKiBUaGVyZSdzIG5vIG5lZWQgdG8gdXNlIHBoeXNpY2FsIGFkZHJlc3NlcyBzaW5jZSB0aGUgdHJlZSB3YWxrIGlzIGFsbAorICogaW4gcGVyZm9ybWVkIGluIHNvZnR3YXJlLCB1bnRpbCB0aGUgUFRFIHRyYW5zbGF0aW9uLgorICoKKyAqIE5vdGUgMjoKKyAqIEEgUEdEIGVudHJ5IGNhbiBiZSB1bmluaXRpYWxpemVkIChfUEdEX1VOVVNFRCksIGdlbmVyaWNhbGx5IGJhZCwKKyAqIGNsZWFyIChfUEdEX0VNUFRZKSwgcHJlc2VudC4gV2hlbiBwcmVzZW50LCBsb3dlciAzIG5pYmJsZXMgY29udGFpbgorICogX0tFUk5QR19UQUJMRS4gQmVpbmcgYSBrZXJuZWwgdmlydHVhbCBwb2ludGVyIGFsc28gYml0IDMxIG11c3QKKyAqIGJlIDEuIEFzc3VtaW5nIGFuIGFyYml0cmFyeSBjbGVhciB2YWx1ZSBvZiBiaXQgMzEgc2V0IHRvIDAgYW5kCisgKiBsb3dlciAzIG5pYmJsZXMgc2V0IHRvIDB4RkZGIChfUEdEX0VNUFRZKSBhbnkgb3RoZXIgdmFsdWUgaXMgYQorICogYmFkIHBnZCB0aGF0IG11c3QgYmUgbm90aWZpZWQgdmlhIHByaW50aygpLgorICoKKyAqLworI2RlZmluZSBfUEdEX0VNUFRZCQkweDAKKworI2lmIGRlZmluZWQoQ09ORklHX1NINjRfUEdUQUJMRV8yX0xFVkVMKQorc3RhdGljIGlubGluZSBpbnQgcGdkX25vbmUocGdkX3QgcGdkKQkJeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSBpbnQgcGdkX2JhZChwZ2RfdCBwZ2QpCQl7IHJldHVybiAwOyB9CisjZGVmaW5lIHBnZF9wcmVzZW50KHBnZCkgKChwZ2RfdmFsKHBnZCkgJiBfUEFHRV9QUkVTRU5UKSA/IDEgOiAwKQorI2RlZmluZSBwZ2RfY2xlYXIoeHgpCQkJCWRvIHsgfSB3aGlsZSgwKQorCisjZWxpZiBkZWZpbmVkKENPTkZJR19TSDY0X1BHVEFCTEVfM19MRVZFTCkKKyNkZWZpbmUgcGdkX3ByZXNlbnQocGdkX2VudHJ5KQkoMSkKKyNkZWZpbmUgcGdkX25vbmUocGdkX2VudHJ5KQkocGdkX3ZhbCgocGdkX2VudHJ5KSkgPT0gX1BHRF9FTVBUWSkKKy8qIFRPRE86IFRoaW5rIGxhdGVyIGFib3V0IHdoYXQgYSB1c2VmdWwgZGVmaW5pdGlvbiBvZiAnYmFkJyB3b3VsZCBiZSBub3cuICovCisjZGVmaW5lIHBnZF9iYWQocGdkX2VudHJ5KQkoMCkKKyNkZWZpbmUgcGdkX2NsZWFyKHBnZF9lbnRyeV9wKQkoc2V0X3BnZCgocGdkX2VudHJ5X3ApLCBfX3BnZChfUEdEX0VNUFRZKSkpCisKKyNlbmRpZgorCisKKyNkZWZpbmUgcGdkX3BhZ2UocGdkX2VudHJ5KQkoKHVuc2lnbmVkIGxvbmcpIChwZ2RfdmFsKHBnZF9lbnRyeSkgJiBQQUdFX01BU0spKQorCisvKgorICogUE1EIGRlZmluZXMuIE1pZGRsZSBsZXZlbC4KKyAqLworCisvKiBQR0QgdG8gUE1EIGRlcmVmZXJlbmNpbmcgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19TSDY0X1BHVEFCTEVfMl9MRVZFTCkKK3N0YXRpYyBpbmxpbmUgcG1kX3QgKiBwbWRfb2Zmc2V0KHBnZF90ICogZGlyLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisJcmV0dXJuIChwbWRfdCAqKSBkaXI7Cit9CisjZWxpZiBkZWZpbmVkKENPTkZJR19TSDY0X1BHVEFCTEVfM19MRVZFTCkKKyNkZWZpbmUgX19wbWRfb2Zmc2V0KGFkZHJlc3MpIFwKKwkJKCgoYWRkcmVzcykgPj4gUE1EX1NISUZUKSAmIChQVFJTX1BFUl9QTUQtMSkpCisjZGVmaW5lIHBtZF9vZmZzZXQoZGlyLCBhZGRyKSBcCisJCSgocG1kX3QgKikgKChwZ2RfdmFsKCooZGlyKSkpICYgUEFHRV9NQVNLKSArIF9fcG1kX29mZnNldCgoYWRkcikpKQorI2VuZGlmCisKKy8qCisgKiBQTUQgbGV2ZWwgYWNjZXNzIHJvdXRpbmVzLiBTYW1lIG5vdGVzIGFzIGFib3ZlLgorICovCisjZGVmaW5lIF9QTURfRU1QVFkJCTB4MAorLyogRWl0aGVyIHRoZSBQTUQgaXMgZW1wdHkgb3IgcHJlc2VudCwgaXQncyBub3QgcGFnZWQgb3V0ICovCisjZGVmaW5lIHBtZF9wcmVzZW50KHBtZF9lbnRyeSkJKHBtZF92YWwocG1kX2VudHJ5KSAmIF9QQUdFX1BSRVNFTlQpCisjZGVmaW5lIHBtZF9jbGVhcihwbWRfZW50cnlfcCkJKHNldF9wbWQoKHBtZF9lbnRyeV9wKSwgX19wbWQoX1BNRF9FTVBUWSkpKQorI2RlZmluZSBwbWRfbm9uZShwbWRfZW50cnkpCShwbWRfdmFsKChwbWRfZW50cnkpKSA9PSBfUE1EX0VNUFRZKQorI2RlZmluZSBwbWRfYmFkKHBtZF9lbnRyeSkJKChwbWRfdmFsKHBtZF9lbnRyeSkgJiAoflBBR0VfTUFTSyAmIH5fUEFHRV9VU0VSKSkgIT0gX0tFUk5QR19UQUJMRSkKKworI2RlZmluZSBwbWRfcGFnZV9rZXJuZWwocG1kX2VudHJ5KSBcCisJKCh1bnNpZ25lZCBsb25nKSBfX3ZhKHBtZF92YWwocG1kX2VudHJ5KSAmIFBBR0VfTUFTSykpCisKKyNkZWZpbmUgcG1kX3BhZ2UocG1kKSBcCisJKHZpcnRfdG9fcGFnZShwbWRfdmFsKHBtZCkpKQorCisvKiBQTUQgdG8gUFRFIGRlcmVmZXJlbmNpbmcgKi8KKyNkZWZpbmUgcHRlX2luZGV4KGFkZHJlc3MpIFwKKwkJKChhZGRyZXNzID4+IFBBR0VfU0hJRlQpICYgKFBUUlNfUEVSX1BURSAtIDEpKQorCisjZGVmaW5lIHB0ZV9vZmZzZXRfa2VybmVsKGRpciwgYWRkcikgXAorCQkoKHB0ZV90ICopICgocG1kX3ZhbCgqKGRpcikpKSAmIFBBR0VfTUFTSykgKyBwdGVfaW5kZXgoKGFkZHIpKSkKKworI2RlZmluZSBwdGVfb2Zmc2V0X21hcChkaXIsYWRkcikJcHRlX29mZnNldF9rZXJuZWwoZGlyLCBhZGRyKQorI2RlZmluZSBwdGVfb2Zmc2V0X21hcF9uZXN0ZWQoZGlyLGFkZHIpCXB0ZV9vZmZzZXRfa2VybmVsKGRpciwgYWRkcikKKyNkZWZpbmUgcHRlX3VubWFwKHB0ZSkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgcHRlX3VubWFwX25lc3RlZChwdGUpCWRvIHsgfSB3aGlsZSAoMCkKKworLyogUm91bmQgaXQgdXAgISAqLworI2RlZmluZSBVU0VSX1BUUlNfUEVSX1BHRAkoKFRBU0tfU0laRStQR0RJUl9TSVpFLTEpL1BHRElSX1NJWkUpCisjZGVmaW5lIEZJUlNUX1VTRVJfUEdEX05SCTAKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNkZWZpbmUgVk1BTExPQ19FTkQJMHhmZjAwMDAwMAorI2RlZmluZSBWTUFMTE9DX1NUQVJUCTB4ZjAwMDAwMDAKKyNkZWZpbmUgVk1BTExPQ19WTUFERFIoeCkgKCh1bnNpZ25lZCBsb25nKSh4KSkKKworI2RlZmluZSBJT0JBU0VfVkFERFIJMHhmZjAwMDAwMAorI2RlZmluZSBJT0JBU0VfRU5ECTB4ZmZmZmZmZmYKKworLyoKKyAqIFBURUwgY29oZXJlbnQgZmxhZ3MuCisgKiBTZWUgQ2hhcHRlciAxNyBTVDUwIENQVSBDb3JlIFZvbHVtZSAxLCBBcmNoaXRlY3R1cmUuCisgKi8KKy8qIFRoZSBiaXRzIHRoYXQgYXJlIHJlcXVpcmVkIGluIHRoZSBTSC01IFRMQiBhcmUgcGxhY2VkIGluIHRoZSBoL3ctZGVmaW5lZAorICAgcG9zaXRpb25zLCB0byBhdm9pZCBleHBlbnNpdmUgYml0IHNodWZmbGluZyBvbiBldmVyeSByZWZpbGwuICBUaGUgcmVtYWluaW5nCisgICBiaXRzIGFyZSB1c2VkIGZvciBzL3cgcHVycG9zZXMgYW5kIG1hc2tlZCBvdXQgb24gZWFjaCByZWZpbGwuCisKKyAgIE5vdGUsIHRoZSBQVEUgc2xvdHMgYXJlIHVzZWQgdG8gaG9sZCBkYXRhIG9mIHR5cGUgc3dwX2VudHJ5X3Qgd2hlbiBhIHBhZ2UgaXMKKyAgIHN3YXBwZWQgb3V0LiAgT25seSB0aGUgX1BBR0VfUFJFU0VOVCBmbGFnIGlzIHNpZ25pZmljYW50IHdoZW4gdGhlIHBhZ2UgaXMKKyAgIHN3YXBwZWQgb3V0LCBhbmQgaXQgbXVzdCBiZSBwbGFjZWQgc28gdGhhdCBpdCBkb2Vzbid0IG92ZXJsYXAgZWl0aGVyIHRoZQorICAgdHlwZSBvciBvZmZzZXQgZmllbGRzIG9mIHN3cF9lbnRyeV90LiAgRm9yIHg4Niwgb2Zmc2V0IGlzIGF0IFszMTo4XSBhbmQgdHlwZQorICAgYXQgWzY6MV0sIHdpdGggX1BBR0VfUFJFU0VOVCBhdCBiaXQgMCBmb3IgYm90aCBwdGVfdCBhbmQgc3dwX2VudHJ5X3QuICBUaGlzCisgICBzY2hlbWUgZG9lc24ndCBtYXAgdG8gU0gtNSBiZWNhdXNlIGJpdCBbMF0gY29udHJvbHMgY2FjaGVhYmlsaXR5LiAgU28gYml0CisgICBbMl0gaXMgdXNlZCBmb3IgX1BBR0VfUFJFU0VOVCBhbmQgdGhlIHR5cGUgZmllbGQgb2Ygc3dwX2VudHJ5X3QgaXMgc3BsaXQKKyAgIGludG8gMiBwaWVjZXMuICBUaGF0IGlzIGhhbmRsZWQgYnkgU1dQX0VOVFJZIGFuZCBTV1BfVFlQRSBiZWxvdy4gKi8KKyNkZWZpbmUgX1BBR0VfV1QJMHgwMDEgIC8qIENCMDogaWYgY2FjaGVhYmxlLCAxLT53cml0ZS10aHJ1LCAwLT53cml0ZS1iYWNrICovCisjZGVmaW5lIF9QQUdFX0RFVklDRQkweDAwMSAgLyogQ0IwOiBpZiB1bmNhY2hlYWJsZSwgMS0+ZGV2aWNlIChpLmUuIG5vIHdyaXRlLWNvbWJpbmluZyBvciByZW9yZGVyaW5nIGF0IGJ1cyBsZXZlbCkgKi8KKyNkZWZpbmUgX1BBR0VfQ0FDSEFCTEUJMHgwMDIgIC8qIENCMTogdW5jYWNoYWJsZS9jYWNoYWJsZSAqLworI2RlZmluZSBfUEFHRV9QUkVTRU5UCTB4MDA0ICAvKiBzb2Z0d2FyZTogcGFnZSByZWZlcmVuY2VkICovCisjZGVmaW5lIF9QQUdFX0ZJTEUJMHgwMDQgIC8qIHNvZnR3YXJlOiBvbmx5IHdoZW4gIXByZXNlbnQgKi8KKyNkZWZpbmUgX1BBR0VfU0laRTAJMHgwMDggIC8qIFNaMC1iaXQgOiBzaXplIG9mIHBhZ2UgKi8KKyNkZWZpbmUgX1BBR0VfU0laRTEJMHgwMTAgIC8qIFNaMS1iaXQgOiBzaXplIG9mIHBhZ2UgKi8KKyNkZWZpbmUgX1BBR0VfU0hBUkVECTB4MDIwICAvKiBzb2Z0d2FyZTogcmVmbGVjdHMgUFRFSCdzIFNIICovCisjZGVmaW5lIF9QQUdFX1JFQUQJMHgwNDAgIC8qIFBSMC1iaXQgOiByZWFkIGFjY2VzcyBhbGxvd2VkICovCisjZGVmaW5lIF9QQUdFX0VYRUNVVEUJMHgwODAgIC8qIFBSMS1iaXQgOiBleGVjdXRlIGFjY2VzcyBhbGxvd2VkICovCisjZGVmaW5lIF9QQUdFX1dSSVRFCTB4MTAwICAvKiBQUjItYml0IDogd3JpdGUgYWNjZXNzIGFsbG93ZWQgKi8KKyNkZWZpbmUgX1BBR0VfVVNFUgkweDIwMCAgLyogUFIzLWJpdCA6IHVzZXIgc3BhY2UgYWNjZXNzIGFsbG93ZWQgKi8KKyNkZWZpbmUgX1BBR0VfRElSVFkJMHg0MDAgIC8qIHNvZnR3YXJlOiBwYWdlIGFjY2Vzc2VkIGluIHdyaXRlICovCisjZGVmaW5lIF9QQUdFX0FDQ0VTU0VECTB4ODAwICAvKiBzb2Z0d2FyZTogcGFnZSByZWZlcmVuY2VkICovCisKKy8qIE1hc2sgd2hpY2ggZHJvcHMgc29mdHdhcmUgZmxhZ3MgKi8KKyNkZWZpbmUgX1BBR0VfRkxBR1NfSEFSRFdBUkVfTUFTSwkweGZmZmZmZmZmZmZmZmYzZGJMTAorCisvKgorICogSHVnZVRMQiBzdXBwb3J0CisgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0VfU0laRV82NEspCisjZGVmaW5lIF9QQUdFX1NaSFVHRQkoX1BBR0VfU0laRTApCisjZWxpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0VfU0laRV8xTUIpCisjZGVmaW5lIF9QQUdFX1NaSFVHRQkoX1BBR0VfU0laRTEpCisjZWxpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0VfU0laRV81MTJNQikKKyNkZWZpbmUgX1BBR0VfU1pIVUdFCShfUEFHRV9TSVpFMCB8IF9QQUdFX1NJWkUxKQorI2VuZGlmCisKKy8qCisgKiBEZWZhdWx0IGZsYWdzIGZvciBhIEtlcm5lbCBwYWdlLgorICogVGhpcyBpcyBmdW5kYW1ldGFsbHkgYWxzbyBTSEFSRUQgYmVjYXVzZSB0aGUgbWFpbiB1c2Ugb2YgdGhpcyBkZWZpbmUKKyAqIChvdGhlciB0aGFuIGZvciBQR0QvUE1EIGVudHJpZXMpIGlzIGZvciB0aGUgVk1BTExPQyBwb29sIHdoaWNoIGlzCisgKiBjb250ZXh0bGVzcy4KKyAqCisgKiBfUEFHRV9FWEVDVVRFIGlzIHJlcXVpcmVkIGZvciBtb2R1bGVzCisgKgorICovCisjZGVmaW5lIF9LRVJOUEdfVEFCTEUJKF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SRUFEIHwgX1BBR0VfV1JJVEUgfCBcCisJCQkgX1BBR0VfRVhFQ1VURSB8IFwKKwkJCSBfUEFHRV9DQUNIQUJMRSB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfRElSVFkgfCBcCisJCQkgX1BBR0VfU0hBUkVEKQorCisvKiBEZWZhdWx0IGZsYWdzIGZvciBhIFVzZXIgcGFnZSAqLworI2RlZmluZSBfUEFHRV9UQUJMRQkoX0tFUk5QR19UQUJMRSB8IF9QQUdFX1VTRVIpCisKKyNkZWZpbmUgX1BBR0VfQ0hHX01BU0sJKFBURV9NQVNLIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9ESVJUWSkKKworI2RlZmluZSBQQUdFX05PTkUJX19wZ3Byb3QoX1BBR0VfQ0FDSEFCTEUgfCBfUEFHRV9BQ0NFU1NFRCkKKyNkZWZpbmUgUEFHRV9TSEFSRUQJX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JFQUQgfCBfUEFHRV9XUklURSB8IFwKKwkJCQkgX1BBR0VfQ0FDSEFCTEUgfCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX1VTRVIgfCBcCisJCQkJIF9QQUdFX1NIQVJFRCkKKy8qIFdlIG5lZWQgdG8gaW5jbHVkZSBQQUdFX0VYRUNVVEUgaW4gUEFHRV9DT1BZIGJlY2F1c2UgaXQgaXMgdGhlIGRlZmF1bHQKKyAqIHByb3RlY3Rpb24gbW9kZSBmb3IgdGhlIHN0YWNrLiAqLworI2RlZmluZSBQQUdFX0NPUFkJX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JFQUQgfCBfUEFHRV9DQUNIQUJMRSB8IFwKKwkJCQkgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9VU0VSIHwgX1BBR0VfRVhFQ1VURSkKKyNkZWZpbmUgUEFHRV9SRUFET05MWQlfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUkVBRCB8IF9QQUdFX0NBQ0hBQkxFIHwgXAorCQkJCSBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX1VTRVIpCisjZGVmaW5lIFBBR0VfS0VSTkVMCV9fcGdwcm90KF9LRVJOUEdfVEFCTEUpCisKKworLyoKKyAqIEluIFNUNTAgd2UgaGF2ZSBmdWxsIHBlcm1pc3Npb25zIChSZWFkL1dyaXRlL0V4ZWN1dGUvU2hhcmVkKS4KKyAqIEp1c3QgbWF0Y2gnZW0gYWxsLiBUaGVzZSBhcmUgZm9yIG1tYXAoKSwgdGhlcmVmb3JlIGFsbCBhdCBsZWFzdAorICogVXNlci9DYWNoYWJsZS9QcmVzZW50L0FjY2Vzc2VkLiBObyBwb2ludCBpbiBtYWtpbmcgRmF1bHQgb24gV3JpdGUuCisgKi8KKyNkZWZpbmUgX19NTUFQX0NPTU1PTgkoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1VTRVIgfCBfUEFHRV9DQUNIQUJMRSB8IF9QQUdFX0FDQ0VTU0VEKQorICAgICAgIC8qIHN4d3IgKi8KKyNkZWZpbmUgX19QMDAwCV9fcGdwcm90KF9fTU1BUF9DT01NT04pCisjZGVmaW5lIF9fUDAwMQlfX3BncHJvdChfX01NQVBfQ09NTU9OIHwgX1BBR0VfUkVBRCkKKyNkZWZpbmUgX19QMDEwCV9fcGdwcm90KF9fTU1BUF9DT01NT04pCisjZGVmaW5lIF9fUDAxMQlfX3BncHJvdChfX01NQVBfQ09NTU9OIHwgX1BBR0VfUkVBRCkKKyNkZWZpbmUgX19QMTAwCV9fcGdwcm90KF9fTU1BUF9DT01NT04gfCBfUEFHRV9FWEVDVVRFKQorI2RlZmluZSBfX1AxMDEJX19wZ3Byb3QoX19NTUFQX0NPTU1PTiB8IF9QQUdFX0VYRUNVVEUgfCBfUEFHRV9SRUFEKQorI2RlZmluZSBfX1AxMTAJX19wZ3Byb3QoX19NTUFQX0NPTU1PTiB8IF9QQUdFX0VYRUNVVEUpCisjZGVmaW5lIF9fUDExMQlfX3BncHJvdChfX01NQVBfQ09NTU9OIHwgX1BBR0VfRVhFQ1VURSB8IF9QQUdFX1JFQUQpCisKKyNkZWZpbmUgX19TMDAwCV9fcGdwcm90KF9fTU1BUF9DT01NT04gfCBfUEFHRV9TSEFSRUQpCisjZGVmaW5lIF9fUzAwMQlfX3BncHJvdChfX01NQVBfQ09NTU9OIHwgX1BBR0VfU0hBUkVEIHwgX1BBR0VfUkVBRCkKKyNkZWZpbmUgX19TMDEwCV9fcGdwcm90KF9fTU1BUF9DT01NT04gfCBfUEFHRV9TSEFSRUQgfCBfUEFHRV9XUklURSkKKyNkZWZpbmUgX19TMDExCV9fcGdwcm90KF9fTU1BUF9DT01NT04gfCBfUEFHRV9TSEFSRUQgfCBfUEFHRV9SRUFEIHwgX1BBR0VfV1JJVEUpCisjZGVmaW5lIF9fUzEwMAlfX3BncHJvdChfX01NQVBfQ09NTU9OIHwgX1BBR0VfU0hBUkVEIHwgX1BBR0VfRVhFQ1VURSkKKyNkZWZpbmUgX19TMTAxCV9fcGdwcm90KF9fTU1BUF9DT01NT04gfCBfUEFHRV9TSEFSRUQgfCBfUEFHRV9FWEVDVVRFIHwgX1BBR0VfUkVBRCkKKyNkZWZpbmUgX19TMTEwCV9fcGdwcm90KF9fTU1BUF9DT01NT04gfCBfUEFHRV9TSEFSRUQgfCBfUEFHRV9FWEVDVVRFIHwgX1BBR0VfV1JJVEUpCisjZGVmaW5lIF9fUzExMQlfX3BncHJvdChfX01NQVBfQ09NTU9OIHwgX1BBR0VfU0hBUkVEIHwgX1BBR0VfRVhFQ1VURSB8IF9QQUdFX1JFQUQgfCBfUEFHRV9XUklURSkKKworLyogTWFrZSBpdCBhIGRldmljZSBtYXBwaW5nIGZvciBtYXhpbXVtIHNhZmV0eSAoZS5nLiBmb3IgbWFwcGluZyBkZXZpY2UKKyAgIHJlZ2lzdGVycyBpbnRvIHVzZXItc3BhY2UgdmlhIC9kZXYvbWFwKS4gICovCisjZGVmaW5lIHBncHJvdF9ub25jYWNoZWQoeCkgX19wZ3Byb3QoKCh4KS5wZ3Byb3QgJiB+KF9QQUdFX0NBQ0hBQkxFKSkgfCBfUEFHRV9ERVZJQ0UpCisjZGVmaW5lIHBncHJvdF93cml0ZWNvbWJpbmUocHJvdCkgX19wZ3Byb3QocGdwcm90X3ZhbChwcm90KSAmIH5fUEFHRV9DQUNIQUJMRSkKKworLyoKKyAqIEhhbmRsaW5nIGFsbG9jYXRpb24gZmFpbHVyZXMgZHVyaW5nIHBhZ2UgdGFibGUgc2V0dXAuCisgKi8KK2V4dGVybiB2b2lkIF9faGFuZGxlX2JhZF9wbWRfa2VybmVsKHBtZF90ICogcG1kKTsKKyNkZWZpbmUgX19oYW5kbGVfYmFkX3BtZCh4KQlfX2hhbmRsZV9iYWRfcG1kX2tlcm5lbCh4KQorCisvKgorICogUFRFIGxldmVsIGFjY2VzcyByb3V0aW5lcy4KKyAqCisgKiBOb3RlMToKKyAqIEl0J3MgdGhlIHRyZWUgd2FsayBsZWFmLiBUaGlzIGlzIHBoeXNpY2FsIGFkZHJlc3MgdG8gYmUgc3RvcmVkLgorICoKKyAqIE5vdGUgMjoKKyAqIFJlZ2FyZGluZyB0aGUgY2hvaWNlIG9mIF9QVEVfRU1QVFk6CisKKyAgIFdlIG11c3QgY2hvb3NlIGEgYml0IHBhdHRlcm4gdGhhdCBjYW5ub3QgYmUgdmFsaWQsIHdoZXRoZXIgb3Igbm90IHRoZSBwYWdlCisgICBpcyBwcmVzZW50LiAgYml0WzJdPT0xID0+IHByZXNlbnQsIGJpdFsyXT09MCA9PiBzd2FwcGVkIG91dC4gIElmIHN3YXBwZWQKKyAgIG91dCwgYml0cyBbMzE6OF0sIFs2OjNdLCBbMTowXSBhcmUgdW5kZXIgc3dhcHBlciBjb250cm9sLCBzbyBvbmx5IGJpdFs3XSBpcworICAgbGVmdCBmb3IgdXMgdG8gc2VsZWN0LiAgSWYgd2UgZm9yY2UgYml0WzddPT0wIHdoZW4gc3dhcHBlZCBvdXQsIHdlIGNvdWxkIHVzZQorICAgdGhlIGNvbWJpbmF0aW9uIGJpdFs3LDJdPTInYjEwIHRvIGluZGljYXRlIGFuIGVtcHR5IFBURS4gIEFsdGVybmF0aXZlbHksIGlmCisgICB3ZSBmb3JjZSBiaXRbN109PTEgd2hlbiBzd2FwcGVkIG91dCwgd2UgY2FuIHVzZSBhbGwgemVyb2VzIHRvIGluZGljYXRlCisgICBlbXB0eS4gIFRoaXMgaXMgY29udmVuaWVudCwgYmVjYXVzZSB0aGUgcGFnZSB0YWJsZXMgZ2V0IGNsZWFyZWQgdG8gemVybworICAgd2hlbiB0aGV5IGFyZSBhbGxvY2F0ZWQuCisKKyAqLworI2RlZmluZSBfUFRFX0VNUFRZCTB4MAorI2RlZmluZSBwdGVfcHJlc2VudCh4KQkocHRlX3ZhbCh4KSAmIF9QQUdFX1BSRVNFTlQpCisjZGVmaW5lIHB0ZV9jbGVhcihtbSxhZGRyLHhwKQkoc2V0X3B0ZV9hdChtbSwgYWRkciwgeHAsIF9fcHRlKF9QVEVfRU1QVFkpKSkKKyNkZWZpbmUgcHRlX25vbmUoeCkJKHB0ZV92YWwoeCkgPT0gX1BURV9FTVBUWSkKKworLyoKKyAqIFNvbWUgZGVmaW5pdGlvbnMgdG8gdHJhbnNsYXRlIGJldHdlZW4gbWVtX21hcCwgUFRFcywgYW5kIHBhZ2UKKyAqIGFkZHJlc3NlczoKKyAqLworCisvKgorICogR2l2ZW4gYSBQVEUsIHJldHVybiB0aGUgaW5kZXggb2YgdGhlIG1lbV9tYXBbXSBlbnRyeSBjb3JyZXNwb25kaW5nCisgKiB0byB0aGUgcGFnZSBmcmFtZSB0aGUgUFRFLiBHZXQgdGhlIGFic29sdXRlIHBoeXNpY2FsIGFkZHJlc3MsIG1ha2UKKyAqIGEgcmVsYXRpdmUgcGh5c2ljYWwgYWRkcmVzcyBhbmQgdHJhbnNsYXRlIGl0IHRvIGFuIGluZGV4LgorICovCisjZGVmaW5lIHB0ZV9wYWdlbnIoeCkJCSgoKHVuc2lnbmVkIGxvbmcpIChwdGVfdmFsKHgpKSAtIFwKKwkJCQkgX19NRU1PUllfU1RBUlQpID4+IFBBR0VfU0hJRlQpCisKKy8qCisgKiBHaXZlbiBhIFBURSwgcmV0dXJuIHRoZSAic3RydWN0IHBhZ2UgKiIuCisgKi8KKyNkZWZpbmUgcHRlX3BhZ2UoeCkJCShtZW1fbWFwICsgcHRlX3BhZ2Vucih4KSkKKworLyoKKyAqIFJldHVybiBudW1iZXIgb2YgKGRvd24gcm91bmRlZCkgTUIgY29ycmVzcG9uZGluZyB0byB4IHBhZ2VzLgorICovCisjZGVmaW5lIHBhZ2VzX3RvX21iKHgpICgoeCkgPj4gKDIwLVBBR0VfU0hJRlQpKQorCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGhhdmUgZGVmaW5lZCBiZWhhdmlvciBvbmx5IHdvcmsgaWYgcHRlX3ByZXNlbnQoKSBpcyB0cnVlLgorICovCitzdGF0aWMgaW5saW5lIGludCBwdGVfcmVhZChwdGVfdCBwdGUpIHsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX1JFQUQ7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9leGVjKHB0ZV90IHB0ZSkgeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfRVhFQ1VURTsgfQorc3RhdGljIGlubGluZSBpbnQgcHRlX2RpcnR5KHB0ZV90IHB0ZSl7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9ESVJUWTsgfQorc3RhdGljIGlubGluZSBpbnQgcHRlX3lvdW5nKHB0ZV90IHB0ZSl7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9BQ0NFU1NFRDsgfQorc3RhdGljIGlubGluZSBpbnQgcHRlX2ZpbGUocHRlX3QgcHRlKSB7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9GSUxFOyB9CitzdGF0aWMgaW5saW5lIGludCBwdGVfd3JpdGUocHRlX3QgcHRlKXsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX1dSSVRFOyB9CisKK2V4dGVybiBpbmxpbmUgcHRlX3QgcHRlX3JkcHJvdGVjdChwdGVfdCBwdGUpCXsgc2V0X3B0ZSgmcHRlLCBfX3B0ZShwdGVfdmFsKHB0ZSkgJiB+X1BBR0VfUkVBRCkpOyByZXR1cm4gcHRlOyB9CitleHRlcm4gaW5saW5lIHB0ZV90IHB0ZV93cnByb3RlY3QocHRlX3QgcHRlKQl7IHNldF9wdGUoJnB0ZSwgX19wdGUocHRlX3ZhbChwdGUpICYgfl9QQUdFX1dSSVRFKSk7IHJldHVybiBwdGU7IH0KK2V4dGVybiBpbmxpbmUgcHRlX3QgcHRlX2V4cHJvdGVjdChwdGVfdCBwdGUpCXsgc2V0X3B0ZSgmcHRlLCBfX3B0ZShwdGVfdmFsKHB0ZSkgJiB+X1BBR0VfRVhFQ1VURSkpOyByZXR1cm4gcHRlOyB9CitleHRlcm4gaW5saW5lIHB0ZV90IHB0ZV9ta2NsZWFuKHB0ZV90IHB0ZSkJeyBzZXRfcHRlKCZwdGUsIF9fcHRlKHB0ZV92YWwocHRlKSAmIH5fUEFHRV9ESVJUWSkpOyByZXR1cm4gcHRlOyB9CitleHRlcm4gaW5saW5lIHB0ZV90IHB0ZV9ta29sZChwdGVfdCBwdGUpCXsgc2V0X3B0ZSgmcHRlLCBfX3B0ZShwdGVfdmFsKHB0ZSkgJiB+X1BBR0VfQUNDRVNTRUQpKTsgcmV0dXJuIHB0ZTsgfQorCitleHRlcm4gaW5saW5lIHB0ZV90IHB0ZV9ta3JlYWQocHRlX3QgcHRlKQl7IHNldF9wdGUoJnB0ZSwgX19wdGUocHRlX3ZhbChwdGUpIHwgX1BBR0VfUkVBRCkpOyByZXR1cm4gcHRlOyB9CitleHRlcm4gaW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSkJeyBzZXRfcHRlKCZwdGUsIF9fcHRlKHB0ZV92YWwocHRlKSB8IF9QQUdFX1dSSVRFKSk7IHJldHVybiBwdGU7IH0KK2V4dGVybiBpbmxpbmUgcHRlX3QgcHRlX21rZXhlYyhwdGVfdCBwdGUpCXsgc2V0X3B0ZSgmcHRlLCBfX3B0ZShwdGVfdmFsKHB0ZSkgfCBfUEFHRV9FWEVDVVRFKSk7IHJldHVybiBwdGU7IH0KK2V4dGVybiBpbmxpbmUgcHRlX3QgcHRlX21rZGlydHkocHRlX3QgcHRlKQl7IHNldF9wdGUoJnB0ZSwgX19wdGUocHRlX3ZhbChwdGUpIHwgX1BBR0VfRElSVFkpKTsgcmV0dXJuIHB0ZTsgfQorZXh0ZXJuIGlubGluZSBwdGVfdCBwdGVfbWt5b3VuZyhwdGVfdCBwdGUpCXsgc2V0X3B0ZSgmcHRlLCBfX3B0ZShwdGVfdmFsKHB0ZSkgfCBfUEFHRV9BQ0NFU1NFRCkpOyByZXR1cm4gcHRlOyB9CisKKy8qCisgKiBDb252ZXJzaW9uIGZ1bmN0aW9uczogY29udmVydCBhIHBhZ2UgYW5kIHByb3RlY3Rpb24gdG8gYSBwYWdlIGVudHJ5LgorICoKKyAqIGV4dGVybiBwdGVfdCBta19wdGUoc3RydWN0IHBhZ2UgKnBhZ2UsIHBncHJvdF90IHBncHJvdCkKKyAqLworI2RlZmluZSBta19wdGUocGFnZSxwZ3Byb3QpCQkJCQkJCVwKKyh7CQkJCQkJCQkJCVwKKwlwdGVfdCBfX3B0ZTsJCQkJCQkJCVwKKwkJCQkJCQkJCQlcCisJc2V0X3B0ZSgmX19wdGUsIF9fcHRlKCgoKHBhZ2UpLW1lbV9tYXApIDw8IFBBR0VfU0hJRlQpIHwgCQlcCisJCV9fTUVNT1JZX1NUQVJUIHwgcGdwcm90X3ZhbCgocGdwcm90KSkpKTsJCQlcCisJX19wdGU7CQkJCQkJCQkJXAorfSkKKworLyoKKyAqIFRoaXMgdGFrZXMgYSAoYWJzb2x1dGUpIHBoeXNpY2FsIHBhZ2UgYWRkcmVzcyB0aGF0IGlzIHVzZWQKKyAqIGJ5IHRoZSByZW1hcHBpbmcgZnVuY3Rpb25zCisgKi8KKyNkZWZpbmUgbWtfcHRlX3BoeXMocGh5c3BhZ2UsIHBncHJvdCkgXAorKHsgcHRlX3QgX19wdGU7IHNldF9wdGUoJl9fcHRlLCBfX3B0ZShwaHlzcGFnZSB8IHBncHJvdF92YWwocGdwcm90KSkpOyBfX3B0ZTsgfSkKKworZXh0ZXJuIGlubGluZSBwdGVfdCBwdGVfbW9kaWZ5KHB0ZV90IHB0ZSwgcGdwcm90X3QgbmV3cHJvdCkKK3sgc2V0X3B0ZSgmcHRlLCBfX3B0ZSgocHRlX3ZhbChwdGUpICYgX1BBR0VfQ0hHX01BU0spIHwgcGdwcm90X3ZhbChuZXdwcm90KSkpOyByZXR1cm4gcHRlOyB9CisKKyNkZWZpbmUgcGFnZV9wdGVfcHJvdChwYWdlLCBwcm90KSBta19wdGUocGFnZSwgcHJvdCkKKyNkZWZpbmUgcGFnZV9wdGUocGFnZSkgcGFnZV9wdGVfcHJvdChwYWdlLCBfX3BncHJvdCgwKSkKKwordHlwZWRlZiBwdGVfdCAqcHRlX2FkZHJfdDsKKyNkZWZpbmUgcGd0YWJsZV9jYWNoZV9pbml0KCkJZG8geyB9IHdoaWxlICgwKQorCitleHRlcm4gdm9pZCB1cGRhdGVfbW11X2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIHZtYSwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdGVfdCBwdGUpOworCisvKiBFbmNvZGUgYW5kIGRlY29kZSBhIHN3YXAgZW50cnkgKi8KKyNkZWZpbmUgX19zd3BfdHlwZSh4KQkJCSgoKHgpLnZhbCAmIDMpICsgKCgoeCkudmFsID4+IDEpICYgMHgzYykpCisjZGVmaW5lIF9fc3dwX29mZnNldCh4KQkJCSgoeCkudmFsID4+IDgpCisjZGVmaW5lIF9fc3dwX2VudHJ5KHR5cGUsIG9mZnNldCkJKChzd3BfZW50cnlfdCkgeyAoKG9mZnNldCA8PCA4KSArICgodHlwZSAmIDB4M2MpIDw8IDEpICsgKHR5cGUgJiAzKSkgfSkKKyNkZWZpbmUgX19wdGVfdG9fc3dwX2VudHJ5KHB0ZSkJCSgoc3dwX2VudHJ5X3QpIHsgcHRlX3ZhbChwdGUpIH0pCisjZGVmaW5lIF9fc3dwX2VudHJ5X3RvX3B0ZSh4KQkJKChwdGVfdCkgeyAoeCkudmFsIH0pCisKKy8qIEVuY29kZSBhbmQgZGVjb2RlIGEgbm9ubGluZWFyIGZpbGUgbWFwcGluZyBlbnRyeSAqLworI2RlZmluZSBQVEVfRklMRV9NQVhfQklUUwkJMjkKKyNkZWZpbmUgcHRlX3RvX3Bnb2ZmKHB0ZSkJCShwdGVfdmFsKHB0ZSkpCisjZGVmaW5lIHBnb2ZmX3RvX3B0ZShvZmYpCQkoKHB0ZV90KSB7IChvZmYpIHwgX1BBR0VfRklMRSB9KQorCisvKiBOZWVkcyB0byBiZSBkZWZpbmVkIGhlcmUgYW5kIG5vdCBpbiBsaW51eC9tbS5oLCBhcyBpdCBpcyBhcmNoIGRlcGVuZGVudCAqLworI2RlZmluZSBQYWdlU2tpcChwYWdlKQkJKDApCisjZGVmaW5lIGtlcm5fYWRkcl92YWxpZChhZGRyKQkoMSkKKworI2RlZmluZSBpb19yZW1hcF9wYWdlX3JhbmdlKHZtYSwgdmFkZHIsIHBhZGRyLCBzaXplLCBwcm90KQkJXAorCQlyZW1hcF9wZm5fcmFuZ2Uodm1hLCB2YWRkciwgKHBhZGRyKSA+PiBQQUdFX1NISUZULCBzaXplLCBwcm90KQorCisjZGVmaW5lIGlvX3JlbWFwX3Bmbl9yYW5nZSh2bWEsIHZhZGRyLCBwZm4sIHNpemUsIHByb3QpCQlcCisJCXJlbWFwX3Bmbl9yYW5nZSh2bWEsIHZhZGRyLCBwZm4sIHNpemUsIHByb3QpCisKKyNkZWZpbmUgTUtfSU9TUEFDRV9QRk4oc3BhY2UsIHBmbikJKHBmbikKKyNkZWZpbmUgR0VUX0lPU1BBQ0UocGZuKQkJMAorI2RlZmluZSBHRVRfUEZOKHBmbikJCQkocGZuKQorCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisvKgorICogTm8gcGFnZSB0YWJsZSBjYWNoZXMgdG8gaW5pdGlhbGlzZQorICovCisjZGVmaW5lIHBndGFibGVfY2FjaGVfaW5pdCgpICAgIGRvIHsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBwdGVfcGZuKHgpCQkoKCh1bnNpZ25lZCBsb25nKSgoeCkucHRlKSkgPj4gUEFHRV9TSElGVCkKKyNkZWZpbmUgcGZuX3B0ZShwZm4sIHByb3QpCV9fcHRlKCgocGZuKSA8PCBQQUdFX1NISUZUKSB8IHBncHJvdF92YWwocHJvdCkpCisjZGVmaW5lIHBmbl9wbWQocGZuLCBwcm90KQlfX3BtZCgoKHBmbikgPDwgUEFHRV9TSElGVCkgfCBwZ3Byb3RfdmFsKHByb3QpKQorCitleHRlcm4gcGdkX3Qgc3dhcHBlcl9wZ19kaXJbUFRSU19QRVJfUEdEXTsKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BndGFibGUuaD4KKworI2VuZGlmIC8qIF9fQVNNX1NINjRfUEdUQUJMRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaDY0L3BsYXRmb3JtLmggYi9pbmNsdWRlL2FzbS1zaDY0L3BsYXRmb3JtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA0NmE5MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoNjQvcGxhdGZvcm0uaApAQCAtMCwwICsxLDY5IEBACisjaWZuZGVmIF9fQVNNX1NINjRfUExBVEZPUk1fSAorI2RlZmluZSBfX0FTTV9TSDY0X1BMQVRGT1JNX0gKKworLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIGluY2x1ZGUvYXNtLXNoNjQvcGxhdGZvcm0uaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSAgUGFvbG8gQWxiZXJlbGxpCisgKgorICogYmVuZWRpY3QuZ2FzdGVyQHN1cGVyaC5jb206CSAzcmQgTWF5IDIwMDIKKyAqICAgIEFkZGVkIHN1cHBvcnQgZm9yIHJhbWRpc2ssIHJlbW92aW5nIHN0YXRpY2FsbHkgbGlua2VkIHJvbWZzIGF0IHRoZSBzYW1lIHRpbWUuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKworCisvKgorICogUGxhdGZvcm0gZGVmaW5pdGlvbiBzdHJ1Y3R1cmUuCisgKi8KK3N0cnVjdCBzaDY0X3BsYXRmb3JtIHsKKwl1bnNpZ25lZCBpbnQgcmVhZG9ubHlfcm9vdGZzOworCXVuc2lnbmVkIGludCByYW1kaXNrX2ZsYWdzOworCXVuc2lnbmVkIGludCBpbml0aWFsX3Jvb3RfZGV2OworCXVuc2lnbmVkIGludCBsb2FkZXJfdHlwZTsKKwl1bnNpZ25lZCBpbnQgaW5pdHJkX3N0YXJ0OworCXVuc2lnbmVkIGludCBpbml0cmRfc2l6ZTsKKwl1bnNpZ25lZCBpbnQgZnB1X2ZsYWdzOworCXVuc2lnbmVkIGludCBpb19yZXNfY291bnQ7CisJdW5zaWduZWQgaW50IGtyYW1fcmVzX2NvdW50OworCXVuc2lnbmVkIGludCB4cmFtX3Jlc19jb3VudDsKKwl1bnNpZ25lZCBpbnQgcm9tX3Jlc19jb3VudDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKmlvX3Jlc19wOworCXN0cnVjdCByZXNvdXJjZSAqa3JhbV9yZXNfcDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnhyYW1fcmVzX3A7CisJc3RydWN0IHJlc291cmNlICpyb21fcmVzX3A7Cit9OworCitleHRlcm4gc3RydWN0IHNoNjRfcGxhdGZvcm0gcGxhdGZvcm1fcGFybXM7CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgbWVtb3J5X3N0YXJ0LCBtZW1vcnlfZW5kOworCitleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGZwdV9pbl91c2U7CisKK2V4dGVybiBpbnQgcGxhdGZvcm1faW50X3ByaW9yaXR5W05SX0lOVENfSVJRU107CisKKyNkZWZpbmUgRlBVX0ZMQUdTCQkocGxhdGZvcm1fcGFybXMuZnB1X2ZsYWdzKQorI2RlZmluZSBTVEFOREFSRF9JT19SRVNPVVJDRVMJKHBsYXRmb3JtX3Bhcm1zLmlvX3Jlc19jb3VudCkKKyNkZWZpbmUgU1RBTkRBUkRfS1JBTV9SRVNPVVJDRVMJKHBsYXRmb3JtX3Bhcm1zLmtyYW1fcmVzX2NvdW50KQorI2RlZmluZSBTVEFOREFSRF9YUkFNX1JFU09VUkNFUwkocGxhdGZvcm1fcGFybXMueHJhbV9yZXNfY291bnQpCisjZGVmaW5lIFNUQU5EQVJEX1JPTV9SRVNPVVJDRVMJKHBsYXRmb3JtX3Bhcm1zLnJvbV9yZXNfY291bnQpCisKKy8qCisgKiBLZXJuZWwgTWVtb3J5IGRlc2NyaXB0aW9uLCBSZXNwZWN0aXZlbHk6CisgKiBjb2RlID0gbGFzdCBidXQgb25lIG1lbW9yeSBkZXNjcmlwdG9yCisgKiBkYXRhID0gbGFzdCBtZW1vcnkgZGVzY3JpcHRvcgorICovCisjZGVmaW5lIGNvZGVfcmVzb3VyY2UgKHBsYXRmb3JtX3Bhcm1zLmtyYW1fcmVzX3BbU1RBTkRBUkRfS1JBTV9SRVNPVVJDRVMgLSAyXSkKKyNkZWZpbmUgZGF0YV9yZXNvdXJjZSAocGxhdGZvcm1fcGFybXMua3JhbV9yZXNfcFtTVEFOREFSRF9LUkFNX1JFU09VUkNFUyAtIDFdKQorCisvKiBCZSBwcmVwYXJlZCB0byA2NC1iaXQgc2lnbiBleHRlbnNpb25zICovCisjZGVmaW5lIFBGTl9VUCh4KSAgICAgICAoKCgoeCkgKyBQQUdFX1NJWkUtMSkgPj4gUEFHRV9TSElGVCkgJiAweDAwMGZmZmZmKQorI2RlZmluZSBQRk5fRE9XTih4KSAgICAgKCgoeCkgPj4gUEFHRV9TSElGVCkgJiAweDAwMGZmZmZmKQorI2RlZmluZSBQRk5fUEhZUyh4KSAgICAgKCh4KSA8PCBQQUdFX1NISUZUKQorCisjZW5kaWYJLyogX19BU01fU0g2NF9QTEFURk9STV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaDY0L3BvbGwuaCBiL2luY2x1ZGUvYXNtLXNoNjQvcG9sbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0MjBkMTQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaDY0L3BvbGwuaApAQCAtMCwwICsxLDM2IEBACisjaWZuZGVmIF9fQVNNX1NINjRfUE9MTF9ICisjZGVmaW5lIF9fQVNNX1NINjRfUE9MTF9ICisKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBpbmNsdWRlL2FzbS1zaDY0L3BvbGwuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSAgUGFvbG8gQWxiZXJlbGxpCisgKgorICovCisKKy8qIFRoZXNlIGFyZSBzcGVjaWZpZWQgYnkgaUJDUzIgKi8KKyNkZWZpbmUgUE9MTElOCQkweDAwMDEKKyNkZWZpbmUgUE9MTFBSSQkJMHgwMDAyCisjZGVmaW5lIFBPTExPVVQJCTB4MDAwNAorI2RlZmluZSBQT0xMRVJSCQkweDAwMDgKKyNkZWZpbmUgUE9MTEhVUAkJMHgwMDEwCisjZGVmaW5lIFBPTExOVkFMCTB4MDAyMAorCisvKiBUaGUgcmVzdCBzZWVtIHRvIGJlIG1vcmUtb3ItbGVzcyBub25zdGFuZGFyZC4gQ2hlY2sgdGhlbSEgKi8KKyNkZWZpbmUgUE9MTFJETk9STQkweDAwNDAKKyNkZWZpbmUgUE9MTFJEQkFORAkweDAwODAKKyNkZWZpbmUgUE9MTFdSTk9STQkweDAxMDAKKyNkZWZpbmUgUE9MTFdSQkFORAkweDAyMDAKKyNkZWZpbmUgUE9MTE1TRwkJMHgwNDAwCisKK3N0cnVjdCBwb2xsZmQgeworCWludCBmZDsKKwlzaG9ydCBldmVudHM7CisJc2hvcnQgcmV2ZW50czsKK307CisKKyNlbmRpZiAvKiBfX0FTTV9TSDY0X1BPTExfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2g2NC9wb3NpeF90eXBlcy5oIGIvaW5jbHVkZS9hc20tc2g2NC9wb3NpeF90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2MjAzMTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaDY0L3Bvc2l4X3R5cGVzLmgKQEAgLTAsMCArMSwxMzEgQEAKKyNpZm5kZWYgX19BU01fU0g2NF9QT1NJWF9UWVBFU19ICisjZGVmaW5lIF9fQVNNX1NINjRfUE9TSVhfVFlQRVNfSAorCisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogaW5jbHVkZS9hc20tc2g2NC9wb3NpeF90eXBlcy5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxICBQYW9sbyBBbGJlcmVsbGkKKyAqIENvcHlyaWdodCAoQykgMjAwMyAgUGF1bCBNdW5kdAorICoKKyAqIFRoaXMgZmlsZSBpcyBnZW5lcmFsbHkgdXNlZCBieSB1c2VyLWxldmVsIHNvZnR3YXJlLCBzbyB5b3UgbmVlZCB0bworICogYmUgYSBsaXR0bGUgY2FyZWZ1bCBhYm91dCBuYW1lc3BhY2UgcG9sbHV0aW9uIGV0Yy4gIEFsc28sIHdlIGNhbm5vdAorICogYXNzdW1lIEdDQyBpcyBiZWluZyB1c2VkLgorICovCisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZwlfX2tlcm5lbF9pbm9fdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJX19rZXJuZWxfbW9kZV90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAlfX2tlcm5lbF9ubGlua190OwordHlwZWRlZiBsb25nCQlfX2tlcm5lbF9vZmZfdDsKK3R5cGVkZWYgaW50CQlfX2tlcm5lbF9waWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJX19rZXJuZWxfaXBjX3BpZF90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAlfX2tlcm5lbF91aWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJX19rZXJuZWxfZ2lkX3Q7Cit0eXBlZGVmIGxvbmcgdW5zaWduZWQgaW50CV9fa2VybmVsX3NpemVfdDsKK3R5cGVkZWYgaW50CQlfX2tlcm5lbF9zc2l6ZV90OwordHlwZWRlZiBpbnQJCV9fa2VybmVsX3B0cmRpZmZfdDsKK3R5cGVkZWYgbG9uZwkJX19rZXJuZWxfdGltZV90OwordHlwZWRlZiBsb25nCQlfX2tlcm5lbF9zdXNlY29uZHNfdDsKK3R5cGVkZWYgbG9uZwkJX19rZXJuZWxfY2xvY2tfdDsKK3R5cGVkZWYgaW50CQlfX2tlcm5lbF90aW1lcl90OwordHlwZWRlZiBpbnQJCV9fa2VybmVsX2Nsb2NraWRfdDsKK3R5cGVkZWYgaW50CQlfX2tlcm5lbF9kYWRkcl90OwordHlwZWRlZiBjaGFyICoJCV9fa2VybmVsX2NhZGRyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CV9fa2VybmVsX3VpZDE2X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CV9fa2VybmVsX2dpZDE2X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludAlfX2tlcm5lbF91aWQzMl90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQJX19rZXJuZWxfZ2lkMzJfdDsKKwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAlfX2tlcm5lbF9vbGRfdWlkX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CV9fa2VybmVsX29sZF9naWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJX19rZXJuZWxfb2xkX2Rldl90OworCisjaWZkZWYgX19HTlVDX18KK3R5cGVkZWYgbG9uZyBsb25nCV9fa2VybmVsX2xvZmZfdDsKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCB7CisjaWYgZGVmaW5lZChfX0tFUk5FTF9fKSB8fCBkZWZpbmVkKF9fVVNFX0FMTCkKKwlpbnQJdmFsWzJdOworI2Vsc2UgLyogIWRlZmluZWQoX19LRVJORUxfXykgJiYgIWRlZmluZWQoX19VU0VfQUxMKSAqLworCWludAlfX3ZhbFsyXTsKKyNlbmRpZiAvKiAhZGVmaW5lZChfX0tFUk5FTF9fKSAmJiAhZGVmaW5lZChfX1VTRV9BTEwpICovCit9IF9fa2VybmVsX2ZzaWRfdDsKKworI2lmIGRlZmluZWQoX19LRVJORUxfXykgfHwgIWRlZmluZWQoX19HTElCQ19fKSB8fCAoX19HTElCQ19fIDwgMikKKworI3VuZGVmCV9fRkRfU0VUCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fRkRfU0VUKHVuc2lnbmVkIGxvbmcgX19mZCwgX19rZXJuZWxfZmRfc2V0ICpfX2Zkc2V0cCkKK3sKKwl1bnNpZ25lZCBsb25nIF9fdG1wID0gX19mZCAvIF9fTkZEQklUUzsKKwl1bnNpZ25lZCBsb25nIF9fcmVtID0gX19mZCAlIF9fTkZEQklUUzsKKwlfX2Zkc2V0cC0+ZmRzX2JpdHNbX190bXBdIHw9ICgxVUw8PF9fcmVtKTsKK30KKworI3VuZGVmCV9fRkRfQ0xSCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fRkRfQ0xSKHVuc2lnbmVkIGxvbmcgX19mZCwgX19rZXJuZWxfZmRfc2V0ICpfX2Zkc2V0cCkKK3sKKwl1bnNpZ25lZCBsb25nIF9fdG1wID0gX19mZCAvIF9fTkZEQklUUzsKKwl1bnNpZ25lZCBsb25nIF9fcmVtID0gX19mZCAlIF9fTkZEQklUUzsKKwlfX2Zkc2V0cC0+ZmRzX2JpdHNbX190bXBdICY9IH4oMVVMPDxfX3JlbSk7Cit9CisKKworI3VuZGVmCV9fRkRfSVNTRVQKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0ZEX0lTU0VUKHVuc2lnbmVkIGxvbmcgX19mZCwgY29uc3QgX19rZXJuZWxfZmRfc2V0ICpfX3ApCit7CisJdW5zaWduZWQgbG9uZyBfX3RtcCA9IF9fZmQgLyBfX05GREJJVFM7CisJdW5zaWduZWQgbG9uZyBfX3JlbSA9IF9fZmQgJSBfX05GREJJVFM7CisJcmV0dXJuIChfX3AtPmZkc19iaXRzW19fdG1wXSAmICgxVUw8PF9fcmVtKSkgIT0gMDsKK30KKworLyoKKyAqIFRoaXMgd2lsbCB1bnJvbGwgdGhlIGxvb3AgZm9yIHRoZSBub3JtYWwgY29uc3RhbnQgY2FzZSAoOCBpbnRzLAorICogZm9yIGEgMjU2LWJpdCBmZF9zZXQpCisgKi8KKyN1bmRlZglfX0ZEX1pFUk8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19GRF9aRVJPKF9fa2VybmVsX2ZkX3NldCAqX19wKQoreworCXVuc2lnbmVkIGxvbmcgKl9fdG1wID0gX19wLT5mZHNfYml0czsKKwlpbnQgX19pOworCisJaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKF9fRkRTRVRfTE9OR1MpKSB7CisJCXN3aXRjaCAoX19GRFNFVF9MT05HUykgeworCQljYXNlIDE2OgorCQkJX190bXBbIDBdID0gMDsgX190bXBbIDFdID0gMDsKKwkJCV9fdG1wWyAyXSA9IDA7IF9fdG1wWyAzXSA9IDA7CisJCQlfX3RtcFsgNF0gPSAwOyBfX3RtcFsgNV0gPSAwOworCQkJX190bXBbIDZdID0gMDsgX190bXBbIDddID0gMDsKKwkJCV9fdG1wWyA4XSA9IDA7IF9fdG1wWyA5XSA9IDA7CisJCQlfX3RtcFsxMF0gPSAwOyBfX3RtcFsxMV0gPSAwOworCQkJX190bXBbMTJdID0gMDsgX190bXBbMTNdID0gMDsKKwkJCV9fdG1wWzE0XSA9IDA7IF9fdG1wWzE1XSA9IDA7CisJCQlyZXR1cm47CisKKwkJY2FzZSA4OgorCQkJX190bXBbIDBdID0gMDsgX190bXBbIDFdID0gMDsKKwkJCV9fdG1wWyAyXSA9IDA7IF9fdG1wWyAzXSA9IDA7CisJCQlfX3RtcFsgNF0gPSAwOyBfX3RtcFsgNV0gPSAwOworCQkJX190bXBbIDZdID0gMDsgX190bXBbIDddID0gMDsKKwkJCXJldHVybjsKKworCQljYXNlIDQ6CisJCQlfX3RtcFsgMF0gPSAwOyBfX3RtcFsgMV0gPSAwOworCQkJX190bXBbIDJdID0gMDsgX190bXBbIDNdID0gMDsKKwkJCXJldHVybjsKKwkJfQorCX0KKwlfX2kgPSBfX0ZEU0VUX0xPTkdTOworCXdoaWxlIChfX2kpIHsKKwkJX19pLS07CisJCSpfX3RtcCA9IDA7CisJCV9fdG1wKys7CisJfQorfQorCisjZW5kaWYgLyogZGVmaW5lZChfX0tFUk5FTF9fKSB8fCAhZGVmaW5lZChfX0dMSUJDX18pIHx8IChfX0dMSUJDX18gPCAyKSAqLworCisjZW5kaWYgLyogX19BU01fU0g2NF9QT1NJWF9UWVBFU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaDY0L3Byb2Nlc3Nvci5oIGIvaW5jbHVkZS9hc20tc2g2NC9wcm9jZXNzb3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTFiZDQxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2g2NC9wcm9jZXNzb3IuaApAQCAtMCwwICsxLDI4NiBAQAorI2lmbmRlZiBfX0FTTV9TSDY0X1BST0NFU1NPUl9ICisjZGVmaW5lIF9fQVNNX1NINjRfUFJPQ0VTU09SX0gKKworLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIGluY2x1ZGUvYXNtLXNoNjQvcHJvY2Vzc29yLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEgIFBhb2xvIEFsYmVyZWxsaQorICogQ29weXJpZ2h0IChDKSAyMDAzICBQYXVsIE11bmR0CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgIFJpY2hhcmQgQ3Vybm93CisgKgorICovCisKKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CisjaW5jbHVkZSA8YXNtL3JlZ2lzdGVycy5oPgorI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKworLyoKKyAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgbWFjcm8gdGhhdCByZXR1cm5zIGN1cnJlbnQKKyAqIGluc3RydWN0aW9uIHBvaW50ZXIgKCJwcm9ncmFtIGNvdW50ZXIiKS4KKyAqLworI2RlZmluZSBjdXJyZW50X3RleHRfYWRkcigpICh7IFwKK3ZvaWQgKnBjOyBcCit1bnNpZ25lZCBsb25nIGxvbmcgX19kdW1teSA9IDA7IFwKK19fYXNtX18oImdldHRyCXRyMCwgJTFcblx0IiBcCisJInB0YQk0LCB0cjBcblx0IiBcCisJImdldHRyCXRyMCwgJTBcblx0IiBcCisJInB0YWJzCSUxLCB0cjBcblx0IglcCisJOiI9ciIgKHBjKSwgIj1yIiAoX19kdW1teSkgXAorCTogIjEiIChfX2R1bW15KSk7IFwKK3BjOyB9KQorCisvKgorICogIENQVSB0eXBlIGFuZCBoYXJkd2FyZSBidWcgZmxhZ3MuIEtlcHQgc2VwYXJhdGVseSBmb3IgZWFjaCBDUFUuCisgKi8KK2VudW0gY3B1X3R5cGUgeworCUNQVV9TSDVfMTAxLAorCUNQVV9TSDVfMTAzLAorCUNQVV9TSF9OT05FCit9OworCisvKgorICogVExCIGluZm9ybWF0aW9uIHN0cnVjdHVyZQorICoKKyAqIERlZmluZWQgZm9yIGJvdGggSSBhbmQgRCB0bGIsIHBlci1wcm9jZXNzb3IuCisgKi8KK3N0cnVjdCB0bGJfaW5mbyB7CisJdW5zaWduZWQgbG9uZyBsb25nIG5leHQ7CisJdW5zaWduZWQgbG9uZyBsb25nIGZpcnN0OworCXVuc2lnbmVkIGxvbmcgbG9uZyBsYXN0OworCisJdW5zaWduZWQgaW50IGVudHJpZXM7CisJdW5zaWduZWQgaW50IHN0ZXA7CisKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworfTsKKworc3RydWN0IHNoX2NwdWluZm8geworCWVudW0gY3B1X3R5cGUgdHlwZTsKKwl1bnNpZ25lZCBsb25nIGxvb3BzX3Blcl9qaWZmeTsKKworCWNoYXIJaGFyZF9tYXRoOworCisJdW5zaWduZWQgbG9uZyAqcGdkX3F1aWNrOworCXVuc2lnbmVkIGxvbmcgKnBtZF9xdWljazsKKwl1bnNpZ25lZCBsb25nICpwdGVfcXVpY2s7CisJdW5zaWduZWQgbG9uZyBwZ3RhYmxlX2NhY2hlX3N6OworCXVuc2lnbmVkIGludCBjcHVfY2xvY2ssIG1hc3Rlcl9jbG9jaywgYnVzX2Nsb2NrLCBtb2R1bGVfY2xvY2s7CisKKwkvKiBDYWNoZSBpbmZvICovCisJc3RydWN0IGNhY2hlX2luZm8gaWNhY2hlOworCXN0cnVjdCBjYWNoZV9pbmZvIGRjYWNoZTsKKworCS8qIFRMQiBpbmZvICovCisJc3RydWN0IHRsYl9pbmZvIGl0bGI7CisJc3RydWN0IHRsYl9pbmZvIGR0bGI7Cit9OworCitleHRlcm4gc3RydWN0IHNoX2NwdWluZm8gYm9vdF9jcHVfZGF0YTsKKworI2RlZmluZSBjcHVfZGF0YSAoJmJvb3RfY3B1X2RhdGEpCisjZGVmaW5lIGN1cnJlbnRfY3B1X2RhdGEgYm9vdF9jcHVfZGF0YQorCisjZW5kaWYKKworLyoKKyAqIFVzZXIgc3BhY2UgcHJvY2VzcyBzaXplOiAyR0IgLSA0ay4KKyAqLworI2RlZmluZSBUQVNLX1NJWkUJMHg3ZmZmZjAwMFVMCisKKy8qIFRoaXMgZGVjaWRlcyB3aGVyZSB0aGUga2VybmVsIHdpbGwgc2VhcmNoIGZvciBhIGZyZWUgY2h1bmsgb2Ygdm0KKyAqIHNwYWNlIGR1cmluZyBtbWFwJ3MuCisgKi8KKyNkZWZpbmUgVEFTS19VTk1BUFBFRF9CQVNFCShUQVNLX1NJWkUgLyAzKQorCisvKgorICogQml0IG9mIFNSIHJlZ2lzdGVyCisgKgorICogRkQtYml0OgorICogICAgIFdoZW4gaXQncyBzZXQsIGl0IG1lYW5zIHRoZSBwcm9jZXNzb3IgZG9lc24ndCBoYXZlIHJpZ2h0IHRvIHVzZSBGUFUsCisgKiAgICAgYW5kIGl0IHJlc3VsdHMgZXhjZXB0aW9uIHdoZW4gdGhlIGZsb2F0aW5nIG9wZXJhdGlvbiBpcyBleGVjdXRlZC4KKyAqCisgKiBJTUFTSy1iaXQ6CisgKiAgICAgSW50ZXJydXB0IGxldmVsIG1hc2sKKyAqCisgKiBTVEVQLWJpdDoKKyAqICAgICBTaW5nbGUgc3RlcCBiaXQKKyAqCisgKi8KKyNkZWZpbmUgU1JfRkQgICAgMHgwMDAwODAwMAorCisjaWYgZGVmaW5lZChDT05GSUdfU0g2NF9TUl9XQVRDSCkKKyNkZWZpbmUgU1JfTU1VICAgMHg4NDAwMDAwMAorI2Vsc2UKKyNkZWZpbmUgU1JfTU1VICAgMHg4MDAwMDAwMAorI2VuZGlmCisKKyNkZWZpbmUgU1JfSU1BU0sgMHgwMDAwMDBmMAorI2RlZmluZSBTUl9TU1RFUCAweDA4MDAwMDAwCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKy8qCisgKiBGUFUgc3RydWN0dXJlIGFuZCBkYXRhIDogcmVxdWlyZSA4LWJ5dGUgYWxpZ25tZW50IGFzIHdlIG5lZWQgdG8gYWNjZXNzIGl0CisgICB3aXRoIGZsZC5wLCBmc3QucAorICovCisKK3N0cnVjdCBzaF9mcHVfaGFyZF9zdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcgZnBfcmVnc1s2NF07CisJdW5zaWduZWQgaW50IGZwc2NyOworCS8qIGxvbmcgc3RhdHVzOyAqIHNvZnR3YXJlIHN0YXR1cyBpbmZvcm1hdGlvbiAqLworfTsKKworI2lmIDAKKy8qIER1bW15IGZwdSBlbXVsYXRvciAgKi8KK3N0cnVjdCBzaF9mcHVfc29mdF9zdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcgbG9uZyBmcF9yZWdzWzMyXTsKKwl1bnNpZ25lZCBpbnQgZnBzY3I7CisJdW5zaWduZWQgY2hhciBsb29rYWhlYWQ7CisJdW5zaWduZWQgbG9uZyBlbnRyeV9wYzsKK307CisjZW5kaWYKKwordW5pb24gc2hfZnB1X3VuaW9uIHsKKwlzdHJ1Y3Qgc2hfZnB1X2hhcmRfc3RydWN0IGhhcmQ7CisJLyogJ2hhcmQnIGl0c2VsZiBvbmx5IHByb2R1Y2VzIDMyIGJpdCBhbGlnbm1lbnQsIHlldCB3ZSBuZWVkCisJICAgdG8gYWNjZXNzIGl0IHVzaW5nIDY0IGJpdCBsb2FkL3N0b3JlIGFzIHdlbGwuICovCisJdW5zaWduZWQgbG9uZyBsb25nIGFsaWdubWVudF9kdW1teTsKK307CisKK3N0cnVjdCB0aHJlYWRfc3RydWN0IHsKKwl1bnNpZ25lZCBsb25nIHNwOworCXVuc2lnbmVkIGxvbmcgcGM7CisJLyogVGhpcyBzdG9yZXMgdGhlIGFkZHJlc3Mgb2YgdGhlIHB0X3JlZ3MgYnVpbHQgZHVyaW5nIGEgY29udGV4dAorCSAgIHN3aXRjaCwgb3Igb2YgdGhlIHJlZ2lzdGVyIHNhdmUgYXJlYSBidWlsdCBmb3IgYSBrZXJuZWwgbW9kZQorCSAgIGV4Y2VwdGlvbi4gIEl0IGlzIHVzZWQgZm9yIGJhY2t0cmFjaW5nIHRoZSBzdGFjayBvZiBhIHNsZWVwaW5nIHRhc2sKKwkgICBvciBvbmUgdGhhdCB0cmFwcyBpbiBrZXJuZWwgbW9kZS4gKi8KKyAgICAgICAgc3RydWN0IHB0X3JlZ3MgKmtyZWdzOworCS8qIFRoaXMgc3RvcmVzIHRoZSBhZGRyZXNzIG9mIHRoZSBwdF9yZWdzIGNvbnN0cnVjdGVkIG9uIGVudHJ5IGZyb20KKwkgICB1c2VyIG1vZGUuICBJdCBpcyBhIGZpeGVkIHZhbHVlIG92ZXIgdGhlIGxpZmV0aW1lIG9mIGEgcHJvY2Vzcywgb3IKKwkgICBOVUxMIGZvciBhIGtlcm5lbCB0aHJlYWQuICovCisJc3RydWN0IHB0X3JlZ3MgKnVyZWdzOworCisJdW5zaWduZWQgbG9uZyB0cmFwX25vLCBlcnJvcl9jb2RlOworCXVuc2lnbmVkIGxvbmcgYWRkcmVzczsKKwkvKiBIYXJkd2FyZSBkZWJ1Z2dpbmcgcmVnaXN0ZXJzIG1heSBjb21lIGhlcmUgKi8KKworCS8qIGZsb2F0aW5nIHBvaW50IGluZm8gKi8KKwl1bmlvbiBzaF9mcHVfdW5pb24gZnB1OworfTsKKworI2RlZmluZSBJTklUX01NQVAgXAoreyAmaW5pdF9tbSwgMCwgMCwgTlVMTCwgUEFHRV9TSEFSRUQsIFZNX1JFQUQgfCBWTV9XUklURSB8IFZNX0VYRUMsIDEsIE5VTEwsIE5VTEwgfQorCitleHRlcm4gIHN0cnVjdCBwdF9yZWdzIGZha2Vfc3dhcHBlcl9yZWdzOworCisjZGVmaW5lIElOSVRfVEhSRUFEICB7CQkJCVwKKwkuc3AJCT0gc2l6ZW9mKGluaXRfc3RhY2spICsJXAorCQkJICAobG9uZykgJmluaXRfc3RhY2ssCVwKKwkucGMJCT0gMCwJCQlcCisgICAgICAgIC5rcmVncwkJPSAmZmFrZV9zd2FwcGVyX3JlZ3MsCVwKKwkudXJlZ3MJICAgICAgICA9IE5VTEwsCQkJXAorCS50cmFwX25vCT0gMCwJCQlcCisJLmVycm9yX2NvZGUJPSAwLAkJCVwKKwkuYWRkcmVzcwk9IDAsCQkJXAorCS5mcHUJCT0geyB7IHsgMCwgfSB9LCB9CVwKK30KKworLyoKKyAqIERvIG5lY2Vzc2FyeSBzZXR1cCB0byBzdGFydCB1cCBhIG5ld2x5IGV4ZWN1dGVkIHRocmVhZC4KKyAqLworI2RlZmluZSBTUl9VU0VSIChTUl9NTVUgfCBTUl9GRCkKKworI2RlZmluZSBzdGFydF90aHJlYWQocmVncywgbmV3X3BjLCBuZXdfc3ApIAkgCQlcCisJc2V0X2ZzKFVTRVJfRFMpOwkJCSAJCVwKKwlyZWdzLT5zciA9IFNSX1VTRVI7CS8qIFVzZXIgbW9kZS4gKi8gCQlcCisJcmVncy0+cGMgPSBuZXdfcGMgLSA0OwkvKiBDb21wZW5zYXRlIHN5c2NhbGwgZXhpdCAqLwlcCisJcmVncy0+cGMgfD0gMTsJCS8qIFNldCBTSG1lZGlhICEgKi8JCVwKKwlyZWdzLT5yZWdzWzE4XSA9IDA7ICAgCQkgCSAJCVwKKwlyZWdzLT5yZWdzWzE1XSA9IG5ld19zcAorCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9uLCBhIHN0cmFuZ2UgQyB0aGluZyAqLworc3RydWN0IHRhc2tfc3RydWN0Oworc3RydWN0IG1tX3N0cnVjdDsKKworLyogRnJlZSBhbGwgcmVzb3VyY2VzIGhlbGQgYnkgYSB0aHJlYWQuICovCitleHRlcm4gdm9pZCByZWxlYXNlX3RocmVhZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CisvKgorICogY3JlYXRlIGEga2VybmVsIHRocmVhZCB3aXRob3V0IHJlbW92aW5nIGl0IGZyb20gdGFza2xpc3RzCisgKi8KK2V4dGVybiBpbnQga2VybmVsX3RocmVhZChpbnQgKCpmbikodm9pZCAqKSwgdm9pZCAqIGFyZywgdW5zaWduZWQgbG9uZyBmbGFncyk7CisKKworLyogQ29weSBhbmQgcmVsZWFzZSBhbGwgc2VnbWVudCBpbmZvIGFzc29jaWF0ZWQgd2l0aCBhIFZNICovCisjZGVmaW5lIGNvcHlfc2VnbWVudHMocCwgbW0pCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgcmVsZWFzZV9zZWdtZW50cyhtbSkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmb3JnZXRfc2VnbWVudHMoKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHByZXBhcmVfdG9fY29weSh0c2spCWRvIHsgfSB3aGlsZSAoMCkKKy8qCisgKiBGUFUgbGF6eSBzdGF0ZSBzYXZlIGhhbmRsaW5nLgorICovCisKK2V4dGVybiBfX2lubGluZV9fIHZvaWQgcmVsZWFzZV9mcHUodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgX19kdW1teTsKKworCS8qIFNldCBGRCBmbGFnIGluIFNSICovCisJX19hc21fXyBfX3ZvbGF0aWxlX18oImdldGNvbgkiIF9fU1IgIiwgJTBcblx0IgorCQkJICAgICAib3IJJTAsICUxLCAlMFxuXHQiCisJCQkgICAgICJwdXRjb24JJTAsICIgX19TUiAiXG5cdCIKKwkJCSAgICAgOiAiPSZyIiAoX19kdW1teSkKKwkJCSAgICAgOiAiciIgKFNSX0ZEKSk7Cit9CisKK2V4dGVybiBfX2lubGluZV9fIHZvaWQgZ3JhYl9mcHUodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgX19kdW1teTsKKworCS8qIENsZWFyIG91dCBGRCBmbGFnIGluIFNSICovCisJX19hc21fXyBfX3ZvbGF0aWxlX18oImdldGNvbgkiIF9fU1IgIiwgJTBcblx0IgorCQkJICAgICAiYW5kCSUwLCAlMSwgJTBcblx0IgorCQkJICAgICAicHV0Y29uCSUwLCAiIF9fU1IgIlxuXHQiCisJCQkgICAgIDogIj0mciIgKF9fZHVtbXkpCisJCQkgICAgIDogInIiICh+U1JfRkQpKTsKK30KKworLyogUm91bmQgdG8gbmVhcmVzdCwgbm8gZXhjZXB0aW9ucyBvbiBpbmV4YWN0LCBvdmVyZmxvdywgdW5kZXJmbG93LAorICAgemVyby1kaXZpZGUsIGludmFsaWQuICBDb25maWd1cmUgb3B0aW9uIGZvciB3aGV0aGVyIHRvIGZsdXNoIGRlbm9ybXMgdG8KKyAgIHplcm8sIG9yIGV4Y2VwdCBpZiBhIGRlbm9ybSBpcyBlbmNvdW50ZXJlZC4gICovCisjaWYgZGVmaW5lZChDT05GSUdfU0g2NF9GUFVfREVOT1JNX0ZMVVNIKQorI2RlZmluZSBGUFNDUl9JTklUICAweDAwMDQwMDAwCisjZWxzZQorI2RlZmluZSBGUFNDUl9JTklUICAweDAwMDAwMDAwCisjZW5kaWYKKworLyogU2F2ZSB0aGUgY3VycmVudCBGUCByZWdzICovCit2b2lkIGZwc2F2ZShzdHJ1Y3Qgc2hfZnB1X2hhcmRfc3RydWN0ICpmcHJlZ3MpOworCisvKiBJbml0aWFsaXNlIHRoZSBGUCBzdGF0ZSBvZiBhIHRhc2sgKi8KK3ZvaWQgZnBpbml0KHN0cnVjdCBzaF9mcHVfaGFyZF9zdHJ1Y3QgKmZwcmVncyk7CisKK2V4dGVybiBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmxhc3RfdGFza191c2VkX21hdGg7CisKKy8qCisgKiBSZXR1cm4gc2F2ZWQgUEMgb2YgYSBibG9ja2VkIHRocmVhZC4KKyAqLworI2RlZmluZSB0aHJlYWRfc2F2ZWRfcGModHNrKQkodHNrLT50aHJlYWQucGMpCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIGdldF93Y2hhbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApOworCisjZGVmaW5lIEtTVEtfRUlQKHRzaykgICgodHNrKS0+dGhyZWFkLnBjKQorI2RlZmluZSBLU1RLX0VTUCh0c2spICAoKHRzayktPnRocmVhZC5zcCkKKworI2RlZmluZSBjcHVfcmVsYXgoKQlkbyB7IH0gd2hpbGUgKDApCisKKyNlbmRpZgkvKiBfX0FTU0VNQkxZX18gKi8KKyNlbmRpZiAvKiBfX0FTTV9TSDY0X1BST0NFU1NPUl9IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoNjQvcHRyYWNlLmggYi9pbmNsdWRlL2FzbS1zaDY0L3B0cmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MTkwZjUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaDY0L3B0cmFjZS5oCkBAIC0wLDAgKzEsMzcgQEAKKyNpZm5kZWYgX19BU01fU0g2NF9QVFJBQ0VfSAorI2RlZmluZSBfX0FTTV9TSDY0X1BUUkFDRV9ICisKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBpbmNsdWRlL2FzbS1zaDY0L3B0cmFjZS5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxICBQYW9sbyBBbGJlcmVsbGkKKyAqCisgKi8KKworLyoKKyAqIFRoaXMgc3RydWN0IGRlZmluZXMgdGhlIHdheSB0aGUgcmVnaXN0ZXJzIGFyZSBzdG9yZWQgb24gdGhlCisgKiBrZXJuZWwgc3RhY2sgZHVyaW5nIGEgc3lzdGVtIGNhbGwgb3Igb3RoZXIga2VybmVsIGVudHJ5LgorICovCitzdHJ1Y3QgcHRfcmVncyB7CisJdW5zaWduZWQgbG9uZyBsb25nIHBjOworCXVuc2lnbmVkIGxvbmcgbG9uZyBzcjsKKwl1bnNpZ25lZCBsb25nIGxvbmcgc3lzY2FsbF9ucjsKKwl1bnNpZ25lZCBsb25nIGxvbmcgcmVnc1s2M107CisJdW5zaWduZWQgbG9uZyBsb25nIHRyZWdzWzhdOworCXVuc2lnbmVkIGxvbmcgbG9uZyBwYWRbMl07Cit9OworCisjaWZkZWYgX19LRVJORUxfXworI2RlZmluZSB1c2VyX21vZGUocmVncykgKCgocmVncyktPnNyICYgMHg0MDAwMDAwMCk9PTApCisjZGVmaW5lIGluc3RydWN0aW9uX3BvaW50ZXIocmVncykgKChyZWdzKS0+cGMpCisjZGVmaW5lIHByb2ZpbGVfcGMocmVncykgaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKQorZXh0ZXJuIHZvaWQgc2hvd19yZWdzKHN0cnVjdCBwdF9yZWdzICopOworI2VuZGlmCisKKyNkZWZpbmUgUFRSQUNFX09fVFJBQ0VTWVNHT09EICAgICAweDAwMDAwMDAxCisKKyNlbmRpZiAvKiBfX0FTTV9TSDY0X1BUUkFDRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaDY0L3JlZ2lzdGVycy5oIGIvaW5jbHVkZS9hc20tc2g2NC9yZWdpc3RlcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWVjNjY2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2g2NC9yZWdpc3RlcnMuaApAQCAtMCwwICsxLDEwNiBAQAorI2lmbmRlZiBfX0FTTV9TSDY0X1JFR0lTVEVSU19ICisjZGVmaW5lIF9fQVNNX1NINjRfUkVHSVNURVJTX0gKKworLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIGluY2x1ZGUvYXNtLXNoNjQvcmVnaXN0ZXJzLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEgIFBhb2xvIEFsYmVyZWxsaQorICogQ29weXJpZ2h0IChDKSAyMDA0ICBSaWNoYXJkIEN1cm5vdworICovCisKKyNpZmRlZiBfX0FTU0VNQkxZX18KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKioKKyoqIFNlY3Rpb24gMTogYWN0cyBvbiBhc3NlbWJseSBzb3VyY2VzIHByZS1wcm9jZXNzZWQgYnkgR1BQICggPHNvdXJjZS5TPikuCisqKgkgICAgICBBc3NpZ25zIHN5bWJvbGljIG5hbWVzIHRvIGNvbnRyb2wgJiB0YXJnZXQgcmVnaXN0ZXJzLgorKi8KKworLyoKKyAqIERlZmluZSBzb21lIHVzZWZ1bCBhbGlhc2VzIGZvciBjb250cm9sIHJlZ2lzdGVycy4KKyAqLworI2RlZmluZSBTUgljcjAKKyNkZWZpbmUgU1NSCWNyMQorI2RlZmluZSBQU1NSCWNyMgorCQkJLyogY3IzIFVOREVGSU5FRCAqLworI2RlZmluZSBJTlRFVlQJY3I0CisjZGVmaW5lIEVYUEVWVAljcjUKKyNkZWZpbmUgUEVYUEVWVAljcjYKKyNkZWZpbmUgVFJBCWNyNworI2RlZmluZSBTUEMJY3I4CisjZGVmaW5lIFBTUEMJY3I5CisjZGVmaW5lIFJFU1ZFQwljcjEwCisjZGVmaW5lIFZCUgljcjExCisJCQkvKiBjcjEyIFVOREVGSU5FRCAqLworI2RlZmluZSBURUEJY3IxMworCQkJLyogY3IxNC1jcjE1IFVOREVGSU5FRCAqLworI2RlZmluZSBEQ1IJY3IxNgorI2RlZmluZSBLQ1IwCWNyMTcKKyNkZWZpbmUgS0NSMQljcjE4CisJCQkvKiBjcjE5LWNyMzEgVU5ERUZJTkVEICovCisJCQkvKiBjcjMyLWNyNjEgUkVTRVJWRUQgKi8KKyNkZWZpbmUgQ1RDCWNyNjIKKyNkZWZpbmUgVVNSCWNyNjMKKworLyoKKyAqIEFCSSBkZXBlbmRlbnQgcmVnaXN0ZXJzIChnZW5lcmFsIHB1cnBvc2Ugc2V0KQorICovCisjZGVmaW5lIFJFVAlyMgorI2RlZmluZSBBUkcxCXIyCisjZGVmaW5lIEFSRzIJcjMKKyNkZWZpbmUgQVJHMwlyNAorI2RlZmluZSBBUkc0CXI1CisjZGVmaW5lIEFSRzUJcjYKKyNkZWZpbmUgQVJHNglyNworI2RlZmluZSBTUAlyMTUKKyNkZWZpbmUgTElOSwlyMTgKKyNkZWZpbmUgWkVSTwlyNjMKKworLyoKKyAqIFN0YXR1cyByZWdpc3RlciBkZWZpbmVzOiB1c2VkIG9ubHkgYnkgYXNzZW1ibHkgc291cmNlcyAoYW5kCisgKiAJCQkgICAgc3ludGF4IGluZGVwZW5kZWRudCkKKyAqLworI2RlZmluZSBTUl9SRVNFVF9WQUwJMHgwMDAwMDAwMDUwMDA4MDAwCisjZGVmaW5lIFNSX0hBUk1MRVNTCTB4MDAwMDAwMDA1MDAwODBmMAkvKiBXcml0ZSBpZ25vcmVzIGZvciBtb3N0ICovCisjZGVmaW5lIFNSX0VOQUJMRV9GUFUJMHhmZmZmZmZmZmZmZmY3ZmZmCS8qIEFORCB3aXRoIHRoaXMgKi8KKworI2lmIGRlZmluZWQgKENPTkZJR19TSDY0X1NSX1dBVENIKQorI2RlZmluZSBTUl9FTkFCTEVfTU1VCTB4MDAwMDAwMDA4NDAwMDAwMAkvKiBPUiB3aXRoIHRoaXMgKi8KKyNlbHNlCisjZGVmaW5lIFNSX0VOQUJMRV9NTVUJMHgwMDAwMDAwMDgwMDAwMDAwCS8qIE9SIHdpdGggdGhpcyAqLworI2VuZGlmCisKKyNkZWZpbmUgU1JfVU5CTE9DS19FWEMJMHhmZmZmZmZmZmVmZmZmZmZmCS8qIEFORCB3aXRoIHRoaXMgKi8KKyNkZWZpbmUgU1JfQkxPQ0tfRVhDCTB4MDAwMDAwMDAxMDAwMDAwMAkvKiBPUiB3aXRoIHRoaXMgKi8KKworI2Vsc2UJLyogTm90IF9fQVNTRU1CTFlfXyBzeW50YXggKi8KKworLyoKKyoqIFN0cmluZ2lmeSByZWcuIG5hbWUKKyovCisjZGVmaW5lIF9fc3RyKHgpICAjeAorCisvKiBTdHJpbmdpZnkgY29udHJvbCByZWdpc3RlciBuYW1lcyBmb3IgdXNlIGluIGlubGluZSBhc3NlbWJseSAqLworI2RlZmluZSBfX1NSIF9fc3RyKFNSKQorI2RlZmluZSBfX1NTUiBfX3N0cihTU1IpCisjZGVmaW5lIF9fUFNTUiBfX3N0cihQU1NSKQorI2RlZmluZSBfX0lOVEVWVCBfX3N0cihJTlRFVlQpCisjZGVmaW5lIF9fRVhQRVZUIF9fc3RyKEVYUEVWVCkKKyNkZWZpbmUgX19QRVhQRVZUIF9fc3RyKFBFWFBFVlQpCisjZGVmaW5lIF9fVFJBIF9fc3RyKFRSQSkKKyNkZWZpbmUgX19TUEMgX19zdHIoU1BDKQorI2RlZmluZSBfX1BTUEMgX19zdHIoUFNQQykKKyNkZWZpbmUgX19SRVNWRUMgX19zdHIoUkVTVkVDKQorI2RlZmluZSBfX1ZCUiBfX3N0cihWQlIpCisjZGVmaW5lIF9fVEVBIF9fc3RyKFRFQSkKKyNkZWZpbmUgX19EQ1IgX19zdHIoRENSKQorI2RlZmluZSBfX0tDUjAgX19zdHIoS0NSMCkKKyNkZWZpbmUgX19LQ1IxIF9fc3RyKEtDUjEpCisjZGVmaW5lIF9fQ1RDIF9fc3RyKENUQykKKyNkZWZpbmUgX19VU1IgX19zdHIoVVNSKQorCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisjZW5kaWYgLyogX19BU01fU0g2NF9SRUdJU1RFUlNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2g2NC9yZXNvdXJjZS5oIGIvaW5jbHVkZS9hc20tc2g2NC9yZXNvdXJjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmZjkzOTQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaDY0L3Jlc291cmNlLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fQVNNX1NINjRfUkVTT1VSQ0VfSAorI2RlZmluZSBfX0FTTV9TSDY0X1JFU09VUkNFX0gKKworI2luY2x1ZGUgPGFzbS1zaC9yZXNvdXJjZS5oPgorCisjZW5kaWYgLyogX19BU01fU0g2NF9SRVNPVVJDRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaDY0L3NjYXR0ZXJsaXN0LmggYi9pbmNsdWRlL2FzbS1zaDY0L3NjYXR0ZXJsaXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ4ZmEzMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoNjQvc2NhdHRlcmxpc3QuaApAQCAtMCwwICsxLDIzIEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogaW5jbHVkZS9hc20tc2g2NC9zY2F0dGVybGlzdC5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzICBQYXVsIE11bmR0CisgKgorICovCisjaWZuZGVmIF9fQVNNX1NINjRfU0NBVFRFUkxJU1RfSAorI2RlZmluZSBfX0FTTV9TSDY0X1NDQVRURVJMSVNUX0gKKworc3RydWN0IHNjYXR0ZXJsaXN0IHsKKyAgICBzdHJ1Y3QgcGFnZSAqIHBhZ2U7IC8qIExvY2F0aW9uIGZvciBoaWdobWVtIHBhZ2UsIGlmIGFueSAqLworICAgIHVuc2lnbmVkIGludCBvZmZzZXQ7LyogZm9yIGhpZ2htZW0sIHBhZ2Ugb2Zmc2V0ICovCisgICAgZG1hX2FkZHJfdCBkbWFfYWRkcmVzczsKKyAgICB1bnNpZ25lZCBpbnQgbGVuZ3RoOworfTsKKworI2RlZmluZSBJU0FfRE1BX1RIUkVTSE9MRCAoMHhmZmZmZmZmZikKKworI2VuZGlmIC8qICFfX0FTTV9TSDY0X1NDQVRURVJMSVNUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoNjQvc2VjdGlvbnMuaCBiL2luY2x1ZGUvYXNtLXNoNjQvc2VjdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTdmMzZiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2g2NC9zZWN0aW9ucy5oCkBAIC0wLDAgKzEsNyBAQAorI2lmbmRlZiBfX0FTTV9TSDY0X1NFQ1RJT05TX0gKKyNkZWZpbmUgX19BU01fU0g2NF9TRUNUSU9OU19ICisKKyNpbmNsdWRlIDxhc20tc2gvc2VjdGlvbnMuaD4KKworI2VuZGlmIC8qIF9fQVNNX1NINjRfU0VDVElPTlNfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaDY0L3NlZ21lbnQuaCBiL2luY2x1ZGUvYXNtLXNoNjQvc2VnbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyYWMwMDEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaDY0L3NlZ21lbnQuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX0FTTV9TRUdNRU5UX0gKKyNkZWZpbmUgX0FTTV9TRUdNRU5UX0gKKworLyogT25seSBoZXJlIGJlY2F1c2Ugd2UgaGF2ZSBzb21lIG9sZCBoZWFkZXIgZmlsZXMgdGhhdCBleHBlY3QgaXQuLiAqLworCisjZW5kaWYgLyogX0FTTV9TRUdNRU5UX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoNjQvc2VtYXBob3JlLWhlbHBlci5oIGIvaW5jbHVkZS9hc20tc2g2NC9zZW1hcGhvcmUtaGVscGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNmYWZlMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoNjQvc2VtYXBob3JlLWhlbHBlci5oCkBAIC0wLDAgKzEsMTAxIEBACisjaWZuZGVmIF9fQVNNX1NINjRfU0VNQVBIT1JFX0hFTFBFUl9ICisjZGVmaW5lIF9fQVNNX1NINjRfU0VNQVBIT1JFX0hFTFBFUl9ICisKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBpbmNsdWRlL2FzbS1zaDY0L3NlbWFwaG9yZS1oZWxwZXIuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSAgUGFvbG8gQWxiZXJlbGxpCisgKgorICovCisjaW5jbHVkZSA8YXNtL2Vycm5vLmg+CisKKy8qCisgKiBTTVAtIGFuZCBpbnRlcnJ1cHQtc2FmZSBzZW1hcGhvcmVzIGhlbHBlciBmdW5jdGlvbnMuCisgKgorICogKEMpIENvcHlyaWdodCAxOTk2IExpbnVzIFRvcnZhbGRzCisgKiAoQykgQ29weXJpZ2h0IDE5OTkgQW5kcmVhIEFyY2FuZ2VsaQorICovCisKKy8qCisgKiBUaGVzZSB0d28gX211c3RfIGV4ZWN1dGUgYXRvbWljYWxseSB3cnQgZWFjaCBvdGhlci4KKyAqCisgKiBUaGlzIGlzIHRyaXZpYWxseSBkb25lIHdpdGggbG9hZF9sb2NrZWQvc3RvcmVfY29uZCwKKyAqIHdoaWNoIHdlIGhhdmUuICBMZXQgdGhlIHJlc3Qgb2YgdGhlIGxvc2VycyBzdWNrIGVnZ3MuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgd2FrZV9vbmVfbW9yZShzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQoreworCWF0b21pY19pbmMoKGF0b21pY190ICopJnNlbS0+c2xlZXBlcnMpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgd2FraW5nX25vbl96ZXJvKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNlbWFwaG9yZV93YWtlX2xvY2ssIGZsYWdzKTsKKwlpZiAoc2VtLT5zbGVlcGVycyA+IDApIHsKKwkJc2VtLT5zbGVlcGVycy0tOworCQlyZXQgPSAxOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZW1hcGhvcmVfd2FrZV9sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIHdha2luZ19ub25femVyb19pbnRlcnJ1cHRpYmxlOgorICoJMQlnb3QgdGhlIGxvY2sKKyAqCTAJZ28gdG8gc2xlZXAKKyAqCS1FSU5UUglpbnRlcnJ1cHRlZAorICoKKyAqIFdlIG11c3QgdW5kbyB0aGUgc2VtLT5jb3VudCBkb3duX2ludGVycnVwdGlibGUoKSBpbmNyZW1lbnQgd2hpbGUgd2UgYXJlCisgKiBwcm90ZWN0ZWQgYnkgdGhlIHNwaW5sb2NrIGluIG9yZGVyIHRvIG1ha2UgYXRvbWljIHRoaXMgYXRvbWljX2luYygpIHdpdGggdGhlCisgKiBhdG9taWNfcmVhZCgpIGluIHdha2Vfb25lX21vcmUoKSwgb3RoZXJ3aXNlIHdlIGNhbiByYWNlLiAtYXJjYQorICovCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgd2FraW5nX25vbl96ZXJvX2ludGVycnVwdGlibGUoc3RydWN0IHNlbWFwaG9yZSAqc2VtLAorCQkJCQkJc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzZW1hcGhvcmVfd2FrZV9sb2NrLCBmbGFncyk7CisJaWYgKHNlbS0+c2xlZXBlcnMgPiAwKSB7CisJCXNlbS0+c2xlZXBlcnMtLTsKKwkJcmV0ID0gMTsKKwl9IGVsc2UgaWYgKHNpZ25hbF9wZW5kaW5nKHRzaykpIHsKKwkJYXRvbWljX2luYygmc2VtLT5jb3VudCk7CisJCXJldCA9IC1FSU5UUjsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VtYXBob3JlX3dha2VfbG9jaywgZmxhZ3MpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiB3YWtpbmdfbm9uX3plcm9fdHJ5bG9jazoKKyAqCTEJZmFpbGVkIHRvIGxvY2sKKyAqCTAJZ290IHRoZSBsb2NrCisgKgorICogV2UgbXVzdCB1bmRvIHRoZSBzZW0tPmNvdW50IGRvd25fdHJ5bG9jaygpIGluY3JlbWVudCB3aGlsZSB3ZSBhcmUKKyAqIHByb3RlY3RlZCBieSB0aGUgc3BpbmxvY2sgaW4gb3JkZXIgdG8gbWFrZSBhdG9taWMgdGhpcyBhdG9taWNfaW5jKCkgd2l0aCB0aGUKKyAqIGF0b21pY19yZWFkKCkgaW4gd2FrZV9vbmVfbW9yZSgpLCBvdGhlcndpc2Ugd2UgY2FuIHJhY2UuIC1hcmNhCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIGludCB3YWtpbmdfbm9uX3plcm9fdHJ5bG9jayhzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gMTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzZW1hcGhvcmVfd2FrZV9sb2NrLCBmbGFncyk7CisJaWYgKHNlbS0+c2xlZXBlcnMgPD0gMCkKKwkJYXRvbWljX2luYygmc2VtLT5jb3VudCk7CisJZWxzZSB7CisJCXNlbS0+c2xlZXBlcnMtLTsKKwkJcmV0ID0gMDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VtYXBob3JlX3dha2VfbG9jaywgZmxhZ3MpOworCXJldHVybiByZXQ7Cit9CisKKyNlbmRpZiAvKiBfX0FTTV9TSDY0X1NFTUFQSE9SRV9IRUxQRVJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2g2NC9zZW1hcGhvcmUuaCBiL2luY2x1ZGUvYXNtLXNoNjQvc2VtYXBob3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNlMjJiYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoNjQvc2VtYXBob3JlLmgKQEAgLTAsMCArMSwxMjMgQEAKKyNpZm5kZWYgX19BU01fU0g2NF9TRU1BUEhPUkVfSAorI2RlZmluZSBfX0FTTV9TSDY0X1NFTUFQSE9SRV9ICisKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBpbmNsdWRlL2FzbS1zaDY0L3NlbWFwaG9yZS5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxICBQYW9sbyBBbGJlcmVsbGkKKyAqCisgKiBTTVAtIGFuZCBpbnRlcnJ1cHQtc2FmZSBzZW1hcGhvcmVzLgorICoKKyAqIChDKSBDb3B5cmlnaHQgMTk5NiBMaW51cyBUb3J2YWxkcworICoKKyAqIFN1cGVySCB2ZXJpc29uIGJ5IE5paWJlIFl1dGFrYQorICogIChDdXJyZW50bHkgbm8gYXNtIGltcGxlbWVudGF0aW9uIGJ1dCBnZW5lcmljIEMgY29kZS4uLikKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgorCisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKworc3RydWN0IHNlbWFwaG9yZSB7CisJYXRvbWljX3QgY291bnQ7CisJaW50IHNsZWVwZXJzOworCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7Cit9OworCisjZGVmaW5lIF9fU0VNQVBIT1JFX0lOSVRJQUxJWkVSKG5hbWUsIG4pCQkJCVwKK3sJCQkJCQkJCQlcCisJLmNvdW50CQk9IEFUT01JQ19JTklUKG4pLAkJCQlcCisJLnNsZWVwZXJzCT0gMCwJCQkJCQlcCisJLndhaXQJCT0gX19XQUlUX1FVRVVFX0hFQURfSU5JVElBTElaRVIoKG5hbWUpLndhaXQpCVwKK30KKworI2RlZmluZSBfX01VVEVYX0lOSVRJQUxJWkVSKG5hbWUpIFwKKwlfX1NFTUFQSE9SRV9JTklUSUFMSVpFUihuYW1lLDEpCisKKyNkZWZpbmUgX19ERUNMQVJFX1NFTUFQSE9SRV9HRU5FUklDKG5hbWUsY291bnQpIFwKKwlzdHJ1Y3Qgc2VtYXBob3JlIG5hbWUgPSBfX1NFTUFQSE9SRV9JTklUSUFMSVpFUihuYW1lLGNvdW50KQorCisjZGVmaW5lIERFQ0xBUkVfTVVURVgobmFtZSkgX19ERUNMQVJFX1NFTUFQSE9SRV9HRU5FUklDKG5hbWUsMSkKKyNkZWZpbmUgREVDTEFSRV9NVVRFWF9MT0NLRUQobmFtZSkgX19ERUNMQVJFX1NFTUFQSE9SRV9HRU5FUklDKG5hbWUsMCkKKworc3RhdGljIGlubGluZSB2b2lkIHNlbWFfaW5pdCAoc3RydWN0IHNlbWFwaG9yZSAqc2VtLCBpbnQgdmFsKQoreworLyoKKyAqCSpzZW0gPSAoc3RydWN0IHNlbWFwaG9yZSlfX1NFTUFQSE9SRV9JTklUSUFMSVpFUigoKnNlbSksdmFsKTsKKyAqCisgKiBpJ2QgcmF0aGVyIHVzZSB0aGUgbW9yZSBmbGV4aWJsZSBpbml0aWFsaXphdGlvbiBhYm92ZSwgYnV0IHNhZGx5CisgKiBHQ0MgMi43LjIuMyBlbWl0cyBhIGJvZ3VzIHdhcm5pbmcuIEVHQ1MgZG9lc250LiBPaCB3ZWxsLgorICovCisJYXRvbWljX3NldCgmc2VtLT5jb3VudCwgdmFsKTsKKwlzZW0tPnNsZWVwZXJzID0gMDsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzZW0tPndhaXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9NVVRFWCAoc3RydWN0IHNlbWFwaG9yZSAqc2VtKQoreworCXNlbWFfaW5pdChzZW0sIDEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9NVVRFWF9MT0NLRUQgKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKK3sKKwlzZW1hX2luaXQoc2VtLCAwKTsKK30KKworI2lmIDAKK2FzbWxpbmthZ2Ugdm9pZCBfX2Rvd25fZmFpbGVkKHZvaWQgLyogc3BlY2lhbCByZWdpc3RlciBjYWxsaW5nIGNvbnZlbnRpb24gKi8pOworYXNtbGlua2FnZSBpbnQgIF9fZG93bl9mYWlsZWRfaW50ZXJydXB0aWJsZSh2b2lkICAvKiBwYXJhbXMgaW4gcmVnaXN0ZXJzICovKTsKK2FzbWxpbmthZ2UgaW50ICBfX2Rvd25fZmFpbGVkX3RyeWxvY2sodm9pZCAgLyogcGFyYW1zIGluIHJlZ2lzdGVycyAqLyk7Cithc21saW5rYWdlIHZvaWQgX191cF93YWtldXAodm9pZCAvKiBzcGVjaWFsIHJlZ2lzdGVyIGNhbGxpbmcgY29udmVudGlvbiAqLyk7CisjZW5kaWYKKworYXNtbGlua2FnZSB2b2lkIF9fZG93bihzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKTsKK2FzbWxpbmthZ2UgaW50ICBfX2Rvd25faW50ZXJydXB0aWJsZShzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKTsKK2FzbWxpbmthZ2UgaW50ICBfX2Rvd25fdHJ5bG9jayhzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKTsKK2FzbWxpbmthZ2Ugdm9pZCBfX3VwKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pOworCitleHRlcm4gc3BpbmxvY2tfdCBzZW1hcGhvcmVfd2FrZV9sb2NrOworCitzdGF0aWMgaW5saW5lIHZvaWQgZG93bihzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQoreworCWlmIChhdG9taWNfZGVjX3JldHVybigmc2VtLT5jb3VudCkgPCAwKQorCQlfX2Rvd24oc2VtKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZG93bl9pbnRlcnJ1cHRpYmxlKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCit7CisJaW50IHJldCA9IDA7CisKKwlpZiAoYXRvbWljX2RlY19yZXR1cm4oJnNlbS0+Y291bnQpIDwgMCkKKwkJcmV0ID0gX19kb3duX2ludGVycnVwdGlibGUoc2VtKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIGludCBkb3duX3RyeWxvY2soc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKK3sKKwlpbnQgcmV0ID0gMDsKKworCWlmIChhdG9taWNfZGVjX3JldHVybigmc2VtLT5jb3VudCkgPCAwKQorCQlyZXQgPSBfX2Rvd25fdHJ5bG9jayhzZW0pOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBOb3RlISBUaGlzIGlzIHN1YnRsZS4gV2UganVtcCB0byB3YWtlIHBlb3BsZSB1cCBvbmx5IGlmCisgKiB0aGUgc2VtYXBob3JlIHdhcyBuZWdhdGl2ZSAoPT0gc29tZWJvZHkgd2FzIHdhaXRpbmcgb24gaXQpLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgdXAoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKK3sKKwlpZiAoYXRvbWljX2luY19yZXR1cm4oJnNlbS0+Y291bnQpIDw9IDApCisJCV9fdXAoc2VtKTsKK30KKworI2VuZGlmIC8qIF9fQVNNX1NINjRfU0VNQVBIT1JFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoNjQvc2VtYnVmLmggYi9pbmNsdWRlL2FzbS1zaDY0L3NlbWJ1Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjNGQ5ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaDY0L3NlbWJ1Zi5oCkBAIC0wLDAgKzEsMzYgQEAKKyNpZm5kZWYgX19BU01fU0g2NF9TRU1CVUZfSAorI2RlZmluZSBfX0FTTV9TSDY0X1NFTUJVRl9ICisKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBpbmNsdWRlL2FzbS1zaDY0L3NlbWJ1Zi5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxICBQYW9sbyBBbGJlcmVsbGkKKyAqCisgKi8KKworLyoKKyAqIFRoZSBzZW1pZDY0X2RzIHN0cnVjdHVyZSBmb3IgaTM4NiBhcmNoaXRlY3R1cmUuCisgKiBOb3RlIGV4dHJhIHBhZGRpbmcgYmVjYXVzZSB0aGlzIHN0cnVjdHVyZSBpcyBwYXNzZWQgYmFjayBhbmQgZm9ydGgKKyAqIGJldHdlZW4ga2VybmVsIGFuZCB1c2VyIHNwYWNlLgorICoKKyAqIFBhZCBzcGFjZSBpcyBsZWZ0IGZvcjoKKyAqIC0gNjQtYml0IHRpbWVfdCB0byBzb2x2ZSB5MjAzOCBwcm9ibGVtCisgKiAtIDIgbWlzY2VsbGFuZW91cyAzMi1iaXQgdmFsdWVzCisgKi8KKworc3RydWN0IHNlbWlkNjRfZHMgeworCXN0cnVjdCBpcGM2NF9wZXJtIHNlbV9wZXJtOwkJLyogcGVybWlzc2lvbnMgLi4gc2VlIGlwYy5oICovCisJX19rZXJuZWxfdGltZV90CXNlbV9vdGltZTsJCS8qIGxhc3Qgc2Vtb3AgdGltZSAqLworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQxOworCV9fa2VybmVsX3RpbWVfdAlzZW1fY3RpbWU7CQkvKiBsYXN0IGNoYW5nZSB0aW1lICovCisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDI7CisJdW5zaWduZWQgbG9uZwlzZW1fbnNlbXM7CQkvKiBuby4gb2Ygc2VtYXBob3JlcyBpbiBhcnJheSAqLworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQzOworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQ0OworfTsKKworI2VuZGlmIC8qIF9fQVNNX1NINjRfU0VNQlVGX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoNjQvc2VyaWFsLmggYi9pbmNsdWRlL2FzbS1zaDY0L3NlcmlhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlMzliNGUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaDY0L3NlcmlhbC5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1zaC9zZXJpYWwuaAorICoKKyAqIENvbmZpZ3VyYXRpb24gZGV0YWlscyBmb3IgODI1MCwgMTY0NTAsIDE2NTUwLCBldGMuIHNlcmlhbCBwb3J0cworICovCisKKyNpZm5kZWYgX0FTTV9TRVJJQUxfSAorI2RlZmluZSBfQVNNX1NFUklBTF9ICisKKy8qCisgKiBUaGlzIGFzc3VtZXMgeW91IGhhdmUgYSAxLjg0MzIgTUh6IGNsb2NrIGZvciB5b3VyIFVBUlQuCisgKgorICogSXQnZCBiZSBuaWNlIGlmIHNvbWVvbmUgYnVpbHQgYSBzZXJpYWwgY2FyZCB3aXRoIGEgMjQuNTc2IE1IegorICogY2xvY2ssIHNpbmNlIHRoZSAxNjU1MEEgaXMgY2FwYWJsZSBvZiBoYW5kbGluZyBhIHRvcCBzcGVlZCBvZiAxLjUKKyAqIG1lZ2FiaXRzL3NlY29uZDsgYnV0IHRoaXMgcmVxdWlyZXMgdGhlIGZhc3RlciBjbG9jay4KKyAqLworI2RlZmluZSBCQVNFX0JBVUQgKCAxODQzMjAwIC8gMTYgKQorCisjZGVmaW5lIFJTX1RBQkxFX1NJWkUgIDIKKworI2RlZmluZSBTVERfQ09NX0ZMQUdTIChBU1lOQ19CT09UX0FVVE9DT05GIHwgQVNZTkNfU0tJUF9URVNUKQorCisjZGVmaW5lIFNURF9TRVJJQUxfUE9SVF9ERUZOUwkJCVwKKwkvKiBVQVJUIENMSyAgIFBPUlQgSVJRICAgICBGTEFHUyAgICAgICAgKi8JCQlcCisJeyAwLCBCQVNFX0JBVUQsIDB4M0Y4LCA0LCBTVERfQ09NX0ZMQUdTIH0sCS8qIHR0eVMwICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgyRjgsIDMsIFNURF9DT01fRkxBR1MgfQkvKiB0dHlTMSAqLworCisjZGVmaW5lIFNFUklBTF9QT1JUX0RGTlMgU1REX1NFUklBTF9QT1JUX0RFRk5TCisKKy8qIFhYWDogVGhpcyBzaG91bGQgYmUgbW92ZWQgaW5vIGlycS5oICovCisjZGVmaW5lIGlycV9jYW5ub25pY2FsaXplKHgpICh4KQorCisjZW5kaWYgLyogX0FTTV9TRVJJQUxfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2g2NC9zZXR1cC5oIGIvaW5jbHVkZS9hc20tc2g2NC9zZXR1cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViZDQyZWIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaDY0L3NldHVwLmgKQEAgLTAsMCArMSwxNiBAQAorI2lmbmRlZiBfX0FTTV9TSDY0X1NFVFVQX0gKKyNkZWZpbmUgX19BU01fU0g2NF9TRVRVUF9ICisKKyNkZWZpbmUgUEFSQU0gKCh1bnNpZ25lZCBjaGFyICopZW1wdHlfemVyb19wYWdlKQorI2RlZmluZSBNT1VOVF9ST09UX1JET05MWSAoKih1bnNpZ25lZCBsb25nICopIChQQVJBTSsweDAwMCkpCisjZGVmaW5lIFJBTURJU0tfRkxBR1MgKCoodW5zaWduZWQgbG9uZyAqKSAoUEFSQU0rMHgwMDQpKQorI2RlZmluZSBPUklHX1JPT1RfREVWICgqKHVuc2lnbmVkIGxvbmcgKikgKFBBUkFNKzB4MDA4KSkKKyNkZWZpbmUgTE9BREVSX1RZUEUgKCoodW5zaWduZWQgbG9uZyAqKSAoUEFSQU0rMHgwMGMpKQorI2RlZmluZSBJTklUUkRfU1RBUlQgKCoodW5zaWduZWQgbG9uZyAqKSAoUEFSQU0rMHgwMTApKQorI2RlZmluZSBJTklUUkRfU0laRSAoKih1bnNpZ25lZCBsb25nICopIChQQVJBTSsweDAxNCkpCisKKyNkZWZpbmUgQ09NTUFORF9MSU5FICgoY2hhciAqKSAoUEFSQU0rMjU2KSkKKyNkZWZpbmUgQ09NTUFORF9MSU5FX1NJWkUgMjU2CisKKyNlbmRpZiAvKiBfX0FTTV9TSDY0X1NFVFVQX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2g2NC9zaG1idWYuaCBiL2luY2x1ZGUvYXNtLXNoNjQvc2htYnVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDIyZjM0OQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoNjQvc2htYnVmLmgKQEAgLTAsMCArMSw1MyBAQAorI2lmbmRlZiBfX0FTTV9TSDY0X1NITUJVRl9ICisjZGVmaW5lIF9fQVNNX1NINjRfU0hNQlVGX0gKKworLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIGluY2x1ZGUvYXNtLXNoNjQvc2htYnVmLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEgIFBhb2xvIEFsYmVyZWxsaQorICoKKyAqLworCisvKgorICogVGhlIHNobWlkNjRfZHMgc3RydWN0dXJlIGZvciBpMzg2IGFyY2hpdGVjdHVyZS4KKyAqIE5vdGUgZXh0cmEgcGFkZGluZyBiZWNhdXNlIHRoaXMgc3RydWN0dXJlIGlzIHBhc3NlZCBiYWNrIGFuZCBmb3J0aAorICogYmV0d2VlbiBrZXJuZWwgYW5kIHVzZXIgc3BhY2UuCisgKgorICogUGFkIHNwYWNlIGlzIGxlZnQgZm9yOgorICogLSA2NC1iaXQgdGltZV90IHRvIHNvbHZlIHkyMDM4IHByb2JsZW0KKyAqIC0gMiBtaXNjZWxsYW5lb3VzIDMyLWJpdCB2YWx1ZXMKKyAqLworCitzdHJ1Y3Qgc2htaWQ2NF9kcyB7CisJc3RydWN0IGlwYzY0X3Blcm0Jc2htX3Blcm07CS8qIG9wZXJhdGlvbiBwZXJtcyAqLworCXNpemVfdAkJCXNobV9zZWdzejsJLyogc2l6ZSBvZiBzZWdtZW50IChieXRlcykgKi8KKwlfX2tlcm5lbF90aW1lX3QJCXNobV9hdGltZTsJLyogbGFzdCBhdHRhY2ggdGltZSAqLworCXVuc2lnbmVkIGxvbmcJCV9fdW51c2VkMTsKKwlfX2tlcm5lbF90aW1lX3QJCXNobV9kdGltZTsJLyogbGFzdCBkZXRhY2ggdGltZSAqLworCXVuc2lnbmVkIGxvbmcJCV9fdW51c2VkMjsKKwlfX2tlcm5lbF90aW1lX3QJCXNobV9jdGltZTsJLyogbGFzdCBjaGFuZ2UgdGltZSAqLworCXVuc2lnbmVkIGxvbmcJCV9fdW51c2VkMzsKKwlfX2tlcm5lbF9waWRfdAkJc2htX2NwaWQ7CS8qIHBpZCBvZiBjcmVhdG9yICovCisJX19rZXJuZWxfcGlkX3QJCXNobV9scGlkOwkvKiBwaWQgb2YgbGFzdCBvcGVyYXRvciAqLworCXVuc2lnbmVkIGxvbmcJCXNobV9uYXR0Y2g7CS8qIG5vLiBvZiBjdXJyZW50IGF0dGFjaGVzICovCisJdW5zaWduZWQgbG9uZwkJX191bnVzZWQ0OworCXVuc2lnbmVkIGxvbmcJCV9fdW51c2VkNTsKK307CisKK3N0cnVjdCBzaG1pbmZvNjQgeworCXVuc2lnbmVkIGxvbmcJc2htbWF4OworCXVuc2lnbmVkIGxvbmcJc2htbWluOworCXVuc2lnbmVkIGxvbmcJc2htbW5pOworCXVuc2lnbmVkIGxvbmcJc2htc2VnOworCXVuc2lnbmVkIGxvbmcJc2htYWxsOworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQxOworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQyOworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQzOworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQ0OworfTsKKworI2VuZGlmIC8qIF9fQVNNX1NINjRfU0hNQlVGX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoNjQvc2htcGFyYW0uaCBiL2luY2x1ZGUvYXNtLXNoNjQvc2htcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2E5OWE0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2g2NC9zaG1wYXJhbS5oCkBAIC0wLDAgKzEsMjAgQEAKKyNpZm5kZWYgX19BU01fU0g2NF9TSE1QQVJBTV9ICisjZGVmaW5lIF9fQVNNX1NINjRfU0hNUEFSQU1fSAorCisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogaW5jbHVkZS9hc20tc2g2NC9zaG1wYXJhbS5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxICBQYW9sbyBBbGJlcmVsbGkKKyAqCisgKi8KKworI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgorCisvKiBhdHRhY2ggYWRkciBhIG11bHRpcGxlIG9mIHRoaXMgKi8KKyNkZWZpbmUJU0hNTEJBCShjcHVfZGF0YS0+ZGNhY2hlLnNldHMgKiBMMV9DQUNIRV9CWVRFUykKKworI2VuZGlmIC8qIF9fQVNNX1NINjRfU0hNUEFSQU1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2g2NC9zaWdjb250ZXh0LmggYi9pbmNsdWRlL2FzbS1zaDY0L3NpZ2NvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjkzNTA5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2g2NC9zaWdjb250ZXh0LmgKQEAgLTAsMCArMSwzMCBAQAorI2lmbmRlZiBfX0FTTV9TSDY0X1NJR0NPTlRFWFRfSAorI2RlZmluZSBfX0FTTV9TSDY0X1NJR0NPTlRFWFRfSAorCisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogaW5jbHVkZS9hc20tc2g2NC9zaWdjb250ZXh0LmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEgIFBhb2xvIEFsYmVyZWxsaQorICoKKyAqLworCitzdHJ1Y3Qgc2lnY29udGV4dCB7CisJdW5zaWduZWQgbG9uZwlvbGRtYXNrOworCisJLyogQ1BVIHJlZ2lzdGVycyAqLworCXVuc2lnbmVkIGxvbmcgbG9uZyBzY19yZWdzWzYzXTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgc2NfdHJlZ3NbOF07CisJdW5zaWduZWQgbG9uZyBsb25nIHNjX3BjOworCXVuc2lnbmVkIGxvbmcgbG9uZyBzY19zcjsKKworCS8qIEZQVSByZWdpc3RlcnMgKi8KKwl1bnNpZ25lZCBsb25nIGxvbmcgc2NfZnByZWdzWzMyXTsKKwl1bnNpZ25lZCBpbnQgc2NfZnBzY3I7CisJdW5zaWduZWQgaW50IHNjX2ZwdmFsaWQ7Cit9OworCisjZW5kaWYgLyogX19BU01fU0g2NF9TSUdDT05URVhUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoNjQvc2lnaW5mby5oIGIvaW5jbHVkZS9hc20tc2g2NC9zaWdpbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZlZjFkYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoNjQvc2lnaW5mby5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfX0FTTV9TSDY0X1NJR0lORk9fSAorI2RlZmluZSBfX0FTTV9TSDY0X1NJR0lORk9fSAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2lnaW5mby5oPgorCisjZW5kaWYgLyogX19BU01fU0g2NF9TSUdJTkZPX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoNjQvc2lnbmFsLmggYi9pbmNsdWRlL2FzbS1zaDY0L3NpZ25hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3OTU3ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaDY0L3NpZ25hbC5oCkBAIC0wLDAgKzEsMTg1IEBACisjaWZuZGVmIF9fQVNNX1NINjRfU0lHTkFMX0gKKyNkZWZpbmUgX19BU01fU0g2NF9TSUdOQUxfSAorCisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogaW5jbHVkZS9hc20tc2g2NC9zaWduYWwuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSAgUGFvbG8gQWxiZXJlbGxpCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKworLyogQXZvaWQgdG9vIG1hbnkgaGVhZGVyIG9yZGVyaW5nIHByb2JsZW1zLiAgKi8KK3N0cnVjdCBzaWdpbmZvOworCisjZGVmaW5lIF9OU0lHCQk2NAorI2RlZmluZSBfTlNJR19CUFcJMzIKKyNkZWZpbmUgX05TSUdfV09SRFMJKF9OU0lHIC8gX05TSUdfQlBXKQorCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgb2xkX3NpZ3NldF90OwkJLyogYXQgbGVhc3QgMzIgYml0cyAqLworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgbG9uZyBzaWdbX05TSUdfV09SRFNdOworfSBzaWdzZXRfdDsKKworI2RlZmluZSBTSUdIVVAJCSAxCisjZGVmaW5lIFNJR0lOVAkJIDIKKyNkZWZpbmUgU0lHUVVJVAkJIDMKKyNkZWZpbmUgU0lHSUxMCQkgNAorI2RlZmluZSBTSUdUUkFQCQkgNQorI2RlZmluZSBTSUdBQlJUCQkgNgorI2RlZmluZSBTSUdJT1QJCSA2CisjZGVmaW5lIFNJR0JVUwkJIDcKKyNkZWZpbmUgU0lHRlBFCQkgOAorI2RlZmluZSBTSUdLSUxMCQkgOQorI2RlZmluZSBTSUdVU1IxCQkxMAorI2RlZmluZSBTSUdTRUdWCQkxMQorI2RlZmluZSBTSUdVU1IyCQkxMgorI2RlZmluZSBTSUdQSVBFCQkxMworI2RlZmluZSBTSUdBTFJNCQkxNAorI2RlZmluZSBTSUdURVJNCQkxNQorI2RlZmluZSBTSUdTVEtGTFQJMTYKKyNkZWZpbmUgU0lHQ0hMRAkJMTcKKyNkZWZpbmUgU0lHQ09OVAkJMTgKKyNkZWZpbmUgU0lHU1RPUAkJMTkKKyNkZWZpbmUgU0lHVFNUUAkJMjAKKyNkZWZpbmUgU0lHVFRJTgkJMjEKKyNkZWZpbmUgU0lHVFRPVQkJMjIKKyNkZWZpbmUgU0lHVVJHCQkyMworI2RlZmluZSBTSUdYQ1BVCQkyNAorI2RlZmluZSBTSUdYRlNaCQkyNQorI2RlZmluZSBTSUdWVEFMUk0JMjYKKyNkZWZpbmUgU0lHUFJPRgkJMjcKKyNkZWZpbmUgU0lHV0lOQ0gJMjgKKyNkZWZpbmUgU0lHSU8JCTI5CisjZGVmaW5lIFNJR1BPTEwJCVNJR0lPCisvKgorI2RlZmluZSBTSUdMT1NUCQkyOQorKi8KKyNkZWZpbmUgU0lHUFdSCQkzMAorI2RlZmluZSBTSUdTWVMJCTMxCisjZGVmaW5lCVNJR1VOVVNFRAkzMQorCisvKiBUaGVzZSBzaG91bGQgbm90IGJlIGNvbnNpZGVyZWQgY29uc3RhbnRzIGZyb20gdXNlcmxhbmQuICAqLworI2RlZmluZSBTSUdSVE1JTgkzMgorI2RlZmluZSBTSUdSVE1BWAkoX05TSUctMSkKKworLyoKKyAqIFNBX0ZMQUdTIHZhbHVlczoKKyAqCisgKiBTQV9PTlNUQUNLIGluZGljYXRlcyB0aGF0IGEgcmVnaXN0ZXJlZCBzdGFja190IHdpbGwgYmUgdXNlZC4KKyAqIFNBX0lOVEVSUlVQVCBpcyBhIG5vLW9wLCBidXQgbGVmdCBkdWUgdG8gaGlzdG9yaWNhbCByZWFzb25zLiBVc2UgdGhlCisgKiBTQV9SRVNUQVJUIGZsYWcgdG8gZ2V0IHJlc3RhcnRpbmcgc2lnbmFscyAod2hpY2ggd2VyZSB0aGUgZGVmYXVsdCBsb25nIGFnbykKKyAqIFNBX05PQ0xEU1RPUCBmbGFnIHRvIHR1cm4gb2ZmIFNJR0NITEQgd2hlbiBjaGlsZHJlbiBzdG9wLgorICogU0FfUkVTRVRIQU5EIGNsZWFycyB0aGUgaGFuZGxlciB3aGVuIHRoZSBzaWduYWwgaXMgZGVsaXZlcmVkLgorICogU0FfTk9DTERXQUlUIGZsYWcgb24gU0lHQ0hMRCB0byBpbmhpYml0IHpvbWJpZXMuCisgKiBTQV9OT0RFRkVSIHByZXZlbnRzIHRoZSBjdXJyZW50IHNpZ25hbCBmcm9tIGJlaW5nIG1hc2tlZCBpbiB0aGUgaGFuZGxlci4KKyAqCisgKiBTQV9PTkVTSE9UIGFuZCBTQV9OT01BU0sgYXJlIHRoZSBoaXN0b3JpY2FsIExpbnV4IG5hbWVzIGZvciB0aGUgU2luZ2xlCisgKiBVbml4IG5hbWVzIFJFU0VUSEFORCBhbmQgTk9ERUZFUiByZXNwZWN0aXZlbHkuCisgKi8KKyNkZWZpbmUgU0FfTk9DTERTVE9QCTB4MDAwMDAwMDEKKyNkZWZpbmUgU0FfTk9DTERXQUlUCTB4MDAwMDAwMDIgLyogbm90IHN1cHBvcnRlZCB5ZXQgKi8KKyNkZWZpbmUgU0FfU0lHSU5GTwkweDAwMDAwMDA0CisjZGVmaW5lIFNBX09OU1RBQ0sJMHgwODAwMDAwMAorI2RlZmluZSBTQV9SRVNUQVJUCTB4MTAwMDAwMDAKKyNkZWZpbmUgU0FfTk9ERUZFUgkweDQwMDAwMDAwCisjZGVmaW5lIFNBX1JFU0VUSEFORAkweDgwMDAwMDAwCisKKyNkZWZpbmUgU0FfTk9NQVNLCVNBX05PREVGRVIKKyNkZWZpbmUgU0FfT05FU0hPVAlTQV9SRVNFVEhBTkQKKyNkZWZpbmUgU0FfSU5URVJSVVBUCTB4MjAwMDAwMDAgLyogZHVtbXkgLS0gaWdub3JlZCAqLworCisjZGVmaW5lIFNBX1JFU1RPUkVSCTB4MDQwMDAwMDAKKworLyoKKyAqIHNpZ2FsdHN0YWNrIGNvbnRyb2xzCisgKi8KKyNkZWZpbmUgU1NfT05TVEFDSwkxCisjZGVmaW5lIFNTX0RJU0FCTEUJMgorCisjZGVmaW5lIE1JTlNJR1NUS1NaCTIwNDgKKyNkZWZpbmUgU0lHU1RLU1oJVEhSRUFEX1NJWkUKKworI2lmZGVmIF9fS0VSTkVMX18KKworLyoKKyAqIFRoZXNlIHZhbHVlcyBvZiBzYV9mbGFncyBhcmUgdXNlZCBvbmx5IGJ5IHRoZSBrZXJuZWwgYXMgcGFydCBvZiB0aGUKKyAqIGlycSBoYW5kbGluZyByb3V0aW5lcy4KKyAqCisgKiBTQV9JTlRFUlJVUFQgaXMgYWxzbyB1c2VkIGJ5IHRoZSBpcnEgaGFuZGxpbmcgcm91dGluZXMuCisgKiBTQV9TSElSUSBpcyBmb3Igc2hhcmVkIGludGVycnVwdCBzdXBwb3J0IG9uIFBDSSBhbmQgRUlTQS4KKyAqLworI2RlZmluZSBTQV9QUk9CRQkJU0FfT05FU0hPVAorI2RlZmluZSBTQV9TQU1QTEVfUkFORE9NCVNBX1JFU1RBUlQKKyNkZWZpbmUgU0FfU0hJUlEJCTB4MDQwMDAwMDAKKyNlbmRpZgorCisjZGVmaW5lIFNJR19CTE9DSyAgICAgICAgICAwCS8qIGZvciBibG9ja2luZyBzaWduYWxzICovCisjZGVmaW5lIFNJR19VTkJMT0NLICAgICAgICAxCS8qIGZvciB1bmJsb2NraW5nIHNpZ25hbHMgKi8KKyNkZWZpbmUgU0lHX1NFVE1BU0sgICAgICAgIDIJLyogZm9yIHNldHRpbmcgdGhlIHNpZ25hbCBtYXNrICovCisKKy8qIFR5cGUgb2YgYSBzaWduYWwgaGFuZGxlci4gICovCit0eXBlZGVmIHZvaWQgKCpfX3NpZ2hhbmRsZXJfdCkoaW50KTsKKworI2RlZmluZSBTSUdfREZMCSgoX19zaWdoYW5kbGVyX3QpMCkJLyogZGVmYXVsdCBzaWduYWwgaGFuZGxpbmcgKi8KKyNkZWZpbmUgU0lHX0lHTgkoKF9fc2lnaGFuZGxlcl90KTEpCS8qIGlnbm9yZSBzaWduYWwgKi8KKyNkZWZpbmUgU0lHX0VSUgkoKF9fc2lnaGFuZGxlcl90KS0xKQkvKiBlcnJvciByZXR1cm4gZnJvbSBzaWduYWwgKi8KKworI2lmZGVmIF9fS0VSTkVMX18KK3N0cnVjdCBvbGRfc2lnYWN0aW9uIHsKKwlfX3NpZ2hhbmRsZXJfdCBzYV9oYW5kbGVyOworCW9sZF9zaWdzZXRfdCBzYV9tYXNrOworCXVuc2lnbmVkIGxvbmcgc2FfZmxhZ3M7CisJdm9pZCAoKnNhX3Jlc3RvcmVyKSh2b2lkKTsKK307CisKK3N0cnVjdCBzaWdhY3Rpb24geworCV9fc2lnaGFuZGxlcl90IHNhX2hhbmRsZXI7CisJdW5zaWduZWQgbG9uZyBzYV9mbGFnczsKKwl2b2lkICgqc2FfcmVzdG9yZXIpKHZvaWQpOworCXNpZ3NldF90IHNhX21hc2s7CQkvKiBtYXNrIGxhc3QgZm9yIGV4dGVuc2liaWxpdHkgKi8KK307CisKK3N0cnVjdCBrX3NpZ2FjdGlvbiB7CisJc3RydWN0IHNpZ2FjdGlvbiBzYTsKK307CisjZWxzZQorLyogSGVyZSB3ZSBtdXN0IGNhdGVyIHRvIGxpYmNzIHRoYXQgcG9rZSBhYm91dCBpbiBrZXJuZWwgaGVhZGVycy4gICovCisKK3N0cnVjdCBzaWdhY3Rpb24geworCXVuaW9uIHsKKwkgIF9fc2lnaGFuZGxlcl90IF9zYV9oYW5kbGVyOworCSAgdm9pZCAoKl9zYV9zaWdhY3Rpb24pKGludCwgc3RydWN0IHNpZ2luZm8gKiwgdm9pZCAqKTsKKwl9IF91OworCXNpZ3NldF90IHNhX21hc2s7CisJdW5zaWduZWQgbG9uZyBzYV9mbGFnczsKKwl2b2lkICgqc2FfcmVzdG9yZXIpKHZvaWQpOworfTsKKworI2RlZmluZSBzYV9oYW5kbGVyCV91Ll9zYV9oYW5kbGVyCisjZGVmaW5lIHNhX3NpZ2FjdGlvbglfdS5fc2Ffc2lnYWN0aW9uCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKK3R5cGVkZWYgc3RydWN0IHNpZ2FsdHN0YWNrIHsKKwl2b2lkICpzc19zcDsKKwlpbnQgc3NfZmxhZ3M7CisJc2l6ZV90IHNzX3NpemU7Cit9IHN0YWNrX3Q7CisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8YXNtL3NpZ2NvbnRleHQuaD4KKworI2RlZmluZSBzaWdtYXNrKHNpZykJKDFVTCA8PCAoKHNpZykgLSAxKSkKKyNkZWZpbmUgcHRyYWNlX3NpZ25hbF9kZWxpdmVyKHJlZ3MsIGNvb2tpZSkgZG8geyB9IHdoaWxlICgwKQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX19BU01fU0g2NF9TSUdOQUxfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2g2NC9zbXAuaCBiL2luY2x1ZGUvYXNtLXNoNjQvc21wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE0ZDBkYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoNjQvc21wLmgKQEAgLTAsMCArMSwxNSBAQAorI2lmbmRlZiBfX0FTTV9TSDY0X1NNUF9ICisjZGVmaW5lIF9fQVNNX1NINjRfU01QX0gKKworLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIGluY2x1ZGUvYXNtLXNoNjQvc21wLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEgIFBhb2xvIEFsYmVyZWxsaQorICoKKyAqLworCisjZW5kaWYgLyogX19BU01fU0g2NF9TTVBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2g2NC9zb2NrZXQuaCBiL2luY2x1ZGUvYXNtLXNoNjQvc29ja2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg1M2Y3MgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoNjQvc29ja2V0LmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fQVNNX1NINjRfU09DS0VUX0gKKyNkZWZpbmUgX19BU01fU0g2NF9TT0NLRVRfSAorCisjaW5jbHVkZSA8YXNtLXNoL3NvY2tldC5oPgorCisjZW5kaWYgLyogX19BU01fU0g2NF9TT0NLRVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2g2NC9zb2NraW9zLmggYi9pbmNsdWRlL2FzbS1zaDY0L3NvY2tpb3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWUyM2FlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2g2NC9zb2NraW9zLmgKQEAgLTAsMCArMSwyNCBAQAorI2lmbmRlZiBfX0FTTV9TSDY0X1NPQ0tJT1NfSAorI2RlZmluZSBfX0FTTV9TSDY0X1NPQ0tJT1NfSAorCisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogaW5jbHVkZS9hc20tc2g2NC9zb2NraW9zLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEgIFBhb2xvIEFsYmVyZWxsaQorICoKKyAqLworCisvKiBTb2NrZXQtbGV2ZWwgSS9PIGNvbnRyb2wgY2FsbHMuICovCisjZGVmaW5lIEZJT0dFVE9XTglfSU9SKCdmJywgMTIzLCBpbnQpCisjZGVmaW5lIEZJT1NFVE9XTiAJX0lPVygnZicsIDEyNCwgaW50KQorCisjZGVmaW5lIFNJT0NBVE1BUksJX0lPUigncycsIDcsIGludCkKKyNkZWZpbmUgU0lPQ1NQR1JQCV9JT1coJ3MnLCA4LCBwaWRfdCkKKyNkZWZpbmUgU0lPQ0dQR1JQCV9JT1IoJ3MnLCA5LCBwaWRfdCkKKworI2RlZmluZSBTSU9DR1NUQU1QCV9JT1IoJ3MnLCAxMDAsIHN0cnVjdCB0aW1ldmFsKSAvKiBHZXQgc3RhbXAgLSBsaW51eC1zcGVjaWZpYyAqLworI2VuZGlmIC8qIF9fQVNNX1NINjRfU09DS0lPU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaDY0L3NwaW5sb2NrLmggYi9pbmNsdWRlL2FzbS1zaDY0L3NwaW5sb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk2YjBjOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoNjQvc3BpbmxvY2suaApAQCAtMCwwICsxLDE3IEBACisjaWZuZGVmIF9fQVNNX1NINjRfU1BJTkxPQ0tfSAorI2RlZmluZSBfX0FTTV9TSDY0X1NQSU5MT0NLX0gKKworLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIGluY2x1ZGUvYXNtLXNoNjQvc3BpbmxvY2suaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSAgUGFvbG8gQWxiZXJlbGxpCisgKgorICovCisKKyNlcnJvciAiTm8gU01QIG9uIFNINjQiCisKKyNlbmRpZiAvKiBfX0FTTV9TSDY0X1NQSU5MT0NLX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoNjQvc3RhdC5oIGIvaW5jbHVkZS9hc20tc2g2NC9zdGF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZmNTUxYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoNjQvc3RhdC5oCkBAIC0wLDAgKzEsODggQEAKKyNpZm5kZWYgX19BU01fU0g2NF9TVEFUX0gKKyNkZWZpbmUgX19BU01fU0g2NF9TVEFUX0gKKworLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIGluY2x1ZGUvYXNtLXNoNjQvc3RhdC5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxICBQYW9sbyBBbGJlcmVsbGkKKyAqCisgKi8KKworc3RydWN0IF9fb2xkX2tlcm5lbF9zdGF0IHsKKwl1bnNpZ25lZCBzaG9ydCBzdF9kZXY7CisJdW5zaWduZWQgc2hvcnQgc3RfaW5vOworCXVuc2lnbmVkIHNob3J0IHN0X21vZGU7CisJdW5zaWduZWQgc2hvcnQgc3Rfbmxpbms7CisJdW5zaWduZWQgc2hvcnQgc3RfdWlkOworCXVuc2lnbmVkIHNob3J0IHN0X2dpZDsKKwl1bnNpZ25lZCBzaG9ydCBzdF9yZGV2OworCXVuc2lnbmVkIGxvbmcgIHN0X3NpemU7CisJdW5zaWduZWQgbG9uZyAgc3RfYXRpbWU7CisJdW5zaWduZWQgbG9uZyAgc3RfbXRpbWU7CisJdW5zaWduZWQgbG9uZyAgc3RfY3RpbWU7Cit9OworCitzdHJ1Y3Qgc3RhdCB7CisJdW5zaWduZWQgc2hvcnQgc3RfZGV2OworCXVuc2lnbmVkIHNob3J0IF9fcGFkMTsKKwl1bnNpZ25lZCBsb25nIHN0X2lubzsKKwl1bnNpZ25lZCBzaG9ydCBzdF9tb2RlOworCXVuc2lnbmVkIHNob3J0IHN0X25saW5rOworCXVuc2lnbmVkIHNob3J0IHN0X3VpZDsKKwl1bnNpZ25lZCBzaG9ydCBzdF9naWQ7CisJdW5zaWduZWQgc2hvcnQgc3RfcmRldjsKKwl1bnNpZ25lZCBzaG9ydCBfX3BhZDI7CisJdW5zaWduZWQgbG9uZyAgc3Rfc2l6ZTsKKwl1bnNpZ25lZCBsb25nICBzdF9ibGtzaXplOworCXVuc2lnbmVkIGxvbmcgIHN0X2Jsb2NrczsKKwl1bnNpZ25lZCBsb25nICBzdF9hdGltZTsKKwl1bnNpZ25lZCBsb25nICBzdF9hdGltZV9uc2VjOworCXVuc2lnbmVkIGxvbmcgIHN0X210aW1lOworCXVuc2lnbmVkIGxvbmcgIHN0X210aW1lX25zZWM7CisJdW5zaWduZWQgbG9uZyAgc3RfY3RpbWU7CisJdW5zaWduZWQgbG9uZyAgc3RfY3RpbWVfbnNlYzsKKwl1bnNpZ25lZCBsb25nICBfX3VudXNlZDQ7CisJdW5zaWduZWQgbG9uZyAgX191bnVzZWQ1OworfTsKKworLyogVGhpcyBtYXRjaGVzIHN0cnVjdCBzdGF0NjQgaW4gZ2xpYmMyLjEsIGhlbmNlIHRoZSBhYnNvbHV0ZWx5CisgKiBpbnNhbmUgYW1vdW50cyBvZiBwYWRkaW5nIGFyb3VuZCBkZXZfdCdzLgorICovCitzdHJ1Y3Qgc3RhdDY0IHsKKwl1bnNpZ25lZCBzaG9ydAlzdF9kZXY7CisJdW5zaWduZWQgY2hhcglfX3BhZDBbMTBdOworCisJdW5zaWduZWQgbG9uZwlzdF9pbm87CisJdW5zaWduZWQgaW50CXN0X21vZGU7CisJdW5zaWduZWQgaW50CXN0X25saW5rOworCisJdW5zaWduZWQgbG9uZwlzdF91aWQ7CisJdW5zaWduZWQgbG9uZwlzdF9naWQ7CisKKwl1bnNpZ25lZCBzaG9ydAlzdF9yZGV2OworCXVuc2lnbmVkIGNoYXIJX19wYWQzWzEwXTsKKworCWxvbmcgbG9uZwlzdF9zaXplOworCXVuc2lnbmVkIGxvbmcJc3RfYmxrc2l6ZTsKKworCXVuc2lnbmVkIGxvbmcJc3RfYmxvY2tzOwkvKiBOdW1iZXIgNTEyLWJ5dGUgYmxvY2tzIGFsbG9jYXRlZC4gKi8KKwl1bnNpZ25lZCBsb25nCV9fcGFkNDsJCS8qIGZ1dHVyZSBwb3NzaWJsZSBzdF9ibG9ja3MgaGlnaCBiaXRzICovCisKKwl1bnNpZ25lZCBsb25nCXN0X2F0aW1lOworCXVuc2lnbmVkIGxvbmcJc3RfYXRpbWVfbnNlYzsKKworCXVuc2lnbmVkIGxvbmcJc3RfbXRpbWU7CisJdW5zaWduZWQgbG9uZwlzdF9tdGltZV9uc2VjOworCisJdW5zaWduZWQgbG9uZwlzdF9jdGltZTsKKwl1bnNpZ25lZCBsb25nCXN0X2N0aW1lX25zZWM7CS8qIHdpbGwgYmUgaGlnaCAzMiBiaXRzIG9mIGN0aW1lIHNvbWVkYXkgKi8KKworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQxOworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQyOworfTsKKworI2VuZGlmIC8qIF9fQVNNX1NINjRfU1RBVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaDY0L3N0YXRmcy5oIGIvaW5jbHVkZS9hc20tc2g2NC9zdGF0ZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODNmZDc5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2g2NC9zdGF0ZnMuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19BU01fU0g2NF9TVEFURlNfSAorI2RlZmluZSBfX0FTTV9TSDY0X1NUQVRGU19ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zdGF0ZnMuaD4KKworI2VuZGlmIC8qIF9fQVNNX1NINjRfU1RBVEZTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoNjQvc3RyaW5nLmggYi9pbmNsdWRlL2FzbS1zaDY0L3N0cmluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNzM1NzMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaDY0L3N0cmluZy5oCkBAIC0wLDAgKzEsMjEgQEAKKyNpZm5kZWYgX19BU01fU0g2NF9TVFJJTkdfSAorI2RlZmluZSBfX0FTTV9TSDY0X1NUUklOR19ICisKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBpbmNsdWRlL2FzbS1zaDY0L3N0cmluZy5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxICBQYW9sbyBBbGJlcmVsbGkKKyAqCisgKiBFbXB0eSBvbiBwdXJwb3NlLiBBUkNIIFNINjQgQVNNIGxpYnMgYXJlIG91dCBvZiB0aGUgY3VycmVudCBwcm9qZWN0IHNjb3BlLgorICoKKyAqLworCisjZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNQWQorCitleHRlcm4gdm9pZCAqbWVtY3B5KHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNvdW50KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaDY0L3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tc2g2NC9zeXN0ZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjUxMGU0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2g2NC9zeXN0ZW0uaApAQCAtMCwwICsxLDE5NSBAQAorI2lmbmRlZiBfX0FTTV9TSDY0X1NZU1RFTV9ICisjZGVmaW5lIF9fQVNNX1NINjRfU1lTVEVNX0gKKworLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIGluY2x1ZGUvYXNtLXNoNjQvc3lzdGVtLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEgIFBhb2xvIEFsYmVyZWxsaQorICogQ29weXJpZ2h0IChDKSAyMDAzICBQYXVsIE11bmR0CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgIFJpY2hhcmQgQ3Vybm93CisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxhc20vcmVnaXN0ZXJzLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorCisvKgorICoJc3dpdGNoX3RvKCkgc2hvdWxkIHN3aXRjaCB0YXNrcyB0byB0YXNrIG5yIG4sIGZpcnN0CisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcgc2VnOworfSBtbV9zZWdtZW50X3Q7CisKK2V4dGVybiBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnNoNjRfc3dpdGNoX3RvKHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldiwKKwkJCQkJICBzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqcHJldl90aHJlYWQsCisJCQkJCSAgc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0LAorCQkJCQkgIHN0cnVjdCB0aHJlYWRfc3RydWN0ICpuZXh0X3RocmVhZCk7CisKKyNkZWZpbmUgc3dpdGNoX3RvKHByZXYsbmV4dCxsYXN0KSBcCisJZG8ge1wKKwkJaWYgKGxhc3RfdGFza191c2VkX21hdGggIT0gbmV4dCkge1wKKwkJCXN0cnVjdCBwdF9yZWdzICpyZWdzID0gbmV4dC0+dGhyZWFkLnVyZWdzO1wKKwkJCWlmIChyZWdzKSByZWdzLT5zciB8PSBTUl9GRDtcCisJCX1cCisJCWxhc3QgPSBzaDY0X3N3aXRjaF90byhwcmV2LCAmcHJldi0+dGhyZWFkLCBuZXh0LCAmbmV4dC0+dGhyZWFkKTtcCisJfSB3aGlsZSgwKQorCisjZGVmaW5lIG5vcCgpIF9fYXNtX18gX192b2xhdGlsZV9fICgibm9wIikKKworI2RlZmluZSB4Y2hnKHB0cix4KSAoKF9fdHlwZW9mX18oKihwdHIpKSlfX3hjaGcoKHVuc2lnbmVkIGxvbmcpKHgpLChwdHIpLHNpemVvZigqKHB0cikpKSkKKworI2RlZmluZSB0YXMocHRyKSAoeGNoZygocHRyKSwgMSkpCisKK2V4dGVybiB2b2lkIF9feGNoZ19jYWxsZWRfd2l0aF9iYWRfcG9pbnRlcih2b2lkKTsKKworI2RlZmluZSBtYigpCV9fYXNtX18gX192b2xhdGlsZV9fICgic3luY28iOiA6IDoibWVtb3J5IikKKyNkZWZpbmUgcm1iKCkJbWIoKQorI2RlZmluZSB3bWIoKQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN5bmNvIjogOiA6Im1lbW9yeSIpCisjZGVmaW5lIHJlYWRfYmFycmllcl9kZXBlbmRzKCkJZG8geyB9IHdoaWxlICgwKQorCisjaWZkZWYgQ09ORklHX1NNUAorI2RlZmluZSBzbXBfbWIoKQltYigpCisjZGVmaW5lIHNtcF9ybWIoKQlybWIoKQorI2RlZmluZSBzbXBfd21iKCkJd21iKCkKKyNkZWZpbmUgc21wX3JlYWRfYmFycmllcl9kZXBlbmRzKCkJcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQorI2Vsc2UKKyNkZWZpbmUgc21wX21iKCkJYmFycmllcigpCisjZGVmaW5lIHNtcF9ybWIoKQliYXJyaWVyKCkKKyNkZWZpbmUgc21wX3dtYigpCWJhcnJpZXIoKQorI2RlZmluZSBzbXBfcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQlkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYgLyogQ09ORklHX1NNUCAqLworCisjZGVmaW5lIHNldF9ybWIodmFyLCB2YWx1ZSkgZG8geyB4Y2hnKCZ2YXIsIHZhbHVlKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgc2V0X21iKHZhciwgdmFsdWUpIHNldF9ybWIodmFyLCB2YWx1ZSkKKyNkZWZpbmUgc2V0X3dtYih2YXIsIHZhbHVlKSBkbyB7IHZhciA9IHZhbHVlOyB3bWIoKTsgfSB3aGlsZSAoMCkKKworLyogSW50ZXJydXB0IENvbnRyb2wgKi8KKyNpZm5kZWYgSEFSRF9DTEkKKyNkZWZpbmUgU1JfTUFTS19MIDB4MDAwMDAwZjBMCisjZGVmaW5lIFNSX01BU0tfTEwgMHgwMDAwMDAwMDAwMDAwMGYwTEwKKyNlbHNlCisjZGVmaW5lIFNSX01BU0tfTCAweDEwMDAwMDAwTAorI2RlZmluZSBTUl9NQVNLX0xMIDB4MDAwMDAwMDAxMDAwMDAwMExMCisjZW5kaWYKKworc3RhdGljIF9faW5saW5lX18gdm9pZCBsb2NhbF9pcnFfZW5hYmxlKHZvaWQpCit7CisJLyogY2xpL3N0aSBiYXNlZCBvbiBTUi5CTCAqLworCXVuc2lnbmVkIGxvbmcgbG9uZyBfX2R1bW15MCwgX19kdW1teTE9flNSX01BU0tfTEw7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygiZ2V0Y29uCSIgX19TUiAiLCAlMFxuXHQiCisJCQkgICAgICJhbmQJJTAsICUxLCAlMFxuXHQiCisJCQkgICAgICJwdXRjb24JJTAsICIgX19TUiAiXG5cdCIKKwkJCSAgICAgOiAiPSZyIiAoX19kdW1teTApCisJCQkgICAgIDogInIiIChfX2R1bW15MSkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGxvY2FsX2lycV9kaXNhYmxlKHZvaWQpCit7CisJLyogY2xpL3N0aSBiYXNlZCBvbiBTUi5CTCAqLworCXVuc2lnbmVkIGxvbmcgbG9uZyBfX2R1bW15MCwgX19kdW1teTE9U1JfTUFTS19MTDsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygiZ2V0Y29uCSIgX19TUiAiLCAlMFxuXHQiCisJCQkgICAgICJvcgklMCwgJTEsICUwXG5cdCIKKwkJCSAgICAgInB1dGNvbgklMCwgIiBfX1NSICJcblx0IgorCQkJICAgICA6ICI9JnIiIChfX2R1bW15MCkKKwkJCSAgICAgOiAiciIgKF9fZHVtbXkxKSk7Cit9CisKKyNkZWZpbmUgbG9jYWxfc2F2ZV9mbGFncyh4KSAJCQkJCQlcCisoX19leHRlbnNpb25fXyAoewl1bnNpZ25lZCBsb25nIGxvbmcgX19kdW1teT1TUl9NQVNLX0xMOwkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCVwKKwkJImdldGNvbgkiIF9fU1IgIiwgJTBcblx0IgkJCQlcCisJCSJhbmQJJTAsICUxLCAlMCIJCQkJCVwKKwkJOiAiPSZyIiAoeCkJCQkJCQlcCisJCTogInIiIChfX2R1bW15KSk7fSkpCisKKyNkZWZpbmUgbG9jYWxfaXJxX3NhdmUoeCkJCQkJCQlcCisoX19leHRlbnNpb25fXyAoewl1bnNpZ25lZCBsb25nIGxvbmcgX19kMj1TUl9NQVNLX0xMLCBfX2QxOwlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oICAgICAgICAgIAkgICAgICAgICAJCQlcCisJCSJnZXRjb24JIiBfX1NSICIsICUxXG5cdCIgCQkJCVwKKwkJIm9yCSUxLCByNjMsICUwXG5cdCIJCQkJXAorCQkib3IJJTEsICUyLCAlMVxuXHQiCQkJCQlcCisJCSJwdXRjb24JJTEsICIgX19TUiAiXG5cdCIgICAgCQkJCVwKKwkJImFuZAklMCwgJTIsICUwIiAgICAJCQkJCVwKKwkJOiAiPSZyIiAoeCksICI9JnIiIChfX2QxKQkJCQlcCisJCTogInIiIChfX2QyKSk7fSkpOworCisjZGVmaW5lIGxvY2FsX2lycV9yZXN0b3JlKHgpIGRvIHsgCQkJCQlcCisJaWYgKCAoKHgpICYgU1JfTUFTS19MKSA9PSAwICkJCS8qIGRyb3BwaW5nIHRvIDAgPyAqLwlcCisJCWxvY2FsX2lycV9lbmFibGUoKTsJCS8qIHllcy4uLnJlLWVuYWJsZSAqLwlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIGlycXNfZGlzYWJsZWQoKQkJCVwKKyh7CQkJCQlcCisJdW5zaWduZWQgbG9uZyBmbGFnczsJCVwKKwlsb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKTsJXAorCShmbGFncyAhPSAwKTsJCQlcCit9KQorCitleHRlcm4gX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIHhjaGdfdTMyKHZvbGF0aWxlIGludCAqIG0sIHVuc2lnbmVkIGxvbmcgdmFsKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHJldHZhbDsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlyZXR2YWwgPSAqbTsKKwkqbSA9IHZhbDsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJcmV0dXJuIHJldHZhbDsKK30KKworZXh0ZXJuIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyB4Y2hnX3U4KHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKiBtLCB1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzLCByZXR2YWw7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJcmV0dmFsID0gKm07CisJKm0gPSB2YWwgJiAweGZmOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIF9feGNoZyh1bnNpZ25lZCBsb25nIHgsIHZvbGF0aWxlIHZvaWQgKiBwdHIsIGludCBzaXplKQoreworCXN3aXRjaCAoc2l6ZSkgeworCWNhc2UgNDoKKwkJcmV0dXJuIHhjaGdfdTMyKHB0ciwgeCk7CisJCWJyZWFrOworCWNhc2UgMToKKwkJcmV0dXJuIHhjaGdfdTgocHRyLCB4KTsKKwkJYnJlYWs7CisJfQorCV9feGNoZ19jYWxsZWRfd2l0aF9iYWRfcG9pbnRlcigpOworCXJldHVybiB4OworfQorCisvKiBYWFgKKyAqIGRpc2FibGUgaGx0IGR1cmluZyBjZXJ0YWluIGNyaXRpY2FsIGkvbyBvcGVyYXRpb25zCisgKi8KKyNkZWZpbmUgSEFWRV9ESVNBQkxFX0hMVAordm9pZCBkaXNhYmxlX2hsdCh2b2lkKTsKK3ZvaWQgZW5hYmxlX2hsdCh2b2lkKTsKKworCisjZGVmaW5lIHNtcF9tYigpICAgICAgICBiYXJyaWVyKCkKKyNkZWZpbmUgc21wX3JtYigpICAgICAgIGJhcnJpZXIoKQorI2RlZmluZSBzbXBfd21iKCkgICAgICAgYmFycmllcigpCisKKyNpZmRlZiBDT05GSUdfU0hfQUxQSEFOVU1FUklDCisvKiBUaGlzIGlzIG9ubHkgdXNlZCBmb3IgZGVidWdnaW5nLiAqLworZXh0ZXJuIHZvaWQgcHJpbnRfc2VnKGNoYXIgKmZpbGUsaW50IGxpbmUpOworI2RlZmluZSBQTFMoKSBwcmludF9zZWcoX19GSUxFX18sX19MSU5FX18pCisjZWxzZQkvKiBDT05GSUdfU0hfQUxQSEFOVU1FUklDICovCisjZGVmaW5lIFBMUygpCisjZW5kaWYJLyogQ09ORklHX1NIX0FMUEhBTlVNRVJJQyAqLworCisjZGVmaW5lIFBMKCkgcHJpbnRrKCJAIDwlcywlczolZD5cbiIsX19GSUxFX18sX19GVU5DVElPTl9fLF9fTElORV9fKQorCisjZGVmaW5lIGFyY2hfYWxpZ25fc3RhY2soeCkgKHgpCisKKyNlbmRpZiAvKiBfX0FTTV9TSDY0X1NZU1RFTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaDY0L3Rlcm1iaXRzLmggYi9pbmNsdWRlL2FzbS1zaDY0L3Rlcm1iaXRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZiZGU1ZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoNjQvdGVybWJpdHMuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19BU01fU0g2NF9URVJNQklUU19ICisjZGVmaW5lIF9fQVNNX1NINjRfVEVSTUJJVFNfSAorCisjaW5jbHVkZSA8YXNtLXNoL3Rlcm1iaXRzLmg+CisKKyNlbmRpZiAvKiBfX0FTTV9TSDY0X1RFUk1CSVRTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoNjQvdGVybWlvcy5oIGIvaW5jbHVkZS9hc20tc2g2NC90ZXJtaW9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE5YzdmYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoNjQvdGVybWlvcy5oCkBAIC0wLDAgKzEsMTE3IEBACisjaWZuZGVmIF9fQVNNX1NINjRfVEVSTUlPU19ICisjZGVmaW5lIF9fQVNNX1NINjRfVEVSTUlPU19ICisKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBpbmNsdWRlL2FzbS1zaDY0L3Rlcm1pb3MuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSAgUGFvbG8gQWxiZXJlbGxpCisgKgorICovCisKKyNpbmNsdWRlIDxhc20vdGVybWJpdHMuaD4KKyNpbmNsdWRlIDxhc20vaW9jdGxzLmg+CisKK3N0cnVjdCB3aW5zaXplIHsKKwl1bnNpZ25lZCBzaG9ydCB3c19yb3c7CisJdW5zaWduZWQgc2hvcnQgd3NfY29sOworCXVuc2lnbmVkIHNob3J0IHdzX3hwaXhlbDsKKwl1bnNpZ25lZCBzaG9ydCB3c195cGl4ZWw7Cit9OworCisjZGVmaW5lIE5DQyA4CitzdHJ1Y3QgdGVybWlvIHsKKwl1bnNpZ25lZCBzaG9ydCBjX2lmbGFnOwkJLyogaW5wdXQgbW9kZSBmbGFncyAqLworCXVuc2lnbmVkIHNob3J0IGNfb2ZsYWc7CQkvKiBvdXRwdXQgbW9kZSBmbGFncyAqLworCXVuc2lnbmVkIHNob3J0IGNfY2ZsYWc7CQkvKiBjb250cm9sIG1vZGUgZmxhZ3MgKi8KKwl1bnNpZ25lZCBzaG9ydCBjX2xmbGFnOwkJLyogbG9jYWwgbW9kZSBmbGFncyAqLworCXVuc2lnbmVkIGNoYXIgY19saW5lOwkJLyogbGluZSBkaXNjaXBsaW5lICovCisJdW5zaWduZWQgY2hhciBjX2NjW05DQ107CS8qIGNvbnRyb2wgY2hhcmFjdGVycyAqLworfTsKKworLyogbW9kZW0gbGluZXMgKi8KKyNkZWZpbmUgVElPQ01fTEUJMHgwMDEKKyNkZWZpbmUgVElPQ01fRFRSCTB4MDAyCisjZGVmaW5lIFRJT0NNX1JUUwkweDAwNAorI2RlZmluZSBUSU9DTV9TVAkweDAwOAorI2RlZmluZSBUSU9DTV9TUgkweDAxMAorI2RlZmluZSBUSU9DTV9DVFMJMHgwMjAKKyNkZWZpbmUgVElPQ01fQ0FSCTB4MDQwCisjZGVmaW5lIFRJT0NNX1JORwkweDA4MAorI2RlZmluZSBUSU9DTV9EU1IJMHgxMDAKKyNkZWZpbmUgVElPQ01fQ0QJVElPQ01fQ0FSCisjZGVmaW5lIFRJT0NNX1JJCVRJT0NNX1JORworI2RlZmluZSBUSU9DTV9PVVQxCTB4MjAwMAorI2RlZmluZSBUSU9DTV9PVVQyCTB4NDAwMAorI2RlZmluZSBUSU9DTV9MT09QCTB4ODAwMAorCisvKiBpb2N0bCAoZmQsIFRJT0NTRVJHRVRMU1IsICZyZXN1bHQpIHdoZXJlIHJlc3VsdCBtYXkgYmUgYXMgYmVsb3cgKi8KKworLyogbGluZSBkaXNjaXBsaW5lcyAqLworI2RlZmluZSBOX1RUWQkJMAorI2RlZmluZSBOX1NMSVAJCTEKKyNkZWZpbmUgTl9NT1VTRQkJMgorI2RlZmluZSBOX1BQUAkJMworI2RlZmluZSBOX1NUUklQCQk0CisjZGVmaW5lIE5fQVgyNQkJNQorI2RlZmluZSBOX1gyNQkJNgkvKiBYLjI1IGFzeW5jICovCisjZGVmaW5lIE5fNlBBQ0sJCTcKKyNkZWZpbmUgTl9NQVNDCQk4CS8qIFJlc2VydmVkIGZvciBNb2JpdGV4IG1vZHVsZSA8a2F6QGNhZmUubmV0PiAqLworI2RlZmluZSBOX1IzOTY0CQk5CS8qIFJlc2VydmVkIGZvciBTaW1hdGljIFIzOTY0IG1vZHVsZSAqLworI2RlZmluZSBOX1BST0ZJQlVTX0ZETAkxMAkvKiBSZXNlcnZlZCBmb3IgUHJvZmlidXMgPERhdmVAbXZoaS5jb20+ICovCisjZGVmaW5lIE5fSVJEQQkJMTEJLyogTGludXggSVIgLSBodHRwOi8vd3d3LmNzLnVpdC5uby9+ZGFnYi9pcmRhL2lyZGEuaHRtbCAqLworI2RlZmluZSBOX1NNU0JMT0NLCTEyCS8qIFNNUyBibG9jayBtb2RlIC0gZm9yIHRhbGtpbmcgdG8gR1NNIGRhdGEgY2FyZHMgYWJvdXQgU01TIG1lc3NhZ2VzICovCisjZGVmaW5lIE5fSERMQwkJMTMJLyogc3luY2hyb25vdXMgSERMQyAqLworI2RlZmluZSBOX1NZTkNfUFBQCTE0CisjZGVmaW5lIE5fSENJCQkxNQkvKiBCbHVldG9vdGggSENJIFVBUlQgKi8KKworI2lmZGVmIF9fS0VSTkVMX18KKworLyoJaW50cj1eQwkJcXVpdD1eXAkJZXJhc2U9ZGVsCWtpbGw9XlUKKwllb2Y9XkQJCXZ0aW1lPVwwCXZtaW49XDEJCXN4dGM9XDAKKwlzdGFydD1eUQlzdG9wPV5TCQlzdXNwPV5aCQllb2w9XDAKKwlyZXByaW50PV5SCWRpc2NhcmQ9XlUJd2VyYXNlPV5XCWxuZXh0PV5WCisJZW9sMj1cMAorKi8KKyNkZWZpbmUgSU5JVF9DX0NDICJcMDAzXDAzNFwxNzdcMDI1XDAwNFwwXDFcMFwwMjFcMDIzXDAzMlwwXDAyMlwwMTdcMDI3XDAyNlwwIgorCisvKgorICogVHJhbnNsYXRlIGEgInRlcm1pbyIgc3RydWN0dXJlIGludG8gYSAidGVybWlvcyIuIFVnaC4KKyAqLworI2RlZmluZSBTRVRfTE9XX1RFUk1JT1NfQklUUyh0ZXJtaW9zLCB0ZXJtaW8sIHgpIHsgXAorCXVuc2lnbmVkIHNob3J0IF9fdG1wOyBcCisJZ2V0X3VzZXIoX190bXAsJih0ZXJtaW8pLT54KTsgXAorCSoodW5zaWduZWQgc2hvcnQgKikgJih0ZXJtaW9zKS0+eCA9IF9fdG1wOyBcCit9CisKKyNkZWZpbmUgdXNlcl90ZXJtaW9fdG9fa2VybmVsX3Rlcm1pb3ModGVybWlvcywgdGVybWlvKSBcCisoeyBcCisJU0VUX0xPV19URVJNSU9TX0JJVFModGVybWlvcywgdGVybWlvLCBjX2lmbGFnKTsgXAorCVNFVF9MT1dfVEVSTUlPU19CSVRTKHRlcm1pb3MsIHRlcm1pbywgY19vZmxhZyk7IFwKKwlTRVRfTE9XX1RFUk1JT1NfQklUUyh0ZXJtaW9zLCB0ZXJtaW8sIGNfY2ZsYWcpOyBcCisJU0VUX0xPV19URVJNSU9TX0JJVFModGVybWlvcywgdGVybWlvLCBjX2xmbGFnKTsgXAorCWNvcHlfZnJvbV91c2VyKCh0ZXJtaW9zKS0+Y19jYywgKHRlcm1pbyktPmNfY2MsIE5DQyk7IFwKK30pCisKKy8qCisgKiBUcmFuc2xhdGUgYSAidGVybWlvcyIgc3RydWN0dXJlIGludG8gYSAidGVybWlvIi4gVWdoLgorICovCisjZGVmaW5lIGtlcm5lbF90ZXJtaW9zX3RvX3VzZXJfdGVybWlvKHRlcm1pbywgdGVybWlvcykgXAorKHsgXAorCXB1dF91c2VyKCh0ZXJtaW9zKS0+Y19pZmxhZywgJih0ZXJtaW8pLT5jX2lmbGFnKTsgXAorCXB1dF91c2VyKCh0ZXJtaW9zKS0+Y19vZmxhZywgJih0ZXJtaW8pLT5jX29mbGFnKTsgXAorCXB1dF91c2VyKCh0ZXJtaW9zKS0+Y19jZmxhZywgJih0ZXJtaW8pLT5jX2NmbGFnKTsgXAorCXB1dF91c2VyKCh0ZXJtaW9zKS0+Y19sZmxhZywgJih0ZXJtaW8pLT5jX2xmbGFnKTsgXAorCXB1dF91c2VyKCh0ZXJtaW9zKS0+Y19saW5lLCAgJih0ZXJtaW8pLT5jX2xpbmUpOyBcCisJY29weV90b191c2VyKCh0ZXJtaW8pLT5jX2NjLCAodGVybWlvcyktPmNfY2MsIE5DQyk7IFwKK30pCisKKyNkZWZpbmUgdXNlcl90ZXJtaW9zX3RvX2tlcm5lbF90ZXJtaW9zKGssIHUpIGNvcHlfZnJvbV91c2VyKGssIHUsIHNpemVvZihzdHJ1Y3QgdGVybWlvcykpCisjZGVmaW5lIGtlcm5lbF90ZXJtaW9zX3RvX3VzZXJfdGVybWlvcyh1LCBrKSBjb3B5X3RvX3VzZXIodSwgaywgc2l6ZW9mKHN0cnVjdCB0ZXJtaW9zKSkKKworI2VuZGlmCS8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmCS8qIF9fQVNNX1NINjRfVEVSTUlPU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaDY0L3RocmVhZF9pbmZvLmggYi9pbmNsdWRlL2FzbS1zaDY0L3RocmVhZF9pbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY1ZjM5NAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoNjQvdGhyZWFkX2luZm8uaApAQCAtMCwwICsxLDg3IEBACisjaWZuZGVmIF9fQVNNX1NINjRfVEhSRUFEX0lORk9fSAorI2RlZmluZSBfX0FTTV9TSDY0X1RIUkVBRF9JTkZPX0gKKworLyoKKyAqIFN1cGVySCA1IHZlcnNpb24KKyAqIENvcHlyaWdodCAoQykgMjAwMyAgUGF1bCBNdW5kdAorICovCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjaW5jbHVkZSA8YXNtL3JlZ2lzdGVycy5oPgorCisvKgorICogbG93IGxldmVsIHRhc2sgZGF0YSB0aGF0IGVudHJ5LlMgbmVlZHMgaW1tZWRpYXRlIGFjY2VzcyB0bworICogLSB0aGlzIHN0cnVjdCBzaG91bGQgZml0IGVudGlyZWx5IGluc2lkZSBvZiBvbmUgY2FjaGUgbGluZQorICogLSB0aGlzIHN0cnVjdCBzaGFyZXMgdGhlIHN1cGVydmlzb3Igc3RhY2sgcGFnZXMKKyAqIC0gaWYgdGhlIGNvbnRlbnRzIG9mIHRoaXMgc3RydWN0dXJlIGFyZSBjaGFuZ2VkLCB0aGUgYXNzZW1ibHkgY29uc3RhbnRzIG11c3QgYWxzbyBiZSBjaGFuZ2VkCisgKi8KK3N0cnVjdCB0aHJlYWRfaW5mbyB7CisJc3RydWN0IHRhc2tfc3RydWN0CSp0YXNrOwkJLyogbWFpbiB0YXNrIHN0cnVjdHVyZSAqLworCXN0cnVjdCBleGVjX2RvbWFpbgkqZXhlY19kb21haW47CS8qIGV4ZWN1dGlvbiBkb21haW4gKi8KKwl1bnNpZ25lZCBsb25nCQlmbGFnczsJCS8qIGxvdyBsZXZlbCBmbGFncyAqLworCS8qIFB1dCB0aGUgNCAzMi1iaXQgZmllbGRzIHRvZ2V0aGVyIHRvIG1ha2UgYXNtIG9mZnNldHRpbmcgZWFzaWVyLiAqLworCV9fczMyCQkJcHJlZW1wdF9jb3VudDsgLyogMCA9PiBwcmVlbXB0YWJsZSwgPDAgPT4gQlVHICovCisJX191MTYJCQljcHU7CisKKwltbV9zZWdtZW50X3QJCWFkZHJfbGltaXQ7CisJc3RydWN0IHJlc3RhcnRfYmxvY2sJcmVzdGFydF9ibG9jazsKKworCV9fdTgJCQlzdXBlcnZpc29yX3N0YWNrWzBdOworfTsKKworLyoKKyAqIG1hY3Jvcy9mdW5jdGlvbnMgZm9yIGdhaW5pbmcgYWNjZXNzIHRvIHRoZSB0aHJlYWQgaW5mb3JtYXRpb24gc3RydWN0dXJlCisgKi8KKyNkZWZpbmUgSU5JVF9USFJFQURfSU5GTyh0c2spCQkJXAorewkJCQkJCVwKKwkudGFzawkJPSAmdHNrLAkJCVwKKwkuZXhlY19kb21haW4JPSAmZGVmYXVsdF9leGVjX2RvbWFpbiwJXAorCS5mbGFncwkJPSAwLAkJCVwKKwkuY3B1CQk9IDAsCQkJXAorCS5wcmVlbXB0X2NvdW50CT0gMSwJCQlcCisJLmFkZHJfbGltaXQgICAgID0gS0VSTkVMX0RTLCAgICAgICAgICAgIFwKKwkucmVzdGFydF9ibG9jawk9IHsJCQlcCisJCS5mbiA9IGRvX25vX3Jlc3RhcnRfc3lzY2FsbCwJXAorCX0sCQkJCQlcCit9CisKKyNkZWZpbmUgaW5pdF90aHJlYWRfaW5mbwkoaW5pdF90aHJlYWRfdW5pb24udGhyZWFkX2luZm8pCisjZGVmaW5lIGluaXRfc3RhY2sJCShpbml0X3RocmVhZF91bmlvbi5zdGFjaykKKworLyogaG93IHRvIGdldCB0aGUgdGhyZWFkIGluZm9ybWF0aW9uIHN0cnVjdCBmcm9tIEMgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRocmVhZF9pbmZvICpjdXJyZW50X3RocmVhZF9pbmZvKHZvaWQpCit7CisJc3RydWN0IHRocmVhZF9pbmZvICp0aTsKKworCV9fYXNtX18gX192b2xhdGlsZV9fICgiZ2V0Y29uICIgX19LQ1IwICIsICUwXG5cdCIgOiAiPXIiICh0aSkpOworCisJcmV0dXJuIHRpOworfQorCisvKiB0aHJlYWQgaW5mb3JtYXRpb24gYWxsb2NhdGlvbiAqLworCisKKworI2RlZmluZSBhbGxvY190aHJlYWRfaW5mbyh0aSkgKChzdHJ1Y3QgdGhyZWFkX2luZm8gKikgX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMLDEpKQorI2RlZmluZSBmcmVlX3RocmVhZF9pbmZvKHRpKSBmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKSAodGkpLCAxKQorI2RlZmluZSBnZXRfdGhyZWFkX2luZm8odGkpIGdldF90YXNrX3N0cnVjdCgodGkpLT50YXNrKQorI2RlZmluZSBwdXRfdGhyZWFkX2luZm8odGkpIHB1dF90YXNrX3N0cnVjdCgodGkpLT50YXNrKQorCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKyNkZWZpbmUgVEhSRUFEX1NJWkUgIDgxOTIKKworI2RlZmluZSBQUkVFTVBUX0FDVElWRQkJMHg0MDAwMDAwCisKKy8qIHRocmVhZCBpbmZvcm1hdGlvbiBmbGFncyAqLworI2RlZmluZSBUSUZfU1lTQ0FMTF9UUkFDRQkwCS8qIHN5c2NhbGwgdHJhY2UgYWN0aXZlICovCisjZGVmaW5lIFRJRl9TSUdQRU5ESU5HCQkyCS8qIHNpZ25hbCBwZW5kaW5nICovCisjZGVmaW5lIFRJRl9ORUVEX1JFU0NIRUQJMwkvKiByZXNjaGVkdWxpbmcgbmVjZXNzYXJ5ICovCisjZGVmaW5lIFRJRl9NRU1ESUUJCTQKKworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX19BU01fU0g2NF9USFJFQURfSU5GT19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaDY0L3RpbWV4LmggYi9pbmNsdWRlL2FzbS1zaDY0L3RpbWV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYwYjc5MgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoNjQvdGltZXguaApAQCAtMCwwICsxLDM0IEBACisjaWZuZGVmIF9fQVNNX1NINjRfVElNRVhfSAorI2RlZmluZSBfX0FTTV9TSDY0X1RJTUVYX0gKKworLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIGluY2x1ZGUvYXNtLXNoNjQvdGltZXguaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSAgUGFvbG8gQWxiZXJlbGxpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgIFBhdWwgTXVuZHQKKyAqCisgKiBzaC01IGFyY2hpdGVjdHVyZSB0aW1leCBzcGVjaWZpY2F0aW9ucworICoKKyAqLworCisjZGVmaW5lIENMT0NLX1RJQ0tfUkFURQkxMTkzMTgwIC8qIFVuZGVybHlpbmcgSFogKi8KKyNkZWZpbmUgQ0xPQ0tfVElDS19GQUNUT1IJMjAJLyogRmFjdG9yIG9mIGJvdGggMTAwMDAwMCBhbmQgQ0xPQ0tfVElDS19SQVRFICovCisjZGVmaW5lIEZJTkVUVU5FICgoKCgoKGxvbmcpTEFUQ0ggKiBIWiAtIENMT0NLX1RJQ0tfUkFURSkgPDwgU0hJRlRfSFopICogXAorCSgxMDAwMDAwL0NMT0NLX1RJQ0tfRkFDVE9SKSAvIChDTE9DS19USUNLX1JBVEUvQ0xPQ0tfVElDS19GQUNUT1IpKSBcCisJCTw8IChTSElGVF9TQ0FMRS1TSElGVF9IWikpIC8gSFopCisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBjeWNsZXNfdDsKKworc3RhdGljIF9faW5saW5lX18gY3ljbGVzX3QgZ2V0X2N5Y2xlcyAodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSB2eHRpbWVfbG9jaygpCQlkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgdnh0aW1lX3VubG9jaygpCQlkbyB7fSB3aGlsZSAoMCkKKworI2VuZGlmIC8qIF9fQVNNX1NINjRfVElNRVhfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2g2NC90bGIuaCBiL2luY2x1ZGUvYXNtLXNoNjQvdGxiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk3OTQwOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoNjQvdGxiLmgKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLXNoNjQvdGxiLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgIFBhdWwgTXVuZHQKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKyNpZm5kZWYgX19BU01fU0g2NF9UTEJfSAorI2RlZmluZSBfX0FTTV9TSDY0X1RMQl9ICisKKy8qCisgKiBOb3RlISBUaGVzZSBhcmUgbW9zdGx5IHVudXNlZCwgd2UganVzdCBuZWVkIHRoZSB4VExCX0xBU1RfVkFSX1VOUkVTVFJJQ1RFRAorICogZm9yIGhlYWQuUyEgT25jZSB0aGlzIGxpbWl0YXRpb24gaXMgZ29uZSwgd2UgY2FuIGNsZWFuIHRoZSByZXN0IG9mIHRoaXMgdXAuCisgKi8KKworLyogSVRMQiBkZWZpbmVzICovCisjZGVmaW5lIElUTEJfRklYRUQJMHgwMDAwMDAwMAkvKiBGaXJzdCBmaXhlZCBJVExCLCBzZWUgaGVhZC5TICovCisjZGVmaW5lIElUTEJfTEFTVF9WQVJfVU5SRVNUUklDVEVECTB4MDAwMDAzRjAJLyogTGFzdCBJVExCICovCisKKy8qIERUTEIgZGVmaW5lcyAqLworI2RlZmluZSBEVExCX0ZJWEVECTB4MDA4MDAwMDAJLyogRmlyc3QgZml4ZWQgRFRMQiwgc2VlIGhlYWQuUyAqLworI2RlZmluZSBEVExCX0xBU1RfVkFSX1VOUkVTVFJJQ1RFRAkweDAwODAwM0YwCS8qIExhc3QgRFRMQiAqLworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisvKioKKyAqIGZvcl9lYWNoX2R0bGJfZW50cnkKKyAqCisgKiBAdGxiOglUTEIgZW50cnkKKyAqCisgKiBJdGVyYXRlIG92ZXIgZnJlZSAobm9uLXdpcmVkKSBEVExCIGVudHJpZXMKKyAqLworI2RlZmluZSBmb3JfZWFjaF9kdGxiX2VudHJ5KHRsYikJCVwKKwlmb3IgKHRsYiAgPSBjcHVfZGF0YS0+ZHRsYi5maXJzdDsJXAorCSAgICAgdGxiIDw9IGNwdV9kYXRhLT5kdGxiLmxhc3Q7CVwKKwkgICAgIHRsYiArPSBjcHVfZGF0YS0+ZHRsYi5zdGVwKQorCisvKioKKyAqIGZvcl9lYWNoX2l0bGJfZW50cnkKKyAqCisgKiBAdGxiOglUTEIgZW50cnkKKyAqCisgKiBJdGVyYXRlIG92ZXIgZnJlZSAobm9uLXdpcmVkKSBJVExCIGVudHJpZXMKKyAqLworI2RlZmluZSBmb3JfZWFjaF9pdGxiX2VudHJ5KHRsYikJCVwKKwlmb3IgKHRsYiAgPSBjcHVfZGF0YS0+aXRsYi5maXJzdDsJXAorCSAgICAgdGxiIDw9IGNwdV9kYXRhLT5pdGxiLmxhc3Q7CVwKKwkgICAgIHRsYiArPSBjcHVfZGF0YS0+aXRsYi5zdGVwKQorCisvKioKKyAqIF9fZmx1c2hfdGxiX3Nsb3QKKyAqCisgKiBAc2xvdDoJQWRkcmVzcyBvZiBUTEIgc2xvdC4KKyAqCisgKiBGbHVzaGVzIFRMQiBzbG90IEBzbG90LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19mbHVzaF90bGJfc2xvdCh1bnNpZ25lZCBsb25nIGxvbmcgc2xvdCkKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInB1dGNmZyAlMCwgMCwgcjYzXG4iIDogOiAiciIgKHNsb3QpKTsKK30KKworLyogYXJjaC9zaDY0L21tL3RsYi5jICovCitleHRlcm4gaW50IHNoNjRfdGxiX2luaXQodm9pZCk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIHNoNjRfbmV4dF9mcmVlX2R0bGJfZW50cnkodm9pZCk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIHNoNjRfZ2V0X3dpcmVkX2R0bGJfZW50cnkodm9pZCk7CitleHRlcm4gaW50IHNoNjRfcHV0X3dpcmVkX2R0bGJfZW50cnkodW5zaWduZWQgbG9uZyBsb25nIGVudHJ5KTsKKworZXh0ZXJuIHZvaWQgc2g2NF9zZXR1cF90bGJfc2xvdCh1bnNpZ25lZCBsb25nIGxvbmcgY29uZmlnX2FkZHIsIHVuc2lnbmVkIGxvbmcgZWFkZHIsIHVuc2lnbmVkIGxvbmcgYXNpZCwgdW5zaWduZWQgbG9uZyBwYWRkcik7CitleHRlcm4gdm9pZCBzaDY0X3RlYXJkb3duX3RsYl9zbG90KHVuc2lnbmVkIGxvbmcgbG9uZyBjb25maWdfYWRkcik7CisKKyNkZWZpbmUgdGxiX3N0YXJ0X3ZtYSh0bGIsIHZtYSkgXAorCWZsdXNoX2NhY2hlX3JhbmdlKHZtYSwgdm1hLT52bV9zdGFydCwgdm1hLT52bV9lbmQpCisKKyNkZWZpbmUgdGxiX2VuZF92bWEodGxiLCB2bWEpCVwKKwlmbHVzaF90bGJfcmFuZ2Uodm1hLCB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX2VuZCkKKworI2RlZmluZSBfX3RsYl9yZW1vdmVfdGxiX2VudHJ5KHRsYiwgcHRlLCBhZGRyZXNzKQlkbyB7IH0gd2hpbGUgKDApCisKKy8qCisgKiBGbHVzaCB3aG9sZSBUTEJzIGZvciBNTQorICovCisjZGVmaW5lIHRsYl9mbHVzaCh0bGIpCQlmbHVzaF90bGJfbW0oKHRsYiktPm1tKQorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdGxiLmg+CisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworI2VuZGlmIC8qIF9fQVNNX1NINjRfVExCX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2g2NC90bGJmbHVzaC5oIGIvaW5jbHVkZS9hc20tc2g2NC90bGJmbHVzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1YzA3MTkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaDY0L3RsYmZsdXNoLmgKQEAgLTAsMCArMSwzMSBAQAorI2lmbmRlZiBfX0FTTV9TSDY0X1RMQkZMVVNIX0gKKyNkZWZpbmUgX19BU01fU0g2NF9UTEJGTFVTSF9ICisKKyNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgorCisvKgorICogVExCIGZsdXNoaW5nOgorICoKKyAqICAtIGZsdXNoX3RsYigpIGZsdXNoZXMgdGhlIGN1cnJlbnQgbW0gc3RydWN0IFRMQnMKKyAqICAtIGZsdXNoX3RsYl9hbGwoKSBmbHVzaGVzIGFsbCBwcm9jZXNzZXMgVExCcworICogIC0gZmx1c2hfdGxiX21tKG1tKSBmbHVzaGVzIHRoZSBzcGVjaWZpZWQgbW0gY29udGV4dCBUTEIncworICogIC0gZmx1c2hfdGxiX3BhZ2Uodm1hLCB2bWFkZHIpIGZsdXNoZXMgb25lIHBhZ2UKKyAqICAtIGZsdXNoX3RsYl9yYW5nZShtbSwgc3RhcnQsIGVuZCkgZmx1c2hlcyBhIHJhbmdlIG9mIHBhZ2VzCisgKgorICovCisKK2V4dGVybiB2b2lkIGZsdXNoX3RsYih2b2lkKTsKK2V4dGVybiB2b2lkIGZsdXNoX3RsYl9hbGwodm9pZCk7CitleHRlcm4gdm9pZCBmbHVzaF90bGJfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pOworZXh0ZXJuIHZvaWQgZmx1c2hfdGxiX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQkJICAgIHVuc2lnbmVkIGxvbmcgZW5kKTsKK2V4dGVybiB2b2lkIGZsdXNoX3RsYl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHBhZ2UpOworZXh0ZXJuIGlubGluZSB2b2lkIGZsdXNoX3RsYl9wZ3RhYmxlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKK30KKworZXh0ZXJuIHZvaWQgZmx1c2hfdGxiX2tlcm5lbF9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7CisKKyNlbmRpZiAvKiBfX0FTTV9TSDY0X1RMQkZMVVNIX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2g2NC90b3BvbG9neS5oIGIvaW5jbHVkZS9hc20tc2g2NC90b3BvbG9neS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0MjExNzgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaDY0L3RvcG9sb2d5LmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fQVNNX1NINjRfVE9QT0xPR1lfSAorI2RlZmluZSBfX0FTTV9TSDY0X1RPUE9MT0dZX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3RvcG9sb2d5Lmg+CisKKyNlbmRpZiAvKiBfX0FTTV9TSDY0X1RPUE9MT0dZX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoNjQvdHlwZXMuaCBiL2luY2x1ZGUvYXNtLXNoNjQvdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWQ0ZDJmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2g2NC90eXBlcy5oCkBAIC0wLDAgKzEsNzYgQEAKKyNpZm5kZWYgX19BU01fU0g2NF9UWVBFU19ICisjZGVmaW5lIF9fQVNNX1NINjRfVFlQRVNfSAorCisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogaW5jbHVkZS9hc20tc2g2NC90eXBlcy5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxICBQYW9sbyBBbGJlcmVsbGkKKyAqCisgKi8KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1bW9kZV90OworCisvKgorICogX194eCBpcyBvazogaXQgZG9lc24ndCBwb2xsdXRlIHRoZSBQT1NJWCBuYW1lc3BhY2UuIFVzZSB0aGVzZSBpbiB0aGUKKyAqIGhlYWRlciBmaWxlcyBleHBvcnRlZCB0byB1c2VyIHNwYWNlCisgKi8KKwordHlwZWRlZiBfX3NpZ25lZF9fIGNoYXIgX19zODsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBfX3U4OworCit0eXBlZGVmIF9fc2lnbmVkX18gc2hvcnQgX19zMTY7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fdTE2OworCit0eXBlZGVmIF9fc2lnbmVkX18gaW50IF9fczMyOwordHlwZWRlZiB1bnNpZ25lZCBpbnQgX191MzI7CisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAhZGVmaW5lZChfX1NUUklDVF9BTlNJX18pCit0eXBlZGVmIF9fc2lnbmVkX18gbG9uZyBsb25nIF9fczY0OwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgX191NjQ7CisjZW5kaWYKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisvKgorICogVGhlc2UgYXJlbid0IGV4cG9ydGVkIG91dHNpZGUgdGhlIGtlcm5lbCB0byBhdm9pZCBuYW1lIHNwYWNlIGNsYXNoZXMKKyAqLworI2lmZGVmIF9fS0VSTkVMX18KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKwordHlwZWRlZiBfX3NpZ25lZF9fIGNoYXIgczg7Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdTg7CisKK3R5cGVkZWYgX19zaWduZWRfXyBzaG9ydCBzMTY7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHUxNjsKKwordHlwZWRlZiBfX3NpZ25lZF9fIGludCBzMzI7Cit0eXBlZGVmIHVuc2lnbmVkIGludCB1MzI7CisKK3R5cGVkZWYgX19zaWduZWRfXyBsb25nIGxvbmcgczY0OwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdTY0OworCisvKiBETUEgYWRkcmVzc2VzIGNvbWUgaW4gZ2VuZXJpYyBhbmQgNjQtYml0IGZsYXZvdXJzLiAgKi8KKworI2lmZGVmIENPTkZJR19ISUdITUVNNjRHCit0eXBlZGVmIHU2NCBkbWFfYWRkcl90OworI2Vsc2UKK3R5cGVkZWYgdTMyIGRtYV9hZGRyX3Q7CisjZW5kaWYKK3R5cGVkZWYgdTY0IGRtYTY0X2FkZHJfdDsKKwordHlwZWRlZiB1bnNpZ25lZCBpbnQga21lbV9idWZjdGxfdDsKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisjZGVmaW5lIEJJVFNfUEVSX0xPTkcgMzIKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9fQVNNX1NINjRfVFlQRVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2g2NC91YWNjZXNzLmggYi9pbmNsdWRlL2FzbS1zaDY0L3VhY2Nlc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzM2NTRkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2g2NC91YWNjZXNzLmgKQEAgLTAsMCArMSwzMjcgQEAKKyNpZm5kZWYgX19BU01fU0g2NF9VQUNDRVNTX0gKKyNkZWZpbmUgX19BU01fU0g2NF9VQUNDRVNTX0gKKworLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIGluY2x1ZGUvYXNtLXNoNjQvdWFjY2Vzcy5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxICBQYW9sbyBBbGJlcmVsbGkKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCAgUGF1bCBNdW5kdAorICoKKyAqIFVzZXIgc3BhY2UgbWVtb3J5IGFjY2VzcyBmdW5jdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgIE5paWJlIFl1dGFrYQorICoKKyAqICBCYXNlZCBvbjoKKyAqICAgICBNSVBTIGltcGxlbWVudGF0aW9uIHZlcnNpb24gMS4xNSBieQorICogICAgICAgICAgICAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCBieSBSYWxmIEJhZWNobGUKKyAqICAgICBhbmQgaTM4NiB2ZXJzaW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorCisjZGVmaW5lIFZFUklGWV9SRUFEICAgIDAKKyNkZWZpbmUgVkVSSUZZX1dSSVRFICAgMQorCisvKgorICogVGhlIGZzIHZhbHVlIGRldGVybWluZXMgd2hldGhlciBhcmd1bWVudCB2YWxpZGl0eSBjaGVja2luZyBzaG91bGQgYmUKKyAqIHBlcmZvcm1lZCBvciBub3QuICBJZiBnZXRfZnMoKSA9PSBVU0VSX0RTLCBjaGVja2luZyBpcyBwZXJmb3JtZWQsIHdpdGgKKyAqIGdldF9mcygpID09IEtFUk5FTF9EUywgY2hlY2tpbmcgaXMgYnlwYXNzZWQuCisgKgorICogRm9yIGhpc3RvcmljYWwgcmVhc29ucyAoRGF0YSBTZWdtZW50IFJlZ2lzdGVyPyksIHRoZXNlIG1hY3JvcyBhcmUgbWlzbmFtZWQuCisgKi8KKworI2RlZmluZSBNQUtFX01NX1NFRyhzKQkoKG1tX3NlZ21lbnRfdCkgeyAocykgfSkKKworI2RlZmluZSBLRVJORUxfRFMJTUFLRV9NTV9TRUcoMHhGRkZGRkZGRikKKyNkZWZpbmUgVVNFUl9EUwkJTUFLRV9NTV9TRUcoMHg4MDAwMDAwMCkKKworI2RlZmluZSBnZXRfZHMoKQkoS0VSTkVMX0RTKQorI2RlZmluZSBnZXRfZnMoKSAgICAgICAgKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+YWRkcl9saW1pdCkKKyNkZWZpbmUgc2V0X2ZzKHgpICAgICAgIChjdXJyZW50X3RocmVhZF9pbmZvKCktPmFkZHJfbGltaXQ9KHgpKQorCisjZGVmaW5lIHNlZ21lbnRfZXEoYSxiKQkoKGEpLnNlZyA9PSAoYikuc2VnKQorCisjZGVmaW5lIF9fYWRkcl9vayhhZGRyKSAoKHVuc2lnbmVkIGxvbmcpKGFkZHIpIDwgKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+YWRkcl9saW1pdC5zZWcpKQorCisvKgorICogVWhodWgsIHRoaXMgbmVlZHMgMzMtYml0IGFyaXRobWV0aWMuIFdlIGhhdmUgYSBjYXJyeS4uCisgKgorICogc3VtIDo9IGFkZHIgKyBzaXplOyAgY2Fycnk/IC0tPiBmbGFnID0gdHJ1ZTsKKyAqIGlmIChzdW0gPj0gYWRkcl9saW1pdCkgZmxhZyA9IHRydWU7CisgKi8KKyNkZWZpbmUgX19yYW5nZV9vayhhZGRyLHNpemUpICgoKHVuc2lnbmVkIGxvbmcpIChhZGRyKSArIChzaXplKSA8IChjdXJyZW50X3RocmVhZF9pbmZvKCktPmFkZHJfbGltaXQuc2VnKSkgPyAwIDogMSkKKworI2RlZmluZSBhY2Nlc3Nfb2sodHlwZSxhZGRyLHNpemUpIChfX3JhbmdlX29rKGFkZHIsc2l6ZSkgPT0gMCkKKyNkZWZpbmUgX19hY2Nlc3Nfb2soYWRkcixzaXplKSAoX19yYW5nZV9vayhhZGRyLHNpemUpID09IDApCisKKy8qIHRoaXMgZnVuY3Rpb24gd2lsbCBnbyBhd2F5IHNvb24gLSB1c2UgYWNjZXNzX29rKCkgaW5zdGVhZCAqLworZXh0ZXJuIGlubGluZSBpbnQgX19kZXByZWNhdGVkIHZlcmlmeV9hcmVhKGludCB0eXBlLCBjb25zdCB2b2lkIF9fdXNlciAqIGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlyZXR1cm4gYWNjZXNzX29rKHR5cGUsYWRkcixzaXplKSA/IDAgOiAtRUZBVUxUOworfQorCisvKgorICogVWgsIHRoZXNlIHNob3VsZCBiZWNvbWUgdGhlIG1haW4gc2luZ2xlLXZhbHVlIHRyYW5zZmVyIHJvdXRpbmVzIC4uLgorICogVGhleSBhdXRvbWF0aWNhbGx5IHVzZSB0aGUgcmlnaHQgc2l6ZSBpZiB3ZSBqdXN0IGhhdmUgdGhlIHJpZ2h0CisgKiBwb2ludGVyIHR5cGUgLi4uCisgKgorICogQXMgTUlQUyB1c2VzIHRoZSBzYW1lIGFkZHJlc3Mgc3BhY2UgZm9yIGtlcm5lbCBhbmQgdXNlciBkYXRhLCB3ZQorICogY2FuIGp1c3QgZG8gdGhlc2UgYXMgZGlyZWN0IGFzc2lnbm1lbnRzLgorICoKKyAqIENhcmVmdWwgdG8gbm90CisgKiAoYSkgcmUtdXNlIHRoZSBhcmd1bWVudHMgZm9yIHNpZGUgZWZmZWN0cyAoc2l6ZW9mIGlzIG9rKQorICogKGIpIHJlcXVpcmUgYW55IGtub3dsZWRnZSBvZiBwcm9jZXNzZXMgYXQgdGhpcyBzdGFnZQorICovCisjZGVmaW5lIHB1dF91c2VyKHgscHRyKQlfX3B1dF91c2VyX2NoZWNrKCh4KSwocHRyKSxzaXplb2YoKihwdHIpKSkKKyNkZWZpbmUgZ2V0X3VzZXIoeCxwdHIpIF9fZ2V0X3VzZXJfY2hlY2soKHgpLChwdHIpLHNpemVvZigqKHB0cikpKQorCisvKgorICogVGhlICJfX3h4eCIgdmVyc2lvbnMgZG8gbm90IGRvIGFkZHJlc3Mgc3BhY2UgY2hlY2tpbmcsIHVzZWZ1bCB3aGVuCisgKiBkb2luZyBtdWx0aXBsZSBhY2Nlc3NlcyB0byB0aGUgc2FtZSBhcmVhICh0aGUgdXNlciBoYXMgdG8gZG8gdGhlCisgKiBjaGVja3MgYnkgaGFuZCB3aXRoICJhY2Nlc3Nfb2soKSIpCisgKi8KKyNkZWZpbmUgX19wdXRfdXNlcih4LHB0cikgX19wdXRfdXNlcl9ub2NoZWNrKCh4KSwocHRyKSxzaXplb2YoKihwdHIpKSkKKyNkZWZpbmUgX19nZXRfdXNlcih4LHB0cikgX19nZXRfdXNlcl9ub2NoZWNrKCh4KSwocHRyKSxzaXplb2YoKihwdHIpKSkKKworLyoKKyAqIFRoZSAieHh4X3JldCIgdmVyc2lvbnMgcmV0dXJuIGNvbnN0YW50IHNwZWNpZmllZCBpbiB0aGlyZCBhcmd1bWVudCwgaWYKKyAqIHNvbWV0aGluZyBiYWQgaGFwcGVucy4gVGhlc2UgbWFjcm9zIGNhbiBiZSBvcHRpbWl6ZWQgZm9yIHRoZQorICogY2FzZSBvZiBqdXN0IHJldHVybmluZyBmcm9tIHRoZSBmdW5jdGlvbiB4eHhfcmV0IGlzIHVzZWQuCisgKi8KKworI2RlZmluZSBwdXRfdXNlcl9yZXQoeCxwdHIscmV0KSAoeyBcCitpZiAocHV0X3VzZXIoeCxwdHIpKSByZXR1cm4gcmV0OyB9KQorCisjZGVmaW5lIGdldF91c2VyX3JldCh4LHB0cixyZXQpICh7IFwKK2lmIChnZXRfdXNlcih4LHB0cikpIHJldHVybiByZXQ7IH0pCisKKyNkZWZpbmUgX19wdXRfdXNlcl9yZXQoeCxwdHIscmV0KSAoeyBcCitpZiAoX19wdXRfdXNlcih4LHB0cikpIHJldHVybiByZXQ7IH0pCisKKyNkZWZpbmUgX19nZXRfdXNlcl9yZXQoeCxwdHIscmV0KSAoeyBcCitpZiAoX19nZXRfdXNlcih4LHB0cikpIHJldHVybiByZXQ7IH0pCisKK3N0cnVjdCBfX2xhcmdlX3N0cnVjdCB7IHVuc2lnbmVkIGxvbmcgYnVmWzEwMF07IH07CisjZGVmaW5lIF9fbSh4KSAoKihzdHJ1Y3QgX19sYXJnZV9zdHJ1Y3QgKikoeCkpCisKKyNkZWZpbmUgX19nZXRfdXNlcl9zaXplKHgscHRyLHNpemUscmV0dmFsKQkJCVwKK2RvIHsJCQkJCQkJCVwKKwlyZXR2YWwgPSAwOwkJCQkJCVwKKwlzd2l0Y2ggKHNpemUpIHsJCQkJCQlcCisJY2FzZSAxOgkJCQkJCQlcCisJCXJldHZhbCA9IF9fZ2V0X3VzZXJfYXNtX2IoeCwgcHRyKTsJCVwKKwkJYnJlYWs7CQkJCQkJXAorCWNhc2UgMjoJCQkJCQkJXAorCQlyZXR2YWwgPSBfX2dldF91c2VyX2FzbV93KHgsIHB0cik7CQlcCisJCWJyZWFrOwkJCQkJCVwKKwljYXNlIDQ6CQkJCQkJCVwKKwkJcmV0dmFsID0gX19nZXRfdXNlcl9hc21fbCh4LCBwdHIpOwkJXAorCQlicmVhazsJCQkJCQlcCisJY2FzZSA4OgkJCQkJCQlcCisJCXJldHZhbCA9IF9fZ2V0X3VzZXJfYXNtX3EoeCwgcHRyKTsJCVwKKwkJYnJlYWs7CQkJCQkJXAorCWRlZmF1bHQ6CQkJCQkJXAorCQlfX2dldF91c2VyX3Vua25vd24oKTsJCQkJXAorCQlicmVhazsJCQkJCQlcCisJfQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIF9fZ2V0X3VzZXJfbm9jaGVjayh4LHB0cixzaXplKQkJCQlcCisoewkJCQkJCQkJXAorCWxvbmcgX19ndV9hZGRyID0gKGxvbmcpKHB0cik7CQkJCVwKKwlsb25nIF9fZ3VfZXJyOwkJCQkJCVwKKwlfX3R5cGVvZigqKHB0cikpIF9fZ3VfdmFsOwkJCQlcCisJX19hc21fXyAoIiI6Ij1yIiAoX19ndV92YWwpKTsJCQkJXAorCV9fYXNtX18gKCIiOiI9ciIgKF9fZ3VfZXJyKSk7CQkJCVwKKwlfX2dldF91c2VyX3NpemUoKHZvaWQgKikmX19ndV92YWwsIF9fZ3VfYWRkciwgKHNpemUpLCBfX2d1X2Vycik7IFwKKwkoeCkgPSAoX190eXBlb2ZfXygqKHB0cikpKSBfX2d1X3ZhbDsJCQlcCisJX19ndV9lcnI7CQkJCQkJXAorfSkKKworI2RlZmluZSBfX2dldF91c2VyX2NoZWNrKHgscHRyLHNpemUpCQkJCVwKKyh7CQkJCQkJCQlcCisJbG9uZyBfX2d1X2FkZHIgPSAobG9uZykocHRyKTsJCQkJXAorCWxvbmcgX19ndV9lcnIgPSAtRUZBVUxUOwkJCQlcCisJX190eXBlb2YoKihwdHIpKSBfX2d1X3ZhbDsJCQkJXAorCV9fYXNtX18gKCIiOiI9ciIgKF9fZ3VfdmFsKSk7CQkJCVwKKwlfX2FzbV9fICgiIjoiPXIiIChfX2d1X2VycikpOwkJCQlcCisJaWYgKF9fYWNjZXNzX29rKF9fZ3VfYWRkciwgKHNpemUpKSkJCQlcCisJCV9fZ2V0X3VzZXJfc2l6ZSgodm9pZCAqKSZfX2d1X3ZhbCwgX19ndV9hZGRyLCAoc2l6ZSksIF9fZ3VfZXJyKTsgXAorCSh4KSA9IChfX3R5cGVvZl9fKCoocHRyKSkpIF9fZ3VfdmFsOwkJCVwKKwlfX2d1X2VycjsJCQkJCQlcCit9KQorCitleHRlcm4gbG9uZyBfX2dldF91c2VyX2FzbV9iKHZvaWQgKiwgbG9uZyk7CitleHRlcm4gbG9uZyBfX2dldF91c2VyX2FzbV93KHZvaWQgKiwgbG9uZyk7CitleHRlcm4gbG9uZyBfX2dldF91c2VyX2FzbV9sKHZvaWQgKiwgbG9uZyk7CitleHRlcm4gbG9uZyBfX2dldF91c2VyX2FzbV9xKHZvaWQgKiwgbG9uZyk7CitleHRlcm4gdm9pZCBfX2dldF91c2VyX3Vua25vd24odm9pZCk7CisKKyNkZWZpbmUgX19wdXRfdXNlcl9zaXplKHgscHRyLHNpemUscmV0dmFsKQkJCVwKK2RvIHsJCQkJCQkJCVwKKwlyZXR2YWwgPSAwOwkJCQkJCVwKKwlzd2l0Y2ggKHNpemUpIHsJCQkJCQlcCisJY2FzZSAxOgkJCQkJCQlcCisJCXJldHZhbCA9IF9fcHV0X3VzZXJfYXNtX2IoeCwgcHRyKTsJCVwKKwkJYnJlYWs7CQkJCQkJXAorCWNhc2UgMjoJCQkJCQkJXAorCQlyZXR2YWwgPSBfX3B1dF91c2VyX2FzbV93KHgsIHB0cik7CQlcCisJCWJyZWFrOwkJCQkJCVwKKwljYXNlIDQ6CQkJCQkJCVwKKwkJcmV0dmFsID0gX19wdXRfdXNlcl9hc21fbCh4LCBwdHIpOwkJXAorCQlicmVhazsJCQkJCQlcCisJY2FzZSA4OgkJCQkJCQlcCisJCXJldHZhbCA9IF9fcHV0X3VzZXJfYXNtX3EoeCwgcHRyKTsJCVwKKwkJYnJlYWs7CQkJCQkJXAorCWRlZmF1bHQ6CQkJCQkJXAorCQlfX3B1dF91c2VyX3Vua25vd24oKTsJCQkJXAorCX0JCQkJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBfX3B1dF91c2VyX25vY2hlY2soeCxwdHIsc2l6ZSkJCQkJXAorKHsJCQkJCQkJCVwKKwlsb25nIF9fcHVfZXJyOwkJCQkJCVwKKwlfX3R5cGVvZl9fKCoocHRyKSkgX19wdV92YWwgPSAoeCk7CQkJXAorCV9fcHV0X3VzZXJfc2l6ZSgodm9pZCAqKSZfX3B1X3ZhbCwgKGxvbmcpKHB0ciksIChzaXplKSwgX19wdV9lcnIpOyBcCisJX19wdV9lcnI7CQkJCQkJXAorfSkKKworI2RlZmluZSBfX3B1dF91c2VyX2NoZWNrKHgscHRyLHNpemUpCQkJCVwKKyh7CQkJCQkJCQlcCisJbG9uZyBfX3B1X2VyciA9IC1FRkFVTFQ7CQkJCVwKKwlsb25nIF9fcHVfYWRkciA9IChsb25nKShwdHIpOwkJCQlcCisJX190eXBlb2ZfXygqKHB0cikpIF9fcHVfdmFsID0gKHgpOwkJCVwKKwkJCQkJCQkJXAorCWlmIChfX2FjY2Vzc19vayhfX3B1X2FkZHIsIChzaXplKSkpCQkJXAorCQlfX3B1dF91c2VyX3NpemUoKHZvaWQgKikmX19wdV92YWwsIF9fcHVfYWRkciwgKHNpemUpLCBfX3B1X2Vycik7XAorCV9fcHVfZXJyOwkJCQkJCVwKK30pCisKK2V4dGVybiBsb25nIF9fcHV0X3VzZXJfYXNtX2Iodm9pZCAqLCBsb25nKTsKK2V4dGVybiBsb25nIF9fcHV0X3VzZXJfYXNtX3codm9pZCAqLCBsb25nKTsKK2V4dGVybiBsb25nIF9fcHV0X3VzZXJfYXNtX2wodm9pZCAqLCBsb25nKTsKK2V4dGVybiBsb25nIF9fcHV0X3VzZXJfYXNtX3Eodm9pZCAqLCBsb25nKTsKK2V4dGVybiB2b2lkIF9fcHV0X3VzZXJfdW5rbm93bih2b2lkKTsKKworDAorLyogR2VuZXJpYyBhcmJpdHJhcnkgc2l6ZWQgY29weS4gICovCisvKiBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBOT1QgY29waWVkICovCisvKiBYWFg6IHNob3VsZCBiZSBzdWNoIHRoYXQ6IDRieXRlIGFuZCB0aGUgcmVzdC4gKi8KK2V4dGVybiBfX2tlcm5lbF9zaXplX3QgX19jb3B5X3VzZXIodm9pZCAqX190bywgY29uc3Qgdm9pZCAqX19mcm9tLCBfX2tlcm5lbF9zaXplX3QgX19uKTsKKworI2RlZmluZSBjb3B5X3RvX3VzZXIodG8sZnJvbSxuKSAoeyBcCit2b2lkICpfX2NvcHlfdG8gPSAodm9pZCAqKSAodG8pOyBcCitfX2tlcm5lbF9zaXplX3QgX19jb3B5X3NpemUgPSAoX19rZXJuZWxfc2l6ZV90KSAobik7IFwKK19fa2VybmVsX3NpemVfdCBfX2NvcHlfcmVzOyBcCitpZihfX2NvcHlfc2l6ZSAmJiBfX2FjY2Vzc19vaygodW5zaWduZWQgbG9uZylfX2NvcHlfdG8sIF9fY29weV9zaXplKSkgeyBcCitfX2NvcHlfcmVzID0gX19jb3B5X3VzZXIoX19jb3B5X3RvLCAodm9pZCAqKSAoZnJvbSksIF9fY29weV9zaXplKTsgXAorfSBlbHNlIF9fY29weV9yZXMgPSBfX2NvcHlfc2l6ZTsgXAorX19jb3B5X3JlczsgfSkKKworI2RlZmluZSBjb3B5X3RvX3VzZXJfcmV0KHRvLGZyb20sbixyZXR2YWwpICh7IFwKK2lmIChjb3B5X3RvX3VzZXIodG8sZnJvbSxuKSkgXAorCXJldHVybiByZXR2YWw7IFwKK30pCisKKyNkZWZpbmUgX19jb3B5X3RvX3VzZXIodG8sZnJvbSxuKQkJXAorCV9fY29weV91c2VyKCh2b2lkICopKHRvKSwJCVwKKwkJICAgICh2b2lkICopKGZyb20pLCBuKQorCisjZGVmaW5lIF9fY29weV90b191c2VyX3JldCh0byxmcm9tLG4scmV0dmFsKSAoeyBcCitpZiAoX19jb3B5X3RvX3VzZXIodG8sZnJvbSxuKSkgXAorCXJldHVybiByZXR2YWw7IFwKK30pCisKKyNkZWZpbmUgY29weV9mcm9tX3VzZXIodG8sZnJvbSxuKSAoeyBcCit2b2lkICpfX2NvcHlfdG8gPSAodm9pZCAqKSAodG8pOyBcCit2b2lkICpfX2NvcHlfZnJvbSA9ICh2b2lkICopIChmcm9tKTsgXAorX19rZXJuZWxfc2l6ZV90IF9fY29weV9zaXplID0gKF9fa2VybmVsX3NpemVfdCkgKG4pOyBcCitfX2tlcm5lbF9zaXplX3QgX19jb3B5X3JlczsgXAoraWYoX19jb3B5X3NpemUgJiYgX19hY2Nlc3Nfb2soKHVuc2lnbmVkIGxvbmcpX19jb3B5X2Zyb20sIF9fY29weV9zaXplKSkgeyBcCitfX2NvcHlfcmVzID0gX19jb3B5X3VzZXIoX19jb3B5X3RvLCBfX2NvcHlfZnJvbSwgX19jb3B5X3NpemUpOyBcCit9IGVsc2UgX19jb3B5X3JlcyA9IF9fY29weV9zaXplOyBcCitfX2NvcHlfcmVzOyB9KQorCisjZGVmaW5lIGNvcHlfZnJvbV91c2VyX3JldCh0byxmcm9tLG4scmV0dmFsKSAoeyBcCitpZiAoY29weV9mcm9tX3VzZXIodG8sZnJvbSxuKSkgXAorCXJldHVybiByZXR2YWw7IFwKK30pCisKKyNkZWZpbmUgX19jb3B5X2Zyb21fdXNlcih0byxmcm9tLG4pCQlcCisJX19jb3B5X3VzZXIoKHZvaWQgKikodG8pLAkJXAorCQkgICAgKHZvaWQgKikoZnJvbSksIG4pCisKKyNkZWZpbmUgX19jb3B5X2Zyb21fdXNlcl9yZXQodG8sZnJvbSxuLHJldHZhbCkgKHsgXAoraWYgKF9fY29weV9mcm9tX3VzZXIodG8sZnJvbSxuKSkgXAorCXJldHVybiByZXR2YWw7IFwKK30pCisKKyNkZWZpbmUgX19jb3B5X3RvX3VzZXJfaW5hdG9taWMgX19jb3B5X3RvX3VzZXIKKyNkZWZpbmUgX19jb3B5X2Zyb21fdXNlcl9pbmF0b21pYyBfX2NvcHlfZnJvbV91c2VyCisKKy8qIFhYWDogTm90IHN1cmUgaXQgd29ya3Mgd2VsbC4uCisgICBzaG91bGQgYmUgc3VjaCB0aGF0OiA0Ynl0ZSBjbGVhciBhbmQgdGhlIHJlc3QuICovCitleHRlcm4gX19rZXJuZWxfc2l6ZV90IF9fY2xlYXJfdXNlcih2b2lkICphZGRyLCBfX2tlcm5lbF9zaXplX3Qgc2l6ZSk7CisKKyNkZWZpbmUgY2xlYXJfdXNlcihhZGRyLG4pICh7IFwKK3ZvaWQgKiBfX2NsX2FkZHIgPSAoYWRkcik7IFwKK3Vuc2lnbmVkIGxvbmcgX19jbF9zaXplID0gKG4pOyBcCitpZiAoX19jbF9zaXplICYmIF9fYWNjZXNzX29rKCgodW5zaWduZWQgbG9uZykoX19jbF9hZGRyKSksIF9fY2xfc2l6ZSkpIFwKK19fY2xfc2l6ZSA9IF9fY2xlYXJfdXNlcihfX2NsX2FkZHIsIF9fY2xfc2l6ZSk7IFwKK19fY2xfc2l6ZTsgfSkKKworZXh0ZXJuIGludCBfX3N0cm5jcHlfZnJvbV91c2VyKHVuc2lnbmVkIGxvbmcgX19kZXN0LCB1bnNpZ25lZCBsb25nIF9fc3JjLCBpbnQgX19jb3VudCk7CisKKyNkZWZpbmUgc3RybmNweV9mcm9tX3VzZXIoZGVzdCxzcmMsY291bnQpICh7IFwKK3Vuc2lnbmVkIGxvbmcgX19zZnVfc3JjID0gKHVuc2lnbmVkIGxvbmcpIChzcmMpOyBcCitpbnQgX19zZnVfY291bnQgPSAoaW50KSAoY291bnQpOyBcCitsb25nIF9fc2Z1X3JlcyA9IC1FRkFVTFQ7IFwKK2lmKF9fYWNjZXNzX29rKF9fc2Z1X3NyYywgX19zZnVfY291bnQpKSB7IFwKK19fc2Z1X3JlcyA9IF9fc3RybmNweV9mcm9tX3VzZXIoKHVuc2lnbmVkIGxvbmcpIChkZXN0KSwgX19zZnVfc3JjLCBfX3NmdV9jb3VudCk7IFwKK30gX19zZnVfcmVzOyB9KQorCisjZGVmaW5lIHN0cmxlbl91c2VyKHN0cikgc3Rybmxlbl91c2VyKHN0ciwgfjBVTCA+PiAxKQorCisvKgorICogUmV0dXJuIHRoZSBzaXplIG9mIGEgc3RyaW5nIChpbmNsdWRpbmcgdGhlIGVuZGluZyAwISkKKyAqLworZXh0ZXJuIGxvbmcgX19zdHJubGVuX3VzZXIoY29uc3QgY2hhciAqX19zLCBsb25nIF9fbik7CisKK2V4dGVybiBfX2lubGluZV9fIGxvbmcgc3Rybmxlbl91c2VyKGNvbnN0IGNoYXIgKnMsIGxvbmcgbikKK3sKKwlpZiAoIV9fYWRkcl9vayhzKSkKKwkJcmV0dXJuIDA7CisJZWxzZQorCQlyZXR1cm4gX19zdHJubGVuX3VzZXIocywgbik7Cit9CisKK3N0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkKK3sKKwl1bnNpZ25lZCBsb25nIGluc24sIGZpeHVwOworfTsKKworI2RlZmluZSBBUkNIX0hBU19TRUFSQ0hfRVhUQUJMRQorCisvKiBJZiBnY2MgaW5saW5lcyBtZW1zZXQsIGl0IHdpbGwgdXNlIHN0LnEgaW5zdHJ1Y3Rpb25zLiAgVGhlcmVmb3JlLCB3ZSBuZWVkCisgICBrbWFsbG9jIGFsbG9jYXRpb25zIHRvIGJlIDgtYnl0ZSBhbGlnbmVkLiAgV2l0aG91dCB0aGlzLCB0aGUgYWxpZ25tZW50CisgICBiZWNvbWVzIEJZVEVfUEVSX1dPUkQgaS5lLiBvbmx5IDQgKHNpbmNlIHNpemVvZihsb25nKT09c2l6ZW9mKHZvaWQqKT09NCBvbgorICAgc2g2NCBhdCB0aGUgbW9tZW50KS4gKi8KKyNkZWZpbmUgQVJDSF9LTUFMTE9DX01JTkFMSUdOIDgKKworLyoKKyAqIFdlIHdhbnQgOC1ieXRlIGFsaWdubWVudCBmb3IgdGhlIHNsYWIgY2FjaGVzIGFzIHdlbGwsIG90aGVyd2lzZSB3ZSBoYXZlCisgKiB0aGUgc2FtZSBCWVRFU19QRVJfV09SRCAoc2l6ZW9mKHZvaWQgKikpIG1pbiBhbGlnbiBpbiBrbWVtX2NhY2hlX2NyZWF0ZSgpLgorICovCisjZGVmaW5lIEFSQ0hfU0xBQl9NSU5BTElHTiA4CisKKy8qIFJldHVybnMgMCBpZiBleGNlcHRpb24gbm90IGZvdW5kIGFuZCBmaXh1cC51bml0IG90aGVyd2lzZS4gICovCitleHRlcm4gdW5zaWduZWQgbG9uZyBzZWFyY2hfZXhjZXB0aW9uX3RhYmxlKHVuc2lnbmVkIGxvbmcgYWRkcik7CitleHRlcm4gY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqc2VhcmNoX2V4Y2VwdGlvbl90YWJsZXMgKHVuc2lnbmVkIGxvbmcgYWRkcik7CisKKyNlbmRpZiAvKiBfX0FTTV9TSDY0X1VBQ0NFU1NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2g2NC91Y29udGV4dC5oIGIvaW5jbHVkZS9hc20tc2g2NC91Y29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmNzdhMDgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaDY0L3Vjb250ZXh0LmgKQEAgLTAsMCArMSwyMyBAQAorI2lmbmRlZiBfX0FTTV9TSDY0X1VDT05URVhUX0gKKyNkZWZpbmUgX19BU01fU0g2NF9VQ09OVEVYVF9ICisKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBpbmNsdWRlL2FzbS1zaDY0L3Vjb250ZXh0LmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEgIFBhb2xvIEFsYmVyZWxsaQorICoKKyAqLworCitzdHJ1Y3QgdWNvbnRleHQgeworCXVuc2lnbmVkIGxvbmcJICB1Y19mbGFnczsKKwlzdHJ1Y3QgdWNvbnRleHQgICp1Y19saW5rOworCXN0YWNrX3QJCSAgdWNfc3RhY2s7CisJc3RydWN0IHNpZ2NvbnRleHQgdWNfbWNvbnRleHQ7CisJc2lnc2V0X3QJICB1Y19zaWdtYXNrOwkvKiBtYXNrIGxhc3QgZm9yIGV4dGVuc2liaWxpdHkgKi8KK307CisKKyNlbmRpZiAvKiBfX0FTTV9TSDY0X1VDT05URVhUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoNjQvdW5hbGlnbmVkLmggYi9pbmNsdWRlL2FzbS1zaDY0L3VuYWxpZ25lZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0NDgxYjEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaDY0L3VuYWxpZ25lZC5oCkBAIC0wLDAgKzEsMTcgQEAKKyNpZm5kZWYgX19BU01fU0g2NF9VTkFMSUdORURfSAorI2RlZmluZSBfX0FTTV9TSDY0X1VOQUxJR05FRF9ICisKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBpbmNsdWRlL2FzbS1zaDY0L3VuYWxpZ25lZC5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxICBQYW9sbyBBbGJlcmVsbGkKKyAqCisgKi8KKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3VuYWxpZ25lZC5oPgorCisjZW5kaWYgLyogX19BU01fU0g2NF9VTkFMSUdORURfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2g2NC91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLXNoNjQvdW5pc3RkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTVmMGIxMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoNjQvdW5pc3RkLmgKQEAgLTAsMCArMSw1NjAgQEAKKyNpZm5kZWYgX19BU01fU0g2NF9VTklTVERfSAorI2RlZmluZSBfX0FTTV9TSDY0X1VOSVNURF9ICisKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBpbmNsdWRlL2FzbS1zaDY0L3VuaXN0ZC5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxICBQYW9sbyBBbGJlcmVsbGkKKyAqIENvcHlyaWdodCAoQykgMjAwMyAgUGF1bCBNdW5kdAorICogQ29weXJpZ2h0IChDKSAyMDA0ICBTZWFuIE1jR29vZ2FuCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBzeXN0ZW0gY2FsbCBudW1iZXJzLgorICoKKyAqLworCisjZGVmaW5lIF9fTlJfc2V0dXAJCSAgMAkvKiB1c2VkIG9ubHkgYnkgaW5pdCwgdG8gZ2V0IHN5c3RlbSBnb2luZyAqLworI2RlZmluZSBfX05SX2V4aXQJCSAgMQorI2RlZmluZSBfX05SX2ZvcmsJCSAgMgorI2RlZmluZSBfX05SX3JlYWQJCSAgMworI2RlZmluZSBfX05SX3dyaXRlCQkgIDQKKyNkZWZpbmUgX19OUl9vcGVuCQkgIDUKKyNkZWZpbmUgX19OUl9jbG9zZQkJICA2CisjZGVmaW5lIF9fTlJfd2FpdHBpZAkJICA3CisjZGVmaW5lIF9fTlJfY3JlYXQJCSAgOAorI2RlZmluZSBfX05SX2xpbmsJCSAgOQorI2RlZmluZSBfX05SX3VubGluawkJIDEwCisjZGVmaW5lIF9fTlJfZXhlY3ZlCQkgMTEKKyNkZWZpbmUgX19OUl9jaGRpcgkJIDEyCisjZGVmaW5lIF9fTlJfdGltZQkJIDEzCisjZGVmaW5lIF9fTlJfbWtub2QJCSAxNAorI2RlZmluZSBfX05SX2NobW9kCQkgMTUKKyNkZWZpbmUgX19OUl9sY2hvd24JCSAxNgorI2RlZmluZSBfX05SX2JyZWFrCQkgMTcKKyNkZWZpbmUgX19OUl9vbGRzdGF0CQkgMTgKKyNkZWZpbmUgX19OUl9sc2VlawkJIDE5CisjZGVmaW5lIF9fTlJfZ2V0cGlkCQkgMjAKKyNkZWZpbmUgX19OUl9tb3VudAkJIDIxCisjZGVmaW5lIF9fTlJfdW1vdW50CQkgMjIKKyNkZWZpbmUgX19OUl9zZXR1aWQJCSAyMworI2RlZmluZSBfX05SX2dldHVpZAkJIDI0CisjZGVmaW5lIF9fTlJfc3RpbWUJCSAyNQorI2RlZmluZSBfX05SX3B0cmFjZQkJIDI2CisjZGVmaW5lIF9fTlJfYWxhcm0JCSAyNworI2RlZmluZSBfX05SX29sZGZzdGF0CQkgMjgKKyNkZWZpbmUgX19OUl9wYXVzZQkJIDI5CisjZGVmaW5lIF9fTlJfdXRpbWUJCSAzMAorI2RlZmluZSBfX05SX3N0dHkJCSAzMQorI2RlZmluZSBfX05SX2d0dHkJCSAzMgorI2RlZmluZSBfX05SX2FjY2VzcwkJIDMzCisjZGVmaW5lIF9fTlJfbmljZQkJIDM0CisjZGVmaW5lIF9fTlJfZnRpbWUJCSAzNQorI2RlZmluZSBfX05SX3N5bmMJCSAzNgorI2RlZmluZSBfX05SX2tpbGwJCSAzNworI2RlZmluZSBfX05SX3JlbmFtZQkJIDM4CisjZGVmaW5lIF9fTlJfbWtkaXIJCSAzOQorI2RlZmluZSBfX05SX3JtZGlyCQkgNDAKKyNkZWZpbmUgX19OUl9kdXAJCSA0MQorI2RlZmluZSBfX05SX3BpcGUJCSA0MgorI2RlZmluZSBfX05SX3RpbWVzCQkgNDMKKyNkZWZpbmUgX19OUl9wcm9mCQkgNDQKKyNkZWZpbmUgX19OUl9icmsJCSA0NQorI2RlZmluZSBfX05SX3NldGdpZAkJIDQ2CisjZGVmaW5lIF9fTlJfZ2V0Z2lkCQkgNDcKKyNkZWZpbmUgX19OUl9zaWduYWwJCSA0OAorI2RlZmluZSBfX05SX2dldGV1aWQJCSA0OQorI2RlZmluZSBfX05SX2dldGVnaWQJCSA1MAorI2RlZmluZSBfX05SX2FjY3QJCSA1MQorI2RlZmluZSBfX05SX3Vtb3VudDIJCSA1MgorI2RlZmluZSBfX05SX2xvY2sJCSA1MworI2RlZmluZSBfX05SX2lvY3RsCQkgNTQKKyNkZWZpbmUgX19OUl9mY250bAkJIDU1CisjZGVmaW5lIF9fTlJfbXB4CQkgNTYKKyNkZWZpbmUgX19OUl9zZXRwZ2lkCQkgNTcKKyNkZWZpbmUgX19OUl91bGltaXQJCSA1OAorI2RlZmluZSBfX05SX29sZG9sZHVuYW1lCSA1OQorI2RlZmluZSBfX05SX3VtYXNrCQkgNjAKKyNkZWZpbmUgX19OUl9jaHJvb3QJCSA2MQorI2RlZmluZSBfX05SX3VzdGF0CQkgNjIKKyNkZWZpbmUgX19OUl9kdXAyCQkgNjMKKyNkZWZpbmUgX19OUl9nZXRwcGlkCQkgNjQKKyNkZWZpbmUgX19OUl9nZXRwZ3JwCQkgNjUKKyNkZWZpbmUgX19OUl9zZXRzaWQJCSA2NgorI2RlZmluZSBfX05SX3NpZ2FjdGlvbgkJIDY3CisjZGVmaW5lIF9fTlJfc2dldG1hc2sJCSA2OAorI2RlZmluZSBfX05SX3NzZXRtYXNrCQkgNjkKKyNkZWZpbmUgX19OUl9zZXRyZXVpZAkJIDcwCisjZGVmaW5lIF9fTlJfc2V0cmVnaWQJCSA3MQorI2RlZmluZSBfX05SX3NpZ3N1c3BlbmQJCSA3MgorI2RlZmluZSBfX05SX3NpZ3BlbmRpbmcJCSA3MworI2RlZmluZSBfX05SX3NldGhvc3RuYW1lCSA3NAorI2RlZmluZSBfX05SX3NldHJsaW1pdAkJIDc1CisjZGVmaW5lIF9fTlJfZ2V0cmxpbWl0CSAJIDc2CS8qIEJhY2sgY29tcGF0aWJsZSAyR2lnIGxpbWl0ZWQgcmxpbWl0ICovCisjZGVmaW5lIF9fTlJfZ2V0cnVzYWdlCQkgNzcKKyNkZWZpbmUgX19OUl9nZXR0aW1lb2ZkYXkJIDc4CisjZGVmaW5lIF9fTlJfc2V0dGltZW9mZGF5CSA3OQorI2RlZmluZSBfX05SX2dldGdyb3VwcwkJIDgwCisjZGVmaW5lIF9fTlJfc2V0Z3JvdXBzCQkgODEKKyNkZWZpbmUgX19OUl9zZWxlY3QJCSA4MgorI2RlZmluZSBfX05SX3N5bWxpbmsJCSA4MworI2RlZmluZSBfX05SX29sZGxzdGF0CQkgODQKKyNkZWZpbmUgX19OUl9yZWFkbGluawkJIDg1CisjZGVmaW5lIF9fTlJfdXNlbGliCQkgODYKKyNkZWZpbmUgX19OUl9zd2Fwb24JCSA4NworI2RlZmluZSBfX05SX3JlYm9vdAkJIDg4CisjZGVmaW5lIF9fTlJfcmVhZGRpcgkJIDg5CisjZGVmaW5lIF9fTlJfbW1hcAkJIDkwCisjZGVmaW5lIF9fTlJfbXVubWFwCQkgOTEKKyNkZWZpbmUgX19OUl90cnVuY2F0ZQkJIDkyCisjZGVmaW5lIF9fTlJfZnRydW5jYXRlCQkgOTMKKyNkZWZpbmUgX19OUl9mY2htb2QJCSA5NAorI2RlZmluZSBfX05SX2ZjaG93bgkJIDk1CisjZGVmaW5lIF9fTlJfZ2V0cHJpb3JpdHkJIDk2CisjZGVmaW5lIF9fTlJfc2V0cHJpb3JpdHkJIDk3CisjZGVmaW5lIF9fTlJfcHJvZmlsCQkgOTgKKyNkZWZpbmUgX19OUl9zdGF0ZnMJCSA5OQorI2RlZmluZSBfX05SX2ZzdGF0ZnMJCTEwMAorI2RlZmluZSBfX05SX2lvcGVybQkJMTAxCisjZGVmaW5lIF9fTlJfc29ja2V0Y2FsbAkJMTAyCS8qIG9sZCBpbXBsZW1lbnRhdGlvbiBvZiBzb2NrZXQgc3lzdGVtY2FsbCAqLworI2RlZmluZSBfX05SX3N5c2xvZwkJMTAzCisjZGVmaW5lIF9fTlJfc2V0aXRpbWVyCQkxMDQKKyNkZWZpbmUgX19OUl9nZXRpdGltZXIJCTEwNQorI2RlZmluZSBfX05SX3N0YXQJCTEwNgorI2RlZmluZSBfX05SX2xzdGF0CQkxMDcKKyNkZWZpbmUgX19OUl9mc3RhdAkJMTA4CisjZGVmaW5lIF9fTlJfb2xkdW5hbWUJCTEwOQorI2RlZmluZSBfX05SX2lvcGwJCTExMAorI2RlZmluZSBfX05SX3ZoYW5ndXAJCTExMQorI2RlZmluZSBfX05SX2lkbGUJCTExMgorI2RlZmluZSBfX05SX3ZtODZvbGQJCTExMworI2RlZmluZSBfX05SX3dhaXQ0CQkxMTQKKyNkZWZpbmUgX19OUl9zd2Fwb2ZmCQkxMTUKKyNkZWZpbmUgX19OUl9zeXNpbmZvCQkxMTYKKyNkZWZpbmUgX19OUl9pcGMJCTExNworI2RlZmluZSBfX05SX2ZzeW5jCQkxMTgKKyNkZWZpbmUgX19OUl9zaWdyZXR1cm4JCTExOQorI2RlZmluZSBfX05SX2Nsb25lCQkxMjAKKyNkZWZpbmUgX19OUl9zZXRkb21haW5uYW1lCTEyMQorI2RlZmluZSBfX05SX3VuYW1lCQkxMjIKKyNkZWZpbmUgX19OUl9tb2RpZnlfbGR0CQkxMjMKKyNkZWZpbmUgX19OUl9hZGp0aW1leAkJMTI0CisjZGVmaW5lIF9fTlJfbXByb3RlY3QJCTEyNQorI2RlZmluZSBfX05SX3NpZ3Byb2NtYXNrCTEyNgorI2RlZmluZSBfX05SX2NyZWF0ZV9tb2R1bGUJMTI3CisjZGVmaW5lIF9fTlJfaW5pdF9tb2R1bGUJMTI4CisjZGVmaW5lIF9fTlJfZGVsZXRlX21vZHVsZQkxMjkKKyNkZWZpbmUgX19OUl9nZXRfa2VybmVsX3N5bXMJMTMwCisjZGVmaW5lIF9fTlJfcXVvdGFjdGwJCTEzMQorI2RlZmluZSBfX05SX2dldHBnaWQJCTEzMgorI2RlZmluZSBfX05SX2ZjaGRpcgkJMTMzCisjZGVmaW5lIF9fTlJfYmRmbHVzaAkJMTM0CisjZGVmaW5lIF9fTlJfc3lzZnMJCTEzNQorI2RlZmluZSBfX05SX3BlcnNvbmFsaXR5CTEzNgorI2RlZmluZSBfX05SX2Fmc19zeXNjYWxsCTEzNyAvKiBTeXNjYWxsIGZvciBBbmRyZXcgRmlsZSBTeXN0ZW0gKi8KKyNkZWZpbmUgX19OUl9zZXRmc3VpZAkJMTM4CisjZGVmaW5lIF9fTlJfc2V0ZnNnaWQJCTEzOQorI2RlZmluZSBfX05SX19sbHNlZWsJCTE0MAorI2RlZmluZSBfX05SX2dldGRlbnRzCQkxNDEKKyNkZWZpbmUgX19OUl9fbmV3c2VsZWN0CQkxNDIKKyNkZWZpbmUgX19OUl9mbG9jawkJMTQzCisjZGVmaW5lIF9fTlJfbXN5bmMJCTE0NAorI2RlZmluZSBfX05SX3JlYWR2CQkxNDUKKyNkZWZpbmUgX19OUl93cml0ZXYJCTE0NgorI2RlZmluZSBfX05SX2dldHNpZAkJMTQ3CisjZGVmaW5lIF9fTlJfZmRhdGFzeW5jCQkxNDgKKyNkZWZpbmUgX19OUl9fc3lzY3RsCQkxNDkKKyNkZWZpbmUgX19OUl9tbG9jawkJMTUwCisjZGVmaW5lIF9fTlJfbXVubG9jawkJMTUxCisjZGVmaW5lIF9fTlJfbWxvY2thbGwJCTE1MgorI2RlZmluZSBfX05SX211bmxvY2thbGwJCTE1MworI2RlZmluZSBfX05SX3NjaGVkX3NldHBhcmFtCQkxNTQKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRwYXJhbQkJMTU1CisjZGVmaW5lIF9fTlJfc2NoZWRfc2V0c2NoZWR1bGVyCQkxNTYKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRzY2hlZHVsZXIJCTE1NworI2RlZmluZSBfX05SX3NjaGVkX3lpZWxkCQkxNTgKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4CTE1OQorI2RlZmluZSBfX05SX3NjaGVkX2dldF9wcmlvcml0eV9taW4JMTYwCisjZGVmaW5lIF9fTlJfc2NoZWRfcnJfZ2V0X2ludGVydmFsCTE2MQorI2RlZmluZSBfX05SX25hbm9zbGVlcAkJMTYyCisjZGVmaW5lIF9fTlJfbXJlbWFwCQkxNjMKKyNkZWZpbmUgX19OUl9zZXRyZXN1aWQJCTE2NAorI2RlZmluZSBfX05SX2dldHJlc3VpZAkJMTY1CisjZGVmaW5lIF9fTlJfdm04NgkJMTY2CisjZGVmaW5lIF9fTlJfcXVlcnlfbW9kdWxlCTE2NworI2RlZmluZSBfX05SX3BvbGwJCTE2OAorI2RlZmluZSBfX05SX25mc3NlcnZjdGwJCTE2OQorI2RlZmluZSBfX05SX3NldHJlc2dpZAkJMTcwCisjZGVmaW5lIF9fTlJfZ2V0cmVzZ2lkCQkxNzEKKyNkZWZpbmUgX19OUl9wcmN0bCAgICAgICAgICAgICAgMTcyCisjZGVmaW5lIF9fTlJfcnRfc2lncmV0dXJuCTE3MworI2RlZmluZSBfX05SX3J0X3NpZ2FjdGlvbgkxNzQKKyNkZWZpbmUgX19OUl9ydF9zaWdwcm9jbWFzawkxNzUKKyNkZWZpbmUgX19OUl9ydF9zaWdwZW5kaW5nCTE3NgorI2RlZmluZSBfX05SX3J0X3NpZ3RpbWVkd2FpdAkxNzcKKyNkZWZpbmUgX19OUl9ydF9zaWdxdWV1ZWluZm8JMTc4CisjZGVmaW5lIF9fTlJfcnRfc2lnc3VzcGVuZAkxNzkKKyNkZWZpbmUgX19OUl9wcmVhZAkJMTgwCisjZGVmaW5lIF9fTlJfcHdyaXRlCQkxODEKKyNkZWZpbmUgX19OUl9jaG93bgkJMTgyCisjZGVmaW5lIF9fTlJfZ2V0Y3dkCQkxODMKKyNkZWZpbmUgX19OUl9jYXBnZXQJCTE4NAorI2RlZmluZSBfX05SX2NhcHNldAkJMTg1CisjZGVmaW5lIF9fTlJfc2lnYWx0c3RhY2sJMTg2CisjZGVmaW5lIF9fTlJfc2VuZGZpbGUJCTE4NworI2RlZmluZSBfX05SX3N0cmVhbXMxCQkxODgJLyogc29tZSBwZW9wbGUgYWN0dWFsbHkgd2FudCBpdCAqLworI2RlZmluZSBfX05SX3N0cmVhbXMyCQkxODkJLyogc29tZSBwZW9wbGUgYWN0dWFsbHkgd2FudCBpdCAqLworI2RlZmluZSBfX05SX3Zmb3JrCQkxOTAKKyNkZWZpbmUgX19OUl91Z2V0cmxpbWl0CQkxOTEJLyogU3VTIGNvbXBsaWFudCBnZXRybGltaXQgKi8KKyNkZWZpbmUgX19OUl9tbWFwMgkJMTkyCisjZGVmaW5lIF9fTlJfdHJ1bmNhdGU2NAkJMTkzCisjZGVmaW5lIF9fTlJfZnRydW5jYXRlNjQJMTk0CisjZGVmaW5lIF9fTlJfc3RhdDY0CQkxOTUKKyNkZWZpbmUgX19OUl9sc3RhdDY0CQkxOTYKKyNkZWZpbmUgX19OUl9mc3RhdDY0CQkxOTcKKyNkZWZpbmUgX19OUl9sY2hvd24zMgkJMTk4CisjZGVmaW5lIF9fTlJfZ2V0dWlkMzIJCTE5OQorI2RlZmluZSBfX05SX2dldGdpZDMyCQkyMDAKKyNkZWZpbmUgX19OUl9nZXRldWlkMzIJCTIwMQorI2RlZmluZSBfX05SX2dldGVnaWQzMgkJMjAyCisjZGVmaW5lIF9fTlJfc2V0cmV1aWQzMgkJMjAzCisjZGVmaW5lIF9fTlJfc2V0cmVnaWQzMgkJMjA0CisjZGVmaW5lIF9fTlJfZ2V0Z3JvdXBzMzIJMjA1CisjZGVmaW5lIF9fTlJfc2V0Z3JvdXBzMzIJMjA2CisjZGVmaW5lIF9fTlJfZmNob3duMzIJCTIwNworI2RlZmluZSBfX05SX3NldHJlc3VpZDMyCTIwOAorI2RlZmluZSBfX05SX2dldHJlc3VpZDMyCTIwOQorI2RlZmluZSBfX05SX3NldHJlc2dpZDMyCTIxMAorI2RlZmluZSBfX05SX2dldHJlc2dpZDMyCTIxMQorI2RlZmluZSBfX05SX2Nob3duMzIJCTIxMgorI2RlZmluZSBfX05SX3NldHVpZDMyCQkyMTMKKyNkZWZpbmUgX19OUl9zZXRnaWQzMgkJMjE0CisjZGVmaW5lIF9fTlJfc2V0ZnN1aWQzMgkJMjE1CisjZGVmaW5lIF9fTlJfc2V0ZnNnaWQzMgkJMjE2CisjZGVmaW5lIF9fTlJfcGl2b3Rfcm9vdAkJMjE3CisjZGVmaW5lIF9fTlJfbWluY29yZQkJMjE4CisjZGVmaW5lIF9fTlJfbWFkdmlzZQkJMjE5CisKKy8qIE5vbi1tdWx0aXBsZXhlZCBzb2NrZXQgZmFtaWx5ICovCisjZGVmaW5lIF9fTlJfc29ja2V0CQkyMjAKKyNkZWZpbmUgX19OUl9iaW5kCQkyMjEKKyNkZWZpbmUgX19OUl9jb25uZWN0CQkyMjIKKyNkZWZpbmUgX19OUl9saXN0ZW4JCTIyMworI2RlZmluZSBfX05SX2FjY2VwdAkJMjI0CisjZGVmaW5lIF9fTlJfZ2V0c29ja25hbWUJMjI1CisjZGVmaW5lIF9fTlJfZ2V0cGVlcm5hbWUJMjI2CisjZGVmaW5lIF9fTlJfc29ja2V0cGFpcgkJMjI3CisjZGVmaW5lIF9fTlJfc2VuZAkJMjI4CisjZGVmaW5lIF9fTlJfc2VuZHRvCQkyMjkKKyNkZWZpbmUgX19OUl9yZWN2CQkyMzAKKyNkZWZpbmUgX19OUl9yZWN2ZnJvbQkJMjMxCisjZGVmaW5lIF9fTlJfc2h1dGRvd24JCTIzMgorI2RlZmluZSBfX05SX3NldHNvY2tvcHQJCTIzMworI2RlZmluZSBfX05SX2dldHNvY2tvcHQJCTIzNAorI2RlZmluZSBfX05SX3NlbmRtc2cJCTIzNQorI2RlZmluZSBfX05SX3JlY3Ztc2cJCTIzNgorCisvKiBOb24tbXVsdGlwbGV4ZWQgSVBDIGZhbWlseSAqLworI2RlZmluZSBfX05SX3NlbW9wCQkyMzcKKyNkZWZpbmUgX19OUl9zZW1nZXQJCTIzOAorI2RlZmluZSBfX05SX3NlbWN0bAkJMjM5CisjZGVmaW5lIF9fTlJfbXNnc25kCQkyNDAKKyNkZWZpbmUgX19OUl9tc2dyY3YJCTI0MQorI2RlZmluZSBfX05SX21zZ2dldAkJMjQyCisjZGVmaW5lIF9fTlJfbXNnY3RsCQkyNDMKKyNpZiAwCisjZGVmaW5lIF9fTlJfc2htYXRjYWxsCQkyNDQKKyNlbmRpZgorI2RlZmluZSBfX05SX3NobWR0CQkyNDUKKyNkZWZpbmUgX19OUl9zaG1nZXQJCTI0NgorI2RlZmluZSBfX05SX3NobWN0bAkJMjQ3CisKKyNkZWZpbmUgX19OUl9nZXRkZW50czY0CQkyNDgKKyNkZWZpbmUgX19OUl9mY250bDY0CQkyNDkKKy8qIDIyMyBpcyB1bnVzZWQgKi8KKyNkZWZpbmUgX19OUl9nZXR0aWQJCTI1MgorI2RlZmluZSBfX05SX3JlYWRhaGVhZAkJMjUzCisjZGVmaW5lIF9fTlJfc2V0eGF0dHIJCTI1NAorI2RlZmluZSBfX05SX2xzZXR4YXR0cgkJMjU1CisjZGVmaW5lIF9fTlJfZnNldHhhdHRyCQkyNTYKKyNkZWZpbmUgX19OUl9nZXR4YXR0cgkJMjU3CisjZGVmaW5lIF9fTlJfbGdldHhhdHRyCQkyNTgKKyNkZWZpbmUgX19OUl9mZ2V0eGF0dHIJCTI2OQorI2RlZmluZSBfX05SX2xpc3R4YXR0cgkJMjYwCisjZGVmaW5lIF9fTlJfbGxpc3R4YXR0cgkJMjYxCisjZGVmaW5lIF9fTlJfZmxpc3R4YXR0cgkJMjYyCisjZGVmaW5lIF9fTlJfcmVtb3ZleGF0dHIJMjYzCisjZGVmaW5lIF9fTlJfbHJlbW92ZXhhdHRyCTI2NAorI2RlZmluZSBfX05SX2ZyZW1vdmV4YXR0cgkyNjUKKyNkZWZpbmUgX19OUl90a2lsbAkJMjY2CisjZGVmaW5lIF9fTlJfc2VuZGZpbGU2NAkJMjY3CisjZGVmaW5lIF9fTlJfZnV0ZXgJCTI2OAorI2RlZmluZSBfX05SX3NjaGVkX3NldGFmZmluaXR5CTI2OQorI2RlZmluZSBfX05SX3NjaGVkX2dldGFmZmluaXR5CTI3MAorI2RlZmluZSBfX05SX3NldF90aHJlYWRfYXJlYQkyNzEKKyNkZWZpbmUgX19OUl9nZXRfdGhyZWFkX2FyZWEJMjcyCisjZGVmaW5lIF9fTlJfaW9fc2V0dXAJCTI3MworI2RlZmluZSBfX05SX2lvX2Rlc3Ryb3kJCTI3NAorI2RlZmluZSBfX05SX2lvX2dldGV2ZW50cwkyNzUKKyNkZWZpbmUgX19OUl9pb19zdWJtaXQJCTI3NgorI2RlZmluZSBfX05SX2lvX2NhbmNlbAkJMjc3CisjZGVmaW5lIF9fTlJfZmFkdmlzZTY0CQkyNzgKKyNkZWZpbmUgX19OUl9leGl0X2dyb3VwCQkyODAKKworI2RlZmluZSBfX05SX2xvb2t1cF9kY29va2llCTI4MQorI2RlZmluZSBfX05SX2Vwb2xsX2NyZWF0ZQkyODIKKyNkZWZpbmUgX19OUl9lcG9sbF9jdGwJCTI4MworI2RlZmluZSBfX05SX2Vwb2xsX3dhaXQJCTI4NAorI2RlZmluZSBfX05SX3JlbWFwX2ZpbGVfcGFnZXMJMjg1CisjZGVmaW5lIF9fTlJfc2V0X3RpZF9hZGRyZXNzCTI4NgorI2RlZmluZSBfX05SX3RpbWVyX2NyZWF0ZQkyODcKKyNkZWZpbmUgX19OUl90aW1lcl9zZXR0aW1lCShfX05SX3RpbWVyX2NyZWF0ZSsxKQorI2RlZmluZSBfX05SX3RpbWVyX2dldHRpbWUJKF9fTlJfdGltZXJfY3JlYXRlKzIpCisjZGVmaW5lIF9fTlJfdGltZXJfZ2V0b3ZlcnJ1bgkoX19OUl90aW1lcl9jcmVhdGUrMykKKyNkZWZpbmUgX19OUl90aW1lcl9kZWxldGUJKF9fTlJfdGltZXJfY3JlYXRlKzQpCisjZGVmaW5lIF9fTlJfY2xvY2tfc2V0dGltZQkoX19OUl90aW1lcl9jcmVhdGUrNSkKKyNkZWZpbmUgX19OUl9jbG9ja19nZXR0aW1lCShfX05SX3RpbWVyX2NyZWF0ZSs2KQorI2RlZmluZSBfX05SX2Nsb2NrX2dldHJlcwkoX19OUl90aW1lcl9jcmVhdGUrNykKKyNkZWZpbmUgX19OUl9jbG9ja19uYW5vc2xlZXAJKF9fTlJfdGltZXJfY3JlYXRlKzgpCisjZGVmaW5lIF9fTlJfc3RhdGZzNjQJCTI5NgorI2RlZmluZSBfX05SX2ZzdGF0ZnM2NAkJMjk3CisjZGVmaW5lIF9fTlJfdGdraWxsCQkyOTgKKyNkZWZpbmUgX19OUl91dGltZXMJCTI5OQorI2RlZmluZSBfX05SX2ZhZHZpc2U2NF82NAkzMDAKKyNkZWZpbmUgX19OUl92c2VydmVyCQkzMDEKKyNkZWZpbmUgX19OUl9tYmluZCAgICAgICAgICAgICAgMzAyCisjZGVmaW5lIF9fTlJfZ2V0X21lbXBvbGljeSAgICAgIDMwMworI2RlZmluZSBfX05SX3NldF9tZW1wb2xpY3kgICAgICAzMDQKKyNkZWZpbmUgX19OUl9tcV9vcGVuICAgICAgICAgICAgMzA1CisjZGVmaW5lIF9fTlJfbXFfdW5saW5rICAgICAgICAgIChfX05SX21xX29wZW4rMSkKKyNkZWZpbmUgX19OUl9tcV90aW1lZHNlbmQgICAgICAgKF9fTlJfbXFfb3BlbisyKQorI2RlZmluZSBfX05SX21xX3RpbWVkcmVjZWl2ZSAgICAoX19OUl9tcV9vcGVuKzMpCisjZGVmaW5lIF9fTlJfbXFfbm90aWZ5ICAgICAgICAgIChfX05SX21xX29wZW4rNCkKKyNkZWZpbmUgX19OUl9tcV9nZXRzZXRhdHRyICAgICAgKF9fTlJfbXFfb3Blbis1KQorI2RlZmluZSBfX05SX3N5c19rZXhlY19sb2FkCTMxMQorI2RlZmluZSBfX05SX3dhaXRpZAkJMzEyCisjZGVmaW5lIF9fTlJfYWRkX2tleQkJMzEzCisjZGVmaW5lIF9fTlJfcmVxdWVzdF9rZXkJMzE0CisjZGVmaW5lIF9fTlJfa2V5Y3RsCQkzMTUKKworI2RlZmluZSBOUl9zeXNjYWxscyAzMTYKKworLyogdXNlci12aXNpYmxlIGVycm9yIG51bWJlcnMgYXJlIGluIHRoZSByYW5nZSAtMSAtIC0xMjU6IHNlZSA8YXNtLXNoNjQvZXJybm8uaD4gKi8KKworI2RlZmluZSBfX3N5c2NhbGxfcmV0dXJuKHR5cGUsIHJlcykgXAorZG8geyBcCisJLyogTm90ZTogd2hlbiByZXR1cm5pbmcgZnJvbSBrZXJuZWwgdGhlIHJldHVybiB2YWx1ZSBpcyBpbiByOQkgICAgXAorCSoqICAgICAgIFRoaXMgcHJldmVudHMgY29uZmxpY3RzIGJldHdlZW4gcmV0dXJuIHZhbHVlIGFuZCBhcmcxICAgICAgXAorCSoqICAgICAgIHdoZW4gZGlzcGF0Y2hpbmcgc2lnbmFsIGhhbmRsZXIsIGluIG90aGVyIHdvcmRzIG1ha2VzCSAgICBcCisJKiogICAgICAgbGlmZSBlYXNpZXIgaW4gdGhlIHN5c3RlbSBjYWxsIGVwaWxvZ3VlIChzZWUgZW50cnkuUykgICAgICBcCisJKi8JCQkJCQkJCSAgICBcCisgICAgICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19zcjIgX19hc21fXyAoInIyIikgPSByZXM7CQkgICAgXAorCWlmICgodW5zaWduZWQgbG9uZykocmVzKSA+PSAodW5zaWduZWQgbG9uZykoLTEyNSkpIHsgXAorCQllcnJubyA9IC0ocmVzKTsJCQkJCQkgICAgXAorCQlfX3NyMiA9IC0xOyAJCQkJCQkgICAgXAorCX0gXAorCXJldHVybiAodHlwZSkgKF9fc3IyKTsgCQkJCQkJICAgIFwKK30gd2hpbGUgKDApCisKKy8qIFhYWCAtIF9mb28gbmVlZHMgdG8gYmUgX19mb28sIHdoaWxlIF9fTlJfYmFyIGNvdWxkIGJlIF9OUl9iYXIuICovCisKKyNkZWZpbmUgX3N5c2NhbGwwKHR5cGUsbmFtZSkgXAordHlwZSBuYW1lKHZvaWQpIFwKK3sgXAorcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3NjMCBfX2FzbV9fICgicjkiKSA9ICgoMHgxMCA8PCAxNikgfCBfX05SXyMjbmFtZSk7IFwKK19fYXNtX18gX192b2xhdGlsZV9fICgidHJhcGEJJTEgIVx0XHRcdCIgI25hbWUgIigpIgkJCSAgICBcCisJOiAiPXIiIChfX3NjMCkgCQkJCQkJCSAgICBcCisJOiAiciIgKF9fc2MwKSApOyAJCQkJCQkgICAgXAorX19zeXNjYWxsX3JldHVybih0eXBlLF9fc2MwKTsgCQkJCQkJICAgIFwKK30KKworCS8qCisJICogVGhlIGFwcGFyZW50IHNwdXJpb3VzICJkdW1teSIgYXNzZW1ibGVyIGNvbW1lbnQgaXMgKm5lZWRlZCosCisJICogYXMgd2l0aG91dCBpdCwgdGhlIGNvbXBpbGVyIHRyZWF0cyB0aGUgYXJnPG4+IHZhcmlhYmxlcworCSAqIGFzIG5vIGxvbmdlciBsaXZlIGp1c3QgYmVmb3JlIHRoZSBhc20uIFRoZSBjb21waWxlciBjYW4KKwkgKiB0aGVuIG9wdGltaXplIHRoZSBzdG9yYWdlIGludG8gYW55IHJlZ2lzdGVycyBpdCB3aXNoZXMuCisJICogVGhlIGFkZGl0aW9uYWwgZHVtbXkgc3RhdGVtZW50IGZvcmNlcyB0aGUgY29tcGlsZXIgdG8gcHV0CisJICogdGhlIGFyZ3VtZW50cyBpbnRvIHRoZSBjb3JyZWN0IHJlZ2lzdGVycyBiZWZvcmUgdGhlIFRSQVBBLgorCSAqLworI2RlZmluZSBfc3lzY2FsbDEodHlwZSxuYW1lLHR5cGUxLGFyZzEpIFwKK3R5cGUgbmFtZSh0eXBlMSBhcmcxKSBcCit7IFwKK3JlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19zYzAgX19hc21fXyAoInI5IikgPSAoKDB4MTEgPDwgMTYpIHwgX19OUl8jI25hbWUpOyBcCityZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fc2MyIF9fYXNtX18gKCJyMiIpID0gKHVuc2lnbmVkIGxvbmcpIGFyZzE7CSAgICBcCitfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInRyYXBhCSUxICFcdFx0XHQiICNuYW1lICIoJTIpIgkJICAgIFwKKwk6ICI9ciIgKF9fc2MwKSAJCQkJCQkJICAgIFwKKwk6ICJyIiAoX19zYzApLCAiciIgKF9fc2MyKSk7CQkJCQkgICAgXAorX19hc21fXyBfX3ZvbGF0aWxlX18gKCIhZHVtbXkJJTAgJTEiCQkJCSAgIAkgICAgXAorCToJCQkJCQkJCSAgICBcCisJOiAiciIgKF9fc2MwKSwgInIiIChfX3NjMikpOwkJCQkJICAgIFwKK19fc3lzY2FsbF9yZXR1cm4odHlwZSxfX3NjMCk7IAkJCQkJCSAgICBcCit9CisKKyNkZWZpbmUgX3N5c2NhbGwyKHR5cGUsbmFtZSx0eXBlMSxhcmcxLHR5cGUyLGFyZzIpIFwKK3R5cGUgbmFtZSh0eXBlMSBhcmcxLHR5cGUyIGFyZzIpIFwKK3sgXAorcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3NjMCBfX2FzbV9fICgicjkiKSA9ICgoMHgxMiA8PCAxNikgfCBfX05SXyMjbmFtZSk7IFwKK3JlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19zYzIgX19hc21fXyAoInIyIikgPSAodW5zaWduZWQgbG9uZykgYXJnMTsJICAgIFwKK3JlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19zYzMgX19hc21fXyAoInIzIikgPSAodW5zaWduZWQgbG9uZykgYXJnMjsJICAgIFwKK19fYXNtX18gX192b2xhdGlsZV9fICgidHJhcGEJJTEgIVx0XHRcdCIgI25hbWUgIiglMiwlMykiCQkgICAgXAorCTogIj1yIiAoX19zYzApIAkJCQkJCQkgICAgXAorCTogInIiIChfX3NjMCksICJyIiAoX19zYzIpLCAiciIgKF9fc2MzKSApOwkJCSAgICBcCitfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIiFkdW1teQklMCAlMSAlMiIJCQkgICAJICAgIFwKKwk6CQkJCQkJCQkgICAgXAorCTogInIiIChfX3NjMCksICJyIiAoX19zYzIpLCAiciIgKF9fc2MzKSApOwkJCSAgICBcCitfX3N5c2NhbGxfcmV0dXJuKHR5cGUsX19zYzApOyAJCQkJCQkgICAgXAorfQorCisjZGVmaW5lIF9zeXNjYWxsMyh0eXBlLG5hbWUsdHlwZTEsYXJnMSx0eXBlMixhcmcyLHR5cGUzLGFyZzMpIFwKK3R5cGUgbmFtZSh0eXBlMSBhcmcxLHR5cGUyIGFyZzIsdHlwZTMgYXJnMykgXAoreyBcCityZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fc2MwIF9fYXNtX18gKCJyOSIpID0gKCgweDEzIDw8IDE2KSB8IF9fTlJfIyNuYW1lKTsgXAorcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3NjMiBfX2FzbV9fICgicjIiKSA9ICh1bnNpZ25lZCBsb25nKSBhcmcxOwkgICAgXAorcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3NjMyBfX2FzbV9fICgicjMiKSA9ICh1bnNpZ25lZCBsb25nKSBhcmcyOwkgICAgXAorcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3NjNCBfX2FzbV9fICgicjQiKSA9ICh1bnNpZ25lZCBsb25nKSBhcmczOwkgICAgXAorX19hc21fXyBfX3ZvbGF0aWxlX18gKCJ0cmFwYQklMSAhXHRcdFx0IiAjbmFtZSAiKCUyLCUzLCU0KSIJCSAgICBcCisJOiAiPXIiIChfX3NjMCkgCQkJCQkJCSAgICBcCisJOiAiciIgKF9fc2MwKSwgInIiIChfX3NjMiksICJyIiAoX19zYzMpLCAiciIgKF9fc2M0KSApOwkJICAgIFwKK19fYXNtX18gX192b2xhdGlsZV9fICgiIWR1bW15CSUwICUxICUyICUzIgkJCSAgIAkgICAgXAorCToJCQkJCQkJCSAgICBcCisJOiAiciIgKF9fc2MwKSwgInIiIChfX3NjMiksICJyIiAoX19zYzMpLCAiciIgKF9fc2M0KSApOwkgICAJICAgIFwKK19fc3lzY2FsbF9yZXR1cm4odHlwZSxfX3NjMCk7IAkJCQkJCSAgICBcCit9CisKKyNkZWZpbmUgX3N5c2NhbGw0KHR5cGUsbmFtZSx0eXBlMSxhcmcxLHR5cGUyLGFyZzIsdHlwZTMsYXJnMyx0eXBlNCxhcmc0KSBcCit0eXBlIG5hbWUgKHR5cGUxIGFyZzEsIHR5cGUyIGFyZzIsIHR5cGUzIGFyZzMsIHR5cGU0IGFyZzQpIFwKK3sgXAorcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3NjMCBfX2FzbV9fICgicjkiKSA9ICgoMHgxNCA8PCAxNikgfCBfX05SXyMjbmFtZSk7IFwKK3JlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19zYzIgX19hc21fXyAoInIyIikgPSAodW5zaWduZWQgbG9uZykgYXJnMTsJICAgIFwKK3JlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19zYzMgX19hc21fXyAoInIzIikgPSAodW5zaWduZWQgbG9uZykgYXJnMjsJICAgIFwKK3JlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19zYzQgX19hc21fXyAoInI0IikgPSAodW5zaWduZWQgbG9uZykgYXJnMzsJICAgIFwKK3JlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19zYzUgX19hc21fXyAoInI1IikgPSAodW5zaWduZWQgbG9uZykgYXJnNDsJICAgIFwKK19fYXNtX18gX192b2xhdGlsZV9fICgidHJhcGEJJTEgIVx0XHRcdCIgI25hbWUgIiglMiwlMywlNCwlNSkiCSAgICBcCisJOiAiPXIiIChfX3NjMCkgCQkJCQkJCSAgICBcCisJOiAiciIgKF9fc2MwKSwgInIiIChfX3NjMiksICJyIiAoX19zYzMpLCAiciIgKF9fc2M0KSwgInIiIChfX3NjNSkgKTtcCitfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIiFkdW1teQklMCAlMSAlMiAlMyAlNCIJCQkgICAJICAgIFwKKwk6CQkJCQkJCQkgICAgXAorCTogInIiIChfX3NjMCksICJyIiAoX19zYzIpLCAiciIgKF9fc2MzKSwgInIiIChfX3NjNCksICJyIiAoX19zYzUpICk7XAorX19zeXNjYWxsX3JldHVybih0eXBlLF9fc2MwKTsgCQkJCQkJICAgIFwKK30KKworI2RlZmluZSBfc3lzY2FsbDUodHlwZSxuYW1lLHR5cGUxLGFyZzEsdHlwZTIsYXJnMix0eXBlMyxhcmczLHR5cGU0LGFyZzQsdHlwZTUsYXJnNSkgXAordHlwZSBuYW1lICh0eXBlMSBhcmcxLCB0eXBlMiBhcmcyLCB0eXBlMyBhcmczLCB0eXBlNCBhcmc0LCB0eXBlNSBhcmc1KSBcCit7IFwKK3JlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19zYzAgX19hc21fXyAoInI5IikgPSAoKDB4MTUgPDwgMTYpIHwgX19OUl8jI25hbWUpOyBcCityZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fc2MyIF9fYXNtX18gKCJyMiIpID0gKHVuc2lnbmVkIGxvbmcpIGFyZzE7CSAgICBcCityZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fc2MzIF9fYXNtX18gKCJyMyIpID0gKHVuc2lnbmVkIGxvbmcpIGFyZzI7CSAgICBcCityZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fc2M0IF9fYXNtX18gKCJyNCIpID0gKHVuc2lnbmVkIGxvbmcpIGFyZzM7CSAgICBcCityZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fc2M1IF9fYXNtX18gKCJyNSIpID0gKHVuc2lnbmVkIGxvbmcpIGFyZzQ7CSAgICBcCityZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fc2M2IF9fYXNtX18gKCJyNiIpID0gKHVuc2lnbmVkIGxvbmcpIGFyZzU7CSAgICBcCitfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInRyYXBhCSUxICFcdFx0XHQiICNuYW1lICIoJTIsJTMsJTQsJTUsJTYpIgkgICAgXAorCTogIj1yIiAoX19zYzApIAkJCQkJCQkgICAgXAorCTogInIiIChfX3NjMCksICJyIiAoX19zYzIpLCAiciIgKF9fc2MzKSwgInIiIChfX3NjNCksICJyIiAoX19zYzUpLCAgXAorCSAgInIiIChfX3NjNikpOwkJCQkJCQkgICAgXAorX19hc21fXyBfX3ZvbGF0aWxlX18gKCIhZHVtbXkJJTAgJTEgJTIgJTMgJTQgJTUiCQkgICAJICAgIFwKKwk6CQkJCQkJCQkgICAgXAorCTogInIiIChfX3NjMCksICJyIiAoX19zYzIpLCAiciIgKF9fc2MzKSwgInIiIChfX3NjNCksICJyIiAoX19zYzUpLCAgXAorCSAgInIiIChfX3NjNikpOwkJCQkJCQkgICAgXAorX19zeXNjYWxsX3JldHVybih0eXBlLF9fc2MwKTsgCQkJCQkJICAgIFwKK30KKworI2RlZmluZSBfc3lzY2FsbDYodHlwZSxuYW1lLHR5cGUxLGFyZzEsdHlwZTIsYXJnMix0eXBlMyxhcmczLHR5cGU0LGFyZzQsdHlwZTUsYXJnNSwgdHlwZTYsIGFyZzYpIFwKK3R5cGUgbmFtZSAodHlwZTEgYXJnMSwgdHlwZTIgYXJnMiwgdHlwZTMgYXJnMywgdHlwZTQgYXJnNCwgdHlwZTUgYXJnNSwgdHlwZTYgYXJnNikgXAoreyBcCityZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fc2MwIF9fYXNtX18gKCJyOSIpID0gKCgweDE2IDw8IDE2KSB8IF9fTlJfIyNuYW1lKTsgXAorcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3NjMiBfX2FzbV9fICgicjIiKSA9ICh1bnNpZ25lZCBsb25nKSBhcmcxOwkgICAgXAorcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3NjMyBfX2FzbV9fICgicjMiKSA9ICh1bnNpZ25lZCBsb25nKSBhcmcyOwkgICAgXAorcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3NjNCBfX2FzbV9fICgicjQiKSA9ICh1bnNpZ25lZCBsb25nKSBhcmczOwkgICAgXAorcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3NjNSBfX2FzbV9fICgicjUiKSA9ICh1bnNpZ25lZCBsb25nKSBhcmc0OwkgICAgXAorcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3NjNiBfX2FzbV9fICgicjYiKSA9ICh1bnNpZ25lZCBsb25nKSBhcmc1OwkgICAgXAorcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3NjNyBfX2FzbV9fICgicjciKSA9ICh1bnNpZ25lZCBsb25nKSBhcmc2OwkgICAgXAorX19hc21fXyBfX3ZvbGF0aWxlX18gKCJ0cmFwYQklMSAhXHRcdFx0IiAjbmFtZSAiKCUyLCUzLCU0LCU1LCU2LCU3KSIJICAgIFwKKwk6ICI9ciIgKF9fc2MwKSAJCQkJCQkJICAgIFwKKwk6ICJyIiAoX19zYzApLCAiciIgKF9fc2MyKSwgInIiIChfX3NjMyksICJyIiAoX19zYzQpLCAiciIgKF9fc2M1KSwgIFwKKwkgICJyIiAoX19zYzYpLCAiciIgKF9fc2M3KSk7CQkJCQkgICAgXAorX19hc21fXyBfX3ZvbGF0aWxlX18gKCIhZHVtbXkJJTAgJTEgJTIgJTMgJTQgJTUgJTYiCQkgICAJICAgIFwKKwk6CQkJCQkJCQkgICAgXAorCTogInIiIChfX3NjMCksICJyIiAoX19zYzIpLCAiciIgKF9fc2MzKSwgInIiIChfX3NjNCksICJyIiAoX19zYzUpLCAgXAorCSAgInIiIChfX3NjNiksICJyIiAoX19zYzcpKTsJCQkJCSAgICBcCitfX3N5c2NhbGxfcmV0dXJuKHR5cGUsX19zYzApOyAJCQkJCQkgICAgXAorfQorCisjaWZkZWYgX19LRVJORUxfXworI2RlZmluZSBfX0FSQ0hfV0FOVF9JUENfUEFSU0VfVkVSU0lPTgorI2RlZmluZSBfX0FSQ0hfV0FOVF9PTERfUkVBRERJUgorI2RlZmluZSBfX0FSQ0hfV0FOVF9PTERfU1RBVAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TVEFUNjQKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0FMQVJNCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19HRVRIT1NUTkFNRQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfUEFVU0UKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NHRVRNQVNLCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdOQUwKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1RJTUUKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1VUSU1FCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19XQUlUUElECisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TT0NLRVRDQUxMCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19GQURWSVNFNjQKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0dFVFBHUlAKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0xMU0VFSworI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfTklDRQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfT0xEX0dFVFJMSU1JVAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfT0xEVU1PVU5UCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdQRU5ESU5HCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdQUk9DTUFTSworI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfUlRfU0lHQUNUSU9OCisjZW5kaWYKKworI2lmZGVmIF9fS0VSTkVMX1NZU0NBTExTX18KKworLyogQ29weSBmcm9tIHNoICovCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKworLyoKKyAqIHdlIG5lZWQgdGhpcyBpbmxpbmUgLSBmb3JraW5nIGZyb20ga2VybmVsIHNwYWNlIHdpbGwgcmVzdWx0CisgKiBpbiBOTyBDT1BZIE9OIFdSSVRFICghISEpLCB1bnRpbCBhbiBleGVjdmUgaXMgZXhlY3V0ZWQuIFRoaXMKKyAqIGlzIG5vIHByb2JsZW0sIGJ1dCBmb3IgdGhlIHN0YWNrLiBUaGlzIGlzIGhhbmRsZWQgYnkgbm90IGxldHRpbmcKKyAqIG1haW4oKSB1c2UgdGhlIHN0YWNrIGF0IGFsbCBhZnRlciBmb3JrKCkuIFRodXMsIG5vIGZ1bmN0aW9uCisgKiBjYWxscyAtIHdoaWNoIG1lYW5zIGlubGluZSBjb2RlIGZvciBmb3JrIHRvbywgYXMgb3RoZXJ3aXNlIHdlCisgKiB3b3VsZCB1c2UgdGhlIHN0YWNrIHVwb24gZXhpdCBmcm9tICdmb3JrKCknLgorICoKKyAqIEFjdHVhbGx5IG9ubHkgcGF1c2UgYW5kIGZvcmsgYXJlIG5lZWRlZCBpbmxpbmUsIHNvIHRoYXQgdGhlcmUKKyAqIHdvbid0IGJlIGFueSBtZXNzaW5nIHdpdGggdGhlIHN0YWNrIGZyb20gbWFpbigpLCBidXQgd2UgZGVmaW5lCisgKiBzb21lIG90aGVycyB0b28uCisgKi8KKyNkZWZpbmUgX19OUl9fZXhpdCBfX05SX2V4aXQKK3N0YXRpYyBpbmxpbmUgX3N5c2NhbGwwKGludCxwYXVzZSkKK3N0YXRpYyBpbmxpbmUgX3N5c2NhbGwxKGludCxzZXR1cCxpbnQsbWFnaWMpCitzdGF0aWMgaW5saW5lIF9zeXNjYWxsMChpbnQsc3luYykKK3N0YXRpYyBpbmxpbmUgX3N5c2NhbGwwKHBpZF90LHNldHNpZCkKK3N0YXRpYyBpbmxpbmUgX3N5c2NhbGwzKGludCx3cml0ZSxpbnQsZmQsY29uc3QgY2hhciAqLGJ1ZixvZmZfdCxjb3VudCkKK3N0YXRpYyBpbmxpbmUgX3N5c2NhbGwzKGludCxyZWFkLGludCxmZCxjaGFyICosYnVmLG9mZl90LGNvdW50KQorc3RhdGljIGlubGluZSBfc3lzY2FsbDMob2ZmX3QsbHNlZWssaW50LGZkLG9mZl90LG9mZnNldCxpbnQsY291bnQpCitzdGF0aWMgaW5saW5lIF9zeXNjYWxsMShpbnQsZHVwLGludCxmZCkKK3N0YXRpYyBpbmxpbmUgX3N5c2NhbGwzKGludCxleGVjdmUsY29uc3QgY2hhciAqLGZpbGUsY2hhciAqKixhcmd2LGNoYXIgKiosZW52cCkKK3N0YXRpYyBpbmxpbmUgX3N5c2NhbGwzKGludCxvcGVuLGNvbnN0IGNoYXIgKixmaWxlLGludCxmbGFnLGludCxtb2RlKQorc3RhdGljIGlubGluZSBfc3lzY2FsbDEoaW50LGNsb3NlLGludCxmZCkKK3N0YXRpYyBpbmxpbmUgX3N5c2NhbGwxKGludCxfZXhpdCxpbnQsZXhpdGNvZGUpCitzdGF0aWMgaW5saW5lIF9zeXNjYWxsMyhwaWRfdCx3YWl0cGlkLHBpZF90LHBpZCxpbnQgKix3YWl0X3N0YXQsaW50LG9wdGlvbnMpCitzdGF0aWMgaW5saW5lIF9zeXNjYWxsMShpbnQsZGVsZXRlX21vZHVsZSxjb25zdCBjaGFyICosbmFtZSkKKworc3RhdGljIGlubGluZSBwaWRfdCB3YWl0KGludCAqIHdhaXRfc3RhdCkKK3sKKwlyZXR1cm4gd2FpdHBpZCgtMSx3YWl0X3N0YXQsMCk7Cit9CisjZW5kaWYKKworLyoKKyAqICJDb25kaXRpb25hbCIgc3lzY2FsbHMKKyAqCisgKiBXaGF0IHdlIHdhbnQgaXMgX19hdHRyaWJ1dGVfXygod2VhayxhbGlhcygic3lzX25pX3N5c2NhbGwiKSkpLAorICogYnV0IGl0IGRvZXNuJ3Qgd29yayBvbiBhbGwgdG9vbGNoYWlucywgc28gd2UganVzdCBkbyBpdCBieSBoYW5kCisgKi8KKyNpZm5kZWYgY29uZF9zeXNjYWxsCisjZGVmaW5lIGNvbmRfc3lzY2FsbCh4KSBhc20oIi53ZWFrXHQiICN4ICJcblx0LnNldFx0IiAjeCAiLHN5c19uaV9zeXNjYWxsIikKKyNlbmRpZgorCisjZW5kaWYgLyogX19BU01fU0g2NF9VTklTVERfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2g2NC91c2VyLmggYi9pbmNsdWRlL2FzbS1zaDY0L3VzZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjMyZjM5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2g2NC91c2VyLmgKQEAgLTAsMCArMSw3MSBAQAorI2lmbmRlZiBfX0FTTV9TSDY0X1VTRVJfSAorI2RlZmluZSBfX0FTTV9TSDY0X1VTRVJfSAorCisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogaW5jbHVkZS9hc20tc2g2NC91c2VyLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEgIFBhb2xvIEFsYmVyZWxsaQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisKKy8qCisgKiBDb3JlIGZpbGUgZm9ybWF0OiBUaGUgY29yZSBmaWxlIGlzIHdyaXR0ZW4gaW4gc3VjaCBhIHdheSB0aGF0IGdkYgorICogY2FuIHVuZGVyc3RhbmQgaXQgYW5kIHByb3ZpZGUgdXNlZnVsIGluZm9ybWF0aW9uIHRvIHRoZSB1c2VyICh1bmRlcgorICogbGludXggd2UgdXNlIHRoZSBgdHJhZC1jb3JlJyBiZmQpLiAgVGhlIGZpbGUgY29udGVudHMgYXJlIGFzIGZvbGxvd3M6CisgKgorICogIHVwYWdlOiAxIHBhZ2UgY29uc2lzdGluZyBvZiBhIHVzZXIgc3RydWN0IHRoYXQgdGVsbHMgZ2RiCisgKgl3aGF0IGlzIHByZXNlbnQgaW4gdGhlIGZpbGUuICBEaXJlY3RseSBhZnRlciB0aGlzIGlzIGEKKyAqCWNvcHkgb2YgdGhlIHRhc2tfc3RydWN0LCB3aGljaCBpcyBjdXJyZW50bHkgbm90IHVzZWQgYnkgZ2RiLAorICoJYnV0IGl0IG1heSBjb21lIGluIGhhbmR5IGF0IHNvbWUgcG9pbnQuICBBbGwgb2YgdGhlIHJlZ2lzdGVycworICoJYXJlIHN0b3JlZCBhcyBwYXJ0IG9mIHRoZSB1cGFnZS4gIFRoZSB1cGFnZSBzaG91bGQgYWx3YXlzIGJlCisgKglvbmx5IG9uZSBwYWdlIGxvbmcuCisgKiAgZGF0YTogVGhlIGRhdGEgc2VnbWVudCBmb2xsb3dzIG5leHQuICBXZSB1c2UgY3VycmVudC0+ZW5kX3RleHQgdG8KKyAqCWN1cnJlbnQtPmJyayB0byBwaWNrIHVwIGFsbCBvZiB0aGUgdXNlciB2YXJpYWJsZXMsIHBsdXMgYW55IG1lbW9yeQorICoJdGhhdCBtYXkgaGF2ZSBiZWVuIHNicmsnZWQuICBObyBhdHRlbXB0IGlzIG1hZGUgdG8gZGV0ZXJtaW5lIGlmIGEKKyAqCXBhZ2UgaXMgZGVtYW5kLXplcm8gb3IgaWYgYSBwYWdlIGlzIHRvdGFsbHkgdW51c2VkLCB3ZSBqdXN0IGNvdmVyCisgKgl0aGUgZW50aXJlIHJhbmdlLiAgQWxsIG9mIHRoZSBhZGRyZXNzZXMgYXJlIHJvdW5kZWQgaW4gc3VjaCBhIHdheQorICoJdGhhdCBhbiBpbnRlZ3JhbCBudW1iZXIgb2YgcGFnZXMgaXMgd3JpdHRlbi4KKyAqICBzdGFjazogV2UgbmVlZCB0aGUgc3RhY2sgaW5mb3JtYXRpb24gaW4gb3JkZXIgdG8gZ2V0IGEgbWVhbmluZ2Z1bAorICoJYmFja3RyYWNlLiAgV2UgbmVlZCB0byB3cml0ZSB0aGUgZGF0YSBmcm9tIHVzcCB0bworICoJY3VycmVudC0+c3RhcnRfc3RhY2ssIHNvIHdlIHJvdW5kIGVhY2ggb2YgdGhlc2UgaW4gb3JkZXIgdG8gYmUgYWJsZQorICoJdG8gd3JpdGUgYW4gaW50ZWdlciBudW1iZXIgb2YgcGFnZXMuCisgKi8KKworc3RydWN0IHVzZXJfZnB1X3N0cnVjdCB7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBmcF9yZWdzWzMyXTsKKwl1bnNpZ25lZCBpbnQgZnBzY3I7Cit9OworCitzdHJ1Y3QgdXNlciB7CisJc3RydWN0IHB0X3JlZ3MJcmVnczsJCQkvKiBlbnRpcmUgbWFjaGluZSBzdGF0ZSAqLworCXN0cnVjdCB1c2VyX2ZwdV9zdHJ1Y3QgZnB1OwkvKiBNYXRoIENvLXByb2Nlc3NvciByZWdpc3RlcnMgICovCisJaW50IHVfZnB2YWxpZDsJCS8qIFRydWUgaWYgbWF0aCBjby1wcm9jZXNzb3IgYmVpbmcgdXNlZCAqLworCXNpemVfdAkJdV90c2l6ZTsJCS8qIHRleHQgc2l6ZSAocGFnZXMpICovCisJc2l6ZV90CQl1X2RzaXplOwkJLyogZGF0YSBzaXplIChwYWdlcykgKi8KKwlzaXplX3QJCXVfc3NpemU7CQkvKiBzdGFjayBzaXplIChwYWdlcykgKi8KKwl1bnNpZ25lZCBsb25nCXN0YXJ0X2NvZGU7CQkvKiB0ZXh0IHN0YXJ0aW5nIGFkZHJlc3MgKi8KKwl1bnNpZ25lZCBsb25nCXN0YXJ0X2RhdGE7CQkvKiBkYXRhIHN0YXJ0aW5nIGFkZHJlc3MgKi8KKwl1bnNpZ25lZCBsb25nCXN0YXJ0X3N0YWNrOwkJLyogc3RhY2sgc3RhcnRpbmcgYWRkcmVzcyAqLworCWxvbmcgaW50CXNpZ25hbDsJCQkvKiBzaWduYWwgY2F1c2luZyBjb3JlIGR1bXAgKi8KKwlzdHJ1Y3QgcmVncyAqCXVfYXIwOwkJCS8qIGhlbHAgZ2RiIGZpbmQgcmVnaXN0ZXJzICovCisJc3RydWN0IHVzZXJfZnB1X3N0cnVjdCogdV9mcHN0YXRlOwkvKiBNYXRoIENvLXByb2Nlc3NvciBwb2ludGVyICovCisJdW5zaWduZWQgbG9uZwltYWdpYzsJCQkvKiBpZGVudGlmaWVzIGEgY29yZSBmaWxlICovCisJY2hhcgkJdV9jb21tWzMyXTsJCS8qIHVzZXIgY29tbWFuZCBuYW1lICovCit9OworCisjZGVmaW5lIE5CUEcJCQlQQUdFX1NJWkUKKyNkZWZpbmUgVVBBR0VTCQkJMQorI2RlZmluZSBIT1NUX1RFWFRfU1RBUlRfQUREUgkodS5zdGFydF9jb2RlKQorI2RlZmluZSBIT1NUX0RBVEFfU1RBUlRfQUREUgkodS5zdGFydF9kYXRhKQorI2RlZmluZSBIT1NUX1NUQUNLX0VORF9BRERSCSh1LnN0YXJ0X3N0YWNrICsgdS51X3NzaXplICogTkJQRykKKworI2VuZGlmIC8qIF9fQVNNX1NINjRfVVNFUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9hLm91dC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvYS5vdXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGU4M2ViCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvYS5vdXQuaApAQCAtMCwwICsxLDk4IEBACisvKiAkSWQ6IGEub3V0LmgsdiAxLjEzIDIwMDAvMDEvMDkgMTA6NDY6NTMgYW50b24gRXhwICQgKi8KKyNpZm5kZWYgX19TUEFSQ19BX09VVF9IX18KKyNkZWZpbmUgX19TUEFSQ19BX09VVF9IX18KKworI2RlZmluZSBTUEFSQ19QR1NJWkUgICAgMHgyMDAwICAgICAgICAvKiBUaGFua3MgdG8gdGhlIHN1bjQgYXJjaGl0ZWN0dXJlLi4uICovCisjZGVmaW5lIFNFR01FTlRfU0laRSAgICBTUEFSQ19QR1NJWkUgIC8qIHdoZWUuLi4gKi8KKworc3RydWN0IGV4ZWMgeworCXVuc2lnbmVkIGNoYXIgYV9keW5hbWljOjE7ICAgICAgLyogQSBfX0RZTkFNSUMgaXMgaW4gdGhpcyBpbWFnZSAqLworCXVuc2lnbmVkIGNoYXIgYV90b29sdmVyc2lvbjo3OworCXVuc2lnbmVkIGNoYXIgYV9tYWNodHlwZTsKKwl1bnNpZ25lZCBzaG9ydCBhX2luZm87CisJdW5zaWduZWQgbG9uZyBhX3RleHQ7CQkvKiBsZW5ndGggb2YgdGV4dCwgaW4gYnl0ZXMgKi8KKwl1bnNpZ25lZCBsb25nIGFfZGF0YTsJCS8qIGxlbmd0aCBvZiBkYXRhLCBpbiBieXRlcyAqLworCXVuc2lnbmVkIGxvbmcgYV9ic3M7CQkvKiBsZW5ndGggb2YgYnNzLCBpbiBieXRlcyAqLworCXVuc2lnbmVkIGxvbmcgYV9zeW1zOwkJLyogbGVuZ3RoIG9mIHN5bWJvbCB0YWJsZSwgaW4gYnl0ZXMgKi8KKwl1bnNpZ25lZCBsb25nIGFfZW50cnk7CQkvKiB3aGVyZSBwcm9ncmFtIGJlZ2lucyAqLworCXVuc2lnbmVkIGxvbmcgYV90cnNpemU7CisJdW5zaWduZWQgbG9uZyBhX2Ryc2l6ZTsKK307CisKKy8qIFdoZXJlIGluIHRoZSBmaWxlIGRvZXMgdGhlIHRleHQgaW5mb3JtYXRpb24gYmVnaW4/ICovCisjZGVmaW5lIE5fVFhUT0ZGKHgpICAgICAoTl9NQUdJQyh4KSA9PSBaTUFHSUMgPyAwIDogc2l6ZW9mIChzdHJ1Y3QgZXhlYykpCisKKy8qIFdoZXJlIGRvIHRoZSBTeW1ib2xzIHN0YXJ0PyAqLworI2RlZmluZSBOX1NZTU9GRih4KSAgICAgKE5fVFhUT0ZGKHgpICsgKHgpLmFfdGV4dCArICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICh4KS5hX2RhdGEgKyAoeCkuYV90cnNpemUgKyAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICh4KS5hX2Ryc2l6ZSkKKworLyogV2hlcmUgZG9lcyB0ZXh0IHNlZ21lbnQgZ28gaW4gbWVtb3J5IGFmdGVyIGJlaW5nIGxvYWRlZD8gKi8KKyNkZWZpbmUgTl9UWFRBRERSKHgpICAgICgoKE5fTUFHSUMoeCkgPT0gWk1BR0lDKSAmJiAgICAgICAgXAorCSAgICAgICAgICAgICAgICAgKCh4KS5hX2VudHJ5IDwgU1BBUkNfUEdTSVpFKSkgPyAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMCA6IFNQQVJDX1BHU0laRSkKKworLyogQW5kIHNhbWUgZm9yIHRoZSBkYXRhIHNlZ21lbnQuLiAqLworI2RlZmluZSBOX0RBVEFERFIoeCkgKE5fTUFHSUMoeCk9PU9NQUdJQyA/ICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgIChOX1RYVEFERFIoeCkgKyAoeCkuYV90ZXh0KSAgXAorICAgICAgICAgICAgICAgICAgICAgICA6IChfTl9TRUdNRU5UX1JPVU5EIChfTl9UWFRFTkRBRERSKHgpKSkpCisKKyNkZWZpbmUgTl9UUlNJWkUoYSkJKChhKS5hX3Ryc2l6ZSkKKyNkZWZpbmUgTl9EUlNJWkUoYSkJKChhKS5hX2Ryc2l6ZSkKKyNkZWZpbmUgTl9TWU1TSVpFKGEpCSgoYSkuYV9zeW1zKQorCisvKgorICogU3BhcmMgcmVsb2NhdGlvbiB0eXBlcworICovCitlbnVtIHJlbG9jX3R5cGUKK3sKKwlSRUxPQ184LAorCVJFTE9DXzE2LAorCVJFTE9DXzMyLAkvKiBzaW1wbGVzdCByZWxvY3MgKi8KKwlSRUxPQ19ESVNQOCwKKwlSRUxPQ19ESVNQMTYsCisJUkVMT0NfRElTUDMyLAkvKiBEaXNwJ3MgKHBjLXJlbCkgKi8KKwlSRUxPQ19XRElTUDMwLAorCVJFTE9DX1dESVNQMjIsICAvKiBTUiB3b3JkIGRpc3AncyAqLworCVJFTE9DX0hJMjIsCisJUkVMT0NfMjIsCS8qIFNSIDIyLWJpdCByZWxvY3MgKi8KKwlSRUxPQ18xMywKKwlSRUxPQ19MTzEwLAkvKiBTUiAxMyYxMC1iaXQgcmVsb2NzICovCisJUkVMT0NfU0ZBX0JBU0UsCisJUkVMT0NfU0ZBX09GRjEzLCAvKiBTUiBTLkYuQS4gcmVsb2NzICovCisJUkVMT0NfQkFTRTEwLAorCVJFTE9DX0JBU0UxMywKKwlSRUxPQ19CQVNFMjIsCS8qIGJhc2VfcmVsYXRpdmUgcGljICovCisJUkVMT0NfUEMxMCwKKwlSRUxPQ19QQzIyLAkvKiBzcGVjaWFsIHBjLXJlbCBwaWMgKi8KKwlSRUxPQ19KTVBfVEJMLAkvKiBqbXBfdGJsX3JlbCBpbiBwaWMgKi8KKwlSRUxPQ19TRUdPRkYxNiwJLyogU2hMaWIgb2Zmc2V0LWluLXNlZyAqLworCVJFTE9DX0dMT0JfREFULAorCVJFTE9DX0pNUF9TTE9ULAorCVJFTE9DX1JFTEFUSVZFIAkvKiBydGxkIHJlbG9jcyAqLworfTsKKworLyoKKyAqIEZvcm1hdCBvZiBhIHJlbG9jYXRpb24gZGF0dW0uCisgKi8KK3N0cnVjdCByZWxvY2F0aW9uX2luZm8gLyogdXNlZCB3aGVuIGhlYWRlci5hX21hY2h0eXBlID09IE1fU1BBUkMgKi8KK3sKKyAgICAgICAgdW5zaWduZWQgbG9uZyAgIHJfYWRkcmVzczsgIC8qIHJlbG9jYXRpb24gYWRkciAqLworICAgICAgICB1bnNpZ25lZCBpbnQgICAgcl9pbmRleDoyNDsgLyogc2VnbWVudCBpbmRleCBvciBzeW1ib2wgaW5kZXggKi8KKyAgICAgICAgdW5zaWduZWQgaW50ICAgIHJfZXh0ZXJuOjE7IC8qIGlmIEYsIHJfaW5kZXg9PVNFRyM7IGlmIFQsIFNZTSBpZHggKi8KKyAgICAgICAgaW50ICAgICAgICAgICAgIHJfcGFkOjI7ICAgIC8qIDx1bnVzZWQ+ICovCisgICAgICAgIGVudW0gcmVsb2NfdHlwZSByX3R5cGU6NTsgICAvKiB0eXBlIG9mIHJlbG9jYXRpb24gdG8gcGVyZm9ybSAqLworICAgICAgICBsb25nICAgICAgICAgICAgcl9hZGRlbmQ7ICAgLyogYWRkZW5kIGZvciByZWxvY2F0aW9uIHZhbHVlICovCit9OworCisjZGVmaW5lIE5fUkVMT0NBVElPTl9JTkZPX0RFQ0xBUkVEIDEKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisKKyNkZWZpbmUgU1RBQ0tfVE9QCShQQUdFX09GRlNFVCAtIFBBR0VfU0laRSkKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9fU1BBUkNfQV9PVVRfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9hcGMuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL2FwYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0ZTlhN2QKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9hcGMuaApAQCAtMCwwICsxLDY0IEBACisvKiBhcGMgLSBEcml2ZXIgZGVmaW5pdGlvbnMgZm9yIHBvd2VyIG1hbmFnZW1lbnQgZnVuY3Rpb25zCisgKiBvZiBBdXJvcmEgUGVyc29uYWxpdHkgQ2hpcCAoQVBDKSBvbiBTUEFSQ3N0YXRpb24tNC81IGFuZCAKKyAqIGRlcml2YXRpdmVzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAxIEVyaWMgQnJvd2VyIChlYnJvd2VyQHVzYS5uZXQpCisgKgorICovCisKKyNpZm5kZWYgX1NQQVJDX0FQQ19ICisjZGVmaW5lIF9TUEFSQ19BUENfSAorCisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKworI2RlZmluZSBBUENfSU9DCSdBJworCisjZGVmaW5lIEFQQ0lPQ0dGQU5DVEwgX0lPUihBUENfSU9DLCAweDAwLCBpbnQpCS8qIEdldCBmYW4gc3BlZWQJKi8KKyNkZWZpbmUgQVBDSU9DU0ZBTkNUTCBfSU9XKEFQQ19JT0MsIDB4MDEsIGludCkJLyogU2V0IGZhbiBzcGVlZAkqLworCisjZGVmaW5lIEFQQ0lPQ0dDUFdSICAgX0lPUihBUENfSU9DLCAweDAyLCBpbnQpCS8qIEdldCBDUE9XRVIgc3RhdGUJKi8KKyNkZWZpbmUgQVBDSU9DU0NQV1IgICBfSU9XKEFQQ19JT0MsIDB4MDMsIGludCkJLyogU2V0IENQT1dFUiBzdGF0ZQkqLworCisjZGVmaW5lIEFQQ0lPQ0dCUE9SVCAgIF9JT1IoQVBDX0lPQywgMHgwNCwgaW50KQkvKiBHZXQgQlBPUlQgc3RhdGUgCSovCisjZGVmaW5lIEFQQ0lPQ1NCUE9SVCAgIF9JT1coQVBDX0lPQywgMHgwNSwgaW50KQkvKiBTZXQgQlBPUlQgc3RhdGUJKi8KKworLyoKKyAqIFJlZ2lzdGVyIG9mZnNldHMKKyAqLworI2RlZmluZSBBUENfSURMRV9SRUcJMHgwMAorI2RlZmluZSBBUENfRkFOQ1RMX1JFRwkweDIwCisjZGVmaW5lIEFQQ19DUE9XRVJfUkVHCTB4MjQKKyNkZWZpbmUgQVBDX0JQT1JUX1JFRwkweDMwCisKKyNkZWZpbmUgQVBDX1JFR01BU0sJCTB4MDEKKyNkZWZpbmUgQVBDX0JQTUFTSwkJMHgwMworCisvKgorICogSURMRSAtIENQVSBzdGFuZGJ5IHZhbHVlcyAoc2V0IHRvIGluaXRpYXRlIHN0YW5kYnkpCisgKi8KKyNkZWZpbmUgQVBDX0lETEVfT04JCTB4MDEKKworLyoKKyAqIEZBTkNUTCAtIEZhbiBzcGVlZCBjb250cm9sIHN0YXRlIHZhbHVlcworICovCisjZGVmaW5lIEFQQ19GQU5DVExfSEkJMHgwMAkvKiBGYW4gc3BlZWQgaGlnaAkqLworI2RlZmluZSBBUENfRkFOQ1RMX0xPCTB4MDEJLyogRmFuIHNwZWVkIGxvdwkqLworCisvKgorICogQ1BXUiAtIENvbnZlbmllbmNlIHBvd2VyIG91dGxldCBzdGF0ZSB2YWx1ZXMgCisgKi8KKyNkZWZpbmUgQVBDX0NQT1dFUl9PTgkweDAwCS8qIENvbnYgcG93ZXIgb24JKi8KKyNkZWZpbmUgQVBDX0NQT1dFUl9PRkYJMHgwMQkvKiBDb252IHBvd2VyIG9mZgkqLworCisvKgorICogQlBBL0JQQiAtIFJlYWQtV3JpdGUgIkJpdCBQb3J0cyIgc3RhdGUgdmFsdWVzIChyZXNldCB0byAwIGF0IHBvd2VyLW9uKQorICoKKyAqIFdBUk5JTkc6IEludGVybmFsIHVzYWdlIG9mIGJpdCBwb3J0cyBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQtLQorICogZG9uJ3QgbW9kaWZ5IEJQT1JUIHNldHRpbmdzIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuCisgKiAKKyAqIE9uIFNTNSBCUEEgc2VlbXMgdG8gdG9nZ2xlIG9uYm9hcmQgZXRoZXJuZXQgbG9vcGJhY2suLi4gLUUKKyAqLworI2RlZmluZSBBUENfQlBPUlRfQQkJMHgwMQkvKiBCaXQgUG9ydCBBCQkqLworI2RlZmluZSBBUENfQlBPUlRfQgkJMHgwMgkvKiBCaXQgUG9ydCBCCQkqLworCisjZW5kaWYgLyogIShfU1BBUkNfQVBDX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9hc2kuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL2FzaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4YzM3NTQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9hc2kuaApAQCAtMCwwICsxLDExMiBAQAorLyogJElkOiBhc2kuaCx2IDEuMTggMTk5OC8wMy8wOSAxNDowNDo0NiBqaiBFeHAgJCAqLworI2lmbmRlZiBfU1BBUkNfQVNJX0gKKyNkZWZpbmUgX1NQQVJDX0FTSV9ICisKKy8qIGFzaS5oOiAgQWRkcmVzcyBTcGFjZSBJZGVudGlmaWVyIHZhbHVlcyBmb3IgdGhlIHNwYXJjLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NSBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCisgKgorICogUGlvbmVlciB3b3JrIGZvciBzdW40bTogUGF1bCBIYXRjaG1hbiAocGF1bEBzZmUuY29tLmF1KQorICogSm9pbnQgZWRpdGlvbiBmb3Igc3VuNGMrc3VuNG06IFBldGUgQS4gWmFpdGNldiA8emFpdGNldkBpcG1jZS5zdT4KKyAqLworCisvKiBUaGUgZmlyc3QgYmF0Y2ggYXJlIGZvciB0aGUgc3VuNGMuICovCisKKyNkZWZpbmUgQVNJX05VTEwxICAgICAgICAgICAweDAwCisjZGVmaW5lIEFTSV9OVUxMMiAgICAgICAgICAgMHgwMQorCisvKiBzdW40YyBhbmQgc3VuNCBjb250cm9sIHJlZ2lzdGVycyBhbmQgbW11L3ZhYyBvcHMgKi8KKyNkZWZpbmUgQVNJX0NPTlRST0wgICAgICAgICAweDAyCisjZGVmaW5lIEFTSV9TRUdNQVAgICAgICAgICAgMHgwMworI2RlZmluZSBBU0lfUFRFICAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgQVNJX0hXRkxVU0hTRUcgICAgICAweDA1CisjZGVmaW5lIEFTSV9IV0ZMVVNIUEFHRSAgICAgMHgwNgorI2RlZmluZSBBU0lfUkVHTUFQICAgICAgICAgIDB4MDYKKyNkZWZpbmUgQVNJX0hXRkxVU0hDT05URVhUICAweDA3CisKKyNkZWZpbmUgQVNJX1VTRVJUWFQgICAgICAgICAweDA4CisjZGVmaW5lIEFTSV9LRVJORUxUWFQgICAgICAgMHgwOQorI2RlZmluZSBBU0lfVVNFUkRBVEEgICAgICAgIDB4MGEKKyNkZWZpbmUgQVNJX0tFUk5FTERBVEEgICAgICAweDBiCisKKy8qIFZBQyBDYWNoZSBmbHVzaGluZyBvbiBzdW40YyBhbmQgc3VuNCAqLworI2RlZmluZSBBU0lfRkxVU0hTRUcgICAgICAgIDB4MGMKKyNkZWZpbmUgQVNJX0ZMVVNIUEcgICAgICAgICAweDBkCisjZGVmaW5lIEFTSV9GTFVTSENUWCAgICAgICAgMHgwZQorCisvKiBTUEFSQ3N0YXRpb24tNTogb25seSA2IGJpdHMgYXJlIGRlY29kZWQuICovCisvKiB3byA9IFdyaXRlIE9ubHksIHJ3ID0gUmVhZCBXcml0ZTsgICAgICAgICovCisvKiBzcyA9IFNpbmdsZSBTaXplLCBhcyA9IEFsbCBTaXplczsgICAgICAgICovCisjZGVmaW5lIEFTSV9NX1JFUzAwICAgICAgICAgMHgwMCAgIC8qIERvbid0IHRvdWNoLi4uICovCisjZGVmaW5lIEFTSV9NX1VOQTAxICAgICAgICAgMHgwMSAgIC8qIFNhbWUgaGVyZS4uLiAqLworI2RlZmluZSBBU0lfTV9NWENDICAgICAgICAgIDB4MDIgICAvKiBBY2Nlc3MgdG8gVEkgVklLSU5HIE1YQ0MgcmVnaXN0ZXJzICovCisjZGVmaW5lIEFTSV9NX0ZMVVNIX1BST0JFICAgMHgwMyAgIC8qIFJlZmVyZW5jZSBNTVUgRmx1c2gvUHJvYmU7IHJ3LCBzcyAqLworI2RlZmluZSBBU0lfTV9NTVVSRUdTICAgICAgIDB4MDQgICAvKiBNTVUgUmVnaXN0ZXJzOyBydywgc3MgKi8KKyNkZWZpbmUgQVNJX01fVExCRElBRyAgICAgICAweDA1ICAgLyogTU1VIFRMQiBvbmx5IERpYWdub3N0aWNzICovCisjZGVmaW5lIEFTSV9NX0RJQUdTICAgICAgICAgMHgwNiAgIC8qIFJlZmVyZW5jZSBNTVUgRGlhZ25vc3RpY3MgKi8KKyNkZWZpbmUgQVNJX01fSU9ESUFHICAgICAgICAweDA3ICAgLyogTU1VIEkvTyBUTEIgb25seSBEaWFnbm9zdGljcyAqLworI2RlZmluZSBBU0lfTV9VU0VSVFhUICAgICAgIDB4MDggICAvKiBTYW1lIGFzIEFTSV9VU0VSVFhUOyBydywgYXMgKi8KKyNkZWZpbmUgQVNJX01fS0VSTkVMVFhUICAgICAweDA5ICAgLyogU2FtZSBhcyBBU0lfS0VSTkVMVFhUOyBydywgYXMgKi8KKyNkZWZpbmUgQVNJX01fVVNFUkRBVEEgICAgICAweDBBICAgLyogU2FtZSBhcyBBU0lfVVNFUkRBVEE7IHJ3LCBhcyAqLworI2RlZmluZSBBU0lfTV9LRVJORUxEQVRBICAgIDB4MEIgICAvKiBTYW1lIGFzIEFTSV9LRVJORUxEQVRBOyBydywgYXMgKi8KKyNkZWZpbmUgQVNJX01fVFhUQ19UQUcgICAgICAweDBDICAgLyogSW5zdHJ1Y3Rpb24gQ2FjaGUgVGFnOyBydywgc3MgKi8KKyNkZWZpbmUgQVNJX01fVFhUQ19EQVRBICAgICAweDBEICAgLyogSW5zdHJ1Y3Rpb24gQ2FjaGUgRGF0YTsgcncsIHNzICovCisjZGVmaW5lIEFTSV9NX0RBVEFDX1RBRyAgICAgMHgwRSAgIC8qIERhdGEgQ2FjaGUgVGFnOyBydywgc3MgKi8KKyNkZWZpbmUgQVNJX01fREFUQUNfREFUQSAgICAweDBGICAgLyogRGF0YSBDYWNoZSBEYXRhOyBydywgc3MgKi8KKworLyogVGhlIGZvbGxvd2luZyBjYWNoZSBmbHVzaGluZyBBU0lzIHdvcmsgb25seSB3aXRoIHRoZSAnc3RhJworICogaW5zdHJ1Y3Rpb24uIFJlc3VsdHMgYXJlIHVucHJlZGljdGFibGUgZm9yICdzd2FwJyBhbmQgJ2xkc3R1YmEnLAorICogc28gZG9uJ3QgZG8gaXQuCisgKi8KKworLyogVGhlc2UgQVNJIGZsdXNoZXMgYWZmZWN0IGV4dGVybmFsIGNhY2hlcyB0b28uICovCisjZGVmaW5lIEFTSV9NX0ZMVVNIX1BBR0UgICAgMHgxMCAgIC8qIEZsdXNoIEkmRCBDYWNoZSBMaW5lIChwYWdlKTsgd28sIHNzICovCisjZGVmaW5lIEFTSV9NX0ZMVVNIX1NFRyAgICAgMHgxMSAgIC8qIEZsdXNoIEkmRCBDYWNoZSBMaW5lIChzZWcpOyB3bywgc3MgKi8KKyNkZWZpbmUgQVNJX01fRkxVU0hfUkVHSU9OICAweDEyICAgLyogRmx1c2ggSSZEIENhY2hlIExpbmUgKHJlZ2lvbik7IHdvLCBzcyAqLworI2RlZmluZSBBU0lfTV9GTFVTSF9DVFggICAgIDB4MTMgICAvKiBGbHVzaCBJJkQgQ2FjaGUgTGluZSAoY29udGV4dCk7IHdvLCBzcyAqLworI2RlZmluZSBBU0lfTV9GTFVTSF9VU0VSICAgIDB4MTQgICAvKiBGbHVzaCBJJkQgQ2FjaGUgTGluZSAodXNlcik7IHdvLCBzcyAqLworCisvKiBCbG9jay1jb3B5IG9wZXJhdGlvbnMgYXJlIGF2YWlsYWJsZSBvbmx5IG9uIGNlcnRhaW4gVjggY3B1cy4gKi8KKyNkZWZpbmUgQVNJX01fQkNPUFkgICAgICAgICAweDE3ICAgLyogQmxvY2sgY29weSAqLworCisvKiBUaGVzZSBhZmZlY3Qgb25seSB0aGUgSUNBQ0hFIGFuZCBhcmUgUm9zcyBIeXBlclNwYXJjIGFuZCBUdXJib1NwYXJjIHNwZWNpZmljLiAqLworI2RlZmluZSBBU0lfTV9JRkxVU0hfUEFHRSAgIDB4MTggICAvKiBGbHVzaCBJIENhY2hlIExpbmUgKHBhZ2UpOyB3bywgc3MgKi8KKyNkZWZpbmUgQVNJX01fSUZMVVNIX1NFRyAgICAweDE5ICAgLyogRmx1c2ggSSBDYWNoZSBMaW5lIChzZWcpOyB3bywgc3MgKi8KKyNkZWZpbmUgQVNJX01fSUZMVVNIX1JFR0lPTiAweDFBICAgLyogRmx1c2ggSSBDYWNoZSBMaW5lIChyZWdpb24pOyB3bywgc3MgKi8KKyNkZWZpbmUgQVNJX01fSUZMVVNIX0NUWCAgICAweDFCICAgLyogRmx1c2ggSSBDYWNoZSBMaW5lIChjb250ZXh0KTsgd28sIHNzICovCisjZGVmaW5lIEFTSV9NX0lGTFVTSF9VU0VSICAgMHgxQyAgIC8qIEZsdXNoIEkgQ2FjaGUgTGluZSAodXNlcik7IHdvLCBzcyAqLworCisvKiBCbG9jay1maWxsIG9wZXJhdGlvbnMgYXJlIGF2YWlsYWJsZSBvbiBjZXJ0YWluIFY4IGNwdXMgKi8KKyNkZWZpbmUgQVNJX01fQkZJTEwgICAgICAgICAweDFGCisKKy8qIFRoaXMgYWxsb3dzIGRpcmVjdCBhY2Nlc3MgdG8gbWFpbiBtZW1vcnksIGFjdHVhbGx5IDB4MjAgdG8gMHgyZiBhcmUKKyAqIHRoZSBhdmFpbGFibGUgQVNJJ3MgZm9yIHBoeXNpY2FsIHJhbSBwYXNzLXRocm91Z2gsIGJ1dCBJIGRvbid0IGhhdmUKKyAqIGFueSBpZGVhIHdoYXQgdGhlIG90aGVyIG9uZXMgZG8uLi4uCisgKi8KKworI2RlZmluZSBBU0lfTV9CWVBBU1MgICAgICAgMHgyMCAgIC8qIFJlZmVyZW5jZSBNTVUgYnlwYXNzOyBydywgYXMgKi8KKyNkZWZpbmUgQVNJX01fRkJNRU0gICAgICAgIDB4MjkgICAvKiBHcmFwaGljcyBjYXJkIGZyYW1lIGJ1ZmZlciBhY2Nlc3MgKi8KKyNkZWZpbmUgQVNJX01fVk1FVVMgICAgICAgIDB4MkEgICAvKiBWTUUgdXNlciAxNi1iaXQgYWNjZXNzICovCisjZGVmaW5lIEFTSV9NX1ZNRVBTICAgICAgICAweDJCICAgLyogVk1FIHByaXYgMTYtYml0IGFjY2VzcyAqLworI2RlZmluZSBBU0lfTV9WTUVVVCAgICAgICAgMHgyQyAgIC8qIFZNRSB1c2VyIDMyLWJpdCBhY2Nlc3MgKi8KKyNkZWZpbmUgQVNJX01fVk1FUFQgICAgICAgIDB4MkQgICAvKiBWTUUgcHJpdiAzMi1iaXQgYWNjZXNzICovCisjZGVmaW5lIEFTSV9NX1NCVVMgICAgICAgICAweDJFICAgLyogRGlyZWN0IFNCdXMgYWNjZXNzICovCisjZGVmaW5lIEFTSV9NX0NUTCAgICAgICAgICAweDJGICAgLyogQ29udHJvbCBTcGFjZSAoRUNDIGFuZCBNWENDIGFyZSBoZXJlKSAqLworCisKKy8qIFRoaXMgaXMgUk9TUyBIeXBlclNwYXJjIG9ubHkuICovCisjZGVmaW5lIEFTSV9NX0ZMVVNIX0lXSE9MRSAweDMxICAgLyogRmx1c2ggZW50aXJlIElDQUNIRTsgd28sIHNzICovCisKKy8qIFRzdW5hbWkvVmlraW5nL1R1cmJvU3BhcmMgaS9kIGNhY2hlIGZsYXNoIGNsZWFyLiAqLworI2RlZmluZSBBU0lfTV9JQ19GTENMRUFSICAgMHgzNgorI2RlZmluZSBBU0lfTV9EQ19GTENMRUFSICAgMHgzNworCisjZGVmaW5lIEFTSV9NX0RDRFIgICAgICAgICAweDM5ICAgLyogRGF0YSBDYWNoZSBEaWFnbm9zdGljcyBSZWdpc3RlciBydywgc3MgKi8KKworI2RlZmluZSBBU0lfTV9WSUtJTkdfVE1QMSAgMHg0MAkgIC8qIEVtdWxhdGlvbiB0ZW1wb3JhcnkgMSBvbiBWaWtpbmcgKi8KKy8qIG9ubHkgYXZhaWxhYmxlIG9uIFN1cGVyU3BhcmMgSSAqLworLyogI2RlZmluZSBBU0lfTV9WSUtJTkdfVE1QMiAgMHg0MSAqLyAgLyogRW11bGF0aW9uIHRlbXBvcmFyeSAyIG9uIFZpa2luZyAqLworCisjZGVmaW5lIEFTSV9NX0FDVElPTiAgICAgICAweDRjICAgLyogQnJlYWtwb2ludCBBY3Rpb24gUmVnaXN0ZXIgKEdOVS9WaWtpbmcpICovCisKKyNlbmRpZiAvKiBfU1BBUkNfQVNJX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2FzbW1hY3JvLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9hc21tYWNyby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkNGI2NWIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9hc21tYWNyby5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qIGFzbW1hY3JvLmg6IEFzc2VtYmxlciBtYWNyb3MuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk2IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcGZzLnJ1dGdlcnMuZWR1KQorICovCisKKyNpZm5kZWYgX1NQQVJDX0FTTU1BQ1JPX0gKKyNkZWZpbmUgX1NQQVJDX0FTTU1BQ1JPX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS9idGZpeHVwLmg+CisjaW5jbHVkZSA8YXNtL2FzaS5oPgorCisjZGVmaW5lIEdFVF9QUk9DRVNTT1I0TV9JRChyZWcpIFwKKwlyZAkldGJyLCAlcmVnOyBcCisJc3JsCSVyZWcsIDEyLCAlcmVnOyBcCisJYW5kCSVyZWcsIDMsICVyZWc7CisKKyNkZWZpbmUgR0VUX1BST0NFU1NPUjREX0lEKHJlZykgXAorCWxkYQlbJWcwXSBBU0lfTV9WSUtJTkdfVE1QMSwgJXJlZzsKKworLyogQWxsIHRyYXAgZW50cnkgcG9pbnRzIF9tdXN0XyBiZWdpbiB3aXRoIHRoaXMgbWFjcm8gb3IgZWxzZSB5b3UKKyAqIGxvc2UuICBJdCBtYWtlcyBzdXJlIHRoZSBrZXJuZWwgaGFzIGEgcHJvcGVyIHdpbmRvdyBzbyB0aGF0CisgKiBjLWNvZGUgY2FuIGJlIGNhbGxlZC4KKyAqLworI2RlZmluZSBTQVZFX0FMTF9IRUFEIFwKKwlzZXRoaQklaGkodHJhcF9zZXR1cCksICVsNDsgXAorCWptcGwJJWw0ICsgJWxvKHRyYXBfc2V0dXApLCAlbDY7CisjZGVmaW5lIFNBVkVfQUxMIFwKKwlTQVZFX0FMTF9IRUFEIFwKKwkgbm9wOworCisvKiBBbGwgdHJhcHMgbG93LWxldmVsIGNvZGUgaGVyZSBtdXN0IGVuZCB3aXRoIHRoaXMgbWFjcm8uICovCisjZGVmaW5lIFJFU1RPUkVfQUxMIGIgcmV0X3RyYXBfZW50cnk7IGNsciAlbDY7CisKKy8qIHN1bjQgcHJvYmFibHkgd2FudHMgaGFsZiB3b3JkIGFjY2Vzc2VzIHRvIEFTSV9TRUdNQVAsIHdoaWxlIHN1bjRjKworICAgbGlrZXMgYnl0ZSBhY2Nlc3Nlcy4gVGhlc2UgYXJlIHRvIGF2b2lkIGlmZGVmIG1hbmlhLiAqLworCisjaWZkZWYgQ09ORklHX1NVTjQKKyNkZWZpbmUgbGR1WGEJbGR1aGEKKyNkZWZpbmUgc3RYYQlzdGhhCisjZWxzZQorI2RlZmluZSBsZHVYYQlsZHViYQorI2RlZmluZSBzdFhhCXN0YmEKKyNlbmRpZgorCisjZW5kaWYgLyogIShfU1BBUkNfQVNNTUFDUk9fSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2F0b21pYy5oIGIvaW5jbHVkZS9hc20tc3BhcmMvYXRvbWljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdmNmFiNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL2F0b21pYy5oCkBAIC0wLDAgKzEsMTU4IEBACisvKiBhdG9taWMuaDogVGhlc2Ugc3RpbGwgc3VjaywgYnV0IHRoZSBJLWNhY2hlIGhpdCByYXRlIGlzIGhpZ2hlci4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQorICogQ29weXJpZ2h0IChDKSAyMDAwIEFudG9uIEJsYW5jaGFyZCAoYW50b25AbGludXhjYXJlLmNvbS5hdSkKKyAqCisgKiBBZGRpdGlvbnMgYnkgS2VpdGggTSBXZXNvbG93c2tpICh3ZXNvbG93c0Bmb29iYXpjby5vcmcpIGJhc2VkCisgKiBvbiBhc20tcGFyaXNjL2F0b21pYy5oIENvcHlyaWdodCAoQykgMjAwMCBQaGlsaXBwIFJ1bXBmIDxwcnVtcGZAdHV4Lm9yZz4uCisgKi8KKworI2lmbmRlZiBfX0FSQ0hfU1BBUkNfQVRPTUlDX18KKyNkZWZpbmUgX19BUkNIX1NQQVJDX0FUT01JQ19fCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKwordHlwZWRlZiBzdHJ1Y3QgeyB2b2xhdGlsZSBpbnQgY291bnRlcjsgfSBhdG9taWNfdDsKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2RlZmluZSBBVE9NSUNfSU5JVChpKSAgeyAoaSkgfQorCitleHRlcm4gaW50IF9fYXRvbWljX2FkZF9yZXR1cm4oaW50LCBhdG9taWNfdCAqKTsKK2V4dGVybiB2b2lkIGF0b21pY19zZXQoYXRvbWljX3QgKiwgaW50KTsKKworI2RlZmluZSBhdG9taWNfcmVhZCh2KSAgICAgICAgICAoKHYpLT5jb3VudGVyKQorCisjZGVmaW5lIGF0b21pY19hZGQoaSwgdikJKCh2b2lkKV9fYXRvbWljX2FkZF9yZXR1cm4oIChpbnQpKGkpLCAodikpKQorI2RlZmluZSBhdG9taWNfc3ViKGksIHYpCSgodm9pZClfX2F0b21pY19hZGRfcmV0dXJuKC0oaW50KShpKSwgKHYpKSkKKyNkZWZpbmUgYXRvbWljX2luYyh2KQkJKCh2b2lkKV9fYXRvbWljX2FkZF9yZXR1cm4oICAgICAgICAxLCAodikpKQorI2RlZmluZSBhdG9taWNfZGVjKHYpCQkoKHZvaWQpX19hdG9taWNfYWRkX3JldHVybiggICAgICAgLTEsICh2KSkpCisKKyNkZWZpbmUgYXRvbWljX2FkZF9yZXR1cm4oaSwgdikJKF9fYXRvbWljX2FkZF9yZXR1cm4oIChpbnQpKGkpLCAodikpKQorI2RlZmluZSBhdG9taWNfc3ViX3JldHVybihpLCB2KQkoX19hdG9taWNfYWRkX3JldHVybigtKGludCkoaSksICh2KSkpCisjZGVmaW5lIGF0b21pY19pbmNfcmV0dXJuKHYpCShfX2F0b21pY19hZGRfcmV0dXJuKCAgICAgICAgMSwgKHYpKSkKKyNkZWZpbmUgYXRvbWljX2RlY19yZXR1cm4odikJKF9fYXRvbWljX2FkZF9yZXR1cm4oICAgICAgIC0xLCAodikpKQorCisjZGVmaW5lIGF0b21pY19hZGRfbmVnYXRpdmUoYSwgdikJKGF0b21pY19hZGRfcmV0dXJuKChhKSwgKHYpKSA8IDApCisKKy8qCisgKiBhdG9taWNfaW5jX2FuZF90ZXN0IC0gaW5jcmVtZW50IGFuZCB0ZXN0CisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CisgKgorICogQXRvbWljYWxseSBpbmNyZW1lbnRzIEB2IGJ5IDEKKyAqIGFuZCByZXR1cm5zIHRydWUgaWYgdGhlIHJlc3VsdCBpcyB6ZXJvLCBvciBmYWxzZSBmb3IgYWxsCisgKiBvdGhlciBjYXNlcy4KKyAqLworI2RlZmluZSBhdG9taWNfaW5jX2FuZF90ZXN0KHYpIChhdG9taWNfaW5jX3JldHVybih2KSA9PSAwKQorCisjZGVmaW5lIGF0b21pY19kZWNfYW5kX3Rlc3QodikgKGF0b21pY19kZWNfcmV0dXJuKHYpID09IDApCisjZGVmaW5lIGF0b21pY19zdWJfYW5kX3Rlc3QoaSwgdikgKGF0b21pY19zdWJfcmV0dXJuKGksIHYpID09IDApCisKKy8qIFRoaXMgaXMgdGhlIG9sZCAyNC1iaXQgaW1wbGVtZW50YXRpb24uICBJdCdzIHN0aWxsIHVzZWQgaW50ZXJuYWxseQorICogYnkgc29tZSBzcGFyYy1zcGVjaWZpYyBjb2RlLCBub3RhYmx5IHRoZSBzZW1hcGhvcmUgaW1wbGVtZW50YXRpb24uCisgKi8KK3R5cGVkZWYgc3RydWN0IHsgdm9sYXRpbGUgaW50IGNvdW50ZXI7IH0gYXRvbWljMjRfdDsKKworI2lmbmRlZiBDT05GSUdfU01QCisKKyNkZWZpbmUgQVRPTUlDMjRfSU5JVChpKSAgeyAoaSkgfQorI2RlZmluZSBhdG9taWMyNF9yZWFkKHYpICAgICAgICAgICgodiktPmNvdW50ZXIpCisjZGVmaW5lIGF0b21pYzI0X3NldCh2LCBpKSAgICAgICAgKCgodiktPmNvdW50ZXIpID0gaSkKKworI2Vsc2UKKy8qIFdlIGRvIHRoZSBidWxrIG9mIHRoZSBhY3R1YWwgd29yayBvdXQgb2YgbGluZSBpbiB0d28gY29tbW9uCisgKiByb3V0aW5lcyBpbiBhc3NlbWJsZXIsIHNlZSBhcmNoL3NwYXJjL2xpYi9hdG9taWMuUyBmb3IgdGhlCisgKiAiZnVuIiBkZXRhaWxzLgorICoKKyAqIEZvciBTTVAgdGhlIHRyaWNrIGlzIHlvdSBlbWJlZCB0aGUgc3BpbiBsb2NrIGJ5dGUgd2l0aGluCisgKiB0aGUgd29yZCwgdXNlIHRoZSBsb3cgYnl0ZSBzbyBzaWduZWRuZXNzIGlzIGVhc2lseSByZXRhaW5lZAorICogdmlhIGEgcXVpY2sgYXJpdGhtZXRpYyBzaGlmdC4gIEl0IGxvb2tzIGxpa2UgdGhpczoKKyAqCisgKgktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgl8IHNpZ25lZCAyNC1iaXQgY291bnRlciB2YWx1ZSB8ICBsb2NrICB8ICBhdG9taWNfdAorICoJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoJIDMxICAgICAgICAgICAgICAgICAgICAgICAgICA4IDcgICAgICAwCisgKi8KKworI2RlZmluZSBBVE9NSUMyNF9JTklUKGkpCXsgKChpKSA8PCA4KSB9CisKK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pYzI0X3JlYWQoY29uc3QgYXRvbWljMjRfdCAqdikKK3sKKwlpbnQgcmV0ID0gdi0+Y291bnRlcjsKKworCXdoaWxlKHJldCAmIDB4ZmYpCisJCXJldCA9IHYtPmNvdW50ZXI7CisKKwlyZXR1cm4gcmV0ID4+IDg7Cit9CisKKyNkZWZpbmUgYXRvbWljMjRfc2V0KHYsIGkpCSgoKHYpLT5jb3VudGVyKSA9ICgoaSkgPDwgOCkpCisjZW5kaWYKKworc3RhdGljIGlubGluZSBpbnQgX19hdG9taWMyNF9hZGQoaW50IGksIGF0b21pYzI0X3QgKnYpCit7CisJcmVnaXN0ZXIgdm9sYXRpbGUgaW50ICpwdHIgYXNtKCJnMSIpOworCXJlZ2lzdGVyIGludCBpbmNyZW1lbnQgYXNtKCJnMiIpOworCXJlZ2lzdGVyIGludCB0bXAxIGFzbSgiZzMiKTsKKwlyZWdpc3RlciBpbnQgdG1wMiBhc20oImc0Iik7CisJcmVnaXN0ZXIgaW50IHRtcDMgYXNtKCJnNyIpOworCisJcHRyID0gJnYtPmNvdW50ZXI7CisJaW5jcmVtZW50ID0gaTsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCSJtb3YJJSVvNywgJSVnNFxuXHQiCisJImNhbGwJX19fYXRvbWljMjRfYWRkXG5cdCIKKwkiIGFkZAklJW83LCA4LCAlJW83XG4iCisJOiAiPSZyIiAoaW5jcmVtZW50KSwgIj1yIiAodG1wMSksICI9ciIgKHRtcDIpLCAiPXIiICh0bXAzKQorCTogIjAiIChpbmNyZW1lbnQpLCAiciIgKHB0cikKKwk6ICJtZW1vcnkiLCAiY2MiKTsKKworCXJldHVybiBpbmNyZW1lbnQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fYXRvbWljMjRfc3ViKGludCBpLCBhdG9taWMyNF90ICp2KQoreworCXJlZ2lzdGVyIHZvbGF0aWxlIGludCAqcHRyIGFzbSgiZzEiKTsKKwlyZWdpc3RlciBpbnQgaW5jcmVtZW50IGFzbSgiZzIiKTsKKwlyZWdpc3RlciBpbnQgdG1wMSBhc20oImczIik7CisJcmVnaXN0ZXIgaW50IHRtcDIgYXNtKCJnNCIpOworCXJlZ2lzdGVyIGludCB0bXAzIGFzbSgiZzciKTsKKworCXB0ciA9ICZ2LT5jb3VudGVyOworCWluY3JlbWVudCA9IGk7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkibW92CSUlbzcsICUlZzRcblx0IgorCSJjYWxsCV9fX2F0b21pYzI0X3N1YlxuXHQiCisJIiBhZGQJJSVvNywgOCwgJSVvN1xuIgorCTogIj0mciIgKGluY3JlbWVudCksICI9ciIgKHRtcDEpLCAiPXIiICh0bXAyKSwgIj1yIiAodG1wMykKKwk6ICIwIiAoaW5jcmVtZW50KSwgInIiIChwdHIpCisJOiAibWVtb3J5IiwgImNjIik7CisKKwlyZXR1cm4gaW5jcmVtZW50OworfQorCisjZGVmaW5lIGF0b21pYzI0X2FkZChpLCB2KSAoKHZvaWQpX19hdG9taWMyNF9hZGQoKGkpLCAodikpKQorI2RlZmluZSBhdG9taWMyNF9zdWIoaSwgdikgKCh2b2lkKV9fYXRvbWljMjRfc3ViKChpKSwgKHYpKSkKKworI2RlZmluZSBhdG9taWMyNF9kZWNfcmV0dXJuKHYpIF9fYXRvbWljMjRfc3ViKDEsICh2KSkKKyNkZWZpbmUgYXRvbWljMjRfaW5jX3JldHVybih2KSBfX2F0b21pYzI0X2FkZCgxLCAodikpCisKKyNkZWZpbmUgYXRvbWljMjRfc3ViX2FuZF90ZXN0KGksIHYpIChfX2F0b21pYzI0X3N1YigoaSksICh2KSkgPT0gMCkKKyNkZWZpbmUgYXRvbWljMjRfZGVjX2FuZF90ZXN0KHYpIChfX2F0b21pYzI0X3N1YigxLCAodikpID09IDApCisKKyNkZWZpbmUgYXRvbWljMjRfaW5jKHYpICgodm9pZClfX2F0b21pYzI0X2FkZCgxLCAodikpKQorI2RlZmluZSBhdG9taWMyNF9kZWModikgKCh2b2lkKV9fYXRvbWljMjRfc3ViKDEsICh2KSkpCisKKyNkZWZpbmUgYXRvbWljMjRfYWRkX25lZ2F0aXZlKGksIHYpIChfX2F0b21pYzI0X2FkZCgoaSksICh2KSkgPCAwKQorCisvKiBBdG9taWMgb3BlcmF0aW9ucyBhcmUgYWxyZWFkeSBzZXJpYWxpemluZyAqLworI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfZGVjKCkJYmFycmllcigpCisjZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2RlYygpCWJhcnJpZXIoKQorI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfaW5jKCkJYmFycmllcigpCisjZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpCWJhcnJpZXIoKQorCisjZW5kaWYgLyogIShfX0tFUk5FTF9fKSAqLworCisjZW5kaWYgLyogIShfX0FSQ0hfU1BBUkNfQVRPTUlDX18pICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9hdWRpb2lvLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9hdWRpb2lvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2YxNjE3MwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL2F1ZGlvaW8uaApAQCAtMCwwICsxLDIzNCBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLXNwYXJjL2F1ZGlvaW8uaAorICoKKyAqIFNwYXJjIEF1ZGlvIE1pZGxheWVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYgVGhvbWFzIEsuIER5YXMgKHRkeWFzQG5vYy5ydXRnZXJzLmVkdSkKKyAqLworCisjaWZuZGVmIF9BVURJT0lPX0hfCisjZGVmaW5lIF9BVURJT0lPX0hfCisKKy8qCisgKglTdW5PUy9Tb2xhcmlzIC9kZXYvYXVkaW8gaW50ZXJmYWNlCisgKi8KKworI2lmIGRlZmluZWQoX19LRVJORUxfXykgfHwgIWRlZmluZWQoX19HTElCQ19fKSB8fCAoX19HTElCQ19fIDwgMikKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorI2VuZGlmCisKKy8qCisgKiBUaGlzIHN0cnVjdHVyZSBjb250YWlucyBzdGF0ZSBpbmZvcm1hdGlvbiBmb3IgYXVkaW8gZGV2aWNlIElPIHN0cmVhbXMuCisgKi8KK3R5cGVkZWYgc3RydWN0IGF1ZGlvX3ByaW5mbyB7CisJLyoKKwkgKiBUaGUgZm9sbG93aW5nIHZhbHVlcyBkZXNjcmliZSB0aGUgYXVkaW8gZGF0YSBlbmNvZGluZy4KKwkgKi8KKwl1bnNpZ25lZCBpbnQgc2FtcGxlX3JhdGU7CS8qIHNhbXBsZXMgcGVyIHNlY29uZCAqLworCXVuc2lnbmVkIGludCBjaGFubmVsczsJLyogbnVtYmVyIG9mIGludGVybGVhdmVkIGNoYW5uZWxzICovCisJdW5zaWduZWQgaW50IHByZWNpc2lvbjsJLyogYml0LXdpZHRoIG9mIGVhY2ggc2FtcGxlICovCisJdW5zaWduZWQgaW50IGVuY29kaW5nOwkvKiBkYXRhIGVuY29kaW5nIG1ldGhvZCAqLworCisJLyoKKwkgKiBUaGUgZm9sbG93aW5nIHZhbHVlcyBjb250cm9sIGF1ZGlvIGRldmljZSBjb25maWd1cmF0aW9uCisJICovCisJdW5zaWduZWQgaW50IGdhaW47CQkvKiBnYWluIGxldmVsOiAwIC0gMjU1ICovCisJdW5zaWduZWQgaW50IHBvcnQ7CQkvKiBzZWxlY3RlZCBJL08gcG9ydCAoc2VlIGJlbG93KSAqLworCXVuc2lnbmVkIGludCBhdmFpbF9wb3J0czsJLyogYXZhaWxhYmxlIEkvTyBwb3J0cyAoc2VlIGJlbG93KSAqLworCXVuc2lnbmVkIGludCBfeHh4WzJdOwkJLyogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKi8KKworCXVuc2lnbmVkIGludCBidWZmZXJfc2l6ZTsJLyogSS9PIGJ1ZmZlciBzaXplICovCisKKwkvKgorCSAqIFRoZSBmb2xsb3dpbmcgdmFsdWVzIGRlc2NyaWJlIGRyaXZlciBzdGF0ZQorCSAqLworCXVuc2lnbmVkIGludCBzYW1wbGVzOwkJLyogbnVtYmVyIG9mIHNhbXBsZXMgY29udmVydGVkICovCisJdW5zaWduZWQgaW50IGVvZjsJCS8qIEVuZCBPZiBGaWxlIGNvdW50ZXIgKHBsYXkgb25seSkgKi8KKworCXVuc2lnbmVkIGNoYXIJcGF1c2U7CQkvKiBub24temVybyBmb3IgcGF1c2UsIHplcm8gdG8gcmVzdW1lICovCisJdW5zaWduZWQgY2hhcgllcnJvcjsJCS8qIG5vbi16ZXJvIGlmIG92ZXJmbG93L3VuZGVyZmxvdyAqLworCXVuc2lnbmVkIGNoYXIJd2FpdGluZzsJLyogbm9uLXplcm8gaWYgYSBwcm9jZXNzIHdhbnRzIGFjY2VzcyAqLworCXVuc2lnbmVkIGNoYXIgYmFsYW5jZTsJLyogc3RlcmVvIGNoYW5uZWwgYmFsYW5jZSAqLworCisJdW5zaWduZWQgc2hvcnQgbWlub3JkZXY7CisKKwkvKgorCSAqIFRoZSBmb2xsb3dpbmcgdmFsdWVzIGFyZSByZWFkLW9ubHkgc3RhdGUgZmxhZ3MKKwkgKi8KKwl1bnNpZ25lZCBjaGFyIG9wZW47CQkvKiBub24temVybyBpZiBvcGVuIGFjY2VzcyBwZXJtaXR0ZWQgKi8KKwl1bnNpZ25lZCBjaGFyIGFjdGl2ZTsJCS8qIG5vbi16ZXJvIGlmIEkvTyBpcyBhY3RpdmUgKi8KK30gYXVkaW9fcHJpbmZvX3Q7CisKKworLyoKKyAqIFRoaXMgc3RydWN0dXJlIGRlc2NyaWJlcyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgYXVkaW8gZGV2aWNlLgorICovCit0eXBlZGVmIHN0cnVjdCBhdWRpb19pbmZvIHsKKwkvKgorCSAqIFBlci1zdHJlYW0gaW5mb3JtYXRpb24KKwkgKi8KKwlhdWRpb19wcmluZm9fdCBwbGF5OwkvKiBvdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uICovCisJYXVkaW9fcHJpbmZvX3QgcmVjb3JkOwkvKiBpbnB1dCBzdGF0dXMgaW5mb3JtYXRpb24gKi8KKworCS8qCisJICogUGVyLXVuaXQvY2hhbm5lbCBpbmZvcm1hdGlvbgorCSAqLworCXVuc2lnbmVkIGludCBtb25pdG9yX2dhaW47CS8qIGlucHV0IHRvIG91dHB1dCBtaXg6IDAgLSAyNTUgKi8KKwl1bnNpZ25lZCBjaGFyIG91dHB1dF9tdXRlZDsJLyogbm9uLXplcm8gaWYgb3V0cHV0IGlzIG11dGVkICovCisJdW5zaWduZWQgY2hhciBfeHh4WzNdOwkvKiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqLworCXVuc2lnbmVkIGludCBfeXl5WzNdOwkJLyogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKi8KK30gYXVkaW9faW5mb190OworCisKKy8qCisgKiBBdWRpbyBlbmNvZGluZyB0eXBlcworICovCisjZGVmaW5lCUFVRElPX0VOQ09ESU5HX05PTkUJKDApCS8qIG5vIGVuY29kaW5nIGFzc2lnbmVkCSAgKi8KKyNkZWZpbmUJQVVESU9fRU5DT0RJTkdfVUxBVwkoMSkJLyogdS1sYXcgZW5jb2RpbmcJICAqLworI2RlZmluZQlBVURJT19FTkNPRElOR19BTEFXCSgyKQkvKiBBLWxhdyBlbmNvZGluZwkgICovCisjZGVmaW5lCUFVRElPX0VOQ09ESU5HX0xJTkVBUgkoMykJLyogTGluZWFyIFBDTSBlbmNvZGluZwkgICovCisjZGVmaW5lIEFVRElPX0VOQ09ESU5HX0ZMT0FUICAgICg0KSAgICAgLyogSUVFRSBmbG9hdCAoLTEuIDwtPiArMS4pICovCisjZGVmaW5lCUFVRElPX0VOQ09ESU5HX0RWSQkoMTA0KQkvKiBEVkkgQURQQ00JCSAgKi8KKyNkZWZpbmUJQVVESU9fRU5DT0RJTkdfTElORUFSOAkoMTA1KQkvKiA4IGJpdCBVTlNJR05FRAkgICovCisjZGVmaW5lCUFVRElPX0VOQ09ESU5HX0xJTkVBUkxFCSgxMDYpCS8qIExpbmVhciBQQ00gTEUgZW5jb2RpbmcgKi8KKworLyoKKyAqIFRoZXNlIHJhbmdlcyBhcHBseSB0byByZWNvcmQsIHBsYXksIGFuZCBtb25pdG9yIGdhaW4gdmFsdWVzCisgKi8KKyNkZWZpbmUJQVVESU9fTUlOX0dBSU4JKDApCS8qIG1pbmltdW0gZ2FpbiB2YWx1ZSAqLworI2RlZmluZQlBVURJT19NQVhfR0FJTgkoMjU1KQkvKiBtYXhpbXVtIGdhaW4gdmFsdWUgKi8KKworLyoKKyAqIFRoZXNlIHZhbHVlcyBhcHBseSB0byB0aGUgYmFsYW5jZSBmaWVsZCB0byBhZGp1c3QgY2hhbm5lbCBnYWluIHZhbHVlcworICovCisjZGVmaW5lCUFVRElPX0xFRlRfQkFMQU5DRQkoMCkJLyogbGVmdCBjaGFubmVsIG9ubHkJKi8KKyNkZWZpbmUJQVVESU9fTUlEX0JBTEFOQ0UJKDMyKQkvKiBlcXVhbCBsZWZ0L3JpZ2h0IGNoYW5uZWwgKi8KKyNkZWZpbmUJQVVESU9fUklHSFRfQkFMQU5DRQkoNjQpCS8qIHJpZ2h0IGNoYW5uZWwgb25seQkqLworI2RlZmluZQlBVURJT19CQUxBTkNFX1NISUZUCSgzKQorCisvKgorICogR2VuZXJpYyBtaW5pbXVtL21heGltdW0gbGltaXRzIGZvciBudW1iZXIgb2YgY2hhbm5lbHMsIGJvdGggbW9kZXMKKyAqLworI2RlZmluZQlBVURJT19NSU5fUExBWV9DSEFOTkVMUwkoMSkKKyNkZWZpbmUJQVVESU9fTUFYX1BMQVlfQ0hBTk5FTFMJKDQpCisjZGVmaW5lCUFVRElPX01JTl9SRUNfQ0hBTk5FTFMJKDEpCisjZGVmaW5lCUFVRElPX01BWF9SRUNfQ0hBTk5FTFMJKDQpCisKKy8qCisgKiBHZW5lcmljIG1pbmltdW0vbWF4aW11bSBsaW1pdHMgZm9yIHNhbXBsZSBwcmVjaXNpb24KKyAqLworI2RlZmluZQlBVURJT19NSU5fUExBWV9QUkVDSVNJT04JKDgpCisjZGVmaW5lCUFVRElPX01BWF9QTEFZX1BSRUNJU0lPTgkoMzIpCisjZGVmaW5lCUFVRElPX01JTl9SRUNfUFJFQ0lTSU9OCQkoOCkKKyNkZWZpbmUJQVVESU9fTUFYX1JFQ19QUkVDSVNJT04JCSgzMikKKworLyoKKyAqIERlZmluZSBzb21lIGNvbnZlbmllbnQgbmFtZXMgZm9yIHR5cGljYWwgYXVkaW8gcG9ydHMKKyAqLworLyoKKyAqIG91dHB1dCBwb3J0cyAoc2V2ZXJhbCBtYXkgYmUgZW5hYmxlZCBzaW11bHRhbmVvdXNseSkKKyAqLworI2RlZmluZQlBVURJT19TUEVBS0VSCQkweDAxCS8qIG91dHB1dCB0byBidWlsdC1pbiBzcGVha2VyICovCisjZGVmaW5lCUFVRElPX0hFQURQSE9ORQkJMHgwMgkvKiBvdXRwdXQgdG8gaGVhZHBob25lIGphY2sgKi8KKyNkZWZpbmUJQVVESU9fTElORV9PVVQJCTB4MDQJLyogb3V0cHV0IHRvIGxpbmUgb3V0CSAqLworCisvKgorICogaW5wdXQgcG9ydHMgKHVzdWFsbHkgb25seSBvbmUgYXQgYSB0aW1lKQorICovCisjZGVmaW5lCUFVRElPX01JQ1JPUEhPTkUJMHgwMQkvKiBpbnB1dCBmcm9tIG1pY3JvcGhvbmUgKi8KKyNkZWZpbmUJQVVESU9fTElORV9JTgkJMHgwMgkvKiBpbnB1dCBmcm9tIGxpbmUgaW4JICovCisjZGVmaW5lCUFVRElPX0NECQkweDA0CS8qIGlucHV0IGZyb20gb24tYm9hcmQgQ0QgaW5wdXRzICovCisjZGVmaW5lCUFVRElPX0lOVEVSTkFMX0NEX0lOCUFVRElPX0NECS8qIGlucHV0IGZyb20gaW50ZXJuYWwgQ0RST00gKi8KKyNkZWZpbmUgQVVESU9fQU5BTE9HX0xPT1BCQUNLICAgMHg0MCAgICAvKiBpbnB1dCBmcm9tIG91dHB1dCAqLworCisKKy8qCisgKiBUaGlzIG1hY3JvIGluaXRpYWxpemVzIGFuIGF1ZGlvX2luZm8gc3RydWN0dXJlIHRvICdoYXJtbGVzcycgdmFsdWVzLgorICogTm90ZSB0aGF0ICh+MCkgbWlnaHQgbm90IGJlIGEgaGFybWxlc3MgdmFsdWUgZm9yIGEgZmxhZyB0aGF0IHdhcworICogYSBzaWduZWQgaW50LgorICovCisjZGVmaW5lCUFVRElPX0lOSVRJTkZPKGkpCXsJCQkJCVwKKwl1bnNpZ25lZCBpbnQJKl9feF9fOwkJCQkJCVwKKwlmb3IgKF9feF9fID0gKHVuc2lnbmVkIGludCAqKShpKTsJCQkJXAorCSAgICAoY2hhciAqKSBfX3hfXyA8ICgoKGNoYXIgKikoaSkpICsgc2l6ZW9mIChhdWRpb19pbmZvX3QpKTsJXAorCSAgICAqX194X18rKyA9IH4wKTsJCQkJCQlcCit9CisKKy8qCisgKiBUaGVzZSBhbGxvdyB0ZXN0aW5nIGZvciB3aGF0IHRoZSB1c2VyIHdhbnRzIHRvIHNldCAKKyAqLworI2RlZmluZSBBVURfSU5JVFZBTFVFICAgKH4wKQorI2RlZmluZSBNb2RpZnkoWCkgICAgICAgKCh1bnNpZ25lZCBpbnQpKFgpICE9IEFVRF9JTklUVkFMVUUpCisjZGVmaW5lIE1vZGlmeXMoWCkgICAgICAoKFgpICE9ICh1bnNpZ25lZCBzaG9ydClBVURfSU5JVFZBTFVFKQorI2RlZmluZSBNb2RpZnljKFgpICAgICAgKChYKSAhPSAodW5zaWduZWQgY2hhcilBVURfSU5JVFZBTFVFKQorCisvKgorICogUGFyYW1ldGVyIGZvciB0aGUgQVVESU9fR0VUREVWIGlvY3RsIHRvIGRldGVybWluZSBjdXJyZW50CisgKiBhdWRpbyBkZXZpY2VzLgorICovCisjZGVmaW5lCU1BWF9BVURJT19ERVZfTEVOCSgxNikKK3R5cGVkZWYgc3RydWN0IGF1ZGlvX2RldmljZSB7CisJY2hhciBuYW1lW01BWF9BVURJT19ERVZfTEVOXTsKKwljaGFyIHZlcnNpb25bTUFYX0FVRElPX0RFVl9MRU5dOworCWNoYXIgY29uZmlnW01BWF9BVURJT19ERVZfTEVOXTsKK30gYXVkaW9fZGV2aWNlX3Q7CisKKworLyoKKyAqIElvY3RsIGNhbGxzIGZvciB0aGUgYXVkaW8gZGV2aWNlLgorICovCisKKy8qCisgKiBBVURJT19HRVRJTkZPIHJldHJpZXZlcyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgYXVkaW8gZGV2aWNlLgorICoKKyAqIEFVRElPX1NFVElORk8gY29waWVzIGFsbCBmaWVsZHMgb2YgdGhlIGF1ZGlvX2luZm8gc3RydWN0dXJlIHdob3NlCisgKiB2YWx1ZXMgYXJlIG5vdCBzZXQgdG8gdGhlIGluaXRpYWxpemVkIHZhbHVlICgtMSkgdG8gdGhlIGRldmljZSBzdGF0ZS4KKyAqIEl0IHBlcmZvcm1zIGFuIGltcGxpY2l0IEFVRElPX0dFVElORk8gdG8gcmV0dXJuIHRoZSBuZXcgc3RhdGUgb2YgdGhlCisgKiBkZXZpY2UuICBOb3RlIHRoYXQgdGhlIHJlY29yZC5zYW1wbGVzIGFuZCBwbGF5LnNhbXBsZXMgZmllbGRzIGFyZSBzZXQKKyAqIHRvIHRoZSBsYXN0IHZhbHVlIGJlZm9yZSB0aGUgQVVESU9fU0VUSU5GTyB0b29rIGVmZmVjdC4gIFRoaXMgYWxsb3dzCisgKiBhbiBhcHBsaWNhdGlvbiB0byByZXNldCB0aGUgY291bnRlcnMgd2hpbGUgYXRvbWljYWxseSByZXRyaWV2aW5nIHRoZQorICogbGFzdCB2YWx1ZS4KKyAqCisgKiBBVURJT19EUkFJTiBzdXNwZW5kcyB0aGUgY2FsbGluZyBwcm9jZXNzIHVudGlsIHRoZSB3cml0ZSBidWZmZXJzIGFyZQorICogZW1wdHkuCisgKgorICogQVVESU9fR0VUREVWIHJldHVybnMgYSBzdHJ1Y3R1cmUgb2YgdHlwZSBhdWRpb19kZXZpY2VfdCB3aGljaCBjb250YWlucworICogdGhyZWUgc3RyaW5ncy4gIFRoZSBzdHJpbmcgIm5hbWUiIGlzIGEgc2hvcnQgaWRlbnRpZnlpbmcgc3RyaW5nIChmb3IKKyAqIGV4YW1wbGUsIHRoZSBTQnVzIEZjb2RlIG5hbWUgc3RyaW5nKSwgdGhlIHN0cmluZyAidmVyc2lvbiIgaWRlbnRpZmllcworICogdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgZGV2aWNlLCBhbmQgdGhlICJjb25maWciIHN0cmluZyBpZGVudGlmaWVzCisgKiB0aGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvZiB0aGUgYXVkaW8gc3RyZWFtLiAgQWxsIGZpZWxkcyBhcmUKKyAqIGRldmljZS1kZXBlbmRlbnQgLS0gc2VlIHRoZSBkZXZpY2Ugc3BlY2lmaWMgbWFudWFsIHBhZ2VzIGZvciBkZXRhaWxzLgorICoKKyAqIEFVRElPX0dFVERFVl9TVU5PUyByZXR1cm5zIGEgbnVtYmVyIHdoaWNoIGlzIGFuIGF1ZGlvIGRldmljZSBkZWZpbmVkIAorICogaGVyZWluIChtYWtpbmcgaXQgbm90IHRvbyBwb3J0YWJsZSkKKyAqCisgKiBBVURJT19GTFVTSCBzdG9wcyBhbGwgcGxheWJhY2sgYW5kIHJlY29yZGluZywgY2xlYXJzIGFsbCBxdWV1ZWQgYnVmZmVycywgCisgKiByZXNldHMgZXJyb3IgY291bnRlcnMsIGFuZCByZXN0YXJ0cyByZWNvcmRpbmcgYW5kIHBsYXliYWNrIGFzIGFwcHJvcHJpYXRlCisgKiBmb3IgdGhlIGN1cnJlbnQgc2FtcGxpbmcgbW9kZS4KKyAqLworI2RlZmluZQlBVURJT19HRVRJTkZPCV9JT1IoJ0EnLCAxLCBhdWRpb19pbmZvX3QpCisjZGVmaW5lCUFVRElPX1NFVElORk8JX0lPV1IoJ0EnLCAyLCBhdWRpb19pbmZvX3QpCisjZGVmaW5lCUFVRElPX0RSQUlOCV9JTygnQScsIDMpCisjZGVmaW5lCUFVRElPX0dFVERFVglfSU9SKCdBJywgNCwgYXVkaW9fZGV2aWNlX3QpCisjZGVmaW5lCUFVRElPX0dFVERFVl9TVU5PUwlfSU9SKCdBJywgNCwgaW50KQorI2RlZmluZSBBVURJT19GTFVTSCAgICAgX0lPKCdBJywgNSkKKworLyogRGVmaW5lIHBvc3NpYmxlIGF1ZGlvIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zIGZvciAKKyAqIG9sZCBTdW5PUy1zdHlsZSBBVURJT19HRVRERVYgaW9jdGwgKi8KKyNkZWZpbmUgQVVESU9fREVWX1VOS05PV04gICAgICAgKDApICAgICAvKiBub3QgZGVmaW5lZCAqLworI2RlZmluZSBBVURJT19ERVZfQU1EICAgICAgICAgICAoMSkgICAgIC8qIGF1ZGlvYW1kIGRldmljZSAqLworI2RlZmluZSBBVURJT19ERVZfU1BFQUtFUkJPWCAgICAoMikgICAgIC8qIGRicmkgZGV2aWNlIHdpdGggc3BlYWtlcmJveCAqLworI2RlZmluZSBBVURJT19ERVZfQ09ERUMgICAgICAgICAoMykgICAgIC8qIGRicmkgZGV2aWNlIChpbnRlcm5hbCBzcGVha2VyKSAqLworI2RlZmluZSBBVURJT19ERVZfQ1M0MjMxICAgICAgICAoNSkgICAgIC8qIGNzNDIzMSBkZXZpY2UgKi8KKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgaW9jdGwgc2V0cyB0aGUgYXVkaW8gZGV2aWNlIGludG8gYW4gaW50ZXJuYWwgbG9vcGJhY2sgbW9kZSwKKyAqIGlmIHRoZSBoYXJkd2FyZSBzdXBwb3J0cyB0aGlzLiAgVGhlIGFyZ3VtZW50IGlzIFRSVUUgdG8gc2V0IGxvb3BiYWNrLAorICogRkFMU0UgdG8gcmVzZXQgdG8gbm9ybWFsIG9wZXJhdGlvbi4gIElmIHRoZSBoYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0CisgKiBpbnRlcm5hbCBsb29wYmFjaywgdGhlIGlvY3RsIHNob3VsZCBmYWlsIHdpdGggRUlOVkFMLgorICogQ2F1c2VzIEFEQyBkYXRhIHRvIGJlIGRpZ2l0YWxseSBtaXhlZCBpbiBhbmQgc2VudCB0byB0aGUgREFDLgorICovCisjZGVmaW5lCUFVRElPX0RJQUdfTE9PUEJBQ0sJX0lPVygnQScsIDEwMSwgaW50KQorCisjZW5kaWYgLyogX0FVRElPSU9fSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2F1eGlvLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9hdXhpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlODNhZWYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9hdXhpby5oCkBAIC0wLDAgKzEsODkgQEAKKy8qICRJZDogYXV4aW8uaCx2IDEuMTggMTk5Ny8xMS8wNyAxNTowMTo0NSBqaiBFeHAgJAorICogYXV4aW8uaDogIERlZmluaXRpb25zIGFuZCBjb2RlIGZvciB0aGUgQXV4aWxpYXJ5IEkvTyByZWdpc3Rlci4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQorICovCisjaWZuZGVmIF9TUEFSQ19BVVhJT19ICisjZGVmaW5lIF9TUEFSQ19BVVhJT19ICisKKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3ZhZGRycy5oPgorCisvKiBUaGlzIHJlZ2lzdGVyIGlzIGFuIHVuc2lnbmVkIGNoYXIgaW4gSU8gc3BhY2UuICBJdCBkb2VzIHR3byB0aGluZ3MuCisgKiBGaXJzdCwgaXQgaXMgdXNlZCB0byBjb250cm9sIHRoZSBmcm9udCBwYW5lbCBMRUQgbGlnaHQgb24gbWFjaGluZXMKKyAqIHRoYXQgaGF2ZSBpdCAoZ29vZCBmb3IgdGVzdGluZyBlbnRyeSBwb2ludHMgdG8gdHJhcCBoYW5kbGVycyBhbmQgaXJxJ3MpCisgKiBTZWNvbmRseSwgaXQgY29udHJvbHMgdmFyaW91cyBmbG9wcHkgZHJpdmUgcGFyYW1ldGVycy4KKyAqLworI2RlZmluZSBBVVhJT19PUk1FSU4gICAgICAweGYwICAgIC8qIEFsbCB3cml0ZXMgbXVzdCBzZXQgdGhlc2UgYml0cy4gKi8KKyNkZWZpbmUgQVVYSU9fT1JNRUlONE0gICAgMHhjMCAgICAvKiBzdW40bSAtIEFsbCB3cml0ZXMgbXVzdCBzZXQgdGhlc2UgYml0cy4gKi8KKyNkZWZpbmUgQVVYSU9fRkxQWV9ERU5TICAgMHgyMCAgICAvKiBGbG9wcHkgZGVuc2l0eSwgaGlnaCBpZiBzZXQuIFJlYWQgb25seS4gKi8KKyNkZWZpbmUgQVVYSU9fRkxQWV9EQ0hHICAgMHgxMCAgICAvKiBBIGRpc2sgY2hhbmdlIG9jY3VycmVkLiAgUmVhZCBvbmx5LiAqLworI2RlZmluZSBBVVhJT19FREdFX09OICAgICAweDEwICAgIC8qIHN1bjRtIC0gT24gbWVhbnMgSnVtcGVyIGJsb2NrIGlzIGluLiAqLworI2RlZmluZSBBVVhJT19GTFBZX0RTRUwgICAweDA4ICAgIC8qIERyaXZlIHNlbGVjdC9zdGFydC1tb3Rvci4gV3JpdGUgb25seS4gKi8KKyNkZWZpbmUgQVVYSU9fTElOS19URVNUICAgMHgwOCAgICAvKiBzdW40bSAtIE9uIG1lYW5zIFRQRSBDYXJyaWVyIGRldGVjdC4gKi8KKworLyogU2V0IHRoZSBmb2xsb3dpbmcgdG8gb25lLCB0aGVuIHplcm8sIGFmdGVyIGRvaW5nIGEgcHNldWRvIERNQSB0cmFuc2Zlci4gKi8KKyNkZWZpbmUgQVVYSU9fRkxQWV9UQ05UICAgMHgwNCAgICAvKiBGbG9wcHkgdGVybWluYWwgY291bnQuIFdyaXRlIG9ubHkuICovCisKKy8qIFNldCB0aGUgZm9sbG93aW5nIHRvIHplcm8gdG8gZWplY3QgdGhlIGZsb3BweS4gKi8KKyNkZWZpbmUgQVVYSU9fRkxQWV9FSkNUICAgMHgwMiAgICAvKiBFamVjdCBmbG9wcHkgZGlzay4gIFdyaXRlIG9ubHkuICovCisjZGVmaW5lIEFVWElPX0xFRCAgICAgICAgIDB4MDEgICAgLyogT24gaWYgc2V0LCBvZmYgaWYgdW5zZXQuIFJlYWQvV3JpdGUgKi8KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworLyogCisgKiBOT1RFOiB0aGVzZSByb3V0aW5lcyBhcmUgaW1wbGVtZW50YXRpb24gZGVwZW5kZW50LS0gCisgKiB1bmRlcnN0YW5kIHRoZSBoYXJkd2FyZSB5b3UgYXJlIHF1ZXJ5aW5nISAKKyAqLworZXh0ZXJuIHZvaWQgc2V0X2F1eGlvKHVuc2lnbmVkIGNoYXIgYml0c19vbiwgdW5zaWduZWQgY2hhciBiaXRzX29mZik7CitleHRlcm4gdW5zaWduZWQgY2hhciBnZXRfYXV4aW8odm9pZCk7IC8qIC4uLi9hc20tc3BhcmMvZmxvcHB5LmggKi8KKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgcm91dGluZXMgYXJlIHByb3ZpZGVkIGZvciBkcml2ZXItY29tcGF0aWJpbGl0eQorICogd2l0aCBzcGFyYzY0IChwcmltYXJpbHkgc3VubGFuY2UuYykKKyAqLworCisjZGVmaW5lIEFVWElPX0xURV9PTiAgICAxCisjZGVmaW5lIEFVWElPX0xURV9PRkYgICAwCisKKy8qIGF1eGlvX3NldF9sdGUgLSBTZXQgTGluayBUZXN0IEVuYWJsZSAoVFBFIExpbmsgRGV0ZWN0KQorICoKKyAqIG9uIC0gQVVYSU9fTFRFX09OIG9yIEFVWElPX0xURV9PRkYKKyAqLworI2RlZmluZSBhdXhpb19zZXRfbHRlKG9uKSBcCitkbyB7IFwKKwlpZihvbikgeyBcCisJCXNldF9hdXhpbyhBVVhJT19MSU5LX1RFU1QsIDApOyBcCisJfSBlbHNlIHsgXAorCQlzZXRfYXV4aW8oMCwgQVVYSU9fTElOS19URVNUKTsgXAorCX0gXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBBVVhJT19MRURfT04gICAgMQorI2RlZmluZSBBVVhJT19MRURfT0ZGICAgMAorCisvKiBhdXhpb19zZXRfbGVkIC0gU2V0IHN5c3RlbSBmcm9udCBwYW5lbCBMRUQKKyAqCisgKiBvbiAtIEFVWElPX0xFRF9PTiBvciBBVVhJT19MRURfT0ZGCisgKi8KKyNkZWZpbmUgYXV4aW9fc2V0X2xlZChvbikgXAorZG8geyBcCisJaWYob24pIHsgXAorCQlzZXRfYXV4aW8oQVVYSU9fTEVELCAwKTsgXAorCX0gZWxzZSB7IFwKKwkJc2V0X2F1eGlvKDAsIEFVWElPX0xFRCk7IFwKKwl9IFwKK30gd2hpbGUgKDApCisKKyNlbmRpZiAvKiAhKF9fQVNTRU1CTFlfXykgKi8KKworCisvKiBBVVhJTzIgKFBvd2VyIE9mZiBDb250cm9sKSAqLworZXh0ZXJuIF9fdm9sYXRpbGVfXyB1bnNpZ25lZCBjaGFyICogYXV4aW9fcG93ZXJfcmVnaXN0ZXI7CisKKyNkZWZpbmUJQVVYSU9fUE9XRVJfREVURUNUX0ZBSUxVUkUJMzIKKyNkZWZpbmUJQVVYSU9fUE9XRVJfQ0xFQVJfRkFJTFVSRQkyCisjZGVmaW5lCUFVWElPX1BPV0VSX09GRgkJCTEKKworCisjZW5kaWYgLyogIShfU1BBUkNfQVVYSU9fSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2JpdGV4dC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvYml0ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk3YjJmMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL2JpdGV4dC5oCkBAIC0wLDAgKzEsMjcgQEAKKy8qCisgKiBiaXRleHQuaDogQml0IHN0cmluZyBvcGVyYXRpb25zIG9uIHRoZSBzcGFyYywgc3BlY2lmaWMgdG8gYXJjaGl0ZWN0dXJlLgorICoKKyAqIENvcHlyaWdodCAyMDAyIFBldGUgWmFpdGNldiA8emFpdGNldkB5YWhvby5jb20+CisgKi8KKworI2lmbmRlZiBfU1BBUkNfQklURVhUX0gKKyNkZWZpbmUgX1NQQVJDX0JJVEVYVF9ICisKKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorCitzdHJ1Y3QgYml0X21hcCB7CisJc3BpbmxvY2tfdCBsb2NrOworCXVuc2lnbmVkIGxvbmcgKm1hcDsKKwlpbnQgc2l6ZTsKKwlpbnQgdXNlZDsKKwlpbnQgbGFzdF9vZmY7CisJaW50IGxhc3Rfc2l6ZTsKKwlpbnQgZmlyc3RfZnJlZTsKKwlpbnQgbnVtX2NvbG9yczsKK307CisKK2V4dGVybiBpbnQgYml0X21hcF9zdHJpbmdfZ2V0KHN0cnVjdCBiaXRfbWFwICp0LCBpbnQgbGVuLCBpbnQgYWxpZ24pOworZXh0ZXJuIHZvaWQgYml0X21hcF9jbGVhcihzdHJ1Y3QgYml0X21hcCAqdCwgaW50IG9mZnNldCwgaW50IGxlbik7CitleHRlcm4gdm9pZCBiaXRfbWFwX2luaXQoc3RydWN0IGJpdF9tYXAgKnQsIHVuc2lnbmVkIGxvbmcgKm1hcCwgaW50IHNpemUpOworCisjZW5kaWYgLyogZGVmaW5lZChfU1BBUkNfQklURVhUX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9iaXRvcHMuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL2JpdG9wcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmYmQ3OTUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9iaXRvcHMuaApAQCAtMCwwICsxLDUzNyBAQAorLyogJElkOiBiaXRvcHMuaCx2IDEuNjcgMjAwMS8xMS8xOSAxODozNjozNCBkYXZlbSBFeHAgJAorICogYml0b3BzLmg6IEJpdCBzdHJpbmcgb3BlcmF0aW9ucyBvbiB0aGUgU3BhcmMuCisgKgorICogQ29weXJpZ2h0IDE5OTUgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQorICogQ29weXJpZ2h0IDE5OTYgRWRkaWUgQy4gRG9zdCAgIChlY2RAc2t5bmV0LmJlKQorICogQ29weXJpZ2h0IDIwMDEgQW50b24gQmxhbmNoYXJkIChhbnRvbkBzYW1iYS5vcmcpCisgKi8KKworI2lmbmRlZiBfU1BBUkNfQklUT1BTX0gKKyNkZWZpbmUgX1NQQVJDX0JJVE9QU19ICisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKworI2lmZGVmIF9fS0VSTkVMX18KKworLyoKKyAqIFNldCBiaXQgJ25yJyBpbiAzMi1iaXQgcXVhbnRpdHkgYXQgYWRkcmVzcyAnYWRkcicgd2hlcmUgYml0ICcwJworICogaXMgaW4gdGhlIGhpZ2hlc3Qgb2YgdGhlIGZvdXIgYnl0ZXMgYW5kIGJpdCAnMzEnIGlzIHRoZSBoaWdoIGJpdAorICogd2l0aGluIHRoZSBmaXJzdCBieXRlLiBTcGFyYyBpcyBCSUctRW5kaWFuLiBVbmxlc3Mgbm90ZWQgb3RoZXJ3aXNlCisgKiBhbGwgYml0LW9wcyByZXR1cm4gMCBpZiBiaXQgd2FzIHByZXZpb3VzbHkgY2xlYXIgYW5kICE9IDAgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW5saW5lIGludCB0ZXN0X2FuZF9zZXRfYml0KHVuc2lnbmVkIGxvbmcgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpCit7CisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBtYXNrIGFzbSgiZzIiKTsKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nICpBRERSIGFzbSgiZzEiKTsKKwlyZWdpc3RlciBpbnQgdG1wMSBhc20oImczIik7CisJcmVnaXN0ZXIgaW50IHRtcDIgYXNtKCJnNCIpOworCXJlZ2lzdGVyIGludCB0bXAzIGFzbSgiZzUiKTsKKwlyZWdpc3RlciBpbnQgdG1wNCBhc20oImc3Iik7CisKKwlBRERSID0gKCh1bnNpZ25lZCBsb25nICopIGFkZHIpICsgKG5yID4+IDUpOworCW1hc2sgPSAxIDw8IChuciAmIDMxKTsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCSJtb3YJJSVvNywgJSVnNFxuXHQiCisJImNhbGwJX19fc2V0X2JpdFxuXHQiCisJIiBhZGQJJSVvNywgOCwgJSVvN1xuIgorCTogIj0mciIgKG1hc2spLCAiPXIiICh0bXAxKSwgIj1yIiAodG1wMiksICI9ciIgKHRtcDMpLCAiPXIiICh0bXA0KQorCTogIjAiIChtYXNrKSwgInIiIChBRERSKQorCTogIm1lbW9yeSIsICJjYyIpOworCisJcmV0dXJuIG1hc2sgIT0gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldF9iaXQodW5zaWduZWQgbG9uZyBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcikKK3sKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIG1hc2sgYXNtKCJnMiIpOworCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgKkFERFIgYXNtKCJnMSIpOworCXJlZ2lzdGVyIGludCB0bXAxIGFzbSgiZzMiKTsKKwlyZWdpc3RlciBpbnQgdG1wMiBhc20oImc0Iik7CisJcmVnaXN0ZXIgaW50IHRtcDMgYXNtKCJnNSIpOworCXJlZ2lzdGVyIGludCB0bXA0IGFzbSgiZzciKTsKKworCUFERFIgPSAoKHVuc2lnbmVkIGxvbmcgKikgYWRkcikgKyAobnIgPj4gNSk7CisJbWFzayA9IDEgPDwgKG5yICYgMzEpOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJIm1vdgklJW83LCAlJWc0XG5cdCIKKwkiY2FsbAlfX19zZXRfYml0XG5cdCIKKwkiIGFkZAklJW83LCA4LCAlJW83XG4iCisJOiAiPSZyIiAobWFzayksICI9ciIgKHRtcDEpLCAiPXIiICh0bXAyKSwgIj1yIiAodG1wMyksICI9ciIgKHRtcDQpCisJOiAiMCIgKG1hc2spLCAiciIgKEFERFIpCisJOiAibWVtb3J5IiwgImNjIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHRlc3RfYW5kX2NsZWFyX2JpdCh1bnNpZ25lZCBsb25nIG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQoreworCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgbWFzayBhc20oImcyIik7CisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyAqQUREUiBhc20oImcxIik7CisJcmVnaXN0ZXIgaW50IHRtcDEgYXNtKCJnMyIpOworCXJlZ2lzdGVyIGludCB0bXAyIGFzbSgiZzQiKTsKKwlyZWdpc3RlciBpbnQgdG1wMyBhc20oImc1Iik7CisJcmVnaXN0ZXIgaW50IHRtcDQgYXNtKCJnNyIpOworCisJQUREUiA9ICgodW5zaWduZWQgbG9uZyAqKSBhZGRyKSArIChuciA+PiA1KTsKKwltYXNrID0gMSA8PCAobnIgJiAzMSk7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkibW92CSUlbzcsICUlZzRcblx0IgorCSJjYWxsCV9fX2NsZWFyX2JpdFxuXHQiCisJIiBhZGQJJSVvNywgOCwgJSVvN1xuIgorCTogIj0mciIgKG1hc2spLCAiPXIiICh0bXAxKSwgIj1yIiAodG1wMiksICI9ciIgKHRtcDMpLCAiPXIiICh0bXA0KQorCTogIjAiIChtYXNrKSwgInIiIChBRERSKQorCTogIm1lbW9yeSIsICJjYyIpOworCisJcmV0dXJuIG1hc2sgIT0gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX2JpdCh1bnNpZ25lZCBsb25nIG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQoreworCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgbWFzayBhc20oImcyIik7CisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyAqQUREUiBhc20oImcxIik7CisJcmVnaXN0ZXIgaW50IHRtcDEgYXNtKCJnMyIpOworCXJlZ2lzdGVyIGludCB0bXAyIGFzbSgiZzQiKTsKKwlyZWdpc3RlciBpbnQgdG1wMyBhc20oImc1Iik7CisJcmVnaXN0ZXIgaW50IHRtcDQgYXNtKCJnNyIpOworCisJQUREUiA9ICgodW5zaWduZWQgbG9uZyAqKSBhZGRyKSArIChuciA+PiA1KTsKKwltYXNrID0gMSA8PCAobnIgJiAzMSk7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkibW92CSUlbzcsICUlZzRcblx0IgorCSJjYWxsCV9fX2NsZWFyX2JpdFxuXHQiCisJIiBhZGQJJSVvNywgOCwgJSVvN1xuIgorCTogIj0mciIgKG1hc2spLCAiPXIiICh0bXAxKSwgIj1yIiAodG1wMiksICI9ciIgKHRtcDMpLCAiPXIiICh0bXA0KQorCTogIjAiIChtYXNrKSwgInIiIChBRERSKQorCTogIm1lbW9yeSIsICJjYyIpOworfQorCitzdGF0aWMgaW5saW5lIGludCB0ZXN0X2FuZF9jaGFuZ2VfYml0KHVuc2lnbmVkIGxvbmcgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpCit7CisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBtYXNrIGFzbSgiZzIiKTsKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nICpBRERSIGFzbSgiZzEiKTsKKwlyZWdpc3RlciBpbnQgdG1wMSBhc20oImczIik7CisJcmVnaXN0ZXIgaW50IHRtcDIgYXNtKCJnNCIpOworCXJlZ2lzdGVyIGludCB0bXAzIGFzbSgiZzUiKTsKKwlyZWdpc3RlciBpbnQgdG1wNCBhc20oImc3Iik7CisKKwlBRERSID0gKCh1bnNpZ25lZCBsb25nICopIGFkZHIpICsgKG5yID4+IDUpOworCW1hc2sgPSAxIDw8IChuciAmIDMxKTsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCSJtb3YJJSVvNywgJSVnNFxuXHQiCisJImNhbGwJX19fY2hhbmdlX2JpdFxuXHQiCisJIiBhZGQJJSVvNywgOCwgJSVvN1xuIgorCTogIj0mciIgKG1hc2spLCAiPXIiICh0bXAxKSwgIj1yIiAodG1wMiksICI9ciIgKHRtcDMpLCAiPXIiICh0bXA0KQorCTogIjAiIChtYXNrKSwgInIiIChBRERSKQorCTogIm1lbW9yeSIsICJjYyIpOworCisJcmV0dXJuIG1hc2sgIT0gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNoYW5nZV9iaXQodW5zaWduZWQgbG9uZyBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcikKK3sKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIG1hc2sgYXNtKCJnMiIpOworCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgKkFERFIgYXNtKCJnMSIpOworCXJlZ2lzdGVyIGludCB0bXAxIGFzbSgiZzMiKTsKKwlyZWdpc3RlciBpbnQgdG1wMiBhc20oImc0Iik7CisJcmVnaXN0ZXIgaW50IHRtcDMgYXNtKCJnNSIpOworCXJlZ2lzdGVyIGludCB0bXA0IGFzbSgiZzciKTsKKworCUFERFIgPSAoKHVuc2lnbmVkIGxvbmcgKikgYWRkcikgKyAobnIgPj4gNSk7CisJbWFzayA9IDEgPDwgKG5yICYgMzEpOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJIm1vdgklJW83LCAlJWc0XG5cdCIKKwkiY2FsbAlfX19jaGFuZ2VfYml0XG5cdCIKKwkiIGFkZAklJW83LCA4LCAlJW83XG4iCisJOiAiPSZyIiAobWFzayksICI9ciIgKHRtcDEpLCAiPXIiICh0bXAyKSwgIj1yIiAodG1wMyksICI9ciIgKHRtcDQpCisJOiAiMCIgKG1hc2spLCAiciIgKEFERFIpCisJOiAibWVtb3J5IiwgImNjIik7Cit9CisKKy8qCisgKiBub24tYXRvbWljIHZlcnNpb25zCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3NldF9iaXQoaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQoreworCXVuc2lnbmVkIGxvbmcgbWFzayA9IDFVTCA8PCAobnIgJiAweDFmKTsKKwl1bnNpZ25lZCBsb25nICpwID0gKCh1bnNpZ25lZCBsb25nICopYWRkcikgKyAobnIgPj4gNSk7CisKKwkqcCB8PSBtYXNrOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19jbGVhcl9iaXQoaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQoreworCXVuc2lnbmVkIGxvbmcgbWFzayA9IDFVTCA8PCAobnIgJiAweDFmKTsKKwl1bnNpZ25lZCBsb25nICpwID0gKCh1bnNpZ25lZCBsb25nICopYWRkcikgKyAobnIgPj4gNSk7CisKKwkqcCAmPSB+bWFzazsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fY2hhbmdlX2JpdChpbnQgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpCit7CisJdW5zaWduZWQgbG9uZyBtYXNrID0gMVVMIDw8IChuciAmIDB4MWYpOworCXVuc2lnbmVkIGxvbmcgKnAgPSAoKHVuc2lnbmVkIGxvbmcgKilhZGRyKSArIChuciA+PiA1KTsKKworCSpwIF49IG1hc2s7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fdGVzdF9hbmRfc2V0X2JpdChpbnQgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpCit7CisJdW5zaWduZWQgbG9uZyBtYXNrID0gMVVMIDw8IChuciAmIDB4MWYpOworCXVuc2lnbmVkIGxvbmcgKnAgPSAoKHVuc2lnbmVkIGxvbmcgKilhZGRyKSArIChuciA+PiA1KTsKKwl1bnNpZ25lZCBsb25nIG9sZCA9ICpwOworCisJKnAgPSBvbGQgfCBtYXNrOworCXJldHVybiAob2xkICYgbWFzaykgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgX190ZXN0X2FuZF9jbGVhcl9iaXQoaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQoreworCXVuc2lnbmVkIGxvbmcgbWFzayA9IDFVTCA8PCAobnIgJiAweDFmKTsKKwl1bnNpZ25lZCBsb25nICpwID0gKCh1bnNpZ25lZCBsb25nICopYWRkcikgKyAobnIgPj4gNSk7CisJdW5zaWduZWQgbG9uZyBvbGQgPSAqcDsKKworCSpwID0gb2xkICYgfm1hc2s7CisJcmV0dXJuIChvbGQgJiBtYXNrKSAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBfX3Rlc3RfYW5kX2NoYW5nZV9iaXQoaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQoreworCXVuc2lnbmVkIGxvbmcgbWFzayA9IDFVTCA8PCAobnIgJiAweDFmKTsKKwl1bnNpZ25lZCBsb25nICpwID0gKCh1bnNpZ25lZCBsb25nICopYWRkcikgKyAobnIgPj4gNSk7CisJdW5zaWduZWQgbG9uZyBvbGQgPSAqcDsKKworCSpwID0gb2xkIF4gbWFzazsKKwlyZXR1cm4gKG9sZCAmIG1hc2spICE9IDA7Cit9CisKKyNkZWZpbmUgc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCkJZG8geyB9IHdoaWxlKDApCisjZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCkJZG8geyB9IHdoaWxlKDApCisKKy8qIFRoZSBmb2xsb3dpbmcgcm91dGluZSBuZWVkIG5vdCBiZSBhdG9taWMuICovCitzdGF0aWMgaW5saW5lIGludCB0ZXN0X2JpdChpbnQgbnIsIF9fY29uc3RfXyB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQoreworCXJldHVybiAoMVVMICYgKCgodW5zaWduZWQgbG9uZyAqKWFkZHIpW25yID4+IDVdID4+IChuciAmIDMxKSkpICE9IDBVTDsKK30KKworLyogVGhlIGVhc3kvY2hlZXNlIHZlcnNpb24gZm9yIG5vdy4gKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBmZnoodW5zaWduZWQgbG9uZyB3b3JkKQoreworCXVuc2lnbmVkIGxvbmcgcmVzdWx0ID0gMDsKKworCXdoaWxlKHdvcmQgJiAxKSB7CisJCXJlc3VsdCsrOworCQl3b3JkID4+PSAxOworCX0KKwlyZXR1cm4gcmVzdWx0OworfQorCisvKioKKyAqIF9fZmZzIC0gZmluZCBmaXJzdCBiaXQgaW4gd29yZC4KKyAqIEB3b3JkOiBUaGUgd29yZCB0byBzZWFyY2gKKyAqCisgKiBVbmRlZmluZWQgaWYgbm8gYml0IGV4aXN0cywgc28gY29kZSBzaG91bGQgY2hlY2sgYWdhaW5zdCAwIGZpcnN0LgorICovCitzdGF0aWMgaW5saW5lIGludCBfX2Zmcyh1bnNpZ25lZCBsb25nIHdvcmQpCit7CisJaW50IG51bSA9IDA7CisKKwlpZiAoKHdvcmQgJiAweGZmZmYpID09IDApIHsKKwkJbnVtICs9IDE2OworCQl3b3JkID4+PSAxNjsKKwl9CisJaWYgKCh3b3JkICYgMHhmZikgPT0gMCkgeworCQludW0gKz0gODsKKwkJd29yZCA+Pj0gODsKKwl9CisJaWYgKCh3b3JkICYgMHhmKSA9PSAwKSB7CisJCW51bSArPSA0OworCQl3b3JkID4+PSA0OworCX0KKwlpZiAoKHdvcmQgJiAweDMpID09IDApIHsKKwkJbnVtICs9IDI7CisJCXdvcmQgPj49IDI7CisJfQorCWlmICgod29yZCAmIDB4MSkgPT0gMCkKKwkJbnVtICs9IDE7CisJcmV0dXJuIG51bTsKK30KKworLyoKKyAqIEV2ZXJ5IGFyY2hpdGVjdHVyZSBtdXN0IGRlZmluZSB0aGlzIGZ1bmN0aW9uLiBJdCdzIHRoZSBmYXN0ZXN0CisgKiB3YXkgb2Ygc2VhcmNoaW5nIGEgMTQwLWJpdCBiaXRtYXAgd2hlcmUgdGhlIGZpcnN0IDEwMCBiaXRzIGFyZQorICogdW5saWtlbHkgdG8gYmUgc2V0LiBJdCdzIGd1YXJhbnRlZWQgdGhhdCBhdCBsZWFzdCBvbmUgb2YgdGhlIDE0MAorICogYml0cyBpcyBjbGVhcmVkLgorICovCitzdGF0aWMgaW5saW5lIGludCBzY2hlZF9maW5kX2ZpcnN0X2JpdCh1bnNpZ25lZCBsb25nICpiKQoreworCisJaWYgKHVubGlrZWx5KGJbMF0pKQorCQlyZXR1cm4gX19mZnMoYlswXSk7CisJaWYgKHVubGlrZWx5KGJbMV0pKQorCQlyZXR1cm4gX19mZnMoYlsxXSkgKyAzMjsKKwlpZiAodW5saWtlbHkoYlsyXSkpCisJCXJldHVybiBfX2ZmcyhiWzJdKSArIDY0OworCWlmIChiWzNdKQorCQlyZXR1cm4gX19mZnMoYlszXSkgKyA5NjsKKwlyZXR1cm4gX19mZnMoYls0XSkgKyAxMjg7Cit9CisKKy8qCisgKiBmZnM6IGZpbmQgZmlyc3QgYml0IHNldC4gVGhpcyBpcyBkZWZpbmVkIHRoZSBzYW1lIHdheSBhcworICogdGhlIGxpYmMgYW5kIGNvbXBpbGVyIGJ1aWx0aW4gZmZzIHJvdXRpbmVzLCB0aGVyZWZvcmUKKyAqIGRpZmZlcnMgaW4gc3Bpcml0IGZyb20gdGhlIGFib3ZlIGZmeiAobWFuIGZmcykuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGZmcyhpbnQgeCkKK3sKKwlpZiAoIXgpCisJCXJldHVybiAwOworCXJldHVybiBfX2ZmcygodW5zaWduZWQgbG9uZyl4KSArIDE7Cit9CisKKy8qCisgKiBmbHM6IGZpbmQgbGFzdCAobW9zdC1zaWduaWZpY2FudCkgYml0IHNldC4KKyAqIE5vdGUgZmxzKDApID0gMCwgZmxzKDEpID0gMSwgZmxzKDB4ODAwMDAwMDApID0gMzIuCisgKi8KKyNkZWZpbmUgZmxzKHgpIGdlbmVyaWNfZmxzKHgpCisKKy8qCisgKiBod2VpZ2h0TjogcmV0dXJucyB0aGUgaGFtbWluZyB3ZWlnaHQgKGkuZS4gdGhlIG51bWJlcgorICogb2YgYml0cyBzZXQpIG9mIGEgTi1iaXQgd29yZAorICovCisjZGVmaW5lIGh3ZWlnaHQzMih4KSBnZW5lcmljX2h3ZWlnaHQzMih4KQorI2RlZmluZSBod2VpZ2h0MTYoeCkgZ2VuZXJpY19od2VpZ2h0MTYoeCkKKyNkZWZpbmUgaHdlaWdodDgoeCkgZ2VuZXJpY19od2VpZ2h0OCh4KQorCisvKgorICogZmluZF9uZXh0X3plcm9fYml0KCkgZmluZHMgdGhlIGZpcnN0IHplcm8gYml0IGluIGEgYml0IHN0cmluZyBvZiBsZW5ndGgKKyAqICdzaXplJyBiaXRzLCBzdGFydGluZyB0aGUgc2VhcmNoIGF0IGJpdCAnb2Zmc2V0Jy4gVGhpcyBpcyBsYXJnZWx5IGJhc2VkCisgKiBvbiBMaW51cydzIEFMUEhBIHJvdXRpbmVzLCB3aGljaCBhcmUgcHJldHR5IHBvcnRhYmxlIEJUVy4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGZpbmRfbmV4dF96ZXJvX2JpdChjb25zdCB1bnNpZ25lZCBsb25nICphZGRyLAorICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpCit7CisJY29uc3QgdW5zaWduZWQgbG9uZyAqcCA9IGFkZHIgKyAob2Zmc2V0ID4+IDUpOworCXVuc2lnbmVkIGxvbmcgcmVzdWx0ID0gb2Zmc2V0ICYgfjMxVUw7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlpZiAob2Zmc2V0ID49IHNpemUpCisJCXJldHVybiBzaXplOworCXNpemUgLT0gcmVzdWx0OworCW9mZnNldCAmPSAzMVVMOworCWlmIChvZmZzZXQpIHsKKwkJdG1wID0gKihwKyspOworCQl0bXAgfD0gfjBVTCA+PiAoMzItb2Zmc2V0KTsKKwkJaWYgKHNpemUgPCAzMikKKwkJCWdvdG8gZm91bmRfZmlyc3Q7CisJCWlmICh+dG1wKQorCQkJZ290byBmb3VuZF9taWRkbGU7CisJCXNpemUgLT0gMzI7CisJCXJlc3VsdCArPSAzMjsKKwl9CisJd2hpbGUgKHNpemUgJiB+MzFVTCkgeworCQlpZiAofih0bXAgPSAqKHArKykpKQorCQkJZ290byBmb3VuZF9taWRkbGU7CisJCXJlc3VsdCArPSAzMjsKKwkJc2l6ZSAtPSAzMjsKKwl9CisJaWYgKCFzaXplKQorCQlyZXR1cm4gcmVzdWx0OworCXRtcCA9ICpwOworCitmb3VuZF9maXJzdDoKKwl0bXAgfD0gfjBVTCA8PCBzaXplOworCWlmICh0bXAgPT0gfjBVTCkgICAgICAgIC8qIEFyZSBhbnkgYml0cyB6ZXJvPyAqLworCQlyZXR1cm4gcmVzdWx0ICsgc2l6ZTsgLyogTm9wZS4gKi8KK2ZvdW5kX21pZGRsZToKKwlyZXR1cm4gcmVzdWx0ICsgZmZ6KHRtcCk7Cit9CisKKy8qCisgKiBMaW51cyBzZXogdGhhdCBnY2MgY2FuIG9wdGltaXplIHRoZSBmb2xsb3dpbmcgY29ycmVjdGx5LCB3ZSdsbCBzZWUgaWYgdGhpcworICogaG9sZHMgb24gdGhlIFNwYXJjIGFzIGl0IGRvZXMgZm9yIHRoZSBBTFBIQS4KKyAqLworI2RlZmluZSBmaW5kX2ZpcnN0X3plcm9fYml0KGFkZHIsIHNpemUpIFwKKyAgICAgICAgZmluZF9uZXh0X3plcm9fYml0KChhZGRyKSwgKHNpemUpLCAwKQorCisvKioKKyAqIGZpbmRfbmV4dF9iaXQgLSBmaW5kIHRoZSBmaXJzdCBzZXQgYml0IGluIGEgbWVtb3J5IHJlZ2lvbgorICogQGFkZHI6IFRoZSBhZGRyZXNzIHRvIGJhc2UgdGhlIHNlYXJjaCBvbgorICogQG9mZnNldDogVGhlIGJpdG51bWJlciB0byBzdGFydCBzZWFyY2hpbmcgYXQKKyAqIEBzaXplOiBUaGUgbWF4aW11bSBzaXplIHRvIHNlYXJjaAorICoKKyAqIFNjaGVkdWxlciBpbmR1Y2VkIGJpdG9wLCBkbyBub3QgdXNlLgorICovCitzdGF0aWMgaW5saW5lIGludCBmaW5kX25leHRfYml0KGNvbnN0IHVuc2lnbmVkIGxvbmcgKmFkZHIsIGludCBzaXplLCBpbnQgb2Zmc2V0KQoreworCWNvbnN0IHVuc2lnbmVkIGxvbmcgKnAgPSBhZGRyICsgKG9mZnNldCA+PiA1KTsKKwlpbnQgbnVtID0gb2Zmc2V0ICYgfjB4MWY7CisJdW5zaWduZWQgbG9uZyB3b3JkOworCisJd29yZCA9ICpwKys7CisJd29yZCAmPSB+KCgxIDw8IChvZmZzZXQgJiAweDFmKSkgLSAxKTsKKwl3aGlsZSAobnVtIDwgc2l6ZSkgeworCQlpZiAod29yZCAhPSAwKSB7CisJCQlyZXR1cm4gX19mZnMod29yZCkgKyBudW07CisJCX0KKwkJd29yZCA9ICpwKys7CisJCW51bSArPSAweDIwOworCX0KKwlyZXR1cm4gbnVtOworfQorCisvKioKKyAqIGZpbmRfZmlyc3RfYml0IC0gZmluZCB0aGUgZmlyc3Qgc2V0IGJpdCBpbiBhIG1lbW9yeSByZWdpb24KKyAqIEBhZGRyOiBUaGUgYWRkcmVzcyB0byBzdGFydCB0aGUgc2VhcmNoIGF0CisgKiBAc2l6ZTogVGhlIG1heGltdW0gc2l6ZSB0byBzZWFyY2gKKyAqCisgKiBSZXR1cm5zIHRoZSBiaXQtbnVtYmVyIG9mIHRoZSBmaXJzdCBzZXQgYml0LCBub3QgdGhlIG51bWJlciBvZiB0aGUgYnl0ZQorICogY29udGFpbmluZyBhIGJpdC4KKyAqLworI2RlZmluZSBmaW5kX2ZpcnN0X2JpdChhZGRyLCBzaXplKSBcCisJZmluZF9uZXh0X2JpdCgoYWRkciksIChzaXplKSwgMCkKKworLyoKKyAqLworc3RhdGljIGlubGluZSBpbnQgdGVzdF9sZV9iaXQoaW50IG5yLCBfX2NvbnN0X18gdW5zaWduZWQgbG9uZyAqIGFkZHIpCit7CisJX19jb25zdF9fIHVuc2lnbmVkIGNoYXIgKkFERFIgPSAoX19jb25zdF9fIHVuc2lnbmVkIGNoYXIgKikgYWRkcjsKKwlyZXR1cm4gKEFERFJbbnIgPj4gM10gPj4gKG5yICYgNykpICYgMTsKK30KKworLyoKKyAqIG5vbi1hdG9taWMgdmVyc2lvbnMKKyAqLworc3RhdGljIGlubGluZSB2b2lkIF9fc2V0X2xlX2JpdChpbnQgbnIsIHVuc2lnbmVkIGxvbmcgKmFkZHIpCit7CisJdW5zaWduZWQgY2hhciAqQUREUiA9ICh1bnNpZ25lZCBjaGFyICopYWRkcjsKKworCUFERFIgKz0gbnIgPj4gMzsKKwkqQUREUiB8PSAxIDw8IChuciAmIDB4MDcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19jbGVhcl9sZV9iaXQoaW50IG5yLCB1bnNpZ25lZCBsb25nICphZGRyKQoreworCXVuc2lnbmVkIGNoYXIgKkFERFIgPSAodW5zaWduZWQgY2hhciAqKWFkZHI7CisKKwlBRERSICs9IG5yID4+IDM7CisJKkFERFIgJj0gfigxIDw8IChuciAmIDB4MDcpKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgX190ZXN0X2FuZF9zZXRfbGVfYml0KGludCBuciwgdW5zaWduZWQgbG9uZyAqYWRkcikKK3sKKwlpbnQgbWFzaywgcmV0dmFsOworCXVuc2lnbmVkIGNoYXIgKkFERFIgPSAodW5zaWduZWQgY2hhciAqKWFkZHI7CisKKwlBRERSICs9IG5yID4+IDM7CisJbWFzayA9IDEgPDwgKG5yICYgMHgwNyk7CisJcmV0dmFsID0gKG1hc2sgJiAqQUREUikgIT0gMDsKKwkqQUREUiB8PSBtYXNrOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fdGVzdF9hbmRfY2xlYXJfbGVfYml0KGludCBuciwgdW5zaWduZWQgbG9uZyAqYWRkcikKK3sKKwlpbnQgbWFzaywgcmV0dmFsOworCXVuc2lnbmVkIGNoYXIgKkFERFIgPSAodW5zaWduZWQgY2hhciAqKWFkZHI7CisKKwlBRERSICs9IG5yID4+IDM7CisJbWFzayA9IDEgPDwgKG5yICYgMHgwNyk7CisJcmV0dmFsID0gKG1hc2sgJiAqQUREUikgIT0gMDsKKwkqQUREUiAmPSB+bWFzazsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZmluZF9uZXh0X3plcm9fbGVfYml0KGNvbnN0IHVuc2lnbmVkIGxvbmcgKmFkZHIsCisgICAgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIG9mZnNldCkKK3sKKwljb25zdCB1bnNpZ25lZCBsb25nICpwID0gYWRkciArIChvZmZzZXQgPj4gNSk7CisJdW5zaWduZWQgbG9uZyByZXN1bHQgPSBvZmZzZXQgJiB+MzFVTDsKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCWlmIChvZmZzZXQgPj0gc2l6ZSkKKwkJcmV0dXJuIHNpemU7CisJc2l6ZSAtPSByZXN1bHQ7CisJb2Zmc2V0ICY9IDMxVUw7CisJaWYob2Zmc2V0KSB7CisJCXRtcCA9ICoocCsrKTsKKwkJdG1wIHw9IF9fc3dhYjMyKH4wVUwgPj4gKDMyLW9mZnNldCkpOworCQlpZihzaXplIDwgMzIpCisJCQlnb3RvIGZvdW5kX2ZpcnN0OworCQlpZih+dG1wKQorCQkJZ290byBmb3VuZF9taWRkbGU7CisJCXNpemUgLT0gMzI7CisJCXJlc3VsdCArPSAzMjsKKwl9CisJd2hpbGUoc2l6ZSAmIH4zMVVMKSB7CisJCWlmKH4odG1wID0gKihwKyspKSkKKwkJCWdvdG8gZm91bmRfbWlkZGxlOworCQlyZXN1bHQgKz0gMzI7CisJCXNpemUgLT0gMzI7CisJfQorCWlmKCFzaXplKQorCQlyZXR1cm4gcmVzdWx0OworCXRtcCA9ICpwOworCitmb3VuZF9maXJzdDoKKwl0bXAgPSBfX3N3YWIzMih0bXApIHwgKH4wVUwgPDwgc2l6ZSk7CisJaWYgKHRtcCA9PSB+MFVMKSAgICAgICAgLyogQXJlIGFueSBiaXRzIHplcm8/ICovCisJCXJldHVybiByZXN1bHQgKyBzaXplOyAvKiBOb3BlLiAqLworCXJldHVybiByZXN1bHQgKyBmZnoodG1wKTsKKworZm91bmRfbWlkZGxlOgorCXJldHVybiByZXN1bHQgKyBmZnooX19zd2FiMzIodG1wKSk7Cit9CisKKyNkZWZpbmUgZmluZF9maXJzdF96ZXJvX2xlX2JpdChhZGRyLCBzaXplKSBcCisgICAgICAgIGZpbmRfbmV4dF96ZXJvX2xlX2JpdCgoYWRkciksIChzaXplKSwgMCkKKworI2RlZmluZSBleHQyX3NldF9iaXQobnIsYWRkcikJXAorCV9fdGVzdF9hbmRfc2V0X2xlX2JpdCgobnIpLCh1bnNpZ25lZCBsb25nICopKGFkZHIpKQorI2RlZmluZSBleHQyX2NsZWFyX2JpdChucixhZGRyKQlcCisJX190ZXN0X2FuZF9jbGVhcl9sZV9iaXQoKG5yKSwodW5zaWduZWQgbG9uZyAqKShhZGRyKSkKKworI2RlZmluZSBleHQyX3NldF9iaXRfYXRvbWljKGxvY2ssIG5yLCBhZGRyKQkJXAorCSh7CQkJCQkJXAorCQlpbnQgcmV0OwkJCQlcCisJCXNwaW5fbG9jayhsb2NrKTsJCQlcCisJCXJldCA9IGV4dDJfc2V0X2JpdCgobnIpLCAodW5zaWduZWQgbG9uZyAqKShhZGRyKSk7IFwKKwkJc3Bpbl91bmxvY2sobG9jayk7CQkJXAorCQlyZXQ7CQkJCQlcCisJfSkKKworI2RlZmluZSBleHQyX2NsZWFyX2JpdF9hdG9taWMobG9jaywgbnIsIGFkZHIpCQlcCisJKHsJCQkJCQlcCisJCWludCByZXQ7CQkJCVwKKwkJc3Bpbl9sb2NrKGxvY2spOwkJCVwKKwkJcmV0ID0gZXh0Ml9jbGVhcl9iaXQoKG5yKSwgKHVuc2lnbmVkIGxvbmcgKikoYWRkcikpOyBcCisJCXNwaW5fdW5sb2NrKGxvY2spOwkJCVwKKwkJcmV0OwkJCQkJXAorCX0pCisKKyNkZWZpbmUgZXh0Ml90ZXN0X2JpdChucixhZGRyKQlcCisJdGVzdF9sZV9iaXQoKG5yKSwodW5zaWduZWQgbG9uZyAqKShhZGRyKSkKKyNkZWZpbmUgZXh0Ml9maW5kX2ZpcnN0X3plcm9fYml0KGFkZHIsIHNpemUpIFwKKwlmaW5kX2ZpcnN0X3plcm9fbGVfYml0KCh1bnNpZ25lZCBsb25nICopKGFkZHIpLCAoc2l6ZSkpCisjZGVmaW5lIGV4dDJfZmluZF9uZXh0X3plcm9fYml0KGFkZHIsIHNpemUsIG9mZikgXAorCWZpbmRfbmV4dF96ZXJvX2xlX2JpdCgodW5zaWduZWQgbG9uZyAqKShhZGRyKSwgKHNpemUpLCAob2ZmKSkKKworLyogQml0bWFwIGZ1bmN0aW9ucyBmb3IgdGhlIG1pbml4IGZpbGVzeXN0ZW0uICAqLworI2RlZmluZSBtaW5peF90ZXN0X2FuZF9zZXRfYml0KG5yLGFkZHIpCVwKKwl0ZXN0X2FuZF9zZXRfYml0KChuciksKHVuc2lnbmVkIGxvbmcgKikoYWRkcikpCisjZGVmaW5lIG1pbml4X3NldF9iaXQobnIsYWRkcikJCVwKKwlzZXRfYml0KChuciksKHVuc2lnbmVkIGxvbmcgKikoYWRkcikpCisjZGVmaW5lIG1pbml4X3Rlc3RfYW5kX2NsZWFyX2JpdChucixhZGRyKSBcCisJdGVzdF9hbmRfY2xlYXJfYml0KChuciksKHVuc2lnbmVkIGxvbmcgKikoYWRkcikpCisjZGVmaW5lIG1pbml4X3Rlc3RfYml0KG5yLGFkZHIpCQlcCisJdGVzdF9iaXQoKG5yKSwodW5zaWduZWQgbG9uZyAqKShhZGRyKSkKKyNkZWZpbmUgbWluaXhfZmluZF9maXJzdF96ZXJvX2JpdChhZGRyLHNpemUpIFwKKwlmaW5kX2ZpcnN0X3plcm9fYml0KCh1bnNpZ25lZCBsb25nICopKGFkZHIpLChzaXplKSkKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIGRlZmluZWQoX1NQQVJDX0JJVE9QU19IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvYnBwLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9icHAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTc4YWMxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvYnBwLmgKQEAgLTAsMCArMSw3MyBAQAorI2lmbmRlZiBfU1BBUkNfQlBQX0gKKyNkZWZpbmUgX1NQQVJDX0JQUF9ICisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTUgUGljdHVyZSBFbGVtZW50cworICoJU3RlcGhlbiBXaWxsaWFtcworICoJR3VzIEJhbGRhdWYKKyAqCisgKiBMaW51eC9TUEFSQyBwb3J0IGJ5IFBldGVyIFphaXRjZXYuCisgKiBJbnRlZ3JhdGlvbiBpbnRvIFNQQVJDIHRyZWUgYnkgVG9tIER5YXMuCisgKi8KKworI2luY2x1ZGUgIDxsaW51eC9pb2N0bC5oPgorCisvKgorICogVGhpcyBpcyBhIGRyaXZlciB0aGF0IHN1cHBvcnRzIElFRUUgU3RkIDEyODQtMTk5NCBjb21tdW5pY2F0aW9ucworICogd2l0aCBjb21wbGlhbnQgb3IgY29tcGF0aWJsZSBkZXZpY2VzLiBJdCB3aWxsIHVzZSB3aGF0ZXZlciBmZWF0dXJlcworICogdGhlIGRldmljZSBzdXBwb3J0cywgcHJlZmVyaW5nIHRob3NlIHRoYXQgYXJlIHR5cGljYWxseSBmYXN0ZXIuCisgKgorICogV2hlbiB0aGUgZGV2aWNlIGlzIG9wZW5lZCwgaXQgaXMgbGVmdCBpbiBDT01QQVRBQklMSVRZIG1vZGUsIGFuZAorICogd3JpdGVzIHdvcmsgbGlrZSBhbnkgcHJpbnRlciBkZXZpY2UuIFRoZSBkcml2ZXIgb25seSBhdHRlbXB0IHRvCisgKiBuZWdvdGlhdGUgMTI4NCBtb2RlcyB3aGVuIG5lZWRlZCBzbyB0aGF0IHBsdWdzIGNhbiBiZSBwdWxsZWQsCisgKiBzd2l0Y2ggYm94ZXMgc3dpdGNoZWQsIGV0Yy4sIHdpdGhvdXQgZGlzcnVwdGluZyB0aGluZ3MuIEl0IHdpbGwKKyAqIGFsc28gbGVhdmUgdGhlIGRldmljZSBpbiBjb21wYXRpYmlsaXR5IG1vZGUgd2hlbiBjbG9zZWQuCisgKi8KKworCisKKy8qCisgKiBUaGlzIGRyaXZlciBhbHNvIHN1cHBsaWVzIGlvY3RscyB0byBtYW51YWxseSBtYW5pcHVsYXRlIHRoZQorICogcGlucy4gVGhpcyBpcyBncmVhdCBmb3IgdGVzdGluZyBkZXZpY2VzLCBvciB3cml0aW5nIGNvZGUgdG8gZGVhbAorICogd2l0aCBiaXp6YXJyby1tb2RlIG9mIHRoZSBBQ01FIFNwZWNpYWwgVHVyYm9UaGluZ3kgUGx1cy4KKyAqCisgKiBOT1RFOiBUaGVzZSBpb2N0bCBjdXJyZW50bHkgZG8gbm90IGludGVyYWN0IHdlbGwgd2l0aAorICogcmVhZC93cml0ZS4gQ2F2ZWF0IGVtcHRvci4KKyAqCisgKiBQVVRfUElOUyBhbGxvd3MgdXMgdG8gYXNzaWduIHRoZSBzZW5zZSBvZiBhbGwgdGhlIHBpbnMsIGluY2x1ZGluZworICogdGhlIGRhdGEgcGlucyBpZiBiZWluZyBkcml2ZW4gYnkgdGhlIGhvc3QuIFRoZSBHRVRfUElOUyByZXR1cm5zIHRoZQorICogcGlucyB0aGF0IHRoZSBwZXJpcGhlcmFsIGRyaXZlcywgaW5jbHVkaW5nIGRhdGEgaWYgYXBwcm9wcmlhdGUuCisgKi8KKworIyBkZWZpbmUgQlBQX1BVVF9QSU5TIF9JT1coJ0InLCAxLCBpbnQpCisjIGRlZmluZSBCUFBfR0VUX1BJTlMgX0lPUignQicsIDIsIGNoYXIpIC8qIHRoYXQncyBib2d1cyAtIHNob3VsZCd2ZSBiZWVuIF9JTyAqLworIyBkZWZpbmUgQlBQX1BVVF9EQVRBIF9JT1coJ0InLCAzLCBpbnQpCisjIGRlZmluZSBCUFBfR0VUX0RBVEEgX0lPUignQicsIDQsIGNoYXIpIC8qIGRpdHRvICovCisKKy8qCisgKiBTZXQgdGhlIGRhdGEgYnVzIHRvIGlucHV0IG1vZGUuIERpc2VuZ2FnZSB0aGUgZGF0YSBiaW4gZHJpdmVyIGFuZAorICogYmUgcHJlcGFyZWQgdG8gcmVhZCB2YWx1ZXMgZnJvbSB0aGUgcGVyaXBoZXJhbC4gSWYgdGhlIGFyZyBpcyAwLAorICogdGhlbiByZXZlcnQgdGhlIGJ1cyB0byBvdXRwdXQgbW9kZS4KKyAqLworIyBkZWZpbmUgQlBQX1NFVF9JTlBVVCBfSU9XKCdCJywgNSwgaW50KQorCisvKgorICogVGhlc2UgYml0cyBhcHBseSB0byB0aGUgUFVUIG9wZXJhdGlvbi4uLgorICovCisjIGRlZmluZSBCUFBfUFBfblN0cm9iZSAgIDB4MDAwMQorIyBkZWZpbmUgQlBQX1BQX25BdXRvRmQgICAweDAwMDIKKyMgZGVmaW5lIEJQUF9QUF9uSW5pdCAgICAgMHgwMDA0CisjIGRlZmluZSBCUFBfUFBfblNlbGVjdEluIDB4MDAwOAorCisvKgorICogVGhlc2UgYXBwbHkgdG8gdGhlIEdFVCBvcGVyYXRpb24sIHdoaWNoIGFsc28gcmVhZHMgdGhlIGN1cnJlbnQgdmFsdWUKKyAqIG9mIHRoZSBwcmV2aW91c2x5IHB1dCB2YWx1ZXMuIEEgYml0IG1hc2sgb2YgdGhlc2Ugd2lsbCBiZSByZXR1cm5lZAorICogYXMgYSBiaXQgbWFzayBpbiB0aGUgcmV0dXJuIGNvZGUgb2YgdGhlIGlvY3RsKCkuCisgKi8KKyMgZGVmaW5lIEJQUF9HUF9uQWNrICAgMHgwMTAwCisjIGRlZmluZSBCUFBfR1BfQnVzeSAgIDB4MDIwMAorIyBkZWZpbmUgQlBQX0dQX1BFcnJvciAweDA0MDAKKyMgZGVmaW5lIEJQUF9HUF9TZWxlY3QgMHgwODAwCisjIGRlZmluZSBCUFBfR1BfbkZhdWx0IDB4MTAwMAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2JzZGVycm5vLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9ic2RlcnJuby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0YTc1YmU0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvYnNkZXJybm8uaApAQCAtMCwwICsxLDk0IEBACisvKiAkSWQ6IGJzZGVycm5vLmgsdiAxLjMgMTk5Ni8wNC8yNSAwNjoxMjo0NyBkYXZlbSBFeHAgJAorICogYnNkZXJybm8uaDogRXJyb3IgbnVtYmVycyBmb3IgTmV0QlNEIGJpbmFyeSBjb21wYXRpYmlsaXR5CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKKyAqLworCisjaWZuZGVmIF9TUEFSQ19CU0RFUlJOT19ICisjZGVmaW5lIF9TUEFSQ19CU0RFUlJOT19ICisKKyNkZWZpbmUgQlNEX0VQRVJNICAgICAgICAgMSAgICAgIC8qIE9wZXJhdGlvbiBub3QgcGVybWl0dGVkICovCisjZGVmaW5lIEJTRF9FTk9FTlQgICAgICAgIDIgICAgICAvKiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5ICovCisjZGVmaW5lIEJTRF9FU1JDSCAgICAgICAgIDMgICAgICAvKiBObyBzdWNoIHByb2Nlc3MgKi8KKyNkZWZpbmUgQlNEX0VJTlRSICAgICAgICAgNCAgICAgIC8qIEludGVycnVwdGVkIHN5c3RlbSBjYWxsICovCisjZGVmaW5lIEJTRF9FSU8gICAgICAgICAgIDUgICAgICAvKiBJbnB1dC9vdXRwdXQgZXJyb3IgKi8KKyNkZWZpbmUgQlNEX0VOWElPICAgICAgICAgNiAgICAgIC8qIERldmljZSBub3QgY29uZmlndXJlZCAqLworI2RlZmluZSBCU0RfRTJCSUcgICAgICAgICA3ICAgICAgLyogQXJndW1lbnQgbGlzdCB0b28gbG9uZyAqLworI2RlZmluZSBCU0RfRU5PRVhFQyAgICAgICA4ICAgICAgLyogRXhlYyBmb3JtYXQgZXJyb3IgKi8KKyNkZWZpbmUgQlNEX0VCQURGICAgICAgICAgOSAgICAgIC8qIEJhZCBmaWxlIGRlc2NyaXB0b3IgKi8KKyNkZWZpbmUgQlNEX0VDSElMRCAgICAgICAgMTAgICAgIC8qIE5vIGNoaWxkIHByb2Nlc3NlcyAqLworI2RlZmluZSBCU0RfRURFQURMSyAgICAgICAxMSAgICAgLyogUmVzb3VyY2UgZGVhZGxvY2sgYXZvaWRlZCAqLworI2RlZmluZSBCU0RfRU5PTUVNICAgICAgICAxMiAgICAgLyogQ2Fubm90IGFsbG9jYXRlIG1lbW9yeSAqLworI2RlZmluZSBCU0RfRUFDQ0VTICAgICAgICAxMyAgICAgLyogUGVybWlzc2lvbiBkZW5pZWQgKi8KKyNkZWZpbmUgQlNEX0VGQVVMVCAgICAgICAgMTQgICAgIC8qIEJhZCBhZGRyZXNzICovCisjZGVmaW5lIEJTRF9FTk9UQkxLICAgICAgIDE1ICAgICAvKiBCbG9jayBkZXZpY2UgcmVxdWlyZWQgKi8KKyNkZWZpbmUgQlNEX0VCVVNZICAgICAgICAgMTYgICAgIC8qIERldmljZSBidXN5ICovCisjZGVmaW5lIEJTRF9FRVhJU1QgICAgICAgIDE3ICAgICAvKiBGaWxlIGV4aXN0cyAqLworI2RlZmluZSBCU0RfRVhERVYgICAgICAgICAxOCAgICAgLyogQ3Jvc3MtZGV2aWNlIGxpbmsgKi8KKyNkZWZpbmUgQlNEX0VOT0RFViAgICAgICAgMTkgICAgIC8qIE9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkIGJ5IGRldmljZSAqLworI2RlZmluZSBCU0RfRU5PVERJUiAgICAgICAyMCAgICAgLyogTm90IGEgZGlyZWN0b3J5ICovCisjZGVmaW5lIEJTRF9FSVNESVIgICAgICAgIDIxICAgICAvKiBJcyBhIGRpcmVjdG9yeSAqLworI2RlZmluZSBCU0RfRUlOVkFMICAgICAgICAyMiAgICAgLyogSW52YWxpZCBhcmd1bWVudCAqLworI2RlZmluZSBCU0RfRU5GSUxFICAgICAgICAyMyAgICAgLyogVG9vIG1hbnkgb3BlbiBmaWxlcyBpbiBzeXN0ZW0gKi8KKyNkZWZpbmUgQlNEX0VNRklMRSAgICAgICAgMjQgICAgIC8qIFRvbyBtYW55IG9wZW4gZmlsZXMgKi8KKyNkZWZpbmUgQlNEX0VOT1RUWSAgICAgICAgMjUgICAgIC8qIEluYXBwcm9wcmlhdGUgaW9jdGwgZm9yIGRldmljZSAqLworI2RlZmluZSBCU0RfRVRYVEJTWSAgICAgICAyNiAgICAgLyogVGV4dCBmaWxlIGJ1c3kgKi8KKyNkZWZpbmUgQlNEX0VGQklHICAgICAgICAgMjcgICAgIC8qIEZpbGUgdG9vIGxhcmdlICovCisjZGVmaW5lIEJTRF9FTk9TUEMgICAgICAgIDI4ICAgICAvKiBObyBzcGFjZSBsZWZ0IG9uIGRldmljZSAqLworI2RlZmluZSBCU0RfRVNQSVBFICAgICAgICAyOSAgICAgLyogSWxsZWdhbCBzZWVrICovCisjZGVmaW5lIEJTRF9FUk9GUyAgICAgICAgIDMwICAgICAvKiBSZWFkLW9ubHkgZmlsZSBzeXN0ZW0gKi8KKyNkZWZpbmUgQlNEX0VNTElOSyAgICAgICAgMzEgICAgIC8qIFRvbyBtYW55IGxpbmtzICovCisjZGVmaW5lIEJTRF9FUElQRSAgICAgICAgIDMyICAgICAvKiBCcm9rZW4gcGlwZSAqLworI2RlZmluZSBCU0RfRURPTSAgICAgICAgICAzMyAgICAgLyogTnVtZXJpY2FsIGFyZ3VtZW50IG91dCBvZiBkb21haW4gKi8KKyNkZWZpbmUgQlNEX0VSQU5HRSAgICAgICAgMzQgICAgIC8qIFJlc3VsdCB0b28gbGFyZ2UgKi8KKyNkZWZpbmUgQlNEX0VBR0FJTiAgICAgICAgMzUgICAgIC8qIFJlc291cmNlIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlICovCisjZGVmaW5lIEJTRF9FV09VTERCTE9DSyAgIEVBR0FJTiAvKiBPcGVyYXRpb24gd291bGQgYmxvY2sgKi8KKyNkZWZpbmUgQlNEX0VJTlBST0dSRVNTICAgMzYgICAgIC8qIE9wZXJhdGlvbiBub3cgaW4gcHJvZ3Jlc3MgKi8KKyNkZWZpbmUgQlNEX0VBTFJFQURZICAgICAgMzcgICAgIC8qIE9wZXJhdGlvbiBhbHJlYWR5IGluIHByb2dyZXNzICovCisjZGVmaW5lIEJTRF9FTk9UU09DSyAgICAgIDM4ICAgICAvKiBTb2NrZXQgb3BlcmF0aW9uIG9uIG5vbi1zb2NrZXQgKi8KKyNkZWZpbmUgQlNEX0VERVNUQUREUlJFUSAgMzkgICAgIC8qIERlc3RpbmF0aW9uIGFkZHJlc3MgcmVxdWlyZWQgKi8KKyNkZWZpbmUgQlNEX0VNU0dTSVpFICAgICAgNDAgICAgIC8qIE1lc3NhZ2UgdG9vIGxvbmcgKi8KKyNkZWZpbmUgQlNEX0VQUk9UT1RZUEUgICAgNDEgICAgIC8qIFByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldCAqLworI2RlZmluZSBCU0RfRU5PUFJPVE9PUFQgICA0MiAgICAgLyogUHJvdG9jb2wgbm90IGF2YWlsYWJsZSAqLworI2RlZmluZSBCU0RfRVBST1RPTk9TVVBQT1JUICA0MyAgLyogUHJvdG9jb2wgbm90IHN1cHBvcnRlZCAqLworI2RlZmluZSBCU0RfRVNPQ0tUTk9TVVBQT1JUICA0NCAgLyogU29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZCAqLworI2RlZmluZSBCU0RfRU9QTk9UU1VQUCAgICA0NSAgICAgLyogT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUgQlNEX0VQRk5PU1VQUE9SVCAgNDYgICAgIC8qIFByb3RvY29sIGZhbWlseSBub3Qgc3VwcG9ydGVkICovCisjZGVmaW5lIEJTRF9FQUZOT1NVUFBPUlQgIDQ3ICAgICAvKiBBZGRyZXNzIGZhbWlseSBub3Qgc3VwcG9ydGVkIGJ5IHByb3RvY29sIGZhbWlseSAqLworI2RlZmluZSBCU0RfRUFERFJJTlVTRSAgICA0OCAgICAgLyogQWRkcmVzcyBhbHJlYWR5IGluIHVzZSAqLworI2RlZmluZSBCU0RfRUFERFJOT1RBVkFJTCA0OSAgICAgLyogQ2FuJ3QgYXNzaWduIHJlcXVlc3RlZCBhZGRyZXNzICovCisjZGVmaW5lIEJTRF9FTkVURE9XTiAgICAgIDUwICAgICAvKiBOZXR3b3JrIGlzIGRvd24gKi8KKyNkZWZpbmUgQlNEX0VORVRVTlJFQUNIICAgNTEgICAgIC8qIE5ldHdvcmsgaXMgdW5yZWFjaGFibGUgKi8KKyNkZWZpbmUgQlNEX0VORVRSRVNFVCAgICAgNTIgICAgIC8qIE5ldHdvcmsgZHJvcHBlZCBjb25uZWN0aW9uIG9uIHJlc2V0ICovCisjZGVmaW5lIEJTRF9FQ09OTkFCT1JURUQgIDUzICAgICAvKiBTb2Z0d2FyZSBjYXVzZWQgY29ubmVjdGlvbiBhYm9ydCAqLworI2RlZmluZSBCU0RfRUNPTk5SRVNFVCAgICA1NCAgICAgLyogQ29ubmVjdGlvbiByZXNldCBieSBwZWVyICovCisjZGVmaW5lIEJTRF9FTk9CVUZTICAgICAgIDU1ICAgICAvKiBObyBidWZmZXIgc3BhY2UgYXZhaWxhYmxlICovCisjZGVmaW5lIEJTRF9FSVNDT05OICAgICAgIDU2ICAgICAvKiBTb2NrZXQgaXMgYWxyZWFkeSBjb25uZWN0ZWQgKi8KKyNkZWZpbmUgQlNEX0VOT1RDT05OICAgICAgNTcgICAgIC8qIFNvY2tldCBpcyBub3QgY29ubmVjdGVkICovCisjZGVmaW5lIEJTRF9FU0hVVERPV04gICAgIDU4ICAgICAvKiBDYW4ndCBzZW5kIGFmdGVyIHNvY2tldCBzaHV0ZG93biAqLworI2RlZmluZSBCU0RfRVRPT01BTllSRUZTICA1OSAgICAgLyogVG9vIG1hbnkgcmVmZXJlbmNlczogY2FuJ3Qgc3BsaWNlICovCisjZGVmaW5lIEJTRF9FVElNRURPVVQgICAgIDYwICAgICAvKiBPcGVyYXRpb24gdGltZWQgb3V0ICovCisjZGVmaW5lIEJTRF9FQ09OTlJFRlVTRUQgIDYxICAgICAvKiBDb25uZWN0aW9uIHJlZnVzZWQgKi8KKyNkZWZpbmUgQlNEX0VMT09QICAgICAgICAgNjIgICAgIC8qIFRvbyBtYW55IGxldmVscyBvZiBzeW1ib2xpYyBsaW5rcyAqLworI2RlZmluZSBCU0RfRU5BTUVUT09MT05HICA2MyAgICAgLyogRmlsZSBuYW1lIHRvbyBsb25nICovCisjZGVmaW5lIEJTRF9FSE9TVERPV04gICAgIDY0ICAgICAvKiBIb3N0IGlzIGRvd24gKi8KKyNkZWZpbmUgQlNEX0VIT1NUVU5SRUFDSCAgNjUgICAgIC8qIE5vIHJvdXRlIHRvIGhvc3QgKi8KKyNkZWZpbmUgQlNEX0VOT1RFTVBUWSAgICAgNjYgICAgIC8qIERpcmVjdG9yeSBub3QgZW1wdHkgKi8KKyNkZWZpbmUgQlNEX0VQUk9DTElNICAgICAgNjcgICAgIC8qIFRvbyBtYW55IHByb2Nlc3NlcyAqLworI2RlZmluZSBCU0RfRVVTRVJTICAgICAgICA2OCAgICAgLyogVG9vIG1hbnkgdXNlcnMgKi8KKyNkZWZpbmUgQlNEX0VEUVVPVCAgICAgICAgNjkgICAgIC8qIERpc2MgcXVvdGEgZXhjZWVkZWQgKi8KKyNkZWZpbmUgQlNEX0VTVEFMRSAgICAgICAgNzAgICAgIC8qIFN0YWxlIE5GUyBmaWxlIGhhbmRsZSAqLworI2RlZmluZSBCU0RfRVJFTU9URSAgICAgICA3MSAgICAgLyogVG9vIG1hbnkgbGV2ZWxzIG9mIHJlbW90ZSBpbiBwYXRoICovCisjZGVmaW5lIEJTRF9FQkFEUlBDICAgICAgIDcyICAgICAvKiBSUEMgc3RydWN0IGlzIGJhZCAqLworI2RlZmluZSBCU0RfRVJQQ01JU01BVENIICA3MyAgICAgLyogUlBDIHZlcnNpb24gd3JvbmcgKi8KKyNkZWZpbmUgQlNEX0VQUk9HVU5BVkFJTCAgNzQgICAgIC8qIFJQQyBwcm9nLiBub3QgYXZhaWwgKi8KKyNkZWZpbmUgQlNEX0VQUk9HTUlTTUFUQ0ggNzUgICAgIC8qIFByb2dyYW0gdmVyc2lvbiB3cm9uZyAqLworI2RlZmluZSBCU0RfRVBST0NVTkFWQUlMICA3NiAgICAgLyogQmFkIHByb2NlZHVyZSBmb3IgcHJvZ3JhbSAqLworI2RlZmluZSBCU0RfRU5PTENLICAgICAgICA3NyAgICAgLyogTm8gbG9ja3MgYXZhaWxhYmxlICovCisjZGVmaW5lIEJTRF9FTk9TWVMgICAgICAgIDc4ICAgICAvKiBGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQgKi8KKyNkZWZpbmUgQlNEX0VGVFlQRSAgICAgICAgNzkgICAgIC8qIEluYXBwcm9wcmlhdGUgZmlsZSB0eXBlIG9yIGZvcm1hdCAqLworI2RlZmluZSBCU0RfRUFVVEggICAgICAgICA4MCAgICAgLyogQXV0aGVudGljYXRpb24gZXJyb3IgKi8KKyNkZWZpbmUgQlNEX0VORUVEQVVUSCAgICAgODEgICAgIC8qIE5lZWQgYXV0aGVudGljYXRvciAqLworI2RlZmluZSBCU0RfRUxBU1QgICAgICAgICA4MSAgICAgLyogTXVzdCBiZSBlcXVhbCBsYXJnZXN0IGVycm5vICovCisKKyNlbmRpZiAvKiAhKF9TUEFSQ19CU0RFUlJOT19IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvYnRmaXh1cC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvYnRmaXh1cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4NGM5NmMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9idGZpeHVwLmgKQEAgLTAsMCArMSwyMDggQEAKKy8qICRJZDogYnRmaXh1cC5oLHYgMS40IDE5OTgvMDMvMDkgMTQ6MDQ6NDMgamogRXhwICQKKyAqICBhc20tc3BhcmMvYnRmaXh1cC5oOiAgICBNYWNyb3MgZm9yIGJvb3QgdGltZSBsaW5raW5nLgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTggSmFrdWIgSmVsaW5layAoampAc3Vuc2l0ZS5tZmYuY3VuaS5jeikKKyAqLworIAorI2lmbmRlZiBfU1BBUkNfQlRGSVhVUF9ICisjZGVmaW5lIF9TUEFSQ19CVEZJWFVQX0gKKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworI2lmZGVmIE1PRFVMRQorZXh0ZXJuIHVuc2lnbmVkIGludCBfX19pbGxlZ2FsX3VzZV9vZl9CVEZJWFVQX1NJTU0xM19pbl9tb2R1bGUodm9pZCk7CitleHRlcm4gdW5zaWduZWQgaW50IF9fX2lsbGVnYWxfdXNlX29mX0JURklYVVBfU0VUSElfaW5fbW9kdWxlKHZvaWQpOworZXh0ZXJuIHVuc2lnbmVkIGludCBfX19pbGxlZ2FsX3VzZV9vZl9CVEZJWFVQX0hBTEZfaW5fbW9kdWxlKHZvaWQpOworZXh0ZXJuIHVuc2lnbmVkIGludCBfX19pbGxlZ2FsX3VzZV9vZl9CVEZJWFVQX0lOVF9pbl9tb2R1bGUodm9pZCk7CisKKyNkZWZpbmUgQlRGSVhVUF9TSU1NMTMoX19uYW1lKSBfX19pbGxlZ2FsX3VzZV9vZl9CVEZJWFVQX1NJTU0xM19pbl9tb2R1bGUoKQorI2RlZmluZSBCVEZJWFVQX0hBTEYoX19uYW1lKSBfX19pbGxlZ2FsX3VzZV9vZl9CVEZJWFVQX0hBTEZfaW5fbW9kdWxlKCkKKyNkZWZpbmUgQlRGSVhVUF9TRVRISShfX25hbWUpIF9fX2lsbGVnYWxfdXNlX29mX0JURklYVVBfU0VUSElfaW5fbW9kdWxlKCkKKyNkZWZpbmUgQlRGSVhVUF9JTlQoX19uYW1lKSBfX19pbGxlZ2FsX3VzZV9vZl9CVEZJWFVQX0lOVF9pbl9tb2R1bGUoKQorI2RlZmluZSBCVEZJWFVQX0JMQUNLQk9YKF9fbmFtZSkgX19faWxsZWdhbF91c2Vfb2ZfQlRGSVhVUF9CTEFDS0JPWF9pbl9tb2R1bGUKKworI2Vsc2UKKworI2RlZmluZSBCVEZJWFVQX1NJTU0xMyhfX25hbWUpIF9fX3NmXyMjX19uYW1lKCkKKyNkZWZpbmUgQlRGSVhVUF9IQUxGKF9fbmFtZSkgX19fYWZfIyNfX25hbWUoKQorI2RlZmluZSBCVEZJWFVQX1NFVEhJKF9fbmFtZSkgX19faGZfIyNfX25hbWUoKQorI2RlZmluZSBCVEZJWFVQX0lOVChfX25hbWUpICgodW5zaWduZWQgaW50KSZfX19pXyMjX19uYW1lKQorLyogVGhpcyBtdXN0IGJlIHdyaXR0ZW4gaW4gYXNzZW1ibHkgYW5kIHByZXNlbnQgaW4gYSBzZXRoaSAqLworI2RlZmluZSBCVEZJWFVQX0JMQUNLQk9YKF9fbmFtZSkgX19fYl8jI19fbmFtZQorI2VuZGlmIC8qIE1PRFVMRSAqLworCisvKiBGaXh1cCBjYWxsIHh4ICovCisKKyNkZWZpbmUgQlRGSVhVUERFRl9DQUxMKF9fdHlwZSwgX19uYW1lLCBfX2FyZ3MuLi4pIAkJCQkJXAorCWV4dGVybiBfX3R5cGUgX19fZl8jI19fbmFtZShfX2FyZ3MpOwkJCQkJCVwKKwlleHRlcm4gdW5zaWduZWQgX19fZnNfIyNfX25hbWVbM107CisjZGVmaW5lIEJURklYVVBERUZfQ0FMTF9DT05TVChfX3R5cGUsIF9fbmFtZSwgX19hcmdzLi4uKSAJCQkJXAorCWV4dGVybiBfX3R5cGUgX19fZl8jI19fbmFtZShfX2FyZ3MpIF9fYXR0cmlidXRlX2NvbnN0X187CQkJXAorCWV4dGVybiB1bnNpZ25lZCBfX19mc18jI19fbmFtZVszXTsKKyNkZWZpbmUgQlRGSVhVUF9DQUxMKF9fbmFtZSkgX19fZl8jI19fbmFtZQorCisjZGVmaW5lIEJURklYVVBERUZfQkxBQ0tCT1goX19uYW1lKQkJCQkJCQlcCisJZXh0ZXJuIHVuc2lnbmVkIF9fX2JzXyMjX19uYW1lWzJdOworCisvKiBQdXQgYm90dG9tIDEzYml0cyBpbnRvIHNvbWUgcmVnaXN0ZXIgdmFyaWFibGUgKi8KKworI2RlZmluZSBCVEZJWFVQREVGX1NJTU0xMyhfX25hbWUpCQkJCQkJCVwKKwlleHRlcm4gdW5zaWduZWQgaW50IF9fX3NmXyMjX19uYW1lKHZvaWQpIF9fYXR0cmlidXRlX2NvbnN0X187CQlcCisJZXh0ZXJuIHVuc2lnbmVkIF9fX3NzXyMjX19uYW1lWzJdOwkJCQkJCVwKKwlleHRlcm4gX19pbmxpbmVfXyB1bnNpZ25lZCBpbnQgX19fc2ZfIyNfX25hbWUodm9pZCkgewkJCQlcCisJCXVuc2lnbmVkIGludCByZXQ7CQkJCQkJCVwKKwkJX19hc21fXyAoIm9yICUlZzAsIF9fX3NfIiAjX19uYW1lICIsICUwIiA6ICI9ciIocmV0KSk7CQkJXAorCQlyZXR1cm4gcmV0OwkJCQkJCQkJXAorCX0KKyNkZWZpbmUgQlRGSVhVUERFRl9TSU1NMTNfSU5JVChfX25hbWUsX192YWwpCQkJCQkJXAorCWV4dGVybiB1bnNpZ25lZCBpbnQgX19fc2ZfIyNfX25hbWUodm9pZCkgX19hdHRyaWJ1dGVfY29uc3RfXzsJCVwKKwlleHRlcm4gdW5zaWduZWQgX19fc3NfIyNfX25hbWVbMl07CQkJCQkJXAorCWV4dGVybiBfX2lubGluZV9fIHVuc2lnbmVkIGludCBfX19zZl8jI19fbmFtZSh2b2lkKSB7CQkJCVwKKwkJdW5zaWduZWQgaW50IHJldDsJCQkJCQkJXAorCQlfX2FzbV9fICgib3IgJSVnMCwgX19fc18iICNfX25hbWUgIl9fYnRzZXRfIiAjX192YWwgIiwgJTAiIDogIj1yIihyZXQpKTtcCisJCXJldHVybiByZXQ7CQkJCQkJCQlcCisJfQorCisvKiBQdXQgZWl0aGVyIGJvdHRvbSAxMyBiaXRzLCBvciB1cHBlciAyMiBiaXRzIGludG8gc29tZSByZWdpc3RlciB2YXJpYWJsZQorICogKGRlcGVuZGluZyBvbiB0aGUgdmFsdWUsIHRoaXMgd2lsbCBsZWFkIGludG8gc2V0aGkgRklYLCByZWc7IG9yCisgKiBtb3YgRklYLCByZWc7ICkKKyAqLworCisjZGVmaW5lIEJURklYVVBERUZfSEFMRihfX25hbWUpCQkJCQkJCQlcCisJZXh0ZXJuIHVuc2lnbmVkIGludCBfX19hZl8jI19fbmFtZSh2b2lkKSBfX2F0dHJpYnV0ZV9jb25zdF9fOwkJXAorCWV4dGVybiB1bnNpZ25lZCBfX19hc18jI19fbmFtZVsyXTsJCQkJCQlcCisJZXh0ZXJuIF9faW5saW5lX18gdW5zaWduZWQgaW50IF9fX2FmXyMjX19uYW1lKHZvaWQpIHsJCQkJXAorCQl1bnNpZ25lZCBpbnQgcmV0OwkJCQkJCQlcCisJCV9fYXNtX18gKCJvciAlJWcwLCBfX19hXyIgI19fbmFtZSAiLCAlMCIgOiAiPXIiKHJldCkpOwkJCVwKKwkJcmV0dXJuIHJldDsJCQkJCQkJCVwKKwl9CisjZGVmaW5lIEJURklYVVBERUZfSEFMRl9JTklUKF9fbmFtZSxfX3ZhbCkJCQkJCQlcCisJZXh0ZXJuIHVuc2lnbmVkIGludCBfX19hZl8jI19fbmFtZSh2b2lkKSBfX2F0dHJpYnV0ZV9jb25zdF9fOwkJXAorCWV4dGVybiB1bnNpZ25lZCBfX19hc18jI19fbmFtZVsyXTsJCQkJCQlcCisJZXh0ZXJuIF9faW5saW5lX18gdW5zaWduZWQgaW50IF9fX2FmXyMjX19uYW1lKHZvaWQpIHsJCQkJXAorCQl1bnNpZ25lZCBpbnQgcmV0OwkJCQkJCQlcCisJCV9fYXNtX18gKCJvciAlJWcwLCBfX19hXyIgI19fbmFtZSAiX19idHNldF8iICNfX3ZhbCAiLCAlMCIgOiAiPXIiKHJldCkpO1wKKwkJcmV0dXJuIHJldDsJCQkJCQkJCVwKKwl9CisKKy8qIFB1dCB1cHBlciAyMiBiaXRzIGludG8gc29tZSByZWdpc3RlciB2YXJpYWJsZSAqLworCisjZGVmaW5lIEJURklYVVBERUZfU0VUSEkoX19uYW1lKQkJCQkJCQlcCisJZXh0ZXJuIHVuc2lnbmVkIGludCBfX19oZl8jI19fbmFtZSh2b2lkKSBfX2F0dHJpYnV0ZV9jb25zdF9fOwkJXAorCWV4dGVybiB1bnNpZ25lZCBfX19oc18jI19fbmFtZVsyXTsJCQkJCQlcCisJZXh0ZXJuIF9faW5saW5lX18gdW5zaWduZWQgaW50IF9fX2hmXyMjX19uYW1lKHZvaWQpIHsJCQkJXAorCQl1bnNpZ25lZCBpbnQgcmV0OwkJCQkJCQlcCisJCV9fYXNtX18gKCJzZXRoaSAlJWhpKF9fX2hfIiAjX19uYW1lICIpLCAlMCIgOiAiPXIiKHJldCkpOwkJXAorCQlyZXR1cm4gcmV0OwkJCQkJCQkJXAorCX0KKyNkZWZpbmUgQlRGSVhVUERFRl9TRVRISV9JTklUKF9fbmFtZSxfX3ZhbCkJCQkJCQlcCisJZXh0ZXJuIHVuc2lnbmVkIGludCBfX19oZl8jI19fbmFtZSh2b2lkKSBfX2F0dHJpYnV0ZV9jb25zdF9fOwkJXAorCWV4dGVybiB1bnNpZ25lZCBfX19oc18jI19fbmFtZVsyXTsJCQkJCQlcCisJZXh0ZXJuIF9faW5saW5lX18gdW5zaWduZWQgaW50IF9fX2hmXyMjX19uYW1lKHZvaWQpIHsJCQkJXAorCQl1bnNpZ25lZCBpbnQgcmV0OwkJCQkJCQlcCisJCV9fYXNtX18gKCJzZXRoaSAlJWhpKF9fX2hfIiAjX19uYW1lICJfX2J0c2V0XyIgI19fdmFsICIpLCAlMCIgOiAJXAorCQkJICI9ciIocmV0KSk7CQkJCQkJCVwKKwkJcmV0dXJuIHJldDsJCQkJCQkJCVwKKwl9CisKKy8qIFB1dCBhIGZ1bGwgMzJiaXQgaW50ZWdlciBpbnRvIHNvbWUgcmVnaXN0ZXIgdmFyaWFibGUgKi8KKworI2RlZmluZSBCVEZJWFVQREVGX0lOVChfX25hbWUpCQkJCQkJCQlcCisJZXh0ZXJuIHVuc2lnbmVkIGNoYXIgX19faV8jI19fbmFtZTsJCQkJCQlcCisJZXh0ZXJuIHVuc2lnbmVkIF9fX2lzXyMjX19uYW1lWzJdOworCisjZGVmaW5lIEJURklYVVBDQUxMX05PUk0JMHgwMDAwMDAwMAkJCS8qIEFsd2F5cyBjYWxsICovCisjZGVmaW5lIEJURklYVVBDQUxMX05PUAkJMHgwMTAwMDAwMAkJCS8qIFBvc3NpYmx5IG9wdGltaXplIHRvIG5vcCAqLworI2RlZmluZSBCVEZJWFVQQ0FMTF9SRVRJTlQoaSkJKDB4OTAxMDIwMDB8KChpKSAmIDB4MWZmZikpCS8qIFBvc3NpYmx5IG9wdGltaXplIHRvIG1vdiBpLCAlbzAgKi8KKyNkZWZpbmUgQlRGSVhVUENBTExfT1JJTlQoaSkJKDB4OTAxMjIwMDB8KChpKSAmIDB4MWZmZikpCS8qIFBvc3NpYmx5IG9wdGltaXplIHRvIG9yICVvMCwgaSwgJW8wICovCisjZGVmaW5lIEJURklYVVBDQUxMX1JFVE8wCTB4MDEwMDAwMDAJCQkvKiBSZXR1cm4gZmlyc3QgcGFyYW1ldGVyLCBhY3R1YWxseSBhIG5vcCAqLworI2RlZmluZSBCVEZJWFVQQ0FMTF9BTkROSU5UKGkpCSgweDkwMmEyMDAwfCgoaSkgJiAweDFmZmYpKQkvKiBQb3NzaWJseSBvcHRpbWl6ZSB0byBhbmRuICVvMCwgaSwgJW8wICovCisjZGVmaW5lIEJURklYVVBDQUxMX1NXQVBPME8xCTB4ZDI3YTAwMDAJCQkvKiBQb3NzaWJseSBvcHRpbWl6ZSB0byBzd2FwIFslbzBdLCVvMSAqLworI2RlZmluZSBCVEZJWFVQQ0FMTF9TV0FQTzBHMAkweGMwN2EwMDAwCQkJLyogUG9zc2libHkgb3B0aW1pemUgdG8gc3dhcCBbJW8wXSwlZzAgKi8KKyNkZWZpbmUgQlRGSVhVUENBTExfU1dBUEcxRzIJMHhjNDc4NDAwMAkJCS8qIFBvc3NpYmx5IG9wdGltaXplIHRvIHN3YXAgWyVnMV0sJWcyICovCisjZGVmaW5lIEJURklYVVBDQUxMX1NURzBPMAkweGMwMjIwMDAwCQkJLyogUG9zc2libHkgb3B0aW1pemUgdG8gc3QgJWcwLFslbzBdICovCisjZGVmaW5lIEJURklYVVBDQUxMX1NUTzFPMAkweGQyMjIwMDAwCQkJLyogUG9zc2libHkgb3B0aW1pemUgdG8gc3QgJW8xLFslbzBdICovCisKKyNkZWZpbmUgQlRGSVhVUFNFVF9DQUxMKF9fbmFtZSwgX19hZGRyLCBfX2luc24pCQkJCQkJXAorCWRvIHsJCQkJCQkJCQkJXAorCQlfX19mc18jI19fbmFtZVswXSB8PSAxOwkJCQkJCQlcCisJCV9fX2ZzXyMjX19uYW1lWzFdID0gKHVuc2lnbmVkIGxvbmcpX19hZGRyOwkJCQlcCisJCV9fX2ZzXyMjX19uYW1lWzJdID0gX19pbnNuOwkJCQkJCVwKKwl9IHdoaWxlICgwKQorCQorI2RlZmluZSBCVEZJWFVQU0VUX0JMQUNLQk9YKF9fbmFtZSwgX19mdW5jKQkJCQkJCVwKKwlkbyB7CQkJCQkJCQkJCVwKKwkJX19fYnNfIyNfX25hbWVbMF0gfD0gMTsJCQkJCQkJXAorCQlfX19ic18jI19fbmFtZVsxXSA9ICh1bnNpZ25lZCBsb25nKV9fZnVuYzsJCQkJXAorCX0gd2hpbGUgKDApCisJCisjZGVmaW5lIEJURklYVVBDT1BZX0NBTEwoX19uYW1lLCBfX2Zyb20pCQkJCQkJXAorCWRvIHsJCQkJCQkJCQkJXAorCQlfX19mc18jI19fbmFtZVswXSB8PSAxOwkJCQkJCQlcCisJCV9fX2ZzXyMjX19uYW1lWzFdID0gX19fZnNfIyNfX2Zyb21bMV07CQkJCQlcCisJCV9fX2ZzXyMjX19uYW1lWzJdID0gX19fZnNfIyNfX2Zyb21bMl07CQkJCQlcCisJfSB3aGlsZSAoMCkKKwkJCisjZGVmaW5lIEJURklYVVBTRVRfU0lNTTEzKF9fbmFtZSwgX192YWwpCQkJCQkJXAorCWRvIHsJCQkJCQkJCQkJXAorCQlfX19zc18jI19fbmFtZVswXSB8PSAxOwkJCQkJCQlcCisJCV9fX3NzXyMjX19uYW1lWzFdID0gKHVuc2lnbmVkKV9fdmFsOwkJCQkJXAorCX0gd2hpbGUgKDApCisJCisjZGVmaW5lIEJURklYVVBDT1BZX1NJTU0xMyhfX25hbWUsIF9fZnJvbSkJCQkJCQlcCisJZG8gewkJCQkJCQkJCQlcCisJCV9fX3NzXyMjX19uYW1lWzBdIHw9IDE7CQkJCQkJCVwKKwkJX19fc3NfIyNfX25hbWVbMV0gPSBfX19zc18jI19fZnJvbVsxXTsJCQkJCVwKKwl9IHdoaWxlICgwKQorCQkKKyNkZWZpbmUgQlRGSVhVUFNFVF9IQUxGKF9fbmFtZSwgX192YWwpCQkJCQkJCVwKKwlkbyB7CQkJCQkJCQkJCVwKKwkJX19fYXNfIyNfX25hbWVbMF0gfD0gMTsJCQkJCQkJXAorCQlfX19hc18jI19fbmFtZVsxXSA9ICh1bnNpZ25lZClfX3ZhbDsJCQkJCVwKKwl9IHdoaWxlICgwKQorCQorI2RlZmluZSBCVEZJWFVQQ09QWV9IQUxGKF9fbmFtZSwgX19mcm9tKQkJCQkJCVwKKwlkbyB7CQkJCQkJCQkJCVwKKwkJX19fYXNfIyNfX25hbWVbMF0gfD0gMTsJCQkJCQkJXAorCQlfX19hc18jI19fbmFtZVsxXSA9IF9fX2FzXyMjX19mcm9tWzFdOwkJCQkJXAorCX0gd2hpbGUgKDApCisJCQorI2RlZmluZSBCVEZJWFVQU0VUX1NFVEhJKF9fbmFtZSwgX192YWwpCQkJCQkJCVwKKwlkbyB7CQkJCQkJCQkJCVwKKwkJX19faHNfIyNfX25hbWVbMF0gfD0gMTsJCQkJCQkJXAorCQlfX19oc18jI19fbmFtZVsxXSA9ICh1bnNpZ25lZClfX3ZhbDsJCQkJCVwKKwl9IHdoaWxlICgwKQorCQorI2RlZmluZSBCVEZJWFVQQ09QWV9TRVRISShfX25hbWUsIF9fZnJvbSkJCQkJCQlcCisJZG8gewkJCQkJCQkJCQlcCisJCV9fX2hzXyMjX19uYW1lWzBdIHw9IDE7CQkJCQkJCVwKKwkJX19faHNfIyNfX25hbWVbMV0gPSBfX19oc18jI19fZnJvbVsxXTsJCQkJCVwKKwl9IHdoaWxlICgwKQorCQkKKyNkZWZpbmUgQlRGSVhVUFNFVF9JTlQoX19uYW1lLCBfX3ZhbCkJCQkJCQkJXAorCWRvIHsJCQkJCQkJCQkJXAorCQlfX19pc18jI19fbmFtZVswXSB8PSAxOwkJCQkJCQlcCisJCV9fX2lzXyMjX19uYW1lWzFdID0gKHVuc2lnbmVkKV9fdmFsOwkJCQkJXAorCX0gd2hpbGUgKDApCisJCisjZGVmaW5lIEJURklYVVBDT1BZX0lOVChfX25hbWUsIF9fZnJvbSkJCQkJCQkJXAorCWRvIHsJCQkJCQkJCQkJXAorCQlfX19pc18jI19fbmFtZVswXSB8PSAxOwkJCQkJCQlcCisJCV9fX2lzXyMjX19uYW1lWzFdID0gX19faXNfIyNfX2Zyb21bMV07CQkJCQlcCisJfSB3aGlsZSAoMCkKKwkKKyNkZWZpbmUgQlRGSVhVUFZBTF9DQUxMKF9fbmFtZSkJCQkJCQkJCVwKKwkoKHVuc2lnbmVkIGxvbmcpX19fZnNfIyNfX25hbWVbMV0pCisJCitleHRlcm4gdm9pZCBidGZpeHVwKHZvaWQpOworCisjZWxzZSAvKiBfX0FTU0VNQkxZX18gKi8KKworI2RlZmluZSBCVEZJWFVQX1NFVEhJKF9fbmFtZSkJCQklaGkoX19faF8gIyMgX19uYW1lKQorI2RlZmluZSBCVEZJWFVQX1NFVEhJX0lOSVQoX19uYW1lLF9fdmFsKQklaGkoX19faF8gIyMgX19uYW1lICMjIF9fYnRzZXRfICMjIF9fdmFsKQorCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisJCisjZW5kaWYgLyogIShfU1BBUkNfQlRGSVhVUF9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvYnVnLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9idWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDMwYTY3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvYnVnLmgKQEAgLTAsMCArMSwzMSBAQAorI2lmbmRlZiBfU1BBUkNfQlVHX0gKKyNkZWZpbmUgX1NQQVJDX0JVR19ICisKKy8qIE9ubHkgdXNlIHRoZSBpbmxpbmUgYXNtIHVudGlsIGEgZ2NjIHJlbGVhc2UgdGhhdCBjYW4gaGFuZGxlIF9fYnVpbHRpbl90cmFwCisgKiAtcm9iIDIwMDMtMDYtMjUKKyAqCisgKiBnY2MtMy4zLjEgYW5kIGxhdGVyIHdpbGwgYmUgT0sgLURhdmVNCisgKi8KKyNpZiAoX19HTlVDX18gPiAzKSB8fCBcCisgICAgKF9fR05VQ19fID09IDMgJiYgX19HTlVDX01JTk9SX18gPiAzKSB8fCBcCisgICAgKF9fR05VQ19fID09IDMgJiYgX19HTlVDX01JTk9SX18gPT0gMyAmJiBfX0dOVUNfUEFUQ0hMRVZFTF9fID49IDQpCisjZGVmaW5lIF9fYnVnX3RyYXAoKQkJX19idWlsdGluX3RyYXAoKQorI2Vsc2UKKyNkZWZpbmUgX19idWdfdHJhcCgpCQkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJ0IDB4NVxuXHQiIDogOiApCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19ERUJVR19CVUdWRVJCT1NFCitleHRlcm4gdm9pZCBkb19CVUcoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUpOworI2RlZmluZSBCVUcoKSBkbyB7CQkJCQlcCisJZG9fQlVHKF9fRklMRV9fLCBfX0xJTkVfXyk7CQkJXAorCV9fYnVnX3RyYXAoKTsJCQkJXAorfSB3aGlsZSAoMCkKKyNlbHNlCisjZGVmaW5lIEJVRygpCQlfX2J1Z190cmFwKCkKKyNlbmRpZgorCisjZGVmaW5lIEhBVkVfQVJDSF9CVUcKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9idWcuaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9idWdzLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9idWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY1MmY4OQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL2J1Z3MuaApAQCAtMCwwICsxLDE3IEBACisvKiAgJElkOiBidWdzLmgsdiAxLjEgMTk5Ni8xMi8yNiAxMzoyNToyMCBkYXZlbSBFeHAgJAorICogIGluY2x1ZGUvYXNtLXNwYXJjL2J1Z3MuaDogIFNwYXJjIHByb2JlcyBmb3IgdmFyaW91cyBidWdzLgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTYgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQorICovCisKKyNpbmNsdWRlIDxhc20vY3B1ZGF0YS5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCitleHRlcm4gdW5zaWduZWQgbG9uZyBsb29wc19wZXJfamlmZnk7CisKK3N0YXRpYyB2b2lkIGNoZWNrX2J1Z3Modm9pZCkKK3sKKyNpZm5kZWYgQ09ORklHX1NNUAorCWNwdV9kYXRhKDApLnVkZWxheV92YWwgPSBsb29wc19wZXJfamlmZnk7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2J5dGVvcmRlci5oIGIvaW5jbHVkZS9hc20tc3BhcmMvYnl0ZW9yZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI5NDlhZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL2J5dGVvcmRlci5oCkBAIC0wLDAgKzEsMTQgQEAKKy8qICRJZDogYnl0ZW9yZGVyLmgsdiAxLjE1IDE5OTcvMTIvMTYgMTk6MjA6NDQgZGF2ZW0gRXhwICQgKi8KKyNpZm5kZWYgX1NQQVJDX0JZVEVPUkRFUl9ICisjZGVmaW5lIF9TUEFSQ19CWVRFT1JERVJfSAorCisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAhZGVmaW5lZChfX1NUUklDVF9BTlNJX18pIHx8IGRlZmluZWQoX19LRVJORUxfXykKKyMgIGRlZmluZSBfX0JZVEVPUkRFUl9IQVNfVTY0X18KKyMgIGRlZmluZSBfX1NXQUJfNjRfVEhSVV8zMl9fCisjZW5kaWYKKworI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9iaWdfZW5kaWFuLmg+CisKKyNlbmRpZiAvKiBfU1BBUkNfQllURU9SREVSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2NhY2hlLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9jYWNoZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2MzE2ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9jYWNoZS5oCkBAIC0wLDAgKzEsMTMwIEBACisvKiAkSWQ6IGNhY2hlLmgsdiAxLjkgMTk5OS8wOC8xNCAwMzo1MTo1OCBhbnRvbiBFeHAgJAorICogY2FjaGUuaDogIENhY2hlIHNwZWNpZmljIGNvZGUgZm9yIHRoZSBTcGFyYy4gIFRoZXNlIGluY2x1ZGUgZmx1c2hpbmcKKyAqICAgICAgICAgICBhbmQgZGlyZWN0IHRhZy9kYXRhIGxpbmUgYWNjZXNzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NSBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCisgKi8KKworI2lmbmRlZiBfU1BBUkNfQ0FDSEVfSAorI2RlZmluZSBfU1BBUkNfQ0FDSEVfSAorCisjaW5jbHVkZSA8YXNtL2FzaS5oPgorCisjZGVmaW5lIEwxX0NBQ0hFX1NISUZUIDUKKyNkZWZpbmUgTDFfQ0FDSEVfQllURVMgMzIKKyNkZWZpbmUgTDFfQ0FDSEVfQUxJR04oeCkgKCgoKHgpKyhMMV9DQUNIRV9CWVRFUy0xKSkmfihMMV9DQUNIRV9CWVRFUy0xKSkpCisjZGVmaW5lIEwxX0NBQ0hFX1NISUZUX01BWCA1CS8qIGxhcmdlc3QgTDEgd2hpY2ggdGhpcyBhcmNoIHN1cHBvcnRzICovCisKKyNkZWZpbmUgU01QX0NBQ0hFX0JZVEVTIDMyCisKKy8qIERpcmVjdCBhY2Nlc3MgdG8gdGhlIGluc3RydWN0aW9uIGNhY2hlIGlzIHByb3ZpZGVkIHRocm91Z2ggYW5kCisgKiBhbHRlcm5hdGUgYWRkcmVzcyBzcGFjZS4gIFRoZSBJREMgYml0IG11c3QgYmUgb2ZmIGluIHRoZSBJQ0NSIG9uCisgKiBIeXBlclNwYXJjcyBmb3IgdGhlc2UgYWNjZXNzZXMgdG8gd29yay4gIFRoZSBjb2RlIGJlbG93IGRvZXMgbm90IGRvCisgKiBhbnkgY2hlY2tpbmcsIHRoZSBjYWxsZXIgbXVzdCBkbyBzby4gIFRoZXNlIHJvdXRpbmVzIGFyZSBmb3IKKyAqIGRpYWdub3N0aWNzIG9ubHksIGJ1dCBjb3VsZCBlbmQgdXAgYmVpbmcgdXNlZnVsLiAgVXNlIHdpdGggY2FyZS4KKyAqIEFsc28sIHlvdSBhcmUgYXNraW5nIGZvciB0cm91YmxlIGlmIHlvdSBleGVjdXRlIHRoZXNlIGluIG9uZSBvZiB0aGUKKyAqIHRocmVlIGluc3RydWN0aW9ucyBmb2xsb3dpbmcgYSAlYXNyLyVwc3IgYWNjZXNzIG9yIG1vZGlmaWNhdGlvbi4KKyAqLworCisvKiBGaXJzdCwgY2FjaGUtdGFnIGFjY2Vzcy4gKi8KK2V4dGVybiBfX2lubGluZV9fIHVuc2lnbmVkIGludCBnZXRfaWNhY2hlX3RhZyhpbnQgc2V0bnVtLCBpbnQgdGFnbnVtKQoreworCXVuc2lnbmVkIGludCB2YWRkciwgcmV0dmFsOworCisJdmFkZHIgPSAoKHNldG51bSYxKSA8PCAxMikgfCAoKHRhZ251bSYweDdmKSA8PCA1KTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibGRhIFslMV0gJTIsICUwXG5cdCIgOgorCQkJICAgICAiPXIiIChyZXR2YWwpIDoKKwkJCSAgICAgInIiICh2YWRkciksICJpIiAoQVNJX01fVFhUQ19UQUcpKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitleHRlcm4gX19pbmxpbmVfXyB2b2lkIHB1dF9pY2FjaGVfdGFnKGludCBzZXRudW0sIGludCB0YWdudW0sIHVuc2lnbmVkIGludCBlbnRyeSkKK3sKKwl1bnNpZ25lZCBpbnQgdmFkZHI7CisKKwl2YWRkciA9ICgoc2V0bnVtJjEpIDw8IDEyKSB8ICgodGFnbnVtJjB4N2YpIDw8IDUpOworCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdGEgJTAsIFslMV0gJTJcblx0IiA6IDoKKwkJCSAgICAgInIiIChlbnRyeSksICJyIiAodmFkZHIpLCAiaSIgKEFTSV9NX1RYVENfVEFHKSA6CisJCQkgICAgICJtZW1vcnkiKTsKK30KKworLyogU2Vjb25kIGNhY2hlLWRhdGEgYWNjZXNzLiAgVGhlIGRhdGEgaXMgcmV0dXJuZWQgdHdvLTMyYml0IHF1YW50aXRpZXMKKyAqIGF0IGEgdGltZS4KKyAqLworZXh0ZXJuIF9faW5saW5lX18gdm9pZCBnZXRfaWNhY2hlX2RhdGEoaW50IHNldG51bSwgaW50IHRhZ251bSwgaW50IHN1YmJsb2NrLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEpCit7CisJdW5zaWduZWQgaW50IHZhbHVlMSwgdmFsdWUyLCB2YWRkcjsKKworCXZhZGRyID0gKChzZXRudW0mMHgxKSA8PCAxMikgfCAoKHRhZ251bSYweDdmKSA8PCA1KSB8CisJCSgoc3ViYmxvY2smMHgzKSA8PCAzKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibGRkYSBbJTJdICUzLCAlJWcyXG5cdCIKKwkJCSAgICAgIm9yICUlZzAsICUlZzIsICUwXG5cdCIKKwkJCSAgICAgIm9yICUlZzAsICUlZzMsICUxXG5cdCIgOgorCQkJICAgICAiPXIiICh2YWx1ZTEpLCAiPXIiICh2YWx1ZTIpIDoKKwkJCSAgICAgInIiICh2YWRkciksICJpIiAoQVNJX01fVFhUQ19EQVRBKSA6CisJCQkgICAgICJnMiIsICJnMyIpOworCWRhdGFbMF0gPSB2YWx1ZTE7IGRhdGFbMV0gPSB2YWx1ZTI7Cit9CisKK2V4dGVybiBfX2lubGluZV9fIHZvaWQgcHV0X2ljYWNoZV9kYXRhKGludCBzZXRudW0sIGludCB0YWdudW0sIGludCBzdWJibG9jaywKKwkJCQkgICAgICAgdW5zaWduZWQgaW50ICpkYXRhKQoreworCXVuc2lnbmVkIGludCB2YWx1ZTEsIHZhbHVlMiwgdmFkZHI7CisKKwl2YWRkciA9ICgoc2V0bnVtJjB4MSkgPDwgMTIpIHwgKCh0YWdudW0mMHg3ZikgPDwgNSkgfAorCQkoKHN1YmJsb2NrJjB4MykgPDwgMyk7CisJdmFsdWUxID0gZGF0YVswXTsgdmFsdWUyID0gZGF0YVsxXTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygib3IgJSVnMCwgJTAsICUlZzJcblx0IgorCQkJICAgICAib3IgJSVnMCwgJTEsICUlZzNcblx0IgorCQkJICAgICAic3RkYSAlJWcyLCBbJTJdICUzXG5cdCIgOiA6CisJCQkgICAgICJyIiAodmFsdWUxKSwgInIiICh2YWx1ZTIpLCAKKwkJCSAgICAgInIiICh2YWRkciksICJpIiAoQVNJX01fVFhUQ19EQVRBKSA6CisJCQkgICAgICJnMiIsICJnMyIsICJtZW1vcnkiIC8qIG5vIGpva2UgKi8pOworfQorCisvKiBEaWZmZXJlbnQgdHlwZXMgb2YgZmx1c2hlcyB3aXRoIHRoZSBJQ0FDSEUuICBTb21lIG9mIHRoZSBmbHVzaGVzCisgKiBhZmZlY3QgYm90aCB0aGUgSUNBQ0hFIGFuZCB0aGUgZXh0ZXJuYWwgY2FjaGUuICBPdGhlcnMgb25seSBjbGVhcgorICogdGhlIElDQUNIRSBlbnRyaWVzIG9uIHRoZSBjcHUgaXRzZWxmLiAgVjgncyAobW9zdCkgYWxsb3cKKyAqIGdyYW51bGFyaXR5IG9mIGZsdXNoZXMgb24gdGhlIHBhY2tldCAoZWxlbWVudCBpbiBsaW5lKSwgd2hvbGUgbGluZSwKKyAqIGFuZCBlbnRpcmUgY2FjaGUgKGllLiBhbGwgbGluZXMpIGxldmVsLiAgVGhlIElDQUNIRSBvbmx5IGZsdXNoZXMgYXJlCisgKiBST1NTIEh5cGVyU3BhcmMgc3BlY2lmaWMgYW5kIGFyZSBpbiByb3NzLmgKKyAqLworCisvKiBGbHVzaGVzIHdoaWNoIGNsZWFyIG91dCBib3RoIHRoZSBvbi1jaGlwIGFuZCBleHRlcm5hbCBjYWNoZXMgKi8KK2V4dGVybiBfX2lubGluZV9fIHZvaWQgZmx1c2hfZWlfcGFnZSh1bnNpZ25lZCBpbnQgYWRkcikKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RhICUlZzAsIFslMF0gJTFcblx0IiA6IDoKKwkJCSAgICAgInIiIChhZGRyKSwgImkiIChBU0lfTV9GTFVTSF9QQUdFKSA6CisJCQkgICAgICJtZW1vcnkiKTsKK30KKworZXh0ZXJuIF9faW5saW5lX18gdm9pZCBmbHVzaF9laV9zZWcodW5zaWduZWQgaW50IGFkZHIpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0YSAlJWcwLCBbJTBdICUxXG5cdCIgOiA6CisJCQkgICAgICJyIiAoYWRkciksICJpIiAoQVNJX01fRkxVU0hfU0VHKSA6CisJCQkgICAgICJtZW1vcnkiKTsKK30KKworZXh0ZXJuIF9faW5saW5lX18gdm9pZCBmbHVzaF9laV9yZWdpb24odW5zaWduZWQgaW50IGFkZHIpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0YSAlJWcwLCBbJTBdICUxXG5cdCIgOiA6CisJCQkgICAgICJyIiAoYWRkciksICJpIiAoQVNJX01fRkxVU0hfUkVHSU9OKSA6CisJCQkgICAgICJtZW1vcnkiKTsKK30KKworZXh0ZXJuIF9faW5saW5lX18gdm9pZCBmbHVzaF9laV9jdHgodW5zaWduZWQgaW50IGFkZHIpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0YSAlJWcwLCBbJTBdICUxXG5cdCIgOiA6CisJCQkgICAgICJyIiAoYWRkciksICJpIiAoQVNJX01fRkxVU0hfQ1RYKSA6CisJCQkgICAgICJtZW1vcnkiKTsKK30KKworZXh0ZXJuIF9faW5saW5lX18gdm9pZCBmbHVzaF9laV91c2VyKHVuc2lnbmVkIGludCBhZGRyKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdGEgJSVnMCwgWyUwXSAlMVxuXHQiIDogOgorCQkJICAgICAiciIgKGFkZHIpLCAiaSIgKEFTSV9NX0ZMVVNIX1VTRVIpIDoKKwkJCSAgICAgIm1lbW9yeSIpOworfQorCisjZW5kaWYgLyogIShfU1BBUkNfQ0FDSEVfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2NhY2hlZmx1c2guaCBiL2luY2x1ZGUvYXNtLXNwYXJjL2NhY2hlZmx1c2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTAxMjE3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvY2FjaGVmbHVzaC5oCkBAIC0wLDAgKzEsODUgQEAKKyNpZm5kZWYgX1NQQVJDX0NBQ0hFRkxVU0hfSAorI2RlZmluZSBfU1BBUkNfQ0FDSEVGTFVTSF9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgkJLyogQ29tbW9uIGZvciBvdGhlciBpbmNsdWRlcyAqLworLy8gI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPiBmcm9tIHBnYWxsb2MuaAorLy8gI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+ICBmcm9tIHBnYWxsb2MuaAorCisvLyAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vYnRmaXh1cC5oPgorCisvKgorICogRmluZSBncmFpbmVkIGNhY2hlIGZsdXNoaW5nLgorICovCisjaWZkZWYgQ09ORklHX1NNUAorCitCVEZJWFVQREVGX0NBTEwodm9pZCwgbG9jYWxfZmx1c2hfY2FjaGVfYWxsLCB2b2lkKQorQlRGSVhVUERFRl9DQUxMKHZvaWQsIGxvY2FsX2ZsdXNoX2NhY2hlX21tLCBzdHJ1Y3QgbW1fc3RydWN0ICopCitCVEZJWFVQREVGX0NBTEwodm9pZCwgbG9jYWxfZmx1c2hfY2FjaGVfcmFuZ2UsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKQorQlRGSVhVUERFRl9DQUxMKHZvaWQsIGxvY2FsX2ZsdXNoX2NhY2hlX3BhZ2UsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nKQorCisjZGVmaW5lIGxvY2FsX2ZsdXNoX2NhY2hlX2FsbCgpIEJURklYVVBfQ0FMTChsb2NhbF9mbHVzaF9jYWNoZV9hbGwpKCkKKyNkZWZpbmUgbG9jYWxfZmx1c2hfY2FjaGVfbW0obW0pIEJURklYVVBfQ0FMTChsb2NhbF9mbHVzaF9jYWNoZV9tbSkobW0pCisjZGVmaW5lIGxvY2FsX2ZsdXNoX2NhY2hlX3JhbmdlKHZtYSxzdGFydCxlbmQpIEJURklYVVBfQ0FMTChsb2NhbF9mbHVzaF9jYWNoZV9yYW5nZSkodm1hLHN0YXJ0LGVuZCkKKyNkZWZpbmUgbG9jYWxfZmx1c2hfY2FjaGVfcGFnZSh2bWEsYWRkcikgQlRGSVhVUF9DQUxMKGxvY2FsX2ZsdXNoX2NhY2hlX3BhZ2UpKHZtYSxhZGRyKQorCitCVEZJWFVQREVGX0NBTEwodm9pZCwgbG9jYWxfZmx1c2hfcGFnZV90b19yYW0sIHVuc2lnbmVkIGxvbmcpCitCVEZJWFVQREVGX0NBTEwodm9pZCwgbG9jYWxfZmx1c2hfc2lnX2luc25zLCBzdHJ1Y3QgbW1fc3RydWN0ICosIHVuc2lnbmVkIGxvbmcpCisKKyNkZWZpbmUgbG9jYWxfZmx1c2hfcGFnZV90b19yYW0oYWRkcikgQlRGSVhVUF9DQUxMKGxvY2FsX2ZsdXNoX3BhZ2VfdG9fcmFtKShhZGRyKQorI2RlZmluZSBsb2NhbF9mbHVzaF9zaWdfaW5zbnMobW0saW5zbl9hZGRyKSBCVEZJWFVQX0NBTEwobG9jYWxfZmx1c2hfc2lnX2luc25zKShtbSxpbnNuX2FkZHIpCisKK2V4dGVybiB2b2lkIHNtcF9mbHVzaF9jYWNoZV9hbGwodm9pZCk7CitleHRlcm4gdm9pZCBzbXBfZmx1c2hfY2FjaGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pOworZXh0ZXJuIHZvaWQgc21wX2ZsdXNoX2NhY2hlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJCSAgdW5zaWduZWQgbG9uZyBzdGFydCwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgZW5kKTsKK2V4dGVybiB2b2lkIHNtcF9mbHVzaF9jYWNoZV9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHBhZ2UpOworCitleHRlcm4gdm9pZCBzbXBfZmx1c2hfcGFnZV90b19yYW0odW5zaWduZWQgbG9uZyBwYWdlKTsKK2V4dGVybiB2b2lkIHNtcF9mbHVzaF9zaWdfaW5zbnMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgaW5zbl9hZGRyKTsKKworI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KKworQlRGSVhVUERFRl9DQUxMKHZvaWQsIGZsdXNoX2NhY2hlX2FsbCwgdm9pZCkKK0JURklYVVBERUZfQ0FMTCh2b2lkLCBmbHVzaF9jYWNoZV9tbSwgc3RydWN0IG1tX3N0cnVjdCAqKQorQlRGSVhVUERFRl9DQUxMKHZvaWQsIGZsdXNoX2NhY2hlX3JhbmdlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKK0JURklYVVBERUZfQ0FMTCh2b2lkLCBmbHVzaF9jYWNoZV9wYWdlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZykKKworI2RlZmluZSBmbHVzaF9jYWNoZV9hbGwoKSBCVEZJWFVQX0NBTEwoZmx1c2hfY2FjaGVfYWxsKSgpCisjZGVmaW5lIGZsdXNoX2NhY2hlX21tKG1tKSBCVEZJWFVQX0NBTEwoZmx1c2hfY2FjaGVfbW0pKG1tKQorI2RlZmluZSBmbHVzaF9jYWNoZV9yYW5nZSh2bWEsc3RhcnQsZW5kKSBCVEZJWFVQX0NBTEwoZmx1c2hfY2FjaGVfcmFuZ2UpKHZtYSxzdGFydCxlbmQpCisjZGVmaW5lIGZsdXNoX2NhY2hlX3BhZ2Uodm1hLGFkZHIscGZuKSBCVEZJWFVQX0NBTEwoZmx1c2hfY2FjaGVfcGFnZSkodm1hLGFkZHIpCisjZGVmaW5lIGZsdXNoX2ljYWNoZV9yYW5nZShzdGFydCwgZW5kKQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9pY2FjaGVfcGFnZSh2bWEsIHBnKQkJZG8geyB9IHdoaWxlICgwKQorCisjZGVmaW5lIGZsdXNoX2ljYWNoZV91c2VyX3JhbmdlKHZtYSxwZyxhZHIsbGVuKQlkbyB7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgY29weV90b191c2VyX3BhZ2Uodm1hLCBwYWdlLCB2YWRkciwgZHN0LCBzcmMsIGxlbikgXAorCWRvIHsJCQkJCQkJXAorCQlmbHVzaF9jYWNoZV9wYWdlKHZtYSwgdmFkZHIsIHBhZ2VfdG9fcGZuKHBhZ2UpKTtcCisJCW1lbWNweShkc3QsIHNyYywgbGVuKTsJCQkJXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIGNvcHlfZnJvbV91c2VyX3BhZ2Uodm1hLCBwYWdlLCB2YWRkciwgZHN0LCBzcmMsIGxlbikgXAorCWRvIHsJCQkJCQkJXAorCQlmbHVzaF9jYWNoZV9wYWdlKHZtYSwgdmFkZHIsIHBhZ2VfdG9fcGZuKHBhZ2UpKTtcCisJCW1lbWNweShkc3QsIHNyYywgbGVuKTsJCQkJXAorCX0gd2hpbGUgKDApCisKK0JURklYVVBERUZfQ0FMTCh2b2lkLCBfX2ZsdXNoX3BhZ2VfdG9fcmFtLCB1bnNpZ25lZCBsb25nKQorQlRGSVhVUERFRl9DQUxMKHZvaWQsIGZsdXNoX3NpZ19pbnNucywgc3RydWN0IG1tX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nKQorCisjZGVmaW5lIF9fZmx1c2hfcGFnZV90b19yYW0oYWRkcikgQlRGSVhVUF9DQUxMKF9fZmx1c2hfcGFnZV90b19yYW0pKGFkZHIpCisjZGVmaW5lIGZsdXNoX3NpZ19pbnNucyhtbSxpbnNuX2FkZHIpIEJURklYVVBfQ0FMTChmbHVzaF9zaWdfaW5zbnMpKG1tLGluc25fYWRkcikKKworZXh0ZXJuIHZvaWQgc3BhcmNfZmx1c2hfcGFnZV90b19yYW0oc3RydWN0IHBhZ2UgKnBhZ2UpOworCisjZGVmaW5lIGZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpCQkJc3BhcmNfZmx1c2hfcGFnZV90b19yYW0ocGFnZSkKKyNkZWZpbmUgZmx1c2hfZGNhY2hlX21tYXBfbG9jayhtYXBwaW5nKQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9kY2FjaGVfbW1hcF91bmxvY2sobWFwcGluZykJZG8geyB9IHdoaWxlICgwKQorCisjZGVmaW5lIGZsdXNoX2NhY2hlX3ZtYXAoc3RhcnQsIGVuZCkJCWZsdXNoX2NhY2hlX2FsbCgpCisjZGVmaW5lIGZsdXNoX2NhY2hlX3Z1bm1hcChzdGFydCwgZW5kKQkJZmx1c2hfY2FjaGVfYWxsKCkKKworI2VuZGlmIC8qIF9TUEFSQ19DQUNIRUZMVVNIX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2NoZWNrc3VtLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9jaGVja3N1bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4NjE1ODEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9jaGVja3N1bS5oCkBAIC0wLDAgKzEsMjUzIEBACisvKiAkSWQ6IGNoZWNrc3VtLmgsdiAxLjMzIDIwMDIvMDIvMDEgMjI6MDE6MDUgZGF2ZW0gRXhwICQgKi8KKyNpZm5kZWYgX19TUEFSQ19DSEVDS1NVTV9ICisjZGVmaW5lIF9fU1BBUkNfQ0hFQ0tTVU1fSAorCisvKiAgY2hlY2tzdW0uaDogIElQL1VEUC9UQ1AgY2hlY2tzdW0gcm91dGluZXMgb24gdGhlIFNwYXJjLgorICoKKyAqICBDb3B5cmlnaHQoQykgMTk5NSBMaW51cyBUb3J2YWxkcworICogIENvcHlyaWdodChDKSAxOTk1IE1pZ3VlbCBkZSBJY2F6YQorICogIENvcHlyaWdodChDKSAxOTk2IERhdmlkIFMuIE1pbGxlcgorICogIENvcHlyaWdodChDKSAxOTk2IEVkZGllIEMuIERvc3QKKyAqICBDb3B5cmlnaHQoQykgMTk5NyBKYWt1YiBKZWxpbmVrCisgKgorICogZGVyaXZlZCBmcm9tOgorICoJQWxwaGEgY2hlY2tzdW0gYy1jb2RlCisgKiAgICAgIGl4ODYgaW5saW5lIGFzc2VtYmx5CisgKiAgICAgIFJGQzEwNzEgQ29tcHV0aW5nIHRoZSBJbnRlcm5ldCBDaGVja3N1bQorICovCisgCisjaW5jbHVkZSA8bGludXgvaW42Lmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworLyogY29tcHV0ZXMgdGhlIGNoZWNrc3VtIG9mIGEgbWVtb3J5IGJsb2NrIGF0IGJ1ZmYsIGxlbmd0aCBsZW4sCisgKiBhbmQgYWRkcyBpbiAic3VtIiAoMzItYml0KQorICoKKyAqIHJldHVybnMgYSAzMi1iaXQgbnVtYmVyIHN1aXRhYmxlIGZvciBmZWVkaW5nIGludG8gaXRzZWxmCisgKiBvciBjc3VtX3RjcHVkcF9tYWdpYworICoKKyAqIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aCBldmVuIGxlbmd0aHMsIGV4Y2VwdAorICogZm9yIHRoZSBsYXN0IGZyYWdtZW50LCB3aGljaCBtYXkgYmUgb2RkCisgKgorICogaXQncyBiZXN0IHRvIGhhdmUgYnVmZiBhbGlnbmVkIG9uIGEgMzItYml0IGJvdW5kYXJ5CisgKi8KK2V4dGVybiB1bnNpZ25lZCBpbnQgY3N1bV9wYXJ0aWFsKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiBidWZmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgc3VtKTsKKworLyogdGhlIHNhbWUgYXMgY3N1bV9wYXJ0aWFsLCBidXQgY29waWVzIGZyb20gZnM6c3JjIHdoaWxlIGl0CisgKiBjaGVja3N1bXMKKyAqCisgKiBoZXJlIGV2ZW4gbW9yZSBpbXBvcnRhbnQgdG8gYWxpZ24gc3JjIGFuZCBkc3Qgb24gYSAzMi1iaXQgKG9yIGV2ZW4KKyAqIGJldHRlciA2NC1iaXQpIGJvdW5kYXJ5CisgKi8KKworZXh0ZXJuIHVuc2lnbmVkIGludCBfX2NzdW1fcGFydGlhbF9jb3B5X3NwYXJjX2dlbmVyaWMgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqKTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgCitjc3VtX3BhcnRpYWxfY29weV9ub2NoZWNrIChjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMsIHVuc2lnbmVkIGNoYXIgKmRzdCwgaW50IGxlbiwKKwkJCSAgIHVuc2lnbmVkIGludCBzdW0pCit7CisJcmVnaXN0ZXIgdW5zaWduZWQgaW50IHJldCBhc20oIm8wIikgPSAodW5zaWduZWQgaW50KXNyYzsKKwlyZWdpc3RlciBjaGFyICpkIGFzbSgibzEiKSA9IGRzdDsKKwlyZWdpc3RlciBpbnQgbCBhc20oImcxIikgPSBsZW47CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCSJjYWxsIF9fY3N1bV9wYXJ0aWFsX2NvcHlfc3BhcmNfZ2VuZXJpY1xuXHQiCisJCSIgbW92ICU2LCAlJWc3XG4iCisJOiAiPSZyIiAocmV0KSwgIj0mciIgKGQpLCAiPSZyIiAobCkKKwk6ICIwIiAocmV0KSwgIjEiIChkKSwgIjIiIChsKSwgInIiIChzdW0pCisJOiAibzIiLCAibzMiLCAibzQiLCAibzUiLCAibzciLAorCSAgImcyIiwgImczIiwgImc0IiwgImc1IiwgImc3IiwKKwkgICJtZW1vcnkiLCAiY2MiKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCAKK2NzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlcihjb25zdCB1bnNpZ25lZCBjaGFyIF9fdXNlciAqc3JjLCB1bnNpZ25lZCBjaGFyICpkc3QsIGludCBsZW4sCisJCQkgICAgdW5zaWduZWQgaW50IHN1bSwgaW50ICplcnIpCisgIHsKKwlpZiAoIWFjY2Vzc19vayAoVkVSSUZZX1JFQUQsIHNyYywgbGVuKSkgeworCQkqZXJyID0gLUVGQVVMVDsKKwkJbWVtc2V0IChkc3QsIDAsIGxlbik7CisJCXJldHVybiBzdW07CisJfSBlbHNlIHsKKwkJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyByZXQgYXNtKCJvMCIpID0gKHVuc2lnbmVkIGxvbmcpc3JjOworCQlyZWdpc3RlciBjaGFyICpkIGFzbSgibzEiKSA9IGRzdDsKKwkJcmVnaXN0ZXIgaW50IGwgYXNtKCJnMSIpID0gbGVuOworCQlyZWdpc3RlciB1bnNpZ25lZCBpbnQgcyBhc20oImc3IikgPSBzdW07CisKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCQkiLnNlY3Rpb24gX19leF90YWJsZSwjYWxsb2Ncblx0IgorCQkiLmFsaWduIDRcblx0IgorCQkiLndvcmQgMWYsMlxuXHQiCisJCSIucHJldmlvdXNcbiIKKwkJIjE6XG5cdCIKKwkJImNhbGwgX19jc3VtX3BhcnRpYWxfY29weV9zcGFyY19nZW5lcmljXG5cdCIKKwkJIiBzdCAlOCwgWyUlc3AgKyA2NF1cbiIKKwkJOiAiPSZyIiAocmV0KSwgIj0mciIgKGQpLCAiPSZyIiAobCksICI9JnIiIChzKQorCQk6ICIwIiAocmV0KSwgIjEiIChkKSwgIjIiIChsKSwgIjMiIChzKSwgInIiIChlcnIpCisJCTogIm8yIiwgIm8zIiwgIm80IiwgIm81IiwgIm83IiwgImcyIiwgImczIiwgImc0IiwgImc1IiwKKwkJICAiY2MiLCAibWVtb3J5Iik7CisJCXJldHVybiByZXQ7CisJfQorICB9CisgIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgCitjc3VtX3BhcnRpYWxfY29weV90b191c2VyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYywgdW5zaWduZWQgY2hhciBfX3VzZXIgKmRzdCwgaW50IGxlbiwKKwkJCSAgdW5zaWduZWQgaW50IHN1bSwgaW50ICplcnIpCit7CisJaWYgKCFhY2Nlc3Nfb2sgKFZFUklGWV9XUklURSwgZHN0LCBsZW4pKSB7CisJCSplcnIgPSAtRUZBVUxUOworCQlyZXR1cm4gc3VtOworCX0gZWxzZSB7CisJCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgcmV0IGFzbSgibzAiKSA9ICh1bnNpZ25lZCBsb25nKXNyYzsKKwkJcmVnaXN0ZXIgY2hhciBfX3VzZXIgKmQgYXNtKCJvMSIpID0gZHN0OworCQlyZWdpc3RlciBpbnQgbCBhc20oImcxIikgPSBsZW47CisJCXJlZ2lzdGVyIHVuc2lnbmVkIGludCBzIGFzbSgiZzciKSA9IHN1bTsKKworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCSIuc2VjdGlvbiBfX2V4X3RhYmxlLCNhbGxvY1xuXHQiCisJCSIuYWxpZ24gNFxuXHQiCisJCSIud29yZCAxZiwxXG5cdCIKKwkJIi5wcmV2aW91c1xuIgorCQkiMTpcblx0IgorCQkiY2FsbCBfX2NzdW1fcGFydGlhbF9jb3B5X3NwYXJjX2dlbmVyaWNcblx0IgorCQkiIHN0ICU4LCBbJSVzcCArIDY0XVxuIgorCQk6ICI9JnIiIChyZXQpLCAiPSZyIiAoZCksICI9JnIiIChsKSwgIj0mciIgKHMpCisJCTogIjAiIChyZXQpLCAiMSIgKGQpLCAiMiIgKGwpLCAiMyIgKHMpLCAiciIgKGVycikKKwkJOiAibzIiLCAibzMiLCAibzQiLCAibzUiLCAibzciLAorCQkgICJnMiIsICJnMyIsICJnNCIsICJnNSIsCisJCSAgImNjIiwgIm1lbW9yeSIpOworCQlyZXR1cm4gcmV0OworCX0KK30KKworI2RlZmluZSBIQVZFX0NTVU1fQ09QWV9VU0VSCisjZGVmaW5lIGNzdW1fYW5kX2NvcHlfdG9fdXNlciBjc3VtX3BhcnRpYWxfY29weV90b191c2VyCisKKy8qIGlobCBpcyBhbHdheXMgNSBvciBncmVhdGVyLCBhbG1vc3QgYWx3YXlzIGlzIDUsIGFuZCBpcGggaXMgd29yZCBhbGlnbmVkCisgKiB0aGUgbWFqb3JpdHkgb2YgdGhlIHRpbWUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgaXBfZmFzdF9jc3VtKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlwaCwKKwkJCQkJICB1bnNpZ25lZCBpbnQgaWhsKQoreworCXVuc2lnbmVkIHNob3J0IHN1bTsKKworCS8qIE5vdGU6IFdlIG11c3QgcmVhZCAlMiBiZWZvcmUgd2UgdG91Y2ggJTAgZm9yIHRoZSBmaXJzdCB0aW1lLAorCSAqICAgICAgIGJlY2F1c2UgR0NDIGNhbiBsZWdpdGltYXRlbHkgdXNlIHRoZSBzYW1lIHJlZ2lzdGVyIGZvcgorCSAqICAgICAgIGJvdGggb3BlcmFuZHMuCisJICovCisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN1Ylx0JTIsIDQsICUlZzRcblx0IgorCQkJICAgICAibGRcdFslMSArIDB4MDBdLCAlMFxuXHQiCisJCQkgICAgICJsZFx0WyUxICsgMHgwNF0sICUlZzJcblx0IgorCQkJICAgICAibGRcdFslMSArIDB4MDhdLCAlJWczXG5cdCIKKwkJCSAgICAgImFkZGNjXHQlJWcyLCAlMCwgJTBcblx0IgorCQkJICAgICAiYWRkeGNjXHQlJWczLCAlMCwgJTBcblx0IgorCQkJICAgICAibGRcdFslMSArIDB4MGNdLCAlJWcyXG5cdCIKKwkJCSAgICAgImxkXHRbJTEgKyAweDEwXSwgJSVnM1xuXHQiCisJCQkgICAgICJhZGR4Y2NcdCUlZzIsICUwLCAlMFxuXHQiCisJCQkgICAgICJhZGR4XHQlMCwgJSVnMCwgJTBcbiIKKwkJCSAgICAgIjE6XHRhZGRjY1x0JSVnMywgJTAsICUwXG5cdCIKKwkJCSAgICAgImFkZFx0JTEsIDQsICUxXG5cdCIKKwkJCSAgICAgImFkZHhjY1x0JTAsICUlZzAsICUwXG5cdCIKKwkJCSAgICAgInN1YmNjXHQlJWc0LCAxLCAlJWc0XG5cdCIKKwkJCSAgICAgImJlLGFcdDJmXG5cdCIKKwkJCSAgICAgInNsbFx0JTAsIDE2LCAlJWcyXG5cdCIKKwkJCSAgICAgImJcdDFiXG5cdCIKKwkJCSAgICAgImxkXHRbJTEgKyAweDEwXSwgJSVnM1xuIgorCQkJICAgICAiMjpcdGFkZGNjXHQlMCwgJSVnMiwgJSVnMlxuXHQiCisJCQkgICAgICJzcmxcdCUlZzIsIDE2LCAlMFxuXHQiCisJCQkgICAgICJhZGR4XHQlMCwgJSVnMCwgJTBcblx0IgorCQkJICAgICAieG5vclx0JSVnMCwgJTAsICUwIgorCQkJICAgICA6ICI9ciIgKHN1bSksICI9JnIiIChpcGgpCisJCQkgICAgIDogInIiIChpaGwpLCAiMSIgKGlwaCkKKwkJCSAgICAgOiAiZzIiLCAiZzMiLCAiZzQiLCAiY2MiKTsKKwlyZXR1cm4gc3VtOworfQorCisvKiBGb2xkIGEgcGFydGlhbCBjaGVja3N1bSB3aXRob3V0IGFkZGluZyBwc2V1ZG8gaGVhZGVycy4gKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNzdW1fZm9sZCh1bnNpZ25lZCBpbnQgc3VtKQoreworCXVuc2lnbmVkIGludCB0bXA7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygiYWRkY2NcdCUwLCAlMSwgJTFcblx0IgorCQkJICAgICAic3JsXHQlMSwgMTYsICUxXG5cdCIKKwkJCSAgICAgImFkZHhcdCUxLCAlJWcwLCAlMVxuXHQiCisJCQkgICAgICJ4bm9yXHQlJWcwLCAlMSwgJTAiCisJCQkgICAgIDogIj0mciIgKHN1bSksICI9ciIgKHRtcCkKKwkJCSAgICAgOiAiMCIgKHN1bSksICIxIiAoc3VtPDwxNikKKwkJCSAgICAgOiAiY2MiKTsKKwlyZXR1cm4gc3VtOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY3N1bV90Y3B1ZHBfbm9mb2xkKHVuc2lnbmVkIGxvbmcgc2FkZHIsCisJCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGRhZGRyLAorCQkJCQkgICAgICAgdW5zaWduZWQgaW50IGxlbiwKKwkJCQkJICAgICAgIHVuc2lnbmVkIHNob3J0IHByb3RvLAorCQkJCQkgICAgICAgdW5zaWduZWQgaW50IHN1bSkKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygiYWRkY2NcdCUxLCAlMCwgJTBcblx0IgorCQkJICAgICAiYWRkeGNjXHQlMiwgJTAsICUwXG5cdCIKKwkJCSAgICAgImFkZHhjY1x0JTMsICUwLCAlMFxuXHQiCisJCQkgICAgICJhZGR4XHQlMCwgJSVnMCwgJTBcblx0IgorCQkJICAgICA6ICI9ciIgKHN1bSksICI9ciIgKHNhZGRyKQorCQkJICAgICA6ICJyIiAoZGFkZHIpLCAiciIgKChwcm90bzw8MTYpK2xlbiksICIwIiAoc3VtKSwKKwkJCSAgICAgICAiMSIgKHNhZGRyKQorCQkJICAgICA6ICJjYyIpOworCXJldHVybiBzdW07Cit9CisKKy8qCisgKiBjb21wdXRlcyB0aGUgY2hlY2tzdW0gb2YgdGhlIFRDUC9VRFAgcHNldWRvLWhlYWRlcgorICogcmV0dXJucyBhIDE2LWJpdCBjaGVja3N1bSwgYWxyZWFkeSBjb21wbGVtZW50ZWQKKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBpbnQgY3N1bV90Y3B1ZHBfbWFnaWModW5zaWduZWQgbG9uZyBzYWRkciwKKwkJCQkJCSAgIHVuc2lnbmVkIGxvbmcgZGFkZHIsCisJCQkJCQkgICB1bnNpZ25lZCBzaG9ydCBsZW4sCisJCQkJCQkgICB1bnNpZ25lZCBzaG9ydCBwcm90bywKKwkJCQkJCSAgIHVuc2lnbmVkIGludCBzdW0pIAoreworCXJldHVybiBjc3VtX2ZvbGQoY3N1bV90Y3B1ZHBfbm9mb2xkKHNhZGRyLGRhZGRyLGxlbixwcm90byxzdW0pKTsKK30KKworI2RlZmluZSBfSEFWRV9BUkNIX0lQVjZfQ1NVTQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IGludCBjc3VtX2lwdjZfbWFnaWMoc3RydWN0IGluNl9hZGRyICpzYWRkciwKKwkJCQkJCSBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAorCQkJCQkJIF9fdTMyIGxlbiwKKwkJCQkJCSB1bnNpZ25lZCBzaG9ydCBwcm90bywKKwkJCQkJCSB1bnNpZ25lZCBpbnQgc3VtKSAKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCSJhZGRjYwklMywgJTQsICUlZzRcblx0IgorCQkiYWRkeGNjCSU1LCAlJWc0LCAlJWc0XG5cdCIKKwkJImxkCVslMiArIDB4MGNdLCAlJWcyXG5cdCIKKwkJImxkCVslMiArIDB4MDhdLCAlJWczXG5cdCIKKwkJImFkZHhjYwklJWcyLCAlJWc0LCAlJWc0XG5cdCIKKwkJImxkCVslMiArIDB4MDRdLCAlJWcyXG5cdCIKKwkJImFkZHhjYwklJWczLCAlJWc0LCAlJWc0XG5cdCIKKwkJImxkCVslMiArIDB4MDBdLCAlJWczXG5cdCIKKwkJImFkZHhjYwklJWcyLCAlJWc0LCAlJWc0XG5cdCIKKwkJImxkCVslMSArIDB4MGNdLCAlJWcyXG5cdCIKKwkJImFkZHhjYwklJWczLCAlJWc0LCAlJWc0XG5cdCIKKwkJImxkCVslMSArIDB4MDhdLCAlJWczXG5cdCIKKwkJImFkZHhjYwklJWcyLCAlJWc0LCAlJWc0XG5cdCIKKwkJImxkCVslMSArIDB4MDRdLCAlJWcyXG5cdCIKKwkJImFkZHhjYwklJWczLCAlJWc0LCAlJWc0XG5cdCIKKwkJImxkCVslMSArIDB4MDBdLCAlJWczXG5cdCIKKwkJImFkZHhjYwklJWcyLCAlJWc0LCAlJWc0XG5cdCIKKwkJImFkZHhjYwklJWczLCAlJWc0LCAlMFxuXHQiCisJCSJhZGR4CTAsICUwLCAlMFxuIgorCQk6ICI9JnIiIChzdW0pCisJCTogInIiIChzYWRkciksICJyIiAoZGFkZHIpLCAKKwkJICAiciIoaHRvbmwobGVuKSksICJyIihodG9ubChwcm90bykpLCAiciIoc3VtKQorCQk6ICJnMiIsICJnMyIsICJnNCIsICJjYyIpOworCisJcmV0dXJuIGNzdW1fZm9sZChzdW0pOworfQorCisvKiB0aGlzIHJvdXRpbmUgaXMgdXNlZCBmb3IgbWlzY2VsbGFuZW91cyBJUC1saWtlIGNoZWNrc3VtcywgbWFpbmx5IGluIGljbXAuYyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBpcF9jb21wdXRlX2NzdW0odW5zaWduZWQgY2hhciAqIGJ1ZmYsIGludCBsZW4pCit7CisJcmV0dXJuIGNzdW1fZm9sZChjc3VtX3BhcnRpYWwoYnVmZiwgbGVuLCAwKSk7Cit9CisKKyNlbmRpZiAvKiAhKF9fU1BBUkNfQ0hFQ0tTVU1fSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2Nsb2NrLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9jbG9jay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3MDhlNmIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9jbG9jay5oCkBAIC0wLDAgKzEsMTEgQEAKKy8qICRJZDogY2xvY2suaCx2IDEuMyAxOTk1LzExLzI1IDAyOjMxOjI1IGRhdmVtIEV4cCAkCisgKiBjbG9jay5oOiAgRGVmaW5pdGlvbnMgZm9yIGNsb2NrIG9wZXJhdGlvbnMgb24gdGhlIFNwYXJjLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NSBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCisgKi8KKyNpZm5kZWYgX1NQQVJDX0NMT0NLX0gKKyNkZWZpbmUgX1NQQVJDX0NMT0NLX0gKKworLyogRm9vIGZvciBub3cuICovCisKKyNlbmRpZiAvKiAhKF9TUEFSQ19DTE9DS19IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvY29udHJlZ3MuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL2NvbnRyZWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUwNWFmZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL2NvbnRyZWdzLmgKQEAgLTAsMCArMSw1NCBAQAorLyogJElkOiBjb250cmVncy5oLHYgMS44IDIwMDAvMTIvMjggMjI6NDk6MTEgZGF2ZW0gRXhwICQgKi8KKyNpZm5kZWYgX1NQQVJDX0NPTlRSRUdTX0gKKyNkZWZpbmUgX1NQQVJDX0NPTlRSRUdTX0gKKworLyogY29udHJlZ3MuaDogIEFkZHJlc3NlcyBvZiByZWdpc3RlcnMgaW4gdGhlIEFTSV9DT05UUk9MIGFsdGVybmF0ZSBhZGRyZXNzCisgKiAgICAgICAgICAgICAgc3BhY2UuIFRoZXNlIGFyZSBmb3IgdGhlIG1tdSdzIGNvbnRleHQgcmVnaXN0ZXIsIGV0Yy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQorICovCisKKy8qIDM9c3VuMworICAgND1zdW40IChhcyBpbiBzdW40IHN5c21haW50IHN0dWRlbnQgYm9vaykKKyAgIGM9c3VuNGMgKGFjY29yZGluZyB0byBkYXZlbSkgKi8KKworI2RlZmluZSBBQ19JRFBST00gICAgIDB4MDAwMDAwMDAgICAgLyogMzQgIElEIFBST00sIFIvTywgYnl0ZSwgMzIgYnl0ZXMgICAgICAqLworI2RlZmluZSBBQ19QQUdFTUFQICAgIDB4MTAwMDAwMDAgICAgLyogMyAgIFBhZ2VtYXAgUi9XLCBsb25nICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBQ19TRUdNQVAgICAgIDB4MjAwMDAwMDAgICAgLyogMyAgIFNlZ21lbnQgbWFwLCBieXRlICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBQ19DT05URVhUICAgIDB4MzAwMDAwMDAgICAgLyogMzRjIGN1cnJlbnQgbW11LWNvbnRleHQgICAgICAgICAgICAgICAqLworI2RlZmluZSBBQ19TRU5BQkxFICAgIDB4NDAwMDAwMDAgICAgLyogMzRjIHN5c3RlbSBkdm1hL2NhY2hlL3Jlc2V0IGVuYWJsZSByZWcqLworI2RlZmluZSBBQ19VRFZNQV9FTkIgIDB4NTAwMDAwMDAgICAgLyogMzQgIE5vdCB1c2VkIG9uIFN1biBib2FyZHMsIGJ5dGUgICAgICAqLworI2RlZmluZSBBQ19CVVNfRVJST1IgIDB4NjAwMDAwMDAgICAgLyogMzQgIE5vdCBjbGVhcmVkIG9uIHJlYWQsIGJ5dGUuICAgICAgICAqLworI2RlZmluZSBBQ19TWU5DX0VSUiAgIDB4NjAwMDAwMDAgICAgLyogIGMgZmF1bHQgdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBQ19TWU5DX1ZBICAgIDB4NjAwMDAwMDQgICAgLyogIGMgZmF1bHQgdmlydHVhbCBhZGRyZXNzICAgICAgICAgICAgICAqLworI2RlZmluZSBBQ19BU1lOQ19FUlIgIDB4NjAwMDAwMDggICAgLyogIGMgYXN5bmNocm9ub3VzIGZhdWx0IHR5cGUgICAgICAgICAgICAqLworI2RlZmluZSBBQ19BU1lOQ19WQSAgIDB4NjAwMDAwMGMgICAgLyogIGMgYXN5bmMgZmF1bHQgdmlydHVhbCBhZGRyZXNzICAgICAgICAqLworI2RlZmluZSBBQ19MRURTICAgICAgIDB4NzAwMDAwMDAgICAgLyogMzQgIFplcm8gdHVybnMgb24gTEVEcywgYnl0ZSAgICAgICAgICAqLworI2RlZmluZSBBQ19DQUNIRVRBR1MgIDB4ODAwMDAwMDAgICAgLyogMzRjIGRpcmVjdCBhY2Nlc3MgdG8gdGhlIFZBQyB0YWdzICAgICAqLworI2RlZmluZSBBQ19DQUNIRUREQVRBIDB4OTAwMDAwMDAgICAgLyogMyBjIGRpcmVjdCBhY2Nlc3MgdG8gdGhlIFZBQyBkYXRhICAgICAqLworI2RlZmluZSBBQ19VRFZNQV9NQVAgIDB4RDAwMDAwMDAgICAgLyogNCAgTm90IHVzZWQgb24gU3VuIGJvYXJkcywgYnl0ZSAgICAgICAqLworI2RlZmluZSBBQ19WTUVfVkVDVE9SIDB4RTAwMDAwMDAgICAgLyogNCAgRm9yIG5vbi1BdXRvdmVjdG9yIFZNRSwgYnl0ZSAgICAgICAqLworI2RlZmluZSBBQ19CT09UX1NDQyAgIDB4RjAwMDAwMDAgICAgLyogMzQgIGJ5cGFzcyB0byBhY2Nlc3MgWmlsb2cgODUzMC4gYnl0ZS4qLworCisvKiBzPVN3aWZ0LCBoPVJvc3NfSHlwZXJTUEFSQywgdj1USV9WaWtpbmcsIHQ9VHN1bmFtaSwgcj1Sb3NzX0N5cHJlc3MgICAgICAgICovCisjZGVmaW5lIEFDX01fUENSICAgICAgMHgwMDAwICAgICAgICAvKiBzaHYgUHJvY2Vzc29yIENvbnRyb2wgUmVnICAgICAgICAgICAgICovCisjZGVmaW5lIEFDX01fQ1RQUiAgICAgMHgwMTAwICAgICAgICAvKiBzaHYgQ29udGV4dCBUYWJsZSBQb2ludGVyIFJlZyAgICAgICAgICovCisjZGVmaW5lIEFDX01fQ1hSICAgICAgMHgwMjAwICAgICAgICAvKiBzaHYgQ29udGV4dCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFDX01fU0ZTUiAgICAgMHgwMzAwICAgICAgICAvKiBzaHYgU3luY2hyb25vdXMgRmF1bHQgU3RhdHVzIFJlZyAgICAgICovCisjZGVmaW5lIEFDX01fU0ZBUiAgICAgMHgwNDAwICAgICAgICAvKiBzaHYgU3luY2hyb25vdXMgRmF1bHQgQWRkcmVzcyBSZWcgICAgICovCisjZGVmaW5lIEFDX01fQUZTUiAgICAgMHgwNTAwICAgICAgICAvKiAgaHYgQXN5bmNocm9ub3VzIEZhdWx0IFN0YXR1cyBSZWcgICAgICovCisjZGVmaW5lIEFDX01fQUZBUiAgICAgMHgwNjAwICAgICAgICAvKiAgaHYgQXN5bmNocm9ub3VzIEZhdWx0IEFkZHJlc3MgUmVnICAgICovCisjZGVmaW5lIEFDX01fUkVTRVQgICAgMHgwNzAwICAgICAgICAvKiAgaHYgUmVzZXQgUmVnICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFDX01fUlBSICAgICAgMHgxMDAwICAgICAgICAvKiAgaHYgUm9vdCBQb2ludGVyIFJlZyAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFDX01fVFNVVFJDUiAgMHgxMDAwICAgICAgICAvKiBzICAgVExCIFJlcGxhY2VtZW50IEN0cmwgUmVnICAgICAgICAgICovCisjZGVmaW5lIEFDX01fSUFQVFAgICAgMHgxMTAwICAgICAgICAvKiAgaHYgSW5zdHJ1Y3Rpb24gQWNjZXNzIFBUUCAgICAgICAgICAgICovCisjZGVmaW5lIEFDX01fREFQVFAgICAgMHgxMjAwICAgICAgICAvKiAgaHYgRGF0YSBBY2Nlc3MgUFRQICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFDX01fSVRSICAgICAgMHgxMzAwICAgICAgICAvKiAgaHYgSW5kZXggVGFnIFJlZ2lzdGVyICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFDX01fVFJDUiAgICAgMHgxNDAwICAgICAgICAvKiAgaHYgVExCIFJlcGxhY2VtZW50IENvbnRyb2wgUmVnICAgICAgICovCisjZGVmaW5lIEFDX01fU0ZTUlggICAgMHgxMzAwICAgICAgICAvKiBzICAgU3luY2ggRmF1bHQgU3RhdHVzIFJlZyBwcmltICAgICAgICovCisjZGVmaW5lIEFDX01fU0ZBUlggICAgMHgxNDAwICAgICAgICAvKiBzICAgU3luY2ggRmF1bHQgQWRkcmVzcyBSZWcgcHJpbSAgICAgICovCisjZGVmaW5lIEFDX01fUlBSMSAgICAgMHgxNTAwICAgICAgICAvKiAgaCAgUm9vdCBQb2ludGVyIFJlZyAoZW50cnkgMikgICAgICAgICovCisjZGVmaW5lIEFDX01fSUFQVFAxICAgMHgxNjAwICAgICAgICAvKiAgaCAgSW5zdHJ1Y3Rpb24gQWNjZXNzIFBUUCAoZW50cnkgMikgICovCisjZGVmaW5lIEFDX01fREFQVFAxICAgMHgxNzAwICAgICAgICAvKiAgaCAgRGF0YSBBY2Nlc3MgUFRQIChlbnRyeSAyKSAgICAgICAgICovCisKKyNlbmRpZiAvKiBfU1BBUkNfQ09OVFJFR1NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvY3B1ZGF0YS5oIGIvaW5jbHVkZS9hc20tc3BhcmMvY3B1ZGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjMGQ5ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9jcHVkYXRhLmgKQEAgLTAsMCArMSwyNiBAQAorLyogY3B1ZGF0YS5oOiBQZXItY3B1IHBhcmFtZXRlcnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IEtlaXRoIE0gV2Vzb2xvd3NraSAod2Vzb2xvd3NAZm9vYmF6Y28ub3JnKQorICoKKyAqIEJhc2VkIG9uIGluY2x1ZGUvYXNtLXNwYXJjNjQvY3B1ZGF0YS5oIGFuZCBMaW51eCAyLjQgc21wLmgKKyAqIGJvdGggKEMpIERhdmlkIFMuIE1pbGxlci4KKyAqLworCisjaWZuZGVmIF9TUEFSQ19DUFVEQVRBX0gKKyNkZWZpbmUgX1NQQVJDX0NQVURBVEFfSAorCisjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBsb25nIHVkZWxheV92YWw7CisJdW5zaWduZWQgbG9uZyBjbG9ja190aWNrOworCXVuc2lnbmVkIGludCBtdWx0aXBsaWVyOworCXVuc2lnbmVkIGludCBjb3VudGVyOworCWludCBwcm9tX25vZGU7CisJaW50IG1pZDsKK30gY3B1aW5mb19zcGFyYzsKKworREVDTEFSRV9QRVJfQ1BVKGNwdWluZm9fc3BhcmMsIF9fY3B1X2RhdGEpOworI2RlZmluZSBjcHVfZGF0YShfX2NwdSkgcGVyX2NwdShfX2NwdV9kYXRhLCAoX19jcHUpKQorCisjZW5kaWYgLyogX1NQQVJDX0NQVURBVEFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvY3B1dGltZS5oIGIvaW5jbHVkZS9hc20tc3BhcmMvY3B1dGltZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhNjQyYjgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9jcHV0aW1lLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fU1BBUkNfQ1BVVElNRV9ICisjZGVmaW5lIF9fU1BBUkNfQ1BVVElNRV9ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9jcHV0aW1lLmg+CisKKyNlbmRpZiAvKiBfX1NQQVJDX0NQVVRJTUVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvY3VycmVudC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvY3VycmVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmZTdjODIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9jdXJyZW50LmgKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqICBpbmNsdWRlL2FzbS1zcGFyYy9jdXJyZW50LmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgSUJNIERldXRzY2hsYW5kIEVudHdpY2tsdW5nIEdtYkgsIElCTSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDAyIFBldGUgWmFpdGNldiAoemFpdGNldkB5YWhvby5jb20pCisgKgorICogIERlcml2ZWQgZnJvbSAiaW5jbHVkZS9hc20tczM5MC9jdXJyZW50LmgiIGJ5CisgKiAgTWFydGluIFNjaHdpZGVmc2t5IChzY2h3aWRlZnNreUBkZS5pYm0uY29tKQorICogIERlcml2ZWQgZnJvbSAiaW5jbHVkZS9hc20taTM4Ni9jdXJyZW50LmgiCisgKi8KKyNpZm5kZWYgX0FTTV9DVVJSRU5UX0gKKyNkZWZpbmUgX0FTTV9DVVJSRU5UX0gKKworLyoKKyAqIEF0IHRoZSBzcGFyYzY0IERhdmVNIGtlZXBzIGN1cnJlbnRfdGhyZWFkX2luZm8gaW4gJWc0LgorICogV2UgbWlnaHQgd2FudCB0byBjb25zaWRlciBkb2luZyB0aGUgc2FtZSB0byBzaGF2ZSBhIGZldyBjeWNsZXMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3RocmVhZF9pbmZvLmg+CisKK3N0cnVjdCB0YXNrX3N0cnVjdDsKKworLyogVHdvIHN0YWdlIHByb2Nlc3MgKGlubGluZSArICNkZWZpbmUpIGZvciB0eXBlLWNoZWNraW5nLiAqLworLyogV2UgYWxzbyBvYmZ1c2NhdGUgZ2V0X2N1cnJlbnQoKSB0byBjaGVjayBpZiBhbnlvbmUgdXNlZCB0aGF0IGJ5IG1pc3Rha2UuICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqX19nZXRfY3VycmVudCh2b2lkKQoreworCXJldHVybiBjdXJyZW50X3RocmVhZF9pbmZvKCktPnRhc2s7Cit9CisjZGVmaW5lIGN1cnJlbnQgX19nZXRfY3VycmVudCgpCisKKyNlbmRpZiAvKiAhKF9BU01fQ1VSUkVOVF9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvY3lwcmVzcy5oIGIvaW5jbHVkZS9hc20tc3BhcmMvY3lwcmVzcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjOTJmYzgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9jeXByZXNzLmgKQEAgLTAsMCArMSw3OSBAQAorLyogJElkOiBjeXByZXNzLmgsdiAxLjYgMTk5Ni8wOC8yOSAwOTo0ODowOSBkYXZlbSBFeHAgJAorICogY3lwcmVzcy5oOiBDeXByZXNzIG1vZHVsZSBzcGVjaWZpYyBkZWZpbml0aW9ucyBhbmQgZGVmaW5lcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQorICovCisKKyNpZm5kZWYgX1NQQVJDX0NZUFJFU1NfSAorI2RlZmluZSBfU1BBUkNfQ1lQUkVTU19ICisKKy8qIEN5cHJlc3MgY2hpcHMgaGF2ZSAlcHNyICdpbXBsJyBvZiAnMDAwMScgYW5kICd2ZXJzJyBvZiAnMDAwMScuICovCisKKy8qIFRoZSBNTVUgY29udHJvbCByZWdpc3RlciBmaWVsZHMgb24gdGhlIFNwYXJjIEN5cHJlc3MgNjA0LzYwNSBNTVUncy4KKyAqCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHxpbXBsdmVyc3wgTUNBIHwgTUNNIHxNVnwgTUlEIHxCTXwgQ3xSU1Z8TVJ8Q018Q0x8Q0V8UlNWfE5GfE1FfAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgMzEgICAgMjQgMjMtMjIgMjEtMjAgMTkgMTgtMTUgMTQgMTMgIDEyIDExIDEwICA5ICA4IDctMiAgMSAgMAorICoKKyAqIE1DQTogTXVsdGlDaGlwIEFjY2VzcyAtLSBVc2VkIGZvciBjb25maWd1cmF0aW9uIG9mIG11bHRpcGxlCisgKiAgICAgIENZN0M2MDQvNjA1IGNhY2hlIHVuaXRzLgorICogTUNNOiBNdWx0aUNoaXAgTWFzayAtLSBBZ2FpbiwgZm9yIG11bHRpcGxlIGNhY2hlIHVuaXQgY29uZmlnLgorICogTVY6IE11bHRpQ2hpcCBWYWxpZCAtLSBJbmRpY2F0ZXMgTUNNIGFuZCBNQ0EgaGF2ZSB2YWxpZCBzZXR0aW5ncy4KKyAqIE1JRDogTW9kdWxlSUQgLS0gVW5pcXVlIHByb2Nlc3NvciBJRCBmb3IgTUJ1cyB0cmFuc2FjdGlvbnMuICg2MDUgb25seSkKKyAqIEJNOiBCb290IE1vZGUgLS0gMCA9IG5vdCBpbiBib290IG1vZGUsIDEgPSBpbiBib290IG1vZGUKKyAqIEM6IENhY2hlYWJsZSAtLSBJbmRpY2F0ZXMgd2hldGhlciBhY2Nlc3NlcyBhcmUgY2FjaGVhYmxlIHdoaWxlCisgKiAgICB0aGUgTU1VIGlzIG9mZi4gIDA9bm8gMT15ZXMKKyAqIE1SOiBNZW1vcnlSZWZsZWN0aW9uIC0tIEluZGljYXRlcyB3aGV0aGVyIHRoZSBidXMgYXR0YWNoZWQgdG8gdGhlCisgKiAgICAgTUJ1cyBzdXBwb3J0cyBtZW1vcnkgcmVmbGVjdGlvbi4gMD1ubyAxPXllcyAoNjA1IG9ubHkpCisgKiBDTTogQ2FjaGVNb2RlIC0tIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjYWNoZSBpcyBvcGVyYXRpbmcgaW4gd3JpdGUKKyAqICAgICB0aHJvdWdoIG9yIGNvcHktYmFjayBtb2RlLiAwPXdyaXRlLXRocm91Z2ggMT1jb3B5LWJhY2sKKyAqIENMOiBDYWNoZUxvY2sgLS0gSW5kaWNhdGVzIGlmIHRoZSBlbnRpcmUgY2FjaGUgaXMgbG9ja2VkIG9yIG5vdC4KKyAqICAgICAwPW5vdC1sb2NrZWQgMT1sb2NrZWQgICg2MDQgb25seSkKKyAqIENFOiBDYWNoZUVuYWJsZSAtLSBJcyB0aGUgdmlydHVhbCBjYWNoZSBvbj8gMD1ubyAxPXllcworICogTkY6IE5vRmF1bHQgLS0gRG8gZmF1bHRzIGdlbmVyYXRlIHRyYXBzPyAwPXllcyAxPW5vCisgKiBNRTogTW11RW5hYmxlIC0tIElzIHRoZSBNTVUgZG9pbmcgdHJhbnNsYXRpb25zPyAwPW5vIDE9eWVzCisgKi8KKworI2RlZmluZSBDWVBSRVNTX01DQSAgICAgICAweDAwYzAwMDAwCisjZGVmaW5lIENZUFJFU1NfTUNNICAgICAgIDB4MDAzMDAwMDAKKyNkZWZpbmUgQ1lQUkVTU19NVkFMSUQgICAgMHgwMDA4MDAwMAorI2RlZmluZSBDWVBSRVNTX01JRE1BU0sgICAweDAwMDc4MDAwICAgLyogT25seSBvbiA2MDUgKi8KKyNkZWZpbmUgQ1lQUkVTU19CTU9ERSAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBDWVBSRVNTX0FDRU5BQkxFICAweDAwMDAyMDAwCisjZGVmaW5lIENZUFJFU1NfTVJGTENUICAgIDB4MDAwMDA4MDAgICAvKiBPbmx5IG9uIDYwNSAqLworI2RlZmluZSBDWVBSRVNTX0NNT0RFICAgICAweDAwMDAwNDAwCisjZGVmaW5lIENZUFJFU1NfQ0xPQ0sgICAgIDB4MDAwMDAyMDAgICAvKiBPbmx5IG9uIDYwNCAqLworI2RlZmluZSBDWVBSRVNTX0NFTkFCTEUgICAweDAwMDAwMTAwCisjZGVmaW5lIENZUFJFU1NfTkZBVUxUICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ1lQUkVTU19NRU5BQkxFICAgMHgwMDAwMDAwMQorCitleHRlcm4gX19pbmxpbmVfXyB2b2lkIGN5cHJlc3NfZmx1c2hfcGFnZSh1bnNpZ25lZCBsb25nIHBhZ2UpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0YSAlJWcwLCBbJTBdICUxXG5cdCIgOiA6CisJCQkgICAgICJyIiAocGFnZSksICJpIiAoQVNJX01fRkxVU0hfUEFHRSkpOworfQorCitleHRlcm4gX19pbmxpbmVfXyB2b2lkIGN5cHJlc3NfZmx1c2hfc2VnbWVudCh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0YSAlJWcwLCBbJTBdICUxXG5cdCIgOiA6CisJCQkgICAgICJyIiAoYWRkciksICJpIiAoQVNJX01fRkxVU0hfU0VHKSk7Cit9CisKK2V4dGVybiBfX2lubGluZV9fIHZvaWQgY3lwcmVzc19mbHVzaF9yZWdpb24odW5zaWduZWQgbG9uZyBhZGRyKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdGEgJSVnMCwgWyUwXSAlMVxuXHQiIDogOgorCQkJICAgICAiciIgKGFkZHIpLCAiaSIgKEFTSV9NX0ZMVVNIX1JFR0lPTikpOworfQorCitleHRlcm4gX19pbmxpbmVfXyB2b2lkIGN5cHJlc3NfZmx1c2hfY29udGV4dCh2b2lkKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdGEgJSVnMCwgWyUlZzBdICUwXG5cdCIgOiA6CisJCQkgICAgICJpIiAoQVNJX01fRkxVU0hfQ1RYKSk7Cit9CisKKy8qIFhYWCBEaXNwbGFjZW1lbnQgZmx1c2hlcyBmb3IgYnVnZ3kgY2hpcHMgYW5kIGluaXRpYWwgdGVzdGluZworICogWFhYIGdvIGhlcmUuCisgKi8KKworI2VuZGlmIC8qICEoX1NQQVJDX0NZUFJFU1NfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2RlbGF5LmggYi9pbmNsdWRlL2FzbS1zcGFyYy9kZWxheS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlZGYyY2IKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9kZWxheS5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qICRJZDogZGVsYXkuaCx2IDEuMTEgMjAwMS8wMS8wMSAwMTo0NjoxNSBkYXZlbSBFeHAgJAorICogZGVsYXkuaDogTGludXggZGVsYXkgcm91dGluZXMgb24gdGhlIFNwYXJjLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NCBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpLgorICovCisKKyNpZm5kZWYgX19TUEFSQ19ERUxBWV9ICisjZGVmaW5lIF9fU1BBUkNfREVMQVlfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL2NwdWRhdGEuaD4KKworZXh0ZXJuIF9faW5saW5lX18gdm9pZCBfX2RlbGF5KHVuc2lnbmVkIGxvbmcgbG9vcHMpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oImNtcCAlMCwgMFxuXHQiCisJCQkgICAgICIxOiBibmUgMWJcblx0IgorCQkJICAgICAic3ViY2MgJTAsIDEsICUwXG4iIDoKKwkJCSAgICAgIj0mciIgKGxvb3BzKSA6CisJCQkgICAgICIwIiAobG9vcHMpIDoKKwkJCSAgICAgImNjIik7Cit9CisKKy8qIFRoaXMgaXMgdG9vIG1lc3N5IHdpdGggaW5saW5lIGFzbSBvbiB0aGUgU3BhcmMuICovCitleHRlcm4gdm9pZCBfX3VkZWxheSh1bnNpZ25lZCBsb25nIHVzZWNzLCB1bnNpZ25lZCBsb25nIGxwaik7CitleHRlcm4gdm9pZCBfX25kZWxheSh1bnNpZ25lZCBsb25nIG5zZWNzLCB1bnNpZ25lZCBsb25nIGxwaik7CisKKyNpZmRlZiBDT05GSUdfU01QCisjZGVmaW5lIF9fdWRlbGF5X3ZhbAljcHVfZGF0YShzbXBfcHJvY2Vzc29yX2lkKCkpLnVkZWxheV92YWwKKyNlbHNlIC8qIFNNUCAqLworI2RlZmluZSBfX3VkZWxheV92YWwJbG9vcHNfcGVyX2ppZmZ5CisjZW5kaWYgLyogU01QICovCisjZGVmaW5lIHVkZWxheShfX3VzZWNzKQlfX3VkZWxheShfX3VzZWNzLCBfX3VkZWxheV92YWwpCisjZGVmaW5lIG5kZWxheShfX25zZWNzKQlfX25kZWxheShfX25zZWNzLCBfX3VkZWxheV92YWwpCisKKyNlbmRpZiAvKiBkZWZpbmVkKF9fU1BBUkNfREVMQVlfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2RpdjY0LmggYi9pbmNsdWRlL2FzbS1zcGFyYy9kaXY2NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjZDk3OGMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9kaXY2NC5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9kaXY2NC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvZG1hLW1hcHBpbmcuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL2RtYS1tYXBwaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRjNWJiOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL2RtYS1tYXBwaW5nLmgKQEAgLTAsMCArMSwyNSBAQAorI2lmbmRlZiBfQVNNX1NQQVJDX0RNQV9NQVBQSU5HX0gKKyNkZWZpbmUgX0FTTV9TUEFSQ19ETUFfTUFQUElOR19ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2lmZGVmIENPTkZJR19QQ0kKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9kbWEtbWFwcGluZy5oPgorI2Vsc2UKKworc3RhdGljIGlubGluZSB2b2lkICpkbWFfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKKwkJCSBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBpbnQgZmxhZykKK3sKKwlCVUcoKTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRtYV9mcmVlX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCisJCSAgICAgICB2b2lkICp2YWRkciwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlKQoreworCUJVRygpOworfQorCisjZW5kaWYgLyogUENJICovCisKKyNlbmRpZiAvKiBfQVNNX1NQQVJDX0RNQV9NQVBQSU5HX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2RtYS5oIGIvaW5jbHVkZS9hc20tc3BhcmMvZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdlNjM2OAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL2RtYS5oCkBAIC0wLDAgKzEsMjkwIEBACisvKiAkSWQ6IGRtYS5oLHYgMS4zNSAxOTk5LzEyLzI3IDA2OjM3OjA5IGFudG9uIEV4cCAkCisgKiBpbmNsdWRlL2FzbS1zcGFyYy9kbWEuaAorICoKKyAqIENvcHlyaWdodCAxOTk1IChDKSBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCisgKi8KKworI2lmbmRlZiBfQVNNX1NQQVJDX0RNQV9ICisjZGVmaW5lIF9BU01fU1BBUkNfRE1BX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNpbmNsdWRlIDxhc20vdmFjLW9wcy5oPiAgLyogZm9yIGludmFsaWRhdGUncywgZXRjLiAqLworI2luY2x1ZGUgPGFzbS9zYnVzLmg+CisjaW5jbHVkZSA8YXNtL2RlbGF5Lmg+CisjaW5jbHVkZSA8YXNtL29wbGliLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisKK3N0cnVjdCBwYWdlOworZXh0ZXJuIHNwaW5sb2NrX3QgIGRtYV9zcGluX2xvY2s7CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgY2xhaW1fZG1hX2xvY2sodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXNwaW5fbG9ja19pcnFzYXZlKCZkbWFfc3Bpbl9sb2NrLCBmbGFncyk7CisJcmV0dXJuIGZsYWdzOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHJlbGVhc2VfZG1hX2xvY2sodW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkbWFfc3Bpbl9sb2NrLCBmbGFncyk7Cit9CisKKy8qIFRoZXNlIGFyZSBpcnJlbGV2YW50IGZvciBTcGFyYyBETUEsIGJ1dCB3ZSBsZWF2ZSBpdCBpbiBzbyB0aGF0CisgKiB0aGluZ3MgY2FuIGNvbXBpbGUuCisgKi8KKyNkZWZpbmUgTUFYX0RNQV9DSEFOTkVMUyA4CisjZGVmaW5lIE1BWF9ETUFfQUREUkVTUyAgKH4wVUwpCisjZGVmaW5lIERNQV9NT0RFX1JFQUQgICAgMQorI2RlZmluZSBETUFfTU9ERV9XUklURSAgIDIKKworLyogVXNlZnVsIGNvbnN0YW50cyAqLworI2RlZmluZSBTSVpFXzE2TUIgICAgICAoMTYqMTAyNCoxMDI0KQorI2RlZmluZSBTSVpFXzY0SyAgICAgICAoNjQqMTAyNCkKKworLyogU0JVUyBETUEgY29udHJvbGxlciByZWcgb2Zmc2V0cyAqLworI2RlZmluZSBETUFfQ1NSCQkweDAwVUwJCS8qIHJ3ICBETUEgY29udHJvbC9zdGF0dXMgcmVnaXN0ZXIgICAgMHgwMCAgICovCisjZGVmaW5lIERNQV9BRERSCTB4MDRVTAkJLyogcncgIERNQSB0cmFuc2ZlciBhZGRyZXNzIHJlZ2lzdGVyICAweDA0ICAgKi8KKyNkZWZpbmUgRE1BX0NPVU5UCTB4MDhVTAkJLyogcncgIERNQSB0cmFuc2ZlciBjb3VudCByZWdpc3RlciAgICAweDA4ICAgKi8KKyNkZWZpbmUgRE1BX1RFU1QJMHgwY1VMCQkvKiBydyAgRE1BIHRlc3QvZGVidWcgcmVnaXN0ZXIgICAgICAgIDB4MGMgICAqLworCisvKiBEVk1BIGNoaXAgcmV2aXNpb25zICovCitlbnVtIGR2bWFfcmV2IHsKKwlkdm1hcmV2MCwKKwlkdm1hZXNjMSwKKwlkdm1hcmV2MSwKKwlkdm1hcmV2MiwKKwlkdm1hcmV2MywKKwlkdm1hcmV2cGx1cywKKwlkdm1haG1lCit9OworCisjZGVmaW5lIERNQV9IQVNDT1VOVChyZXYpICAoKHJldik9PWR2bWFlc2MxKQorCisvKiBMaW51eCBETUEgaW5mb3JtYXRpb24gc3RydWN0dXJlLCBmaWxsZWQgZHVyaW5nIHByb2JlLiAqLworc3RydWN0IHNidXNfZG1hIHsKKwlzdHJ1Y3Qgc2J1c19kbWEgKm5leHQ7CisJc3RydWN0IHNidXNfZGV2ICpzZGV2OworCXZvaWQgX19pb21lbSAqcmVnczsKKworCS8qIFN0YXR1cywgbWlzYyBpbmZvICovCisJaW50IG5vZGU7ICAgICAgICAgICAgICAgIC8qIFByb20gbm9kZSBmb3IgdGhpcyBETUEgZGV2aWNlICovCisJaW50IHJ1bm5pbmc7ICAgICAgICAgICAgIC8qIEFyZSB3ZSBkb2luZyBETUEgbm93PyAqLworCWludCBhbGxvY2F0ZWQ7ICAgICAgICAgICAvKiBBcmUgd2UgIm93bmVkIiBieSBhbnlvbmUgeWV0PyAqLworCisJLyogVHJhbnNmZXIgaW5mb3JtYXRpb24uICovCisJdW5zaWduZWQgbG9uZyBhZGRyOyAgICAgIC8qIFN0YXJ0IGFkZHJlc3Mgb2YgY3VycmVudCB0cmFuc2ZlciAqLworCWludCBuYnl0ZXM7ICAgICAgICAgICAgICAvKiBTaXplIG9mIGN1cnJlbnQgdHJhbnNmZXIgKi8KKwlpbnQgcmVhbGJ5dGVzOyAgICAgICAgICAgLyogRm9yIHNwbGl0dGluZyB1cCBsYXJnZSB0cmFuc2ZlcnMsIGV0Yy4gKi8KKworCS8qIERNQSByZXZpc2lvbiAqLworCWVudW0gZHZtYV9yZXYgcmV2aXNpb247Cit9OworCitleHRlcm4gc3RydWN0IHNidXNfZG1hICpkbWFfY2hhaW47CisKKy8qIEJyb2tlbiBoYXJkd2FyZS4uLiAqLworI2lmZGVmIENPTkZJR19TVU40CisvKiBIYXZlIHRvIHNvcnQgdGhpcyBvdXQuIERvZXMgcmV2MCB3b3JrIGZpbmUgb24gc3VuNFtjbWRdIHdpdGhvdXQgaXNicm9rZW4/CisgKiBPciBpcyByZXYwIHByZXNlbnQgb25seSBvbiBzdW40IGJveGVzPyAtamogKi8KKyNkZWZpbmUgRE1BX0lTQlJPS0VOKGRtYSkgICAgKChkbWEpLT5yZXZpc2lvbiA9PSBkdm1hcmV2MCB8fCAoZG1hKS0+cmV2aXNpb24gPT0gZHZtYXJldjEpCisjZWxzZQorI2RlZmluZSBETUFfSVNCUk9LRU4oZG1hKSAgICAoKGRtYSktPnJldmlzaW9uID09IGR2bWFyZXYxKQorI2VuZGlmCisjZGVmaW5lIERNQV9JU0VTQzEoZG1hKSAgICAgICgoZG1hKS0+cmV2aXNpb24gPT0gZHZtYWVzYzEpCisKKy8qIE1haW4gcm91dGluZXMgaW4gZG1hLmMgKi8KK2V4dGVybiB2b2lkIGR2bWFfaW5pdChzdHJ1Y3Qgc2J1c19idXMgKik7CisKKy8qIEZpZWxkcyBpbiB0aGUgY29uZF9yZWcgcmVnaXN0ZXIgKi8KKy8qIEZpcnN0LCB0aGUgdmVyc2lvbiBpZGVudGlmaWNhdGlvbiBiaXRzICovCisjZGVmaW5lIERNQV9ERVZJQ0VfSUQgICAgMHhmMDAwMDAwMCAgICAgICAgLyogRGV2aWNlIGlkZW50aWZpY2F0aW9uIGJpdHMgKi8KKyNkZWZpbmUgRE1BX1ZFUlMwICAgICAgICAweDAwMDAwMDAwICAgICAgICAvKiBTdW5yYXkgRE1BIHZlcnNpb24gKi8KKyNkZWZpbmUgRE1BX0VTQ1YxICAgICAgICAweDQwMDAwMDAwICAgICAgICAvKiBETUEgRVNDIFZlcnNpb24gMSAqLworI2RlZmluZSBETUFfVkVSUzEgICAgICAgIDB4ODAwMDAwMDAgICAgICAgIC8qIERNQSByZXYgMSAqLworI2RlZmluZSBETUFfVkVSUzIgICAgICAgIDB4YTAwMDAwMDAgICAgICAgIC8qIERNQSByZXYgMiAqLworI2RlZmluZSBETUFfVkVSSE1FICAgICAgIDB4YjAwMDAwMDAgICAgICAgIC8qIERNQSBobWUgZ2F0ZSBhcnJheSAqLworI2RlZmluZSBETUFfVkVSU1BMVVMgICAgIDB4OTAwMDAwMDAgICAgICAgIC8qIERNQSByZXYgMSBQTFVTICovCisKKyNkZWZpbmUgRE1BX0hORExfSU5UUiAgICAweDAwMDAwMDAxICAgICAgICAvKiBBbiBJUlEgbmVlZHMgdG8gYmUgaGFuZGxlZCAqLworI2RlZmluZSBETUFfSE5ETF9FUlJPUiAgIDB4MDAwMDAwMDIgICAgICAgIC8qIFdlIG5lZWQgdG8gdGFrZSBhbiBlcnJvciAqLworI2RlZmluZSBETUFfRklGT19JU0RSQUlOIDB4MDAwMDAwMGMgICAgICAgIC8qIFRoZSBETUEgRklGTyBpcyBkcmFpbmluZyAqLworI2RlZmluZSBETUFfSU5UX0VOQUIgICAgIDB4MDAwMDAwMTAgICAgICAgIC8qIFR1cm4gb24gaW50ZXJydXB0cyAqLworI2RlZmluZSBETUFfRklGT19JTlYgICAgIDB4MDAwMDAwMjAgICAgICAgIC8qIEludmFsaWRhdGUgdGhlIEZJRk8gKi8KKyNkZWZpbmUgRE1BX0FDQ19TWl9FUlIgICAweDAwMDAwMDQwICAgICAgICAvKiBUaGUgYWNjZXNzIHNpemUgd2FzIGJhZCAqLworI2RlZmluZSBETUFfRklGT19TVERSQUlOIDB4MDAwMDAwNDAgICAgICAgIC8qIERNQV9WRVJTMSBEcmFpbiB0aGUgRklGTyAqLworI2RlZmluZSBETUFfUlNUX1NDU0kgICAgIDB4MDAwMDAwODAgICAgICAgIC8qIFJlc2V0IHRoZSBTQ1NJIGNvbnRyb2xsZXIgKi8KKyNkZWZpbmUgRE1BX1JTVF9FTkVUICAgICBETUFfUlNUX1NDU0kgICAgICAvKiBSZXNldCB0aGUgRU5FVCBjb250cm9sbGVyICovCisjZGVmaW5lIERNQV9SU1RfQlBQICAgICAgRE1BX1JTVF9TQ1NJICAgICAgLyogUmVzZXQgdGhlIEJQUCBjb250cm9sbGVyICovCisjZGVmaW5lIERNQV9TVF9XUklURSAgICAgMHgwMDAwMDEwMCAgICAgICAgLyogd3JpdGUgZnJvbSBkZXZpY2UgdG8gbWVtb3J5ICovCisjZGVmaW5lIERNQV9FTkFCTEUgICAgICAgMHgwMDAwMDIwMCAgICAgICAgLyogRmlyZSB1cCBETUEsIGhhbmRsZSByZXF1ZXN0cyAqLworI2RlZmluZSBETUFfUEVORF9SRUFEICAgIDB4MDAwMDA0MDAgICAgICAgIC8qIERNQV9WRVJTMS8wL1BMVVMgUGVuZGluZyBSZWFkICovCisjZGVmaW5lIERNQV9FU0NfQlVSU1QgICAgMHgwMDAwMDgwMCAgICAgICAgLyogMT0xNmJ5dGUgMD0zMmJ5dGUgKi8KKyNkZWZpbmUgRE1BX1JFQURfQUhFQUQgICAweDAwMDAxODAwICAgICAgICAvKiBETUEgcmVhZCBhaGVhZCBwYXJ0aWFsIGxvbmd3b3JkICovCisjZGVmaW5lIERNQV9EU0JMX1JEX0RSTiAgMHgwMDAwMTAwMCAgICAgICAgLyogTm8gRUMgZHJhaW4gb24gc2xhdmUgcmVhZHMgKi8KKyNkZWZpbmUgRE1BX0JDTlRfRU5BQiAgICAweDAwMDAyMDAwICAgICAgICAvKiBJZiBvbiwgdXNlIHRoZSBieXRlIGNvdW50ZXIgKi8KKyNkZWZpbmUgRE1BX1RFUk1fQ05UUiAgICAweDAwMDA0MDAwICAgICAgICAvKiBUZXJtaW5hbCBjb3VudGVyICovCisjZGVmaW5lIERNQV9TQ1NJX1NCVVM2NCAgMHgwMDAwODAwMCAgICAgICAgLyogSE1FOiBFbmFibGUgNjQtYml0IFNCVVMgbW9kZS4gKi8KKyNkZWZpbmUgRE1BX0NTUl9ESVNBQiAgICAweDAwMDEwMDAwICAgICAgICAvKiBObyBGSUZPIGRyYWlucyBkdXJpbmcgY3NyICovCisjZGVmaW5lIERNQV9TQ1NJX0RJU0FCICAgMHgwMDAyMDAwMCAgICAgICAgLyogTm8gRklGTyBkcmFpbnMgZHVyaW5nIHJlZyAqLworI2RlZmluZSBETUFfRFNCTF9XUl9JTlYgIDB4MDAwMjAwMDAgICAgICAgIC8qIE5vIEVDIGludmFsLiBvbiBzbGF2ZSB3cml0ZXMgKi8KKyNkZWZpbmUgRE1BX0FERF9FTkFCTEUgICAweDAwMDQwMDAwICAgICAgICAvKiBTcGVjaWFsIEVTQyBEVk1BIG9wdGltaXphdGlvbiAqLworI2RlZmluZSBETUFfRV9CVVJTVFMJIDB4MDAwYzAwMDAJICAgLyogRU5FVDogU0JVUyByL3cgYnVyc3QgbWFzayAqLworI2RlZmluZSBETUFfRV9CVVJTVDMyCSAweDAwMDQwMDAwCSAgIC8qIEVORVQ6IFNCVVMgMzIgYnl0ZSByL3cgYnVyc3QgKi8KKyNkZWZpbmUgRE1BX0VfQlVSU1QxNgkgMHgwMDAwMDAwMAkgICAvKiBFTkVUOiBTQlVTIDE2IGJ5dGUgci93IGJ1cnN0ICovCisjZGVmaW5lIERNQV9CUlNUX1NaICAgICAgMHgwMDBjMDAwMCAgICAgICAgLyogU0NTSTogU0JVUyByL3cgYnVyc3Qgc2l6ZSAqLworI2RlZmluZSBETUFfQlJTVDY0ICAgICAgIDB4MDAwODAwMDAgICAgICAgIC8qIFNDU0k6IDY0Ynl0ZSBidXJzdHMgKEhNRSBvbiBVbHRyYVNwYXJjIG9ubHkpICovCisjZGVmaW5lIERNQV9CUlNUMzIgICAgICAgMHgwMDA0MDAwMCAgICAgICAgLyogU0NTSS9CUFA6IDMyYnl0ZSBidXJzdHMgKi8KKyNkZWZpbmUgRE1BX0JSU1QxNiAgICAgICAweDAwMDAwMDAwICAgICAgICAvKiBTQ1NJL0JQUDogMTZieXRlIGJ1cnN0cyAqLworI2RlZmluZSBETUFfQlJTVDAgICAgICAgIDB4MDAwODAwMDAgICAgICAgIC8qIFNDU0k6IG5vIGJ1cnN0cyAobm9uLUhNRSBnYXRlIGFycmF5cykgKi8KKyNkZWZpbmUgRE1BX0FERFJfRElTQUIgICAweDAwMTAwMDAwICAgICAgICAvKiBObyBGSUZPIGRyYWlucyBkdXJpbmcgYWRkciAqLworI2RlZmluZSBETUFfMkNMS1MgICAgICAgIDB4MDAyMDAwMDAgICAgICAgIC8qIEVhY2ggdHJhbnNmZXIgPSAyIGNsb2NrIHRpY2tzICovCisjZGVmaW5lIERNQV8zQ0xLUyAgICAgICAgMHgwMDQwMDAwMCAgICAgICAgLyogRWFjaCB0cmFuc2ZlciA9IDMgY2xvY2sgdGlja3MgKi8KKyNkZWZpbmUgRE1BX0VOX0VORVRBVUkgICBETUFfM0NMS1MgICAgICAgICAvKiBQdXQgbGFuY2UgaW50byBBVUktY2FibGUgbW9kZSAqLworI2RlZmluZSBETUFfQ05UUl9ESVNBQiAgIDB4MDA4MDAwMDAgICAgICAgIC8qIE5vIElSUSB3aGVuIERNQV9URVJNX0NOVFIgc2V0ICovCisjZGVmaW5lIERNQV9BVVRPX05BRERSICAgMHgwMTAwMDAwMCAgICAgICAgLyogVXNlICJhdXRvIG54dCBhZGRyIiBmZWF0dXJlICovCisjZGVmaW5lIERNQV9TQ1NJX09OICAgICAgMHgwMjAwMDAwMCAgICAgICAgLyogRW5hYmxlIFNDU0kgZG1hICovCisjZGVmaW5lIERNQV9CUFBfT04gICAgICAgRE1BX1NDU0lfT04gICAgICAgLyogRW5hYmxlIEJQUCBkbWEgKi8KKyNkZWZpbmUgRE1BX1BBUklUWV9PRkYgICAweDAyMDAwMDAwICAgICAgICAvKiBITUU6IGRpc2FibGUgcGFyaXR5IGNoZWNraW5nICovCisjZGVmaW5lIERNQV9MT0FERURfQUREUiAgMHgwNDAwMDAwMCAgICAgICAgLyogQWRkcmVzcyBoYXMgYmVlbiBsb2FkZWQgKi8KKyNkZWZpbmUgRE1BX0xPQURFRF9OQUREUiAweDA4MDAwMDAwICAgICAgICAvKiBOZXh0IGFkZHJlc3MgaGFzIGJlZW4gbG9hZGVkICovCisjZGVmaW5lIERNQV9SRVNFVF9GQVMzNjYgMHgwODAwMDAwMCAgICAgICAgLyogSE1FOiBBc3NlcnQgUkVTRVQgdG8gRkFTMzY2ICovCisKKy8qIFZhbHVlcyBkZXNjcmliaW5nIHRoZSBidXJzdC1zaXplIHByb3BlcnR5IGZyb20gdGhlIFBST00gKi8KKyNkZWZpbmUgRE1BX0JVUlNUMSAgICAgICAweDAxCisjZGVmaW5lIERNQV9CVVJTVDIgICAgICAgMHgwMgorI2RlZmluZSBETUFfQlVSU1Q0ICAgICAgIDB4MDQKKyNkZWZpbmUgRE1BX0JVUlNUOCAgICAgICAweDA4CisjZGVmaW5lIERNQV9CVVJTVDE2ICAgICAgMHgxMAorI2RlZmluZSBETUFfQlVSU1QzMiAgICAgIDB4MjAKKyNkZWZpbmUgRE1BX0JVUlNUNjQgICAgICAweDQwCisjZGVmaW5lIERNQV9CVVJTVEJJVFMgICAgMHg3ZgorCisvKiBEZXRlcm1pbmUgaGlnaGVzdCBwb3NzaWJsZSBmaW5hbCB0cmFuc2ZlciBhZGRyZXNzIGdpdmVuIGEgYmFzZSAqLworI2RlZmluZSBETUFfTUFYRU5EKGFkZHIpICgweDAxMDAwMDAwVUwtKCgodW5zaWduZWQgbG9uZykoYWRkcikpJjB4MDBmZmZmZmZVTCkpCisKKy8qIFllcywgSSBoYWNrIGEgbG90IG9mIGVsaXNwIGluIG15IHNwYXJlIHRpbWUuLi4gKi8KKyNkZWZpbmUgRE1BX0VSUk9SX1AocmVncykgICgoKChyZWdzKS0+Y29uZF9yZWcpICYgRE1BX0hORExfRVJST1IpKQorI2RlZmluZSBETUFfSVJRX1AocmVncykgICAgKCgoKHJlZ3MpLT5jb25kX3JlZykgJiAoRE1BX0hORExfSU5UUiB8IERNQV9ITkRMX0VSUk9SKSkpCisjZGVmaW5lIERNQV9XUklURV9QKHJlZ3MpICAoKCgocmVncyktPmNvbmRfcmVnKSAmIERNQV9TVF9XUklURSkpCisjZGVmaW5lIERNQV9PRkYocmVncykgICAgICAoKCgocmVncyktPmNvbmRfcmVnKSAmPSAofkRNQV9FTkFCTEUpKSkKKyNkZWZpbmUgRE1BX0lOVFNPRkYocmVncykgICgoKChyZWdzKS0+Y29uZF9yZWcpICY9ICh+RE1BX0lOVF9FTkFCKSkpCisjZGVmaW5lIERNQV9JTlRTT04ocmVncykgICAoKCgocmVncyktPmNvbmRfcmVnKSB8PSAoRE1BX0lOVF9FTkFCKSkpCisjZGVmaW5lIERNQV9QVU5URklGTyhyZWdzKSAoKCgocmVncyktPmNvbmRfcmVnKSB8PSBETUFfRklGT19JTlYpKQorI2RlZmluZSBETUFfU0VUU1RBUlQocmVncywgYWRkcikgICgoKChyZWdzKS0+c3RfYWRkcikgPSAoY2hhciAqKSBhZGRyKSkKKyNkZWZpbmUgRE1BX0JFR0lORE1BX1cocmVncykgXAorICAgICAgICAoKCgocmVncyktPmNvbmRfcmVnIHw9IChETUFfU1RfV1JJVEV8RE1BX0VOQUJMRXxETUFfSU5UX0VOQUIpKSkpCisjZGVmaW5lIERNQV9CRUdJTkRNQV9SKHJlZ3MpIFwKKyAgICAgICAgKCgoKHJlZ3MpLT5jb25kX3JlZyB8PSAoKERNQV9FTkFCTEV8RE1BX0lOVF9FTkFCKSYofkRNQV9TVF9XUklURSkpKSkpCisKKy8qIEZvciBjZXJ0YWluIERNQSBjaGlwcywgd2UgbmVlZCB0byBkaXNhYmxlIGludHMgdXBvbiBpcnEgZW50cnkKKyAqIGFuZCB0dXJuIHRoZW0gYmFjayBvbiB3aGVuIHdlIGFyZSBkb25lLiAgU28gaW4gYW55IEVTUCBpbnRlcnJ1cHQKKyAqIGhhbmRsZXIgeW91ICptdXN0KiBjYWxsIERNQV9JUlFfRU5UUlkgdXBvbiBlbnRyeSBhbmQgRE1BX0lSUV9FWElUCisgKiB3aGVuIGxlYXZpbmcgdGhlIGhhbmRsZXIuICBZb3UgaGF2ZSBiZWVuIHdhcm5lZC4uLgorICovCisjZGVmaW5lIERNQV9JUlFfRU5UUlkoZG1hLCBkcmVncykgZG8geyBcCisgICAgICAgIGlmKERNQV9JU0JST0tFTihkbWEpKSBETUFfSU5UU09GRihkcmVncyk7IFwKKyAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgRE1BX0lSUV9FWElUKGRtYSwgZHJlZ3MpIGRvIHsgXAorCWlmKERNQV9JU0JST0tFTihkbWEpKSBETUFfSU5UU09OKGRyZWdzKTsgXAorICAgfSB3aGlsZSgwKQorCisjaWYgMAkvKiBQMyB0aGlzIHN0dWZmIGlzIGlubGluZSBpbiBsZWRtYS5jOmluaXRfcmVzdGFydF9sZWRtYSgpICovCisvKiBQYXVzZSB1bnRpbCBjb3VudGVyIHJ1bnMgb3V0IG9yIEJJVCBpc24ndCBzZXQgaW4gdGhlIERNQSBjb25kaXRpb24KKyAqIHJlZ2lzdGVyLgorICovCitleHRlcm4gX19pbmxpbmVfXyB2b2lkIHNwYXJjX2RtYV9wYXVzZShzdHJ1Y3Qgc3BhcmNfZG1hX3JlZ2lzdGVycyAqcmVncywKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBiaXQpCit7CisJaW50IGN0ciA9IDUwMDAwOyAgIC8qIExldCdzIGZpbmQgc29tZSBidWdzIDspICovCisKKwkvKiBCdXN5IHdhaXQgdW50aWwgdGhlIGJpdCBpcyBub3Qgc2V0IGFueSBtb3JlICovCisJd2hpbGUoKHJlZ3MtPmNvbmRfcmVnJmJpdCkgJiYgKGN0cj4wKSkgeworCQljdHItLTsKKwkJX19kZWxheSg1KTsKKwl9CisKKwkvKiBDaGVjayBmb3IgYm9ndXMgb3V0Y29tZS4gKi8KKwlpZighY3RyKQorCQlwYW5pYygiRE1BIHRpbWVvdXQiKTsKK30KKworLyogUmVzZXQgdGhlIGZyaWdnaW4nIHRoaW5nLi4uICovCisjZGVmaW5lIERNQV9SRVNFVChkbWEpIGRvIHsgXAorCXN0cnVjdCBzcGFyY19kbWFfcmVnaXN0ZXJzICpyZWdzID0gZG1hLT5yZWdzOyAgICAgICAgICAgICAgICAgICAgICBcCisJLyogTGV0IHRoZSBjdXJyZW50IEZJRk8gZHJhaW4gaXRzZWxmICovICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlzcGFyY19kbWFfcGF1c2UocmVncywgKERNQV9GSUZPX0lTRFJBSU4pKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAorCS8qIFJlc2V0IHRoZSBsb2dpYyAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJcmVncy0+Y29uZF9yZWcgfD0gKERNQV9SU1RfU0NTSSk7ICAgICAvKiBhc3NlcnQgKi8gICAgICAgICAgICAgICAgIFwKKwlfX2RlbGF5KDQwMCk7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxldCB0aGUgYml0cyBzZXQgOykgKi8gICAgXAorCXJlZ3MtPmNvbmRfcmVnICY9IH4oRE1BX1JTVF9TQ1NJKTsgICAgLyogZGUtYXNzZXJ0ICovICAgICAgICAgICAgICBcCisJc3BhcmNfZG1hX2VuYWJsZV9pbnRlcnJ1cHRzKHJlZ3MpOyAgICAvKiBSZS1lbmFibGUgaW50ZXJydXB0cyAqLyAgIFwKKwkvKiBFbmFibGUgRkFTVCB0cmFuc2ZlcnMgaWYgYXZhaWxhYmxlICovICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWlmKGRtYS0+cmV2aXNpb24+ZHZtYXJldjEpIHJlZ3MtPmNvbmRfcmVnIHw9IERNQV8zQ0xLUzsgICAgICAgICAgICBcCisJZG1hLT5ydW5uaW5nID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gd2hpbGUoMCkKKyNlbmRpZgorCisjZGVmaW5lIGZvcl9lYWNoX2R2bWEoZG1hKSBcCisgICAgICAgIGZvcigoZG1hKSA9IGRtYV9jaGFpbjsgKGRtYSk7IChkbWEpID0gKGRtYSktPm5leHQpCisKK2V4dGVybiBpbnQgZ2V0X2RtYV9saXN0KGNoYXIgKik7CitleHRlcm4gaW50IHJlcXVlc3RfZG1hKHVuc2lnbmVkIGludCwgX19jb25zdF9fIGNoYXIgKik7CitleHRlcm4gdm9pZCBmcmVlX2RtYSh1bnNpZ25lZCBpbnQpOworCisvKiBGcm9tIFBDSSAqLworCisjaWZkZWYgQ09ORklHX1BDSQorZXh0ZXJuIGludCBpc2FfZG1hX2JyaWRnZV9idWdneTsKKyNlbHNlCisjZGVmaW5lIGlzYV9kbWFfYnJpZGdlX2J1Z2d5CSgwKQorI2VuZGlmCisKKy8qIFJvdXRpbmVzIGZvciBkYXRhIHRyYW5zZmVyIGJ1ZmZlcnMuICovCitCVEZJWFVQREVGX0NBTEwoY2hhciAqLCBtbXVfbG9ja2FyZWEsIGNoYXIgKiwgdW5zaWduZWQgbG9uZykKK0JURklYVVBERUZfQ0FMTCh2b2lkLCAgIG1tdV91bmxvY2thcmVhLCBjaGFyICosIHVuc2lnbmVkIGxvbmcpCisKKyNkZWZpbmUgbW11X2xvY2thcmVhKHZhZGRyLGxlbikgQlRGSVhVUF9DQUxMKG1tdV9sb2NrYXJlYSkodmFkZHIsbGVuKQorI2RlZmluZSBtbXVfdW5sb2NrYXJlYSh2YWRkcixsZW4pIEJURklYVVBfQ0FMTChtbXVfdW5sb2NrYXJlYSkodmFkZHIsbGVuKQorCisvKiBUaGVzZSBhcmUgaW1wbGVtZW50YXRpb25zIGZvciBzYnVzX21hcF9zZy9zYnVzX3VubWFwX3NnLi4uIGNvbGxhcHNlIGxhdGVyICovCitCVEZJWFVQREVGX0NBTEwoX191MzIsIG1tdV9nZXRfc2NzaV9vbmUsIGNoYXIgKiwgdW5zaWduZWQgbG9uZywgc3RydWN0IHNidXNfYnVzICpzYnVzKQorQlRGSVhVUERFRl9DQUxMKHZvaWQsICBtbXVfZ2V0X3Njc2lfc2dsLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKiwgaW50LCBzdHJ1Y3Qgc2J1c19idXMgKnNidXMpCitCVEZJWFVQREVGX0NBTEwodm9pZCwgIG1tdV9yZWxlYXNlX3Njc2lfb25lLCBfX3UzMiwgdW5zaWduZWQgbG9uZywgc3RydWN0IHNidXNfYnVzICpzYnVzKQorQlRGSVhVUERFRl9DQUxMKHZvaWQsICBtbXVfcmVsZWFzZV9zY3NpX3NnbCwgc3RydWN0IHNjYXR0ZXJsaXN0ICosIGludCwgc3RydWN0IHNidXNfYnVzICpzYnVzKQorCisjZGVmaW5lIG1tdV9nZXRfc2NzaV9vbmUodmFkZHIsbGVuLHNidXMpIEJURklYVVBfQ0FMTChtbXVfZ2V0X3Njc2lfb25lKSh2YWRkcixsZW4sc2J1cykKKyNkZWZpbmUgbW11X2dldF9zY3NpX3NnbChzZyxzeixzYnVzKSBCVEZJWFVQX0NBTEwobW11X2dldF9zY3NpX3NnbCkoc2csc3osc2J1cykKKyNkZWZpbmUgbW11X3JlbGVhc2Vfc2NzaV9vbmUodmFkZHIsbGVuLHNidXMpIEJURklYVVBfQ0FMTChtbXVfcmVsZWFzZV9zY3NpX29uZSkodmFkZHIsbGVuLHNidXMpCisjZGVmaW5lIG1tdV9yZWxlYXNlX3Njc2lfc2dsKHNnLHN6LHNidXMpIEJURklYVVBfQ0FMTChtbXVfcmVsZWFzZV9zY3NpX3NnbCkoc2csc3osc2J1cykKKworLyoKKyAqIG1tdV9tYXAvdW5tYXAgYXJlIHByb3ZpZGVkIGJ5IGlvbW11L2lvdW5pdDsgSW52YWxpZCB0byBjYWxsIG9uIElJZXAuCisgKgorICogVGhlIG1tdV9tYXBfZG1hX2FyZWEgZXN0YWJsaXNoZXMgdHdvIG1hcHBpbmdzIGluIG9uZSBnby4KKyAqIFRoZXNlIG1hcHBpbmdzIHBvaW50IHRvIHBhZ2VzIG5vcm1hbGx5IG1hcHBlZCBhdCAndmEnIChsaW5lYXIgYWRkcmVzcykuCisgKiBGaXJzdCBtYXBwaW5nIGlzIGZvciBDUFUgdmlzaWJsZSBhZGRyZXNzIGF0ICdhJywgdW5jYWNoZWQuCisgKiBUaGlzIGlzIGFuIGFsaWFzLCBidXQgaXQgd29ya3MgYmVjYXVzZSBpdCBpcyBhbiB1bmNhY2hlZCBtYXBwaW5nLgorICogU2Vjb25kIG1hcHBpbmcgaXMgZm9yIGRldmljZSB2aXNpYmxlIGFkZHJlc3MsIG9yICJidXMiIGFkZHJlc3MuCisgKiBUaGUgYnVzIGFkZHJlc3MgaXMgcmV0dXJuZWQgYXQgJypwYmEnLgorICoKKyAqIFRoZXNlIGZ1bmN0aW9ucyBzZWVtIGRpc3RpbmN0LCBidXQgYXJlIGhhcmQgdG8gc3BsaXQuIE9uIHN1bjRjLAorICogYXQgbGVhc3QgZm9yIG5vdywgJ2EnIGlzIGVxdWFsIHRvIGJ1cyBhZGRyZXNzLCBhbmQgcmV0dXJlZCBpbiAqcGJhLgorICogT24gc3VuNG0sIHBhZ2UgYXR0cmlidXRlcyBkZXBlbmQgb24gdGhlIENQVSB0eXBlLCBzbyB3ZSBoYXZlIHRvCisgKiBrbm93IGlmIHdlIGFyZSBtYXBwaW5nIFJBTSBvciBJL08sIHNvIGl0IGhhcyB0byBiZSBhbiBhZGRpdGlvbmFsIGFyZ3VtZW50CisgKiB0byBhIHNlcGFyYXRlIG1hcHBpbmcgZnVuY3Rpb24gZm9yIENQVSB2aXNpYmxlIG1hcHBpbmdzLgorICovCitCVEZJWFVQREVGX0NBTEwoaW50LCAgbW11X21hcF9kbWFfYXJlYSwgZG1hX2FkZHJfdCAqLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBpbnQgbGVuKQorQlRGSVhVUERFRl9DQUxMKHN0cnVjdCBwYWdlICosIG1tdV90cmFuc2xhdGVfZHZtYSwgdW5zaWduZWQgbG9uZyBidXNhKQorQlRGSVhVUERFRl9DQUxMKHZvaWQsICBtbXVfdW5tYXBfZG1hX2FyZWEsIHVuc2lnbmVkIGxvbmcgYnVzYSwgaW50IGxlbikKKworI2RlZmluZSBtbXVfbWFwX2RtYV9hcmVhKHBiYSx2YSxhLGxlbikgQlRGSVhVUF9DQUxMKG1tdV9tYXBfZG1hX2FyZWEpKHBiYSx2YSxhLGxlbikKKyNkZWZpbmUgbW11X3VubWFwX2RtYV9hcmVhKGJhLGxlbikgQlRGSVhVUF9DQUxMKG1tdV91bm1hcF9kbWFfYXJlYSkoYmEsbGVuKQorI2RlZmluZSBtbXVfdHJhbnNsYXRlX2R2bWEoYmEpICAgICBCVEZJWFVQX0NBTEwobW11X3RyYW5zbGF0ZV9kdm1hKShiYSkKKworI2VuZGlmIC8qICEoX0FTTV9TUEFSQ19ETUFfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2VidXMuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL2VidXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDZhOTk3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvZWJ1cy5oCkBAIC0wLDAgKzEsOTggQEAKKy8qICRJZDogZWJ1cy5oLHYgMS4yIDE5OTkvMDkvMTEgMjM6MDU6NTUgemFpdGNldiBFeHAgJAorICogZWJ1cy5oOiBQQ0kgdG8gRWJ1cyBwc2V1ZG8gZHJpdmVyIHNvZnR3YXJlIHN0YXRlLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NyBFZGRpZSBDLiBEb3N0IChlY2RAc2t5bmV0LmJlKSAKKyAqCisgKiBBZG9wdGVkIGZvciBzcGFyYyBieSBWLiBSb2dhbm92IGFuZCBHLiBSYWlrby4KKyAqLworCisjaWZuZGVmIF9fU1BBUkNfRUJVU19ICisjZGVmaW5lIF9fU1BBUkNfRUJVU19ICisKKyNpZm5kZWYgX0xJTlVYX0lPUE9SVF9ICisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDxhc20vb3BsaWIuaD4KKworc3RydWN0IGxpbnV4X2VidXNfY2hpbGQgeworCXN0cnVjdCBsaW51eF9lYnVzX2NoaWxkCQkqbmV4dDsKKwlzdHJ1Y3QgbGludXhfZWJ1c19kZXZpY2UJKnBhcmVudDsKKwlzdHJ1Y3QgbGludXhfZWJ1cwkJKmJ1czsKKwlpbnQJCQkJIHByb21fbm9kZTsKKwljaGFyCQkJCSBwcm9tX25hbWVbNjRdOworCXN0cnVjdCByZXNvdXJjZQkJCSByZXNvdXJjZVtQUk9NUkVHX01BWF07CisJaW50CQkJCSBudW1fYWRkcnM7CisJdW5zaWduZWQgaW50CQkJIGlycXNbUFJPTUlOVFJfTUFYXTsKKwlpbnQJCQkJIG51bV9pcnFzOworfTsKKworc3RydWN0IGxpbnV4X2VidXNfZGV2aWNlIHsKKwlzdHJ1Y3QgbGludXhfZWJ1c19kZXZpY2UJKm5leHQ7CisJc3RydWN0IGxpbnV4X2VidXNfY2hpbGQJCSpjaGlsZHJlbjsKKwlzdHJ1Y3QgbGludXhfZWJ1cwkJKmJ1czsKKwlpbnQJCQkJIHByb21fbm9kZTsKKwljaGFyCQkJCSBwcm9tX25hbWVbNjRdOworCXN0cnVjdCByZXNvdXJjZQkJCSByZXNvdXJjZVtQUk9NUkVHX01BWF07CisJaW50CQkJCSBudW1fYWRkcnM7CisJdW5zaWduZWQgaW50CQkJIGlycXNbUFJPTUlOVFJfTUFYXTsKKwlpbnQJCQkJIG51bV9pcnFzOworfTsKKworc3RydWN0IGxpbnV4X2VidXMgeworCXN0cnVjdCBsaW51eF9lYnVzCQkqbmV4dDsKKwlzdHJ1Y3QgbGludXhfZWJ1c19kZXZpY2UJKmRldmljZXM7CisJc3RydWN0IGxpbnV4X3BibV9pbmZvCQkqcGFyZW50OworCXN0cnVjdCBwY2lfZGV2CQkJKnNlbGY7CisJaW50CQkJCSBwcm9tX25vZGU7CisJY2hhcgkJCQkgcHJvbV9uYW1lWzY0XTsKKwlzdHJ1Y3QgbGludXhfcHJvbV9lYnVzX3JhbmdlcwkgZWJ1c19yYW5nZXNbUFJPTVJFR19NQVhdOworCWludAkJCQkgbnVtX2VidXNfcmFuZ2VzOworfTsKKworc3RydWN0IGxpbnV4X2VidXNfZG1hIHsKKwl1bnNpZ25lZCBpbnQgZGNzcjsKKwl1bnNpZ25lZCBpbnQgZGFjcjsKKwl1bnNpZ25lZCBpbnQgZGJjcjsKK307CisKKyNkZWZpbmUgRUJVU19EQ1NSX0lOVF9QRU5ECTB4MDAwMDAwMDEKKyNkZWZpbmUgRUJVU19EQ1NSX0VSUl9QRU5ECTB4MDAwMDAwMDIKKyNkZWZpbmUgRUJVU19EQ1NSX0RSQUlOCQkweDAwMDAwMDA0CisjZGVmaW5lIEVCVVNfRENTUl9JTlRfRU4JMHgwMDAwMDAxMAorI2RlZmluZSBFQlVTX0RDU1JfUkVTRVQJCTB4MDAwMDAwODAKKyNkZWZpbmUgRUJVU19EQ1NSX1dSSVRFCQkweDAwMDAwMTAwCisjZGVmaW5lIEVCVVNfRENTUl9FTl9ETUEJMHgwMDAwMDIwMAorI2RlZmluZSBFQlVTX0RDU1JfQ1lDX1BFTkQJMHgwMDAwMDQwMAorI2RlZmluZSBFQlVTX0RDU1JfRElBR19SRF9ET05FCTB4MDAwMDA4MDAKKyNkZWZpbmUgRUJVU19EQ1NSX0RJQUdfV1JfRE9ORQkweDAwMDAxMDAwCisjZGVmaW5lIEVCVVNfRENTUl9FTl9DTlQJMHgwMDAwMjAwMAorI2RlZmluZSBFQlVTX0RDU1JfVEMJCTB4MDAwMDQwMDAKKyNkZWZpbmUgRUJVU19EQ1NSX0RJU19DU1JfRFJOCTB4MDAwMTAwMDAKKyNkZWZpbmUgRUJVU19EQ1NSX0JVUlNUX1NaX01BU0sJMHgwMDBjMDAwMAorI2RlZmluZSBFQlVTX0RDU1JfQlVSU1RfU1pfMQkweDAwMDgwMDAwCisjZGVmaW5lIEVCVVNfRENTUl9CVVJTVF9TWl80CTB4MDAwMDAwMDAKKyNkZWZpbmUgRUJVU19EQ1NSX0JVUlNUX1NaXzgJMHgwMDA0MDAwMAorI2RlZmluZSBFQlVTX0RDU1JfQlVSU1RfU1pfMTYJMHgwMDBjMDAwMAorI2RlZmluZSBFQlVTX0RDU1JfRElBR19FTgkweDAwMTAwMDAwCisjZGVmaW5lIEVCVVNfRENTUl9ESVNfRVJSX1BFTkQJMHgwMDQwMDAwMAorI2RlZmluZSBFQlVTX0RDU1JfVENJX0RJUwkweDAwODAwMDAwCisjZGVmaW5lIEVCVVNfRENTUl9FTl9ORVhUCTB4MDEwMDAwMDAKKyNkZWZpbmUgRUJVU19EQ1NSX0RNQV9PTgkweDAyMDAwMDAwCisjZGVmaW5lIEVCVVNfRENTUl9BX0xPQURFRAkweDA0MDAwMDAwCisjZGVmaW5lIEVCVVNfRENTUl9OQV9MT0FERUQJMHgwODAwMDAwMAorI2RlZmluZSBFQlVTX0RDU1JfREVWX0lEX01BU0sJMHhmMDAwMDAwMAorCitleHRlcm4gc3RydWN0IGxpbnV4X2VidXMJCSplYnVzX2NoYWluOworCitleHRlcm4gdm9pZCBlYnVzX2luaXQodm9pZCk7CisKKyNkZWZpbmUgZm9yX2VhY2hfZWJ1cyhidXMpCQkJCQkJXAorICAgICAgICBmb3IoKGJ1cykgPSBlYnVzX2NoYWluOyAoYnVzKTsgKGJ1cykgPSAoYnVzKS0+bmV4dCkKKworI2RlZmluZSBmb3JfZWFjaF9lYnVzZGV2KGRldiwgYnVzKQkJCQkJXAorICAgICAgICBmb3IoKGRldikgPSAoYnVzKS0+ZGV2aWNlczsgKGRldik7IChkZXYpID0gKGRldiktPm5leHQpCisKKyNkZWZpbmUgZm9yX2VhY2hfZWRldmNoaWxkKGRldiwgY2hpbGQpCQkJCQlcCisgICAgICAgIGZvcigoY2hpbGQpID0gKGRldiktPmNoaWxkcmVuOyAoY2hpbGQpOyAoY2hpbGQpID0gKGNoaWxkKS0+bmV4dCkKKworI2VuZGlmIC8qICEoX19TUEFSQ19FQlVTX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9lY2MuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL2VjYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlMjdjZWMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9lY2MuaApAQCAtMCwwICsxLDEyMiBAQAorLyogJElkOiBlY2MuaCx2IDEuMyAxOTk2LzA0LzI1IDA2OjEyOjU3IGRhdmVtIEV4cCAkCisgKiBlY2MuaDogRGVmaW5pdGlvbnMgYW5kIGRlZmluZXMgZm9yIHRoZSBleHRlcm5hbCBjYWNoZS9tZW1vcnkKKyAqICAgICAgICBjb250cm9sbGVyIG9uIHRoZSBzdW40bS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQorICovCisKKyNpZm5kZWYgX1NQQVJDX0VDQ19ICisjZGVmaW5lIF9TUEFSQ19FQ0NfSAorCisvKiBUaGVzZSByZWdpc3RlcnMgYXJlIGFjY2Vzc2VkIHRocm91Z2ggdGhlIFNSTU1VIHBhc3N0aHJvdWdoIEFTSSAweDIwICovCisjZGVmaW5lIEVDQ19FTkFCTEUgICAgIDB4MDAwMDAwMDAgICAgICAgLyogRUNDIGVuYWJsZSByZWdpc3RlciAqLworI2RlZmluZSBFQ0NfRlNUQVRVUyAgICAweDAwMDAwMDA4ICAgICAgIC8qIEVDQyBmYXVsdCBzdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgRUNDX0ZBRERSICAgICAgMHgwMDAwMDAxMCAgICAgICAvKiBFQ0MgZmF1bHQgYWRkcmVzcyByZWdpc3RlciAqLworI2RlZmluZSBFQ0NfRElHTk9TVElDICAweDAwMDAwMDE4ICAgICAgIC8qIEVDQyBkaWFnbm9zdGljcyByZWdpc3RlciAqLworI2RlZmluZSBFQ0NfTUJBRU5BQiAgICAweDAwMDAwMDIwICAgICAgIC8qIE1CdXMgYXJiaXRlciBlbmFibGUgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgRUNDX0RNRVNHICAgICAgMHgwMDAwMTAwMCAgICAgICAvKiBEaWFnbm9zdGljIG1lc3NhZ2UgcGFzc2luZyBhcmVhICovCisKKy8qIEVDQyBNQnVzIEFyYml0ZXIgRW5hYmxlIHJlZ2lzdGVyOgorICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHwgICAgICAgICAgICAgIHxTQlVTfE1PRDN8TU9EMnxNT0QxfFJTVnwKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAzMSAgICAgICAgICAgNSAgIDQgICAzICAgIDIgICAgMSAgICAwCisgKgorICogU0JVUzogRW5hYmxlIE1CdXMgQXJiaXRlciBvbiB0aGUgU0J1cyAwPW9mZiAxPW9uCisgKiBNT0QzOiBFbmFibGUgTUJ1cyBBcmJpdGVyIG9uIE1CdXMgbW9kdWxlIDMgIDA9b2ZmIDE9b24KKyAqIE1PRDI6IEVuYWJsZSBNQnVzIEFyYml0ZXIgb24gTUJ1cyBtb2R1bGUgMiAgMD1vZmYgMT1vbgorICogTU9EMTogRW5hYmxlIE1CdXMgQXJiaXRlciBvbiBNQnVzIG1vZHVsZSAxICAwPW9mZiAxPW9uCisgKi8KKworI2RlZmluZSBFQ0NfTUJBRV9TQlVTICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEVDQ19NQkFFX01PRDMgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgRUNDX01CQUVfTU9EMiAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBFQ0NfTUJBRV9NT0QxICAgICAweDAwMDAwMDAyIAorCisvKiBFQ0MgRmF1bHQgQ29udHJvbCBSZWdpc3RlciBsYXlvdXQ6CisgKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHwgICAgUkVTViAgIHwgRUNIRUNLIHwgRUlOVCB8CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIDMxICAgICAgICAyICAgICAxICAgICAgIDAKKyAqCisgKiBFQ0hFQ0s6ICBFbmFibGUgRUNDIGNoZWNraW5nLiAgMD1vZmYgMT1vbgorICogRUlOVDogIEVuYWJsZSBJbnRlcnJ1cHRzIGZvciBjb3JyZWN0YWJsZSBlcnJvcnMuIDA9b2ZmIDE9b24KKyAqLyAKKyNkZWZpbmUgRUNDX0ZDUl9DSEVDSyAgICAweDAwMDAwMDAyCisjZGVmaW5lIEVDQ19GQ1JfSU5URU5BQiAgMHgwMDAwMDAwMQorCisvKiBFQ0MgRmF1bHQgQWRkcmVzcyBSZWdpc3RlciBaZXJvIGxheW91dDoKKyAqCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogfCBNSUQgfCBTIHwgUlNWIHwgIFZBICAgfCBCTSB8QVR8IEN8IFNaIHxUWVB8IFBBRERSIHwKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgMzEtMjggIDI3IDI2LTIyICAyMS0xNCAgIDEzICAxMiAxMSAxMC04IDctNCAgIDMtMAorICoKKyAqIE1JRDogTW9kdWxlSUQgb2YgdGhlIGZhdWx0aW5nIHByb2Nlc3Nvci4gaWUuIHdobyBkaWQgaXQ/CisgKiBTOiBTdXBlcnZpc29yL1ByaXZpbGVnZWQgYWNjZXNzPyAwPW5vIDE9eWVzCisgKiBWQTogQml0cyAxOS0xMiBvZiB0aGUgdmlydHVhbCBmYXVsdGluZyBhZGRyZXNzLCB0aGVzZSBhcmUgdGhlCisgKiAgICAgc3VwZXJzZXQgYml0cyBpbiB0aGUgdmlydHVhbCBjYWNoZSBhbmQgY2FuIGJlIHVzZWQgZm9yCisgKiAgICAgYSBmbHVzaCBvcGVyYXRpb24gaWYgbmVjZXNzYXJ5LgorICogQk06IEJvb3QgbW9kZT8gMD1ubyAxPXllcyAgVGhpcyBpcyBqdXN0IGxpa2UgdGhlIFNSTU1VIGJvb3QKKyAqICAgICBtb2RlIGJpdC4KKyAqIEFUOiBEaWQgdGhpcyBmYXVsdCBoYXBwZW4gZHVyaW5nIGFuIGF0b21pYyBpbnN0cnVjdGlvbj8gMD1ubworICogICAgIDE9eWVzLiAgVGhpcyBtZWFucyBlaXRoZXIgYW4gJ2xkc3R1Yicgb3IgJ3N3YXAnIGluc3RydWN0aW9uCisgKiAgICAgd2FzIGluIHByb2dyZXNzIChidXQgbm90IGZpbmlzaGVkKSB3aGVuIHRoaXMgZmF1bHQgaGFwcGVuZWQuCisgKiAgICAgVGhpcyBpbmRpY2F0ZWQgd2hldGhlciB0aGUgYnVzIHdhcyBsb2NrZWQgd2hlbiB0aGUgZmF1bHQKKyAqICAgICBvY2N1cnJlZC4KKyAqIEM6IERpZCB0aGUgcHRlIGZvciB0aGlzIGFjY2VzcyBpbmRpY2F0ZSB0aGF0IGl0IHdhcyBjYWNoZWFibGU/CisgKiAgICAwPW5vIDE9eWVzCisgKiBTWjogVGhlIHNpemUgb2YgdGhlIHRyYW5zYWN0aW9uLgorICogVFlQOiBUaGUgdHJhbnNhY3Rpb24gdHlwZS4KKyAqIFBBRERSOiBCaXRzIDM1LTMyIG9mIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGZvciB0aGUgZmF1bHQuCisgKi8KKyNkZWZpbmUgRUNDX0ZBRERSMF9NSURNQVNLICAgMHhmMDAwMDAwMAorI2RlZmluZSBFQ0NfRkFERFIwX1MgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIEVDQ19GQUREUjBfVkFERFIgICAgIDB4MDAzZmMwMDAKKyNkZWZpbmUgRUNDX0ZBRERSMF9CTU9ERSAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBFQ0NfRkFERFIwX0FUT01JQyAgICAweDAwMDAxMDAwCisjZGVmaW5lIEVDQ19GQUREUjBfQ0FDSEUgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgRUNDX0ZBRERSMF9TSVpFICAgICAgMHgwMDAwMDcwMAorI2RlZmluZSBFQ0NfRkFERFIwX1RZUEUgICAgICAweDAwMDAwMGYwCisjZGVmaW5lIEVDQ19GQUREUjBfUEFERFIgICAgIDB4MDAwMDAwMGYKKworLyogRUNDIEZhdWx0IEFkZHJlc3MgUmVnaXN0ZXIgT25lIGxheW91dDoKKyAqCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiB8ICAgICAgICAgIFBoeXNpY2FsIEFkZHJlc3MgMzEtMCAgICB8CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgMzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorICoKKyAqIFlvdSBnZXQgdGhlIHVwcGVyIDQgYml0cyBvZiB0aGUgcGh5c2ljYWwgYWRkcmVzcyBmcm9tIHRoZQorICogUEFERFIgZmllbGQgaW4gRUNDIEZhdWx0IEFkZHJlc3MgWmVybyByZWdpc3Rlci4KKyAqLworCisvKiBFQ0MgRmF1bHQgU3RhdHVzIFJlZ2lzdGVyIGxheW91dDoKKyAqCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiB8IFJFU1Z8QzJFfE1VTFR8U1lORFJPTUV8RFdPUkR8VU5DfFRJTUVPfEJTfEN8CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgMzEtMTggIDE3ICAxNiAgICAxNS04ICAgIDctNCAgIDMgICAgMiAgICAxIDAKKyAqCisgKiBDMkU6IEEgQzIgZ3JhcGhpY3MgZXJyb3Igb2NjdXJyZWQuIDA9bm8gMT15ZXMgKFNTMTAgb25seSkKKyAqIE1VTFQ6IE11bHRpcGxlIGVycm9ycyBvY2N1cnJlZCA7LU8gMD1ubyAxPXByb21fcGFuaWMoeWVzKQorICogU1lORFJPTUU6IENvbnRyb2xsZXIgaXMgbWVudGFsbHkgdW5zdGFibGUuCisgKiBEV09SRDoKKyAqIFVOQzogVW5jb3JyZWN0YWJsZSBlcnJvci4gIDA9bm8gMT15ZXMKKyAqIFRJTUVPOiBUaW1lb3V0IG9jY3VycmVkLiAwPW5vIDE9eWVzCisgKiBCUzogQzIgZ3JhcGhpY3MgYmFkIHNsb3QgYWNjZXNzLiAwPW5vIDE9eWVzIChTUzEwIG9ubHkpCisgKiBDOiBDb3JyZWN0YWJsZSBlcnJvcj8gMD1ubyAxPXllcworICovCisKKyNkZWZpbmUgRUNDX0ZTUl9DMkVSUiAgICAweDAwMDIwMDAwCisjZGVmaW5lIEVDQ19GU1JfTVVMVCAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBFQ0NfRlNSX1NZTkQgICAgIDB4MDAwMGZmMDAKKyNkZWZpbmUgRUNDX0ZTUl9EV09SRCAgICAweDAwMDAwMGYwCisjZGVmaW5lIEVDQ19GU1JfVU5DICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBFQ0NfRlNSX1RJTUVPICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgRUNDX0ZTUl9CQURTTE9UICAweDAwMDAwMDAyCisjZGVmaW5lIEVDQ19GU1JfQyAgICAgICAgMHgwMDAwMDAwMQorCisjZW5kaWYgLyogIShfU1BBUkNfRUNDX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9lZXByb20uaCBiL2luY2x1ZGUvYXNtLXNwYXJjL2VlcHJvbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4ZmY3NDkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9lZXByb20uaApAQCAtMCwwICsxLDkgQEAKKy8qICRJZDogZWVwcm9tLmgsdiAxLjMgMTk5NS8xMS8yNSAwMjozMTozOCBkYXZlbSBFeHAgJAorICogZWVwcm9tLmg6ICBEZWZpbml0aW9ucyBmb3IgdGhlIFN1biBlZXByb20uCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKKyAqLworCisvKiBUaGUgRUVQUk9NIGFuZCB0aGUgTW9zdGVrIE1rNDh0MDIgdXNlIHRoZSBzYW1lIElPIGFkZHJlc3Mgc3BhY2UKKyAqIGZvciB0aGVpciByZWdpc3RlcnMvZGF0YSBhcmVhcy4gIFRoZSBJRFBST00gbGl2ZXMgaGVyZSB0b28uCisgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2VsZi5oIGIvaW5jbHVkZS9hc20tc3BhcmMvZWxmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE3MWQ3YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL2VsZi5oCkBAIC0wLDAgKzEsMTczIEBACisvKiAkSWQ6IGVsZi5oLHYgMS4yMiAyMDAwLzA3LzEyIDAxOjI3OjA4IGRhdmVtIEV4cCAkICovCisjaWZuZGVmIF9fQVNNU1BBUkNfRUxGX0gKKyNkZWZpbmUgX19BU01TUEFSQ19FTEZfSAorCisvKgorICogRUxGIHJlZ2lzdGVyIGRlZmluaXRpb25zLi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGFzbS9tYnVzLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNlbmRpZgorCisvKgorICogU3BhcmMgc2VjdGlvbiB0eXBlcworICovCisjZGVmaW5lIFNUVF9SRUdJU1RFUgkJMTMKKworLyoKKyAqIFNwYXJjIEVMRiByZWxvY2F0aW9uIHR5cGVzCisgKi8KKyNkZWZpbmUJUl9TUEFSQ19OT05FCQkwCisjZGVmaW5lCVJfU1BBUkNfOAkJMQorI2RlZmluZQlSX1NQQVJDXzE2CQkyCisjZGVmaW5lCVJfU1BBUkNfMzIJCTMKKyNkZWZpbmUJUl9TUEFSQ19ESVNQOAkJNAorI2RlZmluZQlSX1NQQVJDX0RJU1AxNgkJNQorI2RlZmluZQlSX1NQQVJDX0RJU1AzMgkJNgorI2RlZmluZQlSX1NQQVJDX1dESVNQMzAJCTcKKyNkZWZpbmUJUl9TUEFSQ19XRElTUDIyCQk4CisjZGVmaW5lCVJfU1BBUkNfSEkyMgkJOQorI2RlZmluZQlSX1NQQVJDXzIyCQkxMAorI2RlZmluZQlSX1NQQVJDXzEzCQkxMQorI2RlZmluZQlSX1NQQVJDX0xPMTAJCTEyCisjZGVmaW5lCVJfU1BBUkNfR09UMTAJCTEzCisjZGVmaW5lCVJfU1BBUkNfR09UMTMJCTE0CisjZGVmaW5lCVJfU1BBUkNfR09UMjIJCTE1CisjZGVmaW5lCVJfU1BBUkNfUEMxMAkJMTYKKyNkZWZpbmUJUl9TUEFSQ19QQzIyCQkxNworI2RlZmluZQlSX1NQQVJDX1dQTFQzMAkJMTgKKyNkZWZpbmUJUl9TUEFSQ19DT1BZCQkxOQorI2RlZmluZQlSX1NQQVJDX0dMT0JfREFUCTIwCisjZGVmaW5lCVJfU1BBUkNfSk1QX1NMT1QJMjEKKyNkZWZpbmUJUl9TUEFSQ19SRUxBVElWRQkyMgorI2RlZmluZQlSX1NQQVJDX1VBMzIJCTIzCisjZGVmaW5lIFJfU1BBUkNfUExUMzIJCTI0CisjZGVmaW5lIFJfU1BBUkNfSElQTFQyMgkJMjUKKyNkZWZpbmUgUl9TUEFSQ19MT1BMVDEwCQkyNgorI2RlZmluZSBSX1NQQVJDX1BDUExUMzIJCTI3CisjZGVmaW5lIFJfU1BBUkNfUENQTFQyMgkJMjgKKyNkZWZpbmUgUl9TUEFSQ19QQ1BMVDEwCQkyOQorI2RlZmluZSBSX1NQQVJDXzEwCQkzMAorI2RlZmluZSBSX1NQQVJDXzExCQkzMQorI2RlZmluZSBSX1NQQVJDXzY0CQkzMgorI2RlZmluZSBSX1NQQVJDX09MTzEwCQkzMworI2RlZmluZSBSX1NQQVJDX1dESVNQMTYJCTQwCisjZGVmaW5lIFJfU1BBUkNfV0RJU1AxOQkJNDEKKyNkZWZpbmUgUl9TUEFSQ183CQk0MworI2RlZmluZSBSX1NQQVJDXzUJCTQ0CisjZGVmaW5lIFJfU1BBUkNfNgkJNDUKKworLyogQml0cyBwcmVzZW50IGluIEFUX0hXQ0FQLCBwcmltYXJpbHkgZm9yIFNwYXJjMzIuICAqLworCisjZGVmaW5lIEhXQ0FQX1NQQVJDX0ZMVVNIICAgICAgIDEgICAgLyogQ1BVIHN1cHBvcnRzIGZsdXNoIGluc3RydWN0aW9uLiAqLworI2RlZmluZSBIV0NBUF9TUEFSQ19TVEJBUiAgICAgICAyCisjZGVmaW5lIEhXQ0FQX1NQQVJDX1NXQVAgICAgICAgIDQKKyNkZWZpbmUgSFdDQVBfU1BBUkNfTVVMRElWICAgICAgOAorI2RlZmluZSBIV0NBUF9TUEFSQ19WOQkJMTYKKyNkZWZpbmUgSFdDQVBfU1BBUkNfVUxUUkEzCTMyCisKKy8qIEZvciB0aGUgbW9zdCBwYXJ0IHdlIHByZXNlbnQgY29kZSBkdW1wcyBpbiB0aGUgZm9ybWF0CisgKiBTb2xhcmlzIGRvZXMuCisgKi8KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBlbGZfZ3JlZ190OworI2RlZmluZSBFTEZfTkdSRUcgMzgKK3R5cGVkZWYgZWxmX2dyZWdfdCBlbGZfZ3JlZ3NldF90W0VMRl9OR1JFR107CisKKy8qIEZvcm1hdCBpczoKKyAqIAlHMCAtLT4gRzcKKyAqCU8wIC0tPiBPNworICoJTDAgLS0+IEw3CisgKglJMCAtLT4gSTcKKyAqCVBTUiwgUEMsIG5QQywgWSwgV0lNLCBUQlIKKyAqLworI2RlZmluZSBFTEZfQ09SRV9DT1BZX1JFR1MoX19lbGZfcmVncywgX19wdF9yZWdzKQlcCitkbyB7CXVuc2lnbmVkIGxvbmcgKmRlc3QgPSAmKF9fZWxmX3JlZ3NbMF0pOwkJXAorCXN0cnVjdCBwdF9yZWdzICpzcmMgPSAoX19wdF9yZWdzKTsJCVwKKwl1bnNpZ25lZCBsb25nIF9fdXNlciAqc3A7CQkJXAorCW1lbWNweSgmZGVzdFswXSwgJnNyYy0+dV9yZWdzWzBdLAkJXAorCSAgICAgICBzaXplb2YodW5zaWduZWQgbG9uZykgKiAxNik7CQlcCisJLyogRG9uJ3QgdHJ5IHRoaXMgYXQgaG9tZSBraWRzLi4uICovCQlcCisJc3AgPSAodW5zaWduZWQgbG9uZyBfX3VzZXIgKikgc3JjLT51X3JlZ3NbMTRdOwlcCisJY29weV9mcm9tX3VzZXIoJmRlc3RbMTZdLCBzcCwJCQlcCisJCSAgICAgICBzaXplb2YodW5zaWduZWQgbG9uZykgKiAxNik7CVwKKwlkZXN0WzMyXSA9IHNyYy0+cHNyOwkJCQlcCisJZGVzdFszM10gPSBzcmMtPnBjOwkJCQlcCisJZGVzdFszNF0gPSBzcmMtPm5wYzsJCQkJXAorCWRlc3RbMzVdID0gc3JjLT55OwkJCQlcCisJZGVzdFszNl0gPSBkZXN0WzM3XSA9IDA7IC8qIFhYWCAqLwkJXAorfSB3aGlsZSgwKTsgLyogSmFuaXRvcnM6IERvbid0IHRvdWNoIHRoaXMgY29sb24uICovCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bmlvbiB7CisJCXVuc2lnbmVkIGxvbmcJcHJfcmVnc1szMl07CisJCWRvdWJsZQkJcHJfZHJlZ3NbMTZdOworCX0gcHJfZnI7CisJdW5zaWduZWQgbG9uZyBfX3VudXNlZDsKKwl1bnNpZ25lZCBsb25nCXByX2ZzcjsKKwl1bnNpZ25lZCBjaGFyCXByX3FjbnQ7CisJdW5zaWduZWQgY2hhcglwcl9xX2VudHJ5c2l6ZTsKKwl1bnNpZ25lZCBjaGFyCXByX2VuOworCXVuc2lnbmVkIGludAlwcl9xWzY0XTsKK30gZWxmX2ZwcmVnc2V0X3Q7CisKKyNkZWZpbmUgRUxGX0NPUkVfQ09QWV9UQVNLX1JFR1MoX190c2ssIF9fZWxmX3JlZ3MpCVwKKwkoeyBFTEZfQ09SRV9DT1BZX1JFR1MoKCooX19lbGZfcmVncykpLCAoX190c2spLT50aHJlYWQua3JlZ3MpOyAxOyB9KQorCisvKgorICogVGhpcyBpcyB1c2VkIHRvIGVuc3VyZSB3ZSBkb24ndCBsb2FkIHNvbWV0aGluZyBmb3IgdGhlIHdyb25nIGFyY2hpdGVjdHVyZS4KKyAqLworI2RlZmluZSBlbGZfY2hlY2tfYXJjaCh4KSAoKHgpLT5lX21hY2hpbmUgPT0gRU1fU1BBUkMpCisKKy8qCisgKiBUaGVzZSBhcmUgdXNlZCB0byBzZXQgcGFyYW1ldGVycyBpbiB0aGUgY29yZSBkdW1wcy4KKyAqLworI2RlZmluZSBFTEZfQVJDSAlFTV9TUEFSQworI2RlZmluZSBFTEZfQ0xBU1MJRUxGQ0xBU1MzMgorI2RlZmluZSBFTEZfREFUQQlFTEZEQVRBMk1TQgorCisjZGVmaW5lIFVTRV9FTEZfQ09SRV9EVU1QCisjaWZuZGVmIENPTkZJR19TVU40CisjZGVmaW5lIEVMRl9FWEVDX1BBR0VTSVpFCTQwOTYKKyNlbHNlCisjZGVmaW5lIEVMRl9FWEVDX1BBR0VTSVpFCTgxOTIKKyNlbmRpZgorCisKKy8qIFRoaXMgaXMgdGhlIGxvY2F0aW9uIHRoYXQgYW4gRVRfRFlOIHByb2dyYW0gaXMgbG9hZGVkIGlmIGV4ZWMnZWQuICBUeXBpY2FsCisgICB1c2Ugb2YgdGhpcyBpcyB0byBpbnZva2UgIi4vbGQuc28gc29tZXByb2ciIHRvIHRlc3Qgb3V0IGEgbmV3IHZlcnNpb24gb2YKKyAgIHRoZSBsb2FkZXIuICBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGl0IGlzIG91dCBvZiB0aGUgd2F5IG9mIHRoZSBwcm9ncmFtCisgICB0aGF0IGl0IHdpbGwgImV4ZWMiLCBhbmQgdGhhdCB0aGVyZSBpcyBzdWZmaWNpZW50IHJvb20gZm9yIHRoZSBicmsuICAqLworCisjZGVmaW5lIEVMRl9FVF9EWU5fQkFTRSAgICAgICAgIChUQVNLX1VOTUFQUEVEX0JBU0UpCisKKy8qIFRoaXMgeWllbGRzIGEgbWFzayB0aGF0IHVzZXIgcHJvZ3JhbXMgY2FuIHVzZSB0byBmaWd1cmUgb3V0IHdoYXQKKyAgIGluc3RydWN0aW9uIHNldCB0aGlzIGNwdSBzdXBwb3J0cy4gIFRoaXMgY2FuIE5PVCBiZSBkb25lIGluIHVzZXJzcGFjZQorICAgb24gU3BhcmMuICAqLworCisvKiBTdW40YyBoYXMgbm9uZSBvZiB0aGUgY2FwYWJpbGl0aWVzLCBtb3N0IHN1bjRtJ3MgaGF2ZSB0aGVtIGFsbC4KKyAqIFhYWCBUaGlzIGlzIGdyb3NzLCBzZXQgc29tZSBnbG9iYWwgdmFyaWFibGUgYXQgYm9vdCB0aW1lLiAtRGF2ZU0KKyAqLworI2RlZmluZSBFTEZfSFdDQVAJKChBUkNIX1NVTjRDX1NVTjQpID8gMCA6IFwKKwkJCSAoSFdDQVBfU1BBUkNfRkxVU0ggfCBIV0NBUF9TUEFSQ19TVEJBUiB8IFwKKwkJCSAgSFdDQVBfU1BBUkNfU1dBUCB8IFwKKwkJCSAgKChzcm1tdV9tb2R0eXBlICE9IEN5cHJlc3MgJiYgXAorCQkJICAgIHNybW11X21vZHR5cGUgIT0gQ3lwcmVzc192RSAmJiBcCisJCQkgICAgc3JtbXVfbW9kdHlwZSAhPSBDeXByZXNzX3ZEKSA/IFwKKwkJCSAgIEhXQ0FQX1NQQVJDX01VTERJViA6IDApKSkKKworLyogVGhpcyB5aWVsZHMgYSBzdHJpbmcgdGhhdCBsZC5zbyB3aWxsIHVzZSB0byBsb2FkIGltcGxlbWVudGF0aW9uCisgICBzcGVjaWZpYyBsaWJyYXJpZXMgZm9yIG9wdGltaXphdGlvbi4gIFRoaXMgaXMgbW9yZSBzcGVjaWZpYyBpbgorICAgaW50ZW50IHRoYW4gcG9raW5nIGF0IHVuYW1lIG9yIC9wcm9jL2NwdWluZm8uICovCisKKyNkZWZpbmUgRUxGX1BMQVRGT1JNCShOVUxMKQorCisjaWZkZWYgX19LRVJORUxfXworI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgsIGliY3MyKSBzZXRfcGVyc29uYWxpdHkoKGliY3MyKT9QRVJfU1ZSNDpQRVJfTElOVVgpCisjZW5kaWYKKworI2VuZGlmIC8qICEoX19BU01TUEFSQ19FTEZfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2Vycm5vLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9lcnJuby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjMDFjNWYzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvZXJybm8uaApAQCAtMCwwICsxLDExMCBAQAorLyogJElkOiBlcnJuby5oLHYgMS42IDE5OTcvMDQvMTUgMDk6MDM6MzggZGF2ZW0gRXhwICQgKi8KKyNpZm5kZWYgX1NQQVJDX0VSUk5PX0gKKyNkZWZpbmUgX1NQQVJDX0VSUk5PX0gKKworLyogVGhlc2UgbWF0Y2ggdGhlIFN1bk9TIGVycm9yIG51bWJlcmluZyBzY2hlbWUuICovCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9lcnJuby1iYXNlLmg+CisKKyNkZWZpbmUJRVdPVUxEQkxPQ0sJRUFHQUlOCS8qIE9wZXJhdGlvbiB3b3VsZCBibG9jayAqLworI2RlZmluZQlFSU5QUk9HUkVTUwkzNgkvKiBPcGVyYXRpb24gbm93IGluIHByb2dyZXNzICovCisjZGVmaW5lCUVBTFJFQURZCTM3CS8qIE9wZXJhdGlvbiBhbHJlYWR5IGluIHByb2dyZXNzICovCisjZGVmaW5lCUVOT1RTT0NLCTM4CS8qIFNvY2tldCBvcGVyYXRpb24gb24gbm9uLXNvY2tldCAqLworI2RlZmluZQlFREVTVEFERFJSRVEJMzkJLyogRGVzdGluYXRpb24gYWRkcmVzcyByZXF1aXJlZCAqLworI2RlZmluZQlFTVNHU0laRQk0MAkvKiBNZXNzYWdlIHRvbyBsb25nICovCisjZGVmaW5lCUVQUk9UT1RZUEUJNDEJLyogUHJvdG9jb2wgd3JvbmcgdHlwZSBmb3Igc29ja2V0ICovCisjZGVmaW5lCUVOT1BST1RPT1BUCTQyCS8qIFByb3RvY29sIG5vdCBhdmFpbGFibGUgKi8KKyNkZWZpbmUJRVBST1RPTk9TVVBQT1JUCTQzCS8qIFByb3RvY29sIG5vdCBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUJRVNPQ0tUTk9TVVBQT1JUCTQ0CS8qIFNvY2tldCB0eXBlIG5vdCBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUJRU9QTk9UU1VQUAk0NQkvKiBPcCBub3Qgc3VwcG9ydGVkIG9uIHRyYW5zcG9ydCBlbmRwb2ludCAqLworI2RlZmluZQlFUEZOT1NVUFBPUlQJNDYJLyogUHJvdG9jb2wgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUJRUFGTk9TVVBQT1JUCTQ3CS8qIEFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wgKi8KKyNkZWZpbmUJRUFERFJJTlVTRQk0OAkvKiBBZGRyZXNzIGFscmVhZHkgaW4gdXNlICovCisjZGVmaW5lCUVBRERSTk9UQVZBSUwJNDkJLyogQ2Fubm90IGFzc2lnbiByZXF1ZXN0ZWQgYWRkcmVzcyAqLworI2RlZmluZQlFTkVURE9XTgk1MAkvKiBOZXR3b3JrIGlzIGRvd24gKi8KKyNkZWZpbmUJRU5FVFVOUkVBQ0gJNTEJLyogTmV0d29yayBpcyB1bnJlYWNoYWJsZSAqLworI2RlZmluZQlFTkVUUkVTRVQJNTIJLyogTmV0IGRyb3BwZWQgY29ubmVjdGlvbiBiZWNhdXNlIG9mIHJlc2V0ICovCisjZGVmaW5lCUVDT05OQUJPUlRFRAk1MwkvKiBTb2Z0d2FyZSBjYXVzZWQgY29ubmVjdGlvbiBhYm9ydCAqLworI2RlZmluZQlFQ09OTlJFU0VUCTU0CS8qIENvbm5lY3Rpb24gcmVzZXQgYnkgcGVlciAqLworI2RlZmluZQlFTk9CVUZTCQk1NQkvKiBObyBidWZmZXIgc3BhY2UgYXZhaWxhYmxlICovCisjZGVmaW5lCUVJU0NPTk4JCTU2CS8qIFRyYW5zcG9ydCBlbmRwb2ludCBpcyBhbHJlYWR5IGNvbm5lY3RlZCAqLworI2RlZmluZQlFTk9UQ09OTgk1NwkvKiBUcmFuc3BvcnQgZW5kcG9pbnQgaXMgbm90IGNvbm5lY3RlZCAqLworI2RlZmluZQlFU0hVVERPV04JNTgJLyogTm8gc2VuZCBhZnRlciB0cmFuc3BvcnQgZW5kcG9pbnQgc2h1dGRvd24gKi8KKyNkZWZpbmUJRVRPT01BTllSRUZTCTU5CS8qIFRvbyBtYW55IHJlZmVyZW5jZXM6IGNhbm5vdCBzcGxpY2UgKi8KKyNkZWZpbmUJRVRJTUVET1VUCTYwCS8qIENvbm5lY3Rpb24gdGltZWQgb3V0ICovCisjZGVmaW5lCUVDT05OUkVGVVNFRAk2MQkvKiBDb25uZWN0aW9uIHJlZnVzZWQgKi8KKyNkZWZpbmUJRUxPT1AJCTYyCS8qIFRvbyBtYW55IHN5bWJvbGljIGxpbmtzIGVuY291bnRlcmVkICovCisjZGVmaW5lCUVOQU1FVE9PTE9ORwk2MwkvKiBGaWxlIG5hbWUgdG9vIGxvbmcgKi8KKyNkZWZpbmUJRUhPU1RET1dOCTY0CS8qIEhvc3QgaXMgZG93biAqLworI2RlZmluZQlFSE9TVFVOUkVBQ0gJNjUJLyogTm8gcm91dGUgdG8gaG9zdCAqLworI2RlZmluZQlFTk9URU1QVFkJNjYJLyogRGlyZWN0b3J5IG5vdCBlbXB0eSAqLworI2RlZmluZSBFUFJPQ0xJTSAgICAgICAgNjcgICAgICAvKiBTVU5PUzogVG9vIG1hbnkgcHJvY2Vzc2VzICovCisjZGVmaW5lCUVVU0VSUwkJNjgJLyogVG9vIG1hbnkgdXNlcnMgKi8KKyNkZWZpbmUJRURRVU9UCQk2OQkvKiBRdW90YSBleGNlZWRlZCAqLworI2RlZmluZQlFU1RBTEUJCTcwCS8qIFN0YWxlIE5GUyBmaWxlIGhhbmRsZSAqLworI2RlZmluZQlFUkVNT1RFCQk3MQkvKiBPYmplY3QgaXMgcmVtb3RlICovCisjZGVmaW5lCUVOT1NUUgkJNzIJLyogRGV2aWNlIG5vdCBhIHN0cmVhbSAqLworI2RlZmluZQlFVElNRQkJNzMJLyogVGltZXIgZXhwaXJlZCAqLworI2RlZmluZQlFTk9TUgkJNzQJLyogT3V0IG9mIHN0cmVhbXMgcmVzb3VyY2VzICovCisjZGVmaW5lCUVOT01TRwkJNzUJLyogTm8gbWVzc2FnZSBvZiBkZXNpcmVkIHR5cGUgKi8KKyNkZWZpbmUJRUJBRE1TRwkJNzYJLyogTm90IGEgZGF0YSBtZXNzYWdlICovCisjZGVmaW5lCUVJRFJNCQk3NwkvKiBJZGVudGlmaWVyIHJlbW92ZWQgKi8KKyNkZWZpbmUJRURFQURMSwkJNzgJLyogUmVzb3VyY2UgZGVhZGxvY2sgd291bGQgb2NjdXIgKi8KKyNkZWZpbmUJRU5PTENLCQk3OQkvKiBObyByZWNvcmQgbG9ja3MgYXZhaWxhYmxlICovCisjZGVmaW5lCUVOT05FVAkJODAJLyogTWFjaGluZSBpcyBub3Qgb24gdGhlIG5ldHdvcmsgKi8KKyNkZWZpbmUgRVJSRU1PVEUgICAgICAgIDgxICAgICAgLyogU3VuT1M6IFRvbyBtYW55IGx2bHMgb2YgcmVtb3RlIGluIHBhdGggKi8KKyNkZWZpbmUJRU5PTElOSwkJODIJLyogTGluayBoYXMgYmVlbiBzZXZlcmVkICovCisjZGVmaW5lCUVBRFYJCTgzCS8qIEFkdmVydGlzZSBlcnJvciAqLworI2RlZmluZQlFU1JNTlQJCTg0CS8qIFNybW91bnQgZXJyb3IgKi8KKyNkZWZpbmUJRUNPTU0JCTg1ICAgICAgLyogQ29tbXVuaWNhdGlvbiBlcnJvciBvbiBzZW5kICovCisjZGVmaW5lCUVQUk9UTwkJODYJLyogUHJvdG9jb2wgZXJyb3IgKi8KKyNkZWZpbmUJRU1VTFRJSE9QCTg3CS8qIE11bHRpaG9wIGF0dGVtcHRlZCAqLworI2RlZmluZQlFRE9URE9UCQk4OAkvKiBSRlMgc3BlY2lmaWMgZXJyb3IgKi8KKyNkZWZpbmUJRVJFTUNIRwkJODkJLyogUmVtb3RlIGFkZHJlc3MgY2hhbmdlZCAqLworI2RlZmluZQlFTk9TWVMJCTkwCS8qIEZ1bmN0aW9uIG5vdCBpbXBsZW1lbnRlZCAqLworCisvKiBUaGUgcmVzdCBoYXZlIG5vIFN1bk9TIGVxdWl2YWxlbnQuICovCisjZGVmaW5lCUVTVFJQSVBFCTkxCS8qIFN0cmVhbXMgcGlwZSBlcnJvciAqLworI2RlZmluZQlFT1ZFUkZMT1cJOTIJLyogVmFsdWUgdG9vIGxhcmdlIGZvciBkZWZpbmVkIGRhdGEgdHlwZSAqLworI2RlZmluZQlFQkFERkQJCTkzCS8qIEZpbGUgZGVzY3JpcHRvciBpbiBiYWQgc3RhdGUgKi8KKyNkZWZpbmUJRUNIUk5HCQk5NAkvKiBDaGFubmVsIG51bWJlciBvdXQgb2YgcmFuZ2UgKi8KKyNkZWZpbmUJRUwyTlNZTkMJOTUJLyogTGV2ZWwgMiBub3Qgc3luY2hyb25pemVkICovCisjZGVmaW5lCUVMM0hMVAkJOTYJLyogTGV2ZWwgMyBoYWx0ZWQgKi8KKyNkZWZpbmUJRUwzUlNUCQk5NwkvKiBMZXZlbCAzIHJlc2V0ICovCisjZGVmaW5lCUVMTlJORwkJOTgJLyogTGluayBudW1iZXIgb3V0IG9mIHJhbmdlICovCisjZGVmaW5lCUVVTkFUQ0gJCTk5CS8qIFByb3RvY29sIGRyaXZlciBub3QgYXR0YWNoZWQgKi8KKyNkZWZpbmUJRU5PQ1NJCQkxMDAJLyogTm8gQ1NJIHN0cnVjdHVyZSBhdmFpbGFibGUgKi8KKyNkZWZpbmUJRUwySExUCQkxMDEJLyogTGV2ZWwgMiBoYWx0ZWQgKi8KKyNkZWZpbmUJRUJBREUJCTEwMgkvKiBJbnZhbGlkIGV4Y2hhbmdlICovCisjZGVmaW5lCUVCQURSCQkxMDMJLyogSW52YWxpZCByZXF1ZXN0IGRlc2NyaXB0b3IgKi8KKyNkZWZpbmUJRVhGVUxMCQkxMDQJLyogRXhjaGFuZ2UgZnVsbCAqLworI2RlZmluZQlFTk9BTk8JCTEwNQkvKiBObyBhbm9kZSAqLworI2RlZmluZQlFQkFEUlFDCQkxMDYJLyogSW52YWxpZCByZXF1ZXN0IGNvZGUgKi8KKyNkZWZpbmUJRUJBRFNMVAkJMTA3CS8qIEludmFsaWQgc2xvdCAqLworI2RlZmluZQlFREVBRExPQ0sJMTA4CS8qIEZpbGUgbG9ja2luZyBkZWFkbG9jayBlcnJvciAqLworI2RlZmluZQlFQkZPTlQJCTEwOQkvKiBCYWQgZm9udCBmaWxlIGZvcm1hdCAqLworI2RlZmluZQlFTElCRVhFQwkxMTAJLyogQ2Fubm90IGV4ZWMgYSBzaGFyZWQgbGlicmFyeSBkaXJlY3RseSAqLworI2RlZmluZQlFTk9EQVRBCQkxMTEJLyogTm8gZGF0YSBhdmFpbGFibGUgKi8KKyNkZWZpbmUJRUxJQkJBRAkJMTEyCS8qIEFjY2Vzc2luZyBhIGNvcnJ1cHRlZCBzaGFyZWQgbGlicmFyeSAqLworI2RlZmluZQlFTk9QS0cJCTExMwkvKiBQYWNrYWdlIG5vdCBpbnN0YWxsZWQgKi8KKyNkZWZpbmUJRUxJQkFDQwkJMTE0CS8qIENhbiBub3QgYWNjZXNzIGEgbmVlZGVkIHNoYXJlZCBsaWJyYXJ5ICovCisjZGVmaW5lCUVOT1RVTklRCTExNQkvKiBOYW1lIG5vdCB1bmlxdWUgb24gbmV0d29yayAqLworI2RlZmluZQlFUkVTVEFSVAkxMTYJLyogSW50ZXJydXB0ZWQgc3lzY2FsbCBzaG91bGQgYmUgcmVzdGFydGVkICovCisjZGVmaW5lCUVVQ0xFQU4JCTExNwkvKiBTdHJ1Y3R1cmUgbmVlZHMgY2xlYW5pbmcgKi8KKyNkZWZpbmUJRU5PVE5BTQkJMTE4CS8qIE5vdCBhIFhFTklYIG5hbWVkIHR5cGUgZmlsZSAqLworI2RlZmluZQlFTkFWQUlMCQkxMTkJLyogTm8gWEVOSVggc2VtYXBob3JlcyBhdmFpbGFibGUgKi8KKyNkZWZpbmUJRUlTTkFNCQkxMjAJLyogSXMgYSBuYW1lZCB0eXBlIGZpbGUgKi8KKyNkZWZpbmUJRVJFTU9URUlPCTEyMQkvKiBSZW1vdGUgSS9PIGVycm9yICovCisjZGVmaW5lCUVJTFNFUQkJMTIyCS8qIElsbGVnYWwgYnl0ZSBzZXF1ZW5jZSAqLworI2RlZmluZQlFTElCTUFYCQkxMjMJLyogQXRtcHQgdG8gbGluayBpbiB0b28gbWFueSBzaGFyZWQgbGlicyAqLworI2RlZmluZQlFTElCU0NOCQkxMjQJLyogLmxpYiBzZWN0aW9uIGluIGEub3V0IGNvcnJ1cHRlZCAqLworCisjZGVmaW5lCUVOT01FRElVTQkxMjUJLyogTm8gbWVkaXVtIGZvdW5kICovCisjZGVmaW5lCUVNRURJVU1UWVBFCTEyNgkvKiBXcm9uZyBtZWRpdW0gdHlwZSAqLworI2RlZmluZQlFQ0FOQ0VMRUQJMTI3CS8qIE9wZXJhdGlvbiBDYW5jZWxsZWQgKi8KKyNkZWZpbmUJRU5PS0VZCQkxMjgJLyogUmVxdWlyZWQga2V5IG5vdCBhdmFpbGFibGUgKi8KKyNkZWZpbmUJRUtFWUVYUElSRUQJMTI5CS8qIEtleSBoYXMgZXhwaXJlZCAqLworI2RlZmluZQlFS0VZUkVWT0tFRAkxMzAJLyogS2V5IGhhcyBiZWVuIHJldm9rZWQgKi8KKyNkZWZpbmUJRUtFWVJFSkVDVEVECTEzMQkvKiBLZXkgd2FzIHJlamVjdGVkIGJ5IHNlcnZpY2UgKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9mYmlvLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9mYmlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJiMjdlNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL2ZiaW8uaApAQCAtMCwwICsxLDI5NyBAQAorI2lmbmRlZiBfX0xJTlVYX0ZCSU9fSAorI2RlZmluZSBfX0xJTlVYX0ZCSU9fSAorCisvKiBDb25zdGFudHMgdXNlZCBmb3IgZmJpbyBTdW5PUyBjb21wYXRpYmlsaXR5ICovCisvKiAoQykgMTk5NiBNaWd1ZWwgZGUgSWNhemEgKi8KKworLyogRnJhbWUgYnVmZmVyIHR5cGVzICovCisjZGVmaW5lIEZCVFlQRV9OT1RZUEUgICAgICAgICAgIC0xCisjZGVmaW5lIEZCVFlQRV9TVU4xQlcgICAgICAgICAgIDAgICAvKiBtb25vICovCisjZGVmaW5lIEZCVFlQRV9TVU4xQ09MT1IgICAgICAgIDEgCisjZGVmaW5lIEZCVFlQRV9TVU4yQlcgICAgICAgICAgIDIgCisjZGVmaW5lIEZCVFlQRV9TVU4yQ09MT1IgICAgICAgIDMgCisjZGVmaW5lIEZCVFlQRV9TVU4yR1AgICAgICAgICAgIDQgCisjZGVmaW5lIEZCVFlQRV9TVU41Q09MT1IgICAgICAgIDUgCisjZGVmaW5lIEZCVFlQRV9TVU4zQ09MT1IgICAgICAgIDYgCisjZGVmaW5lIEZCVFlQRV9NRU1DT0xPUiAgICAgICAgIDcgCisjZGVmaW5lIEZCVFlQRV9TVU40Q09MT1IgICAgICAgIDggCisgCisjZGVmaW5lIEZCVFlQRV9OT1RTVU4xICAgICAgICAgIDkgCisjZGVmaW5lIEZCVFlQRV9OT1RTVU4yICAgICAgICAgIDEwCisjZGVmaW5lIEZCVFlQRV9OT1RTVU4zICAgICAgICAgIDExCisgCisjZGVmaW5lIEZCVFlQRV9TVU5GQVNUX0NPTE9SICAgIDEyICAvKiBjZzYgKi8KKyNkZWZpbmUgRkJUWVBFX1NVTlJPUF9DT0xPUiAgICAgMTMKKyNkZWZpbmUgRkJUWVBFX1NVTkZCX1ZJREVPICAgICAgMTQKKyNkZWZpbmUgRkJUWVBFX1NVTkdJRkIgICAgICAgICAgMTUKKyNkZWZpbmUgRkJUWVBFX1NVTkdQTEFTICAgICAgICAgMTYKKyNkZWZpbmUgRkJUWVBFX1NVTkdQMyAgICAgICAgICAgMTcKKyNkZWZpbmUgRkJUWVBFX1NVTkdUICAgICAgICAgICAgMTgKKyNkZWZpbmUgRkJUWVBFX1NVTkxFTyAgICAgICAgICAgMTkgICAgICAvKiB6eCBMZW8gY2FyZCAqLworI2RlZmluZSBGQlRZUEVfTURJQ09MT1IgICAgICAgICAyMCAgICAgIC8qIGNnMTQgKi8KKyNkZWZpbmUgRkJUWVBFX1RDWENPTE9SCQkyMQkvKiBTVU5XLHRjeCBjYXJkICovCisKKyNkZWZpbmUgRkJUWVBFX0xBU1RQTFVTT05FICAgICAgMjEJLyogVGhpcyBpcyBub3QgbGFzdCArIDEgaW4gZmFjdC4uLiAqLworCisvKiBEb2VzIG5vdCBzZWVtIHRvIGJlIGxpc3RlZCBpbiB0aGUgU3VuIGZpbGUgZWl0aGVyICovCisjZGVmaW5lIEZCVFlQRV9DUkVBVE9SICAgICAgICAgIDIyCisjZGVmaW5lIEZCVFlQRV9QQ0lfSUdBMTY4MgkyMworI2RlZmluZSBGQlRZUEVfUDkxMDBDT0xPUgkyNAorCisvKiBmYmlvIGlvY3RscyAqLworLyogUmV0dXJuZWQgYnkgRkJJT0dUWVBFICovCitzdHJ1Y3QgIGZidHlwZSB7CisgICAgICAgIGludCAgICAgZmJfdHlwZTsgICAgICAgIC8qIGZiIHR5cGUsIHNlZSBhYm92ZSAqLworICAgICAgICBpbnQgICAgIGZiX2hlaWdodDsgICAgICAvKiBwaXhlbHMgKi8KKyAgICAgICAgaW50ICAgICBmYl93aWR0aDsgICAgICAgLyogcGl4ZWxzICovCisgICAgICAgIGludCAgICAgZmJfZGVwdGg7CisgICAgICAgIGludCAgICAgZmJfY21zaXplOyAgICAgIC8qIGNvbG9yIG1hcCBlbnRyaWVzICovCisgICAgICAgIGludCAgICAgZmJfc2l6ZTsgICAgICAgIC8qIGZiIHNpemUgaW4gYnl0ZXMgKi8KK307CisjZGVmaW5lIEZCSU9HVFlQRSBfSU9SKCdGJywgMCwgc3RydWN0IGZidHlwZSkKKworc3RydWN0ICBmYmNtYXAgeworICAgICAgICBpbnQgICAgICAgICAgICAgaW5kZXg7ICAgICAgICAgIC8qIGZpcnN0IGVsZW1lbnQgKDAgb3JpZ2luKSAqLworICAgICAgICBpbnQgICAgICAgICAgICAgY291bnQ7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgICBfX3VzZXIgKnJlZDsKKyAgICAgICAgdW5zaWduZWQgY2hhciAgIF9fdXNlciAqZ3JlZW47CisgICAgICAgIHVuc2lnbmVkIGNoYXIgICBfX3VzZXIgKmJsdWU7Cit9OworCisjaWZkZWYgX19LRVJORUxfXworI2RlZmluZSBGQklPUFVUQ01BUF9TUEFSQyBfSU9XKCdGJywgMywgc3RydWN0IGZiY21hcCkKKyNkZWZpbmUgRkJJT0dFVENNQVBfU1BBUkMgX0lPVygnRicsIDQsIHN0cnVjdCBmYmNtYXApCisjZWxzZQorI2RlZmluZSBGQklPUFVUQ01BUCBfSU9XKCdGJywgMywgc3RydWN0IGZiY21hcCkKKyNkZWZpbmUgRkJJT0dFVENNQVAgX0lPVygnRicsIDQsIHN0cnVjdCBmYmNtYXApCisjZW5kaWYKKworLyogIyBvZiBkZXZpY2Ugc3BlY2lmaWMgdmFsdWVzICovCisjZGVmaW5lIEZCX0FUVFJfTkRFVlNQRUNJRklDICAgIDgKKy8qICMgb2YgcG9zc2libGUgZW11bGF0aW9ucyAqLworI2RlZmluZSBGQl9BVFRSX05FTVVUWVBFUyAgICAgICA0CisgCitzdHJ1Y3QgZmJzYXR0ciB7CisgICAgICAgIGludCAgICAgZmxhZ3M7CisgICAgICAgIGludCAgICAgZW11X3R5cGU7CS8qIC0xIGlmIG5vbmUgKi8KKyAgICAgICAgaW50ICAgICBkZXZfc3BlY2lmaWNbRkJfQVRUUl9OREVWU1BFQ0lGSUNdOworfTsKKyAKK3N0cnVjdCBmYmdhdHRyIHsKKyAgICAgICAgaW50ICAgICByZWFsX3R5cGU7CS8qIHJlYWwgZnJhbWUgYnVmZmVyIHR5cGUgKi8KKyAgICAgICAgaW50ICAgICBvd25lcjsJCS8qIHVua25vd24gKi8KKyAgICAgICAgc3RydWN0IGZidHlwZSBmYnR5cGU7CS8qIHJlYWwgZnJhbWUgYnVmZmVyIGZidHlwZSAqLworICAgICAgICBzdHJ1Y3QgZmJzYXR0ciBzYXR0cjsgICAKKyAgICAgICAgaW50ICAgICBlbXVfdHlwZXNbRkJfQVRUUl9ORU1VVFlQRVNdOyAvKiBzdXBwb3J0ZWQgZW11bGF0aW9ucyAqLworfTsKKyNkZWZpbmUgRkJJT1NBVFRSICBfSU9XKCdGJywgNSwgc3RydWN0IGZiZ2F0dHIpIC8qIFVuc3VwcG9ydGVkOiAqLworI2RlZmluZSBGQklPR0FUVFIgIF9JT1IoJ0YnLCA2LCBzdHJ1Y3QgZmJnYXR0cikJLyogc3VwcG9ydGVkICovCisKKyNkZWZpbmUgRkJJT1NWSURFTyBfSU9XKCdGJywgNywgaW50KQorI2RlZmluZSBGQklPR1ZJREVPIF9JT1IoJ0YnLCA4LCBpbnQpCisKK3N0cnVjdCBmYmN1cnNvciB7CisgICAgICAgIHNob3J0IHNldDsgICAgICAgICAgICAgIC8qIHdoYXQgdG8gc2V0LCBjaG9vc2UgZnJvbSB0aGUgbGlzdCBhYm92ZSAqLworICAgICAgICBzaG9ydCBlbmFibGU7ICAgICAgICAgICAvKiBjdXJzb3Igb24vb2ZmICovCisgICAgICAgIHN0cnVjdCBmYmN1cnBvcyBwb3M7ICAgIC8qIGN1cnNvciBwb3NpdGlvbiAqLworICAgICAgICBzdHJ1Y3QgZmJjdXJwb3MgaG90OyAgICAvKiBjdXJzb3IgaG90IHNwb3QgKi8KKyAgICAgICAgc3RydWN0IGZiY21hcCBjbWFwOyAgICAgLyogY29sb3IgbWFwIGluZm8gKi8KKyAgICAgICAgc3RydWN0IGZiY3VycG9zIHNpemU7ICAgLyogY3Vyc29yIGJpdCBtYXAgc2l6ZSAqLworICAgICAgICBjaGFyICppbWFnZTsgICAgICAgICAgICAvKiBjdXJzb3IgaW1hZ2UgYml0cyAqLworICAgICAgICBjaGFyICptYXNrOyAgICAgICAgICAgICAvKiBjdXJzb3IgbWFzayBiaXRzICovCit9OworCisvKiBzZXQvZ2V0IGN1cnNvciBhdHRyaWJ1dGVzL3NoYXBlICovCisjZGVmaW5lIEZCSU9TQ1VSU09SICAgICBfSU9XKCdGJywgMjQsIHN0cnVjdCBmYmN1cnNvcikKKyNkZWZpbmUgRkJJT0dDVVJTT1IgICAgIF9JT1dSKCdGJywgMjUsIHN0cnVjdCBmYmN1cnNvcikKKyAKKy8qIHNldC9nZXQgY3Vyc29yIHBvc2l0aW9uICovCisjZGVmaW5lIEZCSU9TQ1VSUE9TICAgICBfSU9XKCdGJywgMjYsIHN0cnVjdCBmYmN1cnBvcykKKyNkZWZpbmUgRkJJT0dDVVJQT1MgICAgIF9JT1coJ0YnLCAyNywgc3RydWN0IGZiY3VycG9zKQorIAorLyogZ2V0IG1heCBjdXJzb3Igc2l6ZSAqLworI2RlZmluZSBGQklPR0NVUk1BWCAgICAgX0lPUignRicsIDI4LCBzdHJ1Y3QgZmJjdXJwb3MpCisKKy8qIHdpZCBtYW5pcHVsYXRpb24gKi8KK3N0cnVjdCBmYl93aWRfYWxsb2MgeworI2RlZmluZSBGQl9XSURfU0hBUkVEXzgJCTAKKyNkZWZpbmUgRkJfV0lEX1NIQVJFRF8yNAkxCisjZGVmaW5lIEZCX1dJRF9EQkxfOAkJMgorI2RlZmluZSBGQl9XSURfREJMXzI0CQkzCisJX191MzIJd2FfdHlwZTsKKwlfX3MzMgl3YV9pbmRleDsJLyogU2V0IG9uIHJldHVybiAqLworCV9fdTMyCXdhX2NvdW50OwkKK307CitzdHJ1Y3QgZmJfd2lkX2l0ZW0geworCV9fdTMyCXdpX3R5cGU7CisJX19zMzIJd2lfaW5kZXg7CisJX191MzIJd2lfYXR0cnM7CisJX191MzIJd2lfdmFsdWVzWzMyXTsKK307CitzdHJ1Y3QgZmJfd2lkX2xpc3QgeworCV9fdTMyCXdsX2ZsYWdzOworCV9fdTMyCXdsX2NvdW50OworCXN0cnVjdCBmYl93aWRfaXRlbQkqd2xfbGlzdDsKK307CisKKyNkZWZpbmUgRkJJT19XSURfQUxMT0MJX0lPV1IoJ0YnLCAzMCwgc3RydWN0IGZiX3dpZF9hbGxvYykKKyNkZWZpbmUgRkJJT19XSURfRlJFRQlfSU9XKCdGJywgMzEsIHN0cnVjdCBmYl93aWRfYWxsb2MpCisjZGVmaW5lIEZCSU9fV0lEX1BVVAlfSU9XKCdGJywgMzIsIHN0cnVjdCBmYl93aWRfbGlzdCkKKyNkZWZpbmUgRkJJT19XSURfR0VUCV9JT1dSKCdGJywgMzMsIHN0cnVjdCBmYl93aWRfbGlzdCkKKworLyogQ3JlYXRvciBpb2N0bHMgKi8KKyNkZWZpbmUgRkZCX0lPQ1RMCSgnRic8PDgpCisjZGVmaW5lIEZGQl9TWVNfSU5GTwkJKEZGQl9JT0NUTHw4MCkKKyNkZWZpbmUgRkZCX0NMVVRSRUFECQkoRkZCX0lPQ1RMfDgxKQorI2RlZmluZSBGRkJfQ0xVVFBPU1QJCShGRkJfSU9DVEx8ODIpCisjZGVmaW5lIEZGQl9TRVRESUFHTU9ERQkJKEZGQl9JT0NUTHw4MykKKyNkZWZpbmUgRkZCX0dFVE1PTklUT1JJRAkoRkZCX0lPQ1RMfDg0KQorI2RlZmluZSBGRkJfR0VUVklERU9NT0RFCShGRkJfSU9DVEx8ODUpCisjZGVmaW5lIEZGQl9TRVRWSURFT01PREUJKEZGQl9JT0NUTHw4NikKKyNkZWZpbmUgRkZCX1NFVFNFUlZFUgkJKEZGQl9JT0NUTHw4NykKKyNkZWZpbmUgRkZCX1NFVE9WQ1RMCQkoRkZCX0lPQ1RMfDg4KQorI2RlZmluZSBGRkJfR0VUT1ZDVEwJCShGRkJfSU9DVEx8ODkpCisjZGVmaW5lIEZGQl9HRVRTQVhOVU0JCShGRkJfSU9DVEx8OTApCisjZGVmaW5lIEZGQl9GQkRFQlVHCQkoRkZCX0lPQ1RMfDkxKQorCisvKiBDZzE0IGlvY3RscyAqLworI2RlZmluZSBNRElfSU9DVEwgICAgICAgICAgKCdNJzw8OCkKKyNkZWZpbmUgTURJX1JFU0VUICAgICAgICAgIChNRElfSU9DVEx8MSkKKyNkZWZpbmUgTURJX0dFVF9DRkdJTkZPICAgIChNRElfSU9DVEx8MikKKyNkZWZpbmUgTURJX1NFVF9QSVhFTE1PREUgIChNRElfSU9DVEx8MykKKyMgICAgZGVmaW5lIE1ESV8zMl9QSVggICAgIDMyCisjICAgIGRlZmluZSBNRElfMTZfUElYICAgICAxNgorIyAgICBkZWZpbmUgTURJXzhfUElYICAgICAgOAorCitzdHJ1Y3QgbWRpX2NmZ2luZm8geworCWludCAgICAgbWRpX25jbHV0czsgICAgIC8qIE51bWJlciBvZiBpbXBsZW1lbnRlZCBDTFVUcyBpbiB0aGlzIE1ESSAqLworICAgICAgICBpbnQgICAgIG1kaV90eXBlOyAgICAgICAvKiBGQlRZUEUgbmFtZSAqLworICAgICAgICBpbnQgICAgIG1kaV9oZWlnaHQ7ICAgICAvKiBoZWlnaHQgKi8KKyAgICAgICAgaW50ICAgICBtZGlfd2lkdGg7ICAgICAgLyogd2lkaHQgKi8KKyAgICAgICAgaW50ICAgICBtZGlfc2l6ZTsgICAgICAgLyogYXZhaWxhYmxlIHJhbSAqLworICAgICAgICBpbnQgICAgIG1kaV9tb2RlOyAgICAgICAvKiA4YnBwLCAxNmJwcCBvciAzMmJwcCAqLworICAgICAgICBpbnQgICAgIG1kaV9waXhmcmVxOyAgICAvKiBwaXhlbCBjbG9jayAoZnJvbSBQUk9NKSAqLworfTsKKworLyogU3BhcmNMaW51eCBzcGVjaWZpYyBpb2N0bCBmb3IgdGhlIE1ESSwgc2hvdWxkIGJlIHJlcGxhY2VkIGZvcgorICogdGhlIFNFVF9YTFVUL1NFVF9DTFVUbiBpb2N0bHMgaW5zdGVhZAorICovCisjZGVmaW5lIE1ESV9DTEVBUl9YTFVUICAgICAgIChNRElfSU9DVEx8OSkKKworLyogbGVvICYgZmZiIGlvY3RscyAqLworc3RydWN0IGZiX2NsdXRfYWxsb2MgeworCV9fdTMyCWNsdXRpZDsJLyogU2V0IG9uIHJldHVybiAqLworIAlfX3UzMglmbGFnOworIAlfX3UzMglpbmRleDsKK307CisKK3N0cnVjdCBmYl9jbHV0IHsKKyNkZWZpbmUgRkJfQ0xVVF9XQUlUCTB4MDAwMDAwMDEJLyogTm90IHlldCBpbXBsZW1lbnRlZCAqLworIAlfX3UzMglmbGFnOworIAlfX3UzMgljbHV0aWQ7CisgCV9fdTMyCW9mZnNldDsKKyAJX191MzIJY291bnQ7CisgCWNoYXIgKglyZWQ7CisgCWNoYXIgKglncmVlbjsKKyAJY2hhciAqCWJsdWU7Cit9OworCitzdHJ1Y3QgZmJfY2x1dDMyIHsKKyAJX191MzIJZmxhZzsKKyAJX191MzIJY2x1dGlkOworIAlfX3UzMglvZmZzZXQ7CisgCV9fdTMyCWNvdW50OworIAlfX3UzMglyZWQ7CisgCV9fdTMyCWdyZWVuOworIAlfX3UzMglibHVlOworfTsKKworI2RlZmluZSBMRU9fQ0xVVEFMTE9DCV9JT1dSKCdMJywgNTMsIHN0cnVjdCBmYl9jbHV0X2FsbG9jKQorI2RlZmluZSBMRU9fQ0xVVEZSRUUJX0lPVygnTCcsIDU0LCBzdHJ1Y3QgZmJfY2x1dF9hbGxvYykKKyNkZWZpbmUgTEVPX0NMVVRSRUFECV9JT1coJ0wnLCA1NSwgc3RydWN0IGZiX2NsdXQpCisjZGVmaW5lIExFT19DTFVUUE9TVAlfSU9XKCdMJywgNTYsIHN0cnVjdCBmYl9jbHV0KQorI2RlZmluZSBMRU9fU0VUR0FNTUEJX0lPVygnTCcsIDY4LCBpbnQpIC8qIE5vdCB5ZXQgaW1wbGVtZW50ZWQgKi8KKyNkZWZpbmUgTEVPX0dFVEdBTU1BCV9JT1IoJ0wnLCA2OSwgaW50KSAvKiBOb3QgeWV0IGltcGxlbWVudGVkICovCisKKyNpZmRlZiBfX0tFUk5FTF9fCisvKiBBZGRyZXNzZXMgb24gdGhlIGZkIG9mIGEgY2dzaXggdGhhdCBhcmUgbWFwcGFibGUgKi8KKyNkZWZpbmUgQ0c2X0ZCQyAgICAweDcwMDAwMDAwCisjZGVmaW5lIENHNl9URUMgICAgMHg3MDAwMTAwMAorI2RlZmluZSBDRzZfQlRSRUdTIDB4NzAwMDIwMDAKKyNkZWZpbmUgQ0c2X0ZIQyAgICAweDcwMDA0MDAwCisjZGVmaW5lIENHNl9USEMgICAgMHg3MDAwNTAwMAorI2RlZmluZSBDRzZfUk9NICAgIDB4NzAwMDYwMDAKKyNkZWZpbmUgQ0c2X1JBTSAgICAweDcwMDE2MDAwCisjZGVmaW5lIENHNl9ESEMgICAgMHg4MDAwMDAwMAorCisjZGVmaW5lIENHM19NTUFQX09GRlNFVCAweDQwMDAwMDAKKworLyogQWRkcmVzc2VzIG9uIHRoZSBmZCBvZiBhIHRjeCB0aGF0IGFyZSBtYXBwYWJsZSAqLworI2RlZmluZSBUQ1hfUkFNOEJJVCAgIAkJMHgwMDAwMDAwMAorI2RlZmluZSBUQ1hfUkFNMjRCSVQgICAJCTB4MDEwMDAwMDAKKyNkZWZpbmUgVENYX1VOSzMgICAJCTB4MTAwMDAwMDAKKyNkZWZpbmUgVENYX1VOSzQgICAJCTB4MjAwMDAwMDAKKyNkZWZpbmUgVENYX0NPTlRST0xQTEFORSAgIAkweDI4MDAwMDAwCisjZGVmaW5lIFRDWF9VTks2ICAgCQkweDMwMDAwMDAwCisjZGVmaW5lIFRDWF9VTks3ICAgCQkweDM4MDAwMDAwCisjZGVmaW5lIFRDWF9URUMgICAgCQkweDcwMDAwMDAwCisjZGVmaW5lIFRDWF9CVFJFR1MgCQkweDcwMDAyMDAwCisjZGVmaW5lIFRDWF9USEMgICAgCQkweDcwMDA0MDAwCisjZGVmaW5lIFRDWF9ESEMgICAgCQkweDcwMDA4MDAwCisjZGVmaW5lIFRDWF9BTFQJICAgCQkweDcwMDBhMDAwCisjZGVmaW5lIFRDWF9TWU5DICAgCQkweDcwMDBlMDAwCisjZGVmaW5lIFRDWF9VTksyICAgIAkJMHg3MDAxMDAwMAorCisvKiBDRzE0IGRlZmluaXRpb25zICovCisKKy8qIE9mZnNldHMgaW50byB0aGUgT0JJTyBzcGFjZTogKi8KKyNkZWZpbmUgQ0cxNF9SRUdTICAgICAgICAwICAgICAgIC8qIHJlZ2lzdGVycyAqLworI2RlZmluZSBDRzE0X0NVUlNPUlJFR1MgIDB4MTAwMCAgLyogY3Vyc29yIHJlZ2lzdGVycyAqLworI2RlZmluZSBDRzE0X0RBQ1JFR1MgICAgIDB4MjAwMCAgLyogREFDIHJlZ2lzdGVycyAqLworI2RlZmluZSBDRzE0X1hMVVQgICAgICAgIDB4MzAwMCAgLyogWCBMb29rIFVwIFRhYmxlIC0tID8/PyAqLworI2RlZmluZSBDRzE0X0NMVVQxICAgICAgIDB4NDAwMCAgLyogQ29sb3IgTG9vayBVcCBUYWJsZSAqLworI2RlZmluZSBDRzE0X0NMVVQyICAgICAgIDB4NTAwMCAgLyogQ29sb3IgTG9vayBVcCBUYWJsZSAqLworI2RlZmluZSBDRzE0X0NMVVQzICAgICAgIDB4NjAwMCAgLyogQ29sb3IgTG9vayBVcCBUYWJsZSAqLworI2RlZmluZSBDRzE0X0FVVE8JIDB4ZjAwMAorCisjZW5kaWYgLyogS0VSTkVMICovCisKKy8qIFRoZXNlIGFyZSBleHBvcnRlZCB0byB1c2VybGFuZCBmb3IgYXBwbGljYXRpb25zIHRvIHVzZSAqLworLyogTWFwcGFibGUgb2Zmc2V0cyBmb3IgdGhlIGNnMTQ6IGNvbnRyb2wgcmVnaXN0ZXJzICovCisjZGVmaW5lIE1ESV9ESVJFQ1RfTUFQIDB4MTAwMDAwMDAKKyNkZWZpbmUgTURJX0NUTFJFR19NQVAgMHgyMDAwMDAwMAorI2RlZmluZSBNRElfQ1VSU09SX01BUCAweDMwMDAwMDAwCisjZGVmaW5lIE1ESV9TSERXX1ZSVF9NQVAgMHg0MDAwMDAwMAorCisvKiBNYXBwYWJsZSBvZmZzZXRzIGZvciB0aGUgY2cxNDogZnJhbWUgYnVmZmVyIHJlc29sdXRpb25zICovCisvKiAzMiBiaXRzICovCisjZGVmaW5lIE1ESV9DSFVOS1lfWEJHUl9NQVAgMHg1MDAwMDAwMAorI2RlZmluZSBNRElfQ0hVTktZX0JHUl9NQVAgMHg2MDAwMDAwMAorCisvKiAxNiBiaXRzICovCisjZGVmaW5lIE1ESV9QTEFOQVJfWDE2X01BUCAweDcwMDAwMDAwCisjZGVmaW5lIE1ESV9QTEFOQVJfQzE2X01BUCAweDgwMDAwMDAwCisKKy8qIDggYml0IGlzIGRvbmUgYXMgQ0czIE1NQVAgb2Zmc2V0ICovCisvKiAzMiBiaXRzLCBwbGFuYXIgKi8KKyNkZWZpbmUgTURJX1BMQU5BUl9YMzJfTUFQIDB4OTAwMDAwMDAKKyNkZWZpbmUgTURJX1BMQU5BUl9CMzJfTUFQIDB4YTAwMDAwMDAKKyNkZWZpbmUgTURJX1BMQU5BUl9HMzJfTUFQIDB4YjAwMDAwMDAKKyNkZWZpbmUgTURJX1BMQU5BUl9SMzJfTUFQIDB4YzAwMDAwMDAKKworLyogTWFwcGFibGUgb2Zmc2V0cyBvbiBsZW8gKi8KKyNkZWZpbmUgTEVPX1NTMF9NQVAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIExFT19MQ19TUzBfVVNSX01BUCAgICAgMHgwMDgwMDAwMAorI2RlZmluZSBMRU9fTERfU1MwX01BUCAgICAgICAgIDB4MDA4MDEwMDAKKyNkZWZpbmUgTEVPX0xYX0NVUlNPUl9NQVAgICAgICAweDAwODAyMDAwCisjZGVmaW5lIExFT19TUzFfTUFQICAgICAgICAgICAgMHgwMDgwMzAwMAorI2RlZmluZSBMRU9fTENfU1MxX1VTUl9NQVAgICAgIDB4MDEwMDMwMDAKKyNkZWZpbmUgTEVPX0xEX1NTMV9NQVAgICAgICAgICAweDAxMDA0MDAwCisjZGVmaW5lIExFT19VTktfTUFQICAgICAgICAgICAgMHgwMTAwNTAwMAorI2RlZmluZSBMRU9fTFhfS1JOX01BUCAgICAgICAgIDB4MDEwMDYwMDAKKyNkZWZpbmUgTEVPX0xDX1NTMF9LUk5fTUFQICAgICAweDAxMDA3MDAwCisjZGVmaW5lIExFT19MQ19TUzFfS1JOX01BUCAgICAgMHgwMTAwODAwMAorI2RlZmluZSBMRU9fTERfR0JMX01BUCAgICAgICAgIDB4MDEwMDkwMDAKKyNkZWZpbmUgTEVPX1VOSzJfTUFQICAgICAgICAgICAweDAxMDBhMDAwCisKKyNlbmRpZiAvKiBfX0xJTlVYX0ZCSU9fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvZmNudGwuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL2ZjbnRsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY5Yzc1ZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL2ZjbnRsLmgKQEAgLTAsMCArMSw4OSBAQAorLyogJElkOiBmY250bC5oLHYgMS4xNiAyMDAxLzA5LzIwIDAwOjM1OjMzIGRhdmVtIEV4cCAkICovCisjaWZuZGVmIF9TUEFSQ19GQ05UTF9ICisjZGVmaW5lIF9TUEFSQ19GQ05UTF9ICisKKy8qIG9wZW4vZmNudGwgLSBPX1NZTkMgaXMgb25seSBpbXBsZW1lbnRlZCBvbiBibG9ja3MgZGV2aWNlcyBhbmQgb24gZmlsZXMKKyAgIGxvY2F0ZWQgb24gYW4gZXh0MiBmaWxlIHN5c3RlbSAqLworI2RlZmluZSBPX1JET05MWQkweDAwMDAKKyNkZWZpbmUgT19XUk9OTFkJMHgwMDAxCisjZGVmaW5lIE9fUkRXUgkJMHgwMDAyCisjZGVmaW5lIE9fQUNDTU9ERQkweDAwMDMKKyNkZWZpbmUgT19BUFBFTkQJMHgwMDA4CisjZGVmaW5lIEZBU1lOQwkJMHgwMDQwCS8qIGZjbnRsLCBmb3IgQlNEIGNvbXBhdGliaWxpdHkgKi8KKyNkZWZpbmUgT19DUkVBVAkJMHgwMjAwCS8qIG5vdCBmY250bCAqLworI2RlZmluZSBPX1RSVU5DCQkweDA0MDAJLyogbm90IGZjbnRsICovCisjZGVmaW5lIE9fRVhDTAkJMHgwODAwCS8qIG5vdCBmY250bCAqLworI2RlZmluZSBPX1NZTkMJCTB4MjAwMAorI2RlZmluZSBPX05PTkJMT0NLCTB4NDAwMAorI2RlZmluZSBPX05ERUxBWQkoMHgwMDA0IHwgT19OT05CTE9DSykKKyNkZWZpbmUgT19OT0NUVFkJMHg4MDAwCS8qIG5vdCBmY250bCAqLworI2RlZmluZSBPX0RJUkVDVE9SWQkweDEwMDAwCS8qIG11c3QgYmUgYSBkaXJlY3RvcnkgKi8KKyNkZWZpbmUgT19OT0ZPTExPVwkweDIwMDAwCS8qIGRvbid0IGZvbGxvdyBsaW5rcyAqLworI2RlZmluZSBPX0xBUkdFRklMRQkweDQwMDAwCisjZGVmaW5lIE9fRElSRUNUICAgICAgICAweDEwMDAwMCAvKiBkaXJlY3QgZGlzayBhY2Nlc3MgaGludCAqLworI2RlZmluZSBPX05PQVRJTUUJMHgyMDAwMDAKKworI2RlZmluZSBGX0RVUEZECQkwCS8qIGR1cCAqLworI2RlZmluZSBGX0dFVEZECQkxCS8qIGdldCBjbG9zZV9vbl9leGVjICovCisjZGVmaW5lIEZfU0VURkQJCTIJLyogc2V0L2NsZWFyIGNsb3NlX29uX2V4ZWMgKi8KKyNkZWZpbmUgRl9HRVRGTAkJMwkvKiBnZXQgZmlsZS0+Zl9mbGFncyAqLworI2RlZmluZSBGX1NFVEZMCQk0CS8qIHNldCBmaWxlLT5mX2ZsYWdzICovCisjZGVmaW5lIEZfR0VUT1dOCTUJLyogIGZvciBzb2NrZXRzLiAqLworI2RlZmluZSBGX1NFVE9XTgk2CS8qICBmb3Igc29ja2V0cy4gKi8KKyNkZWZpbmUgRl9HRVRMSwkJNworI2RlZmluZSBGX1NFVExLCQk4CisjZGVmaW5lIEZfU0VUTEtXCTkKKyNkZWZpbmUgRl9TRVRTSUcJMTAJLyogIGZvciBzb2NrZXRzLiAqLworI2RlZmluZSBGX0dFVFNJRwkxMQkvKiAgZm9yIHNvY2tldHMuICovCisKKyNkZWZpbmUgRl9HRVRMSzY0CTEyCS8qICB1c2luZyAnc3RydWN0IGZsb2NrNjQnICovCisjZGVmaW5lIEZfU0VUTEs2NAkxMworI2RlZmluZSBGX1NFVExLVzY0CTE0CisKKy8qIGZvciBGX1tHRVR8U0VUXUZMICovCisjZGVmaW5lIEZEX0NMT0VYRUMJMQkvKiBhY3R1YWxseSBhbnl0aGluZyB3aXRoIGxvdyBiaXQgc2V0IGdvZXMgKi8KKworLyogZm9yIHBvc2l4IGZjbnRsKCkgYW5kIGxvY2tmKCkgKi8KKyNkZWZpbmUgRl9SRExDSwkJMQorI2RlZmluZSBGX1dSTENLCQkyCisjZGVmaW5lIEZfVU5MQ0sJCTMKKworLyogZm9yIG9sZCBpbXBsZW1lbnRhdGlvbiBvZiBic2QgZmxvY2sgKCkgKi8KKyNkZWZpbmUgRl9FWExDSwkJNAkvKiBvciAzICovCisjZGVmaW5lIEZfU0hMQ0sJCTgJLyogb3IgNCAqLworCisvKiBmb3IgbGVhc2VzICovCisjZGVmaW5lIEZfSU5QUk9HUkVTUwkxNgorCisvKiBvcGVyYXRpb25zIGZvciBic2QgZmxvY2soKSwgYWxzbyB1c2VkIGJ5IHRoZSBrZXJuZWwgaW1wbGVtZW50YXRpb24gKi8KKyNkZWZpbmUgTE9DS19TSAkJMQkvKiBzaGFyZWQgbG9jayAqLworI2RlZmluZSBMT0NLX0VYCQkyCS8qIGV4Y2x1c2l2ZSBsb2NrICovCisjZGVmaW5lIExPQ0tfTkIJCTQJLyogb3InZCB3aXRoIG9uZSBvZiB0aGUgYWJvdmUgdG8gcHJldmVudAorCQkJCSAgIGJsb2NraW5nICovCisjZGVmaW5lIExPQ0tfVU4JCTgJLyogcmVtb3ZlIGxvY2sgKi8KKworI2RlZmluZSBMT0NLX01BTkQJMzIJLyogVGhpcyBpcyBhIG1hbmRhdG9yeSBmbG9jayAqLworI2RlZmluZSBMT0NLX1JFQUQJNjQJLyogLi4uIFdoaWNoIGFsbG93cyBjb25jdXJyZW50IHJlYWQgb3BlcmF0aW9ucyAqLworI2RlZmluZSBMT0NLX1dSSVRFCTEyOAkvKiAuLi4gV2hpY2ggYWxsb3dzIGNvbmN1cnJlbnQgd3JpdGUgb3BlcmF0aW9ucyAqLworI2RlZmluZSBMT0NLX1JXCQkxOTIJLyogLi4uIFdoaWNoIGFsbG93cyBjb25jdXJyZW50IHJlYWQgJiB3cml0ZSBvcHMgKi8KKworc3RydWN0IGZsb2NrIHsKKwlzaG9ydCBsX3R5cGU7CisJc2hvcnQgbF93aGVuY2U7CisJb2ZmX3QgbF9zdGFydDsKKwlvZmZfdCBsX2xlbjsKKwlwaWRfdCBsX3BpZDsKKwlzaG9ydCBfX3VudXNlZDsKK307CisKK3N0cnVjdCBmbG9jazY0IHsKKwlzaG9ydCBsX3R5cGU7CisJc2hvcnQgbF93aGVuY2U7CisJbG9mZl90IGxfc3RhcnQ7CisJbG9mZl90IGxfbGVuOworCXBpZF90IGxfcGlkOworCXNob3J0IF9fdW51c2VkOworfTsKKworI2RlZmluZSBGX0xJTlVYX1NQRUNJRklDX0JBU0UJMTAyNAorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9maXhtYXAuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL2ZpeG1hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZTUyYjQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9maXhtYXAuaApAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqIGZpeG1hcC5oOiBjb21waWxlLXRpbWUgdmlydHVhbCBtZW1vcnkgYWxsb2NhdGlvbgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCBJbmdvIE1vbG5hcgorICoKKyAqIFN1cHBvcnQgb2YgQklHTUVNIGFkZGVkIGJ5IEdlcmhhcmQgV2ljaGVydCwgU2llbWVucyBBRywgSnVseSAxOTk5CisgKi8KKworI2lmbmRlZiBfQVNNX0ZJWE1BUF9ICisjZGVmaW5lIF9BU01fRklYTUFQX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaWZkZWYgQ09ORklHX0hJR0hNRU0KKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisjaW5jbHVkZSA8YXNtL2ttYXBfdHlwZXMuaD4KKyNlbmRpZgorCisvKgorICogSGVyZSB3ZSBkZWZpbmUgYWxsIHRoZSBjb21waWxlLXRpbWUgJ3NwZWNpYWwnIHZpcnR1YWwKKyAqIGFkZHJlc3Nlcy4gVGhlIHBvaW50IGlzIHRvIGhhdmUgYSBjb25zdGFudCBhZGRyZXNzIGF0CisgKiBjb21waWxlIHRpbWUsIGJ1dCB0byBzZXQgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb25seQorICogaW4gdGhlIGJvb3QgcHJvY2Vzcy4gV2UgYWxsb2NhdGUgdGhlc2Ugc3BlY2lhbCAgYWRkcmVzc2VzCisgKiBmcm9tIHRoZSB0b3Agb2YgdW51c2VkIHZpcnR1YWwgbWVtb3J5ICgweGZkMDAwMDAwIC0gMSBwYWdlKSBiYWNrd2FyZHMuCisgKiBBbHNvIHRoaXMgbGV0cyB1cyBkbyBmYWlsLXNhZmUgdm1hbGxvYygpLCB3ZQorICogY2FuIGd1YXJhbnRlZSB0aGF0IHRoZXNlIHNwZWNpYWwgYWRkcmVzc2VzIGFuZAorICogdm1hbGxvYygpLWVkIGFkZHJlc3NlcyBuZXZlciBvdmVybGFwLgorICoKKyAqIHRoZXNlICdjb21waWxlLXRpbWUgYWxsb2NhdGVkJyBtZW1vcnkgYnVmZmVycyBhcmUKKyAqIGZpeGVkLXNpemUgNGsgcGFnZXMuIChvciBsYXJnZXIgaWYgdXNlZCB3aXRoIGFuIGluY3JlbWVudAorICogaGlnaGdlciB0aGFuIDEpIHVzZSBmaXhtYXBfc2V0KGlkeCxwaHlzKSB0byBhc3NvY2lhdGUKKyAqIHBoeXNpY2FsIG1lbW9yeSB3aXRoIGZpeG1hcCBpbmRpY2VzLgorICoKKyAqIFRMQiBlbnRyaWVzIG9mIHN1Y2ggYnVmZmVycyB3aWxsIG5vdCBiZSBmbHVzaGVkIGFjcm9zcworICogdGFzayBzd2l0Y2hlcy4KKyAqLworCisvKgorICogb24gVVAgY3VycmVudGx5IHdlIHdpbGwgaGF2ZSBubyB0cmFjZSBvZiB0aGUgZml4bWFwIG1lY2hhbmlzbSwKKyAqIG5vIHBhZ2UgdGFibGUgYWxsb2NhdGlvbnMsIGV0Yy4gVGhpcyBtaWdodCBjaGFuZ2UgaW4gdGhlCisgKiBmdXR1cmUsIHNheSBmcmFtZWJ1ZmZlcnMgZm9yIHRoZSBjb25zb2xlIGRyaXZlcihzKSBjb3VsZCBiZQorICogZml4LW1hcHBlZD8KKyAqLworZW51bSBmaXhlZF9hZGRyZXNzZXMgeworCUZJWF9IT0xFLAorI2lmZGVmIENPTkZJR19ISUdITUVNCisJRklYX0tNQVBfQkVHSU4sCisJRklYX0tNQVBfRU5EID0gRklYX0tNQVBfQkVHSU4rKEtNX1RZUEVfTlIqTlJfQ1BVUyktMSwKKyNlbmRpZgorCV9fZW5kX29mX2ZpeGVkX2FkZHJlc3NlcworfTsKKworZXh0ZXJuIHZvaWQgX19zZXRfZml4bWFwIChlbnVtIGZpeGVkX2FkZHJlc3NlcyBpZHgsCisJCQkJCXVuc2lnbmVkIGxvbmcgcGh5cywgcGdwcm90X3QgZmxhZ3MpOworCisjZGVmaW5lIHNldF9maXhtYXAoaWR4LCBwaHlzKSBcCisJCV9fc2V0X2ZpeG1hcChpZHgsIHBoeXMsIFBBR0VfS0VSTkVMKQorLyoKKyAqIFNvbWUgaGFyZHdhcmUgd2FudHMgdG8gZ2V0IGZpeG1hcHBlZCB3aXRob3V0IGNhY2hpbmcuCisgKi8KKyNkZWZpbmUgc2V0X2ZpeG1hcF9ub2NhY2hlKGlkeCwgcGh5cykgXAorCQlfX3NldF9maXhtYXAoaWR4LCBwaHlzLCBQQUdFX0tFUk5FTF9OT0NBQ0hFKQorLyoKKyAqIHVzZWQgYnkgdm1hbGxvYy5jLgorICoKKyAqIExlYXZlIG9uZSBlbXB0eSBwYWdlIGJldHdlZW4gSU8gcGFnZXMgYXQgMHhmZDAwMDAwMCBhbmQKKyAqIHRoZSBzdGFydCBvZiB0aGUgZml4bWFwLgorICovCisjZGVmaW5lIEZJWEFERFJfVE9QCSgweGZjZmZmMDAwVUwpCisjZGVmaW5lIEZJWEFERFJfU0laRQkoKF9fZW5kX29mX2ZpeGVkX2FkZHJlc3NlcykgPDwgUEFHRV9TSElGVCkKKyNkZWZpbmUgRklYQUREUl9TVEFSVAkoRklYQUREUl9UT1AgLSBGSVhBRERSX1NJWkUpCisKKyNkZWZpbmUgX19maXhfdG9fdmlydCh4KQkoRklYQUREUl9UT1AgLSAoKHgpIDw8IFBBR0VfU0hJRlQpKQorI2RlZmluZSBfX3ZpcnRfdG9fZml4KHgpCSgoRklYQUREUl9UT1AgLSAoKHgpJlBBR0VfTUFTSykpID4+IFBBR0VfU0hJRlQpCisKK2V4dGVybiB2b2lkIF9fdGhpc19maXhtYXBfZG9lc19ub3RfZXhpc3Qodm9pZCk7CisKKy8qCisgKiAnaW5kZXggdG8gYWRkcmVzcycgdHJhbnNsYXRpb24uIElmIGFueW9uZSB0cmllcyB0byB1c2UgdGhlIGlkeAorICogZGlyZWN0bHkgd2l0aG91dCB0cmFubGF0aW9uLCB3ZSBjYXRjaCB0aGUgYnVnIHdpdGggYSBOVUxMLWRlZmVyZW5jZQorICoga2VybmVsIG9vcHMuIElsbGVnYWwgcmFuZ2VzIG9mIGluY29taW5nIGluZGljZXMgYXJlIGNhdWdodCB0b28uCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBmaXhfdG9fdmlydChjb25zdCB1bnNpZ25lZCBpbnQgaWR4KQoreworCS8qCisJICogdGhpcyBicmFuY2ggZ2V0cyBjb21wbGV0ZWx5IGVsaW1pbmF0ZWQgYWZ0ZXIgaW5saW5pbmcsCisJICogZXhjZXB0IHdoZW4gc29tZW9uZSB0cmllcyB0byB1c2UgZml4YWRkciBpbmRpY2VzIGluIGFuCisJICogaWxsZWdhbCB3YXkuIChzdWNoIGFzIG1peGluZyB1cCBhZGRyZXNzIHR5cGVzIG9yIHVzaW5nCisJICogb3V0LW9mLXJhbmdlIGluZGljZXMpLgorCSAqCisJICogSWYgaXQgZG9lc24ndCBnZXQgcmVtb3ZlZCwgdGhlIGxpbmtlciB3aWxsIGNvbXBsYWluCisJICogbG91ZGx5IHdpdGggYSByZWFzb25hYmx5IGNsZWFyIGVycm9yIG1lc3NhZ2UuLgorCSAqLworCWlmIChpZHggPj0gX19lbmRfb2ZfZml4ZWRfYWRkcmVzc2VzKQorCQlfX3RoaXNfZml4bWFwX2RvZXNfbm90X2V4aXN0KCk7CisKKyAgICAgICAgcmV0dXJuIF9fZml4X3RvX3ZpcnQoaWR4KTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHZpcnRfdG9fZml4KGNvbnN0IHVuc2lnbmVkIGxvbmcgdmFkZHIpCit7CisJQlVHX09OKHZhZGRyID49IEZJWEFERFJfVE9QIHx8IHZhZGRyIDwgRklYQUREUl9TVEFSVCk7CisJcmV0dXJuIF9fdmlydF90b19maXgodmFkZHIpOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2Zsb3BweS5oIGIvaW5jbHVkZS9hc20tc3BhcmMvZmxvcHB5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzgwZWU3ZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL2Zsb3BweS5oCkBAIC0wLDAgKzEsMzY5IEBACisvKiBhc20tc3BhcmMvZmxvcHB5Lmg6IFNwYXJjIHNwZWNpZmljIHBhcnRzIG9mIHRoZSBGbG9wcHkgZHJpdmVyLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NSBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCisgKi8KKworI2lmbmRlZiBfX0FTTV9TUEFSQ19GTE9QUFlfSAorI2RlZmluZSBfX0FTTV9TUEFSQ19GTE9QUFlfSAorCisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vaWRwcm9tLmg+CisjaW5jbHVkZSA8YXNtL21hY2hpbmVzLmg+CisjaW5jbHVkZSA8YXNtL29wbGliLmg+CisjaW5jbHVkZSA8YXNtL2F1eGlvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorCisvKiBXZSBkb24ndCBuZWVkIG5vIHN0aW5raW4nIEkvTyBwb3J0IGFsbG9jYXRpb24gY3JhcC4gKi8KKyN1bmRlZiByZWxlYXNlX3JlZ2lvbgorI3VuZGVmIGNoZWNrX3JlZ2lvbgorI3VuZGVmIHJlcXVlc3RfcmVnaW9uCisjZGVmaW5lIHJlbGVhc2VfcmVnaW9uKFgsIFkpCWRvIHsgfSB3aGlsZSgwKQorI2RlZmluZSBjaGVja19yZWdpb24oWCwgWSkJKDApCisjZGVmaW5lIHJlcXVlc3RfcmVnaW9uKFgsIFksIFopCSgxKQorCisvKiBSZWZlcmVuY2VzOgorICogMSkgTmV0YnNkIFN1biBmbG9wcHkgZHJpdmVyLgorICogMikgTkNSIDgyMDc3IGNvbnRyb2xsZXIgbWFudWFsCisgKiAzKSBJbnRlbCA4MjA3NyBjb250cm9sbGVyIG1hbnVhbAorICovCitzdHJ1Y3Qgc3VuX2ZscHlfY29udHJvbGxlciB7CisJdm9sYXRpbGUgdW5zaWduZWQgY2hhciBzdGF0dXNfODIwNzI7ICAvKiBNYWluIFN0YXR1cyByZWcuICovCisjZGVmaW5lIGRjcl84MjA3MiAgICAgICAgICAgICAgc3RhdHVzXzgyMDcyICAgLyogRGlnaXRhbCBDb250cm9sIHJlZy4gKi8KKyNkZWZpbmUgc3RhdHVzMV84MjA3NyAgICAgICAgICBzdGF0dXNfODIwNzIgICAvKiBBdXhpbGlhcnkgU3RhdHVzIHJlZy4gMSAqLworCisJdm9sYXRpbGUgdW5zaWduZWQgY2hhciBkYXRhXzgyMDcyOyAgICAvKiBEYXRhIGZpZm8uICovCisjZGVmaW5lIHN0YXR1czJfODIwNzcgICAgICAgICAgZGF0YV84MjA3MiAgICAgLyogQXV4aWxpYXJ5IFN0YXR1cyByZWcuIDIgKi8KKworCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgZG9yXzgyMDc3OyAgICAgLyogRGlnaXRhbCBPdXRwdXQgcmVnLiAqLworCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgdGFwZWN0bF84MjA3NzsgLyogV2hhdCB0aGU/IFRhcGUgY29udHJvbCByZWc/ICovCisKKwl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIHN0YXR1c184MjA3NzsgIC8qIE1haW4gU3RhdHVzIFJlZ2lzdGVyLiAqLworI2RlZmluZSBkcnNfODIwNzcgICAgICAgICAgICAgIHN0YXR1c184MjA3NyAgIC8qIERpZ2l0YWwgUmF0ZSBTZWxlY3QgcmVnLiAqLworCisJdm9sYXRpbGUgdW5zaWduZWQgY2hhciBkYXRhXzgyMDc3OyAgICAvKiBEYXRhIGZpZm8uICovCisJdm9sYXRpbGUgdW5zaWduZWQgY2hhciBfX191bnVzZWQ7CisJdm9sYXRpbGUgdW5zaWduZWQgY2hhciBkaXJfODIwNzc7ICAgICAvKiBEaWdpdGFsIElucHV0IHJlZy4gKi8KKyNkZWZpbmUgZGNyXzgyMDc3ICAgICAgICAgICAgICBkaXJfODIwNzcgICAgICAvKiBDb25maWcgQ29udHJvbCByZWcuICovCit9OworCisvKiBZb3UnbGwgb25seSBldmVyIGZpbmQgb25lIGNvbnRyb2xsZXIgb24gYSBTcGFyY1N0YXRpb24gYW55d2F5cy4gKi8KK3N0YXRpYyBzdHJ1Y3Qgc3VuX2ZscHlfY29udHJvbGxlciAqc3VuX2ZkYyA9IE5VTEw7Cit2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICpmZGNfc3RhdHVzOworCitzdHJ1Y3Qgc3VuX2Zsb3BweV9vcHMgeworCXVuc2lnbmVkIGNoYXIgKCpmZF9pbmIpKGludCBwb3J0KTsKKwl2b2lkICgqZmRfb3V0YikodW5zaWduZWQgY2hhciB2YWx1ZSwgaW50IHBvcnQpOworfTsKKworc3RhdGljIHN0cnVjdCBzdW5fZmxvcHB5X29wcyBzdW5fZmRvcHM7CisKKyNkZWZpbmUgZmRfaW5iKHBvcnQpICAgICAgICAgICAgICBzdW5fZmRvcHMuZmRfaW5iKHBvcnQpCisjZGVmaW5lIGZkX291dGIodmFsdWUscG9ydCkgICAgICAgc3VuX2Zkb3BzLmZkX291dGIodmFsdWUscG9ydCkKKyNkZWZpbmUgZmRfZW5hYmxlX2RtYSgpICAgICAgICAgICBzdW5fZmRfZW5hYmxlX2RtYSgpCisjZGVmaW5lIGZkX2Rpc2FibGVfZG1hKCkgICAgICAgICAgc3VuX2ZkX2Rpc2FibGVfZG1hKCkKKyNkZWZpbmUgZmRfcmVxdWVzdF9kbWEoKSAgICAgICAgICAoMCkgLyogbm90aGluZy4uLiAqLworI2RlZmluZSBmZF9mcmVlX2RtYSgpICAgICAgICAgICAgIC8qIG5vdGhpbmcuLi4gKi8KKyNkZWZpbmUgZmRfY2xlYXJfZG1hX2ZmKCkgICAgICAgICAvKiBub3RoaW5nLi4uICovCisjZGVmaW5lIGZkX3NldF9kbWFfbW9kZShtb2RlKSAgICAgc3VuX2ZkX3NldF9kbWFfbW9kZShtb2RlKQorI2RlZmluZSBmZF9zZXRfZG1hX2FkZHIoYWRkcikgICAgIHN1bl9mZF9zZXRfZG1hX2FkZHIoYWRkcikKKyNkZWZpbmUgZmRfc2V0X2RtYV9jb3VudChjb3VudCkgICBzdW5fZmRfc2V0X2RtYV9jb3VudChjb3VudCkKKyNkZWZpbmUgZmRfZW5hYmxlX2lycSgpICAgICAgICAgICAvKiBub3RoaW5nLi4uICovCisjZGVmaW5lIGZkX2Rpc2FibGVfaXJxKCkgICAgICAgICAgLyogbm90aGluZy4uLiAqLworI2RlZmluZSBmZF9jYWNoZWZsdXNoKGFkZHIsIHNpemUpIC8qIG5vdGhpbmcuLi4gKi8KKyNkZWZpbmUgZmRfcmVxdWVzdF9pcnEoKSAgICAgICAgICBzdW5fZmRfcmVxdWVzdF9pcnEoKQorI2RlZmluZSBmZF9mcmVlX2lycSgpICAgICAgICAgICAgIC8qIG5vdGhpbmcuLi4gKi8KKyNpZiAwICAvKiBQMzogYWRkZWQgYnkgQWxhaW4sIHRoZXNlIGNhdXNlIGEgTU1VIGNvcnJ1cHRpb24uIDE5OTYwNTI0IFhYWCAqLworI2RlZmluZSBmZF9kbWFfbWVtX2FsbG9jKHNpemUpICAgICgodW5zaWduZWQgbG9uZykgdm1hbGxvYyhzaXplKSkKKyNkZWZpbmUgZmRfZG1hX21lbV9mcmVlKGFkZHIsc2l6ZSkgKHZmcmVlKCh2b2lkICopKGFkZHIpKSkKKyNlbmRpZgorCisjZGVmaW5lIEZMT1BQWV9NT1RPUl9NQVNLICAgICAgICAgMHgxMAorCisvKiBYWFggVGhpcyBpc24ndCByZWFsbHkgY29ycmVjdC4gWFhYICovCisjZGVmaW5lIGdldF9kbWFfcmVzaWR1ZSh4KSAgICAgICAgKDApCisKKyNkZWZpbmUgRkxPUFBZMF9UWVBFICA0CisjZGVmaW5lIEZMT1BQWTFfVFlQRSAgMAorCisvKiBTdXBlciBwYXJhbm9pZC4uLiAqLworI3VuZGVmIEhBVkVfRElTQUJMRV9ITFQKKworLyogSGVyZSBpcyB3aGVyZSB3ZSBjYXRjaCB0aGUgZmxvcHB5IGRyaXZlciB0cnlpbmcgdG8gaW5pdGlhbGl6ZSwKKyAqIHRoZXJlZm9yZSB0aGlzIGlzIHdoZXJlIHdlIGNhbGwgdGhlIFBST00gZGV2aWNlIHRyZWUgcHJvYmluZworICogcm91dGluZSBldGMuIG9uIHRoZSBTcGFyYy4KKyAqLworI2RlZmluZSBGREMxICAgICAgICAgICAgICAgICAgICAgIHN1bl9mbG9wcHlfaW5pdCgpCisKKyNkZWZpbmUgTl9GREMgICAgMQorI2RlZmluZSBOX0RSSVZFICA4CisKKy8qIE5vIDY0ayBib3VuZGFyeSBjcm9zc2luZyBwcm9ibGVtcyBvbiB0aGUgU3BhcmMuICovCisjZGVmaW5lIENST1NTXzY0S0IoYSxzKSAoMCkKKworLyogUm91dGluZXMgdW5pcXVlIHRvIGVhY2ggY29udHJvbGxlciB0eXBlIG9uIGEgU3VuLiAqLworc3RhdGljIHVuc2lnbmVkIGNoYXIgc3VuXzgyMDcyX2ZkX2luYihpbnQgcG9ydCkKK3sKKwl1ZGVsYXkoNSk7CisJc3dpdGNoKHBvcnQgJiA3KSB7CisJZGVmYXVsdDoKKwkJcHJpbnRrKCJmbG9wcHk6IEFza2VkIHRvIHJlYWQgdW5rbm93biBwb3J0ICVkXG4iLCBwb3J0KTsKKwkJcGFuaWMoImZsb3BweTogUG9ydCBib2xpeGVkLiIpOworCWNhc2UgNDogLyogRkRfU1RBVFVTICovCisJCXJldHVybiBzdW5fZmRjLT5zdGF0dXNfODIwNzIgJiB+U1RBVFVTX0RNQTsKKwljYXNlIDU6IC8qIEZEX0RBVEEgKi8KKwkJcmV0dXJuIHN1bl9mZGMtPmRhdGFfODIwNzI7CisJY2FzZSA3OiAvKiBGRF9ESVIgKi8KKwkJcmV0dXJuIChnZXRfYXV4aW8oKSAmIEFVWElPX0ZMUFlfRENIRyk/IDB4ODA6IDA7CisJfTsKKwlwYW5pYygic3VuXzgyMDcyX2ZkX2luYjogSG93IGRpZCBJIGdldCBoZXJlPyIpOworfQorCitzdGF0aWMgdm9pZCBzdW5fODIwNzJfZmRfb3V0Yih1bnNpZ25lZCBjaGFyIHZhbHVlLCBpbnQgcG9ydCkKK3sKKwl1ZGVsYXkoNSk7CisJc3dpdGNoKHBvcnQgJiA3KSB7CisJZGVmYXVsdDoKKwkJcHJpbnRrKCJmbG9wcHk6IEFza2VkIHRvIHdyaXRlIHRvIHVua25vd24gcG9ydCAlZFxuIiwgcG9ydCk7CisJCXBhbmljKCJmbG9wcHk6IFBvcnQgYm9saXhlZC4iKTsKKwljYXNlIDI6IC8qIEZEX0RPUiAqLworCQkvKiBPaCBnZWVzZSwgODIwNzIgb24gdGhlIFN1biBoYXMgbm8gRE9SIHJlZ2lzdGVyLAorCQkgKiB0aGUgZnVuY3Rpb25hbGl0eSBpcyBpbXBsZW1lbnRlZCB2aWEgdGhlIEFVWElPCisJCSAqIEkvTyByZWdpc3Rlci4gIFNvIHdlIG11c3QgZW11bGF0ZSB0aGUgYmVoYXZpb3IuCisJCSAqCisJCSAqIEFTU1VNUFRJT05TOiAgVGhlcmUgd2lsbCBvbmx5IGV2ZXIgYmUgb25lIGZsb3BweQorCQkgKiAgICAgICAgICAgICAgIGRyaXZlIGF0dGFjaGVkIHRvIGEgU3VuIGNvbnRyb2xsZXIKKwkJICogICAgICAgICAgICAgICBhbmQgaXQgd2lsbCBiZSBhdCBkcml2ZSB6ZXJvLgorCQkgKi8KKwkJeworCQkJdW5zaWduZWQgYml0cyA9IDA7CisJCQlpZiAodmFsdWUgJiAweDEwKSBiaXRzIHw9IEFVWElPX0ZMUFlfRFNFTDsKKwkJCWlmICgodmFsdWUgJiAweDgwKSA9PSAwKSBiaXRzIHw9IEFVWElPX0ZMUFlfRUpDVDsKKwkJCXNldF9hdXhpbyhiaXRzLCAofmJpdHMpICYgKEFVWElPX0ZMUFlfRFNFTHxBVVhJT19GTFBZX0VKQ1QpKTsKKwkJfQorCQlicmVhazsKKwljYXNlIDU6IC8qIEZEX0RBVEEgKi8KKwkJc3VuX2ZkYy0+ZGF0YV84MjA3MiA9IHZhbHVlOworCQlicmVhazsKKwljYXNlIDc6IC8qIEZEX0RDUiAqLworCQlzdW5fZmRjLT5kY3JfODIwNzIgPSB2YWx1ZTsKKwkJYnJlYWs7CisJY2FzZSA0OiAvKiBGRF9TVEFUVVMgKi8KKwkJc3VuX2ZkYy0+c3RhdHVzXzgyMDcyID0gdmFsdWU7CisJCWJyZWFrOworCX07CisJcmV0dXJuOworfQorCitzdGF0aWMgdW5zaWduZWQgY2hhciBzdW5fODIwNzdfZmRfaW5iKGludCBwb3J0KQoreworCXVkZWxheSg1KTsKKwlzd2l0Y2gocG9ydCAmIDcpIHsKKwlkZWZhdWx0OgorCQlwcmludGsoImZsb3BweTogQXNrZWQgdG8gcmVhZCB1bmtub3duIHBvcnQgJWRcbiIsIHBvcnQpOworCQlwYW5pYygiZmxvcHB5OiBQb3J0IGJvbGl4ZWQuIik7CisJY2FzZSA0OiAvKiBGRF9TVEFUVVMgKi8KKwkJcmV0dXJuIHN1bl9mZGMtPnN0YXR1c184MjA3NyAmIH5TVEFUVVNfRE1BOworCWNhc2UgNTogLyogRkRfREFUQSAqLworCQlyZXR1cm4gc3VuX2ZkYy0+ZGF0YV84MjA3NzsKKwljYXNlIDc6IC8qIEZEX0RJUiAqLworCQkvKiBYWFg6IElzIERDTCBvbiAweDgwIGluIHN1bjRtPyAqLworCQlyZXR1cm4gc3VuX2ZkYy0+ZGlyXzgyMDc3OworCX07CisJcGFuaWMoInN1bl84MjA3Ml9mZF9pbmI6IEhvdyBkaWQgSSBnZXQgaGVyZT8iKTsKK30KKworc3RhdGljIHZvaWQgc3VuXzgyMDc3X2ZkX291dGIodW5zaWduZWQgY2hhciB2YWx1ZSwgaW50IHBvcnQpCit7CisJdWRlbGF5KDUpOworCXN3aXRjaChwb3J0ICYgNykgeworCWRlZmF1bHQ6CisJCXByaW50aygiZmxvcHB5OiBBc2tlZCB0byB3cml0ZSB0byB1bmtub3duIHBvcnQgJWRcbiIsIHBvcnQpOworCQlwYW5pYygiZmxvcHB5OiBQb3J0IGJvbGl4ZWQuIik7CisJY2FzZSAyOiAvKiBGRF9ET1IgKi8KKwkJLyogSGFwcGlseSwgdGhlIDgyMDc3IGhhcyBhIHJlYWwgRE9SIHJlZ2lzdGVyLiAqLworCQlzdW5fZmRjLT5kb3JfODIwNzcgPSB2YWx1ZTsKKwkJYnJlYWs7CisJY2FzZSA1OiAvKiBGRF9EQVRBICovCisJCXN1bl9mZGMtPmRhdGFfODIwNzcgPSB2YWx1ZTsKKwkJYnJlYWs7CisJY2FzZSA3OiAvKiBGRF9EQ1IgKi8KKwkJc3VuX2ZkYy0+ZGNyXzgyMDc3ID0gdmFsdWU7CisJCWJyZWFrOworCWNhc2UgNDogLyogRkRfU1RBVFVTICovCisJCXN1bl9mZGMtPnN0YXR1c184MjA3NyA9IHZhbHVlOworCQlicmVhazsKKwl9OworCXJldHVybjsKK30KKworLyogRm9yIHBzZXVkby1kbWEgKFN1biBmbG9wcHkgZHJpdmVzIGhhdmUgbm8gcmVhbCBETUEgYXZhaWxhYmxlIHRvCisgKiB0aGVtIHNvIHdlIG11c3QgZWF0IHRoZSBkYXRhIGZpZm8gYnl0ZXMgZGlyZWN0bHkgb3Vyc2VsdmVzKSB3ZSBoYXZlCisgKiB0aHJlZSBzdGF0ZSB2YXJpYWJsZXMuICBkb2luZ19wZG1hIHRlbGxzIG91ciBpbmxpbmUgbG93LWxldmVsCisgKiBhc3NlbWJseSBmbG9wcHkgaW50ZXJydXB0IGVudHJ5IHBvaW50IHdoZXRoZXIgaXQgc2hvdWxkIHNpdCBhbmQgZWF0CisgKiBieXRlcyBmcm9tIHRoZSBmaWZvIG9yIGp1c3QgdHJhbnNmZXIgY29udHJvbCB1cCB0byB0aGUgaGlnaGVyIGxldmVsCisgKiBmbG9wcHkgaW50ZXJydXB0IGMtY29kZS4gIEkgdHJpZWQgdmVyeSBoYXJkIGJ1dCBJIGNvdWxkIG5vdCBnZXQgdGhlCisgKiBwc2V1ZG8tZG1hIHRvIHdvcmsgaW4gYy1jb2RlIHdpdGhvdXQgZ2V0dGluZyBtYW55IG92ZXJydW5zIGFuZAorICogdW5kZXJydW5zLiAgSWYgbm9uLXplcm8sIGRvaW5nX3BkbWEgZW5jb2RlcyB0aGUgZGlyZWN0aW9uIG9mCisgKiB0aGUgdHJhbnNmZXIgZm9yIGRlYnVnZ2luZy4gIDE9cmVhZCAyPXdyaXRlCisgKi8KK2NoYXIgKnBkbWFfdmFkZHI7Cit1bnNpZ25lZCBsb25nIHBkbWFfc2l6ZTsKK3ZvbGF0aWxlIGludCBkb2luZ19wZG1hID0gMDsKKworLyogVGhpcyBpcyBzb2Z0d2FyZSBzdGF0ZSAqLworY2hhciAqcGRtYV9iYXNlID0gTlVMTDsKK3Vuc2lnbmVkIGxvbmcgcGRtYV9hcmVhc2l6ZTsKKworLyogQ29tbW9uIHJvdXRpbmVzIHRvIGFsbCBjb250cm9sbGVyIHR5cGVzIG9uIHRoZSBTcGFyYy4gKi8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgdmlydHVhbF9kbWFfaW5pdCh2b2lkKQoreworCS8qIG5vdGhpbmcuLi4gKi8KK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBzdW5fZmRfZGlzYWJsZV9kbWEodm9pZCkKK3sKKwlkb2luZ19wZG1hID0gMDsKKwlpZiAocGRtYV9iYXNlKSB7CisJCW1tdV91bmxvY2thcmVhKHBkbWFfYmFzZSwgcGRtYV9hcmVhc2l6ZSk7CisJCXBkbWFfYmFzZSA9IDA7CisJfQorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHN1bl9mZF9zZXRfZG1hX21vZGUoaW50IG1vZGUpCit7CisJc3dpdGNoKG1vZGUpIHsKKwljYXNlIERNQV9NT0RFX1JFQUQ6CisJCWRvaW5nX3BkbWEgPSAxOworCQlicmVhazsKKwljYXNlIERNQV9NT0RFX1dSSVRFOgorCQlkb2luZ19wZG1hID0gMjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKCJVbmtub3duIGRtYSBtb2RlICVkXG4iLCBtb2RlKTsKKwkJcGFuaWMoImZsb3BweTogR2l2aW5nIHVwLi4uIik7CisJfQorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHN1bl9mZF9zZXRfZG1hX2FkZHIoY2hhciAqYnVmZmVyKQoreworCXBkbWFfdmFkZHIgPSBidWZmZXI7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgc3VuX2ZkX3NldF9kbWFfY291bnQoaW50IGxlbmd0aCkKK3sKKwlwZG1hX3NpemUgPSBsZW5ndGg7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgc3VuX2ZkX2VuYWJsZV9kbWEodm9pZCkKK3sKKwlwZG1hX3ZhZGRyID0gbW11X2xvY2thcmVhKHBkbWFfdmFkZHIsIHBkbWFfc2l6ZSk7CisJcGRtYV9iYXNlID0gcGRtYV92YWRkcjsKKwlwZG1hX2FyZWFzaXplID0gcGRtYV9zaXplOworfQorCisvKiBPdXIgbG93LWxldmVsIGVudHJ5IHBvaW50IGluIGFyY2gvc3BhcmMva2VybmVsL2VudHJ5LlMgKi8KK2lycXJldHVybl90IGZsb3BweV9oYXJkaW50KGludCBpcnEsIHZvaWQgKnVudXNlZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCitzdGF0aWMgaW50IHN1bl9mZF9yZXF1ZXN0X2lycSh2b2lkKQoreworCXN0YXRpYyBpbnQgb25jZSA9IDA7CisJaW50IGVycm9yOworCisJaWYoIW9uY2UpIHsKKwkJb25jZSA9IDE7CisJCWVycm9yID0gcmVxdWVzdF9mYXN0X2lycShGTE9QUFlfSVJRLCBmbG9wcHlfaGFyZGludCwgU0FfSU5URVJSVVBULCAiZmxvcHB5Iik7CisJCXJldHVybiAoKGVycm9yID09IDApID8gMCA6IC0xKTsKKwl9IGVsc2UgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbGludXhfcHJvbV9yZWdpc3RlcnMgZmRfcmVnc1syXTsKKworc3RhdGljIGludCBzdW5fZmxvcHB5X2luaXQodm9pZCkKK3sKKwljaGFyIHN0YXRlWzEyOF07CisJaW50IHRub2RlLCBmZF9ub2RlLCBudW1fcmVnczsKKwlzdHJ1Y3QgcmVzb3VyY2UgcjsKKworCXVzZV92aXJ0dWFsX2RtYSA9IDE7CisJCisJRkxPUFBZX0lSUSA9IDExOworCS8qIEZvcmdldCBpdCBpZiB3ZSBhcmVuJ3Qgb24gYSBtYWNoaW5lIHRoYXQgY291bGQgcG9zc2libHkKKwkgKiBldmVyIGhhdmUgYSBmbG9wcHkgZHJpdmUuCisJICovCisJaWYoKHNwYXJjX2NwdV9tb2RlbCAhPSBzdW40YyAmJiBzcGFyY19jcHVfbW9kZWwgIT0gc3VuNG0pIHx8CisJICAgKChpZHByb20tPmlkX21hY2h0eXBlID09IChTTV9TVU40QyB8IFNNXzRDX1NMQykpIHx8CisJICAgIChpZHByb20tPmlkX21hY2h0eXBlID09IChTTV9TVU40QyB8IFNNXzRDX0VMQykpKSkgeworCQkvKiBXZSBjZXJ0YWlubHkgZG9uJ3QgaGF2ZSBhIGZsb3BweSBjb250cm9sbGVyLiAqLworCQlnb3RvIG5vX3N1bl9mZGM7CisJfQorCS8qIFdlbGwsIHRyeSB0byBmaW5kIG9uZS4gKi8KKwl0bm9kZSA9IHByb21fZ2V0Y2hpbGQocHJvbV9yb290X25vZGUpOworCWZkX25vZGUgPSBwcm9tX3NlYXJjaHNpYmxpbmdzKHRub2RlLCAib2JpbyIpOworCWlmKGZkX25vZGUgIT0gMCkgeworCQl0bm9kZSA9IHByb21fZ2V0Y2hpbGQoZmRfbm9kZSk7CisJCWZkX25vZGUgPSBwcm9tX3NlYXJjaHNpYmxpbmdzKHRub2RlLCAiU1VOVyxmZHR3byIpOworCX0gZWxzZSB7CisJCWZkX25vZGUgPSBwcm9tX3NlYXJjaHNpYmxpbmdzKHRub2RlLCAiZmQiKTsKKwl9CisJaWYoZmRfbm9kZSA9PSAwKSB7CisJCWdvdG8gbm9fc3VuX2ZkYzsKKwl9CisKKwkvKiBUaGUgc3VuNG0gbGV0cyB1cyBrbm93IGlmIHRoZSBjb250cm9sbGVyIGlzIGFjdHVhbGx5IHVzYWJsZS4gKi8KKwlpZihzcGFyY19jcHVfbW9kZWwgPT0gc3VuNG0gJiYKKwkgICBwcm9tX2dldHByb3BlcnR5KGZkX25vZGUsICJzdGF0dXMiLCBzdGF0ZSwgc2l6ZW9mKHN0YXRlKSkgIT0gLTEpIHsKKwkJaWYoIXN0cmNtcChzdGF0ZSwgImRpc2FibGVkIikpIHsKKwkJCWdvdG8gbm9fc3VuX2ZkYzsKKwkJfQorCX0KKwludW1fcmVncyA9IHByb21fZ2V0cHJvcGVydHkoZmRfbm9kZSwgInJlZyIsIChjaGFyICopIGZkX3JlZ3MsIHNpemVvZihmZF9yZWdzKSk7CisJbnVtX3JlZ3MgPSAobnVtX3JlZ3MgLyBzaXplb2YoZmRfcmVnc1swXSkpOworCXByb21fYXBwbHlfb2Jpb19yYW5nZXMoZmRfcmVncywgbnVtX3JlZ3MpOworCW1lbXNldCgmciwgMCwgc2l6ZW9mKHIpKTsKKwlyLmZsYWdzID0gZmRfcmVnc1swXS53aGljaF9pbzsKKwlyLnN0YXJ0ID0gZmRfcmVnc1swXS5waHlzX2FkZHI7CisJc3VuX2ZkYyA9IChzdHJ1Y3Qgc3VuX2ZscHlfY29udHJvbGxlciAqKQorCSAgICBzYnVzX2lvcmVtYXAoJnIsIDAsIGZkX3JlZ3NbMF0ucmVnX3NpemUsICJmbG9wcHkiKTsKKworCS8qIExhc3QgbWludXRlIHNhbml0eSBjaGVjay4uLiAqLworCWlmKHN1bl9mZGMtPnN0YXR1c184MjA3MiA9PSAweGZmKSB7CisJCXN1bl9mZGMgPSBOVUxMOworCQlnb3RvIG5vX3N1bl9mZGM7CisJfQorCisgICAgICAgIGlmKHNwYXJjX2NwdV9tb2RlbCA9PSBzdW40YykgeworICAgICAgICAgICAgICAgIHN1bl9mZG9wcy5mZF9pbmIgPSBzdW5fODIwNzJfZmRfaW5iOworICAgICAgICAgICAgICAgIHN1bl9mZG9wcy5mZF9vdXRiID0gc3VuXzgyMDcyX2ZkX291dGI7CisgICAgICAgICAgICAgICAgZmRjX3N0YXR1cyA9ICZzdW5fZmRjLT5zdGF0dXNfODIwNzI7CisgICAgICAgICAgICAgICAgLyogcHJpbnRrKCJBVVhJTyBAMHglbHhcbiIsIGF1eGlvX3JlZ2lzdGVyKTsgKi8gLyogUDMgKi8KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzdW5fZmRvcHMuZmRfaW5iID0gc3VuXzgyMDc3X2ZkX2luYjsKKyAgICAgICAgICAgICAgICBzdW5fZmRvcHMuZmRfb3V0YiA9IHN1bl84MjA3N19mZF9vdXRiOworICAgICAgICAgICAgICAgIGZkY19zdGF0dXMgPSAmc3VuX2ZkYy0+c3RhdHVzXzgyMDc3OworICAgICAgICAgICAgICAgIC8qIHByaW50aygiRE9SIEAweCVwXG4iLCAmc3VuX2ZkYy0+ZG9yXzgyMDc3KTsgKi8gLyogUDMgKi8KKwl9CisKKwkvKiBTdWNjZXNzLi4uICovCisJYWxsb3dlZF9kcml2ZV9tYXNrID0gMHgwMTsKKwlyZXR1cm4gKGludCkgc3VuX2ZkYzsKKworbm9fc3VuX2ZkYzoKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgc3BhcmNfZWplY3Qodm9pZCkKK3sKKwlzZXRfZG9yKDB4MDAsIDB4ZmYsIDB4OTApOworCXVkZWxheSg1MDApOworCXNldF9kb3IoMHgwMCwgMHg2ZiwgMHgwMCk7CisJdWRlbGF5KDUwMCk7CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgZmRfZWplY3QoZHJpdmUpIHNwYXJjX2VqZWN0KCkKKworI2RlZmluZSBFWFRSQV9GTE9QUFlfUEFSQU1TCisKKyNlbmRpZiAvKiAhKF9fQVNNX1NQQVJDX0ZMT1BQWV9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvaGFyZGlycS5oIGIvaW5jbHVkZS9hc20tc3BhcmMvaGFyZGlycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhNjY4YzQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9oYXJkaXJxLmgKQEAgLTAsMCArMSwyNCBAQAorLyogaGFyZGlycS5oOiAzMi1iaXQgU3BhcmMgaGFyZCBJUlEgc3VwcG9ydC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTcgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQorICogQ29weXJpZ2h0IChDKSAxOTk4LTIwMDAgQW50b24gQmxhbmNoYXJkIChhbnRvbkBzYW1iYS5vcmcpCisgKi8KKworI2lmbmRlZiBfX1NQQVJDX0hBUkRJUlFfSAorI2RlZmluZSBfX1NQQVJDX0hBUkRJUlFfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KKworLyogZW50cnkuUyBpcyBzZW5zaXRpdmUgdG8gdGhlIG9mZnNldHMgb2YgdGhlc2UgZmllbGRzICovIC8qIFhYWCBQMyBJcyBpdD8gKi8KK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQgX19zb2Z0aXJxX3BlbmRpbmc7Cit9IF9fX19jYWNoZWxpbmVfYWxpZ25lZCBpcnFfY3B1c3RhdF90OworCisjaW5jbHVkZSA8bGludXgvaXJxX2NwdXN0YXQuaD4JLyogU3RhbmRhcmQgbWFwcGluZ3MgZm9yIGlycV9jcHVzdGF0X3QgYWJvdmUgKi8KKworI2RlZmluZSBIQVJESVJRX0JJVFMgICAgOAorCisjZW5kaWYgLyogX19TUEFSQ19IQVJESVJRX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2hkcmVnLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9oZHJlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmN2ZkMWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9oZHJlZy5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9oZHJlZy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvaGVhZC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvaGVhZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMDNjMjgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9oZWFkLmgKQEAgLTAsMCArMSwxMjUgQEAKKy8qICRJZDogaGVhZC5oLHYgMS4zOSAyMDAwLzA1LzI2IDIyOjE4OjQ1IGVjZCBFeHAgJCAqLworI2lmbmRlZiBfX1NQQVJDX0hFQURfSAorI2RlZmluZSBfX1NQQVJDX0hFQURfSAorCisjZGVmaW5lIEtFUk5CQVNFICAgICAgICAweGYwMDAwMDAwICAvKiBGaXJzdCBhZGRyZXNzIHRoZSBrZXJuZWwgd2lsbCBldmVudHVhbGx5IGJlICovCisjZGVmaW5lIExPQURfQUREUiAgICAgICAweDQwMDAgICAgICAvKiBwcm9tIGp1bXBzIHRvIHVzIGhlcmUgdW5sZXNzIHRoaXMgaXMgZWxmIC9ib290ICovCisjZGVmaW5lIFNVTjRDX1NFR1NaICAgICAoMSA8PCAxOCkKKyNkZWZpbmUgU1JNTVVfTDFfS0JBU0VfT0ZGU0VUICgoS0VSTkJBU0U+PjI0KTw8MikgIC8qIFVzZWQgaW4gYm9vdCByZW1hcHBpbmcuICovCisjZGVmaW5lIElOVFNfRU5BQiAgICAgICAgMHgwMSAgICAgICAgICAgLyogZW50cnkuUyB1c2VzIHRoaXMuICovCisKKyNkZWZpbmUgU1VONF9QUk9NX1ZFQ1RPUiAweEZGRTgxMDAwICAgICAvKiBTVU40IFBST00gbmVlZHMgdG8gYmUgaGFyZHdpcmVkICovCisKKyNkZWZpbmUgV1JJVEVfUEFVU0UgICAgICBub3A7IG5vcDsgbm9wOyAvKiBIYXZlIHRvIGRvIHRoaXMgYWZ0ZXIgJXdpbS8lcHNyIGNoZyAqLworI2RlZmluZSBOT1BfSU5TTiAgICAgICAgIDB4MDEwMDAwMDAgICAgIC8qIFVzZWQgdG8gcGF0Y2ggc3BhcmNfc2F2ZV9zdGF0ZSAqLworCisvKiBIZXJlIGFyZSBzb21lIHRyYXAgZ29vZGllcyAqLworCisvKiBHZW5lcmljIHRyYXAgZW50cnkuICovCisjZGVmaW5lIFRSQVBfRU5UUlkodHlwZSwgbGFiZWwpIFwKKwlyZCAlcHNyLCAlbDA7IGIgbGFiZWw7IHJkICV3aW0sICVsMzsgbm9wOworCisvKiBEYXRhL3RleHQgZmF1bHRzLiBEZWZhdWx0cyB0byBzdW40YyB2ZXJzaW9uIGF0IGJvb3QgdGltZS4gKi8KKyNkZWZpbmUgU1BBUkNfVEZBVUxUIHJkICVwc3IsICVsMDsgcmQgJXdpbSwgJWwzOyBiIHN1bjRjX2ZhdWx0OyBtb3YgMSwgJWw3OworI2RlZmluZSBTUEFSQ19ERkFVTFQgcmQgJXBzciwgJWwwOyByZCAld2ltLCAlbDM7IGIgc3VuNGNfZmF1bHQ7IG1vdiAwLCAlbDc7CisjZGVmaW5lIFNSTU1VX1RGQVVMVCByZCAlcHNyLCAlbDA7IHJkICV3aW0sICVsMzsgYiBzcm1tdV9mYXVsdDsgbW92IDEsICVsNzsKKyNkZWZpbmUgU1JNTVVfREZBVUxUIHJkICVwc3IsICVsMDsgcmQgJXdpbSwgJWwzOyBiIHNybW11X2ZhdWx0OyBtb3YgMCwgJWw3OworCisvKiBUaGlzIGlzIGZvciB0cmFwcyB3ZSBzaG91bGQgTkVWRVIgZ2V0LiAqLworI2RlZmluZSBCQURfVFJBUChudW0pIFwKKyAgICAgICAgcmQgJXBzciwgJWwwOyBtb3YgbnVtLCAlbDc7IGIgYmFkX3RyYXBfaGFuZGxlcjsgcmQgJXdpbSwgJWwzOworCisvKiBUaGlzIGlzIGZvciB0cmFwcyB3aGVuIHdlIHdhbnQganVzdCBza2lwIHRoZSBpbnN0cnVjdGlvbiB3aGljaCBjYXVzZWQgaXQgKi8KKyNkZWZpbmUgU0tJUF9UUkFQKHR5cGUsIG5hbWUpIFwKKwlqbXBsICVsMiwgJWcwOyByZXR0ICVsMiArIDQ7IG5vcDsgbm9wOworCisvKiBOb3RpY2UgdGhhdCBmb3IgdGhlIHN5c3RlbSBjYWxscyB3ZSBwdWxsIGEgdHJpY2suICBXZSBsb2FkIHVwIGEKKyAqIGRpZmZlcmVudCBwb2ludGVyIHRvIHRoZSBzeXN0ZW0gY2FsbCB2ZWN0b3IgdGFibGUgaW4gJWw3LCBidXQgY2FsbAorICogdGhlIHNhbWUgZ2VuZXJpYyBzeXN0ZW0gY2FsbCBsb3ctbGV2ZWwgZW50cnkgcG9pbnQuICBUaGUgdHJhcCB0YWJsZQorICogZW50cnkgc2VxdWVuY2VzIGFyZSBhbHNvIEh5cGVyU3BhcmMgcGlwZWxpbmUgZnJpZW5kbHkgOy0pCisgKi8KKworLyogU29mdHdhcmUgdHJhcCBmb3IgTGludXggc3lzdGVtIGNhbGxzLiAqLworI2RlZmluZSBMSU5VWF9TWVNDQUxMX1RSQVAgXAorICAgICAgICBzZXRoaSAlaGkoc3lzX2NhbGxfdGFibGUpLCAlbDc7IFwKKyAgICAgICAgb3IgJWw3LCAlbG8oc3lzX2NhbGxfdGFibGUpLCAlbDc7IFwKKyAgICAgICAgYiBsaW51eF9zcGFyY19zeXNjYWxsOyBcCisgICAgICAgIHJkICVwc3IsICVsMDsKKworLyogU29mdHdhcmUgdHJhcCBmb3IgU3VuT1M0LjEueCBzeXN0ZW0gY2FsbHMuICovCisjZGVmaW5lIFNVTk9TX1NZU0NBTExfVFJBUCBcCisgICAgICAgIHJkICVwc3IsICVsMDsgXAorICAgICAgICBzZXRoaSAlaGkoc3Vub3Nfc3lzX3RhYmxlKSwgJWw3OyBcCisgICAgICAgIGIgbGludXhfc3BhcmNfc3lzY2FsbDsgXAorICAgICAgICBvciAlbDcsICVsbyhzdW5vc19zeXNfdGFibGUpLCAlbDc7CisKKyNkZWZpbmUgU1VOT1NfTk9fU1lTQ0FMTF9UUkFQIFwKKyAgICAgICAgYiBzdW5vc19zeXNjYWxsOyBcCisgICAgICAgIHJkICVwc3IsICVsMDsgXAorICAgICAgICBub3A7IFwKKyAgICAgICAgbm9wOworCisvKiBTb2Z0d2FyZSB0cmFwIGZvciBTbG93YXJpcyBzeXN0ZW0gY2FsbHMuICovCisjZGVmaW5lIFNPTEFSSVNfU1lTQ0FMTF9UUkFQIFwKKyAgICAgICAgYiBzb2xhcmlzX3N5c2NhbGw7IFwKKyAgICAgICAgcmQgJXBzciwgJWwwOyBcCisgICAgICAgIG5vcDsgXAorICAgICAgICBub3A7CisKKyNkZWZpbmUgSU5ESVJFQ1RfU09MQVJJU19TWVNDQUxMKHgpIFwKKwltb3YgeCwgJWcxOyBcCisJYiBzb2xhcmlzX3N5c2NhbGw7IFwKKwlyZCAlcHNyLCAlbDA7IFwKKwlub3A7CisKKyNkZWZpbmUgQlJFQUtQT0lOVF9UUkFQIFwKKwliIGJyZWFrcG9pbnRfdHJhcDsgXAorCXJkICVwc3IsJWwwOyBcCisJbm9wOyBcCisJbm9wOworCisvKiBTb2Z0d2FyZSB0cmFwIGZvciBTcGFyYy1uZXRic2Qgc3lzdGVtIGNhbGxzLiAqLworI2RlZmluZSBORVRCU0RfU1lTQ0FMTF9UUkFQIFwKKyAgICAgICAgc2V0aGkgJWhpKHN5c19jYWxsX3RhYmxlKSwgJWw3OyBcCisgICAgICAgIG9yICVsNywgJWxvKHN5c19jYWxsX3RhYmxlKSwgJWw3OyBcCisgICAgICAgIGIgYnNkX3N5c2NhbGw7IFwKKyAgICAgICAgcmQgJXBzciwgJWwwOworCisvKiBUaGUgR2V0IENvbmRpdGlvbiBDb2RlcyBzb2Z0d2FyZSB0cmFwIGZvciB1c2VybGFuZC4gKi8KKyNkZWZpbmUgR0VUQ0NfVFJBUCBcCisgICAgICAgIGIgZ2V0Y2NfdHJhcF9oYW5kbGVyOyBtb3YgJXBzciwgJWwwOyBub3A7IG5vcDsKKworLyogVGhlIFNldCBDb25kaXRpb24gQ29kZXMgc29mdHdhcmUgdHJhcCBmb3IgdXNlcmxhbmQuICovCisjZGVmaW5lIFNFVENDX1RSQVAgXAorICAgICAgICBiIHNldGNjX3RyYXBfaGFuZGxlcjsgbW92ICVwc3IsICVsMDsgbm9wOyBub3A7CisKKy8qIFRoZSBHZXQgUFNSIHNvZnR3YXJlIHRyYXAgZm9yIHVzZXJsYW5kLiAqLworI2RlZmluZSBHRVRQU1JfVFJBUCBcCisJbW92ICVwc3IsICVpMDsgam1wICVsMjsgcmV0dCAlbDIgKyA0OyBub3A7CisKKy8qIFRoaXMgaXMgZm9yIGhhcmQgaW50ZXJydXB0cyBmcm9tIGxldmVsIDEtMTQsIDE1IGlzIG5vbi1tYXNrYWJsZSAobm1pKSBhbmQKKyAqIGdldHMgaGFuZGxlZCB3aXRoIGFub3RoZXIgbWFjcm8uCisgKi8KKyNkZWZpbmUgVFJBUF9FTlRSWV9JTlRFUlJVUFQoaW50X2xldmVsKSBcCisgICAgICAgIG1vdiBpbnRfbGV2ZWwsICVsNzsgcmQgJXBzciwgJWwwOyBiIHJlYWxfaXJxX2VudHJ5OyByZCAld2ltLCAlbDM7CisKKy8qIE5NSSdzIChOb24gTWFza2FibGUgSW50ZXJydXB0cykgYXJlIHNwZWNpYWwsIHlvdSBjYW4ndCBrZWVwIHRoZW0KKyAqIGZyb20gY29taW5nIGluLCBhbmQgYmFzaWNhbGx5IGlmIHlvdSBnZXQgb25lLCB0aGUgc2hvd3Mgb3Zlci4gOygKKyAqIE9uIHRoZSBzdW40YyB0aGV5IGFyZSB1c3VhbGx5IGFzeW5jaHJvbm91cyBtZW1vcnkgZXJyb3JzLCBvbiB0aGUKKyAqIHRoZSBzdW40bSB0aGV5IGNvdWxkIGJlIGVpdGhlciBkdWUgdG8gbWVtIGVycm9ycyBvciBhIHNvZnR3YXJlCisgKiBpbml0aWF0ZWQgaW50ZXJydXB0IGZyb20gdGhlIHByb20va2VybiBvbiBhbiBTTVAgYm94IHNheWluZyAiSQorICogY29tbWFuZCB5b3UgdG8gZG8gQ1BVIHRyaWNrcywgcmVhZCB5b3VyIG1haWxib3ggZm9yIG1vcmUgaW5mby4iCisgKi8KKyNkZWZpbmUgTk1JX1RSQVAgXAorICAgICAgICByZCAld2ltLCAlbDM7IGIgbGludXhfdHJhcF9ubWlfc3VuNGM7IG1vdiAlcHNyLCAlbDA7IG5vcDsKKworLyogV2luZG93IG92ZXJmbG93cy91bmRlcmZsb3dzIGFyZSBzcGVjaWFsIGFuZCB3ZSBuZWVkIHRvIHRyeSB0byBiZSBhcworICogZWZmaWNpZW50IGFzIHBvc3NpYmxlIGhlcmUuLi4uCisgKi8KKyNkZWZpbmUgV0lORE9XX1NQSUxMIFwKKyAgICAgICAgcmQgJXBzciwgJWwwOyByZCAld2ltLCAlbDM7IGIgc3BpbGxfd2luZG93X2VudHJ5OyBhbmRjYyAlbDAsIFBTUl9QUywgJWcwOworCisjZGVmaW5lIFdJTkRPV19GSUxMIFwKKyAgICAgICAgcmQgJXBzciwgJWwwOyByZCAld2ltLCAlbDM7IGIgZmlsbF93aW5kb3dfZW50cnk7IGFuZGNjICVsMCwgUFNSX1BTLCAlZzA7CisKKyNlbmRpZiAvKiBfX1NQQVJDX0hFQURfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvaGlnaG1lbS5oIGIvaW5jbHVkZS9hc20tc3BhcmMvaGlnaG1lbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkZTQyZTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9oaWdobWVtLmgKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIGhpZ2htZW0uaDogdmlydHVhbCBrZXJuZWwgbWVtb3J5IG1hcHBpbmdzIGZvciBoaWdoIG1lbW9yeQorICoKKyAqIFVzZWQgaW4gQ09ORklHX0hJR0hNRU0gc3lzdGVtcyBmb3IgbWVtb3J5IHBhZ2VzIHdoaWNoCisgKiBhcmUgbm90IGFkZHJlc3NhYmxlIGJ5IGRpcmVjdCBrZXJuZWwgdmlydHVhbCBhZGRyZXNzZXMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5IEdlcmhhcmQgV2ljaGVydCwgU2llbWVucyBBRworICoJCSAgICAgIEdlcmhhcmQuV2ljaGVydEBwZGIuc2llbWVucy5kZQorICoKKyAqCisgKiBSZWRlc2lnbmVkIHRoZSB4ODYgMzItYml0IFZNIGFyY2hpdGVjdHVyZSB0byBkZWFsIHdpdGggCisgKiB1cCB0byAxNiBUZXJyYWJ5dGUgcGh5c2ljYWwgbWVtb3J5LiBXaXRoIGN1cnJlbnQgeDg2IENQVXMKKyAqIHdlIG5vdyBzdXBwb3J0IHVwIHRvIDY0IEdpZ2FieXRlcyBwaHlzaWNhbCBSQU0uCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5IEluZ28gTW9sbmFyIDxtaW5nb0ByZWRoYXQuY29tPgorICovCisKKyNpZm5kZWYgX0FTTV9ISUdITUVNX0gKKyNkZWZpbmUgX0FTTV9ISUdITUVNX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGFzbS9maXhtYXAuaD4KKyNpbmNsdWRlIDxhc20vdmFkZHJzLmg+CisjaW5jbHVkZSA8YXNtL2ttYXBfdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorCisvKiBkZWNsYXJhdGlvbnMgZm9yIGhpZ2htZW0uYyAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaGlnaHN0YXJ0X3BmbiwgaGlnaGVuZF9wZm47CisKK2V4dGVybiBwdGVfdCAqa21hcF9wdGU7CitleHRlcm4gcGdwcm90X3Qga21hcF9wcm90OworZXh0ZXJuIHB0ZV90ICpwa21hcF9wYWdlX3RhYmxlOworCitleHRlcm4gdm9pZCBrbWFwX2luaXQodm9pZCkgX19pbml0OworCisvKgorICogUmlnaHQgbm93IHdlIGluaXRpYWxpemUgb25seSBhIHNpbmdsZSBwdGUgdGFibGUuIEl0IGNhbiBiZSBleHRlbmRlZAorICogZWFzaWx5LCBzdWJzZXF1ZW50IHB0ZSB0YWJsZXMgaGF2ZSB0byBiZSBhbGxvY2F0ZWQgaW4gb25lIHBoeXNpY2FsCisgKiBjaHVuayBvZiBSQU0uICBDdXJyZW50bHkgdGhlIHNpbXBsZXN0IHdheSB0byBkbyB0aGlzIGlzIHRvIGFsaWduIHRoZQorICogcGttYXAgcmVnaW9uIG9uIGEgcGFnZXRhYmxlIGJvdW5kYXJ5ICg0TUIpLgorICovCisjZGVmaW5lIExBU1RfUEtNQVAgMTAyNAorI2RlZmluZSBQS01BUF9TSVpFIChMQVNUX1BLTUFQIDw8IFBBR0VfU0hJRlQpCisjZGVmaW5lIFBLTUFQX0JBU0UgUE1EX0FMSUdOKFNSTU1VX05PQ0FDSEVfVkFERFIgKyAoU1JNTVVfTUFYX05PQ0FDSEVfUEFHRVMgPDwgUEFHRV9TSElGVCkpCisKKyNkZWZpbmUgTEFTVF9QS01BUF9NQVNLIChMQVNUX1BLTUFQIC0gMSkKKyNkZWZpbmUgUEtNQVBfTlIodmlydCkgICgodmlydCAtIFBLTUFQX0JBU0UpID4+IFBBR0VfU0hJRlQpCisjZGVmaW5lIFBLTUFQX0FERFIobnIpICAoUEtNQVBfQkFTRSArICgobnIpIDw8IFBBR0VfU0hJRlQpKQorCisjZGVmaW5lIFBLTUFQX0VORCAoUEtNQVBfQUREUihMQVNUX1BLTUFQKSkKKworZXh0ZXJuIHZvaWQgKmttYXBfaGlnaChzdHJ1Y3QgcGFnZSAqcGFnZSk7CitleHRlcm4gdm9pZCBrdW5tYXBfaGlnaChzdHJ1Y3QgcGFnZSAqcGFnZSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqa21hcChzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlCVUdfT04oaW5faW50ZXJydXB0KCkpOworCWlmICghUGFnZUhpZ2hNZW0ocGFnZSkpCisJCXJldHVybiBwYWdlX2FkZHJlc3MocGFnZSk7CisJcmV0dXJuIGttYXBfaGlnaChwYWdlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGt1bm1hcChzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlCVUdfT04oaW5faW50ZXJydXB0KCkpOworCWlmICghUGFnZUhpZ2hNZW0ocGFnZSkpCisJCXJldHVybjsKKwlrdW5tYXBfaGlnaChwYWdlKTsKK30KKworZXh0ZXJuIHZvaWQgKmttYXBfYXRvbWljKHN0cnVjdCBwYWdlICpwYWdlLCBlbnVtIGttX3R5cGUgdHlwZSk7CitleHRlcm4gdm9pZCBrdW5tYXBfYXRvbWljKHZvaWQgKmt2YWRkciwgZW51bSBrbV90eXBlIHR5cGUpOworZXh0ZXJuIHN0cnVjdCBwYWdlICprbWFwX2F0b21pY190b19wYWdlKHZvaWQgKnZhZGRyKTsKKworI2RlZmluZSBmbHVzaF9jYWNoZV9rbWFwcygpCWZsdXNoX2NhY2hlX2FsbCgpCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfQVNNX0hJR0hNRU1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvaHdfaXJxLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9od19pcnEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDMwYTc2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvaHdfaXJxLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fQVNNX1NQQVJDX0hXX0lSUV9ICisjZGVmaW5lIF9fQVNNX1NQQVJDX0hXX0lSUV9ICisKKy8qIER1bW15IGluY2x1ZGUuICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvaWRlLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9pZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGQ4MTAzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvaWRlLmgKQEAgLTAsMCArMSwxMDAgQEAKKy8qICRJZDogaWRlLmgsdiAxLjcgMjAwMi8wMS8xNiAyMDo1ODo0MCBkYXZlbSBFeHAgJAorICogaWRlLmg6IFNQQVJDIFBDSSBzcGVjaWZpYyBJREUgZ2x1ZS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTcgIERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKKyAqIENvcHlyaWdodCAoQykgMTk5OCAgRWRkaWUgQy4gRG9zdCAgIChlY2RAc2t5bmV0LmJlKQorICogQWRhcHRhdGlvbiBmcm9tIHNwYXJjNjQgdmVyc2lvbiB0byBzcGFyYyBieSBQZXRlIFphaXRjZXYuCisgKi8KKworI2lmbmRlZiBfU1BBUkNfSURFX0gKKyNkZWZpbmUgX1NQQVJDX0lERV9ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9wc3IuaD4KKworI3VuZGVmICBNQVhfSFdJRlMKKyNkZWZpbmUgTUFYX0hXSUZTCTIKKworI2RlZmluZSBJREVfQVJDSF9PQlNPTEVURV9JTklUCisjZGVmaW5lIGlkZV9kZWZhdWx0X2lvX2N0bChiYXNlKQkoKGJhc2UpICsgMHgyMDYpIC8qIG9ic29sZXRlICovCisKKyNkZWZpbmUgX19pZGVfaW5zbChkYXRhX3JlZywgYnVmZmVyLCB3Y291bnQpIFwKKwlfX2lkZV9pbnN3KGRhdGFfcmVnLCBidWZmZXIsICh3Y291bnQpPDwxKQorI2RlZmluZSBfX2lkZV9vdXRzbChkYXRhX3JlZywgYnVmZmVyLCB3Y291bnQpIFwKKwlfX2lkZV9vdXRzdyhkYXRhX3JlZywgYnVmZmVyLCAod2NvdW50KTw8MSkKKworLyogT24gc3BhcmMsIEkvTyBwb3J0cyBhbmQgTU1JTyByZWdpc3RlcnMgYXJlIGFjY2Vzc2VkIGlkZW50aWNhbGx5LiAgKi8KKyNkZWZpbmUgX19pZGVfbW1faW5zdwlfX2lkZV9pbnN3CisjZGVmaW5lIF9faWRlX21tX2luc2wJX19pZGVfaW5zbAorI2RlZmluZSBfX2lkZV9tbV9vdXRzdwlfX2lkZV9vdXRzdworI2RlZmluZSBfX2lkZV9tbV9vdXRzbAlfX2lkZV9vdXRzbAorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9faWRlX2luc3codW5zaWduZWQgbG9uZyBwb3J0LAorCQkJCSAgdm9pZCAqZHN0LAorCQkJCSAgdW5zaWduZWQgbG9uZyBjb3VudCkKK3sKKwl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqZGF0YV9wb3J0OworCS8qIHVuc2lnbmVkIGxvbmcgZW5kID0gKHVuc2lnbmVkIGxvbmcpZHN0ICsgKGNvdW50IDw8IDEpOyAqLyAvKiBQMyAqLworCXUxNiAqcHMgPSBkc3Q7CisJdTMyICpwaTsKKworCWRhdGFfcG9ydCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKXBvcnQ7CisKKwlpZigoKHVuc2lnbmVkIGxvbmcpcHMpICYgMHgyKSB7CisJCSpwcysrID0gKmRhdGFfcG9ydDsKKwkJY291bnQtLTsKKwl9CisJcGkgPSAodTMyICopcHM7CisJd2hpbGUoY291bnQgPj0gMikgeworCQl1MzIgdzsKKworCQl3ICA9ICgqZGF0YV9wb3J0KSA8PCAxNjsKKwkJdyB8PSAoKmRhdGFfcG9ydCk7CisJCSpwaSsrID0gdzsKKwkJY291bnQgLT0gMjsKKwl9CisJcHMgPSAodTE2ICopcGk7CisJaWYoY291bnQpCisJCSpwcysrID0gKmRhdGFfcG9ydDsKKworCS8qIF9fZmx1c2hfZGNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKWRzdCwgZW5kKTsgKi8gLyogUDMgc2VlIGhtZSAqLworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9faWRlX291dHN3KHVuc2lnbmVkIGxvbmcgcG9ydCwKKwkJCQkgICBjb25zdCB2b2lkICpzcmMsCisJCQkJICAgdW5zaWduZWQgbG9uZyBjb3VudCkKK3sKKwl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqZGF0YV9wb3J0OworCS8qIHVuc2lnbmVkIGxvbmcgZW5kID0gKHVuc2lnbmVkIGxvbmcpc3JjICsgKGNvdW50IDw8IDEpOyAqLworCWNvbnN0IHUxNiAqcHMgPSBzcmM7CisJY29uc3QgdTMyICpwaTsKKworCWRhdGFfcG9ydCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKXBvcnQ7CisKKwlpZigoKHVuc2lnbmVkIGxvbmcpc3JjKSAmIDB4MikgeworCQkqZGF0YV9wb3J0ID0gKnBzKys7CisJCWNvdW50LS07CisJfQorCXBpID0gKGNvbnN0IHUzMiAqKXBzOworCXdoaWxlKGNvdW50ID49IDIpIHsKKwkJdTMyIHc7CisKKwkJdyA9ICpwaSsrOworCQkqZGF0YV9wb3J0ID0gKHcgPj4gMTYpOworCQkqZGF0YV9wb3J0ID0gdzsKKwkJY291bnQgLT0gMjsKKwl9CisJcHMgPSAoY29uc3QgdTE2ICopcGk7CisJaWYoY291bnQpCisJCSpkYXRhX3BvcnQgPSAqcHM7CisKKwkvKiBfX2ZsdXNoX2RjYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZylzcmMsIGVuZCk7ICovIC8qIFAzIHNlZSBobWUgKi8KK30KKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9TUEFSQ19JREVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvaWRwcm9tLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9pZHByb20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODU2ZTY0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvaWRwcm9tLmgKQEAgLTAsMCArMSwzMyBAQAorLyogJElkOiBpZHByb20uaCx2IDEuNiAxOTk2LzA4LzA0IDEwOjM1OjA3IGVjZCBFeHAgJAorICogaWRwcm9tLmg6IE1hY3JvcyBhbmQgZGVmaW5lcyBmb3IgaWRwcm9tIHJvdXRpbmVzCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKKyAqLworCisjaWZuZGVmIF9TUEFSQ19JRFBST01fSAorI2RlZmluZSBfU1BBUkNfSURQUk9NX0gKKworLyogT2Zmc2V0IGludG8gdGhlIEVFUFJPTSB3aGVyZSB0aGUgaWQgUFJPTSBpcyBsb2NhdGVkIG9uIHRoZSA0YyAqLworI2RlZmluZSBJRFBST01fT0ZGU0VUICAweDdkOAorCisvKiBPbiBzdW40bTsgcGh5c2ljYWwuICovCisvKiBNaWNyb1NQQVJDKC1JSSkgZG9lcyBub3QgZGVjb2RlIDMxcmQgYml0LCBidXQgaXQgd29ya3MuICovCisjZGVmaW5lIElEUFJPTV9PRkZTRVRfTSAgMHhmZDgKKworc3RydWN0IGlkcHJvbQoreworCXVuc2lnbmVkIGNoYXIJaWRfZm9ybWF0OwkvKiBGb3JtYXQgaWRlbnRpZmllciAoYWx3YXlzIDB4MDEpICovCisJdW5zaWduZWQgY2hhcglpZF9tYWNodHlwZTsJLyogTWFjaGluZSB0eXBlICovCisJdW5zaWduZWQgY2hhcglpZF9ldGhhZGRyWzZdOwkvKiBIYXJkd2FyZSBldGhlcm5ldCBhZGRyZXNzICovCisJbG9uZwkJaWRfZGF0ZTsJLyogRGF0ZSBvZiBtYW51ZmFjdHVyZSAqLworCXVuc2lnbmVkIGludAlpZF9zZXJudW06MjQ7CS8qIFVuaXF1ZSBzZXJpYWwgbnVtYmVyICovCisJdW5zaWduZWQgY2hhcglpZF9ja3N1bTsJLyogQ2hlY2tzdW0gLSB4b3Igb2YgdGhlIGRhdGEgYnl0ZXMgKi8KKwl1bnNpZ25lZCBjaGFyCXJlc2VydmVkWzE2XTsKK307CisKK2V4dGVybiBzdHJ1Y3QgaWRwcm9tICppZHByb207CitleHRlcm4gdm9pZCBpZHByb21faW5pdCh2b2lkKTsKKworI2RlZmluZSBJRFBST01fU0laRSAgKHNpemVvZihzdHJ1Y3QgaWRwcm9tKSkKKworI2VuZGlmIC8qICEoX1NQQVJDX0lEUFJPTV9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvaW8tdW5pdC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvaW8tdW5pdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2ODIzYjQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9pby11bml0LmgKQEAgLTAsMCArMSw2MiBAQAorLyogaW8tdW5pdC5oOiBEZWZpbml0aW9ucyBmb3IgdGhlIHN1bjRkIElPLVVOSVQuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk3LDE5OTggSmFrdWIgSmVsaW5layAoampAc3Vuc2l0ZS5tZmYuY3VuaS5jeikKKyAqLworI2lmbmRlZiBfU1BBUkNfSU9fVU5JVF9ICisjZGVmaW5lIF9TUEFSQ19JT19VTklUX0gKKworI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorCisvKiBUaGUgaW8tdW5pdCBoYW5kbGVzIGFsbCB2aXJ0dWFsIHRvIHBoeXNpY2FsIGFkZHJlc3MgdHJhbnNsYXRpb25zCisgKiB0aGF0IG9jY3VyIGJldHdlZW4gdGhlIFNCVVMgYW5kIHBoeXNpY2FsIG1lbW9yeS4gIEFjY2VzcyBieQorICogdGhlIGNwdSB0byBJTyByZWdpc3RlcnMgYW5kIHNpbWlsYXIgZ28gb3ZlciB0aGUgeGRidXMgc28gYXJlCisgKiB0cmFuc2xhdGVkIGJ5IHRoZSBvbiBjaGlwIFNSTU1VLiAgVGhlIGlvLXVuaXQgYW5kIHRoZSBzcm1tdSBkbworICogbm90IG5lZWQgdG8gaGF2ZSB0aGUgc2FtZSB0cmFuc2xhdGlvbnMgYXQgYWxsLCBpbiBmYWN0IG1vc3QKKyAqIG9mIHRoZSB0aW1lIHRoZSB0cmFuc2xhdGlvbnMgdGhleSBoYW5kbGUgYXJlIGEgZGlzanVuY3Qgc2V0LgorICogQmFzaWNhbGx5IHRoZSBpby11bml0IGhhbmRsZXMgYWxsIGR2bWEgc2J1cyBhY3Rpdml0eS4KKyAqLworIAorLyogQUlFRUUsIHVubGlrZSB0aGUgbmljZSBzdW40bSwgdGhlc2UgbW9uc3RlcnMgaGF2ZSAKKyAgIGZpeGVkIERNQSByYW5nZSA2NE0gKi8KKyAKKyNkZWZpbmUgSU9VTklUX0RNQV9CQVNFCSAgICAweGZjMDAwMDAwIC8qIFRPUCAtIDY0TSAqLworI2RlZmluZSBJT1VOSVRfRE1BX1NJWkUJICAgIDB4MDQwMDAwMDAgLyogNjRNICovCisvKiBXZSB1c2UgbGFzdCAxTSBmb3Igc3BhcmNfZHZtYV9tYWxsb2MgKi8KKyNkZWZpbmUgSU9VTklUX0RWTUFfU0laRSAgICAweDAwMTAwMDAwIC8qIDFNICovCisKKy8qIFRoZSBmb3JtYXQgb2YgYW4gaW9wdGUgaW4gdGhlIGV4dGVybmFsIHBhZ2UgdGFibGVzICovCisjZGVmaW5lIElPVVBURV9QQUdFICAgICAgICAgIDB4ZmZmZmZmMDAgLyogUGh5c2ljYWwgcGFnZSBudW1iZXIgKFBBWzM1OjEyXSkJKi8KKyNkZWZpbmUgSU9VUFRFX0NBQ0hFICAgICAgICAgMHgwMDAwMDA4MCAvKiBDYWNoZWQgKGluIFZpa2luZy9NWENDKQkJKi8KKy8qIFhYWCBKYWt1YiwgZmluZCBvdXQgaG93IHRvIHByb2dyYW0gU0JVUyBzdHJlYW1pbmcgY2FjaGUgb24gWERCVVMvc3VuNGQuCisgKiBYWFggQWN0dWFsbHksIGFsbCB5b3Ugc2hvdWxkIG5lZWQgdG8gZG8gaXMgZmluZCBvdXQgd2hlcmUgdGhlIHJlZ2lzdGVycworICogWFhYIGFyZSBhbmQgY29weSBvdmVyIHRoZSBzcGFyYzY0IGltcGxlbWVudGF0aW9uIEkgd3JvdGUuICBUaGVyZSBtYXkgYmUKKyAqIFhYWCBzb21lIGhvcnJpYmxlIGh3YnVncyB0aG91Z2gsIHNvIGJlIGNhcmVmdWwuICAtRGF2ZU0KKyAqLworI2RlZmluZSBJT1VQVEVfU1RSRUFNICAgICAgICAweDAwMDAwMDQwIC8qIFRyYW5zbGF0aW9uIGNhbiB1c2Ugc3RyZWFtaW5nIGNhY2hlCSovCisjZGVmaW5lIElPVVBURV9JTlRSQQkgICAgIDB4MDAwMDAwMDggLyogU0JVUyBkaXJlY3Qgc2xvdC0+c2xvdCB0cmFuc2ZlcgkqLworI2RlZmluZSBJT1VQVEVfV1JJVEUgICAgICAgICAweDAwMDAwMDA0IC8qIFdyaXRlYWJsZQkJCQkqLworI2RlZmluZSBJT1VQVEVfVkFMSUQgICAgICAgICAweDAwMDAwMDAyIC8qIElPUFRFIGlzIHZhbGlkCQkJKi8KKyNkZWZpbmUgSU9VUFRFX1BBUklUWSAgICAgICAgMHgwMDAwMDAwMSAvKiBQYXJpdHkgaXMgY2hlY2tlZCBkdXJpbmcgRFZNQQkqLworCitzdHJ1Y3QgaW91bml0X3N0cnVjdCB7CisJdW5zaWduZWQgbG9uZwkJYm1hcFsoSU9VTklUX0RNQV9TSVpFID4+IChQQUdFX1NISUZUICsgMykpIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpXTsKKwlzcGlubG9ja190CQlsb2NrOworCWlvcHRlX3QJCQkqcGFnZV90YWJsZTsKKwl1bnNpZ25lZCBsb25nCQlyb3RvclszXTsKKwl1bnNpZ25lZCBsb25nCQlsaW1pdFs0XTsKK307CisKKyNkZWZpbmUgSU9VTklUX0JNQVAxX1NUQVJUCTB4MDAwMDAwMDAKKyNkZWZpbmUgSU9VTklUX0JNQVAxX0VORAkoSU9VTklUX0RNQV9TSVpFID4+IChQQUdFX1NISUZUICsgMSkpCisjZGVmaW5lIElPVU5JVF9CTUFQMl9TVEFSVAlJT1VOSVRfQk1BUDFfRU5ECisjZGVmaW5lIElPVU5JVF9CTUFQMl9FTkQJSU9VTklUX0JNQVAyX1NUQVJUICsgKElPVU5JVF9ETUFfU0laRSA+PiAoUEFHRV9TSElGVCArIDIpKQorI2RlZmluZSBJT1VOSVRfQk1BUE1fU1RBUlQJSU9VTklUX0JNQVAyX0VORAorI2RlZmluZSBJT1VOSVRfQk1BUE1fRU5ECSgoSU9VTklUX0RNQV9TSVpFIC0gSU9VTklUX0RWTUFfU0laRSkgPj4gUEFHRV9TSElGVCkKKworZXh0ZXJuIF9fdTMyIGlvdW5pdF9tYXBfZG1hX2luaXQoc3RydWN0IHNidXNfYnVzICosIGludCk7CisjZGVmaW5lIGlvdW5pdF9tYXBfZG1hX2ZpbmlzaChzYnVzLCBhZGRyLCBsZW4pIG1tdV9yZWxlYXNlX3Njc2lfb25lKGFkZHIsIGxlbiwgc2J1cykKK2V4dGVybiBfX3UzMiBpb3VuaXRfbWFwX2RtYV9wYWdlKF9fdTMyLCB2b2lkICosIHN0cnVjdCBzYnVzX2J1cyAqKTsKKworI2VuZGlmIC8qICEoX1NQQVJDX0lPX1VOSVRfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2lvLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9pby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0MmRmMjAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9pby5oCkBAIC0wLDAgKzEsMjkwIEBACisvKgorICogJElkOiBpby5oLHYgMS4zMCAyMDAxLzEyLzIxIDAxOjIzOjIxIGRhdmVtIEV4cCAkCisgKi8KKyNpZm5kZWYgX19TUEFSQ19JT19ICisjZGVmaW5lIF9fU1BBUkNfSU9fSAorCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4gIC8qIHN0cnVjdCByZXNvdXJjZSAqLworCisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4gICAgICAvKiBJTyBhZGRyZXNzIG1hcHBpbmcgcm91dGluZXMgbmVlZCB0aGlzICovCisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorCisjZGVmaW5lIHBhZ2VfdG9fcGh5cyhwYWdlKQkoKChwYWdlKSAtIG1lbV9tYXApIDw8IFBBR0VfU0hJRlQpCisKK3N0YXRpYyBpbmxpbmUgdTMyIGZsaXBfZHdvcmQgKHUzMiBsKQoreworCXJldHVybiAoKGwmMHhmZik8PDI0KSB8ICgoKGw+PjgpJjB4ZmYpPDwxNikgfCAoKChsPj4xNikmMHhmZik8PDgpfCAoKGw+PjI0KSYweGZmKTsKK30KKworc3RhdGljIGlubGluZSB1MTYgZmxpcF93b3JkICh1MTYgdykKK3sKKwlyZXR1cm4gKCh3JjB4ZmYpIDw8IDgpIHwgKCh3Pj44KSYweGZmKTsKK30KKworI2RlZmluZSBtbWlvd2IoKQorCisvKgorICogTWVtb3J5IG1hcHBlZCBJL08gdG8gUENJCisgKi8KKworc3RhdGljIGlubGluZSB1OCBfX3Jhd19yZWFkYihjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJcmV0dXJuICooX19mb3JjZSB2b2xhdGlsZSB1OCAqKWFkZHI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTE2IF9fcmF3X3JlYWR3KGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlyZXR1cm4gKihfX2ZvcmNlIHZvbGF0aWxlIHUxNiAqKWFkZHI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIF9fcmF3X3JlYWRsKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlyZXR1cm4gKihfX2ZvcmNlIHZvbGF0aWxlIHUzMiAqKWFkZHI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd193cml0ZWIodTggYiwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCSooX19mb3JjZSB2b2xhdGlsZSB1OCAqKWFkZHIgPSBiOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfd3JpdGV3KHUxNiB3LCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJKihfX2ZvcmNlIHZvbGF0aWxlIHUxNiAqKWFkZHIgPSB3OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfd3JpdGVsKHUzMiBsLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJKihfX2ZvcmNlIHZvbGF0aWxlIHUzMiAqKWFkZHIgPSBsOworfQorCitzdGF0aWMgaW5saW5lIHU4IF9fcmVhZGIoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCXJldHVybiAqKF9fZm9yY2Ugdm9sYXRpbGUgdTggKilhZGRyOworfQorCitzdGF0aWMgaW5saW5lIHUxNiBfX3JlYWR3KGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlyZXR1cm4gZmxpcF93b3JkKCooX19mb3JjZSB2b2xhdGlsZSB1MTYgKilhZGRyKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgX19yZWFkbChjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJcmV0dXJuIGZsaXBfZHdvcmQoKihfX2ZvcmNlIHZvbGF0aWxlIHUzMiAqKWFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX193cml0ZWIodTggYiwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCSooX19mb3JjZSB2b2xhdGlsZSB1OCAqKWFkZHIgPSBiOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX193cml0ZXcodTE2IHcsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwkqKF9fZm9yY2Ugdm9sYXRpbGUgdTE2ICopYWRkciA9IGZsaXBfd29yZCh3KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fd3JpdGVsKHUzMiBsLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJKihfX2ZvcmNlIHZvbGF0aWxlIHUzMiAqKWFkZHIgPSBmbGlwX2R3b3JkKGwpOworfQorCisjZGVmaW5lIHJlYWRiKF9fYWRkcikJCV9fcmVhZGIoX19hZGRyKQorI2RlZmluZSByZWFkdyhfX2FkZHIpCQlfX3JlYWR3KF9fYWRkcikKKyNkZWZpbmUgcmVhZGwoX19hZGRyKQkJX19yZWFkbChfX2FkZHIpCisjZGVmaW5lIHJlYWRiX3JlbGF4ZWQoX19hZGRyKQlyZWFkYihfX2FkZHIpCisjZGVmaW5lIHJlYWR3X3JlbGF4ZWQoX19hZGRyKQlyZWFkdyhfX2FkZHIpCisjZGVmaW5lIHJlYWRsX3JlbGF4ZWQoX19hZGRyKQlyZWFkbChfX2FkZHIpCisKKyNkZWZpbmUgd3JpdGViKF9fYiwgX19hZGRyKQlfX3dyaXRlYigoX19iKSwoX19hZGRyKSkKKyNkZWZpbmUgd3JpdGV3KF9fdywgX19hZGRyKQlfX3dyaXRldygoX193KSwoX19hZGRyKSkKKyNkZWZpbmUgd3JpdGVsKF9fbCwgX19hZGRyKQlfX3dyaXRlbCgoX19sKSwoX19hZGRyKSkKKworLyoKKyAqIEkvTyBzcGFjZSBvcGVyYXRpb25zCisgKgorICogQXJyYW5nZW1lbnQgb24gYSBTdW4gaXMgc29tZXdoYXQgY29tcGxpY2F0ZWQuCisgKgorICogRmlyc3Qgb2YgYWxsLCB3ZSB3YW50IHRvIHVzZSBzdGFuZGFyZCBMaW51eCBkcml2ZXJzCisgKiBmb3Iga2V5Ym9hcmQsIFBDIHNlcmlhbCwgZXRjLiBUaGVzZSBkcml2ZXJzIHRoaW5rCisgKiB0aGV5IGFjY2VzcyBJL08gc3BhY2UgYW5kIHVzZSBpbmIvb3V0Yi4KKyAqIE9uIHRoZSBvdGhlciBoYW5kLCBFQnVzIGJyaWRnZSBhY2NlcHRzIFBDSSAqbWVtb3J5KgorICogY3ljbGVzIGFuZCBjb252ZXJ0cyB0aGVtIGludG8gSVNBICpJL08qIGN5Y2xlcy4KKyAqIEVyZ28sIHdlIHdhbnQgaW5iICYgb3V0YiB0byBnZW5lcmF0ZSBQQ0kgbWVtb3J5IGN5Y2xlcy4KKyAqCisgKiBJZiB3ZSB3YW50IHRvIGlzc3VlIFBDSSAqSS9PKiBjeWNsZXMsIHdlIGRvIHRoaXMKKyAqIHdpdGggYSBsb3cgNjRLIGZpeGVkIHdpbmRvdyBpbiBQQ0lDLiBUaGlzIHdpbmRvdyBnZXRzCisgKiBtYXBwZWQgc29tZXdoZXJlIGludG8gdmlydHVhbCBrZXJuZWwgc3BhY2UgYW5kIHdlCisgKiBjYW4gdXNlIGluYi9vdXRiIGFnYWluLgorICovCisjZGVmaW5lIGluYl9sb2NhbChfX2FkZHIpCV9fcmVhZGIoKHZvaWQgX19pb21lbSAqKSh1bnNpZ25lZCBsb25nKShfX2FkZHIpKQorI2RlZmluZSBpbmIoX19hZGRyKQkJX19yZWFkYigodm9pZCBfX2lvbWVtICopKHVuc2lnbmVkIGxvbmcpKF9fYWRkcikpCisjZGVmaW5lIGludyhfX2FkZHIpCQlfX3JlYWR3KCh2b2lkIF9faW9tZW0gKikodW5zaWduZWQgbG9uZykoX19hZGRyKSkKKyNkZWZpbmUgaW5sKF9fYWRkcikJCV9fcmVhZGwoKHZvaWQgX19pb21lbSAqKSh1bnNpZ25lZCBsb25nKShfX2FkZHIpKQorCisjZGVmaW5lIG91dGJfbG9jYWwoX19iLCBfX2FkZHIpCV9fd3JpdGViKF9fYiwgKHZvaWQgX19pb21lbSAqKSh1bnNpZ25lZCBsb25nKShfX2FkZHIpKQorI2RlZmluZSBvdXRiKF9fYiwgX19hZGRyKQlfX3dyaXRlYihfX2IsICh2b2lkIF9faW9tZW0gKikodW5zaWduZWQgbG9uZykoX19hZGRyKSkKKyNkZWZpbmUgb3V0dyhfX3csIF9fYWRkcikJX193cml0ZXcoX193LCAodm9pZCBfX2lvbWVtICopKHVuc2lnbmVkIGxvbmcpKF9fYWRkcikpCisjZGVmaW5lIG91dGwoX19sLCBfX2FkZHIpCV9fd3JpdGVsKF9fbCwgKHZvaWQgX19pb21lbSAqKSh1bnNpZ25lZCBsb25nKShfX2FkZHIpKQorCisjZGVmaW5lIGluYl9wKF9fYWRkcikJCWluYihfX2FkZHIpCisjZGVmaW5lIG91dGJfcChfX2IsIF9fYWRkcikJb3V0YihfX2IsIF9fYWRkcikKKyNkZWZpbmUgaW53X3AoX19hZGRyKQkJaW53KF9fYWRkcikKKyNkZWZpbmUgb3V0d19wKF9fdywgX19hZGRyKQlvdXR3KF9fdywgX19hZGRyKQorI2RlZmluZSBpbmxfcChfX2FkZHIpCQlpbmwoX19hZGRyKQorI2RlZmluZSBvdXRsX3AoX19sLCBfX2FkZHIpCW91dGwoX19sLCBfX2FkZHIpCisKK3ZvaWQgb3V0c2IodW5zaWduZWQgbG9uZyBhZGRyLCBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGxvbmcgY250KTsKK3ZvaWQgb3V0c3codW5zaWduZWQgbG9uZyBhZGRyLCBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGxvbmcgY250KTsKK3ZvaWQgb3V0c2wodW5zaWduZWQgbG9uZyBhZGRyLCBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGxvbmcgY250KTsKK3ZvaWQgaW5zYih1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmRzdCwgdW5zaWduZWQgbG9uZyBjb3VudCk7Cit2b2lkIGluc3codW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpkc3QsIHVuc2lnbmVkIGxvbmcgY291bnQpOwordm9pZCBpbnNsKHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZHN0LCB1bnNpZ25lZCBsb25nIGNvdW50KTsKKworI2RlZmluZSBJT19TUEFDRV9MSU1JVCAweGZmZmZmZmZmCisKKy8qCisgKiBTQnVzIGFjY2Vzc29ycy4KKyAqCisgKiBTQnVzIGhhcyBvbmx5IG9uZSwgbWVtb3J5IG1hcHBlZCwgSS9PIHNwYWNlLgorICogV2UgZG8gbm90IG5lZWQgdG8gZmxpcCBieXRlcyBmb3IgU0J1cyBvZiBjb3Vyc2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgdTggX3NidXNfcmVhZGIoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCXJldHVybiAqKF9fZm9yY2Ugdm9sYXRpbGUgdTggKilhZGRyOworfQorCitzdGF0aWMgaW5saW5lIHUxNiBfc2J1c19yZWFkdyhjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJcmV0dXJuICooX19mb3JjZSB2b2xhdGlsZSB1MTYgKilhZGRyOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBfc2J1c19yZWFkbChjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJcmV0dXJuICooX19mb3JjZSB2b2xhdGlsZSB1MzIgKilhZGRyOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX3NidXNfd3JpdGViKHU4IGIsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwkqKF9fZm9yY2Ugdm9sYXRpbGUgdTggKilhZGRyID0gYjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9zYnVzX3dyaXRldyh1MTYgdywgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCSooX19mb3JjZSB2b2xhdGlsZSB1MTYgKilhZGRyID0gdzsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9zYnVzX3dyaXRlbCh1MzIgbCwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCSooX19mb3JjZSB2b2xhdGlsZSB1MzIgKilhZGRyID0gbDsKK30KKworLyoKKyAqIFRoZSBvbmx5IHJlYXNvbiBmb3IgI2RlZmluZSdzIGlzIHRvIGhpZGUgY2FzdHMgdG8gdW5zaWduZWQgbG9uZy4KKyAqLworI2RlZmluZSBzYnVzX3JlYWRiKF9fYWRkcikJCV9zYnVzX3JlYWRiKF9fYWRkcikKKyNkZWZpbmUgc2J1c19yZWFkdyhfX2FkZHIpCQlfc2J1c19yZWFkdyhfX2FkZHIpCisjZGVmaW5lIHNidXNfcmVhZGwoX19hZGRyKQkJX3NidXNfcmVhZGwoX19hZGRyKQorI2RlZmluZSBzYnVzX3dyaXRlYihfX2IsIF9fYWRkcikJX3NidXNfd3JpdGViKF9fYiwgX19hZGRyKQorI2RlZmluZSBzYnVzX3dyaXRldyhfX3csIF9fYWRkcikJX3NidXNfd3JpdGV3KF9fdywgX19hZGRyKQorI2RlZmluZSBzYnVzX3dyaXRlbChfX2wsIF9fYWRkcikJX3NidXNfd3JpdGVsKF9fbCwgX19hZGRyKQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2J1c19tZW1zZXRfaW8odm9sYXRpbGUgdm9pZCBfX2lvbWVtICpfX2RzdCwgaW50IGMsIF9fa2VybmVsX3NpemVfdCBuKQoreworCXdoaWxlKG4tLSkgeworCQlzYnVzX3dyaXRlYihjLCBfX2RzdCk7CisJCV9fZHN0Kys7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK19tZW1zZXRfaW8odm9sYXRpbGUgdm9pZCBfX2lvbWVtICpkc3QsIGludCBjLCBfX2tlcm5lbF9zaXplX3QgbikKK3sKKwl2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmQgPSBkc3Q7CisKKwl3aGlsZSAobi0tKSB7CisJCXdyaXRlYihjLCBkKTsKKwkJZCsrOworCX0KK30KKworI2RlZmluZSBtZW1zZXRfaW8oZCxjLHN6KQlfbWVtc2V0X2lvKGQsYyxzeikKKworc3RhdGljIGlubGluZSB2b2lkCitfbWVtY3B5X2Zyb21pbyh2b2lkICpkc3QsIGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqc3JjLCBfX2tlcm5lbF9zaXplX3QgbikKK3sKKwljaGFyICpkID0gZHN0OworCisJd2hpbGUgKG4tLSkgeworCQljaGFyIHRtcCA9IHJlYWRiKHNyYyk7CisJCSpkKysgPSB0bXA7CisJCXNyYysrOworCX0KK30KKworI2RlZmluZSBtZW1jcHlfZnJvbWlvKGQscyxzeikJX21lbWNweV9mcm9taW8oZCxzLHN6KQorCitzdGF0aWMgaW5saW5lIHZvaWQgCitfbWVtY3B5X3RvaW8odm9sYXRpbGUgdm9pZCBfX2lvbWVtICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgX19rZXJuZWxfc2l6ZV90IG4pCit7CisJY29uc3QgY2hhciAqcyA9IHNyYzsKKwl2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmQgPSBkc3Q7CisKKwl3aGlsZSAobi0tKSB7CisJCWNoYXIgdG1wID0gKnMrKzsKKwkJd3JpdGViKHRtcCwgZCk7CisJCWQrKzsKKwl9Cit9CisKKyNkZWZpbmUgbWVtY3B5X3RvaW8oZCxzLHN6KQlfbWVtY3B5X3RvaW8oZCxzLHN6KQorCisjaWZkZWYgX19LRVJORUxfXworCisvKgorICogQnVzIG51bWJlciBtYXkgYmUgZW1iZWRkZWQgaW4gdGhlIGhpZ2hlciBiaXRzIG9mIHRoZSBwaHlzaWNhbCBhZGRyZXNzLgorICogVGhpcyBpcyB3aHkgd2UgaGF2ZSBubyBidXMgbnVtYmVyIGFyZ3VtZW50IHRvIGlvcmVtYXAoKS4KKyAqLworZXh0ZXJuIHZvaWQgX19pb21lbSAqaW9yZW1hcCh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKTsKKyNkZWZpbmUgaW9yZW1hcF9ub2NhY2hlKFgsWSkJaW9yZW1hcCgoWCksKFkpKQorZXh0ZXJuIHZvaWQgaW91bm1hcCh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpOworCisvKgorICogQnVzIG51bWJlciBtYXkgYmUgaW4gcmVzLT5mbGFncy4uLiBzb21ld2hlcmUuCisgKi8KK2V4dGVybiB2b2lkIF9faW9tZW0gKnNidXNfaW9yZW1hcChzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgdW5zaWduZWQgbG9uZyBvZmZzZXQsCisgICAgdW5zaWduZWQgbG9uZyBzaXplLCBjaGFyICpuYW1lKTsKK2V4dGVybiB2b2lkIHNidXNfaW91bm1hcCh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKnZhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpOworCisKKy8qCisgKiBBdCB0aGUgbW9tZW50LCB3ZSBkbyBub3QgdXNlIENNT1NfUkVBRCBhbnl3aGVyZSBvdXRzaWRlIG9mIHJ0Yy5jLAorICogc28gcnRjX3BvcnQgaXMgc3RhdGljIGluIGl0LiBUaGlzIHNob3VsZCBub3QgY2hhbmdlIHVubGVzcyBhIG5ldworICogaGFyZHdhcmUgcG9wcyB1cC4KKyAqLworI2RlZmluZSBSVENfUE9SVCh4KSAgIChydGNfcG9ydCArICh4KSkKKyNkZWZpbmUgUlRDX0FMV0FZU19CQ0QgIDAKKworLyogTm90aGluZyB0byBkbyAqLworLyogUDM6IE9ubHkgSURFIERNQSBtYXkgbmVlZCB0aGVzZS4gWFhYIFZlcmlmeSB0aGF0IGl0IHN0aWxsIGRvZXMuLi4gKi8KKworI2RlZmluZSBkbWFfY2FjaGVfaW52KF9zdGFydCxfc2l6ZSkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZG1hX2NhY2hlX3diYWNrKF9zdGFydCxfc2l6ZSkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZG1hX2NhY2hlX3diYWNrX2ludihfc3RhcnQsX3NpemUpCWRvIHsgfSB3aGlsZSAoMCkKKworI2VuZGlmCisKKyNkZWZpbmUgX19BUkNIX0hBU19OT19QQUdFX1pFUk9fTUFQUEVECQkxCisKKy8qCisgKiBDb252ZXJ0IGEgcGh5c2ljYWwgcG9pbnRlciB0byBhIHZpcnR1YWwga2VybmVsIHBvaW50ZXIgZm9yIC9kZXYvbWVtCisgKiBhY2Nlc3MKKyAqLworI2RlZmluZSB4bGF0ZV9kZXZfbWVtX3B0cihwKQlfX3ZhKHApCisKKy8qCisgKiBDb252ZXJ0IGEgdmlydHVhbCBjYWNoZWQgcG9pbnRlciB0byBhbiB1bmNhY2hlZCBwb2ludGVyCisgKi8KKyNkZWZpbmUgeGxhdGVfZGV2X2ttZW1fcHRyKHApCXAKKworI2VuZGlmIC8qICEoX19TUEFSQ19JT19IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvaW9jdGwuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL2lvY3RsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZmYzRkZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL2lvY3RsLmgKQEAgLTAsMCArMSw2OCBAQAorLyogJElkOiBpb2N0bC5oLHYgMS42IDE5OTkvMTIvMDEgMjM6NTg6MzYgZGF2ZW0gRXhwICQgKi8KKyNpZm5kZWYgX1NQQVJDX0lPQ1RMX0gKKyNkZWZpbmUgX1NQQVJDX0lPQ1RMX0gKKworLyoKKyAqIE91ciBESVIgYW5kIFNJWkUgb3ZlcmxhcCBpbiBvcmRlciB0byBzaW11bHRlbmVvdXNseSBwcm92aWRlCisgKiBhIG5vbi16ZXJvIF9JT0NfTk9ORSAoZm9yIGJpbmFyeSBjb21wYXRpYmlsaXR5KSBhbmQKKyAqIDE0IGJpdHMgb2Ygc2l6ZSBhcyBvbiBpMzg2LiBIZXJlJ3MgdGhlIGxheW91dDoKKyAqCisgKiAgIDB4RTAwMDAwMDAgICBESVIKKyAqICAgMHg4MDAwMDAwMCAgICAgRElSID0gV1JJVEUKKyAqICAgMHg0MDAwMDAwMCAgICAgRElSID0gUkVBRAorICogICAweDIwMDAwMDAwICAgICBESVIgPSBOT05FCisgKiAgIDB4M0ZGRjAwMDAgICBTSVpFIChvdmVybGFwcyBOT05FIGJpdCkKKyAqICAgMHgwMDAwRkYwMCAgIFRZUEUKKyAqICAgMHgwMDAwMDBGRiAgIE5SIChDTUQpCisgKi8KKworI2RlZmluZSBfSU9DX05SQklUUyAgICAgIDgKKyNkZWZpbmUgX0lPQ19UWVBFQklUUyAgICA4CisjZGVmaW5lIF9JT0NfU0laRUJJVFMgICAxMwkvKiBBY3R1YWxseSAxNCwgc2VlIGJlbG93LiAqLworI2RlZmluZSBfSU9DX0RJUkJJVFMgICAgIDMKKworI2RlZmluZSBfSU9DX05STUFTSyAgICAgICgoMSA8PCBfSU9DX05SQklUUyktMSkKKyNkZWZpbmUgX0lPQ19UWVBFTUFTSyAgICAoKDEgPDwgX0lPQ19UWVBFQklUUyktMSkKKyNkZWZpbmUgX0lPQ19TSVpFTUFTSyAgICAoKDEgPDwgX0lPQ19TSVpFQklUUyktMSkKKyNkZWZpbmUgX0lPQ19YU0laRU1BU0sgICAoKDEgPDwgKF9JT0NfU0laRUJJVFMrMSkpLTEpCisjZGVmaW5lIF9JT0NfRElSTUFTSyAgICAgKCgxIDw8IF9JT0NfRElSQklUUyktMSkKKworI2RlZmluZSBfSU9DX05SU0hJRlQgICAgIDAKKyNkZWZpbmUgX0lPQ19UWVBFU0hJRlQgICAoX0lPQ19OUlNISUZUICsgX0lPQ19OUkJJVFMpCisjZGVmaW5lIF9JT0NfU0laRVNISUZUICAgKF9JT0NfVFlQRVNISUZUICsgX0lPQ19UWVBFQklUUykKKyNkZWZpbmUgX0lPQ19ESVJTSElGVCAgICAoX0lPQ19TSVpFU0hJRlQgKyBfSU9DX1NJWkVCSVRTKQorCisjZGVmaW5lIF9JT0NfTk9ORSAgICAgICAgMVUKKyNkZWZpbmUgX0lPQ19SRUFEICAgICAgICAyVQorI2RlZmluZSBfSU9DX1dSSVRFICAgICAgIDRVCisKKyNkZWZpbmUgX0lPQyhkaXIsdHlwZSxucixzaXplKSBcCisgICAgICAgICgoKGRpcikgIDw8IF9JT0NfRElSU0hJRlQpIHwgXAorICAgICAgICAgKCh0eXBlKSA8PCBfSU9DX1RZUEVTSElGVCkgfCBcCisgICAgICAgICAoKG5yKSAgIDw8IF9JT0NfTlJTSElGVCkgfCBcCisgICAgICAgICAoKHNpemUpIDw8IF9JT0NfU0laRVNISUZUKSkKKworI2RlZmluZSBfSU8odHlwZSxucikgICAgICAgIF9JT0MoX0lPQ19OT05FLCh0eXBlKSwobnIpLDApCisjZGVmaW5lIF9JT1IodHlwZSxucixzaXplKSAgX0lPQyhfSU9DX1JFQUQsKHR5cGUpLChuciksc2l6ZW9mKHNpemUpKQorI2RlZmluZSBfSU9XKHR5cGUsbnIsc2l6ZSkgIF9JT0MoX0lPQ19XUklURSwodHlwZSksKG5yKSxzaXplb2Yoc2l6ZSkpCisjZGVmaW5lIF9JT1dSKHR5cGUsbnIsc2l6ZSkgX0lPQyhfSU9DX1JFQUR8X0lPQ19XUklURSwodHlwZSksKG5yKSxzaXplb2Yoc2l6ZSkpCisKKy8qIFVzZWQgdG8gZGVjb2RlIGlvY3RsIG51bWJlcnMgaW4gZHJpdmVycyBkZXNwaXRlIHRoZSBsZWFkaW5nIHVuZGVyc2NvcmUuLi4gKi8KKyNkZWZpbmUgX0lPQ19ESVIobnIpICAgIFwKKyAoICgoKCgobnIpID4+IF9JT0NfRElSU0hJRlQpICYgX0lPQ19ESVJNQVNLKSAmIChfSU9DX1dSSVRFfF9JT0NfUkVBRCkpICE9IDApPyAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChucikgPj4gX0lPQ19ESVJTSElGVCkgJiAoX0lPQ19XUklURXxfSU9DX1JFQUQpKTogIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChucikgPj4gX0lPQ19ESVJTSElGVCkgJiBfSU9DX0RJUk1BU0spICkKKyNkZWZpbmUgX0lPQ19UWVBFKG5yKSAgICAgICAoKChucikgPj4gX0lPQ19UWVBFU0hJRlQpICYgX0lPQ19UWVBFTUFTSykKKyNkZWZpbmUgX0lPQ19OUihucikgICAgICAgICAoKChucikgPj4gX0lPQ19OUlNISUZUKSAmIF9JT0NfTlJNQVNLKQorI2RlZmluZSBfSU9DX1NJWkUobnIpICAgXAorICgoKCgoKG5yKSA+PiBfSU9DX0RJUlNISUZUKSAmIF9JT0NfRElSTUFTSykgJiAoX0lPQ19XUklURXxfSU9DX1JFQUQpKSA9PSAwKT8gICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgIDA6ICgoKG5yKSA+PiBfSU9DX1NJWkVTSElGVCkgJiBfSU9DX1hTSVpFTUFTSykpCisKKy8qIC4uLmFuZCBmb3IgdGhlIFBDTUNJQSBhbmQgc291bmQuICovCisjZGVmaW5lIElPQ19JTiAgICAgICAgICAoX0lPQ19XUklURSA8PCBfSU9DX0RJUlNISUZUKQorI2RlZmluZSBJT0NfT1VUICAgICAgICAgKF9JT0NfUkVBRCA8PCBfSU9DX0RJUlNISUZUKQorI2RlZmluZSBJT0NfSU5PVVQgICAgICAgKChfSU9DX1dSSVRFfF9JT0NfUkVBRCkgPDwgX0lPQ19ESVJTSElGVCkKKyNkZWZpbmUgSU9DU0laRV9NQVNLICAgIChfSU9DX1hTSVpFTUFTSyA8PCBfSU9DX1NJWkVTSElGVCkKKyNkZWZpbmUgSU9DU0laRV9TSElGVCAgIChfSU9DX1NJWkVTSElGVCkKKworI2VuZGlmIC8qICEoX1NQQVJDX0lPQ1RMX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9pb2N0bHMuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL2lvY3Rscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkZjc3YjAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9pb2N0bHMuaApAQCAtMCwwICsxLDEzNCBAQAorI2lmbmRlZiBfQVNNX1NQQVJDX0lPQ1RMU19ICisjZGVmaW5lIF9BU01fU1BBUkNfSU9DVExTX0gKKworI2luY2x1ZGUgPGFzbS9pb2N0bC5oPgorCisvKiBCaWcgVCAqLworI2RlZmluZSBUQ0dFVEEJCV9JT1IoJ1QnLCAxLCBzdHJ1Y3QgdGVybWlvKQorI2RlZmluZSBUQ1NFVEEJCV9JT1coJ1QnLCAyLCBzdHJ1Y3QgdGVybWlvKQorI2RlZmluZSBUQ1NFVEFXCQlfSU9XKCdUJywgMywgc3RydWN0IHRlcm1pbykKKyNkZWZpbmUgVENTRVRBRgkJX0lPVygnVCcsIDQsIHN0cnVjdCB0ZXJtaW8pCisjZGVmaW5lIFRDU0JSSwkJX0lPKCdUJywgNSkKKyNkZWZpbmUgVENYT05DCQlfSU8oJ1QnLCA2KQorI2RlZmluZSBUQ0ZMU0gJCV9JTygnVCcsIDcpCisjZGVmaW5lIFRDR0VUUwkJX0lPUignVCcsIDgsIHN0cnVjdCB0ZXJtaW9zKQorI2RlZmluZSBUQ1NFVFMJCV9JT1coJ1QnLCA5LCBzdHJ1Y3QgdGVybWlvcykKKyNkZWZpbmUgVENTRVRTVwkJX0lPVygnVCcsIDEwLCBzdHJ1Y3QgdGVybWlvcykKKyNkZWZpbmUgVENTRVRTRgkJX0lPVygnVCcsIDExLCBzdHJ1Y3QgdGVybWlvcykKKworLyogTm90ZSB0aGF0IGFsbCB0aGUgaW9jdGxzIHRoYXQgYXJlIG5vdCBhdmFpbGFibGUgaW4gTGludXggaGF2ZSBhIAorICogZG91YmxlIHVuZGVyc2NvcmUgb24gdGhlIGZyb250IHRvOiBhKSBhdm9pZCBzb21lIHByb2dyYW1zIHRvCisgKiB0aGluZyB3ZSBzdXBwb3J0IHNvbWUgaW9jdGxzIHVuZGVyIExpbnV4IChhdXRvY29uZmlndXJhdGlvbiBzdHVmZikKKyAqLworLyogTGl0dGxlIHQgKi8KKyNkZWZpbmUgVElPQ0dFVEQJX0lPUigndCcsIDAsIGludCkKKyNkZWZpbmUgVElPQ1NFVEQJX0lPVygndCcsIDEsIGludCkKKyNkZWZpbmUgX19USU9DSFBDTCAgICAgICAgX0lPKCd0JywgMikgLyogU3VuT1MgU3BlY2lmaWMgKi8KKyNkZWZpbmUgX19USU9DTU9ERyAgICAgICAgX0lPUigndCcsIDMsIGludCkgLyogU3VuT1MgU3BlY2lmaWMgKi8KKyNkZWZpbmUgX19USU9DTU9EUyAgICAgICAgX0lPVygndCcsIDQsIGludCkgLyogU3VuT1MgU3BlY2lmaWMgKi8KKyNkZWZpbmUgX19USU9DR0VUUCAgICAgICAgX0lPUigndCcsIDgsIHN0cnVjdCBzZ3R0eWIpIC8qIFN1bk9TIFNwZWNpZmljICovCisjZGVmaW5lIF9fVElPQ1NFVFAgICAgICAgIF9JT1coJ3QnLCA5LCBzdHJ1Y3Qgc2d0dHliKSAvKiBTdW5PUyBTcGVjaWZpYyAqLworI2RlZmluZSBfX1RJT0NTRVROICAgICAgICBfSU9XKCd0JywgMTAsIHN0cnVjdCBzZ3R0eWIpIC8qIFN1bk9TIFNwZWNpZmljICovCisjZGVmaW5lIFRJT0NFWENMCV9JTygndCcsIDEzKQorI2RlZmluZSBUSU9DTlhDTAlfSU8oJ3QnLCAxNCkKKyNkZWZpbmUgX19USU9DRkxVU0ggICAgICAgX0lPVygndCcsIDE2LCBpbnQpIC8qIFN1bk9TIFNwZWNpZmljICovCisjZGVmaW5lIF9fVElPQ1NFVEMgICAgICAgIF9JT1coJ3QnLCAxNywgc3RydWN0IHRjaGFycykgLyogU3VuT1MgU3BlY2lmaWMgKi8KKyNkZWZpbmUgX19USU9DR0VUQyAgICAgICAgX0lPUigndCcsIDE4LCBzdHJ1Y3QgdGNoYXJzKSAvKiBTdW5PUyBTcGVjaWZpYyAqLworI2RlZmluZSBfX1RJT0NUQ05UTCAgICAgICBfSU9XKCd0JywgMzIsIGludCkgLyogU3VuT1MgU3BlY2lmaWMgKi8KKyNkZWZpbmUgX19USU9DU0lHTkFMICAgICAgX0lPVygndCcsIDMzLCBpbnQpIC8qIFN1bk9TIFNwZWNpZmljICovCisjZGVmaW5lIF9fVElPQ1NFVFggICAgICAgIF9JT1coJ3QnLCAzNCwgaW50KSAvKiBTdW5PUyBTcGVjaWZpYyAqLworI2RlZmluZSBfX1RJT0NHRVRYICAgICAgICBfSU9SKCd0JywgMzUsIGludCkgLyogU3VuT1MgU3BlY2lmaWMgKi8KKyNkZWZpbmUgVElPQ0NPTlMJX0lPKCd0JywgMzYpCisjZGVmaW5lIF9fVElPQ1NTSVpFICAgICBfSU9XKCd0JywgMzcsIHN0cnVjdCBzdW5vc190dHlzaXplKSAvKiBTdW5PUyBTcGVjaWZpYyAqLworI2RlZmluZSBfX1RJT0NHU0laRSAgICAgX0lPUigndCcsIDM4LCBzdHJ1Y3Qgc3Vub3NfdHR5c2l6ZSkgLyogU3VuT1MgU3BlY2lmaWMgKi8KKyNkZWZpbmUgVElPQ0dTT0ZUQ0FSCV9JT1IoJ3QnLCAxMDAsIGludCkKKyNkZWZpbmUgVElPQ1NTT0ZUQ0FSCV9JT1coJ3QnLCAxMDEsIGludCkKKyNkZWZpbmUgX19USU9DVUNOVEwgICAgICAgX0lPVygndCcsIDEwMiwgaW50KSAvKiBTdW5PUyBTcGVjaWZpYyAqLworI2RlZmluZSBUSU9DU1dJTlNaCV9JT1coJ3QnLCAxMDMsIHN0cnVjdCB3aW5zaXplKQorI2RlZmluZSBUSU9DR1dJTlNaCV9JT1IoJ3QnLCAxMDQsIHN0cnVjdCB3aW5zaXplKQorI2RlZmluZSBfX1RJT0NSRU1PVEUgICAgICBfSU9XKCd0JywgMTA1LCBpbnQpIC8qIFN1bk9TIFNwZWNpZmljICovCisjZGVmaW5lIFRJT0NNR0VUCV9JT1IoJ3QnLCAxMDYsIGludCkKKyNkZWZpbmUgVElPQ01CSUMJX0lPVygndCcsIDEwNywgaW50KQorI2RlZmluZSBUSU9DTUJJUwlfSU9XKCd0JywgMTA4LCBpbnQpCisjZGVmaW5lIFRJT0NNU0VUCV9JT1coJ3QnLCAxMDksIGludCkKKyNkZWZpbmUgVElPQ1NUQVJUICAgICAgIF9JTygndCcsIDExMCkKKyNkZWZpbmUgVElPQ1NUT1AgICAgICAgIF9JTygndCcsIDExMSkKKyNkZWZpbmUgVElPQ1BLVAkJX0lPVygndCcsIDExMiwgaW50KQorI2RlZmluZSBUSU9DTk9UVFkJX0lPKCd0JywgMTEzKQorI2RlZmluZSBUSU9DU1RJCQlfSU9XKCd0JywgMTE0LCBjaGFyKQorI2RlZmluZSBUSU9DT1VUUQlfSU9SKCd0JywgMTE1LCBpbnQpCisjZGVmaW5lIF9fVElPQ0dMVEMgICAgICAgIF9JT1IoJ3QnLCAxMTYsIHN0cnVjdCBsdGNoYXJzKSAvKiBTdW5PUyBTcGVjaWZpYyAqLworI2RlZmluZSBfX1RJT0NTTFRDICAgICAgICBfSU9XKCd0JywgMTE3LCBzdHJ1Y3QgbHRjaGFycykgLyogU3VuT1MgU3BlY2lmaWMgKi8KKy8qIDExOCBpcyB0aGUgbm9uLXBvc2l4IHNldHBncnAgdHR5IGlvY3RsICovCisvKiAxMTkgaXMgdGhlIG5vbi1wb3NpeCBnZXRwZ3JwIHR0eSBpb2N0bCAqLworI2RlZmluZSBfX1RJT0NDRFRSICAgICAgICBfSU8oJ3QnLCAxMjApIC8qIFN1bk9TIFNwZWNpZmljICovCisjZGVmaW5lIF9fVElPQ1NEVFIgICAgICAgIF9JTygndCcsIDEyMSkgLyogU3VuT1MgU3BlY2lmaWMgKi8KKyNkZWZpbmUgVElPQ0NCUksgICAgICAgIF9JTygndCcsIDEyMikKKyNkZWZpbmUgVElPQ1NCUksgICAgICAgIF9JTygndCcsIDEyMykKKyNkZWZpbmUgX19USU9DTEdFVCAgICAgICAgX0lPVygndCcsIDEyNCwgaW50KSAvKiBTdW5PUyBTcGVjaWZpYyAqLworI2RlZmluZSBfX1RJT0NMU0VUICAgICAgICBfSU9XKCd0JywgMTI1LCBpbnQpIC8qIFN1bk9TIFNwZWNpZmljICovCisjZGVmaW5lIF9fVElPQ0xCSUMgICAgICAgIF9JT1coJ3QnLCAxMjYsIGludCkgLyogU3VuT1MgU3BlY2lmaWMgKi8KKyNkZWZpbmUgX19USU9DTEJJUyAgICAgICAgX0lPVygndCcsIDEyNywgaW50KSAvKiBTdW5PUyBTcGVjaWZpYyAqLworI2RlZmluZSBfX1RJT0NJU1BBQ0UgICAgICBfSU9SKCd0JywgMTI4LCBpbnQpIC8qIFN1bk9TIFNwZWNpZmljICovCisjZGVmaW5lIF9fVElPQ0lTSVpFICAgICAgIF9JT1IoJ3QnLCAxMjksIGludCkgLyogU3VuT1MgU3BlY2lmaWMgKi8KKyNkZWZpbmUgVElPQ1NQR1JQCV9JT1coJ3QnLCAxMzAsIGludCkKKyNkZWZpbmUgVElPQ0dQR1JQCV9JT1IoJ3QnLCAxMzEsIGludCkKKyNkZWZpbmUgVElPQ1NDVFRZCV9JTygndCcsIDEzMikKKyNkZWZpbmUgVElPQ0dTSUQJX0lPUigndCcsIDEzMywgaW50KQorLyogR2V0IG1pbm9yIGRldmljZSBvZiBhIHB0eSBtYXN0ZXIncyBGRCAtLSBTb2xhcmlzIGVxdWl2IGlzIElTUFRNICovCisjZGVmaW5lIFRJT0NHUFROCV9JT1IoJ3QnLCAxMzQsIHVuc2lnbmVkIGludCkgLyogR2V0IFB0eSBOdW1iZXIgKi8KKyNkZWZpbmUgVElPQ1NQVExDSwlfSU9XKCd0JywgMTM1LCBpbnQpIC8qIExvY2svdW5sb2NrIFBUWSAqLworCisvKiBMaXR0bGUgZiAqLworI2RlZmluZSBGSU9DTEVYCQlfSU8oJ2YnLCAxKQorI2RlZmluZSBGSU9OQ0xFWAlfSU8oJ2YnLCAyKQorI2RlZmluZSBGSU9BU1lOQwlfSU9XKCdmJywgMTI1LCBpbnQpCisjZGVmaW5lIEZJT05CSU8JCV9JT1coJ2YnLCAxMjYsIGludCkKKyNkZWZpbmUgRklPTlJFQUQJX0lPUignZicsIDEyNywgaW50KQorI2RlZmluZSBUSU9DSU5RCQlGSU9OUkVBRAorI2RlZmluZSBGSU9RU0laRQlfSU9SKCdmJywgMTI4LCBsb2ZmX3QpCisKKy8qIFNDQVJZIFJ1dGdlcnMgbG9jYWwgU3VuT1Mga2VybmVsIGhhY2tlcnksIHBlcmhhcHMgSSB3aWxsIHN1cHBvcnQgaXQKKyAqIHNvbWVkYXkuICBUaGlzIGlzIGNvbXBsZXRlbHkgYm9ndXMsIEkga25vdy4uLgorICovCisjZGVmaW5lIF9fVENHRVRTVEFUICAgICAgIF9JTygnVCcsIDIwMCkgLyogUnV0Z2VycyBzcGVjaWZpYyAqLworI2RlZmluZSBfX1RDU0VUU1RBVCAgICAgICBfSU8oJ1QnLCAyMDEpIC8qIFJ1dGdlcnMgc3BlY2lmaWMgKi8KKworLyogTGludXggc3BlY2lmaWMsIG5vIFN1bk9TIGVxdWl2YWxlbnQuICovCisjZGVmaW5lIFRJT0NMSU5VWAkweDU0MUMKKyNkZWZpbmUgVElPQ0dTRVJJQUwJMHg1NDFFCisjZGVmaW5lIFRJT0NTU0VSSUFMCTB4NTQxRgorI2RlZmluZSBUQ1NCUktQCQkweDU0MjUKKyNkZWZpbmUgVElPQ1NFUkNPTkZJRwkweDU0NTMKKyNkZWZpbmUgVElPQ1NFUkdXSUxECTB4NTQ1NAorI2RlZmluZSBUSU9DU0VSU1dJTEQJMHg1NDU1CisjZGVmaW5lIFRJT0NHTENLVFJNSU9TCTB4NTQ1NgorI2RlZmluZSBUSU9DU0xDS1RSTUlPUwkweDU0NTcKKyNkZWZpbmUgVElPQ1NFUkdTVFJVQ1QJMHg1NDU4IC8qIEZvciBkZWJ1Z2dpbmcgb25seSAqLworI2RlZmluZSBUSU9DU0VSR0VUTFNSICAgMHg1NDU5IC8qIEdldCBsaW5lIHN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBUSU9DU0VSR0VUTVVMVEkgMHg1NDVBIC8qIEdldCBtdWx0aXBvcnQgY29uZmlnICAqLworI2RlZmluZSBUSU9DU0VSU0VUTVVMVEkgMHg1NDVCIC8qIFNldCBtdWx0aXBvcnQgY29uZmlnICovCisjZGVmaW5lIFRJT0NNSVdBSVQJMHg1NDVDIC8qIFdhaXQgaW5wdXQgKi8KKyNkZWZpbmUgVElPQ0dJQ09VTlQJMHg1NDVEIC8qIFJlYWQgc2VyaWFsIHBvcnQgaW5saW5lIGludGVycnVwdCBjb3VudHMgKi8KKworLyogS2VybmVsIGRlZmluaXRpb25zICovCisjaWZkZWYgX19LRVJORUxfXworI2RlZmluZSBUSU9DR0VUQyBfX1RJT0NHRVRDCisjZGVmaW5lIFRJT0NHRVRQIF9fVElPQ0dFVFAKKyNkZWZpbmUgVElPQ0dMVEMgX19USU9DR0xUQworI2RlZmluZSBUSU9DU0xUQyBfX1RJT0NTTFRDCisjZGVmaW5lIFRJT0NTRVRQIF9fVElPQ1NFVFAKKyNkZWZpbmUgVElPQ1NFVE4gX19USU9DU0VUTgorI2RlZmluZSBUSU9DU0VUQyBfX1RJT0NTRVRDCisjZW5kaWYKKworLyogVXNlZCBmb3IgcGFja2V0IG1vZGUgKi8KKyNkZWZpbmUgVElPQ1BLVF9EQVRBCQkgMAorI2RlZmluZSBUSU9DUEtUX0ZMVVNIUkVBRAkgMQorI2RlZmluZSBUSU9DUEtUX0ZMVVNIV1JJVEUJIDIKKyNkZWZpbmUgVElPQ1BLVF9TVE9QCQkgNAorI2RlZmluZSBUSU9DUEtUX1NUQVJUCQkgOAorI2RlZmluZSBUSU9DUEtUX05PU1RPUAkJMTYKKyNkZWZpbmUgVElPQ1BLVF9ET1NUT1AJCTMyCisKKyNlbmRpZiAvKiAhKF9BU01fU1BBUkNfSU9DVExTX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9pb21tdS5oIGIvaW5jbHVkZS9hc20tc3BhcmMvaW9tbXUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTcxMzYyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvaW9tbXUuaApAQCAtMCwwICsxLDEyMSBAQAorLyogaW9tbXUuaDogRGVmaW5pdGlvbnMgZm9yIHRoZSBzdW40bSBJT01NVS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQorICovCisjaWZuZGVmIF9TUEFSQ19JT01NVV9ICisjZGVmaW5lIF9TUEFSQ19JT01NVV9ICisKKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9iaXRleHQuaD4KKworLyogVGhlIGlvbW11IGhhbmRsZXMgYWxsIHZpcnR1YWwgdG8gcGh5c2ljYWwgYWRkcmVzcyB0cmFuc2xhdGlvbnMKKyAqIHRoYXQgb2NjdXIgYmV0d2VlbiB0aGUgU0JVUyBhbmQgcGh5c2ljYWwgbWVtb3J5LiAgQWNjZXNzIGJ5CisgKiB0aGUgY3B1IHRvIElPIHJlZ2lzdGVycyBhbmQgc2ltaWxhciBnbyBvdmVyIHRoZSBtYnVzIHNvIGFyZQorICogdHJhbnNsYXRlZCBieSB0aGUgb24gY2hpcCBTUk1NVS4gIFRoZSBpb21tdSBhbmQgdGhlIHNybW11IGRvCisgKiBub3QgbmVlZCB0byBoYXZlIHRoZSBzYW1lIHRyYW5zbGF0aW9ucyBhdCBhbGwsIGluIGZhY3QgbW9zdAorICogb2YgdGhlIHRpbWUgdGhlIHRyYW5zbGF0aW9ucyB0aGV5IGhhbmRsZSBhcmUgYSBkaXNqdW5jdCBzZXQuCisgKiBCYXNpY2FsbHkgdGhlIGlvbW11IGhhbmRsZXMgYWxsIGR2bWEgc2J1cyBhY3Rpdml0eS4KKyAqLworCisvKiBUaGUgSU9NTVUgcmVnaXN0ZXJzIG9jY3VweSB0aHJlZSBwYWdlcyBpbiBJTyBzcGFjZS4gKi8KK3N0cnVjdCBpb21tdV9yZWdzIHsKKwkvKiBGaXJzdCBwYWdlICovCisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBjb250cm9sOyAgICAvKiBJT01NVSBjb250cm9sICovCisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBiYXNlOyAgICAgICAvKiBQaHlzaWNhbCBiYXNlIG9mIGlvcHRlIHBhZ2UgdGFibGUgKi8KKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIF91bnVzZWQxWzNdOworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgdGxiZmx1c2g7ICAgLyogd3JpdGUgb25seSAqLworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgcGFnZWZsdXNoOyAgLyogd3JpdGUgb25seSAqLworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgX3VudXNlZDJbMTAxN107CisJLyogU2Vjb25kIHBhZ2UgKi8KKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGFmc3I7ICAgICAgIC8qIEFzeW5jLWZhdWx0IHN0YXR1cyByZWdpc3RlciAqLworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgYWZhcjsgICAgICAgLyogQXN5bmMtZmF1bHQgcGh5c2ljYWwgYWRkcmVzcyAqLworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgX3VudXNlZDNbMl07CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBzYnVzY2ZnMDsgICAvKiBTQlVTIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzLCBwZXItc2xvdCAqLworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgc2J1c2NmZzE7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBzYnVzY2ZnMjsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIHNidXNjZmczOworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgbWZzcjsgICAgICAgLyogTWVtb3J5LWZhdWx0IHN0YXR1cyByZWdpc3RlciAqLworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgbWZhcjsgICAgICAgLyogTWVtb3J5LWZhdWx0IHBoeXNpY2FsIGFkZHJlc3MgKi8KKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIF91bnVzZWQ0WzEwMTRdOworCS8qIFRoaXJkIHBhZ2UgKi8KKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIG1pZDsgICAgICAgIC8qIElPTU1VIG1vZHVsZS1pZCAqLworfTsKKworI2RlZmluZSBJT01NVV9DVFJMX0lNUEwgICAgIDB4ZjAwMDAwMDAgLyogSW1wbGVtZW50YXRpb24gKi8KKyNkZWZpbmUgSU9NTVVfQ1RSTF9WRVJTICAgICAweDBmMDAwMDAwIC8qIFZlcnNpb24gKi8KKyNkZWZpbmUgSU9NTVVfQ1RSTF9STkdFICAgICAweDAwMDAwMDFjIC8qIE1hcHBpbmcgUkFOR0UgKi8KKyNkZWZpbmUgSU9NTVVfUk5HRV8xNk1CICAgICAweDAwMDAwMDAwIC8qIDB4ZmYwMDAwMDAgLT4gMHhmZmZmZmZmZiAqLworI2RlZmluZSBJT01NVV9STkdFXzMyTUIgICAgIDB4MDAwMDAwMDQgLyogMHhmZTAwMDAwMCAtPiAweGZmZmZmZmZmICovCisjZGVmaW5lIElPTU1VX1JOR0VfNjRNQiAgICAgMHgwMDAwMDAwOCAvKiAweGZjMDAwMDAwIC0+IDB4ZmZmZmZmZmYgKi8KKyNkZWZpbmUgSU9NTVVfUk5HRV8xMjhNQiAgICAweDAwMDAwMDBjIC8qIDB4ZjgwMDAwMDAgLT4gMHhmZmZmZmZmZiAqLworI2RlZmluZSBJT01NVV9STkdFXzI1Nk1CICAgIDB4MDAwMDAwMTAgLyogMHhmMDAwMDAwMCAtPiAweGZmZmZmZmZmICovCisjZGVmaW5lIElPTU1VX1JOR0VfNTEyTUIgICAgMHgwMDAwMDAxNCAvKiAweGUwMDAwMDAwIC0+IDB4ZmZmZmZmZmYgKi8KKyNkZWZpbmUgSU9NTVVfUk5HRV8xR0IgICAgICAweDAwMDAwMDE4IC8qIDB4YzAwMDAwMDAgLT4gMHhmZmZmZmZmZiAqLworI2RlZmluZSBJT01NVV9STkdFXzJHQiAgICAgIDB4MDAwMDAwMWMgLyogMHg4MDAwMDAwMCAtPiAweGZmZmZmZmZmICovCisjZGVmaW5lIElPTU1VX0NUUkxfRU5BQiAgICAgMHgwMDAwMDAwMSAvKiBJT01NVSBFbmFibGUgKi8KKworI2RlZmluZSBJT01NVV9BRlNSX0VSUiAgICAgIDB4ODAwMDAwMDAgLyogTEUsIFRPLCBvciBCRSBhc3NlcnRlZCAqLworI2RlZmluZSBJT01NVV9BRlNSX0xFICAgICAgIDB4NDAwMDAwMDAgLyogU0JVUyByZXBvcnRzIGVycm9yIGFmdGVyIHRyYW5zYWN0aW9uICovCisjZGVmaW5lIElPTU1VX0FGU1JfVE8gICAgICAgMHgyMDAwMDAwMCAvKiBXcml0ZSBhY2Nlc3MgdG9vayBtb3JlIHRoYW4gMTIuOCB1cy4gKi8KKyNkZWZpbmUgSU9NTVVfQUZTUl9CRSAgICAgICAweDEwMDAwMDAwIC8qIFdyaXRlIGFjY2VzcyByZWNlaXZlZCBlcnJvciBhY2tub3dsZWRnZSAqLworI2RlZmluZSBJT01NVV9BRlNSX1NJWkUgICAgIDB4MGUwMDAwMDAgLyogU2l6ZSBvZiB0cmFuc2FjdGlvbiBjYXVzaW5nIGVycm9yICovCisjZGVmaW5lIElPTU1VX0FGU1JfUyAgICAgICAgMHgwMTAwMDAwMCAvKiBTcGFyYyB3YXMgaW4gc3VwZXJ2aXNvciBtb2RlICovCisjZGVmaW5lIElPTU1VX0FGU1JfUkVTViAgICAgMHgwMGYwMDAwMCAvKiBSZXNlcnZlciwgZm9yY2VkIHRvIDB4OCBieSBoYXJkd2FyZSAqLworI2RlZmluZSBJT01NVV9BRlNSX01FICAgICAgIDB4MDAwODAwMDAgLyogTXVsdGlwbGUgZXJyb3JzIG9jY3VycmVkICovCisjZGVmaW5lIElPTU1VX0FGU1JfUkQgICAgICAgMHgwMDA0MDAwMCAvKiBBIHJlYWQgb3BlcmF0aW9uIHdhcyBpbiBwcm9ncmVzcyAqLworI2RlZmluZSBJT01NVV9BRlNSX0ZBViAgICAgIDB4MDAwMjAwMDAgLyogSU9NTVUgYWZhciBoYXMgdmFsaWQgY29udGVudHMgKi8KKworI2RlZmluZSBJT01NVV9TQkNGR19TQUIzMCAgIDB4MDAwMTAwMDAgLyogUGh5cy1hZGRyZXNzIGJpdCAzMCB3aGVuIGJ5cGFzcyBlbmFibGVkICovCisjZGVmaW5lIElPTU1VX1NCQ0ZHX0JBMTYgICAgMHgwMDAwMDAwNCAvKiBTbGF2ZSBzdXBwb3J0cyAxNiBieXRlIGJ1cnN0cyAqLworI2RlZmluZSBJT01NVV9TQkNGR19CQTggICAgIDB4MDAwMDAwMDIgLyogU2xhdmUgc3VwcG9ydHMgOCBieXRlIGJ1cnN0cyAqLworI2RlZmluZSBJT01NVV9TQkNGR19CWVBBU1MgIDB4MDAwMDAwMDEgLyogQnlwYXNzIElPTU1VLCB0cmVhdCBhbGwgYWRkcmVzc2VzCisJCQkJCSAgcHJvZHVjZWQgYnkgdGhpcyBkZXZpY2UgYXMgcHVyZQorCQkJCQkgIHBoeXNpY2FsLiAqLworCisjZGVmaW5lIElPTU1VX01GU1JfRVJSICAgICAgMHg4MDAwMDAwMCAvKiBPbmUgb3IgbW9yZSBvZiBQRVJSMSBvciBQRVJSMCAqLworI2RlZmluZSBJT01NVV9NRlNSX1MgICAgICAgIDB4MDEwMDAwMDAgLyogU3BhcmMgd2FzIGluIHN1cGVydmlzb3IgbW9kZSAqLworI2RlZmluZSBJT01NVV9NRlNSX0NQVSAgICAgIDB4MDA4MDAwMDAgLyogQ1BVIHRyYW5zYWN0aW9uIGNhdXNlZCBwYXJpdHkgZXJyb3IgKi8KKyNkZWZpbmUgSU9NTVVfTUZTUl9NRSAgICAgICAweDAwMDgwMDAwIC8qIE11bHRpcGxlIHBhcml0eSBlcnJvcnMgb2NjdXJyZWQgKi8KKyNkZWZpbmUgSU9NTVVfTUZTUl9QRVJSICAgICAweDAwMDA2MDAwIC8qIGhpZ2ggYml0IGluZGljYXRlcyBwYXJpdHkgZXJyb3Igb2NjdXJyZWQKKwkJCQkJICBvbiB0aGUgZXZlbiB3b3JkIG9mIHRoZSBhY2Nlc3MsIGxvdyBiaXQKKwkJCQkJICBpbmRpY2F0ZWQgb2RkIHdvcmQgY2F1c2VkIHRoZSBwYXJpdHkgZXJyb3IgKi8KKyNkZWZpbmUgSU9NTVVfTUZTUl9CTSAgICAgICAweDAwMDAxMDAwIC8qIEVycm9yIG9jY3VycmVkIHdoaWxlIGluIGJvb3QgbW9kZSAqLworI2RlZmluZSBJT01NVV9NRlNSX0MgICAgICAgIDB4MDAwMDA4MDAgLyogQWRkcmVzcyBjYXVzaW5nIGVycm9yIHdhcyBtYXJrZWQgY2FjaGVhYmxlICovCisjZGVmaW5lIElPTU1VX01GU1JfUlRZUCAgICAgMHgwMDAwMDBmMCAvKiBNZW1vcnkgcmVxdWVzdCB0cmFuc2FjdGlvbiB0eXBlICovCisKKyNkZWZpbmUgSU9NTVVfTUlEX1NCQUUgICAgICAweDAwMWYwMDAwIC8qIFNCdXMgYXJiaXRyYXRpb24gZW5hYmxlICovCisjZGVmaW5lIElPTU1VX01JRF9TRSAgICAgICAgMHgwMDEwMDAwMCAvKiBFbmFibGVzIFNDU0kvRVRIRVJORVQgYXJiaXRyYXRpb24gKi8KKyNkZWZpbmUgSU9NTVVfTUlEX1NCMyAgICAgICAweDAwMDgwMDAwIC8qIEVuYWJsZSBTQlVTIGRldmljZSAzIGFyYml0cmF0aW9uICovCisjZGVmaW5lIElPTU1VX01JRF9TQjIgICAgICAgMHgwMDA0MDAwMCAvKiBFbmFibGUgU0JVUyBkZXZpY2UgMiBhcmJpdHJhdGlvbiAqLworI2RlZmluZSBJT01NVV9NSURfU0IxICAgICAgIDB4MDAwMjAwMDAgLyogRW5hYmxlIFNCVVMgZGV2aWNlIDEgYXJiaXRyYXRpb24gKi8KKyNkZWZpbmUgSU9NTVVfTUlEX1NCMCAgICAgICAweDAwMDEwMDAwIC8qIEVuYWJsZSBTQlVTIGRldmljZSAwIGFyYml0cmF0aW9uICovCisjZGVmaW5lIElPTU1VX01JRF9NSUQgICAgICAgMHgwMDAwMDAwZiAvKiBNb2R1bGUtaWQsIGhhcmRjb2RlZCB0byAweDggKi8KKworLyogVGhlIGZvcm1hdCBvZiBhbiBpb3B0ZSBpbiB0aGUgcGFnZSB0YWJsZXMgKi8KKyNkZWZpbmUgSU9QVEVfUEFHRSAgICAgICAgICAweDA3ZmZmZjAwIC8qIFBoeXNpY2FsIHBhZ2UgbnVtYmVyIChQQVszMDoxMl0pICovCisjZGVmaW5lIElPUFRFX0NBQ0hFICAgICAgICAgMHgwMDAwMDA4MCAvKiBDYWNoZWQgKGluIHZtZSBJT0NBQ0hFIG9yIFZpa2luZy9NWENDKSAqLworI2RlZmluZSBJT1BURV9XUklURSAgICAgICAgIDB4MDAwMDAwMDQgLyogV3JpdGVhYmxlICovCisjZGVmaW5lIElPUFRFX1ZBTElEICAgICAgICAgMHgwMDAwMDAwMiAvKiBJT1BURSBpcyB2YWxpZCAqLworI2RlZmluZSBJT1BURV9XQVogICAgICAgICAgIDB4MDAwMDAwMDEgLyogV3JpdGUgYXMgemVyb3MgKi8KKworc3RydWN0IGlvbW11X3N0cnVjdCB7CisJc3RydWN0IGlvbW11X3JlZ3MgKnJlZ3M7CisJaW9wdGVfdCAqcGFnZV90YWJsZTsKKwkvKiBGb3IgY29udmVuaWVuY2UgKi8KKwl1bnNpZ25lZCBsb25nIHN0YXJ0OyAvKiBGaXJzdCBtYW5hZ2VkIHZpcnR1YWwgYWRkcmVzcyAqLworCXVuc2lnbmVkIGxvbmcgZW5kOyAgIC8qIExhc3QgbWFuYWdlZCB2aXJ0dWFsIGFkZHJlc3MgKi8KKworCXN0cnVjdCBiaXRfbWFwIHVzZW1hcDsKK307CisKK2V4dGVybiBfX2lubGluZV9fIHZvaWQgaW9tbXVfaW52YWxpZGF0ZShzdHJ1Y3QgaW9tbXVfcmVncyAqcmVncykKK3sKKwlyZWdzLT50bGJmbHVzaCA9IDA7Cit9CisKK2V4dGVybiBfX2lubGluZV9fIHZvaWQgaW9tbXVfaW52YWxpZGF0ZV9wYWdlKHN0cnVjdCBpb21tdV9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGJhKQoreworCXJlZ3MtPnBhZ2VmbHVzaCA9IChiYSAmIFBBR0VfTUFTSyk7Cit9CisKKyNlbmRpZiAvKiAhKF9TUEFSQ19JT01NVV9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvaXBjLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9pcGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDZlM2Q5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvaXBjLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2lwYy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvaXBjYnVmLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9pcGNidWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmVmMDJkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvaXBjYnVmLmgKQEAgLTAsMCArMSwzMSBAQAorI2lmbmRlZiBfU1BBUkNfSVBDQlVGX0gKKyNkZWZpbmUgX1NQQVJDX0lQQ0JVRl9ICisKKy8qIAorICogVGhlIGlwYzY0X3Blcm0gc3RydWN0dXJlIGZvciBzcGFyYyBhcmNoaXRlY3R1cmUuCisgKiBOb3RlIGV4dHJhIHBhZGRpbmcgYmVjYXVzZSB0aGlzIHN0cnVjdHVyZSBpcyBwYXNzZWQgYmFjayBhbmQgZm9ydGgKKyAqIGJldHdlZW4ga2VybmVsIGFuZCB1c2VyIHNwYWNlLgorICoKKyAqIFBhZCBzcGFjZSBpcyBsZWZ0IGZvcjoKKyAqIC0gMzItYml0IG1vZGUKKyAqIC0gMzItYml0IHNlcQorICogLSAyIG1pc2NlbGxhbmVvdXMgNjQtYml0IHZhbHVlcyAoc28gdGhhdCB0aGlzIHN0cnVjdHVyZSBtYXRjaGVzCisgKgkJCQkgICAgc3BhcmM2NCBpcGM2NF9wZXJtKQorICovCisKK3N0cnVjdCBpcGM2NF9wZXJtCit7CisJX19rZXJuZWxfa2V5X3QJCWtleTsKKwlfX2tlcm5lbF91aWQzMl90CXVpZDsKKwlfX2tlcm5lbF9naWQzMl90CWdpZDsKKwlfX2tlcm5lbF91aWQzMl90CWN1aWQ7CisJX19rZXJuZWxfZ2lkMzJfdAljZ2lkOworCXVuc2lnbmVkIHNob3J0CQlfX3BhZDE7CisJX19rZXJuZWxfbW9kZV90CQltb2RlOworCXVuc2lnbmVkIHNob3J0CQlfX3BhZDI7CisJdW5zaWduZWQgc2hvcnQJCXNlcTsKKwl1bnNpZ25lZCBsb25nIGxvbmcJX191bnVzZWQxOworCXVuc2lnbmVkIGxvbmcgbG9uZwlfX3VudXNlZDI7Cit9OworCisjZW5kaWYgLyogX1NQQVJDX0lQQ0JVRl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9pcnEuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL2lycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlZTM1NmIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9pcnEuaApAQCAtMCwwICsxLDE5MSBAQAorLyogJElkOiBpcnEuaCx2IDEuMzIgMjAwMC8wOC8yNiAwMjo0MjoyOCBhbnRvbiBFeHAgJAorICogaXJxLmg6IElSUSByZWdpc3RlcnMgb24gdGhlIFNwYXJjLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NSBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCisgKi8KKworI2lmbmRlZiBfU1BBUkNfSVJRX0gKKyNkZWZpbmUgX1NQQVJDX0lSUV9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPiAgICAgLyogRm9yIE5SX0NQVVMgKi8KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKworI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4gICAgIC8qIEZvciBTVU40TV9OQ1BVUyAqLworI2luY2x1ZGUgPGFzbS9idGZpeHVwLmg+CisKKyNkZWZpbmUgX19pcnFfaW5vKGlycSkgaXJxCisjZGVmaW5lIF9faXJxX3BpbChpcnEpIGlycQorQlRGSVhVUERFRl9DQUxMKGNoYXIgKiwgX19pcnFfaXRvYSwgdW5zaWduZWQgaW50KQorI2RlZmluZSBfX2lycV9pdG9hKGlycSkgQlRGSVhVUF9DQUxMKF9faXJxX2l0b2EpKGlycSkKKworI2RlZmluZSBOUl9JUlFTICAgIDE2CisKKyNkZWZpbmUgaXJxX2Nhbm9uaWNhbGl6ZShpcnEpCShpcnEpCisKKy8qIERhdmUgUmVkbWFuIChkamhyQHRhZHBvbGUuY28udWspCisgKiBjaGFuZ2VkIHRoZXNlIHRvIGZ1bmN0aW9uIHBvaW50ZXJzLi4gaXQgc2F2ZXMgY3ljbGVzIGFuZCB3aWxsIGFsbG93CisgKiB0aGUgaXJxIGRlcGVuZGVuY2llcyB0byBiZSBzcGxpdCBpbnRvIGRpZmZlcmVudCBmaWxlcyBhdCBhIGxhdGVyIGRhdGUKKyAqIHN1bjRjX2lycS5jLCBzdW40bV9pcnEuYyBldGMgc28gd2UgY291bGQgcmVkdWNlIHRoZSBrZXJuZWwgc2l6ZS4KKyAqIEpha3ViIEplbGluZWsgKGpqQHN1bnNpdGUubWZmLmN1bmkuY3opCisgKiBDaGFuZ2VkIHRoZXNlIHRvIGJ0Zml4dXAgZW50aXRpZXMuLi4gSXQgc2F2ZXMgY3ljbGVzIDopCisgKi8KK0JURklYVVBERUZfQ0FMTCh2b2lkLCBkaXNhYmxlX2lycSwgdW5zaWduZWQgaW50KQorQlRGSVhVUERFRl9DQUxMKHZvaWQsIGVuYWJsZV9pcnEsIHVuc2lnbmVkIGludCkKK0JURklYVVBERUZfQ0FMTCh2b2lkLCBkaXNhYmxlX3BpbF9pcnEsIHVuc2lnbmVkIGludCkKK0JURklYVVBERUZfQ0FMTCh2b2lkLCBlbmFibGVfcGlsX2lycSwgdW5zaWduZWQgaW50KQorQlRGSVhVUERFRl9DQUxMKHZvaWQsIGNsZWFyX2Nsb2NrX2lycSwgdm9pZCkKK0JURklYVVBERUZfQ0FMTCh2b2lkLCBjbGVhcl9wcm9maWxlX2lycSwgaW50KQorQlRGSVhVUERFRl9DQUxMKHZvaWQsIGxvYWRfcHJvZmlsZV9pcnEsIGludCwgdW5zaWduZWQgaW50KQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGlzYWJsZV9pcnFfbm9zeW5jKHVuc2lnbmVkIGludCBpcnEpCit7CisJQlRGSVhVUF9DQUxMKGRpc2FibGVfaXJxKShpcnEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGlzYWJsZV9pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlCVEZJWFVQX0NBTEwoZGlzYWJsZV9pcnEpKGlycSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBlbmFibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJQlRGSVhVUF9DQUxMKGVuYWJsZV9pcnEpKGlycSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkaXNhYmxlX3BpbF9pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlCVEZJWFVQX0NBTEwoZGlzYWJsZV9waWxfaXJxKShpcnEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZW5hYmxlX3BpbF9pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlCVEZJWFVQX0NBTEwoZW5hYmxlX3BpbF9pcnEpKGlycSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9jbG9ja19pcnEodm9pZCkKK3sKKwlCVEZJWFVQX0NBTEwoY2xlYXJfY2xvY2tfaXJxKSgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfcHJvZmlsZV9pcnEoaW50IGlycSkKK3sKKwlCVEZJWFVQX0NBTEwoY2xlYXJfcHJvZmlsZV9pcnEpKGlycSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2FkX3Byb2ZpbGVfaXJxKGludCBjcHUsIGludCBsaW1pdCkKK3sKKwlCVEZJWFVQX0NBTEwobG9hZF9wcm9maWxlX2lycSkoY3B1LCBsaW1pdCk7Cit9CisKK2V4dGVybiB2b2lkICgqc3BhcmNfaW5pdF90aW1lcnMpKGlycXJldHVybl90ICgqbHZsMTBfaXJxKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKikpOworZXh0ZXJuIHZvaWQgY2xhaW1fdGlja2VyMTQoaXJxcmV0dXJuX3QgKCppcnFfaGFuZGxlcikoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopLAorCQkJICAgaW50IGlycSwKKwkJCSAgIHVuc2lnbmVkIGludCB0aW1lb3V0KTsKKworI2lmZGVmIENPTkZJR19TTVAKK0JURklYVVBERUZfQ0FMTCh2b2lkLCBzZXRfY3B1X2ludCwgaW50LCBpbnQpCitCVEZJWFVQREVGX0NBTEwodm9pZCwgY2xlYXJfY3B1X2ludCwgaW50LCBpbnQpCitCVEZJWFVQREVGX0NBTEwodm9pZCwgc2V0X2lycV91ZHQsIGludCkKKworI2RlZmluZSBzZXRfY3B1X2ludChjcHUsbGV2ZWwpIEJURklYVVBfQ0FMTChzZXRfY3B1X2ludCkoY3B1LGxldmVsKQorI2RlZmluZSBjbGVhcl9jcHVfaW50KGNwdSxsZXZlbCkgQlRGSVhVUF9DQUxMKGNsZWFyX2NwdV9pbnQpKGNwdSxsZXZlbCkKKyNkZWZpbmUgc2V0X2lycV91ZHQoY3B1KSBCVEZJWFVQX0NBTEwoc2V0X2lycV91ZHQpKGNwdSkKKyNlbmRpZgorCitleHRlcm4gaW50IHJlcXVlc3RfZmFzdF9pcnEodW5zaWduZWQgaW50IGlycSwgaXJxcmV0dXJuX3QgKCpoYW5kbGVyKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKiksIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIF9fY29uc3RfXyBjaGFyICpkZXZuYW1lKTsKKworLyogT24gdGhlIHN1bjRtLCBqdXN0IGxpa2UgdGhlIHRpbWVycywgd2UgaGF2ZSBib3RoIHBlci1jcHUgYW5kIG1hc3RlcgorICogaW50ZXJydXB0IHJlZ2lzdGVycy4KKyAqLworCisvKiBUaGVzZSByZWdpc3RlcnMgYXJlIHVzZWQgZm9yIHNlbmRpbmcvcmVjZWl2aW5nIGlycXMgZnJvbS90bworICogZGlmZmVyZW50IGNwdSdzLgorICovCitzdHJ1Y3Qgc3VuNG1faW50cmVnX3BlcmNwdSB7CisJdW5zaWduZWQgaW50IHRidDsgICAgICAgIC8qIEludGVycnVwdHMgc3RpbGwgcGVuZGluZyBmb3IgdGhpcyBjcHUuICovCisKKwkvKiBUaGVzZSBuZXh0IHR3byByZWdpc3RlcnMgYXJlIFdSSVRFLU9OTFkgYW5kIGFyZSBvbmx5CisJICogIm9uIGJpdCIgc2Vuc2l0aXZlLCAib2ZmIGJpdHMiIHdyaXR0ZW4gaGF2ZSBOTyBhZmZlY3QuCisJICovCisJdW5zaWduZWQgaW50IGNsZWFyOyAgLyogQ2xlYXIgdGhpcyBjcHVzIGlycXMgaGVyZS4gKi8KKwl1bnNpZ25lZCBpbnQgc2V0OyAgICAvKiBTZXQgdGhpcyBjcHVzIGlycXMgaGVyZS4gKi8KKwl1bnNpZ25lZCBjaGFyIHNwYWNlW1BBR0VfU0laRSAtIDEyXTsKK307CisKKy8qCisgKiBkamhyCisgKiBBY3R1YWxseSB0aGUgY2xlYXIgYW5kIHNldCBmaWVsZHMgaW4gdGhpcyBzdHJ1Y3QgYXJlIG1pc2xlYWRpbmcuLgorICogYWNjb3JkaW5nIHRvIHRoZSBTTEFWSU8gbWFudWFsIChhbmQgdGhlIHNhbWUgYXBwbGllcyBmb3IgdGhlIFNFQykKKyAqIHRoZSBjbGVhciBmaWVsZCBjbGVhcnMgYml0cyBpbiB0aGUgbWFzayB3aGljaCB3aWxsIEVOQUJMRSB0aGF0IElSUQorICogdGhlIHNldCBmaWVsZCBzZXRzIGJpdHMgaW4gdGhlIG1hc2sgdG8gRElTQUJMRSB0aGUgSVJRLgorICoKKyAqIEFsc28gdGhlIHVuZGlyZWN0ZWRfeHggYWRkcmVzcyBpbiB0aGUgU0xBVklPIGlzIGRlZmluZWQgYXMKKyAqIFJFU0VSVkVEIGFuZCB3cml0ZSBvbmx5Li4KKyAqCisgKiBEQVZFTV9OT1RFOiBUaGUgU0xBVklPIG9ubHkgc3BlY2lmaWVzIGJlaGF2aW9yIG9uIHVuaXByb2Nlc3NvcgorICogICAgICAgICAgICAgc3VuNG0gbWFjaGluZXMsIGZvciBNUCB0aGUgbGF5b3V0IG1ha2VzIG1vcmUgc2Vuc2UuCisgKi8KK3N0cnVjdCBzdW40bV9pbnRyZWdzIHsKKwlzdHJ1Y3Qgc3VuNG1faW50cmVnX3BlcmNwdSBjcHVfaW50cmVnc1tTVU40TV9OQ1BVU107CisJdW5zaWduZWQgaW50IHRidDsgICAgICAgICAgICAgICAgLyogSVJRJ3MgdGhhdCBhcmUgc3RpbGwgcGVuZGluZy4gKi8KKwl1bnNpZ25lZCBpbnQgaXJxczsgICAgICAgICAgICAgICAvKiBNYXN0ZXIgSVJRIGJpdHMuICovCisKKwkvKiBBZ2FpbiwgbGlrZSB0aGUgYWJvdmUsIHR3byB0aGVzZSByZWdpc3RlcnMgYXJlIFdSSVRFLU9OTFkuICovCisJdW5zaWduZWQgaW50IGNsZWFyOyAgICAgICAgICAgICAgLyogQ2xlYXIgbWFzdGVyIElSUSdzIGJ5IHNldHRpbmcgYml0cyBoZXJlLiAqLworCXVuc2lnbmVkIGludCBzZXQ7ICAgICAgICAgICAgICAgIC8qIFNldCBtYXN0ZXIgSVJRJ3MgYnkgc2V0dGluZyBiaXRzIGhlcmUuICovCisKKwkvKiBUaGlzIHJlZ2lzdGVyIGlzIGJvdGggUkVBRCBhbmQgV1JJVEUuICovCisJdW5zaWduZWQgaW50IHVuZGlyZWN0ZWRfdGFyZ2V0OyAgLyogV2hpY2ggY3B1IGdldHMgdW5kaXJlY3RlZCBpcnFzLiAqLworfTsKKworZXh0ZXJuIHN0cnVjdCBzdW40bV9pbnRyZWdzICpzdW40bV9pbnRlcnJ1cHRzOworCisvKiAKKyAqIEJpdCBmaWVsZCBkZWZpbmVzIGZvciB0aGUgaW50ZXJydXB0IHJlZ2lzdGVycyBvbiB2YXJpb3VzCisgKiBTcGFyYyBtYWNoaW5lcy4KKyAqLworCisvKiBUaGUgc3VuNGMgaW50ZXJydXB0IHJlZ2lzdGVyLiAqLworI2RlZmluZSBTVU40Q19JTlRfRU5BQkxFICAweDAxICAgICAvKiBBbGxvdyBpbnRlcnJ1cHRzLiAqLworI2RlZmluZSBTVU40Q19JTlRfRTE0ICAgICAweDgwICAgICAvKiBFbmFibGUgbGV2ZWwgMTQgSVJRLiAqLworI2RlZmluZSBTVU40Q19JTlRfRTEwICAgICAweDIwICAgICAvKiBFbmFibGUgbGV2ZWwgMTAgSVJRLiAqLworI2RlZmluZSBTVU40Q19JTlRfRTggICAgICAweDEwICAgICAvKiBFbmFibGUgbGV2ZWwgOCBJUlEuICovCisjZGVmaW5lIFNVTjRDX0lOVF9FNiAgICAgIDB4MDggICAgIC8qIEVuYWJsZSBsZXZlbCA2IElSUS4gKi8KKyNkZWZpbmUgU1VONENfSU5UX0U0ICAgICAgMHgwNCAgICAgLyogRW5hYmxlIGxldmVsIDQgSVJRLiAqLworI2RlZmluZSBTVU40Q19JTlRfRTEgICAgICAweDAyICAgICAvKiBFbmFibGUgbGV2ZWwgMSBJUlEuICovCisKKy8qIERhdmUgUmVkbWFuIChkamhyQHRhZHBvbGUuY28udWspCisgKiBUaGUgc3VuNG0gaW50ZXJydXB0IHJlZ2lzdGVycy4KKyAqLworI2RlZmluZSBTVU40TV9JTlRfRU5BQkxFICAJMHg4MDAwMDAwMAorI2RlZmluZSBTVU40TV9JTlRfRTE0ICAgICAJMHgwMDAwMDA4MAorI2RlZmluZSBTVU40TV9JTlRfRTEwICAgICAJMHgwMDA4MDAwMAorCisjZGVmaW5lIFNVTjRNX0hBUkRfSU5UKHgpCSgweDAwMDAwMDAwMSA8PCAoeCkpCisjZGVmaW5lIFNVTjRNX1NPRlRfSU5UKHgpCSgweDAwMDAxMDAwMCA8PCAoeCkpCisKKyNkZWZpbmUJU1VONE1fSU5UX01BU0tBTEwJMHg4MDAwMDAwMAkgIC8qIG1hc2sgYWxsIGludGVycnVwdHMgKi8KKyNkZWZpbmUJU1VONE1fSU5UX01PRFVMRV9FUlIJMHg0MDAwMDAwMAkgIC8qIG1vZHVsZSBlcnJvciAqLworI2RlZmluZQlTVU40TV9JTlRfTTJTX1dSSVRFCTB4MjAwMDAwMDAJICAvKiB3cml0ZSBidWZmZXIgZXJyb3IgKi8KKyNkZWZpbmUJU1VONE1fSU5UX0VDQwkJMHgxMDAwMDAwMAkgIC8qIGVjYyBtZW1vcnkgZXJyb3IgKi8KKyNkZWZpbmUJU1VONE1fSU5UX0ZMT1BQWQkweDAwNDAwMDAwCSAgLyogZmxvcHB5IGRpc2sgKi8KKyNkZWZpbmUJU1VONE1fSU5UX01PRFVMRQkweDAwMjAwMDAwCSAgLyogbW9kdWxlIGludGVycnVwdCAqLworI2RlZmluZQlTVU40TV9JTlRfVklERU8JCTB4MDAxMDAwMDAJICAvKiBvbmJvYXJkIHZpZGVvICovCisjZGVmaW5lCVNVTjRNX0lOVF9SRUFMVElNRQkweDAwMDgwMDAwCSAgLyogc3lzdGVtIHRpbWVyICovCisjZGVmaW5lCVNVTjRNX0lOVF9TQ1NJCQkweDAwMDQwMDAwCSAgLyogb25ib2FyZCBzY3NpICovCisjZGVmaW5lCVNVTjRNX0lOVF9BVURJTwkJMHgwMDAyMDAwMAkgIC8qIGF1ZGlvL2lzZG4gKi8KKyNkZWZpbmUJU1VONE1fSU5UX0VUSEVSTkVUCTB4MDAwMTAwMDAJICAvKiBvbmJvYXJkIGV0aGVybmV0ICovCisjZGVmaW5lCVNVTjRNX0lOVF9TRVJJQUwJMHgwMDAwODAwMAkgIC8qIHNlcmlhbCBwb3J0cyAqLworI2RlZmluZQlTVU40TV9JTlRfS0JETVMJCTB4MDAwMDQwMDAJICAvKiBrZXlib2FyZC9tb3VzZSAqLworI2RlZmluZQlTVU40TV9JTlRfU0JVU0JJVFMJMHgwMDAwM0Y4MAkgIC8qIHNidXMgaW50IGJpdHMgKi8KKworI2RlZmluZSBTVU40TV9JTlRfU0JVUyh4KQkoMSA8PCAoeCs3KSkKKyNkZWZpbmUgU1VONE1fSU5UX1ZNRSh4KQkoMSA8PCAoeCkpCisKK3N0cnVjdCBpcnFhY3Rpb247CitzdHJ1Y3QgcHRfcmVnczsKK2ludCBoYW5kbGVfSVJRX2V2ZW50KHVuc2lnbmVkIGludCwgc3RydWN0IHB0X3JlZ3MgKiwgc3RydWN0IGlycWFjdGlvbiAqKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9qc2ZsYXNoLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9qc2ZsYXNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ1N2YyOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL2pzZmxhc2guaApAQCAtMCwwICsxLDM5IEBACisvKgorICoganNmbGFzaC5oOiBPUyBGbGFzaCBTSU1NIHN1cHBvcnQgZm9yIEphdmFTdGF0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgIFBldGUgWmFpdGNldgorICovCisKKyNpZm5kZWYgX1NQQVJDX0pTRkxBU0hfSAorI2RlZmluZSBfU1BBUkNfSlNGTEFTSF9ICisKKyNpZm5kZWYgX1NQQVJDX1RZUEVTX0gKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNlbmRpZgorCisvKgorICogU2VtYW50aWNzIG9mIHRoZSBvZmZzZXQgaXMgYSBmdWxsIGFkZHJlc3MuCisgKiBIYXJkY29kZSBpdCBvciBnZXQgaXQgZnJvbSBwcm9iZSBpb2N0bC4KKyAqCisgKiBXZSB1c2UgZnVsbCBidXMgYWRkcmVzcywgc28gdGhhdCB3ZSB3b3VsZCBiZQorICogYXV0b21hdGljYWxseSBjb21wYXRpYmxlIHdpdGggcG9zc2libGUgZnV0dXJlIHN5c3RlbXMuCisgKi8KKworI2RlZmluZSBKU0ZMQVNIX0lERU5UICAgKCgnRic8PDgpfDU0KQorc3RydWN0IGpzZmxhc2hfaWRlbnRfYXJnIHsKKwlfX3U2NCBvZmY7ICAgICAgICAgICAgICAgIC8qIDB4MjAwMDAwMDAgaXMgaW5jbHVkZWQgKi8KKwlfX3UzMiBzaXplOworCWNoYXIgbmFtZVszMl07CQkvKiBXaXRoIHRyYWlsaW5nIHplcm8gKi8KK307CisKKyNkZWZpbmUgSlNGTEFTSF9FUkFTRSAgICgoJ0YnPDw4KXw1NSkKKy8qIFB1dCAwIGFzIGFyZ3VtZW50LCBtYXkgYmUgZmxhZ3Mgb3Igc2VjdG9yIG51bWJlci4uLiAqLworCisjZGVmaW5lIEpTRkxBU0hfUFJPR1JBTSAoKCdGJzw8OCl8NTYpCitzdHJ1Y3QganNmbGFzaF9wcm9ncmFtX2FyZyB7CisJX191NjQgZGF0YTsJCS8qIGNoYXIqIGZvciBzcGFyYyBhbmQgc3BhcmM2NCAqLworCV9fdTY0IG9mZjsKKwlfX3UzMiBzaXplOworfTsKKworI2VuZGlmIC8qIF9TUEFSQ19KU0ZMQVNIX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2tiaW8uaCBiL2luY2x1ZGUvYXNtLXNwYXJjL2tiaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2Y0OTZiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMva2Jpby5oCkBAIC0wLDAgKzEsNTYgQEAKKyNpZm5kZWYgX19MSU5VWF9LQklPX0gKKyNkZWZpbmUgX19MSU5VWF9LQklPX0gKKworLyogUmV0dXJuIGtleWJvYXJkIHR5cGUgKi8KKyNkZWZpbmUgS0lPQ1RZUEUgICAgX0lPUignaycsIDksIGludCkKKy8qIFJldHVybiBLZXlib2FyZCBsYXlvdXQgKi8KKyNkZWZpbmUgS0lPQ0xBWU9VVCAgX0lPUignaycsIDIwLCBpbnQpCisKK2VudW0geworICAgIFRSX05PTkUsCisgICAgVFJfQVNDSUksCQkJLyoga2V5Ym9hcmQgaXMgaW4gcmVndWxhciBzdGF0ZSAqLworICAgIFRSX0VWRU5ULAkJCS8qIGtleXN0cm9rZXMgc2VudCBhcyBmaXJtIGV2ZW50cyAqLworICAgIFRSX1VOVFJBTlNfRVZFTlQJCS8qIEVWRU5UK3VwIGFuZCBkb3duK25vIHRyYW5zbGF0aW9uICovCit9OworCisvKiBSZXR1cm4gdGhlIGN1cnJlbnQga2V5Ym9hcmQgdHJhbnNsYXRpb24gKi8KKyNkZWZpbmUgS0lPQ0dUUkFOUyAgX0lPUignaycsIDUsIGludCkKKy8qIFNldCB0aGUga2V5Ym9hcmQgdHJhbnNsYXRpb24gKi8KKyNkZWZpbmUgS0lPQ1RSQU5TICAgX0lPVygnaycsIDAsIGludCkKKworLyogU2VuZCBhIGtleWJvYXJkIGNvbW1hbmQgKi8KKyNkZWZpbmUgS0lPQ0NNRCAgICAgX0lPVygnaycsIDgsIGludCkKKworLyogUmV0dXJuIGlmIGtleXN0cm9rZXMgYXJlIGJlaW5nIHNlbnQgdG8gL2Rldi9rYmQgKi8KKworLyogU2V0IHJvdXRpbmcgb2Yga2V5c3Ryb2tlcyB0byAvZGV2L2tiZCAqLworI2RlZmluZSBLSU9DU0RJUkVDVCBfSU9XKCdrJywgMTAsIGludCkKKworLyogU2V0IGtleWJvYXJkIGxlZHMgKi8KKyNkZWZpbmUgS0lPQ1NMRUQgICAgX0lPVygnaycsIDE0LCB1bnNpZ25lZCBjaGFyKQorCisvKiBHZXQga2V5Ym9hcmQgbGVkcyAqLworI2RlZmluZSBLSU9DR0xFRCAgICBfSU9SKCdrJywgMTUsIHVuc2lnbmVkIGNoYXIpCisKKy8qIFVzZWQgYnkgS0lPQ1tHU11SQVRFICovCitzdHJ1Y3Qga2JkX3JhdGUgeworCXVuc2lnbmVkIGNoYXIgZGVsYXk7CS8qIERlbGF5IGluIEh6IGJlZm9yZSBmaXJzdCByZXBlYXQuCSovCisJdW5zaWduZWQgY2hhciByYXRlOwkvKiBJbiBjaGFyYWN0ZXJzIHBlciBzZWNvbmQgKDAuLjUwKS4JKi8KK307CisKKy8qIFNldCBrZXlib2FyZCByYXRlICovCisjZGVmaW5lIEtJT0NTUkFURSAgIF9JT1coJ2snLCA0MCwgc3RydWN0IGtiZF9yYXRlKQorCisvKiBHZXQga2V5Ym9hcmQgcmF0ZSAqLworI2RlZmluZSBLSU9DR1JBVEUgICBfSU9XKCdrJywgNDEsIHN0cnVjdCBrYmRfcmF0ZSkKKworLyogVG9wIGJpdCByZWNvcmRzIGlmIHRoZSBrZXkgaXMgdXAgb3IgZG93biAqLworI2RlZmluZSBLQkRfVVAgICAgICAweDgwCisKKy8qIFVzYWJsZSBpbmZvcm1hdGlvbiAqLworI2RlZmluZSBLQkRfS0VZTUFTSyAweDdmCisKKy8qIEFsbCBrZXlzIHVwICovCisjZGVmaW5lIEtCRF9JRExFICAgIDB4NzUKKworI2VuZGlmIC8qIF9fTElOVVhfS0JJT19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9rZGVidWcuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL2tkZWJ1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlYTQ5MTYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9rZGVidWcuaApAQCAtMCwwICsxLDY5IEBACisvKiAkSWQ6IGtkZWJ1Zy5oLHYgMS4xMSAyMDAwLzA2LzA0IDA2OjIzOjUzIGFudG9uIEV4cCAkCisgKiBrZGVidWcuaDogIERlZmluZXMgYW5kIGRlZmluaXRpb25zIGZvciBkZWJ1Z2dpbmcgdGhlIExpbnV4IGtlcm5lbAorICogICAgICAgICAgICB1bmRlciB2YXJpb3VzIGtlcm5lbCBkZWJ1Z2dlcnMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKKyAqLworI2lmbmRlZiBfU1BBUkNfS0RFQlVHX0gKKyNkZWZpbmUgX1NQQVJDX0tERUJVR19ICisKKyNpbmNsdWRlIDxhc20vb3BlbnByb20uaD4KKyNpbmNsdWRlIDxhc20vdmFkZHJzLmg+CisKKy8qIEJyZWFrcG9pbnRzIGFyZSBlbnRlciB0aHJvdWdoIHRyYXAgdGFibGUgZW50cnkgMTI2LiAgU28gaW4gc3BhcmMgYXNzZW1ibHkKKyAqIGlmIHlvdSB3YW50IHRvIGRyb3AgaW50byB0aGUgZGVidWdnZXIgeW91IGRvOgorICoKKyAqIHQgREVCVUdfQlBfVFJBUAorICovCisKKyNkZWZpbmUgREVCVUdfQlBfVFJBUCAgICAgMTI2CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisvKiBUaGUgZGVidWcgdmVjdG9yIGlzIHBhc3NlZCBpbiAlbzEgYXQgYm9vdCB0aW1lLiAgSXQgaXMgYSBwb2ludGVyIHRvCisgKiBhIHN0cnVjdHVyZSBpbiB0aGUgZGVidWdnZXJzIGFkZHJlc3Mgc3BhY2UuICBIZXJlIGlzIGl0cyBmb3JtYXQuCisgKi8KKwordHlwZWRlZiB1bnNpZ25lZCBpbnQgKCpkZWJ1Z2dlcl9mdW5jdCkodm9pZCk7CisKK3N0cnVjdCBrZXJuZWxfZGVidWcgeworCS8qIEZpcnN0IHRoZSBlbnRyeSBwb2ludCBpbnRvIHRoZSBkZWJ1Z2dlci4gIFlvdSBqdW1wIGhlcmUKKwkgKiB0byBnaXZlIGNvbnRyb2wgb3ZlciB0byB0aGUgZGVidWdnZXIuCisJICovCisJdW5zaWduZWQgbG9uZyBrZGVidWdfZW50cnk7CisJdW5zaWduZWQgbG9uZyBrZGVidWdfdHJhcG1lOyAgIC8qIEZpZ3VyZSBvdXQgbGF0ZXIuLi4gKi8KKwkvKiBUaGUgZm9sbG93aW5nIGlzIHRoZSBudW1iZXIgb2YgcGFnZXMgdGhhdCB0aGUgZGVidWdnZXIgaGFzCisJICogdGFrZW4gZnJvbSB0byB0b3RhbCBwb29sLgorCSAqLworCXVuc2lnbmVkIGxvbmcgKmtkZWJ1Z19zdG9sZW5fcGFnZXM7CisJLyogT2ssIGFmdGVyIHlvdSByZW1hcCB5b3Vyc2VsZiBhbmQvb3IgY2hhbmdlIHRoZSB0cmFwIHRhYmxlCisJICogZnJvbSB3aGF0IHlvdSB3ZXJlIGxlZnQgd2l0aCBhdCBib290IHRpbWUgeW91IGhhdmUgdG8gY2FsbAorCSAqIHRoaXMgc3luY2hyb25pemF0aW9uIGZ1bmN0aW9uIHNvIHRoZSBkZWJ1Z2dlciBjYW4gY2hlY2sgb3V0CisJICogd2hhdCB5b3UgaGF2ZSBkb25lLgorCSAqLworCWRlYnVnZ2VyX2Z1bmN0IHRlYWNoX2RlYnVnZ2VyOworfTsgLyogSSB0aGluayB0aGF0IGlzIGl0Li4uICovCisKK2V4dGVybiBzdHJ1Y3Qga2VybmVsX2RlYnVnICpsaW51eF9kYnZlYzsKKworLyogVXNlIHRoaXMgbWFjcm8gaW4gQy1jb2RlIHRvIGVudGVyIHRoZSBkZWJ1Z2dlci4gKi8KK2V4dGVybiBfX2lubGluZV9fIHZvaWQgc3BfZW50ZXJfZGVidWdnZXIodm9pZCkKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygiam1wbCAlMCwgJSVvN1xuXHQiCisJCQkgICAgICJub3Bcblx0IiA6IDoKKwkJCSAgICAgInIiIChsaW51eF9kYnZlYykgOiAibzciLCAibWVtb3J5Iik7Cit9CisKKyNkZWZpbmUgU1BfRU5URVJfREVCVUdHRVIgZG8geyBcCisJICAgICBpZigobGludXhfZGJ2ZWMhPTApICYmICgoKihzaG9ydCAqKWxpbnV4X2RidmVjKSE9LTEpKSBcCisJICAgICAgIHNwX2VudGVyX2RlYnVnZ2VyKCk7IFwKKwkJICAgICAgIH0gd2hpbGUoMCkKKworI2VuZGlmIC8qICEoX19BU1NFTUJMWV9fKSAqLworCisvKiBTb21lIG5pY2Ugb2Zmc2V0IGRlZmluZXMgZm9yIGFzc2VtYmxlciBjb2RlLiAqLworI2RlZmluZSBLREVCVUdfRU5UUllfT0ZGICAgIDB4MAorI2RlZmluZSBLREVCVUdfRFVOTk9fT0ZGICAgIDB4NAorI2RlZmluZSBLREVCVUdfRFVOTk8yX09GRiAgIDB4OAorI2RlZmluZSBLREVCVUdfVEVBQ0hfT0ZGICAgIDB4YworCisjZW5kaWYgLyogIShfU1BBUkNfS0RFQlVHX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9rZ2RiLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9rZ2RiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDEyMGFkZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL2tnZGIuaApAQCAtMCwwICsxLDk0IEBACisvKiAkSWQ6IGtnZGIuaCx2IDEuOCAxOTk4LzAxLzA3IDA2OjMzOjQ0IGJhY2NhbGEgRXhwICQKKyAqIGtnZGIuaDogRGVmaW5lcyBhbmQgZGVjbGFyYXRpb25zIGZvciBzZXJpYWwgbGluZSBzb3VyY2UgbGV2ZWwKKyAqICAgICAgICAgcmVtb3RlIGRlYnVnZ2luZyBvZiB0aGUgTGludXgga2VybmVsIHVzaW5nIGdkYi4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQorICovCisjaWZuZGVmIF9TUEFSQ19LR0RCX0gKKyNkZWZpbmUgX1NQQVJDX0tHREJfSAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworLyogVG8gaW5pdCB0aGUga2dkYiBlbmdpbmUuICovCitleHRlcm4gdm9pZCBzZXRfZGVidWdfdHJhcHModm9pZCk7CisKKy8qIFRvIGVudGVyIHRoZSBkZWJ1Z2dlciBleHBsaWNpdGx5LiAqLworZXh0ZXJuIHZvaWQgYnJlYWtwb2ludCh2b2lkKTsKKworLyogRm9yIGNvbnZlbmllbmNlIHdlIGRlZmluZSB0aGUgZm9ybWF0IG9mIGEga2dkYiB0cmFwIGJyZWFrcG9pbnQKKyAqIGZyYW1lIGhlcmUgYWxzby4KKyAqLworc3RydWN0IGtnZGJfZnJhbWUgeworCXVuc2lnbmVkIGxvbmcgZ2xvYmFsc1s4XTsKKwl1bnNpZ25lZCBsb25nIG91dHNbOF07CisJdW5zaWduZWQgbG9uZyBsb2NhbHNbOF07CisJdW5zaWduZWQgbG9uZyBpbnNbOF07CisJdW5zaWduZWQgbG9uZyBmcHJlZ3NbMzJdOworCXVuc2lnbmVkIGxvbmcgeTsKKwl1bnNpZ25lZCBsb25nIHBzcjsKKwl1bnNpZ25lZCBsb25nIHdpbTsKKwl1bnNpZ25lZCBsb25nIHRicjsKKwl1bnNpZ25lZCBsb25nIHBjOworCXVuc2lnbmVkIGxvbmcgbnBjOworCXVuc2lnbmVkIGxvbmcgZnBzcjsKKwl1bnNpZ25lZCBsb25nIGNwc3I7Cit9OworI2VuZGlmIC8qICEoX19BU1NFTUJMWV9fKSAqLworCisvKiBNYWNyb3MgZm9yIGFzc2VtYmx5IHVzYWdlIG9mIHRoZSBrZ2RiIGJyZWFrcG9pbnQgZnJhbWUuICovCisjZGVmaW5lIEtHREJfRzAgICAgIDB4MDAwCisjZGVmaW5lIEtHREJfRzEgICAgIDB4MDA0CisjZGVmaW5lIEtHREJfRzIgICAgIDB4MDA4CisjZGVmaW5lIEtHREJfRzQgICAgIDB4MDEwCisjZGVmaW5lIEtHREJfRzYgICAgIDB4MDE4CisjZGVmaW5lIEtHREJfSTAgICAgIDB4MDIwCisjZGVmaW5lIEtHREJfSTIgICAgIDB4MDI4CisjZGVmaW5lIEtHREJfSTQgICAgIDB4MDMwCisjZGVmaW5lIEtHREJfSTYgICAgIDB4MDM4CisjZGVmaW5lIEtHREJfWSAgICAgIDB4MTAwCisjZGVmaW5lIEtHREJfUFNSICAgIDB4MTA0CisjZGVmaW5lIEtHREJfV0lNICAgIDB4MTA4CisjZGVmaW5lIEtHREJfVEJSICAgIDB4MTBjCisjZGVmaW5lIEtHREJfUEMgICAgIDB4MTEwCisjZGVmaW5lIEtHREJfTlBDICAgIDB4MTE0CisKKyNkZWZpbmUgU0FWRV9LR0RCX0dMT0JBTFMocmVnKSBcCisgICAgICAgIHN0ZCAgICAgJWcwLCBbJXJlZyArIFNUQUNLRlJBTUVfU1ogKyBLR0RCX0cwXTsgXAorICAgICAgICBzdGQgICAgICVnMiwgWyVyZWcgKyBTVEFDS0ZSQU1FX1NaICsgS0dEQl9HMl07IFwKKyAgICAgICAgc3RkICAgICAlZzQsIFslcmVnICsgU1RBQ0tGUkFNRV9TWiArIEtHREJfRzRdOyBcCisgICAgICAgIHN0ZCAgICAgJWc2LCBbJXJlZyArIFNUQUNLRlJBTUVfU1ogKyBLR0RCX0c2XTsKKworI2RlZmluZSBTQVZFX0tHREJfSU5TKHJlZykgXAorICAgICAgICBzdGQgICAgICVpMCwgWyVyZWcgKyBTVEFDS0ZSQU1FX1NaICsgS0dEQl9JMF07IFwKKyAgICAgICAgc3RkICAgICAlaTIsIFslcmVnICsgU1RBQ0tGUkFNRV9TWiArIEtHREJfSTJdOyBcCisgICAgICAgIHN0ZCAgICAgJWk0LCBbJXJlZyArIFNUQUNLRlJBTUVfU1ogKyBLR0RCX0k0XTsgXAorICAgICAgICBzdGQgICAgICVpNiwgWyVyZWcgKyBTVEFDS0ZSQU1FX1NaICsgS0dEQl9JNl07CisKKyNkZWZpbmUgU0FWRV9LR0RCX1NSRUdTKHJlZywgcmVnX3ksIHJlZ19wc3IsIHJlZ193aW0sIHJlZ190YnIsIHJlZ19wYywgcmVnX25wYykgXAorICAgICAgICBzdCAgICAgICVyZWdfeSwgWyVyZWcgKyBTVEFDS0ZSQU1FX1NaICsgS0dEQl9ZXTsgXAorICAgICAgICBzdCAgICAgICVyZWdfcHNyLCBbJXJlZyArIFNUQUNLRlJBTUVfU1ogKyBLR0RCX1BTUl07IFwKKyAgICAgICAgc3QgICAgICAlcmVnX3dpbSwgWyVyZWcgKyBTVEFDS0ZSQU1FX1NaICsgS0dEQl9XSU1dOyBcCisgICAgICAgIHN0ICAgICAgJXJlZ190YnIsIFslcmVnICsgU1RBQ0tGUkFNRV9TWiArIEtHREJfVEJSXTsgXAorICAgICAgICBzdCAgICAgICVyZWdfcGMsIFslcmVnICsgU1RBQ0tGUkFNRV9TWiArIEtHREJfUENdOyBcCisgICAgICAgIHN0ICAgICAgJXJlZ19ucGMsIFslcmVnICsgU1RBQ0tGUkFNRV9TWiArIEtHREJfTlBDXTsKKworI2RlZmluZSBMT0FEX0tHREJfR0xPQkFMUyhyZWcpIFwKKyAgICAgICAgbGQgICAgICBbJXJlZyArIFNUQUNLRlJBTUVfU1ogKyBLR0RCX0cxXSwgJWcxOyBcCisgICAgICAgIGxkZCAgICAgWyVyZWcgKyBTVEFDS0ZSQU1FX1NaICsgS0dEQl9HMl0sICVnMjsgXAorICAgICAgICBsZGQgICAgIFslcmVnICsgU1RBQ0tGUkFNRV9TWiArIEtHREJfRzRdLCAlZzQ7IFwKKyAgICAgICAgbGRkICAgICBbJXJlZyArIFNUQUNLRlJBTUVfU1ogKyBLR0RCX0c2XSwgJWc2OworCisjZGVmaW5lIExPQURfS0dEQl9JTlMocmVnKSBcCisgICAgICAgIGxkZCAgICAgWyVyZWcgKyBTVEFDS0ZSQU1FX1NaICsgS0dEQl9JMF0sICVpMDsgXAorICAgICAgICBsZGQgICAgIFslcmVnICsgU1RBQ0tGUkFNRV9TWiArIEtHREJfSTJdLCAlaTI7IFwKKyAgICAgICAgbGRkICAgICBbJXJlZyArIFNUQUNLRlJBTUVfU1ogKyBLR0RCX0k0XSwgJWk0OyBcCisgICAgICAgIGxkZCAgICAgWyVyZWcgKyBTVEFDS0ZSQU1FX1NaICsgS0dEQl9JNl0sICVpNjsKKworI2RlZmluZSBMT0FEX0tHREJfU1JFR1MocmVnLCByZWdfeSwgcmVnX3BzciwgcmVnX3dpbSwgcmVnX3RiciwgcmVnX3BjLCByZWdfbnBjKSBcCisJbGQJWyVyZWcgKyBTVEFDS0ZSQU1FX1NaICsgS0dEQl9ZXSwgJXJlZ195OyBcCisJbGQJWyVyZWcgKyBTVEFDS0ZSQU1FX1NaICsgS0dEQl9QU1JdLCAlcmVnX3BzcjsgXAorCWxkCVslcmVnICsgU1RBQ0tGUkFNRV9TWiArIEtHREJfV0lNXSwgJXJlZ193aW07IFwKKwlsZAlbJXJlZyArIFNUQUNLRlJBTUVfU1ogKyBLR0RCX1RCUl0sICVyZWdfdGJyOyBcCisJbGQJWyVyZWcgKyBTVEFDS0ZSQU1FX1NaICsgS0dEQl9QQ10sICVyZWdfcGM7IFwKKwlsZAlbJXJlZyArIFNUQUNLRlJBTUVfU1ogKyBLR0RCX05QQ10sICVyZWdfbnBjOworCisjZW5kaWYgLyogIShfU1BBUkNfS0dEQl9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMva21hcF90eXBlcy5oIGIvaW5jbHVkZS9hc20tc3BhcmMva21hcF90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyMTVmNzEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9rbWFwX3R5cGVzLmgKQEAgLTAsMCArMSwyMSBAQAorI2lmbmRlZiBfQVNNX0tNQVBfVFlQRVNfSAorI2RlZmluZSBfQVNNX0tNQVBfVFlQRVNfSAorCitlbnVtIGttX3R5cGUgeworCUtNX0JPVU5DRV9SRUFELAorCUtNX1NLQl9TVU5SUENfREFUQSwKKwlLTV9TS0JfREFUQV9TT0ZUSVJRLAorCUtNX1VTRVIwLAorCUtNX1VTRVIxLAorCUtNX0JJT19TUkNfSVJRLAorCUtNX0JJT19EU1RfSVJRLAorCUtNX1BURTAsCisJS01fUFRFMSwKKwlLTV9JUlEwLAorCUtNX0lSUTEsCisJS01fU09GVElSUTAsCisJS01fU09GVElSUTEsCisJS01fVFlQRV9OUgorfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9saW5rYWdlLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9saW5rYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkxYzJkMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL2xpbmthZ2UuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19BU01fTElOS0FHRV9ICisjZGVmaW5lIF9fQVNNX0xJTktBR0VfSAorCisvKiBOb3RoaW5nIHRvIHNlZSBoZXJlLi4uICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvbG9jYWwuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL2xvY2FsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM4MDgxNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL2xvY2FsLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9TUEFSQ19MT0NBTF9ICisjZGVmaW5lIF9TUEFSQ19MT0NBTF9ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9sb2NhbC5oPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL21hY2hpbmVzLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9tYWNoaW5lcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4MzEzNTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9tYWNoaW5lcy5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qICRJZDogbWFjaGluZXMuaCx2IDEuNCAxOTk1LzExLzI1IDAyOjMxOjU4IGRhdmVtIEV4cCAkCisgKiBtYWNoaW5lcy5oOiAgRGVmaW5lcyBmb3IgdGFraW5nIGFwYXJ0IHRoZSBtYWNoaW5lIHR5cGUgdmFsdWUgaW4gdGhlCisgKiAgICAgICAgICAgICAgaWRwcm9tIGFuZCBkZXRlcm1pbmluZyB0aGUga2luZCBvZiBtYWNoaW5lIHdlIGFyZSBvbi4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQorICovCisjaWZuZGVmIF9TUEFSQ19NQUNISU5FU19ICisjZGVmaW5lIF9TUEFSQ19NQUNISU5FU19ICisKK3N0cnVjdCBTdW5fTWFjaGluZV9Nb2RlbHMgeworCWNoYXIgKm5hbWU7CisJdW5zaWduZWQgY2hhciBpZF9tYWNodHlwZTsKK307CisKKy8qIEN1cnJlbnQgbnVtYmVyIG9mIG1hY2hpbmVzIHdlIGtub3cgYWJvdXQgdGhhdCBoYXMgYW4gSURQUk9NCisgKiBtYWNodHlwZSBlbnRyeSBpbmNsdWRpbmcgb25lIGVudHJ5IGZvciB0aGUgMHg4MCBPQlAgbWFjaGluZXMuCisgKi8KKyNkZWZpbmUgTlVNX1NVTl9NQUNISU5FUyAgIDE1CisKK2V4dGVybiBzdHJ1Y3QgU3VuX01hY2hpbmVfTW9kZWxzIFN1bl9NYWNoaW5lc1tOVU1fU1VOX01BQ0hJTkVTXTsKKworLyogVGhlIG1hY2hpbmUgdHlwZSBpbiB0aGUgaWRwcm9tIGFyZWEgbG9va3MgbGlrZSB0aGlzOgorICoKKyAqIC0tLS0tLS0tLS0tLS0tLQorICogfCBBUkNIIHwgTUFDSCB8CisgKiAtLS0tLS0tLS0tLS0tLS0KKyAqICA3ICAgIDQgMyAgICAwCisgKgorICogVGhlIEFSQ0ggZmllbGQgZGV0ZXJtaW5lcyB0aGUgYXJjaGl0ZWN0dXJlIGxpbmUgKHN1bjQsIHN1bjRjLCBldGMpLgorICogVGhlIE1BQ0ggZmllbGQgZGV0ZXJtaW5lcyB0aGUgbWFjaGluZSBtYWtlIHdpdGhpbiB0aGF0IGFyY2hpdGVjdHVyZS4KKyAqLworCisjZGVmaW5lIFNNX0FSQ0hfTUFTSyAgMHhmMAorI2RlZmluZSBTTV9TVU40ICAgICAgIDB4MjAKKyNkZWZpbmUgU01fU1VONEMgICAgICAweDUwCisjZGVmaW5lIFNNX1NVTjRNICAgICAgMHg3MAorI2RlZmluZSBTTV9TVU40TV9PQlAgIDB4ODAKKworI2RlZmluZSBTTV9UWVBfTUFTSyAgIDB4MGYKKy8qIFN1bjQgbWFjaGluZXMgKi8KKyNkZWZpbmUgU01fNF8yNjAgICAgICAweDAxICAgIC8qIFN1biA0LzIwMCBzZXJpZXMgKi8KKyNkZWZpbmUgU01fNF8xMTAgICAgICAweDAyICAgIC8qIFN1biA0LzEwMCBzZXJpZXMgKi8KKyNkZWZpbmUgU01fNF8zMzAgICAgICAweDAzICAgIC8qIFN1biA0LzMwMCBzZXJpZXMgKi8KKyNkZWZpbmUgU01fNF80NzAgICAgICAweDA0ICAgIC8qIFN1biA0LzQwMCBzZXJpZXMgKi8KKworLyogU3VuNGMgbWFjaGluZXMgICAgICAgICAgICAgICAgRnVsbCBOYW1lICAgICAgICAgICAgICAtIFBST00gTkFNRSAqLworI2RlZmluZSBTTV80Q19TUzEgICAgIDB4MDEgICAgLyogU3VuNGMgU3BhcmNTdGF0aW9uIDEgICAtIFN1biA0LzYwICAqLworI2RlZmluZSBTTV80Q19JUEMgICAgIDB4MDIgICAgLyogU3VuNGMgU3BhcmNTdGF0aW9uIElQQyAtIFN1biA0LzQwICAqLworI2RlZmluZSBTTV80Q19TUzFQTFVTIDB4MDMgICAgLyogU3VuNGMgU3BhcmNTdGF0aW9uIDErICAtIFN1biA0LzY1ICAqLworI2RlZmluZSBTTV80Q19TTEMgICAgIDB4MDQgICAgLyogU3VuNGMgU3BhcmNTdGF0aW9uIFNMQyAtIFN1biA0LzIwICAqLworI2RlZmluZSBTTV80Q19TUzIgICAgIDB4MDUgICAgLyogU3VuNGMgU3BhcmNTdGF0aW9uIDIgICAtIFN1biA0Lzc1ICAqLworI2RlZmluZSBTTV80Q19FTEMgICAgIDB4MDYgICAgLyogU3VuNGMgU3BhcmNTdGF0aW9uIEVMQyAtIFN1biA0LzI1ICAqLworI2RlZmluZSBTTV80Q19JUFggICAgIDB4MDcgICAgLyogU3VuNGMgU3BhcmNTdGF0aW9uIElQWCAtIFN1biA0LzUwICAqLworCisvKiBTdW40bSBtYWNoaW5lcywgdGhlc2UgcHJlZGF0ZSB0aGUgT3BlbkJvb3QuICBUaGVzZSB2YWx1ZXMgb25seSBtZWFuCisgKiBzb21ldGhpbmcgaWYgdGhlIHZhbHVlIGluIHRoZSBBUkNIIGZpZWxkIGlzIFNNX1NVTjRNLCBpZiBpdCBpcworICogU01fU1VONE1fT0JQIHRoZW4geW91IGhhdmUgdGhlIGZvbGxvd2luZyBzaXR1YXRpb246CisgKiAxKSBZb3UgZWl0aGVyIGhhdmUgYSBzdW40ZCwgYSBzdW40ZSwgb3IgYSByZWNlbnRseSBtYWRlIHN1bjRtLgorICogMikgWW91IGhhdmUgdG8gY29uc3VsdCBPcGVuQm9vdCB0byBkZXRlcm1pbmUgd2hpY2ggbWFjaGluZSB0aGlzIGlzLgorICovCisjZGVmaW5lIFNNXzRNX1NTNjAgICAgMHgwMSAgICAvKiBTdW40bSBTcGFyY1N5c3RlbSA2MDAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTTV80TV9TUzUwICAgIDB4MDIgICAgLyogU3VuNG0gU3BhcmNTdGF0aW9uIDEwICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU01fNE1fU1M0MCAgICAweDAzICAgIC8qIFN1bjRtIFNwYXJjU3RhdGlvbiA1ICAgICAgICAgICAgICAgICAgICovCisKKy8qIFN1bjRkIG1hY2hpbmVzIC0tIE4vQSAqLworLyogU3VuNGUgbWFjaGluZXMgLS0gTi9BICovCisvKiBTdW40dSBtYWNoaW5lcyAtLSBOL0EgKi8KKworI2VuZGlmIC8qICEoX1NQQVJDX01BQ0hJTkVTX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9tYnVzLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9tYnVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWYyNzQ5MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL21idXMuaApAQCAtMCwwICsxLDEwMiBAQAorLyogJElkOiBtYnVzLmgsdiAxLjkgMTk5Ny8wNi8yNCAxNTo0ODoxMiBqaiBFeHAgJAorICogbWJ1cy5oOiAgVmFyaW91cyBkZWZpbmVzIGZvciBNQlVTIG1vZHVsZXMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKKyAqLworCisjaWZuZGVmIF9TUEFSQ19NQlVTX0gKKyNkZWZpbmUgX1NQQVJDX01CVVNfSAorCisjaW5jbHVkZSA8YXNtL3Jvc3MuaD4gICAgLyogSHlwZXJTcGFyYyBzdHVmZiAqLworI2luY2x1ZGUgPGFzbS9jeXByZXNzLmg+IC8qIEN5cHJlc3MgQ2hpcHMgKi8KKyNpbmNsdWRlIDxhc20vdmlraW5nLmg+ICAvKiBVZ2gsIGJ1ZyBjaXR5Li4uICovCisKK2VudW0gbWJ1c19tb2R1bGUgeworCUh5cGVyU3BhcmMgICAgICAgID0gMCwKKwlDeXByZXNzICAgICAgICAgICA9IDEsCisJQ3lwcmVzc192RSAgICAgICAgPSAyLAorCUN5cHJlc3NfdkQgICAgICAgID0gMywKKwlTd2lmdF9vayAgICAgICAgICA9IDQsCisJU3dpZnRfYmFkX2MgICAgICAgPSA1LAorCVN3aWZ0X2xvdHNfb19idWdzID0gNiwKKwlUc3VuYW1pICAgICAgICAgICA9IDcsCisJVmlraW5nXzEyICAgICAgICAgPSA4LAorCVZpa2luZ18yeCAgICAgICAgID0gOSwKKwlWaWtpbmdfMzAgICAgICAgICA9IDEwLAorCVZpa2luZ18zNSAgICAgICAgID0gMTEsCisJVmlraW5nX25ldyAgICAgICAgPSAxMiwKKwlUdXJib1NwYXJjCSAgPSAxMywKKwlTUk1NVV9JTlZBTF9NT0QgICA9IDE0LAorfTsKKworZXh0ZXJuIGVudW0gbWJ1c19tb2R1bGUgc3JtbXVfbW9kdHlwZTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgdmlraW5nX3Jldiwgc3dpZnRfcmV2LCBjeXByZXNzX3JldjsKKworLyogSFcgTWJ1cyBtb2R1bGUgYnVncyB3ZSBoYXZlIHRvIGRlYWwgd2l0aCAqLworI2RlZmluZSBIV0JVR19DT1BZQkFDS19CUk9LRU4gICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSFdCVUdfQVNJRkxVU0hfQlJPS0VOICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEhXQlVHX1ZBQ0ZMVVNIX0JJVFJPVCAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBIV0JVR19LRVJOX0FDQ0JST0tFTiAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgSFdCVUdfS0VSTl9DQklUQlJPS0VOICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEhXQlVHX01PRElGSUVEX0JJVFJPVCAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBIV0JVR19QQ19CQURGQVVMVF9BRERSICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgSFdCVUdfU1VQRVJTQ0FMQVJfQkFEICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEhXQlVHX1BBQ0lOSVRfQklUUk9UICAgICAgICAgMHgwMDAwMDEwMAorCitleHRlcm4gdW5zaWduZWQgaW50IGh3YnVnX2JpdG1hc2s7CisKKy8qIEZpcnN0IHRoZSBtb2R1bGUgdHlwZSB2YWx1ZXMuIFRvIGZpbmQgb3V0IHdoaWNoIHlvdSBoYXZlLCBqdXN0IGxvYWQKKyAqIHRoZSBtbXUgY29udHJvbCByZWdpc3RlciBmcm9tIEFTSV9NX01NVVJFRyBhbHRlcm5hdGUgYWRkcmVzcyBzcGFjZSBhbmQKKyAqIHNoaWZ0IHRoZSB2YWx1ZSByaWdodCAyOCBiaXRzLgorICovCisvKiBJTVBMIGZpZWxkIG1lYW5zIHRoZSBjb21wYW55IHdoaWNoIHByb2R1Y2VkIHRoZSBjaGlwLiAqLworI2RlZmluZSBNQlVTX1ZJS0lORyAgICAgICAgMHg0ICAgLyogYmxlZWNoLCBUZXhhcyBJbnN0cnVtZW50cyBNb2R1bGUgKi8KKyNkZWZpbmUgTUJVU19MU0kgICAgICAgICAgIDB4MyAgIC8qIExTSSBMb2dpY3MgKi8KKyNkZWZpbmUgTUJVU19ST1NTICAgICAgICAgIDB4MSAgIC8qIFJvc3MgaXMgbmljZSAqLworI2RlZmluZSBNQlVTX0ZNSSAgICAgICAgICAgMHgwICAgLyogRnVqaXRzdSBNaWNyb2VsZWN0cm9uaWNzL1N3aWZ0ICovCisKKy8qIFJvc3MgTW9kdWxlIHZlcnNpb25zICovCisjZGVmaW5lIFJPU1NfNjA0X1JFVl9DREUgICAgICAgIDB4MCAgIC8qIHJldmlzaW9ucyBjLCBkLCBhbmQgZSAqLworI2RlZmluZSBST1NTXzYwNF9SRVZfRiAgICAgICAgICAweDEgICAvKiByZXZpc2lvbiBmICovCisjZGVmaW5lIFJPU1NfNjA1ICAgICAgICAgICAgICAgIDB4ZiAgIC8qIHJldmlzaW9uIGEsIGEuMSwgYW5kIGEuMiAqLworI2RlZmluZSBST1NTXzYwNV9SRVZfQiAgICAgICAgICAweGUgICAvKiByZXZpc2lvbiBiICovCisKKy8qIFRJIFZpa2luZyBNb2R1bGUgdmVyc2lvbnMgKi8KKyNkZWZpbmUgVklLSU5HX1JFVl8xMiAgICAgICAgICAgMHgxICAgLyogVmVyc2lvbiAxLjIgb3IgU1BBUkNjbGFzc2ljJ3MgQ1BVICovCisjZGVmaW5lIFZJS0lOR19SRVZfMiAgICAgICAgICAgIDB4MiAgIC8qIFZlcnNpb24gMi4xLCAyLjIsIDIuMywgYW5kIDIuNCAqLworI2RlZmluZSBWSUtJTkdfUkVWXzMwICAgICAgICAgICAweDMgICAvKiBWZXJzaW9uIDMuMCAqLworI2RlZmluZSBWSUtJTkdfUkVWXzM1ICAgICAgICAgICAweDQgICAvKiBWZXJzaW9uIDMuNSAqLworCisvKiBMU0kgTG9naWNzLiAqLworI2RlZmluZSBMU0lfTDY0ODE1CQkweDAKKworLyogRnVqaXRzdSAqLworI2RlZmluZSBGTUlfQVVST1JBCQkweDQgICAvKiBNQjg2OTB4LCBhIFN3aWZ0IG1vZHVsZS4uLiAqLworI2RlZmluZSBGTUlfVFVSQk8JCTB4NSAgIC8qIE1CODY5MDcsIGEgVHVyYm9TcGFyYyBtb2R1bGUuLi4gKi8KKworLyogRm9yIG11bHRpcHJvY2Vzc29yIHN1cHBvcnQgd2UgbmVlZCB0byBiZSBhYmxlIHRvIG9idGFpbiB0aGUgQ1BVIGlkIGFuZAorICogdGhlIE1CVVMgTW9kdWxlIGlkLgorICovCisKKy8qIFRoZSBDUFUgSUQgaXMgZW5jb2RlZCBpbiB0aGUgdHJhcCBiYXNlIHJlZ2lzdGVyLCAyMCBiaXRzIHRvIHRoZSBsZWZ0IG9mCisgKiBiaXQgemVybywgd2l0aCAyIGJpdHMgYmVpbmcgc2lnbmlmaWNhbnQuCisgKi8KKyNkZWZpbmUgVEJSX0lEX1NISUZUICAgICAgICAgICAgMjAKKworZXh0ZXJuIF9faW5saW5lX18gaW50IGdldF9jcHVpZCh2b2lkKQoreworCXJlZ2lzdGVyIGludCByZXR2YWw7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInJkICUldGJyLCAlMFxuXHQiCisJCQkgICAgICJzcmwgJTAsICUxLCAlMFxuXHQiIDoKKwkJCSAgICAgIj1yIiAocmV0dmFsKSA6CisJCQkgICAgICJpIiAoVEJSX0lEX1NISUZUKSk7CisJcmV0dXJuIChyZXR2YWwgJiAzKTsKK30KKworZXh0ZXJuIF9faW5saW5lX18gaW50IGdldF9tb2RpZCh2b2lkKQoreworCXJldHVybiAoZ2V0X2NwdWlkKCkgfCAweDgpOworfQorCisJCisjZW5kaWYgLyogIShfU1BBUkNfTUJVU19IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvbWMxNDY4MThydGMuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL21jMTQ2ODE4cnRjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE3ZWFjOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL21jMTQ2ODE4cnRjLmgKQEAgLTAsMCArMSwyOSBAQAorLyoKKyAqIE1hY2hpbmUgZGVwZW5kZW50IGFjY2VzcyBmdW5jdGlvbnMgZm9yIFJUQyByZWdpc3RlcnMuCisgKi8KKyNpZm5kZWYgX19BU01fU1BBUkNfTUMxNDY4MThSVENfSAorI2RlZmluZSBfX0FTTV9TUEFSQ19NQzE0NjgxOFJUQ19ICisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2lmbmRlZiBSVENfUE9SVAorI2RlZmluZSBSVENfUE9SVCh4KQkoMHg3MCArICh4KSkKKyNkZWZpbmUgUlRDX0FMV0FZU19CQ0QJMQkvKiBSVEMgb3BlcmF0ZXMgaW4gYmluYXJ5IG1vZGUgKi8KKyNlbmRpZgorCisvKgorICogVGhlIHlldCBzdXBwb3J0ZWQgbWFjaGluZXMgYWxsIGFjY2VzcyB0aGUgUlRDIGluZGV4IHJlZ2lzdGVyIHZpYQorICogYW4gSVNBIHBvcnQgYWNjZXNzIGJ1dCB0aGUgd2F5IHRvIGFjY2VzcyB0aGUgZGF0ZSByZWdpc3RlciBkaWZmZXJzIC4uLgorICovCisjZGVmaW5lIENNT1NfUkVBRChhZGRyKSAoeyBcCitvdXRiX3AoKGFkZHIpLFJUQ19QT1JUKDApKTsgXAoraW5iX3AoUlRDX1BPUlQoMSkpOyBcCit9KQorI2RlZmluZSBDTU9TX1dSSVRFKHZhbCwgYWRkcikgKHsgXAorb3V0Yl9wKChhZGRyKSxSVENfUE9SVCgwKSk7IFwKK291dGJfcCgodmFsKSxSVENfUE9SVCgxKSk7IFwKK30pCisKKyNkZWZpbmUgUlRDX0lSUSA4CisKKyNlbmRpZiAvKiBfX0FTTV9TUEFSQ19NQzE0NjgxOFJUQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9tZW1yZWcuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL21lbXJlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwNDk4ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9tZW1yZWcuaApAQCAtMCwwICsxLDUyIEBACisvKiAkSWQ6IG1lbXJlZy5oLHYgMS44IDE5OTYvMDgvMjkgMDk6NDg6MjMgZGF2ZW0gRXhwICQgKi8KKyNpZm5kZWYgX1NQQVJDX01FTVJFR19ICisjZGVmaW5lIF9TUEFSQ19NRU1SRUdfSAorLyogbWVtcmVnLmg6ICBEZWZpbml0aW9ucyBvZiB0aGUgdmFsdWVzIGZvdW5kIGluIHRoZSBzeW5jaHJvbm91cworICogICAgICAgICAgICBhbmQgYXN5bmNocm9ub3VzIG1lbW9yeSBlcnJvciByZWdpc3RlcnMgd2hlbiBhIGZhdWx0CisgKiAgICAgICAgICAgIG9jY3VycyBvbiB0aGUgc3VuNGMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKKyAqLworCisvKiBGaXJzdCB0aGUgc3luY2hyb25vdXMgZXJyb3IgY29kZXMsIHRoZXNlIGFyZSB1c3VhbGx5IGp1c3QKKyAqIG5vcm1hbCBwYWdlIGZhdWx0cy4KKyAqLworCisjZGVmaW5lIFNVTjRDX1NZTkNfV0RSRVNFVCAgIDB4MDAwMSAgLyogd2F0Y2hkb2cgcmVzZXQgKi8KKyNkZWZpbmUgU1VONENfU1lOQ19TSVpFICAgICAgMHgwMDAyICAvKiBiYWQgYWNjZXNzIHNpemU/IHdodXogdGhpcz8gKi8KKyNkZWZpbmUgU1VONENfU1lOQ19QQVJJVFkgICAgMHgwMDA4ICAvKiBiYWQgcmFtIGNoaXBzIGNhdXNlZCBhIHBhcml0eSBlcnJvciAqLworI2RlZmluZSBTVU40Q19TWU5DX1NCVVMgICAgICAweDAwMTAgIC8qIHRoZSBTQlVTIGhhZCBzb21lIHByb2JsZW1zLi4uICovCisjZGVmaW5lIFNVTjRDX1NZTkNfTk9NRU0gICAgIDB4MDAyMCAgLyogdHJhbnNsYXRpb24gdG8gbm9uLWV4aXN0ZW50IHJhbSAqLworI2RlZmluZSBTVU40Q19TWU5DX1BST1QgICAgICAweDAwNDAgIC8qIGFjY2VzcyB2aW9sYXRlZCBwdGUgcHJvdGVjdGlvbnMgKi8KKyNkZWZpbmUgU1VONENfU1lOQ19OUFJFU0VOVCAgMHgwMDgwICAvKiBwdGUgc2FpZCB0aGF0IHBhZ2Ugd2FzIG5vdCBwcmVzZW50ICovCisjZGVmaW5lIFNVTjRDX1NZTkNfQkFEV1JJVEUgIDB4ODAwMCAgLyogd2hpbGUgd3JpdGluZyBzb21ldGhpbmcgd2VudCBib2d1cyAqLworCisjZGVmaW5lIFNVTjRDX1NZTkNfQk9MSVhFRCAgXAorICAgICAgICAoU1VONENfU1lOQ19XRFJFU0VUIHwgU1VONENfU1lOQ19TSVpFIHwgU1VONENfU1lOQ19TQlVTIHwgXAorICAgICAgICAgU1VONENfU1lOQ19OT01FTSB8IFNVTjRDX1NZTkNfUEFSSVRZKQorCisvKiBOb3cgdGhlIGFzeW5jaHJvbm91cyBlcnJvciBjb2RlcywgdGhlc2UgYXJlIGFsbW9zdCBhbHdheXMgcHJvZHVjZWQKKyAqIGJ5IHRoZSBjYWNoZSB3cml0aW5nIHRoaW5ncyBiYWNrIHRvIG1lbW9yeSBhbmQgZ2V0dGluZyBhIGJhZCB0cmFuc2xhdGlvbi4KKyAqIEJhZCBEVk1BIHRyYW5zYWN0aW9ucyBjYW4gY2F1c2UgdGhlc2UgZmF1bHRzIHRvby4KKyAqLworCisjZGVmaW5lIFNVTjRDX0FTWU5DX0JBRERWTUEgMHgwMDEwICAvKiBlcnJvciBkdXJpbmcgRFZNQSBhY2Nlc3MgKi8KKyNkZWZpbmUgU1VONENfQVNZTkNfTk9NRU0gICAweDAwMjAgIC8qIHdyaXRlIGJhY2sgcG9pbnRlZCB0byBiYWQgcGh5cyBhZGRyICovCisjZGVmaW5lIFNVTjRDX0FTWU5DX0JBRFdCICAgMHgwMDgwICAvKiB3cml0ZSBiYWNrIHBvaW50cyB0byBub24tcHJlc2VudCBwYWdlICovCisKKy8qIE1lbW9yeSBwYXJpdHkgZXJyb3IgcmVnaXN0ZXIgd2l0aCBhc3NvY2lhdGVkIGJpdCBjb25zdGFudHMuICovCisjaWZuZGVmIF9fQVNTRU1CTFlfXworZXh0ZXJuIF9fdm9sYXRpbGVfXyB1bnNpZ25lZCBsb25nICpzdW40Y19tZW1lcnJfcmVnOworI2VuZGlmCisKKyNkZWZpbmUJU1VONENfTVBFX0VSUk9SCTB4ODAJLyogUGFyaXR5IGVycm9yIGRldGVjdGVkLiAocm8pICovCisjZGVmaW5lCVNVTjRDX01QRV9NVUxUSQkweDQwCS8qIE11bHRpcGxlIHBhcml0eSBlcnJvcnMgZGV0ZWN0ZWQuIChybykgKi8KKyNkZWZpbmUJU1VONENfTVBFX1RFU1QJMHgyMAkvKiBXcml0ZSBpbnZlcnNlIHBhcml0eS4gKHJ3KSAqLworI2RlZmluZQlTVU40Q19NUEVfQ0hFQ0sJMHgxMAkvKiBFbmFibGUgcGFyaXR5IGNoZWNraW5nLiAocncpICovCisjZGVmaW5lCVNVTjRDX01QRV9FUlIwMAkweDA4CS8qIFBhcml0eSBlcnJvciBpbiBiaXRzIDAtNy4gKHJvKSAqLworI2RlZmluZQlTVU40Q19NUEVfRVJSMDgJMHgwNAkvKiBQYXJpdHkgZXJyb3IgaW4gYml0cyA4LTE1LiAocm8pICovCisjZGVmaW5lCVNVTjRDX01QRV9FUlIxNgkweDAyCS8qIFBhcml0eSBlcnJvciBpbiBiaXRzIDE2LTIzLiAocm8pICovCisjZGVmaW5lCVNVTjRDX01QRV9FUlIyNAkweDAxCS8qIFBhcml0eSBlcnJvciBpbiBiaXRzIDI0LTMxLiAocm8pICovCisjZGVmaW5lCVNVTjRDX01QRV9FUlJTCTB4MEYJLyogQml0IG1hc2sgZm9yIHRoZSBlcnJvciBiaXRzLiAocm8pICovCisKKyNlbmRpZiAvKiAhKF9TUEFSQ19NRU1SRUdfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL21tYW4uaCBiL2luY2x1ZGUvYXNtLXNwYXJjL21tYW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzhlYjgxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvbW1hbi5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qICRJZDogbW1hbi5oLHYgMS45IDIwMDAvMDMvMTUgMDI6NDQ6MjMgZGF2ZW0gRXhwICQgKi8KKyNpZm5kZWYgX19TUEFSQ19NTUFOX0hfXworI2RlZmluZSBfX1NQQVJDX01NQU5fSF9fCisKKy8qIFN1bk9TJ2lmaWVkLi4uICovCisKKyNkZWZpbmUgUFJPVF9SRUFECTB4MQkJLyogcGFnZSBjYW4gYmUgcmVhZCAqLworI2RlZmluZSBQUk9UX1dSSVRFCTB4MgkJLyogcGFnZSBjYW4gYmUgd3JpdHRlbiAqLworI2RlZmluZSBQUk9UX0VYRUMJMHg0CQkvKiBwYWdlIGNhbiBiZSBleGVjdXRlZCAqLworI2RlZmluZSBQUk9UX1NFTQkweDgJCS8qIHBhZ2UgbWF5IGJlIHVzZWQgZm9yIGF0b21pYyBvcHMgKi8KKyNkZWZpbmUgUFJPVF9OT05FCTB4MAkJLyogcGFnZSBjYW4gbm90IGJlIGFjY2Vzc2VkICovCisjZGVmaW5lIFBST1RfR1JPV1NET1dOCTB4MDEwMDAwMDAJLyogbXByb3RlY3QgZmxhZzogZXh0ZW5kIGNoYW5nZSB0byBzdGFydCBvZiBncm93c2Rvd24gdm1hICovCisjZGVmaW5lIFBST1RfR1JPV1NVUAkweDAyMDAwMDAwCS8qIG1wcm90ZWN0IGZsYWc6IGV4dGVuZCBjaGFuZ2UgdG8gZW5kIG9mIGdyb3dzdXAgdm1hICovCisKKyNkZWZpbmUgTUFQX1NIQVJFRAkweDAxCQkvKiBTaGFyZSBjaGFuZ2VzICovCisjZGVmaW5lIE1BUF9QUklWQVRFCTB4MDIJCS8qIENoYW5nZXMgYXJlIHByaXZhdGUgKi8KKyNkZWZpbmUgTUFQX1RZUEUJMHgwZgkJLyogTWFzayBmb3IgdHlwZSBvZiBtYXBwaW5nICovCisjZGVmaW5lIE1BUF9GSVhFRAkweDEwCQkvKiBJbnRlcnByZXQgYWRkciBleGFjdGx5ICovCisjZGVmaW5lIE1BUF9BTk9OWU1PVVMJMHgyMAkJLyogZG9uJ3QgdXNlIGEgZmlsZSAqLworI2RlZmluZSBNQVBfUkVOQU1FICAgICAgTUFQX0FOT05ZTU9VUyAgIC8qIEluIFN1bk9TIHRlcm1pbm9sb2d5ICovCisjZGVmaW5lIE1BUF9OT1JFU0VSVkUgICAweDQwICAgICAgICAgICAgLyogZG9uJ3QgcmVzZXJ2ZSBzd2FwIHBhZ2VzICovCisjZGVmaW5lIE1BUF9JTkhFUklUICAgICAweDgwICAgICAgICAgICAgLyogU3VuT1MgZG9lc24ndCBkbyB0aGlzLCBidXQuLi4gKi8KKyNkZWZpbmUgTUFQX0xPQ0tFRCAgICAgIDB4MTAwICAgICAgICAgICAvKiBsb2NrIHRoZSBtYXBwaW5nICovCisjZGVmaW5lIF9NQVBfTkVXICAgICAgICAweDgwMDAwMDAwICAgICAgLyogQmluYXJ5IGNvbXBhdGliaWxpdHkgaXMgZnVuLi4uICovCisKKyNkZWZpbmUgTUFQX0dST1dTRE9XTgkweDAyMDAJCS8qIHN0YWNrLWxpa2Ugc2VnbWVudCAqLworI2RlZmluZSBNQVBfREVOWVdSSVRFCTB4MDgwMAkJLyogRVRYVEJTWSAqLworI2RlZmluZSBNQVBfRVhFQ1VUQUJMRQkweDEwMDAJCS8qIG1hcmsgaXQgYXMgYW4gZXhlY3V0YWJsZSAqLworCisjZGVmaW5lIE1TX0FTWU5DCTEJCS8qIHN5bmMgbWVtb3J5IGFzeW5jaHJvbm91c2x5ICovCisjZGVmaW5lIE1TX0lOVkFMSURBVEUJMgkJLyogaW52YWxpZGF0ZSB0aGUgY2FjaGVzICovCisjZGVmaW5lIE1TX1NZTkMJCTQJCS8qIHN5bmNocm9ub3VzIG1lbW9yeSBzeW5jICovCisKKyNkZWZpbmUgTUNMX0NVUlJFTlQgICAgIDB4MjAwMCAgICAgICAgICAvKiBsb2NrIGFsbCBjdXJyZW50bHkgbWFwcGVkIHBhZ2VzICovCisjZGVmaW5lIE1DTF9GVVRVUkUgICAgICAweDQwMDAgICAgICAgICAgLyogbG9jayBhbGwgYWRkaXRpb25zIHRvIGFkZHJlc3Mgc3BhY2UgKi8KKworI2RlZmluZSBNQVBfUE9QVUxBVEUJMHg4MDAwCQkvKiBwb3B1bGF0ZSAocHJlZmF1bHQpIHBhZ2V0YWJsZXMgKi8KKyNkZWZpbmUgTUFQX05PTkJMT0NLCTB4MTAwMDAJCS8qIGRvIG5vdCBibG9jayBvbiBJTyAqLworCisvKiBYWFggTmVlZCB0byBhZGQgZmxhZ3MgdG8gU3VuT1MncyBtY3RsLCBtbG9ja2FsbCwgYW5kIG1hZHZpc2Ugc3lzdGVtCisgKiBYWFggY2FsbHMuCisgKi8KKworLyogU3VuT1Mgc3lzX21jdGwoKSBzdHVmZi4uLiAqLworI2RlZmluZSBNQ19TWU5DICAgICAgICAgMSAgLyogU3luYyBwYWdlcyBpbiBtZW1vcnkgd2l0aCBzdG9yYWdlICh1c3UuIGEgZmlsZSkgKi8KKyNkZWZpbmUgTUNfTE9DSyAgICAgICAgIDIgIC8qIExvY2sgcGFnZXMgaW50byBjb3JlIHJhbSwgZG8gbm90IGFsbG93IHN3YXBwaW5nIG9mIHRoZW0gKi8KKyNkZWZpbmUgTUNfVU5MT0NLICAgICAgIDMgIC8qIFVubG9jayBwYWdlcyBsb2NrZWQgdmlhIHByZXZpb3VzIG1jdGwoKSB3aXRoIE1DX0xPQ0sgYXJnICovCisjZGVmaW5lIE1DX0xPQ0tBUyAgICAgICA1ICAvKiBMb2NrIGFuIGVudGlyZSBhZGRyZXNzIHNwYWNlIG9mIHRoZSBjYWxsaW5nIHByb2Nlc3MgKi8KKyNkZWZpbmUgTUNfVU5MT0NLQVMgICAgIDYgIC8qIFVubG9jayBlbnRpcmUgYWRkcmVzcyBzcGFjZSBvZiBjYWxsaW5nIHByb2Nlc3MgKi8KKworI2RlZmluZSBNQURWX05PUk1BTAkweDAJCS8qIGRlZmF1bHQgcGFnZS1pbiBiZWhhdmlvciAqLworI2RlZmluZSBNQURWX1JBTkRPTQkweDEJCS8qIHBhZ2UtaW4gbWluaW11bSByZXF1aXJlZCAqLworI2RlZmluZSBNQURWX1NFUVVFTlRJQUwJMHgyCQkvKiByZWFkLWFoZWFkIGFnZ3Jlc3NpdmVseSAqLworI2RlZmluZSBNQURWX1dJTExORUVECTB4MwkJLyogcHJlLWZhdWx0IHBhZ2VzICovCisjZGVmaW5lIE1BRFZfRE9OVE5FRUQJMHg0CQkvKiBkaXNjYXJkIHRoZXNlIHBhZ2VzICovCisjZGVmaW5lIE1BRFZfRlJFRQkweDUJCS8qIChTb2xhcmlzKSBjb250ZW50cyBjYW4gYmUgZnJlZWQgKi8KKworLyogY29tcGF0aWJpbGl0eSBmbGFncyAqLworI2RlZmluZSBNQVBfQU5PTglNQVBfQU5PTllNT1VTCisjZGVmaW5lIE1BUF9GSUxFCTAKKworI2VuZGlmIC8qIF9fU1BBUkNfTU1BTl9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL21tdS5oIGIvaW5jbHVkZS9hc20tc3BhcmMvbW11LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NkMzZkMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL21tdS5oCkBAIC0wLDAgKzEsNyBAQAorI2lmbmRlZiBfX01NVV9ICisjZGVmaW5lIF9fTU1VX0gKKworLyogRGVmYXVsdCAidW5zaWduZWQgbG9uZyIgY29udGV4dCAqLwordHlwZWRlZiB1bnNpZ25lZCBsb25nIG1tX2NvbnRleHRfdDsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9tbXVfY29udGV4dC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvbW11X2NvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDFlMDFkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvbW11X2NvbnRleHQuaApAQCAtMCwwICsxLDQwIEBACisjaWZuZGVmIF9fU1BBUkNfTU1VX0NPTlRFWFRfSAorI2RlZmluZSBfX1NQQVJDX01NVV9DT05URVhUX0gKKworI2luY2x1ZGUgPGFzbS9idGZpeHVwLmg+CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBlbnRlcl9sYXp5X3RsYihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIGEgbmV3IG1tdSBjb250ZXh0LiAgVGhpcyBpcyBpbnZva2VkIHdoZW4gYSBuZXcKKyAqIGFkZHJlc3Mgc3BhY2UgaW5zdGFuY2UgKHVuaXF1ZSBvciBzaGFyZWQpIGlzIGluc3RhbnRpYXRlZC4KKyAqLworI2RlZmluZSBpbml0X25ld19jb250ZXh0KHRzaywgbW0pICgoKG1tKS0+Y29udGV4dCA9IE5PX0NPTlRFWFQpLCAwKQorCisvKgorICogRGVzdHJveSBhIGRlYWQgY29udGV4dC4gIFRoaXMgb2NjdXJzIHdoZW4gbW1wdXQgZHJvcHMgdGhlCisgKiBtbV91c2VycyBjb3VudCB0byB6ZXJvLCB0aGUgbW1hcHMgaGF2ZSBiZWVuIHJlbGVhc2VkLCBhbmQKKyAqIGFsbCB0aGUgcGFnZSB0YWJsZXMgaGF2ZSBiZWVuIGZsdXNoZWQuICBPdXIgam9iIGlzIHRvIGRlc3Ryb3kKKyAqIGFueSByZW1haW5pbmcgcHJvY2Vzc29yLXNwZWNpZmljIHN0YXRlLgorICovCitCVEZJWFVQREVGX0NBTEwodm9pZCwgZGVzdHJveV9jb250ZXh0LCBzdHJ1Y3QgbW1fc3RydWN0ICopCisKKyNkZWZpbmUgZGVzdHJveV9jb250ZXh0KG1tKSBCVEZJWFVQX0NBTEwoZGVzdHJveV9jb250ZXh0KShtbSkKKworLyogU3dpdGNoIHRoZSBjdXJyZW50IE1NIGNvbnRleHQuICovCitCVEZJWFVQREVGX0NBTEwodm9pZCwgc3dpdGNoX21tLCBzdHJ1Y3QgbW1fc3RydWN0ICosIHN0cnVjdCBtbV9zdHJ1Y3QgKiwgc3RydWN0IHRhc2tfc3RydWN0ICopCisKKyNkZWZpbmUgc3dpdGNoX21tKG9sZF9tbSwgbW0sIHRzaykgQlRGSVhVUF9DQUxMKHN3aXRjaF9tbSkob2xkX21tLCBtbSwgdHNrKQorCisjZGVmaW5lIGRlYWN0aXZhdGVfbW0odHNrLG1tKQlkbyB7IH0gd2hpbGUgKDApCisKKy8qIEFjdGl2YXRlIGEgbmV3IE1NIGluc3RhbmNlIGZvciB0aGUgY3VycmVudCB0YXNrLiAqLworI2RlZmluZSBhY3RpdmF0ZV9tbShhY3RpdmVfbW0sIG1tKSBzd2l0Y2hfbW0oKGFjdGl2ZV9tbSksIChtbSksIE5VTEwpCisKKyNlbmRpZiAvKiAhKF9fQVNTRU1CTFlfXykgKi8KKworI2VuZGlmIC8qICEoX19TUEFSQ19NTVVfQ09OVEVYVF9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvbW9kdWxlLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9tb2R1bGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmQ5ZTY3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvbW9kdWxlLmgKQEAgLTAsMCArMSw3IEBACisjaWZuZGVmIF9BU01fU1BBUkNfTU9EVUxFX0gKKyNkZWZpbmUgX0FTTV9TUEFSQ19NT0RVTEVfSAorc3RydWN0IG1vZF9hcmNoX3NwZWNpZmljIHsgfTsKKyNkZWZpbmUgRWxmX1NoZHIgRWxmMzJfU2hkcgorI2RlZmluZSBFbGZfU3ltIEVsZjMyX1N5bQorI2RlZmluZSBFbGZfRWhkciBFbGYzMl9FaGRyCisjZW5kaWYgLyogX0FTTV9TUEFSQ19NT0RVTEVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvbW9zdGVrLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9tb3N0ZWsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWI4NmJjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvbW9zdGVrLmgKQEAgLTAsMCArMSwxNzQgQEAKKy8qICRJZDogbW9zdGVrLmgsdiAxLjEzIDIwMDEvMDEvMTEgMTU6MDc6MDkgZGF2ZW0gRXhwICQKKyAqIG1vc3Rlay5oOiAgRGVzY3JpYmVzIHRoZSB2YXJpb3VzIE1vc3RlayB0aW1lIG9mIGRheSBjbG9jayByZWdpc3RlcnMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKKyAqIENvcHlyaWdodCAoQykgMTk5NiBUaG9tYXMgSy4gRHlhcyAodGR5YXNAZWRlbi5ydXRnZXJzLmVkdSkKKyAqIEFkZGVkIGludGVyc2lsIGNvZGUgMDUvMjUvOTggQ2hyaXMgRGF2aXMgKGNkYXZpc0Bjb2lzLm9uLmNhKQorICovCisKKyNpZm5kZWYgX1NQQVJDX01PU1RFS19ICisjZGVmaW5lIF9TUEFSQ19NT1NURUtfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL2lkcHJvbS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCisvKiAgICAgICBNNDhUMDIgUmVnaXN0ZXIgTWFwIChhZGFwdGVkIGZyb20gU3VuIE5WUkFNL0hvc3RpZCBGQVEpCisgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEKKyAqIEFkZHJlc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb24KKyAqICAgICAgICBCaXQgNyBCaXQgNiBCaXQgNSBCaXQgNEJpdCAzIEJpdCAyIEJpdCAxIEJpdCAwCisgKiAgIDdmZiAgLSAgICAgLSAgICAgLSAgICAgLSAgICAtICAgICAtICAgICAtICAgICAtICAgICAgIFllYXIgMDAtOTkKKyAqICAgN2ZlICAwICAgICAwICAgICAwICAgICAtICAgIC0gICAgIC0gICAgIC0gICAgIC0gICAgICBNb250aCAwMS0xMgorICogICA3ZmQgIDAgICAgIDAgICAgIC0gICAgIC0gICAgLSAgICAgLSAgICAgLSAgICAgLSAgICAgICBEYXRlIDAxLTMxCisgKiAgIDdmYyAgMCAgICAgRlQgICAgMCAgICAgMCAgICAwICAgICAtICAgICAtICAgICAtICAgICAgICBEYXkgMDEtMDcKKyAqICAgN2ZiICBLUyAgICAwICAgICAtICAgICAtICAgIC0gICAgIC0gICAgIC0gICAgIC0gICAgICBIb3VycyAwMC0yMworICogICA3ZmEgIDAgICAgIC0gICAgIC0gICAgIC0gICAgLSAgICAgLSAgICAgLSAgICAgLSAgICBNaW51dGVzIDAwLTU5CisgKiAgIDdmOSAgU1QgICAgLSAgICAgLSAgICAgLSAgICAtICAgICAtICAgICAtICAgICAtICAgIFNlY29uZHMgMDAtNTkKKyAqICAgN2Y4ICBXICAgICBSICAgICBTICAgICAtICAgIC0gICAgIC0gICAgIC0gICAgIC0gICAgQ29udHJvbAorICoKKyAqICAgKiBTVCBpcyBTVE9QIEJJVAorICogICAqIFcgaXMgV1JJVEUgQklUCisgKiAgICogUiBpcyBSRUFEIEJJVAorICogICAqIFMgaXMgU0lHTiBCSVQKKyAqICAgKiBGVCBpcyBGUkVRIFRFU1QgQklUCisgKiAgICogS1MgaXMgS0lDSyBTVEFSVCBCSVQKKyAqLworCisvKiBUaGUgTW9zdGVrIDQ4dDAyIHJlYWwgdGltZSBjbG9jayBhbmQgTlZSQU0gY2hpcC4gVGhlIHJlZ2lzdGVycworICogb3RoZXIgdGhhbiB0aGUgY29udHJvbCByZWdpc3RlciBhcmUgaW4gYmluYXJ5IGNvZGVkIGRlY2ltYWwuIFNvbWUKKyAqIGNvbnRyb2wgYml0cyBhbHNvIGxpdmUgb3V0c2lkZSB0aGUgY29udHJvbCByZWdpc3Rlci4KKyAqLworI2RlZmluZSBtb3N0ZWtfcmVhZChfYWRkcikJCXJlYWRiKF9hZGRyKQorI2RlZmluZSBtb3N0ZWtfd3JpdGUoX2FkZHIsX3ZhbCkJd3JpdGViKF92YWwsIF9hZGRyKQorI2RlZmluZSBNT1NURUtfRUVQUk9NCQkweDAwMDBVTAorI2RlZmluZSBNT1NURUtfSURQUk9NCQkweDA3ZDhVTAorI2RlZmluZSBNT1NURUtfQ1JFRwkJMHgwN2Y4VUwKKyNkZWZpbmUgTU9TVEVLX1NFQwkJMHgwN2Y5VUwKKyNkZWZpbmUgTU9TVEVLX01JTgkJMHgwN2ZhVUwKKyNkZWZpbmUgTU9TVEVLX0hPVVIJCTB4MDdmYlVMCisjZGVmaW5lIE1PU1RFS19ET1cJCTB4MDdmY1VMCisjZGVmaW5lIE1PU1RFS19ET00JCTB4MDdmZFVMCisjZGVmaW5lIE1PU1RFS19NT05USAkJMHgwN2ZlVUwKKyNkZWZpbmUgTU9TVEVLX1lFQVIJCTB4MDdmZlVMCisKK3N0cnVjdCBtb3N0ZWs0OHQwMiB7CisJdm9sYXRpbGUgY2hhciBlZXByb21bMjAwOF07CS8qIFRoaXMgaXMgdGhlIGVlcHJvbSwgZG9uJ3QgdG91Y2ghICovCisJc3RydWN0IGlkcHJvbSBpZHByb207CQkvKiBUaGUgaWRwcm9tIGxpdmVzIGhlcmUuICovCisJdm9sYXRpbGUgdW5zaWduZWQgY2hhciBjcmVnOwkvKiBDb250cm9sIHJlZ2lzdGVyICovCisJdm9sYXRpbGUgdW5zaWduZWQgY2hhciBzZWM7CS8qIFNlY29uZHMgKDAtNTkpICovCisJdm9sYXRpbGUgdW5zaWduZWQgY2hhciBtaW47CS8qIE1pbnV0ZXMgKDAtNTkpICovCisJdm9sYXRpbGUgdW5zaWduZWQgY2hhciBob3VyOwkvKiBIb3VyICgwLTIzKSAqLworCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgZG93OwkvKiBEYXkgb2YgdGhlIHdlZWsgKDEtNykgKi8KKwl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIGRvbTsJLyogRGF5IG9mIHRoZSBtb250aCAoMS0zMSkgKi8KKwl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIG1vbnRoOwkvKiBNb250aCBvZiB5ZWFyICgxLTEyKSAqLworCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgeWVhcjsJLyogWWVhciAoMC05OSkgKi8KK307CisKK2V4dGVybiBzcGlubG9ja190IG1vc3Rla19sb2NrOworZXh0ZXJuIHZvaWQgX19pb21lbSAqbXN0azQ4dDAyX3JlZ3M7CisKKy8qIENvbnRyb2wgcmVnaXN0ZXIgdmFsdWVzLiAqLworI2RlZmluZQlNU1RLX0NSRUdfV1JJVEUJMHg4MAkvKiBNdXN0IHNldCB0aGlzIGJlZm9yZSBwbGFjaW5nIHZhbHVlcy4gKi8KKyNkZWZpbmUJTVNUS19DUkVHX1JFQUQJMHg0MAkvKiBTdG9wIHVwZGF0ZXMgdG8gYWxsb3cgYSBjbGVhbiByZWFkLiAqLworI2RlZmluZQlNU1RLX0NSRUdfU0lHTgkweDIwCS8qIFNsb3cvc3BlZWQgY2xvY2sgaW4gY2FsaWJyYXRpb24gbW9kZS4gKi8KKworLyogQ29udHJvbCBiaXRzIHRoYXQgbGl2ZSBpbiB0aGUgb3RoZXIgcmVnaXN0ZXJzLiAqLworI2RlZmluZQlNU1RLX1NUT1AJMHg4MAkvKiBTdG9wIHRoZSBjbG9jayBvc2NpbGxhdG9yLiAoc2VjKSAqLworI2RlZmluZQlNU1RLX0tJQ0tfU1RBUlQJMHg4MAkvKiBLaWNrIHN0YXJ0IHRoZSBjbG9jayBjaGlwLiAoaG91cikgKi8KKyNkZWZpbmUgTVNUS19GUkVRX1RFU1QJMHg0MAkvKiBGcmVxdWVuY3kgdGVzdCBtb2RlLiAoZGF5KSAqLworCisjZGVmaW5lIE1TVEtfWUVBUl9aRVJPICAgICAgIDE5NjggICAvKiBJZiB5ZWFyIHJlZyBoYXMgemVybywgaXQgaXMgMTk2OC4gKi8KKyNkZWZpbmUgTVNUS19DVlRfWUVBUih5cikgICgoeXIpICsgTVNUS19ZRUFSX1pFUk8pCisKKy8qIE1hc2tzIHRoYXQgZGVmaW5lIGhvdyBtdWNoIHNwYWNlIGVhY2ggdmFsdWUgdGFrZXMgdXAuICovCisjZGVmaW5lCU1TVEtfU0VDX01BU0sJMHg3ZgorI2RlZmluZQlNU1RLX01JTl9NQVNLCTB4N2YKKyNkZWZpbmUJTVNUS19IT1VSX01BU0sJMHgzZgorI2RlZmluZQlNU1RLX0RPV19NQVNLCTB4MDcKKyNkZWZpbmUJTVNUS19ET01fTUFTSwkweDNmCisjZGVmaW5lCU1TVEtfTU9OVEhfTUFTSwkweDFmCisjZGVmaW5lCU1TVEtfWUVBUl9NQVNLCTB4ZmYKKworLyogQmluYXJ5IGNvZGVkIGRlY2ltYWwgY29udmVyc2lvbiBtYWNyb3MuICovCisjZGVmaW5lIE1TVEtfUkVHVkFMX1RPX0RFQ0lNQUwoeCkgICgoKHgpICYgMHgwRikgKyAweDBBICogKCh4KSA+PiAweDA0KSkKKyNkZWZpbmUgTVNUS19ERUNJTUFMX1RPX1JFR1ZBTCh4KSAgKCgoKHgpIC8gMHgwQSkgPDwgMHgwNCkgKyAoKHgpICUgMHgwQSkpCisKKy8qIEdlbmVyaWMgcmVnaXN0ZXIgc2V0IGFuZCBnZXQgbWFjcm9zIGZvciBpbnRlcm5hbCB1c2UuICovCisjZGVmaW5lIE1TVEtfR0VUKHJlZ3MsdmFyLG1hc2spIChNU1RLX1JFR1ZBTF9UT19ERUNJTUFMKCgoc3RydWN0IG1vc3RlazQ4dDAyICopcmVncyktPnZhciAmIE1TVEtfICMjIG1hc2sgIyMgX01BU0spKQorI2RlZmluZSBNU1RLX1NFVChyZWdzLHZhcix2YWx1ZSxtYXNrKSBkbyB7ICgoc3RydWN0IG1vc3RlazQ4dDAyICopcmVncyktPnZhciAmPSB+KE1TVEtfICMjIG1hc2sgIyMgX01BU0spOyAoKHN0cnVjdCBtb3N0ZWs0OHQwMiAqKXJlZ3MpLT52YXIgfD0gTVNUS19ERUNJTUFMX1RPX1JFR1ZBTCh2YWx1ZSkgJiAoTVNUS18gIyMgbWFzayAjIyBfTUFTSyk7IH0gd2hpbGUgKDApCisKKy8qIE1hY3JvcyB0byBtYWtlIHJlZ2lzdGVyIGFjY2VzcyBlYXNpZXIgb24gb3VyIGZpbmdlcnMuIFRoZXNlIGdpdmUgeW91CisgKiB0aGUgZGVjaW1hbCB2YWx1ZSBvZiB0aGUgcmVnaXN0ZXIgcmVxdWVzdGVkIGlmIGFwcGxpY2FibGUuIFlvdSBwYXNzCisgKiB0aGUgYSBwb2ludGVyIHRvIGEgJ3N0cnVjdCBtb3N0ZWs0OHQwMicuCisgKi8KKyNkZWZpbmUJTVNUS19SRUdfQ1JFRyhyZWdzKQkoKChzdHJ1Y3QgbW9zdGVrNDh0MDIgKilyZWdzKS0+Y3JlZykKKyNkZWZpbmUJTVNUS19SRUdfU0VDKHJlZ3MpCU1TVEtfR0VUKHJlZ3Msc2VjLFNFQykKKyNkZWZpbmUJTVNUS19SRUdfTUlOKHJlZ3MpCU1TVEtfR0VUKHJlZ3MsbWluLE1JTikKKyNkZWZpbmUJTVNUS19SRUdfSE9VUihyZWdzKQlNU1RLX0dFVChyZWdzLGhvdXIsSE9VUikKKyNkZWZpbmUJTVNUS19SRUdfRE9XKHJlZ3MpCU1TVEtfR0VUKHJlZ3MsZG93LERPVykKKyNkZWZpbmUJTVNUS19SRUdfRE9NKHJlZ3MpCU1TVEtfR0VUKHJlZ3MsZG9tLERPTSkKKyNkZWZpbmUJTVNUS19SRUdfTU9OVEgocmVncykJTVNUS19HRVQocmVncyxtb250aCxNT05USCkKKyNkZWZpbmUJTVNUS19SRUdfWUVBUihyZWdzKQlNU1RLX0dFVChyZWdzLHllYXIsWUVBUikKKworI2RlZmluZQlNU1RLX1NFVF9SRUdfU0VDKHJlZ3MsdmFsdWUpCU1TVEtfU0VUKHJlZ3Msc2VjLHZhbHVlLFNFQykKKyNkZWZpbmUJTVNUS19TRVRfUkVHX01JTihyZWdzLHZhbHVlKQlNU1RLX1NFVChyZWdzLG1pbix2YWx1ZSxNSU4pCisjZGVmaW5lCU1TVEtfU0VUX1JFR19IT1VSKHJlZ3MsdmFsdWUpCU1TVEtfU0VUKHJlZ3MsaG91cix2YWx1ZSxIT1VSKQorI2RlZmluZQlNU1RLX1NFVF9SRUdfRE9XKHJlZ3MsdmFsdWUpCU1TVEtfU0VUKHJlZ3MsZG93LHZhbHVlLERPVykKKyNkZWZpbmUJTVNUS19TRVRfUkVHX0RPTShyZWdzLHZhbHVlKQlNU1RLX1NFVChyZWdzLGRvbSx2YWx1ZSxET00pCisjZGVmaW5lCU1TVEtfU0VUX1JFR19NT05USChyZWdzLHZhbHVlKQlNU1RLX1NFVChyZWdzLG1vbnRoLHZhbHVlLE1PTlRIKQorI2RlZmluZQlNU1RLX1NFVF9SRUdfWUVBUihyZWdzLHZhbHVlKQlNU1RLX1NFVChyZWdzLHllYXIsdmFsdWUsWUVBUikKKworCisvKiBUaGUgTW9zdGVrIDQ4dDA4IGNsb2NrIGNoaXAuIEZvdW5kIG9uIFN1bjRtJ3MgSSB0aGluay4gSXQgaGFzIHRoZQorICogc2FtZSAoYmFzaWNhbGx5KSBsYXlvdXQgb2YgdGhlIDQ4dDAyIGNoaXAgZXhjZXB0IGZvciB0aGUgZXh0cmEKKyAqIE5WUkFNIG9uIGJvYXJkICg4IEtCIGFnYWluc3QgdGhlIDQ4dDAyJ3MgMiBLQikuCisgKi8KK3N0cnVjdCBtb3N0ZWs0OHQwOCB7CisJY2hhciBvZmZzZXRbNioxMDI0XTsgICAgICAgICAvKiBNYWdpYyB0aGluZ3MgbWF5IGJlIGhlcmUsIHdobyBrbm93cz8gKi8KKwlzdHJ1Y3QgbW9zdGVrNDh0MDIgcmVnczsgICAgIC8qIEhlcmUgaXMgd2hhdCB3ZSBhcmUgaW50ZXJlc3RlZCBpbi4gICAqLworfTsKKworZXh0ZXJuIGVudW0gc3BhcmNfY2xvY2tfdHlwZSBzcF9jbG9ja190eXA7CisKKyNpZmRlZiBDT05GSUdfU1VONAorZW51bSBzcGFyY19jbG9ja190eXBlIHsJTVNUSzQ4VDAyLCBNU1RLNDhUMDgsIFwKK0lOVEVSU0lMLCBNU1RLX0lOVkFMSUQgfTsKKyNlbHNlCitlbnVtIHNwYXJjX2Nsb2NrX3R5cGUgewlNU1RLNDhUMDIsIE1TVEs0OFQwOCwgXAorTVNUS19JTlZBTElEIH07CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19TVU40CisvKiBpbnRlcnNpbCBvbiBhIHN1biA0LzI2MCBjb2RlICBkYXRhIGZyb20gaGFycmlzIGRvYyAqLworc3RydWN0IGludGVyc2lsX2R0IHsKKyAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciBpbnRfY3NlYzsKKyAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciBpbnRfaG91cjsKKyAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciBpbnRfbWluOworICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIGludF9zZWM7CisgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgaW50X21vbnRoOworICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIGludF9kYXk7CisgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgaW50X3llYXI7CisgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgaW50X2RvdzsKK307CisKK3N0cnVjdCBpbnRlcnNpbCB7CisJc3RydWN0IGludGVyc2lsX2R0IGNsazsKKwlzdHJ1Y3QgaW50ZXJzaWxfZHQgY21wOworCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgaW50X2ludHJfcmVnOworCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgaW50X2NtZF9yZWc7Cit9OworCisjZGVmaW5lIElOVEVSU0lMX1NUT1AgICAgICAgIDB4MAorI2RlZmluZSBJTlRFUlNJTF9TVEFSVCAgICAgICAweDgKKyNkZWZpbmUgSU5URVJTSUxfSU5UUl9ESVNBQkxFICAgMHgwCisjZGVmaW5lIElOVEVSU0lMX0lOVFJfRU5BQkxFICAgMHgxMAorI2RlZmluZSBJTlRFUlNJTF8zMksJCTB4MAorI2RlZmluZSBJTlRFUlNJTF9OT1JNQUwJCTB4MAorI2RlZmluZSBJTlRFUlNJTF8yNEgJCTB4NCAKKyNkZWZpbmUgSU5URVJTSUxfSU5UXzEwMEhaCTB4MgorCisvKiBlbmQgb2YgaW50ZXJzaWwgaW5mbyAqLworI2VuZGlmCisKKyNlbmRpZiAvKiAhKF9TUEFSQ19NT1NURUtfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL21wbWJveC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvbXBtYm94LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUxYmM1OAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL21wbWJveC5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qICRJZDogbXBtYm94LmgsdiAxLjQgMTk5Ni8wNC8yNSAwNjoxMzoxOSBkYXZlbSBFeHAgJAorICogbXBtYm94Lmg6ICBJbnRlcmZhY2UgYW5kIGRlZmluZXMgZm9yIHRoZSBPcGVuUHJvbSBtYWlsYm94CisgKiAgICAgICAgICAgICAgIGZhY2lsaXRpZXMgZm9yIE1QIG1hY2hpbmVzIHVuZGVyIExpbnV4LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NSBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCisgKi8KKworI2lmbmRlZiBfU1BBUkNfTVBNQk9YX0gKKyNkZWZpbmUgX1NQQVJDX01QTUJPWF9ICisKKy8qIFRoZSBwcm9tIGFsbG9jYXRlcywgZm9yIGVhY2ggQ1BVIG9uIHRoZSBtYWNoaW5lIGFuIHVuc2lnbmVkCisgKiBieXRlIGluIHBoeXNpY2FsIHJhbS4gIFlvdSBwcm9iZSB0aGUgZGV2aWNlIHRyZWUgcHJvbSBub2RlcworICogZm9yIHRoZXNlIHZhbHVlcy4gIFRoZSBwdXJwb3NlIG9mIHRoaXMgYnl0ZSBpcyB0byBiZSBhYmxlIHRvCisgKiBwYXNzIG1lc3NhZ2VzIGZyb20gb25lIGNwdSB0byBhbm90aGVyLgorICovCisKKy8qIFRoZXNlIGFyZSB0aGUgbWFpbiBtZXNzYWdlIHR5cGVzIHdlIGhhdmUgdG8gbG9vayBmb3IgaW4gb3VyCisgKiBDcHUgbWFpbGJveGVzLCBiYXNlZCB1cG9uIHRoZXNlIHZhbHVlcyB3ZSBkZWNpZGUgd2hhdCBjb3Vyc2UKKyAqIG9mIGFjdGlvbiB0byB0YWtlLgorICovCisKKy8qIFRoZSBDUFUgaXMgZXhlY3V0aW5nIGNvZGUgaW4gdGhlIGtlcm5lbC4gKi8KKyNkZWZpbmUgTUFJTEJPWF9JU1JVTk5JTkcgICAgIDB4ZjAKKworLyogQW5vdGhlciBDUFUgY2FsbGVkIHJvbXZlYy0+cHZfZXhpdCgpLCB5b3Ugc2hvdWxkIGNhbGwKKyAqIHByb21fc3RvcGNwdSgpIHdoZW4geW91IHNlZSB0aGlzIGluIHlvdXIgbWFpbGJveC4KKyAqLworI2RlZmluZSBNQUlMQk9YX0VYSVQgICAgICAgICAgMHhmYgorCisvKiBBbm90aGVyIENQVSBjYWxsZWQgcm9tdmVjLT5wdl9lbnRlcigpLCB5b3Ugc2hvdWxkIGNhbGwKKyAqIHByb21fY3B1aWRsZSgpIHdoZW4gdGhpcyBpcyBzZWVuLgorICovCisjZGVmaW5lIE1BSUxCT1hfR09TUElOICAgICAgICAweGZjCisKKy8qIEFub3RoZXIgQ1BVIGhhcyBoaXQgYSBicmVha3BvaW50IGVpdGhlciBpbnRvIGthZGIgb3IgdGhlIHByb20KKyAqIGl0c2VsZi4gIEp1c3QgbGlrZSBNQUlMQk9YX0dPU1BJTiwgeW91IHNob3VsZCBjYWxsIHByb21fY3B1aWRsZSgpCisgKiBhdCB0aGlzIHBvaW50LgorICovCisjZGVmaW5lIE1BSUxCT1hfQlBUX1NQSU4gICAgICAweGZkCisKKy8qIE9oIGdlZXNlLCBzb21lIG90aGVyIG5pdHdpdCBnb3QgYSBkYW1uIHdhdGNoZG9nIHJlc2V0LiAgVGhlIHBhcnR5J3MKKyAqIG92ZXIgc28gZ28gY2FsbCBwcm9tX3N0b3BjcHUoKS4KKyAqLworI2RlZmluZSBNQUlMQk9YX1dET0dfU1RPUCAgICAgMHhmZQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisvKiBIYW5keSBtYWNybydzIHRvIGRldGVybWluZSBhIGNwdSdzIHN0YXRlLiAqLworCisvKiBJcyB0aGUgY3B1IHN0aWxsIGluIFBvd2VyIE9uIFNlbGYgVGVzdD8gKi8KKyNkZWZpbmUgTUJPWF9QT1NUX1AobGV0dGVyKSAgKChsZXR0ZXIpID49IDB4MDAgJiYgKGxldHRlcikgPD0gMHg3ZikKKworLyogSXMgdGhlIGNwdSBhdCB0aGUgJ29rJyBwcm9tcHQgb2YgdGhlIFBST00/ICovCisjZGVmaW5lIE1CT1hfUFJPTVBST01QVF9QKGxldHRlcikgKChsZXR0ZXIpID49IDB4ODAgJiYgKGxldHRlcikgPD0gMHg4ZikKKworLyogSXMgdGhlIGNwdSBzcGlubmluZyBpbiB0aGUgUFJPTT8gKi8KKyNkZWZpbmUgTUJPWF9QUk9NU1BJTl9QKGxldHRlcikgKChsZXR0ZXIpID49IDB4OTAgJiYgKGxldHRlcikgPD0gMHhlZikKKworLyogU2FuaXR5IGNoZWNrLi4uIFRoaXMgaXMganVuayBtYWlsLCB0aHJvdyBpdCBvdXQuICovCisjZGVmaW5lIE1CT1hfQk9HT05fUChsZXR0ZXIpICgobGV0dGVyKSA+PSAweGYxICYmIChsZXR0ZXIpIDw9IDB4ZmEpCisKKy8qIElzIHRoZSBjcHUgYWN0aXZlbHkgcnVubmluZyBhbiBhcHBsaWNhdGlvbi9rZXJuZWwtY29kZT8gKi8KKyNkZWZpbmUgTUJPWF9SVU5OSU5HX1AobGV0dGVyKSAoKGxldHRlcikgPT0gTUFJTEJPWF9JU1JVTk5JTkcpCisKKyNlbmRpZiAvKiAhKF9fQVNTRU1CTFlfXykgKi8KKworI2VuZGlmIC8qICEoX1NQQVJDX01QTUJPWF9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvbXNnYnVmLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9tc2didWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2VjOWFkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvbXNnYnVmLmgKQEAgLTAsMCArMSwzMSBAQAorI2lmbmRlZiBfU1BBUkM2NF9NU0dCVUZfSAorI2RlZmluZSBfU1BBUkM2NF9NU0dCVUZfSAorCisvKiAKKyAqIFRoZSBtc3FpZDY0X2RzIHN0cnVjdHVyZSBmb3Igc3BhcmM2NCBhcmNoaXRlY3R1cmUuCisgKiBOb3RlIGV4dHJhIHBhZGRpbmcgYmVjYXVzZSB0aGlzIHN0cnVjdHVyZSBpcyBwYXNzZWQgYmFjayBhbmQgZm9ydGgKKyAqIGJldHdlZW4ga2VybmVsIGFuZCB1c2VyIHNwYWNlLgorICoKKyAqIFBhZCBzcGFjZSBpcyBsZWZ0IGZvcjoKKyAqIC0gNjQtYml0IHRpbWVfdCB0byBzb2x2ZSB5MjAzOCBwcm9ibGVtCisgKiAtIDIgbWlzY2VsbGFuZW91cyAzMi1iaXQgdmFsdWVzCisgKi8KKworc3RydWN0IG1zcWlkNjRfZHMgeworCXN0cnVjdCBpcGM2NF9wZXJtIG1zZ19wZXJtOworCXVuc2lnbmVkIGludCAgIF9fcGFkMTsKKwlfX2tlcm5lbF90aW1lX3QgbXNnX3N0aW1lOwkvKiBsYXN0IG1zZ3NuZCB0aW1lICovCisJdW5zaWduZWQgaW50ICAgX19wYWQyOworCV9fa2VybmVsX3RpbWVfdCBtc2dfcnRpbWU7CS8qIGxhc3QgbXNncmN2IHRpbWUgKi8KKwl1bnNpZ25lZCBpbnQgICBfX3BhZDM7CisJX19rZXJuZWxfdGltZV90IG1zZ19jdGltZTsJLyogbGFzdCBjaGFuZ2UgdGltZSAqLworCXVuc2lnbmVkIGxvbmcgIG1zZ19jYnl0ZXM7CS8qIGN1cnJlbnQgbnVtYmVyIG9mIGJ5dGVzIG9uIHF1ZXVlICovCisJdW5zaWduZWQgbG9uZyAgbXNnX3FudW07CS8qIG51bWJlciBvZiBtZXNzYWdlcyBpbiBxdWV1ZSAqLworCXVuc2lnbmVkIGxvbmcgIG1zZ19xYnl0ZXM7CS8qIG1heCBudW1iZXIgb2YgYnl0ZXMgb24gcXVldWUgKi8KKwlfX2tlcm5lbF9waWRfdCBtc2dfbHNwaWQ7CS8qIHBpZCBvZiBsYXN0IG1zZ3NuZCAqLworCV9fa2VybmVsX3BpZF90IG1zZ19scnBpZDsJLyogbGFzdCByZWNlaXZlIHBpZCAqLworCXVuc2lnbmVkIGxvbmcgIF9fdW51c2VkMTsKKwl1bnNpZ25lZCBsb25nICBfX3VudXNlZDI7Cit9OworCisjZW5kaWYgLyogX1NQQVJDNjRfTVNHQlVGX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL21zaS5oIGIvaW5jbHVkZS9hc20tc3BhcmMvbXNpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY5NTQzZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL21zaS5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qICRJZDogbXNpLmgsdiAxLjMgMTk5Ni8wOC8yOSAwOTo0ODoyNSBkYXZlbSBFeHAgJAorICogbXNpLmg6ICBEZWZpbmVzIHNwZWNpZmljIHRvIHRoZSBNQnVzIC0gU2J1cyAtIEludGVyZmFjZS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQorICogQ29weXJpZ2h0IChDKSAxOTk2IEVkZGllIEMuIERvc3QgICAoZWNkQHNreW5ldC5iZSkKKyAqLworCisjaWZuZGVmIF9TUEFSQ19NU0lfSAorI2RlZmluZSBfU1BBUkNfTVNJX0gKKworLyoKKyAqIExvY2F0aW9ucyBvZiBNU0kgUmVnaXN0ZXJzLgorICovCisjZGVmaW5lIE1TSV9NQlVTX0FSQkVOCTB4ZTAwMDEwMDgJLyogTUJ1cyBBcmJpdGVyIEVuYWJsZSByZWdpc3RlciAqLworCisvKgorICogVXNlZnVsIGJpdHMgaW4gdGhlIE1TSSBSZWdpc3RlcnMuCisgKi8KKyNkZWZpbmUgTVNJX0FTWU5DX01PREUgIDB4ODAwMDAwMDAJLyogT3BlcmF0ZSB0aGUgTVNJIGFzeW5jaHJvbm91c2x5ICovCisKKworZXh0ZXJuIF9faW5saW5lX18gdm9pZCBtc2lfc2V0X3N5bmModm9pZCkKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImxkYSBbJTBdICUxLCAlJWczXG5cdCIKKwkJCSAgICAgICJhbmRuICUlZzMsICUyLCAlJWczXG5cdCIKKwkJCSAgICAgICJzdGEgJSVnMywgWyUwXSAlMVxuXHQiIDogOgorCQkJICAgICAgInIiIChNU0lfTUJVU19BUkJFTiksCisJCQkgICAgICAiaSIgKEFTSV9NX0NUTCksICJyIiAoTVNJX0FTWU5DX01PREUpIDogImczIik7Cit9CisKKyNlbmRpZiAvKiAhKF9TUEFSQ19NU0lfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL214Y2MuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL214Y2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmU0ZTg0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvbXhjYy5oCkBAIC0wLDAgKzEsMTM3IEBACisvKiAkSWQ6IG14Y2MuaCx2IDEuNyAxOTk3LzA0LzIwIDE0OjExOjQ2IGVjZCBFeHAgJAorICogbXhjYy5oOiAgRGVmaW5pdGlvbnMgb2YgdGhlIFZpa2luZyBNWENDIHJlZ2lzdGVycworICoKKyAqIENvcHlyaWdodCAoQykgMTk5NSBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCisgKi8KKworI2lmbmRlZiBfU1BBUkNfTVhDQ19ICisjZGVmaW5lIF9TUEFSQ19NWENDX0gKKworLyogVGhlc2UgcmVnaXN0ZXJzIGFyZSBhY2Nlc3NlZCB0aHJvdWdoIEFTSSAweDIuICovCisjZGVmaW5lIE1YQ0NfREFUU1RSRUFNICAgICAgIDB4MUMwMDAwMCAgLyogRGF0YSBzdHJlYW0gcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTVhDQ19TUkNTVFJFQU0gICAgICAgMHgxQzAwMTAwICAvKiBTb3VyY2Ugc3RyZWFtIHJlZ2lzdGVyICovCisjZGVmaW5lIE1YQ0NfREVTU1RSRUFNICAgICAgIDB4MUMwMDIwMCAgLyogRGVzdGluYXRpb24gc3RyZWFtIHJlZ2lzdGVyICovCisjZGVmaW5lIE1YQ0NfUk1DT1VOVCAgICAgICAgIDB4MUMwMDMwMCAgLyogQ291bnQgb2YgcmVmZXJlbmNlcyBhbmQgbWlzc2VzICovCisjZGVmaW5lIE1YQ0NfU1RFU1QgICAgICAgICAgIDB4MUMwMDgwNCAgLyogSW50ZXJuYWwgc2VsZi10ZXN0ICovCisjZGVmaW5lIE1YQ0NfQ1JFRyAgICAgICAgICAgIDB4MUMwMEEwNCAgLyogQ29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBNWENDX1NSRUcgICAgICAgICAgICAweDFDMDBCMDAgIC8qIFN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBNWENDX1JSRUcgICAgICAgICAgICAweDFDMDBDMDQgIC8qIFJlc2V0IHJlZ2lzdGVyICovCisjZGVmaW5lIE1YQ0NfRVJFRyAgICAgICAgICAgIDB4MUMwMEUwMCAgLyogRXJyb3IgY29kZSByZWdpc3RlciAqLworI2RlZmluZSBNWENDX1BSRUcgICAgICAgICAgICAweDFDMDBGMDQgIC8qIEFkZHJlc3MgcG9ydCByZWdpc3RlciAqLworCisvKiBTb21lIE1YQ0MgY29uc3RhbnRzLiAqLworI2RlZmluZSBNWENDX1NUUkVBTV9TSVpFICAgICAweDIwICAgICAgIC8qIFNpemUgaW4gYnl0ZXMgb2Ygb25lIHN0cmVhbSByL3cgKi8KKworLyogVGhlIE1YQ0MgQ29udHJvbCBSZWdpc3RlcjoKKyAqCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFJSQyB8IFJTViB8UFJFfE1DRXxQQVJFfEVDRXxSU1Z8CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgMzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMCAgICA5ICAgIDgtNiAgIDUgICA0ICAgIDMgICAyICAxLTAKKyAqCisgKiBSUkM6IENvbnRyb2xzIHdoYXQgeW91IHJlYWQgZnJvbSBNWENDX1JNQ09VTlQgcmVnLgorICogICAgICAwPU1pc3NlcyAxPVJlZmVyZW5jZXMKKyAqIFBSRTogUHJlZmV0Y2ggZW5hYmxlCisgKiBNQ0U6IE11bHRpcGxlIENvbW1hbmQgRW5hYmxlCisgKiBQQVJFOiBQYXJpdHkgZW5hYmxlCisgKiBFQ0U6IEV4dGVybmFsIGNhY2hlIGVuYWJsZQorICovCisKKyNkZWZpbmUgTVhDQ19DVExfUlJDICAgMHgwMDAwMDIwMAorI2RlZmluZSBNWENDX0NUTF9QUkUgICAweDAwMDAwMDIwCisjZGVmaW5lIE1YQ0NfQ1RMX01DRSAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgTVhDQ19DVExfUEFSRSAgMHgwMDAwMDAwOAorI2RlZmluZSBNWENDX0NUTF9FQ0UgICAweDAwMDAwMDA0CisKKy8qIFRoZSBNWENDIEVycm9yIFJlZ2lzdGVyOgorICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiB8TUV8IFJTVnxDRXxQRVd8UEVFfEFTRXxFSVZ8IE1PUEN8RUNPREV8UFJJVnxSU1Z8SFBBRERSfAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAzMSAgIDMwIDI5ICAyOCAgMjcgIDI2ICAyNSAyNC0xNSAgMTQtNyAgIDYgIDUtMyAgIDItMAorICoKKyAqIE1FOiBNdWx0aXBsZSBFcnJvcnMgaGF2ZSBvY2N1cnJlZAorICogQ0U6IENhY2hlIGNvbnNpc3RlbmN5IEVycm9yCisgKiBQRVc6IFBhcml0eSBFcnJvciBkdXJpbmcgYSBXcml0ZSBvcGVyYXRpb24KKyAqIFBFRTogUGFyaXR5IEVycm9yIGludm9sdmluZyB0aGUgRXh0ZXJuYWwgY2FjaGUKKyAqIEFTRTogQVN5bmNocm9ub3VzIEVycm9yCisgKiBFSVY6IFRoaXMgcmVnaXN0ZXIgaXMgdG9hc3QKKyAqIE1PUEM6IE1YQ0MgT3BlcmF0aW9uIENvZGUgZm9yIGluc3RhbmNlIGNhdXNpbmcgZXJyb3IKKyAqIEVDT0RFOiBUaGUgRXJyb3IgQ09ERQorICogUFJJVjogQSBwcml2aWxlZ2VkIG1vZGUgZXJyb3I/IDA9bm8gMT15ZXMKKyAqIEhQQUREUjogSGlnaCBQaHlzaWNhbEFERFJlc3MgYml0cyAoMzUtMzIpCisgKi8KKworI2RlZmluZSBNWENDX0VSUl9NRSAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBNWENDX0VSUl9DRSAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBNWENDX0VSUl9QRVcgICAgMHgxMDAwMDAwMAorI2RlZmluZSBNWENDX0VSUl9QRUUgICAgMHgwODAwMDAwMAorI2RlZmluZSBNWENDX0VSUl9BU0UgICAgMHgwNDAwMDAwMAorI2RlZmluZSBNWENDX0VSUl9FSVYgICAgMHgwMjAwMDAwMAorI2RlZmluZSBNWENDX0VSUl9NT1BDICAgMHgwMUZGODAwMAorI2RlZmluZSBNWENDX0VSUl9FQ09ERSAgMHgwMDAwN0Y4MAorI2RlZmluZSBNWENDX0VSUl9QUklWICAgMHgwMDAwMDA0MAorI2RlZmluZSBNWENDX0VSUl9IUEFERFIgMHgwMDAwMDAwZgorCisvKiBUaGUgTVhDQyBQb3J0IHJlZ2lzdGVyOgorICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiB8ICAgICAgICAgICAgICAgIHwgTUlEIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAzMSAgICAgICAgICAgIDIxIDIwLTE4IDE3ICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyAqCisgKiBNSUQ6IFRoZSBtb2R1bGVJRCBvZiB0aGUgY3B1IHlvdXIgcmVhZCB0aGlzIGZyb20uCisgKi8KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworZXh0ZXJuIF9faW5saW5lX18gdm9pZCBteGNjX3NldF9zdHJlYW1fc3JjKHVuc2lnbmVkIGxvbmcgKnBhZGRyKQoreworCXVuc2lnbmVkIGxvbmcgZGF0YTAgPSBwYWRkclswXTsKKwl1bnNpZ25lZCBsb25nIGRhdGExID0gcGFkZHJbMV07CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm9yICUlZzAsICUwLCAlJWcyXG5cdCIKKwkJCSAgICAgICJvciAlJWcwLCAlMSwgJSVnM1xuXHQiCisJCQkgICAgICAic3RkYSAlJWcyLCBbJTJdICUzXG5cdCIgOiA6CisJCQkgICAgICAiciIgKGRhdGEwKSwgInIiIChkYXRhMSksCisJCQkgICAgICAiciIgKE1YQ0NfU1JDU1RSRUFNKSwKKwkJCSAgICAgICJpIiAoQVNJX01fTVhDQykgOiAiZzIiLCAiZzMiKTsKK30KKworZXh0ZXJuIF9faW5saW5lX18gdm9pZCBteGNjX3NldF9zdHJlYW1fZHN0KHVuc2lnbmVkIGxvbmcgKnBhZGRyKQoreworCXVuc2lnbmVkIGxvbmcgZGF0YTAgPSBwYWRkclswXTsKKwl1bnNpZ25lZCBsb25nIGRhdGExID0gcGFkZHJbMV07CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm9yICUlZzAsICUwLCAlJWcyXG5cdCIKKwkJCSAgICAgICJvciAlJWcwLCAlMSwgJSVnM1xuXHQiCisJCQkgICAgICAic3RkYSAlJWcyLCBbJTJdICUzXG5cdCIgOiA6CisJCQkgICAgICAiciIgKGRhdGEwKSwgInIiIChkYXRhMSksCisJCQkgICAgICAiciIgKE1YQ0NfREVTU1RSRUFNKSwKKwkJCSAgICAgICJpIiAoQVNJX01fTVhDQykgOiAiZzIiLCAiZzMiKTsKK30KKworZXh0ZXJuIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBteGNjX2dldF9jcmVnKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBteGNjX2NvbnRyb2w7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic2V0IC0xLCAlJWcyXG5cdCIKKwkJCSAgICAgInNldCAtMSwgJSVnM1xuXHQiCisJCQkgICAgICJzdGRhICUlZzIsIFslMV0gJTJcblx0IgorCQkJICAgICAibGRhIFslM10gJTIsICUwXG5cdCIgOgorCQkJICAgICAiPXIiIChteGNjX2NvbnRyb2wpIDoKKwkJCSAgICAgInIiIChNWENDX0VSRUcpLCAiaSIgKEFTSV9NX01YQ0MpLAorCQkJICAgICAiciIgKE1YQ0NfQ1JFRykgOiAiZzIiLCAiZzMiKTsKKwlyZXR1cm4gbXhjY19jb250cm9sOworfQorCitleHRlcm4gX19pbmxpbmVfXyB2b2lkIG14Y2Nfc2V0X2NyZWcodW5zaWduZWQgbG9uZyBteGNjX2NvbnRyb2wpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0YSAlMCwgWyUxXSAlMlxuXHQiIDogOgorCQkJICAgICAiciIgKG14Y2NfY29udHJvbCksICJyIiAoTVhDQ19DUkVHKSwKKwkJCSAgICAgImkiIChBU0lfTV9NWENDKSk7Cit9CisKKyNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiAhKF9TUEFSQ19NWENDX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9uYW1laS5oIGIvaW5jbHVkZS9hc20tc3BhcmMvbmFtZWkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjQ2MWU4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvbmFtZWkuaApAQCAtMCwwICsxLDI2IEBACisvKiAkSWQ6IG5hbWVpLmgsdiAxLjE2IDIwMDAvMDQvMTMgMDA6NTU6NTQgZGF2ZW0gRXhwICQKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLXNwYXJjL25hbWVpLmgKKyAqCisgKiBSb3V0aW5lcyB0byBoYW5kbGUgZmFtb3VzIC91c3IvZ25lbXVsL3MqLgorICogSW5jbHVkZWQgZnJvbSBsaW51eC9mcy9uYW1laS5jCisgKi8KKworI2lmbmRlZiBfX1NQQVJDX05BTUVJX0gKKyNkZWZpbmUgX19TUEFSQ19OQU1FSV9ICisKKyNkZWZpbmUgU1BBUkNfQlNEX0VNVUwgIi91c3IvZ25lbXVsL3N1bm9zLyIKKyNkZWZpbmUgU1BBUkNfU09MX0VNVUwgIi91c3IvZ25lbXVsL3NvbGFyaXMvIgorCitzdGF0aWMgaW5saW5lIGNoYXIgKiBfX2VtdWxfcHJlZml4KHZvaWQpCit7CisJc3dpdGNoIChjdXJyZW50LT5wZXJzb25hbGl0eSkgeworCWNhc2UgUEVSX1NVTk9TOgorCQlyZXR1cm4gU1BBUkNfQlNEX0VNVUw7CisJY2FzZSBQRVJfU1ZSNDoKKwkJcmV0dXJuIFNQQVJDX1NPTF9FTVVMOworCWRlZmF1bHQ6CisJCXJldHVybiBOVUxMOworCX0KK30KKworI2VuZGlmIC8qIF9fU1BBUkNfTkFNRUlfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvb2Jpby5oIGIvaW5jbHVkZS9hc20tc3BhcmMvb2Jpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyZTFkNzcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9vYmlvLmgKQEAgLTAsMCArMSwyNDkgQEAKKy8qICRJZDogb2Jpby5oLHYgMS40IDE5OTgvMDMvMDkgMTQ6MDQ6NTUgamogRXhwICQKKyAqIG9iaW8uaDogIFNvbWUgdXNlZnVsIGxvY2F0aW9ucyBpbiAweEZYWFhYWFhYWCBQQSBvYmlvIHNwYWNlIG9uIHN1bjRkLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NyBKYWt1YiBKZWxpbmVrIDxqakBzdW5zaXRlLm1mZi5jdW5pLmN6PgorICovCisKKyNpZm5kZWYgX1NQQVJDX09CSU9fSAorI2RlZmluZSBfU1BBUkNfT0JJT19ICisKKyNpbmNsdWRlIDxhc20vYXNpLmg+CisKKy8qIFRoaXMgd2VpcmQgbW9uc3RlciBsaWtlcyB0byB1c2UgdGhlIHZlcnkgdXBwZXIgcGFydHMgb2YKKyAgIDM2Yml0IFBBIGZvciB0aGVzZSB0aGluZ3MgOikgKi8KKyAgIAorLyogQ1NSIHNwYWNlIChmb3IgZWFjaCBYREJVUykKKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICB8ICAgMHhGRSAgfCAgIERFVklEICAgIHwgICAgICAgICAgICAgICAgfCBYREJVUyBJRCB8ICAgICAgICAgICAgICAgICAgIHwKKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAzNSAgICAgIDI4IDI3ICAgICAgICAyMCAxOSAgICAgICAgICAgIDEwIDkgICAgICAgIDggNyAgICAgICAgICAgICAgICAgMAorICovCisgICAKKyNkZWZpbmUgQ1NSX0JBU0VfQUREUgkJMHhlMDAwMDAwMAorI2RlZmluZSBDU1JfQ1BVX1NISUZUCQkoMzIgLSA0IC0gNSkKKyNkZWZpbmUgQ1NSX1hEQlVTX1NISUZUCQk4CisKKyNkZWZpbmUgQ1NSX0JBU0UoY3B1KSAoKChDU1JfQkFTRV9BRERSID4+IENTUl9DUFVfU0hJRlQpICsgY3B1KSA8PCBDU1JfQ1BVX1NISUZUKQorCisvKiBFQ1NSIHNwYWNlIChub3QgZm9yIGVhY2ggWERCVVMpCisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgfCAgIDB4RiAgfCBERVZJRFs3OjFdIHwgICAgICAgICAgICAgICAgCQkJICAgICAgICAgICB8CisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgMzUgICAgIDMyIDMxICAgICAgICAyNSAyNCAgICAgICAgICAgICAgICAgCQkJCSAgMAorICovCisgICAKKyNkZWZpbmUgRUNTUl9CQVNFX0FERFIJCTB4MDAwMDAwMDAKKyNkZWZpbmUgRUNTUl9DUFVfU0hJRlQJCSgzMiAtIDUpCisjZGVmaW5lIEVDU1JfREVWX1NISUZUCQkoMzIgLSA4KQorCisjZGVmaW5lIEVDU1JfQkFTRShjcHUpICgoY3B1KSA8PCBFQ1NSX0NQVV9TSElGVCkKKyNkZWZpbmUgRUNTUl9ERVZfQkFTRShkZXZpZCkgKChkZXZpZCkgPDwgRUNTUl9ERVZfU0hJRlQpIAorCisvKiBCdXMgV2F0Y2hlciAqLworI2RlZmluZSBCV19MT0NBTF9CQVNFCQkweGZmZjAwMDAwCisKKyNkZWZpbmUgQldfQ0lECQkJMHgwMDAwMDAwMAorI2RlZmluZSBCV19EQlVTX0NUUkwJCTB4MDAwMDAwMDgKKyNkZWZpbmUgQldfREJVU19EQVRBCQkweDAwMDAwMDEwCisjZGVmaW5lIEJXX0NUUkwJCQkweDAwMDAxMDAwCisjZGVmaW5lIEJXX0lOVFJfVEFCTEUJCTB4MDAwMDEwNDAKKyNkZWZpbmUgQldfSU5UUl9UQUJMRV9DTEVBUgkweDAwMDAxMDgwCisjZGVmaW5lIEJXX1BSRVNDQUxFUgkJMHgwMDAwMTBjMAorI2RlZmluZSBCV19QVElNRVJfTElNSVQJCTB4MDAwMDIwMDAKKyNkZWZpbmUgQldfUFRJTUVSX0NPVU5URVIyCTB4MDAwMDIwMDQKKyNkZWZpbmUgQldfUFRJTUVSX05ETElNSVQJMHgwMDAwMjAwOAorI2RlZmluZSBCV19QVElNRVJfQ1RSTAkJMHgwMDAwMjAwYworI2RlZmluZSBCV19QVElNRVJfQ09VTlRFUgkweDAwMDAyMDEwCisjZGVmaW5lIEJXX1RJTUVSX0xJTUlUCQkweDAwMDAzMDAwCisjZGVmaW5lIEJXX1RJTUVSX0NPVU5URVIyCTB4MDAwMDMwMDQKKyNkZWZpbmUgQldfVElNRVJfTkRMSU1JVAkweDAwMDAzMDA4CisjZGVmaW5lIEJXX1RJTUVSX0NUUkwJCTB4MDAwMDMwMGMKKyNkZWZpbmUgQldfVElNRVJfQ09VTlRFUgkweDAwMDAzMDEwCisKKy8qIEJXIENvbnRyb2wgKi8KKyNkZWZpbmUgQldfQ1RSTF9VU0VSX1RJTUVSCTB4MDAwMDAwMDQJLyogSXMgVXNlciBUaW1lciBGcmVlIHJ1biBlbmFibGVkICovCisKKy8qIEJvb3QgQnVzICovCisjZGVmaW5lIEJCX0xPQ0FMX0JBU0UJCTB4ZjAwMDAwMDAKKworI2RlZmluZSBCQl9TVEFUMQkJMHgwMDEwMDAwMAorI2RlZmluZSBCQl9TVEFUMgkJMHgwMDEyMDAwMAorI2RlZmluZSBCQl9TVEFUMwkJMHgwMDE0MDAwMAorI2RlZmluZSBCQl9MRURTCQkJMHgwMDJlMDAwMAorCisvKiBCaXRzIGluIEJCX1NUQVQyICovCisjZGVmaW5lIEJCX1NUQVQyX0FDX0lOVFIJMHgwNAkvKiBBaWVlISA1bXMgYW5kIHBvd2VyIGlzIGdvbmUuLi4gKi8KKyNkZWZpbmUgQkJfU1RBVDJfVE1QX0lOVFIJMHgxMAkvKiBNeSBQZW5ndWlucyBhcmUgYnVybmluZy4gQXJlIHlvdSBhYmxlIHRvIHNtZWxsIGl0PyAqLworI2RlZmluZSBCQl9TVEFUMl9GQU5fSU5UUgkweDIwCS8qIE15IGZhbiByZWZ1c2VzIHRvIHdvcmsgKi8KKyNkZWZpbmUgQkJfU1RBVDJfUFdSX0lOVFIJMHg0MAkvKiBPbiBTQzIwMDAsIG9uZSBvZiB0aGUgdHdvIEFDcyBkaWVkLiBPaywgd2UgZ28gb24uLi4gKi8KKyNkZWZpbmUgQkJfU1RBVDJfTUFTSwkJKEJCX1NUQVQyX0FDX0lOVFJ8QkJfU1RBVDJfVE1QX0lOVFJ8QkJfU1RBVDJfRkFOX0lOVFJ8QkJfU1RBVDJfUFdSX0lOVFIpCisKKy8qIENhY2hlIENvbnRyb2xsZXIgKi8KKyNkZWZpbmUgQ0NfQkFTRQkJMHgxRjAwMDAwCisjZGVmaW5lIENDX0RBVFNUUkVBTQkweDFGMDAwMDAgIC8qIERhdGEgc3RyZWFtIHJlZ2lzdGVyICovCisjZGVmaW5lIENDX0RBVFNJWkUJMHgxRjAwMDNGICAvKiBTaXplICovCisjZGVmaW5lIENDX1NSQ1NUUkVBTQkweDFGMDAxMDAgIC8qIFNvdXJjZSBzdHJlYW0gcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ0NfREVTU1RSRUFNCTB4MUYwMDIwMCAgLyogRGVzdGluYXRpb24gc3RyZWFtIHJlZ2lzdGVyICovCisjZGVmaW5lIENDX1JNQ09VTlQJMHgxRjAwMzAwICAvKiBDb3VudCBvZiByZWZlcmVuY2VzIGFuZCBtaXNzZXMgKi8KKyNkZWZpbmUgQ0NfSVBFTgkJMHgxRjAwNDA2ICAvKiBQZW5kaW5nIEludGVycnVwdHMgKi8KKyNkZWZpbmUgQ0NfSU1TSwkJMHgxRjAwNTA2ICAvKiBJbnRlcnJ1cHQgTWFzayAqLworI2RlZmluZSBDQ19JQ0xSCQkweDFGMDA2MDYgIC8qIENsZWFyIHBlbmRpbmcgSW50ZXJydXB0cyAqLworI2RlZmluZSBDQ19JR0VOCQkweDFGMDA3MDQgIC8qIEdlbmVyYXRlIEludGVycnVwdCByZWdpc3RlciAqLworI2RlZmluZSBDQ19TVEVTVAkweDFGMDA4MDQgIC8qIEludGVybmFsIHNlbGYtdGVzdCAqLworI2RlZmluZSBDQ19DUkVHCQkweDFGMDBBMDQgIC8qIENvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ0NfU1JFRwkJMHgxRjAwQjAwICAvKiBTdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ0NfUlJFRwkJMHgxRjAwQzA0ICAvKiBSZXNldCByZWdpc3RlciAqLworI2RlZmluZSBDQ19FUkVHCQkweDFGMDBFMDAgIC8qIEVycm9yIGNvZGUgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ0NfQ0lECQkweDFGMDBGMDQgIC8qIENvbXBvbmVudCBJRCAqLworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCitleHRlcm4gX19pbmxpbmVfXyBpbnQgYndfZ2V0X2ludHJfbWFzayhpbnQgc2J1c19sZXZlbCkKK3sKKwlpbnQgbWFzazsKKwkKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImxkdWhhIFslMV0gJTIsICUwIiA6CisJCQkgICAgICAiPXIiIChtYXNrKSA6CisJCQkgICAgICAiciIgKEJXX0xPQ0FMX0JBU0UgKyBCV19JTlRSX1RBQkxFICsgKHNidXNfbGV2ZWwgPDwgMykpLAorCQkJICAgICAgImkiIChBU0lfTV9DVEwpKTsKKwlyZXR1cm4gbWFzazsKK30KKworZXh0ZXJuIF9faW5saW5lX18gdm9pZCBid19jbGVhcl9pbnRyX21hc2soaW50IHNidXNfbGV2ZWwsIGludCBtYXNrKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fICgic3RoYSAlMCwgWyUxXSAlMiIgOiA6CisJCQkgICAgICAiciIgKG1hc2spLAorCQkJICAgICAgInIiIChCV19MT0NBTF9CQVNFICsgQldfSU5UUl9UQUJMRV9DTEVBUiArIChzYnVzX2xldmVsIDw8IDMpKSwKKwkJCSAgICAgICJpIiAoQVNJX01fQ1RMKSk7Cit9CisKK2V4dGVybiBfX2lubGluZV9fIHVuc2lnbmVkIGJ3X2dldF9wcm9mX2xpbWl0KGludCBjcHUpCit7CisJdW5zaWduZWQgbGltaXQ7CisJCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJsZGEgWyUxXSAlMiwgJTAiIDoKKwkJCSAgICAgICI9ciIgKGxpbWl0KSA6CisJCQkgICAgICAiciIgKENTUl9CQVNFKGNwdSkgKyBCV19QVElNRVJfTElNSVQpLAorCQkJICAgICAgImkiIChBU0lfTV9DVEwpKTsKKwlyZXR1cm4gbGltaXQ7Cit9CisKK2V4dGVybiBfX2lubGluZV9fIHZvaWQgYndfc2V0X3Byb2ZfbGltaXQoaW50IGNwdSwgdW5zaWduZWQgbGltaXQpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzdGEgJTAsIFslMV0gJTIiIDogOgorCQkJICAgICAgInIiIChsaW1pdCksCisJCQkgICAgICAiciIgKENTUl9CQVNFKGNwdSkgKyBCV19QVElNRVJfTElNSVQpLAorCQkJICAgICAgImkiIChBU0lfTV9DVEwpKTsKK30KKworZXh0ZXJuIF9faW5saW5lX18gdW5zaWduZWQgYndfZ2V0X2N0cmwoaW50IGNwdSkKK3sKKwl1bnNpZ25lZCBjdHJsOworCQorCV9fYXNtX18gX192b2xhdGlsZV9fICgibGRhIFslMV0gJTIsICUwIiA6CisJCQkgICAgICAiPXIiIChjdHJsKSA6CisJCQkgICAgICAiciIgKENTUl9CQVNFKGNwdSkgKyBCV19DVFJMKSwKKwkJCSAgICAgICJpIiAoQVNJX01fQ1RMKSk7CisJcmV0dXJuIGN0cmw7Cit9CisKK2V4dGVybiBfX2lubGluZV9fIHZvaWQgYndfc2V0X2N0cmwoaW50IGNwdSwgdW5zaWduZWQgY3RybCkKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN0YSAlMCwgWyUxXSAlMiIgOiA6CisJCQkgICAgICAiciIgKGN0cmwpLAorCQkJICAgICAgInIiIChDU1JfQkFTRShjcHUpICsgQldfQ1RSTCksCisJCQkgICAgICAiaSIgKEFTSV9NX0NUTCkpOworfQorCitleHRlcm4gdW5zaWduZWQgY2hhciBjcHVfbGVkc1szMl07CisKK2V4dGVybiBfX2lubGluZV9fIHZvaWQgc2hvd19sZWRzKGludCBjcHVpZCkKK3sKKwljcHVpZCAmPSAweDFlOworCV9fYXNtX18gX192b2xhdGlsZV9fICgic3RiYSAlMCwgWyUxXSAlMiIgOiA6CisJCQkgICAgICAiciIgKChjcHVfbGVkc1tjcHVpZF0gPDwgNCkgfCBjcHVfbGVkc1tjcHVpZCsxXSksCisJCQkgICAgICAiciIgKEVDU1JfQkFTRShjcHVpZCkgfCBCQl9MRURTKSwKKwkJCSAgICAgICJpIiAoQVNJX01fQ1RMKSk7Cit9CisKK2V4dGVybiBfX2lubGluZV9fIHVuc2lnbmVkIGNjX2dldF9pcGVuKHZvaWQpCit7CisJdW5zaWduZWQgcGVuZGluZzsKKwkKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImxkdWhhIFslMV0gJTIsICUwIiA6CisJCQkgICAgICAiPXIiIChwZW5kaW5nKSA6CisJCQkgICAgICAiciIgKENDX0lQRU4pLAorCQkJICAgICAgImkiIChBU0lfTV9NWENDKSk7CisJcmV0dXJuIHBlbmRpbmc7Cit9CisKK2V4dGVybiBfX2lubGluZV9fIHZvaWQgY2Nfc2V0X2ljbHIodW5zaWduZWQgY2xlYXIpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzdGhhICUwLCBbJTFdICUyIiA6IDoKKwkJCSAgICAgICJyIiAoY2xlYXIpLAorCQkJICAgICAgInIiIChDQ19JQ0xSKSwKKwkJCSAgICAgICJpIiAoQVNJX01fTVhDQykpOworfQorCitleHRlcm4gX19pbmxpbmVfXyB1bnNpZ25lZCBjY19nZXRfaW1zayh2b2lkKQoreworCXVuc2lnbmVkIG1hc2s7CisJCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJsZHVoYSBbJTFdICUyLCAlMCIgOgorCQkJICAgICAgIj1yIiAobWFzaykgOgorCQkJICAgICAgInIiIChDQ19JTVNLKSwKKwkJCSAgICAgICJpIiAoQVNJX01fTVhDQykpOworCXJldHVybiBtYXNrOworfQorCitleHRlcm4gX19pbmxpbmVfXyB2b2lkIGNjX3NldF9pbXNrKHVuc2lnbmVkIG1hc2spCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzdGhhICUwLCBbJTFdICUyIiA6IDoKKwkJCSAgICAgICJyIiAobWFzayksCisJCQkgICAgICAiciIgKENDX0lNU0spLAorCQkJICAgICAgImkiIChBU0lfTV9NWENDKSk7Cit9CisKK2V4dGVybiBfX2lubGluZV9fIHVuc2lnbmVkIGNjX2dldF9pbXNrX290aGVyKGludCBjcHVpZCkKK3sKKwl1bnNpZ25lZCBtYXNrOworCQorCV9fYXNtX18gX192b2xhdGlsZV9fICgibGR1aGEgWyUxXSAlMiwgJTAiIDoKKwkJCSAgICAgICI9ciIgKG1hc2spIDoKKwkJCSAgICAgICJyIiAoRUNTUl9CQVNFKGNwdWlkKSB8IENDX0lNU0spLAorCQkJICAgICAgImkiIChBU0lfTV9DVEwpKTsKKwlyZXR1cm4gbWFzazsKK30KKworZXh0ZXJuIF9faW5saW5lX18gdm9pZCBjY19zZXRfaW1za19vdGhlcihpbnQgY3B1aWQsIHVuc2lnbmVkIG1hc2spCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzdGhhICUwLCBbJTFdICUyIiA6IDoKKwkJCSAgICAgICJyIiAobWFzayksCisJCQkgICAgICAiciIgKEVDU1JfQkFTRShjcHVpZCkgfCBDQ19JTVNLKSwKKwkJCSAgICAgICJpIiAoQVNJX01fQ1RMKSk7Cit9CisKK2V4dGVybiBfX2lubGluZV9fIHZvaWQgY2Nfc2V0X2lnZW4odW5zaWduZWQgZ2VuKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fICgic3RhICUwLCBbJTFdICUyIiA6IDoKKwkJCSAgICAgICJyIiAoZ2VuKSwKKwkJCSAgICAgICJyIiAoQ0NfSUdFTiksCisJCQkgICAgICAiaSIgKEFTSV9NX01YQ0MpKTsKK30KKworLyogKy0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgKiB8IGJjYXN0IHwgIGRldmlkICAgICAgfCAgIHNpZCAgICAgfCAgICAgICAgICAgICAgbGV2ZWxzIG1hc2sgICAgICAgICAgIHwKKyAqICstLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICogIDMxICAgICAgMzAgICAgICAgICAyMyAyMiAgICAgICAxNSAxNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyAqLworI2RlZmluZSBJR0VOX01FU1NBR0UoYmNhc3QsIGRldmlkLCBzaWQsIGxldmVscykgXAorCSgoKGJjYXN0KSA8PCAzMSkgfCAoKGRldmlkKSA8PCAyMykgfCAoKHNpZCkgPDwgMTUpIHwgKGxldmVscykpCisgICAgICAgICAgICAKK2V4dGVybiBfX2lubGluZV9fIHZvaWQgc3VuNGRfc2VuZF9pcGkoaW50IGNwdSwgaW50IGxldmVsKQoreworCWNjX3NldF9pZ2VuKElHRU5fTUVTU0FHRSgwLCBjcHUgPDwgMywgNiArICgobGV2ZWwgPj4gMSkgJiA3KSwgMSA8PCAobGV2ZWwgLSAxKSkpOworfQorCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYgLyogIShfU1BBUkNfT0JJT19IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvb3BlbnByb20uaCBiL2luY2x1ZGUvYXNtLXNwYXJjL29wZW5wcm9tLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI5MjlhMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL29wZW5wcm9tLmgKQEAgLTAsMCArMSwyNTggQEAKKy8qICRJZDogb3BlbnByb20uaCx2IDEuMjQgMjAwMC8wNi8wNCAwNjoyMzo1MyBhbnRvbiBFeHAgJCAqLworI2lmbmRlZiBfX1NQQVJDX09QRU5QUk9NX0gKKyNkZWZpbmUgX19TUEFSQ19PUEVOUFJPTV9ICisKKy8qIG9wZW5wcm9tLmg6ICBQcm9tIHN0cnVjdHVyZXMgYW5kIGRlZmluZXMgZm9yIGFjY2VzcyB0byB0aGUgT1BFTkJPT1QKKyAqICAgICAgICAgICAgICBwcm9tIHJvdXRpbmVzIGFuZCBkYXRhIGFyZWFzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NSBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCisgKi8KKworI2luY2x1ZGUgPGFzbS92YWRkcnMuaD4KKworLyogRW1waXJpY2FsIGNvbnN0YW50cy4uLiAqLworI2RlZmluZQlMSU5VWF9PUFBST01fTUFHSUMgICAgICAweDEwMDEwNDA3CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisvKiBWMCBwcm9tIGRldmljZSBvcGVyYXRpb25zLiAqLworc3RydWN0IGxpbnV4X2Rldl92MF9mdW5jcyB7CisJaW50ICgqdjBfZGV2b3BlbikoY2hhciAqZGV2aWNlX3N0cik7CisJaW50ICgqdjBfZGV2Y2xvc2UpKGludCBkZXZfZGVzYyk7CisJaW50ICgqdjBfcmRibGtkZXYpKGludCBkZXZfZGVzYywgaW50IG51bV9ibGtzLCBpbnQgYmxrX3N0LCBjaGFyICpidWYpOworCWludCAoKnYwX3dyYmxrZGV2KShpbnQgZGV2X2Rlc2MsIGludCBudW1fYmxrcywgaW50IGJsa19zdCwgY2hhciAqYnVmKTsKKwlpbnQgKCp2MF93cm5ldGRldikoaW50IGRldl9kZXNjLCBpbnQgbnVtX2J5dGVzLCBjaGFyICpidWYpOworCWludCAoKnYwX3JkbmV0ZGV2KShpbnQgZGV2X2Rlc2MsIGludCBudW1fYnl0ZXMsIGNoYXIgKmJ1Zik7CisJaW50ICgqdjBfcmRjaGFyZGV2KShpbnQgZGV2X2Rlc2MsIGludCBudW1fYnl0ZXMsIGludCBkdW1teSwgY2hhciAqYnVmKTsKKwlpbnQgKCp2MF93cmNoYXJkZXYpKGludCBkZXZfZGVzYywgaW50IG51bV9ieXRlcywgaW50IGR1bW15LCBjaGFyICpidWYpOworCWludCAoKnYwX3NlZWtkZXYpKGludCBkZXZfZGVzYywgbG9uZyBsb2dpY2FsX29mZnN0LCBpbnQgZnJvbSk7Cit9OworCisvKiBWMiBhbmQgbGF0ZXIgcHJvbSBkZXZpY2Ugb3BlcmF0aW9ucy4gKi8KK3N0cnVjdCBsaW51eF9kZXZfdjJfZnVuY3MgeworCWludCAoKnYyX2luc3QycGtnKShpbnQgZCk7CS8qIENvbnZlcnQgaWhhbmRsZSB0byBwaGFuZGxlICovCisJY2hhciAqICgqdjJfZHVtYl9tZW1fYWxsb2MpKGNoYXIgKnZhLCB1bnNpZ25lZCBzeik7CisJdm9pZCAoKnYyX2R1bWJfbWVtX2ZyZWUpKGNoYXIgKnZhLCB1bnNpZ25lZCBzeik7CisKKwkvKiBUbyBtYXAgZGV2aWNlcyBpbnRvIHZpcnR1YWwgSS9PIHNwYWNlLiAqLworCWNoYXIgKiAoKnYyX2R1bWJfbW1hcCkoY2hhciAqdmlydGEsIGludCB3aGljaF9pbywgdW5zaWduZWQgcGFkZHIsIHVuc2lnbmVkIHN6KTsKKwl2b2lkICgqdjJfZHVtYl9tdW5tYXApKGNoYXIgKnZpcnRhLCB1bnNpZ25lZCBzaXplKTsKKworCWludCAoKnYyX2Rldl9vcGVuKShjaGFyICpkZXZwYXRoKTsKKwl2b2lkICgqdjJfZGV2X2Nsb3NlKShpbnQgZCk7CisJaW50ICgqdjJfZGV2X3JlYWQpKGludCBkLCBjaGFyICpidWYsIGludCBuYnl0ZXMpOworCWludCAoKnYyX2Rldl93cml0ZSkoaW50IGQsIGNoYXIgKmJ1ZiwgaW50IG5ieXRlcyk7CisJaW50ICgqdjJfZGV2X3NlZWspKGludCBkLCBpbnQgaGksIGludCBsbyk7CisKKwkvKiBOZXZlciBpc3N1ZWQgKG11bHRpc3RhZ2UgbG9hZCBzdXBwb3J0KSAqLworCXZvaWQgKCp2Ml93aGVlZTIpKHZvaWQpOworCXZvaWQgKCp2Ml93aGVlZTMpKHZvaWQpOworfTsKKworc3RydWN0IGxpbnV4X21saXN0X3YwIHsKKwlzdHJ1Y3QgbGludXhfbWxpc3RfdjAgKnRoZXJlc19tb3JlOworCWNoYXIgKnN0YXJ0X2FkcjsKKwl1bnNpZ25lZCBudW1fYnl0ZXM7Cit9OworCitzdHJ1Y3QgbGludXhfbWVtX3YwIHsKKwlzdHJ1Y3QgbGludXhfbWxpc3RfdjAgKip2MF90b3RwaHlzOworCXN0cnVjdCBsaW51eF9tbGlzdF92MCAqKnYwX3Byb21tYXA7CisJc3RydWN0IGxpbnV4X21saXN0X3YwICoqdjBfYXZhaWxhYmxlOyAvKiBXaGF0IHdlIGNhbiB1c2UgKi8KK307CisKKy8qIEFyZ3VtZW50cyBzZW50IHRvIHRoZSBrZXJuZWwgZnJvbSB0aGUgYm9vdCBwcm9tcHQuICovCitzdHJ1Y3QgbGludXhfYXJndW1lbnRzX3YwIHsKKwljaGFyICphcmd2WzhdOworCWNoYXIgYXJnc1sxMDBdOworCWNoYXIgYm9vdF9kZXZbMl07CisJaW50IGJvb3RfZGV2X2N0cmw7CisJaW50IGJvb3RfZGV2X3VuaXQ7CisJaW50IGRldl9wYXJ0aXRpb247CisJY2hhciAqa2VybmVsX2ZpbGVfbmFtZTsKKwl2b2lkICphaWVlZTE7ICAgICAgICAgICAvKiBYWFggKi8KK307CisKKy8qIFYyIGFuZCB1cCBib290IHRoaW5ncy4gKi8KK3N0cnVjdCBsaW51eF9ib290YXJnc192MiB7CisJY2hhciAqKmJvb3RwYXRoOworCWNoYXIgKipib290YXJnczsKKwlpbnQgKmZkX3N0ZGluOworCWludCAqZmRfc3Rkb3V0OworfTsKKworLyogVGhlIHRvcCBsZXZlbCBQUk9NIHZlY3Rvci4gKi8KK3N0cnVjdCBsaW51eF9yb212ZWMgeworCS8qIFZlcnNpb24gbnVtYmVycy4gKi8KKwl1bnNpZ25lZCBpbnQgcHZfbWFnaWNfY29va2llOworCXVuc2lnbmVkIGludCBwdl9yb212ZXJzOworCXVuc2lnbmVkIGludCBwdl9wbHVnaW5fcmV2aXNpb247CisJdW5zaWduZWQgaW50IHB2X3ByaW50cmV2OworCisJLyogVmVyc2lvbiAwIG1lbW9yeSBkZXNjcmlwdG9ycy4gKi8KKwlzdHJ1Y3QgbGludXhfbWVtX3YwIHB2X3YwbWVtOworCisJLyogTm9kZSBvcGVyYXRpb25zLiAqLworCXN0cnVjdCBsaW51eF9ub2Rlb3BzICpwdl9ub2Rlb3BzOworCisJY2hhciAqKnB2X2Jvb3RzdHI7CisJc3RydWN0IGxpbnV4X2Rldl92MF9mdW5jcyBwdl92MGRldm9wczsKKworCWNoYXIgKnB2X3N0ZGluOworCWNoYXIgKnB2X3N0ZG91dDsKKyNkZWZpbmUJUFJPTURFVl9LQkQJMAkJLyogaW5wdXQgZnJvbSBrZXlib2FyZCAqLworI2RlZmluZQlQUk9NREVWX1NDUkVFTgkwCQkvKiBvdXRwdXQgdG8gc2NyZWVuICovCisjZGVmaW5lCVBST01ERVZfVFRZQQkxCQkvKiBpbi9vdXQgdG8gdHR5YSAqLworI2RlZmluZQlQUk9NREVWX1RUWUIJMgkJLyogaW4vb3V0IHRvIHR0eWIgKi8KKworCS8qIEJsb2NraW5nIGdldGNoYXIvcHV0Y2hhci4gIE5PVCBSRUVOVFJBTlQhIChncnIpICovCisJaW50ICgqcHZfZ2V0Y2hhcikodm9pZCk7CisJdm9pZCAoKnB2X3B1dGNoYXIpKGludCBjaCk7CisKKwkvKiBOb24tYmxvY2tpbmcgdmFyaWFudHMuICovCisJaW50ICgqcHZfbmJnZXRjaGFyKSh2b2lkKTsKKwlpbnQgKCpwdl9uYnB1dGNoYXIpKGludCBjaCk7CisKKwl2b2lkICgqcHZfcHV0c3RyKShjaGFyICpzdHIsIGludCBsZW4pOworCisJLyogTWlzY2VsbGFueS4gKi8KKwl2b2lkICgqcHZfcmVib290KShjaGFyICpib290c3RyKTsKKwl2b2lkICgqcHZfcHJpbnRmKShfX2NvbnN0X18gY2hhciAqZm10LCAuLi4pOworCXZvaWQgKCpwdl9hYm9ydCkodm9pZCk7CisJX192b2xhdGlsZV9fIGludCAqcHZfdGlja3M7CisJdm9pZCAoKnB2X2hhbHQpKHZvaWQpOworCXZvaWQgKCoqcHZfc3luY2hvb2spKHZvaWQpOworCisJLyogRXZhbHVhdGUgYSBmb3J0aCBzdHJpbmcsIG5vdCBkaWZmZXJlbnQgcHJvdG8gZm9yIFYwIGFuZCBWMi0+dXAuICovCisJdW5pb24geworCQl2b2lkICgqdjBfZXZhbCkoaW50IGxlbiwgY2hhciAqc3RyKTsKKwkJdm9pZCAoKnYyX2V2YWwpKGNoYXIgKnN0cik7CisJfSBwdl9mb3J0aGV2YWw7CisKKwlzdHJ1Y3QgbGludXhfYXJndW1lbnRzX3YwICoqcHZfdjBib290YXJnczsKKworCS8qIEdldCBldGhlciBhZGRyZXNzLiAqLworCXVuc2lnbmVkIGludCAoKnB2X2VuYWRkcikoaW50IGQsIGNoYXIgKmVuYWRkcik7CisKKwlzdHJ1Y3QgbGludXhfYm9vdGFyZ3NfdjIgcHZfdjJib290YXJnczsKKwlzdHJ1Y3QgbGludXhfZGV2X3YyX2Z1bmNzIHB2X3YyZGV2b3BzOworCisJaW50IGZpbGxlclsxNV07CisKKwkvKiBUaGlzIG9uZSBpcyBzdW40Yy9zdW40IG9ubHkuICovCisJdm9pZCAoKnB2X3NldGN0eHQpKGludCBjdHh0LCBjaGFyICp2YSwgaW50IHBtZWcpOworCisJLyogUHJvbSB2ZXJzaW9uIDMgTXVsdGlwcm9jZXNzb3Igcm91dGluZXMuIFRoaXMgc3R1ZmYgaXMgY3JhenkuCisJICogTm8gam9rZS4gQ2FsbGluZyB0aGVzZSB3aGVuIHRoZXJlIGlzIG9ubHkgb25lIGNwdSBwcm9iYWJseQorCSAqIGNyYXNoZXMgdGhlIG1hY2hpbmUsIGhhdmUgdG8gdGVzdCB0aGlzLiA6LSkKKwkgKi8KKworCS8qIHYzX2NwdXN0YXJ0KCkgd2lsbCBzdGFydCB0aGUgY3B1ICd3aGljaGNwdScgaW4gbW11LWNvbnRleHQKKwkgKiAndGhpc2NvbnRleHQnIGV4ZWN1dGluZyBhdCBhZGRyZXNzICdwcm9nX2NvdW50ZXInCisJICovCisJaW50ICgqdjNfY3B1c3RhcnQpKHVuc2lnbmVkIGludCB3aGljaGNwdSwgaW50IGN0eHRibF9wdHIsCisJCQkgICBpbnQgdGhpc2NvbnRleHQsIGNoYXIgKnByb2dfY291bnRlcik7CisKKwkvKiB2M19jcHVzdG9wKCkgd2lsbCBjYXVzZSBjcHUgJ3doaWNoY3B1JyB0byBzdG9wIGV4ZWN1dGluZworCSAqIHVudGlsIGEgcmVzdW1lIGNwdSBjYWxsIGlzIG1hZGUuCisJICovCisJaW50ICgqdjNfY3B1c3RvcCkodW5zaWduZWQgaW50IHdoaWNoY3B1KTsKKworCS8qIHYzX2NwdWlkbGUoKSB3aWxsIGlkbGUgY3B1ICd3aGljaGNwdScgdW50aWwgYSBzdG9wIG9yCisJICogcmVzdW1lIGNwdSBjYWxsIGlzIG1hZGUuCisJICovCisJaW50ICgqdjNfY3B1aWRsZSkodW5zaWduZWQgaW50IHdoaWNoY3B1KTsKKworCS8qIHYzX2NwdXJlc3VtZSgpIHdpbGwgcmVzdW1lIHByb2Nlc3NvciAnd2hpY2hjcHUnIGV4ZWN1dGluZworCSAqIHN0YXJ0aW5nIHdpdGggd2hhdGV2ZXIgJ3BjJyBhbmQgJ25wYycgd2VyZSBsZWZ0IGF0IHRoZQorCSAqIGxhc3QgJ2lkbGUnIG9yICdzdG9wJyBjYWxsLgorCSAqLworCWludCAoKnYzX2NwdXJlc3VtZSkodW5zaWduZWQgaW50IHdoaWNoY3B1KTsKK307CisKKy8qIFJvdXRpbmVzIGZvciB0cmF2ZXJzaW5nIHRoZSBwcm9tIGRldmljZSB0cmVlLiAqLworc3RydWN0IGxpbnV4X25vZGVvcHMgeworCWludCAoKm5vX25leHRub2RlKShpbnQgbm9kZSk7CisJaW50ICgqbm9fY2hpbGQpKGludCBub2RlKTsKKwlpbnQgKCpub19wcm9wbGVuKShpbnQgbm9kZSwgY2hhciAqbmFtZSk7CisJaW50ICgqbm9fZ2V0cHJvcCkoaW50IG5vZGUsIGNoYXIgKm5hbWUsIGNoYXIgKnZhbCk7CisJaW50ICgqbm9fc2V0cHJvcCkoaW50IG5vZGUsIGNoYXIgKm5hbWUsIGNoYXIgKnZhbCwgaW50IGxlbik7CisJY2hhciAqICgqbm9fbmV4dHByb3ApKGludCBub2RlLCBjaGFyICpuYW1lKTsKK307CisKKy8qIE1vcmUgZnVuIFBST00gc3RydWN0dXJlcyBmb3IgZGV2aWNlIHByb2JpbmcuICovCisjZGVmaW5lIFBST01SRUdfTUFYICAgICAxNgorI2RlZmluZSBQUk9NVkFERFJfTUFYICAgMTYKKyNkZWZpbmUgUFJPTUlOVFJfTUFYICAgIDE1CisKK3N0cnVjdCBsaW51eF9wcm9tX3JlZ2lzdGVycyB7CisJdW5zaWduZWQgaW50IHdoaWNoX2lvOyAgICAgICAgIC8qIGlzIHRoaXMgaW4gT0JJTyBzcGFjZT8gKi8KKwl1bnNpZ25lZCBpbnQgcGh5c19hZGRyOyAgICAgICAgLyogVGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhpcyByZWdpc3RlciAqLworCXVuc2lnbmVkIGludCByZWdfc2l6ZTsgICAgICAgICAvKiBIb3cgbWFueSBieXRlcyBkb2VzIHRoaXMgcmVnaXN0ZXIgdGFrZSB1cD8gKi8KK307CisKK3N0cnVjdCBsaW51eF9wcm9tX2lycXMgeworCWludCBwcmk7ICAgIC8qIElSUSBwcmlvcml0eSAqLworCWludCB2ZWN0b3I7IC8qIFRoaXMgaXMgZm9vYmFyLCB3aGF0IGRvZXMgaXQgZG8/ICovCit9OworCisvKiBFbGVtZW50IG9mIHRoZSAicmFuZ2VzIiB2ZWN0b3IgKi8KK3N0cnVjdCBsaW51eF9wcm9tX3JhbmdlcyB7CisJdW5zaWduZWQgaW50IG90X2NoaWxkX3NwYWNlOworCXVuc2lnbmVkIGludCBvdF9jaGlsZF9iYXNlOwkJLyogQnVzIGZlZWxzIHRoaXMgKi8KKwl1bnNpZ25lZCBpbnQgb3RfcGFyZW50X3NwYWNlOworCXVuc2lnbmVkIGludCBvdF9wYXJlbnRfYmFzZTsJCS8qIENQVSBsb29rcyBmcm9tIGhlcmUgKi8KKwl1bnNpZ25lZCBpbnQgb3Jfc2l6ZTsKK307CisKKy8qIFJhbmdlcyBhbmQgcmVnIHByb3BlcnRpZXMgYXJlIGEgYml0IGRpZmZlcmVudCBmb3IgUENJLiAqLworc3RydWN0IGxpbnV4X3Byb21fcGNpX3JlZ2lzdGVycyB7CisJLyogCisJICogV2UgZG9uJ3Qga25vdyB3aGF0IGluZm9ybWF0aW9uIHRoaXMgZmllbGQgY29udGFpbi4KKwkgKiBXZSBndWVzcywgUENJIGRldmljZSBmdW5jdGlvbiBpcyBpbiBiaXRzIDE1OjgKKwkgKiBTbywgLi4uCisJICovCisJdW5zaWduZWQgaW50IHdoaWNoX2lvOyAgLyogTGV0IGl0IGJlIHdoaWNoX2lvICovCisKKwl1bnNpZ25lZCBpbnQgcGh5c19oaTsKKwl1bnNpZ25lZCBpbnQgcGh5c19sbzsKKworCXVuc2lnbmVkIGludCBzaXplX2hpOworCXVuc2lnbmVkIGludCBzaXplX2xvOworfTsKKworc3RydWN0IGxpbnV4X3Byb21fcGNpX3JhbmdlcyB7CisJdW5zaWduZWQgaW50IGNoaWxkX3BoeXNfaGk7CS8qIE9ubHkgY2VydGFpbiBiaXRzIGFyZSBlbmNvZGVkIGhlcmUuICovCisJdW5zaWduZWQgaW50IGNoaWxkX3BoeXNfbWlkOworCXVuc2lnbmVkIGludCBjaGlsZF9waHlzX2xvOworCisJdW5zaWduZWQgaW50IHBhcmVudF9waHlzX2hpOworCXVuc2lnbmVkIGludCBwYXJlbnRfcGh5c19sbzsKKworCXVuc2lnbmVkIGludCBzaXplX2hpOworCXVuc2lnbmVkIGludCBzaXplX2xvOworfTsKKworc3RydWN0IGxpbnV4X3Byb21fcGNpX2Fzc2lnbmVkX2FkZHJlc3NlcyB7CisJdW5zaWduZWQgaW50IHdoaWNoX2lvOworCisJdW5zaWduZWQgaW50IHBoeXNfaGk7CisJdW5zaWduZWQgaW50IHBoeXNfbG87CisKKwl1bnNpZ25lZCBpbnQgc2l6ZV9oaTsKKwl1bnNpZ25lZCBpbnQgc2l6ZV9sbzsKK307CisKK3N0cnVjdCBsaW51eF9wcm9tX2VidXNfcmFuZ2VzIHsKKwl1bnNpZ25lZCBpbnQgY2hpbGRfcGh5c19oaTsKKwl1bnNpZ25lZCBpbnQgY2hpbGRfcGh5c19sbzsKKworCXVuc2lnbmVkIGludCBwYXJlbnRfcGh5c19oaTsKKwl1bnNpZ25lZCBpbnQgcGFyZW50X3BoeXNfbWlkOworCXVuc2lnbmVkIGludCBwYXJlbnRfcGh5c19sbzsKKworCXVuc2lnbmVkIGludCBzaXplOworfTsKKworI2VuZGlmIC8qICEoX19BU1NFTUJMWV9fKSAqLworCisjZW5kaWYgLyogIShfX1NQQVJDX09QRU5QUk9NX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9vcGVucHJvbWlvLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9vcGVucHJvbWlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE3ZmI4ZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL29wZW5wcm9taW8uaApAQCAtMCwwICsxLDY5IEBACisjaWZuZGVmCV9TUEFSQ19PUEVOUFJPTUlPX0gKKyNkZWZpbmUJX1NQQVJDX09QRU5QUk9NSU9fSAorCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qCisgKiBTdW5PUyBhbmQgU29sYXJpcyAvZGV2L29wZW5wcm9tIGRlZmluaXRpb25zLiBUaGUgaW9jdGwgdmFsdWVzCisgKiB3ZXJlIGNob3NlbiB0byBiZSBleGFjdGx5IGVxdWFsIHRvIHRoZSBTdW5PUyBlcXVpdmFsZW50cy4KKyAqLworCitzdHJ1Y3Qgb3BlbnByb21pbworeworCXVfaW50CW9wcm9tX3NpemU7CQkvKiBBY3R1YWwgc2l6ZSBvZiB0aGUgb3Byb21fYXJyYXkuICovCisJY2hhcglvcHJvbV9hcnJheVsxXTsJCS8qIEhvbGRzIHByb3BlcnR5IG5hbWVzIGFuZCB2YWx1ZXMuICovCit9OworCisjZGVmaW5lCU9QUk9NTUFYUEFSQU0JNDA5NgkJLyogTWF4aW11bSBzaXplIG9mIG9wcm9tX2FycmF5LiAqLworCisjZGVmaW5lCU9QUk9NR0VUT1BUCQkweDIwMDA0RjAxCisjZGVmaW5lCU9QUk9NU0VUT1BUCQkweDIwMDA0RjAyCisjZGVmaW5lCU9QUk9NTlhUT1BUCQkweDIwMDA0RjAzCisjZGVmaW5lCU9QUk9NU0VUT1BUMgkJMHgyMDAwNEYwNAorI2RlZmluZQlPUFJPTU5FWFQJCTB4MjAwMDRGMDUKKyNkZWZpbmUJT1BST01DSElMRAkJMHgyMDAwNEYwNgorI2RlZmluZQlPUFJPTUdFVFBST1AJCTB4MjAwMDRGMDcKKyNkZWZpbmUJT1BST01OWFRQUk9QCQkweDIwMDA0RjA4CisjZGVmaW5lCU9QUk9NVTJQCQkweDIwMDA0RjA5CisjZGVmaW5lCU9QUk9NR0VUQ09OUwkJMHgyMDAwNEYwQQorI2RlZmluZQlPUFJPTUdFVEZCTkFNRQkJMHgyMDAwNEYwQgorI2RlZmluZQlPUFJPTUdFVEJPT1RBUkdTCTB4MjAwMDRGMEMKKy8qIExpbnV4IGV4dGVuc2lvbnMgKi8JCQkJLyogQXJndW1lbnRzIGluIG9wcm9tX2FycmF5OiAqLworI2RlZmluZSBPUFJPTVNFVENVUgkJMHgyMDAwNEZGMAkvKiBpbnQgbm9kZSAtIFNldHMgY3VycmVudCBub2RlICovCisjZGVmaW5lIE9QUk9NUENJMk5PREUJCTB4MjAwMDRGRjEJLyogaW50IHBjaV9idXMsIHBjaV9kZXZmbiAtIFNldHMgY3VycmVudCBub2RlIHRvIFBDSSBkZXZpY2UncyBub2RlICovCisjZGVmaW5lIE9QUk9NUEFUSDJOT0RFCQkweDIwMDA0RkYyCS8qIGNoYXIgcGF0aFtdIC0gU2V0IGN1cnJlbnQgbm9kZSBmcm9tIGZ1bGx5IHF1YWxpZmllZCBQUk9NIHBhdGggKi8KKworLyoKKyAqIFJldHVybiB2YWx1ZXMgZnJvbSBPUFJPTUdFVENPTlM6CisgKi8KKworI2RlZmluZSBPUFJPTUNPTlNfTk9UX1dTQ09OUyAgICAwCisjZGVmaW5lIE9QUk9NQ09OU19TVERJTl9JU19LQkQgIDB4MSAgICAgLyogc3RkaW4gZGV2aWNlIGlzIGtiZCAqLworI2RlZmluZSBPUFJPTUNPTlNfU1RET1VUX0lTX0ZCICAweDIgICAgIC8qIHN0ZG91dCBpcyBhIGZyYW1lYnVmZmVyICovCisjZGVmaW5lIE9QUk9NQ09OU19PUEVOUFJPTSAgICAgIDB4NCAgICAgLyogc3VwcG9ydHMgb3BlbmJvb3QgKi8KKworCisvKgorICogIE5ldEJTRC9PcGVuQlNEIC9kZXYvb3BlbnByb20gZGVmaW5pdGlvbnMuCisgKi8KKworc3RydWN0IG9waW9jZGVzYworeworCWludAlvcF9ub2RlaWQ7CQkvKiBQUk9NIE5vZGUgSUQgKHZhbHVlLXJlc3VsdCkgKi8KKwlpbnQJb3BfbmFtZWxlbjsJCS8qIExlbmd0aCBvZiBvcF9uYW1lLiAqLworCWNoYXIJX191c2VyICpvcF9uYW1lOwkvKiBQb2ludGVyIHRvIHRoZSBwcm9wZXJ0eSBuYW1lLiAqLworCWludAlvcF9idWZsZW47CQkvKiBMZW5ndGggb2Ygb3BfYnVmICh2YWx1ZS1yZXN1bHQpICovCisJY2hhcglfX3VzZXIgKm9wX2J1ZjsJCS8qIFBvaW50ZXIgdG8gYnVmZmVyLiAqLworfTsKKworI2RlZmluZQlPUElPQ0dFVAlfSU9XUignTycsIDEsIHN0cnVjdCBvcGlvY2Rlc2MpCisjZGVmaW5lCU9QSU9DU0VUCV9JT1coJ08nLCAyLCBzdHJ1Y3Qgb3Bpb2NkZXNjKQorI2RlZmluZQlPUElPQ05FWFRQUk9QCV9JT1dSKCdPJywgMywgc3RydWN0IG9waW9jZGVzYykKKyNkZWZpbmUJT1BJT0NHRVRPUFROT0RFCV9JT1IoJ08nLCA0LCBpbnQpCisjZGVmaW5lCU9QSU9DR0VUTkVYVAlfSU9XUignTycsIDUsIGludCkKKyNkZWZpbmUJT1BJT0NHRVRDSElMRAlfSU9XUignTycsIDYsIGludCkKKworI2VuZGlmIC8qIF9TUEFSQ19PUEVOUFJPTUlPX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvb3BsaWIuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL29wbGliLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU5NDQ1NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL29wbGliLmgKQEAgLTAsMCArMSwzMTcgQEAKKy8qICRJZDogb3BsaWIuaCx2IDEuMjMgMjAwMS8xMi8yMSAwMDo1NDozMSBkYXZlbSBFeHAgJAorICogb3BsaWIuaDogIERlc2NyaWJlcyB0aGUgaW50ZXJmYWNlIGFuZCBhdmFpbGFibGUgcm91dGluZXMgaW4gdGhlCisgKiAgICAgICAgICAgTGludXggUHJvbSBsaWJyYXJ5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NSBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCisgKi8KKworI2lmbmRlZiBfX1NQQVJDX09QTElCX0gKKyNkZWZpbmUgX19TUEFSQ19PUExJQl9ICisKKyNpbmNsdWRlIDxhc20vb3BlbnByb20uaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisKKy8qIFRoZSBtYXN0ZXIgcm9tdmVjIHBvaW50ZXIuLi4gKi8KK2V4dGVybiBzdHJ1Y3QgbGludXhfcm9tdmVjICpyb212ZWM7CisKKy8qIEVudW1lcmF0aW9uIHRvIGRlc2NyaWJlIHRoZSBwcm9tIG1ham9yIHZlcnNpb24gd2UgaGF2ZSBkZXRlY3RlZC4gKi8KK2VudW0gcHJvbV9tYWpvcl92ZXJzaW9uIHsKKwlQUk9NX1YwLCAgICAgIC8qIE9yaWdpbmFsIHN1bjRjIFYwIHByb20gKi8KKwlQUk9NX1YyLCAgICAgIC8qIHN1bjRjIGFuZCBlYXJseSBzdW40bSBWMiBwcm9tICovCisJUFJPTV9WMywgICAgICAvKiBzdW40bSBhbmQgbGF0ZXIsIHVwIHRvIHN1bjRkL3N1bjRlIG1hY2hpbmVzIFYzICovCisJUFJPTV9QMTI3NSwgICAvKiBJRUVFIGNvbXBsaWFudCBJU0EgYmFzZWQgU3VuIFBST00sIG9ubHkgc3VuNHUgKi8KKyAgICAgICAgUFJPTV9BUDEwMDAsICAvKiBhY3R1YWxseSBubyBwcm9tIGF0IGFsbCAqLworCVBST01fU1VONCwgICAgLyogT2xkIHN1bjQgcHJvbXMgYXJlIHRvdGFsbHkgZGlmZmVyZW50LCBidXQgd2UnbGwgc2hvZWhvcm4gaXQgdG8gbWFrZSBpdCBmaXQgKi8KK307CisKK2V4dGVybiBlbnVtIHByb21fbWFqb3JfdmVyc2lvbiBwcm9tX3ZlcnM7CisvKiBSZXZpc2lvbiwgYW5kIGZpcm13YXJlIHJldmlzaW9uLiAqLworZXh0ZXJuIHVuc2lnbmVkIGludCBwcm9tX3JldiwgcHJvbV9wcmV2OworCisvKiBSb290IG5vZGUgb2YgdGhlIHByb20gZGV2aWNlIHRyZWUsIHRoaXMgc3RheXMgY29uc3RhbnQgYWZ0ZXIKKyAqIGluaXRpYWxpemF0aW9uIGlzIGNvbXBsZXRlLgorICovCitleHRlcm4gaW50IHByb21fcm9vdF9ub2RlOworCisvKiBQUk9NIHN0ZGluIGFuZCBzdGRvdXQgKi8KK2V4dGVybiBpbnQgcHJvbV9zdGRpbiwgcHJvbV9zdGRvdXQ7CisKKy8qIFBvaW50ZXIgdG8gcHJvbSBzdHJ1Y3R1cmUgY29udGFpbmluZyB0aGUgZGV2aWNlIHRyZWUgdHJhdmVyc2FsCisgKiBhbmQgdXNhZ2UgdXRpbGl0eSBmdW5jdGlvbnMuICBPbmx5IHByb20tbGliIHNob3VsZCB1c2UgdGhlc2UsCisgKiB1c2VycyB1c2UgdGhlIGludGVyZmFjZSBkZWZpbmVkIGJ5IHRoZSBsaWJyYXJ5IG9ubHkhCisgKi8KK2V4dGVybiBzdHJ1Y3QgbGludXhfbm9kZW9wcyAqcHJvbV9ub2Rlb3BzOworCisvKiBUaGUgZnVuY3Rpb25zLi4uICovCisKKy8qIFlvdSBtdXN0IGNhbGwgcHJvbV9pbml0KCkgYmVmb3JlIHVzaW5nIGFueSBvZiB0aGUgbGlicmFyeSBzZXJ2aWNlcywKKyAqIHByZWZlcmFibHkgYXMgZWFybHkgYXMgcG9zc2libGUuICBQYXNzIGl0IHRoZSByb212ZWMgcG9pbnRlci4KKyAqLworZXh0ZXJuIHZvaWQgcHJvbV9pbml0KHN0cnVjdCBsaW51eF9yb212ZWMgKnJvbV9wdHIpOworCisvKiBCb290IGFyZ3VtZW50IGFjcXVpc2l0aW9uLCByZXR1cm5zIHRoZSBib290IGNvbW1hbmQgbGluZSBzdHJpbmcuICovCitleHRlcm4gY2hhciAqcHJvbV9nZXRib290YXJncyh2b2lkKTsKKworLyogRGV2aWNlIHV0aWxpdGllcy4gKi8KKworLyogTWFwIGFuZCB1bm1hcCBkZXZpY2VzIGluIElPIHNwYWNlIGF0IHZpcnR1YWwgYWRkcmVzc2VzLiBOb3RlIHRoYXQgdGhlCisgKiB2aXJ0dWFsIGFkZHJlc3MgeW91IHBhc3MgaXMgYSByZXF1ZXN0IGFuZCB0aGUgcHJvbSBtYXkgcHV0IHlvdXIgbWFwcGluZ3MKKyAqIHNvbWV3aGVyZSBlbHNlLCBzbyBjaGVjayB5b3VyIHJldHVybiB2YWx1ZSBhcyB0aGF0IGlzIHdoZXJlIHlvdXIgbmV3CisgKiBtYXBwaW5ncyByZWFsbHkgYXJlIQorICoKKyAqIEFub3RoZXIgbm90ZSwgdGhlc2UgYXJlIG9ubHkgYXZhaWxhYmxlIG9uIFYyIG9yIGhpZ2hlciBwcm9tcyEKKyAqLworZXh0ZXJuIGNoYXIgKnByb21fbWFwaW8oY2hhciAqdmlydF9oaW50LCBpbnQgaW9fc3BhY2UsIHVuc2lnbmVkIGludCBwaHlzX2FkZHIsIHVuc2lnbmVkIGludCBudW1fYnl0ZXMpOworZXh0ZXJuIHZvaWQgcHJvbV91bm1hcGlvKGNoYXIgKnZpcnRfYWRkciwgdW5zaWduZWQgaW50IG51bV9ieXRlcyk7CisKKy8qIERldmljZSBvcGVyYXRpb25zLiAqLworCisvKiBPcGVuIHRoZSBkZXZpY2UgZGVzY3JpYmVkIGJ5IHRoZSBwYXNzZWQgc3RyaW5nLiAgTm90ZSwgdGhhdCB0aGUgZm9ybWF0CisgKiBvZiB0aGUgc3RyaW5nIGlzIGRpZmZlcmVudCBvbiBWMCB2cy4gVjItPmhpZ2hlciBwcm9tcy4gIFRoZSBjYWxsZXIgbXVzdAorICoga25vdyB3aGF0IGhlL3NoZSBpcyBkb2luZyEgIFJldHVybnMgdGhlIGRldmljZSBkZXNjcmlwdG9yLCBhbiBpbnQuCisgKi8KK2V4dGVybiBpbnQgcHJvbV9kZXZvcGVuKGNoYXIgKmRldmljZV9zdHJpbmcpOworCisvKiBDbG9zZSBhIHByZXZpb3VzbHkgb3BlbmVkIGRldmljZSBkZXNjcmliZWQgYnkgdGhlIHBhc3NlZCBpbnRlZ2VyCisgKiBkZXNjcmlwdG9yLgorICovCitleHRlcm4gaW50IHByb21fZGV2Y2xvc2UoaW50IGRldmljZV9oYW5kbGUpOworCisvKiBEbyBhIHNlZWsgb3BlcmF0aW9uIG9uIHRoZSBkZXZpY2UgZGVzY3JpYmVkIGJ5IHRoZSBwYXNzZWQgaW50ZWdlcgorICogZGVzY3JpcHRvci4KKyAqLworZXh0ZXJuIHZvaWQgcHJvbV9zZWVrKGludCBkZXZpY2VfaGFuZGxlLCB1bnNpZ25lZCBpbnQgc2Vla19oaXZhbCwKKwkJICAgICAgdW5zaWduZWQgaW50IHNlZWtfbG93dmFsKTsKKworLyogTWFjaGluZSBtZW1vcnkgY29uZmlndXJhdGlvbiByb3V0aW5lLiAqLworCisvKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBWMCBmb3JtYXQgbWVtb3J5IGRlc2NyaXB0b3IgdGFibGUsIGl0IGhhcyB0aHJlZQorICogZW50cmllcy4gIE9uZSBmb3IgdGhlIHRvdGFsIGFtb3VudCBvZiBwaHlzaWNhbCByYW0gb24gdGhlIG1hY2hpbmUsIG9uZQorICogZm9yIHRoZSBhbW91bnQgb2YgcGh5c2ljYWwgcmFtIGF2YWlsYWJsZSwgYW5kIG9uZSBkZXNjcmliaW5nIHRoZSB2aXJ0dWFsCisgKiBhcmVhcyB3aGljaCBhcmUgYWxsb2NhdGVkIGJ5IHRoZSBwcm9tLiAgU28sIGluIGEgc2Vuc2UgdGhlIHBoeXNpY2FsCisgKiBhdmFpbGFibGUgaXMgYSBjYWxjdWxhdGlvbiBvZiB0aGUgdG90YWwgcGh5c2ljYWwgbWludXMgdGhlIHBoeXNpY2FsIG1hcHBlZAorICogYnkgdGhlIHByb20gd2l0aCB2aXJ0dWFsIG1hcHBpbmdzLgorICoKKyAqIFRoZXNlIGxpc3RzIGFyZSByZXR1cm5lZCBwcmUtc29ydGVkLCB0aGlzIHNob3VsZCBtYWtlIHlvdXIgbGlmZSBlYXNpZXIKKyAqIHNpbmNlIHRoZSBwcm9tIGl0c2VsZiBpcyB3YXkgdG9vIGxhenkgdG8gZG8gc3VjaCBuaWNlIHRoaW5ncy4KKyAqLworZXh0ZXJuIHN0cnVjdCBsaW51eF9tZW1fdjAgKnByb21fbWVtaW5mbyh2b2lkKTsKKworLyogTWlzY2VsbGFuZW91cyByb3V0aW5lcywgZG9uJ3QgcmVhbGx5IGZpdCBpbiBhbnkgY2F0ZWdvcnkgcGVyIHNlLiAqLworCisvKiBSZWJvb3QgdGhlIG1hY2hpbmUgd2l0aCB0aGUgY29tbWFuZCBsaW5lIHBhc3NlZC4gKi8KK2V4dGVybiB2b2lkIHByb21fcmVib290KGNoYXIgKmJvb3RfY29tbWFuZCk7CisKKy8qIEV2YWx1YXRlIHRoZSBmb3J0aCBzdHJpbmcgcGFzc2VkLiAqLworZXh0ZXJuIHZvaWQgcHJvbV9mZXZhbChjaGFyICpmb3J0aF9zdHJpbmcpOworCisvKiBFbnRlciB0aGUgcHJvbSwgd2l0aCBwb3NzaWJpbGl0eSBvZiBjb250aW51YXRpb24gd2l0aCB0aGUgJ2dvJworICogY29tbWFuZCBpbiBuZXdlciBwcm9tcy4KKyAqLworZXh0ZXJuIHZvaWQgcHJvbV9jbWRsaW5lKHZvaWQpOworCisvKiBFbnRlciB0aGUgcHJvbSwgd2l0aCBubyBjaGFuY2Ugb2YgY29udGludWF0aW9uIGZvciB0aGUgc3RhbmQtYWxvbmUKKyAqIHdoaWNoIGNhbGxzIHRoaXMuCisgKi8KK2V4dGVybiB2b2lkIHByb21faGFsdCh2b2lkKSBfX2F0dHJpYnV0ZV9fICgobm9yZXR1cm4pKTsKKworLyogU2V0IHRoZSBQUk9NICdzeW5jJyBjYWxsYmFjayBmdW5jdGlvbiB0byB0aGUgcGFzc2VkIGZ1bmN0aW9uIHBvaW50ZXIuCisgKiBXaGVuIHRoZSB1c2VyIGdpdmVzIHRoZSAnc3luYycgY29tbWFuZCBhdCB0aGUgcHJvbSBwcm9tcHQgd2hpbGUgdGhlCisgKiBrZXJuZWwgaXMgc3RpbGwgYWN0aXZlLCB0aGUgcHJvbSB3aWxsIGNhbGwgdGhpcyByb3V0aW5lLgorICoKKyAqIFhYWCBUaGUgYXJndW1lbnRzIGFyZSBkaWZmZXJlbnQgb24gVjAgdnMuIFYyLT5oaWdoZXIgcHJvbXMsIGdycnIhIFhYWAorICovCit0eXBlZGVmIHZvaWQgKCpzeW5jX2Z1bmNfdCkodm9pZCk7CitleHRlcm4gdm9pZCBwcm9tX3NldHN5bmMoc3luY19mdW5jX3QgZnVuY19wdHIpOworCisvKiBBY3F1aXJlIHRoZSBJRFBST00gb2YgdGhlIHJvb3Qgbm9kZSBpbiB0aGUgcHJvbSBkZXZpY2UgdHJlZS4gIFRoaXMKKyAqIGdldHMgcGFzc2VkIGEgYnVmZmVyIHdoZXJlIHlvdSB3b3VsZCBsaWtlIGl0IHN0dWZmZWQuICBUaGUgcmV0dXJuIHZhbHVlCisgKiBpcyB0aGUgZm9ybWF0IHR5cGUgb2YgdGhpcyBpZHByb20gb3IgMHhmZiBvbiBlcnJvci4KKyAqLworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgcHJvbV9nZXRfaWRwcm9tKGNoYXIgKmlkcF9idWZmZXIsIGludCBpZHBidWZfc2l6ZSk7CisKKy8qIEdldCB0aGUgcHJvbSBtYWpvciB2ZXJzaW9uLiAqLworZXh0ZXJuIGludCBwcm9tX3ZlcnNpb24odm9pZCk7CisKKy8qIEdldCB0aGUgcHJvbSBwbHVnaW4gcmV2aXNpb24uICovCitleHRlcm4gaW50IHByb21fZ2V0cmV2KHZvaWQpOworCisvKiBHZXQgdGhlIHByb20gZmlybXdhcmUgcmV2aXNpb24uICovCitleHRlcm4gaW50IHByb21fZ2V0cHJldih2b2lkKTsKKworLyogQ2hhcmFjdGVyIG9wZXJhdGlvbnMgdG8vZnJvbSB0aGUgY29uc29sZS4uLi4gKi8KKworLyogTm9uLWJsb2NraW5nIGdldCBjaGFyYWN0ZXIgZnJvbSBjb25zb2xlLiAqLworZXh0ZXJuIGludCBwcm9tX25iZ2V0Y2hhcih2b2lkKTsKKworLyogTm9uLWJsb2NraW5nIHB1dCBjaGFyYWN0ZXIgdG8gY29uc29sZS4gKi8KK2V4dGVybiBpbnQgcHJvbV9uYnB1dGNoYXIoY2hhciBjaGFyYWN0ZXIpOworCisvKiBCbG9ja2luZyBnZXQgY2hhcmFjdGVyIGZyb20gY29uc29sZS4gKi8KK2V4dGVybiBjaGFyIHByb21fZ2V0Y2hhcih2b2lkKTsKKworLyogQmxvY2tpbmcgcHV0IGNoYXJhY3RlciB0byBjb25zb2xlLiAqLworZXh0ZXJuIHZvaWQgcHJvbV9wdXRjaGFyKGNoYXIgY2hhcmFjdGVyKTsKKworLyogUHJvbSdzIGludGVybmFsIHJvdXRpbmVzLCBkb24ndCB1c2UgaW4ga2VybmVsL2Jvb3QgY29kZS4gKi8KK2V4dGVybiB2b2lkIHByb21fcHJpbnRmKGNoYXIgKmZtdCwgLi4uKTsKK2V4dGVybiB2b2lkIHByb21fd3JpdGUoY29uc3QgY2hhciAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuKTsKKworLyogUXVlcnkgZm9yIGlucHV0IGRldmljZSB0eXBlICovCisKK2VudW0gcHJvbV9pbnB1dF9kZXZpY2UgeworCVBST01ERVZfSUtCRCwJCQkvKiBpbnB1dCBmcm9tIGtleWJvYXJkICovCisJUFJPTURFVl9JVFRZQSwJCQkvKiBpbnB1dCBmcm9tIHR0eWEgKi8KKwlQUk9NREVWX0lUVFlCLAkJCS8qIGlucHV0IGZyb20gdHR5YiAqLworCVBST01ERVZfSV9VTkssCit9OworCitleHRlcm4gZW51bSBwcm9tX2lucHV0X2RldmljZSBwcm9tX3F1ZXJ5X2lucHV0X2RldmljZSh2b2lkKTsKKworLyogUXVlcnkgZm9yIG91dHB1dCBkZXZpY2UgdHlwZSAqLworCitlbnVtIHByb21fb3V0cHV0X2RldmljZSB7CisJUFJPTURFVl9PU0NSRUVOLAkJLyogdG8gc2NyZWVuICovCisJUFJPTURFVl9PVFRZQSwJCQkvKiB0byB0dHlhICovCisJUFJPTURFVl9PVFRZQiwJCQkvKiB0byB0dHliICovCisJUFJPTURFVl9PX1VOSywKK307CisKK2V4dGVybiBlbnVtIHByb21fb3V0cHV0X2RldmljZSBwcm9tX3F1ZXJ5X291dHB1dF9kZXZpY2Uodm9pZCk7CisKKy8qIE11bHRpcHJvY2Vzc29yIG9wZXJhdGlvbnMuLi4gKi8KKworLyogU3RhcnQgdGhlIENQVSB3aXRoIHRoZSBnaXZlbiBkZXZpY2UgdHJlZSBub2RlLCBjb250ZXh0IHRhYmxlLCBhbmQgY29udGV4dAorICogYXQgdGhlIHBhc3NlZCBwcm9ncmFtIGNvdW50ZXIuCisgKi8KK2V4dGVybiBpbnQgcHJvbV9zdGFydGNwdShpbnQgY3B1bm9kZSwgc3RydWN0IGxpbnV4X3Byb21fcmVnaXN0ZXJzICpjb250ZXh0X3RhYmxlLAorCQkJIGludCBjb250ZXh0LCBjaGFyICpwcm9ncmFtX2NvdW50ZXIpOworCisvKiBTdG9wIHRoZSBDUFUgd2l0aCB0aGUgcGFzc2VkIGRldmljZSB0cmVlIG5vZGUuICovCitleHRlcm4gaW50IHByb21fc3RvcGNwdShpbnQgY3B1bm9kZSk7CisKKy8qIElkbGUgdGhlIENQVSB3aXRoIHRoZSBwYXNzZWQgZGV2aWNlIHRyZWUgbm9kZS4gKi8KK2V4dGVybiBpbnQgcHJvbV9pZGxlY3B1KGludCBjcHVub2RlKTsKKworLyogUmUtU3RhcnQgdGhlIENQVSB3aXRoIHRoZSBwYXNzZWQgZGV2aWNlIHRyZWUgbm9kZS4gKi8KK2V4dGVybiBpbnQgcHJvbV9yZXN0YXJ0Y3B1KGludCBjcHVub2RlKTsKKworLyogUFJPTSBtZW1vcnkgYWxsb2NhdGlvbiBmYWNpbGl0aWVzLi4uICovCisKKy8qIEFsbG9jYXRlZCBhdCBwb3NzaWJseSB0aGUgZ2l2ZW4gdmlydHVhbCBhZGRyZXNzIGEgY2h1bmsgb2YgdGhlCisgKiBpbmRpY2F0ZWQgc2l6ZS4KKyAqLworZXh0ZXJuIGNoYXIgKnByb21fYWxsb2MoY2hhciAqdmlydF9oaW50LCB1bnNpZ25lZCBpbnQgc2l6ZSk7CisKKy8qIEZyZWUgYSBwcmV2aW91c2x5IGFsbG9jYXRlZCBjaHVuay4gKi8KK2V4dGVybiB2b2lkIHByb21fZnJlZShjaGFyICp2aXJ0X2FkZHIsIHVuc2lnbmVkIGludCBzaXplKTsKKworLyogU3VuNC9zdW40YyBzcGVjaWZpYyBtZW1vcnktbWFuYWdlbWVudCBzdGFydHVwIGhvb2suICovCisKKy8qIE1hcCB0aGUgcGFzc2VkIHNlZ21lbnQgaW4gdGhlIGdpdmVuIGNvbnRleHQgYXQgdGhlIHBhc3NlZAorICogdmlydHVhbCBhZGRyZXNzLgorICovCitleHRlcm4gdm9pZCBwcm9tX3B1dHNlZ21lbnQoaW50IGNvbnRleHQsIHVuc2lnbmVkIGxvbmcgdmlydF9hZGRyLAorCQkJICAgIGludCBwaHlzaWNhbF9zZWdtZW50KTsKKworCisvKiBQUk9NIGRldmljZSB0cmVlIHRyYXZlcnNhbCBmdW5jdGlvbnMuLi4gKi8KKworI2lmZGVmIFBST01MSUJfSU5URVJOQUwKKworLyogSW50ZXJuYWwgdmVyc2lvbiBvZiBwcm9tX2dldGNoaWxkLiAqLworZXh0ZXJuIGludCBfX3Byb21fZ2V0Y2hpbGQoaW50IHBhcmVudF9ub2RlKTsKKworLyogSW50ZXJuYWwgdmVyc2lvbiBvZiBwcm9tX2dldHNpYmxpbmcuICovCitleHRlcm4gaW50IF9fcHJvbV9nZXRzaWJsaW5nKGludCBub2RlKTsKKworI2VuZGlmCisKKworLyogR2V0IHRoZSBjaGlsZCBub2RlIG9mIHRoZSBnaXZlbiBub2RlLCBvciB6ZXJvIGlmIG5vIGNoaWxkIGV4aXN0cy4gKi8KK2V4dGVybiBpbnQgcHJvbV9nZXRjaGlsZChpbnQgcGFyZW50X25vZGUpOworCisvKiBHZXQgdGhlIG5leHQgc2libGluZyBub2RlIG9mIHRoZSBnaXZlbiBub2RlLCBvciB6ZXJvIGlmIG5vIGZ1cnRoZXIKKyAqIHNpYmxpbmdzIGV4aXN0LgorICovCitleHRlcm4gaW50IHByb21fZ2V0c2libGluZyhpbnQgbm9kZSk7CisKKy8qIEdldCB0aGUgbGVuZ3RoLCBhdCB0aGUgcGFzc2VkIG5vZGUsIG9mIHRoZSBnaXZlbiBwcm9wZXJ0eSB0eXBlLgorICogUmV0dXJucyAtMSBvbiBlcnJvciAoaWUuIG5vIHN1Y2ggcHJvcGVydHkgYXQgdGhpcyBub2RlKS4KKyAqLworZXh0ZXJuIGludCBwcm9tX2dldHByb3BsZW4oaW50IHRoaXNub2RlLCBjaGFyICpwcm9wZXJ0eSk7CisKKy8qIEZldGNoIHRoZSByZXF1ZXN0ZWQgcHJvcGVydHkgdXNpbmcgdGhlIGdpdmVuIGJ1ZmZlci4gIFJldHVybnMKKyAqIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhlIHByb20gcHV0IGludG8geW91ciBidWZmZXIgb3IgLTEgb24gZXJyb3IuCisgKi8KK2V4dGVybiBpbnQgX19tdXN0X2NoZWNrIHByb21fZ2V0cHJvcGVydHkoaW50IHRoaXNub2RlLCBjaGFyICpwcm9wZXJ0eSwKKwkJCQkJIGNoYXIgKnByb3BfYnVmZmVyLCBpbnQgcHJvcGJ1Zl9zaXplKTsKKworLyogQWNxdWlyZSBhbiBpbnRlZ2VyIHByb3BlcnR5LiAqLworZXh0ZXJuIGludCBwcm9tX2dldGludChpbnQgbm9kZSwgY2hhciAqcHJvcGVydHkpOworCisvKiBBY3F1aXJlIGFuIGludGVnZXIgcHJvcGVydHksIHdpdGggYSBkZWZhdWx0IHZhbHVlLiAqLworZXh0ZXJuIGludCBwcm9tX2dldGludGRlZmF1bHQoaW50IG5vZGUsIGNoYXIgKnByb3BlcnR5LCBpbnQgZGVmdmFsKTsKKworLyogQWNxdWlyZSBhIGJvb2xlYW4gcHJvcGVydHksIDA9RkFMU0UgMT1UUlVFLiAqLworZXh0ZXJuIGludCBwcm9tX2dldGJvb2woaW50IG5vZGUsIGNoYXIgKnByb3ApOworCisvKiBBY3F1aXJlIGEgc3RyaW5nIHByb3BlcnR5LCBudWxsIHN0cmluZyBvbiBlcnJvci4gKi8KK2V4dGVybiB2b2lkIHByb21fZ2V0c3RyaW5nKGludCBub2RlLCBjaGFyICpwcm9wLCBjaGFyICpidWYsIGludCBidWZzaXplKTsKKworLyogRG9lcyB0aGUgcGFzc2VkIG5vZGUgaGF2ZSB0aGUgZ2l2ZW4gIm5hbWUiPyBZRVM9MSBOTz0wICovCitleHRlcm4gaW50IHByb21fbm9kZW1hdGNoKGludCB0aGlzbm9kZSwgY2hhciAqbmFtZSk7CisKKy8qIFB1dHMgaW4gYnVmZmVyIGEgcHJvbSBuYW1lIGluIHRoZSBmb3JtIG5hbWVAeCx5IG9yIG5hbWUgKHggZm9yIHdoaWNoX2lvIAorICogYW5kIHkgZm9yIGZpcnN0IHJlZ3MgcGh5cyBhZGRyZXNzCisgKi8KK2V4dGVybiBpbnQgcHJvbV9nZXRuYW1lKGludCBub2RlLCBjaGFyICpidWYsIGludCBidWZsZW4pOworCisvKiBTZWFyY2ggYWxsIHNpYmxpbmdzIHN0YXJ0aW5nIGF0IHRoZSBwYXNzZWQgbm9kZSBmb3IgIm5hbWUiIG1hdGNoaW5nCisgKiB0aGUgZ2l2ZW4gc3RyaW5nLiAgUmV0dXJucyB0aGUgbm9kZSBvbiBzdWNjZXNzLCB6ZXJvIG9uIGZhaWx1cmUuCisgKi8KK2V4dGVybiBpbnQgcHJvbV9zZWFyY2hzaWJsaW5ncyhpbnQgbm9kZV9zdGFydCwgY2hhciAqbmFtZSk7CisKKy8qIFJldHVybiB0aGUgZmlyc3QgcHJvcGVydHkgdHlwZSwgYXMgYSBzdHJpbmcsIGZvciB0aGUgZ2l2ZW4gbm9kZS4KKyAqIFJldHVybnMgYSBudWxsIHN0cmluZyBvbiBlcnJvci4KKyAqLworZXh0ZXJuIGNoYXIgKnByb21fZmlyc3Rwcm9wKGludCBub2RlLCBjaGFyICpidWZmZXIpOworCisvKiBSZXR1cm5zIHRoZSBuZXh0IHByb3BlcnR5IGFmdGVyIHRoZSBwYXNzZWQgcHJvcGVydHkgZm9yIHRoZSBnaXZlbgorICogbm9kZS4gIFJldHVybnMgbnVsbCBzdHJpbmcgb24gZmFpbHVyZS4KKyAqLworZXh0ZXJuIGNoYXIgKnByb21fbmV4dHByb3AoaW50IG5vZGUsIGNoYXIgKnByZXZfcHJvcGVydHksIGNoYXIgKmJ1ZmZlcik7CisKKy8qIFJldHVybnMgcGhhbmRsZSBvZiB0aGUgcGF0aCBzcGVjaWZpZWQgKi8KK2V4dGVybiBpbnQgcHJvbV9maW5kZGV2aWNlKGNoYXIgKm5hbWUpOworCisvKiBSZXR1cm5zIDEgaWYgdGhlIHNwZWNpZmllZCBub2RlIGhhcyBnaXZlbiBwcm9wZXJ0eS4gKi8KK2V4dGVybiBpbnQgcHJvbV9ub2RlX2hhc19wcm9wZXJ0eShpbnQgbm9kZSwgY2hhciAqcHJvcGVydHkpOworCisvKiBTZXQgdGhlIGluZGljYXRlZCBwcm9wZXJ0eSBhdCB0aGUgZ2l2ZW4gbm9kZSB3aXRoIHRoZSBwYXNzZWQgdmFsdWUuCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgb2YgeW91ciB2YWx1ZSB0aGF0IHRoZSBwcm9tIHRvb2suCisgKi8KK2V4dGVybiBpbnQgcHJvbV9zZXRwcm9wKGludCBub2RlLCBjaGFyICpwcm9wX25hbWUsIGNoYXIgKnByb3BfdmFsdWUsCisJCQlpbnQgdmFsdWVfc2l6ZSk7CisJCQkKK2V4dGVybiBpbnQgcHJvbV9wYXRodG9pbm9kZShjaGFyICpwYXRoKTsKK2V4dGVybiBpbnQgcHJvbV9pbnN0MnBrZyhpbnQpOworCisvKiBEb3JraW5nIHdpdGggQnVzIHJhbmdlcy4uLiAqLworCisvKiBBcHBseSBwcm9tbGliIHByb2JlcyBPQklPIHJhbmdlcyB0byByZWdpc3RlcnMuICovCitleHRlcm4gdm9pZCBwcm9tX2FwcGx5X29iaW9fcmFuZ2VzKHN0cnVjdCBsaW51eF9wcm9tX3JlZ2lzdGVycyAqb2Jpb3JlZ3MsIGludCBucmVncyk7CisKKy8qIEFwcGx5IHJhbmdlcyBvZiBhbnkgcHJvbSBub2RlIChhbmQgb3B0aW9uYWxseSBwYXJlbnQgbm9kZSBhcyB3ZWxsKSB0byByZWdpc3RlcnMuICovCitleHRlcm4gdm9pZCBwcm9tX2FwcGx5X2dlbmVyaWNfcmFuZ2VzKGludCBub2RlLCBpbnQgcGFyZW50LCAKKwkJCQkgICAgICBzdHJ1Y3QgbGludXhfcHJvbV9yZWdpc3RlcnMgKnNidXNyZWdzLCBpbnQgbnJlZ3MpOworCisvKiBDUFUgcHJvYmluZyBoZWxwZXJzLiAgKi8KK2ludCBjcHVfZmluZF9ieV9pbnN0YW5jZShpbnQgaW5zdGFuY2UsIGludCAqcHJvbV9ub2RlLCBpbnQgKm1pZCk7CitpbnQgY3B1X2ZpbmRfYnlfbWlkKGludCBtaWQsIGludCAqcHJvbV9ub2RlKTsKK2ludCBjcHVfZ2V0X2h3bWlkKGludCBwcm9tX25vZGUpOworCitleHRlcm4gc3BpbmxvY2tfdCBwcm9tX2xvY2s7CisKKyNlbmRpZiAvKiAhKF9fU1BBUkNfT1BMSUJfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3BhZ2UuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3BhZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODMwNjBlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvcGFnZS5oCkBAIC0wLDAgKzEsMTgxIEBACisvKiAkSWQ6IHBhZ2UuaCx2IDEuNTUgMjAwMC8xMC8zMCAyMTowMTo0MSBkYXZlbSBFeHAgJAorICogcGFnZS5oOiAgVmFyaW91cyBkZWZpbmVzIGFuZCBzdWNoIGZvciBNTVUgb3BlcmF0aW9ucyBvbiB0aGUgU3BhcmMgZm9yCisgKiAgICAgICAgICB0aGUgTGludXgga2VybmVsLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NSBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCisgKi8KKworI2lmbmRlZiBfU1BBUkNfUEFHRV9ICisjZGVmaW5lIF9TUEFSQ19QQUdFX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2lmZGVmIENPTkZJR19TVU40CisjZGVmaW5lIFBBR0VfU0hJRlQgICAxMworI2Vsc2UKKyNkZWZpbmUgUEFHRV9TSElGVCAgIDEyCisjZW5kaWYKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisvKiBJIGhhdmUgbXkgc3VzcGljaW9ucy4uLiAtRGF2ZU0gKi8KKyNkZWZpbmUgUEFHRV9TSVpFICAgICgxVUwgPDwgUEFHRV9TSElGVCkKKyNlbHNlCisjZGVmaW5lIFBBR0VfU0laRSAgICAoMSA8PCBQQUdFX1NISUZUKQorI2VuZGlmCisjZGVmaW5lIFBBR0VfTUFTSyAgICAofihQQUdFX1NJWkUtMSkpCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxhc20vYnRmaXh1cC5oPgorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjZGVmaW5lIGNsZWFyX3BhZ2UocGFnZSkJIG1lbXNldCgodm9pZCAqKShwYWdlKSwgMCwgUEFHRV9TSVpFKQorI2RlZmluZSBjb3B5X3BhZ2UodG8sZnJvbSkgCW1lbWNweSgodm9pZCAqKSh0byksICh2b2lkICopKGZyb20pLCBQQUdFX1NJWkUpCisjZGVmaW5lIGNsZWFyX3VzZXJfcGFnZShhZGRyLCB2YWRkciwgcGFnZSkJXAorCWRvIHsgCWNsZWFyX3BhZ2UoYWRkcik7CQlcCisJCXNwYXJjX2ZsdXNoX3BhZ2VfdG9fcmFtKHBhZ2UpOwlcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgY29weV91c2VyX3BhZ2UodG8sIGZyb20sIHZhZGRyLCBwYWdlKQlcCisJZG8gewljb3B5X3BhZ2UodG8sIGZyb20pOwkJXAorCQlzcGFyY19mbHVzaF9wYWdlX3RvX3JhbShwYWdlKTsJXAorCX0gd2hpbGUgKDApCisKKy8qIFRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIGlzIHVzZWQgdG8gaG9sZCB0aGUgcGh5c2ljYWwKKyAqIG1lbW9yeSBjb25maWd1cmF0aW9uIG9mIHRoZSBtYWNoaW5lLiAgVGhpcyBpcyBmaWxsZWQgaW4KKyAqIHByb2JlX21lbW9yeSgpIGFuZCBpcyBsYXRlciB1c2VkIGJ5IG1lbV9pbml0KCkgdG8gc2V0IHVwCisgKiBtZW1fbWFwW10uICBXZSBzdGF0aWNhbGx5IGFsbG9jYXRlIFNQQVJDX1BIWVNfQkFOS1Mgb2YKKyAqIHRoZXNlIHN0cnVjdHMsIHRoaXMgaXMgYXJiaXRyYXJ5LiAgVGhlIGVudHJ5IGFmdGVyIHRoZQorICogbGFzdCB2YWxpZCBvbmUgaGFzIG51bV9ieXRlcz09MC4KKyAqLworCitzdHJ1Y3Qgc3BhcmNfcGh5c19iYW5rcyB7CisgIHVuc2lnbmVkIGxvbmcgYmFzZV9hZGRyOworICB1bnNpZ25lZCBsb25nIG51bV9ieXRlczsKK307CisKKyNkZWZpbmUgU1BBUkNfUEhZU19CQU5LUyAzMgorCitleHRlcm4gc3RydWN0IHNwYXJjX3BoeXNfYmFua3Mgc3BfYmFua3NbU1BBUkNfUEhZU19CQU5LUysxXTsKKworLyogQ2FjaGUgYWxpYXMgc3RydWN0dXJlLiAgRW50cnkgaXMgdmFsaWQgaWYgY29udGV4dCAhPSAtMS4gKi8KK3N0cnVjdCBjYWNoZV9wYWxpYXMgeworCXVuc2lnbmVkIGxvbmcgdmFkZHI7CisJaW50IGNvbnRleHQ7Cit9OworCitleHRlcm4gc3RydWN0IGNhY2hlX3BhbGlhcyAqc3BhcmNfYWxpYXNlczsKKworLyogcGFzc2luZyBzdHJ1Y3RzIG9uIHRoZSBTcGFyYyBzbG93IHVzIGRvd24gdHJlbWVuZG91c2x5Li4uICovCisKKy8qICNkZWZpbmUgU1RSSUNUX01NX1RZUEVDSEVDS1MgKi8KKworI2lmZGVmIFNUUklDVF9NTV9UWVBFQ0hFQ0tTCisvKgorICogVGhlc2UgYXJlIHVzZWQgdG8gbWFrZSB1c2Ugb2YgQyB0eXBlLWNoZWNraW5nLi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHB0ZTsgfSBwdGVfdDsKK3R5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBpb3B0ZTsgfSBpb3B0ZV90OwordHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHBtZHZbMTZdOyB9IHBtZF90OwordHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHBnZDsgfSBwZ2RfdDsKK3R5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBjdHhkOyB9IGN0eGRfdDsKK3R5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBwZ3Byb3Q7IH0gcGdwcm90X3Q7Cit0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgaW9wZ3Byb3Q7IH0gaW9wZ3Byb3RfdDsKKworI2RlZmluZSBwdGVfdmFsKHgpCSgoeCkucHRlKQorI2RlZmluZSBpb3B0ZV92YWwoeCkJKCh4KS5pb3B0ZSkKKyNkZWZpbmUgcG1kX3ZhbCh4KSAgICAgICgoeCkucG1kdlswXSkKKyNkZWZpbmUgcGdkX3ZhbCh4KQkoKHgpLnBnZCkKKyNkZWZpbmUgY3R4ZF92YWwoeCkJKCh4KS5jdHhkKQorI2RlZmluZSBwZ3Byb3RfdmFsKHgpCSgoeCkucGdwcm90KQorI2RlZmluZSBpb3BncHJvdF92YWwoeCkJKCh4KS5pb3BncHJvdCkKKworI2RlZmluZSBfX3B0ZSh4KQkoKHB0ZV90KSB7ICh4KSB9ICkKKyNkZWZpbmUgX19pb3B0ZSh4KQkoKGlvcHRlX3QpIHsgKHgpIH0gKQorLyogI2RlZmluZSBfX3BtZCh4KSAgICAgICAgKChwbWRfdCkgeyAoeCkgfSApICovIC8qIFhYWCBwcm9jZWR1cmUgd2l0aCBsb29wICovCisjZGVmaW5lIF9fcGdkKHgpCSgocGdkX3QpIHsgKHgpIH0gKQorI2RlZmluZSBfX2N0eGQoeCkJKChjdHhkX3QpIHsgKHgpIH0gKQorI2RlZmluZSBfX3BncHJvdCh4KQkoKHBncHJvdF90KSB7ICh4KSB9ICkKKyNkZWZpbmUgX19pb3BncHJvdCh4KQkoKGlvcGdwcm90X3QpIHsgKHgpIH0gKQorCisjZWxzZQorLyoKKyAqIC4uIHdoaWxlIHRoZXNlIG1ha2UgaXQgZWFzaWVyIG9uIHRoZSBjb21waWxlcgorICovCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgcHRlX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW9wdGVfdDsKK3R5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBwbWR2WzE2XTsgfSBwbWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBwZ2RfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBjdHhkX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgcGdwcm90X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW9wZ3Byb3RfdDsKKworI2RlZmluZSBwdGVfdmFsKHgpCSh4KQorI2RlZmluZSBpb3B0ZV92YWwoeCkJKHgpCisjZGVmaW5lIHBtZF92YWwoeCkgICAgICAoKHgpLnBtZHZbMF0pCisjZGVmaW5lIHBnZF92YWwoeCkJKHgpCisjZGVmaW5lIGN0eGRfdmFsKHgpCSh4KQorI2RlZmluZSBwZ3Byb3RfdmFsKHgpCSh4KQorI2RlZmluZSBpb3BncHJvdF92YWwoeCkJKHgpCisKKyNkZWZpbmUgX19wdGUoeCkJKHgpCisjZGVmaW5lIF9faW9wdGUoeCkJKHgpCisvKiAjZGVmaW5lIF9fcG1kKHgpICAgICAgICAoeCkgKi8gLyogWFhYIGxhdGVyICovCisjZGVmaW5lIF9fcGdkKHgpCSh4KQorI2RlZmluZSBfX2N0eGQoeCkJKHgpCisjZGVmaW5lIF9fcGdwcm90KHgpCSh4KQorI2RlZmluZSBfX2lvcGdwcm90KHgpCSh4KQorCisjZW5kaWYKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3BhcmNfdW5tYXBwZWRfYmFzZTsKKworQlRGSVhVUERFRl9TRVRISShzcGFyY191bm1hcHBlZF9iYXNlKQorCisjZGVmaW5lIFRBU0tfVU5NQVBQRURfQkFTRQlCVEZJWFVQX1NFVEhJKHNwYXJjX3VubWFwcGVkX2Jhc2UpCisKKy8qIFB1cmUgMl5uIHZlcnNpb24gb2YgZ2V0X29yZGVyICovCitleHRlcm4gX19pbmxpbmVfXyBpbnQgZ2V0X29yZGVyKHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlpbnQgb3JkZXI7CisKKwlzaXplID0gKHNpemUtMSkgPj4gKFBBR0VfU0hJRlQtMSk7CisJb3JkZXIgPSAtMTsKKwlkbyB7CisJCXNpemUgPj49IDE7CisJCW9yZGVyKys7CisJfSB3aGlsZSAoc2l6ZSk7CisJcmV0dXJuIG9yZGVyOworfQorCisjZWxzZSAvKiAhKF9fQVNTRU1CTFlfXykgKi8KKworI2RlZmluZSBfX3BncHJvdCh4KQkoeCkKKworI2VuZGlmIC8qICEoX19BU1NFTUJMWV9fKSAqLworCisvKiB0byBhbGlnbiB0aGUgcG9pbnRlciB0byB0aGUgKG5leHQpIHBhZ2UgYm91bmRhcnkgKi8KKyNkZWZpbmUgUEFHRV9BTElHTihhZGRyKSAgKCgoYWRkcikrUEFHRV9TSVpFLTEpJlBBR0VfTUFTSykKKworI2RlZmluZSBQQUdFX09GRlNFVAkweGYwMDAwMDAwCisjaWZuZGVmIF9fQVNTRU1CTFlfXworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGh5c19iYXNlOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGZuX2Jhc2U7CisjZW5kaWYKKyNkZWZpbmUgX19wYSh4KQkJCSgodW5zaWduZWQgbG9uZykoeCkgLSBQQUdFX09GRlNFVCArIHBoeXNfYmFzZSkKKyNkZWZpbmUgX192YSh4KQkJCSgodm9pZCAqKSgodW5zaWduZWQgbG9uZykgKHgpIC0gcGh5c19iYXNlICsgUEFHRV9PRkZTRVQpKQorCisjZGVmaW5lIHZpcnRfdG9fcGh5cwkJX19wYQorI2RlZmluZSBwaHlzX3RvX3ZpcnQJCV9fdmEKKworI2RlZmluZSBwZm5fdG9fcGFnZShwZm4pCShtZW1fbWFwICsgKChwZm4pLShwZm5fYmFzZSkpKQorI2RlZmluZSBwYWdlX3RvX3BmbihwYWdlKQkoKHVuc2lnbmVkIGxvbmcpKCgocGFnZSkgLSBtZW1fbWFwKSArIHBmbl9iYXNlKSkKKyNkZWZpbmUgdmlydF90b19wYWdlKGthZGRyKQkobWVtX21hcCArICgoKCh1bnNpZ25lZCBsb25nKShrYWRkciktUEFHRV9PRkZTRVQpPj5QQUdFX1NISUZUKSkpCisKKyNkZWZpbmUgcGZuX3ZhbGlkKHBmbikJCSgoKHBmbikgPj0gKHBmbl9iYXNlKSkgJiYgKCgocGZuKS0ocGZuX2Jhc2UpKSA8IG1heF9tYXBucikpCisjZGVmaW5lIHZpcnRfYWRkcl92YWxpZChrYWRkcikJKCgoKHVuc2lnbmVkIGxvbmcpKGthZGRyKS1QQUdFX09GRlNFVCk+PlBBR0VfU0hJRlQpIDwgbWF4X21hcG5yKQorCisjZGVmaW5lIFZNX0RBVEFfREVGQVVMVF9GTEFHUwkoVk1fUkVBRCB8IFZNX1dSSVRFIHwgVk1fRVhFQyB8IFwKKwkJCQkgVk1fTUFZUkVBRCB8IFZNX01BWVdSSVRFIHwgVk1fTUFZRVhFQykKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9TUEFSQ19QQUdFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3BhcmFtLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlYWYwMmQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9wYXJhbS5oCkBAIC0wLDAgKzEsMjMgQEAKKy8qICRJZDogcGFyYW0uaCx2IDEuNCAyMDAwLzEwLzMwIDIxOjAxOjQxIGRhdmVtIEV4cCAkICovCisjaWZuZGVmIF9BU01TUEFSQ19QQVJBTV9ICisjZGVmaW5lIF9BU01TUEFSQ19QQVJBTV9ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisjIGRlZmluZSBIWgkJMTAwCS8qIEludGVybmFsIGtlcm5lbCB0aW1lciBmcmVxdWVuY3kgKi8KKyMgZGVmaW5lIFVTRVJfSFoJMTAwCS8qIC4uIHNvbWUgdXNlciBpbnRlcmZhY2VzIGFyZSBpbiAidGlja3MiICovCisjIGRlZmluZSBDTE9DS1NfUEVSX1NFQyAoVVNFUl9IWikKKyNlbmRpZgorCisjaWZuZGVmIEhaCisjZGVmaW5lIEhaIDEwMAorI2VuZGlmCisKKyNkZWZpbmUgRVhFQ19QQUdFU0laRQk4MTkyICAgIC8qIFRoYW5rcyBmb3Igc3VuNCdzIHdlIGNhcnJ5IGJhZ2dhZ2UuLi4gKi8KKworI2lmbmRlZiBOT0dST1VQCisjZGVmaW5lIE5PR1JPVVAJCSgtMSkKKyNlbmRpZgorCisjZGVmaW5lIE1BWEhPU1ROQU1FTEVOCTY0CS8qIG1heCBsZW5ndGggb2YgaG9zdG5hbWUgKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9wYm0uaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3BibS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhYmEzYTgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9wYm0uaApAQCAtMCwwICsxLDQ2IEBACisvKiAkSWQ6IHBibS5oLHYgMS4zIDE5OTkvMTIvMjAgMTc6MDY6MzUgemFpdGNldiBFeHAgJAorICoKKyAqIHBibS5oOiBQQ0kgYnVzIG1vZHVsZSBwc2V1ZG8gZHJpdmVyIHNvZnR3YXJlIHN0YXRlCisgKiAgICAgICAgQWRvcHRlZCBmcm9tIHNwYXJjNjQgYnkgVi4gUm9nYW5vdiBhbmQgRy4gUmFpa28KKyAqCisgKiBPcmlnaW5hbCBoZWFkZXI6CisgKiBwYm0uaDogVTJQIFBDSSBidXMgbW9kdWxlIHBzZXVkbyBkcml2ZXIgc29mdHdhcmUgc3RhdGUuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk3IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKKyAqCisgKiBUbyBwdXQgdGhpbmdzIGludG8gcGVyc3BlY3RpdmUsIGNvbnNpZGVyIHNwYXJjNjQgd2l0aCBhIGZldyBQQ0kgY29udHJvbGxlcnMuCisgKiBFYWNoIHR5cGUgd291bGQgaGF2ZSBhbiBvd24gc3RydWN0dXJlLCB3aXRoIGluc3RhbmNlcyByZWxhdGVkIG9uZSB0byBvbmUuCisgKiBXZSBoYXZlIG9ubHkgcGNpYyBvbiBzcGFyYywgYnV0IHdlIHdhbnQgdG8gYmUgY29tcGF0aWJsZSB3aXRoIHNwYXJjNjQgcGJtLmguCisgKiBBbGwgdGhyZWUgcmVwcmVzZW50IGRpZmZlcmVudCBhYnN0cmFjdGlvbnMuCisgKiAgIHBjaV9idXMgIC0gTGludXggUENJIHN1YnN5c3RlbSB2aWV3IG9mIGEgUENJIGJ1cyAoaW5jbHVkaW5nIGJyaWRnZWQgYnVzZXMpCisgKiAgIHBibSAgICAgIC0gQXJjaC1zcGVjaWZpYyB2aWV3IG9mIGEgUENJIGJ1cyAoc3BhcmMgb3Igc3BhcmM2NCkKKyAqICAgcGNpYyAgICAgLSBDaGlwLXNwZWNpZmljIGluZm9ybWF0aW9uIGZvciBQQ0lDLgorICovCisKKyNpZm5kZWYgX19TUEFSQ19QQk1fSAorI2RlZmluZSBfX1NQQVJDX1BCTV9ICisKKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxhc20vb3BsaWIuaD4KKworc3RydWN0IGxpbnV4X3BibV9pbmZvIHsKKwlpbnQJCXByb21fbm9kZTsKKwljaGFyCQlwcm9tX25hbWVbNjRdOworCS8qIHN0cnVjdCBsaW51eF9wcm9tX3BjaV9yYW5nZXMJcGJtX3Jhbmdlc1tQUk9NUkVHX01BWF07ICovCisJLyogaW50CQludW1fcGJtX3JhbmdlczsgKi8KKworCS8qIE5vdyB0aGluZ3MgZm9yIHRoZSBhY3R1YWwgUENJIGJ1cyBwcm9iZXMuICovCisJdW5zaWduZWQgaW50CXBjaV9maXJzdF9idXNubzsJLyogQ2FuIGl0IGJlIG5vbnplcm8/ICovCisJc3RydWN0IHBjaV9idXMJKnBjaV9idXM7CQkvKiBXYXMgaW5saW5lLCBNSiBhbGxvY3Mgbm93ICovCit9OworCisvKiBQQ0kgZGV2aWNlcyB3aGljaCBhcmUgbm90IGJyaWRnZXMgaGF2ZSB0aGlzIHBsYWNlZCBpbiB0aGVpciBwY2lfZGV2CisgKiBzeXNkYXRhIG1lbWJlci4gIFRoaXMgbWFrZXMgT0JQIGF3YXJlIFBDSSBkZXZpY2UgZHJpdmVycyBlYXNpZXIgdG8KKyAqIGNvZGUuCisgKi8KK3N0cnVjdCBwY2lkZXZfY29va2llIHsKKwlzdHJ1Y3QgbGludXhfcGJtX2luZm8JCSpwYm07CisJaW50CQkJCXByb21fbm9kZTsKK307CisKKyNlbmRpZiAvKiAhKF9fU1BBUkNfUEJNX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9wY2kuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3BjaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyMDBhMjUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9wY2kuaApAQCAtMCwwICsxLDE2MyBAQAorI2lmbmRlZiBfX1NQQVJDX1BDSV9ICisjZGVmaW5lIF9fU1BBUkNfUENJX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKworLyogQ2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIGxvZ2ljIGluIHBjaV9zY2FuX2J1cyBmb3Igc2tpcHBpbmcKKyAqIGFscmVhZHktY29uZmlndXJlZCBidXMgbnVtYmVycyAtIHRvIGJlIHVzZWQgZm9yIGJ1Z2d5IEJJT1NlcworICogb3IgYXJjaGl0ZWN0dXJlcyB3aXRoIGluY29tcGxldGUgUENJIHNldHVwIGJ5IHRoZSBsb2FkZXIuCisgKi8KKyNkZWZpbmUgcGNpYmlvc19hc3NpZ25fYWxsX2J1c3NlcygpCTAKKyNkZWZpbmUgcGNpYmlvc19zY2FuX2FsbF9mbnMoYSwgYikJMAorCisjZGVmaW5lIFBDSUJJT1NfTUlOX0lPCQkwVUwKKyNkZWZpbmUgUENJQklPU19NSU5fTUVNCQkwVUwKKworI2RlZmluZSBQQ0lfSVJRX05PTkUJCTB4ZmZmZmZmZmYKKworZXh0ZXJuIGlubGluZSB2b2lkIHBjaWJpb3Nfc2V0X21hc3RlcihzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCS8qIE5vIHNwZWNpYWwgYnVzIG1hc3RlcmluZyBzZXR1cCBoYW5kbGluZyAqLworfQorCitleHRlcm4gaW5saW5lIHZvaWQgcGNpYmlvc19wZW5hbGl6ZV9pc2FfaXJxKGludCBpcnEpCit7CisJLyogV2UgZG9uJ3QgZG8gZHluYW1pYyBQQ0kgSVJRIGFsbG9jYXRpb24gKi8KK30KKworLyogRHluYW1pYyBETUEgbWFwcGluZyBzdHVmZi4KKyAqLworI2RlZmluZSBQQ0lfRE1BX0JVU19JU19QSFlTCSgwKQorCisjaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+CisKK3N0cnVjdCBwY2lfZGV2OworCisvKiBBbGxvY2F0ZSBhbmQgbWFwIGtlcm5lbCBidWZmZXIgdXNpbmcgY29uc2lzdGVudCBtb2RlIERNQSBmb3IgYSBkZXZpY2UuCisgKiBod2RldiBzaG91bGQgYmUgdmFsaWQgc3RydWN0IHBjaV9kZXYgcG9pbnRlciBmb3IgUENJIGRldmljZXMuCisgKi8KK2V4dGVybiB2b2lkICpwY2lfYWxsb2NfY29uc2lzdGVudChzdHJ1Y3QgcGNpX2RldiAqaHdkZXYsIHNpemVfdCBzaXplLCBkbWFfYWRkcl90ICpkbWFfaGFuZGxlKTsKKworLyogRnJlZSBhbmQgdW5tYXAgYSBjb25zaXN0ZW50IERNQSBidWZmZXIuCisgKiBjcHVfYWRkciBpcyB3aGF0IHdhcyByZXR1cm5lZCBmcm9tIHBjaV9hbGxvY19jb25zaXN0ZW50LAorICogc2l6ZSBtdXN0IGJlIHRoZSBzYW1lIGFzIHdoYXQgYXMgcGFzc2VkIGludG8gcGNpX2FsbG9jX2NvbnNpc3RlbnQsCisgKiBhbmQgbGlrZXdpc2UgZG1hX2FkZHIgbXVzdCBiZSB0aGUgc2FtZSBhcyB3aGF0ICpkbWFfYWRkcnAgd2FzIHNldCB0by4KKyAqCisgKiBSZWZlcmVuY2VzIHRvIHRoZSBtZW1vcnkgYW5kIG1hcHBpbmdzIGFzc29zY2lhdGVkIHdpdGggY3B1X2FkZHIvZG1hX2FkZHIKKyAqIHBhc3QgdGhpcyBjYWxsIGFyZSBpbGxlZ2FsLgorICovCitleHRlcm4gdm9pZCBwY2lfZnJlZV9jb25zaXN0ZW50KHN0cnVjdCBwY2lfZGV2ICpod2Rldiwgc2l6ZV90IHNpemUsIHZvaWQgKnZhZGRyLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUpOworCisvKiBNYXAgYSBzaW5nbGUgYnVmZmVyIG9mIHRoZSBpbmRpY2F0ZWQgc2l6ZSBmb3IgRE1BIGluIHN0cmVhbWluZyBtb2RlLgorICogVGhlIDMyLWJpdCBidXMgYWRkcmVzcyB0byB1c2UgaXMgcmV0dXJuZWQuCisgKgorICogT25jZSB0aGUgZGV2aWNlIGlzIGdpdmVuIHRoZSBkbWEgYWRkcmVzcywgdGhlIGRldmljZSBvd25zIHRoaXMgbWVtb3J5CisgKiB1bnRpbCBlaXRoZXIgcGNpX3VubWFwX3NpbmdsZSBvciBwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUgaXMgcGVyZm9ybWVkLgorICovCitleHRlcm4gZG1hX2FkZHJfdCBwY2lfbWFwX3NpbmdsZShzdHJ1Y3QgcGNpX2RldiAqaHdkZXYsIHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pOworCisvKiBVbm1hcCBhIHNpbmdsZSBzdHJlYW1pbmcgbW9kZSBETUEgdHJhbnNsYXRpb24uICBUaGUgZG1hX2FkZHIgYW5kIHNpemUKKyAqIG11c3QgbWF0Y2ggd2hhdCB3YXMgcHJvdmlkZWQgZm9yIGluIGEgcHJldmlvdXMgcGNpX21hcF9zaW5nbGUgY2FsbC4gIEFsbAorICogb3RoZXIgdXNhZ2VzIGFyZSB1bmRlZmluZWQuCisgKgorICogQWZ0ZXIgdGhpcyBjYWxsLCByZWFkcyBieSB0aGUgY3B1IHRvIHRoZSBidWZmZXIgYXJlIGd1YXJhbnRlZWQgdG8gc2VlCisgKiB3aGF0ZXZlciB0aGUgZGV2aWNlIHdyb3RlIHRoZXJlLgorICovCitleHRlcm4gdm9pZCBwY2lfdW5tYXBfc2luZ2xlKHN0cnVjdCBwY2lfZGV2ICpod2RldiwgZG1hX2FkZHJfdCBkbWFfYWRkciwgc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pOworCisvKiBwY2lfdW5tYXBfe3NpbmdsZSxwYWdlfSBpcyBub3QgYSBub3AsIHRodXMuLi4gKi8KKyNkZWZpbmUgREVDTEFSRV9QQ0lfVU5NQVBfQUREUihBRERSX05BTUUpCVwKKwlkbWFfYWRkcl90IEFERFJfTkFNRTsKKyNkZWZpbmUgREVDTEFSRV9QQ0lfVU5NQVBfTEVOKExFTl9OQU1FKQkJXAorCV9fdTMyIExFTl9OQU1FOworI2RlZmluZSBwY2lfdW5tYXBfYWRkcihQVFIsIEFERFJfTkFNRSkJCQlcCisJKChQVFIpLT5BRERSX05BTUUpCisjZGVmaW5lIHBjaV91bm1hcF9hZGRyX3NldChQVFIsIEFERFJfTkFNRSwgVkFMKQkJXAorCSgoKFBUUiktPkFERFJfTkFNRSkgPSAoVkFMKSkKKyNkZWZpbmUgcGNpX3VubWFwX2xlbihQVFIsIExFTl9OQU1FKQkJCVwKKwkoKFBUUiktPkxFTl9OQU1FKQorI2RlZmluZSBwY2lfdW5tYXBfbGVuX3NldChQVFIsIExFTl9OQU1FLCBWQUwpCQlcCisJKCgoUFRSKS0+TEVOX05BTUUpID0gKFZBTCkpCisKKy8qCisgKiBTYW1lIGFzIGFib3ZlLCBvbmx5IHdpdGggcGFnZXMgaW5zdGVhZCBvZiBtYXBwZWQgYWRkcmVzc2VzLgorICovCitleHRlcm4gZG1hX2FkZHJfdCBwY2lfbWFwX3BhZ2Uoc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCXVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbik7CitleHRlcm4gdm9pZCBwY2lfdW5tYXBfcGFnZShzdHJ1Y3QgcGNpX2RldiAqaHdkZXYsCisJCQlkbWFfYWRkcl90IGRtYV9hZGRyZXNzLCBzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbik7CisKKy8qIE1hcCBhIHNldCBvZiBidWZmZXJzIGRlc2NyaWJlZCBieSBzY2F0dGVybGlzdCBpbiBzdHJlYW1pbmcKKyAqIG1vZGUgZm9yIERNQS4gIFRoaXMgaXMgdGhlIHNjYXRoZXItZ2F0aGVyIHZlcnNpb24gb2YgdGhlCisgKiBhYm92ZSBwY2lfbWFwX3NpbmdsZSBpbnRlcmZhY2UuICBIZXJlIHRoZSBzY2F0dGVyIGdhdGhlciBsaXN0CisgKiBlbGVtZW50cyBhcmUgZWFjaCB0YWdnZWQgd2l0aCB0aGUgYXBwcm9wcmlhdGUgZG1hIGFkZHJlc3MKKyAqIGFuZCBsZW5ndGguICBUaGV5IGFyZSBvYnRhaW5lZCB2aWEgc2dfZG1hX3thZGRyZXNzLGxlbmd0aH0oU0cpLgorICoKKyAqIE5PVEU6IEFuIGltcGxlbWVudGF0aW9uIG1heSBiZSBhYmxlIHRvIHVzZSBhIHNtYWxsZXIgbnVtYmVyIG9mCisgKiAgICAgICBETUEgYWRkcmVzcy9sZW5ndGggcGFpcnMgdGhhbiB0aGVyZSBhcmUgU0cgdGFibGUgZWxlbWVudHMuCisgKiAgICAgICAoZm9yIGV4YW1wbGUgdmlhIHZpcnR1YWwgbWFwcGluZyBjYXBhYmlsaXRpZXMpCisgKiAgICAgICBUaGUgcm91dGluZSByZXR1cm5zIHRoZSBudW1iZXIgb2YgYWRkci9sZW5ndGggcGFpcnMgYWN0dWFsbHkKKyAqICAgICAgIHVzZWQsIGF0IG1vc3QgbmVudHMuCisgKgorICogRGV2aWNlIG93bmVyc2hpcCBpc3N1ZXMgYXMgbWVudGlvbmVkIGFib3ZlIGZvciBwY2lfbWFwX3NpbmdsZSBhcmUKKyAqIHRoZSBzYW1lIGhlcmUuCisgKi8KK2V4dGVybiBpbnQgcGNpX21hcF9zZyhzdHJ1Y3QgcGNpX2RldiAqaHdkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZW50cywgaW50IGRpcmVjdGlvbik7CisKKy8qIFVubWFwIGEgc2V0IG9mIHN0cmVhbWluZyBtb2RlIERNQSB0cmFuc2xhdGlvbnMuCisgKiBBZ2FpbiwgY3B1IHJlYWQgcnVsZXMgY29uY2VybmluZyBjYWxscyBoZXJlIGFyZSB0aGUgc2FtZSBhcyBmb3IKKyAqIHBjaV91bm1hcF9zaW5nbGUoKSBhYm92ZS4KKyAqLworZXh0ZXJuIHZvaWQgcGNpX3VubWFwX3NnKHN0cnVjdCBwY2lfZGV2ICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5od2VudHMsIGludCBkaXJlY3Rpb24pOworCisvKiBNYWtlIHBoeXNpY2FsIG1lbW9yeSBjb25zaXN0ZW50IGZvciBhIHNpbmdsZQorICogc3RyZWFtaW5nIG1vZGUgRE1BIHRyYW5zbGF0aW9uIGFmdGVyIGEgdHJhbnNmZXIuCisgKgorICogSWYgeW91IHBlcmZvcm0gYSBwY2lfbWFwX3NpbmdsZSgpIGJ1dCB3aXNoIHRvIGludGVycm9nYXRlIHRoZQorICogYnVmZmVyIHVzaW5nIHRoZSBjcHUsIHlldCBkbyBub3Qgd2lzaCB0byB0ZWFyZG93biB0aGUgUENJIGRtYQorICogbWFwcGluZywgeW91IG11c3QgY2FsbCB0aGlzIGZ1bmN0aW9uIGJlZm9yZSBkb2luZyBzby4gIEF0IHRoZQorICogbmV4dCBwb2ludCB5b3UgZ2l2ZSB0aGUgUENJIGRtYSBhZGRyZXNzIGJhY2sgdG8gdGhlIGNhcmQsIHlvdQorICogbXVzdCBmaXJzdCBwZXJmb3JtIGEgcGNpX2RtYV9zeW5jX2Zvcl9kZXZpY2UsIGFuZCB0aGVuIHRoZSBkZXZpY2UKKyAqIGFnYWluIG93bnMgdGhlIGJ1ZmZlci4KKyAqLworZXh0ZXJuIHZvaWQgcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHN0cnVjdCBwY2lfZGV2ICpod2RldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCBzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbik7CitleHRlcm4gdm9pZCBwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKTsKKworLyogTWFrZSBwaHlzaWNhbCBtZW1vcnkgY29uc2lzdGVudCBmb3IgYSBzZXQgb2Ygc3RyZWFtaW5nCisgKiBtb2RlIERNQSB0cmFuc2xhdGlvbnMgYWZ0ZXIgYSB0cmFuc2Zlci4KKyAqCisgKiBUaGUgc2FtZSBhcyBwY2lfZG1hX3N5bmNfc2luZ2xlXyogYnV0IGZvciBhIHNjYXR0ZXItZ2F0aGVyIGxpc3QsCisgKiBzYW1lIHJ1bGVzIGFuZCB1c2FnZS4KKyAqLworZXh0ZXJuIHZvaWQgcGNpX2RtYV9zeW5jX3NnX2Zvcl9jcHUoc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVsZW1zLCBpbnQgZGlyZWN0aW9uKTsKK2V4dGVybiB2b2lkIHBjaV9kbWFfc3luY19zZ19mb3JfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbGVtcywgaW50IGRpcmVjdGlvbik7CisKKy8qIFJldHVybiB3aGV0aGVyIHRoZSBnaXZlbiBQQ0kgZGV2aWNlIERNQSBhZGRyZXNzIG1hc2sgY2FuCisgKiBiZSBzdXBwb3J0ZWQgcHJvcGVybHkuICBGb3IgZXhhbXBsZSwgaWYgeW91ciBkZXZpY2UgY2FuCisgKiBvbmx5IGRyaXZlIHRoZSBsb3cgMjQtYml0cyBkdXJpbmcgUENJIGJ1cyBtYXN0ZXJpbmcsIHRoZW4KKyAqIHlvdSB3b3VsZCBwYXNzIDB4MDBmZmZmZmYgYXMgdGhlIG1hc2sgdG8gdGhpcyBmdW5jdGlvbi4KKyAqLworZXh0ZXJuIGlubGluZSBpbnQgcGNpX2RtYV9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCB1NjQgbWFzaykKK3sKKwlyZXR1cm4gMTsKK30KKworI2RlZmluZSBwY2lfZGFjX2RtYV9zdXBwb3J0ZWQoZGV2LCBtYXNrKQkoMCkKKworc3RhdGljIGlubGluZSB2b2lkIHBjaWJpb3NfYWRkX3BsYXRmb3JtX2VudHJpZXMoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKK30KKworI2RlZmluZSBQQ0lfRE1BX0VSUk9SX0NPREUgICAgICAofihkbWFfYWRkcl90KTB4MCkKKworc3RhdGljIGlubGluZSBpbnQgcGNpX2RtYV9tYXBwaW5nX2Vycm9yKGRtYV9hZGRyX3QgZG1hX2FkZHIpCit7CisgICAgICAgIHJldHVybiAoZG1hX2FkZHIgPT0gUENJX0RNQV9FUlJPUl9DT0RFKTsKK30KKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworLyogZ2VuZXJpYyBwY2kgc3R1ZmYgKi8KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wY2kuaD4KKworI2VuZGlmIC8qIF9fU1BBUkNfUENJX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3BjaWMuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3BjaWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDFhZTgwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvcGNpYy5oCkBAIC0wLDAgKzEsMTIzIEBACisvKiAkSWQ6IHBjaWMuaCx2IDEuNCAxOTk5LzExLzE3IDA3OjM0OjIwIHphaXRjZXYgRXhwICQKKyAqIHBjaWMuaDogSmF2YUVuZ2luZSAxIHNwZWNpZmljIFBDSSBkZWZpbml0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggVi4gUm9nYW5vdiBhbmQgRy4gUmFpa28KKyAqLworCisjaWZuZGVmIF9fU1BBUkNfUENJQ19ICisjZGVmaW5lIF9fU1BBUkNfUENJQ19ICisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGFzbS9wYm0uaD4KKworc3RydWN0IGxpbnV4X3BjaWMgeworICAgICAgICB2b2lkICogX19pb21lbSAgICAgICAgICBwY2ljX3JlZ3M7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgICAgICAgICAgIHBjaWNfaW87CisgICAgICAgIHZvaWQgKiBfX2lvbWVtICAgICAgICAgIHBjaWNfY29uZmlnX3NwYWNlX2FkZHI7CisgICAgICAgIHZvaWQgKiBfX2lvbWVtICAgICAgICAgIHBjaWNfY29uZmlnX3NwYWNlX2RhdGE7CisJc3RydWN0IHJlc291cmNlCQlwY2ljX3Jlc19yZWdzOworCXN0cnVjdCByZXNvdXJjZQkJcGNpY19yZXNfaW87CisJc3RydWN0IHJlc291cmNlCQlwY2ljX3Jlc19jZmdfYWRkcjsKKwlzdHJ1Y3QgcmVzb3VyY2UJCXBjaWNfcmVzX2NmZ19kYXRhOworICAgICAgICBzdHJ1Y3QgbGludXhfcGJtX2luZm8gICBwYm07CisJc3RydWN0IHBjaWNfY2EyaXJxCSpwY2ljX2ltYXA7CisJaW50CQkJcGNpY19pbWRpbTsKK307CisKK2V4dGVybiBpbnQgcGNpY19wcm9iZSh2b2lkKTsKKy8qIEVybS4uLiBNSiByZWRlZmluZWQgcGNpYmlvc19wcmVzZW50KCkgc28gdGhhdCBpdCBkb2VzIG5vdCB3b3JrIGVhcmx5LiAqLworZXh0ZXJuIGludCBwY2ljX3ByZXNlbnQodm9pZCk7CitleHRlcm4gdm9pZCBzdW40bV9wY2lfaW5pdF9JUlEodm9pZCk7CisKKyNlbmRpZgorCisvKiBTaXplIG9mIFBDSSBJL08gc3BhY2Ugd2hpY2ggd2UgcmVsb2NhdGUuICovCisjZGVmaW5lIFBDSV9TUEFDRV9TSVpFICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwICAgICAgIC8qIDE2IE1CICovCisKKy8qIFBDSUMgUmVnaXN0ZXIgU2V0LiAqLworI2RlZmluZSBQQ0lfRElBR05PU1RJQ18wICAgICAgICAgICAgICAgIDB4NDAgICAgLyogMzIgYml0cyAqLworI2RlZmluZSBQQ0lfU0laRV8wICAgICAgICAgICAgICAgICAgICAgIDB4NDQgICAgLyogMzIgYml0cyAqLworI2RlZmluZSBQQ0lfU0laRV8xICAgICAgICAgICAgICAgICAgICAgIDB4NDggICAgLyogMzIgYml0cyAqLworI2RlZmluZSBQQ0lfU0laRV8yICAgICAgICAgICAgICAgICAgICAgIDB4NGMgICAgLyogMzIgYml0cyAqLworI2RlZmluZSBQQ0lfU0laRV8zICAgICAgICAgICAgICAgICAgICAgIDB4NTAgICAgLyogMzIgYml0cyAqLworI2RlZmluZSBQQ0lfU0laRV80ICAgICAgICAgICAgICAgICAgICAgIDB4NTQgICAgLyogMzIgYml0cyAqLworI2RlZmluZSBQQ0lfU0laRV81ICAgICAgICAgICAgICAgICAgICAgIDB4NTggICAgLyogMzIgYml0cyAqLworI2RlZmluZSBQQ0lfUElPX0NPTlRST0wgICAgICAgICAgICAgICAgIDB4NjAgICAgLyogOCAgYml0cyAqLworI2RlZmluZSBQQ0lfRFZNQV9DT05UUk9MICAgICAgICAgICAgICAgIDB4NjIgICAgLyogOCAgYml0cyAqLworI2RlZmluZSAgUENJX0RWTUFfQ09OVFJPTF9JTkFDVElWSVRZX1JFUSAgICAgICAgKDE8PDApCisjZGVmaW5lICBQQ0lfRFZNQV9DT05UUk9MX0lPVExCX0VOQUJMRSAgICAgICAgICAoMTw8MCkKKyNkZWZpbmUgIFBDSV9EVk1BX0NPTlRST0xfSU9UTEJfRElTQUJMRSAgICAgICAgIDAKKyNkZWZpbmUgIFBDSV9EVk1BX0NPTlRST0xfSU5BQ1RJVklUWV9BQ0sgICAgICAgICgxPDw0KQorI2RlZmluZSBQQ0lfSU5URVJSVVBUX0NPTlRST0wgICAgICAgICAgIDB4NjMgICAgLyogOCAgYml0cyAqLworI2RlZmluZSBQQ0lfQ1BVX0lOVEVSUlVQVF9QRU5ESU5HICAgICAgIDB4NjQgICAgLyogMzIgYml0cyAqLworI2RlZmluZSBQQ0lfRElBR05PU1RJQ18xICAgICAgICAgICAgICAgIDB4NjggICAgLyogMTYgYml0cyAqLworI2RlZmluZSBQQ0lfU09GVFdBUkVfSU5UX0NMRUFSICAgICAgICAgIDB4NmEgICAgLyogMTYgYml0cyAqLworI2RlZmluZSBQQ0lfU09GVFdBUkVfSU5UX1NFVCAgICAgICAgICAgIDB4NmUgICAgLyogMTYgYml0cyAqLworI2RlZmluZSBQQ0lfU1lTX0lOVF9QRU5ESU5HICAgICAgICAgICAgIDB4NzAgICAgLyogMzIgYml0cyAqLworI2RlZmluZSAgUENJX1NZU19JTlRfUEVORElOR19QSU8JCTB4NDAwMDAwMDAKKyNkZWZpbmUgIFBDSV9TWVNfSU5UX1BFTkRJTkdfRE1BCQkweDIwMDAwMDAwCisjZGVmaW5lICBQQ0lfU1lTX0lOVF9QRU5ESU5HX1BDSQkJMHgxMDAwMDAwMAorI2RlZmluZSAgUENJX1NZU19JTlRfUEVORElOR19BUFNSCQkweDA4MDAwMDAwCisjZGVmaW5lIFBDSV9TWVNfSU5UX1RBUkdFVF9NQVNLICAgICAgICAgMHg3NCAgICAvKiAzMiBiaXRzICovCisjZGVmaW5lIFBDSV9TWVNfSU5UX1RBUkdFVF9NQVNLX0NMRUFSICAgMHg3OCAgICAvKiAzMiBiaXRzICovCisjZGVmaW5lIFBDSV9TWVNfSU5UX1RBUkdFVF9NQVNLX1NFVCAgICAgMHg3YyAgICAvKiAzMiBiaXRzICovCisjZGVmaW5lIFBDSV9TWVNfSU5UX1BFTkRJTkdfQ0xFQVIgICAgICAgMHg4MyAgICAvKiA4ICBiaXRzICovCisjZGVmaW5lICBQQ0lfU1lTX0lOVF9QRU5ESU5HX0NMRUFSX0FMTAkJMHg4MAorI2RlZmluZSAgUENJX1NZU19JTlRfUEVORElOR19DTEVBUl9QSU8JCTB4NDAKKyNkZWZpbmUgIFBDSV9TWVNfSU5UX1BFTkRJTkdfQ0xFQVJfRE1BCQkweDIwCisjZGVmaW5lICBQQ0lfU1lTX0lOVF9QRU5ESU5HX0NMRUFSX1BDSQkJMHgxMAorI2RlZmluZSBQQ0lfSU9UTEJfQ09OVFJPTCAgICAgICAgICAgICAgIDB4ODQgICAgLyogOCAgYml0cyAqLworI2RlZmluZSBQQ0lfSU5UX1NFTEVDVF9MTyAgICAgICAgICAgICAgIDB4ODggICAgLyogMTYgYml0cyAqLworI2RlZmluZSBQQ0lfQVJCSVRSQVRJT05fU0VMRUNUICAgICAgICAgIDB4OGEgICAgLyogMTYgYml0cyAqLworI2RlZmluZSBQQ0lfSU5UX1NFTEVDVF9ISSAgICAgICAgICAgICAgIDB4OGMgICAgLyogMTYgYml0cyAqLworI2RlZmluZSBQQ0lfSFdfSU5UX09VVFBVVCAgICAgICAgICAgICAgIDB4OGUgICAgLyogMTYgYml0cyAqLworI2RlZmluZSBQQ0lfSU9UTEJfUkFNX0lOUFVUICAgICAgICAgICAgIDB4OTAgICAgLyogMzIgYml0cyAqLworI2RlZmluZSBQQ0lfSU9UTEJfQ0FNX0lOUFVUICAgICAgICAgICAgIDB4OTQgICAgLyogMzIgYml0cyAqLworI2RlZmluZSBQQ0lfSU9UTEJfUkFNX09VVFBVVCAgICAgICAgICAgIDB4OTggICAgLyogMzIgYml0cyAqLworI2RlZmluZSBQQ0lfSU9UTEJfQ0FNX09VVFBVVCAgICAgICAgICAgIDB4OWMgICAgLyogMzIgYml0cyAqLworI2RlZmluZSBQQ0lfU01CQVIwICAgICAgICAgICAgICAgICAgICAgIDB4YTAgICAgLyogOCAgYml0cyAqLworI2RlZmluZSBQQ0lfTVNJWkUwICAgICAgICAgICAgICAgICAgICAgIDB4YTEgICAgLyogOCAgYml0cyAqLworI2RlZmluZSBQQ0lfUE1CQVIwICAgICAgICAgICAgICAgICAgICAgIDB4YTIgICAgLyogOCAgYml0cyAqLworI2RlZmluZSBQQ0lfU01CQVIxICAgICAgICAgICAgICAgICAgICAgIDB4YTQgICAgLyogOCAgYml0cyAqLworI2RlZmluZSBQQ0lfTVNJWkUxICAgICAgICAgICAgICAgICAgICAgIDB4YTUgICAgLyogOCAgYml0cyAqLworI2RlZmluZSBQQ0lfUE1CQVIxICAgICAgICAgICAgICAgICAgICAgIDB4YTYgICAgLyogOCAgYml0cyAqLworI2RlZmluZSBQQ0lfU0lCQVIgICAgICAgICAgICAgICAgICAgICAgIDB4YTggICAgLyogOCAgYml0cyAqLworI2RlZmluZSAgIFBDSV9TSUJBUl9BRERSRVNTX01BU0sgICAgICAgIDB4ZgorI2RlZmluZSBQQ0lfSVNJWkUgICAgICAgICAgICAgICAgICAgICAgIDB4YTkgICAgLyogOCAgYml0cyAqLworI2RlZmluZSAgIFBDSV9JU0laRV8xNk0gICAgICAgICAgICAgICAgIDB4ZgorI2RlZmluZSAgIFBDSV9JU0laRV8zMk0gICAgICAgICAgICAgICAgIDB4ZQorI2RlZmluZSAgIFBDSV9JU0laRV82NE0gICAgICAgICAgICAgICAgIDB4YworI2RlZmluZSAgIFBDSV9JU0laRV8xMjhNICAgICAgICAgICAgICAgIDB4OAorI2RlZmluZSAgIFBDSV9JU0laRV8yNTZNICAgICAgICAgICAgICAgIDB4MAorI2RlZmluZSBQQ0lfUElCQVIgICAgICAgICAgICAgICAgICAgICAgIDB4YWEgICAgLyogOCAgYml0cyAqLworI2RlZmluZSBQQ0lfQ1BVX0NPVU5URVJfTElNSVRfSEkgICAgICAgIDB4YWMgICAgLyogMzIgYml0cyAqLworI2RlZmluZSBQQ0lfQ1BVX0NPVU5URVJfTElNSVRfTE8gICAgICAgIDB4YjAgICAgLyogMzIgYml0cyAqLworI2RlZmluZSBQQ0lfQ1BVX0NPVU5URVJfTElNSVQgICAgICAgICAgIDB4YjQgICAgLyogMzIgYml0cyAqLworI2RlZmluZSBQQ0lfU1lTX0xJTUlUICAgICAgICAgICAgICAgICAgIDB4YjggICAgLyogMzIgYml0cyAqLworI2RlZmluZSBQQ0lfU1lTX0NPVU5URVIgICAgICAgICAgICAgICAgIDB4YmMgICAgLyogMzIgYml0cyAqLworI2RlZmluZSAgIFBDSV9TWVNfQ09VTlRFUl9PVkVSRkxPVyAgICAgICgxPDwzMSkgLyogTGltaXQgcmVhY2hlZCAqLworI2RlZmluZSBQQ0lfU1lTX0xJTUlUX1BTRVVETyAgICAgICAgICAgIDB4YzAgICAgLyogMzIgYml0cyAqLworI2RlZmluZSBQQ0lfVVNFUl9USU1FUl9DT05UUk9MICAgICAgICAgIDB4YzQgICAgLyogOCAgYml0cyAqLworI2RlZmluZSBQQ0lfVVNFUl9USU1FUl9DT05GSUcgICAgICAgICAgIDB4YzUgICAgLyogOCAgYml0cyAqLworI2RlZmluZSBQQ0lfQ09VTlRFUl9JUlEgICAgICAgICAgICAgICAgIDB4YzYgICAgLyogOCAgYml0cyAqLworI2RlZmluZSAgUENJX0NPVU5URVJfSVJRX1NFVChzeXNfaXJxLCBjcHVfaXJxKSAgKCgoKHN5c19pcnEpICYgMHhmKSA8PCA0KSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjcHVfaXJxKSAmIDB4ZikpCisjZGVmaW5lICBQQ0lfQ09VTlRFUl9JUlFfU1lTKHYpICAgICAgICAgICAgICAgICAoKCh2KSA+PiA0KSAmIDB4ZikKKyNkZWZpbmUgIFBDSV9DT1VOVEVSX0lSUV9DUFUodikgICAgICAgICAgICAgICAgICgodikgJiAweGYpCisjZGVmaW5lIFBDSV9QSU9fRVJST1JfQ09NTUFORCAgICAgICAgICAgMHhjNyAgICAvKiA4ICBiaXRzICovCisjZGVmaW5lIFBDSV9QSU9fRVJST1JfQUREUkVTUyAgICAgICAgICAgMHhjOCAgICAvKiAzMiBiaXRzICovCisjZGVmaW5lIFBDSV9JT1RMQl9FUlJPUl9BRERSRVNTICAgICAgICAgMHhjYyAgICAvKiAzMiBiaXRzICovCisjZGVmaW5lIFBDSV9TWVNfU1RBVFVTICAgICAgICAgICAgICAgICAgMHhkMCAgICAvKiA4ICBiaXRzICovCisjZGVmaW5lICAgUENJX1NZU19TVEFUVVNfUkVTRVRfRU5BQkxFICAgICAgICAgICAoMTw8MCkKKyNkZWZpbmUgICBQQ0lfU1lTX1NUQVRVU19SRVNFVCAgICAgICAgICAgICAgICAgICgxPDwxKQorI2RlZmluZSAgIFBDSV9TWVNfU1RBVFVTX1dBVENIRE9HX1JFU0VUICAgICAgICAgKDE8PDQpCisjZGVmaW5lICAgUENJX1NZU19TVEFUVVNfUENJX1JFU0VUICAgICAgICAgICAgICAoMTw8NSkKKyNkZWZpbmUgICBQQ0lfU1lTX1NUQVRVU19QQ0lfUkVTRVRfRU5BQkxFICAgICAgICgxPDw2KQorI2RlZmluZSAgIFBDSV9TWVNfU1RBVFVTX1BDSV9TQVRURUxJVEVfTU9ERSAgICAgKDE8PDcpCisKKyNlbmRpZiAvKiAhKF9fU1BBUkNfUENJQ19IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvcGNvbmYuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3Bjb25mLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDczYzFmMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3Bjb25mLmgKQEAgLTAsMCArMSwyNSBAQAorLyogJElkOiBwY29uZi5oLHYgMS4zIDE5OTYvMDQvMjUgMDY6MTM6MjUgZGF2ZW0gRXhwICQKKyAqIHBjb25mLmg6IHBhdGhjb25mKCkgYW5kIGZwYXRoY29uZigpIGRlZmluZXMgZm9yIFN1bk9TCisgKiAgICAgICAgICBzeXN0ZW0gY2FsbCBjb21wYXRpYmlsaXR5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NSBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCisgKi8KKworI2lmbmRlZiBfU1BBUkNfUENPTkZfSAorI2RlZmluZSBfU1BBUkNfUENPTkZfSAorCisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9saW1pdHMuaD4KKworI2RlZmluZSBfUENPTkZfTElOSyAgICAgICAxIC8qIE1heCBudW1iZXIgb2YgbGlua3MgdG8gYW4gb2JqZWN0ICAgICAgICAqLworI2RlZmluZSBfUENPTkZfQ0FOT04gICAgICAyIC8qIFRUWSBpbnB1dCBidWZmZXIgbGluZSBzaXplICAgICAgICAgICAgICAqLworI2RlZmluZSBfUENPTkZfSU5QVVQgICAgICAzIC8qIEJpZ2dlc3QgcGFja2V0IGEgdHR5IGNhbiBpbWJpYmUgYXQgb25jZSAqLworI2RlZmluZSBfUENPTkZfTkFNRSAgICAgICA0IC8qIEZpbGVuYW1lIGxlbmd0aCBtYXggICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfUENPTkZfUEFUSCAgICAgICA1IC8qIE1heCBzaXplIG9mIGEgcGF0aG5hbWUgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfUENPTkZfUElQRSAgICAgICA2IC8qIEJ1ZmZlciBzaXplIGZvciBhIHBpcGUgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfUENPTkZfQ0hSRVNUUklDVCA3IC8qIENhbiBvbmx5IHJvb3QgY2hvd24gZmlsZXM/ICAgICAgICAgICAgICAqLworI2RlZmluZSBfUENPTkZfTk9UUlVOQyAgICA4IC8qIEFyZSBwYXRobmFtZXMgdHJ1bmNhdGVkIGlmIHRvbyBiaWc/ICAgICAqLworI2RlZmluZSBfUENPTkZfVkRJU0FCTEUgICA5IC8qIE1hZ2ljIGNoYXIgdG8gZGlzYWJsZSBzcGVjaWFsIHR0eSBjaGFycyAqLworI2RlZmluZSBfUENPTkZfTUFYUENPTkYgICA5CisKKyNlbmRpZiAvKiAhKF9TUEFSQ19QQ09ORl9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvcGVyY3B1LmggYi9pbmNsdWRlL2FzbS1zcGFyYy9wZXJjcHUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjA2NmE3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvcGVyY3B1LmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fQVJDSF9TUEFSQ19QRVJDUFVfXworI2RlZmluZSBfX0FSQ0hfU1BBUkNfUEVSQ1BVX18KKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BlcmNwdS5oPgorCisjZW5kaWYgLyogX19BUkNIX1NQQVJDX1BFUkNQVV9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9wZXJmY3RyLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9wZXJmY3RyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM2ODczMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3BlcmZjdHIuaApAQCAtMCwwICsxLDE3MyBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFBFUkZPUk1BTkNFIElOU1RSVU1FTlRBVElPTiAgCisgIEd1aWxsYXVtZSBUaG91dmVuaW4gICAgICAgICAgIDA4LzEwLzk4CisgIERhdmlkIFMuIE1pbGxlciAgICAgICAgICAgICAgIDEwLzA2Lzk4CisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjaWZuZGVmIFBFUkZfQ09VTlRFUl9BUEkKKyNkZWZpbmUgUEVSRl9DT1VOVEVSX0FQSQorCisvKiBzeXNfcGVyZmN0cigpIGludGVyZmFjZS4gIEZpcnN0IGFyZyBpcyBvcGVyYXRpb24gY29kZQorICogZnJvbSBlbnVtZXJhdGlvbiBiZWxvdy4gIFRoZSBtZWFuaW5nIG9mIGZ1cnRoZXIgYXJndW1lbnRzCisgKiBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgb3BlcmF0aW9uIGNvZGUuCisgKgorICogaW50IHN5c19wZXJmY3RyKGludCBvcGNvZGUsIHVuc2lnbmVkIGxvbmcgYXJnMCwKKyAqICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGFyZzEsIHVuc2lnbmVkIGxvbmcgYXJnMikKKyAqCisgKiBQb2ludGVycyB3aGljaCBhcmUgcGFzc2VkIGJ5IHRoZSB1c2VyIGFyZSBwb2ludGVycyB0byA2NC1iaXQKKyAqIGludGVnZXJzLgorICoKKyAqIE9uY2UgZW5hYmxlZCwgcGVyZm9ybWFuY2UgY291bnRlciBzdGF0ZSBpcyByZXRhaW5lZCB1bnRpbCB0aGUKKyAqIHByb2Nlc3MgZWl0aGVyIGV4aXRzIG9yIHBlcmZvcm1zIGFuIGV4ZWMuICBUaGF0IGlzLCBwZXJmb3JtYW5jZQorICogY291bnRlcnMgcmVtYWluIGVuYWJsZWQgZm9yIGZvcmsvY2xvbmUgY2hpbGRyZW4uCisgKi8KK2VudW0gcGVyZmN0cl9vcGNvZGUgeworCS8qIEVuYWJsZSBVbHRyYVNwYXJjIHBlcmZvcm1hbmNlIGNvdW50ZXJzLCBBUkcwIGlzIHBvaW50ZXIKKwkgKiB0byA2NC1iaXQgYWNjdW11bGF0b3IgZm9yIEQwIGNvdW50ZXIgaW4gUElDLCBBUkcxIGlzIHBvaW50ZXIKKwkgKiB0byA2NC1iaXQgYWNjdW11bGF0b3IgZm9yIEQxIGNvdW50ZXIuICBBUkcyIGlzIGEgcG9pbnRlciB0bworCSAqIHRoZSBpbml0aWFsIFBDUiByZWdpc3RlciB2YWx1ZSB0byB1c2UuCisJICovCisJUEVSRkNUUl9PTiwKKworCS8qIERpc2FibGUgVWx0cmFTcGFyYyBwZXJmb3JtYW5jZSBjb3VudGVycy4gIFRoZSBQQ1IgaXMgd3JpdHRlbgorCSAqIHdpdGggemVybyBhbmQgdGhlIHVzZXIgY291bnRlciBhY2N1bXVsYXRvciBwb2ludGVycyBhbmQKKwkgKiB3b3JraW5nIFBDUiByZWdpc3RlciB2YWx1ZSBhcmUgZm9yZ290dGVuLgorCSAqLworCVBFUkZDVFJfT0ZGLAorCisJLyogQWRkIGN1cnJlbnQgRDAgYW5kIEQxIFBJQyB2YWx1ZXMgaW50byB1c2VyIHBvaW50ZXJzIGdpdmVuCisJICogaW4gUEVSRkNUUl9PTiBvcGVyYXRpb24uICBUaGUgUElDIGlzIGNsZWFyZWQgYmVmb3JlIHJldHVybmluZy4KKwkgKi8KKwlQRVJGQ1RSX1JFQUQsCisKKwkvKiBDbGVhciB0aGUgUElDIHJlZ2lzdGVyLiAqLworCVBFUkZDVFJfQ0xSUElDLAorCisJLyogQmVnaW4gdXNpbmcgYSBuZXcgUENSIHZhbHVlLCB0aGUgcG9pbnRlciB0byB3aGljaCBpcyBwYXNzZWQKKwkgKiBpbiBBUkcwLiAgVGhlIFBJQyBpcyBhbHNvIGNsZWFyZWQgYWZ0ZXIgdGhlIG5ldyBQQ1IgdmFsdWUgaXMKKwkgKiB3cml0dGVuLgorCSAqLworCVBFUkZDVFJfU0VUUENSLAorCisJLyogU3RvcmUgaW4gcG9pbnRlciBnaXZlbiBpbiBBUkcwIHRoZSBjdXJyZW50IFBDUiByZWdpc3RlciB2YWx1ZQorCSAqIGJlaW5nIHVzZWQuCisJICovCisJUEVSRkNUUl9HRVRQQ1IKK307CisKKy8qIEkgZG9uJ3Qgd2FudCB0aGUga2VybmVsJ3MgbmFtZXNwYWNlIHRvIGJlIHBvbGx1dGVkIHdpdGggdGhpcworICogc3R1ZmYgd2hlbiB0aGlzIGZpbGUgaXMgaW5jbHVkZWQuICAtLURhdmVNCisgKi8KKyNpZm5kZWYgX19LRVJORUxfXworCisjZGVmaW5lICBQUklWIDB4MDAwMDAwMDEKKyNkZWZpbmUgIFNZUyAgMHgwMDAwMDAwMgorI2RlZmluZSAgVVNSICAweDAwMDAwMDA0CisKKy8qIFBpYy5TMCBTZWxlY3Rpb24gQml0IEZpZWxkIEVuY29kaW5nLCBVbHRyYS1JL0lJICAqLworI2RlZmluZSAgQ1lDTEVfQ05UICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSAgSU5TVFJfQ05UICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSAgRElTUEFUQ0gwX0lDX01JU1MgICAgMHgwMDAwMDAyMAorI2RlZmluZSAgRElTUEFUQ0gwX1NUT1JFQlVGICAgMHgwMDAwMDAzMAorI2RlZmluZSAgSUNfUkVGICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSAgRENfUkQgICAgICAgICAgICAgICAgMHgwMDAwMDA5MAorI2RlZmluZSAgRENfV1IgICAgICAgICAgICAgICAgMHgwMDAwMDBBMAorI2RlZmluZSAgTE9BRF9VU0UgICAgICAgICAgICAgMHgwMDAwMDBCMAorI2RlZmluZSAgRUNfUkVGICAgICAgICAgICAgICAgMHgwMDAwMDBDMAorI2RlZmluZSAgRUNfV1JJVEVfSElUX1JETyAgICAgMHgwMDAwMDBEMAorI2RlZmluZSAgRUNfU05PT1BfSU5WICAgICAgICAgMHgwMDAwMDBFMAorI2RlZmluZSAgRUNfUkRfSElUICAgICAgICAgICAgMHgwMDAwMDBGMAorCisvKiBQaWMuUzAgU2VsZWN0aW9uIEJpdCBGaWVsZCBFbmNvZGluZywgVWx0cmEtSUlJICAqLworI2RlZmluZSAgVVMzX0NZQ0xFX0NOVAkgICAgICAJMHgwMDAwMDAwMAorI2RlZmluZSAgVVMzX0lOU1RSX0NOVAkgICAgICAJMHgwMDAwMDAxMAorI2RlZmluZSAgVVMzX0RJU1BBVENIMF9JQ19NSVNTCTB4MDAwMDAwMjAKKyNkZWZpbmUgIFVTM19ESVNQQVRDSDBfQlJfVEdUCTB4MDAwMDAwMzAKKyNkZWZpbmUgIFVTM19ESVNQQVRDSDBfMk5EX0JSCTB4MDAwMDAwNDAKKyNkZWZpbmUgIFVTM19SU1RBTExfU1RPUkVRCTB4MDAwMDAwNTAKKyNkZWZpbmUgIFVTM19SU1RBTExfSVVfVVNFCTB4MDAwMDAwNjAKKyNkZWZpbmUgIFVTM19JQ19SRUYJCTB4MDAwMDAwODAKKyNkZWZpbmUgIFVTM19EQ19SRAkJMHgwMDAwMDA5MAorI2RlZmluZSAgVVMzX0RDX1dSCQkweDAwMDAwMGEwCisjZGVmaW5lICBVUzNfRUNfUkVGCQkweDAwMDAwMGMwCisjZGVmaW5lICBVUzNfRUNfV1JfSElUX1JUTwkweDAwMDAwMGQwCisjZGVmaW5lICBVUzNfRUNfU05PT1BfSU5WCTB4MDAwMDAwZTAKKyNkZWZpbmUgIFVTM19FQ19SRF9NSVNTCQkweDAwMDAwMGYwCisjZGVmaW5lICBVUzNfUENfUE9SVDBfUkQJMHgwMDAwMDEwMAorI2RlZmluZSAgVVMzX1NJX1NOT09QCQkweDAwMDAwMTEwCisjZGVmaW5lICBVUzNfU0lfQ0lRX0ZMT1cJMHgwMDAwMDEyMAorI2RlZmluZSAgVVMzX1NJX09XTkVECQkweDAwMDAwMTMwCisjZGVmaW5lICBVUzNfU1dfQ09VTlRfMAkJMHgwMDAwMDE0MAorI2RlZmluZSAgVVMzX0lVX0JSX01JU1NfVEFLRU4JMHgwMDAwMDE1MAorI2RlZmluZSAgVVMzX0lVX0JSX0NPVU5UX1RBS0VOCTB4MDAwMDAxNjAKKyNkZWZpbmUgIFVTM19ESVNQX1JTX01JU1BSRUQJMHgwMDAwMDE3MAorI2RlZmluZSAgVVMzX0ZBX1BJUEVfQ09NUEwJMHgwMDAwMDE4MAorI2RlZmluZSAgVVMzX01DX1JFQURTXzAJCTB4MDAwMDAyMDAKKyNkZWZpbmUgIFVTM19NQ19SRUFEU18xCQkweDAwMDAwMjEwCisjZGVmaW5lICBVUzNfTUNfUkVBRFNfMgkJMHgwMDAwMDIyMAorI2RlZmluZSAgVVMzX01DX1JFQURTXzMJCTB4MDAwMDAyMzAKKyNkZWZpbmUgIFVTM19NQ19TVEFMTFNfMAkweDAwMDAwMjQwCisjZGVmaW5lICBVUzNfTUNfU1RBTExTXzIJMHgwMDAwMDI1MAorCisvKiBQaWMuUzEgU2VsZWN0aW9uIEJpdCBGaWVsZCBFbmNvZGluZywgVWx0cmEtSS9JSSAgKi8KKyNkZWZpbmUgIENZQ0xFX0NOVF9EMSAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgIElOU1RSX0NOVF9EMSAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgIERJU1BBVENIMF9JQ19NSVNQUkVEIDB4MDAwMDEwMDAKKyNkZWZpbmUgIERJU1BBVENIMF9GUF9VU0UgICAgIDB4MDAwMDE4MDAKKyNkZWZpbmUgIElDX0hJVCAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgIERDX1JEX0hJVCAgICAgICAgICAgIDB4MDAwMDQ4MDAKKyNkZWZpbmUgIERDX1dSX0hJVCAgICAgICAgICAgIDB4MDAwMDUwMDAKKyNkZWZpbmUgIExPQURfVVNFX1JBVyAgICAgICAgIDB4MDAwMDU4MDAKKyNkZWZpbmUgIEVDX0hJVCAgICAgICAgICAgICAgIDB4MDAwMDYwMDAKKyNkZWZpbmUgIEVDX1dCICAgICAgICAgICAgICAgIDB4MDAwMDY4MDAKKyNkZWZpbmUgIEVDX1NOT09QX0NCICAgICAgICAgIDB4MDAwMDcwMDAKKyNkZWZpbmUgIEVDX0lUX0hJVCAgICAgICAgICAgIDB4MDAwMDc4MDAKKworLyogUGljLlMxIFNlbGVjdGlvbiBCaXQgRmllbGQgRW5jb2RpbmcsIFVsdHJhLUlJSSAgKi8KKyNkZWZpbmUgIFVTM19DWUNMRV9DTlRfRDEJMHgwMDAwMDAwMAorI2RlZmluZSAgVVMzX0lOU1RSX0NOVF9EMQkweDAwMDAwODAwCisjZGVmaW5lICBVUzNfRElTUEFUQ0gwX01JU1BSRUQJMHgwMDAwMTAwMAorI2RlZmluZSAgVVMzX0lDX01JU1NfQ0FOQ0VMTEVECTB4MDAwMDE4MDAKKyNkZWZpbmUgIFVTM19SRV9FTkRJQU5fTUlTUwkweDAwMDAyMDAwCisjZGVmaW5lICBVUzNfUkVfRlBVX0JZUEFTUwkweDAwMDAyODAwCisjZGVmaW5lICBVUzNfUkVfRENfTUlTUwkJMHgwMDAwMzAwMAorI2RlZmluZSAgVVMzX1JFX0VDX01JU1MJCTB4MDAwMDM4MDAKKyNkZWZpbmUgIFVTM19JQ19NSVNTCQkweDAwMDA0MDAwCisjZGVmaW5lICBVUzNfRENfUkRfTUlTUwkJMHgwMDAwNDgwMAorI2RlZmluZSAgVVMzX0RDX1dSX01JU1MJCTB4MDAwMDUwMDAKKyNkZWZpbmUgIFVTM19SU1RBTExfRlBfVVNFCTB4MDAwMDU4MDAKKyNkZWZpbmUgIFVTM19FQ19NSVNTRVMJCTB4MDAwMDYwMDAKKyNkZWZpbmUgIFVTM19FQ19XQgkJMHgwMDAwNjgwMAorI2RlZmluZSAgVVMzX0VDX1NOT09QX0NCCTB4MDAwMDcwMDAKKyNkZWZpbmUgIFVTM19FQ19JQ19NSVNTCQkweDAwMDA3ODAwCisjZGVmaW5lICBVUzNfUkVfUENfTUlTUwkJMHgwMDAwODAwMAorI2RlZmluZSAgVVMzX0lUTEJfTUlTUwkJMHgwMDAwODgwMAorI2RlZmluZSAgVVMzX0RUTEJfTUlTUwkJMHgwMDAwOTAwMAorI2RlZmluZSAgVVMzX1dDX01JU1MJCTB4MDAwMDk4MDAKKyNkZWZpbmUgIFVTM19XQ19TTk9PUF9DQgkweDAwMDBhMDAwCisjZGVmaW5lICBVUzNfV0NfU0NSVUJCRUQJMHgwMDAwYTgwMAorI2RlZmluZSAgVVMzX1dDX1dCX1dPX1JFQUQJMHgwMDAwYjAwMAorI2RlZmluZSAgVVMzX1BDX1NPRlRfSElUCTB4MDAwMGMwMDAKKyNkZWZpbmUgIFVTM19QQ19TTk9PUF9JTlYJMHgwMDAwYzgwMAorI2RlZmluZSAgVVMzX1BDX0hBUkRfSElUCTB4MDAwMGQwMDAKKyNkZWZpbmUgIFVTM19QQ19QT1JUMV9SRAkweDAwMDBkODAwCisjZGVmaW5lICBVUzNfU1dfQ09VTlRfMQkJMHgwMDAwZTAwMAorI2RlZmluZSAgVVMzX0lVX1NUQVRfQlJfTUlTX1VOVEFLRU4JMHgwMDAwZTgwMAorI2RlZmluZSAgVVMzX0lVX1NUQVRfQlJfQ09VTlRfVU5UQUtFTgkweDAwMDBmMDAwCisjZGVmaW5lICBVUzNfUENfTVNfTUlTU0VTCTB4MDAwMGY4MDAKKyNkZWZpbmUgIFVTM19NQ19XUklURVNfMAkweDAwMDEwODAwCisjZGVmaW5lICBVUzNfTUNfV1JJVEVTXzEJMHgwMDAxMTAwMAorI2RlZmluZSAgVVMzX01DX1dSSVRFU18yCTB4MDAwMTE4MDAKKyNkZWZpbmUgIFVTM19NQ19XUklURVNfMwkweDAwMDEyMDAwCisjZGVmaW5lICBVUzNfTUNfU1RBTExTXzEJMHgwMDAxMjgwMAorI2RlZmluZSAgVVMzX01DX1NUQUxMU18zCTB4MDAwMTMwMDAKKyNkZWZpbmUgIFVTM19SRV9SQVdfTUlTUwkweDAwMDEzODAwCisjZGVmaW5lICBVUzNfRk1fUElQRV9DT01QTEVUSU9OCTB4MDAwMTQwMDAKKworc3RydWN0IHZjb3VudGVyX3N0cnVjdCB7CisgIHVuc2lnbmVkIGxvbmcgbG9uZyB2Y250MDsKKyAgdW5zaWduZWQgbG9uZyBsb25nIHZjbnQxOworfTsKKworI2VuZGlmIC8qICEoX19LRVJORUxfXykgKi8KKworI2VuZGlmIC8qICEoUEVSRl9DT1VOVEVSX0FQSSkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3BnYWxsb2MuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3BnYWxsb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjY4MDBhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvcGdhbGxvYy5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qICRJZDogcGdhbGxvYy5oLHYgMS4xNiAyMDAxLzEyLzIxIDA0OjU2OjE3IGRhdmVtIEV4cCAkICovCisjaWZuZGVmIF9TUEFSQ19QR0FMTE9DX0gKKyNkZWZpbmUgX1NQQVJDX1BHQUxMT0NfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKworI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL2J0Zml4dXAuaD4KKworc3RydWN0IHBhZ2U7CisKK2V4dGVybiBzdHJ1Y3QgcGd0YWJsZV9jYWNoZV9zdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcgKnBnZF9jYWNoZTsKKwl1bnNpZ25lZCBsb25nICpwdGVfY2FjaGU7CisJdW5zaWduZWQgbG9uZyBwZ3RhYmxlX2NhY2hlX3N6OworCXVuc2lnbmVkIGxvbmcgcGdkX2NhY2hlX3N6OworfSBwZ3RfcXVpY2tsaXN0czsKKyNkZWZpbmUgcGdkX3F1aWNrbGlzdCAgICAgICAgICAgKHBndF9xdWlja2xpc3RzLnBnZF9jYWNoZSkKKyNkZWZpbmUgcG1kX3F1aWNrbGlzdCAgICAgICAgICAgKCh1bnNpZ25lZCBsb25nICopMCkKKyNkZWZpbmUgcHRlX3F1aWNrbGlzdCAgICAgICAgICAgKHBndF9xdWlja2xpc3RzLnB0ZV9jYWNoZSkKKyNkZWZpbmUgcGd0YWJsZV9jYWNoZV9zaXplICAgICAgKHBndF9xdWlja2xpc3RzLnBndGFibGVfY2FjaGVfc3opCisjZGVmaW5lIHBnZF9jYWNoZV9zaXplCQkocGd0X3F1aWNrbGlzdHMucGdkX2NhY2hlX3N6KQorCitleHRlcm4gdm9pZCBjaGVja19wZ3RfY2FjaGUodm9pZCk7CitCVEZJWFVQREVGX0NBTEwodm9pZCwJIGRvX2NoZWNrX3BndF9jYWNoZSwgaW50LCBpbnQpCisjZGVmaW5lIGRvX2NoZWNrX3BndF9jYWNoZShsb3csaGlnaCkgQlRGSVhVUF9DQUxMKGRvX2NoZWNrX3BndF9jYWNoZSkobG93LGhpZ2gpCisKK0JURklYVVBERUZfQ0FMTChwZ2RfdCAqLCBnZXRfcGdkX2Zhc3QsIHZvaWQpCisjZGVmaW5lIGdldF9wZ2RfZmFzdCgpCQlCVEZJWFVQX0NBTEwoZ2V0X3BnZF9mYXN0KSgpCisKK0JURklYVVBERUZfQ0FMTCh2b2lkLCBmcmVlX3BnZF9mYXN0LCBwZ2RfdCAqKQorI2RlZmluZSBmcmVlX3BnZF9mYXN0KHBnZCkJQlRGSVhVUF9DQUxMKGZyZWVfcGdkX2Zhc3QpKHBnZCkKKworI2RlZmluZSBwZ2RfZnJlZShwZ2QpCWZyZWVfcGdkX2Zhc3QocGdkKQorI2RlZmluZSBwZ2RfYWxsb2MobW0pCWdldF9wZ2RfZmFzdCgpCisKK0JURklYVVBERUZfQ0FMTCh2b2lkLCBwZ2Rfc2V0LCBwZ2RfdCAqLCBwbWRfdCAqKQorI2RlZmluZSBwZ2Rfc2V0KHBnZHAscG1kcCkgQlRGSVhVUF9DQUxMKHBnZF9zZXQpKHBnZHAscG1kcCkKKyNkZWZpbmUgcGdkX3BvcHVsYXRlKE1NLCBQR0QsIFBNRCkgICAgICBwZ2Rfc2V0KFBHRCwgUE1EKQorCitCVEZJWFVQREVGX0NBTEwocG1kX3QgKiwgcG1kX2FsbG9jX29uZSwgc3RydWN0IG1tX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nKQorI2RlZmluZSBwbWRfYWxsb2Nfb25lKG1tLCBhZGRyZXNzKQlCVEZJWFVQX0NBTEwocG1kX2FsbG9jX29uZSkobW0sIGFkZHJlc3MpCisKK0JURklYVVBERUZfQ0FMTCh2b2lkLCBmcmVlX3BtZF9mYXN0LCBwbWRfdCAqKQorI2RlZmluZSBmcmVlX3BtZF9mYXN0KHBtZCkJQlRGSVhVUF9DQUxMKGZyZWVfcG1kX2Zhc3QpKHBtZCkKKworI2RlZmluZSBwbWRfZnJlZShwbWQpICAgICAgICAgICBmcmVlX3BtZF9mYXN0KHBtZCkKKyNkZWZpbmUgX19wbWRfZnJlZV90bGIodGxiLCBwbWQpIHBtZF9mcmVlKHBtZCkKKworQlRGSVhVUERFRl9DQUxMKHZvaWQsIHBtZF9wb3B1bGF0ZSwgcG1kX3QgKiwgc3RydWN0IHBhZ2UgKikKKyNkZWZpbmUgcG1kX3BvcHVsYXRlKE1NLCBQTUQsIFBURSkgICAgICAgIEJURklYVVBfQ0FMTChwbWRfcG9wdWxhdGUpKFBNRCwgUFRFKQorQlRGSVhVUERFRl9DQUxMKHZvaWQsIHBtZF9zZXQsIHBtZF90ICosIHB0ZV90ICopCisjZGVmaW5lIHBtZF9wb3B1bGF0ZV9rZXJuZWwoTU0sIFBNRCwgUFRFKSBCVEZJWFVQX0NBTEwocG1kX3NldCkoUE1ELCBQVEUpCisKK0JURklYVVBERUZfQ0FMTChzdHJ1Y3QgcGFnZSAqLCBwdGVfYWxsb2Nfb25lLCBzdHJ1Y3QgbW1fc3RydWN0ICosIHVuc2lnbmVkIGxvbmcpCisjZGVmaW5lIHB0ZV9hbGxvY19vbmUobW0sIGFkZHJlc3MpCUJURklYVVBfQ0FMTChwdGVfYWxsb2Nfb25lKShtbSwgYWRkcmVzcykKK0JURklYVVBERUZfQ0FMTChwdGVfdCAqLCBwdGVfYWxsb2Nfb25lX2tlcm5lbCwgc3RydWN0IG1tX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nKQorI2RlZmluZSBwdGVfYWxsb2Nfb25lX2tlcm5lbChtbSwgYWRkcikJQlRGSVhVUF9DQUxMKHB0ZV9hbGxvY19vbmVfa2VybmVsKShtbSwgYWRkcikKKworQlRGSVhVUERFRl9DQUxMKHZvaWQsIGZyZWVfcHRlX2Zhc3QsIHB0ZV90ICopCisjZGVmaW5lIHB0ZV9mcmVlX2tlcm5lbChwdGUpCUJURklYVVBfQ0FMTChmcmVlX3B0ZV9mYXN0KShwdGUpCisKK0JURklYVVBERUZfQ0FMTCh2b2lkLCBwdGVfZnJlZSwgc3RydWN0IHBhZ2UgKikKKyNkZWZpbmUgcHRlX2ZyZWUocHRlKQkJQlRGSVhVUF9DQUxMKHB0ZV9mcmVlKShwdGUpCisjZGVmaW5lIF9fcHRlX2ZyZWVfdGxiKHRsYiwgcHRlKQlwdGVfZnJlZShwdGUpCisKKyNlbmRpZiAvKiBfU1BBUkNfUEdBTExPQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9wZ3RhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzczYTZjMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3BndGFibGUuaApAQCAtMCwwICsxLDQ2NSBAQAorLyogJElkOiBwZ3RhYmxlLmgsdiAxLjExMCAyMDAxLzEyLzIxIDA0OjU2OjE3IGRhdmVtIEV4cCAkICovCisjaWZuZGVmIF9TUEFSQ19QR1RBQkxFX0gKKyNkZWZpbmUgX1NQQVJDX1BHVEFCTEVfSAorCisvKiAgYXNtLXNwYXJjL3BndGFibGUuaDogIERlZmluZXMgYW5kIGZ1bmN0aW9ucyB1c2VkIHRvIHdvcmsKKyAqICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBTcGFyYyBwYWdlIHRhYmxlcy4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk1IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTggSmFrdWIgSmVsaW5layAoampAc3Vuc2l0ZS5tZmYuY3VuaS5jeikKKyAqLworCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvNGxldmVsLWZpeHVwLmg+CisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpZmRlZiBDT05GSUdfU1VONAorI2luY2x1ZGUgPGFzbS9wZ3RzdW40Lmg+CisjZWxzZQorI2luY2x1ZGUgPGFzbS9wZ3RzdW40Yy5oPgorI2VuZGlmCisjaW5jbHVkZSA8YXNtL3BndHNybW11Lmg+CisjaW5jbHVkZSA8YXNtL3ZhYy1vcHMuaD4KKyNpbmNsdWRlIDxhc20vb3BsaWIuaD4KKyNpbmNsdWRlIDxhc20vYnRmaXh1cC5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworc3RydWN0IHZtX2FyZWFfc3RydWN0Oworc3RydWN0IHBhZ2U7CisKK2V4dGVybiB2b2lkIGxvYWRfbW11KHZvaWQpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgY2FsY19oaWdocGFnZXModm9pZCk7CisKK0JURklYVVBERUZfU0lNTTEzKHBnZGlyX3NoaWZ0KQorQlRGSVhVUERFRl9TRVRISShwZ2Rpcl9zaXplKQorQlRGSVhVUERFRl9TRVRISShwZ2Rpcl9tYXNrKQorCitCVEZJWFVQREVGX1NJTU0xMyhwdHJzX3Blcl9wbWQpCitCVEZJWFVQREVGX1NJTU0xMyhwdHJzX3Blcl9wZ2QpCitCVEZJWFVQREVGX1NJTU0xMyh1c2VyX3B0cnNfcGVyX3BnZCkKKworI2RlZmluZSBwdGVfRVJST1IoZSkgICBfX2J1aWx0aW5fdHJhcCgpCisjZGVmaW5lIHBtZF9FUlJPUihlKSAgIF9fYnVpbHRpbl90cmFwKCkKKyNkZWZpbmUgcGdkX0VSUk9SKGUpICAgX19idWlsdGluX3RyYXAoKQorCitCVEZJWFVQREVGX0lOVChwYWdlX25vbmUpCitCVEZJWFVQREVGX0lOVChwYWdlX3NoYXJlZCkKK0JURklYVVBERUZfSU5UKHBhZ2VfY29weSkKK0JURklYVVBERUZfSU5UKHBhZ2VfcmVhZG9ubHkpCitCVEZJWFVQREVGX0lOVChwYWdlX2tlcm5lbCkKKworI2RlZmluZSBQTURfU0hJRlQJCVNVTjRDX1BNRF9TSElGVAorI2RlZmluZSBQTURfU0laRSAgICAgICAgCSgxVUwgPDwgUE1EX1NISUZUKQorI2RlZmluZSBQTURfTUFTSyAgICAgICAgCSh+KFBNRF9TSVpFLTEpKQorI2RlZmluZSBQTURfQUxJR04oX19hZGRyKSAJKCgoX19hZGRyKSArIH5QTURfTUFTSykgJiBQTURfTUFTSykKKyNkZWZpbmUgUEdESVJfU0hJRlQgICAgIAlCVEZJWFVQX1NJTU0xMyhwZ2Rpcl9zaGlmdCkKKyNkZWZpbmUgUEdESVJfU0laRSAgICAgIAlCVEZJWFVQX1NFVEhJKHBnZGlyX3NpemUpCisjZGVmaW5lIFBHRElSX01BU0sgICAgICAJQlRGSVhVUF9TRVRISShwZ2Rpcl9tYXNrKQorI2RlZmluZSBQVFJTX1BFUl9QVEUgICAgCTEwMjQKKyNkZWZpbmUgUFRSU19QRVJfUE1EICAgIAlCVEZJWFVQX1NJTU0xMyhwdHJzX3Blcl9wbWQpCisjZGVmaW5lIFBUUlNfUEVSX1BHRCAgICAJQlRGSVhVUF9TSU1NMTMocHRyc19wZXJfcGdkKQorI2RlZmluZSBVU0VSX1BUUlNfUEVSX1BHRAlCVEZJWFVQX1NJTU0xMyh1c2VyX3B0cnNfcGVyX3BnZCkKKyNkZWZpbmUgRklSU1RfVVNFUl9QR0RfTlIJMAorI2RlZmluZSBQVEVfU0laRQkJKFBUUlNfUEVSX1BURSo0KQorCisjZGVmaW5lIFBBR0VfTk9ORSAgICAgIF9fcGdwcm90KEJURklYVVBfSU5UKHBhZ2Vfbm9uZSkpCisjZGVmaW5lIFBBR0VfU0hBUkVEICAgIF9fcGdwcm90KEJURklYVVBfSU5UKHBhZ2Vfc2hhcmVkKSkKKyNkZWZpbmUgUEFHRV9DT1BZICAgICAgX19wZ3Byb3QoQlRGSVhVUF9JTlQocGFnZV9jb3B5KSkKKyNkZWZpbmUgUEFHRV9SRUFET05MWSAgX19wZ3Byb3QoQlRGSVhVUF9JTlQocGFnZV9yZWFkb25seSkpCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIHBhZ2Vfa2VybmVsOworCisjaWZkZWYgTU9EVUxFCisjZGVmaW5lIFBBR0VfS0VSTkVMCXBhZ2Vfa2VybmVsCisjZWxzZQorI2RlZmluZSBQQUdFX0tFUk5FTCAgICBfX3BncHJvdChCVEZJWFVQX0lOVChwYWdlX2tlcm5lbCkpCisjZW5kaWYKKworLyogVG9wLWxldmVsIHBhZ2UgZGlyZWN0b3J5ICovCitleHRlcm4gcGdkX3Qgc3dhcHBlcl9wZ19kaXJbMTAyNF07CisKKy8qIFBhZ2UgdGFibGUgZm9yIDAtNE1CIGZvciBldmVyeWJvZHksIG9uIHRoZSBTcGFyYyB0aGlzCisgKiBob2xkcyB0aGUgc2FtZSBhcyBvbiB0aGUgaTM4Ni4KKyAqLworZXh0ZXJuIHB0ZV90IHBnMFsxMDI0XTsKK2V4dGVybiBwdGVfdCBwZzFbMTAyNF07CitleHRlcm4gcHRlX3QgcGcyWzEwMjRdOworZXh0ZXJuIHB0ZV90IHBnM1sxMDI0XTsKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcHRyX2luX2N1cnJlbnRfcGdkOworCisvKiBIZXJlIGlzIGEgdHJpY2ssIHNpbmNlIG1tYXAuYyBuZWVkIHRoZSBpbml0aWFsaXplciBlbGVtZW50cyBmb3IKKyAqIHByb3RlY3Rpb25fbWFwW10gdG8gYmUgY29uc3RhbnQgYXQgY29tcGlsZSB0aW1lLCBJIHNldCB0aGUgZm9sbG93aW5nCisgKiB0byBhbGwgemVyb3MuICBJIHNldCBpdCB0byB0aGUgcmVhbCB2YWx1ZXMgYWZ0ZXIgSSBsaW5rIGluIHRoZQorICogYXBwcm9wcmlhdGUgTU1VIHBhZ2UgdGFibGUgcm91dGluZXMgYXQgYm9vdCB0aW1lLgorICovCisjZGVmaW5lIF9fUDAwMCAgX19wZ3Byb3QoMCkKKyNkZWZpbmUgX19QMDAxICBfX3BncHJvdCgwKQorI2RlZmluZSBfX1AwMTAgIF9fcGdwcm90KDApCisjZGVmaW5lIF9fUDAxMSAgX19wZ3Byb3QoMCkKKyNkZWZpbmUgX19QMTAwICBfX3BncHJvdCgwKQorI2RlZmluZSBfX1AxMDEgIF9fcGdwcm90KDApCisjZGVmaW5lIF9fUDExMCAgX19wZ3Byb3QoMCkKKyNkZWZpbmUgX19QMTExICBfX3BncHJvdCgwKQorCisjZGVmaW5lIF9fUzAwMAlfX3BncHJvdCgwKQorI2RlZmluZSBfX1MwMDEJX19wZ3Byb3QoMCkKKyNkZWZpbmUgX19TMDEwCV9fcGdwcm90KDApCisjZGVmaW5lIF9fUzAxMQlfX3BncHJvdCgwKQorI2RlZmluZSBfX1MxMDAJX19wZ3Byb3QoMCkKKyNkZWZpbmUgX19TMTAxCV9fcGdwcm90KDApCisjZGVmaW5lIF9fUzExMAlfX3BncHJvdCgwKQorI2RlZmluZSBfX1MxMTEJX19wZ3Byb3QoMCkKKworZXh0ZXJuIGludCBudW1fY29udGV4dHM7CisKKy8qIEZpcnN0IHBoeXNpY2FsIHBhZ2UgY2FuIGJlIGFueXdoZXJlLCB0aGUgZm9sbG93aW5nIGlzIG5lZWRlZCBzbyB0aGF0CisgKiB2YS0tPnBhIGFuZCB2aWNlIHZlcnNhIGNvbnZlcnNpb25zIHdvcmsgcHJvcGVybHkgd2l0aG91dCBwZXJmb3JtYW5jZQorICogaGl0IGZvciBhbGwgX19wYSgpL19fdmEoKSBvcGVyYXRpb25zLgorICovCitleHRlcm4gdW5zaWduZWQgbG9uZyBwaHlzX2Jhc2U7CitleHRlcm4gdW5zaWduZWQgbG9uZyBwZm5fYmFzZTsKKworLyoKKyAqIEJBRF9QQUdFVEFCTEUgaXMgdXNlZCB3aGVuIHdlIG5lZWQgYSBib2d1cyBwYWdlLXRhYmxlLCB3aGlsZQorICogQkFEX1BBR0UgaXMgdXNlZCBmb3IgYSBib2d1cyBwYWdlLgorICoKKyAqIFpFUk9fUEFHRSBpcyBhIGdsb2JhbCBzaGFyZWQgcGFnZSB0aGF0IGlzIGFsd2F5cyB6ZXJvOiB1c2VkCisgKiBmb3IgemVyby1tYXBwZWQgbWVtb3J5IGFyZWFzIGV0Yy4uCisgKi8KK2V4dGVybiBwdGVfdCAqIF9fYmFkX3BhZ2V0YWJsZSh2b2lkKTsKK2V4dGVybiBwdGVfdCBfX2JhZF9wYWdlKHZvaWQpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZW1wdHlfemVyb19wYWdlOworCisjZGVmaW5lIEJBRF9QQUdFVEFCTEUgX19iYWRfcGFnZXRhYmxlKCkKKyNkZWZpbmUgQkFEX1BBR0UgX19iYWRfcGFnZSgpCisjZGVmaW5lIFpFUk9fUEFHRSh2YWRkcikgKHZpcnRfdG9fcGFnZSgmZW1wdHlfemVyb19wYWdlKSkKKworLyoKKyAqLworQlRGSVhVUERFRl9DQUxMX0NPTlNUKHN0cnVjdCBwYWdlICosIHBtZF9wYWdlLCBwbWRfdCkKK0JURklYVVBERUZfQ0FMTF9DT05TVCh1bnNpZ25lZCBsb25nLCBwZ2RfcGFnZSwgcGdkX3QpCisKKyNkZWZpbmUgcG1kX3BhZ2UocG1kKSBCVEZJWFVQX0NBTEwocG1kX3BhZ2UpKHBtZCkKKyNkZWZpbmUgcGdkX3BhZ2UocGdkKSBCVEZJWFVQX0NBTEwocGdkX3BhZ2UpKHBnZCkKKworQlRGSVhVUERFRl9TRVRISShub25lX21hc2spCitCVEZJWFVQREVGX0NBTExfQ09OU1QoaW50LCBwdGVfcHJlc2VudCwgcHRlX3QpCitCVEZJWFVQREVGX0NBTEwodm9pZCwgcHRlX2NsZWFyLCBwdGVfdCAqKQorQlRGSVhVUERFRl9DQUxMKGludCwgcHRlX3JlYWQsIHB0ZV90KQorCitleHRlcm4gX19pbmxpbmVfXyBpbnQgcHRlX25vbmUocHRlX3QgcHRlKQoreworCXJldHVybiAhKHB0ZV92YWwocHRlKSAmIH5CVEZJWFVQX1NFVEhJKG5vbmVfbWFzaykpOworfQorCisjZGVmaW5lIHB0ZV9wcmVzZW50KHB0ZSkgQlRGSVhVUF9DQUxMKHB0ZV9wcmVzZW50KShwdGUpCisjZGVmaW5lIHB0ZV9jbGVhcihtbSxhZGRyLHB0ZSkgQlRGSVhVUF9DQUxMKHB0ZV9jbGVhcikocHRlKQorI2RlZmluZSBwdGVfcmVhZChwdGUpIEJURklYVVBfQ0FMTChwdGVfcmVhZCkocHRlKQorCitCVEZJWFVQREVGX0NBTExfQ09OU1QoaW50LCBwbWRfYmFkLCBwbWRfdCkKK0JURklYVVBERUZfQ0FMTF9DT05TVChpbnQsIHBtZF9wcmVzZW50LCBwbWRfdCkKK0JURklYVVBERUZfQ0FMTCh2b2lkLCBwbWRfY2xlYXIsIHBtZF90ICopCisKK2V4dGVybiBfX2lubGluZV9fIGludCBwbWRfbm9uZShwbWRfdCBwbWQpCit7CisJcmV0dXJuICEocG1kX3ZhbChwbWQpICYgfkJURklYVVBfU0VUSEkobm9uZV9tYXNrKSk7Cit9CisKKyNkZWZpbmUgcG1kX2JhZChwbWQpIEJURklYVVBfQ0FMTChwbWRfYmFkKShwbWQpCisjZGVmaW5lIHBtZF9wcmVzZW50KHBtZCkgQlRGSVhVUF9DQUxMKHBtZF9wcmVzZW50KShwbWQpCisjZGVmaW5lIHBtZF9jbGVhcihwbWQpIEJURklYVVBfQ0FMTChwbWRfY2xlYXIpKHBtZCkKKworQlRGSVhVUERFRl9DQUxMX0NPTlNUKGludCwgcGdkX25vbmUsIHBnZF90KQorQlRGSVhVUERFRl9DQUxMX0NPTlNUKGludCwgcGdkX2JhZCwgcGdkX3QpCitCVEZJWFVQREVGX0NBTExfQ09OU1QoaW50LCBwZ2RfcHJlc2VudCwgcGdkX3QpCitCVEZJWFVQREVGX0NBTEwodm9pZCwgcGdkX2NsZWFyLCBwZ2RfdCAqKQorCisjZGVmaW5lIHBnZF9ub25lKHBnZCkgQlRGSVhVUF9DQUxMKHBnZF9ub25lKShwZ2QpCisjZGVmaW5lIHBnZF9iYWQocGdkKSBCVEZJWFVQX0NBTEwocGdkX2JhZCkocGdkKQorI2RlZmluZSBwZ2RfcHJlc2VudChwZ2QpIEJURklYVVBfQ0FMTChwZ2RfcHJlc2VudCkocGdkKQorI2RlZmluZSBwZ2RfY2xlYXIocGdkKSBCVEZJWFVQX0NBTEwocGdkX2NsZWFyKShwZ2QpCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIG9ubHkgd29yayBpZiBwdGVfcHJlc2VudCgpIGlzIHRydWUuCisgKiBVbmRlZmluZWQgYmVoYXZpb3VyIGlmIG5vdC4uCisgKi8KK0JURklYVVBERUZfSEFMRihwdGVfd3JpdGVpKQorQlRGSVhVUERFRl9IQUxGKHB0ZV9kaXJ0eWkpCitCVEZJWFVQREVGX0hBTEYocHRlX3lvdW5naSkKKworZXh0ZXJuIGludCBwdGVfd3JpdGUocHRlX3QgcHRlKSBfX2F0dHJpYnV0ZV9jb25zdF9fOworZXh0ZXJuIF9faW5saW5lX18gaW50IHB0ZV93cml0ZShwdGVfdCBwdGUpCit7CisJcmV0dXJuIHB0ZV92YWwocHRlKSAmIEJURklYVVBfSEFMRihwdGVfd3JpdGVpKTsKK30KKworZXh0ZXJuIGludCBwdGVfZGlydHkocHRlX3QgcHRlKSBfX2F0dHJpYnV0ZV9jb25zdF9fOworZXh0ZXJuIF9faW5saW5lX18gaW50IHB0ZV9kaXJ0eShwdGVfdCBwdGUpCit7CisJcmV0dXJuIHB0ZV92YWwocHRlKSAmIEJURklYVVBfSEFMRihwdGVfZGlydHlpKTsKK30KKworZXh0ZXJuIGludCBwdGVfeW91bmcocHRlX3QgcHRlKSBfX2F0dHJpYnV0ZV9jb25zdF9fOworZXh0ZXJuIF9faW5saW5lX18gaW50IHB0ZV95b3VuZyhwdGVfdCBwdGUpCit7CisJcmV0dXJuIHB0ZV92YWwocHRlKSAmIEJURklYVVBfSEFMRihwdGVfeW91bmdpKTsKK30KKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgb25seSB3b3JrIGlmIHB0ZV9wcmVzZW50KCkgaXMgbm90IHRydWUuCisgKi8KK0JURklYVVBERUZfSEFMRihwdGVfZmlsZWkpCisKK2V4dGVybiBpbnQgcHRlX2ZpbGUocHRlX3QgcHRlKSBfX2F0dHJpYnV0ZV9jb25zdF9fOworZXh0ZXJuIF9faW5saW5lX18gaW50IHB0ZV9maWxlKHB0ZV90IHB0ZSkKK3sKKwlyZXR1cm4gcHRlX3ZhbChwdGUpICYgQlRGSVhVUF9IQUxGKHB0ZV9maWxlaSk7Cit9CisKKy8qCisgKi8KK0JURklYVVBERUZfSEFMRihwdGVfd3Jwcm90ZWN0aSkKK0JURklYVVBERUZfSEFMRihwdGVfbWtjbGVhbmkpCitCVEZJWFVQREVGX0hBTEYocHRlX21rb2xkaSkKKworZXh0ZXJuIHB0ZV90IHB0ZV93cnByb3RlY3QocHRlX3QgcHRlKSBfX2F0dHJpYnV0ZV9jb25zdF9fOworZXh0ZXJuIF9faW5saW5lX18gcHRlX3QgcHRlX3dycHJvdGVjdChwdGVfdCBwdGUpCit7CisJcmV0dXJuIF9fcHRlKHB0ZV92YWwocHRlKSAmIH5CVEZJWFVQX0hBTEYocHRlX3dycHJvdGVjdGkpKTsKK30KKworZXh0ZXJuIHB0ZV90IHB0ZV9ta2NsZWFuKHB0ZV90IHB0ZSkgX19hdHRyaWJ1dGVfY29uc3RfXzsKK2V4dGVybiBfX2lubGluZV9fIHB0ZV90IHB0ZV9ta2NsZWFuKHB0ZV90IHB0ZSkKK3sKKwlyZXR1cm4gX19wdGUocHRlX3ZhbChwdGUpICYgfkJURklYVVBfSEFMRihwdGVfbWtjbGVhbmkpKTsKK30KKworZXh0ZXJuIHB0ZV90IHB0ZV9ta29sZChwdGVfdCBwdGUpIF9fYXR0cmlidXRlX2NvbnN0X187CitleHRlcm4gX19pbmxpbmVfXyBwdGVfdCBwdGVfbWtvbGQocHRlX3QgcHRlKQoreworCXJldHVybiBfX3B0ZShwdGVfdmFsKHB0ZSkgJiB+QlRGSVhVUF9IQUxGKHB0ZV9ta29sZGkpKTsKK30KKworQlRGSVhVUERFRl9DQUxMX0NPTlNUKHB0ZV90LCBwdGVfbWt3cml0ZSwgcHRlX3QpCitCVEZJWFVQREVGX0NBTExfQ09OU1QocHRlX3QsIHB0ZV9ta2RpcnR5LCBwdGVfdCkKK0JURklYVVBERUZfQ0FMTF9DT05TVChwdGVfdCwgcHRlX21reW91bmcsIHB0ZV90KQorCisjZGVmaW5lIHB0ZV9ta3dyaXRlKHB0ZSkgQlRGSVhVUF9DQUxMKHB0ZV9ta3dyaXRlKShwdGUpCisjZGVmaW5lIHB0ZV9ta2RpcnR5KHB0ZSkgQlRGSVhVUF9DQUxMKHB0ZV9ta2RpcnR5KShwdGUpCisjZGVmaW5lIHB0ZV9ta3lvdW5nKHB0ZSkgQlRGSVhVUF9DQUxMKHB0ZV9ta3lvdW5nKShwdGUpCisKKyNkZWZpbmUgcGFnZV9wdGVfcHJvdChwYWdlLCBwcm90KQlta19wdGUocGFnZSwgcHJvdCkKKyNkZWZpbmUgcGFnZV9wdGUocGFnZSkJCQlta19wdGUocGFnZSwgX19wZ3Byb3QoMCkpCisjZGVmaW5lIHBmbl9wdGUocGZuLCBwcm90KQkJbWtfcHRlKHBmbl90b19wYWdlKHBmbiksIHByb3QpCisKK0JURklYVVBERUZfQ0FMTCh1bnNpZ25lZCBsb25nLAkgcHRlX3BmbiwgcHRlX3QpCisjZGVmaW5lIHB0ZV9wZm4ocHRlKSBCVEZJWFVQX0NBTEwocHRlX3BmbikocHRlKQorI2RlZmluZSBwdGVfcGFnZShwdGUpCXBmbl90b19wYWdlKHB0ZV9wZm4ocHRlKSkKKworLyoKKyAqIENvbnZlcnNpb24gZnVuY3Rpb25zOiBjb252ZXJ0IGEgcGFnZSBhbmQgcHJvdGVjdGlvbiB0byBhIHBhZ2UgZW50cnksCisgKiBhbmQgYSBwYWdlIGVudHJ5IGFuZCBwYWdlIGRpcmVjdG9yeSB0byB0aGUgcGFnZSB0aGV5IHJlZmVyIHRvLgorICovCitCVEZJWFVQREVGX0NBTExfQ09OU1QocHRlX3QsIG1rX3B0ZSwgc3RydWN0IHBhZ2UgKiwgcGdwcm90X3QpCisKK0JURklYVVBERUZfQ0FMTF9DT05TVChwdGVfdCwgbWtfcHRlX3BoeXMsIHVuc2lnbmVkIGxvbmcsIHBncHJvdF90KQorQlRGSVhVUERFRl9DQUxMX0NPTlNUKHB0ZV90LCBta19wdGVfaW8sIHVuc2lnbmVkIGxvbmcsIHBncHJvdF90LCBpbnQpCisKKyNkZWZpbmUgbWtfcHRlKHBhZ2UscGdwcm90KSBCVEZJWFVQX0NBTEwobWtfcHRlKShwYWdlLHBncHJvdCkKKyNkZWZpbmUgbWtfcHRlX3BoeXMocGFnZSxwZ3Byb3QpIEJURklYVVBfQ0FMTChta19wdGVfcGh5cykocGFnZSxwZ3Byb3QpCisjZGVmaW5lIG1rX3B0ZV9pbyhwYWdlLHBncHJvdCxzcGFjZSkgQlRGSVhVUF9DQUxMKG1rX3B0ZV9pbykocGFnZSxwZ3Byb3Qsc3BhY2UpCisKK0JURklYVVBERUZfSU5UKHB0ZV9tb2RpZnlfbWFzaykKKworZXh0ZXJuIHB0ZV90IHB0ZV9tb2RpZnkocHRlX3QgcHRlLCBwZ3Byb3RfdCBuZXdwcm90KSBfX2F0dHJpYnV0ZV9jb25zdF9fOworZXh0ZXJuIF9faW5saW5lX18gcHRlX3QgcHRlX21vZGlmeShwdGVfdCBwdGUsIHBncHJvdF90IG5ld3Byb3QpCit7CisJcmV0dXJuIF9fcHRlKChwdGVfdmFsKHB0ZSkgJiBCVEZJWFVQX0lOVChwdGVfbW9kaWZ5X21hc2spKSB8CisJCXBncHJvdF92YWwobmV3cHJvdCkpOworfQorCisjZGVmaW5lIHBnZF9pbmRleChhZGRyZXNzKSAoKGFkZHJlc3MpID4+IFBHRElSX1NISUZUKQorCisvKiB0byBmaW5kIGFuIGVudHJ5IGluIGEgcGFnZS10YWJsZS1kaXJlY3RvcnkgKi8KKyNkZWZpbmUgcGdkX29mZnNldChtbSwgYWRkcmVzcykgKChtbSktPnBnZCArIHBnZF9pbmRleChhZGRyZXNzKSkKKworLyogdG8gZmluZCBhbiBlbnRyeSBpbiBhIGtlcm5lbCBwYWdlLXRhYmxlLWRpcmVjdG9yeSAqLworI2RlZmluZSBwZ2Rfb2Zmc2V0X2soYWRkcmVzcykgcGdkX29mZnNldCgmaW5pdF9tbSwgYWRkcmVzcykKKworLyogRmluZCBhbiBlbnRyeSBpbiB0aGUgc2Vjb25kLWxldmVsIHBhZ2UgdGFibGUuLiAqLworQlRGSVhVUERFRl9DQUxMKHBtZF90ICosIHBtZF9vZmZzZXQsIHBnZF90ICosIHVuc2lnbmVkIGxvbmcpCisjZGVmaW5lIHBtZF9vZmZzZXQoZGlyLGFkZHIpIEJURklYVVBfQ0FMTChwbWRfb2Zmc2V0KShkaXIsYWRkcikKKworLyogRmluZCBhbiBlbnRyeSBpbiB0aGUgdGhpcmQtbGV2ZWwgcGFnZSB0YWJsZS4uICovIAorQlRGSVhVUERFRl9DQUxMKHB0ZV90ICosIHB0ZV9vZmZzZXRfa2VybmVsLCBwbWRfdCAqLCB1bnNpZ25lZCBsb25nKQorI2RlZmluZSBwdGVfb2Zmc2V0X2tlcm5lbChkaXIsYWRkcikgQlRGSVhVUF9DQUxMKHB0ZV9vZmZzZXRfa2VybmVsKShkaXIsYWRkcikKKworLyoKKyAqIFRoaXMgc2hvcnRjdXQgd29ya3Mgb24gc3VuNG0gKGFuZCBzdW40ZCkgYmVjYXVzZSB0aGUgbm9jYWNoZSBhcmVhIGlzIHN0YXRpYywKKyAqIGFuZCBzdW40YyBpcyBndWFyYW50ZWVkIHRvIGhhdmUgbm8gaGlnaG1lbSBhbnl3YXkuCisgKi8KKyNkZWZpbmUgcHRlX29mZnNldF9tYXAoZCwgYSkJCXB0ZV9vZmZzZXRfa2VybmVsKGQsYSkKKyNkZWZpbmUgcHRlX29mZnNldF9tYXBfbmVzdGVkKGQsIGEpCXB0ZV9vZmZzZXRfa2VybmVsKGQsYSkKKworI2RlZmluZSBwdGVfdW5tYXAocHRlKQkJZG97fXdoaWxlKDApCisjZGVmaW5lIHB0ZV91bm1hcF9uZXN0ZWQocHRlKQlkb3t9d2hpbGUoMCkKKworLyogVGhlIHBlcm1pc3Npb25zIGZvciBwZ3Byb3RfdmFsIHRvIG1ha2UgYSBwYWdlIG1hcHBlZCBvbiB0aGUgb2JpbyBzcGFjZSAqLworZXh0ZXJuIHVuc2lnbmVkIGludCBwZ19pb2JpdHM7CisKKy8qIENlcnRhaW4gYXJjaGl0ZWN0dXJlcyBuZWVkIHRvIGRvIHNwZWNpYWwgdGhpbmdzIHdoZW4gcHRlJ3MKKyAqIHdpdGhpbiBhIHBhZ2UgdGFibGUgYXJlIGRpcmVjdGx5IG1vZGlmaWVkLiAgVGh1cywgdGhlIGZvbGxvd2luZworICogaG9vayBpcyBtYWRlIGF2YWlsYWJsZS4KKyAqLworCitCVEZJWFVQREVGX0NBTEwodm9pZCwgc2V0X3B0ZSwgcHRlX3QgKiwgcHRlX3QpCisKKyNkZWZpbmUgc2V0X3B0ZShwdGVwLHB0ZXZhbCkgQlRGSVhVUF9DQUxMKHNldF9wdGUpKHB0ZXAscHRldmFsKQorI2RlZmluZSBzZXRfcHRlX2F0KG1tLGFkZHIscHRlcCxwdGV2YWwpIHNldF9wdGUocHRlcCxwdGV2YWwpCisKK3N0cnVjdCBzZXFfZmlsZTsKK0JURklYVVBERUZfQ0FMTCh2b2lkLCBtbXVfaW5mbywgc3RydWN0IHNlcV9maWxlICopCisKKyNkZWZpbmUgbW11X2luZm8ocCkgQlRGSVhVUF9DQUxMKG1tdV9pbmZvKShwKQorCisvKiBGYXVsdCBoYW5kbGVyIHN0dWZmLi4uICovCisjZGVmaW5lIEZBVUxUX0NPREVfUFJPVCAgICAgMHgxCisjZGVmaW5lIEZBVUxUX0NPREVfV1JJVEUgICAgMHgyCisjZGVmaW5lIEZBVUxUX0NPREVfVVNFUiAgICAgMHg0CisKK0JURklYVVBERUZfQ0FMTCh2b2lkLCB1cGRhdGVfbW11X2NhY2hlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywgcHRlX3QpCisKKyNkZWZpbmUgdXBkYXRlX21tdV9jYWNoZSh2bWEsYWRkcixwdGUpIEJURklYVVBfQ0FMTCh1cGRhdGVfbW11X2NhY2hlKSh2bWEsYWRkcixwdGUpCisKK0JURklYVVBERUZfQ0FMTCh2b2lkLCBzcGFyY19tYXBpb3JhbmdlLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcsCisgICAgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgaW50KQorQlRGSVhVUERFRl9DQUxMKHZvaWQsIHNwYXJjX3VubWFwaW9yYW5nZSwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgaW50KQorI2RlZmluZSBzcGFyY19tYXBpb3JhbmdlKGJ1cyxwYSx2YSxsZW4pIEJURklYVVBfQ0FMTChzcGFyY19tYXBpb3JhbmdlKShidXMscGEsdmEsbGVuKQorI2RlZmluZSBzcGFyY191bm1hcGlvcmFuZ2UodmEsbGVuKSBCVEZJWFVQX0NBTEwoc3BhcmNfdW5tYXBpb3JhbmdlKSh2YSxsZW4pCisKK2V4dGVybiBpbnQgaW52YWxpZF9zZWdtZW50OworCisvKiBFbmNvZGUgYW5kIGRlLWNvZGUgYSBzd2FwIGVudHJ5ICovCitCVEZJWFVQREVGX0NBTEwodW5zaWduZWQgbG9uZywgX19zd3BfdHlwZSwgc3dwX2VudHJ5X3QpCitCVEZJWFVQREVGX0NBTEwodW5zaWduZWQgbG9uZywgX19zd3Bfb2Zmc2V0LCBzd3BfZW50cnlfdCkKK0JURklYVVBERUZfQ0FMTChzd3BfZW50cnlfdCwgX19zd3BfZW50cnksIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCisKKyNkZWZpbmUgX19zd3BfdHlwZShfX3gpCQkJQlRGSVhVUF9DQUxMKF9fc3dwX3R5cGUpKF9feCkKKyNkZWZpbmUgX19zd3Bfb2Zmc2V0KF9feCkJCUJURklYVVBfQ0FMTChfX3N3cF9vZmZzZXQpKF9feCkKKyNkZWZpbmUgX19zd3BfZW50cnkoX190eXBlLF9fb2ZmKQlCVEZJWFVQX0NBTEwoX19zd3BfZW50cnkpKF9fdHlwZSxfX29mZikKKworI2RlZmluZSBfX3B0ZV90b19zd3BfZW50cnkocHRlKQkJKChzd3BfZW50cnlfdCkgeyBwdGVfdmFsKHB0ZSkgfSkKKyNkZWZpbmUgX19zd3BfZW50cnlfdG9fcHRlKHgpCQkoKHB0ZV90KSB7ICh4KS52YWwgfSkKKworLyogZmlsZS1vZmZzZXQtaW4tcHRlIGhlbHBlcnMgKi8KK0JURklYVVBERUZfQ0FMTCh1bnNpZ25lZCBsb25nLCBwdGVfdG9fcGdvZmYsIHB0ZV90IHB0ZSk7CitCVEZJWFVQREVGX0NBTEwocHRlX3QsIHBnb2ZmX3RvX3B0ZSwgdW5zaWduZWQgbG9uZyBwZ29mZik7CisKKyNkZWZpbmUgcHRlX3RvX3Bnb2ZmKHB0ZSkgQlRGSVhVUF9DQUxMKHB0ZV90b19wZ29mZikocHRlKQorI2RlZmluZSBwZ29mZl90b19wdGUob2ZmKSBCVEZJWFVQX0NBTEwocGdvZmZfdG9fcHRlKShvZmYpCisKKy8qCisgKiBUaGlzIGlzIG1hZGUgYSBjb25zdGFudCBiZWNhdXNlIG1tL2ZyZW1hcC5jIHJlcXVpcmVkIGEgY29uc3RhbnQuCisgKiBOb3RlIHRoYXQgbGF5b3V0IG9mIHRoZXNlIGJpdHMgaXMgZGlmZmVyZW50IGJldHdlZW4gc3VuNGMuYyBhbmQgc3JtbXUuYy4KKyAqLworI2RlZmluZSBQVEVfRklMRV9NQVhfQklUUyAyNAorCisvKgorICovCitzdHJ1Y3QgY3R4X2xpc3QgeworCXN0cnVjdCBjdHhfbGlzdCAqbmV4dDsKKwlzdHJ1Y3QgY3R4X2xpc3QgKnByZXY7CisJdW5zaWduZWQgaW50IGN0eF9udW1iZXI7CisJc3RydWN0IG1tX3N0cnVjdCAqY3R4X21tOworfTsKKworZXh0ZXJuIHN0cnVjdCBjdHhfbGlzdCAqY3R4X2xpc3RfcG9vbDsgIC8qIER5bmFtaWNhbGx5IGFsbG9jYXRlZCAqLworZXh0ZXJuIHN0cnVjdCBjdHhfbGlzdCBjdHhfZnJlZTsgICAgICAgIC8qIEhlYWQgb2YgZnJlZSBsaXN0ICovCitleHRlcm4gc3RydWN0IGN0eF9saXN0IGN0eF91c2VkOyAgICAgICAgLyogSGVhZCBvZiB1c2VkIGNvbnRleHRzIGxpc3QgKi8KKworI2RlZmluZSBOT19DT05URVhUICAgICAtMQorCitleHRlcm4gX19pbmxpbmVfXyB2b2lkIHJlbW92ZV9mcm9tX2N0eF9saXN0KHN0cnVjdCBjdHhfbGlzdCAqZW50cnkpCit7CisJZW50cnktPm5leHQtPnByZXYgPSBlbnRyeS0+cHJldjsKKwllbnRyeS0+cHJldi0+bmV4dCA9IGVudHJ5LT5uZXh0OworfQorCitleHRlcm4gX19pbmxpbmVfXyB2b2lkIGFkZF90b19jdHhfbGlzdChzdHJ1Y3QgY3R4X2xpc3QgKmhlYWQsIHN0cnVjdCBjdHhfbGlzdCAqZW50cnkpCit7CisJZW50cnktPm5leHQgPSBoZWFkOworCShlbnRyeS0+cHJldiA9IGhlYWQtPnByZXYpLT5uZXh0ID0gZW50cnk7CisJaGVhZC0+cHJldiA9IGVudHJ5OworfQorI2RlZmluZSBhZGRfdG9fZnJlZV9jdHhsaXN0KGVudHJ5KSBhZGRfdG9fY3R4X2xpc3QoJmN0eF9mcmVlLCBlbnRyeSkKKyNkZWZpbmUgYWRkX3RvX3VzZWRfY3R4bGlzdChlbnRyeSkgYWRkX3RvX2N0eF9saXN0KCZjdHhfdXNlZCwgZW50cnkpCisKK2V4dGVybiBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcKK19fZ2V0X3BoeXMgKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlzd2l0Y2ggKHNwYXJjX2NwdV9tb2RlbCl7CisJY2FzZSBzdW40OgorCWNhc2Ugc3VuNGM6CisJCXJldHVybiBzdW40Y19nZXRfcHRlIChhZGRyKSA8PCBQQUdFX1NISUZUOworCWNhc2Ugc3VuNG06CisJY2FzZSBzdW40ZDoKKwkJcmV0dXJuICgoc3JtbXVfZ2V0X3B0ZSAoYWRkcikgJiAweGZmZmZmZjAwKSA8PCA0KTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9Cit9CisKK2V4dGVybiBfX2lubGluZV9fIGludAorX19nZXRfaW9zcGFjZSAodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXN3aXRjaCAoc3BhcmNfY3B1X21vZGVsKXsKKwljYXNlIHN1bjQ6CisJY2FzZSBzdW40YzoKKwkJcmV0dXJuIC0xOyAvKiBEb24ndCBjaGVjayBpb3NwYWNlIG9uIHN1bjRjICovCisJY2FzZSBzdW40bToKKwljYXNlIHN1bjRkOgorCQlyZXR1cm4gKHNybW11X2dldF9wdGUgKGFkZHIpID4+IDI4KTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLTE7CisJfQorfQorCitleHRlcm4gdW5zaWduZWQgbG9uZyAqc3BhcmNfdmFsaWRfYWRkcl9iaXRtYXA7CisKKy8qIE5lZWRzIHRvIGJlIGRlZmluZWQgaGVyZSBhbmQgbm90IGluIGxpbnV4L21tLmgsIGFzIGl0IGlzIGFyY2ggZGVwZW5kZW50ICovCisjZGVmaW5lIGtlcm5fYWRkcl92YWxpZChhZGRyKSBcCisJKHRlc3RfYml0KF9fcGEoKHVuc2lnbmVkIGxvbmcpKGFkZHIpKT4+MjAsIHNwYXJjX3ZhbGlkX2FkZHJfYml0bWFwKSkKKworZXh0ZXJuIGludCBpb19yZW1hcF9wYWdlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgZnJvbSwgdW5zaWduZWQgbG9uZyB0bywKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIHNpemUsIHBncHJvdF90IHByb3QsIGludCBzcGFjZSk7CitleHRlcm4gaW50IGlvX3JlbWFwX3Bmbl9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZnJvbSwgdW5zaWduZWQgbG9uZyBwZm4sCisJCQkgICAgICB1bnNpZ25lZCBsb25nIHNpemUsIHBncHJvdF90IHByb3QpOworCisvKgorICogRm9yIHNwYXJjMzImNjQsIHRoZSBwZm4gaW4gaW9fcmVtYXBfcGZuX3JhbmdlKCkgY2FycmllcyA8aW9zcGFjZT4gaW4KKyAqIGl0cyBoaWdoIDQgYml0cy4gIFRoZXNlIG1hY3Jvcy9mdW5jdGlvbnMgcHV0IGl0IHRoZXJlIG9yIGdldCBpdCBmcm9tIHRoZXJlLgorICovCisjZGVmaW5lIE1LX0lPU1BBQ0VfUEZOKHNwYWNlLCBwZm4pCShwZm4gfCAoc3BhY2UgPDwgKEJJVFNfUEVSX0xPTkcgLSA0KSkpCisjZGVmaW5lIEdFVF9JT1NQQUNFKHBmbikJCShwZm4gPj4gKEJJVFNfUEVSX0xPTkcgLSA0KSkKKyNkZWZpbmUgR0VUX1BGTihwZm4pCQkJKHBmbiAmIDB4MGZmZmZmZmZVTCkKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BndGFibGUuaD4KKworI2VuZGlmIC8qICEoX19BU1NFTUJMWV9fKSAqLworCisvKiBXZSBwcm92aWRlIG91ciBvd24gZ2V0X3VubWFwcGVkX2FyZWEgdG8gY29wZSB3aXRoIFZBIGhvbGVzIGZvciB1c2VybGFuZCAqLworI2RlZmluZSBIQVZFX0FSQ0hfVU5NQVBQRURfQVJFQQorCisvKgorICogTm8gcGFnZSB0YWJsZSBjYWNoZXMgdG8gaW5pdGlhbGlzZQorICovCisjZGVmaW5lIHBndGFibGVfY2FjaGVfaW5pdCgpCWRvIHsgfSB3aGlsZSAoMCkKKworI2VuZGlmIC8qICEoX1NQQVJDX1BHVEFCTEVfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3BndHNybW11LmggYi9pbmNsdWRlL2FzbS1zcGFyYy9wZ3Rzcm1tdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlM2I5ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9wZ3Rzcm1tdS5oCkBAIC0wLDAgKzEsMjk4IEBACisvKiAkSWQ6IHBndHNybW11LmgsdiAxLjMxIDIwMDAvMDcvMTYgMjE6NDg6NTIgYW50b24gRXhwICQKKyAqIHBndHNybW11Lmg6ICBTUk1NVSBwYWdlIHRhYmxlIGRlZmluZXMgYW5kIGNvZGUuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKKyAqLworCisjaWZuZGVmIF9TUEFSQ19QR1RTUk1NVV9ICisjZGVmaW5lIF9TUEFSQ19QR1RTUk1NVV9ICisKKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorCisjaWZkZWYgX19BU1NFTUJMWV9fCisjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CS8qIFRJX1VXSU5NQVNLIGZvciBXSU5ET1dfRkxVU0ggKi8KKyNlbmRpZgorCisvKiBOdW1iZXIgb2YgY29udGV4dHMgaXMgaW1wbGVtZW50YXRpb24tZGVwZW5kZW50OyA2NGsgaXMgdGhlIG1vc3Qgd2Ugc3VwcG9ydCAqLworI2RlZmluZSBTUk1NVV9NQVhfQ09OVEVYVFMJNjU1MzYKKworLyogUE1EX1NISUZUIGRldGVybWluZXMgdGhlIHNpemUgb2YgdGhlIGFyZWEgYSBzZWNvbmQtbGV2ZWwgcGFnZSB0YWJsZSBlbnRyeSBjYW4gbWFwICovCisjZGVmaW5lIFNSTU1VX1JFQUxfUE1EX1NISUZUCQkxOAorI2RlZmluZSBTUk1NVV9SRUFMX1BNRF9TSVpFCQkoMVVMIDw8IFNSTU1VX1JFQUxfUE1EX1NISUZUKQorI2RlZmluZSBTUk1NVV9SRUFMX1BNRF9NQVNLCQkofihTUk1NVV9SRUFMX1BNRF9TSVpFLTEpKQorI2RlZmluZSBTUk1NVV9SRUFMX1BNRF9BTElHTihfX2FkZHIpCSgoKF9fYWRkcikrU1JNTVVfUkVBTF9QTURfU0laRS0xKSZTUk1NVV9SRUFMX1BNRF9NQVNLKQorCisvKiBQR0RJUl9TSElGVCBkZXRlcm1pbmVzIHdoYXQgYSB0aGlyZC1sZXZlbCBwYWdlIHRhYmxlIGVudHJ5IGNhbiBtYXAgKi8KKyNkZWZpbmUgU1JNTVVfUEdESVJfU0hJRlQgICAgICAgMjQKKyNkZWZpbmUgU1JNTVVfUEdESVJfU0laRSAgICAgICAgKDFVTCA8PCBTUk1NVV9QR0RJUl9TSElGVCkKKyNkZWZpbmUgU1JNTVVfUEdESVJfTUFTSyAgICAgICAgKH4oU1JNTVVfUEdESVJfU0laRS0xKSkKKyNkZWZpbmUgU1JNTVVfUEdESVJfQUxJR04oYWRkcikgKCgoYWRkcikrU1JNTVVfUEdESVJfU0laRS0xKSZTUk1NVV9QR0RJUl9NQVNLKQorCisjZGVmaW5lIFNSTU1VX1JFQUxfUFRSU19QRVJfUFRFCTY0CisjZGVmaW5lIFNSTU1VX1JFQUxfUFRSU19QRVJfUE1ECTY0CisjZGVmaW5lIFNSTU1VX1BUUlNfUEVSX1BHRAkyNTYKKworI2RlZmluZSBTUk1NVV9SRUFMX1BURV9UQUJMRV9TSVpFCShTUk1NVV9SRUFMX1BUUlNfUEVSX1BURSo0KQorI2RlZmluZSBTUk1NVV9QTURfVEFCTEVfU0laRQkJKFNSTU1VX1JFQUxfUFRSU19QRVJfUE1EKjQpCisjZGVmaW5lIFNSTU1VX1BHRF9UQUJMRV9TSVpFCQkoU1JNTVVfUFRSU19QRVJfUEdEKjQpCisKKy8qCisgKiBUbyBzdXBwb3J0IHBhZ2V0YWJsZXMgaW4gaGlnaG1lbSwgTGludXggaW50cm9kdWNlcyBBUElzIHdoaWNoCisgKiByZXR1cm4gc3RydWN0IHBhZ2UqIGFuZCBnZW5lcmFsbHkgbWFuaXB1bGF0ZSBwYWdlIHRhYmxlcyB3aGVuCisgKiB0aGV5IGFyZSBub3QgbWFwcGVkIGludG8ga2VybmVsIHNwYWNlLiBPdXIgaGFyZHdhcmUgcGFnZSB0YWJsZXMKKyAqIGFyZSBzbWFsbGVyIHRoYW4gcGFnZXMuIFdlIGx1bXAgaGFyZHdhcmUgdGFiZXMgaW50byBiaWcsIHBhZ2Ugc2l6ZWQKKyAqIHNvZnR3YXJlIHRhYmxlcy4KKyAqCisgKiBQTURfU0hJRlQgZGV0ZXJtaW5lcyB0aGUgc2l6ZSBvZiB0aGUgYXJlYSBhIHNlY29uZC1sZXZlbCBwYWdlIHRhYmxlIGVudHJ5CisgKiBjYW4gbWFwLCBhbmQgb3VyIHBtZF90IGlzIDE2IHRpbWVzIGxhcmdlciB0aGFuIG5vcm1hbC4gIFRoZSB2YWx1ZXMgd2hpY2gKKyAqIHdlcmUgb25jZSBkZWZpbmVkIGhlcmUgYXJlIG5vdyBnZW5lcmljIGZvciA0YyBhbmQgc3JtbXUsIHNvIHRoZXkncmUKKyAqIGZvdW5kIGluIHBndGFibGUuaC4KKyAqLworI2RlZmluZSBTUk1NVV9QVFJTX1BFUl9QTUQJNAorCisvKiBEZWZpbml0aW9uIG9mIHRoZSB2YWx1ZXMgaW4gdGhlIEVUIGZpZWxkIG9mIFBURCdzIGFuZCBQVEUncyAqLworI2RlZmluZSBTUk1NVV9FVF9NQVNLICAgICAgICAgMHgzCisjZGVmaW5lIFNSTU1VX0VUX0lOVkFMSUQgICAgICAweDAKKyNkZWZpbmUgU1JNTVVfRVRfUFREICAgICAgICAgIDB4MQorI2RlZmluZSBTUk1NVV9FVF9QVEUgICAgICAgICAgMHgyCisjZGVmaW5lIFNSTU1VX0VUX1JFUFRFICAgICAgICAweDMgLyogQUlFRUUsIFN1cGVyU3BhcmMgSUkgcmV2ZXJzZSBlbmRpYW4gcGFnZSEgKi8KKworLyogUGh5c2ljYWwgcGFnZSBleHRyYWN0aW9uIGZyb20gUFRQJ3MgYW5kIFBURSdzLiAqLworI2RlZmluZSBTUk1NVV9DVFhfUE1BU0sgICAgMHhmZmZmZmZmMAorI2RlZmluZSBTUk1NVV9QVERfUE1BU0sgICAgMHhmZmZmZmZmMAorI2RlZmluZSBTUk1NVV9QVEVfUE1BU0sgICAgMHhmZmZmZmYwMAorCisvKiBUaGUgcHRlIG5vbi1wYWdlIGJpdHMuICBTb21lIG5vdGVzOgorICogMSkgY2FjaGUsIGRpcnR5LCB2YWxpZCwgYW5kIHJlZiBhcmUgZnJvYmJhYmxlCisgKiAgICBmb3IgYm90aCBzdXBlcnZpc29yIGFuZCB1c2VyIHBhZ2VzLgorICogMikgZXhlYyBhbmQgd3JpdGUgd2lsbCBvbmx5IGdpdmUgdGhlIGRlc2lyZWQgZWZmZWN0CisgKiAgICBvbiB1c2VyIHBhZ2VzCisgKiAzKSB1c2UgcHJpdiBhbmQgcHJpdl9yZWFkb25seSBmb3IgY2hhbmdpbmcgdGhlCisgKiAgICBjaGFyYWN0ZXJpc3RpY3Mgb2Ygc3VwZXJ2aXNvciBwdGVzCisgKi8KKyNkZWZpbmUgU1JNTVVfQ0FDSEUgICAgICAgIDB4ODAKKyNkZWZpbmUgU1JNTVVfRElSVFkgICAgICAgIDB4NDAKKyNkZWZpbmUgU1JNTVVfUkVGICAgICAgICAgIDB4MjAKKyNkZWZpbmUgU1JNTVVfTk9SRUFEICAgICAgIDB4MTAKKyNkZWZpbmUgU1JNTVVfRVhFQyAgICAgICAgIDB4MDgKKyNkZWZpbmUgU1JNTVVfV1JJVEUgICAgICAgIDB4MDQKKyNkZWZpbmUgU1JNTVVfVkFMSUQgICAgICAgIDB4MDIgLyogU1JNTVVfRVRfUFRFICovCisjZGVmaW5lIFNSTU1VX1BSSVYgICAgICAgICAweDFjCisjZGVmaW5lIFNSTU1VX1BSSVZfUkRPTkxZICAweDE4CisKKyNkZWZpbmUgU1JNTVVfRklMRSAgICAgICAgIDB4NDAJLyogSW1wbGVtZW50ZWQgaW4gc29mdHdhcmUgKi8KKworI2RlZmluZSBTUk1NVV9QVEVfRklMRV9TSElGVCAgICAgOAkvKiA9PSAzMi1QVEVfRklMRV9NQVhfQklUUyAqLworCisjZGVmaW5lIFNSTU1VX0NIR19NQVNLICAgICgweGZmZmZmZjAwIHwgU1JNTVVfUkVGIHwgU1JNTVVfRElSVFkpCisKKy8qIFNSTU1VIHN3YXAgZW50cnkgZW5jb2RpbmcKKyAqCisgKiBXZSB1c2UgNSBiaXRzIGZvciB0aGUgdHlwZSBhbmQgMTkgZm9yIHRoZSBvZmZzZXQuICBUaGlzIGdpdmVzIHVzCisgKiAzMiBzd2FwZmlsZXMgb2YgNEdCIGVhY2guICBFbmNvZGluZyBsb29rcyBsaWtlOgorICoKKyAqIG9vb29vb29vb29vb29vb29vb290dHR0dFJSUlJSUlJSCisgKiBmZWRjYmE5ODc2NTQzMjEwZmVkY2JhOTg3NjU0MzIxMAorICoKKyAqIFRoZSBib3R0b20gOCBiaXRzIGFyZSByZXNlcnZlZCBmb3IgcHJvdGVjdGlvbiBhbmQgc3RhdHVzIGJpdHMsIGVzcGVjaWFsbHkKKyAqIEZJTEUgYW5kIFBSRVNFTlQuCisgKi8KKyNkZWZpbmUgU1JNTVVfU1dQX1RZUEVfTUFTSwkweDFmCisjZGVmaW5lIFNSTU1VX1NXUF9UWVBFX1NISUZUCVNSTU1VX1BURV9GSUxFX1NISUZUCisjZGVmaW5lIFNSTU1VX1NXUF9PRkZfTUFTSwkweDdmZmZmCisjZGVmaW5lIFNSTU1VX1NXUF9PRkZfU0hJRlQJKFNSTU1VX1BURV9GSUxFX1NISUZUICsgNSkKKworLyogU29tZSBkYXkgSSB3aWxsIGltcGxlbWVudCB0cnVlIGZpbmUgZ3JhaW5lZCBhY2Nlc3MgYml0cyBmb3IKKyAqIHVzZXIgcGFnZXMgYmVjYXVzZSB0aGUgU1JNTVUgZ2l2ZXMgdXMgdGhlIGNhcGFiaWxpdGllcyB0bworICogZW5mb3JjZSBhbGwgdGhlIHByb3RlY3Rpb24gbGV2ZWxzIHRoYXQgdm1hJ3MgY2FuIGhhdmUuCisgKiBYWFggQnV0IGZvciBub3cuLi4KKyAqLworI2RlZmluZSBTUk1NVV9QQUdFX05PTkUgICAgX19wZ3Byb3QoU1JNTVVfQ0FDSEUgfCBcCisJCQkJICAgIFNSTU1VX1BSSVYgfCBTUk1NVV9SRUYpCisjZGVmaW5lIFNSTU1VX1BBR0VfU0hBUkVEICBfX3BncHJvdChTUk1NVV9WQUxJRCB8IFNSTU1VX0NBQ0hFIHwgXAorCQkJCSAgICBTUk1NVV9FWEVDIHwgU1JNTVVfV1JJVEUgfCBTUk1NVV9SRUYpCisjZGVmaW5lIFNSTU1VX1BBR0VfQ09QWSAgICBfX3BncHJvdChTUk1NVV9WQUxJRCB8IFNSTU1VX0NBQ0hFIHwgXAorCQkJCSAgICBTUk1NVV9FWEVDIHwgU1JNTVVfUkVGKQorI2RlZmluZSBTUk1NVV9QQUdFX1JET05MWSAgX19wZ3Byb3QoU1JNTVVfVkFMSUQgfCBTUk1NVV9DQUNIRSB8IFwKKwkJCQkgICAgU1JNTVVfRVhFQyB8IFNSTU1VX1JFRikKKyNkZWZpbmUgU1JNTVVfUEFHRV9LRVJORUwgIF9fcGdwcm90KFNSTU1VX1ZBTElEIHwgU1JNTVVfQ0FDSEUgfCBTUk1NVV9QUklWIHwgXAorCQkJCSAgICBTUk1NVV9ESVJUWSB8IFNSTU1VX1JFRikKKworLyogU1JNTVUgUmVnaXN0ZXIgYWRkcmVzc2VzIGluIEFTSSAweDQuICBUaGVzZSBhcmUgdmFsaWQgZm9yIGFsbAorICogY3VycmVudCBTUk1NVSBpbXBsZW1lbnRhdGlvbnMgdGhhdCBleGlzdC4KKyAqLworI2RlZmluZSBTUk1NVV9DVFJMX1JFRyAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBTUk1NVV9DVFhUQkxfUFRSICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBTUk1NVV9DVFhfUkVHICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBTUk1NVV9GQVVMVF9TVEFUVVMgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBTUk1NVV9GQVVMVF9BRERSICAgICAgICAgMHgwMDAwMDQwMAorCisjZGVmaW5lIFdJTkRPV19GTFVTSCh0bXAxLCB0bXAyKQkJCQkJXAorCW1vdgkwLCB0bXAxOwkJCQkJCVwKKzk4OglsZAlbJWc2ICsgVElfVVdJTk1BU0tdLCB0bXAyOwkJCQlcCisJb3JjYwklZzAsIHRtcDIsICVnMDsJCQkJCQlcCisJYWRkCXRtcDEsIDEsIHRtcDE7CQkJCQkJXAorCWJuZQk5OGI7CQkJCQkJCVwKKwkgc2F2ZQklc3AsIC02NCwgJXNwOwkJCQkJCVwKKzk5OglzdWJjYwl0bXAxLCAxLCB0bXAxOwkJCQkJCVwKKwlibmUJOTliOwkJCQkJCQlcCisJIHJlc3RvcmUgJWcwLCAlZzAsICVnMDsKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworLyogVGhpcyBtYWtlcyBzZW5zZS4gSG9uZXN0IGl0IGRvZXMgLSBBbnRvbiAqLworLyogWFhYIFllcyBidXQgaXQncyB1Z2x5IGFzIHNpbi4gIEZJWE1FLiAtS01XICovCitleHRlcm4gdm9pZCAqc3JtbXVfbm9jYWNoZV9wb29sOworI2RlZmluZSBfX25vY2FjaGVfcGEoVkFERFIpICgoKHVuc2lnbmVkIGxvbmcpVkFERFIpIC0gU1JNTVVfTk9DQUNIRV9WQUREUiArIF9fcGEoKHVuc2lnbmVkIGxvbmcpc3JtbXVfbm9jYWNoZV9wb29sKSkKKyNkZWZpbmUgX19ub2NhY2hlX3ZhKFBBRERSKSAoX192YSgodW5zaWduZWQgbG9uZylQQUREUikgLSAodW5zaWduZWQgbG9uZylzcm1tdV9ub2NhY2hlX3Bvb2wgKyBTUk1NVV9OT0NBQ0hFX1ZBRERSKQorI2RlZmluZSBfX25vY2FjaGVfZml4KFZBRERSKSBfX3ZhKF9fbm9jYWNoZV9wYShWQUREUikpCisKKy8qIEFjY2Vzc2luZyB0aGUgTU1VIGNvbnRyb2wgcmVnaXN0ZXIuICovCitleHRlcm4gX19pbmxpbmVfXyB1bnNpZ25lZCBpbnQgc3JtbXVfZ2V0X21tdXJlZyh2b2lkKQoreworICAgICAgICB1bnNpZ25lZCBpbnQgcmV0dmFsOworCV9fYXNtX18gX192b2xhdGlsZV9fKCJsZGEgWyUlZzBdICUxLCAlMFxuXHQiIDoKKwkJCSAgICAgIj1yIiAocmV0dmFsKSA6CisJCQkgICAgICJpIiAoQVNJX01fTU1VUkVHUykpOworCXJldHVybiByZXR2YWw7Cit9CisKK2V4dGVybiBfX2lubGluZV9fIHZvaWQgc3JtbXVfc2V0X21tdXJlZyh1bnNpZ25lZCBsb25nIHJlZ3ZhbCkKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RhICUwLCBbJSVnMF0gJTFcblx0IiA6IDoKKwkJCSAgICAgInIiIChyZWd2YWwpLCAiaSIgKEFTSV9NX01NVVJFR1MpIDogIm1lbW9yeSIpOworCit9CisKK2V4dGVybiBfX2lubGluZV9fIHZvaWQgc3JtbXVfc2V0X2N0YWJsZV9wdHIodW5zaWduZWQgbG9uZyBwYWRkcikKK3sKKwlwYWRkciA9ICgocGFkZHIgPj4gNCkgJiBTUk1NVV9DVFhfUE1BU0spOworCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdGEgJTAsIFslMV0gJTJcblx0IiA6IDoKKwkJCSAgICAgInIiIChwYWRkciksICJyIiAoU1JNTVVfQ1RYVEJMX1BUUiksCisJCQkgICAgICJpIiAoQVNJX01fTU1VUkVHUykgOgorCQkJICAgICAibWVtb3J5Iik7Cit9CisKK2V4dGVybiBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgc3JtbXVfZ2V0X2N0YWJsZV9wdHIodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgcmV0dmFsOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oImxkYSBbJTFdICUyLCAlMFxuXHQiIDoKKwkJCSAgICAgIj1yIiAocmV0dmFsKSA6CisJCQkgICAgICJyIiAoU1JNTVVfQ1RYVEJMX1BUUiksCisJCQkgICAgICJpIiAoQVNJX01fTU1VUkVHUykpOworCXJldHVybiAocmV0dmFsICYgU1JNTVVfQ1RYX1BNQVNLKSA8PCA0OworfQorCitleHRlcm4gX19pbmxpbmVfXyB2b2lkIHNybW11X3NldF9jb250ZXh0KGludCBjb250ZXh0KQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdGEgJTAsIFslMV0gJTJcblx0IiA6IDoKKwkJCSAgICAgInIiIChjb250ZXh0KSwgInIiIChTUk1NVV9DVFhfUkVHKSwKKwkJCSAgICAgImkiIChBU0lfTV9NTVVSRUdTKSA6ICJtZW1vcnkiKTsKK30KKworZXh0ZXJuIF9faW5saW5lX18gaW50IHNybW11X2dldF9jb250ZXh0KHZvaWQpCit7CisJcmVnaXN0ZXIgaW50IHJldHZhbDsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibGRhIFslMV0gJTIsICUwXG5cdCIgOgorCQkJICAgICAiPXIiIChyZXR2YWwpIDoKKwkJCSAgICAgInIiIChTUk1NVV9DVFhfUkVHKSwKKwkJCSAgICAgImkiIChBU0lfTV9NTVVSRUdTKSk7CisJcmV0dXJuIHJldHZhbDsKK30KKworZXh0ZXJuIF9faW5saW5lX18gdW5zaWduZWQgaW50IHNybW11X2dldF9mc3RhdHVzKHZvaWQpCit7CisJdW5zaWduZWQgaW50IHJldHZhbDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKCJsZGEgWyUxXSAlMiwgJTBcblx0IiA6CisJCQkgICAgICI9ciIgKHJldHZhbCkgOgorCQkJICAgICAiciIgKFNSTU1VX0ZBVUxUX1NUQVRVUyksICJpIiAoQVNJX01fTU1VUkVHUykpOworCXJldHVybiByZXR2YWw7Cit9CisKK2V4dGVybiBfX2lubGluZV9fIHVuc2lnbmVkIGludCBzcm1tdV9nZXRfZmFkZHIodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgcmV0dmFsOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oImxkYSBbJTFdICUyLCAlMFxuXHQiIDoKKwkJCSAgICAgIj1yIiAocmV0dmFsKSA6CisJCQkgICAgICJyIiAoU1JNTVVfRkFVTFRfQUREUiksICJpIiAoQVNJX01fTU1VUkVHUykpOworCXJldHVybiByZXR2YWw7Cit9CisKKy8qIFRoaXMgaXMgZ3VhcmFudGVlZCBvbiBhbGwgU1JNTVUncy4gKi8KK2V4dGVybiBfX2lubGluZV9fIHZvaWQgc3JtbXVfZmx1c2hfd2hvbGVfdGxiKHZvaWQpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0YSAlJWcwLCBbJTBdICUxXG5cdCI6IDoKKwkJCSAgICAgInIiICgweDQwMCksICAgICAgICAvKiBGbHVzaCBlbnRpcmUgVExCISEgKi8KKwkJCSAgICAgImkiIChBU0lfTV9GTFVTSF9QUk9CRSkgOiAibWVtb3J5Iik7CisKK30KKworLyogVGhlc2UgZmx1c2ggdHlwZXMgYXJlIG5vdCBhdmFpbGFibGUgb24gYWxsIGNoaXBzLi4uICovCitleHRlcm4gX19pbmxpbmVfXyB2b2lkIHNybW11X2ZsdXNoX3RsYl9jdHgodm9pZCkKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RhICUlZzAsIFslMF0gJTFcblx0IjogOgorCQkJICAgICAiciIgKDB4MzAwKSwgICAgICAgIC8qIEZsdXNoIFRMQiBjdHguLiAqLworCQkJICAgICAiaSIgKEFTSV9NX0ZMVVNIX1BST0JFKSA6ICJtZW1vcnkiKTsKKworfQorCitleHRlcm4gX19pbmxpbmVfXyB2b2lkIHNybW11X2ZsdXNoX3RsYl9yZWdpb24odW5zaWduZWQgbG9uZyBhZGRyKQoreworCWFkZHIgJj0gU1JNTVVfUEdESVJfTUFTSzsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RhICUlZzAsIFslMF0gJTFcblx0IjogOgorCQkJICAgICAiciIgKGFkZHIgfCAweDIwMCksIC8qIEZsdXNoIFRMQiByZWdpb24uLiAqLworCQkJICAgICAiaSIgKEFTSV9NX0ZMVVNIX1BST0JFKSA6ICJtZW1vcnkiKTsKKworfQorCisKK2V4dGVybiBfX2lubGluZV9fIHZvaWQgc3JtbXVfZmx1c2hfdGxiX3NlZ21lbnQodW5zaWduZWQgbG9uZyBhZGRyKQoreworCWFkZHIgJj0gU1JNTVVfUkVBTF9QTURfTUFTSzsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RhICUlZzAsIFslMF0gJTFcblx0IjogOgorCQkJICAgICAiciIgKGFkZHIgfCAweDEwMCksIC8qIEZsdXNoIFRMQiBzZWdtZW50Li4gKi8KKwkJCSAgICAgImkiIChBU0lfTV9GTFVTSF9QUk9CRSkgOiAibWVtb3J5Iik7CisKK30KKworZXh0ZXJuIF9faW5saW5lX18gdm9pZCBzcm1tdV9mbHVzaF90bGJfcGFnZSh1bnNpZ25lZCBsb25nIHBhZ2UpCit7CisJcGFnZSAmPSBQQUdFX01BU0s7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0YSAlJWcwLCBbJTBdICUxXG5cdCI6IDoKKwkJCSAgICAgInIiIChwYWdlKSwgICAgICAgIC8qIEZsdXNoIFRMQiBwYWdlLi4gKi8KKwkJCSAgICAgImkiIChBU0lfTV9GTFVTSF9QUk9CRSkgOiAibWVtb3J5Iik7CisKK30KKworZXh0ZXJuIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBzcm1tdV9od3Byb2JlKHVuc2lnbmVkIGxvbmcgdmFkZHIpCit7CisJdW5zaWduZWQgbG9uZyByZXR2YWw7CisKKwl2YWRkciAmPSBQQUdFX01BU0s7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oImxkYSBbJTFdICUyLCAlMFxuXHQiIDoKKwkJCSAgICAgIj1yIiAocmV0dmFsKSA6CisJCQkgICAgICJyIiAodmFkZHIgfCAweDQwMCksICJpIiAoQVNJX01fRkxVU0hfUFJPQkUpKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK2V4dGVybiBfX2lubGluZV9fIGludAorc3JtbXVfZ2V0X3B0ZSAodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgZW50cnk7CisgICAgICAgIAorCV9fYXNtX18gX192b2xhdGlsZV9fKCJcblx0bGRhIFslMV0gJTIsJTBcblx0IiA6CisJCQkJIj1yIiAoZW50cnkpOgorCQkJCSJyIiAoKGFkZHIgJiAweGZmZmZmMDAwKSB8IDB4NDAwKSwgImkiIChBU0lfTV9GTFVTSF9QUk9CRSkpOworCXJldHVybiBlbnRyeTsKK30KKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgKCpzcm1tdV9yZWFkX3BoeXNpY2FsKSh1bnNpZ25lZCBsb25nIHBhZGRyKTsKK2V4dGVybiB2b2lkICgqc3JtbXVfd3JpdGVfcGh5c2ljYWwpKHVuc2lnbmVkIGxvbmcgcGFkZHIsIHVuc2lnbmVkIGxvbmcgd29yZCk7CisKKyNlbmRpZiAvKiAhKF9fQVNTRU1CTFlfXykgKi8KKworI2VuZGlmIC8qICEoX1NQQVJDX1BHVFNSTU1VX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9wZ3RzdW40LmggYi9pbmNsdWRlL2FzbS1zcGFyYy9wZ3RzdW40LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBiZGExMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3BndHN1bjQuaApAQCAtMCwwICsxLDE3MSBAQAorLyogJElkOiBwZ3RzdW40LmgsdiAxLjUgMjAwMC8wNi8wNSAwNjowODo0NiBhbnRvbiBFeHAgJAorICogcGd0c3VuNC5oOiAgU3VuNCBzcGVjaWZpYyBwZ3RhYmxlLmggZGVmaW5lcyBhbmQgY29kZS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQorICogQ29weXJpZ2h0IChDKSAxOTk4IEpha3ViIEplbGluZWsgKGpqQHN1bnNpdGUubWZmLmN1bmkuY3opCisgKi8KKyNpZm5kZWYgX1NQQVJDX1BHVFNVTjRDX0gKKyNkZWZpbmUgX1NQQVJDX1BHVFNVTjRDX0gKKworI2luY2x1ZGUgPGFzbS9jb250cmVncy5oPgorCisvKiBQTURfU0hJRlQgZGV0ZXJtaW5lcyB0aGUgc2l6ZSBvZiB0aGUgYXJlYSBhIHNlY29uZC1sZXZlbCBwYWdlIHRhYmxlIGNhbiBtYXAgKi8KKyNkZWZpbmUgU1VONENfUE1EX1NISUZUICAgICAgIDIzCisKKy8qIFBHRElSX1NISUZUIGRldGVybWluZXMgd2hhdCBhIHRoaXJkLWxldmVsIHBhZ2UgdGFibGUgZW50cnkgY2FuIG1hcCAqLworI2RlZmluZSBTVU40Q19QR0RJUl9TSElGVCAgICAgICAyMworI2RlZmluZSBTVU40Q19QR0RJUl9TSVpFICAgICAgICAoMVVMIDw8IFNVTjRDX1BHRElSX1NISUZUKQorI2RlZmluZSBTVU40Q19QR0RJUl9NQVNLICAgICAgICAofihTVU40Q19QR0RJUl9TSVpFLTEpKQorI2RlZmluZSBTVU40Q19QR0RJUl9BTElHTihhZGRyKSAoKChhZGRyKStTVU40Q19QR0RJUl9TSVpFLTEpJlNVTjRDX1BHRElSX01BU0spCisKKy8qIFRvIHJlcHJlc2VudCBob3cgdGhlIHN1bjRjIG1tdSByZWFsbHkgbGF5cyB0aGluZ3Mgb3V0LiAqLworI2RlZmluZSBTVU40Q19SRUFMX1BHRElSX1NISUZUICAgICAgIDE4CisjZGVmaW5lIFNVTjRDX1JFQUxfUEdESVJfU0laRSAgICAgICAgKDFVTCA8PCBTVU40Q19SRUFMX1BHRElSX1NISUZUKQorI2RlZmluZSBTVU40Q19SRUFMX1BHRElSX01BU0sgICAgICAgICh+KFNVTjRDX1JFQUxfUEdESVJfU0laRS0xKSkKKyNkZWZpbmUgU1VONENfUkVBTF9QR0RJUl9BTElHTihhZGRyKSAoKChhZGRyKStTVU40Q19SRUFMX1BHRElSX1NJWkUtMSkmU1VONENfUkVBTF9QR0RJUl9NQVNLKQorCisvKiAxOSBiaXQgUEZOIG9uIHN1bjQgKi8KKyNkZWZpbmUgU1VONENfUEZOX01BU0sgMHg3ZmZmZgorIAorLyogRG9uJ3QgaW5jcmVhc2UgdGhlc2UgdW5sZXNzIHRoZSBzdHJ1Y3R1cmVzIGluIHN1bjRjLmMgYXJlIGZpeGVkICovCisjZGVmaW5lIFNVTjRDX01BWF9TRUdNQVBTIDI1NgorI2RlZmluZSBTVU40Q19NQVhfQ09OVEVYVFMgMTYKKworLyoKKyAqIFRvIGJlIGVmZmljaWVudCwgYW5kIG5vdCBoYXZlIHRvIHdvcnJ5IGFib3V0IGFsbG9jYXRpbmcgc3VjaAorICogYSBodWdlIHBnZCwgd2UgbWFrZSB0aGUga2VybmVsIHN1bjRjIHRhYmxlcyBlYWNoIGhvbGQgMTAyNAorICogZW50cmllcyBhbmQgdGhlIHBnZCBzaW1pbGFybHkganVzdCBsaWtlIHRoZSBpMzg2IHRhYmxlcy4KKyAqLworI2RlZmluZSBTVU40Q19QVFJTX1BFUl9QVEUgICAgMTAyNAorI2RlZmluZSBTVU40Q19QVFJTX1BFUl9QTUQgICAgMQorI2RlZmluZSBTVU40Q19QVFJTX1BFUl9QR0QgICAgMTAyNAorCisvKgorICogU3BhcmMgU1VONEMgcHRlIGZpZWxkcy4KKyAqLworI2RlZmluZSBfU1VONENfUEFHRV9WQUxJRCAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBfU1VONENfUEFHRV9TSUxFTlRfUkVBRCAgMHg4MDAwMDAwMCAgIC8qIHN5bm9ueW0gKi8KKyNkZWZpbmUgX1NVTjRDX1BBR0VfRElSVFkgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgX1NVTjRDX1BBR0VfU0lMRU5UX1dSSVRFIDB4NDAwMDAwMDAgICAvKiBzeW5vbnltICovCisjZGVmaW5lIF9TVU40Q19QQUdFX1BSSVYgICAgICAgICAweDIwMDAwMDAwICAgLyogcHJpdmlsZWdlZCBwYWdlICovCisjZGVmaW5lIF9TVU40Q19QQUdFX05PQ0FDSEUgICAgICAweDEwMDAwMDAwICAgLyogbm9uLWNhY2hlYWJsZSBwYWdlICovCisjZGVmaW5lIF9TVU40Q19QQUdFX1BSRVNFTlQgICAgICAweDA4MDAwMDAwICAgLyogaW1wbGVtZW50ZWQgaW4gc29mdHdhcmUgKi8KKyNkZWZpbmUgX1NVTjRDX1BBR0VfSU8gICAgICAgICAgIDB4MDQwMDAwMDAgICAvKiBJL08gcGFnZSAqLworI2RlZmluZSBfU1VONENfUEFHRV9GSUxFICAgICAgICAgMHgwMjAwMDAwMCAgIC8qIGltcGxlbWVudGVkIGluIHNvZnR3YXJlICovCisjZGVmaW5lIF9TVU40Q19QQUdFX1JFQUQgICAgICAgICAweDAwODAwMDAwICAgLyogaW1wbGVtZW50ZWQgaW4gc29mdHdhcmUgKi8KKyNkZWZpbmUgX1NVTjRDX1BBR0VfV1JJVEUgICAgICAgIDB4MDA0MDAwMDAgICAvKiBpbXBsZW1lbnRlZCBpbiBzb2Z0d2FyZSAqLworI2RlZmluZSBfU1VONENfUEFHRV9BQ0NFU1NFRCAgICAgMHgwMDIwMDAwMCAgIC8qIGltcGxlbWVudGVkIGluIHNvZnR3YXJlICovCisjZGVmaW5lIF9TVU40Q19QQUdFX01PRElGSUVEICAgICAweDAwMTAwMDAwICAgLyogaW1wbGVtZW50ZWQgaW4gc29mdHdhcmUgKi8KKworI2RlZmluZSBfU1VONENfUkVBREFCTEUJCShfU1VONENfUEFHRV9SRUFEfF9TVU40Q19QQUdFX1NJTEVOVF9SRUFEfFwKKwkJCQkgX1NVTjRDX1BBR0VfQUNDRVNTRUQpCisjZGVmaW5lIF9TVU40Q19XUklURUFCTEUJKF9TVU40Q19QQUdFX1dSSVRFfF9TVU40Q19QQUdFX1NJTEVOVF9XUklURXxcCisJCQkJIF9TVU40Q19QQUdFX01PRElGSUVEKQorCisjZGVmaW5lIF9TVU40Q19QQUdFX0NIR19NQVNLCSgweGZmZmZ8X1NVTjRDX1BBR0VfQUNDRVNTRUR8X1NVTjRDX1BBR0VfTU9ESUZJRUQpCisKKyNkZWZpbmUgU1VONENfUEFHRV9OT05FCQlfX3BncHJvdChfU1VONENfUEFHRV9QUkVTRU5UKQorI2RlZmluZSBTVU40Q19QQUdFX1NIQVJFRAlfX3BncHJvdChfU1VONENfUEFHRV9QUkVTRU5UfF9TVU40Q19SRUFEQUJMRXxcCisJCQkJCSBfU1VONENfUEFHRV9XUklURSkKKyNkZWZpbmUgU1VONENfUEFHRV9DT1BZCQlfX3BncHJvdChfU1VONENfUEFHRV9QUkVTRU5UfF9TVU40Q19SRUFEQUJMRSkKKyNkZWZpbmUgU1VONENfUEFHRV9SRUFET05MWQlfX3BncHJvdChfU1VONENfUEFHRV9QUkVTRU5UfF9TVU40Q19SRUFEQUJMRSkKKyNkZWZpbmUgU1VONENfUEFHRV9LRVJORUwJX19wZ3Byb3QoX1NVTjRDX1JFQURBQkxFfF9TVU40Q19XUklURUFCTEV8XAorCQkJCQkgX1NVTjRDX1BBR0VfRElSVFl8X1NVTjRDX1BBR0VfUFJJVikKKworLyogU1VONEMgc3dhcCBlbnRyeSBlbmNvZGluZworICoKKyAqIFdlIHVzZSA1IGJpdHMgZm9yIHRoZSB0eXBlIGFuZCAxOSBmb3IgdGhlIG9mZnNldC4gIFRoaXMgZ2l2ZXMgdXMKKyAqIDMyIHN3YXBmaWxlcyBvZiA0R0IgZWFjaC4gIEVuY29kaW5nIGxvb2tzIGxpa2U6CisgKgorICogUlJSUlJSUlJvb29vb29vb29vb29vb29vb29vdHR0dHQKKyAqIGZlZGNiYTk4NzY1NDMyMTBmZWRjYmE5ODc2NTQzMjEwCisgKgorICogVGhlIHRvcCA4IGJpdHMgYXJlIHJlc2VydmVkIGZvciBwcm90ZWN0aW9uIGFuZCBzdGF0dXMgYml0cywgZXNwZWNpYWxseQorICogRklMRSBhbmQgUFJFU0VOVC4KKyAqLworI2RlZmluZSBTVU40Q19TV1BfVFlQRV9NQVNLCTB4MWYKKyNkZWZpbmUgU1VONENfU1dQX09GRl9NQVNLCTB4N2ZmZmYKKyNkZWZpbmUgU1VONENfU1dQX09GRl9TSElGVAk1CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzdW40Y19nZXRfc3luY2hyb25vdXNfZXJyb3Iodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHN5bmNfZXJyOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oImxkYSBbJTFdICUyLCAlMFxuXHQiIDoKKwkJCSAgICAgIj1yIiAoc3luY19lcnIpIDoKKwkJCSAgICAgInIiIChBQ19TWU5DX0VSUiksICJpIiAoQVNJX0NPTlRST0wpKTsKKwlyZXR1cm4gc3luY19lcnI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzdW40Y19nZXRfc3luY2hyb25vdXNfYWRkcmVzcyh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgc3luY19hZGRyOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oImxkYSBbJTFdICUyLCAlMFxuXHQiIDoKKwkJCSAgICAgIj1yIiAoc3luY19hZGRyKSA6CisJCQkgICAgICJyIiAoQUNfU1lOQ19WQSksICJpIiAoQVNJX0NPTlRST0wpKTsKKwlyZXR1cm4gc3luY19hZGRyOworfQorCisvKiBTVU40IHB0ZSwgc2VnbWFwLCBhbmQgY29udGV4dCBtYW5pcHVsYXRpb24gKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzdW40Y19nZXRfc2VnbWFwKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKyAgcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBlbnRyeTsKKworICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiXG5cdGxkdWhhIFslMV0gJTIsICUwXG5cdCIgOiAKKwkJICAgICAgICI9ciIgKGVudHJ5KSA6CisJCSAgICAgICAiciIgKGFkZHIpLCAiaSIgKEFTSV9TRUdNQVApKTsKKyAgcmV0dXJuIGVudHJ5OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3VuNGNfcHV0X3NlZ21hcCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW50cnkpCit7CisgIF9fYXNtX18gX192b2xhdGlsZV9fKCJcblx0c3RoYSAlMSwgWyUwXSAlMjsgbm9wOyBub3A7IG5vcDtcblx0IiA6IDoKKwkJICAgICAgICJyIiAoYWRkciksICJyIiAoZW50cnkpLAorCQkgICAgICAgImkiIChBU0lfU0VHTUFQKQorCQkgICAgICAgOiAibWVtb3J5Iik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzdW40Y19nZXRfcHRlKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKyAgcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBlbnRyeTsKKworICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiXG5cdGxkYSBbJTFdICUyLCAlMFxuXHQiIDogCisJCSAgICAgICAiPXIiIChlbnRyeSkgOgorCQkgICAgICAgInIiIChhZGRyKSwgImkiIChBU0lfUFRFKSk7CisgIHJldHVybiBlbnRyeTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN1bjRjX3B1dF9wdGUodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVudHJ5KQoreworICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiXG5cdHN0YSAlMSwgWyUwXSAlMjsgbm9wOyBub3A7IG5vcDtcblx0IiA6IDoKKwkJICAgICAgICJyIiAoYWRkciksIAorCQkgICAgICAgInIiICgoZW50cnkgJiB+KF9TVU40Q19QQUdFX1BSRVNFTlQpKSksICJpIiAoQVNJX1BURSkKKwkJICAgICAgIDogIm1lbW9yeSIpOworfQorCitzdGF0aWMgaW5saW5lIGludCBzdW40Y19nZXRfY29udGV4dCh2b2lkKQoreworICByZWdpc3RlciBpbnQgY3R4OworCisgIF9fYXNtX18gX192b2xhdGlsZV9fKCJcblx0bGR1YmEgWyUxXSAlMiwgJTBcblx0IiA6CisJCSAgICAgICAiPXIiIChjdHgpIDoKKwkJICAgICAgICJyIiAoQUNfQ09OVEVYVCksICJpIiAoQVNJX0NPTlRST0wpKTsKKworICByZXR1cm4gY3R4OworfQorCitzdGF0aWMgaW5saW5lIGludCBzdW40Y19zZXRfY29udGV4dChpbnQgY3R4KQoreworICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiXG5cdHN0YmEgJTAsIFslMV0gJTI7IG5vcDsgbm9wOyBub3A7XG5cdCIgOiA6CisJCSAgICAgICAiciIgKGN0eCksICJyIiAoQUNfQ09OVEVYVCksICJpIiAoQVNJX0NPTlRST0wpCisJCSAgICAgICA6ICJtZW1vcnkiKTsKKworICByZXR1cm4gY3R4OworfQorCisjZW5kaWYgLyogIShfX0FTU0VNQkxZX18pICovCisKKyNlbmRpZiAvKiAhKF9TUEFSQ19QR1RTVU40X0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9wZ3RzdW40Yy5oIGIvaW5jbHVkZS9hc20tc3BhcmMvcGd0c3VuNGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTNiNmRiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvcGd0c3VuNGMuaApAQCAtMCwwICsxLDE3MiBAQAorLyogJElkOiBwZ3RzdW40Yy5oLHYgMS4zNyAyMDAwLzA2LzA1IDA2OjA4OjQ2IGFudG9uIEV4cCAkCisgKiBwZ3RzdW40Yy5oOiAgU3VuNGMgc3BlY2lmaWMgcGd0YWJsZS5oIGRlZmluZXMgYW5kIGNvZGUuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKKyAqLworI2lmbmRlZiBfU1BBUkNfUEdUU1VONENfSAorI2RlZmluZSBfU1BBUkNfUEdUU1VONENfSAorCisjaW5jbHVkZSA8YXNtL2NvbnRyZWdzLmg+CisKKy8qIFBNRF9TSElGVCBkZXRlcm1pbmVzIHRoZSBzaXplIG9mIHRoZSBhcmVhIGEgc2Vjb25kLWxldmVsIHBhZ2UgdGFibGUgY2FuIG1hcCAqLworI2RlZmluZSBTVU40Q19QTURfU0hJRlQgICAgICAgMjIKKworLyogUEdESVJfU0hJRlQgZGV0ZXJtaW5lcyB3aGF0IGEgdGhpcmQtbGV2ZWwgcGFnZSB0YWJsZSBlbnRyeSBjYW4gbWFwICovCisjZGVmaW5lIFNVTjRDX1BHRElSX1NISUZUICAgICAgIDIyCisjZGVmaW5lIFNVTjRDX1BHRElSX1NJWkUgICAgICAgICgxVUwgPDwgU1VONENfUEdESVJfU0hJRlQpCisjZGVmaW5lIFNVTjRDX1BHRElSX01BU0sgICAgICAgICh+KFNVTjRDX1BHRElSX1NJWkUtMSkpCisjZGVmaW5lIFNVTjRDX1BHRElSX0FMSUdOKGFkZHIpICgoKGFkZHIpK1NVTjRDX1BHRElSX1NJWkUtMSkmU1VONENfUEdESVJfTUFTSykKKworLyogVG8gcmVwcmVzZW50IGhvdyB0aGUgc3VuNGMgbW11IHJlYWxseSBsYXlzIHRoaW5ncyBvdXQuICovCisjZGVmaW5lIFNVTjRDX1JFQUxfUEdESVJfU0hJRlQgICAgICAgMTgKKyNkZWZpbmUgU1VONENfUkVBTF9QR0RJUl9TSVpFICAgICAgICAoMVVMIDw8IFNVTjRDX1JFQUxfUEdESVJfU0hJRlQpCisjZGVmaW5lIFNVTjRDX1JFQUxfUEdESVJfTUFTSyAgICAgICAgKH4oU1VONENfUkVBTF9QR0RJUl9TSVpFLTEpKQorI2RlZmluZSBTVU40Q19SRUFMX1BHRElSX0FMSUdOKGFkZHIpICgoKGFkZHIpK1NVTjRDX1JFQUxfUEdESVJfU0laRS0xKSZTVU40Q19SRUFMX1BHRElSX01BU0spCisKKy8qIDE2IGJpdCBQRk4gb24gc3VuNGMgKi8KKyNkZWZpbmUgU1VONENfUEZOX01BU0sgMHhmZmZmCisKKy8qIERvbid0IGluY3JlYXNlIHRoZXNlIHVubGVzcyB0aGUgc3RydWN0dXJlcyBpbiBzdW40Yy5jIGFyZSBmaXhlZCAqLworI2RlZmluZSBTVU40Q19NQVhfU0VHTUFQUyAyNTYKKyNkZWZpbmUgU1VONENfTUFYX0NPTlRFWFRTIDE2CisKKy8qCisgKiBUbyBiZSBlZmZpY2llbnQsIGFuZCBub3QgaGF2ZSB0byB3b3JyeSBhYm91dCBhbGxvY2F0aW5nIHN1Y2gKKyAqIGEgaHVnZSBwZ2QsIHdlIG1ha2UgdGhlIGtlcm5lbCBzdW40YyB0YWJsZXMgZWFjaCBob2xkIDEwMjQKKyAqIGVudHJpZXMgYW5kIHRoZSBwZ2Qgc2ltaWxhcmx5IGp1c3QgbGlrZSB0aGUgaTM4NiB0YWJsZXMuCisgKi8KKyNkZWZpbmUgU1VONENfUFRSU19QRVJfUFRFICAgIDEwMjQKKyNkZWZpbmUgU1VONENfUFRSU19QRVJfUE1EICAgIDEKKyNkZWZpbmUgU1VONENfUFRSU19QRVJfUEdEICAgIDEwMjQKKworLyoKKyAqIFNwYXJjIFNVTjRDIHB0ZSBmaWVsZHMuCisgKi8KKyNkZWZpbmUgX1NVTjRDX1BBR0VfVkFMSUQgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgX1NVTjRDX1BBR0VfU0lMRU5UX1JFQUQgIDB4ODAwMDAwMDAgICAvKiBzeW5vbnltICovCisjZGVmaW5lIF9TVU40Q19QQUdFX0RJUlRZICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIF9TVU40Q19QQUdFX1NJTEVOVF9XUklURSAweDQwMDAwMDAwICAgLyogc3lub255bSAqLworI2RlZmluZSBfU1VONENfUEFHRV9QUklWICAgICAgICAgMHgyMDAwMDAwMCAgIC8qIHByaXZpbGVnZWQgcGFnZSAqLworI2RlZmluZSBfU1VONENfUEFHRV9OT0NBQ0hFICAgICAgMHgxMDAwMDAwMCAgIC8qIG5vbi1jYWNoZWFibGUgcGFnZSAqLworI2RlZmluZSBfU1VONENfUEFHRV9QUkVTRU5UICAgICAgMHgwODAwMDAwMCAgIC8qIGltcGxlbWVudGVkIGluIHNvZnR3YXJlICovCisjZGVmaW5lIF9TVU40Q19QQUdFX0lPICAgICAgICAgICAweDA0MDAwMDAwICAgLyogSS9PIHBhZ2UgKi8KKyNkZWZpbmUgX1NVTjRDX1BBR0VfRklMRSAgICAgICAgIDB4MDIwMDAwMDAgICAvKiBpbXBsZW1lbnRlZCBpbiBzb2Z0d2FyZSAqLworI2RlZmluZSBfU1VONENfUEFHRV9SRUFEICAgICAgICAgMHgwMDgwMDAwMCAgIC8qIGltcGxlbWVudGVkIGluIHNvZnR3YXJlICovCisjZGVmaW5lIF9TVU40Q19QQUdFX1dSSVRFICAgICAgICAweDAwNDAwMDAwICAgLyogaW1wbGVtZW50ZWQgaW4gc29mdHdhcmUgKi8KKyNkZWZpbmUgX1NVTjRDX1BBR0VfQUNDRVNTRUQgICAgIDB4MDAyMDAwMDAgICAvKiBpbXBsZW1lbnRlZCBpbiBzb2Z0d2FyZSAqLworI2RlZmluZSBfU1VONENfUEFHRV9NT0RJRklFRCAgICAgMHgwMDEwMDAwMCAgIC8qIGltcGxlbWVudGVkIGluIHNvZnR3YXJlICovCisKKyNkZWZpbmUgX1NVTjRDX1JFQURBQkxFCQkoX1NVTjRDX1BBR0VfUkVBRHxfU1VONENfUEFHRV9TSUxFTlRfUkVBRHxcCisJCQkJIF9TVU40Q19QQUdFX0FDQ0VTU0VEKQorI2RlZmluZSBfU1VONENfV1JJVEVBQkxFCShfU1VONENfUEFHRV9XUklURXxfU1VONENfUEFHRV9TSUxFTlRfV1JJVEV8XAorCQkJCSBfU1VONENfUEFHRV9NT0RJRklFRCkKKworI2RlZmluZSBfU1VONENfUEFHRV9DSEdfTUFTSwkoMHhmZmZmfF9TVU40Q19QQUdFX0FDQ0VTU0VEfF9TVU40Q19QQUdFX01PRElGSUVEKQorCisjZGVmaW5lIFNVTjRDX1BBR0VfTk9ORQkJX19wZ3Byb3QoX1NVTjRDX1BBR0VfUFJFU0VOVCkKKyNkZWZpbmUgU1VONENfUEFHRV9TSEFSRUQJX19wZ3Byb3QoX1NVTjRDX1BBR0VfUFJFU0VOVHxfU1VONENfUkVBREFCTEV8XAorCQkJCQkgX1NVTjRDX1BBR0VfV1JJVEUpCisjZGVmaW5lIFNVTjRDX1BBR0VfQ09QWQkJX19wZ3Byb3QoX1NVTjRDX1BBR0VfUFJFU0VOVHxfU1VONENfUkVBREFCTEUpCisjZGVmaW5lIFNVTjRDX1BBR0VfUkVBRE9OTFkJX19wZ3Byb3QoX1NVTjRDX1BBR0VfUFJFU0VOVHxfU1VONENfUkVBREFCTEUpCisjZGVmaW5lIFNVTjRDX1BBR0VfS0VSTkVMCV9fcGdwcm90KF9TVU40Q19SRUFEQUJMRXxfU1VONENfV1JJVEVBQkxFfFwKKwkJCQkJIF9TVU40Q19QQUdFX0RJUlRZfF9TVU40Q19QQUdFX1BSSVYpCisKKy8qIFNVTjRDIHN3YXAgZW50cnkgZW5jb2RpbmcKKyAqCisgKiBXZSB1c2UgNSBiaXRzIGZvciB0aGUgdHlwZSBhbmQgMTkgZm9yIHRoZSBvZmZzZXQuICBUaGlzIGdpdmVzIHVzCisgKiAzMiBzd2FwZmlsZXMgb2YgNEdCIGVhY2guICBFbmNvZGluZyBsb29rcyBsaWtlOgorICoKKyAqIFJSUlJSUlJSb29vb29vb29vb29vb29vb29vb3R0dHR0CisgKiBmZWRjYmE5ODc2NTQzMjEwZmVkY2JhOTg3NjU0MzIxMAorICoKKyAqIFRoZSB0b3AgOCBiaXRzIGFyZSByZXNlcnZlZCBmb3IgcHJvdGVjdGlvbiBhbmQgc3RhdHVzIGJpdHMsIGVzcGVjaWFsbHkKKyAqIEZJTEUgYW5kIFBSRVNFTlQuCisgKi8KKyNkZWZpbmUgU1VONENfU1dQX1RZUEVfTUFTSwkweDFmCisjZGVmaW5lIFNVTjRDX1NXUF9PRkZfTUFTSwkweDdmZmZmCisjZGVmaW5lIFNVTjRDX1NXUF9PRkZfU0hJRlQJNQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgc3VuNGNfZ2V0X3N5bmNocm9ub3VzX2Vycm9yKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBzeW5jX2VycjsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKCJsZGEgWyUxXSAlMiwgJTBcblx0IiA6CisJCQkgICAgICI9ciIgKHN5bmNfZXJyKSA6CisJCQkgICAgICJyIiAoQUNfU1lOQ19FUlIpLCAiaSIgKEFTSV9DT05UUk9MKSk7CisJcmV0dXJuIHN5bmNfZXJyOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgc3VuNGNfZ2V0X3N5bmNocm9ub3VzX2FkZHJlc3Modm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHN5bmNfYWRkcjsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKCJsZGEgWyUxXSAlMiwgJTBcblx0IiA6CisJCQkgICAgICI9ciIgKHN5bmNfYWRkcikgOgorCQkJICAgICAiciIgKEFDX1NZTkNfVkEpLCAiaSIgKEFTSV9DT05UUk9MKSk7CisJcmV0dXJuIHN5bmNfYWRkcjsKK30KKworLyogU1VONEMgcHRlLCBzZWdtYXAsIGFuZCBjb250ZXh0IG1hbmlwdWxhdGlvbiAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHN1bjRjX2dldF9zZWdtYXAodW5zaWduZWQgbG9uZyBhZGRyKQoreworICByZWdpc3RlciB1bnNpZ25lZCBsb25nIGVudHJ5OworCisgIF9fYXNtX18gX192b2xhdGlsZV9fKCJcblx0bGR1YmEgWyUxXSAlMiwgJTBcblx0IiA6IAorCQkgICAgICAgIj1yIiAoZW50cnkpIDoKKwkJICAgICAgICJyIiAoYWRkciksICJpIiAoQVNJX1NFR01BUCkpOworCisgIHJldHVybiBlbnRyeTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN1bjRjX3B1dF9zZWdtYXAodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVudHJ5KQoreworCisgIF9fYXNtX18gX192b2xhdGlsZV9fKCJcblx0c3RiYSAlMSwgWyUwXSAlMjsgbm9wOyBub3A7IG5vcDtcblx0IiA6IDoKKwkJICAgICAgICJyIiAoYWRkciksICJyIiAoZW50cnkpLAorCQkgICAgICAgImkiIChBU0lfU0VHTUFQKQorCQkgICAgICAgOiAibWVtb3J5Iik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzdW40Y19nZXRfcHRlKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKyAgcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBlbnRyeTsKKworICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiXG5cdGxkYSBbJTFdICUyLCAlMFxuXHQiIDogCisJCSAgICAgICAiPXIiIChlbnRyeSkgOgorCQkgICAgICAgInIiIChhZGRyKSwgImkiIChBU0lfUFRFKSk7CisgIHJldHVybiBlbnRyeTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN1bjRjX3B1dF9wdGUodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVudHJ5KQoreworICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiXG5cdHN0YSAlMSwgWyUwXSAlMjsgbm9wOyBub3A7IG5vcDtcblx0IiA6IDoKKwkJICAgICAgICJyIiAoYWRkciksIAorCQkgICAgICAgInIiICgoZW50cnkgJiB+KF9TVU40Q19QQUdFX1BSRVNFTlQpKSksICJpIiAoQVNJX1BURSkKKwkJICAgICAgIDogIm1lbW9yeSIpOworfQorCitzdGF0aWMgaW5saW5lIGludCBzdW40Y19nZXRfY29udGV4dCh2b2lkKQoreworICByZWdpc3RlciBpbnQgY3R4OworCisgIF9fYXNtX18gX192b2xhdGlsZV9fKCJcblx0bGR1YmEgWyUxXSAlMiwgJTBcblx0IiA6CisJCSAgICAgICAiPXIiIChjdHgpIDoKKwkJICAgICAgICJyIiAoQUNfQ09OVEVYVCksICJpIiAoQVNJX0NPTlRST0wpKTsKKworICByZXR1cm4gY3R4OworfQorCitzdGF0aWMgaW5saW5lIGludCBzdW40Y19zZXRfY29udGV4dChpbnQgY3R4KQoreworICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiXG5cdHN0YmEgJTAsIFslMV0gJTI7IG5vcDsgbm9wOyBub3A7XG5cdCIgOiA6CisJCSAgICAgICAiciIgKGN0eCksICJyIiAoQUNfQ09OVEVYVCksICJpIiAoQVNJX0NPTlRST0wpCisJCSAgICAgICA6ICJtZW1vcnkiKTsKKworICByZXR1cm4gY3R4OworfQorCisjZW5kaWYgLyogIShfX0FTU0VNQkxZX18pICovCisKKyNlbmRpZiAvKiAhKF9TUEFSQ19QR1RTVU40Q19IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvcG9sbC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvcG9sbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkZGNjNjQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9wb2xsLmgKQEAgLTAsMCArMSwyMyBAQAorI2lmbmRlZiBfX1NQQVJDX1BPTExfSAorI2RlZmluZSBfX1NQQVJDX1BPTExfSAorCisjZGVmaW5lIFBPTExJTgkJICAxCisjZGVmaW5lIFBPTExQUkkJCSAgMgorI2RlZmluZSBQT0xMT1VUCQkgIDQKKyNkZWZpbmUgUE9MTEVSUgkJICA4CisjZGVmaW5lIFBPTExIVVAJCSAxNgorI2RlZmluZSBQT0xMTlZBTAkgMzIKKyNkZWZpbmUgUE9MTFJETk9STQkgNjQKKyNkZWZpbmUgUE9MTFdSTk9STQlQT0xMT1VUCisjZGVmaW5lIFBPTExSREJBTkQJMTI4CisjZGVmaW5lIFBPTExXUkJBTkQJMjU2CisjZGVmaW5lIFBPTExNU0cJCTUxMgorI2RlZmluZSBQT0xMUkVNT1ZFCTEwMjQKKworc3RydWN0IHBvbGxmZCB7CisJaW50IGZkOworCXNob3J0IGV2ZW50czsKKwlzaG9ydCByZXZlbnRzOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9wb3NpeF90eXBlcy5oIGIvaW5jbHVkZS9hc20tc3BhcmMvcG9zaXhfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWYxYjNkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvcG9zaXhfdHlwZXMuaApAQCAtMCwwICsxLDEyMiBAQAorI2lmbmRlZiBfX0FSQ0hfU1BBUkNfUE9TSVhfVFlQRVNfSAorI2RlZmluZSBfX0FSQ0hfU1BBUkNfUE9TSVhfVFlQRVNfSAorCisvKgorICogVGhpcyBmaWxlIGlzIGdlbmVyYWxseSB1c2VkIGJ5IHVzZXItbGV2ZWwgc29mdHdhcmUsIHNvIHlvdSBuZWVkIHRvCisgKiBiZSBhIGxpdHRsZSBjYXJlZnVsIGFib3V0IG5hbWVzcGFjZSBwb2xsdXRpb24gZXRjLiAgQWxzbywgd2UgY2Fubm90CisgKiBhc3N1bWUgR0NDIGlzIGJlaW5nIHVzZWQuCisgKi8KKwordHlwZWRlZiB1bnNpZ25lZCBpbnQgICAgICAgICAgIF9fa2VybmVsX3NpemVfdDsKK3R5cGVkZWYgaW50ICAgICAgICAgICAgICAgICAgICBfX2tlcm5lbF9zc2l6ZV90OwordHlwZWRlZiBsb25nIGludCAgICAgICAgICAgICAgIF9fa2VybmVsX3B0cmRpZmZfdDsKK3R5cGVkZWYgbG9uZyAgICAgICAgICAgICAgICAgICBfX2tlcm5lbF90aW1lX3Q7Cit0eXBlZGVmIGxvbmcJCSAgICAgICBfX2tlcm5lbF9zdXNlY29uZHNfdDsKK3R5cGVkZWYgbG9uZyAgICAgICAgICAgICAgICAgICBfX2tlcm5lbF9jbG9ja190OwordHlwZWRlZiBpbnQgICAgICAgICAgICAgICAgICAgIF9fa2VybmVsX3BpZF90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCAgICAgICAgIF9fa2VybmVsX2lwY19waWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgICAgICAgICBfX2tlcm5lbF91aWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgICAgICAgICBfX2tlcm5lbF9naWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyAgICAgICAgICBfX2tlcm5lbF9pbm9fdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgICAgICAgICBfX2tlcm5lbF9tb2RlX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0ICAgICAgICAgX19rZXJuZWxfdW1vZGVfdDsKK3R5cGVkZWYgc2hvcnQgICAgICAgICAgICAgICAgICBfX2tlcm5lbF9ubGlua190OwordHlwZWRlZiBsb25nICAgICAgICAgICAgICAgICAgIF9fa2VybmVsX2RhZGRyX3Q7Cit0eXBlZGVmIGxvbmcgICAgICAgICAgICAgICAgICAgX19rZXJuZWxfb2ZmX3Q7Cit0eXBlZGVmIGNoYXIgKiAgICAgICAgICAgICAgICAgX19rZXJuZWxfY2FkZHJfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJICAgICAgIF9fa2VybmVsX3VpZDE2X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CSAgICAgICBfX2tlcm5lbF9naWQxNl90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQJICAgICAgIF9fa2VybmVsX3VpZDMyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludAkgICAgICAgX19rZXJuZWxfZ2lkMzJfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJICAgICAgIF9fa2VybmVsX29sZF91aWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJICAgICAgIF9fa2VybmVsX29sZF9naWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJICAgICAgIF9fa2VybmVsX29sZF9kZXZfdDsKK3R5cGVkZWYgaW50ICAgICAgICAgICAgICAgICAgICBfX2tlcm5lbF9jbG9ja2lkX3Q7Cit0eXBlZGVmIGludCAgICAgICAgICAgICAgICAgICAgX19rZXJuZWxfdGltZXJfdDsKKworI2lmZGVmIF9fR05VQ19fCit0eXBlZGVmIGxvbmcgbG9uZwlfX2tlcm5lbF9sb2ZmX3Q7CisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgeworI2lmIGRlZmluZWQoX19LRVJORUxfXykgfHwgZGVmaW5lZChfX1VTRV9BTEwpCisJaW50CXZhbFsyXTsKKyNlbHNlIC8qICFkZWZpbmVkKF9fS0VSTkVMX18pICYmICFkZWZpbmVkKF9fVVNFX0FMTCkgKi8KKwlpbnQgICAgIF9fdmFsWzJdOworI2VuZGlmIC8qICFkZWZpbmVkKF9fS0VSTkVMX18pICYmICFkZWZpbmVkKF9fVVNFX0FMTCkgKi8KK30gX19rZXJuZWxfZnNpZF90OworCisjaWYgZGVmaW5lZChfX0tFUk5FTF9fKSB8fCAhZGVmaW5lZChfX0dMSUJDX18pIHx8IChfX0dMSUJDX18gPCAyKQorCisjdW5kZWYgX19GRF9TRVQKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19GRF9TRVQodW5zaWduZWQgbG9uZyBmZCwgX19rZXJuZWxfZmRfc2V0ICpmZHNldHApCit7CisJdW5zaWduZWQgbG9uZyBfdG1wID0gZmQgLyBfX05GREJJVFM7CisJdW5zaWduZWQgbG9uZyBfcmVtID0gZmQgJSBfX05GREJJVFM7CisJZmRzZXRwLT5mZHNfYml0c1tfdG1wXSB8PSAoMVVMPDxfcmVtKTsKK30KKworI3VuZGVmIF9fRkRfQ0xSCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fRkRfQ0xSKHVuc2lnbmVkIGxvbmcgZmQsIF9fa2VybmVsX2ZkX3NldCAqZmRzZXRwKQoreworCXVuc2lnbmVkIGxvbmcgX3RtcCA9IGZkIC8gX19ORkRCSVRTOworCXVuc2lnbmVkIGxvbmcgX3JlbSA9IGZkICUgX19ORkRCSVRTOworCWZkc2V0cC0+ZmRzX2JpdHNbX3RtcF0gJj0gfigxVUw8PF9yZW0pOworfQorCisjdW5kZWYgX19GRF9JU1NFVAorc3RhdGljIF9faW5saW5lX18gaW50IF9fRkRfSVNTRVQodW5zaWduZWQgbG9uZyBmZCwgX19jb25zdF9fIF9fa2VybmVsX2ZkX3NldCAqcCkKK3sgCisJdW5zaWduZWQgbG9uZyBfdG1wID0gZmQgLyBfX05GREJJVFM7CisJdW5zaWduZWQgbG9uZyBfcmVtID0gZmQgJSBfX05GREJJVFM7CisJcmV0dXJuIChwLT5mZHNfYml0c1tfdG1wXSAmICgxVUw8PF9yZW0pKSAhPSAwOworfQorCisvKgorICogVGhpcyB3aWxsIHVucm9sbCB0aGUgbG9vcCBmb3IgdGhlIG5vcm1hbCBjb25zdGFudCBjYXNlcyAoOCBvciAzMiBsb25ncywKKyAqIGZvciAyNTYgYW5kIDEwMjQtYml0IGZkX3NldHMgcmVzcGVjdGl2ZWx5KQorICovCisjdW5kZWYgX19GRF9aRVJPCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fRkRfWkVSTyhfX2tlcm5lbF9mZF9zZXQgKnApCit7CisJdW5zaWduZWQgbG9uZyAqdG1wID0gcC0+ZmRzX2JpdHM7CisJaW50IGk7CisKKwlpZiAoX19idWlsdGluX2NvbnN0YW50X3AoX19GRFNFVF9MT05HUykpIHsKKwkJc3dpdGNoIChfX0ZEU0VUX0xPTkdTKSB7CisJCQljYXNlIDMyOgorCQkJICB0bXBbIDBdID0gMDsgdG1wWyAxXSA9IDA7IHRtcFsgMl0gPSAwOyB0bXBbIDNdID0gMDsKKwkJCSAgdG1wWyA0XSA9IDA7IHRtcFsgNV0gPSAwOyB0bXBbIDZdID0gMDsgdG1wWyA3XSA9IDA7CisJCQkgIHRtcFsgOF0gPSAwOyB0bXBbIDldID0gMDsgdG1wWzEwXSA9IDA7IHRtcFsxMV0gPSAwOworCQkJICB0bXBbMTJdID0gMDsgdG1wWzEzXSA9IDA7IHRtcFsxNF0gPSAwOyB0bXBbMTVdID0gMDsKKwkJCSAgdG1wWzE2XSA9IDA7IHRtcFsxN10gPSAwOyB0bXBbMThdID0gMDsgdG1wWzE5XSA9IDA7CisJCQkgIHRtcFsyMF0gPSAwOyB0bXBbMjFdID0gMDsgdG1wWzIyXSA9IDA7IHRtcFsyM10gPSAwOworCQkJICB0bXBbMjRdID0gMDsgdG1wWzI1XSA9IDA7IHRtcFsyNl0gPSAwOyB0bXBbMjddID0gMDsKKwkJCSAgdG1wWzI4XSA9IDA7IHRtcFsyOV0gPSAwOyB0bXBbMzBdID0gMDsgdG1wWzMxXSA9IDA7CisJCQkgIHJldHVybjsKKwkJCWNhc2UgMTY6CisJCQkgIHRtcFsgMF0gPSAwOyB0bXBbIDFdID0gMDsgdG1wWyAyXSA9IDA7IHRtcFsgM10gPSAwOworCQkJICB0bXBbIDRdID0gMDsgdG1wWyA1XSA9IDA7IHRtcFsgNl0gPSAwOyB0bXBbIDddID0gMDsKKwkJCSAgdG1wWyA4XSA9IDA7IHRtcFsgOV0gPSAwOyB0bXBbMTBdID0gMDsgdG1wWzExXSA9IDA7CisJCQkgIHRtcFsxMl0gPSAwOyB0bXBbMTNdID0gMDsgdG1wWzE0XSA9IDA7IHRtcFsxNV0gPSAwOworCQkJICByZXR1cm47CisJCQljYXNlIDg6CisJCQkgIHRtcFsgMF0gPSAwOyB0bXBbIDFdID0gMDsgdG1wWyAyXSA9IDA7IHRtcFsgM10gPSAwOworCQkJICB0bXBbIDRdID0gMDsgdG1wWyA1XSA9IDA7IHRtcFsgNl0gPSAwOyB0bXBbIDddID0gMDsKKwkJCSAgcmV0dXJuOworCQkJY2FzZSA0OgorCQkJICB0bXBbIDBdID0gMDsgdG1wWyAxXSA9IDA7IHRtcFsgMl0gPSAwOyB0bXBbIDNdID0gMDsKKwkJCSAgcmV0dXJuOworCQl9CisJfQorCWkgPSBfX0ZEU0VUX0xPTkdTOworCXdoaWxlIChpKSB7CisJCWktLTsKKwkJKnRtcCA9IDA7CisJCXRtcCsrOworCX0KK30KKworI2VuZGlmIC8qIGRlZmluZWQoX19LRVJORUxfXykgfHwgIWRlZmluZWQoX19HTElCQ19fKSB8fCAoX19HTElCQ19fIDwgMikgKi8KKworI2VuZGlmIC8qICEoX19BUkNIX1NQQVJDX1BPU0lYX1RZUEVTX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9wcm9jZXNzb3IuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3Byb2Nlc3Nvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyYzk2OTkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9wcm9jZXNzb3IuaApAQCAtMCwwICsxLDEzMCBAQAorLyogJElkOiBwcm9jZXNzb3IuaCx2IDEuODMgMjAwMS8xMC8wOCAwOTozMjoxMyBkYXZlbSBFeHAgJAorICogaW5jbHVkZS9hc20tc3BhcmMvcHJvY2Vzc29yLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTQgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQorICovCisKKyNpZm5kZWYgX19BU01fU1BBUkNfUFJPQ0VTU09SX0gKKyNkZWZpbmUgX19BU01fU1BBUkNfUFJPQ0VTU09SX0gKKworLyoKKyAqIFNwYXJjMzIgaW1wbGVtZW50YXRpb24gb2YgbWFjcm8gdGhhdCByZXR1cm5zIGN1cnJlbnQKKyAqIGluc3RydWN0aW9uIHBvaW50ZXIgKCJwcm9ncmFtIGNvdW50ZXIiKS4KKyAqLworI2RlZmluZSBjdXJyZW50X3RleHRfYWRkcigpICh7IHZvaWQgKnBjOyBfX2FzbV9fKCJzZXRoaSAlJWhpKDFmKSwgJTA7IG9yICUwLCAlJWxvKDFmKSwgJTA7XG4xOiIgOiAiPXIiIChwYykpOyBwYzsgfSkKKworI2luY2x1ZGUgPGxpbnV4L2Eub3V0Lmg+CisKKyNpbmNsdWRlIDxhc20vcHNyLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS9oZWFkLmg+CisjaW5jbHVkZSA8YXNtL3NpZ25hbC5oPgorI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CisjaW5jbHVkZSA8YXNtL2J0Zml4dXAuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorCisvKgorICogVGhlIHNwYXJjIGhhcyBubyBwcm9ibGVtcyB3aXRoIHdyaXRlIHByb3RlY3Rpb24KKyAqLworI2RlZmluZSB3cF93b3Jrc19vayAxCisjZGVmaW5lIHdwX3dvcmtzX29rX19pc19hX21hY3JvIC8qIGZvciB2ZXJzaW9ucyBpbiBrc3ltcy5jICovCisKKy8qIFdoZWUsIHRoaXMgaXMgU1RBQ0tfVE9QICsgUEFHRV9TSVpFIGFuZCB0aGUgbG93ZXN0IGtlcm5lbCBhZGRyZXNzIHRvby4uLiAKKyAqIFRoYXQgb25lIHBhZ2UgaXMgdXNlZCB0byBwcm90ZWN0IGtlcm5lbCBmcm9tIGludHJ1ZGVycywgc28gdGhhdAorICogd2UgY2FuIG1ha2Ugb3VyIGFjY2Vzc19vayB0ZXN0IGZhc3RlcgorICovCisjZGVmaW5lIFRBU0tfU0laRQlQQUdFX09GRlNFVAorCitzdHJ1Y3QgdGFza19zdHJ1Y3Q7CisKKyNpZmRlZiBfX0tFUk5FTF9fCitzdHJ1Y3QgZnBxIHsKKwl1bnNpZ25lZCBsb25nICppbnNuX2FkZHI7CisJdW5zaWduZWQgbG9uZyBpbnNuOworfTsKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCB7CisJaW50IHNlZzsKK30gbW1fc2VnbWVudF90OworCisvKiBUaGUgU3BhcmMgcHJvY2Vzc29yIHNwZWNpZmljIHRocmVhZCBzdHJ1Y3QuICovCitzdHJ1Y3QgdGhyZWFkX3N0cnVjdCB7CisJc3RydWN0IHB0X3JlZ3MgKmtyZWdzOworCXVuc2lnbmVkIGludCBfcGFkMTsKKworCS8qIFNwZWNpYWwgY2hpbGQgZm9yayBrcHNyL2t3aW0gdmFsdWVzLiAqLworCXVuc2lnbmVkIGxvbmcgZm9ya19rcHNyIF9fYXR0cmlidXRlX18gKChhbGlnbmVkICg4KSkpOworCXVuc2lnbmVkIGxvbmcgZm9ya19rd2ltOworCisJLyogRmxvYXRpbmcgcG9pbnQgcmVncyAqLworCXVuc2lnbmVkIGxvbmcgICBmbG9hdF9yZWdzWzMyXSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoOCkpKTsKKwl1bnNpZ25lZCBsb25nICAgZnNyOworCXVuc2lnbmVkIGxvbmcgICBmcHFkZXB0aDsKKwlzdHJ1Y3QgZnBxCWZwcXVldWVbMTZdOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJbW1fc2VnbWVudF90IGN1cnJlbnRfZHM7CisJc3RydWN0IGV4ZWMgY29yZV9leGVjOyAgICAgLyoganVzdCB3aGF0IGl0IHNheXMuICovCisJaW50IG5ld19zaWduYWw7Cit9OworCisjZGVmaW5lIFNQQVJDX0ZMQUdfS1RIUkVBRCAgICAgIDB4MSAgICAvKiB0YXNrIGlzIGEga2VybmVsIHRocmVhZCAqLworI2RlZmluZSBTUEFSQ19GTEFHX1VOQUxJR05FRCAgICAweDIgICAgLyogaXMgYWxsb3dlZCB0byBkbyB1bmFsaWduZWQgYWNjZXNzZXMgKi8KKworI2RlZmluZSBJTklUX1RIUkVBRCAgeyBcCisJLmZsYWdzID0gU1BBUkNfRkxBR19LVEhSRUFELCBcCisJLmN1cnJlbnRfZHMgPSBLRVJORUxfRFMsIFwKK30KKworLyogUmV0dXJuIHNhdmVkIFBDIG9mIGEgYmxvY2tlZCB0aHJlYWQuICovCitleHRlcm4gdW5zaWduZWQgbG9uZyB0aHJlYWRfc2F2ZWRfcGMoc3RydWN0IHRhc2tfc3RydWN0ICp0KTsKKworLyogRG8gbmVjZXNzYXJ5IHNldHVwIHRvIHN0YXJ0IHVwIGEgbmV3bHkgZXhlY3V0ZWQgdGhyZWFkLiAqLworZXh0ZXJuIF9faW5saW5lX18gdm9pZCBzdGFydF90aHJlYWQoc3RydWN0IHB0X3JlZ3MgKiByZWdzLCB1bnNpZ25lZCBsb25nIHBjLAorCQkJCSAgICB1bnNpZ25lZCBsb25nIHNwKQoreworCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgemVybyBhc20oImcxIik7CisKKwlyZWdzLT5wc3IgPSAocmVncy0+cHNyICYgKFBTUl9DV1ApKSB8IFBTUl9TOworCXJlZ3MtPnBjID0gKChwYyAmICh+MykpIC0gNCk7CisJcmVncy0+bnBjID0gcmVncy0+cGMgKyA0OworCXJlZ3MtPnkgPSAwOworCXplcm8gPSAwOworCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdGRcdCUlZzAsIFslMCArICUzICsgMHgwMF1cblx0IgorCQkJICAgICAic3RkXHQlJWcwLCBbJTAgKyAlMyArIDB4MDhdXG5cdCIKKwkJCSAgICAgInN0ZFx0JSVnMCwgWyUwICsgJTMgKyAweDEwXVxuXHQiCisJCQkgICAgICJzdGRcdCUlZzAsIFslMCArICUzICsgMHgxOF1cblx0IgorCQkJICAgICAic3RkXHQlJWcwLCBbJTAgKyAlMyArIDB4MjBdXG5cdCIKKwkJCSAgICAgInN0ZFx0JSVnMCwgWyUwICsgJTMgKyAweDI4XVxuXHQiCisJCQkgICAgICJzdGRcdCUlZzAsIFslMCArICUzICsgMHgzMF1cblx0IgorCQkJICAgICAic3RcdCUxLCBbJTAgKyAlMyArIDB4MzhdXG5cdCIKKwkJCSAgICAgInN0XHQlJWcwLCBbJTAgKyAlMyArIDB4M2NdIgorCQkJICAgICA6IC8qIG5vIG91dHB1dHMgKi8KKwkJCSAgICAgOiAiciIgKHJlZ3MpLAorCQkJICAgICAgICJyIiAoc3AgLSBzaXplb2Yoc3RydWN0IHJlZ193aW5kb3cpKSwKKwkJCSAgICAgICAiciIgKHplcm8pLAorCQkJICAgICAgICJpIiAoKGNvbnN0IHVuc2lnbmVkIGxvbmcpKCYoKHN0cnVjdCBwdF9yZWdzICopMCktPnVfcmVnc1swXSkpCisJCQkgICAgIDogIm1lbW9yeSIpOworfQorCisvKiBGcmVlIGFsbCByZXNvdXJjZXMgaGVsZCBieSBhIHRocmVhZC4gKi8KKyNkZWZpbmUgcmVsZWFzZV90aHJlYWQodHNrKQkJZG8geyB9IHdoaWxlKDApCitleHRlcm4gcGlkX3Qga2VybmVsX3RocmVhZChpbnQgKCpmbikodm9pZCAqKSwgdm9pZCAqIGFyZywgdW5zaWduZWQgbG9uZyBmbGFncyk7CisKKy8qIFByZXBhcmUgdG8gY29weSB0aHJlYWQgc3RhdGUgLSB1bmxhenkgYWxsIGxhenkgc3RhdHVzICovCisjZGVmaW5lIHByZXBhcmVfdG9fY29weSh0c2spCWRvIHsgfSB3aGlsZSAoMCkKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZ2V0X3djaGFuKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKKworI2RlZmluZSBLU1RLX0VJUCh0c2spICAoKHRzayktPnRocmVhZC5rcmVncy0+cGMpCisjZGVmaW5lIEtTVEtfRVNQKHRzaykgICgodHNrKS0+dGhyZWFkLmtyZWdzLT51X3JlZ3NbVVJFR19GUF0pCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKK2V4dGVybiBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmxhc3RfdGFza191c2VkX21hdGg7CisKKyNkZWZpbmUgY3B1X3JlbGF4KCkJYmFycmllcigpCisKKyNlbmRpZgorCisjZW5kaWYgLyogX19BU01fU1BBUkNfUFJPQ0VTU09SX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3Bzci5oIGIvaW5jbHVkZS9hc20tc3BhcmMvcHNyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc3OGI4YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3Bzci5oCkBAIC0wLDAgKzEsOTIgQEAKKy8qICRJZDogcHNyLmgsdiAxLjE1IDE5OTcvMTAvMDQgMDg6NTQ6MjIgZWNkIEV4cCAkCisgKiBwc3IuaDogVGhpcyBmaWxlIGhvbGRzIHRoZSBtYWNyb3MgZm9yIG1hc2tpbmcgb2ZmIHZhcmlvdXMgcGFydHMgb2YKKyAqICAgICAgICB0aGUgcHJvY2Vzc29yIHN0YXR1cyByZWdpc3RlciBvbiB0aGUgU3BhcmMuIFRoaXMgaXMgdmFsaWQKKyAqICAgICAgICBmb3IgVmVyc2lvbiA4LiBPbiB0aGUgVjkgdGhpcyBpcyByZW5hbWVkIHRvIHRoZSBQU1RBVEUKKyAqICAgICAgICByZWdpc3RlciBhbmQgaXRzIG1lbWJlcnMgYXJlIGFjY2Vzc2VkIGFzIGZpZWxkcyBsaWtlCisgKiAgICAgICAgUFNUQVRFLlBSSVYgZm9yIHRoZSBjdXJyZW50IENQVSBwcml2aWxlZ2UgbGV2ZWwuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk0IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKKyAqLworCisjaWZuZGVmIF9fTElOVVhfU1BBUkNfUFNSX0gKKyNkZWZpbmUgX19MSU5VWF9TUEFSQ19QU1JfSAorCisvKiBUaGUgU3BhcmMgUFNSIGZpZWxkcyBhcmUgbGFpZCBvdXQgYXMgdGhlIGZvbGxvd2luZzoKKyAqCisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgfCBpbXBsICB8IHZlcnMgIHwgaWNjICAgfCByZXN2ICB8IEVDIHwgRUYgfCBQSUwgIHwgUyB8IFBTIHwgRVQgfCAgQ1dQICB8CisgKiAgfCAzMS0yOCB8IDI3LTI0IHwgMjMtMjAgfCAxOS0xNCB8IDEzIHwgMTIgfCAxMS04IHwgNyB8IDYgIHwgNSAgfCAgNC0wICB8CisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNkZWZpbmUgUFNSX0NXUCAgICAgMHgwMDAwMDAxZiAgICAgICAgIC8qIGN1cnJlbnQgd2luZG93IHBvaW50ZXIgICAgICovCisjZGVmaW5lIFBTUl9FVCAgICAgIDB4MDAwMDAwMjAgICAgICAgICAvKiBlbmFibGUgdHJhcHMgZmllbGQgICAgICAgICAqLworI2RlZmluZSBQU1JfUFMgICAgICAweDAwMDAwMDQwICAgICAgICAgLyogcHJldmlvdXMgcHJpdmlsZWdlIGxldmVsICAgKi8KKyNkZWZpbmUgUFNSX1MgICAgICAgMHgwMDAwMDA4MCAgICAgICAgIC8qIGN1cnJlbnQgcHJpdmlsZWdlIGxldmVsICAgICovCisjZGVmaW5lIFBTUl9QSUwgICAgIDB4MDAwMDBmMDAgICAgICAgICAvKiBwcm9jZXNzb3IgaW50ZXJydXB0IGxldmVsICAqLworI2RlZmluZSBQU1JfRUYgICAgICAweDAwMDAxMDAwICAgICAgICAgLyogZW5hYmxlIGZsb2F0aW5nIHBvaW50ICAgICAgKi8KKyNkZWZpbmUgUFNSX0VDICAgICAgMHgwMDAwMjAwMCAgICAgICAgIC8qIGVuYWJsZSBjby1wcm9jZXNzb3IgICAgICAgICovCisjZGVmaW5lIFBTUl9MRSAgICAgIDB4MDAwMDgwMDAgICAgICAgICAvKiBTdXBlclNwYXJjSUkgbGl0dGxlLWVuZGlhbiAqLworI2RlZmluZSBQU1JfSUNDICAgICAweDAwZjAwMDAwICAgICAgICAgLyogaW50ZWdlciBjb25kaXRpb24gY29kZXMgICAgKi8KKyNkZWZpbmUgUFNSX0MgICAgICAgMHgwMDEwMDAwMCAgICAgICAgIC8qIGNhcnJ5IGJpdCAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBTUl9WICAgICAgIDB4MDAyMDAwMDAgICAgICAgICAvKiBvdmVyZmxvdyBiaXQgICAgICAgICAgICAgICAqLworI2RlZmluZSBQU1JfWiAgICAgICAweDAwNDAwMDAwICAgICAgICAgLyogemVybyBiaXQgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUFNSX04gICAgICAgMHgwMDgwMDAwMCAgICAgICAgIC8qIG5lZ2F0aXZlIGJpdCAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBTUl9WRVJTICAgIDB4MGYwMDAwMDAgICAgICAgICAvKiBjcHUtdmVyc2lvbiBmaWVsZCAgICAgICAgICAqLworI2RlZmluZSBQU1JfSU1QTCAgICAweGYwMDAwMDAwICAgICAgICAgLyogY3B1LWltcGxlbWVudGF0aW9uIGZpZWxkICAgKi8KKworI2lmZGVmIF9fS0VSTkVMX18KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKy8qIEdldCB0aGUgJXBzciByZWdpc3Rlci4gKi8KK2V4dGVybiBfX2lubGluZV9fIHVuc2lnbmVkIGludCBnZXRfcHNyKHZvaWQpCit7CisJdW5zaWduZWQgaW50IHBzcjsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJInJkCSUlcHNyLCAlMFxuXHQiCisJCSJub3Bcblx0IgorCQkibm9wXG5cdCIKKwkJIm5vcFxuXHQiCisJOiAiPXIiIChwc3IpCisJOiAvKiBubyBpbnB1dHMgKi8KKwk6ICJtZW1vcnkiKTsKKworCXJldHVybiBwc3I7Cit9CisKK2V4dGVybiBfX2lubGluZV9fIHZvaWQgcHV0X3Bzcih1bnNpZ25lZCBpbnQgbmV3X3BzcikKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJIndyCSUwLCAweDAsICUlcHNyXG5cdCIKKwkJIm5vcFxuXHQiCisJCSJub3Bcblx0IgorCQkibm9wXG5cdCIKKwk6IC8qIG5vIG91dHB1dHMgKi8KKwk6ICJyIiAobmV3X3BzcikKKwk6ICJtZW1vcnkiLCAiY2MiKTsKK30KKworLyogR2V0IHRoZSAlZnNyIHJlZ2lzdGVyLiAgQmUgY2FyZWZ1bCwgbWFrZSBzdXJlIHRoZSBmbG9hdGluZyBwb2ludAorICogZW5hYmxlIGJpdCBpcyBzZXQgaW4gdGhlICVwc3Igd2hlbiB5b3UgZXhlY3V0ZSB0aGlzIG9yIHlvdSB3aWxsCisgKiBpbmN1ciBhIHRyYXAuCisgKi8KKworZXh0ZXJuIHVuc2lnbmVkIGludCBmc3Jfc3RvcmFnZTsKKworZXh0ZXJuIF9faW5saW5lX18gdW5zaWduZWQgaW50IGdldF9mc3Iodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgZnNyID0gMDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkic3QJJSVmc3IsICUxXG5cdCIKKwkJImxkCSUxLCAlMFxuXHQiCisJOiAiPXIiIChmc3IpCisJOiAibSIgKGZzcl9zdG9yYWdlKSk7CisKKwlyZXR1cm4gZnNyOworfQorCisjZW5kaWYgLyogIShfX0FTU0VNQkxZX18pICovCisKKyNlbmRpZiAvKiAoX19LRVJORUxfXykgKi8KKworI2VuZGlmIC8qICEoX19MSU5VWF9TUEFSQ19QU1JfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3B0cmFjZS5oIGIvaW5jbHVkZS9hc20tc3BhcmMvcHRyYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ5ZDk0ZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3B0cmFjZS5oCkBAIC0wLDAgKzEsMTY3IEBACisvKiAkSWQ6IHB0cmFjZS5oLHYgMS4yNSAxOTk3LzAzLzA0IDE2OjI3OjI1IGpqIEV4cCAkICovCisjaWZuZGVmIF9TUEFSQ19QVFJBQ0VfSAorI2RlZmluZSBfU1BBUkNfUFRSQUNFX0gKKworI2luY2x1ZGUgPGFzbS9wc3IuaD4KKworLyogVGhpcyBzdHJ1Y3QgZGVmaW5lcyB0aGUgd2F5IHRoZSByZWdpc3RlcnMgYXJlIHN0b3JlZCBvbiB0aGUgCisgKiBzdGFjayBkdXJpbmcgYSBzeXN0ZW0gY2FsbCBhbmQgYmFzaWNhbGx5IGFsbCB0cmFwcy4KKyAqLworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCitzdHJ1Y3QgcHRfcmVncyB7CisJdW5zaWduZWQgbG9uZyBwc3I7CisJdW5zaWduZWQgbG9uZyBwYzsKKwl1bnNpZ25lZCBsb25nIG5wYzsKKwl1bnNpZ25lZCBsb25nIHk7CisJdW5zaWduZWQgbG9uZyB1X3JlZ3NbMTZdOyAvKiBnbG9iYWxzIGFuZCBpbnMgKi8KK307CisKKyNkZWZpbmUgVVJFR19HMCAgICAgICAgMAorI2RlZmluZSBVUkVHX0cxICAgICAgICAxCisjZGVmaW5lIFVSRUdfRzIgICAgICAgIDIKKyNkZWZpbmUgVVJFR19HMyAgICAgICAgMworI2RlZmluZSBVUkVHX0c0ICAgICAgICA0CisjZGVmaW5lIFVSRUdfRzUgICAgICAgIDUKKyNkZWZpbmUgVVJFR19HNiAgICAgICAgNgorI2RlZmluZSBVUkVHX0c3ICAgICAgICA3CisjZGVmaW5lIFVSRUdfSTAgICAgICAgIDgKKyNkZWZpbmUgVVJFR19JMSAgICAgICAgOQorI2RlZmluZSBVUkVHX0kyICAgICAgICAxMAorI2RlZmluZSBVUkVHX0kzICAgICAgICAxMQorI2RlZmluZSBVUkVHX0k0ICAgICAgICAxMgorI2RlZmluZSBVUkVHX0k1ICAgICAgICAxMworI2RlZmluZSBVUkVHX0k2ICAgICAgICAxNAorI2RlZmluZSBVUkVHX0k3ICAgICAgICAxNQorI2RlZmluZSBVUkVHX1dJTSAgICAgICBVUkVHX0cwCisjZGVmaW5lIFVSRUdfRkFERFIgICAgIFVSRUdfRzAKKyNkZWZpbmUgVVJFR19GUCAgICAgICAgVVJFR19JNgorI2RlZmluZSBVUkVHX1JFVFBDICAgICBVUkVHX0k3CisKKy8qIEEgcmVnaXN0ZXIgd2luZG93ICovCitzdHJ1Y3QgcmVnX3dpbmRvdyB7CisJdW5zaWduZWQgbG9uZyBsb2NhbHNbOF07CisJdW5zaWduZWQgbG9uZyBpbnNbOF07Cit9OworCisvKiBBIFNwYXJjIHN0YWNrIGZyYW1lICovCitzdHJ1Y3Qgc3BhcmNfc3RhY2tmIHsKKwl1bnNpZ25lZCBsb25nIGxvY2Fsc1s4XTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBpbnNbNl07CisJc3RydWN0IHNwYXJjX3N0YWNrZiAqZnA7CisJdW5zaWduZWQgbG9uZyBjYWxsZXJzX3BjOworCWNoYXIgKnN0cnVjdHB0cjsKKwl1bnNpZ25lZCBsb25nIHhhcmdzWzZdOworCXVuc2lnbmVkIGxvbmcgeHhhcmdzWzFdOworfTsJCisKKyNkZWZpbmUgVFJBQ0VSRUdfU1ogICBzaXplb2Yoc3RydWN0IHB0X3JlZ3MpCisjZGVmaW5lIFNUQUNLRlJBTUVfU1ogc2l6ZW9mKHN0cnVjdCBzcGFyY19zdGFja2YpCisKKyNpZmRlZiBfX0tFUk5FTF9fCisjZGVmaW5lIHVzZXJfbW9kZShyZWdzKSAoISgocmVncyktPnBzciAmIFBTUl9QUykpCisjZGVmaW5lIGluc3RydWN0aW9uX3BvaW50ZXIocmVncykgKChyZWdzKS0+cGMpCit1bnNpZ25lZCBsb25nIHByb2ZpbGVfcGMoc3RydWN0IHB0X3JlZ3MgKik7CitleHRlcm4gdm9pZCBzaG93X3JlZ3Moc3RydWN0IHB0X3JlZ3MgKik7CisjZW5kaWYKKworI2Vsc2UgLyogX19BU1NFTUJMWV9fICovCisvKiBGb3IgYXNzZW1ibHkgY29kZS4gKi8KKyNkZWZpbmUgVFJBQ0VSRUdfU1ogICAgICAgMHg1MAorI2RlZmluZSBTVEFDS0ZSQU1FX1NaICAgICAweDYwCisjZW5kaWYKKworLyoKKyAqIFRoZSBhc21fb2Zmc2V0cy5oIGlzIGEgZ2VuZXJhdGVkIGZpbGUsIHNvIHdlIGNhbm5vdCBpbmNsdWRlIGl0LgorICogSXQgbWF5IGJlIE9LIGZvciBnbGliYyBoZWFkZXJzLCBidXQgaXQncyB1dHRlcmx5IHBvaW50bGVzcyBmb3IgQyBjb2RlLgorICogVGhlIGFzc2VtYmx5IGNvZGUgdXNpbmcgdGhvc2Ugb2Zmc2V0cyBoYXMgdG8gaW5jbHVkZSBpdCBleHBsaWNpdGx5LgorICovCisvKiAjaW5jbHVkZSA8YXNtL2FzbV9vZmZzZXRzLmg+ICovCisKKy8qIFRoZXNlIGFyZSBmb3IgcHRfcmVncy4gKi8KKyNkZWZpbmUgUFRfUFNSICAgIDB4MAorI2RlZmluZSBQVF9QQyAgICAgMHg0CisjZGVmaW5lIFBUX05QQyAgICAweDgKKyNkZWZpbmUgUFRfWSAgICAgIDB4YworI2RlZmluZSBQVF9HMCAgICAgMHgxMAorI2RlZmluZSBQVF9XSU0gICAgUFRfRzAKKyNkZWZpbmUgUFRfRzEgICAgIDB4MTQKKyNkZWZpbmUgUFRfRzIgICAgIDB4MTgKKyNkZWZpbmUgUFRfRzMgICAgIDB4MWMKKyNkZWZpbmUgUFRfRzQgICAgIDB4MjAKKyNkZWZpbmUgUFRfRzUgICAgIDB4MjQKKyNkZWZpbmUgUFRfRzYgICAgIDB4MjgKKyNkZWZpbmUgUFRfRzcgICAgIDB4MmMKKyNkZWZpbmUgUFRfSTAgICAgIDB4MzAKKyNkZWZpbmUgUFRfSTEgICAgIDB4MzQKKyNkZWZpbmUgUFRfSTIgICAgIDB4MzgKKyNkZWZpbmUgUFRfSTMgICAgIDB4M2MKKyNkZWZpbmUgUFRfSTQgICAgIDB4NDAKKyNkZWZpbmUgUFRfSTUgICAgIDB4NDQKKyNkZWZpbmUgUFRfSTYgICAgIDB4NDgKKyNkZWZpbmUgUFRfRlAgICAgIFBUX0k2CisjZGVmaW5lIFBUX0k3ICAgICAweDRjCisKKy8qIFJlZ193aW5kb3cgb2Zmc2V0cyAqLworI2RlZmluZSBSV19MMCAgICAgMHgwMAorI2RlZmluZSBSV19MMSAgICAgMHgwNAorI2RlZmluZSBSV19MMiAgICAgMHgwOAorI2RlZmluZSBSV19MMyAgICAgMHgwYworI2RlZmluZSBSV19MNCAgICAgMHgxMAorI2RlZmluZSBSV19MNSAgICAgMHgxNAorI2RlZmluZSBSV19MNiAgICAgMHgxOAorI2RlZmluZSBSV19MNyAgICAgMHgxYworI2RlZmluZSBSV19JMCAgICAgMHgyMAorI2RlZmluZSBSV19JMSAgICAgMHgyNAorI2RlZmluZSBSV19JMiAgICAgMHgyOAorI2RlZmluZSBSV19JMyAgICAgMHgyYworI2RlZmluZSBSV19JNCAgICAgMHgzMAorI2RlZmluZSBSV19JNSAgICAgMHgzNAorI2RlZmluZSBSV19JNiAgICAgMHgzOAorI2RlZmluZSBSV19JNyAgICAgMHgzYworCisvKiBTdGFja19mcmFtZSBvZmZzZXRzICovCisjZGVmaW5lIFNGX0wwICAgICAweDAwCisjZGVmaW5lIFNGX0wxICAgICAweDA0CisjZGVmaW5lIFNGX0wyICAgICAweDA4CisjZGVmaW5lIFNGX0wzICAgICAweDBjCisjZGVmaW5lIFNGX0w0ICAgICAweDEwCisjZGVmaW5lIFNGX0w1ICAgICAweDE0CisjZGVmaW5lIFNGX0w2ICAgICAweDE4CisjZGVmaW5lIFNGX0w3ICAgICAweDFjCisjZGVmaW5lIFNGX0kwICAgICAweDIwCisjZGVmaW5lIFNGX0kxICAgICAweDI0CisjZGVmaW5lIFNGX0kyICAgICAweDI4CisjZGVmaW5lIFNGX0kzICAgICAweDJjCisjZGVmaW5lIFNGX0k0ICAgICAweDMwCisjZGVmaW5lIFNGX0k1ICAgICAweDM0CisjZGVmaW5lIFNGX0ZQICAgICAweDM4CisjZGVmaW5lIFNGX1BDICAgICAweDNjCisjZGVmaW5lIFNGX1JFVFAgICAweDQwCisjZGVmaW5lIFNGX1hBUkcwICAweDQ0CisjZGVmaW5lIFNGX1hBUkcxICAweDQ4CisjZGVmaW5lIFNGX1hBUkcyICAweDRjCisjZGVmaW5lIFNGX1hBUkczICAweDUwCisjZGVmaW5lIFNGX1hBUkc0ICAweDU0CisjZGVmaW5lIFNGX1hBUkc1ICAweDU4CisjZGVmaW5lIFNGX1hYQVJHICAweDVjCisKKy8qIFN0dWZmIGZvciB0aGUgcHRyYWNlIHN5c3RlbSBjYWxsICovCisjZGVmaW5lIFBUUkFDRV9TVU5BVFRBQ0gJICAxMAorI2RlZmluZSBQVFJBQ0VfU1VOREVUQUNICSAgMTEKKyNkZWZpbmUgUFRSQUNFX0dFVFJFR1MgICAgICAgICAgICAxMgorI2RlZmluZSBQVFJBQ0VfU0VUUkVHUyAgICAgICAgICAgIDEzCisjZGVmaW5lIFBUUkFDRV9HRVRGUFJFR1MgICAgICAgICAgMTQKKyNkZWZpbmUgUFRSQUNFX1NFVEZQUkVHUyAgICAgICAgICAxNQorI2RlZmluZSBQVFJBQ0VfUkVBRERBVEEgICAgICAgICAgIDE2CisjZGVmaW5lIFBUUkFDRV9XUklURURBVEEgICAgICAgICAgMTcKKyNkZWZpbmUgUFRSQUNFX1JFQURURVhUICAgICAgICAgICAxOAorI2RlZmluZSBQVFJBQ0VfV1JJVEVURVhUICAgICAgICAgIDE5CisjZGVmaW5lIFBUUkFDRV9HRVRGUEFSRUdTICAgICAgICAgMjAKKyNkZWZpbmUgUFRSQUNFX1NFVEZQQVJFR1MgICAgICAgICAyMQorCisjZGVmaW5lIFBUUkFDRV9HRVRVQ09ERSAgICAgICAgICAgMjkgIC8qIHN0dXBpZCBic2QtaXNtICovCisKKworI2VuZGlmIC8qICEoX1NQQVJDX1BUUkFDRV9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvcmVnLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9yZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDYwZWJlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvcmVnLmgKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIGxpbnV4L2FzbS1zcGFyYy9yZWcuaAorICogTGF5b3V0IG9mIHRoZSByZWdpc3RlcnMgYXMgZXhwZWN0ZWQgYnkgZ2RiIG9uIHRoZSBTcGFyYworICogd2Ugc2hvdWxkIHJlcGxhY2UgdGhlIHVzZXIuaCBkZWZpbml0aW9ucyB3aXRoIHRob3NlIGluCisgKiB0aGlzIGZpbGUsIHdlIGRvbid0IGV2ZW4gdXNlIHRoZSBvdGhlciAKKyAqIC1taWd1ZWwKKyAqCisgKiBUaGUgbmFtZXMgb2YgdGhlIHN0cnVjdHVyZXMsIGNvbnN0YW50cyBhbmQgYWxpYXNlcyBpbiB0aGlzIGZpbGUKKyAqIGhhdmUgdGhlIHNhbWUgbmFtZXMgYXMgdGhlIHN1bm9zIG9uZXMsIHNvbWUgcHJvZ3JhbXMgcmVseSBvbiB0aGVzZQorICogbmFtZXMgKGdkYiBmb3IgZXhhbXBsZSkuCisgKgorICovCisKKyNpZm5kZWYgX19TUEFSQ19SRUdfSAorI2RlZmluZSBfX1NQQVJDX1JFR19ICisKK3N0cnVjdCByZWdzIHsKKwlpbnQgICAgIHJfcHNyOworI2RlZmluZSByX3BzIHJfcHNyCisgICAgICAgIGludCAgICAgcl9wYzsgCisgICAgICAgIGludCAgICAgcl9ucGM7CisgICAgICAgIGludCAgICAgcl95OyAgCisgICAgICAgIGludCAgICAgcl9nMTsgCisgICAgICAgIGludCAgICAgcl9nMjsKKyAgICAgICAgaW50ICAgICByX2czOworICAgICAgICBpbnQgICAgIHJfZzQ7CisgICAgICAgIGludCAgICAgcl9nNTsKKyAgICAgICAgaW50ICAgICByX2c2OworICAgICAgICBpbnQgICAgIHJfZzc7CisgICAgICAgIGludCAgICAgcl9vMDsKKyAgICAgICAgaW50ICAgICByX28xOworICAgICAgICBpbnQgICAgIHJfbzI7CisgICAgICAgIGludCAgICAgcl9vMzsKKyAgICAgICAgaW50ICAgICByX280OworICAgICAgICBpbnQgICAgIHJfbzU7CisgICAgICAgIGludCAgICAgcl9vNjsKKyAgICAgICAgaW50ICAgICByX283OworfTsKKworc3RydWN0IGZwcSB7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgKmFkZHI7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgaW5zdHI7Cit9OworCitzdHJ1Y3QgIGZxIHsKKyAgICAgICAgdW5pb24geworICAgICAgICAgICAgICAgIGRvdWJsZSAgd2hvbGU7CisgICAgICAgICAgICAgICAgc3RydWN0ICBmcHEgZnBxOworICAgICAgICB9IEZRdTsKK307CisKKyNkZWZpbmUgRlBVX1JFR1NfVFlQRSB1bnNpZ25lZCBpbnQKKyNkZWZpbmUgRlBVX0ZTUl9UWVBFIHVuc2lnbmVkCisKK3N0cnVjdCBmcF9zdGF0dXMgeworICAgICAgICB1bmlvbiB7CisgICAgICAgICAgICAgICAgRlBVX1JFR1NfVFlQRSBGcHVfcmVnc1szMl07CisgICAgICAgICAgICAgICAgZG91YmxlICBGcHVfZHJlZ3NbMTZdOworICAgICAgICB9IGZwdV9mcjsKKyAgICAgICAgRlBVX0ZTUl9UWVBFIEZwdV9mc3I7CisgICAgICAgIHVuc2lnbmVkIEZwdV9mbGFnczsKKyAgICAgICAgdW5zaWduZWQgRnB1X2V4dHJhOworICAgICAgICB1bnNpZ25lZCBGcHVfcWNudDsKKyAgICAgICAgc3RydWN0IGZxIEZwdV9xWzE2XTsKK307CisKKyNkZWZpbmUgZnB1X3JlZ3MgIGZfZnBzdGF0dXMuZnB1X2ZyLkZwdV9yZWdzCisjZGVmaW5lIGZwdV9kcmVncyBmX2Zwc3RhdHVzLmZwdV9mci5GcHVfZHJlZ3MKKyNkZWZpbmUgZnB1X2ZzciAgIGZfZnBzdGF0dXMuRnB1X2ZzcgorI2RlZmluZSBmcHVfZmxhZ3MgZl9mcHN0YXR1cy5GcHVfZmxhZ3MKKyNkZWZpbmUgZnB1X2V4dHJhIGZfZnBzdGF0dXMuRnB1X2V4dHJhCisjZGVmaW5lIGZwdV9xICAgICBmX2Zwc3RhdHVzLkZwdV9xCisjZGVmaW5lIGZwdV9xY250ICBmX2Zwc3RhdHVzLkZwdV9xY250CisKK3N0cnVjdCBmcHUgeworICAgICAgICBzdHJ1Y3QgZnBfc3RhdHVzIGZfZnBzdGF0dXM7Cit9OworCisjZW5kaWYgLyogX19TUEFSQ19SRUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvcmVzb3VyY2UuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3Jlc291cmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDUxNGMzMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3Jlc291cmNlLmgKQEAgLTAsMCArMSwyNiBAQAorLyogJElkOiByZXNvdXJjZS5oLHYgMS4xMiAyMDAwLzA5LzIzIDAyOjA5OjIxIGRhdmVtIEV4cCAkCisgKiByZXNvdXJjZS5oOiBSZXNvdXJjZSBkZWZpbml0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQorICovCisKKyNpZm5kZWYgX1NQQVJDX1JFU09VUkNFX0gKKyNkZWZpbmUgX1NQQVJDX1JFU09VUkNFX0gKKworLyoKKyAqIFRoZXNlIHR3byByZXNvdXJjZSBsaW1pdCBJRHMgaGF2ZSBhIFNwYXJjL0xpbnV4LXNwZWNpZmljIG9yZGVyaW5nLAorICogdGhlIHJlc3QgY29tZXMgZnJvbSB0aGUgZ2VuZXJpYyBoZWFkZXI6CisgKi8KKyNkZWZpbmUgUkxJTUlUX05PRklMRQkJNgkvKiBtYXggbnVtYmVyIG9mIG9wZW4gZmlsZXMgKi8KKyNkZWZpbmUgUkxJTUlUX05QUk9DCQk3CS8qIG1heCBudW1iZXIgb2YgcHJvY2Vzc2VzICovCisKKy8qCisgKiBTdVMgc2F5cyBsaW1pdHMgaGF2ZSB0byBiZSB1bnNpZ25lZC4KKyAqIFdlIG1ha2UgdGhpcyB1bnNpZ25lZCwgYnV0IGtlZXAgdGhlCisgKiBvbGQgdmFsdWUgZm9yIGNvbXBhdGliaWxpdHk6CisgKi8KKyNkZWZpbmUgUkxJTV9JTkZJTklUWQkJMHg3ZmZmZmZmZgorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcmVzb3VyY2UuaD4KKworI2VuZGlmIC8qICEoX1NQQVJDX1JFU09VUkNFX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9yb3NzLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9yb3NzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJjMTRiNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3Jvc3MuaApAQCAtMCwwICsxLDE5MSBAQAorLyogJElkOiByb3NzLmgsdiAxLjEzIDE5OTgvMDEvMDcgMDY6NDk6MTEgYmFjY2FsYSBFeHAgJAorICogcm9zcy5oOiBSb3NzIG1vZHVsZSBzcGVjaWZpYyBkZWZpbml0aW9ucyBhbmQgZGVmaW5lcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQorICovCisKKyNpZm5kZWYgX1NQQVJDX1JPU1NfSAorI2RlZmluZSBfU1BBUkNfUk9TU19ICisKKyNpbmNsdWRlIDxhc20vYXNpLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKworLyogUm9zcyBtYWRlIEh5cGVyc3BhcmNzIGhhdmUgYSAlcHNyICdpbXBsJyBmaWVsZCBvZiAnMDAwMScuICBUaGUgJ3ZlcnMnCisgKiBmaWVsZCBoYXMgJzExMTEnLgorICovCisKKy8qIFRoZSBNTVUgY29udHJvbCByZWdpc3RlciBmaWVsZHMgb24gdGhlIEh5cGVyU3BhcmMuCisgKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHxpbXBsdmVyc3wgUlNWIHxDV1J8U0V8V0JFfCBNSUQgfEJNfCBDfENTfE1SfENNfFJTVnxDRXxSU1Z8TkZ8TUV8CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIDMxICAgIDI0IDIzLTIyIDIxICAyMCAgMTkgMTgtMTUgMTQgMTMgMTIgMTEgMTAgIDkgICA4IDctMiAgMSAgMAorICoKKyAqIFBoZXcsIGxvdHMgb2YgZmllbGRzIHRoZXJlIDstKQorICoKKyAqIENXUjogQ2FjaGUgV3JhcHBpbmcgRW5hYmxlZCwgaWYgb25lIGNhY2hlIHdyYXBwaW5nIGlzIG9uLgorICogU0U6IFNub29wIEVuYWJsZSwgdHVybnMgb24gYnVzIHNub29waW5nIGZvciBjYWNoZSBhY3Rpdml0eSBpZiBvbmUuCisgKiBXQkU6IFdyaXRlIEJ1ZmZlciBFbmFibGUsIG9uZSB0dXJucyBpdCBvbi4KKyAqIE1JRDogVGhlIE1vZHVsZUlEIG9mIHRoZSBjaGlwIGZvciBNQnVzIHRyYW5zYWN0aW9ucy4KKyAqIEJNOiBCb290LU1vZGUuIE9uZSBpbmRpY2F0ZXMgdGhlIE1NVSBpcyBpbiBib290IG1vZGUuCisgKiBDOiBJbmRpY2F0ZXMgd2hldGhlciBhY2Nlc3NlcyBhcmUgY2FjaGFibGUgd2hpbGUgdGhlIE1NVSBpcworICogICAgZGlzYWJsZWQuCisgKiBDUzogQ2FjaGUgU2l6ZSAtLSAwID0gMTI4aywgMSA9IDI1NmsKKyAqIE1SOiBNZW1vcnkgUmVmbGVjdGlvbiwgb25lIGluZGljYXRlcyB0aGF0IHRoZSBtZW1vcnkgYnVzIGNvbm5lY3RlZAorICogICAgIHRvIHRoZSBNQnVzIHN1cHBvcnRzIG1lbW9yeSByZWZsZWN0aW9uLgorICogQ006IENhY2hlIE1vZGUgLS0gMCA9IHdyaXRlLXRocm91Z2gsIDEgPSBjb3B5LWJhY2sKKyAqIENFOiBDYWNoZSBFbmFibGUgLS0gMCA9IG5vIGNhY2hpbmcsIDEgPSBjYWNoZSBpcyBvbgorICogTkY6IE5vIEZhdWx0IC0tIDAgPSBmYXVsdHMgdHJhcCB0aGUgQ1BVIGZyb20gc3VwZXJ2aXNvciBtb2RlCisgKiAgICAgICAgICAgICAgICAgMSA9IGZhdWx0cyBmcm9tIHN1cGVydmlzb3IgbW9kZSBkbyBub3QgZ2VuZXJhdGUgdHJhcHMKKyAqIE1FOiBNTVUgRW5hYmxlIC0tIDAgPSBNTVUgaXMgb2ZmLCAxID0gTU1VIGlzIG9uCisgKi8KKworI2RlZmluZSBIWVBFUlNQQVJDX0NXRU5BQkxFICAgMHgwMDIwMDAwMAorI2RlZmluZSBIWVBFUlNQQVJDX1NCRU5BQkxFICAgMHgwMDEwMDAwMAorI2RlZmluZSBIWVBFUlNQQVJDX1dCRU5BQkxFICAgMHgwMDA4MDAwMAorI2RlZmluZSBIWVBFUlNQQVJDX01JRE1BU0sgICAgMHgwMDA3ODAwMAorI2RlZmluZSBIWVBFUlNQQVJDX0JNT0RFICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBIWVBFUlNQQVJDX0FDRU5BQkxFICAgMHgwMDAwMjAwMAorI2RlZmluZSBIWVBFUlNQQVJDX0NTSVpFICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBIWVBFUlNQQVJDX01SRkxDVCAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBIWVBFUlNQQVJDX0NNT0RFICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBIWVBFUlNQQVJDX0NFTkFCTEUgICAgMHgwMDAwMDEwMAorI2RlZmluZSBIWVBFUlNQQVJDX05GQVVMVCAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBIWVBFUlNQQVJDX01FTkFCTEUgICAgMHgwMDAwMDAwMQorCisKKy8qIFRoZSBJQ0NSIGluc3RydWN0aW9uIGNhY2hlIHJlZ2lzdGVyIG9uIHRoZSBIeXBlclNwYXJjLgorICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBGVEQgfCBJQ0UgfAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAzMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAgICAwCisgKgorICogVGhpcyByZWdpc3RlciBpcyBhY2Nlc3NlZCB1c2luZyB0aGUgVjggJ3dyYXNyJyBhbmQgJ3JkYXNyJworICogb3Bjb2Rlcywgc2luY2Ugbm90IGFsbCBhc3NlbWJsZXJzIHVuZGVyc3RhbmQgdGhlbSBhbmQgdGhvc2UKKyAqIHRoYXQgZG8gdXNlIGRpZmZlcmVudCBzZW1hbnRpY3MgSSB3aWxsIGp1c3QgaGFyZCBjb2RlIHRoZQorICogaW5zdHJ1Y3Rpb24gd2l0aCBhICcud29yZCcgc3RhdGVtZW50LgorICoKKyAqIEZURDogIElmIHNldCB0byBvbmUgZmx1c2ggaW5zdHJ1Y3Rpb25zIGV4ZWN1dGVkIGR1cmluZyBhbgorICogICAgICAgaW5zdHJ1Y3Rpb24gY2FjaGUgaGl0IG9jY3VycywgdGhlIGNvcnJlc3BvbmRpbmcgbGluZQorICogICAgICAgZm9yIHNhaWQgY2FjaGUtaGl0IGlzIGludmFsaWRhdGVkLiAgSWYgRlREIGlzIHplcm8sCisgKiAgICAgICBhbiB1bmltcGxlbWVudGVkICdmbHVzaCcgdHJhcCB3aWxsIG9jY3VyIHdoZW4gYW55CisgKiAgICAgICBmbHVzaCBpcyBleGVjdXRlZCBieSB0aGUgcHJvY2Vzc29yLgorICoKKyAqIElDRTogIElmIHNldCB0byBvbmUsIHRoZSBpbnN0cnVjdGlvbiBjYWNoZSBpcyBlbmFibGVkLiAgSWYKKyAqICAgICAgIHplcm8sIHRoZSBjYWNoZSB3aWxsIG5vdCBiZSB1c2VkIGZvciBpbnN0cnVjdGlvbiBmZXRjaGVzLgorICoKKyAqIEFsbCBvdGhlciBiaXRzIGFyZSByZWFkIGFzIHplcm9zLCBhbmQgd3JpdGVzIHRvIHRoZW0gaGF2ZSBubworICogZWZmZWN0LgorICoKKyAqIFdoZWVlLCBub3QgbWFueSBhc3NlbWJsZXJzIHVuZGVyc3RhbmQgdGhlICVpY2NyIHJlZ2lzdGVyIG5vcgorICogdGhlIGdlbmVyaWMgYXNyIHIvdyBpbnN0cnVjdGlvbnMuCisgKgorICogIDEwMDAgMDAxMSAwMTAwIDAxMTEgMTEwMCAwMDAwIDAwMDAgMDAwMCAgICEgcmQgJWljY3IsICVnMQorICoKKyAqIDB4ICA4ICAgIDMgICAgNCAgICA3ICAgIGMgICAgMCAgICAwICAgIDAgICAhIDB4ODM0N2MwMDAKKyAqCisgKiAgMTAxMSAxMTExIDEwMDAgMDAwMCAwMTEwIDAwMDAgMDAwMCAwMDAwICAgISB3ciAlZzEsIDB4MCwgJWljY3IKKyAqCisgKiAweCAgYiAgICBmICAgIDggICAgMCAgICA2ICAgIDAgICAgMCAgICAwICAgISAweGJmODA2MDAwCisgKgorICovCisKKyNkZWZpbmUgSFlQRVJTUEFSQ19JQ0NSX0ZURCAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBIWVBFUlNQQVJDX0lDQ1JfSUNFICAgICAweDAwMDAwMDAxCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldF9yb3NzX2ljcih2b2lkKQoreworCXVuc2lnbmVkIGludCBpY3JlZzsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKCIud29yZCAweDgzNDdjMDAwXG5cdCIgLyogcmQgJWljY3IsICVnMSAqLworCQkJICAgICAibW92ICUlZzEsICUwXG5cdCIKKwkJCSAgICAgOiAiPXIiIChpY3JlZykKKwkJCSAgICAgOiAvKiBubyBpbnB1dHMgKi8KKwkJCSAgICAgOiAiZzEiLCAibWVtb3J5Iik7CisKKwlyZXR1cm4gaWNyZWc7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdXRfcm9zc19pY3IodW5zaWduZWQgaW50IGljcmVnKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKCJvciAlJWcwLCAlMCwgJSVnMVxuXHQiCisJCQkgICAgICIud29yZCAweGJmODA2MDAwXG5cdCIgLyogd3IgJWcxLCAweDAsICVpY2NyICovCisJCQkgICAgICJub3Bcblx0IgorCQkJICAgICAibm9wXG5cdCIKKwkJCSAgICAgIm5vcFxuXHQiCisJCQkgICAgIDogLyogbm8gb3V0cHV0cyAqLworCQkJICAgICA6ICJyIiAoaWNyZWcpCisJCQkgICAgIDogImcxIiwgIm1lbW9yeSIpOworCisJcmV0dXJuOworfQorCisvKiBIeXBlclNwYXJjIHNwZWNpZmljIGNhY2hlIGZsdXNoaW5nLiAqLworCisvKiBUaGlzIGlzIGZvciB0aGUgb24tY2hpcCBpbnN0cnVjdGlvbiBjYWNoZS4gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBoeXBlcl9mbHVzaF93aG9sZV9pY2FjaGUodm9pZCkKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RhICUlZzAsIFslJWcwXSAlMFxuXHQiCisJCQkgICAgIDogLyogbm8gb3V0cHV0cyAqLworCQkJICAgICA6ICJpIiAoQVNJX01fRkxVU0hfSVdIT0xFKQorCQkJICAgICA6ICJtZW1vcnkiKTsKKwlyZXR1cm47Cit9CisKK2V4dGVybiBpbnQgdmFjX2NhY2hlX3NpemU7CitleHRlcm4gaW50IHZhY19saW5lX3NpemU7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBoeXBlcl9jbGVhcl9hbGxfdGFncyh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKworCWZvcihhZGRyID0gMDsgYWRkciA8IHZhY19jYWNoZV9zaXplOyBhZGRyICs9IHZhY19saW5lX3NpemUpCisJCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdGEgJSVnMCwgWyUwXSAlMVxuXHQiCisJCQkJICAgICA6IC8qIG5vIG91dHB1dHMgKi8KKwkJCQkgICAgIDogInIiIChhZGRyKSwgImkiIChBU0lfTV9EQVRBQ19UQUcpCisJCQkJICAgICA6ICJtZW1vcnkiKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGh5cGVyX2ZsdXNoX3VuY29uZGl0aW9uYWxfY29tYmluZWQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisKKwlmb3IgKGFkZHIgPSAwOyBhZGRyIDwgdmFjX2NhY2hlX3NpemU7IGFkZHIgKz0gdmFjX2xpbmVfc2l6ZSkKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0YSAlJWcwLCBbJTBdICUxXG5cdCIKKwkJCQkgICAgIDogLyogbm8gb3V0cHV0cyAqLworCQkJCSAgICAgOiAiciIgKGFkZHIpLCAiaSIgKEFTSV9NX0ZMVVNIX0NUWCkKKwkJCQkgICAgIDogIm1lbW9yeSIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaHlwZXJfZmx1c2hfY2FjaGVfdXNlcih2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKworCWZvciAoYWRkciA9IDA7IGFkZHIgPCB2YWNfY2FjaGVfc2l6ZTsgYWRkciArPSB2YWNfbGluZV9zaXplKQorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RhICUlZzAsIFslMF0gJTFcblx0IgorCQkJCSAgICAgOiAvKiBubyBvdXRwdXRzICovCisJCQkJICAgICA6ICJyIiAoYWRkciksICJpIiAoQVNJX01fRkxVU0hfVVNFUikKKwkJCQkgICAgIDogIm1lbW9yeSIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaHlwZXJfZmx1c2hfY2FjaGVfcGFnZSh1bnNpZ25lZCBsb25nIHBhZ2UpCit7CisJdW5zaWduZWQgbG9uZyBlbmQ7CisKKwlwYWdlICY9IFBBR0VfTUFTSzsKKwllbmQgPSBwYWdlICsgUEFHRV9TSVpFOworCXdoaWxlIChwYWdlIDwgZW5kKSB7CisJCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdGEgJSVnMCwgWyUwXSAlMVxuXHQiCisJCQkJICAgICA6IC8qIG5vIG91dHB1dHMgKi8KKwkJCQkgICAgIDogInIiIChwYWdlKSwgImkiIChBU0lfTV9GTFVTSF9QQUdFKQorCQkJCSAgICAgOiAibWVtb3J5Iik7CisJCXBhZ2UgKz0gdmFjX2xpbmVfc2l6ZTsKKwl9Cit9CisKKyNlbmRpZiAvKiAhKF9fQVNTRU1CTFlfXykgKi8KKworI2VuZGlmIC8qICEoX1NQQVJDX1JPU1NfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3J0Yy5oIGIvaW5jbHVkZS9hc20tc3BhcmMvcnRjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRmMjYxZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3J0Yy5oCkBAIC0wLDAgKzEsMjcgQEAKKy8qICRJZDogcnRjLmgsdiAxLjIgMTk5Ni8wOC8yMSAyMzoxNzozOSBlY2QgRXhwICQKKyAqCisgKiBydGMuaDogRGVmaW5pdGlvbnMgZm9yIGFjY2VzcyB0byB0aGUgTW9zdGVrIHJlYWwgdGltZSBjbG9jaworICoKKyAqIENvcHlyaWdodCAoQykgMTk5NiBUaG9tYXMgSy4gRHlhcyAodGR5YXNAZWRlbi5ydXRnZXJzLmVkdSkKKyAqLworCisjaWZuZGVmIF9SVENfSAorI2RlZmluZSBfUlRDX0gKKworI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisKK3N0cnVjdCBydGNfdGltZQoreworCWludAlzZWM7CS8qIFNlY29uZHMgKDAtNTkpICovCisJaW50CW1pbjsJLyogTWludXRlcyAoMC01OSkgKi8KKwlpbnQJaG91cjsJLyogSG91ciAoMC0yMykgKi8KKwlpbnQJZG93OwkvKiBEYXkgb2YgdGhlIHdlZWsgKDEtNykgKi8KKwlpbnQJZG9tOwkvKiBEYXkgb2YgdGhlIG1vbnRoICgxLTMxKSAqLworCWludAltb250aDsJLyogTW9udGggb2YgeWVhciAoMS0xMikgKi8KKwlpbnQJeWVhcjsJLyogWWVhciAoMC05OSkgKi8KK307CisKKyNkZWZpbmUgUlRDR0VUIF9JT1IoJ3AnLCAyMCwgc3RydWN0IHJ0Y190aW1lKQorI2RlZmluZSBSVENTRVQgX0lPVygncCcsIDIxLCBzdHJ1Y3QgcnRjX3RpbWUpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvc2JpLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9zYmkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzljY2FjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvc2JpLmgKQEAgLTAsMCArMSwxMTUgQEAKKy8qICRJZDogc2JpLmgsdiAxLjIgMTk5OC8wMy8wOSAxNDowNDo0OCBqaiBFeHAgJAorICogc2JpLmg6ICBTQkkgKFNidXMgSW50ZXJmYWNlIG9uIHN1bjRkKSBkZWZpbml0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMTk5NyBKYWt1YiBKZWxpbmVrIDxqakBzdW5zaXRlLm1mZi5jdW5pLmN6PgorICovCisKKyNpZm5kZWYgX1NQQVJDX1NCSV9ICisjZGVmaW5lIF9TUEFSQ19TQklfSAorCisjaW5jbHVkZSA8YXNtL29iaW8uaD4KKworLyogU0JJICovCitzdHJ1Y3Qgc2JpX3JlZ3MgeworLyogMHgwMDAwICovCXUzMgkJY2lkOwkJLyogQ29tcG9uZW50IElEICovCisvKiAweDAwMDQgKi8JdTMyCQljdGw7CQkvKiBDb250cm9sICovCisvKiAweDAwMDggKi8JdTMyCQlzdGF0dXM7CQkvKiBTdGF0dXMgKi8KKwkJdTMyCQlfdW51c2VkMTsKKwkJCisvKiAweDAwMTAgKi8JdTMyCQljZmcwOwkJLyogU2xvdDAgY29uZmlnIHJlZyAqLworLyogMHgwMDE0ICovCXUzMgkJY2ZnMTsJCS8qIFNsb3QxIGNvbmZpZyByZWcgKi8KKy8qIDB4MDAxOCAqLwl1MzIJCWNmZzI7CQkvKiBTbG90MiBjb25maWcgcmVnICovCisvKiAweDAwMWMgKi8JdTMyCQljZmczOwkJLyogU2xvdDMgY29uZmlnIHJlZyAqLworCisvKiAweDAwMjAgKi8JdTMyCQlzdGIwOwkJLyogU3RyZWFtaW5nIGJ1ZiBjb250cm9sIGZvciBzbG90IDAgKi8KKy8qIDB4MDAyNCAqLwl1MzIJCXN0YjE7CQkvKiBTdHJlYW1pbmcgYnVmIGNvbnRyb2wgZm9yIHNsb3QgMSAqLworLyogMHgwMDI4ICovCXUzMgkJc3RiMjsJCS8qIFN0cmVhbWluZyBidWYgY29udHJvbCBmb3Igc2xvdCAyICovCisvKiAweDAwMmMgKi8JdTMyCQlzdGIzOwkJLyogU3RyZWFtaW5nIGJ1ZiBjb250cm9sIGZvciBzbG90IDMgKi8KKworLyogMHgwMDMwICovCXUzMgkJaW50cl9zdGF0ZTsJLyogSW50ZXJydXB0IHN0YXRlICovCisvKiAweDAwMzQgKi8JdTMyCQlpbnRyX3RpZDsJLyogSW50ZXJydXB0IHRhcmdldCBJRCAqLworLyogMHgwMDM4ICovCXUzMgkJaW50cl9kaWFnOwkvKiBJbnRlcnJ1cHQgZGlhZ25vc3RpY3MgKi8KK307CisKKyNkZWZpbmUgU0JJX0NJRAkJCTB4MDI4MDAwMDAKKyNkZWZpbmUgU0JJX0NUTAkJCTB4MDI4MDAwMDQKKyNkZWZpbmUgU0JJX1NUQVRVUwkJMHgwMjgwMDAwOAorI2RlZmluZSBTQklfQ0ZHMAkJMHgwMjgwMDAxMAorI2RlZmluZSBTQklfQ0ZHMQkJMHgwMjgwMDAxNAorI2RlZmluZSBTQklfQ0ZHMgkJMHgwMjgwMDAxOAorI2RlZmluZSBTQklfQ0ZHMwkJMHgwMjgwMDAxYworI2RlZmluZSBTQklfU1RCMAkJMHgwMjgwMDAyMAorI2RlZmluZSBTQklfU1RCMQkJMHgwMjgwMDAyNAorI2RlZmluZSBTQklfU1RCMgkJMHgwMjgwMDAyOAorI2RlZmluZSBTQklfU1RCMwkJMHgwMjgwMDAyYworI2RlZmluZSBTQklfSU5UUl9TVEFURQkJMHgwMjgwMDAzMAorI2RlZmluZSBTQklfSU5UUl9USUQJCTB4MDI4MDAwMzQKKyNkZWZpbmUgU0JJX0lOVFJfRElBRwkJMHgwMjgwMDAzOAorCisvKiBCdXJzdCBiaXRzIGZvciA4LCAxNiwgMzIsIDY0IGFyZSBpbiBjZmdYIHJlZ2lzdGVycyBhdCBiaXRzIDIsIDMsIDQsIDUgcmVzcGVjdGl2ZWx5ICovCisjZGVmaW5lIFNCSV9DRkdfQlVSU1RfTUFTSwkweDAwMDAwMDFlCisKKy8qIEhvdyB0byBtYWtlIGRldmlkIGZyb20gc2JpIG5vICovCisjZGVmaW5lIFNCSTJERVZJRChzYmlubykgKChzYmlubzw8NCl8MikKKworLyogaW50cl9zdGF0ZSBoYXMgNCBiaXRzIGZvciBzbG90cyAwIC4uIDMgYW5kIHRoZXNlIGJpdHMgYXJlIHJlcGVhdGVkIGZvciBlYWNoIHNidXMgaXJxIGxldmVsCisgKgorICoJCSAgICstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rCisgKiAgU0JVUyBJUlEgTEVWRUwgfCAgIDcgICB8ICAgNiAgIHwgICA1ICAgfCAgIDQgICB8ICAgMyAgIHwgICAyICAgfCAgIDEgICB8ICAgICAgIHwKKyAqCQkgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsgUmVzZXIgfAorICogIFNMT1QgIyAgICAgICAgIHwzfDJ8MXwwfDN8MnwxfDB8M3wyfDF8MHwzfDJ8MXwwfDN8MnwxfDB8M3wyfDF8MHwzfDJ8MXwwfCAgdmVkICB8CisgKiAgICAgICAgICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLS0tLS0tLSsKKyAqICBCaXRzICAgICAgICAgICAzMSAgICAgIDI3ICAgICAgMjMgICAgICAxOSAgICAgIDE1ICAgICAgMTEgICAgICA3ICAgICAgIDMgICAgICAwCisgKi8KKworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCitleHRlcm4gX19pbmxpbmVfXyBpbnQgYWNxdWlyZV9zYmkoaW50IGRldmlkLCBpbnQgbWFzaykKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN3YXBhIFslMl0gJTMsICUwIiA6CisJCQkgICAgICAiPXIiIChtYXNrKSA6CisJCQkgICAgICAiMCIgKG1hc2spLAorCQkJICAgICAgInIiIChFQ1NSX0RFVl9CQVNFKGRldmlkKSB8IFNCSV9JTlRSX1NUQVRFKSwKKwkJCSAgICAgICJpIiAoQVNJX01fQ1RMKSk7CisJcmV0dXJuIG1hc2s7Cit9CisKK2V4dGVybiBfX2lubGluZV9fIHZvaWQgcmVsZWFzZV9zYmkoaW50IGRldmlkLCBpbnQgbWFzaykKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN0YSAlMCwgWyUxXSAlMiIgOiA6CisJCQkgICAgICAiciIgKG1hc2spLAorCQkJICAgICAgInIiIChFQ1NSX0RFVl9CQVNFKGRldmlkKSB8IFNCSV9JTlRSX1NUQVRFKSwKKwkJCSAgICAgICJpIiAoQVNJX01fQ1RMKSk7Cit9CisKK2V4dGVybiBfX2lubGluZV9fIHZvaWQgc2V0X3NiaV90aWQoaW50IGRldmlkLCBpbnQgdGFyZ2V0aWQpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzdGEgJTAsIFslMV0gJTIiIDogOgorCQkJICAgICAgInIiICh0YXJnZXRpZCksCisJCQkgICAgICAiciIgKEVDU1JfREVWX0JBU0UoZGV2aWQpIHwgU0JJX0lOVFJfVElEKSwKKwkJCSAgICAgICJpIiAoQVNJX01fQ1RMKSk7Cit9CisKK2V4dGVybiBfX2lubGluZV9fIGludCBnZXRfc2JpX2N0bChpbnQgZGV2aWQsIGludCBjZmdubykKK3sKKwlpbnQgY2ZnOworCQorCV9fYXNtX18gX192b2xhdGlsZV9fICgibGRhIFslMV0gJTIsICUwIiA6CisJCQkgICAgICAiPXIiIChjZmcpIDoKKwkJCSAgICAgICJyIiAoKEVDU1JfREVWX0JBU0UoZGV2aWQpIHwgU0JJX0NGRzApICsgKGNmZ25vPDwyKSksCisJCQkgICAgICAiaSIgKEFTSV9NX0NUTCkpOworCXJldHVybiBjZmc7Cit9CisKK2V4dGVybiBfX2lubGluZV9fIHZvaWQgc2V0X3NiaV9jdGwoaW50IGRldmlkLCBpbnQgY2Znbm8sIGludCBjZmcpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzdGEgJTAsIFslMV0gJTIiIDogOgorCQkJICAgICAgInIiIChjZmcpLAorCQkJICAgICAgInIiICgoRUNTUl9ERVZfQkFTRShkZXZpZCkgfCBTQklfQ0ZHMCkgKyAoY2Znbm88PDIpKSwKKwkJCSAgICAgICJpIiAoQVNJX01fQ1RMKSk7Cit9CisKKyNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiAhKF9TUEFSQ19TQklfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3NidXMuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3NidXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYThiMzkwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvc2J1cy5oCkBAIC0wLDAgKzEsMTQyIEBACisvKiAkSWQ6IHNidXMuaCx2IDEuMjIgMjAwMC8wMi8xOCAxMzo1MDo1MCBkYXZlbSBFeHAgJAorICogc2J1cy5oOiAgRGVmaW5lcyBmb3IgdGhlIFN1biBTQnVzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NSBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCisgKi8KKworI2lmbmRlZiBfU1BBUkNfU0JVU19ICisjZGVmaW5lIF9TUEFSQ19TQlVTX0gKKworI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisKKyNpbmNsdWRlIDxhc20vb3BsaWIuaD4KKy8qICNpbmNsdWRlIDxhc20vaW9tbXUuaD4gKi8gLyogVW51c2VkIHNpbmNlIHdlIHVzZSBvcGFxdWUgaW9tbXUgKHxpby11bml0KSAqLworI2luY2x1ZGUgPGFzbS9zY2F0dGVybGlzdC5oPgorCisvKiBXZSBzY2FuIHdoaWNoIGRldmljZXMgYXJlIG9uIHRoZSBTQnVzIHVzaW5nIHRoZSBQUk9NIG5vZGUgZGV2aWNlCisgKiB0cmVlLiAgU0J1cyBkZXZpY2VzIGFyZSBkZXNjcmliZWQgaW4gdHdvIGRpZmZlcmVudCB3YXlzLiAgWW91IGNhbgorICogZWl0aGVyIGdldCBhbiBhYnNvbHV0ZSBhZGRyZXNzIGF0IHdoaWNoIHRvIGFjY2VzcyB0aGUgZGV2aWNlLCBvcgorICogeW91IGNhbiBnZXQgYSBTQnVzICdzbG90JyBudW1iZXIgYW5kIGFuIG9mZnNldCB3aXRoaW4gdGhhdCBzbG90LgorICovCisKKy8qIFRoZSBiYXNlIGFkZHJlc3MgYXQgd2hpY2ggdG8gY2FsY3VsYXRlIGRldmljZSBPQklPIGFkZHJlc3Nlcy4gKi8KKyNkZWZpbmUgU1VOX1NCVVNfQlZBRERSICAgICAgICAweGY4MDAwMDAwCisjZGVmaW5lIFNCVVNfT0ZGX01BU0sgICAgICAgICAgMHgwMWZmZmZmZgorCisvKiBUaGVzZSByb3V0aW5lcyBhcmUgdXNlZCB0byBjYWxjdWxhdGUgZGV2aWNlIGFkZHJlc3MgZnJvbSBzbG90CisgKiBudW1iZXJzICsgb2Zmc2V0cywgYW5kIHZpY2UgdmVyc2EuCisgKi8KKworZXh0ZXJuIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBzYnVzX2RldmFkZHIoaW50IHNsb3RudW0sIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQoreworICByZXR1cm4gKHVuc2lnbmVkIGxvbmcpIChTVU5fU0JVU19CVkFERFIrKChzbG90bnVtKTw8MjUpKyhvZmZzZXQpKTsKK30KKworZXh0ZXJuIF9faW5saW5lX18gaW50IHNidXNfZGV2X3Nsb3QodW5zaWduZWQgbG9uZyBkZXZfYWRkcikKK3sKKyAgcmV0dXJuIChpbnQpICgoKGRldl9hZGRyKS1TVU5fU0JVU19CVkFERFIpPj4yNSk7Cit9CisKK3N0cnVjdCBzYnVzX2J1czsKKworLyogTGludXggU0JVUyBkZXZpY2UgdGFibGVzICovCitzdHJ1Y3Qgc2J1c19kZXYgeworCXN0cnVjdCBzYnVzX2J1cwkqYnVzOyAgICAgICAvKiBCYWNrIHB0ciB0byBzYnVzICovCisJc3RydWN0IHNidXNfZGV2CSpuZXh0OyAgICAgIC8qIG5leHQgZGV2aWNlIG9uIHRoaXMgU0J1cyBvciBudWxsICovCisJc3RydWN0IHNidXNfZGV2CSpjaGlsZDsgICAgIC8qIEZvciBsZWRtYSBhbmQgZXNwZG1hIG9uIHN1bjRtICovCisJc3RydWN0IHNidXNfZGV2CSpwYXJlbnQ7ICAgIC8qIFBhcmVudCBkZXZpY2UgaWYgbm90IHRvcGxldmVsICovCisJaW50IHByb21fbm9kZTsgICAgICAgICAgICAgIC8qIFBST00gZGV2aWNlIHRyZWUgbm9kZSBmb3IgdGhpcyBkZXZpY2UgKi8KKwljaGFyIHByb21fbmFtZVs2NF07ICAgICAgICAgLyogUFJPTSBkZXZpY2UgbmFtZSAqLworCWludCBzbG90OworCisJc3RydWN0IHJlc291cmNlIHJlc291cmNlW1BST01SRUdfTUFYXTsKKworCXN0cnVjdCBsaW51eF9wcm9tX3JlZ2lzdGVycyByZWdfYWRkcnNbUFJPTVJFR19NQVhdOworCWludCBudW1fcmVnaXN0ZXJzLCByYW5nZXNfYXBwbGllZDsKKworCXN0cnVjdCBsaW51eF9wcm9tX3JhbmdlcyBkZXZpY2VfcmFuZ2VzW1BST01SRUdfTUFYXTsKKwlpbnQgbnVtX2RldmljZV9yYW5nZXM7CisKKwl1bnNpZ25lZCBpbnQgaXJxc1s0XTsKKwlpbnQgbnVtX2lycXM7Cit9OworCisvKiBUaGlzIHN0cnVjdCBkZXNjcmliZXMgdGhlIFNCdXMocykgZm91bmQgb24gdGhpcyBtYWNoaW5lLiAqLworc3RydWN0IHNidXNfYnVzIHsKKwl2b2lkCQkJKmlvbW11OwkJLyogT3BhcXVlIElPTU1VIGNvb2tpZSAqLworCXN0cnVjdCBzYnVzX2RldgkJKmRldmljZXM7CS8qIExpbmsgdG8gZGV2aWNlcyBvbiB0aGlzIFNCdXMgKi8KKwlzdHJ1Y3Qgc2J1c19idXMJCSpuZXh0OwkJLyogbmV4dCBTQnVzLCBpZiBtb3JlIHRoYW4gb25lIFNCdXMgKi8KKwlpbnQJCQlwcm9tX25vZGU7CS8qIFBST00gZGV2aWNlIHRyZWUgbm9kZSBmb3IgdGhpcyBTQnVzICovCisJY2hhcgkJCXByb21fbmFtZVs2NF07ICAvKiBVc3VhbGx5ICJzYnVzIiBvciAic2JpIiAqLworCWludAkJCWNsb2NrX2ZyZXE7CisKKwlzdHJ1Y3QgbGludXhfcHJvbV9yYW5nZXMgc2J1c19yYW5nZXNbUFJPTVJFR19NQVhdOworCWludCBudW1fc2J1c19yYW5nZXM7CisKKwlpbnQgZGV2aWQ7CisJaW50IGJvYXJkOworfTsKKworZXh0ZXJuIHN0cnVjdCBzYnVzX2J1cyAqc2J1c19yb290OworCitleHRlcm4gX19pbmxpbmVfXyBpbnQKK3NidXNfaXNfc2xhdmUoc3RydWN0IHNidXNfZGV2ICpkZXYpCit7CisJLyogWFhYIEhhdmUgdG8gd3JpdGUgdGhpcyBmb3Igc3VuNGMncyAqLworCXJldHVybiAwOworfQorCisvKiBEZXZpY2UgcHJvYmluZyByb3V0aW5lcyBjb3VsZCBmaW5kIHRoZXNlIGhhbmR5ICovCisjZGVmaW5lIGZvcl9lYWNoX3NidXMoYnVzKSBcCisgICAgICAgIGZvcigoYnVzKSA9IHNidXNfcm9vdDsgKGJ1cyk7IChidXMpPShidXMpLT5uZXh0KQorCisjZGVmaW5lIGZvcl9lYWNoX3NidXNkZXYoZGV2aWNlLCBidXMpIFwKKyAgICAgICAgZm9yKChkZXZpY2UpID0gKGJ1cyktPmRldmljZXM7IChkZXZpY2UpOyAoZGV2aWNlKT0oZGV2aWNlKS0+bmV4dCkKKyAgICAgICAgCisjZGVmaW5lIGZvcl9hbGxfc2J1c2RldihkZXZpY2UsIGJ1cykgXAorCWZvciAoKGJ1cykgPSBzYnVzX3Jvb3Q7IChidXMpOyAoYnVzKSA9IChidXMpLT5uZXh0KSBcCisJCWZvciAoKGRldmljZSkgPSAoYnVzKS0+ZGV2aWNlczsgKGRldmljZSk7IChkZXZpY2UpID0gKGRldmljZSktPm5leHQpCisKKy8qIERyaXZlciBEVk1BIGludGVyZmFjZXMuICovCisjZGVmaW5lIHNidXNfY2FuX2RtYV82NGJpdChzZGV2KQkoMCkgLyogYWN0dWFsbHksIHNwYXJjX2NwdV9tb2RlbD09c3VuNGQgKi8KKyNkZWZpbmUgc2J1c19jYW5fYnVyc3Q2NChzZGV2KQkJKDApIC8qIGFjdHVhbGx5LCBzcGFyY19jcHVfbW9kZWw9PXN1bjRkICovCitleHRlcm4gdm9pZCBzYnVzX3NldF9zYnVzNjQoc3RydWN0IHNidXNfZGV2ICosIGludCk7CisKKy8qIFRoZXNlIHlpZWxkIElPTU1VIG1hcHBpbmdzIGluIGNvbnNpc3RlbnQgbW9kZS4gKi8KK2V4dGVybiB2b2lkICpzYnVzX2FsbG9jX2NvbnNpc3RlbnQoc3RydWN0IHNidXNfZGV2ICosIGxvbmcsIHUzMiAqZG1hX2FkZHJwKTsKK2V4dGVybiB2b2lkIHNidXNfZnJlZV9jb25zaXN0ZW50KHN0cnVjdCBzYnVzX2RldiAqLCBsb25nLCB2b2lkICosIHUzMik7Cit2b2lkIHByb21fYWRqdXN0X3JhbmdlcyhzdHJ1Y3QgbGludXhfcHJvbV9yYW5nZXMgKiwgaW50LAorCQkJc3RydWN0IGxpbnV4X3Byb21fcmFuZ2VzICosIGludCk7CisKKyNkZWZpbmUgU0JVU19ETUFfQklESVJFQ1RJT05BTAlETUFfQklESVJFQ1RJT05BTAorI2RlZmluZSBTQlVTX0RNQV9UT0RFVklDRQlETUFfVE9fREVWSUNFCisjZGVmaW5lIFNCVVNfRE1BX0ZST01ERVZJQ0UJRE1BX0ZST01fREVWSUNFCisjZGVmaW5lCVNCVVNfRE1BX05PTkUJCURNQV9OT05FCisKKy8qIEFsbCB0aGUgcmVzdCB1c2Ugc3RyZWFtaW5nIG1vZGUgbWFwcGluZ3MuICovCitleHRlcm4gZG1hX2FkZHJfdCBzYnVzX21hcF9zaW5nbGUoc3RydWN0IHNidXNfZGV2ICosIHZvaWQgKiwgc2l6ZV90LCBpbnQpOworZXh0ZXJuIHZvaWQgc2J1c191bm1hcF9zaW5nbGUoc3RydWN0IHNidXNfZGV2ICosIGRtYV9hZGRyX3QsIHNpemVfdCwgaW50KTsKK2V4dGVybiBpbnQgc2J1c19tYXBfc2coc3RydWN0IHNidXNfZGV2ICosIHN0cnVjdCBzY2F0dGVybGlzdCAqLCBpbnQsIGludCk7CitleHRlcm4gdm9pZCBzYnVzX3VubWFwX3NnKHN0cnVjdCBzYnVzX2RldiAqLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKiwgaW50LCBpbnQpOworCisvKiBGaW5hbGx5LCBhbGxvdyBleHBsaWNpdCBzeW5jaHJvbml6YXRpb24gb2Ygc3RyZWFtYWJsZSBtYXBwaW5ncy4gKi8KK2V4dGVybiB2b2lkIHNidXNfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoc3RydWN0IHNidXNfZGV2ICosIGRtYV9hZGRyX3QsIHNpemVfdCwgaW50KTsKKyNkZWZpbmUgc2J1c19kbWFfc3luY19zaW5nbGUgc2J1c19kbWFfc3luY19zaW5nbGVfZm9yX2NwdQorZXh0ZXJuIHZvaWQgc2J1c19kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShzdHJ1Y3Qgc2J1c19kZXYgKiwgZG1hX2FkZHJfdCwgc2l6ZV90LCBpbnQpOworZXh0ZXJuIHZvaWQgc2J1c19kbWFfc3luY19zZ19mb3JfY3B1KHN0cnVjdCBzYnVzX2RldiAqLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKiwgaW50LCBpbnQpOworI2RlZmluZSBzYnVzX2RtYV9zeW5jX3NnIHNidXNfZG1hX3N5bmNfc2dfZm9yX2NwdQorZXh0ZXJuIHZvaWQgc2J1c19kbWFfc3luY19zZ19mb3JfZGV2aWNlKHN0cnVjdCBzYnVzX2RldiAqLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKiwgaW50LCBpbnQpOworCisvKiBFcmljIEJyb3dlciAoZWJyb3dlckB1c2EubmV0KQorICogVHJhbnNsYXRlIFNCdXMgaW50ZXJydXB0IGxldmVscyB0byBpbm8gdmFsdWVzLS0KKyAqIHRoaXMgaXMgdXNlZCB3aGVuIGNvbnZlcnRpbmcgc2J1cyAiaW50ZXJydXB0cyIgT0JQIAorICogbm9kZSB2YWx1ZXMgdG8gImludHIiIG5vZGUgdmFsdWVzLCBhbmQgaXMgcGxhdGZvcm0gCisgKiBkZXBlbmRlbnQuICBJZiBvbmx5IHdlIGNvdWxkIGNhbGwgT0JQIHdpdGggCisgKiAic2J1cy1pbnRyPmNwdSAoc2JpbnQgLS0gaW5vKSIgZnJvbSBrZXJuZWwuLi4KKyAqIFNlZSAuLi4vZHJpdmVycy9zYnVzL3NidXMuYyBmb3IgZGV0YWlscy4KKyAqLworQlRGSVhVUERFRl9DQUxMKHVuc2lnbmVkIGludCwgc2JpbnRfdG9faXJxLCBzdHJ1Y3Qgc2J1c19kZXYgKnNkZXYsIHVuc2lnbmVkIGludCkKKyNkZWZpbmUgc2JpbnRfdG9faXJxKHNkZXYsIHNiaW50KSBCVEZJWFVQX0NBTEwoc2JpbnRfdG9faXJxKShzZGV2LCBzYmludCkKKworI2VuZGlmIC8qICEoX1NQQVJDX1NCVVNfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3NjYXR0ZXJsaXN0LmggYi9pbmNsdWRlL2FzbS1zcGFyYy9zY2F0dGVybGlzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0ZmNmOWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9zY2F0dGVybGlzdC5oCkBAIC0wLDAgKzEsMjIgQEAKKy8qICRJZDogc2NhdHRlcmxpc3QuaCx2IDEuOCAyMDAxLzEyLzE3IDA3OjA1OjE1IGRhdmVtIEV4cCAkICovCisjaWZuZGVmIF9TUEFSQ19TQ0FUVEVSTElTVF9ICisjZGVmaW5lIF9TUEFSQ19TQ0FUVEVSTElTVF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3Qgc2NhdHRlcmxpc3QgeworCXN0cnVjdCBwYWdlICpwYWdlOworCXVuc2lnbmVkIGludCBvZmZzZXQ7CisKKwl1bnNpZ25lZCBpbnQgbGVuZ3RoOworCisJX191MzIgZHZtYV9hZGRyZXNzOyAvKiBBIHBsYWNlIHRvIGhhbmcgaG9zdC1zcGVjaWZpYyBhZGRyZXNzZXMgYXQuICovCisJX191MzIgZHZtYV9sZW5ndGg7Cit9OworCisjZGVmaW5lIHNnX2RtYV9hZGRyZXNzKHNnKSAoKHNnKS0+ZHZtYV9hZGRyZXNzKQorI2RlZmluZSBzZ19kbWFfbGVuKHNnKSAgICAgKChzZyktPmR2bWFfbGVuZ3RoKQorCisjZGVmaW5lIElTQV9ETUFfVEhSRVNIT0xEICh+MFVMKQorCisjZW5kaWYgLyogIShfU1BBUkNfU0NBVFRFUkxJU1RfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3NlY3Rpb25zLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9zZWN0aW9ucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4MzI4NDEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9zZWN0aW9ucy5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfU1BBUkNfU0VDVElPTlNfSAorI2RlZmluZSBfU1BBUkNfU0VDVElPTlNfSAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2VjdGlvbnMuaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9zZWdtZW50LmggYi9pbmNsdWRlL2FzbS1zcGFyYy9zZWdtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFiN2ZmYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3NlZ21lbnQuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19TUEFSQ19TRUdNRU5UX0gKKyNkZWZpbmUgX19TUEFSQ19TRUdNRU5UX0gKKworLyogT25seSBoZXJlIGJlY2F1c2Ugd2UgaGF2ZSBzb21lIG9sZCBoZWFkZXIgZmlsZXMgdGhhdCBleHBlY3QgaXQuLiAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3NlbWFwaG9yZS5oIGIvaW5jbHVkZS9hc20tc3BhcmMvc2VtYXBob3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBhYzVmZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3NlbWFwaG9yZS5oCkBAIC0wLDAgKzEsMTk2IEBACisjaWZuZGVmIF9TUEFSQ19TRU1BUEhPUkVfSAorI2RlZmluZSBfU1BBUkNfU0VNQVBIT1JFX0gKKworLyogRGlua3ksIGdvb2QgZm9yIG5vdGhpbmcsIGp1c3QgYmFyZWx5IGlycSBzYWZlLCBTcGFyYyBzZW1hcGhvcmVzLiAqLworCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgorCitzdHJ1Y3Qgc2VtYXBob3JlIHsKKwlhdG9taWMyNF90IGNvdW50OworCWludCBzbGVlcGVyczsKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OworfTsKKworI2RlZmluZSBfX1NFTUFQSE9SRV9JTklUSUFMSVpFUihuYW1lLCBuKQkJCQlcCit7CQkJCQkJCQkJXAorCS5jb3VudAkJPSBBVE9NSUMyNF9JTklUKG4pLAkJCQlcCisJLnNsZWVwZXJzCT0gMCwJCQkJCQlcCisJLndhaXQJCT0gX19XQUlUX1FVRVVFX0hFQURfSU5JVElBTElaRVIoKG5hbWUpLndhaXQpCVwKK30KKworI2RlZmluZSBfX01VVEVYX0lOSVRJQUxJWkVSKG5hbWUpIFwKKwlfX1NFTUFQSE9SRV9JTklUSUFMSVpFUihuYW1lLDEpCisKKyNkZWZpbmUgX19ERUNMQVJFX1NFTUFQSE9SRV9HRU5FUklDKG5hbWUsY291bnQpIFwKKwlzdHJ1Y3Qgc2VtYXBob3JlIG5hbWUgPSBfX1NFTUFQSE9SRV9JTklUSUFMSVpFUihuYW1lLGNvdW50KQorCisjZGVmaW5lIERFQ0xBUkVfTVVURVgobmFtZSkgX19ERUNMQVJFX1NFTUFQSE9SRV9HRU5FUklDKG5hbWUsMSkKKyNkZWZpbmUgREVDTEFSRV9NVVRFWF9MT0NLRUQobmFtZSkgX19ERUNMQVJFX1NFTUFQSE9SRV9HRU5FUklDKG5hbWUsMCkKKworc3RhdGljIGlubGluZSB2b2lkIHNlbWFfaW5pdCAoc3RydWN0IHNlbWFwaG9yZSAqc2VtLCBpbnQgdmFsKQoreworCWF0b21pYzI0X3NldCgmc2VtLT5jb3VudCwgdmFsKTsKKwlzZW0tPnNsZWVwZXJzID0gMDsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzZW0tPndhaXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9NVVRFWCAoc3RydWN0IHNlbWFwaG9yZSAqc2VtKQoreworCXNlbWFfaW5pdChzZW0sIDEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9NVVRFWF9MT0NLRUQgKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKK3sKKwlzZW1hX2luaXQoc2VtLCAwKTsKK30KKworZXh0ZXJuIHZvaWQgX19kb3duKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pOworZXh0ZXJuIGludCBfX2Rvd25faW50ZXJydXB0aWJsZShzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKTsKK2V4dGVybiBpbnQgX19kb3duX3RyeWxvY2soc3RydWN0IHNlbWFwaG9yZSAqIHNlbSk7CitleHRlcm4gdm9pZCBfX3VwKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pOworCitzdGF0aWMgaW5saW5lIHZvaWQgZG93bihzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQoreworCXJlZ2lzdGVyIHZvbGF0aWxlIGludCAqcHRyIGFzbSgiZzEiKTsKKwlyZWdpc3RlciBpbnQgaW5jcmVtZW50IGFzbSgiZzIiKTsKKworCW1pZ2h0X3NsZWVwKCk7CisKKwlwdHIgPSAmKHNlbS0+Y291bnQuY291bnRlcik7CisJaW5jcmVtZW50ID0gMTsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCSJtb3YJJSVvNywgJSVnNFxuXHQiCisJImNhbGwJX19fYXRvbWljMjRfc3ViXG5cdCIKKwkiIGFkZAklJW83LCA4LCAlJW83XG5cdCIKKwkidHN0CSUlZzJcblx0IgorCSJibAkyZlxuXHQiCisJIiBub3BcbiIKKwkiMTpcblx0IgorCSIuc3Vic2VjdGlvbiAyXG4iCisJIjI6XG5cdCIKKwkic2F2ZQklJXNwLCAtNjQsICUlc3Bcblx0IgorCSJtb3YJJSVnMSwgJSVsMVxuXHQiCisJIm1vdgklJWc1LCAlJWw1XG5cdCIKKwkiY2FsbAklM1xuXHQiCisJIiBtb3YJJSVnMSwgJSVvMFxuXHQiCisJIm1vdgklJWwxLCAlJWcxXG5cdCIKKwkiYmEJMWJcblx0IgorCSIgcmVzdG9yZSAlJWw1LCAlJWcwLCAlJWc1XG5cdCIKKwkiLnByZXZpb3VzXG4iCisJOiAiPSZyIiAoaW5jcmVtZW50KQorCTogIjAiIChpbmNyZW1lbnQpLCAiciIgKHB0ciksICJpIiAoX19kb3duKQorCTogImczIiwgImc0IiwgImc3IiwgIm1lbW9yeSIsICJjYyIpOworfQorCitzdGF0aWMgaW5saW5lIGludCBkb3duX2ludGVycnVwdGlibGUoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKK3sKKwlyZWdpc3RlciB2b2xhdGlsZSBpbnQgKnB0ciBhc20oImcxIik7CisJcmVnaXN0ZXIgaW50IGluY3JlbWVudCBhc20oImcyIik7CisKKwltaWdodF9zbGVlcCgpOworCisJcHRyID0gJihzZW0tPmNvdW50LmNvdW50ZXIpOworCWluY3JlbWVudCA9IDE7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkibW92CSUlbzcsICUlZzRcblx0IgorCSJjYWxsCV9fX2F0b21pYzI0X3N1YlxuXHQiCisJIiBhZGQJJSVvNywgOCwgJSVvN1xuXHQiCisJInRzdAklJWcyXG5cdCIKKwkiYmwJMmZcblx0IgorCSIgY2xyCSUlZzJcbiIKKwkiMTpcblx0IgorCSIuc3Vic2VjdGlvbiAyXG4iCisJIjI6XG5cdCIKKwkic2F2ZQklJXNwLCAtNjQsICUlc3Bcblx0IgorCSJtb3YJJSVnMSwgJSVsMVxuXHQiCisJIm1vdgklJWc1LCAlJWw1XG5cdCIKKwkiY2FsbAklM1xuXHQiCisJIiBtb3YJJSVnMSwgJSVvMFxuXHQiCisJIm1vdgklJWwxLCAlJWcxXG5cdCIKKwkibW92CSUlbDUsICUlZzVcblx0IgorCSJiYQkxYlxuXHQiCisJIiByZXN0b3JlICUlbzAsICUlZzAsICUlZzJcblx0IgorCSIucHJldmlvdXNcbiIKKwk6ICI9JnIiIChpbmNyZW1lbnQpCisJOiAiMCIgKGluY3JlbWVudCksICJyIiAocHRyKSwgImkiIChfX2Rvd25faW50ZXJydXB0aWJsZSkKKwk6ICJnMyIsICJnNCIsICJnNyIsICJtZW1vcnkiLCAiY2MiKTsKKworCXJldHVybiBpbmNyZW1lbnQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGRvd25fdHJ5bG9jayhzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQoreworCXJlZ2lzdGVyIHZvbGF0aWxlIGludCAqcHRyIGFzbSgiZzEiKTsKKwlyZWdpc3RlciBpbnQgaW5jcmVtZW50IGFzbSgiZzIiKTsKKworCXB0ciA9ICYoc2VtLT5jb3VudC5jb3VudGVyKTsKKwlpbmNyZW1lbnQgPSAxOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJIm1vdgklJW83LCAlJWc0XG5cdCIKKwkiY2FsbAlfX19hdG9taWMyNF9zdWJcblx0IgorCSIgYWRkCSUlbzcsIDgsICUlbzdcblx0IgorCSJ0c3QJJSVnMlxuXHQiCisJImJsCTJmXG5cdCIKKwkiIGNscgklJWcyXG4iCisJIjE6XG5cdCIKKwkiLnN1YnNlY3Rpb24gMlxuIgorCSIyOlxuXHQiCisJInNhdmUJJSVzcCwgLTY0LCAlJXNwXG5cdCIKKwkibW92CSUlZzEsICUlbDFcblx0IgorCSJtb3YJJSVnNSwgJSVsNVxuXHQiCisJImNhbGwJJTNcblx0IgorCSIgbW92CSUlZzEsICUlbzBcblx0IgorCSJtb3YJJSVsMSwgJSVnMVxuXHQiCisJIm1vdgklJWw1LCAlJWc1XG5cdCIKKwkiYmEJMWJcblx0IgorCSIgcmVzdG9yZSAlJW8wLCAlJWcwLCAlJWcyXG5cdCIKKwkiLnByZXZpb3VzXG4iCisJOiAiPSZyIiAoaW5jcmVtZW50KQorCTogIjAiIChpbmNyZW1lbnQpLCAiciIgKHB0ciksICJpIiAoX19kb3duX3RyeWxvY2spCisJOiAiZzMiLCAiZzQiLCAiZzciLCAibWVtb3J5IiwgImNjIik7CisKKwlyZXR1cm4gaW5jcmVtZW50OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdXAoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKK3sKKwlyZWdpc3RlciB2b2xhdGlsZSBpbnQgKnB0ciBhc20oImcxIik7CisJcmVnaXN0ZXIgaW50IGluY3JlbWVudCBhc20oImcyIik7CisKKwlwdHIgPSAmKHNlbS0+Y291bnQuY291bnRlcik7CisJaW5jcmVtZW50ID0gMTsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCSJtb3YJJSVvNywgJSVnNFxuXHQiCisJImNhbGwJX19fYXRvbWljMjRfYWRkXG5cdCIKKwkiIGFkZAklJW83LCA4LCAlJW83XG5cdCIKKwkidHN0CSUlZzJcblx0IgorCSJibGUJMmZcblx0IgorCSIgbm9wXG4iCisJIjE6XG5cdCIKKwkiLnN1YnNlY3Rpb24gMlxuIgorCSIyOlxuXHQiCisJInNhdmUJJSVzcCwgLTY0LCAlJXNwXG5cdCIKKwkibW92CSUlZzEsICUlbDFcblx0IgorCSJtb3YJJSVnNSwgJSVsNVxuXHQiCisJImNhbGwJJTNcblx0IgorCSIgbW92CSUlZzEsICUlbzBcblx0IgorCSJtb3YJJSVsMSwgJSVnMVxuXHQiCisJImJhCTFiXG5cdCIKKwkiIHJlc3RvcmUgJSVsNSwgJSVnMCwgJSVnNVxuXHQiCisJIi5wcmV2aW91c1xuIgorCTogIj0mciIgKGluY3JlbWVudCkKKwk6ICIwIiAoaW5jcmVtZW50KSwgInIiIChwdHIpLCAiaSIgKF9fdXApCisJOiAiZzMiLCAiZzQiLCAiZzciLCAibWVtb3J5IiwgImNjIik7Cit9CQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogIShfU1BBUkNfU0VNQVBIT1JFX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9zZW1idWYuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3NlbWJ1Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3OWM0YmIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9zZW1idWYuaApAQCAtMCwwICsxLDI1IEBACisjaWZuZGVmIF9TUEFSQ19TRU1CVUZfSAorI2RlZmluZSBfU1BBUkNfU0VNQlVGX0gKKworLyogCisgKiBUaGUgc2VtaWQ2NF9kcyBzdHJ1Y3R1cmUgZm9yIHNwYXJjIGFyY2hpdGVjdHVyZS4KKyAqIE5vdGUgZXh0cmEgcGFkZGluZyBiZWNhdXNlIHRoaXMgc3RydWN0dXJlIGlzIHBhc3NlZCBiYWNrIGFuZCBmb3J0aAorICogYmV0d2VlbiBrZXJuZWwgYW5kIHVzZXIgc3BhY2UuCisgKgorICogUGFkIHNwYWNlIGlzIGxlZnQgZm9yOgorICogLSA2NC1iaXQgdGltZV90IHRvIHNvbHZlIHkyMDM4IHByb2JsZW0KKyAqIC0gMiBtaXNjZWxsYW5lb3VzIDMyLWJpdCB2YWx1ZXMKKyAqLworCitzdHJ1Y3Qgc2VtaWQ2NF9kcyB7CisJc3RydWN0IGlwYzY0X3Blcm0gc2VtX3Blcm07CQkvKiBwZXJtaXNzaW9ucyAuLiBzZWUgaXBjLmggKi8KKwl1bnNpZ25lZCBpbnQJX19wYWQxOworCV9fa2VybmVsX3RpbWVfdAlzZW1fb3RpbWU7CQkvKiBsYXN0IHNlbW9wIHRpbWUgKi8KKwl1bnNpZ25lZCBpbnQJX19wYWQyOworCV9fa2VybmVsX3RpbWVfdAlzZW1fY3RpbWU7CQkvKiBsYXN0IGNoYW5nZSB0aW1lICovCisJdW5zaWduZWQgbG9uZwlzZW1fbnNlbXM7CQkvKiBuby4gb2Ygc2VtYXBob3JlcyBpbiBhcnJheSAqLworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQxOworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQyOworfTsKKworI2VuZGlmIC8qIF9TUEFSQzY0X1NFTUJVRl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9zZXR1cC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvc2V0dXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2FmOTU4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvc2V0dXAuaApAQCAtMCwwICsxLDEwIEBACisvKgorICoJSnVzdCBhIHBsYWNlIGhvbGRlci4gCisgKi8KKworI2lmbmRlZiBfU1BBUkNfU0VUVVBfSAorI2RlZmluZSBfU1BBUkNfU0VUVVBfSAorCisjZGVmaW5lIENPTU1BTkRfTElORV9TSVpFCTI1NgorCisjZW5kaWYgLyogX1NQQVJDX1NFVFVQX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3NmcC1tYWNoaW5lLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9zZnAtbWFjaGluZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0Y2EyZDkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9zZnAtbWFjaGluZS5oCkBAIC0wLDAgKzEsMjA3IEBACisvKiBNYWNoaW5lLWRlcGVuZGVudCBzb2Z0d2FyZSBmbG9hdGluZy1wb2ludCBkZWZpbml0aW9ucy4KKyAgIFNwYXJjIHVzZXJsYW5kIChfUV8qKSB2ZXJzaW9uLgorICAgQ29weXJpZ2h0IChDKSAxOTk3LDE5OTgsMTk5OSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorICAgQ29udHJpYnV0ZWQgYnkgUmljaGFyZCBIZW5kZXJzb24gKHJ0aEBjeWdudXMuY29tKSwKKwkJICBKYWt1YiBKZWxpbmVrIChqakB1bHRyYS5saW51eC5jeiksCisJCSAgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUByZWRoYXQuY29tKSBhbmQKKwkJICBQZXRlciBNYXlkZWxsIChwbWF5ZGVsbEBjaGlhcmsuZ3JlZW5lbmQub3JnLnVrKS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyAgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZgorICAgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisKKyNpZm5kZWYgX1NGUF9NQUNISU5FX0gKKyNkZWZpbmUgX1NGUF9NQUNISU5FX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorICAgCisjZGVmaW5lIF9GUF9XX1RZUEVfU0laRQkJMzIKKyNkZWZpbmUgX0ZQX1dfVFlQRQkJdW5zaWduZWQgbG9uZworI2RlZmluZSBfRlBfV1NfVFlQRQkJc2lnbmVkIGxvbmcKKyNkZWZpbmUgX0ZQX0lfVFlQRQkJbG9uZworCisjZGVmaW5lIF9GUF9NVUxfTUVBVF9TKFIsWCxZKQkJCQkJXAorICBfRlBfTVVMX01FQVRfMV93aWRlKF9GUF9XRlJBQ0JJVFNfUyxSLFgsWSx1bXVsX3BwbW0pCisjZGVmaW5lIF9GUF9NVUxfTUVBVF9EKFIsWCxZKQkJCQkJXAorICBfRlBfTVVMX01FQVRfMl93aWRlKF9GUF9XRlJBQ0JJVFNfRCxSLFgsWSx1bXVsX3BwbW0pCisjZGVmaW5lIF9GUF9NVUxfTUVBVF9RKFIsWCxZKQkJCQkJXAorICBfRlBfTVVMX01FQVRfNF93aWRlKF9GUF9XRlJBQ0JJVFNfUSxSLFgsWSx1bXVsX3BwbW0pCisKKyNkZWZpbmUgX0ZQX0RJVl9NRUFUX1MoUixYLFkpCV9GUF9ESVZfTUVBVF8xX3VkaXYoUyxSLFgsWSkKKyNkZWZpbmUgX0ZQX0RJVl9NRUFUX0QoUixYLFkpCV9GUF9ESVZfTUVBVF8yX3VkaXYoRCxSLFgsWSkKKyNkZWZpbmUgX0ZQX0RJVl9NRUFUX1EoUixYLFkpCV9GUF9ESVZfTUVBVF80X3VkaXYoUSxSLFgsWSkKKworI2RlZmluZSBfRlBfTkFORlJBQ19TCQkoKF9GUF9RTkFOQklUX1MgPDwgMSkgLSAxKQorI2RlZmluZSBfRlBfTkFORlJBQ19ECQkoKF9GUF9RTkFOQklUX0QgPDwgMSkgLSAxKSwgLTEKKyNkZWZpbmUgX0ZQX05BTkZSQUNfUQkJKChfRlBfUU5BTkJJVF9RIDw8IDEpIC0gMSksIC0xLCAtMSwgLTEKKyNkZWZpbmUgX0ZQX05BTlNJR05fUwkJMAorI2RlZmluZSBfRlBfTkFOU0lHTl9ECQkwCisjZGVmaW5lIF9GUF9OQU5TSUdOX1EJCTAKKworI2RlZmluZSBfRlBfS0VFUE5BTkZSQUNQIDEKKworLyogSWYgb25lIE5hTiBpcyBzaWduYWxpbmcgYW5kIHRoZSBvdGhlciBpcyBub3QsCisgKiB3ZSBjaG9vc2UgdGhhdCBvbmUsIG90aGVyd2lzZSB3ZSBjaG9vc2UgWC4KKyAqLworLyogRm9yIF9RcF8qIGFuZCBfUV8qLCB0aGlzIHNob3VsZCBwcmVmZXIgWCwgZm9yCisgKiBDUFUgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uIHRoaXMgc2hvdWxkIHByZWZlciBZLgorICogKHNlZSBTUEFNdjkgQi4yLjIgc2VjdGlvbikuCisgKi8KKyNkZWZpbmUgX0ZQX0NIT09TRU5BTihmcywgd2MsIFIsIFgsIFksIE9QKQkJCVwKKyAgZG8gewkJCQkJCQkJXAorICAgIGlmICgoX0ZQX0ZSQUNfSElHSF9SQVdfIyNmcyhZKSAmIF9GUF9RTkFOQklUXyMjZnMpCQlcCisJJiYgIShfRlBfRlJBQ19ISUdIX1JBV18jI2ZzKFgpICYgX0ZQX1FOQU5CSVRfIyNmcykpCVwKKyAgICAgIHsJCQkJCQkJCVwKKwlSIyNfcyA9IFgjI19zOwkJCQkJCVwKKwlfRlBfRlJBQ19DT1BZXyMjd2MoUixYKTsJCQkJXAorICAgICAgfQkJCQkJCQkJXAorICAgIGVsc2UJCQkJCQkJXAorICAgICAgewkJCQkJCQkJXAorCVIjI19zID0gWSMjX3M7CQkJCQkJXAorCV9GUF9GUkFDX0NPUFlfIyN3YyhSLFkpOwkJCQlcCisgICAgICB9CQkJCQkJCQlcCisgICAgUiMjX2MgPSBGUF9DTFNfTkFOOwkJCQkJCVwKKyAgfSB3aGlsZSAoMCkKKworLyogU29tZSBhc3NlbWJseSB0byBzcGVlZCB0aGluZ3MgdXAuICovCisjZGVmaW5lIF9fRlBfRlJBQ19BRERfMyhyMixyMSxyMCx4Mix4MSx4MCx5Mix5MSx5MCkJCQlcCisgIF9fYXNtX18gKCJhZGRjYyAlcjcsJTgsJTJcblx0IgkJCQkJXAorCSAgICJhZGR4Y2MgJXI1LCU2LCUxXG5cdCIJCQkJCVwKKwkgICAiYWRkeCAlcjMsJTQsJTBcbiIJCQkJCQlcCisJICAgOiAiPXIiICgoVVNJdHlwZSkocjIpKSwJCQkJCVwKKwkgICAgICI9JnIiICgoVVNJdHlwZSkocjEpKSwJCQkJCVwKKwkgICAgICI9JnIiICgoVVNJdHlwZSkocjApKQkJCQkJXAorCSAgIDogIiVySiIgKChVU0l0eXBlKSh4MikpLAkJCQkJXAorCSAgICAgInJJIiAoKFVTSXR5cGUpKHkyKSksCQkJCQlcCisJICAgICAiJXJKIiAoKFVTSXR5cGUpKHgxKSksCQkJCQlcCisJICAgICAickkiICgoVVNJdHlwZSkoeTEpKSwJCQkJCVwKKwkgICAgICIlckoiICgoVVNJdHlwZSkoeDApKSwJCQkJCVwKKwkgICAgICJySSIgKChVU0l0eXBlKSh5MCkpCQkJCQlcCisJICAgOiAiY2MiKQorCisjZGVmaW5lIF9fRlBfRlJBQ19TVUJfMyhyMixyMSxyMCx4Mix4MSx4MCx5Mix5MSx5MCkJCQlcCisgIF9fYXNtX18gKCJzdWJjYyAlcjcsJTgsJTJcblx0IgkJCQkJXAorCSAgICAic3VieGNjICVyNSwlNiwlMVxuXHQiCQkJCQlcCisJICAgICJzdWJ4ICVyMywlNCwlMFxuIgkJCQkJCVwKKwkgICA6ICI9ciIgKChVU0l0eXBlKShyMikpLAkJCQkJXAorCSAgICAgIj0mciIgKChVU0l0eXBlKShyMSkpLAkJCQkJXAorCSAgICAgIj0mciIgKChVU0l0eXBlKShyMCkpCQkJCQlcCisJICAgOiAiJXJKIiAoKFVTSXR5cGUpKHgyKSksCQkJCQlcCisJICAgICAickkiICgoVVNJdHlwZSkoeTIpKSwJCQkJCVwKKwkgICAgICIlckoiICgoVVNJdHlwZSkoeDEpKSwJCQkJCVwKKwkgICAgICJySSIgKChVU0l0eXBlKSh5MSkpLAkJCQkJXAorCSAgICAgIiVySiIgKChVU0l0eXBlKSh4MCkpLAkJCQkJXAorCSAgICAgInJJIiAoKFVTSXR5cGUpKHkwKSkJCQkJCVwKKwkgICA6ICJjYyIpCisKKyNkZWZpbmUgX19GUF9GUkFDX0FERF80KHIzLHIyLHIxLHIwLHgzLHgyLHgxLHgwLHkzLHkyLHkxLHkwKQkJXAorICBkbyB7CQkJCQkJCQkJXAorICAgIC8qIFdlIG5lZWQgdG8gZm9vbCBnY2MsICBhcyB3ZSBuZWVkIHRvIHBhc3MgbW9yZSB0aGFuIDEwCQlcCisgICAgICAgaW5wdXQvb3V0cHV0cy4gICovCQkJCQkJXAorICAgIHJlZ2lzdGVyIFVTSXR5cGUgX3QxIF9fYXNtX18gKCJnMSIpLCBfdDIgX19hc21fXyAoImcyIik7CQlcCisgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJCQkJCVwKKwkgICAgImFkZGNjICVyOCwlOSwlMVxuXHQiCQkJCQlcCisJICAgICJhZGR4Y2MgJXI2LCU3LCUwXG5cdCIJCQkJCVwKKwkgICAgImFkZHhjYyAlcjQsJTUsJSVnMlxuXHQiCQkJCQlcCisJICAgICJhZGR4ICVyMiwlMywlJWcxXG5cdCIJCQkJCVwKKwkgICA6ICI9JnIiICgoVVNJdHlwZSkocjEpKSwJCQkJCVwKKwkgICAgICI9JnIiICgoVVNJdHlwZSkocjApKQkJCQkJXAorCSAgIDogIiVySiIgKChVU0l0eXBlKSh4MykpLAkJCQkJXAorCSAgICAgInJJIiAoKFVTSXR5cGUpKHkzKSksCQkJCQlcCisJICAgICAiJXJKIiAoKFVTSXR5cGUpKHgyKSksCQkJCQlcCisJICAgICAickkiICgoVVNJdHlwZSkoeTIpKSwJCQkJCVwKKwkgICAgICIlckoiICgoVVNJdHlwZSkoeDEpKSwJCQkJCVwKKwkgICAgICJySSIgKChVU0l0eXBlKSh5MSkpLAkJCQkJXAorCSAgICAgIiVySiIgKChVU0l0eXBlKSh4MCkpLAkJCQkJXAorCSAgICAgInJJIiAoKFVTSXR5cGUpKHkwKSkJCQkJCVwKKwkgICA6ICJjYyIsICJnMSIsICJnMiIpOwkJCQkJCVwKKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIiIgOiAiPXIiIChfdDEpLCAiPXIiIChfdDIpKTsJCQlcCisgICAgcjMgPSBfdDE7IHIyID0gX3QyOwkJCQkJCQlcCisgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgX19GUF9GUkFDX1NVQl80KHIzLHIyLHIxLHIwLHgzLHgyLHgxLHgwLHkzLHkyLHkxLHkwKQkJXAorICBkbyB7CQkJCQkJCQkJXAorICAgIC8qIFdlIG5lZWQgdG8gZm9vbCBnY2MsICBhcyB3ZSBuZWVkIHRvIHBhc3MgbW9yZSB0aGFuIDEwCQlcCisgICAgICAgaW5wdXQvb3V0cHV0cy4gICovCQkJCQkJXAorICAgIHJlZ2lzdGVyIFVTSXR5cGUgX3QxIF9fYXNtX18gKCJnMSIpLCBfdDIgX19hc21fXyAoImcyIik7CQlcCisgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJCQkJCVwKKwkgICAgInN1YmNjICVyOCwlOSwlMVxuXHQiCQkJCQlcCisJICAgICJzdWJ4Y2MgJXI2LCU3LCUwXG5cdCIJCQkJCVwKKwkgICAgInN1YnhjYyAlcjQsJTUsJSVnMlxuXHQiCQkJCQlcCisJICAgICJzdWJ4ICVyMiwlMywlJWcxXG5cdCIJCQkJCVwKKwkgICA6ICI9JnIiICgoVVNJdHlwZSkocjEpKSwJCQkJCVwKKwkgICAgICI9JnIiICgoVVNJdHlwZSkocjApKQkJCQkJXAorCSAgIDogIiVySiIgKChVU0l0eXBlKSh4MykpLAkJCQkJXAorCSAgICAgInJJIiAoKFVTSXR5cGUpKHkzKSksCQkJCQlcCisJICAgICAiJXJKIiAoKFVTSXR5cGUpKHgyKSksCQkJCQlcCisJICAgICAickkiICgoVVNJdHlwZSkoeTIpKSwJCQkJCVwKKwkgICAgICIlckoiICgoVVNJdHlwZSkoeDEpKSwJCQkJCVwKKwkgICAgICJySSIgKChVU0l0eXBlKSh5MSkpLAkJCQkJXAorCSAgICAgIiVySiIgKChVU0l0eXBlKSh4MCkpLAkJCQkJXAorCSAgICAgInJJIiAoKFVTSXR5cGUpKHkwKSkJCQkJCVwKKwkgICA6ICJjYyIsICJnMSIsICJnMiIpOwkJCQkJCVwKKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIiIgOiAiPXIiIChfdDEpLCAiPXIiIChfdDIpKTsJCQlcCisgICAgcjMgPSBfdDE7IHIyID0gX3QyOwkJCQkJCQlcCisgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgX19GUF9GUkFDX0RFQ18zKHgyLHgxLHgwLHkyLHkxLHkwKSBfX0ZQX0ZSQUNfU1VCXzMoeDIseDEseDAseDIseDEseDAseTIseTEseTApCisKKyNkZWZpbmUgX19GUF9GUkFDX0RFQ180KHgzLHgyLHgxLHgwLHkzLHkyLHkxLHkwKSBfX0ZQX0ZSQUNfU1VCXzQoeDMseDIseDEseDAseDMseDIseDEseDAseTMseTIseTEseTApCisKKyNkZWZpbmUgX19GUF9GUkFDX0FERElfNCh4Myx4Mix4MSx4MCxpKQkJCQkJXAorICBfX2FzbV9fICgiYWRkY2MgJTMsJTQsJTNcblx0IgkJCQkJCVwKKwkgICAiYWRkeGNjICUyLCUlZzAsJTJcblx0IgkJCQkJXAorCSAgICJhZGR4Y2MgJTEsJSVnMCwlMVxuXHQiCQkJCQlcCisJICAgImFkZHggJTAsJSVnMCwlMFxuXHQiCQkJCQlcCisJICAgOiAiPSZyIiAoKFVTSXR5cGUpKHgzKSksCQkJCQlcCisJICAgICAiPSZyIiAoKFVTSXR5cGUpKHgyKSksCQkJCQlcCisJICAgICAiPSZyIiAoKFVTSXR5cGUpKHgxKSksCQkJCQlcCisJICAgICAiPSZyIiAoKFVTSXR5cGUpKHgwKSkJCQkJCVwKKwkgICA6ICJySSIgKChVU0l0eXBlKShpKSksCQkJCQlcCisJICAgICAiMCIgKChVU0l0eXBlKSh4MykpLAkJCQkJXAorCSAgICAgIjEiICgoVVNJdHlwZSkoeDIpKSwJCQkJCVwKKwkgICAgICIyIiAoKFVTSXR5cGUpKHgxKSksCQkJCQlcCisJICAgICAiMyIgKChVU0l0eXBlKSh4MCkpCQkJCQlcCisJICAgOiAiY2MiKQorCisjaWZuZGVmIENPTkZJR19TTVAKK2V4dGVybiBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmxhc3RfdGFza191c2VkX21hdGg7CisjZW5kaWYKKworLyogT2J0YWluIHRoZSBjdXJyZW50IHJvdW5kaW5nIG1vZGUuICovCisjaWZuZGVmIEZQX1JPVU5ETU9ERQorI2lmZGVmIENPTkZJR19TTVAKKyNkZWZpbmUgRlBfUk9VTkRNT0RFCSgoY3VycmVudC0+dGhyZWFkLmZzciA+PiAzMCkgJiAweDMpCisjZWxzZQorI2RlZmluZSBGUF9ST1VORE1PREUJKChsYXN0X3Rhc2tfdXNlZF9tYXRoLT50aHJlYWQuZnNyID4+IDMwKSAmIDB4MykKKyNlbmRpZgorI2VuZGlmCisKKy8qIEV4Y2VwdGlvbiBmbGFncy4gKi8KKyNkZWZpbmUgRlBfRVhfSU5WQUxJRAkJKDEgPDwgNCkKKyNkZWZpbmUgRlBfRVhfT1ZFUkZMT1cJCSgxIDw8IDMpCisjZGVmaW5lIEZQX0VYX1VOREVSRkxPVwkJKDEgPDwgMikKKyNkZWZpbmUgRlBfRVhfRElWWkVSTwkJKDEgPDwgMSkKKyNkZWZpbmUgRlBfRVhfSU5FWEFDVAkJKDEgPDwgMCkKKworI2RlZmluZSBGUF9IQU5ETEVfRVhDRVBUSU9OUyByZXR1cm4gX2ZleAorCisjaWZkZWYgQ09ORklHX1NNUAorI2RlZmluZSBGUF9JTkhJQklUX1JFU1VMVFMgKChjdXJyZW50LT50aHJlYWQuZnNyID4+IDIzKSAmIF9mZXgpCisjZWxzZQorI2RlZmluZSBGUF9JTkhJQklUX1JFU1VMVFMgKChsYXN0X3Rhc2tfdXNlZF9tYXRoLT50aHJlYWQuZnNyID4+IDIzKSAmIF9mZXgpCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9zaG1idWYuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3NobWJ1Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmZjlkYTgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9zaG1idWYuaApAQCAtMCwwICsxLDQyIEBACisjaWZuZGVmIF9TUEFSQ19TSE1CVUZfSAorI2RlZmluZSBfU1BBUkNfU0hNQlVGX0gKKworLyogCisgKiBUaGUgc2htaWQ2NF9kcyBzdHJ1Y3R1cmUgZm9yIHNwYXJjIGFyY2hpdGVjdHVyZS4KKyAqIE5vdGUgZXh0cmEgcGFkZGluZyBiZWNhdXNlIHRoaXMgc3RydWN0dXJlIGlzIHBhc3NlZCBiYWNrIGFuZCBmb3J0aAorICogYmV0d2VlbiBrZXJuZWwgYW5kIHVzZXIgc3BhY2UuCisgKgorICogUGFkIHNwYWNlIGlzIGxlZnQgZm9yOgorICogLSA2NC1iaXQgdGltZV90IHRvIHNvbHZlIHkyMDM4IHByb2JsZW0KKyAqIC0gMiBtaXNjZWxsYW5lb3VzIDMyLWJpdCB2YWx1ZXMKKyAqLworCitzdHJ1Y3Qgc2htaWQ2NF9kcyB7CisJc3RydWN0IGlwYzY0X3Blcm0Jc2htX3Blcm07CS8qIG9wZXJhdGlvbiBwZXJtcyAqLworCXVuc2lnbmVkIGludAkJX19wYWQxOworCV9fa2VybmVsX3RpbWVfdAkJc2htX2F0aW1lOwkvKiBsYXN0IGF0dGFjaCB0aW1lICovCisJdW5zaWduZWQgaW50CQlfX3BhZDI7CisJX19rZXJuZWxfdGltZV90CQlzaG1fZHRpbWU7CS8qIGxhc3QgZGV0YWNoIHRpbWUgKi8KKwl1bnNpZ25lZCBpbnQJCV9fcGFkMzsKKwlfX2tlcm5lbF90aW1lX3QJCXNobV9jdGltZTsJLyogbGFzdCBjaGFuZ2UgdGltZSAqLworCXNpemVfdAkJCXNobV9zZWdzejsJLyogc2l6ZSBvZiBzZWdtZW50IChieXRlcykgKi8KKwlfX2tlcm5lbF9waWRfdAkJc2htX2NwaWQ7CS8qIHBpZCBvZiBjcmVhdG9yICovCisJX19rZXJuZWxfcGlkX3QJCXNobV9scGlkOwkvKiBwaWQgb2YgbGFzdCBvcGVyYXRvciAqLworCXVuc2lnbmVkIGxvbmcJCXNobV9uYXR0Y2g7CS8qIG5vLiBvZiBjdXJyZW50IGF0dGFjaGVzICovCisJdW5zaWduZWQgbG9uZwkJX191bnVzZWQxOworCXVuc2lnbmVkIGxvbmcJCV9fdW51c2VkMjsKK307CisKK3N0cnVjdCBzaG1pbmZvNjQgeworCXVuc2lnbmVkIGxvbmcJc2htbWF4OworCXVuc2lnbmVkIGxvbmcJc2htbWluOworCXVuc2lnbmVkIGxvbmcJc2htbW5pOworCXVuc2lnbmVkIGxvbmcJc2htc2VnOworCXVuc2lnbmVkIGxvbmcJc2htYWxsOworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQxOworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQyOworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQzOworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQ0OworfTsKKworI2VuZGlmIC8qIF9TUEFSQ19TSE1CVUZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvc2htcGFyYW0uaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3NobXBhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI5M2E2ZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3NobXBhcmFtLmgKQEAgLTAsMCArMSwxMiBAQAorLyogJElkOiBzaG1wYXJhbS5oLHYgMS42IDE5OTkvMTIvMDkgMTA6MzI6NDEgZGF2ZW0gRXhwICQgKi8KKyNpZm5kZWYgX0FTTVNQQVJDX1NITVBBUkFNX0gKKyNkZWZpbmUgX0FTTVNQQVJDX1NITVBBUkFNX0gKKworI2RlZmluZSBfX0FSQ0hfRk9SQ0VfU0hNTEJBIAkxCisKK2V4dGVybiBpbnQgdmFjX2NhY2hlX3NpemU7CisjZGVmaW5lIFNITUxCQSAodmFjX2NhY2hlX3NpemUgPyB2YWNfY2FjaGVfc2l6ZSA6IFwKKwkJKHNwYXJjX2NwdV9tb2RlbCA9PSBzdW40YyA/ICg2NCAqIDEwMjQpIDogXAorCQkgKHNwYXJjX2NwdV9tb2RlbCA9PSBzdW40ID8gKDEyOCAqIDEwMjQpIDogUEFHRV9TSVpFKSkpCisKKyNlbmRpZiAvKiBfQVNNU1BBUkNfU0hNUEFSQU1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvc2lnY29udGV4dC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvc2lnY29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmYTJjN2QKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9zaWdjb250ZXh0LmgKQEAgLTAsMCArMSw2MyBAQAorLyogJElkOiBzaWdjb250ZXh0LmgsdiAxLjE0IDE5OTkvMDkvMDYgMDg6MjI6MDUgamogRXhwICQgKi8KKyNpZm5kZWYgX19TUEFSQ19TSUdDT05URVhUX0gKKyNkZWZpbmUgX19TUEFSQ19TSUdDT05URVhUX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNkZWZpbmUgX19TVU5PU19NQVhXSU4gICAzMQorCisvKiBUaGlzIGlzIHdoYXQgU3VuT1MgZG9lcywgc28gc2hhbGwgSS4gKi8KK3N0cnVjdCBzaWdjb250ZXh0IHsKKwlpbnQgc2lnY19vbnN0YWNrOyAgICAgIC8qIHN0YXRlIHRvIHJlc3RvcmUgKi8KKwlpbnQgc2lnY19tYXNrOyAgICAgICAgIC8qIHNpZ21hc2sgdG8gcmVzdG9yZSAqLworCWludCBzaWdjX3NwOyAgICAgICAgICAgLyogc3RhY2sgcG9pbnRlciAqLworCWludCBzaWdjX3BjOyAgICAgICAgICAgLyogcHJvZ3JhbSBjb3VudGVyICovCisJaW50IHNpZ2NfbnBjOyAgICAgICAgICAvKiBuZXh0IHByb2dyYW0gY291bnRlciAqLworCWludCBzaWdjX3BzcjsgICAgICAgICAgLyogZm9yIGNvbmRpdGlvbiBjb2RlcyBldGMgKi8KKwlpbnQgc2lnY19nMTsgICAgICAgICAgIC8qIFVzZXIgdXNlcyB0aGVzZSB0d28gcmVnaXN0ZXJzICovCisJaW50IHNpZ2NfbzA7ICAgICAgICAgICAvKiB3aXRoaW4gdGhlIHRyYW1wb2xpbmUgY29kZS4gKi8KKworCS8qIE5vdyBjb21lcyBpbmZvcm1hdGlvbiByZWdhcmRpbmcgdGhlIHVzZXJzIHdpbmRvdyBzZXQKKwkgKiBhdCB0aGUgdGltZSBvZiB0aGUgc2lnbmFsLgorCSAqLworCWludCBzaWdjX29zd2luczsgICAgICAgLyogb3V0c3RhbmRpbmcgd2luZG93cyAqLworCisJLyogc3RhY2sgcHRycyBmb3IgZWFjaCByZWd3aW4gYnVmICovCisJY2hhciAqc2lnY19zcGJ1ZltfX1NVTk9TX01BWFdJTl07CisKKwkvKiBXaW5kb3dzIHRvIHJlc3RvcmUgYWZ0ZXIgc2lnbmFsICovCisJc3RydWN0IHsKKwkJdW5zaWduZWQgbG9uZwlsb2NhbHNbOF07CisJCXVuc2lnbmVkIGxvbmcJaW5zWzhdOworCX0gc2lnY193YnVmW19fU1VOT1NfTUFYV0lOXTsKK307CisKK3R5cGVkZWYgc3RydWN0IHsKKwlzdHJ1Y3QgeworCQl1bnNpZ25lZCBsb25nIHBzcjsKKwkJdW5zaWduZWQgbG9uZyBwYzsKKwkJdW5zaWduZWQgbG9uZyBucGM7CisJCXVuc2lnbmVkIGxvbmcgeTsKKwkJdW5zaWduZWQgbG9uZyB1X3JlZ3NbMTZdOyAvKiBnbG9iYWxzIGFuZCBpbnMgKi8KKwl9CQlzaV9yZWdzOworCWludAkJc2lfbWFzazsKK30gX19zaWdpbmZvX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCAgIGxvbmcgc2lfZmxvYXRfcmVncyBbMzJdOworCXVuc2lnbmVkICAgbG9uZyBzaV9mc3I7CisJdW5zaWduZWQgICBsb25nIHNpX2ZwcWRlcHRoOworCXN0cnVjdCB7CisJCXVuc2lnbmVkIGxvbmcgKmluc25fYWRkcjsKKwkJdW5zaWduZWQgbG9uZyBpbnNuOworCX0gc2lfZnBxdWV1ZSBbMTZdOworfSBfX3NpZ2luZm9fZnB1X3Q7CisKKyNlbmRpZiAvKiAhKF9fQVNTRU1CTFlfXykgKi8KKworI2VuZGlmIC8qIChfX0tFUk5FTF9fKSAqLworCisjZW5kaWYgLyogIShfX1NQQVJDX1NJR0NPTlRFWFRfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3NpZ2luZm8uaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3NpZ2luZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzNlYThiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvc2lnaW5mby5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qICRJZDogc2lnaW5mby5oLHYgMS45IDIwMDIvMDIvMDggMDM6NTc6MTggZGF2ZW0gRXhwICQKKyAqIHNpZ2luZm8uYzoKKyAqLworCisjaWZuZGVmIF9TUEFSQ19TSUdJTkZPX0gKKyNkZWZpbmUgX1NQQVJDX1NJR0lORk9fSAorCisjZGVmaW5lIF9fQVJDSF9TSV9VSURfVAkJdW5zaWduZWQgaW50CisjZGVmaW5lIF9fQVJDSF9TSV9UUkFQTk8KKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NpZ2luZm8uaD4KKworI2RlZmluZSBTSV9OT0lORk8JMzI3NjcJCS8qIG5vIGluZm9ybWF0aW9uIGluIHNpZ2luZm9fdCAqLworCisvKgorICogU0lHRU1UIHNpX2NvZGVzCisgKi8KKyNkZWZpbmUgRU1UX1RBR09WRgkoX19TSV9GQVVMVHwxKQkvKiB0YWcgb3ZlcmZsb3cgKi8KKyNkZWZpbmUgTlNJR0VNVAkJMQorCisjZW5kaWYgLyogIShfU1BBUkNfU0lHSU5GT19IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvc2lnbmFsLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9zaWduYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODIxMWNiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvc2lnbmFsLmgKQEAgLTAsMCArMSwyMzQgQEAKKy8qICRJZDogc2lnbmFsLmgsdiAxLjM1IDE5OTkvMDkvMDYgMDg6MjI6MDQgamogRXhwICQgKi8KKyNpZm5kZWYgX0FTTVNQQVJDX1NJR05BTF9ICisjZGVmaW5lIF9BU01TUEFSQ19TSUdOQUxfSAorCisjaW5jbHVkZSA8YXNtL3NpZ2NvbnRleHQuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorCisjaWZkZWYgX19LRVJORUxfXworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNpbmNsdWRlIDxsaW51eC9wZXJzb25hbGl0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjZW5kaWYKKyNlbmRpZgorCisvKiBPbiB0aGUgU3BhcmMgdGhlIHNpZ25hbCBoYW5kbGVycyBnZXQgcGFzc2VkIGEgJ3N1Yi1zaWduYWwnIGNvZGUKKyAqIGZvciBjZXJ0YWluIHNpZ25hbCB0eXBlcywgd2hpY2ggd2UgZG9jdW1lbnQgaGVyZS4KKyAqLworI2RlZmluZSBTSUdIVVAJCSAxCisjZGVmaW5lIFNJR0lOVAkJIDIKKyNkZWZpbmUgU0lHUVVJVAkJIDMKKyNkZWZpbmUgU0lHSUxMCQkgNAorI2RlZmluZSAgICBTVUJTSUdfU1RBQ0sgICAgICAgMAorI2RlZmluZSAgICBTVUJTSUdfSUxMSU5TVCAgICAgMgorI2RlZmluZSAgICBTVUJTSUdfUFJJVklOU1QgICAgMworI2RlZmluZSAgICBTVUJTSUdfQkFEVFJBUCh0KSAgKDB4ODAgKyAodCkpCisKKyNkZWZpbmUgU0lHVFJBUAkJIDUKKyNkZWZpbmUgU0lHQUJSVAkJIDYKKyNkZWZpbmUgU0lHSU9UCQkgNgorCisjZGVmaW5lIFNJR0VNVCAgICAgICAgICAgNworI2RlZmluZSAgICBTVUJTSUdfVEFHICAgIDEwCisKKyNkZWZpbmUgU0lHRlBFCQkgOAorI2RlZmluZSAgICBTVUJTSUdfRlBESVNBQkxFRCAgICAgMHg0MDAKKyNkZWZpbmUgICAgU1VCU0lHX0ZQRVJST1IgICAgICAgIDB4NDA0CisjZGVmaW5lICAgIFNVQlNJR19GUElOVE9WRkwgICAgICAweDAwMQorI2RlZmluZSAgICBTVUJTSUdfRlBTVFNJRyAgICAgICAgMHgwMDIKKyNkZWZpbmUgICAgU1VCU0lHX0lESVZaRVJPICAgICAgIDB4MDE0CisjZGVmaW5lICAgIFNVQlNJR19GUElORVhBQ1QgICAgICAweDBjNAorI2RlZmluZSAgICBTVUJTSUdfRlBESVZaRVJPICAgICAgMHgwYzgKKyNkZWZpbmUgICAgU1VCU0lHX0ZQVU5GTE9XICAgICAgIDB4MGNjCisjZGVmaW5lICAgIFNVQlNJR19GUE9QRVJST1IgICAgICAweDBkMAorI2RlZmluZSAgICBTVUJTSUdfRlBPVkZMT1cgICAgICAgMHgwZDQKKworI2RlZmluZSBTSUdLSUxMCQkgOQorI2RlZmluZSBTSUdCVVMgICAgICAgICAgMTAKKyNkZWZpbmUgICAgU1VCU0lHX0JVU1RJTUVPVVQgICAgMQorI2RlZmluZSAgICBTVUJTSUdfQUxJR05NRU5UICAgICAyCisjZGVmaW5lICAgIFNVQlNJR19NSVNDRVJST1IgICAgIDUKKworI2RlZmluZSBTSUdTRUdWCQkxMQorI2RlZmluZSAgICBTVUJTSUdfTk9NQVBQSU5HICAgICAzCisjZGVmaW5lICAgIFNVQlNJR19QUk9URUNUSU9OICAgIDQKKyNkZWZpbmUgICAgU1VCU0lHX1NFR0VSUk9SICAgICAgNQorCisjZGVmaW5lIFNJR1NZUwkJMTIKKworI2RlZmluZSBTSUdQSVBFCQkxMworI2RlZmluZSBTSUdBTFJNCQkxNAorI2RlZmluZSBTSUdURVJNCQkxNQorI2RlZmluZSBTSUdVUkcgICAgICAgICAgMTYKKworLyogU3VuT1MgdmFsdWVzIHdoaWNoIGRldmlhdGUgZnJvbSB0aGUgTGludXgvaTM4NiBvbmVzICovCisjZGVmaW5lIFNJR1NUT1AJCTE3CisjZGVmaW5lIFNJR1RTVFAJCTE4CisjZGVmaW5lIFNJR0NPTlQJCTE5CisjZGVmaW5lIFNJR0NITEQJCTIwCisjZGVmaW5lIFNJR1RUSU4JCTIxCisjZGVmaW5lIFNJR1RUT1UJCTIyCisjZGVmaW5lIFNJR0lPCQkyMworI2RlZmluZSBTSUdQT0xMCQlTSUdJTyAgIC8qIFN5c1YgbmFtZSBmb3IgU0lHSU8gKi8KKyNkZWZpbmUgU0lHWENQVQkJMjQKKyNkZWZpbmUgU0lHWEZTWgkJMjUKKyNkZWZpbmUgU0lHVlRBTFJNCTI2CisjZGVmaW5lIFNJR1BST0YJCTI3CisjZGVmaW5lIFNJR1dJTkNICTI4CisjZGVmaW5lIFNJR0xPU1QJCTI5CisjZGVmaW5lIFNJR1BXUgkJU0lHTE9TVAorI2RlZmluZSBTSUdVU1IxCQkzMAorI2RlZmluZSBTSUdVU1IyCQkzMQorCisvKiBNb3N0IHRoaW5ncyBzaG91bGQgYmUgY2xlYW4gZW5vdWdoIHRvIHJlZGVmaW5lIHRoaXMgYXQgd2lsbCwgaWYgY2FyZQorICogaXMgdGFrZW4gdG8gbWFrZSBsaWJjIG1hdGNoLgorICovCisKKyNkZWZpbmUgX19PTERfTlNJRwkzMgorI2RlZmluZSBfX05FV19OU0lHCTY0CisjZGVmaW5lIF9OU0lHX0JQVwkzMgorI2RlZmluZSBfTlNJR19XT1JEUwkoX19ORVdfTlNJRyAvIF9OU0lHX0JQVykKKworI2RlZmluZSBTSUdSVE1JTgkzMgorI2RlZmluZSBTSUdSVE1BWAlfX05FV19OU0lHCisKKyNpZiBkZWZpbmVkKF9fS0VSTkVMX18pIHx8IGRlZmluZWQoX19XQU5UX1BPU0lYMUJfU0lHTkFMU19fKQorI2RlZmluZQlfTlNJRwkJX19ORVdfTlNJRworI2RlZmluZSBfX25ld19zaWdzZXRfdAlzaWdzZXRfdAorI2RlZmluZSBfX25ld19zaWdhY3Rpb24Jc2lnYWN0aW9uCisjZGVmaW5lIF9fb2xkX3NpZ3NldF90CW9sZF9zaWdzZXRfdAorI2RlZmluZSBfX29sZF9zaWdhY3Rpb24Jb2xkX3NpZ2FjdGlvbgorI2Vsc2UKKyNkZWZpbmUgX05TSUcJCV9fT0xEX05TSUcKKyNkZWZpbmUgX19vbGRfc2lnc2V0X3QJc2lnc2V0X3QKKyNkZWZpbmUgX19vbGRfc2lnYWN0aW9uCXNpZ2FjdGlvbgorI2VuZGlmCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBfX29sZF9zaWdzZXRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcJc2lnW19OU0lHX1dPUkRTXTsKK30gX19uZXdfc2lnc2V0X3Q7CisKKworI2lmZGVmIF9fS0VSTkVMX18KKy8qIEEgU3VuT1Mgc2lnc3RhY2sgKi8KK3N0cnVjdCBzaWdzdGFjayB7CisJY2hhciAqdGhlX3N0YWNrOworCWludCAgIGN1cl9zdGF0dXM7Cit9OworI2VuZGlmCisKKy8qIFNpZ3ZlYyBmbGFncyAqLworI2RlZmluZSBfU1ZfU1NUQUNLICAgIDF1ICAgIC8qIFRoaXMgc2lnbmFsIGhhbmRsZXIgc2hvdWxkIHVzZSBzaWctc3RhY2sgKi8KKyNkZWZpbmUgX1NWX0lOVFIgICAgICAydSAgICAvKiBTaWcgcmV0dXJuIHNob3VsZCBub3QgcmVzdGFydCBzeXN0ZW0gY2FsbCAqLworI2RlZmluZSBfU1ZfUkVTRVQgICAgIDR1ICAgIC8qIFNldCBoYW5kbGVyIHRvIFNJR19ERkwgdXBvbiB0YWtlbiBzaWduYWwgKi8KKyNkZWZpbmUgX1NWX0lHTkNISUxEICA4dSAgICAvKiBEbyBub3Qgc2VuZCBTSUdDSExEICovCisKKy8qCisgKiBzYV9mbGFncyB2YWx1ZXM6IFNBX1NUQUNLIGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLCBidXQgd2lsbCBhbGxvdyB0aGUKKyAqIHVzYWdlIG9mIHNpZ25hbCBzdGFja3MgYnkgdXNpbmcgdGhlIChub3cgb2Jzb2xldGUpIHNhX3Jlc3RvcmVyIGZpZWxkIGluCisgKiB0aGUgc2lnYWN0aW9uIHN0cnVjdHVyZSBhcyBhIHN0YWNrIHBvaW50ZXIuIFRoaXMgaXMgbm93IHBvc3NpYmxlIGR1ZSB0bworICogdGhlIGNoYW5nZXMgaW4gc2lnbmFsIGhhbmRsaW5nLiBMQlQgMDEwNDkzLgorICogU0FfSU5URVJSVVBUIGlzIGEgbm8tb3AsIGJ1dCBsZWZ0IGR1ZSB0byBoaXN0b3JpY2FsIHJlYXNvbnMuIFVzZSB0aGUKKyAqIFNBX1JFU1RBUlQgZmxhZyB0byBnZXQgcmVzdGFydGluZyBzaWduYWxzICh3aGljaCB3ZXJlIHRoZSBkZWZhdWx0IGxvbmcgYWdvKQorICogU0FfU0hJUlEgZmxhZyBpcyBmb3Igc2hhcmVkIGludGVycnVwdCBzdXBwb3J0IG9uIFBDSSBhbmQgRUlTQS4KKyAqLworI2RlZmluZSBTQV9OT0NMRFNUT1AJX1NWX0lHTkNISUxECisjZGVmaW5lIFNBX1NUQUNLCV9TVl9TU1RBQ0sKKyNkZWZpbmUgU0FfT05TVEFDSwlfU1ZfU1NUQUNLCisjZGVmaW5lIFNBX1JFU1RBUlQJX1NWX0lOVFIKKyNkZWZpbmUgU0FfT05FU0hPVAlfU1ZfUkVTRVQKKyNkZWZpbmUgU0FfSU5URVJSVVBUCTB4MTB1CisjZGVmaW5lIFNBX05PTUFTSwkweDIwdQorI2RlZmluZSBTQV9TSElSUQkweDQwdQorI2RlZmluZSBTQV9OT0NMRFdBSVQJMHgxMDB1CisjZGVmaW5lIFNBX1NJR0lORk8JMHgyMDB1CisKKyNkZWZpbmUgU0lHX0JMT0NLICAgICAgICAgIDB4MDEJLyogZm9yIGJsb2NraW5nIHNpZ25hbHMgKi8KKyNkZWZpbmUgU0lHX1VOQkxPQ0sgICAgICAgIDB4MDIJLyogZm9yIHVuYmxvY2tpbmcgc2lnbmFscyAqLworI2RlZmluZSBTSUdfU0VUTUFTSyAgICAgICAgMHgwNAkvKiBmb3Igc2V0dGluZyB0aGUgc2lnbmFsIG1hc2sgKi8KKworLyogCisgKiBzaWdhbHRzdGFjayBjb250cm9scworICovCisjZGVmaW5lIFNTX09OU1RBQ0sJMQorI2RlZmluZSBTU19ESVNBQkxFCTIKKworI2RlZmluZSBNSU5TSUdTVEtTWgk0MDk2CisjZGVmaW5lIFNJR1NUS1NaCTE2Mzg0CisKKyNpZmRlZiBfX0tFUk5FTF9fCisvKgorICogVGhlc2UgdmFsdWVzIG9mIHNhX2ZsYWdzIGFyZSB1c2VkIG9ubHkgYnkgdGhlIGtlcm5lbCBhcyBwYXJ0IG9mIHRoZQorICogaXJxIGhhbmRsaW5nIHJvdXRpbmVzLgorICoKKyAqIFNBX0lOVEVSUlVQVCBpcyBhbHNvIHVzZWQgYnkgdGhlIGlycSBoYW5kbGluZyByb3V0aW5lcy4KKyAqCisgKiBESkhSCisgKiBTQV9TVEFUSUNfQUxMT0MgaXMgdXNlZCBmb3IgdGhlIFNQQVJDIHN5c3RlbSB0byBpbmRpY2F0ZSB0aGF0IHRoaXMKKyAqIGludGVycnVwdCBoYW5kbGVyJ3MgaXJxIHN0cnVjdHVyZSBzaG91bGQgYmUgc3RhdGljYWxseSBhbGxvY2F0ZWQKKyAqIGJ5IHRoZSByZXF1ZXN0X2lycSByb3V0aW5lLgorICogVGhlIGFsdGVybmF0aXZlIGlzIHRoYXQgYXJjaC9zcGFyYy9rZXJuZWwvaXJxLmMgaGFzIGNhcm5hbCBrbm93bGVkZ2UKKyAqIG9mIGludGVycnVwdCB1c2FnZSBhbmQgdGhhdCBzdWNrcy4gQWxzbyB3aXRob3V0IGEgZmxhZyBsaWtlIHRoaXMKKyAqIGl0IG1heSBiZSBwb3NzaWJsZSBmb3IgdGhlIGZyZWVfaXJxIHJvdXRpbmUgdG8gYXR0ZW1wdCB0byBmcmVlCisgKiBzdGF0aWNhbGx5IGFsbG9jYXRlZCBkYXRhLi4gd2hpY2ggaXMgTk9UIEdPT0QuCisgKgorICovCisjZGVmaW5lIFNBX1BST0JFIFNBX09ORVNIT1QKKyNkZWZpbmUgU0FfU0FNUExFX1JBTkRPTSBTQV9SRVNUQVJUCisjZGVmaW5lIFNBX1NUQVRJQ19BTExPQwkJMHg4MAorI2VuZGlmCisKKy8qIFR5cGUgb2YgYSBzaWduYWwgaGFuZGxlci4gICovCisjaWZkZWYgX19LRVJORUxfXwordHlwZWRlZiB2b2lkICgqX19zaWdoYW5kbGVyX3QpKGludCwgaW50LCBzdHJ1Y3Qgc2lnY29udGV4dCAqLCBjaGFyICopOworI2Vsc2UKK3R5cGVkZWYgdm9pZCAoKl9fc2lnaGFuZGxlcl90KShpbnQpOworI2VuZGlmCisKKyNkZWZpbmUgU0lHX0RGTAkoKF9fc2lnaGFuZGxlcl90KTApCS8qIGRlZmF1bHQgc2lnbmFsIGhhbmRsaW5nICovCisjZGVmaW5lIFNJR19JR04JKChfX3NpZ2hhbmRsZXJfdCkxKQkvKiBpZ25vcmUgc2lnbmFsICovCisjZGVmaW5lIFNJR19FUlIJKChfX3NpZ2hhbmRsZXJfdCktMSkJLyogZXJyb3IgcmV0dXJuIGZyb20gc2lnbmFsICovCisKKyNpZmRlZiBfX0tFUk5FTF9fCitzdHJ1Y3QgX19uZXdfc2lnYWN0aW9uIHsKKwlfX3NpZ2hhbmRsZXJfdAlzYV9oYW5kbGVyOworCXVuc2lnbmVkIGxvbmcJc2FfZmxhZ3M7CisJdm9pZAkJKCpzYV9yZXN0b3Jlcikodm9pZCk7CS8qIE5vdCB1c2VkIGJ5IExpbnV4L1NQQVJDICovCisJX19uZXdfc2lnc2V0X3QJc2FfbWFzazsKK307CisKK3N0cnVjdCBrX3NpZ2FjdGlvbiB7CisJc3RydWN0IF9fbmV3X3NpZ2FjdGlvbglzYTsKKwl2b2lkCQkJX191c2VyICprYV9yZXN0b3JlcjsKK307CisKK3N0cnVjdCBfX29sZF9zaWdhY3Rpb24geworCV9fc2lnaGFuZGxlcl90CXNhX2hhbmRsZXI7CisJX19vbGRfc2lnc2V0X3QJc2FfbWFzazsKKwl1bnNpZ25lZCBsb25nCXNhX2ZsYWdzOworCXZvaWQJCSgqc2FfcmVzdG9yZXIpICh2b2lkKTsJLyogbm90IHVzZWQgYnkgTGludXgvU1BBUkMgKi8KK307CisKK3R5cGVkZWYgc3RydWN0IHNpZ2FsdHN0YWNrIHsKKwl2b2lkCQlfX3VzZXIgKnNzX3NwOworCWludAkJc3NfZmxhZ3M7CisJc2l6ZV90CQlzc19zaXplOworfSBzdGFja190OworCitzdHJ1Y3Qgc3BhcmNfZGVsaXZlcl9jb29raWUgeworCWludCByZXN0YXJ0X3N5c2NhbGw7CisJdW5zaWduZWQgbG9uZyBvcmlnX2kwOworfTsKKworc3RydWN0IHB0X3JlZ3M7CitleHRlcm4gdm9pZCBwdHJhY2Vfc2lnbmFsX2RlbGl2ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHZvaWQgKmNvb2tpZSk7CisKKyNlbmRpZiAvKiAhKF9fS0VSTkVMX18pICovCisKKyNlbmRpZiAvKiAhKF9fQVNTRU1CTFlfXykgKi8KKworI2VuZGlmIC8qICEoX0FTTVNQQVJDX1NJR05BTF9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvc21wLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9zbXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTg2YzBkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvc21wLmgKQEAgLTAsMCArMSwxNzYgQEAKKy8qIHNtcC5oOiBTcGFyYyBzcGVjaWZpYyBTTVAgc3R1ZmYuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk2IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKKyAqLworCisjaWZuZGVmIF9TUEFSQ19TTVBfSAorI2RlZmluZSBfU1BBUkNfU01QX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKyNpbmNsdWRlIDxhc20vaGVhZC5oPgorI2luY2x1ZGUgPGFzbS9idGZpeHVwLmg+CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworI2lmZGVmIENPTkZJR19TTVAKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vYXNpLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorCisvKgorICoJUHJpdmF0ZSByb3V0aW5lcy9kYXRhCisgKi8KKyAKK2V4dGVybiB1bnNpZ25lZCBjaGFyIGJvb3RfY3B1X2lkOworZXh0ZXJuIGNwdW1hc2tfdCBwaHlzX2NwdV9wcmVzZW50X21hcDsKKyNkZWZpbmUgY3B1X3Bvc3NpYmxlX21hcCBwaHlzX2NwdV9wcmVzZW50X21hcAorCit0eXBlZGVmIHZvaWQgKCpzbXBmdW5jX3QpKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsCisJCSAgICAgICB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKKworLyoKKyAqCUdlbmVyYWwgZnVuY3Rpb25zIHRoYXQgZWFjaCBob3N0IHN5c3RlbSBtdXN0IHByb3ZpZGUuCisgKi8KKyAKK3ZvaWQgc3VuNG1faW5pdF9zbXAodm9pZCk7Cit2b2lkIHN1bjRkX2luaXRfc21wKHZvaWQpOworCit2b2lkIHNtcF9jYWxsaW4odm9pZCk7Cit2b2lkIHNtcF9ib290X2NwdXModm9pZCk7Cit2b2lkIHNtcF9zdG9yZV9jcHVfaW5mbyhpbnQpOworCitzdHJ1Y3Qgc2VxX2ZpbGU7Cit2b2lkIHNtcF9ib2dvKHN0cnVjdCBzZXFfZmlsZSAqKTsKK3ZvaWQgc21wX2luZm8oc3RydWN0IHNlcV9maWxlICopOworCitCVEZJWFVQREVGX0NBTEwodm9pZCwgc21wX2Nyb3NzX2NhbGwsIHNtcGZ1bmNfdCwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKK0JURklYVVBERUZfQ0FMTCh2b2lkLCBzbXBfbWVzc2FnZV9wYXNzLCBpbnQsIGludCwgdW5zaWduZWQgbG9uZywgaW50KQorQlRGSVhVUERFRl9DQUxMKGludCwgX19oYXJkX3NtcF9wcm9jZXNzb3JfaWQsIHZvaWQpCitCVEZJWFVQREVGX0JMQUNLQk9YKGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCkKK0JURklYVVBERUZfQkxBQ0tCT1gobG9hZF9jdXJyZW50KQorCisjZGVmaW5lIHNtcF9jcm9zc19jYWxsKGZ1bmMsYXJnMSxhcmcyLGFyZzMsYXJnNCxhcmc1KSBCVEZJWFVQX0NBTEwoc21wX2Nyb3NzX2NhbGwpKGZ1bmMsYXJnMSxhcmcyLGFyZzMsYXJnNCxhcmc1KQorI2RlZmluZSBzbXBfbWVzc2FnZV9wYXNzKHRhcmdldCxtc2csZGF0YSx3YWl0KSBCVEZJWFVQX0NBTEwoc21wX21lc3NhZ2VfcGFzcykodGFyZ2V0LG1zZyxkYXRhLHdhaXQpCisKK2V4dGVybiBfX2lubGluZV9fIHZvaWQgeGMwKHNtcGZ1bmNfdCBmdW5jKSB7IHNtcF9jcm9zc19jYWxsKGZ1bmMsIDAsIDAsIDAsIDAsIDApOyB9CitleHRlcm4gX19pbmxpbmVfXyB2b2lkIHhjMShzbXBmdW5jX3QgZnVuYywgdW5zaWduZWQgbG9uZyBhcmcxKQoreyBzbXBfY3Jvc3NfY2FsbChmdW5jLCBhcmcxLCAwLCAwLCAwLCAwKTsgfQorZXh0ZXJuIF9faW5saW5lX18gdm9pZCB4YzIoc21wZnVuY190IGZ1bmMsIHVuc2lnbmVkIGxvbmcgYXJnMSwgdW5zaWduZWQgbG9uZyBhcmcyKQoreyBzbXBfY3Jvc3NfY2FsbChmdW5jLCBhcmcxLCBhcmcyLCAwLCAwLCAwKTsgfQorZXh0ZXJuIF9faW5saW5lX18gdm9pZCB4YzMoc21wZnVuY190IGZ1bmMsIHVuc2lnbmVkIGxvbmcgYXJnMSwgdW5zaWduZWQgbG9uZyBhcmcyLAorCQkJICAgdW5zaWduZWQgbG9uZyBhcmczKQoreyBzbXBfY3Jvc3NfY2FsbChmdW5jLCBhcmcxLCBhcmcyLCBhcmczLCAwLCAwKTsgfQorZXh0ZXJuIF9faW5saW5lX18gdm9pZCB4YzQoc21wZnVuY190IGZ1bmMsIHVuc2lnbmVkIGxvbmcgYXJnMSwgdW5zaWduZWQgbG9uZyBhcmcyLAorCQkJICAgdW5zaWduZWQgbG9uZyBhcmczLCB1bnNpZ25lZCBsb25nIGFyZzQpCit7IHNtcF9jcm9zc19jYWxsKGZ1bmMsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIDApOyB9CitleHRlcm4gX19pbmxpbmVfXyB2b2lkIHhjNShzbXBmdW5jX3QgZnVuYywgdW5zaWduZWQgbG9uZyBhcmcxLCB1bnNpZ25lZCBsb25nIGFyZzIsCisJCQkgICB1bnNpZ25lZCBsb25nIGFyZzMsIHVuc2lnbmVkIGxvbmcgYXJnNCwgdW5zaWduZWQgbG9uZyBhcmc1KQoreyBzbXBfY3Jvc3NfY2FsbChmdW5jLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1KTsgfQorCitleHRlcm4gX19pbmxpbmVfXyBpbnQgc21wX2NhbGxfZnVuY3Rpb24odm9pZCAoKmZ1bmMpKHZvaWQgKmluZm8pLCB2b2lkICppbmZvLCBpbnQgbm9uYXRvbWljLCBpbnQgd2FpdCkKK3sKKwl4YzEoKHNtcGZ1bmNfdClmdW5jLCAodW5zaWduZWQgbG9uZylpbmZvKTsKKwlyZXR1cm4gMDsKK30KKworZXh0ZXJuIF9fdm9sYXRpbGVfXyBpbnQgX19jcHVfbnVtYmVyX21hcFtOUl9DUFVTXTsKK2V4dGVybiBfX3ZvbGF0aWxlX18gaW50IF9fY3B1X2xvZ2ljYWxfbWFwW05SX0NQVVNdOworCitleHRlcm4gX19pbmxpbmVfXyBpbnQgY3B1X2xvZ2ljYWxfbWFwKGludCBjcHUpCit7CisJcmV0dXJuIF9fY3B1X2xvZ2ljYWxfbWFwW2NwdV07Cit9CitleHRlcm4gX19pbmxpbmVfXyBpbnQgY3B1X251bWJlcl9tYXAoaW50IGNwdSkKK3sKKwlyZXR1cm4gX19jcHVfbnVtYmVyX21hcFtjcHVdOworfQorCitleHRlcm4gX19pbmxpbmVfXyBpbnQgaGFyZF9zbXA0bV9wcm9jZXNzb3JfaWQodm9pZCkKK3sKKwlpbnQgY3B1aWQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygicmQgJSV0YnIsICUwXG5cdCIKKwkJCSAgICAgInNybCAlMCwgMTIsICUwXG5cdCIKKwkJCSAgICAgImFuZCAlMCwgMywgJTBcblx0IiA6CisJCQkgICAgICI9JnIiIChjcHVpZCkpOworCXJldHVybiBjcHVpZDsKK30KKworZXh0ZXJuIF9faW5saW5lX18gaW50IGhhcmRfc21wNGRfcHJvY2Vzc29yX2lkKHZvaWQpCit7CisJaW50IGNwdWlkOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oImxkYSBbJSVnMF0gJTEsICUwXG5cdCIgOgorCQkJICAgICAiPSZyIiAoY3B1aWQpIDogImkiIChBU0lfTV9WSUtJTkdfVE1QMSkpOworCXJldHVybiBjcHVpZDsKK30KKworI2lmbmRlZiBNT0RVTEUKK2V4dGVybiBfX2lubGluZV9fIGludCBoYXJkX3NtcF9wcm9jZXNzb3JfaWQodm9pZCkKK3sKKwlpbnQgY3B1aWQ7CisKKwkvKiBCbGFjayBib3ggLSBzdW40bQorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygicmQgJSV0YnIsICUwXG5cdCIKKwkJCQkgICAgICJzcmwgJTAsIDEyLCAlMFxuXHQiCisJCQkJICAgICAiYW5kICUwLCAzLCAlMFxuXHQiIDoKKwkJCQkgICAgICI9JnIiIChjcHVpZCkpOworCSAgICAgICAgICAgICAtIHN1bjRkCisJICAgCV9fYXNtX18gX192b2xhdGlsZV9fKCJsZGEgWyVnMF0gQVNJX01fVklLSU5HX1RNUDEsICUwXG5cdCIKKwkgICAJCQkgICAgICJub3A7IG5vcCIgOgorCSAgIAkJCSAgICAgIj0mciIgKGNwdWlkKSk7CisJICAgU2VlIGJ0Zml4dXAuaCBhbmQgYnRmaXh1cHByZXAuYyB0byB1bmRlcnN0YW5kIGhvdyBhIGJsYWNrYm94IHdvcmtzLgorCSAqLworCV9fYXNtX18gX192b2xhdGlsZV9fKCJzZXRoaSAlJWhpKF9fX2JfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKSwgJTBcblx0IgorCQkJICAgICAic2V0aGkgJSVoaShib290X2NwdV9pZCksICUwXG5cdCIKKwkJCSAgICAgImxkdWIgWyUwICsgJSVsbyhib290X2NwdV9pZCldLCAlMFxuXHQiIDoKKwkJCSAgICAgIj0mciIgKGNwdWlkKSk7CisJcmV0dXJuIGNwdWlkOworfQorI2Vsc2UKK2V4dGVybiBfX2lubGluZV9fIGludCBoYXJkX3NtcF9wcm9jZXNzb3JfaWQodm9pZCkKK3sKKwlpbnQgY3B1aWQ7CisJCisJX19hc21fXyBfX3ZvbGF0aWxlX18oIm1vdiAlJW83LCAlJWcxXG5cdCIKKwkJCSAgICAgImNhbGwgX19fZl9fX2hhcmRfc21wX3Byb2Nlc3Nvcl9pZFxuXHQiCisJCQkgICAgICIgbm9wXG5cdCIKKwkJCSAgICAgIm1vdiAlJWcyLCAlMFxuXHQiIDogIj1yIihjcHVpZCkgOiA6ICJnMSIsICJnMiIpOworCXJldHVybiBjcHVpZDsKK30KKyNlbmRpZgorCisjZGVmaW5lIHNtcF9wcm9jZXNzb3JfaWQoKQkoY3VycmVudF90aHJlYWRfaW5mbygpLT5jcHUpCisKKyNkZWZpbmUgcHJvZl9tdWx0aXBsaWVyKF9fY3B1KQkJY3B1X2RhdGEoX19jcHUpLm11bHRpcGxpZXIKKyNkZWZpbmUgcHJvZl9jb3VudGVyKF9fY3B1KQkJY3B1X2RhdGEoX19jcHUpLmNvdW50ZXIKKworI2VuZGlmIC8qICEoX19BU1NFTUJMWV9fKSAqLworCisvKiBTcGFyYyBzcGVjaWZpYyBtZXNzYWdlcy4gKi8KKyNkZWZpbmUgTVNHX0NST1NTX0NBTEwgICAgICAgICAweDAwMDUgICAgICAgLyogcnVuIGZ1bmMgb24gY3B1cyAqLworCisvKiBFbXBpcmljYWwgUFJPTSBwcm9jZXNzb3IgbWFpbGJveCBjb25zdGFudHMuICBJZiB0aGUgcGVyLWNwdSBtYWlsYm94CisgKiBjb250YWlucyBzb21ldGhpbmcgb3RoZXIgdGhhbiBvbmUgb2YgdGhlc2UgdGhlbiB0aGUgaXBpIGlzIGZyb20KKyAqIExpbnV4J3MgYWN0aXZlX2tlcm5lbF9wcm9jZXNzb3IuICBUaGlzIGZhY2lsaXR5IGV4aXN0cyBzbyB0aGF0CisgKiB0aGUgYm9vdCBtb25pdG9yIGNhbiBjYXB0dXJlIGFsbCB0aGUgb3RoZXIgY3B1cyB3aGVuIG9uZSBjYXRjaGVzCisgKiBhIHdhdGNoZG9nIHJlc2V0IG9yIHRoZSB1c2VyIGVudGVycyB0aGUgbW9uaXRvciB1c2luZyBMMS1BIGtleXMuCisgKi8KKyNkZWZpbmUgTUJPWF9TVE9QQ1BVICAgICAgICAgIDB4RkIKKyNkZWZpbmUgTUJPWF9JRExFQ1BVICAgICAgICAgIDB4RkMKKyNkZWZpbmUgTUJPWF9JRExFQ1BVMiAgICAgICAgIDB4RkQKKyNkZWZpbmUgTUJPWF9TVE9QQ1BVMiAgICAgICAgIDB4RkUKKworI2VuZGlmIC8qIFNNUCAqLworCisjZGVmaW5lIE5PX1BST0NfSUQgICAgICAgICAgICAweEZGCisKKyNlbmRpZiAvKiAhKF9TUEFSQ19TTVBfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3NtcHByaW0uaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3NtcHByaW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjljMjhlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvc21wcHJpbS5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qICAkSWQ6IHNtcHByaW0uaCx2IDEuNSAxOTk2LzA4LzI5IDA5OjQ4OjQ5IGRhdmVtIEV4cCAkCisgKiAgc21wcHJpbS5oOiAgU01QIGxvY2tpbmcgcHJpbWl0aXZlcyBvbiB0aGUgU3BhcmMKKyAqCisgKiAgR29kIGtub3dzIHdlIHdvbid0IGJlIGFjdHVhbGx5IHVzaW5nIHRoaXMgY29kZSBmb3Igc29tZSB0aW1lCisgKiAgYnV0IEkgdGhvdWdodCBJJ2Qgd3JpdGUgaXQgc2luY2UgSSBrbmV3IGhvdy4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk1IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKKyAqLworCisjaWZuZGVmIF9fU1BBUkNfU01QUFJJTV9ICisjZGVmaW5lIF9fU1BBUkNfU01QUFJJTV9ICisKKy8qIFRlc3QgYW5kIHNldCB0aGUgdW5zaWduZWQgYnl0ZSBhdCBBRERSIHRvIDEuICBSZXR1cm5zIHRoZSBwcmV2aW91cworICogdmFsdWUuICBPbiB0aGUgU3BhcmMgd2UgdXNlIHRoZSBsZHN0dWIgaW5zdHJ1Y3Rpb24gc2luY2UgaXQgaXMKKyAqIGF0b21pYy4KKyAqLworCitleHRlcm4gX19pbmxpbmVfXyBfX3ZvbGF0aWxlX18gY2hhciB0ZXN0X2FuZF9zZXQodm9pZCAqYWRkcikKK3sKKwljaGFyIHN0YXRlID0gMDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKCJsZHN0dWIgWyUwXSwgJTEgICAgICAgICAhIHRlc3RfYW5kX3NldFxuXHQiCisJCQkgICAgICI9ciIgKGFkZHIpLCAiPXIiIChzdGF0ZSkgOgorCQkJICAgICAiMCIgKGFkZHIpLCAiMSIgKHN0YXRlKSA6ICJtZW1vcnkiKTsKKworCXJldHVybiBzdGF0ZTsKK30KKworLyogSW5pdGlhbGl6ZSBhIHNwaW4tbG9jay4gKi8KK2V4dGVybiBfX2lubGluZV9fIF9fdm9sYXRpbGVfXyBzbXBfaW5pdGxvY2sodm9pZCAqc3BpbmxvY2spCit7CisJLyogVW5zZXQgdGhlIGxvY2suICovCisJKigodW5zaWduZWQgY2hhciAqKSBzcGlubG9jaykgPSAwOworCisJcmV0dXJuOworfQorCisvKiBUaGlzIHJvdXRpbmUgc3BpbnMgdW50aWwgaXQgYWNxdWlyZXMgdGhlIGxvY2sgYXQgQUREUi4gKi8KK2V4dGVybiBfX2lubGluZV9fIF9fdm9sYXRpbGVfXyBzbXBfbG9jayh2b2lkICphZGRyKQoreworCXdoaWxlKHRlc3RfYW5kX3NldChhZGRyKSA9PSAweGZmKQorCQk7CisKKwkvKiBXZSBub3cgaGF2ZSB0aGUgbG9jayAqLworCXJldHVybjsKK30KKworLyogVGhpcyByb3V0aW5lIHJlbGVhc2VzIHRoZSBsb2NrIGF0IEFERFIuICovCitleHRlcm4gX19pbmxpbmVfXyBfX3ZvbGF0aWxlX18gc21wX3VubG9jayh2b2lkICphZGRyKQoreworCSooKHVuc2lnbmVkIGNoYXIgKikgYWRkcikgPSAwOworfQorCisjZW5kaWYgLyogIShfX1NQQVJDX1NNUFBSSU1fSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3NvY2tldC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvc29ja2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzExNTRlMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3NvY2tldC5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qICRJZDogc29ja2V0LmgsdiAxLjE3IDIwMDEvMDYvMTMgMTY6MjU6MDMgZGF2ZW0gRXhwICQgKi8KKyNpZm5kZWYgX0FTTV9TT0NLRVRfSAorI2RlZmluZSBfQVNNX1NPQ0tFVF9ICisKKyNpbmNsdWRlIDxhc20vc29ja2lvcy5oPgorCisvKiBGb3Igc2V0c29ja29wdCgyKSAqLworI2RlZmluZSBTT0xfU09DS0VUCTB4ZmZmZgorCisjZGVmaW5lIFNPX0RFQlVHCTB4MDAwMQorI2RlZmluZSBTT19QQVNTQ1JFRAkweDAwMDIKKyNkZWZpbmUgU09fUkVVU0VBRERSCTB4MDAwNAorI2RlZmluZSBTT19LRUVQQUxJVkUJMHgwMDA4CisjZGVmaW5lIFNPX0RPTlRST1VURQkweDAwMTAKKyNkZWZpbmUgU09fQlJPQURDQVNUCTB4MDAyMAorI2RlZmluZSBTT19QRUVSQ1JFRAkweDAwNDAKKyNkZWZpbmUgU09fTElOR0VSCTB4MDA4MAorI2RlZmluZSBTT19PT0JJTkxJTkUJMHgwMTAwCisvKiBUbyBhZGQgOiNkZWZpbmUgU09fUkVVU0VQT1JUIDB4MDIwMCAqLworI2RlZmluZSBTT19CU0RDT01QQVQgICAgMHgwNDAwCisjZGVmaW5lIFNPX1JDVkxPV0FUICAgICAweDA4MDAKKyNkZWZpbmUgU09fU05ETE9XQVQgICAgIDB4MTAwMAorI2RlZmluZSBTT19SQ1ZUSU1FTyAgICAgMHgyMDAwCisjZGVmaW5lIFNPX1NORFRJTUVPICAgICAweDQwMDAKKyNkZWZpbmUgU09fQUNDRVBUQ09OTgkweDgwMDAKKworLyogd2hhIT8/PyAqLworI2RlZmluZSBTT19ET05UTElOR0VSICAgKH5TT19MSU5HRVIpICAvKiBPbGRlciBTdW5PUyBjb21wYXQuIGhhY2sgKi8KKworI2RlZmluZSBTT19TTkRCVUYJMHgxMDAxCisjZGVmaW5lIFNPX1JDVkJVRgkweDEwMDIKKyNkZWZpbmUgU09fRVJST1IJMHgxMDA3CisjZGVmaW5lIFNPX1RZUEUJCTB4MTAwOAorCisvKiBMaW51eCBzcGVjaWZpYywga2VlcCB0aGUgc2FtZS4gKi8KKyNkZWZpbmUgU09fTk9fQ0hFQ0sJMHgwMDBiCisjZGVmaW5lIFNPX1BSSU9SSVRZCTB4MDAwYworCisjZGVmaW5lIFNPX0JJTkRUT0RFVklDRSAweDAwMGQKKworI2RlZmluZSBTT19BVFRBQ0hfRklMVEVSCTB4MDAxYQorI2RlZmluZSBTT19ERVRBQ0hfRklMVEVSICAgICAgICAweDAwMWIKKworI2RlZmluZSBTT19QRUVSTkFNRQkJMHgwMDFjCisjZGVmaW5lIFNPX1RJTUVTVEFNUAkJMHgwMDFkCisjZGVmaW5lIFNDTV9USU1FU1RBTVAJCVNPX1RJTUVTVEFNUAorCisjZGVmaW5lIFNPX1BFRVJTRUMJCTB4MTAwZQorCisvKiBTZWN1cml0eSBsZXZlbHMgLSBhcyBwZXIgTlJMIElQdjYgLSBkb24ndCBhY3R1YWxseSBkbyBhbnl0aGluZyAqLworI2RlZmluZSBTT19TRUNVUklUWV9BVVRIRU5USUNBVElPTgkJMHg1MDAxCisjZGVmaW5lIFNPX1NFQ1VSSVRZX0VOQ1JZUFRJT05fVFJBTlNQT1JUCTB4NTAwMgorI2RlZmluZSBTT19TRUNVUklUWV9FTkNSWVBUSU9OX05FVFdPUksJCTB4NTAwNAorCisjZW5kaWYgLyogX0FTTV9TT0NLRVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvc29ja2lvcy5oIGIvaW5jbHVkZS9hc20tc3BhcmMvc29ja2lvcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjMDFiNTkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9zb2NraW9zLmgKQEAgLTAsMCArMSwxMyBAQAorI2lmbmRlZiBfQVNNX1NQQVJDX1NPQ0tJT1NfSAorI2RlZmluZSBfQVNNX1NQQVJDX1NPQ0tJT1NfSAorCisvKiBTb2NrZXQtbGV2ZWwgSS9PIGNvbnRyb2wgY2FsbHMuICovCisjZGVmaW5lIEZJT1NFVE9XTiAJMHg4OTAxCisjZGVmaW5lIFNJT0NTUEdSUAkweDg5MDIKKyNkZWZpbmUgRklPR0VUT1dOCTB4ODkwMworI2RlZmluZSBTSU9DR1BHUlAJMHg4OTA0CisjZGVmaW5lIFNJT0NBVE1BUksJMHg4OTA1CisjZGVmaW5lIFNJT0NHU1RBTVAJMHg4OTA2CQkvKiBHZXQgc3RhbXAgKi8KKworI2VuZGlmIC8qICEoX0FTTV9TUEFSQ19TT0NLSU9TX0gpICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3NvbGVycm5vLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9zb2xlcnJuby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhYmNlN2UKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9zb2xlcnJuby5oCkBAIC0wLDAgKzEsMTMyIEBACisvKiAkSWQ6IHNvbGVycm5vLmgsdiAxLjUgMTk5Ni8wNC8yNSAwNjoxMzozMiBkYXZlbSBFeHAgJAorICogc29sZXJybm8uaDogU29sYXJpcyBlcnJvciByZXR1cm4gY29kZXMgZm9yIGNvbXBhdGliaWxpdHkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKKyAqLworCisjaWZuZGVmIF9TUEFSQ19TT0xFUlJOT19ICisjZGVmaW5lIF9TUEFSQ19TT0xFUlJOT19ICisKKyNkZWZpbmUgU09MX0VQRVJNICAgICAgICAgIDEgICAgIC8qIFJlcXVpcmVkIHN1cGVydXNlciBhY2Nlc3MgcGVybXMgICovCisjZGVmaW5lIFNPTF9FTk9FTlQgICAgICAgICAyICAgICAvKiBGaWxlIG9yIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCAqLworI2RlZmluZSBTT0xfRVNSQ0ggICAgICAgICAgMyAgICAgLyogUHJvY2VzcyBkaWQgbm90IGV4aXN0ICAgICAgICAgICAgKi8KKyNkZWZpbmUJU09MX0VJTlRSICAgICAgICAgIDQgICAgIC8qIFN5c3RlbSBjYWxsIHdhcyBpbnRlcnJ1cHRlZCAgICAgICovCisjZGVmaW5lCVNPTF9FSU8gICAgICAgICAgICA1ICAgICAvKiBBbiBpL28gZXJyb3Igb2NjdXJyZWQgICAgICAgICAgICAqLworI2RlZmluZQlTT0xfRU5YSU8gICAgICAgICAgNiAgICAgLyogRGV2aWNlIG9yIEFkZHJlc3MgZG9lcyBub3QgZXhpc3QgKi8KKyNkZWZpbmUJU09MX0UyQklHICAgICAgICAgIDcJIC8qIFRvbyBtYW55IGFyZ3VtZW50cyB3ZXJlIGdpdmVuICAgICovCisjZGVmaW5lCVNPTF9FTk9FWEVDICAgICAgICA4ICAgICAvKiBIZWFkZXIgb2YgZXhlY3V0YWJsZSB3YXMgbXVuZ2VkICAqLworI2RlZmluZQlTT0xfRUJBREYgICAgICAgICAgOSAgICAgLyogQm9ndXMgZmlsZSBudW1iZXIgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJU09MX0VDSElMRCAgICAgICAgIDEwICAgIC8qIE5vIGNoaWxkcmVuIG9mIHByb2Nlc3MgZXhpc3QgICAgICovCisjZGVmaW5lCVNPTF9FQUdBSU4gICAgICAgICAxMSAgICAvKiBiZWVwIGJlZXAsICJ0cnkgYWdhaW4gbGF0ZXIiICAgICAqLworI2RlZmluZQlTT0xfRU5PTUVNICAgICAgICAgMTIgICAgLyogTm8gbWVtb3J5IGF2YWlsYWJsZSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJU09MX0VBQ0NFUyAgICAgICAgIDEzICAgIC8qIEFjY2VzcyBub3QgYWxsb3dlZCAgICAgICAgICAgICAgICovCisjZGVmaW5lCVNPTF9FRkFVTFQgICAgICAgICAxNCAgICAvKiBBZGRyZXNzIHBhc3NlZCB3YXMgaW52YWxpZCAgICAgICAqLworI2RlZmluZQlTT0xfRU5PVEJMSyAgICAgICAgMTUgICAgLyogYmxrZGV2IG9wIG9uIG5vbi1ibG9jayBkZXZpY2UgICAgKi8KKyNkZWZpbmUJU09MX0VCVVNZICAgICAgICAgIDE2ICAgIC8qIE1vdW50ZWQgZGV2aWNlIHdhcyBidXN5ICAgICAgICAgICovCisjZGVmaW5lCVNPTF9FRVhJU1QgICAgICAgICAxNyAgICAvKiBGaWxlIHNwZWNpZmllZCBhbHJlYWR5IGV4aXN0cyAgICAqLworI2RlZmluZQlTT0xfRVhERVYgICAgICAgICAgMTggICAgLyogTGluayByZXF1ZXN0IGFjcm9zcyBkaWZmIGRldmljZXMgKi8KKyNkZWZpbmUJU09MX0VOT0RFViAgICAgICAgIDE5ICAgIC8qIERldmljZSBkb2VzIG5vdCBleGlzdCBvbiBzeXN0ZW0gICovCisjZGVmaW5lCVNPTF9FTk9URElSICAgICAgICAyMCAgICAvKiBEaXIgb3BlcmF0aW9uIG9uIG5vbi1kaXJlY3RvcnkgICAqLworI2RlZmluZQlTT0xfRUlTRElSICAgICAgICAgMjEgICAgLyogRmlsZSB3YXMgb2YgZGlyZWN0b3J5IHR5cGUgICAgICAgKi8KKyNkZWZpbmUJU09MX0VJTlZBTCAgICAgICAgIDIyICAgIC8qIEFyZ3VtZW50IHBhc3NlZCB3YXMgaW52YWxpZCAgICAgICovCisjZGVmaW5lCVNPTF9FTkZJTEUgICAgICAgICAyMyAgICAvKiBObyBtb3JlIHJvb20gaW4gZmlsZSB0YWJsZSAgICAgICAqLworI2RlZmluZQlTT0xfRU1GSUxFICAgICAgICAgMjQgICAgLyogUHJvYyBoYXMgdG9vIG1hbnkgZmlsZXMgb3BlbiAgICAgKi8KKyNkZWZpbmUJU09MX0VOT1RUWSAgICAgICAgIDI1ICAgIC8qIElvY3RsIHdhcyBpbnZhbGlkIGZvciByZXEgZGV2aWNlICovCisjZGVmaW5lCVNPTF9FVFhUQlNZICAgICAgICAyNiAgICAvKiBUZXh0IGZpbGUgaW4gYnVzeSBzdGF0ZSAgICAgICAgICAqLworI2RlZmluZQlTT0xfRUZCSUcgICAgICAgICAgMjcgICAgLyogVG9vIGJpZyBvZiBhIGZpbGUgZm9yIG9wZXJhdGlvbiAgKi8KKyNkZWZpbmUJU09MX0VOT1NQQyAgICAgICAgIDI4ICAgIC8qIERpc2sgaXMgZnVsbCAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lCVNPTF9FU1BJUEUgICAgICAgICAyOSAgICAvKiBTZWVrIGF0dGVtcHRlZCBvbiBub24tc2Vla2luZyBkZXYqLworI2RlZmluZQlTT0xfRVJPRlMgICAgICAgICAgMzAgICAgLyogV3JpdGUgYXR0ZW1wdGVkIG9uIHJlYWQtb25seSBmcyAgKi8KKyNkZWZpbmUJU09MX0VNTElOSyAgICAgICAgIDMxICAgIC8qIFRvbyBtYW55IGxpbmtzIGluIGZpbGUgc2VhcmNoICAgICovCisjZGVmaW5lCVNPTF9FUElQRSAgICAgICAgICAzMiAgICAvKiBDYWxsIGEgcGx1bWJlciAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZQlTT0xfRURPTSAgICAgICAgICAgMzMgICAgLyogQXJndW1lbnQgd2FzIG91dCBvZiBmY3QgZG9tYWluICAgKi8KKyNkZWZpbmUJU09MX0VSQU5HRSAgICAgICAgIDM0ICAgIC8qIENvdWxkIG5vdCByZXByZXNlbnQgbWF0aCByZXN1bHQgICovCisjZGVmaW5lCVNPTF9FTk9NU0cgICAgICAgICAzNSAgICAvKiBNZXNzYWdlIG9mIHJlcSB0eXBlIGRvZXNuJ3QgZXhpc3QgKi8KKyNkZWZpbmUJU09MX0VJRFJNICAgICAgICAgIDM2ICAgIC8qIElkZW50aWZpZXIgaGFzIGJlZW4gcmVtb3ZlZCAgICAgICovCisjZGVmaW5lCVNPTF9FQ0hSTkcgICAgICAgICAzNyAgICAvKiBSZXEgY2hhbm5lbCBudW1iZXIgb3V0IG9mIHJhbmdlICAqLworI2RlZmluZQlTT0xfRUwyTlNZTkMgICAgICAgMzggICAgLyogQ291bGQgbm90IHN5bmMgYXQgcnVuIGxldmVsIDIgICAgKi8KKyNkZWZpbmUJU09MX0VMM0hMVCAgICAgICAgIDM5ICAgIC8qIEhhbHRlZCBhdCBydW4gbGV2ZWwgMyAgICAgICAgICAgICovCisjZGVmaW5lCVNPTF9FTDNSU1QgICAgICAgICA0MCAgICAvKiBSZXNldCBhdCBydW4gbGV2ZWwgMyAgICAgICAgICAgICAqLworI2RlZmluZQlTT0xfRUxOUk5HICAgICAgICAgNDEgICAgLyogT3V0IG9mIHJhbmdlIGxpbmsgbnVtYmVyICAgICAgICAgKi8KKyNkZWZpbmUJU09MX0VVTkFUQ0ggICAgICAgIDQyICAgIC8qIERyaXZlciBmb3IgcHJvdG9jb2wgbm90IGF0dGFjaGVkICovCisjZGVmaW5lCVNPTF9FTk9DU0kgICAgICAgICA0MyAgICAvKiBDU0kgc3RydWN0dXJlIG5vdCBhcm91bmQgICAgICAgICAqLworI2RlZmluZQlTT0xfRUwySExUICAgICAgICAgNDQgICAgLyogSGFsdGVkIGF0IHJ1biBsZXZlbCAyICAgICAgICAgICAgKi8KKyNkZWZpbmUJU09MX0VERUFETEsgICAgICAgIDQ1ICAgIC8qIERlYWRsb2NrIGNvbmRpdGlvbiBkZXRlY3RlZCAgICAgICovCisjZGVmaW5lCVNPTF9FTk9MQ0sgICAgICAgICA0NiAgICAvKiBSZWNvcmQgbG9ja3MgdW5hdmFpbGFibGUgICAgICAgICAqLworI2RlZmluZQlTT0xfRUNBTkNFTEVEICAgICAgNDcgICAgLyogQ2FuY2VsbGF0aW9uIG9mIG9wZXIuIGhhcHBlbmVkICAgKi8KKyNkZWZpbmUJU09MX0VOT1RTVVAgICAgICAgIDQ4ICAgIC8qIEF0dGVtcHQgb2YgdW5zdXBwb3J0ZWQgb3BlcmF0aW9uICovCisjZGVmaW5lCVNPTF9FRFFVT1QgICAgICAgICA0OSAgICAvKiBVc2VycyBkaXNrIHF1b3RhIGV4Y2VlZGVkICAgICAgICAqLworI2RlZmluZQlTT0xfRUJBREUgICAgICAgICAgNTAgICAgLyogSW52YWxpZCBleGNoYW5nZSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJU09MX0VCQURSICAgICAgICAgIDUxICAgIC8qIFJlcXVlc3QgZGVzY3JpcHRvciB3YXMgaW52YWxpZCAgICovCisjZGVmaW5lCVNPTF9FWEZVTEwgICAgICAgICA1MiAgICAvKiBGdWxsIGV4Y2hhbmdlICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZQlTT0xfRU5PQU5PICAgICAgICAgNTMgICAgLyogYW5vIGRvZXMgbm90IGV4aXN0ICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJU09MX0VCQURSUUMgICAgICAgIDU0ICAgIC8qIFJlcSBjb2RlIHdhcyBpbnZhbGlkICAgICAgICAgICAgICovCisjZGVmaW5lCVNPTF9FQkFEU0xUICAgICAgICA1NSAgICAvKiBCYWQgc2xvdCBudW1iZXIgICAgICAgICAgICAgICAgICAqLworI2RlZmluZQlTT0xfRURFQURMT0NLICAgICAgNTYgICAgLyogRGVhZGxvY2sgaW4gZnMgZXJyb3IgICAgICAgICAgICAgKi8KKyNkZWZpbmUJU09MX0VCRk9OVCAgICAgICAgIDU3ICAgIC8qIEZvbnQgZmlsZSBmb3JtYXQgaW52YWxpZCAgICAgICAgICovCisvKiBZT1csIEkgTE9WRSBTWVNWIFNUUkVBTVMhISEhICovCisjZGVmaW5lCVNPTF9FTk9TVFIgICAgICAgICA2MCAgICAvKiBTdHJlYW0tb3Agb24gbm9uLXN0cmVhbSBkZXYgICAgICAqLworI2RlZmluZQlTT0xfRU5PREFUQSAgICAgICAgNjEgICAgLyogTm8gZGF0YSBhdmFpbCBhdCB0aGlzIHRpbWUgICAgICAgKi8KKyNkZWZpbmUJU09MX0VUSU1FICAgICAgICAgIDYyICAgIC8qIEV4cGlyYXRpb24gb2YgdGltZSBvY2N1cnJlZCAgICAgICovCisjZGVmaW5lCVNPTF9FTk9TUiAgICAgICAgICA2MyAgICAvKiBTdHJlYW1zIHJlc291cmNlcyBleGhhdXN0ZWQgICAgICAqLworI2RlZmluZQlTT0xfRU5PTkVUICAgICAgICAgNjQgICAgLyogTm8gbmV0d29yayBjb25uZWN0ZWQgICAgICAgICAgICAgKi8KKyNkZWZpbmUJU09MX0VOT1BLRyAgICAgICAgIDY1ICAgIC8qIE5vbi1pbnN0YWxsZWQgcGFja2FnZSAgICAgICAgICAgICovCisjZGVmaW5lCVNPTF9FUkVNT1RFICAgICAgICA2NiAgICAvKiBPYmplY3Qgd2FzIG9uIHJlbW90ZSBtYWNoaW5lICAgICAqLworI2RlZmluZQlTT0xfRU5PTElOSyAgICAgICAgNjcgICAgLyogQ3V0IGxpbmsgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJU09MX0VBRFYgICAgICAgICAgIDY4ICAgIC8qIEVycm9yIGluIGFkdmVydGlzZSAgICAgICAgICAgICAgICovCisjZGVmaW5lCVNPTF9FU1JNTlQgICAgICAgICA2OSAgICAvKiBTb21lIG1hZ2ljIHNybW91bnQgcHJvYmxlbSAgICAgICAqLworI2RlZmluZQlTT0xfRUNPTU0gICAgICAgICAgNzAgICAgLyogRHVyaW5nIHNlbmQsIGNvbW0gZXJyb3Igb2NjdXJyZWQgKi8KKyNkZWZpbmUJU09MX0VQUk9UTyAgICAgICAgIDcxICAgIC8qIFByb3RvY29sIGJvdGNoICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lCVNPTF9FTVVMVElIT1AgICAgICA3NCAgICAvKiBNdWx0aWhvcCBhdHRlbXB0ZWQgICAgICAgICAgICAgICAqLworI2RlZmluZQlTT0xfRUJBRE1TRyAgICAgICAgNzcgICAgLyogTWVzc2FnZSB3YXMgdW5yZWFkYWJsZSAgICAgICAgICAgKi8KKyNkZWZpbmUJU09MX0VOQU1FVE9PTE9ORyAgIDc4ICAgIC8qIFRvbyBsb25nIG9mIGEgcGF0aCBuYW1lICAgICAgICAgICovCisjZGVmaW5lCVNPTF9FT1ZFUkZMT1cgICAgICA3OSAgICAvKiBEYXRhIHR5cGUgdG9vIHNtYWxsIGZvciBkYXR1bSAgICAqLworI2RlZmluZQlTT0xfRU5PVFVOSVEgICAgICAgODAgICAgLyogTG9naWNhbCBuYW1lIHdhcyBub3QgdW5pcXVlICAgICAgKi8KKyNkZWZpbmUJU09MX0VCQURGRCAgICAgICAgIDgxICAgIC8qIE9wIGNhbm5vdCBiZSBwZXJmb3JtZWQgb24gZmQgICAgICovCisjZGVmaW5lCVNPTF9FUkVNQ0hHICAgICAgICA4MiAgICAvKiBSZW1vdGUgYWRkcmVzcyBpcyBub3cgZGlmZmVyZW50ICAqLworI2RlZmluZQlTT0xfRUxJQkFDQyAgICAgICAgODMgICAgLyogU2hhcmVkIGxpYiBjb3VsZCBub3QgYmUgYWNjZXNzZWQgKi8KKyNkZWZpbmUJU09MX0VMSUJCQUQgICAgICAgIDg0ICAgIC8qIFNoTGliIGlzIGNvcnJ1cHRlZCBpbiBzb21lIHdheSAgICovCisjZGVmaW5lCVNPTF9FTElCU0NOICAgICAgICA4NSAgICAvKiBBLm91dCBTaExpYiBwcm9ibGVtcyAgICAgICAgICAgICAqLworI2RlZmluZQlTT0xfRUxJQk1BWCAgICAgICAgODYgICAgLyogRXhjZWVkZWQgU2hMaWIgbGlua2FnZSBsaW1pdCAgICAgKi8KKyNkZWZpbmUJU09MX0VMSUJFWEVDICAgICAgIDg3ICAgIC8qIEV4ZWN1dGlvbiBvZiBTaExpYiBhdHRlbXB0ZWQgICAgICovCisjZGVmaW5lCVNPTF9FSUxTRVEgICAgICAgICA4OCAgICAvKiBCYWQgYnl0ZSBzZXF1ZW5jZSBmb3VuZCAgICAgICAgICAqLworI2RlZmluZQlTT0xfRU5PU1lTICAgICAgICAgODkgICAgLyogSW52YWxpZCBmaWxlc3lzdGVtIG9wZXJhdGlvbiAgICAgKi8KKyNkZWZpbmUJU09MX0VMT09QICAgICAgICAgIDkwICAgIC8qIERldGVjdGVkIGxvb3AgaW4gc3ltYm9saWMgbGlua3MgICovCisjZGVmaW5lCVNPTF9FUkVTVEFSVCAgICAgICA5MSAgICAvKiBTeXN0ZW0gY2FsbCBpcyByZXN0YXJ0YWJsZSAgICAgICAqLworI2RlZmluZQlTT0xfRVNUUlBJUEUgICAgICAgOTIgICAgLyogRG8gbm90IHNsZWVwIGluIGhlYWQgb2Ygc3RyZWFtICAgKi8KKyNkZWZpbmUJU09MX0VOT1RFTVBUWSAgICAgIDkzICAgIC8qIFJtZGlyIG9mIG5vbi1lbXB0eSBkaXJlY3RvcnkgICAgICovCisjZGVmaW5lCVNPTF9FVVNFUlMgICAgICAgICA5NCAgICAvKiBPdmVyIGFidW5kYW5jZSBvZiB1c2VycyBmb3IgdWZzICAqLworI2RlZmluZQlTT0xfRU5PVFNPQ0sgICAgICAgOTUgICAgLyogU29jay1vcCBvbiBub24tc29jayAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJU09MX0VERVNUQUREUlJFUSAgIDk2ICAgIC8qIE5vIGRlc3QgYWRkciBnaXZlbiwgYnV0IG5lZWRlZCAgICovCisjZGVmaW5lCVNPTF9FTVNHU0laRSAgICAgICA5NyAgICAvKiBNc2cgdG9vIGJpZyAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZQlTT0xfRVBST1RPVFlQRSAgICAgOTggICAgLyogQmFkIHNvY2tldCBwcm90b2NvbCAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJU09MX0VOT1BST1RPT1BUICAgIDk5ICAgIC8qIFVuYXZhaWxhYmxlIHByb3RvY29sICAgICAgICAgICAgICovCisjZGVmaW5lCVNPTF9FUFJPVE9OT1NVUFBPUlQgMTIwICAvKiBVbnN1cHBvcnRlZCBwcm90b2NvbCAgICAgICAgICAgICAqLworI2RlZmluZQlTT0xfRVNPQ0tUTk9TVVBQT1JUIDEyMSAgLyogVW5zdXBwb3J0ZWQgc29ja2V0IHR5cGUgICAgICAgICAgKi8KKyNkZWZpbmUJU09MX0VPUE5PVFNVUFAgICAgIDEyMiAgIC8qIFVuc3VwcG9ydGVkIHNvY2stb3AgICAgICAgICAgICAgICovCisjZGVmaW5lCVNPTF9FUEZOT1NVUFBPUlQgICAxMjMgICAvKiBVbnN1cHBvcnRlZCBwcm90b2NvbCBmYW1pbHkgICAgICAqLworI2RlZmluZQlTT0xfRUFGTk9TVVBQT1JUICAgMTI0ICAgLyogVW5zdXAgYWRkciBmYW1pbHkgZm9yIHByb3RvY29sICAgKi8KKyNkZWZpbmUJU09MX0VBRERSSU5VU0UgICAgIDEyNSAgIC8qIFJlcSBhZGRyIGlzIGFscmVhZHkgaW4gdXNlICAgICAgICovCisjZGVmaW5lCVNPTF9FQUREUk5PVEFWQUlMICAxMjYgICAvKiBSZXEgYWRkciBub3QgYXZhaWxhYmxlIHJpZ2h0IG5vdyAqLworI2RlZmluZQlTT0xfRU5FVERPV04gICAgICAgMTI3ICAgLyogWW91ciBzdWJuZXQgaXMgb24gZmlyZSAgICAgICAgICAgKi8KKyNkZWZpbmUJU09MX0VORVRVTlJFQUNIICAgIDEyOCAgIC8qIFNvbWVvbmUgcGxheWluZyB3aXRoIGdhdGV3YXkgYW5kICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkaWQgbm90IHRlbGwgeW91IGhlIHdhcyBnb2luZyB0byAqLworI2RlZmluZQlTT0xfRU5FVFJFU0VUICAgICAgMTI5ICAgLyogQnV5IGxlc3MtYnVnZ3kgZXRoZXJuZXQgY2FyZHMgICAgKi8KKyNkZWZpbmUJU09MX0VDT05OQUJPUlRFRCAgIDEzMCAgIC8qIEFib3J0ZWQgY29ubmVjdGlvbiBkdWUgdG8gc3cgICAgICovCisjZGVmaW5lCVNPTF9FQ09OTlJFU0VUICAgICAxMzEgICAvKiBZb3VyIHBlZXJzIHJlc2V0IHlvdXIgY29ubmVjdGlvbiAqLworI2RlZmluZQlTT0xfRU5PQlVGUyAgICAgICAgMTMyICAgLyogTm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZSAgICAgICAgKi8KKyNkZWZpbmUJU09MX0VJU0NPTk4gICAgICAgIDEzMyAgIC8qIENvbm5lY3Qgb24gYWxyZWFkeSBjb25uZWN0ZWQgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzb2NrZXQgYXR0ZW1wdGVkICAgICAgICAgICAgICAgICAqLworI2RlZmluZQlTT0xfRU5PVENPTk4gICAgICAgMTM0ICAgLyogQ29tbSBvbiBub24tY29ubmVjdGVkIHNvY2tldCAgICAgKi8KKyNkZWZpbmUJU09MX0VTSFVURE9XTiAgICAgIDE0MyAgIC8qIE9wIGF0dGVtcHRlZCBhZnRlciBzb2NrLXNodXRkb3duICovCisjZGVmaW5lCVNPTF9FVE9PTUFOWVJFRlMgICAxNDQgICAvKiBSZWZlcmVuY2UgbGltaXQgZXhjZWVkZWQgICAgICAgICAqLworI2RlZmluZQlTT0xfRVRJTUVET1VUICAgICAgMTQ1ICAgLyogVGltZWQgb3V0IGNvbm5lY3Rpb24gICAgICAgICAgICAgKi8KKyNkZWZpbmUJU09MX0VDT05OUkVGVVNFRCAgIDE0NiAgIC8qIENvbm5lY3Rpb24gcmVmdXNlZCBieSByZW1vdGUgaG9zdCovCisjZGVmaW5lCVNPTF9FSE9TVERPV04gICAgICAxNDcgICAvKiBSZW1vdGUgaG9zdCBpcyB1cCBpbiBmbGFtZXMgICAgICAqLworI2RlZmluZQlTT0xfRUhPU1RVTlJFQUNIICAgMTQ4ICAgLyogTWFrZSBhIGxlZnQgYXQgRWFzdG9uIEF2ZS4uLi4uICAgKi8KKyNkZWZpbmUJU09MX0VXT1VMREJMT0NLICAgIEVBR0FJTiAvKiBKdXN0IGFuIGFsaWFzICovCisjZGVmaW5lCVNPTF9FQUxSRUFEWSAgICAgICAxNDkgICAvKiBPcGVyYXRpb24gaXMgYWxyZWFkeSBvY2N1cnJpbmcgICAqLworI2RlZmluZQlTT0xfRUlOUFJPR1JFU1MgICAgMTUwICAgLyogT3BlcmF0aW9uIGlzIGhhcHBlbmluZyBub3cgICAgICAgKi8KKyNkZWZpbmUJU09MX0VTVEFMRSAgICAgICAgIDE1MSAgIC8qIEZ1bmd1cyBncm93dGggb24gTkZTIGZpbGUgaGFuZGxlICovCisKKyNlbmRpZiAvKiAhKF9TUEFSQ19TT0xFUlJOT19IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvc3BpbmxvY2suaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3NwaW5sb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNiZDg3YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3NwaW5sb2NrLmgKQEAgLTAsMCArMSwyMzggQEAKKy8qIHNwaW5sb2NrLmg6IDMyLWJpdCBTcGFyYyBzcGlubG9jayBzdXBwb3J0LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NyBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCisgKi8KKworI2lmbmRlZiBfX1NQQVJDX1NQSU5MT0NLX0gKKyNkZWZpbmUgX19TUEFSQ19TUElOTE9DS19ICisKKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CS8qIEZvciBOUl9DUFVTICovCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNpbmNsdWRlIDxhc20vcHNyLmg+CisKKyNpZmRlZiBDT05GSUdfREVCVUdfU1BJTkxPQ0sKK3N0cnVjdCBfc3BpbmxvY2tfZGVidWcgeworCXVuc2lnbmVkIGNoYXIgbG9jazsKKwl1bnNpZ25lZCBsb25nIG93bmVyX3BjOworI2lmZGVmIENPTkZJR19QUkVFTVBUCisJdW5zaWduZWQgaW50IGJyZWFrX2xvY2s7CisjZW5kaWYKK307Cit0eXBlZGVmIHN0cnVjdCBfc3BpbmxvY2tfZGVidWcgc3BpbmxvY2tfdDsKKworI2RlZmluZSBTUElOX0xPQ0tfVU5MT0NLRUQJKHNwaW5sb2NrX3QpIHsgMCwgMCB9CisjZGVmaW5lIHNwaW5fbG9ja19pbml0KGxwKQlkbyB7ICoobHApPSBTUElOX0xPQ0tfVU5MT0NLRUQ7IH0gd2hpbGUoMCkKKyNkZWZpbmUgc3Bpbl9pc19sb2NrZWQobHApICAoKigodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgmKChscCktPmxvY2spKSkgIT0gMCkKKyNkZWZpbmUgc3Bpbl91bmxvY2tfd2FpdChscCkJZG8geyBiYXJyaWVyKCk7IH0gd2hpbGUoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKCYobHApLT5sb2NrKSkKKworZXh0ZXJuIHZvaWQgX2RvX3NwaW5fbG9jayhzcGlubG9ja190ICpsb2NrLCBjaGFyICpzdHIpOworZXh0ZXJuIGludCBfc3Bpbl90cnlsb2NrKHNwaW5sb2NrX3QgKmxvY2spOworZXh0ZXJuIHZvaWQgX2RvX3NwaW5fdW5sb2NrKHNwaW5sb2NrX3QgKmxvY2spOworCisjZGVmaW5lIF9yYXdfc3Bpbl90cnlsb2NrKGxwKQlfc3Bpbl90cnlsb2NrKGxwKQorI2RlZmluZSBfcmF3X3NwaW5fbG9jayhsb2NrKQlfZG9fc3Bpbl9sb2NrKGxvY2ssICJzcGluX2xvY2siKQorI2RlZmluZSBfcmF3X3NwaW5fdW5sb2NrKGxvY2spCV9kb19zcGluX3VubG9jayhsb2NrKQorCitzdHJ1Y3QgX3J3bG9ja19kZWJ1ZyB7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50IGxvY2s7CisJdW5zaWduZWQgbG9uZyBvd25lcl9wYzsKKwl1bnNpZ25lZCBsb25nIHJlYWRlcl9wY1tOUl9DUFVTXTsKKyNpZmRlZiBDT05GSUdfUFJFRU1QVAorCXVuc2lnbmVkIGludCBicmVha19sb2NrOworI2VuZGlmCit9OwordHlwZWRlZiBzdHJ1Y3QgX3J3bG9ja19kZWJ1ZyByd2xvY2tfdDsKKworI2RlZmluZSBSV19MT0NLX1VOTE9DS0VEIChyd2xvY2tfdCkgeyAwLCAwLCB7MH0gfQorCisjZGVmaW5lIHJ3bG9ja19pbml0KGxwKQlkbyB7ICoobHApPSBSV19MT0NLX1VOTE9DS0VEOyB9IHdoaWxlKDApCisKK2V4dGVybiB2b2lkIF9kb19yZWFkX2xvY2socndsb2NrX3QgKnJ3LCBjaGFyICpzdHIpOworZXh0ZXJuIHZvaWQgX2RvX3JlYWRfdW5sb2NrKHJ3bG9ja190ICpydywgY2hhciAqc3RyKTsKK2V4dGVybiB2b2lkIF9kb193cml0ZV9sb2NrKHJ3bG9ja190ICpydywgY2hhciAqc3RyKTsKK2V4dGVybiB2b2lkIF9kb193cml0ZV91bmxvY2socndsb2NrX3QgKnJ3KTsKKworI2RlZmluZSBfcmF3X3JlYWRfbG9jayhsb2NrKQlcCitkbyB7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7IFwKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7IFwKKwlfZG9fcmVhZF9sb2NrKGxvY2ssICJyZWFkX2xvY2siKTsgXAorCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsgXAorfSB3aGlsZSgwKQorCisjZGVmaW5lIF9yYXdfcmVhZF91bmxvY2sobG9jaykgXAorZG8gewl1bnNpZ25lZCBsb25nIGZsYWdzOyBcCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOyBcCisJX2RvX3JlYWRfdW5sb2NrKGxvY2ssICJyZWFkX3VubG9jayIpOyBcCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOyBcCit9IHdoaWxlKDApCisKKyNkZWZpbmUgX3Jhd193cml0ZV9sb2NrKGxvY2spIFwKK2RvIHsJdW5zaWduZWQgbG9uZyBmbGFnczsgXAorCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsgXAorCV9kb193cml0ZV9sb2NrKGxvY2ssICJ3cml0ZV9sb2NrIik7IFwKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7IFwKK30gd2hpbGUoMCkKKworI2RlZmluZSBfcmF3X3dyaXRlX3VubG9jayhsb2NrKSBcCitkbyB7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7IFwKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7IFwKKwlfZG9fd3JpdGVfdW5sb2NrKGxvY2spOyBcCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOyBcCit9IHdoaWxlKDApCisKKyNlbHNlIC8qICFDT05GSUdfREVCVUdfU1BJTkxPQ0sgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGNoYXIgbG9jazsKKyNpZmRlZiBDT05GSUdfUFJFRU1QVAorCXVuc2lnbmVkIGludCBicmVha19sb2NrOworI2VuZGlmCit9IHNwaW5sb2NrX3Q7CisKKyNkZWZpbmUgU1BJTl9MT0NLX1VOTE9DS0VECShzcGlubG9ja190KSB7IDAgfQorCisjZGVmaW5lIHNwaW5fbG9ja19pbml0KGxvY2spICAgKCooKHVuc2lnbmVkIGNoYXIgKikobG9jaykpID0gMCkKKyNkZWZpbmUgc3Bpbl9pc19sb2NrZWQobG9jaykgICAgKCooKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikobG9jaykpICE9IDApCisKKyNkZWZpbmUgc3Bpbl91bmxvY2tfd2FpdChsb2NrKSBcCitkbyB7IFwKKwliYXJyaWVyKCk7IFwKK30gd2hpbGUoKigodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKWxvY2spKQorCitleHRlcm4gX19pbmxpbmVfXyB2b2lkIF9yYXdfc3Bpbl9sb2NrKHNwaW5sb2NrX3QgKmxvY2spCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJIlxuMTpcblx0IgorCSJsZHN0dWIJWyUwXSwgJSVnMlxuXHQiCisJIm9yY2MJJSVnMiwgMHgwLCAlJWcwXG5cdCIKKwkiYm5lLGEJMmZcblx0IgorCSIgbGR1YglbJTBdLCAlJWcyXG5cdCIKKwkiLnN1YnNlY3Rpb24JMlxuIgorCSIyOlxuXHQiCisJIm9yY2MJJSVnMiwgMHgwLCAlJWcwXG5cdCIKKwkiYm5lLGEJMmJcblx0IgorCSIgbGR1YglbJTBdLCAlJWcyXG5cdCIKKwkiYixhCTFiXG5cdCIKKwkiLnByZXZpb3VzXG4iCisJOiAvKiBubyBvdXRwdXRzICovCisJOiAiciIgKGxvY2spCisJOiAiZzIiLCAibWVtb3J5IiwgImNjIik7Cit9CisKK2V4dGVybiBfX2lubGluZV9fIGludCBfcmF3X3NwaW5fdHJ5bG9jayhzcGlubG9ja190ICpsb2NrKQoreworCXVuc2lnbmVkIGludCByZXN1bHQ7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oImxkc3R1YiBbJTFdLCAlMCIKKwkJCSAgICAgOiAiPXIiIChyZXN1bHQpCisJCQkgICAgIDogInIiIChsb2NrKQorCQkJICAgICA6ICJtZW1vcnkiKTsKKwlyZXR1cm4gKHJlc3VsdCA9PSAwKTsKK30KKworZXh0ZXJuIF9faW5saW5lX18gdm9pZCBfcmF3X3NwaW5fdW5sb2NrKHNwaW5sb2NrX3QgKmxvY2spCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0YiAlJWcwLCBbJTBdIiA6IDogInIiIChsb2NrKSA6ICJtZW1vcnkiKTsKK30KKworLyogUmVhZC13cml0ZSBzcGlubG9ja3MsIGFsbG93aW5nIG11bHRpcGxlIHJlYWRlcnMKKyAqIGJ1dCBvbmx5IG9uZSB3cml0ZXIuCisgKgorICogTk9URSEgaXQgaXMgcXVpdGUgY29tbW9uIHRvIGhhdmUgcmVhZGVycyBpbiBpbnRlcnJ1cHRzCisgKiBidXQgbm8gaW50ZXJydXB0IHdyaXRlcnMuIEZvciB0aG9zZSBjaXJjdW1zdGFuY2VzIHdlCisgKiBjYW4gIm1peCIgaXJxLXNhZmUgbG9ja3MgLSBhbnkgd3JpdGVyIG5lZWRzIHRvIGdldCBhCisgKiBpcnEtc2FmZSB3cml0ZS1sb2NrLCBidXQgcmVhZGVycyBjYW4gZ2V0IG5vbi1pcnFzYWZlCisgKiByZWFkLWxvY2tzLgorICoKKyAqIFhYWCBUaGlzIG1pZ2h0IGNyZWF0ZSBzb21lIHByb2JsZW1zIHdpdGggbXkgZHVhbCBzcGlubG9jaworICogWFhYIHNjaGVtZSwgZGVhZGxvY2tzIGV0Yy4gLURhdmVNCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbG9jazsKKyNpZmRlZiBDT05GSUdfUFJFRU1QVAorCXVuc2lnbmVkIGludCBicmVha19sb2NrOworI2VuZGlmCit9IHJ3bG9ja190OworCisjZGVmaW5lIFJXX0xPQ0tfVU5MT0NLRUQgKHJ3bG9ja190KSB7IDAgfQorCisjZGVmaW5lIHJ3bG9ja19pbml0KGxwKQlkbyB7ICoobHApPSBSV19MT0NLX1VOTE9DS0VEOyB9IHdoaWxlKDApCisKKworLyogU29ydCBvZiBsaWtlIGF0b21pY190J3Mgb24gU3BhcmMsIGJ1dCBldmVuIG1vcmUgY2xldmVyLgorICoKKyAqCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoJfCAyNC1iaXQgY291bnRlciAgICAgICAgICAgfCB3bG9jayB8ICByd2xvY2tfdAorICoJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgkgMzEgICAgICAgICAgICAgICAgICAgICAgIDggNyAgICAgMAorICoKKyAqIHdsb2NrIHNpZ25pZmllcyB0aGUgb25lIHdyaXRlciBpcyBpbiBvciBzb21lYm9keSBpcyB1cGRhdGluZworICogY291bnRlci4gRm9yIGEgd3JpdGVyLCBpZiBoZSBzdWNjZXNzZnVsbHkgYWNxdWlyZXMgdGhlIHdsb2NrLAorICogYnV0IGNvdW50ZXIgaXMgbm9uLXplcm8sIGhlIGhhcyB0byByZWxlYXNlIHRoZSBsb2NrIGFuZCB3YWl0LAorICogdGlsbCBib3RoIGNvdW50ZXIgYW5kIHdsb2NrIGFyZSB6ZXJvLgorICoKKyAqIFVuZm9ydHVuYXRlbHkgdGhpcyBzY2hlbWUgbGltaXRzIHVzIHRvIH4xNiwwMDAsMDAwIGNwdXMuCisgKi8KK2V4dGVybiBfX2lubGluZV9fIHZvaWQgX3JlYWRfbG9jayhyd2xvY2tfdCAqcncpCit7CisJcmVnaXN0ZXIgcndsb2NrX3QgKmxwIGFzbSgiZzEiKTsKKwlscCA9IHJ3OworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCSJtb3YJJSVvNywgJSVnNFxuXHQiCisJImNhbGwJX19fcndfcmVhZF9lbnRlclxuXHQiCisJIiBsZHN0dWIJWyUlZzEgKyAzXSwgJSVnMlxuIgorCTogLyogbm8gb3V0cHV0cyAqLworCTogInIiIChscCkKKwk6ICJnMiIsICJnNCIsICJtZW1vcnkiLCAiY2MiKTsKK30KKworI2RlZmluZSBfcmF3X3JlYWRfbG9jayhsb2NrKSBcCitkbyB7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7IFwKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7IFwKKwlfcmVhZF9sb2NrKGxvY2spOyBcCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOyBcCit9IHdoaWxlKDApCisKK2V4dGVybiBfX2lubGluZV9fIHZvaWQgX3JlYWRfdW5sb2NrKHJ3bG9ja190ICpydykKK3sKKwlyZWdpc3RlciByd2xvY2tfdCAqbHAgYXNtKCJnMSIpOworCWxwID0gcnc7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJIm1vdgklJW83LCAlJWc0XG5cdCIKKwkiY2FsbAlfX19yd19yZWFkX2V4aXRcblx0IgorCSIgbGRzdHViCVslJWcxICsgM10sICUlZzJcbiIKKwk6IC8qIG5vIG91dHB1dHMgKi8KKwk6ICJyIiAobHApCisJOiAiZzIiLCAiZzQiLCAibWVtb3J5IiwgImNjIik7Cit9CisKKyNkZWZpbmUgX3Jhd19yZWFkX3VubG9jayhsb2NrKSBcCitkbyB7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7IFwKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7IFwKKwlfcmVhZF91bmxvY2sobG9jayk7IFwKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7IFwKK30gd2hpbGUoMCkKKworZXh0ZXJuIF9faW5saW5lX18gdm9pZCBfcmF3X3dyaXRlX2xvY2socndsb2NrX3QgKnJ3KQoreworCXJlZ2lzdGVyIHJ3bG9ja190ICpscCBhc20oImcxIik7CisJbHAgPSBydzsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkibW92CSUlbzcsICUlZzRcblx0IgorCSJjYWxsCV9fX3J3X3dyaXRlX2VudGVyXG5cdCIKKwkiIGxkc3R1YglbJSVnMSArIDNdLCAlJWcyXG4iCisJOiAvKiBubyBvdXRwdXRzICovCisJOiAiciIgKGxwKQorCTogImcyIiwgImc0IiwgIm1lbW9yeSIsICJjYyIpOworfQorCisjZGVmaW5lIF9yYXdfd3JpdGVfdW5sb2NrKHJ3KQlkbyB7IChydyktPmxvY2sgPSAwOyB9IHdoaWxlKDApCisKKyNlbmRpZiAvKiBDT05GSUdfREVCVUdfU1BJTkxPQ0sgKi8KKworI2RlZmluZSBfcmF3X3NwaW5fbG9ja19mbGFncyhsb2NrLCBmbGFncykgX3Jhd19zcGluX2xvY2sobG9jaykKKworI2VuZGlmIC8qICEoX19BU1NFTUJMWV9fKSAqLworCisjZW5kaWYgLyogX19TUEFSQ19TUElOTE9DS19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9zdGF0LmggYi9pbmNsdWRlL2FzbS1zcGFyYy9zdGF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTViNDI3MgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3N0YXQuaApAQCAtMCwwICsxLDc3IEBACisvKiAkSWQ6IHN0YXQuaCx2IDEuMTIgMjAwMC8wOC8wNCAwNTozNTo1NSBkYXZlbSBFeHAgJCAqLworI2lmbmRlZiBfU1BBUkNfU1RBVF9ICisjZGVmaW5lIF9TUEFSQ19TVEFUX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3N0cnVjdCBfX29sZF9rZXJuZWxfc3RhdCB7CisJdW5zaWduZWQgc2hvcnQgc3RfZGV2OworCXVuc2lnbmVkIHNob3J0IHN0X2lubzsKKwl1bnNpZ25lZCBzaG9ydCBzdF9tb2RlOworCXVuc2lnbmVkIHNob3J0IHN0X25saW5rOworCXVuc2lnbmVkIHNob3J0IHN0X3VpZDsKKwl1bnNpZ25lZCBzaG9ydCBzdF9naWQ7CisJdW5zaWduZWQgc2hvcnQgc3RfcmRldjsKKwl1bnNpZ25lZCBsb25nICBzdF9zaXplOworCXVuc2lnbmVkIGxvbmcgIHN0X2F0aW1lOworCXVuc2lnbmVkIGxvbmcgIHN0X210aW1lOworCXVuc2lnbmVkIGxvbmcgIHN0X2N0aW1lOworfTsKKworc3RydWN0IHN0YXQgeworCXVuc2lnbmVkIHNob3J0CXN0X2RldjsKKwl1bnNpZ25lZCBsb25nCXN0X2lubzsKKwl1bnNpZ25lZCBzaG9ydAlzdF9tb2RlOworCXNob3J0CQlzdF9ubGluazsKKwl1bnNpZ25lZCBzaG9ydAlzdF91aWQ7CisJdW5zaWduZWQgc2hvcnQJc3RfZ2lkOworCXVuc2lnbmVkIHNob3J0CXN0X3JkZXY7CisJbG9uZwkJc3Rfc2l6ZTsKKwlsb25nCQlzdF9hdGltZTsKKwl1bnNpZ25lZCBsb25nCXN0X2F0aW1lX25zZWM7CisJbG9uZwkJc3RfbXRpbWU7CisJdW5zaWduZWQgbG9uZwlzdF9tdGltZV9uc2VjOworCWxvbmcJCXN0X2N0aW1lOworCXVuc2lnbmVkIGxvbmcJc3RfY3RpbWVfbnNlYzsKKwlsb25nCQlzdF9ibGtzaXplOworCWxvbmcJCXN0X2Jsb2NrczsKKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkNFsyXTsKK307CisKKyNkZWZpbmUgU1RBVF9IQVZFX05TRUMgMQorCitzdHJ1Y3Qgc3RhdDY0IHsKKwl1bnNpZ25lZCBsb25nIGxvbmcgc3RfZGV2OworCisJdW5zaWduZWQgbG9uZyBsb25nIHN0X2lubzsKKworCXVuc2lnbmVkIGludAlzdF9tb2RlOworCXVuc2lnbmVkIGludAlzdF9ubGluazsKKworCXVuc2lnbmVkIGludAlzdF91aWQ7CisJdW5zaWduZWQgaW50CXN0X2dpZDsKKworCXVuc2lnbmVkIGxvbmcgbG9uZyBzdF9yZGV2OworCisJdW5zaWduZWQgY2hhcglfX3BhZDNbOF07CisKKwlsb25nIGxvbmcJc3Rfc2l6ZTsKKwl1bnNpZ25lZCBpbnQJc3RfYmxrc2l6ZTsKKworCXVuc2lnbmVkIGNoYXIJX19wYWQ0WzhdOworCXVuc2lnbmVkIGludAlzdF9ibG9ja3M7CisKKwl1bnNpZ25lZCBpbnQJc3RfYXRpbWU7CisJdW5zaWduZWQgaW50CXN0X2F0aW1lX25zZWM7CisKKwl1bnNpZ25lZCBpbnQJc3RfbXRpbWU7CisJdW5zaWduZWQgaW50CXN0X210aW1lX25zZWM7CisKKwl1bnNpZ25lZCBpbnQJc3RfY3RpbWU7CisJdW5zaWduZWQgaW50CXN0X2N0aW1lX25zZWM7CisKKwl1bnNpZ25lZCBpbnQJX191bnVzZWQ0OworCXVuc2lnbmVkIGludAlfX3VudXNlZDU7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3N0YXRmcy5oIGIvaW5jbHVkZS9hc20tc3BhcmMvc3RhdGZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYyM2YxNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3N0YXRmcy5oCkBAIC0wLDAgKzEsNyBAQAorLyogJElkOiBzdGF0ZnMuaCx2IDEuNCAxOTk2LzA2LzA3IDAwOjQxOjA1IGVjZCBFeHAgJCAqLworI2lmbmRlZiBfU1BBUkNfU1RBVEZTX0gKKyNkZWZpbmUgX1NQQVJDX1NUQVRGU19ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zdGF0ZnMuaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9zdHJpbmcuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3N0cmluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiMWU5MjMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9zdHJpbmcuaApAQCAtMCwwICsxLDIwNSBAQAorLyogJElkOiBzdHJpbmcuaCx2IDEuMzYgMjAwMS8xMi8yMSAwMDo1NDozMSBkYXZlbSBFeHAgJAorICogc3RyaW5nLmg6IEV4dGVybmFsIGRlZmluaXRpb25zIGZvciBvcHRpbWl6ZWQgYXNzZW1ibHkgc3RyaW5nCisgKiAgICAgICAgICAgcm91dGluZXMgZm9yIHRoZSBMaW51eCBLZXJuZWwuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LDE5OTYgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQorICogQ29weXJpZ2h0IChDKSAxOTk2LDE5OTcgSmFrdWIgSmVsaW5layAoampAc3Vuc2l0ZS5tZmYuY3VuaS5jeikKKyAqLworCisjaWZuZGVmIF9fU1BBUkNfU1RSSU5HX0hfXworI2RlZmluZSBfX1NQQVJDX1NUUklOR19IX18KKworI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisKKy8qIFJlYWxseSwgdXNlcmxhbmQva3N5bXMgc2hvdWxkIG5vdCBzZWUgYW55IG9mIHRoaXMgc3R1ZmYuICovCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKK2V4dGVybiB2b2lkIF9fbWVtbW92ZSh2b2lkICosY29uc3Qgdm9pZCAqLF9fa2VybmVsX3NpemVfdCk7CitleHRlcm4gX19rZXJuZWxfc2l6ZV90IF9fbWVtY3B5KHZvaWQgKixjb25zdCB2b2lkICosX19rZXJuZWxfc2l6ZV90KTsKK2V4dGVybiBfX2tlcm5lbF9zaXplX3QgX19tZW1zZXQodm9pZCAqLGludCxfX2tlcm5lbF9zaXplX3QpOworCisjaWZuZGVmIEVYUE9SVF9TWU1UQUJfU1RST1BTCisKKy8qIEZpcnN0IHRoZSBtZW0qKCkgdGhpbmdzLiAqLworI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1NT1ZFCisjdW5kZWYgbWVtbW92ZQorI2RlZmluZSBtZW1tb3ZlKF90bywgX2Zyb20sIF9uKSBcCisoeyBcCisJdm9pZCAqX3QgPSAoX3RvKTsgXAorCV9fbWVtbW92ZShfdCwgKF9mcm9tKSwgKF9uKSk7IFwKKwlfdDsgXAorfSkKKworI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1DUFkKKworc3RhdGljIGlubGluZSB2b2lkICpfX2NvbnN0YW50X21lbWNweSh2b2lkICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgX19rZXJuZWxfc2l6ZV90IG4pCit7CisJZXh0ZXJuIHZvaWQgX19jb3B5XzFwYWdlKHZvaWQgKiwgY29uc3Qgdm9pZCAqKTsKKworCWlmKG4gPD0gMzIpIHsKKwkJX19idWlsdGluX21lbWNweSh0bywgZnJvbSwgbik7CisJfSBlbHNlIGlmICgoKHVuc2lnbmVkIGludCkgdG8gJiA3KSAhPSAwKSB7CisJCS8qIERlc3RpbmF0aW9uIGlzIG5vdCBhbGlnbmVkIG9uIHRoZSBkb3VibGUtd29yZCBib3VuZGFyeSAqLworCQlfX21lbWNweSh0bywgZnJvbSwgbik7CisJfSBlbHNlIHsKKwkJc3dpdGNoKG4pIHsKKwkJY2FzZSBQQUdFX1NJWkU6CisJCQlfX2NvcHlfMXBhZ2UodG8sIGZyb20pOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlfX21lbWNweSh0bywgZnJvbSwgbik7CisJCQlicmVhazsKKwkJfQorCX0KKwlyZXR1cm4gdG87Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqX19ub25jb25zdGFudF9tZW1jcHkodm9pZCAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIF9fa2VybmVsX3NpemVfdCBuKQoreworCV9fbWVtY3B5KHRvLCBmcm9tLCBuKTsKKwlyZXR1cm4gdG87Cit9CisKKyN1bmRlZiBtZW1jcHkKKyNkZWZpbmUgbWVtY3B5KHQsIGYsIG4pIFwKKyhfX2J1aWx0aW5fY29uc3RhbnRfcChuKSA/IFwKKyBfX2NvbnN0YW50X21lbWNweSgodCksKGYpLChuKSkgOiBcCisgX19ub25jb25zdGFudF9tZW1jcHkoKHQpLChmKSwobikpKQorCisjZGVmaW5lIF9fSEFWRV9BUkNIX01FTVNFVAorCitzdGF0aWMgaW5saW5lIHZvaWQgKl9fY29uc3RhbnRfY19hbmRfY291bnRfbWVtc2V0KHZvaWQgKnMsIGNoYXIgYywgX19rZXJuZWxfc2l6ZV90IGNvdW50KQoreworCWV4dGVybiB2b2lkIGJ6ZXJvXzFwYWdlKHZvaWQgKik7CisJZXh0ZXJuIF9fa2VybmVsX3NpemVfdCBfX2J6ZXJvKHZvaWQgKiwgX19rZXJuZWxfc2l6ZV90KTsKKworCWlmKCFjKSB7CisJCWlmKGNvdW50ID09IFBBR0VfU0laRSkKKwkJCWJ6ZXJvXzFwYWdlKHMpOworCQllbHNlCisJCQlfX2J6ZXJvKHMsIGNvdW50KTsKKwl9IGVsc2UgeworCQlfX21lbXNldChzLCBjLCBjb3VudCk7CisJfQorCXJldHVybiBzOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKl9fY29uc3RhbnRfY19tZW1zZXQodm9pZCAqcywgY2hhciBjLCBfX2tlcm5lbF9zaXplX3QgY291bnQpCit7CisJZXh0ZXJuIF9fa2VybmVsX3NpemVfdCBfX2J6ZXJvKHZvaWQgKiwgX19rZXJuZWxfc2l6ZV90KTsKKworCWlmKCFjKQorCQlfX2J6ZXJvKHMsIGNvdW50KTsKKwllbHNlCisJCV9fbWVtc2V0KHMsIGMsIGNvdW50KTsKKwlyZXR1cm4gczsKK30KKworc3RhdGljIGlubGluZSB2b2lkICpfX25vbmNvbnN0YW50X21lbXNldCh2b2lkICpzLCBjaGFyIGMsIF9fa2VybmVsX3NpemVfdCBjb3VudCkKK3sKKwlfX21lbXNldChzLCBjLCBjb3VudCk7CisJcmV0dXJuIHM7Cit9CisKKyN1bmRlZiBtZW1zZXQKKyNkZWZpbmUgbWVtc2V0KHMsIGMsIGNvdW50KSBcCisoX19idWlsdGluX2NvbnN0YW50X3AoYykgPyAoX19idWlsdGluX2NvbnN0YW50X3AoY291bnQpID8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3RhbnRfY19hbmRfY291bnRfbWVtc2V0KChzKSwgKGMpLCAoY291bnQpKSA6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0YW50X2NfbWVtc2V0KChzKSwgKGMpLCAoY291bnQpKSkgXAorICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9fbm9uY29uc3RhbnRfbWVtc2V0KChzKSwgKGMpLCAoY291bnQpKSkKKworI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1TQ0FOCisKKyN1bmRlZiBtZW1zY2FuCisjZGVmaW5lIG1lbXNjYW4oX19hcmcwLCBfX2NoYXIsIF9fYXJnMikJCQkJCQlcCisoewkJCQkJCQkJCQlcCisJZXh0ZXJuIHZvaWQgKl9fbWVtc2Nhbl96ZXJvKHZvaWQgKiwgc2l6ZV90KTsJCQkJXAorCWV4dGVybiB2b2lkICpfX21lbXNjYW5fZ2VuZXJpYyh2b2lkICosIGludCwgc2l6ZV90KTsJCQlcCisJdm9pZCAqX19yZXR2YWwsICpfX2FkZHIgPSAoX19hcmcwKTsJCQkJCVwKKwlzaXplX3QgX19zaXplID0gKF9fYXJnMik7CQkJCQkJXAorCQkJCQkJCQkJCVwKKwlpZihfX2J1aWx0aW5fY29uc3RhbnRfcChfX2NoYXIpICYmICEoX19jaGFyKSkJCQkJXAorCQlfX3JldHZhbCA9IF9fbWVtc2Nhbl96ZXJvKF9fYWRkciwgX19zaXplKTsJCQlcCisJZWxzZQkJCQkJCQkJCVwKKwkJX19yZXR2YWwgPSBfX21lbXNjYW5fZ2VuZXJpYyhfX2FkZHIsIChfX2NoYXIpLCBfX3NpemUpOwkJXAorCQkJCQkJCQkJCVwKKwlfX3JldHZhbDsJCQkJCQkJCVwKK30pCisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNQ01QCitleHRlcm4gaW50IG1lbWNtcChjb25zdCB2b2lkICosY29uc3Qgdm9pZCAqLF9fa2VybmVsX3NpemVfdCk7CisKKy8qIE5vdyB0aGUgc3RyKigpIHN0dWZmLi4uICovCisjZGVmaW5lIF9fSEFWRV9BUkNIX1NUUkxFTgorZXh0ZXJuIF9fa2VybmVsX3NpemVfdCBzdHJsZW4oY29uc3QgY2hhciAqKTsKKworI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJOQ01QCisKK2V4dGVybiBpbnQgX19zdHJuY21wKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBfX2tlcm5lbF9zaXplX3QpOworCitzdGF0aWMgaW5saW5lIGludCBfX2NvbnN0YW50X3N0cm5jbXAoY29uc3QgY2hhciAqc3JjLCBjb25zdCBjaGFyICpkZXN0LCBfX2tlcm5lbF9zaXplX3QgY291bnQpCit7CisJcmVnaXN0ZXIgaW50IHJldHZhbDsKKwlzd2l0Y2goY291bnQpIHsKKwljYXNlIDA6IHJldHVybiAwOworCWNhc2UgMTogcmV0dXJuIChzcmNbMF0gLSBkZXN0WzBdKTsKKwljYXNlIDI6IHJldHZhbCA9IChzcmNbMF0gLSBkZXN0WzBdKTsKKwkJaWYoIXJldHZhbCAmJiBzcmNbMF0pCisJCSAgcmV0dmFsID0gKHNyY1sxXSAtIGRlc3RbMV0pOworCQlyZXR1cm4gcmV0dmFsOworCWNhc2UgMzogcmV0dmFsID0gKHNyY1swXSAtIGRlc3RbMF0pOworCQlpZighcmV0dmFsICYmIHNyY1swXSkgeworCQkgIHJldHZhbCA9IChzcmNbMV0gLSBkZXN0WzFdKTsKKwkJICBpZighcmV0dmFsICYmIHNyY1sxXSkKKwkJICAgIHJldHZhbCA9IChzcmNbMl0gLSBkZXN0WzJdKTsKKwkJfQorCQlyZXR1cm4gcmV0dmFsOworCWNhc2UgNDogcmV0dmFsID0gKHNyY1swXSAtIGRlc3RbMF0pOworCQlpZighcmV0dmFsICYmIHNyY1swXSkgeworCQkgIHJldHZhbCA9IChzcmNbMV0gLSBkZXN0WzFdKTsKKwkJICBpZighcmV0dmFsICYmIHNyY1sxXSkgeworCQkgICAgcmV0dmFsID0gKHNyY1syXSAtIGRlc3RbMl0pOworCQkgICAgaWYgKCFyZXR2YWwgJiYgc3JjWzJdKQorCQkgICAgICByZXR2YWwgPSAoc3JjWzNdIC0gZGVzdFszXSk7CisJCSAgfQorCQl9CisJCXJldHVybiByZXR2YWw7CisJY2FzZSA1OiByZXR2YWwgPSAoc3JjWzBdIC0gZGVzdFswXSk7CisJCWlmKCFyZXR2YWwgJiYgc3JjWzBdKSB7CisJCSAgcmV0dmFsID0gKHNyY1sxXSAtIGRlc3RbMV0pOworCQkgIGlmKCFyZXR2YWwgJiYgc3JjWzFdKSB7CisJCSAgICByZXR2YWwgPSAoc3JjWzJdIC0gZGVzdFsyXSk7CisJCSAgICBpZiAoIXJldHZhbCAmJiBzcmNbMl0pIHsKKwkJICAgICAgcmV0dmFsID0gKHNyY1szXSAtIGRlc3RbM10pOworCQkgICAgICBpZiAoIXJldHZhbCAmJiBzcmNbM10pCisJCSAgICAgICAgcmV0dmFsID0gKHNyY1s0XSAtIGRlc3RbNF0pOworCQkgICAgfQorCQkgIH0KKwkJfQorCQlyZXR1cm4gcmV0dmFsOworCWRlZmF1bHQ6CisJCXJldHZhbCA9IChzcmNbMF0gLSBkZXN0WzBdKTsKKwkJaWYoIXJldHZhbCAmJiBzcmNbMF0pIHsKKwkJICByZXR2YWwgPSAoc3JjWzFdIC0gZGVzdFsxXSk7CisJCSAgaWYoIXJldHZhbCAmJiBzcmNbMV0pIHsKKwkJICAgIHJldHZhbCA9IChzcmNbMl0gLSBkZXN0WzJdKTsKKwkJICAgIGlmKCFyZXR2YWwgJiYgc3JjWzJdKQorCQkgICAgICByZXR2YWwgPSBfX3N0cm5jbXAoc3JjKzMsZGVzdCszLGNvdW50LTMpOworCQkgIH0KKwkJfQorCQlyZXR1cm4gcmV0dmFsOworCX0KK30KKworI3VuZGVmIHN0cm5jbXAKKyNkZWZpbmUgc3RybmNtcChfX2FyZzAsIF9fYXJnMSwgX19hcmcyKQlcCisoX19idWlsdGluX2NvbnN0YW50X3AoX19hcmcyKSA/CVwKKyBfX2NvbnN0YW50X3N0cm5jbXAoX19hcmcwLCBfX2FyZzEsIF9fYXJnMikgOiBcCisgX19zdHJuY21wKF9fYXJnMCwgX19hcmcxLCBfX2FyZzIpKQorIAorI2VuZGlmIC8qICFFWFBPUlRfU1lNVEFCX1NUUk9QUyAqLworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogIShfX1NQQVJDX1NUUklOR19IX18pICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9zdW40cGFkZHIuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3N1bjRwYWRkci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4NjNiZmQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9zdW40cGFkZHIuaApAQCAtMCwwICsxLDU2IEBACisvKiAkSWQ6IHN1bjRwYWRkci5oLHYgMS4zIDE5OTgvMDcvMjggMTY6NTM6MjcgamogRXhwICQKKyAqIHN1bjRwYWRkci5oOiAgVmFyaW91cyBwaHlzaWNhbCBhZGRyZXNzZXMgb24gc3VuNCBtYWNoaW5lcworICoKKyAqIENvcHlyaWdodCAoQykgMTk5NyBBbnRvbiBCbGFuY2hhcmQgKGFudG9uQHByb2dzb2MudXRzLmVkdS5hdSkKKyAqIENvcHlyaWdodCAoQykgMTk5OCBDaHJpcyBEYXZpcyAoY2RhdmlzQGNvaXMub24uY2EpCisgKiAKKyAqIE5vdyBzdXBwb3J0cyBtb3JlIHN1bjQncworICovCisKKyNpZm5kZWYgX1NQQVJDX1NVTjRQQUREUl9ICisjZGVmaW5lIF9TUEFSQ19TVU40UEFERFJfSAorCisjZGVmaW5lIFNVTjRfSUVfUEhZU0FERFIJCTB4ZjUwMDAwMDAKKyNkZWZpbmUgU1VONF9VTlVTRURfUEhZU0FERFIJCTAKKworLyogdGhlc2Ugd29yayBmb3IgbWUgKi8KKyNkZWZpbmUgU1VONF8yMDBfTUVNUkVHX1BIWVNBRERSCTB4ZjQwMDAwMDAKKyNkZWZpbmUgU1VONF8yMDBfQ0xPQ0tfUEhZU0FERFIJCTB4ZjMwMDAwMDAKKyNkZWZpbmUgU1VONF8yMDBfQldUV09fUEhZU0FERFIJCTB4ZmQwMDAwMDAKKyNkZWZpbmUgU1VONF8yMDBfRVRIX1BIWVNBRERSCQkweGY2MDAwMDAwCisjZGVmaW5lIFNVTjRfMjAwX1NJX1BIWVNBRERSCQkweGZmMjAwMDAwCisKKy8qIHRoZXNlIHdlcmUgaGVyZSBiZWZvcmUgKi8KKyNkZWZpbmUgU1VONF8zMDBfTUVNUkVHX1BIWVNBRERSCTB4ZjQwMDAwMDAKKyNkZWZpbmUgU1VONF8zMDBfQ0xPQ0tfUEhZU0FERFIJCTB4ZjIwMDAwMDAKKyNkZWZpbmUgU1VONF8zMDBfVElNRVJfUEhZU0FERFIJCTB4ZWYwMDAwMDAKKyNkZWZpbmUgU1VONF8zMDBfRVRIX1BIWVNBRERSCQkweGY5MDAwMDAwCisjZGVmaW5lIFNVTjRfMzAwX0JXVFdPX1BIWVNBRERSCQkweGZiNDAwMDAwCisjZGVmaW5lIFNVTjRfMzAwX0RNQV9QSFlTQUREUgkJMHhmYTAwMTAwMAorI2RlZmluZSBTVU40XzMwMF9FU1BfUEhZU0FERFIJCTB4ZmEwMDAwMDAKKworLyogQXJlIHRoZXNlIHJpZ2h0PyAqLworI2RlZmluZSBTVU40XzQwMF9NRU1SRUdfUEhZU0FERFIJMHhmNDAwMDAwMAorI2RlZmluZSBTVU40XzQwMF9DTE9DS19QSFlTQUREUgkJMHhmMjAwMDAwMAorI2RlZmluZSBTVU40XzQwMF9USU1FUl9QSFlTQUREUgkJMHhlZjAwMDAwMAorI2RlZmluZSBTVU40XzQwMF9FVEhfUEhZU0FERFIJCTB4ZjkwMDAwMDAKKyNkZWZpbmUgU1VONF80MDBfQldUV09fUEhZU0FERFIJCTB4ZmI0MDAwMDAKKyNkZWZpbmUgU1VONF80MDBfRE1BX1BIWVNBRERSCQkweGZhMDAxMDAwCisjZGVmaW5lIFNVTjRfNDAwX0VTUF9QSFlTQUREUgkJMHhmYTAwMDAwMAorCisvKiAKKwl0aGVzZSBhcmUgdGhlIGFjdHVhbCB2YWx1ZXMgc2V0IGFuZCB1c2VkIGluIHRoZSBjb2RlLiBVbnVzZWQgaXRlbXMgc2V0IAorCXRvIFNVTl9VTlVTRURfUEhZU0FERFIgCisgKi8KKworZXh0ZXJuIGludCBzdW40X21lbXJlZ19waHlzYWRkcjsgLyogbWVtb3J5IHJlZ2lzdGVyIChlY2M/KSAqLworZXh0ZXJuIGludCBzdW40X2Nsb2NrX3BoeXNhZGRyOyAgLyogc3lzdGVtIGNsb2NrICovCitleHRlcm4gaW50IHN1bjRfdGltZXJfcGh5c2FkZHI7ICAvKiB0aW1lciwgd2hlcmUgYXBwbGljYWJsZSAqLworZXh0ZXJuIGludCBzdW40X2V0aF9waHlzYWRkcjsgICAgLyogb25ib2FyZCBldGhlcm5ldCAoaWUvbGUpICovCitleHRlcm4gaW50IHN1bjRfc2lfcGh5c2FkZHI7ICAgICAvKiBzdW4zIHNjc2kgYWRhcHRlciAqLworZXh0ZXJuIGludCBzdW40X2J3dHdvX3BoeXNhZGRyOyAgLyogb25ib2FyZCBidzIgKi8KK2V4dGVybiBpbnQgc3VuNF9kbWFfcGh5c2FkZHI7ICAgIC8qIHNjc2kgZG1hICovCitleHRlcm4gaW50IHN1bjRfZXNwX3BoeXNhZGRyOyAgICAvKiBlc3Agc2NzaSAqLworZXh0ZXJuIGludCBzdW40X2llX3BoeXNhZGRyOyAgICAgLyogaW50ZXJydXB0IGVuYWJsZSAqLworCisjZW5kaWYgLyogIShfU1BBUkNfU1VONFBBRERSX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9zdW40cHJvbS5oIGIvaW5jbHVkZS9hc20tc3BhcmMvc3VuNHByb20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzhiNGNiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvc3VuNHByb20uaApAQCAtMCwwICsxLDgzIEBACisvKgorICogc3VuNHByb20uaCAtLSBpbnRlcmZhY2UgdG8gc3VuNCBQUk9NIG1vbml0b3IuICBXZSBkb24ndCB1c2UgbW9zdCBvZiB0aGlzLAorICogICAgICAgICAgICAgICBzbyBtb3N0IG9mIHRoZXNlIGFyZSBqdXN0IHBsYWNlaG9sZGVycy4KKyAqLworCisjaWZuZGVmIF9TVU40UFJPTV9IXworI2RlZmluZSBfU1VONFBST01fSF8KKworLyoKKyAqIEFsdGhvdWdoIHRoaXMgbG9va3Mgc2ltaWxhciB0byBhbiByb212ZWMgZm9yIGEgT3BlblByb20gbWFjaGluZSwgaXQgaXMgCisgKiBhY3R1YWxseSBjbG9zZXIgdG8gd2hhdCB3YXMgdXNlZCBpbiB0aGUgU3VuMiBhbmQgU3VuMy4KKyAqCisgKiBWMiBlbnRyaWVzIGV4aXN0IG9ubHkgaW4gdmVyc2lvbiAyIFBST01zIGFuZCBsYXRlciwgVjMgaW4gdmVyc2lvbiAzIGFuZCBsYXRlci4KKyAqIAorICogTWFueSBvZiB0aGUgZnVuY3Rpb24gcHJvdG90eXBlcyBhcmUgZ3Vlc3Nlcy4gIFNvbWUgYXJlIGNlcnRhaW5seSB3cm9uZy4KKyAqIFVzZSB3aXRoIGNhcmUuCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworCWNoYXIJCSppbml0U1A7CQkvKiBJbml0aWFsIHN5c3RlbSBzdGFjayBwdHIgKi8KKwl2b2lkCQkoKnN0YXJ0bW9uKSh2b2lkKTsJLyogSW5pdGlhbCBQQyBmb3IgaGFyZHdhcmUgKi8KKwlpbnQJCSpkaWFnYmVycjsJCS8qIEJ1cyBlcnIgaGFuZGxlciBmb3IgZGlhZ3MgKi8KKwlzdHJ1Y3QgbGludXhfYXJndW1lbnRzX3YwICoqYm9vdFBhcmFtOyAvKiBJbmZvIGZvciBib290c3RyYXBwZWQgcGdtICovCisgCXVuc2lnbmVkIGludAkqbWVtb3J5c2l6ZTsJCS8qIFVzYWJsZSBtZW1vcnkgaW4gYnl0ZXMgKi8KKwl1bnNpZ25lZCBjaGFyCSgqZ2V0Y2hhcikodm9pZCk7CS8qIEdldCBjaGFyIGZyb20gaW5wdXQgZGV2aWNlICovIAorCXZvaWQJCSgqcHV0Y2hhcikoY2hhcik7CS8qIFB1dCBjaGFyIHRvIG91dHB1dCBkZXZpY2UgKi8KKwlpbnQJCSgqbWF5Z2V0KSh2b2lkKTsJLyogTWF5YmUgZ2V0IGNoYXIsIG9yIC0xICovCisJaW50CQkoKm1heXB1dCkoaW50KTsJCS8qIE1heWJlIHB1dCBjaGFyLCBvciAtMSAqLworCXVuc2lnbmVkIGNoYXIJKmVjaG87CQkJLyogU2hvdWxkIGdldGNoYXIgZWNobz8gKi8KKwl1bnNpZ25lZCBjaGFyCSppbnNvdXJjZTsJCS8qIElucHV0IHNvdXJjZSBzZWxlY3RvciAqLworCXVuc2lnbmVkIGNoYXIJKm91dHNpbms7CQkvKiBPdXRwdXQgc2luayBzZWxlY3RvciAqLworCWludAkJKCpnZXRrZXkpKHZvaWQpOwkvKiBHZXQgbmV4dCBrZXkgaWYgb25lIGV4aXN0cyAqLworCXZvaWQJCSgqaW5pdGdldGtleSkodm9pZCk7CS8qIEluaXRpYWxpemUgZ2V0IGtleSAqLworCXVuc2lnbmVkIGludAkqdHJhbnNsYXRpb247CQkvKiBLYmQgdHJhbnNsYXRpb24gc2VsZWN0b3IgKi8KKwl1bnNpZ25lZCBjaGFyCSprZXliaWQ7CQkvKiBLZXlib2FyZCBJRCBieXRlICovCisJaW50CQkqc2NyZWVuX3g7CQkvKiBWMjogU2NyZWVuIHggcG9zIChyL28pICovCisJaW50CQkqc2NyZWVuX3k7CQkvKiBWMjogU2NyZWVuIHkgcG9zIChyL28pICovCisJc3RydWN0IGtleWJ1Zgkqa2V5YnVmOwkJLyogVXAvZG93biBrZXljb2RlIGJ1ZmZlciAqLworCWNoYXIJCSptb25pZDsJCQkvKiBNb25pdG9yIHZlcnNpb24gSUQgKi8KKwl2b2lkCQkoKmZid3JpdGVjaGFyKShjaGFyKTsJLyogV3JpdGUgYSBjaGFyYWN0ZXIgdG8gRkIgKi8KKwlpbnQJCSpmYkFkZHI7CQkvKiBBZGRyZXNzIG9mIGZyYW1lIGJ1ZmZlciAqLworCWNoYXIJCSoqZm9udDsJCQkvKiBGb250IHRhYmxlIGZvciBGQiAqLworCXZvaWQJCSgqZmJ3cml0ZXN0cikoY2hhciAqKTsJLyogV3JpdGUgc3RyaW5nIHRvIEZCICovCisJdm9pZAkJKCpyZWJvb3QpKGNoYXIgKik7CS8qIGUuZy4gcmVib290KCJzZCgpdm1saW51eCIpICovCisJdW5zaWduZWQgY2hhcgkqbGluZWJ1ZjsJCS8qIFRoZSBsaW5lIGlucHV0IGJ1ZmZlciAqLworCXVuc2lnbmVkIGNoYXIJKipsaW5lcHRyOwkJLyogQ3VyIHBvaW50ZXIgaW50byBsaW5lYnVmICovCisJaW50CQkqbGluZXNpemU7CQkvKiBsZW5ndGggb2YgbGluZSBpbiBsaW5lYnVmICovCisJdm9pZAkJKCpnZXRsaW5lKShjaGFyICopOwkvKiBHZXQgbGluZSBmcm9tIHVzZXIgKi8KKwl1bnNpZ25lZCBjaGFyCSgqZ2V0bmV4dGNoYXIpKHZvaWQpOwkvKiBHZXQgbmV4dCBjaGFyIGZyb20gbGluZWJ1ZiAqLworCXVuc2lnbmVkIGNoYXIJKCpwZWVrbmV4dGNoYXIpKHZvaWQpOwkvKiBQZWVrIGF0IG5leHQgY2hhciAqLworCWludAkJKmZidGhlcmU7CQkvKiA9MSBpZiBmcmFtZSBidWZmZXIgdGhlcmUgKi8KKwlpbnQJCSgqZ2V0bnVtKSh2b2lkKTsJLyogR3JhYiBoZXggbnVtIGZyb20gbGluZSAqLworCWludAkJKCpwcmludGYpKGNoYXIgKiwgLi4uKTsJLyogU2VlIHByb21fcHJpbnRmKCkgaW5zdGVhZCAqLyAKKwl2b2lkCQkoKnByaW50aGV4KShpbnQpOwkvKiBGb3JtYXQgTiBkaWdpdHMgaW4gaGV4ICovCisJdW5zaWduZWQgY2hhcgkqbGVkczsJCQkvKiBSQU0gY29weSBvZiBMRUQgcmVnaXN0ZXIgKi8KKwl2b2lkCQkoKnNldExFRHMpKHVuc2lnbmVkIGNoYXIgKik7CS8qIFNldHMgTEVEJ3MgYW5kIFJBTSBjb3B5ICovCisJdm9pZAkJKCpOTUlhZGRyKSh2b2lkICopOwkvKiBBZGRyIGZvciBsZXZlbCA3IHZlY3RvciAqLworCXZvaWQJCSgqYWJvcnRlbnRyeSkodm9pZCk7CS8qIEVudHJ5IGZvciBrZXlib2FyZCBhYm9ydCAqLworCWludAkJKm5taWNsb2NrOwkJLyogQ291bnRzIHVwIGluIG1zZWMgKi8KKwlpbnQJCSpGQnR5cGU7CQkvKiBGcmFtZSBidWZmZXIgdHlwZSAqLworIAl1bnNpZ25lZCBpbnQJcm9tdmVjdmVyc2lvbjsJCS8qIFZlcnNpb24gbnVtYmVyIGZvciB0aGlzIHJvbXZlYyAqLworCXN0cnVjdCBnbG9icmFtICAqZ2xvYnJhbTsJCS8qIG1vbml0b3IgZ2xvYmFsIHZhcmlhYmxlcyA/Pz8gKi8KKwl2b2lkICoJCWtiZGFkZHI7CQkvKiBBZGRyIG9mIGtleWJvYXJkIGluIHVzZSAqLworCWludAkJKmtleXJpbml0OwkJLyogbXMgYmVmb3JlIGtiZCByZXBlYXQgKi8KKwl1bnNpZ25lZCBjaGFyCSprZXlydGljazsgCQkvKiBtcyBiZXR3ZWVuIHJlcGV0aXRpb25zICovCisJdW5zaWduZWQgaW50CSptZW1vcnlhdmFpbDsJCS8qIFYxOiBNYWluIG1lbSB1c2FibGUgc2l6ZSAqLworCWxvbmcJCSpyZXNldGFkZHI7CQkvKiB3aGVyZSB0byBqdW1wIG9uIGEgcmVzZXQgKi8KKwlsb25nCQkqcmVzZXRtYXA7CQkvKiBwZ21hcCBlbnRyeSBmb3IgcmVzZXRhZGRyICovCisJdm9pZAkJKCpleGl0dG9tb24pKHZvaWQpOwkvKiBFeGl0IGZyb20gdXNlciBwcm9ncmFtICovCisJdW5zaWduZWQgY2hhcgkqKm1lbW9yeWJpdG1hcDsJCS8qIFYxOiAmezAgb3IgJmJpdHN9ICovCisJdm9pZAkJKCpzZXRjeHNlZ21hcCkoaW50IGN0eHQsIGNoYXIgKnZhLCBpbnQgcG1lZyk7CS8qIFNldCBzZWcgaW4gYW55IGNvbnRleHQgKi8KKwl2b2lkCQkoKip2ZWN0b3JfY21kKSh2b2lkICopOwkvKiBWMjogSGFuZGxlciBmb3IgJ3YnIGNtZCAqLworCXVuc2lnbmVkIGxvbmcJKmV4cGVjdGVkdHJhcHNpZzsJLyogVjM6IExvY2F0aW9uIG9mIHRoZSBleHBlY3RlZCB0cmFwIHNpZ25hbCAqLworCXVuc2lnbmVkIGxvbmcJKnRyYXB2ZWN0b3JiYXNldGFibGU7CS8qIFYzOiBBZGRyZXNzIG9mIHRoZSB0cmFwIHZlY3RvciB0YWJsZSAqLworCWludAkJdW51c2VkMTsKKwlpbnQJCXVudXNlZDI7CisJaW50CQl1bnVzZWQzOworCWludAkJdW51c2VkNDsKK30gbGludXhfc3VuNF9yb212ZWM7CisKK2V4dGVybiBsaW51eF9zdW40X3JvbXZlYyAqc3VuNF9yb212ZWM7CisKKyNlbmRpZiAvKiBfU1VONFBST01fSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3N1bmJwcC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvc3VuYnBwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY4ZGI3OQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3N1bmJwcC5oCkBAIC0wLDAgKzEsODAgQEAKKy8qICRJZDogc3VuYnBwLmgsdiAxLjEgMTk5OS8wOC8wOCAxNDowOTo0OSBzaGFkb3cgRXhwICQKKyAqIGluY2x1ZGUvYXNtLXNwYXJjL3N1bmJwcC5oCisgKi8KKworI2lmbmRlZiBfQVNNX1NQQVJDX1NVTkJQUF9ICisjZGVmaW5lIF9BU01fU1BBUkNfU1VOQlBQX0gKKworc3RydWN0IGJwcF9yZWdzIHsKKyAgLyogRE1BIHJlZ2lzdGVycyAqLworICBfX3ZvbGF0aWxlX18gX191MzIgcF9jc3I7CQkvKiBETUEgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXIgKi8KKyAgX192b2xhdGlsZV9fIF9fdTMyIHBfYWRkcjsJCS8qIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyAgX192b2xhdGlsZV9fIF9fdTMyIHBfYmNudDsJCS8qIEJ5dGUgQ291bnQgUmVnaXN0ZXIgKi8KKyAgX192b2xhdGlsZV9fIF9fdTMyIHBfdHN0X2NzcjsJCS8qIFRlc3QgQ29udHJvbC9TdGF0dXMgKERNQTIgb25seSkgKi8KKyAgLyogUGFyYWxsZWwgUG9ydCByZWdpc3RlcnMgKi8KKyAgX192b2xhdGlsZV9fIF9fdTE2IHBfaGNyOwkJLyogSGFyZHdhcmUgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworICBfX3ZvbGF0aWxlX18gX191MTYgcF9vY3I7CQkvKiBPcGVyYXRpb24gQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworICBfX3ZvbGF0aWxlX18gX191OCBwX2RyOwkJLyogUGFyYWxsZWwgRGF0YSBSZWdpc3RlciAqLworICBfX3ZvbGF0aWxlX18gX191OCBwX3RjcjsJCS8qIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyAgX192b2xhdGlsZV9fIF9fdTggcF9vcjsJCS8qIE91dHB1dCBSZWdpc3RlciAqLworICBfX3ZvbGF0aWxlX18gX191OCBwX2lyOwkJLyogSW5wdXQgUmVnaXN0ZXIgKi8KKyAgX192b2xhdGlsZV9fIF9fdTE2IHBfaWNyOwkJLyogSW50ZXJydXB0IENvbnRyb2wgUmVnaXN0ZXIgKi8KK307CisKKy8qIFBfSENSLiBUaW1lIGlzIGluIGluY3JlbWVudHMgb2YgU0J1cyBjbG9jay4gKi8KKyNkZWZpbmUgUF9IQ1JfVEVTVCAgICAgIDB4ODAwMCAgICAgIC8qIEFsbG93cyBidXJpZWQgY291bnRlcnMgdG8gYmUgcmVhZCAqLworI2RlZmluZSBQX0hDUl9EU1cgICAgICAgMHg3ZjAwICAgICAgLyogRGF0YSBzdHJvYmUgd2lkdGggKGluIHRpY2tzKSAqLworI2RlZmluZSBQX0hDUl9ERFMgICAgICAgMHgwMDdmICAgICAgLyogRGF0YSBzZXR1cCBiZWZvcmUgc3Ryb2JlIChpbiB0aWNrcykgKi8KKworLyogUF9PQ1IuICovCisjZGVmaW5lIFBfT0NSX01FTV9DTFIgICAweDgwMDAKKyNkZWZpbmUgUF9PQ1JfREFUQV9TUkMgIDB4NDAwMCAgICAgIC8qICkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQX09DUl9EU19EU0VMICAgMHgyMDAwICAgICAgLyogKSAgQmlkaXJlY3Rpb25hbCAgICAgICovCisjZGVmaW5lIFBfT0NSX0JVU1lfRFNFTCAweDEwMDAgICAgICAvKiApICAgIHNlbGVjdHMgICAgICAgICAgICAqLworI2RlZmluZSBQX09DUl9BQ0tfRFNFTCAgMHgwODAwICAgICAgLyogKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBfT0NSX0VOX0RJQUcgICAweDA0MDAKKyNkZWZpbmUgUF9PQ1JfQlVTWV9PUCAgIDB4MDIwMCAgICAgIC8qIEJ1c3kgb3BlcmF0aW9uICovCisjZGVmaW5lIFBfT0NSX0FDS19PUCAgICAweDAxMDAgICAgICAvKiBBY2sgb3BlcmF0aW9uICovCisjZGVmaW5lIFBfT0NSX1NSU1QgICAgICAweDAwODAgICAgICAvKiBSZXNldCBzdGF0ZSBtYWNoaW5lcy4gTm90IHNlbGZjbGVhbmluZy4gKi8KKyNkZWZpbmUgUF9PQ1JfSURMRSAgICAgIDB4MDAwOCAgICAgIC8qIFBQIGRhdGEgdHJhbnNmZXIgc3RhdGUgbWFjaGluZSBpcyBpZGxlICovCisjZGVmaW5lIFBfT0NSX1ZfSUxDSyAgICAweDAwMDIgICAgICAvKiBWZXJzYXRlYyBmYWRlZC4gWmVicmEgb25seS4gKi8KKyNkZWZpbmUgUF9PQ1JfRU5fVkVSICAgIDB4MDAwMSAgICAgIC8qIEVuYWJsZSBWZXJzYXRlYyAoMCAtIGVuYWJsZSkuIFplYnJhIG9ubHkuICovCisKKy8qIFBfVENSICovCisjZGVmaW5lIFBfVENSX0RJUiAgICAgICAweDA4CisjZGVmaW5lIFBfVENSX0JVU1kgICAgICAweDA0CisjZGVmaW5lIFBfVENSX0FDSyAgICAgICAweDAyCisjZGVmaW5lIFBfVENSX0RTICAgICAgICAweDAxICAgICAgICAvKiBTdHJvYmUgKi8KKworLyogUF9PUiAqLworI2RlZmluZSBQX09SX1YzICAgICAgICAgMHgyMCAgICAgICAgLyogKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUF9PUl9WMiAgICAgICAgIDB4MTAgICAgICAgIC8qICkgb24gWmVicmEgb25seSAgICovCisjZGVmaW5lIFBfT1JfVjEgICAgICAgICAweDA4ICAgICAgICAvKiApICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQX09SX0lOSVQgICAgICAgMHgwNAorI2RlZmluZSBQX09SX0FGWE4gICAgICAgMHgwMiAgICAgICAgLyogQXV0byBGZWVkICovCisjZGVmaW5lIFBfT1JfU0xDVF9JTiAgICAweDAxCisKKy8qIFBfSVIgKi8KKyNkZWZpbmUgUF9JUl9QRSAgICAgICAgIDB4MDQKKyNkZWZpbmUgUF9JUl9TTENUICAgICAgIDB4MDIKKyNkZWZpbmUgUF9JUl9FUlIgICAgICAgIDB4MDEKKworLyogUF9JQ1IgKi8KKyNkZWZpbmUgUF9EU19JUlEgICAgICAgIDB4ODAwMCAgICAgIC8qIFJXMSAgKi8KKyNkZWZpbmUgUF9BQ0tfSVJRICAgICAgIDB4NDAwMCAgICAgIC8qIFJXMSAgKi8KKyNkZWZpbmUgUF9CVVNZX0lSUSAgICAgIDB4MjAwMCAgICAgIC8qIFJXMSAgKi8KKyNkZWZpbmUgUF9QRV9JUlEgICAgICAgIDB4MTAwMCAgICAgIC8qIFJXMSAgKi8KKyNkZWZpbmUgUF9TTENUX0lSUSAgICAgIDB4MDgwMCAgICAgIC8qIFJXMSAgKi8KKyNkZWZpbmUgUF9FUlJfSVJRICAgICAgIDB4MDQwMCAgICAgIC8qIFJXMSAgKi8KKyNkZWZpbmUgUF9EU19JUlFfRU4gICAgIDB4MDIwMCAgICAgIC8qIFJXICAgQWx3YXlzIG9uIHJpc2luZyBlZGdlICovCisjZGVmaW5lIFBfQUNLX0lSUV9FTiAgICAweDAxMDAgICAgICAvKiBSVyAgIEFsd2F5cyBvbiByaXNpbmcgZWRnZSAqLworI2RlZmluZSBQX0JVU1lfSVJQICAgICAgMHgwMDgwICAgICAgLyogUlcgICAxPSByaXNpbmcgZWRnZSAqLworI2RlZmluZSBQX0JVU1lfSVJRX0VOICAgMHgwMDQwICAgICAgLyogUlcgICAqLworI2RlZmluZSBQX1BFX0lSUCAgICAgICAgMHgwMDIwICAgICAgLyogUlcgICAxPSByaXNpbmcgZWRnZSAqLworI2RlZmluZSBQX1BFX0lSUV9FTiAgICAgMHgwMDEwICAgICAgLyogUlcgICAqLworI2RlZmluZSBQX1NMQ1RfSVJQICAgICAgMHgwMDA4ICAgICAgLyogUlcgICAxPSByaXNpbmcgZWRnZSAqLworI2RlZmluZSBQX1NMQ1RfSVJRX0VOICAgMHgwMDA0ICAgICAgLyogUlcgICAqLworI2RlZmluZSBQX0VSUl9JUlAgICAgICAgMHgwMDAyICAgICAgLyogUlcxICAxPSByaXNpbmcgZWRnZSAqLworI2RlZmluZSBQX0VSUl9JUlFfRU4gICAgMHgwMDAxICAgICAgLyogUlcgICAqLworCisjZW5kaWYgLyogIShfQVNNX1NQQVJDX1NVTkJQUF9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvc3ZyNC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvc3ZyNC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhMWYxYzkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9zdnI0LmgKQEAgLTAsMCArMSwxMTkgQEAKKy8qIFNvbGFyaXMvU1BBUkMgY29uc3RhbnRzIGFuZCBkZWZpbml0aW9ucyAtLSAKKyAqIChDKSAxOTk2IE1pZ3VlbCBkZSBJY2F6YQorICoKKyAqIFRoaXMgZmlsZSBpcyBub3QgbWVhbnQgdG8gYmUgaW5jbHVkZWQgYnkgdXNlciBsZXZlbCBhcHBsaWNhdGlvbnMKKyAqIGJ1dCB0aGUgc29sYXJpcyBzeXNjYWxsIGVtdWxhdG9yCisgKi8KKworI2lmbmRlZiBfU1BBUkNfU1ZSNF9ICisjZGVmaW5lIF9TUEFSQ19TVlI0X0gKKworLyogU2lnbmFscyBhcyB1c2VkIGJ5IHN2cjQgKi8KK3R5cGVkZWYgc3RydWN0IHsgICAgICAgICAgICAgICAgLyogc2lnbmFsIHNldCB0eXBlICovCisJdWxvbmcgc2lnYml0c1s0XTsKK30gc3ZyNF9zaWdzZXRfdDsKKworLyogVmFsdWVzIGZvciBzaWdpbmZvLmNvZGUgKi8KKyNkZWZpbmUgU1ZSNF9TSU5PSU5GTyAzMjc2NworLyogU2lnaW5mbywgc3Vja2VyIGV4cGVjdHMgYnVuY2ggb2YgaW5mb3JtYXRpb24gb24gdGhvc2UgcGFyYW1ldGVycyAqLwordHlwZWRlZiB1bmlvbiB7CisJY2hhciB0b3RhbF9zaXplIFsxMjhdOworCXN0cnVjdCB7CisJCWludCBzaWdubzsKKwkJaW50IGNvZGU7CisJCWludCBlcnJvcjsKKwkJdW5pb24geworCQl9IGRhdGE7IAorCX0gc2lnaW5mbzsKK30gc3ZyNF9zaWdpbmZvX3Q7CisKKy8qIENvbnRleHQgZGVmaW5pdGlvbiAqLworCisvKiBMb2NhdGlvbiBvZiB0aGUgdXNlciBzdG9yZWQgcmVnaXN0ZXJzIGludG8gYSBncmVnX3QgKi8KK2VudW0geworCVNWUjRfUFNSLCBTVlI0X1BDLCBTVlI0X05QQywgU1ZSNF9ZLAorCVNWUjRfRzEsICBTVlI0X0cyLCBTVlI0X0czLCAgU1ZSNF9HNCwKKwlTVlI0X0c1LCAgU1ZSNF9HNiwgU1ZSNF9HNywgIFNWUjRfTzAsCisJU1ZSNF9PMSwgIFNWUjRfTzIsIFNWUjRfTzMsICBTVlI0X080LAorCVNWUjRfTzUsICBTVlI0X082LCBTVlI0X083Cit9OworCisvKiBzaXplb2YgKHJlZ3MpIC8gc2l6ZW9mIChncmVnX3QpLCBkZWZpbmVkIGluIHRoZSBBQkkgKi8KKyNkZWZpbmUgU1ZSNF9OUkVHUyAgMTkKKyNkZWZpbmUgU1ZSNF9NQVhXSU4gMzEKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVpbnQgcndpbl9sb1s4XTsKKwl1aW50IHJ3aW5faW5bOF07Cit9IHN2cjRfcndpbmRvd190OworCit0eXBlZGVmIHN0cnVjdCB7CisJaW50ICAgICAgICAgICAgY291bnQ7CisJaW50ICAgICAgICAgICAgX191c2VyICp3aW5wdHIgW1NWUjRfTUFYV0lOXTsgLyogcG9pbnRlciB0byB0aGUgd2luZG93cyAqLworCXN2cjRfcndpbmRvd190IHdpbltTVlI0X01BWFdJTl07ICAgICAgLyogdGhlIHdpbmRvd3MgKi8KK30gc3ZyNF9nd2luZG93c190OworCit0eXBlZGVmIGludCBzdnI0X2dyZWdzZXRfdFtTVlI0X05SRUdTXTsKKwordHlwZWRlZiBzdHJ1Y3QgeworCWRvdWJsZSAgIGZwdV9yZWdzWzMyXTsKKwl2b2lkICAgICAqZnBfcTsKKwl1bnNpZ25lZCBmcF9mc3I7CisJdV9jaGFyICAgZnBfbnFlbDsKKwl1X2NoYXIgICBmcF9ucXNpemU7CisJdV9jaGFyICAgaW51c2U7CQkvKiBpZiBmcHUgaXMgaW4gdXNlICovCit9IHN2cjRfZnJlZ3NldF90OworCit0eXBlZGVmIHN0cnVjdCB7CisJdWludCAgICBpZDsJCS8qIGlmIHRoaXMgaG9sZHMgInhycyIgc3RyaW5nID0+IHB0ciBpcyB2YWxpZCAqLworCWNhZGRyX3QgcHRyOworfSBzdnI0X3hyc190OworCisvKiBNYWNoaW5lIGRlcGVuZGVudCBjb250ZXh0ICovCit0eXBlZGVmIHN0cnVjdCB7CisJc3ZyNF9ncmVnc2V0X3QgICBncmVnOwkvKiByZWdpc3RlcnMgMC4uMTkgKHNlZSB0b3ApICovCisJc3ZyNF9nd2luZG93c190ICBfX3VzZXIgKmd3aW47CS8qIG1heSBwb2ludCB0byByZWdpc3RlciB3aW5kb3dzICovCisJc3ZyNF9mcmVnc2V0X3QgICBmcmVnOwkvKiBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMgKi8KKwlzdnI0X3hyc190ICAgICAgIHhyczsJLyogbWhtPyAqLworCWxvbmcgICAgICAgICAgICAgcGFkWzE5XTsKK30gc3ZyNF9tY29udGV4dF90OworCisvKiBmbGFncyBmb3Igc3RhY2tfdC5mbGFncyAqLworZW51bSBzdnI0X3N0YWNrX2ZsYWdzIHsKKwlTVlI0X1NTX09OU1RBQ0ssCisJU1ZSNF9TU19ESVNBQkxFLAorfTsKKworLyogc2lnbmFsIHN0YWNrIGV4ZWN0aW9uIHBsYWNlLCB1bnN1cHBvcnRlZCAqLwordHlwZWRlZiBzdHJ1Y3Qgc3ZyNF9zdGFja190IHsKKyAgICAgICAgY2hhciBfX3VzZXIgKnNwOworICAgICAgICBpbnQgIHNpemU7CisgICAgICAgIGludCAgZmxhZ3M7Cit9IHN2cjRfc3RhY2tfdDsKKworLyogQ29udGV4dCB1c2VkIGJ5IGdldGNvbnRleHQgYW5kIHNldGNvbnRleHQgKi8KK3R5cGVkZWYgc3RydWN0IHN2cjRfdWNvbnRleHRfdCB7CisJdV9sb25nICAgICAgICAgICAgICAgZmxhZ3M7IC8qIGNvbnRleHQgZmxhZ3MsIGluZGljYXRlIHdoYXQgaXMgbG9hZGVkICovCisJc3RydWN0IHN2cjRfdWNvbnRleHQgKmxpbms7CisJc3ZyNF9zaWdzZXRfdCAgICAgICAgc2lnbWFzazsKKwlzdnI0X3N0YWNrX3QgICAgICAgICBzdGFjazsKKwlzdnI0X21jb250ZXh0X3QgICAgICBtY29udGV4dDsKKwlsb25nICAgICAgICAgICAgICAgICBwYWRbMjNdOworfSBzdnI0X3Vjb250ZXh0X3Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAKKworLyogd2luZG93cyBob2xkIHRoZSB3aW5kb3dzIGFzIHRoZXkgd2VyZSBhdCBzaWduYWwgdGltZSwKKyAqIHVjb250ZXh0LT5tY29udGV4dCBob2xkcyBhIHBvaW50ZXIgdG8gdGhlbS4KKyAqIGFkZHJlc3NlcyBmb3IgdWMgYW5kIHNpIGFyZSBwYXNzZWQgYXMgcGFyYW1ldGVycyB0byBzdnI0IHNpZ25hbAorICogaGFuZGxlcgorICovCisKKy8qIFRoaXMgaXMgdGhlIHNpZ25hbCBmcmFtZSB0aGF0IGlzIHBhc3NlZCB0byB0aGUgc2lnbmFsIGhhbmRsZXIgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwlzdnI0X2d3aW5kb3dzX3QgZ3c7CS8qIHdpbmRvd3MgKi8KKwlzdnI0X3Vjb250ZXh0X3QgdWM7CS8qIG1hY2hpbmUgY29udGV4dCAqLworCXN2cjRfc2lnaW5mb190ICBzaTsJLyogc2lnaW5mbyAqLworfSBzdnI0X3NpZ25hbF9mcmFtZV90OworCisjZGVmaW5lIFNWUjRfU0ZfQUxJR05FRCAoKChzaXplb2YgKHN2cjRfc2lnbmFsX2ZyYW1lX3QpICsgNykgJiAofjcpKSkKKworI2VuZGlmIC8qIGluY2x1ZGUgY29udHJvbCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvc3dpZnQuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3N3aWZ0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUzNTA2MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3N3aWZ0LmgKQEAgLTAsMCArMSwxMDYgQEAKKy8qIHN3aWZ0Lmg6IFNwZWNpZmljIGRlZmluaXRpb25zIGZvciB0aGUgX2Jyb2tlbl8gU3dpZnQgU1JNTVUKKyAqICAgICAgICAgIE1NVSBtb2R1bGUuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk2IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKKyAqLworCisjaWZuZGVmIF9TUEFSQ19TV0lGVF9ICisjZGVmaW5lIF9TUEFSQ19TV0lGVF9ICisKKy8qIFN3aWZ0IGlzIHNvIGJyYWluIGRhbWFnZWQsIGhlcmUgaXMgdGhlIG1tdSBjb250cm9sIHJlZ2lzdGVyLiAqLworI2RlZmluZSBTV0lGVF9TVCAgICAgICAweDAwODAwMDAwICAgLyogU1cgdGFibGV3YWxrIGVuYWJsZSAqLworI2RlZmluZSBTV0lGVF9XUCAgICAgICAweDAwNDAwMDAwICAgLyogV2F0Y2hwb2ludCBlbmFibGUgICAqLworCisvKiBCcmFuY2ggZm9sZGluZyAoYnVnZ3ksIGRpc2FibGUgb24gcHJvZHVjdGlvbiBzeXN0ZW1zISkgICovCisjZGVmaW5lIFNXSUZUX0JGICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgU1dJRlRfUE1DICAgICAgMHgwMDE4MDAwMCAgIC8qIFBhZ2UgbW9kZSBjb250cm9sICAgKi8KKyNkZWZpbmUgU1dJRlRfUEUgICAgICAgMHgwMDA0MDAwMCAgIC8qIFBhcml0eSBlbmFibGUgICAgICAgKi8KKyNkZWZpbmUgU1dJRlRfUEMgICAgICAgMHgwMDAyMDAwMCAgIC8qIFBhcml0eSBjb250cm9sICAgICAgKi8KKyNkZWZpbmUgU1dJRlRfQVAgICAgICAgMHgwMDAxMDAwMCAgIC8qIEdyYXBoaWNzIHBhZ2UgbW9kZSBjb250cm9sIChUQ1gvU1gpICovCisjZGVmaW5lIFNXSUZUX0FDICAgICAgIDB4MDAwMDgwMDAgICAvKiBBbHRlcm5hdGUgQ2FjaGVhYmlsaXR5IChzZWUgdmlraW5nLmgpICovCisjZGVmaW5lIFNXSUZUX0JNICAgICAgIDB4MDAwMDQwMDAgICAvKiBCb290IG1vZGUgKi8KKyNkZWZpbmUgU1dJRlRfUkMgICAgICAgMHgwMDAwM2MwMCAgIC8qIERSQU0gcmVmcmVzaCBjb250cm9sICovCisjZGVmaW5lIFNXSUZUX0lFICAgICAgIDB4MDAwMDAyMDAgICAvKiBJbnN0cnVjdGlvbiBjYWNoZSBlbmFibGUgKi8KKyNkZWZpbmUgU1dJRlRfREUgICAgICAgMHgwMDAwMDEwMCAgIC8qIERhdGEgY2FjaGUgZW5hYmxlICovCisjZGVmaW5lIFNXSUZUX1NBICAgICAgIDB4MDAwMDAwODAgICAvKiBTdG9yZSBBbGxvY2F0ZSAqLworI2RlZmluZSBTV0lGVF9ORiAgICAgICAweDAwMDAwMDAyICAgLyogTm8gZmF1bHQgbW9kZSAqLworI2RlZmluZSBTV0lGVF9FTiAgICAgICAweDAwMDAwMDAxICAgLyogTU1VIGVuYWJsZSAqLworCisvKiBCaXRzIFsxMzo1XSBzZWxlY3Qgb25lIG9mIDUxMiBpbnN0cnVjdGlvbiBjYWNoZSB0YWdzICovCitzdGF0aWMgaW5saW5lIHZvaWQgc3dpZnRfaW52X2luc25fdGFnKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RhICUlZzAsIFslMF0gJTFcblx0IgorCQkJICAgICA6IC8qIG5vIG91dHB1dHMgKi8KKwkJCSAgICAgOiAiciIgKGFkZHIpLCAiaSIgKEFTSV9NX1RYVENfVEFHKQorCQkJICAgICA6ICJtZW1vcnkiKTsKK30KKworLyogQml0cyBbMTI6NF0gc2VsZWN0IG9uZSBvZiA1MTIgZGF0YSBjYWNoZSB0YWdzICovCitzdGF0aWMgaW5saW5lIHZvaWQgc3dpZnRfaW52X2RhdGFfdGFnKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RhICUlZzAsIFslMF0gJTFcblx0IgorCQkJICAgICA6IC8qIG5vIG91dHB1dHMgKi8KKwkJCSAgICAgOiAiciIgKGFkZHIpLCAiaSIgKEFTSV9NX0RBVEFDX1RBRykKKwkJCSAgICAgOiAibWVtb3J5Iik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzd2lmdF9mbHVzaF9kY2FjaGUodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisKKwlmb3IgKGFkZHIgPSAwOyBhZGRyIDwgMHgyMDAwOyBhZGRyICs9IDB4MTApCisJCXN3aWZ0X2ludl9kYXRhX3RhZyhhZGRyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN3aWZ0X2ZsdXNoX2ljYWNoZSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKworCWZvciAoYWRkciA9IDA7IGFkZHIgPCAweDQwMDA7IGFkZHIgKz0gMHgyMCkKKwkJc3dpZnRfaW52X2luc25fdGFnKGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3dpZnRfaWRmbGFzaF9jbGVhcih2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKworCWZvciAoYWRkciA9IDA7IGFkZHIgPCAweDIwMDA7IGFkZHIgKz0gMHgxMCkgeworCQlzd2lmdF9pbnZfaW5zbl90YWcoYWRkcjw8MSk7CisJCXN3aWZ0X2ludl9kYXRhX3RhZyhhZGRyKTsKKwl9Cit9CisKKy8qIFN3aWZ0IGlzIHNvIGJyb2tlbiwgaXQgaXNuJ3QgZXZlbiBzYWZlIHRvIHVzZSB0aGUgZm9sbG93aW5nLiAqLworc3RhdGljIGlubGluZSB2b2lkIHN3aWZ0X2ZsdXNoX3BhZ2UodW5zaWduZWQgbG9uZyBwYWdlKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdGEgJSVnMCwgWyUwXSAlMVxuXHQiCisJCQkgICAgIDogLyogbm8gb3V0cHV0cyAqLworCQkJICAgICA6ICJyIiAocGFnZSksICJpIiAoQVNJX01fRkxVU0hfUEFHRSkKKwkJCSAgICAgOiAibWVtb3J5Iik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzd2lmdF9mbHVzaF9zZWdtZW50KHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RhICUlZzAsIFslMF0gJTFcblx0IgorCQkJICAgICA6IC8qIG5vIG91dHB1dHMgKi8KKwkJCSAgICAgOiAiciIgKGFkZHIpLCAiaSIgKEFTSV9NX0ZMVVNIX1NFRykKKwkJCSAgICAgOiAibWVtb3J5Iik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzd2lmdF9mbHVzaF9yZWdpb24odW5zaWduZWQgbG9uZyBhZGRyKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdGEgJSVnMCwgWyUwXSAlMVxuXHQiCisJCQkgICAgIDogLyogbm8gb3V0cHV0cyAqLworCQkJICAgICA6ICJyIiAoYWRkciksICJpIiAoQVNJX01fRkxVU0hfUkVHSU9OKQorCQkJICAgICA6ICJtZW1vcnkiKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN3aWZ0X2ZsdXNoX2NvbnRleHQodm9pZCkKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RhICUlZzAsIFslJWcwXSAlMFxuXHQiCisJCQkgICAgIDogLyogbm8gb3V0cHV0cyAqLworCQkJICAgICA6ICJpIiAoQVNJX01fRkxVU0hfQ1RYKQorCQkJICAgICA6ICJtZW1vcnkiKTsKK30KKworI2VuZGlmIC8qICEoX1NQQVJDX1NXSUZUX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9zeXNlbi5oIGIvaW5jbHVkZS9hc20tc3BhcmMvc3lzZW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTJmYTZmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvc3lzZW4uaApAQCAtMCwwICsxLDE1IEBACisvKiAkSWQ6IHN5c2VuLmgsdiAxLjMgMTk5NS8xMS8yNSAwMjozMjo1OCBkYXZlbSBFeHAgJAorICogc3lzZW4uaDogIEJpdCBmaWVsZHMgd2l0aGluIHRoZSAiU3lzdGVtIEVuYWJsZSIgcmVnaXN0ZXIgYWNjZXNzZWQgdmlhCisgKiAgICAgICAgICAgdGhlIEFTSV9DT05UUk9MIGFkZHJlc3Mgc3BhY2UgYXQgYWRkcmVzcyBBQ19TWVNFTkFCTEUuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk0IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKKyAqLworCisjaWZuZGVmIF9TUEFSQ19TWVNFTl9ICisjZGVmaW5lIF9TUEFSQ19TWVNFTl9ICisKKyNkZWZpbmUgU0VOQUJMRV9EVk1BICAgMHgyMCAgIC8qIGVuYWJsZSBkdm1hIHRyYW5zZmVycyAqLworI2RlZmluZSBTRU5BQkxFX0NBQ0hFICAweDEwICAgLyogZW5hYmxlIFZBQyBjYWNoZSAqLworI2RlZmluZSBTRU5BQkxFX1JFU0VUICAweDA0ICAgLyogcmVzZXQgd2hvbGUgbWFjaGluZSwgZGFuZ2VyIFdpbGwgUm9iaW5zb24gKi8KKworI2VuZGlmIC8qIF9TUEFSQ19TWVNFTl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3N5c3RlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwY2YyMGMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9zeXN0ZW0uaApAQCAtMCwwICsxLDI2MiBAQAorLyogJElkOiBzeXN0ZW0uaCx2IDEuODYgMjAwMS8xMC8zMCAwNDo1NzoxMCBkYXZlbSBFeHAgJCAqLworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjaWZuZGVmIF9fU1BBUkNfU1lTVEVNX0gKKyNkZWZpbmUgX19TUEFSQ19TWVNURU1fSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgkvKiBOUl9DUFVTICovCisjaW5jbHVkZSA8bGludXgvdGhyZWFkX2luZm8uaD4KKworI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vcHNyLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS9idGZpeHVwLmg+CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKy8qCisgKiBTcGFyYyAoZ2VuZXJhbCkgQ1BVIHR5cGVzCisgKi8KK2VudW0gc3BhcmNfY3B1IHsKKyAgc3VuNCAgICAgICAgPSAweDAwLAorICBzdW40YyAgICAgICA9IDB4MDEsCisgIHN1bjRtICAgICAgID0gMHgwMiwKKyAgc3VuNGQgICAgICAgPSAweDAzLAorICBzdW40ZSAgICAgICA9IDB4MDQsCisgIHN1bjR1ICAgICAgID0gMHgwNSwgLyogVjggcGxvb3MgcGxvb3MgKi8KKyAgc3VuX3Vua25vd24gPSAweDA2LAorICBhcDEwMDAgICAgICA9IDB4MDcsIC8qIGFsbW9zdCBhIHN1bjRtICovCit9OworCisvKiBSZWFsbHksIHVzZXJsYW5kIHNob3VsZCBub3QgYmUgbG9va2luZyBhdCBhbnkgb2YgdGhpcy4uLiAqLworI2lmZGVmIF9fS0VSTkVMX18KKworZXh0ZXJuIGVudW0gc3BhcmNfY3B1IHNwYXJjX2NwdV9tb2RlbDsKKworI2lmbmRlZiBDT05GSUdfU1VONAorI2RlZmluZSBBUkNIX1NVTjRDX1NVTjQgKHNwYXJjX2NwdV9tb2RlbD09c3VuNGMpCisjZGVmaW5lIEFSQ0hfU1VONCAwCisjZWxzZQorI2RlZmluZSBBUkNIX1NVTjRDX1NVTjQgMQorI2RlZmluZSBBUkNIX1NVTjQgMQorI2VuZGlmCisKKyNkZWZpbmUgU1VONE1fTkNQVVMgICAgICAgICAgICA0ICAgICAgICAgICAgICAvKiBBcmNoaXRlY3R1cmFsIGxpbWl0IG9mIHN1bjRtLiAqLworCitleHRlcm4gc3RydWN0IHRocmVhZF9pbmZvICpjdXJyZW50X3NldFtOUl9DUFVTXTsKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZW1wdHlfYmFkX3BhZ2U7CitleHRlcm4gdW5zaWduZWQgbG9uZyBlbXB0eV9iYWRfcGFnZV90YWJsZTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGVtcHR5X3plcm9fcGFnZTsKKworZXh0ZXJuIHZvaWQgc3VuX2RvX2JyZWFrKHZvaWQpOworZXh0ZXJuIGludCBzZXJpYWxfY29uc29sZTsKK2V4dGVybiBpbnQgc3RvcF9hX2VuYWJsZWQ7CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBjb25faXNfcHJlc2VudCh2b2lkKQoreworCXJldHVybiBzZXJpYWxfY29uc29sZSA/IDAgOiAxOworfQorCisvKiBXaGVuIGEgY29udGV4dCBzd2l0Y2ggaGFwcGVucyB3ZSBtdXN0IGZsdXNoIGFsbCB1c2VyIHdpbmRvd3Mgc28gdGhhdAorICogdGhlIHdpbmRvd3Mgb2YgdGhlIGN1cnJlbnQgcHJvY2VzcyBhcmUgZmx1c2hlZCBvbnRvIGl0cyBzdGFjay4gVGhpcworICogd2F5IHRoZSB3aW5kb3dzIGFyZSBhbGwgY2xlYW4gZm9yIHRoZSBuZXh0IHByb2Nlc3MgYW5kIHRoZSBzdGFjaworICogZnJhbWVzIGFyZSB1cCB0byBkYXRlLgorICovCitleHRlcm4gdm9pZCBmbHVzaF91c2VyX3dpbmRvd3Modm9pZCk7CitleHRlcm4gdm9pZCBraWxsX3VzZXJfd2luZG93cyh2b2lkKTsKK2V4dGVybiB2b2lkIHN5bmNocm9uaXplX3VzZXJfc3RhY2sodm9pZCk7CitleHRlcm4gdm9pZCBmcHNhdmUodW5zaWduZWQgbG9uZyAqZnByZWdzLCB1bnNpZ25lZCBsb25nICpmc3IsCisJCSAgIHZvaWQgKmZwcXVldWUsIHVuc2lnbmVkIGxvbmcgKmZwcWRlcHRoKTsKKworI2lmZGVmIENPTkZJR19TTVAKKyNkZWZpbmUgU1dJVENIX0VOVEVSKHBydikgXAorCWRvIHsJCQlcCisJaWYgKHRlc3RfdHNrX3RocmVhZF9mbGFnKHBydiwgVElGX1VTRURGUFUpKSB7IFwKKwkJcHV0X3BzcihnZXRfcHNyKCkgfCBQU1JfRUYpOyBcCisJCWZwc2F2ZSgmKHBydiktPnRocmVhZC5mbG9hdF9yZWdzWzBdLCAmKHBydiktPnRocmVhZC5mc3IsIFwKKwkJICAgICAgICYocHJ2KS0+dGhyZWFkLmZwcXVldWVbMF0sICYocHJ2KS0+dGhyZWFkLmZwcWRlcHRoKTsgXAorCQljbGVhcl90c2tfdGhyZWFkX2ZsYWcocHJ2LCBUSUZfVVNFREZQVSk7IFwKKwkJKHBydiktPnRocmVhZC5rcmVncy0+cHNyICY9IH5QU1JfRUY7IFwKKwl9IFwKKwl9IHdoaWxlKDApCisKKyNkZWZpbmUgU1dJVENIX0RPX0xBWllfRlBVKG5leHQpCS8qICovCisjZWxzZQorI2RlZmluZSBTV0lUQ0hfRU5URVIocHJ2KQkJLyogKi8KKyNkZWZpbmUgU1dJVENIX0RPX0xBWllfRlBVKG54dCkJXAorCWRvIHsJCQlcCisJaWYgKGxhc3RfdGFza191c2VkX21hdGggIT0gKG54dCkpCQlcCisJCShueHQpLT50aHJlYWQua3JlZ3MtPnBzciY9flBTUl9FRjsJXAorCX0gd2hpbGUoMCkKKyNlbmRpZgorCisvKgorICogRmx1c2ggd2luZG93cyBzbyB0aGF0IHRoZSBWTSBzd2l0Y2ggd2hpY2ggZm9sbG93cworICogd291bGQgbm90IHB1bGwgdGhlIHN0YWNrIGZyb20gdW5kZXIgdXMuCisgKgorICogU1dJVENIX0VOVEVSIGFuZCBTV0lUSF9ET19MQVpZX0ZQVSBkbyBub3Qgd29yayB5ZXQgKGUuZy4gU01QIGRvZXMgbm90IHdvcmspCisgKiBYWFggV1RGIGlzIHRoZSBhYm92ZSBjb21tZW50PyBGb3VuZCBpbiBsYXRlIHRlZW4gMi40LnguCisgKi8KKyNkZWZpbmUgcHJlcGFyZV9hcmNoX3N3aXRjaChycSwgbmV4dCkgZG8geyBcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oIFwKKwkiLmdsb2JsXHRmbHVzaF9wYXRjaF9zd2l0Y2hcbmZsdXNoX3BhdGNoX3N3aXRjaDpcblx0IiBcCisJInNhdmUgJXNwLCAtMHg0MCwgJXNwOyBzYXZlICVzcCwgLTB4NDAsICVzcDsgc2F2ZSAlc3AsIC0weDQwLCAlc3Bcblx0IiBcCisJInNhdmUgJXNwLCAtMHg0MCwgJXNwOyBzYXZlICVzcCwgLTB4NDAsICVzcDsgc2F2ZSAlc3AsIC0weDQwLCAlc3Bcblx0IiBcCisJInNhdmUgJXNwLCAtMHg0MCwgJXNwXG5cdCIgXAorCSJyZXN0b3JlOyByZXN0b3JlOyByZXN0b3JlOyByZXN0b3JlOyByZXN0b3JlOyByZXN0b3JlOyByZXN0b3JlIik7IFwKK30gd2hpbGUoMCkKKyNkZWZpbmUgZmluaXNoX2FyY2hfc3dpdGNoKHJxLCBuZXh0KQlzcGluX3VubG9ja19pcnEoJihycSktPmxvY2spCisjZGVmaW5lIHRhc2tfcnVubmluZyhycSwgcCkJCSgocnEpLT5jdXJyID09IChwKSkKKworCS8qIE11Y2ggY2FyZSBoYXMgZ29uZSBpbnRvIHRoaXMgY29kZSwgZG8gbm90IHRvdWNoIGl0LgorCSAqCisJICogV2UgbmVlZCB0byBsb2FkdXAgcmVncyBsMC9sMSBmb3IgdGhlIG5ld2x5IGZvcmtlZCBjaGlsZAorCSAqIGNhc2UgYmVjYXVzZSB0aGUgdHJhcCByZXR1cm4gcGF0aCByZWxpZXMgb24gdGhvc2UgcmVnaXN0ZXJzCisJICogaG9sZGluZyBjZXJ0YWluIHZhbHVlcywgZ2NjIGlzIHRvbGQgdGhhdCB0aGV5IGFyZSBjbG9iYmVyZWQuCisJICogR2NjIG5lZWRzIHJlZ2lzdGVycyBmb3IgMyB2YWx1ZXMgaW4gYW5kIDEgdmFsdWUgb3V0LCBzbyB3ZQorCSAqIGNsb2JiZXIgZXZlcnkgbm9uLWZpeGVkLXVzYWdlIHJlZ2lzdGVyIGJlc2lkZXMgbDIvbDMvbzQvbzUuICAtRGF2ZU0KKwkgKgorCSAqIEhleSBEYXZlLCB0aGF0IGRvIG5vdCB0b3VjaCBzaWduIGlzIHRvbyBtdWNoIG9mIGFuIGluY2VudGl2ZQorCSAqIC0gQW50b24gJiBQZXRlCisJICovCisjZGVmaW5lIHN3aXRjaF90byhwcmV2LCBuZXh0LCBsYXN0KSBkbyB7CQkJCQkJXAorCVNXSVRDSF9FTlRFUihwcmV2KTsJCQkJCQkJCVwKKwlTV0lUQ0hfRE9fTEFaWV9GUFUobmV4dCk7CQkJCQkJCVwKKwljcHVfc2V0KHNtcF9wcm9jZXNzb3JfaWQoKSwgbmV4dC0+YWN0aXZlX21tLT5jcHVfdm1fbWFzayk7CQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCQkJXAorCSJzZXRoaQklJWhpKGhlcmUgLSAweDgpLCAlJW83XG5cdCIJCQkJCQlcCisJIm1vdgklJWc2LCAlJWczXG5cdCIJCQkJCQkJCVwKKwkib3IJJSVvNywgJSVsbyhoZXJlIC0gMHg4KSwgJSVvN1xuXHQiCQkJCQlcCisJInJkCSUlcHNyLCAlJWc0XG5cdCIJCQkJCQkJXAorCSJzdGQJJSVzcCwgWyUlZzYgKyAlNF1cblx0IgkJCQkJCQlcCisJInJkCSUld2ltLCAlJWc1XG5cdCIJCQkJCQkJXAorCSJ3cgklJWc0LCAweDIwLCAlJXBzclxuXHQiCQkJCQkJCVwKKwkibm9wXG5cdCIJCQkJCQkJCQlcCisJInN0ZAklJWc0LCBbJSVnNiArICUzXVxuXHQiCQkJCQkJCVwKKwkibGRkCVslMiArICUzXSwgJSVnNFxuXHQiCQkJCQkJCVwKKwkibW92CSUyLCAlJWc2XG5cdCIJCQkJCQkJCVwKKwkiLmdsb2JsCXBhdGNobWVfc3RvcmVfbmV3X2N1cnJlbnRcbiIJCQkJCQlcCisicGF0Y2htZV9zdG9yZV9uZXdfY3VycmVudDpcblx0IgkJCQkJCQlcCisJInN0CSUyLCBbJTFdXG5cdCIJCQkJCQkJCVwKKwkid3IJJSVnNCwgMHgyMCwgJSVwc3Jcblx0IgkJCQkJCQlcCisJIm5vcFxuXHQiCQkJCQkJCQkJXAorCSJub3Bcblx0IgkJCQkJCQkJCVwKKwkibm9wXG5cdCIJLyogTEVPTiBuZWVkcyBhbGwgMyBub3BzOiBsb2FkIHRvICVzcCBkZXBlbmRzIG9uIENXUC4gKi8JCVwKKwkibGRkCVslJWc2ICsgJTRdLCAlJXNwXG5cdCIJCQkJCQkJXAorCSJ3cgklJWc1LCAweDAsICUld2ltXG5cdCIJCQkJCQkJXAorCSJsZGQJWyUlc3AgKyAweDAwXSwgJSVsMFxuXHQiCQkJCQkJXAorCSJsZGQJWyUlc3AgKyAweDM4XSwgJSVpNlxuXHQiCQkJCQkJXAorCSJ3cgklJWc0LCAweDAsICUlcHNyXG5cdCIJCQkJCQkJXAorCSJub3Bcblx0IgkJCQkJCQkJCVwKKwkibm9wXG5cdCIJCQkJCQkJCQlcCisJImptcGwJJSVvNyArIDB4OCwgJSVnMFxuXHQiCQkJCQkJCVwKKwkiIGxkCVslJWczICsgJTVdLCAlMFxuXHQiCQkJCQkJCVwKKwkiaGVyZTpcbiIJCQkJCQkJCQlcCisgICAgICAgIDogIj0mciIgKGxhc3QpCQkJCQkJCQkJXAorICAgICAgICA6ICJyIiAoJihjdXJyZW50X3NldFtoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKV0pKSwJXAorCSAgInIiICgobmV4dCktPnRocmVhZF9pbmZvKSwJCQkJXAorCSAgImkiIChUSV9LUFNSKSwJCQkJCVwKKwkgICJpIiAoVElfS1NQKSwJCQkJCQlcCisJICAiaSIgKFRJX1RBU0spCQkJCQkJXAorCTogICAgICAgImcxIiwgImcyIiwgImczIiwgImc0IiwgImc1IiwgICAgICAgImc3IiwJXAorCSAgImwwIiwgImwxIiwgICAgICAgImwzIiwgImw0IiwgImw1IiwgImw2IiwgImw3IiwJXAorCSAgImkwIiwgImkxIiwgImkyIiwgImkzIiwgImk0IiwgImk1IiwJCQlcCisJICAibzAiLCAibzEiLCAibzIiLCAibzMiLCAgICAgICAgICAgICAgICAgICAibzciKTsJXAorCX0gd2hpbGUoMCkKKworLyoKKyAqIENoYW5naW5nIHRoZSBJUlEgbGV2ZWwgb24gdGhlIFNwYXJjLgorICovCitleHRlcm4gdm9pZCBsb2NhbF9pcnFfcmVzdG9yZSh1bnNpZ25lZCBsb25nKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fbG9jYWxfaXJxX3NhdmUodm9pZCk7CitleHRlcm4gdm9pZCBsb2NhbF9pcnFfZW5hYmxlKHZvaWQpOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0aXBsKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyByZXR2YWw7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygicmQJJSVwc3IsICUwIiA6ICI9ciIgKHJldHZhbCkpOworCXJldHVybiByZXR2YWw7Cit9CisKKyNkZWZpbmUgbG9jYWxfc2F2ZV9mbGFncyhmbGFncykJKChmbGFncykgPSBnZXRpcGwoKSkKKyNkZWZpbmUgbG9jYWxfaXJxX3NhdmUoZmxhZ3MpCSgoZmxhZ3MpID0gX19sb2NhbF9pcnFfc2F2ZSgpKQorI2RlZmluZSBsb2NhbF9pcnFfZGlzYWJsZSgpCSgodm9pZCkgX19sb2NhbF9pcnFfc2F2ZSgpKQorI2RlZmluZSBpcnFzX2Rpc2FibGVkKCkJCSgoZ2V0aXBsKCkgJiBQU1JfUElMKSAhPSAwKQorCisvKiBYWFggQ2hhbmdlIHRoaXMgaWYgd2UgZXZlciB1c2UgYSBQU08gbW9kZSBrZXJuZWwuICovCisjZGVmaW5lIG1iKCkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCIiIDogOiA6ICJtZW1vcnkiKQorI2RlZmluZSBybWIoKQltYigpCisjZGVmaW5lIHdtYigpCW1iKCkKKyNkZWZpbmUgcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQlkbyB7IH0gd2hpbGUoMCkKKyNkZWZpbmUgc2V0X21iKF9fdmFyLCBfX3ZhbHVlKSAgZG8geyBfX3ZhciA9IF9fdmFsdWU7IG1iKCk7IH0gd2hpbGUoMCkKKyNkZWZpbmUgc2V0X3dtYihfX3ZhciwgX192YWx1ZSkgc2V0X21iKF9fdmFyLCBfX3ZhbHVlKQorI2RlZmluZSBzbXBfbWIoKQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiIjo6OiJtZW1vcnkiKQorI2RlZmluZSBzbXBfcm1iKCkJX19hc21fXyBfX3ZvbGF0aWxlX18oIiI6OjoibWVtb3J5IikKKyNkZWZpbmUgc21wX3dtYigpCV9fYXNtX18gX192b2xhdGlsZV9fKCIiOjo6Im1lbW9yeSIpCisjZGVmaW5lIHNtcF9yZWFkX2JhcnJpZXJfZGVwZW5kcygpCWRvIHsgfSB3aGlsZSgwKQorCisjZGVmaW5lIG5vcCgpIF9fYXNtX18gX192b2xhdGlsZV9fICgibm9wIikKKworLyogVGhpcyBoYXMgc3BlY2lhbCBjYWxsaW5nIGNvbnZlbnRpb25zICovCisjaWZuZGVmIENPTkZJR19TTVAKK0JURklYVVBERUZfQ0FMTCh2b2lkLCBfX194Y2hnMzIsIHZvaWQpCisjZW5kaWYKKworZXh0ZXJuIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyB4Y2hnX3UzMihfX3ZvbGF0aWxlX18gdW5zaWduZWQgbG9uZyAqbSwgdW5zaWduZWQgbG9uZyB2YWwpCit7CisjaWZkZWYgQ09ORklHX1NNUAorCV9fYXNtX18gX192b2xhdGlsZV9fKCJzd2FwIFslMl0sICUwIgorCQkJICAgICA6ICI9JnIiICh2YWwpCisJCQkgICAgIDogIjAiICh2YWwpLCAiciIgKG0pCisJCQkgICAgIDogIm1lbW9yeSIpOworCXJldHVybiB2YWw7CisjZWxzZQorCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgKnB0ciBhc20oImcxIik7CisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyByZXQgYXNtKCJnMiIpOworCisJcHRyID0gKHVuc2lnbmVkIGxvbmcgKikgbTsKKwlyZXQgPSB2YWw7CisKKwkvKiBOb3RlOiB0aGlzIGlzIG1hZ2ljIGFuZCB0aGUgbm9wIHRoZXJlIGlzCisJICAgcmVhbGx5IG5lZWRlZC4gKi8KKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkibW92CSUlbzcsICUlZzRcblx0IgorCSJjYWxsCV9fX2ZfX19feGNoZzMyXG5cdCIKKwkiIG5vcFxuXHQiCisJOiAiPSZyIiAocmV0KQorCTogIjAiIChyZXQpLCAiciIgKHB0cikKKwk6ICJnMyIsICJnNCIsICJnNyIsICJtZW1vcnkiLCAiY2MiKTsKKworCXJldHVybiByZXQ7CisjZW5kaWYKK30KKworI2RlZmluZSB4Y2hnKHB0cix4KSAoKF9fdHlwZW9mX18oKihwdHIpKSlfX3hjaGcoKHVuc2lnbmVkIGxvbmcpKHgpLChwdHIpLHNpemVvZigqKHB0cikpKSkKKyNkZWZpbmUgdGFzKHB0cikgKHhjaGcoKHB0ciksMSkpCisKK2V4dGVybiB2b2lkIF9feGNoZ19jYWxsZWRfd2l0aF9iYWRfcG9pbnRlcih2b2lkKTsKKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBfX3hjaGcodW5zaWduZWQgbG9uZyB4LCBfX3ZvbGF0aWxlX18gdm9pZCAqIHB0ciwgaW50IHNpemUpCit7CisJc3dpdGNoIChzaXplKSB7CisJY2FzZSA0OgorCQlyZXR1cm4geGNoZ191MzIocHRyLCB4KTsKKwl9OworCV9feGNoZ19jYWxsZWRfd2l0aF9iYWRfcG9pbnRlcigpOworCXJldHVybiB4OworfQorCitleHRlcm4gdm9pZCBkaWVfaWZfa2VybmVsKGNoYXIgKnN0ciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpIF9fYXR0cmlidXRlX18gKChub3JldHVybikpOworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKyNkZWZpbmUgYXJjaF9hbGlnbl9zdGFjayh4KSAoeCkKKworI2VuZGlmIC8qICEoX19TUEFSQ19TWVNURU1fSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3Rlcm1iaXRzLmggYi9pbmNsdWRlL2FzbS1zcGFyYy90ZXJtYml0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3OTRkNzEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy90ZXJtYml0cy5oCkBAIC0wLDAgKzEsMjM0IEBACisjaWZuZGVmIF9TUEFSQ19URVJNQklUU19ICisjZGVmaW5lIF9TUEFSQ19URVJNQklUU19ICisKKyNpbmNsdWRlIDxsaW51eC9wb3NpeF90eXBlcy5oPgorCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgICBjY190OwordHlwZWRlZiB1bnNpZ25lZCBpbnQgICAgc3BlZWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyAgIHRjZmxhZ190OworCisjZGVmaW5lIE5DQyA4CitzdHJ1Y3QgdGVybWlvIHsKKwl1bnNpZ25lZCBzaG9ydCBjX2lmbGFnOwkJLyogaW5wdXQgbW9kZSBmbGFncyAqLworCXVuc2lnbmVkIHNob3J0IGNfb2ZsYWc7CQkvKiBvdXRwdXQgbW9kZSBmbGFncyAqLworCXVuc2lnbmVkIHNob3J0IGNfY2ZsYWc7CQkvKiBjb250cm9sIG1vZGUgZmxhZ3MgKi8KKwl1bnNpZ25lZCBzaG9ydCBjX2xmbGFnOwkJLyogbG9jYWwgbW9kZSBmbGFncyAqLworCXVuc2lnbmVkIGNoYXIgY19saW5lOwkJLyogbGluZSBkaXNjaXBsaW5lICovCisJdW5zaWduZWQgY2hhciBjX2NjW05DQ107CS8qIGNvbnRyb2wgY2hhcmFjdGVycyAqLworfTsKKworI2RlZmluZSBOQ0NTIDE3CitzdHJ1Y3QgdGVybWlvcyB7CisJdGNmbGFnX3QgY19pZmxhZzsJCS8qIGlucHV0IG1vZGUgZmxhZ3MgKi8KKwl0Y2ZsYWdfdCBjX29mbGFnOwkJLyogb3V0cHV0IG1vZGUgZmxhZ3MgKi8KKwl0Y2ZsYWdfdCBjX2NmbGFnOwkJLyogY29udHJvbCBtb2RlIGZsYWdzICovCisJdGNmbGFnX3QgY19sZmxhZzsJCS8qIGxvY2FsIG1vZGUgZmxhZ3MgKi8KKwljY190IGNfbGluZTsJCQkvKiBsaW5lIGRpc2NpcGxpbmUgKi8KKwljY190IGNfY2NbTkNDU107CQkvKiBjb250cm9sIGNoYXJhY3RlcnMgKi8KKyNpZmRlZiBfX0tFUk5FTF9fCisjZGVmaW5lIFNJWkVPRl9VU0VSX1RFUk1JT1Mgc2l6ZW9mIChzdHJ1Y3QgdGVybWlvcykgLSAoMipzaXplb2YgKGNjX3QpKQorCWNjX3QgX3hfY2NbMl07ICAgICAgICAgICAgICAgICAgLyogV2UgbmVlZCB0aGVtIHRvIGhvbGQgdm1pbi92dGltZSAqLworI2VuZGlmCit9OworCisvKiBjX2NjIGNoYXJhY3RlcnMgKi8KKyNkZWZpbmUgVklOVFIgICAgMAorI2RlZmluZSBWUVVJVCAgICAxCisjZGVmaW5lIFZFUkFTRSAgIDIKKyNkZWZpbmUgVktJTEwgICAgMworI2RlZmluZSBWRU9GICAgICA0CisjZGVmaW5lIFZFT0wgICAgIDUKKyNkZWZpbmUgVkVPTDIgICAgNgorI2RlZmluZSBWU1dUQyAgICA3CisjZGVmaW5lIFZTVEFSVCAgIDgKKyNkZWZpbmUgVlNUT1AgICAgOQorCisKKworI2RlZmluZSBWU1VTUCAgICAxMAorI2RlZmluZSBWRFNVU1AgICAxMSAgLyogU3VuT1MgUE9TSVggbmljZXR5IEkgZG8gYmVsaWV2ZS4uLiAqLworI2RlZmluZSBWUkVQUklOVCAxMgorI2RlZmluZSBWRElTQ0FSRCAxMworI2RlZmluZSBWV0VSQVNFICAxNAorI2RlZmluZSBWTE5FWFQgICAxNQorCisvKiBLZXJuZWwga2VlcHMgdm1pbi92dGltZSBzZXBhcmF0ZWQsIHVzZXIgYXBwcyBhc3N1bWUgdm1pbi92dGltZSBpcworICogc2hhcmVkIHdpdGggZW9mL2VvbAorICovCisjaWZkZWYgX19LRVJORUxfXworI2RlZmluZSBWTUlOICAgICAxNgorI2RlZmluZSBWVElNRSAgICAxNworI2Vsc2UKKyNkZWZpbmUgVk1JTiAgICAgVkVPRgorI2RlZmluZSBWVElNRSAgICBWRU9MCisjZW5kaWYKKworLyogY19pZmxhZyBiaXRzICovCisjZGVmaW5lIElHTkJSSwkweDAwMDAwMDAxCisjZGVmaW5lIEJSS0lOVAkweDAwMDAwMDAyCisjZGVmaW5lIElHTlBBUgkweDAwMDAwMDA0CisjZGVmaW5lIFBBUk1SSwkweDAwMDAwMDA4CisjZGVmaW5lIElOUENLCTB4MDAwMDAwMTAKKyNkZWZpbmUgSVNUUklQCTB4MDAwMDAwMjAKKyNkZWZpbmUgSU5MQ1IJMHgwMDAwMDA0MAorI2RlZmluZSBJR05DUgkweDAwMDAwMDgwCisjZGVmaW5lIElDUk5MCTB4MDAwMDAxMDAKKyNkZWZpbmUgSVVDTEMJMHgwMDAwMDIwMAorI2RlZmluZSBJWE9OCTB4MDAwMDA0MDAKKyNkZWZpbmUgSVhBTlkJMHgwMDAwMDgwMAorI2RlZmluZSBJWE9GRgkweDAwMDAxMDAwCisjZGVmaW5lIElNQVhCRUwJMHgwMDAwMjAwMAorI2RlZmluZSBJVVRGOCAgIDB4MDAwMDQwMDAKKworLyogY19vZmxhZyBiaXRzICovCisjZGVmaW5lIE9QT1NUCTB4MDAwMDAwMDEKKyNkZWZpbmUgT0xDVUMJMHgwMDAwMDAwMgorI2RlZmluZSBPTkxDUgkweDAwMDAwMDA0CisjZGVmaW5lIE9DUk5MCTB4MDAwMDAwMDgKKyNkZWZpbmUgT05PQ1IJMHgwMDAwMDAxMAorI2RlZmluZSBPTkxSRVQJMHgwMDAwMDAyMAorI2RlZmluZSBPRklMTAkweDAwMDAwMDQwCisjZGVmaW5lIE9GREVMCTB4MDAwMDAwODAKKyNkZWZpbmUgTkxETFkJMHgwMDAwMDEwMAorI2RlZmluZSAgIE5MMAkweDAwMDAwMDAwCisjZGVmaW5lICAgTkwxCTB4MDAwMDAxMDAKKyNkZWZpbmUgQ1JETFkJMHgwMDAwMDYwMAorI2RlZmluZSAgIENSMAkweDAwMDAwMDAwCisjZGVmaW5lICAgQ1IxCTB4MDAwMDAyMDAKKyNkZWZpbmUgICBDUjIJMHgwMDAwMDQwMAorI2RlZmluZSAgIENSMwkweDAwMDAwNjAwCisjZGVmaW5lIFRBQkRMWQkweDAwMDAxODAwCisjZGVmaW5lICAgVEFCMAkweDAwMDAwMDAwCisjZGVmaW5lICAgVEFCMQkweDAwMDAwODAwCisjZGVmaW5lICAgVEFCMgkweDAwMDAxMDAwCisjZGVmaW5lICAgVEFCMwkweDAwMDAxODAwCisjZGVmaW5lICAgWFRBQlMJMHgwMDAwMTgwMAorI2RlZmluZSBCU0RMWQkweDAwMDAyMDAwCisjZGVmaW5lICAgQlMwCTB4MDAwMDAwMDAKKyNkZWZpbmUgICBCUzEJMHgwMDAwMjAwMAorI2RlZmluZSBWVERMWQkweDAwMDA0MDAwCisjZGVmaW5lICAgVlQwCTB4MDAwMDAwMDAKKyNkZWZpbmUgICBWVDEJMHgwMDAwNDAwMAorI2RlZmluZSBGRkRMWQkweDAwMDA4MDAwCisjZGVmaW5lICAgRkYwCTB4MDAwMDAwMDAKKyNkZWZpbmUgICBGRjEJMHgwMDAwODAwMAorI2RlZmluZSBQQUdFT1VUIDB4MDAwMTAwMDAgIC8qIFNVTk9TIHNwZWNpZmljICovCisjZGVmaW5lIFdSQVAgICAgMHgwMDAyMDAwMCAgLyogU1VOT1Mgc3BlY2lmaWMgKi8KKworLyogY19jZmxhZyBiaXQgbWVhbmluZyAqLworI2RlZmluZSBDQkFVRAkgIDB4MDAwMDEwMGYKKyNkZWZpbmUgIEIwCSAgMHgwMDAwMDAwMCAgIC8qIGhhbmcgdXAgKi8KKyNkZWZpbmUgIEI1MAkgIDB4MDAwMDAwMDEKKyNkZWZpbmUgIEI3NQkgIDB4MDAwMDAwMDIKKyNkZWZpbmUgIEIxMTAJICAweDAwMDAwMDAzCisjZGVmaW5lICBCMTM0CSAgMHgwMDAwMDAwNAorI2RlZmluZSAgQjE1MAkgIDB4MDAwMDAwMDUKKyNkZWZpbmUgIEIyMDAJICAweDAwMDAwMDA2CisjZGVmaW5lICBCMzAwCSAgMHgwMDAwMDAwNworI2RlZmluZSAgQjYwMAkgIDB4MDAwMDAwMDgKKyNkZWZpbmUgIEIxMjAwCSAgMHgwMDAwMDAwOQorI2RlZmluZSAgQjE4MDAJICAweDAwMDAwMDBhCisjZGVmaW5lICBCMjQwMAkgIDB4MDAwMDAwMGIKKyNkZWZpbmUgIEI0ODAwCSAgMHgwMDAwMDAwYworI2RlZmluZSAgQjk2MDAJICAweDAwMDAwMDBkCisjZGVmaW5lICBCMTkyMDAJICAweDAwMDAwMDBlCisjZGVmaW5lICBCMzg0MDAJICAweDAwMDAwMDBmCisjZGVmaW5lIEVYVEEgICAgICBCMTkyMDAKKyNkZWZpbmUgRVhUQiAgICAgIEIzODQwMAorI2RlZmluZSAgQ1NJWkUgICAgMHgwMDAwMDAzMAorI2RlZmluZSAgIENTNQkgIDB4MDAwMDAwMDAKKyNkZWZpbmUgICBDUzYJICAweDAwMDAwMDEwCisjZGVmaW5lICAgQ1M3CSAgMHgwMDAwMDAyMAorI2RlZmluZSAgIENTOAkgIDB4MDAwMDAwMzAKKyNkZWZpbmUgQ1NUT1BCCSAgMHgwMDAwMDA0MAorI2RlZmluZSBDUkVBRAkgIDB4MDAwMDAwODAKKyNkZWZpbmUgUEFSRU5CCSAgMHgwMDAwMDEwMAorI2RlZmluZSBQQVJPREQJICAweDAwMDAwMjAwCisjZGVmaW5lIEhVUENMCSAgMHgwMDAwMDQwMAorI2RlZmluZSBDTE9DQUwJICAweDAwMDAwODAwCisjZGVmaW5lIENCQVVERVggICAweDAwMDAxMDAwCisvKiBXZSdsbCBuZXZlciBzZWUgdGhlc2Ugc3BlZWRzIHdpdGggdGhlIFppbG9ncywgYnV0IGZvciBjb21wbGV0ZW5lc3MuLi4gKi8KKyNkZWZpbmUgIEI1NzYwMCAgIDB4MDAwMDEwMDEKKyNkZWZpbmUgIEIxMTUyMDAgIDB4MDAwMDEwMDIKKyNkZWZpbmUgIEIyMzA0MDAgIDB4MDAwMDEwMDMKKyNkZWZpbmUgIEI0NjA4MDAgIDB4MDAwMDEwMDQKKy8qIFRoaXMgaXMgd2hhdCB3ZSBjYW4gZG8gd2l0aCB0aGUgWmlsb2dzLiAqLworI2RlZmluZSAgQjc2ODAwICAgMHgwMDAwMTAwNQorLyogVGhpcyBpcyB3aGF0IHdlIGNhbiBkbyB3aXRoIHRoZSBTQUI4MjUzMi4gKi8KKyNkZWZpbmUgIEIxNTM2MDAgIDB4MDAwMDEwMDYKKyNkZWZpbmUgIEIzMDcyMDAgIDB4MDAwMDEwMDcKKyNkZWZpbmUgIEI2MTQ0MDAgIDB4MDAwMDEwMDgKKyNkZWZpbmUgIEI5MjE2MDAgIDB4MDAwMDEwMDkKKy8qIEFuZCB0aGVzZSBhcmUgdGhlIHJlc3QuLi4gKi8KKyNkZWZpbmUgIEI1MDAwMDAgIDB4MDAwMDEwMGEKKyNkZWZpbmUgIEI1NzYwMDAgIDB4MDAwMDEwMGIKKyNkZWZpbmUgQjEwMDAwMDAgIDB4MDAwMDEwMGMKKyNkZWZpbmUgQjExNTIwMDAgIDB4MDAwMDEwMGQKKyNkZWZpbmUgQjE1MDAwMDAgIDB4MDAwMDEwMGUKKyNkZWZpbmUgQjIwMDAwMDAgIDB4MDAwMDEwMGYKKy8qIFRoZXNlIGhhdmUgdG90YWxseSBib2d1cyB2YWx1ZXMgYW5kIG5vYm9keSB1c2VzIHRoZW0KKyAgIHNvIGZhci4gTGF0ZXIgb24gd2UnZCBoYXZlIHRvIHVzZSBzYXkgMHgxMDAwMHggYW5kCisgICBhZGp1c3QgQ0JBVUQgY29uc3RhbnQgYW5kIGRyaXZlcnMgYWNjb3JkaW5nbHkuCisjZGVmaW5lIEIyNTAwMDAwICAweDAwMDAxMDEwCisjZGVmaW5lIEIzMDAwMDAwICAweDAwMDAxMDExCisjZGVmaW5lIEIzNTAwMDAwICAweDAwMDAxMDEyCisjZGVmaW5lIEI0MDAwMDAwICAweDAwMDAxMDEzICAqLworI2RlZmluZSBDSUJBVUQJICAweDEwMGYwMDAwICAvKiBpbnB1dCBiYXVkIHJhdGUgKG5vdCB1c2VkKSAqLworI2RlZmluZSBDTVNQQVIJICAweDQwMDAwMDAwICAvKiBtYXJrIG9yIHNwYWNlIChzdGljaykgcGFyaXR5ICovCisjZGVmaW5lIENSVFNDVFMJICAweDgwMDAwMDAwICAvKiBmbG93IGNvbnRyb2wgKi8KKworLyogY19sZmxhZyBiaXRzICovCisjZGVmaW5lIElTSUcJMHgwMDAwMDAwMQorI2RlZmluZSBJQ0FOT04JMHgwMDAwMDAwMgorI2RlZmluZSBYQ0FTRQkweDAwMDAwMDA0CisjZGVmaW5lIEVDSE8JMHgwMDAwMDAwOAorI2RlZmluZSBFQ0hPRQkweDAwMDAwMDEwCisjZGVmaW5lIEVDSE9LCTB4MDAwMDAwMjAKKyNkZWZpbmUgRUNIT05MCTB4MDAwMDAwNDAKKyNkZWZpbmUgTk9GTFNICTB4MDAwMDAwODAKKyNkZWZpbmUgVE9TVE9QCTB4MDAwMDAxMDAKKyNkZWZpbmUgRUNIT0NUTAkweDAwMDAwMjAwCisjZGVmaW5lIEVDSE9QUlQJMHgwMDAwMDQwMAorI2RlZmluZSBFQ0hPS0UJMHgwMDAwMDgwMAorI2RlZmluZSBERUZFQ0hPIDB4MDAwMDEwMDAgIC8qIFNVTk9TIHRoaW5nLCB3aGF0IGlzIGl0PyAqLworI2RlZmluZSBGTFVTSE8JMHgwMDAwMjAwMAorI2RlZmluZSBQRU5ESU4JMHgwMDAwNDAwMAorI2RlZmluZSBJRVhURU4JMHgwMDAwODAwMAorCisvKiBtb2RlbSBsaW5lcyAqLworI2RlZmluZSBUSU9DTV9MRQkweDAwMQorI2RlZmluZSBUSU9DTV9EVFIJMHgwMDIKKyNkZWZpbmUgVElPQ01fUlRTCTB4MDA0CisjZGVmaW5lIFRJT0NNX1NUCTB4MDA4CisjZGVmaW5lIFRJT0NNX1NSCTB4MDEwCisjZGVmaW5lIFRJT0NNX0NUUwkweDAyMAorI2RlZmluZSBUSU9DTV9DQVIJMHgwNDAKKyNkZWZpbmUgVElPQ01fUk5HCTB4MDgwCisjZGVmaW5lIFRJT0NNX0RTUgkweDEwMAorI2RlZmluZSBUSU9DTV9DRAlUSU9DTV9DQVIKKyNkZWZpbmUgVElPQ01fUkkJVElPQ01fUk5HCisjZGVmaW5lIFRJT0NNX09VVDEJMHgyMDAwCisjZGVmaW5lIFRJT0NNX09VVDIJMHg0MDAwCisjZGVmaW5lIFRJT0NNX0xPT1AJMHg4MDAwCisKKy8qIGlvY3RsIChmZCwgVElPQ1NFUkdFVExTUiwgJnJlc3VsdCkgd2hlcmUgcmVzdWx0IG1heSBiZSBhcyBiZWxvdyAqLworI2RlZmluZSBUSU9DU0VSX1RFTVQgICAgMHgwMQkvKiBUcmFuc21pdHRlciBwaHlzaWNhbGx5IGVtcHR5ICovCisKKworLyogdGNmbG93KCkgYW5kIFRDWE9OQyB1c2UgdGhlc2UgKi8KKyNkZWZpbmUJVENPT0ZGCQkwCisjZGVmaW5lCVRDT09OCQkxCisjZGVmaW5lCVRDSU9GRgkJMgorI2RlZmluZQlUQ0lPTgkJMworCisvKiB0Y2ZsdXNoKCkgYW5kIFRDRkxTSCB1c2UgdGhlc2UgKi8KKyNkZWZpbmUJVENJRkxVU0gJMAorI2RlZmluZQlUQ09GTFVTSAkxCisjZGVmaW5lCVRDSU9GTFVTSAkyCisKKy8qIHRjc2V0YXR0ciB1c2VzIHRoZXNlICovCisjZGVmaW5lCVRDU0FOT1cJCTAKKyNkZWZpbmUJVENTQURSQUlOCTEKKyNkZWZpbmUJVENTQUZMVVNICTIKKworI2VuZGlmIC8qICEoX1NQQVJDX1RFUk1CSVRTX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy90ZXJtaW9zLmggYi9pbmNsdWRlL2FzbS1zcGFyYy90ZXJtaW9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE4YWQ0YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3Rlcm1pb3MuaApAQCAtMCwwICsxLDE3NCBAQAorLyogJElkOiB0ZXJtaW9zLmgsdiAxLjMyIDIwMDEvMDYvMDEgMDg6MTI6MTEgZGF2ZW0gRXhwICQgKi8KKyNpZm5kZWYgX1NQQVJDX1RFUk1JT1NfSAorI2RlZmluZSBfU1BBUkNfVEVSTUlPU19ICisKKyNpbmNsdWRlIDxhc20vaW9jdGxzLmg+CisjaW5jbHVkZSA8YXNtL3Rlcm1iaXRzLmg+CisKKyNpZiBkZWZpbmVkKF9fS0VSTkVMX18pIHx8IGRlZmluZWQoX19ERUZJTkVfQlNEX1RFUk1JT1MpCitzdHJ1Y3Qgc2d0dHliIHsKKwljaGFyCXNnX2lzcGVlZDsKKwljaGFyCXNnX29zcGVlZDsKKwljaGFyCXNnX2VyYXNlOworCWNoYXIJc2dfa2lsbDsKKwlzaG9ydAlzZ19mbGFnczsKK307CisKK3N0cnVjdCB0Y2hhcnMgeworCWNoYXIJdF9pbnRyYzsKKwljaGFyCXRfcXVpdGM7CisJY2hhcgl0X3N0YXJ0YzsKKwljaGFyCXRfc3RvcGM7CisJY2hhcgl0X2VvZmM7CisJY2hhcgl0X2Jya2M7Cit9OworCitzdHJ1Y3QgbHRjaGFycyB7CisJY2hhcgl0X3N1c3BjOworCWNoYXIJdF9kc3VzcGM7CisJY2hhcgl0X3Jwcm50YzsKKwljaGFyCXRfZmx1c2hjOworCWNoYXIJdF93ZXJhc2M7CisJY2hhcgl0X2xuZXh0YzsKK307CisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCitzdHJ1Y3Qgc3Vub3NfdHR5c2l6ZSB7CisJaW50IHN0X2xpbmVzOyAgIC8qIExpbmVzIG9uIHRoZSB0ZXJtaW5hbCAqLworCWludCBzdF9jb2x1bW5zOyAvKiBDb2x1bW5zIG9uIHRoZSB0ZXJtaW5hbCAqLworfTsKKworLyogVXNlZCBmb3IgcGFja2V0IG1vZGUgKi8KKyNkZWZpbmUgVElPQ1BLVF9EQVRBCQkgMAorI2RlZmluZSBUSU9DUEtUX0ZMVVNIUkVBRAkgMQorI2RlZmluZSBUSU9DUEtUX0ZMVVNIV1JJVEUJIDIKKyNkZWZpbmUgVElPQ1BLVF9TVE9QCQkgNAorI2RlZmluZSBUSU9DUEtUX1NUQVJUCQkgOAorI2RlZmluZSBUSU9DUEtUX05PU1RPUAkJMTYKKyNkZWZpbmUgVElPQ1BLVF9ET1NUT1AJCTMyCisKK3N0cnVjdCB3aW5zaXplIHsKKwl1bnNpZ25lZCBzaG9ydCB3c19yb3c7CisJdW5zaWduZWQgc2hvcnQgd3NfY29sOworCXVuc2lnbmVkIHNob3J0IHdzX3hwaXhlbDsKKwl1bnNpZ25lZCBzaG9ydCB3c195cGl4ZWw7Cit9OworCisvKiBsaW5lIGRpc2NpcGxpbmVzICovCisjZGVmaW5lIE5fVFRZCQkwCisjZGVmaW5lIE5fU0xJUAkJMQorI2RlZmluZSBOX01PVVNFCQkyCisjZGVmaW5lIE5fUFBQCQkzCisjZGVmaW5lIE5fU1RSSVAJCTQKKyNkZWZpbmUgTl9BWDI1CQk1CisjZGVmaW5lIE5fWDI1CQk2CisjZGVmaW5lIE5fNlBBQ0sJCTcKKyNkZWZpbmUgTl9NQVNDCQk4CS8qIFJlc2VydmVkIGZvciBNb2JpdGV4IG1vZHVsZSA8a2F6QGNhZmUubmV0PiAqLworI2RlZmluZSBOX1IzOTY0CQk5CS8qIFJlc2VydmVkIGZvciBTaW1hdGljIFIzOTY0IG1vZHVsZSAqLworI2RlZmluZSBOX1BST0ZJQlVTX0ZETAkxMAkvKiBSZXNlcnZlZCBmb3IgUHJvZmlidXMgPERhdmVAbXZoaS5jb20+ICovCisjZGVmaW5lIE5fSVJEQQkJMTEJLyogTGludXggSXJEYSAtIGh0dHA6Ly9pcmRhLnNvdXJjZWZvcmdlLm5ldC8gKi8KKyNkZWZpbmUgTl9TTVNCTE9DSwkxMgkvKiBTTVMgYmxvY2sgbW9kZSAtIGZvciB0YWxraW5nIHRvIEdTTSBkYXRhIGNhcmRzIGFib3V0IFNNUyBtZXNzYWdlcyAqLworI2RlZmluZSBOX0hETEMJCTEzCS8qIHN5bmNocm9ub3VzIEhETEMgKi8KKyNkZWZpbmUgTl9TWU5DX1BQUAkxNAkvKiBzeW5jaHJvbm91cyBQUFAgKi8KKyNkZWZpbmUgTl9IQ0kJCTE1ICAvKiBCbHVldG9vdGggSENJIFVBUlQgKi8KKworI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworLyoKKyAqIGNfY2MgY2hhcmFjdGVycyBpbiB0aGUgdGVybWlvIHN0cnVjdHVyZS4gIE9oLCBob3cgSSBsb3ZlIGJlaW5nCisgKiBiYWNrd2FyZGx5IGNvbXBhdGlibGUuICBOb3RpY2UgdGhhdCBjaGFyYWN0ZXIgNCBhbmQgNSBhcmUKKyAqIGludGVycHJldGVkIGRpZmZlcmVudGx5IGRlcGVuZGluZyBvbiB3aGV0aGVyIElDQU5PTiBpcyBzZXQgaW4KKyAqIGNfbGZsYWcuICBJZiBpdCdzIHNldCwgdGhleSBhcmUgdXNlZCBhcyBfVkVPRiBhbmQgX1ZFT0wsIG90aGVyd2lzZQorICogYXMgX1ZNSU4gYW5kIFZfVElNRS4gIFRoaXMgaXMgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBPU0YvMSAod2hpY2gKKyAqIGlzIGNvbXBhdGlibGUgd2l0aCBzeXNWKS4uLgorICovCisjZGVmaW5lIF9WTUlOCTQKKyNkZWZpbmUgX1ZUSU1FCTUKKworCisvKglpbnRyPV5DCQlxdWl0PV5cCQllcmFzZT1kZWwJa2lsbD1eVQorCWVvZj1eRAkJZW9sPVwwCQllb2wyPVwwCQlzeHRjPVwwCisJc3RhcnQ9XlEJc3RvcD1eUwkJc3VzcD1eWgkJZHN1c3A9XlkKKwlyZXByaW50PV5SCWRpc2NhcmQ9XlUJd2VyYXNlPV5XCWxuZXh0PV5WCisJdm1pbj1cMSAgICAgICAgIHZ0aW1lPVwwCisqLworI2RlZmluZSBJTklUX0NfQ0MgIlwwMDNcMDM0XDE3N1wwMjVcMDA0XDAwMFwwMDBcMDAwXDAyMVwwMjNcMDMyXDAzMVwwMjJcMDI1XDAyN1wwMjZcMDAxIgorCisvKgorICogVHJhbnNsYXRlIGEgInRlcm1pbyIgc3RydWN0dXJlIGludG8gYSAidGVybWlvcyIuIFVnaC4KKyAqLworI2RlZmluZSB1c2VyX3Rlcm1pb190b19rZXJuZWxfdGVybWlvcyh0ZXJtaW9zLCB0ZXJtaW8pIFwKKyh7IFwKKwl1bnNpZ25lZCBzaG9ydCB0bXA7IFwKKwlnZXRfdXNlcih0bXAsICYodGVybWlvKS0+Y19pZmxhZyk7IFwKKwkodGVybWlvcyktPmNfaWZsYWcgPSAoMHhmZmZmMDAwMCAmICgodGVybWlvcyktPmNfaWZsYWcpKSB8IHRtcDsgXAorCWdldF91c2VyKHRtcCwgJih0ZXJtaW8pLT5jX29mbGFnKTsgXAorCSh0ZXJtaW9zKS0+Y19vZmxhZyA9ICgweGZmZmYwMDAwICYgKCh0ZXJtaW9zKS0+Y19vZmxhZykpIHwgdG1wOyBcCisJZ2V0X3VzZXIodG1wLCAmKHRlcm1pbyktPmNfY2ZsYWcpOyBcCisJKHRlcm1pb3MpLT5jX2NmbGFnID0gKDB4ZmZmZjAwMDAgJiAoKHRlcm1pb3MpLT5jX2NmbGFnKSkgfCB0bXA7IFwKKwlnZXRfdXNlcih0bXAsICYodGVybWlvKS0+Y19sZmxhZyk7IFwKKwkodGVybWlvcyktPmNfbGZsYWcgPSAoMHhmZmZmMDAwMCAmICgodGVybWlvcyktPmNfbGZsYWcpKSB8IHRtcDsgXAorCWNvcHlfZnJvbV91c2VyKCh0ZXJtaW9zKS0+Y19jYywgKHRlcm1pbyktPmNfY2MsIE5DQyk7IFwKKwkwOyBcCit9KQorCisvKgorICogVHJhbnNsYXRlIGEgInRlcm1pb3MiIHN0cnVjdHVyZSBpbnRvIGEgInRlcm1pbyIuIFVnaC4KKyAqCisgKiBOb3RlIHRoZSAiZnVuIiBfVk1JTiBvdmVybG9hZGluZy4KKyAqLworI2RlZmluZSBrZXJuZWxfdGVybWlvc190b191c2VyX3Rlcm1pbyh0ZXJtaW8sIHRlcm1pb3MpIFwKKyh7IFwKKwlwdXRfdXNlcigodGVybWlvcyktPmNfaWZsYWcsICYodGVybWlvKS0+Y19pZmxhZyk7IFwKKwlwdXRfdXNlcigodGVybWlvcyktPmNfb2ZsYWcsICYodGVybWlvKS0+Y19vZmxhZyk7IFwKKwlwdXRfdXNlcigodGVybWlvcyktPmNfY2ZsYWcsICYodGVybWlvKS0+Y19jZmxhZyk7IFwKKwlwdXRfdXNlcigodGVybWlvcyktPmNfbGZsYWcsICYodGVybWlvKS0+Y19sZmxhZyk7IFwKKwlwdXRfdXNlcigodGVybWlvcyktPmNfbGluZSwgICYodGVybWlvKS0+Y19saW5lKTsgXAorCWNvcHlfdG9fdXNlcigodGVybWlvKS0+Y19jYywgKHRlcm1pb3MpLT5jX2NjLCBOQ0MpOyBcCisJaWYgKCEoKHRlcm1pb3MpLT5jX2xmbGFnICYgSUNBTk9OKSkgeyBcCisJCXB1dF91c2VyKCh0ZXJtaW9zKS0+Y19jY1tWTUlOXSwgJih0ZXJtaW8pLT5jX2NjW19WTUlOXSk7IFwKKwkJcHV0X3VzZXIoKHRlcm1pb3MpLT5jX2NjW1ZUSU1FXSwgJih0ZXJtaW8pLT5jX2NjW19WVElNRV0pOyBcCisJfSBcCisJMDsgXAorfSkKKworI2RlZmluZSB1c2VyX3Rlcm1pb3NfdG9fa2VybmVsX3Rlcm1pb3MoaywgdSkgXAorKHsgXAorCWdldF91c2VyKChrKS0+Y19pZmxhZywgJih1KS0+Y19pZmxhZyk7IFwKKwlnZXRfdXNlcigoayktPmNfb2ZsYWcsICYodSktPmNfb2ZsYWcpOyBcCisJZ2V0X3VzZXIoKGspLT5jX2NmbGFnLCAmKHUpLT5jX2NmbGFnKTsgXAorCWdldF91c2VyKChrKS0+Y19sZmxhZywgJih1KS0+Y19sZmxhZyk7IFwKKwlnZXRfdXNlcigoayktPmNfbGluZSwgICYodSktPmNfbGluZSk7IFwKKwljb3B5X2Zyb21fdXNlcigoayktPmNfY2MsICh1KS0+Y19jYywgTkNDUyk7IFwKKwlpZigoayktPmNfbGZsYWcgJiBJQ0FOT04pIHsgXAorCQlnZXRfdXNlcigoayktPmNfY2NbVkVPRl0sICYodSktPmNfY2NbVkVPRl0pOyBcCisJCWdldF91c2VyKChrKS0+Y19jY1tWRU9MXSwgJih1KS0+Y19jY1tWRU9MXSk7IFwKKwl9IGVsc2UgeyBcCisJCWdldF91c2VyKChrKS0+Y19jY1tWTUlOXSwgICYodSktPmNfY2NbX1ZNSU5dKTsgXAorCQlnZXRfdXNlcigoayktPmNfY2NbVlRJTUVdLCAmKHUpLT5jX2NjW19WVElNRV0pOyBcCisJfSBcCisJMDsgXAorfSkKKworI2RlZmluZSBrZXJuZWxfdGVybWlvc190b191c2VyX3Rlcm1pb3ModSwgaykgXAorKHsgXAorCXB1dF91c2VyKChrKS0+Y19pZmxhZywgJih1KS0+Y19pZmxhZyk7IFwKKwlwdXRfdXNlcigoayktPmNfb2ZsYWcsICYodSktPmNfb2ZsYWcpOyBcCisJcHV0X3VzZXIoKGspLT5jX2NmbGFnLCAmKHUpLT5jX2NmbGFnKTsgXAorCXB1dF91c2VyKChrKS0+Y19sZmxhZywgJih1KS0+Y19sZmxhZyk7IFwKKwlwdXRfdXNlcigoayktPmNfbGluZSwgJih1KS0+Y19saW5lKTsgXAorCWNvcHlfdG9fdXNlcigodSktPmNfY2MsIChrKS0+Y19jYywgTkNDUyk7IFwKKwlpZighKChrKS0+Y19sZmxhZyAmIElDQU5PTikpIHsgXAorCQlwdXRfdXNlcigoayktPmNfY2NbVk1JTl0sICAmKHUpLT5jX2NjW19WTUlOXSk7IFwKKwkJcHV0X3VzZXIoKGspLT5jX2NjW1ZUSU1FXSwgJih1KS0+Y19jY1tfVlRJTUVdKTsgXAorCX0gZWxzZSB7IFwKKwkJcHV0X3VzZXIoKGspLT5jX2NjW1ZFT0ZdLCAmKHUpLT5jX2NjW1ZFT0ZdKTsgXAorCQlwdXRfdXNlcigoayktPmNfY2NbVkVPTF0sICYodSktPmNfY2NbVkVPTF0pOyBcCisJfSBcCisJMDsgXAorfSkKKworI2VuZGlmCS8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9TUEFSQ19URVJNSU9TX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3RocmVhZF9pbmZvLmggYi9pbmNsdWRlL2FzbS1zcGFyYy90aHJlYWRfaW5mby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwNGYwM2MKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy90aHJlYWRfaW5mby5oCkBAIC0wLDAgKzEsMTUzIEBACisvKgorICogdGhyZWFkX2luZm8uaDogc3BhcmMgbG93LWxldmVsIHRocmVhZCBpbmZvcm1hdGlvbgorICogYWRhcHRlZCBmcm9tIHRoZSBwcGMgdmVyc2lvbiBieSBQZXRlIFphaXRjZXYsIHdoaWNoIHdhcworICogYWRhcHRlZCBmcm9tIHRoZSBpMzg2IHZlcnNpb24gYnkgUGF1bCBNYWNrZXJyYXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgIERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIgIFBldGUgWmFpdGNldiAoemFpdGNldkB5YWhvby5jb20pCisgKiAtIEluY29ycG9yYXRpbmcgc3VnZ2VzdGlvbnMgbWFkZSBieSBMaW51cyBUb3J2YWxkcyBhbmQgRGF2ZSBNaWxsZXIKKyAqLworCisjaWZuZGVmIF9BU01fVEhSRUFEX0lORk9fSAorI2RlZmluZSBfQVNNX1RIUkVBRF9JTkZPX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworI2luY2x1ZGUgPGFzbS9idGZpeHVwLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisKKy8qCisgKiBMb3cgbGV2ZWwgdGFzayBkYXRhLgorICoKKyAqIElmIHlvdSBjaGFuZ2UgdGhpcywgY2hhbmdlIHRoZSBUSV8qIG9mZnNldHMgYmVsb3cgdG8gbWF0Y2guCisgKi8KKyNkZWZpbmUgTlNXSU5TIDgKK3N0cnVjdCB0aHJlYWRfaW5mbyB7CisJdW5zaWduZWQgbG9uZwkJdXdpbm1hc2s7CisJc3RydWN0IHRhc2tfc3RydWN0CSp0YXNrOwkJLyogbWFpbiB0YXNrIHN0cnVjdHVyZSAqLworCXN0cnVjdCBleGVjX2RvbWFpbgkqZXhlY19kb21haW47CS8qIGV4ZWN1dGlvbiBkb21haW4gKi8KKwl1bnNpZ25lZCBsb25nCQlmbGFnczsJCS8qIGxvdyBsZXZlbCBmbGFncyAqLworCisJaW50CQkJY3B1OwkJLyogY3B1IHdlJ3JlIG9uICovCisJaW50CQkJcHJlZW1wdF9jb3VudDsKKwlpbnQJCQlzb2Z0aXJxX2NvdW50OworCWludAkJCWhhcmRpcnFfY291bnQ7CisKKwkvKiBDb250ZXh0IHN3aXRjaCBzYXZlZCBrZXJuZWwgc3RhdGUuICovCisJdW5zaWduZWQgbG9uZyBrc3A7CS8qIC4uLiBrc3AgX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKDgpKSk7ICovCisJdW5zaWduZWQgbG9uZyBrcGM7CisJdW5zaWduZWQgbG9uZyBrcHNyOworCXVuc2lnbmVkIGxvbmcga3dpbTsKKworCS8qIEEgcGxhY2UgdG8gc3RvcmUgdXNlciB3aW5kb3dzIGFuZCBzdGFjayBwb2ludGVycworCSAqIHdoZW4gdGhlIHN0YWNrIG5lZWRzIGluc3BlY3Rpb24uCisJICovCisJc3RydWN0IHJlZ193aW5kb3cJcmVnX3dpbmRvd1tOU1dJTlNdOwkvKiBhbGlnbiBmb3IgbGRkISAqLworCXVuc2lnbmVkIGxvbmcJCXJ3YnVmX3N0a3B0cnNbTlNXSU5TXTsKKwl1bnNpZ25lZCBsb25nCQl3X3NhdmVkOworCisJc3RydWN0IHJlc3RhcnRfYmxvY2sJcmVzdGFydF9ibG9jazsKK307CisKKy8qCisgKiBtYWNyb3MvZnVuY3Rpb25zIGZvciBnYWluaW5nIGFjY2VzcyB0byB0aGUgdGhyZWFkIGluZm9ybWF0aW9uIHN0cnVjdHVyZQorICoKKyAqIHByZWVtcHRfY291bnQgbmVlZHMgdG8gYmUgMSBpbml0aWFsbHksIHVudGlsIHRoZSBzY2hlZHVsZXIgaXMgZnVuY3Rpb25hbC4KKyAqLworI2RlZmluZSBJTklUX1RIUkVBRF9JTkZPKHRzaykJCQkJXAorewkJCQkJCQlcCisJLnV3aW5tYXNrCT0JMCwJCQlcCisJLnRhc2sJCT0JJnRzaywJCQlcCisJLmV4ZWNfZG9tYWluCT0JJmRlZmF1bHRfZXhlY19kb21haW4sCVwKKwkuZmxhZ3MJCT0JMCwJCQlcCisJLmNwdQkJPQkwLAkJCVwKKwkucHJlZW1wdF9jb3VudAk9CTEsCQkJXAorCS5yZXN0YXJ0X2Jsb2NrCT0gewkJCQlcCisJCS5mbgk9CWRvX25vX3Jlc3RhcnRfc3lzY2FsbCwJXAorCX0sCQkJCQkJXAorfQorCisjZGVmaW5lIGluaXRfdGhyZWFkX2luZm8JKGluaXRfdGhyZWFkX3VuaW9uLnRocmVhZF9pbmZvKQorI2RlZmluZSBpbml0X3N0YWNrCQkoaW5pdF90aHJlYWRfdW5pb24uc3RhY2spCisKKy8qIGhvdyB0byBnZXQgdGhlIHRocmVhZCBpbmZvcm1hdGlvbiBzdHJ1Y3QgZnJvbSBDICovCityZWdpc3RlciBzdHJ1Y3QgdGhyZWFkX2luZm8gKmN1cnJlbnRfdGhyZWFkX2luZm9fcmVnIGFzbSgiZzYiKTsKKyNkZWZpbmUgY3VycmVudF90aHJlYWRfaW5mbygpICAgKGN1cnJlbnRfdGhyZWFkX2luZm9fcmVnKQorCisvKgorICogdGhyZWFkIGluZm9ybWF0aW9uIGFsbG9jYXRpb24KKyAqLworI2lmIFBBR0VfU0hJRlQgPT0gMTMKKyNkZWZpbmUgVEhSRUFEX0lORk9fT1JERVIgIDAKKyNlbHNlIC8qIFBBR0VfU0hJRlQgKi8KKyNkZWZpbmUgVEhSRUFEX0lORk9fT1JERVIgIDEKKyNlbmRpZgorCitCVEZJWFVQREVGX0NBTEwoc3RydWN0IHRocmVhZF9pbmZvICosIGFsbG9jX3RocmVhZF9pbmZvLCB2b2lkKQorI2RlZmluZSBhbGxvY190aHJlYWRfaW5mbyh0c2spIEJURklYVVBfQ0FMTChhbGxvY190aHJlYWRfaW5mbykoKQorCitCVEZJWFVQREVGX0NBTEwodm9pZCwgZnJlZV90aHJlYWRfaW5mbywgc3RydWN0IHRocmVhZF9pbmZvICopCisjZGVmaW5lIGZyZWVfdGhyZWFkX2luZm8odGkpIEJURklYVVBfQ0FMTChmcmVlX3RocmVhZF9pbmZvKSh0aSkKKworI2RlZmluZSBnZXRfdGhyZWFkX2luZm8odGkpCWdldF90YXNrX3N0cnVjdCgodGkpLT50YXNrKQorI2RlZmluZSBwdXRfdGhyZWFkX2luZm8odGkpCXB1dF90YXNrX3N0cnVjdCgodGkpLT50YXNrKQorCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKy8qCisgKiBTaXplIG9mIGtlcm5lbCBzdGFjayBmb3IgZWFjaCBwcm9jZXNzLgorICogT2JzZXJ2ZSB0aGUgb3JkZXIgb2YgZ2V0X2ZyZWVfcGFnZXMoKSBpbiBhbGxvY190aHJlYWRfaW5mbygpLgorICogVGhlIHN1bjQgaGFzIDhLIHN0YWNrIHRvbywgYmVjYXVzZSBpdCdzIHNob3J0IG9uIG1lbW9yeSwgYW5kIDE2SyBpcyBhIHdhc3RlLgorICovCisjZGVmaW5lIFRIUkVBRF9TSVpFCQk4MTkyCisKKy8qCisgKiBPZmZzZXRzIGluIHRocmVhZF9pbmZvIHN0cnVjdHVyZSwgdXNlZCBpbiBhc3NlbWJseSBjb2RlCisgKiBUaGUgIiNkZWZpbmUgUkVHV0lOX1NaIDB4NDAiIHdhcyBhYm9saXNoZWQsIHNvIG5vIG11bHRpcGxpY2F0aW9ucy4KKyAqLworI2RlZmluZSBUSV9VV0lOTUFTSwkweDAwCS8qIHV3aW5tYXNrICovCisjZGVmaW5lIFRJX1RBU0sJCTB4MDQKKyNkZWZpbmUgVElfRVhFQ0RPTUFJTgkweDA4CS8qIGV4ZWNfZG9tYWluICovCisjZGVmaW5lIFRJX0ZMQUdTCTB4MGMKKyNkZWZpbmUgVElfQ1BVCQkweDEwCisjZGVmaW5lIFRJX1BSRUVNUFQJMHgxNAkvKiBwcmVlbXB0X2NvdW50ICovCisjZGVmaW5lIFRJX1NPRlRJUlEJMHgxOAkvKiBzb2Z0aXJxX2NvdW50ICovCisjZGVmaW5lIFRJX0hBUkRJUlEJMHgxYwkvKiBoYXJkaXJxX2NvdW50ICovCisjZGVmaW5lIFRJX0tTUAkJMHgyMAkvKiBrc3AgKi8KKyNkZWZpbmUgVElfS1BDCQkweDI0CS8qIGtwYyAobGRkJ2VkIHdpdGgga3BjKSAqLworI2RlZmluZSBUSV9LUFNSCQkweDI4CS8qIGtwc3IgKi8KKyNkZWZpbmUgVElfS1dJTQkJMHgyYwkvKiBrd2ltIChsZGQnZWQgd2l0aCBrcHNyKSAqLworI2RlZmluZSBUSV9SRUdfV0lORE9XCTB4MzAKKyNkZWZpbmUgVElfUldJTl9TUFRSUwkweDIzMAorI2RlZmluZSBUSV9XX1NBVkVECTB4MjUwCisvKiAjZGVmaW5lIFRJX1JFU1RBUlRfQkxPQ0sgMHgyNW4gKi8gLyogTm9ib2R5IGNhcmVzICovCisKKyNkZWZpbmUgUFJFRU1QVF9BQ1RJVkUJCTB4NDAwMDAwMAorCisvKgorICogdGhyZWFkIGluZm9ybWF0aW9uIGZsYWcgYml0IG51bWJlcnMKKyAqLworI2RlZmluZSBUSUZfU1lTQ0FMTF9UUkFDRQkwCS8qIHN5c2NhbGwgdHJhY2UgYWN0aXZlICovCisjZGVmaW5lIFRJRl9OT1RJRllfUkVTVU1FCTEJLyogcmVzdW1wdGlvbiBub3RpZmljYXRpb24gcmVxdWVzdGVkICovCisjZGVmaW5lIFRJRl9TSUdQRU5ESU5HCQkyCS8qIHNpZ25hbCBwZW5kaW5nICovCisjZGVmaW5lIFRJRl9ORUVEX1JFU0NIRUQJMwkvKiByZXNjaGVkdWxpbmcgbmVjZXNzYXJ5ICovCisjZGVmaW5lIFRJRl9VU0VERlBVCQk4CS8qIEZQVSB3YXMgdXNlZCBieSB0aGlzIHRhc2sKKwkJCQkJICogdGhpcyBxdWFudHVtIChTTVApICovCisjZGVmaW5lIFRJRl9QT0xMSU5HX05SRkxBRwk5CS8qIHRydWUgaWYgcG9sbF9pZGxlKCkgaXMgcG9sbGluZworCQkJCQkgKiBUSUZfTkVFRF9SRVNDSEVEICovCisjZGVmaW5lIFRJRl9NRU1ESUUJCTEwCisKKy8qIGFzIGFib3ZlLCBidXQgYXMgYml0IHZhbHVlcyAqLworI2RlZmluZSBfVElGX1NZU0NBTExfVFJBQ0UJKDE8PFRJRl9TWVNDQUxMX1RSQUNFKQorI2RlZmluZSBfVElGX05PVElGWV9SRVNVTUUJKDE8PFRJRl9OT1RJRllfUkVTVU1FKQorI2RlZmluZSBfVElGX1NJR1BFTkRJTkcJCSgxPDxUSUZfU0lHUEVORElORykKKyNkZWZpbmUgX1RJRl9ORUVEX1JFU0NIRUQJKDE8PFRJRl9ORUVEX1JFU0NIRUQpCisjZGVmaW5lIF9USUZfVVNFREZQVQkJKDE8PFRJRl9VU0VERlBVKQorI2RlZmluZSBfVElGX1BPTExJTkdfTlJGTEFHCSgxPDxUSUZfUE9MTElOR19OUkZMQUcpCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfQVNNX1RIUkVBRF9JTkZPX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3RpbWVyLmggYi9pbmNsdWRlL2FzbS1zcGFyYy90aW1lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxNmViNzMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy90aW1lci5oCkBAIC0wLDAgKzEsMTEwIEBACisvKiAkSWQ6IHRpbWVyLmgsdiAxLjIxIDE5OTkvMDQvMjAgMTM6MjI6NTEgYW50b24gRXhwICQKKyAqIHRpbWVyLmg6ICBEZWZpbml0aW9ucyBmb3IgdGhlIHRpbWVyIGNoaXBzIG9uIHRoZSBTcGFyYy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2lmbmRlZiBfU1BBUkNfVElNRVJfSAorI2RlZmluZSBfU1BBUkNfVElNRVJfSAorCisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPiAgLyogRm9yIFNVTjRNX05DUFVTICovCisjaW5jbHVkZSA8YXNtL3N1bjRwYWRkci5oPgorI2luY2x1ZGUgPGFzbS9idGZpeHVwLmg+CisKKy8qIFRpbWVyIHN0cnVjdHVyZXMuIFRoZSBpbnRlcnJ1cHQgdGltZXIgaGFzIHR3byBwcm9wZXJ0aWVzIHdoaWNoCisgKiBhcmUgdGhlIGNvdW50ZXIgKHdoaWNoIGlzIGhhbmRsZWQgaW4gZG9fdGltZXIgaW4gc2NoZWQuYykgYW5kIHRoZSBsaW1pdC4KKyAqIFRoaXMgbGltaXQgaXMgd2hlcmUgdGhlIHRpbWVyJ3MgY291bnRlciAnd3JhcHMnIGFyb3VuZC4gT2RkbHkgZW5vdWdoLAorICogdGhlIHN1bjRjIHRpbWVyIHdoZW4gaXQgaGl0cyB0aGUgbGltaXQgd3JhcHMgYmFjayB0byAxIGFuZCBub3QgemVybworICogdGh1cyB3aGVuIGNhbGN1bGF0aW5nIHRoZSB2YWx1ZSBhdCB3aGljaCBpdCB3aWxsIGZpcmUgYSBtaWNyb3NlY29uZCB5b3UKKyAqIG11c3QgYWRqdXN0IGJ5IG9uZS4gIFRoYW5rcyBTVU4gZm9yIGRlc2lnbmluZyBzdWNoIGdyZWF0IGhhcmR3YXJlIDsoCisgKi8KKworLyogTm90ZSB0aGF0IEkgYW0gb25seSBnb2luZyB0byB1c2UgdGhlIHRpbWVyIHRoYXQgaW50ZXJydXB0cyBhdAorICogU3BhcmMgSVJRIDEwLiAgVGhlcmUgaXMgYW5vdGhlciBvbmUgYXZhaWxhYmxlIHRoYXQgY2FuIGZpcmUgYXQKKyAqIElSUSAxNC4gQ3VycmVudGx5IGl0IGlzIGxlZnQgdW50b3VjaGVkLCB3ZSBrZWVwIHRoZSBQUk9NJ3MgbGltaXQKKyAqIHJlZ2lzdGVyIHZhbHVlIGFuZCBsZXQgdGhlIHByb20gdGFrZSB0aGVzZSBpbnRlcnJ1cHRzLiAgVGhpcyBhbGxvd3MKKyAqIEwxLUEgdG8gd29yay4KKyAqLworCitzdHJ1Y3Qgc3VuNGNfdGltZXJfaW5mbyB7CisgIF9fdm9sYXRpbGVfXyB1bnNpZ25lZCBpbnQgY3VyX2NvdW50MTA7CisgIF9fdm9sYXRpbGVfXyB1bnNpZ25lZCBpbnQgdGltZXJfbGltaXQxMDsKKyAgX192b2xhdGlsZV9fIHVuc2lnbmVkIGludCBjdXJfY291bnQxNDsKKyAgX192b2xhdGlsZV9fIHVuc2lnbmVkIGludCB0aW1lcl9saW1pdDE0OworfTsKKworI2RlZmluZSBTVU40Q19USU1FUl9QSFlTQUREUiAgIDB4ZjMwMDAwMDAKKyNpZmRlZiBDT05GSUdfU1VONAorI2RlZmluZSBTVU5fVElNRVJfUEhZU0FERFIgU1VONF8zMDBfVElNRVJfUEhZU0FERFIKKyNlbHNlCisjZGVmaW5lIFNVTl9USU1FUl9QSFlTQUREUiBTVU40Q19USU1FUl9QSFlTQUREUgorI2VuZGlmCisKKy8qIEEgc3VuNG0gaGFzIHR3byBibG9ja3Mgb2YgcmVnaXN0ZXJzIHdoaWNoIGFyZSBwcm9iYWJseSBvZiB0aGUgc2FtZQorICogc3RydWN0dXJlLiBMU0kgTG9naWMncyBMNjQ4NTEgaXMgdG9sZCB0byBfZGVjcmVtZW50XyBmcm9tIHRoZSBsaW1pdAorICogdmFsdWUuIEF1cm9yYSBiZWhhdmVzIHNpbWlsYXJseSBidXQgaXRzIGxpbWl0IHZhbHVlIGlzIGNvbXBhY3RlZCBpbgorICogb3RoZXIgZmFzaGlvbiAoaXQncyB3aWRlcikuIERvY3VtZW50ZWQgZmllbGRzIGFyZSBkZWZpbmVkIGhlcmUuCisgKi8KKworLyogQXMgd2l0aCB0aGUgaW50ZXJydXB0IHJlZ2lzdGVyLCB3ZSBoYXZlIHR3byBjbGFzc2VzIG9mIHRpbWVyIHJlZ2lzdGVycworICogd2hpY2ggYXJlIHBlci1jcHUgYW5kIG1hc3Rlci4gIFBlci1jcHUgdGltZXJzIG9ubHkgaGl0IHRoYXQgY3B1IGFuZCBhcmUKKyAqIG9ubHkgbGV2ZWwgMTQgdGlja3MsIG1hc3RlciB0aW1lciBoaXRzIGFsbCBjcHVzIGFuZCBpcyBsZXZlbCAxMC4KKyAqLworCisjZGVmaW5lIFNVTjRNX1BSTV9DTlRfTCAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIFNVTjRNX1BSTV9DTlRfTFZBTFVFICAweDdGRkZGQzAwCisKK3N0cnVjdCBzdW40bV90aW1lcl9wZXJjcHVfaW5mbyB7CisgIF9fdm9sYXRpbGVfXyB1bnNpZ25lZCBpbnQgbDE0X3RpbWVyX2xpbWl0OyAgICAvKiBJbml0aWFsIHZhbHVlIGlzIDB4MDA5YzQwMDAgKi8KKyAgX192b2xhdGlsZV9fIHVuc2lnbmVkIGludCBsMTRfY3VyX2NvdW50OworCisgIC8qIFRoaXMgcmVnaXN0ZXIgYXBwZWFycyB0byBiZSB3cml0ZSBvbmx5IGFuZC9vciBpbmFjY2Vzc2libGUKKyAgICogb24gVW5pLVByb2Nlc3NvciBzdW40bSBtYWNoaW5lcy4KKyAgICovCisgIF9fdm9sYXRpbGVfXyB1bnNpZ25lZCBpbnQgbDE0X2xpbWl0X25vY2xlYXI7ICAvKiBEYXRhIGFjY2VzcyBlcnJvciBpcyBoZXJlICovCisKKyAgX192b2xhdGlsZV9fIHVuc2lnbmVkIGludCBjbnRybDsgICAgICAgICAgICAvKiA9MSBhZnRlciBQT1NUIG9uIEF1cm9yYSAqLworICBfX3ZvbGF0aWxlX18gdW5zaWduZWQgY2hhciBzcGFjZVtQQUdFX1NJWkUgLSAxNl07Cit9OworCitzdHJ1Y3Qgc3VuNG1fdGltZXJfcmVncyB7CisJc3RydWN0IHN1bjRtX3RpbWVyX3BlcmNwdV9pbmZvIGNwdV90aW1lcnNbU1VONE1fTkNQVVNdOworCXZvbGF0aWxlIHVuc2lnbmVkIGludCBsMTBfdGltZXJfbGltaXQ7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50IGwxMF9jdXJfY291bnQ7CisKKwkvKiBBZ2FpbiwgdGhpcyBhcHBlYXJzIHRvIGJlIHdyaXRlIG9ubHkgYW5kL29yIGluYWNjZXNzaWJsZQorCSAqIG9uIHVuaS1wcm9jZXNzb3Igc3VuNG0gbWFjaGluZXMuCisJICovCisJdm9sYXRpbGUgdW5zaWduZWQgaW50IGwxMF9saW1pdF9ub2NsZWFyOworCisJLyogVGhpcyByZWdpc3RlciB0b28sIGl0IG11c3QgYmUgbWFnaWMuICovCisJdm9sYXRpbGUgdW5zaWduZWQgaW50IGZvb2JhcjsKKworCXZvbGF0aWxlIHVuc2lnbmVkIGludCBjZmc7ICAgICAvKiBlcXVhbHMgemVybyBhdCBib290IHRpbWUuLi4gKi8KK307CisKK2V4dGVybiBzdHJ1Y3Qgc3VuNG1fdGltZXJfcmVncyAqc3VuNG1fdGltZXJzOworCisjZGVmaW5lIFNVTjREX1BSTV9DTlRfTCAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIFNVTjREX1BSTV9DTlRfTFZBTFVFICAweDdGRkZGQzAwCisKK3N0cnVjdCBzdW40ZF90aW1lcl9yZWdzIHsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbDEwX3RpbWVyX2xpbWl0OworCXZvbGF0aWxlIHVuc2lnbmVkIGludCBsMTBfY3VyX2NvdW50eDsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbDEwX2xpbWl0X25vY2xlYXI7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50IGN0cmw7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50IGwxMF9jdXJfY291bnQ7Cit9OworCitleHRlcm4gc3RydWN0IHN1bjRkX3RpbWVyX3JlZ3MgKnN1bjRkX3RpbWVyczsKKworZXh0ZXJuIF9fdm9sYXRpbGVfXyB1bnNpZ25lZCBpbnQgKm1hc3Rlcl9sMTBfY291bnRlcjsKK2V4dGVybiBfX3ZvbGF0aWxlX18gdW5zaWduZWQgaW50ICptYXN0ZXJfbDEwX2xpbWl0OworCisvKiBGSVhNRTogTWFrZSBkb19bZ3NdZXR0aW1lb2ZkYXkgYnRmaXh1cCBjYWxscyAqLworQlRGSVhVUERFRl9DQUxMKGludCwgYnVzX2RvX3NldHRpbWVvZmRheSwgc3RydWN0IHRpbWVzcGVjICp0dikKKyNkZWZpbmUgYnVzX2RvX3NldHRpbWVvZmRheSh0dikgQlRGSVhVUF9DQUxMKGJ1c19kb19zZXR0aW1lb2ZkYXkpKHR2KQorCisjZW5kaWYgLyogIShfU1BBUkNfVElNRVJfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3RpbWV4LmggYi9pbmNsdWRlL2FzbS1zcGFyYy90aW1leC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxYjQ1YzkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy90aW1leC5oCkBAIC0wLDAgKzEsMTUgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1zcGFyYy90aW1leC5oCisgKgorICogc3BhcmMgYXJjaGl0ZWN0dXJlIHRpbWV4IHNwZWNpZmljYXRpb25zCisgKi8KKyNpZm5kZWYgX0FTTXNwYXJjX1RJTUVYX0gKKyNkZWZpbmUgX0FTTXNwYXJjX1RJTUVYX0gKKworI2RlZmluZSBDTE9DS19USUNLX1JBVEUJMTE5MzE4MCAvKiBVbmRlcmx5aW5nIEhaICovCisKKy8qIFhYWCBNYXliZSBkbyBzb21ldGhpbmcgYmV0dGVyIGF0IHNvbWUgcG9pbnQuLi4gLURhdmVNICovCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgY3ljbGVzX3Q7CisjZGVmaW5lIGdldF9jeWNsZXMoKQkoMCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy90bGIuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3RsYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkMDJkMWMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy90bGIuaApAQCAtMCwwICsxLDI0IEBACisjaWZuZGVmIF9TUEFSQ19UTEJfSAorI2RlZmluZSBfU1BBUkNfVExCX0gKKworI2RlZmluZSB0bGJfc3RhcnRfdm1hKHRsYiwgdm1hKSBcCitkbyB7CQkJCQkJCQlcCisJZmx1c2hfY2FjaGVfcmFuZ2Uodm1hLCB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX2VuZCk7CVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgdGxiX2VuZF92bWEodGxiLCB2bWEpIFwKK2RvIHsJCQkJCQkJCVwKKwlmbHVzaF90bGJfcmFuZ2Uodm1hLCB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX2VuZCk7CVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgX190bGJfcmVtb3ZlX3RsYl9lbnRyeSh0bGIsIHB0ZSwgYWRkcmVzcykgXAorCWRvIHsgfSB3aGlsZSAoMCkKKworI2RlZmluZSB0bGJfZmx1c2godGxiKSBcCitkbyB7CQkJCQkJCQlcCisJZmx1c2hfdGxiX21tKCh0bGIpLT5tbSk7CQkJCVwKK30gd2hpbGUgKDApCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy90bGIuaD4KKworI2VuZGlmIC8qIF9TUEFSQ19UTEJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvdGxiZmx1c2guaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3RsYmZsdXNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY0M2NhMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3RsYmZsdXNoLmgKQEAgLTAsMCArMSw2MyBAQAorI2lmbmRlZiBfU1BBUkNfVExCRkxVU0hfSAorI2RlZmluZSBfU1BBUkNfVExCRkxVU0hfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKy8vICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisKKy8qCisgKiBUTEIgZmx1c2hpbmc6CisgKgorICogIC0gZmx1c2hfdGxiKCkgZmx1c2hlcyB0aGUgY3VycmVudCBtbSBzdHJ1Y3QgVExCcwlYWFggRXhpc3RzPworICogIC0gZmx1c2hfdGxiX2FsbCgpIGZsdXNoZXMgYWxsIHByb2Nlc3NlcyBUTEJzIAorICogIC0gZmx1c2hfdGxiX21tKG1tKSBmbHVzaGVzIHRoZSBzcGVjaWZpZWQgbW0gY29udGV4dCBUTEIncworICogIC0gZmx1c2hfdGxiX3BhZ2Uodm1hLCB2bWFkZHIpIGZsdXNoZXMgb25lIHBhZ2UKKyAqICAtIGZsdXNoX3RsYl9yYW5nZSh2bWEsIHN0YXJ0LCBlbmQpIGZsdXNoZXMgYSByYW5nZSBvZiBwYWdlcworICogIC0gZmx1c2hfdGxiX2tlcm5lbF9yYW5nZShzdGFydCwgZW5kKSBmbHVzaGVzIGEgcmFuZ2Ugb2Yga2VybmVsIHBhZ2VzCisgKiAgLSBmbHVzaF90bGJfcGd0YWJsZXMobW0sIHN0YXJ0LCBlbmQpIGZsdXNoZXMgYSByYW5nZSBvZiBwYWdlIHRhYmxlcworICovCisKKyNpZmRlZiBDT05GSUdfU01QCisKK0JURklYVVBERUZfQ0FMTCh2b2lkLCBsb2NhbF9mbHVzaF90bGJfYWxsLCB2b2lkKQorQlRGSVhVUERFRl9DQUxMKHZvaWQsIGxvY2FsX2ZsdXNoX3RsYl9tbSwgc3RydWN0IG1tX3N0cnVjdCAqKQorQlRGSVhVUERFRl9DQUxMKHZvaWQsIGxvY2FsX2ZsdXNoX3RsYl9yYW5nZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCitCVEZJWFVQREVGX0NBTEwodm9pZCwgbG9jYWxfZmx1c2hfdGxiX3BhZ2UsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nKQorCisjZGVmaW5lIGxvY2FsX2ZsdXNoX3RsYl9hbGwoKSBCVEZJWFVQX0NBTEwobG9jYWxfZmx1c2hfdGxiX2FsbCkoKQorI2RlZmluZSBsb2NhbF9mbHVzaF90bGJfbW0obW0pIEJURklYVVBfQ0FMTChsb2NhbF9mbHVzaF90bGJfbW0pKG1tKQorI2RlZmluZSBsb2NhbF9mbHVzaF90bGJfcmFuZ2Uodm1hLHN0YXJ0LGVuZCkgQlRGSVhVUF9DQUxMKGxvY2FsX2ZsdXNoX3RsYl9yYW5nZSkodm1hLHN0YXJ0LGVuZCkKKyNkZWZpbmUgbG9jYWxfZmx1c2hfdGxiX3BhZ2Uodm1hLGFkZHIpIEJURklYVVBfQ0FMTChsb2NhbF9mbHVzaF90bGJfcGFnZSkodm1hLGFkZHIpCisKK2V4dGVybiB2b2lkIHNtcF9mbHVzaF90bGJfYWxsKHZvaWQpOworZXh0ZXJuIHZvaWQgc21wX2ZsdXNoX3RsYl9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CitleHRlcm4gdm9pZCBzbXBfZmx1c2hfdGxiX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJCSAgdW5zaWduZWQgbG9uZyBzdGFydCwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgZW5kKTsKK2V4dGVybiB2b2lkIHNtcF9mbHVzaF90bGJfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHBhZ2UpOworCisjZW5kaWYgLyogQ09ORklHX1NNUCAqLworCitCVEZJWFVQREVGX0NBTEwodm9pZCwgZmx1c2hfdGxiX2FsbCwgdm9pZCkKK0JURklYVVBERUZfQ0FMTCh2b2lkLCBmbHVzaF90bGJfbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKikKK0JURklYVVBERUZfQ0FMTCh2b2lkLCBmbHVzaF90bGJfcmFuZ2UsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKQorQlRGSVhVUERFRl9DQUxMKHZvaWQsIGZsdXNoX3RsYl9wYWdlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZykKKworLy8gVGhhbmtzIHRvIEFudG9uIEJsYW5jaGFyZCwgb3VyIHBhZ2V0YWJsZXMgYmVjYW1lIHVuY2FjaGVkIGluIDIuNC4gV2VlIQorLy8gZXh0ZXJuIHZvaWQgZmx1c2hfdGxiX3BndGFibGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorLy8gICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTsKKyNkZWZpbmUgZmx1c2hfdGxiX3BndGFibGVzKG1tLCBzdGFydCwgZW5kKQlkb3sgfXdoaWxlKDApCisKKyNkZWZpbmUgZmx1c2hfdGxiX2FsbCgpIEJURklYVVBfQ0FMTChmbHVzaF90bGJfYWxsKSgpCisjZGVmaW5lIGZsdXNoX3RsYl9tbShtbSkgQlRGSVhVUF9DQUxMKGZsdXNoX3RsYl9tbSkobW0pCisjZGVmaW5lIGZsdXNoX3RsYl9yYW5nZSh2bWEsc3RhcnQsZW5kKSBCVEZJWFVQX0NBTEwoZmx1c2hfdGxiX3JhbmdlKSh2bWEsc3RhcnQsZW5kKQorI2RlZmluZSBmbHVzaF90bGJfcGFnZSh2bWEsYWRkcikgQlRGSVhVUF9DQUxMKGZsdXNoX3RsYl9wYWdlKSh2bWEsYWRkcikKKworLy8gI2RlZmluZSBmbHVzaF90bGIoKSBmbHVzaF90bGJfbW0oY3VycmVudC0+YWN0aXZlX21tKQkvKiBYWFggU3VyZT8gKi8KKworLyoKKyAqIFRoaXMgaXMgYSBrbHVkZ2UsIHVudGlsIEkga25vdyBiZXR0ZXIuIC0temFpdGNldiBYWFgKKyAqLworI2RlZmluZSBmbHVzaF90bGJfa2VybmVsX3JhbmdlKHN0YXJ0LCBlbmQpIGZsdXNoX3RsYl9hbGwoKQorCisjZW5kaWYgLyogX1NQQVJDX1RMQkZMVVNIX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3RvcG9sb2d5LmggYi9pbmNsdWRlL2FzbS1zcGFyYy90b3BvbG9neS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlNWFjOWMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy90b3BvbG9neS5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfQVNNX1NQQVJDX1RPUE9MT0dZX0gKKyNkZWZpbmUgX0FTTV9TUEFSQ19UT1BPTE9HWV9ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy90b3BvbG9neS5oPgorCisjZW5kaWYgLyogX0FTTV9TUEFSQ19UT1BPTE9HWV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy90cmFwcy5oIGIvaW5jbHVkZS9hc20tc3BhcmMvdHJhcHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjkwYWI5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvdHJhcHMuaApAQCAtMCwwICsxLDE0MCBAQAorLyogJElkOiB0cmFwcy5oLHYgMS45IDE5OTgvMDMvMDkgMTQ6MDQ6NTMgamogRXhwICQKKyAqIHRyYXBzLmg6ICBGb3JtYXQgb2YgZW50cmllcyBmb3IgdGhlIFNwYXJjIHRyYXAgdGFibGUuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKKyAqLworCisjaWZuZGVmIF9TUEFSQ19UUkFQU19ICisjZGVmaW5lIF9TUEFSQ19UUkFQU19ICisKKyNkZWZpbmUgTlVNX1NQQVJDX1RSQVBTICAyNTUKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworLyogVGhpcyBpcyBmb3IgVjggY29tcGxpYW50IFNwYXJjIENQVVMgKi8KK3N0cnVjdCB0dF9lbnRyeSB7CisJdW5zaWduZWQgbG9uZyBpbnN0X29uZTsKKwl1bnNpZ25lZCBsb25nIGluc3RfdHdvOworCXVuc2lnbmVkIGxvbmcgaW5zdF90aHJlZTsKKwl1bnNpZ25lZCBsb25nIGluc3RfZm91cjsKK307CisKKy8qIFdlIHNldCB0aGlzIHRvIF9zdGFydCBpbiBzeXN0ZW0gc2V0dXAuICovCitleHRlcm4gc3RydWN0IHR0X2VudHJ5ICpzcGFyY190dGFibGU7CisKK2V4dGVybiBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgZ2V0X3Ricih2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgdGJyOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oInJkICUldGJyLCAlMFxuXHQiIDogIj1yIiAodGJyKSk7CisJcmV0dXJuIHRicjsKK30KKworI2VuZGlmIC8qICEoX19BU1NFTUJMWV9fKSAqLworCisvKiBGb3IgcGF0Y2hpbmcgdGhlIHRyYXAgdGFibGUgYXQgYm9vdCB0aW1lLCB3ZSBuZWVkIHRvIGtub3cgaG93IHRvCisgKiBmb3JtIHZhcmlvdXMgY29tbW9uIFNwYXJjIGluc3RydWN0aW9ucy4gIFRodXMgdGhlc2UgbWFjcm9zLi4uCisgKi8KKworI2RlZmluZSBTUEFSQ19NT1ZfQ09OU1RfTDMoY29uc3QpICgweGE2MTAyMDAwIHwgKGNvbnN0JjB4ZmZmKSkKKworLyogVGhlIGZvbGxvd2luZyBhc3N1bWVzIHRoYXQgdGhlIGJyYW5jaCBsaWVzIGJlZm9yZSB0aGUgcGxhY2Ugd2UKKyAqIGFyZSBicmFuY2hpbmcgdG8uICBUaGlzIGlzIHRoZSBjYXNlIGZvciBhIHRyYXAgdmVjdG9yLi4uCisgKiBZb3UgaGF2ZSBiZWVuIHdhcm5lZC4KKyAqLworI2RlZmluZSBTUEFSQ19CUkFOQ0goZGVzdF9hZGRyLCBpbnN0X2FkZHIpIFwKKyAgICAgICAgICAoMHgxMDgwMDAwMCB8ICgoKGRlc3RfYWRkci1pbnN0X2FkZHIpPj4yKSYweDNmZmZmZikpCisKKyNkZWZpbmUgU1BBUkNfUkRfUFNSX0wwICAoMHhhMTQ4MDAwMCkKKyNkZWZpbmUgU1BBUkNfUkRfV0lNX0wzICAoMHhhNzUwMDAwMCkKKyNkZWZpbmUgU1BBUkNfTk9QICgweDAxMDAwMDAwKQorCisvKiBWYXJpb3VzIGludGVyZXN0aW5nIHRyYXAgbGV2ZWxzLiAqLworLyogRmlyc3QsIGhhcmR3YXJlIHRyYXBzLiAqLworI2RlZmluZSBTUF9UUkFQX1RGTFQgICAgMHgxICAgICAgICAgIC8qIFRleHQgZmF1bHQgKi8KKyNkZWZpbmUgU1BfVFJBUF9JSSAgICAgIDB4MiAgICAgICAgICAvKiBJbGxlZ2FsIEluc3RydWN0aW9uICovCisjZGVmaW5lIFNQX1RSQVBfUEkgICAgICAweDMgICAgICAgICAgLyogUHJpdmlsZWdlZCBJbnN0cnVjdGlvbiAqLworI2RlZmluZSBTUF9UUkFQX0ZQRCAgICAgMHg0ICAgICAgICAgIC8qIEZsb2F0aW5nIFBvaW50IERpc2FibGVkICovCisjZGVmaW5lIFNQX1RSQVBfV09WRiAgICAweDUgICAgICAgICAgLyogV2luZG93IE92ZXJmbG93ICovCisjZGVmaW5lIFNQX1RSQVBfV1VORiAgICAweDYgICAgICAgICAgLyogV2luZG93IFVuZGVyZmxvdyAqLworI2RlZmluZSBTUF9UUkFQX01OQSAgICAgMHg3ICAgICAgICAgIC8qIE1lbW9yeSBBZGRyZXNzIFVuYWxpZ25lZCAqLworI2RlZmluZSBTUF9UUkFQX0ZQRSAgICAgMHg4ICAgICAgICAgIC8qIEZsb2F0aW5nIFBvaW50IEV4Y2VwdGlvbiAqLworI2RlZmluZSBTUF9UUkFQX0RGTFQgICAgMHg5ICAgICAgICAgIC8qIERhdGEgRmF1bHQgKi8KKyNkZWZpbmUgU1BfVFJBUF9UT0YgICAgIDB4YSAgICAgICAgICAvKiBUYWcgT3ZlcmZsb3cgKi8KKyNkZWZpbmUgU1BfVFJBUF9XRE9HICAgIDB4YiAgICAgICAgICAvKiBXYXRjaHBvaW50IERldGVjdGVkICovCisjZGVmaW5lIFNQX1RSQVBfSVJRMSAgICAweDExICAgICAgICAgLyogSVJRIGxldmVsIDEgKi8KKyNkZWZpbmUgU1BfVFJBUF9JUlEyICAgIDB4MTIgICAgICAgICAvKiBJUlEgbGV2ZWwgMiAqLworI2RlZmluZSBTUF9UUkFQX0lSUTMgICAgMHgxMyAgICAgICAgIC8qIElSUSBsZXZlbCAzICovCisjZGVmaW5lIFNQX1RSQVBfSVJRNCAgICAweDE0ICAgICAgICAgLyogSVJRIGxldmVsIDQgKi8KKyNkZWZpbmUgU1BfVFJBUF9JUlE1ICAgIDB4MTUgICAgICAgICAvKiBJUlEgbGV2ZWwgNSAqLworI2RlZmluZSBTUF9UUkFQX0lSUTYgICAgMHgxNiAgICAgICAgIC8qIElSUSBsZXZlbCA2ICovCisjZGVmaW5lIFNQX1RSQVBfSVJRNyAgICAweDE3ICAgICAgICAgLyogSVJRIGxldmVsIDcgKi8KKyNkZWZpbmUgU1BfVFJBUF9JUlE4ICAgIDB4MTggICAgICAgICAvKiBJUlEgbGV2ZWwgOCAqLworI2RlZmluZSBTUF9UUkFQX0lSUTkgICAgMHgxOSAgICAgICAgIC8qIElSUSBsZXZlbCA5ICovCisjZGVmaW5lIFNQX1RSQVBfSVJRMTAgICAweDFhICAgICAgICAgLyogSVJRIGxldmVsIDEwICovCisjZGVmaW5lIFNQX1RSQVBfSVJRMTEgICAweDFiICAgICAgICAgLyogSVJRIGxldmVsIDExICovCisjZGVmaW5lIFNQX1RSQVBfSVJRMTIgICAweDFjICAgICAgICAgLyogSVJRIGxldmVsIDEyICovCisjZGVmaW5lIFNQX1RSQVBfSVJRMTMgICAweDFkICAgICAgICAgLyogSVJRIGxldmVsIDEzICovCisjZGVmaW5lIFNQX1RSQVBfSVJRMTQgICAweDFlICAgICAgICAgLyogSVJRIGxldmVsIDE0ICovCisjZGVmaW5lIFNQX1RSQVBfSVJRMTUgICAweDFmICAgICAgICAgLyogSVJRIGxldmVsIDE1IE5vbi1tYXNrYWJsZSAqLworI2RlZmluZSBTUF9UUkFQX1JBQ0MgICAgMHgyMCAgICAgICAgIC8qIFJlZ2lzdGVyIEFjY2VzcyBFcnJvciA/Pz8gKi8KKyNkZWZpbmUgU1BfVFJBUF9JQUNDICAgIDB4MjEgICAgICAgICAvKiBJbnN0cnVjdGlvbiBBY2Nlc3MgRXJyb3IgKi8KKyNkZWZpbmUgU1BfVFJBUF9DUERJUyAgIDB4MjQgICAgICAgICAvKiBDby1Qcm9jZXNzb3IgRGlzYWJsZWQgKi8KKyNkZWZpbmUgU1BfVFJBUF9CQURGTCAgIDB4MjUgICAgICAgICAvKiBVbmltcGxlbWVudGVkIEZsdXNoIEluc3RydWN0aW9uICovCisjZGVmaW5lIFNQX1RSQVBfQ1BFWFAgICAweDI4ICAgICAgICAgLyogQ28tUHJvY2Vzc29yIEV4Y2VwdGlvbiAqLworI2RlZmluZSBTUF9UUkFQX0RBQ0MgICAgMHgyOSAgICAgICAgIC8qIERhdGEgQWNjZXNzIEVycm9yICovCisjZGVmaW5lIFNQX1RSQVBfRElWWiAgICAweDJhICAgICAgICAgLyogRGl2aWRlIEJ5IFplcm8gKi8KKyNkZWZpbmUgU1BfVFJBUF9EU1RPUkUgIDB4MmIgICAgICAgICAvKiBEYXRhIFN0b3JlIEVycm9yID8/PyAqLworI2RlZmluZSBTUF9UUkFQX0RNTSAgICAgMHgyYyAgICAgICAgIC8qIERhdGEgQWNjZXNzIE1NVSBNaXNzID8/PyAqLworI2RlZmluZSBTUF9UUkFQX0lNTSAgICAgMHgzYyAgICAgICAgIC8qIEluc3RydWN0aW9uIEFjY2VzcyBNTVUgTWlzcyA/Pz8gKi8KKworLyogTm93IHRoZSBTb2Z0d2FyZSBUcmFwcy4uLiAqLworI2RlZmluZSBTUF9UUkFQX1NVTk9TICAgMHg4MCAgICAgICAgIC8qIFN1bk9TIFN5c3RlbSBDYWxsICovCisjZGVmaW5lIFNQX1RSQVBfU0JQVCAgICAweDgxICAgICAgICAgLyogU29mdHdhcmUgQnJlYWtwb2ludCAqLworI2RlZmluZSBTUF9UUkFQX1NESVZaICAgMHg4MiAgICAgICAgIC8qIFNvZnR3YXJlIERpdmlkZS1ieS1aZXJvIHRyYXAgKi8KKyNkZWZpbmUgU1BfVFJBUF9GV0lOICAgIDB4ODMgICAgICAgICAvKiBGbHVzaCBXaW5kb3dzICovCisjZGVmaW5lIFNQX1RSQVBfQ1dJTiAgICAweDg0ICAgICAgICAgLyogQ2xlYW4gV2luZG93cyAqLworI2RlZmluZSBTUF9UUkFQX1JDSEsgICAgMHg4NSAgICAgICAgIC8qIFJhbmdlIENoZWNrICovCisjZGVmaW5lIFNQX1RSQVBfRlVOQSAgICAweDg2ICAgICAgICAgLyogRml4IFVuYWxpZ25lZCBBY2Nlc3MgKi8KKyNkZWZpbmUgU1BfVFJBUF9JT1dGTCAgIDB4ODcgICAgICAgICAvKiBJbnRlZ2VyIE92ZXJmbG93ICovCisjZGVmaW5lIFNQX1RSQVBfU09MQVJJUyAweDg4ICAgICAgICAgLyogU29sYXJpcyBTeXN0ZW0gQ2FsbCAqLworI2RlZmluZSBTUF9UUkFQX05FVEJTRCAgMHg4OSAgICAgICAgIC8qIE5ldEJTRCBTeXN0ZW0gQ2FsbCAqLworI2RlZmluZSBTUF9UUkFQX0xJTlVYICAgMHg5MCAgICAgICAgIC8qIExpbnV4IFN5c3RlbSBDYWxsICovCisKKy8qIE5hbWVzIHVzZWQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBTdW5PUyAqLworI2RlZmluZSBTVF9TWVNDQUxMICAgICAgICAgICAgICAweDAwCisjZGVmaW5lIFNUX0JSRUFLUE9JTlQgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgU1RfRElWMCAgICAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBTVF9GTFVTSF9XSU5ET1dTICAgICAgICAweDAzCisjZGVmaW5lIFNUX0NMRUFOX1dJTkRPV1MgICAgICAgIDB4MDQKKyNkZWZpbmUgU1RfUkFOR0VfQ0hFQ0sgICAgICAgICAgMHgwNQorI2RlZmluZSBTVF9GSVhfQUxJR04gICAgICAgICAgICAweDA2CisjZGVmaW5lIFNUX0lOVF9PVkVSRkxPVyAgICAgICAgIDB4MDcKKworLyogU3BlY2lhbCB0cmFwcy4uLiAqLworI2RlZmluZSBTUF9UUkFQX0tCUFQxICAgMHhmZSAgICAgICAgIC8qIEtBREIvUFJPTSBCcmVha3BvaW50IG9uZSAqLworI2RlZmluZSBTUF9UUkFQX0tCUFQyICAgMHhmZiAgICAgICAgIC8qIEtBREIvUFJPTSBCcmVha3BvaW50IHR3byAqLworCisvKiBIYW5keSBNYWNyb3MgKi8KKy8qIElzIHRoaXMgYSB0cmFwIHdlIG5ldmVyIGV4cGVjdCB0byBnZXQ/ICovCisjZGVmaW5lIEJBRF9UUkFQX1AobGV2ZWwpIFwKKyAgICAgICAgKChsZXZlbCA+IFNQX1RSQVBfV0RPRyAmJiBsZXZlbCA8IFNQX1RSQVBfSVJRMSkgfHwgXAorCSAobGV2ZWwgPiBTUF9UUkFQX0lBQ0MgJiYgbGV2ZWwgPCBTUF9UUkFQX0NQRElTKSB8fCBcCisJIChsZXZlbCA+IFNQX1RSQVBfQkFERkwgJiYgbGV2ZWwgPCBTUF9UUkFQX0NQRVhQKSB8fCBcCisJIChsZXZlbCA+IFNQX1RSQVBfRE1NICYmIGxldmVsIDwgU1BfVFJBUF9JTU0pIHx8IFwKKwkgKGxldmVsID4gU1BfVFJBUF9JTU0gJiYgbGV2ZWwgPCBTUF9UUkFQX1NVTk9TKSB8fCBcCisJIChsZXZlbCA+IFNQX1RSQVBfTElOVVggJiYgbGV2ZWwgPCBTUF9UUkFQX0tCUFQxKSkKKworLyogSXMgdGhpcyBhIEhhcmR3YXJlIHRyYXA/ICovCisjZGVmaW5lIEhXX1RSQVBfUChsZXZlbCkgKChsZXZlbCA+IDApICYmIChsZXZlbCA8IFNQX1RSQVBfU1VOT1MpKQorCisvKiBJcyB0aGlzIGEgU29mdHdhcmUgdHJhcD8gKi8KKyNkZWZpbmUgU1dfVFJBUF9QKGxldmVsKSAoKGxldmVsID49IFNQX1RSQVBfU1VOT1MpICYmIChsZXZlbCA8PSBTUF9UUkFQX0tCUFQyKSkKKworLyogSXMgdGhpcyBhIHN5c3RlbSBjYWxsIGZvciBzb21lIE9TIHdlIGtub3cgYWJvdXQ/ICovCisjZGVmaW5lIFNDQUxMX1RSQVBfUChsZXZlbCkgKChsZXZlbCA9PSBTUF9UUkFQX1NVTk9TKSB8fCBcCisJCQkgICAgIChsZXZlbCA9PSBTUF9UUkFQX1NPTEFSSVMpIHx8IFwKKwkJCSAgICAgKGxldmVsID09IFNQX1RSQVBfTkVUQlNEKSB8fCBcCisJCQkgICAgIChsZXZlbCA9PSBTUF9UUkFQX0xJTlVYKSkKKworI2VuZGlmIC8qICEoX1NQQVJDX1RSQVBTX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy90c3VuYW1pLmggYi9pbmNsdWRlL2FzbS1zcGFyYy90c3VuYW1pLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg3YWRkNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3RzdW5hbWkuaApAQCAtMCwwICsxLDY0IEBACisvKiAkSWQ6IHRzdW5hbWkuaCx2IDEuNSAxOTk2LzA4LzI5IDA5OjQ5OjAzIGRhdmVtIEV4cCAkCisgKiB0c3VuYW1pLmg6ICBNb2R1bGUgc3BlY2lmaWMgZGVmaW5pdGlvbnMgZm9yIFRzdW5hbWkgVjggU3BhcmNzCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKKyAqLworCisjaWZuZGVmIF9TUEFSQ19UU1VOQU1JX0gKKyNkZWZpbmUgX1NQQVJDX1RTVU5BTUlfSAorCisjaW5jbHVkZSA8YXNtL2FzaS5oPgorCisvKiBUaGUgTU1VIGNvbnRyb2wgcmVnaXN0ZXIgb24gdGhlIFRzdW5hbWk6CisgKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHwgaW1wbHZlcnMgfFNXfEFWfERWfE1WfCBSU1YgfFBDfElURHxBTEN8IFJTViB8UEV8IFJDIHxJRXxERXxSU1Z8TkZ8TUV8CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIDMxICAgICAgMjQgMjMgMjIgMjEgMjAgMTktMTggMTcgIDE2IDE0ICAxMy0xMiAxMSAxMC05ICA4ICA3IDYtMiAgMSAgMAorICoKKyAqIFNXOiBFbmFibGUgU29mdHdhcmUgVGFibGUgV2Fsa3MgIDA9b2ZmIDE9b24KKyAqIEFWOiBBZGRyZXNzIFZpZXcgYml0CisgKiBEVjogRGF0YSBWaWV3IGJpdAorICogTVY6IE1lbW9yeSBWaWV3IGJpdAorICogUEM6IFBhcml0eSBDb250cm9sCisgKiBJVEQ6IElUQlIgZGlzYWJsZQorICogQUxDOiBBbHRlcm5hdGUgQ2FjaGVhYmxlCisgKiBQRTogUGFyaXR5IEVuYWJsZSAgIDA9b2ZmIDE9b24KKyAqIFJDOiBSZWZyZXNoIENvbnRyb2wKKyAqIElFOiBJbnN0cnVjdGlvbiBjYWNoZSBFbmFibGUgIDA9b2ZmIDE9b24KKyAqIERFOiBEYXRhIGNhY2hlIEVuYWJsZSAgMD1vZmYgMT1vbgorICogTkY6IE5vIEZhdWx0LCBzYW1lIGFzIGFsbCBvdGhlciBTUk1NVXMKKyAqIE1FOiBNTVUgRW5hYmxlLCBzYW1lIGFzIGFsbCBvdGhlciBTUk1NVXMKKyAqLworCisjZGVmaW5lIFRTVU5BTUlfU1cgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgVFNVTkFNSV9BViAgICAgICAgMHgwMDQwMDAwMAorI2RlZmluZSBUU1VOQU1JX0RWICAgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIFRTVU5BTUlfTVYgICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgVFNVTkFNSV9QQyAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBUU1VOQU1JX0lURCAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIFRTVU5BTUlfQUxDICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgVFNVTkFNSV9QRSAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBUU1VOQU1JX1JDTUFTSyAgICAweDAwMDAwQzAwCisjZGVmaW5lIFRTVU5BTUlfSUVOQUIgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgVFNVTkFNSV9ERU5BQiAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBUU1VOQU1JX05GICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFRTVU5BTUlfTUUgICAgICAgIDB4MDAwMDAwMDEKKworc3RhdGljIGlubGluZSB2b2lkIHRzdW5hbWlfZmx1c2hfaWNhY2hlKHZvaWQpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0YSAlJWcwLCBbJSVnMF0gJTBcblx0IgorCQkJICAgICA6IC8qIG5vIG91dHB1dHMgKi8KKwkJCSAgICAgOiAiaSIgKEFTSV9NX0lDX0ZMQ0xFQVIpCisJCQkgICAgIDogIm1lbW9yeSIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdHN1bmFtaV9mbHVzaF9kY2FjaGUodm9pZCkKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RhICUlZzAsIFslJWcwXSAlMFxuXHQiCisJCQkgICAgIDogLyogbm8gb3V0cHV0cyAqLworCQkJICAgICA6ICJpIiAoQVNJX01fRENfRkxDTEVBUikKKwkJCSAgICAgOiAibWVtb3J5Iik7Cit9CisKKyNlbmRpZiAvKiAhKF9TUEFSQ19UU1VOQU1JX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy90dXJib3NwYXJjLmggYi9pbmNsdWRlL2FzbS1zcGFyYy90dXJib3NwYXJjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFkMjM1MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3R1cmJvc3BhcmMuaApAQCAtMCwwICsxLDEyNSBAQAorLyogJElkOiB0dXJib3NwYXJjLmgsdiAxLjQgMTk5OC8wOC8xNiAxNjowMjo0MiBlY2QgRXhwICQKKyAqIHR1cmJvc3BhcmMuaDogIERlZmluZXMgc3BlY2lmaWMgdG8gdGhlIFR1cmJvU3BhcmMgbW9kdWxlLgorICogICAgICAgICAgICBUaGlzIGlzIFNSTU1VIHN0dWZmLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NyBKYWt1YiBKZWxpbmVrIChqakBzdW5zaXRlLm1mZi5jdW5pLmN6KQorICovCisjaWZuZGVmIF9TUEFSQ19UVVJCT1NQQVJDX0gKKyNkZWZpbmUgX1NQQVJDX1RVUkJPU1BBUkNfSAorCisjaW5jbHVkZSA8YXNtL2FzaS5oPgorI2luY2x1ZGUgPGFzbS9wZ3Rzcm1tdS5oPgorCisvKiBCaXRzIGluIHRoZSBTUk1NVSBjb250cm9sIHJlZ2lzdGVyIGZvciBUdXJib1NwYXJjIG1vZHVsZXMuCisgKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogfGltcGwtdmVyc3wgUlNWfCBQTUMgfFBFfFBDfCBSU1YgfEJNfCBSRlIgfElDfERDfFBTT3xSU1Z8SUNTfE5GfE1FfAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIDMxICAgIDI0IDIzLTIxIDIwLTE5IDE4IDE3IDE2LTE1IDE0IDEzLTEwICA5ICA4ICA3ICA2LTMgICAyICAxICAwCisgKgorICogQk06IEJvb3QgTW9kZSAtLSAwID0gbm90IGluIGJvb3QgbW9kZSwgMSA9IGluIGJvb3QgbW9kZQorICoKKyAqIFRoaXMgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIFR1cmJvU3BhcmMgaXMgaW4gYm9vdC1tb2RlIG9yIG5vdC4KKyAqCisgKiBJQzogSW5zdHJ1Y3Rpb24gQ2FjaGUgLS0gMCA9IG9mZiwgMSA9IG9uCisgKiBEQzogRGF0YSBDYWNoZSAtLSAwID0gb2ZmLCAxID0gMG4KKyAqCisgKiBUaGVzZSBiaXRzIGVuYWJsZSB0aGUgb24tY3B1IFR1cmJvU3BhcmMgc3BsaXQgSS9EIGNhY2hlcy4KKyAqCisgKiBJQ1M6IElDYWNoZSBTbm9vcGluZyAtLSAwID0gZGlzYWJsZSwgMSA9IGVuYWJsZSBzbm9vcGluZyBvZiBpY2FjaGUKKyAqIE5GOiBObyBGYXVsdCAtLSAwID0gZmF1bHRzIGdlbmVyYXRlIHRyYXBzLCAxID0gZmF1bHRzIGRvbid0IHRyYXAKKyAqIE1FOiBNTVUgZW5hYmxlIC0tIDAgPSBtbXUgbm90IHRyYW5zbGF0aW5nLCAxID0gbW11IHRyYW5zbGF0aW5nCisgKgorICovCisKKyNkZWZpbmUgVFVSQk9TUEFSQ19NTVVFTkFCTEUgICAgMHgwMDAwMDAwMQorI2RlZmluZSBUVVJCT1NQQVJDX05PRkFVTFQgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFRVUkJPU1BBUkNfSUNTTk9PUAkweDAwMDAwMDA0CisjZGVmaW5lIFRVUkJPU1BBUkNfUFNPICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgVFVSQk9TUEFSQ19EQ0VOQUJMRSAgICAgMHgwMDAwMDEwMCAgIC8qIEVuYWJsZSBkYXRhIGNhY2hlICovCisjZGVmaW5lIFRVUkJPU1BBUkNfSUNFTkFCTEUgICAgIDB4MDAwMDAyMDAgICAvKiBFbmFibGUgaW5zdHJ1Y3Rpb24gY2FjaGUgKi8KKyNkZWZpbmUgVFVSQk9TUEFSQ19CTU9ERSAgICAgICAgMHgwMDAwNDAwMCAgIAorI2RlZmluZSBUVVJCT1NQQVJDX1BBUklUWU9ERAkweDAwMDIwMDAwICAgLyogUGFyaXR5IG9kZCwgaWYgZW5hYmxlZCAqLworI2RlZmluZSBUVVJCT1NQQVJDX1BDRU5BQkxFCTB4MDAwNDAwMDAgICAvKiBFbmFibGUgcGFyaXR5IGNoZWNraW5nICovCisKKy8qIEJpdHMgaW4gdGhlIENQVSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIGZvciBUdXJib1NwYXJjIG1vZHVsZXMuCisgKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogfElPQ2xrfFNOUHxBWENsa3wgUkFIIHwgIFdTIHwgIFJTViAgfFNCQ3xXVHx1UzJ8U0V8U0NDfAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogICAgMzEgICAzMCAyOS0yOCAyNy0yNiAyNS0yMyAgIDIyLTggIDctNiAgNSAgNCAgIDMgMi0wCisgKgorICovCisKKyNkZWZpbmUgVFVSQk9TUEFSQ19TQ0VOQUJMRSAweDAwMDAwMDA4CSAvKiBTZWNvbmRhcnkgY2FjaGUgZW5hYmxlICovCisjZGVmaW5lIFRVUkJPU1BBUkNfdVMyCSAgICAweDAwMDAwMDEwICAgLyogU3dpZnQgY29tcGF0aWJpbGl0eSBtb2RlICovCisjZGVmaW5lIFRVUkJPU1BBUkNfV1RFTkFCTEUgMHgwMDAwMDAyMAkgLyogV3JpdGUgdGhydSBmb3IgZGNhY2hlICovCisjZGVmaW5lIFRVUkJPU1BBUkNfU05FTkFCTEUgMHg0MDAwMDAwMAkgLyogRFZNQSBzbm9vcCBlbmFibGUgKi8KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworLyogQml0cyBbMTM6NV0gc2VsZWN0IG9uZSBvZiA1MTIgaW5zdHJ1Y3Rpb24gY2FjaGUgdGFncyAqLworc3RhdGljIGlubGluZSB2b2lkIHR1cmJvc3BhcmNfaW52X2luc25fdGFnKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKyAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInN0YSAlJWcwLCBbJTBdICUxXG5cdCIKKwkJCSAgICAgOiAvKiBubyBvdXRwdXRzICovCisJCQkgICAgIDogInIiIChhZGRyKSwgImkiIChBU0lfTV9UWFRDX1RBRykKKwkJCSAgICAgOiAibWVtb3J5Iik7Cit9CisKKy8qIEJpdHMgWzEzOjVdIHNlbGVjdCBvbmUgb2YgNTEyIGRhdGEgY2FjaGUgdGFncyAqLworc3RhdGljIGlubGluZSB2b2lkIHR1cmJvc3BhcmNfaW52X2RhdGFfdGFnKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKyAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInN0YSAlJWcwLCBbJTBdICUxXG5cdCIKKwkJCSAgICAgOiAvKiBubyBvdXRwdXRzICovCisJCQkgICAgIDogInIiIChhZGRyKSwgImkiIChBU0lfTV9EQVRBQ19UQUcpCisJCQkgICAgIDogIm1lbW9yeSIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdHVyYm9zcGFyY19mbHVzaF9pY2FjaGUodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisKKyAgICAgICAgZm9yIChhZGRyID0gMDsgYWRkciA8IDB4NDAwMDsgYWRkciArPSAweDIwKQorICAgICAgICAgICAgICAgIHR1cmJvc3BhcmNfaW52X2luc25fdGFnKGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdHVyYm9zcGFyY19mbHVzaF9kY2FjaGUodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisKKyAgICAgICAgZm9yIChhZGRyID0gMDsgYWRkciA8IDB4NDAwMDsgYWRkciArPSAweDIwKQorICAgICAgICAgICAgICAgIHR1cmJvc3BhcmNfaW52X2RhdGFfdGFnKGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdHVyYm9zcGFyY19pZGZsYXNoX2NsZWFyKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCisgICAgICAgIGZvciAoYWRkciA9IDA7IGFkZHIgPCAweDQwMDA7IGFkZHIgKz0gMHgyMCkgeworICAgICAgICAgICAgICAgIHR1cmJvc3BhcmNfaW52X2luc25fdGFnKGFkZHIpOworICAgICAgICAgICAgICAgIHR1cmJvc3BhcmNfaW52X2RhdGFfdGFnKGFkZHIpOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIHR1cmJvc3BhcmNfc2V0X2NjcmVnKHVuc2lnbmVkIGxvbmcgcmVndmFsKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdGEgJTAsIFslMV0gJTJcblx0IgorCQkJICAgICA6IC8qIG5vIG91dHB1dHMgKi8KKwkJCSAgICAgOiAiciIgKHJlZ3ZhbCksICJyIiAoMHg2MDApLCAiaSIgKEFTSV9NX01NVVJFR1MpCisJCQkgICAgIDogIm1lbW9yeSIpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdHVyYm9zcGFyY19nZXRfY2NyZWcodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHJlZ3ZhbDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKCJsZGEgWyUxXSAlMiwgJTBcblx0IgorCQkJICAgICA6ICI9ciIgKHJlZ3ZhbCkKKwkJCSAgICAgOiAiciIgKDB4NjAwKSwgImkiIChBU0lfTV9NTVVSRUdTKSk7CisJcmV0dXJuIHJlZ3ZhbDsKK30KKworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKworI2VuZGlmIC8qICEoX1NQQVJDX1RVUkJPU1BBUkNfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3R5cGVzLmggYi9pbmNsdWRlL2FzbS1zcGFyYy90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllYWJmNmUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy90eXBlcy5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qICRJZDogdHlwZXMuaCx2IDEuMTMgMjAwMS8xMi8yMSAwMToyMjo1OSBkYXZlbSBFeHAgJCAqLworI2lmbmRlZiBfU1BBUkNfVFlQRVNfSAorI2RlZmluZSBfU1BBUkNfVFlQRVNfSAorCisvKgorICogX3h4IGlzIG9rOiBpdCBkb2Vzbid0IHBvbGx1dGUgdGhlIFBPU0lYIG5hbWVzcGFjZS4gVXNlIHRoZXNlIGluIHRoZQorICogaGVhZGVyIGZpbGVzIGV4cG9ydGVkIHRvIHVzZXIgc3BhY2UuCisgKi8KKworLyoKKyAqIFRoaXMgZmlsZSBpcyBuZXZlciBpbmNsdWRlZCBieSBhcHBsaWNhdGlvbiBzb2Z0d2FyZSB1bmxlc3MKKyAqIGV4cGxpY2l0bHkgcmVxdWVzdGVkIChlLmcuLCB2aWEgbGludXgvdHlwZXMuaCkgaW4gd2hpY2ggY2FzZSB0aGUKKyAqIGFwcGxpY2F0aW9uIGlzIExpbnV4IHNwZWNpZmljIHNvICh1c2VyLSkgbmFtZSBzcGFjZSBwb2xsdXRpb24gaXMKKyAqIG5vdCBhIG1ham9yIGlzc3VlLiAgSG93ZXZlciwgZm9yIGludGVyb3BlcmFiaWxpdHksIGxpYnJhcmllcyBzdGlsbAorICogbmVlZCB0byBiZSBjYXJlZnVsIHRvIGF2b2lkIGEgbmFtZSBjbGFzaGVzLgorICovCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgdW1vZGVfdDsKKwordHlwZWRlZiBfX3NpZ25lZF9fIGNoYXIgX19zODsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBfX3U4OworCit0eXBlZGVmIF9fc2lnbmVkX18gc2hvcnQgX19zMTY7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fdTE2OworCit0eXBlZGVmIF9fc2lnbmVkX18gaW50IF9fczMyOwordHlwZWRlZiB1bnNpZ25lZCBpbnQgX191MzI7CisKK3R5cGVkZWYgX19zaWduZWRfXyBsb25nIGxvbmcgX19zNjQ7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3U2NDsKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisjaWZkZWYgX19LRVJORUxfXworCisjZGVmaW5lIEJJVFNfUEVSX0xPTkcgMzIKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKwordHlwZWRlZiBfX3NpZ25lZF9fIGNoYXIgczg7Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdTg7CisKK3R5cGVkZWYgX19zaWduZWRfXyBzaG9ydCBzMTY7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHUxNjsKKwordHlwZWRlZiBfX3NpZ25lZF9fIGludCBzMzI7Cit0eXBlZGVmIHVuc2lnbmVkIGludCB1MzI7CisKK3R5cGVkZWYgX19zaWduZWRfXyBsb25nIGxvbmcgczY0OwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdTY0OworCit0eXBlZGVmIHUzMiBkbWFfYWRkcl90OwordHlwZWRlZiB1MzIgZG1hNjRfYWRkcl90OworCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGttZW1fYnVmY3RsX3Q7CisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIGRlZmluZWQoX1NQQVJDX1RZUEVTX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy91YWNjZXNzLmggYi9pbmNsdWRlL2FzbS1zcGFyYy91YWNjZXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y0Nzg4OQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3VhY2Nlc3MuaApAQCAtMCwwICsxLDM4OSBAQAorLyogJElkOiB1YWNjZXNzLmgsdiAxLjI0IDIwMDEvMTAvMzAgMDQ6MzI6MjQgZGF2ZW0gRXhwICQKKyAqIHVhY2Nlc3MuaDogVXNlciBzcGFjZSBtZW1vcmUgYWNjZXNzIGZ1bmN0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQorICogQ29weXJpZ2h0IChDKSAxOTk2LDE5OTcgSmFrdWIgSmVsaW5layAoampAc3Vuc2l0ZS5tZmYuY3VuaS5jeikKKyAqLworI2lmbmRlZiBfQVNNX1VBQ0NFU1NfSAorI2RlZmluZSBfQVNNX1VBQ0NFU1NfSAorCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGFzbS92YWMtb3BzLmg+CisjaW5jbHVkZSA8YXNtL2Eub3V0Lmg+CisjZW5kaWYKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworLyogU3BhcmMgaXMgbm90IHNlZ21lbnRlZCwgaG93ZXZlciB3ZSBuZWVkIHRvIGJlIGFibGUgdG8gZm9vbCB2ZXJpZnlfYXJlYSgpCisgKiB3aGVuIGRvaW5nIHN5c3RlbSBjYWxscyBmcm9tIGtlcm5lbCBtb2RlIGxlZ2l0aW1hdGVseS4KKyAqCisgKiAiRm9yIGhpc3RvcmljYWwgcmVhc29ucywgdGhlc2UgbWFjcm9zIGFyZSBncm9zc2x5IG1pc25hbWVkLiIgLUxpbnVzCisgKi8KKworI2RlZmluZSBLRVJORUxfRFMgICAoKG1tX3NlZ21lbnRfdCkgeyAwIH0pCisjZGVmaW5lIFVTRVJfRFMgICAgICgobW1fc2VnbWVudF90KSB7IC0xIH0pCisKKyNkZWZpbmUgVkVSSUZZX1JFQUQJMAorI2RlZmluZSBWRVJJRllfV1JJVEUJMQorCisjZGVmaW5lIGdldF9kcygpCShLRVJORUxfRFMpCisjZGVmaW5lIGdldF9mcygpCShjdXJyZW50LT50aHJlYWQuY3VycmVudF9kcykKKyNkZWZpbmUgc2V0X2ZzKHZhbCkJKChjdXJyZW50LT50aHJlYWQuY3VycmVudF9kcykgPSAodmFsKSkKKworI2RlZmluZSBzZWdtZW50X2VxKGEsYikJKChhKS5zZWcgPT0gKGIpLnNlZykKKworLyogV2UgaGF2ZSB0aGVyZSBhIG5pY2Ugbm90LW1hcHBlZCBwYWdlIGF0IFBBR0VfT0ZGU0VUIC0gUEFHRV9TSVpFLCBzbyB0aGF0IHRoaXMgdGVzdAorICogY2FuIGJlIGZhaXJseSBsaWdodHdlaWdodC4KKyAqIE5vIG9uZSBjYW4gcmVhZC93cml0ZSBhbnl0aGluZyBmcm9tIHVzZXJsYW5kIGluIHRoZSBrZXJuZWwgc3BhY2UgYnkgc2V0dGluZworICogbGFyZ2Ugc2l6ZSBhbmQgYWRkcmVzcyBuZWFyIHRvIFBBR0VfT0ZGU0VUIC0gYSBmYXVsdCB3aWxsIGJyZWFrIGhpcyBpbnRlbnRpb25zLgorICovCisjZGVmaW5lIF9fdXNlcl9vayhhZGRyLHNpemUpICgoYWRkcikgPCBTVEFDS19UT1ApCisjZGVmaW5lIF9fa2VybmVsX29rIChzZWdtZW50X2VxKGdldF9mcygpLCBLRVJORUxfRFMpKQorI2RlZmluZSBfX2FjY2Vzc19vayhhZGRyLHNpemUpIChfX3VzZXJfb2soKGFkZHIpICYgZ2V0X2ZzKCkuc2VnLChzaXplKSkpCisjZGVmaW5lIGFjY2Vzc19vayh0eXBlLGFkZHIsc2l6ZSkgX19hY2Nlc3Nfb2soKHVuc2lnbmVkIGxvbmcpKGFkZHIpLChzaXplKSkKKworLyogdGhpcyBmdW5jdGlvbiB3aWxsIGdvIGF3YXkgc29vbiAtIHVzZSBhY2Nlc3Nfb2soKSBpbnN0ZWFkICovCitzdGF0aWMgaW5saW5lIGludCBfX2RlcHJlY2F0ZWQgdmVyaWZ5X2FyZWEoaW50IHR5cGUsIGNvbnN0IHZvaWQgX191c2VyICogYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXJldHVybiBhY2Nlc3Nfb2sodHlwZSxhZGRyLHNpemUpID8gMCA6IC1FRkFVTFQ7Cit9CisKKy8qCisgKiBUaGUgZXhjZXB0aW9uIHRhYmxlIGNvbnNpc3RzIG9mIHBhaXJzIG9mIGFkZHJlc3NlczogdGhlIGZpcnN0IGlzIHRoZQorICogYWRkcmVzcyBvZiBhbiBpbnN0cnVjdGlvbiB0aGF0IGlzIGFsbG93ZWQgdG8gZmF1bHQsIGFuZCB0aGUgc2Vjb25kIGlzCisgKiB0aGUgYWRkcmVzcyBhdCB3aGljaCB0aGUgcHJvZ3JhbSBzaG91bGQgY29udGludWUuICBObyByZWdpc3RlcnMgYXJlCisgKiBtb2RpZmllZCwgc28gaXQgaXMgZW50aXJlbHkgdXAgdG8gdGhlIGNvbnRpbnVhdGlvbiBjb2RlIHRvIGZpZ3VyZSBvdXQKKyAqIHdoYXQgdG8gZG8uCisgKgorICogQWxsIHRoZSByb3V0aW5lcyBiZWxvdyB1c2UgYml0cyBvZiBmaXh1cCBjb2RlIHRoYXQgYXJlIG91dCBvZiBsaW5lCisgKiB3aXRoIHRoZSBtYWluIGluc3RydWN0aW9uIHBhdGguICBUaGlzIG1lYW5zIHdoZW4gZXZlcnl0aGluZyBpcyB3ZWxsLAorICogd2UgZG9uJ3QgZXZlbiBoYXZlIHRvIGp1bXAgb3ZlciB0aGVtLiAgRnVydGhlciwgdGhleSBkbyBub3QgaW50cnVkZQorICogb24gb3VyIGNhY2hlIG9yIHRsYiBlbnRyaWVzLgorICoKKyAqIFRoZXJlIGlzIGEgc3BlY2lhbCB3YXkgaG93IHRvIHB1dCBhIHJhbmdlIG9mIHBvdGVudGlhbGx5IGZhdWx0aW5nCisgKiBpbnNucyAobGlrZSB0d2VudHkgbGRkL3N0ZCdzIHdpdGggbm93IGludGVydmVuaW5nIG90aGVyIGluc3RydWN0aW9ucykKKyAqIFlvdSBzcGVjaWZ5IGFkZHJlc3Mgb2YgZmlyc3QgaW4gaW5zbiBhbmQgMCBpbiBmaXh1cCBhbmQgaW4gdGhlIG5leHQKKyAqIGV4Y2VwdGlvbl90YWJsZV9lbnRyeSB5b3Ugc3BlY2lmeSBsYXN0IHBvdGVudGlhbGx5IGZhdWx0aW5nIGluc24gKyAxCisgKiBhbmQgaW4gZml4dXAgdGhlIHJvdXRpbmUgd2hpY2ggc2hvdWxkIGhhbmRsZSB0aGUgZmF1bHQuCisgKiBUaGF0IGZpeHVwIGNvZGUgd2lsbCBnZXQKKyAqIChmYXVsdGluZ19pbnNuX2FkZHJlc3MgLSBmaXJzdF9pbnNuX2luX3RoZV9yYW5nZV9hZGRyZXNzKS80CisgKiBpbiAlZzIgKGllLiBpbmRleCBvZiB0aGUgZmF1bHRpbmcgaW5zdHJ1Y3Rpb24gaW4gdGhlIHJhbmdlKS4KKyAqLworCitzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5Cit7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgaW5zbiwgZml4dXA7Cit9OworCisvKiBSZXR1cm5zIDAgaWYgZXhjZXB0aW9uIG5vdCBmb3VuZCBhbmQgZml4dXAgb3RoZXJ3aXNlLiAgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIHNlYXJjaF9leHRhYmxlc19yYW5nZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgKmcyKTsKKworZXh0ZXJuIHZvaWQgX19yZXRfZWZhdWx0KHZvaWQpOworCisvKiBVaCwgdGhlc2Ugc2hvdWxkIGJlY29tZSB0aGUgbWFpbiBzaW5nbGUtdmFsdWUgdHJhbnNmZXIgcm91dGluZXMuLgorICogVGhleSBhdXRvbWF0aWNhbGx5IHVzZSB0aGUgcmlnaHQgc2l6ZSBpZiB3ZSBqdXN0IGhhdmUgdGhlIHJpZ2h0CisgKiBwb2ludGVyIHR5cGUuLgorICoKKyAqIFRoaXMgZ2V0cyBraW5kIG9mIHVnbHkuIFdlIHdhbnQgdG8gcmV0dXJuIF90d29fIHZhbHVlcyBpbiAiZ2V0X3VzZXIoKSIKKyAqIGFuZCB5ZXQgd2UgZG9uJ3Qgd2FudCB0byBkbyBhbnkgcG9pbnRlcnMsIGJlY2F1c2UgdGhhdCBpcyB0b28gbXVjaAorICogb2YgYSBwZXJmb3JtYW5jZSBpbXBhY3QuIFRodXMgd2UgaGF2ZSBhIGZldyByYXRoZXIgdWdseSBtYWNyb3MgaGVyZSwKKyAqIGFuZCBoaWRlIGFsbCB0aGUgdWdsaW5lc3MgZnJvbSB0aGUgdXNlci4KKyAqLworI2RlZmluZSBwdXRfdXNlcih4LHB0cikgKHsgXAordW5zaWduZWQgbG9uZyBfX3B1X2FkZHIgPSAodW5zaWduZWQgbG9uZykocHRyKTsgXAorX19jaGtfdXNlcl9wdHIocHRyKTsgXAorX19wdXRfdXNlcl9jaGVjaygoX190eXBlb2ZfXygqKHB0cikpKSh4KSxfX3B1X2FkZHIsc2l6ZW9mKCoocHRyKSkpOyB9KQorCisjZGVmaW5lIGdldF91c2VyKHgscHRyKSAoeyBcCit1bnNpZ25lZCBsb25nIF9fZ3VfYWRkciA9ICh1bnNpZ25lZCBsb25nKShwdHIpOyBcCitfX2Noa191c2VyX3B0cihwdHIpOyBcCitfX2dldF91c2VyX2NoZWNrKCh4KSxfX2d1X2FkZHIsc2l6ZW9mKCoocHRyKSksX190eXBlb2ZfXygqKHB0cikpKTsgfSkKKworLyoKKyAqIFRoZSAiX194eHgiIHZlcnNpb25zIGRvIG5vdCBkbyBhZGRyZXNzIHNwYWNlIGNoZWNraW5nLCB1c2VmdWwgd2hlbgorICogZG9pbmcgbXVsdGlwbGUgYWNjZXNzZXMgdG8gdGhlIHNhbWUgYXJlYSAodGhlIHVzZXIgaGFzIHRvIGRvIHRoZQorICogY2hlY2tzIGJ5IGhhbmQgd2l0aCAiYWNjZXNzX29rKCkiKQorICovCisjZGVmaW5lIF9fcHV0X3VzZXIoeCxwdHIpIF9fcHV0X3VzZXJfbm9jaGVjaygoX190eXBlb2ZfXygqKHB0cikpKSh4KSwocHRyKSxzaXplb2YoKihwdHIpKSkKKyNkZWZpbmUgX19nZXRfdXNlcih4LHB0cikgX19nZXRfdXNlcl9ub2NoZWNrKCh4KSwocHRyKSxzaXplb2YoKihwdHIpKSxfX3R5cGVvZl9fKCoocHRyKSkpCisKK3N0cnVjdCBfX2xhcmdlX3N0cnVjdCB7IHVuc2lnbmVkIGxvbmcgYnVmWzEwMF07IH07CisjZGVmaW5lIF9fbSh4KSAoKHN0cnVjdCBfX2xhcmdlX3N0cnVjdCBfX3VzZXIgKikoeCkpCisKKyNkZWZpbmUgX19wdXRfdXNlcl9jaGVjayh4LGFkZHIsc2l6ZSkgKHsgXAorcmVnaXN0ZXIgaW50IF9fcHVfcmV0OyBcCitpZiAoX19hY2Nlc3Nfb2soYWRkcixzaXplKSkgeyBcCitzd2l0Y2ggKHNpemUpIHsgXAorY2FzZSAxOiBfX3B1dF91c2VyX2FzbSh4LGIsYWRkcixfX3B1X3JldCk7IGJyZWFrOyBcCitjYXNlIDI6IF9fcHV0X3VzZXJfYXNtKHgsaCxhZGRyLF9fcHVfcmV0KTsgYnJlYWs7IFwKK2Nhc2UgNDogX19wdXRfdXNlcl9hc20oeCwsYWRkcixfX3B1X3JldCk7IGJyZWFrOyBcCitjYXNlIDg6IF9fcHV0X3VzZXJfYXNtKHgsZCxhZGRyLF9fcHVfcmV0KTsgYnJlYWs7IFwKK2RlZmF1bHQ6IF9fcHVfcmV0ID0gX19wdXRfdXNlcl9iYWQoKTsgYnJlYWs7IFwKK30gfSBlbHNlIHsgX19wdV9yZXQgPSAtRUZBVUxUOyB9IF9fcHVfcmV0OyB9KQorCisjZGVmaW5lIF9fcHV0X3VzZXJfY2hlY2tfcmV0KHgsYWRkcixzaXplLHJldHZhbCkgKHsgXAorcmVnaXN0ZXIgaW50IF9fZm9vIF9fYXNtX18gKCJsMSIpOyBcCitpZiAoX19hY2Nlc3Nfb2soYWRkcixzaXplKSkgeyBcCitzd2l0Y2ggKHNpemUpIHsgXAorY2FzZSAxOiBfX3B1dF91c2VyX2FzbV9yZXQoeCxiLGFkZHIscmV0dmFsLF9fZm9vKTsgYnJlYWs7IFwKK2Nhc2UgMjogX19wdXRfdXNlcl9hc21fcmV0KHgsaCxhZGRyLHJldHZhbCxfX2Zvbyk7IGJyZWFrOyBcCitjYXNlIDQ6IF9fcHV0X3VzZXJfYXNtX3JldCh4LCxhZGRyLHJldHZhbCxfX2Zvbyk7IGJyZWFrOyBcCitjYXNlIDg6IF9fcHV0X3VzZXJfYXNtX3JldCh4LGQsYWRkcixyZXR2YWwsX19mb28pOyBicmVhazsgXAorZGVmYXVsdDogaWYgKF9fcHV0X3VzZXJfYmFkKCkpIHJldHVybiByZXR2YWw7IGJyZWFrOyBcCit9IH0gZWxzZSByZXR1cm4gcmV0dmFsOyB9KQorCisjZGVmaW5lIF9fcHV0X3VzZXJfbm9jaGVjayh4LGFkZHIsc2l6ZSkgKHsgXAorcmVnaXN0ZXIgaW50IF9fcHVfcmV0OyBcCitzd2l0Y2ggKHNpemUpIHsgXAorY2FzZSAxOiBfX3B1dF91c2VyX2FzbSh4LGIsYWRkcixfX3B1X3JldCk7IGJyZWFrOyBcCitjYXNlIDI6IF9fcHV0X3VzZXJfYXNtKHgsaCxhZGRyLF9fcHVfcmV0KTsgYnJlYWs7IFwKK2Nhc2UgNDogX19wdXRfdXNlcl9hc20oeCwsYWRkcixfX3B1X3JldCk7IGJyZWFrOyBcCitjYXNlIDg6IF9fcHV0X3VzZXJfYXNtKHgsZCxhZGRyLF9fcHVfcmV0KTsgYnJlYWs7IFwKK2RlZmF1bHQ6IF9fcHVfcmV0ID0gX19wdXRfdXNlcl9iYWQoKTsgYnJlYWs7IFwKK30gX19wdV9yZXQ7IH0pCisKKyNkZWZpbmUgX19wdXRfdXNlcl9ub2NoZWNrX3JldCh4LGFkZHIsc2l6ZSxyZXR2YWwpICh7IFwKK3JlZ2lzdGVyIGludCBfX2ZvbyBfX2FzbV9fICgibDEiKTsgXAorc3dpdGNoIChzaXplKSB7IFwKK2Nhc2UgMTogX19wdXRfdXNlcl9hc21fcmV0KHgsYixhZGRyLHJldHZhbCxfX2Zvbyk7IGJyZWFrOyBcCitjYXNlIDI6IF9fcHV0X3VzZXJfYXNtX3JldCh4LGgsYWRkcixyZXR2YWwsX19mb28pOyBicmVhazsgXAorY2FzZSA0OiBfX3B1dF91c2VyX2FzbV9yZXQoeCwsYWRkcixyZXR2YWwsX19mb28pOyBicmVhazsgXAorY2FzZSA4OiBfX3B1dF91c2VyX2FzbV9yZXQoeCxkLGFkZHIscmV0dmFsLF9fZm9vKTsgYnJlYWs7IFwKK2RlZmF1bHQ6IGlmIChfX3B1dF91c2VyX2JhZCgpKSByZXR1cm4gcmV0dmFsOyBicmVhazsgXAorfSB9KQorCisjZGVmaW5lIF9fcHV0X3VzZXJfYXNtKHgsc2l6ZSxhZGRyLHJldCkJCQkJCVwKK19fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCQlcCisJIi8qIFB1dCB1c2VyIGFzbSwgaW5saW5lLiAqL1xuIgkJCQkJXAorIjE6XHQiCSJzdCIjc2l6ZSAiICUxLCAlMlxuXHQiCQkJCQkJXAorCSJjbHIJJTBcbiIJCQkJCQkJXAorIjI6XG5cblx0IgkJCQkJCQkJXAorCSIuc2VjdGlvbiAuZml4dXAsI2FsbG9jLCNleGVjaW5zdHJcblx0IgkJCQlcCisJIi5hbGlnbgk0XG4iCQkJCQkJCVwKKyIzOlxuXHQiCQkJCQkJCQlcCisJImIJMmJcblx0IgkJCQkJCQlcCisJIiBtb3YJJTMsICUwXG5cdCIJCQkJCQlcCisgICAgICAgICIucHJldmlvdXNcblxuXHQiCQkJCQkJXAorCSIuc2VjdGlvbiBfX2V4X3RhYmxlLCNhbGxvY1xuXHQiCQkJCVwKKwkiLmFsaWduCTRcblx0IgkJCQkJCQlcCisJIi53b3JkCTFiLCAzYlxuXHQiCQkJCQkJXAorCSIucHJldmlvdXNcblxuXHQiCQkJCQkJXAorICAgICAgIDogIj0mciIgKHJldCkgOiAiciIgKHgpLCAibSIgKCpfX20oYWRkcikpLAkJCVwKKwkgImkiICgtRUZBVUxUKSkKKworI2RlZmluZSBfX3B1dF91c2VyX2FzbV9yZXQoeCxzaXplLGFkZHIscmV0LGZvbykJCQkJXAoraWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKHJldCkgJiYgcmV0ID09IC1FRkFVTFQpCQkJXAorX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJCVwKKwkiLyogUHV0IHVzZXIgYXNtIHJldCwgaW5saW5lLiAqL1xuIgkJCQlcCisiMTpcdCIJInN0IiNzaXplICIgJTEsICUyXG5cblx0IgkJCQkJXAorCSIuc2VjdGlvbiBfX2V4X3RhYmxlLCNhbGxvY1xuXHQiCQkJCVwKKwkiLmFsaWduCTRcblx0IgkJCQkJCQlcCisJIi53b3JkCTFiLCBfX3JldF9lZmF1bHRcblxuXHQiCQkJCQlcCisJIi5wcmV2aW91c1xuXG5cdCIJCQkJCQlcCisgICAgICAgOiAiPXIiIChmb28pIDogInIiICh4KSwgIm0iICgqX19tKGFkZHIpKSk7CQkJXAorZWxzZQkJCQkJCQkJCVwKK19fYXNtX18gX192b2xhdGlsZSgJCQkJCQkJXAorCSIvKiBQdXQgdXNlciBhc20gcmV0LCBpbmxpbmUuICovXG4iCQkJCVwKKyIxOlx0Igkic3QiI3NpemUgIiAlMSwgJTJcblxuXHQiCQkJCQlcCisJIi5zZWN0aW9uIC5maXh1cCwjYWxsb2MsI2V4ZWNpbnN0clxuXHQiCQkJCVwKKwkiLmFsaWduCTRcbiIJCQkJCQkJXAorIjM6XG5cdCIJCQkJCQkJCVwKKwkicmV0XG5cdCIJCQkJCQkJXAorCSIgcmVzdG9yZSAlJWcwLCAlMywgJSVvMFxuXHQiCQkJCQlcCisJIi5wcmV2aW91c1xuXG5cdCIJCQkJCQlcCisJIi5zZWN0aW9uIF9fZXhfdGFibGUsI2FsbG9jXG5cdCIJCQkJXAorCSIuYWxpZ24JNFxuXHQiCQkJCQkJCVwKKwkiLndvcmQJMWIsIDNiXG5cblx0IgkJCQkJCVwKKwkiLnByZXZpb3VzXG5cblx0IgkJCQkJCVwKKyAgICAgICA6ICI9ciIgKGZvbykgOiAiciIgKHgpLCAibSIgKCpfX20oYWRkcikpLCAiaSIgKHJldCkpCisKK2V4dGVybiBpbnQgX19wdXRfdXNlcl9iYWQodm9pZCk7CisKKyNkZWZpbmUgX19nZXRfdXNlcl9jaGVjayh4LGFkZHIsc2l6ZSx0eXBlKSAoeyBcCityZWdpc3RlciBpbnQgX19ndV9yZXQ7IFwKK3JlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19ndV92YWw7IFwKK2lmIChfX2FjY2Vzc19vayhhZGRyLHNpemUpKSB7IFwKK3N3aXRjaCAoc2l6ZSkgeyBcCitjYXNlIDE6IF9fZ2V0X3VzZXJfYXNtKF9fZ3VfdmFsLHViLGFkZHIsX19ndV9yZXQpOyBicmVhazsgXAorY2FzZSAyOiBfX2dldF91c2VyX2FzbShfX2d1X3ZhbCx1aCxhZGRyLF9fZ3VfcmV0KTsgYnJlYWs7IFwKK2Nhc2UgNDogX19nZXRfdXNlcl9hc20oX19ndV92YWwsLGFkZHIsX19ndV9yZXQpOyBicmVhazsgXAorY2FzZSA4OiBfX2dldF91c2VyX2FzbShfX2d1X3ZhbCxkLGFkZHIsX19ndV9yZXQpOyBicmVhazsgXAorZGVmYXVsdDogX19ndV92YWwgPSAwOyBfX2d1X3JldCA9IF9fZ2V0X3VzZXJfYmFkKCk7IGJyZWFrOyBcCit9IH0gZWxzZSB7IF9fZ3VfdmFsID0gMDsgX19ndV9yZXQgPSAtRUZBVUxUOyB9IHggPSAodHlwZSkgX19ndV92YWw7IF9fZ3VfcmV0OyB9KQorCisjZGVmaW5lIF9fZ2V0X3VzZXJfY2hlY2tfcmV0KHgsYWRkcixzaXplLHR5cGUscmV0dmFsKSAoeyBcCityZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fZ3VfdmFsIF9fYXNtX18gKCJsMSIpOyBcCitpZiAoX19hY2Nlc3Nfb2soYWRkcixzaXplKSkgeyBcCitzd2l0Y2ggKHNpemUpIHsgXAorY2FzZSAxOiBfX2dldF91c2VyX2FzbV9yZXQoX19ndV92YWwsdWIsYWRkcixyZXR2YWwpOyBicmVhazsgXAorY2FzZSAyOiBfX2dldF91c2VyX2FzbV9yZXQoX19ndV92YWwsdWgsYWRkcixyZXR2YWwpOyBicmVhazsgXAorY2FzZSA0OiBfX2dldF91c2VyX2FzbV9yZXQoX19ndV92YWwsLGFkZHIscmV0dmFsKTsgYnJlYWs7IFwKK2Nhc2UgODogX19nZXRfdXNlcl9hc21fcmV0KF9fZ3VfdmFsLGQsYWRkcixyZXR2YWwpOyBicmVhazsgXAorZGVmYXVsdDogaWYgKF9fZ2V0X3VzZXJfYmFkKCkpIHJldHVybiByZXR2YWw7IFwKK30geCA9ICh0eXBlKSBfX2d1X3ZhbDsgfSBlbHNlIHJldHVybiByZXR2YWw7IH0pCisKKyNkZWZpbmUgX19nZXRfdXNlcl9ub2NoZWNrKHgsYWRkcixzaXplLHR5cGUpICh7IFwKK3JlZ2lzdGVyIGludCBfX2d1X3JldDsgXAorcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2d1X3ZhbDsgXAorc3dpdGNoIChzaXplKSB7IFwKK2Nhc2UgMTogX19nZXRfdXNlcl9hc20oX19ndV92YWwsdWIsYWRkcixfX2d1X3JldCk7IGJyZWFrOyBcCitjYXNlIDI6IF9fZ2V0X3VzZXJfYXNtKF9fZ3VfdmFsLHVoLGFkZHIsX19ndV9yZXQpOyBicmVhazsgXAorY2FzZSA0OiBfX2dldF91c2VyX2FzbShfX2d1X3ZhbCwsYWRkcixfX2d1X3JldCk7IGJyZWFrOyBcCitjYXNlIDg6IF9fZ2V0X3VzZXJfYXNtKF9fZ3VfdmFsLGQsYWRkcixfX2d1X3JldCk7IGJyZWFrOyBcCitkZWZhdWx0OiBfX2d1X3ZhbCA9IDA7IF9fZ3VfcmV0ID0gX19nZXRfdXNlcl9iYWQoKTsgYnJlYWs7IFwKK30geCA9ICh0eXBlKSBfX2d1X3ZhbDsgX19ndV9yZXQ7IH0pCisKKyNkZWZpbmUgX19nZXRfdXNlcl9ub2NoZWNrX3JldCh4LGFkZHIsc2l6ZSx0eXBlLHJldHZhbCkgKHsgXAorcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2d1X3ZhbCBfX2FzbV9fICgibDEiKTsgXAorc3dpdGNoIChzaXplKSB7IFwKK2Nhc2UgMTogX19nZXRfdXNlcl9hc21fcmV0KF9fZ3VfdmFsLHViLGFkZHIscmV0dmFsKTsgYnJlYWs7IFwKK2Nhc2UgMjogX19nZXRfdXNlcl9hc21fcmV0KF9fZ3VfdmFsLHVoLGFkZHIscmV0dmFsKTsgYnJlYWs7IFwKK2Nhc2UgNDogX19nZXRfdXNlcl9hc21fcmV0KF9fZ3VfdmFsLCxhZGRyLHJldHZhbCk7IGJyZWFrOyBcCitjYXNlIDg6IF9fZ2V0X3VzZXJfYXNtX3JldChfX2d1X3ZhbCxkLGFkZHIscmV0dmFsKTsgYnJlYWs7IFwKK2RlZmF1bHQ6IGlmIChfX2dldF91c2VyX2JhZCgpKSByZXR1cm4gcmV0dmFsOyBcCit9IHggPSAodHlwZSkgX19ndV92YWw7IH0pCisKKyNkZWZpbmUgX19nZXRfdXNlcl9hc20oeCxzaXplLGFkZHIscmV0KQkJCQkJXAorX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJCVwKKwkiLyogR2V0IHVzZXIgYXNtLCBpbmxpbmUuICovXG4iCQkJCQlcCisiMTpcdCIJImxkIiNzaXplICIgJTIsICUxXG5cdCIJCQkJCQlcCisJImNscgklMFxuIgkJCQkJCQlcCisiMjpcblxuXHQiCQkJCQkJCQlcCisJIi5zZWN0aW9uIC5maXh1cCwjYWxsb2MsI2V4ZWNpbnN0clxuXHQiCQkJCVwKKwkiLmFsaWduCTRcbiIJCQkJCQkJXAorIjM6XG5cdCIJCQkJCQkJCVwKKwkiY2xyCSUxXG5cdCIJCQkJCQkJXAorCSJiCTJiXG5cdCIJCQkJCQkJXAorCSIgbW92CSUzLCAlMFxuXG5cdCIJCQkJCQlcCisJIi5wcmV2aW91c1xuXHQiCQkJCQkJCVwKKwkiLnNlY3Rpb24gX19leF90YWJsZSwjYWxsb2Ncblx0IgkJCQlcCisJIi5hbGlnbgk0XG5cdCIJCQkJCQkJXAorCSIud29yZAkxYiwgM2JcblxuXHQiCQkJCQkJXAorCSIucHJldmlvdXNcblx0IgkJCQkJCQlcCisgICAgICAgOiAiPSZyIiAocmV0KSwgIj0mciIgKHgpIDogIm0iICgqX19tKGFkZHIpKSwJCQlcCisJICJpIiAoLUVGQVVMVCkpCisKKyNkZWZpbmUgX19nZXRfdXNlcl9hc21fcmV0KHgsc2l6ZSxhZGRyLHJldHZhbCkJCQkJXAoraWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKHJldHZhbCkgJiYgcmV0dmFsID09IC1FRkFVTFQpCQkJXAorX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJCVwKKwkiLyogR2V0IHVzZXIgYXNtIHJldCwgaW5saW5lLiAqL1xuIgkJCQlcCisiMTpcdCIJImxkIiNzaXplICIgJTEsICUwXG5cblx0IgkJCQkJXAorCSIuc2VjdGlvbiBfX2V4X3RhYmxlLCNhbGxvY1xuXHQiCQkJCVwKKwkiLmFsaWduCTRcblx0IgkJCQkJCQlcCisJIi53b3JkCTFiLF9fcmV0X2VmYXVsdFxuXG5cdCIJCQkJCVwKKwkiLnByZXZpb3VzXG5cdCIJCQkJCQkJXAorICAgICAgIDogIj0mciIgKHgpIDogIm0iICgqX19tKGFkZHIpKSk7CQkJCQlcCitlbHNlCQkJCQkJCQkJXAorX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJCVwKKwkiLyogR2V0IHVzZXIgYXNtIHJldCwgaW5saW5lLiAqL1xuIgkJCQlcCisiMTpcdCIJImxkIiNzaXplICIgJTEsICUwXG5cblx0IgkJCQkJXAorCSIuc2VjdGlvbiAuZml4dXAsI2FsbG9jLCNleGVjaW5zdHJcblx0IgkJCQlcCisJIi5hbGlnbgk0XG4iCQkJCQkJCVwKKyIzOlxuXHQiCQkJCQkJCQlcCisJInJldFxuXHQiCQkJCQkJCVwKKwkiIHJlc3RvcmUgJSVnMCwgJTIsICUlbzBcblxuXHQiCQkJCQlcCisJIi5wcmV2aW91c1xuXHQiCQkJCQkJCVwKKwkiLnNlY3Rpb24gX19leF90YWJsZSwjYWxsb2Ncblx0IgkJCQlcCisJIi5hbGlnbgk0XG5cdCIJCQkJCQkJXAorCSIud29yZAkxYiwgM2JcblxuXHQiCQkJCQkJXAorCSIucHJldmlvdXNcblx0IgkJCQkJCQlcCisgICAgICAgOiAiPSZyIiAoeCkgOiAibSIgKCpfX20oYWRkcikpLCAiaSIgKHJldHZhbCkpCisKK2V4dGVybiBpbnQgX19nZXRfdXNlcl9iYWQodm9pZCk7CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fY29weV91c2VyKHZvaWQgX191c2VyICp0bywgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjb3B5X3RvX3VzZXIodm9pZCBfX3VzZXIgKnRvLCBjb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pCit7CisJaWYgKG4gJiYgX19hY2Nlc3Nfb2soKHVuc2lnbmVkIGxvbmcpIHRvLCBuKSkKKwkJcmV0dXJuIF9fY29weV91c2VyKHRvLCAoX19mb3JjZSB2b2lkIF9fdXNlciAqKSBmcm9tLCBuKTsKKwllbHNlCisJCXJldHVybiBuOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19jb3B5X3RvX3VzZXIodm9pZCBfX3VzZXIgKnRvLCBjb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pCit7CisJcmV0dXJuIF9fY29weV91c2VyKHRvLCAoX19mb3JjZSB2b2lkIF9fdXNlciAqKSBmcm9tLCBuKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGNvcHlfZnJvbV91c2VyKHZvaWQgKnRvLCBjb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKQoreworCWlmIChuICYmIF9fYWNjZXNzX29rKCh1bnNpZ25lZCBsb25nKSBmcm9tLCBuKSkKKwkJcmV0dXJuIF9fY29weV91c2VyKChfX2ZvcmNlIHZvaWQgX191c2VyICopIHRvLCBmcm9tLCBuKTsKKwllbHNlCisJCXJldHVybiBuOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19jb3B5X2Zyb21fdXNlcih2b2lkICp0bywgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGxvbmcgbikKK3sKKwlyZXR1cm4gX19jb3B5X3VzZXIoKF9fZm9yY2Ugdm9pZCBfX3VzZXIgKikgdG8sIGZyb20sIG4pOworfQorCisjZGVmaW5lIF9fY29weV90b191c2VyX2luYXRvbWljIF9fY29weV90b191c2VyCisjZGVmaW5lIF9fY29weV9mcm9tX3VzZXJfaW5hdG9taWMgX19jb3B5X2Zyb21fdXNlcgorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19jbGVhcl91c2VyKHZvaWQgX191c2VyICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJdW5zaWduZWQgbG9uZyByZXQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCSIuc2VjdGlvbiBfX2V4X3RhYmxlLCNhbGxvY1xuXHQiCisJCSIuYWxpZ24gNFxuXHQiCisJCSIud29yZCAxZiwzXG5cdCIKKwkJIi5wcmV2aW91c1xuXHQiCisJCSJtb3YgJTIsICUlbzFcbiIKKwkJIjE6XG5cdCIKKwkJImNhbGwgX19iemVyb1xuXHQiCisJCSIgbW92ICUxLCAlJW8wXG5cdCIKKwkJIm1vdiAlJW8wLCAlMFxuIgorCQk6ICI9ciIgKHJldCkgOiAiciIgKGFkZHIpLCAiciIgKHNpemUpIDoKKwkJIm8wIiwgIm8xIiwgIm8yIiwgIm8zIiwgIm80IiwgIm81IiwgIm83IiwKKwkJImcxIiwgImcyIiwgImczIiwgImc0IiwgImc1IiwgImc3IiwgImNjIik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY2xlYXJfdXNlcih2b2lkIF9fdXNlciAqYWRkciwgdW5zaWduZWQgbG9uZyBuKQoreworCWlmIChuICYmIF9fYWNjZXNzX29rKCh1bnNpZ25lZCBsb25nKSBhZGRyLCBuKSkKKwkJcmV0dXJuIF9fY2xlYXJfdXNlcihhZGRyLCBuKTsKKwllbHNlCisJCXJldHVybiBuOworfQorCitleHRlcm4gbG9uZyBfX3N0cm5jcHlfZnJvbV91c2VyKGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgX191c2VyICpzcmMsIGxvbmcgY291bnQpOworCitzdGF0aWMgaW5saW5lIGxvbmcgc3RybmNweV9mcm9tX3VzZXIoY2hhciAqZGVzdCwgY29uc3QgY2hhciBfX3VzZXIgKnNyYywgbG9uZyBjb3VudCkKK3sKKwlpZiAoX19hY2Nlc3Nfb2soKHVuc2lnbmVkIGxvbmcpIHNyYywgY291bnQpKQorCQlyZXR1cm4gX19zdHJuY3B5X2Zyb21fdXNlcihkZXN0LCBzcmMsIGNvdW50KTsKKwllbHNlCisJCXJldHVybiAtRUZBVUxUOworfQorCitleHRlcm4gbG9uZyBfX3N0cmxlbl91c2VyKGNvbnN0IGNoYXIgX191c2VyICopOworZXh0ZXJuIGxvbmcgX19zdHJubGVuX3VzZXIoY29uc3QgY2hhciBfX3VzZXIgKiwgbG9uZyBsZW4pOworCitzdGF0aWMgaW5saW5lIGxvbmcgc3RybGVuX3VzZXIoY29uc3QgY2hhciBfX3VzZXIgKnN0cikKK3sKKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgc3RyLCAwKSkKKwkJcmV0dXJuIDA7CisJZWxzZQorCQlyZXR1cm4gX19zdHJsZW5fdXNlcihzdHIpOworfQorCitzdGF0aWMgaW5saW5lIGxvbmcgc3Rybmxlbl91c2VyKGNvbnN0IGNoYXIgX191c2VyICpzdHIsIGxvbmcgbGVuKQoreworCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBzdHIsIDApKQorCQlyZXR1cm4gMDsKKwllbHNlCisJCXJldHVybiBfX3N0cm5sZW5fdXNlcihzdHIsIGxlbik7Cit9CisKKyNlbmRpZiAgLyogX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiBfQVNNX1VBQ0NFU1NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvdW5hbGlnbmVkLmggYi9pbmNsdWRlL2FzbS1zcGFyYy91bmFsaWduZWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmY4ZWRkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvdW5hbGlnbmVkLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9BU01fU1BBUkNfVU5BTElHTkVEX0hfCisjZGVmaW5lIF9BU01fU1BBUkNfVU5BTElHTkVEX0hfCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy91bmFsaWduZWQuaD4KKworI2VuZGlmIC8qIF9BU01fU1BBUkNfVU5BTElHTkVEX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvdW5pc3RkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFmNjNjYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3VuaXN0ZC5oCkBAIC0wLDAgKzEsNTE4IEBACisvKiAkSWQ6IHVuaXN0ZC5oLHYgMS43NCAyMDAyLzAyLzA4IDAzOjU3OjE4IGRhdmVtIEV4cCAkICovCisjaWZuZGVmIF9TUEFSQ19VTklTVERfSAorI2RlZmluZSBfU1BBUkNfVU5JU1REX0gKKworLyoKKyAqIFN5c3RlbSBjYWxscyB1bmRlciB0aGUgU3BhcmMuCisgKgorICogRG9uJ3QgYmUgc2NhcmVkIGJ5IHRoZSB1Z2x5IGNsb2JiZXJzLCBpdCBpcyB0aGUgb25seSB3YXkgSSBjYW4KKyAqIHRoaW5rIG9mIHJpZ2h0IG5vdyB0byBmb3JjZSB0aGUgYXJndW1lbnRzIGludG8gZml4ZWQgcmVnaXN0ZXJzCisgKiBiZWZvcmUgdGhlIHRyYXAgaW50byB0aGUgc3lzdGVtIGNhbGwgd2l0aCBnY2MgJ2FzbScgc3RhdGVtZW50cy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQorICoKKyAqIFN1bk9TIGNvbXBhdGliaWxpdHkgYmFzZWQgdXBvbiBwcmVsaW1pbmFyeSB3b3JrIHdoaWNoIGlzOgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NSBBZHJpYW4gTS4gUm9kcmlndWV6IChhZHJpYW5AcmVtdXMucnV0Z2Vycy5lZHUpCisgKi8KKworI2RlZmluZSBfX05SX3Jlc3RhcnRfc3lzY2FsbCAgICAgIDAgLyogTGludXggU3BlY2lmaWMJCQkJICAgKi8KKyNkZWZpbmUgX19OUl9leGl0ICAgICAgICAgICAgICAgICAxIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9mb3JrICAgICAgICAgICAgICAgICAyIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9yZWFkICAgICAgICAgICAgICAgICAzIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl93cml0ZSAgICAgICAgICAgICAgICA0IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9vcGVuICAgICAgICAgICAgICAgICA1IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9jbG9zZSAgICAgICAgICAgICAgICA2IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl93YWl0NCAgICAgICAgICAgICAgICA3IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9jcmVhdCAgICAgICAgICAgICAgICA4IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9saW5rICAgICAgICAgICAgICAgICA5IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl91bmxpbmsgICAgICAgICAgICAgIDEwIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9leGVjdiAgICAgICAgICAgICAgIDExIC8qIFN1bk9TIFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9jaGRpciAgICAgICAgICAgICAgIDEyIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9jaG93bgkJIDEzIC8qIENvbW1vbgkJCQkJICAgKi8KKyNkZWZpbmUgX19OUl9ta25vZCAgICAgICAgICAgICAgIDE0IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9jaG1vZCAgICAgICAgICAgICAgIDE1IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9sY2hvd24gICAgICAgICAgICAgIDE2IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9icmsgICAgICAgICAgICAgICAgIDE3IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9wZXJmY3RyICAgICAgICAgICAgIDE4IC8qIFBlcmZvcm1hbmNlIGNvdW50ZXIgb3BlcmF0aW9ucyAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9sc2VlayAgICAgICAgICAgICAgIDE5IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9nZXRwaWQgICAgICAgICAgICAgIDIwIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9jYXBnZXQJCSAyMSAvKiBMaW51eCBTcGVjaWZpYwkJCQkgICAqLworI2RlZmluZSBfX05SX2NhcHNldAkJIDIyIC8qIExpbnV4IFNwZWNpZmljCQkJCSAgICovCisjZGVmaW5lIF9fTlJfc2V0dWlkICAgICAgICAgICAgICAyMyAvKiBJbXBsZW1lbnRlZCB2aWEgc2V0cmV1aWQgaW4gU3VuT1MgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZ2V0dWlkICAgICAgICAgICAgICAyNCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAjZGVmaW5lIF9fTlJfdGltZSBhbGlhcwkgMjUgICAgRU5PU1lTIHVuZGVyIFN1bk9TCQkJICAgKi8KKyNkZWZpbmUgX19OUl9wdHJhY2UgICAgICAgICAgICAgIDI2IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9hbGFybSAgICAgICAgICAgICAgIDI3IC8qIEltcGxlbWVudGVkIHZpYSBzZXRpdGltZXIgaW4gU3VuT1MgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9zaWdhbHRzdGFjawkgMjggLyogQ29tbW9uCQkJCQkgICAqLworI2RlZmluZSBfX05SX3BhdXNlICAgICAgICAgICAgICAgMjkgLyogSXMgc2lnYmxvY2soMCktPnNpZ3BhdXNlKCkgaW4gU3VuT1MgICAgICAgICAqLworI2RlZmluZSBfX05SX3V0aW1lICAgICAgICAgICAgICAgMzAgLyogSW1wbGVtZW50ZWQgdmlhIHV0aW1lcygpIHVuZGVyIFN1bk9TICAgICAgICAqLworI2RlZmluZSBfX05SX2xjaG93bjMyICAgICAgICAgICAgMzEgLyogTGludXggc3BhcmMzMiBzcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2ZjaG93bjMyICAgICAgICAgICAgMzIgLyogTGludXggc3BhcmMzMiBzcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2FjY2VzcyAgICAgICAgICAgICAgMzMgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX25pY2UgICAgICAgICAgICAgICAgMzQgLyogSW1wbGVtZW50ZWQgdmlhIGdldC9zZXRwcmlvcml0eSgpIGluIFN1bk9TICAqLworI2RlZmluZSBfX05SX2Nob3duMzIgICAgICAgICAgICAgMzUgLyogTGludXggc3BhcmMzMiBzcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3N5bmMgICAgICAgICAgICAgICAgMzYgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2tpbGwgICAgICAgICAgICAgICAgMzcgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3N0YXQgICAgICAgICAgICAgICAgMzggLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3NlbmRmaWxlCQkgMzkgLyogTGludXggU3BlY2lmaWMJCQkJICAgKi8KKyNkZWZpbmUgX19OUl9sc3RhdCAgICAgICAgICAgICAgIDQwIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9kdXAgICAgICAgICAgICAgICAgIDQxIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9waXBlICAgICAgICAgICAgICAgIDQyIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl90aW1lcyAgICAgICAgICAgICAgIDQzIC8qIEltcGxlbWVudGVkIHZpYSBnZXRydXNhZ2UoKSBpbiBTdW5PUyAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9nZXR1aWQzMiAgICAgICAgICAgIDQ0IC8qIExpbnV4IHNwYXJjMzIgc3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl91bW91bnQyICAgICAgICAgICAgIDQ1IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9zZXRnaWQgICAgICAgICAgICAgIDQ2IC8qIEltcGxlbWVudGVkIHZpYSBzZXRyZWdpZCgpIGluIFN1bk9TICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9nZXRnaWQgICAgICAgICAgICAgIDQ3IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9zaWduYWwgICAgICAgICAgICAgIDQ4IC8qIEltcGxlbWVudGVkIHZpYSBzaWd2ZWMoKSBpbiBTdW5PUyAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9nZXRldWlkICAgICAgICAgICAgIDQ5IC8qIFN1bk9TIGNhbGxzIGdldHVpZCgpICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9nZXRlZ2lkICAgICAgICAgICAgIDUwIC8qIFN1bk9TIGNhbGxzIGdldGdpZCgpICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9hY2N0ICAgICAgICAgICAgICAgIDUxIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICNkZWZpbmUgX19OUl9tZW1vcnlfb3JkZXJpbmcgIDUyICAgIExpbnV4IHNwYXJjNjQgc3BlY2lmaWMJCQkgICAqLworI2RlZmluZSBfX05SX2dldGdpZDMyICAgICAgICAgICAgNTMgLyogTGludXggc3BhcmMzMiBzcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2lvY3RsICAgICAgICAgICAgICAgNTQgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3JlYm9vdCAgICAgICAgICAgICAgNTUgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX21tYXAyCQkgNTYgLyogTGludXggc3BhcmMzMiBTcGVjaWZpYwkJCSAgICovCisjZGVmaW5lIF9fTlJfc3ltbGluayAgICAgICAgICAgICA1NyAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfcmVhZGxpbmsgICAgICAgICAgICA1OCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZXhlY3ZlICAgICAgICAgICAgICA1OSAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfdW1hc2sgICAgICAgICAgICAgICA2MCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfY2hyb290ICAgICAgICAgICAgICA2MSAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZnN0YXQgICAgICAgICAgICAgICA2MiAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZnN0YXQ2NAkJIDYzIC8qIExpbnV4IHNwYXJjMzIgU3BlY2lmaWMJCQkgICAqLworI2RlZmluZSBfX05SX2dldHBhZ2VzaXplICAgICAgICAgNjQgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX21zeW5jICAgICAgICAgICAgICAgNjUgLyogQ29tbW9uIGluIG5ld2VyIDEuMy54IHJldnMuLi4gICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3Zmb3JrICAgICAgICAgICAgICAgNjYgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3ByZWFkNjQgICAgICAgICAgICAgNjcgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3B3cml0ZTY0ICAgICAgICAgICAgNjggLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2dldGV1aWQzMiAgICAgICAgICAgNjkgLyogTGludXggc3BhcmMzMiwgc2JyayB1bmRlciBTdW5PUyAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2dldGVnaWQzMiAgICAgICAgICAgNzAgLyogTGludXggc3BhcmMzMiwgc3N0ayB1bmRlciBTdW5PUyAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX21tYXAgICAgICAgICAgICAgICAgNzEgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3NldHJldWlkMzIgICAgICAgICAgNzIgLyogTGludXggc3BhcmMzMiwgdmFkdmlzZSB1bmRlciBTdW5PUyAgICAgICAgICAqLworI2RlZmluZSBfX05SX211bm1hcCAgICAgICAgICAgICAgNzMgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX21wcm90ZWN0ICAgICAgICAgICAgNzQgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX21hZHZpc2UgICAgICAgICAgICAgNzUgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3ZoYW5ndXAgICAgICAgICAgICAgNzYgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3RydW5jYXRlNjQJCSA3NyAvKiBMaW51eCBzcGFyYzMyIFNwZWNpZmljCQkJICAgKi8KKyNkZWZpbmUgX19OUl9taW5jb3JlICAgICAgICAgICAgIDc4IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9nZXRncm91cHMgICAgICAgICAgIDc5IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9zZXRncm91cHMgICAgICAgICAgIDgwIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9nZXRwZ3JwICAgICAgICAgICAgIDgxIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9zZXRncm91cHMzMiAgICAgICAgIDgyIC8qIExpbnV4IHNwYXJjMzIsIHNldHBncnAgdW5kZXIgU3VuT1MgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9zZXRpdGltZXIgICAgICAgICAgIDgzIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9mdHJ1bmNhdGU2NAkgODQgLyogTGludXggc3BhcmMzMiBTcGVjaWZpYwkJCSAgICovCisjZGVmaW5lIF9fTlJfc3dhcG9uICAgICAgICAgICAgICA4NSAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZ2V0aXRpbWVyICAgICAgICAgICA4NiAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc2V0dWlkMzIgICAgICAgICAgICA4NyAvKiBMaW51eCBzcGFyYzMyLCBnZXRob3N0bmFtZSB1bmRlciBTdW5PUyAgICAgICovCisjZGVmaW5lIF9fTlJfc2V0aG9zdG5hbWUgICAgICAgICA4OCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc2V0Z2lkMzIgICAgICAgICAgICA4OSAvKiBMaW51eCBzcGFyYzMyLCBnZXRkdGFibGVzaXplIHVuZGVyIFN1bk9TICAgICovCisjZGVmaW5lIF9fTlJfZHVwMiAgICAgICAgICAgICAgICA5MCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc2V0ZnN1aWQzMiAgICAgICAgICA5MSAvKiBMaW51eCBzcGFyYzMyLCBnZXRkb3B0IHVuZGVyIFN1bk9TICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZmNudGwgICAgICAgICAgICAgICA5MiAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc2VsZWN0ICAgICAgICAgICAgICA5MyAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc2V0ZnNnaWQzMiAgICAgICAgICA5NCAvKiBMaW51eCBzcGFyYzMyLCBzZXRkb3B0IHVuZGVyIFN1bk9TICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZnN5bmMgICAgICAgICAgICAgICA5NSAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc2V0cHJpb3JpdHkgICAgICAgICA5NiAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc29ja2V0ICAgICAgICAgICAgICA5NyAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfY29ubmVjdCAgICAgICAgICAgICA5OCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfYWNjZXB0ICAgICAgICAgICAgICA5OSAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZ2V0cHJpb3JpdHkgICAgICAgIDEwMCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfcnRfc2lncmV0dXJuICAgICAgIDEwMSAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfcnRfc2lnYWN0aW9uICAgICAgIDEwMiAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfcnRfc2lncHJvY21hc2sgICAgIDEwMyAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfcnRfc2lncGVuZGluZyAgICAgIDEwNCAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfcnRfc2lndGltZWR3YWl0ICAgIDEwNSAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfcnRfc2lncXVldWVpbmZvICAgIDEwNiAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfcnRfc2lnc3VzcGVuZCAgICAgIDEwNyAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc2V0cmVzdWlkMzIgICAgICAgIDEwOCAvKiBMaW51eCBTcGVjaWZpYywgc2lndmVjIHVuZGVyIFN1bk9TCSAgICovCisjZGVmaW5lIF9fTlJfZ2V0cmVzdWlkMzIgICAgICAgIDEwOSAvKiBMaW51eCBTcGVjaWZpYywgc2lnYmxvY2sgdW5kZXIgU3VuT1MJICAgKi8KKyNkZWZpbmUgX19OUl9zZXRyZXNnaWQzMiAgICAgICAgMTEwIC8qIExpbnV4IFNwZWNpZmljLCBzaWdzZXRtYXNrIHVuZGVyIFN1bk9TCSAgICovCisjZGVmaW5lIF9fTlJfZ2V0cmVzZ2lkMzIgICAgICAgIDExMSAvKiBMaW51eCBTcGVjaWZpYywgc2lncGF1c2UgdW5kZXIgU3VuT1MJICAgKi8KKyNkZWZpbmUgX19OUl9zZXRyZWdpZDMyICAgICAgICAgMTEyIC8qIExpbnV4IHNwYXJjMzIsIHNpZ3N0YWNrIHVuZGVyIFN1bk9TICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9yZWN2bXNnICAgICAgICAgICAgMTEzIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9zZW5kbXNnICAgICAgICAgICAgMTE0IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9nZXRncm91cHMzMiAgICAgICAgMTE1IC8qIExpbnV4IHNwYXJjMzIsIHZ0cmFjZSB1bmRlciBTdW5PUyAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9nZXR0aW1lb2ZkYXkgICAgICAgMTE2IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9nZXRydXNhZ2UgICAgICAgICAgMTE3IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9nZXRzb2Nrb3B0ICAgICAgICAgMTE4IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9nZXRjd2QJCTExOSAvKiBMaW51eCBTcGVjaWZpYwkJCQkgICAqLworI2RlZmluZSBfX05SX3JlYWR2ICAgICAgICAgICAgICAxMjAgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3dyaXRldiAgICAgICAgICAgICAxMjEgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3NldHRpbWVvZmRheSAgICAgICAxMjIgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2ZjaG93biAgICAgICAgICAgICAxMjMgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2ZjaG1vZCAgICAgICAgICAgICAxMjQgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3JlY3Zmcm9tICAgICAgICAgICAxMjUgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3NldHJldWlkICAgICAgICAgICAxMjYgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3NldHJlZ2lkICAgICAgICAgICAxMjcgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3JlbmFtZSAgICAgICAgICAgICAxMjggLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3RydW5jYXRlICAgICAgICAgICAxMjkgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2Z0cnVuY2F0ZSAgICAgICAgICAxMzAgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2Zsb2NrICAgICAgICAgICAgICAxMzEgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2xzdGF0NjQJCTEzMiAvKiBMaW51eCBzcGFyYzMyIFNwZWNpZmljCQkJICAgKi8KKyNkZWZpbmUgX19OUl9zZW5kdG8gICAgICAgICAgICAgMTMzIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9zaHV0ZG93biAgICAgICAgICAgMTM0IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9zb2NrZXRwYWlyICAgICAgICAgMTM1IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9ta2RpciAgICAgICAgICAgICAgMTM2IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9ybWRpciAgICAgICAgICAgICAgMTM3IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl91dGltZXMgICAgICAgICAgICAgMTM4IC8qIFN1bk9TIFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9zdGF0NjQJCTEzOSAvKiBMaW51eCBzcGFyYzMyIFNwZWNpZmljCQkJICAgKi8KKyNkZWZpbmUgX19OUl9zZW5kZmlsZTY0ICAgICAgICAgMTQwIC8qIGFkanRpbWUgdW5kZXIgU3VuT1MgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9nZXRwZWVybmFtZSAgICAgICAgMTQxIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9mdXRleCAgICAgICAgICAgICAgMTQyIC8qIGdldGhvc3RpZCB1bmRlciBTdW5PUyAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9nZXR0aWQgICAgICAgICAgICAgMTQzIC8qIEVOT1NZUyB1bmRlciBTdW5PUyAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9nZXRybGltaXQgICAgICAgICAgMTQ0IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9zZXRybGltaXQgICAgICAgICAgMTQ1IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9waXZvdF9yb290CQkxNDYgLyogTGludXggU3BlY2lmaWMsIGtpbGxwZyB1bmRlciBTdW5PUyAgICAgICAgICAqLworI2RlZmluZSBfX05SX3ByY3RsCQkxNDcgLyogRU5PU1lTIHVuZGVyIFN1bk9TICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3BjaWNvbmZpZ19yZWFkCTE0OCAvKiBFTk9TWVMgdW5kZXIgU3VuT1MgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfcGNpY29uZmlnX3dyaXRlCTE0OSAvKiBFTk9TWVMgdW5kZXIgU3VuT1MgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZ2V0c29ja25hbWUgICAgICAgIDE1MCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAjZGVmaW5lIF9fTlJfZ2V0bXNnICAgICAgICAgIDE1MSAgICBTdW5PUyBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAjZGVmaW5lIF9fTlJfcHV0bXNnICAgICAgICAgIDE1MiAgICBTdW5PUyBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfcG9sbCAgICAgICAgICAgICAgIDE1MyAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZ2V0ZGVudHM2NAkJMTU0IC8qIExpbnV4IHNwZWNpZmljCQkJCSAgICovCisjZGVmaW5lIF9fTlJfZmNudGw2NAkJMTU1IC8qIExpbnV4IHNwYXJjMzIgU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICNkZWZpbmUgX19OUl9nZXRkaXJlbnRpcmVzIAkxNTYgICAgU3VuT1MgU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3N0YXRmcyAgICAgICAgICAgICAxNTcgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2ZzdGF0ZnMgICAgICAgICAgICAxNTggLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3Vtb3VudCAgICAgICAgICAgICAxNTkgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3NjaGVkX3NldF9hZmZpbml0eSAxNjAgLyogTGludXggc3BlY2lmaWMsIGFzeW5jX2RhZW1vbiB1bmRlciBTdW5PUyAgICAqLworI2RlZmluZSBfX05SX3NjaGVkX2dldF9hZmZpbml0eSAxNjEgLyogTGludXggc3BlY2lmaWMsIGdldGZoIHVuZGVyIFN1bk9TICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2dldGRvbWFpbm5hbWUgICAgICAxNjIgLyogU3VuT1MgU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3NldGRvbWFpbm5hbWUgICAgICAxNjMgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogI2RlZmluZSBfX05SX25pX3N5c2NhbGwJMTY0ICAgIEVOT1NZUyB1bmRlciBTdW5PUwkJCSAgICovCisjZGVmaW5lIF9fTlJfcXVvdGFjdGwgICAgICAgICAgIDE2NSAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc2V0X3RpZF9hZGRyZXNzICAgIDE2NiAvKiBMaW51eCBzcGVjaWZpYywgZXhwb3J0ZnMgdW5kZXIgU3VuT1MgICAgICAgICovCisjZGVmaW5lIF9fTlJfbW91bnQgICAgICAgICAgICAgIDE2NyAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfdXN0YXQgICAgICAgICAgICAgIDE2OCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc2V0eGF0dHIgICAgICAgICAgIDE2OSAvKiBTdW5PUzogc2Vtc3lzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfbHNldHhhdHRyICAgICAgICAgIDE3MCAvKiBTdW5PUzogbXNnc3lzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZnNldHhhdHRyICAgICAgICAgIDE3MSAvKiBTdW5PUzogc2htc3lzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZ2V0eGF0dHIgICAgICAgICAgIDE3MiAvKiBTdW5PUzogYXVkaXRzeXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfbGdldHhhdHRyICAgICAgICAgIDE3MyAvKiBTdW5PUzogcmZzc3lzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZ2V0ZGVudHMgICAgICAgICAgIDE3NCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc2V0c2lkICAgICAgICAgICAgIDE3NSAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZmNoZGlyICAgICAgICAgICAgIDE3NiAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZmdldHhhdHRyICAgICAgICAgIDE3NyAvKiBTdW5PUzogZmNocm9vdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfbGlzdHhhdHRyICAgICAgICAgIDE3OCAvKiBTdW5PUzogdnBpeHN5cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfbGxpc3R4YXR0ciAgICAgICAgIDE3OSAvKiBTdW5PUzogYWlvcmVhZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZmxpc3R4YXR0ciAgICAgICAgIDE4MCAvKiBTdW5PUzogYWlvd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfcmVtb3ZleGF0dHIgICAgICAgIDE4MSAvKiBTdW5PUzogYWlvd2FpdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfbHJlbW92ZXhhdHRyICAgICAgIDE4MiAvKiBTdW5PUzogYWlvY2FuY2VsICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc2lncGVuZGluZyAgICAgICAgIDE4MyAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfcXVlcnlfbW9kdWxlCTE4NCAvKiBMaW51eCBTcGVjaWZpYwkJCQkgICAqLworI2RlZmluZSBfX05SX3NldHBnaWQgICAgICAgICAgICAxODUgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2ZyZW1vdmV4YXR0ciAgICAgICAxODYgLyogU3VuT1M6IHBhdGhjb25mICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3RraWxsICAgICAgICAgICAgICAxODcgLyogU3VuT1M6IGZwYXRoY29uZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2V4aXRfZ3JvdXAJCTE4OCAvKiBMaW51eCBzcGVjaWZpYywgc3lzY29uZiB1bmRlZiBTdW5PUyAgICAgICAgICovCisjZGVmaW5lIF9fTlJfdW5hbWUgICAgICAgICAgICAgIDE4OSAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfaW5pdF9tb2R1bGUgICAgICAgIDE5MCAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfcGVyc29uYWxpdHkgICAgICAgIDE5MSAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfcmVtYXBfZmlsZV9wYWdlcyAgIDE5MiAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZXBvbGxfY3JlYXRlICAgICAgIDE5MyAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZXBvbGxfY3RsICAgICAgICAgIDE5NCAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZXBvbGxfd2FpdCAgICAgICAgIDE5NSAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAjZGVmaW5lIF9fTlJfdWxpbWl0ICAgICAgICAgIDE5NiAgICBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZ2V0cHBpZCAgICAgICAgICAgIDE5NyAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc2lnYWN0aW9uICAgICAgICAgIDE5OCAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc2dldG1hc2sgICAgICAgICAgIDE5OSAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc3NldG1hc2sgICAgICAgICAgIDIwMCAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc2lnc3VzcGVuZCAgICAgICAgIDIwMSAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfb2xkbHN0YXQgICAgICAgICAgIDIwMiAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfdXNlbGliICAgICAgICAgICAgIDIwMyAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfcmVhZGRpciAgICAgICAgICAgIDIwNCAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfcmVhZGFoZWFkICAgICAgICAgIDIwNSAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc29ja2V0Y2FsbCAgICAgICAgIDIwNiAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc3lzbG9nICAgICAgICAgICAgIDIwNyAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfbG9va3VwX2Rjb29raWUgICAgIDIwOCAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZmFkdmlzZTY0ICAgICAgICAgIDIwOSAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZmFkdmlzZTY0XzY0ICAgICAgIDIxMCAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfdGdraWxsICAgICAgICAgICAgIDIxMSAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfd2FpdHBpZCAgICAgICAgICAgIDIxMiAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc3dhcG9mZiAgICAgICAgICAgIDIxMyAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc3lzaW5mbyAgICAgICAgICAgIDIxNCAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfaXBjICAgICAgICAgICAgICAgIDIxNSAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc2lncmV0dXJuICAgICAgICAgIDIxNiAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfY2xvbmUgICAgICAgICAgICAgIDIxNyAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAjZGVmaW5lIF9fTlJfbW9kaWZ5X2xkdCAgICAgIDIxOCAgICBMaW51eCBTcGVjaWZpYyAtIGkzODYgc3BlY2lmaWMsIHVudXNlZCAgICAgICovCisjZGVmaW5lIF9fTlJfYWRqdGltZXggICAgICAgICAgIDIxOSAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc2lncHJvY21hc2sgICAgICAgIDIyMCAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfY3JlYXRlX21vZHVsZSAgICAgIDIyMSAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZGVsZXRlX21vZHVsZSAgICAgIDIyMiAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZ2V0X2tlcm5lbF9zeW1zICAgIDIyMyAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZ2V0cGdpZCAgICAgICAgICAgIDIyNCAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfYmRmbHVzaCAgICAgICAgICAgIDIyNSAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc3lzZnMgICAgICAgICAgICAgIDIyNiAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfYWZzX3N5c2NhbGwgICAgICAgIDIyNyAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc2V0ZnN1aWQgICAgICAgICAgIDIyOCAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc2V0ZnNnaWQgICAgICAgICAgIDIyOSAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfX25ld3NlbGVjdCAgICAgICAgIDIzMCAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfdGltZSAgICAgICAgICAgICAgIDIzMSAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAjZGVmaW5lIF9fTlJfb2xkc3RhdCAgICAgICAgIDIzMiAgICBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc3RpbWUgICAgICAgICAgICAgIDIzMyAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc3RhdGZzNjQgICAgICAgICAgIDIzNCAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZnN0YXRmczY0ICAgICAgICAgIDIzNSAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfX2xsc2VlayAgICAgICAgICAgIDIzNiAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfbWxvY2sgICAgICAgICAgICAgIDIzNworI2RlZmluZSBfX05SX211bmxvY2sgICAgICAgICAgICAyMzgKKyNkZWZpbmUgX19OUl9tbG9ja2FsbCAgICAgICAgICAgMjM5CisjZGVmaW5lIF9fTlJfbXVubG9ja2FsbCAgICAgICAgIDI0MAorI2RlZmluZSBfX05SX3NjaGVkX3NldHBhcmFtICAgICAyNDEKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRwYXJhbSAgICAgMjQyCisjZGVmaW5lIF9fTlJfc2NoZWRfc2V0c2NoZWR1bGVyIDI0MworI2RlZmluZSBfX05SX3NjaGVkX2dldHNjaGVkdWxlciAyNDQKKyNkZWZpbmUgX19OUl9zY2hlZF95aWVsZCAgICAgICAgMjQ1CisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21heCAyNDYKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWluIDI0NworI2RlZmluZSBfX05SX3NjaGVkX3JyX2dldF9pbnRlcnZhbCAgMjQ4CisjZGVmaW5lIF9fTlJfbmFub3NsZWVwICAgICAgICAgIDI0OQorI2RlZmluZSBfX05SX21yZW1hcCAgICAgICAgICAgICAyNTAKKyNkZWZpbmUgX19OUl9fc3lzY3RsICAgICAgICAgICAgMjUxCisjZGVmaW5lIF9fTlJfZ2V0c2lkICAgICAgICAgICAgIDI1MgorI2RlZmluZSBfX05SX2ZkYXRhc3luYyAgICAgICAgICAyNTMKKyNkZWZpbmUgX19OUl9uZnNzZXJ2Y3RsICAgICAgICAgMjU0CisjZGVmaW5lIF9fTlJfYXBsaWIgICAgICAgICAgICAgIDI1NQorI2RlZmluZSBfX05SX2Nsb2NrX3NldHRpbWUJMjU2CisjZGVmaW5lIF9fTlJfY2xvY2tfZ2V0dGltZQkyNTcKKyNkZWZpbmUgX19OUl9jbG9ja19nZXRyZXMJMjU4CisjZGVmaW5lIF9fTlJfY2xvY2tfbmFub3NsZWVwCTI1OQorI2RlZmluZSBfX05SX3NjaGVkX2dldGFmZmluaXR5CTI2MAorI2RlZmluZSBfX05SX3NjaGVkX3NldGFmZmluaXR5CTI2MQorI2RlZmluZSBfX05SX3RpbWVyX3NldHRpbWUJMjYyCisjZGVmaW5lIF9fTlJfdGltZXJfZ2V0dGltZQkyNjMKKyNkZWZpbmUgX19OUl90aW1lcl9nZXRvdmVycnVuCTI2NAorI2RlZmluZSBfX05SX3RpbWVyX2RlbGV0ZQkyNjUKKyNkZWZpbmUgX19OUl90aW1lcl9jcmVhdGUJMjY2CisvKiAjZGVmaW5lIF9fTlJfdnNlcnZlcgkJMjY3IFJlc2VydmVkIGZvciBWU0VSVkVSICovCisjZGVmaW5lIF9fTlJfaW9fc2V0dXAJCTI2OAorI2RlZmluZSBfX05SX2lvX2Rlc3Ryb3kJCTI2OQorI2RlZmluZSBfX05SX2lvX3N1Ym1pdAkJMjcwCisjZGVmaW5lIF9fTlJfaW9fY2FuY2VsCQkyNzEKKyNkZWZpbmUgX19OUl9pb19nZXRldmVudHMJMjcyCisjZGVmaW5lIF9fTlJfbXFfb3BlbgkJMjczCisjZGVmaW5lIF9fTlJfbXFfdW5saW5rCQkyNzQKKyNkZWZpbmUgX19OUl9tcV90aW1lZHNlbmQJMjc1CisjZGVmaW5lIF9fTlJfbXFfdGltZWRyZWNlaXZlCTI3NgorI2RlZmluZSBfX05SX21xX25vdGlmeQkJMjc3CisjZGVmaW5lIF9fTlJfbXFfZ2V0c2V0YXR0cgkyNzgKKyNkZWZpbmUgX19OUl93YWl0aWQJCTI3OQorI2RlZmluZSBfX05SX3N5c19zZXRhbHRyb290CTI4MAorI2RlZmluZSBfX05SX2FkZF9rZXkJCTI4MQorI2RlZmluZSBfX05SX3JlcXVlc3Rfa2V5CTI4MgorI2RlZmluZSBfX05SX2tleWN0bAkJMjgzCisKKy8qIFdBUk5JTkc6IFlvdSBNQVkgTk9UIGFkZCBzeXNjYWxsIG51bWJlcnMgbGFyZ2VyIHRoYW4gMjgzLCBzaW5jZQorICogICAgICAgICAgYWxsIG9mIHRoZSBzeXNjYWxsIHRhYmxlcyBpbiB0aGUgU3BhcmMga2VybmVsIGFyZQorICogICAgICAgICAgc2l6ZWQgdG8gaGF2ZSAyODMgZW50cmllcyAoc3RhcnRpbmcgYXQgemVybykuICBUaGVyZWZvcmUKKyAqICAgICAgICAgIGZpbmQgYSBmcmVlIHNsb3QgaW4gdGhlIDAtMjgyIHJhbmdlLgorICovCisKKyNkZWZpbmUgX3N5c2NhbGwwKHR5cGUsbmFtZSkgXAordHlwZSBuYW1lKHZvaWQpIFwKK3sgXAorbG9uZyBfX3JlczsgXAorcmVnaXN0ZXIgbG9uZyBfX2cxIF9fYXNtX18gKCJnMSIpID0gX19OUl8jI25hbWU7IFwKK19fYXNtX18gX192b2xhdGlsZV9fICgidCAweDEwXG5cdCIgXAorCQkgICAgICAiYmNjIDFmXG5cdCIgXAorCQkgICAgICAibW92ICUlbzAsICUwXG5cdCIgXAorCQkgICAgICAic3ViICUlZzAsICUlbzAsICUwXG5cdCIgXAorCQkgICAgICAiMTpcblx0IiBcCisJCSAgICAgIDogIj1yIiAoX19yZXMpXAorCQkgICAgICA6ICJyIiAoX19nMSkgXAorCQkgICAgICA6ICJvMCIsICJjYyIpOyBcCitpZiAoX19yZXMgPCAtMjU1IHx8IF9fcmVzID49IDApIFwKKyAgICByZXR1cm4gKHR5cGUpIF9fcmVzOyBcCitlcnJubyA9IC1fX3JlczsgXAorcmV0dXJuIC0xOyBcCit9CisKKyNkZWZpbmUgX3N5c2NhbGwxKHR5cGUsbmFtZSx0eXBlMSxhcmcxKSBcCit0eXBlIG5hbWUodHlwZTEgYXJnMSkgXAoreyBcCitsb25nIF9fcmVzOyBcCityZWdpc3RlciBsb25nIF9fZzEgX19hc21fXyAoImcxIikgPSBfX05SXyMjbmFtZTsgXAorcmVnaXN0ZXIgbG9uZyBfX28wIF9fYXNtX18gKCJvMCIpID0gKGxvbmcpKGFyZzEpOyBcCitfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInQgMHgxMFxuXHQiIFwKKwkJICAgICAgImJjYyAxZlxuXHQiIFwKKwkJICAgICAgIm1vdiAlJW8wLCAlMFxuXHQiIFwKKwkJICAgICAgInN1YiAlJWcwLCAlJW8wLCAlMFxuXHQiIFwKKwkJICAgICAgIjE6XG5cdCIgXAorCQkgICAgICA6ICI9ciIgKF9fcmVzKSwgIj0mciIgKF9fbzApIFwKKwkJICAgICAgOiAiMSIgKF9fbzApLCAiciIgKF9fZzEpIFwKKwkJICAgICAgOiAiY2MiKTsgXAoraWYgKF9fcmVzIDwgLTI1NSB8fCBfX3JlcyA+PSAwKSBcCisJcmV0dXJuICh0eXBlKSBfX3JlczsgXAorZXJybm8gPSAtX19yZXM7IFwKK3JldHVybiAtMTsgXAorfQorCisjZGVmaW5lIF9zeXNjYWxsMih0eXBlLG5hbWUsdHlwZTEsYXJnMSx0eXBlMixhcmcyKSBcCit0eXBlIG5hbWUodHlwZTEgYXJnMSx0eXBlMiBhcmcyKSBcCit7IFwKK2xvbmcgX19yZXM7IFwKK3JlZ2lzdGVyIGxvbmcgX19nMSBfX2FzbV9fICgiZzEiKSA9IF9fTlJfIyNuYW1lOyBcCityZWdpc3RlciBsb25nIF9fbzAgX19hc21fXyAoIm8wIikgPSAobG9uZykoYXJnMSk7IFwKK3JlZ2lzdGVyIGxvbmcgX19vMSBfX2FzbV9fICgibzEiKSA9IChsb25nKShhcmcyKTsgXAorX19hc21fXyBfX3ZvbGF0aWxlX18gKCJ0IDB4MTBcblx0IiBcCisJCSAgICAgICJiY2MgMWZcblx0IiBcCisJCSAgICAgICJtb3YgJSVvMCwgJTBcblx0IiBcCisJCSAgICAgICJzdWIgJSVnMCwgJSVvMCwgJTBcblx0IiBcCisJCSAgICAgICIxOlxuXHQiIFwKKwkJICAgICAgOiAiPXIiIChfX3JlcyksICI9JnIiIChfX28wKSBcCisJCSAgICAgIDogIjEiIChfX28wKSwgInIiIChfX28xKSwgInIiIChfX2cxKSBcCisJCSAgICAgIDogImNjIik7IFwKK2lmIChfX3JlcyA8IC0yNTUgfHwgX19yZXMgPj0gMCkgXAorCXJldHVybiAodHlwZSkgX19yZXM7IFwKK2Vycm5vID0gLV9fcmVzOyBcCityZXR1cm4gLTE7IFwKK30KKworI2RlZmluZSBfc3lzY2FsbDModHlwZSxuYW1lLHR5cGUxLGFyZzEsdHlwZTIsYXJnMix0eXBlMyxhcmczKSBcCit0eXBlIG5hbWUodHlwZTEgYXJnMSx0eXBlMiBhcmcyLHR5cGUzIGFyZzMpIFwKK3sgXAorbG9uZyBfX3JlczsgXAorcmVnaXN0ZXIgbG9uZyBfX2cxIF9fYXNtX18gKCJnMSIpID0gX19OUl8jI25hbWU7IFwKK3JlZ2lzdGVyIGxvbmcgX19vMCBfX2FzbV9fICgibzAiKSA9IChsb25nKShhcmcxKTsgXAorcmVnaXN0ZXIgbG9uZyBfX28xIF9fYXNtX18gKCJvMSIpID0gKGxvbmcpKGFyZzIpOyBcCityZWdpc3RlciBsb25nIF9fbzIgX19hc21fXyAoIm8yIikgPSAobG9uZykoYXJnMyk7IFwKK19fYXNtX18gX192b2xhdGlsZV9fICgidCAweDEwXG5cdCIgXAorCQkgICAgICAiYmNjIDFmXG5cdCIgXAorCQkgICAgICAibW92ICUlbzAsICUwXG5cdCIgXAorCQkgICAgICAic3ViICUlZzAsICUlbzAsICUwXG5cdCIgXAorCQkgICAgICAiMTpcblx0IiBcCisJCSAgICAgIDogIj1yIiAoX19yZXMpLCAiPSZyIiAoX19vMCkgXAorCQkgICAgICA6ICIxIiAoX19vMCksICJyIiAoX19vMSksICJyIiAoX19vMiksICJyIiAoX19nMSkgXAorCQkgICAgICA6ICJjYyIpOyBcCitpZiAoX19yZXMgPCAtMjU1IHx8IF9fcmVzPj0wKSBcCisJcmV0dXJuICh0eXBlKSBfX3JlczsgXAorZXJybm8gPSAtX19yZXM7IFwKK3JldHVybiAtMTsgXAorfQorCisjZGVmaW5lIF9zeXNjYWxsNCh0eXBlLG5hbWUsdHlwZTEsYXJnMSx0eXBlMixhcmcyLHR5cGUzLGFyZzMsdHlwZTQsYXJnNCkgXAordHlwZSBuYW1lICh0eXBlMSBhcmcxLCB0eXBlMiBhcmcyLCB0eXBlMyBhcmczLCB0eXBlNCBhcmc0KSBcCit7IFwKK2xvbmcgX19yZXM7IFwKK3JlZ2lzdGVyIGxvbmcgX19nMSBfX2FzbV9fICgiZzEiKSA9IF9fTlJfIyNuYW1lOyBcCityZWdpc3RlciBsb25nIF9fbzAgX19hc21fXyAoIm8wIikgPSAobG9uZykoYXJnMSk7IFwKK3JlZ2lzdGVyIGxvbmcgX19vMSBfX2FzbV9fICgibzEiKSA9IChsb25nKShhcmcyKTsgXAorcmVnaXN0ZXIgbG9uZyBfX28yIF9fYXNtX18gKCJvMiIpID0gKGxvbmcpKGFyZzMpOyBcCityZWdpc3RlciBsb25nIF9fbzMgX19hc21fXyAoIm8zIikgPSAobG9uZykoYXJnNCk7IFwKK19fYXNtX18gX192b2xhdGlsZV9fICgidCAweDEwXG5cdCIgXAorCQkgICAgICAiYmNjIDFmXG5cdCIgXAorCQkgICAgICAibW92ICUlbzAsICUwXG5cdCIgXAorCQkgICAgICAic3ViICUlZzAsICUlbzAsICUwXG5cdCIgXAorCQkgICAgICAiMTpcblx0IiBcCisJCSAgICAgIDogIj1yIiAoX19yZXMpLCAiPSZyIiAoX19vMCkgXAorCQkgICAgICA6ICIxIiAoX19vMCksICJyIiAoX19vMSksICJyIiAoX19vMiksICJyIiAoX19vMyksICJyIiAoX19nMSkgXAorCQkgICAgICA6ICJjYyIpOyBcCitpZiAoX19yZXMgPCAtMjU1IHx8IF9fcmVzPj0wKSBcCisJcmV0dXJuICh0eXBlKSBfX3JlczsgXAorZXJybm8gPSAtX19yZXM7IFwKK3JldHVybiAtMTsgXAorfSAKKworI2RlZmluZSBfc3lzY2FsbDUodHlwZSxuYW1lLHR5cGUxLGFyZzEsdHlwZTIsYXJnMix0eXBlMyxhcmczLHR5cGU0LGFyZzQsIFwKKwkgIHR5cGU1LGFyZzUpIFwKK3R5cGUgbmFtZSAodHlwZTEgYXJnMSx0eXBlMiBhcmcyLHR5cGUzIGFyZzMsdHlwZTQgYXJnNCx0eXBlNSBhcmc1KSBcCit7IFwKK2xvbmcgX19yZXM7IFwKK3JlZ2lzdGVyIGxvbmcgX19nMSBfX2FzbV9fICgiZzEiKSA9IF9fTlJfIyNuYW1lOyBcCityZWdpc3RlciBsb25nIF9fbzAgX19hc21fXyAoIm8wIikgPSAobG9uZykoYXJnMSk7IFwKK3JlZ2lzdGVyIGxvbmcgX19vMSBfX2FzbV9fICgibzEiKSA9IChsb25nKShhcmcyKTsgXAorcmVnaXN0ZXIgbG9uZyBfX28yIF9fYXNtX18gKCJvMiIpID0gKGxvbmcpKGFyZzMpOyBcCityZWdpc3RlciBsb25nIF9fbzMgX19hc21fXyAoIm8zIikgPSAobG9uZykoYXJnNCk7IFwKK3JlZ2lzdGVyIGxvbmcgX19vNCBfX2FzbV9fICgibzQiKSA9IChsb25nKShhcmc1KTsgXAorX19hc21fXyBfX3ZvbGF0aWxlX18gKCJ0IDB4MTBcblx0IiBcCisJCSAgICAgICJiY2MgMWZcblx0IiBcCisJCSAgICAgICJtb3YgJSVvMCwgJTBcblx0IiBcCisJCSAgICAgICJzdWIgJSVnMCwgJSVvMCwgJTBcblx0IiBcCisJCSAgICAgICIxOlxuXHQiIFwKKwkJICAgICAgOiAiPXIiIChfX3JlcyksICI9JnIiIChfX28wKSBcCisJCSAgICAgIDogIjEiIChfX28wKSwgInIiIChfX28xKSwgInIiIChfX28yKSwgInIiIChfX28zKSwgInIiIChfX280KSwgInIiIChfX2cxKSBcCisJCSAgICAgIDogImNjIik7IFwKK2lmIChfX3JlcyA8IC0yNTUgfHwgX19yZXM+PTApIFwKKwlyZXR1cm4gKHR5cGUpIF9fcmVzOyBcCitlcnJubyA9IC1fX3JlczsgXAorcmV0dXJuIC0xOyBcCit9CisKKyNpZmRlZiBfX0tFUk5FTF9fCisjZGVmaW5lIF9fQVJDSF9XQU5UX0lQQ19QQVJTRV9WRVJTSU9OCisjZGVmaW5lIF9fQVJDSF9XQU5UX09MRF9SRUFERElSCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NUQVQ2NAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfQUxBUk0KKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0dFVEhPU1ROQU1FCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19QQVVTRQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0dFVE1BU0sKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR05BTAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfVElNRQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfVVRJTUUKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1dBSVRQSUQKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NPQ0tFVENBTEwKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0ZBRFZJU0U2NAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfR0VUUEdSUAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfTExTRUVLCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19OSUNFCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19PTERfR0VUUkxJTUlUCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19PTERVTU9VTlQKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR1BFTkRJTkcKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR1BST0NNQVNLCisjZW5kaWYKKworI2lmZGVmIF9fS0VSTkVMX1NZU0NBTExTX18KKworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyoKKyAqIHdlIG5lZWQgdGhpcyBpbmxpbmUgLSBmb3JraW5nIGZyb20ga2VybmVsIHNwYWNlIHdpbGwgcmVzdWx0CisgKiBpbiBOTyBDT1BZIE9OIFdSSVRFICghISEpLCB1bnRpbCBhbiBleGVjdmUgaXMgZXhlY3V0ZWQuIFRoaXMKKyAqIGlzIG5vIHByb2JsZW0sIGJ1dCBmb3IgdGhlIHN0YWNrLiBUaGlzIGlzIGhhbmRsZWQgYnkgbm90IGxldHRpbmcKKyAqIG1haW4oKSB1c2UgdGhlIHN0YWNrIGF0IGFsbCBhZnRlciBmb3JrKCkuIFRodXMsIG5vIGZ1bmN0aW9uCisgKiBjYWxscyAtIHdoaWNoIG1lYW5zIGlubGluZSBjb2RlIGZvciBmb3JrIHRvbywgYXMgb3RoZXJ3aXNlIHdlCisgKiB3b3VsZCB1c2UgdGhlIHN0YWNrIHVwb24gZXhpdCBmcm9tICdmb3JrKCknLgorICoKKyAqIEFjdHVhbGx5IG9ubHkgcGF1c2UgYW5kIGZvcmsgYXJlIG5lZWRlZCBpbmxpbmUsIHNvIHRoYXQgdGhlcmUKKyAqIHdvbid0IGJlIGFueSBtZXNzaW5nIHdpdGggdGhlIHN0YWNrIGZyb20gbWFpbigpLCBidXQgd2UgZGVmaW5lCisgKiBzb21lIG90aGVycyB0b28uCisgKi8KKyNkZWZpbmUgX19OUl9fZXhpdCBfX05SX2V4aXQKK3N0YXRpYyBfX2lubGluZV9fIF9zeXNjYWxsMChwaWRfdCxzZXRzaWQpCitzdGF0aWMgX19pbmxpbmVfXyBfc3lzY2FsbDMoaW50LHdyaXRlLGludCxmZCxfX2NvbnN0X18gY2hhciAqLGJ1ZixvZmZfdCxjb3VudCkKK3N0YXRpYyBfX2lubGluZV9fIF9zeXNjYWxsMyhpbnQscmVhZCxpbnQsZmQsY2hhciAqLGJ1ZixvZmZfdCxjb3VudCkKK3N0YXRpYyBfX2lubGluZV9fIF9zeXNjYWxsMyhvZmZfdCxsc2VlayxpbnQsZmQsb2ZmX3Qsb2Zmc2V0LGludCxjb3VudCkKK3N0YXRpYyBfX2lubGluZV9fIF9zeXNjYWxsMShpbnQsZHVwLGludCxmZCkKK3N0YXRpYyBfX2lubGluZV9fIF9zeXNjYWxsMyhpbnQsZXhlY3ZlLF9fY29uc3RfXyBjaGFyICosZmlsZSxjaGFyICoqLGFyZ3YsY2hhciAqKixlbnZwKQorc3RhdGljIF9faW5saW5lX18gX3N5c2NhbGwzKGludCxvcGVuLF9fY29uc3RfXyBjaGFyICosZmlsZSxpbnQsZmxhZyxpbnQsbW9kZSkKK3N0YXRpYyBfX2lubGluZV9fIF9zeXNjYWxsMShpbnQsY2xvc2UsaW50LGZkKQorc3RhdGljIF9faW5saW5lX18gX3N5c2NhbGwzKHBpZF90LHdhaXRwaWQscGlkX3QscGlkLGludCAqLHdhaXRfc3RhdCxpbnQsb3B0aW9ucykKKworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKworYXNtbGlua2FnZSB1bnNpZ25lZCBsb25nIHN5c19tbWFwKAorCQkJCXVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sCisJCQkJdW5zaWduZWQgbG9uZyBwcm90LCB1bnNpZ25lZCBsb25nIGZsYWdzLAorCQkJCXVuc2lnbmVkIGxvbmcgZmQsIHVuc2lnbmVkIGxvbmcgb2ZmKTsKK2FzbWxpbmthZ2UgdW5zaWduZWQgbG9uZyBzeXNfbW1hcDIoCisJCQkJdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwKKwkJCQl1bnNpZ25lZCBsb25nIHByb3QsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCisJCQkJdW5zaWduZWQgbG9uZyBmZCwgdW5zaWduZWQgbG9uZyBwZ29mZik7CitzdHJ1Y3Qgc2lnYWN0aW9uOworYXNtbGlua2FnZSBsb25nIHN5c19ydF9zaWdhY3Rpb24oaW50IHNpZywKKwkJCQljb25zdCBzdHJ1Y3Qgc2lnYWN0aW9uIF9fdXNlciAqYWN0LAorCQkJCXN0cnVjdCBzaWdhY3Rpb24gX191c2VyICpvYWN0LAorCQkJCXZvaWQgX191c2VyICpyZXN0b3JlciwKKwkJCQlzaXplX3Qgc2lnc2V0c2l6ZSk7CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9TWVNDQUxMU19fICovCisKKy8qCisgKiAiQ29uZGl0aW9uYWwiIHN5c2NhbGxzCisgKgorICogV2hhdCB3ZSB3YW50IGlzIF9fYXR0cmlidXRlX18oKHdlYWssYWxpYXMoInN5c19uaV9zeXNjYWxsIikpKSwKKyAqIGJ1dCBpdCBkb2Vzbid0IHdvcmsgb24gYWxsIHRvb2xjaGFpbnMsIHNvIHdlIGp1c3QgZG8gaXQgYnkgaGFuZAorICovCisjZGVmaW5lIGNvbmRfc3lzY2FsbCh4KSBhc20oIi53ZWFrXHQiICN4ICJcblx0LnNldFx0IiAjeCAiLHN5c19uaV9zeXNjYWxsIikKKworI2VuZGlmIC8qIF9TUEFSQ19VTklTVERfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvdXNlci5oIGIvaW5jbHVkZS9hc20tc3BhcmMvdXNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ZjFhYmYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy91c2VyLmgKQEAgLTAsMCArMSw2MCBAQAorLyogJElkOiB1c2VyLmgsdiAxLjUgMTk5OC8wMi8yMyAwMTo0OToyMiBydGggRXhwICQKKyAqIGFzbS1zcGFyYy91c2VyLmg6IENvcmUgZmlsZSBkZWZpbml0aW9ucyBmb3IgdGhlIFNwYXJjLgorICoKKyAqIEtlZXAgaW4gc3luYyB3aXRoIHJlZy5oLiAgQWN0dWFsbHksIHdlIGNvdWxkIGdldCByaWQgb2YgdGhpcworICogb25lLCBzaW5jZSB3ZSB3b24ndCBhLm91dCBjb3JlIGR1bXAgdGhhdCBtdWNoIGFueXdheXMgLSBtaWd1ZWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCisgKi8KKyNpZm5kZWYgX1NQQVJDX1VTRVJfSAorI2RlZmluZSBfU1BBUkNfVVNFUl9ICisKKyNpbmNsdWRlIDxhc20vYS5vdXQuaD4KK3N0cnVjdCBzdW5vc19yZWdzIHsKKwl1bnNpZ25lZCBsb25nIHBzciwgcGMsIG5wYywgeTsKKwl1bnNpZ25lZCBsb25nIHJlZ3NbMTVdOworfTsKKworc3RydWN0IHN1bm9zX2ZwcXVldWUgeworCXVuc2lnbmVkIGxvbmcgKmFkZHI7CisJdW5zaWduZWQgbG9uZyBpbnN0OworfTsKKworc3RydWN0IHN1bm9zX2ZwIHsKKwl1bmlvbiB7CisJCXVuc2lnbmVkIGxvbmcgcmVnc1szMl07CisJCWRvdWJsZSByZWdfZGJsc1sxNl07CisJfSBmcmVnczsKKwl1bnNpZ25lZCBsb25nIGZzcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgZXh0cmE7CisJdW5zaWduZWQgbG9uZyBmcHFfY291bnQ7CisJc3RydWN0IHN1bm9zX2ZwcXVldWUgZnBxWzE2XTsKK307CisKK3N0cnVjdCBzdW5vc19mcHUgeworCXN0cnVjdCBzdW5vc19mcCBmcHN0YXR1czsKK307CisKKy8qIFRoZSBTdW5PUyBjb3JlIGZpbGUgaGVhZGVyIGxheW91dC4gKi8KK3N0cnVjdCB1c2VyIHsKKwl1bnNpZ25lZCBsb25nIG1hZ2ljOworCXVuc2lnbmVkIGxvbmcgbGVuOworCXN0cnVjdCBzdW5vc19yZWdzIHJlZ3M7CisJc3RydWN0IGV4ZWMgdWV4ZWM7CisJaW50ICAgICAgICAgICBzaWduYWw7CisJc2l6ZV90ICAgICAgICB1X3RzaXplOyAvKiBhbGwgb2YgdGhlc2UgaW4gYnl0ZXMhICovCisJc2l6ZV90ICAgICAgICB1X2RzaXplOworCXNpemVfdCAgICAgICAgdV9zc2l6ZTsKKwljaGFyICAgICAgICAgIHVfY29tbVsxN107CisJc3RydWN0IHN1bm9zX2ZwdSBmcHU7CisJdW5zaWduZWQgbG9uZyBzaWdjb2RlOyAgIC8qIFNwZWNpYWwgc2lnY29udGV4dCBzdWJjb2RlLCBpZiBhbnkgKi8KK307CisKKyNkZWZpbmUgTkJQRyAgICAgICAgICAgICAgICAgICAweDIwMDAKKyNkZWZpbmUgVVBBR0VTICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEhPU1RfVEVYVF9TVEFSVF9BRERSICAgKHUuc3RhcnRfY29kZSkKKyNkZWZpbmUgSE9TVF9EQVRBX1NUQVJUX0FERFIgICAodS51ZXhlYy5hX2RhdGEpCisjZGVmaW5lIEhPU1RfU1RBQ0tfRU5EX0FERFIgICAgKC0gdS51X3NzaXplICogTkJQRykKKyNkZWZpbmUgU1VOT1NfQ09SRV9NQUdJQyAgICAgICAweDA4MDQ1NgorCisjZW5kaWYgLyogIShfU1BBUkNfVVNFUl9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvdmFjLW9wcy5oIGIvaW5jbHVkZS9hc20tc3BhcmMvdmFjLW9wcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllMDE3MjMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy92YWMtb3BzLmgKQEAgLTAsMCArMSwxMzYgQEAKKy8qICRJZDogdmFjLW9wcy5oLHYgMS4xMyAxOTk4LzAxLzMwIDEwOjU5OjU5IGpqIEV4cCAkICovCisjaWZuZGVmIF9TUEFSQ19WQUNfT1BTX0gKKyNkZWZpbmUgX1NQQVJDX1ZBQ19PUFNfSAorCisvKiB2YWMtb3BzLmg6IElubGluZSBhc3NlbWJseSByb3V0aW5lcyB0byBkbyBvcGVyYXRpb25zIG9uIHRoZSBTcGFyYworICogICAgICAgICAgICBWQUMgKHZpcnR1YWwgYWRkcmVzcyBjYWNoZSkgZm9yIHRoZSBzdW40Yy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTQsIERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL3N5c2VuLmg+CisjaW5jbHVkZSA8YXNtL2NvbnRyZWdzLmg+CisjaW5jbHVkZSA8YXNtL2FzaS5oPgorCisvKiBUaGUgU1VONEMgbW9kZWxzIGhhdmUgYSB2aXJ0dWFsbHkgYWRkcmVzc2VkIHdyaXRlLXRocm91Z2gKKyAqIGNhY2hlLgorICoKKyAqIFRoZSBjYWNoZSB0YWdzIGFyZSBkaXJlY3RseSBhY2Nlc3NpYmxlIHRocm91Z2ggYW4gQVNJIGFuZAorICogZWFjaCBoYXZlIHRoZSBmb3JtOgorICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogfCBNQlogfCBDT05URVhUIHwgV1JJVEUgfCBQUklWIHwgVkFMSUQgfCBNQlogfCBUYWdJRCB8IE1CWiB8CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAzMSAyNSAgMjQgICAyMiAgICAgMjEgICAgIDIwICAgICAxOSAgICAxOCAxNiAgMTUgICAyICAxICAwCisgKgorICogTUJaOiBUaGVzZSBiaXRzIGFyZSBlaXRoZXIgdW51c2VkIGFuZC9vciByZXNlcnZlZCBhbmQgc2hvdWxkCisgKiAgICAgIGJlIHdyaXR0ZW4gYXMgemVyb2VzLgorICoKKyAqIENPTlRFWFQ6IFJlY29yZHMgdGhlIGNvbnRleHQgdG8gd2hpY2ggdGhpcyBjYWNoZSBsaW5lIGJlbG9uZ3MuCisgKgorICogV1JJVEU6IEEgY29weSBvZiB0aGUgd3JpdGFibGUgYml0IGZyb20gdGhlIG1tdSBwdGUgYWNjZXNzIGJpdHMuCisgKgorICogUFJJVjogQSBjb3B5IG9mIHRoZSBwcml2aWxlZ2VkIGJpdCBmcm9tIHRoZSBwdGUgYWNjZXNzIGJpdHMuCisgKgorICogVkFMSUQ6IElmIHNldCwgdGhpcyBsaW5lIGlzIHZhbGlkLCBlbHNlIGludmFsaWQuCisgKgorICogVGFnSUQ6IEZvdXJ0ZWVuIGJpdHMgb2YgdGFnIElELgorICoKKyAqIEV2ZXJ5IHZpcnR1YWwgYWRkcmVzcyBpcyBzZWVuIGJ5IHRoZSBjYWNoZSBsaWtlIHRoaXM6CisgKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogfCAgUkVTViAgfCBUYWdJRCB8IExJTkUgfCBCWVRFLWluLUxJTkUgfAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIDMxICAgIDMwIDI5ICAgMTYgMTUgICA0IDMgICAgICAgICAgICAwCisgKgorICogUkVTVjogVW51c2VkL3Jlc2VydmVkLgorICoKKyAqIFRhZ0lEOiBVc2VkIHRvIG1hdGNoIHRoZSBUYWctSUQgaW4gdGhhdCB2YWMgdGFncy4KKyAqCisgKiBMSU5FOiBXaGljaCBsaW5lIHdpdGhpbiB0aGUgY2FjaGUKKyAqCisgKiBCWVRFLWluLUxJTkU6IFdoaWNoIGJ5dGUgd2l0aGluIHRoZSBjYWNoZSBsaW5lLgorICovCisKKy8qIFN1bjRjIFZBQyBUYWdzICovCisjZGVmaW5lIFM0Q1ZBQ1RBR19DSUQgICAgICAweDAxYzAwMDAwCisjZGVmaW5lIFM0Q1ZBQ1RBR19XICAgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIFM0Q1ZBQ1RBR19QICAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIFM0Q1ZBQ1RBR19WICAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIFM0Q1ZBQ1RBR19USUQgICAgICAweDAwMDBmZmZjCisKKy8qIFN1bjRjIFZBQyBWaXJ0dWFsIEFkZHJlc3MgKi8KKy8qIFRoZXNlIGFyZW4ndCB1c2VkLCB3aHkgYm90aGVyPyAoQW50b24pICovCisjaWYgMAorI2RlZmluZSBTNENWQUNWQV9USUQgICAgICAgMHgzZmZmMDAwMAorI2RlZmluZSBTNENWQUNWQV9MSU5FICAgICAgMHgwMDAwZmZmMAorI2RlZmluZSBTNENWQUNWQV9CSUwgICAgICAgMHgwMDAwMDAwZgorI2VuZGlmCisKKy8qIFRoZSBpbmRleGluZyBvZiBjYWNoZSBsaW5lcyBjcmVhdGVzIGEgcHJvYmxlbS4gIEJlY2F1c2UgdGhlIGxpbmUKKyAqIGZpZWxkIG9mIGEgdmlydHVhbCBhZGRyZXNzIGV4dGVuZHMgcGFzdCB0aGUgcGFnZSBvZmZzZXQgd2l0aGluCisgKiB0aGUgdmlydHVhbCBhZGRyZXNzIGl0IGlzIHBvc3NpYmxlIHRvIGhhdmUgd2hhdCBhcmUgY2FsbGVkCisgKiAnYmFkIGFsaWFzZXMnIHdoaWNoIHdpbGwgY3JlYXRlIGluY29uc2lzdGVuY2llcy4gIFNvIHdlIG11c3QgbWFrZQorICogc3VyZSB0aGF0IHdpdGhpbiBhIGNvbnRleHQgdGhhdCBpZiBhIHBoeXNpY2FsIHBhZ2UgaXMgbWFwcGVkCisgKiBtb3JlIHRoYW4gb25jZSwgdGhhdCAnZXh0cmEnIGxpbmUgYml0cyBhcmUgdGhlIHNhbWUuICBJZiB0aGlzIGlzCisgKiBub3QgdGhlIGNhc2UsIGFuZCB0aHVzIGlzIGEgJ2JhZCBhbGlhcycgd2UgbXVzdCB0dXJuIG9mZiB0aGUKKyAqIGNhY2hlYWJsZSBiaXQgaW4gdGhlIHB0ZSdzIG9mIGFsbCBzdWNoIHBhZ2VzLgorICovCisKKyNpZmRlZiBDT05GSUdfU1VONAorI2RlZmluZSBTNENWQUNfQkFEQklUUyAgICAgMHgwMDAxZTAwMAorI2Vsc2UKKyNkZWZpbmUgUzRDVkFDX0JBREJJVFMgICAgMHgwMDAwZjAwMAorI2VuZGlmCisKKy8qIFRoZSBmb2xsb3dpbmcgaXMgdHJ1ZSBpZiB2YWRkcjEgYW5kIHZhZGRyMiB3b3VsZCBjYXVzZQorICogYSAnYmFkIGFsaWFzJy4KKyAqLworI2RlZmluZSBTNENWQUNfQkFEQUxJQVModmFkZHIxLCB2YWRkcjIpIFwKKyAgICAgICAgKCgoKHVuc2lnbmVkIGxvbmcpICh2YWRkcjEpKSBeICgodW5zaWduZWQgbG9uZykgKHZhZGRyMikpKSAmIFwKKwkgKFM0Q1ZBQ19CQURCSVRTKSkKKworLyogVGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIHRoZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgYSBzdW40YworICogVkFDIGFzIHByb2JlZCBmcm9tIHRoZSBwcm9tIGR1cmluZyBib290IHRpbWUuCisgKi8KK3N0cnVjdCBzdW40Y192YWNfcHJvcHMgeworCXVuc2lnbmVkIGludCBudW1fYnl0ZXM7ICAgICAvKiBTaXplIG9mIHRoZSBjYWNoZSAqLworCXVuc2lnbmVkIGludCBudW1fbGluZXM7ICAgICAvKiBOdW1iZXIgb2YgY2FjaGUgbGluZXMgKi8KKwl1bnNpZ25lZCBpbnQgZG9faHdmbHVzaGVzOyAgLyogSGFyZHdhcmUgZmx1c2hpbmcgYXZhaWxhYmxlPyAqLworCWVudW0geyBWQUNfTk9ORSwgVkFDX1dSSVRFX1RIUk9VR0gsCisJICAgIFZBQ19XUklURV9CQUNLIH0gdHlwZTsgIC8qIFdoYXQgdHlwZSBvZiBWQUM/ICovCisJdW5zaWduZWQgaW50IGxpbmVzaXplOyAgICAgIC8qIFNpemUgb2YgZWFjaCBsaW5lIGluIGJ5dGVzICovCisJdW5zaWduZWQgaW50IGxvZzJsc2l6ZTsgICAgIC8qIGxvZzIobGluZXNpemUpICovCisJdW5zaWduZWQgaW50IG9uOyAgICAgICAgICAgIC8qIFZBQyBpcyBlbmFibGVkICovCit9OworCitleHRlcm4gc3RydWN0IHN1bjRjX3ZhY19wcm9wcyBzdW40Y192YWNpbmZvOworCisvKiBzdW40Y19lbmFibGVfdmFjKCkgZW5hYmxlcyB0aGUgc3VuNGMgdmlydHVhbCBhZGRyZXNzIGNhY2hlLiAqLworc3RhdGljIGlubGluZSB2b2lkIHN1bjRjX2VuYWJsZV92YWModm9pZCkKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibGR1YmEgWyUwXSAlMSwgJSVnMVxuXHQiCisJCQkgICAgICJvciAgICAlJWcxLCAlMiwgJSVnMVxuXHQiCisJCQkgICAgICJzdGJhICAlJWcxLCBbJTBdICUxXG5cdCIKKwkJCSAgICAgOiAvKiBubyBvdXRwdXRzICovCisJCQkgICAgIDogInIiICgodW5zaWduZWQgaW50KSBBQ19TRU5BQkxFKSwKKwkJCSAgICAgImkiIChBU0lfQ09OVFJPTCksICJpIiAoU0VOQUJMRV9DQUNIRSkKKwkJCSAgICAgOiAiZzEiLCAibWVtb3J5Iik7CisJc3VuNGNfdmFjaW5mby5vbiA9IDE7Cit9CisKKy8qIHN1bjRjX2Rpc2FibGVfdmFjKCkgZGlzYWJsZXMgdGhlIHZpcnR1YWwgYWRkcmVzcyBjYWNoZS4gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzdW40Y19kaXNhYmxlX3ZhYyh2b2lkKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKCJsZHViYSBbJTBdICUxLCAlJWcxXG5cdCIKKwkJCSAgICAgImFuZG4gICUlZzEsICUyLCAlJWcxXG5cdCIKKwkJCSAgICAgInN0YmEgICUlZzEsIFslMF0gJTFcblx0IgorCQkJICAgICA6IC8qIG5vIG91dHB1dHMgKi8KKwkJCSAgICAgOiAiciIgKCh1bnNpZ25lZCBpbnQpIEFDX1NFTkFCTEUpLAorCQkJICAgICAiaSIgKEFTSV9DT05UUk9MKSwgImkiIChTRU5BQkxFX0NBQ0hFKQorCQkJICAgICA6ICJnMSIsICJtZW1vcnkiKTsKKwlzdW40Y192YWNpbmZvLm9uID0gMDsKK30KKworI2VuZGlmIC8qICEoX1NQQVJDX1ZBQ19PUFNfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3ZhZGRycy5oIGIvaW5jbHVkZS9hc20tc3BhcmMvdmFkZHJzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTEwOTczOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3ZhZGRycy5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qICRJZDogdmFkZHJzLmgsdiAxLjI3IDIwMDEvMDcvMDQgMDA6MTg6MTggZGF2ZW0gRXhwICQgKi8KKyNpZm5kZWYgX1NQQVJDX1ZBRERSU19ICisjZGVmaW5lIF9TUEFSQ19WQUREUlNfSAorCisjaW5jbHVkZSA8YXNtL2hlYWQuaD4KKworLyoKKyAqIGFzbS1zcGFyYy92YWRkcnMuaDogIEhlcmUgd2UgZGVmaW5lIHRoZSB2aXJ0dWFsIGFkZHJlc3NlcyBhdAorICogICAgICAgICAgICAgICAgICAgICAgd2hpY2ggaW1wb3J0YW50IHRoaW5ncyB3aWxsIGJlIG1hcHBlZC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQorICogQ29weXJpZ2h0IChDKSAyMDAwIEFudG9uIEJsYW5jaGFyZCAoYW50b25Ac2FtYmEub3JnKQorICovCisKKyNkZWZpbmUgU1JNTVVfTUFYTUVNCQkweDBjMDAwMDAwCisKKyNkZWZpbmUgU1JNTVVfTk9DQUNIRV9WQUREUgkoS0VSTkJBU0UgKyBTUk1NVV9NQVhNRU0pCisJCQkJLyogPSAweDBmYzAwMDAwMCAqLworLyogWFhYIEVtcGlyaWNhbHMgLSB0aGlzIG5lZWRzIHRvIGdvIGF3YXkgLSBLTVcgKi8KKyNkZWZpbmUgU1JNTVVfTUlOX05PQ0FDSEVfUEFHRVMgKDU1MCkKKyNkZWZpbmUgU1JNTVVfTUFYX05PQ0FDSEVfUEFHRVMJKDEyODApCisKKy8qIFRoZSBmb2xsb3dpbmcgY29uc3RhbnQgaXMgdXNlZCBpbiBtbS9zcm1tdS5jOjpzcm1tdV9ub2NhY2hlX2NhbGNzaXplKCkKKyAqIHRvIGRldGVybWluZSB0aGUgYW1vdW50IG9mIG1lbW9yeSB0aGF0IHdpbGwgYmUgcmVzZXJ2ZWQgYXMgbm9jYWNoZToKKyAqCisgKiAyNTYgcGFnZXMgd2lsbCBiZSB0YWtlbiBhcyBub2NhY2hlIHBlciBlYWNoCisgKiBTUk1NVV9OT0NBQ0hFX0FMQ1JBVElPIE1CIG9mIHN5c3RlbSBtZW1vcnkuCisgKgorICogbGltaXRzIGVuZm9yY2VkOglub2NhY2hlIG1pbmltdW0gPSAyNTYgcGFnZXMKKyAqCQkJbm9jYWNoZSBtYXhpbXVtID0gMTI4MCBwYWdlcworICovCisjZGVmaW5lIFNSTU1VX05PQ0FDSEVfQUxDUkFUSU8JNjQJLyogMjU2IHBhZ2VzIHBlciA2NE1CIG9mIHN5c3RlbSBSQU0gKi8KKworI2RlZmluZSBTVU40TV9JT0JBU0VfVkFERFIJMHhmZDAwMDAwMCAvKiBCYXNlIGZvciBtYXBwaW5nIHBhZ2VzICovCisjZGVmaW5lIElPQkFTRV9WQUREUgkJMHhmZTAwMDAwMAorI2RlZmluZSBJT0JBU0VfRU5ECQkweGZlNjAwMDAwCisKKyNkZWZpbmUgVk1BTExPQ19TVEFSVAkJMHhmZTYwMDAwMAorCisvKiBYWFggQWx0ZXIgdGhpcyB3aGVuIEkgZ2V0IGFyb3VuZCB0byBmaXhpbmcgc3VuNGMgLSBBbnRvbiAqLworI2RlZmluZSBWTUFMTE9DX0VORAkJMHhmZmMwMDAwMAorCisvKgorICogT24gdGhlIHN1bjQvNGMgd2UgbmVlZCBhIHBsYWNlCisgKiB0byByZWxpYWJseSBtYXAgbG9ja2VkIGRvd24ga2VybmVsIGRhdGEuICBUaGlzIGluY2x1ZGVzIHRoZQorICogdGFza19zdHJ1Y3QgYW5kIGtlcm5lbCBzdGFjayBwYWdlcyBvZiBlYWNoIHByb2Nlc3MgcGx1cyB0aGUKKyAqIHNjc2kgYnVmZmVycyBkdXJpbmcgZHZtYSBJTyB0cmFuc2ZlcnMsIGFsc28gdGhlIGZsb3BweSBidWZmZXJzCisgKiBkdXJpbmcgcHNldWRvIGRtYSB3aGljaCBydW5zIHdpdGggdHJhcHMgb2ZmIChubyBmYXVsdHMgYWxsb3dlZCkuCisgKiBTb21lIHF1aWNrIGNhbGN1bGF0aW9ucyB5aWVsZDoKKyAqICAgICAgIE5SX1RBU0tTIDw1MTI+ICogKDMgKiBQQUdFX1NJWkUpID09IDB4NjAwMDAwCisgKiBTdWJ0cmFjdCB0aGlzIGZyb20gMHhjMDAwMDAgYW5kIHlvdSBnZXQgMHg5MjdDMCBvZiB2bSBsZWZ0CisgKiBvdmVyIHRvIG1hcCBTQ1NJIGR2bWEgKyBmbG9wcHkgcHNldWRvLWRtYSBidWZmZXJzLiAgU28gYmUKKyAqIGNhcmVmdWwgaWYgeW91IGNoYW5nZSBOUl9UQVNLUyBvciBlbHNlIHRoZXJlIHdvbid0IGJlIGVub3VnaAorICogcm9vbSBmb3IgaXQgYWxsLgorICovCisjZGVmaW5lIFNVTjRDX0xPQ0tfVkFERFIJMHhmZjAwMDAwMAorI2RlZmluZSBTVU40Q19MT0NLX0VORAkJMHhmZmMwMDAwMAorCisjZGVmaW5lIEtBREJfREVCVUdHRVJfQkVHVk0JMHhmZmMwMDAwMCAvKiBXaGVyZSBrZXJuIGRlYnVnZ2VyIGlzIGluIHZpcnQtbWVtICovCisjZGVmaW5lIEtBREJfREVCVUdHRVJfRU5EVk0JMHhmZmQwMDAwMAorI2RlZmluZSBERUJVR19GSVJTVFZBRERSCUtBREJfREVCVUdHRVJfQkVHVk0KKyNkZWZpbmUgREVCVUdfTEFTVFZBRERSCQlLQURCX0RFQlVHR0VSX0VORFZNCisKKyNkZWZpbmUgTElOVVhfT1BQUk9NX0JFR1ZNCTB4ZmZkMDAwMDAKKyNkZWZpbmUgTElOVVhfT1BQUk9NX0VORFZNCTB4ZmZmMDAwMDAKKworI2RlZmluZSBEVk1BX1ZBRERSCQkweGZmZjAwMDAwIC8qIEJhc2UgYXJlYSBvZiB0aGUgRFZNQSBvbiBzdW5zICovCisjZGVmaW5lIERWTUFfRU5ECQkweGZmZmMwMDAwCisKKyNlbmRpZiAvKiAhKF9TUEFSQ19WQUREUlNfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3ZmY19pb2N0bHMuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3ZmY19pb2N0bHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjhiNjkwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvdmZjX2lvY3Rscy5oCkBAIC0wLDAgKzEsNTggQEAKKy8qIENvcHlyaWdodCAoYykgMTk5NiBieSBNYW5pc2ggVmFjaGhhcmFqYW5pICovCisKKyNpZm5kZWYgX0xJTlVYX1ZGQ19JT0NUTFNfSF8KKyNkZWZpbmUJX0xJTlVYX1ZGQ19JT0NUTFNfSF8KKworCS8qIElPQ1RMcyAqLworI2RlZmluZSBWRkNfSU9DVEwoYSkgICAgICAgICAgKCgnaicgPDwgOCkgfCBhKQorI2RlZmluZSBWRkNHQ1RSTAkoVkZDX0lPQ1RMICgwKSkJICAgICAgICAvKiBnZXQgdmZjIGF0dHJpYnV0ZXMgKi8KKyNkZWZpbmUgVkZDU0NUUkwJKFZGQ19JT0NUTCAoMSkpICAJLyogc2V0IHZmYyBhdHRyaWJ1dGVzICovCisjZGVmaW5lIFZGQ0dWSUQJCShWRkNfSU9DVEwgKDIpKSAJLyogZ2V0IHZpZGVvIGRlY29kZXIgYXR0cmlidXRlcyAqLworI2RlZmluZSBWRkNTVklECQkoVkZDX0lPQ1RMICgzKSkJICAgICAgICAvKiBzZXQgdmlkZW8gZGVjb2RlciBhdHRyaWJ1dGVzICovCisjZGVmaW5lIFZGQ0hVRQkJKFZGQ19JT0NUTCAoNCkpICAgCS8qIHNldCBodWUgKi8KKyNkZWZpbmUgVkZDUE9SVENIRwkoVkZDX0lPQ1RMICg1KSkgIAkvKiBjaGFuZ2UgcG9ydCAqLworI2RlZmluZSBWRkNSRElORk8JKFZGQ19JT0NUTCAoNikpICAJLyogcmVhZCBpbmZvICovCisKKwkvKiBPcHRpb25zIGZvciBzZXR0aW5nIHRoZSB2ZmMgYXR0cmlidXRlcyBhbmQgc3RhdHVzICovCisjZGVmaW5lIE1FTVBSU1QJCTB4MQkvKiByZXNldCBGSUZPIHB0ci4gKi8KKyNkZWZpbmUgQ0FQVFJDTUQJMHgyCS8qIHN0YXJ0IGNhcHR1cmUgYW5kIHdhaXQgKi8KKyNkZWZpbmUgRElBR01PREUJMHgzCS8qIGRpYWcgbW9kZSAqLworI2RlZmluZSBOT1JNTU9ERQkweDQJLyogbm9ybWFsIG1vZGUgKi8KKyNkZWZpbmUgQ0FQVFJTVFIJMHg1CS8qIHN0YXJ0IGNhcHR1cmUgKi8KKyNkZWZpbmUgQ0FQVFJXQUlUCTB4NgkvKiB3YWl0IGZvciBjYXB0dXJlIHRvIGZpbmlzaCAqLworCisKKwkvKiBPcHRpb25zIGZvciB0aGUgZGVjb2RlciAqLworI2RlZmluZSBTVERfTlRTQwkweDEJLyogTlRTQyBtb2RlICovCisjZGVmaW5lIFNURF9QQUwJCTB4MgkvKiBQQUwgbW9kZSAqLworI2RlZmluZSBDT0xPUl9PTgkweDMJLyogZm9yY2UgY29sb3IgT04gKi8KKyNkZWZpbmUgTU9OTwkJMHg0CS8qIGZvcmNlIGNvbG9yIE9GRiAqLworCisJLyogVmFsdWVzIHJldHVybmVkIGJ5IGlvY3RsIDIgKi8KKworI2RlZmluZSBOT19MT0NLCSAgICAgICAgMQorI2RlZmluZSBOVFNDX0NPTE9SCTIKKyNkZWZpbmUgTlRTQ19OT0NPTE9SICAgIDMKKyNkZWZpbmUgUEFMX0NPTE9SCTQKKyNkZWZpbmUgUEFMX05PQ09MT1IJNQorCisvKiBOb3QgdG9vIHN1cmUgd2hhdCB0aGlzIGRvZXMgeWV0ICovCisJLyogT3B0aW9ucyBmb3Igc2V0dGluZyBGaWVsZCBudW1iZXIgKi8KKyNkZWZpbmUgT0REX0ZJRUxECTB4MQorI2RlZmluZSBFVkVOX0ZJRUxECTB4MAorI2RlZmluZSBBQ1RJVkVfT05MWSAgICAgMHgyCisjZGVmaW5lIE5PTl9BQ1RJVkUJMHgwCisKKy8qIERlYnVnIG9wdGlvbnMgKi8KKyNkZWZpbmUgVkZDX0kyQ19TRU5EIDAKKyNkZWZpbmUgVkZDX0kyQ19SRUNWIDEKKworc3RydWN0IHZmY19kZWJ1Z19pbm91dAoreworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwl1bnNpZ25lZCBsb25nIHJldDsKKwl1bnNpZ25lZCBsb25nIGxlbjsKKwl1bnNpZ25lZCBjaGFyIF9fdXNlciAqYnVmZmVyOworfTsKKworI2VuZGlmIC8qIF9MSU5VWF9WRkNfSU9DVExTX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy92aWtpbmcuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3Zpa2luZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1NDFkYTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy92aWtpbmcuaApAQCAtMCwwICsxLDI1MyBAQAorLyogJElkOiB2aWtpbmcuaCx2IDEuMTkgMTk5Ny8wNC8yMCAxNDoxMTo0OCBlY2QgRXhwICQKKyAqIHZpa2luZy5oOiAgRGVmaW5lcyBzcGVjaWZpYyB0byB0aGUgR05VL1Zpa2luZyBNQlVTIG1vZHVsZS4KKyAqICAgICAgICAgICAgVGhpcyBpcyBTUk1NVSBzdHVmZi4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQorICovCisjaWZuZGVmIF9TUEFSQ19WSUtJTkdfSAorI2RlZmluZSBfU1BBUkNfVklLSU5HX0gKKworI2luY2x1ZGUgPGFzbS9hc2kuaD4KKyNpbmNsdWRlIDxhc20vbXhjYy5oPgorI2luY2x1ZGUgPGFzbS9wZ3Rzcm1tdS5oPgorCisvKiBCaXRzIGluIHRoZSBTUk1NVSBjb250cm9sIHJlZ2lzdGVyIGZvciBHTlUvVmlraW5nIG1vZHVsZXMuCisgKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHxpbXBsLXZlcnN8IFJTViB8VEN8QUN8U1B8Qk18UEN8TUJNfFNCfElDfERDfFBTT3xSU1Z8TkZ8TUV8CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIDMxICAgICAyNCAyMy0xNyAxNiAxNSAxNCAxMyAxMiAxMSAgMTAgIDkgIDggIDcgIDYtMiAgMSAgMAorICoKKyAqIFRDOiBUYWJsZXdhbGsgQ2FjaGVhYmxlIC0tIDAgPSBUd2Fsa3MgYXJlIG5vdCBjYWNoZWFibGUgaW4gRS1jYWNoZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA9IFR3YWxrcyBhcmUgY2FjaGVhYmxlIGluIEUtY2FjaGUKKyAqCisgKiBHTlUvVmlraW5nIHdpbGwgb25seSBjYWNoZSB0YWJsZXdhbGtzIGluIHRoZSBFLWNhY2hlIChteGNjKSBpZiBwcmVzZW50CisgKiBhbmQgbmV2ZXIgY2FjaGVzIHRoZW0gaW50ZXJuYWxseSAob3Igc28gc3RhdGVzIHRoZSBkb2NzKS4gIFRoZXJlZm9yZQorICogZm9yIG1hY2hpbmVzIGxhY2tpbmcgYW4gRS1jYWNoZSAoaWUuIGluIE1CVVMgbW9kZSkgdGhpcyBiaXQgbXVzdAorICogcmVtYWluIGNsZWFyZWQuCisgKgorICogQUM6IEFsdGVybmF0ZSBDYWNoZWFibGUgLS0gMCA9IFBhc3N0aHJ1IHBoeXNpY2FsIGFjY2Vzc2VzIG5vdCBjYWNoZWFibGUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPSBQYXNzdGhydSBwaHlzaWNhbCBhY2Nlc3NlcyBjYWNoZWFibGUKKyAqCisgKiBUaGlzIGluZGljYXRlcyB3aGV0aGVyIGFjY2Vzc2VzIGFyZSBjYWNoZWFibGUgd2hlbiBubyBjYWNoYWJsZSBiaXQKKyAqIGlzIHByZXNlbnQgaW4gdGhlIHB0ZSB3aGVuIHRoZSBwcm9jZXNzb3IgaXMgaW4gYm9vdC1tb2RlIG9yIHRoZQorICogYWNjZXNzIGRvZXMgbm90IG5lZWQgcHRlJ3MgZm9yIHRyYW5zbGF0aW9uIChpZS4gcGFzcy10aHJ1IEFTSSdzKS4KKyAqICJDYWNoYWJsZSIgaXMgb25seSByZWZlcnJpbmcgdG8gRS1jYWNoZSAoaWYgcHJlc2VudCkgYW5kIG5vdCB0aGUKKyAqIG9uIGNoaXAgc3BsaXQgSS9EIGNhY2hlcyBvZiB0aGUgR05VL1Zpa2luZy4KKyAqCisgKiBTUDogU25vb1AgRW5hYmxlIC0tIDAgPSBidXMgc25vb3Bpbmcgb2ZmLCAxID0gYnVzIHNub29waW5nIG9uCisgKgorICogVGhpcyBlbmFibGVzIHNub29waW5nIG9uIHRoZSBHTlUvVmlraW5nIGJ1cy4gIFRoaXMgbXVzdCBiZSBvbgorICogZm9yIHRoZSBoYXJkd2FyZSBjYWNoZSBjb25zaXN0ZW5jeSBtZWNoYW5pc21zIG9mIHRoZSBHTlUvVmlraW5nCisgKiB0byB3b3JrIGF0IGFsbC4gIE9uIG5vbi1teGNjIEdOVS9WaWtpbmcgbW9kdWxlcyB0aGUgc3BsaXQgSS9ECisgKiBjYWNoZXMgd2lsbCBzbm9vcCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhleSBhcmUgZW5hYmxlZCwgdGhpcworICogdGFrZXMgY2FyZSBvZiB0aGUgY2FzZSB3aGVyZSB0aGUgSSBvciBEIG9yIGJvdGggY2FjaGVzIGFyZSB0dXJuZWQKKyAqIG9mZiB5ZXQgc3RpbGwgY29udGFpbiB2YWxpZCBkYXRhLiAgTm90ZSBhbHNvIHRoYXQgdGhpcyBiaXQgZG9lcworICogbm90IGFmZmVjdCBHTlUvVmlraW5nIHN0b3JlLWJ1ZmZlciBzbm9vcHMsIHRob3NlIGhhcHBlbiBpZiB0aGUKKyAqIHN0b3JlLWJ1ZmZlciBpcyBlbmFibGVkIG5vIG1hdHRlciB3aGF0LgorICoKKyAqIEJNOiBCb290IE1vZGUgLS0gMCA9IG5vdCBpbiBib290IG1vZGUsIDEgPSBpbiBib290IG1vZGUKKyAqCisgKiBUaGlzIGluZGljYXRlcyB3aGV0aGVyIHRoZSBHTlUvVmlraW5nIGlzIGluIGJvb3QtbW9kZSBvciBub3QsCisgKiBpZiBpdCBpcyB0aGVuIGFsbCBpbnN0cnVjdGlvbiBmZXRjaCBwaHlzaWNhbCBhZGRyZXNzZXMgYXJlCisgKiBjb21wdXRlZCBhcyAweGZmMDAwMDAwMCArIGxvdyAyOCBiaXRzIG9mIHJlcXVlc3RlZCBhZGRyZXNzLgorICogR05VL1Zpa2luZyBib290LW1vZGUgZG9lcyBub3QgYWZmZWN0IGRhdGEgYWNjZXNzZXMuICBBbHNvLAorICogaW4gYm9vdCBtb2RlIGluc3RydWN0aW9uIGFjY2Vzc2VzIGJ5cGFzcyB0aGUgc3BsaXQgb24gY2hpcCBJL0QKKyAqIGNhY2hlcywgdGhleSBtYXkgYmUgY2FjaGVkIGJ5IHRoZSBHTlUvTVhDQyBpZiBwcmVzZW50IGFuZCBlbmFibGVkLgorICoKKyAqIE1CTTogTUJ1cyBNb2RlIC0tIDAgPSBub3QgaW4gTUJ1cyBtb2RlLCAxID0gaW4gTUJ1cyBtb2RlCisgKgorICogVGhpcyBpbmRpY2F0ZWQgdGhlIEdOVS9WaWtpbmcgY29uZmlndXJhdGlvbiBwcmVzZW50LiAgSWYgaW4KKyAqIE1CVVMgbW9kZSwgdGhlIEdOVS9WaWtpbmcgbGFja3MgYSBHTlUvTVhDQyBFLWNhY2hlLiAgSWYgaXQgaXMKKyAqIG5vdCB0aGVuIHRoZSBHTlUvVmlraW5nIGlzIG9uIGEgbW9kdWxlIFZCVVMgY29ubmVjdGVkIGRpcmVjdGx5CisgKiB0byBhIEdOVS9NWENDIGNhY2hlIGNvbnRyb2xsZXIuICBUaGUgR05VL01YQ0MgY2FuIGJlIHRodXMgY29ubmVjdGVkCisgKiB0byBlaXRoZXIgYW4gR05VL01CVVMgKHN1bjRtKSBvciB0aGUgcGFja2V0LXN3aXRjaGVkIEdOVS9YQnVzIChzdW40ZCkuCisgKgorICogU0I6IFN0b3JlQnVmZmVyIGVuYWJsZSAtLSAwID0gc3RvcmUgYnVmZmVyIG9mZiwgMSA9IHN0b3JlIGJ1ZmZlciBvbgorICoKKyAqIFRoZSBHTlUvVmlraW5nIHN0b3JlIGJ1ZmZlciBhbGxvd3MgdGhlIGNoaXAgdG8gY29udGludWUgZXhlY3V0aW9uCisgKiBhZnRlciBhIHN0b3JlIGV2ZW4gaWYgdGhlIGRhdGEgY2Fubm90IGJlIHBsYWNlZCBpbiBvbmUgb2YgdGhlCisgKiBjYWNoZXMgZHVyaW5nIHRoYXQgY3ljbGUuICBJZiBkaXNhYmxlZCwgYWxsIHN0b3JlcyBvcGVyYXRpb25zCisgKiBvY2N1ciBzeW5jaHJvbm91c2x5LgorICoKKyAqIElDOiBJbnN0cnVjdGlvbiBDYWNoZSAtLSAwID0gb2ZmLCAxID0gb24KKyAqIERDOiBEYXRhIENhY2hlIC0tIDAgPSBvZmYsIDEgPSAwbgorICoKKyAqIFRoZXNlIGJpdHMgZW5hYmxlIHRoZSBvbi1jcHUgR05VL1Zpa2luZyBzcGxpdCBJL0QgY2FjaGVzLiAgTm90ZSwKKyAqIGFzIG1lbnRpb25lZCBhYm92ZSwgdGhlc2UgY2FjaGVzIHdpbGwgc25vb3AgdGhlIGJ1cyBpbiBHTlUvTUJVUworICogY29uZmlndXJhdGlvbnMgZXZlbiB3aGVuIGRpc2FibGVkIHRvIGF2b2lkIGRhdGEgY29ycnVwdGlvbi4KKyAqCisgKiBORjogTm8gRmF1bHQgLS0gMCA9IGZhdWx0cyBnZW5lcmF0ZSB0cmFwcywgMSA9IGZhdWx0cyBkb24ndCB0cmFwCisgKiBNRTogTU1VIGVuYWJsZSAtLSAwID0gbW11IG5vdCB0cmFuc2xhdGluZywgMSA9IG1tdSB0cmFuc2xhdGluZworICoKKyAqLworCisjZGVmaW5lIFZJS0lOR19NTVVFTkFCTEUgICAgMHgwMDAwMDAwMQorI2RlZmluZSBWSUtJTkdfTk9GQVVMVCAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgVklLSU5HX1BTTyAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIFZJS0lOR19EQ0VOQUJMRSAgICAgMHgwMDAwMDEwMCAgIC8qIEVuYWJsZSBkYXRhIGNhY2hlICovCisjZGVmaW5lIFZJS0lOR19JQ0VOQUJMRSAgICAgMHgwMDAwMDIwMCAgIC8qIEVuYWJsZSBpbnN0cnVjdGlvbiBjYWNoZSAqLworI2RlZmluZSBWSUtJTkdfU0JFTkFCTEUgICAgIDB4MDAwMDA0MDAgICAvKiBFbmFibGUgc3RvcmUgYnVmZmVyICovCisjZGVmaW5lIFZJS0lOR19NTU9ERSAgICAgICAgMHgwMDAwMDgwMCAgIC8qIE1CVVMgbW9kZSAqLworI2RlZmluZSBWSUtJTkdfUENFTkFCTEUgICAgIDB4MDAwMDEwMDAgICAvKiBFbmFibGUgcGFyaXR5IGNoZWNraW5nICovCisjZGVmaW5lIFZJS0lOR19CTU9ERSAgICAgICAgMHgwMDAwMjAwMCAgIAorI2RlZmluZSBWSUtJTkdfU1BFTkFCTEUgICAgIDB4MDAwMDQwMDAgICAvKiBFbmFibGUgYnVzIGNhY2hlIHNub29waW5nICovCisjZGVmaW5lIFZJS0lOR19BQ0VOQUJMRSAgICAgMHgwMDAwODAwMCAgIC8qIEVuYWJsZSBhbHRlcm5hdGUgY2FjaGluZyAqLworI2RlZmluZSBWSUtJTkdfVENFTkFCTEUgICAgIDB4MDAwMTAwMDAgICAvKiBFbmFibGUgdGFibGUtd2Fsa3MgdG8gYmUgY2FjaGVkICovCisjZGVmaW5lIFZJS0lOR19EUEVOQUJMRSAgICAgMHgwMDA0MDAwMCAgIC8qIEVuYWJsZSB0aGUgZGF0YSBwcmVmZXRjaGVyICovCisKKy8qCisgKiBHTlUvVmlraW5nIEJyZWFrcG9pbnQgQWN0aW9uIFJlZ2lzdGVyIGZpZWxkcy4KKyAqLworI2RlZmluZSBWSUtJTkdfQUNUSU9OX01JWCAgIDB4MDAwMDEwMDAgICAvKiBFbmFibGUgbXVsdGlwbGUgaW5zdHJ1Y3Rpb25zICovCisKKy8qCisgKiBHTlUvVmlraW5nIENhY2hlIFRhZ3MuCisgKi8KKyNkZWZpbmUgVklLSU5HX1BUQUdfVkFMSUQgICAweDAxMDAwMDAwICAgLyogQ2FjaGUgYmxvY2sgaXMgdmFsaWQgKi8KKyNkZWZpbmUgVklLSU5HX1BUQUdfRElSVFkgICAweDAwMDEwMDAwICAgLyogQmxvY2sgaGFzIGJlZW4gbW9kaWZpZWQgKi8KKyNkZWZpbmUgVklLSU5HX1BUQUdfU0hBUkVEICAweDAwMDAwMTAwICAgLyogU2hhcmVkIHdpdGggc29tZSBvdGhlciBjYWNoZSAqLworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCitzdGF0aWMgaW5saW5lIHZvaWQgdmlraW5nX2ZsdXNoX2ljYWNoZSh2b2lkKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdGEgJSVnMCwgWyUlZzBdICUwXG5cdCIKKwkJCSAgICAgOiAvKiBubyBvdXRwdXRzICovCisJCQkgICAgIDogImkiIChBU0lfTV9JQ19GTENMRUFSKQorCQkJICAgICA6ICJtZW1vcnkiKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHZpa2luZ19mbHVzaF9kY2FjaGUodm9pZCkKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RhICUlZzAsIFslJWcwXSAlMFxuXHQiCisJCQkgICAgIDogLyogbm8gb3V0cHV0cyAqLworCQkJICAgICA6ICJpIiAoQVNJX01fRENfRkxDTEVBUikKKwkJCSAgICAgOiAibWVtb3J5Iik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB2aWtpbmdfdW5sb2NrX2ljYWNoZSh2b2lkKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdGEgJSVnMCwgWyUwXSAlMVxuXHQiCisJCQkgICAgIDogLyogbm8gb3V0cHV0cyAqLworCQkJICAgICA6ICJyIiAoMHg4MDAwMDAwMCksICJpIiAoQVNJX01fSUNfRkxDTEVBUikKKwkJCSAgICAgOiAibWVtb3J5Iik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB2aWtpbmdfdW5sb2NrX2RjYWNoZSh2b2lkKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdGEgJSVnMCwgWyUwXSAlMVxuXHQiCisJCQkgICAgIDogLyogbm8gb3V0cHV0cyAqLworCQkJICAgICA6ICJyIiAoMHg4MDAwMDAwMCksICJpIiAoQVNJX01fRENfRkxDTEVBUikKKwkJCSAgICAgOiAibWVtb3J5Iik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB2aWtpbmdfc2V0X2JwcmVnKHVuc2lnbmVkIGxvbmcgcmVndmFsKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdGEgJTAsIFslJWcwXSAlMVxuXHQiCisJCQkgICAgIDogLyogbm8gb3V0cHV0cyAqLworCQkJICAgICA6ICJyIiAocmVndmFsKSwgImkiIChBU0lfTV9BQ1RJT04pCisJCQkgICAgIDogIm1lbW9yeSIpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdmlraW5nX2dldF9icHJlZyh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgcmVndmFsOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oImxkYSBbJSVnMF0gJTEsICUwXG5cdCIKKwkJCSAgICAgOiAiPXIiIChyZWd2YWwpCisJCQkgICAgIDogImkiIChBU0lfTV9BQ1RJT04pKTsKKwlyZXR1cm4gcmVndmFsOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdmlraW5nX2dldF9kY2FjaGVfcHRhZyhpbnQgc2V0LCBpbnQgYmxvY2ssCisJCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgKmRhdGEpCit7CisJdW5zaWduZWQgbG9uZyBwdGFnID0gKChzZXQgJiAweDdmKSA8PCA1KSB8ICgoYmxvY2sgJiAweDMpIDw8IDI2KSB8CisJCQkgICAgIDB4ODAwMDAwMDA7CisJdW5zaWduZWQgbG9uZyBpbmZvLCBwYWdlOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJsZGRhIFslMl0gJTMsICUlZzJcblx0IgorCQkJICAgICAgIm9yICUlZzAsICUlZzIsICUwXG5cdCIKKwkJCSAgICAgICJvciAlJWcwLCAlJWczLCAlMVxuXHQiCisJCQkgICAgICA6ICI9ciIgKGluZm8pLCAiPXIiIChwYWdlKQorCQkJICAgICAgOiAiciIgKHB0YWcpLCAiaSIgKEFTSV9NX0RBVEFDX1RBRykKKwkJCSAgICAgIDogImcyIiwgImczIik7CisJZGF0YVswXSA9IGluZm87CisJZGF0YVsxXSA9IHBhZ2U7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB2aWtpbmdfbXhjY190dXJuX29mZl9wYXJpdHkodW5zaWduZWQgbG9uZyAqbXJlZ3AsCisJCQkJCQkgICB1bnNpZ25lZCBsb25nICpteGNjX2NyZWdwKQoreworCXVuc2lnbmVkIGxvbmcgbXJlZyA9ICptcmVncDsKKwl1bnNpZ25lZCBsb25nIG14Y2NfY3JlZyA9ICpteGNjX2NyZWdwOworCisJbXJlZyAmPSB+KFZJS0lOR19QQ0VOQUJMRSk7CisJbXhjY19jcmVnICY9IH4oTVhDQ19DVExfUEFSRSk7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInNldCAxZiwgJSVnMlxuXHQiCisJCQkgICAgICAiYW5kY2MgJSVnMiwgNCwgJSVnMFxuXHQiCisJCQkgICAgICAiYm5lIDJmXG5cdCIKKwkJCSAgICAgICIgbm9wXG4iCisJCQkgICAgICAiMTpcblx0IgorCQkJICAgICAgInN0YSAlMCwgWyUlZzBdICUzXG5cdCIKKwkJCSAgICAgICJzdGEgJTEsIFslMl0gJTRcblx0IgorCQkJICAgICAgImIgMWZcblx0IgorCQkJICAgICAgIiBub3Bcblx0IgorCQkJICAgICAgIm5vcFxuIgorCQkJICAgICAgIjI6XG5cdCIKKwkJCSAgICAgICJzdGEgJTAsIFslJWcwXSAlM1xuXHQiCisJCQkgICAgICAic3RhICUxLCBbJTJdICU0XG4iCisJCQkgICAgICAiMTpcblx0IgorCQkJICAgICAgOiAvKiBubyBvdXRwdXQgKi8KKwkJCSAgICAgIDogInIiIChtcmVnKSwgInIiIChteGNjX2NyZWcpLAorCQkJICAgICAgICAiciIgKE1YQ0NfQ1JFRyksICJpIiAoQVNJX01fTU1VUkVHUyksCisJCQkgICAgICAgICJpIiAoQVNJX01fTVhDQykKKwkJCSAgICAgIDogImcyIiwgIm1lbW9yeSIsICJjYyIpOworCSptcmVncCA9IG1yZWc7CisJKm14Y2NfY3JlZ3AgPSBteGNjX2NyZWc7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB2aWtpbmdfaHdwcm9iZSh1bnNpZ25lZCBsb25nIHZhZGRyKQoreworCXVuc2lnbmVkIGxvbmcgdmFsOworCisJdmFkZHIgJj0gUEFHRV9NQVNLOworCS8qIFByb2JlIGFsbCBNTVUgZW50cmllcy4gKi8KKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibGRhIFslMV0gJTIsICUwXG5cdCIKKwkJCSAgICAgOiAiPXIiICh2YWwpCisJCQkgICAgIDogInIiICh2YWRkciB8IDB4NDAwKSwgImkiIChBU0lfTV9GTFVTSF9QUk9CRSkpOworCWlmICghdmFsKQorCQlyZXR1cm4gMDsKKworCS8qIFByb2JlIHJlZ2lvbi4gKi8KKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibGRhIFslMV0gJTIsICUwXG5cdCIKKwkJCSAgICAgOiAiPXIiICh2YWwpCisJCQkgICAgIDogInIiICh2YWRkciB8IDB4MjAwKSwgImkiIChBU0lfTV9GTFVTSF9QUk9CRSkpOworCWlmICgodmFsICYgU1JNTVVfRVRfTUFTSykgPT0gU1JNTVVfRVRfUFRFKSB7CisJCXZhZGRyICY9IH5TUk1NVV9QR0RJUl9NQVNLOworCQl2YWRkciA+Pj0gUEFHRV9TSElGVDsKKwkJcmV0dXJuIHZhbCB8ICh2YWRkciA8PCA4KTsKKwl9CisKKwkvKiBQcm9iZSBzZWdtZW50LiAqLworCV9fYXNtX18gX192b2xhdGlsZV9fKCJsZGEgWyUxXSAlMiwgJTBcblx0IgorCQkJICAgICA6ICI9ciIgKHZhbCkKKwkJCSAgICAgOiAiciIgKHZhZGRyIHwgMHgxMDApLCAiaSIgKEFTSV9NX0ZMVVNIX1BST0JFKSk7CisJaWYgKCh2YWwgJiBTUk1NVV9FVF9NQVNLKSA9PSBTUk1NVV9FVF9QVEUpIHsKKwkJdmFkZHIgJj0gflNSTU1VX1JFQUxfUE1EX01BU0s7CisJCXZhZGRyID4+PSBQQUdFX1NISUZUOworCQlyZXR1cm4gdmFsIHwgKHZhZGRyIDw8IDgpOworCX0KKworCS8qIFByb2JlIHBhZ2UuICovCisJX19hc21fXyBfX3ZvbGF0aWxlX18oImxkYSBbJTFdICUyLCAlMFxuXHQiCisJCQkgICAgIDogIj1yIiAodmFsKQorCQkJICAgICA6ICJyIiAodmFkZHIpLCAiaSIgKEFTSV9NX0ZMVVNIX1BST0JFKSk7CisJcmV0dXJuIHZhbDsKK30KKworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKworI2VuZGlmIC8qICEoX1NQQVJDX1ZJS0lOR19IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvdnVpZF9ldmVudC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvdnVpZF9ldmVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3ODFlOWYyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvdnVpZF9ldmVudC5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qIFN1bk9TIFZpcnR1YWwgVXNlciBJbnB1dCBEZXZpY2UgKFZVSUQpIGNvbXBhdGliaWxpdHkgKi8KKworCit0eXBlZGVmIHN0cnVjdCBmaXJtX2V2ZW50IHsKKwl1bnNpZ25lZCBzaG9ydCBpZDsJICAvKiB0YWcgZm9yIHRoaXMgZXZlbnQgKi8KKwl1bnNpZ25lZCBjaGFyICBwYWlyX3R5cGU7IC8qIHVudXNlZCBieSBYMTEgKi8KKyAgICAgICAgdW5zaWduZWQgY2hhciAgcGFpcjsJICAvKiB1bnVzZWQgYnkgWDExICovCisgICAgICAgIGludCAgICAgICAgICAgIHZhbHVlOwkgIC8qIFZLRVlfVVAsIFZLRVlfRE9XTiBvciBkZWx0YSAqLworICAgICAgICBzdHJ1Y3QgdGltZXZhbCB0aW1lOworfSBGaXJtX2V2ZW50OworCitlbnVtIHsKKyAgICBGRV9QQUlSX05PTkUsCisgICAgRkVfUEFJUl9TRVQsCisgICAgRkVfUEFJUl9ERUxUQSwKKyAgICBGRV9QQUlSX0FCU09MVVRFCit9OworCisvKiBWVUlEIHN0cmVhbSBmb3JtYXRzICovCisjZGVmaW5lIFZVSURfTkFUSVZFICAgICAwCS8qIE5hdGl2ZSBieXRlIHN0cmVhbSBmb3JtYXQgKi8KKyNkZWZpbmUgVlVJRF9GSVJNX0VWRU5UIDEJLyogc2VuZCBmaXJtX2V2ZW50IHN0cnVjdHVyZXMgKi8KKworLyogaW9jdGxzICovCisgICAgLyogU2V0IGlucHV0IGRldmljZSBieXRlIHN0cmVhbSBmb3JtYXQgKGFueSBvZiBWVUlEX3tOQVRJVkUsRklSTV9FVkVOVH0pICovCisjZGVmaW5lIFZVSURTRk9STUFUICAgX0lPVygndicsIDEsIGludCkKKyAgICAvKiBSZXRyaWV2ZSBpbnB1dCBkZXZpY2UgYnl0ZSBzdHJlYW0gZm9ybWF0ICovCisjZGVmaW5lIFZVSURHRk9STUFUICAgX0lPUigndicsIDIsIGludCkKKworLyogUG9zc2libGUgdGFnIHZhbHVlcyAqLworLyogICAgbW91c2UgYnV0dG9uczogKi8KKyNkZWZpbmUgTVNfTEVGVCAgICAgICAgIDB4N2YyMAorI2RlZmluZSBNU19NSURETEUgICAgICAgMHg3ZjIxCisjZGVmaW5lIE1TX1JJR0hUICAgICAgICAweDdmMjIKKy8qICAgIG1vdGlvbjogKi8KKyNkZWZpbmUgTE9DX1hfREVMVEEgICAgIDB4N2Y4MAorI2RlZmluZSBMT0NfWV9ERUxUQSAgICAgMHg3ZjgxCisjZGVmaW5lIExPQ19YX0FCU09MVVRFICAweDdmODIgIC8qIFggY29tcGF0LCB1bnN1cHBvcnRlZCAqLworI2RlZmluZSBMT0NfWV9BQlNPTFVURSAgMHg3ZjgzICAvKiBYIGNvbXBhdCwgdW5zdXBwb3J0ZWQgKi8KKworI2RlZmluZSBWS0VZX1VQICAgMAorI2RlZmluZSBWS0VZX0RPV04gMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvd2lubWFjcm8uaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3dpbm1hY3JvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU3MjU3ZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3dpbm1hY3JvLmgKQEAgLTAsMCArMSwxMzYgQEAKKy8qICRJZDogd2lubWFjcm8uaCx2IDEuMjIgMjAwMC8wNS8wOSAxNzo0MDoxNSBkYXZlbSBFeHAgJAorICogd2lubWFjcm8uaDogV2luZG93IGxvYWRpbmctdW5sb2FkaW5nIG1hY3Jvcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQorICovCisKKyNpZm5kZWYgX1NQQVJDX1dJTk1BQ1JPX0gKKyNkZWZpbmUgX1NQQVJDX1dJTk1BQ1JPX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKworLyogU3RvcmUgdGhlIHJlZ2lzdGVyIHdpbmRvdyBvbnRvIHRoZSA4LWJ5dGUgYWxpZ25lZCBhcmVhIHN0YXJ0aW5nCisgKiBhdCAlcmVnLiAgSXQgbWlnaHQgYmUgJXNwLCBpdCBtaWdodCBub3QsIHdlIGRvbid0IGNhcmUuCisgKi8KKyNkZWZpbmUgU1RPUkVfV0lORE9XKHJlZykgXAorCXN0ZAklbDAsIFslcmVnICsgUldfTDBdOyBcCisJc3RkCSVsMiwgWyVyZWcgKyBSV19MMl07IFwKKwlzdGQJJWw0LCBbJXJlZyArIFJXX0w0XTsgXAorCXN0ZAklbDYsIFslcmVnICsgUldfTDZdOyBcCisJc3RkCSVpMCwgWyVyZWcgKyBSV19JMF07IFwKKwlzdGQJJWkyLCBbJXJlZyArIFJXX0kyXTsgXAorCXN0ZAklaTQsIFslcmVnICsgUldfSTRdOyBcCisJc3RkCSVpNiwgWyVyZWcgKyBSV19JNl07CisKKy8qIExvYWQgYSByZWdpc3RlciB3aW5kb3cgZnJvbSB0aGUgYXJlYSBiZWdpbm5pbmcgYXQgJXJlZy4gKi8KKyNkZWZpbmUgTE9BRF9XSU5ET1cocmVnKSBcCisJbGRkCVslcmVnICsgUldfTDBdLCAlbDA7IFwKKwlsZGQJWyVyZWcgKyBSV19MMl0sICVsMjsgXAorCWxkZAlbJXJlZyArIFJXX0w0XSwgJWw0OyBcCisJbGRkCVslcmVnICsgUldfTDZdLCAlbDY7IFwKKwlsZGQJWyVyZWcgKyBSV19JMF0sICVpMDsgXAorCWxkZAlbJXJlZyArIFJXX0kyXSwgJWkyOyBcCisJbGRkCVslcmVnICsgUldfSTRdLCAlaTQ7IFwKKwlsZGQJWyVyZWcgKyBSV19JNl0sICVpNjsKKworLyogTG9hZGluZyBhbmQgc3RvcmluZyBzdHJ1Y3QgcHRfcmVnIHRyYXAgZnJhbWVzLiAqLworI2RlZmluZSBMT0FEX1BUX0lOUyhiYXNlX3JlZykgXAorICAgICAgICBsZGQgICAgIFslYmFzZV9yZWcgKyBTVEFDS0ZSQU1FX1NaICsgUFRfSTBdLCAlaTA7IFwKKyAgICAgICAgbGRkICAgICBbJWJhc2VfcmVnICsgU1RBQ0tGUkFNRV9TWiArIFBUX0kyXSwgJWkyOyBcCisgICAgICAgIGxkZCAgICAgWyViYXNlX3JlZyArIFNUQUNLRlJBTUVfU1ogKyBQVF9JNF0sICVpNDsgXAorICAgICAgICBsZGQgICAgIFslYmFzZV9yZWcgKyBTVEFDS0ZSQU1FX1NaICsgUFRfSTZdLCAlaTY7CisKKyNkZWZpbmUgTE9BRF9QVF9HTE9CQUxTKGJhc2VfcmVnKSBcCisgICAgICAgIGxkICAgICAgWyViYXNlX3JlZyArIFNUQUNLRlJBTUVfU1ogKyBQVF9HMV0sICVnMTsgXAorICAgICAgICBsZGQgICAgIFslYmFzZV9yZWcgKyBTVEFDS0ZSQU1FX1NaICsgUFRfRzJdLCAlZzI7IFwKKyAgICAgICAgbGRkICAgICBbJWJhc2VfcmVnICsgU1RBQ0tGUkFNRV9TWiArIFBUX0c0XSwgJWc0OyBcCisgICAgICAgIGxkZCAgICAgWyViYXNlX3JlZyArIFNUQUNLRlJBTUVfU1ogKyBQVF9HNl0sICVnNjsKKworI2RlZmluZSBMT0FEX1BUX1lSRUcoYmFzZV9yZWcsIHNjcmF0Y2gpIFwKKyAgICAgICAgbGQgICAgICBbJWJhc2VfcmVnICsgU1RBQ0tGUkFNRV9TWiArIFBUX1ldLCAlc2NyYXRjaDsgXAorICAgICAgICB3ciAgICAgICVzY3JhdGNoLCAweDAsICV5OworCisjZGVmaW5lIExPQURfUFRfUFJJVihiYXNlX3JlZywgcHRfcHNyLCBwdF9wYywgcHRfbnBjKSBcCisgICAgICAgIGxkICAgICAgWyViYXNlX3JlZyArIFNUQUNLRlJBTUVfU1ogKyBQVF9QU1JdLCAlcHRfcHNyOyBcCisgICAgICAgIGxkICAgICAgWyViYXNlX3JlZyArIFNUQUNLRlJBTUVfU1ogKyBQVF9QQ10sICVwdF9wYzsgXAorICAgICAgICBsZCAgICAgIFslYmFzZV9yZWcgKyBTVEFDS0ZSQU1FX1NaICsgUFRfTlBDXSwgJXB0X25wYzsKKworI2RlZmluZSBMT0FEX1BUX0FMTChiYXNlX3JlZywgcHRfcHNyLCBwdF9wYywgcHRfbnBjLCBzY3JhdGNoKSBcCisgICAgICAgIExPQURfUFRfWVJFRyhiYXNlX3JlZywgc2NyYXRjaCkgXAorICAgICAgICBMT0FEX1BUX0lOUyhiYXNlX3JlZykgXAorICAgICAgICBMT0FEX1BUX0dMT0JBTFMoYmFzZV9yZWcpIFwKKyAgICAgICAgTE9BRF9QVF9QUklWKGJhc2VfcmVnLCBwdF9wc3IsIHB0X3BjLCBwdF9ucGMpCisKKyNkZWZpbmUgU1RPUkVfUFRfSU5TKGJhc2VfcmVnKSBcCisgICAgICAgIHN0ZCAgICAgJWkwLCBbJWJhc2VfcmVnICsgU1RBQ0tGUkFNRV9TWiArIFBUX0kwXTsgXAorICAgICAgICBzdGQgICAgICVpMiwgWyViYXNlX3JlZyArIFNUQUNLRlJBTUVfU1ogKyBQVF9JMl07IFwKKyAgICAgICAgc3RkICAgICAlaTQsIFslYmFzZV9yZWcgKyBTVEFDS0ZSQU1FX1NaICsgUFRfSTRdOyBcCisgICAgICAgIHN0ZCAgICAgJWk2LCBbJWJhc2VfcmVnICsgU1RBQ0tGUkFNRV9TWiArIFBUX0k2XTsKKworI2RlZmluZSBTVE9SRV9QVF9HTE9CQUxTKGJhc2VfcmVnKSBcCisgICAgICAgIHN0ICAgICAgJWcxLCBbJWJhc2VfcmVnICsgU1RBQ0tGUkFNRV9TWiArIFBUX0cxXTsgXAorICAgICAgICBzdGQgICAgICVnMiwgWyViYXNlX3JlZyArIFNUQUNLRlJBTUVfU1ogKyBQVF9HMl07IFwKKyAgICAgICAgc3RkICAgICAlZzQsIFslYmFzZV9yZWcgKyBTVEFDS0ZSQU1FX1NaICsgUFRfRzRdOyBcCisgICAgICAgIHN0ZCAgICAgJWc2LCBbJWJhc2VfcmVnICsgU1RBQ0tGUkFNRV9TWiArIFBUX0c2XTsKKworI2RlZmluZSBTVE9SRV9QVF9ZUkVHKGJhc2VfcmVnLCBzY3JhdGNoKSBcCisgICAgICAgIHJkICAgICAgJXksICVzY3JhdGNoOyBcCisgICAgICAgIHN0ICAgICAgJXNjcmF0Y2gsIFslYmFzZV9yZWcgKyBTVEFDS0ZSQU1FX1NaICsgUFRfWV07CisKKyNkZWZpbmUgU1RPUkVfUFRfUFJJVihiYXNlX3JlZywgcHRfcHNyLCBwdF9wYywgcHRfbnBjKSBcCisgICAgICAgIHN0ICAgICAgJXB0X3BzciwgWyViYXNlX3JlZyArIFNUQUNLRlJBTUVfU1ogKyBQVF9QU1JdOyBcCisgICAgICAgIHN0ICAgICAgJXB0X3BjLCAgWyViYXNlX3JlZyArIFNUQUNLRlJBTUVfU1ogKyBQVF9QQ107IFwKKyAgICAgICAgc3QgICAgICAlcHRfbnBjLCBbJWJhc2VfcmVnICsgU1RBQ0tGUkFNRV9TWiArIFBUX05QQ107CisKKyNkZWZpbmUgU1RPUkVfUFRfQUxMKGJhc2VfcmVnLCByZWdfcHNyLCByZWdfcGMsIHJlZ19ucGMsIGdfc2NyYXRjaCkgXAorICAgICAgICBTVE9SRV9QVF9QUklWKGJhc2VfcmVnLCByZWdfcHNyLCByZWdfcGMsIHJlZ19ucGMpIFwKKyAgICAgICAgU1RPUkVfUFRfR0xPQkFMUyhiYXNlX3JlZykgXAorICAgICAgICBTVE9SRV9QVF9ZUkVHKGJhc2VfcmVnLCBnX3NjcmF0Y2gpIFwKKyAgICAgICAgU1RPUkVfUFRfSU5TKGJhc2VfcmVnKQorCisjZGVmaW5lIFNBVkVfQk9MSVhFRF9VU0VSX1NUQUNLKGN1cl9yZWcsIHNjcmF0Y2gpIFwKKyAgICAgICAgbGQgICAgICAgWyVjdXJfcmVnICsgVElfV19TQVZFRF0sICVzY3JhdGNoOyBcCisgICAgICAgIHNsbCAgICAgICVzY3JhdGNoLCAyLCAlc2NyYXRjaDsgXAorICAgICAgICBhZGQgICAgICAlc2NyYXRjaCwgJWN1cl9yZWcsICVzY3JhdGNoOyBcCisgICAgICAgIHN0ICAgICAgICVzcCwgWyVzY3JhdGNoICsgVElfUldJTl9TUFRSU107IFwKKyAgICAgICAgc3ViICAgICAgJXNjcmF0Y2gsICVjdXJfcmVnLCAlc2NyYXRjaDsgXAorICAgICAgICBzbGwgICAgICAlc2NyYXRjaCwgNCwgJXNjcmF0Y2g7IFwKKyAgICAgICAgYWRkICAgICAgJXNjcmF0Y2gsICVjdXJfcmVnLCAlc2NyYXRjaDsgXAorICAgICAgICBTVE9SRV9XSU5ET1coc2NyYXRjaCArIFRJX1JFR19XSU5ET1cpOyBcCisgICAgICAgIHN1YiAgICAgICVzY3JhdGNoLCAlY3VyX3JlZywgJXNjcmF0Y2g7IFwKKyAgICAgICAgc3JsICAgICAgJXNjcmF0Y2gsIDYsICVzY3JhdGNoOyBcCisgICAgICAgIGFkZCAgICAgICVzY3JhdGNoLCAxLCAlc2NyYXRjaDsgXAorICAgICAgICBzdCAgICAgICAlc2NyYXRjaCwgWyVjdXJfcmVnICsgVElfV19TQVZFRF07CisKKyNpZmRlZiBDT05GSUdfU01QCisjZGVmaW5lIExPQURfQ1VSUkVOVDRNKGRlc3RfcmVnLCBpZHJlZykgXAorICAgICAgICByZCAgICAgICAldGJyLCAlaWRyZWc7IFwKKwlzZXRoaSAgICAlaGkoY3VycmVudF9zZXQpLCAlZGVzdF9yZWc7IFwKKyAgICAgICAgc3JsICAgICAgJWlkcmVnLCAxMCwgJWlkcmVnOyBcCisJb3IgICAgICAgJWRlc3RfcmVnLCAlbG8oY3VycmVudF9zZXQpLCAlZGVzdF9yZWc7IFwKKwlhbmQgICAgICAlaWRyZWcsIDB4YywgJWlkcmVnOyBcCisJbGQgICAgICAgWyVpZHJlZyArICVkZXN0X3JlZ10sICVkZXN0X3JlZzsKKworI2RlZmluZSBMT0FEX0NVUlJFTlQ0RChkZXN0X3JlZywgaWRyZWcpIFwKKwlsZGEJIFslZzBdIEFTSV9NX1ZJS0lOR19UTVAxLCAlaWRyZWc7IFwKKwlzZXRoaQklaGkoQ19MQUJFTChjdXJyZW50X3NldCkpLCAlZGVzdF9yZWc7IFwKKwlzbGwJJWlkcmVnLCAyLCAlaWRyZWc7IFwKKwlvcgklZGVzdF9yZWcsICVsbyhDX0xBQkVMKGN1cnJlbnRfc2V0KSksICVkZXN0X3JlZzsgXAorCWxkCVslaWRyZWcgKyAlZGVzdF9yZWddLCAlZGVzdF9yZWc7CisKKy8qIEJsYWNrYm94IC0gdGFrZSBjYXJlIHdpdGggdGhpcy4uLiAtIGNoZWNrIHNtcDRtIGFuZCBzbXA0ZCBiZWZvcmUgY2hhbmdpbmcgdGhpcy4gKi8KKyNkZWZpbmUgTE9BRF9DVVJSRU5UKGRlc3RfcmVnLCBpZHJlZykgCQkJCQlcCisJc2V0aGkJICVoaShfX19iX2xvYWRfY3VycmVudCksICVpZHJlZzsJCQlcCisJc2V0aGkgICAgJWhpKGN1cnJlbnRfc2V0KSwgJWRlc3RfcmVnOyAJCQlcCisJc2V0aGkgICAgJWhpKGJvb3RfY3B1X2lkNCksICVpZHJlZzsgCQkJXAorCW9yICAgICAgICVkZXN0X3JlZywgJWxvKGN1cnJlbnRfc2V0KSwgJWRlc3RfcmVnOyAJXAorCWxkdWIJIFslaWRyZWcgKyAlbG8oYm9vdF9jcHVfaWQ0KV0sICVpZHJlZzsJCVwKKwlsZCAgICAgICBbJWlkcmVnICsgJWRlc3RfcmVnXSwgJWRlc3RfcmVnOworI2Vsc2UKKyNkZWZpbmUgTE9BRF9DVVJSRU5UKGRlc3RfcmVnLCBpZHJlZykgXAorICAgICAgICBzZXRoaSAgICAlaGkoY3VycmVudF9zZXQpLCAlaWRyZWc7IFwKKyAgICAgICAgbGQgICAgICAgWyVpZHJlZyArICVsbyhjdXJyZW50X3NldCldLCAlZGVzdF9yZWc7CisjZW5kaWYKKworI2VuZGlmIC8qICEoX1NQQVJDX1dJTk1BQ1JPX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy94b3IuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3hvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzNGIyY2YKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy94b3IuaApAQCAtMCwwICsxLDI2OSBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLXNwYXJjL3hvci5oCisgKgorICogT3B0aW1pemVkIFJBSUQtNSBjaGVja3N1bW1pbmcgZnVuY3Rpb25zIGZvciAzMi1iaXQgU3BhcmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogKGZvciBleGFtcGxlIC91c3Ivc3JjL2xpbnV4L0NPUFlJTkcpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisvKgorICogSGlnaCBzcGVlZCB4b3JfYmxvY2sgb3BlcmF0aW9uIGZvciBSQUlENC81IHV0aWxpemluZyB0aGUKKyAqIGxkZC9zdGQgU1BBUkMgaW5zdHJ1Y3Rpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBKYWt1YiBKZWxpbmVrIChqakB1bHRyYS5saW51eC5jeikKKyAqLworCitzdGF0aWMgdm9pZAorc3BhcmNfMih1bnNpZ25lZCBsb25nIGJ5dGVzLCB1bnNpZ25lZCBsb25nICpwMSwgdW5zaWduZWQgbG9uZyAqcDIpCit7CisJaW50IGxpbmVzID0gYnl0ZXMgLyAoc2l6ZW9mIChsb25nKSkgLyA4OworCisJZG8geworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJICAibGRkIFslMCArIDB4MDBdLCAlJWcyXG5cdCIKKwkJICAibGRkIFslMCArIDB4MDhdLCAlJWc0XG5cdCIKKwkJICAibGRkIFslMCArIDB4MTBdLCAlJW8wXG5cdCIKKwkJICAibGRkIFslMCArIDB4MThdLCAlJW8yXG5cdCIKKwkJICAibGRkIFslMSArIDB4MDBdLCAlJW80XG5cdCIKKwkJICAibGRkIFslMSArIDB4MDhdLCAlJWwwXG5cdCIKKwkJICAibGRkIFslMSArIDB4MTBdLCAlJWwyXG5cdCIKKwkJICAibGRkIFslMSArIDB4MThdLCAlJWw0XG5cdCIKKwkJICAieG9yICUlZzIsICUlbzQsICUlZzJcblx0IgorCQkgICJ4b3IgJSVnMywgJSVvNSwgJSVnM1xuXHQiCisJCSAgInhvciAlJWc0LCAlJWwwLCAlJWc0XG5cdCIKKwkJICAieG9yICUlZzUsICUlbDEsICUlZzVcblx0IgorCQkgICJ4b3IgJSVvMCwgJSVsMiwgJSVvMFxuXHQiCisJCSAgInhvciAlJW8xLCAlJWwzLCAlJW8xXG5cdCIKKwkJICAieG9yICUlbzIsICUlbDQsICUlbzJcblx0IgorCQkgICJ4b3IgJSVvMywgJSVsNSwgJSVvM1xuXHQiCisJCSAgInN0ZCAlJWcyLCBbJTAgKyAweDAwXVxuXHQiCisJCSAgInN0ZCAlJWc0LCBbJTAgKyAweDA4XVxuXHQiCisJCSAgInN0ZCAlJW8wLCBbJTAgKyAweDEwXVxuXHQiCisJCSAgInN0ZCAlJW8yLCBbJTAgKyAweDE4XVxuIgorCQk6CisJCTogInIiIChwMSksICJyIiAocDIpCisJCTogImcyIiwgImczIiwgImc0IiwgImc1IiwKKwkJICAibzAiLCAibzEiLCAibzIiLCAibzMiLCAibzQiLCAibzUiLAorCQkgICJsMCIsICJsMSIsICJsMiIsICJsMyIsICJsNCIsICJsNSIpOworCQlwMSArPSA4OworCQlwMiArPSA4OworCX0gd2hpbGUgKC0tbGluZXMgPiAwKTsKK30KKworc3RhdGljIHZvaWQKK3NwYXJjXzModW5zaWduZWQgbG9uZyBieXRlcywgdW5zaWduZWQgbG9uZyAqcDEsIHVuc2lnbmVkIGxvbmcgKnAyLAorCXVuc2lnbmVkIGxvbmcgKnAzKQoreworCWludCBsaW5lcyA9IGJ5dGVzIC8gKHNpemVvZiAobG9uZykpIC8gODsKKworCWRvIHsKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSAgImxkZCBbJTAgKyAweDAwXSwgJSVnMlxuXHQiCisJCSAgImxkZCBbJTAgKyAweDA4XSwgJSVnNFxuXHQiCisJCSAgImxkZCBbJTAgKyAweDEwXSwgJSVvMFxuXHQiCisJCSAgImxkZCBbJTAgKyAweDE4XSwgJSVvMlxuXHQiCisJCSAgImxkZCBbJTEgKyAweDAwXSwgJSVvNFxuXHQiCisJCSAgImxkZCBbJTEgKyAweDA4XSwgJSVsMFxuXHQiCisJCSAgImxkZCBbJTEgKyAweDEwXSwgJSVsMlxuXHQiCisJCSAgImxkZCBbJTEgKyAweDE4XSwgJSVsNFxuXHQiCisJCSAgInhvciAlJWcyLCAlJW80LCAlJWcyXG5cdCIKKwkJICAieG9yICUlZzMsICUlbzUsICUlZzNcblx0IgorCQkgICJsZGQgWyUyICsgMHgwMF0sICUlbzRcblx0IgorCQkgICJ4b3IgJSVnNCwgJSVsMCwgJSVnNFxuXHQiCisJCSAgInhvciAlJWc1LCAlJWwxLCAlJWc1XG5cdCIKKwkJICAibGRkIFslMiArIDB4MDhdLCAlJWwwXG5cdCIKKwkJICAieG9yICUlbzAsICUlbDIsICUlbzBcblx0IgorCQkgICJ4b3IgJSVvMSwgJSVsMywgJSVvMVxuXHQiCisJCSAgImxkZCBbJTIgKyAweDEwXSwgJSVsMlxuXHQiCisJCSAgInhvciAlJW8yLCAlJWw0LCAlJW8yXG5cdCIKKwkJICAieG9yICUlbzMsICUlbDUsICUlbzNcblx0IgorCQkgICJsZGQgWyUyICsgMHgxOF0sICUlbDRcblx0IgorCQkgICJ4b3IgJSVnMiwgJSVvNCwgJSVnMlxuXHQiCisJCSAgInhvciAlJWczLCAlJW81LCAlJWczXG5cdCIKKwkJICAieG9yICUlZzQsICUlbDAsICUlZzRcblx0IgorCQkgICJ4b3IgJSVnNSwgJSVsMSwgJSVnNVxuXHQiCisJCSAgInhvciAlJW8wLCAlJWwyLCAlJW8wXG5cdCIKKwkJICAieG9yICUlbzEsICUlbDMsICUlbzFcblx0IgorCQkgICJ4b3IgJSVvMiwgJSVsNCwgJSVvMlxuXHQiCisJCSAgInhvciAlJW8zLCAlJWw1LCAlJW8zXG5cdCIKKwkJICAic3RkICUlZzIsIFslMCArIDB4MDBdXG5cdCIKKwkJICAic3RkICUlZzQsIFslMCArIDB4MDhdXG5cdCIKKwkJICAic3RkICUlbzAsIFslMCArIDB4MTBdXG5cdCIKKwkJICAic3RkICUlbzIsIFslMCArIDB4MThdXG4iCisJCToKKwkJOiAiciIgKHAxKSwgInIiIChwMiksICJyIiAocDMpCisJCTogImcyIiwgImczIiwgImc0IiwgImc1IiwKKwkJICAibzAiLCAibzEiLCAibzIiLCAibzMiLCAibzQiLCAibzUiLAorCQkgICJsMCIsICJsMSIsICJsMiIsICJsMyIsICJsNCIsICJsNSIpOworCQlwMSArPSA4OworCQlwMiArPSA4OworCQlwMyArPSA4OworCX0gd2hpbGUgKC0tbGluZXMgPiAwKTsKK30KKworc3RhdGljIHZvaWQKK3NwYXJjXzQodW5zaWduZWQgbG9uZyBieXRlcywgdW5zaWduZWQgbG9uZyAqcDEsIHVuc2lnbmVkIGxvbmcgKnAyLAorCXVuc2lnbmVkIGxvbmcgKnAzLCB1bnNpZ25lZCBsb25nICpwNCkKK3sKKwlpbnQgbGluZXMgPSBieXRlcyAvIChzaXplb2YgKGxvbmcpKSAvIDg7CisKKwlkbyB7CisJCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkgICJsZGQgWyUwICsgMHgwMF0sICUlZzJcblx0IgorCQkgICJsZGQgWyUwICsgMHgwOF0sICUlZzRcblx0IgorCQkgICJsZGQgWyUwICsgMHgxMF0sICUlbzBcblx0IgorCQkgICJsZGQgWyUwICsgMHgxOF0sICUlbzJcblx0IgorCQkgICJsZGQgWyUxICsgMHgwMF0sICUlbzRcblx0IgorCQkgICJsZGQgWyUxICsgMHgwOF0sICUlbDBcblx0IgorCQkgICJsZGQgWyUxICsgMHgxMF0sICUlbDJcblx0IgorCQkgICJsZGQgWyUxICsgMHgxOF0sICUlbDRcblx0IgorCQkgICJ4b3IgJSVnMiwgJSVvNCwgJSVnMlxuXHQiCisJCSAgInhvciAlJWczLCAlJW81LCAlJWczXG5cdCIKKwkJICAibGRkIFslMiArIDB4MDBdLCAlJW80XG5cdCIKKwkJICAieG9yICUlZzQsICUlbDAsICUlZzRcblx0IgorCQkgICJ4b3IgJSVnNSwgJSVsMSwgJSVnNVxuXHQiCisJCSAgImxkZCBbJTIgKyAweDA4XSwgJSVsMFxuXHQiCisJCSAgInhvciAlJW8wLCAlJWwyLCAlJW8wXG5cdCIKKwkJICAieG9yICUlbzEsICUlbDMsICUlbzFcblx0IgorCQkgICJsZGQgWyUyICsgMHgxMF0sICUlbDJcblx0IgorCQkgICJ4b3IgJSVvMiwgJSVsNCwgJSVvMlxuXHQiCisJCSAgInhvciAlJW8zLCAlJWw1LCAlJW8zXG5cdCIKKwkJICAibGRkIFslMiArIDB4MThdLCAlJWw0XG5cdCIKKwkJICAieG9yICUlZzIsICUlbzQsICUlZzJcblx0IgorCQkgICJ4b3IgJSVnMywgJSVvNSwgJSVnM1xuXHQiCisJCSAgImxkZCBbJTMgKyAweDAwXSwgJSVvNFxuXHQiCisJCSAgInhvciAlJWc0LCAlJWwwLCAlJWc0XG5cdCIKKwkJICAieG9yICUlZzUsICUlbDEsICUlZzVcblx0IgorCQkgICJsZGQgWyUzICsgMHgwOF0sICUlbDBcblx0IgorCQkgICJ4b3IgJSVvMCwgJSVsMiwgJSVvMFxuXHQiCisJCSAgInhvciAlJW8xLCAlJWwzLCAlJW8xXG5cdCIKKwkJICAibGRkIFslMyArIDB4MTBdLCAlJWwyXG5cdCIKKwkJICAieG9yICUlbzIsICUlbDQsICUlbzJcblx0IgorCQkgICJ4b3IgJSVvMywgJSVsNSwgJSVvM1xuXHQiCisJCSAgImxkZCBbJTMgKyAweDE4XSwgJSVsNFxuXHQiCisJCSAgInhvciAlJWcyLCAlJW80LCAlJWcyXG5cdCIKKwkJICAieG9yICUlZzMsICUlbzUsICUlZzNcblx0IgorCQkgICJ4b3IgJSVnNCwgJSVsMCwgJSVnNFxuXHQiCisJCSAgInhvciAlJWc1LCAlJWwxLCAlJWc1XG5cdCIKKwkJICAieG9yICUlbzAsICUlbDIsICUlbzBcblx0IgorCQkgICJ4b3IgJSVvMSwgJSVsMywgJSVvMVxuXHQiCisJCSAgInhvciAlJW8yLCAlJWw0LCAlJW8yXG5cdCIKKwkJICAieG9yICUlbzMsICUlbDUsICUlbzNcblx0IgorCQkgICJzdGQgJSVnMiwgWyUwICsgMHgwMF1cblx0IgorCQkgICJzdGQgJSVnNCwgWyUwICsgMHgwOF1cblx0IgorCQkgICJzdGQgJSVvMCwgWyUwICsgMHgxMF1cblx0IgorCQkgICJzdGQgJSVvMiwgWyUwICsgMHgxOF1cbiIKKwkJOgorCQk6ICJyIiAocDEpLCAiciIgKHAyKSwgInIiIChwMyksICJyIiAocDQpCisJCTogImcyIiwgImczIiwgImc0IiwgImc1IiwKKwkJICAibzAiLCAibzEiLCAibzIiLCAibzMiLCAibzQiLCAibzUiLAorCQkgICJsMCIsICJsMSIsICJsMiIsICJsMyIsICJsNCIsICJsNSIpOworCQlwMSArPSA4OworCQlwMiArPSA4OworCQlwMyArPSA4OworCQlwNCArPSA4OworCX0gd2hpbGUgKC0tbGluZXMgPiAwKTsKK30KKworc3RhdGljIHZvaWQKK3NwYXJjXzUodW5zaWduZWQgbG9uZyBieXRlcywgdW5zaWduZWQgbG9uZyAqcDEsIHVuc2lnbmVkIGxvbmcgKnAyLAorCXVuc2lnbmVkIGxvbmcgKnAzLCB1bnNpZ25lZCBsb25nICpwNCwgdW5zaWduZWQgbG9uZyAqcDUpCit7CisJaW50IGxpbmVzID0gYnl0ZXMgLyAoc2l6ZW9mIChsb25nKSkgLyA4OworCisJZG8geworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJICAibGRkIFslMCArIDB4MDBdLCAlJWcyXG5cdCIKKwkJICAibGRkIFslMCArIDB4MDhdLCAlJWc0XG5cdCIKKwkJICAibGRkIFslMCArIDB4MTBdLCAlJW8wXG5cdCIKKwkJICAibGRkIFslMCArIDB4MThdLCAlJW8yXG5cdCIKKwkJICAibGRkIFslMSArIDB4MDBdLCAlJW80XG5cdCIKKwkJICAibGRkIFslMSArIDB4MDhdLCAlJWwwXG5cdCIKKwkJICAibGRkIFslMSArIDB4MTBdLCAlJWwyXG5cdCIKKwkJICAibGRkIFslMSArIDB4MThdLCAlJWw0XG5cdCIKKwkJICAieG9yICUlZzIsICUlbzQsICUlZzJcblx0IgorCQkgICJ4b3IgJSVnMywgJSVvNSwgJSVnM1xuXHQiCisJCSAgImxkZCBbJTIgKyAweDAwXSwgJSVvNFxuXHQiCisJCSAgInhvciAlJWc0LCAlJWwwLCAlJWc0XG5cdCIKKwkJICAieG9yICUlZzUsICUlbDEsICUlZzVcblx0IgorCQkgICJsZGQgWyUyICsgMHgwOF0sICUlbDBcblx0IgorCQkgICJ4b3IgJSVvMCwgJSVsMiwgJSVvMFxuXHQiCisJCSAgInhvciAlJW8xLCAlJWwzLCAlJW8xXG5cdCIKKwkJICAibGRkIFslMiArIDB4MTBdLCAlJWwyXG5cdCIKKwkJICAieG9yICUlbzIsICUlbDQsICUlbzJcblx0IgorCQkgICJ4b3IgJSVvMywgJSVsNSwgJSVvM1xuXHQiCisJCSAgImxkZCBbJTIgKyAweDE4XSwgJSVsNFxuXHQiCisJCSAgInhvciAlJWcyLCAlJW80LCAlJWcyXG5cdCIKKwkJICAieG9yICUlZzMsICUlbzUsICUlZzNcblx0IgorCQkgICJsZGQgWyUzICsgMHgwMF0sICUlbzRcblx0IgorCQkgICJ4b3IgJSVnNCwgJSVsMCwgJSVnNFxuXHQiCisJCSAgInhvciAlJWc1LCAlJWwxLCAlJWc1XG5cdCIKKwkJICAibGRkIFslMyArIDB4MDhdLCAlJWwwXG5cdCIKKwkJICAieG9yICUlbzAsICUlbDIsICUlbzBcblx0IgorCQkgICJ4b3IgJSVvMSwgJSVsMywgJSVvMVxuXHQiCisJCSAgImxkZCBbJTMgKyAweDEwXSwgJSVsMlxuXHQiCisJCSAgInhvciAlJW8yLCAlJWw0LCAlJW8yXG5cdCIKKwkJICAieG9yICUlbzMsICUlbDUsICUlbzNcblx0IgorCQkgICJsZGQgWyUzICsgMHgxOF0sICUlbDRcblx0IgorCQkgICJ4b3IgJSVnMiwgJSVvNCwgJSVnMlxuXHQiCisJCSAgInhvciAlJWczLCAlJW81LCAlJWczXG5cdCIKKwkJICAibGRkIFslNCArIDB4MDBdLCAlJW80XG5cdCIKKwkJICAieG9yICUlZzQsICUlbDAsICUlZzRcblx0IgorCQkgICJ4b3IgJSVnNSwgJSVsMSwgJSVnNVxuXHQiCisJCSAgImxkZCBbJTQgKyAweDA4XSwgJSVsMFxuXHQiCisJCSAgInhvciAlJW8wLCAlJWwyLCAlJW8wXG5cdCIKKwkJICAieG9yICUlbzEsICUlbDMsICUlbzFcblx0IgorCQkgICJsZGQgWyU0ICsgMHgxMF0sICUlbDJcblx0IgorCQkgICJ4b3IgJSVvMiwgJSVsNCwgJSVvMlxuXHQiCisJCSAgInhvciAlJW8zLCAlJWw1LCAlJW8zXG5cdCIKKwkJICAibGRkIFslNCArIDB4MThdLCAlJWw0XG5cdCIKKwkJICAieG9yICUlZzIsICUlbzQsICUlZzJcblx0IgorCQkgICJ4b3IgJSVnMywgJSVvNSwgJSVnM1xuXHQiCisJCSAgInhvciAlJWc0LCAlJWwwLCAlJWc0XG5cdCIKKwkJICAieG9yICUlZzUsICUlbDEsICUlZzVcblx0IgorCQkgICJ4b3IgJSVvMCwgJSVsMiwgJSVvMFxuXHQiCisJCSAgInhvciAlJW8xLCAlJWwzLCAlJW8xXG5cdCIKKwkJICAieG9yICUlbzIsICUlbDQsICUlbzJcblx0IgorCQkgICJ4b3IgJSVvMywgJSVsNSwgJSVvM1xuXHQiCisJCSAgInN0ZCAlJWcyLCBbJTAgKyAweDAwXVxuXHQiCisJCSAgInN0ZCAlJWc0LCBbJTAgKyAweDA4XVxuXHQiCisJCSAgInN0ZCAlJW8wLCBbJTAgKyAweDEwXVxuXHQiCisJCSAgInN0ZCAlJW8yLCBbJTAgKyAweDE4XVxuIgorCQk6CisJCTogInIiIChwMSksICJyIiAocDIpLCAiciIgKHAzKSwgInIiIChwNCksICJyIiAocDUpCisJCTogImcyIiwgImczIiwgImc0IiwgImc1IiwKKwkJICAibzAiLCAibzEiLCAibzIiLCAibzMiLCAibzQiLCAibzUiLAorCQkgICJsMCIsICJsMSIsICJsMiIsICJsMyIsICJsNCIsICJsNSIpOworCQlwMSArPSA4OworCQlwMiArPSA4OworCQlwMyArPSA4OworCQlwNCArPSA4OworCQlwNSArPSA4OworCX0gd2hpbGUgKC0tbGluZXMgPiAwKTsKK30KKworc3RhdGljIHN0cnVjdCB4b3JfYmxvY2tfdGVtcGxhdGUgeG9yX2Jsb2NrX1NQQVJDID0geworCS5uYW1lCT0gIlNQQVJDIiwKKwkuZG9fMgk9IHNwYXJjXzIsCisJLmRvXzMJPSBzcGFyY18zLAorCS5kb180CT0gc3BhcmNfNCwKKwkuZG9fNQk9IHNwYXJjXzUsCit9OworCisvKiBGb3IgZ3JpbnMsIGFsc28gdGVzdCB0aGUgZ2VuZXJpYyByb3V0aW5lcy4gICovCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMveG9yLmg+CisKKyN1bmRlZiBYT1JfVFJZX1RFTVBMQVRFUworI2RlZmluZSBYT1JfVFJZX1RFTVBMQVRFUwkJCQlcCisJZG8gewkJCQkJCVwKKwkJeG9yX3NwZWVkKCZ4b3JfYmxvY2tfOHJlZ3MpOwkJXAorCQl4b3Jfc3BlZWQoJnhvcl9ibG9ja18zMnJlZ3MpOwkJXAorCQl4b3Jfc3BlZWQoJnhvcl9ibG9ja19TUEFSQyk7CQlcCisJfSB3aGlsZSAoMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvYS5vdXQuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvYS5vdXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmFmMjg5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9hLm91dC5oCkBAIC0wLDAgKzEsMTA0IEBACisvKiAkSWQ6IGEub3V0LmgsdiAxLjggMjAwMi8wMi8wOSAxOTo0OTozMSBkYXZlbSBFeHAgJCAqLworI2lmbmRlZiBfX1NQQVJDNjRfQV9PVVRfSF9fCisjZGVmaW5lIF9fU1BBUkM2NF9BX09VVF9IX18KKworI2RlZmluZSBTUEFSQ19QR1NJWkUgICAgMHgyMDAwICAgICAgICAvKiBUaGFua3MgdG8gdGhlIHN1bjQgYXJjaGl0ZWN0dXJlLi4uICovCisjZGVmaW5lIFNFR01FTlRfU0laRSAgICBTUEFSQ19QR1NJWkUgIC8qIHdoZWUuLi4gKi8KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworc3RydWN0IGV4ZWMgeworCXVuc2lnbmVkIGNoYXIgYV9keW5hbWljOjE7ICAgICAgLyogQSBfX0RZTkFNSUMgaXMgaW4gdGhpcyBpbWFnZSAqLworCXVuc2lnbmVkIGNoYXIgYV90b29sdmVyc2lvbjo3OworCXVuc2lnbmVkIGNoYXIgYV9tYWNodHlwZTsKKwl1bnNpZ25lZCBzaG9ydCBhX2luZm87CisJdW5zaWduZWQgaW50IGFfdGV4dDsJCS8qIGxlbmd0aCBvZiB0ZXh0LCBpbiBieXRlcyAqLworCXVuc2lnbmVkIGludCBhX2RhdGE7CQkvKiBsZW5ndGggb2YgZGF0YSwgaW4gYnl0ZXMgKi8KKwl1bnNpZ25lZCBpbnQgYV9ic3M7CQkvKiBsZW5ndGggb2YgYnNzLCBpbiBieXRlcyAqLworCXVuc2lnbmVkIGludCBhX3N5bXM7CQkvKiBsZW5ndGggb2Ygc3ltYm9sIHRhYmxlLCBpbiBieXRlcyAqLworCXVuc2lnbmVkIGludCBhX2VudHJ5OwkJLyogd2hlcmUgcHJvZ3JhbSBiZWdpbnMgKi8KKwl1bnNpZ25lZCBpbnQgYV90cnNpemU7CisJdW5zaWduZWQgaW50IGFfZHJzaXplOworfTsKKworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKworLyogV2hlcmUgaW4gdGhlIGZpbGUgZG9lcyB0aGUgdGV4dCBpbmZvcm1hdGlvbiBiZWdpbj8gKi8KKyNkZWZpbmUgTl9UWFRPRkYoeCkgICAgIChOX01BR0lDKHgpID09IFpNQUdJQyA/IDAgOiBzaXplb2YgKHN0cnVjdCBleGVjKSkKKworLyogV2hlcmUgZG8gdGhlIFN5bWJvbHMgc3RhcnQ/ICovCisjZGVmaW5lIE5fU1lNT0ZGKHgpICAgICAoTl9UWFRPRkYoeCkgKyAoeCkuYV90ZXh0ICsgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgKHgpLmFfZGF0YSArICh4KS5hX3Ryc2l6ZSArICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgKHgpLmFfZHJzaXplKQorCisvKiBXaGVyZSBkb2VzIHRleHQgc2VnbWVudCBnbyBpbiBtZW1vcnkgYWZ0ZXIgYmVpbmcgbG9hZGVkPyAqLworI2RlZmluZSBOX1RYVEFERFIoeCkgICAgKHVuc2lnbmVkIGxvbmcpKCgoTl9NQUdJQyh4KSA9PSBaTUFHSUMpICYmICAgICAgXAorCSAgICAgICAgICAgICAgICAgKCh4KS5hX2VudHJ5IDwgU1BBUkNfUEdTSVpFKSkgPyAgIAkJXAorICAgICAgICAgICAgICAgICAgICAgICAgICAwIDogU1BBUkNfUEdTSVpFKQorCisvKiBBbmQgc2FtZSBmb3IgdGhlIGRhdGEgc2VnbWVudC4uICovCisjZGVmaW5lIE5fREFUQUREUih4KSAoTl9NQUdJQyh4KT09T01BR0lDID8gICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgKE5fVFhUQUREUih4KSArICh4KS5hX3RleHQpICBcCisgICAgICAgICAgICAgICAgICAgICAgIDogKHVuc2lnbmVkIGxvbmcpKF9OX1NFR01FTlRfUk9VTkQgKF9OX1RYVEVOREFERFIoeCkpKSkKKworI2RlZmluZSBOX1RSU0laRShhKQkoKGEpLmFfdHJzaXplKQorI2RlZmluZSBOX0RSU0laRShhKQkoKGEpLmFfZHJzaXplKQorI2RlZmluZSBOX1NZTVNJWkUoYSkJKChhKS5hX3N5bXMpCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKy8qCisgKiBTcGFyYyByZWxvY2F0aW9uIHR5cGVzCisgKi8KK2VudW0gcmVsb2NfdHlwZQoreworCVJFTE9DXzgsCisJUkVMT0NfMTYsCisJUkVMT0NfMzIsCS8qIHNpbXBsZXN0IHJlbG9jcyAqLworCVJFTE9DX0RJU1A4LAorCVJFTE9DX0RJU1AxNiwKKwlSRUxPQ19ESVNQMzIsCS8qIERpc3AncyAocGMtcmVsKSAqLworCVJFTE9DX1dESVNQMzAsCisJUkVMT0NfV0RJU1AyMiwgIC8qIFNSIHdvcmQgZGlzcCdzICovCisJUkVMT0NfSEkyMiwKKwlSRUxPQ18yMiwJLyogU1IgMjItYml0IHJlbG9jcyAqLworCVJFTE9DXzEzLAorCVJFTE9DX0xPMTAsCS8qIFNSIDEzJjEwLWJpdCByZWxvY3MgKi8KKwlSRUxPQ19TRkFfQkFTRSwKKwlSRUxPQ19TRkFfT0ZGMTMsIC8qIFNSIFMuRi5BLiByZWxvY3MgKi8KKwlSRUxPQ19CQVNFMTAsCisJUkVMT0NfQkFTRTEzLAorCVJFTE9DX0JBU0UyMiwJLyogYmFzZV9yZWxhdGl2ZSBwaWMgKi8KKwlSRUxPQ19QQzEwLAorCVJFTE9DX1BDMjIsCS8qIHNwZWNpYWwgcGMtcmVsIHBpYyAqLworCVJFTE9DX0pNUF9UQkwsCS8qIGptcF90YmxfcmVsIGluIHBpYyAqLworCVJFTE9DX1NFR09GRjE2LAkvKiBTaExpYiBvZmZzZXQtaW4tc2VnICovCisJUkVMT0NfR0xPQl9EQVQsCisJUkVMT0NfSk1QX1NMT1QsCisJUkVMT0NfUkVMQVRJVkUgCS8qIHJ0bGQgcmVsb2NzICovCit9OworCisvKgorICogRm9ybWF0IG9mIGEgcmVsb2NhdGlvbiBkYXR1bS4KKyAqLworc3RydWN0IHJlbG9jYXRpb25faW5mbyAvKiB1c2VkIHdoZW4gaGVhZGVyLmFfbWFjaHR5cGUgPT0gTV9TUEFSQyAqLworeworICAgICAgICB1bnNpZ25lZCBpbnQgICAgcl9hZGRyZXNzOyAgLyogcmVsb2NhdGlvbiBhZGRyICovCisgICAgICAgIHVuc2lnbmVkIGludCAgICByX2luZGV4OjI0OyAvKiBzZWdtZW50IGluZGV4IG9yIHN5bWJvbCBpbmRleCAqLworICAgICAgICB1bnNpZ25lZCBpbnQgICAgcl9leHRlcm46MTsgLyogaWYgRiwgcl9pbmRleD09U0VHIzsgaWYgVCwgU1lNIGlkeCAqLworICAgICAgICBpbnQgICAgICAgICAgICAgcl9wYWQ6MjsgICAgLyogPHVudXNlZD4gKi8KKyAgICAgICAgZW51bSByZWxvY190eXBlIHJfdHlwZTo1OyAgIC8qIHR5cGUgb2YgcmVsb2NhdGlvbiB0byBwZXJmb3JtICovCisgICAgICAgIGludCAgICAgICAgICAgICByX2FkZGVuZDsgICAvKiBhZGRlbmQgZm9yIHJlbG9jYXRpb24gdmFsdWUgKi8KK307CisKKyNkZWZpbmUgTl9SRUxPQ0FUSU9OX0lORk9fREVDTEFSRUQgMQorCisjaWZkZWYgX19LRVJORUxfXworCisjZGVmaW5lIFNUQUNLX1RPUCAodGVzdF90aHJlYWRfZmxhZyhUSUZfMzJCSVQpID8gMHhmMDAwMDAwMCA6IDB4ODAwMDAwMDAwMDBMKQorCisjZW5kaWYKKworI2VuZGlmIC8qICEoX19BU1NFTUJMWV9fKSAqLworCisjZW5kaWYgLyogIShfX1NQQVJDNjRfQV9PVVRfSF9fKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9hZ3AuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvYWdwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmEwNWJkZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvYWdwLmgKQEAgLTAsMCArMSwxMSBAQAorI2lmbmRlZiBBR1BfSAorI2RlZmluZSBBR1BfSCAxCisKKy8qIGR1bW15IGZvciBub3cgKi8KKworI2RlZmluZSBtYXBfcGFnZV9pbnRvX2FncChwYWdlKSAKKyNkZWZpbmUgdW5tYXBfcGFnZV9mcm9tX2FncChwYWdlKSAKKyNkZWZpbmUgZmx1c2hfYWdwX21hcHBpbmdzKCkgCisjZGVmaW5lIGZsdXNoX2FncF9jYWNoZSgpIG1iKCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2FwYi5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9hcGIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGYwZGYyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9hcGIuaApAQCAtMCwwICsxLDM2IEBACisvKiAkSWQ6IGFwYi5oLHYgMS4yIDE5OTgvMDQvMDEgMjA6NDE6NDkgZWNkIEV4cCAkCisgKiBhcGIuaDogQWR2YW5jZWQgUENJIEJyaWRnZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVycyBhbmQgQml0cworICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAgRWRkaWUgQy4gRG9zdCAgKGVjZEBza3luZXQuYmUpCisgKi8KKworI2lmbmRlZiBfU1BBUkM2NF9BUEJfSAorI2RlZmluZSBfU1BBUkM2NF9BUEJfSAorCisjZGVmaW5lIEFQQl9USUNLX1JFR0lTVEVSCQkJMHhiMAorI2RlZmluZSBBUEJfSU5UX0FDSwkJCQkweGI4CisjZGVmaW5lIEFQQl9QUklNQVJZX01BU1RFUl9SRVRSWV9MSU1JVAkJMHhjMAorI2RlZmluZSBBUEJfRE1BX0FTRlIJCQkJMHhjOAorI2RlZmluZSBBUEJfRE1BX0FGQVIJCQkJMHhkMAorI2RlZmluZSBBUEJfUElPX1RBUkdFVF9SRVRSWV9MSU1JVAkJMHhkOAorI2RlZmluZSBBUEJfUElPX1RBUkdFVF9MQVRFTkNZX1RJTUVSCQkweGQ5CisjZGVmaW5lIEFQQl9ETUFfVEFSR0VUX1JFVFJZX0xJTUlUCQkweGRhCisjZGVmaW5lIEFQQl9ETUFfVEFSR0VUX0xBVEVOQ1lfVElNRVIJCTB4ZGIKKyNkZWZpbmUgQVBCX1NFQ09OREFSWV9NQVNURVJfUkVUUllfTElNSVQJMHhkYworI2RlZmluZSBBUEJfU0VDT05EQVJZX0NPTlRST0wJCQkweGRkCisjZGVmaW5lIEFQQl9JT19BRERSRVNTX01BUAkJCTB4ZGUKKyNkZWZpbmUgQVBCX01FTV9BRERSRVNTX01BUAkJCTB4ZGYKKworI2RlZmluZSBBUEJfUENJX0NPTlRST0xfTE9XCQkJMHhlMAorIyAgZGVmaW5lIEFQQl9QQ0lfQ1RMX0xPV19BUkJfUEFSSwkJCSgxIDw8IDIxKQorIyAgZGVmaW5lIEFQQl9QQ0lfQ1RMX0xPV19FUlJJTlRfRU4JCQkoMSA8PCA4KQorCisjZGVmaW5lIEFQQl9QQ0lfQ09OVFJPTF9ISUdICQkJMHhlNAorIyAgZGVmaW5lIEFQQl9QQ0lfQ1RMX0hJR0hfU0VSUgkJCQkoMSA8PCAyKQorIyAgZGVmaW5lIEFQQl9QQ0lfQ1RMX0hJR0hfQVJCSVRFUl9FTgkJCSgxIDw8IDApCisKKyNkZWZpbmUgQVBCX1BJT19BU0ZSCQkJCTB4ZTgKKyNkZWZpbmUgQVBCX1BJT19BRkFSCQkJCTB4ZjAKKyNkZWZpbmUgQVBCX0RJQUdfUkVHSVNURVIJCQkweGY4CisKKyNlbmRpZiAvKiAhKF9TUEFSQzY0X0FQQl9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9hc2kuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvYXNpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM0ODU1NgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvYXNpLmgKQEAgLTAsMCArMSwxNDUgQEAKKy8qICRJZDogYXNpLmgsdiAxLjUgMjAwMS8wMy8yOSAxMTo0Nzo0NyBkYXZlbSBFeHAgJCAqLworI2lmbmRlZiBfU1BBUkM2NF9BU0lfSAorI2RlZmluZSBfU1BBUkM2NF9BU0lfSAorCisvKiBhc2kuaDogIEFkZHJlc3MgU3BhY2UgSWRlbnRpZmllciB2YWx1ZXMgZm9yIHRoZSBWOS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQorICovCisKKy8qIFY5IEFyY2hpdGVjdHVyZSBtYW5kYXJ5IEFTSXMuICovCisjZGVmaW5lIEFTSV9OCQkJMHgwNCAvKiBOdWNsZXVzCQkJCSovCisjZGVmaW5lIEFTSV9OTAkJCTB4MGMgLyogTnVjbGV1cywgbGl0dGxlIGVuZGlhbgkJKi8KKyNkZWZpbmUgQVNJX0FJVVAJCTB4MTAgLyogUHJpbWFyeSwgdXNlcgkJCSovCisjZGVmaW5lIEFTSV9BSVVTCQkweDExIC8qIFNlY29uZGFyeSwgdXNlcgkJCSovCisjZGVmaW5lIEFTSV9BSVVQTAkJMHgxOCAvKiBQcmltYXJ5LCB1c2VyLCBsaXR0bGUgZW5kaWFuCSovCisjZGVmaW5lIEFTSV9BSVVTTAkJMHgxOSAvKiBTZWNvbmRhcnksIHVzZXIsIGxpdHRsZSBlbmRpYW4JKi8KKyNkZWZpbmUgQVNJX1AJCQkweDgwIC8qIFByaW1hcnksIGltcGxpY2l0CQkqLworI2RlZmluZSBBU0lfUwkJCTB4ODEgLyogU2Vjb25kYXJ5LCBpbXBsaWNpdAkJKi8KKyNkZWZpbmUgQVNJX1BORgkJCTB4ODIgLyogUHJpbWFyeSwgbm8gZmF1bHQJCSovCisjZGVmaW5lIEFTSV9TTkYJCQkweDgzIC8qIFNlY29uZGFyeSwgbm8gZmF1bHQJCSovCisjZGVmaW5lIEFTSV9QTAkJCTB4ODggLyogUHJpbWFyeSwgaW1wbGljaXQsIGwtZW5kaWFuCSovCisjZGVmaW5lIEFTSV9TTAkJCTB4ODkgLyogU2Vjb25kYXJ5LCBpbXBsaWNpdCwgbC1lbmRpYW4JKi8KKyNkZWZpbmUgQVNJX1BORkwJCTB4OGEgLyogUHJpbWFyeSwgbm8gZmF1bHQsIGwtZW5kaWFuCSovCisjZGVmaW5lIEFTSV9TTkZMCQkweDhiIC8qIFNlY29uZGFyeSwgbm8gZmF1bHQsIGwtZW5kaWFuCSovCisKKy8qIFNwaXRGaXJlIGFuZCBsYXRlciBleHRlbmRlZCBBU0lzLiAgVGhlICIoSUlJKSIgbWFya2VyIGRlc2lnbmF0ZXMKKyAqIFVsdHJhU3BhcmMtSUlJIGFuZCBsYXRlciBzcGVjaWZpYyBBU0lzLiAgVGhlICIoQ01UKSIgbWFya2VyIGRlc2lnbmF0ZXMKKyAqIENoaXAgTXVsdGkgVGhyZWFkaW5nIHNwZWNpZmljIEFTSXMuCisgKi8KKyNkZWZpbmUgQVNJX1BIWVNfVVNFX0VDCQkweDE0IC8qIFBBRERSLCBFLWNhY2hhYmxlCQkqLworI2RlZmluZSBBU0lfUEhZU19CWVBBU1NfRUNfRQkweDE1IC8qIFBBRERSLCBFLWJpdAkJCSovCisjZGVmaW5lIEFTSV9QSFlTX1VTRV9FQ19MCTB4MWMgLyogUEFERFIsIEUtY2FjaGFibGUsIGxpdHRsZSBlbmRpYW4qLworI2RlZmluZSBBU0lfUEhZU19CWVBBU1NfRUNfRV9MCTB4MWQgLyogUEFERFIsIEUtYml0LCBsaXR0bGUgZW5kaWFuCSovCisjZGVmaW5lIEFTSV9OVUNMRVVTX1FVQURfTERECTB4MjQgLyogQ2FjaGFibGUsIHF3b3JkIGxvYWQJCSovCisjZGVmaW5lIEFTSV9OVUNMRVVTX1FVQURfTEREX0wJMHgyYyAvKiBDYWNoYWJsZSwgcXdvcmQgbG9hZCwgbC1lbmRpYW4gCSovCisjZGVmaW5lIEFTSV9QQ0FDSEVfREFUQV9TVEFUVVMJMHgzMCAvKiAoSUlJKSBQQ2FjaGUgZGF0YSBzdGF0IFJBTSBkaWFnCSovCisjZGVmaW5lIEFTSV9QQ0FDSEVfREFUQQkJMHgzMSAvKiAoSUlJKSBQQ2FjaGUgZGF0YSBSQU0gZGlhZwkqLworI2RlZmluZSBBU0lfUENBQ0hFX1RBRwkJMHgzMiAvKiAoSUlJKSBQQ2FjaGUgdGFnIFJBTSBkaWFnCSovCisjZGVmaW5lIEFTSV9QQ0FDSEVfU05PT1BfVEFHCTB4MzMgLyogKElJSSkgUENhY2hlIHNub29wIHRhZyBSQU0gZGlhZwkqLworI2RlZmluZSBBU0lfUVVBRF9MRERfUEhZUwkweDM0IC8qIChJSUkrKSBQQUREUiwgcXdvcmQgbG9hZAkqLworI2RlZmluZSBBU0lfV0NBQ0hFX1ZBTElEX0JJVFMJMHgzOCAvKiAoSUlJKSBXQ2FjaGUgVmFsaWQgQml0cyBkaWFnCSovCisjZGVmaW5lIEFTSV9XQ0FDSEVfREFUQQkJMHgzOSAvKiAoSUlJKSBXQ2FjaGUgZGF0YSBSQU0gZGlhZwkqLworI2RlZmluZSBBU0lfV0NBQ0hFX1RBRwkJMHgzYSAvKiAoSUlJKSBXQ2FjaGUgdGFnIFJBTSBkaWFnCSovCisjZGVmaW5lIEFTSV9XQ0FDSEVfU05PT1BfVEFHCTB4M2IgLyogKElJSSkgV0NhY2hlIHNub29wIHRhZyBSQU0gZGlhZwkqLworI2RlZmluZSBBU0lfUVVBRF9MRERfUEhZU19MCTB4M2MgLyogKElJSSspIFBBRERSLCBxdy1sb2FkLCBsLWVuZGlhbgkqLworI2RlZmluZSBBU0lfU1JBTV9GQVNUX0lOSVQJMHg0MCAvKiAoSUlJKykgRmFzdCBTUkFNIGluaXQJCSovCisjZGVmaW5lIEFTSV9DT1JFX0FWQUlMQUJMRQkweDQxIC8qIChDTVQpIExQIEF2YWlsYWJsZQkJKi8KKyNkZWZpbmUgQVNJX0NPUkVfRU5BQkxFX1NUQVQJMHg0MSAvKiAoQ01UKSBMUCBFbmFibGUgU3RhdHVzCQkqLworI2RlZmluZSBBU0lfQ09SRV9FTkFCTEUJCTB4NDEgLyogKENNVCkgTFAgRW5hYmxlIFJXCQkqLworI2RlZmluZSBBU0lfWElSX1NURUVSSU5HCTB4NDEgLyogKENNVCkgWElSIFN0ZWVyaW5nIFJXCQkqLworI2RlZmluZSBBU0lfQ09SRV9SVU5OSU5HX1JXCTB4NDEgLyogKENNVCkgTFAgUnVubmluZyBSVwkJKi8KKyNkZWZpbmUgQVNJX0NPUkVfUlVOTklOR19XMVMJMHg0MSAvKiAoQ01UKSBMUCBSdW5uaW5nIFdyaXRlLU9uZSBTZXQJKi8KKyNkZWZpbmUgQVNJX0NPUkVfUlVOTklOR19XMUMJMHg0MSAvKiAoQ01UKSBMUCBSdW5uaW5nIFdyaXRlLU9uZSBDbHIJKi8KKyNkZWZpbmUgQVNJX0NPUkVfUlVOTklOR19TVEFUCTB4NDEgLyogKENNVCkgTFAgUnVubmluZyBTdGF0dXMJCSovCisjZGVmaW5lIEFTSV9DTVRfRVJST1JfU1RFRVJJTkcJMHg0MSAvKiAoQ01UKSBFcnJvciBTdGVlcmluZyBSVwkJKi8KKyNkZWZpbmUgQVNJX0RDQUNIRV9JTlZBTElEQVRFCTB4NDIgLyogKElJSSkgRENhY2hlIEludmFsaWRhdGUgZGlhZwkqLworI2RlZmluZSBBU0lfRENBQ0hFX1VUQUcJCTB4NDMgLyogKElJSSkgRENhY2hlIHVUYWcgZGlhZwkJKi8KKyNkZWZpbmUgQVNJX0RDQUNIRV9TTk9PUF9UQUcJMHg0NCAvKiAoSUlJKSBEQ2FjaGUgc25vb3AgdGFnIFJBTSBkaWFnCSovCisjZGVmaW5lIEFTSV9MU1VfQ09OVFJPTAkJMHg0NSAvKiBMb2FkLXN0b3JlIGNvbnRyb2wgdW5pdAkJKi8KKyNkZWZpbmUgQVNJX0RDVV9DT05UUk9MX1JFRwkweDQ1IC8qIChJSUkpIERDYWNoZSBVbml0IENvbnRyb2wgcmVnCSovCisjZGVmaW5lIEFTSV9EQ0FDSEVfREFUQQkJMHg0NiAvKiBEQ2FjaGUgZGF0YS1yYW0gZGlhZyBhY2Nlc3MJKi8KKyNkZWZpbmUgQVNJX0RDQUNIRV9UQUcJCTB4NDcgLyogRGNhY2hlIHRhZy92YWxpZCByYW0gZGlhZyBhY2Nlc3MqLworI2RlZmluZSBBU0lfSU5UUl9ESVNQQVRDSF9TVEFUCTB4NDggLyogSVJRIHZlY3RvciBkaXNwYXRjaCBzdGF0dXMJKi8KKyNkZWZpbmUgQVNJX0lOVFJfUkVDRUlWRQkweDQ5IC8qIElSUSB2ZWN0b3IgcmVjZWl2ZSBzdGF0dXMJKi8KKyNkZWZpbmUgQVNJX1VQQV9DT05GSUcJCTB4NGEgLyogVVBBIGNvbmZpZyBzcGFjZQkJKi8KKyNkZWZpbmUgQVNJX0pCVVNfQ09ORklHCQkweDRhIC8qIChJSUlpKSBKQlVTIENvbmZpZyBSZWdpc3RlcgkqLworI2RlZmluZSBBU0lfU0FGQVJJX0NPTkZJRwkweDRhIC8qIChJSUkpIFNhZmFyaSBDb25maWcgUmVnaXN0ZXIJKi8KKyNkZWZpbmUgQVNJX1NBRkFSSV9BRERSRVNTCTB4NGEgLyogKElJSSkgU2FmYXJpIEFkZHJlc3MgUmVnaXN0ZXIJKi8KKyNkZWZpbmUgQVNJX0VTVEFURV9FUlJPUl9FTgkweDRiIC8qIEUtY2FjaGUgZXJyb3IgZW5hYmxlIHNwYWNlCSovCisjZGVmaW5lIEFTSV9BRlNSCQkweDRjIC8qIEFzeW5jIGZhdWx0IHN0YXR1cyByZWdpc3RlcgkqLworI2RlZmluZSBBU0lfQUZBUgkJMHg0ZCAvKiBBc3luYyBmYXVsdCBhZGRyZXNzIHJlZ2lzdGVyCSovCisjZGVmaW5lIEFTSV9FQ19UQUdfREFUQQkJMHg0ZSAvKiBFLWNhY2hlIHRhZy92YWxpZCByYW0gZGlhZyBhY2MJKi8KKyNkZWZpbmUgQVNJX0lNTVUJCTB4NTAgLyogSW5zbi1NTVUgbWFpbiByZWdpc3RlciBzcGFjZQkqLworI2RlZmluZSBBU0lfSU1NVV9UU0JfOEtCX1BUUgkweDUxIC8qIEluc24tTU1VIDhLQiBUU0IgcG9pbnRlciByZWcJKi8KKyNkZWZpbmUgQVNJX0lNTVVfVFNCXzY0S0JfUFRSCTB4NTIgLyogSW5zbi1NTVUgNjRLQiBUU0IgcG9pbnRlciByZWcJKi8KKyNkZWZpbmUgQVNJX0lUTEJfREFUQV9JTgkweDU0IC8qIEluc24tTU1VIFRMQiBkYXRhIGluIHJlZwkqLworI2RlZmluZSBBU0lfSVRMQl9EQVRBX0FDQ0VTUwkweDU1IC8qIEluc24tTU1VIFRMQiBkYXRhIGFjY2VzcyByZWcJKi8KKyNkZWZpbmUgQVNJX0lUTEJfVEFHX1JFQUQJMHg1NiAvKiBJbnNuLU1NVSBUTEIgdGFnIHJlYWQgcmVnCSovCisjZGVmaW5lIEFTSV9JTU1VX0RFTUFQCQkweDU3IC8qIEluc24tTU1VIFRMQiBkZW1hcAkJKi8KKyNkZWZpbmUgQVNJX0RNTVUJCTB4NTggLyogRGF0YS1NTVUgbWFpbiByZWdpc3RlciBzcGFjZQkqLworI2RlZmluZSBBU0lfRE1NVV9UU0JfOEtCX1BUUgkweDU5IC8qIERhdGEtTU1VIDhLQiBUU0IgcG9pbnRlciByZWcJKi8KKyNkZWZpbmUgQVNJX0RNTVVfVFNCXzY0S0JfUFRSCTB4NWEgLyogRGF0YS1NTVUgMTZLQiBUU0IgcG9pbnRlciByZWcJKi8KKyNkZWZpbmUgQVNJX0RNTVVfVFNCX0RJUkVDVF9QVFIJMHg1YiAvKiBEYXRhLU1NVSBUU0IgZGlyZWN0IHBvaW50ZXIgcmVnCSovCisjZGVmaW5lIEFTSV9EVExCX0RBVEFfSU4JMHg1YyAvKiBEYXRhLU1NVSBUTEIgZGF0YSBpbiByZWcJKi8KKyNkZWZpbmUgQVNJX0RUTEJfREFUQV9BQ0NFU1MJMHg1ZCAvKiBEYXRhLU1NVSBUTEIgZGF0YSBhY2Nlc3MgcmVnCSovCisjZGVmaW5lIEFTSV9EVExCX1RBR19SRUFECTB4NWUgLyogRGF0YS1NTVUgVExCIHRhZyByZWFkIHJlZwkqLworI2RlZmluZSBBU0lfRE1NVV9ERU1BUAkJMHg1ZiAvKiBEYXRhLU1NVSBUTEIgZGVtYXAJCSovCisjZGVmaW5lIEFTSV9JSVVfSU5TVF9UUkFQCTB4NjAgLyogKElJSSkgSW5zdHJ1Y3Rpb24gQnJlYWtwb2ludAkqLworI2RlZmluZSBBU0lfSU5UUl9JRAkJMHg2MyAvKiAoQ01UKSBJbnRlcnJ1cHQgSUQgcmVnaXN0ZXIJKi8KKyNkZWZpbmUgQVNJX0NPUkVfSUQJCTB4NjMgLyogKENNVCkgTFAgSUQgcmVnaXN0ZXIJCSovCisjZGVmaW5lIEFTSV9DRVNSX0lECQkweDYzIC8qIChDTVQpIENFU1IgSUQgcmVnaXN0ZXIJCSovCisjZGVmaW5lIEFTSV9JQ19JTlNUUgkJMHg2NiAvKiBJbnNuIGNhY2hlIGluc3RydWNpb24gcmFtIGRpYWcJKi8KKyNkZWZpbmUgQVNJX0lDX1RBRwkJMHg2NyAvKiBJbnNuIGNhY2hlIHRhZy92YWxpZCByYW0gZGlhZyAJKi8KKyNkZWZpbmUgQVNJX0lDX1NUQUcJCTB4NjggLyogKElJSSkgSW5zbiBjYWNoZSBzbm9vcCB0YWcgcmFtCSovCisjZGVmaW5lIEFTSV9JQ19QUkVfREVDT0RFCTB4NmUgLyogSW5zbiBjYWNoZSBwcmUtZGVjb2RlIHJhbSBkaWFnCSovCisjZGVmaW5lIEFTSV9JQ19ORVhUX0ZJRUxECTB4NmYgLyogSW5zbiBjYWNoZSBuZXh0LWZpZWxkIHJhbSBkaWFnCSovCisjZGVmaW5lIEFTSV9CUlBSRURfQVJSQVkJMHg2ZiAvKiAoSUlJKSBCcmFuY2ggUHJlZGljdGlvbiBSQU0gZGlhZyovCisjZGVmaW5lIEFTSV9CTEtfQUlVUAkJMHg3MCAvKiBQcmltYXJ5LCB1c2VyLCBibG9jayBsb2FkL3N0b3JlCSovCisjZGVmaW5lIEFTSV9CTEtfQUlVUwkJMHg3MSAvKiBTZWNvbmRhcnksIHVzZXIsIGJsb2NrIGxkL3N0CSovCisjZGVmaW5lIEFTSV9NQ1VfQ1RSTF9SRUcJMHg3MiAvKiAoSUlJKSBNZW1vcnkgY29udHJvbGxlciByZWdzCSovCisjZGVmaW5lIEFTSV9FQ19EQVRBCQkweDc0IC8qIChJSUkpIEUtY2FjaGUgZGF0YSBzdGFnaW5nIHJlZwkqLworI2RlZmluZSBBU0lfRUNfQ1RSTAkJMHg3NSAvKiAoSUlJKSBFLWNhY2hlIGNvbnRyb2wgcmVnCSovCisjZGVmaW5lIEFTSV9FQ19XCQkweDc2IC8qIEUtY2FjaGUgZGlhZyB3cml0ZSBhY2Nlc3MJKi8KKyNkZWZpbmUgQVNJX1VEQl9FUlJPUl9XCQkweDc3IC8qIEV4dGVybmFsIFVEQiBlcnJvciByZWdzIFcJKi8KKyNkZWZpbmUgQVNJX1VEQl9DT05UUk9MX1cJMHg3NyAvKiBFeHRlcm5hbCBVREIgY29udHJvbCByZWdzIFcJKi8KKyNkZWZpbmUgQVNJX0lOVFJfVwkJMHg3NyAvKiBJUlEgdmVjdG9yIGRpc3BhdGNoIHdyaXRlCSovCisjZGVmaW5lIEFTSV9JTlRSX0RBVEFOX1cJMHg3NyAvKiAoSUlJKSBPdXQgaXJxIHZlY3RvciBkYXRhIHJlZyBOCSovCisjZGVmaW5lIEFTSV9JTlRSX0RJU1BBVENIX1cJMHg3NyAvKiAoSUlJKSBJbnRlcnJ1cHQgdmVjdG9yIGRpc3BhdGNoCSovCisjZGVmaW5lIEFTSV9CTEtfQUlVUEwJCTB4NzggLyogUHJpbWFyeSwgdXNlciwgbGl0dGxlLCBibGsgbGQvc3QqLworI2RlZmluZSBBU0lfQkxLX0FJVVNMCQkweDc5IC8qIFNlY29uZGFyeSwgdXNlciwgbGl0dGxlLCBibGsgbGQvc3QqLworI2RlZmluZSBBU0lfRUNfUgkJMHg3ZSAvKiBFLWNhY2hlIGRpYWcgcmVhZCBhY2Nlc3MJKi8KKyNkZWZpbmUgQVNJX1VEQkhfRVJST1JfUgkweDdmIC8qIEV4dGVybmFsIFVEQiBlcnJvciByZWdzIHJkIGhpCSovCisjZGVmaW5lIEFTSV9VREJMX0VSUk9SX1IJMHg3ZiAvKiBFeHRlcm5hbCBVREIgZXJyb3IgcmVncyByZCBsb3cJKi8KKyNkZWZpbmUgQVNJX1VEQkhfQ09OVFJPTF9SCTB4N2YgLyogRXh0ZXJuYWwgVURCIGNvbnRyb2wgcmVncyByZCBoaQkqLworI2RlZmluZSBBU0lfVURCTF9DT05UUk9MX1IJMHg3ZiAvKiBFeHRlcm5hbCBVREIgY29udHJvbCByZWdzIHJkIGxvdyovCisjZGVmaW5lIEFTSV9JTlRSX1IJCTB4N2YgLyogSVJRIHZlY3RvciBkaXNwYXRjaCByZWFkCSovCisjZGVmaW5lIEFTSV9JTlRSX0RBVEFOX1IJMHg3ZiAvKiAoSUlJKSBJbiBpcnEgdmVjdG9yIGRhdGEgcmVnIE4JKi8KKyNkZWZpbmUgQVNJX1BTVDhfUAkJMHhjMCAvKiBQcmltYXJ5LCA4IDgtYml0LCBwYXJ0aWFsCSovCisjZGVmaW5lIEFTSV9QU1Q4X1MJCTB4YzEgLyogU2Vjb25kYXJ5LCA4IDgtYml0LCBwYXJ0aWFsCSovCisjZGVmaW5lIEFTSV9QU1QxNl9QCQkweGMyIC8qIFByaW1hcnksIDQgMTYtYml0LCBwYXJ0aWFsCSovCisjZGVmaW5lIEFTSV9QU1QxNl9TCQkweGMzIC8qIFNlY29uZGFyeSwgNCAxNi1iaXQsIHBhcnRpYWwJKi8KKyNkZWZpbmUgQVNJX1BTVDMyX1AJCTB4YzQgLyogUHJpbWFyeSwgMiAzMi1iaXQsIHBhcnRpYWwJKi8KKyNkZWZpbmUgQVNJX1BTVDMyX1MJCTB4YzUgLyogU2Vjb25kYXJ5LCAyIDMyLWJpdCwgcGFydGlhbAkqLworI2RlZmluZSBBU0lfUFNUOF9QTAkJMHhjOCAvKiBQcmltYXJ5LCA4IDgtYml0LCBwYXJ0aWFsLCBMCSovCisjZGVmaW5lIEFTSV9QU1Q4X1NMCQkweGM5IC8qIFNlY29uZGFyeSwgOCA4LWJpdCwgcGFydGlhbCwgTAkqLworI2RlZmluZSBBU0lfUFNUMTZfUEwJCTB4Y2EgLyogUHJpbWFyeSwgNCAxNi1iaXQsIHBhcnRpYWwsIEwJKi8KKyNkZWZpbmUgQVNJX1BTVDE2X1NMCQkweGNiIC8qIFNlY29uZGFyeSwgNCAxNi1iaXQsIHBhcnRpYWwsIEwJKi8KKyNkZWZpbmUgQVNJX1BTVDMyX1BMCQkweGNjIC8qIFByaW1hcnksIDIgMzItYml0LCBwYXJ0aWFsLCBMCSovCisjZGVmaW5lIEFTSV9QU1QzMl9TTAkJMHhjZCAvKiBTZWNvbmRhcnksIDIgMzItYml0LCBwYXJ0aWFsLCBMCSovCisjZGVmaW5lIEFTSV9GTDhfUAkJMHhkMCAvKiBQcmltYXJ5LCAxIDgtYml0LCBmcHUgbGQvc3QJKi8KKyNkZWZpbmUgQVNJX0ZMOF9TCQkweGQxIC8qIFNlY29uZGFyeSwgMSA4LWJpdCwgZnB1IGxkL3N0CSovCisjZGVmaW5lIEFTSV9GTDE2X1AJCTB4ZDIgLyogUHJpbWFyeSwgMSAxNi1iaXQsIGZwdSBsZC9zdAkqLworI2RlZmluZSBBU0lfRkwxNl9TCQkweGQzIC8qIFNlY29uZGFyeSwgMSAxNi1iaXQsIGZwdSBsZC9zdAkqLworI2RlZmluZSBBU0lfRkw4X1BMCQkweGQ4IC8qIFByaW1hcnksIDEgOC1iaXQsIGZwdSBsZC9zdCwgTAkqLworI2RlZmluZSBBU0lfRkw4X1NMCQkweGQ5IC8qIFNlY29uZGFyeSwgMSA4LWJpdCwgZnB1IGxkL3N0LCBMKi8KKyNkZWZpbmUgQVNJX0ZMMTZfUEwJCTB4ZGEgLyogUHJpbWFyeSwgMSAxNi1iaXQsIGZwdSBsZC9zdCwgTAkqLworI2RlZmluZSBBU0lfRkwxNl9TTAkJMHhkYiAvKiBTZWNvbmRhcnksIDEgMTYtYml0LCBmcHUgbGQvc3QsTCovCisjZGVmaW5lIEFTSV9CTEtfQ09NTUlUX1AJMHhlMCAvKiBQcmltYXJ5LCBibGsgc3RvcmUgY29tbWl0CSovCisjZGVmaW5lIEFTSV9CTEtfQ09NTUlUX1MJMHhlMSAvKiBTZWNvbmRhcnksIGJsayBzdG9yZSBjb21taXQJKi8KKyNkZWZpbmUgQVNJX0JMS19QCQkweGYwIC8qIFByaW1hcnksIGJsayBsZC9zdAkJKi8KKyNkZWZpbmUgQVNJX0JMS19TCQkweGYxIC8qIFNlY29uZGFyeSwgYmxrIGxkL3N0CQkqLworI2RlZmluZSBBU0lfQkxLX1BMCQkweGY4IC8qIFByaW1hcnksIGJsayBsZC9zdCwgbGl0dGxlCSovCisjZGVmaW5lIEFTSV9CTEtfU0wJCTB4ZjkgLyogU2Vjb25kYXJ5LCBibGsgbGQvc3QsIGxpdHRsZQkqLworCisjZW5kaWYgLyogX1NQQVJDNjRfQVNJX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvYXRvbWljLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2F0b21pYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4MGYzMzc5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9hdG9taWMuaApAQCAtMCwwICsxLDg2IEBACisvKiAkSWQ6IGF0b21pYy5oLHYgMS4yMiAyMDAxLzA3LzExIDIzOjU2OjA3IGRhdmVtIEV4cCAkCisgKiBhdG9taWMuaDogVGhhbmtmdWxseSB0aGUgVjkgaXMgYXQgbGVhc3QgcmVhc29uYWJsZSBmb3IgdGhpcworICogICAgICAgICAgIHN0dWZmLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMjAwMCBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQHJlZGhhdC5jb20pCisgKi8KKworI2lmbmRlZiBfX0FSQ0hfU1BBUkM2NF9BVE9NSUNfXworI2RlZmluZSBfX0FSQ0hfU1BBUkM2NF9BVE9NSUNfXworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwordHlwZWRlZiBzdHJ1Y3QgeyB2b2xhdGlsZSBpbnQgY291bnRlcjsgfSBhdG9taWNfdDsKK3R5cGVkZWYgc3RydWN0IHsgdm9sYXRpbGUgX19zNjQgY291bnRlcjsgfSBhdG9taWM2NF90OworCisjZGVmaW5lIEFUT01JQ19JTklUKGkpCQl7IChpKSB9CisjZGVmaW5lIEFUT01JQzY0X0lOSVQoaSkJeyAoaSkgfQorCisjZGVmaW5lIGF0b21pY19yZWFkKHYpCQkoKHYpLT5jb3VudGVyKQorI2RlZmluZSBhdG9taWM2NF9yZWFkKHYpCSgodiktPmNvdW50ZXIpCisKKyNkZWZpbmUgYXRvbWljX3NldCh2LCBpKQkoKCh2KS0+Y291bnRlcikgPSBpKQorI2RlZmluZSBhdG9taWM2NF9zZXQodiwgaSkJKCgodiktPmNvdW50ZXIpID0gaSkKKworZXh0ZXJuIHZvaWQgYXRvbWljX2FkZChpbnQsIGF0b21pY190ICopOworZXh0ZXJuIHZvaWQgYXRvbWljNjRfYWRkKGludCwgYXRvbWljNjRfdCAqKTsKK2V4dGVybiB2b2lkIGF0b21pY19zdWIoaW50LCBhdG9taWNfdCAqKTsKK2V4dGVybiB2b2lkIGF0b21pYzY0X3N1YihpbnQsIGF0b21pYzY0X3QgKik7CisKK2V4dGVybiBpbnQgYXRvbWljX2FkZF9yZXQoaW50LCBhdG9taWNfdCAqKTsKK2V4dGVybiBpbnQgYXRvbWljNjRfYWRkX3JldChpbnQsIGF0b21pYzY0X3QgKik7CitleHRlcm4gaW50IGF0b21pY19zdWJfcmV0KGludCwgYXRvbWljX3QgKik7CitleHRlcm4gaW50IGF0b21pYzY0X3N1Yl9yZXQoaW50LCBhdG9taWM2NF90ICopOworCisjZGVmaW5lIGF0b21pY19kZWNfcmV0dXJuKHYpIGF0b21pY19zdWJfcmV0KDEsIHYpCisjZGVmaW5lIGF0b21pYzY0X2RlY19yZXR1cm4odikgYXRvbWljNjRfc3ViX3JldCgxLCB2KQorCisjZGVmaW5lIGF0b21pY19pbmNfcmV0dXJuKHYpIGF0b21pY19hZGRfcmV0KDEsIHYpCisjZGVmaW5lIGF0b21pYzY0X2luY19yZXR1cm4odikgYXRvbWljNjRfYWRkX3JldCgxLCB2KQorCisjZGVmaW5lIGF0b21pY19zdWJfcmV0dXJuKGksIHYpIGF0b21pY19zdWJfcmV0KGksIHYpCisjZGVmaW5lIGF0b21pYzY0X3N1Yl9yZXR1cm4oaSwgdikgYXRvbWljNjRfc3ViX3JldChpLCB2KQorCisjZGVmaW5lIGF0b21pY19hZGRfcmV0dXJuKGksIHYpIGF0b21pY19hZGRfcmV0KGksIHYpCisjZGVmaW5lIGF0b21pYzY0X2FkZF9yZXR1cm4oaSwgdikgYXRvbWljNjRfYWRkX3JldChpLCB2KQorCisvKgorICogYXRvbWljX2luY19hbmRfdGVzdCAtIGluY3JlbWVudCBhbmQgdGVzdAorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICoKKyAqIEF0b21pY2FsbHkgaW5jcmVtZW50cyBAdiBieSAxCisgKiBhbmQgcmV0dXJucyB0cnVlIGlmIHRoZSByZXN1bHQgaXMgemVybywgb3IgZmFsc2UgZm9yIGFsbAorICogb3RoZXIgY2FzZXMuCisgKi8KKyNkZWZpbmUgYXRvbWljX2luY19hbmRfdGVzdCh2KSAoYXRvbWljX2luY19yZXR1cm4odikgPT0gMCkKKworI2RlZmluZSBhdG9taWNfc3ViX2FuZF90ZXN0KGksIHYpIChhdG9taWNfc3ViX3JldChpLCB2KSA9PSAwKQorI2RlZmluZSBhdG9taWM2NF9zdWJfYW5kX3Rlc3QoaSwgdikgKGF0b21pYzY0X3N1Yl9yZXQoaSwgdikgPT0gMCkKKworI2RlZmluZSBhdG9taWNfZGVjX2FuZF90ZXN0KHYpIChhdG9taWNfc3ViX3JldCgxLCB2KSA9PSAwKQorI2RlZmluZSBhdG9taWM2NF9kZWNfYW5kX3Rlc3QodikgKGF0b21pYzY0X3N1Yl9yZXQoMSwgdikgPT0gMCkKKworI2RlZmluZSBhdG9taWNfaW5jKHYpIGF0b21pY19hZGQoMSwgdikKKyNkZWZpbmUgYXRvbWljNjRfaW5jKHYpIGF0b21pYzY0X2FkZCgxLCB2KQorCisjZGVmaW5lIGF0b21pY19kZWModikgYXRvbWljX3N1YigxLCB2KQorI2RlZmluZSBhdG9taWM2NF9kZWModikgYXRvbWljNjRfc3ViKDEsIHYpCisKKyNkZWZpbmUgYXRvbWljX2FkZF9uZWdhdGl2ZShpLCB2KSAoYXRvbWljX2FkZF9yZXQoaSwgdikgPCAwKQorI2RlZmluZSBhdG9taWM2NF9hZGRfbmVnYXRpdmUoaSwgdikgKGF0b21pYzY0X2FkZF9yZXQoaSwgdikgPCAwKQorCisvKiBBdG9taWMgb3BlcmF0aW9ucyBhcmUgYWxyZWFkeSBzZXJpYWxpemluZyAqLworI2lmZGVmIENPTkZJR19TTVAKKyNkZWZpbmUgc21wX21iX19iZWZvcmVfYXRvbWljX2RlYygpCW1lbWJhcigiI1N0b3JlTG9hZCB8ICNMb2FkTG9hZCIpCisjZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2RlYygpCW1lbWJhcigiI1N0b3JlTG9hZCB8ICNTdG9yZVN0b3JlIikKKyNkZWZpbmUgc21wX21iX19iZWZvcmVfYXRvbWljX2luYygpCW1lbWJhcigiI1N0b3JlTG9hZCB8ICNMb2FkTG9hZCIpCisjZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpCW1lbWJhcigiI1N0b3JlTG9hZCB8ICNTdG9yZVN0b3JlIikKKyNlbHNlCisjZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19kZWMoKQliYXJyaWVyKCkKKyNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWNfZGVjKCkJYmFycmllcigpCisjZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19pbmMoKQliYXJyaWVyKCkKKyNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWNfaW5jKCkJYmFycmllcigpCisjZW5kaWYKKworI2VuZGlmIC8qICEoX19BUkNIX1NQQVJDNjRfQVRPTUlDX18pICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2F1ZGlvaW8uaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvYXVkaW9pby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmMTYxNzMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2F1ZGlvaW8uaApAQCAtMCwwICsxLDIzNCBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLXNwYXJjL2F1ZGlvaW8uaAorICoKKyAqIFNwYXJjIEF1ZGlvIE1pZGxheWVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYgVGhvbWFzIEsuIER5YXMgKHRkeWFzQG5vYy5ydXRnZXJzLmVkdSkKKyAqLworCisjaWZuZGVmIF9BVURJT0lPX0hfCisjZGVmaW5lIF9BVURJT0lPX0hfCisKKy8qCisgKglTdW5PUy9Tb2xhcmlzIC9kZXYvYXVkaW8gaW50ZXJmYWNlCisgKi8KKworI2lmIGRlZmluZWQoX19LRVJORUxfXykgfHwgIWRlZmluZWQoX19HTElCQ19fKSB8fCAoX19HTElCQ19fIDwgMikKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorI2VuZGlmCisKKy8qCisgKiBUaGlzIHN0cnVjdHVyZSBjb250YWlucyBzdGF0ZSBpbmZvcm1hdGlvbiBmb3IgYXVkaW8gZGV2aWNlIElPIHN0cmVhbXMuCisgKi8KK3R5cGVkZWYgc3RydWN0IGF1ZGlvX3ByaW5mbyB7CisJLyoKKwkgKiBUaGUgZm9sbG93aW5nIHZhbHVlcyBkZXNjcmliZSB0aGUgYXVkaW8gZGF0YSBlbmNvZGluZy4KKwkgKi8KKwl1bnNpZ25lZCBpbnQgc2FtcGxlX3JhdGU7CS8qIHNhbXBsZXMgcGVyIHNlY29uZCAqLworCXVuc2lnbmVkIGludCBjaGFubmVsczsJLyogbnVtYmVyIG9mIGludGVybGVhdmVkIGNoYW5uZWxzICovCisJdW5zaWduZWQgaW50IHByZWNpc2lvbjsJLyogYml0LXdpZHRoIG9mIGVhY2ggc2FtcGxlICovCisJdW5zaWduZWQgaW50IGVuY29kaW5nOwkvKiBkYXRhIGVuY29kaW5nIG1ldGhvZCAqLworCisJLyoKKwkgKiBUaGUgZm9sbG93aW5nIHZhbHVlcyBjb250cm9sIGF1ZGlvIGRldmljZSBjb25maWd1cmF0aW9uCisJICovCisJdW5zaWduZWQgaW50IGdhaW47CQkvKiBnYWluIGxldmVsOiAwIC0gMjU1ICovCisJdW5zaWduZWQgaW50IHBvcnQ7CQkvKiBzZWxlY3RlZCBJL08gcG9ydCAoc2VlIGJlbG93KSAqLworCXVuc2lnbmVkIGludCBhdmFpbF9wb3J0czsJLyogYXZhaWxhYmxlIEkvTyBwb3J0cyAoc2VlIGJlbG93KSAqLworCXVuc2lnbmVkIGludCBfeHh4WzJdOwkJLyogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKi8KKworCXVuc2lnbmVkIGludCBidWZmZXJfc2l6ZTsJLyogSS9PIGJ1ZmZlciBzaXplICovCisKKwkvKgorCSAqIFRoZSBmb2xsb3dpbmcgdmFsdWVzIGRlc2NyaWJlIGRyaXZlciBzdGF0ZQorCSAqLworCXVuc2lnbmVkIGludCBzYW1wbGVzOwkJLyogbnVtYmVyIG9mIHNhbXBsZXMgY29udmVydGVkICovCisJdW5zaWduZWQgaW50IGVvZjsJCS8qIEVuZCBPZiBGaWxlIGNvdW50ZXIgKHBsYXkgb25seSkgKi8KKworCXVuc2lnbmVkIGNoYXIJcGF1c2U7CQkvKiBub24temVybyBmb3IgcGF1c2UsIHplcm8gdG8gcmVzdW1lICovCisJdW5zaWduZWQgY2hhcgllcnJvcjsJCS8qIG5vbi16ZXJvIGlmIG92ZXJmbG93L3VuZGVyZmxvdyAqLworCXVuc2lnbmVkIGNoYXIJd2FpdGluZzsJLyogbm9uLXplcm8gaWYgYSBwcm9jZXNzIHdhbnRzIGFjY2VzcyAqLworCXVuc2lnbmVkIGNoYXIgYmFsYW5jZTsJLyogc3RlcmVvIGNoYW5uZWwgYmFsYW5jZSAqLworCisJdW5zaWduZWQgc2hvcnQgbWlub3JkZXY7CisKKwkvKgorCSAqIFRoZSBmb2xsb3dpbmcgdmFsdWVzIGFyZSByZWFkLW9ubHkgc3RhdGUgZmxhZ3MKKwkgKi8KKwl1bnNpZ25lZCBjaGFyIG9wZW47CQkvKiBub24temVybyBpZiBvcGVuIGFjY2VzcyBwZXJtaXR0ZWQgKi8KKwl1bnNpZ25lZCBjaGFyIGFjdGl2ZTsJCS8qIG5vbi16ZXJvIGlmIEkvTyBpcyBhY3RpdmUgKi8KK30gYXVkaW9fcHJpbmZvX3Q7CisKKworLyoKKyAqIFRoaXMgc3RydWN0dXJlIGRlc2NyaWJlcyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgYXVkaW8gZGV2aWNlLgorICovCit0eXBlZGVmIHN0cnVjdCBhdWRpb19pbmZvIHsKKwkvKgorCSAqIFBlci1zdHJlYW0gaW5mb3JtYXRpb24KKwkgKi8KKwlhdWRpb19wcmluZm9fdCBwbGF5OwkvKiBvdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uICovCisJYXVkaW9fcHJpbmZvX3QgcmVjb3JkOwkvKiBpbnB1dCBzdGF0dXMgaW5mb3JtYXRpb24gKi8KKworCS8qCisJICogUGVyLXVuaXQvY2hhbm5lbCBpbmZvcm1hdGlvbgorCSAqLworCXVuc2lnbmVkIGludCBtb25pdG9yX2dhaW47CS8qIGlucHV0IHRvIG91dHB1dCBtaXg6IDAgLSAyNTUgKi8KKwl1bnNpZ25lZCBjaGFyIG91dHB1dF9tdXRlZDsJLyogbm9uLXplcm8gaWYgb3V0cHV0IGlzIG11dGVkICovCisJdW5zaWduZWQgY2hhciBfeHh4WzNdOwkvKiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqLworCXVuc2lnbmVkIGludCBfeXl5WzNdOwkJLyogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKi8KK30gYXVkaW9faW5mb190OworCisKKy8qCisgKiBBdWRpbyBlbmNvZGluZyB0eXBlcworICovCisjZGVmaW5lCUFVRElPX0VOQ09ESU5HX05PTkUJKDApCS8qIG5vIGVuY29kaW5nIGFzc2lnbmVkCSAgKi8KKyNkZWZpbmUJQVVESU9fRU5DT0RJTkdfVUxBVwkoMSkJLyogdS1sYXcgZW5jb2RpbmcJICAqLworI2RlZmluZQlBVURJT19FTkNPRElOR19BTEFXCSgyKQkvKiBBLWxhdyBlbmNvZGluZwkgICovCisjZGVmaW5lCUFVRElPX0VOQ09ESU5HX0xJTkVBUgkoMykJLyogTGluZWFyIFBDTSBlbmNvZGluZwkgICovCisjZGVmaW5lIEFVRElPX0VOQ09ESU5HX0ZMT0FUICAgICg0KSAgICAgLyogSUVFRSBmbG9hdCAoLTEuIDwtPiArMS4pICovCisjZGVmaW5lCUFVRElPX0VOQ09ESU5HX0RWSQkoMTA0KQkvKiBEVkkgQURQQ00JCSAgKi8KKyNkZWZpbmUJQVVESU9fRU5DT0RJTkdfTElORUFSOAkoMTA1KQkvKiA4IGJpdCBVTlNJR05FRAkgICovCisjZGVmaW5lCUFVRElPX0VOQ09ESU5HX0xJTkVBUkxFCSgxMDYpCS8qIExpbmVhciBQQ00gTEUgZW5jb2RpbmcgKi8KKworLyoKKyAqIFRoZXNlIHJhbmdlcyBhcHBseSB0byByZWNvcmQsIHBsYXksIGFuZCBtb25pdG9yIGdhaW4gdmFsdWVzCisgKi8KKyNkZWZpbmUJQVVESU9fTUlOX0dBSU4JKDApCS8qIG1pbmltdW0gZ2FpbiB2YWx1ZSAqLworI2RlZmluZQlBVURJT19NQVhfR0FJTgkoMjU1KQkvKiBtYXhpbXVtIGdhaW4gdmFsdWUgKi8KKworLyoKKyAqIFRoZXNlIHZhbHVlcyBhcHBseSB0byB0aGUgYmFsYW5jZSBmaWVsZCB0byBhZGp1c3QgY2hhbm5lbCBnYWluIHZhbHVlcworICovCisjZGVmaW5lCUFVRElPX0xFRlRfQkFMQU5DRQkoMCkJLyogbGVmdCBjaGFubmVsIG9ubHkJKi8KKyNkZWZpbmUJQVVESU9fTUlEX0JBTEFOQ0UJKDMyKQkvKiBlcXVhbCBsZWZ0L3JpZ2h0IGNoYW5uZWwgKi8KKyNkZWZpbmUJQVVESU9fUklHSFRfQkFMQU5DRQkoNjQpCS8qIHJpZ2h0IGNoYW5uZWwgb25seQkqLworI2RlZmluZQlBVURJT19CQUxBTkNFX1NISUZUCSgzKQorCisvKgorICogR2VuZXJpYyBtaW5pbXVtL21heGltdW0gbGltaXRzIGZvciBudW1iZXIgb2YgY2hhbm5lbHMsIGJvdGggbW9kZXMKKyAqLworI2RlZmluZQlBVURJT19NSU5fUExBWV9DSEFOTkVMUwkoMSkKKyNkZWZpbmUJQVVESU9fTUFYX1BMQVlfQ0hBTk5FTFMJKDQpCisjZGVmaW5lCUFVRElPX01JTl9SRUNfQ0hBTk5FTFMJKDEpCisjZGVmaW5lCUFVRElPX01BWF9SRUNfQ0hBTk5FTFMJKDQpCisKKy8qCisgKiBHZW5lcmljIG1pbmltdW0vbWF4aW11bSBsaW1pdHMgZm9yIHNhbXBsZSBwcmVjaXNpb24KKyAqLworI2RlZmluZQlBVURJT19NSU5fUExBWV9QUkVDSVNJT04JKDgpCisjZGVmaW5lCUFVRElPX01BWF9QTEFZX1BSRUNJU0lPTgkoMzIpCisjZGVmaW5lCUFVRElPX01JTl9SRUNfUFJFQ0lTSU9OCQkoOCkKKyNkZWZpbmUJQVVESU9fTUFYX1JFQ19QUkVDSVNJT04JCSgzMikKKworLyoKKyAqIERlZmluZSBzb21lIGNvbnZlbmllbnQgbmFtZXMgZm9yIHR5cGljYWwgYXVkaW8gcG9ydHMKKyAqLworLyoKKyAqIG91dHB1dCBwb3J0cyAoc2V2ZXJhbCBtYXkgYmUgZW5hYmxlZCBzaW11bHRhbmVvdXNseSkKKyAqLworI2RlZmluZQlBVURJT19TUEVBS0VSCQkweDAxCS8qIG91dHB1dCB0byBidWlsdC1pbiBzcGVha2VyICovCisjZGVmaW5lCUFVRElPX0hFQURQSE9ORQkJMHgwMgkvKiBvdXRwdXQgdG8gaGVhZHBob25lIGphY2sgKi8KKyNkZWZpbmUJQVVESU9fTElORV9PVVQJCTB4MDQJLyogb3V0cHV0IHRvIGxpbmUgb3V0CSAqLworCisvKgorICogaW5wdXQgcG9ydHMgKHVzdWFsbHkgb25seSBvbmUgYXQgYSB0aW1lKQorICovCisjZGVmaW5lCUFVRElPX01JQ1JPUEhPTkUJMHgwMQkvKiBpbnB1dCBmcm9tIG1pY3JvcGhvbmUgKi8KKyNkZWZpbmUJQVVESU9fTElORV9JTgkJMHgwMgkvKiBpbnB1dCBmcm9tIGxpbmUgaW4JICovCisjZGVmaW5lCUFVRElPX0NECQkweDA0CS8qIGlucHV0IGZyb20gb24tYm9hcmQgQ0QgaW5wdXRzICovCisjZGVmaW5lCUFVRElPX0lOVEVSTkFMX0NEX0lOCUFVRElPX0NECS8qIGlucHV0IGZyb20gaW50ZXJuYWwgQ0RST00gKi8KKyNkZWZpbmUgQVVESU9fQU5BTE9HX0xPT1BCQUNLICAgMHg0MCAgICAvKiBpbnB1dCBmcm9tIG91dHB1dCAqLworCisKKy8qCisgKiBUaGlzIG1hY3JvIGluaXRpYWxpemVzIGFuIGF1ZGlvX2luZm8gc3RydWN0dXJlIHRvICdoYXJtbGVzcycgdmFsdWVzLgorICogTm90ZSB0aGF0ICh+MCkgbWlnaHQgbm90IGJlIGEgaGFybWxlc3MgdmFsdWUgZm9yIGEgZmxhZyB0aGF0IHdhcworICogYSBzaWduZWQgaW50LgorICovCisjZGVmaW5lCUFVRElPX0lOSVRJTkZPKGkpCXsJCQkJCVwKKwl1bnNpZ25lZCBpbnQJKl9feF9fOwkJCQkJCVwKKwlmb3IgKF9feF9fID0gKHVuc2lnbmVkIGludCAqKShpKTsJCQkJXAorCSAgICAoY2hhciAqKSBfX3hfXyA8ICgoKGNoYXIgKikoaSkpICsgc2l6ZW9mIChhdWRpb19pbmZvX3QpKTsJXAorCSAgICAqX194X18rKyA9IH4wKTsJCQkJCQlcCit9CisKKy8qCisgKiBUaGVzZSBhbGxvdyB0ZXN0aW5nIGZvciB3aGF0IHRoZSB1c2VyIHdhbnRzIHRvIHNldCAKKyAqLworI2RlZmluZSBBVURfSU5JVFZBTFVFICAgKH4wKQorI2RlZmluZSBNb2RpZnkoWCkgICAgICAgKCh1bnNpZ25lZCBpbnQpKFgpICE9IEFVRF9JTklUVkFMVUUpCisjZGVmaW5lIE1vZGlmeXMoWCkgICAgICAoKFgpICE9ICh1bnNpZ25lZCBzaG9ydClBVURfSU5JVFZBTFVFKQorI2RlZmluZSBNb2RpZnljKFgpICAgICAgKChYKSAhPSAodW5zaWduZWQgY2hhcilBVURfSU5JVFZBTFVFKQorCisvKgorICogUGFyYW1ldGVyIGZvciB0aGUgQVVESU9fR0VUREVWIGlvY3RsIHRvIGRldGVybWluZSBjdXJyZW50CisgKiBhdWRpbyBkZXZpY2VzLgorICovCisjZGVmaW5lCU1BWF9BVURJT19ERVZfTEVOCSgxNikKK3R5cGVkZWYgc3RydWN0IGF1ZGlvX2RldmljZSB7CisJY2hhciBuYW1lW01BWF9BVURJT19ERVZfTEVOXTsKKwljaGFyIHZlcnNpb25bTUFYX0FVRElPX0RFVl9MRU5dOworCWNoYXIgY29uZmlnW01BWF9BVURJT19ERVZfTEVOXTsKK30gYXVkaW9fZGV2aWNlX3Q7CisKKworLyoKKyAqIElvY3RsIGNhbGxzIGZvciB0aGUgYXVkaW8gZGV2aWNlLgorICovCisKKy8qCisgKiBBVURJT19HRVRJTkZPIHJldHJpZXZlcyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgYXVkaW8gZGV2aWNlLgorICoKKyAqIEFVRElPX1NFVElORk8gY29waWVzIGFsbCBmaWVsZHMgb2YgdGhlIGF1ZGlvX2luZm8gc3RydWN0dXJlIHdob3NlCisgKiB2YWx1ZXMgYXJlIG5vdCBzZXQgdG8gdGhlIGluaXRpYWxpemVkIHZhbHVlICgtMSkgdG8gdGhlIGRldmljZSBzdGF0ZS4KKyAqIEl0IHBlcmZvcm1zIGFuIGltcGxpY2l0IEFVRElPX0dFVElORk8gdG8gcmV0dXJuIHRoZSBuZXcgc3RhdGUgb2YgdGhlCisgKiBkZXZpY2UuICBOb3RlIHRoYXQgdGhlIHJlY29yZC5zYW1wbGVzIGFuZCBwbGF5LnNhbXBsZXMgZmllbGRzIGFyZSBzZXQKKyAqIHRvIHRoZSBsYXN0IHZhbHVlIGJlZm9yZSB0aGUgQVVESU9fU0VUSU5GTyB0b29rIGVmZmVjdC4gIFRoaXMgYWxsb3dzCisgKiBhbiBhcHBsaWNhdGlvbiB0byByZXNldCB0aGUgY291bnRlcnMgd2hpbGUgYXRvbWljYWxseSByZXRyaWV2aW5nIHRoZQorICogbGFzdCB2YWx1ZS4KKyAqCisgKiBBVURJT19EUkFJTiBzdXNwZW5kcyB0aGUgY2FsbGluZyBwcm9jZXNzIHVudGlsIHRoZSB3cml0ZSBidWZmZXJzIGFyZQorICogZW1wdHkuCisgKgorICogQVVESU9fR0VUREVWIHJldHVybnMgYSBzdHJ1Y3R1cmUgb2YgdHlwZSBhdWRpb19kZXZpY2VfdCB3aGljaCBjb250YWlucworICogdGhyZWUgc3RyaW5ncy4gIFRoZSBzdHJpbmcgIm5hbWUiIGlzIGEgc2hvcnQgaWRlbnRpZnlpbmcgc3RyaW5nIChmb3IKKyAqIGV4YW1wbGUsIHRoZSBTQnVzIEZjb2RlIG5hbWUgc3RyaW5nKSwgdGhlIHN0cmluZyAidmVyc2lvbiIgaWRlbnRpZmllcworICogdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgZGV2aWNlLCBhbmQgdGhlICJjb25maWciIHN0cmluZyBpZGVudGlmaWVzCisgKiB0aGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvZiB0aGUgYXVkaW8gc3RyZWFtLiAgQWxsIGZpZWxkcyBhcmUKKyAqIGRldmljZS1kZXBlbmRlbnQgLS0gc2VlIHRoZSBkZXZpY2Ugc3BlY2lmaWMgbWFudWFsIHBhZ2VzIGZvciBkZXRhaWxzLgorICoKKyAqIEFVRElPX0dFVERFVl9TVU5PUyByZXR1cm5zIGEgbnVtYmVyIHdoaWNoIGlzIGFuIGF1ZGlvIGRldmljZSBkZWZpbmVkIAorICogaGVyZWluIChtYWtpbmcgaXQgbm90IHRvbyBwb3J0YWJsZSkKKyAqCisgKiBBVURJT19GTFVTSCBzdG9wcyBhbGwgcGxheWJhY2sgYW5kIHJlY29yZGluZywgY2xlYXJzIGFsbCBxdWV1ZWQgYnVmZmVycywgCisgKiByZXNldHMgZXJyb3IgY291bnRlcnMsIGFuZCByZXN0YXJ0cyByZWNvcmRpbmcgYW5kIHBsYXliYWNrIGFzIGFwcHJvcHJpYXRlCisgKiBmb3IgdGhlIGN1cnJlbnQgc2FtcGxpbmcgbW9kZS4KKyAqLworI2RlZmluZQlBVURJT19HRVRJTkZPCV9JT1IoJ0EnLCAxLCBhdWRpb19pbmZvX3QpCisjZGVmaW5lCUFVRElPX1NFVElORk8JX0lPV1IoJ0EnLCAyLCBhdWRpb19pbmZvX3QpCisjZGVmaW5lCUFVRElPX0RSQUlOCV9JTygnQScsIDMpCisjZGVmaW5lCUFVRElPX0dFVERFVglfSU9SKCdBJywgNCwgYXVkaW9fZGV2aWNlX3QpCisjZGVmaW5lCUFVRElPX0dFVERFVl9TVU5PUwlfSU9SKCdBJywgNCwgaW50KQorI2RlZmluZSBBVURJT19GTFVTSCAgICAgX0lPKCdBJywgNSkKKworLyogRGVmaW5lIHBvc3NpYmxlIGF1ZGlvIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zIGZvciAKKyAqIG9sZCBTdW5PUy1zdHlsZSBBVURJT19HRVRERVYgaW9jdGwgKi8KKyNkZWZpbmUgQVVESU9fREVWX1VOS05PV04gICAgICAgKDApICAgICAvKiBub3QgZGVmaW5lZCAqLworI2RlZmluZSBBVURJT19ERVZfQU1EICAgICAgICAgICAoMSkgICAgIC8qIGF1ZGlvYW1kIGRldmljZSAqLworI2RlZmluZSBBVURJT19ERVZfU1BFQUtFUkJPWCAgICAoMikgICAgIC8qIGRicmkgZGV2aWNlIHdpdGggc3BlYWtlcmJveCAqLworI2RlZmluZSBBVURJT19ERVZfQ09ERUMgICAgICAgICAoMykgICAgIC8qIGRicmkgZGV2aWNlIChpbnRlcm5hbCBzcGVha2VyKSAqLworI2RlZmluZSBBVURJT19ERVZfQ1M0MjMxICAgICAgICAoNSkgICAgIC8qIGNzNDIzMSBkZXZpY2UgKi8KKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgaW9jdGwgc2V0cyB0aGUgYXVkaW8gZGV2aWNlIGludG8gYW4gaW50ZXJuYWwgbG9vcGJhY2sgbW9kZSwKKyAqIGlmIHRoZSBoYXJkd2FyZSBzdXBwb3J0cyB0aGlzLiAgVGhlIGFyZ3VtZW50IGlzIFRSVUUgdG8gc2V0IGxvb3BiYWNrLAorICogRkFMU0UgdG8gcmVzZXQgdG8gbm9ybWFsIG9wZXJhdGlvbi4gIElmIHRoZSBoYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0CisgKiBpbnRlcm5hbCBsb29wYmFjaywgdGhlIGlvY3RsIHNob3VsZCBmYWlsIHdpdGggRUlOVkFMLgorICogQ2F1c2VzIEFEQyBkYXRhIHRvIGJlIGRpZ2l0YWxseSBtaXhlZCBpbiBhbmQgc2VudCB0byB0aGUgREFDLgorICovCisjZGVmaW5lCUFVRElPX0RJQUdfTE9PUEJBQ0sJX0lPVygnQScsIDEwMSwgaW50KQorCisjZW5kaWYgLyogX0FVRElPSU9fSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvYXV4aW8uaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvYXV4aW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWIwMWRkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9hdXhpby5oCkBAIC0wLDAgKzEsOTggQEAKKy8qICRJZDogYXV4aW8uaCx2IDEuMyAyMDAxLzA2LzA1IDA4OjE2OjM0IGRhdmVtIEV4cCAkCisgKiBhdXhpby5oOiAgRGVmaW5pdGlvbnMgYW5kIGNvZGUgZm9yIHRoZSBBdXhpbGlhcnkgSS9PIHJlZ2lzdGVycy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQorICoKKyAqIFJlZmFjdG9yaW5nIGZvciB1bmlmaWVkIE5DUi9QQ0lPIHN1cHBvcnQgMjAwMiBFcmljIEJyb3dlciAoZWJyb3dlckB1c2EubmV0KQorICovCisjaWZuZGVmIF9TUEFSQzY0X0FVWElPX0gKKyNkZWZpbmUgX1NQQVJDNjRfQVVYSU9fSAorCisvKiBBVVhJTyBpbXBsZW1lbnRhdGlvbnM6CisgKiBzYnVzLWJhc2VkIE5DUjg5QzEwNSAiU2xhdmlvIgorICoJTEVEL0Zsb3BweSAoQVVYMSkgcmVnaXN0ZXIKKyAqCVBvd2VyIChBVVgyKSByZWdpc3RlcgorICoKKyAqIGVidXMtYmFzZWQgYXV4aW8gb24gUENJTyAKKyAqCUxFRCBBdXhpbyBSZWdpc3RlcgorICoJUG93ZXIgQXV4aW8gUmVnaXN0ZXIKKyAqCisgKiBSZWdpc3RlciBkZWZpbml0aW9ucyBmcm9tIE5DUiBfTkNSODlDMTA1IENoaXAgU3BlY2lmaWNhdGlvbl8KKyAqIAorICogU0xBVklPIEFVWDEgQCAweDE5MDAwMDAKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHwgKFIpIHwgKFIpIHwgIEQgIHwgKFIpIHwgIEUgIHwgIE0gIHwgIFQgIHwgIEwgIHwKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIChSKSAtIGJpdCA3OjYsNCBhcmUgcmVzZXJ2ZWQgYW5kIHNob3VsZCBiZSBtYXNrZWQgaW4gcy93CisgKiAgRCAgLSBGbG9wcHkgRGVuc2l0eSBTZW5zZSAoMT1oaWdoIGRlbnNpdHkpIFIvTworICogIEUgIC0gTGluayBUZXN0IEVuYWJsZSwgZGlyZWN0bHkgcmVmbGVjdGVkIG9uIEFUJlQgNzIxMyBMVEUgcGluCisgKiAgTSAgLSBNb25pdG9yL01vdXNlIE11eCwgZGlyZWN0bHkgcmVmbGVjdGVkIG9uIE1PTl9NU0VfTVVYIHBpbgorICogIFQgIC0gVGVybWluYWwgQ291bnQ6IHNlbmRzIFRDIHB1bHNlIHRvIDgyMDc3IGZsb3BweSBjb250cm9sbGVyCisgKiAgTCAgLSBTeXN0ZW0gTEVEIG9uIGZyb250IHBhbmVsICgwPW9mZiwgMT1vbikgCisgKi8KKyNkZWZpbmUgQVVYSU9fQVVYMV9NQVNLCQkweGMwIC8qIE1hc2sgYml0cyAJCSovCisjZGVmaW5lIEFVWElPX0FVWDFfRkRFTlMJMHgyMCAvKiBGbG9wcHkgRGVuc2l0eSBTZW5zZQkqLworI2RlZmluZSBBVVhJT19BVVgxX0xURSAJCTB4MDggLyogTGluayBUZXN0IEVuYWJsZSAJKi8KKyNkZWZpbmUgQVVYSU9fQVVYMV9NTVVYCQkweDA0IC8qIE1vbml0b3IvTW91c2UgTXV4CSovCisjZGVmaW5lIEFVWElPX0FVWDFfRlRDTlQJMHgwMiAvKiBUZXJtaW5hbCBDb3VudCwgCSovCisjZGVmaW5lIEFVWElPX0FVWDFfTEVECQkweDAxIC8qIFN5c3RlbSBMRUQJCSovCisKKy8qIFNMQVZJTyBBVVgyIEAgMHgxOTEwMDAwCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiB8IChSKSB8IChSKSB8ICBEICB8IChSKSB8IChSKSB8IChSKSB8ICBDICB8ICBGICB8CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAoUikgLSBiaXRzIDc6Niw0OjIgYXJlIHJlc2VydmVkIGFuZCBzaG91bGQgYmUgbWFza2VkIGluIHMvdworICogIEQgIC0gUG93ZXIgRmFpbHVyZSBEZXRlY3QgKDE9cG93ZXIgZmFpbCkKKyAqICBDICAtIENsZWFyIFBvd2VyIEZhaWx1cmUgRGV0ZWN0IEludCAoMT1jbGVhcikKKyAqICBGICAtIFBvd2VyIE9mZiAoMT1wb3dlciBvZmYpCisgKi8KKyNkZWZpbmUgQVVYSU9fQVVYMl9NQVNLCQkweGRjIC8qIE1hc2sgQml0cwkJKi8KKyNkZWZpbmUgQVVYSU9fQVVYMl9QRkFJTERFVAkweDIwIC8qIFBvd2VyIEZhaWwgRGV0ZWN0CSovCisjZGVmaW5lIEFVWElPX0FVWDJfUEZBSUxDTFIgCTB4MDIgLyogQ2xlYXIgUHdyIEZhaWwgRGV0IEludHIJKi8KKyNkZWZpbmUgQVVYSU9fQVVYMl9QV1JfT0ZGCTB4MDEgLyogUG93ZXIgT2ZmCQkqLworCisvKiBSZWdpc3RlciBkZWZpbml0aW9ucyBmcm9tIFN1biBNaWNyb3N5c3RlbXMgX1BDSU9fIHAvbiA4MDItNzgzNworICoKKyAqIFBDSU8gTEVEIEF1eGlvIEAgMHg3MjYwMDAKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHwgICAgICAgICAgICAgMzE6MSBVbnVzZWQgICAgICAgICAgICAgICAgIHwgTEVEIHwKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEJpdHMgMzE6MSB1bnVzZWQKKyAqIExFRCAtIFN5c3RlbSBMRUQgb24gZnJvbnQgcGFuZWwgKDA9b2ZmLCAxPW9uKQorICovCisjZGVmaW5lIEFVWElPX1BDSU9fTEVECQkweDAxIC8qIFN5c3RlbSBMRUQgCQkqLyAKKworLyogUENJTyBQb3dlciBBdXhpbyBAIDB4NzI0MDAwCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiB8ICAgICAgICAgICAgIDMxOjIgVW51c2VkICAgICAgICAgICB8IENQTyB8IFNQTyB8CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBCaXRzIDMxOjIgdW51c2VkCisgKiBDUE8gLSBDb3VydGVzeSBQb3dlciBPZmYgKDE9b2ZmKQorICogU1BPIC0gU3lzdGVtIFBvd2VyIE9mZiAgICgxPW9mZikKKyAqLworI2RlZmluZSBBVVhJT19QQ0lPX0NQV1JfT0ZGCTB4MDIgLyogQ291cnRlc3kgUG93ZXIgT2ZmCSovCisjZGVmaW5lIEFVWElPX1BDSU9fU1BXUl9PRkYJMHgwMSAvKiBTeXN0ZW0gUG93ZXIgT2ZmCSovCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNkZWZpbmUgQVVYSU9fTFRFX09OCTEKKyNkZWZpbmUgQVVYSU9fTFRFX09GRgkwCisKKy8qIGF1eGlvX3NldF9sdGUgLSBTZXQgTGluayBUZXN0IEVuYWJsZSAoVFBFIExpbmsgRGV0ZWN0KQorICoKKyAqIG9uIC0gQVVYSU9fTFRFX09OIG9yIEFVWElPX0xURV9PRkYKKyAqLworZXh0ZXJuIHZvaWQgYXV4aW9fc2V0X2x0ZShpbnQgb24pOworCisjZGVmaW5lIEFVWElPX0xFRF9PTgkxCisjZGVmaW5lIEFVWElPX0xFRF9PRkYJMAorCisvKiBhdXhpb19zZXRfbGVkIC0gU2V0IHN5c3RlbSBmcm9udCBwYW5lbCBMRUQgCisgKgorICogb24gLSBBVVhJT19MRURfT04gb3IgQVVYSU9fTEVEX09GRgorICovCitleHRlcm4gdm9pZCBhdXhpb19zZXRfbGVkKGludCBvbik7CisKKyNlbmRpZiAvKiBpZm5kZWYgX19BU1NFTUJMWV9fICovIAorCisjZW5kaWYgLyogIShfU1BBUkM2NF9BVVhJT19IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9iYmMuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvYmJjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY4ZmNlNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvYmJjLmgKQEAgLTAsMCArMSwyMjUgQEAKKy8qICRJZDogYmJjLmgsdiAxLjIgMjAwMS8wMy8yNiAyMzo0NzoxOCBkYXZlbSBFeHAgJAorICogYmJjLmg6IERlZmluZXMgZm9yIEJvb3RCdXMgQ29udHJvbGxlciBmb3VuZCBvbiBVbHRyYVNQQVJDLUlJSQorICogICAgICAgIHN5c3RlbXMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwIERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AcmVkaGF0LmNvbSkKKyAqLworCisjaWZuZGVmIF9TUEFSQzY0X0JCQ19ICisjZGVmaW5lIF9TUEFSQzY0X0JCQ19ICisKKy8qIFJlZ2lzdGVyIHNpemVzIGFyZSBpbmRpY2F0ZWQgYnkgIkIiIChCeXRlLCAxLWJ5dGUpLAorICogIkgiIChIYWxmLXdvcmQsIDIgYnl0ZXMpLCAiVyIgKFdvcmQsIDQgYnl0ZXMpIG9yCisgKiAiUSIgKFF1YWQsIDggYnl0ZXMpIGluc2lkZSBicmFja2V0cy4KKyAqLworCisjZGVmaW5lIEJCQ19BSUQJCTB4MDAJLyogW0JdIEFnZW50IElECQkJKi8KKyNkZWZpbmUgQkJDX0RFVlAJMHgwMQkvKiBbQl0gRGV2aWNlIFByZXNlbnQJCSovCisjZGVmaW5lIEJCQ19BUkIJCTB4MDIJLyogW0JdIEFyYml0cmF0aW9uCQkqLworI2RlZmluZSBCQkNfUVVJRVNDRQkweDAzCS8qIFtCXSBRdWllc2NlCQkJKi8KKyNkZWZpbmUgQkJDX1dEQUNUSU9OCTB4MDQJLyogW0JdIFdhdGNoZG9nIEFjdGlvbgkJKi8KKyNkZWZpbmUgQkJDX1NQRwkJMHgwNgkvKiBbQl0gU29mdCBQT1IgR2VuCQkqLworI2RlZmluZSBCQkNfU1hHCQkweDA3CS8qIFtCXSBTb2Z0IFhJUiBHZW4JCSovCisjZGVmaW5lIEJCQ19QU1JDCTB4MDgJLyogW1ddIFBPUiBTb3VyY2UJCSovCisjZGVmaW5lIEJCQ19YU1JDCTB4MGMJLyogW0JdIFhJUiBTb3VyY2UJCSovCisjZGVmaW5lIEJCQ19DU0MJCTB4MGQJLyogW0JdIENsb2NrIFN5bnRoZXNpemVycyBDb250cm9sKi8KKyNkZWZpbmUgQkJDX0VTX0NUUkwJMHgwZQkvKiBbSF0gRW5lcmd5IFN0YXIgQ29udHJvbAkqLworI2RlZmluZSBCQkNfRVNfQUNUCTB4MTAJLyogW1ddIEUqIEFzc2VydCBDaGFuZ2UgVGltZQkqLworI2RlZmluZSBCQkNfRVNfREFDVAkweDE0CS8qIFtCXSBFKiBEZS1Bc3NlcnQgQ2hhbmdlIFRpbWUJKi8KKyNkZWZpbmUgQkJDX0VTX0RBQlQJMHgxNQkvKiBbQl0gRSogRGUtQXNzZXJ0IEJ5cGFzcyBUaW1lCSovCisjZGVmaW5lIEJCQ19FU19BQlQJMHgxNgkvKiBbSF0gRSogQXNzZXJ0IEJ5cGFzcyBUaW1lCSovCisjZGVmaW5lIEJCQ19FU19QU1QJMHgxOAkvKiBbV10gRSogUExMIFNldHRsZSBUaW1lCSovCisjZGVmaW5lIEJCQ19FU19GU0wJMHgxYwkvKiBbV10gRSogRnJlcXVlbmN5IFN3aXRjaCBMYXRlbmN5Ki8KKyNkZWZpbmUgQkJDX0VCVVNUCTB4MjAJLyogW1FdIEVCVVMgVGltaW5nCQkqLworI2RlZmluZSBCQkNfSlRBR19DTUQJMHgyOAkvKiBbV10gSlRBRysgQ29tbWFuZAkJKi8KKyNkZWZpbmUgQkJDX0pUQUdfQ1RSTAkweDJjCS8qIFtCXSBKVEFHKyBDb250cm9sCQkqLworI2RlZmluZSBCQkNfSTJDX1NFTAkweDJkCS8qIFtCXSBJMkMgU2VsZWN0aW9uCQkqLworI2RlZmluZSBCQkNfSTJDXzBfUzEJMHgyZQkvKiBbQl0gSTJDIGN0cmxyLTAgcmVnIFMxCSovCisjZGVmaW5lIEJCQ19JMkNfMF9TMAkweDJmCS8qIFtCXSBJMkMgY3RybHItMCByZWdzIFMwLFMwJyxTMixTMyovCisjZGVmaW5lIEJCQ19JMkNfMV9TMQkweDMwCS8qIFtCXSBJMkMgY3RybHItMSByZWcgUzEJKi8KKyNkZWZpbmUgQkJDX0kyQ18xX1MwCTB4MzEJLyogW0JdIEkyQyBjdHJsci0xIHJlZ3MgUzAsUzAnLFMyLFMzKi8KKyNkZWZpbmUgQkJDX0tCRF9CRUVQCTB4MzIJLyogW0JdIEtleWJvYXJkIEJlZXAJCSovCisjZGVmaW5lIEJCQ19LQkRfQkNOVAkweDM0CS8qIFtXXSBLZXlib2FyZCBCZWVwIENvdW50ZXIJKi8KKworI2RlZmluZSBCQkNfUkVHU19TSVpFCTB4NDAKKworLyogVGhlcmUgaXMgYSAySyBzY3JhdGNoIHJhbSBhcmVhIGF0IG9mZnNldCAweDgwMDAwIGJ1dCBJIGRvdWJ0CisgKiB3ZSB3aWxsIHVzZSBpdCBmb3IgYW55dGhpbmcuCisgKi8KKworLyogQWdlbnQgSUQgcmVnaXN0ZXIuICBUaGlzIHJlZ2lzdGVyIHNob3dzIHRoZSBTYWZhcmkgQWdlbnQgSUQKKyAqIGZvciB0aGUgcHJvY2Vzc29ycy4gIFRoZSB2YWx1ZSByZXR1cm5lZCBkZXBlbmRzIHVwb24gd2hpY2gKKyAqIGNwdSBpcyByZWFkaW5nIHRoZSByZWdpc3Rlci4KKyAqLworI2RlZmluZSBCQkNfQUlEX0lECTB4MDcJLyogU2FmYXJpIElECQkqLworI2RlZmluZSBCQkNfQUlEX1JFU1YJMHhmOAkvKiBSZXNlcnZlZAkJKi8KKworLyogRGV2aWNlIFByZXNlbnQgcmVnaXN0ZXIuICBPbmUgY2FuIGRldGVybWluZSB3aGljaCBjcHVzIGFyZSBhY3R1YWxseQorICogcHJlc2VudCBpbiB0aGUgbWFjaGluZSBieSBpbnRlcnJvZ2F0aW5nIHRoaXMgcmVnaXN0ZXIuCisgKi8KKyNkZWZpbmUgQkJDX0RFVlBfQ1BVMAkweDAxCS8qIFByb2Nlc3NvciAwIHByZXNlbnQJKi8KKyNkZWZpbmUgQkJDX0RFVlBfQ1BVMQkweDAyCS8qIFByb2Nlc3NvciAxIHByZXNlbnQJKi8KKyNkZWZpbmUgQkJDX0RFVlBfQ1BVMgkweDA0CS8qIFByb2Nlc3NvciAyIHByZXNlbnQJKi8KKyNkZWZpbmUgQkJDX0RFVlBfQ1BVMwkweDA4CS8qIFByb2Nlc3NvciAzIHByZXNlbnQJKi8KKyNkZWZpbmUgQkJDX0RFVlBfUkVTVgkweGYwCS8qIFJlc2VydmVkCQkqLworCisvKiBBcmJpdHJhdGlvbiByZWdpc3Rlci4gIFRoaXMgcmVnaXN0ZXIgaXMgdXNlZCB0byBibG9jayBhY2Nlc3MgdG8KKyAqIHRoZSBCQkMgZnJvbSBhIHBhcnRpY3VsYXIgY3B1LgorICovCisjZGVmaW5lIEJCQ19BUkJfQ1BVMAkweDAxCS8qIEVuYWJsZSBjcHUgMCBCQkMgYXJiaXRyYXRyaW9uICovCisjZGVmaW5lIEJCQ19BUkJfQ1BVMQkweDAyCS8qIEVuYWJsZSBjcHUgMSBCQkMgYXJiaXRyYXRyaW9uICovCisjZGVmaW5lIEJCQ19BUkJfQ1BVMgkweDA0CS8qIEVuYWJsZSBjcHUgMiBCQkMgYXJiaXRyYXRyaW9uICovCisjZGVmaW5lIEJCQ19BUkJfQ1BVMwkweDA4CS8qIEVuYWJsZSBjcHUgMyBCQkMgYXJiaXRyYXRyaW9uICovCisjZGVmaW5lIEJCQ19BUkJfUkVTVgkweGYwCS8qIFJlc2VydmVkCQkJICovCisKKy8qIFF1aWVzY2UgcmVnaXN0ZXIuICBCdXMgYW5kIEJCQyBzZWdtZW50cyBmb3IgY3B1cyBjYW4gYmUgZGlzYWJsZWQKKyAqIHdpdGggdGhpcyByZWdpc3RlciwgaWUuIGZvciBob3QgcGx1Z2dpbmcuCisgKi8KKyNkZWZpbmUgQkJDX1FVSUVTQ0VfUzAyCTB4MDEJLyogUXVpZXNjZSBTYWZhcmkgc2VnbWVudCBmb3IgY3B1IDAgYW5kIDIgKi8KKyNkZWZpbmUgQkJDX1FVSUVTQ0VfUzEzCTB4MDIJLyogUXVpZXNjZSBTYWZhcmkgc2VnbWVudCBmb3IgY3B1IDEgYW5kIDMgKi8KKyNkZWZpbmUgQkJDX1FVSUVTQ0VfQjAyCTB4MDQJLyogUXVpZXNjZSBCQkMgc2VnbWVudCBmb3IgY3B1IDAgYW5kIDIgICAgKi8KKyNkZWZpbmUgQkJDX1FVSUVTQ0VfQjEzCTB4MDgJLyogUXVpZXNjZSBCQkMgc2VnbWVudCBmb3IgY3B1IDEgYW5kIDMgICAgKi8KKyNkZWZpbmUgQkJDX1FVSUVTQ0VfRkQwIDB4MTAJLyogRGlzYWJsZSBGYXRhbF9FcnJvclswXSByZXBvcnRpbmcJICAqLworI2RlZmluZSBCQkNfUVVJRVNDRV9GRDEgMHgyMAkvKiBEaXNhYmxlIEZhdGFsX0Vycm9yWzFdIHJlcG9ydGluZwkgICovCisjZGVmaW5lIEJCQ19RVUlFU0NFX0ZEMiAweDQwCS8qIERpc2FibGUgRmF0YWxfRXJyb3JbMl0gcmVwb3J0aW5nCSAgKi8KKyNkZWZpbmUgQkJDX1FVSUVTQ0VfRkQzIDB4ODAJLyogRGlzYWJsZSBGYXRhbF9FcnJvclszXSByZXBvcnRpbmcJICAqLworCisvKiBXYXRjaGRvZyBBY3Rpb24gcmVnaXN0ZXIuICBXaGVuIHRoZSB3YXRjaGRvZyBkZXZpY2UgdGltZXIgZXhwaXJlcworICogYSBsaW5lIGlzIGVuYWJsZWQgdG8gdGhlIEJCQy4gIFRoZSBhY3Rpb24gQkJDIHRha2VzIHdoZW4gdGhpcyBsaW5lCisgKiBpcyBhc3NlcnRlZCBjYW4gYmUgY29udHJvbGxlZCBieSB0aGlzIHJlZ2lzZXIuCisgKi8KKyNkZWZpbmUgQkJDX1dEQUNUSU9OX1JTVCAgMHgwMQkvKiBXaGVuIHNldCwgd2F0Y2hkb2cgY2F1c2VzIHN5c3RlbSByZXNldC4KKwkJCQkgKiBXaGVuIGNsZWFyLCBCQkMgaWdub3JlcyB3YXRjaGRvZyBzaWduYWwuCisJCQkJICovCisjZGVmaW5lIEJCQ19XREFDVElPTl9SRVNWIDB4ZmUJLyogUmVzZXJ2ZWQgKi8KKworLyogU29mdF9QT1JfR0VOIHJlZ2lzdGVyLiAgVGhlIFBPUiAoUG93ZXIgT24gUmVzZXQpIHNpZ25hbCBtYXkgYmUgYXNzZXJ0ZWQKKyAqIGZvciBzcGVjaWZpYyBwcm9jZXNzb3JzIG9yIGFsbCBwcm9jZXNzb3JzIHZpYSB0aGlzIHJlZ2lzdGVyLgorICovCisjZGVmaW5lIEJCQ19TUEdfQ1BVMAkweDAxIC8qIEFzc2VydCBQT1IgZm9yIHByb2Nlc3NvciAwCSovCisjZGVmaW5lIEJCQ19TUEdfQ1BVMQkweDAyIC8qIEFzc2VydCBQT1IgZm9yIHByb2Nlc3NvciAxCSovCisjZGVmaW5lIEJCQ19TUEdfQ1BVMgkweDA0IC8qIEFzc2VydCBQT1IgZm9yIHByb2Nlc3NvciAyCSovCisjZGVmaW5lIEJCQ19TUEdfQ1BVMwkweDA4IC8qIEFzc2VydCBQT1IgZm9yIHByb2Nlc3NvciAzCSovCisjZGVmaW5lIEJCQ19TUEdfQ1BVQUxMCTB4MTAgLyogUmVzZXQgYWxsIHByb2Nlc3NvcnMgYW5kIHJlc2V0CisJCQkgICAgICAqIHRoZSBlbnRpcmUgc3lzdGVtLgorCQkJICAgICAgKi8KKyNkZWZpbmUgQkJDX1NQR19SRVNWCTB4ZTAgLyogUmVzZXJ2ZWQJCQkqLworCisvKiBTb2Z0X1hJUl9HRU4gcmVnaXN0ZXIuICBUaGUgWElSIChlWHRlcm5hbGx5IEluaXRpYXRlZCBSZXNldCkgc2lnbmFsCisgKiBtYXkgYmUgYXNzZXJ0ZWQgdG8gc3BlY2lmaWMgcHJvY2Vzc29ycyB2aWEgdGhpcyByZWdpc3Rlci4KKyAqLworI2RlZmluZSBCQkNfU1hHX0NQVTAJMHgwMSAvKiBBc3NlcnQgWElSIGZvciBwcm9jZXNzb3IgMAkqLworI2RlZmluZSBCQkNfU1hHX0NQVTEJMHgwMiAvKiBBc3NlcnQgWElSIGZvciBwcm9jZXNzb3IgMQkqLworI2RlZmluZSBCQkNfU1hHX0NQVTIJMHgwNCAvKiBBc3NlcnQgWElSIGZvciBwcm9jZXNzb3IgMgkqLworI2RlZmluZSBCQkNfU1hHX0NQVTMJMHgwOCAvKiBBc3NlcnQgWElSIGZvciBwcm9jZXNzb3IgMwkqLworI2RlZmluZSBCQkNfU1hHX1JFU1YJMHhmMCAvKiBSZXNlcnZlZAkJCSovCisKKy8qIFBPUiBTb3VyY2UgcmVnaXN0ZXIuICBPbmUgbWF5IGlkZW50aWZ5IHRoZSBjYXVzZSBvZiB0aGUgbW9zdCByZWNlbnQKKyAqIHJlc2V0IGJ5IHJlYWRpbmcgdGhpcyByZWdpc3Rlci4KKyAqLworI2RlZmluZSBCQkNfUFNSQ19TUEcwCTB4MDAwMSAvKiBDUFUgMCByZXNldCB2aWEgQkJDX1NQRyByZWdpc3RlcgkqLworI2RlZmluZSBCQkNfUFNSQ19TUEcxCTB4MDAwMiAvKiBDUFUgMSByZXNldCB2aWEgQkJDX1NQRyByZWdpc3RlcgkqLworI2RlZmluZSBCQkNfUFNSQ19TUEcyCTB4MDAwNCAvKiBDUFUgMiByZXNldCB2aWEgQkJDX1NQRyByZWdpc3RlcgkqLworI2RlZmluZSBCQkNfUFNSQ19TUEczCTB4MDAwOCAvKiBDUFUgMyByZXNldCB2aWEgQkJDX1NQRyByZWdpc3RlcgkqLworI2RlZmluZSBCQkNfUFNSQ19TUEdTWVMJMHgwMDEwIC8qIFN5c3RlbSByZXNldCB2aWEgQkJDX1NQRyByZWdpc3RlcgkqLworI2RlZmluZSBCQkNfUFNSQ19KVEFHCTB4MDAyMCAvKiBTeXN0ZW0gcmVzZXQgdmlhIEpUQUcrCQkqLworI2RlZmluZSBCQkNfUFNSQ19CVVRUT04JMHgwMDQwIC8qIFN5c3RlbSByZXNldCB2aWEgcHVzaC1idXR0b24gZG9uZ2xlCSovCisjZGVmaW5lIEJCQ19QU1JDX1BXUlVQCTB4MDA4MCAvKiBTeXN0ZW0gcmVzZXQgdmlhIHBvd2VyLXVwCQkqLworI2RlZmluZSBCQkNfUFNSQ19GRTAJMHgwMTAwIC8qIENQVSAwIHJlcG9ydGVkIEZhdGFsX0Vycm9yCQkqLworI2RlZmluZSBCQkNfUFNSQ19GRTEJMHgwMjAwIC8qIENQVSAxIHJlcG9ydGVkIEZhdGFsX0Vycm9yCQkqLworI2RlZmluZSBCQkNfUFNSQ19GRTIJMHgwNDAwIC8qIENQVSAyIHJlcG9ydGVkIEZhdGFsX0Vycm9yCQkqLworI2RlZmluZSBCQkNfUFNSQ19GRTMJMHgwODAwIC8qIENQVSAzIHJlcG9ydGVkIEZhdGFsX0Vycm9yCQkqLworI2RlZmluZSBCQkNfUFNSQ19GRTQJMHgxMDAwIC8qIFNjaGl6byByZXBvcnRlZCBGYXRhbF9FcnJvcgkJKi8KKyNkZWZpbmUgQkJDX1BTUkNfRkU1CTB4MjAwMCAvKiBTYWZhcmkgZGV2aWNlIDUgcmVwb3J0ZWQgRmF0YWxfRXJyb3IJKi8KKyNkZWZpbmUgQkJDX1BTUkNfRkU2CTB4NDAwMCAvKiBDUE1TIHJlcG9ydGVkIEZhdGFsX0Vycm9yCQkqLworI2RlZmluZSBCQkNfUFNSQ19TWU5USAkweDgwMDAgLyogU3lzdGVtIHJlc2V0IHdoZW4gb24tYm9hcmQgY2xvY2sgc3ludGhlc2l6ZXJzCisJCQkJKiB3ZXJlIHVwZGF0ZWQuCisJCQkJKi8KKyNkZWZpbmUgQkJDX1BTUkNfV0RUICAgMHgxMDAwMCAvKiBTeXN0ZW0gcmVzZXQgdmlhIFN1cGVyIEkvTyB3YXRjaGRvZwkqLworI2RlZmluZSBCQkNfUFNSQ19SU0MgICAweDIwMDAwIC8qIFN5c3RlbSByZXNldCB2aWEgUlNDIHJlbW90ZSBtb25pdG9yaW5nCisJCQkJKiBkZXZpY2UKKwkJCQkqLworCisvKiBYSVIgU291cmNlIHJlZ2lzdGVyLiAgVGhlIHNvdXJjZSBvZiBhbiBYSVIgZXZlbnQgc2VudCB0byBhIHByb2Nlc3NvciBtYXkKKyAqIGJlIGRldGVybWluZWQgdmlhIHRoaXMgcmVnaXN0ZXIuCisgKi8KKyNkZWZpbmUgQkJDX1hTUkNfU1hHMAkweDAxCS8qIENQVSAwIHJlY2VpdmVkIFhJUiB2aWEgU29mdF9YSVJfR0VOIHJlZyAqLworI2RlZmluZSBCQkNfWFNSQ19TWEcxCTB4MDIJLyogQ1BVIDEgcmVjZWl2ZWQgWElSIHZpYSBTb2Z0X1hJUl9HRU4gcmVnICovCisjZGVmaW5lIEJCQ19YU1JDX1NYRzIJMHgwNAkvKiBDUFUgMiByZWNlaXZlZCBYSVIgdmlhIFNvZnRfWElSX0dFTiByZWcgKi8KKyNkZWZpbmUgQkJDX1hTUkNfU1hHMwkweDA4CS8qIENQVSAzIHJlY2VpdmVkIFhJUiB2aWEgU29mdF9YSVJfR0VOIHJlZyAqLworI2RlZmluZSBCQkNfWFNSQ19KVEFHCTB4MTAJLyogQWxsIENQVXMgcmVjZWl2ZWQgWElSIHZpYSBKVEFHKyAgICAgICAgICovCisjZGVmaW5lIEJCQ19YU1JDX1dfT1JfQgkweDIwCS8qIEFsbCBDUFVzIHJlY2VpdmVkIFhJUiBlaXRoZXIgYmVjYXVzZToKKwkJCQkgKiBhKSBTdXBlciBJL08gd2F0Y2hkb2cgZmlyZWQsIG9yCisJCQkJICogYikgWElSIHB1c2ggYnV0dG9uIHdhcyBhY3RpdmF0ZWQKKwkJCQkgKi8KKyNkZWZpbmUgQkJDX1hTUkNfUkVTVgkweGMwCS8qIFJlc2VydmVkCQkJCSAgICovCisKKy8qIENsb2NrIFN5bnRoZXNpemVycyBDb250cm9sIHJlZ2lzdGVyLiAgVGhpcyByZWdpc3RlciBwcm92aWRlcyB0aGUgYmlnLWJhbmcKKyAqIHByb2dyYW1taW5nIGludGVyZmFjZSB0byB0aGUgdHdvIGNsb2NrIHN5bnRoZXNpemVycyBvZiB0aGUgbWFjaGluZS4KKyAqLworI2RlZmluZSBCQkNfQ1NDX1NMT0FECTB4MDEJLyogRGlyZWN0bHkgY29ubmVjdGVkIHRvIFNfTE9BRCBwaW5zCSovCisjZGVmaW5lIEJCQ19DU0NfU0RBVEEJMHgwMgkvKiBEaXJlY3RseSBjb25uZWN0ZWQgdG8gU19EQVRBIHBpbnMJKi8KKyNkZWZpbmUgQkJDX0NTQ19TQ0xPQ0sJMHgwNAkvKiBEaXJlY3RseSBjb25uZWN0ZWQgdG8gU19DTE9DSyBwaW5zCSovCisjZGVmaW5lIEJCQ19DU0NfUkVTVgkweDc4CS8qIFJlc2VydmVkCQkJCSovCisjZGVmaW5lIEJCQ19DU0NfUlNUCTB4ODAJLyogR2VuZXJhdGUgc3lzdGVtIHJlc2V0IHdoZW4gU19MT0FEPT0xCSovCisKKy8qIEVuZXJneSBTdGFyIENvbnRyb2wgcmVnaXN0ZXIuICBUaGlzIHJlZ2lzdGVyIGlzIHVzZWQgdG8gZ2VuZXJhdGUgdGhlCisgKiBjbG9jayBmcmVxdWVuY3kgY2hhbmdlIHRyaWdnZXIgdG8gdGhlIG1haW4gc3lzdGVtIGRldmljZXMgKFNjaGl6byBhbmQKKyAqIHRoZSBwcm9jZXNzb3JzKS4gIFRoZSB0cmFuc2l0aW9uIG9jY3VycyB3aGVuIGJpdHMgaW4gdGhpcyByZWdpc3RlcgorICogZ28gZnJvbSAwIHRvIDEsIG9ubHkgb25lIGJpdCBtdXN0IGJlIHNldCBhdCBvbmNlIGVsc2Ugbm8gYWN0aW9uCisgKiBvY2N1cnMuICBCYXNpY2FsbHkgdGhlIHNlcXVlbmNlIG9mIGV2ZW50cyBpczoKKyAqIGEpIENob29zZSBuZXcgZnJlcXVlbmN5OiBmdWxsLCAxLzIgb3IgMS8zMgorICogYikgUHJvZ3JhbSB0aGlzIGRlc2lyZWQgZnJlcXVlbmN5IGludG8gdGhlIGNwdXMgYW5kIFNjaGl6by4KKyAqIGMpIFNldCB0aGUgc2FtZSB2YWx1ZSBpbiB0aGlzIHJlZ2lzdGVyLgorICogZCkgMTYgc3lzdGVtIGNsb2NrcyBsYXRlciwgY2xlYXIgdGhpcyByZWdpc3Rlci4KKyAqLworI2RlZmluZSBCQkNfRVNfQ1RSTF8xXzEJCTB4MDEJLyogRnVsbCBmcmVxdWVuY3kJKi8KKyNkZWZpbmUgQkJDX0VTX0NUUkxfMV8yCQkweDAyCS8qIDEvMiBmcmVxdWVuY3kJKi8KKyNkZWZpbmUgQkJDX0VTX0NUUkxfMV8zMgkweDIwCS8qIDEvMzIgZnJlcXVlbmN5CSovCisjZGVmaW5lIEJCQ19FU19SRVNWCQkweGRjCS8qIFJlc2VydmVkCQkqLworCisvKiBFbmVyZ3kgU3RhciBBc3NlcnQgQ2hhbmdlIFRpbWUgcmVnaXN0ZXIuICBUaGlzIGRldGVybWluZXMgdGhlIG51bWJlcgorICogb2YgQkJDIGNsb2NrIGN5Y2xlcyAod2hpY2ggaXMgaGFsZiB0aGUgc3lzdGVtIGZyZXF1ZW5jeSkgYmV0d2VlbgorICogdGhlIGRldGVjdGlvbiBvZiBGUkVFWkVfQUNLIGJlaW5nIGFzc2VydGVkIGFuZCB0aGUgYXNzZXJ0aW9uIG9mCisgKiB0aGUgQ0xLX0NIQU5HRV9MWzI6MF0gc2lnbmFscy4KKyAqLworI2RlZmluZSBCQkNfRVNfQUNUX1ZBTAkweGZmCisKKy8qIEVuZXJneSBTdGFyIEFzc2VydCBCeXBhc3MgVGltZSByZWdpc3Rlci4gIFRoaXMgZGV0ZXJtaW5lcyB0aGUgbnVtYmVyCisgKiBvZiBCQkMgY2xvY2sgY3ljbGVzICh3aGljaCBpcyBoYWxmIHRoZSBzeXN0ZW0gZnJlcXVlbmN5KSBiZXR3ZWVuCisgKiB0aGUgYXNzZXJ0aW9uIG9mIHRoZSBDTEtfQ0hBTkdFX0xbMjowXSBzaWduYWxzIGFuZCB0aGUgYXNzZXJ0aW9uIG9mCisgKiB0aGUgRVNUQVJfUExMX0JZUEFTUyBzaWduYWwuCisgKi8KKyNkZWZpbmUgQkJDX0VTX0FCVF9WQUwJMHhmZmZmCisKKy8qIEVuZXJneSBTdGFyIFBMTCBTZXR0bGUgVGltZSByZWdpc3Rlci4gIFRoaXMgZGV0ZXJtaW5lcyB0aGUgbnVtYmVyIG9mCisgKiBCQkMgY2xvY2sgY3ljbGVzICh3aGljaCBpcyBoYWxmIHRoZSBzeXN0ZW0gZnJlcXVlbmN5KSBiZXR3ZWVuIHRoZQorICogZGUtYXNzZXJ0aW9uIG9mIENMS19DSEFOR0VfTFsyOjBdIGFuZCB0aGUgZGUtYXNzZXJ0aW9uIG9mIHRoZSBGUkVFWkVfTAorICogc2lnbmFsLgorICovCisjZGVmaW5lIEJCQ19FU19QU1RfVkFMCTB4ZmZmZmZmZmYKKworLyogRW5lcmd5IFN0YXIgRnJlcXVlbmN5IFN3aXRjaCBMYXRlbmN5IHJlZ2lzdGVyLiAgVGhpcyBpcyB0aGUgbnVtYmVyIG9mCisgKiBCQkMgY2xvY2tzIGJldHdlZW4gdGhlIGRlLWFzc2VydGlvbiBvZiBDTEtfQ0hBTkdFX0xbMjowXSBhbmQgdGhlIGZpcnN0CisgKiBlZGdlIG9mIHRoZSBTYWZhcmkgY2xvY2sgYXQgdGhlIG5ldyBmcmVxdWVuY3kuCisgKi8KKyNkZWZpbmUgQkJDX0VTX0ZTTF9WQUwJMHhmZmZmZmZmZgorCisvKiBLZXlib2FyZCBCZWVwIGNvbnRyb2wgcmVnaXN0ZXIuICBUaGlzIGlzIGEgc2ltcGxlIGVuYWJsZXIgZm9yIHRoZSBhdWRpbworICogYmVlcCBzb3VuZC4KKyAqLworI2RlZmluZSBCQkNfS0JEX0JFRVBfRU5BQkxFCTB4MDEgLyogRW5hYmxlIGJlZXAJKi8KKyNkZWZpbmUgQkJDX0tCRF9CRUVQX1JFU1YJMHhmZSAvKiBSZXNlcnZlZAkqLworCisvKiBLZXlib2FyZCBCZWVwIENvdW50ZXIgcmVnaXN0ZXIuICBUaGVyZSBpcyBhIGZyZWUtcnVubmluZyBjb3VudGVyIGluc2lkZQorICogdGhlIEJCQyB3aGljaCBydW5zIGF0IGhhbGYgdGhlIHN5c3RlbSBjbG9jay4gIFRoZSBiaXQgc2V0IGluIHRoaXMgcmVnaXN0ZXIKKyAqIGRldGVybWluZXMgd2hlbiB0aGUgYXVkaW8gc291bmQgaXMgZ2VuZXJhdGVkLiAgU28gZm9yIGV4YW1wbGUgaWYgYml0CisgKiAxMCBpcyBzZXQsIHRoZSBhdWRpbyBiZWVwIHdpbGwgb3NjaWxsYXRlIGF0IDEvKDIqKjEyKS4gIFRoZSBrZXlib2FyZCBiZWVwCisgKiBnZW5lcmF0b3IgYXV0b21hdGljYWxseSBzZWxlY3RzIGEgZGlmZmVyZW50IGJpdCB0byB1c2UgaWYgdGhlIHN5c3RlbSBjbG9jaworICogaXMgY2hhbmdlZCB2aWEgRW5lcmd5IFN0YXIuCisgKi8KKyNkZWZpbmUgQkJDX0tCRF9CQ05UX0JJVFMJMHgwMDA3ZmMwMAorI2RlZmluZSBCQkNfS0JDX0JDTlRfUkVTVgkweGZmZjgwM2ZmCisKKyNlbmRpZiAvKiBfU1BBUkM2NF9CQkNfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2JpdG9wcy5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9iaXRvcHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDcyMmRjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9iaXRvcHMuaApAQCAtMCwwICsxLDI5NCBAQAorLyogJElkOiBiaXRvcHMuaCx2IDEuMzkgMjAwMi8wMS8zMCAwMTo0MDowMCBkYXZlbSBFeHAgJAorICogYml0b3BzLmg6IEJpdCBzdHJpbmcgb3BlcmF0aW9ucyBvbiB0aGUgVjkuCisgKgorICogQ29weXJpZ2h0IDE5OTYsIDE5OTcgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQorICovCisKKyNpZm5kZWYgX1NQQVJDNjRfQklUT1BTX0gKKyNkZWZpbmUgX1NQQVJDNjRfQklUT1BTX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorCitleHRlcm4gaW50IHRlc3RfYW5kX3NldF9iaXQodW5zaWduZWQgbG9uZyBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcik7CitleHRlcm4gaW50IHRlc3RfYW5kX2NsZWFyX2JpdCh1bnNpZ25lZCBsb25nIG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKTsKK2V4dGVybiBpbnQgdGVzdF9hbmRfY2hhbmdlX2JpdCh1bnNpZ25lZCBsb25nIG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKTsKK2V4dGVybiB2b2lkIHNldF9iaXQodW5zaWduZWQgbG9uZyBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcik7CitleHRlcm4gdm9pZCBjbGVhcl9iaXQodW5zaWduZWQgbG9uZyBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcik7CitleHRlcm4gdm9pZCBjaGFuZ2VfYml0KHVuc2lnbmVkIGxvbmcgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpOworCisvKiAibm9uLWF0b21pYyIgdmVyc2lvbnMuLi4gKi8KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX3NldF9iaXQoaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQoreworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKm0gPSBhZGRyICsgKG5yID4+IDYpOworCisJKm0gfD0gKDFVTCA8PCAobnIgJiA2MykpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fY2xlYXJfYml0KGludCBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcikKK3sKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nICptID0gYWRkciArIChuciA+PiA2KTsKKworCSptICY9IH4oMVVMIDw8IChuciAmIDYzKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19jaGFuZ2VfYml0KGludCBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcikKK3sKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nICptID0gYWRkciArIChuciA+PiA2KTsKKworCSptIF49ICgxVUwgPDwgKG5yICYgNjMpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fdGVzdF9hbmRfc2V0X2JpdChpbnQgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpCit7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqbSA9IGFkZHIgKyAobnIgPj4gNik7CisJbG9uZyBvbGQgPSAqbTsKKwlsb25nIG1hc2sgPSAoMVVMIDw8IChuciAmIDYzKSk7CisKKwkqbSA9IChvbGQgfCBtYXNrKTsKKwlyZXR1cm4gKChvbGQgJiBtYXNrKSAhPSAwKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fdGVzdF9hbmRfY2xlYXJfYml0KGludCBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcikKK3sKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nICptID0gYWRkciArIChuciA+PiA2KTsKKwlsb25nIG9sZCA9ICptOworCWxvbmcgbWFzayA9ICgxVUwgPDwgKG5yICYgNjMpKTsKKworCSptID0gKG9sZCAmIH5tYXNrKTsKKwlyZXR1cm4gKChvbGQgJiBtYXNrKSAhPSAwKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fdGVzdF9hbmRfY2hhbmdlX2JpdChpbnQgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpCit7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqbSA9IGFkZHIgKyAobnIgPj4gNik7CisJbG9uZyBvbGQgPSAqbTsKKwlsb25nIG1hc2sgPSAoMVVMIDw8IChuciAmIDYzKSk7CisKKwkqbSA9IChvbGQgXiBtYXNrKTsKKwlyZXR1cm4gKChvbGQgJiBtYXNrKSAhPSAwKTsKK30KKworI2lmZGVmIENPTkZJR19TTVAKKyNkZWZpbmUgc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCkJbWVtYmFyKCIjU3RvcmVMb2FkIHwgI0xvYWRMb2FkIikKKyNkZWZpbmUgc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKQltZW1iYXIoIiNTdG9yZUxvYWQgfCAjU3RvcmVTdG9yZSIpCisjZWxzZQorI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKQliYXJyaWVyKCkKKyNkZWZpbmUgc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKQliYXJyaWVyKCkKKyNlbmRpZgorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgdGVzdF9iaXQoaW50IG5yLCBfX2NvbnN0X18gdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcikKK3sKKwlyZXR1cm4gKDFVTCAmICgoYWRkcilbbnIgPj4gNl0gPj4gKG5yICYgNjMpKSkgIT0gMFVMOworfQorCisvKiBUaGUgZWFzeS9jaGVlc2UgdmVyc2lvbiBmb3Igbm93LiAqLworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBmZnoodW5zaWduZWQgbG9uZyB3b3JkKQoreworCXVuc2lnbmVkIGxvbmcgcmVzdWx0OworCisJcmVzdWx0ID0gMDsKKwl3aGlsZSh3b3JkICYgMSkgeworCQlyZXN1bHQrKzsKKwkJd29yZCA+Pj0gMTsKKwl9CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoqCisgKiBfX2ZmcyAtIGZpbmQgZmlyc3QgYml0IGluIHdvcmQuCisgKiBAd29yZDogVGhlIHdvcmQgdG8gc2VhcmNoCisgKgorICogVW5kZWZpbmVkIGlmIG5vIGJpdCBleGlzdHMsIHNvIGNvZGUgc2hvdWxkIGNoZWNrIGFnYWluc3QgMCBmaXJzdC4KKyAqLworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBfX2Zmcyh1bnNpZ25lZCBsb25nIHdvcmQpCit7CisJdW5zaWduZWQgbG9uZyByZXN1bHQgPSAwOworCisJd2hpbGUgKCEod29yZCAmIDFVTCkpIHsKKwkJcmVzdWx0Kys7CisJCXdvcmQgPj49IDE7CisJfQorCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBmbHM6IGZpbmQgbGFzdCBiaXQgc2V0LgorICovCisKKyNkZWZpbmUgZmxzKHgpIGdlbmVyaWNfZmxzKHgpCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKy8qCisgKiBFdmVyeSBhcmNoaXRlY3R1cmUgbXVzdCBkZWZpbmUgdGhpcyBmdW5jdGlvbi4gSXQncyB0aGUgZmFzdGVzdAorICogd2F5IG9mIHNlYXJjaGluZyBhIDE0MC1iaXQgYml0bWFwIHdoZXJlIHRoZSBmaXJzdCAxMDAgYml0cyBhcmUKKyAqIHVubGlrZWx5IHRvIGJlIHNldC4gSXQncyBndWFyYW50ZWVkIHRoYXQgYXQgbGVhc3Qgb25lIG9mIHRoZSAxNDAKKyAqIGJpdHMgaXMgY2xlYXJlZC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgc2NoZWRfZmluZF9maXJzdF9iaXQodW5zaWduZWQgbG9uZyAqYikKK3sKKwlpZiAodW5saWtlbHkoYlswXSkpCisJCXJldHVybiBfX2ZmcyhiWzBdKTsKKwlpZiAodW5saWtlbHkoKCh1bnNpZ25lZCBpbnQpYlsxXSkpKQorCQlyZXR1cm4gX19mZnMoYlsxXSkgKyA2NDsKKwlpZiAoYlsxXSA+PiAzMikKKwkJcmV0dXJuIF9fZmZzKGJbMV0gPj4gMzIpICsgOTY7CisJcmV0dXJuIF9fZmZzKGJbMl0pICsgMTI4OworfQorCisvKgorICogZmZzOiBmaW5kIGZpcnN0IGJpdCBzZXQuIFRoaXMgaXMgZGVmaW5lZCB0aGUgc2FtZSB3YXkgYXMKKyAqIHRoZSBsaWJjIGFuZCBjb21waWxlciBidWlsdGluIGZmcyByb3V0aW5lcywgdGhlcmVmb3JlCisgKiBkaWZmZXJzIGluIHNwaXJpdCBmcm9tIHRoZSBhYm92ZSBmZnogKG1hbiBmZnMpLgorICovCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgZmZzKGludCB4KQoreworCWlmICgheCkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIF9fZmZzKCh1bnNpZ25lZCBsb25nKXgpICsgMTsKK30KKworLyoKKyAqIGh3ZWlnaHROOiByZXR1cm5zIHRoZSBoYW1taW5nIHdlaWdodCAoaS5lLiB0aGUgbnVtYmVyCisgKiBvZiBiaXRzIHNldCkgb2YgYSBOLWJpdCB3b3JkCisgKi8KKworI2lmZGVmIFVMVFJBX0hBU19QT1BVTEFUSU9OX0NPVU5UCisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCBod2VpZ2h0NjQodW5zaWduZWQgbG9uZyB3KQoreworCXVuc2lnbmVkIGludCByZXM7CisKKwlfX2FzbV9fICgicG9wYyAlMSwlMCIgOiAiPXIiIChyZXMpIDogInIiICh3KSk7CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IGh3ZWlnaHQzMih1bnNpZ25lZCBpbnQgdykKK3sKKwl1bnNpZ25lZCBpbnQgcmVzOworCisJX19hc21fXyAoInBvcGMgJTEsJTAiIDogIj1yIiAocmVzKSA6ICJyIiAodyAmIDB4ZmZmZmZmZmYpKTsKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBpbnQgaHdlaWdodDE2KHVuc2lnbmVkIGludCB3KQoreworCXVuc2lnbmVkIGludCByZXM7CisKKwlfX2FzbV9fICgicG9wYyAlMSwlMCIgOiAiPXIiIChyZXMpIDogInIiICh3ICYgMHhmZmZmKSk7CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IGh3ZWlnaHQ4KHVuc2lnbmVkIGludCB3KQoreworCXVuc2lnbmVkIGludCByZXM7CisKKwlfX2FzbV9fICgicG9wYyAlMSwlMCIgOiAiPXIiIChyZXMpIDogInIiICh3ICYgMHhmZikpOworCXJldHVybiByZXM7Cit9CisKKyNlbHNlCisKKyNkZWZpbmUgaHdlaWdodDY0KHgpIGdlbmVyaWNfaHdlaWdodDY0KHgpCisjZGVmaW5lIGh3ZWlnaHQzMih4KSBnZW5lcmljX2h3ZWlnaHQzMih4KQorI2RlZmluZSBod2VpZ2h0MTYoeCkgZ2VuZXJpY19od2VpZ2h0MTYoeCkKKyNkZWZpbmUgaHdlaWdodDgoeCkgZ2VuZXJpY19od2VpZ2h0OCh4KQorCisjZW5kaWYKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKy8qKgorICogZmluZF9uZXh0X2JpdCAtIGZpbmQgdGhlIG5leHQgc2V0IGJpdCBpbiBhIG1lbW9yeSByZWdpb24KKyAqIEBhZGRyOiBUaGUgYWRkcmVzcyB0byBiYXNlIHRoZSBzZWFyY2ggb24KKyAqIEBvZmZzZXQ6IFRoZSBiaXRudW1iZXIgdG8gc3RhcnQgc2VhcmNoaW5nIGF0CisgKiBAc2l6ZTogVGhlIG1heGltdW0gc2l6ZSB0byBzZWFyY2gKKyAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZmluZF9uZXh0X2JpdChjb25zdCB1bnNpZ25lZCBsb25nICosIHVuc2lnbmVkIGxvbmcsCisJCQkJCXVuc2lnbmVkIGxvbmcpOworCisvKioKKyAqIGZpbmRfZmlyc3RfYml0IC0gZmluZCB0aGUgZmlyc3Qgc2V0IGJpdCBpbiBhIG1lbW9yeSByZWdpb24KKyAqIEBhZGRyOiBUaGUgYWRkcmVzcyB0byBzdGFydCB0aGUgc2VhcmNoIGF0CisgKiBAc2l6ZTogVGhlIG1heGltdW0gc2l6ZSB0byBzZWFyY2gKKyAqCisgKiBSZXR1cm5zIHRoZSBiaXQtbnVtYmVyIG9mIHRoZSBmaXJzdCBzZXQgYml0LCBub3QgdGhlIG51bWJlciBvZiB0aGUgYnl0ZQorICogY29udGFpbmluZyBhIGJpdC4KKyAqLworI2RlZmluZSBmaW5kX2ZpcnN0X2JpdChhZGRyLCBzaXplKSBcCisJZmluZF9uZXh0X2JpdCgoYWRkciksIChzaXplKSwgMCkKKworLyogZmluZF9uZXh0X3plcm9fYml0KCkgZmluZHMgdGhlIGZpcnN0IHplcm8gYml0IGluIGEgYml0IHN0cmluZyBvZiBsZW5ndGgKKyAqICdzaXplJyBiaXRzLCBzdGFydGluZyB0aGUgc2VhcmNoIGF0IGJpdCAnb2Zmc2V0Jy4gVGhpcyBpcyBsYXJnZWx5IGJhc2VkCisgKiBvbiBMaW51cydzIEFMUEhBIHJvdXRpbmVzLCB3aGljaCBhcmUgcHJldHR5IHBvcnRhYmxlIEJUVy4KKyAqLworCitleHRlcm4gdW5zaWduZWQgbG9uZyBmaW5kX25leHRfemVyb19iaXQoY29uc3QgdW5zaWduZWQgbG9uZyAqLAorCQkJCQl1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKKworI2RlZmluZSBmaW5kX2ZpcnN0X3plcm9fYml0KGFkZHIsIHNpemUpIFwKKyAgICAgICAgZmluZF9uZXh0X3plcm9fYml0KChhZGRyKSwgKHNpemUpLCAwKQorCisjZGVmaW5lIHRlc3RfYW5kX3NldF9sZV9iaXQobnIsYWRkcikJXAorCXRlc3RfYW5kX3NldF9iaXQoKG5yKSBeIDB4MzgsIChhZGRyKSkKKyNkZWZpbmUgdGVzdF9hbmRfY2xlYXJfbGVfYml0KG5yLGFkZHIpCVwKKwl0ZXN0X2FuZF9jbGVhcl9iaXQoKG5yKSBeIDB4MzgsIChhZGRyKSkKKworc3RhdGljIF9faW5saW5lX18gaW50IHRlc3RfbGVfYml0KGludCBuciwgX19jb25zdF9fIHVuc2lnbmVkIGxvbmcgKiBhZGRyKQoreworCWludAkJCW1hc2s7CisJX19jb25zdF9fIHVuc2lnbmVkIGNoYXIJKkFERFIgPSAoX19jb25zdF9fIHVuc2lnbmVkIGNoYXIgKikgYWRkcjsKKworCUFERFIgKz0gbnIgPj4gMzsKKwltYXNrID0gMSA8PCAobnIgJiAweDA3KTsKKwlyZXR1cm4gKChtYXNrICYgKkFERFIpICE9IDApOworfQorCisjZGVmaW5lIGZpbmRfZmlyc3RfemVyb19sZV9iaXQoYWRkciwgc2l6ZSkgXAorICAgICAgICBmaW5kX25leHRfemVyb19sZV9iaXQoKGFkZHIpLCAoc2l6ZSksIDApCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIGZpbmRfbmV4dF96ZXJvX2xlX2JpdCh1bnNpZ25lZCBsb25nICosIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOworCisjaWZkZWYgX19LRVJORUxfXworCisjZGVmaW5lIF9fc2V0X2xlX2JpdChuciwgYWRkcikgXAorCV9fc2V0X2JpdCgobnIpIF4gMHgzOCwgKGFkZHIpKQorI2RlZmluZSBfX2NsZWFyX2xlX2JpdChuciwgYWRkcikgXAorCV9fY2xlYXJfYml0KChucikgXiAweDM4LCAoYWRkcikpCisjZGVmaW5lIF9fdGVzdF9hbmRfY2xlYXJfbGVfYml0KG5yLCBhZGRyKSBcCisJX190ZXN0X2FuZF9jbGVhcl9iaXQoKG5yKSBeIDB4MzgsIChhZGRyKSkKKyNkZWZpbmUgX190ZXN0X2FuZF9zZXRfbGVfYml0KG5yLCBhZGRyKSBcCisJX190ZXN0X2FuZF9zZXRfYml0KChucikgXiAweDM4LCAoYWRkcikpCisKKyNkZWZpbmUgZXh0Ml9zZXRfYml0KG5yLGFkZHIpCVwKKwlfX3Rlc3RfYW5kX3NldF9sZV9iaXQoKG5yKSwodW5zaWduZWQgbG9uZyAqKShhZGRyKSkKKyNkZWZpbmUgZXh0Ml9zZXRfYml0X2F0b21pYyhsb2NrLG5yLGFkZHIpIFwKKwl0ZXN0X2FuZF9zZXRfbGVfYml0KChuciksKHVuc2lnbmVkIGxvbmcgKikoYWRkcikpCisjZGVmaW5lIGV4dDJfY2xlYXJfYml0KG5yLGFkZHIpCVwKKwlfX3Rlc3RfYW5kX2NsZWFyX2xlX2JpdCgobnIpLCh1bnNpZ25lZCBsb25nICopKGFkZHIpKQorI2RlZmluZSBleHQyX2NsZWFyX2JpdF9hdG9taWMobG9jayxucixhZGRyKSBcCisJdGVzdF9hbmRfY2xlYXJfbGVfYml0KChuciksKHVuc2lnbmVkIGxvbmcgKikoYWRkcikpCisjZGVmaW5lIGV4dDJfdGVzdF9iaXQobnIsYWRkcikJXAorCXRlc3RfbGVfYml0KChuciksKHVuc2lnbmVkIGxvbmcgKikoYWRkcikpCisjZGVmaW5lIGV4dDJfZmluZF9maXJzdF96ZXJvX2JpdChhZGRyLCBzaXplKSBcCisJZmluZF9maXJzdF96ZXJvX2xlX2JpdCgodW5zaWduZWQgbG9uZyAqKShhZGRyKSwgKHNpemUpKQorI2RlZmluZSBleHQyX2ZpbmRfbmV4dF96ZXJvX2JpdChhZGRyLCBzaXplLCBvZmYpIFwKKwlmaW5kX25leHRfemVyb19sZV9iaXQoKHVuc2lnbmVkIGxvbmcgKikoYWRkciksIChzaXplKSwgKG9mZikpCisKKy8qIEJpdG1hcCBmdW5jdGlvbnMgZm9yIHRoZSBtaW5peCBmaWxlc3lzdGVtLiAgKi8KKyNkZWZpbmUgbWluaXhfdGVzdF9hbmRfc2V0X2JpdChucixhZGRyKQlcCisJdGVzdF9hbmRfc2V0X2JpdCgobnIpLCh1bnNpZ25lZCBsb25nICopKGFkZHIpKQorI2RlZmluZSBtaW5peF9zZXRfYml0KG5yLGFkZHIpCVwKKwlzZXRfYml0KChuciksKHVuc2lnbmVkIGxvbmcgKikoYWRkcikpCisjZGVmaW5lIG1pbml4X3Rlc3RfYW5kX2NsZWFyX2JpdChucixhZGRyKSBcCisJdGVzdF9hbmRfY2xlYXJfYml0KChuciksKHVuc2lnbmVkIGxvbmcgKikoYWRkcikpCisjZGVmaW5lIG1pbml4X3Rlc3RfYml0KG5yLGFkZHIpCVwKKwl0ZXN0X2JpdCgobnIpLCh1bnNpZ25lZCBsb25nICopKGFkZHIpKQorI2RlZmluZSBtaW5peF9maW5kX2ZpcnN0X3plcm9fYml0KGFkZHIsc2l6ZSkgXAorCWZpbmRfZmlyc3RfemVyb19iaXQoKHVuc2lnbmVkIGxvbmcgKikoYWRkciksKHNpemUpKQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogZGVmaW5lZChfU1BBUkM2NF9CSVRPUFNfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvYnBwLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2JwcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiZTE2M2EKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2JwcC5oCkBAIC0wLDAgKzEsNzMgQEAKKyNpZm5kZWYgX1NQQVJDNjRfQlBQX0gKKyNkZWZpbmUgX1NQQVJDNjRfQlBQX0gKKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk5NSBQaWN0dXJlIEVsZW1lbnRzCisgKglTdGVwaGVuIFdpbGxpYW1zCisgKglHdXMgQmFsZGF1ZgorICoKKyAqIExpbnV4L1NQQVJDIHBvcnQgYnkgUGV0ZXIgWmFpdGNldi4KKyAqIEludGVncmF0aW9uIGludG8gU1BBUkMgdHJlZSBieSBUb20gRHlhcy4KKyAqLworCisjaW5jbHVkZSAgPGxpbnV4L2lvY3RsLmg+CisKKy8qCisgKiBUaGlzIGlzIGEgZHJpdmVyIHRoYXQgc3VwcG9ydHMgSUVFRSBTdGQgMTI4NC0xOTk0IGNvbW11bmljYXRpb25zCisgKiB3aXRoIGNvbXBsaWFudCBvciBjb21wYXRpYmxlIGRldmljZXMuIEl0IHdpbGwgdXNlIHdoYXRldmVyIGZlYXR1cmVzCisgKiB0aGUgZGV2aWNlIHN1cHBvcnRzLCBwcmVmZXJpbmcgdGhvc2UgdGhhdCBhcmUgdHlwaWNhbGx5IGZhc3Rlci4KKyAqCisgKiBXaGVuIHRoZSBkZXZpY2UgaXMgb3BlbmVkLCBpdCBpcyBsZWZ0IGluIENPTVBBVElCSUxJVFkgbW9kZSwgYW5kCisgKiB3cml0ZXMgd29yayBsaWtlIGFueSBwcmludGVyIGRldmljZS4gVGhlIGRyaXZlciBvbmx5IGF0dGVtcHQgdG8KKyAqIG5lZ290aWF0ZSAxMjg0IG1vZGVzIHdoZW4gbmVlZGVkIHNvIHRoYXQgcGx1Z3MgY2FuIGJlIHB1bGxlZCwKKyAqIHN3aXRjaCBib3hlcyBzd2l0Y2hlZCwgZXRjLiwgd2l0aG91dCBkaXNydXB0aW5nIHRoaW5ncy4gSXQgd2lsbAorICogYWxzbyBsZWF2ZSB0aGUgZGV2aWNlIGluIGNvbXBhdGliaWxpdHkgbW9kZSB3aGVuIGNsb3NlZC4KKyAqLworCisKKworLyoKKyAqIFRoaXMgZHJpdmVyIGFsc28gc3VwcGxpZXMgaW9jdGxzIHRvIG1hbnVhbGx5IG1hbmlwdWxhdGUgdGhlCisgKiBwaW5zLiBUaGlzIGlzIGdyZWF0IGZvciB0ZXN0aW5nIGRldmljZXMsIG9yIHdyaXRpbmcgY29kZSB0byBkZWFsCisgKiB3aXRoIGJpenphcnJvLW1vZGUgb2YgdGhlIEFDTUUgU3BlY2lhbCBUdXJib1RoaW5neSBQbHVzLgorICoKKyAqIE5PVEU6IFRoZXNlIGlvY3RsIGN1cnJlbnRseSBkbyBub3QgaW50ZXJhY3Qgd2VsbCB3aXRoCisgKiByZWFkL3dyaXRlLiBDYXZlYXQgZW1wdG9yLgorICoKKyAqIFBVVF9QSU5TIGFsbG93cyB1cyB0byBhc3NpZ24gdGhlIHNlbnNlIG9mIGFsbCB0aGUgcGlucywgaW5jbHVkaW5nCisgKiB0aGUgZGF0YSBwaW5zIGlmIGJlaW5nIGRyaXZlbiBieSB0aGUgaG9zdC4gVGhlIEdFVF9QSU5TIHJldHVybnMgdGhlCisgKiBwaW5zIHRoYXQgdGhlIHBlcmlwaGVyYWwgZHJpdmVzLCBpbmNsdWRpbmcgZGF0YSBpZiBhcHByb3ByaWF0ZS4KKyAqLworCisjIGRlZmluZSBCUFBfUFVUX1BJTlMgX0lPVygnQicsIDEsIGludCkKKyMgZGVmaW5lIEJQUF9HRVRfUElOUyBfSU9SKCdCJywgMiwgY2hhcikgLyogdGhhdCdzIGJvZ3VzIC0gc2hvdWxkJ3ZlIGJlZW4gX0lPICovCisjIGRlZmluZSBCUFBfUFVUX0RBVEEgX0lPVygnQicsIDMsIGludCkKKyMgZGVmaW5lIEJQUF9HRVRfREFUQSBfSU9SKCdCJywgNCwgY2hhcikgLyogZGl0dG8gKi8KKworLyoKKyAqIFNldCB0aGUgZGF0YSBidXMgdG8gaW5wdXQgbW9kZS4gRGlzZW5nYWdlIHRoZSBkYXRhIGJpbiBkcml2ZXIgYW5kCisgKiBiZSBwcmVwYXJlZCB0byByZWFkIHZhbHVlcyBmcm9tIHRoZSBwZXJpcGhlcmFsLiBJZiB0aGUgYXJnIGlzIDAsCisgKiB0aGVuIHJldmVydCB0aGUgYnVzIHRvIG91dHB1dCBtb2RlLgorICovCisjIGRlZmluZSBCUFBfU0VUX0lOUFVUIF9JT1coJ0InLCA1LCBpbnQpCisKKy8qCisgKiBUaGVzZSBiaXRzIGFwcGx5IHRvIHRoZSBQVVQgb3BlcmF0aW9uLi4uCisgKi8KKyMgZGVmaW5lIEJQUF9QUF9uU3Ryb2JlICAgMHgwMDAxCisjIGRlZmluZSBCUFBfUFBfbkF1dG9GZCAgIDB4MDAwMgorIyBkZWZpbmUgQlBQX1BQX25Jbml0ICAgICAweDAwMDQKKyMgZGVmaW5lIEJQUF9QUF9uU2VsZWN0SW4gMHgwMDA4CisKKy8qCisgKiBUaGVzZSBhcHBseSB0byB0aGUgR0VUIG9wZXJhdGlvbiwgd2hpY2ggYWxzbyByZWFkcyB0aGUgY3VycmVudCB2YWx1ZQorICogb2YgdGhlIHByZXZpb3VzbHkgcHV0IHZhbHVlcy4gQSBiaXQgbWFzayBvZiB0aGVzZSB3aWxsIGJlIHJldHVybmVkCisgKiBhcyBhIGJpdCBtYXNrIGluIHRoZSByZXR1cm4gY29kZSBvZiB0aGUgaW9jdGwoKS4KKyAqLworIyBkZWZpbmUgQlBQX0dQX25BY2sgICAweDAxMDAKKyMgZGVmaW5lIEJQUF9HUF9CdXN5ICAgMHgwMjAwCisjIGRlZmluZSBCUFBfR1BfUEVycm9yIDB4MDQwMAorIyBkZWZpbmUgQlBQX0dQX1NlbGVjdCAweDA4MDAKKyMgZGVmaW5lIEJQUF9HUF9uRmF1bHQgMHgxMDAwCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9ic2RlcnJuby5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9ic2RlcnJuby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyZmU4ODAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2JzZGVycm5vLmgKQEAgLTAsMCArMSw5NCBAQAorLyogJElkOiBic2RlcnJuby5oLHYgMS4xIDE5OTYvMTIvMjYgMTM6MjU6MjEgZGF2ZW0gRXhwICQKKyAqIGJzZGVycm5vLmg6IEVycm9yIG51bWJlcnMgZm9yIE5ldEJTRCBiaW5hcnkgY29tcGF0aWJpbGl0eQorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NiBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCisgKi8KKworI2lmbmRlZiBfU1BBUkM2NF9CU0RFUlJOT19ICisjZGVmaW5lIF9TUEFSQzY0X0JTREVSUk5PX0gKKworI2RlZmluZSBCU0RfRVBFUk0gICAgICAgICAxICAgICAgLyogT3BlcmF0aW9uIG5vdCBwZXJtaXR0ZWQgKi8KKyNkZWZpbmUgQlNEX0VOT0VOVCAgICAgICAgMiAgICAgIC8qIE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkgKi8KKyNkZWZpbmUgQlNEX0VTUkNIICAgICAgICAgMyAgICAgIC8qIE5vIHN1Y2ggcHJvY2VzcyAqLworI2RlZmluZSBCU0RfRUlOVFIgICAgICAgICA0ICAgICAgLyogSW50ZXJydXB0ZWQgc3lzdGVtIGNhbGwgKi8KKyNkZWZpbmUgQlNEX0VJTyAgICAgICAgICAgNSAgICAgIC8qIElucHV0L291dHB1dCBlcnJvciAqLworI2RlZmluZSBCU0RfRU5YSU8gICAgICAgICA2ICAgICAgLyogRGV2aWNlIG5vdCBjb25maWd1cmVkICovCisjZGVmaW5lIEJTRF9FMkJJRyAgICAgICAgIDcgICAgICAvKiBBcmd1bWVudCBsaXN0IHRvbyBsb25nICovCisjZGVmaW5lIEJTRF9FTk9FWEVDICAgICAgIDggICAgICAvKiBFeGVjIGZvcm1hdCBlcnJvciAqLworI2RlZmluZSBCU0RfRUJBREYgICAgICAgICA5ICAgICAgLyogQmFkIGZpbGUgZGVzY3JpcHRvciAqLworI2RlZmluZSBCU0RfRUNISUxEICAgICAgICAxMCAgICAgLyogTm8gY2hpbGQgcHJvY2Vzc2VzICovCisjZGVmaW5lIEJTRF9FREVBRExLICAgICAgIDExICAgICAvKiBSZXNvdXJjZSBkZWFkbG9jayBhdm9pZGVkICovCisjZGVmaW5lIEJTRF9FTk9NRU0gICAgICAgIDEyICAgICAvKiBDYW5ub3QgYWxsb2NhdGUgbWVtb3J5ICovCisjZGVmaW5lIEJTRF9FQUNDRVMgICAgICAgIDEzICAgICAvKiBQZXJtaXNzaW9uIGRlbmllZCAqLworI2RlZmluZSBCU0RfRUZBVUxUICAgICAgICAxNCAgICAgLyogQmFkIGFkZHJlc3MgKi8KKyNkZWZpbmUgQlNEX0VOT1RCTEsgICAgICAgMTUgICAgIC8qIEJsb2NrIGRldmljZSByZXF1aXJlZCAqLworI2RlZmluZSBCU0RfRUJVU1kgICAgICAgICAxNiAgICAgLyogRGV2aWNlIGJ1c3kgKi8KKyNkZWZpbmUgQlNEX0VFWElTVCAgICAgICAgMTcgICAgIC8qIEZpbGUgZXhpc3RzICovCisjZGVmaW5lIEJTRF9FWERFViAgICAgICAgIDE4ICAgICAvKiBDcm9zcy1kZXZpY2UgbGluayAqLworI2RlZmluZSBCU0RfRU5PREVWICAgICAgICAxOSAgICAgLyogT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQgYnkgZGV2aWNlICovCisjZGVmaW5lIEJTRF9FTk9URElSICAgICAgIDIwICAgICAvKiBOb3QgYSBkaXJlY3RvcnkgKi8KKyNkZWZpbmUgQlNEX0VJU0RJUiAgICAgICAgMjEgICAgIC8qIElzIGEgZGlyZWN0b3J5ICovCisjZGVmaW5lIEJTRF9FSU5WQUwgICAgICAgIDIyICAgICAvKiBJbnZhbGlkIGFyZ3VtZW50ICovCisjZGVmaW5lIEJTRF9FTkZJTEUgICAgICAgIDIzICAgICAvKiBUb28gbWFueSBvcGVuIGZpbGVzIGluIHN5c3RlbSAqLworI2RlZmluZSBCU0RfRU1GSUxFICAgICAgICAyNCAgICAgLyogVG9vIG1hbnkgb3BlbiBmaWxlcyAqLworI2RlZmluZSBCU0RfRU5PVFRZICAgICAgICAyNSAgICAgLyogSW5hcHByb3ByaWF0ZSBpb2N0bCBmb3IgZGV2aWNlICovCisjZGVmaW5lIEJTRF9FVFhUQlNZICAgICAgIDI2ICAgICAvKiBUZXh0IGZpbGUgYnVzeSAqLworI2RlZmluZSBCU0RfRUZCSUcgICAgICAgICAyNyAgICAgLyogRmlsZSB0b28gbGFyZ2UgKi8KKyNkZWZpbmUgQlNEX0VOT1NQQyAgICAgICAgMjggICAgIC8qIE5vIHNwYWNlIGxlZnQgb24gZGV2aWNlICovCisjZGVmaW5lIEJTRF9FU1BJUEUgICAgICAgIDI5ICAgICAvKiBJbGxlZ2FsIHNlZWsgKi8KKyNkZWZpbmUgQlNEX0VST0ZTICAgICAgICAgMzAgICAgIC8qIFJlYWQtb25seSBmaWxlIHN5c3RlbSAqLworI2RlZmluZSBCU0RfRU1MSU5LICAgICAgICAzMSAgICAgLyogVG9vIG1hbnkgbGlua3MgKi8KKyNkZWZpbmUgQlNEX0VQSVBFICAgICAgICAgMzIgICAgIC8qIEJyb2tlbiBwaXBlICovCisjZGVmaW5lIEJTRF9FRE9NICAgICAgICAgIDMzICAgICAvKiBOdW1lcmljYWwgYXJndW1lbnQgb3V0IG9mIGRvbWFpbiAqLworI2RlZmluZSBCU0RfRVJBTkdFICAgICAgICAzNCAgICAgLyogUmVzdWx0IHRvbyBsYXJnZSAqLworI2RlZmluZSBCU0RfRUFHQUlOICAgICAgICAzNSAgICAgLyogUmVzb3VyY2UgdGVtcG9yYXJpbHkgdW5hdmFpbGFibGUgKi8KKyNkZWZpbmUgQlNEX0VXT1VMREJMT0NLICAgRUFHQUlOIC8qIE9wZXJhdGlvbiB3b3VsZCBibG9jayAqLworI2RlZmluZSBCU0RfRUlOUFJPR1JFU1MgICAzNiAgICAgLyogT3BlcmF0aW9uIG5vdyBpbiBwcm9ncmVzcyAqLworI2RlZmluZSBCU0RfRUFMUkVBRFkgICAgICAzNyAgICAgLyogT3BlcmF0aW9uIGFscmVhZHkgaW4gcHJvZ3Jlc3MgKi8KKyNkZWZpbmUgQlNEX0VOT1RTT0NLICAgICAgMzggICAgIC8qIFNvY2tldCBvcGVyYXRpb24gb24gbm9uLXNvY2tldCAqLworI2RlZmluZSBCU0RfRURFU1RBRERSUkVRICAzOSAgICAgLyogRGVzdGluYXRpb24gYWRkcmVzcyByZXF1aXJlZCAqLworI2RlZmluZSBCU0RfRU1TR1NJWkUgICAgICA0MCAgICAgLyogTWVzc2FnZSB0b28gbG9uZyAqLworI2RlZmluZSBCU0RfRVBST1RPVFlQRSAgICA0MSAgICAgLyogUHJvdG9jb2wgd3JvbmcgdHlwZSBmb3Igc29ja2V0ICovCisjZGVmaW5lIEJTRF9FTk9QUk9UT09QVCAgIDQyICAgICAvKiBQcm90b2NvbCBub3QgYXZhaWxhYmxlICovCisjZGVmaW5lIEJTRF9FUFJPVE9OT1NVUFBPUlQgIDQzICAvKiBQcm90b2NvbCBub3Qgc3VwcG9ydGVkICovCisjZGVmaW5lIEJTRF9FU09DS1ROT1NVUFBPUlQgIDQ0ICAvKiBTb2NrZXQgdHlwZSBub3Qgc3VwcG9ydGVkICovCisjZGVmaW5lIEJTRF9FT1BOT1RTVVBQICAgIDQ1ICAgICAvKiBPcGVyYXRpb24gbm90IHN1cHBvcnRlZCAqLworI2RlZmluZSBCU0RfRVBGTk9TVVBQT1JUICA0NiAgICAgLyogUHJvdG9jb2wgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUgQlNEX0VBRk5PU1VQUE9SVCAgNDcgICAgIC8qIEFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wgZmFtaWx5ICovCisjZGVmaW5lIEJTRF9FQUREUklOVVNFICAgIDQ4ICAgICAvKiBBZGRyZXNzIGFscmVhZHkgaW4gdXNlICovCisjZGVmaW5lIEJTRF9FQUREUk5PVEFWQUlMIDQ5ICAgICAvKiBDYW4ndCBhc3NpZ24gcmVxdWVzdGVkIGFkZHJlc3MgKi8KKyNkZWZpbmUgQlNEX0VORVRET1dOICAgICAgNTAgICAgIC8qIE5ldHdvcmsgaXMgZG93biAqLworI2RlZmluZSBCU0RfRU5FVFVOUkVBQ0ggICA1MSAgICAgLyogTmV0d29yayBpcyB1bnJlYWNoYWJsZSAqLworI2RlZmluZSBCU0RfRU5FVFJFU0VUICAgICA1MiAgICAgLyogTmV0d29yayBkcm9wcGVkIGNvbm5lY3Rpb24gb24gcmVzZXQgKi8KKyNkZWZpbmUgQlNEX0VDT05OQUJPUlRFRCAgNTMgICAgIC8qIFNvZnR3YXJlIGNhdXNlZCBjb25uZWN0aW9uIGFib3J0ICovCisjZGVmaW5lIEJTRF9FQ09OTlJFU0VUICAgIDU0ICAgICAvKiBDb25uZWN0aW9uIHJlc2V0IGJ5IHBlZXIgKi8KKyNkZWZpbmUgQlNEX0VOT0JVRlMgICAgICAgNTUgICAgIC8qIE5vIGJ1ZmZlciBzcGFjZSBhdmFpbGFibGUgKi8KKyNkZWZpbmUgQlNEX0VJU0NPTk4gICAgICAgNTYgICAgIC8qIFNvY2tldCBpcyBhbHJlYWR5IGNvbm5lY3RlZCAqLworI2RlZmluZSBCU0RfRU5PVENPTk4gICAgICA1NyAgICAgLyogU29ja2V0IGlzIG5vdCBjb25uZWN0ZWQgKi8KKyNkZWZpbmUgQlNEX0VTSFVURE9XTiAgICAgNTggICAgIC8qIENhbid0IHNlbmQgYWZ0ZXIgc29ja2V0IHNodXRkb3duICovCisjZGVmaW5lIEJTRF9FVE9PTUFOWVJFRlMgIDU5ICAgICAvKiBUb28gbWFueSByZWZlcmVuY2VzOiBjYW4ndCBzcGxpY2UgKi8KKyNkZWZpbmUgQlNEX0VUSU1FRE9VVCAgICAgNjAgICAgIC8qIE9wZXJhdGlvbiB0aW1lZCBvdXQgKi8KKyNkZWZpbmUgQlNEX0VDT05OUkVGVVNFRCAgNjEgICAgIC8qIENvbm5lY3Rpb24gcmVmdXNlZCAqLworI2RlZmluZSBCU0RfRUxPT1AgICAgICAgICA2MiAgICAgLyogVG9vIG1hbnkgbGV2ZWxzIG9mIHN5bWJvbGljIGxpbmtzICovCisjZGVmaW5lIEJTRF9FTkFNRVRPT0xPTkcgIDYzICAgICAvKiBGaWxlIG5hbWUgdG9vIGxvbmcgKi8KKyNkZWZpbmUgQlNEX0VIT1NURE9XTiAgICAgNjQgICAgIC8qIEhvc3QgaXMgZG93biAqLworI2RlZmluZSBCU0RfRUhPU1RVTlJFQUNIICA2NSAgICAgLyogTm8gcm91dGUgdG8gaG9zdCAqLworI2RlZmluZSBCU0RfRU5PVEVNUFRZICAgICA2NiAgICAgLyogRGlyZWN0b3J5IG5vdCBlbXB0eSAqLworI2RlZmluZSBCU0RfRVBST0NMSU0gICAgICA2NyAgICAgLyogVG9vIG1hbnkgcHJvY2Vzc2VzICovCisjZGVmaW5lIEJTRF9FVVNFUlMgICAgICAgIDY4ICAgICAvKiBUb28gbWFueSB1c2VycyAqLworI2RlZmluZSBCU0RfRURRVU9UICAgICAgICA2OSAgICAgLyogRGlzYyBxdW90YSBleGNlZWRlZCAqLworI2RlZmluZSBCU0RfRVNUQUxFICAgICAgICA3MCAgICAgLyogU3RhbGUgTkZTIGZpbGUgaGFuZGxlICovCisjZGVmaW5lIEJTRF9FUkVNT1RFICAgICAgIDcxICAgICAvKiBUb28gbWFueSBsZXZlbHMgb2YgcmVtb3RlIGluIHBhdGggKi8KKyNkZWZpbmUgQlNEX0VCQURSUEMgICAgICAgNzIgICAgIC8qIFJQQyBzdHJ1Y3QgaXMgYmFkICovCisjZGVmaW5lIEJTRF9FUlBDTUlTTUFUQ0ggIDczICAgICAvKiBSUEMgdmVyc2lvbiB3cm9uZyAqLworI2RlZmluZSBCU0RfRVBST0dVTkFWQUlMICA3NCAgICAgLyogUlBDIHByb2cuIG5vdCBhdmFpbCAqLworI2RlZmluZSBCU0RfRVBST0dNSVNNQVRDSCA3NSAgICAgLyogUHJvZ3JhbSB2ZXJzaW9uIHdyb25nICovCisjZGVmaW5lIEJTRF9FUFJPQ1VOQVZBSUwgIDc2ICAgICAvKiBCYWQgcHJvY2VkdXJlIGZvciBwcm9ncmFtICovCisjZGVmaW5lIEJTRF9FTk9MQ0sgICAgICAgIDc3ICAgICAvKiBObyBsb2NrcyBhdmFpbGFibGUgKi8KKyNkZWZpbmUgQlNEX0VOT1NZUyAgICAgICAgNzggICAgIC8qIEZ1bmN0aW9uIG5vdCBpbXBsZW1lbnRlZCAqLworI2RlZmluZSBCU0RfRUZUWVBFICAgICAgICA3OSAgICAgLyogSW5hcHByb3ByaWF0ZSBmaWxlIHR5cGUgb3IgZm9ybWF0ICovCisjZGVmaW5lIEJTRF9FQVVUSCAgICAgICAgIDgwICAgICAvKiBBdXRoZW50aWNhdGlvbiBlcnJvciAqLworI2RlZmluZSBCU0RfRU5FRURBVVRIICAgICA4MSAgICAgLyogTmVlZCBhdXRoZW50aWNhdG9yICovCisjZGVmaW5lIEJTRF9FTEFTVCAgICAgICAgIDgxICAgICAvKiBNdXN0IGJlIGVxdWFsIGxhcmdlc3QgZXJybm8gKi8KKworI2VuZGlmIC8qICEoX1NQQVJDNjRfQlNERVJSTk9fSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvYnVnLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2J1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1YzViMWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2J1Zy5oCkBAIC0wLDAgKzEsMTkgQEAKKyNpZm5kZWYgX1NQQVJDNjRfQlVHX0gKKyNkZWZpbmUgX1NQQVJDNjRfQlVHX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisKKyNpZmRlZiBDT05GSUdfREVCVUdfQlVHVkVSQk9TRQorZXh0ZXJuIHZvaWQgZG9fQlVHKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lKTsKKyNkZWZpbmUgQlVHKCkgZG8gewkJCQkJXAorCWRvX0JVRyhfX0ZJTEVfXywgX19MSU5FX18pOwkJCVwKKwlfX2J1aWx0aW5fdHJhcCgpOwkJCQlcCit9IHdoaWxlICgwKQorI2Vsc2UKKyNkZWZpbmUgQlVHKCkJCV9fYnVpbHRpbl90cmFwKCkKKyNlbmRpZgorCisjZGVmaW5lIEhBVkVfQVJDSF9CVUcKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9idWcuaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2J1Z3MuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvYnVncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2MGRkMDQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2J1Z3MuaApAQCAtMCwwICsxLDE2IEBACisvKiAgJElkOiBidWdzLmgsdiAxLjEgMTk5Ni8xMi8yNiAxMzoyNToyMCBkYXZlbSBFeHAgJAorICogIGluY2x1ZGUvYXNtLXNwYXJjNjQvYnVncy5oOiAgU3BhcmMgcHJvYmVzIGZvciB2YXJpb3VzIGJ1Z3MuCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NiBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCitleHRlcm4gdW5zaWduZWQgbG9uZyBsb29wc19wZXJfamlmZnk7CisKK3N0YXRpYyB2b2lkIF9faW5pdCBjaGVja19idWdzKHZvaWQpCit7CisjaWZuZGVmIENPTkZJR19TTVAKKwljcHVfZGF0YSgwKS51ZGVsYXlfdmFsID0gbG9vcHNfcGVyX2ppZmZ5OworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2J5dGVvcmRlci5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9ieXRlb3JkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjliMDhhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9ieXRlb3JkZXIuaApAQCAtMCwwICsxLDUwIEBACisvKiAkSWQ6IGJ5dGVvcmRlci5oLHYgMS44IDE5OTcvMTIvMTggMDI6NDQ6MTQgZWNkIEV4cCAkICovCisjaWZuZGVmIF9TUEFSQzY0X0JZVEVPUkRFUl9ICisjZGVmaW5lIF9TUEFSQzY0X0JZVEVPUkRFUl9ICisKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vYXNpLmg+CisKKyNpZmRlZiBfX0dOVUNfXworCitzdGF0aWMgX19pbmxpbmVfXyBfX3UxNiBfX19hcmNoX19zd2FiMTZwKGNvbnN0IF9fdTE2ICphZGRyKQoreworCV9fdTE2IHJldDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fICgibGR1aGEgWyUxXSAlMiwgJTAiCisJCQkgICAgICA6ICI9ciIgKHJldCkKKwkJCSAgICAgIDogInIiIChhZGRyKSwgImkiIChBU0lfUEwpKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX3UzMiBfX19hcmNoX19zd2FiMzJwKGNvbnN0IF9fdTMyICphZGRyKQoreworCV9fdTMyIHJldDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fICgibGR1d2EgWyUxXSAlMiwgJTAiCisJCQkgICAgICA6ICI9ciIgKHJldCkKKwkJCSAgICAgIDogInIiIChhZGRyKSwgImkiIChBU0lfUEwpKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX3U2NCBfX19hcmNoX19zd2FiNjRwKGNvbnN0IF9fdTY0ICphZGRyKQoreworCV9fdTY0IHJldDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fICgibGR4YSBbJTFdICUyLCAlMCIKKwkJCSAgICAgIDogIj1yIiAocmV0KQorCQkJICAgICAgOiAiciIgKGFkZHIpLCAiaSIgKEFTSV9QTCkpOworCXJldHVybiByZXQ7Cit9CisKKyNkZWZpbmUgX19hcmNoX19zd2FiMTZwKHgpIF9fX2FyY2hfX3N3YWIxNnAoeCkKKyNkZWZpbmUgX19hcmNoX19zd2FiMzJwKHgpIF9fX2FyY2hfX3N3YWIzMnAoeCkKKyNkZWZpbmUgX19hcmNoX19zd2FiNjRwKHgpIF9fX2FyY2hfX3N3YWI2NHAoeCkKKworI2RlZmluZSBfX0JZVEVPUkRFUl9IQVNfVTY0X18KKworI2VuZGlmIC8qIF9fR05VQ19fICovCisKKyNpbmNsdWRlIDxsaW51eC9ieXRlb3JkZXIvYmlnX2VuZGlhbi5oPgorCisjZW5kaWYgLyogX1NQQVJDNjRfQllURU9SREVSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvY2FjaGUuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvY2FjaGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGU1ZWMzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9jYWNoZS5oCkBAIC0wLDAgKzEsMTcgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1zcGFyYzY0L2NhY2hlLmgKKyAqLworI2lmbmRlZiBfX0FSQ0hfU1BBUkM2NF9DQUNIRV9ICisjZGVmaW5lIF9fQVJDSF9TUEFSQzY0X0NBQ0hFX0gKKworLyogYnl0ZXMgcGVyIEwxIGNhY2hlIGxpbmUgKi8KKyNkZWZpbmUgICAgICAgIEwxX0NBQ0hFX1NISUZUCTUKKyNkZWZpbmUgICAgICAgIEwxX0NBQ0hFX0JZVEVTCTMyIC8qIFR3byAxNi1ieXRlIHN1Yi1ibG9ja3MgcGVyIGxpbmUuICovCisKKyNkZWZpbmUgICAgICAgIEwxX0NBQ0hFX0FMSUdOKHgpICAgICAgICgoKHgpKyhMMV9DQUNIRV9CWVRFUy0xKSkmfihMMV9DQUNIRV9CWVRFUy0xKSkKKyNkZWZpbmUJCUwxX0NBQ0hFX1NISUZUX01BWCA1CS8qIGxhcmdlc3QgTDEgd2hpY2ggdGhpcyBhcmNoIHN1cHBvcnRzICovCisKKyNkZWZpbmUgICAgICAgIFNNUF9DQUNIRV9CWVRFU19TSElGVAk2CisjZGVmaW5lICAgICAgICBTTVBfQ0FDSEVfQllURVMJCSgxIDw8IFNNUF9DQUNIRV9CWVRFU19TSElGVCkgLyogTDIgY2FjaGUgbGluZSBzaXplLiAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvY2FjaGVmbHVzaC5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9jYWNoZWZsdXNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZmMDI5MwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvY2FjaGVmbHVzaC5oCkBAIC0wLDAgKzEsNzIgQEAKKyNpZm5kZWYgX1NQQVJDNjRfQ0FDSEVGTFVTSF9ICisjZGVmaW5lIF9TUEFSQzY0X0NBQ0hFRkxVU0hfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKworLyogRmx1c2hpbmcgZm9yIEQtY2FjaGUgYWxpYXMgaGFuZGxpbmcgaXMgb25seSBuZWVkZWQgaWYKKyAqIHRoZSBwYWdlIHNpemUgaXMgc21hbGxlciB0aGFuIDE2Sy4KKyAqLworI2lmIFBBR0VfU0hJRlQgPCAxNAorI2RlZmluZSBEQ0FDSEVfQUxJQVNJTkdfUE9TU0lCTEUKKyNlbmRpZgorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjaW5jbHVkZSA8bGludXgvbW0uaD4KKworLyogQ2FjaGUgZmx1c2ggb3BlcmF0aW9ucy4gKi8KKworLyogVGhlc2UgYXJlIHRoZSBzYW1lIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGlzIGlzIGFuIFNNUCBrZXJuZWwgb3Igbm90LiAqLworI2RlZmluZSBmbHVzaF9jYWNoZV9tbShfX21tKSBcCisJZG8geyBpZiAoKF9fbW0pID09IGN1cnJlbnQtPm1tKSBmbHVzaHdfdXNlcigpOyB9IHdoaWxlKDApCisjZGVmaW5lIGZsdXNoX2NhY2hlX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCkgXAorCWZsdXNoX2NhY2hlX21tKCh2bWEpLT52bV9tbSkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfcGFnZSh2bWEsIHBhZ2UsIHBmbikgXAorCWZsdXNoX2NhY2hlX21tKCh2bWEpLT52bV9tbSkKKworLyogCisgKiBPbiBzcGl0ZmlyZSwgdGhlIGljYWNoZSBkb2Vzbid0IHNub29wIGxvY2FsIHN0b3JlcyBhbmQgd2UgZG9uJ3QKKyAqIHVzZSBibG9jayBjb21taXQgc3RvcmVzICh3aGljaCBpbnZhbGlkYXRlIGljYWNoZSBsaW5lcykgZHVyaW5nCisgKiBtb2R1bGUgbG9hZCwgc28gd2UgbmVlZCB0aGlzLgorICovCitleHRlcm4gdm9pZCBmbHVzaF9pY2FjaGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpOworZXh0ZXJuIHZvaWQgX19mbHVzaF9pY2FjaGVfcGFnZSh1bnNpZ25lZCBsb25nKTsKKworZXh0ZXJuIHZvaWQgX19mbHVzaF9kY2FjaGVfcGFnZSh2b2lkICphZGRyLCBpbnQgZmx1c2hfaWNhY2hlKTsKK2V4dGVybiB2b2lkIGZsdXNoX2RjYWNoZV9wYWdlX2ltcGwoc3RydWN0IHBhZ2UgKnBhZ2UpOworI2lmZGVmIENPTkZJR19TTVAKK2V4dGVybiB2b2lkIHNtcF9mbHVzaF9kY2FjaGVfcGFnZV9pbXBsKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgY3B1KTsKK2V4dGVybiB2b2lkIGZsdXNoX2RjYWNoZV9wYWdlX2FsbChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHBhZ2UgKnBhZ2UpOworI2Vsc2UKKyNkZWZpbmUgc21wX2ZsdXNoX2RjYWNoZV9wYWdlX2ltcGwocGFnZSxjcHUpIGZsdXNoX2RjYWNoZV9wYWdlX2ltcGwocGFnZSkKKyNkZWZpbmUgZmx1c2hfZGNhY2hlX3BhZ2VfYWxsKG1tLHBhZ2UpIGZsdXNoX2RjYWNoZV9wYWdlX2ltcGwocGFnZSkKKyNlbmRpZgorCitleHRlcm4gdm9pZCBfX2ZsdXNoX2RjYWNoZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7CitleHRlcm4gdm9pZCBmbHVzaF9kY2FjaGVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7CisKKyNkZWZpbmUgZmx1c2hfaWNhY2hlX3BhZ2Uodm1hLCBwZykJZG8geyB9IHdoaWxlKDApCisjZGVmaW5lIGZsdXNoX2ljYWNoZV91c2VyX3JhbmdlKHZtYSxwZyxhZHIsbGVuKQlkbyB7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgY29weV90b191c2VyX3BhZ2Uodm1hLCBwYWdlLCB2YWRkciwgZHN0LCBzcmMsIGxlbikgXAorCWRvIHsJCQkJCQkJXAorCQlmbHVzaF9jYWNoZV9wYWdlKHZtYSwgdmFkZHIsIHBhZ2VfdG9fcGZuKHBhZ2UpKTtcCisJCW1lbWNweShkc3QsIHNyYywgbGVuKTsJCQkJXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgY29weV9mcm9tX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIHZhZGRyLCBkc3QsIHNyYywgbGVuKSBcCisJZG8gewkJCQkJCQlcCisJCWZsdXNoX2NhY2hlX3BhZ2Uodm1hLCB2YWRkciwgcGFnZV90b19wZm4ocGFnZSkpO1wKKwkJbWVtY3B5KGRzdCwgc3JjLCBsZW4pOwkJCQlcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBmbHVzaF9kY2FjaGVfbW1hcF9sb2NrKG1hcHBpbmcpCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2RjYWNoZV9tbWFwX3VubG9jayhtYXBwaW5nKQlkbyB7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgZmx1c2hfY2FjaGVfdm1hcChzdGFydCwgZW5kKQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9jYWNoZV92dW5tYXAoc3RhcnQsIGVuZCkJCWRvIHsgfSB3aGlsZSAoMCkKKworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKworI2VuZGlmIC8qIF9TUEFSQzY0X0NBQ0hFRkxVU0hfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9jaGFmc3IuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvY2hhZnNyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQxNjg4MwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvY2hhZnNyLmgKQEAgLTAsMCArMSwyNDIgQEAKKy8qICRJZDogY2hhZnNyLmgsdiAxLjEgMjAwMS8wMy8yOCAxMDo1NjozNCBkYXZlbSBFeHAgJCAqLworI2lmbmRlZiBfU1BBUkM2NF9DSEFGU1JfSAorI2RlZmluZSBfU1BBUkM2NF9DSEFGU1JfSAorCisvKiBDaGVldGFoIEFzeW5jaHJvbm91cyBGYXVsdCBTdGF0dXMgcmVnaXN0ZXIsIEFTST0weDRDIFZBPDYzOjA+PTB4MCAqLworCisvKiBDb21tZW50cyBpbmRpY2F0ZSB3aGljaCBwcm9jZXNzb3IgdmFyaWFudHMgb24gd2hpY2ggdGhlIGJpdCBkZWZpbml0aW9uCisgKiBpcyB2YWxpZC4gIENvZGVzIGFyZToKKyAqIGNoCS0tPgljaGVldGFoCisgKiBjaCsJLS0+CWNoZWV0YWggcGx1cworICoganAJLS0+CWphbGFwZW5vCisgKi8KKworLyogQWxsIGJpdHMgb2YgdGhpcyByZWdpc3RlciBleGNlcHQgTV9TWU5EUk9NRSBhbmQgRV9TWU5EUk9NRSBhcmUKKyAqIHJlYWQsIHdyaXRlIDEgdG8gY2xlYXIuICBNX1NZTkRST01FIGFuZCBFX1NZTkRST01FIGFyZSByZWFkLW9ubHkuCisgKi8KKworLyogU29mdHdhcmUgYml0IHNldCBieSBsaW51eCB0cmFwIGhhbmRsZXJzIHRvIGluZGljYXRlIHRoYXQgdGhlIHRyYXAgd2FzCisgKiBzaWduYWxsZWQgYXQgJXRsID49IDEuCisgKi8KKyNkZWZpbmUgQ0hBRlNSX1RMMQkJKDFVTCA8PCA2M1VMKSAvKiBuL2EgKi8KKworLyogVW5tYXBwZWQgZXJyb3IgZnJvbSBzeXN0ZW0gYnVzIGZvciBwcmVmZXRjaCBxdWV1ZSBvcgorICogc3RvcmUgcXVldWUgcmVhZCBvcGVyYXRpb24KKyAqLworI2RlZmluZSBDSFBBRlNSX0RUTwkJKDFVTCA8PCA1OVVMKSAvKiBjaCsgKi8KKworLyogQnVzIGVycm9yIGZyb20gc3lzdGVtIGJ1cyBmb3IgcHJlZmV0Y2ggcXVldWUgb3Igc3RvcmUgcXVldWUKKyAqIHJlYWQgb3BlcmF0aW9uCisgKi8KKyNkZWZpbmUgQ0hQQUZTUl9EQkVSUgkJKDFVTCA8PCA1OFVMKSAvKiBjaCsgKi8KKworLyogSGFyZHdhcmUgY29ycmVjdGVkIEUtY2FjaGUgVGFnIEVDQyBlcnJvciAqLworI2RlZmluZSBDSFBBRlNSX1RIQ0UJCSgxVUwgPDwgNTdVTCkgLyogY2grICovCisvKiBTeXN0ZW0gaW50ZXJmYWNlIHByb3RvY29sIGVycm9yLCBodyB0aW1lb3V0IGNhdXNlZCAqLworI2RlZmluZSBKUEFGU1JfSkVUTwkJKDFVTCA8PCA1N1VMKSAvKiBqcCAqLworCisvKiBTVyBoYW5kbGVkIGNvcnJlY3RhYmxlIEUtY2FjaGUgVGFnIEVDQyBlcnJvciAqLworI2RlZmluZSBDSFBBRlNSX1RTQ0UJCSgxVUwgPDwgNTZVTCkgLyogY2grICovCisvKiBQYXJpdHkgZXJyb3Igb24gc3lzdGVtIHNub29wIHJlc3VsdHMgKi8KKyNkZWZpbmUgSlBBRlNSX1NDRQkJKDFVTCA8PCA1NlVMKSAvKiBqcCAqLworCisvKiBVbmNvcnJlY3RhYmxlIEUtY2FjaGUgVGFnIEVDQyBlcnJvciAqLworI2RlZmluZSBDSFBBRlNSX1RVRQkJKDFVTCA8PCA1NVVMKSAvKiBjaCsgKi8KKy8qIFN5c3RlbSBpbnRlcmZhY2UgcHJvdG9jb2wgZXJyb3IsIGlsbGVnYWwgY29tbWFuZCBkZXRlY3RlZCAqLworI2RlZmluZSBKUEFGU1JfSkVJQwkJKDFVTCA8PCA1NVVMKSAvKiBqcCAqLworCisvKiBVbmNvcnJlY3RhYmxlIHN5c3RlbSBidXMgZGF0YSBFQ0MgZXJyb3IgZHVlIHRvIHByZWZldGNoCisgKiBvciBzdG9yZSBmaWxsIHJlcXVlc3QKKyAqLworI2RlZmluZSBDSFBBRlNSX0RVRQkJKDFVTCA8PCA1NFVMKSAvKiBjaCsgKi8KKy8qIFN5c3RlbSBpbnRlcmZhY2UgcHJvdG9jb2wgZXJyb3IsIGlsbGVnYWwgQURUWVBFIGRldGVjdGVkICovCisjZGVmaW5lIEpQQUZTUl9KRUlUCQkoMVVMIDw8IDU0VUwpIC8qIGpwICovCisKKy8qIE11bHRpcGxlIGVycm9ycyBvZiB0aGUgc2FtZSB0eXBlIGhhdmUgb2NjdXJyZWQuICBUaGlzIGJpdCBpcyBzZXQgd2hlbgorICogYW4gdW5jb3JyZWN0YWJsZSBlcnJvciBvciBhIFNXIGNvcnJlY3RhYmxlIGVycm9yIG9jY3VycyBhbmQgdGhlIHN0YXR1cworICogYml0IHRvIHJlcG9ydCB0aGF0IGVycm9yIGlzIGFscmVhZHkgc2V0LiAgV2hlbiBtdWx0aXBsZSBlcnJvcnMgb2YKKyAqIGRpZmZlcmVudCB0eXBlcyBhcmUgaW5kaWNhdGVkIGJ5IHNldHRpbmcgbXVsdGlwbGUgc3RhdHVzIGJpdHMuCisgKgorICogVGhpcyBiaXQgaXMgbm90IHNldCBpZiBtdWx0aXBsZSBIVyBjb3JyZWN0ZWQgZXJyb3JzIHdpdGggdGhlIHNhbWUKKyAqIHN0YXR1cyBiaXQgb2NjdXIsIG9ubHkgdW5jb3JyZWN0YWJsZSBhbmQgU1cgY29ycmVjdGFibGUgb25lcyBoYXZlCisgKiB0aGlzIGJlaGF2aW9yLgorICoKKyAqIFRoaXMgYml0IGlzIG5vdCBzZXQgd2hlbiBtdWx0aXBsZSBFQ0MgZXJyb3JzIGhhcHBlbiB3aXRoaW4gYSBzaW5nbGUKKyAqIDY0LWJ5dGUgc3lzdGVtIGJ1cyB0cmFuc2FjdGlvbi4gIE9ubHkgdGhlIGZpcnN0IEVDQyBlcnJvciBpbiBhIDE2LWJ5dGUKKyAqIHN1YnVuaXQgd2lsbCBiZSBsb2dnZWQuICBBbGwgZXJyb3JzIGluIHN1YnNlcXVlbnQgMTYtYnl0ZSBzdWJ1bml0cworICogZnJvbSB0aGUgc2FtZSA2NC1ieXRlIHRyYW5zYWN0aW9uIGFyZSBpZ25vcmVkLgorICovCisjZGVmaW5lIENIQUZTUl9NRQkJKDFVTCA8PCA1M1VMKSAvKiBjaCxjaCssanAgKi8KKworLyogUHJpdmlsZWdlZCBzdGF0ZSBlcnJvciBoYXMgb2NjdXJyZWQuICBUaGlzIGlzIGEgY2FwdHVyZSBvZiBQU1RBVEUuUFJJVgorICogYXQgdGhlIHRpbWUgdGhlIGVycm9yIGlzIGRldGVjdGVkLgorICovCisjZGVmaW5lIENIQUZTUl9QUklWCQkoMVVMIDw8IDUyVUwpIC8qIGNoLGNoKyxqcCAqLworCisvKiBUaGUgZm9sbG93aW5nIGJpdHMgNTEgKENIQUZTUl9QRVJSKSB0byAzMyAoQ0hBRlNSX0NFKSBhcmUgc3RpY2t5IGVycm9yCisgKiBiaXRzIGFuZCByZWNvcmQgdGhlIG1vc3QgcmVjZW50bHkgZGV0ZWN0ZWQgZXJyb3JzLiAgQml0cyBhY2N1bXVsYXRlCisgKiBlcnJvcnMgdGhhdCBoYXZlIGJlZW4gZGV0ZWN0ZWQgc2luY2UgdGhlIGxhc3Qgd3JpdGUgdG8gY2xlYXIgdGhlIGJpdC4KKyAqLworCisvKiBTeXN0ZW0gaW50ZXJmYWNlIHByb3RvY29sIGVycm9yLiAgVGhlIHByb2Nlc3NvciBhc3NlcnRzIGl0cycgRVJST1IKKyAqIHBpbiB3aGVuIHRoaXMgZXZlbnQgb2NjdXJzIGFuZCBpdCBhbHNvIGxvZ3MgYSBzcGVjaWZpYyBjYXVzZSBjb2RlCisgKiBpbnRvIGEgSlRBRyBzY2FubmFibGUgZmxvcC4KKyAqLworI2RlZmluZSBDSEFGU1JfUEVSUgkJKDFVTCA8PCA1MVVMKSAvKiBjaCxjaCssanAgKi8KKworLyogSW50ZXJuYWwgcHJvY2Vzc29yIGVycm9yLiAgVGhlIHByb2Nlc3NvciBhc3NlcnRzIGl0cycgRVJST1IKKyAqIHBpbiB3aGVuIHRoaXMgZXZlbnQgb2NjdXJzIGFuZCBpdCBhbHNvIGxvZ3MgYSBzcGVjaWZpYyBjYXVzZSBjb2RlCisgKiBpbnRvIGEgSlRBRyBzY2FubmFibGUgZmxvcC4KKyAqLworI2RlZmluZSBDSEFGU1JfSUVSUgkJKDFVTCA8PCA1MFVMKSAvKiBjaCxjaCssanAgKi8KKworLyogU3lzdGVtIHJlcXVlc3QgcGFyaXR5IGVycm9yIG9uIGluY29taW5nIGFkZHJlc3MgKi8KKyNkZWZpbmUgQ0hBRlNSX0lTQVAJCSgxVUwgPDwgNDlVTCkgLyogY2gsY2grLGpwICovCisKKy8qIEhXIENvcnJlY3RlZCBzeXN0ZW0gYnVzIE1UQUcgRUNDIGVycm9yICovCisjZGVmaW5lIENIQUZTUl9FTUMJCSgxVUwgPDwgNDhVTCkgLyogY2gsY2grICovCisvKiBQYXJpdHkgZXJyb3Igb24gTDIgY2FjaGUgdGFnIFNSQU0gKi8KKyNkZWZpbmUgSlBBRlNSX0VUUAkJKDFVTCA8PCA0OFVMKSAvKiBqcCAqLworCisvKiBVbmNvcnJlY3RhYmxlIHN5c3RlbSBidXMgTVRBRyBFQ0MgZXJyb3IgKi8KKyNkZWZpbmUgQ0hBRlNSX0VNVQkJKDFVTCA8PCA0N1VMKSAvKiBjaCxjaCsgKi8KKy8qIE91dCBvZiByYW5nZSBtZW1vcnkgZXJyb3IgaGFzIG9jY3VycmVkICovCisjZGVmaW5lIEpQQUZTUl9PTQkJKDFVTCA8PCA0N1VMKSAvKiBqcCAqLworCisvKiBIVyBDb3JyZWN0ZWQgc3lzdGVtIGJ1cyBkYXRhIEVDQyBlcnJvciBmb3IgcmVhZCBvZiBpbnRlcnJ1cHQgdmVjdG9yICovCisjZGVmaW5lIENIQUZTUl9JVkMJCSgxVUwgPDwgNDZVTCkgLyogY2gsY2grICovCisvKiBFcnJvciBkdWUgdG8gdW5zdXBwb3J0ZWQgc3RvcmUgKi8KKyNkZWZpbmUgSlBBRlNSX1VNUwkJKDFVTCA8PCA0NlVMKSAvKiBqcCAqLworCisvKiBVbmNvcnJlY3RhYmxlIHN5c3RlbSBidXMgZGF0YSBFQ0MgZXJyb3IgZm9yIHJlYWQgb2YgaW50ZXJydXB0IHZlY3RvciAqLworI2RlZmluZSBDSEFGU1JfSVZVCQkoMVVMIDw8IDQ1VUwpIC8qIGNoLGNoKyxqcCAqLworCisvKiBVbm1hcHBlZCBlcnJvciBmcm9tIHN5c3RlbSBidXMgKi8KKyNkZWZpbmUgQ0hBRlNSX1RPCQkoMVVMIDw8IDQ0VUwpIC8qIGNoLGNoKyxqcCAqLworCisvKiBCdXMgZXJyb3IgcmVzcG9uc2UgZnJvbSBzeXN0ZW0gYnVzICovCisjZGVmaW5lIENIQUZTUl9CRVJSCQkoMVVMIDw8IDQzVUwpIC8qIGNoLGNoKyxqcCAqLworCisvKiBTVyBDb3JyZWN0YWJsZSBFLWNhY2hlIEVDQyBlcnJvciBmb3IgaW5zdHJ1Y3Rpb24gZmV0Y2ggb3IgZGF0YSBhY2Nlc3MKKyAqIG90aGVyIHRoYW4gYmxvY2sgbG9hZC4KKyAqLworI2RlZmluZSBDSEFGU1JfVUNDCQkoMVVMIDw8IDQyVUwpIC8qIGNoLGNoKyxqcCAqLworCisvKiBVbmNvcnJlY3RhYmxlIEUtY2FjaGUgRUNDIGVycm9yIGZvciBpbnN0cnVjdGlvbiBmZXRjaCBvciBkYXRhIGFjY2VzcworICogb3RoZXIgdGhhbiBibG9jayBsb2FkLgorICovCisjZGVmaW5lIENIQUZTUl9VQ1UJCSgxVUwgPDwgNDFVTCkgLyogY2gsY2grLGpwICovCisKKy8qIENvcHlvdXQgSFcgQ29ycmVjdGVkIEVDQyBlcnJvciAqLworI2RlZmluZSBDSEFGU1JfQ1BDCQkoMVVMIDw8IDQwVUwpIC8qIGNoLGNoKyxqcCAqLworCisvKiBDb3B5b3V0IFVuY29ycmVjdGFibGUgRUNDIGVycm9yICovCisjZGVmaW5lIENIQUZTUl9DUFUJCSgxVUwgPDwgMzlVTCkgLyogY2gsY2grLGpwICovCisKKy8qIEhXIENvcnJlY3RlZCBFQ0MgZXJyb3IgZnJvbSBFLWNhY2hlIGZvciB3cml0ZWJhY2sgKi8KKyNkZWZpbmUgQ0hBRlNSX1dEQwkJKDFVTCA8PCAzOFVMKSAvKiBjaCxjaCssanAgKi8KKworLyogVW5jb3JyZWN0YWJsZSBFQ0MgZXJyb3IgZnJvbSBFLWNhY2hlIGZvciB3cml0ZWJhY2sgKi8KKyNkZWZpbmUgQ0hBRlNSX1dEVQkJKDFVTCA8PCAzN1VMKSAvKiBjaCxjaCssanAgKi8KKworLyogSFcgQ29ycmVjdGVkIEVDQyBlcnJvciBmcm9tIEUtY2FjaGUgZm9yIHN0b3JlIG1lcmdlIG9yIGJsb2NrIGxvYWQgKi8KKyNkZWZpbmUgQ0hBRlNSX0VEQwkJKDFVTCA8PCAzNlVMKSAvKiBjaCxjaCssanAgKi8KKworLyogVW5jb3JyZWN0YWJsZSBFQ0MgZXJyb3IgZnJvbSBFLWNhY2hlIGZvciBzdG9yZSBtZXJnZSBvciBibG9jayBsb2FkICovCisjZGVmaW5lIENIQUZTUl9FRFUJCSgxVUwgPDwgMzVVTCkgLyogY2gsY2grLGpwICovCisKKy8qIFVuY29ycmVjdGFibGUgc3lzdGVtIGJ1cyBkYXRhIEVDQyBlcnJvciBmb3IgcmVhZCBvZiBtZW1vcnkgb3IgSS9PICovCisjZGVmaW5lIENIQUZTUl9VRQkJKDFVTCA8PCAzNFVMKSAvKiBjaCxjaCssanAgKi8KKworLyogSFcgQ29ycmVjdGVkIHN5c3RlbSBidXMgZGF0YSBFQ0MgZXJyb3IgZm9yIHJlYWQgb2YgbWVtb3J5IG9yIEkvTyAqLworI2RlZmluZSBDSEFGU1JfQ0UJCSgxVUwgPDwgMzNVTCkgLyogY2gsY2grLGpwICovCisKKy8qIFVuY29ycmVjdGFibGUgRUNDIGVycm9yIGZyb20gcmVtb3RlIGNhY2hlL21lbW9yeSAqLworI2RlZmluZSBKUEFGU1JfUlVFCQkoMVVMIDw8IDMyVUwpIC8qIGpwICovCisKKy8qIENvcnJlY3RhYmxlIEVDQyBlcnJvciBmcm9tIHJlbW90ZSBjYWNoZS9tZW1vcnkgKi8KKyNkZWZpbmUgSlBBRlNSX1JDRQkJKDFVTCA8PCAzMVVMKSAvKiBqcCAqLworCisvKiBKQlVTIHBhcml0eSBlcnJvciBvbiByZXR1cm5lZCByZWFkIGRhdGEgKi8KKyNkZWZpbmUgSlBBRlNSX0JQCQkoMVVMIDw8IDMwVUwpIC8qIGpwICovCisKKy8qIEpCVVMgcGFyaXR5IGVycm9yIG9uIGRhdGEgZm9yIHdyaXRlYmFjayBvciBibG9jayBzdG9yZSAqLworI2RlZmluZSBKUEFGU1JfV0JQCQkoMVVMIDw8IDI5VUwpIC8qIGpwICovCisKKy8qIEZvcmVpZ24gcmVhZCB0byBEUkFNIGluY3VycmluZyBjb3JyZWN0YWJsZSBFQ0MgZXJyb3IgKi8KKyNkZWZpbmUgSlBBRlNSX0ZSQwkJKDFVTCA8PCAyOFVMKSAvKiBqcCAqLworCisvKiBGb3JlaWduIHJlYWQgdG8gRFJBTSBpbmN1cnJpbmcgdW5jb3JyZWN0YWJsZSBFQ0MgZXJyb3IgKi8KKyNkZWZpbmUgSlBBRlNSX0ZSVQkJKDFVTCA8PCAyN1VMKSAvKiBqcCAqLworCisjZGVmaW5lIENIQUZTUl9FUlJPUlMJCShDSEFGU1JfUEVSUiB8IENIQUZTUl9JRVJSIHwgQ0hBRlNSX0lTQVAgfCBDSEFGU1JfRU1DIHwgXAorCQkJCSBDSEFGU1JfRU1VIHwgQ0hBRlNSX0lWQyB8IENIQUZTUl9JVlUgfCBDSEFGU1JfVE8gfCBcCisJCQkJIENIQUZTUl9CRVJSIHwgQ0hBRlNSX1VDQyB8IENIQUZTUl9VQ1UgfCBDSEFGU1JfQ1BDIHwgXAorCQkJCSBDSEFGU1JfQ1BVIHwgQ0hBRlNSX1dEQyB8IENIQUZTUl9XRFUgfCBDSEFGU1JfRURDIHwgXAorCQkJCSBDSEFGU1JfRURVIHwgQ0hBRlNSX1VFIHwgQ0hBRlNSX0NFKQorI2RlZmluZSBDSFBBRlNSX0VSUk9SUwkJKENIUEFGU1JfRFRPIHwgQ0hQQUZTUl9EQkVSUiB8IENIUEFGU1JfVEhDRSB8IFwKKwkJCQkgQ0hQQUZTUl9UU0NFIHwgQ0hQQUZTUl9UVUUgfCBDSFBBRlNSX0RVRSB8IFwKKwkJCQkgQ0hBRlNSX1BFUlIgfCBDSEFGU1JfSUVSUiB8IENIQUZTUl9JU0FQIHwgQ0hBRlNSX0VNQyB8IFwKKwkJCQkgQ0hBRlNSX0VNVSB8IENIQUZTUl9JVkMgfCBDSEFGU1JfSVZVIHwgQ0hBRlNSX1RPIHwgXAorCQkJCSBDSEFGU1JfQkVSUiB8IENIQUZTUl9VQ0MgfCBDSEFGU1JfVUNVIHwgQ0hBRlNSX0NQQyB8IFwKKwkJCQkgQ0hBRlNSX0NQVSB8IENIQUZTUl9XREMgfCBDSEFGU1JfV0RVIHwgQ0hBRlNSX0VEQyB8IFwKKwkJCQkgQ0hBRlNSX0VEVSB8IENIQUZTUl9VRSB8IENIQUZTUl9DRSkKKyNkZWZpbmUgSlBBRlNSX0VSUk9SUwkJKEpQQUZTUl9KRVRPIHwgSlBBRlNSX1NDRSB8IEpQQUZTUl9KRUlDIHwgXAorCQkJCSBKUEFGU1JfSkVJVCB8IENIQUZTUl9QRVJSIHwgQ0hBRlNSX0lFUlIgfCBcCisJCQkJIENIQUZTUl9JU0FQIHwgSlBBRlNSX0VUUCB8IEpQQUZTUl9PTSB8IFwKKwkJCQkgSlBBRlNSX1VNUyB8IENIQUZTUl9JVlUgfCBDSEFGU1JfVE8gfCBcCisJCQkJIENIQUZTUl9CRVJSIHwgQ0hBRlNSX1VDQyB8IENIQUZTUl9VQ1UgfCBcCisJCQkJIENIQUZTUl9DUEMgfCBDSEFGU1JfQ1BVIHwgQ0hBRlNSX1dEQyB8IFwKKwkJCQkgQ0hBRlNSX1dEVSB8IENIQUZTUl9FREMgfCBDSEFGU1JfRURVIHwgXAorCQkJCSBDSEFGU1JfVUUgfCBDSEFGU1JfQ0UgfCBKUEFGU1JfUlVFIHwgXAorCQkJCSBKUEFGU1JfUkNFIHwgSlBBRlNSX0JQIHwgSlBBRlNSX1dCUCB8IFwKKwkJCQkgSlBBRlNSX0ZSQyB8IEpQQUZTUl9GUlUpCisKKy8qIEFjdGl2ZSBKQlVTIHJlcXVlc3Qgc2lnbmFsIHdoZW4gZXJyb3Igb2NjdXJyZWQgKi8KKyNkZWZpbmUgSlBBRlNSX0pCUkVRCQkoMHg3VUwgPDwgMjRVTCkgLyoganAgKi8KKyNkZWZpbmUgSlBBRlNSX0pCUkVRX1NISUZUCTI0VUwKKworLyogTDIgY2FjaGUgd2F5IGluZm9ybWF0aW9uICovCisjZGVmaW5lIEpQQUZTUl9FVFcJCSgweDNVTCA8PCAyMlVMKSAvKiBqcCAqLworI2RlZmluZSBKUEFGU1JfRVRXX1NISUZUCTIyVUwKKworLyogU3lzdGVtIGJ1cyBNVEFHIEVDQyBzeW5kcm9tZS4gIFRoaXMgZmllbGQgY2FwdHVyZXMgdGhlIHN0YXR1cyBvZiB0aGUKKyAqIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhlIGhpZ2hlc3QtcHJpb3JpdHkgZXJyb3IgYWNjb3JkaW5nIHRvIHRoZSBNX1NZTkQKKyAqIG92ZXJ3cml0ZSBwb2xpY3kuICBBZnRlciB0aGUgQUZTUiBzdGlja3kgYml0LCBjb3JyZXNwb25kaW5nIHRvIHRoZSBlcnJvcgorICogZm9yIHdoaWNoIHRoZSBNX1NZTkQgaXMgcmVwb3J0ZWQsIGlzIGNsZWFyZWQsIHRoZSBjb250ZW50cyBvZiB0aGUgTV9TWU5ECisgKiBmaWVsZCB3aWxsIGJlIHVuY2hhbmdlZCBieSB3aWxsIGJlIHVuZnJvemVuIGZvciBmdXJ0aGVyIGVycm9yIGNhcHR1cmUuCisgKi8KKyNkZWZpbmUgQ0hBRlNSX01fU1lORFJPTUUJKDB4ZlVMIDw8IDE2VUwpIC8qIGNoLGNoKyxqcCAqLworI2RlZmluZSBDSEFGU1JfTV9TWU5EUk9NRV9TSElGVAkxNlVMCisKKy8qIEFnZW5pZCBJZCBvZiB0aGUgZm9yZWlnbiBkZXZpY2UgY2F1c2luZyB0aGUgVUUvQ0UgZXJyb3JzICovCisjZGVmaW5lIEpQQUZTUl9BSUQJCSgweDFmVUwgPDwgOVVMKSAvKiBqcCAqLworI2RlZmluZSBKUEFGU1JfQUlEX1NISUZUCTlVTAorCisvKiBTeXN0ZW0gYnVzIG9yIEUtY2FjaGUgZGF0YSBFQ0Mgc3luZHJvbWUuICBUaGlzIGZpZWxkIGNhcHR1cmVzIHRoZSBzdGF0dXMKKyAqIG9mIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHRoZSBoaWdoZXN0LXByaW9yaXR5IGVycm9yIGFjY29yZGluZyB0byB0aGUKKyAqIEVfU1lORCBvdmVyd3JpdGUgcG9saWN5LiAgQWZ0ZXIgdGhlIEFGU1Igc3RpY2t5IGJpdCwgY29ycmVzcG9uZGluZyB0byB0aGUKKyAqIGVycm9yIGZvciB3aGljaCB0aGUgRV9TWU5EIGlzIHJlcG9ydGVkLCBpcyBjbGVhcmUsIHRoZSBjb250ZW50cyBvZiB0aGUgRV9TWU5ECisgKiBmaWVsZCB3aWxsIGJlIHVuY2hhbmdlZCBidXQgd2lsbCBiZSB1bmZyb3plbiBmb3IgZnVydGhlciBlcnJvciBjYXB0dXJlLgorICovCisjZGVmaW5lIENIQUZTUl9FX1NZTkRST01FCSgweDFmZlVMIDw8IDBVTCkgLyogY2gsY2grLGpwICovCisjZGVmaW5lIENIQUZTUl9FX1NZTkRST01FX1NISUZUCTBVTAorCisvKiBUaGUgQUZTUiBtdXN0IGJlIGV4cGxpY2l0bHkgY2xlYXJlZCBieSBzb2Z0d2FyZSwgaXQgaXMgbm90IGNsZWFyZWQgYXV0b21hdGljYWxseQorICogYnkgYSByZWFkLiAgV3JpdGVzIHRvIGJpdHMgPDUxOjMzPiB3aXRoIGJpdHMgc2V0IHdpbGwgY2xlYXIgdGhlIGNvcnJlc3BvbmRpbmcKKyAqIGJpdHMgaW4gdGhlIEFGU1IuICBCaXRzIGFzc29jaWF0ZWQgd2l0aCBkaXNydXB0aW5nIHRyYXBzIG11c3QgYmUgY2xlYXJlZCBiZWZvcmUKKyAqIGludGVycnVwdHMgYXJlIHJlLWVuYWJsZWQgdG8gcHJldmVudCBtdWx0aXBsZSB0cmFwcyBmb3IgdGhlIHNhbWUgZXJyb3IuICBJLmUuCisgKiBQU1RBVEUuSUUgYW5kIEFGU1IgYml0cyBjb250cm9sIGRlbGl2ZXJ5IG9mIGRpc3J1cHRpbmcgdHJhcHMuCisgKgorICogU2luY2UgdGhlcmUgaXMgb25seSBvbmUgQUZBUiwgd2hlbiBtdWx0aXBsZSBldmVudHMgaGF2ZSBiZWVuIGxvZ2dlZCBieSB0aGUKKyAqIGJpdHMgaW4gdGhlIEFGU1IsIGF0IG1vc3Qgb25lIG9mIHRoZXNlIGV2ZW50cyB3aWxsIGhhdmUgaXRzIHN0YXR1cyBjYXB0dXJlZAorICogaW4gdGhlIEFGQVIuICBUaGUgaGlnaGVzdCBwcmlvcml0eSBvZiB0aG9zZSBldmVudCBiaXRzIHdpbGwgZ2V0IEFGQVIgbG9nZ2luZy4KKyAqIFRoZSBBRkFSIHdpbGwgYmUgdW5sb2NrZWQgYW5kIGF2YWlsYWJsZSB0byBjYXB0dXJlIHRoZSBhZGRyZXNzIG9mIGFub3RoZXIgZXZlbnQKKyAqIGFzIHNvb24gYXMgdGhlIG9uZSBiaXQgaW4gQUZTUiB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBldmVudCBsb2dnZWQgaW4gQUZBUiBpcworICogY2xlYXJlZC4gIEZvciBleGFtcGxlLCBpZiBBRlNSLkNFIGlzIGRldGVjdGVkLCB0aGVuIEFGU1IuVUUgKHdoaWNoIG92ZXJ3cml0ZXMKKyAqIHRoZSBBRkFSKSwgYW5kIEFGU1IuVUUgaXMgY2xlYXJlZCBieSBub3QgQUZTUi5DRSwgdGhlbiB0aGUgQUZBUiB3aWxsIGJlIHVubG9ja2VkCisgKiBhbmQgcmVhZHkgZm9yIGFub3RoZXIgZXZlbnQsIGV2ZW4gdGhvdWdoIEFGU1IuQ0UgaXMgc3RpbGwgc2V0LiAgVGhlIHNhbWUgcnVsZXMKKyAqIGFsc28gYXBwbHkgdG8gdGhlIE1fU1lORFJPTUUgYW5kIEVfU1lORFJPTUUgZmllbGRzIG9mIHRoZSBBRlNSLgorICovCisKKyNlbmRpZiAvKiBfU1BBUkM2NF9DSEFGU1JfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9jaGVja3N1bS5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9jaGVja3N1bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjOGJlZDIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2NoZWNrc3VtLmgKQEAgLTAsMCArMSwxNzMgQEAKKy8qICRJZDogY2hlY2tzdW0uaCx2IDEuMTkgMjAwMi8wMi8wOSAxOTo0OTozMSBkYXZlbSBFeHAgJCAqLworI2lmbmRlZiBfX1NQQVJDNjRfQ0hFQ0tTVU1fSAorI2RlZmluZSBfX1NQQVJDNjRfQ0hFQ0tTVU1fSAorCisvKiAgY2hlY2tzdW0uaDogIElQL1VEUC9UQ1AgY2hlY2tzdW0gcm91dGluZXMgb24gdGhlIFY5LgorICoKKyAqICBDb3B5cmlnaHQoQykgMTk5NSBMaW51cyBUb3J2YWxkcworICogIENvcHlyaWdodChDKSAxOTk1IE1pZ3VlbCBkZSBJY2F6YQorICogIENvcHlyaWdodChDKSAxOTk2IERhdmlkIFMuIE1pbGxlcgorICogIENvcHlyaWdodChDKSAxOTk2IEVkZGllIEMuIERvc3QKKyAqICBDb3B5cmlnaHQoQykgMTk5NyBKYWt1YiBKZWxpbmVrCisgKgorICogZGVyaXZlZCBmcm9tOgorICoJQWxwaGEgY2hlY2tzdW0gYy1jb2RlCisgKiAgICAgIGl4ODYgaW5saW5lIGFzc2VtYmx5CisgKiAgICAgIFJGQzEwNzEgQ29tcHV0aW5nIHRoZSBJbnRlcm5ldCBDaGVja3N1bQorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbjYuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorCisvKiBjb21wdXRlcyB0aGUgY2hlY2tzdW0gb2YgYSBtZW1vcnkgYmxvY2sgYXQgYnVmZiwgbGVuZ3RoIGxlbiwKKyAqIGFuZCBhZGRzIGluICJzdW0iICgzMi1iaXQpCisgKgorICogcmV0dXJucyBhIDMyLWJpdCBudW1iZXIgc3VpdGFibGUgZm9yIGZlZWRpbmcgaW50byBpdHNlbGYKKyAqIG9yIGNzdW1fdGNwdWRwX21hZ2ljCisgKgorICogdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIGV2ZW4gbGVuZ3RocywgZXhjZXB0CisgKiBmb3IgdGhlIGxhc3QgZnJhZ21lbnQsIHdoaWNoIG1heSBiZSBvZGQKKyAqCisgKiBpdCdzIGJlc3QgdG8gaGF2ZSBidWZmIGFsaWduZWQgb24gYSAzMi1iaXQgYm91bmRhcnkKKyAqLworZXh0ZXJuIHVuc2lnbmVkIGludCBjc3VtX3BhcnRpYWwoY29uc3QgdW5zaWduZWQgY2hhciAqIGJ1ZmYsIGludCBsZW4sIHVuc2lnbmVkIGludCBzdW0pOworCisvKiB0aGUgc2FtZSBhcyBjc3VtX3BhcnRpYWwsIGJ1dCBjb3BpZXMgZnJvbSB1c2VyIHNwYWNlIHdoaWxlIGl0CisgKiBjaGVja3N1bXMKKyAqCisgKiBoZXJlIGV2ZW4gbW9yZSBpbXBvcnRhbnQgdG8gYWxpZ24gc3JjIGFuZCBkc3Qgb24gYSAzMi1iaXQgKG9yIGV2ZW4KKyAqIGJldHRlciA2NC1iaXQpIGJvdW5kYXJ5CisgKi8KK2V4dGVybiB1bnNpZ25lZCBpbnQgY3N1bV9wYXJ0aWFsX2NvcHlfbm9jaGVjayhjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMsCisJCQkJCSAgICAgIHVuc2lnbmVkIGNoYXIgKmRzdCwKKwkJCQkJICAgICAgaW50IGxlbiwgdW5zaWduZWQgaW50IHN1bSk7CisKK2V4dGVybiBsb25nIF9fY3N1bV9wYXJ0aWFsX2NvcHlfZnJvbV91c2VyKGNvbnN0IHVuc2lnbmVkIGNoYXIgX191c2VyICpzcmMsCisJCQkJCSAgdW5zaWduZWQgY2hhciAqZHN0LCBpbnQgbGVuLAorCQkJCQkgIHVuc2lnbmVkIGludCBzdW0pOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAorY3N1bV9wYXJ0aWFsX2NvcHlfZnJvbV91c2VyKGNvbnN0IHVuc2lnbmVkIGNoYXIgX191c2VyICpzcmMsCisJCQkgICAgdW5zaWduZWQgY2hhciAqZHN0LCBpbnQgbGVuLAorCQkJICAgIHVuc2lnbmVkIGludCBzdW0sIGludCAqZXJyKQoreworCWxvbmcgcmV0ID0gX19jc3VtX3BhcnRpYWxfY29weV9mcm9tX3VzZXIoc3JjLCBkc3QsIGxlbiwgc3VtKTsKKwlpZiAocmV0IDwgMCkKKwkJKmVyciA9IC1FRkFVTFQ7CisJcmV0dXJuICh1bnNpZ25lZCBpbnQpIHJldDsKK30KKworLyogCisgKglDb3B5IGFuZCBjaGVja3N1bSB0byB1c2VyCisgKi8KKyNkZWZpbmUgSEFWRV9DU1VNX0NPUFlfVVNFUgorZXh0ZXJuIGxvbmcgX19jc3VtX3BhcnRpYWxfY29weV90b191c2VyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYywKKwkJCQkJdW5zaWduZWQgY2hhciBfX3VzZXIgKmRzdCwgaW50IGxlbiwKKwkJCQkJICB1bnNpZ25lZCBpbnQgc3VtKTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKK2NzdW1fYW5kX2NvcHlfdG9fdXNlcihjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMsCisJCSAgICAgIHVuc2lnbmVkIGNoYXIgX191c2VyICpkc3QsIGludCBsZW4sCisJCSAgICAgIHVuc2lnbmVkIGludCBzdW0sIGludCAqZXJyKQoreworCWxvbmcgcmV0ID0gX19jc3VtX3BhcnRpYWxfY29weV90b191c2VyKHNyYywgZHN0LCBsZW4sIHN1bSk7CisJaWYgKHJldCA8IDApCisJCSplcnIgPSAtRUZBVUxUOworCXJldHVybiAodW5zaWduZWQgaW50KSByZXQ7Cit9CisKKy8qIGlobCBpcyBhbHdheXMgNSBvciBncmVhdGVyLCBhbG1vc3QgYWx3YXlzIGlzIDUsIGFuZCBpcGggaXMgd29yZCBhbGlnbmVkCisgKiB0aGUgbWFqb3JpdHkgb2YgdGhlIHRpbWUuCisgKi8KK2V4dGVybiB1bnNpZ25lZCBzaG9ydCBpcF9mYXN0X2NzdW0oX19jb25zdF9fIHVuc2lnbmVkIGNoYXIgKmlwaCwKKwkJCQkgICB1bnNpZ25lZCBpbnQgaWhsKTsKKworLyogRm9sZCBhIHBhcnRpYWwgY2hlY2tzdW0gd2l0aG91dCBhZGRpbmcgcHNldWRvIGhlYWRlcnMuICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IGNzdW1fZm9sZCh1bnNpZ25lZCBpbnQgc3VtKQoreworCXVuc2lnbmVkIGludCB0bXA7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKyIJYWRkY2MJCSUwLCAlMSwgJTFcbiIKKyIJc3JsCQklMSwgMTYsICUxXG4iCisiCWFkZGMJCSUxLCAlJWcwLCAlMVxuIgorIgl4bm9yCQklJWcwLCAlMSwgJTBcbiIKKwk6ICI9JnIiIChzdW0pLCAiPXIiICh0bXApCisJOiAiMCIgKHN1bSksICIxIiAoc3VtPDwxNikKKwk6ICJjYyIpOworCXJldHVybiAoc3VtICYgMHhmZmZmKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGNzdW1fdGNwdWRwX25vZm9sZCh1bnNpZ25lZCBsb25nIHNhZGRyLAorCQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBkYWRkciwKKwkJCQkJICAgICAgIHVuc2lnbmVkIGludCBsZW4sCisJCQkJCSAgICAgICB1bnNpZ25lZCBzaG9ydCBwcm90bywKKwkJCQkJICAgICAgIHVuc2lnbmVkIGludCBzdW0pCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisiCWFkZGNjCQklMSwgJTAsICUwXG4iCisiCWFkZGNjYwkJJTIsICUwLCAlMFxuIgorIglhZGRjY2MJCSUzLCAlMCwgJTBcbiIKKyIJYWRkYwkJJTAsICUlZzAsICUwXG4iCisJOiAiPXIiIChzdW0pLCAiPXIiIChzYWRkcikKKwk6ICJyIiAoZGFkZHIpLCAiciIgKChwcm90bzw8MTYpK2xlbiksICIwIiAoc3VtKSwgIjEiIChzYWRkcikKKwk6ICJjYyIpOworCXJldHVybiBzdW07Cit9CisKKy8qCisgKiBjb21wdXRlcyB0aGUgY2hlY2tzdW0gb2YgdGhlIFRDUC9VRFAgcHNldWRvLWhlYWRlcgorICogcmV0dXJucyBhIDE2LWJpdCBjaGVja3N1bSwgYWxyZWFkeSBjb21wbGVtZW50ZWQKKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBpbnQgY3N1bV90Y3B1ZHBfbWFnaWModW5zaWduZWQgbG9uZyBzYWRkciwKKwkJCQkJCSAgIHVuc2lnbmVkIGxvbmcgZGFkZHIsCisJCQkJCQkgICB1bnNpZ25lZCBzaG9ydCBsZW4sCisJCQkJCQkgICB1bnNpZ25lZCBzaG9ydCBwcm90bywKKwkJCQkJCSAgIHVuc2lnbmVkIGludCBzdW0pIAoreworCXJldHVybiBjc3VtX2ZvbGQoY3N1bV90Y3B1ZHBfbm9mb2xkKHNhZGRyLGRhZGRyLGxlbixwcm90byxzdW0pKTsKK30KKworI2RlZmluZSBfSEFWRV9BUkNIX0lQVjZfQ1NVTQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IGludCBjc3VtX2lwdjZfbWFnaWMoc3RydWN0IGluNl9hZGRyICpzYWRkciwKKwkJCQkJCSBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAorCQkJCQkJIF9fdTMyIGxlbiwKKwkJCQkJCSB1bnNpZ25lZCBzaG9ydCBwcm90bywKKwkJCQkJCSB1bnNpZ25lZCBpbnQgc3VtKSAKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisiCWFkZGNjCQklMywgJTQsICUlZzdcbiIKKyIJYWRkY2NjCQklNSwgJSVnNywgJSVnN1xuIgorIglsZHV3CQlbJTIgKyAweDBjXSwgJSVnMlxuIgorIglsZHV3CQlbJTIgKyAweDA4XSwgJSVnM1xuIgorIglhZGRjY2MJCSUlZzIsICUlZzcsICUlZzdcbiIKKyIJbGR1dwkJWyUyICsgMHgwNF0sICUlZzJcbiIKKyIJYWRkY2NjCQklJWczLCAlJWc3LCAlJWc3XG4iCisiCWxkdXcJCVslMiArIDB4MDBdLCAlJWczXG4iCisiCWFkZGNjYwkJJSVnMiwgJSVnNywgJSVnN1xuIgorIglsZHV3CQlbJTEgKyAweDBjXSwgJSVnMlxuIgorIglhZGRjY2MJCSUlZzMsICUlZzcsICUlZzdcbiIKKyIJbGR1dwkJWyUxICsgMHgwOF0sICUlZzNcbiIKKyIJYWRkY2NjCQklJWcyLCAlJWc3LCAlJWc3XG4iCisiCWxkdXcJCVslMSArIDB4MDRdLCAlJWcyXG4iCisiCWFkZGNjYwkJJSVnMywgJSVnNywgJSVnN1xuIgorIglsZHV3CQlbJTEgKyAweDAwXSwgJSVnM1xuIgorIglhZGRjY2MJCSUlZzIsICUlZzcsICUlZzdcbiIKKyIJYWRkY2NjCQklJWczLCAlJWc3LCAlMFxuIgorIglhZGRjCQkwLCAlMCwgJTBcbiIKKwk6ICI9JnIiIChzdW0pCisJOiAiciIgKHNhZGRyKSwgInIiIChkYWRkciksICJyIihodG9ubChsZW4pKSwKKwkgICJyIihodG9ubChwcm90bykpLCAiciIoc3VtKQorCTogImcyIiwgImczIiwgImc3IiwgImNjIik7CisKKwlyZXR1cm4gY3N1bV9mb2xkKHN1bSk7Cit9CisKKy8qIHRoaXMgcm91dGluZSBpcyB1c2VkIGZvciBtaXNjZWxsYW5lb3VzIElQLWxpa2UgY2hlY2tzdW1zLCBtYWlubHkgaW4gaWNtcC5jICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IGlwX2NvbXB1dGVfY3N1bSh1bnNpZ25lZCBjaGFyICogYnVmZiwgaW50IGxlbikKK3sKKwlyZXR1cm4gY3N1bV9mb2xkKGNzdW1fcGFydGlhbChidWZmLCBsZW4sIDApKTsKK30KKworI2VuZGlmIC8qICEoX19TUEFSQzY0X0NIRUNLU1VNX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2NobWN0cmwuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvY2htY3RybC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzMDQ3ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2NobWN0cmwuaApAQCAtMCwwICsxLDE4NCBAQAorLyogJElkOiBjaG1jdHJsLmgsdiAxLjEgMjAwMS8wMy8yOSAxMTo0MzoyOCBkYXZlbSBFeHAgJCAqLworI2lmbmRlZiBfU1BBUkM2NF9DSE1DVFJMX0gKKyNkZWZpbmUgX1NQQVJDNjRfQ0hNQ1RSTF9ICisKKy8qIENoZWV0YWggbWVtb3J5IGNvbnRyb2xsZXIgcHJvZ3JhbW1hYmxlIHJlZ2lzdGVycy4gKi8KKyNkZWZpbmUgQ0hNQ1RSTF9UQ1RSTDEJCTB4MDAgLyogTWVtb3J5IFRpbWluZyBDb250cm9sIEkJCSovCisjZGVmaW5lIENITUNUUkxfVENUUkwyCQkweDA4IC8qIE1lbW9yeSBUaW1pbmcgQ29udHJvbCBJSQkqLworI2RlZmluZSBDSE1DVFJMX1RDVFJMMwkJMHgzOCAvKiBNZW1vcnkgVGltaW5nIENvbnRyb2wgSUlJCSovCisjZGVmaW5lIENITUNUUkxfVENUUkw0CQkweDQwIC8qIE1lbW9yeSBUaW1pbmcgQ29udHJvbCBJVgkqLworI2RlZmluZSBDSE1DVFJMX0RFQ09ERTEJCTB4MTAgLyogTWVtb3J5IEFkZHJlc3MgRGVjb2RlIEkJCSovCisjZGVmaW5lIENITUNUUkxfREVDT0RFMgkJMHgxOCAvKiBNZW1vcnkgQWRkcmVzcyBEZWNvZGUgSUkJKi8KKyNkZWZpbmUgQ0hNQ1RSTF9ERUNPREUzCQkweDIwIC8qIE1lbW9yeSBBZGRyZXNzIERlY29kZSBJSUkJKi8KKyNkZWZpbmUgQ0hNQ1RSTF9ERUNPREU0CQkweDI4IC8qIE1lbW9yeSBBZGRyZXNzIERlY29kZSBJVgkqLworI2RlZmluZSBDSE1DVFJMX01BQ1RSTAkJMHgzMCAvKiBNZW1vcnkgQWRkcmVzcyBDb250cm9sCQkqLworCisvKiBNZW1vcnkgVGltaW5nIENvbnRyb2wgSSAqLworI2RlZmluZSBUQ1RSTDFfU0RSQU1DVExfRExZCTB4ZjAwMDAwMDAwMDAwMDAwMFVMCisjZGVmaW5lIFRDVFJMMV9TRFJBTUNUTF9ETFlfU0hJRlQgICAgIDYwCisjZGVmaW5lIFRDVFJMMV9TRFJBTUNMS19ETFkJMHgwZTAwMDAwMDAwMDAwMDAwVUwKKyNkZWZpbmUgVENUUkwxX1NEUkFNQ0xLX0RMWV9TSElGVCAgICAgNTcKKyNkZWZpbmUgVENUUkwxX1IJCTB4MDEwMDAwMDAwMDAwMDAwMFVMCisjZGVmaW5lIFRDVFJMMV9SX1NISUZUIAkJICAgICAgNTYKKyNkZWZpbmUgVENUUkwxX0FVVE9SRlJfQ1lDTEUJMHgwMGZlMDAwMDAwMDAwMDAwVUwKKyNkZWZpbmUgVENUUkwxX0FVVE9SRlJfQ1lDTEVfU0hJRlQgICAgNDkKKyNkZWZpbmUgVENUUkwxX1JEX1dBSVQJCTB4MDAwMWYwMDAwMDAwMDAwMFVMCisjZGVmaW5lIFRDVFJMMV9SRF9XQUlUX1NISUZUCSAgICAgIDQ0CisjZGVmaW5lIFRDVFJMMV9QQ19DWUNMRQkJMHgwMDAwMGZjMDAwMDAwMDAwVUwKKyNkZWZpbmUgVENUUkwxX1BDX0NZQ0xFX1NISUZUCSAgICAgIDM4CisjZGVmaW5lIFRDVFJMMV9XUl9NT1JFX1JBU19QVwkweDAwMDAwMDNmMDAwMDAwMDBVTAorI2RlZmluZSBUQ1RSTDFfV1JfTU9SRV9SQVNfUFdfU0hJRlQgICAzMgorI2RlZmluZSBUQ1RSTDFfUkRfTU9SRV9SQVdfUFcJMHgwMDAwMDAwMGZjMDAwMDAwVUwKKyNkZWZpbmUgVENUUkwxX1JEX01PUkVfUkFTX1BXX1NISUZUICAgMjYKKyNkZWZpbmUgVENUUkwxX0FDVF9XUl9ETFkJMHgwMDAwMDAwMDAzZjAwMDAwVUwKKyNkZWZpbmUgVENUUkwxX0FDVF9XUl9ETFlfU0hJRlQJICAgICAgMjAKKyNkZWZpbmUgVENUUkwxX0FDVF9SRF9ETFkJMHgwMDAwMDAwMDAwMGZjMDAwVUwKKyNkZWZpbmUgVENUUkwxX0FDVF9SRF9ETFlfU0hJRlQJICAgICAgMTQKKyNkZWZpbmUgVENUUkwxX0JBTktfUFJFU0VOVAkweDAwMDAwMDAwMDAwMDMwMDBVTAorI2RlZmluZSBUQ1RSTDFfQkFOS19QUkVTRU5UX1NISUZUICAgICAxMgorI2RlZmluZSBUQ1RSTDFfUkZSX0lOVAkJMHgwMDAwMDAwMDAwMDAwZmY4VUwKKyNkZWZpbmUgVENUUkwxX1JGUl9JTlRfU0hJRlQJICAgICAgMworI2RlZmluZSBUQ1RSTDFfU0VUX01PREVfUkVHCTB4MDAwMDAwMDAwMDAwMDAwNFVMCisjZGVmaW5lIFRDVFJMMV9TRVRfTU9ERV9SRUdfU0hJRlQgICAgIDIKKyNkZWZpbmUgVENUUkwxX1JGUl9FTkFCTEUJMHgwMDAwMDAwMDAwMDAwMDAyVUwKKyNkZWZpbmUgVENUUkwxX1JGUl9FTkFCTEVfU0hJRlQJICAgICAgMQorI2RlZmluZSBUQ1RSTDFfUFJFQ0hHX0FMTAkweDAwMDAwMDAwMDAwMDAwMDFVTAorI2RlZmluZSBUQ1RSTDFfUFJFQ0hHX0FMTF9TSElGVAkgICAgICAwCisKKy8qIE1lbW9yeSBUaW1pbmcgQ29udHJvbCBJSSAqLworI2RlZmluZSBUQ1RSTDJfV1JfTVNFTF9ETFkJMHhmYzAwMDAwMDAwMDAwMDAwVUwKKyNkZWZpbmUgVENUUkwyX1dSX01TRUxfRExZX1NISUZUICAgICAgNTgKKyNkZWZpbmUgVENUUkwyX1JEX01TRUxfRExZCTB4MDNmMDAwMDAwMDAwMDAwMFVMCisjZGVmaW5lIFRDVFJMMl9SRF9NU0VMX0RMWV9TSElGVCAgICAgIDUyCisjZGVmaW5lIFRDVFJMMl9XUkRBVEFfVEhMRAkweDAwMGMwMDAwMDAwMDAwMDBVTAorI2RlZmluZSBUQ1RSTDJfV1JEQVRBX1RITERfU0hJRlQgICAgICA1MAorI2RlZmluZSBUQ1RSTDJfUkRXUl9SRF9USV9ETFkJMHgwMDAzZjAwMDAwMDAwMDAwVUwKKyNkZWZpbmUgVENUUkwyX1JEV1JfUkRfVElfRExZX1NISUZUICAgNDQKKyNkZWZpbmUgVENUUkwyX0FVVE9QUkVDSEdfRU5CTAkweDAwMDAwODAwMDAwMDAwMDBVTAorI2RlZmluZSBUQ1RSTDJfQVVUT1BSRUNIR19FTkJMX1NISUZUICA0MworI2RlZmluZSBUQ1RSTDJfUkRXUl9QSV9NT1JFX0RMWQkweDAwMDAwN2MwMDAwMDAwMDBVTAorI2RlZmluZSBUQ1RSTDJfUkRXUl9QSV9NT1JFX0RMWV9TSElGVCAzOAorI2RlZmluZSBUQ1RSTDJfUkRXUl8xX0RMWQkweDAwMDAwMDNmMDAwMDAwMDBVTAorI2RlZmluZSBUQ1RSTDJfUkRXUl8xX0RMWV9TSElGVCAgICAgICAzMgorI2RlZmluZSBUQ1RSTDJfV1JXUl9QSV9NT1JFX0RMWQkweDAwMDAwMDAwZjgwMDAwMDBVTAorI2RlZmluZSBUQ1RSTDJfV1JXUl9QSV9NT1JFX0RMWV9TSElGVCAyNworI2RlZmluZSBUQ1RSTDJfV1JXUl8xX0RMWQkweDAwMDAwMDAwMDdlMDAwMDBVTAorI2RlZmluZSBUQ1RSTDJfV1JXUl8xX0RMWV9TSElGVCAgICAgICAyMQorI2RlZmluZSBUQ1RSTDJfUkRXUl9SRF9QSV9NT1JFX0RMWSAweDAwMDAwMDAwMDAxZjAwMDBVTAorI2RlZmluZSBUQ1RSTDJfUkRXUl9SRF9QSV9NT1JFX0RMWV9TSElGVCAxNgorI2RlZmluZSBUQ1RSTDJfUgkJMHgwMDAwMDAwMDAwMDA4MDAwVUwKKyNkZWZpbmUgVENUUkwyX1JfU0hJRlQJCSAgICAgIDE1CisjZGVmaW5lIFRDVFJMMl9TRFJBTV9NT0RFX1JFR19EQVRBIDB4MDAwMDAwMDAwMDAwN2ZmZlVMCisjZGVmaW5lIFRDVFJMMl9TRFJBTV9NT0RFX1JFR19EQVRBX1NISUZUIDAKKworLyogTWVtb3J5IFRpbWluZyBDb250cm9sIElJSSAqLworI2RlZmluZSBUQ1RSTDNfU0RSQU1fQ1RMX0RMWQkweGYwMDAwMDAwMDAwMDAwMDBVTAorI2RlZmluZSBUQ1RSTDNfU0RSQU1fQ1RMX0RMWV9TSElGVCAgICA2MAorI2RlZmluZSBUQ1RSTDNfU0RSQU1fQ0xLX0RMWQkweDBlMDAwMDAwMDAwMDAwMDBVTAorI2RlZmluZSBUQ1RSTDNfU0RSQU1fQ0xLX0RMWV9TSElGVCAgICA1NworI2RlZmluZSBUQ1RSTDNfUgkJMHgwMTAwMDAwMDAwMDAwMDAwVUwKKyNkZWZpbmUgVENUUkwzX1JfU0hJRlQJCSAgICAgIDU2CisjZGVmaW5lIFRDVFJMM19BVVRPX1JGUl9DWUNMRQkweDAwZmUwMDAwMDAwMDAwMDBVTAorI2RlZmluZSBUQ1RSTDNfQVVUT19SRlJfQ1lDTEVfU0hJRlQgICA0OQorI2RlZmluZSBUQ1RSTDNfUkRfV0FJVAkJMHgwMDAxZjAwMDAwMDAwMDAwVUwKKyNkZWZpbmUgVENUUkwzX1JEX1dBSVRfU0hJRlQJICAgICAgNDQKKyNkZWZpbmUgVENUUkwzX1BDX0NZQ0xFCQkweDAwMDAwZmMwMDAwMDAwMDBVTAorI2RlZmluZSBUQ1RSTDNfUENfQ1lDTEVfU0hJRlQJICAgICAgMzgKKyNkZWZpbmUgVENUUkwzX1dSX01PUkVfUkFXX1BXCTB4MDAwMDAwM2YwMDAwMDAwMFVMCisjZGVmaW5lIFRDVFJMM19XUl9NT1JFX1JBV19QV19TSElGVCAgIDMyCisjZGVmaW5lIFRDVFJMM19SRF9NT1JFX1JBV19QVwkweDAwMDAwMDAwZmMwMDAwMDBVTAorI2RlZmluZSBUQ1RSTDNfUkRfTU9SRV9SQVdfUFdfU0hJRlQgICAyNgorI2RlZmluZSBUQ1RSTDNfQUNUX1dSX0RMWQkweDAwMDAwMDAwMDNmMDAwMDBVTAorI2RlZmluZSBUQ1RSTDNfQUNUX1dSX0RMWV9TSElGVCAgICAgICAyMAorI2RlZmluZSBUQ1RSTDNfQUNUX1JEX0RMWQkweDAwMDAwMDAwMDAwZmMwMDBVTAorI2RlZmluZSBUQ1RSTDNfQUNUX1JEX0RMWV9TSElGVCAgICAgICAxNAorI2RlZmluZSBUQ1RSTDNfQkFOS19QUkVTRU5UCTB4MDAwMDAwMDAwMDAwMzAwMFVMCisjZGVmaW5lIFRDVFJMM19CQU5LX1BSRVNFTlRfU0hJRlQgICAgIDEyCisjZGVmaW5lIFRDVFJMM19SRlJfSU5UCQkweDAwMDAwMDAwMDAwMDBmZjhVTAorI2RlZmluZSBUQ1RSTDNfUkZSX0lOVF9TSElGVAkgICAgICAzCisjZGVmaW5lIFRDVFJMM19TRVRfTU9ERV9SRUcJMHgwMDAwMDAwMDAwMDAwMDA0VUwKKyNkZWZpbmUgVENUUkwzX1NFVF9NT0RFX1JFR19TSElGVCAgICAgMgorI2RlZmluZSBUQ1RSTDNfUkZSX0VOQUJMRQkweDAwMDAwMDAwMDAwMDAwMDJVTAorI2RlZmluZSBUQ1RSTDNfUkZSX0VOQUJMRV9TSElGVCAgICAgICAxCisjZGVmaW5lIFRDVFJMM19QUkVDSEdfQUxMCTB4MDAwMDAwMDAwMDAwMDAwMVVMCisjZGVmaW5lIFRDVFJMM19QUkVDSEdfQUxMX1NISUZUCSAgICAgIDAKKworLyogTWVtb3J5IFRpbWluZyBDb250cm9sIElWICovCisjZGVmaW5lIFRDVFJMNF9XUl9NU0VMX0RMWQkweGZjMDAwMDAwMDAwMDAwMDBVTAorI2RlZmluZSBUQ1RSTDRfV1JfTVNFTF9ETFlfU0hJRlQgICAgICA1OAorI2RlZmluZSBUQ1RSTDRfUkRfTVNFTF9ETFkJMHgwM2YwMDAwMDAwMDAwMDAwVUwKKyNkZWZpbmUgVENUUkw0X1JEX01TRUxfRExZX1NISUZUICAgICAgNTIKKyNkZWZpbmUgVENUUkw0X1dSREFUQV9USExECTB4MDAwYzAwMDAwMDAwMDAwMFVMCisjZGVmaW5lIFRDVFJMNF9XUkRBVEFfVEhMRF9TSElGVCAgICAgIDUwCisjZGVmaW5lIFRDVFJMNF9SRFdSX1JEX1JJX0RMWQkweDAwMDNmMDAwMDAwMDAwMDBVTAorI2RlZmluZSBUQ1RSTDRfUkRXUl9SRF9SSV9ETFlfU0hJRlQgICA0NAorI2RlZmluZSBUQ1RSTDRfQVVUT19QUkVDSEdfRU5CTAkweDAwMDAwODAwMDAwMDAwMDBVTAorI2RlZmluZSBUQ1RSTDRfQVVUT19QUkVDSEdfRU5CTF9TSElGVCA0MworI2RlZmluZSBUQ1RSTDRfUkRfV1JfUElfTU9SRV9ETFkgMHgwMDAwMDdjMDAwMDAwMDAwVUwKKyNkZWZpbmUgVENUUkw0X1JEX1dSX1BJX01PUkVfRExZX1NISUZUIDM4CisjZGVmaW5lIFRDVFJMNF9SRF9XUl9USV9ETFkJMHgwMDAwMDAzZjAwMDAwMDAwVUwKKyNkZWZpbmUgVENUUkw0X1JEX1dSX1RJX0RMWV9TSElGVCAgICAgMzIKKyNkZWZpbmUgVENUUkw0X1dSX1dSX1BJX01PUkVfRExZIDB4MDAwMDAwMDBmODAwMDAwMFVMCisjZGVmaW5lIFRDVFJMNF9XUl9XUl9QSV9NT1JFX0RMWV9TSElGVCAyNworI2RlZmluZSBUQ1RSTDRfV1JfV1JfVElfRExZCTB4MDAwMDAwMDAwN2UwMDAwMFVMCisjZGVmaW5lIFRDVFJMNF9XUl9XUl9USV9ETFlfU0hJRlQgICAgIDIxCisjZGVmaW5lIFRDVFJMNF9SRFdSX1JEX1BJX01PUkVfRExZIDB4MDAwMDAwMDAwMDFmMDAwVUwwCisjZGVmaW5lIFRDVFJMNF9SRFdSX1JEX1BJX01PUkVfRExZX1NISUZUIDE2CisjZGVmaW5lIFRDVFJMNF9SCQkweDAwMDAwMDAwMDAwMDgwMDBVTAorI2RlZmluZSBUQ1RSTDRfUl9TSElGVAkJICAgICAgMTUKKyNkZWZpbmUgVENUUkw0X1NEUkFNX01PREVfUkVHX0RBVEEgMHgwMDAwMDAwMDAwMDA3ZmZmVUwKKyNkZWZpbmUgVENUUkw0X1NEUkFNX01PREVfUkVHX0RBVEFfU0hJRlQgMAorCisvKiBBbGwgNCBtZW1vcnkgYWRkcmVzcyBkZWNvZGluZyByZWdpc3RlcnMgaGF2ZSB0aGUKKyAqIHNhbWUgbGF5b3V0LgorICovCisjZGVmaW5lIE1FTV9ERUNPREVfVkFMSUQJMHg4MDAwMDAwMDAwMDAwMDAwVUwgLyogVmFsaWQgKi8KKyNkZWZpbmUgTUVNX0RFQ09ERV9WQUxJRF9TSElGVAkgICAgICA2MworI2RlZmluZSBNRU1fREVDT0RFX1VLCQkweDAwMWZmZTAwMDAwMDAwMDBVTCAvKiBVcHBlciBtYXNrICovCisjZGVmaW5lIE1FTV9ERUNPREVfVUtfU0hJRlQJICAgICAgNDEKKyNkZWZpbmUgTUVNX0RFQ09ERV9VTQkJMHgwMDAwMDAxZmZmZjAwMDAwVUwgLyogVXBwZXIgbWF0Y2ggKi8KKyNkZWZpbmUgTUVNX0RFQ09ERV9VTV9TSElGVAkgICAgICAyMAorI2RlZmluZSBNRU1fREVDT0RFX0xLCQkweDAwMDAwMDAwMDAwM2MwMDBVTCAvKiBMb3dlciBtYXNrICovCisjZGVmaW5lIE1FTV9ERUNPREVfTEtfU0hJRlQJICAgICAgMTQKKyNkZWZpbmUgTUVNX0RFQ09ERV9MTQkJMHgwMDAwMDAwMDAwMDAwZjAwVUwgLyogTG93ZXIgbWF0Y2ggKi8KKyNkZWZpbmUgTUVNX0RFQ09ERV9MTV9TSElGVCAgICAgICAgICAgOAorCisjZGVmaW5lIFBBX1VQUEVSX0JJVFMJCTB4MDAwMDA3ZmZmYzAwMDAwMFVMCisjZGVmaW5lIFBBX1VQUEVSX0JJVFNfU0hJRlQJMjYKKyNkZWZpbmUgUEFfTE9XRVJfQklUUwkJMHgwMDAwMDAwMDAwMDAwM2MwVUwKKyNkZWZpbmUgUEFfTE9XRVJfQklUU19TSElGVAk2CisKKyNkZWZpbmUgTUFDVFJMX1IwCQkgICAgICAgICAweDgwMDAwMDAwMDAwMDAwMDBVTAorI2RlZmluZSBNQUNUUkxfUjBfU0hJRlQJCSAgICAgICAgIDYzCisjZGVmaW5lIE1BQ1RSTF9BRERSX0xFX1BXICAgICAgICAgICAgICAgIDB4NzAwMDAwMDAwMDAwMDAwMFVMCisjZGVmaW5lIE1BQ1RSTF9BRERSX0xFX1BXX1NISUZUCQkgNjAKKyNkZWZpbmUgTUFDVFJMX0NNRF9QVyAgICAgICAgICAgICAgICAgICAgMHgwZjAwMDAwMDAwMDAwMDAwVUwKKyNkZWZpbmUgTUFDVFJMX0NNRF9QV19TSElGVAkJIDU2CisjZGVmaW5lIE1BQ1RSTF9IQUxGX01PREVfV1JfTVNFTF9ETFkgICAgIDB4MDBmYzAwMDAwMDAwMDAwMFVMCisjZGVmaW5lIE1BQ1RSTF9IQUxGX01PREVfV1JfTVNFTF9ETFlfU0hJRlQgNTAKKyNkZWZpbmUgTUFDVFJMX0hBTEZfTU9ERV9SRF9NU0VMX0RMWSAgICAgMHgwMDAzZjAwMDAwMDAwMDAwVUwKKyNkZWZpbmUgTUFDVFJMX0hBTEZfTU9ERV9SRF9NU0VMX0RMWV9TSElGVCA0NAorI2RlZmluZSBNQUNUUkxfSEFMRl9NT0RFX1NEUkFNX0NUTF9ETFkgICAweDAwMDAwZjAwMDAwMDAwMDBVTAorI2RlZmluZSBNQUNUUkxfSEFMRl9NT0RFX1NEUkFNX0NUTF9ETFlfU0hJRlQgNDAKKyNkZWZpbmUgTUFDVFJMX0hBTEZfTU9ERV9TRFJBTV9DTEtfRExZICAgMHgwMDAwMDBlMDAwMDAwMDAwVUwKKyNkZWZpbmUgTUFDVFJMX0hBTEZfTU9ERV9TRFJBTV9DTEtfRExZX1NISUZUIDM3CisjZGVmaW5lIE1BQ1RSTF9SMSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAwMDAwMDAwMFVMCisjZGVmaW5lIE1BQ1RSTF9SMV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAzNgorI2RlZmluZSBNQUNUUkxfQkFOS1NFTF9OX1JPV0FERFJfU0laRV9CMyAweDAwMDAwMDBmMDAwMDAwMDBVTAorI2RlZmluZSBNQUNUUkxfQkFOS1NFTF9OX1JPV0FERFJfU0laRV9CM19TSElGVCAzMgorI2RlZmluZSBNQUNUUkxfRU5DX0lOVExWX0IzICAgICAgICAgICAgICAweDAwMDAwMDAwZjgwMDAwMDBVTAorI2RlZmluZSBNQUNUUkxfRU5DX0lOVExWX0IzX1NISUZUICAgICAgICAgICAgICAyNworI2RlZmluZSBNQUNUUkxfQkFOS1NFTF9OX1JPV0FERFJfU0laRV9CMiAweDAwMDAwMDAwMDc4MDAwMDBVTAorI2RlZmluZSBNQUNUUkxfQkFOS1NFTF9OX1JPV0FERFJfU0laRV9CMl9TSElGVCAyMworI2RlZmluZSBNQUNUUkxfRU5DX0lOVExWX0IyICAgICAgICAgICAgICAweDAwMDAwMDAwMDA3YzAwMDBVTAorI2RlZmluZSBNQUNUUkxfRU5DX0lOVExWX0IyX1NISUZUICAgICAgICAgICAgICAxOAorI2RlZmluZSBNQUNUUkxfQkFOS1NFTF9OX1JPV0FERFJfU0laRV9CMSAweDAwMDAwMDAwMDAwM2MwMDBVTAorI2RlZmluZSBNQUNUUkxfQkFOS1NFTF9OX1JPV0FERFJfU0laRV9CMV9TSElGVCAxNAorI2RlZmluZSBNQUNUUkxfRU5DX0lOVExWX0IxICAgICAgICAgICAgICAweDAwMDAwMDAwMDAwMDNlMDBVTAorI2RlZmluZSBNQUNUUkxfRU5DX0lOVExWX0IxX1NISUZUICAgICAgICAgICAgICAgOQorI2RlZmluZSBNQUNUUkxfQkFOS1NFTF9OX1JPV0FERFJfU0laRV9CMCAweDAwMDAwMDAwMDAwMDAxZTBVTAorI2RlZmluZSBNQUNUUkxfQkFOS1NFTF9OX1JPV0FERFJfU0laRV9CMF9TSElGVCAgNQorI2RlZmluZSBNQUNUUkxfRU5DX0lOVExWX0IwICAgICAgICAgICAgICAweDAwMDAwMDAwMDAwMDAwMWZVTAorI2RlZmluZSBNQUNUUkxfRU5DX0lOVExWX0IwX1NISUZUICAgICAgICAgICAgICAgMAorCisjZW5kaWYgLyogX1NQQVJDNjRfQ0hNQ1RSTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2NtdC5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9jbXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzBkYjU5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9jbXQuaApAQCAtMCwwICsxLDU5IEBACisjaWZuZGVmIF9TUEFSQzY0X0NNVF9ICisjZGVmaW5lIF9TUEFSQzY0X0NNVF9ICisKKy8qIGNtdC5oOiBDaGlwIE11bHRpLVRocmVhZGluZyByZWdpc3RlciBkZWZpbml0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQHJlZGhhdC5jb20pCisgKi8KKworLyogQVNJX0NPUkVfSUQgLSBwcml2YXRlICovCisjZGVmaW5lIExQX0lECQkweDAwMDAwMDAwMDAwMDAwMTBVTAorI2RlZmluZSAgTFBfSURfTUFYCTB4MDAwMDAwMDAwMDNmMDAwMFVMCisjZGVmaW5lICBMUF9JRF9JRAkweDAwMDAwMDAwMDAwMDAwM2ZVTAorCisvKiBBU0lfSU5UUl9JRCAtIHByaXZhdGUgKi8KKyNkZWZpbmUgTFBfSU5UUl9JRAkweDAwMDAwMDAwMDAwMDAwMDBVTAorI2RlZmluZSAgTFBfSU5UUl9JRF9JRAkweDAwMDAwMDAwMDAwMDAzZmZVTAorCisvKiBBU0lfQ0VTUl9JRCAtIHByaXZhdGUgKi8KKyNkZWZpbmUgQ0VTUl9JRAkJMHgwMDAwMDAwMDAwMDAwMDQwVUwKKyNkZWZpbmUgIENFU1JfSURfSUQJMHgwMDAwMDAwMDAwMDAwMGZmVUwKKworLyogQVNJX0NPUkVfQVZBSUxBQkxFIC0gc2hhcmVkICovCisjZGVmaW5lIExQX0FWQUlMCTB4MDAwMDAwMDAwMDAwMDAwMFVMCisjZGVmaW5lICBMUF9BVkFJTF8xCTB4MDAwMDAwMDAwMDAwMDAwMlVMCisjZGVmaW5lICBMUF9BVkFJTF8wCTB4MDAwMDAwMDAwMDAwMDAwMVVMCisKKy8qIEFTSV9DT1JFX0VOQUJMRV9TVEFUVVMgLSBzaGFyZWQgKi8KKyNkZWZpbmUgTFBfRU5BQl9TVEFUCTB4MDAwMDAwMDAwMDAwMDAxMFVMCisjZGVmaW5lICBMUF9FTkFCX1NUQVRfMQkweDAwMDAwMDAwMDAwMDAwMDJVTAorI2RlZmluZSAgTFBfRU5BQl9TVEFUXzAJMHgwMDAwMDAwMDAwMDAwMDAxVUwKKworLyogQVNJX0NPUkVfRU5BQkxFIC0gc2hhcmVkICovCisjZGVmaW5lIExQX0VOQUIJCTB4MDAwMDAwMDAwMDAwMDAyMFVMCisjZGVmaW5lICBMUF9FTkFCXzEJMHgwMDAwMDAwMDAwMDAwMDAyVUwKKyNkZWZpbmUgIExQX0VOQUJfMAkweDAwMDAwMDAwMDAwMDAwMDFVTAorCisvKiBBU0lfQ09SRV9SVU5OSU5HIC0gc2hhcmVkICovCisjZGVmaW5lIExQX1JVTk5JTkdfUlcJMHgwMDAwMDAwMDAwMDAwMDUwVUwKKyNkZWZpbmUgTFBfUlVOTklOR19XMVMJMHgwMDAwMDAwMDAwMDAwMDYwVUwKKyNkZWZpbmUgTFBfUlVOTklOR19XMUMJMHgwMDAwMDAwMDAwMDAwMDY4VUwKKyNkZWZpbmUgIExQX1JVTk5JTkdfMQkweDAwMDAwMDAwMDAwMDAwMDJVTAorI2RlZmluZSAgTFBfUlVOTklOR18wCTB4MDAwMDAwMDAwMDAwMDAwMVVMCisKKy8qIEFTSV9DT1JFX1JVTk5JTkdfU1RBVCAtIHNoYXJlZCAqLworI2RlZmluZSBMUF9SVU5fU1RBVAkweDAwMDAwMDAwMDAwMDAwNThVTAorI2RlZmluZSAgTFBfUlVOX1NUQVRfMQkweDAwMDAwMDAwMDAwMDAwMDJVTAorI2RlZmluZSAgTFBfUlVOX1NUQVRfMAkweDAwMDAwMDAwMDAwMDAwMDFVTAorCisvKiBBU0lfWElSX1NURUVSSU5HIC0gc2hhcmVkICovCisjZGVmaW5lIExQX1hJUl9TVEVFUgkweDAwMDAwMDAwMDAwMDAwMzBVTAorI2RlZmluZSAgTFBfWElSX1NURUVSXzEJMHgwMDAwMDAwMDAwMDAwMDAyVUwKKyNkZWZpbmUgIExQX1hJUl9TVEVFUl8wCTB4MDAwMDAwMDAwMDAwMDAwMVVMCisKKy8qIEFTSV9DTVRfRVJST1JfU1RFRVJJTkcgLSBzaGFyZWQgKi8KKyNkZWZpbmUgQ01UX0VSX1NURUVSCTB4MDAwMDAwMDAwMDAwMDA0MFVMCisjZGVmaW5lICBDTVRfRVJfU1RFRVJfMQkweDAwMDAwMDAwMDAwMDAwMDJVTAorI2RlZmluZSAgQ01UX0VSX1NURUVSXzAJMHgwMDAwMDAwMDAwMDAwMDAxVUwKKworI2VuZGlmIC8qIF9TUEFSQzY0X0NNVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2NvbXBhdC5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9jb21wYXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTUwMjc5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9jb21wYXQuaApAQCAtMCwwICsxLDIwMSBAQAorI2lmbmRlZiBfQVNNX1NQQVJDNjRfQ09NUEFUX0gKKyNkZWZpbmUgX0FTTV9TUEFSQzY0X0NPTVBBVF9ICisvKgorICogQXJjaGl0ZWN0dXJlIHNwZWNpZmljIGNvbXBhdGliaWxpdHkgdHlwZXMKKyAqLworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNkZWZpbmUgQ09NUEFUX1VTRVJfSFoJMTAwCisKK3R5cGVkZWYgdTMyCQljb21wYXRfc2l6ZV90OwordHlwZWRlZiBzMzIJCWNvbXBhdF9zc2l6ZV90OwordHlwZWRlZiBzMzIJCWNvbXBhdF90aW1lX3Q7Cit0eXBlZGVmIHMzMgkJY29tcGF0X2Nsb2NrX3Q7Cit0eXBlZGVmIHMzMgkJY29tcGF0X3BpZF90OwordHlwZWRlZiB1MTYJCWNvbXBhdF91aWRfdDsKK3R5cGVkZWYgdTE2CQljb21wYXRfZ2lkX3Q7Cit0eXBlZGVmIHUxNgkJY29tcGF0X21vZGVfdDsKK3R5cGVkZWYgdTMyCQljb21wYXRfaW5vX3Q7Cit0eXBlZGVmIHUxNgkJY29tcGF0X2Rldl90OwordHlwZWRlZiBzMzIJCWNvbXBhdF9vZmZfdDsKK3R5cGVkZWYgczY0CQljb21wYXRfbG9mZl90OwordHlwZWRlZiBzMTYJCWNvbXBhdF9ubGlua190OwordHlwZWRlZiB1MTYJCWNvbXBhdF9pcGNfcGlkX3Q7Cit0eXBlZGVmIHMzMgkJY29tcGF0X2RhZGRyX3Q7Cit0eXBlZGVmIHUzMgkJY29tcGF0X2NhZGRyX3Q7Cit0eXBlZGVmIF9fa2VybmVsX2ZzaWRfdAljb21wYXRfZnNpZF90OwordHlwZWRlZiBzMzIJCWNvbXBhdF9rZXlfdDsKKwordHlwZWRlZiBzMzIJCWNvbXBhdF9pbnRfdDsKK3R5cGVkZWYgczMyCQljb21wYXRfbG9uZ190OwordHlwZWRlZiB1MzIJCWNvbXBhdF91aW50X3Q7Cit0eXBlZGVmIHUzMgkJY29tcGF0X3Vsb25nX3Q7CisKK3N0cnVjdCBjb21wYXRfdGltZXNwZWMgeworCWNvbXBhdF90aW1lX3QJdHZfc2VjOworCXMzMgkJdHZfbnNlYzsKK307CisKK3N0cnVjdCBjb21wYXRfdGltZXZhbCB7CisJY29tcGF0X3RpbWVfdAl0dl9zZWM7CisJczMyCQl0dl91c2VjOworfTsKKworc3RydWN0IGNvbXBhdF9zdGF0IHsKKwljb21wYXRfZGV2X3QJc3RfZGV2OworCWNvbXBhdF9pbm9fdAlzdF9pbm87CisJY29tcGF0X21vZGVfdAlzdF9tb2RlOworCWNvbXBhdF9ubGlua190CXN0X25saW5rOworCWNvbXBhdF91aWRfdAlzdF91aWQ7CisJY29tcGF0X2dpZF90CXN0X2dpZDsKKwljb21wYXRfZGV2X3QJc3RfcmRldjsKKwljb21wYXRfb2ZmX3QJc3Rfc2l6ZTsKKwljb21wYXRfdGltZV90CXN0X2F0aW1lOworCXUzMgkJX191bnVzZWQxOworCWNvbXBhdF90aW1lX3QJc3RfbXRpbWU7CisJdTMyCQlfX3VudXNlZDI7CisJY29tcGF0X3RpbWVfdAlzdF9jdGltZTsKKwl1MzIJCV9fdW51c2VkMzsKKwljb21wYXRfb2ZmX3QJc3RfYmxrc2l6ZTsKKwljb21wYXRfb2ZmX3QJc3RfYmxvY2tzOworCXUzMgkJX191bnVzZWQ0WzJdOworfTsKKworc3RydWN0IGNvbXBhdF9mbG9jayB7CisJc2hvcnQJCWxfdHlwZTsKKwlzaG9ydAkJbF93aGVuY2U7CisJY29tcGF0X29mZl90CWxfc3RhcnQ7CisJY29tcGF0X29mZl90CWxfbGVuOworCWNvbXBhdF9waWRfdAlsX3BpZDsKKwlzaG9ydAkJX191bnVzZWQ7Cit9OworCisjZGVmaW5lIEZfR0VUTEs2NAkxMgorI2RlZmluZSBGX1NFVExLNjQJMTMKKyNkZWZpbmUgRl9TRVRMS1c2NAkxNAorCitzdHJ1Y3QgY29tcGF0X2Zsb2NrNjQgeworCXNob3J0CQlsX3R5cGU7CisJc2hvcnQJCWxfd2hlbmNlOworCWNvbXBhdF9sb2ZmX3QJbF9zdGFydDsKKwljb21wYXRfbG9mZl90CWxfbGVuOworCWNvbXBhdF9waWRfdAlsX3BpZDsKKwlzaG9ydAkJX191bnVzZWQ7Cit9OworCitzdHJ1Y3QgY29tcGF0X3N0YXRmcyB7CisJaW50CQlmX3R5cGU7CisJaW50CQlmX2JzaXplOworCWludAkJZl9ibG9ja3M7CisJaW50CQlmX2JmcmVlOworCWludAkJZl9iYXZhaWw7CisJaW50CQlmX2ZpbGVzOworCWludAkJZl9mZnJlZTsKKwljb21wYXRfZnNpZF90CWZfZnNpZDsKKwlpbnQJCWZfbmFtZWxlbjsJLyogU3VuT1MgaWdub3JlcyB0aGlzIGZpZWxkLiAqLworCWludAkJZl9mcnNpemU7CisJaW50CQlmX3NwYXJlWzVdOworfTsKKworI2RlZmluZSBDT01QQVRfUkxJTV9JTkZJTklUWSAweDdmZmZmZmZmCisKK3R5cGVkZWYgdTMyCQljb21wYXRfb2xkX3NpZ3NldF90OworCisjZGVmaW5lIF9DT01QQVRfTlNJRwkJNjQKKyNkZWZpbmUgX0NPTVBBVF9OU0lHX0JQVwkzMgorCit0eXBlZGVmIHUzMgkJY29tcGF0X3NpZ3NldF93b3JkOworCisjZGVmaW5lIENPTVBBVF9PRkZfVF9NQVgJMHg3ZmZmZmZmZgorI2RlZmluZSBDT01QQVRfTE9GRl9UX01BWAkweDdmZmZmZmZmZmZmZmZmZmZMCisKKy8qCisgKiBBIHBvaW50ZXIgcGFzc2VkIGluIGZyb20gdXNlciBtb2RlLiBUaGlzIHNob3VsZCBub3QKKyAqIGJlIHVzZWQgZm9yIHN5c2NhbGwgcGFyYW1ldGVycywganVzdCBkZWNsYXJlIHRoZW0KKyAqIGFzIHBvaW50ZXJzIGJlY2F1c2UgdGhlIHN5c2NhbGwgZW50cnkgY29kZSB3aWxsIGhhdmUKKyAqIGFwcHJvcHJpYXRlbHkgY29tdmVydGVkIHRoZW0gYWxyZWFkeS4KKyAqLwordHlwZWRlZgl1MzIJCWNvbXBhdF91cHRyX3Q7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3VzZXIgKmNvbXBhdF9wdHIoY29tcGF0X3VwdHJfdCB1cHRyKQoreworCXJldHVybiAodm9pZCBfX3VzZXIgKikodW5zaWduZWQgbG9uZyl1cHRyOworfQorCitzdGF0aWMgaW5saW5lIGNvbXBhdF91cHRyX3QgcHRyX3RvX2NvbXBhdCh2b2lkIF9fdXNlciAqdXB0cikKK3sKKwlyZXR1cm4gKHUzMikodW5zaWduZWQgbG9uZyl1cHRyOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fdXNlciAqY29tcGF0X2FsbG9jX3VzZXJfc3BhY2UobG9uZyBsZW4pCit7CisJc3RydWN0IHB0X3JlZ3MgKnJlZ3MgPSBjdXJyZW50X3RocmVhZF9pbmZvKCktPmtyZWdzOworCXVuc2lnbmVkIGxvbmcgdXNwID0gcmVncy0+dV9yZWdzW1VSRUdfSTZdOworCisJaWYgKCEodGVzdF90aHJlYWRfZmxhZyhUSUZfMzJCSVQpKSkKKwkJdXNwICs9IFNUQUNLX0JJQVM7CisJZWxzZQorCQl1c3AgJj0gMHhmZmZmZmZmZlVMOworCisJcmV0dXJuICh2b2lkIF9fdXNlciAqKSAodXNwIC0gbGVuKTsKK30KKworc3RydWN0IGNvbXBhdF9pcGM2NF9wZXJtIHsKKwljb21wYXRfa2V5X3Qga2V5OworCV9fa2VybmVsX3VpZF90IHVpZDsKKwlfX2tlcm5lbF9naWRfdCBnaWQ7CisJX19rZXJuZWxfdWlkX3QgY3VpZDsKKwlfX2tlcm5lbF9naWRfdCBjZ2lkOworCXVuc2lnbmVkIHNob3J0IF9fcGFkMTsKKwljb21wYXRfbW9kZV90IG1vZGU7CisJdW5zaWduZWQgc2hvcnQgX19wYWQyOworCXVuc2lnbmVkIHNob3J0IHNlcTsKKwl1bnNpZ25lZCBsb25nIF9fdW51c2VkMTsJLyogeWVzIHRoZXkgcmVhbGx5IGFyZSA2NGJpdCBwYWRzICovCisJdW5zaWduZWQgbG9uZyBfX3VudXNlZDI7Cit9OworCitzdHJ1Y3QgY29tcGF0X3NlbWlkNjRfZHMgeworCXN0cnVjdCBjb21wYXRfaXBjNjRfcGVybSBzZW1fcGVybTsKKwl1bnNpZ25lZCBpbnQJX19wYWQxOworCWNvbXBhdF90aW1lX3QJc2VtX290aW1lOworCXVuc2lnbmVkIGludAlfX3BhZDI7CisJY29tcGF0X3RpbWVfdAlzZW1fY3RpbWU7CisJdTMyCQlzZW1fbnNlbXM7CisJdTMyCQlfX3VudXNlZDE7CisJdTMyCQlfX3VudXNlZDI7Cit9OworCitzdHJ1Y3QgY29tcGF0X21zcWlkNjRfZHMgeworCXN0cnVjdCBjb21wYXRfaXBjNjRfcGVybSBtc2dfcGVybTsKKwl1bnNpZ25lZCBpbnQJX19wYWQxOworCWNvbXBhdF90aW1lX3QJbXNnX3N0aW1lOworCXVuc2lnbmVkIGludAlfX3BhZDI7CisJY29tcGF0X3RpbWVfdAltc2dfcnRpbWU7CisJdW5zaWduZWQgaW50CV9fcGFkMzsKKwljb21wYXRfdGltZV90CW1zZ19jdGltZTsKKwl1bnNpZ25lZCBpbnQJbXNnX2NieXRlczsKKwl1bnNpZ25lZCBpbnQJbXNnX3FudW07CisJdW5zaWduZWQgaW50CW1zZ19xYnl0ZXM7CisJY29tcGF0X3BpZF90CW1zZ19sc3BpZDsKKwljb21wYXRfcGlkX3QJbXNnX2xycGlkOworCXVuc2lnbmVkIGludAlfX3VudXNlZDE7CisJdW5zaWduZWQgaW50CV9fdW51c2VkMjsKK307CisKK3N0cnVjdCBjb21wYXRfc2htaWQ2NF9kcyB7CisJc3RydWN0IGNvbXBhdF9pcGM2NF9wZXJtIHNobV9wZXJtOworCXVuc2lnbmVkIGludAlfX3BhZDE7CisJY29tcGF0X3RpbWVfdAlzaG1fYXRpbWU7CisJdW5zaWduZWQgaW50CV9fcGFkMjsKKwljb21wYXRfdGltZV90CXNobV9kdGltZTsKKwl1bnNpZ25lZCBpbnQJX19wYWQzOworCWNvbXBhdF90aW1lX3QJc2htX2N0aW1lOworCWNvbXBhdF9zaXplX3QJc2htX3NlZ3N6OworCWNvbXBhdF9waWRfdAlzaG1fY3BpZDsKKwljb21wYXRfcGlkX3QJc2htX2xwaWQ7CisJdW5zaWduZWQgaW50CXNobV9uYXR0Y2g7CisJdW5zaWduZWQgaW50CV9fdW51c2VkMTsKKwl1bnNpZ25lZCBpbnQJX191bnVzZWQyOworfTsKKworI2VuZGlmIC8qIF9BU01fU1BBUkM2NF9DT01QQVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9jb25zdC5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9jb25zdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhZDkwMmIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2NvbnN0LmgKQEAgLTAsMCArMSwxOSBAQAorLyogY29uc3QuaDogTWFjcm9zIGZvciBkZWFsaW5nIHdpdGggY29uc3RhbnRzLiAgKi8KKworI2lmbmRlZiBfU1BBUkM2NF9DT05TVF9ICisjZGVmaW5lIF9TUEFSQzY0X0NPTlNUX0gKKworLyogU29tZSBjb25zdGFudCBtYWNyb3MgYXJlIHVzZWQgaW4gYm90aCBhc3NlbWJsZXIgYW5kCisgKiBDIGNvZGUuICBUaGVyZWZvcmUgd2UgY2Fubm90IGFubm90YXRlIHRoZW0gYWx3YXlzIHdpdGgKKyAqICdVTCcgYW5kIG90aGVyIHR5cGUgc3BlY2lmaWNlcnMgdW5pbGF0ZXJhbGx5LiAgV2UKKyAqIHVzZSB0aGUgZm9sbG93aW5nIG1hY3JvcyB0byBkZWFsIHdpdGggdGhpcy4KKyAqLworCisjaWZkZWYgX19BU1NFTUJMWV9fCisjZGVmaW5lIF9BQyhYLFkpCVgKKyNlbHNlCisjZGVmaW5lIF9BQyhYLFkpCShYIyNZKQorI2VuZGlmCisKKworI2VuZGlmIC8qICEoX1NQQVJDNjRfQ09OU1RfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvY3B1ZGF0YS5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9jcHVkYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M3MTk4YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvY3B1ZGF0YS5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qIGNwdWRhdGEuaDogUGVyLWNwdSBwYXJhbWV0ZXJzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMyBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQHJlZGhhdC5jb20pCisgKi8KKworI2lmbmRlZiBfU1BBUkM2NF9DUFVEQVRBX0gKKyNkZWZpbmUgX1NQQVJDNjRfQ1BVREFUQV9ICisKKyNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KKwordHlwZWRlZiBzdHJ1Y3QgeworCS8qIERjYWNoZSBsaW5lIDEgKi8KKwl1bnNpZ25lZCBpbnQJX19wYWQwOwkJLyogYmhfY291bnQgbW92ZWQgdG8gaXJxX3N0YXQgZm9yIGNvbnNpc3RlbmN5LiBLQU8gKi8KKwl1bnNpZ25lZCBpbnQJbXVsdGlwbGllcjsKKwl1bnNpZ25lZCBpbnQJY291bnRlcjsKKwl1bnNpZ25lZCBpbnQJaWRsZV92b2x1bWU7CisJdW5zaWduZWQgbG9uZwljbG9ja190aWNrOwkvKiAldGljaydzIHBlciBzZWNvbmQgKi8KKwl1bnNpZ25lZCBsb25nCXVkZWxheV92YWw7CisKKwkvKiBEY2FjaGUgbGluZSAyICovCisJdW5zaWduZWQgaW50CXBnY2FjaGVfc2l6ZTsKKwl1bnNpZ25lZCBpbnQJX19wYWQxOworCXVuc2lnbmVkIGxvbmcJKnB0ZV9jYWNoZVsyXTsKKwl1bnNpZ25lZCBsb25nCSpwZ2RfY2FjaGU7Cit9IGNwdWluZm9fc3BhcmM7CisKK0RFQ0xBUkVfUEVSX0NQVShjcHVpbmZvX3NwYXJjLCBfX2NwdV9kYXRhKTsKKyNkZWZpbmUgY3B1X2RhdGEoX19jcHUpCQlwZXJfY3B1KF9fY3B1X2RhdGEsIChfX2NwdSkpCisjZGVmaW5lIGxvY2FsX2NwdV9kYXRhKCkJX19nZXRfY3B1X3ZhcihfX2NwdV9kYXRhKQorCisjZW5kaWYgLyogX1NQQVJDNjRfQ1BVREFUQV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2NwdXRpbWUuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvY3B1dGltZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlYzJmYzcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2NwdXRpbWUuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19TUEFSQzY0X0NQVVRJTUVfSAorI2RlZmluZSBfX1NQQVJDNjRfQ1BVVElNRV9ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9jcHV0aW1lLmg+CisKKyNlbmRpZiAvKiBfX1NQQVJDNjRfQ1BVVElNRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2N1cnJlbnQuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvY3VycmVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjMjFlNGUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2N1cnJlbnQuaApAQCAtMCwwICsxLDggQEAKKyNpZm5kZWYgX1NQQVJDNjRfQ1VSUkVOVF9ICisjZGVmaW5lIF9TUEFSQzY0X0NVUlJFTlRfSAorCisjaW5jbHVkZSA8bGludXgvdGhyZWFkX2luZm8uaD4KKworcmVnaXN0ZXIgc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyZW50IGFzbSgiZzQiKTsKKworI2VuZGlmIC8qICEoX1NQQVJDNjRfQ1VSUkVOVF9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9kY3IuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvZGNyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTlhM2YzMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvZGNyLmgKQEAgLTAsMCArMSwxNSBAQAorLyogJElkOiBkY3IuaCx2IDEuNCAyMDAxLzAzLzA5IDE3OjU2OjM3IGRhdmVtIEV4cCAkICovCisjaWZuZGVmIF9TUEFSQzY0X0RDUl9ICisjZGVmaW5lIF9TUEFSQzY0X0RDUl9ICisKKy8qIFVsdHJhU3BhcmMtSUlJL0lJSSsgRGlzcGF0Y2ggQ29udHJvbCBSZWdpc3RlciwgQVNSIDB4MTIgKi8KKyNkZWZpbmUgRENSX0RQRQkJMHgwMDAwMDAwMDAwMDAxMDAwIC8qIElJSSs6IEQkIFBhcml0eSBFcnJvciBFbmFibGUJKi8KKyNkZWZpbmUgRENSX09CUwkJMHgwMDAwMDAwMDAwMDAwZmMwIC8qIE9ic2VydmFiaWxpdHkgQnVzIENvbnRyb2xzCSovCisjZGVmaW5lIERDUl9CUEUJCTB4MDAwMDAwMDAwMDAwMDAyMCAvKiBCcmFuY2ggUHJlZGljdCBFbmFibGUJCSovCisjZGVmaW5lIERDUl9SUEUJCTB4MDAwMDAwMDAwMDAwMDAxMCAvKiBSZXR1cm4gQWRkcmVzcyBQcmVkaWN0aW9uIEVuYWJsZQkqLworI2RlZmluZSBEQ1JfU0kJCTB4MDAwMDAwMDAwMDAwMDAwOCAvKiBTaW5nbGUgSW5zdHJ1Y3Rpb24gRGlzYWJsZQkqLworI2RlZmluZSBEQ1JfSVBFCQkweDAwMDAwMDAwMDAwMDAwMDQgLyogSUlJKzogSSQgUGFyaXR5IEVycm9yIEVuYWJsZQkqLworI2RlZmluZSBEQ1JfSUZQT0UJMHgwMDAwMDAwMDAwMDAwMDAyIC8qIElSUSBGUCBPcGVyYXRpb24gRW5hYmxlCQkqLworI2RlZmluZSBEQ1JfTVMJCTB4MDAwMDAwMDAwMDAwMDAwMSAvKiBNdWx0aS1TY2FsYXIgZGlzcGF0Y2gJCSovCisKKyNlbmRpZiAvKiBfU1BBUkM2NF9EQ1JfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9kY3UuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvZGN1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNiZWQyYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvZGN1LmgKQEAgLTAsMCArMSwyNiBAQAorLyogJElkOiBkY3UuaCx2IDEuMiAyMDAxLzAzLzAxIDIzOjIzOjMzIGRhdmVtIEV4cCAkICovCisjaWZuZGVmIF9TUEFSQzY0X0RDVV9ICisjZGVmaW5lIF9TUEFSQzY0X0RDVV9ICisKKy8qIFVsdHJhU3BhcmMtSUlJIERhdGEgQ2FjaGUgVW5pdCBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIERDVV9DUAkJMHgwMDAyMDAwMDAwMDAwMDAwIC8qIFBoeXNpY2FsIENhY2hlIEVuYWJsZSB3L28gbW11Ki8KKyNkZWZpbmUgRENVX0NWCQkweDAwMDEwMDAwMDAwMDAwMDAgLyogVmlydHVhbCBDYWNoZSBFbmFibGUJdy9vIG1tdQkqLworI2RlZmluZSBEQ1VfTUUJCTB4MDAwMDgwMDAwMDAwMDAwMCAvKiBOQy1zdG9yZSBNZXJnaW5nIEVuYWJsZQkqLworI2RlZmluZSBEQ1VfUkUJCTB4MDAwMDQwMDAwMDAwMDAwMCAvKiBSQVcgYnlwYXNzIEVuYWJsZQkJKi8KKyNkZWZpbmUgRENVX1BFCQkweDAwMDAyMDAwMDAwMDAwMDAgLyogUENhY2hlIEVuYWJsZQkJKi8KKyNkZWZpbmUgRENVX0hQRQkJMHgwMDAwMTAwMDAwMDAwMDAwIC8qIEhXIHByZWZldGNoIEVuYWJsZQkJKi8KKyNkZWZpbmUgRENVX1NQRQkJMHgwMDAwMDgwMDAwMDAwMDAwIC8qIFNXIHByZWZldGNoIEVuYWJsZQkJKi8KKyNkZWZpbmUgRENVX1NMCQkweDAwMDAwNDAwMDAwMDAwMDAgLyogU2Vjb25kYXJ5IGxvYWQgc3RlZXJpbmcgRW5hYgkqLworI2RlZmluZSBEQ1VfV0UJCTB4MDAwMDAyMDAwMDAwMDAwMCAvKiBXQ2FjaGUgZW5hYmxlCQkqLworI2RlZmluZSBEQ1VfUE0JCTB4MDAwMDAxZmUwMDAwMDAwMCAvKiBQQSBXYXRjaHBvaW50IEJ5dGUgTWFzawkqLworI2RlZmluZSBEQ1VfVk0JCTB4MDAwMDAwMDFmZTAwMDAwMCAvKiBWQSBXYXRjaHBvaW50IEJ5dGUgTWFzawkqLworI2RlZmluZSBEQ1VfUFIJCTB4MDAwMDAwMDAwMTAwMDAwMCAvKiBQQSBXYXRjaHBvaW50IFJlYWQgRW5hYmxlCSovCisjZGVmaW5lIERDVV9QVwkJMHgwMDAwMDAwMDAwODAwMDAwIC8qIFBBIFdhdGNocG9pbnQgV3JpdGUgRW5hYmxlCSovCisjZGVmaW5lIERDVV9WUgkJMHgwMDAwMDAwMDAwNDAwMDAwIC8qIFZBIFdhdGNocG9pbnQgUmVhZCBFbmFibGUJKi8KKyNkZWZpbmUgRENVX1ZXCQkweDAwMDAwMDAwMDAyMDAwMDAgLyogVkEgV2F0Y2hwb2ludCBXcml0ZSBFbmFibGUJKi8KKyNkZWZpbmUgRENVX0RNCQkweDAwMDAwMDAwMDAwMDAwMDggLyogRE1NVSBFbmFibGUJCQkqLworI2RlZmluZSBEQ1VfSU0JCTB4MDAwMDAwMDAwMDAwMDAwNCAvKiBJTU1VIEVuYWJsZQkJCSovCisjZGVmaW5lIERDVV9EQwkJMHgwMDAwMDAwMDAwMDAwMDAyIC8qIERhdGEgQ2FjaGUgRW5hYmxlCQkqLworI2RlZmluZSBEQ1VfSUMJCTB4MDAwMDAwMDAwMDAwMDAwMSAvKiBJbnN0cnVjdGlvbiBDYWNoZSBFbmFibGUJKi8KKworI2VuZGlmIC8qIF9TUEFSQzY0X0RDVV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2RlbGF5LmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2RlbGF5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkwMWVhMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvZGVsYXkuaApAQCAtMCwwICsxLDM4IEBACisvKiBkZWxheS5oOiBMaW51eCBkZWxheSByb3V0aW5lcyBvbiBzcGFyYzY0LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NiwgMjAwNCBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGRhdmVtbG9mdC5uZXQpLgorICoKKyAqIEJhc2VkIGhlYXZpbHkgdXBvbiB4ODYgdmFyaWFudCB3aGljaCBpczoKKyAqIENvcHlyaWdodCAoQykgMTk5MyBMaW51cyBUb3J2YWxkcworICoKKyAqIERlbGF5IHJvdXRpbmVzIGNhbGxpbmcgZnVuY3Rpb25zIGluIGFyY2gvc3BhcmM2NC9saWIvZGVsYXkuYworICovCisKKyNpZm5kZWYgX19TUEFSQzY0X0RFTEFZX0gKKyNkZWZpbmUgX19TUEFSQzY0X0RFTEFZX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3BhcmFtLmg+CisjaW5jbHVkZSA8YXNtL2NwdWRhdGEuaD4KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworZXh0ZXJuIHZvaWQgX19iYWRfdWRlbGF5KHZvaWQpOworZXh0ZXJuIHZvaWQgX19iYWRfbmRlbGF5KHZvaWQpOworCitleHRlcm4gdm9pZCBfX3VkZWxheSh1bnNpZ25lZCBsb25nIHVzZWNzKTsKK2V4dGVybiB2b2lkIF9fbmRlbGF5KHVuc2lnbmVkIGxvbmcgbnNlY3MpOworZXh0ZXJuIHZvaWQgX19jb25zdF91ZGVsYXkodW5zaWduZWQgbG9uZyB1c2Vjcyk7CitleHRlcm4gdm9pZCBfX2RlbGF5KHVuc2lnbmVkIGxvbmcgbG9vcHMpOworCisjZGVmaW5lIHVkZWxheShuKSAoX19idWlsdGluX2NvbnN0YW50X3AobikgPyBcCisJKChuKSA+IDIwMDAwID8gX19iYWRfdWRlbGF5KCkgOiBfX2NvbnN0X3VkZWxheSgobikgKiAweDEwYzd1bCkpIDogXAorCV9fdWRlbGF5KG4pKQorCQorI2RlZmluZSBuZGVsYXkobikgKF9fYnVpbHRpbl9jb25zdGFudF9wKG4pID8gXAorCSgobikgPiAyMDAwMCA/IF9fYmFkX25kZWxheSgpIDogX19jb25zdF91ZGVsYXkoKG4pICogNXVsKSkgOiBcCisJX19uZGVsYXkobikpCisKKyNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiBkZWZpbmVkKF9fU1BBUkM2NF9ERUxBWV9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9kaXNwbGF5N3NlZy5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9kaXNwbGF5N3NlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1NWEzNTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2Rpc3BsYXk3c2VnLmgKQEAgLTAsMCArMSw3OSBAQAorLyogJElkOiBkaXNwbGF5N3NlZy5oLHYgMS4yIDIwMDAvMDgvMDIgMDY6MjI6MzUgZGF2ZW0gRXhwICQKKyAqCisgKiBkaXNwbGF5N3NlZyAtIERyaXZlciBpbnRlcmZhY2UgZm9yIHRoZSA3LXNlZ21lbnQgZGlzcGxheQorICogcHJlc2VudCBvbiBTdW4gTWljcm9zeXN0ZW1zIENQMTQwMCBhbmQgQ1AxNTAwCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAwIEVyaWMgQnJvd2VyIDxlYnJvd2VyQHVzYS5uZXQ+CisgKgorICovCisKKyNpZm5kZWYgX19kaXNwbGF5N3NlZ19oX18KKyNkZWZpbmUgX19kaXNwbGF5N3NlZ19oX18KKworI2RlZmluZSBEN1NfSU9DCSdwJworCisjZGVmaW5lIEQ3U0lPQ1JEIF9JT1IoRDdTX0lPQywgMHg0NSwgaW50KQkvKiBSZWFkIGRldmljZSBzdGF0ZQkqLworI2RlZmluZSBEN1NJT0NXUiBfSU9XKEQ3U19JT0MsIDB4NDYsIGludCkJLyogV3JpdGUgZGV2aWNlIHN0YXRlCSovCisjZGVmaW5lIEQ3U0lPQ1RNIF9JTyAoRDdTX0lPQywgMHg0NykJCS8qIFRyYW5zbGF0ZSBtb2RlIChGTElQKSovCisKKy8qCisgKiBpb2N0bCBmbGFnIGRlZmluaXRpb25zCisgKgorICogUE9JTlQJLSBUb2dnbGUgZGVjaW1hbCBwb2ludAkoMD1hYnNlbnQgMT1wcmVzZW50KQorICogQUxBUk0JLSBUb2dnbGUgYWxhcm0gTEVEIAkJKDA9Z3JlZW4gIDE9cmVkKQorICogRkxJUAkJLSBUb2dnbGUgaW52ZXJ0ZWQgbW9kZSAJKDA9bm9ybWFsIDE9ZmxpcHBlZCkgCisgKiBiaXRzIDAtNAktIENoYXJhY3RlciBkaXNwbGF5ZWQJKHNlZSBkZWZpbml0aW9ucyBiZWxvdykKKyAqCisgKiBEaXNwbGF5IHNlZ21lbnRzIGFyZSBkZWZpbmVkIGFzIGZvbGxvd3MsIAorICogc3ViamVjdCB0byBEN1NfRkxJUCByZWdpc3RlciBzdGF0ZToKKyAqCisgKiAgICBhCisgKiAgIC0tLQorICogZnwgICB8YgorICogICAtZy0KKyAqIGV8ICAgfGMKKyAqICAgLS0tCisgKiAgICBkCisgKi8KKworI2RlZmluZSBEN1NfUE9JTlQJKDEgPDwgNykJLyogRGVjaW1hbCBwb2ludCovCisjZGVmaW5lIEQ3U19BTEFSTQkoMSA8PCA2KQkvKiBBbGFybSBMRUQgCSovCisjZGVmaW5lIEQ3U19GTElQCSgxIDw8IDUpCS8qIEZsaXAgZGlzcGxheSAqLworCisjZGVmaW5lIEQ3U18wCQkweDAwCQkvKiBOdW1lcmFscyAwLTkgKi8KKyNkZWZpbmUgRDdTXzEJCTB4MDEKKyNkZWZpbmUgRDdTXzIJCTB4MDIKKyNkZWZpbmUgRDdTXzMJCTB4MDMKKyNkZWZpbmUgRDdTXzQJCTB4MDQKKyNkZWZpbmUgRDdTXzUJCTB4MDUKKyNkZWZpbmUgRDdTXzYJCTB4MDYKKyNkZWZpbmUgRDdTXzcJCTB4MDcKKyNkZWZpbmUgRDdTXzgJCTB4MDgKKyNkZWZpbmUgRDdTXzkJCTB4MDkKKyNkZWZpbmUgRDdTX0EJCTB4MEEJCS8qIExldHRlcnMgQS1GLCBILCBMLCBQICovCisjZGVmaW5lIEQ3U19CCQkweDBCCisjZGVmaW5lIEQ3U19DCQkweDBDCisjZGVmaW5lIEQ3U19ECQkweDBECisjZGVmaW5lIEQ3U19FCQkweDBFCisjZGVmaW5lIEQ3U19GCQkweDBGCisjZGVmaW5lIEQ3U19ICQkweDEwCisjZGVmaW5lIEQ3U19FMgkJMHgxMQorI2RlZmluZSBEN1NfTAkJMHgxMgorI2RlZmluZSBEN1NfUAkJMHgxMworI2RlZmluZSBEN1NfU0VHQQkweDE0CQkvKiBJbmRpdmlkdWFsIHNlZ21lbnRzICovCisjZGVmaW5lIEQ3U19TRUdCCTB4MTUKKyNkZWZpbmUgRDdTX1NFR0MJMHgxNgorI2RlZmluZSBEN1NfU0VHRAkweDE3CisjZGVmaW5lIEQ3U19TRUdFCTB4MTgKKyNkZWZpbmUgRDdTX1NFR0YJMHgxOQorI2RlZmluZSBEN1NfU0VHRwkweDFBCisjZGVmaW5lIEQ3U19TRUdBQkZHIDB4MUIJCS8qIFNlZ21lbnQgZ3JvdXBpbmdzICovCisjZGVmaW5lIEQ3U19TRUdDREVHCTB4MUMKKyNkZWZpbmUgRDdTX1NFR0JDRUYgMHgxRAorI2RlZmluZSBEN1NfU0VHQURHCTB4MUUKKyNkZWZpbmUgRDdTX0JMQU5LCTB4MUYJCS8qIENsZWFyIGFsbCBzZWdtZW50cyAqLworCisjZGVmaW5lIEQ3U19NSU5fVkFMCTB4MAorI2RlZmluZSBEN1NfTUFYX1ZBTAkweDFGCisKKyNlbmRpZiAvKiBpZm5kZWYgX19kaXNwbGF5N3NlZ19oX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvZGl2NjQuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvZGl2NjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2Q5NzhjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9kaXY2NC5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9kaXY2NC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9kbWEtbWFwcGluZy5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9kbWEtbWFwcGluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjNWRhNDEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2RtYS1tYXBwaW5nLmgKQEAgLTAsMCArMSwyNyBAQAorI2lmbmRlZiBfQVNNX1NQQVJDNjRfRE1BX01BUFBJTkdfSAorI2RlZmluZSBfQVNNX1NQQVJDNjRfRE1BX01BUFBJTkdfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpZmRlZiBDT05GSUdfUENJCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZG1hLW1hcHBpbmcuaD4KKyNlbHNlCisKK3N0cnVjdCBkZXZpY2U7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqZG1hX2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCisJCQkgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgaW50IGZsYWcpCit7CisJQlVHKCk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkbWFfZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAorCQkgICAgICAgdm9pZCAqdmFkZHIsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSkKK3sKKwlCVUcoKTsKK30KKworI2VuZGlmIC8qIFBDSSAqLworCisjZW5kaWYgLyogX0FTTV9TUEFSQzY0X0RNQV9NQVBQSU5HX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvZG1hLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2RtYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhYWIzYzgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2RtYS5oCkBAIC0wLDAgKzEsMjIxIEBACisvKiAkSWQ6IGRtYS5oLHYgMS4yMSAyMDAxLzEyLzEzIDA0OjE2OjUyIGRhdmVtIEV4cCAkCisgKiBpbmNsdWRlL2FzbS1zcGFyYzY0L2RtYS5oCisgKgorICogQ29weXJpZ2h0IDE5OTYgKEMpIERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKKyAqLworCisjaWZuZGVmIF9BU01fU1BBUkM2NF9ETUFfSAorI2RlZmluZSBfQVNNX1NQQVJDNjRfRE1BX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKworI2luY2x1ZGUgPGFzbS9zYnVzLmg+CisjaW5jbHVkZSA8YXNtL2RlbGF5Lmg+CisjaW5jbHVkZSA8YXNtL29wbGliLmg+CisKK2V4dGVybiBzcGlubG9ja190ICBkbWFfc3Bpbl9sb2NrOworCisjZGVmaW5lIGNsYWltX2RtYV9sb2NrKCkgXAorKHsJdW5zaWduZWQgbG9uZyBmbGFnczsgXAorCXNwaW5fbG9ja19pcnFzYXZlKCZkbWFfc3Bpbl9sb2NrLCBmbGFncyk7IFwKKwlmbGFnczsgXAorfSkKKworI2RlZmluZSByZWxlYXNlX2RtYV9sb2NrKF9fZmxhZ3MpIFwKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkbWFfc3Bpbl9sb2NrLCBfX2ZsYWdzKTsKKworLyogVGhlc2UgYXJlIGlycmVsZXZhbnQgZm9yIFNwYXJjIERNQSwgYnV0IHdlIGxlYXZlIGl0IGluIHNvIHRoYXQKKyAqIHRoaW5ncyBjYW4gY29tcGlsZS4KKyAqLworI2RlZmluZSBNQVhfRE1BX0NIQU5ORUxTIDgKKyNkZWZpbmUgRE1BX01PREVfUkVBRCAgICAxCisjZGVmaW5lIERNQV9NT0RFX1dSSVRFICAgMgorI2RlZmluZSBNQVhfRE1BX0FERFJFU1MgICh+MFVMKQorCisvKiBVc2VmdWwgY29uc3RhbnRzICovCisjZGVmaW5lIFNJWkVfMTZNQiAgICAgICgxNioxMDI0KjEwMjQpCisjZGVmaW5lIFNJWkVfNjRLICAgICAgICg2NCoxMDI0KQorCisvKiBTQlVTIERNQSBjb250cm9sbGVyIHJlZyBvZmZzZXRzICovCisjZGVmaW5lIERNQV9DU1IJCTB4MDBVTAkJLyogcncgIERNQSBjb250cm9sL3N0YXR1cyByZWdpc3RlciAgICAweDAwICAgKi8KKyNkZWZpbmUgRE1BX0FERFIJMHgwNFVMCQkvKiBydyAgRE1BIHRyYW5zZmVyIGFkZHJlc3MgcmVnaXN0ZXIgIDB4MDQgICAqLworI2RlZmluZSBETUFfQ09VTlQJMHgwOFVMCQkvKiBydyAgRE1BIHRyYW5zZmVyIGNvdW50IHJlZ2lzdGVyICAgIDB4MDggICAqLworI2RlZmluZSBETUFfVEVTVAkweDBjVUwJCS8qIHJ3ICBETUEgdGVzdC9kZWJ1ZyByZWdpc3RlciAgICAgICAgMHgwYyAgICovCisKKy8qIERWTUEgY2hpcCByZXZpc2lvbnMgKi8KK2VudW0gZHZtYV9yZXYgeworCWR2bWFyZXYwLAorCWR2bWFlc2MxLAorCWR2bWFyZXYxLAorCWR2bWFyZXYyLAorCWR2bWFyZXYzLAorCWR2bWFyZXZwbHVzLAorCWR2bWFobWUKK307CisKKyNkZWZpbmUgRE1BX0hBU0NPVU5UKHJldikgICgocmV2KT09ZHZtYWVzYzEpCisKKy8qIExpbnV4IERNQSBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUsIGZpbGxlZCBkdXJpbmcgcHJvYmUuICovCitzdHJ1Y3Qgc2J1c19kbWEgeworCXN0cnVjdCBzYnVzX2RtYSAqbmV4dDsKKwlzdHJ1Y3Qgc2J1c19kZXYgKnNkZXY7CisJdm9pZCBfX2lvbWVtICpyZWdzOworCisJLyogU3RhdHVzLCBtaXNjIGluZm8gKi8KKwlpbnQgbm9kZTsgICAgICAgICAgICAgICAgLyogUHJvbSBub2RlIGZvciB0aGlzIERNQSBkZXZpY2UgKi8KKwlpbnQgcnVubmluZzsgICAgICAgICAgICAgLyogQXJlIHdlIGRvaW5nIERNQSBub3c/ICovCisJaW50IGFsbG9jYXRlZDsgICAgICAgICAgIC8qIEFyZSB3ZSAib3duZWQiIGJ5IGFueW9uZSB5ZXQ/ICovCisKKwkvKiBUcmFuc2ZlciBpbmZvcm1hdGlvbi4gKi8KKwl1MzIgYWRkcjsgICAgICAgICAgICAgICAgLyogU3RhcnQgYWRkcmVzcyBvZiBjdXJyZW50IHRyYW5zZmVyICovCisJaW50IG5ieXRlczsgICAgICAgICAgICAgIC8qIFNpemUgb2YgY3VycmVudCB0cmFuc2ZlciAqLworCWludCByZWFsYnl0ZXM7ICAgICAgICAgICAvKiBGb3Igc3BsaXR0aW5nIHVwIGxhcmdlIHRyYW5zZmVycywgZXRjLiAqLworCisJLyogRE1BIHJldmlzaW9uICovCisJZW51bSBkdm1hX3JldiByZXZpc2lvbjsKK307CisKK2V4dGVybiBzdHJ1Y3Qgc2J1c19kbWEgKmRtYV9jaGFpbjsKKworLyogQnJva2VuIGhhcmR3YXJlLi4uICovCisjZGVmaW5lIERNQV9JU0JST0tFTihkbWEpICAgICgoZG1hKS0+cmV2aXNpb24gPT0gZHZtYXJldjEpCisjZGVmaW5lIERNQV9JU0VTQzEoZG1hKSAgICAgICgoZG1hKS0+cmV2aXNpb24gPT0gZHZtYWVzYzEpCisKKy8qIE1haW4gcm91dGluZXMgaW4gZG1hLmMgKi8KK2V4dGVybiB2b2lkIGR2bWFfaW5pdChzdHJ1Y3Qgc2J1c19idXMgKik7CisKKy8qIEZpZWxkcyBpbiB0aGUgY29uZF9yZWcgcmVnaXN0ZXIgKi8KKy8qIEZpcnN0LCB0aGUgdmVyc2lvbiBpZGVudGlmaWNhdGlvbiBiaXRzICovCisjZGVmaW5lIERNQV9ERVZJQ0VfSUQgICAgMHhmMDAwMDAwMCAgICAgICAgLyogRGV2aWNlIGlkZW50aWZpY2F0aW9uIGJpdHMgKi8KKyNkZWZpbmUgRE1BX1ZFUlMwICAgICAgICAweDAwMDAwMDAwICAgICAgICAvKiBTdW5yYXkgRE1BIHZlcnNpb24gKi8KKyNkZWZpbmUgRE1BX0VTQ1YxICAgICAgICAweDQwMDAwMDAwICAgICAgICAvKiBETUEgRVNDIFZlcnNpb24gMSAqLworI2RlZmluZSBETUFfVkVSUzEgICAgICAgIDB4ODAwMDAwMDAgICAgICAgIC8qIERNQSByZXYgMSAqLworI2RlZmluZSBETUFfVkVSUzIgICAgICAgIDB4YTAwMDAwMDAgICAgICAgIC8qIERNQSByZXYgMiAqLworI2RlZmluZSBETUFfVkVSSE1FICAgICAgIDB4YjAwMDAwMDAgICAgICAgIC8qIERNQSBobWUgZ2F0ZSBhcnJheSAqLworI2RlZmluZSBETUFfVkVSU1BMVVMgICAgIDB4OTAwMDAwMDAgICAgICAgIC8qIERNQSByZXYgMSBQTFVTICovCisKKyNkZWZpbmUgRE1BX0hORExfSU5UUiAgICAweDAwMDAwMDAxICAgICAgICAvKiBBbiBJUlEgbmVlZHMgdG8gYmUgaGFuZGxlZCAqLworI2RlZmluZSBETUFfSE5ETF9FUlJPUiAgIDB4MDAwMDAwMDIgICAgICAgIC8qIFdlIG5lZWQgdG8gdGFrZSBhbiBlcnJvciAqLworI2RlZmluZSBETUFfRklGT19JU0RSQUlOIDB4MDAwMDAwMGMgICAgICAgIC8qIFRoZSBETUEgRklGTyBpcyBkcmFpbmluZyAqLworI2RlZmluZSBETUFfSU5UX0VOQUIgICAgIDB4MDAwMDAwMTAgICAgICAgIC8qIFR1cm4gb24gaW50ZXJydXB0cyAqLworI2RlZmluZSBETUFfRklGT19JTlYgICAgIDB4MDAwMDAwMjAgICAgICAgIC8qIEludmFsaWRhdGUgdGhlIEZJRk8gKi8KKyNkZWZpbmUgRE1BX0FDQ19TWl9FUlIgICAweDAwMDAwMDQwICAgICAgICAvKiBUaGUgYWNjZXNzIHNpemUgd2FzIGJhZCAqLworI2RlZmluZSBETUFfRklGT19TVERSQUlOIDB4MDAwMDAwNDAgICAgICAgIC8qIERNQV9WRVJTMSBEcmFpbiB0aGUgRklGTyAqLworI2RlZmluZSBETUFfUlNUX1NDU0kgICAgIDB4MDAwMDAwODAgICAgICAgIC8qIFJlc2V0IHRoZSBTQ1NJIGNvbnRyb2xsZXIgKi8KKyNkZWZpbmUgRE1BX1JTVF9FTkVUICAgICBETUFfUlNUX1NDU0kgICAgICAvKiBSZXNldCB0aGUgRU5FVCBjb250cm9sbGVyICovCisjZGVmaW5lIERNQV9TVF9XUklURSAgICAgMHgwMDAwMDEwMCAgICAgICAgLyogd3JpdGUgZnJvbSBkZXZpY2UgdG8gbWVtb3J5ICovCisjZGVmaW5lIERNQV9FTkFCTEUgICAgICAgMHgwMDAwMDIwMCAgICAgICAgLyogRmlyZSB1cCBETUEsIGhhbmRsZSByZXF1ZXN0cyAqLworI2RlZmluZSBETUFfUEVORF9SRUFEICAgIDB4MDAwMDA0MDAgICAgICAgIC8qIERNQV9WRVJTMS8wL1BMVVMgUGVuZGluZyBSZWFkICovCisjZGVmaW5lIERNQV9FU0NfQlVSU1QgICAgMHgwMDAwMDgwMCAgICAgICAgLyogMT0xNmJ5dGUgMD0zMmJ5dGUgKi8KKyNkZWZpbmUgRE1BX1JFQURfQUhFQUQgICAweDAwMDAxODAwICAgICAgICAvKiBETUEgcmVhZCBhaGVhZCBwYXJ0aWFsIGxvbmd3b3JkICovCisjZGVmaW5lIERNQV9EU0JMX1JEX0RSTiAgMHgwMDAwMTAwMCAgICAgICAgLyogTm8gRUMgZHJhaW4gb24gc2xhdmUgcmVhZHMgKi8KKyNkZWZpbmUgRE1BX0JDTlRfRU5BQiAgICAweDAwMDAyMDAwICAgICAgICAvKiBJZiBvbiwgdXNlIHRoZSBieXRlIGNvdW50ZXIgKi8KKyNkZWZpbmUgRE1BX1RFUk1fQ05UUiAgICAweDAwMDA0MDAwICAgICAgICAvKiBUZXJtaW5hbCBjb3VudGVyICovCisjZGVmaW5lIERNQV9TQ1NJX1NCVVM2NCAgMHgwMDAwODAwMCAgICAgICAgLyogSE1FOiBFbmFibGUgNjQtYml0IFNCVVMgbW9kZS4gKi8KKyNkZWZpbmUgRE1BX0NTUl9ESVNBQiAgICAweDAwMDEwMDAwICAgICAgICAvKiBObyBGSUZPIGRyYWlucyBkdXJpbmcgY3NyICovCisjZGVmaW5lIERNQV9TQ1NJX0RJU0FCICAgMHgwMDAyMDAwMCAgICAgICAgLyogTm8gRklGTyBkcmFpbnMgZHVyaW5nIHJlZyAqLworI2RlZmluZSBETUFfRFNCTF9XUl9JTlYgIDB4MDAwMjAwMDAgICAgICAgIC8qIE5vIEVDIGludmFsLiBvbiBzbGF2ZSB3cml0ZXMgKi8KKyNkZWZpbmUgRE1BX0FERF9FTkFCTEUgICAweDAwMDQwMDAwICAgICAgICAvKiBTcGVjaWFsIEVTQyBEVk1BIG9wdGltaXphdGlvbiAqLworI2RlZmluZSBETUFfRV9CVVJTVFMJIDB4MDAwYzAwMDAJICAgLyogRU5FVDogU0JVUyByL3cgYnVyc3QgbWFzayAqLworI2RlZmluZSBETUFfRV9CVVJTVDMyCSAweDAwMDQwMDAwCSAgIC8qIEVORVQ6IFNCVVMgMzIgYnl0ZSByL3cgYnVyc3QgKi8KKyNkZWZpbmUgRE1BX0VfQlVSU1QxNgkgMHgwMDAwMDAwMAkgICAvKiBFTkVUOiBTQlVTIDE2IGJ5dGUgci93IGJ1cnN0ICovCisjZGVmaW5lIERNQV9CUlNUX1NaICAgICAgMHgwMDBjMDAwMCAgICAgICAgLyogU0NTSTogU0JVUyByL3cgYnVyc3Qgc2l6ZSAqLworI2RlZmluZSBETUFfQlJTVDY0ICAgICAgIDB4MDAwYzAwMDAgICAgICAgIC8qIFNDU0k6IDY0Ynl0ZSBidXJzdHMgKEhNRSBvbiBVbHRyYVNwYXJjIG9ubHkpICovCisjZGVmaW5lIERNQV9CUlNUMzIgICAgICAgMHgwMDA0MDAwMCAgICAgICAgLyogU0NTSTogMzJieXRlIGJ1cnN0cyAqLworI2RlZmluZSBETUFfQlJTVDE2ICAgICAgIDB4MDAwMDAwMDAgICAgICAgIC8qIFNDU0k6IDE2Ynl0ZSBidXJzdHMgKi8KKyNkZWZpbmUgRE1BX0JSU1QwICAgICAgICAweDAwMDgwMDAwICAgICAgICAvKiBTQ1NJOiBubyBidXJzdHMgKG5vbi1ITUUgZ2F0ZSBhcnJheXMpICovCisjZGVmaW5lIERNQV9BRERSX0RJU0FCICAgMHgwMDEwMDAwMCAgICAgICAgLyogTm8gRklGTyBkcmFpbnMgZHVyaW5nIGFkZHIgKi8KKyNkZWZpbmUgRE1BXzJDTEtTICAgICAgICAweDAwMjAwMDAwICAgICAgICAvKiBFYWNoIHRyYW5zZmVyID0gMiBjbG9jayB0aWNrcyAqLworI2RlZmluZSBETUFfM0NMS1MgICAgICAgIDB4MDA0MDAwMDAgICAgICAgIC8qIEVhY2ggdHJhbnNmZXIgPSAzIGNsb2NrIHRpY2tzICovCisjZGVmaW5lIERNQV9FTl9FTkVUQVVJICAgRE1BXzNDTEtTICAgICAgICAgLyogUHV0IGxhbmNlIGludG8gQVVJLWNhYmxlIG1vZGUgKi8KKyNkZWZpbmUgRE1BX0NOVFJfRElTQUIgICAweDAwODAwMDAwICAgICAgICAvKiBObyBJUlEgd2hlbiBETUFfVEVSTV9DTlRSIHNldCAqLworI2RlZmluZSBETUFfQVVUT19OQUREUiAgIDB4MDEwMDAwMDAgICAgICAgIC8qIFVzZSAiYXV0byBueHQgYWRkciIgZmVhdHVyZSAqLworI2RlZmluZSBETUFfU0NTSV9PTiAgICAgIDB4MDIwMDAwMDAgICAgICAgIC8qIEVuYWJsZSBTQ1NJIGRtYSAqLworI2RlZmluZSBETUFfUEFSSVRZX09GRiAgIDB4MDIwMDAwMDAgICAgICAgIC8qIEhNRTogZGlzYWJsZSBwYXJpdHkgY2hlY2tpbmcgKi8KKyNkZWZpbmUgRE1BX0xPQURFRF9BRERSICAweDA0MDAwMDAwICAgICAgICAvKiBBZGRyZXNzIGhhcyBiZWVuIGxvYWRlZCAqLworI2RlZmluZSBETUFfTE9BREVEX05BRERSIDB4MDgwMDAwMDAgICAgICAgIC8qIE5leHQgYWRkcmVzcyBoYXMgYmVlbiBsb2FkZWQgKi8KKyNkZWZpbmUgRE1BX1JFU0VUX0ZBUzM2NiAweDA4MDAwMDAwICAgICAgICAvKiBITUU6IEFzc2VydCBSRVNFVCB0byBGQVMzNjYgKi8KKworLyogVmFsdWVzIGRlc2NyaWJpbmcgdGhlIGJ1cnN0LXNpemUgcHJvcGVydHkgZnJvbSB0aGUgUFJPTSAqLworI2RlZmluZSBETUFfQlVSU1QxICAgICAgIDB4MDEKKyNkZWZpbmUgRE1BX0JVUlNUMiAgICAgICAweDAyCisjZGVmaW5lIERNQV9CVVJTVDQgICAgICAgMHgwNAorI2RlZmluZSBETUFfQlVSU1Q4ICAgICAgIDB4MDgKKyNkZWZpbmUgRE1BX0JVUlNUMTYgICAgICAweDEwCisjZGVmaW5lIERNQV9CVVJTVDMyICAgICAgMHgyMAorI2RlZmluZSBETUFfQlVSU1Q2NCAgICAgIDB4NDAKKyNkZWZpbmUgRE1BX0JVUlNUQklUUyAgICAweDdmCisKKy8qIERldGVybWluZSBoaWdoZXN0IHBvc3NpYmxlIGZpbmFsIHRyYW5zZmVyIGFkZHJlc3MgZ2l2ZW4gYSBiYXNlICovCisjZGVmaW5lIERNQV9NQVhFTkQoYWRkcikgKDB4MDEwMDAwMDBVTC0oKCh1bnNpZ25lZCBsb25nKShhZGRyKSkmMHgwMGZmZmZmZlVMKSkKKworLyogWWVzLCBJIGhhY2sgYSBsb3Qgb2YgZWxpc3AgaW4gbXkgc3BhcmUgdGltZS4uLiAqLworI2RlZmluZSBETUFfRVJST1JfUChyZWdzKSAgKCgoc2J1c19yZWFkbCgocmVncykgKyBETUFfQ1NSKSAmIERNQV9ITkRMX0VSUk9SKSkKKyNkZWZpbmUgRE1BX0lSUV9QKHJlZ3MpICAgICgoKHNidXNfcmVhZGwoKHJlZ3MpICsgRE1BX0NTUikpICYgKERNQV9ITkRMX0lOVFIgfCBETUFfSE5ETF9FUlJPUikpKQorI2RlZmluZSBETUFfV1JJVEVfUChyZWdzKSAgKCgoc2J1c19yZWFkbCgocmVncykgKyBETUFfQ1NSKSAmIERNQV9TVF9XUklURSkpCisjZGVmaW5lIERNQV9PRkYoX19yZWdzKQkJXAorZG8gewl1MzIgdG1wID0gc2J1c19yZWFkbCgoX19yZWdzKSArIERNQV9DU1IpOyBcCisJdG1wICY9IH5ETUFfRU5BQkxFOyBcCisJc2J1c193cml0ZWwodG1wLCAoX19yZWdzKSArIERNQV9DU1IpOyBcCit9IHdoaWxlKDApCisjZGVmaW5lIERNQV9JTlRTT0ZGKF9fcmVncykJXAorZG8gewl1MzIgdG1wID0gc2J1c19yZWFkbCgoX19yZWdzKSArIERNQV9DU1IpOyBcCisJdG1wICY9IH5ETUFfSU5UX0VOQUI7IFwKKwlzYnVzX3dyaXRlbCh0bXAsIChfX3JlZ3MpICsgRE1BX0NTUik7IFwKK30gd2hpbGUoMCkKKyNkZWZpbmUgRE1BX0lOVFNPTihfX3JlZ3MpCVwKK2RvIHsJdTMyIHRtcCA9IHNidXNfcmVhZGwoKF9fcmVncykgKyBETUFfQ1NSKTsgXAorCXRtcCB8PSBETUFfSU5UX0VOQUI7IFwKKwlzYnVzX3dyaXRlbCh0bXAsIChfX3JlZ3MpICsgRE1BX0NTUik7IFwKK30gd2hpbGUoMCkKKyNkZWZpbmUgRE1BX1BVTlRGSUZPKF9fcmVncykJXAorZG8gewl1MzIgdG1wID0gc2J1c19yZWFkbCgoX19yZWdzKSArIERNQV9DU1IpOyBcCisJdG1wIHw9IERNQV9GSUZPX0lOVjsgXAorCXNidXNfd3JpdGVsKHRtcCwgKF9fcmVncykgKyBETUFfQ1NSKTsgXAorfSB3aGlsZSgwKQorI2RlZmluZSBETUFfU0VUU1RBUlQoX19yZWdzLCBfX2FkZHIpCVwKKwlzYnVzX3dyaXRlbCgodTMyKShfX2FkZHIpLCAoX19yZWdzKSArIERNQV9BRERSKTsKKyNkZWZpbmUgRE1BX0JFR0lORE1BX1coX19yZWdzKQlcCitkbyB7CXUzMiB0bXAgPSBzYnVzX3JlYWRsKChfX3JlZ3MpICsgRE1BX0NTUik7IFwKKwl0bXAgfD0gKERNQV9TVF9XUklURXxETUFfRU5BQkxFfERNQV9JTlRfRU5BQik7IFwKKwlzYnVzX3dyaXRlbCh0bXAsIChfX3JlZ3MpICsgRE1BX0NTUik7IFwKK30gd2hpbGUoMCkKKyNkZWZpbmUgRE1BX0JFR0lORE1BX1IoX19yZWdzKQlcCitkbyB7CXUzMiB0bXAgPSBzYnVzX3JlYWRsKChfX3JlZ3MpICsgRE1BX0NTUik7IFwKKwl0bXAgfD0gKERNQV9FTkFCTEV8RE1BX0lOVF9FTkFCKTsgXAorCXRtcCAmPSB+RE1BX1NUX1dSSVRFOyBcCisJc2J1c193cml0ZWwodG1wLCAoX19yZWdzKSArIERNQV9DU1IpOyBcCit9IHdoaWxlKDApCisKKy8qIEZvciBjZXJ0YWluIERNQSBjaGlwcywgd2UgbmVlZCB0byBkaXNhYmxlIGludHMgdXBvbiBpcnEgZW50cnkKKyAqIGFuZCB0dXJuIHRoZW0gYmFjayBvbiB3aGVuIHdlIGFyZSBkb25lLiAgU28gaW4gYW55IEVTUCBpbnRlcnJ1cHQKKyAqIGhhbmRsZXIgeW91ICptdXN0KiBjYWxsIERNQV9JUlFfRU5UUlkgdXBvbiBlbnRyeSBhbmQgRE1BX0lSUV9FWElUCisgKiB3aGVuIGxlYXZpbmcgdGhlIGhhbmRsZXIuICBZb3UgaGF2ZSBiZWVuIHdhcm5lZC4uLgorICovCisjZGVmaW5lIERNQV9JUlFfRU5UUlkoZG1hLCBkcmVncykgZG8geyBcCisgICAgICAgIGlmKERNQV9JU0JST0tFTihkbWEpKSBETUFfSU5UU09GRihkcmVncyk7IFwKKyAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgRE1BX0lSUV9FWElUKGRtYSwgZHJlZ3MpIGRvIHsgXAorCWlmKERNQV9JU0JST0tFTihkbWEpKSBETUFfSU5UU09OKGRyZWdzKTsgXAorICAgfSB3aGlsZSgwKQorCisjZGVmaW5lIGZvcl9lYWNoX2R2bWEoZG1hKSBcCisgICAgICAgIGZvcigoZG1hKSA9IGRtYV9jaGFpbjsgKGRtYSk7IChkbWEpID0gKGRtYSktPm5leHQpCisKK2V4dGVybiBpbnQgZ2V0X2RtYV9saXN0KGNoYXIgKik7CitleHRlcm4gaW50IHJlcXVlc3RfZG1hKHVuc2lnbmVkIGludCwgX19jb25zdF9fIGNoYXIgKik7CitleHRlcm4gdm9pZCBmcmVlX2RtYSh1bnNpZ25lZCBpbnQpOworCisvKiBGcm9tIFBDSSAqLworCisjaWZkZWYgQ09ORklHX1BDSQorZXh0ZXJuIGludCBpc2FfZG1hX2JyaWRnZV9idWdneTsKKyNlbHNlCisjZGVmaW5lIGlzYV9kbWFfYnJpZGdlX2J1Z2d5IAkoMCkKKyNlbmRpZgorCisjZW5kaWYgLyogIShfQVNNX1NQQVJDNjRfRE1BX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2VidXMuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvZWJ1cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0M2U0ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2VidXMuaApAQCAtMCwwICsxLDk3IEBACisvKiAkSWQ6IGVidXMuaCx2IDEuMTAgMjAwMS8wMy8xNCAwNTowMDo1NSBkYXZlbSBFeHAgJAorICogZWJ1cy5oOiBQQ0kgdG8gRWJ1cyBwc2V1ZG8gZHJpdmVyIHNvZnR3YXJlIHN0YXRlLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NyBFZGRpZSBDLiBEb3N0IChlY2RAc2t5bmV0LmJlKQorICogQ29weXJpZ2h0IChDKSAxOTk5IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AcmVkaGF0LmNvbSkKKyAqLworCisjaWZuZGVmIF9fU1BBUkM2NF9FQlVTX0gKKyNkZWZpbmUgX19TUEFSQzY0X0VCVVNfSAorCisjaW5jbHVkZSA8YXNtL3BibS5oPgorI2luY2x1ZGUgPGFzbS9vcGxpYi5oPgorCitzdHJ1Y3QgbGludXhfZWJ1c19jaGlsZCB7CisJc3RydWN0IGxpbnV4X2VidXNfY2hpbGQJCSpuZXh0OworCXN0cnVjdCBsaW51eF9lYnVzX2RldmljZQkqcGFyZW50OworCXN0cnVjdCBsaW51eF9lYnVzCQkqYnVzOworCWludAkJCQkgcHJvbV9ub2RlOworCWNoYXIJCQkJIHByb21fbmFtZVs2NF07CisJc3RydWN0IHJlc291cmNlCQkJIHJlc291cmNlW1BST01SRUdfTUFYXTsKKwlpbnQJCQkJIG51bV9hZGRyczsKKwl1bnNpZ25lZCBpbnQJCQkgaXJxc1tQUk9NSU5UUl9NQVhdOworCWludAkJCQkgbnVtX2lycXM7Cit9OworCitzdHJ1Y3QgbGludXhfZWJ1c19kZXZpY2UgeworCXN0cnVjdCBsaW51eF9lYnVzX2RldmljZQkqbmV4dDsKKwlzdHJ1Y3QgbGludXhfZWJ1c19jaGlsZAkJKmNoaWxkcmVuOworCXN0cnVjdCBsaW51eF9lYnVzCQkqYnVzOworCWludAkJCQkgcHJvbV9ub2RlOworCWNoYXIJCQkJIHByb21fbmFtZVs2NF07CisJc3RydWN0IHJlc291cmNlCQkJIHJlc291cmNlW1BST01SRUdfTUFYXTsKKwlpbnQJCQkJIG51bV9hZGRyczsKKwl1bnNpZ25lZCBpbnQJCQkgaXJxc1tQUk9NSU5UUl9NQVhdOworCWludAkJCQkgbnVtX2lycXM7Cit9OworCitzdHJ1Y3QgbGludXhfZWJ1cyB7CisJc3RydWN0IGxpbnV4X2VidXMJCSpuZXh0OworCXN0cnVjdCBsaW51eF9lYnVzX2RldmljZQkqZGV2aWNlczsKKwlzdHJ1Y3QgcGNpX3BibV9pbmZvCQkqcGFyZW50OworCXN0cnVjdCBwY2lfZGV2CQkJKnNlbGY7CisJaW50CQkJCSBpbmRleDsKKwlpbnQJCQkJIGlzX3JpbzsKKwlpbnQJCQkJIHByb21fbm9kZTsKKwljaGFyCQkJCSBwcm9tX25hbWVbNjRdOworCXN0cnVjdCBsaW51eF9wcm9tX2VidXNfcmFuZ2VzCSBlYnVzX3Jhbmdlc1tQUk9NUkVHX01BWF07CisJaW50CQkJCSBudW1fZWJ1c19yYW5nZXM7CisJc3RydWN0IGxpbnV4X3Byb21fZWJ1c19pbnRtYXAJIGVidXNfaW50bWFwW1BST01SRUdfTUFYXTsKKwlpbnQJCQkJIG51bV9lYnVzX2ludG1hcDsKKwlzdHJ1Y3QgbGludXhfcHJvbV9lYnVzX2ludG1hc2sJIGVidXNfaW50bWFzazsKK307CisKK3N0cnVjdCBlYnVzX2RtYV9pbmZvIHsKKwlzcGlubG9ja190CWxvY2s7CisJdm9pZCBfX2lvbWVtCSpyZWdzOworCisJdW5zaWduZWQgaW50CWZsYWdzOworI2RlZmluZSBFQlVTX0RNQV9GTEFHX1VTRV9FQkRNQV9IQU5ETEVSCQkweDAwMDAwMDAxCisjZGVmaW5lIEVCVVNfRE1BX0ZMQUdfVENJX0RJU0FCTEUJCTB4MDAwMDAwMDIKKworCS8qIFRoZXNlIGFyZSBvbmx5IHZhbGlkIGlzIEVCVVNfRE1BX0ZMQUdfVVNFX0VCRE1BX0hBTkRMRVIgaXMKKwkgKiBzZXQuCisJICovCisJdm9pZCAoKmNhbGxiYWNrKShzdHJ1Y3QgZWJ1c19kbWFfaW5mbyAqcCwgaW50IGV2ZW50LCB2b2lkICpjb29raWUpOworCXZvaWQgKmNsaWVudF9jb29raWU7CisJdW5zaWduZWQgaW50CWlycTsKKyNkZWZpbmUgRUJVU19ETUFfRVZFTlRfRVJST1IJMQorI2RlZmluZSBFQlVTX0RNQV9FVkVOVF9ETUEJMgorI2RlZmluZSBFQlVTX0RNQV9FVkVOVF9ERVZJQ0UJNAorCisJdW5zaWduZWQgY2hhcgluYW1lWzY0XTsKK307CisKK2V4dGVybiBpbnQgZWJ1c19kbWFfcmVnaXN0ZXIoc3RydWN0IGVidXNfZG1hX2luZm8gKnApOworZXh0ZXJuIGludCBlYnVzX2RtYV9pcnFfZW5hYmxlKHN0cnVjdCBlYnVzX2RtYV9pbmZvICpwLCBpbnQgb24pOworZXh0ZXJuIHZvaWQgZWJ1c19kbWFfdW5yZWdpc3RlcihzdHJ1Y3QgZWJ1c19kbWFfaW5mbyAqcCk7CitleHRlcm4gaW50IGVidXNfZG1hX3JlcXVlc3Qoc3RydWN0IGVidXNfZG1hX2luZm8gKnAsIGRtYV9hZGRyX3QgYnVzX2FkZHIsCisJCQkgICAgc2l6ZV90IGxlbik7CitleHRlcm4gdm9pZCBlYnVzX2RtYV9wcmVwYXJlKHN0cnVjdCBlYnVzX2RtYV9pbmZvICpwLCBpbnQgd3JpdGUpOworZXh0ZXJuIHVuc2lnbmVkIGludCBlYnVzX2RtYV9yZXNpZHVlKHN0cnVjdCBlYnVzX2RtYV9pbmZvICpwKTsKK2V4dGVybiB2b2lkIGVidXNfZG1hX2VuYWJsZShzdHJ1Y3QgZWJ1c19kbWFfaW5mbyAqcCwgaW50IG9uKTsKKworZXh0ZXJuIHN0cnVjdCBsaW51eF9lYnVzCQkqZWJ1c19jaGFpbjsKKworZXh0ZXJuIHZvaWQgZWJ1c19pbml0KHZvaWQpOworCisjZGVmaW5lIGZvcl9lYWNoX2VidXMoYnVzKQkJCQkJCVwKKyAgICAgICAgZm9yKChidXMpID0gZWJ1c19jaGFpbjsgKGJ1cyk7IChidXMpID0gKGJ1cyktPm5leHQpCisKKyNkZWZpbmUgZm9yX2VhY2hfZWJ1c2RldihkZXYsIGJ1cykJCQkJCVwKKyAgICAgICAgZm9yKChkZXYpID0gKGJ1cyktPmRldmljZXM7IChkZXYpOyAoZGV2KSA9IChkZXYpLT5uZXh0KQorCisjZGVmaW5lIGZvcl9lYWNoX2VkZXZjaGlsZChkZXYsIGNoaWxkKQkJCQkJXAorICAgICAgICBmb3IoKGNoaWxkKSA9IChkZXYpLT5jaGlsZHJlbjsgKGNoaWxkKTsgKGNoaWxkKSA9IChjaGlsZCktPm5leHQpCisKKyNlbmRpZiAvKiAhKF9fU1BBUkM2NF9FQlVTX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2VsZi5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9lbGYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTQ1ODExCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9lbGYuaApAQCAtMCwwICsxLDE4MSBAQAorLyogJElkOiBlbGYuaCx2IDEuMzIgMjAwMi8wMi8wOSAxOTo0OTozMSBkYXZlbSBFeHAgJCAqLworI2lmbmRlZiBfX0FTTV9TUEFSQzY0X0VMRl9ICisjZGVmaW5lIF9fQVNNX1NQQVJDNjRfRUxGX0gKKworLyoKKyAqIEVMRiByZWdpc3RlciBkZWZpbml0aW9ucy4uCisgKi8KKworI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjZW5kaWYKKworLyoKKyAqIFNwYXJjIHNlY3Rpb24gdHlwZXMKKyAqLworI2RlZmluZSBTVFRfUkVHSVNURVIJCTEzCisKKy8qCisgKiBTcGFyYyBFTEYgcmVsb2NhdGlvbiB0eXBlcworICovCisjZGVmaW5lCVJfU1BBUkNfTk9ORQkJMAorI2RlZmluZQlSX1NQQVJDXzgJCTEKKyNkZWZpbmUJUl9TUEFSQ18xNgkJMgorI2RlZmluZQlSX1NQQVJDXzMyCQkzCisjZGVmaW5lCVJfU1BBUkNfRElTUDgJCTQKKyNkZWZpbmUJUl9TUEFSQ19ESVNQMTYJCTUKKyNkZWZpbmUJUl9TUEFSQ19ESVNQMzIJCTYKKyNkZWZpbmUJUl9TUEFSQ19XRElTUDMwCQk3CisjZGVmaW5lCVJfU1BBUkNfV0RJU1AyMgkJOAorI2RlZmluZQlSX1NQQVJDX0hJMjIJCTkKKyNkZWZpbmUJUl9TUEFSQ18yMgkJMTAKKyNkZWZpbmUJUl9TUEFSQ18xMwkJMTEKKyNkZWZpbmUJUl9TUEFSQ19MTzEwCQkxMgorI2RlZmluZQlSX1NQQVJDX0dPVDEwCQkxMworI2RlZmluZQlSX1NQQVJDX0dPVDEzCQkxNAorI2RlZmluZQlSX1NQQVJDX0dPVDIyCQkxNQorI2RlZmluZQlSX1NQQVJDX1BDMTAJCTE2CisjZGVmaW5lCVJfU1BBUkNfUEMyMgkJMTcKKyNkZWZpbmUJUl9TUEFSQ19XUExUMzAJCTE4CisjZGVmaW5lCVJfU1BBUkNfQ09QWQkJMTkKKyNkZWZpbmUJUl9TUEFSQ19HTE9CX0RBVAkyMAorI2RlZmluZQlSX1NQQVJDX0pNUF9TTE9UCTIxCisjZGVmaW5lCVJfU1BBUkNfUkVMQVRJVkUJMjIKKyNkZWZpbmUJUl9TUEFSQ19VQTMyCQkyMworI2RlZmluZSBSX1NQQVJDX1BMVDMyCQkyNAorI2RlZmluZSBSX1NQQVJDX0hJUExUMjIJCTI1CisjZGVmaW5lIFJfU1BBUkNfTE9QTFQxMAkJMjYKKyNkZWZpbmUgUl9TUEFSQ19QQ1BMVDMyCQkyNworI2RlZmluZSBSX1NQQVJDX1BDUExUMjIJCTI4CisjZGVmaW5lIFJfU1BBUkNfUENQTFQxMAkJMjkKKyNkZWZpbmUgUl9TUEFSQ18xMAkJMzAKKyNkZWZpbmUgUl9TUEFSQ18xMQkJMzEKKyNkZWZpbmUgUl9TUEFSQ182NAkJMzIKKyNkZWZpbmUgUl9TUEFSQ19PTE8xMAkJMzMKKyNkZWZpbmUgUl9TUEFSQ19XRElTUDE2CQk0MAorI2RlZmluZSBSX1NQQVJDX1dESVNQMTkJCTQxCisjZGVmaW5lIFJfU1BBUkNfNwkJNDMKKyNkZWZpbmUgUl9TUEFSQ181CQk0NAorI2RlZmluZSBSX1NQQVJDXzYJCTQ1CisKKy8qIEJpdHMgcHJlc2VudCBpbiBBVF9IV0NBUCwgcHJpbWFyaWx5IGZvciBTcGFyYzMyLiAgKi8KKworI2RlZmluZSBIV0NBUF9TUEFSQ19GTFVTSCAgICAgICAxICAgIC8qIENQVSBzdXBwb3J0cyBmbHVzaCBpbnN0cnVjdGlvbi4gKi8KKyNkZWZpbmUgSFdDQVBfU1BBUkNfU1RCQVIgICAgICAgMgorI2RlZmluZSBIV0NBUF9TUEFSQ19TV0FQICAgICAgICA0CisjZGVmaW5lIEhXQ0FQX1NQQVJDX01VTERJViAgICAgIDgKKyNkZWZpbmUgSFdDQVBfU1BBUkNfVjkJCTE2CisjZGVmaW5lIEhXQ0FQX1NQQVJDX1VMVFJBMwkzMgorCisvKgorICogVGhlc2UgYXJlIHVzZWQgdG8gc2V0IHBhcmFtZXRlcnMgaW4gdGhlIGNvcmUgZHVtcHMuCisgKi8KKyNpZm5kZWYgRUxGX0FSQ0gKKyNkZWZpbmUgRUxGX0FSQ0gJCUVNX1NQQVJDVjkKKyNkZWZpbmUgRUxGX0NMQVNTCQlFTEZDTEFTUzY0CisjZGVmaW5lIEVMRl9EQVRBCQlFTEZEQVRBMk1TQgorCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgZWxmX2dyZWdfdDsKKworI2RlZmluZSBFTEZfTkdSRUcgMzYKK3R5cGVkZWYgZWxmX2dyZWdfdCBlbGZfZ3JlZ3NldF90W0VMRl9OR1JFR107CisvKiBGb3JtYXQgb2YgNjQtYml0IGVsZl9ncmVnc2V0X3QgaXM6CisgKiAJRzAgLS0+IEc3CisgKiAJTzAgLS0+IE83CisgKiAJTDAgLS0+IEw3CisgKiAJSTAgLS0+IEk3CisgKglUU1RBVEUKKyAqCVRQQworICoJVE5QQworICoJWQorICovCisjZGVmaW5lIEVMRl9DT1JFX0NPUFlfUkVHUyhfX2VsZl9yZWdzLCBfX3B0X3JlZ3MpCVwKK2RvIHsJdW5zaWduZWQgbG9uZyAqZGVzdCA9ICYoX19lbGZfcmVnc1swXSk7CQlcCisJc3RydWN0IHB0X3JlZ3MgKnNyYyA9IChfX3B0X3JlZ3MpOwkJXAorCXVuc2lnbmVkIGxvbmcgX191c2VyICpzcDsJCQlcCisJaW50IGk7CQkJCQkJXAorCWZvcihpID0gMDsgaSA8IDE2OyBpKyspCQkJCVwKKwkJZGVzdFtpXSA9IHNyYy0+dV9yZWdzW2ldOwkJXAorCS8qIERvbid0IHRyeSB0aGlzIGF0IGhvbWUga2lkcy4uLiAqLwkJXAorCXNwID0gKHVuc2lnbmVkIGxvbmcgX191c2VyICopCQkJXAorCSAoKHNyYy0+dV9yZWdzWzE0XSArIFNUQUNLX0JJQVMpCQlcCisJICAmIDB4ZmZmZmZmZmZmZmZmZmZmOFVMKTsJCQlcCisJZm9yKGkgPSAwOyBpIDwgMTY7IGkrKykJCQkJXAorCQlfX2dldF91c2VyKGRlc3RbaSsxNl0sICZzcFtpXSk7CQlcCisJZGVzdFszMl0gPSBzcmMtPnRzdGF0ZTsJCQkJXAorCWRlc3RbMzNdID0gc3JjLT50cGM7CQkJCVwKKwlkZXN0WzM0XSA9IHNyYy0+dG5wYzsJCQkJXAorCWRlc3RbMzVdID0gc3JjLT55OwkJCQlcCit9IHdoaWxlICgwKTsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcJcHJfcmVnc1szMl07CisJdW5zaWduZWQgbG9uZwlwcl9mc3I7CisJdW5zaWduZWQgbG9uZwlwcl9nc3I7CisJdW5zaWduZWQgbG9uZwlwcl9mcHJzOworfSBlbGZfZnByZWdzZXRfdDsKKyNlbmRpZgorCisjZGVmaW5lIEVMRl9DT1JFX0NPUFlfVEFTS19SRUdTKF9fdHNrLCBfX2VsZl9yZWdzKQlcCisJKHsgRUxGX0NPUkVfQ09QWV9SRUdTKCgqKF9fZWxmX3JlZ3MpKSwgKF9fdHNrKS0+dGhyZWFkX2luZm8tPmtyZWdzKTsgMTsgfSkKKworLyoKKyAqIFRoaXMgaXMgdXNlZCB0byBlbnN1cmUgd2UgZG9uJ3QgbG9hZCBzb21ldGhpbmcgZm9yIHRoZSB3cm9uZyBhcmNoaXRlY3R1cmUuCisgKi8KKyNpZm5kZWYgZWxmX2NoZWNrX2FyY2gKKyNkZWZpbmUgZWxmX2NoZWNrX2FyY2goeCkgKCh4KS0+ZV9tYWNoaW5lID09IEVMRl9BUkNIKQkvKiBNaWdodCBiZSBFTV9TUEFSQ1Y5IG9yIEVNX1NQQVJDICovCisjZW5kaWYKKworI2RlZmluZSBVU0VfRUxGX0NPUkVfRFVNUAorI2RlZmluZSBFTEZfRVhFQ19QQUdFU0laRQlQQUdFX1NJWkUKKworLyogVGhpcyBpcyB0aGUgbG9jYXRpb24gdGhhdCBhbiBFVF9EWU4gcHJvZ3JhbSBpcyBsb2FkZWQgaWYgZXhlYydlZC4gIFR5cGljYWwKKyAgIHVzZSBvZiB0aGlzIGlzIHRvIGludm9rZSAiLi9sZC5zbyBzb21lcHJvZyIgdG8gdGVzdCBvdXQgYSBuZXcgdmVyc2lvbiBvZgorICAgdGhlIGxvYWRlci4gIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgaXQgaXMgb3V0IG9mIHRoZSB3YXkgb2YgdGhlIHByb2dyYW0KKyAgIHRoYXQgaXQgd2lsbCAiZXhlYyIsIGFuZCB0aGF0IHRoZXJlIGlzIHN1ZmZpY2llbnQgcm9vbSBmb3IgdGhlIGJyay4gICovCisKKyNpZm5kZWYgRUxGX0VUX0RZTl9CQVNFCisjZGVmaW5lIEVMRl9FVF9EWU5fQkFTRSAgICAgICAgIDB4MDAwMDAxMDAwMDAwMDAwMFVMCisjZW5kaWYKKworCisvKiBUaGlzIHlpZWxkcyBhIG1hc2sgdGhhdCB1c2VyIHByb2dyYW1zIGNhbiB1c2UgdG8gZmlndXJlIG91dCB3aGF0CisgICBpbnN0cnVjdGlvbiBzZXQgdGhpcyBjcHUgc3VwcG9ydHMuICAqLworCisvKiBPbiBVbHRyYSwgd2Ugc3VwcG9ydCBhbGwgb2YgdGhlIHY4IGNhcGFiaWxpdGllcy4gKi8KKyNkZWZpbmUgRUxGX0hXQ0FQCSgoSFdDQVBfU1BBUkNfRkxVU0ggfCBIV0NBUF9TUEFSQ19TVEJBUiB8IFwKKwkJCSAgSFdDQVBfU1BBUkNfU1dBUCB8IEhXQ0FQX1NQQVJDX01VTERJViB8IFwKKwkJCSAgSFdDQVBfU1BBUkNfVjkpIHwgXAorCQkJICgodGxiX3R5cGUgPT0gY2hlZXRhaCB8fCB0bGJfdHlwZSA9PSBjaGVldGFoX3BsdXMpID8gXAorCQkJICBIV0NBUF9TUEFSQ19VTFRSQTMgOiAwKSkKKworLyogVGhpcyB5aWVsZHMgYSBzdHJpbmcgdGhhdCBsZC5zbyB3aWxsIHVzZSB0byBsb2FkIGltcGxlbWVudGF0aW9uCisgICBzcGVjaWZpYyBsaWJyYXJpZXMgZm9yIG9wdGltaXphdGlvbi4gIFRoaXMgaXMgbW9yZSBzcGVjaWZpYyBpbgorICAgaW50ZW50IHRoYW4gcG9raW5nIGF0IHVuYW1lIG9yIC9wcm9jL2NwdWluZm8uICAqLworCisjZGVmaW5lIEVMRl9QTEFURk9STQkoTlVMTCkKKworI2lmZGVmIF9fS0VSTkVMX18KKyNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4LCBpYmNzMikJCQlcCitkbyB7CXVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzID0gY3VycmVudF90aHJlYWRfaW5mbygpLT5mbGFnczsgXAorCW5ld19mbGFncyAmPSBfVElGXzMyQklUOwkJCVwKKwlpZiAoKGV4KS5lX2lkZW50W0VJX0NMQVNTXSA9PSBFTEZDTEFTUzMyKQlcCisJCW5ld19mbGFncyB8PSBfVElGXzMyQklUOwkJXAorCWVsc2UJCQkJCQlcCisJCW5ld19mbGFncyAmPSB+X1RJRl8zMkJJVDsJCVwKKwlpZiAoKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+ZmxhZ3MgJiBfVElGXzMyQklUKSBcCisJICAgICE9IG5ld19mbGFncykJCQkJXAorCQlzZXRfdGhyZWFkX2ZsYWcoVElGX0FCSV9QRU5ESU5HKTsJXAorCWVsc2UJCQkJCQlcCisJCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9BQklfUEVORElORyk7CVwKKwkvKiBmbHVzaF90aHJlYWQgd2lsbCB1cGRhdGUgcGdkIGNhY2hlICovCVwKKwlpZiAoaWJjczIpCQkJCQlcCisJCXNldF9wZXJzb25hbGl0eShQRVJfU1ZSNCk7CQlcCisJZWxzZSBpZiAoY3VycmVudC0+cGVyc29uYWxpdHkgIT0gUEVSX0xJTlVYMzIpCVwKKwkJc2V0X3BlcnNvbmFsaXR5KFBFUl9MSU5VWCk7CQlcCit9IHdoaWxlICgwKQorI2VuZGlmCisKKyNlbmRpZiAvKiAhKF9fQVNNX1NQQVJDNjRfRUxGX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2VudmN0cmwuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvZW52Y3RybC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzYTY2NTMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2VudmN0cmwuaApAQCAtMCwwICsxLDEwMyBAQAorLyogJElkOiBlbnZjdHJsLmgsdiAxLjMgMjAwMC8xMS8wMyAwMDozNzo0MCBkYXZlbSBFeHAgJAorICoKKyAqIGVudmN0cmwuaDogRGVmaW5pdGlvbnMgZm9yIGFjY2VzcyB0byB0aGUgaTJjIGVudmlyb25tZW50CisgKiAgICAgICAgICAgIG1vbml0b3Jpbmcgb24gVWx0cmFzcGFyYyBzeXN0ZW1zLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAgRWRkaWUgQy4gRG9zdCAgKGVjZEBza3luZXQuYmUpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgIFZpbmggVHJ1b25nICAodmluaC50cnVvbmdAZW5nLnN1bi5jb20pCisgKiBWVCAtIEFkZCBhbGwgaW9jdGwgY29tbWFuZHMgYW5kIGVudmlyb25tZW50IHN0YXR1cyBkZWZpbml0aW9ucyAKKyAqIFZUIC0gQWRkIGFwcGxpY2F0aW9uIG5vdGUgCisgKi8KKyNpZm5kZWYgX1NQQVJDNjRfRU5WQ1RSTF9ICisjZGVmaW5lIF9TUEFSQzY0X0VOVkNUUkxfSCAxCisKKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorCisvKiBBcHBsaWNhdGlvbiBub3RlOgorICoKKyAqIFRoZSBkcml2ZXIgc3VwcG9ydHMgNCBvcGVyYXRpb25zOiBvcGVuKCksIGNsb3NlKCksIGlvY3RsKCksIHJlYWQoKQorICogVGhlIGRldmljZSBuYW1lIGlzIC9kZXYvZW52Y3RybC4KKyAqIEJlbG93IGlzIHNhbXBsZSB1c2FnZToKKyAqCisgKglmZCA9IG9wZW4oIi9kZXYvZW52dHJsIiwgT19SRE9OTFkpOworICoJaWYgKGlvY3RsKGZkLCBFTlZDVFJMX1JFQURfU0hVVERPV05fVEVNUEVSQVRVUkUsIDApIDwgMCkKKyAqCQlwcmludGYoImVycm9yXG4iKTsKKyAqCXJldCA9IHJlYWQoZmQsIGJ1ZiwgMTApOworICoJY2xvc2UoZmQpOworICoKKyAqIE5vdGljZSBpbiB0aGUgY2FzZSBvZiBjcHUgdm9sdGFnZSBhbmQgdGVtcGVyYXR1cmUsIHRoZSBkZWZhdWx0IGlzCisgKiBjcHUwLiAgSWYgd2UgbmVlZCB0byBrbm93IHRoZSBpbmZvIG9mIGNwdTEsIGNwdTIsIGNwdTMsIHdlIG5lZWQgdG8KKyAqIHBhc3MgaW4gY3B1IG51bWJlciBpbiBpb2N0bCgpIGxhc3QgcGFyYW1ldGVyLiAgRm9yIGV4YW1wbGUsIHRvCisgKiBnZXQgdGhlIHZvbHRhZ2Ugb2YgY3B1MjoKKyAqCisgKglpb2N0bGJ1ZlswXSA9IDI7CisgKglpZiAoaW9jdGwoZmQsIEVOVkNUUkxfUkVBRF9DUFVfVk9MVEFHRSwgaW9jdGxidWYpIDwgMCkKKyAqCQlwcmludGYoImVycm9yXG4iKTsKKyAqCXJldCA9IHJlYWQoZmQsIGJ1ZiwgMTApOworICoKKyAqIEFsbCB0aGUgcmV0dXJuIHZhbHVlcyBhcmUgaW4gYXNjaWkuICBTbyBjaGVjayByZWFkIHJldHVybiB2YWx1ZQorICogYW5kIGRvIGFwcHJvcHJpYXRlIGNvbnZlcnNpb25zIGluIHlvdXIgYXBwbGljYXRpb24uCisgKi8KKworLyogSU9DVEwgY29tbWFuZHMgKi8KKworLyogTm90ZTogdGhlc2UgY29tbWFuZHMgcmVmbGVjdCBwb3NzaWJsZSBtb25pdG9yIGZlYXR1cmVzLgorICogU29tZSBib2FyZHMgY2hvb3NlIHRvIHN1cHBvcnQgc29tZSBvZiB0aGUgZmVhdHVyZXMgb25seS4KKyAqLworI2RlZmluZSBFTlZDVFJMX1JEX0NQVV9URU1QRVJBVFVSRQlfSU9SKCdwJywgMHg0MCwgaW50KQorI2RlZmluZSBFTlZDVFJMX1JEX0NQVV9WT0xUQUdFCQlfSU9SKCdwJywgMHg0MSwgaW50KQorI2RlZmluZSBFTlZDVFJMX1JEX0ZBTl9TVEFUVVMJCV9JT1IoJ3AnLCAweDQyLCBpbnQpCisjZGVmaW5lIEVOVkNUUkxfUkRfV0FSTklOR19URU1QRVJBVFVSRQlfSU9SKCdwJywgMHg0MywgaW50KQorI2RlZmluZSBFTlZDVFJMX1JEX1NIVVRET1dOX1RFTVBFUkFUVVJFCV9JT1IoJ3AnLCAweDQ0LCBpbnQpCisjZGVmaW5lIEVOVkNUUkxfUkRfVk9MVEFHRV9TVEFUVVMJX0lPUigncCcsIDB4NDUsIGludCkKKyNkZWZpbmUgRU5WQ1RSTF9SRF9TQ1NJX1RFTVBFUkFUVVJFCV9JT1IoJ3AnLCAweDQ2LCBpbnQpCisjZGVmaW5lIEVOVkNUUkxfUkRfRVRIRVJORVRfVEVNUEVSQVRVUkUJX0lPUigncCcsIDB4NDcsIGludCkKKyNkZWZpbmUgRU5WQ1RSTF9SRF9NVEhSQkRfVEVNUEVSQVRVUkUJX0lPUigncCcsIDB4NDgsIGludCkKKworI2RlZmluZSBFTlZDVFJMX1JEX0dMT0JBTEFERFJFU1MJX0lPUigncCcsIDB4NDksIGludCkKKworLyogUmVhZCByZXR1cm4gdmFsdWVzIGZvciBhIHZvbHRhZ2Ugc3RhdHVzIHJlcXVlc3QuICovCisjZGVmaW5lIEVOVkNUUkxfVk9MVEFHRV9QT1dFUlNVUFBMWV9HT09ECTB4MDEKKyNkZWZpbmUgRU5WQ1RSTF9WT0xUQUdFX0JBRAkJCTB4MDIKKyNkZWZpbmUgRU5WQ1RSTF9QT1dFUlNVUFBMWV9CQUQJCQkweDAzCisjZGVmaW5lIEVOVkNUUkxfVk9MVEFHRV9QT1dFUlNVUFBMWV9CQUQJCTB4MDQKKworLyogUmVhZCByZXR1cm4gdmFsdWVzIGZvciBhIGZhbiBzdGF0dXMgcmVxdWVzdC4KKyAqIEEgZmFpbHVyZSBtYXRjaCBtZWFucyBlaXRoZXIgdGhlIGZhbiBmYWlscyBvcgorICogdGhlIGZhbiBpcyBub3QgY29ubmVjdGVkLiAgU29tZSBib2FyZHMgaGF2ZSBvcHRpb25hbAorICogY29ubmVjdG9ycyB0byBjb25uZWN0IGV4dHJhIGZhbnMuCisgKgorICogVGhlcmUgYXJlIG1heGltdW0gOCBtb25pdG9yIGZhbnMuICBTb21lIGFyZSBjcHUgZmFucworICogc29tZSBhcmUgc3lzdGVtIGZhbnMuICBUaGUgbWFzayBiZWxvdyBvbmx5IGluZGljYXRlcworICogZmFuIGJ5IG9yZGVyIG51bWJlci4KKyAqIEJlbG93IGlzIGEgc2FtcGxlIGFwcGxpY2F0aW9uOgorICoKKyAqCWlmIChpb2N0bChmZCwgRU5WQ1RSTF9SRUFEX0ZBTl9TVEFUVVMsIDApIDwgMCkgeworICoJCXByaW50ZigiaW9jdGwgZmFuIGZhaWxlZFxuIik7CisgKgl9CisgKglpZiAocmVhZChmZCwgcnNsdCwgMSkgPD0gMCkgeworICoJCXByaW50ZigiZXJyb3Igb3IgZmFuIG5vdCBtb25pdG9yZWRcbiIpOworICoJfSBlbHNlIHsKKyAqCQlpZiAocnNsdFswXSA9PSBFTlZDVFJMX0FMTF9GQU5TX0dPT0QpIHsKKyAqCQkJcHJpbnRmKCJhbGwgZmFucyBnb29kXG4iKTsKKyAqCX0gZWxzZSBpZiAocnNsdFswXSA9PSBFTlZDVFJMX0FMTF9GQU5TX0JBRCkgeworICoJCXByaW50ZigiYWxsIGZhbnMgYmFkXG4iKTsKKyAqCX0gZWxzZSB7CisgKgkJaWYgKHJzbHRbMF0gJiBFTlZDVFJMX0ZBTjBfRkFJTFVSRV9NQVNLKSB7CisgKgkJCXByaW50ZigiZmFuIDAgZmFpbGVkIG9yIG5vdCBjb25uZWN0ZWRcbiIpOworICoJfQorICoJLi4uLi4uCisgKi8gIAorCisjZGVmaW5lIEVOVkNUUkxfQUxMX0ZBTlNfR09PRAkJCTB4MDAKKyNkZWZpbmUgRU5WQ1RSTF9GQU4wX0ZBSUxVUkVfTUFTSwkJMHgwMQorI2RlZmluZSBFTlZDVFJMX0ZBTjFfRkFJTFVSRV9NQVNLCQkweDAyCisjZGVmaW5lIEVOVkNUUkxfRkFOMl9GQUlMVVJFX01BU0sJCTB4MDQKKyNkZWZpbmUgRU5WQ1RSTF9GQU4zX0ZBSUxVUkVfTUFTSwkJMHgwOAorI2RlZmluZSBFTlZDVFJMX0ZBTjRfRkFJTFVSRV9NQVNLCQkweDEwCisjZGVmaW5lIEVOVkNUUkxfRkFONV9GQUlMVVJFX01BU0sJCTB4MjAKKyNkZWZpbmUgRU5WQ1RSTF9GQU42X0ZBSUxVUkVfTUFTSwkJMHg0MAorI2RlZmluZSBFTlZDVFJMX0ZBTjdfRkFJTFVSRV9NQVNLCQkweDgwCisjZGVmaW5lIEVOVkNUUkxfQUxMX0ZBTlNfQkFEIAkJCTB4RkYKKworI2VuZGlmIC8qICEoX1NQQVJDNjRfRU5WQ1RSTF9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9lcnJuby5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9lcnJuby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjOThhNzMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2Vycm5vLmgKQEAgLTAsMCArMSwxMTAgQEAKKy8qICRJZDogZXJybm8uaCx2IDEuMiAxOTk3LzA0LzE1IDEyOjQ2OjExIGpqIEV4cCAkICovCisjaWZuZGVmIF9TUEFSQzY0X0VSUk5PX0gKKyNkZWZpbmUgX1NQQVJDNjRfRVJSTk9fSAorCisvKiBUaGVzZSBtYXRjaCB0aGUgU3VuT1MgZXJyb3IgbnVtYmVyaW5nIHNjaGVtZS4gKi8KKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2Vycm5vLWJhc2UuaD4KKworI2RlZmluZQlFV09VTERCTE9DSwlFQUdBSU4JLyogT3BlcmF0aW9uIHdvdWxkIGJsb2NrICovCisjZGVmaW5lCUVJTlBST0dSRVNTCTM2CS8qIE9wZXJhdGlvbiBub3cgaW4gcHJvZ3Jlc3MgKi8KKyNkZWZpbmUJRUFMUkVBRFkJMzcJLyogT3BlcmF0aW9uIGFscmVhZHkgaW4gcHJvZ3Jlc3MgKi8KKyNkZWZpbmUJRU5PVFNPQ0sJMzgJLyogU29ja2V0IG9wZXJhdGlvbiBvbiBub24tc29ja2V0ICovCisjZGVmaW5lCUVERVNUQUREUlJFUQkzOQkvKiBEZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkICovCisjZGVmaW5lCUVNU0dTSVpFCTQwCS8qIE1lc3NhZ2UgdG9vIGxvbmcgKi8KKyNkZWZpbmUJRVBST1RPVFlQRQk0MQkvKiBQcm90b2NvbCB3cm9uZyB0eXBlIGZvciBzb2NrZXQgKi8KKyNkZWZpbmUJRU5PUFJPVE9PUFQJNDIJLyogUHJvdG9jb2wgbm90IGF2YWlsYWJsZSAqLworI2RlZmluZQlFUFJPVE9OT1NVUFBPUlQJNDMJLyogUHJvdG9jb2wgbm90IHN1cHBvcnRlZCAqLworI2RlZmluZQlFU09DS1ROT1NVUFBPUlQJNDQJLyogU29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZCAqLworI2RlZmluZQlFT1BOT1RTVVBQCTQ1CS8qIE9wIG5vdCBzdXBwb3J0ZWQgb24gdHJhbnNwb3J0IGVuZHBvaW50ICovCisjZGVmaW5lCUVQRk5PU1VQUE9SVAk0NgkvKiBQcm90b2NvbCBmYW1pbHkgbm90IHN1cHBvcnRlZCAqLworI2RlZmluZQlFQUZOT1NVUFBPUlQJNDcJLyogQWRkcmVzcyBmYW1pbHkgbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbCAqLworI2RlZmluZQlFQUREUklOVVNFCTQ4CS8qIEFkZHJlc3MgYWxyZWFkeSBpbiB1c2UgKi8KKyNkZWZpbmUJRUFERFJOT1RBVkFJTAk0OQkvKiBDYW5ub3QgYXNzaWduIHJlcXVlc3RlZCBhZGRyZXNzICovCisjZGVmaW5lCUVORVRET1dOCTUwCS8qIE5ldHdvcmsgaXMgZG93biAqLworI2RlZmluZQlFTkVUVU5SRUFDSAk1MQkvKiBOZXR3b3JrIGlzIHVucmVhY2hhYmxlICovCisjZGVmaW5lCUVORVRSRVNFVAk1MgkvKiBOZXQgZHJvcHBlZCBjb25uZWN0aW9uIGJlY2F1c2Ugb2YgcmVzZXQgKi8KKyNkZWZpbmUJRUNPTk5BQk9SVEVECTUzCS8qIFNvZnR3YXJlIGNhdXNlZCBjb25uZWN0aW9uIGFib3J0ICovCisjZGVmaW5lCUVDT05OUkVTRVQJNTQJLyogQ29ubmVjdGlvbiByZXNldCBieSBwZWVyICovCisjZGVmaW5lCUVOT0JVRlMJCTU1CS8qIE5vIGJ1ZmZlciBzcGFjZSBhdmFpbGFibGUgKi8KKyNkZWZpbmUJRUlTQ09OTgkJNTYJLyogVHJhbnNwb3J0IGVuZHBvaW50IGlzIGFscmVhZHkgY29ubmVjdGVkICovCisjZGVmaW5lCUVOT1RDT05OCTU3CS8qIFRyYW5zcG9ydCBlbmRwb2ludCBpcyBub3QgY29ubmVjdGVkICovCisjZGVmaW5lCUVTSFVURE9XTgk1OAkvKiBObyBzZW5kIGFmdGVyIHRyYW5zcG9ydCBlbmRwb2ludCBzaHV0ZG93biAqLworI2RlZmluZQlFVE9PTUFOWVJFRlMJNTkJLyogVG9vIG1hbnkgcmVmZXJlbmNlczogY2Fubm90IHNwbGljZSAqLworI2RlZmluZQlFVElNRURPVVQJNjAJLyogQ29ubmVjdGlvbiB0aW1lZCBvdXQgKi8KKyNkZWZpbmUJRUNPTk5SRUZVU0VECTYxCS8qIENvbm5lY3Rpb24gcmVmdXNlZCAqLworI2RlZmluZQlFTE9PUAkJNjIJLyogVG9vIG1hbnkgc3ltYm9saWMgbGlua3MgZW5jb3VudGVyZWQgKi8KKyNkZWZpbmUJRU5BTUVUT09MT05HCTYzCS8qIEZpbGUgbmFtZSB0b28gbG9uZyAqLworI2RlZmluZQlFSE9TVERPV04JNjQJLyogSG9zdCBpcyBkb3duICovCisjZGVmaW5lCUVIT1NUVU5SRUFDSAk2NQkvKiBObyByb3V0ZSB0byBob3N0ICovCisjZGVmaW5lCUVOT1RFTVBUWQk2NgkvKiBEaXJlY3Rvcnkgbm90IGVtcHR5ICovCisjZGVmaW5lIEVQUk9DTElNICAgICAgICA2NyAgICAgIC8qIFNVTk9TOiBUb28gbWFueSBwcm9jZXNzZXMgKi8KKyNkZWZpbmUJRVVTRVJTCQk2OAkvKiBUb28gbWFueSB1c2VycyAqLworI2RlZmluZQlFRFFVT1QJCTY5CS8qIFF1b3RhIGV4Y2VlZGVkICovCisjZGVmaW5lCUVTVEFMRQkJNzAJLyogU3RhbGUgTkZTIGZpbGUgaGFuZGxlICovCisjZGVmaW5lCUVSRU1PVEUJCTcxCS8qIE9iamVjdCBpcyByZW1vdGUgKi8KKyNkZWZpbmUJRU5PU1RSCQk3MgkvKiBEZXZpY2Ugbm90IGEgc3RyZWFtICovCisjZGVmaW5lCUVUSU1FCQk3MwkvKiBUaW1lciBleHBpcmVkICovCisjZGVmaW5lCUVOT1NSCQk3NAkvKiBPdXQgb2Ygc3RyZWFtcyByZXNvdXJjZXMgKi8KKyNkZWZpbmUJRU5PTVNHCQk3NQkvKiBObyBtZXNzYWdlIG9mIGRlc2lyZWQgdHlwZSAqLworI2RlZmluZQlFQkFETVNHCQk3NgkvKiBOb3QgYSBkYXRhIG1lc3NhZ2UgKi8KKyNkZWZpbmUJRUlEUk0JCTc3CS8qIElkZW50aWZpZXIgcmVtb3ZlZCAqLworI2RlZmluZQlFREVBRExLCQk3OAkvKiBSZXNvdXJjZSBkZWFkbG9jayB3b3VsZCBvY2N1ciAqLworI2RlZmluZQlFTk9MQ0sJCTc5CS8qIE5vIHJlY29yZCBsb2NrcyBhdmFpbGFibGUgKi8KKyNkZWZpbmUJRU5PTkVUCQk4MAkvKiBNYWNoaW5lIGlzIG5vdCBvbiB0aGUgbmV0d29yayAqLworI2RlZmluZSBFUlJFTU9URSAgICAgICAgODEgICAgICAvKiBTdW5PUzogVG9vIG1hbnkgbHZscyBvZiByZW1vdGUgaW4gcGF0aCAqLworI2RlZmluZQlFTk9MSU5LCQk4MgkvKiBMaW5rIGhhcyBiZWVuIHNldmVyZWQgKi8KKyNkZWZpbmUJRUFEVgkJODMJLyogQWR2ZXJ0aXNlIGVycm9yICovCisjZGVmaW5lCUVTUk1OVAkJODQJLyogU3Jtb3VudCBlcnJvciAqLworI2RlZmluZQlFQ09NTQkJODUgICAgICAvKiBDb21tdW5pY2F0aW9uIGVycm9yIG9uIHNlbmQgKi8KKyNkZWZpbmUJRVBST1RPCQk4NgkvKiBQcm90b2NvbCBlcnJvciAqLworI2RlZmluZQlFTVVMVElIT1AJODcJLyogTXVsdGlob3AgYXR0ZW1wdGVkICovCisjZGVmaW5lCUVET1RET1QJCTg4CS8qIFJGUyBzcGVjaWZpYyBlcnJvciAqLworI2RlZmluZQlFUkVNQ0hHCQk4OQkvKiBSZW1vdGUgYWRkcmVzcyBjaGFuZ2VkICovCisjZGVmaW5lCUVOT1NZUwkJOTAJLyogRnVuY3Rpb24gbm90IGltcGxlbWVudGVkICovCisKKy8qIFRoZSByZXN0IGhhdmUgbm8gU3VuT1MgZXF1aXZhbGVudC4gKi8KKyNkZWZpbmUJRVNUUlBJUEUJOTEJLyogU3RyZWFtcyBwaXBlIGVycm9yICovCisjZGVmaW5lCUVPVkVSRkxPVwk5MgkvKiBWYWx1ZSB0b28gbGFyZ2UgZm9yIGRlZmluZWQgZGF0YSB0eXBlICovCisjZGVmaW5lCUVCQURGRAkJOTMJLyogRmlsZSBkZXNjcmlwdG9yIGluIGJhZCBzdGF0ZSAqLworI2RlZmluZQlFQ0hSTkcJCTk0CS8qIENoYW5uZWwgbnVtYmVyIG91dCBvZiByYW5nZSAqLworI2RlZmluZQlFTDJOU1lOQwk5NQkvKiBMZXZlbCAyIG5vdCBzeW5jaHJvbml6ZWQgKi8KKyNkZWZpbmUJRUwzSExUCQk5NgkvKiBMZXZlbCAzIGhhbHRlZCAqLworI2RlZmluZQlFTDNSU1QJCTk3CS8qIExldmVsIDMgcmVzZXQgKi8KKyNkZWZpbmUJRUxOUk5HCQk5OAkvKiBMaW5rIG51bWJlciBvdXQgb2YgcmFuZ2UgKi8KKyNkZWZpbmUJRVVOQVRDSAkJOTkJLyogUHJvdG9jb2wgZHJpdmVyIG5vdCBhdHRhY2hlZCAqLworI2RlZmluZQlFTk9DU0kJCTEwMAkvKiBObyBDU0kgc3RydWN0dXJlIGF2YWlsYWJsZSAqLworI2RlZmluZQlFTDJITFQJCTEwMQkvKiBMZXZlbCAyIGhhbHRlZCAqLworI2RlZmluZQlFQkFERQkJMTAyCS8qIEludmFsaWQgZXhjaGFuZ2UgKi8KKyNkZWZpbmUJRUJBRFIJCTEwMwkvKiBJbnZhbGlkIHJlcXVlc3QgZGVzY3JpcHRvciAqLworI2RlZmluZQlFWEZVTEwJCTEwNAkvKiBFeGNoYW5nZSBmdWxsICovCisjZGVmaW5lCUVOT0FOTwkJMTA1CS8qIE5vIGFub2RlICovCisjZGVmaW5lCUVCQURSUUMJCTEwNgkvKiBJbnZhbGlkIHJlcXVlc3QgY29kZSAqLworI2RlZmluZQlFQkFEU0xUCQkxMDcJLyogSW52YWxpZCBzbG90ICovCisjZGVmaW5lCUVERUFETE9DSwkxMDgJLyogRmlsZSBsb2NraW5nIGRlYWRsb2NrIGVycm9yICovCisjZGVmaW5lCUVCRk9OVAkJMTA5CS8qIEJhZCBmb250IGZpbGUgZm9ybWF0ICovCisjZGVmaW5lCUVMSUJFWEVDCTExMAkvKiBDYW5ub3QgZXhlYyBhIHNoYXJlZCBsaWJyYXJ5IGRpcmVjdGx5ICovCisjZGVmaW5lCUVOT0RBVEEJCTExMQkvKiBObyBkYXRhIGF2YWlsYWJsZSAqLworI2RlZmluZQlFTElCQkFECQkxMTIJLyogQWNjZXNzaW5nIGEgY29ycnVwdGVkIHNoYXJlZCBsaWJyYXJ5ICovCisjZGVmaW5lCUVOT1BLRwkJMTEzCS8qIFBhY2thZ2Ugbm90IGluc3RhbGxlZCAqLworI2RlZmluZQlFTElCQUNDCQkxMTQJLyogQ2FuIG5vdCBhY2Nlc3MgYSBuZWVkZWQgc2hhcmVkIGxpYnJhcnkgKi8KKyNkZWZpbmUJRU5PVFVOSVEJMTE1CS8qIE5hbWUgbm90IHVuaXF1ZSBvbiBuZXR3b3JrICovCisjZGVmaW5lCUVSRVNUQVJUCTExNgkvKiBJbnRlcnJ1cHRlZCBzeXNjYWxsIHNob3VsZCBiZSByZXN0YXJ0ZWQgKi8KKyNkZWZpbmUJRVVDTEVBTgkJMTE3CS8qIFN0cnVjdHVyZSBuZWVkcyBjbGVhbmluZyAqLworI2RlZmluZQlFTk9UTkFNCQkxMTgJLyogTm90IGEgWEVOSVggbmFtZWQgdHlwZSBmaWxlICovCisjZGVmaW5lCUVOQVZBSUwJCTExOQkvKiBObyBYRU5JWCBzZW1hcGhvcmVzIGF2YWlsYWJsZSAqLworI2RlZmluZQlFSVNOQU0JCTEyMAkvKiBJcyBhIG5hbWVkIHR5cGUgZmlsZSAqLworI2RlZmluZQlFUkVNT1RFSU8JMTIxCS8qIFJlbW90ZSBJL08gZXJyb3IgKi8KKyNkZWZpbmUJRUlMU0VRCQkxMjIJLyogSWxsZWdhbCBieXRlIHNlcXVlbmNlICovCisjZGVmaW5lCUVMSUJNQVgJCTEyMwkvKiBBdG1wdCB0byBsaW5rIGluIHRvbyBtYW55IHNoYXJlZCBsaWJzICovCisjZGVmaW5lCUVMSUJTQ04JCTEyNAkvKiAubGliIHNlY3Rpb24gaW4gYS5vdXQgY29ycnVwdGVkICovCisKKyNkZWZpbmUgRU5PTUVESVVNICAgICAgIDEyNSAgICAgLyogTm8gbWVkaXVtIGZvdW5kICovCisjZGVmaW5lIEVNRURJVU1UWVBFICAgICAxMjYgICAgIC8qIFdyb25nIG1lZGl1bSB0eXBlICovCisjZGVmaW5lCUVDQU5DRUxFRAkxMjcJLyogT3BlcmF0aW9uIENhbmNlbGxlZCAqLworI2RlZmluZQlFTk9LRVkJCTEyOAkvKiBSZXF1aXJlZCBrZXkgbm90IGF2YWlsYWJsZSAqLworI2RlZmluZQlFS0VZRVhQSVJFRAkxMjkJLyogS2V5IGhhcyBleHBpcmVkICovCisjZGVmaW5lCUVLRVlSRVZPS0VECTEzMAkvKiBLZXkgaGFzIGJlZW4gcmV2b2tlZCAqLworI2RlZmluZQlFS0VZUkVKRUNURUQJMTMxCS8qIEtleSB3YXMgcmVqZWN0ZWQgYnkgc2VydmljZSAqLworCisjZW5kaWYgLyogIShfU1BBUkM2NF9FUlJOT19IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9lc3RhdGUuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvZXN0YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTcxOWMzZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvZXN0YXRlLmgKQEAgLTAsMCArMSw1MCBAQAorLyogJElkOiBlc3RhdGUuaCx2IDEuMSAyMDAxLzAzLzI4IDEwOjU2OjM0IGRhdmVtIEV4cCAkICovCisjaWZuZGVmIF9TUEFSQzY0X0VTVEFURV9ICisjZGVmaW5lIF9TUEFSQzY0X0VTVEFURV9ICisKKy8qIFVsdHJhU1BBUkMtSUlJIEUtY2FjaGUgRXJyb3IgRW5hYmxlICovCisjZGVmaW5lIEVTVEFURV9FUlJPUl9GTVQJMHgwMDAwMDAwMDAwMDQwMDAwIC8qIEZvcmNlIE1UQUcgRUNDCQkqLworI2RlZmluZSBFU1RBVEVfRVJST1JfRk1FU1MJMHgwMDAwMDAwMDAwMDNjMDAwIC8qIEZvcmNlZCBNVEFHIEVDQyB2YWwJKi8KKyNkZWZpbmUgRVNUQVRFX0VSUk9SX0ZNRAkweDAwMDAwMDAwMDAwMDIwMDAgLyogRm9yY2UgREFUQSBFQ0MJCSovCisjZGVmaW5lIEVTVEFURV9FUlJPUl9GREVDQwkweDAwMDAwMDAwMDAwMDFmZjAgLyogRm9yY2VkIERBVEEgRUNDIHZhbAkqLworI2RlZmluZSBFU1RBVEVfRVJST1JfVUNFRU4JMHgwMDAwMDAwMDAwMDAwMDA4IC8qIFNlZSBiZWxvdwkJCSovCisjZGVmaW5lIEVTVEFURV9FUlJPUl9OQ0VFTgkweDAwMDAwMDAwMDAwMDAwMDIgLyogU2VlIGJlbG93CQkJKi8KKyNkZWZpbmUgRVNUQVRFX0VSUk9SX0NFRU4JMHgwMDAwMDAwMDAwMDAwMDAxIC8qIFNlZSBiZWxvdwkJCSovCisKKy8qIFVDRUVOIGVuYWJsZXMgdGhlIGZhc3RfRUNDX2Vycm9yIHRyYXAgZm9yOiAxKSBzb2Z0d2FyZSBjb3JyZWN0YWJsZSBFLWNhY2hlCisgKiBlcnJvcnMgMikgdW5jb3JyZWN0YWJsZSBFLWNhY2hlIGVycm9ycy4gIFN1Y2ggZXZlbnRzIG9ubHkgb2NjdXIgb24gcmVhZHMKKyAqIG9mIHRoZSBFLWNhY2hlIGJ5IHRoZSBsb2NhbCBwcm9jZXNzb3IgZm9yOiAxKSBkYXRhIGxvYWRzIDIpIGluc3RydWN0aW9uCisgKiBmZXRjaGVzIDMpIGF0b21pYyBvcGVyYXRpb25zLiAgU3VjaCBldmVudHMgX2Nhbm5vdF8gb2NjdXIgZm9yOiAxKSBtZXJnZQorICogMikgd3JpdGViYWNrIDIpIGNvcHlvdXQuICBUaGUgQUZTUiBiaXRzIGFzc29jaWF0ZWQgd2l0aCB0aGVzZSB0cmFwcyBhcmUKKyAqIFVDQyBhbmQgVUNVLgorICovCisKKy8qIE5DRUVOIGVuYWJsZXMgaW5zdHJ1Y3Rpb25fYWNjZXNzX2Vycm9yLCBkYXRhX2FjY2Vzc19lcnJvciwgYW5kIEVDQ19lcnJvciB0cmFwcworICogZm9yIHVuY29ycmVjdGFibGUgRUNDIGVycm9ycyBhbmQgc3lzdGVtIGVycm9ycy4KKyAqCisgKiBVbmNvcnJlY3RhYmxlIHN5c3RlbSBidXMgZGF0YSBlcnJvciBvciBNVEFHIEVDQyBlcnJvciwgc3lzdGVtIGJ1cyBUaW1lT1VULAorICogb3Igc3lzdGVtIGJ1cyBCdXNFUlI6CisgKiAxKSBBcyB0aGUgcmVzdWx0IG9mIGFuIGluc3RydWN0aW9uIGZldGNoLCB3aWxsIGdlbmVyYXRlIGluc3RydWN0aW9uX2FjY2Vzc19lcnJvcgorICogMikgQXMgdGhlIHJlc3VsdCBvZiBhIGxvYWQgZXRjLiB3aWxsIGdlbmVyYXRlIGRhdGFfYWNjZXNzX2Vycm9yLgorICogMykgQXMgdGhlIHJlc3VsdCBvZiBzdG9yZSBtZXJnZSBjb21wbGV0aW9uLCB3cml0ZWJhY2ssIG9yIGNvcHlvdXQgd2lsbAorICogICAgZ2VuZXJhdGUgYSBkaXNydXB0aW5nIEVDQ19lcnJvciB0cmFwLgorICogNCkgQXMgdGhlIHJlc3VsdCBvZiBzdWNoIGVycm9ycyBvbiBpbnN0cnVjdGlvbiB2ZWN0b3IgZmV0Y2ggY2FuIGdlbmVyYXRlIGFueQorICogICAgb2YgdGhlIDMgdHJhcCB0eXBlcy4KKyAqCisgKiBUaGUgQUZTUiBiaXRzIGFzc29jaWF0ZWQgd2l0aCB0aGVzZSB0cmFwcyBhcmUgRU1VLCBFRFUsIFdEVSwgQ1BVLCBJVlUsIFVFLAorICogQkVSUiwgYW5kIFRPLgorICovCisKKy8qIENFRU4gZW5hYmxlcyB0aGUgRUNDX2Vycm9yIHRyYXAgZm9yIGhhcmR3YXJlIGNvcnJlY3RlZCBFQ0MgZXJyb3JzLiAgU3lzdGVtIGJ1cworICogcmVhZHMgcmVzdWx0aW5nIGluIGEgaGFyZHdhcmUgY29ycmVjdGVkIGRhdGEgb3IgTVRBRyBFQ0MgZXJyb3Igd2lsbCBnZW5lcmF0ZSBhbgorICogRUNDX2Vycm9yIGRpc3J1cHRpbmcgdHJhcCB3aXRoIHRoaXMgYml0IGVuYWJsZWQuCisgKgorICogVGhpcyBzYW1lIHRyYXAgd2lsbCBhbHNvIGJlIGdlbmVyYXRlZCB3aGVuIGEgaGFyZHdhcmUgY29ycmVjdGVkIEVDQyBlcnJvciByZXN1bHRzCisgKiBkdXJpbmcgc3RvcmUgbWVyZ2UsIHdyaXRlYmFjaywgYW5kIGNvcHlvdXQgb3BlcmF0aW9ucy4KKyAqLworCisvKiBJbiBnZW5lcmFsLCBpZiB0aGUgdHJhcCBlbmFibGUgYml0cyBhYm92ZSBhcmUgZGlzYWJsZWQgdGhlIEFGU1IgYml0cyB3aWxsIHN0aWxsCisgKiBsb2cgdGhlIGV2ZW50cyBldmVuIHRob3VnaCB0aGUgdHJhcCB3aWxsIG5vdCBiZSBnZW5lcmF0ZWQgYnkgdGhlIHByb2Nlc3Nvci4KKyAqLworCisjZW5kaWYgLyogX1NQQVJDNjRfRVNUQVRFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvZmJpby5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9mYmlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTAwMDI2ZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvZmJpby5oCkBAIC0wLDAgKzEsMzAyIEBACisjaWZuZGVmIF9fTElOVVhfRkJJT19ICisjZGVmaW5lIF9fTElOVVhfRkJJT19ICisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorCisvKiBDb25zdGFudHMgdXNlZCBmb3IgZmJpbyBTdW5PUyBjb21wYXRpYmlsaXR5ICovCisvKiAoQykgMTk5NiBNaWd1ZWwgZGUgSWNhemEgKi8KKworLyogRnJhbWUgYnVmZmVyIHR5cGVzICovCisjZGVmaW5lIEZCVFlQRV9OT1RZUEUgICAgICAgICAgIC0xCisjZGVmaW5lIEZCVFlQRV9TVU4xQlcgICAgICAgICAgIDAgICAvKiBtb25vICovCisjZGVmaW5lIEZCVFlQRV9TVU4xQ09MT1IgICAgICAgIDEgCisjZGVmaW5lIEZCVFlQRV9TVU4yQlcgICAgICAgICAgIDIgCisjZGVmaW5lIEZCVFlQRV9TVU4yQ09MT1IgICAgICAgIDMgCisjZGVmaW5lIEZCVFlQRV9TVU4yR1AgICAgICAgICAgIDQgCisjZGVmaW5lIEZCVFlQRV9TVU41Q09MT1IgICAgICAgIDUgCisjZGVmaW5lIEZCVFlQRV9TVU4zQ09MT1IgICAgICAgIDYgCisjZGVmaW5lIEZCVFlQRV9NRU1DT0xPUiAgICAgICAgIDcgCisjZGVmaW5lIEZCVFlQRV9TVU40Q09MT1IgICAgICAgIDggCisgCisjZGVmaW5lIEZCVFlQRV9OT1RTVU4xICAgICAgICAgIDkgCisjZGVmaW5lIEZCVFlQRV9OT1RTVU4yICAgICAgICAgIDEwCisjZGVmaW5lIEZCVFlQRV9OT1RTVU4zICAgICAgICAgIDExCisgCisjZGVmaW5lIEZCVFlQRV9TVU5GQVNUX0NPTE9SICAgIDEyICAvKiBjZzYgKi8KKyNkZWZpbmUgRkJUWVBFX1NVTlJPUF9DT0xPUiAgICAgMTMKKyNkZWZpbmUgRkJUWVBFX1NVTkZCX1ZJREVPICAgICAgMTQKKyNkZWZpbmUgRkJUWVBFX1NVTkdJRkIgICAgICAgICAgMTUKKyNkZWZpbmUgRkJUWVBFX1NVTkdQTEFTICAgICAgICAgMTYKKyNkZWZpbmUgRkJUWVBFX1NVTkdQMyAgICAgICAgICAgMTcKKyNkZWZpbmUgRkJUWVBFX1NVTkdUICAgICAgICAgICAgMTgKKyNkZWZpbmUgRkJUWVBFX1NVTkxFTyAgICAgICAgICAgMTkgICAgICAvKiB6eCBMZW8gY2FyZCAqLworI2RlZmluZSBGQlRZUEVfTURJQ09MT1IgICAgICAgICAyMCAgICAgIC8qIGNnMTQgKi8KKyNkZWZpbmUgRkJUWVBFX1RDWENPTE9SCQkyMQkvKiBTVU5XLHRjeCBjYXJkICovCisKKyNkZWZpbmUgRkJUWVBFX0xBU1RQTFVTT05FICAgICAgMjEJLyogVGhpcyBpcyBub3QgbGFzdCArIDEgaW4gZmFjdC4uLiAqLworCisvKiBEb2VzIG5vdCBzZWVtIHRvIGJlIGxpc3RlZCBpbiB0aGUgU3VuIGZpbGUgZWl0aGVyICovCisjZGVmaW5lIEZCVFlQRV9DUkVBVE9SICAgICAgICAgIDIyCisjZGVmaW5lIEZCVFlQRV9QQ0lfSUdBMTY4MgkyMworI2RlZmluZSBGQlRZUEVfUDkxMDBDT0xPUgkyNAorCisjZGVmaW5lIEZCVFlQRV9QQ0lfR0VORVJJQwkxMDAwCisjZGVmaW5lIEZCVFlQRV9QQ0lfTUFDSDY0CTEwMDEKKworLyogZmJpbyBpb2N0bHMgKi8KKy8qIFJldHVybmVkIGJ5IEZCSU9HVFlQRSAqLworc3RydWN0ICBmYnR5cGUgeworICAgICAgICBpbnQgICAgIGZiX3R5cGU7ICAgICAgICAvKiBmYiB0eXBlLCBzZWUgYWJvdmUgKi8KKyAgICAgICAgaW50ICAgICBmYl9oZWlnaHQ7ICAgICAgLyogcGl4ZWxzICovCisgICAgICAgIGludCAgICAgZmJfd2lkdGg7ICAgICAgIC8qIHBpeGVscyAqLworICAgICAgICBpbnQgICAgIGZiX2RlcHRoOworICAgICAgICBpbnQgICAgIGZiX2Ntc2l6ZTsgICAgICAvKiBjb2xvciBtYXAgZW50cmllcyAqLworICAgICAgICBpbnQgICAgIGZiX3NpemU7ICAgICAgICAvKiBmYiBzaXplIGluIGJ5dGVzICovCit9OworI2RlZmluZSBGQklPR1RZUEUgX0lPUignRicsIDAsIHN0cnVjdCBmYnR5cGUpCisKK3N0cnVjdCAgZmJjbWFwIHsKKyAgICAgICAgaW50ICAgICAgICAgICAgIGluZGV4OyAgICAgICAgICAvKiBmaXJzdCBlbGVtZW50ICgwIG9yaWdpbikgKi8KKyAgICAgICAgaW50ICAgICAgICAgICAgIGNvdW50OworICAgICAgICB1bnNpZ25lZCBjaGFyICAgX191c2VyICpyZWQ7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgICBfX3VzZXIgKmdyZWVuOworICAgICAgICB1bnNpZ25lZCBjaGFyICAgX191c2VyICpibHVlOworfTsKKworI2lmZGVmIF9fS0VSTkVMX18KKyNkZWZpbmUgRkJJT1BVVENNQVBfU1BBUkMgX0lPVygnRicsIDMsIHN0cnVjdCBmYmNtYXApCisjZGVmaW5lIEZCSU9HRVRDTUFQX1NQQVJDIF9JT1coJ0YnLCA0LCBzdHJ1Y3QgZmJjbWFwKQorI2Vsc2UKKyNkZWZpbmUgRkJJT1BVVENNQVAgX0lPVygnRicsIDMsIHN0cnVjdCBmYmNtYXApCisjZGVmaW5lIEZCSU9HRVRDTUFQIF9JT1coJ0YnLCA0LCBzdHJ1Y3QgZmJjbWFwKQorI2VuZGlmCisKKy8qICMgb2YgZGV2aWNlIHNwZWNpZmljIHZhbHVlcyAqLworI2RlZmluZSBGQl9BVFRSX05ERVZTUEVDSUZJQyAgICA4CisvKiAjIG9mIHBvc3NpYmxlIGVtdWxhdGlvbnMgKi8KKyNkZWZpbmUgRkJfQVRUUl9ORU1VVFlQRVMgICAgICAgNAorIAorc3RydWN0IGZic2F0dHIgeworICAgICAgICBpbnQgICAgIGZsYWdzOworICAgICAgICBpbnQgICAgIGVtdV90eXBlOwkvKiAtMSBpZiBub25lICovCisgICAgICAgIGludCAgICAgZGV2X3NwZWNpZmljW0ZCX0FUVFJfTkRFVlNQRUNJRklDXTsKK307CisgCitzdHJ1Y3QgZmJnYXR0ciB7CisgICAgICAgIGludCAgICAgcmVhbF90eXBlOwkvKiByZWFsIGZyYW1lIGJ1ZmZlciB0eXBlICovCisgICAgICAgIGludCAgICAgb3duZXI7CQkvKiB1bmtub3duICovCisgICAgICAgIHN0cnVjdCBmYnR5cGUgZmJ0eXBlOwkvKiByZWFsIGZyYW1lIGJ1ZmZlciBmYnR5cGUgKi8KKyAgICAgICAgc3RydWN0IGZic2F0dHIgc2F0dHI7ICAgCisgICAgICAgIGludCAgICAgZW11X3R5cGVzW0ZCX0FUVFJfTkVNVVRZUEVTXTsgLyogc3VwcG9ydGVkIGVtdWxhdGlvbnMgKi8KK307CisjZGVmaW5lIEZCSU9TQVRUUiAgX0lPVygnRicsIDUsIHN0cnVjdCBmYmdhdHRyKSAvKiBVbnN1cHBvcnRlZDogKi8KKyNkZWZpbmUgRkJJT0dBVFRSICBfSU9SKCdGJywgNiwgc3RydWN0IGZiZ2F0dHIpCS8qIHN1cHBvcnRlZCAqLworCisjZGVmaW5lIEZCSU9TVklERU8gX0lPVygnRicsIDcsIGludCkKKyNkZWZpbmUgRkJJT0dWSURFTyBfSU9SKCdGJywgOCwgaW50KQorCitzdHJ1Y3QgZmJjdXJzb3IgeworICAgICAgICBzaG9ydCBzZXQ7ICAgICAgICAgICAgICAvKiB3aGF0IHRvIHNldCwgY2hvb3NlIGZyb20gdGhlIGxpc3QgYWJvdmUgKi8KKyAgICAgICAgc2hvcnQgZW5hYmxlOyAgICAgICAgICAgLyogY3Vyc29yIG9uL29mZiAqLworICAgICAgICBzdHJ1Y3QgZmJjdXJwb3MgcG9zOyAgICAvKiBjdXJzb3IgcG9zaXRpb24gKi8KKyAgICAgICAgc3RydWN0IGZiY3VycG9zIGhvdDsgICAgLyogY3Vyc29yIGhvdCBzcG90ICovCisgICAgICAgIHN0cnVjdCBmYmNtYXAgY21hcDsgICAgIC8qIGNvbG9yIG1hcCBpbmZvICovCisgICAgICAgIHN0cnVjdCBmYmN1cnBvcyBzaXplOyAgIC8qIGN1cnNvciBiaXQgbWFwIHNpemUgKi8KKyAgICAgICAgY2hhciBfX3VzZXIgKmltYWdlOyAgICAgLyogY3Vyc29yIGltYWdlIGJpdHMgKi8KKyAgICAgICAgY2hhciBfX3VzZXIgKm1hc2s7ICAgICAgLyogY3Vyc29yIG1hc2sgYml0cyAqLworfTsKKworLyogc2V0L2dldCBjdXJzb3IgYXR0cmlidXRlcy9zaGFwZSAqLworI2RlZmluZSBGQklPU0NVUlNPUiAgICAgX0lPVygnRicsIDI0LCBzdHJ1Y3QgZmJjdXJzb3IpCisjZGVmaW5lIEZCSU9HQ1VSU09SICAgICBfSU9XUignRicsIDI1LCBzdHJ1Y3QgZmJjdXJzb3IpCisgCisvKiBzZXQvZ2V0IGN1cnNvciBwb3NpdGlvbiAqLworI2RlZmluZSBGQklPU0NVUlBPUyAgICAgX0lPVygnRicsIDI2LCBzdHJ1Y3QgZmJjdXJwb3MpCisjZGVmaW5lIEZCSU9HQ1VSUE9TICAgICBfSU9XKCdGJywgMjcsIHN0cnVjdCBmYmN1cnBvcykKKyAKKy8qIGdldCBtYXggY3Vyc29yIHNpemUgKi8KKyNkZWZpbmUgRkJJT0dDVVJNQVggICAgIF9JT1IoJ0YnLCAyOCwgc3RydWN0IGZiY3VycG9zKQorCisvKiB3aWQgbWFuaXB1bGF0aW9uICovCitzdHJ1Y3QgZmJfd2lkX2FsbG9jIHsKKyNkZWZpbmUgRkJfV0lEX1NIQVJFRF84CQkwCisjZGVmaW5lIEZCX1dJRF9TSEFSRURfMjQJMQorI2RlZmluZSBGQl9XSURfREJMXzgJCTIKKyNkZWZpbmUgRkJfV0lEX0RCTF8yNAkJMworCV9fdTMyCXdhX3R5cGU7CisJX19zMzIJd2FfaW5kZXg7CS8qIFNldCBvbiByZXR1cm4gKi8KKwlfX3UzMgl3YV9jb3VudDsJCit9Oworc3RydWN0IGZiX3dpZF9pdGVtIHsKKwlfX3UzMgl3aV90eXBlOworCV9fczMyCXdpX2luZGV4OworCV9fdTMyCXdpX2F0dHJzOworCV9fdTMyCXdpX3ZhbHVlc1szMl07Cit9Oworc3RydWN0IGZiX3dpZF9saXN0IHsKKwlfX3UzMgl3bF9mbGFnczsKKwlfX3UzMgl3bF9jb3VudDsKKwlzdHJ1Y3QgZmJfd2lkX2l0ZW0JKndsX2xpc3Q7Cit9OworCisjZGVmaW5lIEZCSU9fV0lEX0FMTE9DCV9JT1dSKCdGJywgMzAsIHN0cnVjdCBmYl93aWRfYWxsb2MpCisjZGVmaW5lIEZCSU9fV0lEX0ZSRUUJX0lPVygnRicsIDMxLCBzdHJ1Y3QgZmJfd2lkX2FsbG9jKQorI2RlZmluZSBGQklPX1dJRF9QVVQJX0lPVygnRicsIDMyLCBzdHJ1Y3QgZmJfd2lkX2xpc3QpCisjZGVmaW5lIEZCSU9fV0lEX0dFVAlfSU9XUignRicsIDMzLCBzdHJ1Y3QgZmJfd2lkX2xpc3QpCisKKy8qIENyZWF0b3IgaW9jdGxzICovCisjZGVmaW5lIEZGQl9JT0NUTAkoJ0YnPDw4KQorI2RlZmluZSBGRkJfU1lTX0lORk8JCShGRkJfSU9DVEx8ODApCisjZGVmaW5lIEZGQl9DTFVUUkVBRAkJKEZGQl9JT0NUTHw4MSkKKyNkZWZpbmUgRkZCX0NMVVRQT1NUCQkoRkZCX0lPQ1RMfDgyKQorI2RlZmluZSBGRkJfU0VURElBR01PREUJCShGRkJfSU9DVEx8ODMpCisjZGVmaW5lIEZGQl9HRVRNT05JVE9SSUQJKEZGQl9JT0NUTHw4NCkKKyNkZWZpbmUgRkZCX0dFVFZJREVPTU9ERQkoRkZCX0lPQ1RMfDg1KQorI2RlZmluZSBGRkJfU0VUVklERU9NT0RFCShGRkJfSU9DVEx8ODYpCisjZGVmaW5lIEZGQl9TRVRTRVJWRVIJCShGRkJfSU9DVEx8ODcpCisjZGVmaW5lIEZGQl9TRVRPVkNUTAkJKEZGQl9JT0NUTHw4OCkKKyNkZWZpbmUgRkZCX0dFVE9WQ1RMCQkoRkZCX0lPQ1RMfDg5KQorI2RlZmluZSBGRkJfR0VUU0FYTlVNCQkoRkZCX0lPQ1RMfDkwKQorI2RlZmluZSBGRkJfRkJERUJVRwkJKEZGQl9JT0NUTHw5MSkKKworLyogQ2cxNCBpb2N0bHMgKi8KKyNkZWZpbmUgTURJX0lPQ1RMICAgICAgICAgICgnTSc8PDgpCisjZGVmaW5lIE1ESV9SRVNFVCAgICAgICAgICAoTURJX0lPQ1RMfDEpCisjZGVmaW5lIE1ESV9HRVRfQ0ZHSU5GTyAgICAoTURJX0lPQ1RMfDIpCisjZGVmaW5lIE1ESV9TRVRfUElYRUxNT0RFICAoTURJX0lPQ1RMfDMpCisjICAgIGRlZmluZSBNRElfMzJfUElYICAgICAzMgorIyAgICBkZWZpbmUgTURJXzE2X1BJWCAgICAgMTYKKyMgICAgZGVmaW5lIE1ESV84X1BJWCAgICAgIDgKKworc3RydWN0IG1kaV9jZmdpbmZvIHsKKwlpbnQgICAgIG1kaV9uY2x1dHM7ICAgICAvKiBOdW1iZXIgb2YgaW1wbGVtZW50ZWQgQ0xVVHMgaW4gdGhpcyBNREkgKi8KKyAgICAgICAgaW50ICAgICBtZGlfdHlwZTsgICAgICAgLyogRkJUWVBFIG5hbWUgKi8KKyAgICAgICAgaW50ICAgICBtZGlfaGVpZ2h0OyAgICAgLyogaGVpZ2h0ICovCisgICAgICAgIGludCAgICAgbWRpX3dpZHRoOyAgICAgIC8qIHdpZGh0ICovCisgICAgICAgIGludCAgICAgbWRpX3NpemU7ICAgICAgIC8qIGF2YWlsYWJsZSByYW0gKi8KKyAgICAgICAgaW50ICAgICBtZGlfbW9kZTsgICAgICAgLyogOGJwcCwgMTZicHAgb3IgMzJicHAgKi8KKyAgICAgICAgaW50ICAgICBtZGlfcGl4ZnJlcTsgICAgLyogcGl4ZWwgY2xvY2sgKGZyb20gUFJPTSkgKi8KK307CisKKy8qIFNwYXJjTGludXggc3BlY2lmaWMgaW9jdGwgZm9yIHRoZSBNREksIHNob3VsZCBiZSByZXBsYWNlZCBmb3IKKyAqIHRoZSBTRVRfWExVVC9TRVRfQ0xVVG4gaW9jdGxzIGluc3RlYWQKKyAqLworI2RlZmluZSBNRElfQ0xFQVJfWExVVCAgICAgICAoTURJX0lPQ1RMfDkpCisKKy8qIGxlbyAmIGZmYiBpb2N0bHMgKi8KK3N0cnVjdCBmYl9jbHV0X2FsbG9jIHsKKwlfX3UzMgljbHV0aWQ7CS8qIFNldCBvbiByZXR1cm4gKi8KKyAJX191MzIJZmxhZzsKKyAJX191MzIJaW5kZXg7Cit9OworCitzdHJ1Y3QgZmJfY2x1dCB7CisjZGVmaW5lIEZCX0NMVVRfV0FJVAkweDAwMDAwMDAxCS8qIE5vdCB5ZXQgaW1wbGVtZW50ZWQgKi8KKyAJX191MzIJZmxhZzsKKyAJX191MzIJY2x1dGlkOworIAlfX3UzMglvZmZzZXQ7CisgCV9fdTMyCWNvdW50OworIAljaGFyICoJcmVkOworIAljaGFyICoJZ3JlZW47CisgCWNoYXIgKglibHVlOworfTsKKworc3RydWN0IGZiX2NsdXQzMiB7CisgCV9fdTMyCWZsYWc7CisgCV9fdTMyCWNsdXRpZDsKKyAJX191MzIJb2Zmc2V0OworIAlfX3UzMgljb3VudDsKKyAJX191MzIJcmVkOworIAlfX3UzMglncmVlbjsKKyAJX191MzIJYmx1ZTsKK307CisKKyNkZWZpbmUgTEVPX0NMVVRBTExPQwlfSU9XUignTCcsIDUzLCBzdHJ1Y3QgZmJfY2x1dF9hbGxvYykKKyNkZWZpbmUgTEVPX0NMVVRGUkVFCV9JT1coJ0wnLCA1NCwgc3RydWN0IGZiX2NsdXRfYWxsb2MpCisjZGVmaW5lIExFT19DTFVUUkVBRAlfSU9XKCdMJywgNTUsIHN0cnVjdCBmYl9jbHV0KQorI2RlZmluZSBMRU9fQ0xVVFBPU1QJX0lPVygnTCcsIDU2LCBzdHJ1Y3QgZmJfY2x1dCkKKyNkZWZpbmUgTEVPX1NFVEdBTU1BCV9JT1coJ0wnLCA2OCwgaW50KSAvKiBOb3QgeWV0IGltcGxlbWVudGVkICovCisjZGVmaW5lIExFT19HRVRHQU1NQQlfSU9SKCdMJywgNjksIGludCkgLyogTm90IHlldCBpbXBsZW1lbnRlZCAqLworCisjaWZkZWYgX19LRVJORUxfXworLyogQWRkcmVzc2VzIG9uIHRoZSBmZCBvZiBhIGNnc2l4IHRoYXQgYXJlIG1hcHBhYmxlICovCisjZGVmaW5lIENHNl9GQkMgICAgMHg3MDAwMDAwMAorI2RlZmluZSBDRzZfVEVDICAgIDB4NzAwMDEwMDAKKyNkZWZpbmUgQ0c2X0JUUkVHUyAweDcwMDAyMDAwCisjZGVmaW5lIENHNl9GSEMgICAgMHg3MDAwNDAwMAorI2RlZmluZSBDRzZfVEhDICAgIDB4NzAwMDUwMDAKKyNkZWZpbmUgQ0c2X1JPTSAgICAweDcwMDA2MDAwCisjZGVmaW5lIENHNl9SQU0gICAgMHg3MDAxNjAwMAorI2RlZmluZSBDRzZfREhDICAgIDB4ODAwMDAwMDAKKworI2RlZmluZSBDRzNfTU1BUF9PRkZTRVQgMHg0MDAwMDAwCisKKy8qIEFkZHJlc3NlcyBvbiB0aGUgZmQgb2YgYSB0Y3ggdGhhdCBhcmUgbWFwcGFibGUgKi8KKyNkZWZpbmUgVENYX1JBTThCSVQgICAJCTB4MDAwMDAwMDAKKyNkZWZpbmUgVENYX1JBTTI0QklUICAgCQkweDAxMDAwMDAwCisjZGVmaW5lIFRDWF9VTkszICAgCQkweDEwMDAwMDAwCisjZGVmaW5lIFRDWF9VTks0ICAgCQkweDIwMDAwMDAwCisjZGVmaW5lIFRDWF9DT05UUk9MUExBTkUgICAJMHgyODAwMDAwMAorI2RlZmluZSBUQ1hfVU5LNiAgIAkJMHgzMDAwMDAwMAorI2RlZmluZSBUQ1hfVU5LNyAgIAkJMHgzODAwMDAwMAorI2RlZmluZSBUQ1hfVEVDICAgIAkJMHg3MDAwMDAwMAorI2RlZmluZSBUQ1hfQlRSRUdTIAkJMHg3MDAwMjAwMAorI2RlZmluZSBUQ1hfVEhDICAgIAkJMHg3MDAwNDAwMAorI2RlZmluZSBUQ1hfREhDICAgIAkJMHg3MDAwODAwMAorI2RlZmluZSBUQ1hfQUxUCSAgIAkJMHg3MDAwYTAwMAorI2RlZmluZSBUQ1hfU1lOQyAgIAkJMHg3MDAwZTAwMAorI2RlZmluZSBUQ1hfVU5LMiAgICAJCTB4NzAwMTAwMDAKKworLyogQ0cxNCBkZWZpbml0aW9ucyAqLworCisvKiBPZmZzZXRzIGludG8gdGhlIE9CSU8gc3BhY2U6ICovCisjZGVmaW5lIENHMTRfUkVHUyAgICAgICAgMCAgICAgICAvKiByZWdpc3RlcnMgKi8KKyNkZWZpbmUgQ0cxNF9DVVJTT1JSRUdTICAweDEwMDAgIC8qIGN1cnNvciByZWdpc3RlcnMgKi8KKyNkZWZpbmUgQ0cxNF9EQUNSRUdTICAgICAweDIwMDAgIC8qIERBQyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgQ0cxNF9YTFVUICAgICAgICAweDMwMDAgIC8qIFggTG9vayBVcCBUYWJsZSAtLSA/Pz8gKi8KKyNkZWZpbmUgQ0cxNF9DTFVUMSAgICAgICAweDQwMDAgIC8qIENvbG9yIExvb2sgVXAgVGFibGUgKi8KKyNkZWZpbmUgQ0cxNF9DTFVUMiAgICAgICAweDUwMDAgIC8qIENvbG9yIExvb2sgVXAgVGFibGUgKi8KKyNkZWZpbmUgQ0cxNF9DTFVUMyAgICAgICAweDYwMDAgIC8qIENvbG9yIExvb2sgVXAgVGFibGUgKi8KKyNkZWZpbmUgQ0cxNF9BVVRPCSAweGYwMDAKKworI2VuZGlmIC8qIEtFUk5FTCAqLworCisvKiBUaGVzZSBhcmUgZXhwb3J0ZWQgdG8gdXNlcmxhbmQgZm9yIGFwcGxpY2F0aW9ucyB0byB1c2UgKi8KKy8qIE1hcHBhYmxlIG9mZnNldHMgZm9yIHRoZSBjZzE0OiBjb250cm9sIHJlZ2lzdGVycyAqLworI2RlZmluZSBNRElfRElSRUNUX01BUCAweDEwMDAwMDAwCisjZGVmaW5lIE1ESV9DVExSRUdfTUFQIDB4MjAwMDAwMDAKKyNkZWZpbmUgTURJX0NVUlNPUl9NQVAgMHgzMDAwMDAwMAorI2RlZmluZSBNRElfU0hEV19WUlRfTUFQIDB4NDAwMDAwMDAKKworLyogTWFwcGFibGUgb2Zmc2V0cyBmb3IgdGhlIGNnMTQ6IGZyYW1lIGJ1ZmZlciByZXNvbHV0aW9ucyAqLworLyogMzIgYml0cyAqLworI2RlZmluZSBNRElfQ0hVTktZX1hCR1JfTUFQIDB4NTAwMDAwMDAKKyNkZWZpbmUgTURJX0NIVU5LWV9CR1JfTUFQIDB4NjAwMDAwMDAKKworLyogMTYgYml0cyAqLworI2RlZmluZSBNRElfUExBTkFSX1gxNl9NQVAgMHg3MDAwMDAwMAorI2RlZmluZSBNRElfUExBTkFSX0MxNl9NQVAgMHg4MDAwMDAwMAorCisvKiA4IGJpdCBpcyBkb25lIGFzIENHMyBNTUFQIG9mZnNldCAqLworLyogMzIgYml0cywgcGxhbmFyICovCisjZGVmaW5lIE1ESV9QTEFOQVJfWDMyX01BUCAweDkwMDAwMDAwCisjZGVmaW5lIE1ESV9QTEFOQVJfQjMyX01BUCAweGEwMDAwMDAwCisjZGVmaW5lIE1ESV9QTEFOQVJfRzMyX01BUCAweGIwMDAwMDAwCisjZGVmaW5lIE1ESV9QTEFOQVJfUjMyX01BUCAweGMwMDAwMDAwCisKKy8qIE1hcHBhYmxlIG9mZnNldHMgb24gbGVvICovCisjZGVmaW5lIExFT19TUzBfTUFQICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBMRU9fTENfU1MwX1VTUl9NQVAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgTEVPX0xEX1NTMF9NQVAgICAgICAgICAweDAwODAxMDAwCisjZGVmaW5lIExFT19MWF9DVVJTT1JfTUFQICAgICAgMHgwMDgwMjAwMAorI2RlZmluZSBMRU9fU1MxX01BUCAgICAgICAgICAgIDB4MDA4MDMwMDAKKyNkZWZpbmUgTEVPX0xDX1NTMV9VU1JfTUFQICAgICAweDAxMDAzMDAwCisjZGVmaW5lIExFT19MRF9TUzFfTUFQICAgICAgICAgMHgwMTAwNDAwMAorI2RlZmluZSBMRU9fVU5LX01BUCAgICAgICAgICAgIDB4MDEwMDUwMDAKKyNkZWZpbmUgTEVPX0xYX0tSTl9NQVAgICAgICAgICAweDAxMDA2MDAwCisjZGVmaW5lIExFT19MQ19TUzBfS1JOX01BUCAgICAgMHgwMTAwNzAwMAorI2RlZmluZSBMRU9fTENfU1MxX0tSTl9NQVAgICAgIDB4MDEwMDgwMDAKKyNkZWZpbmUgTEVPX0xEX0dCTF9NQVAgICAgICAgICAweDAxMDA5MDAwCisjZGVmaW5lIExFT19VTksyX01BUCAgICAgICAgICAgMHgwMTAwYTAwMAorCisjZW5kaWYgLyogX19MSU5VWF9GQklPX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvZmNudGwuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvZmNudGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzZkZWYwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9mY250bC5oCkBAIC0wLDAgKzEsNzggQEAKKy8qICRJZDogZmNudGwuaCx2IDEuMTIgMjAwMS8wOS8yMCAwMDozNTozNCBkYXZlbSBFeHAgJCAqLworI2lmbmRlZiBfU1BBUkM2NF9GQ05UTF9ICisjZGVmaW5lIF9TUEFSQzY0X0ZDTlRMX0gKKworLyogb3Blbi9mY250bCAtIE9fU1lOQyBpcyBvbmx5IGltcGxlbWVudGVkIG9uIGJsb2NrcyBkZXZpY2VzIGFuZCBvbiBmaWxlcworICAgbG9jYXRlZCBvbiBhbiBleHQyIGZpbGUgc3lzdGVtICovCisjZGVmaW5lIE9fUkRPTkxZCTB4MDAwMAorI2RlZmluZSBPX1dST05MWQkweDAwMDEKKyNkZWZpbmUgT19SRFdSCQkweDAwMDIKKyNkZWZpbmUgT19BQ0NNT0RFCTB4MDAwMworI2RlZmluZSBPX05ERUxBWQkweDAwMDQKKyNkZWZpbmUgT19BUFBFTkQJMHgwMDA4CisjZGVmaW5lIEZBU1lOQwkJMHgwMDQwCS8qIGZjbnRsLCBmb3IgQlNEIGNvbXBhdGliaWxpdHkgKi8KKyNkZWZpbmUgT19DUkVBVAkJMHgwMjAwCS8qIG5vdCBmY250bCAqLworI2RlZmluZSBPX1RSVU5DCQkweDA0MDAJLyogbm90IGZjbnRsICovCisjZGVmaW5lIE9fRVhDTAkJMHgwODAwCS8qIG5vdCBmY250bCAqLworI2RlZmluZSBPX1NZTkMJCTB4MjAwMAorI2RlZmluZSBPX05PTkJMT0NLCTB4NDAwMAorI2RlZmluZSBPX05PQ1RUWQkweDgwMDAJLyogbm90IGZjbnRsICovCisjZGVmaW5lIE9fRElSRUNUT1JZCTB4MTAwMDAJLyogbXVzdCBiZSBhIGRpcmVjdG9yeSAqLworI2RlZmluZSBPX05PRk9MTE9XCTB4MjAwMDAJLyogZG9uJ3QgZm9sbG93IGxpbmtzICovCisjZGVmaW5lIE9fTEFSR0VGSUxFCTB4NDAwMDAKKyNkZWZpbmUgT19ESVJFQ1QgICAgICAgIDB4MTAwMDAwIC8qIGRpcmVjdCBkaXNrIGFjY2VzcyBoaW50ICovCisjZGVmaW5lIE9fTk9BVElNRQkweDIwMDAwMAorCisKKyNkZWZpbmUgRl9EVVBGRAkJMAkvKiBkdXAgKi8KKyNkZWZpbmUgRl9HRVRGRAkJMQkvKiBnZXQgY2xvc2Vfb25fZXhlYyAqLworI2RlZmluZSBGX1NFVEZECQkyCS8qIHNldC9jbGVhciBjbG9zZV9vbl9leGVjICovCisjZGVmaW5lIEZfR0VURkwJCTMJLyogZ2V0IGZpbGUtPmZfZmxhZ3MgKi8KKyNkZWZpbmUgRl9TRVRGTAkJNAkvKiBzZXQgZmlsZS0+Zl9mbGFncyAqLworI2RlZmluZSBGX0dFVE9XTgk1CS8qICBmb3Igc29ja2V0cy4gKi8KKyNkZWZpbmUgRl9TRVRPV04JNgkvKiAgZm9yIHNvY2tldHMuICovCisjZGVmaW5lIEZfR0VUTEsJCTcKKyNkZWZpbmUgRl9TRVRMSwkJOAorI2RlZmluZSBGX1NFVExLVwk5CisjZGVmaW5lIEZfU0VUU0lHCTEwCS8qICBmb3Igc29ja2V0cy4gKi8KKyNkZWZpbmUgRl9HRVRTSUcJMTEJLyogIGZvciBzb2NrZXRzLiAqLworCisvKiBmb3IgRl9bR0VUfFNFVF1GTCAqLworI2RlZmluZSBGRF9DTE9FWEVDCTEJLyogYWN0dWFsbHkgYW55dGhpbmcgd2l0aCBsb3cgYml0IHNldCBnb2VzICovCisKKy8qIGZvciBwb3NpeCBmY250bCgpIGFuZCBsb2NrZigpICovCisjZGVmaW5lIEZfUkRMQ0sJCTEKKyNkZWZpbmUgRl9XUkxDSwkJMgorI2RlZmluZSBGX1VOTENLCQkzCisKKy8qIGZvciBvbGQgaW1wbGVtZW50YXRpb24gb2YgYnNkIGZsb2NrICgpICovCisjZGVmaW5lIEZfRVhMQ0sJCTQJLyogb3IgMyAqLworI2RlZmluZSBGX1NITENLCQk4CS8qIG9yIDQgKi8KKworLyogZm9yIGxlYXNlcyAqLworI2RlZmluZSBGX0lOUFJPR1JFU1MJMTYKKworLyogb3BlcmF0aW9ucyBmb3IgYnNkIGZsb2NrKCksIGFsc28gdXNlZCBieSB0aGUga2VybmVsIGltcGxlbWVudGF0aW9uICovCisjZGVmaW5lIExPQ0tfU0gJCTEJLyogc2hhcmVkIGxvY2sgKi8KKyNkZWZpbmUgTE9DS19FWAkJMgkvKiBleGNsdXNpdmUgbG9jayAqLworI2RlZmluZSBMT0NLX05CCQk0CS8qIG9yJ2Qgd2l0aCBvbmUgb2YgdGhlIGFib3ZlIHRvIHByZXZlbnQKKwkJCQkgICBibG9ja2luZyAqLworI2RlZmluZSBMT0NLX1VOCQk4CS8qIHJlbW92ZSBsb2NrICovCisKKyNkZWZpbmUgTE9DS19NQU5ECTMyCS8qIFRoaXMgaXMgYSBtYW5kYXRvcnkgZmxvY2sgKi8KKyNkZWZpbmUgTE9DS19SRUFECTY0CS8qIC4uLiBXaGljaCBhbGxvd3MgY29uY3VycmVudCByZWFkIG9wZXJhdGlvbnMgKi8KKyNkZWZpbmUgTE9DS19XUklURQkxMjgJLyogLi4uIFdoaWNoIGFsbG93cyBjb25jdXJyZW50IHdyaXRlIG9wZXJhdGlvbnMgKi8KKyNkZWZpbmUgTE9DS19SVwkJMTkyCS8qIC4uLiBXaGljaCBhbGxvd3MgY29uY3VycmVudCByZWFkICYgd3JpdGUgb3BzICovCisKK3N0cnVjdCBmbG9jayB7CisJc2hvcnQgbF90eXBlOworCXNob3J0IGxfd2hlbmNlOworCW9mZl90IGxfc3RhcnQ7CisJb2ZmX3QgbF9sZW47CisJcGlkX3QgbF9waWQ7CisJc2hvcnQgX191bnVzZWQ7Cit9OworCisjZGVmaW5lIEZfTElOVVhfU1BFQ0lGSUNfQkFTRQkxMDI0CisKKyNlbmRpZiAvKiAhKF9TUEFSQzY0X0ZDTlRMX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2ZoYy5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9maGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjllYWEyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9maGMuaApAQCAtMCwwICsxLDEzMiBAQAorLyogJElkOiBmaGMuaCx2IDEuNSAxOTk5LzA5LzIxIDE0OjM5OjI5IGRhdmVtIEV4cCAkCisgKiBmaGMuaDogU3RydWN0dXJlcyBmb3IgY2VudHJhbC9maGMgcHNldWRvIGRyaXZlciBvbiBTdW5maXJlL1N0YXJmaXJlL1dpbGRmaXJlLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NywgMTk5OSBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQHJlZGhhdC5jb20pCisgKi8KKworI2lmbmRlZiBfU1BBUkM2NF9GSENfSAorI2RlZmluZSBfU1BBUkM2NF9GSENfSAorCisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKworI2luY2x1ZGUgPGFzbS9vcGxpYi5oPgorI2luY2x1ZGUgPGFzbS91cGEuaD4KKworc3RydWN0IGxpbnV4X2ZoYzsKKworLyogQ2xvY2sgYm9hcmQgcmVnaXN0ZXIgb2Zmc2V0cy4gKi8KKyNkZWZpbmUgQ0xPQ0tfQ1RSTAkweDAwVUwJLyogTWFpbiBjb250cm9sICovCisjZGVmaW5lIENMT0NLX1NUQVQxCTB4MTBVTAkvKiBTdGF0dXMgb25lICovCisjZGVmaW5lIENMT0NLX1NUQVQyCTB4MjBVTAkvKiBTdGF0dXMgdHdvICovCisjZGVmaW5lIENMT0NLX1BXUlNUQVQJMHgzMFVMCS8qIFBvd2VyIHN0YXR1cyAqLworI2RlZmluZSBDTE9DS19QV1JQUkVTCTB4NDBVTAkvKiBQb3dlciBwcmVzZW5jZSAqLworI2RlZmluZSBDTE9DS19URU1QCTB4NTBVTAkvKiBUZW1wZXJhdHVyZSAqLworI2RlZmluZSBDTE9DS19JUlFESUFHCTB4NjBVTAkvKiBJUlEgZGlhZ25vc3RpY3MgKi8KKyNkZWZpbmUgQ0xPQ0tfUFdSU1RBVDIJMHg3MFVMCS8qIFBvd2VyIHN0YXR1cyB0d28gKi8KKworI2RlZmluZSBDTE9DS19DVFJMX0xMRUQJCTB4MDQJLyogTGVmdCBMRUQsIDAgPT0gb24gKi8KKyNkZWZpbmUgQ0xPQ0tfQ1RSTF9NTEVECQkweDAyCS8qIE1pZCBMRUQsIDEgPT0gb24gKi8KKyNkZWZpbmUgQ0xPQ0tfQ1RSTF9STEVECQkweDAxCS8qIFJJZ2h0IExFRCwgMSA9PSBvbiAqLworCitzdHJ1Y3QgbGludXhfY2VudHJhbCB7CisJc3RydWN0IGxpbnV4X2ZoYwkJKmNoaWxkOworCXVuc2lnbmVkIGxvbmcJCQljZnJlZzsKKwl1bnNpZ25lZCBsb25nCQkJY2xrcmVnczsKKwl1bnNpZ25lZCBsb25nCQkJY2xrdmVyOworCWludAkJCQlzbG90czsKKwlpbnQJCQkJcHJvbV9ub2RlOworCWNoYXIJCQkJcHJvbV9uYW1lWzY0XTsKKworCXN0cnVjdCBsaW51eF9wcm9tX3JhbmdlcwljZW50cmFsX3Jhbmdlc1tQUk9NUkVHX01BWF07CisJaW50CQkJCW51bV9jZW50cmFsX3JhbmdlczsKK307CisKKy8qIEZpcmVob3NlIGNvbnRyb2xsZXIgcmVnaXN0ZXIgb2Zmc2V0cyAqLworc3RydWN0IGZoY19yZWdzIHsKKwl1bnNpZ25lZCBsb25nCQkJcHJlZ3M7CS8qIEZIQyBpbnRlcm5hbCByZWdzICovCisjZGVmaW5lIEZIQ19QUkVHU19JRAkweDAwVUwJLyogRkhDIElEICovCisjZGVmaW5lICBGSENfSURfVkVSUwkJMHhmMDAwMDAwMCAvKiBWZXJzaW9uIG9mIHRoaXMgRkhDCQkqLworI2RlZmluZSAgRkhDX0lEX1BBUlRJRAkJMHgwZmZmZjAwMCAvKiBQYXJ0IElEIGNvZGUgKDB4MGY5ZiA9PSBGSEMpCSovCisjZGVmaW5lICBGSENfSURfTUFOVUYJCTB4MDAwMDAwN2UgLyogTWFudWZhY3R1cmVyICgweDNlID09IFNVTidzIEpFREVDKSovCisjZGVmaW5lICBGSENfSURfUkVTVgkJMHgwMDAwMDAwMSAvKiBSZWFkIGFzIG9uZQkJCSovCisjZGVmaW5lIEZIQ19QUkVHU19SQ1MJMHgxMFVMCS8qIEZIQyBSZXNldCBDb250cm9sL1N0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSAgRkhDX1JDU19QT1IJCTB4ODAwMDAwMDAgLyogTGFzdCByZXNldCB3YXMgYSBwb3dlciBjeWNsZQkqLworI2RlZmluZSAgRkhDX1JDU19TUE9SCQkweDQwMDAwMDAwIC8qIExhc3QgcmVzZXQgd2FzIHN3IHBvd2VyIG9uIHJlc2V0CSovCisjZGVmaW5lICBGSENfUkNTX1NYSVIJCTB4MjAwMDAwMDAgLyogTGFzdCByZXNldCB3YXMgc3cgWElSIHJlc2V0CSovCisjZGVmaW5lICBGSENfUkNTX0JQT1IJCTB4MTAwMDAwMDAgLyogTGFzdCByZXNldCB3YXMgZHVlIHRvIFBPUiBidXR0b24JKi8KKyNkZWZpbmUgIEZIQ19SQ1NfQlhJUgkJMHgwODAwMDAwMCAvKiBMYXN0IHJlc2V0IHdhcyBkdWUgdG8gWElSIGJ1dHRvbgkqLworI2RlZmluZSAgRkhDX1JDU19XRVZFTlQJCTB4MDQwMDAwMDAgLyogQ1BVIHJlc2V0IHdhcyBkdWUgdG8gd2FrZXVwIGV2ZW50CSovCisjZGVmaW5lICBGSENfUkNTX0NGQVRBTAkJMHgwMjAwMDAwMCAvKiBDZW50ZXJwbGFuZSBGYXRhbCBFcnJvciBzaWduYWxsZWQJKi8KKyNkZWZpbmUgIEZIQ19SQ1NfRkVOQUIJCTB4MDEwMDAwMDAgLyogRmF0YWwgZXJyb3JzIGVsaWNpdCBzeXN0ZW0gcmVzZXQJKi8KKyNkZWZpbmUgRkhDX1BSRUdTX0NUUkwJMHgyMFVMCS8qIEZIQyBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lICBGSENfQ09OVFJPTF9JQ1MJMHgwMDEwMDAwMCAvKiBJZ25vcmUgQ2VudGVycGxhbmUgU2lnbmFscwkqLworI2RlZmluZSAgRkhDX0NPTlRST0xfRlJTVAkweDAwMDgwMDAwIC8qIEZhdGFsIEVycm9yIFJlc2V0IEVuYWJsZQkJKi8KKyNkZWZpbmUgIEZIQ19DT05UUk9MX0xGQVQJMHgwMDA0MDAwMCAvKiBBQy9EQyBzaWduYWxsZWQgYSBsb2NhbCBlcnJvcgkqLworI2RlZmluZSAgRkhDX0NPTlRST0xfU0xJTkUJMHgwMDAxMDAwMCAvKiBGaXJtd2FyZSBTeW5jaHJvbml6YXRpb24gTGluZQkqLworI2RlZmluZSAgRkhDX0NPTlRST0xfRENECTB4MDAwMDgwMDAgLyogREMtLT5EQyBDb252ZXJ0ZXIgRGlzYWJsZQkJKi8KKyNkZWZpbmUgIEZIQ19DT05UUk9MX1BPRkYJMHgwMDAwNDAwMCAvKiBBQy9EQyBDb250cm9sbGVyIFBMTCBEaXNhYmxlCSovCisjZGVmaW5lICBGSENfQ09OVFJPTF9GT0ZGCTB4MDAwMDIwMDAgLyogRkhDIENvbnRyb2xsZXIgUExMIERpc2FibGUJKi8KKyNkZWZpbmUgIEZIQ19DT05UUk9MX0FPRkYJMHgwMDAwMTAwMCAvKiBDUFUgQSBTUkFNL1NCRCBMb3cgUG93ZXIgTW9kZQkqLworI2RlZmluZSAgRkhDX0NPTlRST0xfQk9GRgkweDAwMDAwODAwIC8qIENQVSBCIFNSQU0vU0JEIExvdyBQb3dlciBNb2RlCSovCisjZGVmaW5lICBGSENfQ09OVFJPTF9QU09GRgkweDAwMDAwNDAwIC8qIFR1cm5zIG9mZiB0aGlzIEZIQydzIHBvd2VyIHN1cHBseQkqLworI2RlZmluZSAgRkhDX0NPTlRST0xfSVhJU1QJMHgwMDAwMDIwMCAvKiAwPUZIQyB0ZWxscyBjbG9jayBib2FyZCBpdCBleGlzdHMJKi8KKyNkZWZpbmUgIEZIQ19DT05UUk9MX1hNU1RSCTB4MDAwMDAxMDAgLyogMT1DYXVzZXMgdGhpcyBGSEMgdG8gYmUgWElSIG1hc3RlciovCisjZGVmaW5lICBGSENfQ09OVFJPTF9MTEVECTB4MDAwMDAwNDAgLyogMD1MZWZ0IExFRCBPTgkJCSovCisjZGVmaW5lICBGSENfQ09OVFJPTF9NTEVECTB4MDAwMDAwMjAgLyogMT1NaWRkbGUgTEVEIE9OCQkJKi8KKyNkZWZpbmUgIEZIQ19DT05UUk9MX1JMRUQJMHgwMDAwMDAxMCAvKiAxPVJpZ2h0IExFRAkJCSovCisjZGVmaW5lICBGSENfQ09OVFJPTF9CUElOUwkweDAwMDAwMDAzIC8qIFNwYXJlIEJpZGlyZWN0aW9uYWwgUGlucwkJKi8KKyNkZWZpbmUgRkhDX1BSRUdTX0JTUgkweDMwVUwJLyogRkhDIEJvYXJkIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSAgRkhDX0JTUl9EQTY0CQkweDAwMDQwMDAwIC8qIFBvcnQgQTogMD0xMjhiaXQgMT02NGJpdCBkYXRhIHBhdGggKi8KKyNkZWZpbmUgIEZIQ19CU1JfREI2NAkJMHgwMDAyMDAwMCAvKiBQb3J0IEI6IDA9MTI4Yml0IDE9NjRiaXQgZGF0YSBwYXRoICovCisjZGVmaW5lICBGSENfQlNSX0JJRAkJMHgwMDAxZTAwMCAvKiBCb2FyZCBJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lICBGSENfQlNSX1NBCQkweDAwMDAxYzAwIC8qIFBvcnQgQSBVUEEgU3BlZWQgKGZyb20gdGhlIHBpbnMpICAgKi8KKyNkZWZpbmUgIEZIQ19CU1JfU0IJCTB4MDAwMDAzODAgLyogUG9ydCBCIFVQQSBTcGVlZCAoZnJvbSB0aGUgcGlucykgICAqLworI2RlZmluZSAgRkhDX0JTUl9ORElBRwkJMHgwMDAwMDA0MCAvKiBOb3QgaW4gRGlhZyBNb2RlICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lICBGSENfQlNSX05UQkVECQkweDAwMDAwMDIwIC8qIE5vdCBpbiBUZXN0QkVEIE1vZGUgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgIEZIQ19CU1JfTklBCQkweDAwMDAwMDFjIC8qIEp1bXBlciwgYml0IDE4IGluIFBST00gc3BhY2UgICAgICAgKi8KKyNkZWZpbmUgIEZIQ19CU1JfU0kJCTB4MDAwMDAwMDEgLyogU3BhcmUgaW5wdXQgcGluIHZhbHVlICAgICAgICAgICAgICAqLworI2RlZmluZSBGSENfUFJFR1NfRUNDCTB4NDBVTAkvKiBGSEMgRUNDIENvbnRyb2wgUmVnaXN0ZXIgKDE2IGJpdHMpICovCisjZGVmaW5lIEZIQ19QUkVHU19KQ1RSTAkweGYwVUwJLyogRkhDIEpUQUcgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSAgRkhDX0pUQUdfQ1RSTF9NRU5BQgkweDgwMDAwMDAwIC8qIEluZGljYXRlcyB0aGlzIGlzIEpUQUcgTWFzdGVyCSAqLworI2RlZmluZSAgRkhDX0pUQUdfQ1RSTF9NTk9ORQkweDQwMDAwMDAwIC8qIEluZGljYXRlcyBubyBKVEFHIE1hc3RlciBwcmVzZW50CSAqLworI2RlZmluZSBGSENfUFJFR1NfSkNNRAkweDEwMFVMCS8qIEZIQyBKVEFHIENvbW1hbmQgUmVnaXN0ZXIgKi8KKwl1bnNpZ25lZCBsb25nCQkJaXJlZzsJLyogRkhDIElHTiByZWcgKi8KKyNkZWZpbmUgRkhDX0lSRUdfSUdOCTB4MDBVTAkvKiBUaGlzIEZIQydzIElHTiAqLworCXVuc2lnbmVkIGxvbmcJCQlmZnJlZ3M7CS8qIEZIQyBmYW5mYWlsIHJlZ3MgKi8KKyNkZWZpbmUgRkhDX0ZGUkVHU19JTUFQCTB4MDBVTAkvKiBGSEMgRmFuZmFpbCBJTUFQICovCisjZGVmaW5lIEZIQ19GRlJFR1NfSUNMUgkweDEwVUwJLyogRkhDIEZhbmZhaWwgSUNMUiAqLworCXVuc2lnbmVkIGxvbmcJCQlzcmVnczsJLyogRkhDIHN5c3RlbSByZWdzICovCisjZGVmaW5lIEZIQ19TUkVHU19JTUFQCTB4MDBVTAkvKiBGSEMgU3lzdGVtIElNQVAgKi8KKyNkZWZpbmUgRkhDX1NSRUdTX0lDTFIJMHgxMFVMCS8qIEZIQyBTeXN0ZW0gSUNMUiAqLworCXVuc2lnbmVkIGxvbmcJCQl1cmVnczsJLyogRkhDIHVhcnQgcmVncyAqLworI2RlZmluZSBGSENfVVJFR1NfSU1BUAkweDAwVUwJLyogRkhDIFVhcnQgSU1BUCAqLworI2RlZmluZSBGSENfVVJFR1NfSUNMUgkweDEwVUwJLyogRkhDIFVhcnQgSUNMUiAqLworCXVuc2lnbmVkIGxvbmcJCQl0cmVnczsJLyogRkhDIFRPRCByZWdzICovCisjZGVmaW5lIEZIQ19UUkVHU19JTUFQCTB4MDBVTAkvKiBGSEMgVE9EIElNQVAgKi8KKyNkZWZpbmUgRkhDX1RSRUdTX0lDTFIJMHgxMFVMCS8qIEZIQyBUT0QgSUNMUiAqLworfTsKKworc3RydWN0IGxpbnV4X2ZoYyB7CisJc3RydWN0IGxpbnV4X2ZoYwkJKm5leHQ7CisJc3RydWN0IGxpbnV4X2NlbnRyYWwJCSpwYXJlbnQ7CS8qIE5VTEwgaWYgbm90IGNlbnRyYWwgRkhDICovCisJc3RydWN0IGZoY19yZWdzCQkJZmhjX3JlZ3M7CisJaW50CQkJCWJvYXJkOworCWludAkJCQlqdGFnX21hc3RlcjsKKwlpbnQJCQkJcHJvbV9ub2RlOworCWNoYXIJCQkJcHJvbV9uYW1lWzY0XTsKKworCXN0cnVjdCBsaW51eF9wcm9tX3JhbmdlcwlmaGNfcmFuZ2VzW1BST01SRUdfTUFYXTsKKwlpbnQJCQkJbnVtX2ZoY19yYW5nZXM7Cit9OworCitleHRlcm4gc3RydWN0IGxpbnV4X2NlbnRyYWwgKmNlbnRyYWxfYnVzOworCitleHRlcm4gdm9pZCBhcHBseV9jZW50cmFsX3JhbmdlcyhzdHJ1Y3QgbGludXhfY2VudHJhbCAqY2VudHJhbCwgCisJCQkJIHN0cnVjdCBsaW51eF9wcm9tX3JlZ2lzdGVycyAqcmVncywKKwkJCQkgaW50IG5yZWdzKTsKKworZXh0ZXJuIHZvaWQgYXBwbHlfZmhjX3JhbmdlcyhzdHJ1Y3QgbGludXhfZmhjICpmaGMsIAorCQkJICAgICBzdHJ1Y3QgbGludXhfcHJvbV9yZWdpc3RlcnMgKnJlZ3MsCisJCQkgICAgIGludCBucmVncyk7CisKKyNlbmRpZiAvKiAhKF9TUEFSQzY0X0ZIQ19IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9mbG9wcHkuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvZmxvcHB5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA3MWI0YgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvZmxvcHB5LmgKQEAgLTAsMCArMSw4MTEgQEAKKy8qICRJZDogZmxvcHB5LmgsdiAxLjMyIDIwMDEvMTAvMjYgMTc6NTk6MzYgZGF2ZW0gRXhwICQKKyAqIGFzbS1zcGFyYzY0L2Zsb3BweS5oOiBTcGFyYyBzcGVjaWZpYyBwYXJ0cyBvZiB0aGUgRmxvcHB5IGRyaXZlci4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQorICogQ29weXJpZ2h0IChDKSAxOTk3IEpha3ViIEplbGluZWsgKGpqQHN1bnNpdGUubWZmLmN1bmkuY3opCisgKgorICogVWx0cmEvUENJIHN1cHBvcnQgYWRkZWQ6IFNlcCAxOTk3ICBFZGRpZSBDLiBEb3N0ICAoZWNkQHNreW5ldC5iZSkKKyAqLworCisjaWZuZGVmIF9fQVNNX1NQQVJDNjRfRkxPUFBZX0gKKyNkZWZpbmUgX19BU01fU1BBUkM2NF9GTE9QUFlfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vaWRwcm9tLmg+CisjaW5jbHVkZSA8YXNtL29wbGliLmg+CisjaW5jbHVkZSA8YXNtL2F1eGlvLmg+CisjaW5jbHVkZSA8YXNtL3NidXMuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisKKworLyoKKyAqIERlZmluZSB0aGlzIHRvIGVuYWJsZSBleGNoYW5naW5nIGRyaXZlIDAgYW5kIDEgaWYgb25seSBkcml2ZSAxIGlzCisgKiBwcm9iZWQgb24gUENJIG1hY2hpbmVzLgorICovCisjdW5kZWYgUENJX0ZEQ19TV0FQX0RSSVZFUworCisKKy8qIFJlZmVyZW5jZXM6CisgKiAxKSBOZXRic2QgU3VuIGZsb3BweSBkcml2ZXIuCisgKiAyKSBOQ1IgODIwNzcgY29udHJvbGxlciBtYW51YWwKKyAqIDMpIEludGVsIDgyMDc3IGNvbnRyb2xsZXIgbWFudWFsCisgKi8KK3N0cnVjdCBzdW5fZmxweV9jb250cm9sbGVyIHsKKwl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIHN0YXR1czFfODIwNzc7IC8qIEF1eGlsaWFyeSBTdGF0dXMgcmVnLiAxICovCisJdm9sYXRpbGUgdW5zaWduZWQgY2hhciBzdGF0dXMyXzgyMDc3OyAvKiBBdXhpbGlhcnkgU3RhdHVzIHJlZy4gMiAqLworCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgZG9yXzgyMDc3OyAgICAgLyogRGlnaXRhbCBPdXRwdXQgcmVnLiAqLworCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgdGFwZWN0bF84MjA3NzsgLyogVGFwZSBDb250cm9sIHJlZyAqLworCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgc3RhdHVzXzgyMDc3OyAgLyogTWFpbiBTdGF0dXMgUmVnaXN0ZXIuICovCisjZGVmaW5lIGRyc184MjA3NyAgICAgICAgICAgICAgc3RhdHVzXzgyMDc3ICAgLyogRGlnaXRhbCBSYXRlIFNlbGVjdCByZWcuICovCisJdm9sYXRpbGUgdW5zaWduZWQgY2hhciBkYXRhXzgyMDc3OyAgICAvKiBEYXRhIGZpZm8uICovCisJdm9sYXRpbGUgdW5zaWduZWQgY2hhciBfX191bnVzZWQ7CisJdm9sYXRpbGUgdW5zaWduZWQgY2hhciBkaXJfODIwNzc7ICAgICAvKiBEaWdpdGFsIElucHV0IHJlZy4gKi8KKyNkZWZpbmUgZGNyXzgyMDc3ICAgICAgICAgICAgICBkaXJfODIwNzcgICAgICAvKiBDb25maWcgQ29udHJvbCByZWcuICovCit9OworCisvKiBZb3UnbGwgb25seSBldmVyIGZpbmQgb25lIGNvbnRyb2xsZXIgb24gYW4gVWx0cmEgYW55d2F5cy4gKi8KK3N0YXRpYyBzdHJ1Y3Qgc3VuX2ZscHlfY29udHJvbGxlciAqc3VuX2ZkYyA9IChzdHJ1Y3Qgc3VuX2ZscHlfY29udHJvbGxlciAqKS0xOwordW5zaWduZWQgbG9uZyBmZGNfc3RhdHVzOworc3RhdGljIHN0cnVjdCBzYnVzX2RldiAqZmxvcHB5X3NkZXYgPSBOVUxMOworCitzdHJ1Y3Qgc3VuX2Zsb3BweV9vcHMgeworCXVuc2lnbmVkIGNoYXIJKCpmZF9pbmIpICh1bnNpZ25lZCBsb25nIHBvcnQpOworCXZvaWQJCSgqZmRfb3V0YikgKHVuc2lnbmVkIGNoYXIgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCk7CisJdm9pZAkJKCpmZF9lbmFibGVfZG1hKSAodm9pZCk7CisJdm9pZAkJKCpmZF9kaXNhYmxlX2RtYSkgKHZvaWQpOworCXZvaWQJCSgqZmRfc2V0X2RtYV9tb2RlKSAoaW50KTsKKwl2b2lkCQkoKmZkX3NldF9kbWFfYWRkcikgKGNoYXIgKik7CisJdm9pZAkJKCpmZF9zZXRfZG1hX2NvdW50KSAoaW50KTsKKwl1bnNpZ25lZCBpbnQJKCpnZXRfZG1hX3Jlc2lkdWUpICh2b2lkKTsKKwlpbnQJCSgqZmRfcmVxdWVzdF9pcnEpICh2b2lkKTsKKwl2b2lkCQkoKmZkX2ZyZWVfaXJxKSAodm9pZCk7CisJaW50CQkoKmZkX2VqZWN0KSAoaW50KTsKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3VuX2Zsb3BweV9vcHMgc3VuX2Zkb3BzOworCisjZGVmaW5lIGZkX2luYihwb3J0KSAgICAgICAgICAgICAgc3VuX2Zkb3BzLmZkX2luYihwb3J0KQorI2RlZmluZSBmZF9vdXRiKHZhbHVlLHBvcnQpICAgICAgIHN1bl9mZG9wcy5mZF9vdXRiKHZhbHVlLHBvcnQpCisjZGVmaW5lIGZkX2VuYWJsZV9kbWEoKSAgICAgICAgICAgc3VuX2Zkb3BzLmZkX2VuYWJsZV9kbWEoKQorI2RlZmluZSBmZF9kaXNhYmxlX2RtYSgpICAgICAgICAgIHN1bl9mZG9wcy5mZF9kaXNhYmxlX2RtYSgpCisjZGVmaW5lIGZkX3JlcXVlc3RfZG1hKCkgICAgICAgICAgKDApIC8qIG5vdGhpbmcuLi4gKi8KKyNkZWZpbmUgZmRfZnJlZV9kbWEoKSAgICAgICAgICAgICAvKiBub3RoaW5nLi4uICovCisjZGVmaW5lIGZkX2NsZWFyX2RtYV9mZigpICAgICAgICAgLyogbm90aGluZy4uLiAqLworI2RlZmluZSBmZF9zZXRfZG1hX21vZGUobW9kZSkgICAgIHN1bl9mZG9wcy5mZF9zZXRfZG1hX21vZGUobW9kZSkKKyNkZWZpbmUgZmRfc2V0X2RtYV9hZGRyKGFkZHIpICAgICBzdW5fZmRvcHMuZmRfc2V0X2RtYV9hZGRyKGFkZHIpCisjZGVmaW5lIGZkX3NldF9kbWFfY291bnQoY291bnQpICAgc3VuX2Zkb3BzLmZkX3NldF9kbWFfY291bnQoY291bnQpCisjZGVmaW5lIGdldF9kbWFfcmVzaWR1ZSh4KSAgICAgICAgc3VuX2Zkb3BzLmdldF9kbWFfcmVzaWR1ZSgpCisjZGVmaW5lIGZkX2NhY2hlZmx1c2goYWRkciwgc2l6ZSkgLyogbm90aGluZy4uLiAqLworI2RlZmluZSBmZF9yZXF1ZXN0X2lycSgpICAgICAgICAgIHN1bl9mZG9wcy5mZF9yZXF1ZXN0X2lycSgpCisjZGVmaW5lIGZkX2ZyZWVfaXJxKCkgICAgICAgICAgICAgc3VuX2Zkb3BzLmZkX2ZyZWVfaXJxKCkKKyNkZWZpbmUgZmRfZWplY3QoZHJpdmUpICAgICAgICAgICBzdW5fZmRvcHMuZmRfZWplY3QoZHJpdmUpCisKK3N0YXRpYyBpbnQgRkxPUFBZX01PVE9SX01BU0sgPSAweDEwOworCisvKiBTdXBlciBwYXJhbm9pZC4uLiAqLworI3VuZGVmIEhBVkVfRElTQUJMRV9ITFQKKworc3RhdGljIGludCBzdW5fZmxvcHB5X3R5cGVzWzJdID0geyAwLCAwIH07CisKKy8qIEhlcmUgaXMgd2hlcmUgd2UgY2F0Y2ggdGhlIGZsb3BweSBkcml2ZXIgdHJ5aW5nIHRvIGluaXRpYWxpemUsCisgKiB0aGVyZWZvcmUgdGhpcyBpcyB3aGVyZSB3ZSBjYWxsIHRoZSBQUk9NIGRldmljZSB0cmVlIHByb2JpbmcKKyAqIHJvdXRpbmUgZXRjLiBvbiB0aGUgU3BhcmMuCisgKi8KKyNkZWZpbmUgRkxPUFBZMF9UWVBFCQlzdW5fZmxvcHB5X2luaXQoKQorI2RlZmluZSBGTE9QUFkxX1RZUEUJCXN1bl9mbG9wcHlfdHlwZXNbMV0KKworI2RlZmluZSBGREMxCQkJKCh1bnNpZ25lZCBsb25nKXN1bl9mZGMpCisKKyNkZWZpbmUgTl9GREMgICAgMQorI2RlZmluZSBOX0RSSVZFICA4CisKKy8qIE5vIDY0ayBib3VuZGFyeSBjcm9zc2luZyBwcm9ibGVtcyBvbiB0aGUgU3BhcmMuICovCisjZGVmaW5lIENST1NTXzY0S0IoYSxzKSAoMCkKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgc3VuXzgyMDc3X2ZkX2luYih1bnNpZ25lZCBsb25nIHBvcnQpCit7CisJdWRlbGF5KDUpOworCXN3aXRjaChwb3J0ICYgNykgeworCWRlZmF1bHQ6CisJCXByaW50aygiZmxvcHB5OiBBc2tlZCB0byByZWFkIHVua25vd24gcG9ydCAlbHhcbiIsIHBvcnQpOworCQlwYW5pYygiZmxvcHB5OiBQb3J0IGJvbGl4ZWQuIik7CisJY2FzZSA0OiAvKiBGRF9TVEFUVVMgKi8KKwkJcmV0dXJuIHNidXNfcmVhZGIoJnN1bl9mZGMtPnN0YXR1c184MjA3NykgJiB+U1RBVFVTX0RNQTsKKwljYXNlIDU6IC8qIEZEX0RBVEEgKi8KKwkJcmV0dXJuIHNidXNfcmVhZGIoJnN1bl9mZGMtPmRhdGFfODIwNzcpOworCWNhc2UgNzogLyogRkRfRElSICovCisJCS8qIFhYWDogSXMgRENMIG9uIDB4ODAgaW4gc3VuNG0/ICovCisJCXJldHVybiBzYnVzX3JlYWRiKCZzdW5fZmRjLT5kaXJfODIwNzcpOworCX07CisJcGFuaWMoInN1bl84MjA3Ml9mZF9pbmI6IEhvdyBkaWQgSSBnZXQgaGVyZT8iKTsKK30KKworc3RhdGljIHZvaWQgc3VuXzgyMDc3X2ZkX291dGIodW5zaWduZWQgY2hhciB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KQoreworCXVkZWxheSg1KTsKKwlzd2l0Y2gocG9ydCAmIDcpIHsKKwlkZWZhdWx0OgorCQlwcmludGsoImZsb3BweTogQXNrZWQgdG8gd3JpdGUgdG8gdW5rbm93biBwb3J0ICVseFxuIiwgcG9ydCk7CisJCXBhbmljKCJmbG9wcHk6IFBvcnQgYm9saXhlZC4iKTsKKwljYXNlIDI6IC8qIEZEX0RPUiAqLworCQkvKiBIYXBwaWx5LCB0aGUgODIwNzcgaGFzIGEgcmVhbCBET1IgcmVnaXN0ZXIuICovCisJCXNidXNfd3JpdGViKHZhbHVlLCAmc3VuX2ZkYy0+ZG9yXzgyMDc3KTsKKwkJYnJlYWs7CisJY2FzZSA1OiAvKiBGRF9EQVRBICovCisJCXNidXNfd3JpdGViKHZhbHVlLCAmc3VuX2ZkYy0+ZGF0YV84MjA3Nyk7CisJCWJyZWFrOworCWNhc2UgNzogLyogRkRfRENSICovCisJCXNidXNfd3JpdGViKHZhbHVlLCAmc3VuX2ZkYy0+ZGNyXzgyMDc3KTsKKwkJYnJlYWs7CisJY2FzZSA0OiAvKiBGRF9TVEFUVVMgKi8KKwkJc2J1c193cml0ZWIodmFsdWUsICZzdW5fZmRjLT5zdGF0dXNfODIwNzcpOworCQlicmVhazsKKwl9OworCXJldHVybjsKK30KKworLyogRm9yIHBzZXVkby1kbWEgKFN1biBmbG9wcHkgZHJpdmVzIGhhdmUgbm8gcmVhbCBETUEgYXZhaWxhYmxlIHRvCisgKiB0aGVtIHNvIHdlIG11c3QgZWF0IHRoZSBkYXRhIGZpZm8gYnl0ZXMgZGlyZWN0bHkgb3Vyc2VsdmVzKSB3ZSBoYXZlCisgKiB0aHJlZSBzdGF0ZSB2YXJpYWJsZXMuICBkb2luZ19wZG1hIHRlbGxzIG91ciBpbmxpbmUgbG93LWxldmVsCisgKiBhc3NlbWJseSBmbG9wcHkgaW50ZXJydXB0IGVudHJ5IHBvaW50IHdoZXRoZXIgaXQgc2hvdWxkIHNpdCBhbmQgZWF0CisgKiBieXRlcyBmcm9tIHRoZSBmaWZvIG9yIGp1c3QgdHJhbnNmZXIgY29udHJvbCB1cCB0byB0aGUgaGlnaGVyIGxldmVsCisgKiBmbG9wcHkgaW50ZXJydXB0IGMtY29kZS4gIEkgdHJpZWQgdmVyeSBoYXJkIGJ1dCBJIGNvdWxkIG5vdCBnZXQgdGhlCisgKiBwc2V1ZG8tZG1hIHRvIHdvcmsgaW4gYy1jb2RlIHdpdGhvdXQgZ2V0dGluZyBtYW55IG92ZXJydW5zIGFuZAorICogdW5kZXJydW5zLiAgSWYgbm9uLXplcm8sIGRvaW5nX3BkbWEgZW5jb2RlcyB0aGUgZGlyZWN0aW9uIG9mCisgKiB0aGUgdHJhbnNmZXIgZm9yIGRlYnVnZ2luZy4gIDE9cmVhZCAyPXdyaXRlCisgKi8KK2NoYXIgKnBkbWFfdmFkZHI7Cit1bnNpZ25lZCBsb25nIHBkbWFfc2l6ZTsKK3ZvbGF0aWxlIGludCBkb2luZ19wZG1hID0gMDsKKworLyogVGhpcyBpcyBzb2Z0d2FyZSBzdGF0ZSAqLworY2hhciAqcGRtYV9iYXNlID0gTlVMTDsKK3Vuc2lnbmVkIGxvbmcgcGRtYV9hcmVhc2l6ZTsKKworLyogQ29tbW9uIHJvdXRpbmVzIHRvIGFsbCBjb250cm9sbGVyIHR5cGVzIG9uIHRoZSBTcGFyYy4gKi8KK3N0YXRpYyB2b2lkIHN1bl9mZF9kaXNhYmxlX2RtYSh2b2lkKQoreworCWRvaW5nX3BkbWEgPSAwOworCWlmIChwZG1hX2Jhc2UpIHsKKwkJbW11X3VubG9ja2FyZWEocGRtYV9iYXNlLCBwZG1hX2FyZWFzaXplKTsKKwkJcGRtYV9iYXNlID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHN1bl9mZF9zZXRfZG1hX21vZGUoaW50IG1vZGUpCit7CisJc3dpdGNoKG1vZGUpIHsKKwljYXNlIERNQV9NT0RFX1JFQUQ6CisJCWRvaW5nX3BkbWEgPSAxOworCQlicmVhazsKKwljYXNlIERNQV9NT0RFX1dSSVRFOgorCQlkb2luZ19wZG1hID0gMjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKCJVbmtub3duIGRtYSBtb2RlICVkXG4iLCBtb2RlKTsKKwkJcGFuaWMoImZsb3BweTogR2l2aW5nIHVwLi4uIik7CisJfQorfQorCitzdGF0aWMgdm9pZCBzdW5fZmRfc2V0X2RtYV9hZGRyKGNoYXIgKmJ1ZmZlcikKK3sKKwlwZG1hX3ZhZGRyID0gYnVmZmVyOworfQorCitzdGF0aWMgdm9pZCBzdW5fZmRfc2V0X2RtYV9jb3VudChpbnQgbGVuZ3RoKQoreworCXBkbWFfc2l6ZSA9IGxlbmd0aDsKK30KKworc3RhdGljIHZvaWQgc3VuX2ZkX2VuYWJsZV9kbWEodm9pZCkKK3sKKwlwZG1hX3ZhZGRyID0gbW11X2xvY2thcmVhKHBkbWFfdmFkZHIsIHBkbWFfc2l6ZSk7CisJcGRtYV9iYXNlID0gcGRtYV92YWRkcjsKKwlwZG1hX2FyZWFzaXplID0gcGRtYV9zaXplOworfQorCisvKiBPdXIgbG93LWxldmVsIGVudHJ5IHBvaW50IGluIGFyY2gvc3BhcmMva2VybmVsL2VudHJ5LlMgKi8KK2V4dGVybiBpcnFyZXR1cm5fdCBmbG9wcHlfaGFyZGludChpbnQgaXJxLCB2b2lkICp1bnVzZWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworc3RhdGljIGludCBzdW5fZmRfcmVxdWVzdF9pcnEodm9pZCkKK3sKKwlzdGF0aWMgaW50IG9uY2UgPSAwOworCWludCBlcnJvcjsKKworCWlmKCFvbmNlKSB7CisJCW9uY2UgPSAxOworCisJCWVycm9yID0gcmVxdWVzdF9mYXN0X2lycShGTE9QUFlfSVJRLCBmbG9wcHlfaGFyZGludCwgCisJCQkJCSBTQV9JTlRFUlJVUFQsICJmbG9wcHkiLCBOVUxMKTsKKworCQlyZXR1cm4gKChlcnJvciA9PSAwKSA/IDAgOiAtMSk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzdW5fZmRfZnJlZV9pcnEodm9pZCkKK3sKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBzdW5fZ2V0X2RtYV9yZXNpZHVlKHZvaWQpCit7CisJLyogWFhYIFRoaXMgaXNuJ3QgcmVhbGx5IGNvcnJlY3QuIFhYWCAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN1bl9mZF9lamVjdChpbnQgZHJpdmUpCit7CisJc2V0X2RvcigweDAwLCAweGZmLCAweDkwKTsKKwl1ZGVsYXkoNTAwKTsKKwlzZXRfZG9yKDB4MDAsIDB4NmYsIDB4MDApOworCXVkZWxheSg1MDApOworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BDSQorI2luY2x1ZGUgPGFzbS9lYnVzLmg+CisjaW5jbHVkZSA8YXNtL2lzYS5oPgorI2luY2x1ZGUgPGFzbS9uczg3MzAzLmg+CisKK3N0YXRpYyBzdHJ1Y3QgZWJ1c19kbWFfaW5mbyBzdW5fcGNpX2ZkX2VidXNfZG1hOworc3RhdGljIHN0cnVjdCBwY2lfZGV2ICpzdW5fcGNpX2VidXNfZGV2Oworc3RhdGljIGludCBzdW5fcGNpX2Jyb2tlbl9kcml2ZSA9IC0xOworCitzdHJ1Y3Qgc3VuX3BjaV9kbWFfb3AgeworCXVuc2lnbmVkIGludCAJYWRkcjsKKwlpbnQJCWxlbjsKKwlpbnQJCWRpcmVjdGlvbjsKKwljaGFyCQkqYnVmOworfTsKK3N0YXRpYyBzdHJ1Y3Qgc3VuX3BjaV9kbWFfb3Agc3VuX3BjaV9kbWFfY3VycmVudCA9IHsgLTFVLCAwLCAwLCBOVUxMfTsKK3N0YXRpYyBzdHJ1Y3Qgc3VuX3BjaV9kbWFfb3Agc3VuX3BjaV9kbWFfcGVuZGluZyA9IHsgLTFVLCAwLCAwLCBOVUxMfTsKKworZXh0ZXJuIGlycXJldHVybl90IGZsb3BweV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHN1bl9wY2lfZmRfaW5iKHVuc2lnbmVkIGxvbmcgcG9ydCkKK3sKKwl1ZGVsYXkoNSk7CisJcmV0dXJuIGluYihwb3J0KTsKK30KKworc3RhdGljIHZvaWQgc3VuX3BjaV9mZF9vdXRiKHVuc2lnbmVkIGNoYXIgdmFsLCB1bnNpZ25lZCBsb25nIHBvcnQpCit7CisJdWRlbGF5KDUpOworCW91dGIodmFsLCBwb3J0KTsKK30KKworc3RhdGljIHZvaWQgc3VuX3BjaV9mZF9icm9rZW5fb3V0Yih1bnNpZ25lZCBjaGFyIHZhbCwgdW5zaWduZWQgbG9uZyBwb3J0KQoreworCXVkZWxheSg1KTsKKwkvKgorCSAqIFhYWDogRHVlIHRvIFNVTidzIGJyb2tlbiBmbG9wcHkgY29ubmVjdG9yIG9uIEFYIGFuZCBBWGkKKwkgKiAgICAgIHdlIG5lZWQgdG8gdHVybiBvbiBNT1RPUl8wIGFsc28sIGlmIHRoZSBmbG9wcHkgaXMKKwkgKiAgICAgIGp1bXBlcmVkIHRvIERTMSAobGlrZSBtb3N0IFBDIGZsb3BwaWVzIGFyZSkuIEkgaG9wZQorCSAqICAgICAgdGhpcyBkb2VzIG5vdCBodXJ0IGNvcnJlY3QgaGFyZHdhcmUgbGlrZSB0aGUgQVhtcC4KKwkgKiAgICAgIChFZGRpZSwgU2VwIDEyIDE5OTgpLgorCSAqLworCWlmIChwb3J0ID09ICgodW5zaWduZWQgbG9uZylzdW5fZmRjKSArIDIpIHsKKwkJaWYgKCgodmFsICYgMHgwMykgPT0gc3VuX3BjaV9icm9rZW5fZHJpdmUpICYmICh2YWwgJiAweDIwKSkgeworCQkJdmFsIHw9IDB4MTA7CisJCX0KKwl9CisJb3V0Yih2YWwsIHBvcnQpOworfQorCisjaWZkZWYgUENJX0ZEQ19TV0FQX0RSSVZFUworc3RhdGljIHZvaWQgc3VuX3BjaV9mZF9sZGVfYnJva2VuX291dGIodW5zaWduZWQgY2hhciB2YWwsIHVuc2lnbmVkIGxvbmcgcG9ydCkKK3sKKwl1ZGVsYXkoNSk7CisJLyoKKwkgKiBYWFg6IER1ZSB0byBTVU4ncyBicm9rZW4gZmxvcHB5IGNvbm5lY3RvciBvbiBBWCBhbmQgQVhpCisJICogICAgICB3ZSBuZWVkIHRvIHR1cm4gb24gTU9UT1JfMCBhbHNvLCBpZiB0aGUgZmxvcHB5IGlzCisJICogICAgICBqdW1wZXJlZCB0byBEUzEgKGxpa2UgbW9zdCBQQyBmbG9wcGllcyBhcmUpLiBJIGhvcGUKKwkgKiAgICAgIHRoaXMgZG9lcyBub3QgaHVydCBjb3JyZWN0IGhhcmR3YXJlIGxpa2UgdGhlIEFYbXAuCisJICogICAgICAoRWRkaWUsIFNlcCAxMiAxOTk4KS4KKwkgKi8KKwlpZiAocG9ydCA9PSAoKHVuc2lnbmVkIGxvbmcpc3VuX2ZkYykgKyAyKSB7CisJCWlmICgoKHZhbCAmIDB4MDMpID09IHN1bl9wY2lfYnJva2VuX2RyaXZlKSAmJiAodmFsICYgMHgxMCkpIHsKKwkJCXZhbCAmPSB+KDB4MDMpOworCQkJdmFsIHw9IDB4MjE7CisJCX0KKwl9CisJb3V0Yih2YWwsIHBvcnQpOworfQorI2VuZGlmIC8qIFBDSV9GRENfU1dBUF9EUklWRVMgKi8KKworc3RhdGljIHZvaWQgc3VuX3BjaV9mZF9lbmFibGVfZG1hKHZvaWQpCit7CisJQlVHX09OKChOVUxMID09IHN1bl9wY2lfZG1hX3BlbmRpbmcuYnVmKSAJfHwKKwkgICAgKDAJICA9PSBzdW5fcGNpX2RtYV9wZW5kaW5nLmxlbikgCXx8CisJICAgICgwCSAgPT0gc3VuX3BjaV9kbWFfcGVuZGluZy5kaXJlY3Rpb24pKTsKKworCXN1bl9wY2lfZG1hX2N1cnJlbnQuYnVmID0gc3VuX3BjaV9kbWFfcGVuZGluZy5idWY7CisJc3VuX3BjaV9kbWFfY3VycmVudC5sZW4gPSBzdW5fcGNpX2RtYV9wZW5kaW5nLmxlbjsKKwlzdW5fcGNpX2RtYV9jdXJyZW50LmRpcmVjdGlvbiA9IHN1bl9wY2lfZG1hX3BlbmRpbmcuZGlyZWN0aW9uOworCisJc3VuX3BjaV9kbWFfcGVuZGluZy5idWYgID0gTlVMTDsKKwlzdW5fcGNpX2RtYV9wZW5kaW5nLmxlbiAgPSAwOworCXN1bl9wY2lfZG1hX3BlbmRpbmcuZGlyZWN0aW9uID0gMDsKKwlzdW5fcGNpX2RtYV9wZW5kaW5nLmFkZHIgPSAtMVU7CisKKwlzdW5fcGNpX2RtYV9jdXJyZW50LmFkZHIgPSAKKwkJcGNpX21hcF9zaW5nbGUoc3VuX3BjaV9lYnVzX2RldiwKKwkJCSAgICAgICBzdW5fcGNpX2RtYV9jdXJyZW50LmJ1ZiwKKwkJCSAgICAgICBzdW5fcGNpX2RtYV9jdXJyZW50LmxlbiwKKwkJCSAgICAgICBzdW5fcGNpX2RtYV9jdXJyZW50LmRpcmVjdGlvbik7CisKKwllYnVzX2RtYV9lbmFibGUoJnN1bl9wY2lfZmRfZWJ1c19kbWEsIDEpOworCisJaWYgKGVidXNfZG1hX3JlcXVlc3QoJnN1bl9wY2lfZmRfZWJ1c19kbWEsCisJCQkgICAgIHN1bl9wY2lfZG1hX2N1cnJlbnQuYWRkciwKKwkJCSAgICAgc3VuX3BjaV9kbWFfY3VycmVudC5sZW4pKQorCQlCVUcoKTsKK30KKworc3RhdGljIHZvaWQgc3VuX3BjaV9mZF9kaXNhYmxlX2RtYSh2b2lkKQoreworCWVidXNfZG1hX2VuYWJsZSgmc3VuX3BjaV9mZF9lYnVzX2RtYSwgMCk7CisJaWYgKHN1bl9wY2lfZG1hX2N1cnJlbnQuYWRkciAhPSAtMVUpCisJCXBjaV91bm1hcF9zaW5nbGUoc3VuX3BjaV9lYnVzX2RldiwKKwkJCQkgc3VuX3BjaV9kbWFfY3VycmVudC5hZGRyLAorCQkJCSBzdW5fcGNpX2RtYV9jdXJyZW50LmxlbiwKKwkJCQkgc3VuX3BjaV9kbWFfY3VycmVudC5kaXJlY3Rpb24pOworCXN1bl9wY2lfZG1hX2N1cnJlbnQuYWRkciA9IC0xVTsKK30KKworc3RhdGljIHZvaWQgc3VuX3BjaV9mZF9zZXRfZG1hX21vZGUoaW50IG1vZGUpCit7CisJaWYgKG1vZGUgPT0gRE1BX01PREVfV1JJVEUpCisJCXN1bl9wY2lfZG1hX3BlbmRpbmcuZGlyZWN0aW9uID0gUENJX0RNQV9UT0RFVklDRTsKKwllbHNlCisJCXN1bl9wY2lfZG1hX3BlbmRpbmcuZGlyZWN0aW9uID0gUENJX0RNQV9GUk9NREVWSUNFOworCisJZWJ1c19kbWFfcHJlcGFyZSgmc3VuX3BjaV9mZF9lYnVzX2RtYSwgbW9kZSAhPSBETUFfTU9ERV9XUklURSk7Cit9CisKK3N0YXRpYyB2b2lkIHN1bl9wY2lfZmRfc2V0X2RtYV9jb3VudChpbnQgbGVuZ3RoKQoreworCXN1bl9wY2lfZG1hX3BlbmRpbmcubGVuID0gbGVuZ3RoOworfQorCitzdGF0aWMgdm9pZCBzdW5fcGNpX2ZkX3NldF9kbWFfYWRkcihjaGFyICpidWZmZXIpCit7CisJc3VuX3BjaV9kbWFfcGVuZGluZy5idWYgPSBidWZmZXI7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc3VuX3BjaV9nZXRfZG1hX3Jlc2lkdWUodm9pZCkKK3sKKwlyZXR1cm4gZWJ1c19kbWFfcmVzaWR1ZSgmc3VuX3BjaV9mZF9lYnVzX2RtYSk7Cit9CisKK3N0YXRpYyBpbnQgc3VuX3BjaV9mZF9yZXF1ZXN0X2lycSh2b2lkKQoreworCXJldHVybiBlYnVzX2RtYV9pcnFfZW5hYmxlKCZzdW5fcGNpX2ZkX2VidXNfZG1hLCAxKTsKK30KKworc3RhdGljIHZvaWQgc3VuX3BjaV9mZF9mcmVlX2lycSh2b2lkKQoreworCWVidXNfZG1hX2lycV9lbmFibGUoJnN1bl9wY2lfZmRfZWJ1c19kbWEsIDApOworfQorCitzdGF0aWMgaW50IHN1bl9wY2lfZmRfZWplY3QoaW50IGRyaXZlKQoreworCXJldHVybiAtRUlOVkFMOworfQorCit2b2lkIHN1bl9wY2lfZmRfZG1hX2NhbGxiYWNrKHN0cnVjdCBlYnVzX2RtYV9pbmZvICpwLCBpbnQgZXZlbnQsIHZvaWQgKmNvb2tpZSkKK3sKKwlmbG9wcHlfaW50ZXJydXB0KDAsIE5VTEwsIE5VTEwpOworfQorCisvKgorICogRmxvcHB5IHByb2JpbmcsIHdlJ2QgbGlrZSB0byB1c2UgL2Rldi9mZDAgZm9yIGEgc2luZ2xlIEZsb3BweSBvbiBQQ0ksCisgKiBldmVuIGlmIHRoaXMgaXMgY29uZmlndXJlZCB1c2luZyBEUzEsIHRodXMgbG9va3MgbGlrZSAvZGV2L2ZkMSB3aXRoCisgKiB0aGUgY2FibGluZyB1c2VkIGluIFVsdHJhcy4KKyAqLworI2RlZmluZSBET1IJKHBvcnQgKyAyKQorI2RlZmluZSBNU1IJKHBvcnQgKyA0KQorI2RlZmluZSBGSUZPCShwb3J0ICsgNSkKKworc3RhdGljIHZvaWQgc3VuX3BjaV9mZF9vdXRfYnl0ZSh1bnNpZ25lZCBsb25nIHBvcnQsIHVuc2lnbmVkIGNoYXIgdmFsLAorCQkJICAgICAgICB1bnNpZ25lZCBsb25nIHJlZykKK3sKKwl1bnNpZ25lZCBjaGFyIHN0YXR1czsKKwlpbnQgdGltZW91dCA9IDEwMDA7CisKKwl3aGlsZSAoISgoc3RhdHVzID0gaW5iKE1TUikpICYgMHg4MCkgJiYgLS10aW1lb3V0KQorCQl1ZGVsYXkoMTAwKTsKKwlvdXRiKHZhbCwgcmVnKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgc3VuX3BjaV9mZF9zZW5zZWkodW5zaWduZWQgbG9uZyBwb3J0KQoreworCXVuc2lnbmVkIGNoYXIgcmVzdWx0WzJdID0geyAweDcwLCAweDAwIH07CisJdW5zaWduZWQgY2hhciBzdGF0dXM7CisJaW50IGkgPSAwOworCisJc3VuX3BjaV9mZF9vdXRfYnl0ZShwb3J0LCAweDA4LCBGSUZPKTsKKwlkbyB7CisJCWludCB0aW1lb3V0ID0gMTAwMDsKKworCQl3aGlsZSAoISgoc3RhdHVzID0gaW5iKE1TUikpICYgMHg4MCkgJiYgLS10aW1lb3V0KQorCQkJdWRlbGF5KDEwMCk7CisKKwkJaWYgKCF0aW1lb3V0KQorCQkJYnJlYWs7CisKKwkJaWYgKChzdGF0dXMgJiAweGYwKSA9PSAweGQwKQorCQkJcmVzdWx0W2krK10gPSBpbmIoRklGTyk7CisJCWVsc2UKKwkJCWJyZWFrOworCX0gd2hpbGUgKGkgPCAyKTsKKworCXJldHVybiByZXN1bHRbMF07Cit9CisKK3N0YXRpYyB2b2lkIHN1bl9wY2lfZmRfcmVzZXQodW5zaWduZWQgbG9uZyBwb3J0KQoreworCXVuc2lnbmVkIGNoYXIgbWFzayA9IDB4MDA7CisJdW5zaWduZWQgY2hhciBzdGF0dXM7CisJaW50IHRpbWVvdXQgPSAxMDAwMDsKKworCW91dGIoMHg4MCwgTVNSKTsKKwlkbyB7CisJCXN0YXR1cyA9IHN1bl9wY2lfZmRfc2Vuc2VpKHBvcnQpOworCQlpZiAoKHN0YXR1cyAmIDB4YzApID09IDB4YzApCisJCQltYXNrIHw9IDEgPDwgKHN0YXR1cyAmIDB4MDMpOworCQllbHNlCisJCQl1ZGVsYXkoMTAwKTsKKwl9IHdoaWxlICgobWFzayAhPSAweDBmKSAmJiAtLXRpbWVvdXQpOworfQorCitzdGF0aWMgaW50IHN1bl9wY2lfZmRfdGVzdF9kcml2ZSh1bnNpZ25lZCBsb25nIHBvcnQsIGludCBkcml2ZSkKK3sKKwl1bnNpZ25lZCBjaGFyIHN0YXR1cywgZGF0YTsKKwlpbnQgdGltZW91dCA9IDEwMDA7CisJaW50IHJlYWR5OworCisJc3VuX3BjaV9mZF9yZXNldChwb3J0KTsKKworCWRhdGEgPSAoMHgxMCA8PCBkcml2ZSkgfCAweDBjIHwgZHJpdmU7CisJc3VuX3BjaV9mZF9vdXRfYnl0ZShwb3J0LCBkYXRhLCBET1IpOworCisJc3VuX3BjaV9mZF9vdXRfYnl0ZShwb3J0LCAweDA3LCBGSUZPKTsKKwlzdW5fcGNpX2ZkX291dF9ieXRlKHBvcnQsIGRyaXZlICYgMHgwMywgRklGTyk7CisKKwlkbyB7CisJCXVkZWxheSgxMDApOworCQlzdGF0dXMgPSBzdW5fcGNpX2ZkX3NlbnNlaShwb3J0KTsKKwl9IHdoaWxlICgoKHN0YXR1cyAmIDB4YzApID09IDB4ODApICYmIC0tdGltZW91dCk7CisKKwlpZiAoIXRpbWVvdXQpCisJCXJlYWR5ID0gMDsKKwllbHNlCisJCXJlYWR5ID0gKHN0YXR1cyAmIDB4MTApID8gMCA6IDE7CisKKwlzdW5fcGNpX2ZkX3Jlc2V0KHBvcnQpOworCXJldHVybiByZWFkeTsKK30KKyN1bmRlZiBGSUZPCisjdW5kZWYgTVNSCisjdW5kZWYgRE9SCisKKyNlbmRpZiAvKiBDT05GSUdfUENJICovCisKKyNpZmRlZiBDT05GSUdfUENJCitzdGF0aWMgaW50IF9faW5pdCBlYnVzX2ZkdGhyZWVfcChzdHJ1Y3QgbGludXhfZWJ1c19kZXZpY2UgKmVkZXYpCit7CisJaWYgKCFzdHJjbXAoZWRldi0+cHJvbV9uYW1lLCAiZmR0aHJlZSIpKQorCQlyZXR1cm4gMTsKKwlpZiAoIXN0cmNtcChlZGV2LT5wcm9tX25hbWUsICJmbG9wcHkiKSkgeworCQljaGFyIGNvbXBhdFsxNl07CisJCXByb21fZ2V0c3RyaW5nKGVkZXYtPnByb21fbm9kZSwKKwkJCSAgICAgICAiY29tcGF0aWJsZSIsCisJCQkgICAgICAgY29tcGF0LCBzaXplb2YoY29tcGF0KSk7CisJCWNvbXBhdFsxNV0gPSAnXDAnOworCQlpZiAoIXN0cmNtcChjb21wYXQsICJmZHRocmVlIikpCisJCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19QQ0kKKyN1bmRlZiBJU0FfRkxPUFBZX1dPUktTCisKKyNpZmRlZiBJU0FfRkxPUFBZX1dPUktTCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgaXNhX2Zsb3BweV9pbml0KHZvaWQpCit7CisJc3RydWN0IHNwYXJjX2lzYV9icmlkZ2UgKmlzYV9icjsKKwlzdHJ1Y3Qgc3BhcmNfaXNhX2RldmljZSAqaXNhX2RldiA9IE5VTEw7CisKKwlmb3JfZWFjaF9pc2EoaXNhX2JyKSB7CisJCWZvcl9lYWNoX2lzYWRldihpc2FfZGV2LCBpc2FfYnIpIHsKKwkJCWlmICghc3RyY21wKGlzYV9kZXYtPnByb21fbmFtZSwgImRtYSIpKSB7CisJCQkJc3RydWN0IHNwYXJjX2lzYV9kZXZpY2UgKmNoaWxkID0KKwkJCQkJaXNhX2Rldi0+Y2hpbGQ7CisKKwkJCQl3aGlsZSAoY2hpbGQpIHsKKwkJCQkJaWYgKCFzdHJjbXAoY2hpbGQtPnByb21fbmFtZSwKKwkJCQkJCSAgICAiZmxvcHB5IikpIHsKKwkJCQkJCWlzYV9kZXYgPSBjaGlsZDsKKwkJCQkJCWdvdG8gaXNhX2RvbmU7CisJCQkJCX0KKwkJCQkJY2hpbGQgPSBjaGlsZC0+bmV4dDsKKwkJCQl9CisJCQl9CisJCX0KKwl9Citpc2FfZG9uZToKKwlpZiAoIWlzYV9kZXYpCisJCXJldHVybiAwOworCisJLyogV2UgY291bGQgdXNlIERNQSBvbiBkZXZpY2VzIGJlaGluZCB0aGUgSVNBIGJyaWRnZSwgYnV0Li4uCisJICoKKwkgKiBUaGVyZSBpcyBhIHNsaWdodCBwcm9ibGVtLiAgTm9ybWFsbHkgb24geDg2IGtpdCB0aGUgeDg2IHByb2Nlc3NvcgorCSAqIGRlbGF5cyBJL08gcG9ydCBpbnN0cnVjdGlvbnMgd2hlbiB0aGUgSVNBIGJ1cyAiZG1hIGluIHByb2dyZXNzIgorCSAqIHNpZ25hbCBpcyBhY3RpdmUuICBXZWxsLCBzcGFyYzY0IHN5c3RlbXMgZG8gbm90IG1vbml0b3IgdGhpcworCSAqIHNpZ25hbCB0aHVzIHdlIHdvdWxkIG5lZWQgdG8gYmxvY2sgYWxsIEkvTyBwb3J0IGFjY2Vzc2VzIGluIHNvZnR3YXJlCisJICogd2hlbiBhIGRtYSB0cmFuc2ZlciBpcyBhY3RpdmUgZm9yIHNvbWUgZGV2aWNlLgorCSAqLworCisJc3VuX2ZkYyA9IChzdHJ1Y3Qgc3VuX2ZscHlfY29udHJvbGxlciAqKWlzYV9kZXYtPnJlc291cmNlLnN0YXJ0OworCUZMT1BQWV9JUlEgPSBpc2FfZGV2LT5pcnE7CisKKwlzdW5fZmRvcHMuZmRfaW5iID0gc3VuX3BjaV9mZF9pbmI7CisJc3VuX2Zkb3BzLmZkX291dGIgPSBzdW5fcGNpX2ZkX291dGI7CisKKwljYW5fdXNlX3ZpcnR1YWxfZG1hID0gdXNlX3ZpcnR1YWxfZG1hID0gMTsKKwlzdW5fZmRvcHMuZmRfZW5hYmxlX2RtYSA9IHN1bl9mZF9lbmFibGVfZG1hOworCXN1bl9mZG9wcy5mZF9kaXNhYmxlX2RtYSA9IHN1bl9mZF9kaXNhYmxlX2RtYTsKKwlzdW5fZmRvcHMuZmRfc2V0X2RtYV9tb2RlID0gc3VuX2ZkX3NldF9kbWFfbW9kZTsKKwlzdW5fZmRvcHMuZmRfc2V0X2RtYV9hZGRyID0gc3VuX2ZkX3NldF9kbWFfYWRkcjsKKwlzdW5fZmRvcHMuZmRfc2V0X2RtYV9jb3VudCA9IHN1bl9mZF9zZXRfZG1hX2NvdW50OworCXN1bl9mZG9wcy5nZXRfZG1hX3Jlc2lkdWUgPSBzdW5fZ2V0X2RtYV9yZXNpZHVlOworCisJc3VuX2Zkb3BzLmZkX3JlcXVlc3RfaXJxID0gc3VuX2ZkX3JlcXVlc3RfaXJxOworCXN1bl9mZG9wcy5mZF9mcmVlX2lycSA9IHN1bl9mZF9mcmVlX2lycTsKKworCS8qIEZsb3BweSBlamVjdCBpcyBtYW51YWwuICAgQWN0dWFsbHksIGNvdWxkIGRldGVybWluZSB0aGlzCisJICogdmlhIHByZXNlbmNlIG9mICdtYW51YWwnIHByb3BlcnR5IGluIE9CUCBub2RlLgorCSAqLworCXN1bl9mZG9wcy5mZF9lamVjdCA9IHN1bl9wY2lfZmRfZWplY3Q7CisKKyAgICAgICAgZmRjX3N0YXR1cyA9ICh1bnNpZ25lZCBsb25nKSAmc3VuX2ZkYy0+c3RhdHVzXzgyMDc3OworCUZMT1BQWV9NT1RPUl9NQVNLID0gMHhmMDsKKworCWFsbG93ZWRfZHJpdmVfbWFzayA9IDA7CisJc3VuX2Zsb3BweV90eXBlc1swXSA9IDA7CisJc3VuX2Zsb3BweV90eXBlc1sxXSA9IDQ7CisKKwlzdW5fcGNpX2Jyb2tlbl9kcml2ZSA9IDE7CisJc3VuX2Zkb3BzLmZkX291dGIgPSBzdW5fcGNpX2ZkX2Jyb2tlbl9vdXRiOworCisJcmV0dXJuIHN1bl9mbG9wcHlfdHlwZXNbMF07Cit9CisjZW5kaWYgLyogSVNBX0ZMT1BQWV9XT1JLUyAqLworCisjZW5kaWYKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IHN1bl9mbG9wcHlfaW5pdCh2b2lkKQoreworCWNoYXIgc3RhdGVbMTI4XTsKKwlzdHJ1Y3Qgc2J1c19idXMgKmJ1czsKKwlzdHJ1Y3Qgc2J1c19kZXYgKnNkZXYgPSBOVUxMOworCXN0YXRpYyBpbnQgaW5pdGlhbGl6ZWQgPSAwOworCisJaWYgKGluaXRpYWxpemVkKQorCQlyZXR1cm4gc3VuX2Zsb3BweV90eXBlc1swXTsKKwlpbml0aWFsaXplZCA9IDE7CisKKwlmb3JfYWxsX3NidXNkZXYgKHNkZXYsIGJ1cykgeworCQlpZiAoIXN0cmNtcChzZGV2LT5wcm9tX25hbWUsICJTVU5XLGZkdHdvIikpIAorCQkJYnJlYWs7CisJfQorCWlmKHNkZXYpIHsKKwkJZmxvcHB5X3NkZXYgPSBzZGV2OworCQlGTE9QUFlfSVJRID0gc2Rldi0+aXJxc1swXTsKKwl9IGVsc2UgeworI2lmZGVmIENPTkZJR19QQ0kKKwkJc3RydWN0IGxpbnV4X2VidXMgKmVidXM7CisJCXN0cnVjdCBsaW51eF9lYnVzX2RldmljZSAqZWRldiA9IE5VTEw7CisJCXVuc2lnbmVkIGxvbmcgY29uZmlnID0gMDsKKwkJdW5zaWduZWQgbG9uZyBhdXhpb19yZWc7CisKKwkJZm9yX2VhY2hfZWJ1cyhlYnVzKSB7CisJCQlmb3JfZWFjaF9lYnVzZGV2KGVkZXYsIGVidXMpIHsKKwkJCQlpZiAoZWJ1c19mZHRocmVlX3AoZWRldikpCisJCQkJCWdvdG8gZWJ1c19kb25lOworCQkJfQorCQl9CisJZWJ1c19kb25lOgorCQlpZiAoIWVkZXYpIHsKKyNpZmRlZiBJU0FfRkxPUFBZX1dPUktTCisJCQlyZXR1cm4gaXNhX2Zsb3BweV9pbml0KCk7CisjZWxzZQorCQkJcmV0dXJuIDA7CisjZW5kaWYKKwkJfQorCisJCXByb21fZ2V0cHJvcGVydHkoZWRldi0+cHJvbV9ub2RlLCAic3RhdHVzIiwKKwkJCQkgc3RhdGUsIHNpemVvZihzdGF0ZSkpOworCQlpZiAoIXN0cm5jbXAoc3RhdGUsICJkaXNhYmxlZCIsIDgpKQorCQkJcmV0dXJuIDA7CisJCQkKKwkJRkxPUFBZX0lSUSA9IGVkZXYtPmlycXNbMF07CisKKwkJLyogTWFrZSBzdXJlIHRoZSBoaWdoIGRlbnNpdHkgYml0IGlzIHNldCwgc29tZSBzeXN0ZW1zCisJCSAqIChtb3N0IG5vdGFibHkgVWx0cmE1L1VsdHJhMTApIGNvbWUgdXAgd2l0aCBpdCBjbGVhci4KKwkJICovCisJCWF1eGlvX3JlZyA9IGVkZXYtPnJlc291cmNlWzJdLnN0YXJ0OworCQl3cml0ZWwocmVhZGwoYXV4aW9fcmVnKXwweDIsIGF1eGlvX3JlZyk7CisKKwkJc3VuX3BjaV9lYnVzX2RldiA9IGVidXMtPnNlbGY7CisKKwkJc3Bpbl9sb2NrX2luaXQoJnN1bl9wY2lfZmRfZWJ1c19kbWEubG9jayk7CisKKwkJLyogWFhYIGlvcmVtYXAgKi8KKwkJc3VuX3BjaV9mZF9lYnVzX2RtYS5yZWdzID0gZWRldi0+cmVzb3VyY2VbMV0uc3RhcnQ7CisJCWlmICghc3VuX3BjaV9mZF9lYnVzX2RtYS5yZWdzKQorCQkJcmV0dXJuIDA7CisKKwkJc3VuX3BjaV9mZF9lYnVzX2RtYS5mbGFncyA9IChFQlVTX0RNQV9GTEFHX1VTRV9FQkRNQV9IQU5ETEVSIHwKKwkJCQkJICAgICBFQlVTX0RNQV9GTEFHX1RDSV9ESVNBQkxFKTsKKwkJc3VuX3BjaV9mZF9lYnVzX2RtYS5jYWxsYmFjayA9IHN1bl9wY2lfZmRfZG1hX2NhbGxiYWNrOworCQlzdW5fcGNpX2ZkX2VidXNfZG1hLmNsaWVudF9jb29raWUgPSBOVUxMOworCQlzdW5fcGNpX2ZkX2VidXNfZG1hLmlycSA9IEZMT1BQWV9JUlE7CisJCXN0cmNweShzdW5fcGNpX2ZkX2VidXNfZG1hLm5hbWUsICJmbG9wcHkiKTsKKwkJaWYgKGVidXNfZG1hX3JlZ2lzdGVyKCZzdW5fcGNpX2ZkX2VidXNfZG1hKSkKKwkJCXJldHVybiAwOworCisJCS8qIFhYWCBpb3JlbWFwICovCisJCXN1bl9mZGMgPSAoc3RydWN0IHN1bl9mbHB5X2NvbnRyb2xsZXIgKillZGV2LT5yZXNvdXJjZVswXS5zdGFydDsKKworCQlzdW5fZmRvcHMuZmRfaW5iID0gc3VuX3BjaV9mZF9pbmI7CisJCXN1bl9mZG9wcy5mZF9vdXRiID0gc3VuX3BjaV9mZF9vdXRiOworCisJCWNhbl91c2VfdmlydHVhbF9kbWEgPSB1c2VfdmlydHVhbF9kbWEgPSAwOworCQlzdW5fZmRvcHMuZmRfZW5hYmxlX2RtYSA9IHN1bl9wY2lfZmRfZW5hYmxlX2RtYTsKKwkJc3VuX2Zkb3BzLmZkX2Rpc2FibGVfZG1hID0gc3VuX3BjaV9mZF9kaXNhYmxlX2RtYTsKKwkJc3VuX2Zkb3BzLmZkX3NldF9kbWFfbW9kZSA9IHN1bl9wY2lfZmRfc2V0X2RtYV9tb2RlOworCQlzdW5fZmRvcHMuZmRfc2V0X2RtYV9hZGRyID0gc3VuX3BjaV9mZF9zZXRfZG1hX2FkZHI7CisJCXN1bl9mZG9wcy5mZF9zZXRfZG1hX2NvdW50ID0gc3VuX3BjaV9mZF9zZXRfZG1hX2NvdW50OworCQlzdW5fZmRvcHMuZ2V0X2RtYV9yZXNpZHVlID0gc3VuX3BjaV9nZXRfZG1hX3Jlc2lkdWU7CisKKwkJc3VuX2Zkb3BzLmZkX3JlcXVlc3RfaXJxID0gc3VuX3BjaV9mZF9yZXF1ZXN0X2lycTsKKwkJc3VuX2Zkb3BzLmZkX2ZyZWVfaXJxID0gc3VuX3BjaV9mZF9mcmVlX2lycTsKKworCQlzdW5fZmRvcHMuZmRfZWplY3QgPSBzdW5fcGNpX2ZkX2VqZWN0OworCisgICAgICAgIAlmZGNfc3RhdHVzID0gKHVuc2lnbmVkIGxvbmcpICZzdW5fZmRjLT5zdGF0dXNfODIwNzc7CisJCUZMT1BQWV9NT1RPUl9NQVNLID0gMHhmMDsKKworCQkvKgorCQkgKiBYWFg6IEZpbmQgb3V0IG9uIHdoaWNoIG1hY2hpbmVzIHRoaXMgaXMgcmVhbGx5IG5lZWRlZC4KKwkJICovCisJCWlmICgxKSB7CisJCQlzdW5fcGNpX2Jyb2tlbl9kcml2ZSA9IDE7CisJCQlzdW5fZmRvcHMuZmRfb3V0YiA9IHN1bl9wY2lfZmRfYnJva2VuX291dGI7CisJCX0KKworCQlhbGxvd2VkX2RyaXZlX21hc2sgPSAwOworCQlpZiAoc3VuX3BjaV9mZF90ZXN0X2RyaXZlKCh1bnNpZ25lZCBsb25nKXN1bl9mZGMsIDApKQorCQkJc3VuX2Zsb3BweV90eXBlc1swXSA9IDQ7CisJCWlmIChzdW5fcGNpX2ZkX3Rlc3RfZHJpdmUoKHVuc2lnbmVkIGxvbmcpc3VuX2ZkYywgMSkpCisJCQlzdW5fZmxvcHB5X3R5cGVzWzFdID0gNDsKKworCQkvKgorCQkgKiBGaW5kIE5TODczMDMgU3VwZXJJTyBjb25maWcgcmVnaXN0ZXJzICh0aHJvdWdoIGVjcHApLgorCQkgKi8KKwkJZm9yX2VhY2hfZWJ1cyhlYnVzKSB7CisJCQlmb3JfZWFjaF9lYnVzZGV2KGVkZXYsIGVidXMpIHsKKwkJCQlpZiAoIXN0cmNtcChlZGV2LT5wcm9tX25hbWUsICJlY3BwIikpIHsKKwkJCQkJY29uZmlnID0gZWRldi0+cmVzb3VyY2VbMV0uc3RhcnQ7CisJCQkJCWdvdG8gY29uZmlnX2RvbmU7CisJCQkJfQorCQkJfQorCQl9CisJY29uZmlnX2RvbmU6CisKKwkJLyoKKwkJICogU2FuaXR5IGNoZWNrLCBpcyB0aGlzIHJlYWxseSB0aGUgTlM4NzMwMz8KKwkJICovCisJCXN3aXRjaCAoY29uZmlnICYgMHgzZmYpIHsKKwkJY2FzZSAweDAyZToKKwkJY2FzZSAweDE1YzoKKwkJY2FzZSAweDI2ZToKKwkJY2FzZSAweDM5ODoKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJY29uZmlnID0gMDsKKwkJfQorCisJCWlmICghY29uZmlnKQorCQkJcmV0dXJuIHN1bl9mbG9wcHlfdHlwZXNbMF07CisKKwkJLyogRW5hYmxlIFBDLUFUIG1vZGUuICovCisJCW5zODczMDNfbW9kaWZ5KGNvbmZpZywgQVNDLCAwLCAweGMwKTsKKworI2lmZGVmIFBDSV9GRENfU1dBUF9EUklWRVMKKwkJLyoKKwkJICogSWYgb25seSBGbG9wcHkgMSBpcyBwcmVzZW50LCBzd2FwIGRyaXZlcy4KKwkJICovCisJCWlmICghc3VuX2Zsb3BweV90eXBlc1swXSAmJiBzdW5fZmxvcHB5X3R5cGVzWzFdKSB7CisJCQkvKgorCQkJICogU2V0IHRoZSBkcml2ZSBleGNoYW5nZSBiaXQgaW4gRkNSIG9uIE5TODczMDMsCisJCQkgKiBtYWtlIHNodXJlIG90aGVyIGJpdHMgYXJlIHNhbmUgYmVmb3JlIGRvaW5nIHNvLgorCQkJICovCisJCQluczg3MzAzX21vZGlmeShjb25maWcsIEZFUiwgRkVSX0VETSwgMCk7CisJCQluczg3MzAzX21vZGlmeShjb25maWcsIEFTQywgQVNDX0RSVjJfU0VMLCAwKTsKKwkJCW5zODczMDNfbW9kaWZ5KGNvbmZpZywgRkNSLCAwLCBGQ1JfTERFKTsKKworCQkJY29uZmlnID0gc3VuX2Zsb3BweV90eXBlc1swXTsKKwkJCXN1bl9mbG9wcHlfdHlwZXNbMF0gPSBzdW5fZmxvcHB5X3R5cGVzWzFdOworCQkJc3VuX2Zsb3BweV90eXBlc1sxXSA9IGNvbmZpZzsKKworCQkJaWYgKHN1bl9wY2lfYnJva2VuX2RyaXZlICE9IC0xKSB7CisJCQkJc3VuX3BjaV9icm9rZW5fZHJpdmUgPSAxIC0gc3VuX3BjaV9icm9rZW5fZHJpdmU7CisJCQkJc3VuX2Zkb3BzLmZkX291dGIgPSBzdW5fcGNpX2ZkX2xkZV9icm9rZW5fb3V0YjsKKwkJCX0KKwkJfQorI2VuZGlmIC8qIFBDSV9GRENfU1dBUF9EUklWRVMgKi8KKworCQlyZXR1cm4gc3VuX2Zsb3BweV90eXBlc1swXTsKKyNlbHNlCisJCXJldHVybiAwOworI2VuZGlmCisJfQorCXByb21fZ2V0cHJvcGVydHkoc2Rldi0+cHJvbV9ub2RlLCAic3RhdHVzIiwgc3RhdGUsIHNpemVvZihzdGF0ZSkpOworCWlmKCFzdHJuY21wKHN0YXRlLCAiZGlzYWJsZWQiLCA4KSkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIFdlIGNhbm5vdCBkbyBzYnVzX2lvcmVtYXAgaGVyZTogaXQgZG9lcyByZXF1ZXN0X3JlZ2lvbiwKKwkgKiB3aGljaCB0aGUgZ2VuZXJpYyBmbG9wcHkgZHJpdmVyIHRyaWVzIHRvIGRvIG9uY2UgYWdhaW4uCisJICogQnV0IHdlIG11c3QgdXNlIHRoZSBzZGV2IHJlc291cmNlIHZhbHVlcyBhcyB0aGV5IGhhdmUKKwkgKiBoYWQgcGFyZW50IHJhbmdlcyBhcHBsaWVkLgorCSAqLworCXN1bl9mZGMgPSAoc3RydWN0IHN1bl9mbHB5X2NvbnRyb2xsZXIgKikKKwkJKHNkZXYtPnJlc291cmNlWzBdLnN0YXJ0ICsKKwkJICgoc2Rldi0+cmVzb3VyY2VbMF0uZmxhZ3MgJiAweDFmZlVMKSA8PCAzMlVMKSk7CisKKwkvKiBMYXN0IG1pbnV0ZSBzYW5pdHkgY2hlY2suLi4gKi8KKwlpZihzYnVzX3JlYWRiKCZzdW5fZmRjLT5zdGF0dXMxXzgyMDc3KSA9PSAweGZmKSB7CisJCXN1bl9mZGMgPSAoc3RydWN0IHN1bl9mbHB5X2NvbnRyb2xsZXIgKiktMTsKKwkJcmV0dXJuIDA7CisJfQorCisgICAgICAgIHN1bl9mZG9wcy5mZF9pbmIgPSBzdW5fODIwNzdfZmRfaW5iOworICAgICAgICBzdW5fZmRvcHMuZmRfb3V0YiA9IHN1bl84MjA3N19mZF9vdXRiOworCisJY2FuX3VzZV92aXJ0dWFsX2RtYSA9IHVzZV92aXJ0dWFsX2RtYSA9IDE7CisJc3VuX2Zkb3BzLmZkX2VuYWJsZV9kbWEgPSBzdW5fZmRfZW5hYmxlX2RtYTsKKwlzdW5fZmRvcHMuZmRfZGlzYWJsZV9kbWEgPSBzdW5fZmRfZGlzYWJsZV9kbWE7CisJc3VuX2Zkb3BzLmZkX3NldF9kbWFfbW9kZSA9IHN1bl9mZF9zZXRfZG1hX21vZGU7CisJc3VuX2Zkb3BzLmZkX3NldF9kbWFfYWRkciA9IHN1bl9mZF9zZXRfZG1hX2FkZHI7CisJc3VuX2Zkb3BzLmZkX3NldF9kbWFfY291bnQgPSBzdW5fZmRfc2V0X2RtYV9jb3VudDsKKwlzdW5fZmRvcHMuZ2V0X2RtYV9yZXNpZHVlID0gc3VuX2dldF9kbWFfcmVzaWR1ZTsKKworCXN1bl9mZG9wcy5mZF9yZXF1ZXN0X2lycSA9IHN1bl9mZF9yZXF1ZXN0X2lycTsKKwlzdW5fZmRvcHMuZmRfZnJlZV9pcnEgPSBzdW5fZmRfZnJlZV9pcnE7CisKKwlzdW5fZmRvcHMuZmRfZWplY3QgPSBzdW5fZmRfZWplY3Q7CisKKyAgICAgICAgZmRjX3N0YXR1cyA9ICh1bnNpZ25lZCBsb25nKSAmc3VuX2ZkYy0+c3RhdHVzXzgyMDc3OworCisJLyogU3VjY2Vzcy4uLiAqLworCWFsbG93ZWRfZHJpdmVfbWFzayA9IDB4MDE7CisJc3VuX2Zsb3BweV90eXBlc1swXSA9IDQ7CisJc3VuX2Zsb3BweV90eXBlc1sxXSA9IDA7CisKKwlyZXR1cm4gc3VuX2Zsb3BweV90eXBlc1swXTsKK30KKworI2RlZmluZSBFWFRSQV9GTE9QUFlfUEFSQU1TCisKKyNlbmRpZiAvKiAhKF9fQVNNX1NQQVJDNjRfRkxPUFBZX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2ZwdW1hY3JvLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2ZwdW1hY3JvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU4M2U1ZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvZnB1bWFjcm8uaApAQCAtMCwwICsxLDMzIEBACisvKiBmcHVtYWNyby5oOiBGUFUgcmVsYXRlZCBtYWNyb3MuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk3IEpha3ViIEplbGluZWsgKGpqQHN1bnNpdGUubWZmLmN1bmkuY3opCisgKiBDb3B5cmlnaHQgKEMpIDE5OTcgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQorICovCisKKyNpZm5kZWYgX1NQQVJDNjRfRlBVTUFDUk9fSAorI2RlZmluZSBfU1BBUkM2NF9GUFVNQUNST19ICisKKyNpbmNsdWRlIDxhc20vYXNpLmg+CisjaW5jbHVkZSA8YXNtL3Zpc2FzbS5oPgorCitzdHJ1Y3QgZnB1c3RhdGUgeworCXUzMglyZWdzWzY0XTsKK307CisKKyNkZWZpbmUgRlBVU1RBVEUgKHN0cnVjdCBmcHVzdGF0ZSAqKShjdXJyZW50X3RocmVhZF9pbmZvKCktPmZwcmVncykKKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBmcHJzX3JlYWQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHJldHZhbDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKCJyZCAlJWZwcnMsICUwIiA6ICI9ciIgKHJldHZhbCkpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBmcHJzX3dyaXRlKHVuc2lnbmVkIGxvbmcgdmFsKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKCJ3ciAlMCwgMHgwLCAlJWZwcnMiIDogOiAiciIgKHZhbCkpOworfQorCisjZW5kaWYgLyogIShfU1BBUkM2NF9GUFVNQUNST19IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9oYXJkaXJxLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2hhcmRpcnEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmRiMWFlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9oYXJkaXJxLmgKQEAgLTAsMCArMSwyMyBAQAorLyogaGFyZGlycS5oOiA2NC1iaXQgU3BhcmMgaGFyZCBJUlEgc3VwcG9ydC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTggRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQorICovCisKKyNpZm5kZWYgX19TUEFSQzY0X0hBUkRJUlFfSAorI2RlZmluZSBfX1NQQVJDNjRfSEFSRElSUV9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgorCisvKiBydHJhcC5TIGlzIHNlbnNpdGl2ZSB0byB0aGUgb2Zmc2V0cyBvZiB0aGVzZSBmaWVsZHMgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQgX19zb2Z0aXJxX3BlbmRpbmc7Cit9IF9fX19jYWNoZWxpbmVfYWxpZ25lZCBpcnFfY3B1c3RhdF90OworCisjaW5jbHVkZSA8bGludXgvaXJxX2NwdXN0YXQuaD4JLyogU3RhbmRhcmQgbWFwcGluZ3MgZm9yIGlycV9jcHVzdGF0X3QgYWJvdmUgKi8KKworI2RlZmluZSBIQVJESVJRX0JJVFMJOAorCisjZW5kaWYgLyogIShfX1NQQVJDNjRfSEFSRElSUV9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9oZHJlZy5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9oZHJlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmN2ZkMWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2hkcmVnLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2hkcmVnLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2hlYWQuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvaGVhZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2M2EzM2MKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2hlYWQuaApAQCAtMCwwICsxLDU5IEBACisvKiAkSWQ6IGhlYWQuaCx2IDEuMzAgMTk5Ny8wOC8wOCAwODozNDozMyBqaiBFeHAgJCAqLworI2lmbmRlZiBfU1BBUkM2NF9IRUFEX0gKKyNkZWZpbmUgX1NQQVJDNjRfSEVBRF9ICisKKyNpbmNsdWRlIDxhc20vcHN0YXRlLmg+CisKKyNkZWZpbmUgS0VSTkJBU0UJMHg0MDAwMDAKKworI2RlZmluZQlQVFJFR1NfT0ZGCShTVEFDS19CSUFTICsgU1RBQ0tGUkFNRV9TWikKKworI2RlZmluZSBfX0NIRUVUQUhfSUQJMHgwMDNlMDAxNAorI2RlZmluZSBfX0pBTEFQRU5PX0lECTB4MDAzZTAwMTYKKworI2RlZmluZSBDSEVFVEFIX01BTlVGCQkweDAwM2UKKyNkZWZpbmUgQ0hFRVRBSF9JTVBMCQkweDAwMTQKKyNkZWZpbmUgQ0hFRVRBSF9QTFVTX0lNUEwJMHgwMDE1CisjZGVmaW5lIEpBTEFQRU5PX0lNUEwJCTB4MDAxNgorCisjZGVmaW5lIEJSQU5DSF9JRl9DSEVFVEFIX0JBU0UodG1wMSx0bXAyLGxhYmVsKQlcCisJcmRwcgkldmVyLCAldG1wMTsJCQlcCisJc2V0aGkJJWhpKF9fQ0hFRVRBSF9JRCksICV0bXAyOwlcCisJc3JseAkldG1wMSwgMzIsICV0bXAxOwkJXAorCW9yCSV0bXAyLCAlbG8oX19DSEVFVEFIX0lEKSwgJXRtcDI7XAorCWNtcAkldG1wMSwgJXRtcDI7CQkJXAorCWJlLHBuCSVpY2MsIGxhYmVsOwkJCVwKKwkgbm9wOworCisjZGVmaW5lIEJSQU5DSF9JRl9KQUxBUEVOTyh0bXAxLHRtcDIsbGFiZWwpCVwKKwlyZHByCSV2ZXIsICV0bXAxOwkJCVwKKwlzZXRoaQklaGkoX19KQUxBUEVOT19JRCksICV0bXAyOwlcCisJc3JseAkldG1wMSwgMzIsICV0bXAxOwkJXAorCW9yCSV0bXAyLCAlbG8oX19KQUxBUEVOT19JRCksICV0bXAyO1wKKwljbXAJJXRtcDEsICV0bXAyOwkJCVwKKwliZSxwbgklaWNjLCBsYWJlbDsJCQlcCisJIG5vcDsKKworI2RlZmluZSBCUkFOQ0hfSUZfQ0hFRVRBSF9QTFVTX09SX0ZPTExPV09OKHRtcDEsdG1wMixsYWJlbCkJXAorCXJkcHIJJXZlciwgJXRtcDE7CQkJXAorCXNybHgJJXRtcDEsICgzMiArIDE2KSwgJXRtcDI7CVwKKwljbXAJJXRtcDIsIENIRUVUQUhfTUFOVUY7CQlcCisJYm5lLHB0CSV4Y2MsIDk5ZjsJCQlcCisJIHNsbHgJJXRtcDEsIDE2LCAldG1wMTsJCVwKKwlzcmx4CSV0bXAxLCAoMzIgKyAxNiksICV0bXAyOwlcCisJY21wCSV0bXAyLCBDSEVFVEFIX1BMVVNfSU1QTDsJXAorCWJnZXUscHQJJXhjYywgbGFiZWw7CQkJXAorOTk6CSBub3A7CisKKyNkZWZpbmUgQlJBTkNIX0lGX0FOWV9DSEVFVEFIKHRtcDEsdG1wMixsYWJlbCkJXAorCXJkcHIJJXZlciwgJXRtcDE7CQkJXAorCXNybHgJJXRtcDEsICgzMiArIDE2KSwgJXRtcDI7CVwKKwljbXAJJXRtcDIsIENIRUVUQUhfTUFOVUY7CQlcCisJYm5lLHB0CSV4Y2MsIDk5ZjsJCQlcCisJIHNsbHgJJXRtcDEsIDE2LCAldG1wMTsJCVwKKwlzcmx4CSV0bXAxLCAoMzIgKyAxNiksICV0bXAyOwlcCisJY21wCSV0bXAyLCBDSEVFVEFIX0lNUEw7CQlcCisJYmdldSxwdAkleGNjLCBsYWJlbDsJCQlcCis5OToJIG5vcDsKKworI2VuZGlmIC8qICEoX1NQQVJDNjRfSEVBRF9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9od19pcnEuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvaHdfaXJxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTUzY2FlMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvaHdfaXJxLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fQVNNX1NQQVJDNjRfSFdfSVJRX0gKKyNkZWZpbmUgX19BU01fU1BBUkM2NF9IV19JUlFfSAorCisvKiBEdW1teSBpbmNsdWRlLiAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvaWRlLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2lkZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjMTA5ODQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2lkZS5oCkBAIC0wLDAgKzEsMTIxIEBACisvKiAkSWQ6IGlkZS5oLHYgMS4yMSAyMDAxLzA5LzI1IDIwOjIxOjQ4IGthbm9qIEV4cCAkCisgKiBpZGUuaDogVWx0cmEvUENJIHNwZWNpZmljIElERSBnbHVlLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NyAgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQorICogQ29weXJpZ2h0IChDKSAxOTk4ICBFZGRpZSBDLiBEb3N0ICAgKGVjZEBza3luZXQuYmUpCisgKi8KKworI2lmbmRlZiBfU1BBUkM2NF9JREVfSAorI2RlZmluZSBfU1BBUkM2NF9JREVfSAorCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vc3BpdGZpcmUuaD4KKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorCisjaWZuZGVmIE1BWF9IV0lGUworIyBpZmRlZiBDT05GSUdfQkxLX0RFVl9JREVQQ0kKKyNkZWZpbmUgTUFYX0hXSUZTCTEwCisjIGVsc2UKKyNkZWZpbmUgTUFYX0hXSUZTCTIKKyMgZW5kaWYKKyNlbmRpZgorCisjZGVmaW5lIElERV9BUkNIX09CU09MRVRFX0lOSVQKKyNkZWZpbmUgaWRlX2RlZmF1bHRfaW9fY3RsKGJhc2UpCSgoYmFzZSkgKyAweDIwNikgLyogb2Jzb2xldGUgKi8KKworI2RlZmluZSBfX2lkZV9pbnNsKGRhdGFfcmVnLCBidWZmZXIsIHdjb3VudCkgXAorCV9faWRlX2luc3coZGF0YV9yZWcsIGJ1ZmZlciwgKHdjb3VudCk8PDEpCisjZGVmaW5lIF9faWRlX291dHNsKGRhdGFfcmVnLCBidWZmZXIsIHdjb3VudCkgXAorCV9faWRlX291dHN3KGRhdGFfcmVnLCBidWZmZXIsICh3Y291bnQpPDwxKQorCisvKiBPbiBzcGFyYzY0LCBJL08gcG9ydHMgYW5kIE1NSU8gcmVnaXN0ZXJzIGFyZSBhY2Nlc3NlZCBpZGVudGljYWxseS4gICovCisjZGVmaW5lIF9faWRlX21tX2luc3cJX19pZGVfaW5zdworI2RlZmluZSBfX2lkZV9tbV9pbnNsCV9faWRlX2luc2wKKyNkZWZpbmUgX19pZGVfbW1fb3V0c3cJX19pZGVfb3V0c3cKKyNkZWZpbmUgX19pZGVfbW1fb3V0c2wJX19pZGVfb3V0c2wKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaW53X2JlKHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwl1bnNpZ25lZCBpbnQgcmV0OworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oImxkdWhhIFslMV0gJTIsICUwIgorCQkJICAgICA6ICI9ciIgKHJldCkKKwkJCSAgICAgOiAiciIgKGFkZHIpLCAiaSIgKEFTSV9QSFlTX0JZUEFTU19FQ19FKSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19pZGVfaW5zdyh2b2lkIF9faW9tZW0gKnBvcnQsIHZvaWQgKmRzdCwgdTMyIGNvdW50KQoreworI2lmZGVmIERDQUNIRV9BTElBU0lOR19QT1NTSUJMRQorCXVuc2lnbmVkIGxvbmcgZW5kID0gKHVuc2lnbmVkIGxvbmcpZHN0ICsgKGNvdW50IDw8IDEpOworI2VuZGlmCisJdTE2ICpwcyA9IGRzdDsKKwl1MzIgKnBpOworCisJaWYoKCh1NjQpcHMpICYgMHgyKSB7CisJCSpwcysrID0gaW53X2JlKHBvcnQpOworCQljb3VudC0tOworCX0KKwlwaSA9ICh1MzIgKilwczsKKwl3aGlsZShjb3VudCA+PSAyKSB7CisJCXUzMiB3OworCisJCXcgID0gaW53X2JlKHBvcnQpIDw8IDE2OworCQl3IHw9IGlud19iZShwb3J0KTsKKwkJKnBpKysgPSB3OworCQljb3VudCAtPSAyOworCX0KKwlwcyA9ICh1MTYgKilwaTsKKwlpZihjb3VudCkKKwkJKnBzKysgPSBpbndfYmUocG9ydCk7CisKKyNpZmRlZiBEQ0FDSEVfQUxJQVNJTkdfUE9TU0lCTEUKKwlfX2ZsdXNoX2RjYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZylkc3QsIGVuZCk7CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSB2b2lkIG91dHdfYmUodW5zaWduZWQgc2hvcnQgdywgdm9pZCBfX2lvbWVtICphZGRyKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdGhhICUwLCBbJTFdICUyIgorCQkJICAgICA6IC8qIG5vIG91dHB1dHMgKi8KKwkJCSAgICAgOiAiciIgKHcpLCAiciIgKGFkZHIpLCAiaSIgKEFTSV9QSFlTX0JZUEFTU19FQ19FKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2lkZV9vdXRzdyh2b2lkIF9faW9tZW0gKnBvcnQsIHZvaWQgKnNyYywgdTMyIGNvdW50KQoreworI2lmZGVmIERDQUNIRV9BTElBU0lOR19QT1NTSUJMRQorCXVuc2lnbmVkIGxvbmcgZW5kID0gKHVuc2lnbmVkIGxvbmcpc3JjICsgKGNvdW50IDw8IDEpOworI2VuZGlmCisJY29uc3QgdTE2ICpwcyA9IHNyYzsKKwljb25zdCB1MzIgKnBpOworCisJaWYoKCh1NjQpc3JjKSAmIDB4MikgeworCQlvdXR3X2JlKCpwcysrLCBwb3J0KTsKKwkJY291bnQtLTsKKwl9CisJcGkgPSAoY29uc3QgdTMyICopcHM7CisJd2hpbGUoY291bnQgPj0gMikgeworCQl1MzIgdzsKKworCQl3ID0gKnBpKys7CisJCW91dHdfYmUoKHcgPj4gMTYpLCBwb3J0KTsKKwkJb3V0d19iZSh3LCBwb3J0KTsKKwkJY291bnQgLT0gMjsKKwl9CisJcHMgPSAoY29uc3QgdTE2ICopcGk7CisJaWYoY291bnQpCisJCW91dHdfYmUoKnBzLCBwb3J0KTsKKworI2lmZGVmIERDQUNIRV9BTElBU0lOR19QT1NTSUJMRQorCV9fZmx1c2hfZGNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKXNyYywgZW5kKTsKKyNlbmRpZgorfQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX1NQQVJDNjRfSURFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvaWRwcm9tLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2lkcHJvbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwMTQ4M2MKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2lkcHJvbS5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qICRJZDogaWRwcm9tLmgsdiAxLjIgMTk5Ny8wNC8wNCAwMDo1MDoxNiBkYXZlbSBFeHAgJAorICogaWRwcm9tLmg6IE1hY3JvcyBhbmQgZGVmaW5lcyBmb3IgaWRwcm9tIHJvdXRpbmVzCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk2IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKKyAqLworCisjaWZuZGVmIF9TUEFSQzY0X0lEUFJPTV9ICisjZGVmaW5lIF9TUEFSQzY0X0lEUFJPTV9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKiBPZmZzZXQgaW50byB0aGUgRUVQUk9NIHdoZXJlIHRoZSBpZCBQUk9NIGlzIGxvY2F0ZWQgb24gdGhlIDRjICovCisjZGVmaW5lIElEUFJPTV9PRkZTRVQgIDB4N2Q4CisKKy8qIE9uIHN1bjRtOyBwaHlzaWNhbC4gKi8KKy8qIE1pY3JvU1BBUkMoLUlJKSBkb2VzIG5vdCBkZWNvZGUgMzFyZCBiaXQsIGJ1dCBpdCB3b3Jrcy4gKi8KKyNkZWZpbmUgSURQUk9NX09GRlNFVF9NICAweGZkOAorCitzdHJ1Y3QgaWRwcm9tCit7CisJdTgJCWlkX2Zvcm1hdDsJLyogRm9ybWF0IGlkZW50aWZpZXIgKGFsd2F5cyAweDAxKSAqLworCXU4CQlpZF9tYWNodHlwZTsJLyogTWFjaGluZSB0eXBlICovCisJdTgJCWlkX2V0aGFkZHJbNl07CS8qIEhhcmR3YXJlIGV0aGVybmV0IGFkZHJlc3MgKi8KKwlzMzIJCWlkX2RhdGU7CS8qIERhdGUgb2YgbWFudWZhY3R1cmUgKi8KKwl1MzIJCWlkX3Nlcm51bToyNDsJLyogVW5pcXVlIHNlcmlhbCBudW1iZXIgKi8KKwl1OAkJaWRfY2tzdW07CS8qIENoZWNrc3VtIC0geG9yIG9mIHRoZSBkYXRhIGJ5dGVzICovCisJdTgJCXJlc2VydmVkWzE2XTsKK307CisKK2V4dGVybiBzdHJ1Y3QgaWRwcm9tICppZHByb207CitleHRlcm4gdm9pZCBpZHByb21faW5pdCh2b2lkKTsKKworI2RlZmluZSBJRFBST01fU0laRSAgKHNpemVvZihzdHJ1Y3QgaWRwcm9tKSkKKworI2VuZGlmIC8qICEoX1NQQVJDX0lEUFJPTV9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9pby5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9pby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmZGNlYTkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2lvLmgKQEAgLTAsMCArMSw1MDEgQEAKKy8qICRJZDogaW8uaCx2IDEuNDcgMjAwMS8xMi8xMyAxMDozNjowMiBkYXZlbSBFeHAgJCAqLworI2lmbmRlZiBfX1NQQVJDNjRfSU9fSAorI2RlZmluZSBfX1NQQVJDNjRfSU9fSAorCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4gICAgICAvKiBJTyBhZGRyZXNzIG1hcHBpbmcgcm91dGluZXMgbmVlZCB0aGlzICovCisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9hc2kuaD4KKworLyogUEMgY3JhcG9sYS4uLiAqLworI2RlZmluZSBfX1NMT1dfRE9XTl9JTwlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIFNMT1dfRE9XTl9JTwlkbyB7IH0gd2hpbGUgKDApCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIHZpcnRfdG9fYnVzX25vdF9kZWZpbmVkX3VzZV9wY2lfbWFwKHZvbGF0aWxlIHZvaWQgKmFkZHIpOworI2RlZmluZSB2aXJ0X3RvX2J1cyB2aXJ0X3RvX2J1c19ub3RfZGVmaW5lZF91c2VfcGNpX21hcAorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgYnVzX3RvX3ZpcnRfbm90X2RlZmluZWRfdXNlX3BjaV9tYXAodm9sYXRpbGUgdm9pZCAqYWRkcik7CisjZGVmaW5lIGJ1c190b192aXJ0IGJ1c190b192aXJ0X25vdF9kZWZpbmVkX3VzZV9wY2lfbWFwCisKKy8qIEJJTyBsYXllciBkZWZpbml0aW9ucy4gKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIGtlcm5fYmFzZSwga2Vybl9zaXplOworI2RlZmluZSBwYWdlX3RvX3BoeXMocGFnZSkJKHBhZ2VfdG9fcGZuKHBhZ2UpIDw8IFBBR0VfU0hJRlQpCisjZGVmaW5lIEJJT19WTUVSR0VfQk9VTkRBUlkJODE5MgorCisvKiBEaWZmZXJlbnQgUENJIGNvbnRyb2xsZXJzIHdlIHN1cHBvcnQgaGF2ZSB0aGVpciBQQ0kgTUVNIHNwYWNlCisgKiBtYXBwZWQgdG8gYW4gZWl0aGVyIDJHQiAoUHN5Y2hvKSBvciA0R0IgKFNhYnJlKSBhbGlnbmVkIGFyZWEsCisgKiBzbyBuZWVkIHRvIGNob3Agb2ZmIHRoZSB0b3AgMzMgb3IgMzIgYml0cy4KKyAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGNpX21lbXNwYWNlX21hc2s7CisKKyNkZWZpbmUgYnVzX2R2bWFfdG9fbWVtKF9fdmFkZHIpICgoX192YWRkcikgJiBwY2lfbWVtc3BhY2VfbWFzaykKKworc3RhdGljIF9faW5saW5lX18gdTggX2luYih1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJdTggcmV0OworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oImxkdWJhXHRbJTFdICUyLCAlMFx0LyogcGNpX2luYiAqLyIKKwkJCSAgICAgOiAiPXIiIChyZXQpCisJCQkgICAgIDogInIiIChhZGRyKSwgImkiIChBU0lfUEhZU19CWVBBU1NfRUNfRV9MKSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1MTYgX2ludyh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJdTE2IHJldDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKCJsZHVoYVx0WyUxXSAlMiwgJTBcdC8qIHBjaV9pbncgKi8iCisJCQkgICAgIDogIj1yIiAocmV0KQorCQkJICAgICA6ICJyIiAoYWRkciksICJpIiAoQVNJX1BIWVNfQllQQVNTX0VDX0VfTCkpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIF9faW5saW5lX18gdTMyIF9pbmwodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXUzMiByZXQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibGR1d2FcdFslMV0gJTIsICUwXHQvKiBwY2lfaW5sICovIgorCQkJICAgICA6ICI9ciIgKHJldCkKKwkJCSAgICAgOiAiciIgKGFkZHIpLCAiaSIgKEFTSV9QSFlTX0JZUEFTU19FQ19FX0wpKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX291dGIodTggYiwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdGJhXHQlcjAsIFslMV0gJTJcdC8qIHBjaV9vdXRiICovIgorCQkJICAgICA6IC8qIG5vIG91dHB1dHMgKi8KKwkJCSAgICAgOiAiSnIiIChiKSwgInIiIChhZGRyKSwgImkiIChBU0lfUEhZU19CWVBBU1NfRUNfRV9MKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX291dHcodTE2IHcsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RoYVx0JXIwLCBbJTFdICUyXHQvKiBwY2lfb3V0dyAqLyIKKwkJCSAgICAgOiAvKiBubyBvdXRwdXRzICovCisJCQkgICAgIDogIkpyIiAodyksICJyIiAoYWRkciksICJpIiAoQVNJX1BIWVNfQllQQVNTX0VDX0VfTCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9vdXRsKHUzMiBsLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0d2FcdCVyMCwgWyUxXSAlMlx0LyogcGNpX291dGwgKi8iCisJCQkgICAgIDogLyogbm8gb3V0cHV0cyAqLworCQkJICAgICA6ICJKciIgKGwpLCAiciIgKGFkZHIpLCAiaSIgKEFTSV9QSFlTX0JZUEFTU19FQ19FX0wpKTsKK30KKworI2RlZmluZSBpbmIoX19hZGRyKQkJKF9pbmIoKHVuc2lnbmVkIGxvbmcpKF9fYWRkcikpKQorI2RlZmluZSBpbncoX19hZGRyKQkJKF9pbncoKHVuc2lnbmVkIGxvbmcpKF9fYWRkcikpKQorI2RlZmluZSBpbmwoX19hZGRyKQkJKF9pbmwoKHVuc2lnbmVkIGxvbmcpKF9fYWRkcikpKQorI2RlZmluZSBvdXRiKF9fYiwgX19hZGRyKQkoX291dGIoKHU4KShfX2IpLCAodW5zaWduZWQgbG9uZykoX19hZGRyKSkpCisjZGVmaW5lIG91dHcoX193LCBfX2FkZHIpCShfb3V0dygodTE2KShfX3cpLCAodW5zaWduZWQgbG9uZykoX19hZGRyKSkpCisjZGVmaW5lIG91dGwoX19sLCBfX2FkZHIpCShfb3V0bCgodTMyKShfX2wpLCAodW5zaWduZWQgbG9uZykoX19hZGRyKSkpCisKKyNkZWZpbmUgaW5iX3AoX19hZGRyKSAJCWluYihfX2FkZHIpCisjZGVmaW5lIG91dGJfcChfX2IsIF9fYWRkcikJb3V0YihfX2IsIF9fYWRkcikKKyNkZWZpbmUgaW53X3AoX19hZGRyKQkJaW53KF9fYWRkcikKKyNkZWZpbmUgb3V0d19wKF9fdywgX19hZGRyKQlvdXR3KF9fdywgX19hZGRyKQorI2RlZmluZSBpbmxfcChfX2FkZHIpCQlpbmwoX19hZGRyKQorI2RlZmluZSBvdXRsX3AoX19sLCBfX2FkZHIpCW91dGwoX19sLCBfX2FkZHIpCisKK2V4dGVybiB2b2lkIG91dHNiKHZvaWQgX19pb21lbSAqYWRkciwgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKK2V4dGVybiB2b2lkIG91dHN3KHZvaWQgX19pb21lbSAqYWRkciwgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKK2V4dGVybiB2b2lkIG91dHNsKHZvaWQgX19pb21lbSAqYWRkciwgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKK2V4dGVybiB2b2lkIGluc2Iodm9pZCBfX2lvbWVtICphZGRyLCB2b2lkICpkc3QsIHVuc2lnbmVkIGxvbmcgY291bnQpOworZXh0ZXJuIHZvaWQgaW5zdyh2b2lkIF9faW9tZW0gKmFkZHIsIHZvaWQgKmRzdCwgdW5zaWduZWQgbG9uZyBjb3VudCk7CitleHRlcm4gdm9pZCBpbnNsKHZvaWQgX19pb21lbSAqYWRkciwgdm9pZCAqZHN0LCB1bnNpZ25lZCBsb25nIGNvdW50KTsKKyNkZWZpbmUgaW9yZWFkOF9yZXAoYSxkLGMpCWluc2IoYSxkLGMpCisjZGVmaW5lIGlvcmVhZDE2X3JlcChhLGQsYykJaW5zdyhhLGQsYykKKyNkZWZpbmUgaW9yZWFkMzJfcmVwKGEsZCxjKQlpbnNsKGEsZCxjKQorI2RlZmluZSBpb3dyaXRlOF9yZXAoYSxzLGMpCW91dHNiKGEscyxjKQorI2RlZmluZSBpb3dyaXRlMTZfcmVwKGEscyxjKQlvdXRzdyhhLHMsYykKKyNkZWZpbmUgaW93cml0ZTMyX3JlcChhLHMsYykJb3V0c2woYSxzLGMpCisKKy8qIE1lbW9yeSBmdW5jdGlvbnMsIHNhbWUgYXMgSS9PIGFjY2Vzc2VzIG9uIFVsdHJhLiAqLworc3RhdGljIGlubGluZSB1OCBfcmVhZGIoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQorewl1OCByZXQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibGR1YmFcdFslMV0gJTIsICUwXHQvKiBwY2lfcmVhZGIgKi8iCisJCQkgICAgIDogIj1yIiAocmV0KQorCQkJICAgICA6ICJyIiAoYWRkciksICJpIiAoQVNJX1BIWVNfQllQQVNTX0VDX0VfTCkpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTE2IF9yZWFkdyhjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CXUxNiByZXQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibGR1aGFcdFslMV0gJTIsICUwXHQvKiBwY2lfcmVhZHcgKi8iCisJCQkgICAgIDogIj1yIiAocmV0KQorCQkJICAgICA6ICJyIiAoYWRkciksICJpIiAoQVNJX1BIWVNfQllQQVNTX0VDX0VfTCkpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSB1MzIgX3JlYWRsKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sJdTMyIHJldDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKCJsZHV3YVx0WyUxXSAlMiwgJTBcdC8qIHBjaV9yZWFkbCAqLyIKKwkJCSAgICAgOiAiPXIiIChyZXQpCisJCQkgICAgIDogInIiIChhZGRyKSwgImkiIChBU0lfUEhZU19CWVBBU1NfRUNfRV9MKSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIHU2NCBfcmVhZHEoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQorewl1NjQgcmV0OworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oImxkeGFcdFslMV0gJTIsICUwXHQvKiBwY2lfcmVhZHEgKi8iCisJCQkgICAgIDogIj1yIiAocmV0KQorCQkJICAgICA6ICJyIiAoYWRkciksICJpIiAoQVNJX1BIWVNfQllQQVNTX0VDX0VfTCkpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF93cml0ZWIodTggYiwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdGJhXHQlcjAsIFslMV0gJTJcdC8qIHBjaV93cml0ZWIgKi8iCisJCQkgICAgIDogLyogbm8gb3V0cHV0cyAqLworCQkJICAgICA6ICJKciIgKGIpLCAiciIgKGFkZHIpLCAiaSIgKEFTSV9QSFlTX0JZUEFTU19FQ19FX0wpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF93cml0ZXcodTE2IHcsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RoYVx0JXIwLCBbJTFdICUyXHQvKiBwY2lfd3JpdGV3ICovIgorCQkJICAgICA6IC8qIG5vIG91dHB1dHMgKi8KKwkJCSAgICAgOiAiSnIiICh3KSwgInIiIChhZGRyKSwgImkiIChBU0lfUEhZU19CWVBBU1NfRUNfRV9MKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfd3JpdGVsKHUzMiBsLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0d2FcdCVyMCwgWyUxXSAlMlx0LyogcGNpX3dyaXRlbCAqLyIKKwkJCSAgICAgOiAvKiBubyBvdXRwdXRzICovCisJCQkgICAgIDogIkpyIiAobCksICJyIiAoYWRkciksICJpIiAoQVNJX1BIWVNfQllQQVNTX0VDX0VfTCkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX3dyaXRlcSh1NjQgcSwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdHhhXHQlcjAsIFslMV0gJTJcdC8qIHBjaV93cml0ZXEgKi8iCisJCQkgICAgIDogLyogbm8gb3V0cHV0cyAqLworCQkJICAgICA6ICJKciIgKHEpLCAiciIgKGFkZHIpLCAiaSIgKEFTSV9QSFlTX0JZUEFTU19FQ19FX0wpKTsKK30KKworI2RlZmluZSByZWFkYihfX2FkZHIpCQlfcmVhZGIoX19hZGRyKQorI2RlZmluZSByZWFkdyhfX2FkZHIpCQlfcmVhZHcoX19hZGRyKQorI2RlZmluZSByZWFkbChfX2FkZHIpCQlfcmVhZGwoX19hZGRyKQorI2RlZmluZSByZWFkcShfX2FkZHIpCQlfcmVhZHEoX19hZGRyKQorI2RlZmluZSByZWFkYl9yZWxheGVkKF9fYWRkcikJX3JlYWRiKF9fYWRkcikKKyNkZWZpbmUgcmVhZHdfcmVsYXhlZChfX2FkZHIpCV9yZWFkdyhfX2FkZHIpCisjZGVmaW5lIHJlYWRsX3JlbGF4ZWQoX19hZGRyKQlfcmVhZGwoX19hZGRyKQorI2RlZmluZSByZWFkcV9yZWxheGVkKF9fYWRkcikJX3JlYWRxKF9fYWRkcikKKyNkZWZpbmUgd3JpdGViKF9fYiwgX19hZGRyKQlfd3JpdGViKF9fYiwgX19hZGRyKQorI2RlZmluZSB3cml0ZXcoX193LCBfX2FkZHIpCV93cml0ZXcoX193LCBfX2FkZHIpCisjZGVmaW5lIHdyaXRlbChfX2wsIF9fYWRkcikJX3dyaXRlbChfX2wsIF9fYWRkcikKKyNkZWZpbmUgd3JpdGVxKF9fcSwgX19hZGRyKQlfd3JpdGVxKF9fcSwgX19hZGRyKQorCisvKiBOb3cgdmVyc2lvbnMgd2l0aG91dCBieXRlLXN3YXBwaW5nLiAqLworc3RhdGljIF9faW5saW5lX18gdTggX3Jhd19yZWFkYih1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJdTggcmV0OworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oImxkdWJhXHRbJTFdICUyLCAlMFx0LyogcGNpX3Jhd19yZWFkYiAqLyIKKwkJCSAgICAgOiAiPXIiIChyZXQpCisJCQkgICAgIDogInIiIChhZGRyKSwgImkiIChBU0lfUEhZU19CWVBBU1NfRUNfRSkpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIF9faW5saW5lX18gdTE2IF9yYXdfcmVhZHcodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXUxNiByZXQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibGR1aGFcdFslMV0gJTIsICUwXHQvKiBwY2lfcmF3X3JlYWR3ICovIgorCQkJICAgICA6ICI9ciIgKHJldCkKKwkJCSAgICAgOiAiciIgKGFkZHIpLCAiaSIgKEFTSV9QSFlTX0JZUEFTU19FQ19FKSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1MzIgX3Jhd19yZWFkbCh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJdTMyIHJldDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKCJsZHV3YVx0WyUxXSAlMiwgJTBcdC8qIHBjaV9yYXdfcmVhZGwgKi8iCisJCQkgICAgIDogIj1yIiAocmV0KQorCQkJICAgICA6ICJyIiAoYWRkciksICJpIiAoQVNJX1BIWVNfQllQQVNTX0VDX0UpKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHU2NCBfcmF3X3JlYWRxKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwl1NjQgcmV0OworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oImxkeGFcdFslMV0gJTIsICUwXHQvKiBwY2lfcmF3X3JlYWRxICovIgorCQkJICAgICA6ICI9ciIgKHJldCkKKwkJCSAgICAgOiAiciIgKGFkZHIpLCAiaSIgKEFTSV9QSFlTX0JZUEFTU19FQ19FKSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9yYXdfd3JpdGViKHU4IGIsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RiYVx0JXIwLCBbJTFdICUyXHQvKiBwY2lfcmF3X3dyaXRlYiAqLyIKKwkJCSAgICAgOiAvKiBubyBvdXRwdXRzICovCisJCQkgICAgIDogIkpyIiAoYiksICJyIiAoYWRkciksICJpIiAoQVNJX1BIWVNfQllQQVNTX0VDX0UpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfcmF3X3dyaXRldyh1MTYgdywgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdGhhXHQlcjAsIFslMV0gJTJcdC8qIHBjaV9yYXdfd3JpdGV3ICovIgorCQkJICAgICA6IC8qIG5vIG91dHB1dHMgKi8KKwkJCSAgICAgOiAiSnIiICh3KSwgInIiIChhZGRyKSwgImkiIChBU0lfUEhZU19CWVBBU1NfRUNfRSkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9yYXdfd3JpdGVsKHUzMiBsLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0d2FcdCVyMCwgWyUxXSAlMlx0LyogcGNpX3Jhd193cml0ZWwgKi8iCisJCQkgICAgIDogLyogbm8gb3V0cHV0cyAqLworCQkJICAgICA6ICJKciIgKGwpLCAiciIgKGFkZHIpLCAiaSIgKEFTSV9QSFlTX0JZUEFTU19FQ19FKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX3Jhd193cml0ZXEodTY0IHEsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3R4YVx0JXIwLCBbJTFdICUyXHQvKiBwY2lfcmF3X3dyaXRlcSAqLyIKKwkJCSAgICAgOiAvKiBubyBvdXRwdXRzICovCisJCQkgICAgIDogIkpyIiAocSksICJyIiAoYWRkciksICJpIiAoQVNJX1BIWVNfQllQQVNTX0VDX0UpKTsKK30KKworI2RlZmluZSBfX3Jhd19yZWFkYihfX2FkZHIpCQkoX3Jhd19yZWFkYigodW5zaWduZWQgbG9uZykoX19hZGRyKSkpCisjZGVmaW5lIF9fcmF3X3JlYWR3KF9fYWRkcikJCShfcmF3X3JlYWR3KCh1bnNpZ25lZCBsb25nKShfX2FkZHIpKSkKKyNkZWZpbmUgX19yYXdfcmVhZGwoX19hZGRyKQkJKF9yYXdfcmVhZGwoKHVuc2lnbmVkIGxvbmcpKF9fYWRkcikpKQorI2RlZmluZSBfX3Jhd19yZWFkcShfX2FkZHIpCQkoX3Jhd19yZWFkcSgodW5zaWduZWQgbG9uZykoX19hZGRyKSkpCisjZGVmaW5lIF9fcmF3X3dyaXRlYihfX2IsIF9fYWRkcikJKF9yYXdfd3JpdGViKCh1OCkoX19iKSwgKHVuc2lnbmVkIGxvbmcpKF9fYWRkcikpKQorI2RlZmluZSBfX3Jhd193cml0ZXcoX193LCBfX2FkZHIpCShfcmF3X3dyaXRldygodTE2KShfX3cpLCAodW5zaWduZWQgbG9uZykoX19hZGRyKSkpCisjZGVmaW5lIF9fcmF3X3dyaXRlbChfX2wsIF9fYWRkcikJKF9yYXdfd3JpdGVsKCh1MzIpKF9fbCksICh1bnNpZ25lZCBsb25nKShfX2FkZHIpKSkKKyNkZWZpbmUgX19yYXdfd3JpdGVxKF9fcSwgX19hZGRyKQkoX3Jhd193cml0ZXEoKHU2NCkoX19xKSwgKHVuc2lnbmVkIGxvbmcpKF9fYWRkcikpKQorCisvKiBWYWxpZCBJL08gU3BhY2UgcmVnaW9ucyBhcmUgYW55d2hlcmUsIGJlY2F1c2UgZWFjaCBQQ0kgYnVzIHN1cHBvcnRlZAorICogY2FuIGxpdmUgaW4gYW4gYXJiaXRyYXJ5IGFyZWEgb2YgdGhlIHBoeXNpY2FsIGFkZHJlc3MgcmFuZ2UuCisgKi8KKyNkZWZpbmUgSU9fU1BBQ0VfTElNSVQgMHhmZmZmZmZmZmZmZmZmZmZmVUwKKworLyogTm93LCBTQlVTIHZhcmlhbnRzLCBvbmx5IGRpZmZlcmVuY2UgZnJvbSBQQ0kgaXMgdGhhdCB3ZSBkbworICogbm90IHVzZSBsaXR0bGUtZW5kaWFuIEFTSXMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdTggX3NidXNfcmVhZGIoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCXU4IHJldDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKCJsZHViYVx0WyUxXSAlMiwgJTBcdC8qIHNidXNfcmVhZGIgKi8iCisJCQkgICAgIDogIj1yIiAocmV0KQorCQkJICAgICA6ICJyIiAoYWRkciksICJpIiAoQVNJX1BIWVNfQllQQVNTX0VDX0UpKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTE2IF9zYnVzX3JlYWR3KGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwl1MTYgcmV0OworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oImxkdWhhXHRbJTFdICUyLCAlMFx0Lyogc2J1c19yZWFkdyAqLyIKKwkJCSAgICAgOiAiPXIiIChyZXQpCisJCQkgICAgIDogInIiIChhZGRyKSwgImkiIChBU0lfUEhZU19CWVBBU1NfRUNfRSkpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSB1MzIgX3NidXNfcmVhZGwoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCXUzMiByZXQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibGR1d2FcdFslMV0gJTIsICUwXHQvKiBzYnVzX3JlYWRsICovIgorCQkJICAgICA6ICI9ciIgKHJldCkKKwkJCSAgICAgOiAiciIgKGFkZHIpLCAiaSIgKEFTSV9QSFlTX0JZUEFTU19FQ19FKSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIHU2NCBfc2J1c19yZWFkcShjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJdTY0IHJldDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKCJsZHhhXHRbJTFdICUyLCAlMFx0Lyogc2J1c19yZWFkcSAqLyIKKwkJCSAgICAgOiAiPXIiIChyZXQpCisJCQkgICAgIDogInIiIChhZGRyKSwgImkiIChBU0lfUEhZU19CWVBBU1NfRUNfRSkpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9zYnVzX3dyaXRlYih1OCBiLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0YmFcdCVyMCwgWyUxXSAlMlx0Lyogc2J1c193cml0ZWIgKi8iCisJCQkgICAgIDogLyogbm8gb3V0cHV0cyAqLworCQkJICAgICA6ICJKciIgKGIpLCAiciIgKGFkZHIpLCAiaSIgKEFTSV9QSFlTX0JZUEFTU19FQ19FKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfc2J1c193cml0ZXcodTE2IHcsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RoYVx0JXIwLCBbJTFdICUyXHQvKiBzYnVzX3dyaXRldyAqLyIKKwkJCSAgICAgOiAvKiBubyBvdXRwdXRzICovCisJCQkgICAgIDogIkpyIiAodyksICJyIiAoYWRkciksICJpIiAoQVNJX1BIWVNfQllQQVNTX0VDX0UpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9zYnVzX3dyaXRlbCh1MzIgbCwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdHdhXHQlcjAsIFslMV0gJTJcdC8qIHNidXNfd3JpdGVsICovIgorCQkJICAgICA6IC8qIG5vIG91dHB1dHMgKi8KKwkJCSAgICAgOiAiSnIiIChsKSwgInIiIChhZGRyKSwgImkiIChBU0lfUEhZU19CWVBBU1NfRUNfRSkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX3NidXNfd3JpdGVxKHU2NCBsLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0eGFcdCVyMCwgWyUxXSAlMlx0Lyogc2J1c193cml0ZXEgKi8iCisJCQkgICAgIDogLyogbm8gb3V0cHV0cyAqLworCQkJICAgICA6ICJKciIgKGwpLCAiciIgKGFkZHIpLCAiaSIgKEFTSV9QSFlTX0JZUEFTU19FQ19FKSk7Cit9CisKKyNkZWZpbmUgc2J1c19yZWFkYihfX2FkZHIpCQlfc2J1c19yZWFkYihfX2FkZHIpCisjZGVmaW5lIHNidXNfcmVhZHcoX19hZGRyKQkJX3NidXNfcmVhZHcoX19hZGRyKQorI2RlZmluZSBzYnVzX3JlYWRsKF9fYWRkcikJCV9zYnVzX3JlYWRsKF9fYWRkcikKKyNkZWZpbmUgc2J1c19yZWFkcShfX2FkZHIpCQlfc2J1c19yZWFkcShfX2FkZHIpCisjZGVmaW5lIHNidXNfd3JpdGViKF9fYiwgX19hZGRyKQlfc2J1c193cml0ZWIoX19iLCBfX2FkZHIpCisjZGVmaW5lIHNidXNfd3JpdGV3KF9fdywgX19hZGRyKQlfc2J1c193cml0ZXcoX193LCBfX2FkZHIpCisjZGVmaW5lIHNidXNfd3JpdGVsKF9fbCwgX19hZGRyKQlfc2J1c193cml0ZWwoX19sLCBfX2FkZHIpCisjZGVmaW5lIHNidXNfd3JpdGVxKF9fbCwgX19hZGRyKQlfc2J1c193cml0ZXEoX19sLCBfX2FkZHIpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfc2J1c19tZW1zZXRfaW8odm9sYXRpbGUgdm9pZCBfX2lvbWVtICpkc3QsIGludCBjLCBfX2tlcm5lbF9zaXplX3QgbikKK3sKKwl3aGlsZShuLS0pIHsKKwkJc2J1c193cml0ZWIoYywgZHN0KTsKKwkJZHN0Kys7CisJfQorfQorCisjZGVmaW5lIHNidXNfbWVtc2V0X2lvKGQsYyxzeikJX3NidXNfbWVtc2V0X2lvKGQsYyxzeikKKworc3RhdGljIGlubGluZSB2b2lkCitfbWVtc2V0X2lvKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqZHN0LCBpbnQgYywgX19rZXJuZWxfc2l6ZV90IG4pCit7CisJdm9sYXRpbGUgdm9pZCBfX2lvbWVtICpkID0gZHN0OworCisJd2hpbGUgKG4tLSkgeworCQl3cml0ZWIoYywgZCk7CisJCWQrKzsKKwl9Cit9CisKKyNkZWZpbmUgbWVtc2V0X2lvKGQsYyxzeikJX21lbXNldF9pbyhkLGMsc3opCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorX21lbWNweV9mcm9taW8odm9pZCAqZHN0LCBjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKnNyYywgX19rZXJuZWxfc2l6ZV90IG4pCit7CisJY2hhciAqZCA9IGRzdDsKKworCXdoaWxlIChuLS0pIHsKKwkJY2hhciB0bXAgPSByZWFkYihzcmMpOworCQkqZCsrID0gdG1wOworCQlzcmMrKzsKKwl9Cit9CisKKyNkZWZpbmUgbWVtY3B5X2Zyb21pbyhkLHMsc3opCV9tZW1jcHlfZnJvbWlvKGQscyxzeikKKworc3RhdGljIGlubGluZSB2b2lkIAorX21lbWNweV90b2lvKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqZHN0LCBjb25zdCB2b2lkICpzcmMsIF9fa2VybmVsX3NpemVfdCBuKQoreworCWNvbnN0IGNoYXIgKnMgPSBzcmM7CisJdm9sYXRpbGUgdm9pZCBfX2lvbWVtICpkID0gZHN0OworCisJd2hpbGUgKG4tLSkgeworCQljaGFyIHRtcCA9ICpzKys7CisJCXdyaXRlYih0bXAsIGQpOworCQlkKys7CisJfQorfQorCisjZGVmaW5lIG1lbWNweV90b2lvKGQscyxzeikJX21lbWNweV90b2lvKGQscyxzeikKKworc3RhdGljIGlubGluZSBpbnQgY2hlY2tfc2lnbmF0dXJlKHZvaWQgX19pb21lbSAqaW9fYWRkciwKKwkJCQkgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNpZ25hdHVyZSwKKwkJCQkgIGludCBsZW5ndGgpCit7CisJaW50IHJldHZhbCA9IDA7CisJZG8geworCQlpZiAocmVhZGIoaW9fYWRkcikgIT0gKnNpZ25hdHVyZSsrKQorCQkJZ290byBvdXQ7CisJCWlvX2FkZHIrKzsKKwl9IHdoaWxlICgtLWxlbmd0aCk7CisJcmV0dmFsID0gMTsKK291dDoKKwlyZXR1cm4gcmV0dmFsOworfQorCisjZGVmaW5lIG1taW93YigpCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKy8qIE9uIHNwYXJjNjQgd2UgaGF2ZSB0aGUgd2hvbGUgcGh5c2ljYWwgSU8gYWRkcmVzcyBzcGFjZSBhY2Nlc3NpYmxlCisgKiB1c2luZyBwaHlzaWNhbGx5IGFkZHJlc3NlZCBsb2FkcyBhbmQgc3RvcmVzLCBzbyB0aGlzIGRvZXMgbm90aGluZy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKmlvcmVtYXAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlyZXR1cm4gKHZvaWQgX19pb21lbSAqKW9mZnNldDsKK30KKworI2RlZmluZSBpb3JlbWFwX25vY2FjaGUoWCxZKQkJaW9yZW1hcCgoWCksKFkpKQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW91bm1hcCh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7Cit9CisKKyNkZWZpbmUgaW9yZWFkOChYKQkJCXJlYWRiKFgpCisjZGVmaW5lIGlvcmVhZDE2KFgpCQkJcmVhZHcoWCkKKyNkZWZpbmUgaW9yZWFkMzIoWCkJCQlyZWFkbChYKQorI2RlZmluZSBpb3dyaXRlOCh2YWwsWCkJCQl3cml0ZWIodmFsLFgpCisjZGVmaW5lIGlvd3JpdGUxNih2YWwsWCkJCXdyaXRldyh2YWwsWCkKKyNkZWZpbmUgaW93cml0ZTMyKHZhbCxYKQkJd3JpdGVsKHZhbCxYKQorCisvKiBDcmVhdGUgYSB2aXJ0dWFsIG1hcHBpbmcgY29va2llIGZvciBhbiBJTyBwb3J0IHJhbmdlICovCitleHRlcm4gdm9pZCBfX2lvbWVtICppb3BvcnRfbWFwKHVuc2lnbmVkIGxvbmcgcG9ydCwgdW5zaWduZWQgaW50IG5yKTsKK2V4dGVybiB2b2lkIGlvcG9ydF91bm1hcCh2b2lkIF9faW9tZW0gKik7CisKKy8qIENyZWF0ZSBhIHZpcnR1YWwgbWFwcGluZyBjb29raWUgZm9yIGEgUENJIEJBUiAobWVtb3J5IG9yIElPKSAqLworc3RydWN0IHBjaV9kZXY7CitleHRlcm4gdm9pZCBfX2lvbWVtICpwY2lfaW9tYXAoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGJhciwgdW5zaWduZWQgbG9uZyBtYXgpOworZXh0ZXJuIHZvaWQgcGNpX2lvdW5tYXAoc3RydWN0IHBjaV9kZXYgKmRldiwgdm9pZCBfX2lvbWVtICopOworCisvKiBTaW1pbGFybHkgZm9yIFNCVVMuICovCisjZGVmaW5lIHNidXNfaW9yZW1hcChfX3JlcywgX19vZmZzZXQsIF9fc2l6ZSwgX19uYW1lKSBcCisoewl1bnNpZ25lZCBsb25nIF9fcmV0OyBcCisJX19yZXQgID0gKF9fcmVzKS0+c3RhcnQgKyAoKChfX3JlcyktPmZsYWdzICYgMHgxZmZVTCkgPDwgMzJVTCk7IFwKKwlfX3JldCArPSAodW5zaWduZWQgbG9uZykgKF9fb2Zmc2V0KTsgXAorCWlmICghIHJlcXVlc3RfcmVnaW9uKChfX3JldCksIChfX3NpemUpLCAoX19uYW1lKSkpIFwKKwkJX19yZXQgPSAwVUw7IFwKKwkodm9pZCBfX2lvbWVtICopIF9fcmV0OyBcCit9KQorCisjZGVmaW5lIHNidXNfaW91bm1hcChfX2FkZHIsIF9fc2l6ZSkJXAorCXJlbGVhc2VfcmVnaW9uKCh1bnNpZ25lZCBsb25nKShfX2FkZHIpLCAoX19zaXplKSkKKworLyogTm90aGluZyB0byBkbyAqLworCisjZGVmaW5lIGRtYV9jYWNoZV9pbnYoX3N0YXJ0LF9zaXplKQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBkbWFfY2FjaGVfd2JhY2soX3N0YXJ0LF9zaXplKQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBkbWFfY2FjaGVfd2JhY2tfaW52KF9zdGFydCxfc2l6ZSkJZG8geyB9IHdoaWxlICgwKQorCisvKgorICogQ29udmVydCBhIHBoeXNpY2FsIHBvaW50ZXIgdG8gYSB2aXJ0dWFsIGtlcm5lbCBwb2ludGVyIGZvciAvZGV2L21lbQorICogYWNjZXNzCisgKi8KKyNkZWZpbmUgeGxhdGVfZGV2X21lbV9wdHIocCkJX192YShwKQorCisvKgorICogQ29udmVydCBhIHZpcnR1YWwgY2FjaGVkIHBvaW50ZXIgdG8gYW4gdW5jYWNoZWQgcG9pbnRlcgorICovCisjZGVmaW5lIHhsYXRlX2Rldl9rbWVtX3B0cihwKQlwCisKKyNlbmRpZgorCisjZW5kaWYgLyogIShfX1NQQVJDNjRfSU9fSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvaW9jdGwuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvaW9jdGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTNkMGI1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9pb2N0bC5oCkBAIC0wLDAgKzEsNjggQEAKKy8qICRJZDogaW9jdGwuaCx2IDEuMiAxOTk4LzEwLzE1IDA1OjQwOjM4IGpqIEV4cCAkICovCisjaWZuZGVmIF9TUEFSQzY0X0lPQ1RMX0gKKyNkZWZpbmUgX1NQQVJDNjRfSU9DVExfSAorCisvKgorICogT3VyIERJUiBhbmQgU0laRSBvdmVybGFwIGluIG9yZGVyIHRvIHNpbXVsdGVuZW91c2x5IHByb3ZpZGUKKyAqIGEgbm9uLXplcm8gX0lPQ19OT05FIChmb3IgYmluYXJ5IGNvbXBhdGliaWxpdHkpIGFuZAorICogMTQgYml0cyBvZiBzaXplIGFzIG9uIGkzODYuIEhlcmUncyB0aGUgbGF5b3V0OgorICoKKyAqICAgMHhFMDAwMDAwMCAgIERJUgorICogICAweDgwMDAwMDAwICAgICBESVIgPSBXUklURQorICogICAweDQwMDAwMDAwICAgICBESVIgPSBSRUFECisgKiAgIDB4MjAwMDAwMDAgICAgIERJUiA9IE5PTkUKKyAqICAgMHgzRkZGMDAwMCAgIFNJWkUgKG92ZXJsYXBzIE5PTkUgYml0KQorICogICAweDAwMDBGRjAwICAgVFlQRQorICogICAweDAwMDAwMEZGICAgTlIgKENNRCkKKyAqLworCisjZGVmaW5lIF9JT0NfTlJCSVRTICAgICAgOAorI2RlZmluZSBfSU9DX1RZUEVCSVRTICAgIDgKKyNkZWZpbmUgX0lPQ19TSVpFQklUUyAgIDEzCS8qIEFjdHVhbGx5IDE0LCBzZWUgYmVsb3cuICovCisjZGVmaW5lIF9JT0NfRElSQklUUyAgICAgMworCisjZGVmaW5lIF9JT0NfTlJNQVNLICAgICAgKCgxIDw8IF9JT0NfTlJCSVRTKS0xKQorI2RlZmluZSBfSU9DX1RZUEVNQVNLICAgICgoMSA8PCBfSU9DX1RZUEVCSVRTKS0xKQorI2RlZmluZSBfSU9DX1NJWkVNQVNLICAgICgoMSA8PCBfSU9DX1NJWkVCSVRTKS0xKQorI2RlZmluZSBfSU9DX1hTSVpFTUFTSyAgICgoMSA8PCAoX0lPQ19TSVpFQklUUysxKSktMSkKKyNkZWZpbmUgX0lPQ19ESVJNQVNLICAgICAoKDEgPDwgX0lPQ19ESVJCSVRTKS0xKQorCisjZGVmaW5lIF9JT0NfTlJTSElGVCAgICAgMAorI2RlZmluZSBfSU9DX1RZUEVTSElGVCAgIChfSU9DX05SU0hJRlQgKyBfSU9DX05SQklUUykKKyNkZWZpbmUgX0lPQ19TSVpFU0hJRlQgICAoX0lPQ19UWVBFU0hJRlQgKyBfSU9DX1RZUEVCSVRTKQorI2RlZmluZSBfSU9DX0RJUlNISUZUICAgIChfSU9DX1NJWkVTSElGVCArIF9JT0NfU0laRUJJVFMpCisKKyNkZWZpbmUgX0lPQ19OT05FICAgICAgICAxVQorI2RlZmluZSBfSU9DX1JFQUQgICAgICAgIDJVCisjZGVmaW5lIF9JT0NfV1JJVEUgICAgICAgNFUKKworI2RlZmluZSBfSU9DKGRpcix0eXBlLG5yLHNpemUpIFwKKyAgICAgICAgKCgoZGlyKSAgPDwgX0lPQ19ESVJTSElGVCkgfCBcCisgICAgICAgICAoKHR5cGUpIDw8IF9JT0NfVFlQRVNISUZUKSB8IFwKKyAgICAgICAgICgobnIpICAgPDwgX0lPQ19OUlNISUZUKSB8IFwKKyAgICAgICAgICgoc2l6ZSkgPDwgX0lPQ19TSVpFU0hJRlQpKQorCisjZGVmaW5lIF9JTyh0eXBlLG5yKSAgICAgICAgX0lPQyhfSU9DX05PTkUsKHR5cGUpLChuciksMCkKKyNkZWZpbmUgX0lPUih0eXBlLG5yLHNpemUpICBfSU9DKF9JT0NfUkVBRCwodHlwZSksKG5yKSxzaXplb2Yoc2l6ZSkpCisjZGVmaW5lIF9JT1codHlwZSxucixzaXplKSAgX0lPQyhfSU9DX1dSSVRFLCh0eXBlKSwobnIpLHNpemVvZihzaXplKSkKKyNkZWZpbmUgX0lPV1IodHlwZSxucixzaXplKSBfSU9DKF9JT0NfUkVBRHxfSU9DX1dSSVRFLCh0eXBlKSwobnIpLHNpemVvZihzaXplKSkKKworLyogVXNlZCB0byBkZWNvZGUgaW9jdGwgbnVtYmVycyBpbiBkcml2ZXJzIGRlc3BpdGUgdGhlIGxlYWRpbmcgdW5kZXJzY29yZS4uLiAqLworI2RlZmluZSBfSU9DX0RJUihucikgICAgXAorICggKCgoKChucikgPj4gX0lPQ19ESVJTSElGVCkgJiBfSU9DX0RJUk1BU0spICYgKF9JT0NfV1JJVEV8X0lPQ19SRUFEKSkgIT0gMCk/ICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKG5yKSA+PiBfSU9DX0RJUlNISUZUKSAmIChfSU9DX1dSSVRFfF9JT0NfUkVBRCkpOiAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKG5yKSA+PiBfSU9DX0RJUlNISUZUKSAmIF9JT0NfRElSTUFTSykgKQorI2RlZmluZSBfSU9DX1RZUEUobnIpICAgICAgICgoKG5yKSA+PiBfSU9DX1RZUEVTSElGVCkgJiBfSU9DX1RZUEVNQVNLKQorI2RlZmluZSBfSU9DX05SKG5yKSAgICAgICAgICgoKG5yKSA+PiBfSU9DX05SU0hJRlQpICYgX0lPQ19OUk1BU0spCisjZGVmaW5lIF9JT0NfU0laRShucikgICBcCisgKCgoKCgobnIpID4+IF9JT0NfRElSU0hJRlQpICYgX0lPQ19ESVJNQVNLKSAmIChfSU9DX1dSSVRFfF9JT0NfUkVBRCkpID09IDApPyAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgMDogKCgobnIpID4+IF9JT0NfU0laRVNISUZUKSAmIF9JT0NfWFNJWkVNQVNLKSkKKworLyogLi4uYW5kIGZvciB0aGUgUENNQ0lBIGFuZCBzb3VuZC4gKi8KKyNkZWZpbmUgSU9DX0lOICAgICAgICAgIChfSU9DX1dSSVRFIDw8IF9JT0NfRElSU0hJRlQpCisjZGVmaW5lIElPQ19PVVQgICAgICAgICAoX0lPQ19SRUFEIDw8IF9JT0NfRElSU0hJRlQpCisjZGVmaW5lIElPQ19JTk9VVCAgICAgICAoKF9JT0NfV1JJVEV8X0lPQ19SRUFEKSA8PCBfSU9DX0RJUlNISUZUKQorI2RlZmluZSBJT0NTSVpFX01BU0sgICAgKF9JT0NfWFNJWkVNQVNLIDw8IF9JT0NfU0laRVNISUZUKQorI2RlZmluZSBJT0NTSVpFX1NISUZUICAgKF9JT0NfU0laRVNISUZUKQorCisjZW5kaWYgLyogIShfU1BBUkM2NF9JT0NUTF9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9pb2N0bHMuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvaW9jdGxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjIyM2I2ZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvaW9jdGxzLmgKQEAgLTAsMCArMSwxMzUgQEAKKy8qICRJZDogaW9jdGxzLmgsdiAxLjcgMTk5OC8wMi8yMyAwMjo0OTo0MSBkYXZlbSBFeHAgJCAqLworI2lmbmRlZiBfQVNNX1NQQVJDNjRfSU9DVExTX0gKKyNkZWZpbmUgX0FTTV9TUEFSQzY0X0lPQ1RMU19ICisKKyNpbmNsdWRlIDxhc20vaW9jdGwuaD4KKworLyogQmlnIFQgKi8KKyNkZWZpbmUgVENHRVRBCQlfSU9SKCdUJywgMSwgc3RydWN0IHRlcm1pbykKKyNkZWZpbmUgVENTRVRBCQlfSU9XKCdUJywgMiwgc3RydWN0IHRlcm1pbykKKyNkZWZpbmUgVENTRVRBVwkJX0lPVygnVCcsIDMsIHN0cnVjdCB0ZXJtaW8pCisjZGVmaW5lIFRDU0VUQUYJCV9JT1coJ1QnLCA0LCBzdHJ1Y3QgdGVybWlvKQorI2RlZmluZSBUQ1NCUksJCV9JTygnVCcsIDUpCisjZGVmaW5lIFRDWE9OQwkJX0lPKCdUJywgNikKKyNkZWZpbmUgVENGTFNICQlfSU8oJ1QnLCA3KQorI2RlZmluZSBUQ0dFVFMJCV9JT1IoJ1QnLCA4LCBzdHJ1Y3QgdGVybWlvcykKKyNkZWZpbmUgVENTRVRTCQlfSU9XKCdUJywgOSwgc3RydWN0IHRlcm1pb3MpCisjZGVmaW5lIFRDU0VUU1cJCV9JT1coJ1QnLCAxMCwgc3RydWN0IHRlcm1pb3MpCisjZGVmaW5lIFRDU0VUU0YJCV9JT1coJ1QnLCAxMSwgc3RydWN0IHRlcm1pb3MpCisKKy8qIE5vdGUgdGhhdCBhbGwgdGhlIGlvY3RscyB0aGF0IGFyZSBub3QgYXZhaWxhYmxlIGluIExpbnV4IGhhdmUgYSAKKyAqIGRvdWJsZSB1bmRlcnNjb3JlIG9uIHRoZSBmcm9udCB0bzogYSkgYXZvaWQgc29tZSBwcm9ncmFtcyB0bworICogdGhpbmsgd2Ugc3VwcG9ydCBzb21lIGlvY3RscyB1bmRlciBMaW51eCAoYXV0b2NvbmZpZ3VyYXRpb24gc3R1ZmYpCisgKi8KKy8qIExpdHRsZSB0ICovCisjZGVmaW5lIFRJT0NHRVRECV9JT1IoJ3QnLCAwLCBpbnQpCisjZGVmaW5lIFRJT0NTRVRECV9JT1coJ3QnLCAxLCBpbnQpCisjZGVmaW5lIF9fVElPQ0hQQ0wgICAgICAgIF9JTygndCcsIDIpIC8qIFN1bk9TIFNwZWNpZmljICovCisjZGVmaW5lIF9fVElPQ01PREcgICAgICAgIF9JT1IoJ3QnLCAzLCBpbnQpIC8qIFN1bk9TIFNwZWNpZmljICovCisjZGVmaW5lIF9fVElPQ01PRFMgICAgICAgIF9JT1coJ3QnLCA0LCBpbnQpIC8qIFN1bk9TIFNwZWNpZmljICovCisjZGVmaW5lIF9fVElPQ0dFVFAgICAgICAgIF9JT1IoJ3QnLCA4LCBzdHJ1Y3Qgc2d0dHliKSAvKiBTdW5PUyBTcGVjaWZpYyAqLworI2RlZmluZSBfX1RJT0NTRVRQICAgICAgICBfSU9XKCd0JywgOSwgc3RydWN0IHNndHR5YikgLyogU3VuT1MgU3BlY2lmaWMgKi8KKyNkZWZpbmUgX19USU9DU0VUTiAgICAgICAgX0lPVygndCcsIDEwLCBzdHJ1Y3Qgc2d0dHliKSAvKiBTdW5PUyBTcGVjaWZpYyAqLworI2RlZmluZSBUSU9DRVhDTAlfSU8oJ3QnLCAxMykKKyNkZWZpbmUgVElPQ05YQ0wJX0lPKCd0JywgMTQpCisjZGVmaW5lIF9fVElPQ0ZMVVNIICAgICAgIF9JT1coJ3QnLCAxNiwgaW50KSAvKiBTdW5PUyBTcGVjaWZpYyAqLworI2RlZmluZSBfX1RJT0NTRVRDICAgICAgICBfSU9XKCd0JywgMTcsIHN0cnVjdCB0Y2hhcnMpIC8qIFN1bk9TIFNwZWNpZmljICovCisjZGVmaW5lIF9fVElPQ0dFVEMgICAgICAgIF9JT1IoJ3QnLCAxOCwgc3RydWN0IHRjaGFycykgLyogU3VuT1MgU3BlY2lmaWMgKi8KKyNkZWZpbmUgX19USU9DVENOVEwgICAgICAgX0lPVygndCcsIDMyLCBpbnQpIC8qIFN1bk9TIFNwZWNpZmljICovCisjZGVmaW5lIF9fVElPQ1NJR05BTCAgICAgIF9JT1coJ3QnLCAzMywgaW50KSAvKiBTdW5PUyBTcGVjaWZpYyAqLworI2RlZmluZSBfX1RJT0NTRVRYICAgICAgICBfSU9XKCd0JywgMzQsIGludCkgLyogU3VuT1MgU3BlY2lmaWMgKi8KKyNkZWZpbmUgX19USU9DR0VUWCAgICAgICAgX0lPUigndCcsIDM1LCBpbnQpIC8qIFN1bk9TIFNwZWNpZmljICovCisjZGVmaW5lIFRJT0NDT05TCV9JTygndCcsIDM2KQorI2RlZmluZSBfX1RJT0NTU0laRSAgICAgX0lPVygndCcsIDM3LCBzdHJ1Y3Qgc3Vub3NfdHR5c2l6ZSkgLyogU3VuT1MgU3BlY2lmaWMgKi8KKyNkZWZpbmUgX19USU9DR1NJWkUgICAgIF9JT1IoJ3QnLCAzOCwgc3RydWN0IHN1bm9zX3R0eXNpemUpIC8qIFN1bk9TIFNwZWNpZmljICovCisjZGVmaW5lIFRJT0NHU09GVENBUglfSU9SKCd0JywgMTAwLCBpbnQpCisjZGVmaW5lIFRJT0NTU09GVENBUglfSU9XKCd0JywgMTAxLCBpbnQpCisjZGVmaW5lIF9fVElPQ1VDTlRMICAgICAgIF9JT1coJ3QnLCAxMDIsIGludCkgLyogU3VuT1MgU3BlY2lmaWMgKi8KKyNkZWZpbmUgVElPQ1NXSU5TWglfSU9XKCd0JywgMTAzLCBzdHJ1Y3Qgd2luc2l6ZSkKKyNkZWZpbmUgVElPQ0dXSU5TWglfSU9SKCd0JywgMTA0LCBzdHJ1Y3Qgd2luc2l6ZSkKKyNkZWZpbmUgX19USU9DUkVNT1RFICAgICAgX0lPVygndCcsIDEwNSwgaW50KSAvKiBTdW5PUyBTcGVjaWZpYyAqLworI2RlZmluZSBUSU9DTUdFVAlfSU9SKCd0JywgMTA2LCBpbnQpCisjZGVmaW5lIFRJT0NNQklDCV9JT1coJ3QnLCAxMDcsIGludCkKKyNkZWZpbmUgVElPQ01CSVMJX0lPVygndCcsIDEwOCwgaW50KQorI2RlZmluZSBUSU9DTVNFVAlfSU9XKCd0JywgMTA5LCBpbnQpCisjZGVmaW5lIFRJT0NTVEFSVCAgICAgICBfSU8oJ3QnLCAxMTApCisjZGVmaW5lIFRJT0NTVE9QICAgICAgICBfSU8oJ3QnLCAxMTEpCisjZGVmaW5lIFRJT0NQS1QJCV9JT1coJ3QnLCAxMTIsIGludCkKKyNkZWZpbmUgVElPQ05PVFRZCV9JTygndCcsIDExMykKKyNkZWZpbmUgVElPQ1NUSQkJX0lPVygndCcsIDExNCwgY2hhcikKKyNkZWZpbmUgVElPQ09VVFEJX0lPUigndCcsIDExNSwgaW50KQorI2RlZmluZSBfX1RJT0NHTFRDICAgICAgICBfSU9SKCd0JywgMTE2LCBzdHJ1Y3QgbHRjaGFycykgLyogU3VuT1MgU3BlY2lmaWMgKi8KKyNkZWZpbmUgX19USU9DU0xUQyAgICAgICAgX0lPVygndCcsIDExNywgc3RydWN0IGx0Y2hhcnMpIC8qIFN1bk9TIFNwZWNpZmljICovCisvKiAxMTggaXMgdGhlIG5vbi1wb3NpeCBzZXRwZ3JwIHR0eSBpb2N0bCAqLworLyogMTE5IGlzIHRoZSBub24tcG9zaXggZ2V0cGdycCB0dHkgaW9jdGwgKi8KKyNkZWZpbmUgX19USU9DQ0RUUiAgICAgICAgX0lPKCd0JywgMTIwKSAvKiBTdW5PUyBTcGVjaWZpYyAqLworI2RlZmluZSBfX1RJT0NTRFRSICAgICAgICBfSU8oJ3QnLCAxMjEpIC8qIFN1bk9TIFNwZWNpZmljICovCisjZGVmaW5lIFRJT0NDQlJLICAgICAgICBfSU8oJ3QnLCAxMjIpCisjZGVmaW5lIFRJT0NTQlJLICAgICAgICBfSU8oJ3QnLCAxMjMpCisjZGVmaW5lIF9fVElPQ0xHRVQgICAgICAgIF9JT1coJ3QnLCAxMjQsIGludCkgLyogU3VuT1MgU3BlY2lmaWMgKi8KKyNkZWZpbmUgX19USU9DTFNFVCAgICAgICAgX0lPVygndCcsIDEyNSwgaW50KSAvKiBTdW5PUyBTcGVjaWZpYyAqLworI2RlZmluZSBfX1RJT0NMQklDICAgICAgICBfSU9XKCd0JywgMTI2LCBpbnQpIC8qIFN1bk9TIFNwZWNpZmljICovCisjZGVmaW5lIF9fVElPQ0xCSVMgICAgICAgIF9JT1coJ3QnLCAxMjcsIGludCkgLyogU3VuT1MgU3BlY2lmaWMgKi8KKyNkZWZpbmUgX19USU9DSVNQQUNFICAgICAgX0lPUigndCcsIDEyOCwgaW50KSAvKiBTdW5PUyBTcGVjaWZpYyAqLworI2RlZmluZSBfX1RJT0NJU0laRSAgICAgICBfSU9SKCd0JywgMTI5LCBpbnQpIC8qIFN1bk9TIFNwZWNpZmljICovCisjZGVmaW5lIFRJT0NTUEdSUAlfSU9XKCd0JywgMTMwLCBpbnQpCisjZGVmaW5lIFRJT0NHUEdSUAlfSU9SKCd0JywgMTMxLCBpbnQpCisjZGVmaW5lIFRJT0NTQ1RUWQlfSU8oJ3QnLCAxMzIpCisjZGVmaW5lIFRJT0NHU0lECV9JT1IoJ3QnLCAxMzMsIGludCkKKy8qIEdldCBtaW5vciBkZXZpY2Ugb2YgYSBwdHkgbWFzdGVyJ3MgRkQgLS0gU29sYXJpcyBlcXVpdiBpcyBJU1BUTSAqLworI2RlZmluZSBUSU9DR1BUTglfSU9SKCd0JywgMTM0LCB1bnNpZ25lZCBpbnQpIC8qIEdldCBQdHkgTnVtYmVyICovCisjZGVmaW5lIFRJT0NTUFRMQ0sJX0lPVygndCcsIDEzNSwgaW50KSAvKiBMb2NrL3VubG9jayBQVFkgKi8KKworLyogTGl0dGxlIGYgKi8KKyNkZWZpbmUgRklPQ0xFWAkJX0lPKCdmJywgMSkKKyNkZWZpbmUgRklPTkNMRVgJX0lPKCdmJywgMikKKyNkZWZpbmUgRklPQVNZTkMJX0lPVygnZicsIDEyNSwgaW50KQorI2RlZmluZSBGSU9OQklPCQlfSU9XKCdmJywgMTI2LCBpbnQpCisjZGVmaW5lIEZJT05SRUFECV9JT1IoJ2YnLCAxMjcsIGludCkKKyNkZWZpbmUgVElPQ0lOUQkJRklPTlJFQUQKKyNkZWZpbmUgRklPUVNJWkUJX0lPUignZicsIDEyOCwgbG9mZl90KQorCisvKiBTQ0FSWSBSdXRnZXJzIGxvY2FsIFN1bk9TIGtlcm5lbCBoYWNrZXJ5LCBwZXJoYXBzIEkgd2lsbCBzdXBwb3J0IGl0CisgKiBzb21lZGF5LiAgVGhpcyBpcyBjb21wbGV0ZWx5IGJvZ3VzLCBJIGtub3cuLi4KKyAqLworI2RlZmluZSBfX1RDR0VUU1RBVCAgICAgICBfSU8oJ1QnLCAyMDApIC8qIFJ1dGdlcnMgc3BlY2lmaWMgKi8KKyNkZWZpbmUgX19UQ1NFVFNUQVQgICAgICAgX0lPKCdUJywgMjAxKSAvKiBSdXRnZXJzIHNwZWNpZmljICovCisKKy8qIExpbnV4IHNwZWNpZmljLCBubyBTdW5PUyBlcXVpdmFsZW50LiAqLworI2RlZmluZSBUSU9DTElOVVgJMHg1NDFDCisjZGVmaW5lIFRJT0NHU0VSSUFMCTB4NTQxRQorI2RlZmluZSBUSU9DU1NFUklBTAkweDU0MUYKKyNkZWZpbmUgVENTQlJLUAkJMHg1NDI1CisjZGVmaW5lIFRJT0NTRVJDT05GSUcJMHg1NDUzCisjZGVmaW5lIFRJT0NTRVJHV0lMRAkweDU0NTQKKyNkZWZpbmUgVElPQ1NFUlNXSUxECTB4NTQ1NQorI2RlZmluZSBUSU9DR0xDS1RSTUlPUwkweDU0NTYKKyNkZWZpbmUgVElPQ1NMQ0tUUk1JT1MJMHg1NDU3CisjZGVmaW5lIFRJT0NTRVJHU1RSVUNUCTB4NTQ1OCAvKiBGb3IgZGVidWdnaW5nIG9ubHkgKi8KKyNkZWZpbmUgVElPQ1NFUkdFVExTUiAgIDB4NTQ1OSAvKiBHZXQgbGluZSBzdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgVElPQ1NFUkdFVE1VTFRJIDB4NTQ1QSAvKiBHZXQgbXVsdGlwb3J0IGNvbmZpZyAgKi8KKyNkZWZpbmUgVElPQ1NFUlNFVE1VTFRJIDB4NTQ1QiAvKiBTZXQgbXVsdGlwb3J0IGNvbmZpZyAqLworI2RlZmluZSBUSU9DTUlXQUlUCTB4NTQ1QyAvKiBXYWl0IGZvciBjaGFuZ2Ugb24gc2VyaWFsIGlucHV0IGxpbmUocykgKi8KKyNkZWZpbmUgVElPQ0dJQ09VTlQJMHg1NDVEIC8qIFJlYWQgc2VyaWFsIHBvcnQgaW5saW5lIGludGVycnVwdCBjb3VudHMgKi8KKworLyogS2VybmVsIGRlZmluaXRpb25zICovCisjaWZkZWYgX19LRVJORUxfXworI2RlZmluZSBUSU9DR0VUQyBfX1RJT0NHRVRDCisjZGVmaW5lIFRJT0NHRVRQIF9fVElPQ0dFVFAKKyNkZWZpbmUgVElPQ0dMVEMgX19USU9DR0xUQworI2RlZmluZSBUSU9DU0xUQyBfX1RJT0NTTFRDCisjZGVmaW5lIFRJT0NTRVRQIF9fVElPQ1NFVFAKKyNkZWZpbmUgVElPQ1NFVE4gX19USU9DU0VUTgorI2RlZmluZSBUSU9DU0VUQyBfX1RJT0NTRVRDCisjZW5kaWYKKworLyogVXNlZCBmb3IgcGFja2V0IG1vZGUgKi8KKyNkZWZpbmUgVElPQ1BLVF9EQVRBCQkgMAorI2RlZmluZSBUSU9DUEtUX0ZMVVNIUkVBRAkgMQorI2RlZmluZSBUSU9DUEtUX0ZMVVNIV1JJVEUJIDIKKyNkZWZpbmUgVElPQ1BLVF9TVE9QCQkgNAorI2RlZmluZSBUSU9DUEtUX1NUQVJUCQkgOAorI2RlZmluZSBUSU9DUEtUX05PU1RPUAkJMTYKKyNkZWZpbmUgVElPQ1BLVF9ET1NUT1AJCTMyCisKKyNlbmRpZiAvKiAhKF9BU01fU1BBUkM2NF9JT0NUTFNfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvaW9tbXUuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvaW9tbXUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmQxNmU0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9pb21tdS5oCkBAIC0wLDAgKzEsMTkgQEAKKy8qICRJZDogaW9tbXUuaCx2IDEuMTAgMjAwMS8wMy8wOCAwOTo1NTo1NiBkYXZlbSBFeHAgJAorICogaW9tbXUuaDogRGVmaW5pdGlvbnMgZm9yIHRoZSBzdW41IElPTU1VLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NiwgMTk5OSBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCisgKi8KKyNpZm5kZWYgX1NQQVJDNjRfSU9NTVVfSAorI2RlZmluZSBfU1BBUkM2NF9JT01NVV9ICisKKy8qIFRoZSBmb3JtYXQgb2YgYW4gaW9wdGUgaW4gdGhlIHBhZ2UgdGFibGVzLiAqLworI2RlZmluZSBJT1BURV9WQUxJRCAgIDB4ODAwMDAwMDAwMDAwMDAwMFVMIC8qIElPUFRFIGlzIHZhbGlkICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSU9QVEVfNjRLICAgICAweDIwMDAwMDAwMDAwMDAwMDBVTCAvKiBJT1BURSBpcyBmb3IgNjRrIHBhZ2UgICAgICAgICAgICovCisjZGVmaW5lIElPUFRFX1NUQlVGICAgMHgxMDAwMDAwMDAwMDAwMDAwVUwgLyogRFZNQSBjYW4gdXNlIHN0cmVhbWluZyBidWZmZXIgICAqLworI2RlZmluZSBJT1BURV9JTlRSQSAgIDB4MDgwMDAwMDAwMDAwMDAwMFVMIC8qIFNCVVMgc2xvdC0tPnNsb3QgZGlyZWN0IHRyYW5zZmVyKi8KKyNkZWZpbmUgSU9QVEVfQ09OVEVYVCAweDA3ZmY4MDAwMDAwMDAwMDBVTCAvKiBDb250ZXh0IG51bWJlcgkJICAgICAgKi8KKyNkZWZpbmUgSU9QVEVfUEFHRSAgICAweDAwMDA3ZmZmZmZmZmUwMDBVTCAvKiBQaHlzaWNhbCBwYWdlIG51bWJlciAoUEFbNDI6MTNdKSovCisjZGVmaW5lIElPUFRFX0NBQ0hFICAgMHgwMDAwMDAwMDAwMDAwMDEwVUwgLyogQ2FjaGVkIChpbiBVUEEgRS1jYWNoZSkgICAgICAgICAqLworI2RlZmluZSBJT1BURV9XUklURSAgIDB4MDAwMDAwMDAwMDAwMDAwMlVMIC8qIFdyaXRlYWJsZSAgICAgICAgICAgICAgICAgICAgICAgKi8KKworI2VuZGlmIC8qICEoX1NQQVJDX0lPTU1VX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2lwYy5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9pcGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDZlM2Q5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9pcGMuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvaXBjLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2lwY2J1Zi5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9pcGNidWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzViZjFiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9pcGNidWYuaApAQCAtMCwwICsxLDI4IEBACisjaWZuZGVmIF9TUEFSQzY0X0lQQ0JVRl9ICisjZGVmaW5lIF9TUEFSQzY0X0lQQ0JVRl9ICisKKy8qIAorICogVGhlIGlwYzY0X3Blcm0gc3RydWN0dXJlIGZvciBzcGFyYzY0IGFyY2hpdGVjdHVyZS4KKyAqIE5vdGUgZXh0cmEgcGFkZGluZyBiZWNhdXNlIHRoaXMgc3RydWN0dXJlIGlzIHBhc3NlZCBiYWNrIGFuZCBmb3J0aAorICogYmV0d2VlbiBrZXJuZWwgYW5kIHVzZXIgc3BhY2UuCisgKgorICogUGFkIHNwYWNlIGlzIGxlZnQgZm9yOgorICogLSAzMi1iaXQgc2VxCisgKiAtIDIgbWlzY2VsbGFuZW91cyA2NC1iaXQgdmFsdWVzCisgKi8KKworc3RydWN0IGlwYzY0X3Blcm0KK3sKKwlfX2tlcm5lbF9rZXlfdAlrZXk7CisJX19rZXJuZWxfdWlkX3QJdWlkOworCV9fa2VybmVsX2dpZF90CWdpZDsKKwlfX2tlcm5lbF91aWRfdAljdWlkOworCV9fa2VybmVsX2dpZF90CWNnaWQ7CisJX19rZXJuZWxfbW9kZV90CW1vZGU7IAorCXVuc2lnbmVkIHNob3J0CV9fcGFkMTsKKwl1bnNpZ25lZCBzaG9ydAlzZXE7CisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDE7CisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDI7Cit9OworCisjZW5kaWYgLyogX1NQQVJDNjRfSVBDQlVGX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvaXJxLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2lycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhZWYwY2EKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2lycS5oCkBAIC0wLDAgKzEsMTU3IEBACisvKiAkSWQ6IGlycS5oLHYgMS4yMSAyMDAyLzAxLzIzIDExOjI3OjM2IGRhdmVtIEV4cCAkCisgKiBpcnEuaDogSVJRIHJlZ2lzdGVycyBvbiB0aGUgNjQtYml0IFNwYXJjLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NiBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggSmFrdWIgSmVsaW5layAoampAdWx0cmEubGludXguY3opCisgKi8KKworI2lmbmRlZiBfU1BBUkM2NF9JUlFfSAorI2RlZmluZSBfU1BBUkM2NF9JUlFfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8YXNtL3BpbC5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKworLyogWW91IHNob3VsZCBub3QgbWVzcyB3aXRoIHRoaXMgZGlyZWN0bHkuIFRoYXQncyB0aGUgam9iIG9mIGlycS5jLgorICoKKyAqIElmIHlvdSBtYWtlIGNoYW5nZXMgaGVyZSwgcGxlYXNlIHVwZGF0ZSBoYW5kIGNvZGVkIGFzc2VtYmxlciBvZgorICogU0JVUy9mbG9wcHkgaW50ZXJydXB0IGhhbmRsZXIgaW4gZW50cnkuUyAtRGF2ZU0KKyAqCisgKiBUaGlzIGlzIGN1cnJlbnRseSBvbmUgRENBQ0hFIGxpbmUsIHR3byBidWNrZXRzIHBlciBMMiBjYWNoZQorICogbGluZS4gIEtlZXAgdGhpcyBpbiBtaW5kIHBsZWFzZS4KKyAqLworc3RydWN0IGlub19idWNrZXQgeworCS8qIE5leHQgaGFuZGxlciBpbiBwZXItQ1BVIFBJTCB3b3JrbGlzdC4gIFdlIGtub3cgdGhhdAorCSAqIGJ1Y2tldCBwb2ludGVycyBoYXZlIHRoZSBoaWdoIDMyLWJpdHMgY2xlYXIsIHNvIHRvCisJICogc2F2ZSBzcGFjZSB3ZSBvbmx5IHN0b3JlIHRoZSBiaXRzIHdlIG5lZWQuCisJICovCisvKjB4MDAqL3Vuc2lnbmVkIGludCBpcnFfY2hhaW47CisKKwkvKiBQSUwgdG8gc2NoZWR1bGUgdGhpcyBJVkVDIGF0LiAqLworLyoweDA0Ki91bnNpZ25lZCBjaGFyIHBpbDsKKworCS8qIElmIGFuIElWRUMgYXJyaXZlcyB3aGlsZSBpcnFfaW5mbyBpcyBOVUxMLCB3ZQorCSAqIHNldCB0aGlzIHRvIG5vdGlmeSByZXF1ZXN0X2lycSgpIGFib3V0IHRoZSBldmVudC4KKwkgKi8KKy8qMHgwNSovdW5zaWduZWQgY2hhciBwZW5kaW5nOworCisJLyogTWlzY2VsbGFuZW91cyBmbGFncy4gKi8KKy8qMHgwNiovdW5zaWduZWQgY2hhciBmbGFnczsKKworCS8qIFRoaXMgaXMgdXNlZCB0byBkZWFsIHdpdGggSUJGX0RNQV9TWU5DIG9uCisJICogU2FicmUgc3lzdGVtcy4KKwkgKi8KKy8qMHgwNyovdW5zaWduZWQgY2hhciBzeW5jdGFiX2VudDsKKworCS8qIFJlZmVyZW5jZSB0byBoYW5kbGVyIGZvciB0aGlzIElSUS4gIElmIHRoaXMgaXMKKwkgKiBub24tTlVMTCB0aGlzIG1lYW5zIGl0IGlzIGFjdGl2ZSBhbmQgc2hvdWxkIGJlCisJICogc2VydmljZWQuICBFbHNlIHRoZSBwZW5kaW5nIG1lbWJlciBpcyBzZXQgdG8gb25lCisJICogYW5kIGxhdGVyIHJlZ2lzdHJ5IG9mIHRoZSBpbnRlcnJ1cHQgY2hlY2tzIGZvcgorCSAqIHRoaXMgY29uZGl0aW9uLgorCSAqCisJICogTm9ybWFsbHkgdGhpcyBpcyBqdXN0IGFuIGlycV9hY3Rpb24gc3RydWN0dXJlLgorCSAqIEJ1dCwgb24gUENJLCBpZiBtdWx0aXBsZSBpbnRlcnJ1cHQgc291cmNlcyBiZWhpbmQKKwkgKiBhIGJyaWRnZSBoYXZlIG11bHRpcGxlIGludGVycnVwdCBzb3VyY2VzIHRoYXQgc2hhcmUKKwkgKiB0aGUgc2FtZSBJTk8gYnVja2V0LCB0aGlzIHBvaW50cyB0byBhbiBhcnJheSBvZgorCSAqIHBvaW50ZXJzIHRvIGZvdXIgSVJRIGFjdGlvbiBzdHJ1Y3R1cmVzLgorCSAqLworLyoweDA4Ki92b2lkICppcnFfaW5mbzsKKworCS8qIFN1bjUgSW50ZXJydXB0IENsZWFyIFJlZ2lzdGVyLiAqLworLyoweDEwKi91bnNpZ25lZCBsb25nIGljbHI7CisKKwkvKiBTdW41IEludGVycnVwdCBNYXBwaW5nIFJlZ2lzdGVyLiAqLworLyoweDE4Ki91bnNpZ25lZCBsb25nIGltYXA7CisKK307CisKKyNpZmRlZiBDT05GSUdfUENJCitleHRlcm4gdW5zaWduZWQgbG9uZyBwY2lfZG1hX3dzeW5jOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZG1hX3N5bmNfcmVnX3RhYmxlWzI1Nl07CitleHRlcm4gdW5zaWduZWQgY2hhciBkbWFfc3luY19yZWdfdGFibGVfZW50cnk7CisjZW5kaWYKKworLyogSU1BUC9JQ0xSIHJlZ2lzdGVyIGRlZmluZXMgKi8KKyNkZWZpbmUgSU1BUF9WQUxJRAkJMHg4MDAwMDAwMAkvKiBJUlEgRW5hYmxlZAkJKi8KKyNkZWZpbmUgSU1BUF9USURfVVBBCQkweDdjMDAwMDAwCS8qIFVQQSBUYXJnZXRJRAkJKi8KKyNkZWZpbmUgSU1BUF9USURfSkJVUwkJMHg3YzAwMDAwMAkvKiBKQlVTIFRhcmdldElECSovCisjZGVmaW5lIElNQVBfQUlEX1NBRkFSSQkJMHg3YzAwMDAwMAkvKiBTYWZhcmkgQWdlbnRJRAkqLworI2RlZmluZSBJTUFQX05JRF9TQUZBUkkJCTB4MDNlMDAwMDAJLyogU2FmYXJpIE5vZGVJRAkqLworI2RlZmluZSBJTUFQX0lHTgkJMHgwMDAwMDdjMAkvKiBJUlEgR3JvdXAgTnVtYmVyCSovCisjZGVmaW5lIElNQVBfSU5PCQkweDAwMDAwMDNmCS8qIElSUSBOdW1iZXIJCSovCisjZGVmaW5lIElNQVBfSU5SCQkweDAwMDAwN2ZmCS8qIEZ1bGwgaW50ZXJydXB0IG51bWJlciovCisKKyNkZWZpbmUgSUNMUl9JRExFCQkweDAwMDAwMDAwCS8qIElkbGUgc3RhdGUJCSovCisjZGVmaW5lIElDTFJfVFJBTlNNSVQJCTB4MDAwMDAwMDEJLyogVHJhbnNtaXQgc3RhdGUJKi8KKyNkZWZpbmUgSUNMUl9QRU5ESU5HCQkweDAwMDAwMDAzCS8qIFBlbmRpbmcgc3RhdGUJKi8KKworLyogT25seSA4LWJpdHMgYXJlIGF2YWlsYWJsZSwgYmUgY2FyZWZ1bC4gIC1EYXZlTSAqLworI2RlZmluZSBJQkZfRE1BX1NZTkMJMHgwMQkvKiBETUEgc3luY2hyb25pemF0aW9uIGJlaGluZCBQQ0kgYnJpZGdlIG5lZWRlZC4gKi8KKyNkZWZpbmUgSUJGX1BDSQkJMHgwMgkvKiBJbmRpY2F0ZXMgUFNZQ0hPL1NBQlJFL1NDSElaTyBQQ0kgaW50ZXJydXB0LgkgKi8KKyNkZWZpbmUgSUJGX0FDVElWRQkweDA0CS8qIFRoaXMgaW50ZXJydXB0IGlzIGFjdGl2ZSBhbmQgaGFzIGEgaGFuZGxlci4JICovCisjZGVmaW5lIElCRl9NVUxUSQkweDA4CS8qIE9uIFBDSSwgaW5kaWNhdGVzIHNoYXJlZCBidWNrZXQuCQkgKi8KKyNkZWZpbmUgSUJGX0lOUFJPR1JFU1MJMHgxMAkvKiBJUlEgaXMgYmVpbmcgc2VydmljZWQuCQkJICovCisKKyNkZWZpbmUgTlVNX0lWRUNTCShJTUFQX0lOUiArIDEpCitleHRlcm4gc3RydWN0IGlub19idWNrZXQgaXZlY3Rvcl90YWJsZVtOVU1fSVZFQ1NdOworCisjZGVmaW5lIF9faXJxX2lubyhpcnEpIFwKKyAgICAgICAgKCgoc3RydWN0IGlub19idWNrZXQgKikodW5zaWduZWQgbG9uZykoaXJxKSkgLSAmaXZlY3Rvcl90YWJsZVswXSkKKyNkZWZpbmUgX19pcnFfcGlsKGlycSkgKChzdHJ1Y3QgaW5vX2J1Y2tldCAqKSh1bnNpZ25lZCBsb25nKShpcnEpKS0+cGlsCisjZGVmaW5lIF9fYnVja2V0KGlycSkgKChzdHJ1Y3QgaW5vX2J1Y2tldCAqKSh1bnNpZ25lZCBsb25nKShpcnEpKQorI2RlZmluZSBfX2lycShidWNrZXQpICgodW5zaWduZWQgaW50KSh1bnNpZ25lZCBsb25nKShidWNrZXQpKQorCitzdGF0aWMgX19pbmxpbmVfXyBjaGFyICpfX2lycV9pdG9hKHVuc2lnbmVkIGludCBpcnEpCit7CisJc3RhdGljIGNoYXIgYnVmZlsxNl07CisKKwlzcHJpbnRmKGJ1ZmYsICIlZCwleCIsIF9faXJxX3BpbChpcnEpLCAodW5zaWduZWQgaW50KV9faXJxX2lubyhpcnEpKTsKKwlyZXR1cm4gYnVmZjsKK30KKworI2RlZmluZSBOUl9JUlFTICAgIDE2CisKKyNkZWZpbmUgaXJxX2Nhbm9uaWNhbGl6ZShpcnEpCShpcnEpCitleHRlcm4gdm9pZCBkaXNhYmxlX2lycSh1bnNpZ25lZCBpbnQpOworI2RlZmluZSBkaXNhYmxlX2lycV9ub3N5bmMgZGlzYWJsZV9pcnEKK2V4dGVybiB2b2lkIGVuYWJsZV9pcnEodW5zaWduZWQgaW50KTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgYnVpbGRfaXJxKGludCBwaWwsIGludCBpbm9maXh1cCwgdW5zaWduZWQgbG9uZyBpY2xyLCB1bnNpZ25lZCBsb25nIGltYXApOworZXh0ZXJuIHVuc2lnbmVkIGludCBzYnVzX2J1aWxkX2lycSh2b2lkICpzYnVzLCB1bnNpZ25lZCBpbnQgaW5vKTsKKworZXh0ZXJuIGludCByZXF1ZXN0X2Zhc3RfaXJxKHVuc2lnbmVkIGludCBpcnEsCisJCQkgICAgaXJxcmV0dXJuX3QgKCpoYW5kbGVyKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKiksCisJCQkgICAgdW5zaWduZWQgbG9uZyBmbGFncywgX19jb25zdF9fIGNoYXIgKmRldm5hbWUsCisJCQkgICAgdm9pZCAqZGV2X2lkKTsKKworc3RhdGljIF9faW5saW5lX18gdm9pZCBzZXRfc29mdGludCh1bnNpZ25lZCBsb25nIGJpdHMpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oIndyCSUwLCAweDAsICUlc2V0X3NvZnRpbnQiCisJCQkgICAgIDogLyogTm8gb3V0cHV0cyAqLworCQkJICAgICA6ICJyIiAoYml0cykpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGNsZWFyX3NvZnRpbnQodW5zaWduZWQgbG9uZyBiaXRzKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKCJ3cgklMCwgMHgwLCAlJWNsZWFyX3NvZnRpbnQiCisJCQkgICAgIDogLyogTm8gb3V0cHV0cyAqLworCQkJICAgICA6ICJyIiAoYml0cykpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGdldF9zb2Z0aW50KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyByZXR2YWw7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygicmQJJSVzb2Z0aW50LCAlMCIKKwkJCSAgICAgOiAiPXIiIChyZXR2YWwpKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdHJ1Y3QgaXJxYWN0aW9uOworc3RydWN0IHB0X3JlZ3M7CitpbnQgaGFuZGxlX0lSUV9ldmVudCh1bnNpZ25lZCBpbnQsIHN0cnVjdCBwdF9yZWdzICosIHN0cnVjdCBpcnFhY3Rpb24gKik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9pc2EuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvaXNhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDYwMWJiZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvaXNhLmgKQEAgLTAsMCArMSw1NCBAQAorLyogJElkOiBpc2EuaCx2IDEuMSAyMDAxLzA1LzExIDA0OjMxOjU1IGRhdmVtIEV4cCAkCisgKiBpc2EuaDogU3BhcmM2NCBsYXllciBmb3IgUENJIHRvIElTQSBicmlkZ2UgZGV2aWNlcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUByZWRoYXQuY29tKQorICovCisKKyNpZm5kZWYgX19TUEFSQzY0X0lTQV9ICisjZGVmaW5lIF9fU1BBUkM2NF9JU0FfSAorCisjaW5jbHVkZSA8YXNtL3BibS5oPgorI2luY2x1ZGUgPGFzbS9vcGxpYi5oPgorCitzdHJ1Y3Qgc3BhcmNfaXNhX2JyaWRnZTsKKworc3RydWN0IHNwYXJjX2lzYV9kZXZpY2UgeworCXN0cnVjdCBzcGFyY19pc2FfZGV2aWNlCSpuZXh0OworCXN0cnVjdCBzcGFyY19pc2FfZGV2aWNlCSpjaGlsZDsKKwlzdHJ1Y3Qgc3BhcmNfaXNhX2JyaWRnZQkqYnVzOworCWludAkJCXByb21fbm9kZTsKKwljaGFyCQkJcHJvbV9uYW1lWzY0XTsKKwljaGFyCQkJY29tcGF0aWJsZVs2NF07CisJc3RydWN0IHJlc291cmNlCQlyZXNvdXJjZTsKKwl1bnNpZ25lZCBpbnQJCWlycTsKK307CisKK3N0cnVjdCBzcGFyY19pc2FfYnJpZGdlIHsKKwlzdHJ1Y3Qgc3BhcmNfaXNhX2JyaWRnZQkqbmV4dDsKKwlzdHJ1Y3Qgc3BhcmNfaXNhX2RldmljZQkqZGV2aWNlczsKKwlzdHJ1Y3QgcGNpX3BibV9pbmZvCSpwYXJlbnQ7CisJc3RydWN0IHBjaV9kZXYJCSpzZWxmOworCWludAkJCWluZGV4OworCWludAkJCXByb21fbm9kZTsKKwljaGFyCQkJcHJvbV9uYW1lWzY0XTsKKyNkZWZpbmUgbGludXhfcHJvbV9pc2FfcmFuZ2VzIGxpbnV4X3Byb21fZWJ1c19yYW5nZXMKKwlzdHJ1Y3QgbGludXhfcHJvbV9pc2FfcmFuZ2VzCWlzYV9yYW5nZXNbUFJPTVJFR19NQVhdOworCWludAkJCW51bV9pc2FfcmFuZ2VzOworI2RlZmluZSBsaW51eF9wcm9tX2lzYV9pbnRtYXAJbGludXhfcHJvbV9lYnVzX2ludG1hcAorCXN0cnVjdCBsaW51eF9wcm9tX2lzYV9pbnRtYXAJaXNhX2ludG1hcFtQUk9NUkVHX01BWF07CisJaW50CQkJbnVtX2lzYV9pbnRtYXA7CisjZGVmaW5lIGxpbnV4X3Byb21faXNhX2ludG1hc2sJbGludXhfcHJvbV9lYnVzX2ludG1hc2sKKwlzdHJ1Y3QgbGludXhfcHJvbV9pc2FfaW50bWFwCWlzYV9pbnRtYXNrOworfTsKKworZXh0ZXJuIHN0cnVjdCBzcGFyY19pc2FfYnJpZGdlCSppc2FfY2hhaW47CisKK2V4dGVybiB2b2lkIGlzYV9pbml0KHZvaWQpOworCisjZGVmaW5lIGZvcl9lYWNoX2lzYShidXMpCQkJCQkJXAorICAgICAgICBmb3IoKGJ1cykgPSBpc2FfY2hhaW47IChidXMpOyAoYnVzKSA9IChidXMpLT5uZXh0KQorCisjZGVmaW5lIGZvcl9lYWNoX2lzYWRldihkZXYsIGJ1cykJCQkJCVwKKyAgICAgICAgZm9yKChkZXYpID0gKGJ1cyktPmRldmljZXM7IChkZXYpOyAoZGV2KSA9IChkZXYpLT5uZXh0KQorCisjZW5kaWYgLyogIShfX1NQQVJDNjRfSVNBX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2tiaW8uaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQva2Jpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjZjQ5NmIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2tiaW8uaApAQCAtMCwwICsxLDU2IEBACisjaWZuZGVmIF9fTElOVVhfS0JJT19ICisjZGVmaW5lIF9fTElOVVhfS0JJT19ICisKKy8qIFJldHVybiBrZXlib2FyZCB0eXBlICovCisjZGVmaW5lIEtJT0NUWVBFICAgIF9JT1IoJ2snLCA5LCBpbnQpCisvKiBSZXR1cm4gS2V5Ym9hcmQgbGF5b3V0ICovCisjZGVmaW5lIEtJT0NMQVlPVVQgIF9JT1IoJ2snLCAyMCwgaW50KQorCitlbnVtIHsKKyAgICBUUl9OT05FLAorICAgIFRSX0FTQ0lJLAkJCS8qIGtleWJvYXJkIGlzIGluIHJlZ3VsYXIgc3RhdGUgKi8KKyAgICBUUl9FVkVOVCwJCQkvKiBrZXlzdHJva2VzIHNlbnQgYXMgZmlybSBldmVudHMgKi8KKyAgICBUUl9VTlRSQU5TX0VWRU5UCQkvKiBFVkVOVCt1cCBhbmQgZG93bitubyB0cmFuc2xhdGlvbiAqLworfTsKKworLyogUmV0dXJuIHRoZSBjdXJyZW50IGtleWJvYXJkIHRyYW5zbGF0aW9uICovCisjZGVmaW5lIEtJT0NHVFJBTlMgIF9JT1IoJ2snLCA1LCBpbnQpCisvKiBTZXQgdGhlIGtleWJvYXJkIHRyYW5zbGF0aW9uICovCisjZGVmaW5lIEtJT0NUUkFOUyAgIF9JT1coJ2snLCAwLCBpbnQpCisKKy8qIFNlbmQgYSBrZXlib2FyZCBjb21tYW5kICovCisjZGVmaW5lIEtJT0NDTUQgICAgIF9JT1coJ2snLCA4LCBpbnQpCisKKy8qIFJldHVybiBpZiBrZXlzdHJva2VzIGFyZSBiZWluZyBzZW50IHRvIC9kZXYva2JkICovCisKKy8qIFNldCByb3V0aW5nIG9mIGtleXN0cm9rZXMgdG8gL2Rldi9rYmQgKi8KKyNkZWZpbmUgS0lPQ1NESVJFQ1QgX0lPVygnaycsIDEwLCBpbnQpCisKKy8qIFNldCBrZXlib2FyZCBsZWRzICovCisjZGVmaW5lIEtJT0NTTEVEICAgIF9JT1coJ2snLCAxNCwgdW5zaWduZWQgY2hhcikKKworLyogR2V0IGtleWJvYXJkIGxlZHMgKi8KKyNkZWZpbmUgS0lPQ0dMRUQgICAgX0lPUignaycsIDE1LCB1bnNpZ25lZCBjaGFyKQorCisvKiBVc2VkIGJ5IEtJT0NbR1NdUkFURSAqLworc3RydWN0IGtiZF9yYXRlIHsKKwl1bnNpZ25lZCBjaGFyIGRlbGF5OwkvKiBEZWxheSBpbiBIeiBiZWZvcmUgZmlyc3QgcmVwZWF0LgkqLworCXVuc2lnbmVkIGNoYXIgcmF0ZTsJLyogSW4gY2hhcmFjdGVycyBwZXIgc2Vjb25kICgwLi41MCkuCSovCit9OworCisvKiBTZXQga2V5Ym9hcmQgcmF0ZSAqLworI2RlZmluZSBLSU9DU1JBVEUgICBfSU9XKCdrJywgNDAsIHN0cnVjdCBrYmRfcmF0ZSkKKworLyogR2V0IGtleWJvYXJkIHJhdGUgKi8KKyNkZWZpbmUgS0lPQ0dSQVRFICAgX0lPVygnaycsIDQxLCBzdHJ1Y3Qga2JkX3JhdGUpCisKKy8qIFRvcCBiaXQgcmVjb3JkcyBpZiB0aGUga2V5IGlzIHVwIG9yIGRvd24gKi8KKyNkZWZpbmUgS0JEX1VQICAgICAgMHg4MAorCisvKiBVc2FibGUgaW5mb3JtYXRpb24gKi8KKyNkZWZpbmUgS0JEX0tFWU1BU0sgMHg3ZgorCisvKiBBbGwga2V5cyB1cCAqLworI2RlZmluZSBLQkRfSURMRSAgICAweDc1CisKKyNlbmRpZiAvKiBfX0xJTlVYX0tCSU9fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9rZGVidWcuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQva2RlYnVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjcwZDNkYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQva2RlYnVnLmgKQEAgLTAsMCArMSw1MiBAQAorI2lmbmRlZiBfU1BBUkM2NF9LREVCVUdfSAorI2RlZmluZSBfU1BBUkM2NF9LREVCVUdfSAorCisvKiBOZWFybHkgaWRlbnRpY2FsIHRvIHg4Nl82NC9pMzg2IGNvZGUuICovCisKKyNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgorCitzdHJ1Y3QgcHRfcmVnczsKKworc3RydWN0IGRpZV9hcmdzIHsKKwlzdHJ1Y3QgcHRfcmVncyAqcmVnczsKKwljb25zdCBjaGFyICpzdHI7CisJbG9uZyBlcnI7CisJaW50IHRyYXBucjsKKwlpbnQgc2lnbnI7Cit9OworCisvKiBOb3RlIC0geW91IHNob3VsZCBuZXZlciB1bnJlZ2lzdGVyIGJlY2F1c2UgdGhhdCBjYW4gcmFjZSB3aXRoIE5NSXMuCisgKiBJZiB5b3UgcmVhbGx5IHdhbnQgdG8gZG8gaXQgZmlyc3QgdW5yZWdpc3RlciAtIHRoZW4gc3luY2hyb25pemVfa2VybmVsCisgKiAtIHRoZW4gZnJlZS4KKyAqLworaW50IHJlZ2lzdGVyX2RpZV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTsKK2V4dGVybiBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNwYXJjNjRkaWVfY2hhaW47CisKK2V4dGVybiB2b2lkIGJhZF90cmFwKHN0cnVjdCBwdF9yZWdzICosIGxvbmcpOworCisvKiBHcm9zc2x5IG1pc25hbWVkLiAqLworZW51bSBkaWVfdmFsIHsKKwlESUVfT09QUyA9IDEsCisJRElFX0RFQlVHLAkvKiB0YSAweDcwICovCisJRElFX0RFQlVHXzIsCS8qIHRhIDB4NzEgKi8KKwlESUVfRElFLAorCURJRV9UUkFQLAorCURJRV9UUkFQX1RMMSwKKwlESUVfR1BGLAorCURJRV9DQUxMLAorCURJRV9QQUdFX0ZBVUxULAorfTsKKworc3RhdGljIGlubGluZSBpbnQgbm90aWZ5X2RpZShlbnVtIGRpZV92YWwgdmFsLGNoYXIgKnN0ciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCQkgICAgIGxvbmcgZXJyLCBpbnQgdHJhcCwgaW50IHNpZykKK3sKKwlzdHJ1Y3QgZGllX2FyZ3MgYXJncyA9IHsgLnJlZ3MJCT0gcmVncywKKwkJCQkgLnN0cgkJPSBzdHIsCisJCQkJIC5lcnIJCT0gZXJyLAorCQkJCSAudHJhcG5yCT0gdHJhcCwKKwkJCQkgLnNpZ25yCQk9IHNpZyB9OworCisJcmV0dXJuIG5vdGlmaWVyX2NhbGxfY2hhaW4oJnNwYXJjNjRkaWVfY2hhaW4sIHZhbCwgJmFyZ3MpOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQva21hcF90eXBlcy5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9rbWFwX3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRjMWQzZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQva21hcF90eXBlcy5oCkBAIC0wLDAgKzEsMjUgQEAKKyNpZm5kZWYgX0FTTV9LTUFQX1RZUEVTX0gKKyNkZWZpbmUgX0FTTV9LTUFQX1RZUEVTX0gKKworLyogRHVtbXkgaGVhZGVyIGp1c3QgdG8gZGVmaW5lIGttX3R5cGUuICBOb25lIG9mIHRoaXMKKyAqIGlzIGFjdHVhbGx5IHVzZWQgb24gc3BhcmM2NC4gIC1EYXZlTQorICovCisKK2VudW0ga21fdHlwZSB7CisJS01fQk9VTkNFX1JFQUQsCisJS01fU0tCX1NVTlJQQ19EQVRBLAorCUtNX1NLQl9EQVRBX1NPRlRJUlEsCisJS01fVVNFUjAsCisJS01fVVNFUjEsCisJS01fQklPX1NSQ19JUlEsCisJS01fQklPX0RTVF9JUlEsCisJS01fUFRFMCwKKwlLTV9QVEUxLAorCUtNX0lSUTAsCisJS01fSVJRMSwKKwlLTV9TT0ZUSVJRMCwKKwlLTV9TT0ZUSVJRMSwKKwlLTV9UWVBFX05SCit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQva3Byb2Jlcy5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9rcHJvYmVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThkMzI2YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQva3Byb2Jlcy5oCkBAIC0wLDAgKzEsMzIgQEAKKyNpZm5kZWYgX1NQQVJDNjRfS1BST0JFU19ICisjZGVmaW5lIF9TUEFSQzY0X0tQUk9CRVNfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwordHlwZWRlZiB1MzIga3Byb2JlX29wY29kZV90OworCisjZGVmaW5lIEJSRUFLUE9JTlRfSU5TVFJVQ1RJT04gICAweDkxZDAyMDcwIC8qIHRhIDB4NzAgKi8KKyNkZWZpbmUgQlJFQUtQT0lOVF9JTlNUUlVDVElPTl8yIDB4OTFkMDIwNzEgLyogdGEgMHg3MSAqLworI2RlZmluZSBNQVhfSU5TTl9TSVpFIDIKKworI2RlZmluZSBKUFJPQkVfRU5UUlkocGVudHJ5KQkoa3Byb2JlX29wY29kZV90ICopcGVudHJ5CisKKy8qIEFyY2hpdGVjdHVyZSBzcGVjaWZpYyBjb3B5IG9mIG9yaWdpbmFsIGluc3RydWN0aW9uKi8KK3N0cnVjdCBhcmNoX3NwZWNpZmljX2luc24geworCS8qIGNvcHkgb2YgdGhlIG9yaWdpbmFsIGluc3RydWN0aW9uICovCisJa3Byb2JlX29wY29kZV90IGluc25bTUFYX0lOU05fU0laRV07Cit9OworCisjaWZkZWYgQ09ORklHX0tQUk9CRVMKK2V4dGVybiBpbnQga3Byb2JlX2V4Y2VwdGlvbnNfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKKwkJCQkgICAgdW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKmRhdGEpOworI2Vsc2UJCQkJLyogIUNPTkZJR19LUFJPQkVTICovCitzdGF0aWMgaW5saW5lIGludCBrcHJvYmVfZXhjZXB0aW9uc19ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLAorCQkJCQkgICB1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqZGF0YSkKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX1NQQVJDNjRfS1BST0JFU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2xpbmthZ2UuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvbGlua2FnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5MWMyZDAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2xpbmthZ2UuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19BU01fTElOS0FHRV9ICisjZGVmaW5lIF9fQVNNX0xJTktBR0VfSAorCisvKiBOb3RoaW5nIHRvIHNlZSBoZXJlLi4uICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9sb2NhbC5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9sb2NhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmZGUxMTVhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9sb2NhbC5oCkBAIC0wLDAgKzEsNDAgQEAKKyNpZm5kZWYgX0FSQ0hfU1BBUkM2NF9MT0NBTF9ICisjZGVmaW5lIF9BUkNIX1NQQVJDNjRfTE9DQUxfSAorCisjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorCit0eXBlZGVmIGF0b21pYzY0X3QgbG9jYWxfdDsKKworI2RlZmluZSBMT0NBTF9JTklUKGkpCUFUT01JQzY0X0lOSVQoaSkKKyNkZWZpbmUgbG9jYWxfcmVhZCh2KQlhdG9taWM2NF9yZWFkKHYpCisjZGVmaW5lIGxvY2FsX3NldCh2LGkpCWF0b21pYzY0X3NldCh2LGkpCisKKyNkZWZpbmUgbG9jYWxfaW5jKHYpCWF0b21pYzY0X2luYyh2KQorI2RlZmluZSBsb2NhbF9kZWModikJYXRvbWljNjRfZGVjKHYpCisjZGVmaW5lIGxvY2FsX2FkZChpLCB2KQlhdG9taWM2NF9hZGQoaSwgdikKKyNkZWZpbmUgbG9jYWxfc3ViKGksIHYpCWF0b21pYzY0X3N1YihpLCB2KQorCisjZGVmaW5lIF9fbG9jYWxfaW5jKHYpCQkoKHYpLT5jb3VudGVyKyspCisjZGVmaW5lIF9fbG9jYWxfZGVjKHYpCQkoKHYpLT5jb3VudGVyLS0pCisjZGVmaW5lIF9fbG9jYWxfYWRkKGksdikJKCh2KS0+Y291bnRlcis9KGkpKQorI2RlZmluZSBfX2xvY2FsX3N1YihpLHYpCSgodiktPmNvdW50ZXItPShpKSkKKworLyogVXNlIHRoZXNlIGZvciBwZXItY3B1IGxvY2FsX3QgdmFyaWFibGVzOiBvbiBzb21lIGFyY2hzIHRoZXkgYXJlCisgKiBtdWNoIG1vcmUgZWZmaWNpZW50IHRoYW4gdGhlc2UgbmFpdmUgaW1wbGVtZW50YXRpb25zLiAgTm90ZSB0aGV5IHRha2UKKyAqIGEgdmFyaWFibGUsIG5vdCBhbiBhZGRyZXNzLgorICovCisjZGVmaW5lIGNwdV9sb2NhbF9yZWFkKHYpCWxvY2FsX3JlYWQoJl9fZ2V0X2NwdV92YXIodikpCisjZGVmaW5lIGNwdV9sb2NhbF9zZXQodiwgaSkJbG9jYWxfc2V0KCZfX2dldF9jcHVfdmFyKHYpLCAoaSkpCisKKyNkZWZpbmUgY3B1X2xvY2FsX2luYyh2KQlsb2NhbF9pbmMoJl9fZ2V0X2NwdV92YXIodikpCisjZGVmaW5lIGNwdV9sb2NhbF9kZWModikJbG9jYWxfZGVjKCZfX2dldF9jcHVfdmFyKHYpKQorI2RlZmluZSBjcHVfbG9jYWxfYWRkKGksIHYpCWxvY2FsX2FkZCgoaSksICZfX2dldF9jcHVfdmFyKHYpKQorI2RlZmluZSBjcHVfbG9jYWxfc3ViKGksIHYpCWxvY2FsX3N1YigoaSksICZfX2dldF9jcHVfdmFyKHYpKQorCisjZGVmaW5lIF9fY3B1X2xvY2FsX2luYyh2KQlfX2xvY2FsX2luYygmX19nZXRfY3B1X3Zhcih2KSkKKyNkZWZpbmUgX19jcHVfbG9jYWxfZGVjKHYpCV9fbG9jYWxfZGVjKCZfX2dldF9jcHVfdmFyKHYpKQorI2RlZmluZSBfX2NwdV9sb2NhbF9hZGQoaSwgdikJX19sb2NhbF9hZGQoKGkpLCAmX19nZXRfY3B1X3Zhcih2KSkKKyNkZWZpbmUgX19jcHVfbG9jYWxfc3ViKGksIHYpCV9fbG9jYWxfc3ViKChpKSwgJl9fZ2V0X2NwdV92YXIodikpCisKKyNlbmRpZiAvKiBfQVJDSF9TUEFSQzY0X0xPQ0FMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvbHN1LmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2xzdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1MzI5YzcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2xzdS5oCkBAIC0wLDAgKzEsMjAgQEAKKy8qICRJZDogbHN1LmgsdiAxLjIgMTk5Ny8wNC8wNCAwMDo1MDoyMiBkYXZlbSBFeHAgJCAqLworI2lmbmRlZiBfU1BBUkM2NF9MU1VfSAorI2RlZmluZSBfU1BBUkM2NF9MU1VfSAorCisjaW5jbHVkZSA8YXNtL2NvbnN0Lmg+CisKKy8qIExTVSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIExTVV9DT05UUk9MX1BNIF9BQygweDAwMDAwMWZlMDAwMDAwMDAsVUwpIC8qIFBoeXMtd2F0Y2hwb2ludCBieXRlIG1hc2sqLworI2RlZmluZSBMU1VfQ09OVFJPTF9WTSBfQUMoMHgwMDAwMDAwMWZlMDAwMDAwLFVMKSAvKiBWaXJ0LXdhdGNocG9pbnQgYnl0ZSBtYXNrKi8KKyNkZWZpbmUgTFNVX0NPTlRST0xfUFIgX0FDKDB4MDAwMDAwMDAwMTAwMDAwMCxVTCkgLyogUGh5cy1yZCB3YXRjaHBvaW50IGVuYWJsZSovCisjZGVmaW5lIExTVV9DT05UUk9MX1BXIF9BQygweDAwMDAwMDAwMDA4MDAwMDAsVUwpIC8qIFBoeXMtd3Igd2F0Y2hwb2ludCBlbmFibGUqLworI2RlZmluZSBMU1VfQ09OVFJPTF9WUiBfQUMoMHgwMDAwMDAwMDAwNDAwMDAwLFVMKSAvKiBWaXJ0LXJkIHdhdGNocG9pbnQgZW5hYmxlKi8KKyNkZWZpbmUgTFNVX0NPTlRST0xfVlcgX0FDKDB4MDAwMDAwMDAwMDIwMDAwMCxVTCkgLyogVmlydC13ciB3YXRjaHBvaW50IGVuYWJsZSovCisjZGVmaW5lIExTVV9DT05UUk9MX0ZNIF9BQygweDAwMDAwMDAwMDAwZmZmZjAsVUwpIC8qIFBhcml0eSBtYXNrIGVuYWJsZXMuICAgICAqLworI2RlZmluZSBMU1VfQ09OVFJPTF9ETSBfQUMoMHgwMDAwMDAwMDAwMDAwMDA4LFVMKSAvKiBEYXRhIE1NVSBlbmFibGUuICAgICAgICAgKi8KKyNkZWZpbmUgTFNVX0NPTlRST0xfSU0gX0FDKDB4MDAwMDAwMDAwMDAwMDAwNCxVTCkgLyogSW5zdHJ1Y3Rpb24gTU1VIGVuYWJsZS4gICovCisjZGVmaW5lIExTVV9DT05UUk9MX0RDIF9BQygweDAwMDAwMDAwMDAwMDAwMDIsVUwpIC8qIERhdGEgY2FjaGUgZW5hYmxlLiAgICAgICAqLworI2RlZmluZSBMU1VfQ09OVFJPTF9JQyBfQUMoMHgwMDAwMDAwMDAwMDAwMDAxLFVMKSAvKiBJbnN0cnVjdGlvbiBjYWNoZSBlbmFibGUuKi8KKworI2VuZGlmIC8qICEoX1NQQVJDNjRfTFNVX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L21jMTQ2ODE4cnRjLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L21jMTQ2ODE4cnRjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzViZDU3MgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvbWMxNDY4MThydGMuaApAQCAtMCwwICsxLDM1IEBACisvKgorICogTWFjaGluZSBkZXBlbmRlbnQgYWNjZXNzIGZ1bmN0aW9ucyBmb3IgUlRDIHJlZ2lzdGVycy4KKyAqLworI2lmbmRlZiBfX0FTTV9TUEFSQzY0X01DMTQ2ODE4UlRDX0gKKyNkZWZpbmUgX19BU01fU1BBUkM2NF9NQzE0NjgxOFJUQ19ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2lmbmRlZiBSVENfUE9SVAorI2lmZGVmIENPTkZJR19QQ0kKK2V4dGVybiB1bnNpZ25lZCBsb25nIGRzMTI4N19yZWdzOworI2Vsc2UKKyNkZWZpbmUgZHMxMjg3X3JlZ3MgKDBVTCkKKyNlbmRpZgorI2RlZmluZSBSVENfUE9SVCh4KQkoZHMxMjg3X3JlZ3MgKyAoeCkpCisjZGVmaW5lIFJUQ19BTFdBWVNfQkNECTAKKyNlbmRpZgorCisvKgorICogVGhlIHlldCBzdXBwb3J0ZWQgbWFjaGluZXMgYWxsIGFjY2VzcyB0aGUgUlRDIGluZGV4IHJlZ2lzdGVyIHZpYQorICogYW4gSVNBIHBvcnQgYWNjZXNzIGJ1dCB0aGUgd2F5IHRvIGFjY2VzcyB0aGUgZGF0ZSByZWdpc3RlciBkaWZmZXJzIC4uLgorICovCisjZGVmaW5lIENNT1NfUkVBRChhZGRyKSAoeyBcCitvdXRiX3AoKGFkZHIpLFJUQ19QT1JUKDApKTsgXAoraW5iX3AoUlRDX1BPUlQoMSkpOyBcCit9KQorI2RlZmluZSBDTU9TX1dSSVRFKHZhbCwgYWRkcikgKHsgXAorb3V0Yl9wKChhZGRyKSxSVENfUE9SVCgwKSk7IFwKK291dGJfcCgodmFsKSxSVENfUE9SVCgxKSk7IFwKK30pCisKKyNkZWZpbmUgUlRDX0lSUSA4CisKKyNlbmRpZiAvKiBfX0FTTV9TUEFSQzY0X01DMTQ2ODE4UlRDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvbW1hbi5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9tbWFuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFjZWNmNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvbW1hbi5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qICRJZDogbW1hbi5oLHYgMS4yIDIwMDAvMDMvMTUgMDI6NDQ6MjYgZGF2ZW0gRXhwICQgKi8KKyNpZm5kZWYgX19TUEFSQzY0X01NQU5fSF9fCisjZGVmaW5lIF9fU1BBUkM2NF9NTUFOX0hfXworCisvKiBTdW5PUydpZmllZC4uLiAqLworCisjZGVmaW5lIFBST1RfUkVBRAkweDEJCS8qIHBhZ2UgY2FuIGJlIHJlYWQgKi8KKyNkZWZpbmUgUFJPVF9XUklURQkweDIJCS8qIHBhZ2UgY2FuIGJlIHdyaXR0ZW4gKi8KKyNkZWZpbmUgUFJPVF9FWEVDCTB4NAkJLyogcGFnZSBjYW4gYmUgZXhlY3V0ZWQgKi8KKyNkZWZpbmUgUFJPVF9TRU0JMHg4CQkvKiBwYWdlIG1heSBiZSB1c2VkIGZvciBhdG9taWMgb3BzICovCisjZGVmaW5lIFBST1RfTk9ORQkweDAJCS8qIHBhZ2UgY2FuIG5vdCBiZSBhY2Nlc3NlZCAqLworI2RlZmluZSBQUk9UX0dST1dTRE9XTgkweDAxMDAwMDAwCS8qIG1wcm90ZWN0IGZsYWc6IGV4dGVuZCBjaGFuZ2UgdG8gc3RhcnQgb2YgZ3Jvd3Nkb3duIHZtYSAqLworI2RlZmluZSBQUk9UX0dST1dTVVAJMHgwMjAwMDAwMAkvKiBtcHJvdGVjdCBmbGFnOiBleHRlbmQgY2hhbmdlIHRvIGVuZCBvZiBncm93c3VwIHZtYSAqLworCisjZGVmaW5lIE1BUF9TSEFSRUQJMHgwMQkJLyogU2hhcmUgY2hhbmdlcyAqLworI2RlZmluZSBNQVBfUFJJVkFURQkweDAyCQkvKiBDaGFuZ2VzIGFyZSBwcml2YXRlICovCisjZGVmaW5lIE1BUF9UWVBFCTB4MGYJCS8qIE1hc2sgZm9yIHR5cGUgb2YgbWFwcGluZyAqLworI2RlZmluZSBNQVBfRklYRUQJMHgxMAkJLyogSW50ZXJwcmV0IGFkZHIgZXhhY3RseSAqLworI2RlZmluZSBNQVBfQU5PTllNT1VTCTB4MjAJCS8qIGRvbid0IHVzZSBhIGZpbGUgKi8KKyNkZWZpbmUgTUFQX1JFTkFNRSAgICAgIE1BUF9BTk9OWU1PVVMgICAvKiBJbiBTdW5PUyB0ZXJtaW5vbG9neSAqLworI2RlZmluZSBNQVBfTk9SRVNFUlZFICAgMHg0MCAgICAgICAgICAgIC8qIGRvbid0IHJlc2VydmUgc3dhcCBwYWdlcyAqLworI2RlZmluZSBNQVBfSU5IRVJJVCAgICAgMHg4MCAgICAgICAgICAgIC8qIFN1bk9TIGRvZXNuJ3QgZG8gdGhpcywgYnV0Li4uICovCisjZGVmaW5lIE1BUF9MT0NLRUQgICAgICAweDEwMCAgICAgICAgICAgLyogbG9jayB0aGUgbWFwcGluZyAqLworI2RlZmluZSBfTUFQX05FVyAgICAgICAgMHg4MDAwMDAwMCAgICAgIC8qIEJpbmFyeSBjb21wYXRpYmlsaXR5IGlzIGZ1bi4uLiAqLworCisjZGVmaW5lIE1BUF9HUk9XU0RPV04JMHgwMjAwCQkvKiBzdGFjay1saWtlIHNlZ21lbnQgKi8KKyNkZWZpbmUgTUFQX0RFTllXUklURQkweDA4MDAJCS8qIEVUWFRCU1kgKi8KKyNkZWZpbmUgTUFQX0VYRUNVVEFCTEUJMHgxMDAwCQkvKiBtYXJrIGl0IGFzIGFuIGV4ZWN1dGFibGUgKi8KKworI2RlZmluZSBNU19BU1lOQwkxCQkvKiBzeW5jIG1lbW9yeSBhc3luY2hyb25vdXNseSAqLworI2RlZmluZSBNU19JTlZBTElEQVRFCTIJCS8qIGludmFsaWRhdGUgdGhlIGNhY2hlcyAqLworI2RlZmluZSBNU19TWU5DCQk0CQkvKiBzeW5jaHJvbm91cyBtZW1vcnkgc3luYyAqLworCisjZGVmaW5lIE1DTF9DVVJSRU5UICAgICAweDIwMDAgICAgICAgICAgLyogbG9jayBhbGwgY3VycmVudGx5IG1hcHBlZCBwYWdlcyAqLworI2RlZmluZSBNQ0xfRlVUVVJFICAgICAgMHg0MDAwICAgICAgICAgIC8qIGxvY2sgYWxsIGFkZGl0aW9ucyB0byBhZGRyZXNzIHNwYWNlICovCisKKyNkZWZpbmUgTUFQX1BPUFVMQVRFCTB4ODAwMAkJLyogcG9wdWxhdGUgKHByZWZhdWx0KSBwYWdldGFibGVzICovCisjZGVmaW5lIE1BUF9OT05CTE9DSwkweDEwMDAwCQkvKiBkbyBub3QgYmxvY2sgb24gSU8gKi8KKworLyogWFhYIE5lZWQgdG8gYWRkIGZsYWdzIHRvIFN1bk9TJ3MgbWN0bCwgbWxvY2thbGwsIGFuZCBtYWR2aXNlIHN5c3RlbQorICogWFhYIGNhbGxzLgorICovCisKKy8qIFN1bk9TIHN5c19tY3RsKCkgc3R1ZmYuLi4gKi8KKyNkZWZpbmUgTUNfU1lOQyAgICAgICAgIDEgIC8qIFN5bmMgcGFnZXMgaW4gbWVtb3J5IHdpdGggc3RvcmFnZSAodXN1LiBhIGZpbGUpICovCisjZGVmaW5lIE1DX0xPQ0sgICAgICAgICAyICAvKiBMb2NrIHBhZ2VzIGludG8gY29yZSByYW0sIGRvIG5vdCBhbGxvdyBzd2FwcGluZyBvZiB0aGVtICovCisjZGVmaW5lIE1DX1VOTE9DSyAgICAgICAzICAvKiBVbmxvY2sgcGFnZXMgbG9ja2VkIHZpYSBwcmV2aW91cyBtY3RsKCkgd2l0aCBNQ19MT0NLIGFyZyAqLworI2RlZmluZSBNQ19MT0NLQVMgICAgICAgNSAgLyogTG9jayBhbiBlbnRpcmUgYWRkcmVzcyBzcGFjZSBvZiB0aGUgY2FsbGluZyBwcm9jZXNzICovCisjZGVmaW5lIE1DX1VOTE9DS0FTICAgICA2ICAvKiBVbmxvY2sgZW50aXJlIGFkZHJlc3Mgc3BhY2Ugb2YgY2FsbGluZyBwcm9jZXNzICovCisKKyNkZWZpbmUgTUFEVl9OT1JNQUwJMHgwCQkvKiBkZWZhdWx0IHBhZ2UtaW4gYmVoYXZpb3IgKi8KKyNkZWZpbmUgTUFEVl9SQU5ET00JMHgxCQkvKiBwYWdlLWluIG1pbmltdW0gcmVxdWlyZWQgKi8KKyNkZWZpbmUgTUFEVl9TRVFVRU5USUFMCTB4MgkJLyogcmVhZC1haGVhZCBhZ2dyZXNzaXZlbHkgKi8KKyNkZWZpbmUgTUFEVl9XSUxMTkVFRAkweDMJCS8qIHByZS1mYXVsdCBwYWdlcyAqLworI2RlZmluZSBNQURWX0RPTlRORUVECTB4NAkJLyogZGlzY2FyZCB0aGVzZSBwYWdlcyAqLworI2RlZmluZSBNQURWX0ZSRUUJMHg1CQkvKiAoU29sYXJpcykgY29udGVudHMgY2FuIGJlIGZyZWVkICovCisKKy8qIGNvbXBhdGliaWxpdHkgZmxhZ3MgKi8KKyNkZWZpbmUgTUFQX0FOT04JTUFQX0FOT05ZTU9VUworI2RlZmluZSBNQVBfRklMRQkwCisKKyNlbmRpZiAvKiBfX1NQQVJDNjRfTU1BTl9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvbW11LmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L21tdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2MjdlZWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L21tdS5oCkBAIC0wLDAgKzEsOTkgQEAKKyNpZm5kZWYgX19NTVVfSAorI2RlZmluZSBfX01NVV9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9jb25zdC5oPgorCisvKgorICogRm9yIHRoZSA4ayBwYWdlc2l6ZSBrZXJuZWwsIHVzZSBvbmx5IDEwIGh3IGNvbnRleHQgYml0cyB0byBvcHRpbWl6ZSBzb21lCisgKiBzaGlmdHMgaW4gdGhlIGZhc3QgdGxibWlzcyBoYW5kbGVycywgaW5zdGVhZCBvZiBhbGwgMTMgYml0cyAoc3BlY2lmaWNhbGx5CisgKiBmb3IgdnB0ZSBvZmZzZXQgY2FsY3VsYXRpb24pLiBGb3Igb3RoZXIgcGFnZXNpemVzLCB0aGlzIG9wdGltaXphdGlvbiBpbgorICogdGhlIHRsYmhhbmRsZXJzIGNhbiBub3QgYmUgZG9uZTsgYnV0IHN0aWxsLCBhbGwgMTMgYml0cyBjYW4gbm90IGJlIHVzZWQKKyAqIGJlY2F1c2UgdGhlIHRsYiBoYW5kbGVycyB1c2UgImFuZGNjIiBpbnN0cnVjdGlvbiB3aGljaCBzaWduIGV4dGVuZHMgMTMKKyAqIGJpdCBhcmd1bWVudHMuCisgKi8KKyNpZiBQQUdFX1NISUZUID09IDEzCisjZGVmaW5lIENUWF9OUl9CSVRTCQkxMAorI2Vsc2UKKyNkZWZpbmUgQ1RYX05SX0JJVFMJCTEyCisjZW5kaWYKKworI2RlZmluZSBUQUdfQ09OVEVYVF9CSVRTCSgoX0FDKDEsVUwpIDw8IENUWF9OUl9CSVRTKSAtIF9BQygxLFVMKSkKKworLyogVWx0cmFTUEFSQy1JSUkrIGFuZCBsYXRlciBoYXZlIGEgZmVhdHVyZSB3aGVyZWJ5IHlvdSBjYW4KKyAqIHNlbGVjdCB3aGF0IHBhZ2Ugc2l6ZSB0aGUgdmFyaW91cyBEYXRhLVRMQiBpbnN0YW5jZXMgaW4gdGhlCisgKiBjaGlwLiAgSW4gb3JkZXIgdG8gZ3JhY2VmdWxseSBzdXBwb3J0IHRoaXMsIHdlIHB1dCB0aGUgdmVyc2lvbgorICogZmllbGQgaW4gYSBzcG90IG91dHNpZGUgb2YgdGhlIGFyZWFzIG9mIHRoZSBjb250ZXh0IHJlZ2lzdGVyCisgKiB3aGVyZSB0aGlzIHBhcmFtZXRlciBpcyBzcGVjaWZpZWQuCisgKi8KKyNkZWZpbmUgQ1RYX1ZFUlNJT05fU0hJRlQJMjIKKyNkZWZpbmUgQ1RYX1ZFUlNJT05fTUFTSwkoKH4wVUwpIDw8IENUWF9WRVJTSU9OX1NISUZUKQorCisjZGVmaW5lIENUWF9QR1NaXzhLQgkJX0FDKDB4MCxVTCkKKyNkZWZpbmUgQ1RYX1BHU1pfNjRLQgkJX0FDKDB4MSxVTCkKKyNkZWZpbmUgQ1RYX1BHU1pfNTEyS0IJCV9BQygweDIsVUwpCisjZGVmaW5lIENUWF9QR1NaXzRNQgkJX0FDKDB4MyxVTCkKKyNkZWZpbmUgQ1RYX1BHU1pfQklUUwkJX0FDKDB4NyxVTCkKKyNkZWZpbmUgQ1RYX1BHU1owX05VQ19TSElGVAk2MQorI2RlZmluZSBDVFhfUEdTWjFfTlVDX1NISUZUCTU4CisjZGVmaW5lIENUWF9QR1NaMF9TSElGVAkJMTYKKyNkZWZpbmUgQ1RYX1BHU1oxX1NISUZUCQkxOQorI2RlZmluZSBDVFhfUEdTWl9NQVNLCQkoKENUWF9QR1NaX0JJVFMgPDwgQ1RYX1BHU1owX1NISUZUKSB8IFwKKwkJCQkgKENUWF9QR1NaX0JJVFMgPDwgQ1RYX1BHU1oxX1NISUZUKSkKKworI2lmIGRlZmluZWQoQ09ORklHX1NQQVJDNjRfUEFHRV9TSVpFXzhLQikKKyNkZWZpbmUgQ1RYX1BHU1pfQkFTRQlDVFhfUEdTWl84S0IKKyNlbGlmIGRlZmluZWQoQ09ORklHX1NQQVJDNjRfUEFHRV9TSVpFXzY0S0IpCisjZGVmaW5lIENUWF9QR1NaX0JBU0UJQ1RYX1BHU1pfNjRLQgorI2VsaWYgZGVmaW5lZChDT05GSUdfU1BBUkM2NF9QQUdFX1NJWkVfNTEyS0IpCisjZGVmaW5lIENUWF9QR1NaX0JBU0UJQ1RYX1BHU1pfNTEyS0IKKyNlbGlmIGRlZmluZWQoQ09ORklHX1NQQVJDNjRfUEFHRV9TSVpFXzRNQikKKyNkZWZpbmUgQ1RYX1BHU1pfQkFTRQlDVFhfUEdTWl80TUIKKyNlbHNlCisjZXJyb3IgTm8gcGFnZSBzaXplIHNwZWNpZmllZCBpbiBrZXJuZWwgY29uZmlndXJhdGlvbgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0VfU0laRV80TUIpCisjZGVmaW5lIENUWF9QR1NaX0hVR0UJCUNUWF9QR1NaXzRNQgorI2VsaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfNTEySykKKyNkZWZpbmUgQ1RYX1BHU1pfSFVHRQkJQ1RYX1BHU1pfNTEyS0IKKyNlbGlmIGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzY0SykKKyNkZWZpbmUgQ1RYX1BHU1pfSFVHRQkJQ1RYX1BHU1pfNjRLQgorI2VuZGlmCisKKyNkZWZpbmUgQ1RYX1BHU1pfS0VSTglDVFhfUEdTWl80TUIKKworLyogVGh1cywgd2hlbiBydW5uaW5nIG9uIFVsdHJhU1BBUkMtSUlJKyBhbmQgbGF0ZXIsIHdlIHVzZSB0aGUgZm9sbG93aW5nCisgKiBQUklNQVJZX0NPTlRFWFQgcmVnaXN0ZXIgdmFsdWVzIGZvciB0aGUga2VybmVsIGNvbnRleHQuCisgKi8KKyNkZWZpbmUgQ1RYX0NIRUVUQUhfUExVU19OVUMgXAorCSgoQ1RYX1BHU1pfS0VSTiA8PCBDVFhfUEdTWjBfTlVDX1NISUZUKSB8IFwKKwkgKENUWF9QR1NaX0JBU0UgPDwgQ1RYX1BHU1oxX05VQ19TSElGVCkpCisKKyNkZWZpbmUgQ1RYX0NIRUVUQUhfUExVU19DVFgwIFwKKwkoKENUWF9QR1NaX0tFUk4gPDwgQ1RYX1BHU1owX1NISUZUKSB8IFwKKwkgKENUWF9QR1NaX0JBU0UgPDwgQ1RYX1BHU1oxX1NISUZUKSkKKworLyogSWYgeW91IHdhbnQgInRoZSBUTEIgY29udGV4dCBudW1iZXIiIHVzZSBDVFhfTlJfTUFTSy4gIElmIHlvdQorICogd2FudCAidGhlIGJpdHMgSSBwcm9ncmFtIGludG8gdGhlIGNvbnRleHQgcmVnaXN0ZXJzIiB1c2UKKyAqIENUWF9IV19NQVNLLgorICovCisjZGVmaW5lIENUWF9OUl9NQVNLCQlUQUdfQ09OVEVYVF9CSVRTCisjZGVmaW5lIENUWF9IV19NQVNLCQkoQ1RYX05SX01BU0sgfCBDVFhfUEdTWl9NQVNLKQorCisjZGVmaW5lIENUWF9GSVJTVF9WRVJTSU9OCSgoX0FDKDEsVUwpIDw8IENUWF9WRVJTSU9OX1NISUZUKSArIF9BQygxLFVMKSkKKyNkZWZpbmUgQ1RYX1ZBTElEKF9fY3R4KQlcCisJICghKCgoX19jdHguc3BhcmM2NF9jdHhfdmFsKSBeIHRsYl9jb250ZXh0X2NhY2hlKSAmIENUWF9WRVJTSU9OX01BU0spKQorI2RlZmluZSBDVFhfSFdCSVRTKF9fY3R4KQkoKF9fY3R4LnNwYXJjNjRfY3R4X3ZhbCkgJiBDVFhfSFdfTUFTSykKKyNkZWZpbmUgQ1RYX05SQklUUyhfX2N0eCkJKChfX2N0eC5zcGFyYzY0X2N0eF92YWwpICYgQ1RYX05SX01BU0spCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBsb25nCXNwYXJjNjRfY3R4X3ZhbDsKK30gbW1fY29udGV4dF90OworCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYgLyogX19NTVVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9tbXVfY29udGV4dC5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9tbXVfY29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3YzQzYzYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L21tdV9jb250ZXh0LmgKQEAgLTAsMCArMSwxNDUgQEAKKy8qICRJZDogbW11X2NvbnRleHQuaCx2IDEuNTQgMjAwMi8wMi8wOSAxOTo0OTozMSBkYXZlbSBFeHAgJCAqLworI2lmbmRlZiBfX1NQQVJDNjRfTU1VX0NPTlRFWFRfSAorI2RlZmluZSBfX1NQQVJDNjRfTU1VX0NPTlRFWFRfSAorCisvKiBEZXJpdmVkIGhlYXZpbHkgZnJvbSBMaW51cydzIEFscGhhL0FYUCBBU04gY29kZS4uLiAqLworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3NwaXRmaXJlLmg+CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBlbnRlcl9sYXp5X3RsYihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7Cit9CisKK2V4dGVybiBzcGlubG9ja190IGN0eF9hbGxvY19sb2NrOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdGxiX2NvbnRleHRfY2FjaGU7CitleHRlcm4gdW5zaWduZWQgbG9uZyBtbXVfY29udGV4dF9ibWFwW107CisKK2V4dGVybiB2b2lkIGdldF9uZXdfbW11X2NvbnRleHQoc3RydWN0IG1tX3N0cnVjdCAqbW0pOworCisvKiBJbml0aWFsaXplIGEgbmV3IG1tdSBjb250ZXh0LiAgVGhpcyBpcyBpbnZva2VkIHdoZW4gYSBuZXcKKyAqIGFkZHJlc3Mgc3BhY2UgaW5zdGFuY2UgKHVuaXF1ZSBvciBzaGFyZWQpIGlzIGluc3RhbnRpYXRlZC4KKyAqIFRoaXMganVzdCBuZWVkcyB0byBzZXQgbW0tPmNvbnRleHQgdG8gYW4gaW52YWxpZCBjb250ZXh0LgorICovCisjZGVmaW5lIGluaXRfbmV3X2NvbnRleHQoX190c2ssIF9fbW0pCVwKKwkoKChfX21tKS0+Y29udGV4dC5zcGFyYzY0X2N0eF92YWwgPSAwVUwpLCAwKQorCisvKiBEZXN0cm95IGEgZGVhZCBjb250ZXh0LiAgVGhpcyBvY2N1cnMgd2hlbiBtbXB1dCBkcm9wcyB0aGUKKyAqIG1tX3VzZXJzIGNvdW50IHRvIHplcm8sIHRoZSBtbWFwcyBoYXZlIGJlZW4gcmVsZWFzZWQsIGFuZAorICogYWxsIHRoZSBwYWdlIHRhYmxlcyBoYXZlIGJlZW4gZmx1c2hlZC4gIE91ciBqb2IgaXMgdG8gZGVzdHJveQorICogYW55IHJlbWFpbmluZyBwcm9jZXNzb3Itc3BlY2lmaWMgc3RhdGUsIGFuZCBpbiB0aGUgc3BhcmM2NAorICogY2FzZSB0aGlzIGp1c3QgbWVhbnMgZnJlZWluZyB1cCB0aGUgbW11IGNvbnRleHQgSUQgaGVsZCBieQorICogdGhpcyB0YXNrIGlmIHZhbGlkLgorICovCisjZGVmaW5lIGRlc3Ryb3lfY29udGV4dChfX21tKQkJCQkJXAorZG8gewlzcGluX2xvY2soJmN0eF9hbGxvY19sb2NrKTsJCQkJXAorCWlmIChDVFhfVkFMSUQoKF9fbW0pLT5jb250ZXh0KSkgewkJCVwKKwkJdW5zaWduZWQgbG9uZyBuciA9IENUWF9OUkJJVFMoKF9fbW0pLT5jb250ZXh0KTsJXAorCQltbXVfY29udGV4dF9ibWFwW25yPj42XSAmPSB+KDFVTCA8PCAobnIgJiA2MykpOwlcCisJfQkJCQkJCQlcCisJc3Bpbl91bmxvY2soJmN0eF9hbGxvY19sb2NrKTsJCQkJXAorfSB3aGlsZSgwKQorCisvKiBSZWxvYWQgdGhlIHR3byBjb3JlIHZhbHVlcyB1c2VkIGJ5IFRMQiBtaXNzIGhhbmRsZXIKKyAqIHByb2Nlc3Npbmcgb24gc3BhcmM2NC4gIFRoZXkgYXJlOgorICogMSkgVGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgbW0tPnBnZCwgd2hlbiBmdWxsIHBhZ2UKKyAqICAgIHRhYmxlIHdhbGtzIGFyZSBuZWNlc3NhcnksIHRoaXMgaXMgd2hlcmUgdGhlCisgKiAgICBzZWFyY2ggYmVnaW5zLgorICogMikgQSAiUEdEIGNhY2hlIi4gIEZvciAzMi1iaXQgdGFza3Mgb25seSBwZ2RbMF0gaXMKKyAqICAgIGV2ZXIgdXNlZCBzaW5jZSB0aGF0IG1hcHMgdGhlIGVudGlyZSBsb3cgNEdCCisgKiAgICBjb21wbGV0ZWx5LiAgVG8gc3BlZWQgdXAgVExCIG1pc3MgcHJvY2Vzc2luZyB3ZQorICogICAgbWFrZSB0aGlzIHZhbHVlIGF2YWlsYWJsZSB0byB0aGUgaGFuZGxlcnMuICBUaGlzCisgKiAgICBkZWNyZWFzZXMgdGhlIGFtb3VudCBvZiBtZW1vcnkgdHJhZmZpYyBpbmN1cnJlZC4KKyAqLworI2RlZmluZSByZWxvYWRfdGxibWlzc19zdGF0ZShfX3RzaywgX19tbSkgXAorZG8geyBcCisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBwYWRkciBhc20oIm81Iik7IFwKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIHBnZF9jYWNoZSBhc20oIm80Iik7IFwKKwlwYWRkciA9IF9fcGEoKF9fbW0pLT5wZ2QpOyBcCisJcGdkX2NhY2hlID0gMFVMOyBcCisJaWYgKChfX3RzayktPnRocmVhZF9pbmZvLT5mbGFncyAmIF9USUZfMzJCSVQpIFwKKwkJcGdkX2NhY2hlID0gZ2V0X3BnZF9jYWNoZSgoX19tbSktPnBnZCk7IFwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygid3JwcgklJWcwLCAweDQ5NCwgJSVwc3RhdGVcblx0IiBcCisJCQkgICAgICJtb3YJJTMsICUlZzRcblx0IiBcCisJCQkgICAgICJtb3YJJTAsICUlZzdcblx0IiBcCisJCQkgICAgICJzdHhhCSUxLCBbJSVnNF0gJTJcblx0IiBcCisJCQkgICAgICJtZW1iYXIJI1N5bmNcblx0IiBcCisJCQkgICAgICJ3cnByCSUlZzAsIDB4MDk2LCAlJXBzdGF0ZSIgXAorCQkJICAgICA6IC8qIG5vIG91dHB1dHMgKi8gXAorCQkJICAgICA6ICJyIiAocGFkZHIpLCAiciIgKHBnZF9jYWNoZSksXAorCQkJICAgICAgICJpIiAoQVNJX0RNTVUpLCAiaSIgKFRTQl9SRUcpKTsgXAorfSB3aGlsZSgwKQorCisvKiBTZXQgTU1VIGNvbnRleHQgaW4gdGhlIGFjdHVhbCBoYXJkd2FyZS4gKi8KKyNkZWZpbmUgbG9hZF9zZWNvbmRhcnlfY29udGV4dChfX21tKSBcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0eGEJJTAsIFslMV0gJTJcblx0IiBcCisJCQkgICAgICJmbHVzaAklJWc2IiBcCisJCQkgICAgIDogLyogTm8gb3V0cHV0cyAqLyBcCisJCQkgICAgIDogInIiIChDVFhfSFdCSVRTKChfX21tKS0+Y29udGV4dCkpLCBcCisJCQkgICAgICAgInIiIChTRUNPTkRBUllfQ09OVEVYVCksICJpIiAoQVNJX0RNTVUpKQorCitleHRlcm4gdm9pZCBfX2ZsdXNoX3RsYl9tbSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKKworLyogU3dpdGNoIHRoZSBjdXJyZW50IE1NIGNvbnRleHQuICovCitzdGF0aWMgaW5saW5lIHZvaWQgc3dpdGNoX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm9sZF9tbSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCXVuc2lnbmVkIGxvbmcgY3R4X3ZhbGlkOworCisJc3Bpbl9sb2NrKCZtbS0+cGFnZV90YWJsZV9sb2NrKTsKKwlpZiAoQ1RYX1ZBTElEKG1tLT5jb250ZXh0KSkKKwkJY3R4X3ZhbGlkID0gMTsKKyAgICAgICAgZWxzZQorCQljdHhfdmFsaWQgPSAwOworCisJaWYgKCFjdHhfdmFsaWQgfHwgKG9sZF9tbSAhPSBtbSkpIHsKKwkJaWYgKCFjdHhfdmFsaWQpCisJCQlnZXRfbmV3X21tdV9jb250ZXh0KG1tKTsKKworCQlsb2FkX3NlY29uZGFyeV9jb250ZXh0KG1tKTsKKwkJcmVsb2FkX3RsYm1pc3Nfc3RhdGUodHNrLCBtbSk7CisJfQorCisJeworCQlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJCS8qIEV2ZW4gaWYgKG1tID09IG9sZF9tbSkgd2UgX211c3RfIGNoZWNrCisJCSAqIHRoZSBjcHVfdm1fbWFzay4gIElmIHdlIGRvIG5vdCB3ZSBjb3VsZAorCQkgKiBjb3JydXB0IHRoZSBUTEIgc3RhdGUgYmVjYXVzZSBvZiBob3cKKwkJICogc21wX2ZsdXNoX3RsYl97cGFnZSxyYW5nZSxtbX0gb24gc3BhcmM2NAorCQkgKiBhbmQgbGF6eSB0bGIgc3dpdGNoZXMgd29yay4gLURhdmVNCisJCSAqLworCQlpZiAoIWN0eF92YWxpZCB8fCAhY3B1X2lzc2V0KGNwdSwgbW0tPmNwdV92bV9tYXNrKSkgeworCQkJY3B1X3NldChjcHUsIG1tLT5jcHVfdm1fbWFzayk7CisJCQlfX2ZsdXNoX3RsYl9tbShDVFhfSFdCSVRTKG1tLT5jb250ZXh0KSwKKwkJCQkgICAgICAgU0VDT05EQVJZX0NPTlRFWFQpOworCQl9CisJfQorCXNwaW5fdW5sb2NrKCZtbS0+cGFnZV90YWJsZV9sb2NrKTsKK30KKworI2RlZmluZSBkZWFjdGl2YXRlX21tKHRzayxtbSkJZG8geyB9IHdoaWxlICgwKQorCisvKiBBY3RpdmF0ZSBhIG5ldyBNTSBpbnN0YW5jZSBmb3IgdGhlIGN1cnJlbnQgdGFzay4gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBhY3RpdmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICphY3RpdmVfbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCWludCBjcHU7CisKKwlzcGluX2xvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOworCWlmICghQ1RYX1ZBTElEKG1tLT5jb250ZXh0KSkKKwkJZ2V0X25ld19tbXVfY29udGV4dChtbSk7CisJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCWlmICghY3B1X2lzc2V0KGNwdSwgbW0tPmNwdV92bV9tYXNrKSkKKwkJY3B1X3NldChjcHUsIG1tLT5jcHVfdm1fbWFzayk7CisJc3Bpbl91bmxvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOworCisJbG9hZF9zZWNvbmRhcnlfY29udGV4dChtbSk7CisJX19mbHVzaF90bGJfbW0oQ1RYX0hXQklUUyhtbS0+Y29udGV4dCksIFNFQ09OREFSWV9DT05URVhUKTsKKwlyZWxvYWRfdGxibWlzc19zdGF0ZShjdXJyZW50LCBtbSk7Cit9CisKKyNlbmRpZiAvKiAhKF9fQVNTRU1CTFlfXykgKi8KKworI2VuZGlmIC8qICEoX19TUEFSQzY0X01NVV9DT05URVhUX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L21vZHVsZS5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9tb2R1bGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDc3YmE0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9tb2R1bGUuaApAQCAtMCwwICsxLDcgQEAKKyNpZm5kZWYgX0FTTV9TUEFSQzY0X01PRFVMRV9ICisjZGVmaW5lIF9BU01fU1BBUkM2NF9NT0RVTEVfSAorc3RydWN0IG1vZF9hcmNoX3NwZWNpZmljIHsgfTsKKyNkZWZpbmUgRWxmX1NoZHIgRWxmNjRfU2hkcgorI2RlZmluZSBFbGZfU3ltIEVsZjY0X1N5bQorI2RlZmluZSBFbGZfRWhkciBFbGY2NF9FaGRyCisjZW5kaWYgLyogX0FTTV9TUEFSQzY0X01PRFVMRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L21vc3Rlay5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9tb3N0ZWsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2YyZjVmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9tb3N0ZWsuaApAQCAtMCwwICsxLDE0NCBAQAorLyogJElkOiBtb3N0ZWsuaCx2IDEuNCAyMDAxLzAxLzExIDE1OjA3OjA5IGRhdmVtIEV4cCAkCisgKiBtb3N0ZWsuaDogIERlc2NyaWJlcyB0aGUgdmFyaW91cyBNb3N0ZWsgdGltZSBvZiBkYXkgY2xvY2sgcmVnaXN0ZXJzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NSBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYgVGhvbWFzIEsuIER5YXMgKHRkeWFzQGVkZW4ucnV0Z2Vycy5lZHUpCisgKi8KKworI2lmbmRlZiBfU1BBUkM2NF9NT1NURUtfSAorI2RlZmluZSBfU1BBUkM2NF9NT1NURUtfSAorCisjaW5jbHVkZSA8YXNtL2lkcHJvbS5oPgorCisvKiAgICAgICBNNDhUMDIgUmVnaXN0ZXIgTWFwIChhZGFwdGVkIGZyb20gU3VuIE5WUkFNL0hvc3RpZCBGQVEpCisgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEKKyAqIEFkZHJlc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb24KKyAqICAgICAgICBCaXQgNyBCaXQgNiBCaXQgNSBCaXQgNEJpdCAzIEJpdCAyIEJpdCAxIEJpdCAwCisgKiAgIDdmZiAgLSAgICAgLSAgICAgLSAgICAgLSAgICAtICAgICAtICAgICAtICAgICAtICAgICAgIFllYXIgMDAtOTkKKyAqICAgN2ZlICAwICAgICAwICAgICAwICAgICAtICAgIC0gICAgIC0gICAgIC0gICAgIC0gICAgICBNb250aCAwMS0xMgorICogICA3ZmQgIDAgICAgIDAgICAgIC0gICAgIC0gICAgLSAgICAgLSAgICAgLSAgICAgLSAgICAgICBEYXRlIDAxLTMxCisgKiAgIDdmYyAgMCAgICAgRlQgICAgMCAgICAgMCAgICAwICAgICAtICAgICAtICAgICAtICAgICAgICBEYXkgMDEtMDcKKyAqICAgN2ZiICBLUyAgICAwICAgICAtICAgICAtICAgIC0gICAgIC0gICAgIC0gICAgIC0gICAgICBIb3VycyAwMC0yMworICogICA3ZmEgIDAgICAgIC0gICAgIC0gICAgIC0gICAgLSAgICAgLSAgICAgLSAgICAgLSAgICBNaW51dGVzIDAwLTU5CisgKiAgIDdmOSAgU1QgICAgLSAgICAgLSAgICAgLSAgICAtICAgICAtICAgICAtICAgICAtICAgIFNlY29uZHMgMDAtNTkKKyAqICAgN2Y4ICBXICAgICBSICAgICBTICAgICAtICAgIC0gICAgIC0gICAgIC0gICAgIC0gICAgQ29udHJvbAorICoKKyAqICAgKiBTVCBpcyBTVE9QIEJJVAorICogICAqIFcgaXMgV1JJVEUgQklUCisgKiAgICogUiBpcyBSRUFEIEJJVAorICogICAqIFMgaXMgU0lHTiBCSVQKKyAqICAgKiBGVCBpcyBGUkVRIFRFU1QgQklUCisgKiAgICogS1MgaXMgS0lDSyBTVEFSVCBCSVQKKyAqLworCisvKiBUaGUgTW9zdGVrIDQ4dDAyIHJlYWwgdGltZSBjbG9jayBhbmQgTlZSQU0gY2hpcC4gVGhlIHJlZ2lzdGVycworICogb3RoZXIgdGhhbiB0aGUgY29udHJvbCByZWdpc3RlciBhcmUgaW4gYmluYXJ5IGNvZGVkIGRlY2ltYWwuIFNvbWUKKyAqIGNvbnRyb2wgYml0cyBhbHNvIGxpdmUgb3V0c2lkZSB0aGUgY29udHJvbCByZWdpc3Rlci4KKyAqCisgKiBXZSBub3cgZGVhbCB3aXRoIHBoeXNpY2FsIGFkZHJlc3NlcyBmb3IgSS9PIHRvIHRoZSBjaGlwLiAtRGF2ZU0KKyAqLworc3RhdGljIF9faW5saW5lX18gdTggbW9zdGVrX3JlYWQodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXU4IHJldDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKCJsZHViYQlbJTFdICUyLCAlMCIKKwkJCSAgICAgOiAiPXIiIChyZXQpCisJCQkgICAgIDogInIiIChhZGRyKSwgImkiIChBU0lfUEhZU19CWVBBU1NfRUNfRSkpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgbW9zdGVrX3dyaXRlKHVuc2lnbmVkIGxvbmcgYWRkciwgdTggdmFsKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdGJhCSUwLCBbJTFdICUyIgorCQkJICAgICA6IC8qIG5vIG91dHB1dHMgKi8KKwkJCSAgICAgOiAiciIgKHZhbCksICJyIiAoYWRkciksICJpIiAoQVNJX1BIWVNfQllQQVNTX0VDX0UpKTsKK30KKworI2RlZmluZSBNT1NURUtfRUVQUk9NCQkweDAwMDBVTAorI2RlZmluZSBNT1NURUtfSURQUk9NCQkweDA3ZDhVTAorI2RlZmluZSBNT1NURUtfQ1JFRwkJMHgwN2Y4VUwKKyNkZWZpbmUgTU9TVEVLX1NFQwkJMHgwN2Y5VUwKKyNkZWZpbmUgTU9TVEVLX01JTgkJMHgwN2ZhVUwKKyNkZWZpbmUgTU9TVEVLX0hPVVIJCTB4MDdmYlVMCisjZGVmaW5lIE1PU1RFS19ET1cJCTB4MDdmY1VMCisjZGVmaW5lIE1PU1RFS19ET00JCTB4MDdmZFVMCisjZGVmaW5lIE1PU1RFS19NT05USAkJMHgwN2ZlVUwKKyNkZWZpbmUgTU9TVEVLX1lFQVIJCTB4MDdmZlVMCisKK2V4dGVybiBzcGlubG9ja190IG1vc3Rla19sb2NrOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbXN0azQ4dDAyX3JlZ3M7CisKKy8qIENvbnRyb2wgcmVnaXN0ZXIgdmFsdWVzLiAqLworI2RlZmluZQlNU1RLX0NSRUdfV1JJVEUJMHg4MAkvKiBNdXN0IHNldCB0aGlzIGJlZm9yZSBwbGFjaW5nIHZhbHVlcy4gKi8KKyNkZWZpbmUJTVNUS19DUkVHX1JFQUQJMHg0MAkvKiBTdG9wIHVwZGF0ZXMgdG8gYWxsb3cgYSBjbGVhbiByZWFkLiAqLworI2RlZmluZQlNU1RLX0NSRUdfU0lHTgkweDIwCS8qIFNsb3cvc3BlZWQgY2xvY2sgaW4gY2FsaWJyYXRpb24gbW9kZS4gKi8KKworLyogQ29udHJvbCBiaXRzIHRoYXQgbGl2ZSBpbiB0aGUgb3RoZXIgcmVnaXN0ZXJzLiAqLworI2RlZmluZQlNU1RLX1NUT1AJMHg4MAkvKiBTdG9wIHRoZSBjbG9jayBvc2NpbGxhdG9yLiAoc2VjKSAqLworI2RlZmluZQlNU1RLX0tJQ0tfU1RBUlQJMHg4MAkvKiBLaWNrIHN0YXJ0IHRoZSBjbG9jayBjaGlwLiAoaG91cikgKi8KKyNkZWZpbmUgTVNUS19GUkVRX1RFU1QJMHg0MAkvKiBGcmVxdWVuY3kgdGVzdCBtb2RlLiAoZGF5KSAqLworCisjZGVmaW5lIE1TVEtfWUVBUl9aRVJPICAgICAgIDE5NjggICAvKiBJZiB5ZWFyIHJlZyBoYXMgemVybywgaXQgaXMgMTk2OC4gKi8KKyNkZWZpbmUgTVNUS19DVlRfWUVBUih5cikgICgoeXIpICsgTVNUS19ZRUFSX1pFUk8pCisKKy8qIE1hc2tzIHRoYXQgZGVmaW5lIGhvdyBtdWNoIHNwYWNlIGVhY2ggdmFsdWUgdGFrZXMgdXAuICovCisjZGVmaW5lCU1TVEtfU0VDX01BU0sJMHg3ZgorI2RlZmluZQlNU1RLX01JTl9NQVNLCTB4N2YKKyNkZWZpbmUJTVNUS19IT1VSX01BU0sJMHgzZgorI2RlZmluZQlNU1RLX0RPV19NQVNLCTB4MDcKKyNkZWZpbmUJTVNUS19ET01fTUFTSwkweDNmCisjZGVmaW5lCU1TVEtfTU9OVEhfTUFTSwkweDFmCisjZGVmaW5lCU1TVEtfWUVBUl9NQVNLCTB4ZmYKKworLyogQmluYXJ5IGNvZGVkIGRlY2ltYWwgY29udmVyc2lvbiBtYWNyb3MuICovCisjZGVmaW5lIE1TVEtfUkVHVkFMX1RPX0RFQ0lNQUwoeCkgICgoKHgpICYgMHgwRikgKyAweDBBICogKCh4KSA+PiAweDA0KSkKKyNkZWZpbmUgTVNUS19ERUNJTUFMX1RPX1JFR1ZBTCh4KSAgKCgoKHgpIC8gMHgwQSkgPDwgMHgwNCkgKyAoKHgpICUgMHgwQSkpCisKKy8qIEdlbmVyaWMgcmVnaXN0ZXIgc2V0IGFuZCBnZXQgbWFjcm9zIGZvciBpbnRlcm5hbCB1c2UuICovCisjZGVmaW5lIE1TVEtfR0VUKHJlZ3MsbmFtZSkJXAorCShNU1RLX1JFR1ZBTF9UT19ERUNJTUFMKG1vc3Rla19yZWFkKHJlZ3MgKyBNT1NURUtfICMjIG5hbWUpICYgTVNUS18gIyMgbmFtZSAjIyBfTUFTSykpCisjZGVmaW5lIE1TVEtfU0VUKHJlZ3MsbmFtZSx2YWx1ZSkgXAorZG8gewl1OCBfX3ZhbCA9IG1vc3Rla19yZWFkKHJlZ3MgKyBNT1NURUtfICMjIG5hbWUpOyBcCisJX192YWwgJj0gfihNU1RLXyAjIyBuYW1lICMjIF9NQVNLKTsgXAorCV9fdmFsIHw9IChNU1RLX0RFQ0lNQUxfVE9fUkVHVkFMKHZhbHVlKSAmIFwKKwkJICAoTVNUS18gIyMgbmFtZSAjIyBfTUFTSykpOyBcCisJbW9zdGVrX3dyaXRlKHJlZ3MgKyBNT1NURUtfICMjIG5hbWUsIF9fdmFsKTsgXAorfSB3aGlsZSgwKQorCisvKiBNYWNyb3MgdG8gbWFrZSByZWdpc3RlciBhY2Nlc3MgZWFzaWVyIG9uIG91ciBmaW5nZXJzLiBUaGVzZSBnaXZlIHlvdQorICogdGhlIGRlY2ltYWwgdmFsdWUgb2YgdGhlIHJlZ2lzdGVyIHJlcXVlc3RlZCBpZiBhcHBsaWNhYmxlLiBZb3UgcGFzcworICogdGhlIGEgcG9pbnRlciB0byBhICdzdHJ1Y3QgbW9zdGVrNDh0MDInLgorICovCisjZGVmaW5lCU1TVEtfUkVHX0NSRUcocmVncykJKG1vc3Rla19yZWFkKChyZWdzKSArIE1PU1RFS19DUkVHKSkKKyNkZWZpbmUJTVNUS19SRUdfU0VDKHJlZ3MpCU1TVEtfR0VUKHJlZ3MsU0VDKQorI2RlZmluZQlNU1RLX1JFR19NSU4ocmVncykJTVNUS19HRVQocmVncyxNSU4pCisjZGVmaW5lCU1TVEtfUkVHX0hPVVIocmVncykJTVNUS19HRVQocmVncyxIT1VSKQorI2RlZmluZQlNU1RLX1JFR19ET1cocmVncykJTVNUS19HRVQocmVncyxET1cpCisjZGVmaW5lCU1TVEtfUkVHX0RPTShyZWdzKQlNU1RLX0dFVChyZWdzLERPTSkKKyNkZWZpbmUJTVNUS19SRUdfTU9OVEgocmVncykJTVNUS19HRVQocmVncyxNT05USCkKKyNkZWZpbmUJTVNUS19SRUdfWUVBUihyZWdzKQlNU1RLX0dFVChyZWdzLFlFQVIpCisKKyNkZWZpbmUJTVNUS19TRVRfUkVHX1NFQyhyZWdzLHZhbHVlKQlNU1RLX1NFVChyZWdzLFNFQyx2YWx1ZSkKKyNkZWZpbmUJTVNUS19TRVRfUkVHX01JTihyZWdzLHZhbHVlKQlNU1RLX1NFVChyZWdzLE1JTix2YWx1ZSkKKyNkZWZpbmUJTVNUS19TRVRfUkVHX0hPVVIocmVncyx2YWx1ZSkJTVNUS19TRVQocmVncyxIT1VSLHZhbHVlKQorI2RlZmluZQlNU1RLX1NFVF9SRUdfRE9XKHJlZ3MsdmFsdWUpCU1TVEtfU0VUKHJlZ3MsRE9XLHZhbHVlKQorI2RlZmluZQlNU1RLX1NFVF9SRUdfRE9NKHJlZ3MsdmFsdWUpCU1TVEtfU0VUKHJlZ3MsRE9NLHZhbHVlKQorI2RlZmluZQlNU1RLX1NFVF9SRUdfTU9OVEgocmVncyx2YWx1ZSkJTVNUS19TRVQocmVncyxNT05USCx2YWx1ZSkKKyNkZWZpbmUJTVNUS19TRVRfUkVHX1lFQVIocmVncyx2YWx1ZSkJTVNUS19TRVQocmVncyxZRUFSLHZhbHVlKQorCisKKy8qIFRoZSBNb3N0ZWsgNDh0MDggY2xvY2sgY2hpcC4gRm91bmQgb24gU3VuNG0ncyBJIHRoaW5rLiBJdCBoYXMgdGhlCisgKiBzYW1lIChiYXNpY2FsbHkpIGxheW91dCBvZiB0aGUgNDh0MDIgY2hpcCBleGNlcHQgZm9yIHRoZSBleHRyYQorICogTlZSQU0gb24gYm9hcmQgKDggS0IgYWdhaW5zdCB0aGUgNDh0MDIncyAyIEtCKS4KKyAqLworI2RlZmluZSBNT1NURUtfNDhUMDhfT0ZGU0VUCTB4MDAwMFVMCS8qIExvd2VyIE5WUkFNIHBvcnRpb25zICovCisjZGVmaW5lIE1PU1RFS180OFQwOF80OFQwMgkweDE4MDBVTAkvKiBPZmZzZXQgdG8gNDhUMDIgY2hpcCAqLworCisvKiBTVU41IHN5c3RlbXMgdXN1YWxseSBoYXZlIDQ4dDU5IG1vZGVsIGNsb2NrIGNoaXBzZXRzLiAgQnV0IHdlIGtlZXAgdGhlIG9sZGVyCisgKiBjbG9jayBjaGlwIGRlZmluaXRpb25zIGFyb3VuZCBqdXN0IGluIGNhc2UuCisgKi8KKyNkZWZpbmUgTU9TVEVLXzQ4VDU5X09GRlNFVAkweDAwMDBVTAkvKiBMb3dlciBOVlJBTSBwb3J0aW9ucyAqLworI2RlZmluZSBNT1NURUtfNDhUNTlfNDhUMDIJMHgxODAwVUwJLyogT2Zmc2V0IHRvIDQ4VDAyIGNoaXAgKi8KKworI2VuZGlmIC8qICEoX1NQQVJDNjRfTU9TVEVLX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L21zZ2J1Zi5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9tc2didWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWMxMDFiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9tc2didWYuaApAQCAtMCwwICsxLDI3IEBACisjaWZuZGVmIF9TUEFSQzY0X01TR0JVRl9ICisjZGVmaW5lIF9TUEFSQzY0X01TR0JVRl9ICisKKy8qIAorICogVGhlIG1zcWlkNjRfZHMgc3RydWN0dXJlIGZvciBzcGFyYzY0IGFyY2hpdGVjdHVyZS4KKyAqIE5vdGUgZXh0cmEgcGFkZGluZyBiZWNhdXNlIHRoaXMgc3RydWN0dXJlIGlzIHBhc3NlZCBiYWNrIGFuZCBmb3J0aAorICogYmV0d2VlbiBrZXJuZWwgYW5kIHVzZXIgc3BhY2UuCisgKgorICogUGFkIHNwYWNlIGlzIGxlZnQgZm9yOgorICogLSAyIG1pc2NlbGxhbmVvdXMgNjQtYml0IHZhbHVlcworICovCisKK3N0cnVjdCBtc3FpZDY0X2RzIHsKKwlzdHJ1Y3QgaXBjNjRfcGVybSBtc2dfcGVybTsKKwlfX2tlcm5lbF90aW1lX3QgbXNnX3N0aW1lOwkvKiBsYXN0IG1zZ3NuZCB0aW1lICovCisJX19rZXJuZWxfdGltZV90IG1zZ19ydGltZTsJLyogbGFzdCBtc2dyY3YgdGltZSAqLworCV9fa2VybmVsX3RpbWVfdCBtc2dfY3RpbWU7CS8qIGxhc3QgY2hhbmdlIHRpbWUgKi8KKwl1bnNpZ25lZCBsb25nICBtc2dfY2J5dGVzOwkvKiBjdXJyZW50IG51bWJlciBvZiBieXRlcyBvbiBxdWV1ZSAqLworCXVuc2lnbmVkIGxvbmcgIG1zZ19xbnVtOwkvKiBudW1iZXIgb2YgbWVzc2FnZXMgaW4gcXVldWUgKi8KKwl1bnNpZ25lZCBsb25nICBtc2dfcWJ5dGVzOwkvKiBtYXggbnVtYmVyIG9mIGJ5dGVzIG9uIHF1ZXVlICovCisJX19rZXJuZWxfcGlkX3QgbXNnX2xzcGlkOwkvKiBwaWQgb2YgbGFzdCBtc2dzbmQgKi8KKwlfX2tlcm5lbF9waWRfdCBtc2dfbHJwaWQ7CS8qIGxhc3QgcmVjZWl2ZSBwaWQgKi8KKwl1bnNpZ25lZCBsb25nICBfX3VudXNlZDE7CisJdW5zaWduZWQgbG9uZyAgX191bnVzZWQyOworfTsKKworI2VuZGlmIC8qIF9TUEFSQzY0X01TR0JVRl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L25hbWVpLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L25hbWVpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NkYTE5ZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvbmFtZWkuaApAQCAtMCwwICsxLDI2IEBACisvKiAkSWQ6IG5hbWVpLmgsdiAxLjE3IDIwMDAvMDQvMTMgMDA6NTU6NTQgZGF2ZW0gRXhwICQKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLXNwYXJjNjQvbmFtZWkuaAorICoKKyAqIFJvdXRpbmVzIHRvIGhhbmRsZSBmYW1vdXMgL3Vzci9nbmVtdWwvcyouCisgKiBJbmNsdWRlZCBmcm9tIGxpbnV4L2ZzL25hbWVpLmMKKyAqLworCisjaWZuZGVmIF9fU1BBUkM2NF9OQU1FSV9ICisjZGVmaW5lIF9fU1BBUkM2NF9OQU1FSV9ICisKKyNkZWZpbmUgU1BBUkNfQlNEX0VNVUwgIi91c3IvZ25lbXVsL3N1bm9zLyIKKyNkZWZpbmUgU1BBUkNfU09MX0VNVUwgIi91c3IvZ25lbXVsL3NvbGFyaXMvIgorCitzdGF0aWMgaW5saW5lIGNoYXIgKiBfX2VtdWxfcHJlZml4KHZvaWQpCit7CisJc3dpdGNoIChjdXJyZW50LT5wZXJzb25hbGl0eSkgeworCWNhc2UgUEVSX1NVTk9TOgorCQlyZXR1cm4gU1BBUkNfQlNEX0VNVUw7CisJY2FzZSBQRVJfU1ZSNDoKKwkJcmV0dXJuIFNQQVJDX1NPTF9FTVVMOworCWRlZmF1bHQ6CisJCXJldHVybiBOVUxMOworCX0KK30KKworI2VuZGlmIC8qIF9fU1BBUkM2NF9OQU1FSV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L25zODczMDMuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvbnM4NzMwMy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkNThmZGYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L25zODczMDMuaApAQCAtMCwwICsxLDExOSBAQAorLyogJElkOiBuczg3MzAzLmgsdiAxLjMgMjAwMC8wMS8wOSAxNToxNjozNCBlY2QgRXhwICQKKyAqIG5zODczMDMuaDogQ29uZmlndXJhdGlvbiBSZWdpc3RlciBEZXNjcmlwdGlvbiBmb3IgdGhlCisgKiAgICAgICAgICAgIE5hdGlvbmFsIFNlbWljb25kdWN0b3IgUEM4NzMwMyAoU3VwZXJJTykuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk3ICBFZGRpZSBDLiBEb3N0ICAoZWNkQHNreW5ldC5iZSkKKyAqLworCisjaWZuZGVmIF9TUEFSQ19OUzg3MzAzX0gKKyNkZWZpbmUgX1NQQVJDX05TODczMDNfSCAxCisKKy8qCisgKiBDb250cm9sIFJlZ2lzdGVyIEluZGV4IFZhbHVlcworICovCisjZGVmaW5lIEZFUgkweDAwCisjZGVmaW5lIEZBUgkweDAxCisjZGVmaW5lIFBUUgkweDAyCisjZGVmaW5lIEZDUgkweDAzCisjZGVmaW5lIFBDUgkweDA0CisjZGVmaW5lIEtSUgkweDA1CisjZGVmaW5lIFBNQwkweDA2CisjZGVmaW5lIFRVUAkweDA3CisjZGVmaW5lIFNJRAkweDA4CisjZGVmaW5lIEFTQwkweDA5CisjZGVmaW5lIENTMENGMAkweDBhCisjZGVmaW5lIENTMENGMQkweDBiCisjZGVmaW5lIENTMUNGMAkweDBjCisjZGVmaW5lIENTMUNGMQkweDBkCisKKy8qIEZ1bmN0aW9uIEVuYWJsZSBSZWdpc3RlciAoRkVSKSBiaXRzICovCisjZGVmaW5lIEZFUl9FRE0JCTB4MTAJLyogRW5jb2RlZCBEcml2ZSBhbmQgTW90b3IgcGluIGluZm9ybWF0aW9uICAgKi8KKworLyogRnVuY3Rpb24gQWRkcmVzcyBSZWdpc3RlciAoRkFSKSBiaXRzICovCisjZGVmaW5lIEZBUl9MUFRfTUFTSwkweDAzCisjZGVmaW5lIEZBUl9MUFRCCTB4MDAKKyNkZWZpbmUgRkFSX0xQVEEJMHgwMQorI2RlZmluZSBGQVJfTFBUQwkweDAyCisKKy8qIFBvd2VyIGFuZCBUZXN0IFJlZ2lzdGVyIChQVFIpIGJpdHMgKi8KKyNkZWZpbmUgUFRSX0xQVEJfSVJRNwkweDA4CisjZGVmaW5lIFBUUl9MRVZFTF9JUlEJMHg4MAkvKiBXaGVuIG5vdCBFQ1AvRVBQOiBVc2UgbGV2ZWwgSVJRICAgICAgICAgICAqLworI2RlZmluZSBQVFJfTFBUX1JFR19ESVIJMHg4MAkvKiBXaGVuIEVDUC9FUFA6IExQVCBDVFIgY29udHJvbGxzIGRpcmVjdGlvbiAqLworCQkJCS8qICAgICAgICAgICAgICAgb2YgdGhlIHBhcmFsbGVsIHBvcnQJICAgICAqLworCisvKiBGdW5jdGlvbiBDb250cm9sIFJlZ2lzdGVyIChGQ1IpIGJpdHMgKi8KKyNkZWZpbmUgRkNSX0xERQkJMHgxMAkvKiBMb2dpY2FsIERyaXZlIEV4Y2hhbmdlICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGQ1JfWldTX0VOQQkweDIwCS8qIEVuYWJsZSBzaG9ydCBob3N0IHJlYWQvd3JpdGUgaW4gRUNQL0VQUCAgICovCisKKy8qIFByaW50ZXIgQ29udHJvbCBSZWdpc3RlciAoUENSKSBiaXRzICovCisjZGVmaW5lIFBDUl9FUFBfRU5BQkxFCTB4MDEKKyNkZWZpbmUgUENSX0VQUF9JRUVFCTB4MDIJLyogRW5hYmxlIEVQUCBWZXJzaW9uIDEuOSAoSUVFRSAxMjg0KSAgICAgICAgKi8KKyNkZWZpbmUgUENSX0VDUF9FTkFCTEUJMHgwNAorI2RlZmluZSBQQ1JfRUNQX0NMS19FTkEJMHgwOAkvKiBJZiAwIEVDUCBDbG9jayBpcyBzdG9wcGVkIG9uIFBvd2VyIGRvd24gICAqLworI2RlZmluZSBQQ1JfSVJRX1BPTEFSCTB4MjAJLyogSWYgMCBJUlEgaXMgbGV2ZWwgaGlnaCBvciBuZWdhdGl2ZSBwdWxzZSwgKi8KKwkJCQkvKiBpZiAxIHBvbGFyaXR5IGlzIGludmVydGVkICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQQ1JfSVJRX09EUkFJTgkweDQwCS8qIElmIDEsIElSUSBpcyBvcGVuIGRyYWluICAgICAgICAgICAgICAgICAgICovCisKKy8qIFRhcGUgVUFSVHMgYW5kIFBhcmFsbGVsIFBvcnQgQ29uZmlnIFJlZ2lzdGVyIChUVVApIGJpdHMgKi8KKyNkZWZpbmUgVFVQX0VQUF9USU1PCTB4MDIJLyogRW5hYmxlIEVQUCB0aW1lb3V0IElSUSAgICAgICAgICAgICAgICAgICAgKi8KKworLyogQWR2YW5jZWQgU3VwZXJJTyBDb25maWcgUmVnaXN0ZXIgKEFTQykgYml0cyAqLworI2RlZmluZSBBU0NfTFBUX0lSUTcJMHgwMQkvKiBBbHdheXMgdXNlIElSUTcgZm9yIExQVCAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFTQ19EUlYyX1NFTAkweDAyCS8qIExvZ2ljYWwgRHJpdmUgRXhjaGFuZ2UgY29udHJvbGxlZCBieSBURFIgICovCisKKyNkZWZpbmUgRkVSX1JFU0VSVkVECTB4MDAKKyNkZWZpbmUgRkFSX1JFU0VSVkVECTB4MDAKKyNkZWZpbmUgUFRSX1JFU0VSVkVECTB4NzMKKyNkZWZpbmUgRkNSX1JFU0VSVkVECTB4YzQKKyNkZWZpbmUgUENSX1JFU0VSVkVECTB4MTAKKyNkZWZpbmUgS1JSX1JFU0VSVkVECTB4MDAKKyNkZWZpbmUgUE1DX1JFU0VSVkVECTB4OTgKKyNkZWZpbmUgVFVQX1JFU0VSVkVECTB4ZmIKKyNkZWZpbmUgU0lQX1JFU0VSVkVECTB4MDAKKyNkZWZpbmUgQVNDX1JFU0VSVkVECTB4MTgKKyNkZWZpbmUgQ1MwQ0YwX1JFU0VSVkVECTB4MDAKKyNkZWZpbmUgQ1MwQ0YxX1JFU0VSVkVECTB4MDgKKyNkZWZpbmUgQ1MxQ0YwX1JFU0VSVkVECTB4MDAKKyNkZWZpbmUgQ1MxQ0YxX1JFU0VSVkVECTB4MDgKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisKKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKK2V4dGVybiBzcGlubG9ja190IG5zODczMDNfbG9jazsKKworc3RhdGljIF9faW5saW5lX18gaW50IG5zODczMDNfbW9kaWZ5KHVuc2lnbmVkIGxvbmcgcG9ydCwgdW5zaWduZWQgaW50IGluZGV4LAorCQkJCSAgICAgdW5zaWduZWQgY2hhciBjbHIsIHVuc2lnbmVkIGNoYXIgc2V0KQoreworCXN0YXRpYyB1bnNpZ25lZCBjaGFyIHJlc2VydmVkW10gPSB7CisJCUZFUl9SRVNFUlZFRCwgRkFSX1JFU0VSVkVELCBQVFJfUkVTRVJWRUQsIEZDUl9SRVNFUlZFRCwKKwkJUENSX1JFU0VSVkVELCBLUlJfUkVTRVJWRUQsIFBNQ19SRVNFUlZFRCwgVFVQX1JFU0VSVkVELAorCQlTSVBfUkVTRVJWRUQsIEFTQ19SRVNFUlZFRCwgQ1MwQ0YwX1JFU0VSVkVELCBDUzBDRjFfUkVTRVJWRUQsCisJCUNTMUNGMF9SRVNFUlZFRCwgQ1MxQ0YxX1JFU0VSVkVECisJfTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGNoYXIgdmFsdWU7CisKKwlpZiAoaW5kZXggPiAweDBkKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZuczg3MzAzX2xvY2ssIGZsYWdzKTsKKworCW91dGIoaW5kZXgsIHBvcnQpOworCXZhbHVlID0gaW5iKHBvcnQgKyAxKTsKKwl2YWx1ZSAmPSB+KHJlc2VydmVkW2luZGV4XSB8IGNscik7CisJdmFsdWUgfD0gc2V0OworCW91dGIodmFsdWUsIHBvcnQgKyAxKTsKKwlvdXRiKHZhbHVlLCBwb3J0ICsgMSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuczg3MzAzX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogIShfU1BBUkNfTlM4NzMwM19IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9vcGVucHJvbS5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9vcGVucHJvbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhMzM2OTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L29wZW5wcm9tLmgKQEAgLTAsMCArMSwyODEgQEAKKy8qICRJZDogb3BlbnByb20uaCx2IDEuOSAyMDAxLzAzLzE2IDEwOjIyOjAyIGRhdmVtIEV4cCAkICovCisjaWZuZGVmIF9fU1BBUkM2NF9PUEVOUFJPTV9ICisjZGVmaW5lIF9fU1BBUkM2NF9PUEVOUFJPTV9ICisKKy8qIG9wZW5wcm9tLmg6ICBQcm9tIHN0cnVjdHVyZXMgYW5kIGRlZmluZXMgZm9yIGFjY2VzcyB0byB0aGUgT1BFTkJPT1QKKyAqICAgICAgICAgICAgICBwcm9tIHJvdXRpbmVzIGFuZCBkYXRhIGFyZWFzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NiBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCisgKi8KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKy8qIFYwIHByb20gZGV2aWNlIG9wZXJhdGlvbnMuICovCitzdHJ1Y3QgbGludXhfZGV2X3YwX2Z1bmNzIHsKKwlpbnQgKCp2MF9kZXZvcGVuKShjaGFyICpkZXZpY2Vfc3RyKTsKKwlpbnQgKCp2MF9kZXZjbG9zZSkoaW50IGRldl9kZXNjKTsKKwlpbnQgKCp2MF9yZGJsa2RldikoaW50IGRldl9kZXNjLCBpbnQgbnVtX2Jsa3MsIGludCBibGtfc3QsIGNoYXIgKmJ1Zik7CisJaW50ICgqdjBfd3JibGtkZXYpKGludCBkZXZfZGVzYywgaW50IG51bV9ibGtzLCBpbnQgYmxrX3N0LCBjaGFyICpidWYpOworCWludCAoKnYwX3dybmV0ZGV2KShpbnQgZGV2X2Rlc2MsIGludCBudW1fYnl0ZXMsIGNoYXIgKmJ1Zik7CisJaW50ICgqdjBfcmRuZXRkZXYpKGludCBkZXZfZGVzYywgaW50IG51bV9ieXRlcywgY2hhciAqYnVmKTsKKwlpbnQgKCp2MF9yZGNoYXJkZXYpKGludCBkZXZfZGVzYywgaW50IG51bV9ieXRlcywgaW50IGR1bW15LCBjaGFyICpidWYpOworCWludCAoKnYwX3dyY2hhcmRldikoaW50IGRldl9kZXNjLCBpbnQgbnVtX2J5dGVzLCBpbnQgZHVtbXksIGNoYXIgKmJ1Zik7CisJaW50ICgqdjBfc2Vla2RldikoaW50IGRldl9kZXNjLCBsb25nIGxvZ2ljYWxfb2Zmc3QsIGludCBmcm9tKTsKK307CisKKy8qIFYyIGFuZCBsYXRlciBwcm9tIGRldmljZSBvcGVyYXRpb25zLiAqLworc3RydWN0IGxpbnV4X2Rldl92Ml9mdW5jcyB7CisJaW50ICgqdjJfaW5zdDJwa2cpKGludCBkKTsJLyogQ29udmVydCBpaGFuZGxlIHRvIHBoYW5kbGUgKi8KKwljaGFyICogKCp2Ml9kdW1iX21lbV9hbGxvYykoY2hhciAqdmEsIHVuc2lnbmVkIHN6KTsKKwl2b2lkICgqdjJfZHVtYl9tZW1fZnJlZSkoY2hhciAqdmEsIHVuc2lnbmVkIHN6KTsKKworCS8qIFRvIG1hcCBkZXZpY2VzIGludG8gdmlydHVhbCBJL08gc3BhY2UuICovCisJY2hhciAqICgqdjJfZHVtYl9tbWFwKShjaGFyICp2aXJ0YSwgaW50IHdoaWNoX2lvLCB1bnNpZ25lZCBwYWRkciwgdW5zaWduZWQgc3opOworCXZvaWQgKCp2Ml9kdW1iX211bm1hcCkoY2hhciAqdmlydGEsIHVuc2lnbmVkIHNpemUpOworCisJaW50ICgqdjJfZGV2X29wZW4pKGNoYXIgKmRldnBhdGgpOworCXZvaWQgKCp2Ml9kZXZfY2xvc2UpKGludCBkKTsKKwlpbnQgKCp2Ml9kZXZfcmVhZCkoaW50IGQsIGNoYXIgKmJ1ZiwgaW50IG5ieXRlcyk7CisJaW50ICgqdjJfZGV2X3dyaXRlKShpbnQgZCwgY2hhciAqYnVmLCBpbnQgbmJ5dGVzKTsKKwlpbnQgKCp2Ml9kZXZfc2VlaykoaW50IGQsIGludCBoaSwgaW50IGxvKTsKKworCS8qIE5ldmVyIGlzc3VlZCAobXVsdGlzdGFnZSBsb2FkIHN1cHBvcnQpICovCisJdm9pZCAoKnYyX3doZWVlMikodm9pZCk7CisJdm9pZCAoKnYyX3doZWVlMykodm9pZCk7Cit9OworCitzdHJ1Y3QgbGludXhfbWxpc3RfdjAgeworCXN0cnVjdCBsaW51eF9tbGlzdF92MCAqdGhlcmVzX21vcmU7CisJdW5zaWduZWQgc3RhcnRfYWRyOworCXVuc2lnbmVkIG51bV9ieXRlczsKK307CisKK3N0cnVjdCBsaW51eF9tZW1fdjAgeworCXN0cnVjdCBsaW51eF9tbGlzdF92MCAqKnYwX3RvdHBoeXM7CisJc3RydWN0IGxpbnV4X21saXN0X3YwICoqdjBfcHJvbW1hcDsKKwlzdHJ1Y3QgbGludXhfbWxpc3RfdjAgKip2MF9hdmFpbGFibGU7IC8qIFdoYXQgd2UgY2FuIHVzZSAqLworfTsKKworLyogQXJndW1lbnRzIHNlbnQgdG8gdGhlIGtlcm5lbCBmcm9tIHRoZSBib290IHByb21wdC4gKi8KK3N0cnVjdCBsaW51eF9hcmd1bWVudHNfdjAgeworCWNoYXIgKmFyZ3ZbOF07CisJY2hhciBhcmdzWzEwMF07CisJY2hhciBib290X2RldlsyXTsKKwlpbnQgYm9vdF9kZXZfY3RybDsKKwlpbnQgYm9vdF9kZXZfdW5pdDsKKwlpbnQgZGV2X3BhcnRpdGlvbjsKKwljaGFyICprZXJuZWxfZmlsZV9uYW1lOworCXZvaWQgKmFpZWVlMTsgICAgICAgICAgIC8qIFhYWCAqLworfTsKKworLyogVjIgYW5kIHVwIGJvb3QgdGhpbmdzLiAqLworc3RydWN0IGxpbnV4X2Jvb3RhcmdzX3YyIHsKKwljaGFyICoqYm9vdHBhdGg7CisJY2hhciAqKmJvb3RhcmdzOworCWludCAqZmRfc3RkaW47CisJaW50ICpmZF9zdGRvdXQ7Cit9OworCisvKiBUaGUgdG9wIGxldmVsIFBST00gdmVjdG9yLiAqLworc3RydWN0IGxpbnV4X3JvbXZlYyB7CisJLyogVmVyc2lvbiBudW1iZXJzLiAqLworCXVuc2lnbmVkIGludCBwdl9tYWdpY19jb29raWU7CisJdW5zaWduZWQgaW50IHB2X3JvbXZlcnM7CisJdW5zaWduZWQgaW50IHB2X3BsdWdpbl9yZXZpc2lvbjsKKwl1bnNpZ25lZCBpbnQgcHZfcHJpbnRyZXY7CisKKwkvKiBWZXJzaW9uIDAgbWVtb3J5IGRlc2NyaXB0b3JzLiAqLworCXN0cnVjdCBsaW51eF9tZW1fdjAgcHZfdjBtZW07CisKKwkvKiBOb2RlIG9wZXJhdGlvbnMuICovCisJc3RydWN0IGxpbnV4X25vZGVvcHMgKnB2X25vZGVvcHM7CisKKwljaGFyICoqcHZfYm9vdHN0cjsKKwlzdHJ1Y3QgbGludXhfZGV2X3YwX2Z1bmNzIHB2X3YwZGV2b3BzOworCisJY2hhciAqcHZfc3RkaW47CisJY2hhciAqcHZfc3Rkb3V0OworI2RlZmluZQlQUk9NREVWX0tCRAkwCQkvKiBpbnB1dCBmcm9tIGtleWJvYXJkICovCisjZGVmaW5lCVBST01ERVZfU0NSRUVOCTAJCS8qIG91dHB1dCB0byBzY3JlZW4gKi8KKyNkZWZpbmUJUFJPTURFVl9UVFlBCTEJCS8qIGluL291dCB0byB0dHlhICovCisjZGVmaW5lCVBST01ERVZfVFRZQgkyCQkvKiBpbi9vdXQgdG8gdHR5YiAqLworCisJLyogQmxvY2tpbmcgZ2V0Y2hhci9wdXRjaGFyLiAgTk9UIFJFRU5UUkFOVCEgKGdycikgKi8KKwlpbnQgKCpwdl9nZXRjaGFyKSh2b2lkKTsKKwl2b2lkICgqcHZfcHV0Y2hhcikoaW50IGNoKTsKKworCS8qIE5vbi1ibG9ja2luZyB2YXJpYW50cy4gKi8KKwlpbnQgKCpwdl9uYmdldGNoYXIpKHZvaWQpOworCWludCAoKnB2X25icHV0Y2hhcikoaW50IGNoKTsKKworCXZvaWQgKCpwdl9wdXRzdHIpKGNoYXIgKnN0ciwgaW50IGxlbik7CisKKwkvKiBNaXNjZWxsYW55LiAqLworCXZvaWQgKCpwdl9yZWJvb3QpKGNoYXIgKmJvb3RzdHIpOworCXZvaWQgKCpwdl9wcmludGYpKF9fY29uc3RfXyBjaGFyICpmbXQsIC4uLik7CisJdm9pZCAoKnB2X2Fib3J0KSh2b2lkKTsKKwlfX3ZvbGF0aWxlX18gaW50ICpwdl90aWNrczsKKwl2b2lkICgqcHZfaGFsdCkodm9pZCk7CisJdm9pZCAoKipwdl9zeW5jaG9vaykodm9pZCk7CisKKwkvKiBFdmFsdWF0ZSBhIGZvcnRoIHN0cmluZywgbm90IGRpZmZlcmVudCBwcm90byBmb3IgVjAgYW5kIFYyLT51cC4gKi8KKwl1bmlvbiB7CisJCXZvaWQgKCp2MF9ldmFsKShpbnQgbGVuLCBjaGFyICpzdHIpOworCQl2b2lkICgqdjJfZXZhbCkoY2hhciAqc3RyKTsKKwl9IHB2X2ZvcnRoZXZhbDsKKworCXN0cnVjdCBsaW51eF9hcmd1bWVudHNfdjAgKipwdl92MGJvb3RhcmdzOworCisJLyogR2V0IGV0aGVyIGFkZHJlc3MuICovCisJdW5zaWduZWQgaW50ICgqcHZfZW5hZGRyKShpbnQgZCwgY2hhciAqZW5hZGRyKTsKKworCXN0cnVjdCBsaW51eF9ib290YXJnc192MiBwdl92MmJvb3RhcmdzOworCXN0cnVjdCBsaW51eF9kZXZfdjJfZnVuY3MgcHZfdjJkZXZvcHM7CisKKwlpbnQgZmlsbGVyWzE1XTsKKworCS8qIFRoaXMgb25lIGlzIHN1bjRjL3N1bjQgb25seS4gKi8KKwl2b2lkICgqcHZfc2V0Y3R4dCkoaW50IGN0eHQsIGNoYXIgKnZhLCBpbnQgcG1lZyk7CisKKwkvKiBQcm9tIHZlcnNpb24gMyBNdWx0aXByb2Nlc3NvciByb3V0aW5lcy4gVGhpcyBzdHVmZiBpcyBjcmF6eS4KKwkgKiBObyBqb2tlLiBDYWxsaW5nIHRoZXNlIHdoZW4gdGhlcmUgaXMgb25seSBvbmUgY3B1IHByb2JhYmx5CisJICogY3Jhc2hlcyB0aGUgbWFjaGluZSwgaGF2ZSB0byB0ZXN0IHRoaXMuIDotKQorCSAqLworCisJLyogdjNfY3B1c3RhcnQoKSB3aWxsIHN0YXJ0IHRoZSBjcHUgJ3doaWNoY3B1JyBpbiBtbXUtY29udGV4dAorCSAqICd0aGlzY29udGV4dCcgZXhlY3V0aW5nIGF0IGFkZHJlc3MgJ3Byb2dfY291bnRlcicKKwkgKi8KKwlpbnQgKCp2M19jcHVzdGFydCkodW5zaWduZWQgaW50IHdoaWNoY3B1LCBpbnQgY3R4dGJsX3B0ciwKKwkJCSAgIGludCB0aGlzY29udGV4dCwgY2hhciAqcHJvZ19jb3VudGVyKTsKKworCS8qIHYzX2NwdXN0b3AoKSB3aWxsIGNhdXNlIGNwdSAnd2hpY2hjcHUnIHRvIHN0b3AgZXhlY3V0aW5nCisJICogdW50aWwgYSByZXN1bWUgY3B1IGNhbGwgaXMgbWFkZS4KKwkgKi8KKwlpbnQgKCp2M19jcHVzdG9wKSh1bnNpZ25lZCBpbnQgd2hpY2hjcHUpOworCisJLyogdjNfY3B1aWRsZSgpIHdpbGwgaWRsZSBjcHUgJ3doaWNoY3B1JyB1bnRpbCBhIHN0b3Agb3IKKwkgKiByZXN1bWUgY3B1IGNhbGwgaXMgbWFkZS4KKwkgKi8KKwlpbnQgKCp2M19jcHVpZGxlKSh1bnNpZ25lZCBpbnQgd2hpY2hjcHUpOworCisJLyogdjNfY3B1cmVzdW1lKCkgd2lsbCByZXN1bWUgcHJvY2Vzc29yICd3aGljaGNwdScgZXhlY3V0aW5nCisJICogc3RhcnRpbmcgd2l0aCB3aGF0ZXZlciAncGMnIGFuZCAnbnBjJyB3ZXJlIGxlZnQgYXQgdGhlCisJICogbGFzdCAnaWRsZScgb3IgJ3N0b3AnIGNhbGwuCisJICovCisJaW50ICgqdjNfY3B1cmVzdW1lKSh1bnNpZ25lZCBpbnQgd2hpY2hjcHUpOworfTsKKworLyogUm91dGluZXMgZm9yIHRyYXZlcnNpbmcgdGhlIHByb20gZGV2aWNlIHRyZWUuICovCitzdHJ1Y3QgbGludXhfbm9kZW9wcyB7CisJaW50ICgqbm9fbmV4dG5vZGUpKGludCBub2RlKTsKKwlpbnQgKCpub19jaGlsZCkoaW50IG5vZGUpOworCWludCAoKm5vX3Byb3BsZW4pKGludCBub2RlLCBjaGFyICpuYW1lKTsKKwlpbnQgKCpub19nZXRwcm9wKShpbnQgbm9kZSwgY2hhciAqbmFtZSwgY2hhciAqdmFsKTsKKwlpbnQgKCpub19zZXRwcm9wKShpbnQgbm9kZSwgY2hhciAqbmFtZSwgY2hhciAqdmFsLCBpbnQgbGVuKTsKKwljaGFyICogKCpub19uZXh0cHJvcCkoaW50IG5vZGUsIGNoYXIgKm5hbWUpOworfTsKKworLyogTW9yZSBmdW4gUFJPTSBzdHJ1Y3R1cmVzIGZvciBkZXZpY2UgcHJvYmluZy4gKi8KKyNkZWZpbmUgUFJPTVJFR19NQVggICAgIDE2CisjZGVmaW5lIFBST01WQUREUl9NQVggICAxNgorI2RlZmluZSBQUk9NSU5UUl9NQVggICAgMTUKKworc3RydWN0IGxpbnV4X3Byb21fcmVnaXN0ZXJzIHsKKwl1bnNpZ25lZCB3aGljaF9pbzsJLyogaGkgcGFydCBvZiBwaHlzaWNhbCBhZGRyZXNzCQkJKi8KKwl1bnNpZ25lZCBwaHlzX2FkZHI7CS8qIFRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoaXMgcmVnaXN0ZXIJKi8KKwlpbnQgcmVnX3NpemU7CQkvKiBIb3cgbWFueSBieXRlcyBkb2VzIHRoaXMgcmVnaXN0ZXIgdGFrZSB1cD8JKi8KK307CisKK3N0cnVjdCBsaW51eF9wcm9tNjRfcmVnaXN0ZXJzIHsKKwlsb25nIHBoeXNfYWRkcjsKKwlsb25nIHJlZ19zaXplOworfTsKKworc3RydWN0IGxpbnV4X3Byb21faXJxcyB7CisJaW50IHByaTsgICAgLyogSVJRIHByaW9yaXR5ICovCisJaW50IHZlY3RvcjsgLyogVGhpcyBpcyBmb29iYXIsIHdoYXQgZG9lcyBpdCBkbz8gKi8KK307CisKKy8qIEVsZW1lbnQgb2YgdGhlICJyYW5nZXMiIHZlY3RvciAqLworc3RydWN0IGxpbnV4X3Byb21fcmFuZ2VzIHsKKwl1bnNpZ25lZCBpbnQgb3RfY2hpbGRfc3BhY2U7CisJdW5zaWduZWQgaW50IG90X2NoaWxkX2Jhc2U7CQkvKiBCdXMgZmVlbHMgdGhpcyAqLworCXVuc2lnbmVkIGludCBvdF9wYXJlbnRfc3BhY2U7CisJdW5zaWduZWQgaW50IG90X3BhcmVudF9iYXNlOwkJLyogQ1BVIGxvb2tzIGZyb20gaGVyZSAqLworCXVuc2lnbmVkIGludCBvcl9zaXplOworfTsKKworc3RydWN0IGxpbnV4X3Byb202NF9yYW5nZXMgeworCXVuc2lnbmVkIGxvbmcgb3RfY2hpbGRfYmFzZTsJCS8qIEJ1cyBmZWVscyB0aGlzICovCisJdW5zaWduZWQgbG9uZyBvdF9wYXJlbnRfYmFzZTsJCS8qIENQVSBsb29rcyBmcm9tIGhlcmUgKi8KKwl1bnNpZ25lZCBsb25nIG9yX3NpemU7Cit9OworCisvKiBSYW5nZXMgYW5kIHJlZyBwcm9wZXJ0aWVzIGFyZSBhIGJpdCBkaWZmZXJlbnQgZm9yIFBDSS4gKi8KK3N0cnVjdCBsaW51eF9wcm9tX3BjaV9yZWdpc3RlcnMgeworCXVuc2lnbmVkIGludCBwaHlzX2hpOworCXVuc2lnbmVkIGludCBwaHlzX21pZDsKKwl1bnNpZ25lZCBpbnQgcGh5c19sbzsKKworCXVuc2lnbmVkIGludCBzaXplX2hpOworCXVuc2lnbmVkIGludCBzaXplX2xvOworfTsKKworc3RydWN0IGxpbnV4X3Byb21fcGNpX3JhbmdlcyB7CisJdW5zaWduZWQgaW50IGNoaWxkX3BoeXNfaGk7CS8qIE9ubHkgY2VydGFpbiBiaXRzIGFyZSBlbmNvZGVkIGhlcmUuICovCisJdW5zaWduZWQgaW50IGNoaWxkX3BoeXNfbWlkOworCXVuc2lnbmVkIGludCBjaGlsZF9waHlzX2xvOworCisJdW5zaWduZWQgaW50IHBhcmVudF9waHlzX2hpOworCXVuc2lnbmVkIGludCBwYXJlbnRfcGh5c19sbzsKKworCXVuc2lnbmVkIGludCBzaXplX2hpOworCXVuc2lnbmVkIGludCBzaXplX2xvOworfTsKKworc3RydWN0IGxpbnV4X3Byb21fcGNpX2ludG1hcCB7CisJdW5zaWduZWQgaW50IHBoeXNfaGk7CisJdW5zaWduZWQgaW50IHBoeXNfbWlkOworCXVuc2lnbmVkIGludCBwaHlzX2xvOworCisJdW5zaWduZWQgaW50IGludGVycnVwdDsKKworCWludCAgICAgICAgICBjbm9kZTsKKwl1bnNpZ25lZCBpbnQgY2ludGVycnVwdDsKK307CisKK3N0cnVjdCBsaW51eF9wcm9tX3BjaV9pbnRtYXNrIHsKKwl1bnNpZ25lZCBpbnQgcGh5c19oaTsKKwl1bnNpZ25lZCBpbnQgcGh5c19taWQ7CisJdW5zaWduZWQgaW50IHBoeXNfbG87CisJdW5zaWduZWQgaW50IGludGVycnVwdDsKK307CisKK3N0cnVjdCBsaW51eF9wcm9tX2VidXNfcmFuZ2VzIHsKKwl1bnNpZ25lZCBpbnQgY2hpbGRfcGh5c19oaTsKKwl1bnNpZ25lZCBpbnQgY2hpbGRfcGh5c19sbzsKKworCXVuc2lnbmVkIGludCBwYXJlbnRfcGh5c19oaTsKKwl1bnNpZ25lZCBpbnQgcGFyZW50X3BoeXNfbWlkOworCXVuc2lnbmVkIGludCBwYXJlbnRfcGh5c19sbzsKKworCXVuc2lnbmVkIGludCBzaXplOworfTsKKworc3RydWN0IGxpbnV4X3Byb21fZWJ1c19pbnRtYXAgeworCXVuc2lnbmVkIGludCBwaHlzX2hpOworCXVuc2lnbmVkIGludCBwaHlzX2xvOworCisJdW5zaWduZWQgaW50IGludGVycnVwdDsKKworCWludCAgICAgICAgICBjbm9kZTsKKwl1bnNpZ25lZCBpbnQgY2ludGVycnVwdDsKK307CisKK3N0cnVjdCBsaW51eF9wcm9tX2VidXNfaW50bWFzayB7CisJdW5zaWduZWQgaW50IHBoeXNfaGk7CisJdW5zaWduZWQgaW50IHBoeXNfbG87CisJdW5zaWduZWQgaW50IGludGVycnVwdDsKK307CisjZW5kaWYgLyogIShfX0FTU0VNQkxZX18pICovCisKKyNlbmRpZiAvKiAhKF9fU1BBUkM2NF9PUEVOUFJPTV9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9vcGVucHJvbWlvLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L29wZW5wcm9taW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDdjZTIzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9vcGVucHJvbWlvLmgKQEAgLTAsMCArMSw2OSBAQAorI2lmbmRlZglfU1BBUkM2NF9PUEVOUFJPTUlPX0gKKyNkZWZpbmUJX1NQQVJDNjRfT1BFTlBST01JT19ICisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyoKKyAqIFN1bk9TIGFuZCBTb2xhcmlzIC9kZXYvb3BlbnByb20gZGVmaW5pdGlvbnMuIFRoZSBpb2N0bCB2YWx1ZXMKKyAqIHdlcmUgY2hvc2VuIHRvIGJlIGV4YWN0bHkgZXF1YWwgdG8gdGhlIFN1bk9TIGVxdWl2YWxlbnRzLgorICovCisKK3N0cnVjdCBvcGVucHJvbWlvCit7CisJdV9pbnQJb3Byb21fc2l6ZTsJCS8qIEFjdHVhbCBzaXplIG9mIHRoZSBvcHJvbV9hcnJheS4gKi8KKwljaGFyCW9wcm9tX2FycmF5WzFdOwkJLyogSG9sZHMgcHJvcGVydHkgbmFtZXMgYW5kIHZhbHVlcy4gKi8KK307CisKKyNkZWZpbmUJT1BST01NQVhQQVJBTQk0MDk2CQkvKiBNYXhpbXVtIHNpemUgb2Ygb3Byb21fYXJyYXkuICovCisKKyNkZWZpbmUJT1BST01HRVRPUFQJCTB4MjAwMDRGMDEKKyNkZWZpbmUJT1BST01TRVRPUFQJCTB4MjAwMDRGMDIKKyNkZWZpbmUJT1BST01OWFRPUFQJCTB4MjAwMDRGMDMKKyNkZWZpbmUJT1BST01TRVRPUFQyCQkweDIwMDA0RjA0CisjZGVmaW5lCU9QUk9NTkVYVAkJMHgyMDAwNEYwNQorI2RlZmluZQlPUFJPTUNISUxECQkweDIwMDA0RjA2CisjZGVmaW5lCU9QUk9NR0VUUFJPUAkJMHgyMDAwNEYwNworI2RlZmluZQlPUFJPTU5YVFBST1AJCTB4MjAwMDRGMDgKKyNkZWZpbmUJT1BST01VMlAJCTB4MjAwMDRGMDkKKyNkZWZpbmUJT1BST01HRVRDT05TCQkweDIwMDA0RjBBCisjZGVmaW5lCU9QUk9NR0VURkJOQU1FCQkweDIwMDA0RjBCCisjZGVmaW5lCU9QUk9NR0VUQk9PVEFSR1MJMHgyMDAwNEYwQworLyogTGludXggZXh0ZW5zaW9ucyAqLwkJCQkvKiBBcmd1bWVudHMgaW4gb3Byb21fYXJyYXk6ICovCisjZGVmaW5lIE9QUk9NU0VUQ1VSCQkweDIwMDA0RkYwCS8qIGludCBub2RlIC0gU2V0cyBjdXJyZW50IG5vZGUgKi8KKyNkZWZpbmUgT1BST01QQ0kyTk9ERQkJMHgyMDAwNEZGMQkvKiBpbnQgcGNpX2J1cywgcGNpX2RldmZuIC0gU2V0cyBjdXJyZW50IG5vZGUgdG8gUENJIGRldmljZSdzIG5vZGUgKi8KKyNkZWZpbmUgT1BST01QQVRIMk5PREUJCTB4MjAwMDRGRjIJLyogY2hhciBwYXRoW10gLSBTZXQgY3VycmVudCBub2RlIGZyb20gZnVsbHkgcXVhbGlmaWVkIFBST00gcGF0aCAqLworCisvKgorICogUmV0dXJuIHZhbHVlcyBmcm9tIE9QUk9NR0VUQ09OUzoKKyAqLworCisjZGVmaW5lIE9QUk9NQ09OU19OT1RfV1NDT05TICAgIDAKKyNkZWZpbmUgT1BST01DT05TX1NURElOX0lTX0tCRCAgMHgxICAgICAvKiBzdGRpbiBkZXZpY2UgaXMga2JkICovCisjZGVmaW5lIE9QUk9NQ09OU19TVERPVVRfSVNfRkIgIDB4MiAgICAgLyogc3Rkb3V0IGlzIGEgZnJhbWVidWZmZXIgKi8KKyNkZWZpbmUgT1BST01DT05TX09QRU5QUk9NICAgICAgMHg0ICAgICAvKiBzdXBwb3J0cyBvcGVuYm9vdCAqLworCisKKy8qCisgKiAgTmV0QlNEL09wZW5CU0QgL2Rldi9vcGVucHJvbSBkZWZpbml0aW9ucy4KKyAqLworCitzdHJ1Y3Qgb3Bpb2NkZXNjCit7CisJaW50CW9wX25vZGVpZDsJCS8qIFBST00gTm9kZSBJRCAodmFsdWUtcmVzdWx0KSAqLworCWludAlvcF9uYW1lbGVuOwkJLyogTGVuZ3RoIG9mIG9wX25hbWUuICovCisJY2hhcglfX3VzZXIgKm9wX25hbWU7CS8qIFBvaW50ZXIgdG8gdGhlIHByb3BlcnR5IG5hbWUuICovCisJaW50CW9wX2J1ZmxlbjsJCS8qIExlbmd0aCBvZiBvcF9idWYgKHZhbHVlLXJlc3VsdCkgKi8KKwljaGFyCV9fdXNlciAqb3BfYnVmOwkJLyogUG9pbnRlciB0byBidWZmZXIuICovCit9OworCisjZGVmaW5lCU9QSU9DR0VUCV9JT1dSKCdPJywgMSwgc3RydWN0IG9waW9jZGVzYykKKyNkZWZpbmUJT1BJT0NTRVQJX0lPVygnTycsIDIsIHN0cnVjdCBvcGlvY2Rlc2MpCisjZGVmaW5lCU9QSU9DTkVYVFBST1AJX0lPV1IoJ08nLCAzLCBzdHJ1Y3Qgb3Bpb2NkZXNjKQorI2RlZmluZQlPUElPQ0dFVE9QVE5PREUJX0lPUignTycsIDQsIGludCkKKyNkZWZpbmUJT1BJT0NHRVRORVhUCV9JT1dSKCdPJywgNSwgaW50KQorI2RlZmluZQlPUElPQ0dFVENISUxECV9JT1dSKCdPJywgNiwgaW50KQorCisjZW5kaWYgLyogX1NQQVJDNjRfT1BFTlBST01JT19IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvb3BsaWIuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvb3BsaWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDMyZDllCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9vcGxpYi5oCkBAIC0wLDAgKzEsMzYwIEBACisvKiAkSWQ6IG9wbGliLmgsdiAxLjE0IDIwMDEvMTIvMTkgMDA6Mjk6NTEgZGF2ZW0gRXhwICQKKyAqIG9wbGliLmg6ICBEZXNjcmliZXMgdGhlIGludGVyZmFjZSBhbmQgYXZhaWxhYmxlIHJvdXRpbmVzIGluIHRoZQorICogICAgICAgICAgIExpbnV4IFByb20gbGlicmFyeS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQorICogQ29weXJpZ2h0IChDKSAxOTk2IEpha3ViIEplbGluZWsgKGpqQHN1bnNpdGUubWZmLmN1bmkuY3opCisgKi8KKworI2lmbmRlZiBfX1NQQVJDNjRfT1BMSUJfSAorI2RlZmluZSBfX1NQQVJDNjRfT1BMSUJfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL29wZW5wcm9tLmg+CisKKy8qIEVudW1lcmF0aW9uIHRvIGRlc2NyaWJlIHRoZSBwcm9tIG1ham9yIHZlcnNpb24gd2UgaGF2ZSBkZXRlY3RlZC4gKi8KK2VudW0gcHJvbV9tYWpvcl92ZXJzaW9uIHsKKwlQUk9NX1YwLCAgICAgIC8qIE9yaWdpbmFsIHN1bjRjIFYwIHByb20gKi8KKwlQUk9NX1YyLCAgICAgIC8qIHN1bjRjIGFuZCBlYXJseSBzdW40bSBWMiBwcm9tICovCisJUFJPTV9WMywgICAgICAvKiBzdW40bSBhbmQgbGF0ZXIsIHVwIHRvIHN1bjRkL3N1bjRlIG1hY2hpbmVzIFYzICovCisJUFJPTV9QMTI3NSwgICAvKiBJRUVFIGNvbXBsaWFudCBJU0EgYmFzZWQgU3VuIFBST00sIG9ubHkgc3VuNHUgKi8KKyAgICAgICAgUFJPTV9BUDEwMDAsICAvKiBhY3R1YWxseSBubyBwcm9tIGF0IGFsbCAqLworfTsKKworZXh0ZXJuIGVudW0gcHJvbV9tYWpvcl92ZXJzaW9uIHByb21fdmVyczsKKy8qIFJldmlzaW9uLCBhbmQgZmlybXdhcmUgcmV2aXNpb24uICovCitleHRlcm4gdW5zaWduZWQgaW50IHByb21fcmV2LCBwcm9tX3ByZXY7CisKKy8qIFJvb3Qgbm9kZSBvZiB0aGUgcHJvbSBkZXZpY2UgdHJlZSwgdGhpcyBzdGF5cyBjb25zdGFudCBhZnRlcgorICogaW5pdGlhbGl6YXRpb24gaXMgY29tcGxldGUuCisgKi8KK2V4dGVybiBpbnQgcHJvbV9yb290X25vZGU7CisKKy8qIFBST00gc3RkaW4gYW5kIHN0ZG91dCAqLworZXh0ZXJuIGludCBwcm9tX3N0ZGluLCBwcm9tX3N0ZG91dDsKKworLyogL2Nob3NlbiBub2RlIG9mIHRoZSBwcm9tIGRldmljZSB0cmVlLCB0aGlzIHN0YXlzIGNvbnN0YW50IGFmdGVyCisgKiBpbml0aWFsaXphdGlvbiBpcyBjb21wbGV0ZS4KKyAqLworZXh0ZXJuIGludCBwcm9tX2Nob3Nlbl9ub2RlOworCitzdHJ1Y3QgbGludXhfbWxpc3RfcDEyNzUgeworCXN0cnVjdCBsaW51eF9tbGlzdF9wMTI3NSAqdGhlcmVzX21vcmU7CisJdW5zaWduZWQgbG9uZyBzdGFydF9hZHI7CisJdW5zaWduZWQgbG9uZyBudW1fYnl0ZXM7Cit9OworCitzdHJ1Y3QgbGludXhfbWVtX3AxMjc1IHsKKwlzdHJ1Y3QgbGludXhfbWxpc3RfcDEyNzUgKipwMTI3NV90b3RwaHlzOworCXN0cnVjdCBsaW51eF9tbGlzdF9wMTI3NSAqKnAxMjc1X3Byb21tYXA7CisJc3RydWN0IGxpbnV4X21saXN0X3AxMjc1ICoqcDEyNzVfYXZhaWxhYmxlOyAvKiBXaGF0IHdlIGNhbiB1c2UgKi8KK307CisKKy8qIFRoZSBmdW5jdGlvbnMuLi4gKi8KKworLyogWW91IG11c3QgY2FsbCBwcm9tX2luaXQoKSBiZWZvcmUgdXNpbmcgYW55IG9mIHRoZSBsaWJyYXJ5IHNlcnZpY2VzLAorICogcHJlZmVyYWJseSBhcyBlYXJseSBhcyBwb3NzaWJsZS4gIFBhc3MgaXQgdGhlIHJvbXZlYyBwb2ludGVyLgorICovCitleHRlcm4gdm9pZCBwcm9tX2luaXQodm9pZCAqY2lmX2hhbmRsZXIsIHZvaWQgKmNpZl9zdGFjayk7CisKKy8qIEJvb3QgYXJndW1lbnQgYWNxdWlzaXRpb24sIHJldHVybnMgdGhlIGJvb3QgY29tbWFuZCBsaW5lIHN0cmluZy4gKi8KK2V4dGVybiBjaGFyICpwcm9tX2dldGJvb3RhcmdzKHZvaWQpOworCisvKiBEZXZpY2UgdXRpbGl0aWVzLiAqLworCisvKiBEZXZpY2Ugb3BlcmF0aW9ucy4gKi8KKworLyogT3BlbiB0aGUgZGV2aWNlIGRlc2NyaWJlZCBieSB0aGUgcGFzc2VkIHN0cmluZy4gIE5vdGUsIHRoYXQgdGhlIGZvcm1hdAorICogb2YgdGhlIHN0cmluZyBpcyBkaWZmZXJlbnQgb24gVjAgdnMuIFYyLT5oaWdoZXIgcHJvbXMuICBUaGUgY2FsbGVyIG11c3QKKyAqIGtub3cgd2hhdCBoZS9zaGUgaXMgZG9pbmchICBSZXR1cm5zIHRoZSBkZXZpY2UgZGVzY3JpcHRvciwgYW4gaW50LgorICovCitleHRlcm4gaW50IHByb21fZGV2b3BlbihjaGFyICpkZXZpY2Vfc3RyaW5nKTsKKworLyogQ2xvc2UgYSBwcmV2aW91c2x5IG9wZW5lZCBkZXZpY2UgZGVzY3JpYmVkIGJ5IHRoZSBwYXNzZWQgaW50ZWdlcgorICogZGVzY3JpcHRvci4KKyAqLworZXh0ZXJuIGludCBwcm9tX2RldmNsb3NlKGludCBkZXZpY2VfaGFuZGxlKTsKKworLyogRG8gYSBzZWVrIG9wZXJhdGlvbiBvbiB0aGUgZGV2aWNlIGRlc2NyaWJlZCBieSB0aGUgcGFzc2VkIGludGVnZXIKKyAqIGRlc2NyaXB0b3IuCisgKi8KK2V4dGVybiB2b2lkIHByb21fc2VlayhpbnQgZGV2aWNlX2hhbmRsZSwgdW5zaWduZWQgaW50IHNlZWtfaGl2YWwsCisJCSAgICAgIHVuc2lnbmVkIGludCBzZWVrX2xvd3ZhbCk7CisKKy8qIE1hY2hpbmUgbWVtb3J5IGNvbmZpZ3VyYXRpb24gcm91dGluZS4gKi8KKworLyogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgVjAgZm9ybWF0IG1lbW9yeSBkZXNjcmlwdG9yIHRhYmxlLCBpdCBoYXMgdGhyZWUKKyAqIGVudHJpZXMuICBPbmUgZm9yIHRoZSB0b3RhbCBhbW91bnQgb2YgcGh5c2ljYWwgcmFtIG9uIHRoZSBtYWNoaW5lLCBvbmUKKyAqIGZvciB0aGUgYW1vdW50IG9mIHBoeXNpY2FsIHJhbSBhdmFpbGFibGUsIGFuZCBvbmUgZGVzY3JpYmluZyB0aGUgdmlydHVhbAorICogYXJlYXMgd2hpY2ggYXJlIGFsbG9jYXRlZCBieSB0aGUgcHJvbS4gIFNvLCBpbiBhIHNlbnNlIHRoZSBwaHlzaWNhbAorICogYXZhaWxhYmxlIGlzIGEgY2FsY3VsYXRpb24gb2YgdGhlIHRvdGFsIHBoeXNpY2FsIG1pbnVzIHRoZSBwaHlzaWNhbCBtYXBwZWQKKyAqIGJ5IHRoZSBwcm9tIHdpdGggdmlydHVhbCBtYXBwaW5ncy4KKyAqCisgKiBUaGVzZSBsaXN0cyBhcmUgcmV0dXJuZWQgcHJlLXNvcnRlZCwgdGhpcyBzaG91bGQgbWFrZSB5b3VyIGxpZmUgZWFzaWVyCisgKiBzaW5jZSB0aGUgcHJvbSBpdHNlbGYgaXMgd2F5IHRvbyBsYXp5IHRvIGRvIHN1Y2ggbmljZSB0aGluZ3MuCisgKi8KK2V4dGVybiBzdHJ1Y3QgbGludXhfbWVtX3AxMjc1ICpwcm9tX21lbWluZm8odm9pZCk7CisKKy8qIE1pc2NlbGxhbmVvdXMgcm91dGluZXMsIGRvbid0IHJlYWxseSBmaXQgaW4gYW55IGNhdGVnb3J5IHBlciBzZS4gKi8KKworLyogUmVib290IHRoZSBtYWNoaW5lIHdpdGggdGhlIGNvbW1hbmQgbGluZSBwYXNzZWQuICovCitleHRlcm4gdm9pZCBwcm9tX3JlYm9vdChjaGFyICpib290X2NvbW1hbmQpOworCisvKiBFdmFsdWF0ZSB0aGUgZm9ydGggc3RyaW5nIHBhc3NlZC4gKi8KK2V4dGVybiB2b2lkIHByb21fZmV2YWwoY2hhciAqZm9ydGhfc3RyaW5nKTsKKworLyogRW50ZXIgdGhlIHByb20sIHdpdGggcG9zc2liaWxpdHkgb2YgY29udGludWF0aW9uIHdpdGggdGhlICdnbycKKyAqIGNvbW1hbmQgaW4gbmV3ZXIgcHJvbXMuCisgKi8KK2V4dGVybiB2b2lkIHByb21fY21kbGluZSh2b2lkKTsKKworLyogRW50ZXIgdGhlIHByb20sIHdpdGggbm8gY2hhbmNlIG9mIGNvbnRpbnVhdGlvbiBmb3IgdGhlIHN0YW5kLWFsb25lCisgKiB3aGljaCBjYWxscyB0aGlzLgorICovCitleHRlcm4gdm9pZCBwcm9tX2hhbHQodm9pZCkgX19hdHRyaWJ1dGVfXyAoKG5vcmV0dXJuKSk7CisKKy8qIEhhbHQgYW5kIHBvd2VyLW9mZiB0aGUgbWFjaGluZS4gKi8KK2V4dGVybiB2b2lkIHByb21faGFsdF9wb3dlcl9vZmYodm9pZCkgX19hdHRyaWJ1dGVfXyAoKG5vcmV0dXJuKSk7CisKKy8qIFNldCB0aGUgUFJPTSAnc3luYycgY2FsbGJhY2sgZnVuY3Rpb24gdG8gdGhlIHBhc3NlZCBmdW5jdGlvbiBwb2ludGVyLgorICogV2hlbiB0aGUgdXNlciBnaXZlcyB0aGUgJ3N5bmMnIGNvbW1hbmQgYXQgdGhlIHByb20gcHJvbXB0IHdoaWxlIHRoZQorICoga2VybmVsIGlzIHN0aWxsIGFjdGl2ZSwgdGhlIHByb20gd2lsbCBjYWxsIHRoaXMgcm91dGluZS4KKyAqCisgKi8KK3R5cGVkZWYgaW50ICgqY2FsbGJhY2tfZnVuY190KShsb25nICpjbWQpOworZXh0ZXJuIHZvaWQgcHJvbV9zZXRjYWxsYmFjayhjYWxsYmFja19mdW5jX3QgZnVuY19wdHIpOworCisvKiBBY3F1aXJlIHRoZSBJRFBST00gb2YgdGhlIHJvb3Qgbm9kZSBpbiB0aGUgcHJvbSBkZXZpY2UgdHJlZS4gIFRoaXMKKyAqIGdldHMgcGFzc2VkIGEgYnVmZmVyIHdoZXJlIHlvdSB3b3VsZCBsaWtlIGl0IHN0dWZmZWQuICBUaGUgcmV0dXJuIHZhbHVlCisgKiBpcyB0aGUgZm9ybWF0IHR5cGUgb2YgdGhpcyBpZHByb20gb3IgMHhmZiBvbiBlcnJvci4KKyAqLworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgcHJvbV9nZXRfaWRwcm9tKGNoYXIgKmlkcF9idWZmZXIsIGludCBpZHBidWZfc2l6ZSk7CisKKy8qIEdldCB0aGUgcHJvbSBtYWpvciB2ZXJzaW9uLiAqLworZXh0ZXJuIGludCBwcm9tX3ZlcnNpb24odm9pZCk7CisKKy8qIEdldCB0aGUgcHJvbSBwbHVnaW4gcmV2aXNpb24uICovCitleHRlcm4gaW50IHByb21fZ2V0cmV2KHZvaWQpOworCisvKiBHZXQgdGhlIHByb20gZmlybXdhcmUgcmV2aXNpb24uICovCitleHRlcm4gaW50IHByb21fZ2V0cHJldih2b2lkKTsKKworLyogQ2hhcmFjdGVyIG9wZXJhdGlvbnMgdG8vZnJvbSB0aGUgY29uc29sZS4uLi4gKi8KKworLyogTm9uLWJsb2NraW5nIGdldCBjaGFyYWN0ZXIgZnJvbSBjb25zb2xlLiAqLworZXh0ZXJuIGludCBwcm9tX25iZ2V0Y2hhcih2b2lkKTsKKworLyogTm9uLWJsb2NraW5nIHB1dCBjaGFyYWN0ZXIgdG8gY29uc29sZS4gKi8KK2V4dGVybiBpbnQgcHJvbV9uYnB1dGNoYXIoY2hhciBjaGFyYWN0ZXIpOworCisvKiBCbG9ja2luZyBnZXQgY2hhcmFjdGVyIGZyb20gY29uc29sZS4gKi8KK2V4dGVybiBjaGFyIHByb21fZ2V0Y2hhcih2b2lkKTsKKworLyogQmxvY2tpbmcgcHV0IGNoYXJhY3RlciB0byBjb25zb2xlLiAqLworZXh0ZXJuIHZvaWQgcHJvbV9wdXRjaGFyKGNoYXIgY2hhcmFjdGVyKTsKKworLyogUHJvbSdzIGludGVybmFsIHJvdXRpbmVzLCBkb24ndCB1c2UgaW4ga2VybmVsL2Jvb3QgY29kZS4gKi8KK2V4dGVybiB2b2lkIHByb21fcHJpbnRmKGNoYXIgKmZtdCwgLi4uKTsKK2V4dGVybiB2b2lkIHByb21fd3JpdGUoY29uc3QgY2hhciAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuKTsKKworLyogUXVlcnkgZm9yIGlucHV0IGRldmljZSB0eXBlICovCisKK2VudW0gcHJvbV9pbnB1dF9kZXZpY2UgeworCVBST01ERVZfSUtCRCwJCQkvKiBpbnB1dCBmcm9tIGtleWJvYXJkICovCisJUFJPTURFVl9JVFRZQSwJCQkvKiBpbnB1dCBmcm9tIHR0eWEgKi8KKwlQUk9NREVWX0lUVFlCLAkJCS8qIGlucHV0IGZyb20gdHR5YiAqLworCVBST01ERVZfSV9VTkssCit9OworCitleHRlcm4gZW51bSBwcm9tX2lucHV0X2RldmljZSBwcm9tX3F1ZXJ5X2lucHV0X2RldmljZSh2b2lkKTsKKworLyogUXVlcnkgZm9yIG91dHB1dCBkZXZpY2UgdHlwZSAqLworCitlbnVtIHByb21fb3V0cHV0X2RldmljZSB7CisJUFJPTURFVl9PU0NSRUVOLAkJLyogdG8gc2NyZWVuICovCisJUFJPTURFVl9PVFRZQSwJCQkvKiB0byB0dHlhICovCisJUFJPTURFVl9PVFRZQiwJCQkvKiB0byB0dHliICovCisJUFJPTURFVl9PX1VOSywKK307CisKK2V4dGVybiBlbnVtIHByb21fb3V0cHV0X2RldmljZSBwcm9tX3F1ZXJ5X291dHB1dF9kZXZpY2Uodm9pZCk7CisKKy8qIE11bHRpcHJvY2Vzc29yIG9wZXJhdGlvbnMuLi4gKi8KKyNpZmRlZiBDT05GSUdfU01QCisvKiBTdGFydCB0aGUgQ1BVIHdpdGggdGhlIGdpdmVuIGRldmljZSB0cmVlIG5vZGUsIGNvbnRleHQgdGFibGUsIGFuZCBjb250ZXh0CisgKiBhdCB0aGUgcGFzc2VkIHByb2dyYW0gY291bnRlci4KKyAqLworZXh0ZXJuIHZvaWQgcHJvbV9zdGFydGNwdShpbnQgY3B1bm9kZSwgdW5zaWduZWQgbG9uZyBwYywgdW5zaWduZWQgbG9uZyBvMCk7CisKKy8qIFN0b3AgdGhlIGN1cnJlbnQgQ1BVLiAqLworZXh0ZXJuIHZvaWQgcHJvbV9zdG9wc2VsZih2b2lkKTsKKworLyogSWRsZSB0aGUgY3VycmVudCBDUFUuICovCitleHRlcm4gdm9pZCBwcm9tX2lkbGVzZWxmKHZvaWQpOworCisvKiBSZXN1bWUgdGhlIENQVSB3aXRoIHRoZSBwYXNzZWQgZGV2aWNlIHRyZWUgbm9kZS4gKi8KK2V4dGVybiB2b2lkIHByb21fcmVzdW1lY3B1KGludCBjcHVub2RlKTsKKyNlbmRpZgorCisvKiBQb3dlciBtYW5hZ2VtZW50IGludGVyZmFjZXMuICovCisKKy8qIFB1dCB0aGUgY3VycmVudCBDUFUgdG8gc2xlZXAuICovCitleHRlcm4gdm9pZCBwcm9tX3NsZWVwc2VsZih2b2lkKTsKKworLyogUHV0IHRoZSBlbnRpcmUgc3lzdGVtIHRvIHNsZWVwLiAqLworZXh0ZXJuIGludCBwcm9tX3NsZWVwc3lzdGVtKHZvaWQpOworCisvKiBJbml0aWF0ZSBhIHdha2V1cCBldmVudC4gKi8KK2V4dGVybiBpbnQgcHJvbV93YWtldXBzeXN0ZW0odm9pZCk7CisKKy8qIE1NVSBhbmQgbWVtb3J5IHJlbGF0ZWQgT0JQIGludGVyZmFjZXMuICovCisKKy8qIEdldCB1bmlxdWUgc3RyaW5nIGlkZW50aWZ5aW5nIFNJTU0gYXQgZ2l2ZW4gcGh5c2ljYWwgYWRkcmVzcy4gKi8KK2V4dGVybiBpbnQgcHJvbV9nZXR1bnVtYmVyKGludCBzeW5kcm9tZV9jb2RlLAorCQkJICAgdW5zaWduZWQgbG9uZyBwaHlzX2FkZHIsCisJCQkgICBjaGFyICpidWYsIGludCBidWZsZW4pOworCisvKiBSZXRhaW4gcGh5c2ljYWwgbWVtb3J5IHRvIHRoZSBjYWxsZXIgYWNyb3NzIHNvZnQgcmVzZXRzLiAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcHJvbV9yZXRhaW4oY2hhciAqbmFtZSwKKwkJCQkgdW5zaWduZWQgbG9uZyBwYV9sb3csIHVuc2lnbmVkIGxvbmcgcGFfaGlnaCwKKwkJCQkgbG9uZyBzaXplLCBsb25nIGFsaWduKTsKKworLyogTG9hZCBleHBsaWNpdCBJL0QgVExCIGVudHJpZXMgaW50byB0aGUgY2FsbGluZyBwcm9jZXNzb3IuICovCitleHRlcm4gbG9uZyBwcm9tX2l0bGJfbG9hZCh1bnNpZ25lZCBsb25nIGluZGV4LAorCQkJICAgdW5zaWduZWQgbG9uZyB0dGVfZGF0YSwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgdmFkZHIpOworCitleHRlcm4gbG9uZyBwcm9tX2R0bGJfbG9hZCh1bnNpZ25lZCBsb25nIGluZGV4LAorCQkJICAgdW5zaWduZWQgbG9uZyB0dGVfZGF0YSwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgdmFkZHIpOworCisvKiBNYXAvVW5tYXAgY2xpZW50IHByb2dyYW0gYWRkcmVzcyByYW5nZXMuICBGaXJzdCB0aGUgZm9ybWF0IG9mCisgKiB0aGUgbWFwcGluZyBtb2RlIGFyZ3VtZW50LgorICovCisjZGVmaW5lIFBST01fTUFQX1dSSVRFCTB4MDAwMSAvKiBXcml0YWJsZSAqLworI2RlZmluZSBQUk9NX01BUF9SRUFECTB4MDAwMiAvKiBSZWFkYWJsZSAtIHN3ICovCisjZGVmaW5lIFBST01fTUFQX0VYRUMJMHgwMDA0IC8qIEV4ZWN1dGFibGUgLSBzdyAqLworI2RlZmluZSBQUk9NX01BUF9MT0NLRUQJMHgwMDEwIC8qIExvY2tlZCwgdXNlIGkvZHRsYiBsb2FkIGNhbGxzIGZvciB0aGlzIGluc3RlYWQgKi8KKyNkZWZpbmUgUFJPTV9NQVBfQ0FDSEVECTB4MDAyMCAvKiBDYWNoZWFibGUgaW4gYm90aCBMMSBhbmQgTDIgY2FjaGVzICovCisjZGVmaW5lIFBST01fTUFQX1NFCTB4MDA0MCAvKiBTaWRlLUVmZmVjdHMgKi8KKyNkZWZpbmUgUFJPTV9NQVBfR0xPQgkweDAwODAgLyogR2xvYmFsICovCisjZGVmaW5lIFBST01fTUFQX0lFCTB4MDEwMCAvKiBJbnZlcnQtRW5kaWFubmVzcyAqLworI2RlZmluZSBQUk9NX01BUF9ERUZBVUxUIChQUk9NX01BUF9XUklURSB8IFBST01fTUFQX1JFQUQgfCBQUk9NX01BUF9FWEVDIHwgUFJPTV9NQVBfQ0FDSEVEKQorCitleHRlcm4gaW50IHByb21fbWFwKGludCBtb2RlLCB1bnNpZ25lZCBsb25nIHNpemUsCisJCSAgICB1bnNpZ25lZCBsb25nIHZhZGRyLCB1bnNpZ25lZCBsb25nIHBhZGRyKTsKK2V4dGVybiB2b2lkIHByb21fdW5tYXAodW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIHZhZGRyKTsKKworCisvKiBQUk9NIGRldmljZSB0cmVlIHRyYXZlcnNhbCBmdW5jdGlvbnMuLi4gKi8KKworI2lmZGVmIFBST01MSUJfSU5URVJOQUwKKworLyogSW50ZXJuYWwgdmVyc2lvbiBvZiBwcm9tX2dldGNoaWxkLiAqLworZXh0ZXJuIGludCBfX3Byb21fZ2V0Y2hpbGQoaW50IHBhcmVudF9ub2RlKTsKKworLyogSW50ZXJuYWwgdmVyc2lvbiBvZiBwcm9tX2dldHNpYmxpbmcuICovCitleHRlcm4gaW50IF9fcHJvbV9nZXRzaWJsaW5nKGludCBub2RlKTsKKworI2VuZGlmCisKKy8qIEdldCB0aGUgY2hpbGQgbm9kZSBvZiB0aGUgZ2l2ZW4gbm9kZSwgb3IgemVybyBpZiBubyBjaGlsZCBleGlzdHMuICovCitleHRlcm4gaW50IHByb21fZ2V0Y2hpbGQoaW50IHBhcmVudF9ub2RlKTsKKworLyogR2V0IHRoZSBuZXh0IHNpYmxpbmcgbm9kZSBvZiB0aGUgZ2l2ZW4gbm9kZSwgb3IgemVybyBpZiBubyBmdXJ0aGVyCisgKiBzaWJsaW5ncyBleGlzdC4KKyAqLworZXh0ZXJuIGludCBwcm9tX2dldHNpYmxpbmcoaW50IG5vZGUpOworCisvKiBHZXQgdGhlIGxlbmd0aCwgYXQgdGhlIHBhc3NlZCBub2RlLCBvZiB0aGUgZ2l2ZW4gcHJvcGVydHkgdHlwZS4KKyAqIFJldHVybnMgLTEgb24gZXJyb3IgKGllLiBubyBzdWNoIHByb3BlcnR5IGF0IHRoaXMgbm9kZSkuCisgKi8KK2V4dGVybiBpbnQgcHJvbV9nZXRwcm9wbGVuKGludCB0aGlzbm9kZSwgY2hhciAqcHJvcGVydHkpOworCisvKiBGZXRjaCB0aGUgcmVxdWVzdGVkIHByb3BlcnR5IHVzaW5nIHRoZSBnaXZlbiBidWZmZXIuICBSZXR1cm5zCisgKiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoZSBwcm9tIHB1dCBpbnRvIHlvdXIgYnVmZmVyIG9yIC0xIG9uIGVycm9yLgorICovCitleHRlcm4gaW50IHByb21fZ2V0cHJvcGVydHkoaW50IHRoaXNub2RlLCBjaGFyICpwcm9wZXJ0eSwKKwkJCSAgICBjaGFyICpwcm9wX2J1ZmZlciwgaW50IHByb3BidWZfc2l6ZSk7CisKKy8qIEFjcXVpcmUgYW4gaW50ZWdlciBwcm9wZXJ0eS4gKi8KK2V4dGVybiBpbnQgcHJvbV9nZXRpbnQoaW50IG5vZGUsIGNoYXIgKnByb3BlcnR5KTsKKworLyogQWNxdWlyZSBhbiBpbnRlZ2VyIHByb3BlcnR5LCB3aXRoIGEgZGVmYXVsdCB2YWx1ZS4gKi8KK2V4dGVybiBpbnQgcHJvbV9nZXRpbnRkZWZhdWx0KGludCBub2RlLCBjaGFyICpwcm9wZXJ0eSwgaW50IGRlZnZhbCk7CisKKy8qIEFjcXVpcmUgYSBib29sZWFuIHByb3BlcnR5LCAwPUZBTFNFIDE9VFJVRS4gKi8KK2V4dGVybiBpbnQgcHJvbV9nZXRib29sKGludCBub2RlLCBjaGFyICpwcm9wKTsKKworLyogQWNxdWlyZSBhIHN0cmluZyBwcm9wZXJ0eSwgbnVsbCBzdHJpbmcgb24gZXJyb3IuICovCitleHRlcm4gdm9pZCBwcm9tX2dldHN0cmluZyhpbnQgbm9kZSwgY2hhciAqcHJvcCwgY2hhciAqYnVmLCBpbnQgYnVmc2l6ZSk7CisKKy8qIERvZXMgdGhlIHBhc3NlZCBub2RlIGhhdmUgdGhlIGdpdmVuICJuYW1lIj8gWUVTPTEgTk89MCAqLworZXh0ZXJuIGludCBwcm9tX25vZGVtYXRjaChpbnQgdGhpc25vZGUsIGNoYXIgKm5hbWUpOworCisvKiBQdXRzIGluIGJ1ZmZlciBhIHByb20gbmFtZSBpbiB0aGUgZm9ybSBuYW1lQHgseSBvciBuYW1lICh4IGZvciB3aGljaF9pbyAKKyAqIGFuZCB5IGZvciBmaXJzdCByZWdzIHBoeXMgYWRkcmVzcworICovCitleHRlcm4gaW50IHByb21fZ2V0bmFtZShpbnQgbm9kZSwgY2hhciAqYnVmLCBpbnQgYnVmbGVuKTsKKworLyogU2VhcmNoIGFsbCBzaWJsaW5ncyBzdGFydGluZyBhdCB0aGUgcGFzc2VkIG5vZGUgZm9yICJuYW1lIiBtYXRjaGluZworICogdGhlIGdpdmVuIHN0cmluZy4gIFJldHVybnMgdGhlIG5vZGUgb24gc3VjY2VzcywgemVybyBvbiBmYWlsdXJlLgorICovCitleHRlcm4gaW50IHByb21fc2VhcmNoc2libGluZ3MoaW50IG5vZGVfc3RhcnQsIGNoYXIgKm5hbWUpOworCisvKiBSZXR1cm4gdGhlIGZpcnN0IHByb3BlcnR5IHR5cGUsIGFzIGEgc3RyaW5nLCBmb3IgdGhlIGdpdmVuIG5vZGUuCisgKiBSZXR1cm5zIGEgbnVsbCBzdHJpbmcgb24gZXJyb3IuIEJ1ZmZlciBzaG91bGQgYmUgYXQgbGVhc3QgMzJCIGxvbmcuCisgKi8KK2V4dGVybiBjaGFyICpwcm9tX2ZpcnN0cHJvcChpbnQgbm9kZSwgY2hhciAqYnVmZmVyKTsKKworLyogUmV0dXJucyB0aGUgbmV4dCBwcm9wZXJ0eSBhZnRlciB0aGUgcGFzc2VkIHByb3BlcnR5IGZvciB0aGUgZ2l2ZW4KKyAqIG5vZGUuICBSZXR1cm5zIG51bGwgc3RyaW5nIG9uIGZhaWx1cmUuIEJ1ZmZlciBzaG91bGQgYmUgYXQgbGVhc3QgMzJCIGxvbmcuCisgKi8KK2V4dGVybiBjaGFyICpwcm9tX25leHRwcm9wKGludCBub2RlLCBjaGFyICpwcmV2X3Byb3BlcnR5LCBjaGFyICpidWZmZXIpOworCisvKiBSZXR1cm5zIDEgaWYgdGhlIHNwZWNpZmllZCBub2RlIGhhcyBnaXZlbiBwcm9wZXJ0eS4gKi8KK2V4dGVybiBpbnQgcHJvbV9ub2RlX2hhc19wcm9wZXJ0eShpbnQgbm9kZSwgY2hhciAqcHJvcGVydHkpOworCisvKiBSZXR1cm5zIHBoYW5kbGUgb2YgdGhlIHBhdGggc3BlY2lmaWVkICovCitleHRlcm4gaW50IHByb21fZmluZGRldmljZShjaGFyICpuYW1lKTsKKworLyogU2V0IHRoZSBpbmRpY2F0ZWQgcHJvcGVydHkgYXQgdGhlIGdpdmVuIG5vZGUgd2l0aCB0aGUgcGFzc2VkIHZhbHVlLgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIG9mIHlvdXIgdmFsdWUgdGhhdCB0aGUgcHJvbSB0b29rLgorICovCitleHRlcm4gaW50IHByb21fc2V0cHJvcChpbnQgbm9kZSwgY2hhciAqcHJvcF9uYW1lLCBjaGFyICpwcm9wX3ZhbHVlLAorCQkJaW50IHZhbHVlX3NpemUpOworCQkJCitleHRlcm4gaW50IHByb21fcGF0aHRvaW5vZGUoY2hhciAqcGF0aCk7CitleHRlcm4gaW50IHByb21faW5zdDJwa2coaW50KTsKKworLyogQ1BVIHByb2JpbmcgaGVscGVycy4gICovCitpbnQgY3B1X2ZpbmRfYnlfaW5zdGFuY2UoaW50IGluc3RhbmNlLCBpbnQgKnByb21fbm9kZSwgaW50ICptaWQpOworaW50IGNwdV9maW5kX2J5X21pZChpbnQgbWlkLCBpbnQgKnByb21fbm9kZSk7CisKKy8qIENsaWVudCBpbnRlcmZhY2UgbGV2ZWwgcm91dGluZXMuICovCitleHRlcm4gdm9pZCBwcm9tX3NldF90cmFwX3RhYmxlKHVuc2lnbmVkIGxvbmcgdGJhKTsKKworZXh0ZXJuIGxvbmcgcDEyNzVfY21kIChjaGFyICosIGxvbmcsIC4uLik7CisJCQkJICAgCisKKyNpZiAwCisjZGVmaW5lIFAxMjc1X1NJWkUoeCkgKCgoKGxvbmcpKCh4KSAvIDMyKSkgPDwgMzIpIHwgKHgpKQorI2Vsc2UKKyNkZWZpbmUgUDEyNzVfU0laRSh4KSB4CisjZW5kaWYKKworLyogV2Ugc3VwcG9ydCBhdCBtb3N0IDE2IGlucHV0IGFuZCAxIG91dHB1dCBhcmd1bWVudCAqLworI2RlZmluZSBQMTI3NV9BUkdfTlVNQkVSCQkwCisjZGVmaW5lIFAxMjc1X0FSR19JTl9TVFJJTkcJCTEKKyNkZWZpbmUgUDEyNzVfQVJHX09VVF9CVUYJCTIKKyNkZWZpbmUgUDEyNzVfQVJHX09VVF8zMkIJCTMKKyNkZWZpbmUgUDEyNzVfQVJHX0lOX0ZVTkNUSU9OCQk0CisjZGVmaW5lIFAxMjc1X0FSR19JTl9CVUYJCTUKKyNkZWZpbmUgUDEyNzVfQVJHX0lOXzY0QgkJNgorCisjZGVmaW5lIFAxMjc1X0lOKHgpICgoeCkgJiAweGYpCisjZGVmaW5lIFAxMjc1X09VVCh4KSAoKCh4KSA8PCA0KSAmIDB4ZjApCisjZGVmaW5lIFAxMjc1X0lOT1VUKGksbykgKFAxMjc1X0lOKGkpfFAxMjc1X09VVChvKSkKKyNkZWZpbmUgUDEyNzVfQVJHKG4seCkgKCh4KSA8PCAoKG4pKjMgKyA4KSkKKworI2VuZGlmIC8qICEoX19TUEFSQzY0X09QTElCX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3BhZ2UuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGFnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxOWVhMDQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3BhZ2UuaApAQCAtMCwwICsxLDE3MiBAQAorLyogJElkOiBwYWdlLmgsdiAxLjM5IDIwMDIvMDIvMDkgMTk6NDk6MzEgZGF2ZW0gRXhwICQgKi8KKworI2lmbmRlZiBfU1BBUkM2NF9QQUdFX0gKKyNkZWZpbmUgX1NQQVJDNjRfUEFHRV9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxhc20vY29uc3QuaD4KKworI2lmIGRlZmluZWQoQ09ORklHX1NQQVJDNjRfUEFHRV9TSVpFXzhLQikKKyNkZWZpbmUgUEFHRV9TSElGVCAgIDEzCisjZWxpZiBkZWZpbmVkKENPTkZJR19TUEFSQzY0X1BBR0VfU0laRV82NEtCKQorI2RlZmluZSBQQUdFX1NISUZUICAgMTYKKyNlbGlmIGRlZmluZWQoQ09ORklHX1NQQVJDNjRfUEFHRV9TSVpFXzUxMktCKQorI2RlZmluZSBQQUdFX1NISUZUICAgMTkKKyNlbGlmIGRlZmluZWQoQ09ORklHX1NQQVJDNjRfUEFHRV9TSVpFXzRNQikKKyNkZWZpbmUgUEFHRV9TSElGVCAgIDIyCisjZWxzZQorI2Vycm9yIE5vIHBhZ2Ugc2l6ZSBzcGVjaWZpZWQgaW4ga2VybmVsIGNvbmZpZ3VyYXRpb24KKyNlbmRpZgorCisjZGVmaW5lIFBBR0VfU0laRSAgICAoX0FDKDEsVUwpIDw8IFBBR0VfU0hJRlQpCisjZGVmaW5lIFBBR0VfTUFTSyAgICAofihQQUdFX1NJWkUtMSkpCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK2V4dGVybiB2b2lkIF9jbGVhcl9wYWdlKHZvaWQgKnBhZ2UpOworI2RlZmluZSBjbGVhcl9wYWdlKFgpCV9jbGVhcl9wYWdlKCh2b2lkICopKFgpKQorc3RydWN0IHBhZ2U7CitleHRlcm4gdm9pZCBjbGVhcl91c2VyX3BhZ2Uodm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyB2YWRkciwgc3RydWN0IHBhZ2UgKnBhZ2UpOworI2RlZmluZSBjb3B5X3BhZ2UoWCxZKQltZW1jcHkoKHZvaWQgKikoWCksICh2b2lkICopKFkpLCBQQUdFX1NJWkUpCitleHRlcm4gdm9pZCBjb3B5X3VzZXJfcGFnZSh2b2lkICp0bywgdm9pZCAqZnJvbSwgdW5zaWduZWQgbG9uZyB2YWRkciwgc3RydWN0IHBhZ2UgKnRvcGFnZSk7CisKKy8qIFVubGlrZSBzcGFyYzMyLCBzcGFyYzY0J3MgcGFyYW1ldGVyIHBhc3NpbmcgQVBJIGlzIG1vcmUKKyAqIHNhbmUgaW4gdGhhdCBzdHJ1Y3R1cmVzIHdoaWNoIGFzIHNtYWxsIGVub3VnaCBhcmUgcGFzc2VkCisgKiBpbiByZWdpc3RlcnMgaW5zdGVhZCBvZiBvbiB0aGUgc3RhY2suICBUaHVzLCBzZXR0aW5nCisgKiBTVFJJQ1RfTU1fVFlQRUNIRUNLUyBkb2VzIG5vdCBnZW5lcmF0ZSB3b3JzZSBjb2RlIHNvCisgKiBsZXQncyBlbmFibGUgaXQgdG8gZ2V0IHRoZSB0eXBlIGNoZWNraW5nLgorICovCisKKyNkZWZpbmUgU1RSSUNUX01NX1RZUEVDSEVDS1MKKworI2lmZGVmIFNUUklDVF9NTV9UWVBFQ0hFQ0tTCisvKiBUaGVzZSBhcmUgdXNlZCB0byBtYWtlIHVzZSBvZiBDIHR5cGUtY2hlY2tpbmcuLiAqLwordHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHB0ZTsgfSBwdGVfdDsKK3R5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBpb3B0ZTsgfSBpb3B0ZV90OwordHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBpbnQgcG1kOyB9IHBtZF90OwordHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBpbnQgcGdkOyB9IHBnZF90OwordHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHBncHJvdDsgfSBwZ3Byb3RfdDsKKworI2RlZmluZSBwdGVfdmFsKHgpCSgoeCkucHRlKQorI2RlZmluZSBpb3B0ZV92YWwoeCkJKCh4KS5pb3B0ZSkKKyNkZWZpbmUgcG1kX3ZhbCh4KSAgICAgICgoeCkucG1kKQorI2RlZmluZSBwZ2RfdmFsKHgpCSgoeCkucGdkKQorI2RlZmluZSBwZ3Byb3RfdmFsKHgpCSgoeCkucGdwcm90KQorCisjZGVmaW5lIF9fcHRlKHgpCSgocHRlX3QpIHsgKHgpIH0gKQorI2RlZmluZSBfX2lvcHRlKHgpCSgoaW9wdGVfdCkgeyAoeCkgfSApCisjZGVmaW5lIF9fcG1kKHgpICAgICAgICAoKHBtZF90KSB7ICh4KSB9ICkKKyNkZWZpbmUgX19wZ2QoeCkJKChwZ2RfdCkgeyAoeCkgfSApCisjZGVmaW5lIF9fcGdwcm90KHgpCSgocGdwcm90X3QpIHsgKHgpIH0gKQorCisjZWxzZQorLyogLi4gd2hpbGUgdGhlc2UgbWFrZSBpdCBlYXNpZXIgb24gdGhlIGNvbXBpbGVyICovCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgcHRlX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW9wdGVfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50IHBtZF90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQgcGdkX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgcGdwcm90X3Q7CisKKyNkZWZpbmUgcHRlX3ZhbCh4KQkoeCkKKyNkZWZpbmUgaW9wdGVfdmFsKHgpCSh4KQorI2RlZmluZSBwbWRfdmFsKHgpICAgICAgKHgpCisjZGVmaW5lIHBnZF92YWwoeCkJKHgpCisjZGVmaW5lIHBncHJvdF92YWwoeCkJKHgpCisKKyNkZWZpbmUgX19wdGUoeCkJKHgpCisjZGVmaW5lIF9faW9wdGUoeCkJKHgpCisjZGVmaW5lIF9fcG1kKHgpICAgICAgICAoeCkKKyNkZWZpbmUgX19wZ2QoeCkJKHgpCisjZGVmaW5lIF9fcGdwcm90KHgpCSh4KQorCisjZW5kaWYgLyogKFNUUklDVF9NTV9UWVBFQ0hFQ0tTKSAqLworCisjaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfNE1CKQorI2RlZmluZSBIUEFHRV9TSElGVAkJMjIKKyNlbGlmIGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzUxMkspCisjZGVmaW5lIEhQQUdFX1NISUZUCQkxOQorI2VsaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfNjRLKQorI2RlZmluZSBIUEFHRV9TSElGVAkJMTYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQorI2RlZmluZSBIUEFHRV9TSVpFCQkoX0FDKDEsVUwpIDw8IEhQQUdFX1NISUZUKQorI2RlZmluZSBIUEFHRV9NQVNLCQkofihIUEFHRV9TSVpFIC0gMVVMKSkKKyNkZWZpbmUgSFVHRVRMQl9QQUdFX09SREVSCShIUEFHRV9TSElGVCAtIFBBR0VfU0hJRlQpCisjZW5kaWYKKworI2RlZmluZSBUQVNLX1VOTUFQUEVEX0JBU0UJKHRlc3RfdGhyZWFkX2ZsYWcoVElGXzMyQklUKSA/IFwKKwkJCQkgKF9BQygweDAwMDAwMDAwNzAwMDAwMDAsVUwpKSA6IChQQUdFX09GRlNFVCkpCisKKyNlbmRpZiAvKiAhKF9fQVNTRU1CTFlfXykgKi8KKworLyogdG8gYWxpZ24gdGhlIHBvaW50ZXIgdG8gdGhlIChuZXh0KSBwYWdlIGJvdW5kYXJ5ICovCisjZGVmaW5lIFBBR0VfQUxJR04oYWRkcikJKCgoYWRkcikrUEFHRV9TSVpFLTEpJlBBR0VfTUFTSykKKworLyogV2UgdXNlZCB0byBzdGljayB0aGlzIGludG8gYSBoYXJkLWNvZGVkIGdsb2JhbCByZWdpc3RlciAoJWc0KQorICogYnV0IHRoYXQgZG9lcyBub3QgbWFrZSBzZW5zZSBhbnltb3JlLgorICovCisjZGVmaW5lIFBBR0VfT0ZGU0VUCQlfQUMoMHhGRkZGRjgwMDAwMDAwMDAwLFVMKQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjZGVmaW5lIF9fcGEoeCkJCQkoKHVuc2lnbmVkIGxvbmcpKHgpIC0gUEFHRV9PRkZTRVQpCisjZGVmaW5lIF9fdmEoeCkJCQkoKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpICh4KSArIFBBR0VfT0ZGU0VUKSkKKworLyogUEZOcyBhcmUgcmVhbCBwaHlzaWNhbCBwYWdlIG51bWJlcnMuICBIb3dldmVyLCBtZW1fbWFwIG9ubHkgYmVnaW5zIHRvIHJlY29yZAorICogcGVyLXBhZ2UgaW5mb3JtYXRpb24gc3RhcnRpbmcgYXQgcGZuX2Jhc2UuICBUaGlzIGlzIHRvIGhhbmRsZSBzeXN0ZW1zIHdoZXJlCisgKiB0aGUgZmlyc3QgcGh5c2ljYWwgcGFnZSBpbiB0aGUgbWFjaGluZSBpcyBhdCBzb21lIGh1Z2UgcGh5c2ljYWwgYWRkcmVzcywKKyAqIHN1Y2ggYXMgNEdCLiAgIFRoaXMgaXMgY29tbW9uIG9uIGEgcGFydGl0aW9uZWQgRTEwMDAwLCBmb3IgZXhhbXBsZS4KKyAqLworZXh0ZXJuIHN0cnVjdCBwYWdlICpwZm5fdG9fcGFnZSh1bnNpZ25lZCBsb25nIHBmbik7CitleHRlcm4gdW5zaWduZWQgbG9uZyBwYWdlX3RvX3BmbihzdHJ1Y3QgcGFnZSAqKTsKKworI2RlZmluZSB2aXJ0X3RvX3BhZ2Uoa2FkZHIpCXBmbl90b19wYWdlKF9fcGEoa2FkZHIpPj5QQUdFX1NISUZUKQorCisjZGVmaW5lIHBmbl92YWxpZChwZm4pCQkoKChwZm4pLShwZm5fYmFzZSkpIDwgbWF4X21hcG5yKQorI2RlZmluZSB2aXJ0X2FkZHJfdmFsaWQoa2FkZHIpCXBmbl92YWxpZChfX3BhKGthZGRyKSA+PiBQQUdFX1NISUZUKQorCisjZGVmaW5lIHZpcnRfdG9fcGh5cyBfX3BhCisjZGVmaW5lIHBoeXNfdG9fdmlydCBfX3ZhCisKKy8qIFRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIGlzIHVzZWQgdG8gaG9sZCB0aGUgcGh5c2ljYWwKKyAqIG1lbW9yeSBjb25maWd1cmF0aW9uIG9mIHRoZSBtYWNoaW5lLiAgVGhpcyBpcyBmaWxsZWQgaW4KKyAqIHByb2JlX21lbW9yeSgpIGFuZCBpcyBsYXRlciB1c2VkIGJ5IG1lbV9pbml0KCkgdG8gc2V0IHVwCisgKiBtZW1fbWFwW10uICBXZSBzdGF0aWNhbGx5IGFsbG9jYXRlIFNQQVJDX1BIWVNfQkFOS1Mgb2YKKyAqIHRoZXNlIHN0cnVjdHMsIHRoaXMgaXMgYXJiaXRyYXJ5LiAgVGhlIGVudHJ5IGFmdGVyIHRoZQorICogbGFzdCB2YWxpZCBvbmUgaGFzIG51bV9ieXRlcz09MC4KKyAqLworCitzdHJ1Y3Qgc3BhcmNfcGh5c19iYW5rcyB7CisJdW5zaWduZWQgbG9uZyBiYXNlX2FkZHI7CisJdW5zaWduZWQgbG9uZyBudW1fYnl0ZXM7Cit9OworCisjZGVmaW5lIFNQQVJDX1BIWVNfQkFOS1MgMzIKKworZXh0ZXJuIHN0cnVjdCBzcGFyY19waHlzX2JhbmtzIHNwX2JhbmtzW1NQQVJDX1BIWVNfQkFOS1NdOworCisvKiBQdXJlIDJebiB2ZXJzaW9uIG9mIGdldF9vcmRlciAqLworc3RhdGljIF9faW5saW5lX18gaW50IGdldF9vcmRlcih1bnNpZ25lZCBsb25nIHNpemUpCit7CisJaW50IG9yZGVyOworCisJc2l6ZSA9IChzaXplLTEpID4+IChQQUdFX1NISUZULTEpOworCW9yZGVyID0gLTE7CisJZG8geworCQlzaXplID4+PSAxOworCQlvcmRlcisrOworCX0gd2hpbGUgKHNpemUpOworCXJldHVybiBvcmRlcjsKK30KKworI2VuZGlmIC8qICEoX19BU1NFTUJMWV9fKSAqLworCisjZGVmaW5lIFZNX0RBVEFfREVGQVVMVF9GTEFHUwkoVk1fUkVBRCB8IFZNX1dSSVRFIHwgVk1fRVhFQyB8IFwKKwkJCQkgVk1fTUFZUkVBRCB8IFZNX01BWVdSSVRFIHwgVk1fTUFZRVhFQykKKworI2VuZGlmIC8qICEoX19LRVJORUxfXykgKi8KKworI2VuZGlmIC8qICEoX1NQQVJDNjRfUEFHRV9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9wYXJhbS5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhMTJmM2EKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3BhcmFtLmgKQEAgLTAsMCArMSwyMyBAQAorLyogJElkOiBwYXJhbS5oLHYgMS4yIDIwMDAvMTAvMzAgMjE6MDE6NDEgZGF2ZW0gRXhwICQgKi8KKyNpZm5kZWYgX0FTTVNQQVJDNjRfUEFSQU1fSAorI2RlZmluZSBfQVNNU1BBUkM2NF9QQVJBTV9ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisjIGRlZmluZSBIWgkJMTAwMAkvKiBJbnRlcm5hbCBrZXJuZWwgdGltZXIgZnJlcXVlbmN5ICovCisjIGRlZmluZSBVU0VSX0haCTEwMAkvKiAuLiBzb21lIHVzZXIgaW50ZXJmYWNlcyBhcmUgaW4gInRpY2tzIiAqLworIyBkZWZpbmUgQ0xPQ0tTX1BFUl9TRUMgKFVTRVJfSFopCisjZW5kaWYKKworI2lmbmRlZiBIWgorI2RlZmluZSBIWiAxMDAKKyNlbmRpZgorCisjZGVmaW5lIEVYRUNfUEFHRVNJWkUJODE5MiAgICAvKiBUaGFua3MgZm9yIHN1bjQncyB3ZSBjYXJyeSBiYWdnYWdlLi4uICovCisKKyNpZm5kZWYgTk9HUk9VUAorI2RlZmluZSBOT0dST1VQCQkoLTEpCisjZW5kaWYKKworI2RlZmluZSBNQVhIT1NUTkFNRUxFTgk2NAkvKiBtYXggbGVuZ3RoIG9mIGhvc3RuYW1lICovCisKKyNlbmRpZiAvKiBfQVNNU1BBUkM2NF9QQVJBTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3BhcnBvcnQuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGFycG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiODgzNDkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3BhcnBvcnQuaApAQCAtMCwwICsxLDE3NSBAQAorLyogJElkOiBwYXJwb3J0LmgsdiAxLjExIDIwMDEvMDUvMTEgMDc6NTQ6MjQgZGF2ZW0gRXhwICQKKyAqIHBhcnBvcnQuaDogc3BhcmM2NCBzcGVjaWZpYyBwYXJwb3J0IGluaXRpYWxpemF0aW9uIGFuZCBkbWEuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5ICBFZGRpZSBDLiBEb3N0ICAoZWNkQHNreW5ldC5iZSkKKyAqLworCisjaWZuZGVmIF9BU01fU1BBUkM2NF9QQVJQT1JUX0gKKyNkZWZpbmUgX0FTTV9TUEFSQzY0X1BBUlBPUlRfSCAxCisKKyNpbmNsdWRlIDxhc20vZWJ1cy5oPgorI2luY2x1ZGUgPGFzbS9pc2EuaD4KKyNpbmNsdWRlIDxhc20vbnM4NzMwMy5oPgorCisjZGVmaW5lIFBBUlBPUlRfUENfTUFYX1BPUlRTCVBBUlBPUlRfTUFYCisKK3N0YXRpYyBzdHJ1Y3Qgc3BhcmNfZWJ1c19pbmZvIHsKKwlzdHJ1Y3QgZWJ1c19kbWFfaW5mbyBpbmZvOworCXVuc2lnbmVkIGludCBhZGRyOworCXVuc2lnbmVkIGludCBjb3VudDsKK30gc3BhcmNfZWJ1c19kbWFzW1BBUlBPUlRfUENfTUFYX1BPUlRTXTsKKworc3RhdGljIF9faW5saW5lX18gdm9pZCBlbmFibGVfZG1hKHVuc2lnbmVkIGludCBkbWFucikKK3sKKwlpZiAoZWJ1c19kbWFfcmVxdWVzdCgmc3BhcmNfZWJ1c19kbWFzW2RtYW5yXS5pbmZvLAorCQkJICAgICBzcGFyY19lYnVzX2RtYXNbZG1hbnJdLmFkZHIsCisJCQkgICAgIHNwYXJjX2VidXNfZG1hc1tkbWFucl0uY291bnQpKQorCQlCVUcoKTsKKworCWVidXNfZG1hX2VuYWJsZSgmc3BhcmNfZWJ1c19kbWFzW2RtYW5yXS5pbmZvLCAxKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBkaXNhYmxlX2RtYSh1bnNpZ25lZCBpbnQgZG1hbnIpCit7CisJZWJ1c19kbWFfZW5hYmxlKCZzcGFyY19lYnVzX2RtYXNbZG1hbnJdLmluZm8sIDApOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGNsZWFyX2RtYV9mZih1bnNpZ25lZCBpbnQgZG1hbnIpCit7CisJLyogbm90aGluZyAqLworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHNldF9kbWFfbW9kZSh1bnNpZ25lZCBpbnQgZG1hbnIsIGNoYXIgbW9kZSkKK3sKKwllYnVzX2RtYV9wcmVwYXJlKCZzcGFyY19lYnVzX2RtYXNbZG1hbnJdLmluZm8sIChtb2RlICE9IERNQV9NT0RFX1dSSVRFKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgc2V0X2RtYV9hZGRyKHVuc2lnbmVkIGludCBkbWFuciwgdW5zaWduZWQgaW50IGFkZHIpCit7CisJc3BhcmNfZWJ1c19kbWFzW2RtYW5yXS5hZGRyID0gYWRkcjsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBzZXRfZG1hX2NvdW50KHVuc2lnbmVkIGludCBkbWFuciwgdW5zaWduZWQgaW50IGNvdW50KQoreworCXNwYXJjX2VidXNfZG1hc1tkbWFucl0uY291bnQgPSBjb3VudDsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IGdldF9kbWFfcmVzaWR1ZSh1bnNpZ25lZCBpbnQgZG1hbnIpCit7CisJcmV0dXJuIGVidXNfZG1hX3Jlc2lkdWUoJnNwYXJjX2VidXNfZG1hc1tkbWFucl0uaW5mbyk7Cit9CisKK3N0YXRpYyBpbnQgZWJ1c19lY3BwX3Aoc3RydWN0IGxpbnV4X2VidXNfZGV2aWNlICplZGV2KQoreworCWlmICghc3RyY21wKGVkZXYtPnByb21fbmFtZSwgImVjcHAiKSkKKwkJcmV0dXJuIDE7CisJaWYgKCFzdHJjbXAoZWRldi0+cHJvbV9uYW1lLCAicGFyYWxsZWwiKSkgeworCQljaGFyIGNvbXBhdFsxOV07CisJCXByb21fZ2V0c3RyaW5nKGVkZXYtPnByb21fbm9kZSwKKwkJCSAgICAgICAiY29tcGF0aWJsZSIsCisJCQkgICAgICAgY29tcGF0LCBzaXplb2YoY29tcGF0KSk7CisJCWNvbXBhdFsxOF0gPSAnXDAnOworCQlpZiAoIXN0cmNtcChjb21wYXQsICJlY3BwIikpCisJCQlyZXR1cm4gMTsKKwkJaWYgKCFzdHJjbXAoY29tcGF0LCAibnM4NzMxNy1lY3BwIikgJiYKKwkJICAgICFzdHJjbXAoY29tcGF0ICsgMTMsICJlY3BwIikpCisJCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGFycG9ydF9pc2FfcHJvYmUoaW50IGNvdW50KQoreworCXN0cnVjdCBzcGFyY19pc2FfYnJpZGdlICppc2FfYnI7CisJc3RydWN0IHNwYXJjX2lzYV9kZXZpY2UgKmlzYV9kZXY7CisKKwlmb3JfZWFjaF9pc2EoaXNhX2JyKSB7CisJCWZvcl9lYWNoX2lzYWRldihpc2FfZGV2LCBpc2FfYnIpIHsKKwkJCXN0cnVjdCBzcGFyY19pc2FfZGV2aWNlICpjaGlsZDsKKwkJCXVuc2lnbmVkIGxvbmcgYmFzZTsKKworCQkJaWYgKHN0cmNtcChpc2FfZGV2LT5wcm9tX25hbWUsICJkbWEiKSkKKwkJCQljb250aW51ZTsKKworCQkJY2hpbGQgPSBpc2FfZGV2LT5jaGlsZDsKKwkJCXdoaWxlIChjaGlsZCkgeworCQkJCWlmICghc3RyY21wKGNoaWxkLT5wcm9tX25hbWUsICJwYXJhbGxlbCIpKQorCQkJCQlicmVhazsKKwkJCQljaGlsZCA9IGNoaWxkLT5uZXh0OworCQkJfQorCQkJaWYgKCFjaGlsZCkKKwkJCQljb250aW51ZTsKKworCQkJYmFzZSA9IGNoaWxkLT5yZXNvdXJjZS5zdGFydDsKKworCQkJLyogTm8gRE1BLCBzZWUgY29tbWVudGFyeSBpbgorCQkJICogYXNtLXNwYXJjNjQvZmxvcHB5Lmg6aXNhX2Zsb3BweV9pbml0KCkKKwkJCSAqLworCQkJaWYgKHBhcnBvcnRfcGNfcHJvYmVfcG9ydChiYXNlLCBiYXNlICsgMHg0MDAsCisJCQkJCQkgIGNoaWxkLT5pcnEsIFBBUlBPUlRfRE1BX05PRklGTywKKwkJCQkJCSAgY2hpbGQtPmJ1cy0+c2VsZikpCisJCQkJY291bnQrKzsKKwkJfQorCX0KKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIGludCBwYXJwb3J0X3BjX2ZpbmRfbm9ucGNpX3BvcnRzIChpbnQgYXV0b2lycSwgaW50IGF1dG9kbWEpCit7CisJc3RydWN0IGxpbnV4X2VidXMgKmVidXM7CisJc3RydWN0IGxpbnV4X2VidXNfZGV2aWNlICplZGV2OworCWludCBjb3VudCA9IDA7CisKKwlmb3JfZWFjaF9lYnVzKGVidXMpIHsKKwkJZm9yX2VhY2hfZWJ1c2RldihlZGV2LCBlYnVzKSB7CisJCQlpZiAoZWJ1c19lY3BwX3AoZWRldikpIHsKKwkJCQl1bnNpZ25lZCBsb25nIGJhc2UgPSBlZGV2LT5yZXNvdXJjZVswXS5zdGFydDsKKwkJCQl1bnNpZ25lZCBsb25nIGNvbmZpZyA9IGVkZXYtPnJlc291cmNlWzFdLnN0YXJ0OworCQkJCXVuc2lnbmVkIGxvbmcgZF9iYXNlID0gZWRldi0+cmVzb3VyY2VbMl0uc3RhcnQ7CisJCQkJdW5zaWduZWQgbG9uZyBkX2xlbjsKKworCQkJCXNwaW5fbG9ja19pbml0KCZzcGFyY19lYnVzX2RtYXNbY291bnRdLmluZm8ubG9jayk7CisJCQkJZF9sZW4gPSAoZWRldi0+cmVzb3VyY2VbMl0uZW5kIC0KKwkJCQkJIGRfYmFzZSkgKyAxOworCQkJCXNwYXJjX2VidXNfZG1hc1tjb3VudF0uaW5mby5yZWdzID0KKwkJCQkJaW9yZW1hcChkX2Jhc2UsIGRfbGVuKTsKKwkJCQlpZiAoIXNwYXJjX2VidXNfZG1hc1tjb3VudF0uaW5mby5yZWdzKQorCQkJCQljb250aW51ZTsKKwkJCQlzcGFyY19lYnVzX2RtYXNbY291bnRdLmluZm8uZmxhZ3MgPSAwOworCQkJCXNwYXJjX2VidXNfZG1hc1tjb3VudF0uaW5mby5jYWxsYmFjayA9IE5VTEw7CisJCQkJc3BhcmNfZWJ1c19kbWFzW2NvdW50XS5pbmZvLmNsaWVudF9jb29raWUgPSBOVUxMOworCQkJCXNwYXJjX2VidXNfZG1hc1tjb3VudF0uaW5mby5pcnEgPSAweGRlYWRiZWVmOworCQkJCXN0cmNweShzcGFyY19lYnVzX2RtYXNbY291bnRdLmluZm8ubmFtZSwgInBhcnBvcnQiKTsKKwkJCQlpZiAoZWJ1c19kbWFfcmVnaXN0ZXIoJnNwYXJjX2VidXNfZG1hc1tjb3VudF0uaW5mbykpCisJCQkJCWNvbnRpbnVlOworCQkJCWVidXNfZG1hX2lycV9lbmFibGUoJnNwYXJjX2VidXNfZG1hc1tjb3VudF0uaW5mbywgMSk7CisKKwkJCQkvKiBDb25maWd1cmUgSVJRIHRvIFB1c2ggUHVsbCwgTGV2ZWwgTG93ICovCisJCQkJLyogRW5hYmxlIEVDUCwgc2V0IGJpdCAyIG9mIHRoZSBDVFIgZmlyc3QgKi8KKwkJCQlvdXRiKDB4MDQsIGJhc2UgKyAweDAyKTsKKwkJCQluczg3MzAzX21vZGlmeShjb25maWcsIFBDUiwKKwkJCQkJICAgICAgIFBDUl9FUFBfRU5BQkxFIHwKKwkJCQkJICAgICAgIFBDUl9JUlFfT0RSQUlOLAorCQkJCQkgICAgICAgUENSX0VDUF9FTkFCTEUgfAorCQkJCQkgICAgICAgUENSX0VDUF9DTEtfRU5BIHwKKwkJCQkJICAgICAgIFBDUl9JUlFfUE9MQVIpOworCisJCQkJLyogQ1RSIGJpdCA1IGNvbnRyb2xzIGRpcmVjdGlvbiBvZiBwb3J0ICovCisJCQkJbnM4NzMwM19tb2RpZnkoY29uZmlnLCBQVFIsCisJCQkJCSAgICAgICAwLCBQVFJfTFBUX1JFR19ESVIpOworCisJCQkJaWYgKHBhcnBvcnRfcGNfcHJvYmVfcG9ydChiYXNlLCBiYXNlICsgMHg0MDAsCisJCQkJCQkJICBlZGV2LT5pcnFzWzBdLAorCQkJCQkJCSAgY291bnQsIGVidXMtPnNlbGYpKQorCQkJCQljb3VudCsrOworCQkJfQorCQl9CisJfQorCisJY291bnQgPSBwYXJwb3J0X2lzYV9wcm9iZShjb3VudCk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKyNlbmRpZiAvKiAhKF9BU01fU1BBUkM2NF9QQVJQT1JUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGJtLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3BibS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyOTk5NjMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3BibS5oCkBAIC0wLDAgKzEsMjQ4IEBACisvKiAkSWQ6IHBibS5oLHYgMS4yNyAyMDAxLzA4LzEyIDEzOjE4OjIzIGRhdmVtIEV4cCAkCisgKiBwYm0uaDogVWx0cmFTcGFyYyBQQ0kgY29udHJvbGxlciBzb2Z0d2FyZSBzdGF0ZS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTgsIDE5OTkgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUByZWRoYXQuY29tKQorICovCisKKyNpZm5kZWYgX19TUEFSQzY0X1BCTV9ICisjZGVmaW5lIF9fU1BBUkM2NF9QQk1fSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vb3BsaWIuaD4KKworLyogVGhlIGFic3RyYWN0aW9uIHVzZWQgaGVyZSBpcyB0aGF0IHRoZXJlIGFyZSBQQ0kgY29udHJvbGxlcnMsCisgKiBlYWNoIHdpdGggb25lIChTYWJyZSkgb3IgdHdvIChQU1lDSE8vU0NISVpPKSBQQ0kgYnVzIG1vZHVsZXMKKyAqIHVuZGVybmVhdGguICBFYWNoIFBDSSBidXMgbW9kdWxlIHVzZXMgYW4gSU9NTVUgKHNoYXJlZCBieSBib3RoCisgKiBQQk1zIG9mIGEgY29udHJvbGxlciwgb3IgcGVyLVBCTSksIGFuZCBpZiBhIHN0cmVhbWluZyBidWZmZXIKKyAqIGlzIHByZXNlbnQsIGVhY2ggUENJIGJ1cyBtb2R1bGUgaGFzIGl0J3Mgb3duLiAoaWUuIHRoZSBJT01NVQorICogbWlnaHQgYmUgc2hhcmVkIGJldHdlZW4gUEJNcywgdGhlIFNUQyBpcyBuZXZlciBzaGFyZWQpCisgKiBGdXJ0aGVybW9yZSwgZWFjaCBQQ0kgYnVzIG1vZHVsZSBjb250cm9scyBpdCdzIG93biBhdXRvbm9tb3VzCisgKiBQQ0kgYnVzLgorICovCisKKyNkZWZpbmUgUEJNX0xPR0NMVVNURVJTIDMKKyNkZWZpbmUgUEJNX05DTFVTVEVSUyAoMSA8PCBQQk1fTE9HQ0xVU1RFUlMpCisKK3N0cnVjdCBwY2lfY29udHJvbGxlcl9pbmZvOworCisvKiBUaGlzIGNvbnRhaW5zIHRoZSBzb2Z0d2FyZSBzdGF0ZSBuZWNlc3NhcnkgdG8gZHJpdmUgYSBQQ0kKKyAqIGNvbnRyb2xsZXIncyBJT01NVS4KKyAqLworc3RydWN0IHBjaV9pb21tdSB7CisJLyogVGhpcyBwcm90ZWN0cyB0aGUgY29udHJvbGxlcidzIElPTU1VIGFuZCBhbGwKKwkgKiBzdHJlYW1pbmcgYnVmZmVycyB1bmRlcm5lYXRoLgorCSAqLworCXNwaW5sb2NrX3QJbG9jazsKKworCS8qIENvbnRleHQgYWxsb2NhdG9yLiAqLworCXVuc2lnbmVkIGludAlpb21tdV9jdXJfY3R4OworCisJLyogSU9NTVUgcGFnZSB0YWJsZSwgYSBsaW5lYXIgYXJyYXkgb2YgaW9wdGVzLiAqLworCWlvcHRlX3QJCSpwYWdlX3RhYmxlOwkJLyogVGhlIHBhZ2UgdGFibGUgaXRzZWxmLiAqLworCWludAkJcGFnZV90YWJsZV9zel9iaXRzOwkvKiBsb2cyIG9mIG93IG1hbnkgcGFnZXMgZG9lcyBpdCBtYXA/ICovCisKKwkvKiBCYXNlIFBDSSBtZW1vcnkgc3BhY2UgYWRkcmVzcyB3aGVyZSBJT01NVSBtYXBwaW5ncworCSAqIGJlZ2luLgorCSAqLworCXUzMgkJcGFnZV90YWJsZV9tYXBfYmFzZTsKKworCS8qIElPTU1VIENvbnRyb2xsZXIgUmVnaXN0ZXJzICovCisJdW5zaWduZWQgbG9uZwlpb21tdV9jb250cm9sOwkJLyogSU9NTVUgY29udHJvbCByZWdpc3RlciAqLworCXVuc2lnbmVkIGxvbmcJaW9tbXVfdHNiYmFzZTsJCS8qIElPTU1VIHBhZ2UgdGFibGUgYmFzZSByZWdpc3RlciAqLworCXVuc2lnbmVkIGxvbmcJaW9tbXVfZmx1c2g7CQkvKiBJT01NVSBwYWdlIGZsdXNoIHJlZ2lzdGVyICovCisJdW5zaWduZWQgbG9uZwlpb21tdV9jdHhmbHVzaDsJCS8qIElPTU1VIGNvbnRleHQgZmx1c2ggcmVnaXN0ZXIgKi8KKworCS8qIFRoaXMgaXMgYSByZWdpc3RlciBpbiB0aGUgUENJIGNvbnRyb2xsZXIsIHdoaWNoIGlmCisJICogcmVhZCB3aWxsIGhhdmUgbm8gc2lkZS1lZmZlY3RzIGJ1dCB3aWxsIGd1YXJhbnRlZQorCSAqIGNvbXBsZXRpb24gb2YgYWxsIHByZXZpb3VzIHdyaXRlcyBpbnRvIElPTU1VL1NUQy4KKwkgKi8KKwl1bnNpZ25lZCBsb25nCXdyaXRlX2NvbXBsZXRlX3JlZzsKKworCS8qIFRoZSBsb3dlc3QgdXNlZCBjb25zaXN0ZW50IG1hcHBpbmcgZW50cnkuICBTaW5jZQorCSAqIHdlIGFsbG9jYXRlIGNvbnNpc3RlbnQgbWFwcyBvdXQgb2YgY2x1c3RlciAwIHRoaXMKKwkgKiBpcyByZWxhdGl2ZSB0byB0aGUgYmVnaW5uaW5nIG9mIGNsb3N0ZXIgMC4KKwkgKi8KKwl1MzIJCWxvd2VzdF9jb25zaXN0ZW50X21hcDsKKworCS8qIEluIG9yZGVyIHRvIGRlYWwgd2l0aCBzb21lIGJ1Z2d5IHRoaXJkLXBhcnR5IFBDSSBicmlkZ2VzIHRoYXQKKwkgKiBkbyB3cm9uZyBwcmVmZXRjaGluZywgd2UgbmV2ZXIgbWFyayB2YWxpZCBtYXBwaW5ncyBhcyBpbnZhbGlkLgorCSAqIEluc3RlYWQgd2UgcG9pbnQgdGhlbSBhdCB0aGlzIGR1bW15IHBhZ2UuCisJICovCisJdW5zaWduZWQgbG9uZwlkdW1teV9wYWdlOworCXVuc2lnbmVkIGxvbmcJZHVtbXlfcGFnZV9wYTsKKworCS8qIElmIFBCTV9OQ0xVU1RFUlMgaXMgZXZlciBkZWNyZWFzZWQgdG8gNCBvciBsb3dlciwKKwkgKiBvciBpZiBsYXJnZXN0IHN1cHBvcnRlZCBwYWdlX3RhYmxlX3N6ICogOEsgZ29lcyBhYm92ZQorCSAqIDJHQiwgeW91IG11c3QgaW5jcmVhc2UgdGhlIHNpemUgb2YgdGhlIHR5cGUgb2YKKwkgKiB0aGVzZSBjb3VudGVycy4gIFlvdSBoYXZlIGJlZW4gZHVseSB3YXJuZWQuIC1EYXZlTQorCSAqLworCXN0cnVjdCB7CisJCXUxNgluZXh0OworCQl1MTYJZmx1c2g7CisJfSBhbGxvY19pbmZvW1BCTV9OQ0xVU1RFUlNdOworCisJLyogSGVyZSBhIFBDSSBjb250cm9sbGVyIGRyaXZlciBkZXNjcmliZXMgdGhlIGFyZWFzIG9mCisJICogUENJIG1lbW9yeSBzcGFjZSB3aGVyZSBETUEgdG8vZnJvbSBwaHlzaWNhbCBtZW1vcnkKKwkgKiBhcmUgYWRkcmVzc2VkLiAgRHJpdmVycyBpbnRlcnJvZ2F0ZSB0aGUgUENJIGxheWVyCisJICogaWYgdGhlaXIgZGV2aWNlIGhhcyBhZGRyZXNzaW5nIGxpbWl0YXRpb25zLiAgVGhleQorCSAqIGRvIHNvIHZpYSBwY2lfZG1hX3N1cHBvcnRlZCwgYW5kIHBhc3MgaW4gYSBtYXNrIG9mCisJICogRE1BIGFkZHJlc3MgYml0cyB0aGVpciBkZXZpY2UgY2FuIGFjdHVhbGx5IGRyaXZlLgorCSAqCisJICogVGhlIHRlc3QgZm9yIGJlaW5nIHVzYWJsZSBpczoKKwkgKiAJKGRldmljZV9tYXNrICYgZG1hX2FkZHJfbWFzaykgPT0gZG1hX2FkZHJfbWFzaworCSAqLworCXUzMiBkbWFfYWRkcl9tYXNrOworfTsKKworZXh0ZXJuIHZvaWQgcGNpX2lvbW11X3RhYmxlX2luaXQoc3RydWN0IHBjaV9pb21tdSAqLCBpbnQpOworCisvKiBUaGlzIGRlc2NyaWJlcyBhIFBDSSBidXMgbW9kdWxlJ3Mgc3RyZWFtaW5nIGJ1ZmZlci4gKi8KK3N0cnVjdCBwY2lfc3RyYnVmIHsKKwlpbnQJCXN0cmJ1Zl9lbmFibGVkOwkJLyogUHJlc2VudCBhbmQgdXNpbmcgaXQ/ICovCisKKwkvKiBTdHJlYW1pbmcgQnVmZmVyIENvbnRyb2wgUmVnaXN0ZXJzICovCisJdW5zaWduZWQgbG9uZwlzdHJidWZfY29udHJvbDsJCS8qIFNUQyBjb250cm9sIHJlZ2lzdGVyICovCisJdW5zaWduZWQgbG9uZwlzdHJidWZfcGZsdXNoOwkJLyogU1RDIHBhZ2UgZmx1c2ggcmVnaXN0ZXIgKi8KKwl1bnNpZ25lZCBsb25nCXN0cmJ1Zl9mc3luYzsJCS8qIFNUQyBmbHVzaCBzeW5jaHJvbml6YXRpb24gcmVnICovCisJdW5zaWduZWQgbG9uZwlzdHJidWZfY3R4Zmx1c2g7CS8qIFNUQyBjb250ZXh0IGZsdXNoIHJlZ2lzdGVyICovCisJdW5zaWduZWQgbG9uZwlzdHJidWZfY3R4bWF0Y2hfYmFzZTsJLyogU1RDIGNvbnRleHQgZmx1c2ggbWF0Y2ggcmVnICovCisJdW5zaWduZWQgbG9uZwlzdHJidWZfZmx1c2hmbGFnX3BhOwkvKiBQaHlzaWNhbCBhZGRyZXNzIG9mIGZsdXNoIGZsYWcgKi8KKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nICpzdHJidWZfZmx1c2hmbGFnOyAvKiBUaGUgZmx1c2ggZmxhZyBpdHNlbGYgKi8KKworCS8qIEFuZCB0aGlzIGlzIHRoZSBhY3R1YWwgZmx1c2ggZmxhZyBhcmVhLgorCSAqIFdlIGFsbG9jYXRlIGV4dHJhIGJlY2F1c2UgdGhlIGNoaXBzIHJlcXVpcmUKKwkgKiBhIDY0LWJ5dGUgYWxpZ25lZCBhcmVhLgorCSAqLworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcJX19mbHVzaGZsYWdfYnVmWyg2NCArICg2NCAtIDEpKSAvIHNpemVvZihsb25nKV07Cit9OworCisjZGVmaW5lIFBDSV9TVENfRkxVU0hGTEFHX0lOSVQoU1RDKSBcCisJKCooKFNUQyktPnN0cmJ1Zl9mbHVzaGZsYWcpID0gMFVMKQorI2RlZmluZSBQQ0lfU1RDX0ZMVVNIRkxBR19TRVQoU1RDKSBcCisJKCooKFNUQyktPnN0cmJ1Zl9mbHVzaGZsYWcpICE9IDBVTCkKKworLyogVGhlcmUgY2FuIGJlIHF1aXRlIGEgZmV3IHJhbmdlcyBhbmQgaW50ZXJydXB0IG1hcHMgb24gYSBQQ0kKKyAqIHNlZ21lbnQuICBUaHVzLi4uCisgKi8KKyNkZWZpbmUgUFJPTV9QQ0lSTkdfTUFYCQk2NAorI2RlZmluZSBQUk9NX1BDSUlNQVBfTUFYCTY0CisKK3N0cnVjdCBwY2lfcGJtX2luZm8geworCS8qIFBDSSBjb250cm9sbGVyIHdlIHNpdCB1bmRlci4gKi8KKwlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXJfaW5mbwkqcGFyZW50OworCisJLyogUGh5c2ljYWwgYWRkcmVzcyBiYXNlIG9mIGNvbnRyb2xsZXIgcmVnaXN0ZXJzLiAqLworCXVuc2lnbmVkIGxvbmcJCQljb250cm9sbGVyX3JlZ3M7CisKKwkvKiBQaHlzaWNhbCBhZGRyZXNzIGJhc2Ugb2YgUEJNIHJlZ2lzdGVycy4gKi8KKwl1bnNpZ25lZCBsb25nCQkJcGJtX3JlZ3M7CisKKwkvKiBPcGFxdWUgMzItYml0IHN5c3RlbSBidXMgUG9ydCBJRC4gKi8KKwl1MzIJCQkJcG9ydGlkOworCisJLyogQ2hpcHNldCB2ZXJzaW9uIGluZm9ybWF0aW9uLiAqLworCWludAkJCQljaGlwX3R5cGU7CisjZGVmaW5lIFBCTV9DSElQX1RZUEVfU0FCUkUJCTEKKyNkZWZpbmUgUEJNX0NISVBfVFlQRV9QU1lDSE8JCTIKKyNkZWZpbmUgUEJNX0NISVBfVFlQRV9TQ0hJWk8JCTMKKyNkZWZpbmUgUEJNX0NISVBfVFlQRV9TQ0hJWk9fUExVUwk0CisjZGVmaW5lIFBCTV9DSElQX1RZUEVfVE9NQVRJTExPCQk1CisJaW50CQkJCWNoaXBfdmVyc2lvbjsKKwlpbnQJCQkJY2hpcF9yZXZpc2lvbjsKKworCS8qIE5hbWUgdXNlZCBmb3IgdG9wLWxldmVsIHJlc291cmNlcy4gKi8KKwljaGFyCQkJCW5hbWVbNjRdOworCisJLyogT0JQIHNwZWNpZmljIGluZm9ybWF0aW9uLiAqLworCWludAkJCQlwcm9tX25vZGU7CisJY2hhcgkJCQlwcm9tX25hbWVbNjRdOworCXN0cnVjdCBsaW51eF9wcm9tX3BjaV9yYW5nZXMJcGJtX3Jhbmdlc1tQUk9NX1BDSVJOR19NQVhdOworCWludAkJCQludW1fcGJtX3JhbmdlczsKKwlzdHJ1Y3QgbGludXhfcHJvbV9wY2lfaW50bWFwCXBibV9pbnRtYXBbUFJPTV9QQ0lJTUFQX01BWF07CisJaW50CQkJCW51bV9wYm1faW50bWFwOworCXN0cnVjdCBsaW51eF9wcm9tX3BjaV9pbnRtYXNrCXBibV9pbnRtYXNrOworCXU2NAkJCQlpbm9fYml0bWFwOworCisJLyogUEJNIEkvTyBhbmQgTWVtb3J5IHNwYWNlIHJlc291cmNlcy4gKi8KKwlzdHJ1Y3QgcmVzb3VyY2UJCQlpb19zcGFjZTsKKwlzdHJ1Y3QgcmVzb3VyY2UJCQltZW1fc3BhY2U7CisKKwkvKiBCYXNlIG9mIFBDSSBDb25maWcgc3BhY2UsIGNhbiBiZSBwZXItUEJNIG9yIHNoYXJlZC4gKi8KKwl1bnNpZ25lZCBsb25nCQkJY29uZmlnX3NwYWNlOworCisJLyogU3RhdGUgb2YgNjZNSHogY2FwYWJpbGl0aWVzIG9uIHRoaXMgUEJNLiAqLworCWludAkJCQlpc182Nm1oel9jYXBhYmxlOworCWludAkJCQlhbGxfZGV2c182Nm1oejsKKworCS8qIFRoaXMgUEJNJ3Mgc3RyZWFtaW5nIGJ1ZmZlci4gKi8KKwlzdHJ1Y3QgcGNpX3N0cmJ1ZgkJc3RjOworCisJLyogSU9NTVUgc3RhdGUsIHBvdGVudGlhbGx5IHNoYXJlZCBieSBib3RoIFBCTSBzZWdtZW50cy4gKi8KKwlzdHJ1Y3QgcGNpX2lvbW11CQkqaW9tbXU7CisKKwkvKiBQQ0kgc2xvdCBtYXBwaW5nLiAqLworCXVuc2lnbmVkIGludAkJCXBjaV9maXJzdF9zbG90OworCisJLyogTm93IHRoaW5ncyBmb3IgdGhlIGFjdHVhbCBQQ0kgYnVzIHByb2Jlcy4gKi8KKwl1bnNpZ25lZCBpbnQJCQlwY2lfZmlyc3RfYnVzbm87CisJdW5zaWduZWQgaW50CQkJcGNpX2xhc3RfYnVzbm87CisJc3RydWN0IHBjaV9idXMJCQkqcGNpX2J1czsKK307CisKK3N0cnVjdCBwY2lfY29udHJvbGxlcl9pbmZvIHsKKwkvKiBMaXN0IG9mIGFsbCBQQ0kgY29udHJvbGxlcnMuICovCisJc3RydWN0IHBjaV9jb250cm9sbGVyX2luZm8JKm5leHQ7CisKKwkvKiBFYWNoIGNvbnRyb2xsZXIgZ2V0cyBhIHVuaXF1ZSBpbmRleCwgdXNlZCBtb3N0bHkgZm9yCisJICogZXJyb3IgbG9nZ2luZyBwdXJwb3Nlcy4KKwkgKi8KKwlpbnQJCQkJaW5kZXg7CisKKwkvKiBEbyB0aGUgUEJNcyBib3RoIGV4aXN0IGluIHRoZSBzYW1lIFBDSSBkb21haW4/ICovCisJaW50CQkJCXBibXNfc2FtZV9kb21haW47CisKKwkvKiBUaGUgUENJIGJ1cyBtb2R1bGVzIGNvbnRyb2xsZWQgYnkgdXMuICovCisJc3RydWN0IHBjaV9wYm1faW5mbwkJcGJtX0E7CisJc3RydWN0IHBjaV9wYm1faW5mbwkJcGJtX0I7CisKKwkvKiBPcGVyYXRpb25zIHdoaWNoIGFyZSBjb250cm9sbGVyIHNwZWNpZmljLiAqLworCXZvaWQgKCpzY2FuX2J1cykoc3RydWN0IHBjaV9jb250cm9sbGVyX2luZm8gKik7CisJdW5zaWduZWQgaW50ICgqaXJxX2J1aWxkKShzdHJ1Y3QgcGNpX3BibV9pbmZvICosIHN0cnVjdCBwY2lfZGV2ICosIHVuc2lnbmVkIGludCk7CisJdm9pZCAoKmJhc2VfYWRkcmVzc191cGRhdGUpKHN0cnVjdCBwY2lfZGV2ICosIGludCk7CisJdm9pZCAoKnJlc291cmNlX2FkanVzdCkoc3RydWN0IHBjaV9kZXYgKiwgc3RydWN0IHJlc291cmNlICosIHN0cnVjdCByZXNvdXJjZSAqKTsKKworCS8qIE5vdyB0aGluZ3MgZm9yIHRoZSBhY3R1YWwgUENJIGJ1cyBwcm9iZXMuICovCisJc3RydWN0IHBjaV9vcHMJCQkqcGNpX29wczsKKwl1bnNpZ25lZCBpbnQJCQlwY2lfZmlyc3RfYnVzbm87CisJdW5zaWduZWQgaW50CQkJcGNpX2xhc3RfYnVzbm87CisKKwl2b2lkCQkJCSpzdGFyZmlyZV9jb29raWU7Cit9OworCisvKiBQQ0kgZGV2aWNlcyB3aGljaCBhcmUgbm90IGJyaWRnZXMgaGF2ZSB0aGlzIHBsYWNlZCBpbiB0aGVpciBwY2lfZGV2CisgKiBzeXNkYXRhIG1lbWJlci4gIFRoaXMgbWFrZXMgT0JQIGF3YXJlIFBDSSBkZXZpY2UgZHJpdmVycyBlYXNpZXIgdG8KKyAqIGNvZGUuCisgKi8KK3N0cnVjdCBwY2lkZXZfY29va2llIHsKKwlzdHJ1Y3QgcGNpX3BibV9pbmZvCQkqcGJtOworCWNoYXIJCQkJcHJvbV9uYW1lWzY0XTsKKwlpbnQJCQkJcHJvbV9ub2RlOworCXN0cnVjdCBsaW51eF9wcm9tX3BjaV9yZWdpc3RlcnMJcHJvbV9yZWdzW1BST01SRUdfTUFYXTsKKwlpbnQgbnVtX3Byb21fcmVnczsKKwlzdHJ1Y3QgbGludXhfcHJvbV9wY2lfcmVnaXN0ZXJzIHByb21fYXNzaWdubWVudHNbUFJPTVJFR19NQVhdOworCWludCBudW1fcHJvbV9hc3NpZ25tZW50czsKK307CisKKy8qIEN1cnJlbnRseSB0aGVzZSBhcmUgdGhlIHNhbWUgYWNyb3NzIGFsbCBQQ0kgY29udHJvbGxlcnMKKyAqIHdlIHN1cHBvcnQuICBTb21lZGF5IHRoZXkgbWF5IG5vdCBiZS4uLgorICovCisjZGVmaW5lIFBDSV9JUlFfSUdOCTB4MDAwMDA3YzAJLyogSW50ZXJydXB0IEdyb3VwIE51bWJlciAqLworI2RlZmluZSBQQ0lfSVJRX0lOTwkweDAwMDAwMDNmCS8qIEludGVycnVwdCBOdW1iZXIgKi8KKworI2VuZGlmIC8qICEoX19TUEFSQzY0X1BCTV9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9wY2kuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGNpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmEwYzg1YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGNpLmgKQEAgLTAsMCArMSwyNjQgQEAKKyNpZm5kZWYgX19TUEFSQzY0X1BDSV9ICisjZGVmaW5lIF9fU1BBUkM2NF9QQ0lfSAorCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorCisvKiBDYW4gYmUgdXNlZCB0byBvdmVycmlkZSB0aGUgbG9naWMgaW4gcGNpX3NjYW5fYnVzIGZvciBza2lwcGluZworICogYWxyZWFkeS1jb25maWd1cmVkIGJ1cyBudW1iZXJzIC0gdG8gYmUgdXNlZCBmb3IgYnVnZ3kgQklPU2VzCisgKiBvciBhcmNoaXRlY3R1cmVzIHdpdGggaW5jb21wbGV0ZSBQQ0kgc2V0dXAgYnkgdGhlIGxvYWRlci4KKyAqLworI2RlZmluZSBwY2liaW9zX2Fzc2lnbl9hbGxfYnVzc2VzKCkJMAorI2RlZmluZSBwY2liaW9zX3NjYW5fYWxsX2ZucyhhLCBiKQkwCisKKyNkZWZpbmUgUENJQklPU19NSU5fSU8JCTBVTAorI2RlZmluZSBQQ0lCSU9TX01JTl9NRU0JCTBVTAorCisjZGVmaW5lIFBDSV9JUlFfTk9ORQkJMHhmZmZmZmZmZgorCitzdGF0aWMgaW5saW5lIHZvaWQgcGNpYmlvc19zZXRfbWFzdGVyKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJLyogTm8gc3BlY2lhbCBidXMgbWFzdGVyaW5nIHNldHVwIGhhbmRsaW5nICovCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwY2liaW9zX3BlbmFsaXplX2lzYV9pcnEoaW50IGlycSkKK3sKKwkvKiBXZSBkb24ndCBkbyBkeW5hbWljIFBDSSBJUlEgYWxsb2NhdGlvbiAqLworfQorCisvKiBEeW5hbWljIERNQSBtYXBwaW5nIHN0dWZmLgorICovCisKKy8qIFRoZSBQQ0kgYWRkcmVzcyBzcGFjZSBkb2VzIG5vdCBlcXVhbCB0aGUgcGh5c2ljYWwgbWVtb3J5CisgKiBhZGRyZXNzIHNwYWNlLiAgVGhlIG5ldHdvcmtpbmcgYW5kIGJsb2NrIGRldmljZSBsYXllcnMgdXNlCisgKiB0aGlzIGJvb2xlYW4gZm9yIGJvdW5jZSBidWZmZXIgZGVjaXNpb25zLgorICovCisjZGVmaW5lIFBDSV9ETUFfQlVTX0lTX1BIWVMJKDApCisKKyNpbmNsdWRlIDxhc20vc2NhdHRlcmxpc3QuaD4KKworc3RydWN0IHBjaV9kZXY7CisKKy8qIEFsbG9jYXRlIGFuZCBtYXAga2VybmVsIGJ1ZmZlciB1c2luZyBjb25zaXN0ZW50IG1vZGUgRE1BIGZvciBhIGRldmljZS4KKyAqIGh3ZGV2IHNob3VsZCBiZSB2YWxpZCBzdHJ1Y3QgcGNpX2RldiBwb2ludGVyIGZvciBQQ0kgZGV2aWNlcy4KKyAqLworZXh0ZXJuIHZvaWQgKnBjaV9hbGxvY19jb25zaXN0ZW50KHN0cnVjdCBwY2lfZGV2ICpod2Rldiwgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUpOworCisvKiBGcmVlIGFuZCB1bm1hcCBhIGNvbnNpc3RlbnQgRE1BIGJ1ZmZlci4KKyAqIGNwdV9hZGRyIGlzIHdoYXQgd2FzIHJldHVybmVkIGZyb20gcGNpX2FsbG9jX2NvbnNpc3RlbnQsCisgKiBzaXplIG11c3QgYmUgdGhlIHNhbWUgYXMgd2hhdCBhcyBwYXNzZWQgaW50byBwY2lfYWxsb2NfY29uc2lzdGVudCwKKyAqIGFuZCBsaWtld2lzZSBkbWFfYWRkciBtdXN0IGJlIHRoZSBzYW1lIGFzIHdoYXQgKmRtYV9hZGRycCB3YXMgc2V0IHRvLgorICoKKyAqIFJlZmVyZW5jZXMgdG8gdGhlIG1lbW9yeSBhbmQgbWFwcGluZ3MgYXNzb2NpYXRlZCB3aXRoIGNwdV9hZGRyL2RtYV9hZGRyCisgKiBwYXN0IHRoaXMgY2FsbCBhcmUgaWxsZWdhbC4KKyAqLworZXh0ZXJuIHZvaWQgcGNpX2ZyZWVfY29uc2lzdGVudChzdHJ1Y3QgcGNpX2RldiAqaHdkZXYsIHNpemVfdCBzaXplLCB2b2lkICp2YWRkciwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlKTsKKworLyogTWFwIGEgc2luZ2xlIGJ1ZmZlciBvZiB0aGUgaW5kaWNhdGVkIHNpemUgZm9yIERNQSBpbiBzdHJlYW1pbmcgbW9kZS4KKyAqIFRoZSAzMi1iaXQgYnVzIGFkZHJlc3MgdG8gdXNlIGlzIHJldHVybmVkLgorICoKKyAqIE9uY2UgdGhlIGRldmljZSBpcyBnaXZlbiB0aGUgZG1hIGFkZHJlc3MsIHRoZSBkZXZpY2Ugb3ducyB0aGlzIG1lbW9yeQorICogdW50aWwgZWl0aGVyIHBjaV91bm1hcF9zaW5nbGUgb3IgcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1IGlzIHBlcmZvcm1lZC4KKyAqLworZXh0ZXJuIGRtYV9hZGRyX3QgcGNpX21hcF9zaW5nbGUoc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCB2b2lkICpwdHIsIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKTsKKworLyogVW5tYXAgYSBzaW5nbGUgc3RyZWFtaW5nIG1vZGUgRE1BIHRyYW5zbGF0aW9uLiAgVGhlIGRtYV9hZGRyIGFuZCBzaXplCisgKiBtdXN0IG1hdGNoIHdoYXQgd2FzIHByb3ZpZGVkIGZvciBpbiBhIHByZXZpb3VzIHBjaV9tYXBfc2luZ2xlIGNhbGwuICBBbGwKKyAqIG90aGVyIHVzYWdlcyBhcmUgdW5kZWZpbmVkLgorICoKKyAqIEFmdGVyIHRoaXMgY2FsbCwgcmVhZHMgYnkgdGhlIGNwdSB0byB0aGUgYnVmZmVyIGFyZSBndWFyYW50ZWVkIHRvIHNlZQorICogd2hhdGV2ZXIgdGhlIGRldmljZSB3cm90ZSB0aGVyZS4KKyAqLworZXh0ZXJuIHZvaWQgcGNpX3VubWFwX3NpbmdsZShzdHJ1Y3QgcGNpX2RldiAqaHdkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIsIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKTsKKworLyogTm8gaGlnaG1lbSBvbiBzcGFyYzY0LCBwbHVzIHdlIGhhdmUgYW4gSU9NTVUsIHNvIG1hcHBpbmcgcGFnZXMgaXMgZWFzeS4gKi8KKyNkZWZpbmUgcGNpX21hcF9wYWdlKGRldiwgcGFnZSwgb2ZmLCBzaXplLCBkaXIpIFwKKwlwY2lfbWFwX3NpbmdsZShkZXYsIChwYWdlX2FkZHJlc3MocGFnZSkgKyAob2ZmKSksIHNpemUsIGRpcikKKyNkZWZpbmUgcGNpX3VubWFwX3BhZ2UoZGV2LGFkZHIsc3osZGlyKSBwY2lfdW5tYXBfc2luZ2xlKGRldixhZGRyLHN6LGRpcikKKworLyogcGNpX3VubWFwX3tzaW5nbGUscGFnZX0gaXMgbm90IGEgbm9wLCB0aHVzLi4uICovCisjZGVmaW5lIERFQ0xBUkVfUENJX1VOTUFQX0FERFIoQUREUl9OQU1FKQlcCisJZG1hX2FkZHJfdCBBRERSX05BTUU7CisjZGVmaW5lIERFQ0xBUkVfUENJX1VOTUFQX0xFTihMRU5fTkFNRSkJCVwKKwlfX3UzMiBMRU5fTkFNRTsKKyNkZWZpbmUgcGNpX3VubWFwX2FkZHIoUFRSLCBBRERSX05BTUUpCQkJXAorCSgoUFRSKS0+QUREUl9OQU1FKQorI2RlZmluZSBwY2lfdW5tYXBfYWRkcl9zZXQoUFRSLCBBRERSX05BTUUsIFZBTCkJCVwKKwkoKChQVFIpLT5BRERSX05BTUUpID0gKFZBTCkpCisjZGVmaW5lIHBjaV91bm1hcF9sZW4oUFRSLCBMRU5fTkFNRSkJCQlcCisJKChQVFIpLT5MRU5fTkFNRSkKKyNkZWZpbmUgcGNpX3VubWFwX2xlbl9zZXQoUFRSLCBMRU5fTkFNRSwgVkFMKQkJXAorCSgoKFBUUiktPkxFTl9OQU1FKSA9IChWQUwpKQorCisvKiBNYXAgYSBzZXQgb2YgYnVmZmVycyBkZXNjcmliZWQgYnkgc2NhdHRlcmxpc3QgaW4gc3RyZWFtaW5nCisgKiBtb2RlIGZvciBETUEuICBUaGlzIGlzIHRoZSBzY2F0dGVyLWdhdGhlciB2ZXJzaW9uIG9mIHRoZQorICogYWJvdmUgcGNpX21hcF9zaW5nbGUgaW50ZXJmYWNlLiAgSGVyZSB0aGUgc2NhdHRlciBnYXRoZXIgbGlzdAorICogZWxlbWVudHMgYXJlIGVhY2ggdGFnZ2VkIHdpdGggdGhlIGFwcHJvcHJpYXRlIGRtYSBhZGRyZXNzCisgKiBhbmQgbGVuZ3RoLiAgVGhleSBhcmUgb2J0YWluZWQgdmlhIHNnX2RtYV97YWRkcmVzcyxsZW5ndGh9KFNHKS4KKyAqCisgKiBOT1RFOiBBbiBpbXBsZW1lbnRhdGlvbiBtYXkgYmUgYWJsZSB0byB1c2UgYSBzbWFsbGVyIG51bWJlciBvZgorICogICAgICAgRE1BIGFkZHJlc3MvbGVuZ3RoIHBhaXJzIHRoYW4gdGhlcmUgYXJlIFNHIHRhYmxlIGVsZW1lbnRzLgorICogICAgICAgKGZvciBleGFtcGxlIHZpYSB2aXJ0dWFsIG1hcHBpbmcgY2FwYWJpbGl0aWVzKQorICogICAgICAgVGhlIHJvdXRpbmUgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGFkZHIvbGVuZ3RoIHBhaXJzIGFjdHVhbGx5CisgKiAgICAgICB1c2VkLCBhdCBtb3N0IG5lbnRzLgorICoKKyAqIERldmljZSBvd25lcnNoaXAgaXNzdWVzIGFzIG1lbnRpb25lZCBhYm92ZSBmb3IgcGNpX21hcF9zaW5nbGUgYXJlCisgKiB0aGUgc2FtZSBoZXJlLgorICovCitleHRlcm4gaW50IHBjaV9tYXBfc2coc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCQkgICAgICBpbnQgbmVudHMsIGludCBkaXJlY3Rpb24pOworCisvKiBVbm1hcCBhIHNldCBvZiBzdHJlYW1pbmcgbW9kZSBETUEgdHJhbnNsYXRpb25zLgorICogQWdhaW4sIGNwdSByZWFkIHJ1bGVzIGNvbmNlcm5pbmcgY2FsbHMgaGVyZSBhcmUgdGhlIHNhbWUgYXMgZm9yCisgKiBwY2lfdW5tYXBfc2luZ2xlKCkgYWJvdmUuCisgKi8KK2V4dGVybiB2b2lkIHBjaV91bm1hcF9zZyhzdHJ1Y3QgcGNpX2RldiAqaHdkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJCQkgaW50IG5od2VudHMsIGludCBkaXJlY3Rpb24pOworCisvKiBNYWtlIHBoeXNpY2FsIG1lbW9yeSBjb25zaXN0ZW50IGZvciBhIHNpbmdsZQorICogc3RyZWFtaW5nIG1vZGUgRE1BIHRyYW5zbGF0aW9uIGFmdGVyIGEgdHJhbnNmZXIuCisgKgorICogSWYgeW91IHBlcmZvcm0gYSBwY2lfbWFwX3NpbmdsZSgpIGJ1dCB3aXNoIHRvIGludGVycm9nYXRlIHRoZQorICogYnVmZmVyIHVzaW5nIHRoZSBjcHUsIHlldCBkbyBub3Qgd2lzaCB0byB0ZWFyZG93biB0aGUgUENJIGRtYQorICogbWFwcGluZywgeW91IG11c3QgY2FsbCB0aGlzIGZ1bmN0aW9uIGJlZm9yZSBkb2luZyBzby4gIEF0IHRoZQorICogbmV4dCBwb2ludCB5b3UgZ2l2ZSB0aGUgUENJIGRtYSBhZGRyZXNzIGJhY2sgdG8gdGhlIGNhcmQsIHlvdQorICogbXVzdCBmaXJzdCBwZXJmb3JtIGEgcGNpX2RtYV9zeW5jX2Zvcl9kZXZpY2UsIGFuZCB0aGVuIHRoZQorICogZGV2aWNlIGFnYWluIG93bnMgdGhlIGJ1ZmZlci4KKyAqLworZXh0ZXJuIHZvaWQgcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHN0cnVjdCBwY2lfZGV2ICpod2RldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAorCQkJCQlzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbik7CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpod2RldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAorCQkJICAgICAgIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKQoreworCS8qIE5vIGZsdXNoaW5nIG5lZWRlZCB0byBzeW5jIGNwdSB3cml0ZXMgdG8gdGhlIGRldmljZS4gICovCisJQlVHX09OKGRpcmVjdGlvbiA9PSBQQ0lfRE1BX05PTkUpOworfQorCisvKiBNYWtlIHBoeXNpY2FsIG1lbW9yeSBjb25zaXN0ZW50IGZvciBhIHNldCBvZiBzdHJlYW1pbmcKKyAqIG1vZGUgRE1BIHRyYW5zbGF0aW9ucyBhZnRlciBhIHRyYW5zZmVyLgorICoKKyAqIFRoZSBzYW1lIGFzIHBjaV9kbWFfc3luY19zaW5nbGVfKiBidXQgZm9yIGEgc2NhdHRlci1nYXRoZXIgbGlzdCwKKyAqIHNhbWUgcnVsZXMgYW5kIHVzYWdlLgorICovCitleHRlcm4gdm9pZCBwY2lfZG1hX3N5bmNfc2dfZm9yX2NwdShzdHJ1Y3QgcGNpX2RldiAqaHdkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZWxlbXMsIGludCBkaXJlY3Rpb24pOworCitzdGF0aWMgaW5saW5lIHZvaWQKK3BjaV9kbWFfc3luY19zZ19mb3JfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwkJCWludCBuZWxlbXMsIGludCBkaXJlY3Rpb24pCit7CisJLyogTm8gZmx1c2hpbmcgbmVlZGVkIHRvIHN5bmMgY3B1IHdyaXRlcyB0byB0aGUgZGV2aWNlLiAgKi8KKwlCVUdfT04oZGlyZWN0aW9uID09IFBDSV9ETUFfTk9ORSk7Cit9CisKKy8qIFJldHVybiB3aGV0aGVyIHRoZSBnaXZlbiBQQ0kgZGV2aWNlIERNQSBhZGRyZXNzIG1hc2sgY2FuCisgKiBiZSBzdXBwb3J0ZWQgcHJvcGVybHkuICBGb3IgZXhhbXBsZSwgaWYgeW91ciBkZXZpY2UgY2FuCisgKiBvbmx5IGRyaXZlIHRoZSBsb3cgMjQtYml0cyBkdXJpbmcgUENJIGJ1cyBtYXN0ZXJpbmcsIHRoZW4KKyAqIHlvdSB3b3VsZCBwYXNzIDB4MDBmZmZmZmYgYXMgdGhlIG1hc2sgdG8gdGhpcyBmdW5jdGlvbi4KKyAqLworZXh0ZXJuIGludCBwY2lfZG1hX3N1cHBvcnRlZChzdHJ1Y3QgcGNpX2RldiAqaHdkZXYsIHU2NCBtYXNrKTsKKworLyogUENJIElPTU1VIG1hcHBpbmcgYnlwYXNzIHN1cHBvcnQuICovCisKKy8qIFBDSSA2NC1iaXQgYWRkcmVzc2luZyB3b3JrcyBmb3IgYWxsIHNsb3RzIG9uIGFsbCBjb250cm9sbGVyCisgKiB0eXBlcyBvbiBzcGFyYzY0LiAgSG93ZXZlciwgaXQgcmVxdWlyZXMgdGhhdCB0aGUgZGV2aWNlCisgKiBjYW4gZHJpdmUgZW5vdWdoIG9mIHRoZSA2NCBiaXRzLgorICovCisjZGVmaW5lIFBDSTY0X1JFUVVJUkVEX01BU0sJKH4oZG1hNjRfYWRkcl90KTApCisjZGVmaW5lIFBDSTY0X0FERFJfQkFTRQkJMHhmZmZjMDAwMDAwMDAwMDAwVUwKKworLyogVXNhZ2Ugb2YgdGhlIHBjaV9kYWNfZm9vIGludGVyZmFjZXMgaXMgb25seSB2YWxpZCBpZiB0aGlzCisgKiB0ZXN0IHBhc3Nlcy4KKyAqLworI2RlZmluZSBwY2lfZGFjX2RtYV9zdXBwb3J0ZWQocGNpX2RldiwgbWFzaykgXAorCSgoKChtYXNrKSAmIFBDSTY0X1JFUVVJUkVEX01BU0spID09IFBDSTY0X1JFUVVJUkVEX01BU0spID8gMSA6IDApCisKK3N0YXRpYyBpbmxpbmUgZG1hNjRfYWRkcl90CitwY2lfZGFjX3BhZ2VfdG9fZG1hKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsIGludCBkaXJlY3Rpb24pCit7CisJcmV0dXJuIChQQ0k2NF9BRERSX0JBU0UgKworCQlfX3BhKHBhZ2VfYWRkcmVzcyhwYWdlKSkgKyBvZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICoKK3BjaV9kYWNfZG1hX3RvX3BhZ2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGRtYTY0X2FkZHJfdCBkbWFfYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIHBhZGRyID0gKGRtYV9hZGRyICYgUEFHRV9NQVNLKSAtIFBDSTY0X0FERFJfQkFTRTsKKworCXJldHVybiB2aXJ0X3RvX3BhZ2UoX192YShwYWRkcikpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK3BjaV9kYWNfZG1hX3RvX29mZnNldChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgZG1hNjRfYWRkcl90IGRtYV9hZGRyKQoreworCXJldHVybiAoZG1hX2FkZHIgJiB+UEFHRV9NQVNLKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitwY2lfZGFjX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBkbWE2NF9hZGRyX3QgZG1hX2FkZHIsIHNpemVfdCBsZW4sIGludCBkaXJlY3Rpb24pCit7CisJLyogREFDIGN5Y2xlIGFkZHJlc3NpbmcgZG9lcyBub3QgbWFrZSB1c2Ugb2YgdGhlCisJICogUENJIGNvbnRyb2xsZXIncyBzdHJlYW1pbmcgY2FjaGUsIHNvIG5vdGhpbmcgdG8gZG8uCisJICovCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcGNpX2RhY19kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgZG1hNjRfYWRkcl90IGRtYV9hZGRyLCBzaXplX3QgbGVuLCBpbnQgZGlyZWN0aW9uKQoreworCS8qIERBQyBjeWNsZSBhZGRyZXNzaW5nIGRvZXMgbm90IG1ha2UgdXNlIG9mIHRoZQorCSAqIFBDSSBjb250cm9sbGVyJ3Mgc3RyZWFtaW5nIGNhY2hlLCBzbyBub3RoaW5nIHRvIGRvLgorCSAqLworfQorCisjZGVmaW5lIFBDSV9ETUFfRVJST1JfQ09ERQkofihkbWFfYWRkcl90KTB4MCkKKworc3RhdGljIGlubGluZSBpbnQgcGNpX2RtYV9tYXBwaW5nX2Vycm9yKGRtYV9hZGRyX3QgZG1hX2FkZHIpCit7CisJcmV0dXJuIChkbWFfYWRkciA9PSBQQ0lfRE1BX0VSUk9SX0NPREUpOworfQorCisvKiBSZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBQQ0kgY29udHJvbGxlciBmb3IgZGV2aWNlIFBERVYuICovCisKK2V4dGVybiBpbnQgcGNpX2RvbWFpbl9ucihzdHJ1Y3QgcGNpX2J1cyAqYnVzKTsKK3N0YXRpYyBpbmxpbmUgaW50IHBjaV9wcm9jX2RvbWFpbihzdHJ1Y3QgcGNpX2J1cyAqYnVzKQoreworCXJldHVybiAxOworfQorCisvKiBQbGF0Zm9ybSBzdXBwb3J0IGZvciAvcHJvYy9idXMvcGNpL1gvWSBtbWFwKClzLiAqLworCisjZGVmaW5lIEhBVkVfUENJX01NQVAKKyNkZWZpbmUgSEFWRV9BUkNIX1BDSV9HRVRfVU5NQVBQRURfQVJFQQorI2RlZmluZSBnZXRfcGNpX3VubWFwcGVkX2FyZWEgZ2V0X2ZiX3VubWFwcGVkX2FyZWEKKworZXh0ZXJuIGludCBwY2lfbW1hcF9wYWdlX3JhbmdlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJICAgICAgIGVudW0gcGNpX21tYXBfc3RhdGUgbW1hcF9zdGF0ZSwKKwkJCSAgICAgICBpbnQgd3JpdGVfY29tYmluZSk7CisKKy8qIFBsYXRmb3JtIHNwZWNpZmljIE1XSSBzdXBwb3J0LiAqLworI2RlZmluZSBIQVZFX0FSQ0hfUENJX01XSQorZXh0ZXJuIGludCBwY2liaW9zX3ByZXBfbXdpKHN0cnVjdCBwY2lfZGV2ICpkZXYpOworCitleHRlcm4gdm9pZAorcGNpYmlvc19yZXNvdXJjZV90b19idXMoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IHBjaV9idXNfcmVnaW9uICpyZWdpb24sCisJCQlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyk7CisKK2V4dGVybiB2b2lkCitwY2liaW9zX2J1c190b19yZXNvdXJjZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKKwkJCXN0cnVjdCBwY2lfYnVzX3JlZ2lvbiAqcmVnaW9uKTsKKworc3RhdGljIGlubGluZSB2b2lkIHBjaWJpb3NfYWRkX3BsYXRmb3JtX2VudHJpZXMoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKK30KKworc3RhdGljIGlubGluZSBpbnQgcGNpX2dldF9sZWdhY3lfaWRlX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgY2hhbm5lbCkKK3sKKwlyZXR1cm4gUENJX0lSUV9OT05FOworfQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX19TUEFSQzY0X1BDSV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3Bjb25mLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3Bjb25mLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFkMTA2YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGNvbmYuaApAQCAtMCwwICsxLDI1IEBACisvKiAkSWQ6IHBjb25mLmgsdiAxLjEgMTk5Ni8xMi8wMiAwMDowOToxMCBkYXZlbSBFeHAgJAorICogcGNvbmYuaDogcGF0aGNvbmYoKSBhbmQgZnBhdGhjb25mKCkgZGVmaW5lcyBmb3IgU3VuT1MKKyAqICAgICAgICAgIHN5c3RlbSBjYWxsIGNvbXBhdGliaWxpdHkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKKyAqLworCisjaWZuZGVmIF9TUEFSQzY0X1BDT05GX0gKKyNkZWZpbmUgX1NQQVJDNjRfUENPTkZfSAorCisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9saW1pdHMuaD4KKworI2RlZmluZSBfUENPTkZfTElOSyAgICAgICAxIC8qIE1heCBudW1iZXIgb2YgbGlua3MgdG8gYW4gb2JqZWN0ICAgICAgICAqLworI2RlZmluZSBfUENPTkZfQ0FOT04gICAgICAyIC8qIFRUWSBpbnB1dCBidWZmZXIgbGluZSBzaXplICAgICAgICAgICAgICAqLworI2RlZmluZSBfUENPTkZfSU5QVVQgICAgICAzIC8qIEJpZ2dlc3QgcGFja2V0IGEgdHR5IGNhbiBpbWJpYmUgYXQgb25jZSAqLworI2RlZmluZSBfUENPTkZfTkFNRSAgICAgICA0IC8qIEZpbGVuYW1lIGxlbmd0aCBtYXggICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfUENPTkZfUEFUSCAgICAgICA1IC8qIE1heCBzaXplIG9mIGEgcGF0aG5hbWUgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfUENPTkZfUElQRSAgICAgICA2IC8qIEJ1ZmZlciBzaXplIGZvciBhIHBpcGUgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfUENPTkZfQ0hSRVNUUklDVCA3IC8qIENhbiBvbmx5IHJvb3QgY2hvd24gZmlsZXM/ICAgICAgICAgICAgICAqLworI2RlZmluZSBfUENPTkZfTk9UUlVOQyAgICA4IC8qIEFyZSBwYXRobmFtZXMgdHJ1bmNhdGVkIGlmIHRvbyBiaWc/ICAgICAqLworI2RlZmluZSBfUENPTkZfVkRJU0FCTEUgICA5IC8qIE1hZ2ljIGNoYXIgdG8gZGlzYWJsZSBzcGVjaWFsIHR0eSBjaGFycyAqLworI2RlZmluZSBfUENPTkZfTUFYUENPTkYgICA5CisKKyNlbmRpZiAvKiAhKF9TUEFSQzY0X1BDT05GX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3BlcmNwdS5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9wZXJjcHUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWE0ZTUxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9wZXJjcHUuaApAQCAtMCwwICsxLDQ5IEBACisjaWZuZGVmIF9fQVJDSF9TUEFSQzY0X1BFUkNQVV9fCisjZGVmaW5lIF9fQVJDSF9TUEFSQzY0X1BFUkNQVV9fCisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorCisjaWZkZWYgQ09ORklHX1NNUAorCitleHRlcm4gdm9pZCBzZXR1cF9wZXJfY3B1X2FyZWFzKHZvaWQpOworCitleHRlcm4gdW5zaWduZWQgbG9uZyBfX3Blcl9jcHVfYmFzZTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fcGVyX2NwdV9zaGlmdDsKKyNkZWZpbmUgX19wZXJfY3B1X29mZnNldChfX2NwdSkgXAorCShfX3Blcl9jcHVfYmFzZSArICgodW5zaWduZWQgbG9uZykoX19jcHUpIDw8IF9fcGVyX2NwdV9zaGlmdCkpCisKKy8qIFNlcGFyYXRlIG91dCB0aGUgdHlwZSwgc28gKGludFszXSwgZm9vKSB3b3Jrcy4gKi8KKyNkZWZpbmUgREVGSU5FX1BFUl9DUFUodHlwZSwgbmFtZSkgXAorICAgIF9fYXR0cmlidXRlX18oKF9fc2VjdGlvbl9fKCIuZGF0YS5wZXJjcHUiKSkpIF9fdHlwZW9mX18odHlwZSkgcGVyX2NwdV9fIyNuYW1lCisKK3JlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19sb2NhbF9wZXJfY3B1X29mZnNldCBhc20oImc1Iik7CisKKy8qIHZhciBpcyBpbiBkaXNjYXJkZWQgcmVnaW9uOiBvZmZzZXQgdG8gcGFydGljdWxhciBjb3B5IHdlIHdhbnQgKi8KKyNkZWZpbmUgcGVyX2NwdSh2YXIsIGNwdSkgKCpSRUxPQ19ISURFKCZwZXJfY3B1X18jI3ZhciwgX19wZXJfY3B1X29mZnNldChjcHUpKSkKKyNkZWZpbmUgX19nZXRfY3B1X3Zhcih2YXIpICgqUkVMT0NfSElERSgmcGVyX2NwdV9fIyN2YXIsIF9fbG9jYWxfcGVyX2NwdV9vZmZzZXQpKQorCisvKiBBIG1hY3JvIHRvIGF2b2lkICNpbmNsdWRlIGhlbGwuLi4gKi8KKyNkZWZpbmUgcGVyY3B1X21vZGNvcHkocGNwdWRzdCwgc3JjLCBzaXplKQkJCVwKK2RvIHsJCQkJCQkJCVwKKwl1bnNpZ25lZCBpbnQgX19pOwkJCQkJXAorCWZvciAoX19pID0gMDsgX19pIDwgTlJfQ1BVUzsgX19pKyspCQkJXAorCQlpZiAoY3B1X3Bvc3NpYmxlKF9faSkpCQkJCVwKKwkJCW1lbWNweSgocGNwdWRzdCkrX19wZXJfY3B1X29mZnNldChfX2kpLAlcCisJCQkgICAgICAgKHNyYyksIChzaXplKSk7CQkJXAorfSB3aGlsZSAoMCkKKyNlbHNlIC8qICEgU01QICovCisKKyNkZWZpbmUgREVGSU5FX1BFUl9DUFUodHlwZSwgbmFtZSkgXAorICAgIF9fdHlwZW9mX18odHlwZSkgcGVyX2NwdV9fIyNuYW1lCisKKyNkZWZpbmUgcGVyX2NwdSh2YXIsIGNwdSkJCQkoKigodm9pZCljcHUsICZwZXJfY3B1X18jI3ZhcikpCisjZGVmaW5lIF9fZ2V0X2NwdV92YXIodmFyKQkJCXBlcl9jcHVfXyMjdmFyCisKKyNlbmRpZgkvKiBTTVAgKi8KKworI2RlZmluZSBERUNMQVJFX1BFUl9DUFUodHlwZSwgbmFtZSkgZXh0ZXJuIF9fdHlwZW9mX18odHlwZSkgcGVyX2NwdV9fIyNuYW1lCisKKyNkZWZpbmUgRVhQT1JUX1BFUl9DUFVfU1lNQk9MKHZhcikgRVhQT1JUX1NZTUJPTChwZXJfY3B1X18jI3ZhcikKKyNkZWZpbmUgRVhQT1JUX1BFUl9DUFVfU1lNQk9MX0dQTCh2YXIpIEVYUE9SVF9TWU1CT0xfR1BMKHBlcl9jcHVfXyMjdmFyKQorCisjZW5kaWYgLyogX19BUkNIX1NQQVJDNjRfUEVSQ1BVX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGVyZmN0ci5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9wZXJmY3RyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM2ODczMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGVyZmN0ci5oCkBAIC0wLDAgKzEsMTczIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgUEVSRk9STUFOQ0UgSU5TVFJVTUVOVEFUSU9OICAKKyAgR3VpbGxhdW1lIFRob3V2ZW5pbiAgICAgICAgICAgMDgvMTAvOTgKKyAgRGF2aWQgUy4gTWlsbGVyICAgICAgICAgICAgICAgMTAvMDYvOTgKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNpZm5kZWYgUEVSRl9DT1VOVEVSX0FQSQorI2RlZmluZSBQRVJGX0NPVU5URVJfQVBJCisKKy8qIHN5c19wZXJmY3RyKCkgaW50ZXJmYWNlLiAgRmlyc3QgYXJnIGlzIG9wZXJhdGlvbiBjb2RlCisgKiBmcm9tIGVudW1lcmF0aW9uIGJlbG93LiAgVGhlIG1lYW5pbmcgb2YgZnVydGhlciBhcmd1bWVudHMKKyAqIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSBvcGVyYXRpb24gY29kZS4KKyAqCisgKiBpbnQgc3lzX3BlcmZjdHIoaW50IG9wY29kZSwgdW5zaWduZWQgbG9uZyBhcmcwLAorICogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgYXJnMSwgdW5zaWduZWQgbG9uZyBhcmcyKQorICoKKyAqIFBvaW50ZXJzIHdoaWNoIGFyZSBwYXNzZWQgYnkgdGhlIHVzZXIgYXJlIHBvaW50ZXJzIHRvIDY0LWJpdAorICogaW50ZWdlcnMuCisgKgorICogT25jZSBlbmFibGVkLCBwZXJmb3JtYW5jZSBjb3VudGVyIHN0YXRlIGlzIHJldGFpbmVkIHVudGlsIHRoZQorICogcHJvY2VzcyBlaXRoZXIgZXhpdHMgb3IgcGVyZm9ybXMgYW4gZXhlYy4gIFRoYXQgaXMsIHBlcmZvcm1hbmNlCisgKiBjb3VudGVycyByZW1haW4gZW5hYmxlZCBmb3IgZm9yay9jbG9uZSBjaGlsZHJlbi4KKyAqLworZW51bSBwZXJmY3RyX29wY29kZSB7CisJLyogRW5hYmxlIFVsdHJhU3BhcmMgcGVyZm9ybWFuY2UgY291bnRlcnMsIEFSRzAgaXMgcG9pbnRlcgorCSAqIHRvIDY0LWJpdCBhY2N1bXVsYXRvciBmb3IgRDAgY291bnRlciBpbiBQSUMsIEFSRzEgaXMgcG9pbnRlcgorCSAqIHRvIDY0LWJpdCBhY2N1bXVsYXRvciBmb3IgRDEgY291bnRlci4gIEFSRzIgaXMgYSBwb2ludGVyIHRvCisJICogdGhlIGluaXRpYWwgUENSIHJlZ2lzdGVyIHZhbHVlIHRvIHVzZS4KKwkgKi8KKwlQRVJGQ1RSX09OLAorCisJLyogRGlzYWJsZSBVbHRyYVNwYXJjIHBlcmZvcm1hbmNlIGNvdW50ZXJzLiAgVGhlIFBDUiBpcyB3cml0dGVuCisJICogd2l0aCB6ZXJvIGFuZCB0aGUgdXNlciBjb3VudGVyIGFjY3VtdWxhdG9yIHBvaW50ZXJzIGFuZAorCSAqIHdvcmtpbmcgUENSIHJlZ2lzdGVyIHZhbHVlIGFyZSBmb3Jnb3R0ZW4uCisJICovCisJUEVSRkNUUl9PRkYsCisKKwkvKiBBZGQgY3VycmVudCBEMCBhbmQgRDEgUElDIHZhbHVlcyBpbnRvIHVzZXIgcG9pbnRlcnMgZ2l2ZW4KKwkgKiBpbiBQRVJGQ1RSX09OIG9wZXJhdGlvbi4gIFRoZSBQSUMgaXMgY2xlYXJlZCBiZWZvcmUgcmV0dXJuaW5nLgorCSAqLworCVBFUkZDVFJfUkVBRCwKKworCS8qIENsZWFyIHRoZSBQSUMgcmVnaXN0ZXIuICovCisJUEVSRkNUUl9DTFJQSUMsCisKKwkvKiBCZWdpbiB1c2luZyBhIG5ldyBQQ1IgdmFsdWUsIHRoZSBwb2ludGVyIHRvIHdoaWNoIGlzIHBhc3NlZAorCSAqIGluIEFSRzAuICBUaGUgUElDIGlzIGFsc28gY2xlYXJlZCBhZnRlciB0aGUgbmV3IFBDUiB2YWx1ZSBpcworCSAqIHdyaXR0ZW4uCisJICovCisJUEVSRkNUUl9TRVRQQ1IsCisKKwkvKiBTdG9yZSBpbiBwb2ludGVyIGdpdmVuIGluIEFSRzAgdGhlIGN1cnJlbnQgUENSIHJlZ2lzdGVyIHZhbHVlCisJICogYmVpbmcgdXNlZC4KKwkgKi8KKwlQRVJGQ1RSX0dFVFBDUgorfTsKKworLyogSSBkb24ndCB3YW50IHRoZSBrZXJuZWwncyBuYW1lc3BhY2UgdG8gYmUgcG9sbHV0ZWQgd2l0aCB0aGlzCisgKiBzdHVmZiB3aGVuIHRoaXMgZmlsZSBpcyBpbmNsdWRlZC4gIC0tRGF2ZU0KKyAqLworI2lmbmRlZiBfX0tFUk5FTF9fCisKKyNkZWZpbmUgIFBSSVYgMHgwMDAwMDAwMQorI2RlZmluZSAgU1lTICAweDAwMDAwMDAyCisjZGVmaW5lICBVU1IgIDB4MDAwMDAwMDQKKworLyogUGljLlMwIFNlbGVjdGlvbiBCaXQgRmllbGQgRW5jb2RpbmcsIFVsdHJhLUkvSUkgICovCisjZGVmaW5lICBDWUNMRV9DTlQgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lICBJTlNUUl9DTlQgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lICBESVNQQVRDSDBfSUNfTUlTUyAgICAweDAwMDAwMDIwCisjZGVmaW5lICBESVNQQVRDSDBfU1RPUkVCVUYgICAweDAwMDAwMDMwCisjZGVmaW5lICBJQ19SRUYgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lICBEQ19SRCAgICAgICAgICAgICAgICAweDAwMDAwMDkwCisjZGVmaW5lICBEQ19XUiAgICAgICAgICAgICAgICAweDAwMDAwMEEwCisjZGVmaW5lICBMT0FEX1VTRSAgICAgICAgICAgICAweDAwMDAwMEIwCisjZGVmaW5lICBFQ19SRUYgICAgICAgICAgICAgICAweDAwMDAwMEMwCisjZGVmaW5lICBFQ19XUklURV9ISVRfUkRPICAgICAweDAwMDAwMEQwCisjZGVmaW5lICBFQ19TTk9PUF9JTlYgICAgICAgICAweDAwMDAwMEUwCisjZGVmaW5lICBFQ19SRF9ISVQgICAgICAgICAgICAweDAwMDAwMEYwCisKKy8qIFBpYy5TMCBTZWxlY3Rpb24gQml0IEZpZWxkIEVuY29kaW5nLCBVbHRyYS1JSUkgICovCisjZGVmaW5lICBVUzNfQ1lDTEVfQ05UCSAgICAgIAkweDAwMDAwMDAwCisjZGVmaW5lICBVUzNfSU5TVFJfQ05UCSAgICAgIAkweDAwMDAwMDEwCisjZGVmaW5lICBVUzNfRElTUEFUQ0gwX0lDX01JU1MJMHgwMDAwMDAyMAorI2RlZmluZSAgVVMzX0RJU1BBVENIMF9CUl9UR1QJMHgwMDAwMDAzMAorI2RlZmluZSAgVVMzX0RJU1BBVENIMF8yTkRfQlIJMHgwMDAwMDA0MAorI2RlZmluZSAgVVMzX1JTVEFMTF9TVE9SRVEJMHgwMDAwMDA1MAorI2RlZmluZSAgVVMzX1JTVEFMTF9JVV9VU0UJMHgwMDAwMDA2MAorI2RlZmluZSAgVVMzX0lDX1JFRgkJMHgwMDAwMDA4MAorI2RlZmluZSAgVVMzX0RDX1JECQkweDAwMDAwMDkwCisjZGVmaW5lICBVUzNfRENfV1IJCTB4MDAwMDAwYTAKKyNkZWZpbmUgIFVTM19FQ19SRUYJCTB4MDAwMDAwYzAKKyNkZWZpbmUgIFVTM19FQ19XUl9ISVRfUlRPCTB4MDAwMDAwZDAKKyNkZWZpbmUgIFVTM19FQ19TTk9PUF9JTlYJMHgwMDAwMDBlMAorI2RlZmluZSAgVVMzX0VDX1JEX01JU1MJCTB4MDAwMDAwZjAKKyNkZWZpbmUgIFVTM19QQ19QT1JUMF9SRAkweDAwMDAwMTAwCisjZGVmaW5lICBVUzNfU0lfU05PT1AJCTB4MDAwMDAxMTAKKyNkZWZpbmUgIFVTM19TSV9DSVFfRkxPVwkweDAwMDAwMTIwCisjZGVmaW5lICBVUzNfU0lfT1dORUQJCTB4MDAwMDAxMzAKKyNkZWZpbmUgIFVTM19TV19DT1VOVF8wCQkweDAwMDAwMTQwCisjZGVmaW5lICBVUzNfSVVfQlJfTUlTU19UQUtFTgkweDAwMDAwMTUwCisjZGVmaW5lICBVUzNfSVVfQlJfQ09VTlRfVEFLRU4JMHgwMDAwMDE2MAorI2RlZmluZSAgVVMzX0RJU1BfUlNfTUlTUFJFRAkweDAwMDAwMTcwCisjZGVmaW5lICBVUzNfRkFfUElQRV9DT01QTAkweDAwMDAwMTgwCisjZGVmaW5lICBVUzNfTUNfUkVBRFNfMAkJMHgwMDAwMDIwMAorI2RlZmluZSAgVVMzX01DX1JFQURTXzEJCTB4MDAwMDAyMTAKKyNkZWZpbmUgIFVTM19NQ19SRUFEU18yCQkweDAwMDAwMjIwCisjZGVmaW5lICBVUzNfTUNfUkVBRFNfMwkJMHgwMDAwMDIzMAorI2RlZmluZSAgVVMzX01DX1NUQUxMU18wCTB4MDAwMDAyNDAKKyNkZWZpbmUgIFVTM19NQ19TVEFMTFNfMgkweDAwMDAwMjUwCisKKy8qIFBpYy5TMSBTZWxlY3Rpb24gQml0IEZpZWxkIEVuY29kaW5nLCBVbHRyYS1JL0lJICAqLworI2RlZmluZSAgQ1lDTEVfQ05UX0QxICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSAgSU5TVFJfQ05UX0QxICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSAgRElTUEFUQ0gwX0lDX01JU1BSRUQgMHgwMDAwMTAwMAorI2RlZmluZSAgRElTUEFUQ0gwX0ZQX1VTRSAgICAgMHgwMDAwMTgwMAorI2RlZmluZSAgSUNfSElUICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSAgRENfUkRfSElUICAgICAgICAgICAgMHgwMDAwNDgwMAorI2RlZmluZSAgRENfV1JfSElUICAgICAgICAgICAgMHgwMDAwNTAwMAorI2RlZmluZSAgTE9BRF9VU0VfUkFXICAgICAgICAgMHgwMDAwNTgwMAorI2RlZmluZSAgRUNfSElUICAgICAgICAgICAgICAgMHgwMDAwNjAwMAorI2RlZmluZSAgRUNfV0IgICAgICAgICAgICAgICAgMHgwMDAwNjgwMAorI2RlZmluZSAgRUNfU05PT1BfQ0IgICAgICAgICAgMHgwMDAwNzAwMAorI2RlZmluZSAgRUNfSVRfSElUICAgICAgICAgICAgMHgwMDAwNzgwMAorCisvKiBQaWMuUzEgU2VsZWN0aW9uIEJpdCBGaWVsZCBFbmNvZGluZywgVWx0cmEtSUlJICAqLworI2RlZmluZSAgVVMzX0NZQ0xFX0NOVF9EMQkweDAwMDAwMDAwCisjZGVmaW5lICBVUzNfSU5TVFJfQ05UX0QxCTB4MDAwMDA4MDAKKyNkZWZpbmUgIFVTM19ESVNQQVRDSDBfTUlTUFJFRAkweDAwMDAxMDAwCisjZGVmaW5lICBVUzNfSUNfTUlTU19DQU5DRUxMRUQJMHgwMDAwMTgwMAorI2RlZmluZSAgVVMzX1JFX0VORElBTl9NSVNTCTB4MDAwMDIwMDAKKyNkZWZpbmUgIFVTM19SRV9GUFVfQllQQVNTCTB4MDAwMDI4MDAKKyNkZWZpbmUgIFVTM19SRV9EQ19NSVNTCQkweDAwMDAzMDAwCisjZGVmaW5lICBVUzNfUkVfRUNfTUlTUwkJMHgwMDAwMzgwMAorI2RlZmluZSAgVVMzX0lDX01JU1MJCTB4MDAwMDQwMDAKKyNkZWZpbmUgIFVTM19EQ19SRF9NSVNTCQkweDAwMDA0ODAwCisjZGVmaW5lICBVUzNfRENfV1JfTUlTUwkJMHgwMDAwNTAwMAorI2RlZmluZSAgVVMzX1JTVEFMTF9GUF9VU0UJMHgwMDAwNTgwMAorI2RlZmluZSAgVVMzX0VDX01JU1NFUwkJMHgwMDAwNjAwMAorI2RlZmluZSAgVVMzX0VDX1dCCQkweDAwMDA2ODAwCisjZGVmaW5lICBVUzNfRUNfU05PT1BfQ0IJMHgwMDAwNzAwMAorI2RlZmluZSAgVVMzX0VDX0lDX01JU1MJCTB4MDAwMDc4MDAKKyNkZWZpbmUgIFVTM19SRV9QQ19NSVNTCQkweDAwMDA4MDAwCisjZGVmaW5lICBVUzNfSVRMQl9NSVNTCQkweDAwMDA4ODAwCisjZGVmaW5lICBVUzNfRFRMQl9NSVNTCQkweDAwMDA5MDAwCisjZGVmaW5lICBVUzNfV0NfTUlTUwkJMHgwMDAwOTgwMAorI2RlZmluZSAgVVMzX1dDX1NOT09QX0NCCTB4MDAwMGEwMDAKKyNkZWZpbmUgIFVTM19XQ19TQ1JVQkJFRAkweDAwMDBhODAwCisjZGVmaW5lICBVUzNfV0NfV0JfV09fUkVBRAkweDAwMDBiMDAwCisjZGVmaW5lICBVUzNfUENfU09GVF9ISVQJMHgwMDAwYzAwMAorI2RlZmluZSAgVVMzX1BDX1NOT09QX0lOVgkweDAwMDBjODAwCisjZGVmaW5lICBVUzNfUENfSEFSRF9ISVQJMHgwMDAwZDAwMAorI2RlZmluZSAgVVMzX1BDX1BPUlQxX1JECTB4MDAwMGQ4MDAKKyNkZWZpbmUgIFVTM19TV19DT1VOVF8xCQkweDAwMDBlMDAwCisjZGVmaW5lICBVUzNfSVVfU1RBVF9CUl9NSVNfVU5UQUtFTgkweDAwMDBlODAwCisjZGVmaW5lICBVUzNfSVVfU1RBVF9CUl9DT1VOVF9VTlRBS0VOCTB4MDAwMGYwMDAKKyNkZWZpbmUgIFVTM19QQ19NU19NSVNTRVMJMHgwMDAwZjgwMAorI2RlZmluZSAgVVMzX01DX1dSSVRFU18wCTB4MDAwMTA4MDAKKyNkZWZpbmUgIFVTM19NQ19XUklURVNfMQkweDAwMDExMDAwCisjZGVmaW5lICBVUzNfTUNfV1JJVEVTXzIJMHgwMDAxMTgwMAorI2RlZmluZSAgVVMzX01DX1dSSVRFU18zCTB4MDAwMTIwMDAKKyNkZWZpbmUgIFVTM19NQ19TVEFMTFNfMQkweDAwMDEyODAwCisjZGVmaW5lICBVUzNfTUNfU1RBTExTXzMJMHgwMDAxMzAwMAorI2RlZmluZSAgVVMzX1JFX1JBV19NSVNTCTB4MDAwMTM4MDAKKyNkZWZpbmUgIFVTM19GTV9QSVBFX0NPTVBMRVRJT04JMHgwMDAxNDAwMAorCitzdHJ1Y3QgdmNvdW50ZXJfc3RydWN0IHsKKyAgdW5zaWduZWQgbG9uZyBsb25nIHZjbnQwOworICB1bnNpZ25lZCBsb25nIGxvbmcgdmNudDE7Cit9OworCisjZW5kaWYgLyogIShfX0tFUk5FTF9fKSAqLworCisjZW5kaWYgLyogIShQRVJGX0NPVU5URVJfQVBJKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9wZ2FsbG9jLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3BnYWxsb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI4ZTFmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9wZ2FsbG9jLmgKQEAgLTAsMCArMSwxODggQEAKKy8qICRJZDogcGdhbGxvYy5oLHYgMS4zMCAyMDAxLzEyLzIxIDA0OjU2OjE3IGRhdmVtIEV4cCAkICovCisjaWZuZGVmIF9TUEFSQzY0X1BHQUxMT0NfSAorI2RlZmluZSBfU1BBUkM2NF9QR0FMTE9DX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKworI2luY2x1ZGUgPGFzbS9zcGl0ZmlyZS5oPgorI2luY2x1ZGUgPGFzbS9jcHVkYXRhLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKworLyogUGFnZSB0YWJsZSBhbGxvY2F0aW9uL2ZyZWVpbmcuICovCisjaWZkZWYgQ09ORklHX1NNUAorLyogU2xpaWlpY2NrICovCisjZGVmaW5lIHBndF9xdWlja2xpc3RzCWxvY2FsX2NwdV9kYXRhKCkKKyNlbHNlCitleHRlcm4gc3RydWN0IHBndGFibGVfY2FjaGVfc3RydWN0IHsKKwl1bnNpZ25lZCBsb25nICpwZ2RfY2FjaGU7CisJdW5zaWduZWQgbG9uZyAqcHRlX2NhY2hlWzJdOworCXVuc2lnbmVkIGludCBwZ2NhY2hlX3NpemU7Cit9IHBndF9xdWlja2xpc3RzOworI2VuZGlmCisjZGVmaW5lIHBnZF9xdWlja2xpc3QJCShwZ3RfcXVpY2tsaXN0cy5wZ2RfY2FjaGUpCisjZGVmaW5lIHBtZF9xdWlja2xpc3QJCSgodW5zaWduZWQgbG9uZyAqKTApCisjZGVmaW5lIHB0ZV9xdWlja2xpc3QJCShwZ3RfcXVpY2tsaXN0cy5wdGVfY2FjaGUpCisjZGVmaW5lIHBndGFibGVfY2FjaGVfc2l6ZQkocGd0X3F1aWNrbGlzdHMucGdjYWNoZV9zaXplKQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGZyZWVfcGdkX2Zhc3QocGdkX3QgKnBnZCkKK3sKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwkqKHVuc2lnbmVkIGxvbmcgKilwZ2QgPSAodW5zaWduZWQgbG9uZykgcGdkX3F1aWNrbGlzdDsKKwlwZ2RfcXVpY2tsaXN0ID0gKHVuc2lnbmVkIGxvbmcgKikgcGdkOworCXBndGFibGVfY2FjaGVfc2l6ZSsrOworCXByZWVtcHRfZW5hYmxlKCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHBnZF90ICpnZXRfcGdkX2Zhc3Qodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nICpyZXQ7CisKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwlpZigocmV0ID0gcGdkX3F1aWNrbGlzdCkgIT0gTlVMTCkgeworCQlwZ2RfcXVpY2tsaXN0ID0gKHVuc2lnbmVkIGxvbmcgKikoKnJldCk7CisJCXJldFswXSA9IDA7CisJCXBndGFibGVfY2FjaGVfc2l6ZS0tOworCQlwcmVlbXB0X2VuYWJsZSgpOworCX0gZWxzZSB7CisJCXByZWVtcHRfZW5hYmxlKCk7CisJCXJldCA9ICh1bnNpZ25lZCBsb25nICopIF9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMfF9fR0ZQX1JFUEVBVCk7CisJCWlmKHJldCkKKwkJCW1lbXNldChyZXQsIDAsIFBBR0VfU0laRSk7CisJfQorCXJldHVybiAocGdkX3QgKilyZXQ7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgZnJlZV9wZ2Rfc2xvdyhwZ2RfdCAqcGdkKQoreworCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylwZ2QpOworfQorCisjaWZkZWYgRENBQ0hFX0FMSUFTSU5HX1BPU1NJQkxFCisjZGVmaW5lIFZQVEVfQ09MT1IoYWRkcmVzcykJCSgoKGFkZHJlc3MpID4+IChQQUdFX1NISUZUICsgMTApKSAmIDFVTCkKKyNkZWZpbmUgRENBQ0hFX0NPTE9SKGFkZHJlc3MpCQkoKChhZGRyZXNzKSA+PiBQQUdFX1NISUZUKSAmIDFVTCkKKyNlbHNlCisjZGVmaW5lIFZQVEVfQ09MT1IoYWRkcmVzcykJCTAKKyNkZWZpbmUgRENBQ0hFX0NPTE9SKGFkZHJlc3MpCQkwCisjZW5kaWYKKworI2RlZmluZSBwdWRfcG9wdWxhdGUoTU0sIFBVRCwgUE1EKQlwdWRfc2V0KFBVRCwgUE1EKQorCitzdGF0aWMgX19pbmxpbmVfXyBwbWRfdCAqcG1kX2FsbG9jX29uZV9mYXN0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisJdW5zaWduZWQgbG9uZyAqcmV0OworCWludCBjb2xvciA9IDA7CisKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwlpZiAocHRlX3F1aWNrbGlzdFtjb2xvcl0gPT0gTlVMTCkKKwkJY29sb3IgPSAxOworCisJaWYoKHJldCA9ICh1bnNpZ25lZCBsb25nICopcHRlX3F1aWNrbGlzdFtjb2xvcl0pICE9IE5VTEwpIHsKKwkJcHRlX3F1aWNrbGlzdFtjb2xvcl0gPSAodW5zaWduZWQgbG9uZyAqKSgqcmV0KTsKKwkJcmV0WzBdID0gMDsKKwkJcGd0YWJsZV9jYWNoZV9zaXplLS07CisJfQorCXByZWVtcHRfZW5hYmxlKCk7CisKKwlyZXR1cm4gKHBtZF90ICopcmV0OworfQorCitzdGF0aWMgX19pbmxpbmVfXyBwbWRfdCAqcG1kX2FsbG9jX29uZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCXBtZF90ICpwbWQ7CisKKwlwbWQgPSBwbWRfYWxsb2Nfb25lX2Zhc3QobW0sIGFkZHJlc3MpOworCWlmICghcG1kKSB7CisJCXBtZCA9IChwbWRfdCAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMfF9fR0ZQX1JFUEVBVCk7CisJCWlmIChwbWQpCisJCQltZW1zZXQocG1kLCAwLCBQQUdFX1NJWkUpOworCX0KKwlyZXR1cm4gcG1kOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGZyZWVfcG1kX2Zhc3QocG1kX3QgKnBtZCkKK3sKKwl1bnNpZ25lZCBsb25nIGNvbG9yID0gRENBQ0hFX0NPTE9SKCh1bnNpZ25lZCBsb25nKXBtZCk7CisKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwkqKHVuc2lnbmVkIGxvbmcgKilwbWQgPSAodW5zaWduZWQgbG9uZykgcHRlX3F1aWNrbGlzdFtjb2xvcl07CisJcHRlX3F1aWNrbGlzdFtjb2xvcl0gPSAodW5zaWduZWQgbG9uZyAqKSBwbWQ7CisJcGd0YWJsZV9jYWNoZV9zaXplKys7CisJcHJlZW1wdF9lbmFibGUoKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBmcmVlX3BtZF9zbG93KHBtZF90ICpwbWQpCit7CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXBtZCk7Cit9CisKKyNkZWZpbmUgcG1kX3BvcHVsYXRlX2tlcm5lbChNTSwgUE1ELCBQVEUpCXBtZF9zZXQoUE1ELCBQVEUpCisjZGVmaW5lIHBtZF9wb3B1bGF0ZShNTSxQTUQsUFRFX1BBR0UpCQlcCisJcG1kX3BvcHVsYXRlX2tlcm5lbChNTSxQTUQscGFnZV9hZGRyZXNzKFBURV9QQUdFKSkKKworZXh0ZXJuIHB0ZV90ICpfX3B0ZV9hbGxvY19vbmVfa2VybmVsKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpOworCitzdGF0aWMgaW5saW5lIHB0ZV90ICpwdGVfYWxsb2Nfb25lX2tlcm5lbChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCXJldHVybiBfX3B0ZV9hbGxvY19vbmVfa2VybmVsKG1tLCBhZGRyZXNzKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqCitwdGVfYWxsb2Nfb25lKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcHRlX3QgKnB0ZSA9IF9fcHRlX2FsbG9jX29uZV9rZXJuZWwobW0sIGFkZHIpOworCisJaWYgKHB0ZSkKKwkJcmV0dXJuIHZpcnRfdG9fcGFnZShwdGUpOworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHB0ZV90ICpwdGVfYWxsb2Nfb25lX2Zhc3Qoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwl1bnNpZ25lZCBsb25nIGNvbG9yID0gVlBURV9DT0xPUihhZGRyZXNzKTsKKwl1bnNpZ25lZCBsb25nICpyZXQ7CisKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwlpZigocmV0ID0gKHVuc2lnbmVkIGxvbmcgKilwdGVfcXVpY2tsaXN0W2NvbG9yXSkgIT0gTlVMTCkgeworCQlwdGVfcXVpY2tsaXN0W2NvbG9yXSA9ICh1bnNpZ25lZCBsb25nICopKCpyZXQpOworCQlyZXRbMF0gPSAwOworCQlwZ3RhYmxlX2NhY2hlX3NpemUtLTsKKwl9CisJcHJlZW1wdF9lbmFibGUoKTsKKwlyZXR1cm4gKHB0ZV90ICopcmV0OworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGZyZWVfcHRlX2Zhc3QocHRlX3QgKnB0ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGNvbG9yID0gRENBQ0hFX0NPTE9SKCh1bnNpZ25lZCBsb25nKXB0ZSk7CisKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwkqKHVuc2lnbmVkIGxvbmcgKilwdGUgPSAodW5zaWduZWQgbG9uZykgcHRlX3F1aWNrbGlzdFtjb2xvcl07CisJcHRlX3F1aWNrbGlzdFtjb2xvcl0gPSAodW5zaWduZWQgbG9uZyAqKSBwdGU7CisJcGd0YWJsZV9jYWNoZV9zaXplKys7CisJcHJlZW1wdF9lbmFibGUoKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBmcmVlX3B0ZV9zbG93KHB0ZV90ICpwdGUpCit7CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXB0ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdGVfZnJlZV9rZXJuZWwocHRlX3QgKnB0ZSkKK3sKKwlmcmVlX3B0ZV9mYXN0KHB0ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdGVfZnJlZShzdHJ1Y3QgcGFnZSAqcHRlcGFnZSkKK3sKKwlmcmVlX3B0ZV9mYXN0KHBhZ2VfYWRkcmVzcyhwdGVwYWdlKSk7Cit9CisKKyNkZWZpbmUgcG1kX2ZyZWUocG1kKQkJZnJlZV9wbWRfZmFzdChwbWQpCisjZGVmaW5lIHBnZF9mcmVlKHBnZCkJCWZyZWVfcGdkX2Zhc3QocGdkKQorI2RlZmluZSBwZ2RfYWxsb2MobW0pCQlnZXRfcGdkX2Zhc3QoKQorCisjZW5kaWYgLyogX1NQQVJDNjRfUEdBTExPQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGd0YWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhMDRhYzEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3BndGFibGUuaApAQCAtMCwwICsxLDQ2NCBAQAorLyogJElkOiBwZ3RhYmxlLmgsdiAxLjE1NiAyMDAyLzAyLzA5IDE5OjQ5OjMxIGRhdmVtIEV4cCAkCisgKiBwZ3RhYmxlLmg6IFNwaXRGaXJlIHBhZ2UgdGFibGUgb3BlcmF0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgMTk5NiwxOTk3IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKKyAqIENvcHlyaWdodCAxOTk3LDE5OTggSmFrdWIgSmVsaW5layAoampAc3Vuc2l0ZS5tZmYuY3VuaS5jeikKKyAqLworCisjaWZuZGVmIF9TUEFSQzY0X1BHVEFCTEVfSAorI2RlZmluZSBfU1BBUkM2NF9QR1RBQkxFX0gKKworLyogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBmdW5jdGlvbnMgYW5kIGRlZmluZXMgbmVjZXNzYXJ5IHRvIG1vZGlmeSBhbmQgdXNlCisgKiB0aGUgU3BpdEZpcmUgcGFnZSB0YWJsZXMuCisgKi8KKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BndGFibGUtbm9wdWQuaD4KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3NwaXRmaXJlLmg+CisjaW5jbHVkZSA8YXNtL2FzaS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vY29uc3QuaD4KKworLyogVGhlIGtlcm5lbCBpbWFnZSBvY2N1cGllcyAweDQwMDAwMDAgdG8gMHgxMDAwMDAwICg0TUIgLS0+IDE2TUIpLgorICogVGhlIHBhZ2UgY29weSBibG9ja29wcyB1c2UgMHgxMDAwMDAwIHRvIDB4MTgwMDAwMDAgKDE2TUIgLS0+IDI0TUIpLgorICogVGhlIFBST00gcmVzaWRlcyBpbiBhbiBhcmVhIHNwYW5uaW5nIDB4ZjAwMDAwMDAgdG8gMHgxMDAwMDAwMDAuCisgKiBUaGUgdm1hbGxvYyBhcmVhIHNwYW5zIDB4MTQwMDAwMDAwIHRvIDB4MjAwMDAwMDAwLgorICogVGhlcmUgaXMgYSBzaW5nbGUgc3RhdGljIGtlcm5lbCBQTUQgd2hpY2ggbWFwcyBmcm9tIDB4MCB0byBhZGRyZXNzCisgKiAweDQwMDAwMDAwMC4KKyAqLworI2RlZmluZQlUTEJURU1QX0JBU0UJCV9BQygweDAwMDAwMDAwMDEwMDAwMDAsVUwpCisjZGVmaW5lIE1PRFVMRVNfVkFERFIJCV9BQygweDAwMDAwMDAwMDIwMDAwMDAsVUwpCisjZGVmaW5lIE1PRFVMRVNfTEVOCQlfQUMoMHgwMDAwMDAwMDdlMDAwMDAwLFVMKQorI2RlZmluZSBNT0RVTEVTX0VORAkJX0FDKDB4MDAwMDAwMDA4MDAwMDAwMCxVTCkKKyNkZWZpbmUgVk1BTExPQ19TVEFSVAkJX0FDKDB4MDAwMDAwMDE0MDAwMDAwMCxVTCkKKyNkZWZpbmUgVk1BTExPQ19FTkQJCV9BQygweDAwMDAwMDAyMDAwMDAwMDAsVUwpCisjZGVmaW5lIExPV19PQlBfQUREUkVTUwkJX0FDKDB4MDAwMDAwMDBmMDAwMDAwMCxVTCkKKyNkZWZpbmUgSElfT0JQX0FERFJFU1MJCV9BQygweDAwMDAwMDAxMDAwMDAwMDAsVUwpCisKKy8qIFhYWCBBbGwgb2YgdGhpcyBuZWVkcyB0byBiZSByZXRob3VnaHQgc28gd2UgY2FuIHRha2UgYWR2YW50YWdlCisgKiBYWFggY2hlZXRhaCdzIGZ1bGwgNjQtYml0IHZpcnR1YWwgYWRkcmVzcyBzcGFjZSwgaWUuIG5vIG1vcmUgaG9sZQorICogWFhYIGluIHRoZSBtaWRkbGUgbGlrZSBvbiBzcGl0ZmlyZS4gLURhdmVNCisgKi8KKy8qCisgKiBHaXZlbiBhIHZpcnR1YWwgYWRkcmVzcywgdGhlIGxvd2VzdCBQQUdFX1NISUZUIGJpdHMgZGV0ZXJtaW5lIG9mZnNldAorICogaW50byB0aGUgcGFnZTsgdGhlIG5leHQgaGlnaGVyIFBBR0VfU0hJRlQtMyBiaXRzIGRldGVybWluZSB0aGUgcHRlIworICogaW4gdGhlIHByb3BlciBwYWdldGFibGUgKHRoZSAtMyBpcyBmcm9tIHRoZSA4IGJ5dGUgcHRlcywgYW5kIGVhY2ggcGFnZQorICogdGFibGUgaXMgYSBzaW5nbGUgcGFnZSBsb25nKS4gVGhlIG5leHQgaGlnaGVyIFBNRF9CSVRTIGRldGVybWluZSBwbWQjIAorICogaW4gdGhlIHByb3BlciBwbWR0YWJsZSAod2hlcmUgd2UgbXVzdCBoYXZlIFBNRF9CSVRTIDw9IChQQUdFX1NISUZULTIpIAorICogc2luY2UgdGhlIHBtZCBlbnRyaWVzIGFyZSA0IGJ5dGVzLCBhbmQgZWFjaCBwbWQgcGFnZSBpcyBhIHNpbmdsZSBwYWdlIAorICogbG9uZykuIEZpbmFsbHksIHRoZSBoaWdoZXIgZmV3IGJpdHMgZGV0ZXJtaW5lIHBnZGUjLgorICovCisKKy8qIFBNRF9TSElGVCBkZXRlcm1pbmVzIHRoZSBzaXplIG9mIHRoZSBhcmVhIGEgc2Vjb25kLWxldmVsIHBhZ2UKKyAqIHRhYmxlIGNhbiBtYXAKKyAqLworI2RlZmluZSBQTURfU0hJRlQJKFBBR0VfU0hJRlQgKyAoUEFHRV9TSElGVC0zKSkKKyNkZWZpbmUgUE1EX1NJWkUJKDFVTCA8PCBQTURfU0hJRlQpCisjZGVmaW5lIFBNRF9NQVNLCSh+KFBNRF9TSVpFLTEpKQorI2RlZmluZSBQTURfQklUUwkoUEFHRV9TSElGVCAtIDIpCisKKy8qIFBHRElSX1NISUZUIGRldGVybWluZXMgd2hhdCBhIHRoaXJkLWxldmVsIHBhZ2UgdGFibGUgZW50cnkgY2FuIG1hcCAqLworI2RlZmluZSBQR0RJUl9TSElGVAkoUEFHRV9TSElGVCArIChQQUdFX1NISUZULTMpICsgUE1EX0JJVFMpCisjZGVmaW5lIFBHRElSX1NJWkUJKDFVTCA8PCBQR0RJUl9TSElGVCkKKyNkZWZpbmUgUEdESVJfTUFTSwkofihQR0RJUl9TSVpFLTEpKQorI2RlZmluZSBQR0RJUl9CSVRTCShQQUdFX1NISUZUIC0gMikKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisKKy8qIEVudHJpZXMgcGVyIHBhZ2UgZGlyZWN0b3J5IGxldmVsLiAqLworI2RlZmluZSBQVFJTX1BFUl9QVEUJKDFVTCA8PCAoUEFHRV9TSElGVC0zKSkKKyNkZWZpbmUgUFRSU19QRVJfUE1ECSgxVUwgPDwgUE1EX0JJVFMpCisjZGVmaW5lIFBUUlNfUEVSX1BHRAkoMVVMIDw8IFBHRElSX0JJVFMpCisKKy8qIEtlcm5lbCBoYXMgYSBzZXBhcmF0ZSA0NGJpdCBhZGRyZXNzIHNwYWNlLiAqLworI2RlZmluZSBGSVJTVF9VU0VSX1BHRF9OUgkwCisKKyNkZWZpbmUgcHRlX0VSUk9SKGUpCV9fYnVpbHRpbl90cmFwKCkKKyNkZWZpbmUgcG1kX0VSUk9SKGUpCV9fYnVpbHRpbl90cmFwKCkKKyNkZWZpbmUgcGdkX0VSUk9SKGUpCV9fYnVpbHRpbl90cmFwKCkKKworI2VuZGlmIC8qICEoX19BU1NFTUJMWV9fKSAqLworCisvKiBTcGl0ZmlyZS9DaGVldGFoIFRURSBiaXRzLiAqLworI2RlZmluZSBfUEFHRV9WQUxJRAlfQUMoMHg4MDAwMDAwMDAwMDAwMDAwLFVMKSAvKiBWYWxpZCBUVEUgICAgICAgICAgICAgICovCisjZGVmaW5lIF9QQUdFX1IJCV9BQygweDgwMDAwMDAwMDAwMDAwMDAsVUwpIC8qIEtlZXAgcmVmIGJpdCB1cCB0byBkYXRlKi8KKyNkZWZpbmUgX1BBR0VfU1o0TUIJX0FDKDB4NjAwMDAwMDAwMDAwMDAwMCxVTCkgLyogNE1CIFBhZ2UgICAgICAgICAgICAgICAqLworI2RlZmluZSBfUEFHRV9TWjUxMksJX0FDKDB4NDAwMDAwMDAwMDAwMDAwMCxVTCkgLyogNTEySyBQYWdlICAgICAgICAgICAgICAqLworI2RlZmluZSBfUEFHRV9TWjY0SwlfQUMoMHgyMDAwMDAwMDAwMDAwMDAwLFVMKSAvKiA2NEsgUGFnZSAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9QQUdFX1NaOEsJX0FDKDB4MDAwMDAwMDAwMDAwMDAwMCxVTCkgLyogOEsgUGFnZSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfUEFHRV9ORk8JX0FDKDB4MTAwMDAwMDAwMDAwMDAwMCxVTCkgLyogTm8gRmF1bHQgT25seSAgICAgICAgICAqLworI2RlZmluZSBfUEFHRV9JRQlfQUMoMHgwODAwMDAwMDAwMDAwMDAwLFVMKSAvKiBJbnZlcnQgRW5kaWFubmVzcyAgICAgICovCisjZGVmaW5lIF9QQUdFX1NPRlQyCV9BQygweDA3RkMwMDAwMDAwMDAwMDAsVUwpIC8qIFNvZnR3YXJlIGJpdHMsIHNldCAyICAgKi8KKyNkZWZpbmUgX1BBR0VfUkVTMQlfQUMoMHgwMDAzMDAwMDAwMDAwMDAwLFVMKSAvKiBSZXNlcnZlZCAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9QQUdFX1NOCV9BQygweDAwMDA4MDAwMDAwMDAwMDAsVUwpIC8qIChDaGVldGFoKSBTbm9vcCAgICAgICAgKi8KKyNkZWZpbmUgX1BBR0VfUkVTMglfQUMoMHgwMDAwNzgwMDAwMDAwMDAwLFVMKSAvKiBSZXNlcnZlZCAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9QQUdFX1BBRERSX1NGCV9BQygweDAwMDAwMUZGRkZGRkUwMDAsVUwpIC8qIChTcGl0ZmlyZSkgcGFkZHJbNDA6MTNdKi8KKyNkZWZpbmUgX1BBR0VfUEFERFIJX0FDKDB4MDAwMDA3RkZGRkZGRTAwMCxVTCkgLyogKENoZWV0YWgpIHBhZGRyWzQyOjEzXSAqLworI2RlZmluZSBfUEFHRV9TT0ZUCV9BQygweDAwMDAwMDAwMDAwMDFGODAsVUwpIC8qIFNvZnR3YXJlIGJpdHMgICAgICAgICAgKi8KKyNkZWZpbmUgX1BBR0VfTAkJX0FDKDB4MDAwMDAwMDAwMDAwMDA0MCxVTCkgLyogTG9ja2VkIFRURSAgICAgICAgICAgICAqLworI2RlZmluZSBfUEFHRV9DUAlfQUMoMHgwMDAwMDAwMDAwMDAwMDIwLFVMKSAvKiBDYWNoZWFibGUgaW4gUC1DYWNoZSAgICovCisjZGVmaW5lIF9QQUdFX0NWCV9BQygweDAwMDAwMDAwMDAwMDAwMTAsVUwpIC8qIENhY2hlYWJsZSBpbiBWLUNhY2hlICAgKi8KKyNkZWZpbmUgX1BBR0VfRQkJX0FDKDB4MDAwMDAwMDAwMDAwMDAwOCxVTCkgLyogc2lkZS1FZmZlY3QgICAgICAgICAgICAqLworI2RlZmluZSBfUEFHRV9QCQlfQUMoMHgwMDAwMDAwMDAwMDAwMDA0LFVMKSAvKiBQcml2aWxlZ2VkIFBhZ2UgICAgICAgICovCisjZGVmaW5lIF9QQUdFX1cJCV9BQygweDAwMDAwMDAwMDAwMDAwMDIsVUwpIC8qIFdyaXRhYmxlICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX1BBR0VfRwkJX0FDKDB4MDAwMDAwMDAwMDAwMDAwMSxVTCkgLyogR2xvYmFsICAgICAgICAgICAgICAgICAqLworCisvKiBIZXJlIGFyZSB0aGUgU3BpdEZpcmUgc29mdHdhcmUgYml0cyB3ZSB1c2UgaW4gdGhlIFRURSdzLgorICoKKyAqIFdBUk5JTkc6IElmIHlvdSBhcmUgZ29pbmcgdG8gdHJ5IGFuZCBzdGFydCB1c2luZyBzb21lCisgKiAgICAgICAgICBvZiB0aGUgc29mdDIgYml0cywgeW91IHdpbGwgbmVlZCB0byBtYWtlCisgKiAgICAgICAgICBtb2RpZmljYXRpb25zIHRvIHRoZSBzd2FwIGVudHJ5IGltcGxlbWVudGF0aW9uLgorICoJICAgIEZvciBleGFtcGxlLCBvbmUgdGhpbmcgdGhhdCBjb3VsZCBoYXBwZW4gaXMgdGhhdAorICogICAgICAgICAgc3dwX2VudHJ5X3RvX3B0ZSgpIHdvdWxkIEJVR19PTigpIGlmIHlvdSB0cmllZAorICogICAgICAgICAgdG8gdXNlIG9uZSBvZiB0aGUgc29mdDIgYml0cyBmb3IgX1BBR0VfRklMRS4KKyAqCisgKiBMaWtlIG90aGVyIGFyY2hpdGVjdHVyZXMsIEkgaGF2ZSBhbGlhc2VkIF9QQUdFX0ZJTEUgd2l0aAorICogX1BBR0VfTU9ESUZJRUQuICBUaGlzIHdvcmtzIGJlY2F1c2UgX1BBR0VfRklMRSBpcyBuZXZlcgorICogaW50ZXJwcmV0ZWQgdGhhdCB3YXkgdW5sZXNzIF9QQUdFX1BSRVNFTlQgaXMgY2xlYXIuCisgKi8KKyNkZWZpbmUgX1BBR0VfRVhFQwlfQUMoMHgwMDAwMDAwMDAwMDAxMDAwLFVMKQkvKiBFeGVjdXRhYmxlIFNXIGJpdCAqLworI2RlZmluZSBfUEFHRV9NT0RJRklFRAlfQUMoMHgwMDAwMDAwMDAwMDAwODAwLFVMKQkvKiBNb2RpZmllZCAoZGlydHkpICAqLworI2RlZmluZSBfUEFHRV9GSUxFCV9BQygweDAwMDAwMDAwMDAwMDA4MDAsVUwpCS8qIFBhZ2VjYWNoZSBwYWdlICAgICovCisjZGVmaW5lIF9QQUdFX0FDQ0VTU0VECV9BQygweDAwMDAwMDAwMDAwMDA0MDAsVUwpCS8qIEFjY2Vzc2VkIChyZWYnZCkgICovCisjZGVmaW5lIF9QQUdFX1JFQUQJX0FDKDB4MDAwMDAwMDAwMDAwMDIwMCxVTCkJLyogUmVhZGFibGUgU1cgQml0ICAgKi8KKyNkZWZpbmUgX1BBR0VfV1JJVEUJX0FDKDB4MDAwMDAwMDAwMDAwMDEwMCxVTCkJLyogV3JpdGFibGUgU1cgQml0ICAgKi8KKyNkZWZpbmUgX1BBR0VfUFJFU0VOVAlfQUMoMHgwMDAwMDAwMDAwMDAwMDgwLFVMKQkvKiBQcmVzZW50ICAgICAgICAgICAqLworCisjaWYgUEFHRV9TSElGVCA9PSAxMworI2RlZmluZSBfUEFHRV9TWkJJVFMJX1BBR0VfU1o4SworI2VsaWYgUEFHRV9TSElGVCA9PSAxNgorI2RlZmluZSBfUEFHRV9TWkJJVFMJX1BBR0VfU1o2NEsKKyNlbGlmIFBBR0VfU0hJRlQgPT0gMTkKKyNkZWZpbmUgX1BBR0VfU1pCSVRTCV9QQUdFX1NaNTEySworI2VsaWYgUEFHRV9TSElGVCA9PSAyMgorI2RlZmluZSBfUEFHRV9TWkJJVFMJX1BBR0VfU1o0TUIKKyNlbHNlCisjZXJyb3IgV3JvbmcgUEFHRV9TSElGVCBzcGVjaWZpZWQKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfNE1CKQorI2RlZmluZSBfUEFHRV9TWkhVR0UJX1BBR0VfU1o0TUIKKyNlbGlmIGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzUxMkspCisjZGVmaW5lIF9QQUdFX1NaSFVHRQlfUEFHRV9TWjUxMksKKyNlbGlmIGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzY0SykKKyNkZWZpbmUgX1BBR0VfU1pIVUdFCV9QQUdFX1NaNjRLCisjZW5kaWYKKworI2RlZmluZSBfUEFHRV9DQUNIRQkoX1BBR0VfQ1AgfCBfUEFHRV9DVikKKworI2RlZmluZSBfX0RJUlRZX0JJVFMJKF9QQUdFX01PRElGSUVEIHwgX1BBR0VfV1JJVEUgfCBfUEFHRV9XKQorI2RlZmluZSBfX0FDQ0VTU19CSVRTCShfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX1JFQUQgfCBfUEFHRV9SKQorI2RlZmluZSBfX1BSSVZfQklUUwlfUEFHRV9QCisKKyNkZWZpbmUgUEFHRV9OT05FCV9fcGdwcm90IChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9DQUNIRSkKKworLyogRG9uJ3Qgc2V0IHRoZSBUVEUgX1BBR0VfVyBiaXQgaGVyZSwgZWxzZSB0aGUgZGlydHkgYml0IG5ldmVyIGdldHMgc2V0LiAqLworI2RlZmluZSBQQUdFX1NIQVJFRAlfX3BncHJvdCAoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1ZBTElEIHwgX1BBR0VfQ0FDSEUgfCBcCisJCQkJICBfX0FDQ0VTU19CSVRTIHwgX1BBR0VfV1JJVEUgfCBfUEFHRV9FWEVDKQorCisjZGVmaW5lIFBBR0VfQ09QWQlfX3BncHJvdCAoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1ZBTElEIHwgX1BBR0VfQ0FDSEUgfCBcCisJCQkJICBfX0FDQ0VTU19CSVRTIHwgX1BBR0VfRVhFQykKKworI2RlZmluZSBQQUdFX1JFQURPTkxZCV9fcGdwcm90IChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfVkFMSUQgfCBfUEFHRV9DQUNIRSB8IFwKKwkJCQkgIF9fQUNDRVNTX0JJVFMgfCBfUEFHRV9FWEVDKQorCisjZGVmaW5lIFBBR0VfS0VSTkVMCV9fcGdwcm90IChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfVkFMSUQgfCBfUEFHRV9DQUNIRSB8IFwKKwkJCQkgIF9fUFJJVl9CSVRTIHwgXAorCQkJCSAgX19BQ0NFU1NfQklUUyB8IF9fRElSVFlfQklUUyB8IF9QQUdFX0VYRUMpCisKKyNkZWZpbmUgUEFHRV9TSEFSRURfTk9FWEVDCV9fcGdwcm90IChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfVkFMSUQgfCBcCisJCQkJCSAgX1BBR0VfQ0FDSEUgfCBcCisJCQkJCSAgX19BQ0NFU1NfQklUUyB8IF9QQUdFX1dSSVRFKQorCisjZGVmaW5lIFBBR0VfQ09QWV9OT0VYRUMJX19wZ3Byb3QgKF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9WQUxJRCB8IFwKKwkJCQkJICBfUEFHRV9DQUNIRSB8IF9fQUNDRVNTX0JJVFMpCisKKyNkZWZpbmUgUEFHRV9SRUFET05MWV9OT0VYRUMJX19wZ3Byb3QgKF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9WQUxJRCB8IFwKKwkJCQkJICBfUEFHRV9DQUNIRSB8IF9fQUNDRVNTX0JJVFMpCisKKyNkZWZpbmUgX1BGTl9NQVNLCV9QQUdFX1BBRERSCisKKyNkZWZpbmUgcGdfaW9iaXRzIChfUEFHRV9WQUxJRCB8IF9QQUdFX1BSRVNFTlQgfCBfX0RJUlRZX0JJVFMgfCBcCisJCSAgIF9fQUNDRVNTX0JJVFMgfCBfUEFHRV9FKQorCisjZGVmaW5lIF9fUDAwMAlQQUdFX05PTkUKKyNkZWZpbmUgX19QMDAxCVBBR0VfUkVBRE9OTFlfTk9FWEVDCisjZGVmaW5lIF9fUDAxMAlQQUdFX0NPUFlfTk9FWEVDCisjZGVmaW5lIF9fUDAxMQlQQUdFX0NPUFlfTk9FWEVDCisjZGVmaW5lIF9fUDEwMAlQQUdFX1JFQURPTkxZCisjZGVmaW5lIF9fUDEwMQlQQUdFX1JFQURPTkxZCisjZGVmaW5lIF9fUDExMAlQQUdFX0NPUFkKKyNkZWZpbmUgX19QMTExCVBBR0VfQ09QWQorCisjZGVmaW5lIF9fUzAwMAlQQUdFX05PTkUKKyNkZWZpbmUgX19TMDAxCVBBR0VfUkVBRE9OTFlfTk9FWEVDCisjZGVmaW5lIF9fUzAxMAlQQUdFX1NIQVJFRF9OT0VYRUMKKyNkZWZpbmUgX19TMDExCVBBR0VfU0hBUkVEX05PRVhFQworI2RlZmluZSBfX1MxMDAJUEFHRV9SRUFET05MWQorI2RlZmluZSBfX1MxMDEJUEFHRV9SRUFET05MWQorI2RlZmluZSBfX1MxMTAJUEFHRV9TSEFSRUQKKyNkZWZpbmUgX19TMTExCVBBR0VfU0hBUkVECisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIHBoeXNfYmFzZTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHBmbl9iYXNlOworCitleHRlcm4gc3RydWN0IHBhZ2UgKm1lbV9tYXBfemVybzsKKyNkZWZpbmUgWkVST19QQUdFKHZhZGRyKQkobWVtX21hcF96ZXJvKQorCisvKiBQRk5zIGFyZSByZWFsIHBoeXNpY2FsIHBhZ2UgbnVtYmVycy4gIEhvd2V2ZXIsIG1lbV9tYXAgb25seSBiZWdpbnMgdG8gcmVjb3JkCisgKiBwZXItcGFnZSBpbmZvcm1hdGlvbiBzdGFydGluZyBhdCBwZm5fYmFzZS4gIFRoaXMgaXMgdG8gaGFuZGxlIHN5c3RlbXMgd2hlcmUKKyAqIHRoZSBmaXJzdCBwaHlzaWNhbCBwYWdlIGluIHRoZSBtYWNoaW5lIGlzIGF0IHNvbWUgaHVnZSBwaHlzaWNhbCBhZGRyZXNzLAorICogc3VjaCBhcyA0R0IuICAgVGhpcyBpcyBjb21tb24gb24gYSBwYXJ0aXRpb25lZCBFMTAwMDAsIGZvciBleGFtcGxlLgorICovCisKKyNkZWZpbmUgcGZuX3B0ZShwZm4sIHByb3QpCVwKKwlfX3B0ZSgoKHBmbikgPDwgUEFHRV9TSElGVCkgfCBwZ3Byb3RfdmFsKHByb3QpIHwgX1BBR0VfU1pCSVRTKQorI2RlZmluZSBta19wdGUocGFnZSwgcGdwcm90KQlwZm5fcHRlKHBhZ2VfdG9fcGZuKHBhZ2UpLCAocGdwcm90KSkKKworI2RlZmluZSBwdGVfcGZuKHgpCQkoKHB0ZV92YWwoeCkgJiBfUEFHRV9QQUREUik+PlBBR0VfU0hJRlQpCisjZGVmaW5lIHB0ZV9wYWdlKHgpCQlwZm5fdG9fcGFnZShwdGVfcGZuKHgpKQorCisjZGVmaW5lIHBhZ2VfcHRlX3Byb3QocGFnZSwgcHJvdCkJbWtfcHRlKHBhZ2UsIHByb3QpCisjZGVmaW5lIHBhZ2VfcHRlKHBhZ2UpCQkJcGFnZV9wdGVfcHJvdChwYWdlLCBfX3BncHJvdCgwKSkKKworc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbW9kaWZ5KHB0ZV90IG9yaWdfcHRlLCBwZ3Byb3RfdCBuZXdfcHJvdCkKK3sKKwlwdGVfdCBfX3B0ZTsKKwljb25zdCB1bnNpZ25lZCBsb25nIHByZXNlcnZlX21hc2sgPSAoX1BGTl9NQVNLIHwKKwkJCQkJICAgICBfUEFHRV9NT0RJRklFRCB8IF9QQUdFX0FDQ0VTU0VEIHwKKwkJCQkJICAgICBfUEFHRV9DQUNIRSB8IF9QQUdFX0UgfAorCQkJCQkgICAgIF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9TWkJJVFMpOworCisJcHRlX3ZhbChfX3B0ZSkgPSAocHRlX3ZhbChvcmlnX3B0ZSkgJiBwcmVzZXJ2ZV9tYXNrKSB8CisJCShwZ3Byb3RfdmFsKG5ld19wcm90KSAmIH5wcmVzZXJ2ZV9tYXNrKTsKKworCXJldHVybiBfX3B0ZTsKK30KKyNkZWZpbmUgcG1kX3NldChwbWRwLCBwdGVwKQlcCisJKHBtZF92YWwoKihwbWRwKSkgPSAoX19wYSgodW5zaWduZWQgbG9uZykgKHB0ZXApKSA+PiAxMVVMKSkKKyNkZWZpbmUgcHVkX3NldChwdWRwLCBwbWRwKQlcCisJKHB1ZF92YWwoKihwdWRwKSkgPSAoX19wYSgodW5zaWduZWQgbG9uZykgKHBtZHApKSA+PiAxMVVMKSkKKyNkZWZpbmUgX19wbWRfcGFnZShwbWQpCQlcCisJKCh1bnNpZ25lZCBsb25nKSBfX3ZhKCgoKHVuc2lnbmVkIGxvbmcpcG1kX3ZhbChwbWQpKTw8MTFVTCkpKQorI2RlZmluZSBwbWRfcGFnZShwbWQpIAkJCXZpcnRfdG9fcGFnZSgodm9pZCAqKV9fcG1kX3BhZ2UocG1kKSkKKyNkZWZpbmUgcHVkX3BhZ2UocHVkKQkJXAorCSgodW5zaWduZWQgbG9uZykgX192YSgoKCh1bnNpZ25lZCBsb25nKXB1ZF92YWwocHVkKSk8PDExVUwpKSkKKyNkZWZpbmUgcHRlX25vbmUocHRlKSAJCQkoIXB0ZV92YWwocHRlKSkKKyNkZWZpbmUgcHRlX3ByZXNlbnQocHRlKQkJKHB0ZV92YWwocHRlKSAmIF9QQUdFX1BSRVNFTlQpCisjZGVmaW5lIHBtZF9ub25lKHBtZCkJCQkoIXBtZF92YWwocG1kKSkKKyNkZWZpbmUgcG1kX2JhZChwbWQpCQkJKDApCisjZGVmaW5lIHBtZF9wcmVzZW50KHBtZCkJCShwbWRfdmFsKHBtZCkgIT0gMFUpCisjZGVmaW5lIHBtZF9jbGVhcihwbWRwKQkJCShwbWRfdmFsKCoocG1kcCkpID0gMFUpCisjZGVmaW5lIHB1ZF9ub25lKHB1ZCkJCQkoIXB1ZF92YWwocHVkKSkKKyNkZWZpbmUgcHVkX2JhZChwdWQpCQkJKDApCisjZGVmaW5lIHB1ZF9wcmVzZW50KHB1ZCkJCShwdWRfdmFsKHB1ZCkgIT0gMFUpCisjZGVmaW5lIHB1ZF9jbGVhcihwdWRwKQkJCShwdWRfdmFsKCoocHVkcCkpID0gMFUpCisKKy8qIFRoZSBmb2xsb3dpbmcgb25seSB3b3JrIGlmIHB0ZV9wcmVzZW50KCkgaXMgdHJ1ZS4KKyAqIFVuZGVmaW5lZCBiZWhhdmlvdXIgaWYgbm90Li4KKyAqLworI2RlZmluZSBwdGVfcmVhZChwdGUpCQkocHRlX3ZhbChwdGUpICYgX1BBR0VfUkVBRCkKKyNkZWZpbmUgcHRlX2V4ZWMocHRlKQkJKHB0ZV92YWwocHRlKSAmIF9QQUdFX0VYRUMpCisjZGVmaW5lIHB0ZV93cml0ZShwdGUpCQkocHRlX3ZhbChwdGUpICYgX1BBR0VfV1JJVEUpCisjZGVmaW5lIHB0ZV9kaXJ0eShwdGUpCQkocHRlX3ZhbChwdGUpICYgX1BBR0VfTU9ESUZJRUQpCisjZGVmaW5lIHB0ZV95b3VuZyhwdGUpCQkocHRlX3ZhbChwdGUpICYgX1BBR0VfQUNDRVNTRUQpCisjZGVmaW5lIHB0ZV93cnByb3RlY3QocHRlKQkoX19wdGUocHRlX3ZhbChwdGUpICYgfihfUEFHRV9XUklURXxfUEFHRV9XKSkpCisjZGVmaW5lIHB0ZV9yZHByb3RlY3QocHRlKQlcCisJKF9fcHRlKCgocHRlX3ZhbChwdGUpPDwxVUwpPj4xVUwpICYgfl9QQUdFX1JFQUQpKQorI2RlZmluZSBwdGVfbWtjbGVhbihwdGUpCVwKKwkoX19wdGUocHRlX3ZhbChwdGUpICYgfihfUEFHRV9NT0RJRklFRHxfUEFHRV9XKSkpCisjZGVmaW5lIHB0ZV9ta29sZChwdGUpCQlcCisJKF9fcHRlKCgocHRlX3ZhbChwdGUpPDwxVUwpPj4xVUwpICYgfl9QQUdFX0FDQ0VTU0VEKSkKKworLyogUGVybWFuZW50IGFkZHJlc3Mgb2YgYSBwYWdlLiAqLworI2RlZmluZSBfX3BhZ2VfYWRkcmVzcyhwYWdlKQlwYWdlX2FkZHJlc3MocGFnZSkKKworLyogQmUgdmVyeSBjYXJlZnVsIHdoZW4geW91IGNoYW5nZSB0aGVzZSB0aHJlZSwgdGhleSBhcmUgZGVsaWNhdGUuICovCisjZGVmaW5lIHB0ZV9ta3lvdW5nKHB0ZSkJKF9fcHRlKHB0ZV92YWwocHRlKSB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfUikpCisjZGVmaW5lIHB0ZV9ta3dyaXRlKHB0ZSkJKF9fcHRlKHB0ZV92YWwocHRlKSB8IF9QQUdFX1dSSVRFKSkKKyNkZWZpbmUgcHRlX21rZGlydHkocHRlKQkoX19wdGUocHRlX3ZhbChwdGUpIHwgX1BBR0VfTU9ESUZJRUQgfCBfUEFHRV9XKSkKKworLyogdG8gZmluZCBhbiBlbnRyeSBpbiBhIHBhZ2UtdGFibGUtZGlyZWN0b3J5LiAqLworI2RlZmluZSBwZ2RfaW5kZXgoYWRkcmVzcykJKCgoYWRkcmVzcykgPj4gUEdESVJfU0hJRlQpICYgKFBUUlNfUEVSX1BHRCAtIDEpKQorI2RlZmluZSBwZ2Rfb2Zmc2V0KG1tLCBhZGRyZXNzKQkoKG1tKS0+cGdkICsgcGdkX2luZGV4KGFkZHJlc3MpKQorCisvKiB0byBmaW5kIGFuIGVudHJ5IGluIGEga2VybmVsIHBhZ2UtdGFibGUtZGlyZWN0b3J5ICovCisjZGVmaW5lIHBnZF9vZmZzZXRfayhhZGRyZXNzKSBwZ2Rfb2Zmc2V0KCZpbml0X21tLCBhZGRyZXNzKQorCisvKiBleHRyYWN0IHRoZSBwZ2QgY2FjaGUgdXNlZCBmb3Igb3B0aW1pemluZyB0aGUgdGxiIG1pc3MKKyAqIHNsb3cgcGF0aCB3aGVuIGV4ZWN1dGluZyAzMi1iaXQgY29tcGF0IHByb2Nlc3NlcworICovCisjZGVmaW5lIGdldF9wZ2RfY2FjaGUocGdkKQkoKHVuc2lnbmVkIGxvbmcpIHBnZF92YWwoKnBnZCkgPDwgMTEpCisKKy8qIEZpbmQgYW4gZW50cnkgaW4gdGhlIHNlY29uZC1sZXZlbCBwYWdlIHRhYmxlLi4gKi8KKyNkZWZpbmUgcG1kX29mZnNldChwdWRwLCBhZGRyZXNzKQlcCisJKChwbWRfdCAqKSBwdWRfcGFnZSgqKHB1ZHApKSArIFwKKwkgKCgoYWRkcmVzcykgPj4gUE1EX1NISUZUKSAmIChQVFJTX1BFUl9QTUQtMSkpKQorCisvKiBGaW5kIGFuIGVudHJ5IGluIHRoZSB0aGlyZC1sZXZlbCBwYWdlIHRhYmxlLi4gKi8KKyNkZWZpbmUgcHRlX2luZGV4KGRpciwgYWRkcmVzcykJXAorCSgocHRlX3QgKikgX19wbWRfcGFnZSgqKGRpcikpICsgXAorCSAoKGFkZHJlc3MgPj4gUEFHRV9TSElGVCkgJiAoUFRSU19QRVJfUFRFIC0gMSkpKQorI2RlZmluZSBwdGVfb2Zmc2V0X2tlcm5lbAkJcHRlX2luZGV4CisjZGVmaW5lIHB0ZV9vZmZzZXRfbWFwCQkJcHRlX2luZGV4CisjZGVmaW5lIHB0ZV9vZmZzZXRfbWFwX25lc3RlZAkJcHRlX2luZGV4CisjZGVmaW5lIHB0ZV91bm1hcChwdGUpCQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBwdGVfdW5tYXBfbmVzdGVkKHB0ZSkJCWRvIHsgfSB3aGlsZSAoMCkKKworLyogQWN0dWFsIHBhZ2UgdGFibGUgUFRFIHVwZGF0ZXMuICAqLworZXh0ZXJuIHZvaWQgdGxiX2JhdGNoX2FkZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyB2YWRkciwgcHRlX3QgKnB0ZXAsIHB0ZV90IG9yaWcpOworCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3B0ZV9hdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKQoreworCXB0ZV90IG9yaWcgPSAqcHRlcDsKKworCSpwdGVwID0gcHRlOworCisJLyogSXQgaXMgbW9yZSBlZmZpY2llbnQgdG8gbGV0IGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2UoKQorCSAqIGhhbmRsZSBpbml0X21tIHRsYiBmbHVzaGVzLgorCSAqLworCWlmIChsaWtlbHkobW0gIT0gJmluaXRfbW0pICYmIChwdGVfdmFsKG9yaWcpICYgX1BBR0VfVkFMSUQpKQorCQl0bGJfYmF0Y2hfYWRkKG1tLCBhZGRyLCBwdGVwLCBvcmlnKTsKK30KKworI2RlZmluZSBwdGVfY2xlYXIobW0sYWRkcixwdGVwKQkJXAorCXNldF9wdGVfYXQoKG1tKSwgKGFkZHIpLCAocHRlcCksIF9fcHRlKDBVTCkpCisKK2V4dGVybiBwZ2RfdCBzd2FwcGVyX3BnX2RpclsxXTsKKworLyogVGhlc2UgZG8gbm90aGluZyB3aXRoIHRoZSB3YXkgSSBoYXZlIHRoaW5ncyBzZXR1cC4gKi8KKyNkZWZpbmUgbW11X2xvY2thcmVhKHZhZGRyLCBsZW4pCQkodmFkZHIpCisjZGVmaW5lIG1tdV91bmxvY2thcmVhKHZhZGRyLCBsZW4pCQlkbyB7IH0gd2hpbGUoMCkKKworc3RydWN0IHZtX2FyZWFfc3RydWN0OworZXh0ZXJuIHZvaWQgdXBkYXRlX21tdV9jYWNoZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywgcHRlX3QpOworCisvKiBNYWtlIGEgbm9uLXByZXNlbnQgcHNldWRvLVRURS4gKi8KK3N0YXRpYyBpbmxpbmUgcHRlX3QgbWtfcHRlX2lvKHVuc2lnbmVkIGxvbmcgcGFnZSwgcGdwcm90X3QgcHJvdCwgaW50IHNwYWNlKQoreworCXB0ZV90IHB0ZTsKKwlwdGVfdmFsKHB0ZSkgPSAoKChwYWdlKSB8IHBncHJvdF92YWwocHJvdCkgfCBfUEFHRV9FKSAmCisJCQl+KHVuc2lnbmVkIGxvbmcpX1BBR0VfQ0FDSEUpOworCXB0ZV92YWwocHRlKSB8PSAoKCh1bnNpZ25lZCBsb25nKXNwYWNlKSA8PCAzMik7CisJcmV0dXJuIHB0ZTsKK30KKworLyogRW5jb2RlIGFuZCBkZS1jb2RlIGEgc3dhcCBlbnRyeSAqLworI2RlZmluZSBfX3N3cF90eXBlKGVudHJ5KQkoKChlbnRyeSkudmFsID4+IFBBR0VfU0hJRlQpICYgMHhmZlVMKQorI2RlZmluZSBfX3N3cF9vZmZzZXQoZW50cnkpCSgoZW50cnkpLnZhbCA+PiAoUEFHRV9TSElGVCArIDhVTCkpCisjZGVmaW5lIF9fc3dwX2VudHJ5KHR5cGUsIG9mZnNldCkJXAorCSggKHN3cF9lbnRyeV90KSBcCisJICB7IFwKKwkJKCgobG9uZykodHlwZSkgPDwgUEFHRV9TSElGVCkgfCBcCisgICAgICAgICAgICAgICAgICgobG9uZykob2Zmc2V0KSA8PCAoUEFHRV9TSElGVCArIDhVTCkpKSBcCisJICB9ICkKKyNkZWZpbmUgX19wdGVfdG9fc3dwX2VudHJ5KHB0ZSkJCSgoc3dwX2VudHJ5X3QpIHsgcHRlX3ZhbChwdGUpIH0pCisjZGVmaW5lIF9fc3dwX2VudHJ5X3RvX3B0ZSh4KQkJKChwdGVfdCkgeyAoeCkudmFsIH0pCisKKy8qIEZpbGUgb2Zmc2V0IGluIFBURSBzdXBwb3J0LiAqLworI2RlZmluZSBwdGVfZmlsZShwdGUpCQkocHRlX3ZhbChwdGUpICYgX1BBR0VfRklMRSkKKyNkZWZpbmUgcHRlX3RvX3Bnb2ZmKHB0ZSkJKHB0ZV92YWwocHRlKSA+PiBQQUdFX1NISUZUKQorI2RlZmluZSBwZ29mZl90b19wdGUob2ZmKQkoX19wdGUoKChvZmYpIDw8IFBBR0VfU0hJRlQpIHwgX1BBR0VfRklMRSkpCisjZGVmaW5lIFBURV9GSUxFX01BWF9CSVRTCSg2NFVMIC0gUEFHRV9TSElGVCAtIDFVTCkKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcHJvbV92aXJ0X3RvX3BoeXModW5zaWduZWQgbG9uZywgaW50ICopOworCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nCitzdW40dV9nZXRfcHRlICh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcGdkX3QgKnBnZHA7CisJcHVkX3QgKnB1ZHA7CisJcG1kX3QgKnBtZHA7CisJcHRlX3QgKnB0ZXA7CisKKwlpZiAoYWRkciA+PSBQQUdFX09GRlNFVCkKKwkJcmV0dXJuIGFkZHIgJiBfUEFHRV9QQUREUjsKKwlpZiAoKGFkZHIgPj0gTE9XX09CUF9BRERSRVNTKSAmJiAoYWRkciA8IEhJX09CUF9BRERSRVNTKSkKKwkJcmV0dXJuIHByb21fdmlydF90b19waHlzKGFkZHIsIE5VTEwpOworCXBnZHAgPSBwZ2Rfb2Zmc2V0X2soYWRkcik7CisJcHVkcCA9IHB1ZF9vZmZzZXQocGdkcCwgYWRkcik7CisJcG1kcCA9IHBtZF9vZmZzZXQocHVkcCwgYWRkcik7CisJcHRlcCA9IHB0ZV9vZmZzZXRfa2VybmVsKHBtZHAsIGFkZHIpOworCXJldHVybiBwdGVfdmFsKCpwdGVwKSAmIF9QQUdFX1BBRERSOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nCitfX2dldF9waHlzICh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcmV0dXJuIHN1bjR1X2dldF9wdGUgKGFkZHIpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQKK19fZ2V0X2lvc3BhY2UgKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gKChzdW40dV9nZXRfcHRlIChhZGRyKSAmIDB4ZjAwMDAwMDApID4+IDI4KTsKK30KKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgKnNwYXJjNjRfdmFsaWRfYWRkcl9iaXRtYXA7CisKKy8qIE5lZWRzIHRvIGJlIGRlZmluZWQgaGVyZSBhbmQgbm90IGluIGxpbnV4L21tLmgsIGFzIGl0IGlzIGFyY2ggZGVwZW5kZW50ICovCisjZGVmaW5lIGtlcm5fYWRkcl92YWxpZChhZGRyKQlcCisJKHRlc3RfYml0KF9fcGEoKHVuc2lnbmVkIGxvbmcpKGFkZHIpKT4+MjIsIHNwYXJjNjRfdmFsaWRfYWRkcl9iaXRtYXApKQorCitleHRlcm4gaW50IGlvX3JlbWFwX3BhZ2VfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgZnJvbSwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIHNpemUsIHBncHJvdF90IHByb3QsIGludCBzcGFjZSk7CitleHRlcm4gaW50IGlvX3JlbWFwX3Bmbl9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBmcm9tLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgcGZuLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgcGdwcm90X3QgcHJvdCk7CisKKy8qCisgKiBGb3Igc3BhcmMzMiY2NCwgdGhlIHBmbiBpbiBpb19yZW1hcF9wZm5fcmFuZ2UoKSBjYXJyaWVzIDxpb3NwYWNlPiBpbgorICogaXRzIGhpZ2ggNCBiaXRzLiAgVGhlc2UgbWFjcm9zL2Z1bmN0aW9ucyBwdXQgaXQgdGhlcmUgb3IgZ2V0IGl0IGZyb20gdGhlcmUuCisgKi8KKyNkZWZpbmUgTUtfSU9TUEFDRV9QRk4oc3BhY2UsIHBmbikJKHBmbiB8IChzcGFjZSA8PCAoQklUU19QRVJfTE9ORyAtIDQpKSkKKyNkZWZpbmUgR0VUX0lPU1BBQ0UocGZuKQkJKHBmbiA+PiAoQklUU19QRVJfTE9ORyAtIDQpKQorI2RlZmluZSBHRVRfUEZOKHBmbikJCQkocGZuICYgMHgwZmZmZmZmZmZmZmZmZmZmVUwpCisKKy8qIE92ZXJyaWRlIGZvciB7cGdkLHBtZH1fYWRkcl9lbmQoKSB0byBkZWFsIHdpdGggdGhlIHZpcnR1YWwgYWRkcmVzcworICogc3BhY2UgaG9sZS4gIFdlIHNpbXBseSBzaWduIGV4dGVuZCBiaXQgNDMuCisgKi8KKyNkZWZpbmUgcGdkX2FkZHJfZW5kKGFkZHIsIGVuZCkJCQkJCQlcCisoewl1bnNpZ25lZCBsb25nIF9fYm91bmRhcnkgPSAoKGFkZHIpICsgUEdESVJfU0laRSkgJiBQR0RJUl9NQVNLOwlcCisJX19ib3VuZGFyeSA9ICgobG9uZykgKF9fYm91bmRhcnkgPDwgMjApKSA+PiAyMDsJCQlcCisJKF9fYm91bmRhcnkgLSAxIDwgKGVuZCkgLSAxKT8gX19ib3VuZGFyeTogKGVuZCk7CQlcCit9KQorCisjZGVmaW5lIHBtZF9hZGRyX2VuZChhZGRyLCBlbmQpCQkJCQkJXAorKHsJdW5zaWduZWQgbG9uZyBfX2JvdW5kYXJ5ID0gKChhZGRyKSArIFBNRF9TSVpFKSAmIFBNRF9NQVNLOwlcCisJX19ib3VuZGFyeSA9ICgobG9uZykgKF9fYm91bmRhcnkgPDwgMjApKSA+PiAyMDsJCQlcCisJKF9fYm91bmRhcnkgLSAxIDwgKGVuZCkgLSAxKT8gX19ib3VuZGFyeTogKGVuZCk7CQlcCit9KQorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGd0YWJsZS5oPgorCisvKiBXZSBwcm92aWRlIG91ciBvd24gZ2V0X3VubWFwcGVkX2FyZWEgdG8gY29wZSB3aXRoIFZBIGhvbGVzIGZvciB1c2VybGFuZCAqLworI2RlZmluZSBIQVZFX0FSQ0hfVU5NQVBQRURfQVJFQQorCisvKiBXZSBwcm92aWRlIGEgc3BlY2lhbCBnZXRfdW5tYXBwZWRfYXJlYSBmb3IgZnJhbWVidWZmZXIgbW1hcHMgdG8gdHJ5IGFuZCB1c2UKKyAqIHRoZSBsYXJnZXN0IGFsaWdubWVudCBwb3NzaWJsZSBzdWNoIHRoYXQgbGFyZ2V0IFBURXMgY2FuIGJlIHVzZWQuCisgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIGdldF9mYl91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nLAorCQkJCQkgIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsCisJCQkJCSAgdW5zaWduZWQgbG9uZyk7CisjZGVmaW5lIEhBVkVfQVJDSF9GQl9VTk1BUFBFRF9BUkVBCisKKy8qCisgKiBObyBwYWdlIHRhYmxlIGNhY2hlcyB0byBpbml0aWFsaXNlCisgKi8KKyNkZWZpbmUgcGd0YWJsZV9jYWNoZV9pbml0KCkJZG8geyB9IHdoaWxlICgwKQorCitleHRlcm4gdm9pZCBjaGVja19wZ3RfY2FjaGUodm9pZCk7CisKKyNlbmRpZiAvKiAhKF9fQVNTRU1CTFlfXykgKi8KKworI2VuZGlmIC8qICEoX1NQQVJDNjRfUEdUQUJMRV9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9waWwuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGlsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY4Nzc1MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGlsLmgKQEAgLTAsMCArMSwyNiBAQAorLyogJElkOiBwaWwuaCx2IDEuMSAyMDAyLzAxLzIzIDExOjI3OjM2IGRhdmVtIEV4cCAkICovCisjaWZuZGVmIF9TUEFSQzY0X1BJTF9ICisjZGVmaW5lIF9TUEFSQzY0X1BJTF9ICisKKy8qIFRvIGF2b2lkIHNvbWUgbG9ja2luZyBwcm9ibGVtcywgd2UgaGFyZCBhbGxvY2F0ZSBjZXJ0YWluIFBJTHMKKyAqIGZvciBTTVAgY3Jvc3MgY2FsbCBtZXNzYWdlcyB0aGF0IG11c3QgZG8gYSBldHJhcC9ydHJhcC4KKyAqCisgKiBBIGNsaSgpIGRvZXMgbm90IGJsb2NrIHRoZSBjcm9zcyBjYWxsIGRlbGl2ZXJ5LCBzbyB3aGVuIFNNUAorICogbG9ja2luZyBpcyBhbiBpc3N1ZSB3ZSByZXNjaGVkdWxlIHRoZSBldmVudCBpbnRvIGEgUElMIGludGVycnVwdAorICogd2hpY2ggaXMgYmxvY2tlZCBieSBjbGkoKS4KKyAqCisgKiBJbiBmYWN0IGFueSBYQ0FMTCB3aGljaCBoYXMgdG8gZXRyYXAvcnRyYXAgaGFzIGEgcHJvYmxlbSBiZWNhdXNlCisgKiBpdCBpcyBkaWZmaWN1bHQgdG8gcHJldmVudCBydHJhcCBmcm9tIHJ1bm5pbmcgQkgncywgYW5kIHRoYXQgd291bGQKKyAqIG5lZWQgdG8gYmUgZG9uZSBpZiB0aGUgWENBTEwgYXJyaXZlZCB3aGlsZSAlcGlsPT0xNS4KKyAqLworI2RlZmluZSBQSUxfU01QX0NBTExfRlVOQwkxCisjZGVmaW5lIFBJTF9TTVBfUkVDRUlWRV9TSUdOQUwJMgorI2RlZmluZSBQSUxfU01QX0NBUFRVUkUJCTMKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNkZWZpbmUgUElMX1JFU0VSVkVEKFBJTCkJKChQSUwpID09IFBJTF9TTVBfQ0FMTF9GVU5DIHx8IFwKKwkJCQkgKFBJTCkgPT0gUElMX1NNUF9SRUNFSVZFX1NJR05BTCB8fCBcCisJCQkJIChQSUwpID09IFBJTF9TTVBfQ0FQVFVSRSkKKyNlbmRpZgorCisjZW5kaWYgLyogIShfU1BBUkM2NF9QSUxfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcG9sbC5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9wb2xsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFiNjExYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcG9sbC5oCkBAIC0wLDAgKzEsMjMgQEAKKyNpZm5kZWYgX19TUEFSQzY0X1BPTExfSAorI2RlZmluZSBfX1NQQVJDNjRfUE9MTF9ICisKKyNkZWZpbmUgUE9MTElOCQkgIDEKKyNkZWZpbmUgUE9MTFBSSQkJICAyCisjZGVmaW5lIFBPTExPVVQJCSAgNAorI2RlZmluZSBQT0xMRVJSCQkgIDgKKyNkZWZpbmUgUE9MTEhVUAkJIDE2CisjZGVmaW5lIFBPTExOVkFMCSAzMgorI2RlZmluZSBQT0xMUkROT1JNCSA2NAorI2RlZmluZSBQT0xMV1JOT1JNCVBPTExPVVQKKyNkZWZpbmUgUE9MTFJEQkFORAkxMjgKKyNkZWZpbmUgUE9MTFdSQkFORAkyNTYKKyNkZWZpbmUgUE9MTE1TRwkJNTEyCisjZGVmaW5lIFBPTExSRU1PVkUJMTAyNAorCitzdHJ1Y3QgcG9sbGZkIHsKKwlpbnQgZmQ7CisJc2hvcnQgZXZlbnRzOworCXNob3J0IHJldmVudHM7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcG9zaXhfdHlwZXMuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcG9zaXhfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODZiOTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9wb3NpeF90eXBlcy5oCkBAIC0wLDAgKzEsMTI2IEBACisjaWZuZGVmIF9fQVJDSF9TUEFSQzY0X1BPU0lYX1RZUEVTX0gKKyNkZWZpbmUgX19BUkNIX1NQQVJDNjRfUE9TSVhfVFlQRVNfSAorCisvKgorICogVGhpcyBmaWxlIGlzIGdlbmVyYWxseSB1c2VkIGJ5IHVzZXItbGV2ZWwgc29mdHdhcmUsIHNvIHlvdSBuZWVkIHRvCisgKiBiZSBhIGxpdHRsZSBjYXJlZnVsIGFib3V0IG5hbWVzcGFjZSBwb2xsdXRpb24gZXRjLiAgQWxzbywgd2UgY2Fubm90CisgKiBhc3N1bWUgR0NDIGlzIGJlaW5nIHVzZWQuCisgKi8KKwordHlwZWRlZiB1bnNpZ25lZCBsb25nICAgICAgICAgIF9fa2VybmVsX3NpemVfdDsKK3R5cGVkZWYgbG9uZyAgICAgICAgICAgICAgICAgICBfX2tlcm5lbF9zc2l6ZV90OwordHlwZWRlZiBsb25nICAgICAgICAgICAgICAgICAgIF9fa2VybmVsX3B0cmRpZmZfdDsKK3R5cGVkZWYgbG9uZyAgICAgICAgICAgICAgICAgICBfX2tlcm5lbF90aW1lX3Q7Cit0eXBlZGVmIGxvbmcgICAgICAgICAgICAgICAgICAgX19rZXJuZWxfY2xvY2tfdDsKK3R5cGVkZWYgaW50ICAgICAgICAgICAgICAgICAgICBfX2tlcm5lbF9waWRfdDsKK3R5cGVkZWYgaW50ICAgICAgICAgICAgICAgICAgICBfX2tlcm5lbF9pcGNfcGlkX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludCAgICAgICAgICAgX19rZXJuZWxfdWlkX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludCAgICAgICAgICAgX19rZXJuZWxfZ2lkX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgICAgICAgICAgX19rZXJuZWxfaW5vX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludCAgICAgICAgICAgX19rZXJuZWxfbW9kZV90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCAgICAgICAgIF9fa2VybmVsX3Vtb2RlX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludCAgICAgICAgICAgX19rZXJuZWxfbmxpbmtfdDsKK3R5cGVkZWYgaW50ICAgICAgICAgICAgICAgICAgICBfX2tlcm5lbF9kYWRkcl90OwordHlwZWRlZiBsb25nICAgICAgICAgICAgICAgICAgIF9fa2VybmVsX29mZl90OwordHlwZWRlZiBjaGFyICogICAgICAgICAgICAgICAgIF9fa2VybmVsX2NhZGRyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CSAgICAgICBfX2tlcm5lbF91aWQxNl90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAkgICAgICAgX19rZXJuZWxfZ2lkMTZfdDsKK3R5cGVkZWYgaW50ICAgICAgICAgICAgICAgICAgICBfX2tlcm5lbF9jbG9ja2lkX3Q7Cit0eXBlZGVmIGludCAgICAgICAgICAgICAgICAgICAgX19rZXJuZWxfdGltZXJfdDsKKwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCAJICAgICAgIF9fa2VybmVsX29sZF91aWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgICAgICAgICBfX2tlcm5lbF9vbGRfZ2lkX3Q7Cit0eXBlZGVmIF9fa2VybmVsX3VpZF90CSAgICAgICBfX2tlcm5lbF91aWQzMl90OwordHlwZWRlZiBfX2tlcm5lbF9naWRfdAkgICAgICAgX19rZXJuZWxfZ2lkMzJfdDsKKwordHlwZWRlZiB1bnNpZ25lZCBpbnQJICAgICAgIF9fa2VybmVsX29sZF9kZXZfdDsKKworLyogTm90ZSB0aGlzIHBpZWNlIG9mIGFzeW1tZXRyeSBmcm9tIHRoZSB2OSBBQkkuICAqLwordHlwZWRlZiBpbnQJCSAgICAgICBfX2tlcm5lbF9zdXNlY29uZHNfdDsKKworI2lmZGVmIF9fR05VQ19fCit0eXBlZGVmIGxvbmcgbG9uZyAgICAgICAgICAgICAgX19rZXJuZWxfbG9mZl90OworI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IHsKKyNpZiBkZWZpbmVkKF9fS0VSTkVMX18pIHx8IGRlZmluZWQoX19VU0VfQUxMKQorCWludAl2YWxbMl07CisjZWxzZSAvKiAhZGVmaW5lZChfX0tFUk5FTF9fKSAmJiAhZGVmaW5lZChfX1VTRV9BTEwpICovCisJaW50ICAgICBfX3ZhbFsyXTsKKyNlbmRpZiAvKiAhZGVmaW5lZChfX0tFUk5FTF9fKSAmJiAhZGVmaW5lZChfX1VTRV9BTEwpICovCit9IF9fa2VybmVsX2ZzaWRfdDsKKworI2lmIGRlZmluZWQoX19LRVJORUxfXykgfHwgIWRlZmluZWQoX19HTElCQ19fKSB8fCAoX19HTElCQ19fIDwgMikKKworI3VuZGVmIF9fRkRfU0VUCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fRkRfU0VUKHVuc2lnbmVkIGxvbmcgZmQsIF9fa2VybmVsX2ZkX3NldCAqZmRzZXRwKQoreworCXVuc2lnbmVkIGxvbmcgX3RtcCA9IGZkIC8gX19ORkRCSVRTOworCXVuc2lnbmVkIGxvbmcgX3JlbSA9IGZkICUgX19ORkRCSVRTOworCWZkc2V0cC0+ZmRzX2JpdHNbX3RtcF0gfD0gKDFVTDw8X3JlbSk7Cit9CisKKyN1bmRlZiBfX0ZEX0NMUgorc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0ZEX0NMUih1bnNpZ25lZCBsb25nIGZkLCBfX2tlcm5lbF9mZF9zZXQgKmZkc2V0cCkKK3sKKwl1bnNpZ25lZCBsb25nIF90bXAgPSBmZCAvIF9fTkZEQklUUzsKKwl1bnNpZ25lZCBsb25nIF9yZW0gPSBmZCAlIF9fTkZEQklUUzsKKwlmZHNldHAtPmZkc19iaXRzW190bXBdICY9IH4oMVVMPDxfcmVtKTsKK30KKworI3VuZGVmIF9fRkRfSVNTRVQKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0ZEX0lTU0VUKHVuc2lnbmVkIGxvbmcgZmQsIF9fY29uc3RfXyBfX2tlcm5lbF9mZF9zZXQgKnApCit7IAorCXVuc2lnbmVkIGxvbmcgX3RtcCA9IGZkIC8gX19ORkRCSVRTOworCXVuc2lnbmVkIGxvbmcgX3JlbSA9IGZkICUgX19ORkRCSVRTOworCXJldHVybiAocC0+ZmRzX2JpdHNbX3RtcF0gJiAoMVVMPDxfcmVtKSkgIT0gMDsKK30KKworLyoKKyAqIFRoaXMgd2lsbCB1bnJvbGwgdGhlIGxvb3AgZm9yIHRoZSBub3JtYWwgY29uc3RhbnQgY2FzZXMgKDggb3IgMzIgbG9uZ3MsCisgKiBmb3IgMjU2IGFuZCAxMDI0LWJpdCBmZF9zZXRzIHJlc3BlY3RpdmVseSkKKyAqLworI3VuZGVmIF9fRkRfWkVSTworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0ZEX1pFUk8oX19rZXJuZWxfZmRfc2V0ICpwKQoreworCXVuc2lnbmVkIGxvbmcgKnRtcCA9IHAtPmZkc19iaXRzOworCWludCBpOworCisJaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKF9fRkRTRVRfTE9OR1MpKSB7CisJCXN3aXRjaCAoX19GRFNFVF9MT05HUykgeworCQkJY2FzZSAzMjoKKwkJCSAgdG1wWyAwXSA9IDA7IHRtcFsgMV0gPSAwOyB0bXBbIDJdID0gMDsgdG1wWyAzXSA9IDA7CisJCQkgIHRtcFsgNF0gPSAwOyB0bXBbIDVdID0gMDsgdG1wWyA2XSA9IDA7IHRtcFsgN10gPSAwOworCQkJICB0bXBbIDhdID0gMDsgdG1wWyA5XSA9IDA7IHRtcFsxMF0gPSAwOyB0bXBbMTFdID0gMDsKKwkJCSAgdG1wWzEyXSA9IDA7IHRtcFsxM10gPSAwOyB0bXBbMTRdID0gMDsgdG1wWzE1XSA9IDA7CisJCQkgIHRtcFsxNl0gPSAwOyB0bXBbMTddID0gMDsgdG1wWzE4XSA9IDA7IHRtcFsxOV0gPSAwOworCQkJICB0bXBbMjBdID0gMDsgdG1wWzIxXSA9IDA7IHRtcFsyMl0gPSAwOyB0bXBbMjNdID0gMDsKKwkJCSAgdG1wWzI0XSA9IDA7IHRtcFsyNV0gPSAwOyB0bXBbMjZdID0gMDsgdG1wWzI3XSA9IDA7CisJCQkgIHRtcFsyOF0gPSAwOyB0bXBbMjldID0gMDsgdG1wWzMwXSA9IDA7IHRtcFszMV0gPSAwOworCQkJICByZXR1cm47CisJCQljYXNlIDE2OgorCQkJICB0bXBbIDBdID0gMDsgdG1wWyAxXSA9IDA7IHRtcFsgMl0gPSAwOyB0bXBbIDNdID0gMDsKKwkJCSAgdG1wWyA0XSA9IDA7IHRtcFsgNV0gPSAwOyB0bXBbIDZdID0gMDsgdG1wWyA3XSA9IDA7CisJCQkgIHRtcFsgOF0gPSAwOyB0bXBbIDldID0gMDsgdG1wWzEwXSA9IDA7IHRtcFsxMV0gPSAwOworCQkJICB0bXBbMTJdID0gMDsgdG1wWzEzXSA9IDA7IHRtcFsxNF0gPSAwOyB0bXBbMTVdID0gMDsKKwkJCSAgcmV0dXJuOworCQkJY2FzZSA4OgorCQkJICB0bXBbIDBdID0gMDsgdG1wWyAxXSA9IDA7IHRtcFsgMl0gPSAwOyB0bXBbIDNdID0gMDsKKwkJCSAgdG1wWyA0XSA9IDA7IHRtcFsgNV0gPSAwOyB0bXBbIDZdID0gMDsgdG1wWyA3XSA9IDA7CisJCQkgIHJldHVybjsKKwkJCWNhc2UgNDoKKwkJCSAgdG1wWyAwXSA9IDA7IHRtcFsgMV0gPSAwOyB0bXBbIDJdID0gMDsgdG1wWyAzXSA9IDA7CisJCQkgIHJldHVybjsKKwkJfQorCX0KKwlpID0gX19GRFNFVF9MT05HUzsKKwl3aGlsZSAoaSkgeworCQlpLS07CisJCSp0bXAgPSAwOworCQl0bXArKzsKKwl9Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKF9fS0VSTkVMX18pIHx8ICFkZWZpbmVkKF9fR0xJQkNfXykgfHwgKF9fR0xJQkNfXyA8IDIpICovCisKKyNlbmRpZiAvKiAhKF9fQVJDSF9TUEFSQzY0X1BPU0lYX1RZUEVTX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3Byb2Nlc3Nvci5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9wcm9jZXNzb3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzE0NDViCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9wcm9jZXNzb3IuaApAQCAtMCwwICsxLDE5NyBAQAorLyogJElkOiBwcm9jZXNzb3IuaCx2IDEuODMgMjAwMi8wMi8xMCAwNjowNDozMyBkYXZlbSBFeHAgJAorICogaW5jbHVkZS9hc20tc3BhcmM2NC9wcm9jZXNzb3IuaAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NiBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCisgKi8KKworI2lmbmRlZiBfX0FTTV9TUEFSQzY0X1BST0NFU1NPUl9ICisjZGVmaW5lIF9fQVNNX1NQQVJDNjRfUFJPQ0VTU09SX0gKKworLyoKKyAqIFNwYXJjNjQgaW1wbGVtZW50YXRpb24gb2YgbWFjcm8gdGhhdCByZXR1cm5zIGN1cnJlbnQKKyAqIGluc3RydWN0aW9uIHBvaW50ZXIgKCJwcm9ncmFtIGNvdW50ZXIiKS4KKyAqLworI2RlZmluZSBjdXJyZW50X3RleHRfYWRkcigpICh7IHZvaWQgKnBjOyBfX2FzbV9fKCJyZCAlJXBjLCAlMCIgOiAiPXIiIChwYykpOyBwYzsgfSkKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS9hc2kuaD4KKyNpbmNsdWRlIDxhc20vYS5vdXQuaD4KKyNpbmNsdWRlIDxhc20vcHN0YXRlLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKworLyogVGhlIHNwYXJjIGhhcyBubyBwcm9ibGVtcyB3aXRoIHdyaXRlIHByb3RlY3Rpb24gKi8KKyNkZWZpbmUgd3Bfd29ya3Nfb2sgMQorI2RlZmluZSB3cF93b3Jrc19va19faXNfYV9tYWNybyAvKiBmb3IgdmVyc2lvbnMgaW4ga3N5bXMuYyAqLworCisvKgorICogVXNlciBsaXZlcyBpbiBoaXMgdmVyeSBvd24gY29udGV4dCwgYW5kIGNhbm5vdCByZWZlcmVuY2UgdXMuIE5vdGUKKyAqIHRoYXQgVEFTS19TSVpFIGlzIGEgbWlzbm9tZXIsIGl0IHJlYWxseSBnaXZlcyBtYXhpbXVtIHVzZXIgdmlydHVhbCAKKyAqIGFkZHJlc3MgdGhhdCB0aGUga2VybmVsIHdpbGwgYWxsb2NhdGUgb3V0LgorICovCisjZGVmaW5lIFZBX0JJVFMJCTQ0CisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2RlZmluZSBWUFRFX1NJWkUJKDFVTCA8PCAoVkFfQklUUyAtIFBBR0VfU0hJRlQgKyAzKSkKKyNlbHNlCisjZGVmaW5lIFZQVEVfU0laRQkoMSA8PCAoVkFfQklUUyAtIFBBR0VfU0hJRlQgKyAzKSkKKyNlbmRpZgorI2RlZmluZSBUQVNLX1NJWkUJKCh1bnNpZ25lZCBsb25nKS1WUFRFX1NJWkUpCisKKy8qCisgKiBUaGUgdnB0ZSBiYXNlIG11c3QgYmUgYWJsZSB0byBob2xkIHRoZSBlbnRpcmUgdnB0ZSwgaGFsZgorICogb2Ygd2hpY2ggbGl2ZXMgYWJvdmUsIGFuZCBoYWxmIGJlbG93LCB0aGUgYmFzZS4gQW5kIGl0CisgKiBpcyBwbGFjZWQgYXMgY2xvc2UgdG8gdGhlIGhpZ2hlc3QgYWRkcmVzcyByYW5nZSBhcyBwb3NzaWJsZS4KKyAqLworI2RlZmluZSBWUFRFX0JBU0VfU1BJVEZJUkUJKC0oVlBURV9TSVpFLzIpKQorI2lmIDEKKyNkZWZpbmUgVlBURV9CQVNFX0NIRUVUQUgJVlBURV9CQVNFX1NQSVRGSVJFCisjZWxzZQorI2RlZmluZSBWUFRFX0JBU0VfQ0hFRVRBSAkweGZmZTAwMDAwMDAwMDAwMDAKKyNlbmRpZgorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgY2hhciBzZWc7Cit9IG1tX3NlZ21lbnRfdDsKKworLyogVGhlIFNwYXJjIHByb2Nlc3NvciBzcGVjaWZpYyB0aHJlYWQgc3RydWN0LiAqLworLyogWFhYIFRoaXMgc2hvdWxkIGRpZSwgZXZlcnl0aGluZyBjYW4gZ28gaW50byB0aHJlYWRfaW5mbyBub3cuICovCitzdHJ1Y3QgdGhyZWFkX3N0cnVjdCB7CisjaWZkZWYgQ09ORklHX0RFQlVHX1NQSU5MT0NLCisJLyogSG93IG1hbnkgc3BpbmxvY2tzIGhlbGQgYnkgdGhpcyB0aHJlYWQuCisJICogVXNlZCB3aXRoIHNwaW4gbG9jayBkZWJ1Z2dpbmcgdG8gY2F0Y2ggdGFza3MKKwkgKiBzbGVlcGluZyBpbGxlZ2FsbHkgd2l0aCBsb2NrcyBoZWxkLgorCSAqLworCWludCBzbXBfbG9ja19jb3VudDsKKwl1bnNpZ25lZCBpbnQgc21wX2xvY2tfcGM7CisjZWxzZQorCWludCBkdW1teTsgLyogZidpbiBnY2MgYnVnLi4uICovCisjZW5kaWYKK307CisKKyNlbmRpZiAvKiAhKF9fQVNTRU1CTFlfXykgKi8KKworI2lmbmRlZiBDT05GSUdfREVCVUdfU1BJTkxPQ0sKKyNkZWZpbmUgSU5JVF9USFJFQUQgIHsJCQlcCisJMCwJCQkJXAorfQorI2Vsc2UgLyogQ09ORklHX0RFQlVHX1NQSU5MT0NLICovCisjZGVmaW5lIElOSVRfVEhSRUFEICB7CQkJCQlcCisvKiBzbXBfbG9ja19jb3VudCwgc21wX2xvY2tfcGMsICovCQkJXAorICAgMCwJCSAgIDAsCQkJCQlcCit9CisjZW5kaWYgLyogIShDT05GSUdfREVCVUdfU1BJTkxPQ0spICovCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKiBSZXR1cm4gc2F2ZWQgUEMgb2YgYSBibG9ja2VkIHRocmVhZC4gKi8KK3N0cnVjdCB0YXNrX3N0cnVjdDsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHRocmVhZF9zYXZlZF9wYyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CisKKy8qIE9uIFVuaXByb2Nlc3NvciwgZXZlbiBpbiBSTU8gcHJvY2Vzc2VzIHNlZSBUU08gc2VtYW50aWNzICovCisjaWZkZWYgQ09ORklHX1NNUAorI2RlZmluZSBUU1RBVEVfSU5JVElBTF9NTQlUU1RBVEVfVFNPCisjZWxzZQorI2RlZmluZSBUU1RBVEVfSU5JVElBTF9NTQlUU1RBVEVfUk1PCisjZW5kaWYKKworLyogRG8gbmVjZXNzYXJ5IHNldHVwIHRvIHN0YXJ0IHVwIGEgbmV3bHkgZXhlY3V0ZWQgdGhyZWFkLiAqLworI2RlZmluZSBzdGFydF90aHJlYWQocmVncywgcGMsIHNwKSBcCitkbyB7IFwKKwlyZWdzLT50c3RhdGUgPSAocmVncy0+dHN0YXRlICYgKFRTVEFURV9DV1ApKSB8IChUU1RBVEVfSU5JVElBTF9NTXxUU1RBVEVfSUUpIHwgKEFTSV9QTkYgPDwgMjQpOyBcCisJcmVncy0+dHBjID0gKChwYyAmICh+MykpIC0gNCk7IFwKKwlyZWdzLT50bnBjID0gcmVncy0+dHBjICsgNDsgXAorCXJlZ3MtPnkgPSAwOyBcCisJc2V0X3RocmVhZF93c3RhdGUoMSA8PCAzKTsgXAorCWlmIChjdXJyZW50X3RocmVhZF9pbmZvKCktPnV0cmFwcykgeyBcCisJCWlmICgqKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+dXRyYXBzKSA8IDIpIFwKKwkJCWtmcmVlKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+dXRyYXBzKTsgXAorCQllbHNlIFwKKwkJCSgqKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+dXRyYXBzKSktLTsgXAorCQljdXJyZW50X3RocmVhZF9pbmZvKCktPnV0cmFwcyA9IE5VTEw7IFwKKwl9IFwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyggXAorCSJzdHgJCSUlZzAsIFslMCArICUyICsgMHgwMF1cblx0IiBcCisJInN0eAkJJSVnMCwgWyUwICsgJTIgKyAweDA4XVxuXHQiIFwKKwkic3R4CQklJWcwLCBbJTAgKyAlMiArIDB4MTBdXG5cdCIgXAorCSJzdHgJCSUlZzAsIFslMCArICUyICsgMHgxOF1cblx0IiBcCisJInN0eAkJJSVnMCwgWyUwICsgJTIgKyAweDIwXVxuXHQiIFwKKwkic3R4CQklJWcwLCBbJTAgKyAlMiArIDB4MjhdXG5cdCIgXAorCSJzdHgJCSUlZzAsIFslMCArICUyICsgMHgzMF1cblx0IiBcCisJInN0eAkJJSVnMCwgWyUwICsgJTIgKyAweDM4XVxuXHQiIFwKKwkic3R4CQklJWcwLCBbJTAgKyAlMiArIDB4NDBdXG5cdCIgXAorCSJzdHgJCSUlZzAsIFslMCArICUyICsgMHg0OF1cblx0IiBcCisJInN0eAkJJSVnMCwgWyUwICsgJTIgKyAweDUwXVxuXHQiIFwKKwkic3R4CQklJWcwLCBbJTAgKyAlMiArIDB4NThdXG5cdCIgXAorCSJzdHgJCSUlZzAsIFslMCArICUyICsgMHg2MF1cblx0IiBcCisJInN0eAkJJSVnMCwgWyUwICsgJTIgKyAweDY4XVxuXHQiIFwKKwkic3R4CQklMSwgICBbJTAgKyAlMiArIDB4NzBdXG5cdCIgXAorCSJzdHgJCSUlZzAsIFslMCArICUyICsgMHg3OF1cblx0IiBcCisJIndycHIJCSUlZzAsICgxIDw8IDMpLCAlJXdzdGF0ZVxuXHQiIFwKKwk6IFwKKwk6ICJyIiAocmVncyksICJyIiAoc3AgLSBzaXplb2Yoc3RydWN0IHJlZ193aW5kb3cpIC0gU1RBQ0tfQklBUyksIFwKKwkgICJpIiAoKGNvbnN0IHVuc2lnbmVkIGxvbmcpKCYoKHN0cnVjdCBwdF9yZWdzICopMCktPnVfcmVnc1swXSkpKTsgXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBzdGFydF90aHJlYWQzMihyZWdzLCBwYywgc3ApIFwKK2RvIHsgXAorCXBjICY9IDB4MDAwMDAwMDBmZmZmZmZmZlVMOyBcCisJc3AgJj0gMHgwMDAwMDAwMGZmZmZmZmZmVUw7IFwKK1wKKwlyZWdzLT50c3RhdGUgPSAocmVncy0+dHN0YXRlICYgKFRTVEFURV9DV1ApKXwoVFNUQVRFX0lOSVRJQUxfTU18VFNUQVRFX0lFfFRTVEFURV9BTSk7IFwKKwlyZWdzLT50cGMgPSAoKHBjICYgKH4zKSkgLSA0KTsgXAorCXJlZ3MtPnRucGMgPSByZWdzLT50cGMgKyA0OyBcCisJcmVncy0+eSA9IDA7IFwKKwlzZXRfdGhyZWFkX3dzdGF0ZSgyIDw8IDMpOyBcCisJaWYgKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+dXRyYXBzKSB7IFwKKwkJaWYgKCooY3VycmVudF90aHJlYWRfaW5mbygpLT51dHJhcHMpIDwgMikgXAorCQkJa2ZyZWUoY3VycmVudF90aHJlYWRfaW5mbygpLT51dHJhcHMpOyBcCisJCWVsc2UgXAorCQkJKCooY3VycmVudF90aHJlYWRfaW5mbygpLT51dHJhcHMpKS0tOyBcCisJCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+dXRyYXBzID0gTlVMTDsgXAorCX0gXAorCV9fYXNtX18gX192b2xhdGlsZV9fKCBcCisJInN0eAkJJSVnMCwgWyUwICsgJTIgKyAweDAwXVxuXHQiIFwKKwkic3R4CQklJWcwLCBbJTAgKyAlMiArIDB4MDhdXG5cdCIgXAorCSJzdHgJCSUlZzAsIFslMCArICUyICsgMHgxMF1cblx0IiBcCisJInN0eAkJJSVnMCwgWyUwICsgJTIgKyAweDE4XVxuXHQiIFwKKwkic3R4CQklJWcwLCBbJTAgKyAlMiArIDB4MjBdXG5cdCIgXAorCSJzdHgJCSUlZzAsIFslMCArICUyICsgMHgyOF1cblx0IiBcCisJInN0eAkJJSVnMCwgWyUwICsgJTIgKyAweDMwXVxuXHQiIFwKKwkic3R4CQklJWcwLCBbJTAgKyAlMiArIDB4MzhdXG5cdCIgXAorCSJzdHgJCSUlZzAsIFslMCArICUyICsgMHg0MF1cblx0IiBcCisJInN0eAkJJSVnMCwgWyUwICsgJTIgKyAweDQ4XVxuXHQiIFwKKwkic3R4CQklJWcwLCBbJTAgKyAlMiArIDB4NTBdXG5cdCIgXAorCSJzdHgJCSUlZzAsIFslMCArICUyICsgMHg1OF1cblx0IiBcCisJInN0eAkJJSVnMCwgWyUwICsgJTIgKyAweDYwXVxuXHQiIFwKKwkic3R4CQklJWcwLCBbJTAgKyAlMiArIDB4NjhdXG5cdCIgXAorCSJzdHgJCSUxLCAgIFslMCArICUyICsgMHg3MF1cblx0IiBcCisJInN0eAkJJSVnMCwgWyUwICsgJTIgKyAweDc4XVxuXHQiIFwKKwkid3JwcgkJJSVnMCwgKDIgPDwgMyksICUld3N0YXRlXG5cdCIgXAorCTogXAorCTogInIiIChyZWdzKSwgInIiIChzcCAtIHNpemVvZihzdHJ1Y3QgcmVnX3dpbmRvdzMyKSksIFwKKwkgICJpIiAoKGNvbnN0IHVuc2lnbmVkIGxvbmcpKCYoKHN0cnVjdCBwdF9yZWdzICopMCktPnVfcmVnc1swXSkpKTsgXAorfSB3aGlsZSAoMCkKKworLyogRnJlZSBhbGwgcmVzb3VyY2VzIGhlbGQgYnkgYSB0aHJlYWQuICovCisjZGVmaW5lIHJlbGVhc2VfdGhyZWFkKHRzaykJCWRvIHsgfSB3aGlsZSAoMCkKKworLyogUHJlcGFyZSB0byBjb3B5IHRocmVhZCBzdGF0ZSAtIHVubGF6eSBhbGwgbGF6eSBzdGF0dXMgKi8KKyNkZWZpbmUgcHJlcGFyZV90b19jb3B5KHRzaykJZG8geyB9IHdoaWxlICgwKQorCitleHRlcm4gcGlkX3Qga2VybmVsX3RocmVhZChpbnQgKCpmbikodm9pZCAqKSwgdm9pZCAqIGFyZywgdW5zaWduZWQgbG9uZyBmbGFncyk7CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIGdldF93Y2hhbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOworCisjZGVmaW5lIEtTVEtfRUlQKHRzaykgICgodHNrKS0+dGhyZWFkX2luZm8tPmtyZWdzLT50cGMpCisjZGVmaW5lIEtTVEtfRVNQKHRzaykgICgodHNrKS0+dGhyZWFkX2luZm8tPmtyZWdzLT51X3JlZ3NbVVJFR19GUF0pCisKKyNkZWZpbmUgY3B1X3JlbGF4KCkJYmFycmllcigpCisKKyNlbmRpZiAvKiAhKF9fQVNTRU1CTFlfXykgKi8KKworI2VuZGlmIC8qICEoX19BU01fU1BBUkM2NF9QUk9DRVNTT1JfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcHNyY29tcGF0LmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3BzcmNvbXBhdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1OTBjZTYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3BzcmNvbXBhdC5oCkBAIC0wLDAgKzEsNDQgQEAKKy8qICRJZDogcHNyY29tcGF0LmgsdiAxLjUgMTk5OC8xMC8wNiAwOToyODozOSBqaiBFeHAgJCAqLworI2lmbmRlZiBfU1BBUkM2NF9QU1JDT01QQVRfSAorI2RlZmluZSBfU1BBUkM2NF9QU1JDT01QQVRfSAorCisjaW5jbHVkZSA8YXNtL3BzdGF0ZS5oPgorCisvKiBPbGQgMzItYml0IFBTUiBmaWVsZHMgZm9yIHRoZSBjb21wYXRpYmlsaXR5IGNvbnZlcnNpb24gY29kZS4gKi8KKyNkZWZpbmUgUFNSX0NXUCAgICAgMHgwMDAwMDAxZiAgICAgICAgIC8qIGN1cnJlbnQgd2luZG93IHBvaW50ZXIgICAgICovCisjZGVmaW5lIFBTUl9FVCAgICAgIDB4MDAwMDAwMjAgICAgICAgICAvKiBlbmFibGUgdHJhcHMgZmllbGQgICAgICAgICAqLworI2RlZmluZSBQU1JfUFMgICAgICAweDAwMDAwMDQwICAgICAgICAgLyogcHJldmlvdXMgcHJpdmlsZWdlIGxldmVsICAgKi8KKyNkZWZpbmUgUFNSX1MgICAgICAgMHgwMDAwMDA4MCAgICAgICAgIC8qIGN1cnJlbnQgcHJpdmlsZWdlIGxldmVsICAgICovCisjZGVmaW5lIFBTUl9QSUwgICAgIDB4MDAwMDBmMDAgICAgICAgICAvKiBwcm9jZXNzb3IgaW50ZXJydXB0IGxldmVsICAqLworI2RlZmluZSBQU1JfRUYgICAgICAweDAwMDAxMDAwICAgICAgICAgLyogZW5hYmxlIGZsb2F0aW5nIHBvaW50ICAgICAgKi8KKyNkZWZpbmUgUFNSX0VDICAgICAgMHgwMDAwMjAwMCAgICAgICAgIC8qIGVuYWJsZSBjby1wcm9jZXNzb3IgICAgICAgICovCisjZGVmaW5lIFBTUl9MRSAgICAgIDB4MDAwMDgwMDAgICAgICAgICAvKiBTdXBlclNwYXJjSUkgbGl0dGxlLWVuZGlhbiAqLworI2RlZmluZSBQU1JfSUNDICAgICAweDAwZjAwMDAwICAgICAgICAgLyogaW50ZWdlciBjb25kaXRpb24gY29kZXMgICAgKi8KKyNkZWZpbmUgUFNSX0MgICAgICAgMHgwMDEwMDAwMCAgICAgICAgIC8qIGNhcnJ5IGJpdCAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBTUl9WICAgICAgIDB4MDAyMDAwMDAgICAgICAgICAvKiBvdmVyZmxvdyBiaXQgICAgICAgICAgICAgICAqLworI2RlZmluZSBQU1JfWiAgICAgICAweDAwNDAwMDAwICAgICAgICAgLyogemVybyBiaXQgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUFNSX04gICAgICAgMHgwMDgwMDAwMCAgICAgICAgIC8qIG5lZ2F0aXZlIGJpdCAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBTUl9WRVJTICAgIDB4MGYwMDAwMDAgICAgICAgICAvKiBjcHUtdmVyc2lvbiBmaWVsZCAgICAgICAgICAqLworI2RlZmluZSBQU1JfSU1QTCAgICAweGYwMDAwMDAwICAgICAgICAgLyogY3B1LWltcGxlbWVudGF0aW9uIGZpZWxkICAgKi8KKworI2RlZmluZSBQU1JfVjhQTFVTICAweGZmMDAwMDAwICAgICAgICAgLyogZmFrZSBpbXBsL3ZlciwgbWVhbmluZyBhIDY0Yml0IENQVSBpcyBwcmVzZW50ICovCisjZGVmaW5lIFBTUl9YQ0MJICAgIDB4MDAwZjAwMDAgICAgICAgICAvKiBpZiBQU1JfVjhQTFVTLCB0aGlzIGlzICV4Y2MgKi8KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgdHN0YXRlX3RvX3Bzcih1bnNpZ25lZCBsb25nIHRzdGF0ZSkKK3sKKwlyZXR1cm4gKCh0c3RhdGUgJiBUU1RBVEVfQ1dQKQkJCXwKKwkJUFNSX1MJCQkJCXwKKwkJKCh0c3RhdGUgJiBUU1RBVEVfSUNDKSA+PiAxMikJCXwKKwkJKCh0c3RhdGUgJiBUU1RBVEVfWENDKSA+PiAyMCkJCXwKKwkJUFNSX1Y4UExVUyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwc3JfdG9fdHN0YXRlX2ljYyh1bnNpZ25lZCBpbnQgcHNyKQoreworCXVuc2lnbmVkIGxvbmcgdHN0YXRlID0gKCh1bnNpZ25lZCBsb25nKShwc3IgJiBQU1JfSUNDKSkgPDwgMTI7CisJaWYgKChwc3IgJiAoUFNSX1ZFUlN8UFNSX0lNUEwpKSA9PSBQU1JfVjhQTFVTKQorCQl0c3RhdGUgfD0gKCh1bnNpZ25lZCBsb25nKShwc3IgJiBQU1JfWENDKSkgPDwgMjA7CisJcmV0dXJuIHRzdGF0ZTsKK30KKworI2VuZGlmIC8qICEoX1NQQVJDNjRfUFNSQ09NUEFUX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3BzdGF0ZS5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9wc3RhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWZiNzRhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9wc3RhdGUuaApAQCAtMCwwICsxLDkwIEBACisvKiAkSWQ6IHBzdGF0ZS5oLHYgMS42IDE5OTcvMDYvMjUgMDc6Mzk6NDUgamogRXhwICQgKi8KKyNpZm5kZWYgX1NQQVJDNjRfUFNUQVRFX0gKKyNkZWZpbmUgX1NQQVJDNjRfUFNUQVRFX0gKKworI2luY2x1ZGUgPGFzbS9jb25zdC5oPgorCisvKiBUaGUgVjkgUFNUQVRFIFJlZ2lzdGVyICh3aXRoIFNwaXRGaXJlIGV4dGVuc2lvbnMpLgorICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiB8IFJlc3YgfCBJRyB8IE1HIHwgQ0xFIHwgVExFIHwgIE1NICB8IFJFRCB8IFBFRiB8IEFNIHwgUFJJViB8IElFIHwgQUcgfAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICA2MyAgMTIgIDExICAgMTAgICAgOSAgICAgOCAgICA3ICAgNiAgIDUgICAgIDQgICAgIDMgICAgIDIgICAgIDEgICAgMAorICovCisjZGVmaW5lIFBTVEFURV9JRyAgIF9BQygweDAwMDAwMDAwMDAwMDA4MDAsVUwpIC8qIEludGVycnVwdCBHbG9iYWxzLgkqLworI2RlZmluZSBQU1RBVEVfTUcgICBfQUMoMHgwMDAwMDAwMDAwMDAwNDAwLFVMKSAvKiBNTVUgR2xvYmFscy4JCSovCisjZGVmaW5lIFBTVEFURV9DTEUgIF9BQygweDAwMDAwMDAwMDAwMDAyMDAsVUwpIC8qIEN1cnJlbnQgTGl0dGxlIEVuZGlhbi4qLworI2RlZmluZSBQU1RBVEVfVExFICBfQUMoMHgwMDAwMDAwMDAwMDAwMTAwLFVMKSAvKiBUcmFwIExpdHRsZSBFbmRpYW4uCSovCisjZGVmaW5lIFBTVEFURV9NTSAgIF9BQygweDAwMDAwMDAwMDAwMDAwYzAsVUwpIC8qIE1lbW9yeSBNb2RlbC4JCSovCisjZGVmaW5lIFBTVEFURV9UU08gIF9BQygweDAwMDAwMDAwMDAwMDAwMDAsVUwpIC8qIE1NOiBUb3RhbFN0b3JlT3JkZXIJKi8KKyNkZWZpbmUgUFNUQVRFX1BTTyAgX0FDKDB4MDAwMDAwMDAwMDAwMDA0MCxVTCkgLyogTU06IFBhcnRpYWxTdG9yZU9yZGVyCSovCisjZGVmaW5lIFBTVEFURV9STU8gIF9BQygweDAwMDAwMDAwMDAwMDAwODAsVUwpIC8qIE1NOiBSZWxheGVkTWVtb3J5T3JkZXIqLworI2RlZmluZSBQU1RBVEVfUkVEICBfQUMoMHgwMDAwMDAwMDAwMDAwMDIwLFVMKSAvKiBSZXNldCBFcnJvciBEZWJ1Zy4JKi8KKyNkZWZpbmUgUFNUQVRFX1BFRiAgX0FDKDB4MDAwMDAwMDAwMDAwMDAxMCxVTCkgLyogRmxvYXRpbmcgUG9pbnQgRW5hYmxlLiovCisjZGVmaW5lIFBTVEFURV9BTSAgIF9BQygweDAwMDAwMDAwMDAwMDAwMDgsVUwpIC8qIEFkZHJlc3MgTWFzay4JCSovCisjZGVmaW5lIFBTVEFURV9QUklWIF9BQygweDAwMDAwMDAwMDAwMDAwMDQsVUwpIC8qIFByaXZpbGVnZS4JCSovCisjZGVmaW5lIFBTVEFURV9JRSAgIF9BQygweDAwMDAwMDAwMDAwMDAwMDIsVUwpIC8qIEludGVycnVwdCBFbmFibGUuCSovCisjZGVmaW5lIFBTVEFURV9BRyAgIF9BQygweDAwMDAwMDAwMDAwMDAwMDEsVUwpIC8qIEFsdGVybmF0ZSBHbG9iYWxzLgkqLworCisvKiBUaGUgVjkgVFNUQVRFIFJlZ2lzdGVyICh3aXRoIFNwaXRGaXJlIGFuZCBMaW51eCBleHRlbnNpb25zKS4KKyAqCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHwgIFJlc3YgIHwgIENDUiAgfCAgQVNJICB8ICAlcGlsICB8ICBQU1RBVEUgIHwgIFJlc3YgIHwgIENXUCAgfAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgNjMgICAgNDAgMzkgICAzMiAzMSAgIDI0IDIzICAgIDIwIDE5ICAgICAgIDggNyAgICAgIDUgNCAgICAgMAorICovCisjZGVmaW5lIFRTVEFURV9DQ1IJX0FDKDB4MDAwMDAwZmYwMDAwMDAwMCxVTCkgLyogQ29uZGl0aW9uIENvZGVzLgkqLworI2RlZmluZSBUU1RBVEVfWENDCV9BQygweDAwMDAwMGYwMDAwMDAwMDAsVUwpIC8qIENvbmRpdGlvbiBDb2Rlcy4JKi8KKyNkZWZpbmUgVFNUQVRFX1hORUcJX0FDKDB4MDAwMDAwODAwMDAwMDAwMCxVTCkgLyogJXhjYyBOZWdhdGl2ZS4JKi8KKyNkZWZpbmUgVFNUQVRFX1haRVJPCV9BQygweDAwMDAwMDQwMDAwMDAwMDAsVUwpIC8qICV4Y2MgWmVyby4JKi8KKyNkZWZpbmUgVFNUQVRFX1hPVkZMCV9BQygweDAwMDAwMDIwMDAwMDAwMDAsVUwpIC8qICV4Y2MgT3ZlcmZsb3cuCSovCisjZGVmaW5lIFRTVEFURV9YQ0FSUlkJX0FDKDB4MDAwMDAwMTAwMDAwMDAwMCxVTCkgLyogJXhjYyBDYXJyeS4JKi8KKyNkZWZpbmUgVFNUQVRFX0lDQwlfQUMoMHgwMDAwMDAwZjAwMDAwMDAwLFVMKSAvKiBDb25kaXRpb24gQ29kZXMuCSovCisjZGVmaW5lIFRTVEFURV9JTkVHCV9BQygweDAwMDAwMDA4MDAwMDAwMDAsVUwpIC8qICVpY2MgTmVnYXRpdmUuCSovCisjZGVmaW5lIFRTVEFURV9JWkVSTwlfQUMoMHgwMDAwMDAwNDAwMDAwMDAwLFVMKSAvKiAlaWNjIFplcm8uCSovCisjZGVmaW5lIFRTVEFURV9JT1ZGTAlfQUMoMHgwMDAwMDAwMjAwMDAwMDAwLFVMKSAvKiAlaWNjIE92ZXJmbG93LgkqLworI2RlZmluZSBUU1RBVEVfSUNBUlJZCV9BQygweDAwMDAwMDAxMDAwMDAwMDAsVUwpIC8qICVpY2MgQ2FycnkuCSovCisjZGVmaW5lIFRTVEFURV9BU0kJX0FDKDB4MDAwMDAwMDBmZjAwMDAwMCxVTCkgLyogQWRkclNwYWNlIElELgkqLworI2RlZmluZSBUU1RBVEVfUElMCV9BQygweDAwMDAwMDAwMDBmMDAwMDAsVUwpIC8qICVwaWwgKExpbnV4IHRyYXBzKSovCisjZGVmaW5lIFRTVEFURV9QU1RBVEUJX0FDKDB4MDAwMDAwMDAwMDBmZmYwMCxVTCkgLyogUFNUQVRFLgkJKi8KKyNkZWZpbmUgVFNUQVRFX0lHCV9BQygweDAwMDAwMDAwMDAwODAwMDAsVUwpIC8qIEludGVycnVwdCBHbG9iYWxzLiovCisjZGVmaW5lIFRTVEFURV9NRwlfQUMoMHgwMDAwMDAwMDAwMDQwMDAwLFVMKSAvKiBNTVUgR2xvYmFscy4JKi8KKyNkZWZpbmUgVFNUQVRFX0NMRQlfQUMoMHgwMDAwMDAwMDAwMDIwMDAwLFVMKSAvKiBDdXJyTGl0dGxlRW5kaWFuLgkqLworI2RlZmluZSBUU1RBVEVfVExFCV9BQygweDAwMDAwMDAwMDAwMTAwMDAsVUwpIC8qIFRyYXBMaXR0bGVFbmRpYW4uCSovCisjZGVmaW5lIFRTVEFURV9NTQlfQUMoMHgwMDAwMDAwMDAwMDBjMDAwLFVMKSAvKiBNZW1vcnkgTW9kZWwuCSovCisjZGVmaW5lIFRTVEFURV9UU08JX0FDKDB4MDAwMDAwMDAwMDAwMDAwMCxVTCkgLyogTU06IFRTTwkJKi8KKyNkZWZpbmUgVFNUQVRFX1BTTwlfQUMoMHgwMDAwMDAwMDAwMDA0MDAwLFVMKSAvKiBNTTogUFNPCQkqLworI2RlZmluZSBUU1RBVEVfUk1PCV9BQygweDAwMDAwMDAwMDAwMDgwMDAsVUwpIC8qIE1NOiBSTU8JCSovCisjZGVmaW5lIFRTVEFURV9SRUQJX0FDKDB4MDAwMDAwMDAwMDAwMjAwMCxVTCkgLyogUmVzZXQgRXJyb3IgRGVidWcuKi8KKyNkZWZpbmUgVFNUQVRFX1BFRglfQUMoMHgwMDAwMDAwMDAwMDAxMDAwLFVMKSAvKiBGUFUgRW5hYmxlLgkqLworI2RlZmluZSBUU1RBVEVfQU0JX0FDKDB4MDAwMDAwMDAwMDAwMDgwMCxVTCkgLyogQWRkcmVzcyBNYXNrLgkqLworI2RlZmluZSBUU1RBVEVfUFJJVglfQUMoMHgwMDAwMDAwMDAwMDAwNDAwLFVMKSAvKiBQcml2aWxlZ2UuCSovCisjZGVmaW5lIFRTVEFURV9JRQlfQUMoMHgwMDAwMDAwMDAwMDAwMjAwLFVMKSAvKiBJbnRlcnJ1cHQgRW5hYmxlLgkqLworI2RlZmluZSBUU1RBVEVfQUcJX0FDKDB4MDAwMDAwMDAwMDAwMDEwMCxVTCkgLyogQWx0ZXJuYXRlIEdsb2JhbHMuKi8KKyNkZWZpbmUgVFNUQVRFX0NXUAlfQUMoMHgwMDAwMDAwMDAwMDAwMDFmLFVMKSAvKiBDdXJyIFdpbi1Qb2ludGVyLgkqLworCisvKiBGbG9hdGluZy1Qb2ludCBSZWdpc3RlcnMgU3RhdGUgUmVnaXN0ZXIuCisgKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHwgIFJlc3YgIHwgIEZFRiAgfCAgRFUgIHwgIERMICB8CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIDYzICAgICAzICAgIDIgICAgICAgMSAgICAgIDAKKyAqLworI2RlZmluZSBGUFJTX0ZFRglfQUMoMHgwMDAwMDAwMDAwMDAwMDA0LFVMKSAvKiBGUFUgRW5hYmxlLgkqLworI2RlZmluZSBGUFJTX0RVCQlfQUMoMHgwMDAwMDAwMDAwMDAwMDAyLFVMKSAvKiBEaXJ0eSBVcHBlci4JKi8KKyNkZWZpbmUgRlBSU19ETAkJX0FDKDB4MDAwMDAwMDAwMDAwMDAwMSxVTCkgLyogRGlydHkgTG93ZXIuCSovCisKKy8qIFZlcnNpb24gUmVnaXN0ZXIuCisgKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiB8IE1BTlVGIHwgSU1QTCB8IE1BU0sgfCBSZXN2IHwgTUFYVEwgfCBSZXN2IHwgTUFYV0lOIHwKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIDYzICAgNDggNDcgIDMyIDMxICAyNCAyMyAgMTYgMTUgICAgOCA3ICAgIDUgNCAgICAgIDAKKyAqLworI2RlZmluZSBWRVJTX01BTlVGCV9BQygweGZmZmYwMDAwMDAwMDAwMDAsVUwpIC8qIE1hbnVmYWN0dXJlci4JKi8KKyNkZWZpbmUgVkVSU19JTVBMCV9BQygweDAwMDBmZmZmMDAwMDAwMDAsVUwpIC8qIEltcGxlbWVudGF0aW9uLgkqLworI2RlZmluZSBWRVJTX01BU0sJX0FDKDB4MDAwMDAwMDBmZjAwMDAwMCxVTCkgLyogTWFzayBTZXQgUmV2aXNpb24uKi8KKyNkZWZpbmUgVkVSU19NQVhUTAlfQUMoMHgwMDAwMDAwMDAwMDBmZjAwLFVMKSAvKiBNYXggVHJhcCBMZXZlbC4JKi8KKyNkZWZpbmUgVkVSU19NQVhXSU4JX0FDKDB4MDAwMDAwMDAwMDAwMDAxZixVTCkgLyogTWF4IFJlZ1dpbmRvdyBJZHguKi8KKworI2VuZGlmIC8qICEoX1NQQVJDNjRfUFNUQVRFX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3B0cmFjZS5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9wdHJhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDJiNWExCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9wdHJhY2UuaApAQCAtMCwwICsxLDI5NyBAQAorLyogJElkOiBwdHJhY2UuaCx2IDEuMTQgMjAwMi8wMi8wOSAxOTo0OTozMiBkYXZlbSBFeHAgJCAqLworI2lmbmRlZiBfU1BBUkM2NF9QVFJBQ0VfSAorI2RlZmluZSBfU1BBUkM2NF9QVFJBQ0VfSAorCisjaW5jbHVkZSA8YXNtL3BzdGF0ZS5oPgorCisvKiBUaGlzIHN0cnVjdCBkZWZpbmVzIHRoZSB3YXkgdGhlIHJlZ2lzdGVycyBhcmUgc3RvcmVkIG9uIHRoZSAKKyAqIHN0YWNrIGR1cmluZyBhIHN5c3RlbSBjYWxsIGFuZCBiYXNpY2FsbHkgYWxsIHRyYXBzLgorICovCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK3N0cnVjdCBwdF9yZWdzIHsKKwl1bnNpZ25lZCBsb25nIHVfcmVnc1sxNl07IC8qIGdsb2JhbHMgYW5kIGlucyAqLworCXVuc2lnbmVkIGxvbmcgdHN0YXRlOworCXVuc2lnbmVkIGxvbmcgdHBjOworCXVuc2lnbmVkIGxvbmcgdG5wYzsKKwl1bnNpZ25lZCBpbnQgeTsKKwl1bnNpZ25lZCBpbnQgZnByczsKK307CisKK3N0cnVjdCBwdF9yZWdzMzIgeworCXVuc2lnbmVkIGludCBwc3I7CisJdW5zaWduZWQgaW50IHBjOworCXVuc2lnbmVkIGludCBucGM7CisJdW5zaWduZWQgaW50IHk7CisJdW5zaWduZWQgaW50IHVfcmVnc1sxNl07IC8qIGdsb2JhbHMgYW5kIGlucyAqLworfTsKKworI2RlZmluZSBVUkVHX0cwICAgICAgICAwCisjZGVmaW5lIFVSRUdfRzEgICAgICAgIDEKKyNkZWZpbmUgVVJFR19HMiAgICAgICAgMgorI2RlZmluZSBVUkVHX0czICAgICAgICAzCisjZGVmaW5lIFVSRUdfRzQgICAgICAgIDQKKyNkZWZpbmUgVVJFR19HNSAgICAgICAgNQorI2RlZmluZSBVUkVHX0c2ICAgICAgICA2CisjZGVmaW5lIFVSRUdfRzcgICAgICAgIDcKKyNkZWZpbmUgVVJFR19JMCAgICAgICAgOAorI2RlZmluZSBVUkVHX0kxICAgICAgICA5CisjZGVmaW5lIFVSRUdfSTIgICAgICAgIDEwCisjZGVmaW5lIFVSRUdfSTMgICAgICAgIDExCisjZGVmaW5lIFVSRUdfSTQgICAgICAgIDEyCisjZGVmaW5lIFVSRUdfSTUgICAgICAgIDEzCisjZGVmaW5lIFVSRUdfSTYgICAgICAgIDE0CisjZGVmaW5lIFVSRUdfSTcgICAgICAgIDE1CisjZGVmaW5lIFVSRUdfRlAgICAgICAgIFVSRUdfSTYKKyNkZWZpbmUgVVJFR19SRVRQQyAgICAgVVJFR19JNworCisvKiBBIFY5IHJlZ2lzdGVyIHdpbmRvdyAqLworc3RydWN0IHJlZ193aW5kb3cgeworCXVuc2lnbmVkIGxvbmcgbG9jYWxzWzhdOworCXVuc2lnbmVkIGxvbmcgaW5zWzhdOworfTsKKworLyogQSAzMi1iaXQgcmVnaXN0ZXIgd2luZG93LiAqLworc3RydWN0IHJlZ193aW5kb3czMiB7CisJdW5zaWduZWQgaW50IGxvY2Fsc1s4XTsKKwl1bnNpZ25lZCBpbnQgaW5zWzhdOworfTsKKworLyogQSBWOSBTcGFyYyBzdGFjayBmcmFtZSAqLworc3RydWN0IHNwYXJjX3N0YWNrZiB7CisJdW5zaWduZWQgbG9uZyBsb2NhbHNbOF07CisgICAgICAgIHVuc2lnbmVkIGxvbmcgaW5zWzZdOworCXN0cnVjdCBzcGFyY19zdGFja2YgKmZwOworCXVuc2lnbmVkIGxvbmcgY2FsbGVyc19wYzsKKwljaGFyICpzdHJ1Y3RwdHI7CisJdW5zaWduZWQgbG9uZyB4YXJnc1s2XTsKKwl1bnNpZ25lZCBsb25nIHh4YXJnc1sxXTsKK307CQorCisvKiBBIDMyLWJpdCBTcGFyYyBzdGFjayBmcmFtZSAqLworc3RydWN0IHNwYXJjX3N0YWNrZjMyIHsKKwl1bnNpZ25lZCBpbnQgbG9jYWxzWzhdOworICAgICAgICB1bnNpZ25lZCBpbnQgaW5zWzZdOworCXVuc2lnbmVkIGludCBmcDsKKwl1bnNpZ25lZCBpbnQgY2FsbGVyc19wYzsKKwl1bnNpZ25lZCBpbnQgc3RydWN0cHRyOworCXVuc2lnbmVkIGludCB4YXJnc1s2XTsKKwl1bnNpZ25lZCBpbnQgeHhhcmdzWzFdOworfTsJCisKK3N0cnVjdCBzcGFyY190cmFwZiB7CisJdW5zaWduZWQgbG9uZyBsb2NhbHNbOF07CisJdW5zaWduZWQgbG9uZyBpbnNbOF07CisJdW5zaWduZWQgbG9uZyBfdW51c2VkOworCXN0cnVjdCBwdF9yZWdzICpyZWdzOworfTsKKworI2RlZmluZSBUUkFDRVJFR19TWglzaXplb2Yoc3RydWN0IHB0X3JlZ3MpCisjZGVmaW5lIFNUQUNLRlJBTUVfU1oJc2l6ZW9mKHN0cnVjdCBzcGFyY19zdGFja2YpCisKKyNkZWZpbmUgVFJBQ0VSRUczMl9TWglzaXplb2Yoc3RydWN0IHB0X3JlZ3MzMikKKyNkZWZpbmUgU1RBQ0tGUkFNRTMyX1NaCXNpemVvZihzdHJ1Y3Qgc3BhcmNfc3RhY2tmMzIpCisKKyNpZmRlZiBfX0tFUk5FTF9fCisjZGVmaW5lIGZvcmNlX3N1Y2Nlc3NmdWxfc3lzY2FsbF9yZXR1cm4oKQlcCisJc2V0X3RocmVhZF9mbGFnKFRJRl9TWVNDQUxMX1NVQ0NFU1MpCisjZGVmaW5lIHVzZXJfbW9kZShyZWdzKSAoISgocmVncyktPnRzdGF0ZSAmIFRTVEFURV9QUklWKSkKKyNkZWZpbmUgaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKSAoKHJlZ3MpLT50cGMpCisjaWZkZWYgQ09ORklHX1NNUAorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcHJvZmlsZV9wYyhzdHJ1Y3QgcHRfcmVncyAqKTsKKyNlbHNlCisjZGVmaW5lIHByb2ZpbGVfcGMocmVncykgaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKQorI2VuZGlmCitleHRlcm4gdm9pZCBzaG93X3JlZ3Moc3RydWN0IHB0X3JlZ3MgKik7CisjZW5kaWYKKworI2Vsc2UgLyogX19BU1NFTUJMWV9fICovCisvKiBGb3IgYXNzZW1ibHkgY29kZS4gKi8KKyNkZWZpbmUgVFJBQ0VSRUdfU1oJCTB4YTAKKyNkZWZpbmUgU1RBQ0tGUkFNRV9TWgkJMHhjMAorCisjZGVmaW5lIFRSQUNFUkVHMzJfU1oJCTB4NTAKKyNkZWZpbmUgU1RBQ0tGUkFNRTMyX1NaCQkweDYwCisjZW5kaWYKKworI2lmZGVmIF9fS0VSTkVMX18KKyNkZWZpbmUgU1RBQ0tfQklBUwkJMjA0NworI2VuZGlmCisKKy8qIFRoZXNlIGFyZSBmb3IgcHRfcmVncy4gKi8KKyNkZWZpbmUgUFRfVjlfRzAgICAgIDB4MDAKKyNkZWZpbmUgUFRfVjlfRzEgICAgIDB4MDgKKyNkZWZpbmUgUFRfVjlfRzIgICAgIDB4MTAKKyNkZWZpbmUgUFRfVjlfRzMgICAgIDB4MTgKKyNkZWZpbmUgUFRfVjlfRzQgICAgIDB4MjAKKyNkZWZpbmUgUFRfVjlfRzUgICAgIDB4MjgKKyNkZWZpbmUgUFRfVjlfRzYgICAgIDB4MzAKKyNkZWZpbmUgUFRfVjlfRzcgICAgIDB4MzgKKyNkZWZpbmUgUFRfVjlfSTAgICAgIDB4NDAKKyNkZWZpbmUgUFRfVjlfSTEgICAgIDB4NDgKKyNkZWZpbmUgUFRfVjlfSTIgICAgIDB4NTAKKyNkZWZpbmUgUFRfVjlfSTMgICAgIDB4NTgKKyNkZWZpbmUgUFRfVjlfSTQgICAgIDB4NjAKKyNkZWZpbmUgUFRfVjlfSTUgICAgIDB4NjgKKyNkZWZpbmUgUFRfVjlfSTYgICAgIDB4NzAKKyNkZWZpbmUgUFRfVjlfRlAgICAgIFBUX1Y5X0k2CisjZGVmaW5lIFBUX1Y5X0k3ICAgICAweDc4CisjZGVmaW5lIFBUX1Y5X1RTVEFURSAweDgwCisjZGVmaW5lIFBUX1Y5X1RQQyAgICAweDg4CisjZGVmaW5lIFBUX1Y5X1ROUEMgICAweDkwCisjZGVmaW5lIFBUX1Y5X1kgICAgICAweDk4CisjZGVmaW5lIFBUX1Y5X0ZQUlMgICAweDljCisjZGVmaW5lIFBUX1RTVEFURQlQVF9WOV9UU1RBVEUKKyNkZWZpbmUgUFRfVFBDCQlQVF9WOV9UUEMKKyNkZWZpbmUgUFRfVE5QQwkJUFRfVjlfVE5QQworCisvKiBUaGVzZSBmb3IgcHRfcmVnczMyLiAqLworI2RlZmluZSBQVF9QU1IgICAgMHgwCisjZGVmaW5lIFBUX1BDICAgICAweDQKKyNkZWZpbmUgUFRfTlBDICAgIDB4OAorI2RlZmluZSBQVF9ZICAgICAgMHhjCisjZGVmaW5lIFBUX0cwICAgICAweDEwCisjZGVmaW5lIFBUX1dJTSAgICBQVF9HMAorI2RlZmluZSBQVF9HMSAgICAgMHgxNAorI2RlZmluZSBQVF9HMiAgICAgMHgxOAorI2RlZmluZSBQVF9HMyAgICAgMHgxYworI2RlZmluZSBQVF9HNCAgICAgMHgyMAorI2RlZmluZSBQVF9HNSAgICAgMHgyNAorI2RlZmluZSBQVF9HNiAgICAgMHgyOAorI2RlZmluZSBQVF9HNyAgICAgMHgyYworI2RlZmluZSBQVF9JMCAgICAgMHgzMAorI2RlZmluZSBQVF9JMSAgICAgMHgzNAorI2RlZmluZSBQVF9JMiAgICAgMHgzOAorI2RlZmluZSBQVF9JMyAgICAgMHgzYworI2RlZmluZSBQVF9JNCAgICAgMHg0MAorI2RlZmluZSBQVF9JNSAgICAgMHg0NAorI2RlZmluZSBQVF9JNiAgICAgMHg0OAorI2RlZmluZSBQVF9GUCAgICAgUFRfSTYKKyNkZWZpbmUgUFRfSTcgICAgIDB4NGMKKworLyogUmVnX3dpbmRvdyBvZmZzZXRzICovCisjZGVmaW5lIFJXX1Y5X0wwICAgICAweDAwCisjZGVmaW5lIFJXX1Y5X0wxICAgICAweDA4CisjZGVmaW5lIFJXX1Y5X0wyICAgICAweDEwCisjZGVmaW5lIFJXX1Y5X0wzICAgICAweDE4CisjZGVmaW5lIFJXX1Y5X0w0ICAgICAweDIwCisjZGVmaW5lIFJXX1Y5X0w1ICAgICAweDI4CisjZGVmaW5lIFJXX1Y5X0w2ICAgICAweDMwCisjZGVmaW5lIFJXX1Y5X0w3ICAgICAweDM4CisjZGVmaW5lIFJXX1Y5X0kwICAgICAweDQwCisjZGVmaW5lIFJXX1Y5X0kxICAgICAweDQ4CisjZGVmaW5lIFJXX1Y5X0kyICAgICAweDUwCisjZGVmaW5lIFJXX1Y5X0kzICAgICAweDU4CisjZGVmaW5lIFJXX1Y5X0k0ICAgICAweDYwCisjZGVmaW5lIFJXX1Y5X0k1ICAgICAweDY4CisjZGVmaW5lIFJXX1Y5X0k2ICAgICAweDcwCisjZGVmaW5lIFJXX1Y5X0k3ICAgICAweDc4CisKKyNkZWZpbmUgUldfTDAgICAgIDB4MDAKKyNkZWZpbmUgUldfTDEgICAgIDB4MDQKKyNkZWZpbmUgUldfTDIgICAgIDB4MDgKKyNkZWZpbmUgUldfTDMgICAgIDB4MGMKKyNkZWZpbmUgUldfTDQgICAgIDB4MTAKKyNkZWZpbmUgUldfTDUgICAgIDB4MTQKKyNkZWZpbmUgUldfTDYgICAgIDB4MTgKKyNkZWZpbmUgUldfTDcgICAgIDB4MWMKKyNkZWZpbmUgUldfSTAgICAgIDB4MjAKKyNkZWZpbmUgUldfSTEgICAgIDB4MjQKKyNkZWZpbmUgUldfSTIgICAgIDB4MjgKKyNkZWZpbmUgUldfSTMgICAgIDB4MmMKKyNkZWZpbmUgUldfSTQgICAgIDB4MzAKKyNkZWZpbmUgUldfSTUgICAgIDB4MzQKKyNkZWZpbmUgUldfSTYgICAgIDB4MzgKKyNkZWZpbmUgUldfSTcgICAgIDB4M2MKKworLyogU3RhY2tfZnJhbWUgb2Zmc2V0cyAqLworI2RlZmluZSBTRl9WOV9MMCAgICAgMHgwMAorI2RlZmluZSBTRl9WOV9MMSAgICAgMHgwOAorI2RlZmluZSBTRl9WOV9MMiAgICAgMHgxMAorI2RlZmluZSBTRl9WOV9MMyAgICAgMHgxOAorI2RlZmluZSBTRl9WOV9MNCAgICAgMHgyMAorI2RlZmluZSBTRl9WOV9MNSAgICAgMHgyOAorI2RlZmluZSBTRl9WOV9MNiAgICAgMHgzMAorI2RlZmluZSBTRl9WOV9MNyAgICAgMHgzOAorI2RlZmluZSBTRl9WOV9JMCAgICAgMHg0MAorI2RlZmluZSBTRl9WOV9JMSAgICAgMHg0OAorI2RlZmluZSBTRl9WOV9JMiAgICAgMHg1MAorI2RlZmluZSBTRl9WOV9JMyAgICAgMHg1OAorI2RlZmluZSBTRl9WOV9JNCAgICAgMHg2MAorI2RlZmluZSBTRl9WOV9JNSAgICAgMHg2OAorI2RlZmluZSBTRl9WOV9GUCAgICAgMHg3MAorI2RlZmluZSBTRl9WOV9QQyAgICAgMHg3OAorI2RlZmluZSBTRl9WOV9SRVRQICAgMHg4MAorI2RlZmluZSBTRl9WOV9YQVJHMCAgMHg4OAorI2RlZmluZSBTRl9WOV9YQVJHMSAgMHg5MAorI2RlZmluZSBTRl9WOV9YQVJHMiAgMHg5OAorI2RlZmluZSBTRl9WOV9YQVJHMyAgMHhhMAorI2RlZmluZSBTRl9WOV9YQVJHNCAgMHhhOAorI2RlZmluZSBTRl9WOV9YQVJHNSAgMHhiMAorI2RlZmluZSBTRl9WOV9YWEFSRyAgMHhiOAorCisjZGVmaW5lIFNGX0wwICAgICAweDAwCisjZGVmaW5lIFNGX0wxICAgICAweDA0CisjZGVmaW5lIFNGX0wyICAgICAweDA4CisjZGVmaW5lIFNGX0wzICAgICAweDBjCisjZGVmaW5lIFNGX0w0ICAgICAweDEwCisjZGVmaW5lIFNGX0w1ICAgICAweDE0CisjZGVmaW5lIFNGX0w2ICAgICAweDE4CisjZGVmaW5lIFNGX0w3ICAgICAweDFjCisjZGVmaW5lIFNGX0kwICAgICAweDIwCisjZGVmaW5lIFNGX0kxICAgICAweDI0CisjZGVmaW5lIFNGX0kyICAgICAweDI4CisjZGVmaW5lIFNGX0kzICAgICAweDJjCisjZGVmaW5lIFNGX0k0ICAgICAweDMwCisjZGVmaW5lIFNGX0k1ICAgICAweDM0CisjZGVmaW5lIFNGX0ZQICAgICAweDM4CisjZGVmaW5lIFNGX1BDICAgICAweDNjCisjZGVmaW5lIFNGX1JFVFAgICAweDQwCisjZGVmaW5lIFNGX1hBUkcwICAweDQ0CisjZGVmaW5lIFNGX1hBUkcxICAweDQ4CisjZGVmaW5lIFNGX1hBUkcyICAweDRjCisjZGVmaW5lIFNGX1hBUkczICAweDUwCisjZGVmaW5lIFNGX1hBUkc0ICAweDU0CisjZGVmaW5lIFNGX1hBUkc1ICAweDU4CisjZGVmaW5lIFNGX1hYQVJHICAweDVjCisKKy8qIFN0dWZmIGZvciB0aGUgcHRyYWNlIHN5c3RlbSBjYWxsICovCisjZGVmaW5lIFBUUkFDRV9TVU5BVFRBQ0ggICAgICAgICAgMTAKKyNkZWZpbmUgUFRSQUNFX1NVTkRFVEFDSCAgICAgICAgICAxMQorI2RlZmluZSBQVFJBQ0VfR0VUUkVHUyAgICAgICAgICAgIDEyCisjZGVmaW5lIFBUUkFDRV9TRVRSRUdTICAgICAgICAgICAgMTMKKyNkZWZpbmUgUFRSQUNFX0dFVEZQUkVHUyAgICAgICAgICAxNAorI2RlZmluZSBQVFJBQ0VfU0VURlBSRUdTICAgICAgICAgIDE1CisjZGVmaW5lIFBUUkFDRV9SRUFEREFUQSAgICAgICAgICAgMTYKKyNkZWZpbmUgUFRSQUNFX1dSSVRFREFUQSAgICAgICAgICAxNworI2RlZmluZSBQVFJBQ0VfUkVBRFRFWFQgICAgICAgICAgIDE4CisjZGVmaW5lIFBUUkFDRV9XUklURVRFWFQgICAgICAgICAgMTkKKyNkZWZpbmUgUFRSQUNFX0dFVEZQQVJFR1MgICAgICAgICAyMAorI2RlZmluZSBQVFJBQ0VfU0VURlBBUkVHUyAgICAgICAgIDIxCisKKy8qIFRoZXJlIGFyZSBmb3IgZGVidWdnaW5nIDY0LWJpdCBwcm9jZXNzZXMsIGVpdGhlciBmcm9tIGEgMzIgb3IgNjQgYml0CisgKiBwYXJlbnQuICBUaHVzIHRoZWlyIGNvbXBsZW1lbnRzIGFyZSBmb3IgZGVidWdnaW5nIDMyLWJpdCBwcm9jZXNzZXMgb25seS4KKyAqLworCisjZGVmaW5lIFBUUkFDRV9HRVRSRUdTNjQJICAyMgorI2RlZmluZSBQVFJBQ0VfU0VUUkVHUzY0CSAgMjMKKy8qIFBUUkFDRV9TWVNDQUxMIGlzIDI0ICovCisjZGVmaW5lIFBUUkFDRV9HRVRGUFJFR1M2NAkgIDI1CisjZGVmaW5lIFBUUkFDRV9TRVRGUFJFR1M2NAkgIDI2CisKKyNkZWZpbmUgUFRSQUNFX0dFVFVDT0RFICAgICAgICAgICAyOSAgLyogc3R1cGlkIGJzZC1pc20gKi8KKworLyogVGhlc2UgYXJlIGZvciAzMi1iaXQgcHJvY2Vzc2VzIGRlYnVnZ2luZyA2NC1iaXQgb25lcy4KKyAqIEhlcmUgYWRkciBhbmQgYWRkcjIgYXJlIHBhc3NlZCBpbiAlZzIgYW5kICVnMyByZXNwZWN0aXZlbHkuCisgKi8KKyNkZWZpbmUgUFRSQUNFX1BFRUtURVhUNjQgICAgICAgICAoMzAgKyBQVFJBQ0VfUEVFS1RFWFQpCisjZGVmaW5lIFBUUkFDRV9QT0tFVEVYVDY0ICAgICAgICAgKDMwICsgUFRSQUNFX1BPS0VURVhUKQorI2RlZmluZSBQVFJBQ0VfUEVFS0RBVEE2NCAgICAgICAgICgzMCArIFBUUkFDRV9QRUVLREFUQSkKKyNkZWZpbmUgUFRSQUNFX1BPS0VEQVRBNjQgICAgICAgICAoMzAgKyBQVFJBQ0VfUE9LRURBVEEpCisjZGVmaW5lIFBUUkFDRV9SRUFEREFUQTY0ICAgICAgICAgKDMwICsgUFRSQUNFX1JFQUREQVRBKQorI2RlZmluZSBQVFJBQ0VfV1JJVEVEQVRBNjQgICAgICAgICgzMCArIFBUUkFDRV9XUklURURBVEEpCisjZGVmaW5lIFBUUkFDRV9SRUFEVEVYVDY0ICAgICAgICAgKDMwICsgUFRSQUNFX1JFQURURVhUKQorI2RlZmluZSBQVFJBQ0VfV1JJVEVURVhUNjQgICAgICAgICgzMCArIFBUUkFDRV9XUklURVRFWFQpCisKKyNlbmRpZiAvKiAhKF9TUEFSQzY0X1BUUkFDRV9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9yZWcuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcmVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM2OGY5MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcmVnLmgKQEAgLTAsMCArMSw1NiBAQAorLyogJElkOiByZWcuaCx2IDEuNiAxOTk5LzA5LzA2IDA4OjIyOjEwIGpqIEV4cCAkCisgKiBsaW51eC9hc20tc3BhcmM2NC9yZWcuaAorICogTGF5b3V0IG9mIHRoZSByZWdpc3RlcnMgYXMgZXhwZWN0ZWQgYnkgZ2RiIG9uIHRoZSBTcGFyYworICogd2Ugc2hvdWxkIHJlcGxhY2UgdGhlIHVzZXIuaCBkZWZpbml0aW9ucyB3aXRoIHRob3NlIGluCisgKiB0aGlzIGZpbGUsIHdlIGRvbid0IGV2ZW4gdXNlIHRoZSBvdGhlciAKKyAqIC1taWd1ZWwKKyAqCisgKiBUaGUgbmFtZXMgb2YgdGhlIHN0cnVjdHVyZXMsIGNvbnN0YW50cyBhbmQgYWxpYXNlcyBpbiB0aGlzIGZpbGUKKyAqIGhhdmUgdGhlIHNhbWUgbmFtZXMgYXMgdGhlIHN1bm9zIG9uZXMsIHNvbWUgcHJvZ3JhbXMgcmVseSBvbiB0aGVzZQorICogbmFtZXMgKGdkYiBmb3IgZXhhbXBsZSkuCisgKgorICovCisKKyNpZm5kZWYgX19TUEFSQzY0X1JFR19ICisjZGVmaW5lIF9fU1BBUkM2NF9SRUdfSAorCitzdHJ1Y3QgcmVncyB7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgcl9nMTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyByX2cyOworICAgICAgICB1bnNpZ25lZCBsb25nIHJfZzM7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgcl9nNDsKKyAgICAgICAgdW5zaWduZWQgbG9uZyByX2c1OworICAgICAgICB1bnNpZ25lZCBsb25nIHJfZzY7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgcl9nNzsKKyAgICAgICAgdW5zaWduZWQgbG9uZyByX28wOworICAgICAgICB1bnNpZ25lZCBsb25nIHJfbzE7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgcl9vMjsKKyAgICAgICAgdW5zaWduZWQgbG9uZyByX28zOworICAgICAgICB1bnNpZ25lZCBsb25nIHJfbzQ7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgcl9vNTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyByX282OworICAgICAgICB1bnNpZ25lZCBsb25nIHJfbzc7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgX19wYWQ7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgcl90c3RhdGU7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgcl90cGM7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgcl90bnBjOworICAgICAgICB1bnNpZ25lZCBpbnQgIHJfeTsKKyAgICAgICAgdW5zaWduZWQgaW50ICByX2ZwcnM7Cit9OworCisjZGVmaW5lIEZQVV9SRUdTX1RZUEUgdW5zaWduZWQgaW50CisjZGVmaW5lIEZQVV9GU1JfVFlQRSB1bnNpZ25lZCBsb25nCisKK3N0cnVjdCBmcF9zdGF0dXMgeworICAgICAgICB1bnNpZ25lZCBsb25nIGZwdV9mclszMl07CisgICAgICAgIHVuc2lnbmVkIGxvbmcgRnB1X2ZzcjsKK307CisKK3N0cnVjdCBmcHUgeworCXN0cnVjdCBmcF9zdGF0dXMgZl9mcHN0YXR1czsKK307CisKKyNkZWZpbmUgZnB1X3JlZ3MgIGZfZnBzdGF0dXMuZnB1X2ZyCisjZGVmaW5lIGZwdV9mc3IgICBmX2Zwc3RhdHVzLkZwdV9mc3IKKworI2VuZGlmIC8qIF9fU1BBUkM2NF9SRUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9yZXNvdXJjZS5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9yZXNvdXJjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhNDY5NzkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3Jlc291cmNlLmgKQEAgLTAsMCArMSwxOSBAQAorLyogJElkOiByZXNvdXJjZS5oLHYgMS44IDIwMDAvMDkvMjMgMDI6MDk6MjEgZGF2ZW0gRXhwICQKKyAqIHJlc291cmNlLmg6IFJlc291cmNlIGRlZmluaXRpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NiBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCisgKi8KKworI2lmbmRlZiBfU1BBUkM2NF9SRVNPVVJDRV9ICisjZGVmaW5lIF9TUEFSQzY0X1JFU09VUkNFX0gKKworLyoKKyAqIFRoZXNlIHR3byByZXNvdXJjZSBsaW1pdCBJRHMgaGF2ZSBhIFNwYXJjL0xpbnV4LXNwZWNpZmljIG9yZGVyaW5nLAorICogdGhlIHJlc3QgY29tZXMgZnJvbSB0aGUgZ2VuZXJpYyBoZWFkZXI6CisgKi8KKyNkZWZpbmUgUkxJTUlUX05PRklMRQkJNgkvKiBtYXggbnVtYmVyIG9mIG9wZW4gZmlsZXMgKi8KKyNkZWZpbmUgUkxJTUlUX05QUk9DCQk3CS8qIG1heCBudW1iZXIgb2YgcHJvY2Vzc2VzICovCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9yZXNvdXJjZS5oPgorCisjZW5kaWYgLyogIShfU1BBUkM2NF9SRVNPVVJDRV9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9ydGMuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcnRjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2IxNzMzNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcnRjLmgKQEAgLTAsMCArMSwyNyBAQAorLyogJElkOiBydGMuaCx2IDEuMSAxOTk2LzEyLzI2IDE0OjIyOjM1IGRhdmVtIEV4cCAkCisgKgorICogcnRjLmg6IERlZmluaXRpb25zIGZvciBhY2Nlc3MgdG8gdGhlIE1vc3RlayByZWFsIHRpbWUgY2xvY2sKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYgVGhvbWFzIEsuIER5YXMgKHRkeWFzQGVkZW4ucnV0Z2Vycy5lZHUpCisgKi8KKworI2lmbmRlZiBfUlRDX0gKKyNkZWZpbmUgX1JUQ19ICisKKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorCitzdHJ1Y3QgcnRjX3RpbWUKK3sKKwlpbnQJc2VjOwkvKiBTZWNvbmRzICgwLTU5KSAqLworCWludAltaW47CS8qIE1pbnV0ZXMgKDAtNTkpICovCisJaW50CWhvdXI7CS8qIEhvdXIgKDAtMjMpICovCisJaW50CWRvdzsJLyogRGF5IG9mIHRoZSB3ZWVrICgxLTcpICovCisJaW50CWRvbTsJLyogRGF5IG9mIHRoZSBtb250aCAoMS0zMSkgKi8KKwlpbnQJbW9udGg7CS8qIE1vbnRoIG9mIHllYXIgKDEtMTIpICovCisJaW50CXllYXI7CS8qIFllYXIgKDAtOTkpICovCit9OworCisjZGVmaW5lIFJUQ0dFVCBfSU9SKCdwJywgMjAsIHN0cnVjdCBydGNfdGltZSkKKyNkZWZpbmUgUlRDU0VUIF9JT1coJ3AnLCAyMSwgc3RydWN0IHJ0Y190aW1lKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcndzZW0tY29uc3QuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcndzZW0tY29uc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzAzYzlkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9yd3NlbS1jb25zdC5oCkBAIC0wLDAgKzEsMTIgQEAKKy8qIHJ3c2VtLWNvbnN0Lmg6IFJXIHNlbWFwaG9yZSBjb3VudGVyIGNvbnN0YW50cy4gICovCisjaWZuZGVmIF9TUEFSQzY0X1JXU0VNX0NPTlNUX0gKKyNkZWZpbmUgX1NQQVJDNjRfUldTRU1fQ09OU1RfSAorCisjZGVmaW5lIFJXU0VNX1VOTE9DS0VEX1ZBTFVFCQkweDAwMDAwMDAwCisjZGVmaW5lIFJXU0VNX0FDVElWRV9CSUFTCQkweDAwMDAwMDAxCisjZGVmaW5lIFJXU0VNX0FDVElWRV9NQVNLCQkweDAwMDBmZmZmCisjZGVmaW5lIFJXU0VNX1dBSVRJTkdfQklBUwkJMHhmZmZmMDAwMAorI2RlZmluZSBSV1NFTV9BQ1RJVkVfUkVBRF9CSUFTCQlSV1NFTV9BQ1RJVkVfQklBUworI2RlZmluZSBSV1NFTV9BQ1RJVkVfV1JJVEVfQklBUwkJKFJXU0VNX1dBSVRJTkdfQklBUyArIFJXU0VNX0FDVElWRV9CSUFTKQorCisjZW5kaWYgLyogX1NQQVJDNjRfUldTRU1fQ09OU1RfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9yd3NlbS5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9yd3NlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmMmFlOTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3J3c2VtLmgKQEAgLTAsMCArMSwxMDAgQEAKKy8qICRJZDogcndzZW0uaCx2IDEuNSAyMDAxLzExLzE4IDAwOjEyOjU2IGRhdmVtIEV4cCAkCisgKiByd3NlbS5oOiBSL1cgc2VtYXBob3JlcyBpbXBsZW1lbnRlZCB1c2luZyBDQVMKKyAqCisgKiBXcml0dGVuIGJ5IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AcmVkaGF0LmNvbSksIDIwMDEuCisgKiBEZXJpdmVkIGZyb20gYXNtLWkzODYvcndzZW0uaAorICovCisjaWZuZGVmIF9TUEFSQzY0X1JXU0VNX0gKKyNkZWZpbmUgX1NQQVJDNjRfUldTRU1fSAorCisjaWZuZGVmIF9MSU5VWF9SV1NFTV9ICisjZXJyb3IgInBsZWFzZSBkb24ndCBpbmNsdWRlIGFzbS9yd3NlbS5oIGRpcmVjdGx5LCB1c2UgbGludXgvcndzZW0uaCBpbnN0ZWFkIgorI2VuZGlmCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxhc20vcndzZW0tY29uc3QuaD4KKworc3RydWN0IHJ3c2VtX3dhaXRlcjsKKworc3RydWN0IHJ3X3NlbWFwaG9yZSB7CisJc2lnbmVkIGludCBjb3VudDsKKwlzcGlubG9ja190CQl3YWl0X2xvY2s7CisJc3RydWN0IGxpc3RfaGVhZAl3YWl0X2xpc3Q7Cit9OworCisjZGVmaW5lIF9fUldTRU1fSU5JVElBTElaRVIobmFtZSkgXAoreyBSV1NFTV9VTkxPQ0tFRF9WQUxVRSwgU1BJTl9MT0NLX1VOTE9DS0VELCBMSVNUX0hFQURfSU5JVCgobmFtZSkud2FpdF9saXN0KSB9CisKKyNkZWZpbmUgREVDTEFSRV9SV1NFTShuYW1lKSBcCisJc3RydWN0IHJ3X3NlbWFwaG9yZSBuYW1lID0gX19SV1NFTV9JTklUSUFMSVpFUihuYW1lKQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGluaXRfcndzZW0oc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQoreworCXNlbS0+Y291bnQgPSBSV1NFTV9VTkxPQ0tFRF9WQUxVRTsKKwlzcGluX2xvY2tfaW5pdCgmc2VtLT53YWl0X2xvY2spOworCUlOSVRfTElTVF9IRUFEKCZzZW0tPndhaXRfbGlzdCk7Cit9CisKK2V4dGVybiB2b2lkIF9fZG93bl9yZWFkKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSk7CitleHRlcm4gaW50IF9fZG93bl9yZWFkX3RyeWxvY2soc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKTsKK2V4dGVybiB2b2lkIF9fZG93bl93cml0ZShzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pOworZXh0ZXJuIGludCBfX2Rvd25fd3JpdGVfdHJ5bG9jayhzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pOworZXh0ZXJuIHZvaWQgX191cF9yZWFkKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSk7CitleHRlcm4gdm9pZCBfX3VwX3dyaXRlKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSk7CitleHRlcm4gdm9pZCBfX2Rvd25ncmFkZV93cml0ZShzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pOworCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgcndzZW1fYXRvbWljX3VwZGF0ZShpbnQgZGVsdGEsIHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKK3sKKwlpbnQgdG1wID0gZGVsdGE7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJIjE6XHRsZHV3CVslMl0sICUlZzFcblx0IgorCQkiYWRkCQklJWcxLCAlMSwgJSVnN1xuXHQiCisJCSJjYXMJCVslMl0sICUlZzEsICUlZzdcblx0IgorCQkiY21wCQklJWcxLCAlJWc3XG5cdCIKKwkJImJuZSxwbgkJJSVpY2MsIDFiXG5cdCIKKwkJIiBtZW1iYXIJI1N0b3JlTG9hZCB8ICNTdG9yZVN0b3JlXG5cdCIKKwkJIm1vdgkJJSVnNywgJTBcblx0IgorCQk6ICI9JnIiICh0bXApCisJCTogIjAiICh0bXApLCAiciIgKHNlbSkKKwkJOiAiZzEiLCAiZzciLCAibWVtb3J5IiwgImNjIik7CisKKwlyZXR1cm4gdG1wICsgZGVsdGE7Cit9CisKKyNkZWZpbmUgcndzZW1fYXRvbWljX2FkZCByd3NlbV9hdG9taWNfdXBkYXRlCisKK3N0YXRpYyBfX2lubGluZV9fIF9fdTE2IHJ3c2VtX2NtcHhjaGd3KHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSwgX191MTYgX19vbGQsIF9fdTE2IF9fbmV3KQoreworCXUzMiBvbGQgPSAoc2VtLT5jb3VudCAmIDB4ZmZmZjAwMDApIHwgKHUzMikgX19vbGQ7CisJdTMyIG5ldyA9IChvbGQgJiAweGZmZmYwMDAwKSB8ICh1MzIpIF9fbmV3OworCXUzMiBwcmV2OworCithZ2FpbjoKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygiY2FzCVslMl0sICUzLCAlMFxuXHQiCisJCQkgICAgICJtZW1iYXIJI1N0b3JlTG9hZCB8ICNTdG9yZVN0b3JlIgorCQkJICAgICA6ICI9JnIiIChwcmV2KQorCQkJICAgICA6ICIwIiAobmV3KSwgInIiIChzZW0pLCAiciIgKG9sZCkKKwkJCSAgICAgOiAibWVtb3J5Iik7CisKKwkvKiBUbyBnaXZlIHRoZSBzYW1lIHNlbWFudGljcyBhcyB4ODYgY21weGNoZ3csIGtlZXAgdHJ5aW5nCisJICogaWYgb25seSB0aGUgdXBwZXIgMTYtYml0cyBjaGFuZ2VkLgorCSAqLworCWlmIChwcmV2ICE9IG9sZCAmJgorCSAgICAoKHByZXYgJiAweGZmZmYpID09IChvbGQgJiAweGZmZmYpKSkKKwkJZ290byBhZ2FpbjsKKworCXJldHVybiBwcmV2ICYgMHhmZmZmOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBzaWduZWQgbG9uZyByd3NlbV9jbXB4Y2hnKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSwgc2lnbmVkIGxvbmcgb2xkLCBzaWduZWQgbG9uZyBuZXcpCit7CisJcmV0dXJuIGNtcHhjaGcoJnNlbS0+Y291bnQsb2xkLG5ldyk7Cit9CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfU1BBUkM2NF9SV1NFTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3NidXMuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc2J1cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4Mjc5ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3NidXMuaApAQCAtMCwwICsxLDEyMiBAQAorLyogJElkOiBzYnVzLmgsdiAxLjE0IDIwMDAvMDIvMTggMTM6NTA6NTUgZGF2ZW0gRXhwICQKKyAqIHNidXMuaDogRGVmaW5lcyBmb3IgdGhlIFN1biBTQnVzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NiwgMTk5OSBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQHJlZGhhdC5jb20pCisgKi8KKworI2lmbmRlZiBfU1BBUkM2NF9TQlVTX0gKKyNkZWZpbmUgX1NQQVJDNjRfU0JVU19ICisKKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorCisjaW5jbHVkZSA8YXNtL29wbGliLmg+CisjaW5jbHVkZSA8YXNtL2lvbW11Lmg+CisjaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+CisKKy8qIFdlIHNjYW4gd2hpY2ggZGV2aWNlcyBhcmUgb24gdGhlIFNCdXMgdXNpbmcgdGhlIFBST00gbm9kZSBkZXZpY2UKKyAqIHRyZWUuICBTQnVzIGRldmljZXMgYXJlIGRlc2NyaWJlZCBpbiB0d28gZGlmZmVyZW50IHdheXMuICBZb3UgY2FuCisgKiBlaXRoZXIgZ2V0IGFuIGFic29sdXRlIGFkZHJlc3MgYXQgd2hpY2ggdG8gYWNjZXNzIHRoZSBkZXZpY2UsIG9yCisgKiB5b3UgY2FuIGdldCBhIFNCdXMgJ3Nsb3QnIG51bWJlciBhbmQgYW4gb2Zmc2V0IHdpdGhpbiB0aGF0IHNsb3QuCisgKi8KKworLyogVGhlIGJhc2UgYWRkcmVzcyBhdCB3aGljaCB0byBjYWxjdWxhdGUgZGV2aWNlIE9CSU8gYWRkcmVzc2VzLiAqLworI2RlZmluZSBTVU5fU0JVU19CVkFERFIgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgU0JVU19PRkZfTUFTSyAgICAgICAgICAweDBmZmZmZmZmCisKKy8qIFRoZXNlIHJvdXRpbmVzIGFyZSB1c2VkIHRvIGNhbGN1bGF0ZSBkZXZpY2UgYWRkcmVzcyBmcm9tIHNsb3QKKyAqIG51bWJlcnMgKyBvZmZzZXRzLCBhbmQgdmljZSB2ZXJzYS4KKyAqLworCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIHNidXNfZGV2YWRkcihpbnQgc2xvdG51bSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpCit7CisgIHJldHVybiAodW5zaWduZWQgbG9uZykgKFNVTl9TQlVTX0JWQUREUisoKHNsb3RudW0pPDwyOCkrKG9mZnNldCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgc2J1c19kZXZfc2xvdCh1bnNpZ25lZCBsb25nIGRldl9hZGRyKQoreworICByZXR1cm4gKGludCkgKCgoZGV2X2FkZHIpLVNVTl9TQlVTX0JWQUREUik+PjI4KTsKK30KKworc3RydWN0IHNidXNfYnVzOworCisvKiBMaW51eCBTQlVTIGRldmljZSB0YWJsZXMgKi8KK3N0cnVjdCBzYnVzX2RldiB7CisJc3RydWN0IHNidXNfYnVzICpidXM7CS8qIE91ciB0b3BsZXZlbCBwYXJlbnQgU0JVUwkqLworCXN0cnVjdCBzYnVzX2RldiAqbmV4dDsJLyogQ2hhaW4gb2Ygc2libGluZ3MJCSovCisJc3RydWN0IHNidXNfZGV2ICpjaGlsZDsJLyogQ2hhaW4gb2YgY2hpbGRyZW4JCSovCisJc3RydWN0IHNidXNfZGV2ICpwYXJlbnQ7LyogUGFyZW50IGRldmljZSBpZiBub3QgdG9wbGV2ZWwqLworCWludCBwcm9tX25vZGU7CQkvKiBPQlAgbm9kZSBvZiB0aGlzIGRldmljZQkqLworCWNoYXIgcHJvbV9uYW1lWzY0XTsJLyogT0JQIGRldmljZSBuYW1lIHByb3BlcnR5CSovCisJaW50IHNsb3Q7CQkvKiBTQlVTIHNsb3QgbnVtYmVyCQkqLworCisJc3RydWN0IHJlc291cmNlIHJlc291cmNlW1BST01SRUdfTUFYXTsKKworCXN0cnVjdCBsaW51eF9wcm9tX3JlZ2lzdGVycyByZWdfYWRkcnNbUFJPTVJFR19NQVhdOworCWludCBudW1fcmVnaXN0ZXJzLCByYW5nZXNfYXBwbGllZDsKKworCXN0cnVjdCBsaW51eF9wcm9tX3JhbmdlcyBkZXZpY2VfcmFuZ2VzW1BST01SRUdfTUFYXTsKKwlpbnQgbnVtX2RldmljZV9yYW5nZXM7CisKKwl1bnNpZ25lZCBpbnQgaXJxc1s0XTsKKwlpbnQgbnVtX2lycXM7Cit9OworCisvKiBUaGlzIHN0cnVjdCBkZXNjcmliZXMgdGhlIFNCdXMocykgZm91bmQgb24gdGhpcyBtYWNoaW5lLiAqLworc3RydWN0IHNidXNfYnVzIHsKKwl2b2lkCQkJKmlvbW11OwkJLyogT3BhcXVlIElPTU1VIGNvb2tpZQkqLworCXN0cnVjdCBzYnVzX2RldgkJKmRldmljZXM7CS8qIFRyZWUgb2YgU0JVUyBkZXZpY2VzCSovCisJc3RydWN0IHNidXNfYnVzCQkqbmV4dDsJCS8qIE5leHQgU0JVUyBpbiBzeXN0ZW0JKi8KKwlpbnQJCQlwcm9tX25vZGU7ICAgICAgLyogT0JQIG5vZGUgb2YgU0JVUwkqLworCWNoYXIJCQlwcm9tX25hbWVbNjRdOwkvKiBVc3VhbGx5ICJzYnVzIiBvciAic2JpIiAqLworCWludAkJCWNsb2NrX2ZyZXE7CisKKwlzdHJ1Y3QgbGludXhfcHJvbV9yYW5nZXMgc2J1c19yYW5nZXNbUFJPTVJFR19NQVhdOworCWludCBudW1fc2J1c19yYW5nZXM7CisKKwlpbnQgcG9ydGlkOworCXZvaWQgKnN0YXJmaXJlX2Nvb2tpZTsKK307CisKK2V4dGVybiBzdHJ1Y3Qgc2J1c19idXMgKnNidXNfcm9vdDsKKworLyogRGV2aWNlIHByb2Jpbmcgcm91dGluZXMgY291bGQgZmluZCB0aGVzZSBoYW5keSAqLworI2RlZmluZSBmb3JfZWFjaF9zYnVzKGJ1cykgXAorICAgICAgICBmb3IoKGJ1cykgPSBzYnVzX3Jvb3Q7IChidXMpOyAoYnVzKT0oYnVzKS0+bmV4dCkKKworI2RlZmluZSBmb3JfZWFjaF9zYnVzZGV2KGRldmljZSwgYnVzKSBcCisgICAgICAgIGZvcigoZGV2aWNlKSA9IChidXMpLT5kZXZpY2VzOyAoZGV2aWNlKTsgKGRldmljZSk9KGRldmljZSktPm5leHQpCisgICAgICAgIAorI2RlZmluZSBmb3JfYWxsX3NidXNkZXYoZGV2aWNlLCBidXMpIFwKKwlmb3IgKChidXMpID0gc2J1c19yb290OyAoYnVzKTsgKGJ1cykgPSAoYnVzKS0+bmV4dCkgXAorCQlmb3IgKChkZXZpY2UpID0gKGJ1cyktPmRldmljZXM7IChkZXZpY2UpOyAoZGV2aWNlKSA9IChkZXZpY2UpLT5uZXh0KQorCisvKiBEcml2ZXIgRFZNQSBpbnRlcmZhY2VzLiAqLworI2RlZmluZSBzYnVzX2Nhbl9kbWFfNjRiaXQoc2RldikJKDEpCisjZGVmaW5lIHNidXNfY2FuX2J1cnN0NjQoc2RldikJCSgxKQorZXh0ZXJuIHZvaWQgc2J1c19zZXRfc2J1czY0KHN0cnVjdCBzYnVzX2RldiAqLCBpbnQpOworCisvKiBUaGVzZSB5aWVsZCBJT01NVSBtYXBwaW5ncyBpbiBjb25zaXN0ZW50IG1vZGUuICovCitleHRlcm4gdm9pZCAqc2J1c19hbGxvY19jb25zaXN0ZW50KHN0cnVjdCBzYnVzX2RldiAqLCBzaXplX3QsIGRtYV9hZGRyX3QgKmRtYV9hZGRycCk7CitleHRlcm4gdm9pZCBzYnVzX2ZyZWVfY29uc2lzdGVudChzdHJ1Y3Qgc2J1c19kZXYgKiwgc2l6ZV90LCB2b2lkICosIGRtYV9hZGRyX3QpOworCisjZGVmaW5lIFNCVVNfRE1BX0JJRElSRUNUSU9OQUwJRE1BX0JJRElSRUNUSU9OQUwKKyNkZWZpbmUgU0JVU19ETUFfVE9ERVZJQ0UJRE1BX1RPX0RFVklDRQorI2RlZmluZSBTQlVTX0RNQV9GUk9NREVWSUNFCURNQV9GUk9NX0RFVklDRQorI2RlZmluZQlTQlVTX0RNQV9OT05FCQlETUFfTk9ORQorCisvKiBBbGwgdGhlIHJlc3QgdXNlIHN0cmVhbWluZyBtb2RlIG1hcHBpbmdzLiAqLworZXh0ZXJuIGRtYV9hZGRyX3Qgc2J1c19tYXBfc2luZ2xlKHN0cnVjdCBzYnVzX2RldiAqLCB2b2lkICosIHNpemVfdCwgaW50KTsKK2V4dGVybiB2b2lkIHNidXNfdW5tYXBfc2luZ2xlKHN0cnVjdCBzYnVzX2RldiAqLCBkbWFfYWRkcl90LCBzaXplX3QsIGludCk7CitleHRlcm4gaW50IHNidXNfbWFwX3NnKHN0cnVjdCBzYnVzX2RldiAqLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKiwgaW50LCBpbnQpOworZXh0ZXJuIHZvaWQgc2J1c191bm1hcF9zZyhzdHJ1Y3Qgc2J1c19kZXYgKiwgc3RydWN0IHNjYXR0ZXJsaXN0ICosIGludCwgaW50KTsKKworLyogRmluYWxseSwgYWxsb3cgZXhwbGljaXQgc3luY2hyb25pemF0aW9uIG9mIHN0cmVhbWFibGUgbWFwcGluZ3MuICovCitleHRlcm4gdm9pZCBzYnVzX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHN0cnVjdCBzYnVzX2RldiAqLCBkbWFfYWRkcl90LCBzaXplX3QsIGludCk7CisjZGVmaW5lIHNidXNfZG1hX3N5bmNfc2luZ2xlIHNidXNfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUKK2V4dGVybiB2b2lkIHNidXNfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2Uoc3RydWN0IHNidXNfZGV2ICosIGRtYV9hZGRyX3QsIHNpemVfdCwgaW50KTsKK2V4dGVybiB2b2lkIHNidXNfZG1hX3N5bmNfc2dfZm9yX2NwdShzdHJ1Y3Qgc2J1c19kZXYgKiwgc3RydWN0IHNjYXR0ZXJsaXN0ICosIGludCwgaW50KTsKKyNkZWZpbmUgc2J1c19kbWFfc3luY19zZyBzYnVzX2RtYV9zeW5jX3NnX2Zvcl9jcHUKK2V4dGVybiB2b2lkIHNidXNfZG1hX3N5bmNfc2dfZm9yX2RldmljZShzdHJ1Y3Qgc2J1c19kZXYgKiwgc3RydWN0IHNjYXR0ZXJsaXN0ICosIGludCwgaW50KTsKKworI2VuZGlmIC8qICEoX1NQQVJDNjRfU0JVU19IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zY2F0dGVybGlzdC5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9zY2F0dGVybGlzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjNGYzYzYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3NjYXR0ZXJsaXN0LmgKQEAgLTAsMCArMSwyMiBAQAorLyogJElkOiBzY2F0dGVybGlzdC5oLHYgMS4xMSAyMDAxLzEyLzE3IDA3OjA1OjE1IGRhdmVtIEV4cCAkICovCisjaWZuZGVmIF9TUEFSQzY0X1NDQVRURVJMSVNUX0gKKyNkZWZpbmUgX1NQQVJDNjRfU0NBVFRFUkxJU1RfSAorCisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKworc3RydWN0IHNjYXR0ZXJsaXN0IHsKKwlzdHJ1Y3QgcGFnZQkqcGFnZTsKKwl1bnNpZ25lZCBpbnQJb2Zmc2V0OworCisJdW5zaWduZWQgaW50CWxlbmd0aDsKKworCWRtYV9hZGRyX3QJZG1hX2FkZHJlc3M7CisJX191MzIJCWRtYV9sZW5ndGg7Cit9OworCisjZGVmaW5lIHNnX2RtYV9hZGRyZXNzKHNnKQkoKHNnKS0+ZG1hX2FkZHJlc3MpCisjZGVmaW5lIHNnX2RtYV9sZW4oc2cpICAgICAJKChzZyktPmRtYV9sZW5ndGgpCisKKyNkZWZpbmUgSVNBX0RNQV9USFJFU0hPTEQJKH4wVUwpCisKKyNlbmRpZiAvKiAhKF9TUEFSQzY0X1NDQVRURVJMSVNUX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3NlY3Rpb25zLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3NlY3Rpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y0YjlmZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc2VjdGlvbnMuaApAQCAtMCwwICsxLDkgQEAKKyNpZm5kZWYgX1NQQVJDNjRfU0VDVElPTlNfSAorI2RlZmluZSBfU1BBUkM2NF9TRUNUSU9OU19ICisKKy8qIG5vdGhpbmcgdG8gc2VlLCBtb3ZlIGFsb25nICovCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2VjdGlvbnMuaD4KKworZXh0ZXJuIGNoYXIgX3N0YXJ0W107CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zZWdtZW50LmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3NlZ21lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDNlNzA5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9zZWdtZW50LmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fU1BBUkM2NF9TRUdNRU5UX0gKKyNkZWZpbmUgX19TUEFSQzY0X1NFR01FTlRfSAorCisvKiBPbmx5IGhlcmUgYmVjYXVzZSB3ZSBoYXZlIHNvbWUgb2xkIGhlYWRlciBmaWxlcyB0aGF0IGV4cGVjdCBpdC4uICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zZW1hcGhvcmUuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc2VtYXBob3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQxOWRkOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc2VtYXBob3JlLmgKQEAgLTAsMCArMSw1NyBAQAorI2lmbmRlZiBfU1BBUkM2NF9TRU1BUEhPUkVfSAorI2RlZmluZSBfU1BBUkM2NF9TRU1BUEhPUkVfSAorCisvKiBUaGVzZSBhcmUgYWN0dWFsbHkgcmVhc29uYWJsZSBvbiB0aGUgVjkuCisgKgorICogU2VlIGFzbS1wcGMvc2VtYXBob3JlLmggZm9yIGltcGxlbWVudGF0aW9uIGNvbW1lbnRhcnksCisgKiBvbmx5IHNwYXJjNjQgc3BlY2lmaWMgaXNzdWVzIGFyZSBjb21tZW50ZWQgaGVyZS4KKyAqLworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L3J3c2VtLmg+CisKK3N0cnVjdCBzZW1hcGhvcmUgeworCWF0b21pY190IGNvdW50OworCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7Cit9OworCisjZGVmaW5lIF9fU0VNQVBIT1JFX0lOSVRJQUxJWkVSKG5hbWUsIGNvdW50KSBcCisJeyBBVE9NSUNfSU5JVChjb3VudCksIFwKKwkgIF9fV0FJVF9RVUVVRV9IRUFEX0lOSVRJQUxJWkVSKChuYW1lKS53YWl0KSB9CisKKyNkZWZpbmUgX19NVVRFWF9JTklUSUFMSVpFUihuYW1lKSBcCisJX19TRU1BUEhPUkVfSU5JVElBTElaRVIobmFtZSwgMSkKKworI2RlZmluZSBfX0RFQ0xBUkVfU0VNQVBIT1JFX0dFTkVSSUMobmFtZSwgY291bnQpIFwKKwlzdHJ1Y3Qgc2VtYXBob3JlIG5hbWUgPSBfX1NFTUFQSE9SRV9JTklUSUFMSVpFUihuYW1lLGNvdW50KQorCisjZGVmaW5lIERFQ0xBUkVfTVVURVgobmFtZSkJCV9fREVDTEFSRV9TRU1BUEhPUkVfR0VORVJJQyhuYW1lLCAxKQorI2RlZmluZSBERUNMQVJFX01VVEVYX0xPQ0tFRChuYW1lKQlfX0RFQ0xBUkVfU0VNQVBIT1JFX0dFTkVSSUMobmFtZSwgMCkKKworc3RhdGljIGlubGluZSB2b2lkIHNlbWFfaW5pdCAoc3RydWN0IHNlbWFwaG9yZSAqc2VtLCBpbnQgdmFsKQoreworCWF0b21pY19zZXQoJnNlbS0+Y291bnQsIHZhbCk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmc2VtLT53YWl0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGluaXRfTVVURVggKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKK3sKKwlzZW1hX2luaXQoc2VtLCAxKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGluaXRfTVVURVhfTE9DS0VEIChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCit7CisJc2VtYV9pbml0KHNlbSwgMCk7Cit9CisKK2V4dGVybiB2b2lkIHVwKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSk7CitleHRlcm4gdm9pZCBkb3duKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSk7CitleHRlcm4gaW50IGRvd25fdHJ5bG9jayhzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pOworZXh0ZXJuIGludCBkb3duX2ludGVycnVwdGlibGUoc3RydWN0IHNlbWFwaG9yZSAqc2VtKTsKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qICEoX1NQQVJDNjRfU0VNQVBIT1JFX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3NlbWJ1Zi5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9zZW1idWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWYwNGU0ZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc2VtYnVmLmgKQEAgLTAsMCArMSwyMiBAQAorI2lmbmRlZiBfU1BBUkM2NF9TRU1CVUZfSAorI2RlZmluZSBfU1BBUkM2NF9TRU1CVUZfSAorCisvKiAKKyAqIFRoZSBzZW1pZDY0X2RzIHN0cnVjdHVyZSBmb3Igc3BhcmM2NCBhcmNoaXRlY3R1cmUuCisgKiBOb3RlIGV4dHJhIHBhZGRpbmcgYmVjYXVzZSB0aGlzIHN0cnVjdHVyZSBpcyBwYXNzZWQgYmFjayBhbmQgZm9ydGgKKyAqIGJldHdlZW4ga2VybmVsIGFuZCB1c2VyIHNwYWNlLgorICoKKyAqIFBhZCBzcGFjZSBpcyBsZWZ0IGZvcjoKKyAqIC0gMiBtaXNjZWxsYW5lb3VzIDY0LWJpdCB2YWx1ZXMKKyAqLworCitzdHJ1Y3Qgc2VtaWQ2NF9kcyB7CisJc3RydWN0IGlwYzY0X3Blcm0gc2VtX3Blcm07CQkvKiBwZXJtaXNzaW9ucyAuLiBzZWUgaXBjLmggKi8KKwlfX2tlcm5lbF90aW1lX3QJc2VtX290aW1lOwkJLyogbGFzdCBzZW1vcCB0aW1lICovCisJX19rZXJuZWxfdGltZV90CXNlbV9jdGltZTsJCS8qIGxhc3QgY2hhbmdlIHRpbWUgKi8KKwl1bnNpZ25lZCBsb25nCXNlbV9uc2VtczsJCS8qIG5vLiBvZiBzZW1hcGhvcmVzIGluIGFycmF5ICovCisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDE7CisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDI7Cit9OworCisjZW5kaWYgLyogX1NQQVJDNjRfU0VNQlVGX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvc2V0dXAuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc2V0dXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzU2ZWUyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9zZXR1cC5oCkBAIC0wLDAgKzEsMTAgQEAKKy8qCisgKglKdXN0IGEgcGxhY2UgaG9sZGVyLiAKKyAqLworCisjaWZuZGVmIF9TUEFSQzY0X1NFVFVQX0gKKyNkZWZpbmUgX1NQQVJDNjRfU0VUVVBfSAorCisjZGVmaW5lIENPTU1BTkRfTElORV9TSVpFCTI1NgorCisjZW5kaWYgLyogX1NQQVJDNjRfU0VUVVBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zZnAtbWFjaGluZS5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9zZnAtbWFjaGluZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwMTViYjgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3NmcC1tYWNoaW5lLmgKQEAgLTAsMCArMSw5MSBAQAorLyogTWFjaGluZS1kZXBlbmRlbnQgc29mdHdhcmUgZmxvYXRpbmctcG9pbnQgZGVmaW5pdGlvbnMuCisgICBTcGFyYzY0IGtlcm5lbCB2ZXJzaW9uLgorICAgQ29weXJpZ2h0IChDKSAxOTk3LDE5OTgsMTk5OSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorICAgQ29udHJpYnV0ZWQgYnkgUmljaGFyZCBIZW5kZXJzb24gKHJ0aEBjeWdudXMuY29tKSwKKwkJICBKYWt1YiBKZWxpbmVrIChqakB1bHRyYS5saW51eC5jeikgYW5kCisJCSAgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUByZWRoYXQuY29tKS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyAgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZgorICAgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisKKyNpZm5kZWYgX1NGUF9NQUNISU5FX0gKKyNkZWZpbmUgX1NGUF9NQUNISU5FX0gKKyAgIAorI2RlZmluZSBfRlBfV19UWVBFX1NJWkUJCTY0CisjZGVmaW5lIF9GUF9XX1RZUEUJCXVuc2lnbmVkIGxvbmcKKyNkZWZpbmUgX0ZQX1dTX1RZUEUJCXNpZ25lZCBsb25nCisjZGVmaW5lIF9GUF9JX1RZUEUJCWxvbmcKKworI2RlZmluZSBfRlBfTVVMX01FQVRfUyhSLFgsWSkJCQkJCVwKKyAgX0ZQX01VTF9NRUFUXzFfaW1tKF9GUF9XRlJBQ0JJVFNfUyxSLFgsWSkKKyNkZWZpbmUgX0ZQX01VTF9NRUFUX0QoUixYLFkpCQkJCQlcCisgIF9GUF9NVUxfTUVBVF8xX3dpZGUoX0ZQX1dGUkFDQklUU19ELFIsWCxZLHVtdWxfcHBtbSkKKyNkZWZpbmUgX0ZQX01VTF9NRUFUX1EoUixYLFkpCQkJCQlcCisgIF9GUF9NVUxfTUVBVF8yX3dpZGVfM211bChfRlBfV0ZSQUNCSVRTX1EsUixYLFksdW11bF9wcG1tKQorCisjZGVmaW5lIF9GUF9ESVZfTUVBVF9TKFIsWCxZKQlfRlBfRElWX01FQVRfMV9pbW0oUyxSLFgsWSxfRlBfRElWX0hFTFBfaW1tKQorI2RlZmluZSBfRlBfRElWX01FQVRfRChSLFgsWSkJX0ZQX0RJVl9NRUFUXzFfdWRpdl9ub3JtKEQsUixYLFkpCisjZGVmaW5lIF9GUF9ESVZfTUVBVF9RKFIsWCxZKQlfRlBfRElWX01FQVRfMl91ZGl2KFEsUixYLFkpCisKKyNkZWZpbmUgX0ZQX05BTkZSQUNfUwkJKChfRlBfUU5BTkJJVF9TIDw8IDEpIC0gMSkKKyNkZWZpbmUgX0ZQX05BTkZSQUNfRAkJKChfRlBfUU5BTkJJVF9EIDw8IDEpIC0gMSkKKyNkZWZpbmUgX0ZQX05BTkZSQUNfUQkJKChfRlBfUU5BTkJJVF9RIDw8IDEpIC0gMSksIC0xCisjZGVmaW5lIF9GUF9OQU5TSUdOX1MJCTAKKyNkZWZpbmUgX0ZQX05BTlNJR05fRAkJMAorI2RlZmluZSBfRlBfTkFOU0lHTl9RCQkwCisKKyNkZWZpbmUgX0ZQX0tFRVBOQU5GUkFDUCAxCisKKy8qIElmIG9uZSBOYU4gaXMgc2lnbmFsaW5nIGFuZCB0aGUgb3RoZXIgaXMgbm90LAorICogd2UgY2hvb3NlIHRoYXQgb25lLCBvdGhlcndpc2Ugd2UgY2hvb3NlIFguCisgKi8KKy8qIEZvciBfUXBfKiBhbmQgX1FfKiwgdGhpcyBzaG91bGQgcHJlZmVyIFgsIGZvcgorICogQ1BVIGluc3RydWN0aW9uIGVtdWxhdGlvbiB0aGlzIHNob3VsZCBwcmVmZXIgWS4KKyAqIChzZWUgU1BBTXY5IEIuMi4yIHNlY3Rpb24pLgorICovCisjZGVmaW5lIF9GUF9DSE9PU0VOQU4oZnMsIHdjLCBSLCBYLCBZLCBPUCkJCQlcCisgIGRvIHsJCQkJCQkJCVwKKyAgICBpZiAoKF9GUF9GUkFDX0hJR0hfUkFXXyMjZnMoWSkgJiBfRlBfUU5BTkJJVF8jI2ZzKQkJXAorCSYmICEoX0ZQX0ZSQUNfSElHSF9SQVdfIyNmcyhYKSAmIF9GUF9RTkFOQklUXyMjZnMpKQlcCisgICAgICB7CQkJCQkJCQlcCisJUiMjX3MgPSBYIyNfczsJCQkJCQlcCisJX0ZQX0ZSQUNfQ09QWV8jI3djKFIsWCk7CQkJCVwKKyAgICAgIH0JCQkJCQkJCVwKKyAgICBlbHNlCQkJCQkJCVwKKyAgICAgIHsJCQkJCQkJCVwKKwlSIyNfcyA9IFkjI19zOwkJCQkJCVwKKwlfRlBfRlJBQ19DT1BZXyMjd2MoUixZKTsJCQkJXAorICAgICAgfQkJCQkJCQkJXAorICAgIFIjI19jID0gRlBfQ0xTX05BTjsJCQkJCQlcCisgIH0gd2hpbGUgKDApCisKKy8qIE9idGFpbiB0aGUgY3VycmVudCByb3VuZGluZyBtb2RlLiAqLworI2lmbmRlZiBGUF9ST1VORE1PREUKKyNkZWZpbmUgRlBfUk9VTkRNT0RFCSgoY3VycmVudF90aHJlYWRfaW5mbygpLT54ZnNyWzBdID4+IDMwKSAmIDB4MykKKyNlbmRpZgorCisvKiBFeGNlcHRpb24gZmxhZ3MuICovCisjZGVmaW5lIEZQX0VYX0lOVkFMSUQJCSgxIDw8IDQpCisjZGVmaW5lIEZQX0VYX09WRVJGTE9XCQkoMSA8PCAzKQorI2RlZmluZSBGUF9FWF9VTkRFUkZMT1cJCSgxIDw8IDIpCisjZGVmaW5lIEZQX0VYX0RJVlpFUk8JCSgxIDw8IDEpCisjZGVmaW5lIEZQX0VYX0lORVhBQ1QJCSgxIDw8IDApCisKKyNkZWZpbmUgRlBfSEFORExFX0VYQ0VQVElPTlMgcmV0dXJuIF9mZXgKKworI2RlZmluZSBGUF9JTkhJQklUX1JFU1VMVFMgKChjdXJyZW50X3RocmVhZF9pbmZvKCktPnhmc3JbMF0gPj4gMjMpICYgX2ZleCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3NobWJ1Zi5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9zaG1idWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWMyZWY0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9zaG1idWYuaApAQCAtMCwwICsxLDM4IEBACisjaWZuZGVmIF9TUEFSQzY0X1NITUJVRl9ICisjZGVmaW5lIF9TUEFSQzY0X1NITUJVRl9ICisKKy8qIAorICogVGhlIHNobWlkNjRfZHMgc3RydWN0dXJlIGZvciBzcGFyYzY0IGFyY2hpdGVjdHVyZS4KKyAqIE5vdGUgZXh0cmEgcGFkZGluZyBiZWNhdXNlIHRoaXMgc3RydWN0dXJlIGlzIHBhc3NlZCBiYWNrIGFuZCBmb3J0aAorICogYmV0d2VlbiBrZXJuZWwgYW5kIHVzZXIgc3BhY2UuCisgKgorICogUGFkIHNwYWNlIGlzIGxlZnQgZm9yOgorICogLSAyIG1pc2NlbGxhbmVvdXMgNjQtYml0IHZhbHVlcworICovCisKK3N0cnVjdCBzaG1pZDY0X2RzIHsKKwlzdHJ1Y3QgaXBjNjRfcGVybQlzaG1fcGVybTsJLyogb3BlcmF0aW9uIHBlcm1zICovCisJX19rZXJuZWxfdGltZV90CQlzaG1fYXRpbWU7CS8qIGxhc3QgYXR0YWNoIHRpbWUgKi8KKwlfX2tlcm5lbF90aW1lX3QJCXNobV9kdGltZTsJLyogbGFzdCBkZXRhY2ggdGltZSAqLworCV9fa2VybmVsX3RpbWVfdAkJc2htX2N0aW1lOwkvKiBsYXN0IGNoYW5nZSB0aW1lICovCisJc2l6ZV90CQkJc2htX3NlZ3N6OwkvKiBzaXplIG9mIHNlZ21lbnQgKGJ5dGVzKSAqLworCV9fa2VybmVsX3BpZF90CQlzaG1fY3BpZDsJLyogcGlkIG9mIGNyZWF0b3IgKi8KKwlfX2tlcm5lbF9waWRfdAkJc2htX2xwaWQ7CS8qIHBpZCBvZiBsYXN0IG9wZXJhdG9yICovCisJdW5zaWduZWQgbG9uZwkJc2htX25hdHRjaDsJLyogbm8uIG9mIGN1cnJlbnQgYXR0YWNoZXMgKi8KKwl1bnNpZ25lZCBsb25nCQlfX3VudXNlZDE7CisJdW5zaWduZWQgbG9uZwkJX191bnVzZWQyOworfTsKKworc3RydWN0IHNobWluZm82NCB7CisJdW5zaWduZWQgbG9uZwlzaG1tYXg7CisJdW5zaWduZWQgbG9uZwlzaG1taW47CisJdW5zaWduZWQgbG9uZwlzaG1tbmk7CisJdW5zaWduZWQgbG9uZwlzaG1zZWc7CisJdW5zaWduZWQgbG9uZwlzaG1hbGw7CisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDE7CisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDI7CisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDM7CisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDQ7Cit9OworCisjZW5kaWYgLyogX1NQQVJDNjRfU0hNQlVGX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvc2htcGFyYW0uaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc2htcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzY2ZmRlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9zaG1wYXJhbS5oCkBAIC0wLDAgKzEsMTEgQEAKKy8qICRJZDogc2htcGFyYW0uaCx2IDEuNSAyMDAxLzA5LzI0IDIxOjE3OjU3IGthbm9qIEV4cCAkICovCisjaWZuZGVmIF9BU01TUEFSQzY0X1NITVBBUkFNX0gKKyNkZWZpbmUgX0FTTVNQQVJDNjRfU0hNUEFSQU1fSAorCisjaW5jbHVkZSA8YXNtL3NwaXRmaXJlLmg+CisKKyNkZWZpbmUgX19BUkNIX0ZPUkNFX1NITUxCQQkxCisvKiBhdHRhY2ggYWRkciBhIG11bHRpcGxlIG9mIHRoaXMgKi8KKyNkZWZpbmUJU0hNTEJBCSgoUEFHRV9TSVpFID4gTDFEQ0FDSEVfU0laRSkgPyBQQUdFX1NJWkUgOiBMMURDQUNIRV9TSVpFKQorCisjZW5kaWYgLyogX0FTTVNQQVJDNjRfU0hNUEFSQU1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zaWdjb250ZXh0LmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3NpZ2NvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODA3MzM3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9zaWdjb250ZXh0LmgKQEAgLTAsMCArMSw4OCBAQAorLyogJElkOiBzaWdjb250ZXh0LmgsdiAxLjEyIDE5OTkvMDkvMDYgMDg6MjI6MDkgamogRXhwICQgKi8KKyNpZm5kZWYgX19TUEFSQzY0X1NJR0NPTlRFWFRfSAorI2RlZmluZSBfX1NQQVJDNjRfU0lHQ09OVEVYVF9ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2VuZGlmCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNkZWZpbmUgX19TVU5PU19NQVhXSU4gICAzMQorCisvKiBUaGlzIGlzIHdoYXQgU3VuT1MgZG9lcywgc28gc2hhbGwgSSB1bmxlc3Mgd2UgdXNlIG5ldyAzMmJpdCBzaWduYWxzIG9yIHJ0IHNpZ25hbHMuICovCitzdHJ1Y3Qgc2lnY29udGV4dDMyIHsKKwlpbnQgc2lnY19vbnN0YWNrOyAgICAgIC8qIHN0YXRlIHRvIHJlc3RvcmUgKi8KKwlpbnQgc2lnY19tYXNrOyAgICAgICAgIC8qIHNpZ21hc2sgdG8gcmVzdG9yZSAqLworCWludCBzaWdjX3NwOyAgICAgICAgICAgLyogc3RhY2sgcG9pbnRlciAqLworCWludCBzaWdjX3BjOyAgICAgICAgICAgLyogcHJvZ3JhbSBjb3VudGVyICovCisJaW50IHNpZ2NfbnBjOyAgICAgICAgICAvKiBuZXh0IHByb2dyYW0gY291bnRlciAqLworCWludCBzaWdjX3BzcjsgICAgICAgICAgLyogZm9yIGNvbmRpdGlvbiBjb2RlcyBldGMgKi8KKwlpbnQgc2lnY19nMTsgICAgICAgICAgIC8qIFVzZXIgdXNlcyB0aGVzZSB0d28gcmVnaXN0ZXJzICovCisJaW50IHNpZ2NfbzA7ICAgICAgICAgICAvKiB3aXRoaW4gdGhlIHRyYW1wb2xpbmUgY29kZS4gKi8KKworCS8qIE5vdyBjb21lcyBpbmZvcm1hdGlvbiByZWdhcmRpbmcgdGhlIHVzZXJzIHdpbmRvdyBzZXQKKwkgKiBhdCB0aGUgdGltZSBvZiB0aGUgc2lnbmFsLgorCSAqLworCWludCBzaWdjX29zd2luczsgICAgICAgLyogb3V0c3RhbmRpbmcgd2luZG93cyAqLworCisJLyogc3RhY2sgcHRycyBmb3IgZWFjaCByZWd3aW4gYnVmICovCisJdW5zaWduZWQgc2lnY19zcGJ1ZltfX1NVTk9TX01BWFdJTl07CisKKwkvKiBXaW5kb3dzIHRvIHJlc3RvcmUgYWZ0ZXIgc2lnbmFsICovCisJc3RydWN0IHJlZ193aW5kb3czMiBzaWdjX3didWZbX19TVU5PU19NQVhXSU5dOworfTsKKworI2VuZGlmCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKy8qIFRoaXMgaXMgd2hhdCB3ZSB1c2UgZm9yIDMyYml0IG5ldyBub24tcnQgc2lnbmFscy4gKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworCXN0cnVjdCB7CisJCXVuc2lnbmVkIGludCBwc3I7CisJCXVuc2lnbmVkIGludCBwYzsKKwkJdW5zaWduZWQgaW50IG5wYzsKKwkJdW5zaWduZWQgaW50IHk7CisJCXVuc2lnbmVkIGludCB1X3JlZ3NbMTZdOyAvKiBnbG9iYWxzIGFuZCBpbnMgKi8KKwl9CQkJc2lfcmVnczsKKwlpbnQJCQlzaV9tYXNrOworfSBfX3NpZ2luZm8zMl90OworCisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkICAgaW50IHNpX2Zsb2F0X3JlZ3MgWzY0XTsKKwl1bnNpZ25lZCAgIGxvbmcgc2lfZnNyOworCXVuc2lnbmVkICAgbG9uZyBzaV9nc3I7CisJdW5zaWduZWQgICBsb25nIHNpX2ZwcnM7Cit9IF9fc2lnaW5mb19mcHVfdDsKKworLyogVGhpcyBpcyB3aGF0IFN1bk9TIGRvZXNuJ3QsIHNvIHdlIGhhdmUgdG8gd3JpdGUgdGhpcyBhbG9uZQorICAgYW5kIGRvIGl0IHByb3Blcmx5LiAqLworc3RydWN0IHNpZ2NvbnRleHQgeworCS8qIFRoZSBzaXplIG9mIHRoaXMgYXJyYXkgaGFzIHRvIG1hdGNoIFNJX01BWF9TSVpFIGZyb20gc2lnaW5mby5oICovCisJY2hhcgkJCXNpZ2NfaW5mb1sxMjhdOworCXN0cnVjdCB7CisJCXVuc2lnbmVkIGxvbmcJdV9yZWdzWzE2XTsgLyogZ2xvYmFscyBhbmQgaW5zICovCisJCXVuc2lnbmVkIGxvbmcJdHN0YXRlOworCQl1bnNpZ25lZCBsb25nCXRwYzsKKwkJdW5zaWduZWQgbG9uZwl0bnBjOworCQl1bnNpZ25lZCBpbnQJeTsKKwkJdW5zaWduZWQgaW50CWZwcnM7CisJfQkJCXNpZ2NfcmVnczsKKwlfX3NpZ2luZm9fZnB1X3QgKglzaWdjX2ZwdV9zYXZlOworCXN0cnVjdCB7CisJCXZvaWQJKglzc19zcDsKKwkJaW50CQlzc19mbGFnczsKKwkJdW5zaWduZWQgbG9uZwlzc19zaXplOworCX0JCQlzaWdjX3N0YWNrOworCXVuc2lnbmVkIGxvbmcJCXNpZ2NfbWFzazsKK307CisKKyNlbmRpZiAvKiAhKF9fQVNTRU1CTFlfXykgKi8KKworI2VuZGlmIC8qICEoX19TUEFSQzY0X1NJR0NPTlRFWFRfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvc2lnaW5mby5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9zaWdpbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE2MDQ0OQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc2lnaW5mby5oCkBAIC0wLDAgKzEsMzUgQEAKKyNpZm5kZWYgX1NQQVJDNjRfU0lHSU5GT19ICisjZGVmaW5lIF9TUEFSQzY0X1NJR0lORk9fSAorCisjZGVmaW5lIFNJX1BBRF9TSVpFMzIJKChTSV9NQVhfU0laRS9zaXplb2YoaW50KSkgLSAzKQorCisjZGVmaW5lIFNJR0VWX1BBRF9TSVpFCSgoU0lHRVZfTUFYX1NJWkUvc2l6ZW9mKGludCkpIC0gNCkKKworI2RlZmluZSBfX0FSQ0hfU0lfUFJFQU1CTEVfU0laRQkoNCAqIHNpemVvZihpbnQpKQorI2RlZmluZSBfX0FSQ0hfU0lfVFJBUE5PCisjZGVmaW5lIF9fQVJDSF9TSV9CQU5EX1QgaW50CisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zaWdpbmZvLmg+CisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KKworI2lmZGVmIENPTkZJR19DT01QQVQKKworc3RydWN0IGNvbXBhdF9zaWdpbmZvOworCisjZW5kaWYgLyogQ09ORklHX0NPTVBBVCAqLworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZGVmaW5lIFNJX05PSU5GTwkzMjc2NwkJLyogbm8gaW5mb3JtYXRpb24gaW4gc2lnaW5mb190ICovCisKKy8qCisgKiBTSUdFTVQgc2lfY29kZXMKKyAqLworI2RlZmluZSBFTVRfVEFHT1ZGCShfX1NJX0ZBVUxUfDEpCS8qIHRhZyBvdmVyZmxvdyAqLworI2RlZmluZSBOU0lHRU1UCQkxCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zaWduYWwuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc2lnbmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQyOGUzNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc2lnbmFsLmgKQEAgLTAsMCArMSwyNzYgQEAKKy8qICRJZDogc2lnbmFsLmgsdiAxLjkgMTk5OS8wOS8wNiAwODoyMjoxMSBqaiBFeHAgJCAqLworI2lmbmRlZiBfQVNNU1BBUkM2NF9TSUdOQUxfSAorI2RlZmluZSBfQVNNU1BBUkM2NF9TSUdOQUxfSAorCisjaW5jbHVkZSA8YXNtL3NpZ2NvbnRleHQuaD4KKworI2lmZGVmIF9fS0VSTkVMX18KKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvcGVyc29uYWxpdHkuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgorI2VuZGlmCisjZW5kaWYKKworLyogT24gdGhlIFNwYXJjIHRoZSBzaWduYWwgaGFuZGxlcnMgZ2V0IHBhc3NlZCBhICdzdWItc2lnbmFsJyBjb2RlCisgKiBmb3IgY2VydGFpbiBzaWduYWwgdHlwZXMsIHdoaWNoIHdlIGRvY3VtZW50IGhlcmUuCisgKi8KKyNkZWZpbmUgU0lHSFVQCQkgMQorI2RlZmluZSBTSUdJTlQJCSAyCisjZGVmaW5lIFNJR1FVSVQJCSAzCisjZGVmaW5lIFNJR0lMTAkJIDQKKyNkZWZpbmUgICAgU1VCU0lHX1NUQUNLICAgICAgIDAKKyNkZWZpbmUgICAgU1VCU0lHX0lMTElOU1QgICAgIDIKKyNkZWZpbmUgICAgU1VCU0lHX1BSSVZJTlNUICAgIDMKKyNkZWZpbmUgICAgU1VCU0lHX0JBRFRSQVAodCkgICgweDgwICsgKHQpKQorCisjZGVmaW5lIFNJR1RSQVAJCSA1CisjZGVmaW5lIFNJR0FCUlQJCSA2CisjZGVmaW5lIFNJR0lPVAkJIDYKKworI2RlZmluZSBTSUdFTVQgICAgICAgICAgIDcKKyNkZWZpbmUgICAgU1VCU0lHX1RBRyAgICAxMAorCisjZGVmaW5lIFNJR0ZQRQkJIDgKKyNkZWZpbmUgICAgU1VCU0lHX0ZQRElTQUJMRUQgICAgIDB4NDAwCisjZGVmaW5lICAgIFNVQlNJR19GUEVSUk9SICAgICAgICAweDQwNAorI2RlZmluZSAgICBTVUJTSUdfRlBJTlRPVkZMICAgICAgMHgwMDEKKyNkZWZpbmUgICAgU1VCU0lHX0ZQU1RTSUcgICAgICAgIDB4MDAyCisjZGVmaW5lICAgIFNVQlNJR19JRElWWkVSTyAgICAgICAweDAxNAorI2RlZmluZSAgICBTVUJTSUdfRlBJTkVYQUNUICAgICAgMHgwYzQKKyNkZWZpbmUgICAgU1VCU0lHX0ZQRElWWkVSTyAgICAgIDB4MGM4CisjZGVmaW5lICAgIFNVQlNJR19GUFVORkxPVyAgICAgICAweDBjYworI2RlZmluZSAgICBTVUJTSUdfRlBPUEVSUk9SICAgICAgMHgwZDAKKyNkZWZpbmUgICAgU1VCU0lHX0ZQT1ZGTE9XICAgICAgIDB4MGQ0CisKKyNkZWZpbmUgU0lHS0lMTAkJIDkKKyNkZWZpbmUgU0lHQlVTICAgICAgICAgIDEwCisjZGVmaW5lICAgIFNVQlNJR19CVVNUSU1FT1VUICAgIDEKKyNkZWZpbmUgICAgU1VCU0lHX0FMSUdOTUVOVCAgICAgMgorI2RlZmluZSAgICBTVUJTSUdfTUlTQ0VSUk9SICAgICA1CisKKyNkZWZpbmUgU0lHU0VHVgkJMTEKKyNkZWZpbmUgICAgU1VCU0lHX05PTUFQUElORyAgICAgMworI2RlZmluZSAgICBTVUJTSUdfUFJPVEVDVElPTiAgICA0CisjZGVmaW5lICAgIFNVQlNJR19TRUdFUlJPUiAgICAgIDUKKworI2RlZmluZSBTSUdTWVMJCTEyCisKKyNkZWZpbmUgU0lHUElQRQkJMTMKKyNkZWZpbmUgU0lHQUxSTQkJMTQKKyNkZWZpbmUgU0lHVEVSTQkJMTUKKyNkZWZpbmUgU0lHVVJHICAgICAgICAgIDE2CisKKy8qIFN1bk9TIHZhbHVlcyB3aGljaCBkZXZpYXRlIGZyb20gdGhlIExpbnV4L2kzODYgb25lcyAqLworI2RlZmluZSBTSUdTVE9QCQkxNworI2RlZmluZSBTSUdUU1RQCQkxOAorI2RlZmluZSBTSUdDT05UCQkxOQorI2RlZmluZSBTSUdDSExECQkyMAorI2RlZmluZSBTSUdUVElOCQkyMQorI2RlZmluZSBTSUdUVE9VCQkyMgorI2RlZmluZSBTSUdJTwkJMjMKKyNkZWZpbmUgU0lHUE9MTAkJU0lHSU8gICAvKiBTeXNWIG5hbWUgZm9yIFNJR0lPICovCisjZGVmaW5lIFNJR1hDUFUJCTI0CisjZGVmaW5lIFNJR1hGU1oJCTI1CisjZGVmaW5lIFNJR1ZUQUxSTQkyNgorI2RlZmluZSBTSUdQUk9GCQkyNworI2RlZmluZSBTSUdXSU5DSAkyOAorI2RlZmluZSBTSUdMT1NUCQkyOQorI2RlZmluZSBTSUdQV1IJCVNJR0xPU1QKKyNkZWZpbmUgU0lHVVNSMQkJMzAKKyNkZWZpbmUgU0lHVVNSMgkJMzEKKworLyogTW9zdCB0aGluZ3Mgc2hvdWxkIGJlIGNsZWFuIGVub3VnaCB0byByZWRlZmluZSB0aGlzIGF0IHdpbGwsIGlmIGNhcmUKKyAgIGlzIHRha2VuIHRvIG1ha2UgbGliYyBtYXRjaC4gICovCisKKyNkZWZpbmUgX19PTERfTlNJRwkzMgorI2RlZmluZSBfX05FV19OU0lHICAgICAgNjQKKyNkZWZpbmUgX05TSUdfQlBXICAgICAJNjQKKyNkZWZpbmUgX05TSUdfV09SRFMgICAJKF9fTkVXX05TSUcgLyBfTlNJR19CUFcpCisKKyNkZWZpbmUgU0lHUlRNSU4gICAgICAgMzIKKyNkZWZpbmUgU0lHUlRNQVggICAgICAgX19ORVdfTlNJRworCisjaWYgZGVmaW5lZChfX0tFUk5FTF9fKSB8fCBkZWZpbmVkKF9fV0FOVF9QT1NJWDFCX1NJR05BTFNfXykKKyNkZWZpbmUgX05TSUcJCQlfX05FV19OU0lHCisjZGVmaW5lIF9fbmV3X3NpZ3NldF90CQlzaWdzZXRfdAorI2RlZmluZSBfX25ld19zaWdhY3Rpb24JCXNpZ2FjdGlvbgorI2RlZmluZSBfX25ld19zaWdhY3Rpb24zMglzaWdhY3Rpb24zMgorI2RlZmluZSBfX29sZF9zaWdzZXRfdAkJb2xkX3NpZ3NldF90CisjZGVmaW5lIF9fb2xkX3NpZ2FjdGlvbgkJb2xkX3NpZ2FjdGlvbgorI2RlZmluZSBfX29sZF9zaWdhY3Rpb24zMglvbGRfc2lnYWN0aW9uMzIKKyNlbHNlCisjZGVmaW5lIF9OU0lHCQkJX19PTERfTlNJRworI2RlZmluZSBOU0lHCQkJX05TSUcKKyNkZWZpbmUgX19vbGRfc2lnc2V0X3QJCXNpZ3NldF90CisjZGVmaW5lIF9fb2xkX3NpZ2FjdGlvbgkJc2lnYWN0aW9uCisjZGVmaW5lIF9fb2xkX3NpZ2FjdGlvbjMyCXNpZ2FjdGlvbjMyCisjZW5kaWYKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKwordHlwZWRlZiB1bnNpZ25lZCBsb25nIF9fb2xkX3NpZ3NldF90OyAgICAgICAgICAgIC8qIGF0IGxlYXN0IDMyIGJpdHMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgICAgIHVuc2lnbmVkIGxvbmcgc2lnW19OU0lHX1dPUkRTXTsKK30gX19uZXdfc2lnc2V0X3Q7CisKKy8qIEEgU3VuT1Mgc2lnc3RhY2sgKi8KK3N0cnVjdCBzaWdzdGFjayB7CisJLyogWFhYIDMyLWJpdCBwb2ludGVycyBwaW5oZWFkIFhYWCAqLworCWNoYXIgKnRoZV9zdGFjazsKKwlpbnQgICBjdXJfc3RhdHVzOworfTsKKworLyogU2lndmVjIGZsYWdzICovCisjZGVmaW5lIF9TVl9TU1RBQ0sgICAgMXUgICAgLyogVGhpcyBzaWduYWwgaGFuZGxlciBzaG91bGQgdXNlIHNpZy1zdGFjayAqLworI2RlZmluZSBfU1ZfSU5UUiAgICAgIDJ1ICAgIC8qIFNpZyByZXR1cm4gc2hvdWxkIG5vdCByZXN0YXJ0IHN5c3RlbSBjYWxsICovCisjZGVmaW5lIF9TVl9SRVNFVCAgICAgNHUgICAgLyogU2V0IGhhbmRsZXIgdG8gU0lHX0RGTCB1cG9uIHRha2VuIHNpZ25hbCAqLworI2RlZmluZSBfU1ZfSUdOQ0hJTEQgIDh1ICAgIC8qIERvIG5vdCBzZW5kIFNJR0NITEQgKi8KKworLyoKKyAqIHNhX2ZsYWdzIHZhbHVlczogU0FfU1RBQ0sgaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQsIGJ1dCB3aWxsIGFsbG93IHRoZQorICogdXNhZ2Ugb2Ygc2lnbmFsIHN0YWNrcyBieSB1c2luZyB0aGUgKG5vdyBvYnNvbGV0ZSkgc2FfcmVzdG9yZXIgZmllbGQgaW4KKyAqIHRoZSBzaWdhY3Rpb24gc3RydWN0dXJlIGFzIGEgc3RhY2sgcG9pbnRlci4gVGhpcyBpcyBub3cgcG9zc2libGUgZHVlIHRvCisgKiB0aGUgY2hhbmdlcyBpbiBzaWduYWwgaGFuZGxpbmcuIExCVCAwMTA0OTMuCisgKiBTQV9JTlRFUlJVUFQgaXMgYSBuby1vcCwgYnV0IGxlZnQgZHVlIHRvIGhpc3RvcmljYWwgcmVhc29ucy4gVXNlIHRoZQorICogU0FfUkVTVEFSVCBmbGFnIHRvIGdldCByZXN0YXJ0aW5nIHNpZ25hbHMgKHdoaWNoIHdlcmUgdGhlIGRlZmF1bHQgbG9uZyBhZ28pCisgKiBTQV9TSElSUSBmbGFnIGlzIGZvciBzaGFyZWQgaW50ZXJydXB0IHN1cHBvcnQgb24gUENJIGFuZCBFSVNBLgorICovCisjZGVmaW5lIFNBX05PQ0xEU1RPUAlfU1ZfSUdOQ0hJTEQKKyNkZWZpbmUgU0FfU1RBQ0sJX1NWX1NTVEFDSworI2RlZmluZSBTQV9PTlNUQUNLCV9TVl9TU1RBQ0sKKyNkZWZpbmUgU0FfUkVTVEFSVAlfU1ZfSU5UUgorI2RlZmluZSBTQV9PTkVTSE9UCV9TVl9SRVNFVAorI2RlZmluZSBTQV9JTlRFUlJVUFQJMHgxMHUKKyNkZWZpbmUgU0FfTk9NQVNLCTB4MjB1CisjZGVmaW5lIFNBX1NISVJRCTB4NDB1CisjZGVmaW5lIFNBX05PQ0xEV0FJVCAgICAweDEwMHUKKyNkZWZpbmUgU0FfU0lHSU5GTyAgICAgIDB4MjAwdQorCisKKyNkZWZpbmUgU0lHX0JMT0NLICAgICAgICAgIDB4MDEJLyogZm9yIGJsb2NraW5nIHNpZ25hbHMgKi8KKyNkZWZpbmUgU0lHX1VOQkxPQ0sgICAgICAgIDB4MDIJLyogZm9yIHVuYmxvY2tpbmcgc2lnbmFscyAqLworI2RlZmluZSBTSUdfU0VUTUFTSyAgICAgICAgMHgwNAkvKiBmb3Igc2V0dGluZyB0aGUgc2lnbmFsIG1hc2sgKi8KKworLyogCisgKiBzaWdhbHRzdGFjayBjb250cm9scworICovCisjZGVmaW5lIFNTX09OU1RBQ0sJMQorI2RlZmluZSBTU19ESVNBQkxFCTIKKworI2RlZmluZSBNSU5TSUdTVEtTWgk0MDk2CisjZGVmaW5lIFNJR1NUS1NaCTE2Mzg0CisKKyNpZmRlZiBfX0tFUk5FTF9fCisvKgorICogVGhlc2UgdmFsdWVzIG9mIHNhX2ZsYWdzIGFyZSB1c2VkIG9ubHkgYnkgdGhlIGtlcm5lbCBhcyBwYXJ0IG9mIHRoZQorICogaXJxIGhhbmRsaW5nIHJvdXRpbmVzLgorICoKKyAqIFNBX0lOVEVSUlVQVCBpcyBhbHNvIHVzZWQgYnkgdGhlIGlycSBoYW5kbGluZyByb3V0aW5lcy4KKyAqCisgKiBESkhSCisgKiBTQV9TVEFUSUNfQUxMT0MgaXMgdXNlZCBmb3IgdGhlIFNQQVJDIHN5c3RlbSB0byBpbmRpY2F0ZSB0aGF0IHRoaXMKKyAqIGludGVycnVwdCBoYW5kbGVyJ3MgaXJxIHN0cnVjdHVyZSBzaG91bGQgYmUgc3RhdGljYWxseSBhbGxvY2F0ZWQKKyAqIGJ5IHRoZSByZXF1ZXN0X2lycSByb3V0aW5lLgorICogVGhlIGFsdGVybmF0aXZlIGlzIHRoYXQgYXJjaC9zcGFyYy9rZXJuZWwvaXJxLmMgaGFzIGNhcm5hbCBrbm93bGVkZ2UKKyAqIG9mIGludGVycnVwdCB1c2FnZSBhbmQgdGhhdCBzdWNrcy4gQWxzbyB3aXRob3V0IGEgZmxhZyBsaWtlIHRoaXMKKyAqIGl0IG1heSBiZSBwb3NzaWJsZSBmb3IgdGhlIGZyZWVfaXJxIHJvdXRpbmUgdG8gYXR0ZW1wdCB0byBmcmVlCisgKiBzdGF0aWNhbGx5IGFsbG9jYXRlZCBkYXRhLi4gd2hpY2ggaXMgTk9UIEdPT0QuCisgKgorICovCisjZGVmaW5lIFNBX1BST0JFIFNBX09ORVNIT1QKKyNkZWZpbmUgU0FfU0FNUExFX1JBTkRPTSBTQV9SRVNUQVJUCisjZGVmaW5lIFNBX1NUQVRJQ19BTExPQwkJMHg4MAorI2VuZGlmCisKKy8qIFR5cGUgb2YgYSBzaWduYWwgaGFuZGxlci4gICovCisjaWZkZWYgX19LRVJORUxfXwordHlwZWRlZiB2b2lkIF9fc2lnbmFsZm5fdChpbnQpOwordHlwZWRlZiBfX3NpZ25hbGZuX3QgX191c2VyICpfX3NpZ2hhbmRsZXJfdDsKKwordHlwZWRlZiB2b2lkIF9fcmVzdG9yZWZuX3Qodm9pZCk7Cit0eXBlZGVmIF9fcmVzdG9yZWZuX3QgX191c2VyICpfX3NpZ3Jlc3RvcmVfdDsKKyNlbHNlCit0eXBlZGVmIHZvaWQgKCpfX3NpZ2hhbmRsZXJfdCkoaW50KTsKK3R5cGVkZWYgdm9pZCAoKl9fc2lncmVzdG9yZV90KSh2b2lkKTsKKyNlbmRpZgorCisjZGVmaW5lIFNJR19ERkwJKChfX3NpZ2hhbmRsZXJfdCkwKQkvKiBkZWZhdWx0IHNpZ25hbCBoYW5kbGluZyAqLworI2RlZmluZSBTSUdfSUdOCSgoX19zaWdoYW5kbGVyX3QpMSkJLyogaWdub3JlIHNpZ25hbCAqLworI2RlZmluZSBTSUdfRVJSCSgoX19zaWdoYW5kbGVyX3QpLTEpCS8qIGVycm9yIHJldHVybiBmcm9tIHNpZ25hbCAqLworCitzdHJ1Y3QgX19uZXdfc2lnYWN0aW9uIHsKKwlfX3NpZ2hhbmRsZXJfdAkJc2FfaGFuZGxlcjsKKwl1bnNpZ25lZCBsb25nCQlzYV9mbGFnczsKKwlfX3NpZ3Jlc3RvcmVfdCAJCXNhX3Jlc3RvcmVyOyAgLyogbm90IHVzZWQgYnkgTGludXgvU1BBUkMgeWV0ICovCisJX19uZXdfc2lnc2V0X3QJCXNhX21hc2s7Cit9OworCisjaWZkZWYgX19LRVJORUxfXworCisjaWZkZWYgQ09ORklHX0NPTVBBVAorc3RydWN0IF9fbmV3X3NpZ2FjdGlvbjMyIHsKKwl1bnNpZ25lZAkJc2FfaGFuZGxlcjsKKwl1bnNpZ25lZCBpbnQgICAgCXNhX2ZsYWdzOworCXVuc2lnbmVkCQlzYV9yZXN0b3JlcjsgICAgIC8qIG5vdCB1c2VkIGJ5IExpbnV4L1NQQVJDIHlldCAqLworCWNvbXBhdF9zaWdzZXRfdCAJc2FfbWFzazsKK307CisjZW5kaWYKKworc3RydWN0IGtfc2lnYWN0aW9uIHsKKwlzdHJ1Y3QgX19uZXdfc2lnYWN0aW9uIAlzYTsKKwl2b2lkIF9fdXNlcgkJKmthX3Jlc3RvcmVyOworfTsKKyNlbmRpZgorCitzdHJ1Y3QgX19vbGRfc2lnYWN0aW9uIHsKKwlfX3NpZ2hhbmRsZXJfdCAgCXNhX2hhbmRsZXI7CisJX19vbGRfc2lnc2V0X3QgIAlzYV9tYXNrOworCXVuc2lnbmVkIGxvbmcgICAJc2FfZmxhZ3M7CisJdm9pZCAJCQkoKnNhX3Jlc3RvcmVyKSh2b2lkKTsgICAgIC8qIG5vdCB1c2VkIGJ5IExpbnV4L1NQQVJDIHlldCAqLworfTsKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2lmZGVmIENPTkZJR19DT01QQVQKK3N0cnVjdCBfX29sZF9zaWdhY3Rpb24zMiB7CisJdW5zaWduZWQJCXNhX2hhbmRsZXI7CisJY29tcGF0X29sZF9zaWdzZXRfdCAgCXNhX21hc2s7CisJdW5zaWduZWQgaW50ICAgIAlzYV9mbGFnczsKKwl1bnNpZ25lZAkJc2FfcmVzdG9yZXI7ICAgICAvKiBub3QgdXNlZCBieSBMaW51eC9TUEFSQyB5ZXQgKi8KK307CisjZW5kaWYKKworI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IHNpZ2FsdHN0YWNrIHsKKwl2b2lkCQkJX191c2VyICpzc19zcDsKKwlpbnQJCQlzc19mbGFnczsKKwlzaXplX3QJCQlzc19zaXplOworfSBzdGFja190OworCisjaWZkZWYgX19LRVJORUxfXworCisjaWZkZWYgQ09ORklHX0NPTVBBVAordHlwZWRlZiBzdHJ1Y3Qgc2lnYWx0c3RhY2szMiB7CisJdTMyCQkJc3Nfc3A7CisJaW50CQkJc3NfZmxhZ3M7CisJY29tcGF0X3NpemVfdAkJc3Nfc2l6ZTsKK30gc3RhY2tfdDMyOworI2VuZGlmCisKK3N0cnVjdCBzaWduYWxfZGVsaXZlcl9jb29raWUgeworCWludCByZXN0YXJ0X3N5c2NhbGw7CisJdW5zaWduZWQgbG9uZyBvcmlnX2kwOworfTsKKworc3RydWN0IHB0X3JlZ3M7CitleHRlcm4gdm9pZCBwdHJhY2Vfc2lnbmFsX2RlbGl2ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHZvaWQgKmNvb2tpZSk7CisKKyNlbmRpZiAvKiAhKF9fS0VSTkVMX18pICovCisKKyNlbmRpZiAvKiAhKF9fQVNTRU1CTFlfXykgKi8KKworI2VuZGlmIC8qICEoX0FTTVNQQVJDNjRfU0lHTkFMX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3NtcC5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9zbXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTNlMDZkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9zbXAuaApAQCAtMCwwICsxLDc1IEBACisvKiBzbXAuaDogU3BhcmM2NCBzcGVjaWZpYyBTTVAgc3R1ZmYuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk2IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKKyAqLworCisjaWZuZGVmIF9TUEFSQzY0X1NNUF9ICisjZGVmaW5lIF9TUEFSQzY0X1NNUF9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisjaW5jbHVkZSA8YXNtL2FzaS5oPgorI2luY2x1ZGUgPGFzbS9zdGFyZmlyZS5oPgorI2luY2x1ZGUgPGFzbS9zcGl0ZmlyZS5oPgorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgorI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CisKKyNlbmRpZiAvKiAhKF9fQVNTRU1CTFlfXykgKi8KKworI2lmZGVmIENPTkZJR19TTVAKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworLyoKKyAqCVByaXZhdGUgcm91dGluZXMvZGF0YQorICovCisgCisjaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKworZXh0ZXJuIGNwdW1hc2tfdCBwaHlzX2NwdV9wcmVzZW50X21hcDsKKyNkZWZpbmUgY3B1X3Bvc3NpYmxlX21hcCBwaHlzX2NwdV9wcmVzZW50X21hcAorCisvKgorICoJR2VuZXJhbCBmdW5jdGlvbnMgdGhhdCBlYWNoIGhvc3Qgc3lzdGVtIG11c3QgcHJvdmlkZS4KKyAqLworCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgaGFyZF9zbXBfcHJvY2Vzc29yX2lkKHZvaWQpCit7CisJaWYgKHRsYl90eXBlID09IGNoZWV0YWggfHwgdGxiX3R5cGUgPT0gY2hlZXRhaF9wbHVzKSB7CisJCXVuc2lnbmVkIGxvbmcgY2ZnLCB2ZXI7CisJCV9fYXNtX18gX192b2xhdGlsZV9fKCJyZHByICUldmVyLCAlMCIgOiAiPXIiICh2ZXIpKTsKKwkJaWYgKCh2ZXIgPj4gMzIpID09IDB4MDAzZTAwMTYpIHsKKwkJCV9fYXNtX18gX192b2xhdGlsZV9fKCJsZHhhIFslJWcwXSAlMSwgJTAiCisJCQkJCSAgICAgOiAiPXIiIChjZmcpCisJCQkJCSAgICAgOiAiaSIgKEFTSV9KQlVTX0NPTkZJRykpOworCQkJcmV0dXJuICgoY2ZnID4+IDE3KSAmIDB4MWYpOworCQl9IGVsc2UgeworCQkJX19hc21fXyBfX3ZvbGF0aWxlX18oImxkeGEgWyUlZzBdICUxLCAlMCIKKwkJCQkJICAgICA6ICI9ciIgKGNmZykKKwkJCQkJICAgICA6ICJpIiAoQVNJX1NBRkFSSV9DT05GSUcpKTsKKwkJCXJldHVybiAoKGNmZyA+PiAxNykgJiAweDNmZik7CisJCX0KKwl9IGVsc2UgaWYgKHRoaXNfaXNfc3RhcmZpcmUgIT0gMCkgeworCQlyZXR1cm4gc3RhcmZpcmVfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCk7CisJfSBlbHNlIHsKKwkJdW5zaWduZWQgbG9uZyB1cGFjb25maWc7CisJCV9fYXNtX18gX192b2xhdGlsZV9fKCJsZHhhCVslJWcwXSAlMSwgJTAiCisJCQkJICAgICA6ICI9ciIgKHVwYWNvbmZpZykKKwkJCQkgICAgIDogImkiIChBU0lfVVBBX0NPTkZJRykpOworCQlyZXR1cm4gKCh1cGFjb25maWcgPj4gMTcpICYgMHgxZik7CisJfQorfQorCisjZGVmaW5lIHNtcF9wcm9jZXNzb3JfaWQoKSAoY3VycmVudF90aHJlYWRfaW5mbygpLT5jcHUpCisKKyNlbmRpZiAvKiAhKF9fQVNTRU1CTFlfXykgKi8KKworI2VuZGlmIC8qICEoQ09ORklHX1NNUCkgKi8KKworI2RlZmluZSBOT19QUk9DX0lECQkweEZGCisKKyNlbmRpZiAvKiAhKF9TUEFSQzY0X1NNUF9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zb2NrZXQuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc29ja2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY1NTQ3YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc29ja2V0LmgKQEAgLTAsMCArMSw1NSBAQAorLyogJElkOiBzb2NrZXQuaCx2IDEuMTAgMjAwMS8wNi8xMyAxNjoyNTowMyBkYXZlbSBFeHAgJCAqLworI2lmbmRlZiBfQVNNX1NPQ0tFVF9ICisjZGVmaW5lIF9BU01fU09DS0VUX0gKKworI2luY2x1ZGUgPGFzbS9zb2NraW9zLmg+CisKKy8qIEZvciBzZXRzb2Nrb3B0KDIpICovCisjZGVmaW5lIFNPTF9TT0NLRVQJMHhmZmZmCisKKyNkZWZpbmUgU09fREVCVUcJMHgwMDAxCisjZGVmaW5lIFNPX1BBU1NDUkVECTB4MDAwMgorI2RlZmluZSBTT19SRVVTRUFERFIJMHgwMDA0CisjZGVmaW5lIFNPX0tFRVBBTElWRQkweDAwMDgKKyNkZWZpbmUgU09fRE9OVFJPVVRFCTB4MDAxMAorI2RlZmluZSBTT19CUk9BRENBU1QJMHgwMDIwCisjZGVmaW5lIFNPX1BFRVJDUkVECTB4MDA0MAorI2RlZmluZSBTT19MSU5HRVIJMHgwMDgwCisjZGVmaW5lIFNPX09PQklOTElORQkweDAxMDAKKy8qIFRvIGFkZCA6I2RlZmluZSBTT19SRVVTRVBPUlQgMHgwMjAwICovCisjZGVmaW5lIFNPX0JTRENPTVBBVCAgICAweDA0MDAKKyNkZWZpbmUgU09fUkNWTE9XQVQgICAgIDB4MDgwMAorI2RlZmluZSBTT19TTkRMT1dBVCAgICAgMHgxMDAwCisjZGVmaW5lIFNPX1JDVlRJTUVPICAgICAweDIwMDAKKyNkZWZpbmUgU09fU05EVElNRU8gICAgIDB4NDAwMAorI2RlZmluZSBTT19BQ0NFUFRDT05OCTB4ODAwMAorCisvKiB3aGEhPz8/ICovCisjZGVmaW5lIFNPX0RPTlRMSU5HRVIgICAoflNPX0xJTkdFUikgIC8qIE9sZGVyIFN1bk9TIGNvbXBhdC4gaGFjayAqLworCisjZGVmaW5lIFNPX1NOREJVRgkweDEwMDEKKyNkZWZpbmUgU09fUkNWQlVGCTB4MTAwMgorI2RlZmluZSBTT19FUlJPUgkweDEwMDcKKyNkZWZpbmUgU09fVFlQRQkJMHgxMDA4CisKKy8qIExpbnV4IHNwZWNpZmljLCBrZWVwIHRoZSBzYW1lLiAqLworI2RlZmluZSBTT19OT19DSEVDSwkweDAwMGIKKyNkZWZpbmUgU09fUFJJT1JJVFkJMHgwMDBjCisKKyNkZWZpbmUgU09fQklORFRPREVWSUNFIDB4MDAwZAorCisjZGVmaW5lIFNPX0FUVEFDSF9GSUxURVIJMHgwMDFhCisjZGVmaW5lIFNPX0RFVEFDSF9GSUxURVIgICAgICAgIDB4MDAxYgorCisjZGVmaW5lIFNPX1BFRVJOQU1FCQkweDAwMWMKKyNkZWZpbmUgU09fVElNRVNUQU1QCQkweDAwMWQKKyNkZWZpbmUgU0NNX1RJTUVTVEFNUAkJU09fVElNRVNUQU1QCisKKyNkZWZpbmUgU09fUEVFUlNFQwkJMHgwMDFlCisKKy8qIFNlY3VyaXR5IGxldmVscyAtIGFzIHBlciBOUkwgSVB2NiAtIGRvbid0IGFjdHVhbGx5IGRvIGFueXRoaW5nICovCisjZGVmaW5lIFNPX1NFQ1VSSVRZX0FVVEhFTlRJQ0FUSU9OCQkweDUwMDEKKyNkZWZpbmUgU09fU0VDVVJJVFlfRU5DUllQVElPTl9UUkFOU1BPUlQJMHg1MDAyCisjZGVmaW5lIFNPX1NFQ1VSSVRZX0VOQ1JZUFRJT05fTkVUV09SSwkJMHg1MDA0CisKKyNlbmRpZiAvKiBfQVNNX1NPQ0tFVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3NvY2tpb3MuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc29ja2lvcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3MzViYWI0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9zb2NraW9zLmgKQEAgLTAsMCArMSwxMyBAQAorI2lmbmRlZiBfQVNNX1NQQVJDNjRfU09DS0lPU19ICisjZGVmaW5lIF9BU01fU1BBUkM2NF9TT0NLSU9TX0gKKworLyogU29ja2V0LWxldmVsIEkvTyBjb250cm9sIGNhbGxzLiAqLworI2RlZmluZSBGSU9TRVRPV04gCTB4ODkwMQorI2RlZmluZSBTSU9DU1BHUlAJMHg4OTAyCisjZGVmaW5lIEZJT0dFVE9XTgkweDg5MDMKKyNkZWZpbmUgU0lPQ0dQR1JQCTB4ODkwNAorI2RlZmluZSBTSU9DQVRNQVJLCTB4ODkwNQorI2RlZmluZSBTSU9DR1NUQU1QCTB4ODkwNgkJLyogR2V0IHN0YW1wICovCisKKyNlbmRpZiAvKiAhKF9BU01fU1BBUkM2NF9TT0NLSU9TX0gpICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvc29sZXJybm8uaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc29sZXJybm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmVhNmZjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9zb2xlcnJuby5oCkBAIC0wLDAgKzEsMTMyIEBACisvKiAkSWQ6IHNvbGVycm5vLmgsdiAxLjEgMTk5Ni8xMi8yNiAxNDoyMjo0MCBkYXZlbSBFeHAgJAorICogc29sZXJybm8uaDogU29sYXJpcyBlcnJvciByZXR1cm4gY29kZXMgZm9yIGNvbXBhdGliaWxpdHkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk2IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKKyAqLworCisjaWZuZGVmIF9TUEFSQzY0X1NPTEVSUk5PX0gKKyNkZWZpbmUgX1NQQVJDNjRfU09MRVJSTk9fSAorCisjZGVmaW5lIFNPTF9FUEVSTSAgICAgICAgICAxICAgICAvKiBSZXF1aXJlZCBzdXBlcnVzZXIgYWNjZXNzIHBlcm1zICAqLworI2RlZmluZSBTT0xfRU5PRU5UICAgICAgICAgMiAgICAgLyogRmlsZSBvciBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QgKi8KKyNkZWZpbmUgU09MX0VTUkNIICAgICAgICAgIDMgICAgIC8qIFByb2Nlc3MgZGlkIG5vdCBleGlzdCAgICAgICAgICAgICovCisjZGVmaW5lCVNPTF9FSU5UUiAgICAgICAgICA0ICAgICAvKiBTeXN0ZW0gY2FsbCB3YXMgaW50ZXJydXB0ZWQgICAgICAqLworI2RlZmluZQlTT0xfRUlPICAgICAgICAgICAgNSAgICAgLyogQW4gaS9vIGVycm9yIG9jY3VycmVkICAgICAgICAgICAgKi8KKyNkZWZpbmUJU09MX0VOWElPICAgICAgICAgIDYgICAgIC8qIERldmljZSBvciBBZGRyZXNzIGRvZXMgbm90IGV4aXN0ICovCisjZGVmaW5lCVNPTF9FMkJJRyAgICAgICAgICA3CSAvKiBUb28gbWFueSBhcmd1bWVudHMgd2VyZSBnaXZlbiAgICAqLworI2RlZmluZQlTT0xfRU5PRVhFQyAgICAgICAgOCAgICAgLyogSGVhZGVyIG9mIGV4ZWN1dGFibGUgd2FzIG11bmdlZCAgKi8KKyNkZWZpbmUJU09MX0VCQURGICAgICAgICAgIDkgICAgIC8qIEJvZ3VzIGZpbGUgbnVtYmVyICAgICAgICAgICAgICAgICovCisjZGVmaW5lCVNPTF9FQ0hJTEQgICAgICAgICAxMCAgICAvKiBObyBjaGlsZHJlbiBvZiBwcm9jZXNzIGV4aXN0ICAgICAqLworI2RlZmluZQlTT0xfRUFHQUlOICAgICAgICAgMTEgICAgLyogYmVlcCBiZWVwLCAidHJ5IGFnYWluIGxhdGVyIiAgICAgKi8KKyNkZWZpbmUJU09MX0VOT01FTSAgICAgICAgIDEyICAgIC8qIE5vIG1lbW9yeSBhdmFpbGFibGUgICAgICAgICAgICAgICovCisjZGVmaW5lCVNPTF9FQUNDRVMgICAgICAgICAxMyAgICAvKiBBY2Nlc3Mgbm90IGFsbG93ZWQgICAgICAgICAgICAgICAqLworI2RlZmluZQlTT0xfRUZBVUxUICAgICAgICAgMTQgICAgLyogQWRkcmVzcyBwYXNzZWQgd2FzIGludmFsaWQgICAgICAgKi8KKyNkZWZpbmUJU09MX0VOT1RCTEsgICAgICAgIDE1ICAgIC8qIGJsa2RldiBvcCBvbiBub24tYmxvY2sgZGV2aWNlICAgICovCisjZGVmaW5lCVNPTF9FQlVTWSAgICAgICAgICAxNiAgICAvKiBNb3VudGVkIGRldmljZSB3YXMgYnVzeSAgICAgICAgICAqLworI2RlZmluZQlTT0xfRUVYSVNUICAgICAgICAgMTcgICAgLyogRmlsZSBzcGVjaWZpZWQgYWxyZWFkeSBleGlzdHMgICAgKi8KKyNkZWZpbmUJU09MX0VYREVWICAgICAgICAgIDE4ICAgIC8qIExpbmsgcmVxdWVzdCBhY3Jvc3MgZGlmZiBkZXZpY2VzICovCisjZGVmaW5lCVNPTF9FTk9ERVYgICAgICAgICAxOSAgICAvKiBEZXZpY2UgZG9lcyBub3QgZXhpc3Qgb24gc3lzdGVtICAqLworI2RlZmluZQlTT0xfRU5PVERJUiAgICAgICAgMjAgICAgLyogRGlyIG9wZXJhdGlvbiBvbiBub24tZGlyZWN0b3J5ICAgKi8KKyNkZWZpbmUJU09MX0VJU0RJUiAgICAgICAgIDIxICAgIC8qIEZpbGUgd2FzIG9mIGRpcmVjdG9yeSB0eXBlICAgICAgICovCisjZGVmaW5lCVNPTF9FSU5WQUwgICAgICAgICAyMiAgICAvKiBBcmd1bWVudCBwYXNzZWQgd2FzIGludmFsaWQgICAgICAqLworI2RlZmluZQlTT0xfRU5GSUxFICAgICAgICAgMjMgICAgLyogTm8gbW9yZSByb29tIGluIGZpbGUgdGFibGUgICAgICAgKi8KKyNkZWZpbmUJU09MX0VNRklMRSAgICAgICAgIDI0ICAgIC8qIFByb2MgaGFzIHRvbyBtYW55IGZpbGVzIG9wZW4gICAgICovCisjZGVmaW5lCVNPTF9FTk9UVFkgICAgICAgICAyNSAgICAvKiBJb2N0bCB3YXMgaW52YWxpZCBmb3IgcmVxIGRldmljZSAqLworI2RlZmluZQlTT0xfRVRYVEJTWSAgICAgICAgMjYgICAgLyogVGV4dCBmaWxlIGluIGJ1c3kgc3RhdGUgICAgICAgICAgKi8KKyNkZWZpbmUJU09MX0VGQklHICAgICAgICAgIDI3ICAgIC8qIFRvbyBiaWcgb2YgYSBmaWxlIGZvciBvcGVyYXRpb24gICovCisjZGVmaW5lCVNPTF9FTk9TUEMgICAgICAgICAyOCAgICAvKiBEaXNrIGlzIGZ1bGwgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZQlTT0xfRVNQSVBFICAgICAgICAgMjkgICAgLyogU2VlayBhdHRlbXB0ZWQgb24gbm9uLXNlZWtpbmcgZGV2Ki8KKyNkZWZpbmUJU09MX0VST0ZTICAgICAgICAgIDMwICAgIC8qIFdyaXRlIGF0dGVtcHRlZCBvbiByZWFkLW9ubHkgZnMgICovCisjZGVmaW5lCVNPTF9FTUxJTksgICAgICAgICAzMSAgICAvKiBUb28gbWFueSBsaW5rcyBpbiBmaWxlIHNlYXJjaCAgICAqLworI2RlZmluZQlTT0xfRVBJUEUgICAgICAgICAgMzIgICAgLyogQ2FsbCBhIHBsdW1iZXIgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJU09MX0VET00gICAgICAgICAgIDMzICAgIC8qIEFyZ3VtZW50IHdhcyBvdXQgb2YgZmN0IGRvbWFpbiAgICovCisjZGVmaW5lCVNPTF9FUkFOR0UgICAgICAgICAzNCAgICAvKiBDb3VsZCBub3QgcmVwcmVzZW50IG1hdGggcmVzdWx0ICAqLworI2RlZmluZQlTT0xfRU5PTVNHICAgICAgICAgMzUgICAgLyogTWVzc2FnZSBvZiByZXEgdHlwZSBkb2Vzbid0IGV4aXN0ICovCisjZGVmaW5lCVNPTF9FSURSTSAgICAgICAgICAzNiAgICAvKiBJZGVudGlmaWVyIGhhcyBiZWVuIHJlbW92ZWQgICAgICAqLworI2RlZmluZQlTT0xfRUNIUk5HICAgICAgICAgMzcgICAgLyogUmVxIGNoYW5uZWwgbnVtYmVyIG91dCBvZiByYW5nZSAgKi8KKyNkZWZpbmUJU09MX0VMMk5TWU5DICAgICAgIDM4ICAgIC8qIENvdWxkIG5vdCBzeW5jIGF0IHJ1biBsZXZlbCAyICAgICovCisjZGVmaW5lCVNPTF9FTDNITFQgICAgICAgICAzOSAgICAvKiBIYWx0ZWQgYXQgcnVuIGxldmVsIDMgICAgICAgICAgICAqLworI2RlZmluZQlTT0xfRUwzUlNUICAgICAgICAgNDAgICAgLyogUmVzZXQgYXQgcnVuIGxldmVsIDMgICAgICAgICAgICAgKi8KKyNkZWZpbmUJU09MX0VMTlJORyAgICAgICAgIDQxICAgIC8qIE91dCBvZiByYW5nZSBsaW5rIG51bWJlciAgICAgICAgICovCisjZGVmaW5lCVNPTF9FVU5BVENIICAgICAgICA0MiAgICAvKiBEcml2ZXIgZm9yIHByb3RvY29sIG5vdCBhdHRhY2hlZCAqLworI2RlZmluZQlTT0xfRU5PQ1NJICAgICAgICAgNDMgICAgLyogQ1NJIHN0cnVjdHVyZSBub3QgYXJvdW5kICAgICAgICAgKi8KKyNkZWZpbmUJU09MX0VMMkhMVCAgICAgICAgIDQ0ICAgIC8qIEhhbHRlZCBhdCBydW4gbGV2ZWwgMiAgICAgICAgICAgICovCisjZGVmaW5lCVNPTF9FREVBRExLICAgICAgICA0NSAgICAvKiBEZWFkbG9jayBjb25kaXRpb24gZGV0ZWN0ZWQgICAgICAqLworI2RlZmluZQlTT0xfRU5PTENLICAgICAgICAgNDYgICAgLyogUmVjb3JkIGxvY2tzIHVuYXZhaWxhYmxlICAgICAgICAgKi8KKyNkZWZpbmUJU09MX0VDQU5DRUxFRCAgICAgIDQ3ICAgIC8qIENhbmNlbGxhdGlvbiBvZiBvcGVyLiBoYXBwZW5lZCAgICovCisjZGVmaW5lCVNPTF9FTk9UU1VQICAgICAgICA0OCAgICAvKiBBdHRlbXB0IG9mIHVuc3VwcG9ydGVkIG9wZXJhdGlvbiAqLworI2RlZmluZQlTT0xfRURRVU9UICAgICAgICAgNDkgICAgLyogVXNlcnMgZGlzayBxdW90YSBleGNlZWRlZCAgICAgICAgKi8KKyNkZWZpbmUJU09MX0VCQURFICAgICAgICAgIDUwICAgIC8qIEludmFsaWQgZXhjaGFuZ2UgICAgICAgICAgICAgICAgICovCisjZGVmaW5lCVNPTF9FQkFEUiAgICAgICAgICA1MSAgICAvKiBSZXF1ZXN0IGRlc2NyaXB0b3Igd2FzIGludmFsaWQgICAqLworI2RlZmluZQlTT0xfRVhGVUxMICAgICAgICAgNTIgICAgLyogRnVsbCBleGNoYW5nZSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJU09MX0VOT0FOTyAgICAgICAgIDUzICAgIC8qIGFubyBkb2VzIG5vdCBleGlzdCAgICAgICAgICAgICAgICovCisjZGVmaW5lCVNPTF9FQkFEUlFDICAgICAgICA1NCAgICAvKiBSZXEgY29kZSB3YXMgaW52YWxpZCAgICAgICAgICAgICAqLworI2RlZmluZQlTT0xfRUJBRFNMVCAgICAgICAgNTUgICAgLyogQmFkIHNsb3QgbnVtYmVyICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJU09MX0VERUFETE9DSyAgICAgIDU2ICAgIC8qIERlYWRsb2NrIGluIGZzIGVycm9yICAgICAgICAgICAgICovCisjZGVmaW5lCVNPTF9FQkZPTlQgICAgICAgICA1NyAgICAvKiBGb250IGZpbGUgZm9ybWF0IGludmFsaWQgICAgICAgICAqLworLyogWU9XLCBJIExPVkUgU1lTViBTVFJFQU1TISEhISAqLworI2RlZmluZQlTT0xfRU5PU1RSICAgICAgICAgNjAgICAgLyogU3RyZWFtLW9wIG9uIG5vbi1zdHJlYW0gZGV2ICAgICAgKi8KKyNkZWZpbmUJU09MX0VOT0RBVEEgICAgICAgIDYxICAgIC8qIE5vIGRhdGEgYXZhaWwgYXQgdGhpcyB0aW1lICAgICAgICovCisjZGVmaW5lCVNPTF9FVElNRSAgICAgICAgICA2MiAgICAvKiBFeHBpcmF0aW9uIG9mIHRpbWUgb2NjdXJyZWQgICAgICAqLworI2RlZmluZQlTT0xfRU5PU1IgICAgICAgICAgNjMgICAgLyogU3RyZWFtcyByZXNvdXJjZXMgZXhoYXVzdGVkICAgICAgKi8KKyNkZWZpbmUJU09MX0VOT05FVCAgICAgICAgIDY0ICAgIC8qIE5vIG5ldHdvcmsgY29ubmVjdGVkICAgICAgICAgICAgICovCisjZGVmaW5lCVNPTF9FTk9QS0cgICAgICAgICA2NSAgICAvKiBOb24taW5zdGFsbGVkIHBhY2thZ2UgICAgICAgICAgICAqLworI2RlZmluZQlTT0xfRVJFTU9URSAgICAgICAgNjYgICAgLyogT2JqZWN0IHdhcyBvbiByZW1vdGUgbWFjaGluZSAgICAgKi8KKyNkZWZpbmUJU09MX0VOT0xJTksgICAgICAgIDY3ICAgIC8qIEN1dCBsaW5rICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lCVNPTF9FQURWICAgICAgICAgICA2OCAgICAvKiBFcnJvciBpbiBhZHZlcnRpc2UgICAgICAgICAgICAgICAqLworI2RlZmluZQlTT0xfRVNSTU5UICAgICAgICAgNjkgICAgLyogU29tZSBtYWdpYyBzcm1vdW50IHByb2JsZW0gICAgICAgKi8KKyNkZWZpbmUJU09MX0VDT01NICAgICAgICAgIDcwICAgIC8qIER1cmluZyBzZW5kLCBjb21tIGVycm9yIG9jY3VycmVkICovCisjZGVmaW5lCVNPTF9FUFJPVE8gICAgICAgICA3MSAgICAvKiBQcm90b2NvbCBib3RjaCAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZQlTT0xfRU1VTFRJSE9QICAgICAgNzQgICAgLyogTXVsdGlob3AgYXR0ZW1wdGVkICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJU09MX0VCQURNU0cgICAgICAgIDc3ICAgIC8qIE1lc3NhZ2Ugd2FzIHVucmVhZGFibGUgICAgICAgICAgICovCisjZGVmaW5lCVNPTF9FTkFNRVRPT0xPTkcgICA3OCAgICAvKiBUb28gbG9uZyBvZiBhIHBhdGggbmFtZSAgICAgICAgICAqLworI2RlZmluZQlTT0xfRU9WRVJGTE9XICAgICAgNzkgICAgLyogRGF0YSB0eXBlIHRvbyBzbWFsbCBmb3IgZGF0dW0gICAgKi8KKyNkZWZpbmUJU09MX0VOT1RVTklRICAgICAgIDgwICAgIC8qIExvZ2ljYWwgbmFtZSB3YXMgbm90IHVuaXF1ZSAgICAgICovCisjZGVmaW5lCVNPTF9FQkFERkQgICAgICAgICA4MSAgICAvKiBPcCBjYW5ub3QgYmUgcGVyZm9ybWVkIG9uIGZkICAgICAqLworI2RlZmluZQlTT0xfRVJFTUNIRyAgICAgICAgODIgICAgLyogUmVtb3RlIGFkZHJlc3MgaXMgbm93IGRpZmZlcmVudCAgKi8KKyNkZWZpbmUJU09MX0VMSUJBQ0MgICAgICAgIDgzICAgIC8qIFNoYXJlZCBsaWIgY291bGQgbm90IGJlIGFjY2Vzc2VkICovCisjZGVmaW5lCVNPTF9FTElCQkFEICAgICAgICA4NCAgICAvKiBTaExpYiBpcyBjb3JydXB0ZWQgaW4gc29tZSB3YXkgICAqLworI2RlZmluZQlTT0xfRUxJQlNDTiAgICAgICAgODUgICAgLyogQS5vdXQgU2hMaWIgcHJvYmxlbXMgICAgICAgICAgICAgKi8KKyNkZWZpbmUJU09MX0VMSUJNQVggICAgICAgIDg2ICAgIC8qIEV4Y2VlZGVkIFNoTGliIGxpbmthZ2UgbGltaXQgICAgICovCisjZGVmaW5lCVNPTF9FTElCRVhFQyAgICAgICA4NyAgICAvKiBFeGVjdXRpb24gb2YgU2hMaWIgYXR0ZW1wdGVkICAgICAqLworI2RlZmluZQlTT0xfRUlMU0VRICAgICAgICAgODggICAgLyogQmFkIGJ5dGUgc2VxdWVuY2UgZm91bmQgICAgICAgICAgKi8KKyNkZWZpbmUJU09MX0VOT1NZUyAgICAgICAgIDg5ICAgIC8qIEludmFsaWQgZmlsZXN5c3RlbSBvcGVyYXRpb24gICAgICovCisjZGVmaW5lCVNPTF9FTE9PUCAgICAgICAgICA5MCAgICAvKiBEZXRlY3RlZCBsb29wIGluIHN5bWJvbGljIGxpbmtzICAqLworI2RlZmluZQlTT0xfRVJFU1RBUlQgICAgICAgOTEgICAgLyogU3lzdGVtIGNhbGwgaXMgcmVzdGFydGFibGUgICAgICAgKi8KKyNkZWZpbmUJU09MX0VTVFJQSVBFICAgICAgIDkyICAgIC8qIERvIG5vdCBzbGVlcCBpbiBoZWFkIG9mIHN0cmVhbSAgICovCisjZGVmaW5lCVNPTF9FTk9URU1QVFkgICAgICA5MyAgICAvKiBSbWRpciBvZiBub24tZW1wdHkgZGlyZWN0b3J5ICAgICAqLworI2RlZmluZQlTT0xfRVVTRVJTICAgICAgICAgOTQgICAgLyogT3ZlciBhYnVuZGFuY2Ugb2YgdXNlcnMgZm9yIHVmcyAgKi8KKyNkZWZpbmUJU09MX0VOT1RTT0NLICAgICAgIDk1ICAgIC8qIFNvY2stb3Agb24gbm9uLXNvY2sgICAgICAgICAgICAgICovCisjZGVmaW5lCVNPTF9FREVTVEFERFJSRVEgICA5NiAgICAvKiBObyBkZXN0IGFkZHIgZ2l2ZW4sIGJ1dCBuZWVkZWQgICAqLworI2RlZmluZQlTT0xfRU1TR1NJWkUgICAgICAgOTcgICAgLyogTXNnIHRvbyBiaWcgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJU09MX0VQUk9UT1RZUEUgICAgIDk4ICAgIC8qIEJhZCBzb2NrZXQgcHJvdG9jb2wgICAgICAgICAgICAgICovCisjZGVmaW5lCVNPTF9FTk9QUk9UT09QVCAgICA5OSAgICAvKiBVbmF2YWlsYWJsZSBwcm90b2NvbCAgICAgICAgICAgICAqLworI2RlZmluZQlTT0xfRVBST1RPTk9TVVBQT1JUIDEyMCAgLyogVW5zdXBwb3J0ZWQgcHJvdG9jb2wgICAgICAgICAgICAgKi8KKyNkZWZpbmUJU09MX0VTT0NLVE5PU1VQUE9SVCAxMjEgIC8qIFVuc3VwcG9ydGVkIHNvY2tldCB0eXBlICAgICAgICAgICovCisjZGVmaW5lCVNPTF9FT1BOT1RTVVBQICAgICAxMjIgICAvKiBVbnN1cHBvcnRlZCBzb2NrLW9wICAgICAgICAgICAgICAqLworI2RlZmluZQlTT0xfRVBGTk9TVVBQT1JUICAgMTIzICAgLyogVW5zdXBwb3J0ZWQgcHJvdG9jb2wgZmFtaWx5ICAgICAgKi8KKyNkZWZpbmUJU09MX0VBRk5PU1VQUE9SVCAgIDEyNCAgIC8qIFVuc3VwIGFkZHIgZmFtaWx5IGZvciBwcm90b2NvbCAgICovCisjZGVmaW5lCVNPTF9FQUREUklOVVNFICAgICAxMjUgICAvKiBSZXEgYWRkciBpcyBhbHJlYWR5IGluIHVzZSAgICAgICAqLworI2RlZmluZQlTT0xfRUFERFJOT1RBVkFJTCAgMTI2ICAgLyogUmVxIGFkZHIgbm90IGF2YWlsYWJsZSByaWdodCBub3cgKi8KKyNkZWZpbmUJU09MX0VORVRET1dOICAgICAgIDEyNyAgIC8qIFlvdXIgc3VibmV0IGlzIG9uIGZpcmUgICAgICAgICAgICovCisjZGVmaW5lCVNPTF9FTkVUVU5SRUFDSCAgICAxMjggICAvKiBTb21lb25lIHBsYXlpbmcgd2l0aCBnYXRld2F5IGFuZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGlkIG5vdCB0ZWxsIHlvdSBoZSB3YXMgZ29pbmcgdG8gKi8KKyNkZWZpbmUJU09MX0VORVRSRVNFVCAgICAgIDEyOSAgIC8qIEJ1eSBsZXNzLWJ1Z2d5IGV0aGVybmV0IGNhcmRzICAgICovCisjZGVmaW5lCVNPTF9FQ09OTkFCT1JURUQgICAxMzAgICAvKiBBYm9ydGVkIGNvbm5lY3Rpb24gZHVlIHRvIHN3ICAgICAqLworI2RlZmluZQlTT0xfRUNPTk5SRVNFVCAgICAgMTMxICAgLyogWW91ciBwZWVycyByZXNldCB5b3VyIGNvbm5lY3Rpb24gKi8KKyNkZWZpbmUJU09MX0VOT0JVRlMgICAgICAgIDEzMiAgIC8qIE5vIGJ1ZmZlciBzcGFjZSBhdmFpbGFibGUgICAgICAgICovCisjZGVmaW5lCVNPTF9FSVNDT05OICAgICAgICAxMzMgICAvKiBDb25uZWN0IG9uIGFscmVhZHkgY29ubmVjdGVkICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc29ja2V0IGF0dGVtcHRlZCAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJU09MX0VOT1RDT05OICAgICAgIDEzNCAgIC8qIENvbW0gb24gbm9uLWNvbm5lY3RlZCBzb2NrZXQgICAgICovCisjZGVmaW5lCVNPTF9FU0hVVERPV04gICAgICAxNDMgICAvKiBPcCBhdHRlbXB0ZWQgYWZ0ZXIgc29jay1zaHV0ZG93biAqLworI2RlZmluZQlTT0xfRVRPT01BTllSRUZTICAgMTQ0ICAgLyogUmVmZXJlbmNlIGxpbWl0IGV4Y2VlZGVkICAgICAgICAgKi8KKyNkZWZpbmUJU09MX0VUSU1FRE9VVCAgICAgIDE0NSAgIC8qIFRpbWVkIG91dCBjb25uZWN0aW9uICAgICAgICAgICAgICovCisjZGVmaW5lCVNPTF9FQ09OTlJFRlVTRUQgICAxNDYgICAvKiBDb25uZWN0aW9uIHJlZnVzZWQgYnkgcmVtb3RlIGhvc3QqLworI2RlZmluZQlTT0xfRUhPU1RET1dOICAgICAgMTQ3ICAgLyogUmVtb3RlIGhvc3QgaXMgdXAgaW4gZmxhbWVzICAgICAgKi8KKyNkZWZpbmUJU09MX0VIT1NUVU5SRUFDSCAgIDE0OCAgIC8qIE1ha2UgYSBsZWZ0IGF0IEVhc3RvbiBBdmUuLi4uLiAgICovCisjZGVmaW5lCVNPTF9FV09VTERCTE9DSyAgICBFQUdBSU4gLyogSnVzdCBhbiBhbGlhcyAqLworI2RlZmluZQlTT0xfRUFMUkVBRFkgICAgICAgMTQ5ICAgLyogT3BlcmF0aW9uIGlzIGFscmVhZHkgb2NjdXJyaW5nICAgKi8KKyNkZWZpbmUJU09MX0VJTlBST0dSRVNTICAgIDE1MCAgIC8qIE9wZXJhdGlvbiBpcyBoYXBwZW5pbmcgbm93ICAgICAgICovCisjZGVmaW5lCVNPTF9FU1RBTEUgICAgICAgICAxNTEgICAvKiBGdW5ndXMgZ3Jvd3RoIG9uIE5GUyBmaWxlIGhhbmRsZSAqLworCisjZW5kaWYgLyogIShfU1BBUkM2NF9TT0xFUlJOT19IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zcGlubG9jay5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9zcGlubG9jay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExZWZhNDcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3NwaW5sb2NrLmgKQEAgLTAsMCArMSwzMTAgQEAKKy8qIHNwaW5sb2NrLmg6IDY0LWJpdCBTcGFyYyBzcGlubG9jayBzdXBwb3J0LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NyBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCisgKi8KKworI2lmbmRlZiBfX1NQQVJDNjRfU1BJTkxPQ0tfSAorI2RlZmluZSBfX1NQQVJDNjRfU1BJTkxPQ0tfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgkvKiBGb3IgTlJfQ1BVUyAqLworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisvKiBUbyBnZXQgZGVidWdnaW5nIHNwaW5sb2NrcyB3aGljaCBkZXRlY3QgYW5kIGNhdGNoCisgKiBkZWFkbG9jayBzaXR1YXRpb25zLCBzZXQgQ09ORklHX0RFQlVHX1NQSU5MT0NLCisgKiBhbmQgcmVidWlsZCB5b3VyIGtlcm5lbC4KKyAqLworCisvKiBBbGwgb2YgdGhlc2UgbG9ja2luZyBwcmltaXRpdmVzIGFyZSBleHBlY3RlZCB0byB3b3JrIHByb3Blcmx5CisgKiBldmVuIGluIGFuIFJNTyBtZW1vcnkgbW9kZWwsIHdoaWNoIGN1cnJlbnRseSBpcyB3aGF0IHRoZSBrZXJuZWwKKyAqIHJ1bnMgaW4uCisgKgorICogVGhlcmUgaXMgYW5vdGhlciBpc3N1ZS4gIEJlY2F1c2Ugd2UgcGxheSBnYW1lcyB0byBzYXZlIGN5Y2xlcworICogaW4gdGhlIG5vbi1jb250ZW50aW9uIGNhc2UsIHdlIG5lZWQgdG8gYmUgZXh0cmEgY2FyZWZ1bCBhYm91dAorICogYnJhbmNoIHRhcmdldHMgaW50byB0aGUgInNwaW5uaW5nIiBjb2RlLiAgVGhleSBsaXZlIGluIHRoZWlyCisgKiBvd24gc2VjdGlvbiwgYnV0IHRoZSBuZXdlciBWOSBicmFuY2hlcyBoYXZlIGEgc2hvcnRlciByYW5nZQorICogdGhhbiB0aGUgdHJhZGl0aW9uYWwgMzItYml0IHNwYXJjIGJyYW5jaCB2YXJpYW50cy4gIFRoZSBydWxlCisgKiBpcyB0aGF0IHRoZSBicmFuY2hlcyB0aGF0IGdvIGludG8gYW5kIG91dCBvZiB0aGUgc3Bpbm5lciBzZWN0aW9ucworICogbXVzdCBiZSBwcmUtVjkgYnJhbmNoZXMuCisgKi8KKworI2lmbmRlZiBDT05GSUdfREVCVUdfU1BJTkxPQ0sKKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIHNwaW5sb2NrX3Q7CisjZGVmaW5lIFNQSU5fTE9DS19VTkxPQ0tFRAkwCisKKyNkZWZpbmUgc3Bpbl9sb2NrX2luaXQobG9jaykJKCooKHVuc2lnbmVkIGNoYXIgKikobG9jaykpID0gMCkKKyNkZWZpbmUgc3Bpbl9pc19sb2NrZWQobG9jaykJKCooKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikobG9jaykpICE9IDApCisKKyNkZWZpbmUgc3Bpbl91bmxvY2tfd2FpdChsb2NrKQlcCitkbyB7CW1lbWJhcigiI0xvYWRMb2FkIik7CVwKK30gd2hpbGUoKigodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKWxvY2spKQorCitzdGF0aWMgaW5saW5lIHZvaWQgX3Jhd19zcGluX2xvY2soc3BpbmxvY2tfdCAqbG9jaykKK3sKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorIjE6CWxkc3R1YgkJWyUxXSwgJTBcbiIKKyIJYnJueixwbgkJJTAsIDJmXG4iCisiCSBtZW1iYXIJCSNTdG9yZUxvYWQgfCAjU3RvcmVTdG9yZVxuIgorIgkuc3Vic2VjdGlvbgkyXG4iCisiMjoJbGR1YgkJWyUxXSwgJTBcbiIKKyIJYnJueixwdAkJJTAsIDJiXG4iCisiCSBtZW1iYXIJCSNMb2FkTG9hZFxuIgorIgliYSxhLHB0CQklJXhjYywgMWJcbiIKKyIJLnByZXZpb3VzIgorCTogIj0mciIgKHRtcCkKKwk6ICJyIiAobG9jaykKKwk6ICJtZW1vcnkiKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgX3Jhd19zcGluX3RyeWxvY2soc3BpbmxvY2tfdCAqbG9jaykKK3sKKwl1bnNpZ25lZCBsb25nIHJlc3VsdDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorIglsZHN0dWIJCVslMV0sICUwXG4iCisiCW1lbWJhcgkJI1N0b3JlTG9hZCB8ICNTdG9yZVN0b3JlIgorCTogIj1yIiAocmVzdWx0KQorCTogInIiIChsb2NrKQorCTogIm1lbW9yeSIpOworCisJcmV0dXJuIChyZXN1bHQgPT0gMFVMKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9yYXdfc3Bpbl91bmxvY2soc3BpbmxvY2tfdCAqbG9jaykKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKyIJbWVtYmFyCQkjU3RvcmVTdG9yZSB8ICNMb2FkU3RvcmVcbiIKKyIJc3RiCQklJWcwLCBbJTBdIgorCTogLyogTm8gb3V0cHV0cyAqLworCTogInIiIChsb2NrKQorCTogIm1lbW9yeSIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX3Jhd19zcGluX2xvY2tfZmxhZ3Moc3BpbmxvY2tfdCAqbG9jaywgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwl1bnNpZ25lZCBsb25nIHRtcDEsIHRtcDI7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKyIxOglsZHN0dWIJCVslMl0sICUwXG4iCisiCWJybnoscG4JCSUwLCAyZlxuIgorIgltZW1iYXIJCSNTdG9yZUxvYWQgfCAjU3RvcmVTdG9yZVxuIgorIgkuc3Vic2VjdGlvbgkyXG4iCisiMjoJcmRwcgkJJSVwaWwsICUxXG4iCisiCXdycHIJCSUzLCAlJXBpbFxuIgorIjM6CWxkdWIJCVslMl0sICUwXG4iCisiCWJybnoscHQJCSUwLCAzYlxuIgorIgltZW1iYXIJCSNMb2FkTG9hZFxuIgorIgliYSxwdAkJJSV4Y2MsIDFiXG4iCisiCXdycHIJCSUxLCAlJXBpbFxuIgorIgkucHJldmlvdXMiCisJOiAiPSZyIiAodG1wMSksICI9JnIiICh0bXAyKQorCTogInIiKGxvY2spLCAiciIoZmxhZ3MpCisJOiAibWVtb3J5Iik7Cit9CisKKyNlbHNlIC8qICEoQ09ORklHX0RFQlVHX1NQSU5MT0NLKSAqLworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgY2hhciBsb2NrOworCXVuc2lnbmVkIGludCBvd25lcl9wYywgb3duZXJfY3B1OworfSBzcGlubG9ja190OworI2RlZmluZSBTUElOX0xPQ0tfVU5MT0NLRUQgKHNwaW5sb2NrX3QpIHsgMCwgMCwgMHhmZiB9CisjZGVmaW5lIHNwaW5fbG9ja19pbml0KF9fbG9jaykJXAorZG8gewkoX19sb2NrKS0+bG9jayA9IDA7IFwKKwkoX19sb2NrKS0+b3duZXJfcGMgPSAwOyBcCisJKF9fbG9jayktPm93bmVyX2NwdSA9IDB4ZmY7IFwKK30gd2hpbGUoMCkKKyNkZWZpbmUgc3Bpbl9pc19sb2NrZWQoX19sb2NrKQkoKigodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgmKChfX2xvY2spLT5sb2NrKSkpICE9IDApCisjZGVmaW5lIHNwaW5fdW5sb2NrX3dhaXQoX19sb2NrKQlcCitkbyB7IFwKKwltZW1iYXIoIiNMb2FkTG9hZCIpOyBcCit9IHdoaWxlKCooKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoJigoX19sb2NrKS0+bG9jaykpKSkKKworZXh0ZXJuIHZvaWQgX2RvX3NwaW5fbG9jayAoc3BpbmxvY2tfdCAqbG9jaywgY2hhciAqc3RyKTsKK2V4dGVybiB2b2lkIF9kb19zcGluX3VubG9jayAoc3BpbmxvY2tfdCAqbG9jayk7CitleHRlcm4gaW50IF9kb19zcGluX3RyeWxvY2sgKHNwaW5sb2NrX3QgKmxvY2spOworCisjZGVmaW5lIF9yYXdfc3Bpbl90cnlsb2NrKGxwKQlfZG9fc3Bpbl90cnlsb2NrKGxwKQorI2RlZmluZSBfcmF3X3NwaW5fbG9jayhsb2NrKQlfZG9fc3Bpbl9sb2NrKGxvY2ssICJzcGluX2xvY2siKQorI2RlZmluZSBfcmF3X3NwaW5fdW5sb2NrKGxvY2spCV9kb19zcGluX3VubG9jayhsb2NrKQorI2RlZmluZSBfcmF3X3NwaW5fbG9ja19mbGFncyhsb2NrLCBmbGFncykgX3Jhd19zcGluX2xvY2sobG9jaykKKworI2VuZGlmIC8qIENPTkZJR19ERUJVR19TUElOTE9DSyAqLworCisvKiBNdWx0aS1yZWFkZXIgbG9ja3MsIHRoZXNlIGFyZSBtdWNoIHNhbmVyIHRoYW4gdGhlIDMyLWJpdCBTcGFyYyBvbmVzLi4uICovCisKKyNpZm5kZWYgQ09ORklHX0RFQlVHX1NQSU5MT0NLCisKK3R5cGVkZWYgdW5zaWduZWQgaW50IHJ3bG9ja190OworI2RlZmluZSBSV19MT0NLX1VOTE9DS0VECTAKKyNkZWZpbmUgcndsb2NrX2luaXQobHApIGRvIHsgKihscCkgPSBSV19MT0NLX1VOTE9DS0VEOyB9IHdoaWxlKDApCisKK3N0YXRpYyB2b2lkIGlubGluZSBfX3JlYWRfbG9jayhyd2xvY2tfdCAqbG9jaykKK3sKKwl1bnNpZ25lZCBsb25nIHRtcDEsIHRtcDI7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisiMToJbGRzdwkJWyUyXSwgJTBcbiIKKyIJYnJseixwbgkJJTAsIDJmXG4iCisiNDoJIGFkZAkJJTAsIDEsICUxXG4iCisiCWNhcwkJWyUyXSwgJTAsICUxXG4iCisiCWNtcAkJJTAsICUxXG4iCisiCWJuZSxwbgkJJSVpY2MsIDFiXG4iCisiCSBtZW1iYXIJCSNTdG9yZUxvYWQgfCAjU3RvcmVTdG9yZVxuIgorIgkuc3Vic2VjdGlvbgkyXG4iCisiMjoJbGRzdwkJWyUyXSwgJTBcbiIKKyIJYnJseixwdAkJJTAsIDJiXG4iCisiCSBtZW1iYXIJCSNMb2FkTG9hZFxuIgorIgliYSxhLHB0CQklJXhjYywgNGJcbiIKKyIJLnByZXZpb3VzIgorCTogIj0mciIgKHRtcDEpLCAiPSZyIiAodG1wMikKKwk6ICJyIiAobG9jaykKKwk6ICJtZW1vcnkiKTsKK30KKworc3RhdGljIHZvaWQgaW5saW5lIF9fcmVhZF91bmxvY2socndsb2NrX3QgKmxvY2spCit7CisJdW5zaWduZWQgbG9uZyB0bXAxLCB0bXAyOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisiCW1lbWJhcgkjU3RvcmVMb2FkIHwgI0xvYWRMb2FkXG4iCisiMToJbGR1dwlbJTJdLCAlMFxuIgorIglzdWIJJTAsIDEsICUxXG4iCisiCWNhcwlbJTJdLCAlMCwgJTFcbiIKKyIJY21wCSUwLCAlMVxuIgorIglibmUscG4JJSV4Y2MsIDFiXG4iCisiCSBub3AiCisJOiAiPSZyIiAodG1wMSksICI9JnIiICh0bXAyKQorCTogInIiIChsb2NrKQorCTogIm1lbW9yeSIpOworfQorCitzdGF0aWMgdm9pZCBpbmxpbmUgX193cml0ZV9sb2NrKHJ3bG9ja190ICpsb2NrKQoreworCXVuc2lnbmVkIGxvbmcgbWFzaywgdG1wMSwgdG1wMjsKKworCW1hc2sgPSAweDgwMDAwMDAwVUw7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKyIxOglsZHV3CQlbJTJdLCAlMFxuIgorIglicm56LHBuCQklMCwgMmZcbiIKKyI0Ogkgb3IJCSUwLCAlMywgJTFcbiIKKyIJY2FzCQlbJTJdLCAlMCwgJTFcbiIKKyIJY21wCQklMCwgJTFcbiIKKyIJYm5lLHBuCQklJWljYywgMWJcbiIKKyIJIG1lbWJhcgkJI1N0b3JlTG9hZCB8ICNTdG9yZVN0b3JlXG4iCisiCS5zdWJzZWN0aW9uCTJcbiIKKyIyOglsZHV3CQlbJTJdLCAlMFxuIgorIglicm56LHB0CQklMCwgMmJcbiIKKyIJIG1lbWJhcgkJI0xvYWRMb2FkXG4iCisiCWJhLGEscHQJCSUleGNjLCA0YlxuIgorIgkucHJldmlvdXMiCisJOiAiPSZyIiAodG1wMSksICI9JnIiICh0bXAyKQorCTogInIiIChsb2NrKSwgInIiIChtYXNrKQorCTogIm1lbW9yeSIpOworfQorCitzdGF0aWMgdm9pZCBpbmxpbmUgX193cml0ZV91bmxvY2socndsb2NrX3QgKmxvY2spCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisiCW1lbWJhcgkJI0xvYWRTdG9yZSB8ICNTdG9yZVN0b3JlXG4iCisiCXN0dwkJJSVnMCwgWyUwXSIKKwk6IC8qIG5vIG91dHB1dHMgKi8KKwk6ICJyIiAobG9jaykKKwk6ICJtZW1vcnkiKTsKK30KKworc3RhdGljIGludCBpbmxpbmUgX193cml0ZV90cnlsb2NrKHJ3bG9ja190ICpsb2NrKQoreworCXVuc2lnbmVkIGxvbmcgbWFzaywgdG1wMSwgdG1wMiwgcmVzdWx0OworCisJbWFzayA9IDB4ODAwMDAwMDBVTDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorIgltb3YJCTAsICUyXG4iCisiMToJbGR1dwkJWyUzXSwgJTBcbiIKKyIJYnJueixwbgkJJTAsIDJmXG4iCisiCSBvcgkJJTAsICU0LCAlMVxuIgorIgljYXMJCVslM10sICUwLCAlMVxuIgorIgljbXAJCSUwLCAlMVxuIgorIglibmUscG4JCSUlaWNjLCAxYlxuIgorIgkgbWVtYmFyCQkjU3RvcmVMb2FkIHwgI1N0b3JlU3RvcmVcbiIKKyIJbW92CQkxLCAlMlxuIgorIjI6IgorCTogIj0mciIgKHRtcDEpLCAiPSZyIiAodG1wMiksICI9JnIiIChyZXN1bHQpCisJOiAiciIgKGxvY2spLCAiciIgKG1hc2spCisJOiAibWVtb3J5Iik7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisjZGVmaW5lIF9yYXdfcmVhZF9sb2NrKHApCV9fcmVhZF9sb2NrKHApCisjZGVmaW5lIF9yYXdfcmVhZF91bmxvY2socCkJX19yZWFkX3VubG9jayhwKQorI2RlZmluZSBfcmF3X3dyaXRlX2xvY2socCkJX193cml0ZV9sb2NrKHApCisjZGVmaW5lIF9yYXdfd3JpdGVfdW5sb2NrKHApCV9fd3JpdGVfdW5sb2NrKHApCisjZGVmaW5lIF9yYXdfd3JpdGVfdHJ5bG9jayhwKQlfX3dyaXRlX3RyeWxvY2socCkKKworI2Vsc2UgLyogIShDT05GSUdfREVCVUdfU1BJTkxPQ0spICovCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBsb25nIGxvY2s7CisJdW5zaWduZWQgaW50IHdyaXRlcl9wYywgd3JpdGVyX2NwdTsKKwl1bnNpZ25lZCBpbnQgcmVhZGVyX3BjW05SX0NQVVNdOworfSByd2xvY2tfdDsKKyNkZWZpbmUgUldfTE9DS19VTkxPQ0tFRAkocndsb2NrX3QpIHsgMCwgMCwgMHhmZiwgeyB9IH0KKyNkZWZpbmUgcndsb2NrX2luaXQobHApIGRvIHsgKihscCkgPSBSV19MT0NLX1VOTE9DS0VEOyB9IHdoaWxlKDApCisKK2V4dGVybiB2b2lkIF9kb19yZWFkX2xvY2socndsb2NrX3QgKnJ3LCBjaGFyICpzdHIpOworZXh0ZXJuIHZvaWQgX2RvX3JlYWRfdW5sb2NrKHJ3bG9ja190ICpydywgY2hhciAqc3RyKTsKK2V4dGVybiB2b2lkIF9kb193cml0ZV9sb2NrKHJ3bG9ja190ICpydywgY2hhciAqc3RyKTsKK2V4dGVybiB2b2lkIF9kb193cml0ZV91bmxvY2socndsb2NrX3QgKnJ3KTsKK2V4dGVybiBpbnQgX2RvX3dyaXRlX3RyeWxvY2socndsb2NrX3QgKnJ3LCBjaGFyICpzdHIpOworCisjZGVmaW5lIF9yYXdfcmVhZF9sb2NrKGxvY2spIFwKK2RvIHsJdW5zaWduZWQgbG9uZyBmbGFnczsgXAorCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsgXAorCV9kb19yZWFkX2xvY2sobG9jaywgInJlYWRfbG9jayIpOyBcCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOyBcCit9IHdoaWxlKDApCisKKyNkZWZpbmUgX3Jhd19yZWFkX3VubG9jayhsb2NrKSBcCitkbyB7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7IFwKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7IFwKKwlfZG9fcmVhZF91bmxvY2sobG9jaywgInJlYWRfdW5sb2NrIik7IFwKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7IFwKK30gd2hpbGUoMCkKKworI2RlZmluZSBfcmF3X3dyaXRlX2xvY2sobG9jaykgXAorZG8gewl1bnNpZ25lZCBsb25nIGZsYWdzOyBcCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOyBcCisJX2RvX3dyaXRlX2xvY2sobG9jaywgIndyaXRlX2xvY2siKTsgXAorCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsgXAorfSB3aGlsZSgwKQorCisjZGVmaW5lIF9yYXdfd3JpdGVfdW5sb2NrKGxvY2spIFwKK2RvIHsJdW5zaWduZWQgbG9uZyBmbGFnczsgXAorCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsgXAorCV9kb193cml0ZV91bmxvY2sobG9jayk7IFwKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7IFwKK30gd2hpbGUoMCkKKworI2RlZmluZSBfcmF3X3dyaXRlX3RyeWxvY2sobG9jaykgXAorKHsJdW5zaWduZWQgbG9uZyBmbGFnczsgXAorCWludCB2YWw7IFwKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7IFwKKwl2YWwgPSBfZG9fd3JpdGVfdHJ5bG9jayhsb2NrLCAid3JpdGVfdHJ5bG9jayIpOyBcCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOyBcCisJdmFsOyBcCit9KQorCisjZW5kaWYgLyogQ09ORklHX0RFQlVHX1NQSU5MT0NLICovCisKKyNkZWZpbmUgX3Jhd19yZWFkX3RyeWxvY2sobG9jaykgZ2VuZXJpY19yYXdfcmVhZF90cnlsb2NrKGxvY2spCisKKyNlbmRpZiAvKiAhKF9fQVNTRU1CTFlfXykgKi8KKworI2VuZGlmIC8qICEoX19TUEFSQzY0X1NQSU5MT0NLX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3NwaXRmaXJlLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3NwaXRmaXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ3OGNlNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc3BpdGZpcmUuaApAQCAtMCwwICsxLDQ2MSBAQAorLyogJElkOiBzcGl0ZmlyZS5oLHYgMS4xOCAyMDAxLzExLzI5IDE2OjQyOjEwIGthbm9qIEV4cCAkCisgKiBzcGl0ZmlyZS5oOiBTcGl0RmlyZS9CbGFja0JpcmQvQ2hlZXRhaCBpbmxpbmUgTU1VIG9wZXJhdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk2IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKKyAqLworCisjaWZuZGVmIF9TUEFSQzY0X1NQSVRGSVJFX0gKKyNkZWZpbmUgX1NQQVJDNjRfU1BJVEZJUkVfSAorCisjaW5jbHVkZSA8YXNtL2FzaS5oPgorCisvKiBUaGUgZm9sbG93aW5nIHJlZ2lzdGVyIGFkZHJlc3NlcyBhcmUgYWNjZXNzaWJsZSB2aWEgQVNJX0RNTVUKKyAqIGFuZCBBU0lfSU1NVSwgdGhhdCBpcyB0aGVyZSBpcyBhIGRpc3RpbmN0IGFuZCB1bmlxdWUgY29weSBvZgorICogZWFjaCB0aGVzZSByZWdpc3RlcnMgZm9yIGVhY2ggVExCLgorICovCisjZGVmaW5lIFRTQl9UQUdfVEFSR0VUCQkweDAwMDAwMDAwMDAwMDAwMDAgLyogQWxsIGNoaXBzCQkJCSovCisjZGVmaW5lIFRMQl9TRlNSCQkweDAwMDAwMDAwMDAwMDAwMTggLyogQWxsIGNoaXBzCQkJCSovCisjZGVmaW5lIFRTQl9SRUcJCQkweDAwMDAwMDAwMDAwMDAwMjggLyogQWxsIGNoaXBzCQkJCSovCisjZGVmaW5lIFRMQl9UQUdfQUNDRVNTCQkweDAwMDAwMDAwMDAwMDAwMzAgLyogQWxsIGNoaXBzCQkJCSovCisjZGVmaW5lIFZJUlRfV0FUQ0hQT0lOVAkJMHgwMDAwMDAwMDAwMDAwMDM4IC8qIEFsbCBjaGlwcwkJCQkqLworI2RlZmluZSBQSFlTX1dBVENIUE9JTlQJCTB4MDAwMDAwMDAwMDAwMDA0MCAvKiBBbGwgY2hpcHMJCQkJKi8KKyNkZWZpbmUgVFNCX0VYVEVOU0lPTl9QCQkweDAwMDAwMDAwMDAwMDAwNDggLyogVWx0cmEtSUlJIGFuZCBsYXRlcgkJKi8KKyNkZWZpbmUgVFNCX0VYVEVOU0lPTl9TCQkweDAwMDAwMDAwMDAwMDAwNTAgLyogVWx0cmEtSUlJIGFuZCBsYXRlciwgRC1UTEIgb25seQkqLworI2RlZmluZSBUU0JfRVhURU5TSU9OX04JCTB4MDAwMDAwMDAwMDAwMDA1OCAvKiBVbHRyYS1JSUkgYW5kIGxhdGVyCQkqLworI2RlZmluZSBUTEJfVEFHX0FDQ0VTU19FWFQJMHgwMDAwMDAwMDAwMDAwMDYwIC8qIFVsdHJhLUlJSSsgYW5kIGxhdGVyCQkqLworCisvKiBUaGVzZSByZWdpc3RlcnMgb25seSBleGlzdCBhcyBvbmUgZW50aXR5LCBhbmQgYXJlIGFjY2Vzc2VkCisgKiB2aWEgQVNJX0RNTVUgb25seS4KKyAqLworI2RlZmluZSBQUklNQVJZX0NPTlRFWFQJCTB4MDAwMDAwMDAwMDAwMDAwOAorI2RlZmluZSBTRUNPTkRBUllfQ09OVEVYVAkweDAwMDAwMDAwMDAwMDAwMTAKKyNkZWZpbmUgRE1NVV9TRkFSCQkweDAwMDAwMDAwMDAwMDAwMjAKKyNkZWZpbmUgVklSVF9XQVRDSFBPSU5UCQkweDAwMDAwMDAwMDAwMDAwMzgKKyNkZWZpbmUgUEhZU19XQVRDSFBPSU5UCQkweDAwMDAwMDAwMDAwMDAwNDAKKworI2RlZmluZSBTUElURklSRV9ISUdIRVNUX0xPQ0tFRF9UTEJFTlQJKDY0IC0gMSkKKyNkZWZpbmUgQ0hFRVRBSF9ISUdIRVNUX0xPQ0tFRF9UTEJFTlQJKDE2IC0gMSkKKworI2RlZmluZSBMMURDQUNIRV9TSVpFCQkweDQwMDAKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworZW51bSB1bHRyYV90bGJfbGF5b3V0IHsKKwlzcGl0ZmlyZSA9IDAsCisJY2hlZXRhaCA9IDEsCisJY2hlZXRhaF9wbHVzID0gMiwKK307CisKK2V4dGVybiBlbnVtIHVsdHJhX3RsYl9sYXlvdXQgdGxiX3R5cGU7CisKKyNkZWZpbmUgc3BhcmM2NF9oaWdoZXN0X2xvY2tlZF90bGJlbnQoKQlcCisJKHRsYl90eXBlID09IHNwaXRmaXJlID8gXAorCSBTUElURklSRV9ISUdIRVNUX0xPQ0tFRF9UTEJFTlQgOiBcCisJIENIRUVUQUhfSElHSEVTVF9MT0NLRURfVExCRU5UKQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIHNwaXRmaXJlX2dldF9pc2Zzcih2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgcmV0OworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oImxkeGEJWyUxXSAlMiwgJTAiCisJCQkgICAgIDogIj1yIiAocmV0KQorCQkJICAgICA6ICJyIiAoVExCX1NGU1IpLCAiaSIgKEFTSV9JTU1VKSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBzcGl0ZmlyZV9nZXRfZHNmc3Iodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHJldDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKCJsZHhhCVslMV0gJTIsICUwIgorCQkJICAgICA6ICI9ciIgKHJldCkKKwkJCSAgICAgOiAiciIgKFRMQl9TRlNSKSwgImkiIChBU0lfRE1NVSkpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgc3BpdGZpcmVfZ2V0X3NmYXIodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHJldDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKCJsZHhhCVslMV0gJTIsICUwIgorCQkJICAgICA6ICI9ciIgKHJldCkKKwkJCSAgICAgOiAiciIgKERNTVVfU0ZBUiksICJpIiAoQVNJX0RNTVUpKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHNwaXRmaXJlX3B1dF9pc2Zzcih1bnNpZ25lZCBsb25nIHNmc3IpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0eGEJJTAsIFslMV0gJTJcblx0IgorCQkJICAgICAibWVtYmFyCSNTeW5jIgorCQkJICAgICA6IC8qIG5vIG91dHB1dHMgKi8KKwkJCSAgICAgOiAiciIgKHNmc3IpLCAiciIgKFRMQl9TRlNSKSwgImkiIChBU0lfSU1NVSkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHNwaXRmaXJlX3B1dF9kc2Zzcih1bnNpZ25lZCBsb25nIHNmc3IpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0eGEJJTAsIFslMV0gJTJcblx0IgorCQkJICAgICAibWVtYmFyCSNTeW5jIgorCQkJICAgICA6IC8qIG5vIG91dHB1dHMgKi8KKwkJCSAgICAgOiAiciIgKHNmc3IpLCAiciIgKFRMQl9TRlNSKSwgImkiIChBU0lfRE1NVSkpOworfQorCisvKiBUaGUgZGF0YSBjYWNoZSBpcyB3cml0ZSB0aHJvdWdoLCBzbyB0aGlzIGp1c3QgaW52YWxpZGF0ZXMgdGhlCisgKiBzcGVjaWZpZWQgbGluZS4KKyAqLworc3RhdGljIF9faW5saW5lX18gdm9pZCBzcGl0ZmlyZV9wdXRfZGNhY2hlX3RhZyh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgdGFnKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdHhhCSUwLCBbJTFdICUyXG5cdCIKKwkJCSAgICAgIm1lbWJhcgkjU3luYyIKKwkJCSAgICAgOiAvKiBObyBvdXRwdXRzICovCisJCQkgICAgIDogInIiICh0YWcpLCAiciIgKGFkZHIpLCAiaSIgKEFTSV9EQ0FDSEVfVEFHKSk7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtZW1iYXIgI1N5bmMiIDogOiA6ICJtZW1vcnkiKTsKK30KKworLyogVGhlIGluc3RydWN0aW9uIGNhY2hlIGxpbmVzIGFyZSBmbHVzaGVkIHdpdGggdGhpcywgYnV0IG5vdGUgdGhhdAorICogdGhpcyBkb2VzIG5vdCBmbHVzaCB0aGUgcGlwZWxpbmUuICBJdCBpcyBwb3NzaWJsZSBmb3IgYSBsaW5lIHRvCisgKiBnZXQgZmx1c2hlZCBidXQgc3RhbGUgaW5zdHJ1Y3Rpb25zIHRvIHN0aWxsIGJlIGluIHRoZSBwaXBlbGluZSwKKyAqIGEgZmx1c2ggaW5zdHJ1Y3Rpb24gKHRvIGFueSBhZGRyZXNzKSBpcyBzdWZmaWNpZW50IHRvIGhhbmRsZQorICogdGhpcyBpc3N1ZSBhZnRlciB0aGUgbGluZSBpcyBpbnZhbGlkYXRlZC4KKyAqLworc3RhdGljIF9faW5saW5lX18gdm9pZCBzcGl0ZmlyZV9wdXRfaWNhY2hlX3RhZyh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgdGFnKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdHhhCSUwLCBbJTFdICUyXG5cdCIKKwkJCSAgICAgIm1lbWJhcgkjU3luYyIKKwkJCSAgICAgOiAvKiBObyBvdXRwdXRzICovCisJCQkgICAgIDogInIiICh0YWcpLCAiciIgKGFkZHIpLCAiaSIgKEFTSV9JQ19UQUcpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBzcGl0ZmlyZV9nZXRfZHRsYl9kYXRhKGludCBlbnRyeSkKK3sKKwl1bnNpZ25lZCBsb25nIGRhdGE7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibGR4YQlbJTFdICUyLCAlMCIKKwkJCSAgICAgOiAiPXIiIChkYXRhKQorCQkJICAgICA6ICJyIiAoZW50cnkgPDwgMyksICJpIiAoQVNJX0RUTEJfREFUQV9BQ0NFU1MpKTsKKworCS8qIENsZWFyIFRURSBkaWFnIGJpdHMuICovCisJZGF0YSAmPSB+MHgwMDAzZmUwMDAwMDAwMDAwVUw7CisKKwlyZXR1cm4gZGF0YTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBzcGl0ZmlyZV9nZXRfZHRsYl90YWcoaW50IGVudHJ5KQoreworCXVuc2lnbmVkIGxvbmcgdGFnOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oImxkeGEJWyUxXSAlMiwgJTAiCisJCQkgICAgIDogIj1yIiAodGFnKQorCQkJICAgICA6ICJyIiAoZW50cnkgPDwgMyksICJpIiAoQVNJX0RUTEJfVEFHX1JFQUQpKTsKKwlyZXR1cm4gdGFnOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHNwaXRmaXJlX3B1dF9kdGxiX2RhdGEoaW50IGVudHJ5LCB1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0eGEJJTAsIFslMV0gJTJcblx0IgorCQkJICAgICAibWVtYmFyCSNTeW5jIgorCQkJICAgICA6IC8qIE5vIG91dHB1dHMgKi8KKwkJCSAgICAgOiAiciIgKGRhdGEpLCAiciIgKGVudHJ5IDw8IDMpLAorCQkJICAgICAgICJpIiAoQVNJX0RUTEJfREFUQV9BQ0NFU1MpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBzcGl0ZmlyZV9nZXRfaXRsYl9kYXRhKGludCBlbnRyeSkKK3sKKwl1bnNpZ25lZCBsb25nIGRhdGE7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibGR4YQlbJTFdICUyLCAlMCIKKwkJCSAgICAgOiAiPXIiIChkYXRhKQorCQkJICAgICA6ICJyIiAoZW50cnkgPDwgMyksICJpIiAoQVNJX0lUTEJfREFUQV9BQ0NFU1MpKTsKKworCS8qIENsZWFyIFRURSBkaWFnIGJpdHMuICovCisJZGF0YSAmPSB+MHgwMDAzZmUwMDAwMDAwMDAwVUw7CisKKwlyZXR1cm4gZGF0YTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBzcGl0ZmlyZV9nZXRfaXRsYl90YWcoaW50IGVudHJ5KQoreworCXVuc2lnbmVkIGxvbmcgdGFnOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oImxkeGEJWyUxXSAlMiwgJTAiCisJCQkgICAgIDogIj1yIiAodGFnKQorCQkJICAgICA6ICJyIiAoZW50cnkgPDwgMyksICJpIiAoQVNJX0lUTEJfVEFHX1JFQUQpKTsKKwlyZXR1cm4gdGFnOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHNwaXRmaXJlX3B1dF9pdGxiX2RhdGEoaW50IGVudHJ5LCB1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0eGEJJTAsIFslMV0gJTJcblx0IgorCQkJICAgICAibWVtYmFyCSNTeW5jIgorCQkJICAgICA6IC8qIE5vIG91dHB1dHMgKi8KKwkJCSAgICAgOiAiciIgKGRhdGEpLCAiciIgKGVudHJ5IDw8IDMpLAorCQkJICAgICAgICJpIiAoQVNJX0lUTEJfREFUQV9BQ0NFU1MpKTsKK30KKworLyogU3BpdGZpcmUgaGFyZHdhcmUgYXNzaXN0ZWQgVExCIGZsdXNoZXMuICovCisKKy8qIENvbnRleHQgbGV2ZWwgZmx1c2hlcy4gKi8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgc3BpdGZpcmVfZmx1c2hfZHRsYl9wcmltYXJ5X2NvbnRleHQodm9pZCkKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3R4YQklJWcwLCBbJTBdICUxXG5cdCIKKwkJCSAgICAgIm1lbWJhcgkjU3luYyIKKwkJCSAgICAgOiAvKiBObyBvdXRwdXRzICovCisJCQkgICAgIDogInIiICgweDQwKSwgImkiIChBU0lfRE1NVV9ERU1BUCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHNwaXRmaXJlX2ZsdXNoX2l0bGJfcHJpbWFyeV9jb250ZXh0KHZvaWQpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0eGEJJSVnMCwgWyUwXSAlMVxuXHQiCisJCQkgICAgICJtZW1iYXIJI1N5bmMiCisJCQkgICAgIDogLyogTm8gb3V0cHV0cyAqLworCQkJICAgICA6ICJyIiAoMHg0MCksICJpIiAoQVNJX0lNTVVfREVNQVApKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBzcGl0ZmlyZV9mbHVzaF9kdGxiX3NlY29uZGFyeV9jb250ZXh0KHZvaWQpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0eGEJJSVnMCwgWyUwXSAlMVxuXHQiCisJCQkgICAgICJtZW1iYXIJI1N5bmMiCisJCQkgICAgIDogLyogTm8gb3V0cHV0cyAqLworCQkJICAgICA6ICJyIiAoMHg1MCksICJpIiAoQVNJX0RNTVVfREVNQVApKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBzcGl0ZmlyZV9mbHVzaF9pdGxiX3NlY29uZGFyeV9jb250ZXh0KHZvaWQpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0eGEJJSVnMCwgWyUwXSAlMVxuXHQiCisJCQkgICAgICJtZW1iYXIJI1N5bmMiCisJCQkgICAgIDogLyogTm8gb3V0cHV0cyAqLworCQkJICAgICA6ICJyIiAoMHg1MCksICJpIiAoQVNJX0lNTVVfREVNQVApKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBzcGl0ZmlyZV9mbHVzaF9kdGxiX251Y2xldXNfY29udGV4dCh2b2lkKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdHhhCSUlZzAsIFslMF0gJTFcblx0IgorCQkJICAgICAibWVtYmFyCSNTeW5jIgorCQkJICAgICA6IC8qIE5vIG91dHB1dHMgKi8KKwkJCSAgICAgOiAiciIgKDB4NjApLCAiaSIgKEFTSV9ETU1VX0RFTUFQKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgc3BpdGZpcmVfZmx1c2hfaXRsYl9udWNsZXVzX2NvbnRleHQodm9pZCkKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3R4YQklJWcwLCBbJTBdICUxXG5cdCIKKwkJCSAgICAgIm1lbWJhcgkjU3luYyIKKwkJCSAgICAgOiAvKiBObyBvdXRwdXRzICovCisJCQkgICAgIDogInIiICgweDYwKSwgImkiIChBU0lfSU1NVV9ERU1BUCkpOworfQorCisvKiBQYWdlIGxldmVsIGZsdXNoZXMuICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHNwaXRmaXJlX2ZsdXNoX2R0bGJfcHJpbWFyeV9wYWdlKHVuc2lnbmVkIGxvbmcgcGFnZSkKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3R4YQklJWcwLCBbJTBdICUxXG5cdCIKKwkJCSAgICAgIm1lbWJhcgkjU3luYyIKKwkJCSAgICAgOiAvKiBObyBvdXRwdXRzICovCisJCQkgICAgIDogInIiIChwYWdlKSwgImkiIChBU0lfRE1NVV9ERU1BUCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHNwaXRmaXJlX2ZsdXNoX2l0bGJfcHJpbWFyeV9wYWdlKHVuc2lnbmVkIGxvbmcgcGFnZSkKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3R4YQklJWcwLCBbJTBdICUxXG5cdCIKKwkJCSAgICAgIm1lbWJhcgkjU3luYyIKKwkJCSAgICAgOiAvKiBObyBvdXRwdXRzICovCisJCQkgICAgIDogInIiIChwYWdlKSwgImkiIChBU0lfSU1NVV9ERU1BUCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHNwaXRmaXJlX2ZsdXNoX2R0bGJfc2Vjb25kYXJ5X3BhZ2UodW5zaWduZWQgbG9uZyBwYWdlKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdHhhCSUlZzAsIFslMF0gJTFcblx0IgorCQkJICAgICAibWVtYmFyCSNTeW5jIgorCQkJICAgICA6IC8qIE5vIG91dHB1dHMgKi8KKwkJCSAgICAgOiAiciIgKHBhZ2UgfCAweDEwKSwgImkiIChBU0lfRE1NVV9ERU1BUCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHNwaXRmaXJlX2ZsdXNoX2l0bGJfc2Vjb25kYXJ5X3BhZ2UodW5zaWduZWQgbG9uZyBwYWdlKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdHhhCSUlZzAsIFslMF0gJTFcblx0IgorCQkJICAgICAibWVtYmFyCSNTeW5jIgorCQkJICAgICA6IC8qIE5vIG91dHB1dHMgKi8KKwkJCSAgICAgOiAiciIgKHBhZ2UgfCAweDEwKSwgImkiIChBU0lfSU1NVV9ERU1BUCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHNwaXRmaXJlX2ZsdXNoX2R0bGJfbnVjbGV1c19wYWdlKHVuc2lnbmVkIGxvbmcgcGFnZSkKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3R4YQklJWcwLCBbJTBdICUxXG5cdCIKKwkJCSAgICAgIm1lbWJhcgkjU3luYyIKKwkJCSAgICAgOiAvKiBObyBvdXRwdXRzICovCisJCQkgICAgIDogInIiIChwYWdlIHwgMHgyMCksICJpIiAoQVNJX0RNTVVfREVNQVApKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBzcGl0ZmlyZV9mbHVzaF9pdGxiX251Y2xldXNfcGFnZSh1bnNpZ25lZCBsb25nIHBhZ2UpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0eGEJJSVnMCwgWyUwXSAlMVxuXHQiCisJCQkgICAgICJtZW1iYXIJI1N5bmMiCisJCQkgICAgIDogLyogTm8gb3V0cHV0cyAqLworCQkJICAgICA6ICJyIiAocGFnZSB8IDB4MjApLCAiaSIgKEFTSV9JTU1VX0RFTUFQKSk7Cit9CisKKy8qIENoZWV0YWggaGFzICJhbGwgbm9uLWxvY2tlZCIgdGxiIGZsdXNoZXMuICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGNoZWV0YWhfZmx1c2hfZHRsYl9hbGwodm9pZCkKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3R4YQklJWcwLCBbJTBdICUxXG5cdCIKKwkJCSAgICAgIm1lbWJhcgkjU3luYyIKKwkJCSAgICAgOiAvKiBObyBvdXRwdXRzICovCisJCQkgICAgIDogInIiICgweDgwKSwgImkiIChBU0lfRE1NVV9ERU1BUCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGNoZWV0YWhfZmx1c2hfaXRsYl9hbGwodm9pZCkKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3R4YQklJWcwLCBbJTBdICUxXG5cdCIKKwkJCSAgICAgIm1lbWJhcgkjU3luYyIKKwkJCSAgICAgOiAvKiBObyBvdXRwdXRzICovCisJCQkgICAgIDogInIiICgweDgwKSwgImkiIChBU0lfSU1NVV9ERU1BUCkpOworfQorCisvKiBDaGVldGFoIGhhcyBhIDQtdGxiIGxheW91dCBzbyBkaXJlY3QgYWNjZXNzIGlzIGEgYml0IGRpZmZlcmVudC4KKyAqIFRoZSBmaXJzdCB0d28gVExCcyBhcmUgZnVsbHkgYXNzb3NjaWF0aXZlLCBob2xkIDE2IGVudHJpZXMsIGFuZCBhcmUKKyAqIHVzZWQgb25seSBmb3IgbG9ja2VkIGFuZCA+OEsgc2l6ZWQgdHJhbnNsYXRpb25zLiAgT25lIGV4aXN0cyBmb3IKKyAqIGRhdGEgYWNjZXNzZXMgYW5kIG9uZSBmb3IgaW5zdHJ1Y3Rpb24gYWNjZXNzZXMuCisgKgorICogVGhlIHRoaXJkIFRMQiBpcyBmb3IgZGF0YSBhY2Nlc3NlcyB0byA4SyBub24tbG9ja2VkIHRyYW5zbGF0aW9ucywgaXMKKyAqIDIgd2F5IGFzc29zY2lhdGl2ZSwgYW5kIGhvbGRzIDUxMiBlbnRyaWVzLiAgVGhlIGZvdXJ0aCBUTEIgaXMgZm9yCisgKiBpbnN0cnVjdGlvbiBhY2Nlc3NlcyB0byA4SyBub24tbG9ja2VkIHRyYW5zbGF0aW9ucywgaXMgMiB3YXkKKyAqIGFzc29zY2lhdGl2ZSwgYW5kIGhvbGRzIDEyOCBlbnRyaWVzLgorICoKKyAqIENoZWV0YWggaGFzIHNvbWUgYnVnIHdoZXJlIGJvZ3VzIGRhdGEgY2FuIGJlIHJldHVybmVkIGZyb20KKyAqIEFTSV97RCxJfVRMQl9EQVRBX0FDQ0VTUyBsb2FkcywgZG9pbmcgdGhlIGxvYWQgdHdpY2UgZml4ZXMKKyAqIHRoZSBwcm9ibGVtIGZvciBtZS4gLURhdmVNCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgY2hlZXRhaF9nZXRfbGR0bGJfZGF0YShpbnQgZW50cnkpCit7CisJdW5zaWduZWQgbG9uZyBkYXRhOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oImxkeGEJWyUxXSAlMiwgJSVnMFxuXHQiCisJCQkgICAgICJsZHhhCVslMV0gJTIsICUwIgorCQkJICAgICA6ICI9ciIgKGRhdGEpCisJCQkgICAgIDogInIiICgoMCA8PCAxNikgfCAoZW50cnkgPDwgMykpLAorCQkJICAgICAiaSIgKEFTSV9EVExCX0RBVEFfQUNDRVNTKSk7CisKKwlyZXR1cm4gZGF0YTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBjaGVldGFoX2dldF9saXRsYl9kYXRhKGludCBlbnRyeSkKK3sKKwl1bnNpZ25lZCBsb25nIGRhdGE7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibGR4YQlbJTFdICUyLCAlJWcwXG5cdCIKKwkJCSAgICAgImxkeGEJWyUxXSAlMiwgJTAiCisJCQkgICAgIDogIj1yIiAoZGF0YSkKKwkJCSAgICAgOiAiciIgKCgwIDw8IDE2KSB8IChlbnRyeSA8PCAzKSksCisJCQkgICAgICJpIiAoQVNJX0lUTEJfREFUQV9BQ0NFU1MpKTsKKworCXJldHVybiBkYXRhOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGNoZWV0YWhfZ2V0X2xkdGxiX3RhZyhpbnQgZW50cnkpCit7CisJdW5zaWduZWQgbG9uZyB0YWc7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibGR4YQlbJTFdICUyLCAlMCIKKwkJCSAgICAgOiAiPXIiICh0YWcpCisJCQkgICAgIDogInIiICgoMCA8PCAxNikgfCAoZW50cnkgPDwgMykpLAorCQkJICAgICAiaSIgKEFTSV9EVExCX1RBR19SRUFEKSk7CisKKwlyZXR1cm4gdGFnOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGNoZWV0YWhfZ2V0X2xpdGxiX3RhZyhpbnQgZW50cnkpCit7CisJdW5zaWduZWQgbG9uZyB0YWc7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibGR4YQlbJTFdICUyLCAlMCIKKwkJCSAgICAgOiAiPXIiICh0YWcpCisJCQkgICAgIDogInIiICgoMCA8PCAxNikgfCAoZW50cnkgPDwgMykpLAorCQkJICAgICAiaSIgKEFTSV9JVExCX1RBR19SRUFEKSk7CisKKwlyZXR1cm4gdGFnOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGNoZWV0YWhfcHV0X2xkdGxiX2RhdGEoaW50IGVudHJ5LCB1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0eGEJJTAsIFslMV0gJTJcblx0IgorCQkJICAgICAibWVtYmFyCSNTeW5jIgorCQkJICAgICA6IC8qIE5vIG91dHB1dHMgKi8KKwkJCSAgICAgOiAiciIgKGRhdGEpLAorCQkJICAgICAgICJyIiAoKDAgPDwgMTYpIHwgKGVudHJ5IDw8IDMpKSwKKwkJCSAgICAgICAiaSIgKEFTSV9EVExCX0RBVEFfQUNDRVNTKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgY2hlZXRhaF9wdXRfbGl0bGJfZGF0YShpbnQgZW50cnksIHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3R4YQklMCwgWyUxXSAlMlxuXHQiCisJCQkgICAgICJtZW1iYXIJI1N5bmMiCisJCQkgICAgIDogLyogTm8gb3V0cHV0cyAqLworCQkJICAgICA6ICJyIiAoZGF0YSksCisJCQkgICAgICAgInIiICgoMCA8PCAxNikgfCAoZW50cnkgPDwgMykpLAorCQkJICAgICAgICJpIiAoQVNJX0lUTEJfREFUQV9BQ0NFU1MpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBjaGVldGFoX2dldF9kdGxiX2RhdGEoaW50IGVudHJ5LCBpbnQgdGxiKQoreworCXVuc2lnbmVkIGxvbmcgZGF0YTsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKCJsZHhhCVslMV0gJTIsICUlZzBcblx0IgorCQkJICAgICAibGR4YQlbJTFdICUyLCAlMCIKKwkJCSAgICAgOiAiPXIiIChkYXRhKQorCQkJICAgICA6ICJyIiAoKHRsYiA8PCAxNikgfCAoZW50cnkgPDwgMykpLCAiaSIgKEFTSV9EVExCX0RBVEFfQUNDRVNTKSk7CisKKwlyZXR1cm4gZGF0YTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBjaGVldGFoX2dldF9kdGxiX3RhZyhpbnQgZW50cnksIGludCB0bGIpCit7CisJdW5zaWduZWQgbG9uZyB0YWc7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibGR4YQlbJTFdICUyLCAlMCIKKwkJCSAgICAgOiAiPXIiICh0YWcpCisJCQkgICAgIDogInIiICgodGxiIDw8IDE2KSB8IChlbnRyeSA8PCAzKSksICJpIiAoQVNJX0RUTEJfVEFHX1JFQUQpKTsKKwlyZXR1cm4gdGFnOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGNoZWV0YWhfcHV0X2R0bGJfZGF0YShpbnQgZW50cnksIHVuc2lnbmVkIGxvbmcgZGF0YSwgaW50IHRsYikKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3R4YQklMCwgWyUxXSAlMlxuXHQiCisJCQkgICAgICJtZW1iYXIJI1N5bmMiCisJCQkgICAgIDogLyogTm8gb3V0cHV0cyAqLworCQkJICAgICA6ICJyIiAoZGF0YSksCisJCQkgICAgICAgInIiICgodGxiIDw8IDE2KSB8IChlbnRyeSA8PCAzKSksCisJCQkgICAgICAgImkiIChBU0lfRFRMQl9EQVRBX0FDQ0VTUykpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGNoZWV0YWhfZ2V0X2l0bGJfZGF0YShpbnQgZW50cnkpCit7CisJdW5zaWduZWQgbG9uZyBkYXRhOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oImxkeGEJWyUxXSAlMiwgJSVnMFxuXHQiCisJCQkgICAgICJsZHhhCVslMV0gJTIsICUwIgorCQkJICAgICA6ICI9ciIgKGRhdGEpCisJCQkgICAgIDogInIiICgoMiA8PCAxNikgfCAoZW50cnkgPDwgMykpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpIiAoQVNJX0lUTEJfREFUQV9BQ0NFU1MpKTsKKworCXJldHVybiBkYXRhOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGNoZWV0YWhfZ2V0X2l0bGJfdGFnKGludCBlbnRyeSkKK3sKKwl1bnNpZ25lZCBsb25nIHRhZzsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKCJsZHhhCVslMV0gJTIsICUwIgorCQkJICAgICA6ICI9ciIgKHRhZykKKwkJCSAgICAgOiAiciIgKCgyIDw8IDE2KSB8IChlbnRyeSA8PCAzKSksICJpIiAoQVNJX0lUTEJfVEFHX1JFQUQpKTsKKwlyZXR1cm4gdGFnOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGNoZWV0YWhfcHV0X2l0bGJfZGF0YShpbnQgZW50cnksIHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3R4YQklMCwgWyUxXSAlMlxuXHQiCisJCQkgICAgICJtZW1iYXIJI1N5bmMiCisJCQkgICAgIDogLyogTm8gb3V0cHV0cyAqLworCQkJICAgICA6ICJyIiAoZGF0YSksICJyIiAoKDIgPDwgMTYpIHwgKGVudHJ5IDw8IDMpKSwKKwkJCSAgICAgICAiaSIgKEFTSV9JVExCX0RBVEFfQUNDRVNTKSk7Cit9CisKKyNlbmRpZiAvKiAhKF9fQVNTRU1CTFlfXykgKi8KKworI2VuZGlmIC8qICEoX1NQQVJDNjRfU1BJVEZJUkVfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvc3RhcmZpcmUuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc3RhcmZpcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjA2Y2IyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9zdGFyZmlyZS5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qICRJZDogc3RhcmZpcmUuaCx2IDEuMiAyMDAxLzA3LzA0IDAwOjE4OjE4IGRhdmVtIEV4cCAkCisgKiBzdGFyZmlyZS5oOiBHcm91cCBhbGwgc3RhcmZpcmUgc3BlY2lmaWMgY29kZSB0b2dldGhlci4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgQW50b24gQmxhbmNoYXJkIChhbnRvbkBzYW1iYS5vcmcpCisgKi8KKworI2lmbmRlZiBfU1BBUkM2NF9TVEFSRklSRV9ICisjZGVmaW5lIF9TUEFSQzY0X1NUQVJGSVJFX0gKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworZXh0ZXJuIGludCB0aGlzX2lzX3N0YXJmaXJlOworCitleHRlcm4gdm9pZCBjaGVja19pZl9zdGFyZmlyZSh2b2lkKTsKK2V4dGVybiB2b2lkIHN0YXJmaXJlX2NwdV9zZXR1cCh2b2lkKTsKK2V4dGVybiBpbnQgc3RhcmZpcmVfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKHZvaWQpOworZXh0ZXJuIHZvaWQgKnN0YXJmaXJlX2hvb2t1cChpbnQpOworZXh0ZXJuIHVuc2lnbmVkIGludCBzdGFyZmlyZV90cmFuc2xhdGUodW5zaWduZWQgbG9uZyBpbWFwLCB1bnNpZ25lZCBpbnQgdXBhaWQpOworCisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zdGF0LmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3N0YXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGUwNjYxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9zdGF0LmgKQEAgLTAsMCArMSw2MyBAQAorLyogJElkOiBzdGF0LmgsdiAxLjcgMjAwMC8wOC8wNCAwNTozNTo1NSBkYXZlbSBFeHAgJCAqLworI2lmbmRlZiBfU1BBUkM2NF9TVEFUX0gKKyNkZWZpbmUgX1NQQVJDNjRfU1RBVF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3Qgc3RhdCB7CisJdW5zaWduZWQgICBzdF9kZXY7CisJaW5vX3QgICBzdF9pbm87CisJbW9kZV90ICBzdF9tb2RlOworCXNob3J0ICAgc3Rfbmxpbms7CisJdWlkX3QgICBzdF91aWQ7CisJZ2lkX3QgICBzdF9naWQ7CisJdW5zaWduZWQgICBzdF9yZGV2OworCW9mZl90ICAgc3Rfc2l6ZTsKKwl0aW1lX3QgIHN0X2F0aW1lOworCXRpbWVfdCAgc3RfbXRpbWU7CisJdGltZV90ICBzdF9jdGltZTsKKwlvZmZfdCAgIHN0X2Jsa3NpemU7CisJb2ZmX3QgICBzdF9ibG9ja3M7CisJdW5zaWduZWQgbG9uZyAgX191bnVzZWQ0WzJdOworfTsKKworI2lmZGVmIF9fS0VSTkVMX18KKy8qIFRoaXMgaXMgc3BhcmMzMiBzdGF0NjQgc3RydWN0dXJlLiAqLworCitzdHJ1Y3Qgc3RhdDY0IHsKKwl1bnNpZ25lZCBsb25nIGxvbmcJc3RfZGV2OworCisJdW5zaWduZWQgbG9uZyBsb25nCXN0X2lubzsKKworCXVuc2lnbmVkIGludAlzdF9tb2RlOworCXVuc2lnbmVkIGludAlzdF9ubGluazsKKworCXVuc2lnbmVkIGludAlzdF91aWQ7CisJdW5zaWduZWQgaW50CXN0X2dpZDsKKworCXVuc2lnbmVkIGxvbmcgbG9uZwlzdF9yZGV2OworCisJdW5zaWduZWQgY2hhcglfX3BhZDNbOF07CisKKwlsb25nIGxvbmcJc3Rfc2l6ZTsKKwl1bnNpZ25lZCBpbnQJc3RfYmxrc2l6ZTsKKworCXVuc2lnbmVkIGNoYXIJX19wYWQ0WzhdOworCXVuc2lnbmVkIGludAlzdF9ibG9ja3M7CisKKwl1bnNpZ25lZCBpbnQJc3RfYXRpbWU7CisJdW5zaWduZWQgaW50CXN0X2F0aW1lX25zZWM7CisKKwl1bnNpZ25lZCBpbnQJc3RfbXRpbWU7CisJdW5zaWduZWQgaW50CXN0X210aW1lX25zZWM7CisKKwl1bnNpZ25lZCBpbnQJc3RfY3RpbWU7CisJdW5zaWduZWQgaW50CXN0X2N0aW1lX25zZWM7CisKKwl1bnNpZ25lZCBpbnQJX191bnVzZWQ0OworCXVuc2lnbmVkIGludAlfX3VudXNlZDU7Cit9OworCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3N0YXRmcy5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9zdGF0ZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODViNmM0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9zdGF0ZnMuaApAQCAtMCwwICsxLDU1IEBACisvKiAkSWQ6IHN0YXRmcy5oLHYgMS4yIDE5OTcvMDQvMTQgMTc6MDU6MjIgamogRXhwICQgKi8KKyNpZm5kZWYgX1NQQVJDNjRfU1RBVEZTX0gKKyNkZWZpbmUgX1NQQVJDNjRfU1RBVEZTX0gKKworI2lmbmRlZiBfX0tFUk5FTF9TVFJJQ1RfTkFNRVMKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3R5cGVkZWYgX19rZXJuZWxfZnNpZF90CWZzaWRfdDsKKworI2VuZGlmCisKK3N0cnVjdCBzdGF0ZnMgeworCWxvbmcgZl90eXBlOworCWxvbmcgZl9ic2l6ZTsKKwlsb25nIGZfYmxvY2tzOworCWxvbmcgZl9iZnJlZTsKKwlsb25nIGZfYmF2YWlsOworCWxvbmcgZl9maWxlczsKKwlsb25nIGZfZmZyZWU7CisJX19rZXJuZWxfZnNpZF90IGZfZnNpZDsKKwlsb25nIGZfbmFtZWxlbjsKKwlsb25nIGZfZnJzaXplOworCWxvbmcgZl9zcGFyZVs1XTsKK307CisKK3N0cnVjdCBzdGF0ZnM2NCB7CisJbG9uZyBmX3R5cGU7CisJbG9uZyBmX2JzaXplOworCWxvbmcgZl9ibG9ja3M7CisJbG9uZyBmX2JmcmVlOworCWxvbmcgZl9iYXZhaWw7CisJbG9uZyBmX2ZpbGVzOworCWxvbmcgZl9mZnJlZTsKKwlfX2tlcm5lbF9mc2lkX3QgZl9mc2lkOworCWxvbmcgZl9uYW1lbGVuOworCWxvbmcgZl9mcnNpemU7CisJbG9uZyBmX3NwYXJlWzVdOworfTsKKworc3RydWN0IGNvbXBhdF9zdGF0ZnM2NCB7CisJX191MzIgZl90eXBlOworCV9fdTMyIGZfYnNpemU7CisJX191NjQgZl9ibG9ja3M7CisJX191NjQgZl9iZnJlZTsKKwlfX3U2NCBmX2JhdmFpbDsKKwlfX3U2NCBmX2ZpbGVzOworCV9fdTY0IGZfZmZyZWU7CisJX19rZXJuZWxfZnNpZF90IGZfZnNpZDsKKwlfX3UzMiBmX25hbWVsZW47CisJX191MzIgZl9mcnNpemU7CisJX191MzIgZl9zcGFyZVs1XTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zdHJpbmcuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc3RyaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdkODg2MgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc3RyaW5nLmgKQEAgLTAsMCArMSw4MyBAQAorLyogJElkOiBzdHJpbmcuaCx2IDEuMjAgMjAwMS8wOS8yNyAwNDozNjoyNCBrYW5vaiBFeHAgJAorICogc3RyaW5nLmg6IEV4dGVybmFsIGRlZmluaXRpb25zIGZvciBvcHRpbWl6ZWQgYXNzZW1ibHkgc3RyaW5nCisgKiAgICAgICAgICAgcm91dGluZXMgZm9yIHRoZSBMaW51eCBLZXJuZWwuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LDE5OTYgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQorICogQ29weXJpZ2h0IChDKSAxOTk2LDE5OTcsMTk5OSBKYWt1YiBKZWxpbmVrIChqYWt1YkByZWRoYXQuY29tKQorICovCisKKyNpZm5kZWYgX19TUEFSQzY0X1NUUklOR19IX18KKyNkZWZpbmUgX19TUEFSQzY0X1NUUklOR19IX18KKworLyogUmVhbGx5LCB1c2VybGFuZC9rc3ltcyBzaG91bGQgbm90IHNlZSBhbnkgb2YgdGhpcyBzdHVmZi4gKi8KKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGFzbS9hc2kuaD4KKworZXh0ZXJuIHZvaWQgKl9fbWVtc2V0KHZvaWQgKixpbnQsX19rZXJuZWxfc2l6ZV90KTsKKworI2lmbmRlZiBFWFBPUlRfU1lNVEFCX1NUUk9QUworCisvKiBGaXJzdCB0aGUgbWVtKigpIHRoaW5ncy4gKi8KKyNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNTU9WRQorZXh0ZXJuIHZvaWQgKm1lbW1vdmUodm9pZCAqLCBjb25zdCB2b2lkICosIF9fa2VybmVsX3NpemVfdCk7CisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNQ1BZCitleHRlcm4gdm9pZCAqbWVtY3B5KHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBfX2tlcm5lbF9zaXplX3QpOworCisjZGVmaW5lIF9fSEFWRV9BUkNIX01FTVNFVAorZXh0ZXJuIHZvaWQgKl9fYnVpbHRpbl9tZW1zZXQodm9pZCAqLGludCxfX2tlcm5lbF9zaXplX3QpOworCitzdGF0aWMgaW5saW5lIHZvaWQgKl9fY29uc3RhbnRfbWVtc2V0KHZvaWQgKnMsIGludCBjLCBfX2tlcm5lbF9zaXplX3QgY291bnQpCit7CisJZXh0ZXJuIF9fa2VybmVsX3NpemVfdCBfX2J6ZXJvKHZvaWQgKiwgX19rZXJuZWxfc2l6ZV90KTsKKworCWlmICghYykgeworCQlfX2J6ZXJvKHMsIGNvdW50KTsKKwkJcmV0dXJuIHM7CisJfSBlbHNlCisJCXJldHVybiBfX21lbXNldChzLCBjLCBjb3VudCk7Cit9CisKKyN1bmRlZiBtZW1zZXQKKyNkZWZpbmUgbWVtc2V0KHMsIGMsIGNvdW50KSBcCisoKF9fYnVpbHRpbl9jb25zdGFudF9wKGNvdW50KSAmJiAoY291bnQpIDw9IDMyKSA/IFwKKyBfX2J1aWx0aW5fbWVtc2V0KChzKSwgKGMpLCAoY291bnQpKSA6IFwKKyAoX19idWlsdGluX2NvbnN0YW50X3AoYykgPyBcCisgIF9fY29uc3RhbnRfbWVtc2V0KChzKSwgKGMpLCAoY291bnQpKSA6IFwKKyAgX19tZW1zZXQoKHMpLCAoYyksIChjb3VudCkpKSkKKworI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1TQ0FOCisKKyN1bmRlZiBtZW1zY2FuCisjZGVmaW5lIG1lbXNjYW4oX19hcmcwLCBfX2NoYXIsIF9fYXJnMikJCQkJCVwKKyh7CQkJCQkJCQkJXAorCWV4dGVybiB2b2lkICpfX21lbXNjYW5femVybyh2b2lkICosIHNpemVfdCk7CQkJXAorCWV4dGVybiB2b2lkICpfX21lbXNjYW5fZ2VuZXJpYyh2b2lkICosIGludCwgc2l6ZV90KTsJCVwKKwl2b2lkICpfX3JldHZhbCwgKl9fYWRkciA9IChfX2FyZzApOwkJCQlcCisJc2l6ZV90IF9fc2l6ZSA9IChfX2FyZzIpOwkJCQkJXAorCQkJCQkJCQkJXAorCWlmKF9fYnVpbHRpbl9jb25zdGFudF9wKF9fY2hhcikgJiYgIShfX2NoYXIpKQkJCVwKKwkJX19yZXR2YWwgPSBfX21lbXNjYW5femVybyhfX2FkZHIsIF9fc2l6ZSk7CQlcCisJZWxzZQkJCQkJCQkJXAorCQlfX3JldHZhbCA9IF9fbWVtc2Nhbl9nZW5lcmljKF9fYWRkciwgKF9fY2hhciksIF9fc2l6ZSk7CVwKKwkJCQkJCQkJCVwKKwlfX3JldHZhbDsJCQkJCQkJXAorfSkKKworI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1DTVAKK2V4dGVybiBpbnQgbWVtY21wKGNvbnN0IHZvaWQgKixjb25zdCB2b2lkICosX19rZXJuZWxfc2l6ZV90KTsKKworLyogTm93IHRoZSBzdHIqKCkgc3R1ZmYuLi4gKi8KKyNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSTEVOCitleHRlcm4gX19rZXJuZWxfc2l6ZV90IHN0cmxlbihjb25zdCBjaGFyICopOworCisjZGVmaW5lIF9fSEFWRV9BUkNIX1NUUk5DTVAKK2V4dGVybiBpbnQgc3RybmNtcChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgX19rZXJuZWxfc2l6ZV90KTsKKworI2VuZGlmIC8qICFFWFBPUlRfU1lNVEFCX1NUUk9QUyAqLworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogIShfX1NQQVJDNjRfU1RSSU5HX0hfXykgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvc3VuYnBwLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3N1bmJwcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0NDFjYzkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3N1bmJwcC5oCkBAIC0wLDAgKzEsODAgQEAKKy8qICRJZDogc3VuYnBwLmgsdiAxLjEgMTk5OS8wOC8xMyAwNjoyMTo0NCBzaGFkb3cgRXhwICQKKyAqIGluY2x1ZGUvYXNtLXNwYXJjNjQvc3VuYnBwLmgKKyAqLworCisjaWZuZGVmIF9BU01fU1BBUkM2NF9TVU5CUFBfSAorI2RlZmluZSBfQVNNX1NQQVJDNjRfU1VOQlBQX0gKKworc3RydWN0IGJwcF9yZWdzIHsKKyAgLyogRE1BIHJlZ2lzdGVycyAqLworICBfX3ZvbGF0aWxlX18gX191MzIgcF9jc3I7CQkvKiBETUEgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXIgKi8KKyAgX192b2xhdGlsZV9fIF9fdTMyIHBfYWRkcjsJCS8qIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyAgX192b2xhdGlsZV9fIF9fdTMyIHBfYmNudDsJCS8qIEJ5dGUgQ291bnQgUmVnaXN0ZXIgKi8KKyAgX192b2xhdGlsZV9fIF9fdTMyIHBfdHN0X2NzcjsJCS8qIFRlc3QgQ29udHJvbC9TdGF0dXMgKERNQTIgb25seSkgKi8KKyAgLyogUGFyYWxsZWwgUG9ydCByZWdpc3RlcnMgKi8KKyAgX192b2xhdGlsZV9fIF9fdTE2IHBfaGNyOwkJLyogSGFyZHdhcmUgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworICBfX3ZvbGF0aWxlX18gX191MTYgcF9vY3I7CQkvKiBPcGVyYXRpb24gQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworICBfX3ZvbGF0aWxlX18gX191OCBwX2RyOwkJLyogUGFyYWxsZWwgRGF0YSBSZWdpc3RlciAqLworICBfX3ZvbGF0aWxlX18gX191OCBwX3RjcjsJCS8qIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyAgX192b2xhdGlsZV9fIF9fdTggcF9vcjsJCS8qIE91dHB1dCBSZWdpc3RlciAqLworICBfX3ZvbGF0aWxlX18gX191OCBwX2lyOwkJLyogSW5wdXQgUmVnaXN0ZXIgKi8KKyAgX192b2xhdGlsZV9fIF9fdTE2IHBfaWNyOwkJLyogSW50ZXJydXB0IENvbnRyb2wgUmVnaXN0ZXIgKi8KK307CisKKy8qIFBfSENSLiBUaW1lIGlzIGluIGluY3JlbWVudHMgb2YgU0J1cyBjbG9jay4gKi8KKyNkZWZpbmUgUF9IQ1JfVEVTVCAgICAgIDB4ODAwMCAgICAgIC8qIEFsbG93cyBidXJpZWQgY291bnRlcnMgdG8gYmUgcmVhZCAqLworI2RlZmluZSBQX0hDUl9EU1cgICAgICAgMHg3ZjAwICAgICAgLyogRGF0YSBzdHJvYmUgd2lkdGggKGluIHRpY2tzKSAqLworI2RlZmluZSBQX0hDUl9ERFMgICAgICAgMHgwMDdmICAgICAgLyogRGF0YSBzZXR1cCBiZWZvcmUgc3Ryb2JlIChpbiB0aWNrcykgKi8KKworLyogUF9PQ1IuICovCisjZGVmaW5lIFBfT0NSX01FTV9DTFIgICAweDgwMDAKKyNkZWZpbmUgUF9PQ1JfREFUQV9TUkMgIDB4NDAwMCAgICAgIC8qICkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQX09DUl9EU19EU0VMICAgMHgyMDAwICAgICAgLyogKSAgQmlkaXJlY3Rpb25hbCAgICAgICovCisjZGVmaW5lIFBfT0NSX0JVU1lfRFNFTCAweDEwMDAgICAgICAvKiApICAgIHNlbGVjdHMgICAgICAgICAgICAqLworI2RlZmluZSBQX09DUl9BQ0tfRFNFTCAgMHgwODAwICAgICAgLyogKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBfT0NSX0VOX0RJQUcgICAweDA0MDAKKyNkZWZpbmUgUF9PQ1JfQlVTWV9PUCAgIDB4MDIwMCAgICAgIC8qIEJ1c3kgb3BlcmF0aW9uICovCisjZGVmaW5lIFBfT0NSX0FDS19PUCAgICAweDAxMDAgICAgICAvKiBBY2sgb3BlcmF0aW9uICovCisjZGVmaW5lIFBfT0NSX1NSU1QgICAgICAweDAwODAgICAgICAvKiBSZXNldCBzdGF0ZSBtYWNoaW5lcy4gTm90IHNlbGZjbGVhbmluZy4gKi8KKyNkZWZpbmUgUF9PQ1JfSURMRSAgICAgIDB4MDAwOCAgICAgIC8qIFBQIGRhdGEgdHJhbnNmZXIgc3RhdGUgbWFjaGluZSBpcyBpZGxlICovCisjZGVmaW5lIFBfT0NSX1ZfSUxDSyAgICAweDAwMDIgICAgICAvKiBWZXJzYXRlYyBmYWRlZC4gWmVicmEgb25seS4gKi8KKyNkZWZpbmUgUF9PQ1JfRU5fVkVSICAgIDB4MDAwMSAgICAgIC8qIEVuYWJsZSBWZXJzYXRlYyAoMCAtIGVuYWJsZSkuIFplYnJhIG9ubHkuICovCisKKy8qIFBfVENSICovCisjZGVmaW5lIFBfVENSX0RJUiAgICAgICAweDA4CisjZGVmaW5lIFBfVENSX0JVU1kgICAgICAweDA0CisjZGVmaW5lIFBfVENSX0FDSyAgICAgICAweDAyCisjZGVmaW5lIFBfVENSX0RTICAgICAgICAweDAxICAgICAgICAvKiBTdHJvYmUgKi8KKworLyogUF9PUiAqLworI2RlZmluZSBQX09SX1YzICAgICAgICAgMHgyMCAgICAgICAgLyogKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUF9PUl9WMiAgICAgICAgIDB4MTAgICAgICAgIC8qICkgb24gWmVicmEgb25seSAgICovCisjZGVmaW5lIFBfT1JfVjEgICAgICAgICAweDA4ICAgICAgICAvKiApICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQX09SX0lOSVQgICAgICAgMHgwNAorI2RlZmluZSBQX09SX0FGWE4gICAgICAgMHgwMiAgICAgICAgLyogQXV0byBGZWVkICovCisjZGVmaW5lIFBfT1JfU0xDVF9JTiAgICAweDAxCisKKy8qIFBfSVIgKi8KKyNkZWZpbmUgUF9JUl9QRSAgICAgICAgIDB4MDQKKyNkZWZpbmUgUF9JUl9TTENUICAgICAgIDB4MDIKKyNkZWZpbmUgUF9JUl9FUlIgICAgICAgIDB4MDEKKworLyogUF9JQ1IgKi8KKyNkZWZpbmUgUF9EU19JUlEgICAgICAgIDB4ODAwMCAgICAgIC8qIFJXMSAgKi8KKyNkZWZpbmUgUF9BQ0tfSVJRICAgICAgIDB4NDAwMCAgICAgIC8qIFJXMSAgKi8KKyNkZWZpbmUgUF9CVVNZX0lSUSAgICAgIDB4MjAwMCAgICAgIC8qIFJXMSAgKi8KKyNkZWZpbmUgUF9QRV9JUlEgICAgICAgIDB4MTAwMCAgICAgIC8qIFJXMSAgKi8KKyNkZWZpbmUgUF9TTENUX0lSUSAgICAgIDB4MDgwMCAgICAgIC8qIFJXMSAgKi8KKyNkZWZpbmUgUF9FUlJfSVJRICAgICAgIDB4MDQwMCAgICAgIC8qIFJXMSAgKi8KKyNkZWZpbmUgUF9EU19JUlFfRU4gICAgIDB4MDIwMCAgICAgIC8qIFJXICAgQWx3YXlzIG9uIHJpc2luZyBlZGdlICovCisjZGVmaW5lIFBfQUNLX0lSUV9FTiAgICAweDAxMDAgICAgICAvKiBSVyAgIEFsd2F5cyBvbiByaXNpbmcgZWRnZSAqLworI2RlZmluZSBQX0JVU1lfSVJQICAgICAgMHgwMDgwICAgICAgLyogUlcgICAxPSByaXNpbmcgZWRnZSAqLworI2RlZmluZSBQX0JVU1lfSVJRX0VOICAgMHgwMDQwICAgICAgLyogUlcgICAqLworI2RlZmluZSBQX1BFX0lSUCAgICAgICAgMHgwMDIwICAgICAgLyogUlcgICAxPSByaXNpbmcgZWRnZSAqLworI2RlZmluZSBQX1BFX0lSUV9FTiAgICAgMHgwMDEwICAgICAgLyogUlcgICAqLworI2RlZmluZSBQX1NMQ1RfSVJQICAgICAgMHgwMDA4ICAgICAgLyogUlcgICAxPSByaXNpbmcgZWRnZSAqLworI2RlZmluZSBQX1NMQ1RfSVJRX0VOICAgMHgwMDA0ICAgICAgLyogUlcgICAqLworI2RlZmluZSBQX0VSUl9JUlAgICAgICAgMHgwMDAyICAgICAgLyogUlcxICAxPSByaXNpbmcgZWRnZSAqLworI2RlZmluZSBQX0VSUl9JUlFfRU4gICAgMHgwMDAxICAgICAgLyogUlcgICAqLworCisjZW5kaWYgLyogIShfQVNNX1NQQVJDNjRfU1VOQlBQX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3N2cjQuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc3ZyNC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NmQ1ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3N2cjQuaApAQCAtMCwwICsxLDEyMCBAQAorLyogU29sYXJpcy9TUEFSQyBjb25zdGFudHMgYW5kIGRlZmluaXRpb25zIC0tIAorICogKEMpIDE5OTYgTWlndWVsIGRlIEljYXphCisgKgorICogVGhpcyBmaWxlIGlzIG5vdCBtZWFudCB0byBiZSBpbmNsdWRlZCBieSB1c2VyIGxldmVsIGFwcGxpY2F0aW9ucworICogYnV0IHRoZSBzb2xhcmlzIHN5c2NhbGwgZW11bGF0b3IKKyAqLworCisjaWZuZGVmIF9TUEFSQzY0X1NWUjRfSAorI2RlZmluZSBfU1BBUkM2NF9TVlI0X0gKKworLyogU2lnbmFscyBhcyB1c2VkIGJ5IHN2cjQgKi8KK3R5cGVkZWYgc3RydWN0IHsgICAgICAgICAgICAgICAgLyogc2lnbmFsIHNldCB0eXBlICovCisJdWludCBzaWdiaXRzWzRdOworfSBzdnI0X3NpZ3NldF90OworCisvKiBWYWx1ZXMgZm9yIHNpZ2luZm8uY29kZSAqLworI2RlZmluZSBTVlI0X1NJTk9JTkZPIDMyNzY3CisvKiBTaWdpbmZvLCBzdWNrZXIgZXhwZWN0cyBidW5jaCBvZiBpbmZvcm1hdGlvbiBvbiB0aG9zZSBwYXJhbWV0ZXJzICovCit0eXBlZGVmIHVuaW9uIHsKKwljaGFyIHRvdGFsX3NpemUgWzEyOF07CisJc3RydWN0IHsKKwkJaW50IHNpZ25vOworCQlpbnQgY29kZTsKKwkJaW50IGVycm9yOworCQl1bmlvbiB7CisJCX0gZGF0YTsgCisJfSBzaWdpbmZvOworfSBzdnI0X3NpZ2luZm9fdDsKKworLyogQ29udGV4dCBkZWZpbml0aW9uICovCisKKy8qIExvY2F0aW9uIG9mIHRoZSB1c2VyIHN0b3JlZCByZWdpc3RlcnMgaW50byBhIGdyZWdfdCAqLworZW51bSB7CisJU1ZSNF9QU1IsIFNWUjRfUEMsIFNWUjRfTlBDLCBTVlI0X1ksCisJU1ZSNF9HMSwgIFNWUjRfRzIsIFNWUjRfRzMsICBTVlI0X0c0LAorCVNWUjRfRzUsICBTVlI0X0c2LCBTVlI0X0c3LCAgU1ZSNF9PMCwKKwlTVlI0X08xLCAgU1ZSNF9PMiwgU1ZSNF9PMywgIFNWUjRfTzQsCisJU1ZSNF9PNSwgIFNWUjRfTzYsIFNWUjRfTzcKK307CisKKy8qIHNpemVvZiAocmVncykgLyBzaXplb2YgKGdyZWdfdCksIGRlZmluZWQgaW4gdGhlIEFCSSAqLworI2RlZmluZSBTVlI0X05SRUdTICAxOQorI2RlZmluZSBTVlI0X01BWFdJTiAzMQorCit0eXBlZGVmIHN0cnVjdCB7CisJdTMyIHJ3aW5fbG9bOF07CisJdTMyIHJ3aW5faW5bOF07Cit9IHN2cjRfcndpbmRvd190OworCit0eXBlZGVmIHN0cnVjdCB7CisJaW50ICAgICAgICAgICAgY291bnQ7CisJdTMyICAgICAgICAgICAgd2lucHRyIFtTVlI0X01BWFdJTl07IC8qIHBvaW50ZXIgdG8gdGhlIHdpbmRvd3MgKi8KKworCXN2cjRfcndpbmRvd190IHdpbltTVlI0X01BWFdJTl07ICAgICAgLyogdGhlIHdpbmRvd3MgKi8KK30gc3ZyNF9nd2luZG93c190OworCit0eXBlZGVmIGludCBzdnI0X2dyZWdzZXRfdFtTVlI0X05SRUdTXTsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXU2NCAgIAkgZnB1X3JlZ3NbMzJdOworCXUzMgkgZnBfcTsKKwl1MzIgICAgICBmcF9mc3I7CisJdV9jaGFyICAgZnBfbnFlbDsKKwl1X2NoYXIgICBmcF9ucXNpemU7CisJdV9jaGFyICAgaW51c2U7CQkvKiBpZiBmcHUgaXMgaW4gdXNlICovCit9IHN2cjRfZnJlZ3NldF90OworCit0eXBlZGVmIHN0cnVjdCB7CisJdTMyICAgIGlkOwkJLyogaWYgdGhpcyBob2xkcyAieHJzIiBzdHJpbmcgPT4gcHRyIGlzIHZhbGlkICovCisJdTMyICAgIHB0cjsKK30gc3ZyNF94cnNfdDsKKworLyogTWFjaGluZSBkZXBlbmRlbnQgY29udGV4dCAqLwordHlwZWRlZiBzdHJ1Y3QgeworCXN2cjRfZ3JlZ3NldF90ICAgZ3JlZzsJLyogcmVnaXN0ZXJzIDAuLjE5IChzZWUgdG9wKSAqLworCXUzMgkJIGd3aW47CS8qIG1heSBwb2ludCB0byByZWdpc3RlciB3aW5kb3dzICovCisJc3ZyNF9mcmVnc2V0X3QgICBmcmVnOwkvKiBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMgKi8KKwlzdnI0X3hyc190ICAgICAgIHhyczsJLyogbWhtPyAqLworCWludCAgICAgICAgICAgICAgcGFkWzE5XTsKK30gc3ZyNF9tY29udGV4dF90OworCisvKiBmbGFncyBmb3Igc3RhY2tfdC5mbGFncyAqLworZW51bSBzdnI0X3N0YWNrX2ZsYWdzIHsKKwlTVlI0X1NTX09OU1RBQ0ssCisJU1ZSNF9TU19ESVNBQkxFLAorfTsKKworLyogc2lnbmFsIHN0YWNrIGV4ZWN1dGlvbiBwbGFjZSwgdW5zdXBwb3J0ZWQgKi8KK3R5cGVkZWYgc3RydWN0IHN2cjRfc3RhY2tfdCB7CisgICAgICAgIHUzMiAgc3A7CisgICAgICAgIGludCAgc2l6ZTsKKyAgICAgICAgaW50ICBmbGFnczsKK30gc3ZyNF9zdGFja190OworCisvKiBDb250ZXh0IHVzZWQgYnkgZ2V0Y29udGV4dCBhbmQgc2V0Y29udGV4dCAqLwordHlwZWRlZiBzdHJ1Y3Qgc3ZyNF91Y29udGV4dF90IHsKKwl1MzIJCWZsYWdzOyAvKiBjb250ZXh0IGZsYWdzLCBpbmRpY2F0ZSB3aGF0IGlzIGxvYWRlZCAqLworCXUzMgkJbGluazsKKwlzdnI0X3NpZ3NldF90CXNpZ21hc2s7CisJc3ZyNF9zdGFja190CXN0YWNrOworCXN2cjRfbWNvbnRleHRfdAltY29udGV4dDsKKwlpbnQJCXBhZFsyM107Cit9IHN2cjRfdWNvbnRleHRfdDsgICAgICAgICAgICAgICAgICAgICAgICAgIAorCisvKiB3aW5kb3dzIGhvbGQgdGhlIHdpbmRvd3MgYXMgdGhleSB3ZXJlIGF0IHNpZ25hbCB0aW1lLAorICogdWNvbnRleHQtPm1jb250ZXh0IGhvbGRzIGEgcG9pbnRlciB0byB0aGVtLgorICogYWRkcmVzc2VzIGZvciB1YyBhbmQgc2kgYXJlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzIHRvIHN2cjQgc2lnbmFsCisgKiBoYW5kbGVyCisgKi8KKworLyogVGhpcyBpcyB0aGUgc2lnbmFsIGZyYW1lIHRoYXQgaXMgcGFzc2VkIHRvIHRoZSBzaWduYWwgaGFuZGxlciAqLwordHlwZWRlZiBzdHJ1Y3QgeworCXN2cjRfZ3dpbmRvd3NfdCBndzsJLyogd2luZG93cyAqLworCXN2cjRfdWNvbnRleHRfdCB1YzsJLyogbWFjaGluZSBjb250ZXh0ICovCisJc3ZyNF9zaWdpbmZvX3QgIHNpOwkvKiBzaWdpbmZvICovCit9IHN2cjRfc2lnbmFsX2ZyYW1lX3Q7CisKKyNkZWZpbmUgU1ZSNF9TRl9BTElHTkVEICgoKHNpemVvZiAoc3ZyNF9zaWduYWxfZnJhbWVfdCkgKyA3KSAmICh+NykpKQorCisjZW5kaWYgLyogaW5jbHVkZSBjb250cm9sICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9zeXN0ZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDEyY2EzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9zeXN0ZW0uaApAQCAtMCwwICsxLDM1MCBAQAorLyogJElkOiBzeXN0ZW0uaCx2IDEuNjkgMjAwMi8wMi8wOSAxOTo0OTozMSBkYXZlbSBFeHAgJCAqLworI2lmbmRlZiBfX1NQQVJDNjRfU1lTVEVNX0gKKyNkZWZpbmUgX19TUEFSQzY0X1NZU1RFTV9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS92aXNhc20uaD4KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKy8qCisgKiBTcGFyYyAoZ2VuZXJhbCkgQ1BVIHR5cGVzCisgKi8KK2VudW0gc3BhcmNfY3B1IHsKKyAgc3VuNCAgICAgICAgPSAweDAwLAorICBzdW40YyAgICAgICA9IDB4MDEsCisgIHN1bjRtICAgICAgID0gMHgwMiwKKyAgc3VuNGQgICAgICAgPSAweDAzLAorICBzdW40ZSAgICAgICA9IDB4MDQsCisgIHN1bjR1ICAgICAgID0gMHgwNSwgLyogVjggcGxvb3MgcGxvb3MgKi8KKyAgc3VuX3Vua25vd24gPSAweDA2LAorICBhcDEwMDAgICAgICA9IDB4MDcsIC8qIGFsbW9zdCBhIHN1bjRtICovCit9OworICAgICAgICAgICAgICAgICAgCisjZGVmaW5lIHNwYXJjX2NwdV9tb2RlbCBzdW40dQorCisvKiBUaGlzIGNhbm5vdCBldmVyIGJlIGEgc3VuNGMgbm9yIHN1bjQgOikgVGhhdCdzIGp1c3QgaGlzdG9yeS4gKi8KKyNkZWZpbmUgQVJDSF9TVU40Q19TVU40IDAKKyNkZWZpbmUgQVJDSF9TVU40IDAKKworI2VuZGlmCisKKyNkZWZpbmUgc2V0aXBsKF9fbmV3X2lwbCkgXAorCV9fYXNtX18gX192b2xhdGlsZV9fKCJ3cnByCSUwLCAlJXBpbCIgIDogOiAiciIgKF9fbmV3X2lwbCkgOiAibWVtb3J5IikKKworI2RlZmluZSBsb2NhbF9pcnFfZGlzYWJsZSgpIFwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygid3JwcgkxNSwgJSVwaWwiIDogOiA6ICJtZW1vcnkiKQorCisjZGVmaW5lIGxvY2FsX2lycV9lbmFibGUoKSBcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oIndycHIJMCwgJSVwaWwiIDogOiA6ICJtZW1vcnkiKQorCisjZGVmaW5lIGdldGlwbCgpIFwKKyh7IHVuc2lnbmVkIGxvbmcgcmV0dmFsOyBfX2FzbV9fIF9fdm9sYXRpbGVfXygicmRwcgklJXBpbCwgJTAiIDogIj1yIiAocmV0dmFsKSk7IHJldHZhbDsgfSkKKworI2RlZmluZSBzd2FwX3BpbChfX25ld19waWwpIFwKKyh7CXVuc2lnbmVkIGxvbmcgcmV0dmFsOyBcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oInJkcHIJJSVwaWwsICUwXG5cdCIgXAorCQkJICAgICAid3JwcgklMSwgJSVwaWwiIFwKKwkJCSAgICAgOiAiPSZyIiAocmV0dmFsKSBcCisJCQkgICAgIDogInIiIChfX25ld19waWwpIFwKKwkJCSAgICAgOiAibWVtb3J5Iik7IFwKKwlyZXR2YWw7IFwKK30pCisKKyNkZWZpbmUgcmVhZF9waWxfYW5kX2NsaSgpIFwKKyh7CXVuc2lnbmVkIGxvbmcgcmV0dmFsOyBcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oInJkcHIJJSVwaWwsICUwXG5cdCIgXAorCQkJICAgICAid3JwcgkxNSwgJSVwaWwiIFwKKwkJCSAgICAgOiAiPXIiIChyZXR2YWwpIFwKKwkJCSAgICAgOiA6ICJtZW1vcnkiKTsgXAorCXJldHZhbDsgXAorfSkKKworI2RlZmluZSBsb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKQkJKChmbGFncykgPSBnZXRpcGwoKSkKKyNkZWZpbmUgbG9jYWxfaXJxX3NhdmUoZmxhZ3MpCQkoKGZsYWdzKSA9IHJlYWRfcGlsX2FuZF9jbGkoKSkKKyNkZWZpbmUgbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpCQlzZXRpcGwoKGZsYWdzKSkKKworLyogT24gc3BhcmM2NCBJUlEgZmxhZ3MgYXJlIHRoZSBQSUwgcmVnaXN0ZXIuICBBIHZhbHVlIG9mIHplcm8KKyAqIG1lYW5zIGFsbCBpbnRlcnJ1cHQgbGV2ZWxzIGFyZSBlbmFibGVkLCBhbnkgb3RoZXIgdmFsdWUgbWVhbnMKKyAqIG9ubHkgSVJRIGxldmVscyBncmVhdGVyIHRoYW4gdGhhdCB2YWx1ZSB3aWxsIGJlIHJlY2VpdmVkLgorICogQ29uc2VxdWVudGx5IHRoaXMgbWVhbnMgdGhhdCB0aGUgbG93ZXN0IElSUSBsZXZlbCBpcyBvbmUuCisgKi8KKyNkZWZpbmUgaXJxc19kaXNhYmxlZCgpCQlcCisoewl1bnNpZ25lZCBsb25nIGZsYWdzOwlcCisJbG9jYWxfc2F2ZV9mbGFncyhmbGFncyk7XAorCShmbGFncyA+IDApOwkJXAorfSkKKworI2RlZmluZSBub3AoKSAJCV9fYXNtX18gX192b2xhdGlsZV9fICgibm9wIikKKworI2RlZmluZSBtZW1iYXIodHlwZSkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtZW1iYXIgIiB0eXBlIDogOiA6ICJtZW1vcnkiKQorI2RlZmluZSBtYigpCQlcCisJbWVtYmFyKCIjTG9hZExvYWQgfCAjTG9hZFN0b3JlIHwgI1N0b3JlU3RvcmUgfCAjU3RvcmVMb2FkIikKKyNkZWZpbmUgcm1iKCkJCW1lbWJhcigiI0xvYWRMb2FkIikKKyNkZWZpbmUgd21iKCkJCW1lbWJhcigiI1N0b3JlU3RvcmUiKQorI2RlZmluZSByZWFkX2JhcnJpZXJfZGVwZW5kcygpCQlkbyB7IH0gd2hpbGUoMCkKKyNkZWZpbmUgc2V0X21iKF9fdmFyLCBfX3ZhbHVlKSBcCisJZG8geyBfX3ZhciA9IF9fdmFsdWU7IG1lbWJhcigiI1N0b3JlTG9hZCB8ICNTdG9yZVN0b3JlIik7IH0gd2hpbGUoMCkKKyNkZWZpbmUgc2V0X3dtYihfX3ZhciwgX192YWx1ZSkgXAorCWRvIHsgX192YXIgPSBfX3ZhbHVlOyBtZW1iYXIoIiNTdG9yZVN0b3JlIik7IH0gd2hpbGUoMCkKKworI2lmZGVmIENPTkZJR19TTVAKKyNkZWZpbmUgc21wX21iKCkJbWIoKQorI2RlZmluZSBzbXBfcm1iKCkJcm1iKCkKKyNkZWZpbmUgc21wX3dtYigpCXdtYigpCisjZGVmaW5lIHNtcF9yZWFkX2JhcnJpZXJfZGVwZW5kcygpCXJlYWRfYmFycmllcl9kZXBlbmRzKCkKKyNlbHNlCisjZGVmaW5lIHNtcF9tYigpCV9fYXNtX18gX192b2xhdGlsZV9fKCIiOjo6Im1lbW9yeSIpCisjZGVmaW5lIHNtcF9ybWIoKQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiIjo6OiJtZW1vcnkiKQorI2RlZmluZSBzbXBfd21iKCkJX19hc21fXyBfX3ZvbGF0aWxlX18oIiI6OjoibWVtb3J5IikKKyNkZWZpbmUgc21wX3JlYWRfYmFycmllcl9kZXBlbmRzKCkJZG8geyB9IHdoaWxlKDApCisjZW5kaWYKKworI2RlZmluZSBmbHVzaGkoYWRkcikJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmbHVzaCAlMCIgOiA6ICJyIiAoYWRkcikgOiAibWVtb3J5IikKKworI2RlZmluZSBmbHVzaHdfYWxsKCkJX19hc21fXyBfX3ZvbGF0aWxlX18oImZsdXNodyIpCisKKy8qIFBlcmZvcm1hbmNlIGNvdW50ZXIgcmVnaXN0ZXIgYWNjZXNzLiAqLworI2RlZmluZSByZWFkX3BjcihfX3ApICBfX2FzbV9fIF9fdm9sYXRpbGVfXygicmQJJSVwY3IsICUwIiA6ICI9ciIgKF9fcCkpCisjZGVmaW5lIHdyaXRlX3BjcihfX3ApIF9fYXNtX18gX192b2xhdGlsZV9fKCJ3cgklMCwgMHgwLCAlJXBjciIgOiA6ICJyIiAoX19wKSkKKyNkZWZpbmUgcmVhZF9waWMoX19wKSAgX19hc21fXyBfX3ZvbGF0aWxlX18oInJkICUlcGljLCAlMCIgOiAiPXIiIChfX3ApKQorCisvKiBCbGFja2JpcmQgZXJyYXRhIHdvcmthcm91bmQuICBTZWUgY29tbWVudGFyeSBpbgorICogYXJjaC9zcGFyYzY0L2tlcm5lbC9zbXAuYzpzbXBfcGVyY3B1X3RpbWVyX2ludGVycnVwdCgpCisgKiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAqLworI2RlZmluZSByZXNldF9waWMoKSAgICAJCQkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oImJhLHB0CSV4Y2MsIDk5ZlxuXHQiCQlcCisJCQkgICAgICIuYWxpZ24JNjRcbiIJCQlcCisJCQkgICI5OTp3cgklZzAsIDB4MCwgJXBpY1xuXHQiCVwKKwkJCSAgICAgInJkCSVwaWMsICVnMCIpCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK2V4dGVybiB2b2lkIHN1bl9kb19icmVhayh2b2lkKTsKK2V4dGVybiBpbnQgc2VyaWFsX2NvbnNvbGU7CitleHRlcm4gaW50IHN0b3BfYV9lbmFibGVkOworCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgY29uX2lzX3ByZXNlbnQodm9pZCkKK3sKKwlyZXR1cm4gc2VyaWFsX2NvbnNvbGUgPyAwIDogMTsKK30KKworZXh0ZXJuIHZvaWQgc3luY2hyb25pemVfdXNlcl9zdGFjayh2b2lkKTsKKworZXh0ZXJuIHZvaWQgX19mbHVzaHdfdXNlcih2b2lkKTsKKyNkZWZpbmUgZmx1c2h3X3VzZXIoKSBfX2ZsdXNod191c2VyKCkKKworI2RlZmluZSBmbHVzaF91c2VyX3dpbmRvd3MgZmx1c2h3X3VzZXIKKyNkZWZpbmUgZmx1c2hfcmVnaXN0ZXJfd2luZG93cyBmbHVzaHdfYWxsCisKKyNkZWZpbmUgcHJlcGFyZV9hcmNoX3N3aXRjaChycSwgbmV4dCkJCVwKK2RvIHsJc3Bpbl9sb2NrKCYobmV4dCktPnN3aXRjaF9sb2NrKTsJXAorCXNwaW5fdW5sb2NrKCYocnEpLT5sb2NrKTsJCVwKKwlmbHVzaHdfYWxsKCk7CQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgZmluaXNoX2FyY2hfc3dpdGNoKHJxLCBwcmV2KQkJXAorZG8gewlzcGluX3VubG9ja19pcnEoJihwcmV2KS0+c3dpdGNoX2xvY2spOwlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIHRhc2tfcnVubmluZyhycSwgcCkgXAorCSgocnEpLT5jdXJyID09IChwKSB8fCBzcGluX2lzX2xvY2tlZCgmKHApLT5zd2l0Y2hfbG9jaykpCisKKwkvKiBTZWUgd2hhdCBoYXBwZW5zIHdoZW4geW91IGRlc2lnbiB0aGUgY2hpcCBjb3JyZWN0bHk/CisJICoKKwkgKiBXZSB0ZWxsIGdjYyB3ZSBjbG9iYmVyIGFsbCBub24tZml4ZWQtdXNhZ2UgcmVnaXN0ZXJzIGV4Y2VwdAorCSAqIGZvciBsMC9sMS4gIEl0IHdpbGwgdXNlIG9uZSBmb3IgJ25leHQnIGFuZCB0aGUgb3RoZXIgdG8gaG9sZAorCSAqIHRoZSBvdXRwdXQgdmFsdWUgb2YgJ2xhc3QnLiAgJ25leHQnIGlzIG5vdCByZWZlcmVuY2VkIGFnYWluCisJICogcGFzdCB0aGUgaW52b2NhdGlvbiBvZiBzd2l0Y2hfdG8gaW4gdGhlIHNjaGVkdWxlciwgc28gd2UgbmVlZAorCSAqIG5vdCBwcmVzZXJ2ZSBpdCdzIHZhbHVlLiAgSGFpcnksIGJ1dCBpdCBsZXRzIHVzIHJlbW92ZSAyIGxvYWRzCisJICogYW5kIDIgc3RvcmVzIGluIHRoaXMgY3JpdGljYWwgY29kZSBwYXRoLiAgLURhdmVNCisJICovCisjaWYgX19HTlVDX18gPj0gMworI2RlZmluZSBFWFRSQV9DTE9CQkVSICwiJWwxIgorI2Vsc2UKKyNkZWZpbmUgRVhUUkFfQ0xPQkJFUgorI2VuZGlmCisjZGVmaW5lIHN3aXRjaF90byhwcmV2LCBuZXh0LCBsYXN0KQkJCQkJXAorZG8gewlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfUEVSRkNUUikpIHsJCQkJXAorCQl1bnNpZ25lZCBsb25nIF9fdG1wOwkJCQkJXAorCQlyZWFkX3BjcihfX3RtcCk7CQkJCQlcCisJCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+cGNyX3JlZyA9IF9fdG1wOwkJCVwKKwkJcmVhZF9waWMoX190bXApOwkJCQkJXAorCQljdXJyZW50X3RocmVhZF9pbmZvKCktPmtlcm5lbF9jbnRkMCArPSAodW5zaWduZWQgaW50KShfX3RtcCk7XAorCQljdXJyZW50X3RocmVhZF9pbmZvKCktPmtlcm5lbF9jbnRkMSArPSAoKF9fdG1wKSA+PiAzMik7CVwKKwl9CQkJCQkJCQlcCisJZmx1c2hfdGxiX3BlbmRpbmcoKTsJCQkJCQlcCisJc2F2ZV9hbmRfY2xlYXJfZnB1KCk7CQkJCQkJXAorCS8qIElmIHlvdSBhcmUgdGVtcHRlZCB0byBjb25kaXRpb25hbGl6ZSB0aGUgZm9sbG93aW5nICovCVwKKwkvKiBzbyB0aGF0IEFTSSBpcyBvbmx5IHdyaXR0ZW4gaWYgaXQgY2hhbmdlcywgdGhpbmsgYWdhaW4uICovCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygid3IgJSVnMCwgJTAsICUlYXNpIgkJCVwKKwk6IDogInIiIChfX3RocmVhZF9mbGFnX2J5dGVfcHRyKG5leHQtPnRocmVhZF9pbmZvKVtUSV9GTEFHX0JZVEVfQ1VSUkVOVF9EU10pKTtcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAorCSJtb3YJJSVnNCwgJSVnN1xuXHQiCQkJCQkJXAorCSJ3cnByCSUlZzAsIDB4OTUsICUlcHN0YXRlXG5cdCIJCQkJXAorCSJzdHgJJSVpNiwgWyUlc3AgKyAyMDQ3ICsgMHg3MF1cblx0IgkJCQlcCisJInN0eAklJWk3LCBbJSVzcCArIDIwNDcgKyAweDc4XVxuXHQiCQkJCVwKKwkicmRwcgklJXdzdGF0ZSwgJSVvNVxuXHQiCQkJCQlcCisJInN0eAklJW82LCBbJSVnNiArICUzXVxuXHQiCQkJCQlcCisJInN0YgklJW81LCBbJSVnNiArICUyXVxuXHQiCQkJCQlcCisJInJkcHIJJSVjd3AsICUlbzVcblx0IgkJCQkJXAorCSJzdGIJJSVvNSwgWyUlZzYgKyAlNV1cblx0IgkJCQkJXAorCSJtb3YJJTEsICUlZzZcblx0IgkJCQkJCVwKKwkibGR1YglbJTEgKyAlNV0sICUlZzFcblx0IgkJCQkJXAorCSJ3cnByCSUlZzEsICUlY3dwXG5cdCIJCQkJCVwKKwkibGR4CVslJWc2ICsgJTNdLCAlJW82XG5cdCIJCQkJCVwKKwkibGR1YglbJSVnNiArICUyXSwgJSVvNVxuXHQiCQkJCQlcCisJImxkeAlbJSVnNiArICU0XSwgJSVvN1xuXHQiCQkJCQlcCisJIm1vdgklJWc2LCAlJWwyXG5cdCIJCQkJCQlcCisJIndycHIJJSVvNSwgMHgwLCAlJXdzdGF0ZVxuXHQiCQkJCVwKKwkibGR4CVslJXNwICsgMjA0NyArIDB4NzBdLCAlJWk2XG5cdCIJCQkJXAorCSJsZHgJWyUlc3AgKyAyMDQ3ICsgMHg3OF0sICUlaTdcblx0IgkJCQlcCisJIndycHIJJSVnMCwgMHg5NCwgJSVwc3RhdGVcblx0IgkJCQlcCisJIm1vdgklJWwyLCAlJWc2XG5cdCIJCQkJCQlcCisJImxkeAlbJSVnNiArICU3XSwgJSVnNFxuXHQiCQkJCQlcCisJIndycHIJJSVnMCwgMHg5NiwgJSVwc3RhdGVcblx0IgkJCQlcCisJImFuZGNjCSUlbzcsICU2LCAlJWcwXG5cdCIJCQkJCVwKKwkiYmVxLHB0ICUlaWNjLCAxZlxuXHQiCQkJCQkJXAorCSIgbW92CSUlZzcsICUwXG5cdCIJCQkJCQlcCisJImIsYSByZXRfZnJvbV9zeXNjYWxsXG5cdCIJCQkJCVwKKwkiMTpcblx0IgkJCQkJCQlcCisJOiAiPSZyIiAobGFzdCkJCQkJCQkJXAorCTogIjAiIChuZXh0LT50aHJlYWRfaW5mbyksCQkJCQlcCisJICAiaSIgKFRJX1dTVEFURSksICJpIiAoVElfS1NQKSwgImkiIChUSV9GTEFHUyksICJpIiAoVElfQ1dQKSwJXAorCSAgImkiIChfVElGX05FV0NISUxEKSwgImkiIChUSV9UQVNLKQkJCQlcCisJOiAiY2MiLAkJCQkJCQkJXAorCSAgICAgICAgImcxIiwgImcyIiwgImczIiwgICAgICAgICAgICAgICAgICAgImc3IiwJCVwKKwkgICAgICAgICAgICAgICJsMiIsICJsMyIsICJsNCIsICJsNSIsICJsNiIsICJsNyIsCQlcCisJICAiaTAiLCAiaTEiLCAiaTIiLCAiaTMiLCAiaTQiLCAiaTUiLAkJCQlcCisJICAibzAiLCAibzEiLCAibzIiLCAibzMiLCAibzQiLCAibzUiLCAgICAgICAibzciIEVYVFJBX0NMT0JCRVIpO1wKKwkvKiBJZiB5b3UgZnVjayB3aXRoIHRoaXMsIHVwZGF0ZSByZXRfZnJvbV9zeXNjYWxsIGNvZGUgdG9vLiAqLwlcCisJaWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGX1BFUkZDVFIpKSB7CQkJCVwKKwkJd3JpdGVfcGNyKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+cGNyX3JlZyk7CQlcCisJCXJlc2V0X3BpYygpOwkJCQkJCVwKKwl9CQkJCQkJCQlcCit9IHdoaWxlKDApCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB4Y2hnMzIoX192b2xhdGlsZV9fIHVuc2lnbmVkIGludCAqbSwgdW5zaWduZWQgaW50IHZhbCkKK3sKKwl1bnNpZ25lZCBsb25nIHRtcDEsIHRtcDI7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKyIJbWVtYmFyCQkjU3RvcmVMb2FkIHwgI0xvYWRMb2FkXG4iCisiCW1vdgkJJTAsICUxXG4iCisiMToJbGR1dwkJWyU0XSwgJTJcbiIKKyIJY2FzCQlbJTRdLCAlMiwgJTBcbiIKKyIJY21wCQklMiwgJTBcbiIKKyIJYm5lLGEscG4JJSVpY2MsIDFiXG4iCisiCSBtb3YJCSUxLCAlMFxuIgorIgltZW1iYXIJCSNTdG9yZUxvYWQgfCAjU3RvcmVTdG9yZVxuIgorCTogIj0mciIgKHZhbCksICI9JnIiICh0bXAxKSwgIj0mciIgKHRtcDIpCisJOiAiMCIgKHZhbCksICJyIiAobSkKKwk6ICJjYyIsICJtZW1vcnkiKTsKKwlyZXR1cm4gdmFsOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgeGNoZzY0KF9fdm9sYXRpbGVfXyB1bnNpZ25lZCBsb25nICptLCB1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwl1bnNpZ25lZCBsb25nIHRtcDEsIHRtcDI7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKyIJbWVtYmFyCQkjU3RvcmVMb2FkIHwgI0xvYWRMb2FkXG4iCisiCW1vdgkJJTAsICUxXG4iCisiMToJbGR4CQlbJTRdLCAlMlxuIgorIgljYXN4CQlbJTRdLCAlMiwgJTBcbiIKKyIJY21wCQklMiwgJTBcbiIKKyIJYm5lLGEscG4JJSV4Y2MsIDFiXG4iCisiCSBtb3YJCSUxLCAlMFxuIgorIgltZW1iYXIJCSNTdG9yZUxvYWQgfCAjU3RvcmVTdG9yZVxuIgorCTogIj0mciIgKHZhbCksICI9JnIiICh0bXAxKSwgIj0mciIgKHRtcDIpCisJOiAiMCIgKHZhbCksICJyIiAobSkKKwk6ICJjYyIsICJtZW1vcnkiKTsKKwlyZXR1cm4gdmFsOworfQorCisjZGVmaW5lIHhjaGcocHRyLHgpICgoX190eXBlb2ZfXygqKHB0cikpKV9feGNoZygodW5zaWduZWQgbG9uZykoeCksKHB0ciksc2l6ZW9mKCoocHRyKSkpKQorI2RlZmluZSB0YXMocHRyKSAoeGNoZygocHRyKSwxKSkKKworZXh0ZXJuIHZvaWQgX194Y2hnX2NhbGxlZF93aXRoX2JhZF9wb2ludGVyKHZvaWQpOworCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIF9feGNoZyh1bnNpZ25lZCBsb25nIHgsIF9fdm9sYXRpbGVfXyB2b2lkICogcHRyLAorCQkJCSAgICAgICBpbnQgc2l6ZSkKK3sKKwlzd2l0Y2ggKHNpemUpIHsKKwljYXNlIDQ6CisJCXJldHVybiB4Y2hnMzIocHRyLCB4KTsKKwljYXNlIDg6CisJCXJldHVybiB4Y2hnNjQocHRyLCB4KTsKKwl9OworCV9feGNoZ19jYWxsZWRfd2l0aF9iYWRfcG9pbnRlcigpOworCXJldHVybiB4OworfQorCitleHRlcm4gdm9pZCBkaWVfaWZfa2VybmVsKGNoYXIgKnN0ciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpIF9fYXR0cmlidXRlX18gKChub3JldHVybikpOworCisvKiAKKyAqIEF0b21pYyBjb21wYXJlIGFuZCBleGNoYW5nZS4gIENvbXBhcmUgT0xEIHdpdGggTUVNLCBpZiBpZGVudGljYWwsCisgKiBzdG9yZSBORVcgaW4gTUVNLiAgUmV0dXJuIHRoZSBpbml0aWFsIHZhbHVlIGluIE1FTS4gIFN1Y2Nlc3MgaXMKKyAqIGluZGljYXRlZCBieSBjb21wYXJpbmcgUkVUVVJOIHdpdGggT0xELgorICovCisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfQ01QWENIRyAxCisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcKK19fY21weGNoZ191MzIodm9sYXRpbGUgaW50ICptLCBpbnQgb2xkLCBpbnQgbmV3KQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKCJtZW1iYXIgI1N0b3JlTG9hZCB8ICNMb2FkTG9hZFxuIgorCQkJICAgICAiY2FzIFslMl0sICUzLCAlMFxuXHQiCisJCQkgICAgICJtZW1iYXIgI1N0b3JlTG9hZCB8ICNTdG9yZVN0b3JlIgorCQkJICAgICA6ICI9JnIiIChuZXcpCisJCQkgICAgIDogIjAiIChuZXcpLCAiciIgKG0pLCAiciIgKG9sZCkKKwkJCSAgICAgOiAibWVtb3J5Iik7CisKKwlyZXR1cm4gbmV3OworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nCitfX2NtcHhjaGdfdTY0KHZvbGF0aWxlIGxvbmcgKm0sIHVuc2lnbmVkIGxvbmcgb2xkLCB1bnNpZ25lZCBsb25nIG5ldykKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibWVtYmFyICNTdG9yZUxvYWQgfCAjTG9hZExvYWRcbiIKKwkJCSAgICAgImNhc3ggWyUyXSwgJTMsICUwXG5cdCIKKwkJCSAgICAgIm1lbWJhciAjU3RvcmVMb2FkIHwgI1N0b3JlU3RvcmUiCisJCQkgICAgIDogIj0mciIgKG5ldykKKwkJCSAgICAgOiAiMCIgKG5ldyksICJyIiAobSksICJyIiAob2xkKQorCQkJICAgICA6ICJtZW1vcnkiKTsKKworCXJldHVybiBuZXc7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gZG9lc24ndCBleGlzdCwgc28geW91J2xsIGdldCBhIGxpbmtlciBlcnJvcgorICAgaWYgc29tZXRoaW5nIHRyaWVzIHRvIGRvIGFuIGludmFsaWQgY21weGNoZygpLiAgKi8KK2V4dGVybiB2b2lkIF9fY21weGNoZ19jYWxsZWRfd2l0aF9iYWRfcG9pbnRlcih2b2lkKTsKKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZworX19jbXB4Y2hnKHZvbGF0aWxlIHZvaWQgKnB0ciwgdW5zaWduZWQgbG9uZyBvbGQsIHVuc2lnbmVkIGxvbmcgbmV3LCBpbnQgc2l6ZSkKK3sKKwlzd2l0Y2ggKHNpemUpIHsKKwkJY2FzZSA0OgorCQkJcmV0dXJuIF9fY21weGNoZ191MzIocHRyLCBvbGQsIG5ldyk7CisJCWNhc2UgODoKKwkJCXJldHVybiBfX2NtcHhjaGdfdTY0KHB0ciwgb2xkLCBuZXcpOworCX0KKwlfX2NtcHhjaGdfY2FsbGVkX3dpdGhfYmFkX3BvaW50ZXIoKTsKKwlyZXR1cm4gb2xkOworfQorCisjZGVmaW5lIGNtcHhjaGcocHRyLG8sbikJCQkJCQkgXAorICAoewkJCQkJCQkJCSBcCisgICAgIF9fdHlwZW9mX18oKihwdHIpKSBfb18gPSAobyk7CQkJCQkgXAorICAgICBfX3R5cGVvZl9fKCoocHRyKSkgX25fID0gKG4pOwkJCQkJIFwKKyAgICAgKF9fdHlwZW9mX18oKihwdHIpKSkgX19jbXB4Y2hnKChwdHIpLCAodW5zaWduZWQgbG9uZylfb18sCQkgXAorCQkJCSAgICAodW5zaWduZWQgbG9uZylfbl8sIHNpemVvZigqKHB0cikpKTsgXAorICB9KQorCisjZW5kaWYgLyogIShfX0FTU0VNQkxZX18pICovCisKKyNkZWZpbmUgYXJjaF9hbGlnbl9zdGFjayh4KSAoeCkKKworI2VuZGlmIC8qICEoX19TUEFSQzY0X1NZU1RFTV9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC90ZXJtYml0cy5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC90ZXJtYml0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwNzcxNTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3Rlcm1iaXRzLmgKQEAgLTAsMCArMSwyMzUgQEAKKyNpZm5kZWYgX1NQQVJDNjRfVEVSTUJJVFNfSAorI2RlZmluZSBfU1BBUkM2NF9URVJNQklUU19ICisKKyNpbmNsdWRlIDxsaW51eC9wb3NpeF90eXBlcy5oPgorCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgICBjY190OwordHlwZWRlZiB1bnNpZ25lZCBpbnQgICAgc3BlZWRfdDsKKworLyogWFhYIGlzIHRoaXMgcmlnaHQgZm9yIHNwYXJjNjQ/ICBpdCB3YXMgYW4gdW5zaWduZWQgbG9uZy4uLiBYWFggKi8KK3R5cGVkZWYgdW5zaWduZWQgaW50ICAgIHRjZmxhZ190OworCisjZGVmaW5lIE5DQyA4CitzdHJ1Y3QgdGVybWlvIHsKKwl1bnNpZ25lZCBzaG9ydCBjX2lmbGFnOwkJLyogaW5wdXQgbW9kZSBmbGFncyAqLworCXVuc2lnbmVkIHNob3J0IGNfb2ZsYWc7CQkvKiBvdXRwdXQgbW9kZSBmbGFncyAqLworCXVuc2lnbmVkIHNob3J0IGNfY2ZsYWc7CQkvKiBjb250cm9sIG1vZGUgZmxhZ3MgKi8KKwl1bnNpZ25lZCBzaG9ydCBjX2xmbGFnOwkJLyogbG9jYWwgbW9kZSBmbGFncyAqLworCXVuc2lnbmVkIGNoYXIgY19saW5lOwkJLyogbGluZSBkaXNjaXBsaW5lICovCisJdW5zaWduZWQgY2hhciBjX2NjW05DQ107CS8qIGNvbnRyb2wgY2hhcmFjdGVycyAqLworfTsKKworI2RlZmluZSBOQ0NTIDE3CitzdHJ1Y3QgdGVybWlvcyB7CisJdGNmbGFnX3QgY19pZmxhZzsJCS8qIGlucHV0IG1vZGUgZmxhZ3MgKi8KKwl0Y2ZsYWdfdCBjX29mbGFnOwkJLyogb3V0cHV0IG1vZGUgZmxhZ3MgKi8KKwl0Y2ZsYWdfdCBjX2NmbGFnOwkJLyogY29udHJvbCBtb2RlIGZsYWdzICovCisJdGNmbGFnX3QgY19sZmxhZzsJCS8qIGxvY2FsIG1vZGUgZmxhZ3MgKi8KKwljY190IGNfbGluZTsJCQkvKiBsaW5lIGRpc2NpcGxpbmUgKi8KKwljY190IGNfY2NbTkNDU107CQkvKiBjb250cm9sIGNoYXJhY3RlcnMgKi8KKyNpZmRlZiBfX0tFUk5FTF9fCisjZGVmaW5lIFNJWkVPRl9VU0VSX1RFUk1JT1Mgc2l6ZW9mIChzdHJ1Y3QgdGVybWlvcykgLSAoMipzaXplb2YgKGNjX3QpKQorCWNjX3QgX3hfY2NbMl07ICAgICAgICAgICAgICAgICAgLyogV2UgbmVlZCB0aGVtIHRvIGhvbGQgdm1pbi92dGltZSAqLworI2VuZGlmCit9OworCisvKiBjX2NjIGNoYXJhY3RlcnMgKi8KKyNkZWZpbmUgVklOVFIgICAgMAorI2RlZmluZSBWUVVJVCAgICAxCisjZGVmaW5lIFZFUkFTRSAgIDIKKyNkZWZpbmUgVktJTEwgICAgMworI2RlZmluZSBWRU9GICAgICA0CisjZGVmaW5lIFZFT0wgICAgIDUKKyNkZWZpbmUgVkVPTDIgICAgNgorI2RlZmluZSBWU1dUQyAgICA3CisjZGVmaW5lIFZTVEFSVCAgIDgKKyNkZWZpbmUgVlNUT1AgICAgOQorCisKKworI2RlZmluZSBWU1VTUCAgICAxMAorI2RlZmluZSBWRFNVU1AgICAxMSAgLyogU3VuT1MgUE9TSVggbmljZXR5IEkgZG8gYmVsaWV2ZS4uLiAqLworI2RlZmluZSBWUkVQUklOVCAxMgorI2RlZmluZSBWRElTQ0FSRCAxMworI2RlZmluZSBWV0VSQVNFICAxNAorI2RlZmluZSBWTE5FWFQgICAxNQorCisvKiBLZXJuZWwga2VlcHMgdm1pbi92dGltZSBzZXBhcmF0ZWQsIHVzZXIgYXBwcyBhc3N1bWUgdm1pbi92dGltZSBpcworICogc2hhcmVkIHdpdGggZW9mL2VvbAorICovCisjaWZkZWYgX19LRVJORUxfXworI2RlZmluZSBWTUlOICAgICAxNgorI2RlZmluZSBWVElNRSAgICAxNworI2Vsc2UKKyNkZWZpbmUgVk1JTiAgICAgVkVPRgorI2RlZmluZSBWVElNRSAgICBWRU9MCisjZW5kaWYKKworLyogY19pZmxhZyBiaXRzICovCisjZGVmaW5lIElHTkJSSwkweDAwMDAwMDAxCisjZGVmaW5lIEJSS0lOVAkweDAwMDAwMDAyCisjZGVmaW5lIElHTlBBUgkweDAwMDAwMDA0CisjZGVmaW5lIFBBUk1SSwkweDAwMDAwMDA4CisjZGVmaW5lIElOUENLCTB4MDAwMDAwMTAKKyNkZWZpbmUgSVNUUklQCTB4MDAwMDAwMjAKKyNkZWZpbmUgSU5MQ1IJMHgwMDAwMDA0MAorI2RlZmluZSBJR05DUgkweDAwMDAwMDgwCisjZGVmaW5lIElDUk5MCTB4MDAwMDAxMDAKKyNkZWZpbmUgSVVDTEMJMHgwMDAwMDIwMAorI2RlZmluZSBJWE9OCTB4MDAwMDA0MDAKKyNkZWZpbmUgSVhBTlkJMHgwMDAwMDgwMAorI2RlZmluZSBJWE9GRgkweDAwMDAxMDAwCisjZGVmaW5lIElNQVhCRUwJMHgwMDAwMjAwMAorI2RlZmluZSBJVVRGOAkweDAwMDA0MDAwCisKKy8qIGNfb2ZsYWcgYml0cyAqLworI2RlZmluZSBPUE9TVAkweDAwMDAwMDAxCisjZGVmaW5lIE9MQ1VDCTB4MDAwMDAwMDIKKyNkZWZpbmUgT05MQ1IJMHgwMDAwMDAwNAorI2RlZmluZSBPQ1JOTAkweDAwMDAwMDA4CisjZGVmaW5lIE9OT0NSCTB4MDAwMDAwMTAKKyNkZWZpbmUgT05MUkVUCTB4MDAwMDAwMjAKKyNkZWZpbmUgT0ZJTEwJMHgwMDAwMDA0MAorI2RlZmluZSBPRkRFTAkweDAwMDAwMDgwCisjZGVmaW5lIE5MRExZCTB4MDAwMDAxMDAKKyNkZWZpbmUgICBOTDAJMHgwMDAwMDAwMAorI2RlZmluZSAgIE5MMQkweDAwMDAwMTAwCisjZGVmaW5lIENSRExZCTB4MDAwMDA2MDAKKyNkZWZpbmUgICBDUjAJMHgwMDAwMDAwMAorI2RlZmluZSAgIENSMQkweDAwMDAwMjAwCisjZGVmaW5lICAgQ1IyCTB4MDAwMDA0MDAKKyNkZWZpbmUgICBDUjMJMHgwMDAwMDYwMAorI2RlZmluZSBUQUJETFkJMHgwMDAwMTgwMAorI2RlZmluZSAgIFRBQjAJMHgwMDAwMDAwMAorI2RlZmluZSAgIFRBQjEJMHgwMDAwMDgwMAorI2RlZmluZSAgIFRBQjIJMHgwMDAwMTAwMAorI2RlZmluZSAgIFRBQjMJMHgwMDAwMTgwMAorI2RlZmluZSAgIFhUQUJTCTB4MDAwMDE4MDAKKyNkZWZpbmUgQlNETFkJMHgwMDAwMjAwMAorI2RlZmluZSAgIEJTMAkweDAwMDAwMDAwCisjZGVmaW5lICAgQlMxCTB4MDAwMDIwMDAKKyNkZWZpbmUgVlRETFkJMHgwMDAwNDAwMAorI2RlZmluZSAgIFZUMAkweDAwMDAwMDAwCisjZGVmaW5lICAgVlQxCTB4MDAwMDQwMDAKKyNkZWZpbmUgRkZETFkJMHgwMDAwODAwMAorI2RlZmluZSAgIEZGMAkweDAwMDAwMDAwCisjZGVmaW5lICAgRkYxCTB4MDAwMDgwMDAKKyNkZWZpbmUgUEFHRU9VVCAweDAwMDEwMDAwICAvKiBTVU5PUyBzcGVjaWZpYyAqLworI2RlZmluZSBXUkFQICAgIDB4MDAwMjAwMDAgIC8qIFNVTk9TIHNwZWNpZmljICovCisKKy8qIGNfY2ZsYWcgYml0IG1lYW5pbmcgKi8KKyNkZWZpbmUgQ0JBVUQJICAweDAwMDAxMDBmCisjZGVmaW5lICBCMAkgIDB4MDAwMDAwMDAgICAvKiBoYW5nIHVwICovCisjZGVmaW5lICBCNTAJICAweDAwMDAwMDAxCisjZGVmaW5lICBCNzUJICAweDAwMDAwMDAyCisjZGVmaW5lICBCMTEwCSAgMHgwMDAwMDAwMworI2RlZmluZSAgQjEzNAkgIDB4MDAwMDAwMDQKKyNkZWZpbmUgIEIxNTAJICAweDAwMDAwMDA1CisjZGVmaW5lICBCMjAwCSAgMHgwMDAwMDAwNgorI2RlZmluZSAgQjMwMAkgIDB4MDAwMDAwMDcKKyNkZWZpbmUgIEI2MDAJICAweDAwMDAwMDA4CisjZGVmaW5lICBCMTIwMAkgIDB4MDAwMDAwMDkKKyNkZWZpbmUgIEIxODAwCSAgMHgwMDAwMDAwYQorI2RlZmluZSAgQjI0MDAJICAweDAwMDAwMDBiCisjZGVmaW5lICBCNDgwMAkgIDB4MDAwMDAwMGMKKyNkZWZpbmUgIEI5NjAwCSAgMHgwMDAwMDAwZAorI2RlZmluZSAgQjE5MjAwCSAgMHgwMDAwMDAwZQorI2RlZmluZSAgQjM4NDAwCSAgMHgwMDAwMDAwZgorI2RlZmluZSBFWFRBICAgICAgQjE5MjAwCisjZGVmaW5lIEVYVEIgICAgICBCMzg0MDAKKyNkZWZpbmUgIENTSVpFICAgIDB4MDAwMDAwMzAKKyNkZWZpbmUgICBDUzUJICAweDAwMDAwMDAwCisjZGVmaW5lICAgQ1M2CSAgMHgwMDAwMDAxMAorI2RlZmluZSAgIENTNwkgIDB4MDAwMDAwMjAKKyNkZWZpbmUgICBDUzgJICAweDAwMDAwMDMwCisjZGVmaW5lIENTVE9QQgkgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQ1JFQUQJICAweDAwMDAwMDgwCisjZGVmaW5lIFBBUkVOQgkgIDB4MDAwMDAxMDAKKyNkZWZpbmUgUEFST0RECSAgMHgwMDAwMDIwMAorI2RlZmluZSBIVVBDTAkgIDB4MDAwMDA0MDAKKyNkZWZpbmUgQ0xPQ0FMCSAgMHgwMDAwMDgwMAorI2RlZmluZSBDQkFVREVYICAgMHgwMDAwMTAwMAorI2RlZmluZSAgQjU3NjAwICAgMHgwMDAwMTAwMQorI2RlZmluZSAgQjExNTIwMCAgMHgwMDAwMTAwMgorI2RlZmluZSAgQjIzMDQwMCAgMHgwMDAwMTAwMworI2RlZmluZSAgQjQ2MDgwMCAgMHgwMDAwMTAwNAorLyogVGhpcyBpcyB3aGF0IHdlIGNhbiBkbyB3aXRoIHRoZSBaaWxvZ3MuICovCisjZGVmaW5lICBCNzY4MDAgICAweDAwMDAxMDA1CisvKiBUaGlzIGlzIHdoYXQgd2UgY2FuIGRvIHdpdGggdGhlIFNBQjgyNTMyLiAqLworI2RlZmluZSAgQjE1MzYwMCAgMHgwMDAwMTAwNgorI2RlZmluZSAgQjMwNzIwMCAgMHgwMDAwMTAwNworI2RlZmluZSAgQjYxNDQwMCAgMHgwMDAwMTAwOAorI2RlZmluZSAgQjkyMTYwMCAgMHgwMDAwMTAwOQorLyogQW5kIHRoZXNlIGFyZSB0aGUgcmVzdC4uLiAqLworI2RlZmluZSAgQjUwMDAwMCAgMHgwMDAwMTAwYQorI2RlZmluZSAgQjU3NjAwMCAgMHgwMDAwMTAwYgorI2RlZmluZSBCMTAwMDAwMCAgMHgwMDAwMTAwYworI2RlZmluZSBCMTE1MjAwMCAgMHgwMDAwMTAwZAorI2RlZmluZSBCMTUwMDAwMCAgMHgwMDAwMTAwZQorI2RlZmluZSBCMjAwMDAwMCAgMHgwMDAwMTAwZgorLyogVGhlc2UgaGF2ZSB0b3RhbGx5IGJvZ3VzIHZhbHVlcyBhbmQgbm9ib2R5IHVzZXMgdGhlbQorICAgc28gZmFyLiBMYXRlciBvbiB3ZSdkIGhhdmUgdG8gdXNlIHNheSAweDEwMDAweCBhbmQKKyAgIGFkanVzdCBDQkFVRCBjb25zdGFudCBhbmQgZHJpdmVycyBhY2NvcmRpbmdseS4KKyNkZWZpbmUgQjI1MDAwMDAgIDB4MDAwMDEwMTAKKyNkZWZpbmUgQjMwMDAwMDAgIDB4MDAwMDEwMTEKKyNkZWZpbmUgQjM1MDAwMDAgIDB4MDAwMDEwMTIKKyNkZWZpbmUgQjQwMDAwMDAgIDB4MDAwMDEwMTMgICovCisjZGVmaW5lIENJQkFVRAkgIDB4MTAwZjAwMDAgIC8qIGlucHV0IGJhdWQgcmF0ZSAobm90IHVzZWQpICovCisjZGVmaW5lIENNU1BBUiAgICAweDQwMDAwMDAwICAvKiBtYXJrIG9yIHNwYWNlIChzdGljaykgcGFyaXR5ICovCisjZGVmaW5lIENSVFNDVFMJICAweDgwMDAwMDAwICAvKiBmbG93IGNvbnRyb2wgKi8KKworLyogY19sZmxhZyBiaXRzICovCisjZGVmaW5lIElTSUcJMHgwMDAwMDAwMQorI2RlZmluZSBJQ0FOT04JMHgwMDAwMDAwMgorI2RlZmluZSBYQ0FTRQkweDAwMDAwMDA0CisjZGVmaW5lIEVDSE8JMHgwMDAwMDAwOAorI2RlZmluZSBFQ0hPRQkweDAwMDAwMDEwCisjZGVmaW5lIEVDSE9LCTB4MDAwMDAwMjAKKyNkZWZpbmUgRUNIT05MCTB4MDAwMDAwNDAKKyNkZWZpbmUgTk9GTFNICTB4MDAwMDAwODAKKyNkZWZpbmUgVE9TVE9QCTB4MDAwMDAxMDAKKyNkZWZpbmUgRUNIT0NUTAkweDAwMDAwMjAwCisjZGVmaW5lIEVDSE9QUlQJMHgwMDAwMDQwMAorI2RlZmluZSBFQ0hPS0UJMHgwMDAwMDgwMAorI2RlZmluZSBERUZFQ0hPIDB4MDAwMDEwMDAgIC8qIFNVTk9TIHRoaW5nLCB3aGF0IGlzIGl0PyAqLworI2RlZmluZSBGTFVTSE8JMHgwMDAwMjAwMAorI2RlZmluZSBQRU5ESU4JMHgwMDAwNDAwMAorI2RlZmluZSBJRVhURU4JMHgwMDAwODAwMAorCisvKiBtb2RlbSBsaW5lcyAqLworI2RlZmluZSBUSU9DTV9MRQkweDAwMQorI2RlZmluZSBUSU9DTV9EVFIJMHgwMDIKKyNkZWZpbmUgVElPQ01fUlRTCTB4MDA0CisjZGVmaW5lIFRJT0NNX1NUCTB4MDA4CisjZGVmaW5lIFRJT0NNX1NSCTB4MDEwCisjZGVmaW5lIFRJT0NNX0NUUwkweDAyMAorI2RlZmluZSBUSU9DTV9DQVIJMHgwNDAKKyNkZWZpbmUgVElPQ01fUk5HCTB4MDgwCisjZGVmaW5lIFRJT0NNX0RTUgkweDEwMAorI2RlZmluZSBUSU9DTV9DRAlUSU9DTV9DQVIKKyNkZWZpbmUgVElPQ01fUkkJVElPQ01fUk5HCisjZGVmaW5lIFRJT0NNX09VVDEJMHgyMDAwCisjZGVmaW5lIFRJT0NNX09VVDIJMHg0MDAwCisjZGVmaW5lIFRJT0NNX0xPT1AJMHg4MDAwCisKKy8qIGlvY3RsIChmZCwgVElPQ1NFUkdFVExTUiwgJnJlc3VsdCkgd2hlcmUgcmVzdWx0IG1heSBiZSBhcyBiZWxvdyAqLworI2RlZmluZSBUSU9DU0VSX1RFTVQgICAgMHgwMQkvKiBUcmFuc21pdHRlciBwaHlzaWNhbGx5IGVtcHR5ICovCisKKworLyogdGNmbG93KCkgYW5kIFRDWE9OQyB1c2UgdGhlc2UgKi8KKyNkZWZpbmUJVENPT0ZGCQkwCisjZGVmaW5lCVRDT09OCQkxCisjZGVmaW5lCVRDSU9GRgkJMgorI2RlZmluZQlUQ0lPTgkJMworCisvKiB0Y2ZsdXNoKCkgYW5kIFRDRkxTSCB1c2UgdGhlc2UgKi8KKyNkZWZpbmUJVENJRkxVU0gJMAorI2RlZmluZQlUQ09GTFVTSAkxCisjZGVmaW5lCVRDSU9GTFVTSAkyCisKKy8qIHRjc2V0YXR0ciB1c2VzIHRoZXNlICovCisjZGVmaW5lCVRDU0FOT1cJCTAKKyNkZWZpbmUJVENTQURSQUlOCTEKKyNkZWZpbmUJVENTQUZMVVNICTIKKworI2VuZGlmIC8qICEoX1NQQVJDNjRfVEVSTUJJVFNfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvdGVybWlvcy5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC90ZXJtaW9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVmZmNlMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvdGVybWlvcy5oCkBAIC0wLDAgKzEsMTczIEBACisvKiAkSWQ6IHRlcm1pb3MuaCx2IDEuMTEgMjAwMS8wNi8wMSAwODoxMjoxMSBkYXZlbSBFeHAgJCAqLworI2lmbmRlZiBfU1BBUkM2NF9URVJNSU9TX0gKKyNkZWZpbmUgX1NQQVJDNjRfVEVSTUlPU19ICisKKyNpbmNsdWRlIDxhc20vaW9jdGxzLmg+CisjaW5jbHVkZSA8YXNtL3Rlcm1iaXRzLmg+CisKKyNpZiBkZWZpbmVkKF9fS0VSTkVMX18pIHx8IGRlZmluZWQoX19ERUZJTkVfQlNEX1RFUk1JT1MpCitzdHJ1Y3Qgc2d0dHliIHsKKwljaGFyCXNnX2lzcGVlZDsKKwljaGFyCXNnX29zcGVlZDsKKwljaGFyCXNnX2VyYXNlOworCWNoYXIJc2dfa2lsbDsKKwlzaG9ydAlzZ19mbGFnczsKK307CisKK3N0cnVjdCB0Y2hhcnMgeworCWNoYXIJdF9pbnRyYzsKKwljaGFyCXRfcXVpdGM7CisJY2hhcgl0X3N0YXJ0YzsKKwljaGFyCXRfc3RvcGM7CisJY2hhcgl0X2VvZmM7CisJY2hhcgl0X2Jya2M7Cit9OworCitzdHJ1Y3QgbHRjaGFycyB7CisJY2hhcgl0X3N1c3BjOworCWNoYXIJdF9kc3VzcGM7CisJY2hhcgl0X3Jwcm50YzsKKwljaGFyCXRfZmx1c2hjOworCWNoYXIJdF93ZXJhc2M7CisJY2hhcgl0X2xuZXh0YzsKK307CisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCitzdHJ1Y3Qgc3Vub3NfdHR5c2l6ZSB7CisJaW50IHN0X2xpbmVzOyAgIC8qIExpbmVzIG9uIHRoZSB0ZXJtaW5hbCAqLworCWludCBzdF9jb2x1bW5zOyAvKiBDb2x1bW5zIG9uIHRoZSB0ZXJtaW5hbCAqLworfTsKKworLyogVXNlZCBmb3IgcGFja2V0IG1vZGUgKi8KKyNkZWZpbmUgVElPQ1BLVF9EQVRBCQkgMAorI2RlZmluZSBUSU9DUEtUX0ZMVVNIUkVBRAkgMQorI2RlZmluZSBUSU9DUEtUX0ZMVVNIV1JJVEUJIDIKKyNkZWZpbmUgVElPQ1BLVF9TVE9QCQkgNAorI2RlZmluZSBUSU9DUEtUX1NUQVJUCQkgOAorI2RlZmluZSBUSU9DUEtUX05PU1RPUAkJMTYKKyNkZWZpbmUgVElPQ1BLVF9ET1NUT1AJCTMyCisKK3N0cnVjdCB3aW5zaXplIHsKKwl1bnNpZ25lZCBzaG9ydCB3c19yb3c7CisJdW5zaWduZWQgc2hvcnQgd3NfY29sOworCXVuc2lnbmVkIHNob3J0IHdzX3hwaXhlbDsKKwl1bnNpZ25lZCBzaG9ydCB3c195cGl4ZWw7Cit9OworCisvKiBsaW5lIGRpc2NpcGxpbmVzICovCisjZGVmaW5lIE5fVFRZCQkwCisjZGVmaW5lIE5fU0xJUAkJMQorI2RlZmluZSBOX01PVVNFCQkyCisjZGVmaW5lIE5fUFBQCQkzCisjZGVmaW5lIE5fU1RSSVAJCTQKKyNkZWZpbmUgTl9BWDI1CQk1CisjZGVmaW5lIE5fWDI1CQk2CisjZGVmaW5lIE5fNlBBQ0sJCTcKKyNkZWZpbmUgTl9NQVNDCQk4CS8qIFJlc2VydmVkIGZvciBNb2JpdGV4IG1vZHVsZSA8a2F6QGNhZmUubmV0PiAqLworI2RlZmluZSBOX1IzOTY0CQk5CS8qIFJlc2VydmVkIGZvciBTaW1hdGljIFIzOTY0IG1vZHVsZSAqLworI2RlZmluZSBOX1BST0ZJQlVTX0ZETAkxMAkvKiBSZXNlcnZlZCBmb3IgUHJvZmlidXMgPERhdmVAbXZoaS5jb20+ICovCisjZGVmaW5lIE5fSVJEQQkJMTEJLyogTGludXggSXJEYSAtIGh0dHA6Ly9pcmRhLnNvdXJjZWZvcmdlLm5ldC8gKi8KKyNkZWZpbmUgTl9TTVNCTE9DSwkxMgkvKiBTTVMgYmxvY2sgbW9kZSAtIGZvciB0YWxraW5nIHRvIEdTTSBkYXRhIGNhcmRzIGFib3V0IFNNUyBtZXNzYWdlcyAqLworI2RlZmluZSBOX0hETEMJCTEzCS8qIHN5bmNocm9ub3VzIEhETEMgKi8KKyNkZWZpbmUgTl9TWU5DX1BQUAkxNAkvKiBzeW5jaHJvbm91cyBQUFAgKi8KKyNkZWZpbmUgTl9IQ0kJCTE1ICAvKiBCbHVldG9vdGggSENJIFVBUlQgKi8KKworI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworLyoKKyAqIGNfY2MgY2hhcmFjdGVycyBpbiB0aGUgdGVybWlvIHN0cnVjdHVyZS4gIE9oLCBob3cgSSBsb3ZlIGJlaW5nCisgKiBiYWNrd2FyZGx5IGNvbXBhdGlibGUuICBOb3RpY2UgdGhhdCBjaGFyYWN0ZXIgNCBhbmQgNSBhcmUKKyAqIGludGVycHJldGVkIGRpZmZlcmVudGx5IGRlcGVuZGluZyBvbiB3aGV0aGVyIElDQU5PTiBpcyBzZXQgaW4KKyAqIGNfbGZsYWcuICBJZiBpdCdzIHNldCwgdGhleSBhcmUgdXNlZCBhcyBfVkVPRiBhbmQgX1ZFT0wsIG90aGVyd2lzZQorICogYXMgX1ZNSU4gYW5kIFZfVElNRS4gIFRoaXMgaXMgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBPU0YvMSAod2hpY2gKKyAqIGlzIGNvbXBhdGlibGUgd2l0aCBzeXNWKS4uLgorICovCisjZGVmaW5lIF9WTUlOCTQKKyNkZWZpbmUgX1ZUSU1FCTUKKworLyoJaW50cj1eQwkJcXVpdD1eXAkJZXJhc2U9ZGVsCWtpbGw9XlUKKwllb2Y9XkQJCWVvbD1cMAkJZW9sMj1cMAkJc3h0Yz1cMAorCXN0YXJ0PV5RCXN0b3A9XlMJCXN1c3A9XloJCWRzdXNwPV5ZCisJcmVwcmludD1eUglkaXNjYXJkPV5VCXdlcmFzZT1eVwlsbmV4dD1eVgorCXZtaW49XDEgICAgICAgICB2dGltZT1cMAorKi8KKyNkZWZpbmUgSU5JVF9DX0NDICJcMDAzXDAzNFwxNzdcMDI1XDAwNFwwMDBcMDAwXDAwMFwwMjFcMDIzXDAzMlwwMzFcMDIyXDAyNVwwMjdcMDI2XDAwMSIKKworLyoKKyAqIFRyYW5zbGF0ZSBhICJ0ZXJtaW8iIHN0cnVjdHVyZSBpbnRvIGEgInRlcm1pb3MiLiBVZ2guCisgKi8KKyNkZWZpbmUgdXNlcl90ZXJtaW9fdG9fa2VybmVsX3Rlcm1pb3ModGVybWlvcywgdGVybWlvKSBcCisoeyBcCisJdW5zaWduZWQgc2hvcnQgdG1wOyBcCisJZ2V0X3VzZXIodG1wLCAmKHRlcm1pbyktPmNfaWZsYWcpOyBcCisJKHRlcm1pb3MpLT5jX2lmbGFnID0gKDB4ZmZmZjAwMDAgJiAoKHRlcm1pb3MpLT5jX2lmbGFnKSkgfCB0bXA7IFwKKwlnZXRfdXNlcih0bXAsICYodGVybWlvKS0+Y19vZmxhZyk7IFwKKwkodGVybWlvcyktPmNfb2ZsYWcgPSAoMHhmZmZmMDAwMCAmICgodGVybWlvcyktPmNfb2ZsYWcpKSB8IHRtcDsgXAorCWdldF91c2VyKHRtcCwgJih0ZXJtaW8pLT5jX2NmbGFnKTsgXAorCSh0ZXJtaW9zKS0+Y19jZmxhZyA9ICgweGZmZmYwMDAwICYgKCh0ZXJtaW9zKS0+Y19jZmxhZykpIHwgdG1wOyBcCisJZ2V0X3VzZXIodG1wLCAmKHRlcm1pbyktPmNfbGZsYWcpOyBcCisJKHRlcm1pb3MpLT5jX2xmbGFnID0gKDB4ZmZmZjAwMDAgJiAoKHRlcm1pb3MpLT5jX2xmbGFnKSkgfCB0bXA7IFwKKwljb3B5X2Zyb21fdXNlcigodGVybWlvcyktPmNfY2MsICh0ZXJtaW8pLT5jX2NjLCBOQ0MpOyBcCisJMDsgXAorfSkKKworLyoKKyAqIFRyYW5zbGF0ZSBhICJ0ZXJtaW9zIiBzdHJ1Y3R1cmUgaW50byBhICJ0ZXJtaW8iLiBVZ2guCisgKgorICogTm90ZSB0aGUgImZ1biIgX1ZNSU4gb3ZlcmxvYWRpbmcuCisgKi8KKyNkZWZpbmUga2VybmVsX3Rlcm1pb3NfdG9fdXNlcl90ZXJtaW8odGVybWlvLCB0ZXJtaW9zKSBcCisoeyBcCisJcHV0X3VzZXIoKHRlcm1pb3MpLT5jX2lmbGFnLCAmKHRlcm1pbyktPmNfaWZsYWcpOyBcCisJcHV0X3VzZXIoKHRlcm1pb3MpLT5jX29mbGFnLCAmKHRlcm1pbyktPmNfb2ZsYWcpOyBcCisJcHV0X3VzZXIoKHRlcm1pb3MpLT5jX2NmbGFnLCAmKHRlcm1pbyktPmNfY2ZsYWcpOyBcCisJcHV0X3VzZXIoKHRlcm1pb3MpLT5jX2xmbGFnLCAmKHRlcm1pbyktPmNfbGZsYWcpOyBcCisJcHV0X3VzZXIoKHRlcm1pb3MpLT5jX2xpbmUsICAmKHRlcm1pbyktPmNfbGluZSk7IFwKKwljb3B5X3RvX3VzZXIoKHRlcm1pbyktPmNfY2MsICh0ZXJtaW9zKS0+Y19jYywgTkNDKTsgXAorCWlmICghKCh0ZXJtaW9zKS0+Y19sZmxhZyAmIElDQU5PTikpIHsgXAorCQlwdXRfdXNlcigodGVybWlvcyktPmNfY2NbVk1JTl0sICYodGVybWlvKS0+Y19jY1tfVk1JTl0pOyBcCisJCXB1dF91c2VyKCh0ZXJtaW9zKS0+Y19jY1tWVElNRV0sICYodGVybWlvKS0+Y19jY1tfVlRJTUVdKTsgXAorCX0gXAorCTA7IFwKK30pCisKKyNkZWZpbmUgdXNlcl90ZXJtaW9zX3RvX2tlcm5lbF90ZXJtaW9zKGssIHUpIFwKKyh7IFwKKwlnZXRfdXNlcigoayktPmNfaWZsYWcsICYodSktPmNfaWZsYWcpOyBcCisJZ2V0X3VzZXIoKGspLT5jX29mbGFnLCAmKHUpLT5jX29mbGFnKTsgXAorCWdldF91c2VyKChrKS0+Y19jZmxhZywgJih1KS0+Y19jZmxhZyk7IFwKKwlnZXRfdXNlcigoayktPmNfbGZsYWcsICYodSktPmNfbGZsYWcpOyBcCisJZ2V0X3VzZXIoKGspLT5jX2xpbmUsICAmKHUpLT5jX2xpbmUpOyBcCisJY29weV9mcm9tX3VzZXIoKGspLT5jX2NjLCAodSktPmNfY2MsIE5DQ1MpOyBcCisJaWYoKGspLT5jX2xmbGFnICYgSUNBTk9OKSB7IFwKKwkJZ2V0X3VzZXIoKGspLT5jX2NjW1ZFT0ZdLCAmKHUpLT5jX2NjW1ZFT0ZdKTsgXAorCQlnZXRfdXNlcigoayktPmNfY2NbVkVPTF0sICYodSktPmNfY2NbVkVPTF0pOyBcCisJfSBlbHNlIHsgXAorCQlnZXRfdXNlcigoayktPmNfY2NbVk1JTl0sICAmKHUpLT5jX2NjW19WTUlOXSk7IFwKKwkJZ2V0X3VzZXIoKGspLT5jX2NjW1ZUSU1FXSwgJih1KS0+Y19jY1tfVlRJTUVdKTsgXAorCX0gXAorCTA7IFwKK30pCisKKyNkZWZpbmUga2VybmVsX3Rlcm1pb3NfdG9fdXNlcl90ZXJtaW9zKHUsIGspIFwKKyh7IFwKKwlwdXRfdXNlcigoayktPmNfaWZsYWcsICYodSktPmNfaWZsYWcpOyBcCisJcHV0X3VzZXIoKGspLT5jX29mbGFnLCAmKHUpLT5jX29mbGFnKTsgXAorCXB1dF91c2VyKChrKS0+Y19jZmxhZywgJih1KS0+Y19jZmxhZyk7IFwKKwlwdXRfdXNlcigoayktPmNfbGZsYWcsICYodSktPmNfbGZsYWcpOyBcCisJcHV0X3VzZXIoKGspLT5jX2xpbmUsICYodSktPmNfbGluZSk7IFwKKwljb3B5X3RvX3VzZXIoKHUpLT5jX2NjLCAoayktPmNfY2MsIE5DQ1MpOyBcCisJaWYoISgoayktPmNfbGZsYWcgJiBJQ0FOT04pKSB7IFwKKwkJcHV0X3VzZXIoKGspLT5jX2NjW1ZNSU5dLCAgJih1KS0+Y19jY1tfVk1JTl0pOyBcCisJCXB1dF91c2VyKChrKS0+Y19jY1tWVElNRV0sICYodSktPmNfY2NbX1ZUSU1FXSk7IFwKKwl9IGVsc2UgeyBcCisJCXB1dF91c2VyKChrKS0+Y19jY1tWRU9GXSwgJih1KS0+Y19jY1tWRU9GXSk7IFwKKwkJcHV0X3VzZXIoKGspLT5jX2NjW1ZFT0xdLCAmKHUpLT5jX2NjW1ZFT0xdKTsgXAorCX0gXAorCTA7IFwKK30pCisKKyNlbmRpZgkvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfU1BBUkM2NF9URVJNSU9TX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvdGhyZWFkX2luZm8uaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvdGhyZWFkX2luZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTdjYWFiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC90aHJlYWRfaW5mby5oCkBAIC0wLDAgKzEsMjUyIEBACisvKiAkSWQ6IHRocmVhZF9pbmZvLmgsdiAxLjEgMjAwMi8wMi8xMCAwMDowMDo1OCBkYXZlbSBFeHAgJAorICogdGhyZWFkX2luZm8uaDogc3BhcmM2NCBsb3ctbGV2ZWwgdGhyZWFkIGluZm9ybWF0aW9uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAyICBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQHJlZGhhdC5jb20pCisgKi8KKworI2lmbmRlZiBfQVNNX1RIUkVBRF9JTkZPX0gKKyNkZWZpbmUgX0FTTV9USFJFQURfSU5GT19ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNkZWZpbmUgTlNXSU5TCQk3CisKKyNkZWZpbmUgVElfRkxBR19CWVRFX0ZBVUxUX0NPREUJCTAKKyNkZWZpbmUgVElfRkxBR19GQVVMVF9DT0RFX1NISUZUCTU2CisjZGVmaW5lIFRJX0ZMQUdfQllURV9XU1RBVEUJCTEKKyNkZWZpbmUgVElfRkxBR19XU1RBVEVfU0hJRlQJCTQ4CisjZGVmaW5lIFRJX0ZMQUdfQllURV9DV1AJCTIKKyNkZWZpbmUgVElfRkxBR19DV1BfU0hJRlQJCTQwCisjZGVmaW5lIFRJX0ZMQUdfQllURV9DVVJSRU5UX0RTCQkzCisjZGVmaW5lIFRJX0ZMQUdfQ1VSUkVOVF9EU19TSElGVAkzMgorI2RlZmluZSBUSV9GTEFHX0JZVEVfRlBERVBUSAkJNAorI2RlZmluZSBUSV9GTEFHX0ZQREVQVEhfU0hJRlQJCTI0CisjZGVmaW5lIFRJX0ZMQUdfQllURV9XU0FWRUQJCTUKKyNkZWZpbmUgVElfRkxBR19XU0FWRURfU0hJRlQJCTE2CisKKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCitzdHJ1Y3QgdGFza19zdHJ1Y3Q7CitzdHJ1Y3QgZXhlY19kb21haW47CisKK3N0cnVjdCB0aHJlYWRfaW5mbyB7CisJLyogRCQgbGluZSAxICovCisJc3RydWN0IHRhc2tfc3RydWN0CSp0YXNrOworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCV9fdTgJCQljcHU7CisJX191OAkJCWZwc2F2ZWRbN107CisJdW5zaWduZWQgbG9uZwkJa3NwOworCisJLyogRCQgbGluZSAyICovCisJdW5zaWduZWQgbG9uZwkJZmF1bHRfYWRkcmVzczsKKwlzdHJ1Y3QgcHRfcmVncwkJKmtyZWdzOworCXN0cnVjdCBleGVjX2RvbWFpbgkqZXhlY19kb21haW47CisJaW50CQkJcHJlZW1wdF9jb3VudDsKKwlpbnQJCQlfX3BhZDsKKworCXVuc2lnbmVkIGxvbmcJCSp1dHJhcHM7CisKKwlzdHJ1Y3QgcmVnX3dpbmRvdyAJcmVnX3dpbmRvd1tOU1dJTlNdOworCXVuc2lnbmVkIGxvbmcgCQlyd2J1Zl9zdGtwdHJzW05TV0lOU107CisKKwl1bnNpZ25lZCBsb25nCQlnc3JbN107CisJdW5zaWduZWQgbG9uZwkJeGZzcls3XTsKKworCV9fdTY0CQkJX191c2VyICp1c2VyX2NudGQwOworCV9fdTY0CQkJX191c2VyICp1c2VyX2NudGQxOworCV9fdTY0CQkJa2VybmVsX2NudGQwLCBrZXJuZWxfY250ZDE7CisJX191NjQJCQlwY3JfcmVnOworCisJX191NjQJCQljZWVfc3R1ZmY7CisKKwlzdHJ1Y3QgcmVzdGFydF9ibG9jawlyZXN0YXJ0X2Jsb2NrOworCisJdW5zaWduZWQgbG9uZwkJZnByZWdzWzBdIF9fYXR0cmlidXRlX18gKChhbGlnbmVkKDY0KSkpOworfTsKKworI2VuZGlmIC8qICEoX19BU1NFTUJMWV9fKSAqLworCisvKiBvZmZzZXRzIGludG8gdGhlIHRocmVhZF9pbmZvIHN0cnVjdCBmb3IgYXNzZW1ibHkgY29kZSBhY2Nlc3MgKi8KKyNkZWZpbmUgVElfVEFTSwkJMHgwMDAwMDAwMAorI2RlZmluZSBUSV9GTEFHUwkweDAwMDAwMDA4CisjZGVmaW5lIFRJX0ZBVUxUX0NPREUJKFRJX0ZMQUdTICsgVElfRkxBR19CWVRFX0ZBVUxUX0NPREUpCisjZGVmaW5lIFRJX1dTVEFURQkoVElfRkxBR1MgKyBUSV9GTEFHX0JZVEVfV1NUQVRFKQorI2RlZmluZSBUSV9DV1AJCShUSV9GTEFHUyArIFRJX0ZMQUdfQllURV9DV1ApCisjZGVmaW5lIFRJX0NVUlJFTlRfRFMJKFRJX0ZMQUdTICsgVElfRkxBR19CWVRFX0NVUlJFTlRfRFMpCisjZGVmaW5lIFRJX0ZQREVQVEgJKFRJX0ZMQUdTICsgVElfRkxBR19CWVRFX0ZQREVQVEgpCisjZGVmaW5lIFRJX1dTQVZFRAkoVElfRkxBR1MgKyBUSV9GTEFHX0JZVEVfV1NBVkVEKQorI2RlZmluZSBUSV9DUFUJCTB4MDAwMDAwMTAKKyNkZWZpbmUgVElfRlBTQVZFRAkweDAwMDAwMDExCisjZGVmaW5lIFRJX0tTUAkJMHgwMDAwMDAxOAorI2RlZmluZSBUSV9GQVVMVF9BRERSCTB4MDAwMDAwMjAKKyNkZWZpbmUgVElfS1JFR1MJMHgwMDAwMDAyOAorI2RlZmluZSBUSV9FWEVDX0RPTUFJTgkweDAwMDAwMDMwCisjZGVmaW5lIFRJX1BSRV9DT1VOVAkweDAwMDAwMDM4CisjZGVmaW5lIFRJX1VUUkFQUwkweDAwMDAwMDQwCisjZGVmaW5lIFRJX1JFR19XSU5ET1cJMHgwMDAwMDA0OAorI2RlZmluZSBUSV9SV0lOX1NQVFJTCTB4MDAwMDAzYzgJCisjZGVmaW5lIFRJX0dTUgkJMHgwMDAwMDQwMAorI2RlZmluZSBUSV9YRlNSCQkweDAwMDAwNDM4CisjZGVmaW5lIFRJX1VTRVJfQ05URDAJMHgwMDAwMDQ3MAorI2RlZmluZSBUSV9VU0VSX0NOVEQxCTB4MDAwMDA0NzgKKyNkZWZpbmUgVElfS0VSTl9DTlREMAkweDAwMDAwNDgwCisjZGVmaW5lIFRJX0tFUk5fQ05URDEJMHgwMDAwMDQ4OAorI2RlZmluZSBUSV9QQ1IJCTB4MDAwMDA0OTAKKyNkZWZpbmUgVElfQ0VFX1NUVUZGCTB4MDAwMDA0OTgKKyNkZWZpbmUgVElfUkVTVEFSVF9CTE9DSyAweDAwMDAwNGEwCisjZGVmaW5lIFRJX0ZQUkVHUwkweDAwMDAwNTAwCisKKy8qIFdlIGVtYmVkIHRoaXMgaW4gdGhlIHVwcGVybW9zdCBieXRlIG9mIHRocmVhZF9pbmZvLT5mbGFncyAqLworI2RlZmluZSBGQVVMVF9DT0RFX1dSSVRFCTB4MDEJLyogV3JpdGUgYWNjZXNzLCBpbXBsaWVzIEQtVExCCSAgICovCisjZGVmaW5lIEZBVUxUX0NPREVfRFRMQgkJMHgwMgkvKiBNaXNzIGhhcHBlbmVkIGluIEQtVExCCSAgICovCisjZGVmaW5lIEZBVUxUX0NPREVfSVRMQgkJMHgwNAkvKiBNaXNzIGhhcHBlbmVkIGluIEktVExCCSAgICovCisjZGVmaW5lIEZBVUxUX0NPREVfV0lORklYVVAJMHgwOAkvKiBNaXNzIGhhcHBlbmVkIGR1cmluZyBzcGlsbC9maWxsICovCisjZGVmaW5lIEZBVUxUX0NPREVfQkxLQ09NTUlUCTB4MTAJLyogVXNlIGJsay1jb21taXQgQVNJIGluIGNvcHlfcGFnZSAqLworCisjaWYgUEFHRV9TSElGVCA9PSAxMworI2RlZmluZSBUSFJFQURfU0laRSAoMipQQUdFX1NJWkUpCisjZGVmaW5lIFRIUkVBRF9TSElGVCAoUEFHRV9TSElGVCArIDEpCisjZWxzZSAvKiBQQUdFX1NISUZUID09IDEzICovCisjZGVmaW5lIFRIUkVBRF9TSVpFIFBBR0VfU0laRQorI2RlZmluZSBUSFJFQURfU0hJRlQgUEFHRV9TSElGVAorI2VuZGlmIC8qIFBBR0VfU0hJRlQgPT0gMTMgKi8KKworI2RlZmluZSBQUkVFTVBUX0FDVElWRQkJMHg0MDAwMDAwCisKKy8qCisgKiBtYWNyb3MvZnVuY3Rpb25zIGZvciBnYWluaW5nIGFjY2VzcyB0byB0aGUgdGhyZWFkIGluZm9ybWF0aW9uIHN0cnVjdHVyZQorICoKKyAqIHByZWVtcHRfY291bnQgbmVlZHMgdG8gYmUgMSBpbml0aWFsbHksIHVudGlsIHRoZSBzY2hlZHVsZXIgaXMgZnVuY3Rpb25hbC4KKyAqLworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworI2RlZmluZSBJTklUX1RIUkVBRF9JTkZPKHRzaykJCQkJXAorewkJCQkJCQlcCisJLnRhc2sJCT0JJnRzaywJCQlcCisJLmZsYWdzCQk9ICgodW5zaWduZWQgbG9uZylBU0lfUCkgPDwgVElfRkxBR19DVVJSRU5UX0RTX1NISUZULAlcCisJLmV4ZWNfZG9tYWluCT0JJmRlZmF1bHRfZXhlY19kb21haW4sCVwKKwkucHJlZW1wdF9jb3VudAk9CTEsCQkJXAorCS5yZXN0YXJ0X2Jsb2NrCT0gewkJCQlcCisJCS5mbgk9CWRvX25vX3Jlc3RhcnRfc3lzY2FsbCwJXAorCX0sCQkJCQkJXAorfQorCisjZGVmaW5lIGluaXRfdGhyZWFkX2luZm8JKGluaXRfdGhyZWFkX3VuaW9uLnRocmVhZF9pbmZvKQorI2RlZmluZSBpbml0X3N0YWNrCQkoaW5pdF90aHJlYWRfdW5pb24uc3RhY2spCisKKy8qIGhvdyB0byBnZXQgdGhlIHRocmVhZCBpbmZvcm1hdGlvbiBzdHJ1Y3QgZnJvbSBDICovCityZWdpc3RlciBzdHJ1Y3QgdGhyZWFkX2luZm8gKmN1cnJlbnRfdGhyZWFkX2luZm9fcmVnIGFzbSgiZzYiKTsKKyNkZWZpbmUgY3VycmVudF90aHJlYWRfaW5mbygpCShjdXJyZW50X3RocmVhZF9pbmZvX3JlZykKKworLyogdGhyZWFkIGluZm9ybWF0aW9uIGFsbG9jYXRpb24gKi8KKyNpZiBQQUdFX1NISUZUID09IDEzCisjZGVmaW5lIF9fVEhSRUFEX0lORk9fT1JERVIJMQorI2Vsc2UgLyogUEFHRV9TSElGVCA9PSAxMyAqLworI2RlZmluZSBfX1RIUkVBRF9JTkZPX09SREVSCTAKKyNlbmRpZiAvKiBQQUdFX1NISUZUID09IDEzICovCisKKyNpZmRlZiBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UKKyNkZWZpbmUgYWxsb2NfdGhyZWFkX2luZm8odHNrKQkJCQkJXAorKHsJCQkJCQkJCVwKKwlzdHJ1Y3QgdGhyZWFkX2luZm8gKnJldDsJCQkJXAorCQkJCQkJCQlcCisJcmV0ID0gKHN0cnVjdCB0aHJlYWRfaW5mbyAqKQkJCQlcCisJICBfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwsIF9fVEhSRUFEX0lORk9fT1JERVIpOwlcCisJaWYgKHJldCkJCQkJCQlcCisJCW1lbXNldChyZXQsIDAsIFBBR0VfU0laRTw8X19USFJFQURfSU5GT19PUkRFUik7CVwKKwlyZXQ7CQkJCQkJCVwKK30pCisjZWxzZQorI2RlZmluZSBhbGxvY190aHJlYWRfaW5mbyh0c2spIFwKKwkoKHN0cnVjdCB0aHJlYWRfaW5mbyAqKV9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwgX19USFJFQURfSU5GT19PUkRFUikpCisjZW5kaWYKKworI2RlZmluZSBmcmVlX3RocmVhZF9pbmZvKHRpKSBcCisJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZykodGkpLF9fVEhSRUFEX0lORk9fT1JERVIpCisKKyNkZWZpbmUgX190aHJlYWRfZmxhZ19ieXRlX3B0cih0aSkJXAorCSgodW5zaWduZWQgY2hhciAqKSgmKCh0aSktPmZsYWdzKSkpCisjZGVmaW5lIF9fY3VyX3RocmVhZF9mbGFnX2J5dGVfcHRyCV9fdGhyZWFkX2ZsYWdfYnl0ZV9wdHIoY3VycmVudF90aHJlYWRfaW5mbygpKQorCisjZGVmaW5lIGdldF90aHJlYWRfZmF1bHRfY29kZSgpCQkoX19jdXJfdGhyZWFkX2ZsYWdfYnl0ZV9wdHJbVElfRkxBR19CWVRFX0ZBVUxUX0NPREVdKQorI2RlZmluZSBzZXRfdGhyZWFkX2ZhdWx0X2NvZGUodmFsKQkoX19jdXJfdGhyZWFkX2ZsYWdfYnl0ZV9wdHJbVElfRkxBR19CWVRFX0ZBVUxUX0NPREVdID0gKHZhbCkpCisjZGVmaW5lIGdldF90aHJlYWRfd3N0YXRlKCkJCShfX2N1cl90aHJlYWRfZmxhZ19ieXRlX3B0cltUSV9GTEFHX0JZVEVfV1NUQVRFXSkKKyNkZWZpbmUgc2V0X3RocmVhZF93c3RhdGUodmFsKQkJKF9fY3VyX3RocmVhZF9mbGFnX2J5dGVfcHRyW1RJX0ZMQUdfQllURV9XU1RBVEVdID0gKHZhbCkpCisjZGVmaW5lIGdldF90aHJlYWRfY3dwKCkJCShfX2N1cl90aHJlYWRfZmxhZ19ieXRlX3B0cltUSV9GTEFHX0JZVEVfQ1dQXSkKKyNkZWZpbmUgc2V0X3RocmVhZF9jd3AodmFsKQkJKF9fY3VyX3RocmVhZF9mbGFnX2J5dGVfcHRyW1RJX0ZMQUdfQllURV9DV1BdID0gKHZhbCkpCisjZGVmaW5lIGdldF90aHJlYWRfY3VycmVudF9kcygpCQkoX19jdXJfdGhyZWFkX2ZsYWdfYnl0ZV9wdHJbVElfRkxBR19CWVRFX0NVUlJFTlRfRFNdKQorI2RlZmluZSBzZXRfdGhyZWFkX2N1cnJlbnRfZHModmFsKQkoX19jdXJfdGhyZWFkX2ZsYWdfYnl0ZV9wdHJbVElfRkxBR19CWVRFX0NVUlJFTlRfRFNdID0gKHZhbCkpCisjZGVmaW5lIGdldF90aHJlYWRfZnBkZXB0aCgpCQkoX19jdXJfdGhyZWFkX2ZsYWdfYnl0ZV9wdHJbVElfRkxBR19CWVRFX0ZQREVQVEhdKQorI2RlZmluZSBzZXRfdGhyZWFkX2ZwZGVwdGgodmFsKQkJKF9fY3VyX3RocmVhZF9mbGFnX2J5dGVfcHRyW1RJX0ZMQUdfQllURV9GUERFUFRIXSA9ICh2YWwpKQorI2RlZmluZSBnZXRfdGhyZWFkX3dzYXZlZCgpCQkoX19jdXJfdGhyZWFkX2ZsYWdfYnl0ZV9wdHJbVElfRkxBR19CWVRFX1dTQVZFRF0pCisjZGVmaW5lIHNldF90aHJlYWRfd3NhdmVkKHZhbCkJCShfX2N1cl90aHJlYWRfZmxhZ19ieXRlX3B0cltUSV9GTEFHX0JZVEVfV1NBVkVEXSA9ICh2YWwpKQorCisjZW5kaWYgLyogIShfX0FTU0VNQkxZX18pICovCisKKy8qCisgKiBUaHJlYWQgaW5mb3JtYXRpb24gZmxhZ3MsIG9ubHkgMTYgYml0cyBhcmUgYXZhaWxhYmxlIGFzIHdlIGVuY29kZQorICogb3RoZXIgdmFsdWVzIGludG8gdGhlIHVwcGVyIDYgYnl0ZXMuCisgKgorICogT24gdHJhcCByZXR1cm4gd2UgbmVlZCB0byB0ZXN0IHNldmVyYWwgdmFsdWVzOgorICoKKyAqIHVzZXI6CW5lZWRfcmVzY2hlZCwgbm90aWZ5X3Jlc3VtZSwgc2lncGVuZGluZywgd3NhdmVkLCBwZXJmY3RyCisgKiBrZXJuZWw6CWZwZGVwdGgKKyAqCisgKiBTbyB0byBjaGVjayBmb3Igd29yayBpbiB0aGUga2VybmVsIGNhc2Ugd2Ugc2ltcGx5IGxvYWQgdGhlIGZwZGVwdGgKKyAqIGJ5dGUgb3V0IG9mIHRoZSBmbGFncyBhbmQgdGVzdCBpdC4gIEZvciB0aGUgdXNlciBjYXNlIHdlIGVuY29kZSB0aGUKKyAqIGxvd2VyIDMgYnl0ZXMgb2YgZmxhZ3MgYXMgZm9sbG93czoKKyAqCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCXwgd3NhdmVkIHwgZmxhZ3MgYnl0ZSAxIHwgZmxhZ3MgYnl0ZSAyIHwKKyAqCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFRoaXMgb3B0aW1pemVzIHRoZSB1c2VyIHRlc3QgaW50bzoKKyAqCWxkeAkJWyVnNiArIFRJX0ZMQUdTXSwgUkVHMQorICoJc2V0aGkJCSVoaShfVElGX1VTRVJfV09SS19NQVNLKSwgUkVHMgorICoJb3IJCVJFRzIsICVsbyhfVElGX1VTRVJfV09SS19NQVNLKSwgUkVHMgorICoJYW5kY2MJCVJFRzEsIFJFRzIsICVnMAorICoJYmUscHQJCW5vX3dvcmtfdG9fZG8KKyAqCSBub3AKKyAqLworI2RlZmluZSBUSUZfU1lTQ0FMTF9UUkFDRQkwCS8qIHN5c2NhbGwgdHJhY2UgYWN0aXZlICovCisjZGVmaW5lIFRJRl9OT1RJRllfUkVTVU1FCTEJLyogcmVzdW1wdGlvbiBub3RpZmljYXRpb24gcmVxdWVzdGVkICovCisjZGVmaW5lIFRJRl9TSUdQRU5ESU5HCQkyCS8qIHNpZ25hbCBwZW5kaW5nICovCisjZGVmaW5lIFRJRl9ORUVEX1JFU0NIRUQJMwkvKiByZXNjaGVkdWxpbmcgbmVjZXNzYXJ5ICovCisjZGVmaW5lIFRJRl9QRVJGQ1RSCQk0CS8qIHBlcmZvcm1hbmNlIGNvdW50ZXJzIGFjdGl2ZSAqLworI2RlZmluZSBUSUZfVU5BTElHTkVECQk1CS8qIGFsbG93ZWQgdG8gZG8gdW5hbGlnbmVkIGFjY2Vzc2VzICovCisjZGVmaW5lIFRJRl9ORVdTSUdOQUxTCQk2CS8qIHdhbnRzIG5ldy1zdHlsZSBzaWduYWxzICovCisjZGVmaW5lIFRJRl8zMkJJVAkJNwkvKiAzMi1iaXQgYmluYXJ5ICovCisjZGVmaW5lIFRJRl9ORVdDSElMRAkJOAkvKiBqdXN0LXNwYXduZWQgY2hpbGQgcHJvY2VzcyAqLworLyogVElGXyogdmFsdWUgOSBpcyBhdmFpbGFibGUgKi8KKyNkZWZpbmUgVElGX1BPTExJTkdfTlJGTEFHCTEwCisjZGVmaW5lIFRJRl9TWVNDQUxMX1NVQ0NFU1MJMTEKKy8qIE5PVEU6IFRocmVhZCBmbGFncyA+PSAxMiBzaG91bGQgYmUgb25lcyB3ZSBoYXZlIG5vIGludGVyZXN0CisgKiAgICAgICBpbiB1c2luZyBpbiBhc3NlbWJseSwgZWxzZSB3ZSBjYW4ndCB1c2UgdGhlIG1hc2sgYXMKKyAqICAgICAgIGFuIGltbWVkaWF0ZSB2YWx1ZSBpbiBpbnN0cnVjdGlvbnMgc3VjaCBhcyBhbmRjYy4KKyAqLworI2RlZmluZSBUSUZfQUJJX1BFTkRJTkcJCTEyCisjZGVmaW5lIFRJRl9NRU1ESUUJCTEzCisKKyNkZWZpbmUgX1RJRl9TWVNDQUxMX1RSQUNFCSgxPDxUSUZfU1lTQ0FMTF9UUkFDRSkKKyNkZWZpbmUgX1RJRl9OT1RJRllfUkVTVU1FCSgxPDxUSUZfTk9USUZZX1JFU1VNRSkKKyNkZWZpbmUgX1RJRl9TSUdQRU5ESU5HCQkoMTw8VElGX1NJR1BFTkRJTkcpCisjZGVmaW5lIF9USUZfTkVFRF9SRVNDSEVECSgxPDxUSUZfTkVFRF9SRVNDSEVEKQorI2RlZmluZSBfVElGX1BFUkZDVFIJCSgxPDxUSUZfUEVSRkNUUikKKyNkZWZpbmUgX1RJRl9VTkFMSUdORUQJCSgxPDxUSUZfVU5BTElHTkVEKQorI2RlZmluZSBfVElGX05FV1NJR05BTFMJCSgxPDxUSUZfTkVXU0lHTkFMUykKKyNkZWZpbmUgX1RJRl8zMkJJVAkJKDE8PFRJRl8zMkJJVCkKKyNkZWZpbmUgX1RJRl9ORVdDSElMRAkJKDE8PFRJRl9ORVdDSElMRCkKKyNkZWZpbmUgX1RJRl9QT0xMSU5HX05SRkxBRwkoMTw8VElGX1BPTExJTkdfTlJGTEFHKQorI2RlZmluZSBfVElGX0FCSV9QRU5ESU5HCSgxPDxUSUZfQUJJX1BFTkRJTkcpCisjZGVmaW5lIF9USUZfU1lTQ0FMTF9TVUNDRVNTCSgxPDxUSUZfU1lTQ0FMTF9TVUNDRVNTKQorCisjZGVmaW5lIF9USUZfVVNFUl9XT1JLX01BU0sJKCgweGZmIDw8IFRJX0ZMQUdfV1NBVkVEX1NISUZUKSB8IFwKKwkJCQkgKF9USUZfTk9USUZZX1JFU1VNRSB8IF9USUZfU0lHUEVORElORyB8IFwKKwkJCQkgIF9USUZfTkVFRF9SRVNDSEVEIHwgX1RJRl9QRVJGQ1RSKSkKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9BU01fVEhSRUFEX0lORk9fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC90aW1lci5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC90aW1lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhMzNhMmIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3RpbWVyLmgKQEAgLTAsMCArMSw3NCBAQAorLyogJElkOiB0aW1lci5oLHYgMS4zIDIwMDAvMDUvMDkgMTc6NDA6MTUgZGF2ZW0gRXhwICQKKyAqIHRpbWVyLmg6IFN5c3RlbSB0aW1lciBkZWZpbml0aW9ucyBmb3Igc3VuNS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTcgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQorICovCisKKyNpZm5kZWYgX1NQQVJDNjRfVElNRVJfSAorI2RlZmluZSBfU1BBUkM2NF9USU1FUl9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKiBIb3cgdGltZXJzIHdvcms6CisgKgorICogT24gdW5pcHJvY2Vzc29ycyB3ZSBqdXN0IHVzZSBjb3VudGVyIHplcm8gZm9yIHRoZSBzeXN0ZW0gd2lkZQorICogdGlja2VyLCB0aGlzIHBlcmZvcm1zIHRocmVhZCBzY2hlZHVsaW5nLCBjbG9jayBib29rIGtlZXBpbmcsCisgKiBhbmQgcnVucyB0aW1lciBiYXNlZCBldmVudHMuICBQcmV2aW91c2x5IHdlIHVzZWQgdGhlIFVsdHJhCisgKiAldGljayBpbnRlcnJ1cHQgZm9yIHRoaXMgcHVycG9zZS4KKyAqCisgKiBPbiBtdWx0aXByb2Nlc3NvcnMgd2UgcGljayBvbmUgY3B1IGFzIHRoZSBtYXN0ZXIgbGV2ZWwgMTAgdGljaworICogcHJvY2Vzc29yLiAgSGVyZSB0aGlzIGNvdW50ZXIgemVybyB0aWNrIGhhbmRsZXMgY2xvY2sgYm9vaworICoga2VlcGluZyBhbmQgdGltZXIgZXZlbnRzIG9ubHkuICBFYWNoIFVsdHJhIGhhcyBpdCdzIGxldmVsCisgKiAxNCAldGljayBpbnRlcnJ1cHQgc2V0IHRvIGZpcmUgb2ZmIGFzIHdlbGwsIGV2ZW4gdGhlIG1hc3RlcgorICogdGljayBjcHUgcnVucyB0aGlzIGxvY2FsbHkuICBUaGlzIHRpY2tlciBwZXJmb3JtcyB0aHJlYWQKKyAqIHNjaGVkdWxpbmcsIHN5c3RlbS91c2VyIHRpY2sgY291bnRpbmcgZm9yIHRoZSBjdXJyZW50IHRocmVhZCwKKyAqIGFuZCBhbHNvIHByb2ZpbGluZyBpZiBlbmFibGVkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworLyogVHdvIHRpbWVycywgdHJhZGl0aW9uYWxseSBzdGVlcmVkIHRvIFBJTCdzIDEwIGFuZCAxNCByZXNwZWN0aXZlbHkuCisgKiBCdXQgc2luY2UgSU5PIHBhY2tldHMgYXJlIHVzZWQgb24gc3VuNSwgd2UgY291bGQgdXNlIGFueSBQSUwgbGV2ZWwKKyAqIHdlIGxpa2UsIGhvd2V2ZXIgZm9yIG5vdyB3ZSB1c2UgdGhlIG5vcm1hbCBvbmVzLgorICoKKyAqIFRoZSAncmVnJyBhbmQgJ2ludGVycnVwdHMnIHByb3BlcnRpZXMgZm9yIHRoZXNlIGxpdmUgaW4gbm9kZXMgbmFtZWQKKyAqICdjb3VudGVyLXRpbWVyJy4gIFRoZSBmaXJzdCBvZiB0aHJlZSAncmVnJyBwcm9wZXJ0aWVzIGRlc2NyaWJlIHdoZXJlCisgKiB0aGUgc3VuNV90aW1lciByZWdpc3RlcnMgYXJlLiAgVGhlIG90aGVyIHR3byBJIGhhdmUgbm8gaWRlYS4gKFhYWCkKKyAqLworc3RydWN0IHN1bjVfdGltZXIgeworCXU2NAljb3VudDA7CisJdTY0CWxpbWl0MDsKKwl1NjQJY291bnQxOworCXU2NAlsaW1pdDE7Cit9OworCisjZGVmaW5lIFNVTjVfTElNSVRfRU5BQkxFCTB4ODAwMDAwMDAKKyNkZWZpbmUgU1VONV9MSU1JVF9UT1pFUk8JMHg0MDAwMDAwMAorI2RlZmluZSBTVU41X0xJTUlUX1pSRVNUQVJUCTB4MjAwMDAwMDAKKyNkZWZpbmUgU1VONV9MSU1JVF9DTUFTSwkweDFmZmZmZmZmCisKKy8qIEdpdmVuIGEgSFogdmFsdWUsIHNldCB0aGUgbGltaXQgcmVnaXN0ZXIgdG8gc28gdGhhdCB0aGUgdGltZXIgSVJRCisgKiBnZXRzIGRlbGl2ZXJlZCB0aGF0IG9mdGVuLgorICovCisjZGVmaW5lIFNVTjVfSFpfVE9fTElNSVQoX19oeikgICgxMDAwMDAwLyhfX2h6KSkKKworc3RydWN0IHNwYXJjNjRfdGlja19vcHMgeworCXZvaWQgKCppbml0X3RpY2spKHVuc2lnbmVkIGxvbmcpOworCXVuc2lnbmVkIGxvbmcgKCpnZXRfdGljaykodm9pZCk7CisJdW5zaWduZWQgbG9uZyAoKmdldF9jb21wYXJlKSh2b2lkKTsKKwl1bnNpZ25lZCBsb25nICgqYWRkX3RpY2spKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOworCXVuc2lnbmVkIGxvbmcgKCphZGRfY29tcGFyZSkodW5zaWduZWQgbG9uZyk7CisJdW5zaWduZWQgbG9uZyBzb2Z0aW50X21hc2s7Cit9OworCitleHRlcm4gc3RydWN0IHNwYXJjNjRfdGlja19vcHMgKnRpY2tfb3BzOworCisjaWZkZWYgQ09ORklHX1NNUAorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdGltZXJfdGlja19vZmZzZXQ7CitzdHJ1Y3QgcHRfcmVnczsKK2V4dGVybiB2b2lkIHRpbWVyX3RpY2tfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICopOworI2VuZGlmCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIHNwYXJjNjRfZ2V0X2Nsb2NrX3RpY2sodW5zaWduZWQgaW50IGNwdSk7CisKKyNlbmRpZiAvKiBfU1BBUkM2NF9USU1FUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3RpbWV4LmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3RpbWV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU4ZDQxNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvdGltZXguaApAQCAtMCwwICsxLDE3IEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tc3BhcmM2NC90aW1leC5oCisgKgorICogc3BhcmM2NCBhcmNoaXRlY3R1cmUgdGltZXggc3BlY2lmaWNhdGlvbnMKKyAqLworI2lmbmRlZiBfQVNNc3BhcmM2NF9USU1FWF9ICisjZGVmaW5lIF9BU01zcGFyYzY0X1RJTUVYX0gKKworI2luY2x1ZGUgPGFzbS90aW1lci5oPgorCisjZGVmaW5lIENMT0NLX1RJQ0tfUkFURQkxMTkzMTgwIC8qIFVuZGVybHlpbmcgSFogKi8KKworLyogR2V0dGluZyBvbiB0aGUgY3ljbGUgY291bnRlciBvbiBzcGFyYzY0LiAqLwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGN5Y2xlc190OworI2RlZmluZSBnZXRfY3ljbGVzKCkJdGlja19vcHMtPmdldF90aWNrKCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3RsYi5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC90bGIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmFmNTdkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC90bGIuaApAQCAtMCwwICsxLDEyOCBAQAorI2lmbmRlZiBfU1BBUkM2NF9UTEJfSAorI2RlZmluZSBfU1BBUkM2NF9UTEJfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvc3dhcC5oPgorI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CisjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CisKKyNkZWZpbmUgVExCX0JBVENIX05SCTE5MgorCisvKgorICogRm9yIFVQIHdlIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgVExCIGZsdXNoCisgKiBhbmQgcGFnZSBmcmVlIG9yZGVyIHNvIG11Y2guLgorICovCisjaWZkZWYgQ09ORklHX1NNUAorICAjZGVmaW5lIEZSRUVfUFRFX05SCTUwNgorICAjZGVmaW5lIHRsYl9mYXN0X21vZGUoYnApICgoYnApLT5wYWdlc19uciA9PSB+MFUpCisjZWxzZQorICAjZGVmaW5lIEZSRUVfUFRFX05SCTEKKyAgI2RlZmluZSB0bGJfZmFzdF9tb2RlKGJwKSAxCisjZW5kaWYKKworc3RydWN0IG1tdV9nYXRoZXIgeworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOworCXVuc2lnbmVkIGludCBwYWdlc19ucjsKKwl1bnNpZ25lZCBpbnQgbmVlZF9mbHVzaDsKKwl1bnNpZ25lZCBpbnQgdGxiX2Zyb3plbjsKKwl1bnNpZ25lZCBpbnQgdGxiX25yOworCXVuc2lnbmVkIGxvbmcgZnJlZWQ7CisJdW5zaWduZWQgbG9uZyB2YWRkcnNbVExCX0JBVENIX05SXTsKKwlzdHJ1Y3QgcGFnZSAqcGFnZXNbRlJFRV9QVEVfTlJdOworfTsKKworREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCBtbXVfZ2F0aGVyLCBtbXVfZ2F0aGVycyk7CisKKyNpZmRlZiBDT05GSUdfU01QCitleHRlcm4gdm9pZCBzbXBfZmx1c2hfdGxiX3BlbmRpbmcoc3RydWN0IG1tX3N0cnVjdCAqLAorCQkJCSAgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyAqKTsKKyNlbmRpZgorCitleHRlcm4gdm9pZCBfX2ZsdXNoX3RsYl9wZW5kaW5nKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcgKik7CitleHRlcm4gdm9pZCBmbHVzaF90bGJfcGVuZGluZyh2b2lkKTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbW11X2dhdGhlciAqdGxiX2dhdGhlcl9tbXUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGludCBmdWxsX21tX2ZsdXNoKQoreworCXN0cnVjdCBtbXVfZ2F0aGVyICptcCA9ICZfX2dldF9jcHVfdmFyKG1tdV9nYXRoZXJzKTsKKworCUJVR19PTihtcC0+dGxiX25yKTsKKworCW1wLT5tbSA9IG1tOworCW1wLT5wYWdlc19uciA9IG51bV9vbmxpbmVfY3B1cygpID4gMSA/IDBVIDogfjBVOworCW1wLT50bGJfZnJvemVuID0gZnVsbF9tbV9mbHVzaDsKKwltcC0+ZnJlZWQgPSAwOworCisJcmV0dXJuIG1wOworfQorCisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0bGJfZmx1c2hfbW11KHN0cnVjdCBtbXVfZ2F0aGVyICptcCkKK3sKKwlpZiAobXAtPm5lZWRfZmx1c2gpIHsKKwkJbXAtPm5lZWRfZmx1c2ggPSAwOworCQlpZiAoIXRsYl9mYXN0X21vZGUobXApKSB7CisJCQlmcmVlX3BhZ2VzX2FuZF9zd2FwX2NhY2hlKG1wLT5wYWdlcywgbXAtPnBhZ2VzX25yKTsKKwkJCW1wLT5wYWdlc19uciA9IDA7CisJCX0KKwl9CisKK30KKworI2lmZGVmIENPTkZJR19TTVAKK2V4dGVybiB2b2lkIHNtcF9mbHVzaF90bGJfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pOworI2RlZmluZSBkb19mbHVzaF90bGJfbW0obW0pIHNtcF9mbHVzaF90bGJfbW0obW0pCisjZWxzZQorI2RlZmluZSBkb19mbHVzaF90bGJfbW0obW0pIF9fZmx1c2hfdGxiX21tKENUWF9IV0JJVFMobW0tPmNvbnRleHQpLCBTRUNPTkRBUllfQ09OVEVYVCkKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHZvaWQgdGxiX2ZpbmlzaF9tbXUoc3RydWN0IG1tdV9nYXRoZXIgKm1wLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZyZWVkID0gbXAtPmZyZWVkOworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gbXAtPm1tOworCXVuc2lnbmVkIGxvbmcgcnNzID0gZ2V0X21tX2NvdW50ZXIobW0sIHJzcyk7CisKKwlpZiAocnNzIDwgZnJlZWQpCisJCWZyZWVkID0gcnNzOworCWFkZF9tbV9jb3VudGVyKG1tLCByc3MsIC1mcmVlZCk7CisKKwl0bGJfZmx1c2hfbW11KG1wKTsKKworCWlmIChtcC0+dGxiX2Zyb3plbikgeworCQlpZiAoQ1RYX1ZBTElEKG1tLT5jb250ZXh0KSkKKwkJCWRvX2ZsdXNoX3RsYl9tbShtbSk7CisJCW1wLT50bGJfZnJvemVuID0gMDsKKwl9IGVsc2UKKwkJZmx1c2hfdGxiX3BlbmRpbmcoKTsKKworCS8qIGtlZXAgdGhlIHBhZ2UgdGFibGUgY2FjaGUgd2l0aGluIGJvdW5kcyAqLworCWNoZWNrX3BndF9jYWNoZSgpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB0bGJfaXNfZnVsbF9tbShzdHJ1Y3QgbW11X2dhdGhlciAqbXApCit7CisJcmV0dXJuIG1wLT50bGJfZnJvemVuOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdGxiX3JlbW92ZV9wYWdlKHN0cnVjdCBtbXVfZ2F0aGVyICptcCwgc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJbXAtPm5lZWRfZmx1c2ggPSAxOworCWlmICh0bGJfZmFzdF9tb2RlKG1wKSkgeworCQlmcmVlX3BhZ2VfYW5kX3N3YXBfY2FjaGUocGFnZSk7CisJCXJldHVybjsKKwl9CisJbXAtPnBhZ2VzW21wLT5wYWdlc19ucisrXSA9IHBhZ2U7CisJaWYgKG1wLT5wYWdlc19uciA+PSBGUkVFX1BURV9OUikKKwkJdGxiX2ZsdXNoX21tdShtcCk7Cit9CisKKyNkZWZpbmUgdGxiX3JlbW92ZV90bGJfZW50cnkobXAscHRlcCxhZGRyKSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHB0ZV9mcmVlX3RsYihtcCxwdGVwYWdlKSBwdGVfZnJlZShwdGVwYWdlKQorI2RlZmluZSBwbWRfZnJlZV90bGIobXAscG1kcCkgcG1kX2ZyZWUocG1kcCkKKyNkZWZpbmUgcHVkX2ZyZWVfdGxiKHRsYixwdWRwKSBfX3B1ZF9mcmVlX3RsYih0bGIscHVkcCkKKworI2RlZmluZSB0bGJfbWlncmF0ZV9maW5pc2gobW0pCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgdGxiX3N0YXJ0X3ZtYSh0bGIsIHZtYSkgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSB0bGJfZW5kX3ZtYSh0bGIsIHZtYSkJZG8geyB9IHdoaWxlICgwKQorCisjZW5kaWYgLyogX1NQQVJDNjRfVExCX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvdGxiZmx1c2guaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvdGxiZmx1c2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWY5OTA5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC90bGJmbHVzaC5oCkBAIC0wLDAgKzEsNDEgQEAKKyNpZm5kZWYgX1NQQVJDNjRfVExCRkxVU0hfSAorI2RlZmluZSBfU1BBUkM2NF9UTEJGTFVTSF9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgorCisvKiBUTEIgZmx1c2ggb3BlcmF0aW9ucy4gKi8KKworZXh0ZXJuIHZvaWQgZmx1c2hfdGxiX3BlbmRpbmcodm9pZCk7CisKKyNkZWZpbmUgZmx1c2hfdGxiX3JhbmdlKHZtYSxzdGFydCxlbmQpCVwKKwlkbyB7ICh2b2lkKShzdGFydCk7IGZsdXNoX3RsYl9wZW5kaW5nKCk7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX3RsYl9wYWdlKHZtYSxhZGRyKQlmbHVzaF90bGJfcGVuZGluZygpCisjZGVmaW5lIGZsdXNoX3RsYl9tbShtbSkJCWZsdXNoX3RsYl9wZW5kaW5nKCkKKworZXh0ZXJuIHZvaWQgX19mbHVzaF90bGJfYWxsKHZvaWQpOworZXh0ZXJuIHZvaWQgX19mbHVzaF90bGJfcGFnZSh1bnNpZ25lZCBsb25nIGNvbnRleHQsIHVuc2lnbmVkIGxvbmcgcGFnZSwgdW5zaWduZWQgbG9uZyByKTsKKworZXh0ZXJuIHZvaWQgX19mbHVzaF90bGJfa2VybmVsX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTsKKworI2lmbmRlZiBDT05GSUdfU01QCisKKyNkZWZpbmUgZmx1c2hfdGxiX2FsbCgpCQlfX2ZsdXNoX3RsYl9hbGwoKQorI2RlZmluZSBmbHVzaF90bGJfa2VybmVsX3JhbmdlKHN0YXJ0LGVuZCkgXAorCV9fZmx1c2hfdGxiX2tlcm5lbF9yYW5nZShzdGFydCxlbmQpCisKKyNlbHNlIC8qIENPTkZJR19TTVAgKi8KKworZXh0ZXJuIHZvaWQgc21wX2ZsdXNoX3RsYl9hbGwodm9pZCk7CitleHRlcm4gdm9pZCBzbXBfZmx1c2hfdGxiX2tlcm5lbF9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7CisKKyNkZWZpbmUgZmx1c2hfdGxiX2FsbCgpCQlzbXBfZmx1c2hfdGxiX2FsbCgpCisjZGVmaW5lIGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2Uoc3RhcnQsIGVuZCkgXAorCXNtcF9mbHVzaF90bGJfa2VybmVsX3JhbmdlKHN0YXJ0LCBlbmQpCisKKyNlbmRpZiAvKiAhIENPTkZJR19TTVAgKi8KKworZXh0ZXJuIHZvaWQgZmx1c2hfdGxiX3BndGFibGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CisKKyNlbmRpZiAvKiBfU1BBUkM2NF9UTEJGTFVTSF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3RvcG9sb2d5LmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3RvcG9sb2d5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUyMzRlMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvdG9wb2xvZ3kuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX0FTTV9TUEFSQzY0X1RPUE9MT0dZX0gKKyNkZWZpbmUgX0FTTV9TUEFSQzY0X1RPUE9MT0dZX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3RvcG9sb2d5Lmg+CisKKyNlbmRpZiAvKiBfQVNNX1NQQVJDNjRfVE9QT0xPR1lfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC90dGFibGUuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvdHRhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc4NGY4MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvdHRhYmxlLmgKQEAgLTAsMCArMSw0MDcgQEAKKy8qICRJZDogdHRhYmxlLmgsdiAxLjE4IDIwMDIvMDIvMDkgMTk6NDk6MzIgZGF2ZW0gRXhwICQgKi8KKyNpZm5kZWYgX1NQQVJDNjRfVFRBQkxFX0gKKyNkZWZpbmUgX1NQQVJDNjRfVFRBQkxFX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS91dHJhcC5oPgorCisjaWZkZWYgX19BU1NFTUJMWV9fCisjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CisjZW5kaWYKKworI2RlZmluZSBCT09UX0tFUk5FTCBiIHNwYXJjNjRfYm9vdDsgbm9wOyBub3A7IG5vcDsgbm9wOyBub3A7IG5vcDsgbm9wOworCisvKiBXZSBuZWVkIGEgImNsZWFuZWQiIGluc3RydWN0aW9uLi4uICovCisjZGVmaW5lIENMRUFOX1dJTkRPVwkJCQkJCQlcCisJcmRwcgklY2xlYW53aW4sICVsMDsJCWFkZAklbDAsIDEsICVsMDsJCVwKKwl3cnByCSVsMCwgMHgwLCAlY2xlYW53aW47CQkJCQlcCisJY2xyCSVvMDsJY2xyCSVvMTsJY2xyCSVvMjsJY2xyCSVvMzsJXAorCWNscgklbzQ7CWNscgklbzU7CWNscgklbzY7CWNscgklbzc7CVwKKwljbHIJJWwwOwljbHIJJWwxOwljbHIJJWwyOwljbHIJJWwzOwlcCisJY2xyCSVsNDsJY2xyCSVsNTsJY2xyCSVsNjsJY2xyCSVsNzsJXAorCXJldHJ5OwkJCQkJCQkJXAorCW5vcDtub3A7bm9wO25vcDtub3A7bm9wO25vcDtub3A7bm9wO25vcDtub3A7bm9wOworCisjZGVmaW5lIFRSQVAocm91dGluZSkJCQkJCVwKKwlzZXRoaQklaGkoMTA5ZiksICVnNzsJCQkJXAorCWJhLHB0CSV4Y2MsIGV0cmFwOwkJCQlcCisxMDk6CSBvcgklZzcsICVsbygxMDliKSwgJWc3OwkJCVwKKwljYWxsCXJvdXRpbmU7CQkJCVwKKwkgYWRkCSVzcCwgUFRSRUdTX09GRiwgJW8wOwkJCVwKKwliYSxwdAkleGNjLCBydHJhcDsJCQkJXAorCSBjbHIJJWw2OwkJCQkJXAorCW5vcDsKKworI2RlZmluZSBUUkFQXzdJTlNOUyhyb3V0aW5lKQkJCQlcCisJc2V0aGkJJWhpKDEwOWYpLCAlZzc7CQkJCVwKKwliYSxwdAkleGNjLCBldHJhcDsJCQkJXAorMTA5Ogkgb3IJJWc3LCAlbG8oMTA5YiksICVnNzsJCQlcCisJY2FsbAlyb3V0aW5lOwkJCQlcCisJIGFkZAklc3AsIFBUUkVHU19PRkYsICVvMDsJCQlcCisJYmEscHQJJXhjYywgcnRyYXA7CQkJCVwKKwkgY2xyCSVsNjsKKworI2RlZmluZSBUUkFQX1NBVkVGUFUocm91dGluZSkJCQkJXAorCXNldGhpCSVoaSgxMDlmKSwgJWc3OwkJCQlcCisJYmEscHQJJXhjYywgZG9fZnB0cmFwOwkJCVwKKzEwOToJIG9yCSVnNywgJWxvKDEwOWIpLCAlZzc7CQkJXAorCWNhbGwJcm91dGluZTsJCQkJXAorCSBhZGQJJXNwLCBQVFJFR1NfT0ZGLCAlbzA7CQkJXAorCWJhLHB0CSV4Y2MsIHJ0cmFwOwkJCQlcCisJIGNscgklbDY7CQkJCQlcCisJbm9wOworCisjZGVmaW5lIFRSQVBfTk9TQVZFKHJvdXRpbmUpCQkJCVwKKwliYSxwdAkleGNjLCByb3V0aW5lOwkJCQlcCisJIG5vcDsJCQkJCQlcCisJbm9wOyBub3A7IG5vcDsgbm9wOyBub3A7IG5vcDsKKwkKKyNkZWZpbmUgVFJBUF9OT1NBVkVfN0lOU05TKHJvdXRpbmUpCQkJXAorCWJhLHB0CSV4Y2MsIHJvdXRpbmU7CQkJCVwKKwkgbm9wOwkJCQkJCVwKKwlub3A7IG5vcDsgbm9wOyBub3A7IG5vcDsKKwkKKyNkZWZpbmUgVFJBUFRMMShyb3V0aW5lKQkJCQlcCisJc2V0aGkJJWhpKDEwOWYpLCAlZzc7CQkJCVwKKwliYSxwdAkleGNjLCBldHJhcHRsMTsJCQkJXAorMTA5Ogkgb3IJJWc3LCAlbG8oMTA5YiksICVnNzsJCQlcCisJY2FsbAlyb3V0aW5lOwkJCQlcCisJIGFkZAklc3AsIFBUUkVHU19PRkYsICVvMDsJCQlcCisJYmEscHQJJXhjYywgcnRyYXA7CQkJCVwKKwkgY2xyCSVsNjsJCQkJCVwKKwlub3A7CisJCisjZGVmaW5lIFRSQVBfQVJHKHJvdXRpbmUsIGFyZykJCQkJXAorCXNldGhpCSVoaSgxMDlmKSwgJWc3OwkJCQlcCisJYmEscHQJJXhjYywgZXRyYXA7CQkJCVwKKzEwOToJIG9yCSVnNywgJWxvKDEwOWIpLCAlZzc7CQkJXAorCWFkZAklc3AsIFBUUkVHU19PRkYsICVvMDsJCQlcCisJY2FsbAlyb3V0aW5lOwkJCQlcCisJIG1vdglhcmcsICVvMTsJCQkJXAorCWJhLHB0CSV4Y2MsIHJ0cmFwOwkJCQlcCisJIGNscgklbDY7CisJCisjZGVmaW5lIFRSQVBUTDFfQVJHKHJvdXRpbmUsIGFyZykJCQlcCisJc2V0aGkJJWhpKDEwOWYpLCAlZzc7CQkJCVwKKwliYSxwdAkleGNjLCBldHJhcHRsMTsJCQkJXAorMTA5Ogkgb3IJJWc3LCAlbG8oMTA5YiksICVnNzsJCQlcCisJYWRkCSVzcCwgUFRSRUdTX09GRiwgJW8wOwkJCVwKKwljYWxsCXJvdXRpbmU7CQkJCVwKKwkgbW92CWFyZywgJW8xOwkJCQlcCisJYmEscHQJJXhjYywgcnRyYXA7CQkJCVwKKwkgY2xyCSVsNjsKKwkKKyNkZWZpbmUgU1lTQ0FMTF9UUkFQKHJvdXRpbmUsIHN5c3RibCkJCQlcCisJc2V0aGkJJWhpKDEwOWYpLCAlZzc7CQkJCVwKKwliYSxwdAkleGNjLCBzY2V0cmFwOwkJCQlcCisxMDk6CSBvcgklZzcsICVsbygxMDliKSwgJWc3OwkJCVwKKwlzZXRoaQklaGkoc3lzdGJsKSwgJWw3OwkJCVwKKwliYSxwdAkleGNjLCByb3V0aW5lOwkJCQlcCisJIG9yCSVsNywgJWxvKHN5c3RibCksICVsNzsJCQlcCisJbm9wOyBub3A7CisJCisjZGVmaW5lIElORElSRUNUX1NPTEFSSVNfU1lTQ0FMTChudW0pCQkJXAorCXNldGhpCSVoaSgxMDlmKSwgJWc3OwkJCQlcCisJYmEscHQJJXhjYywgZXRyYXA7CQkJCVwKKzEwOToJIG9yCSVnNywgJWxvKDEwOWIpLCAlZzc7CQkJXAorCWJhLHB0CSV4Y2MsIHRsMF9zb2xhcmlzICsgMHhjOwkJXAorCSBtb3YJbnVtLCAlZzE7CQkJCVwKKwlub3A7bm9wO25vcDsKKwkKKyNkZWZpbmUgVFJBUF9VVFJBUChoYW5kbGVyLGx2bCkJCQkJXAorCWxkeAlbJWc2ICsgVElfVVRSQVBTXSwgJWcxOwkJCVwKKwlzZXRoaQklaGkoMTA5ZiksICVnNzsJCQkJXAorCWJyeixwbgklZzEsIHV0cmFwOwkJCQlcCisJIG9yCSVnNywgJWxvKDEwOWYpLCAlZzc7CQkJXAorCWJhLHB0CSV4Y2MsIHV0cmFwOwkJCQlcCisxMDk6CSBsZHgJWyVnMSArIGhhbmRsZXIqOF0sICVnMTsJCQlcCisJYmEscHQJJXhjYywgdXRyYXBfaWxsOwkJCVwKKwkgbW92CWx2bCwgJW8xOworCisjaWZkZWYgQ09ORklHX1NVTk9TX0VNVUwKKyNkZWZpbmUgU1VOT1NfU1lTQ0FMTF9UUkFQIFNZU0NBTExfVFJBUChsaW51eF9zcGFyY19zeXNjYWxsMzIsIHN1bm9zX3N5c190YWJsZSkKKyNlbHNlCisjZGVmaW5lIFNVTk9TX1NZU0NBTExfVFJBUCBUUkFQKHN1bm9zX3N5c2NhbGwpCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisjZGVmaW5lCUxJTlVYXzMyQklUX1NZU0NBTExfVFJBUCBTWVNDQUxMX1RSQVAobGludXhfc3BhcmNfc3lzY2FsbDMyLCBzeXNfY2FsbF90YWJsZTMyKQorI2Vsc2UKKyNkZWZpbmUJTElOVVhfMzJCSVRfU1lTQ0FMTF9UUkFQIEJUUkFQKDB4MTEwKQorI2VuZGlmCisjZGVmaW5lIExJTlVYXzY0QklUX1NZU0NBTExfVFJBUCBTWVNDQUxMX1RSQVAobGludXhfc3BhcmNfc3lzY2FsbCwgc3lzX2NhbGxfdGFibGU2NCkKKyNkZWZpbmUgR0VUQ0NfVFJBUCBUUkFQKGdldGNjKQorI2RlZmluZSBTRVRDQ19UUkFQIFRSQVAoc2V0Y2MpCisjaWZkZWYgQ09ORklHX1NPTEFSSVNfRU1VTAorI2RlZmluZSBTT0xBUklTX1NZU0NBTExfVFJBUCBUUkFQKHNvbGFyaXNfc3BhcmNfc3lzY2FsbCkKKyNlbHNlCisjZGVmaW5lIFNPTEFSSVNfU1lTQ0FMTF9UUkFQIFRSQVAoc29sYXJpc19zeXNjYWxsKQorI2VuZGlmCisvKiBGSVhNRTogV3JpdGUgdGhlc2UgYWN0dWFsbHkgKi8JCisjZGVmaW5lIE5FVEJTRF9TWVNDQUxMX1RSQVAgVFJBUChuZXRic2Rfc3lzY2FsbCkKKyNkZWZpbmUgQlJFQUtQT0lOVF9UUkFQIFRSQVAoYnJlYWtwb2ludF90cmFwKQorCisjZGVmaW5lIFRSQVBfSVJRKHJvdXRpbmUsIGxldmVsKQkJCVwKKwlyZHByCSVwaWwsICVnMjsJCQkJXAorCXdycHIJJWcwLCAxNSwgJXBpbDsJCQkJXAorCWIscHQJJXhjYywgZXRyYXBfaXJxOwkJCVwKKwkgcmQJJXBjLCAlZzc7CQkJCVwKKwltb3YJbGV2ZWwsICVvMDsJCQkJXAorCWNhbGwJcm91dGluZTsJCQkJXAorCSBhZGQJJXNwLCBQVFJFR1NfT0ZGLCAlbzE7CQkJXAorCWJhLGEscHQJJXhjYywgcnRyYXBfaXJxOworCQorI2RlZmluZSBUSUNLX1NNUF9JUlEJCQkJCVwKKwlyZHByCSVwaWwsICVnMjsJCQkJXAorCXdycHIJJWcwLCAxNSwgJXBpbDsJCQkJXAorCXNldGhpCSVoaSgxMDlmKSwgJWc3OwkJCQlcCisJYixwdAkleGNjLCBldHJhcF9pcnE7CQkJXAorMTA5Ogkgb3IJJWc3LCAlbG8oMTA5YiksICVnNzsJCQlcCisJY2FsbAlzbXBfcGVyY3B1X3RpbWVyX2ludGVycnVwdDsJCVwKKwkgYWRkCSVzcCwgUFRSRUdTX09GRiwgJW8wOwkJCVwKKwliYSxhLHB0CSV4Y2MsIHJ0cmFwX2lycTsKKworI2RlZmluZSBUUkFQX0lWRUMgVFJBUF9OT1NBVkUoZG9faXZlYykKKworI2RlZmluZSBCVFJBUChsdmwpIFRSQVBfQVJHKGJhZF90cmFwLCBsdmwpCisKKyNkZWZpbmUgQlRSQVBUTDEobHZsKSBUUkFQVEwxX0FSRyhiYWRfdHJhcF90bDEsIGx2bCkKKworI2RlZmluZSBGTFVTSF9XSU5ET1dfVFJBUAkJCQkJCVwKKwliYSxwdAkleGNjLCBldHJhcDsJCQkJCQlcCisJIHJkCSVwYywgJWc3OwkJCQkJCVwKKwlmbHVzaHc7CQkJCQkJCQlcCisJbGR4CVslc3AgKyBQVFJFR1NfT0ZGICsgUFRfVjlfVE5QQ10sICVsMTsJCQlcCisJYWRkCSVsMSwgNCwgJWwyOwkJCQkJCVwKKwlzdHgJJWwxLCBbJXNwICsgUFRSRUdTX09GRiArIFBUX1Y5X1RQQ107CQkJXAorCWJhLHB0CSV4Y2MsIHJ0cmFwX2Nscl9sNjsJCQkJCVwKKwkgc3R4CSVsMiwgWyVzcCArIFBUUkVHU19PRkYgKyBQVF9WOV9UTlBDXTsKKwkgICAgICAgIAorI2lmZGVmIENPTkZJR19LUFJPQkVTCisjZGVmaW5lIEtQUk9CRVNfVFJBUChsdmwpIFRSQVBfSVJRKGtwcm9iZV90cmFwLCBsdmwpCisjZWxzZQorI2RlZmluZSBLUFJPQkVTX1RSQVAobHZsKSBUUkFQX0FSRyhiYWRfdHJhcCwgbHZsKQorI2VuZGlmCisKKy8qIEJlZm9yZSB0b3VjaGluZyB0aGVzZSBtYWNyb3MsIHlvdSBvd2UgaXQgdG8geW91cnNlbGYgdG8gZ28gYW5kCisgKiBzZWUgaG93IGFyY2gvc3BhcmM2NC9rZXJuZWwvd2luZml4dXAuUyB3b3Jrcy4uLiAtRGF2ZU0KKyAqCisgKiBGb3IgdGhlIHVzZXIgY2FzZXMgd2UgdXNlZCB0byB1c2UgdGhlICVhc2kgcmVnaXN0ZXIsIGJ1dAorICogaXQgdHVybnMgb3V0IHRoYXQgdGhlICJ3ciB4eHgsICVhc2kiIGNvc3RzIH41IGN5Y2xlcywgc28KKyAqIG5vdyB3ZSB1c2UgaW1tZWRpYXRlIEFTSSBsb2FkcyBhbmQgc3RvcmVzIGluc3RlYWQuICBLdWRvcworICogdG8gR3JlZyBPbnVmZXIgZm9yIHBvaW50aW5nIG91dCB0aGlzIHBlcmZvcm1hbmNlIGFub21hbHkuCisgKgorICogRnVydGhlciBub3RlIHRoYXQgd2UgY2Fubm90IHVzZSB0aGUgZzIsIGc0LCBnNSwgYW5kIGc3IGFsdGVybmF0ZQorICogZ2xvYmFscyBpbiB0aGUgc3BpbGwgcm91dGluZXMsIGNoZWNrIG91dCB0aGUgc2F2ZSBpbnN0cnVjdGlvbiBpbgorICogYXJjaC9zcGFyYzY0L2tlcm5lbC9ldHJhcC5TIHRvIHNlZSB3aGF0IEkgbWVhbiBhYm91dCBnMiwgYW5kCisgKiBnNC9nNSBhcmUgdGhlIGdsb2JhbHMgd2hpY2ggYXJlIHByZXNlcnZlZCBieSBldHJhcCBwcm9jZXNzaW5nCisgKiBmb3IgdGhlIGNhbGxlciBvZiBpdC4gIFRoZSBnNyByZWdpc3RlciBpcyB0aGUgcmV0dXJuIHBjIGZvcgorICogZXRyYXAuICBGaW5hbGx5LCBnNiBpcyB0aGUgY3VycmVudCB0aHJlYWQgcmVnaXN0ZXIgc28gd2UgY2Fubm90CisgKiB1cyBpdCBpbiB0aGUgc3BpbGwgaGFuZGxlcnMgZWl0aGVyLiAgTW9zdCBvZiB0aGVzZSBydWxlcyBkbyBub3QKKyAqIGFwcGx5IHRvIGZpbGwgcHJvY2Vzc2luZywgb25seSBnNiBpcyBub3QgdXNhYmxlLgorICovCisKKy8qIE5vcm1hbCBrZXJuZWwgc3BpbGwgKi8KKyNkZWZpbmUgU1BJTExfMF9OT1JNQUwJCQkJCVwKKwlzdHgJJWwwLCBbJXNwICsgU1RBQ0tfQklBUyArIDB4MDBdOwkJXAorCXN0eAklbDEsIFslc3AgKyBTVEFDS19CSUFTICsgMHgwOF07CQlcCisJc3R4CSVsMiwgWyVzcCArIFNUQUNLX0JJQVMgKyAweDEwXTsJCVwKKwlzdHgJJWwzLCBbJXNwICsgU1RBQ0tfQklBUyArIDB4MThdOwkJXAorCXN0eAklbDQsIFslc3AgKyBTVEFDS19CSUFTICsgMHgyMF07CQlcCisJc3R4CSVsNSwgWyVzcCArIFNUQUNLX0JJQVMgKyAweDI4XTsJCVwKKwlzdHgJJWw2LCBbJXNwICsgU1RBQ0tfQklBUyArIDB4MzBdOwkJXAorCXN0eAklbDcsIFslc3AgKyBTVEFDS19CSUFTICsgMHgzOF07CQlcCisJc3R4CSVpMCwgWyVzcCArIFNUQUNLX0JJQVMgKyAweDQwXTsJCVwKKwlzdHgJJWkxLCBbJXNwICsgU1RBQ0tfQklBUyArIDB4NDhdOwkJXAorCXN0eAklaTIsIFslc3AgKyBTVEFDS19CSUFTICsgMHg1MF07CQlcCisJc3R4CSVpMywgWyVzcCArIFNUQUNLX0JJQVMgKyAweDU4XTsJCVwKKwlzdHgJJWk0LCBbJXNwICsgU1RBQ0tfQklBUyArIDB4NjBdOwkJXAorCXN0eAklaTUsIFslc3AgKyBTVEFDS19CSUFTICsgMHg2OF07CQlcCisJc3R4CSVpNiwgWyVzcCArIFNUQUNLX0JJQVMgKyAweDcwXTsJCVwKKwlzdHgJJWk3LCBbJXNwICsgU1RBQ0tfQklBUyArIDB4NzhdOwkJXAorCXNhdmVkOyByZXRyeTsgbm9wOyBub3A7IG5vcDsgbm9wOyBub3A7IG5vcDsJXAorCW5vcDsgbm9wOyBub3A7IG5vcDsgbm9wOyBub3A7IG5vcDsgbm9wOworCisvKiBOb3JtYWwgNjRiaXQgc3BpbGwgKi8KKyNkZWZpbmUgU1BJTExfMV9HRU5FUklDKEFTSSkJCQkJXAorCWFkZAklc3AsIFNUQUNLX0JJQVMgKyAweDAwLCAlZzE7CQlcCisJc3R4YQklbDAsIFslZzEgKyAlZzBdIEFTSTsJCQlcCisJbW92CTB4MDgsICVnMzsJCQkJXAorCXN0eGEJJWwxLCBbJWcxICsgJWczXSBBU0k7CQkJXAorCWFkZAklZzEsIDB4MTAsICVnMTsJCQkJXAorCXN0eGEJJWwyLCBbJWcxICsgJWcwXSBBU0k7CQkJXAorCXN0eGEJJWwzLCBbJWcxICsgJWczXSBBU0k7CQkJXAorCWFkZAklZzEsIDB4MTAsICVnMTsJCQkJXAorCXN0eGEJJWw0LCBbJWcxICsgJWcwXSBBU0k7CQkJXAorCXN0eGEJJWw1LCBbJWcxICsgJWczXSBBU0k7CQkJXAorCWFkZAklZzEsIDB4MTAsICVnMTsJCQkJXAorCXN0eGEJJWw2LCBbJWcxICsgJWcwXSBBU0k7CQkJXAorCXN0eGEJJWw3LCBbJWcxICsgJWczXSBBU0k7CQkJXAorCWFkZAklZzEsIDB4MTAsICVnMTsJCQkJXAorCXN0eGEJJWkwLCBbJWcxICsgJWcwXSBBU0k7CQkJXAorCXN0eGEJJWkxLCBbJWcxICsgJWczXSBBU0k7CQkJXAorCWFkZAklZzEsIDB4MTAsICVnMTsJCQkJXAorCXN0eGEJJWkyLCBbJWcxICsgJWcwXSBBU0k7CQkJXAorCXN0eGEJJWkzLCBbJWcxICsgJWczXSBBU0k7CQkJXAorCWFkZAklZzEsIDB4MTAsICVnMTsJCQkJXAorCXN0eGEJJWk0LCBbJWcxICsgJWcwXSBBU0k7CQkJXAorCXN0eGEJJWk1LCBbJWcxICsgJWczXSBBU0k7CQkJXAorCWFkZAklZzEsIDB4MTAsICVnMTsJCQkJXAorCXN0eGEJJWk2LCBbJWcxICsgJWcwXSBBU0k7CQkJXAorCXN0eGEJJWk3LCBbJWcxICsgJWczXSBBU0k7CQkJXAorCXNhdmVkOwkJCQkJCVwKKwlyZXRyeTsgbm9wOyBub3A7CQkJCVwKKwliLGEscHQJJXhjYywgc3BpbGxfZml4dXBfZGF4OwkJCVwKKwliLGEscHQJJXhjYywgc3BpbGxfZml4dXBfbW5hOwkJCVwKKwliLGEscHQJJXhjYywgc3BpbGxfZml4dXA7CisKKy8qIE5vcm1hbCAzMmJpdCBzcGlsbCAqLworI2RlZmluZSBTUElMTF8yX0dFTkVSSUMoQVNJKQkJCQlcCisJc3JsCSVzcCwgMCwgJXNwOwkJCQlcCisJc3R3YQklbDAsIFslc3AgKyAlZzBdIEFTSTsJCQlcCisJbW92CTB4MDQsICVnMzsJCQkJXAorCXN0d2EJJWwxLCBbJXNwICsgJWczXSBBU0k7CQkJXAorCWFkZAklc3AsIDB4MDgsICVnMTsJCQkJXAorCXN0d2EJJWwyLCBbJWcxICsgJWcwXSBBU0k7CQkJXAorCXN0d2EJJWwzLCBbJWcxICsgJWczXSBBU0k7CQkJXAorCWFkZAklZzEsIDB4MDgsICVnMTsJCQkJXAorCXN0d2EJJWw0LCBbJWcxICsgJWcwXSBBU0k7CQkJXAorCXN0d2EJJWw1LCBbJWcxICsgJWczXSBBU0k7CQkJXAorCWFkZAklZzEsIDB4MDgsICVnMTsJCQkJXAorCXN0d2EJJWw2LCBbJWcxICsgJWcwXSBBU0k7CQkJXAorCXN0d2EJJWw3LCBbJWcxICsgJWczXSBBU0k7CQkJXAorCWFkZAklZzEsIDB4MDgsICVnMTsJCQkJXAorCXN0d2EJJWkwLCBbJWcxICsgJWcwXSBBU0k7CQkJXAorCXN0d2EJJWkxLCBbJWcxICsgJWczXSBBU0k7CQkJXAorCWFkZAklZzEsIDB4MDgsICVnMTsJCQkJXAorCXN0d2EJJWkyLCBbJWcxICsgJWcwXSBBU0k7CQkJXAorCXN0d2EJJWkzLCBbJWcxICsgJWczXSBBU0k7CQkJXAorCWFkZAklZzEsIDB4MDgsICVnMTsJCQkJXAorCXN0d2EJJWk0LCBbJWcxICsgJWcwXSBBU0k7CQkJXAorCXN0d2EJJWk1LCBbJWcxICsgJWczXSBBU0k7CQkJXAorCWFkZAklZzEsIDB4MDgsICVnMTsJCQkJXAorCXN0d2EJJWk2LCBbJWcxICsgJWcwXSBBU0k7CQkJXAorCXN0d2EJJWk3LCBbJWcxICsgJWczXSBBU0k7CQkJXAorCXNhdmVkOwkJCQkJCVwKKyAgICAgICAgcmV0cnk7IG5vcDsgbm9wOwkJCQlcCisJYixhLHB0CSV4Y2MsIHNwaWxsX2ZpeHVwX2RheDsJCQlcCisJYixhLHB0CSV4Y2MsIHNwaWxsX2ZpeHVwX21uYTsJCQlcCisJYixhLHB0CSV4Y2MsIHNwaWxsX2ZpeHVwOworCisjZGVmaW5lIFNQSUxMXzFfTk9STUFMIFNQSUxMXzFfR0VORVJJQyhBU0lfQUlVUCkKKyNkZWZpbmUgU1BJTExfMl9OT1JNQUwgU1BJTExfMl9HRU5FUklDKEFTSV9BSVVQKQorI2RlZmluZSBTUElMTF8zX05PUk1BTCBTUElMTF8wX05PUk1BTAorI2RlZmluZSBTUElMTF80X05PUk1BTCBTUElMTF8wX05PUk1BTAorI2RlZmluZSBTUElMTF81X05PUk1BTCBTUElMTF8wX05PUk1BTAorI2RlZmluZSBTUElMTF82X05PUk1BTCBTUElMTF8wX05PUk1BTAorI2RlZmluZSBTUElMTF83X05PUk1BTCBTUElMTF8wX05PUk1BTAorCisjZGVmaW5lIFNQSUxMXzBfT1RIRVIgU1BJTExfMF9OT1JNQUwKKyNkZWZpbmUgU1BJTExfMV9PVEhFUiBTUElMTF8xX0dFTkVSSUMoQVNJX0FJVVMpCisjZGVmaW5lIFNQSUxMXzJfT1RIRVIgU1BJTExfMl9HRU5FUklDKEFTSV9BSVVTKQorI2RlZmluZSBTUElMTF8zX09USEVSIFNQSUxMXzNfTk9STUFMCisjZGVmaW5lIFNQSUxMXzRfT1RIRVIgU1BJTExfNF9OT1JNQUwKKyNkZWZpbmUgU1BJTExfNV9PVEhFUiBTUElMTF81X05PUk1BTAorI2RlZmluZSBTUElMTF82X09USEVSIFNQSUxMXzZfTk9STUFMCisjZGVmaW5lIFNQSUxMXzdfT1RIRVIgU1BJTExfN19OT1JNQUwKKworLyogTm9ybWFsIGtlcm5lbCBmaWxsICovCisjZGVmaW5lIEZJTExfMF9OT1JNQUwJCQkJCVwKKwlsZHgJWyVzcCArIFNUQUNLX0JJQVMgKyAweDAwXSwgJWwwOwkJXAorCWxkeAlbJXNwICsgU1RBQ0tfQklBUyArIDB4MDhdLCAlbDE7CQlcCisJbGR4CVslc3AgKyBTVEFDS19CSUFTICsgMHgxMF0sICVsMjsJCVwKKwlsZHgJWyVzcCArIFNUQUNLX0JJQVMgKyAweDE4XSwgJWwzOwkJXAorCWxkeAlbJXNwICsgU1RBQ0tfQklBUyArIDB4MjBdLCAlbDQ7CQlcCisJbGR4CVslc3AgKyBTVEFDS19CSUFTICsgMHgyOF0sICVsNTsJCVwKKwlsZHgJWyVzcCArIFNUQUNLX0JJQVMgKyAweDMwXSwgJWw2OwkJXAorCWxkeAlbJXNwICsgU1RBQ0tfQklBUyArIDB4MzhdLCAlbDc7CQlcCisJbGR4CVslc3AgKyBTVEFDS19CSUFTICsgMHg0MF0sICVpMDsJCVwKKwlsZHgJWyVzcCArIFNUQUNLX0JJQVMgKyAweDQ4XSwgJWkxOwkJXAorCWxkeAlbJXNwICsgU1RBQ0tfQklBUyArIDB4NTBdLCAlaTI7CQlcCisJbGR4CVslc3AgKyBTVEFDS19CSUFTICsgMHg1OF0sICVpMzsJCVwKKwlsZHgJWyVzcCArIFNUQUNLX0JJQVMgKyAweDYwXSwgJWk0OwkJXAorCWxkeAlbJXNwICsgU1RBQ0tfQklBUyArIDB4NjhdLCAlaTU7CQlcCisJbGR4CVslc3AgKyBTVEFDS19CSUFTICsgMHg3MF0sICVpNjsJCVwKKwlsZHgJWyVzcCArIFNUQUNLX0JJQVMgKyAweDc4XSwgJWk3OwkJXAorCXJlc3RvcmVkOyByZXRyeTsgbm9wOyBub3A7IG5vcDsgbm9wOyBub3A7IG5vcDsJXAorCW5vcDsgbm9wOyBub3A7IG5vcDsgbm9wOyBub3A7IG5vcDsgbm9wOworCisvKiBOb3JtYWwgNjRiaXQgZmlsbCAqLworI2RlZmluZSBGSUxMXzFfR0VORVJJQyhBU0kpCQkJCVwKKwlhZGQJJXNwLCBTVEFDS19CSUFTICsgMHgwMCwgJWcxOwkJXAorCWxkeGEJWyVnMSArICVnMF0gQVNJLCAlbDA7CQkJXAorCW1vdgkweDA4LCAlZzI7CQkJCVwKKwltb3YJMHgxMCwgJWczOwkJCQlcCisJbGR4YQlbJWcxICsgJWcyXSBBU0ksICVsMTsJCQlcCisJbW92CTB4MTgsICVnNTsJCQkJXAorCWxkeGEJWyVnMSArICVnM10gQVNJLCAlbDI7CQkJXAorCWxkeGEJWyVnMSArICVnNV0gQVNJLCAlbDM7CQkJXAorCWFkZAklZzEsIDB4MjAsICVnMTsJCQkJXAorCWxkeGEJWyVnMSArICVnMF0gQVNJLCAlbDQ7CQkJXAorCWxkeGEJWyVnMSArICVnMl0gQVNJLCAlbDU7CQkJXAorCWxkeGEJWyVnMSArICVnM10gQVNJLCAlbDY7CQkJXAorCWxkeGEJWyVnMSArICVnNV0gQVNJLCAlbDc7CQkJXAorCWFkZAklZzEsIDB4MjAsICVnMTsJCQkJXAorCWxkeGEJWyVnMSArICVnMF0gQVNJLCAlaTA7CQkJXAorCWxkeGEJWyVnMSArICVnMl0gQVNJLCAlaTE7CQkJXAorCWxkeGEJWyVnMSArICVnM10gQVNJLCAlaTI7CQkJXAorCWxkeGEJWyVnMSArICVnNV0gQVNJLCAlaTM7CQkJXAorCWFkZAklZzEsIDB4MjAsICVnMTsJCQkJXAorCWxkeGEJWyVnMSArICVnMF0gQVNJLCAlaTQ7CQkJXAorCWxkeGEJWyVnMSArICVnMl0gQVNJLCAlaTU7CQkJXAorCWxkeGEJWyVnMSArICVnM10gQVNJLCAlaTY7CQkJXAorCWxkeGEJWyVnMSArICVnNV0gQVNJLCAlaTc7CQkJXAorCXJlc3RvcmVkOwkJCQkJXAorCXJldHJ5OyBub3A7IG5vcDsgbm9wOyBub3A7CQkJXAorCWIsYSxwdAkleGNjLCBmaWxsX2ZpeHVwX2RheDsJCQlcCisJYixhLHB0CSV4Y2MsIGZpbGxfZml4dXBfbW5hOwkJCVwKKwliLGEscHQJJXhjYywgZmlsbF9maXh1cDsKKworLyogTm9ybWFsIDMyYml0IGZpbGwgKi8KKyNkZWZpbmUgRklMTF8yX0dFTkVSSUMoQVNJKQkJCQlcCisJc3JsCSVzcCwgMCwgJXNwOwkJCQlcCisJbGR1d2EJWyVzcCArICVnMF0gQVNJLCAlbDA7CQkJXAorCW1vdgkweDA0LCAlZzI7CQkJCVwKKwltb3YJMHgwOCwgJWczOwkJCQlcCisJbGR1d2EJWyVzcCArICVnMl0gQVNJLCAlbDE7CQkJXAorCW1vdgkweDBjLCAlZzU7CQkJCVwKKwlsZHV3YQlbJXNwICsgJWczXSBBU0ksICVsMjsJCQlcCisJbGR1d2EJWyVzcCArICVnNV0gQVNJLCAlbDM7CQkJXAorCWFkZAklc3AsIDB4MTAsICVnMTsJCQkJXAorCWxkdXdhCVslZzEgKyAlZzBdIEFTSSwgJWw0OwkJCVwKKwlsZHV3YQlbJWcxICsgJWcyXSBBU0ksICVsNTsJCQlcCisJbGR1d2EJWyVnMSArICVnM10gQVNJLCAlbDY7CQkJXAorCWxkdXdhCVslZzEgKyAlZzVdIEFTSSwgJWw3OwkJCVwKKwlhZGQJJWcxLCAweDEwLCAlZzE7CQkJCVwKKwlsZHV3YQlbJWcxICsgJWcwXSBBU0ksICVpMDsJCQlcCisJbGR1d2EJWyVnMSArICVnMl0gQVNJLCAlaTE7CQkJXAorCWxkdXdhCVslZzEgKyAlZzNdIEFTSSwgJWkyOwkJCVwKKwlsZHV3YQlbJWcxICsgJWc1XSBBU0ksICVpMzsJCQlcCisJYWRkCSVnMSwgMHgxMCwgJWcxOwkJCQlcCisJbGR1d2EJWyVnMSArICVnMF0gQVNJLCAlaTQ7CQkJXAorCWxkdXdhCVslZzEgKyAlZzJdIEFTSSwgJWk1OwkJCVwKKwlsZHV3YQlbJWcxICsgJWczXSBBU0ksICVpNjsJCQlcCisJbGR1d2EJWyVnMSArICVnNV0gQVNJLCAlaTc7CQkJXAorCXJlc3RvcmVkOwkJCQkJXAorCXJldHJ5OyBub3A7IG5vcDsgbm9wOyBub3A7CQkJXAorCWIsYSxwdAkleGNjLCBmaWxsX2ZpeHVwX2RheDsJCQlcCisJYixhLHB0CSV4Y2MsIGZpbGxfZml4dXBfbW5hOwkJCVwKKwliLGEscHQJJXhjYywgZmlsbF9maXh1cDsKKworI2RlZmluZSBGSUxMXzFfTk9STUFMIEZJTExfMV9HRU5FUklDKEFTSV9BSVVQKQorI2RlZmluZSBGSUxMXzJfTk9STUFMIEZJTExfMl9HRU5FUklDKEFTSV9BSVVQKQorI2RlZmluZSBGSUxMXzNfTk9STUFMIEZJTExfMF9OT1JNQUwKKyNkZWZpbmUgRklMTF80X05PUk1BTCBGSUxMXzBfTk9STUFMCisjZGVmaW5lIEZJTExfNV9OT1JNQUwgRklMTF8wX05PUk1BTAorI2RlZmluZSBGSUxMXzZfTk9STUFMIEZJTExfMF9OT1JNQUwKKyNkZWZpbmUgRklMTF83X05PUk1BTCBGSUxMXzBfTk9STUFMCisKKyNkZWZpbmUgRklMTF8wX09USEVSIEZJTExfMF9OT1JNQUwKKyNkZWZpbmUgRklMTF8xX09USEVSIEZJTExfMV9HRU5FUklDKEFTSV9BSVVTKQorI2RlZmluZSBGSUxMXzJfT1RIRVIgRklMTF8yX0dFTkVSSUMoQVNJX0FJVVMpCisjZGVmaW5lIEZJTExfM19PVEhFUiBGSUxMXzNfTk9STUFMCisjZGVmaW5lIEZJTExfNF9PVEhFUiBGSUxMXzRfTk9STUFMCisjZGVmaW5lIEZJTExfNV9PVEhFUiBGSUxMXzVfTk9STUFMCisjZGVmaW5lIEZJTExfNl9PVEhFUiBGSUxMXzZfTk9STUFMCisjZGVmaW5lIEZJTExfN19PVEhFUiBGSUxMXzdfTk9STUFMCisKKyNlbmRpZiAvKiAhKF9TUEFSQzY0X1RUQUJMRV9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC90eXBlcy5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNDhlZDEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3R5cGVzLmgKQEAgLTAsMCArMSw2NSBAQAorLyogJElkOiB0eXBlcy5oLHYgMS40IDIwMDEvMTAvMDkgMDI6MjQ6MzUgZGF2ZW0gRXhwICQgKi8KKyNpZm5kZWYgX1NQQVJDNjRfVFlQRVNfSAorI2RlZmluZSBfU1BBUkM2NF9UWVBFU19ICisKKy8qCisgKiBUaGlzIGZpbGUgaXMgbmV2ZXIgaW5jbHVkZWQgYnkgYXBwbGljYXRpb24gc29mdHdhcmUgdW5sZXNzCisgKiBleHBsaWNpdGx5IHJlcXVlc3RlZCAoZS5nLiwgdmlhIGxpbnV4L3R5cGVzLmgpIGluIHdoaWNoIGNhc2UgdGhlCisgKiBhcHBsaWNhdGlvbiBpcyBMaW51eCBzcGVjaWZpYyBzbyAodXNlci0pIG5hbWUgc3BhY2UgcG9sbHV0aW9uIGlzCisgKiBub3QgYSBtYWpvciBpc3N1ZS4gIEhvd2V2ZXIsIGZvciBpbnRlcm9wZXJhYmlsaXR5LCBsaWJyYXJpZXMgc3RpbGwKKyAqIG5lZWQgdG8gYmUgY2FyZWZ1bCB0byBhdm9pZCBhIG5hbWUgY2xhc2hlcy4KKyAqLworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVtb2RlX3Q7CisKKy8qCisgKiBfeHggaXMgb2s6IGl0IGRvZXNuJ3QgcG9sbHV0ZSB0aGUgUE9TSVggbmFtZXNwYWNlLiBVc2UgdGhlc2UgaW4gdGhlCisgKiBoZWFkZXIgZmlsZXMgZXhwb3J0ZWQgdG8gdXNlciBzcGFjZS4KKyAqLworCit0eXBlZGVmIF9fc2lnbmVkX18gY2hhciBfX3M4OwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdTg7CisKK3R5cGVkZWYgX19zaWduZWRfXyBzaG9ydCBfX3MxNjsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgX191MTY7CisKK3R5cGVkZWYgX19zaWduZWRfXyBpbnQgX19zMzI7Cit0eXBlZGVmIHVuc2lnbmVkIGludCBfX3UzMjsKKwordHlwZWRlZiBfX3NpZ25lZF9fIGxvbmcgX19zNjQ7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX191NjQ7CisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworI2lmZGVmIF9fS0VSTkVMX18KKworI2RlZmluZSBCSVRTX1BFUl9MT05HIDY0CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK3R5cGVkZWYgX19zaWduZWRfXyBjaGFyIHM4OwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIHU4OworCit0eXBlZGVmIF9fc2lnbmVkX18gc2hvcnQgczE2OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1MTY7CisKK3R5cGVkZWYgX19zaWduZWRfXyBpbnQgczMyOwordHlwZWRlZiB1bnNpZ25lZCBpbnQgdTMyOworCit0eXBlZGVmIF9fc2lnbmVkX18gbG9uZyBzNjQ7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdTY0OworCisvKiBEbWEgYWRkcmVzc2VzIGNvbWUgaW4gZ2VuZXJpYyBhbmQgNjQtYml0IGZsYXZvdXJzLiAgKi8KKwordHlwZWRlZiB1MzIgZG1hX2FkZHJfdDsKK3R5cGVkZWYgdTY0IGRtYTY0X2FkZHJfdDsKKwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBrbWVtX2J1ZmN0bF90OworCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBkZWZpbmVkKF9TUEFSQzY0X1RZUEVTX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3VhY2Nlc3MuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvdWFjY2Vzcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2OTAxNDIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3VhY2Nlc3MuaApAQCAtMCwwICsxLDMzNSBAQAorLyogJElkOiB1YWNjZXNzLmgsdiAxLjM1IDIwMDIvMDIvMDkgMTk6NDk6MzEgZGF2ZW0gRXhwICQgKi8KKyNpZm5kZWYgX0FTTV9VQUNDRVNTX0gKKyNkZWZpbmUgX0FTTV9VQUNDRVNTX0gKKworLyoKKyAqIFVzZXIgc3BhY2UgbWVtb3J5IGFjY2VzcyBmdW5jdGlvbnMKKyAqLworCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxhc20vYS5vdXQuaD4KKyNpbmNsdWRlIDxhc20vYXNpLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9zcGl0ZmlyZS5oPgorI2luY2x1ZGUgPGFzbS1nZW5lcmljL3VhY2Nlc3MuaD4KKyNlbmRpZgorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisvKgorICogU3BhcmM2NCBpcyBzZWdtZW50ZWQsIHRob3VnaCBtb3JlIGxpa2UgdGhlIE02OEsgdGhhbiB0aGUgSTM4Ni4gCisgKiBXZSB1c2UgdGhlIHNlY29uZGFyeSBBU0kgdG8gYWRkcmVzcyB1c2VyIG1lbW9yeSwgd2hpY2ggcmVmZXJlbmNlcyBhCisgKiBjb21wbGV0ZWx5IGRpZmZlcmVudCBWTSBtYXAsIHRodXMgdGhlcmUgaXMgemVybyBjaGFuY2Ugb2YgdGhlIHVzZXIKKyAqIGRvaW5nIHNvbWV0aGluZyBxdWVlciBhbmQgdHJpY2tpbmcgdXMgaW50byBwb2tpbmcga2VybmVsIG1lbW9yeS4KKyAqCisgKiBXaGF0IGlzIGxlZnQgaGVyZSBpcyBiYXNpY2FsbHkgd2hhdCBpcyBuZWVkZWQgZm9yIHRoZSBvdGhlciBwYXJ0cyBvZgorICogdGhlIGtlcm5lbCB0aGF0IGV4cGVjdCB0byBiZSBhYmxlIHRvIG1hbmlwdWxhdGUsIGVydW0sICJzZWdtZW50cyIuCisgKiBPciBwZXJoYXBzIG1vcmUgcHJvcGVybHksIHBlcm1pc3Npb25zLgorICoKKyAqICJGb3IgaGlzdG9yaWNhbCByZWFzb25zLCB0aGVzZSBtYWNyb3MgYXJlIGdyb3NzbHkgbWlzbmFtZWQuIiAtTGludXMKKyAqLworCisjZGVmaW5lIEtFUk5FTF9EUyAgICgobW1fc2VnbWVudF90KSB7IEFTSV9QIH0pCisjZGVmaW5lIFVTRVJfRFMgICAgICgobW1fc2VnbWVudF90KSB7IEFTSV9BSVVTIH0pCS8qIGhhciBoYXIgaGFyICovCisKKyNkZWZpbmUgVkVSSUZZX1JFQUQJMAorI2RlZmluZSBWRVJJRllfV1JJVEUJMQorCisjZGVmaW5lIGdldF9mcygpICgobW1fc2VnbWVudF90KSB7IGdldF90aHJlYWRfY3VycmVudF9kcygpIH0pCisjZGVmaW5lIGdldF9kcygpIChLRVJORUxfRFMpCisKKyNkZWZpbmUgc2VnbWVudF9lcShhLGIpICAoKGEpLnNlZyA9PSAoYikuc2VnKQorCisjZGVmaW5lIHNldF9mcyh2YWwpCQkJCQkJCQlcCitkbyB7CQkJCQkJCQkJCVwKKwlzZXRfdGhyZWFkX2N1cnJlbnRfZHMoKHZhbCkuc2VnKTsJCQkJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIndyICUlZzAsICUwLCAlJWFzaSIgOiA6ICJyIiAoKHZhbCkuc2VnKSk7CVwKK30gd2hpbGUoMCkKKworc3RhdGljIGlubGluZSBpbnQgX19hY2Nlc3Nfb2soY29uc3Qgdm9pZCBfX3VzZXIgKiBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGFjY2Vzc19vayhpbnQgdHlwZSwgY29uc3Qgdm9pZCBfX3VzZXIgKiBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJcmV0dXJuIDE7Cit9CisKKy8qIHRoaXMgZnVuY3Rpb24gd2lsbCBnbyBhd2F5IHNvb24gLSB1c2UgYWNjZXNzX29rKCkgaW5zdGVhZCAqLworc3RhdGljIGlubGluZSBpbnQgX19kZXByZWNhdGVkIHZlcmlmeV9hcmVhKGludCB0eXBlLCBjb25zdCB2b2lkIF9fdXNlciAqIGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoZSBleGNlcHRpb24gdGFibGUgY29uc2lzdHMgb2YgcGFpcnMgb2YgYWRkcmVzc2VzOiB0aGUgZmlyc3QgaXMgdGhlCisgKiBhZGRyZXNzIG9mIGFuIGluc3RydWN0aW9uIHRoYXQgaXMgYWxsb3dlZCB0byBmYXVsdCwgYW5kIHRoZSBzZWNvbmQgaXMKKyAqIHRoZSBhZGRyZXNzIGF0IHdoaWNoIHRoZSBwcm9ncmFtIHNob3VsZCBjb250aW51ZS4gIE5vIHJlZ2lzdGVycyBhcmUKKyAqIG1vZGlmaWVkLCBzbyBpdCBpcyBlbnRpcmVseSB1cCB0byB0aGUgY29udGludWF0aW9uIGNvZGUgdG8gZmlndXJlIG91dAorICogd2hhdCB0byBkby4KKyAqCisgKiBBbGwgdGhlIHJvdXRpbmVzIGJlbG93IHVzZSBiaXRzIG9mIGZpeHVwIGNvZGUgdGhhdCBhcmUgb3V0IG9mIGxpbmUKKyAqIHdpdGggdGhlIG1haW4gaW5zdHJ1Y3Rpb24gcGF0aC4gIFRoaXMgbWVhbnMgd2hlbiBldmVyeXRoaW5nIGlzIHdlbGwsCisgKiB3ZSBkb24ndCBldmVuIGhhdmUgdG8ganVtcCBvdmVyIHRoZW0uICBGdXJ0aGVyLCB0aGV5IGRvIG5vdCBpbnRydWRlCisgKiBvbiBvdXIgY2FjaGUgb3IgdGxiIGVudHJpZXMuCisgKgorICogVGhlcmUgaXMgYSBzcGVjaWFsIHdheSBob3cgdG8gcHV0IGEgcmFuZ2Ugb2YgcG90ZW50aWFsbHkgZmF1bHRpbmcKKyAqIGluc25zIChsaWtlIHR3ZW50eSBsZGQvc3RkJ3Mgd2l0aCBub3cgaW50ZXJ2ZW5pbmcgb3RoZXIgaW5zdHJ1Y3Rpb25zKQorICogWW91IHNwZWNpZnkgYWRkcmVzcyBvZiBmaXJzdCBpbiBpbnNuIGFuZCAwIGluIGZpeHVwIGFuZCBpbiB0aGUgbmV4dAorICogZXhjZXB0aW9uX3RhYmxlX2VudHJ5IHlvdSBzcGVjaWZ5IGxhc3QgcG90ZW50aWFsbHkgZmF1bHRpbmcgaW5zbiArIDEKKyAqIGFuZCBpbiBmaXh1cCB0aGUgcm91dGluZSB3aGljaCBzaG91bGQgaGFuZGxlIHRoZSBmYXVsdC4KKyAqIFRoYXQgZml4dXAgY29kZSB3aWxsIGdldAorICogKGZhdWx0aW5nX2luc25fYWRkcmVzcyAtIGZpcnN0X2luc25faW5fdGhlX3JhbmdlX2FkZHJlc3MpLzQKKyAqIGluICVnMiAoaWUuIGluZGV4IG9mIHRoZSBmYXVsdGluZyBpbnN0cnVjdGlvbiBpbiB0aGUgcmFuZ2UpLgorICovCisKK3N0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkKK3sKKyAgICAgICAgdW5zaWduZWQgaW5zbiwgZml4dXA7Cit9OworCisvKiBTcGVjaWFsIGV4YWJsZSBzZWFyY2gsIHdoaWNoIGhhbmRsZXMgcmFuZ2VzLiAgUmV0dXJucyBmaXh1cCAqLwordW5zaWduZWQgbG9uZyBzZWFyY2hfZXh0YWJsZXNfcmFuZ2UodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nICpnMik7CisKK2V4dGVybiB2b2lkIF9fcmV0X2VmYXVsdCh2b2lkKTsKKworLyogVWgsIHRoZXNlIHNob3VsZCBiZWNvbWUgdGhlIG1haW4gc2luZ2xlLXZhbHVlIHRyYW5zZmVyIHJvdXRpbmVzLi4KKyAqIFRoZXkgYXV0b21hdGljYWxseSB1c2UgdGhlIHJpZ2h0IHNpemUgaWYgd2UganVzdCBoYXZlIHRoZSByaWdodAorICogcG9pbnRlciB0eXBlLi4KKyAqCisgKiBUaGlzIGdldHMga2luZCBvZiB1Z2x5LiBXZSB3YW50IHRvIHJldHVybiBfdHdvXyB2YWx1ZXMgaW4gImdldF91c2VyKCkiCisgKiBhbmQgeWV0IHdlIGRvbid0IHdhbnQgdG8gZG8gYW55IHBvaW50ZXJzLCBiZWNhdXNlIHRoYXQgaXMgdG9vIG11Y2gKKyAqIG9mIGEgcGVyZm9ybWFuY2UgaW1wYWN0LiBUaHVzIHdlIGhhdmUgYSBmZXcgcmF0aGVyIHVnbHkgbWFjcm9zIGhlcmUsCisgKiBhbmQgaGlkZSBhbGwgdGhlIHVnbGluZXNzIGZyb20gdGhlIHVzZXIuCisgKi8KKyNkZWZpbmUgcHV0X3VzZXIoeCxwdHIpICh7IFwKK3Vuc2lnbmVkIGxvbmcgX19wdV9hZGRyID0gKHVuc2lnbmVkIGxvbmcpKHB0cik7IFwKK19fY2hrX3VzZXJfcHRyKHB0cik7IFwKK19fcHV0X3VzZXJfbm9jaGVjaygoX190eXBlb2ZfXygqKHB0cikpKSh4KSxfX3B1X2FkZHIsc2l6ZW9mKCoocHRyKSkpOyB9KQorCisjZGVmaW5lIGdldF91c2VyKHgscHRyKSAoeyBcCit1bnNpZ25lZCBsb25nIF9fZ3VfYWRkciA9ICh1bnNpZ25lZCBsb25nKShwdHIpOyBcCitfX2Noa191c2VyX3B0cihwdHIpOyBcCitfX2dldF91c2VyX25vY2hlY2soKHgpLF9fZ3VfYWRkcixzaXplb2YoKihwdHIpKSxfX3R5cGVvZl9fKCoocHRyKSkpOyB9KQorCisjZGVmaW5lIF9fcHV0X3VzZXIoeCxwdHIpIHB1dF91c2VyKHgscHRyKQorI2RlZmluZSBfX2dldF91c2VyKHgscHRyKSBnZXRfdXNlcih4LHB0cikKKworc3RydWN0IF9fbGFyZ2Vfc3RydWN0IHsgdW5zaWduZWQgbG9uZyBidWZbMTAwXTsgfTsKKyNkZWZpbmUgX19tKHgpICgoc3RydWN0IF9fbGFyZ2Vfc3RydWN0ICopKHgpKQorCisjZGVmaW5lIF9fcHV0X3VzZXJfbm9jaGVjayhkYXRhLGFkZHIsc2l6ZSkgKHsgXAorcmVnaXN0ZXIgaW50IF9fcHVfcmV0OyBcCitzd2l0Y2ggKHNpemUpIHsgXAorY2FzZSAxOiBfX3B1dF91c2VyX2FzbShkYXRhLGIsYWRkcixfX3B1X3JldCk7IGJyZWFrOyBcCitjYXNlIDI6IF9fcHV0X3VzZXJfYXNtKGRhdGEsaCxhZGRyLF9fcHVfcmV0KTsgYnJlYWs7IFwKK2Nhc2UgNDogX19wdXRfdXNlcl9hc20oZGF0YSx3LGFkZHIsX19wdV9yZXQpOyBicmVhazsgXAorY2FzZSA4OiBfX3B1dF91c2VyX2FzbShkYXRhLHgsYWRkcixfX3B1X3JldCk7IGJyZWFrOyBcCitkZWZhdWx0OiBfX3B1X3JldCA9IF9fcHV0X3VzZXJfYmFkKCk7IGJyZWFrOyBcCit9IF9fcHVfcmV0OyB9KQorCisjZGVmaW5lIF9fcHV0X3VzZXJfbm9jaGVja19yZXQoZGF0YSxhZGRyLHNpemUscmV0dmFsKSAoeyBcCityZWdpc3RlciBpbnQgX19mb28gX19hc21fXyAoImwxIik7IFwKK3N3aXRjaCAoc2l6ZSkgeyBcCitjYXNlIDE6IF9fcHV0X3VzZXJfYXNtX3JldChkYXRhLGIsYWRkcixyZXR2YWwsX19mb28pOyBicmVhazsgXAorY2FzZSAyOiBfX3B1dF91c2VyX2FzbV9yZXQoZGF0YSxoLGFkZHIscmV0dmFsLF9fZm9vKTsgYnJlYWs7IFwKK2Nhc2UgNDogX19wdXRfdXNlcl9hc21fcmV0KGRhdGEsdyxhZGRyLHJldHZhbCxfX2Zvbyk7IGJyZWFrOyBcCitjYXNlIDg6IF9fcHV0X3VzZXJfYXNtX3JldChkYXRhLHgsYWRkcixyZXR2YWwsX19mb28pOyBicmVhazsgXAorZGVmYXVsdDogaWYgKF9fcHV0X3VzZXJfYmFkKCkpIHJldHVybiByZXR2YWw7IGJyZWFrOyBcCit9IH0pCisKKyNkZWZpbmUgX19wdXRfdXNlcl9hc20oeCxzaXplLGFkZHIscmV0KQkJCQkJXAorX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJCVwKKwkiLyogUHV0IHVzZXIgYXNtLCBpbmxpbmUuICovXG4iCQkJCQlcCisiMTpcdCIJInN0IiNzaXplICJhICUxLCBbJTJdICUlYXNpXG5cdCIJCQkJXAorCSJjbHIJJTBcbiIJCQkJCQkJXAorIjI6XG5cblx0IgkJCQkJCQkJXAorCSIuc2VjdGlvbiAuZml4dXAsI2FsbG9jLCNleGVjaW5zdHJcblx0IgkJCQlcCisJIi5hbGlnbgk0XG4iCQkJCQkJCVwKKyIzOlxuXHQiCQkJCQkJCQlcCisJImIJMmJcblx0IgkJCQkJCQlcCisJIiBtb3YJJTMsICUwXG5cblx0IgkJCQkJCVwKKwkiLnByZXZpb3VzXG5cdCIJCQkJCQkJXAorCSIuc2VjdGlvbiBfX2V4X3RhYmxlLCNhbGxvY1xuXHQiCQkJCVwKKwkiLmFsaWduCTRcblx0IgkJCQkJCQlcCisJIi53b3JkCTFiLCAzYlxuXHQiCQkJCQkJXAorCSIucHJldmlvdXNcblxuXHQiCQkJCQkJXAorICAgICAgIDogIj1yIiAocmV0KSA6ICJyIiAoeCksICJyIiAoX19tKGFkZHIpKSwJCQkJXAorCSAiaSIgKC1FRkFVTFQpKQorCisjZGVmaW5lIF9fcHV0X3VzZXJfYXNtX3JldCh4LHNpemUsYWRkcixyZXQsZm9vKQkJCQlcCitpZiAoX19idWlsdGluX2NvbnN0YW50X3AocmV0KSAmJiByZXQgPT0gLUVGQVVMVCkJCQlcCitfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQkJXAorCSIvKiBQdXQgdXNlciBhc20gcmV0LCBpbmxpbmUuICovXG4iCQkJCVwKKyIxOlx0Igkic3QiI3NpemUgImEgJTEsIFslMl0gJSVhc2lcblxuXHQiCQkJCVwKKwkiLnNlY3Rpb24gX19leF90YWJsZSwjYWxsb2Ncblx0IgkJCQlcCisJIi5hbGlnbgk0XG5cdCIJCQkJCQkJXAorCSIud29yZAkxYiwgX19yZXRfZWZhdWx0XG5cblx0IgkJCQkJXAorCSIucHJldmlvdXNcblxuXHQiCQkJCQkJXAorICAgICAgIDogIj1yIiAoZm9vKSA6ICJyIiAoeCksICJyIiAoX19tKGFkZHIpKSk7CQkJXAorZWxzZQkJCQkJCQkJCVwKK19fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCQlcCisJIi8qIFB1dCB1c2VyIGFzbSByZXQsIGlubGluZS4gKi9cbiIJCQkJXAorIjE6XHQiCSJzdCIjc2l6ZSAiYSAlMSwgWyUyXSAlJWFzaVxuXG5cdCIJCQkJXAorCSIuc2VjdGlvbiAuZml4dXAsI2FsbG9jLCNleGVjaW5zdHJcblx0IgkJCQlcCisJIi5hbGlnbgk0XG4iCQkJCQkJCVwKKyIzOlxuXHQiCQkJCQkJCQlcCisJInJldFxuXHQiCQkJCQkJCVwKKwkiIHJlc3RvcmUgJSVnMCwgJTMsICUlbzBcblxuXHQiCQkJCQlcCisJIi5wcmV2aW91c1xuXHQiCQkJCQkJCVwKKwkiLnNlY3Rpb24gX19leF90YWJsZSwjYWxsb2Ncblx0IgkJCQlcCisJIi5hbGlnbgk0XG5cdCIJCQkJCQkJXAorCSIud29yZAkxYiwgM2JcblxuXHQiCQkJCQkJXAorCSIucHJldmlvdXNcblxuXHQiCQkJCQkJXAorICAgICAgIDogIj1yIiAoZm9vKSA6ICJyIiAoeCksICJyIiAoX19tKGFkZHIpKSwJCQkJXAorICAgICAgICAgImkiIChyZXQpKQorCitleHRlcm4gaW50IF9fcHV0X3VzZXJfYmFkKHZvaWQpOworCisjZGVmaW5lIF9fZ2V0X3VzZXJfbm9jaGVjayhkYXRhLGFkZHIsc2l6ZSx0eXBlKSAoeyBcCityZWdpc3RlciBpbnQgX19ndV9yZXQ7IFwKK3JlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19ndV92YWw7IFwKK3N3aXRjaCAoc2l6ZSkgeyBcCitjYXNlIDE6IF9fZ2V0X3VzZXJfYXNtKF9fZ3VfdmFsLHViLGFkZHIsX19ndV9yZXQpOyBicmVhazsgXAorY2FzZSAyOiBfX2dldF91c2VyX2FzbShfX2d1X3ZhbCx1aCxhZGRyLF9fZ3VfcmV0KTsgYnJlYWs7IFwKK2Nhc2UgNDogX19nZXRfdXNlcl9hc20oX19ndV92YWwsdXcsYWRkcixfX2d1X3JldCk7IGJyZWFrOyBcCitjYXNlIDg6IF9fZ2V0X3VzZXJfYXNtKF9fZ3VfdmFsLHgsYWRkcixfX2d1X3JldCk7IGJyZWFrOyBcCitkZWZhdWx0OiBfX2d1X3ZhbCA9IDA7IF9fZ3VfcmV0ID0gX19nZXRfdXNlcl9iYWQoKTsgYnJlYWs7IFwKK30gZGF0YSA9ICh0eXBlKSBfX2d1X3ZhbDsgX19ndV9yZXQ7IH0pCisKKyNkZWZpbmUgX19nZXRfdXNlcl9ub2NoZWNrX3JldChkYXRhLGFkZHIsc2l6ZSx0eXBlLHJldHZhbCkgKHsgXAorcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2d1X3ZhbCBfX2FzbV9fICgibDEiKTsgXAorc3dpdGNoIChzaXplKSB7IFwKK2Nhc2UgMTogX19nZXRfdXNlcl9hc21fcmV0KF9fZ3VfdmFsLHViLGFkZHIscmV0dmFsKTsgYnJlYWs7IFwKK2Nhc2UgMjogX19nZXRfdXNlcl9hc21fcmV0KF9fZ3VfdmFsLHVoLGFkZHIscmV0dmFsKTsgYnJlYWs7IFwKK2Nhc2UgNDogX19nZXRfdXNlcl9hc21fcmV0KF9fZ3VfdmFsLHV3LGFkZHIscmV0dmFsKTsgYnJlYWs7IFwKK2Nhc2UgODogX19nZXRfdXNlcl9hc21fcmV0KF9fZ3VfdmFsLHgsYWRkcixyZXR2YWwpOyBicmVhazsgXAorZGVmYXVsdDogaWYgKF9fZ2V0X3VzZXJfYmFkKCkpIHJldHVybiByZXR2YWw7IFwKK30gZGF0YSA9ICh0eXBlKSBfX2d1X3ZhbDsgfSkKKworI2RlZmluZSBfX2dldF91c2VyX2FzbSh4LHNpemUsYWRkcixyZXQpCQkJCQlcCitfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQkJXAorCSIvKiBHZXQgdXNlciBhc20sIGlubGluZS4gKi9cbiIJCQkJCVwKKyIxOlx0IgkibGQiI3NpemUgImEgWyUyXSAlJWFzaSwgJTFcblx0IgkJCQlcCisJImNscgklMFxuIgkJCQkJCQlcCisiMjpcblxuXHQiCQkJCQkJCQlcCisJIi5zZWN0aW9uIC5maXh1cCwjYWxsb2MsI2V4ZWNpbnN0clxuXHQiCQkJCVwKKwkiLmFsaWduCTRcbiIJCQkJCQkJXAorIjM6XG5cdCIJCQkJCQkJCVwKKwkiY2xyCSUxXG5cdCIJCQkJCQkJXAorCSJiCTJiXG5cdCIJCQkJCQkJXAorCSIgbW92CSUzLCAlMFxuXG5cdCIJCQkJCQlcCisJIi5wcmV2aW91c1xuXHQiCQkJCQkJCVwKKwkiLnNlY3Rpb24gX19leF90YWJsZSwjYWxsb2Ncblx0IgkJCQlcCisJIi5hbGlnbgk0XG5cdCIJCQkJCQkJXAorCSIud29yZAkxYiwgM2JcblxuXHQiCQkJCQkJXAorCSIucHJldmlvdXNcblx0IgkJCQkJCQlcCisgICAgICAgOiAiPXIiIChyZXQpLCAiPXIiICh4KSA6ICJyIiAoX19tKGFkZHIpKSwJCQlcCisJICJpIiAoLUVGQVVMVCkpCisKKyNkZWZpbmUgX19nZXRfdXNlcl9hc21fcmV0KHgsc2l6ZSxhZGRyLHJldHZhbCkJCQkJXAoraWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKHJldHZhbCkgJiYgcmV0dmFsID09IC1FRkFVTFQpCQkJXAorX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJCVwKKwkiLyogR2V0IHVzZXIgYXNtIHJldCwgaW5saW5lLiAqL1xuIgkJCQlcCisiMTpcdCIJImxkIiNzaXplICJhIFslMV0gJSVhc2ksICUwXG5cblx0IgkJCQlcCisJIi5zZWN0aW9uIF9fZXhfdGFibGUsI2FsbG9jXG5cdCIJCQkJXAorCSIuYWxpZ24JNFxuXHQiCQkJCQkJCVwKKwkiLndvcmQJMWIsX19yZXRfZWZhdWx0XG5cblx0IgkJCQkJXAorCSIucHJldmlvdXNcblx0IgkJCQkJCQlcCisgICAgICAgOiAiPXIiICh4KSA6ICJyIiAoX19tKGFkZHIpKSk7CQkJCQlcCitlbHNlCQkJCQkJCQkJXAorX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJCVwKKwkiLyogR2V0IHVzZXIgYXNtIHJldCwgaW5saW5lLiAqL1xuIgkJCQlcCisiMTpcdCIJImxkIiNzaXplICJhIFslMV0gJSVhc2ksICUwXG5cblx0IgkJCQlcCisJIi5zZWN0aW9uIC5maXh1cCwjYWxsb2MsI2V4ZWNpbnN0clxuXHQiCQkJCVwKKwkiLmFsaWduCTRcbiIJCQkJCQkJXAorIjM6XG5cdCIJCQkJCQkJCVwKKwkicmV0XG5cdCIJCQkJCQkJXAorCSIgcmVzdG9yZSAlJWcwLCAlMiwgJSVvMFxuXG5cdCIJCQkJCVwKKwkiLnByZXZpb3VzXG5cdCIJCQkJCQkJXAorCSIuc2VjdGlvbiBfX2V4X3RhYmxlLCNhbGxvY1xuXHQiCQkJCVwKKwkiLmFsaWduCTRcblx0IgkJCQkJCQlcCisJIi53b3JkCTFiLCAzYlxuXG5cdCIJCQkJCQlcCisJIi5wcmV2aW91c1xuXHQiCQkJCQkJCVwKKyAgICAgICA6ICI9ciIgKHgpIDogInIiIChfX20oYWRkcikpLCAiaSIgKHJldHZhbCkpCisKK2V4dGVybiBpbnQgX19nZXRfdXNlcl9iYWQodm9pZCk7CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fbXVzdF9jaGVjayBfX19jb3B5X2Zyb21fdXNlcih2b2lkICp0bywKKwkJCQkJCSAgICBjb25zdCB2b2lkIF9fdXNlciAqZnJvbSwKKwkJCQkJCSAgICB1bnNpZ25lZCBsb25nIHNpemUpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgY29weV9mcm9tX3VzZXJfZml4dXAodm9pZCAqdG8sIGNvbnN0IHZvaWQgX191c2VyICpmcm9tLAorCQkJCQkgIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19tdXN0X2NoZWNrCitjb3B5X2Zyb21fdXNlcih2b2lkICp0bywgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIHJldCA9IF9fX2NvcHlfZnJvbV91c2VyKHRvLCBmcm9tLCBzaXplKTsKKworCWlmIChyZXQpCisJCXJldCA9IGNvcHlfZnJvbV91c2VyX2ZpeHVwKHRvLCBmcm9tLCBzaXplKTsKKwlyZXR1cm4gcmV0OworfQorI2RlZmluZSBfX2NvcHlfZnJvbV91c2VyIGNvcHlfZnJvbV91c2VyCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fbXVzdF9jaGVjayBfX19jb3B5X3RvX3VzZXIodm9pZCBfX3VzZXIgKnRvLAorCQkJCQkJICBjb25zdCB2b2lkICpmcm9tLAorCQkJCQkJICB1bnNpZ25lZCBsb25nIHNpemUpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgY29weV90b191c2VyX2ZpeHVwKHZvaWQgX191c2VyICp0bywgY29uc3Qgdm9pZCAqZnJvbSwKKwkJCQkJdW5zaWduZWQgbG9uZyBzaXplKTsKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX211c3RfY2hlY2sKK2NvcHlfdG9fdXNlcih2b2lkIF9fdXNlciAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIHJldCA9IF9fX2NvcHlfdG9fdXNlcih0bywgZnJvbSwgc2l6ZSk7CisKKwlpZiAocmV0KQorCQlyZXQgPSBjb3B5X3RvX3VzZXJfZml4dXAodG8sIGZyb20sIHNpemUpOworCXJldHVybiByZXQ7Cit9CisjZGVmaW5lIF9fY29weV90b191c2VyIGNvcHlfdG9fdXNlcgorCitleHRlcm4gdW5zaWduZWQgbG9uZyBfX211c3RfY2hlY2sgX19fY29weV9pbl91c2VyKHZvaWQgX191c2VyICp0bywKKwkJCQkJCSAgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sCisJCQkJCQkgIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBjb3B5X2luX3VzZXJfZml4dXAodm9pZCBfX3VzZXIgKnRvLCB2b2lkIF9fdXNlciAqZnJvbSwKKwkJCQkJdW5zaWduZWQgbG9uZyBzaXplKTsKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX211c3RfY2hlY2sKK2NvcHlfaW5fdXNlcih2b2lkIF9fdXNlciAqdG8sIHZvaWQgX191c2VyICpmcm9tLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJdW5zaWduZWQgbG9uZyByZXQgPSBfX19jb3B5X2luX3VzZXIodG8sIGZyb20sIHNpemUpOworCisJaWYgKHJldCkKKwkJcmV0ID0gY29weV9pbl91c2VyX2ZpeHVwKHRvLCBmcm9tLCBzaXplKTsKKwlyZXR1cm4gcmV0OworfQorI2RlZmluZSBfX2NvcHlfaW5fdXNlciBjb3B5X2luX3VzZXIKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19tdXN0X2NoZWNrIF9fYnplcm9fbm9hc2kodm9pZCBfX3VzZXIgKiwgdW5zaWduZWQgbG9uZyk7CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX211c3RfY2hlY2sKK19fY2xlYXJfdXNlcih2b2lkIF9fdXNlciAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCQorCXJldHVybiBfX2J6ZXJvX25vYXNpKGFkZHIsIHNpemUpOworfQorCisjZGVmaW5lIGNsZWFyX3VzZXIgX19jbGVhcl91c2VyCisKK2V4dGVybiBsb25nIF9fbXVzdF9jaGVjayBfX3N0cm5jcHlfZnJvbV91c2VyKGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgX191c2VyICpzcmMsIGxvbmcgY291bnQpOworCisjZGVmaW5lIHN0cm5jcHlfZnJvbV91c2VyIF9fc3RybmNweV9mcm9tX3VzZXIKKworZXh0ZXJuIGxvbmcgX19zdHJsZW5fdXNlcihjb25zdCBjaGFyIF9fdXNlciAqKTsKK2V4dGVybiBsb25nIF9fc3Rybmxlbl91c2VyKGNvbnN0IGNoYXIgX191c2VyICosIGxvbmcgbGVuKTsKKworI2RlZmluZSBzdHJsZW5fdXNlciBfX3N0cmxlbl91c2VyCisjZGVmaW5lIHN0cm5sZW5fdXNlciBfX3N0cm5sZW5fdXNlcgorI2RlZmluZSBfX2NvcHlfdG9fdXNlcl9pbmF0b21pYyBfX2NvcHlfdG9fdXNlcgorI2RlZmluZSBfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljIF9fY29weV9mcm9tX3VzZXIKKworI2VuZGlmICAvKiBfX0FTU0VNQkxZX18gKi8KKworI2VuZGlmIC8qIF9BU01fVUFDQ0VTU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3VjdHguaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvdWN0eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlYWYxNmUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3VjdHguaApAQCAtMCwwICsxLDcxIEBACisvKiAkSWQ6IHVjdHguaCx2IDEuMSAxOTk3LzA2LzE4IDE2OjUxOjU4IGRhdmVtIEV4cCAkCisgKiB1Y3R4Lmg6IFNwYXJjNjQge3NldCxnZXR9Y29udGV4dCgpIHJlZ2lzdGVyIHN0YXRlIGxheW91dHMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk3IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKKyAqLworCisjaWZuZGVmIF9fU1BBUkM2NF9VQ1RYX0gKKyNkZWZpbmUgX19TUEFSQzY0X1VDVFhfSAorCisjZGVmaW5lIE1DX1RTVEFURQkwCisjZGVmaW5lIE1DX1BDCQkxCisjZGVmaW5lIE1DX05QQwkJMgorI2RlZmluZSBNQ19ZCQkzCisjZGVmaW5lIE1DX0cxCQk0CisjZGVmaW5lIE1DX0cyCQk1CisjZGVmaW5lIE1DX0czCQk2CisjZGVmaW5lIE1DX0c0CQk3CisjZGVmaW5lIE1DX0c1CQk4CisjZGVmaW5lIE1DX0c2CQk5CisjZGVmaW5lIE1DX0c3CQkxMAorI2RlZmluZSBNQ19PMAkJMTEKKyNkZWZpbmUgTUNfTzEJCTEyCisjZGVmaW5lIE1DX08yCQkxMworI2RlZmluZSBNQ19PMwkJMTQKKyNkZWZpbmUgTUNfTzQJCTE1CisjZGVmaW5lIE1DX081CQkxNgorI2RlZmluZSBNQ19PNgkJMTcKKyNkZWZpbmUgTUNfTzcJCTE4CisjZGVmaW5lIE1DX05HUkVHCTE5CisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBtY19ncmVnX3Q7Cit0eXBlZGVmIG1jX2dyZWdfdCBtY19ncmVnc2V0X3RbTUNfTkdSRUddOworCisjZGVmaW5lIE1DX01BWEZQUQkxNgorc3RydWN0IG1jX2ZxIHsKKwl1bnNpZ25lZCBsb25nCSptY2ZxX2FkZHI7CisJdW5zaWduZWQgaW50CW1jZnFfaW5zbjsKK307CisKK3N0cnVjdCBtY19mcHUgeworCXVuaW9uIHsKKwkJdW5zaWduZWQgaW50CXNyZWdzWzMyXTsKKwkJdW5zaWduZWQgbG9uZwlkcmVnc1szMl07CisJCWxvbmcgZG91YmxlCXFyZWdzWzE2XTsKKwl9IG1jZnB1X2ZyZWdzOworCXVuc2lnbmVkIGxvbmcJbWNmcHVfZnNyOworCXVuc2lnbmVkIGxvbmcJbWNmcHVfZnByczsKKwl1bnNpZ25lZCBsb25nCW1jZnB1X2dzcjsKKwlzdHJ1Y3QgbWNfZnEJKm1jZnB1X2ZxOworCXVuc2lnbmVkIGNoYXIJbWNmcHVfcWNudDsKKwl1bnNpZ25lZCBjaGFyCW1jZnB1X3FlbnRzejsKKwl1bnNpZ25lZCBjaGFyCW1jZnB1X2VuYWI7Cit9OwordHlwZWRlZiBzdHJ1Y3QgbWNfZnB1IG1jX2ZwdV90OworCit0eXBlZGVmIHN0cnVjdCB7CisJbWNfZ3JlZ3NldF90CW1jX2dyZWdzOworCW1jX2dyZWdfdAltY19mcDsKKwltY19ncmVnX3QJbWNfaTc7CisJbWNfZnB1X3QJbWNfZnByZWdzOworfSBtY29udGV4dF90OworCitzdHJ1Y3QgdWNvbnRleHQgeworCXN0cnVjdCB1Y29udGV4dAkJKnVjX2xpbms7CisJdW5zaWduZWQgbG9uZwkJdWNfZmxhZ3M7CisJc2lnc2V0X3QJCXVjX3NpZ21hc2s7CisJbWNvbnRleHRfdAkJdWNfbWNvbnRleHQ7Cit9OwordHlwZWRlZiBzdHJ1Y3QgdWNvbnRleHQgdWNvbnRleHRfdDsKKworI2VuZGlmIC8qIF9fU1BBUkM2NF9VQ1RYX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvdW5hbGlnbmVkLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3VuYWxpZ25lZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlZDNiYTUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3VuYWxpZ25lZC5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfQVNNX1NQQVJDNjRfVU5BTElHTkVEX0hfCisjZGVmaW5lIF9BU01fU1BBUkM2NF9VTkFMSUdORURfSF8KKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3VuYWxpZ25lZC5oPgorCisjZW5kaWYgLyogX0FTTV9TUEFSQzY0X1VOQUxJR05FRF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC91bmlzdGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzAwMDY1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC91bmlzdGQuaApAQCAtMCwwICsxLDUxNCBAQAorLyogJElkOiB1bmlzdGQuaCx2IDEuNTAgMjAwMi8wMi8wOCAwMzo1NzoxOCBkYXZlbSBFeHAgJCAqLworI2lmbmRlZiBfU1BBUkM2NF9VTklTVERfSAorI2RlZmluZSBfU1BBUkM2NF9VTklTVERfSAorCisvKgorICogU3lzdGVtIGNhbGxzIHVuZGVyIHRoZSBTcGFyYy4KKyAqCisgKiBEb24ndCBiZSBzY2FyZWQgYnkgdGhlIHVnbHkgY2xvYmJlcnMsIGl0IGlzIHRoZSBvbmx5IHdheSBJIGNhbgorICogdGhpbmsgb2YgcmlnaHQgbm93IHRvIGZvcmNlIHRoZSBhcmd1bWVudHMgaW50byBmaXhlZCByZWdpc3RlcnMKKyAqIGJlZm9yZSB0aGUgdHJhcCBpbnRvIHRoZSBzeXN0ZW0gY2FsbCB3aXRoIGdjYyAnYXNtJyBzdGF0ZW1lbnRzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NSBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCisgKgorICogU3VuT1MgY29tcGF0aWJpbGl0eSBiYXNlZCB1cG9uIHByZWxpbWluYXJ5IHdvcmsgd2hpY2ggaXM6CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1IEFkcmlhbiBNLiBSb2RyaWd1ZXogKGFkcmlhbkByZW11cy5ydXRnZXJzLmVkdSkKKyAqLworCisjZGVmaW5lIF9fTlJfcmVzdGFydF9zeXNjYWxsICAgICAgMCAvKiBMaW51eCBTcGVjaWZpYwkJCQkgICAqLworI2RlZmluZSBfX05SX2V4aXQgICAgICAgICAgICAgICAgIDEgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2ZvcmsgICAgICAgICAgICAgICAgIDIgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3JlYWQgICAgICAgICAgICAgICAgIDMgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3dyaXRlICAgICAgICAgICAgICAgIDQgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX29wZW4gICAgICAgICAgICAgICAgIDUgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2Nsb3NlICAgICAgICAgICAgICAgIDYgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3dhaXQ0ICAgICAgICAgICAgICAgIDcgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2NyZWF0ICAgICAgICAgICAgICAgIDggLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2xpbmsgICAgICAgICAgICAgICAgIDkgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3VubGluayAgICAgICAgICAgICAgMTAgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2V4ZWN2ICAgICAgICAgICAgICAgMTEgLyogU3VuT1MgU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2NoZGlyICAgICAgICAgICAgICAgMTIgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2Nob3duCQkgMTMgLyogQ29tbW9uCQkJCQkgICAqLworI2RlZmluZSBfX05SX21rbm9kICAgICAgICAgICAgICAgMTQgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2NobW9kICAgICAgICAgICAgICAgMTUgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2xjaG93biAgICAgICAgICAgICAgMTYgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2JyayAgICAgICAgICAgICAgICAgMTcgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3BlcmZjdHIgICAgICAgICAgICAgMTggLyogUGVyZm9ybWFuY2UgY291bnRlciBvcGVyYXRpb25zICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2xzZWVrICAgICAgICAgICAgICAgMTkgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2dldHBpZCAgICAgICAgICAgICAgMjAgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2NhcGdldAkJIDIxIC8qIExpbnV4IFNwZWNpZmljCQkJCSAgICovCisjZGVmaW5lIF9fTlJfY2Fwc2V0CQkgMjIgLyogTGludXggU3BlY2lmaWMJCQkJICAgKi8KKyNkZWZpbmUgX19OUl9zZXR1aWQgICAgICAgICAgICAgIDIzIC8qIEltcGxlbWVudGVkIHZpYSBzZXRyZXVpZCBpbiBTdW5PUyAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9nZXR1aWQgICAgICAgICAgICAgIDI0IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICNkZWZpbmUgX19OUl90aW1lIGFsaWFzCSAyNSAgICBFTk9TWVMgdW5kZXIgU3VuT1MJCQkgICAqLworI2RlZmluZSBfX05SX3B0cmFjZSAgICAgICAgICAgICAgMjYgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2FsYXJtICAgICAgICAgICAgICAgMjcgLyogSW1wbGVtZW50ZWQgdmlhIHNldGl0aW1lciBpbiBTdW5PUyAgICAgICAgICAqLworI2RlZmluZSBfX05SX3NpZ2FsdHN0YWNrCSAyOCAvKiBDb21tb24JCQkJCSAgICovCisjZGVmaW5lIF9fTlJfcGF1c2UgICAgICAgICAgICAgICAyOSAvKiBJcyBzaWdibG9jaygwKS0+c2lncGF1c2UoKSBpbiBTdW5PUyAgICAgICAgICovCisjZGVmaW5lIF9fTlJfdXRpbWUgICAgICAgICAgICAgICAzMCAvKiBJbXBsZW1lbnRlZCB2aWEgdXRpbWVzKCkgdW5kZXIgU3VuT1MgICAgICAgICovCisvKiAjZGVmaW5lIF9fTlJfbGNob3duMzIgICAgICAgICAzMSAgICBMaW51eCBzcGFyYzMyIHNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICovCisvKiAjZGVmaW5lIF9fTlJfZmNob3duMzIgICAgICAgICAzMiAgICBMaW51eCBzcGFyYzMyIHNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfYWNjZXNzICAgICAgICAgICAgICAzMyAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfbmljZSAgICAgICAgICAgICAgICAzNCAvKiBJbXBsZW1lbnRlZCB2aWEgZ2V0L3NldHByaW9yaXR5KCkgaW4gU3VuT1MgICovCisvKiAjZGVmaW5lIF9fTlJfY2hvd24zMiAgICAgICAgICAzNSAgICBMaW51eCBzcGFyYzMyIHNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc3luYyAgICAgICAgICAgICAgICAzNiAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfa2lsbCAgICAgICAgICAgICAgICAzNyAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc3RhdCAgICAgICAgICAgICAgICAzOCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc2VuZGZpbGUJCSAzOSAvKiBMaW51eCBTcGVjaWZpYwkJCQkgICAqLworI2RlZmluZSBfX05SX2xzdGF0ICAgICAgICAgICAgICAgNDAgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2R1cCAgICAgICAgICAgICAgICAgNDEgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3BpcGUgICAgICAgICAgICAgICAgNDIgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3RpbWVzICAgICAgICAgICAgICAgNDMgLyogSW1wbGVtZW50ZWQgdmlhIGdldHJ1c2FnZSgpIGluIFN1bk9TICAgICAgICAqLworLyogI2RlZmluZSBfX05SX2dldHVpZDMyICAgICAgICAgNDQgICAgTGludXggc3BhcmMzMiBzcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3Vtb3VudDIgICAgICAgICAgICAgNDUgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3NldGdpZCAgICAgICAgICAgICAgNDYgLyogSW1wbGVtZW50ZWQgdmlhIHNldHJlZ2lkKCkgaW4gU3VuT1MgICAgICAgICAqLworI2RlZmluZSBfX05SX2dldGdpZCAgICAgICAgICAgICAgNDcgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3NpZ25hbCAgICAgICAgICAgICAgNDggLyogSW1wbGVtZW50ZWQgdmlhIHNpZ3ZlYygpIGluIFN1bk9TICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2dldGV1aWQgICAgICAgICAgICAgNDkgLyogU3VuT1MgY2FsbHMgZ2V0dWlkKCkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2dldGVnaWQgICAgICAgICAgICAgNTAgLyogU3VuT1MgY2FsbHMgZ2V0Z2lkKCkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2FjY3QgICAgICAgICAgICAgICAgNTEgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX21lbW9yeV9vcmRlcmluZwkgNTIgLyogTGludXggU3BlY2lmaWMJCQkJICAgKi8KKy8qICNkZWZpbmUgX19OUl9nZXRnaWQzMiAgICAgICAgIDUzICAgIExpbnV4IHNwYXJjMzIgc3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9pb2N0bCAgICAgICAgICAgICAgIDU0IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9yZWJvb3QgICAgICAgICAgICAgIDU1IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICNkZWZpbmUgX19OUl9tbWFwMgkJIDU2ICAgIExpbnV4IHNwYXJjMzIgU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9zeW1saW5rICAgICAgICAgICAgIDU3IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9yZWFkbGluayAgICAgICAgICAgIDU4IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9leGVjdmUgICAgICAgICAgICAgIDU5IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl91bWFzayAgICAgICAgICAgICAgIDYwIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9jaHJvb3QgICAgICAgICAgICAgIDYxIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9mc3RhdCAgICAgICAgICAgICAgIDYyIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICNkZWZpbmUgX19OUl9mc3RhdDY0ICAgICAgICAgIDYzICAgIExpbnV4IHNwYXJjMzIgU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9nZXRwYWdlc2l6ZSAgICAgICAgIDY0IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9tc3luYyAgICAgICAgICAgICAgIDY1IC8qIENvbW1vbiBpbiBuZXdlciAxLjMueCByZXZzLi4uICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl92Zm9yayAgICAgICAgICAgICAgIDY2IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9wcmVhZDY0ICAgICAgICAgICAgIDY3IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9wd3JpdGU2NCAgICAgICAgICAgIDY4IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICNkZWZpbmUgX19OUl9nZXRldWlkMzIgICAgICAgIDY5ICAgIExpbnV4IHNwYXJjMzIsIHNicmsgdW5kZXIgU3VuT1MgICAgICAgICAgICAgKi8KKy8qICNkZWZpbmUgX19OUl9nZXRlZ2lkMzIgICAgICAgIDcwICAgIExpbnV4IHNwYXJjMzIsIHNzdGsgdW5kZXIgU3VuT1MgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9tbWFwICAgICAgICAgICAgICAgIDcxIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICNkZWZpbmUgX19OUl9zZXRyZXVpZDMyICAgICAgIDcyICAgIExpbnV4IHNwYXJjMzIsIHZhZHZpc2UgdW5kZXIgU3VuT1MgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9tdW5tYXAgICAgICAgICAgICAgIDczIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9tcHJvdGVjdCAgICAgICAgICAgIDc0IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9tYWR2aXNlICAgICAgICAgICAgIDc1IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl92aGFuZ3VwICAgICAgICAgICAgIDc2IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICNkZWZpbmUgX19OUl90cnVuY2F0ZTY0ICAgICAgIDc3ICAgIExpbnV4IHNwYXJjMzIgU3BlY2lmaWMJCQkgICAqLworI2RlZmluZSBfX05SX21pbmNvcmUgICAgICAgICAgICAgNzggLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2dldGdyb3VwcyAgICAgICAgICAgNzkgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3NldGdyb3VwcyAgICAgICAgICAgODAgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2dldHBncnAgICAgICAgICAgICAgODEgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogI2RlZmluZSBfX05SX3NldGdyb3VwczMyICAgICAgODIgICAgTGludXggc3BhcmMzMiwgc2V0cGdycCB1bmRlciBTdW5PUyAgICAgICAgICAqLworI2RlZmluZSBfX05SX3NldGl0aW1lciAgICAgICAgICAgODMgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogI2RlZmluZSBfX05SX2Z0cnVuY2F0ZTY0ICAgICAgODQgICAgTGludXggc3BhcmMzMiBTcGVjaWZpYwkJCSAgICovCisjZGVmaW5lIF9fTlJfc3dhcG9uICAgICAgICAgICAgICA4NSAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZ2V0aXRpbWVyICAgICAgICAgICA4NiAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAjZGVmaW5lIF9fTlJfc2V0dWlkMzIgICAgICAgICA4NyAgICBMaW51eCBzcGFyYzMyLCBnZXRob3N0bmFtZSB1bmRlciBTdW5PUyAgICAgICovCisjZGVmaW5lIF9fTlJfc2V0aG9zdG5hbWUgICAgICAgICA4OCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAjZGVmaW5lIF9fTlJfc2V0Z2lkMzIgICAgICAgICA4OSAgICBMaW51eCBzcGFyYzMyLCBnZXRkdGFibGVzaXplIHVuZGVyIFN1bk9TICAgICovCisjZGVmaW5lIF9fTlJfZHVwMiAgICAgICAgICAgICAgICA5MCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAjZGVmaW5lIF9fTlJfc2V0ZnN1aWQzMiAgICAgICA5MSAgICBMaW51eCBzcGFyYzMyLCBnZXRkb3B0IHVuZGVyIFN1bk9TICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZmNudGwgICAgICAgICAgICAgICA5MiAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc2VsZWN0ICAgICAgICAgICAgICA5MyAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAjZGVmaW5lIF9fTlJfc2V0ZnNnaWQzMiAgICAgICA5NCAgICBMaW51eCBzcGFyYzMyLCBzZXRkb3B0IHVuZGVyIFN1bk9TICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZnN5bmMgICAgICAgICAgICAgICA5NSAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc2V0cHJpb3JpdHkgICAgICAgICA5NiAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc29ja2V0ICAgICAgICAgICAgICA5NyAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfY29ubmVjdCAgICAgICAgICAgICA5OCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfYWNjZXB0ICAgICAgICAgICAgICA5OSAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZ2V0cHJpb3JpdHkgICAgICAgIDEwMCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfcnRfc2lncmV0dXJuICAgICAgIDEwMSAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfcnRfc2lnYWN0aW9uICAgICAgIDEwMiAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfcnRfc2lncHJvY21hc2sgICAgIDEwMyAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfcnRfc2lncGVuZGluZyAgICAgIDEwNCAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfcnRfc2lndGltZWR3YWl0ICAgIDEwNSAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfcnRfc2lncXVldWVpbmZvICAgIDEwNiAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfcnRfc2lnc3VzcGVuZCAgICAgIDEwNyAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc2V0cmVzdWlkICAgICAgICAgIDEwOCAvKiBMaW51eCBTcGVjaWZpYywgc2lndmVjIHVuZGVyIFN1bk9TCSAgICovCisjZGVmaW5lIF9fTlJfZ2V0cmVzdWlkICAgICAgICAgIDEwOSAvKiBMaW51eCBTcGVjaWZpYywgc2lnYmxvY2sgdW5kZXIgU3VuT1MJICAgKi8KKyNkZWZpbmUgX19OUl9zZXRyZXNnaWQgICAgICAgICAgMTEwIC8qIExpbnV4IFNwZWNpZmljLCBzaWdzZXRtYXNrIHVuZGVyIFN1bk9TCSAgICovCisjZGVmaW5lIF9fTlJfZ2V0cmVzZ2lkICAgICAgICAgIDExMSAvKiBMaW51eCBTcGVjaWZpYywgc2lncGF1c2UgdW5kZXIgU3VuT1MJICAgKi8KKy8qICNkZWZpbmUgX19OUl9zZXRyZWdpZDMyICAgICAgIDc1ICAgIExpbnV4IHNwYXJjMzIsIHNpZ3N0YWNrIHVuZGVyIFN1bk9TICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9yZWN2bXNnICAgICAgICAgICAgMTEzIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9zZW5kbXNnICAgICAgICAgICAgMTE0IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICNkZWZpbmUgX19OUl9nZXRncm91cHMzMiAgICAgMTE1ICAgIExpbnV4IHNwYXJjMzIsIHZ0cmFjZSB1bmRlciBTdW5PUyAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9nZXR0aW1lb2ZkYXkgICAgICAgMTE2IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9nZXRydXNhZ2UgICAgICAgICAgMTE3IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9nZXRzb2Nrb3B0ICAgICAgICAgMTE4IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9nZXRjd2QJCTExOSAvKiBMaW51eCBTcGVjaWZpYwkJCQkgICAqLworI2RlZmluZSBfX05SX3JlYWR2ICAgICAgICAgICAgICAxMjAgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3dyaXRldiAgICAgICAgICAgICAxMjEgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3NldHRpbWVvZmRheSAgICAgICAxMjIgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2ZjaG93biAgICAgICAgICAgICAxMjMgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2ZjaG1vZCAgICAgICAgICAgICAxMjQgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3JlY3Zmcm9tICAgICAgICAgICAxMjUgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3NldHJldWlkICAgICAgICAgICAxMjYgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3NldHJlZ2lkICAgICAgICAgICAxMjcgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3JlbmFtZSAgICAgICAgICAgICAxMjggLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3RydW5jYXRlICAgICAgICAgICAxMjkgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2Z0cnVuY2F0ZSAgICAgICAgICAxMzAgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2Zsb2NrICAgICAgICAgICAgICAxMzEgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogI2RlZmluZSBfX05SX2xzdGF0NjQJCTEzMiAgICBMaW51eCBzcGFyYzMyIFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc2VuZHRvICAgICAgICAgICAgIDEzMyAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc2h1dGRvd24gICAgICAgICAgIDEzNCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc29ja2V0cGFpciAgICAgICAgIDEzNSAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfbWtkaXIgICAgICAgICAgICAgIDEzNiAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfcm1kaXIgICAgICAgICAgICAgIDEzNyAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfdXRpbWVzICAgICAgICAgICAgIDEzOCAvKiBTdW5PUyBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAjZGVmaW5lIF9fTlJfc3RhdDY0CQkxMzkgICAgTGludXggc3BhcmMzMiBTcGVjaWZpYwkJCSAgICovCisjZGVmaW5lIF9fTlJfc2VuZGZpbGU2NCAgICAgICAgIDE0MCAvKiBhZGp0aW1lIHVuZGVyIFN1bk9TICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZ2V0cGVlcm5hbWUgICAgICAgIDE0MSAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZnV0ZXggICAgICAgICAgICAgIDE0MiAvKiBnZXRob3N0aWQgdW5kZXIgU3VuT1MgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZ2V0dGlkICAgICAgICAgICAgIDE0MyAvKiBFTk9TWVMgdW5kZXIgU3VuT1MgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZ2V0cmxpbWl0CQkxNDQgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3NldHJsaW1pdCAgICAgICAgICAxNDUgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3Bpdm90X3Jvb3QJCTE0NiAvKiBMaW51eCBTcGVjaWZpYywga2lsbHBnIHVuZGVyIFN1bk9TICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfcHJjdGwJCTE0NyAvKiBFTk9TWVMgdW5kZXIgU3VuT1MgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfcGNpY29uZmlnX3JlYWQJMTQ4IC8qIEVOT1NZUyB1bmRlciBTdW5PUyAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9wY2ljb25maWdfd3JpdGUJMTQ5IC8qIEVOT1NZUyB1bmRlciBTdW5PUyAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9nZXRzb2NrbmFtZSAgICAgICAgMTUwIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICNkZWZpbmUgX19OUl9nZXRtc2cgICAgICAgICAgMTUxICAgIFN1bk9TIFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICNkZWZpbmUgX19OUl9wdXRtc2cgICAgICAgICAgMTUyICAgIFN1bk9TIFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9wb2xsICAgICAgICAgICAgICAgMTUzIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9nZXRkZW50czY0CQkxNTQgLyogTGludXggc3BlY2lmaWMJCQkJICAgKi8KKy8qICNkZWZpbmUgX19OUl9mY250bDY0ICAgICAgICAgMTU1ICAgIExpbnV4IHNwYXJjMzIgU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICNkZWZpbmUgX19OUl9nZXRkaXJlbnRyaWVzICAgMTU2ICAgIFN1bk9TIFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9zdGF0ZnMgICAgICAgICAgICAgMTU3IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9mc3RhdGZzICAgICAgICAgICAgMTU4IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl91bW91bnQgICAgICAgICAgICAgMTU5IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9zY2hlZF9zZXRfYWZmaW5pdHkgMTYwIC8qIExpbnV4IHNwZWNpZmljLCBhc3luY19kYWVtb24gdW5kZXIgU3VuT1MgICAgKi8KKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRfYWZmaW5pdHkgMTYxIC8qIExpbnV4IHNwZWNpZmljLCBnZXRmaCB1bmRlciBTdW5PUyAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9nZXRkb21haW5uYW1lICAgICAgMTYyIC8qIFN1bk9TIFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9zZXRkb21haW5uYW1lICAgICAgMTYzIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl91dHJhcF9pbnN0YWxsCTE2NCAvKiBTWVNWIEFCSS92OSByZXF1aXJlZAkJCSAgICovCisjZGVmaW5lIF9fTlJfcXVvdGFjdGwgICAgICAgICAgIDE2NSAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc2V0X3RpZF9hZGRyZXNzICAgIDE2NiAvKiBMaW51eCBzcGVjaWZpYywgZXhwb3J0ZnMgdW5kZXIgU3VuT1MgICAgICAgICovCisjZGVmaW5lIF9fTlJfbW91bnQgICAgICAgICAgICAgIDE2NyAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfdXN0YXQgICAgICAgICAgICAgIDE2OCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc2V0eGF0dHIgICAgICAgICAgIDE2OSAvKiBTdW5PUzogc2Vtc3lzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfbHNldHhhdHRyICAgICAgICAgIDE3MCAvKiBTdW5PUzogbXNnc3lzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZnNldHhhdHRyICAgICAgICAgIDE3MSAvKiBTdW5PUzogc2htc3lzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZ2V0eGF0dHIgICAgICAgICAgIDE3MiAvKiBTdW5PUzogYXVkaXRzeXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfbGdldHhhdHRyICAgICAgICAgIDE3MyAvKiBTdW5PUzogcmZzc3lzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZ2V0ZGVudHMgICAgICAgICAgIDE3NCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc2V0c2lkICAgICAgICAgICAgIDE3NSAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZmNoZGlyICAgICAgICAgICAgIDE3NiAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZmdldHhhdHRyICAgICAgICAgIDE3NyAvKiBTdW5PUzogZmNocm9vdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfbGlzdHhhdHRyICAgICAgICAgIDE3OCAvKiBTdW5PUzogdnBpeHN5cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfbGxpc3R4YXR0ciAgICAgICAgIDE3OSAvKiBTdW5PUzogYWlvcmVhZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZmxpc3R4YXR0ciAgICAgICAgIDE4MCAvKiBTdW5PUzogYWlvd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfcmVtb3ZleGF0dHIgICAgICAgIDE4MSAvKiBTdW5PUzogYWlvd2FpdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfbHJlbW92ZXhhdHRyICAgICAgIDE4MiAvKiBTdW5PUzogYWlvY2FuY2VsICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc2lncGVuZGluZyAgICAgICAgIDE4MyAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfcXVlcnlfbW9kdWxlCTE4NCAvKiBMaW51eCBTcGVjaWZpYwkJCQkgICAqLworI2RlZmluZSBfX05SX3NldHBnaWQgICAgICAgICAgICAxODUgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2ZyZW1vdmV4YXR0ciAgICAgICAxODYgLyogU3VuT1M6IHBhdGhjb25mICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3RraWxsICAgICAgICAgICAgICAxODcgLyogU3VuT1M6IGZwYXRoY29uZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2V4aXRfZ3JvdXAJCTE4OCAvKiBMaW51eCBzcGVjaWZpYywgc3lzY29uZiB1bmRlZiBTdW5PUyAgICAgICAgICovCisjZGVmaW5lIF9fTlJfdW5hbWUgICAgICAgICAgICAgIDE4OSAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfaW5pdF9tb2R1bGUgICAgICAgIDE5MCAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfcGVyc29uYWxpdHkgICAgICAgIDE5MSAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfcmVtYXBfZmlsZV9wYWdlcyAgIDE5MiAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZXBvbGxfY3JlYXRlICAgICAgIDE5MyAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZXBvbGxfY3RsICAgICAgICAgIDE5NCAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZXBvbGxfd2FpdCAgICAgICAgIDE5NSAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAjZGVmaW5lIF9fTlJfdWxpbWl0ICAgICAgICAgIDE5NiAgICBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZ2V0cHBpZCAgICAgICAgICAgIDE5NyAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc2lnYWN0aW9uICAgICAgICAgIDE5OCAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc2dldG1hc2sgICAgICAgICAgIDE5OSAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc3NldG1hc2sgICAgICAgICAgIDIwMCAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc2lnc3VzcGVuZCAgICAgICAgIDIwMSAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfb2xkbHN0YXQgICAgICAgICAgIDIwMiAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfdXNlbGliICAgICAgICAgICAgIDIwMyAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfcmVhZGRpciAgICAgICAgICAgIDIwNCAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfcmVhZGFoZWFkICAgICAgICAgIDIwNSAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc29ja2V0Y2FsbCAgICAgICAgIDIwNiAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc3lzbG9nICAgICAgICAgICAgIDIwNyAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfbG9va3VwX2Rjb29raWUgICAgIDIwOCAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZmFkdmlzZTY0ICAgICAgICAgIDIwOSAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZmFkdmlzZTY0XzY0ICAgICAgIDIxMCAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfdGdraWxsICAgICAgICAgICAgIDIxMSAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfd2FpdHBpZCAgICAgICAgICAgIDIxMiAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc3dhcG9mZiAgICAgICAgICAgIDIxMyAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc3lzaW5mbyAgICAgICAgICAgIDIxNCAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfaXBjICAgICAgICAgICAgICAgIDIxNSAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc2lncmV0dXJuICAgICAgICAgIDIxNiAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfY2xvbmUgICAgICAgICAgICAgIDIxNyAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAjZGVmaW5lIF9fTlJfbW9kaWZ5X2xkdCAgICAgIDIxOCAgICBMaW51eCBTcGVjaWZpYyAtIGkzODYgc3BlY2lmaWMsIHVudXNlZCAgICAgICovCisjZGVmaW5lIF9fTlJfYWRqdGltZXggICAgICAgICAgIDIxOSAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc2lncHJvY21hc2sgICAgICAgIDIyMCAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfY3JlYXRlX21vZHVsZSAgICAgIDIyMSAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZGVsZXRlX21vZHVsZSAgICAgIDIyMiAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZ2V0X2tlcm5lbF9zeW1zICAgIDIyMyAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZ2V0cGdpZCAgICAgICAgICAgIDIyNCAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfYmRmbHVzaCAgICAgICAgICAgIDIyNSAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc3lzZnMgICAgICAgICAgICAgIDIyNiAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfYWZzX3N5c2NhbGwgICAgICAgIDIyNyAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc2V0ZnN1aWQgICAgICAgICAgIDIyOCAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc2V0ZnNnaWQgICAgICAgICAgIDIyOSAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfX25ld3NlbGVjdCAgICAgICAgIDIzMCAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjaWZkZWYgX19LRVJORUxfXworI2RlZmluZSBfX05SX3RpbWUJCTIzMSAvKiBMaW51eCBzcGFyYzMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZW5kaWYKKy8qICNkZWZpbmUgX19OUl9vbGRzdGF0ICAgICAgICAgMjMyICAgIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9zdGltZSAgICAgICAgICAgICAgMjMzIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9zdGF0ZnM2NCAgICAgICAgICAgMjM0IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9mc3RhdGZzNjQgICAgICAgICAgMjM1IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9fbGxzZWVrICAgICAgICAgICAgMjM2IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9tbG9jayAgICAgICAgICAgICAgMjM3CisjZGVmaW5lIF9fTlJfbXVubG9jayAgICAgICAgICAgIDIzOAorI2RlZmluZSBfX05SX21sb2NrYWxsICAgICAgICAgICAyMzkKKyNkZWZpbmUgX19OUl9tdW5sb2NrYWxsICAgICAgICAgMjQwCisjZGVmaW5lIF9fTlJfc2NoZWRfc2V0cGFyYW0gICAgIDI0MQorI2RlZmluZSBfX05SX3NjaGVkX2dldHBhcmFtICAgICAyNDIKKyNkZWZpbmUgX19OUl9zY2hlZF9zZXRzY2hlZHVsZXIgMjQzCisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0c2NoZWR1bGVyIDI0NAorI2RlZmluZSBfX05SX3NjaGVkX3lpZWxkICAgICAgICAyNDUKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4IDI0NgorI2RlZmluZSBfX05SX3NjaGVkX2dldF9wcmlvcml0eV9taW4gMjQ3CisjZGVmaW5lIF9fTlJfc2NoZWRfcnJfZ2V0X2ludGVydmFsICAyNDgKKyNkZWZpbmUgX19OUl9uYW5vc2xlZXAgICAgICAgICAgMjQ5CisjZGVmaW5lIF9fTlJfbXJlbWFwICAgICAgICAgICAgIDI1MAorI2RlZmluZSBfX05SX19zeXNjdGwgICAgICAgICAgICAyNTEKKyNkZWZpbmUgX19OUl9nZXRzaWQgICAgICAgICAgICAgMjUyCisjZGVmaW5lIF9fTlJfZmRhdGFzeW5jICAgICAgICAgIDI1MworI2RlZmluZSBfX05SX25mc3NlcnZjdGwgICAgICAgICAyNTQKKyNkZWZpbmUgX19OUl9hcGxpYiAgICAgICAgICAgICAgMjU1CisjZGVmaW5lIF9fTlJfY2xvY2tfc2V0dGltZQkyNTYKKyNkZWZpbmUgX19OUl9jbG9ja19nZXR0aW1lCTI1NworI2RlZmluZSBfX05SX2Nsb2NrX2dldHJlcwkyNTgKKyNkZWZpbmUgX19OUl9jbG9ja19uYW5vc2xlZXAJMjU5CisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0YWZmaW5pdHkJMjYwCisjZGVmaW5lIF9fTlJfc2NoZWRfc2V0YWZmaW5pdHkJMjYxCisjZGVmaW5lIF9fTlJfdGltZXJfc2V0dGltZQkyNjIKKyNkZWZpbmUgX19OUl90aW1lcl9nZXR0aW1lCTI2MworI2RlZmluZSBfX05SX3RpbWVyX2dldG92ZXJydW4JMjY0CisjZGVmaW5lIF9fTlJfdGltZXJfZGVsZXRlCTI2NQorI2RlZmluZSBfX05SX3RpbWVyX2NyZWF0ZQkyNjYKKy8qICNkZWZpbmUgX19OUl92c2VydmVyCQkyNjcgUmVzZXJ2ZWQgZm9yIFZTRVJWRVIgKi8KKyNkZWZpbmUgX19OUl9pb19zZXR1cAkJMjY4CisjZGVmaW5lIF9fTlJfaW9fZGVzdHJveQkJMjY5CisjZGVmaW5lIF9fTlJfaW9fc3VibWl0CQkyNzAKKyNkZWZpbmUgX19OUl9pb19jYW5jZWwJCTI3MQorI2RlZmluZSBfX05SX2lvX2dldGV2ZW50cwkyNzIKKyNkZWZpbmUgX19OUl9tcV9vcGVuCQkyNzMKKyNkZWZpbmUgX19OUl9tcV91bmxpbmsJCTI3NAorI2RlZmluZSBfX05SX21xX3RpbWVkc2VuZAkyNzUKKyNkZWZpbmUgX19OUl9tcV90aW1lZHJlY2VpdmUJMjc2CisjZGVmaW5lIF9fTlJfbXFfbm90aWZ5CQkyNzcKKyNkZWZpbmUgX19OUl9tcV9nZXRzZXRhdHRyCTI3OAorI2RlZmluZSBfX05SX3dhaXRpZAkJMjc5CisvKiNkZWZpbmUgX19OUl9zeXNfc2V0YWx0cm9vdAkyODAgYXZhaWxhYmxlICh3YXMgc2V0YWx0cm9vdCkgKi8KKyNkZWZpbmUgX19OUl9hZGRfa2V5CQkyODEKKyNkZWZpbmUgX19OUl9yZXF1ZXN0X2tleQkyODIKKyNkZWZpbmUgX19OUl9rZXljdGwJCTI4MworCisvKiBXQVJOSU5HOiBZb3UgTUFZIE5PVCBhZGQgc3lzY2FsbCBudW1iZXJzIGxhcmdlciB0aGFuIDI4Mywgc2luY2UKKyAqICAgICAgICAgIGFsbCBvZiB0aGUgc3lzY2FsbCB0YWJsZXMgaW4gdGhlIFNwYXJjIGtlcm5lbCBhcmUKKyAqICAgICAgICAgIHNpemVkIHRvIGhhdmUgMjgzIGVudHJpZXMgKHN0YXJ0aW5nIGF0IHplcm8pLiAgVGhlcmVmb3JlCisgKiAgICAgICAgICBmaW5kIGEgZnJlZSBzbG90IGluIHRoZSAwLTI4MiByYW5nZS4KKyAqLworCisjZGVmaW5lIF9zeXNjYWxsMCh0eXBlLG5hbWUpIFwKK3R5cGUgbmFtZSh2b2lkKSBcCit7IFwKK2xvbmcgX19yZXM7IFwKK3JlZ2lzdGVyIGxvbmcgX19nMSBfX2FzbV9fICgiZzEiKSA9IF9fTlJfIyNuYW1lOyBcCitfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInQgMHg2ZFxuXHQiIFwKKwkJICAgICAgInN1YiAlJWcwLCAlJW8wLCAlMFxuXHQiIFwKKwkJICAgICAgIm1vdmNjICUleGNjLCAlJW8wLCAlMFxuXHQiIFwKKwkJICAgICAgOiAiPXIiIChfX3JlcylcCisJCSAgICAgIDogInIiIChfX2cxKSBcCisJCSAgICAgIDogIm8wIiwgImNjIik7IFwKK2lmIChfX3JlcyA+PSAwKSBcCisgICAgcmV0dXJuICh0eXBlKSBfX3JlczsgXAorZXJybm8gPSAtX19yZXM7IFwKK3JldHVybiAtMTsgXAorfQorCisjZGVmaW5lIF9zeXNjYWxsMSh0eXBlLG5hbWUsdHlwZTEsYXJnMSkgXAordHlwZSBuYW1lKHR5cGUxIGFyZzEpIFwKK3sgXAorbG9uZyBfX3JlczsgXAorcmVnaXN0ZXIgbG9uZyBfX2cxIF9fYXNtX18gKCJnMSIpID0gX19OUl8jI25hbWU7IFwKK3JlZ2lzdGVyIGxvbmcgX19vMCBfX2FzbV9fICgibzAiKSA9IChsb25nKShhcmcxKTsgXAorX19hc21fXyBfX3ZvbGF0aWxlX18gKCJ0IDB4NmRcblx0IiBcCisJCSAgICAgICJzdWIgJSVnMCwgJSVvMCwgJTBcblx0IiBcCisJCSAgICAgICJtb3ZjYyAlJXhjYywgJSVvMCwgJTBcblx0IiBcCisJCSAgICAgIDogIj1yIiAoX19yZXMpLCAiPSZyIiAoX19vMCkgXAorCQkgICAgICA6ICIxIiAoX19vMCksICJyIiAoX19nMSkgXAorCQkgICAgICA6ICJjYyIpOyBcCitpZiAoX19yZXMgPj0gMCkgXAorCXJldHVybiAodHlwZSkgX19yZXM7IFwKK2Vycm5vID0gLV9fcmVzOyBcCityZXR1cm4gLTE7IFwKK30KKworI2RlZmluZSBfc3lzY2FsbDIodHlwZSxuYW1lLHR5cGUxLGFyZzEsdHlwZTIsYXJnMikgXAordHlwZSBuYW1lKHR5cGUxIGFyZzEsdHlwZTIgYXJnMikgXAoreyBcCitsb25nIF9fcmVzOyBcCityZWdpc3RlciBsb25nIF9fZzEgX19hc21fXyAoImcxIikgPSBfX05SXyMjbmFtZTsgXAorcmVnaXN0ZXIgbG9uZyBfX28wIF9fYXNtX18gKCJvMCIpID0gKGxvbmcpKGFyZzEpOyBcCityZWdpc3RlciBsb25nIF9fbzEgX19hc21fXyAoIm8xIikgPSAobG9uZykoYXJnMik7IFwKK19fYXNtX18gX192b2xhdGlsZV9fICgidCAweDZkXG5cdCIgXAorCQkgICAgICAic3ViICUlZzAsICUlbzAsICUwXG5cdCIgXAorCQkgICAgICAibW92Y2MgJSV4Y2MsICUlbzAsICUwXG5cdCIgXAorCQkgICAgICA6ICI9ciIgKF9fcmVzKSwgIj0mciIgKF9fbzApIFwKKwkJICAgICAgOiAiMSIgKF9fbzApLCAiciIgKF9fbzEpLCAiciIgKF9fZzEpIFwKKwkJICAgICAgOiAiY2MiKTsgXAoraWYgKF9fcmVzID49IDApIFwKKwlyZXR1cm4gKHR5cGUpIF9fcmVzOyBcCitlcnJubyA9IC1fX3JlczsgXAorcmV0dXJuIC0xOyBcCit9CisKKyNkZWZpbmUgX3N5c2NhbGwzKHR5cGUsbmFtZSx0eXBlMSxhcmcxLHR5cGUyLGFyZzIsdHlwZTMsYXJnMykgXAordHlwZSBuYW1lKHR5cGUxIGFyZzEsdHlwZTIgYXJnMix0eXBlMyBhcmczKSBcCit7IFwKK2xvbmcgX19yZXM7IFwKK3JlZ2lzdGVyIGxvbmcgX19nMSBfX2FzbV9fICgiZzEiKSA9IF9fTlJfIyNuYW1lOyBcCityZWdpc3RlciBsb25nIF9fbzAgX19hc21fXyAoIm8wIikgPSAobG9uZykoYXJnMSk7IFwKK3JlZ2lzdGVyIGxvbmcgX19vMSBfX2FzbV9fICgibzEiKSA9IChsb25nKShhcmcyKTsgXAorcmVnaXN0ZXIgbG9uZyBfX28yIF9fYXNtX18gKCJvMiIpID0gKGxvbmcpKGFyZzMpOyBcCitfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInQgMHg2ZFxuXHQiIFwKKwkJICAgICAgInN1YiAlJWcwLCAlJW8wLCAlMFxuXHQiIFwKKwkJICAgICAgIm1vdmNjICUleGNjLCAlJW8wLCAlMFxuXHQiIFwKKwkJICAgICAgOiAiPXIiIChfX3JlcyksICI9JnIiIChfX28wKSBcCisJCSAgICAgIDogIjEiIChfX28wKSwgInIiIChfX28xKSwgInIiIChfX28yKSwgInIiIChfX2cxKSBcCisJCSAgICAgIDogImNjIik7IFwKK2lmIChfX3Jlcz49MCkgXAorCXJldHVybiAodHlwZSkgX19yZXM7IFwKK2Vycm5vID0gLV9fcmVzOyBcCityZXR1cm4gLTE7IFwKK30KKworI2RlZmluZSBfc3lzY2FsbDQodHlwZSxuYW1lLHR5cGUxLGFyZzEsdHlwZTIsYXJnMix0eXBlMyxhcmczLHR5cGU0LGFyZzQpIFwKK3R5cGUgbmFtZSAodHlwZTEgYXJnMSwgdHlwZTIgYXJnMiwgdHlwZTMgYXJnMywgdHlwZTQgYXJnNCkgXAoreyBcCitsb25nIF9fcmVzOyBcCityZWdpc3RlciBsb25nIF9fZzEgX19hc21fXyAoImcxIikgPSBfX05SXyMjbmFtZTsgXAorcmVnaXN0ZXIgbG9uZyBfX28wIF9fYXNtX18gKCJvMCIpID0gKGxvbmcpKGFyZzEpOyBcCityZWdpc3RlciBsb25nIF9fbzEgX19hc21fXyAoIm8xIikgPSAobG9uZykoYXJnMik7IFwKK3JlZ2lzdGVyIGxvbmcgX19vMiBfX2FzbV9fICgibzIiKSA9IChsb25nKShhcmczKTsgXAorcmVnaXN0ZXIgbG9uZyBfX28zIF9fYXNtX18gKCJvMyIpID0gKGxvbmcpKGFyZzQpOyBcCitfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInQgMHg2ZFxuXHQiIFwKKwkJICAgICAgInN1YiAlJWcwLCAlJW8wLCAlMFxuXHQiIFwKKwkJICAgICAgIm1vdmNjICUleGNjLCAlJW8wLCAlMFxuXHQiIFwKKwkJICAgICAgOiAiPXIiIChfX3JlcyksICI9JnIiIChfX28wKSBcCisJCSAgICAgIDogIjEiIChfX28wKSwgInIiIChfX28xKSwgInIiIChfX28yKSwgInIiIChfX28zKSwgInIiIChfX2cxKSBcCisJCSAgICAgIDogImNjIik7IFwKK2lmIChfX3Jlcz49MCkgXAorCXJldHVybiAodHlwZSkgX19yZXM7IFwKK2Vycm5vID0gLV9fcmVzOyBcCityZXR1cm4gLTE7IFwKK30gCisKKyNkZWZpbmUgX3N5c2NhbGw1KHR5cGUsbmFtZSx0eXBlMSxhcmcxLHR5cGUyLGFyZzIsdHlwZTMsYXJnMyx0eXBlNCxhcmc0LCBcCisJICB0eXBlNSxhcmc1KSBcCit0eXBlIG5hbWUgKHR5cGUxIGFyZzEsdHlwZTIgYXJnMix0eXBlMyBhcmczLHR5cGU0IGFyZzQsdHlwZTUgYXJnNSkgXAoreyBcCitsb25nIF9fcmVzOyBcCityZWdpc3RlciBsb25nIF9fZzEgX19hc21fXyAoImcxIikgPSBfX05SXyMjbmFtZTsgXAorcmVnaXN0ZXIgbG9uZyBfX28wIF9fYXNtX18gKCJvMCIpID0gKGxvbmcpKGFyZzEpOyBcCityZWdpc3RlciBsb25nIF9fbzEgX19hc21fXyAoIm8xIikgPSAobG9uZykoYXJnMik7IFwKK3JlZ2lzdGVyIGxvbmcgX19vMiBfX2FzbV9fICgibzIiKSA9IChsb25nKShhcmczKTsgXAorcmVnaXN0ZXIgbG9uZyBfX28zIF9fYXNtX18gKCJvMyIpID0gKGxvbmcpKGFyZzQpOyBcCityZWdpc3RlciBsb25nIF9fbzQgX19hc21fXyAoIm80IikgPSAobG9uZykoYXJnNSk7IFwKK19fYXNtX18gX192b2xhdGlsZV9fICgidCAweDZkXG5cdCIgXAorCQkgICAgICAic3ViICUlZzAsICUlbzAsICUwXG5cdCIgXAorCQkgICAgICAibW92Y2MgJSV4Y2MsICUlbzAsICUwXG5cdCIgXAorCQkgICAgICA6ICI9ciIgKF9fcmVzKSwgIj0mciIgKF9fbzApIFwKKwkJICAgICAgOiAiMSIgKF9fbzApLCAiciIgKF9fbzEpLCAiciIgKF9fbzIpLCAiciIgKF9fbzMpLCAiciIgKF9fbzQpLCAiciIgKF9fZzEpIFwKKwkJICAgICAgOiAiY2MiKTsgXAoraWYgKF9fcmVzPj0wKSBcCisJcmV0dXJuICh0eXBlKSBfX3JlczsgXAorZXJybm8gPSAtX19yZXM7IFwKK3JldHVybiAtMTsgXAorfQorI2lmZGVmIF9fS0VSTkVMX1NZU0NBTExTX18KKworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyoKKyAqIHdlIG5lZWQgdGhpcyBpbmxpbmUgLSBmb3JraW5nIGZyb20ga2VybmVsIHNwYWNlIHdpbGwgcmVzdWx0CisgKiBpbiBOTyBDT1BZIE9OIFdSSVRFICghISEpLCB1bnRpbCBhbiBleGVjdmUgaXMgZXhlY3V0ZWQuIFRoaXMKKyAqIGlzIG5vIHByb2JsZW0sIGJ1dCBmb3IgdGhlIHN0YWNrLiBUaGlzIGlzIGhhbmRsZWQgYnkgbm90IGxldHRpbmcKKyAqIG1haW4oKSB1c2UgdGhlIHN0YWNrIGF0IGFsbCBhZnRlciBmb3JrKCkuIFRodXMsIG5vIGZ1bmN0aW9uCisgKiBjYWxscyAtIHdoaWNoIG1lYW5zIGlubGluZSBjb2RlIGZvciBmb3JrIHRvbywgYXMgb3RoZXJ3aXNlIHdlCisgKiB3b3VsZCB1c2UgdGhlIHN0YWNrIHVwb24gZXhpdCBmcm9tICdmb3JrKCknLgorICoKKyAqIEFjdHVhbGx5IG9ubHkgcGF1c2UgYW5kIGZvcmsgYXJlIG5lZWRlZCBpbmxpbmUsIHNvIHRoYXQgdGhlcmUKKyAqIHdvbid0IGJlIGFueSBtZXNzaW5nIHdpdGggdGhlIHN0YWNrIGZyb20gbWFpbigpLCBidXQgd2UgZGVmaW5lCisgKiBzb21lIG90aGVycyB0b28uCisgKi8KKyNkZWZpbmUgX19OUl9fZXhpdCBfX05SX2V4aXQKK3N0YXRpYyBfX2lubGluZV9fIF9zeXNjYWxsMChwaWRfdCxzZXRzaWQpCitzdGF0aWMgX19pbmxpbmVfXyBfc3lzY2FsbDMoaW50LHdyaXRlLGludCxmZCxfX2NvbnN0X18gY2hhciAqLGJ1ZixvZmZfdCxjb3VudCkKK3N0YXRpYyBfX2lubGluZV9fIF9zeXNjYWxsMyhpbnQscmVhZCxpbnQsZmQsY2hhciAqLGJ1ZixvZmZfdCxjb3VudCkKK3N0YXRpYyBfX2lubGluZV9fIF9zeXNjYWxsMyhvZmZfdCxsc2VlayxpbnQsZmQsb2ZmX3Qsb2Zmc2V0LGludCxjb3VudCkKK3N0YXRpYyBfX2lubGluZV9fIF9zeXNjYWxsMShpbnQsZHVwLGludCxmZCkKK3N0YXRpYyBfX2lubGluZV9fIF9zeXNjYWxsMyhpbnQsZXhlY3ZlLF9fY29uc3RfXyBjaGFyICosZmlsZSxjaGFyICoqLGFyZ3YsY2hhciAqKixlbnZwKQorc3RhdGljIF9faW5saW5lX18gX3N5c2NhbGwzKGludCxvcGVuLF9fY29uc3RfXyBjaGFyICosZmlsZSxpbnQsZmxhZyxpbnQsbW9kZSkKK3N0YXRpYyBfX2lubGluZV9fIF9zeXNjYWxsMShpbnQsY2xvc2UsaW50LGZkKQorc3RhdGljIF9faW5saW5lX18gX3N5c2NhbGwzKHBpZF90LHdhaXRwaWQscGlkX3QscGlkLGludCAqLHdhaXRfc3RhdCxpbnQsb3B0aW9ucykKKworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKworYXNtbGlua2FnZSB1bnNpZ25lZCBsb25nIHN5c19tbWFwKAorCQkJCXVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sCisJCQkJdW5zaWduZWQgbG9uZyBwcm90LCB1bnNpZ25lZCBsb25nIGZsYWdzLAorCQkJCXVuc2lnbmVkIGxvbmcgZmQsIHVuc2lnbmVkIGxvbmcgb2ZmKTsKK3N0cnVjdCBzaWdhY3Rpb247Cithc21saW5rYWdlIGxvbmcgc3lzX3J0X3NpZ2FjdGlvbihpbnQgc2lnLAorCQkJCWNvbnN0IHN0cnVjdCBzaWdhY3Rpb24gX191c2VyICphY3QsCisJCQkJc3RydWN0IHNpZ2FjdGlvbiBfX3VzZXIgKm9hY3QsCisJCQkJdm9pZCBfX3VzZXIgKnJlc3RvcmVyLAorCQkJCXNpemVfdCBzaWdzZXRzaXplKTsKKworI2VuZGlmIC8qIF9fS0VSTkVMX1NZU0NBTExTX18gKi8KKworI2lmZGVmIF9fS0VSTkVMX18KKy8qIHN5c2NvbmYgb3B0aW9ucywgZm9yIFN1bk9TIGNvbXBhdGliaWxpdHkgKi8KKyNkZWZpbmUgICBfU0NfQVJHX01BWCAgICAgICAgICAgICAxCisjZGVmaW5lICAgX1NDX0NISUxEX01BWCAgICAgICAgICAgMgorI2RlZmluZSAgIF9TQ19DTEtfVENLICAgICAgICAgICAgIDMKKyNkZWZpbmUgICBfU0NfTkdST1VQU19NQVggICAgICAgICA0CisjZGVmaW5lICAgX1NDX09QRU5fTUFYICAgICAgICAgICAgNQorI2RlZmluZSAgIF9TQ19KT0JfQ09OVFJPTCAgICAgICAgIDYKKyNkZWZpbmUgICBfU0NfU0FWRURfSURTICAgICAgICAgICA3CisjZGVmaW5lICAgX1NDX1ZFUlNJT04gICAgICAgICAgICAgOAorCisjZGVmaW5lIF9fQVJDSF9XQU5UX0lQQ19QQVJTRV9WRVJTSU9OCisjZGVmaW5lIF9fQVJDSF9XQU5UX09MRF9SRUFERElSCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NUQVQ2NAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfQUxBUk0KKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0dFVEhPU1ROQU1FCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19QQVVTRQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0dFVE1BU0sKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR05BTAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfVElNRQorI2RlZmluZSBfX0FSQ0hfV0FOVF9DT01QQVRfU1lTX1RJTUUKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1VUSU1FCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19XQUlUUElECisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TT0NLRVRDQUxMCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19GQURWSVNFNjQKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0dFVFBHUlAKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0xMU0VFSworI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfTklDRQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfT0xEX0dFVFJMSU1JVAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfT0xEVU1PVU5UCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdQRU5ESU5HCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdQUk9DTUFTSworI2VuZGlmCisKKy8qCisgKiAiQ29uZGl0aW9uYWwiIHN5c2NhbGxzCisgKgorICogV2hhdCB3ZSB3YW50IGlzIF9fYXR0cmlidXRlX18oKHdlYWssYWxpYXMoInN5c19uaV9zeXNjYWxsIikpKSwKKyAqIGJ1dCBpdCBkb2Vzbid0IHdvcmsgb24gYWxsIHRvb2xjaGFpbnMsIHNvIHdlIGp1c3QgZG8gaXQgYnkgaGFuZAorICovCisjZGVmaW5lIGNvbmRfc3lzY2FsbCh4KSBhc20oIi53ZWFrXHQiICN4ICJcblx0LnNldFx0IiAjeCAiLHN5c19uaV9zeXNjYWxsIikKKworI2VuZGlmIC8qIF9TUEFSQzY0X1VOSVNURF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3VwYS5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC91cGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWUwOWEyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC91cGEuaApAQCAtMCwwICsxLDExMCBAQAorLyogJElkOiB1cGEuaCx2IDEuMyAxOTk5LzA5LzIxIDE0OjM5OjQ3IGRhdmVtIEV4cCAkICovCisjaWZuZGVmIF9TUEFSQzY0X1VQQV9ICisjZGVmaW5lIF9TUEFSQzY0X1VQQV9ICisKKyNpbmNsdWRlIDxhc20vYXNpLmg+CisKKy8qIFVQQSBsZXZlbCByZWdpc3RlcnMgYW5kIGRlZmluZXMuICovCisKKy8qIFVQQSBDb25maWcgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVVBBX0NPTkZJR19SRVNWCQkweGZmZmZmZmZmYzAwMDAwMDAgLyogUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVUEFfQ09ORklHX1BDT04JCTB4MDAwMDAwMDAzZmMwMDAwMCAvKiBEZXB0aCBvZiB2YXJpb3VzIHN5cyBxdWV1ZXMuICovCisjZGVmaW5lIFVQQV9DT05GSUdfTUlECQkweDAwMDAwMDAwMDAzZTAwMDAgLyogTW9kdWxlIElELiAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVUEFfQ09ORklHX1BDQVAJCTB4MDAwMDAwMDAwMDAxZmZmZiAvKiBQb3J0IENhcGFiaWxpdGllcy4gICAgICAgICAgICovCisKKy8qIFVQQSBQb3J0IElEIFJlZ2lzdGVyICovCisjZGVmaW5lIFVQQV9QT1JUSURfRk5QCQkweGZmMDAwMDAwMDAwMDAwMDAgLyogSGFyZGNvZGVkIHRvIDB4ZmMgb24gdWx0cmEuICAqLworI2RlZmluZSBVUEFfUE9SVElEX1JFU1YJCTB4MDBmZmZmZjgwMDAwMDAwMCAvKiBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVQQV9QT1JUSURfRUNDVkFMSUQgICAgIDB4MDAwMDAwMDQwMDAwMDAwMCAvKiBaZXJvIGlmIG1vZCBjYW4gZ2VuZXJhdGUgRUNDICovCisjZGVmaW5lIFVQQV9QT1JUSURfT05FUkVBRCAgICAgIDB4MDAwMDAwMDIwMDAwMDAwMCAvKiBTZXQgaWYgbW9kIGdlbmVyYXRlcyBQX1JBU0IgICovCisjZGVmaW5lIFVQQV9QT1JUSURfUElOVFJEUSAgICAgIDB4MDAwMDAwMDE4MDAwMDAwMCAvKiAjIG91dHN0YW5kaW5nIFBfSU5UX1JFUSdzICAgICovCisjZGVmaW5lIFVQQV9QT1JUSURfUFJFUURRICAgICAgIDB4MDAwMDAwMDA3ZTAwMDAwMCAvKiBzbGF2ZS13cidzIHRvIG1vZCBzdXBwb3J0ZWQgICovCisjZGVmaW5lIFVQQV9QT1JUSURfUFJFUVJEICAgICAgIDB4MDAwMDAwMDAwMWUwMDAwMCAvKiAjIGluY29taW5nIFBfUkVRJ3Mgc3VwcG9ydGVkICovCisjZGVmaW5lIFVQQV9QT1JUSURfVVBBQ0FQICAgICAgIDB4MDAwMDAwMDAwMDFmMDAwMCAvKiBVUEEgY2FwYWJpbGl0aWVzIG9mIG1vZCAgICAgICovCisjZGVmaW5lIFVQQV9QT1JUSURfSUQgICAgICAgICAgIDB4MDAwMDAwMDAwMDAwZmZmZiAvKiBNb2R1bGUgSWRlbnRpZmljYXRpb24gYml0cyAgKi8KKworLyogVVBBIEkvTyBzcGFjZSBhY2Nlc3NvcnMgKi8KKyNpZiBkZWZpbmVkKF9fS0VSTkVMX18pICYmICFkZWZpbmVkKF9fQVNTRU1CTFlfXykKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGNoYXIgX3VwYV9yZWFkYih1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJdW5zaWduZWQgY2hhciByZXQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibGR1YmFcdFslMV0gJTIsICUwXHQvKiB1cGFfcmVhZGIgKi8iCisJCQkgICAgIDogIj1yIiAocmV0KQorCQkJICAgICA6ICJyIiAoYWRkciksICJpIiAoQVNJX1BIWVNfQllQQVNTX0VDX0UpKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIHNob3J0IF91cGFfcmVhZHcodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXVuc2lnbmVkIHNob3J0IHJldDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKCJsZHVoYVx0WyUxXSAlMiwgJTBcdC8qIHVwYV9yZWFkdyAqLyIKKwkJCSAgICAgOiAiPXIiIChyZXQpCisJCQkgICAgIDogInIiIChhZGRyKSwgImkiIChBU0lfUEhZU19CWVBBU1NfRUNfRSkpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IF91cGFfcmVhZGwodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXVuc2lnbmVkIGludCByZXQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibGR1d2FcdFslMV0gJTIsICUwXHQvKiB1cGFfcmVhZGwgKi8iCisJCQkgICAgIDogIj1yIiAocmV0KQorCQkJICAgICA6ICJyIiAoYWRkciksICJpIiAoQVNJX1BIWVNfQllQQVNTX0VDX0UpKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgX3VwYV9yZWFkcSh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJdW5zaWduZWQgbG9uZyByZXQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibGR4YVx0WyUxXSAlMiwgJTBcdC8qIHVwYV9yZWFkcSAqLyIKKwkJCSAgICAgOiAiPXIiIChyZXQpCisJCQkgICAgIDogInIiIChhZGRyKSwgImkiIChBU0lfUEhZU19CWVBBU1NfRUNfRSkpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfdXBhX3dyaXRlYih1bnNpZ25lZCBjaGFyIGIsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RiYVx0JTAsIFslMV0gJTJcdC8qIHVwYV93cml0ZWIgKi8iCisJCQkgICAgIDogLyogbm8gb3V0cHV0cyAqLworCQkJICAgICA6ICJyIiAoYiksICJyIiAoYWRkciksICJpIiAoQVNJX1BIWVNfQllQQVNTX0VDX0UpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfdXBhX3dyaXRldyh1bnNpZ25lZCBzaG9ydCB3LCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0aGFcdCUwLCBbJTFdICUyXHQvKiB1cGFfd3JpdGV3ICovIgorCQkJICAgICA6IC8qIG5vIG91dHB1dHMgKi8KKwkJCSAgICAgOiAiciIgKHcpLCAiciIgKGFkZHIpLCAiaSIgKEFTSV9QSFlTX0JZUEFTU19FQ19FKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX3VwYV93cml0ZWwodW5zaWduZWQgaW50IGwsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3R3YVx0JTAsIFslMV0gJTJcdC8qIHVwYV93cml0ZWwgKi8iCisJCQkgICAgIDogLyogbm8gb3V0cHV0cyAqLworCQkJICAgICA6ICJyIiAobCksICJyIiAoYWRkciksICJpIiAoQVNJX1BIWVNfQllQQVNTX0VDX0UpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfdXBhX3dyaXRlcSh1bnNpZ25lZCBsb25nIHEsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3R4YVx0JTAsIFslMV0gJTJcdC8qIHVwYV93cml0ZXEgKi8iCisJCQkgICAgIDogLyogbm8gb3V0cHV0cyAqLworCQkJICAgICA6ICJyIiAocSksICJyIiAoYWRkciksICJpIiAoQVNJX1BIWVNfQllQQVNTX0VDX0UpKTsKK30KKworI2RlZmluZSB1cGFfcmVhZGIoX19hZGRyKQkJKF91cGFfcmVhZGIoKHVuc2lnbmVkIGxvbmcpKF9fYWRkcikpKQorI2RlZmluZSB1cGFfcmVhZHcoX19hZGRyKQkJKF91cGFfcmVhZHcoKHVuc2lnbmVkIGxvbmcpKF9fYWRkcikpKQorI2RlZmluZSB1cGFfcmVhZGwoX19hZGRyKQkJKF91cGFfcmVhZGwoKHVuc2lnbmVkIGxvbmcpKF9fYWRkcikpKQorI2RlZmluZSB1cGFfcmVhZHEoX19hZGRyKQkJKF91cGFfcmVhZHEoKHVuc2lnbmVkIGxvbmcpKF9fYWRkcikpKQorI2RlZmluZSB1cGFfd3JpdGViKF9fYiwgX19hZGRyKQkJKF91cGFfd3JpdGViKChfX2IpLCAodW5zaWduZWQgbG9uZykoX19hZGRyKSkpCisjZGVmaW5lIHVwYV93cml0ZXcoX193LCBfX2FkZHIpCQkoX3VwYV93cml0ZXcoKF9fdyksICh1bnNpZ25lZCBsb25nKShfX2FkZHIpKSkKKyNkZWZpbmUgdXBhX3dyaXRlbChfX2wsIF9fYWRkcikJCShfdXBhX3dyaXRlbCgoX19sKSwgKHVuc2lnbmVkIGxvbmcpKF9fYWRkcikpKQorI2RlZmluZSB1cGFfd3JpdGVxKF9fcSwgX19hZGRyKQkJKF91cGFfd3JpdGVxKChfX3EpLCAodW5zaWduZWQgbG9uZykoX19hZGRyKSkpCisjZW5kaWYgLyogX19LRVJORUxfXyAmJiAhX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiAhKF9TUEFSQzY0X1VQQV9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC91c2VyLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3VzZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2U0ZTg1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC91c2VyLmgKQEAgLTAsMCArMSw2MCBAQAorLyogJElkOiB1c2VyLmgsdiAxLjEgMTk5Ni8xMi8yNiAxNDoyMjo0NCBkYXZlbSBFeHAgJAorICogYXNtLXNwYXJjNjQvdXNlci5oOiBDb3JlIGZpbGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBTcGFyYy4KKyAqCisgKiBLZWVwIGluIHN5bmMgd2l0aCByZWcuaC4gIEFjdHVhbGx5LCB3ZSBjb3VsZCBnZXQgcmlkIG9mIHRoaXMKKyAqIG9uZSwgc2luY2Ugd2Ugd29uJ3QgYS5vdXQgY29yZSBkdW1wIHRoYXQgbXVjaCBhbnl3YXlzIC0gbWlndWVsLgorICogQ29weXJpZ2h0IChDKSAxOTk1IChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQorICovCisjaWZuZGVmIF9TUEFSQzY0X1VTRVJfSAorI2RlZmluZSBfU1BBUkM2NF9VU0VSX0gKKworI2luY2x1ZGUgPGFzbS9hLm91dC5oPgorc3RydWN0IHN1bm9zX3JlZ3MgeworCXVuc2lnbmVkIGludCBwc3IsIHBjLCBucGMsIHk7CisJdW5zaWduZWQgaW50IHJlZ3NbMTVdOworfTsKKworc3RydWN0IHN1bm9zX2ZwcXVldWUgeworCXVuc2lnbmVkIGludCAqYWRkcjsKKwl1bnNpZ25lZCBpbnQgaW5zdDsKK307CisKK3N0cnVjdCBzdW5vc19mcCB7CisJdW5pb24geworCQl1bnNpZ25lZCBpbnQgcmVnc1szMl07CisJCWRvdWJsZSByZWdfZGJsc1sxNl07CisJfSBmcmVnczsKKwl1bnNpZ25lZCBpbnQgZnNyOworCXVuc2lnbmVkIGludCBmbGFnczsKKwl1bnNpZ25lZCBpbnQgZXh0cmE7CisJdW5zaWduZWQgaW50IGZwcV9jb3VudDsKKwlzdHJ1Y3Qgc3Vub3NfZnBxdWV1ZSBmcHFbMTZdOworfTsKKworc3RydWN0IHN1bm9zX2ZwdSB7CisJc3RydWN0IHN1bm9zX2ZwIGZwc3RhdHVzOworfTsKKworLyogVGhlIFN1bk9TIGNvcmUgZmlsZSBoZWFkZXIgbGF5b3V0LiAqLworc3RydWN0IHVzZXIgeworCXVuc2lnbmVkIGludCBtYWdpYzsKKwl1bnNpZ25lZCBpbnQgbGVuOworCXN0cnVjdCBzdW5vc19yZWdzIHJlZ3M7CisJc3RydWN0IGV4ZWMgdWV4ZWM7CisJaW50ICAgICAgICAgICBzaWduYWw7CisJc2l6ZV90ICAgICAgICB1X3RzaXplOyAvKiBhbGwgb2YgdGhlc2UgaW4gYnl0ZXMhICovCisJc2l6ZV90ICAgICAgICB1X2RzaXplOworCXNpemVfdCAgICAgICAgdV9zc2l6ZTsKKwljaGFyICAgICAgICAgIHVfY29tbVsxN107CisJc3RydWN0IHN1bm9zX2ZwdSBmcHU7CisJdW5zaWduZWQgaW50ICBzaWdjb2RlOyAgIC8qIFNwZWNpYWwgc2lnY29udGV4dCBzdWJjb2RlLCBpZiBhbnkgKi8KK307CisKKyNkZWZpbmUgTkJQRyAgICAgICAgICAgICAgICAgICBQQUdFX1NJWkUgLyogWFhYIDQwOTYgbWF5YmU/ICovCisjZGVmaW5lIFVQQUdFUyAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBIT1NUX1RFWFRfU1RBUlRfQUREUiAgICh1LnN0YXJ0X2NvZGUpCisjZGVmaW5lIEhPU1RfREFUQV9TVEFSVF9BRERSICAgKHUuc3RhcnRfZGF0YSkKKyNkZWZpbmUgSE9TVF9TVEFDS19FTkRfQUREUiAgICAodS5zdGFydF9zdGFjayArIHUudV9zc2l6ZSAqIE5CUEcpCisjZGVmaW5lIFNVTk9TX0NPUkVfTUFHSUMgICAgICAgMHgwODA0NTYKKworI2VuZGlmIC8qICEoX1NQQVJDNjRfVVNFUl9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC91dHJhcC5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC91dHJhcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxYjBlYmYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3V0cmFwLmgKQEAgLTAsMCArMSw1MSBAQAorLyogJElkOiB1dHJhcC5oLHYgMS4xIDE5OTcvMTAvMTQgMTY6MjE6MzEgamogRXhwICQKKyAqIGluY2x1ZGUvYXNtLXNwYXJjNjQvdXRyYXAuaAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NyBKYWt1YiBKZWxpbmVrIChqakBzdW5zaXRlLm1mZi5jdW5pLmN6KQorICovCisKKyNpZm5kZWYgX19BU01fU1BBUkM2NF9VVFJBUF9ICisjZGVmaW5lIF9fQVNNX1NQQVJDNjRfVVRSQVBfSAorCisjZGVmaW5lIFVUX0lOU1RSVUNUSU9OX0VYQ0VQVElPTgkJMQorI2RlZmluZSBVVF9JTlNUUlVDVElPTl9FUlJPUgkJCTIKKyNkZWZpbmUgVVRfSU5TVFJVQ1RJT05fUFJPVEVDVElPTgkJMworI2RlZmluZSBVVF9JTExUUkFQX0lOU1RSVUNUSU9OCQkJNAorI2RlZmluZSBVVF9JTExFR0FMX0lOU1RSVUNUSU9OCQkJNQorI2RlZmluZSBVVF9QUklWSUxFR0VEX09QQ09ERQkJCTYKKyNkZWZpbmUgVVRfRlBfRElTQUJMRUQJCQkJNworI2RlZmluZSBVVF9GUF9FWENFUFRJT05fSUVFRV83NTQJCTgKKyNkZWZpbmUgVVRfRlBfRVhDRVBUSU9OX09USEVSCQkJOQorI2RlZmluZSBVVF9UQUdfT1ZFUlZJRVcJCQkJMTAKKyNkZWZpbmUgVVRfRElWSVNJT05fQllfWkVSTwkJCTExCisjZGVmaW5lIFVUX0RBVEFfRVhDRVBUSU9OCQkJMTIKKyNkZWZpbmUgVVRfREFUQV9FUlJPUgkJCQkxMworI2RlZmluZSBVVF9EQVRBX1BST1RFQ1RJT04JCQkxNAorI2RlZmluZSBVVF9NRU1fQUREUkVTU19OT1RfQUxJR05FRAkJMTUKKyNkZWZpbmUgVVRfUFJJVklMRUdFRF9BQ1RJT04JCQkxNgorI2RlZmluZSBVVF9BU1lOQ19EQVRBX0VSUk9SCQkJMTcKKyNkZWZpbmUgVVRfVFJBUF9JTlNUUlVDVElPTl8xNgkJCTE4CisjZGVmaW5lIFVUX1RSQVBfSU5TVFJVQ1RJT05fMTcJCQkxOQorI2RlZmluZSBVVF9UUkFQX0lOU1RSVUNUSU9OXzE4CQkJMjAKKyNkZWZpbmUgVVRfVFJBUF9JTlNUUlVDVElPTl8xOQkJCTIxCisjZGVmaW5lIFVUX1RSQVBfSU5TVFJVQ1RJT05fMjAJCQkyMgorI2RlZmluZSBVVF9UUkFQX0lOU1RSVUNUSU9OXzIxCQkJMjMKKyNkZWZpbmUgVVRfVFJBUF9JTlNUUlVDVElPTl8yMgkJCTI0CisjZGVmaW5lIFVUX1RSQVBfSU5TVFJVQ1RJT05fMjMJCQkyNQorI2RlZmluZSBVVF9UUkFQX0lOU1RSVUNUSU9OXzI0CQkJMjYKKyNkZWZpbmUgVVRfVFJBUF9JTlNUUlVDVElPTl8yNQkJCTI3CisjZGVmaW5lIFVUX1RSQVBfSU5TVFJVQ1RJT05fMjYJCQkyOAorI2RlZmluZSBVVF9UUkFQX0lOU1RSVUNUSU9OXzI3CQkJMjkKKyNkZWZpbmUgVVRfVFJBUF9JTlNUUlVDVElPTl8yOAkJCTMwCisjZGVmaW5lIFVUX1RSQVBfSU5TVFJVQ1RJT05fMjkJCQkzMQorI2RlZmluZSBVVF9UUkFQX0lOU1RSVUNUSU9OXzMwCQkJMzIKKyNkZWZpbmUgVVRfVFJBUF9JTlNUUlVDVElPTl8zMQkJCTMzCisKKyNkZWZpbmUJVVRIX05PQ0hBTkdFCQkJCSgtMSkKKworI2lmbmRlZiBfX0FTU0VNQkxZX18gCit0eXBlZGVmIGludCB1dHJhcF9lbnRyeV90OwordHlwZWRlZiB2b2lkICp1dHJhcF9oYW5kbGVyX3Q7CisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiAhKF9fQVNNX1NQQVJDNjRfUFJPQ0VTU09SX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3ZnYS5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC92Z2EuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzU3ZWIzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC92Z2EuaApAQCAtMCwwICsxLDMzIEBACisvKgorICoJQWNjZXNzIHRvIFZHQSB2aWRlb3JhbQorICoKKyAqCShjKSAxOTk4IE1hcnRpbiBNYXJlcyA8bWpAdWN3LmN6PgorICovCisKKyNpZm5kZWYgX0xJTlVYX0FTTV9WR0FfSF8KKyNkZWZpbmUgX0xJTlVYX0FTTV9WR0FfSF8KKworI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCisjZGVmaW5lIFZUX0JVRl9IQVZFX1JXCisKKyN1bmRlZiBzY3Jfd3JpdGV3CisjdW5kZWYgc2NyX3JlYWR3CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzY3Jfd3JpdGV3KHUxNiB2YWwsIHUxNiAqYWRkcikKK3sKKwlCVUdfT04oKGxvbmcpIGFkZHIgPj0gMCk7CisKKwkqYWRkciA9IHZhbDsKK30KKworc3RhdGljIGlubGluZSB1MTYgc2NyX3JlYWR3KGNvbnN0IHUxNiAqYWRkcikKK3sKKwlCVUdfT04oKGxvbmcpIGFkZHIgPj0gMCk7CisKKwlyZXR1cm4gKmFkZHI7Cit9CisKKyNkZWZpbmUgVkdBX01BUF9NRU0oeCkgKHgpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC92aXNhc20uaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvdmlzYXNtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc0MDc4NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvdmlzYXNtLmgKQEAgLTAsMCArMSw2MyBAQAorLyogJElkOiB2aXNhc20uaCx2IDEuNSAyMDAxLzA0LzI0IDAxOjA5OjEyIGRhdmVtIEV4cCAkICovCisjaWZuZGVmIF9TUEFSQzY0X1ZJU0FTTV9ICisjZGVmaW5lIF9TUEFSQzY0X1ZJU0FTTV9ICisKKy8qIHZpc2FzbS5oOiAgRlBVIHNhdmluZyBtYWNyb3MgZm9yIFZJUyByb3V0aW5lcworICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCBKYWt1YiBKZWxpbmVrIChqakB1bHRyYS5saW51eC5jeikKKyAqLworIAorI2luY2x1ZGUgPGFzbS9wc3RhdGUuaD4KKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisKKy8qIENsb2JiZXJzICVvNSwgJWcxLCAlZzIsICVnMywgJWc3LCAlaWNjLCAleGNjICovCisKKyNkZWZpbmUgVklTRW50cnkJCQkJCVwKKwlyZAkJJWZwcnMsICVvNTsJCQlcCisJYW5kY2MJCSVvNSwgKEZQUlNfRkVGfEZQUlNfRFUpLCAlZzA7CVwKKwliZSxwdAkJJWljYywgMjk3ZjsJCQlcCisJIHNldGhpCQklaGkoMjk3ZiksICVnNzsJCQlcCisJc2V0aGkJCSVoaShWSVNlbnRlciksICVnMTsJCVwKKwlqbXBsCQklZzEgKyAlbG8oVklTZW50ZXIpLCAlZzA7CVwKKwkgb3IJCSVnNywgJWxvKDI5N2YpLCAlZzc7CQlcCisyOTc6CXdyCQklZzAsIEZQUlNfRkVGLCAlZnByczsJCVwKKworI2RlZmluZSBWSVNFeGl0CQkJCQkJXAorCXdyCQklZzAsIDAsICVmcHJzOworCisvKiBDbG9iYmVycyAlbzUsICVnMSwgJWcyLCAlZzMsICVnNywgJWljYywgJXhjYy4KKyAqIE11c3QgcHJlc2VydmUgJW81IGJldHdlZW4gVklTRW50cnlIYWxmIGFuZCBWSVNFeGl0SGFsZiAqLworCisjZGVmaW5lIFZJU0VudHJ5SGFsZgkJCQkJXAorCXJkCQklZnBycywgJW81OwkJCVwKKwlhbmRjYwkJJW81LCBGUFJTX0ZFRiwgJWcwOwkJXAorCWJlLHB0CQklaWNjLCAyOTdmOwkJCVwKKwkgc2V0aGkJCSVoaSgyOThmKSwgJWc3OwkJCVwKKwlzZXRoaQkJJWhpKFZJU2VudGVyaGFsZiksICVnMTsJCVwKKwlqbXBsCQklZzEgKyAlbG8oVklTZW50ZXJoYWxmKSwgJWcwOwlcCisJIG9yCQklZzcsICVsbygyOThmKSwgJWc3OwkJXAorCWNscgkJJW81OwkJCQlcCisyOTc6CXdyCQklbzUsIEZQUlNfRkVGLCAlZnByczsJCVwKKzI5ODoKKworI2RlZmluZSBWSVNFeGl0SGFsZgkJCQkJXAorCXdyCQklbzUsIDAsICVmcHJzOworCisjaWZuZGVmIF9fQVNTRU1CTFlfXwkKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgc2F2ZV9hbmRfY2xlYXJfZnB1KHZvaWQpIHsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisiCQlyZCAlJWZwcnMsICUlbzVcbiIKKyIJCWFuZGNjICUlbzUsICUwLCAlJWcwXG4iCisiCQliZSxwdCAlJWljYywgMjk5ZlxuIgorIgkJIHNldGhpICUlaGkoMjk4ZiksICUlZzdcbiIKKyIJCXNldGhpICUlaGkoVklTZW50ZXIpLCAlJWcxXG4iCisiCQlqbXBsICUlZzEgKyAlJWxvKFZJU2VudGVyKSwgJSVnMFxuIgorIgkJIG9yICUlZzcsICUlbG8oMjk4ZiksICUlZzdcbiIKKyIJMjk4Ogl3ciAlJWcwLCAwLCAlJWZwcnNcbiIKKyIJMjk5OlxuIgorIgkJIiA6IDogImkiIChGUFJTX0ZFRnxGUFJTX0RVKSA6CisJCSJvNSIsICJnMSIsICJnMiIsICJnMyIsICJnNyIsICJjYyIpOworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfU1BBUkM2NF9BU0lfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC92dWlkX2V2ZW50LmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3Z1aWRfZXZlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWY0ZDE3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC92dWlkX2V2ZW50LmgKQEAgLTAsMCArMSw0MCBAQAorLyogU3VuT1MgVmlydHVhbCBVc2VyIElucHV0IERldmljZSAoVlVJRCkgY29tcGF0aWJpbGl0eSAqLworCit0eXBlZGVmIHN0cnVjdCBmaXJtX2V2ZW50IHsKKwl1bnNpZ25lZCBzaG9ydCBpZDsJICAvKiB0YWcgZm9yIHRoaXMgZXZlbnQgKi8KKwl1bnNpZ25lZCBjaGFyICBwYWlyX3R5cGU7IC8qIHVudXNlZCBieSBYMTEgKi8KKyAgICAgICAgdW5zaWduZWQgY2hhciAgcGFpcjsJICAvKiB1bnVzZWQgYnkgWDExICovCisgICAgICAgIGludCAgICAgICAgICAgIHZhbHVlOwkgIC8qIFZLRVlfVVAsIFZLRVlfRE9XTiBvciBkZWx0YSAqLworICAgICAgICBzdHJ1Y3QgdGltZXZhbCB0aW1lOworfSBGaXJtX2V2ZW50OworCitlbnVtIHsKKyAgICBGRV9QQUlSX05PTkUsCisgICAgRkVfUEFJUl9TRVQsCisgICAgRkVfUEFJUl9ERUxUQSwKKyAgICBGRV9QQUlSX0FCU09MVVRFCit9OworCisvKiBWVUlEIHN0cmVhbSBmb3JtYXRzICovCisjZGVmaW5lIFZVSURfTkFUSVZFICAgICAwCS8qIE5hdGl2ZSBieXRlIHN0cmVhbSBmb3JtYXQgKi8KKyNkZWZpbmUgVlVJRF9GSVJNX0VWRU5UIDEJLyogc2VuZCBmaXJtX2V2ZW50IHN0cnVjdHVyZXMgKi8KKworLyogaW9jdGxzICovCisgICAgLyogU2V0IGlucHV0IGRldmljZSBieXRlIHN0cmVhbSBmb3JtYXQgKGFueSBvZiBWVUlEX3tOQVRJVkUsRklSTV9FVkVOVH0pICovCisjZGVmaW5lIFZVSURTRk9STUFUICAgX0lPVygndicsIDEsIGludCkKKyAgICAvKiBSZXRyaWV2ZSBpbnB1dCBkZXZpY2UgYnl0ZSBzdHJlYW0gZm9ybWF0ICovCisjZGVmaW5lIFZVSURHRk9STUFUICAgX0lPUigndicsIDIsIGludCkKKworLyogUG9zc2libGUgdGFnIHZhbHVlcyAqLworLyogICAgbW91c2UgYnV0dG9uczogKi8KKyNkZWZpbmUgTVNfTEVGVCAgICAgICAgIDB4N2YyMAorI2RlZmluZSBNU19NSURETEUgICAgICAgMHg3ZjIxCisjZGVmaW5lIE1TX1JJR0hUICAgICAgICAweDdmMjIKKy8qICAgIG1vdGlvbjogKi8KKyNkZWZpbmUgTE9DX1hfREVMVEEgICAgIDB4N2Y4MAorI2RlZmluZSBMT0NfWV9ERUxUQSAgICAgMHg3ZjgxCisjZGVmaW5lIExPQ19YX0FCU09MVVRFICAweDdmODIgIC8qIFggY29tcGF0LCB1bnN1cHBvcnRlZCAqLworI2RlZmluZSBMT0NfWV9BQlNPTFVURSAgMHg3ZjgzICAvKiBYIGNvbXBhdCwgdW5zdXBwb3J0ZWQgKi8KKworI2RlZmluZSBWS0VZX1VQICAgMAorI2RlZmluZSBWS0VZX0RPV04gMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC93YXRjaGRvZy5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC93YXRjaGRvZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkNWIwM2IKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3dhdGNoZG9nLmgKQEAgLTAsMCArMSwzMSBAQAorLyogJElkOiB3YXRjaGRvZy5oLHYgMS4xIDIwMDEvMDEvMTggMDQ6NDc6NDQgZGF2ZW0gRXhwICQKKyAqCisgKiB3YXRjaGRvZyAtIERyaXZlciBpbnRlcmZhY2UgZm9yIHRoZSBoYXJkd2FyZSB3YXRjaGRvZyB0aW1lcnMKKyAqIHByZXNlbnQgb24gU3VuIE1pY3Jvc3lzdGVtcyBib2FyZHNldHMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDAgRXJpYyBCcm93ZXIgPGVicm93ZXJAdXNhLm5ldD4KKyAqCisgKi8KKworI2lmbmRlZiBfU1BBUkM2NF9XQVRDSERPR19ICisjZGVmaW5lIF9TUEFSQzY0X1dBVENIRE9HX0gKKworI2luY2x1ZGUgPGxpbnV4L3dhdGNoZG9nLmg+CisKKy8qIFNvbGFyaXMgY29tcGF0aWJpbGl0eSBpb2N0bHMtLQorICogUmVmLiA8bGludXgvd2F0Y2hkb2cuaD4gZm9yIHN0YW5kYXJkIGxpbnV4IHdhdGNoZG9nIGlvY3RscworICovCisjZGVmaW5lIFdJT0NTVEFSVCBfSU8gKFdBVENIRE9HX0lPQ1RMX0JBU0UsIDEwKQkJLyogU3RhcnQgVGltZXIJCSovCisjZGVmaW5lIFdJT0NTVE9QICBfSU8gKFdBVENIRE9HX0lPQ1RMX0JBU0UsIDExKQkJLyogU3RvcCBUaW1lcgkJKi8KKyNkZWZpbmUgV0lPQ0dTVEFUIF9JT1IoV0FUQ0hET0dfSU9DVExfQkFTRSwgMTIsIGludCkvKiBHZXQgVGltZXIgU3RhdHVzCSovCisKKy8qIFN0YXR1cyBmbGFncyBmcm9tIFdJT0NHU1RBVCBpb2N0bAorICovCisjZGVmaW5lIFdEX0ZSRUVSVU4JMHgwMQkvKiB0aW1lciBpcyBydW5uaW5nLCBpbnRlcnJ1cHRzIGRpc2FibGVkCSovCisjZGVmaW5lIFdEX0VYUElSRUQJMHgwMgkvKiB0aW1lciBoYXMgZXhwaXJlZAkJCQkJCSovCisjZGVmaW5lIFdEX1JVTk5JTkcJMHgwNAkvKiB0aW1lciBpcyBydW5uaW5nLCBpbnRlcnJ1cHRzIGVuYWJsZWQJCSovCisjZGVmaW5lIFdEX1NUT1BQRUQJMHgwOAkvKiB0aW1lciBoYXMgbm90IGJlZW4gc3RhcnRlZAkJCQkqLworI2RlZmluZSBXRF9TRVJWSUNFRCAweDEwCS8qIHRpbWVyIGludGVycnVwdCB3YXMgc2VydmljZWQJCQkJKi8KKworI2VuZGlmIC8qIGlmbmRlZiBfU1BBUkM2NF9XQVRDSERPR19IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQveG9yLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3hvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiM2E3ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3hvci5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1zcGFyYzY0L3hvci5oCisgKgorICogSGlnaCBzcGVlZCB4b3JfYmxvY2sgb3BlcmF0aW9uIGZvciBSQUlENC81IHV0aWxpemluZyB0aGUKKyAqIFVsdHJhU3BhcmMgVmlzdWFsIEluc3RydWN0aW9uIFNldC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTkgSmFrdWIgSmVsaW5layAoampAdWx0cmEubGludXguY3opCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogKGZvciBleGFtcGxlIC91c3Ivc3JjL2xpbnV4L0NPUFlJTkcpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8YXNtL3BzdGF0ZS5oPgorI2luY2x1ZGUgPGFzbS9hc2kuaD4KKworZXh0ZXJuIHZvaWQgeG9yX3Zpc18yKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcgKiwgdW5zaWduZWQgbG9uZyAqKTsKK2V4dGVybiB2b2lkIHhvcl92aXNfMyh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nICosIHVuc2lnbmVkIGxvbmcgKiwKKwkJICAgICAgdW5zaWduZWQgbG9uZyAqKTsKK2V4dGVybiB2b2lkIHhvcl92aXNfNCh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nICosIHVuc2lnbmVkIGxvbmcgKiwKKwkJICAgICAgdW5zaWduZWQgbG9uZyAqLCB1bnNpZ25lZCBsb25nICopOworZXh0ZXJuIHZvaWQgeG9yX3Zpc181KHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcgKiwgdW5zaWduZWQgbG9uZyAqLAorCQkgICAgICB1bnNpZ25lZCBsb25nICosIHVuc2lnbmVkIGxvbmcgKiwgdW5zaWduZWQgbG9uZyAqKTsKKworLyogWFhYIFVnaCwgd3JpdGUgY2hlZXRhaCB2ZXJzaW9ucy4uLiAtRGF2ZU0gKi8KKworc3RhdGljIHN0cnVjdCB4b3JfYmxvY2tfdGVtcGxhdGUgeG9yX2Jsb2NrX1ZJUyA9IHsKKyAgICAgICAgLm5hbWUJPSAiVklTIiwKKyAgICAgICAgLmRvXzIJPSB4b3JfdmlzXzIsCisgICAgICAgIC5kb18zCT0geG9yX3Zpc18zLAorICAgICAgICAuZG9fNAk9IHhvcl92aXNfNCwKKyAgICAgICAgLmRvXzUJPSB4b3JfdmlzXzUsCit9OworCisjZGVmaW5lIFhPUl9UUllfVEVNUExBVEVTICAgICAgIHhvcl9zcGVlZCgmeG9yX2Jsb2NrX1ZJUykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL2Eub3V0LmggYi9pbmNsdWRlL2FzbS11bS9hLm91dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjMjYyNjUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS11bS9hLm91dC5oCkBAIC0wLDAgKzEsMjAgQEAKKyNpZm5kZWYgX19VTV9BX09VVF9ICisjZGVmaW5lIF9fVU1fQV9PVVRfSAorCisjaW5jbHVkZSAibGludXgvY29uZmlnLmgiCisjaW5jbHVkZSAiYXNtL2FyY2gvYS5vdXQuaCIKKyNpbmNsdWRlICJjaG9vc2UtbW9kZS5oIgorCisjdW5kZWYgU1RBQ0tfVE9QCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIHN0YWNrc2l6ZWxpbTsKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaG9zdF90YXNrX3NpemU7CisKKyNkZWZpbmUgU1RBQ0tfUk9PTSAoc3RhY2tzaXplbGltKQorCitleHRlcm4gaW50IGhvbmV5cG90OworI2RlZmluZSBTVEFDS19UT1AgXAorCUNIT09TRV9NT0RFKChob25leXBvdCA/IGhvc3RfdGFza19zaXplIDogdGFza19zaXplKSwgdGFza19zaXplKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL2FwaWMuaCBiL2luY2x1ZGUvYXNtLXVtL2FwaWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzZkZWU4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdW0vYXBpYy5oCkBAIC0wLDAgKzEsNCBAQAorI2lmbmRlZiBfX1VNX0FQSUNfSAorI2RlZmluZSBfX1VNX0FQSUNfSAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL2FyY2gtc2lnbmFsLWkzODYuaCBiL2luY2x1ZGUvYXNtLXVtL2FyY2gtc2lnbmFsLWkzODYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWE5ZGU0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdW0vYXJjaC1zaWduYWwtaTM4Ni5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qIAorICogQ29weXJpZ2h0IChDKSAyMDAyIEplZmYgRGlrZSAoamRpa2VAa2FyYXlhLmNvbSkKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwKKyAqLworCisjaWZuZGVmIF9fVU1fQVJDSF9TSUdOQUxfSTM4Nl9ICisjZGVmaW5lIF9fVU1fQVJDSF9TSUdOQUxfSTM4Nl9ICisKK3N0cnVjdCBhcmNoX3NpZ25hbF9jb250ZXh0IHsKKwl1bnNpZ25lZCBsb25nIGV4dHJhc2lnc1tfTlNJR19XT1JEU107Cit9OworCisjZW5kaWYKKworLyoKKyAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgorICogRW1hY3Mgd2lsbCBub3RpY2UgdGhpcyBzdHVmZiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBhdXRvbWF0aWNhbGx5CisgKiBhZGp1c3QgdGhlIHNldHRpbmdzIGZvciB0aGlzIGJ1ZmZlciBvbmx5LiAgVGhpcyBtdXN0IHJlbWFpbiBhdCB0aGUgZW5kCisgKiBvZiB0aGUgZmlsZS4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogTG9jYWwgdmFyaWFibGVzOgorICogYy1maWxlLXN0eWxlOiAibGludXgiCisgKiBFbmQ6CisgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL2FyY2hwYXJhbS1pMzg2LmggYi9pbmNsdWRlL2FzbS11bS9hcmNocGFyYW0taTM4Ni5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmNzhkZTUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS11bS9hcmNocGFyYW0taTM4Ni5oCkBAIC0wLDAgKzEsMTYzIEBACisvKiAKKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDMgSmVmZiBEaWtlIChqZGlrZUBhZGR0b2l0LmNvbSkKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwKKyAqLworCisjaWZuZGVmIF9fVU1fQVJDSFBBUkFNX0kzODZfSAorI2RlZmluZSBfX1VNX0FSQ0hQQVJBTV9JMzg2X0gKKworLyoqKioqKioqKiBCaXRzIGZvciBhc20tdW0vZWxmLmggKioqKioqKioqKioqLworCisjaW5jbHVkZSA8YXNtL3VzZXIuaD4KKworZXh0ZXJuIGNoYXIgKiBlbGZfYXV4X3BsYXRmb3JtOworI2RlZmluZSBFTEZfUExBVEZPUk0gKGVsZl9hdXhfcGxhdGZvcm0pCisKKyNkZWZpbmUgRUxGX0VUX0RZTl9CQVNFICgyICogVEFTS19TSVpFIC8gMykKKwordHlwZWRlZiBzdHJ1Y3QgdXNlcl9pMzg3X3N0cnVjdCBlbGZfZnByZWdzZXRfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBlbGZfZ3JlZ190OworCisjZGVmaW5lIEVMRl9OR1JFRyAoc2l6ZW9mIChzdHJ1Y3QgdXNlcl9yZWdzX3N0cnVjdCkgLyBzaXplb2YoZWxmX2dyZWdfdCkpCit0eXBlZGVmIGVsZl9ncmVnX3QgZWxmX2dyZWdzZXRfdFtFTEZfTkdSRUddOworCisjZGVmaW5lIEVMRl9EQVRBICAgICAgICBFTEZEQVRBMkxTQgorI2RlZmluZSBFTEZfQVJDSCAgICAgICAgRU1fMzg2CisKKyNkZWZpbmUgRUxGX1BMQVRfSU5JVChyZWdzLCBsb2FkX2FkZHIpIGRvIHsgXAorCVBUX1JFR1NfRUJYKHJlZ3MpID0gMDsgXAorCVBUX1JFR1NfRUNYKHJlZ3MpID0gMDsgXAorCVBUX1JFR1NfRURYKHJlZ3MpID0gMDsgXAorCVBUX1JFR1NfRVNJKHJlZ3MpID0gMDsgXAorCVBUX1JFR1NfRURJKHJlZ3MpID0gMDsgXAorCVBUX1JFR1NfRUJQKHJlZ3MpID0gMDsgXAorCVBUX1JFR1NfRUFYKHJlZ3MpID0gMDsgXAorfSB3aGlsZSgwKQorCisvKiBTaGFtZWxlc3NseSBzdG9sZW4gZnJvbSBpbmNsdWRlL2FzbS1pMzg2L2VsZi5oICovCisKKyNkZWZpbmUgRUxGX0NPUkVfQ09QWV9SRUdTKHByX3JlZywgcmVncykgZG8gewlcCisJcHJfcmVnWzBdID0gUFRfUkVHU19FQlgocmVncyk7CQlcCisJcHJfcmVnWzFdID0gUFRfUkVHU19FQ1gocmVncyk7CQlcCisJcHJfcmVnWzJdID0gUFRfUkVHU19FRFgocmVncyk7CQlcCisJcHJfcmVnWzNdID0gUFRfUkVHU19FU0kocmVncyk7CQlcCisJcHJfcmVnWzRdID0gUFRfUkVHU19FREkocmVncyk7CQlcCisJcHJfcmVnWzVdID0gUFRfUkVHU19FQlAocmVncyk7CQlcCisJcHJfcmVnWzZdID0gUFRfUkVHU19FQVgocmVncyk7CQlcCisJcHJfcmVnWzddID0gUFRfUkVHU19EUyhyZWdzKTsJCVwKKwlwcl9yZWdbOF0gPSBQVF9SRUdTX0VTKHJlZ3MpOwkJXAorCS8qIGZha2Ugb25jZSB1c2VkIGZzIGFuZCBncyBzZWxlY3RvcnM/ICovCVwKKwlwcl9yZWdbOV0gPSBQVF9SRUdTX0RTKHJlZ3MpOwkJXAorCXByX3JlZ1sxMF0gPSBQVF9SRUdTX0RTKHJlZ3MpOwkJXAorCXByX3JlZ1sxMV0gPSBQVF9SRUdTX1NZU0NBTExfTlIocmVncyk7CVwKKwlwcl9yZWdbMTJdID0gUFRfUkVHU19JUChyZWdzKTsJCVwKKwlwcl9yZWdbMTNdID0gUFRfUkVHU19DUyhyZWdzKTsJCVwKKwlwcl9yZWdbMTRdID0gUFRfUkVHU19FRkxBR1MocmVncyk7CVwKKwlwcl9yZWdbMTVdID0gUFRfUkVHU19TUChyZWdzKTsJCVwKKwlwcl9yZWdbMTZdID0gUFRfUkVHU19TUyhyZWdzKTsJCVwKK30gd2hpbGUoMCk7CisKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdnN5c2NhbGxfZWhkcjsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHZzeXNjYWxsX2VuZDsKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fa2VybmVsX3ZzeXNjYWxsOworCisjZGVmaW5lIFZTWVNDQUxMX0JBU0UgdnN5c2NhbGxfZWhkcgorI2RlZmluZSBWU1lTQ0FMTF9FTkQgdnN5c2NhbGxfZW5kCisKKy8qCisgKiBUaGlzIGlzIHRoZSByYW5nZSB0aGF0IGlzIHJlYWRhYmxlIGJ5IHVzZXIgbW9kZSwgYW5kIHRoaW5ncworICogYWN0aW5nIGxpa2UgdXNlciBtb2RlIHN1Y2ggYXMgZ2V0X3VzZXJfcGFnZXMuCisgKi8KKyNkZWZpbmUgRklYQUREUl9VU0VSX1NUQVJUICAgICAgVlNZU0NBTExfQkFTRQorI2RlZmluZSBGSVhBRERSX1VTRVJfRU5EICAgICAgICBWU1lTQ0FMTF9FTkQKKworLyoKKyAqIEFyY2hpdGVjdHVyZS1uZXV0cmFsIEFUXyB2YWx1ZXMgaW4gMC0xNywgbGVhdmUgc29tZSByb29tCisgKiBmb3IgbW9yZSBvZiB0aGVtLCBzdGFydCB0aGUgeDg2LXNwZWNpZmljIG9uZXMgYXQgMzIuCisgKi8KKyNkZWZpbmUgQVRfU1lTSU5GTwkJMzIKKyNkZWZpbmUgQVRfU1lTSU5GT19FSERSCQkzMworCisjZGVmaW5lIEFSQ0hfRExJTkZPCQkJCQkJXAorZG8gewkJCQkJCQkJXAorCWlmICggdnN5c2NhbGxfZWhkciApIHsJCQkJCVwKKwkJTkVXX0FVWF9FTlQoQVRfU1lTSU5GTywJX19rZXJuZWxfdnN5c2NhbGwpOwlcCisJCU5FV19BVVhfRU5UKEFUX1NZU0lORk9fRUhEUiwgdnN5c2NhbGxfZWhkcik7CVwKKwl9CQkJCQkJCVwKK30gd2hpbGUgKDApCisKKy8qCisgKiBUaGVzZSBtYWNyb3MgcGFyYW1ldGVyaXplIGVsZl9jb3JlX2R1bXAgaW4gZnMvYmluZm10X2VsZi5jIHRvIHdyaXRlIG91dAorICogZXh0cmEgc2VnbWVudHMgY29udGFpbmluZyB0aGUgdnN5c2NhbGwgRFNPIGNvbnRlbnRzLiAgRHVtcGluZyBpdHMKKyAqIGNvbnRlbnRzIG1ha2VzIHBvc3QtbW9ydGVtIGZ1bGx5IGludGVycHJldGFibGUgbGF0ZXIgd2l0aG91dCBtYXRjaGluZyB1cAorICogdGhlIHNhbWUga2VybmVsIGFuZCBoYXJkd2FyZSBjb25maWcgdG8gc2VlIHdoYXQgUEMgdmFsdWVzIG1lYW50LgorICogRHVtcGluZyBpdHMgZXh0cmEgRUxGIHByb2dyYW0gaGVhZGVycyBpbmNsdWRlcyBhbGwgdGhlIG90aGVyIGluZm9ybWF0aW9uCisgKiBhIGRlYnVnZ2VyIG5lZWRzIHRvIGVhc2lseSBmaW5kIGhvdyB0aGUgdnN5c2NhbGwgRFNPIHdhcyBiZWluZyB1c2VkLgorICovCisjZGVmaW5lIEVMRl9DT1JFX0VYVFJBX1BIRFJTCQkJCQkJICAgICAgXAorCSh2c3lzY2FsbF9laGRyID8gKCgoc3RydWN0IGVsZmhkciAqKXZzeXNjYWxsX2VoZHIpLT5lX3BobnVtKSA6IDAgKQorCisjZGVmaW5lIEVMRl9DT1JFX1dSSVRFX0VYVFJBX1BIRFJTCQkJCQkgICAgICBcCitpZiAoIHZzeXNjYWxsX2VoZHIgKSB7CQkJCQkJCSAgICAgIFwKKwljb25zdCBzdHJ1Y3QgZWxmaGRyICpjb25zdCBlaGRycCA9IChzdHJ1Y3QgZWxmaGRyICopdnN5c2NhbGxfZWhkcjsgICAgXAorCWNvbnN0IHN0cnVjdCBlbGZfcGhkciAqY29uc3QgcGhkcnAgPQkJCQkgICAgICBcCisJCShjb25zdCBzdHJ1Y3QgZWxmX3BoZHIgKikgKHZzeXNjYWxsX2VoZHIgKyBlaGRycC0+ZV9waG9mZik7ICAgXAorCWludCBpOwkJCQkJCQkJICAgICAgXAorCUVsZjMyX09mZiBvZnMgPSAwOwkJCQkJCSAgICAgIFwKKwlmb3IgKGkgPSAwOyBpIDwgZWhkcnAtPmVfcGhudW07ICsraSkgewkJCQkgICAgICBcCisJCXN0cnVjdCBlbGZfcGhkciBwaGRyID0gcGhkcnBbaV07CQkJICAgICAgXAorCQlpZiAocGhkci5wX3R5cGUgPT0gUFRfTE9BRCkgewkJCQkgICAgICBcCisJCQlvZnMgPSBwaGRyLnBfb2Zmc2V0ID0gb2Zmc2V0OwkJCSAgICAgIFwKKwkJCW9mZnNldCArPSBwaGRyLnBfZmlsZXN6OwkJCSAgICAgIFwKKwkJfQkJCQkJCQkgICAgICBcCisJCWVsc2UJCQkJCQkJICAgICAgXAorCQkJcGhkci5wX29mZnNldCArPSBvZnM7CQkJCSAgICAgIFwKKwkJcGhkci5wX3BhZGRyID0gMDsgLyogbWF0Y2ggb3RoZXIgY29yZSBwaGRycyAqLwkJICAgICAgXAorCQlEVU1QX1dSSVRFKCZwaGRyLCBzaXplb2YocGhkcikpOwkJCSAgICAgIFwKKwl9CQkJCQkJCQkgICAgICBcCit9CisjZGVmaW5lIEVMRl9DT1JFX1dSSVRFX0VYVFJBX0RBVEEJCQkJCSAgICAgIFwKK2lmICggdnN5c2NhbGxfZWhkciApIHsJCQkJCQkJICAgICAgXAorCWNvbnN0IHN0cnVjdCBlbGZoZHIgKmNvbnN0IGVoZHJwID0gKHN0cnVjdCBlbGZoZHIgKil2c3lzY2FsbF9laGRyOyAgICBcCisJY29uc3Qgc3RydWN0IGVsZl9waGRyICpjb25zdCBwaGRycCA9CQkJCSAgICAgIFwKKwkJKGNvbnN0IHN0cnVjdCBlbGZfcGhkciAqKSAodnN5c2NhbGxfZWhkciArIGVoZHJwLT5lX3Bob2ZmKTsgICBcCisJaW50IGk7CQkJCQkJCQkgICAgICBcCisJZm9yIChpID0gMDsgaSA8IGVoZHJwLT5lX3BobnVtOyArK2kpIHsJCQkJICAgICAgXAorCQlpZiAocGhkcnBbaV0ucF90eXBlID09IFBUX0xPQUQpCQkJCSAgICAgIFwKKwkJCURVTVBfV1JJVEUoKHZvaWQgKikgcGhkcnBbaV0ucF92YWRkciwJCSAgICAgIFwKKwkJCQkgICBwaGRycFtpXS5wX2ZpbGVzeik7CQkJICAgICAgXAorCX0JCQkJCQkJCSAgICAgIFwKK30KKworI2RlZmluZSBSXzM4Nl9OT05FCTAKKyNkZWZpbmUgUl8zODZfMzIJMQorI2RlZmluZSBSXzM4Nl9QQzMyCTIKKyNkZWZpbmUgUl8zODZfR09UMzIJMworI2RlZmluZSBSXzM4Nl9QTFQzMgk0CisjZGVmaW5lIFJfMzg2X0NPUFkJNQorI2RlZmluZSBSXzM4Nl9HTE9CX0RBVAk2CisjZGVmaW5lIFJfMzg2X0pNUF9TTE9UCTcKKyNkZWZpbmUgUl8zODZfUkVMQVRJVkUJOAorI2RlZmluZSBSXzM4Nl9HT1RPRkYJOQorI2RlZmluZSBSXzM4Nl9HT1RQQwkxMAorI2RlZmluZSBSXzM4Nl9OVU0JMTEKKworLyoqKioqKioqKiBOb3RoaW5nIGZvciBhc20tdW0vaGFyZGlycS5oICoqKioqKioqKiovCisKKy8qKioqKioqKiogTm90aGluZyBmb3IgYXNtLXVtL2h3X2lycS5oICoqKioqKioqKiovCisKKy8qKioqKioqKiogTm90aGluZyBmb3IgYXNtLXVtL3N0cmluZy5oICoqKioqKioqKiovCisKKyNlbmRpZgorCisvKgorICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCisgKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKKyAqIGFkanVzdCB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgYnVmZmVyIG9ubHkuICBUaGlzIG11c3QgcmVtYWluIGF0IHRoZSBlbmQKKyAqIG9mIHRoZSBmaWxlLgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiBjLWZpbGUtc3R5bGU6ICJsaW51eCIKKyAqIEVuZDoKKyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vYXJjaHBhcmFtLXBwYy5oIGIvaW5jbHVkZS9hc20tdW0vYXJjaHBhcmFtLXBwYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlYmNlZDkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS11bS9hcmNocGFyYW0tcHBjLmgKQEAgLTAsMCArMSwzNyBAQAorI2lmbmRlZiBfX1VNX0FSQ0hQQVJBTV9QUENfSAorI2RlZmluZSBfX1VNX0FSQ0hQQVJBTV9QUENfSAorCisvKioqKioqKioqIEJpdHMgZm9yIGFzbS11bS9lbGYuaCAqKioqKioqKioqKiovCisKKyNkZWZpbmUgRUxGX1BMQVRGT1JNICgwKQorCisjZGVmaW5lIEVMRl9FVF9EWU5fQkFTRSAoMHgwODAwMDAwMCkKKworLyogdGhlIGZvbGxvd2luZyBzdG9sZW4gZnJvbSBhc20tcHBjL2VsZi5oICovCisjZGVmaW5lIEVMRl9OR1JFRwk0OAkvKiBpbmNsdWRlcyBuaXAsIG1zciwgbHIsIGV0Yy4gKi8KKyNkZWZpbmUgRUxGX05GUFJFRwkzMwkvKiBpbmNsdWRlcyBmcHNjciAqLworLyogR2VuZXJhbCByZWdpc3RlcnMgKi8KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBlbGZfZ3JlZ190OwordHlwZWRlZiBlbGZfZ3JlZ190IGVsZl9ncmVnc2V0X3RbRUxGX05HUkVHXTsKKworLyogRmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzICovCit0eXBlZGVmIGRvdWJsZSBlbGZfZnByZWdfdDsKK3R5cGVkZWYgZWxmX2ZwcmVnX3QgZWxmX2ZwcmVnc2V0X3RbRUxGX05GUFJFR107CisKKyNkZWZpbmUgRUxGX0RBVEEgICAgICAgIEVMRkRBVEEyTVNCCisjZGVmaW5lIEVMRl9BUkNICUVNX1BQQworCisvKioqKioqKioqIEJpdHMgZm9yIGFzbS11bS9od19pcnEuaCAqKioqKioqKioqLworCitzdHJ1Y3QgaHdfaW50ZXJydXB0X3R5cGU7CisKKy8qKioqKioqKiogQml0cyBmb3IgYXNtLXVtL2hhcmRpcnEuaCAqKioqKioqKioqLworCisjZGVmaW5lIGlycV9lbnRlcihjcHUsIGlycSkgaGFyZGlycV9lbnRlcihjcHUpCisjZGVmaW5lIGlycV9leGl0KGNwdSwgaXJxKSBoYXJkaXJxX2V4aXQoY3B1KQorCisvKioqKioqKioqIEJpdHMgZm9yIGFzbS11bS9zdHJpbmcuaCAqKioqKioqKioqLworCisjZGVmaW5lIF9fSEFWRV9BUkNIX1NUUlJDSFIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9hcmNocGFyYW0teDg2XzY0LmggYi9pbmNsdWRlL2FzbS11bS9hcmNocGFyYW0teDg2XzY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTYzMjFjNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXVtL2FyY2hwYXJhbS14ODZfNjQuaApAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IDIwMDMgUGF0aFNjYWxlLCBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTAorICovCisKKyNpZm5kZWYgX19VTV9BUkNIUEFSQU1fWDg2XzY0X0gKKyNkZWZpbmUgX19VTV9BUkNIUEFSQU1fWDg2XzY0X0gKKworI2luY2x1ZGUgPGFzbS91c2VyLmg+CisKKyNkZWZpbmUgRUxGX1BMQVRGT1JNICJ4ODZfNjQiCisKKyNkZWZpbmUgRUxGX0VUX0RZTl9CQVNFICgyICogVEFTS19TSVpFIC8gMykKKwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGVsZl9ncmVnX3Q7Cit0eXBlZGVmIHN0cnVjdCB7IH0gZWxmX2ZwcmVnc2V0X3Q7CisKKyNkZWZpbmUgRUxGX05HUkVHIChzaXplb2YgKHN0cnVjdCB1c2VyX3JlZ3Nfc3RydWN0KSAvIHNpemVvZihlbGZfZ3JlZ190KSkKK3R5cGVkZWYgZWxmX2dyZWdfdCBlbGZfZ3JlZ3NldF90W0VMRl9OR1JFR107CisKKyNkZWZpbmUgRUxGX0RBVEEgICAgICAgIEVMRkRBVEEyTFNCCisjZGVmaW5lIEVMRl9BUkNIICAgICAgICBFTV9YODZfNjQKKworI2RlZmluZSBFTEZfUExBVF9JTklUKHJlZ3MsIGxvYWRfYWRkcikgICAgZG8geyBcCisJUFRfUkVHU19SQlgocmVncykgPSAwOyBcCisJUFRfUkVHU19SQ1gocmVncykgPSAwOyBcCisJUFRfUkVHU19SRFgocmVncykgPSAwOyBcCisJUFRfUkVHU19SU0kocmVncykgPSAwOyBcCisJUFRfUkVHU19SREkocmVncykgPSAwOyBcCisJUFRfUkVHU19SQlAocmVncykgPSAwOyBcCisJUFRfUkVHU19SQVgocmVncykgPSAwOyBcCisJUFRfUkVHU19SOChyZWdzKSA9IDA7IFwKKwlQVF9SRUdTX1I5KHJlZ3MpID0gMDsgXAorCVBUX1JFR1NfUjEwKHJlZ3MpID0gMDsgXAorCVBUX1JFR1NfUjExKHJlZ3MpID0gMDsgXAorCVBUX1JFR1NfUjEyKHJlZ3MpID0gMDsgXAorCVBUX1JFR1NfUjEzKHJlZ3MpID0gMDsgXAorCVBUX1JFR1NfUjE0KHJlZ3MpID0gMDsgXAorCVBUX1JFR1NfUjE1KHJlZ3MpID0gMDsgXAorfSB3aGlsZSAoMCkKKworI2lmZGVmIFRJRl9JQTMyIC8qIFhYWCAqLworICAgICAgICBjbGVhcl90aHJlYWRfZmxhZyhUSUZfSUEzMik7CisjZW5kaWYKKworLyogTm8gdXNlci1hY2Nlc3NpYmxlIGZpeG1hcCBhZGRyZXNzZXMsIGkuZS4gdnN5c2NhbGwgKi8KKyNkZWZpbmUgRklYQUREUl9VU0VSX1NUQVJUCTAKKyNkZWZpbmUgRklYQUREUl9VU0VSX0VORAkwCisKKyNlbmRpZgorCisvKgorICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCisgKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKKyAqIGFkanVzdCB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgYnVmZmVyIG9ubHkuICBUaGlzIG11c3QgcmVtYWluIGF0IHRoZSBlbmQKKyAqIG9mIHRoZSBmaWxlLgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiBjLWZpbGUtc3R5bGU6ICJsaW51eCIKKyAqIEVuZDoKKyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vYXRvbWljLmggYi9pbmNsdWRlL2FzbS11bS9hdG9taWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjgzZjEwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdW0vYXRvbWljLmgKQEAgLTAsMCArMSwxMSBAQAorI2lmbmRlZiBfX1VNX0FUT01JQ19ICisjZGVmaW5lIF9fVU1fQVRPTUlDX0gKKworLyogVGhlIGkzODYgYXRvbWljLmggY2FsbHMgcHJpbnRrLCBidXQgZG9lc24ndCBpbmNsdWRlIGtlcm5lbC5oLCBzbyB3ZQorICogaW5jbHVkZSBpdCBoZXJlLgorICovCisjaW5jbHVkZSAibGludXgva2VybmVsLmgiCisKKyNpbmNsdWRlICJhc20vYXJjaC9hdG9taWMuaCIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9iaXRvcHMuaCBiL2luY2x1ZGUvYXNtLXVtL2JpdG9wcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2ZDc4MTkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS11bS9iaXRvcHMuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19VTV9CSVRPUFNfSAorI2RlZmluZSBfX1VNX0JJVE9QU19ICisKKyNpbmNsdWRlICJhc20vYXJjaC9iaXRvcHMuaCIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9ib290LmggYi9pbmNsdWRlL2FzbS11bS9ib290LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk1NDhjMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXVtL2Jvb3QuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19VTV9CT09UX0gKKyNkZWZpbmUgX19VTV9CT09UX0gKKworI2luY2x1ZGUgImFzbS9hcmNoL2Jvb3QuaCIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9idWcuaCBiL2luY2x1ZGUvYXNtLXVtL2J1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMjJmYTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS11bS9idWcuaApAQCAtMCwwICsxLDQgQEAKKyNpZm5kZWYgX19VTV9CVUdfSAorI2RlZmluZSBfX1VNX0JVR19ICisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYnVnLmg+CisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL2J1Z3MuaCBiL2luY2x1ZGUvYXNtLXVtL2J1Z3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTcyZTI0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdW0vYnVncy5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfX1VNX0JVR1NfSAorI2RlZmluZSBfX1VNX0JVR1NfSAorCit2b2lkIGNoZWNrX2J1Z3Modm9pZCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vYnl0ZW9yZGVyLmggYi9pbmNsdWRlL2FzbS11bS9ieXRlb3JkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWUwYTgzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdW0vYnl0ZW9yZGVyLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fVU1fQllURU9SREVSX0gKKyNkZWZpbmUgX19VTV9CWVRFT1JERVJfSAorCisjaW5jbHVkZSAiYXNtL2FyY2gvYnl0ZW9yZGVyLmgiCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vY2FjaGUuaCBiL2luY2x1ZGUvYXNtLXVtL2NhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGIxMzRmZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXVtL2NhY2hlLmgKQEAgLTAsMCArMSwxMCBAQAorI2lmbmRlZiBfX1VNX0NBQ0hFX0gKKyNkZWZpbmUgX19VTV9DQUNIRV9ICisKKy8qIFRoZXNlIGFyZSB4ODYgbnVtYmVycyAqLworI2RlZmluZSBMMV9DQUNIRV9TSElGVCA1CisjZGVmaW5lIEwxX0NBQ0hFX0JZVEVTICgxIDw8IEwxX0NBQ0hFX1NISUZUKQorCisjZGVmaW5lIEwxX0NBQ0hFX1NISUZUX01BWCA3CS8qIGxhcmdlc3QgTDEgd2hpY2ggdGhpcyBhcmNoIHN1cHBvcnRzICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vY2FjaGVmbHVzaC5oIGIvaW5jbHVkZS9hc20tdW0vY2FjaGVmbHVzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyZTlkNGIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS11bS9jYWNoZWZsdXNoLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fVU1fQ0FDSEVGTFVTSF9ICisjZGVmaW5lIF9fVU1fQ0FDSEVGTFVTSF9ICisKKyNpbmNsdWRlICJhc20vYXJjaC9jYWNoZWZsdXNoLmgiCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vY2FsbGluZy5oIGIvaW5jbHVkZS9hc20tdW0vY2FsbGluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiMjM4NGMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS11bS9jYWxsaW5nLmgKQEAgLTAsMCArMSw5IEBACisjIENvcHlyaWdodCAyMDAzIC0gMjAwNCBQYXRoc2NhbGUsIEluYworIyBSZWxlYXNlZCB1bmRlciB0aGUgR1BMCisKKyNpZm5kZWYgX19VTV9DQUxMSU5HX0ggLyogWFhYIHg4Nl82NCAqLworI2RlZmluZSBfX1VNX0NBTExJTkdfSAorCisjaW5jbHVkZSAiYXNtL2FyY2gvY2FsbGluZy5oIgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL2NoZWNrc3VtLmggYi9pbmNsdWRlL2FzbS11bS9jaGVja3N1bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViNTAxMzYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS11bS9jaGVja3N1bS5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfX1VNX0NIRUNLU1VNX0gKKyNkZWZpbmUgX19VTV9DSEVDS1NVTV9ICisKKyNpbmNsdWRlICJzeXNkZXAvY2hlY2tzdW0uaCIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9jb2JhbHQuaCBiL2luY2x1ZGUvYXNtLXVtL2NvYmFsdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4MTNhNjgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS11bS9jb2JhbHQuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19VTV9DT0JBTFRfSAorI2RlZmluZSBfX1VNX0NPQkFMVF9ICisKKyNpbmNsdWRlICJhc20vYXJjaC9jb2JhbHQuaCIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9jb21tb24ubGRzLlMgYi9pbmNsdWRlL2FzbS11bS9jb21tb24ubGRzLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNkNmFhYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXVtL2NvbW1vbi5sZHMuUwpAQCAtMCwwICsxLDEwNCBAQAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL3ZtbGludXgubGRzLmg+CisKKyAgLmZpbmkgICAgICA6IHsgKiguZmluaSkgICAgfSA9MHg5MDkwCisgIF9ldGV4dCA9IC47CisgIFBST1ZJREUgKGV0ZXh0ID0gLik7CisKKyAgLiA9IEFMSUdOKDQwOTYpOworICBfc2RhdGEgPSAuOworICBQUk9WSURFIChzZGF0YSA9IC4pOworCisgIC4gPSBBTElHTigxNik7CQkvKiBFeGNlcHRpb24gdGFibGUgKi8KKyAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKKyAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9CisgIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKKworICBST0RBVEEKKworICAudW5wcm90ZWN0ZWQgOiB7ICooLnVucHJvdGVjdGVkKSB9CisgIC4gPSBBTElHTig0MDk2KTsKKyAgUFJPVklERSAoX3VucHJvdGVjdGVkX2VuZCA9IC4pOworCisgIC4gPSBBTElHTig0MDk2KTsKKyAgX191bWxfc2V0dXBfc3RhcnQgPSAuOworICAudW1sLnNldHVwLmluaXQgOiB7ICooLnVtbC5zZXR1cC5pbml0KSB9CisgIF9fdW1sX3NldHVwX2VuZCA9IC47CisJCisgIF9fdW1sX2hlbHBfc3RhcnQgPSAuOworICAudW1sLmhlbHAuaW5pdCA6IHsgKigudW1sLmhlbHAuaW5pdCkgfQorICBfX3VtbF9oZWxwX2VuZCA9IC47CisJCisgIF9fdW1sX3Bvc3RzZXR1cF9zdGFydCA9IC47CisgIC51bWwucG9zdHNldHVwLmluaXQgOiB7ICooLnVtbC5wb3N0c2V0dXAuaW5pdCkgfQorICBfX3VtbF9wb3N0c2V0dXBfZW5kID0gLjsKKwkKKyAgX19zZXR1cF9zdGFydCA9IC47CisgIC5pbml0LnNldHVwIDogeyAqKC5pbml0LnNldHVwKSB9CisgIF9fc2V0dXBfZW5kID0gLjsKKworICAuID0gQUxJR04oMzIpOworICBfX3Blcl9jcHVfc3RhcnQgPSAuIDsgCisgIC5kYXRhLnBlcmNwdSA6IHsgKiguZGF0YS5wZXJjcHUpIH0KKyAgX19wZXJfY3B1X2VuZCA9IC4gOworCQorICBfX2luaXRjYWxsX3N0YXJ0ID0gLjsKKyAgLmluaXRjYWxsLmluaXQgOiB7CisJKiguaW5pdGNhbGwxLmluaXQpIAorCSooLmluaXRjYWxsMi5pbml0KSAKKwkqKC5pbml0Y2FsbDMuaW5pdCkgCisJKiguaW5pdGNhbGw0LmluaXQpIAorCSooLmluaXRjYWxsNS5pbml0KSAKKwkqKC5pbml0Y2FsbDYuaW5pdCkgCisJKiguaW5pdGNhbGw3LmluaXQpCisgIH0KKyAgX19pbml0Y2FsbF9lbmQgPSAuOworCisgIF9fY29uX2luaXRjYWxsX3N0YXJ0ID0gLjsKKyAgLmNvbl9pbml0Y2FsbC5pbml0IDogeyAqKC5jb25faW5pdGNhbGwuaW5pdCkgfQorICBfX2Nvbl9pbml0Y2FsbF9lbmQgPSAuOworCisgIF9fdW1sX2luaXRjYWxsX3N0YXJ0ID0gLjsKKyAgLnVtbC5pbml0Y2FsbC5pbml0IDogeyAqKC51bWwuaW5pdGNhbGwuaW5pdCkgfQorICBfX3VtbF9pbml0Y2FsbF9lbmQgPSAuOworICBfX2luaXRfZW5kID0gLjsKKworICBTRUNVUklUWV9JTklUCisKKyAgX19leGl0Y2FsbF9iZWdpbiA9IC47CisgIC5leGl0Y2FsbCA6IHsgKiguZXhpdGNhbGwuZXhpdCkgfQorICBfX2V4aXRjYWxsX2VuZCA9IC47CisKKyAgX191bWxfZXhpdGNhbGxfYmVnaW4gPSAuOworICAudW1sLmV4aXRjYWxsIDogeyAqKC51bWwuZXhpdGNhbGwuZXhpdCkgfQorICBfX3VtbF9leGl0Y2FsbF9lbmQgPSAuOworCisgIC4gPSBBTElHTig0KTsKKyAgX19hbHRfaW5zdHJ1Y3Rpb25zID0gLjsKKyAgLmFsdGluc3RydWN0aW9ucyA6IHsgKiguYWx0aW5zdHJ1Y3Rpb25zKSB9CisgIF9fYWx0X2luc3RydWN0aW9uc19lbmQgPSAuOworICAuYWx0aW5zdHJfcmVwbGFjZW1lbnQgOiB7ICooLmFsdGluc3RyX3JlcGxhY2VtZW50KSB9CisgIC8qIC5leGl0LnRleHQgaXMgZGlzY2FyZCBhdCBydW50aW1lLCBub3QgbGluayB0aW1lLCB0byBkZWFsIHdpdGggcmVmZXJlbmNlcworICAgICBmcm9tIC5hbHRpbnN0cnVjdGlvbnMgYW5kIC5laF9mcmFtZSAqLworICAuZXhpdC50ZXh0IDogeyAqKC5leGl0LnRleHQpIH0KKyAgLmV4aXQuZGF0YSA6IHsgKiguZXhpdC5kYXRhKSB9CisKKyAgX19wcmVpbml0X2FycmF5X3N0YXJ0ID0gLjsKKyAgLnByZWluaXRfYXJyYXkgOiB7ICooLnByZWluaXRfYXJyYXkpIH0KKyAgX19wcmVpbml0X2FycmF5X2VuZCA9IC47CisgIF9faW5pdF9hcnJheV9zdGFydCA9IC47CisgIC5pbml0X2FycmF5IDogeyAqKC5pbml0X2FycmF5KSB9CisgIF9faW5pdF9hcnJheV9lbmQgPSAuOworICBfX2ZpbmlfYXJyYXlfc3RhcnQgPSAuOworICAuZmluaV9hcnJheSA6IHsgKiguZmluaV9hcnJheSkgfQorICBfX2ZpbmlfYXJyYXlfZW5kID0gLjsKKworICAgLiA9IEFMSUdOKDQwOTYpOworICBfX2luaXRyYW1mc19zdGFydCA9IC47CisgIC5pbml0LnJhbWZzIDogeyAqKC5pbml0LnJhbWZzKSB9CisgIF9faW5pdHJhbWZzX2VuZCA9IC47CisKKyAgLyogU2VjdGlvbnMgdG8gYmUgZGlzY2FyZGVkICovCisgIC9ESVNDQVJELyA6IHsKKyAJKiguZXhpdGNhbGwuZXhpdCkKKyAgfQorCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9jcHVmZWF0dXJlLmggYi9pbmNsdWRlL2FzbS11bS9jcHVmZWF0dXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI3YmQ0MmEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS11bS9jcHVmZWF0dXJlLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fVU1fQ1BVRkVBVFVSRV9ICisjZGVmaW5lIF9fVU1fQ1BVRkVBVFVSRV9ICisKKyNpbmNsdWRlICJhc20vYXJjaC9jcHVmZWF0dXJlLmgiCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vY3B1dGltZS5oIGIvaW5jbHVkZS9hc20tdW0vY3B1dGltZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4NGFjYmEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS11bS9jcHV0aW1lLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fVU1fQ1BVVElNRV9ICisjZGVmaW5lIF9fVU1fQ1BVVElNRV9ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9jcHV0aW1lLmg+CisKKyNlbmRpZiAvKiBfX1VNX0NQVVRJTUVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vY3VycmVudC5oIGIvaW5jbHVkZS9hc20tdW0vY3VycmVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmZDcyZjYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS11bS9jdXJyZW50LmgKQEAgLTAsMCArMSwzMiBAQAorLyogCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgSmVmZiBEaWtlIChqZGlrZUBrYXJheWEuY29tKQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTAorICovCisKKyNpZm5kZWYgX19VTV9DVVJSRU5UX0gKKyNkZWZpbmUgX19VTV9DVVJSRU5UX0gKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworI2luY2x1ZGUgImFzbS9wYWdlLmgiCisjaW5jbHVkZSAibGludXgvdGhyZWFkX2luZm8uaCIKKworI2RlZmluZSBjdXJyZW50IChjdXJyZW50X3RocmVhZF9pbmZvKCktPnRhc2spCisKKy8qQmFja3dhcmQgY29tcGF0aWJpbGl0eSAtIGl0J3MgdXNlZCBpbnNpZGUgYXJjaC91bS4qLworI2RlZmluZSBjdXJyZW50X3RocmVhZCBjdXJyZW50X3RocmVhZF9pbmZvKCkKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYKKworLyoKKyAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgorICogRW1hY3Mgd2lsbCBub3RpY2UgdGhpcyBzdHVmZiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBhdXRvbWF0aWNhbGx5CisgKiBhZGp1c3QgdGhlIHNldHRpbmdzIGZvciB0aGlzIGJ1ZmZlciBvbmx5LiAgVGhpcyBtdXN0IHJlbWFpbiBhdCB0aGUgZW5kCisgKiBvZiB0aGUgZmlsZS4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogTG9jYWwgdmFyaWFibGVzOgorICogYy1maWxlLXN0eWxlOiAibGludXgiCisgKiBFbmQ6CisgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL2RlbGF5LmggYi9pbmNsdWRlL2FzbS11bS9kZWxheS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwNjk1NTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS11bS9kZWxheS5oCkBAIC0wLDAgKzEsNyBAQAorI2lmbmRlZiBfX1VNX0RFTEFZX0gKKyNkZWZpbmUgX19VTV9ERUxBWV9ICisKKyNpbmNsdWRlICJhc20vYXJjaC9kZWxheS5oIgorI2luY2x1ZGUgImFzbS9hcmNocGFyYW0uaCIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9kZXNjLmggYi9pbmNsdWRlL2FzbS11bS9kZXNjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWMxZDJhMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXVtL2Rlc2MuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19VTV9ERVNDX0gKKyNkZWZpbmUgX19VTV9ERVNDX0gKKworI2luY2x1ZGUgImFzbS9hcmNoL2Rlc2MuaCIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9kaXY2NC5oIGIvaW5jbHVkZS9hc20tdW0vZGl2NjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTE3Zjc0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdW0vZGl2NjQuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX1VNX0RJVjY0X0gKKyNkZWZpbmUgX1VNX0RJVjY0X0gKKworI2luY2x1ZGUgImFzbS9hcmNoL2RpdjY0LmgiCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vZG1hLW1hcHBpbmcuaCBiL2luY2x1ZGUvYXNtLXVtL2RtYS1tYXBwaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNlNjI5MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXVtL2RtYS1tYXBwaW5nLmgKQEAgLTAsMCArMSwxMjEgQEAKKyNpZm5kZWYgX0FTTV9ETUFfTUFQUElOR19ICisjZGVmaW5lIF9BU01fRE1BX01BUFBJTkdfSAorCisjaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+CisKK3N0YXRpYyBpbmxpbmUgaW50CitkbWFfc3VwcG9ydGVkKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IG1hc2spCit7CisJQlVHKCk7CisJcmV0dXJuKDApOworfQorCitzdGF0aWMgaW5saW5lIGludAorZG1hX3NldF9tYXNrKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IGRtYV9tYXNrKQoreworCUJVRygpOworCXJldHVybigwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkICoKK2RtYV9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLAorCQkgICBpbnQgZmxhZykKK3sKKwlCVUcoKTsKKwlyZXR1cm4oKHZvaWQgKikgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZG1hX2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgdm9pZCAqY3B1X2FkZHIsCisJCSAgZG1hX2FkZHJfdCBkbWFfaGFuZGxlKQoreworCUJVRygpOworfQorCitzdGF0aWMgaW5saW5lIGRtYV9hZGRyX3QKK2RtYV9tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsIHNpemVfdCBzaXplLAorCSAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJQlVHKCk7CisJcmV0dXJuKDApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2RtYV91bm1hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyLCBzaXplX3Qgc2l6ZSwKKwkJIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlCVUcoKTsKK30KKworc3RhdGljIGlubGluZSBkbWFfYWRkcl90CitkbWFfbWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkgICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwKKwkgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlCVUcoKTsKKwlyZXR1cm4oMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZG1hX3VubWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyZXNzLCBzaXplX3Qgc2l6ZSwKKwkgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCUJVRygpOworfQorCitzdGF0aWMgaW5saW5lIGludAorZG1hX21hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZW50cywKKwkgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJQlVHKCk7CisJcmV0dXJuKDApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2RtYV91bm1hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuaHdlbnRyaWVzLAorCSAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCUJVRygpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2RtYV9zeW5jX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgc2l6ZV90IHNpemUsCisJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlCVUcoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitkbWFfc3luY19zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZWxlbXMsCisJICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlCVUcoKTsKK30KKworI2RlZmluZSBkbWFfYWxsb2Nfbm9uY29oZXJlbnQoZCwgcywgaCwgZikgZG1hX2FsbG9jX2NvaGVyZW50KGQsIHMsIGgsIGYpCisjZGVmaW5lIGRtYV9mcmVlX25vbmNvaGVyZW50KGQsIHMsIHYsIGgpIGRtYV9mcmVlX2NvaGVyZW50KGQsIHMsIHYsIGgpCisjZGVmaW5lIGRtYV9pc19jb25zaXN0ZW50KGQpICgxKQorCitzdGF0aWMgaW5saW5lIGludAorZG1hX2dldF9jYWNoZV9hbGlnbm1lbnQodm9pZCkKK3sKKwlCVUcoKTsKKwlyZXR1cm4oMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZG1hX3N5bmNfc2luZ2xlX3JhbmdlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAorCQkgICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsCisJCSAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlCVUcoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitkbWFfY2FjaGVfc3luYyh2b2lkICp2YWRkciwgc2l6ZV90IHNpemUsCisJICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlCVUcoKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9kbWEuaCBiL2luY2x1ZGUvYXNtLXVtL2RtYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmNjEzOWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS11bS9kbWEuaApAQCAtMCwwICsxLDEwIEBACisjaWZuZGVmIF9fVU1fRE1BX0gKKyNkZWZpbmUgX19VTV9ETUFfSAorCisjaW5jbHVkZSAiYXNtL2lvLmgiCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIHVtbF9waHlzbWVtOworCisjZGVmaW5lIE1BWF9ETUFfQUREUkVTUyAodW1sX3BoeXNtZW0pCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vZHdhcmYyLmggYi9pbmNsdWRlL2FzbS11bS9kd2FyZjIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWEwMmU3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdW0vZHdhcmYyLmgKQEAgLTAsMCArMSwxMSBAQAorLyogQ29weXJpZ2h0IDIwMDMgLSAyMDA0IFBhdGhzY2FsZSwgSW5jCisgKiBSZWxlYXNlZCB1bmRlciB0aGUgR1BMCisgKi8KKworLyogTmVlZGVkIG9uIHg4Nl82NCBieSB0aHVuay5TICovCisjaWZuZGVmIF9fVU1fRFdBUkYyX0gKKyNkZWZpbmUgX19VTV9EV0FSRjJfSAorCisjaW5jbHVkZSAiYXNtL2FyY2gvZHdhcmYyLmgiCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vZWxmLmggYi9pbmNsdWRlL2FzbS11bS9lbGYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2E3MjU4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdW0vZWxmLmgKQEAgLTAsMCArMSwzNyBAQAorI2lmbmRlZiBfX1VNX0VMRl9ICisjZGVmaW5lIF9fVU1fRUxGX0gKKworI2luY2x1ZGUgImxpbnV4L2NvbmZpZy5oIgorI2luY2x1ZGUgImFzbS9hcmNocGFyYW0uaCIKKworZXh0ZXJuIGxvbmcgZWxmX2F1eF9od2NhcDsKKyNkZWZpbmUgRUxGX0hXQ0FQIChlbGZfYXV4X2h3Y2FwKQorCisjZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCwgaWJjczIpIGRvIDsgd2hpbGUoMCkKKworI2RlZmluZSBFTEZfRVhFQ19QQUdFU0laRSA0MDk2CisKKyNkZWZpbmUgZWxmX2NoZWNrX2FyY2goeCkgKDEpCisKKyNpZmRlZiBDT05GSUdfNjRfQklUCisjZGVmaW5lIEVMRl9DTEFTUyBFTEZDTEFTUzY0CisjZWxzZQorI2RlZmluZSBFTEZfQ0xBU1MgRUxGQ0xBU1MzMgorI2VuZGlmCisKKyNkZWZpbmUgVVNFX0VMRl9DT1JFX0RVTVAKKworI2RlZmluZSBSXzM4Nl9OT05FCTAKKyNkZWZpbmUgUl8zODZfMzIJMQorI2RlZmluZSBSXzM4Nl9QQzMyCTIKKyNkZWZpbmUgUl8zODZfR09UMzIJMworI2RlZmluZSBSXzM4Nl9QTFQzMgk0CisjZGVmaW5lIFJfMzg2X0NPUFkJNQorI2RlZmluZSBSXzM4Nl9HTE9CX0RBVAk2CisjZGVmaW5lIFJfMzg2X0pNUF9TTE9UCTcKKyNkZWZpbmUgUl8zODZfUkVMQVRJVkUJOAorI2RlZmluZSBSXzM4Nl9HT1RPRkYJOQorI2RlZmluZSBSXzM4Nl9HT1RQQwkxMAorI2RlZmluZSBSXzM4Nl9OVU0JMTEKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9lcnJuby5oIGIvaW5jbHVkZS9hc20tdW0vZXJybm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2E5ZTM3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdW0vZXJybm8uaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19VTV9FUlJOT19ICisjZGVmaW5lIF9fVU1fRVJSTk9fSAorCisjaW5jbHVkZSAiYXNtL2FyY2gvZXJybm8uaCIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9mY250bC5oIGIvaW5jbHVkZS9hc20tdW0vZmNudGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTJhNjU0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdW0vZmNudGwuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19VTV9GQ05UTF9ICisjZGVmaW5lIF9fVU1fRkNOVExfSAorCisjaW5jbHVkZSAiYXNtL2FyY2gvZmNudGwuaCIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9maXhtYXAuaCBiL2luY2x1ZGUvYXNtLXVtL2ZpeG1hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwMGYzZmJiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdW0vZml4bWFwLmgKQEAgLTAsMCArMSw5NyBAQAorI2lmbmRlZiBfX1VNX0ZJWE1BUF9ICisjZGVmaW5lIF9fVU1fRklYTUFQX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS9rbWFwX3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2hwYXJhbS5oPgorCisvKgorICogSGVyZSB3ZSBkZWZpbmUgYWxsIHRoZSBjb21waWxlLXRpbWUgJ3NwZWNpYWwnIHZpcnR1YWwKKyAqIGFkZHJlc3Nlcy4gVGhlIHBvaW50IGlzIHRvIGhhdmUgYSBjb25zdGFudCBhZGRyZXNzIGF0CisgKiBjb21waWxlIHRpbWUsIGJ1dCB0byBzZXQgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb25seQorICogaW4gdGhlIGJvb3QgcHJvY2Vzcy4gV2UgYWxsb2NhdGUgdGhlc2Ugc3BlY2lhbCAgYWRkcmVzc2VzCisgKiBmcm9tIHRoZSBlbmQgb2YgdmlydHVhbCBtZW1vcnkgKDB4ZmZmZmYwMDApIGJhY2t3YXJkcy4KKyAqIEFsc28gdGhpcyBsZXRzIHVzIGRvIGZhaWwtc2FmZSB2bWFsbG9jKCksIHdlCisgKiBjYW4gZ3VhcmFudGVlIHRoYXQgdGhlc2Ugc3BlY2lhbCBhZGRyZXNzZXMgYW5kCisgKiB2bWFsbG9jKCktZWQgYWRkcmVzc2VzIG5ldmVyIG92ZXJsYXAuCisgKgorICogdGhlc2UgJ2NvbXBpbGUtdGltZSBhbGxvY2F0ZWQnIG1lbW9yeSBidWZmZXJzIGFyZQorICogZml4ZWQtc2l6ZSA0ayBwYWdlcy4gKG9yIGxhcmdlciBpZiB1c2VkIHdpdGggYW4gaW5jcmVtZW50CisgKiBoaWdoZ2VyIHRoYW4gMSkgdXNlIGZpeG1hcF9zZXQoaWR4LHBoeXMpIHRvIGFzc29jaWF0ZQorICogcGh5c2ljYWwgbWVtb3J5IHdpdGggZml4bWFwIGluZGljZXMuCisgKgorICogVExCIGVudHJpZXMgb2Ygc3VjaCBidWZmZXJzIHdpbGwgbm90IGJlIGZsdXNoZWQgYWNyb3NzCisgKiB0YXNrIHN3aXRjaGVzLgorICovCisKKy8qCisgKiBvbiBVUCBjdXJyZW50bHkgd2Ugd2lsbCBoYXZlIG5vIHRyYWNlIG9mIHRoZSBmaXhtYXAgbWVjaGFuaXptLAorICogbm8gcGFnZSB0YWJsZSBhbGxvY2F0aW9ucywgZXRjLiBUaGlzIG1pZ2h0IGNoYW5nZSBpbiB0aGUKKyAqIGZ1dHVyZSwgc2F5IGZyYW1lYnVmZmVycyBmb3IgdGhlIGNvbnNvbGUgZHJpdmVyKHMpIGNvdWxkIGJlCisgKiBmaXgtbWFwcGVkPworICovCitlbnVtIGZpeGVkX2FkZHJlc3NlcyB7CisjaWZkZWYgQ09ORklHX0hJR0hNRU0KKwlGSVhfS01BUF9CRUdJTiwJLyogcmVzZXJ2ZWQgcHRlJ3MgZm9yIHRlbXBvcmFyeSBrZXJuZWwgbWFwcGluZ3MgKi8KKwlGSVhfS01BUF9FTkQgPSBGSVhfS01BUF9CRUdJTisoS01fVFlQRV9OUipOUl9DUFVTKS0xLAorI2VuZGlmCisJX19lbmRfb2ZfZml4ZWRfYWRkcmVzc2VzCit9OworCitleHRlcm4gdm9pZCBfX3NldF9maXhtYXAgKGVudW0gZml4ZWRfYWRkcmVzc2VzIGlkeCwKKwkJCSAgdW5zaWduZWQgbG9uZyBwaHlzLCBwZ3Byb3RfdCBmbGFncyk7CisKKyNkZWZpbmUgc2V0X2ZpeG1hcChpZHgsIHBoeXMpIFwKKwkJX19zZXRfZml4bWFwKGlkeCwgcGh5cywgUEFHRV9LRVJORUwpCisvKgorICogU29tZSBoYXJkd2FyZSB3YW50cyB0byBnZXQgZml4bWFwcGVkIHdpdGhvdXQgY2FjaGluZy4KKyAqLworI2RlZmluZSBzZXRfZml4bWFwX25vY2FjaGUoaWR4LCBwaHlzKSBcCisJCV9fc2V0X2ZpeG1hcChpZHgsIHBoeXMsIFBBR0VfS0VSTkVMX05PQ0FDSEUpCisvKgorICogdXNlZCBieSB2bWFsbG9jLmMuCisgKgorICogTGVhdmUgb25lIGVtcHR5IHBhZ2UgYmV0d2VlbiB2bWFsbG9jJ2VkIGFyZWFzIGFuZAorICogdGhlIHN0YXJ0IG9mIHRoZSBmaXhtYXAsIGFuZCBsZWF2ZSBvbmUgcGFnZSBlbXB0eQorICogYXQgdGhlIHRvcCBvZiBtZW0uLgorICovCitleHRlcm4gdW5zaWduZWQgbG9uZyBnZXRfa21lbV9lbmQodm9pZCk7CisKKyNkZWZpbmUgRklYQUREUl9UT1AJKGdldF9rbWVtX2VuZCgpIC0gMHgyMDAwKQorI2RlZmluZSBGSVhBRERSX1NJWkUJKF9fZW5kX29mX2ZpeGVkX2FkZHJlc3NlcyA8PCBQQUdFX1NISUZUKQorI2RlZmluZSBGSVhBRERSX1NUQVJUCShGSVhBRERSX1RPUCAtIEZJWEFERFJfU0laRSkKKworI2RlZmluZSBfX2ZpeF90b192aXJ0KHgpCShGSVhBRERSX1RPUCAtICgoeCkgPDwgUEFHRV9TSElGVCkpCisjZGVmaW5lIF9fdmlydF90b19maXgoeCkgICAgICAoKEZJWEFERFJfVE9QIC0gKCh4KSZQQUdFX01BU0spKSA+PiBQQUdFX1NISUZUKQorCitleHRlcm4gdm9pZCBfX3RoaXNfZml4bWFwX2RvZXNfbm90X2V4aXN0KHZvaWQpOworCisvKgorICogJ2luZGV4IHRvIGFkZHJlc3MnIHRyYW5zbGF0aW9uLiBJZiBhbnlvbmUgdHJpZXMgdG8gdXNlIHRoZSBpZHgKKyAqIGRpcmVjdGx5IHdpdGhvdXQgdHJhbmxhdGlvbiwgd2UgY2F0Y2ggdGhlIGJ1ZyB3aXRoIGEgTlVMTC1kZWZlcmVuY2UKKyAqIGtlcm5lbCBvb3BzLiBJbGxlZ2FsIHJhbmdlcyBvZiBpbmNvbWluZyBpbmRpY2VzIGFyZSBjYXVnaHQgdG9vLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZml4X3RvX3ZpcnQoY29uc3QgdW5zaWduZWQgaW50IGlkeCkKK3sKKwkvKgorCSAqIHRoaXMgYnJhbmNoIGdldHMgY29tcGxldGVseSBlbGltaW5hdGVkIGFmdGVyIGlubGluaW5nLAorCSAqIGV4Y2VwdCB3aGVuIHNvbWVvbmUgdHJpZXMgdG8gdXNlIGZpeGFkZHIgaW5kaWNlcyBpbiBhbgorCSAqIGlsbGVnYWwgd2F5LiAoc3VjaCBhcyBtaXhpbmcgdXAgYWRkcmVzcyB0eXBlcyBvciB1c2luZworCSAqIG91dC1vZi1yYW5nZSBpbmRpY2VzKS4KKwkgKgorCSAqIElmIGl0IGRvZXNuJ3QgZ2V0IHJlbW92ZWQsIHRoZSBsaW5rZXIgd2lsbCBjb21wbGFpbgorCSAqIGxvdWRseSB3aXRoIGEgcmVhc29uYWJseSBjbGVhciBlcnJvciBtZXNzYWdlLi4KKwkgKi8KKwlpZiAoaWR4ID49IF9fZW5kX29mX2ZpeGVkX2FkZHJlc3NlcykKKwkJX190aGlzX2ZpeG1hcF9kb2VzX25vdF9leGlzdCgpOworCisgICAgICAgIHJldHVybiBfX2ZpeF90b192aXJ0KGlkeCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB2aXJ0X3RvX2ZpeChjb25zdCB1bnNpZ25lZCBsb25nIHZhZGRyKQoreworICAgICAgQlVHX09OKHZhZGRyID49IEZJWEFERFJfVE9QIHx8IHZhZGRyIDwgRklYQUREUl9TVEFSVCk7CisgICAgICByZXR1cm4gX192aXJ0X3RvX2ZpeCh2YWRkcik7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vZmxvcHB5LmggYi9pbmNsdWRlL2FzbS11bS9mbG9wcHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTNlNzQxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdW0vZmxvcHB5LmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fVU1fRkxPUFBZX0gKKyNkZWZpbmUgX19VTV9GTE9QUFlfSAorCisjaW5jbHVkZSAiYXNtL2FyY2gvZmxvcHB5LmgiCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vaGFyZGlycS5oIGIvaW5jbHVkZS9hc20tdW0vaGFyZGlycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyMjRiMjYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS11bS9oYXJkaXJxLmgKQEAgLTAsMCArMSwyNiBAQAorLyogKGMpIDIwMDQgY3dAZjAwZi5vcmcsIEdQTHYyIGJsYWggYmxhaCAqLworCisjaWZuZGVmIF9fQVNNX1VNX0hBUkRJUlFfSAorI2RlZmluZSBfX0FTTV9VTV9IQVJESVJRX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKworLyogTk9URTogV2hlbiBTTVAgd29ya3MgYWdhaW4gd2UgbWlnaHQgd2FudCB0byBtYWtlIHRoaXMKKyAqIF9fX19jYWNoZWxpbmVfYWxpZ25lZCBvciBtYXliZSB1c2UgcGVyX2NwdSBzdGF0ZT8gLS1jdyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludCBfX3NvZnRpcnFfcGVuZGluZzsKK30gaXJxX2NwdXN0YXRfdDsKKworI2luY2x1ZGUgPGxpbnV4L2lycV9jcHVzdGF0Lmg+CisKKy8qIEFzIHRoaXMgd291bGQgYmUgdmVyeSBzdHJhbmdlIGZvciBVTUwgdG8gZ2V0IHdlIEJVRygpIGFmdGVyIHRoZQorICogcHJpbnRrLiAqLworc3RhdGljIGlubGluZSB2b2lkIGFja19iYWRfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJcHJpbnRrKEtFUk5fRVJSICJ1bmV4cGVjdGVkIElSUSAlMDJ4XG4iLCBpcnEpOworCUJVRygpOworfQorCisjZW5kaWYgLyogX19BU01fVU1fSEFSRElSUV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9oZHJlZy5oIGIvaW5jbHVkZS9hc20tdW0vaGRyZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjYzNjNhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdW0vaGRyZWcuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19VTV9IRFJFR19ICisjZGVmaW5lIF9fVU1fSERSRUdfSAorCisjaW5jbHVkZSAiYXNtL2FyY2gvaGRyZWcuaCIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9oaWdobWVtLmggYi9pbmNsdWRlL2FzbS11bS9oaWdobWVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY5NzRjYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXVtL2hpZ2htZW0uaApAQCAtMCwwICsxLDEyIEBACisjaWZuZGVmIF9fVU1fSElHSE1FTV9ICisjZGVmaW5lIF9fVU1fSElHSE1FTV9ICisKKyNpbmNsdWRlICJhc20vcGFnZS5oIgorI2luY2x1ZGUgImFzbS9maXhtYXAuaCIKKyNpbmNsdWRlICJhc20vYXJjaC9oaWdobWVtLmgiCisKKyN1bmRlZiBQS01BUF9CQVNFCisKKyNkZWZpbmUgUEtNQVBfQkFTRSAoKEZJWEFERFJfU1RBUlQgLSBMQVNUX1BLTUFQICogUEFHRV9TSVpFKSAmIFBNRF9NQVNLKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL2h3X2lycS5oIGIvaW5jbHVkZS9hc20tdW0vaHdfaXJxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVlMzhjMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXVtL2h3X2lycS5oCkBAIC0wLDAgKzEsMTAgQEAKKyNpZm5kZWYgX0FTTV9VTV9IV19JUlFfSAorI2RlZmluZSBfQVNNX1VNX0hXX0lSUV9ICisKKyNpbmNsdWRlICJhc20vaXJxLmgiCisjaW5jbHVkZSAiYXNtL2FyY2hwYXJhbS5oIgorCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfcmVzZW5kX2lycShzdHJ1Y3QgaHdfaW50ZXJydXB0X3R5cGUgKmgsIHVuc2lnbmVkIGludCBpKQore30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9pZGUuaCBiL2luY2x1ZGUvYXNtLXVtL2lkZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkMWNjZWIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS11bS9pZGUuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19VTV9JREVfSAorI2RlZmluZSBfX1VNX0lERV9ICisKKyNpbmNsdWRlICJhc20vYXJjaC9pZGUuaCIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9pby5oIGIvaW5jbHVkZS9hc20tdW0vaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDY3NDA1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdW0vaW8uaApAQCAtMCwwICsxLDM2IEBACisjaWZuZGVmIF9fVU1fSU9fSAorI2RlZmluZSBfX1VNX0lPX0gKKworI2luY2x1ZGUgImFzbS9wYWdlLmgiCisKKyNkZWZpbmUgSU9fU1BBQ0VfTElNSVQgMHhkZWFkYmVlZiAvKiBTdXJlIGhvcGUgbm90aGluZyB1c2VzIHRoaXMgKi8KKworc3RhdGljIGlubGluZSBpbnQgaW5iKHVuc2lnbmVkIGxvbmcgaSkgeyByZXR1cm4oMCk7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBvdXRiKGNoYXIgYywgdW5zaWduZWQgbG9uZyBpKSB7IH0KKworLyoKKyAqIENoYW5nZSB2aXJ0dWFsIGFkZHJlc3NlcyB0byBwaHlzaWNhbCBhZGRyZXNzZXMgYW5kIHZ2LgorICogVGhlc2UgYXJlIHByZXR0eSB0cml2aWFsCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB2aXJ0X3RvX3BoeXModm9sYXRpbGUgdm9pZCAqIGFkZHJlc3MpCit7CisJcmV0dXJuIF9fcGEoKHZvaWQgKikgYWRkcmVzcyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqIHBoeXNfdG9fdmlydCh1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisJcmV0dXJuIF9fdmEoYWRkcmVzcyk7Cit9CisKKy8qCisgKiBDb252ZXJ0IGEgcGh5c2ljYWwgcG9pbnRlciB0byBhIHZpcnR1YWwga2VybmVsIHBvaW50ZXIgZm9yIC9kZXYvbWVtCisgKiBhY2Nlc3MKKyAqLworI2RlZmluZSB4bGF0ZV9kZXZfbWVtX3B0cihwKQlfX3ZhKHApCisKKy8qCisgKiBDb252ZXJ0IGEgdmlydHVhbCBjYWNoZWQgcG9pbnRlciB0byBhbiB1bmNhY2hlZCBwb2ludGVyCisgKi8KKyNkZWZpbmUgeGxhdGVfZGV2X2ttZW1fcHRyKHApCXAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9pb2N0bC5oIGIvaW5jbHVkZS9hc20tdW0vaW9jdGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzIyMTU3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdW0vaW9jdGwuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19VTV9JT0NUTF9ICisjZGVmaW5lIF9fVU1fSU9DVExfSAorCisjaW5jbHVkZSAiYXNtL2FyY2gvaW9jdGwuaCIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9pb2N0bHMuaCBiL2luY2x1ZGUvYXNtLXVtL2lvY3Rscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhMWEwMTdkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdW0vaW9jdGxzLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fVU1fSU9DVExTX0gKKyNkZWZpbmUgX19VTV9JT0NUTFNfSAorCisjaW5jbHVkZSAiYXNtL2FyY2gvaW9jdGxzLmgiCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vaXBjLmggYi9pbmNsdWRlL2FzbS11bS9pcGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmRkYzQ3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdW0vaXBjLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fVU1fSVBDX0gKKyNkZWZpbmUgX19VTV9JUENfSAorCisjaW5jbHVkZSAiYXNtL2FyY2gvaXBjLmgiCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vaXBjYnVmLmggYi9pbmNsdWRlL2FzbS11bS9pcGNidWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjJhZDMxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdW0vaXBjYnVmLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fVU1fSVBDQlVGX0gKKyNkZWZpbmUgX19VTV9JUENCVUZfSAorCisjaW5jbHVkZSAiYXNtL2FyY2gvaXBjYnVmLmgiCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vaXJxLmggYi9pbmNsdWRlL2FzbS11bS9pcnEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTM4OWE0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdW0vaXJxLmgKQEAgLTAsMCArMSwyMiBAQAorI2lmbmRlZiBfX1VNX0lSUV9ICisjZGVmaW5lIF9fVU1fSVJRX0gKKworI2RlZmluZSBUSU1FUl9JUlEJCTAKKyNkZWZpbmUgVU1OX0lSUQkJCTEKKyNkZWZpbmUgQ09OU09MRV9JUlEJCTIKKyNkZWZpbmUgQ09OU09MRV9XUklURV9JUlEJMworI2RlZmluZSBVQkRfSVJRCQkJNAorI2RlZmluZSBVTV9FVEhfSVJRCQk1CisjZGVmaW5lIFNTTF9JUlEJCQk2CisjZGVmaW5lIFNTTF9XUklURV9JUlEJCTcKKyNkZWZpbmUgQUNDRVBUX0lSUQkJOAorI2RlZmluZSBNQ09OU09MRV9JUlEJCTkKKyNkZWZpbmUgV0lOQ0hfSVJRCQkxMAorI2RlZmluZSBTSUdJT19XUklURV9JUlEgCTExCisjZGVmaW5lIFRFTE5FVERfSVJRIAkJMTIKKyNkZWZpbmUgWFRFUk1fSVJRIAkJMTMKKworI2RlZmluZSBMQVNUX0lSUSBYVEVSTV9JUlEKKyNkZWZpbmUgTlJfSVJRUyAoTEFTVF9JUlEgKyAxKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL2lycV92ZWN0b3JzLmggYi9pbmNsdWRlL2FzbS11bS9pcnFfdmVjdG9ycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyZGRiYTYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS11bS9pcnFfdmVjdG9ycy5oCkBAIC0wLDAgKzEsMjAgQEAKKy8qIAorICogQ29weXJpZ2h0IChDKSAyMDAyIEplZmYgRGlrZSAoamRpa2VAa2FyYXlhLmNvbSkKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwKKyAqLworCisjaWZuZGVmIF9fVU1fSVJRX1ZFQ1RPUlNfSAorI2RlZmluZSBfX1VNX0lSUV9WRUNUT1JTX0gKKworI2VuZGlmCisKKy8qCisgKiBPdmVycmlkZXMgZm9yIEVtYWNzIHNvIHRoYXQgd2UgZm9sbG93IExpbnVzJ3MgdGFiYmluZyBzdHlsZS4KKyAqIEVtYWNzIHdpbGwgbm90aWNlIHRoaXMgc3R1ZmYgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgYXV0b21hdGljYWxseQorICogYWRqdXN0IHRoZSBzZXR0aW5ncyBmb3IgdGhpcyBidWZmZXIgb25seS4gIFRoaXMgbXVzdCByZW1haW4gYXQgdGhlIGVuZAorICogb2YgdGhlIGZpbGUuCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqIGMtZmlsZS1zdHlsZTogImxpbnV4IgorICogRW5kOgorICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9rZXlib2FyZC5oIGIvaW5jbHVkZS9hc20tdW0va2V5Ym9hcmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTJlMjMwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdW0va2V5Ym9hcmQuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19VTV9LRVlCT0FSRF9ICisjZGVmaW5lIF9fVU1fS0VZQk9BUkRfSAorCisjaW5jbHVkZSAiYXNtL2FyY2gva2V5Ym9hcmQuaCIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9rbWFwX3R5cGVzLmggYi9pbmNsdWRlL2FzbS11bS9rbWFwX3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGIyMmFkNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXVtL2ttYXBfdHlwZXMuaApAQCAtMCwwICsxLDExIEBACisvKiAKKyAqIENvcHlyaWdodCAoQykgMjAwMiBKZWZmIERpa2UgKGpkaWtlQGthcmF5YS5jb20pCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMCisgKi8KKworI2lmbmRlZiBfX1VNX0tNQVBfVFlQRVNfSAorI2RlZmluZSBfX1VNX0tNQVBfVFlQRVNfSAorCisjaW5jbHVkZSAiYXNtL2FyY2gva21hcF90eXBlcy5oIgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL2xpbmthZ2UuaCBiL2luY2x1ZGUvYXNtLXVtL2xpbmthZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzAxMTY1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdW0vbGlua2FnZS5oCkBAIC0wLDAgKzEsNyBAQAorI2lmbmRlZiBfX0FTTV9MSU5LQUdFX0gKKyNkZWZpbmUgX19BU01fTElOS0FHRV9ICisKKyNkZWZpbmUgRkFTVENBTEwoeCkJeCBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSkKKyNkZWZpbmUgZmFzdGNhbGwgICAgICAgIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL2xvY2FsLmggYi9pbmNsdWRlL2FzbS11bS9sb2NhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhMjgwYzUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS11bS9sb2NhbC5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfX1VNX0xPQ0FMX0gKKyNkZWZpbmUgX19VTV9MT0NBTF9ICisKKyNpbmNsdWRlICJhc20vYXJjaC9sb2NhbC5oIgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL2xvY2tzLmggYi9pbmNsdWRlL2FzbS11bS9sb2Nrcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4MDAzMGEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS11bS9sb2Nrcy5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfX1VNX0xPQ0tTX0gKKyNkZWZpbmUgX19VTV9MT0NLU19ICisKKyNpbmNsdWRlICJhc20vYXJjaC9sb2Nrcy5oIgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL21jYV9kbWEuaCBiL2luY2x1ZGUvYXNtLXVtL21jYV9kbWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDkyZTRlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdW0vbWNhX2RtYS5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBtY2FfX19VTV9ETUFfSAorI2RlZmluZSBtY2FfX19VTV9ETUFfSAorCisjaW5jbHVkZSAiYXNtL2FyY2gvbWNhX2RtYS5oIgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL21tYW4uaCBiL2luY2x1ZGUvYXNtLXVtL21tYW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDllZDUyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdW0vbW1hbi5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfX1VNX01NQU5fSAorI2RlZmluZSBfX1VNX01NQU5fSAorCisjaW5jbHVkZSAiYXNtL2FyY2gvbW1hbi5oIgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL21tdS5oIGIvaW5jbHVkZS9hc20tdW0vbW11LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNmMzVjMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXVtL21tdS5oCkBAIC0wLDAgKzEsMjIgQEAKKy8qIAorICogQ29weXJpZ2h0IChDKSAyMDAyIEplZmYgRGlrZSAoamRpa2VAa2FyYXlhLmNvbSkKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwKKyAqLworCisjaWZuZGVmIF9fTU1VX0gKKyNkZWZpbmUgX19NTVVfSAorCisjaW5jbHVkZSAidW1fbW11LmgiCisKKyNlbmRpZgorCisvKgorICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCisgKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKKyAqIGFkanVzdCB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgYnVmZmVyIG9ubHkuICBUaGlzIG11c3QgcmVtYWluIGF0IHRoZSBlbmQKKyAqIG9mIHRoZSBmaWxlLgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiBjLWZpbGUtc3R5bGU6ICJsaW51eCIKKyAqIEVuZDoKKyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vbW11X2NvbnRleHQuaCBiL2luY2x1ZGUvYXNtLXVtL21tdV9jb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODliZmYzMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXVtL21tdV9jb250ZXh0LmgKQEAgLTAsMCArMSw3NiBAQAorLyogCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgSmVmZiBEaWtlIChqZGlrZUBrYXJheWEuY29tKQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTAorICovCisKKyNpZm5kZWYgX19VTV9NTVVfQ09OVEVYVF9ICisjZGVmaW5lIF9fVU1fTU1VX0NPTlRFWFRfSAorCisjaW5jbHVkZSAibGludXgvc2NoZWQuaCIKKyNpbmNsdWRlICJjaG9vc2UtbW9kZS5oIgorCisjZGVmaW5lIGdldF9tbXVfY29udGV4dCh0YXNrKSBkbyA7IHdoaWxlKDApCisjZGVmaW5lIGFjdGl2YXRlX2NvbnRleHQodHNrKSBkbyA7IHdoaWxlKDApCisKKyNkZWZpbmUgZGVhY3RpdmF0ZV9tbSh0c2ssbW0pCWRvIHsgfSB3aGlsZSAoMCkKKworc3RhdGljIGlubGluZSB2b2lkIGFjdGl2YXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm9sZCwgc3RydWN0IG1tX3N0cnVjdCAqbmV3KQoreworfQorCitleHRlcm4gdm9pZCBzd2l0Y2hfbW1fc2thcyhpbnQgbW1fZmQpOworCitzdGF0aWMgaW5saW5lIHZvaWQgc3dpdGNoX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKnByZXYsIHN0cnVjdCBtbV9zdHJ1Y3QgKm5leHQsIAorCQkJICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwl1bnNpZ25lZCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisKKwlpZihwcmV2ICE9IG5leHQpeworCQljcHVfY2xlYXIoY3B1LCBwcmV2LT5jcHVfdm1fbWFzayk7CisJCWNwdV9zZXQoY3B1LCBuZXh0LT5jcHVfdm1fbWFzayk7CisJCWlmKG5leHQgIT0gJmluaXRfbW0pCisJCQlDSE9PU0VfTU9ERSgodm9pZCkgMCwgCisJCQkJICAgIHN3aXRjaF9tbV9za2FzKG5leHQtPmNvbnRleHQuc2thcy5tbV9mZCkpOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIGVudGVyX2xhenlfdGxiKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCAKKwkJCQkgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworfQorCitleHRlcm4gaW50IGluaXRfbmV3X2NvbnRleHRfc2thcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIAorCQkJCSBzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CisKK3N0YXRpYyBpbmxpbmUgaW50IGluaXRfbmV3X2NvbnRleHRfdHQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCAKKwkJCQkgICAgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlyZXR1cm4oMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGluaXRfbmV3X2NvbnRleHQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCAKKwkJCQkgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlyZXR1cm4oQ0hPT1NFX01PREVfUFJPQyhpbml0X25ld19jb250ZXh0X3R0LCBpbml0X25ld19jb250ZXh0X3NrYXMsIAorCQkJCXRhc2ssIG1tKSk7Cit9CisKK2V4dGVybiB2b2lkIGRlc3Ryb3lfY29udGV4dF9za2FzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKKworc3RhdGljIGlubGluZSB2b2lkIGRlc3Ryb3lfY29udGV4dChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlDSE9PU0VfTU9ERSgodm9pZCkgMCwgZGVzdHJveV9jb250ZXh0X3NrYXMobW0pKTsKK30KKworI2VuZGlmCisKKy8qCisgKiBPdmVycmlkZXMgZm9yIEVtYWNzIHNvIHRoYXQgd2UgZm9sbG93IExpbnVzJ3MgdGFiYmluZyBzdHlsZS4KKyAqIEVtYWNzIHdpbGwgbm90aWNlIHRoaXMgc3R1ZmYgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgYXV0b21hdGljYWxseQorICogYWRqdXN0IHRoZSBzZXR0aW5ncyBmb3IgdGhpcyBidWZmZXIgb25seS4gIFRoaXMgbXVzdCByZW1haW4gYXQgdGhlIGVuZAorICogb2YgdGhlIGZpbGUuCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqIGMtZmlsZS1zdHlsZTogImxpbnV4IgorICogRW5kOgorICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9tb2R1bGUtZ2VuZXJpYy5oIGIvaW5jbHVkZS9hc20tdW0vbW9kdWxlLWdlbmVyaWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTI2NWY1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdW0vbW9kdWxlLWdlbmVyaWMuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19VTV9NT0RVTEVfR0VORVJJQ19ICisjZGVmaW5lIF9fVU1fTU9EVUxFX0dFTkVSSUNfSAorCisjaW5jbHVkZSAiYXNtL2FyY2gvbW9kdWxlLmgiCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vbW9kdWxlLWkzODYuaCBiL2luY2x1ZGUvYXNtLXVtL21vZHVsZS1pMzg2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVhZDRhMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXVtL21vZHVsZS1pMzg2LmgKQEAgLTAsMCArMSwxMyBAQAorI2lmbmRlZiBfX1VNX01PRFVMRV9JMzg2X0gKKyNkZWZpbmUgX19VTV9NT0RVTEVfSTM4Nl9ICisKKy8qIFVNTCBpcyBzaW1wbGUgKi8KK3N0cnVjdCBtb2RfYXJjaF9zcGVjaWZpYworeworfTsKKworI2RlZmluZSBFbGZfU2hkciBFbGYzMl9TaGRyCisjZGVmaW5lIEVsZl9TeW0gRWxmMzJfU3ltCisjZGVmaW5lIEVsZl9FaGRyIEVsZjMyX0VoZHIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9tb2R1bGUteDg2XzY0LmggYi9pbmNsdWRlL2FzbS11bS9tb2R1bGUteDg2XzY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzViNTQ5MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXVtL21vZHVsZS14ODZfNjQuaApAQCAtMCwwICsxLDMwIEBACisvKgorICogQ29weXJpZ2h0IDIwMDMgUGF0aFNjYWxlLCBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTAorICovCisKKyNpZm5kZWYgX19VTV9NT0RVTEVfWDg2XzY0X0gKKyNkZWZpbmUgX19VTV9NT0RVTEVfWDg2XzY0X0gKKworLyogVU1MIGlzIHNpbXBsZSAqLworc3RydWN0IG1vZF9hcmNoX3NwZWNpZmljCit7Cit9OworCisjZGVmaW5lIEVsZl9TaGRyIEVsZjY0X1NoZHIKKyNkZWZpbmUgRWxmX1N5bSBFbGY2NF9TeW0KKyNkZWZpbmUgRWxmX0VoZHIgRWxmNjRfRWhkcgorCisjZW5kaWYKKworLyoKKyAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgorICogRW1hY3Mgd2lsbCBub3RpY2UgdGhpcyBzdHVmZiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBhdXRvbWF0aWNhbGx5CisgKiBhZGp1c3QgdGhlIHNldHRpbmdzIGZvciB0aGlzIGJ1ZmZlciBvbmx5LiAgVGhpcyBtdXN0IHJlbWFpbiBhdCB0aGUgZW5kCisgKiBvZiB0aGUgZmlsZS4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogTG9jYWwgdmFyaWFibGVzOgorICogYy1maWxlLXN0eWxlOiAibGludXgiCisgKiBFbmQ6CisgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL21zZ2J1Zi5oIGIvaW5jbHVkZS9hc20tdW0vbXNnYnVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGNlOGMzMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXVtL21zZ2J1Zi5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfX1VNX01TR0JVRl9ICisjZGVmaW5lIF9fVU1fTVNHQlVGX0gKKworI2luY2x1ZGUgImFzbS9hcmNoL21zZ2J1Zi5oIgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL210cnIuaCBiL2luY2x1ZGUvYXNtLXVtL210cnIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTljZDEyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdW0vbXRyci5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfX1VNX01UUlJfSAorI2RlZmluZSBfX1VNX01UUlJfSAorCisjaW5jbHVkZSAiYXNtL2FyY2gvbXRyci5oIgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL25hbWVpLmggYi9pbmNsdWRlL2FzbS11bS9uYW1laS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwMjk4NGQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS11bS9uYW1laS5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfX1VNX05BTUVJX0gKKyNkZWZpbmUgX19VTV9OQU1FSV9ICisKKyNpbmNsdWRlICJhc20vYXJjaC9uYW1laS5oIgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3BhZ2UuaCBiL2luY2x1ZGUvYXNtLXVtL3BhZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjIwYTA4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdW0vcGFnZS5oCkBAIC0wLDAgKzEsMTMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwMyBKZWZmIERpa2UgKGpkaWtlQGFkZHRvaXQuY29tKQorICogQ29weXJpZ2h0IDIwMDMgUGF0aFNjYWxlLCBJbmMuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMCisgKi8KKworI2lmbmRlZiBfX1VNX1BBR0VfSAorI2RlZmluZSBfX1VNX1BBR0VfSAorCitzdHJ1Y3QgcGFnZTsKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS92bS1mbGFncy5oPgorCisvKiBQQUdFX1NISUZUIGRldGVybWluZXMgdGhlIHBhZ2Ugc2l6ZSAqLworI2RlZmluZSBQQUdFX1NISUZUCTEyCisjZGVmaW5lIFBBR0VfU0laRQkoMVVMIDw8IFBBR0VfU0hJRlQpCisjZGVmaW5lIFBBR0VfTUFTSwkofihQQUdFX1NJWkUtMSkpCisKKy8qCisgKiBUaGVzZSBhcmUgdXNlZCB0byBtYWtlIHVzZSBvZiBDIHR5cGUtY2hlY2tpbmcuLgorICovCisKKyNkZWZpbmUgY2xlYXJfcGFnZShwYWdlKQltZW1zZXQoKHZvaWQgKikocGFnZSksIDAsIFBBR0VfU0laRSkKKyNkZWZpbmUgY29weV9wYWdlKHRvLGZyb20pCW1lbWNweSgodm9pZCAqKSh0byksICh2b2lkICopKGZyb20pLCBQQUdFX1NJWkUpCisKKyNkZWZpbmUgY2xlYXJfdXNlcl9wYWdlKHBhZ2UsIHZhZGRyLCBwZykJY2xlYXJfcGFnZShwYWdlKQorI2RlZmluZSBjb3B5X3VzZXJfcGFnZSh0bywgZnJvbSwgdmFkZHIsIHBnKQljb3B5X3BhZ2UodG8sIGZyb20pCisKKyNpZiBkZWZpbmVkKENPTkZJR18zX0xFVkVMX1BHVEFCTEVTKSAmJiAhZGVmaW5lZChDT05GSUdfNjRfQklUKQorCit0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgcHRlX2xvdywgcHRlX2hpZ2g7IH0gcHRlX3Q7Cit0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgbG9uZyBwbWQ7IH0gcG1kX3Q7Cit0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgcGdkOyB9IHBnZF90OworI2RlZmluZSBwdGVfdmFsKHgpICgoeCkucHRlX2xvdyB8ICgodW5zaWduZWQgbG9uZyBsb25nKSAoeCkucHRlX2hpZ2ggPDwgMzIpKQorCisjZGVmaW5lIHB0ZV9nZXRfYml0cyhwdGUsIGJpdHMpICgocHRlKS5wdGVfbG93ICYgKGJpdHMpKQorI2RlZmluZSBwdGVfc2V0X2JpdHMocHRlLCBiaXRzKSAoKHB0ZSkucHRlX2xvdyB8PSAoYml0cykpCisjZGVmaW5lIHB0ZV9jbGVhcl9iaXRzKHB0ZSwgYml0cykgKChwdGUpLnB0ZV9sb3cgJj0gfihiaXRzKSkKKyNkZWZpbmUgcHRlX2NvcHkodG8sIGZyb20pICh7ICh0bykucHRlX2hpZ2ggPSAoZnJvbSkucHRlX2hpZ2g7IFwKKwkJCSAgICAgIHNtcF93bWIoKTsgXAorCQkJICAgICAgKHRvKS5wdGVfbG93ID0gKGZyb20pLnB0ZV9sb3c7IH0pCisjZGVmaW5lIHB0ZV9pc196ZXJvKHB0ZSkgKCEoKHB0ZSkucHRlX2xvdyAmIH5fUEFHRV9ORVdQQUdFKSAmJiAhKHB0ZSkucHRlX2hpZ2gpCisjZGVmaW5lIHB0ZV9zZXRfdmFsKHB0ZSwgcGh5cywgcHJvdCkgXAorCSh7IChwdGUpLnB0ZV9oaWdoID0gKHBoeXMpID4+IDMyOyBcCisJICAgKHB0ZSkucHRlX2xvdyA9IChwaHlzKSB8IHBncHJvdF92YWwocHJvdCk7IH0pCisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHBmbl90OwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgcGh5c190OworCisjZWxzZQorCit0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgcHRlOyB9IHB0ZV90OwordHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHBnZDsgfSBwZ2RfdDsKKworI2lmZGVmIENPTkZJR18zX0xFVkVMX1BHVEFCTEVTCit0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgcG1kOyB9IHBtZF90OworI2RlZmluZSBwbWRfdmFsKHgpCSgoeCkucG1kKQorI2RlZmluZSBfX3BtZCh4KSAoKHBtZF90KSB7ICh4KSB9ICkKKyNlbmRpZgorCisjZGVmaW5lIHB0ZV92YWwoeCkJKCh4KS5wdGUpCisKKworI2RlZmluZSBwdGVfZ2V0X2JpdHMocCwgYml0cykgKChwKS5wdGUgJiAoYml0cykpCisjZGVmaW5lIHB0ZV9zZXRfYml0cyhwLCBiaXRzKSAoKHApLnB0ZSB8PSAoYml0cykpCisjZGVmaW5lIHB0ZV9jbGVhcl9iaXRzKHAsIGJpdHMpICgocCkucHRlICY9IH4oYml0cykpCisjZGVmaW5lIHB0ZV9jb3B5KHRvLCBmcm9tKSAoKHRvKS5wdGUgPSAoZnJvbSkucHRlKQorI2RlZmluZSBwdGVfaXNfemVybyhwKSAoISgocCkucHRlICYgfl9QQUdFX05FV1BBR0UpKQorI2RlZmluZSBwdGVfc2V0X3ZhbChwLCBwaHlzLCBwcm90KSAocCkucHRlID0gKHBoeXMgfCBwZ3Byb3RfdmFsKHByb3QpKQorCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgcGZuX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgcGh5c190OworCisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHBncHJvdDsgfSBwZ3Byb3RfdDsKKworI2RlZmluZSBwZ2RfdmFsKHgpCSgoeCkucGdkKQorI2RlZmluZSBwZ3Byb3RfdmFsKHgpCSgoeCkucGdwcm90KQorCisjZGVmaW5lIF9fcHRlKHgpICgocHRlX3QpIHsgKHgpIH0gKQorI2RlZmluZSBfX3BnZCh4KSAoKHBnZF90KSB7ICh4KSB9ICkKKyNkZWZpbmUgX19wZ3Byb3QoeCkJKChwZ3Byb3RfdCkgeyAoeCkgfSApCisKKy8qIHRvIGFsaWduIHRoZSBwb2ludGVyIHRvIHRoZSAobmV4dCkgcGFnZSBib3VuZGFyeSAqLworI2RlZmluZSBQQUdFX0FMSUdOKGFkZHIpCSgoKGFkZHIpK1BBR0VfU0laRS0xKSZQQUdFX01BU0spCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIHVtbF9waHlzbWVtOworCisjZGVmaW5lIFBBR0VfT0ZGU0VUICh1bWxfcGh5c21lbSkKKyNkZWZpbmUgS0VSTkVMQkFTRSBQQUdFX09GRlNFVAorCisjZGVmaW5lIF9fdmFfc3BhY2UgKDgqMTAyNCoxMDI0KQorCitleHRlcm4gdW5zaWduZWQgbG9uZyB0b19waHlzKHZvaWQgKnZpcnQpOworZXh0ZXJuIHZvaWQgKnRvX3ZpcnQodW5zaWduZWQgbG9uZyBwaHlzKTsKKyNkZWZpbmUgX19wYSh2aXJ0KSB0b19waHlzKCh2b2lkICopIHZpcnQpCisjZGVmaW5lIF9fdmEocGh5cykgdG9fdmlydCgodW5zaWduZWQgbG9uZykgcGh5cykKKworI2RlZmluZSBwYWdlX3RvX3BmbihwYWdlKSAoKHBhZ2UpIC0gbWVtX21hcCkKKyNkZWZpbmUgcGZuX3RvX3BhZ2UocGZuKSAobWVtX21hcCArIChwZm4pKQorCisjZGVmaW5lIHBoeXNfdG9fcGZuKHApICgocCkgPj4gUEFHRV9TSElGVCkKKyNkZWZpbmUgcGZuX3RvX3BoeXMocGZuKSAoKHBmbikgPDwgUEFHRV9TSElGVCkKKworI2RlZmluZSBwZm5fdmFsaWQocGZuKSAoKHBmbikgPCBtYXhfbWFwbnIpCisjZGVmaW5lIHZpcnRfYWRkcl92YWxpZCh2KSBwZm5fdmFsaWQocGh5c190b19wZm4oX19wYSh2KSkpCisKKy8qIFB1cmUgMl5uIHZlcnNpb24gb2YgZ2V0X29yZGVyICovCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgZ2V0X29yZGVyKHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlpbnQgb3JkZXI7CisKKwlzaXplID0gKHNpemUtMSkgPj4gKFBBR0VfU0hJRlQtMSk7CisJb3JkZXIgPSAtMTsKKwlkbyB7CisJCXNpemUgPj49IDE7CisJCW9yZGVyKys7CisJfSB3aGlsZSAoc2l6ZSk7CisJcmV0dXJuIG9yZGVyOworfQorCitleHRlcm4gc3RydWN0IHBhZ2UgKmFyY2hfdmFsaWRhdGUoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBtYXNrLCBpbnQgb3JkZXIpOworI2RlZmluZSBIQVZFX0FSQ0hfVkFMSURBVEUKKworZXh0ZXJuIHZvaWQgYXJjaF9mcmVlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvcmRlcik7CisjZGVmaW5lIEhBVkVfQVJDSF9GUkVFX1BBR0UKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9wYWdlX29mZnNldC5oIGIvaW5jbHVkZS9hc20tdW0vcGFnZV9vZmZzZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzE2OGRmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdW0vcGFnZV9vZmZzZXQuaApAQCAtMCwwICsxIEBACisjZGVmaW5lIFBBR0VfT0ZGU0VUX1JBVyAodW1sX3BoeXNtZW0pCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9wYXJhbS5oIGIvaW5jbHVkZS9hc20tdW0vcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTE0ZTdkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdW0vcGFyYW0uaApAQCAtMCwwICsxLDE4IEBACisjaWZuZGVmIF9VTV9QQVJBTV9ICisjZGVmaW5lIF9VTV9QQVJBTV9ICisKKyNkZWZpbmUgRVhFQ19QQUdFU0laRSAgIDQwOTYKKworI2lmbmRlZiBOT0dST1VQCisjZGVmaW5lIE5PR1JPVVAgICAgICAgICAoLTEpCisjZW5kaWYKKworI2RlZmluZSBNQVhIT1NUTkFNRUxFTiAgNjQgICAgICAvKiBtYXggbGVuZ3RoIG9mIGhvc3RuYW1lICovCisKKyNpZmRlZiBfX0tFUk5FTF9fCisjZGVmaW5lIEhaIDEwMAorI2RlZmluZSBVU0VSX0haCTEwMAkgICAvKiAuLiBzb21lIHVzZXIgaW50ZXJmYWNlcyBhcmUgaW4gInRpY2tzIiAqLworI2RlZmluZSBDTE9DS1NfUEVSX1NFQyAoVVNFUl9IWikgIC8qIGZyZXF1ZW5jeSBhdCB3aGljaCB0aW1lcygpIGNvdW50cyAqLworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vcGNpLmggYi9pbmNsdWRlL2FzbS11bS9wY2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTkyMzE5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdW0vcGNpLmgKQEAgLTAsMCArMSw3IEBACisjaWZuZGVmIF9fVU1fUENJX0gKKyNkZWZpbmUgX19VTV9QQ0lfSAorCisjZGVmaW5lIFBDSV9ETUFfQlVTX0lTX1BIWVMgICAgICgxKQorI2RlZmluZSBwY2liaW9zX3NjYW5fYWxsX2ZucyhhLCBiKQkwCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vcGRhLmggYi9pbmNsdWRlL2FzbS11bS9wZGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDhiZjMzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdW0vcGRhLmgKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAzIFBhdGhTY2FsZSwgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwKKyAqLworCisjaWZuZGVmIF9fVU1fUERBX1g4Nl82NF9ICisjZGVmaW5lIF9fVU1fUERBX1g4Nl82NF9ICisKKy8qIFhYWCAqLworc3RydWN0IGZvbyB7CisJdW5zaWduZWQgaW50IF9fc29mdGlycV9wZW5kaW5nOworCXVuc2lnbmVkIGludCBfX25taV9jb3VudDsKK307CisKK2V4dGVybiBzdHJ1Y3QgZm9vIG1lOworCisjZGVmaW5lIHJlYWRfcGRhKG1lKSAoJm1lKQorCisjZW5kaWYKKworLyoKKyAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgorICogRW1hY3Mgd2lsbCBub3RpY2UgdGhpcyBzdHVmZiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBhdXRvbWF0aWNhbGx5CisgKiBhZGp1c3QgdGhlIHNldHRpbmdzIGZvciB0aGlzIGJ1ZmZlciBvbmx5LiAgVGhpcyBtdXN0IHJlbWFpbiBhdCB0aGUgZW5kCisgKiBvZiB0aGUgZmlsZS4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogTG9jYWwgdmFyaWFibGVzOgorICogYy1maWxlLXN0eWxlOiAibGludXgiCisgKiBFbmQ6CisgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3BlcmNwdS5oIGIvaW5jbHVkZS9hc20tdW0vcGVyY3B1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTcyM2UyYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXVtL3BlcmNwdS5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfX1VNX1BFUkNQVV9ICisjZGVmaW5lIF9fVU1fUEVSQ1BVX0gKKworI2luY2x1ZGUgImFzbS9hcmNoL3BlcmNwdS5oIgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3BnYWxsb2MuaCBiL2luY2x1ZGUvYXNtLXVtL3BnYWxsb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmNiMmZjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdW0vcGdhbGxvYy5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qIAorICogQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAyIEplZmYgRGlrZSAoamRpa2VAa2FyYXlhLmNvbSkKKyAqIENvcHlyaWdodCAyMDAzIFBhdGhTY2FsZSwgSW5jLgorICogRGVyaXZlZCBmcm9tIGluY2x1ZGUvYXNtLWkzODYvcGdhbGxvYy5oIGFuZCBpbmNsdWRlL2FzbS1pMzg2L3BndGFibGUuaAorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTAorICovCisKKyNpZm5kZWYgX19VTV9QR0FMTE9DX0gKKyNkZWZpbmUgX19VTV9QR0FMTE9DX0gKKworI2luY2x1ZGUgImxpbnV4L2NvbmZpZy5oIgorI2luY2x1ZGUgImxpbnV4L21tLmgiCisjaW5jbHVkZSAiYXNtL2ZpeG1hcC5oIgorCisjZGVmaW5lIHBtZF9wb3B1bGF0ZV9rZXJuZWwobW0sIHBtZCwgcHRlKSBcCisJc2V0X3BtZChwbWQsIF9fcG1kKF9QQUdFX1RBQkxFICsgKHVuc2lnbmVkIGxvbmcpIF9fcGEocHRlKSkpCisKKyNkZWZpbmUgcG1kX3BvcHVsYXRlKG1tLCBwbWQsIHB0ZSkgCQkJCVwKKwlzZXRfcG1kKHBtZCwgX19wbWQoX1BBR0VfVEFCTEUgKwkJCVwKKwkJKCh1bnNpZ25lZCBsb25nIGxvbmcpcGFnZV90b19wZm4ocHRlKSA8PAlcCisJCQkodW5zaWduZWQgbG9uZyBsb25nKSBQQUdFX1NISUZUKSkpCisKKy8qCisgKiBBbGxvY2F0ZSBhbmQgZnJlZSBwYWdlIHRhYmxlcy4KKyAqLworZXh0ZXJuIHBnZF90ICpwZ2RfYWxsb2Moc3RydWN0IG1tX3N0cnVjdCAqKTsKK2V4dGVybiB2b2lkIHBnZF9mcmVlKHBnZF90ICpwZ2QpOworCitleHRlcm4gcHRlX3QgKnB0ZV9hbGxvY19vbmVfa2VybmVsKHN0cnVjdCBtbV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZyk7CitleHRlcm4gc3RydWN0IHBhZ2UgKnB0ZV9hbGxvY19vbmUoc3RydWN0IG1tX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nKTsKKworc3RhdGljIGlubGluZSB2b2lkIHB0ZV9mcmVlX2tlcm5lbChwdGVfdCAqcHRlKQoreworCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgcHRlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHB0ZV9mcmVlKHN0cnVjdCBwYWdlICpwdGUpCit7CisJX19mcmVlX3BhZ2UocHRlKTsKK30KKworI2RlZmluZSBfX3B0ZV9mcmVlX3RsYih0bGIscHRlKSB0bGJfcmVtb3ZlX3BhZ2UoKHRsYiksKHB0ZSkpCisKKyNpZmRlZiBDT05GSUdfM19MRVZFTF9QR1RBQkxFUworLyoKKyAqIEluIHRoZSAzLWxldmVsIGNhc2Ugd2UgZnJlZSB0aGUgcG1kcyBhcyBwYXJ0IG9mIHRoZSBwZ2QuCisgKi8KKyNkZWZpbmUgcG1kX2ZyZWUoeCkJCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIF9fcG1kX2ZyZWVfdGxiKHRsYix4KQkJZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKKyNkZWZpbmUgY2hlY2tfcGd0X2NhY2hlKCkJZG8geyB9IHdoaWxlICgwKQorCisjZW5kaWYKKworLyoKKyAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgorICogRW1hY3Mgd2lsbCBub3RpY2UgdGhpcyBzdHVmZiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBhdXRvbWF0aWNhbGx5CisgKiBhZGp1c3QgdGhlIHNldHRpbmdzIGZvciB0aGlzIGJ1ZmZlciBvbmx5LiAgVGhpcyBtdXN0IHJlbWFpbiBhdCB0aGUgZW5kCisgKiBvZiB0aGUgZmlsZS4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogTG9jYWwgdmFyaWFibGVzOgorICogYy1maWxlLXN0eWxlOiAibGludXgiCisgKiBFbmQ6CisgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3BndGFibGUtMmxldmVsLmggYi9pbmNsdWRlL2FzbS11bS9wZ3RhYmxlLTJsZXZlbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxZWIyNDcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS11bS9wZ3RhYmxlLTJsZXZlbC5oCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIgSmVmZiBEaWtlIChqZGlrZUBrYXJheWEuY29tKQorICogQ29weXJpZ2h0IDIwMDMgUGF0aFNjYWxlLCBJbmMuCisgKiBEZXJpdmVkIGZyb20gaW5jbHVkZS9hc20taTM4Ni9wZ3RhYmxlLmgKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwKKyAqLworCisjaWZuZGVmIF9fVU1fUEdUQUJMRV8yTEVWRUxfSAorI2RlZmluZSBfX1VNX1BHVEFCTEVfMkxFVkVMX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BndGFibGUtbm9wbWQuaD4KKworLyogUEdESVJfU0hJRlQgZGV0ZXJtaW5lcyB3aGF0IGEgdGhpcmQtbGV2ZWwgcGFnZSB0YWJsZSBlbnRyeSBjYW4gbWFwICovCisKKyNkZWZpbmUgUEdESVJfU0hJRlQJMjIKKyNkZWZpbmUgUEdESVJfU0laRQkoMVVMIDw8IFBHRElSX1NISUZUKQorI2RlZmluZSBQR0RJUl9NQVNLCSh+KFBHRElSX1NJWkUtMSkpCisKKy8qCisgKiBlbnRyaWVzIHBlciBwYWdlIGRpcmVjdG9yeSBsZXZlbDogdGhlIGkzODYgaXMgdHdvLWxldmVsLCBzbworICogd2UgZG9uJ3QgcmVhbGx5IGhhdmUgYW55IFBNRCBkaXJlY3RvcnkgcGh5c2ljYWxseS4KKyAqLworI2RlZmluZSBQVFJTX1BFUl9QVEUJMTAyNAorI2RlZmluZSBVU0VSX1BUUlNfUEVSX1BHRCAoKFRBU0tfU0laRSArIChQR0RJUl9TSVpFIC0gMSkpIC8gUEdESVJfU0laRSkKKyNkZWZpbmUgUFRSU19QRVJfUEdECTEwMjQKKyNkZWZpbmUgRklSU1RfVVNFUl9QR0RfTlIgICAgICAgMAorCisjZGVmaW5lIHB0ZV9FUlJPUihlKSBcCisgICAgICAgIHByaW50aygiJXM6JWQ6IGJhZCBwdGUgJXAoJTA4bHgpLlxuIiwgX19GSUxFX18sIF9fTElORV9fLCAmKGUpLCBcCisJICAgICAgIHB0ZV92YWwoZSkpCisjZGVmaW5lIHBnZF9FUlJPUihlKSBcCisgICAgICAgIHByaW50aygiJXM6JWQ6IGJhZCBwZ2QgJXAoJTA4bHgpLlxuIiwgX19GSUxFX18sIF9fTElORV9fLCAmKGUpLCBcCisJICAgICAgIHBnZF92YWwoZSkpCisKK3N0YXRpYyBpbmxpbmUgaW50IHBnZF9uZXdwYWdlKHBnZF90IHBnZCkJeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSB2b2lkIHBnZF9ta3VwdG9kYXRlKHBnZF90IHBnZCkJeyB9CisKKyNkZWZpbmUgcHRlX3ByZXNlbnQoeCkJKHB0ZV92YWwoeCkgJiAoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1BST1ROT05FKSkKKworc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtuZXdwcm90KHB0ZV90IHB0ZSkKK3sKKyAJcHRlX3ZhbChwdGUpIHw9IF9QQUdFX05FV1BST1Q7CisJcmV0dXJuKHB0ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rbmV3cGFnZShwdGVfdCBwdGUpCit7CisJcHRlX3ZhbChwdGUpIHw9IF9QQUdFX05FV1BBR0U7CisJcmV0dXJuKHB0ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcHRlKHB0ZV90ICpwdGVwdHIsIHB0ZV90IHB0ZXZhbCkKK3sKKwkvKiBJZiBpdCdzIGEgc3dhcCBlbnRyeSwgaXQgbmVlZHMgdG8gYmUgbWFya2VkIF9QQUdFX05FV1BBR0Ugc28KKwkgKiBmaXhfcmFuZ2Uga25vd3MgdG8gdW5tYXAgaXQuICBfUEFHRV9ORVdQUk9UIGlzIHNwZWNpZmljIHRvCisJICogbWFwcGVkIHBhZ2VzLgorCSAqLworCSpwdGVwdHIgPSBwdGVfbWtuZXdwYWdlKHB0ZXZhbCk7CisJaWYocHRlX3ByZXNlbnQoKnB0ZXB0cikpICpwdGVwdHIgPSBwdGVfbWtuZXdwcm90KCpwdGVwdHIpOworfQorI2RlZmluZSBzZXRfcHRlX2F0KG1tLGFkZHIscHRlcCxwdGV2YWwpIHNldF9wdGUocHRlcCxwdGV2YWwpCisKKyNkZWZpbmUgc2V0X3BtZChwbWRwdHIsIHBtZHZhbCkgKCoocG1kcHRyKSA9IChwbWR2YWwpKQorCisjZGVmaW5lIHB0ZV9wYWdlKHgpIHBmbl90b19wYWdlKHB0ZV9wZm4oeCkpCisjZGVmaW5lIHB0ZV9ub25lKHgpICEocHRlX3ZhbCh4KSAmIH5fUEFHRV9ORVdQQUdFKQorI2RlZmluZSBwdGVfcGZuKHgpIHBoeXNfdG9fcGZuKHB0ZV92YWwoeCkpCisjZGVmaW5lIHBmbl9wdGUocGZuLCBwcm90KSBfX3B0ZShwZm5fdG9fcGh5cyhwZm4pIHwgcGdwcm90X3ZhbChwcm90KSkKKyNkZWZpbmUgcGZuX3BtZChwZm4sIHByb3QpIF9fcG1kKHBmbl90b19waHlzKHBmbikgfCBwZ3Byb3RfdmFsKHByb3QpKQorCisjZGVmaW5lIHBtZF9wYWdlX2tlcm5lbChwbWQpIFwKKwkoKHVuc2lnbmVkIGxvbmcpIF9fdmEocG1kX3ZhbChwbWQpICYgUEFHRV9NQVNLKSkKKworLyoKKyAqIEJpdHMgMCB0aHJvdWdoIDMgYXJlIHRha2VuCisgKi8KKyNkZWZpbmUgUFRFX0ZJTEVfTUFYX0JJVFMJMjgKKworI2RlZmluZSBwdGVfdG9fcGdvZmYocHRlKSAocHRlX3ZhbChwdGUpID4+IDQpCisKKyNkZWZpbmUgcGdvZmZfdG9fcHRlKG9mZikgKChwdGVfdCkgeyAoKG9mZikgPDwgNCkgKyBfUEFHRV9GSUxFIH0pCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vcGd0YWJsZS0zbGV2ZWwuaCBiL2luY2x1ZGUvYXNtLXVtL3BndGFibGUtM2xldmVsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFmMDUxYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXVtL3BndGFibGUtM2xldmVsLmgKQEAgLTAsMCArMSwxNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMyBQYXRoU2NhbGUgSW5jCisgKiBEZXJpdmVkIGZyb20gaW5jbHVkZS9hc20taTM4Ni9wZ3RhYmxlLmgKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwKKyAqLworCisjaWZuZGVmIF9fVU1fUEdUQUJMRV8zTEVWRUxfSAorI2RlZmluZSBfX1VNX1BHVEFCTEVfM0xFVkVMX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BndGFibGUtbm9wdWQuaD4KKworLyogUEdESVJfU0hJRlQgZGV0ZXJtaW5lcyB3aGF0IGEgdGhpcmQtbGV2ZWwgcGFnZSB0YWJsZSBlbnRyeSBjYW4gbWFwICovCisKKyNkZWZpbmUgUEdESVJfU0hJRlQJMzAKKyNkZWZpbmUgUEdESVJfU0laRQkoMVVMIDw8IFBHRElSX1NISUZUKQorI2RlZmluZSBQR0RJUl9NQVNLCSh+KFBHRElSX1NJWkUtMSkpCisKKy8qIFBNRF9TSElGVCBkZXRlcm1pbmVzIHRoZSBzaXplIG9mIHRoZSBhcmVhIGEgc2Vjb25kLWxldmVsIHBhZ2UgdGFibGUgY2FuCisgKiBtYXAKKyAqLworCisjZGVmaW5lIFBNRF9TSElGVAkyMQorI2RlZmluZSBQTURfU0laRQkoMVVMIDw8IFBNRF9TSElGVCkKKyNkZWZpbmUgUE1EX01BU0sJKH4oUE1EX1NJWkUtMSkpCisKKy8qCisgKiBlbnRyaWVzIHBlciBwYWdlIGRpcmVjdG9yeSBsZXZlbAorICovCisKKyNkZWZpbmUgUFRSU19QRVJfUFRFIDUxMgorI2RlZmluZSBQVFJTX1BFUl9QTUQgNTEyCisjZGVmaW5lIFVTRVJfUFRSU19QRVJfUEdEICgoVEFTS19TSVpFICsgKFBHRElSX1NJWkUgLSAxKSkgLyBQR0RJUl9TSVpFKQorI2RlZmluZSBQVFJTX1BFUl9QR0QgNTEyCisjZGVmaW5lIEZJUlNUX1VTRVJfUEdEX05SICAgICAgIDAKKworI2RlZmluZSBwdGVfRVJST1IoZSkgXAorICAgICAgICBwcmludGsoIiVzOiVkOiBiYWQgcHRlICVwKCUwMTZseCkuXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sICYoZSksIFwKKwkgICAgICAgcHRlX3ZhbChlKSkKKyNkZWZpbmUgcG1kX0VSUk9SKGUpIFwKKyAgICAgICAgcHJpbnRrKCIlczolZDogYmFkIHBtZCAlcCglMDE2bHgpLlxuIiwgX19GSUxFX18sIF9fTElORV9fLCAmKGUpLCBcCisJICAgICAgIHBtZF92YWwoZSkpCisjZGVmaW5lIHBnZF9FUlJPUihlKSBcCisgICAgICAgIHByaW50aygiJXM6JWQ6IGJhZCBwZ2QgJXAoJTAxNmx4KS5cbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgJihlKSwgXAorCSAgICAgICBwZ2RfdmFsKGUpKQorCisjZGVmaW5lIHB1ZF9ub25lKHgpCSghKHB1ZF92YWwoeCkgJiB+X1BBR0VfTkVXUEFHRSkpCisjZGVmaW5lCXB1ZF9iYWQoeCkJKChwdWRfdmFsKHgpICYgKH5QQUdFX01BU0sgJiB+X1BBR0VfVVNFUikpICE9IF9LRVJOUEdfVEFCTEUpCisjZGVmaW5lIHB1ZF9wcmVzZW50KHgpCShwdWRfdmFsKHgpICYgX1BBR0VfUFJFU0VOVCkKKyNkZWZpbmUgcHVkX3BvcHVsYXRlKG1tLCBwdWQsIHBtZCkgXAorCXNldF9wdWQocHVkLCBfX3B1ZChfUEFHRV9UQUJMRSArIF9fcGEocG1kKSkpCisKKyNkZWZpbmUgc2V0X3B1ZChwdWRwdHIsIHB1ZHZhbCkgc2V0XzY0Yml0KChwaHlzX3QgKikgKHB1ZHB0ciksIHB1ZF92YWwocHVkdmFsKSkKK3N0YXRpYyBpbmxpbmUgaW50IHBnZF9uZXdwYWdlKHBnZF90IHBnZCkKK3sKKwlyZXR1cm4ocGdkX3ZhbChwZ2QpICYgX1BBR0VfTkVXUEFHRSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwZ2RfbWt1cHRvZGF0ZShwZ2RfdCBwZ2QpIHsgcGdkX3ZhbChwZ2QpICY9IH5fUEFHRV9ORVdQQUdFOyB9CisKKworI2RlZmluZSBwdGVfcHJlc2VudCh4KQlwdGVfZ2V0X2JpdHMoeCwgKF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9QUk9UTk9ORSkpCisKK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rbmV3cHJvdChwdGVfdCBwdGUpCit7CisgICAgICAgIHB0ZV9zZXRfYml0cyhwdGUsIF9QQUdFX05FV1BST1QpOworCXJldHVybihwdGUpOworfQorCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta25ld3BhZ2UocHRlX3QgcHRlKQoreworCXB0ZV9zZXRfYml0cyhwdGUsIF9QQUdFX05FV1BBR0UpOworCXJldHVybihwdGUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3B0ZShwdGVfdCAqcHRlcHRyLCBwdGVfdCBwdGV2YWwpCit7CisJcHRlX2NvcHkoKnB0ZXB0ciwgcHRldmFsKTsKKworCS8qIElmIGl0J3MgYSBzd2FwIGVudHJ5LCBpdCBuZWVkcyB0byBiZSBtYXJrZWQgX1BBR0VfTkVXUEFHRSBzbworCSAqIGZpeF9yYW5nZSBrbm93cyB0byB1bm1hcCBpdC4gIF9QQUdFX05FV1BST1QgaXMgc3BlY2lmaWMgdG8KKwkgKiBtYXBwZWQgcGFnZXMuCisJICovCisKKwkqcHRlcHRyID0gcHRlX21rbmV3cGFnZSgqcHRlcHRyKTsKKwlpZihwdGVfcHJlc2VudCgqcHRlcHRyKSkgKnB0ZXB0ciA9IHB0ZV9ta25ld3Byb3QoKnB0ZXB0cik7Cit9CisjZGVmaW5lIHNldF9wdGVfYXQobW0sYWRkcixwdGVwLHB0ZXZhbCkgc2V0X3B0ZShwdGVwLHB0ZXZhbCkKKworI2RlZmluZSBzZXRfcG1kKHBtZHB0ciwgcG1kdmFsKSBzZXRfNjRiaXQoKHBoeXNfdCAqKSAocG1kcHRyKSwgcG1kX3ZhbChwbWR2YWwpKQorCitzdGF0aWMgaW5saW5lIHBtZF90ICpwbWRfYWxsb2Nfb25lKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisgICAgICAgIHBtZF90ICpwbWQgPSAocG1kX3QgKikgX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpOworCisgICAgICAgIGlmKHBtZCkKKyAgICAgICAgICAgICAgICBtZW1zZXQocG1kLCAwLCBQQUdFX1NJWkUpOworCisgICAgICAgIHJldHVybiBwbWQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwbWRfZnJlZShwbWRfdCAqcG1kKXsKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIHBtZCk7Cit9CisKKyNkZWZpbmUgX19wbWRfZnJlZV90bGIodGxiLHgpICAgZG8geyB9IHdoaWxlICgwKQorCitzdGF0aWMgaW5saW5lIHZvaWQgcHVkX2NsZWFyIChwdWRfdCAqIHB1ZCkgeyB9CisKKyNkZWZpbmUgcHVkX3BhZ2UocHVkKSBcCisJKChzdHJ1Y3QgcGFnZSAqKSBfX3ZhKHB1ZF92YWwocHVkKSAmIFBBR0VfTUFTSykpCisKKy8qIEZpbmQgYW4gZW50cnkgaW4gdGhlIHNlY29uZC1sZXZlbCBwYWdlIHRhYmxlLi4gKi8KKyNkZWZpbmUgcG1kX29mZnNldChwdWQsIGFkZHJlc3MpICgocG1kX3QgKikgcHVkX3BhZ2UoKihwdWQpKSArIFwKKwkJCXBtZF9pbmRleChhZGRyZXNzKSkKKworI2RlZmluZSBwdGVfcGFnZSh4KSBwZm5fdG9fcGFnZShwdGVfcGZuKHgpKQorCitzdGF0aWMgaW5saW5lIGludCBwdGVfbm9uZShwdGVfdCBwdGUpCit7CisJcmV0dXJuIHB0ZV9pc196ZXJvKHB0ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwdGVfcGZuKHB0ZV90IHB0ZSkKK3sKKwlyZXR1cm4gcGh5c190b19wZm4ocHRlX3ZhbChwdGUpKTsKK30KKworc3RhdGljIGlubGluZSBwdGVfdCBwZm5fcHRlKHBmbl90IHBhZ2VfbnIsIHBncHJvdF90IHBncHJvdCkKK3sKKwlwdGVfdCBwdGU7CisJcGh5c190IHBoeXMgPSBwZm5fdG9fcGh5cyhwYWdlX25yKTsKKworCXB0ZV9zZXRfdmFsKHB0ZSwgcGh5cywgcGdwcm90KTsKKwlyZXR1cm4gcHRlOworfQorCitzdGF0aWMgaW5saW5lIHBtZF90IHBmbl9wbWQocGZuX3QgcGFnZV9uciwgcGdwcm90X3QgcGdwcm90KQoreworCXJldHVybiBfX3BtZCgocGFnZV9uciA8PCBQQUdFX1NISUZUKSB8IHBncHJvdF92YWwocGdwcm90KSk7Cit9CisKKy8qCisgKiBCaXRzIDAgdGhyb3VnaCAzIGFyZSB0YWtlbiBpbiB0aGUgbG93IHBhcnQgb2YgdGhlIHB0ZSwKKyAqIHB1dCB0aGUgMzIgYml0cyBvZiBvZmZzZXQgaW50byB0aGUgaGlnaCBwYXJ0LgorICovCisjZGVmaW5lIFBURV9GSUxFX01BWF9CSVRTCTMyCisKKyNpZmRlZiBDT05GSUdfNjRfQklUCisKKyNkZWZpbmUgcHRlX3RvX3Bnb2ZmKHApICgocCkucHRlID4+IDMyKQorCisjZGVmaW5lIHBnb2ZmX3RvX3B0ZShvZmYpICgocHRlX3QpIHsgKChvZmYpIDwgMzIpIHwgX1BBR0VfRklMRSB9KQorCisjZWxzZQorCisjZGVmaW5lIHB0ZV90b19wZ29mZihwdGUpICgocHRlKS5wdGVfaGlnaCkKKworI2RlZmluZSBwZ29mZl90b19wdGUob2ZmKSAoKHB0ZV90KSB7IF9QQUdFX0ZJTEUsIChvZmYpIH0pCisKKyNlbmRpZgorCisjZW5kaWYKKworLyoKKyAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgorICogRW1hY3Mgd2lsbCBub3RpY2UgdGhpcyBzdHVmZiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBhdXRvbWF0aWNhbGx5CisgKiBhZGp1c3QgdGhlIHNldHRpbmdzIGZvciB0aGlzIGJ1ZmZlciBvbmx5LiAgVGhpcyBtdXN0IHJlbWFpbiBhdCB0aGUgZW5kCisgKiBvZiB0aGUgZmlsZS4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogTG9jYWwgdmFyaWFibGVzOgorICogYy1maWxlLXN0eWxlOiAibGludXgiCisgKiBFbmQ6CisgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLXVtL3BndGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWY5YzBjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdW0vcGd0YWJsZS5oCkBAIC0wLDAgKzEsMzg2IEBACisvKiAKKyAqIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSwgMjAwMiBKZWZmIERpa2UgKGpkaWtlQGthcmF5YS5jb20pCisgKiBDb3B5cmlnaHQgMjAwMyBQYXRoU2NhbGUsIEluYy4KKyAqIERlcml2ZWQgZnJvbSBpbmNsdWRlL2FzbS1pMzg2L3BndGFibGUuaAorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTAorICovCisKKyNpZm5kZWYgX19VTV9QR1RBQkxFX0gKKyNkZWZpbmUgX19VTV9QR1RBQkxFX0gKKworI2luY2x1ZGUgImxpbnV4L3NjaGVkLmgiCisjaW5jbHVkZSAibGludXgvbGlua2FnZS5oIgorI2luY2x1ZGUgImFzbS9wcm9jZXNzb3IuaCIKKyNpbmNsdWRlICJhc20vcGFnZS5oIgorI2luY2x1ZGUgImFzbS9maXhtYXAuaCIKKworI2RlZmluZSBfUEFHRV9QUkVTRU5UCTB4MDAxCisjZGVmaW5lIF9QQUdFX05FV1BBR0UJMHgwMDIKKyNkZWZpbmUgX1BBR0VfTkVXUFJPVCAgIDB4MDA0CisjZGVmaW5lIF9QQUdFX0ZJTEUJMHgwMDggICAvKiBzZXQ6cGFnZWNhY2hlIHVuc2V0OnN3YXAgKi8KKyNkZWZpbmUgX1BBR0VfUFJPVE5PTkUJMHgwMTAJLyogSWYgbm90IHByZXNlbnQgKi8KKyNkZWZpbmUgX1BBR0VfUlcJMHgwMjAKKyNkZWZpbmUgX1BBR0VfVVNFUgkweDA0MAorI2RlZmluZSBfUEFHRV9BQ0NFU1NFRAkweDA4MAorI2RlZmluZSBfUEFHRV9ESVJUWQkweDEwMAorCisjaWZkZWYgQ09ORklHXzNfTEVWRUxfUEdUQUJMRVMKKyNpbmNsdWRlICJhc20vcGd0YWJsZS0zbGV2ZWwuaCIKKyNlbHNlCisjaW5jbHVkZSAiYXNtL3BndGFibGUtMmxldmVsLmgiCisjZW5kaWYKKworZXh0ZXJuIHBnZF90IHN3YXBwZXJfcGdfZGlyW1BUUlNfUEVSX1BHRF07CisKK2V4dGVybiB2b2lkICp1bV92aXJ0X3RvX3BoeXMoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB1bnNpZ25lZCBsb25nIHZpcnQsCisJCQkgICAgIHB0ZV90ICpwdGVfb3V0KTsKKworLyogemVybyBwYWdlIHVzZWQgZm9yIHVuaW5pdGlhbGl6ZWQgc3R1ZmYgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nICplbXB0eV96ZXJvX3BhZ2U7CisKKyNkZWZpbmUgcGd0YWJsZV9jYWNoZV9pbml0KCkgZG8gOyB3aGlsZSAoMCkKKworLyoKKyAqIHBnZCBlbnRyaWVzIHVzZWQgdXAgYnkgdXNlci9rZXJuZWw6CisgKi8KKworI2RlZmluZSBVU0VSX1BHRF9QVFJTIChUQVNLX1NJWkUgPj4gUEdESVJfU0hJRlQpCisjZGVmaW5lIEtFUk5FTF9QR0RfUFRSUyAoUFRSU19QRVJfUEdELVVTRVJfUEdEX1BUUlMpCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisvKiBKdXN0IGFueSBhcmJpdHJhcnkgb2Zmc2V0IHRvIHRoZSBzdGFydCBvZiB0aGUgdm1hbGxvYyBWTSBhcmVhOiB0aGUKKyAqIGN1cnJlbnQgOE1CIHZhbHVlIGp1c3QgbWVhbnMgdGhhdCB0aGVyZSB3aWxsIGJlIGEgOE1CICJob2xlIiBhZnRlciB0aGUKKyAqIHBoeXNpY2FsIG1lbW9yeSB1bnRpbCB0aGUga2VybmVsIHZpcnR1YWwgbWVtb3J5IHN0YXJ0cy4gIFRoYXQgbWVhbnMgdGhhdAorICogYW55IG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIHdpbGwgaG9wZWZ1bGx5IGJlIGNhdWdodC4KKyAqIFRoZSB2bWFsbG9jKCkgcm91dGluZXMgbGVhdmVzIGEgaG9sZSBvZiA0a0IgYmV0d2VlbiBlYWNoIHZtYWxsb2NlZAorICogYXJlYSBmb3IgdGhlIHNhbWUgcmVhc29uLiA7KQorICovCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIGVuZF9pb21lbTsKKworI2RlZmluZSBWTUFMTE9DX09GRlNFVAkoX192YV9zcGFjZSkKKyNkZWZpbmUgVk1BTExPQ19TVEFSVCAoKGVuZF9pb21lbSArIFZNQUxMT0NfT0ZGU0VUKSAmIH4oVk1BTExPQ19PRkZTRVQtMSkpCisKKyNpZmRlZiBDT05GSUdfSElHSE1FTQorIyBkZWZpbmUgVk1BTExPQ19FTkQJKFBLTUFQX0JBU0UtMipQQUdFX1NJWkUpCisjZWxzZQorIyBkZWZpbmUgVk1BTExPQ19FTkQJKEZJWEFERFJfU1RBUlQtMipQQUdFX1NJWkUpCisjZW5kaWYKKworI2RlZmluZSBSRUdJT05fU0hJRlQJKHNpemVvZihwdGVfdCkgKiA4IC0gNCkKKyNkZWZpbmUgUkVHSU9OX01BU0sJKCgodW5zaWduZWQgbG9uZykgMHhmKSA8PCBSRUdJT05fU0hJRlQpCisKKyNkZWZpbmUgX1BBR0VfVEFCTEUJKF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SVyB8IF9QQUdFX1VTRVIgfCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX0RJUlRZKQorI2RlZmluZSBfS0VSTlBHX1RBQkxFCShfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUlcgfCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX0RJUlRZKQorI2RlZmluZSBfUEFHRV9DSEdfTUFTSwkoUEFHRV9NQVNLIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9ESVJUWSkKKworI2RlZmluZSBQQUdFX05PTkUJX19wZ3Byb3QoX1BBR0VfUFJPVE5PTkUgfCBfUEFHRV9BQ0NFU1NFRCkKKyNkZWZpbmUgUEFHRV9TSEFSRUQJX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JXIHwgX1BBR0VfVVNFUiB8IF9QQUdFX0FDQ0VTU0VEKQorI2RlZmluZSBQQUdFX0NPUFkJX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1VTRVIgfCBfUEFHRV9BQ0NFU1NFRCkKKyNkZWZpbmUgUEFHRV9SRUFET05MWQlfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfVVNFUiB8IF9QQUdFX0FDQ0VTU0VEKQorI2RlZmluZSBQQUdFX0tFUk5FTAlfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUlcgfCBfUEFHRV9ESVJUWSB8IF9QQUdFX0FDQ0VTU0VEKQorI2RlZmluZSBQQUdFX0tFUk5FTF9STwlfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfRElSVFkgfCBfUEFHRV9BQ0NFU1NFRCkKKworLyoKKyAqIFRoZSBpMzg2IGNhbid0IGRvIHBhZ2UgcHJvdGVjdGlvbiBmb3IgZXhlY3V0ZSwgYW5kIGNvbnNpZGVycyB0aGF0IHRoZSBzYW1lIGFyZSByZWFkLgorICogQWxzbywgd3JpdGUgcGVybWlzc2lvbnMgaW1wbHkgcmVhZCBwZXJtaXNzaW9ucy4gVGhpcyBpcyB0aGUgY2xvc2VzdCB3ZSBjYW4gZ2V0Li4KKyAqLworI2RlZmluZSBfX1AwMDAJUEFHRV9OT05FCisjZGVmaW5lIF9fUDAwMQlQQUdFX1JFQURPTkxZCisjZGVmaW5lIF9fUDAxMAlQQUdFX0NPUFkKKyNkZWZpbmUgX19QMDExCVBBR0VfQ09QWQorI2RlZmluZSBfX1AxMDAJUEFHRV9SRUFET05MWQorI2RlZmluZSBfX1AxMDEJUEFHRV9SRUFET05MWQorI2RlZmluZSBfX1AxMTAJUEFHRV9DT1BZCisjZGVmaW5lIF9fUDExMQlQQUdFX0NPUFkKKworI2RlZmluZSBfX1MwMDAJUEFHRV9OT05FCisjZGVmaW5lIF9fUzAwMQlQQUdFX1JFQURPTkxZCisjZGVmaW5lIF9fUzAxMAlQQUdFX1NIQVJFRAorI2RlZmluZSBfX1MwMTEJUEFHRV9TSEFSRUQKKyNkZWZpbmUgX19TMTAwCVBBR0VfUkVBRE9OTFkKKyNkZWZpbmUgX19TMTAxCVBBR0VfUkVBRE9OTFkKKyNkZWZpbmUgX19TMTEwCVBBR0VfU0hBUkVECisjZGVmaW5lIF9fUzExMQlQQUdFX1NIQVJFRAorCisvKgorICogRGVmaW5lIHRoaXMgaWYgdGhpbmdzIHdvcmsgZGlmZmVyZW50bHkgb24gYW4gaTM4NiBhbmQgYW4gaTQ4NjoKKyAqIGl0IHdpbGwgKG9uIGFuIGk0ODYpIHdhcm4gYWJvdXQga2VybmVsIG1lbW9yeSBhY2Nlc3NlcyB0aGF0IGFyZQorICogZG9uZSB3aXRob3V0IGEgJ3ZlcmlmeV9hcmVhKFZFUklGWV9XUklURSwuLiknCisgKi8KKyN1bmRlZiBURVNUX1ZFUklGWV9BUkVBCisKKy8qIHBhZ2UgdGFibGUgZm9yIDAtNE1CIGZvciBldmVyeWJvZHkgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIHBnMFsxMDI0XTsKKworLyoKKyAqIEJBRF9QQUdFVEFCTEUgaXMgdXNlZCB3aGVuIHdlIG5lZWQgYSBib2d1cyBwYWdlLXRhYmxlLCB3aGlsZQorICogQkFEX1BBR0UgaXMgdXNlZCBmb3IgYSBib2d1cyBwYWdlLgorICoKKyAqIFpFUk9fUEFHRSBpcyBhIGdsb2JhbCBzaGFyZWQgcGFnZSB0aGF0IGlzIGFsd2F5cyB6ZXJvOiB1c2VkCisgKiBmb3IgemVyby1tYXBwZWQgbWVtb3J5IGFyZWFzIGV0Yy4uCisgKi8KK2V4dGVybiBwdGVfdCBfX2JhZF9wYWdlKHZvaWQpOworZXh0ZXJuIHB0ZV90ICogX19iYWRfcGFnZXRhYmxlKHZvaWQpOworCisjZGVmaW5lIEJBRF9QQUdFVEFCTEUgX19iYWRfcGFnZXRhYmxlKCkKKyNkZWZpbmUgQkFEX1BBR0UgX19iYWRfcGFnZSgpCisKKyNkZWZpbmUgWkVST19QQUdFKHZhZGRyKSB2aXJ0X3RvX3BhZ2UoZW1wdHlfemVyb19wYWdlKQorCisvKiBudW1iZXIgb2YgYml0cyB0aGF0IGZpdCBpbnRvIGEgbWVtb3J5IHBvaW50ZXIgKi8KKyNkZWZpbmUgQklUU19QRVJfUFRSCQkJKDgqc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKQorCisvKiB0byBhbGlnbiB0aGUgcG9pbnRlciB0byBhIHBvaW50ZXIgYWRkcmVzcyAqLworI2RlZmluZSBQVFJfTUFTSwkJCSh+KHNpemVvZih2b2lkKiktMSkpCisKKy8qIHNpemVvZih2b2lkKik9PTE8PFNJWkVPRl9QVFJfTE9HMiAqLworLyogNjQtYml0IG1hY2hpbmVzLCBiZXdhcmUhICBTUkIuICovCisjZGVmaW5lIFNJWkVPRl9QVFJfTE9HMgkJCTMKKworLyogdG8gZmluZCBhbiBlbnRyeSBpbiBhIHBhZ2UtdGFibGUgKi8KKyNkZWZpbmUgUEFHRV9QVFIoYWRkcmVzcykgXAorKCh1bnNpZ25lZCBsb25nKShhZGRyZXNzKT4+KFBBR0VfU0hJRlQtU0laRU9GX1BUUl9MT0cyKSZQVFJfTUFTSyZ+UEFHRV9NQVNLKQorCisjZGVmaW5lIHB0ZV9jbGVhcihtbSxhZGRyLHhwKSBwdGVfc2V0X3ZhbCgqKHhwKSwgKHBoeXNfdCkgMCwgX19wZ3Byb3QoX1BBR0VfTkVXUEFHRSkpCisKKyNkZWZpbmUgcG1kX25vbmUoeCkJKCEocG1kX3ZhbCh4KSAmIH5fUEFHRV9ORVdQQUdFKSkKKyNkZWZpbmUJcG1kX2JhZCh4KQkoKHBtZF92YWwoeCkgJiAoflBBR0VfTUFTSyAmIH5fUEFHRV9VU0VSKSkgIT0gX0tFUk5QR19UQUJMRSkKKyNkZWZpbmUgcG1kX3ByZXNlbnQoeCkJKHBtZF92YWwoeCkgJiBfUEFHRV9QUkVTRU5UKQorI2RlZmluZSBwbWRfY2xlYXIoeHApCWRvIHsgcG1kX3ZhbCgqKHhwKSkgPSBfUEFHRV9ORVdQQUdFOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIHBtZF9uZXdwYWdlKHgpICAocG1kX3ZhbCh4KSAmIF9QQUdFX05FV1BBR0UpCisjZGVmaW5lIHBtZF9ta3VwdG9kYXRlKHgpIChwbWRfdmFsKHgpICY9IH5fUEFHRV9ORVdQQUdFKQorCisjZGVmaW5lIHB1ZF9uZXdwYWdlKHgpICAocHVkX3ZhbCh4KSAmIF9QQUdFX05FV1BBR0UpCisjZGVmaW5lIHB1ZF9ta3VwdG9kYXRlKHgpIChwdWRfdmFsKHgpICY9IH5fUEFHRV9ORVdQQUdFKQorCisjZGVmaW5lIHBhZ2VzX3RvX21iKHgpICgoeCkgPj4gKDIwLVBBR0VfU0hJRlQpKQorCisjZGVmaW5lIHBtZF9wYWdlKHBtZCkgcGh5c190b19wYWdlKHBtZF92YWwocG1kKSAmIFBBR0VfTUFTSykKKworI2RlZmluZSBwdGVfYWRkcmVzcyh4KSAoX192YShwdGVfdmFsKHgpICYgUEFHRV9NQVNLKSkKKyNkZWZpbmUgbWtfcGh5cyhhLCByKSAoKGEpICsgKCgodW5zaWduZWQgbG9uZykgcikgPDwgUkVHSU9OX1NISUZUKSkKKyNkZWZpbmUgcGh5c19hZGRyKHApICgocCkgJiB+UkVHSU9OX01BU0spCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIG9ubHkgd29yayBpZiBwdGVfcHJlc2VudCgpIGlzIHRydWUuCisgKiBVbmRlZmluZWQgYmVoYXZpb3VyIGlmIG5vdC4uCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV91c2VyKHB0ZV90IHB0ZSkKK3sKKwlyZXR1cm4oKHB0ZV9nZXRfYml0cyhwdGUsIF9QQUdFX1VTRVIpKSAmJgorCSAgICAgICAhKHB0ZV9nZXRfYml0cyhwdGUsIF9QQUdFX1BST1ROT05FKSkpOworfQorCitzdGF0aWMgaW5saW5lIGludCBwdGVfcmVhZChwdGVfdCBwdGUpCit7IAorCXJldHVybigocHRlX2dldF9iaXRzKHB0ZSwgX1BBR0VfVVNFUikpICYmCisJICAgICAgICEocHRlX2dldF9iaXRzKHB0ZSwgX1BBR0VfUFJPVE5PTkUpKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9leGVjKHB0ZV90IHB0ZSl7CisJcmV0dXJuKChwdGVfZ2V0X2JpdHMocHRlLCBfUEFHRV9VU0VSKSkgJiYKKwkgICAgICAgIShwdGVfZ2V0X2JpdHMocHRlLCBfUEFHRV9QUk9UTk9ORSkpKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcHRlX3dyaXRlKHB0ZV90IHB0ZSkKK3sKKwlyZXR1cm4oKHB0ZV9nZXRfYml0cyhwdGUsIF9QQUdFX1JXKSkgJiYKKwkgICAgICAgIShwdGVfZ2V0X2JpdHMocHRlLCBfUEFHRV9QUk9UTk9ORSkpKTsKK30KKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgb25seSB3b3JrcyBpZiBwdGVfcHJlc2VudCgpIGlzIG5vdCB0cnVlLgorICovCitzdGF0aWMgaW5saW5lIGludCBwdGVfZmlsZShwdGVfdCBwdGUpCit7CisJcmV0dXJuIHB0ZV9nZXRfYml0cyhwdGUsIF9QQUdFX0ZJTEUpOworfQorCitzdGF0aWMgaW5saW5lIGludCBwdGVfZGlydHkocHRlX3QgcHRlKQoreworCXJldHVybiBwdGVfZ2V0X2JpdHMocHRlLCBfUEFHRV9ESVJUWSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV95b3VuZyhwdGVfdCBwdGUpCit7CisJcmV0dXJuIHB0ZV9nZXRfYml0cyhwdGUsIF9QQUdFX0FDQ0VTU0VEKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcHRlX25ld3BhZ2UocHRlX3QgcHRlKQoreworCXJldHVybiBwdGVfZ2V0X2JpdHMocHRlLCBfUEFHRV9ORVdQQUdFKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcHRlX25ld3Byb3QocHRlX3QgcHRlKQoreyAKKwlyZXR1cm4ocHRlX3ByZXNlbnQocHRlKSAmJiAocHRlX2dldF9iaXRzKHB0ZSwgX1BBR0VfTkVXUFJPVCkpKTsKK30KKworc3RhdGljIGlubGluZSBwdGVfdCBwdGVfcmRwcm90ZWN0KHB0ZV90IHB0ZSkKK3sgCisJcHRlX2NsZWFyX2JpdHMocHRlLCBfUEFHRV9VU0VSKTsKKwlyZXR1cm4ocHRlX21rbmV3cHJvdChwdGUpKTsKK30KKworc3RhdGljIGlubGluZSBwdGVfdCBwdGVfZXhwcm90ZWN0KHB0ZV90IHB0ZSkKK3sgCisJcHRlX2NsZWFyX2JpdHMocHRlLCBfUEFHRV9VU0VSKTsKKwlyZXR1cm4ocHRlX21rbmV3cHJvdChwdGUpKTsKK30KKworc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtjbGVhbihwdGVfdCBwdGUpCit7CisJcHRlX2NsZWFyX2JpdHMocHRlLCBfUEFHRV9ESVJUWSk7CisJcmV0dXJuKHB0ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rb2xkKHB0ZV90IHB0ZSkJCit7IAorCXB0ZV9jbGVhcl9iaXRzKHB0ZSwgX1BBR0VfQUNDRVNTRUQpOworCXJldHVybihwdGUpOworfQorCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV93cnByb3RlY3QocHRlX3QgcHRlKQoreyAKKwlwdGVfY2xlYXJfYml0cyhwdGUsIF9QQUdFX1JXKTsKKwlyZXR1cm4ocHRlX21rbmV3cHJvdChwdGUpKTsgCit9CisKK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rcmVhZChwdGVfdCBwdGUpCit7IAorCXB0ZV9zZXRfYml0cyhwdGUsIF9QQUdFX1JXKTsKKwlyZXR1cm4ocHRlX21rbmV3cHJvdChwdGUpKTsgCit9CisKK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rZXhlYyhwdGVfdCBwdGUpCit7IAorCXB0ZV9zZXRfYml0cyhwdGUsIF9QQUdFX1VTRVIpOworCXJldHVybihwdGVfbWtuZXdwcm90KHB0ZSkpOyAKK30KKworc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtkaXJ0eShwdGVfdCBwdGUpCit7IAorCXB0ZV9zZXRfYml0cyhwdGUsIF9QQUdFX0RJUlRZKTsKKwlyZXR1cm4ocHRlKTsKK30KKworc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt5b3VuZyhwdGVfdCBwdGUpCit7CisJcHRlX3NldF9iaXRzKHB0ZSwgX1BBR0VfQUNDRVNTRUQpOworCXJldHVybihwdGUpOworfQorCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSkJCit7CisJcHRlX3NldF9iaXRzKHB0ZSwgX1BBR0VfUlcpOworCXJldHVybihwdGVfbWtuZXdwcm90KHB0ZSkpOyAKK30KKworc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt1cHRvZGF0ZShwdGVfdCBwdGUpCQoreworCXB0ZV9jbGVhcl9iaXRzKHB0ZSwgX1BBR0VfTkVXUEFHRSk7CisJaWYocHRlX3ByZXNlbnQocHRlKSkKKwkJcHRlX2NsZWFyX2JpdHMocHRlLCBfUEFHRV9ORVdQUk9UKTsKKwlyZXR1cm4ocHRlKTsgCit9CisKK2V4dGVybiBwaHlzX3QgcGFnZV90b19waHlzKHN0cnVjdCBwYWdlICpwYWdlKTsKKworLyoKKyAqIENvbnZlcnNpb24gZnVuY3Rpb25zOiBjb252ZXJ0IGEgcGFnZSBhbmQgcHJvdGVjdGlvbiB0byBhIHBhZ2UgZW50cnksCisgKiBhbmQgYSBwYWdlIGVudHJ5IGFuZCBwYWdlIGRpcmVjdG9yeSB0byB0aGUgcGFnZSB0aGV5IHJlZmVyIHRvLgorICovCisKK2V4dGVybiBwdGVfdCBta19wdGUoc3RydWN0IHBhZ2UgKnBhZ2UsIHBncHJvdF90IHBncHJvdCk7CisKK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21vZGlmeShwdGVfdCBwdGUsIHBncHJvdF90IG5ld3Byb3QpCit7CisJcHRlX3NldF92YWwocHRlLCAocHRlX3ZhbChwdGUpICYgX1BBR0VfQ0hHX01BU0spLCBuZXdwcm90KTsKKwlpZihwdGVfcHJlc2VudChwdGUpKSBwdGUgPSBwdGVfbWtuZXdwYWdlKHB0ZV9ta25ld3Byb3QocHRlKSk7CisJcmV0dXJuIHB0ZTsgCit9CisKKyNkZWZpbmUgcG1kX3BhZ2Vfa2VybmVsKHBtZCkgKCh1bnNpZ25lZCBsb25nKSBfX3ZhKHBtZF92YWwocG1kKSAmIFBBR0VfTUFTSykpCisKKy8qCisgKiB0aGUgcGdkIHBhZ2UgY2FuIGJlIHRob3VnaHQgb2YgYW4gYXJyYXkgbGlrZSB0aGlzOiBwZ2RfdFtQVFJTX1BFUl9QR0RdCisgKgorICogdGhpcyBtYWNybyByZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgZW50cnkgaW4gdGhlIHBnZCBwYWdlIHdoaWNoIHdvdWxkCisgKiBjb250cm9sIHRoZSBnaXZlbiB2aXJ0dWFsIGFkZHJlc3MKKyAqLworI2RlZmluZSBwZ2RfaW5kZXgoYWRkcmVzcykgKCgoYWRkcmVzcykgPj4gUEdESVJfU0hJRlQpICYgKFBUUlNfUEVSX1BHRC0xKSkKKworI2RlZmluZSBwZ2RfaW5kZXhfayhhZGRyKSBwZ2RfaW5kZXgoYWRkcikKKworLyoKKyAqIHBnZF9vZmZzZXQoKSByZXR1cm5zIGEgKHBnZF90ICopCisgKiBwZ2RfaW5kZXgoKSBpcyB1c2VkIGdldCB0aGUgb2Zmc2V0IGludG8gdGhlIHBnZCBwYWdlJ3MgYXJyYXkgb2YgcGdkX3QnczsKKyAqLworI2RlZmluZSBwZ2Rfb2Zmc2V0KG1tLCBhZGRyZXNzKSAoKG1tKS0+cGdkK3BnZF9pbmRleChhZGRyZXNzKSkKKworLyoKKyAqIGEgc2hvcnRjdXQgd2hpY2ggaW1wbGllcyB0aGUgdXNlIG9mIHRoZSBrZXJuZWwncyBwZ2QsIGluc3RlYWQKKyAqIG9mIGEgcHJvY2VzcydzCisgKi8KKyNkZWZpbmUgcGdkX29mZnNldF9rKGFkZHJlc3MpIHBnZF9vZmZzZXQoJmluaXRfbW0sIGFkZHJlc3MpCisKKy8qCisgKiB0aGUgcG1kIHBhZ2UgY2FuIGJlIHRob3VnaHQgb2YgYW4gYXJyYXkgbGlrZSB0aGlzOiBwbWRfdFtQVFJTX1BFUl9QTURdCisgKgorICogdGhpcyBtYWNybyByZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgZW50cnkgaW4gdGhlIHBtZCBwYWdlIHdoaWNoIHdvdWxkCisgKiBjb250cm9sIHRoZSBnaXZlbiB2aXJ0dWFsIGFkZHJlc3MKKyAqLworI2RlZmluZSBwbWRfaW5kZXgoYWRkcmVzcykgKCgoYWRkcmVzcykgPj4gUE1EX1NISUZUKSAmIChQVFJTX1BFUl9QTUQtMSkpCisKKy8qCisgKiB0aGUgcHRlIHBhZ2UgY2FuIGJlIHRob3VnaHQgb2YgYW4gYXJyYXkgbGlrZSB0aGlzOiBwdGVfdFtQVFJTX1BFUl9QVEVdCisgKgorICogdGhpcyBtYWNybyByZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgZW50cnkgaW4gdGhlIHB0ZSBwYWdlIHdoaWNoIHdvdWxkCisgKiBjb250cm9sIHRoZSBnaXZlbiB2aXJ0dWFsIGFkZHJlc3MKKyAqLworI2RlZmluZSBwdGVfaW5kZXgoYWRkcmVzcykgKCgoYWRkcmVzcykgPj4gUEFHRV9TSElGVCkgJiAoUFRSU19QRVJfUFRFIC0gMSkpCisjZGVmaW5lIHB0ZV9vZmZzZXRfa2VybmVsKGRpciwgYWRkcmVzcykgXAorCSgocHRlX3QgKikgcG1kX3BhZ2Vfa2VybmVsKCooZGlyKSkgKyAgcHRlX2luZGV4KGFkZHJlc3MpKQorI2RlZmluZSBwdGVfb2Zmc2V0X21hcChkaXIsIGFkZHJlc3MpIFwKKwkoKHB0ZV90ICopcGFnZV9hZGRyZXNzKHBtZF9wYWdlKCooZGlyKSkpICsgcHRlX2luZGV4KGFkZHJlc3MpKQorI2RlZmluZSBwdGVfb2Zmc2V0X21hcF9uZXN0ZWQoZGlyLCBhZGRyZXNzKSBwdGVfb2Zmc2V0X21hcChkaXIsIGFkZHJlc3MpCisjZGVmaW5lIHB0ZV91bm1hcChwdGUpIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgcHRlX3VubWFwX25lc3RlZChwdGUpIGRvIHsgfSB3aGlsZSAoMCkKKworI2RlZmluZSB1cGRhdGVfbW11X2NhY2hlKHZtYSxhZGRyZXNzLHB0ZSkgZG8gOyB3aGlsZSAoMCkKKworLyogRW5jb2RlIGFuZCBkZS1jb2RlIGEgc3dhcCBlbnRyeSAqLworI2RlZmluZSBfX3N3cF90eXBlKHgpCQkJKCgoeCkudmFsID4+IDQpICYgMHgzZikKKyNkZWZpbmUgX19zd3Bfb2Zmc2V0KHgpCQkJKCh4KS52YWwgPj4gMTEpCisKKyNkZWZpbmUgX19zd3BfZW50cnkodHlwZSwgb2Zmc2V0KSBcCisJKChzd3BfZW50cnlfdCkgeyAoKHR5cGUpIDw8IDQpIHwgKChvZmZzZXQpIDw8IDExKSB9KQorI2RlZmluZSBfX3B0ZV90b19zd3BfZW50cnkocHRlKSBcCisJKChzd3BfZW50cnlfdCkgeyBwdGVfdmFsKHB0ZV9ta3VwdG9kYXRlKHB0ZSkpIH0pCisjZGVmaW5lIF9fc3dwX2VudHJ5X3RvX3B0ZSh4KQkJKChwdGVfdCkgeyAoeCkudmFsIH0pCisKKyNkZWZpbmUga2Vybl9hZGRyX3ZhbGlkKGFkZHIpICgxKQorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGd0YWJsZS5oPgorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGd0YWJsZS1ub3B1ZC5oPgorCisjZW5kaWYKKyNlbmRpZgorCitleHRlcm4gc3RydWN0IHBhZ2UgKnBoeXNfdG9fcGFnZShjb25zdCB1bnNpZ25lZCBsb25nIHBoeXMpOworZXh0ZXJuIHN0cnVjdCBwYWdlICpfX3ZpcnRfdG9fcGFnZShjb25zdCB1bnNpZ25lZCBsb25nIHZpcnQpOworI2RlZmluZSB2aXJ0X3RvX3BhZ2UoYWRkcikgX192aXJ0X3RvX3BhZ2UoKGNvbnN0IHVuc2lnbmVkIGxvbmcpIGFkZHIpCisKKy8qCisgKiBPdmVycmlkZXMgZm9yIEVtYWNzIHNvIHRoYXQgd2UgZm9sbG93IExpbnVzJ3MgdGFiYmluZyBzdHlsZS4KKyAqIEVtYWNzIHdpbGwgbm90aWNlIHRoaXMgc3R1ZmYgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgYXV0b21hdGljYWxseQorICogYWRqdXN0IHRoZSBzZXR0aW5ncyBmb3IgdGhpcyBidWZmZXIgb25seS4gIFRoaXMgbXVzdCByZW1haW4gYXQgdGhlIGVuZAorICogb2YgdGhlIGZpbGUuCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqIGMtZmlsZS1zdHlsZTogImxpbnV4IgorICogRW5kOgorICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9wb2xsLmggYi9pbmNsdWRlL2FzbS11bS9wb2xsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWViNGUxYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXVtL3BvbGwuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19VTV9QT0xMX0gKKyNkZWZpbmUgX19VTV9QT0xMX0gKKworI2luY2x1ZGUgImFzbS9hcmNoL3BvbGwuaCIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9wb3NpeF90eXBlcy5oIGIvaW5jbHVkZS9hc20tdW0vcG9zaXhfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmZiNDE5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdW0vcG9zaXhfdHlwZXMuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19VTV9QT1NJWF9UWVBFU19ICisjZGVmaW5lIF9fVU1fUE9TSVhfVFlQRVNfSAorCisjaW5jbHVkZSAiYXNtL2FyY2gvcG9zaXhfdHlwZXMuaCIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9wcmN0bC5oIGIvaW5jbHVkZS9hc20tdW0vcHJjdGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGI2ZDA5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdW0vcHJjdGwuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19VTV9QUkNUTF9ICisjZGVmaW5lIF9fVU1fUFJDVExfSAorCisjaW5jbHVkZSAiYXNtL2FyY2gvcHJjdGwuaCIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9wcm9jZXNzb3ItZ2VuZXJpYy5oIGIvaW5jbHVkZS9hc20tdW0vcHJvY2Vzc29yLWdlbmVyaWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzhiYTZmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdW0vcHJvY2Vzc29yLWdlbmVyaWMuaApAQCAtMCwwICsxLDE1MCBAQAorLyogCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIgSmVmZiBEaWtlIChqZGlrZUBrYXJheWEuY29tKQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTAorICovCisKKyNpZm5kZWYgX19VTV9QUk9DRVNTT1JfR0VORVJJQ19ICisjZGVmaW5lIF9fVU1fUFJPQ0VTU09SX0dFTkVSSUNfSAorCitzdHJ1Y3QgcHRfcmVnczsKKworc3RydWN0IHRhc2tfc3RydWN0OworCisjaW5jbHVkZSAibGludXgvY29uZmlnLmgiCisjaW5jbHVkZSAiYXNtL3B0cmFjZS5oIgorI2luY2x1ZGUgImNob29zZS1tb2RlLmgiCisKK3N0cnVjdCBtbV9zdHJ1Y3Q7CisKK3N0cnVjdCB0aHJlYWRfc3RydWN0IHsKKwlpbnQgZm9ya2luZzsKKwlpbnQgbnN5c2NhbGxzOworCXN0cnVjdCBwdF9yZWdzIHJlZ3M7CisJdW5zaWduZWQgbG9uZyBjcjI7CisJaW50IGVycjsKKwl1bnNpZ25lZCBsb25nIHRyYXBfbm87CisJaW50IHNpbmdsZXN0ZXBfc3lzY2FsbDsKKwl2b2lkICpmYXVsdF9hZGRyOworCXZvaWQgKmZhdWx0X2NhdGNoZXI7CisJc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2X3NjaGVkOworCXVuc2lnbmVkIGxvbmcgdGVtcF9zdGFjazsKKwl2b2lkICpleGVjX2J1ZjsKKwlzdHJ1Y3QgYXJjaF90aHJlYWQgYXJjaDsKKwl1bmlvbiB7CisjaWZkZWYgQ09ORklHX01PREVfVFQKKwkJc3RydWN0IHsKKwkJCWludCBleHRlcm5fcGlkOworCQkJaW50IHRyYWNpbmc7CisJCQlpbnQgc3dpdGNoX3BpcGVbMl07CisJCQlpbnQgdm1fc2VxOworCQl9IHR0OworI2VuZGlmCisjaWZkZWYgQ09ORklHX01PREVfU0tBUworCQlzdHJ1Y3QgeworCQkJdm9pZCAqc3dpdGNoX2J1ZjsKKwkJCXZvaWQgKmZvcmtfYnVmOworCQkJaW50IG1tX2NvdW50OworCQl9IHNrYXM7CisjZW5kaWYKKwl9IG1vZGU7CisJc3RydWN0IHsKKwkJaW50IG9wOworCQl1bmlvbiB7CisJCQlzdHJ1Y3QgeworCQkJCWludCBwaWQ7CisJCQl9IGZvcmssIGV4ZWM7CisJCQlzdHJ1Y3QgeworCQkJCWludCAoKnByb2MpKHZvaWQgKik7CisJCQkJdm9pZCAqYXJnOworCQkJfSB0aHJlYWQ7CisJCQlzdHJ1Y3QgeworCQkJCXZvaWQgKCpwcm9jKSh2b2lkICopOworCQkJCXZvaWQgKmFyZzsKKwkJCX0gY2I7CisJCX0gdTsKKwl9IHJlcXVlc3Q7Cit9OworCisjZGVmaW5lIElOSVRfVEhSRUFEIFwKK3sgXAorCS5mb3JraW5nCQk9IDAsIFwKKwkubnN5c2NhbGxzCQk9IDAsIFwKKyAgICAgICAgLnJlZ3MJCSAgIAk9IEVNUFRZX1JFR1MsIFwKKwkuY3IyCQkJPSAwLCBcCisJLmVycgkJCT0gMCwgXAorCS5mYXVsdF9hZGRyCQk9IE5VTEwsIFwKKwkucHJldl9zY2hlZAkJPSBOVUxMLCBcCisJLnRlbXBfc3RhY2sJCT0gMCwgXAorCS5leGVjX2J1ZgkJPSBOVUxMLCBcCisJLmFyY2gJCQk9IElOSVRfQVJDSF9USFJFQUQsIFwKKwkucmVxdWVzdAkJPSB7IDAgfSBcCit9CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBsb25nIHNlZzsKK30gbW1fc2VnbWVudF90OworCitleHRlcm4gc3RydWN0IHRhc2tfc3RydWN0ICphbGxvY190YXNrX3N0cnVjdCh2b2lkKTsKKworZXh0ZXJuIHZvaWQgcmVsZWFzZV90aHJlYWQoc3RydWN0IHRhc2tfc3RydWN0ICopOworZXh0ZXJuIGludCBrZXJuZWxfdGhyZWFkKGludCAoKmZuKSh2b2lkICopLCB2b2lkICogYXJnLCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKK2V4dGVybiB2b2lkIGR1bXBfdGhyZWFkKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3QgdXNlciAqdSk7CitleHRlcm4gdm9pZCBwcmVwYXJlX3RvX2NvcHkoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spOworCitleHRlcm4gdW5zaWduZWQgbG9uZyB0aHJlYWRfc2F2ZWRfcGMoc3RydWN0IHRhc2tfc3RydWN0ICp0KTsKKworc3RhdGljIGlubGluZSB2b2lkIG1tX2NvcHlfc2VnbWVudHMoc3RydWN0IG1tX3N0cnVjdCAqZnJvbV9tbSwKKwkJCQkgICAgc3RydWN0IG1tX3N0cnVjdCAqbmV3X21tKQoreworfQorCisjZGVmaW5lIGluaXRfc3RhY2sJKGluaXRfdGhyZWFkX3VuaW9uLnN0YWNrKQorCisvKgorICogVXNlciBzcGFjZSBwcm9jZXNzIHNpemU6IDNHQiAoZGVmYXVsdCkuCisgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIHRhc2tfc2l6ZTsKKworI2RlZmluZSBUQVNLX1NJWkUJKHRhc2tfc2l6ZSkKKworLyogVGhpcyBkZWNpZGVzIHdoZXJlIHRoZSBrZXJuZWwgd2lsbCBzZWFyY2ggZm9yIGEgZnJlZSBjaHVuayBvZiB2bQorICogc3BhY2UgZHVyaW5nIG1tYXAncy4KKyAqLworI2RlZmluZSBUQVNLX1VOTUFQUEVEX0JBU0UJKDB4NDAwMDAwMDApCisKK2V4dGVybiB2b2lkIHN0YXJ0X3RocmVhZChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBlbnRyeSwgCisJCQkgdW5zaWduZWQgbG9uZyBzdGFjayk7CisKK3N0cnVjdCBjcHVpbmZvX3VtIHsKKwl1bnNpZ25lZCBsb25nIGxvb3BzX3Blcl9qaWZmeTsKKwlpbnQgaXBpX3BpcGVbMl07Cit9OworCitleHRlcm4gc3RydWN0IGNwdWluZm9fdW0gYm9vdF9jcHVfZGF0YTsKKworI2RlZmluZSBteV9jcHVfZGF0YQkJY3B1X2RhdGFbc21wX3Byb2Nlc3Nvcl9pZCgpXQorCisjaWZkZWYgQ09ORklHX1NNUAorZXh0ZXJuIHN0cnVjdCBjcHVpbmZvX3VtIGNwdV9kYXRhW107CisjZGVmaW5lIGN1cnJlbnRfY3B1X2RhdGEgY3B1X2RhdGFbc21wX3Byb2Nlc3Nvcl9pZCgpXQorI2Vsc2UKKyNkZWZpbmUgY3B1X2RhdGEgKCZib290X2NwdV9kYXRhKQorI2RlZmluZSBjdXJyZW50X2NwdV9kYXRhIGJvb3RfY3B1X2RhdGEKKyNlbmRpZgorCisjZGVmaW5lIEtTVEtfRUlQKHRzaykgKFBUX1JFR1NfSVAoJnRzay0+dGhyZWFkLnJlZ3MpKQorI2RlZmluZSBLU1RLX0VTUCh0c2spIChQVF9SRUdTX1NQKCZ0c2stPnRocmVhZC5yZWdzKSkKKyNkZWZpbmUgZ2V0X3djaGFuKHApICgwKQorCisjZW5kaWYKKworLyoKKyAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgorICogRW1hY3Mgd2lsbCBub3RpY2UgdGhpcyBzdHVmZiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBhdXRvbWF0aWNhbGx5CisgKiBhZGp1c3QgdGhlIHNldHRpbmdzIGZvciB0aGlzIGJ1ZmZlciBvbmx5LiAgVGhpcyBtdXN0IHJlbWFpbiBhdCB0aGUgZW5kCisgKiBvZiB0aGUgZmlsZS4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogTG9jYWwgdmFyaWFibGVzOgorICogYy1maWxlLXN0eWxlOiAibGludXgiCisgKiBFbmQ6CisgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3Byb2Nlc3Nvci1pMzg2LmggYi9pbmNsdWRlL2FzbS11bS9wcm9jZXNzb3ItaTM4Ni5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkZWI4ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS11bS9wcm9jZXNzb3ItaTM4Ni5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qIAorICogQ29weXJpZ2h0IChDKSAyMDAyIEplZmYgRGlrZSAoamRpa2VAa2FyYXlhLmNvbSkKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwKKyAqLworCisjaWZuZGVmIF9fVU1fUFJPQ0VTU09SX0kzODZfSAorI2RlZmluZSBfX1VNX1BST0NFU1NPUl9JMzg2X0gKKworZXh0ZXJuIGludCBob3N0X2hhc194bW07CitleHRlcm4gaW50IGhvc3RfaGFzX2Ntb3Y7CisKK3N0cnVjdCBhcmNoX3RocmVhZCB7CisJdW5zaWduZWQgbG9uZyBkZWJ1Z3JlZ3NbOF07CisJaW50IGRlYnVncmVnc19zZXE7Cit9OworCisjZGVmaW5lIElOSVRfQVJDSF9USFJFQUQgeyAuZGVidWdyZWdzICAJCT0geyBbIDAgLi4uIDcgXSA9IDAgfSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgLmRlYnVncmVnc19zZXEJPSAwIH0KKworI2luY2x1ZGUgImFzbS9hcmNoL3VzZXIuaCIKKworLyogUkVQIE5PUCAoUEFVU0UpIGlzIGEgZ29vZCB0aGluZyB0byBpbnNlcnQgaW50byBidXN5LXdhaXQgbG9vcHMuICovCitzdGF0aWMgaW5saW5lIHZvaWQgcmVwX25vcCh2b2lkKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKCJyZXA7bm9wIjogOiA6Im1lbW9yeSIpOworfQorCisjZGVmaW5lIGNwdV9yZWxheCgpCXJlcF9ub3AoKQorCisvKgorICogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBtYWNybyB0aGF0IHJldHVybnMgY3VycmVudAorICogaW5zdHJ1Y3Rpb24gcG9pbnRlciAoInByb2dyYW0gY291bnRlciIpLiBTdG9sZW4KKyAqIGZyb20gYXNtLWkzODYvcHJvY2Vzc29yLmgKKyAqLworI2RlZmluZSBjdXJyZW50X3RleHRfYWRkcigpIFwKKwkoeyB2b2lkICpwYzsgX19hc21fXygibW92bCAkMWYsJTBcbjE6IjoiPWciIChwYykpOyBwYzsgfSkKKworI2RlZmluZSBBUkNIX0lTX1NUQUNLR1JPVyhhZGRyZXNzKSBcCisgICAgICAgKGFkZHJlc3MgKyAzMiA+PSBVUFRfU1AoJmN1cnJlbnQtPnRocmVhZC5yZWdzLnJlZ3MpKQorCisjaW5jbHVkZSAiYXNtL3Byb2Nlc3Nvci1nZW5lcmljLmgiCisKKyNlbmRpZgorCisvKgorICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCisgKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKKyAqIGFkanVzdCB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgYnVmZmVyIG9ubHkuICBUaGlzIG11c3QgcmVtYWluIGF0IHRoZSBlbmQKKyAqIG9mIHRoZSBmaWxlLgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiBjLWZpbGUtc3R5bGU6ICJsaW51eCIKKyAqIEVuZDoKKyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vcHJvY2Vzc29yLXBwYy5oIGIvaW5jbHVkZS9hc20tdW0vcHJvY2Vzc29yLXBwYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1OTMyMzEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS11bS9wcm9jZXNzb3ItcHBjLmgKQEAgLTAsMCArMSwxNSBAQAorI2lmbmRlZiBfX1VNX1BST0NFU1NPUl9QUENfSAorI2RlZmluZSBfX1VNX1BST0NFU1NPUl9QUENfSAorCisjaWYgZGVmaW5lZChfX0FTU0VNQkxZX18pCisKKyNkZWZpbmUgQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNCisjaW5jbHVkZSAiYXJjaC9wcm9jZXNzb3IuaCIKKworI2Vsc2UKKworI2luY2x1ZGUgImFzbS9wcm9jZXNzb3ItZ2VuZXJpYy5oIgorCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9wcm9jZXNzb3IteDg2XzY0LmggYi9pbmNsdWRlL2FzbS11bS9wcm9jZXNzb3IteDg2XzY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFhZTNhNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXVtL3Byb2Nlc3Nvci14ODZfNjQuaApAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IDIwMDMgUGF0aFNjYWxlLCBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTAorICovCisKKyNpZm5kZWYgX19VTV9QUk9DRVNTT1JfWDg2XzY0X0gKKyNkZWZpbmUgX19VTV9QUk9DRVNTT1JfWDg2XzY0X0gKKworI2luY2x1ZGUgImFzbS9hcmNoL3VzZXIuaCIKKworc3RydWN0IGFyY2hfdGhyZWFkIHsKK307CisKKy8qIFJFUCBOT1AgKFBBVVNFKSBpcyBhIGdvb2QgdGhpbmcgdG8gaW5zZXJ0IGludG8gYnVzeS13YWl0IGxvb3BzLiAqLworZXh0ZXJuIGlubGluZSB2b2lkIHJlcF9ub3Aodm9pZCkKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygicmVwO25vcCI6IDogOiJtZW1vcnkiKTsKK30KKworI2RlZmluZSBjcHVfcmVsYXgoKSAgIHJlcF9ub3AoKQorCisjZGVmaW5lIElOSVRfQVJDSF9USFJFQUQgeyB9CisKKyNkZWZpbmUgY3VycmVudF90ZXh0X2FkZHIoKSBcCisJKHsgdm9pZCAqcGM7IF9fYXNtX18oIm1vdnEgJDFmLCUwXG4xOiI6Ij1nIiAocGMpKTsgcGM7IH0pCisKKyNkZWZpbmUgQVJDSF9JU19TVEFDS0dST1coYWRkcmVzcykgXAorICAgICAgICAoYWRkcmVzcyArIDEyOCA+PSBVUFRfU1AoJmN1cnJlbnQtPnRocmVhZC5yZWdzLnJlZ3MpKQorCisjaW5jbHVkZSAiYXNtL3Byb2Nlc3Nvci1nZW5lcmljLmgiCisKKyNlbmRpZgorCisvKgorICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCisgKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKKyAqIGFkanVzdCB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgYnVmZmVyIG9ubHkuICBUaGlzIG11c3QgcmVtYWluIGF0IHRoZSBlbmQKKyAqIG9mIHRoZSBmaWxlLgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiBjLWZpbGUtc3R5bGU6ICJsaW51eCIKKyAqIEVuZDoKKyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vcHRyYWNlLWdlbmVyaWMuaCBiL2luY2x1ZGUvYXNtLXVtL3B0cmFjZS1nZW5lcmljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY1OTlhYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXVtL3B0cmFjZS1nZW5lcmljLmgKQEAgLTAsMCArMSw3NiBAQAorLyogCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIgSmVmZiBEaWtlIChqZGlrZUBrYXJheWEuY29tKQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTAorICovCisKKyNpZm5kZWYgX19VTV9QVFJBQ0VfR0VORVJJQ19ICisjZGVmaW5lIF9fVU1fUFRSQUNFX0dFTkVSSUNfSAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjaW5jbHVkZSAibGludXgvY29uZmlnLmgiCisKKyNkZWZpbmUgcHRfcmVncyBwdF9yZWdzX3N1YmFyY2gKKyNkZWZpbmUgc2hvd19yZWdzIHNob3dfcmVnc19zdWJhcmNoCisjZGVmaW5lIHNlbmRfc2lndHJhcCBzZW5kX3NpZ3RyYXBfc3ViYXJjaAorCisjaW5jbHVkZSAiYXNtL2FyY2gvcHRyYWNlLmgiCisKKyN1bmRlZiBwdF9yZWdzCisjdW5kZWYgc2hvd19yZWdzCisjdW5kZWYgc2VuZF9zaWd0cmFwCisjdW5kZWYgdXNlcl9tb2RlCisjdW5kZWYgaW5zdHJ1Y3Rpb25fcG9pbnRlcgorCisjaW5jbHVkZSAic3lzZGVwL3B0cmFjZS5oIgorCitzdHJ1Y3QgcHRfcmVncyB7CisJdW5pb24gdW1sX3B0X3JlZ3MgcmVnczsKK307CisKKyNkZWZpbmUgRU1QVFlfUkVHUyB7IHJlZ3MgOiBFTVBUWV9VTUxfUFRfUkVHUyB9CisKKyNkZWZpbmUgUFRfUkVHU19JUChyKSBVUFRfSVAoJihyKS0+cmVncykKKyNkZWZpbmUgUFRfUkVHU19TUChyKSBVUFRfU1AoJihyKS0+cmVncykKKworI2RlZmluZSBQVF9SRUcociwgcmVnKSBVUFRfUkVHKCYociktPnJlZ3MsIHJlZykKKyNkZWZpbmUgUFRfUkVHU19TRVQociwgcmVnLCB2YWwpIFVQVF9TRVQoJihyKS0+cmVncywgcmVnLCB2YWwpCisKKyNkZWZpbmUgUFRfUkVHU19TRVRfU1lTQ0FMTF9SRVRVUk4ociwgcmVzKSBcCisJVVBUX1NFVF9TWVNDQUxMX1JFVFVSTigmKHIpLT5yZWdzLCByZXMpCisjZGVmaW5lIFBUX1JFR1NfUkVTVEFSVF9TWVNDQUxMKHIpIFVQVF9SRVNUQVJUX1NZU0NBTEwoJihyKS0+cmVncykKKworI2RlZmluZSBQVF9SRUdTX1NZU0NBTExfTlIocikgVVBUX1NZU0NBTExfTlIoJihyKS0+cmVncykKKworI2RlZmluZSBQVF9SRUdTX1NDKHIpIFVQVF9TQygmKHIpLT5yZWdzKQorCisjZGVmaW5lIGluc3RydWN0aW9uX3BvaW50ZXIocmVncykgUFRfUkVHU19JUChyZWdzKQorCitzdHJ1Y3QgdGFza19zdHJ1Y3Q7CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIGdldHJlZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLCBpbnQgcmVnbm8pOworZXh0ZXJuIGludCBwdXRyZWcoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgaW50IHJlZ25vLCB1bnNpZ25lZCBsb25nIHZhbHVlKTsKK2V4dGVybiBpbnQgZ2V0X2ZwcmVncyh1bnNpZ25lZCBsb25nIGJ1Ziwgc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCk7CitleHRlcm4gaW50IHNldF9mcHJlZ3ModW5zaWduZWQgbG9uZyBidWYsIHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpOworZXh0ZXJuIGludCBnZXRfZnB4cmVncyh1bnNpZ25lZCBsb25nIGJ1Ziwgc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCk7CitleHRlcm4gaW50IHNldF9mcHhyZWdzKHVuc2lnbmVkIGxvbmcgYnVmLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7CisKK2V4dGVybiB2b2lkIHNob3dfcmVncyhzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKK2V4dGVybiB2b2lkIHNlbmRfc2lndHJhcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdW5pb24gdW1sX3B0X3JlZ3MgKnJlZ3MsCisJCQkgaW50IGVycm9yX2NvZGUpOworCisjZW5kaWYKKworI2VuZGlmCisKKy8qCisgKiBPdmVycmlkZXMgZm9yIEVtYWNzIHNvIHRoYXQgd2UgZm9sbG93IExpbnVzJ3MgdGFiYmluZyBzdHlsZS4KKyAqIEVtYWNzIHdpbGwgbm90aWNlIHRoaXMgc3R1ZmYgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgYXV0b21hdGljYWxseQorICogYWRqdXN0IHRoZSBzZXR0aW5ncyBmb3IgdGhpcyBidWZmZXIgb25seS4gIFRoaXMgbXVzdCByZW1haW4gYXQgdGhlIGVuZAorICogb2YgdGhlIGZpbGUuCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqIGMtZmlsZS1zdHlsZTogImxpbnV4IgorICogRW5kOgorICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9wdHJhY2UtaTM4Ni5oIGIvaW5jbHVkZS9hc20tdW0vcHRyYWNlLWkzODYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTQ3NTkwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdW0vcHRyYWNlLWkzODYuaApAQCAtMCwwICsxLDQ2IEBACisvKiAKKyAqIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSwgMjAwMiBKZWZmIERpa2UgKGpkaWtlQGthcmF5YS5jb20pCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMCisgKi8KKworI2lmbmRlZiBfX1VNX1BUUkFDRV9JMzg2X0gKKyNkZWZpbmUgX19VTV9QVFJBQ0VfSTM4Nl9ICisKKyNpbmNsdWRlICJzeXNkZXAvcHRyYWNlLmgiCisjaW5jbHVkZSAiYXNtL3B0cmFjZS1nZW5lcmljLmgiCisKKyNkZWZpbmUgUFRfUkVHU19FQVgocikgVVBUX0VBWCgmKHIpLT5yZWdzKQorI2RlZmluZSBQVF9SRUdTX0VCWChyKSBVUFRfRUJYKCYociktPnJlZ3MpCisjZGVmaW5lIFBUX1JFR1NfRUNYKHIpIFVQVF9FQ1goJihyKS0+cmVncykKKyNkZWZpbmUgUFRfUkVHU19FRFgocikgVVBUX0VEWCgmKHIpLT5yZWdzKQorI2RlZmluZSBQVF9SRUdTX0VTSShyKSBVUFRfRVNJKCYociktPnJlZ3MpCisjZGVmaW5lIFBUX1JFR1NfRURJKHIpIFVQVF9FREkoJihyKS0+cmVncykKKyNkZWZpbmUgUFRfUkVHU19FQlAocikgVVBUX0VCUCgmKHIpLT5yZWdzKQorCisjZGVmaW5lIFBUX1JFR1NfQ1MocikgVVBUX0NTKCYociktPnJlZ3MpCisjZGVmaW5lIFBUX1JFR1NfU1MocikgVVBUX1NTKCYociktPnJlZ3MpCisjZGVmaW5lIFBUX1JFR1NfRFMocikgVVBUX0RTKCYociktPnJlZ3MpCisjZGVmaW5lIFBUX1JFR1NfRVMocikgVVBUX0VTKCYociktPnJlZ3MpCisjZGVmaW5lIFBUX1JFR1NfRlMocikgVVBUX0ZTKCYociktPnJlZ3MpCisjZGVmaW5lIFBUX1JFR1NfR1MocikgVVBUX0dTKCYociktPnJlZ3MpCisKKyNkZWZpbmUgUFRfUkVHU19FRkxBR1MocikgVVBUX0VGTEFHUygmKHIpLT5yZWdzKQorCisjZGVmaW5lIFBUX1JFR1NfT1JJR19TWVNDQUxMKHIpIFBUX1JFR1NfRUFYKHIpCisjZGVmaW5lIFBUX1JFR1NfU1lTQ0FMTF9SRVQocikgUFRfUkVHU19FQVgocikKKyNkZWZpbmUgUFRfRklYX0VYRUNfU1RBQ0soc3ApIGRvIDsgd2hpbGUoMCkKKworI2RlZmluZSB1c2VyX21vZGUocikgVVBUX0lTX1VTRVIoJihyKS0+cmVncykKKworI2VuZGlmCisKKy8qCisgKiBPdmVycmlkZXMgZm9yIEVtYWNzIHNvIHRoYXQgd2UgZm9sbG93IExpbnVzJ3MgdGFiYmluZyBzdHlsZS4KKyAqIEVtYWNzIHdpbGwgbm90aWNlIHRoaXMgc3R1ZmYgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgYXV0b21hdGljYWxseQorICogYWRqdXN0IHRoZSBzZXR0aW5ncyBmb3IgdGhpcyBidWZmZXIgb25seS4gIFRoaXMgbXVzdCByZW1haW4gYXQgdGhlIGVuZAorICogb2YgdGhlIGZpbGUuCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqIGMtZmlsZS1zdHlsZTogImxpbnV4IgorICogRW5kOgorICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9wdHJhY2UteDg2XzY0LmggYi9pbmNsdWRlL2FzbS11bS9wdHJhY2UteDg2XzY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM0YmUzOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXVtL3B0cmFjZS14ODZfNjQuaApAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IDIwMDMgUGF0aFNjYWxlLCBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTAorICovCisKKyNpZm5kZWYgX19VTV9QVFJBQ0VfWDg2XzY0X0gKKyNkZWZpbmUgX19VTV9QVFJBQ0VfWDg2XzY0X0gKKworI2luY2x1ZGUgImxpbnV4L2NvbXBpbGVyLmgiCisKKyNkZWZpbmUgc2lnbmFsX2ZhdWx0IHNpZ25hbF9mYXVsdF94ODZfNjQKKyNkZWZpbmUgX19GUkFNRV9PRkZTRVRTIC8qIE5lZWRlZCB0byBnZXQgdGhlIFIqIG1hY3JvcyAqLworI2luY2x1ZGUgImFzbS9wdHJhY2UtZ2VuZXJpYy5oIgorI3VuZGVmIHNpZ25hbF9mYXVsdAorCit2b2lkIHNpZ25hbF9mYXVsdChzdHJ1Y3QgcHRfcmVnc19zdWJhcmNoICpyZWdzLCB2b2lkICpmcmFtZSwgY2hhciAqd2hlcmUpOworCisjZGVmaW5lIEZTX0JBU0UgKDIxICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKQorI2RlZmluZSBHU19CQVNFICgyMiAqIHNpemVvZih1bnNpZ25lZCBsb25nKSkKKyNkZWZpbmUgRFMgKDIzICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKQorI2RlZmluZSBFUyAoMjQgKiBzaXplb2YodW5zaWduZWQgbG9uZykpCisjZGVmaW5lIEZTICgyNSAqIHNpemVvZih1bnNpZ25lZCBsb25nKSkKKyNkZWZpbmUgR1MgKDI2ICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKQorCisjZGVmaW5lIFBUX1JFR1NfUkJYKHIpIFVQVF9SQlgoJihyKS0+cmVncykKKyNkZWZpbmUgUFRfUkVHU19SQ1gocikgVVBUX1JDWCgmKHIpLT5yZWdzKQorI2RlZmluZSBQVF9SRUdTX1JEWChyKSBVUFRfUkRYKCYociktPnJlZ3MpCisjZGVmaW5lIFBUX1JFR1NfUlNJKHIpIFVQVF9SU0koJihyKS0+cmVncykKKyNkZWZpbmUgUFRfUkVHU19SREkocikgVVBUX1JESSgmKHIpLT5yZWdzKQorI2RlZmluZSBQVF9SRUdTX1JCUChyKSBVUFRfUkJQKCYociktPnJlZ3MpCisjZGVmaW5lIFBUX1JFR1NfUkFYKHIpIFVQVF9SQVgoJihyKS0+cmVncykKKyNkZWZpbmUgUFRfUkVHU19SOChyKSBVUFRfUjgoJihyKS0+cmVncykKKyNkZWZpbmUgUFRfUkVHU19SOShyKSBVUFRfUjkoJihyKS0+cmVncykKKyNkZWZpbmUgUFRfUkVHU19SMTAocikgVVBUX1IxMCgmKHIpLT5yZWdzKQorI2RlZmluZSBQVF9SRUdTX1IxMShyKSBVUFRfUjExKCYociktPnJlZ3MpCisjZGVmaW5lIFBUX1JFR1NfUjEyKHIpIFVQVF9SMTIoJihyKS0+cmVncykKKyNkZWZpbmUgUFRfUkVHU19SMTMocikgVVBUX1IxMygmKHIpLT5yZWdzKQorI2RlZmluZSBQVF9SRUdTX1IxNChyKSBVUFRfUjE0KCYociktPnJlZ3MpCisjZGVmaW5lIFBUX1JFR1NfUjE1KHIpIFVQVF9SMTUoJihyKS0+cmVncykKKworI2RlZmluZSBQVF9SRUdTX0ZTKHIpIFVQVF9GUygmKHIpLT5yZWdzKQorI2RlZmluZSBQVF9SRUdTX0dTKHIpIFVQVF9HUygmKHIpLT5yZWdzKQorI2RlZmluZSBQVF9SRUdTX0RTKHIpIFVQVF9EUygmKHIpLT5yZWdzKQorI2RlZmluZSBQVF9SRUdTX0VTKHIpIFVQVF9FUygmKHIpLT5yZWdzKQorI2RlZmluZSBQVF9SRUdTX1NTKHIpIFVQVF9TUygmKHIpLT5yZWdzKQorI2RlZmluZSBQVF9SRUdTX0NTKHIpIFVQVF9DUygmKHIpLT5yZWdzKQorCisjZGVmaW5lIFBUX1JFR1NfT1JJR19SQVgocikgVVBUX09SSUdfUkFYKCYociktPnJlZ3MpCisjZGVmaW5lIFBUX1JFR1NfUklQKHIpIFVQVF9JUCgmKHIpLT5yZWdzKQorI2RlZmluZSBQVF9SRUdTX1JTUChyKSBVUFRfU1AoJihyKS0+cmVncykKKworI2RlZmluZSBQVF9SRUdTX0VGTEFHUyhyKSBVUFRfRUZMQUdTKCYociktPnJlZ3MpCisKKy8qIFhYWCAqLworI2RlZmluZSB1c2VyX21vZGUocikgVVBUX0lTX1VTRVIoJihyKS0+cmVncykKKyNkZWZpbmUgUFRfUkVHU19PUklHX1NZU0NBTEwocikgUFRfUkVHU19SQVgocikKKyNkZWZpbmUgUFRfUkVHU19TWVNDQUxMX1JFVChyKSBQVF9SRUdTX1JBWChyKQorCisjZGVmaW5lIFBUX0ZJWF9FWEVDX1NUQUNLKHNwKSBkbyA7IHdoaWxlKDApCisKKyNkZWZpbmUgcHJvZmlsZV9wYyhyZWdzKSBQVF9SRUdTX0lQKHJlZ3MpCisKKyNlbmRpZgorCisvKgorICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCisgKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKKyAqIGFkanVzdCB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgYnVmZmVyIG9ubHkuICBUaGlzIG11c3QgcmVtYWluIGF0IHRoZSBlbmQKKyAqIG9mIHRoZSBmaWxlLgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiBjLWZpbGUtc3R5bGU6ICJsaW51eCIKKyAqIEVuZDoKKyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vcmVzb3VyY2UuaCBiL2luY2x1ZGUvYXNtLXVtL3Jlc291cmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzliMDc0MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXVtL3Jlc291cmNlLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fVU1fUkVTT1VSQ0VfSAorI2RlZmluZSBfX1VNX1JFU09VUkNFX0gKKworI2luY2x1ZGUgImFzbS9hcmNoL3Jlc291cmNlLmgiCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vcndsb2NrLmggYi9pbmNsdWRlL2FzbS11bS9yd2xvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjM4M2FhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdW0vcndsb2NrLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fVU1fUldMT0NLX0gKKyNkZWZpbmUgX19VTV9SV0xPQ0tfSAorCisjaW5jbHVkZSAiYXNtL2FyY2gvcndsb2NrLmgiCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vcndzZW0uaCBiL2luY2x1ZGUvYXNtLXVtL3J3c2VtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjYxYzBlNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXVtL3J3c2VtLmgKQEAgLTAsMCArMSwxMCBAQAorI2lmbmRlZiBfX1VNX1JXU0VNX0hfXworI2RlZmluZSBfX1VNX1JXU0VNX0hfXworCisjaWYgX19HTlVDX18gPCAyIHx8IChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fIDwgOTYpCisjZGVmaW5lIF9fYnVpbHRpbl9leHBlY3QoZXhwLGMpIChleHApCisjZW5kaWYKKworI2luY2x1ZGUgImFzbS9hcmNoL3J3c2VtLmgiCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vc2NhdHRlcmxpc3QuaCBiL2luY2x1ZGUvYXNtLXVtL3NjYXR0ZXJsaXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTkyMDE2YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXVtL3NjYXR0ZXJsaXN0LmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fVU1fU0NBVFRFUkxJU1RfSAorI2RlZmluZSBfX1VNX1NDQVRURVJMSVNUX0gKKworI2luY2x1ZGUgImFzbS9hcmNoL3NjYXR0ZXJsaXN0LmgiCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vc2VjdGlvbnMuaCBiL2luY2x1ZGUvYXNtLXVtL3NlY3Rpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIwMjMxZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXVtL3NlY3Rpb25zLmgKQEAgLTAsMCArMSw3IEBACisjaWZuZGVmIF9VTV9TRUNUSU9OU19ICisjZGVmaW5lIF9VTV9TRUNUSU9OU19ICisKKy8qIG5vdGhpbmcgdG8gc2VlLCBtb3ZlIGFsb25nICovCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2VjdGlvbnMuaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9zZWdtZW50LmggYi9pbmNsdWRlL2FzbS11bS9zZWdtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVlNDAzMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXVtL3NlZ21lbnQuaApAQCAtMCwwICsxLDQgQEAKKyNpZm5kZWYgX19VTV9TRUdNRU5UX0gKKyNkZWZpbmUgX19VTV9TRUdNRU5UX0gKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9zZW1hcGhvcmUuaCBiL2luY2x1ZGUvYXNtLXVtL3NlbWFwaG9yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmMTNjMzQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS11bS9zZW1hcGhvcmUuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19VTV9TRU1BUEhPUkVfSAorI2RlZmluZSBfX1VNX1NFTUFQSE9SRV9ICisKKyNpbmNsdWRlICJhc20vYXJjaC9zZW1hcGhvcmUuaCIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9zZW1idWYuaCBiL2luY2x1ZGUvYXNtLXVtL3NlbWJ1Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhZTgyYzEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS11bS9zZW1idWYuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19VTV9TRU1CVUZfSAorI2RlZmluZSBfX1VNX1NFTUJVRl9ICisKKyNpbmNsdWRlICJhc20vYXJjaC9zZW1idWYuaCIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9zZXJpYWwuaCBiL2luY2x1ZGUvYXNtLXVtL3NlcmlhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxYWQwN2MKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS11bS9zZXJpYWwuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19VTV9TRVJJQUxfSAorI2RlZmluZSBfX1VNX1NFUklBTF9ICisKKyNpbmNsdWRlICJhc20vYXJjaC9zZXJpYWwuaCIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9zZXR1cC5oIGIvaW5jbHVkZS9hc20tdW0vc2V0dXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODUyNTJlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdW0vc2V0dXAuaApAQCAtMCwwICsxLDkgQEAKKyNpZm5kZWYgU0VUVVBfSF9JTkNMVURFRAorI2RlZmluZSBTRVRVUF9IX0lOQ0xVREVECisKKy8qIFBPU0lYIG1hbmRhdGVkIHdpdGggX1BPU0lYX0FSR19NQVggdGhhdCB3ZSBjYW4gcmVseSBvbiA0MDk2IGNoYXJzIGluIHRoZQorICogY29tbWFuZCBsaW5lLCBzbyB0aGlzIGNob2ljZSBpcyBvay4qLworCisjZGVmaW5lIENPTU1BTkRfTElORV9TSVpFIDQwOTYKKworI2VuZGlmCQkvKiBTRVRVUF9IX0lOQ0xVREVEICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9zaG1idWYuaCBiL2luY2x1ZGUvYXNtLXVtL3NobWJ1Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2ODRkNGEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS11bS9zaG1idWYuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19VTV9TSE1CVUZfSAorI2RlZmluZSBfX1VNX1NITUJVRl9ICisKKyNpbmNsdWRlICJhc20vYXJjaC9zaG1idWYuaCIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9zaG1wYXJhbS5oIGIvaW5jbHVkZS9hc20tdW0vc2htcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjRjMDAxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdW0vc2htcGFyYW0uaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19VTV9TSE1QQVJBTV9ICisjZGVmaW5lIF9fVU1fU0hNUEFSQU1fSAorCisjaW5jbHVkZSAiYXNtL2FyY2gvc2htcGFyYW0uaCIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9zaWdjb250ZXh0LWdlbmVyaWMuaCBiL2luY2x1ZGUvYXNtLXVtL3NpZ2NvbnRleHQtZ2VuZXJpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2NDU4NzAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS11bS9zaWdjb250ZXh0LWdlbmVyaWMuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19VTV9TSUdDT05URVhUX0dFTkVSSUNfSAorI2RlZmluZSBfX1VNX1NJR0NPTlRFWFRfR0VORVJJQ19ICisKKyNpbmNsdWRlICJhc20vYXJjaC9zaWdjb250ZXh0LmgiCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vc2lnY29udGV4dC1pMzg2LmggYi9pbmNsdWRlL2FzbS11bS9zaWdjb250ZXh0LWkzODYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODgzMzNmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdW0vc2lnY29udGV4dC1pMzg2LmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fVU1fU0lHQ09OVEVYVF9JMzg2X0gKKyNkZWZpbmUgX19VTV9TSUdDT05URVhUX0kzODZfSAorCisjaW5jbHVkZSAiYXNtL3NpZ2NvbnRleHQtZ2VuZXJpYy5oIgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3NpZ2NvbnRleHQtcHBjLmggYi9pbmNsdWRlL2FzbS11bS9zaWdjb250ZXh0LXBwYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0NjdmMjAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS11bS9zaWdjb250ZXh0LXBwYy5oCkBAIC0wLDAgKzEsMTAgQEAKKyNpZm5kZWYgX19VTV9TSUdDT05URVhUX1BQQ19ICisjZGVmaW5lIF9fVU1fU0lHQ09OVEVYVF9QUENfSAorCisjZGVmaW5lIHB0X3JlZ3Mgc3lzX3B0X3JlZ3MKKworI2luY2x1ZGUgImFzbS9zaWdjb250ZXh0LWdlbmVyaWMuaCIKKworI3VuZGVmIHB0X3JlZ3MKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9zaWdjb250ZXh0LXg4Nl82NC5oIGIvaW5jbHVkZS9hc20tdW0vc2lnY29udGV4dC14ODZfNjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjAwZTBiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdW0vc2lnY29udGV4dC14ODZfNjQuaApAQCAtMCwwICsxLDIyIEBACisvKiBDb3B5cmlnaHQgMjAwMyBQYXRoU2NhbGUsIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMCisgKi8KKworI2lmbmRlZiBfX1VNX1NJR0NPTlRFWFRfWDg2XzY0X0gKKyNkZWZpbmUgX19VTV9TSUdDT05URVhUX1g4Nl82NF9ICisKKyNpbmNsdWRlICJhc20vc2lnY29udGV4dC1nZW5lcmljLmgiCisKKyNlbmRpZgorCisvKgorICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCisgKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKKyAqIGFkanVzdCB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgYnVmZmVyIG9ubHkuICBUaGlzIG11c3QgcmVtYWluIGF0IHRoZSBlbmQKKyAqIG9mIHRoZSBmaWxlLgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiBjLWZpbGUtc3R5bGU6ICJsaW51eCIKKyAqIEVuZDoKKyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vc2lnaW5mby5oIGIvaW5jbHVkZS9hc20tdW0vc2lnaW5mby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlYzYxMjQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS11bS9zaWdpbmZvLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fVU1fU0lHSU5GT19ICisjZGVmaW5lIF9fVU1fU0lHSU5GT19ICisKKyNpbmNsdWRlICJhc20vYXJjaC9zaWdpbmZvLmgiCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vc2lnbmFsLmggYi9pbmNsdWRlL2FzbS11bS9zaWduYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmVkOTJjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdW0vc2lnbmFsLmgKQEAgLTAsMCArMSwyOSBAQAorLyogCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgSmVmZiBEaWtlIChqZGlrZUBrYXJheWEuY29tKQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTAorICovCisKKyNpZm5kZWYgX19VTV9TSUdOQUxfSAorI2RlZmluZSBfX1VNX1NJR05BTF9ICisKKy8qIE5lZWQgdG8ga2lsbCB0aGUgZG9fc2lnbmFsKCkgZGVjbGFyYXRpb24gaW4gdGhlIGkzODYgc2lnbmFsLmggKi8KKworI2RlZmluZSBkb19zaWduYWwgZG9fc2lnbmFsX3JlbmFtZWQKKyNpbmNsdWRlICJhc20vYXJjaC9zaWduYWwuaCIKKyN1bmRlZiBkb19zaWduYWwKKyN1bmRlZiBwdHJhY2Vfc2lnbmFsX2RlbGl2ZXIKKworI2RlZmluZSBwdHJhY2Vfc2lnbmFsX2RlbGl2ZXIocmVncywgY29va2llKSBkbyB7fSB3aGlsZSgwKQorCisjZW5kaWYKKworLyoKKyAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgorICogRW1hY3Mgd2lsbCBub3RpY2UgdGhpcyBzdHVmZiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBhdXRvbWF0aWNhbGx5CisgKiBhZGp1c3QgdGhlIHNldHRpbmdzIGZvciB0aGlzIGJ1ZmZlciBvbmx5LiAgVGhpcyBtdXN0IHJlbWFpbiBhdCB0aGUgZW5kCisgKiBvZiB0aGUgZmlsZS4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogTG9jYWwgdmFyaWFibGVzOgorICogYy1maWxlLXN0eWxlOiAibGludXgiCisgKiBFbmQ6CisgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3NtcC5oIGIvaW5jbHVkZS9hc20tdW0vc21wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQxMmQ1ZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXVtL3NtcC5oCkBAIC0wLDAgKzEsMjcgQEAKKyNpZm5kZWYgX19VTV9TTVBfSAorI2RlZmluZSBfX1VNX1NNUF9ICisKKyNpZmRlZiBDT05GSUdfU01QCisKKyNpbmNsdWRlICJsaW51eC9jb25maWcuaCIKKyNpbmNsdWRlICJsaW51eC9iaXRvcHMuaCIKKyNpbmNsdWRlICJhc20vY3VycmVudC5oIgorI2luY2x1ZGUgImxpbnV4L2NwdW1hc2suaCIKKworI2RlZmluZSBzbXBfcHJvY2Vzc29yX2lkKCkgKGN1cnJlbnRfdGhyZWFkLT5jcHUpCisjZGVmaW5lIGNwdV9sb2dpY2FsX21hcChuKSAobikKKyNkZWZpbmUgY3B1X251bWJlcl9tYXAobikgKG4pCisjZGVmaW5lIFBST0NfQ0hBTkdFX1BFTkFMVFkJMTUgLyogUGljayBhIG51bWJlciwgYW55IG51bWJlciAqLworZXh0ZXJuIGludCBoYXJkX3NtcF9wcm9jZXNzb3JfaWQodm9pZCk7CisjZGVmaW5lIE5PX1BST0NfSUQgLTEKKworZXh0ZXJuIGludCBuY3B1czsKKworCitleHRlcm4gaW5saW5lIHZvaWQgc21wX2NwdXNfZG9uZSh1bnNpZ25lZCBpbnQgbWF4Y3B1cykKK3sKK30KKworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vc29ja2V0LmggYi9pbmNsdWRlL2FzbS11bS9zb2NrZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Nzg4NmU0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdW0vc29ja2V0LmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fVU1fU09DS0VUX0gKKyNkZWZpbmUgX19VTV9TT0NLRVRfSAorCisjaW5jbHVkZSAiYXNtL2FyY2gvc29ja2V0LmgiCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vc29ja2lvcy5oIGIvaW5jbHVkZS9hc20tdW0vc29ja2lvcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzZWUxYzUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS11bS9zb2NraW9zLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fVU1fU09DS0lPU19ICisjZGVmaW5lIF9fVU1fU09DS0lPU19ICisKKyNpbmNsdWRlICJhc20vYXJjaC9zb2NraW9zLmgiCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vc3BpbmxvY2suaCBiL2luY2x1ZGUvYXNtLXVtL3NwaW5sb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE4YzgyOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXVtL3NwaW5sb2NrLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fVU1fU1BJTkxPQ0tfSAorI2RlZmluZSBfX1VNX1NQSU5MT0NLX0gKKworI2luY2x1ZGUgImFzbS9hcmNoL3NwaW5sb2NrLmgiCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vc3RhdC5oIGIvaW5jbHVkZS9hc20tdW0vc3RhdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzZWQ4NWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS11bS9zdGF0LmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fVU1fU1RBVF9ICisjZGVmaW5lIF9fVU1fU1RBVF9ICisKKyNpbmNsdWRlICJhc20vYXJjaC9zdGF0LmgiCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vc3RhdGZzLmggYi9pbmNsdWRlL2FzbS11bS9zdGF0ZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTZmYjUzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdW0vc3RhdGZzLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9VTV9TVEFURlNfSAorI2RlZmluZSBfVU1fU1RBVEZTX0gKKworI2luY2x1ZGUgImFzbS9hcmNoL3N0YXRmcy5oIgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3N0cmluZy5oIGIvaW5jbHVkZS9hc20tdW0vc3RyaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWEwNTcxZjYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS11bS9zdHJpbmcuaApAQCAtMCwwICsxLDcgQEAKKyNpZm5kZWYgX19VTV9TVFJJTkdfSAorI2RlZmluZSBfX1VNX1NUUklOR19ICisKKyNpbmNsdWRlICJhc20vYXJjaC9zdHJpbmcuaCIKKyNpbmNsdWRlICJhc20vYXJjaHBhcmFtLmgiCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vc3VzcGVuZC5oIGIvaW5jbHVkZS9hc20tdW0vc3VzcGVuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0ZThlMDAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS11bS9zdXNwZW5kLmgKQEAgLTAsMCArMSw0IEBACisjaWZuZGVmIF9fVU1fU1VTUEVORF9ICisjZGVmaW5lIF9fVU1fU1VTUEVORF9ICisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vc3lzdGVtLWdlbmVyaWMuaCBiL2luY2x1ZGUvYXNtLXVtL3N5c3RlbS1nZW5lcmljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJjZmEzNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXVtL3N5c3RlbS1nZW5lcmljLmgKQEAgLTAsMCArMSw0NyBAQAorI2lmbmRlZiBfX1VNX1NZU1RFTV9HRU5FUklDX0gKKyNkZWZpbmUgX19VTV9TWVNURU1fR0VORVJJQ19ICisKKyNpbmNsdWRlICJhc20vYXJjaC9zeXN0ZW0uaCIKKworI3VuZGVmIHN3aXRjaF90bworI3VuZGVmIGxvY2FsX2lycV9zYXZlCisjdW5kZWYgbG9jYWxfaXJxX3Jlc3RvcmUKKyN1bmRlZiBsb2NhbF9pcnFfZGlzYWJsZQorI3VuZGVmIGxvY2FsX2lycV9lbmFibGUKKyN1bmRlZiBsb2NhbF9zYXZlX2ZsYWdzCisjdW5kZWYgbG9jYWxfaXJxX3Jlc3RvcmUKKyN1bmRlZiBsb2NhbF9pcnFfZW5hYmxlCisjdW5kZWYgbG9jYWxfaXJxX2Rpc2FibGUKKyN1bmRlZiBsb2NhbF9pcnFfc2F2ZQorI3VuZGVmIGlycXNfZGlzYWJsZWQKKworZXh0ZXJuIHZvaWQgKnN3aXRjaF90byh2b2lkICpwcmV2LCB2b2lkICpuZXh0LCB2b2lkICpsYXN0KTsKKworZXh0ZXJuIGludCBnZXRfc2lnbmFscyh2b2lkKTsKK2V4dGVybiBpbnQgc2V0X3NpZ25hbHMoaW50IGVuYWJsZSk7CitleHRlcm4gaW50IGdldF9zaWduYWxzKHZvaWQpOworZXh0ZXJuIHZvaWQgYmxvY2tfc2lnbmFscyh2b2lkKTsKK2V4dGVybiB2b2lkIHVuYmxvY2tfc2lnbmFscyh2b2lkKTsKKworI2RlZmluZSBsb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKSBkbyB7IHR5cGVjaGVjayh1bnNpZ25lZCBsb25nLCBmbGFncyk7IFwKKwkJCQkgICAgIChmbGFncykgPSBnZXRfc2lnbmFscygpOyB9IHdoaWxlKDApCisjZGVmaW5lIGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKSBkbyB7IHR5cGVjaGVjayh1bnNpZ25lZCBsb25nLCBmbGFncyk7IFwKKwkJCQkgICAgICBzZXRfc2lnbmFscyhmbGFncyk7IH0gd2hpbGUoMCkKKworI2RlZmluZSBsb2NhbF9pcnFfc2F2ZShmbGFncykgZG8geyBsb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbF9pcnFfZGlzYWJsZSgpOyB9IHdoaWxlKDApCisKKyNkZWZpbmUgbG9jYWxfaXJxX2VuYWJsZSgpIHVuYmxvY2tfc2lnbmFscygpCisjZGVmaW5lIGxvY2FsX2lycV9kaXNhYmxlKCkgYmxvY2tfc2lnbmFscygpCisKKyNkZWZpbmUgaXJxc19kaXNhYmxlZCgpICAgICAgICAgICAgICAgICBcCisoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOyAgICAgICAgICAgIFwKKyAgICAgICAgbG9jYWxfc2F2ZV9mbGFncyhmbGFncyk7ICAgICAgICBcCisgICAgICAgIChmbGFncyA9PSAwKTsgICAgICAgICAgICAgICAgICAgXAorfSkKKworZXh0ZXJuIHZvaWQgKl9zd2l0Y2hfdG8odm9pZCAqcHJldiwgdm9pZCAqbmV4dCwgdm9pZCAqbGFzdCk7CisjZGVmaW5lIHN3aXRjaF90byhwcmV2LCBuZXh0LCBsYXN0KSBwcmV2ID0gX3N3aXRjaF90byhwcmV2LCBuZXh0LCBsYXN0KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3N5c3RlbS1pMzg2LmggYi9pbmNsdWRlL2FzbS11bS9zeXN0ZW0taTM4Ni5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhODM4MWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS11bS9zeXN0ZW0taTM4Ni5oCkBAIC0wLDAgKzEsOCBAQAorI2lmbmRlZiBfX1VNX1NZU1RFTV9JMzg2X0gKKyNkZWZpbmUgX19VTV9TWVNURU1fSTM4Nl9ICisKKyNpbmNsdWRlICJhc20vc3lzdGVtLWdlbmVyaWMuaCIKKyAgICAKKyNkZWZpbmUgX19IQVZFX0FSQ0hfQ01QWENIRyAxCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vc3lzdGVtLXBwYy5oIGIvaW5jbHVkZS9hc20tdW0vc3lzdGVtLXBwYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3Y2RlNjYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS11bS9zeXN0ZW0tcHBjLmgKQEAgLTAsMCArMSwxMiBAQAorI2lmbmRlZiBfX1VNX1NZU1RFTV9QUENfSAorI2RlZmluZSBfX1VNX1NZU1RFTV9QUENfSAorCisjZGVmaW5lIF9zd2l0Y2hfdG8gX3BwY19zd2l0Y2hfdG8KKworI2luY2x1ZGUgImFzbS9hcmNoL3N5c3RlbS5oIgorCisjdW5kZWYgX3N3aXRjaF90bworIAorI2luY2x1ZGUgImFzbS9zeXN0ZW0tZ2VuZXJpYy5oIgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3N5c3RlbS14ODZfNjQuaCBiL2luY2x1ZGUvYXNtLXVtL3N5c3RlbS14ODZfNjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWI2MWI1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdW0vc3lzdGVtLXg4Nl82NC5oCkBAIC0wLDAgKzEsMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMyBQYXRoU2NhbGUsIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMCisgKi8KKworI2lmbmRlZiBfX1VNX1NZU1RFTV9YODZfNjRfSAorI2RlZmluZSBfX1VNX1NZU1RFTV9YODZfNjRfSAorCisjaW5jbHVkZSAiYXNtL3N5c3RlbS1nZW5lcmljLmgiCisKKyNlbmRpZgorCisvKgorICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCisgKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKKyAqIGFkanVzdCB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgYnVmZmVyIG9ubHkuICBUaGlzIG11c3QgcmVtYWluIGF0IHRoZSBlbmQKKyAqIG9mIHRoZSBmaWxlLgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiBjLWZpbGUtc3R5bGU6ICJsaW51eCIKKyAqIEVuZDoKKyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vdGVybWJpdHMuaCBiL2luY2x1ZGUvYXNtLXVtL3Rlcm1iaXRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTczOWM2MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXVtL3Rlcm1iaXRzLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fVU1fVEVSTUJJVFNfSAorI2RlZmluZSBfX1VNX1RFUk1CSVRTX0gKKworI2luY2x1ZGUgImFzbS9hcmNoL3Rlcm1iaXRzLmgiCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vdGVybWlvcy5oIGIvaW5jbHVkZS9hc20tdW0vdGVybWlvcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5Zjk3YjMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS11bS90ZXJtaW9zLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fVU1fVEVSTUlPU19ICisjZGVmaW5lIF9fVU1fVEVSTUlPU19ICisKKyNpbmNsdWRlICJhc20vYXJjaC90ZXJtaW9zLmgiCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vdGhyZWFkX2luZm8uaCBiL2luY2x1ZGUvYXNtLXVtL3RocmVhZF9pbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZmYjU3NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXVtL3RocmVhZF9pbmZvLmgKQEAgLTAsMCArMSw5MyBAQAorLyogCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgSmVmZiBEaWtlIChqZGlrZUBrYXJheWEuY29tKQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTAorICovCisKKyNpZm5kZWYgX19VTV9USFJFQURfSU5GT19ICisjZGVmaW5lIF9fVU1fVEhSRUFEX0lORk9fSAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCitzdHJ1Y3QgdGhyZWFkX2luZm8geworCXN0cnVjdCB0YXNrX3N0cnVjdAkqdGFzazsJCS8qIG1haW4gdGFzayBzdHJ1Y3R1cmUgKi8KKwlzdHJ1Y3QgZXhlY19kb21haW4JKmV4ZWNfZG9tYWluOwkvKiBleGVjdXRpb24gZG9tYWluICovCisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CQkvKiBsb3cgbGV2ZWwgZmxhZ3MgKi8KKwlfX3UzMgkJCWNwdTsJCS8qIGN1cnJlbnQgQ1BVICovCisJX19zMzIJCQlwcmVlbXB0X2NvdW50OyAgLyogMCA9PiBwcmVlbXB0YWJsZSwgCisJCQkJCQkgICA8MCA9PiBCVUcgKi8KKwltbV9zZWdtZW50X3QJCWFkZHJfbGltaXQ7CS8qIHRocmVhZCBhZGRyZXNzIHNwYWNlOgorCQkJCQkgCSAgIDAtMHhCRkZGRkZGRiBmb3IgdXNlcgorCQkJCQkJICAgMC0weEZGRkZGRkZGIGZvciBrZXJuZWwgKi8KKwlzdHJ1Y3QgcmVzdGFydF9ibG9jayAgICByZXN0YXJ0X2Jsb2NrOworfTsKKworI2RlZmluZSBJTklUX1RIUkVBRF9JTkZPKHRzaykJCQlcCit7CQkJCQkJXAorCXRhc2s6CQkmdHNrLAkJCVwKKwlleGVjX2RvbWFpbjoJJmRlZmF1bHRfZXhlY19kb21haW4sCVwKKwlmbGFnczoJCTAsCQkJXAorCWNwdToJCTAsCQkJXAorCXByZWVtcHRfY291bnQ6CTEsCQkJXAorCWFkZHJfbGltaXQ6CUtFUk5FTF9EUywJCVwKKwlyZXN0YXJ0X2Jsb2NrOiAgewkJCVwKKwkJZm46ICBkb19ub19yZXN0YXJ0X3N5c2NhbGwsCVwKKwl9LAkJCQkJXAorfQorCisjZGVmaW5lIGluaXRfdGhyZWFkX2luZm8JKGluaXRfdGhyZWFkX3VuaW9uLnRocmVhZF9pbmZvKQorI2RlZmluZSBpbml0X3N0YWNrCQkoaW5pdF90aHJlYWRfdW5pb24uc3RhY2spCisKKy8qIGhvdyB0byBnZXQgdGhlIHRocmVhZCBpbmZvcm1hdGlvbiBzdHJ1Y3QgZnJvbSBDICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCB0aHJlYWRfaW5mbyAqY3VycmVudF90aHJlYWRfaW5mbyh2b2lkKQoreworCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGk7CisJdW5zaWduZWQgbG9uZyBtYXNrID0gUEFHRV9TSVpFICoKKwkJKDEgPDwgQ09ORklHX0tFUk5FTF9TVEFDS19PUkRFUikgLSAxOworICAgICAgICB0aSA9IChzdHJ1Y3QgdGhyZWFkX2luZm8gKikgKCgodW5zaWduZWQgbG9uZykgJnRpKSAmIH5tYXNrKTsKKwlyZXR1cm4gdGk7Cit9CisKKy8qIHRocmVhZCBpbmZvcm1hdGlvbiBhbGxvY2F0aW9uICovCisjZGVmaW5lIFRIUkVBRF9TSVpFICgoMSA8PCBDT05GSUdfS0VSTkVMX1NUQUNLX09SREVSKSAqIFBBR0VfU0laRSkKKyNkZWZpbmUgYWxsb2NfdGhyZWFkX2luZm8odHNrKSBcCisJKChzdHJ1Y3QgdGhyZWFkX2luZm8gKikga21hbGxvYyhUSFJFQURfU0laRSwgR0ZQX0tFUk5FTCkpCisjZGVmaW5lIGZyZWVfdGhyZWFkX2luZm8odGkpIGtmcmVlKHRpKQorCisjZGVmaW5lIGdldF90aHJlYWRfaW5mbyh0aSkgZ2V0X3Rhc2tfc3RydWN0KCh0aSktPnRhc2spCisjZGVmaW5lIHB1dF90aHJlYWRfaW5mbyh0aSkgcHV0X3Rhc2tfc3RydWN0KCh0aSktPnRhc2spCisKKyNlbmRpZgorCisjZGVmaW5lIFBSRUVNUFRfQUNUSVZFCQkweDQwMDAwMDAKKworI2RlZmluZSBUSUZfU1lTQ0FMTF9UUkFDRQkwCS8qIHN5c2NhbGwgdHJhY2UgYWN0aXZlICovCisjZGVmaW5lIFRJRl9TSUdQRU5ESU5HCQkxCS8qIHNpZ25hbCBwZW5kaW5nICovCisjZGVmaW5lIFRJRl9ORUVEX1JFU0NIRUQJMgkvKiByZXNjaGVkdWxpbmcgbmVjZXNzYXJ5ICovCisjZGVmaW5lIFRJRl9QT0xMSU5HX05SRkxBRyAgICAgIDMgICAgICAgLyogdHJ1ZSBpZiBwb2xsX2lkbGUoKSBpcyBwb2xsaW5nIAorCQkJCQkgKiBUSUZfTkVFRF9SRVNDSEVEIAorCQkJCQkgKi8KKyNkZWZpbmUgVElGX1JFU1RBUlRfQkxPQ0sgCTQKKyNkZWZpbmUgVElGX01FTURJRQkgCTUKKworI2RlZmluZSBfVElGX1NZU0NBTExfVFJBQ0UJKDEgPDwgVElGX1NZU0NBTExfVFJBQ0UpCisjZGVmaW5lIF9USUZfU0lHUEVORElORwkJKDEgPDwgVElGX1NJR1BFTkRJTkcpCisjZGVmaW5lIF9USUZfTkVFRF9SRVNDSEVECSgxIDw8IFRJRl9ORUVEX1JFU0NIRUQpCisjZGVmaW5lIF9USUZfUE9MTElOR19OUkZMQUcgICAgICgxIDw8IFRJRl9QT0xMSU5HX05SRkxBRykKKyNkZWZpbmUgX1RJRl9SRVNUQVJUX0JMT0NLCSgxIDw8IFRJRl9SRVNUQVJUX0JMT0NLKQorCisjZW5kaWYKKworLyoKKyAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgorICogRW1hY3Mgd2lsbCBub3RpY2UgdGhpcyBzdHVmZiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBhdXRvbWF0aWNhbGx5CisgKiBhZGp1c3QgdGhlIHNldHRpbmdzIGZvciB0aGlzIGJ1ZmZlciBvbmx5LiAgVGhpcyBtdXN0IHJlbWFpbiBhdCB0aGUgZW5kCisgKiBvZiB0aGUgZmlsZS4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogTG9jYWwgdmFyaWFibGVzOgorICogYy1maWxlLXN0eWxlOiAibGludXgiCisgKiBFbmQ6CisgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3RpbWV4LmggYi9pbmNsdWRlL2FzbS11bS90aW1leC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmNGFkYTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS11bS90aW1leC5oCkBAIC0wLDAgKzEsMTMgQEAKKyNpZm5kZWYgX19VTV9USU1FWF9ICisjZGVmaW5lIF9fVU1fVElNRVhfSAorCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgY3ljbGVzX3Q7CisKK3N0YXRpYyBpbmxpbmUgY3ljbGVzX3QgZ2V0X2N5Y2xlcyAodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBDTE9DS19USUNLX1JBVEUgKEhaKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3RsYi5oIGIvaW5jbHVkZS9hc20tdW0vdGxiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY0MDAzMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXVtL3RsYi5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfX1VNX1RMQl9ICisjZGVmaW5lIF9fVU1fVExCX0gKKworI2luY2x1ZGUgPGFzbS9hcmNoL3RsYi5oPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3RsYmZsdXNoLmggYi9pbmNsdWRlL2FzbS11bS90bGJmbHVzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyMmFhMzAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS11bS90bGJmbHVzaC5oCkBAIC0wLDAgKzEsNDggQEAKKy8qIAorICogQ29weXJpZ2h0IChDKSAyMDAyIEplZmYgRGlrZSAoamRpa2VAa2FyYXlhLmNvbSkKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwKKyAqLworCisjaWZuZGVmIF9fVU1fVExCRkxVU0hfSAorI2RlZmluZSBfX1VNX1RMQkZMVVNIX0gKKworI2luY2x1ZGUgPGxpbnV4L21tLmg+CisKKy8qCisgKiBUTEIgZmx1c2hpbmc6CisgKgorICogIC0gZmx1c2hfdGxiKCkgZmx1c2hlcyB0aGUgY3VycmVudCBtbSBzdHJ1Y3QgVExCcworICogIC0gZmx1c2hfdGxiX2FsbCgpIGZsdXNoZXMgYWxsIHByb2Nlc3NlcyBUTEJzCisgKiAgLSBmbHVzaF90bGJfbW0obW0pIGZsdXNoZXMgdGhlIHNwZWNpZmllZCBtbSBjb250ZXh0IFRMQidzCisgKiAgLSBmbHVzaF90bGJfcGFnZSh2bWEsIHZtYWRkcikgZmx1c2hlcyBvbmUgcGFnZQorICogIC0gZmx1c2hfdGxiX2tlcm5lbF92bSgpIGZsdXNoZXMgdGhlIGtlcm5lbCB2bSBhcmVhCisgKiAgLSBmbHVzaF90bGJfcmFuZ2Uodm1hLCBzdGFydCwgZW5kKSBmbHVzaGVzIGEgcmFuZ2Ugb2YgcGFnZXMKKyAqICAtIGZsdXNoX3RsYl9wZ3RhYmxlcyhtbSwgc3RhcnQsIGVuZCkgZmx1c2hlcyBhIHJhbmdlIG9mIHBhZ2UgdGFibGVzCisgKi8KKworZXh0ZXJuIHZvaWQgZmx1c2hfdGxiX2FsbCh2b2lkKTsKK2V4dGVybiB2b2lkIGZsdXNoX3RsYl9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CitleHRlcm4gdm9pZCBmbHVzaF90bGJfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIAorCQkJICAgIHVuc2lnbmVkIGxvbmcgZW5kKTsKK2V4dGVybiB2b2lkIGZsdXNoX3RsYl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHZtYWRkcik7CitleHRlcm4gdm9pZCBmbHVzaF90bGJfa2VybmVsX3ZtKHZvaWQpOworZXh0ZXJuIHZvaWQgZmx1c2hfdGxiX2tlcm5lbF9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7CitleHRlcm4gdm9pZCBfX2ZsdXNoX3RsYl9vbmUodW5zaWduZWQgbG9uZyBhZGRyKTsKKworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9wZ3RhYmxlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKK30KKworI2VuZGlmCisKKy8qCisgKiBPdmVycmlkZXMgZm9yIEVtYWNzIHNvIHRoYXQgd2UgZm9sbG93IExpbnVzJ3MgdGFiYmluZyBzdHlsZS4KKyAqIEVtYWNzIHdpbGwgbm90aWNlIHRoaXMgc3R1ZmYgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgYXV0b21hdGljYWxseQorICogYWRqdXN0IHRoZSBzZXR0aW5ncyBmb3IgdGhpcyBidWZmZXIgb25seS4gIFRoaXMgbXVzdCByZW1haW4gYXQgdGhlIGVuZAorICogb2YgdGhlIGZpbGUuCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqIGMtZmlsZS1zdHlsZTogImxpbnV4IgorICogRW5kOgorICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS90b3BvbG9neS5oIGIvaW5jbHVkZS9hc20tdW0vdG9wb2xvZ3kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTA1ZTRmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdW0vdG9wb2xvZ3kuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX0FTTV9VTV9UT1BPTE9HWV9ICisjZGVmaW5lIF9BU01fVU1fVE9QT0xPR1lfSAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdG9wb2xvZ3kuaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS90eXBlcy5oIGIvaW5jbHVkZS9hc20tdW0vdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTZlOTU5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdW0vdHlwZXMuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19VTV9UWVBFU19ICisjZGVmaW5lIF9fVU1fVFlQRVNfSAorCisjaW5jbHVkZSAiYXNtL2FyY2gvdHlwZXMuaCIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS91YWNjZXNzLmggYi9pbmNsdWRlL2FzbS11bS91YWNjZXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAxNzEwZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXVtL3VhY2Nlc3MuaApAQCAtMCwwICsxLDEwMiBAQAorLyogCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgSmVmZiBEaWtlIChqZGlrZUBrYXJheWEuY29tKQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTAorICovCisKKyNpZm5kZWYgX19VTV9VQUNDRVNTX0gKKyNkZWZpbmUgX19VTV9VQUNDRVNTX0gKKworI2luY2x1ZGUgImxpbnV4L3NjaGVkLmgiCisKKyNkZWZpbmUgVkVSSUZZX1JFQUQgMAorI2RlZmluZSBWRVJJRllfV1JJVEUgMQorCisvKgorICogVGhlIGZzIHZhbHVlIGRldGVybWluZXMgd2hldGhlciBhcmd1bWVudCB2YWxpZGl0eSBjaGVja2luZyBzaG91bGQgYmUKKyAqIHBlcmZvcm1lZCBvciBub3QuICBJZiBnZXRfZnMoKSA9PSBVU0VSX0RTLCBjaGVja2luZyBpcyBwZXJmb3JtZWQsIHdpdGgKKyAqIGdldF9mcygpID09IEtFUk5FTF9EUywgY2hlY2tpbmcgaXMgYnlwYXNzZWQuCisgKgorICogRm9yIGhpc3RvcmljYWwgcmVhc29ucywgdGhlc2UgbWFjcm9zIGFyZSBncm9zc2x5IG1pc25hbWVkLgorICovCisKKyNkZWZpbmUgTUFLRV9NTV9TRUcocykJKChtbV9zZWdtZW50X3QpIHsgKHMpIH0pCisKKyNkZWZpbmUgS0VSTkVMX0RTCU1BS0VfTU1fU0VHKDB4RkZGRkZGRkYpCisjZGVmaW5lIFVTRVJfRFMJCU1BS0VfTU1fU0VHKFRBU0tfU0laRSkKKworI2RlZmluZSBnZXRfZHMoKQkoS0VSTkVMX0RTKQorI2RlZmluZSBnZXRfZnMoKQkoY3VycmVudF90aHJlYWRfaW5mbygpLT5hZGRyX2xpbWl0KQorI2RlZmluZSBzZXRfZnMoeCkJKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+YWRkcl9saW1pdCA9ICh4KSkKKworI2RlZmluZSBzZWdtZW50X2VxKGEsIGIpICgoYSkuc2VnID09IChiKS5zZWcpCisKKyNpbmNsdWRlICJ1bV91YWNjZXNzLmgiCisKKyNkZWZpbmUgX19jb3B5X2Zyb21fdXNlcih0bywgZnJvbSwgbikgY29weV9mcm9tX3VzZXIodG8sIGZyb20sIG4pCisKKyNkZWZpbmUgX19jb3B5X3RvX3VzZXIodG8sIGZyb20sIG4pIGNvcHlfdG9fdXNlcih0bywgZnJvbSwgbikKKworI2RlZmluZSBfX2NvcHlfdG9fdXNlcl9pbmF0b21pYyBfX2NvcHlfdG9fdXNlcgorI2RlZmluZSBfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljIF9fY29weV9mcm9tX3VzZXIKKworI2RlZmluZSBfX2dldF91c2VyKHgsIHB0cikgXAorKHsgXAorICAgICAgICBjb25zdCBfX3R5cGVvZl9fKHB0cikgX19wcml2YXRlX3B0ciA9IHB0cjsgXAorICAgICAgICBfX3R5cGVvZl9fKCooX19wcml2YXRlX3B0cikpIF9fcHJpdmF0ZV92YWw7IFwKKyAgICAgICAgaW50IF9fcHJpdmF0ZV9yZXQgPSAtRUZBVUxUOyBcCisgICAgICAgICh4KSA9IDA7IFwKKwlpZiAoX19jb3B5X2Zyb21fdXNlcigmX19wcml2YXRlX3ZhbCwgKF9fcHJpdmF0ZV9wdHIpLCBcCisJICAgIHNpemVvZigqKF9fcHJpdmF0ZV9wdHIpKSkgPT0gMCkge1wKKyAgICAgICAgCSh4KSA9IChfX3R5cGVvZl9fKCooX19wcml2YXRlX3B0cikpKSBfX3ByaXZhdGVfdmFsOyBcCisJCV9fcHJpdmF0ZV9yZXQgPSAwOyBcCisJfSBcCisgICAgICAgIF9fcHJpdmF0ZV9yZXQ7IFwKK30pIAorCisjZGVmaW5lIGdldF91c2VyKHgsIHB0cikgXAorKHsgXAorICAgICAgICBjb25zdCBfX3R5cGVvZl9fKCgqKHB0cikpKSBfX3VzZXIgKnByaXZhdGVfcHRyID0gKHB0cik7IFwKKyAgICAgICAgKGFjY2Vzc19vayhWRVJJRllfUkVBRCwgcHJpdmF0ZV9wdHIsIHNpemVvZigqcHJpdmF0ZV9wdHIpKSA/IFwKKwkgX19nZXRfdXNlcih4LCBwcml2YXRlX3B0cikgOiAoKHgpID0gMCwgLUVGQVVMVCkpOyBcCit9KQorCisjZGVmaW5lIF9fcHV0X3VzZXIoeCwgcHRyKSBcCisoeyBcCisgICAgICAgIF9fdHlwZW9mX18ocHRyKSBfX3ByaXZhdGVfcHRyID0gcHRyOyBcCisgICAgICAgIF9fdHlwZW9mX18oKihfX3ByaXZhdGVfcHRyKSkgX19wcml2YXRlX3ZhbDsgXAorICAgICAgICBpbnQgX19wcml2YXRlX3JldCA9IC1FRkFVTFQ7IFwKKyAgICAgICAgX19wcml2YXRlX3ZhbCA9IChfX3R5cGVvZl9fKCooX19wcml2YXRlX3B0cikpKSAoeCk7IFwKKyAgICAgICAgaWYgKF9fY29weV90b191c2VyKChfX3ByaXZhdGVfcHRyKSwgJl9fcHJpdmF0ZV92YWwsIFwKKwkJCSAgIHNpemVvZigqKF9fcHJpdmF0ZV9wdHIpKSkgPT0gMCkgeyBcCisJCV9fcHJpdmF0ZV9yZXQgPSAwOyBcCisJfSBcCisgICAgICAgIF9fcHJpdmF0ZV9yZXQ7IFwKK30pCisKKyNkZWZpbmUgcHV0X3VzZXIoeCwgcHRyKSBcCisoeyBcCisgICAgICAgIF9fdHlwZW9mX18oKihwdHIpKSBfX3VzZXIgKnByaXZhdGVfcHRyID0gKHB0cik7IFwKKyAgICAgICAgKGFjY2Vzc19vayhWRVJJRllfV1JJVEUsIHByaXZhdGVfcHRyLCBzaXplb2YoKnByaXZhdGVfcHRyKSkgPyBcCisJIF9fcHV0X3VzZXIoeCwgcHJpdmF0ZV9wdHIpIDogLUVGQVVMVCk7IFwKK30pCisKKyNkZWZpbmUgc3RybGVuX3VzZXIoc3RyKSBzdHJubGVuX3VzZXIoc3RyLCB+MFVMID4+IDEpCisKK3N0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkKK3sKKyAgICAgICAgdW5zaWduZWQgbG9uZyBpbnNuOworCXVuc2lnbmVkIGxvbmcgZml4dXA7Cit9OworCisjZW5kaWYKKworLyoKKyAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgorICogRW1hY3Mgd2lsbCBub3RpY2UgdGhpcyBzdHVmZiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBhdXRvbWF0aWNhbGx5CisgKiBhZGp1c3QgdGhlIHNldHRpbmdzIGZvciB0aGlzIGJ1ZmZlciBvbmx5LiAgVGhpcyBtdXN0IHJlbWFpbiBhdCB0aGUgZW5kCisgKiBvZiB0aGUgZmlsZS4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogTG9jYWwgdmFyaWFibGVzOgorICogYy1maWxlLXN0eWxlOiAibGludXgiCisgKiBFbmQ6CisgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3Vjb250ZXh0LmggYi9pbmNsdWRlL2FzbS11bS91Y29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjOTZjMGUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS11bS91Y29udGV4dC5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfQVNNX1VNX1VDT05URVhUX0gKKyNkZWZpbmUgX0FTTV9VTV9VQ09OVEVYVF9ICisKKyNpbmNsdWRlICJhc20vYXJjaC91Y29udGV4dC5oIgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3VuYWxpZ25lZC5oIGIvaW5jbHVkZS9hc20tdW0vdW5hbGlnbmVkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQyNDk3YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXVtL3VuYWxpZ25lZC5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfX1VNX1VOQUxJR05FRF9ICisjZGVmaW5lIF9fVU1fVU5BTElHTkVEX0gKKworI2luY2x1ZGUgImFzbS9hcmNoL3VuYWxpZ25lZC5oIgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20tdW0vdW5pc3RkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZkZGU0NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXVtL3VuaXN0ZC5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qIAorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwNCAgSmVmZiBEaWtlIChqZGlrZUBrYXJheWEuY29tKQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTAorICovCisKKyNpZm5kZWYgX1VNX1VOSVNURF9IXworI2RlZmluZSBfVU1fVU5JU1REX0hfCisKKyNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgorI2luY2x1ZGUgImxpbnV4L3Jlc291cmNlLmgiCisjaW5jbHVkZSAiYXNtL3VhY2Nlc3MuaCIKKworZXh0ZXJuIGludCB1bV9leGVjdmUoY29uc3QgY2hhciAqZmlsZSwgY2hhciAqY29uc3QgYXJndltdLCBjaGFyICpjb25zdCBlbnZbXSk7CisKKyNpZmRlZiBfX0tFUk5FTF9fCisvKiBXZSBnZXQgX19BUkNIX1dBTlRfT0xEX1NUQVQgYW5kIF9fQVJDSF9XQU5UX1NUQVQ2NCBmcm9tIHRoZSBiYXNlIGFyY2ggKi8KKyNkZWZpbmUgX19BUkNIX1dBTlRfSVBDX1BBUlNFX1ZFUlNJT04KKyNkZWZpbmUgX19BUkNIX1dBTlRfT0xEX1JFQURESVIKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0FMQVJNCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19HRVRIT1NUTkFNRQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfUEFVU0UKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NHRVRNQVNLCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdOQUwKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1RJTUUKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1VUSU1FCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19XQUlUUElECisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TT0NLRVRDQUxMCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19GQURWSVNFNjQKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0dFVFBHUlAKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0xMU0VFSworI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfTklDRQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfT0xEX0dFVFJMSU1JVAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfT0xEVU1PVU5UCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdQRU5ESU5HCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdQUk9DTUFTSworI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfUlRfU0lHQUNUSU9OCisjZW5kaWYKKworI2lmZGVmIF9fS0VSTkVMX1NZU0NBTExTX18KKworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RhdGljIGlubGluZSBpbnQgZXhlY3ZlKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjaGFyICpjb25zdCBhcmd2W10sCisJCQkgY2hhciAqY29uc3QgZW52cFtdKQoreworCW1tX3NlZ21lbnRfdCBmczsKKwlpbnQgcmV0OworCisJZnMgPSBnZXRfZnMoKTsKKwlzZXRfZnMoS0VSTkVMX0RTKTsKKwlyZXQgPSB1bV9leGVjdmUoZmlsZW5hbWUsIGFyZ3YsIGVudnApOworCXNldF9mcyhmcyk7CisKKwlpZiAocmV0ID49IDApCisJCXJldHVybiByZXQ7CisKKwllcnJubyA9IC0obG9uZylyZXQ7CisJcmV0dXJuIC0xOworfQorCitpbnQgc3lzX2V4ZWN2ZShjaGFyICpmaWxlLCBjaGFyICoqYXJndiwgY2hhciAqKmVudik7CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9TWVNDQUxMU19fICovCisKKyN1bmRlZiBfX0tFUk5FTF9TWVNDQUxMU19fCisjaW5jbHVkZSAiYXNtL2FyY2gvdW5pc3RkLmgiCisKKyNlbmRpZiAvKiBfVU1fVU5JU1REX0hfKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3VzZXIuaCBiL2luY2x1ZGUvYXNtLXVtL3VzZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWU0MTRlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdW0vdXNlci5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfX1VNX1VTRVJfSAorI2RlZmluZSBfX1VNX1VTRVJfSAorCisjaW5jbHVkZSAiYXNtL2FyY2gvdXNlci5oIgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3ZnYS5oIGIvaW5jbHVkZS9hc20tdW0vdmdhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTAzYTU5MgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXVtL3ZnYS5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfX1VNX1ZHQV9ICisjZGVmaW5lIF9fVU1fVkdBX0gKKworI2luY2x1ZGUgImFzbS9hcmNoL3ZnYS5oIgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3ZtLWZsYWdzLWkzODYuaCBiL2luY2x1ZGUvYXNtLXVtL3ZtLWZsYWdzLWkzODYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGQyNGM1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdW0vdm0tZmxhZ3MtaTM4Ni5oCkBAIC0wLDAgKzEsMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgSmVmZiBEaWtlIChqZGlrZUBhZGR0b2l0LmNvbSkKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwKKyAqLworCisjaWZuZGVmIF9fVk1fRkxBR1NfSTM4Nl9ICisjZGVmaW5lIF9fVk1fRkxBR1NfSTM4Nl9ICisKKyNkZWZpbmUgVk1fREFUQV9ERUZBVUxUX0ZMQUdTIFwKKwkoVk1fUkVBRCB8IFZNX1dSSVRFIHwgXAorCSgoY3VycmVudC0+cGVyc29uYWxpdHkgJiBSRUFEX0lNUExJRVNfRVhFQykgPyBWTV9FWEVDIDogMCApIHwgXAorCQkgVk1fTUFZUkVBRCB8IFZNX01BWVdSSVRFIHwgVk1fTUFZRVhFQykKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS92bS1mbGFncy14ODZfNjQuaCBiL2luY2x1ZGUvYXNtLXVtL3ZtLWZsYWdzLXg4Nl82NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyMTNlZGYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS11bS92bS1mbGFncy14ODZfNjQuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0IEplZmYgRGlrZSAoamRpa2VAYWRkdG9pdC5jb20pCisgKiBDb3B5cmlnaHQgMjAwMyBQYXRoU2NhbGUsIEluYy4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwKKyAqLworCisjaWZuZGVmIF9fVk1fRkxBR1NfWDg2XzY0X0gKKyNkZWZpbmUgX19WTV9GTEFHU19YODZfNjRfSAorCisjZGVmaW5lIF9fVk1fREFUQV9ERUZBVUxUX0ZMQUdTCShWTV9SRUFEIHwgVk1fV1JJVEUgfCBWTV9FWEVDIHwgXAorCQkJCSBWTV9NQVlSRUFEIHwgVk1fTUFZV1JJVEUgfCBWTV9NQVlFWEVDKQorI2RlZmluZSBfX1ZNX1NUQUNLX0ZMQUdTIAkoVk1fR1JPV1NET1dOIHwgVk1fUkVBRCB8IFZNX1dSSVRFIHwgXAorCQkJCSBWTV9FWEVDIHwgVk1fTUFZUkVBRCB8IFZNX01BWVdSSVRFIHwgXAorCQkJCSBWTV9NQVlFWEVDKQorCitleHRlcm4gdW5zaWduZWQgbG9uZyB2bV9zdGFja19mbGFncywgdm1fc3RhY2tfZmxhZ3MzMjsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHZtX2RhdGFfZGVmYXVsdF9mbGFncywgdm1fZGF0YV9kZWZhdWx0X2ZsYWdzMzI7CitleHRlcm4gdW5zaWduZWQgbG9uZyB2bV9mb3JjZV9leGVjMzI7CisKKyNpZmRlZiBUSUZfSUEzMgorI2RlZmluZSBWTV9EQVRBX0RFRkFVTFRfRkxBR1MgXAorCSh0ZXN0X3RocmVhZF9mbGFnKFRJRl9JQTMyKSA/IHZtX2RhdGFfZGVmYXVsdF9mbGFnczMyIDogXAorCSAgdm1fZGF0YV9kZWZhdWx0X2ZsYWdzKQorCisjZGVmaW5lIFZNX1NUQUNLX0RFRkFVTFRfRkxBR1MgXAorCSh0ZXN0X3RocmVhZF9mbGFnKFRJRl9JQTMyKSA/IHZtX3N0YWNrX2ZsYWdzMzIgOiB2bV9zdGFja19mbGFncykKKyNlbmRpZgorCisjZGVmaW5lIFZNX0RBVEFfREVGQVVMVF9GTEFHUyB2bV9kYXRhX2RlZmF1bHRfZmxhZ3MKKworI2RlZmluZSBWTV9TVEFDS19ERUZBVUxUX0ZMQUdTIHZtX3N0YWNrX2ZsYWdzCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0veG9yLmggYi9pbmNsdWRlL2FzbS11bS94b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTlkYjNlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdW0veG9yLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fVU1fWE9SX0gKKyNkZWZpbmUgX19VTV9YT1JfSAorCisjaW5jbHVkZSAiYXNtLWdlbmVyaWMveG9yLmgiCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdjg1MC9hLm91dC5oIGIvaW5jbHVkZS9hc20tdjg1MC9hLm91dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5NDM5YTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS12ODUwL2Eub3V0LmgKQEAgLTAsMCArMSwyMSBAQAorI2lmbmRlZiBfX1Y4NTBfQV9PVVRfSF9fCisjZGVmaW5lIF9fVjg1MF9BX09VVF9IX18KKworc3RydWN0IGV4ZWMKK3sKKyAgdW5zaWduZWQgbG9uZyBhX2luZm87CQkvKiBVc2UgbWFjcm9zIE5fTUFHSUMsIGV0YyBmb3IgYWNjZXNzICovCisgIHVuc2lnbmVkIGFfdGV4dDsJCS8qIGxlbmd0aCBvZiB0ZXh0LCBpbiBieXRlcyAqLworICB1bnNpZ25lZCBhX2RhdGE7CQkvKiBsZW5ndGggb2YgZGF0YSwgaW4gYnl0ZXMgKi8KKyAgdW5zaWduZWQgYV9ic3M7CQkvKiBsZW5ndGggb2YgdW5pbml0aWFsaXplZCBkYXRhIGFyZWEgZm9yIGZpbGUsIGluIGJ5dGVzICovCisgIHVuc2lnbmVkIGFfc3ltczsJCS8qIGxlbmd0aCBvZiBzeW1ib2wgdGFibGUgZGF0YSBpbiBmaWxlLCBpbiBieXRlcyAqLworICB1bnNpZ25lZCBhX2VudHJ5OwkJLyogc3RhcnQgYWRkcmVzcyAqLworICB1bnNpZ25lZCBhX3Ryc2l6ZTsJCS8qIGxlbmd0aCBvZiByZWxvY2F0aW9uIGluZm8gZm9yIHRleHQsIGluIGJ5dGVzICovCisgIHVuc2lnbmVkIGFfZHJzaXplOwkJLyogbGVuZ3RoIG9mIHJlbG9jYXRpb24gaW5mbyBmb3IgZGF0YSwgaW4gYnl0ZXMgKi8KK307CisKKyNkZWZpbmUgTl9UUlNJWkUoYSkJKChhKS5hX3Ryc2l6ZSkKKyNkZWZpbmUgTl9EUlNJWkUoYSkJKChhKS5hX2Ryc2l6ZSkKKyNkZWZpbmUgTl9TWU1TSVpFKGEpCSgoYSkuYV9zeW1zKQorCisKKyNlbmRpZiAvKiBfX1Y4NTBfQV9PVVRfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS12ODUwL2FubmEuaCBiL2luY2x1ZGUvYXNtLXY4NTAvYW5uYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiZTc3ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS12ODUwL2FubmEuaApAQCAtMCwwICsxLDE0MyBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLXY4NTAvYW5uYS5oIC0tIEFubmEgVjg1MEUyIGV2YWx1YXRpb24gY3B1IGNoaXAvYm9hcmQKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxLDAyLDAzICBORUMgRWxlY3Ryb25pY3MgQ29ycG9yYXRpb24KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEsMDIsMDMgIE1pbGVzIEJhZGVyIDxtaWxlc0BnbnUub3JnPgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMKKyAqIGFyY2hpdmUgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBXcml0dGVuIGJ5IE1pbGVzIEJhZGVyIDxtaWxlc0BnbnUub3JnPgorICovCisKKyNpZm5kZWYgX19WODUwX0FOTkFfSF9fCisjZGVmaW5lIF9fVjg1MF9BTk5BX0hfXworCisjaW5jbHVkZSA8YXNtL3Y4NTBlMi5oPgkJLyogQmFzZWQgb24gVjg1MEUyIGNvcmUuICAqLworCisKKyNkZWZpbmUgQ1BVX01PREVMCSJ2ODUwZTIvYW5uYSIKKyNkZWZpbmUgQ1BVX01PREVMX0xPTkcJIk5FQyBWODUwRTIvQW5uYSIKKyNkZWZpbmUgUExBVEZPUk0JImFubmEiCisjZGVmaW5lIFBMQVRGT1JNX0xPTkcJIk5FQy9NaWRhcyBsYWIgVjg1MEUyL0FubmEgZXZhbHVhdGlvbiBib2FyZCIKKworI2RlZmluZSBDUFVfQ0xPQ0tfRlJFUQkyMDAwMDAwMDAgLyogIDIwME1IeiAqLworI2RlZmluZSBTWVNfQ0xPQ0tfRlJFUQkgMzMzMDAwMDAgLyogMzMuM01IeiAqLworCisKKy8qIDFNQiBvZiBzdGF0aWMgUkFNLiAgVGhpcyBtZW1vcnkgaXMgbWlycm9yZWQgNjQgdGltZXMuICAqLworI2RlZmluZSBTUkFNX0FERFIJMHgwNDAwMDAwMAorI2RlZmluZSBTUkFNX1NJWkUJMHgwMDEwMDAwMCAvKiAxTUIgKi8KKy8qIDY0TUIgb2YgRFJBTS4gICovCisjZGVmaW5lIFNEUkFNX0FERFIJMHgwODAwMDAwMAkKKyNkZWZpbmUgU0RSQU1fU0laRQkweDA0MDAwMDAwIC8qIDY0TUIgKi8KKworCisvKiBGb3IgPGFzbS9wYWdlLmg+ICovCisjZGVmaW5lIFBBR0VfT0ZGU0VUIAlTUkFNX0FERFIKKworLyogV2UgdXNlIG9uLWNoaXAgUkFNLCBmb3IgYSBmZXcgbWlzY2VsbGFuZW91cyB2YXJpYWJsZXMgdGhhdCBtdXN0IGJlCisgICBhY2Nlc3NpYmxlIHVzaW5nIGEgbG9hZCBpbnN0cnVjdGlvbiByZWxhdGl2ZSB0byBSMC4gIFRoZSBBbm5hIGNoaXAgaGFzCisgICAxMjhLIG9mIGBkTEInIHJhbSBub21pbmFsbHkgbG9jYXRlZCBhdCAweEZGRjAwMDAwLCBidXQgaXQncyBtaXJyb3JlZAorICAgZXZlcnkgMTI4Sywgc28gd2UgY2FuIHVzZSB0aGUgYGxhc3QgbWlycm9yJyAoZXhjZXB0IGZvciB0aGUgcG9ydGlvbiBhdAorICAgdGhlIHRvcCB3aGljaCBpcyBvdmVycmlkZGVuIGJ5IEkvTyBzcGFjZSkuICBJbiBhZGRpdGlvbiwgdGhlIGVhcmx5CisgICBzYW1wbGUgY2hpcCB3ZSdyZSB1c2luZyBoYXMgbG90cyBvZiBtZW1vcnkgZXJyb3JzIGluIHRoZSBkTEIgcmFtLCBzbyB3ZQorICAgdXNlIGEgc3BlY2lhbGx5IGNob3NlbiBsb2NhdGlvbiB0aGF0IGhhcyBhdCBsZWFzdCAyMCBieXRlcyBvZiBjb250aWd1b3VzCisgICB2YWxpZCBtZW1vcnkgKHh4eEYwMDIwIC0geHh4RjAwM0YpLiAgKi8KKyNkZWZpbmUgUjBfUkFNX0FERFIJCQkweEZGRkY4MDIwCisKKworLyogQW5uYSBzcGVjaWZpYyBjb250cm9sIHJlZ2lzdGVycy4gICovCisjZGVmaW5lIEFOTkFfSUxCRU5fQUREUgkJCTB4RkZGRkY3RjIKKyNkZWZpbmUgQU5OQV9JTEJFTgkJCSgqKHZvbGF0aWxlIHUxNiAqKUFOTkFfSUxCRU5fQUREUikKKworCisvKiBJL08gcG9ydCBQMC1QMy4gKi8KKy8qIERpcmVjdCBJL08uICBCaXRzIDAtNyBhcmUgcGlucyBQbjAtUG43LiAgKi8KKyNkZWZpbmUgQU5OQV9QT1JUX0lPX0FERFIobikJCSgweEZGRkZGNDAwICsgKG4pICogMikKKyNkZWZpbmUgQU5OQV9QT1JUX0lPKG4pCQkJKCoodm9sYXRpbGUgdTggKilBTk5BX1BPUlRfSU9fQUREUihuKSkKKy8qIFBvcnQgbW9kZSAoZm9yIGRpcmVjdCBJL08sIDAgPSBvdXRwdXQsIDEgPSBpbnB1dCkuICAqLworI2RlZmluZSBBTk5BX1BPUlRfUE1fQUREUihuKQkJKDB4RkZGRkY0MTAgKyAobikgKiAyKQorI2RlZmluZSBBTk5BX1BPUlRfUE0obikJCQkoKih2b2xhdGlsZSB1OCAqKUFOTkFfUE9SVF9QTV9BRERSKG4pKQorCisKKy8qIEhhcmR3YXJlLXNwZWNpZmljIGludGVycnVwdCBudW1iZXJzIChpbiB0aGUga2VybmVsIElSUSBuYW1lc3BhY2UpLiAgKi8KKyNkZWZpbmUgSVJRX0lOVFAobikJKG4pCS8qIFBubm4gKHBpbikgaW50ZXJydXB0cyAwLTE1ICovCisjZGVmaW5lIElSUV9JTlRQX05VTQkxNgorI2RlZmluZSBJUlFfSU5UT1YobikJKDB4MTAgKyAobikpIC8qIDAtMiAqLworI2RlZmluZSBJUlFfSU5UT1ZfTlVNCTIKKyNkZWZpbmUgSVJRX0lOVENDQyhuKQkoMHgxMiArIChuKSkKKyNkZWZpbmUgSVJRX0lOVENDQ19OVU0JNAorI2RlZmluZSBJUlFfSU5UQ01EKG4pCSgweDE2ICsgKG4pKSAvKiBpbnRlcnZhbCB0aW1lciBpbnRlcnJ1cHRzIDAtNSAqLworI2RlZmluZSBJUlFfSU5UQ01EX05VTQk2CisjZGVmaW5lIElSUV9JTlRETUEobikJKDB4MUMgKyAobikpIC8qIERNQSBpbnRlcnJ1cHRzIDAtMyAqLworI2RlZmluZSBJUlFfSU5URE1BX05VTQk0CisjZGVmaW5lIElSUV9JTlRETVhFUgkweDIwCisjZGVmaW5lIElSUV9JTlRTUkUobikJKDB4MjEgKyAobikqMykgLyogVUFSVCAwLTEgcmVjZXB0aW9uIGVycm9yICovCisjZGVmaW5lIElSUV9JTlRTUkVfTlVNCTIKKyNkZWZpbmUgSVJRX0lOVFNSKG4pCSgweDIyICsgKG4pKjMpIC8qIFVBUlQgMC0xIHJlY2VwdGlvbiBjb21wbGV0aW9uICovCisjZGVmaW5lIElSUV9JTlRTUl9OVU0JMgorI2RlZmluZSBJUlFfSU5UU1QobikJKDB4MjMgKyAobikqMykgLyogVUFSVCAwLTEgdHJhbnNtaXNzaW9uIGNvbXBsZXRpb24gKi8KKyNkZWZpbmUgSVJRX0lOVFNUX05VTQkyCisKKyNkZWZpbmUgTlVNX0NQVV9JUlFTCTY0CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisvKiBJbml0aWFsaXplIGNoaXAgaW50ZXJydXB0cy4gICovCitleHRlcm4gdm9pZCBhbm5hX2luaXRfaXJxcyAodm9pZCk7CisjZW5kaWYKKworCisvKiBBbm5hIFVBUlQgZGV0YWlscyAoYmFzaWNhbGx5IHRoZSBzYW1lIGFzIHRoZSBWODUwRS9NQTEsIGJ1dCAyIGNoYW5uZWxzKS4gICovCisjZGVmaW5lIFY4NTBFX1VBUlRfTlVNX0NIQU5ORUxTCQkyCisjZGVmaW5lIFY4NTBFX1VBUlRfQkFTRV9GUkVRCQkoU1lTX0NMT0NLX0ZSRVEgLyAyKQorI2RlZmluZSBWODUwRV9VQVJUX0NISVBfTkFNRSAJCSJWODUwRTIvTkE4NUUyQSIKKworLyogVGhpcyBpcyB0aGUgVUFSVCBjaGFubmVsIHRoYXQncyBhY3R1YWxseSBjb25uZWN0ZWQgb24gdGhlIGJvYXJkLiAgKi8KKyNkZWZpbmUgVjg1MEVfVUFSVF9DT05TT0xFX0NIQU5ORUwJMQorCisvKiBUaGlzIGlzIGEgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBiZWZvcmUgY29uZmlndXJpbmcgdGhlIFVBUlQuICAqLworI2RlZmluZSBWODUwRV9VQVJUX1BSRV9DT05GSUdVUkUJYW5uYV91YXJ0X3ByZV9jb25maWd1cmUKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitleHRlcm4gdm9pZCBhbm5hX3VhcnRfcHJlX2NvbmZpZ3VyZSAodW5zaWduZWQgY2hhbiwKKwkJCQkgICAgIHVuc2lnbmVkIGNmbGFncywgdW5zaWduZWQgYmF1ZCk7CisjZW5kaWYKKworLyogVGhpcyBib2FyZCBzdXBwb3J0cyBSVFMvQ1RTIGZvciB0aGUgb24tY2hpcCBVQVJULCBidXQgb25seSBmb3IgY2hhbm5lbCAxLiAqLworCisvKiBDVFMgZm9yIFVBUlQgY2hhbm5lbCAxIGlzIHBpbiBQMzcgKGJpdCA3IG9mIHBvcnQgMykuICAqLworI2RlZmluZSBWODUwRV9VQVJUX0NUUyhjaGFuKQkoKGNoYW4pID09IDEgPyAhKEFOTkFfUE9SVF9JTygzKSAmIDB4ODApIDogMSkKKy8qIFJUUyBmb3IgVUFSVCBjaGFubmVsIDEgaXMgcGluIFAwNyAoYml0IDcgb2YgcG9ydCAwKS4gICovCisjZGVmaW5lIFY4NTBFX1VBUlRfU0VUX1JUUyhjaGFuLCB2YWwpCQkJCQkgICAgICBcCisgICBkbyB7CQkJCQkJCQkJICAgICAgXAorCSAgIGlmIChjaGFuID09IDEpIHsJCQkJCQkgICAgICBcCisJCSAgIHVuc2lnbmVkIG9sZCA9IEFOTkFfUE9SVF9JTygwKTsgCQkJICAgICAgXAorCQkgICBpZiAodmFsKQkJCQkJCSAgICAgIFwKKwkJCSAgIEFOTkFfUE9SVF9JTygwKSA9IG9sZCAmIH4weDgwOwkJICAgICAgXAorCQkgICBlbHNlCQkJCQkJCSAgICAgIFwKKwkJCSAgIEFOTkFfUE9SVF9JTygwKSA9IG9sZCB8IDB4ODA7CQkgICAgICBcCisJICAgfQkJCQkJCQkJICAgICAgXAorICAgfSB3aGlsZSAoMCkKKworCisvKiBUaW1lciBDIGRldGFpbHMuICAqLworI2RlZmluZSBWODUwRV9USU1FUl9DX0JBU0VfQUREUgkJMHhGRkZGRjYwMAorCisvKiBUaW1lciBEIGRldGFpbHMgKHRoZSBBbm5hIGFjdHVhbGx5IGhhcyA1IG9mIHRoZXNlOyBzaG91bGQgY2hhbmdlIGxhdGVyKS4gKi8KKyNkZWZpbmUgVjg1MEVfVElNRVJfRF9CQVNFX0FERFIJCTB4RkZGRkY1NDAKKyNkZWZpbmUgVjg1MEVfVElNRVJfRF9UTURfQkFTRV9BRERSIAkoVjg1MEVfVElNRVJfRF9CQVNFX0FERFIgKyAweDApCisjZGVmaW5lIFY4NTBFX1RJTUVSX0RfQ01EX0JBU0VfQUREUiAJKFY4NTBFX1RJTUVSX0RfQkFTRV9BRERSICsgMHgyKQorI2RlZmluZSBWODUwRV9USU1FUl9EX1RNQ0RfQkFTRV9BRERSIAkoVjg1MEVfVElNRVJfRF9CQVNFX0FERFIgKyAweDQpCisKKyNkZWZpbmUgVjg1MEVfVElNRVJfRF9CQVNFX0ZSRVEJCVNZU19DTE9DS19GUkVRCisjZGVmaW5lIFY4NTBFX1RJTUVSX0RfVE1DRF9DU19NSU4JMSAvKiBtaW4gMl4xIGRpdmlkZXIgKi8KKworCisvKiBGb3IgPGFzbS9wYXJhbS5oPiAqLworI2lmbmRlZiBIWgorI2RlZmluZSBIWgkxMDAKKyNlbmRpZgorCisKKyNlbmRpZiAvKiBfX1Y4NTBfQU5OQV9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXY4NTAvYXM4NWVwMS5oIGIvaW5jbHVkZS9hc20tdjg1MC9hczg1ZXAxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU5YmM5MTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS12ODUwL2FzODVlcDEuaApAQCAtMCwwICsxLDE1OCBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLXY4NTAvYXM4NWVwMS5oIC0tIEFTODVFUDEgZXZhbHVhdGlvbiBDUFUgY2hpcC9ib2FyZAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEsMDIsMDMgIE5FQyBFbGVjdHJvbmljcyBDb3Jwb3JhdGlvbgorICogIENvcHlyaWdodCAoQykgMjAwMSwwMiwwMyAgTWlsZXMgQmFkZXIgPG1pbGVzQGdudS5vcmc+CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcworICogYXJjaGl2ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFdyaXR0ZW4gYnkgTWlsZXMgQmFkZXIgPG1pbGVzQGdudS5vcmc+CisgKi8KKworI2lmbmRlZiBfX1Y4NTBfQVM4NUVQMV9IX18KKyNkZWZpbmUgX19WODUwX0FTODVFUDFfSF9fCisKKyNpbmNsdWRlIDxhc20vdjg1MGUuaD4KKworCisjZGVmaW5lIENQVV9NT0RFTAkiYXM4NWVwMSIKKyNkZWZpbmUgQ1BVX01PREVMX0xPTkcJIk5FQyBWODUwRS9BUzg1RVAxIgorI2RlZmluZSBQTEFURk9STQkiQVM4NUVQMSIKKyNkZWZpbmUgUExBVEZPUk1fTE9ORwkiTkVDIFY4NTBFL0FTODVFUDEgZXZhbHVhdGlvbiBib2FyZCIKKworI2RlZmluZSBDUFVfQ0xPQ0tfRlJFUQk5NjAwMDAwMCAvKiAgOTZNSHogKi8KKyNkZWZpbmUgU1lTX0NMT0NLX0ZSRVEJQ1BVX0NMT0NLX0ZSRVEKKworCisvKiAxTUIgb2Ygc3RhdGljIFJBTS4gICovCisjZGVmaW5lIFNSQU1fQUREUgkweDAwNDAwMDAwCisjZGVmaW5lIFNSQU1fU0laRQkweDAwMTAwMDAwIC8qIDFNQiAqLworLyogQWJvdXQgNThNQiBvZiBEUkFNLiAgVGhpcyBjYW4gYWN0dWFsbHkgYmUgYXQgb25lIG9mIHR3byBwb3NpdGlvbnMsCisgICBkZXRlcm1pbmVkIGJ5IGp1bXAgSlAzOyB3ZSBoYXZlIHRvIHVzZSB0aGUgZmlyc3QgcG9zaXRpb24gYmVjYXVzZSB0aGUKKyAgIHNlY29uZCBpcyBwYXJ0aWFsbHkgb3V0IG9mIHByb2Nlc3NvciBpbnN0cnVjdGlvbiBhZGRyZXNzaW5nIHJhbmdlCisgICAodGhvdWdoIGluIHRoZSBzZWNvbmQgcG9zaXRpb24gdGhlcmUncyBhY3R1YWxseSA2NE1CIGF2YWlsYWJsZSkuICAqLworI2RlZmluZSBTRFJBTV9BRERSCTB4MDA2MDAwMDAKKyNkZWZpbmUgU0RSQU1fU0laRQkweDAzOUY4MDAwIC8qIGFwcHJveCA1OE1CICovCisKKy8qIEZvciA8YXNtL3BhZ2UuaD4gKi8KKyNkZWZpbmUgUEFHRV9PRkZTRVQgCVNSQU1fQUREUgorCisvKiBXZSB1c2Ugb24tY2hpcCBSQU0sIGZvciBhIGZldyBtaXNjZWxsYW5lb3VzIHZhcmlhYmxlcyB0aGF0IG11c3QgYmUKKyAgIGFjY2Vzc2libGUgdXNpbmcgYSBsb2FkIGluc3RydWN0aW9uIHJlbGF0aXZlIHRvIFIwLiAgVGhlIEFTODVFUDEgY2hpcAorICAgMTZLIG9mIGludGVybmFsIFJBTSBsb2NhdGVkIHNsaWdodGx5IGJlZm9yZSBJL08gc3BhY2UuICAqLworI2RlZmluZSBSMF9SQU1fQUREUgkweEZGRkY4MDAwCisKKworLyogQVM4NUVQMSBzcGVjaWZpYyBjb250cm9sIHJlZ2lzdGVycy4gICovCisjZGVmaW5lIEFTODVFUDFfQ1NDX0FERFIobikJKDB4RkZGRkYwNjAgKyAobikgKiAyKQorI2RlZmluZSBBUzg1RVAxX0NTQyhuKQkJKCoodm9sYXRpbGUgdTE2ICopQVM4NUVQMV9DU0NfQUREUihuKSkKKyNkZWZpbmUgQVM4NUVQMV9CU0NfQUREUgkweEZGRkZGMDY2CisjZGVmaW5lIEFTODVFUDFfQlNDCQkoKih2b2xhdGlsZSB1MTYgKilBUzg1RVAxX0JTQ19BRERSKQorI2RlZmluZSBBUzg1RVAxX0JDVF9BRERSKG4pCSgweEZGRkZGNDgwICsgKG4pICogMikKKyNkZWZpbmUgQVM4NUVQMV9CQ1QobikJCSgqKHZvbGF0aWxlIHUxNiAqKUFTODVFUDFfQkNUX0FERFIobikpCisjZGVmaW5lIEFTODVFUDFfRFdDX0FERFIobikJKDB4RkZGRkY0ODQgKyAobikgKiAyKQorI2RlZmluZSBBUzg1RVAxX0RXQyhuKQkJKCoodm9sYXRpbGUgdTE2ICopQVM4NUVQMV9EV0NfQUREUihuKSkKKyNkZWZpbmUgQVM4NUVQMV9CQ0NfQUREUgkweEZGRkZGNDg4CisjZGVmaW5lIEFTODVFUDFfQkNDCQkoKih2b2xhdGlsZSB1MTYgKilBUzg1RVAxX0JDQ19BRERSKQorI2RlZmluZSBBUzg1RVAxX0FTQ19BRERSCTB4RkZGRkY0OEEKKyNkZWZpbmUgQVM4NUVQMV9BU0MJCSgqKHZvbGF0aWxlIHUxNiAqKUFTODVFUDFfQVNDX0FERFIpCisjZGVmaW5lIEFTODVFUDFfQkNQX0FERFIJMHhGRkZGRjQ4QworI2RlZmluZSBBUzg1RVAxX0JDUAkJKCoodm9sYXRpbGUgdTE2ICopQVM4NUVQMV9CQ1BfQUREUikKKyNkZWZpbmUgQVM4NUVQMV9MQlNfQUREUgkweEZGRkZGNDhFCisjZGVmaW5lIEFTODVFUDFfTEJTCQkoKih2b2xhdGlsZSB1MTYgKilBUzg1RVAxX0xCU19BRERSKQorI2RlZmluZSBBUzg1RVAxX0JNQ19BRERSCTB4RkZGRkY0OTgKKyNkZWZpbmUgQVM4NUVQMV9CTUMJCSgqKHZvbGF0aWxlIHUxNiAqKUFTODVFUDFfQk1DX0FERFIpCisjZGVmaW5lIEFTODVFUDFfUFJDX0FERFIJMHhGRkZGRjQ5QQorI2RlZmluZSBBUzg1RVAxX1BSQwkJKCoodm9sYXRpbGUgdTE2ICopQVM4NUVQMV9QUkNfQUREUikKKyNkZWZpbmUgQVM4NUVQMV9TQ1JfQUREUihuKQkoMHhGRkZGRjRBMCArIChuKSAqIDQpCisjZGVmaW5lIEFTODVFUDFfU0NSKG4pCQkoKih2b2xhdGlsZSB1MTYgKilBUzg1RVAxX1NDUl9BRERSKG4pKQorI2RlZmluZSBBUzg1RVAxX1JGU19BRERSKG4pCSgweEZGRkZGNEEyICsgKG4pICogNCkKKyNkZWZpbmUgQVM4NUVQMV9SRlMobikJCSgqKHZvbGF0aWxlIHUxNiAqKUFTODVFUDFfUkZTX0FERFIobikpCisjZGVmaW5lIEFTODVFUDFfSVJBTU1fQUREUgkweEZGRkZGODBBCisjZGVmaW5lIEFTODVFUDFfSVJBTU0JCSgqKHZvbGF0aWxlIHU4ICopQVM4NUVQMV9JUkFNTV9BRERSKQorCisKKworLyogSS9PIHBvcnQgUDAtUDEzLiAqLworLyogRGlyZWN0IEkvTy4gIEJpdHMgMC03IGFyZSBwaW5zIFBuMC1QbjcuICAqLworI2RlZmluZSBBUzg1RVAxX1BPUlRfSU9fQUREUihuKQkoMHhGRkZGRjQwMCArIChuKSAqIDIpCisjZGVmaW5lIEFTODVFUDFfUE9SVF9JTyhuKQkoKih2b2xhdGlsZSB1OCAqKUFTODVFUDFfUE9SVF9JT19BRERSKG4pKQorLyogUG9ydCBtb2RlIChmb3IgZGlyZWN0IEkvTywgMCA9IG91dHB1dCwgMSA9IGlucHV0KS4gICovCisjZGVmaW5lIEFTODVFUDFfUE9SVF9QTV9BRERSKG4pCSgweEZGRkZGNDIwICsgKG4pICogMikKKyNkZWZpbmUgQVM4NUVQMV9QT1JUX1BNKG4pCSgqKHZvbGF0aWxlIHU4ICopQVM4NUVQMV9QT1JUX1BNX0FERFIobikpCisvKiBQb3J0IG1vZGUgY29udHJvbCAoMCA9IGRpcmVjdCBJL08gbW9kZSwgMSA9IGFsdGVybmF0aXZlIEkvTyBtb2RlKS4gICovCisjZGVmaW5lIEFTODVFUDFfUE9SVF9QTUNfQUREUihuKSAoMHhGRkZGRjQ0MCArIChuKSAqIDIpCisjZGVmaW5lIEFTODVFUDFfUE9SVF9QTUMobikJKCoodm9sYXRpbGUgdTggKilBUzg1RVAxX1BPUlRfUE1DX0FERFIobikpCisKKworLyogSGFyZHdhcmUtc3BlY2lmaWMgaW50ZXJydXB0IG51bWJlcnMgKGluIHRoZSBrZXJuZWwgSVJRIG5hbWVzcGFjZSkuICAqLworI2RlZmluZSBJUlFfSU5UQ0NDKG4pCSgweDBDICsgKG4pKQorI2RlZmluZSBJUlFfSU5UQ0NDX05VTQk4CisjZGVmaW5lIElSUV9JTlRDTUQobikJKDB4MTQgKyAobikpIC8qIGludGVydmFsIHRpbWVyIGludGVycnVwdHMgMC01ICovCisjZGVmaW5lIElSUV9JTlRDTURfTlVNCTYKKyNkZWZpbmUgSVJRX0lOVFNSRShuKQkoMHgxRSArIChuKSozKSAvKiBVQVJUIDAtMSByZWNlcHRpb24gZXJyb3IgKi8KKyNkZWZpbmUgSVJRX0lOVFNSRV9OVU0JMgorI2RlZmluZSBJUlFfSU5UU1IobikJKDB4MUYgKyAobikqMykgLyogVUFSVCAwLTEgcmVjZXB0aW9uIGNvbXBsZXRpb24gKi8KKyNkZWZpbmUgSVJRX0lOVFNSX05VTQkyCisjZGVmaW5lIElSUV9JTlRTVChuKQkoMHgyMCArIChuKSozKSAvKiBVQVJUIDAtMSB0cmFuc21pc3Npb24gY29tcGxldGlvbiAqLworI2RlZmluZSBJUlFfSU5UU1RfTlVNCTIKKworI2RlZmluZSBOVU1fQ1BVX0lSUVMJNjQKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKy8qIEluaXRpYWxpemUgY2hpcCBpbnRlcnJ1cHRzLiAgKi8KK2V4dGVybiB2b2lkIGFzODVlcDFfaW5pdF9pcnFzICh2b2lkKTsKKyNlbmRpZgorCisKKy8qIEFTODVFUDEgVUFSVCBkZXRhaWxzIChiYXNpY2FsbHkgdGhlIHNhbWUgYXMgdGhlIFY4NTBFL01BMSwgYnV0IDIgY2hhbm5lbHMpLiAgKi8KKyNkZWZpbmUgVjg1MEVfVUFSVF9OVU1fQ0hBTk5FTFMJCTIKKyNkZWZpbmUgVjg1MEVfVUFSVF9CQVNFX0ZSRVEJCShTWVNfQ0xPQ0tfRlJFUSAvIDQpCisjZGVmaW5lIFY4NTBFX1VBUlRfQ0hJUF9OQU1FIAkJIlY4NTBFL05BODVFIgorCisvKiBUaGlzIGlzIGEgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBiZWZvcmUgY29uZmlndXJpbmcgdGhlIFVBUlQuICAqLworI2RlZmluZSBWODUwRV9VQVJUX1BSRV9DT05GSUdVUkUJYXM4NWVwMV91YXJ0X3ByZV9jb25maWd1cmUKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitleHRlcm4gdm9pZCBhczg1ZXAxX3VhcnRfcHJlX2NvbmZpZ3VyZSAodW5zaWduZWQgY2hhbiwKKwkJCQkJdW5zaWduZWQgY2ZsYWdzLCB1bnNpZ25lZCBiYXVkKTsKKyNlbmRpZgorCisvKiBUaGlzIGJvYXJkIHN1cHBvcnRzIFJUUy9DVFMgZm9yIHRoZSBvbi1jaGlwIFVBUlQsIGJ1dCBvbmx5IGZvciBjaGFubmVsIDEuICovCisKKy8qIENUUyBmb3IgVUFSVCBjaGFubmVsIDEgaXMgcGluIFA1NCAoYml0IDQgb2YgcG9ydCA1KS4gICovCisjZGVmaW5lIFY4NTBFX1VBUlRfQ1RTKGNoYW4pICAgKChjaGFuKSA9PSAxID8gIShBUzg1RVAxX1BPUlRfSU8oNSkgJiAweDEwKSA6IDEpCisvKiBSVFMgZm9yIFVBUlQgY2hhbm5lbCAxIGlzIHBpbiBQNTMgKGJpdCAzIG9mIHBvcnQgNSkuICAqLworI2RlZmluZSBWODUwRV9VQVJUX1NFVF9SVFMoY2hhbiwgdmFsKQkJCQkJICAgICAgXAorICAgZG8gewkJCQkJCQkJCSAgICAgIFwKKwkgICBpZiAoY2hhbiA9PSAxKSB7CQkJCQkJICAgICAgXAorCQkgICB1bnNpZ25lZCBvbGQgPSBBUzg1RVAxX1BPUlRfSU8oNSk7IAkJCSAgICAgIFwKKwkJICAgaWYgKHZhbCkJCQkJCQkgICAgICBcCisJCQkgICBBUzg1RVAxX1BPUlRfSU8oNSkgPSBvbGQgJiB+MHg4OwkJICAgICAgXAorCQkgICBlbHNlCQkJCQkJCSAgICAgIFwKKwkJCSAgIEFTODVFUDFfUE9SVF9JTyg1KSA9IG9sZCB8IDB4ODsJCSAgICAgIFwKKwkgICB9CQkJCQkJCQkgICAgICBcCisgICB9IHdoaWxlICgwKQorCisKKy8qIFRpbWVyIEMgZGV0YWlscy4gICovCisjZGVmaW5lIFY4NTBFX1RJTUVSX0NfQkFTRV9BRERSCQkweEZGRkZGNjAwCisKKy8qIFRpbWVyIEQgZGV0YWlscyAodGhlIEFTODVFUDEgYWN0dWFsbHkgaGFzIDUgb2YgdGhlc2U7IHNob3VsZCBjaGFuZ2UgbGF0ZXIpLiAqLworI2RlZmluZSBWODUwRV9USU1FUl9EX0JBU0VfQUREUgkJMHhGRkZGRjU0MAorI2RlZmluZSBWODUwRV9USU1FUl9EX1RNRF9CQVNFX0FERFIgCShWODUwRV9USU1FUl9EX0JBU0VfQUREUiArIDB4MCkKKyNkZWZpbmUgVjg1MEVfVElNRVJfRF9DTURfQkFTRV9BRERSIAkoVjg1MEVfVElNRVJfRF9CQVNFX0FERFIgKyAweDIpCisjZGVmaW5lIFY4NTBFX1RJTUVSX0RfVE1DRF9CQVNFX0FERFIgCShWODUwRV9USU1FUl9EX0JBU0VfQUREUiArIDB4NCkKKworI2RlZmluZSBWODUwRV9USU1FUl9EX0JBU0VfRlJFUQkJU1lTX0NMT0NLX0ZSRVEKKyNkZWZpbmUgVjg1MEVfVElNRVJfRF9UTUNEX0NTX01JTgkyIC8qIG1pbiAyXjIgZGl2aWRlciAqLworCisKKy8qIEZvciA8YXNtL3BhcmFtLmg+ICovCisjaWZuZGVmIEhaCisjZGVmaW5lIEhaCTEwMAorI2VuZGlmCisKKworI2VuZGlmIC8qIF9fVjg1MF9BUzg1RVAxX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdjg1MC9hc20uaCBiL2luY2x1ZGUvYXNtLXY4NTAvYXNtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmYxZTc4NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXY4NTAvYXNtLmgKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLXY4NTAvYXNtLmggLS0gTWFjcm9zIGZvciB3cml0aW5nIGFzc2VtYmx5IGNvZGUKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxLDAyLDAzICBORUMgRWxlY3Ryb25pY3MgQ29ycG9yYXRpb24KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEsMDIsMDMgIE1pbGVzIEJhZGVyIDxtaWxlc0BnbnUub3JnPgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMKKyAqIGFyY2hpdmUgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBXcml0dGVuIGJ5IE1pbGVzIEJhZGVyIDxtaWxlc0BnbnUub3JnPgorICovCisKKyNkZWZpbmUgR19FTlRSWShuYW1lKQkJCQkJCQkgICAgICBcCisgICAuYmFsaWduIDQ7CQkJCQkJCQkgICAgICBcCisgICAuZ2xvYmwgbmFtZTsJCQkJCQkJCSAgICAgIFwKKyAgIC50eXBlICBuYW1lLEBmdW5jdGlvbjsJCQkJCQkgICAgICBcCisgICBuYW1lCisjZGVmaW5lIEdfREFUQShuYW1lKQkJCQkJCQkgICAgICBcCisgICAuZ2xvYmwgbmFtZTsJCQkJCQkJCSAgICAgIFwKKyAgIC50eXBlICBuYW1lLEBvYmplY3Q7CQkJCQkJCSAgICAgIFwKKyAgIG5hbWUKKyNkZWZpbmUgRU5EKG5hbWUpCQkJCQkJCSAgICAgIFwKKyAgIC5zaXplICBuYW1lLC4tbmFtZQorCisjZGVmaW5lIExfRU5UUlkobmFtZSkJCQkJCQkJICAgICAgXAorICAgLmJhbGlnbiA0OwkJCQkJCQkJICAgICAgXAorICAgLnR5cGUgIG5hbWUsQGZ1bmN0aW9uOwkJCQkJCSAgICAgIFwKKyAgIG5hbWUKKyNkZWZpbmUgTF9EQVRBKG5hbWUpCQkJCQkJCSAgICAgIFwKKyAgIC50eXBlICBuYW1lLEBvYmplY3Q7CQkJCQkJCSAgICAgIFwKKyAgIG5hbWUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXY4NTAvYXRvbWljLmggYi9pbmNsdWRlL2FzbS12ODUwL2F0b21pYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyODRhYTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS12ODUwL2F0b21pYy5oCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS12ODUwL2F0b21pYy5oIC0tIEF0b21pYyBvcGVyYXRpb25zCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMSwwMiAgTkVDIENvcnBvcmF0aW9uCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxLDAyICBNaWxlcyBCYWRlciA8bWlsZXNAZ251Lm9yZz4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzCisgKiBhcmNoaXZlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogV3JpdHRlbiBieSBNaWxlcyBCYWRlciA8bWlsZXNAZ251Lm9yZz4KKyAqLworCisjaWZuZGVmIF9fVjg1MF9BVE9NSUNfSF9fCisjZGVmaW5lIF9fVjg1MF9BVE9NSUNfSF9fCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKworI2lmZGVmIENPTkZJR19TTVAKKyNlcnJvciBTTVAgbm90IHN1cHBvcnRlZAorI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IHsgaW50IGNvdW50ZXI7IH0gYXRvbWljX3Q7CisKKyNkZWZpbmUgQVRPTUlDX0lOSVQoaSkJeyAoaSkgfQorCisjaWZkZWYgX19LRVJORUxfXworCisjZGVmaW5lIGF0b21pY19yZWFkKHYpCQkoKHYpLT5jb3VudGVyKQorI2RlZmluZSBhdG9taWNfc2V0KHYsaSkJCSgoKHYpLT5jb3VudGVyKSA9IChpKSkKKworZXh0ZXJuIF9faW5saW5lX18gaW50IGF0b21pY19hZGRfcmV0dXJuIChpbnQgaSwgdm9sYXRpbGUgYXRvbWljX3QgKnYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmVzOworCisJbG9jYWxfaXJxX3NhdmUgKGZsYWdzKTsKKwlyZXMgPSB2LT5jb3VudGVyICsgaTsKKwl2LT5jb3VudGVyID0gcmVzOworCWxvY2FsX2lycV9yZXN0b3JlIChmbGFncyk7CisKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgYXRvbWljX3N1Yl9yZXR1cm4gKGludCBpLCB2b2xhdGlsZSBhdG9taWNfdCAqdikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXM7CisKKwlsb2NhbF9pcnFfc2F2ZSAoZmxhZ3MpOworCXJlcyA9IHYtPmNvdW50ZXIgLSBpOworCXYtPmNvdW50ZXIgPSByZXM7CisJbG9jYWxfaXJxX3Jlc3RvcmUgKGZsYWdzKTsKKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgYXRvbWljX2NsZWFyX21hc2sgKHVuc2lnbmVkIGxvbmcgbWFzaywgdW5zaWduZWQgbG9uZyAqYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbG9jYWxfaXJxX3NhdmUgKGZsYWdzKTsKKwkqYWRkciAmPSB+bWFzazsKKwlsb2NhbF9pcnFfcmVzdG9yZSAoZmxhZ3MpOworfQorCisjZW5kaWYKKworI2RlZmluZSBhdG9taWNfYWRkKGksIHYpCWF0b21pY19hZGRfcmV0dXJuICgoaSksICh2KSkKKyNkZWZpbmUgYXRvbWljX3N1YihpLCB2KQlhdG9taWNfc3ViX3JldHVybiAoKGkpLCAodikpCisKKyNkZWZpbmUgYXRvbWljX2RlY19yZXR1cm4odikJYXRvbWljX3N1Yl9yZXR1cm4gKDEsICh2KSkKKyNkZWZpbmUgYXRvbWljX2luY19yZXR1cm4odikJYXRvbWljX2FkZF9yZXR1cm4gKDEsICh2KSkKKyNkZWZpbmUgYXRvbWljX2luYyh2KSAJCWF0b21pY19pbmNfcmV0dXJuICh2KQorI2RlZmluZSBhdG9taWNfZGVjKHYpIAkJYXRvbWljX2RlY19yZXR1cm4gKHYpCisKKy8qCisgKiBhdG9taWNfaW5jX2FuZF90ZXN0IC0gaW5jcmVtZW50IGFuZCB0ZXN0CisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CisgKgorICogQXRvbWljYWxseSBpbmNyZW1lbnRzIEB2IGJ5IDEKKyAqIGFuZCByZXR1cm5zIHRydWUgaWYgdGhlIHJlc3VsdCBpcyB6ZXJvLCBvciBmYWxzZSBmb3IgYWxsCisgKiBvdGhlciBjYXNlcy4KKyAqLworI2RlZmluZSBhdG9taWNfaW5jX2FuZF90ZXN0KHYpIChhdG9taWNfaW5jX3JldHVybih2KSA9PSAwKQorCisjZGVmaW5lIGF0b21pY19zdWJfYW5kX3Rlc3QoaSx2KQkoYXRvbWljX3N1Yl9yZXR1cm4gKChpKSwgKHYpKSA9PSAwKQorI2RlZmluZSBhdG9taWNfZGVjX2FuZF90ZXN0KHYpCQkoYXRvbWljX3N1Yl9yZXR1cm4gKDEsICh2KSkgPT0gMCkKKyNkZWZpbmUgYXRvbWljX2FkZF9uZWdhdGl2ZShpLHYpCShhdG9taWNfYWRkX3JldHVybiAoKGkpLCAodikpIDwgMCkKKworLyogQXRvbWljIG9wZXJhdGlvbnMgYXJlIGFscmVhZHkgc2VyaWFsaXppbmcgb24gQVJNICovCisjZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19kZWMoKQliYXJyaWVyKCkKKyNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWNfZGVjKCkJYmFycmllcigpCisjZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19pbmMoKQliYXJyaWVyKCkKKyNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWNfaW5jKCkJYmFycmllcigpCisKKyNlbmRpZiAvKiBfX1Y4NTBfQVRPTUlDX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdjg1MC9iaXRvcHMuaCBiL2luY2x1ZGUvYXNtLXY4NTAvYml0b3BzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M0ZWNhZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXY4NTAvYml0b3BzLmgKQEAgLTAsMCArMSwzNTUgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS12ODUwL2JpdG9wcy5oIC0tIEJpdCBvcGVyYXRpb25zCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMSwwMiwwMywwNCAgTkVDIEVsZWN0cm9uaWNzIENvcnBvcmF0aW9uCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxLDAyLDAzLDA0ICBNaWxlcyBCYWRlciA8bWlsZXNAZ251Lm9yZz4KKyAqICBDb3B5cmlnaHQgKEMpIDE5OTIgIExpbnVzIFRvcnZhbGRzLgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMKKyAqIGFyY2hpdmUgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fVjg1MF9CSVRPUFNfSF9fCisjZGVmaW5lIF9fVjg1MF9CSVRPUFNfSF9fCisKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CS8qIHVubGlrZWx5ICAqLworI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4JLyogc3dhYjMyICovCisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgkJLyogaW50ZXJydXB0IGVuYWJsZS9kaXNhYmxlICovCisKKworI2lmZGVmIF9fS0VSTkVMX18KKworLyoKKyAqIFRoZSBfXyBmdW5jdGlvbnMgYXJlIG5vdCBhdG9taWMKKyAqLworCisvKgorICogZmZ6ID0gRmluZCBGaXJzdCBaZXJvIGluIHdvcmQuIFVuZGVmaW5lZCBpZiBubyB6ZXJvIGV4aXN0cywKKyAqIHNvIGNvZGUgc2hvdWxkIGNoZWNrIGFnYWluc3QgfjBVTCBmaXJzdC4uCisgKi8KK2V4dGVybiBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgZmZ6ICh1bnNpZ25lZCBsb25nIHdvcmQpCit7CisJdW5zaWduZWQgbG9uZyByZXN1bHQgPSAwOworCisJd2hpbGUgKHdvcmQgJiAxKSB7CisJCXJlc3VsdCsrOworCQl3b3JkID4+PSAxOworCX0KKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qIEluIHRoZSBmb2xsb3dpbmcgY29uc3RhbnQtYml0LW9wIG1hY3JvcywgYSAiZyIgY29uc3RyYWludCBpcyB1c2VkIHdoZW4KKyAgIHdlIHJlYWxseSBuZWVkIGFuIGludGVnZXIgKCJpIiBjb25zdHJhaW50KS4gIFRoaXMgaXMgdG8gYXZvaWQKKyAgIHdhcm5pbmdzL2Vycm9ycyBmcm9tIHRoZSBjb21waWxlciBpbiB0aGUgY2FzZSB3aGVyZSB0aGUgYXNzb2NpYXRlZAorICAgb3BlcmFuZCBfaXNuJ3RfIGFuIGludGVnZXIsIGFuZCBzaG91bGRuJ3QgcHJvZHVjZSBib2d1cyBhc3NlbWJseSBiZWNhdXNlCisgICB1c2Ugb2YgdGhhdCBmb3JtIGlzIHByb3RlY3RlZCBieSBhIGd1YXJkIHN0YXRlbWVudCB0aGF0IGNoZWNrcyBmb3IKKyAgIGNvbnN0YW50cywgYW5kIHNob3VsZCBvdGhlcndpc2UgYmUgcmVtb3ZlZCBieSB0aGUgb3B0aW1pemVyLiAgVGhpcworICAgX3VzdWFsbHlfIHdvcmtzIC0tIGhvd2V2ZXIsIF9fYnVpbHRpbl9jb25zdGFudF9wIHJldHVybnMgdHJ1ZSBmb3IgYQorICAgdmFyaWFibGUgd2l0aCBhIGtub3duIGNvbnN0YW50IHZhbHVlIHRvbywgYW5kIHVuZm9ydHVuYXRlbHkgZ2NjIHdpbGwKKyAgIGhhcHBpbHkgcHV0IHRoZSB2YXJpYWJsZSBpbiBhIHJlZ2lzdGVyIGFuZCB1c2UgdGhlIHJlZ2lzdGVyIGZvciB0aGUgImciCisgICBjb25zdHJhaW50J2QgYXNtIG9wZXJhbmQuICBUbyBhdm9pZCB0aGUgbGF0dGVyIHByb2JsZW0sIHdlIGFkZCBhCisgICBjb25zdGFudCBvZmZzZXQgdG8gdGhlIG9wZXJhbmQgYW5kIHN1YnRyYWN0IGl0IGJhY2sgaW4gdGhlIGFzbSBjb2RlOworICAgZm9yY2luZyBnY2MgdG8gZG8gYXJpdGhtZXRpYyBvbiB0aGUgdmFsdWUgaXMgdXN1YWxseSBlbm91Z2ggdG8gZ2V0IGl0CisgICB0byB1c2UgYSByZWFsIGNvbnN0YW50IHZhbHVlLiAgVGhpcyBpcyBob3JyaWJsZSwgYW5kIHVsdGltYXRlbHkKKyAgIHVucmVsaWFibGUgdG9vLCBidXQgaXQgc2VlbXMgdG8gd29yayBmb3Igbm93IChob3BlZnVsbHkgZ2NjIHdpbGwgb2ZmZXIKKyAgIHVzIG1vcmUgY29udHJvbCBpbiB0aGUgZnV0dXJlLCBzbyB3ZSBjYW4gZG8gYSBiZXR0ZXIgam9iKS4gICovCisKKyNkZWZpbmUgX19jb25zdF9iaXRfb3Aob3AsIG5yLCBhZGRyKQkJCQkJXAorICAoeyBfX2FzbV9fIChvcCAiICglMCAtIDB4MTIzKSwgJTEiCQkJCQlcCisJICAgICAgOjogImciICgoKG5yKSAmIDB4NykgKyAweDEyMyksCQkJCVwKKwkJICJtIiAoKigoY2hhciAqKShhZGRyKSArICgobnIpID4+IDMpKSkJCQlcCisJICAgICAgOiAibWVtb3J5Iik7IH0pCisjZGVmaW5lIF9fdmFyX2JpdF9vcChvcCwgbnIsIGFkZHIpCQkJCQlcCisgICh7IGludCBfX25yID0gKG5yKTsJCQkJCQkJXAorICAgICBfX2FzbV9fIChvcCAiICUwLCBbJTFdIgkJCQkJCVwKKwkgICAgICA6OiAiciIgKF9fbnIgJiAweDcpLAkJCQkJXAorCQkgInIiICgoY2hhciAqKShhZGRyKSArIChfX25yID4+IDMpKQkJCVwKKwkgICAgICA6ICJtZW1vcnkiKTsgfSkKKyNkZWZpbmUgX19iaXRfb3Aob3AsIG5yLCBhZGRyKQkJCQkJCVwKKyAgKChfX2J1aWx0aW5fY29uc3RhbnRfcCAobnIpICYmICh1bnNpZ25lZCkobnIpIDw9IDB4N0ZGRkYpCQlcCisgICA/IF9fY29uc3RfYml0X29wIChvcCwgbnIsIGFkZHIpCQkJCQlcCisgICA6IF9fdmFyX2JpdF9vcCAob3AsIG5yLCBhZGRyKSkKKworI2RlZmluZSBfX3NldF9iaXQobnIsIGFkZHIpCQlfX2JpdF9vcCAoInNldDEiLCBuciwgYWRkcikKKyNkZWZpbmUgX19jbGVhcl9iaXQobnIsIGFkZHIpCQlfX2JpdF9vcCAoImNscjEiLCBuciwgYWRkcikKKyNkZWZpbmUgX19jaGFuZ2VfYml0KG5yLCBhZGRyKQkJX19iaXRfb3AgKCJub3QxIiwgbnIsIGFkZHIpCisKKy8qIFRoZSBiaXQgaW5zdHJ1Y3Rpb25zIHVzZWQgYnkgYG5vbi1hdG9taWMnIHZhcmlhbnRzIGFyZSBhY3R1YWxseSBhdG9taWMuICAqLworI2RlZmluZSBzZXRfYml0IF9fc2V0X2JpdAorI2RlZmluZSBjbGVhcl9iaXQgX19jbGVhcl9iaXQKKyNkZWZpbmUgY2hhbmdlX2JpdCBfX2NoYW5nZV9iaXQKKworCisjZGVmaW5lIF9fY29uc3RfdG5zX2JpdF9vcChvcCwgbnIsIGFkZHIpCQkJCSAgICAgIFwKKyAgKHsgaW50IF9fdG5zX3JlczsJCQkJCQkJICAgICAgXAorICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCQkJICAgICAgXAorCSAgICAgInRzdDEgKCUxIC0gMHgxMjMpLCAlMjsgc2V0ZiBueiwgJTA7ICIgb3AgIiAoJTEgLSAweDEyMyksICUyIiAgICBcCisJICAgICA6ICI9JnIiIChfX3Ruc19yZXMpCQkJCQkgICAgICBcCisJICAgICA6ICJnIiAoKChucikgJiAweDcpICsgMHgxMjMpLAkJCQkgICAgICBcCisJICAgICAgICJtIiAoKigoY2hhciAqKShhZGRyKSArICgobnIpID4+IDMpKSkJCQkgICAgICBcCisJICAgICA6ICJtZW1vcnkiKTsJCQkJCQkgICAgICBcCisgICAgIF9fdG5zX3JlczsJCQkJCQkJCSAgICAgIFwKKyAgfSkKKyNkZWZpbmUgX192YXJfdG5zX2JpdF9vcChvcCwgbnIsIGFkZHIpCQkJCQkgICAgICBcCisgICh7IGludCBfX25yID0gKG5yKTsJCQkJCQkJICAgICAgXAorICAgICBpbnQgX190bnNfcmVzOwkJCQkJCQkgICAgICBcCisgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgJCQkJCQkgICAgICBcCisJICAgICAidHN0MSAlMSwgWyUyXTsgc2V0ZiBueiwgJTA7ICIgb3AgIiAlMSwgWyUyXSIJCSAgICAgIFwKKwkgICAgICA6ICI9JnIiIChfX3Ruc19yZXMpCQkJCQkgICAgICBcCisJICAgICAgOiAiciIgKF9fbnIgJiAweDcpLAkJCQkJICAgICAgXAorCQkiciIgKChjaGFyICopKGFkZHIpICsgKF9fbnIgPj4gMykpCQkJICAgICAgXAorCSAgICAgIDogIm1lbW9yeSIpOwkJCQkJCSAgICAgIFwKKyAgICAgX190bnNfcmVzOwkJCQkJCQkJICAgICAgXAorICB9KQorI2RlZmluZSBfX3Ruc19iaXRfb3Aob3AsIG5yLCBhZGRyKQkJCQkJXAorICAoKF9fYnVpbHRpbl9jb25zdGFudF9wIChucikgJiYgKHVuc2lnbmVkKShucikgPD0gMHg3RkZGRikJCVwKKyAgID8gX19jb25zdF90bnNfYml0X29wIChvcCwgbnIsIGFkZHIpCQkJCQlcCisgICA6IF9fdmFyX3Ruc19iaXRfb3AgKG9wLCBuciwgYWRkcikpCisjZGVmaW5lIF9fdG5zX2F0b21pY19iaXRfb3Aob3AsIG5yLCBhZGRyKQkJCQlcCisgICh7IGludCBfX3Ruc19hdG9taWNfcmVzLCBfX3Ruc19hdG9taWNfZmxhZ3M7CQkJCVwKKyAgICAgbG9jYWxfaXJxX3NhdmUgKF9fdG5zX2F0b21pY19mbGFncyk7CQkJCVwKKyAgICAgX190bnNfYXRvbWljX3JlcyA9IF9fdG5zX2JpdF9vcCAob3AsIG5yLCBhZGRyKTsJCQlcCisgICAgIGxvY2FsX2lycV9yZXN0b3JlIChfX3Ruc19hdG9taWNfZmxhZ3MpOwkJCQlcCisgICAgIF9fdG5zX2F0b21pY19yZXM7CQkJCQkJCVwKKyAgfSkKKworI2RlZmluZSBfX3Rlc3RfYW5kX3NldF9iaXQobnIsIGFkZHIpCV9fdG5zX2JpdF9vcCAoInNldDEiLCBuciwgYWRkcikKKyNkZWZpbmUgdGVzdF9hbmRfc2V0X2JpdChuciwgYWRkcikJX190bnNfYXRvbWljX2JpdF9vcCAoInNldDEiLCBuciwgYWRkcikKKworI2RlZmluZSBfX3Rlc3RfYW5kX2NsZWFyX2JpdChuciwgYWRkcikJX190bnNfYml0X29wICgiY2xyMSIsIG5yLCBhZGRyKQorI2RlZmluZSB0ZXN0X2FuZF9jbGVhcl9iaXQobnIsIGFkZHIpCV9fdG5zX2F0b21pY19iaXRfb3AgKCJjbHIxIiwgbnIsIGFkZHIpCisKKyNkZWZpbmUgX190ZXN0X2FuZF9jaGFuZ2VfYml0KG5yLCBhZGRyKQlfX3Ruc19iaXRfb3AgKCJub3QxIiwgbnIsIGFkZHIpCisjZGVmaW5lIHRlc3RfYW5kX2NoYW5nZV9iaXQobnIsIGFkZHIpCV9fdG5zX2F0b21pY19iaXRfb3AgKCJub3QxIiwgbnIsIGFkZHIpCisKKworI2RlZmluZSBfX2NvbnN0X3Rlc3RfYml0KG5yLCBhZGRyKQkJCQkJICAgICAgXAorICAoeyBpbnQgX190ZXN0X2JpdF9yZXM7CQkJCQkJICAgICAgXAorICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInRzdDEgKCUxIC0gMHgxMjMpLCAlMjsgc2V0ZiBueiwgJTAiCQkgICAgICBcCisJCQkgICA6ICI9ciIgKF9fdGVzdF9iaXRfcmVzKQkJCSAgICAgIFwKKwkJCSAgIDogImciICgoKG5yKSAmIDB4NykgKyAweDEyMyksCQkgICAgICBcCisJCQkgICAgICJtIiAoKigoY29uc3QgY2hhciAqKShhZGRyKSArICgobnIpID4+IDMpKSkpOyAgICBcCisgICAgIF9fdGVzdF9iaXRfcmVzOwkJCQkJCQkgICAgICBcCisgIH0pCitleHRlcm4gX19pbmxpbmVfXyBpbnQgX190ZXN0X2JpdCAoaW50IG5yLCBjb25zdCB2b2lkICphZGRyKQoreworCWludCByZXM7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJ0c3QxICUxLCBbJTJdOyBzZXRmIG56LCAlMCIKKwkJCSAgICAgIDogIj1yIiAocmVzKQorCQkJICAgICAgOiAiciIgKG5yICYgMHg3KSwgInIiIChhZGRyICsgKG5yID4+IDMpKSk7CisJcmV0dXJuIHJlczsKK30KKyNkZWZpbmUgdGVzdF9iaXQobnIsYWRkcikJCQkJCQlcCisgICgoX19idWlsdGluX2NvbnN0YW50X3AgKG5yKSAmJiAodW5zaWduZWQpKG5yKSA8PSAweDdGRkZGKQkJXAorICAgPyBfX2NvbnN0X3Rlc3RfYml0ICgobnIpLCAoYWRkcikpCQkJCQlcCisgICA6IF9fdGVzdF9iaXQgKChuciksIChhZGRyKSkpCisKKworLyogY2xlYXJfYml0IGRvZXNuJ3QgcHJvdmlkZSBhbnkgYmFycmllciBmb3IgdGhlIGNvbXBpbGVyLiAgKi8KKyNkZWZpbmUgc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCkJYmFycmllciAoKQorI2RlZmluZSBzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpCWJhcnJpZXIgKCkKKworCisjZGVmaW5lIGZpbmRfZmlyc3RfemVyb19iaXQoYWRkciwgc2l6ZSkgXAorICBmaW5kX25leHRfemVyb19iaXQgKChhZGRyKSwgKHNpemUpLCAwKQorCitleHRlcm4gX19pbmxpbmVfXyBpbnQgZmluZF9uZXh0X3plcm9fYml0ICh2b2lkICphZGRyLCBpbnQgc2l6ZSwgaW50IG9mZnNldCkKK3sKKwl1bnNpZ25lZCBsb25nICpwID0gKCh1bnNpZ25lZCBsb25nICopIGFkZHIpICsgKG9mZnNldCA+PiA1KTsKKwl1bnNpZ25lZCBsb25nIHJlc3VsdCA9IG9mZnNldCAmIH4zMVVMOworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJaWYgKG9mZnNldCA+PSBzaXplKQorCQlyZXR1cm4gc2l6ZTsKKwlzaXplIC09IHJlc3VsdDsKKwlvZmZzZXQgJj0gMzFVTDsKKwlpZiAob2Zmc2V0KSB7CisJCXRtcCA9ICogKHArKyk7CisJCXRtcCB8PSB+MFVMID4+ICgzMi1vZmZzZXQpOworCQlpZiAoc2l6ZSA8IDMyKQorCQkJZ290byBmb3VuZF9maXJzdDsKKwkJaWYgKH50bXApCisJCQlnb3RvIGZvdW5kX21pZGRsZTsKKwkJc2l6ZSAtPSAzMjsKKwkJcmVzdWx0ICs9IDMyOworCX0KKwl3aGlsZSAoc2l6ZSAmIH4zMVVMKSB7CisJCWlmICh+ICh0bXAgPSAqIChwKyspKSkKKwkJCWdvdG8gZm91bmRfbWlkZGxlOworCQlyZXN1bHQgKz0gMzI7CisJCXNpemUgLT0gMzI7CisJfQorCWlmICghc2l6ZSkKKwkJcmV0dXJuIHJlc3VsdDsKKwl0bXAgPSAqcDsKKworIGZvdW5kX2ZpcnN0OgorCXRtcCB8PSB+MFVMID4+IHNpemU7CisgZm91bmRfbWlkZGxlOgorCXJldHVybiByZXN1bHQgKyBmZnogKHRtcCk7Cit9CisKKworLyogVGhpcyBpcyB0aGUgc2FtZSBhcyBnZW5lcmljX2ZmcywgYnV0IHdlIGNhbid0IHVzZSB0aGF0IGJlY2F1c2UgaXQncworICAgaW5saW5lIGFuZCB0aGUgI2luY2x1ZGUgb3JkZXIgbXVja3MgdGhpbmdzIHVwLiAgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGdlbmVyaWNfZmZzX2Zvcl9maW5kX25leHRfYml0KGludCB4KQoreworCWludCByID0gMTsKKworCWlmICgheCkKKwkJcmV0dXJuIDA7CisJaWYgKCEoeCAmIDB4ZmZmZikpIHsKKwkJeCA+Pj0gMTY7CisJCXIgKz0gMTY7CisJfQorCWlmICghKHggJiAweGZmKSkgeworCQl4ID4+PSA4OworCQlyICs9IDg7CisJfQorCWlmICghKHggJiAweGYpKSB7CisJCXggPj49IDQ7CisJCXIgKz0gNDsKKwl9CisJaWYgKCEoeCAmIDMpKSB7CisJCXggPj49IDI7CisJCXIgKz0gMjsKKwl9CisJaWYgKCEoeCAmIDEpKSB7CisJCXggPj49IDE7CisJCXIgKz0gMTsKKwl9CisJcmV0dXJuIHI7Cit9CisKKy8qCisgKiBGaW5kIG5leHQgb25lIGJpdCBpbiBhIGJpdG1hcCByZWFzb25hYmx5IGVmZmljaWVudGx5LgorICovCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGZpbmRfbmV4dF9iaXQoY29uc3QgdW5zaWduZWQgbG9uZyAqYWRkciwKKwl1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQoreworCXVuc2lnbmVkIGludCAqcCA9ICgodW5zaWduZWQgaW50ICopIGFkZHIpICsgKG9mZnNldCA+PiA1KTsKKwl1bnNpZ25lZCBpbnQgcmVzdWx0ID0gb2Zmc2V0ICYgfjMxVUw7CisJdW5zaWduZWQgaW50IHRtcDsKKworCWlmIChvZmZzZXQgPj0gc2l6ZSkKKwkJcmV0dXJuIHNpemU7CisJc2l6ZSAtPSByZXN1bHQ7CisJb2Zmc2V0ICY9IDMxVUw7CisJaWYgKG9mZnNldCkgeworCQl0bXAgPSAqcCsrOworCQl0bXAgJj0gfjBVTCA8PCBvZmZzZXQ7CisJCWlmIChzaXplIDwgMzIpCisJCQlnb3RvIGZvdW5kX2ZpcnN0OworCQlpZiAodG1wKQorCQkJZ290byBmb3VuZF9taWRkbGU7CisJCXNpemUgLT0gMzI7CisJCXJlc3VsdCArPSAzMjsKKwl9CisJd2hpbGUgKHNpemUgPj0gMzIpIHsKKwkJaWYgKCh0bXAgPSAqcCsrKSAhPSAwKQorCQkJZ290byBmb3VuZF9taWRkbGU7CisJCXJlc3VsdCArPSAzMjsKKwkJc2l6ZSAtPSAzMjsKKwl9CisJaWYgKCFzaXplKQorCQlyZXR1cm4gcmVzdWx0OworCXRtcCA9ICpwOworCitmb3VuZF9maXJzdDoKKwl0bXAgJj0gfjBVTCA+PiAoMzIgLSBzaXplKTsKKwlpZiAodG1wID09IDBVTCkgICAgICAgIC8qIEFyZSBhbnkgYml0cyBzZXQ/ICovCisJCXJldHVybiByZXN1bHQgKyBzaXplOyAvKiBOb3BlLiAqLworZm91bmRfbWlkZGxlOgorCXJldHVybiByZXN1bHQgKyBnZW5lcmljX2Zmc19mb3JfZmluZF9uZXh0X2JpdCh0bXApOworfQorCisvKgorICogZmluZF9maXJzdF9iaXQgLSBmaW5kIHRoZSBmaXJzdCBzZXQgYml0IGluIGEgbWVtb3J5IHJlZ2lvbgorICovCisjZGVmaW5lIGZpbmRfZmlyc3RfYml0KGFkZHIsIHNpemUpIFwKKwlmaW5kX25leHRfYml0KChhZGRyKSwgKHNpemUpLCAwKQorCisKKyNkZWZpbmUgZmZzKHgpIGdlbmVyaWNfZmZzICh4KQorI2RlZmluZSBmbHMoeCkgZ2VuZXJpY19mbHMgKHgpCisjZGVmaW5lIF9fZmZzKHgpIGZmcyh4KQorCisKKy8qCisgKiBUaGlzIGlzIGp1c3QgYGdlbmVyaWNfZmZzJyBmcm9tIDxsaW51eC9iaXRvcHMuaD4sIGV4Y2VwdCB0aGF0IGl0IGFzc3VtZXMKKyAqIHRoYXQgYXQgbGVhc3Qgb25lIGJpdCBpcyBzZXQsIGFuZCByZXR1cm5zIHRoZSByZWFsIGluZGV4IG9mIHRoZSBiaXQKKyAqIChyYXRoZXIgdGhhbiB0aGUgYml0IGluZGV4ICsgMSwgbGlrZSBmZnMgZG9lcykuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHNjaGVkX2ZmcyhpbnQgeCkKK3sKKwlpbnQgciA9IDA7CisKKwlpZiAoISh4ICYgMHhmZmZmKSkgeworCQl4ID4+PSAxNjsKKwkJciArPSAxNjsKKwl9CisJaWYgKCEoeCAmIDB4ZmYpKSB7CisJCXggPj49IDg7CisJCXIgKz0gODsKKwl9CisJaWYgKCEoeCAmIDB4ZikpIHsKKwkJeCA+Pj0gNDsKKwkJciArPSA0OworCX0KKwlpZiAoISh4ICYgMykpIHsKKwkJeCA+Pj0gMjsKKwkJciArPSAyOworCX0KKwlpZiAoISh4ICYgMSkpIHsKKwkJeCA+Pj0gMTsKKwkJciArPSAxOworCX0KKwlyZXR1cm4gcjsKK30KKworLyoKKyAqIEV2ZXJ5IGFyY2hpdGVjdHVyZSBtdXN0IGRlZmluZSB0aGlzIGZ1bmN0aW9uLiBJdCdzIHRoZSBmYXN0ZXN0CisgKiB3YXkgb2Ygc2VhcmNoaW5nIGEgMTQwLWJpdCBiaXRtYXAgd2hlcmUgdGhlIGZpcnN0IDEwMCBiaXRzIGFyZQorICogdW5saWtlbHkgdG8gYmUgc2V0LiBJdCdzIGd1YXJhbnRlZWQgdGhhdCBhdCBsZWFzdCBvbmUgb2YgdGhlIDE0MAorICogYml0cyBpcyBzZXQuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHNjaGVkX2ZpbmRfZmlyc3RfYml0KHVuc2lnbmVkIGxvbmcgKmIpCit7CisJdW5zaWduZWQgb2ZmcyA9IDA7CisJd2hpbGUgKCEgKmIpIHsKKwkJYisrOworCQlvZmZzICs9IDMyOworCX0KKwlyZXR1cm4gc2NoZWRfZmZzICgqYikgKyBvZmZzOworfQorCisvKgorICogaHdlaWdodE46IHJldHVybnMgdGhlIGhhbW1pbmcgd2VpZ2h0IChpLmUuIHRoZSBudW1iZXIKKyAqIG9mIGJpdHMgc2V0KSBvZiBhIE4tYml0IHdvcmQKKyAqLworI2RlZmluZSBod2VpZ2h0MzIoeCkgCQkJZ2VuZXJpY19od2VpZ2h0MzIgKHgpCisjZGVmaW5lIGh3ZWlnaHQxNih4KSAJCQlnZW5lcmljX2h3ZWlnaHQxNiAoeCkKKyNkZWZpbmUgaHdlaWdodDgoeCkgCQkJZ2VuZXJpY19od2VpZ2h0OCAoeCkKKworI2RlZmluZSBleHQyX3NldF9iaXQJCQl0ZXN0X2FuZF9zZXRfYml0CisjZGVmaW5lIGV4dDJfc2V0X2JpdF9hdG9taWMobCxuLGEpICAgICAgdGVzdF9hbmRfc2V0X2JpdChuLGEpCisjZGVmaW5lIGV4dDJfY2xlYXJfYml0CQkJdGVzdF9hbmRfY2xlYXJfYml0CisjZGVmaW5lIGV4dDJfY2xlYXJfYml0X2F0b21pYyhsLG4sYSkgICAgdGVzdF9hbmRfY2xlYXJfYml0KG4sYSkKKyNkZWZpbmUgZXh0Ml90ZXN0X2JpdAkJCXRlc3RfYml0CisjZGVmaW5lIGV4dDJfZmluZF9maXJzdF96ZXJvX2JpdAlmaW5kX2ZpcnN0X3plcm9fYml0CisjZGVmaW5lIGV4dDJfZmluZF9uZXh0X3plcm9fYml0CQlmaW5kX25leHRfemVyb19iaXQKKworLyogQml0bWFwIGZ1bmN0aW9ucyBmb3IgdGhlIG1pbml4IGZpbGVzeXN0ZW0uICAqLworI2RlZmluZSBtaW5peF90ZXN0X2FuZF9zZXRfYml0CQl0ZXN0X2FuZF9zZXRfYml0CisjZGVmaW5lIG1pbml4X3NldF9iaXQJCQlzZXRfYml0CisjZGVmaW5lIG1pbml4X3Rlc3RfYW5kX2NsZWFyX2JpdAl0ZXN0X2FuZF9jbGVhcl9iaXQKKyNkZWZpbmUgbWluaXhfdGVzdF9iaXQgCQkJdGVzdF9iaXQKKyNkZWZpbmUgbWluaXhfZmluZF9maXJzdF96ZXJvX2JpdCAJZmluZF9maXJzdF96ZXJvX2JpdAorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX19WODUwX0JJVE9QU19IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXY4NTAvYnVnLmggYi9pbmNsdWRlL2FzbS12ODUwL2J1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3Nzg5MTYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS12ODUwL2J1Zy5oCkBAIC0wLDAgKzEsMjIgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS12ODUwL2J1Zy5oIC0tIEJ1ZyByZXBvcnRpbmcKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzICBORUMgRWxlY3Ryb25pY3MgQ29ycG9yYXRpb24KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMgIE1pbGVzIEJhZGVyIDxtaWxlc0BnbnUub3JnPgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMKKyAqIGFyY2hpdmUgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBXcml0dGVuIGJ5IE1pbGVzIEJhZGVyIDxtaWxlc0BnbnUub3JnPgorICovCisKKyNpZm5kZWYgX19WODUwX0JVR19IX18KKyNkZWZpbmUgX19WODUwX0JVR19IX18KKworZXh0ZXJuIHZvaWQgX19idWcgKHZvaWQpIF9fYXR0cmlidXRlX18gKChub3JldHVybikpOworI2RlZmluZSBCVUcoKQkJX19idWcoKQorI2RlZmluZSBIQVZFX0FSQ0hfQlVHCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYnVnLmg+CisKKyNlbmRpZiAvKiBfX1Y4NTBfQlVHX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdjg1MC9idWdzLmggYi9pbmNsdWRlL2FzbS12ODUwL2J1Z3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTExMGE2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdjg1MC9idWdzLmgKQEAgLTAsMCArMSwxNiBAQAorLyoKKyAqICBpbmNsdWRlL2FzbS12ODUwZS9idWdzLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk0ICBMaW51cyBUb3J2YWxkcworICovCisKKy8qCisgKiBUaGlzIGlzIGluY2x1ZGVkIGJ5IGluaXQvbWFpbi5jIHRvIGNoZWNrIGZvciBhcmNoaXRlY3R1cmUtZGVwZW5kZW50IGJ1Z3MuCisgKgorICogTmVlZHM6CisgKgl2b2lkIGNoZWNrX2J1Z3Modm9pZCk7CisgKi8KKworc3RhdGljIHZvaWQgY2hlY2tfYnVncyh2b2lkKQoreworfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdjg1MC9ieXRlb3JkZXIuaCBiL2luY2x1ZGUvYXNtLXY4NTAvYnl0ZW9yZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZmMDc1MwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXY4NTAvYnl0ZW9yZGVyLmgKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLXY4NTAvYnl0ZW9yZGVyLmggLS0gRW5kaWFuIGlkIGFuZCBjb252ZXJzaW9uIG9wcworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEgIE5FQyBDb3Jwb3JhdGlvbgorICogIENvcHlyaWdodCAoQykgMjAwMSAgTWlsZXMgQmFkZXIgPG1pbGVzQGdudS5vcmc+CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcworICogYXJjaGl2ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFdyaXR0ZW4gYnkgTWlsZXMgQmFkZXIgPG1pbGVzQGdudS5vcmc+CisgKi8KKworI2lmbmRlZiBfX1Y4NTBfQllURU9SREVSX0hfXworI2RlZmluZSBfX1Y4NTBfQllURU9SREVSX0hfXworCisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKworI2lmZGVmIF9fR05VQ19fCisKK3N0YXRpYyBfX2lubGluZV9fIF9fYXR0cmlidXRlX2NvbnN0X18gX191MzIgX19fYXJjaF9fc3dhYjMyIChfX3UzMiB3b3JkKQoreworCV9fdTMyIHJlczsKKwlfX2FzbV9fICgiYnN3ICUxLCAlMCIgOiAiPXIiIChyZXMpIDogInIiICh3b3JkKSk7CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIF9faW5saW5lX18gX19hdHRyaWJ1dGVfY29uc3RfXyBfX3UxNiBfX19hcmNoX19zd2FiMTYgKF9fdTE2IGhhbGZfd29yZCkKK3sKKwlfX3UxNiByZXM7CisJX19hc21fXyAoImJzaCAlMSwgJTAiIDogIj1yIiAocmVzKSA6ICJyIiAoaGFsZl93b3JkKSk7CisJcmV0dXJuIHJlczsKK30KKworI2RlZmluZSBfX2FyY2hfX3N3YWIzMih4KSBfX19hcmNoX19zd2FiMzIoeCkKKyNkZWZpbmUgX19hcmNoX19zd2FiMTYoeCkgX19fYXJjaF9fc3dhYjE2KHgpCisKKyNpZiAhZGVmaW5lZChfX1NUUklDVF9BTlNJX18pIHx8IGRlZmluZWQoX19LRVJORUxfXykKKyMgIGRlZmluZSBfX0JZVEVPUkRFUl9IQVNfVTY0X18KKyMgIGRlZmluZSBfX1NXQUJfNjRfVEhSVV8zMl9fCisjZW5kaWYKKworI2VuZGlmIC8qIF9fR05VQ19fICovCisKKyNpbmNsdWRlIDxsaW51eC9ieXRlb3JkZXIvbGl0dGxlX2VuZGlhbi5oPgorCisjZW5kaWYgLyogX19WODUwX0JZVEVPUkRFUl9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXY4NTAvY2FjaGUuaCBiL2luY2x1ZGUvYXNtLXY4NTAvY2FjaGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjdmOGM5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdjg1MC9jYWNoZS5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS12ODUwL2NhY2hlLmggLS0gQ2FjaGUgb3BlcmF0aW9ucworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEgIE5FQyBDb3Jwb3JhdGlvbgorICogIENvcHlyaWdodCAoQykgMjAwMSAgTWlsZXMgQmFkZXIgPG1pbGVzQGdudS5vcmc+CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcworICogYXJjaGl2ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFdyaXR0ZW4gYnkgTWlsZXMgQmFkZXIgPG1pbGVzQGdudS5vcmc+CisgKi8KKworI2lmbmRlZiBfX1Y4NTBfQ0FDSEVfSF9fCisjZGVmaW5lIF9fVjg1MF9DQUNIRV9IX18KKworLyogQWxsIGNhY2hlIG9wZXJhdGlvbnMgYXJlIG1hY2hpbmUtZGVwZW5kZW50LiAgKi8KKyNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgorCisjaWZuZGVmIEwxX0NBQ0hFX0JZVEVTCisvKiBUaGlzIHByb2Nlc3NvciBoYXMgbm8gY2FjaGUsIHNvIGp1c3QgY2hvb3NlIGFuIGFyYml0cmFyeSB2YWx1ZS4gICovCisjZGVmaW5lIEwxX0NBQ0hFX0JZVEVTCQkxNgorI2VuZGlmCisKKyNlbmRpZiAvKiBfX1Y4NTBfQ0FDSEVfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS12ODUwL2NhY2hlZmx1c2guaCBiL2luY2x1ZGUvYXNtLXY4NTAvY2FjaGVmbHVzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxYTg3ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS12ODUwL2NhY2hlZmx1c2guaApAQCAtMCwwICsxLDY5IEBACisvKgorICogaW5jbHVkZS9hc20tdjg1MC9jYWNoZWZsdXNoLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxLDAyLDAzICBORUMgRWxlY3Ryb25pY3MgQ29ycG9yYXRpb24KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEsMDIsMDMgIE1pbGVzIEJhZGVyIDxtaWxlc0BnbnUub3JnPgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMKKyAqIGFyY2hpdmUgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBXcml0dGVuIGJ5IE1pbGVzIEJhZGVyIDxtaWxlc0BnbnUub3JnPgorICovCisKKyNpZm5kZWYgX19WODUwX0NBQ0hFRkxVU0hfSF9fCisjZGVmaW5lIF9fVjg1MF9DQUNIRUZMVVNIX0hfXworCisvKiBTb21lYm9keSBkZXBlbmRzIG9uIHRoaXM7IHNpZ2guLi4gICovCisjaW5jbHVkZSA8bGludXgvbW0uaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CisKKworLyogVGhlIGZvbGxvd2luZyBhcmUgYWxsIHVzZWQgYnkgdGhlIGtlcm5lbCBpbiB3YXlzIHRoYXQgb25seSBhZmZlY3QKKyAgIHN5c3RlbXMgd2l0aCBNTVVzLCBzbyB3ZSBkb24ndCBuZWVkIHRoZW0uICAqLworI2RlZmluZSBmbHVzaF9jYWNoZV9hbGwoKQkJCSgodm9pZCkwKQorI2RlZmluZSBmbHVzaF9jYWNoZV9tbShtbSkJCQkoKHZvaWQpMCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfcmFuZ2Uodm1hLCBzdGFydCwgZW5kKQkoKHZvaWQpMCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfcGFnZSh2bWEsIHZtYWRkciwgcGZuKQkoKHZvaWQpMCkKKyNkZWZpbmUgZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSkJCQkoKHZvaWQpMCkKKyNkZWZpbmUgZmx1c2hfZGNhY2hlX21tYXBfbG9jayhtYXBwaW5nKQkJKCh2b2lkKTApCisjZGVmaW5lIGZsdXNoX2RjYWNoZV9tbWFwX3VubG9jayhtYXBwaW5nKQkoKHZvaWQpMCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfdm1hcChzdGFydCwgZW5kKQkJKCh2b2lkKTApCisjZGVmaW5lIGZsdXNoX2NhY2hlX3Z1bm1hcChzdGFydCwgZW5kKQkJKCh2b2lkKTApCisKKyNpZmRlZiBDT05GSUdfTk9fQ0FDSEUKKworLyogU29tZSBzeXN0ZW1zIGhhdmUgbm8gY2FjaGUgYXQgYWxsLCBpbiB3aGljaCBjYXNlIHdlIGRvbid0IG5lZWQgdGhlc2UKKyAgIGVpdGhlci4gICovCisjZGVmaW5lIGZsdXNoX2ljYWNoZSgpCQkJCSgodm9pZCkwKQorI2RlZmluZSBmbHVzaF9pY2FjaGVfcmFuZ2Uoc3RhcnQsIGVuZCkJCSgodm9pZCkwKQorI2RlZmluZSBmbHVzaF9pY2FjaGVfcGFnZSh2bWEscGcpCQkoKHZvaWQpMCkKKyNkZWZpbmUgZmx1c2hfaWNhY2hlX3VzZXJfcmFuZ2Uodm1hLHBnLGFkcixsZW4pCSgodm9pZCkwKQorI2RlZmluZSBmbHVzaF9jYWNoZV9zaWd0cmFtcCh2YWRkcikJCSgodm9pZCkwKQorCisjZWxzZSAvKiAhQ09ORklHX05PX0NBQ0hFICovCisKK3N0cnVjdCBwYWdlOworc3RydWN0IG1tX3N0cnVjdDsKK3N0cnVjdCB2bV9hcmVhX3N0cnVjdDsKKworLyogT3RoZXJ3aXNlLCBzb21lYm9keSBoYWQgYmV0dGVyIGRlZmluZSB0aGVtLiAgKi8KK2V4dGVybiB2b2lkIGZsdXNoX2ljYWNoZSAodm9pZCk7CitleHRlcm4gdm9pZCBmbHVzaF9pY2FjaGVfcmFuZ2UgKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTsKK2V4dGVybiB2b2lkIGZsdXNoX2ljYWNoZV9wYWdlIChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHBhZ2UgKnBhZ2UpOworZXh0ZXJuIHZvaWQgZmx1c2hfaWNhY2hlX3VzZXJfcmFuZ2UgKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJCSAgICAgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkJICAgICB1bnNpZ25lZCBsb25nIGFkciwgaW50IGxlbik7CitleHRlcm4gdm9pZCBmbHVzaF9jYWNoZV9zaWd0cmFtcCAodW5zaWduZWQgbG9uZyBhZGRyKTsKKworI2VuZGlmIC8qIENPTkZJR19OT19DQUNIRSAqLworCisjZGVmaW5lIGNvcHlfdG9fdXNlcl9wYWdlKHZtYSwgcGFnZSwgdmFkZHIsIGRzdCwgc3JjLCBsZW4pIFwKK2RvIHsgbWVtY3B5KGRzdCwgc3JjLCBsZW4pOyBcCisgICAgIGZsdXNoX2ljYWNoZV91c2VyX3JhbmdlKHZtYSwgcGFnZSwgdmFkZHIsIGxlbik7IFwKK30gd2hpbGUgKDApCisjZGVmaW5lIGNvcHlfZnJvbV91c2VyX3BhZ2Uodm1hLCBwYWdlLCB2YWRkciwgZHN0LCBzcmMsIGxlbikgXAorCW1lbWNweShkc3QsIHNyYywgbGVuKQorCisjZW5kaWYgLyogX19WODUwX0NBQ0hFRkxVU0hfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS12ODUwL2NoZWNrc3VtLmggYi9pbmNsdWRlL2FzbS12ODUwL2NoZWNrc3VtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNhZWRiNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXY4NTAvY2hlY2tzdW0uaApAQCAtMCwwICsxLDExNSBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLXY4NTAvY2hlY2tzdW0uaCAtLSBDaGVja3N1bSBvcHMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxICBORUMgQ29ycG9yYXRpb24KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEgIE1pbGVzIEJhZGVyIDxtaWxlc0BnbnUub3JnPgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMKKyAqIGFyY2hpdmUgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBXcml0dGVuIGJ5IE1pbGVzIEJhZGVyIDxtaWxlc0BnbnUub3JnPgorICovCisKKyNpZm5kZWYgX19WODUwX0NIRUNLU1VNX0hfXworI2RlZmluZSBfX1Y4NTBfQ0hFQ0tTVU1fSF9fCisKKy8qCisgKiBjb21wdXRlcyB0aGUgY2hlY2tzdW0gb2YgYSBtZW1vcnkgYmxvY2sgYXQgYnVmZiwgbGVuZ3RoIGxlbiwKKyAqIGFuZCBhZGRzIGluICJzdW0iICgzMi1iaXQpCisgKgorICogcmV0dXJucyBhIDMyLWJpdCBudW1iZXIgc3VpdGFibGUgZm9yIGZlZWRpbmcgaW50byBpdHNlbGYKKyAqIG9yIGNzdW1fdGNwdWRwX21hZ2ljCisgKgorICogdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIGV2ZW4gbGVuZ3RocywgZXhjZXB0CisgKiBmb3IgdGhlIGxhc3QgZnJhZ21lbnQsIHdoaWNoIG1heSBiZSBvZGQKKyAqCisgKiBpdCdzIGJlc3QgdG8gaGF2ZSBidWZmIGFsaWduZWQgb24gYSAzMi1iaXQgYm91bmRhcnkKKyAqLworZXh0ZXJuIHVuc2lnbmVkIGludCBjc3VtX3BhcnRpYWwgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiBidWZmLCBpbnQgbGVuLAorCQkJCSAgdW5zaWduZWQgaW50IHN1bSk7CisKKy8qCisgKiB0aGUgc2FtZSBhcyBjc3VtX3BhcnRpYWwsIGJ1dCBjb3BpZXMgZnJvbSBzcmMgd2hpbGUgaXQKKyAqIGNoZWNrc3VtcworICoKKyAqIGhlcmUgZXZlbiBtb3JlIGltcG9ydGFudCB0byBhbGlnbiBzcmMgYW5kIGRzdCBvbiBhIDMyLWJpdCAob3IgZXZlbgorICogYmV0dGVyIDY0LWJpdCkgYm91bmRhcnkKKyAqLworZXh0ZXJuIHVuc2lnbmVkIGNzdW1fcGFydGlhbF9jb3B5IChjb25zdCBjaGFyICpzcmMsIGNoYXIgKmRzdCwgaW50IGxlbiwKKwkJCQkgICB1bnNpZ25lZCBzdW0pOworCisKKy8qCisgKiB0aGUgc2FtZSBhcyBjc3VtX3BhcnRpYWxfY29weSwgYnV0IGNvcGllcyBmcm9tIHVzZXIgc3BhY2UuCisgKgorICogaGVyZSBldmVuIG1vcmUgaW1wb3J0YW50IHRvIGFsaWduIHNyYyBhbmQgZHN0IG9uIGEgMzItYml0IChvciBldmVuCisgKiBiZXR0ZXIgNjQtYml0KSBib3VuZGFyeQorICovCitleHRlcm4gdW5zaWduZWQgY3N1bV9wYXJ0aWFsX2NvcHlfZnJvbV91c2VyIChjb25zdCBjaGFyICpzcmMsIGNoYXIgKmRzdCwKKwkJCQkJICAgICBpbnQgbGVuLCB1bnNpZ25lZCBzdW0sCisJCQkJCSAgICAgaW50ICpjc3VtX2Vycik7CisKKyNkZWZpbmUgY3N1bV9wYXJ0aWFsX2NvcHlfbm9jaGVjayhzcmMsIGRzdCwgbGVuLCBzdW0pCVwKKwljc3VtX3BhcnRpYWxfY29weSAoKHNyYyksIChkc3QpLCAobGVuKSwgKHN1bSkpCisKK3Vuc2lnbmVkIHNob3J0IGlwX2Zhc3RfY3N1bSAodW5zaWduZWQgY2hhciAqaXBoLCB1bnNpZ25lZCBpbnQgaWhsKTsKKworLyoKKyAqCUZvbGQgYSBwYXJ0aWFsIGNoZWNrc3VtCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNzdW1fZm9sZCAodW5zaWduZWQgbG9uZyBzdW0pCit7CisJdW5zaWduZWQgaW50IHJlc3VsdDsKKwkvKgorCQkJICAgICAgICAlMAkJJTEKKwkgICAgICBoc3cgJTEsICUwCUggICAgIEwJCUwgICAgIEgKKwkgICAgICBhZGQgJTEsICUwCUggICAgIEwJCUgrTCtDIEgrTAorCSovCisJYXNtICgiaHN3ICUxLCAlMDsgYWRkICUxLCAlMCIgOiAiPSZyIiAocmVzdWx0KSA6ICJyIiAoc3VtKSk7CisJcmV0dXJuICh+cmVzdWx0KSA+PiAxNjsKK30KKworCisvKgorICogY29tcHV0ZXMgdGhlIGNoZWNrc3VtIG9mIHRoZSBUQ1AvVURQIHBzZXVkby1oZWFkZXIKKyAqIHJldHVybnMgYSAxNi1iaXQgY2hlY2tzdW0sIGFscmVhZHkgY29tcGxlbWVudGVkCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50Citjc3VtX3RjcHVkcF9ub2ZvbGQgKHVuc2lnbmVkIGxvbmcgc2FkZHIsIHVuc2lnbmVkIGxvbmcgZGFkZHIsCisJCSAgICB1bnNpZ25lZCBzaG9ydCBsZW4sCisJCSAgICB1bnNpZ25lZCBzaG9ydCBwcm90bywgdW5zaWduZWQgaW50IHN1bSkKK3sKKwlpbnQgX19jYXJyeTsKKwlfX2FzbV9fICgiYWRkICUyLCAlMDsiCisJCSAic2V0ZiBjLCAlMTsiCisJCSAiYWRkICUxLCAlMDsiCisJCSAiYWRkICUzLCAlMDsiCisJCSAic2V0ZiBjLCAlMTsiCisJCSAiYWRkICUxLCAlMDsiCisJCSAiYWRkICU0LCAlMDsiCisJCSAic2V0ZiBjLCAlMTsiCisJCSAiYWRkICUxLCAlMCIKKwkJIDogIj0mciIgKHN1bSksICI9JnIiIChfX2NhcnJ5KQorCQkgOiAiciIgKGRhZGRyKSwgInIiIChzYWRkciksCisJCSAiciIgKG50b2hzIChsZW4pICsgKHByb3RvIDw8IDgpKSwKKwkJICIwIiAoc3VtKSk7CisJcmV0dXJuIHN1bTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBpbnQKK2NzdW1fdGNwdWRwX21hZ2ljICh1bnNpZ25lZCBsb25nIHNhZGRyLCB1bnNpZ25lZCBsb25nIGRhZGRyLAorCQkgICB1bnNpZ25lZCBzaG9ydCBsZW4sCisJCSAgIHVuc2lnbmVkIHNob3J0IHByb3RvLCB1bnNpZ25lZCBpbnQgc3VtKQoreworCXJldHVybiBjc3VtX2ZvbGQgKGNzdW1fdGNwdWRwX25vZm9sZCAoc2FkZHIsIGRhZGRyLCBsZW4sIHByb3RvLCBzdW0pKTsKK30KKworLyoKKyAqIHRoaXMgcm91dGluZSBpcyB1c2VkIGZvciBtaXNjZWxsYW5lb3VzIElQLWxpa2UgY2hlY2tzdW1zLCBtYWlubHkKKyAqIGluIGljbXAuYworICovCitleHRlcm4gdW5zaWduZWQgc2hvcnQgaXBfY29tcHV0ZV9jc3VtIChjb25zdCB1bnNpZ25lZCBjaGFyICogYnVmZiwgaW50IGxlbik7CisKKworI2VuZGlmIC8qIF9fVjg1MF9DSEVDS1NVTV9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXY4NTAvY2xpbmthZ2UuaCBiL2luY2x1ZGUvYXNtLXY4NTAvY2xpbmthZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjYyMmFkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdjg1MC9jbGlua2FnZS5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS12ODUwL2NsaW5rYWdlLmggLS0gTWFjcm9zIHRvIHJlZmxlY3QgQyBzeW1ib2wtbmFtaW5nIGNvbnZlbnRpb25zCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMSwwMiAgTkVDIENvcnBvcmF0aW9uZQorICogIENvcHlyaWdodCAoQykgMjAwMSwwMiAgTWlsZXMgQmFkZXIgPG1pbGVzQGdudS5vcmc+CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcworICogYXJjaGl2ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFdyaXR0ZW4gYnkgTWlsZXMgQmFkZXIgPG1pbGVzQGdudS5vcmc+CisgKi8KKworI2lmbmRlZiBfX0NMSU5LQUdFX0hfXworI2RlZmluZSBfX1Y4NTBfQ0xJTktBR0VfSF9fCisKKyNpbmNsdWRlIDxhc20vbWFjcm9sb2d5Lmg+CisjaW5jbHVkZSA8YXNtL2FzbS5oPgorCisjZGVmaW5lIENfU1lNQk9MX05BTUUobmFtZSkgCW1hY3JvbG9neV9wYXN0ZShfLCBuYW1lKQorI2RlZmluZSBDX1NZTUJPTF9TVFJJTkcobmFtZSkJbWFjcm9sb2d5X3N0cmluZ2lmeShDX1NZTUJPTF9OQU1FKG5hbWUpKQorI2RlZmluZSBDX0VOVFJZKG5hbWUpCQlHX0VOVFJZKENfU1lNQk9MX05BTUUobmFtZSkpCisjZGVmaW5lIENfREFUQShuYW1lKQkJR19EQVRBKENfU1lNQk9MX05BTUUobmFtZSkpCisjZGVmaW5lIENfRU5EKG5hbWUpCQlFTkQoQ19TWU1CT0xfTkFNRShuYW1lKSkKKworI2VuZGlmIC8qIF9fVjg1MF9DTElOS0FHRV9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXY4NTAvY3B1dGltZS5oIGIvaW5jbHVkZS9hc20tdjg1MC9jcHV0aW1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M3OTljMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXY4NTAvY3B1dGltZS5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfX1Y4NTBfQ1BVVElNRV9ICisjZGVmaW5lIF9fVjg1MF9DUFVUSU1FX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2NwdXRpbWUuaD4KKworI2VuZGlmIC8qIF9fVjg1MF9DUFVUSU1FX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXY4NTAvY3VycmVudC5oIGIvaW5jbHVkZS9hc20tdjg1MC9jdXJyZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBhYWU1NgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXY4NTAvY3VycmVudC5oCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS12ODUwL2N1cnJlbnQuaCAtLSBDdXJyZW50IHRhc2sKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxLDAyICBORUMgQ29ycG9yYXRpb24KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEsMDIgIE1pbGVzIEJhZGVyIDxtaWxlc0BnbnUub3JnPgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMKKyAqIGFyY2hpdmUgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBXcml0dGVuIGJ5IE1pbGVzIEJhZGVyIDxtaWxlc0BnbnUub3JnPgorICovCisKKyNpZm5kZWYgX19WODUwX0NVUlJFTlRfSF9fCisjZGVmaW5lIF9fVjg1MF9DVVJSRU5UX0hfXworCisjaWZuZGVmIF9fQVNTRU1CTFlfXyAvKiA8bGludXgvdGhyZWFkX2luZm8uaD4gaXMgbm90IGFzbS1zYWZlLiAgKi8KKyNpbmNsdWRlIDxsaW51eC90aHJlYWRfaW5mby5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxhc20vbWFjcm9sb2d5Lmg+CisKKworLyogUmVnaXN0ZXIgdXNlZCB0byBob2xkIHRoZSBjdXJyZW50IHRhc2sgcG9pbnRlciB3aGlsZSBpbiB0aGUga2VybmVsLgorICAgQW55IGBjYWxsIGNsb2JiZXJlZCcgcmVnaXN0ZXIgd2l0aG91dCBhIHNwZWNpYWwgbWVhbmluZyBzaG91bGQgYmUgT0ssCisgICBidXQgY2hlY2sgYXNtL3Y4NTAva2VybmVsL2VudHJ5LlMgdG8gYmUgc3VyZS4gICovCisjZGVmaW5lIENVUlJFTlRfVEFTS19SRUdOVU0JMTYKKyNkZWZpbmUgQ1VSUkVOVF9UQVNLIAkJbWFjcm9sb2d5X3Bhc3RlIChyLCBDVVJSRU5UX1RBU0tfUkVHTlVNKQorCisKKyNpZmRlZiBfX0FTU0VNQkxZX18KKworLyogUHV0IGEgcG9pbnRlciB0byB0aGUgY3VycmVudCB0YXNrIHN0cnVjdHVyZSBpbnRvIFJFRy4gICovCisjZGVmaW5lIEdFVF9DVVJSRU5UX1RBU0socmVnKQkJCQkJCVwKKwlHRVRfQ1VSUkVOVF9USFJFQUQocmVnKTsJCQkJCVwKKwlsZC53CVRJX1RBU0tbcmVnXSwgcmVnCisKKyNlbHNlIC8qICFfX0FTU0VNQkxZX18gKi8KKworLyogQSBwb2ludGVyIHRvIHRoZSBjdXJyZW50IHRhc2suICAqLworcmVnaXN0ZXIgc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyZW50CQkJCQlcCisgICBfX2FzbV9fIChtYWNyb2xvZ3lfc3RyaW5naWZ5IChDVVJSRU5UX1RBU0spKTsKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisKKyNlbmRpZiAvKiBfVjg1MF9DVVJSRU5UX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXY4NTAvZGVsYXkuaCBiL2luY2x1ZGUvYXNtLXY4NTAvZGVsYXkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2U2NWQ0OAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXY4NTAvZGVsYXkuaApAQCAtMCwwICsxLDQ3IEBACisvKgorICogaW5jbHVkZS9hc20tdjg1MC9kZWxheS5oIC0tIERlbGF5IHJvdXRpbmVzLCB1c2luZyBhIHByZS1jb21wdXRlZAorICogCSJsb29wc19wZXJfc2Vjb25kIiB2YWx1ZQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEsMDMgIE5FQyBDb3Jwb3JhdGlvbgorICogIENvcHlyaWdodCAoQykgMjAwMSwwMyAgTWlsZXMgQmFkZXIgPG1pbGVzQGdudS5vcmc+CisgKiAgQ29weXJpZ2h0IChDKSAxOTk0IEhhbWlzaCBNYWNkb25hbGQKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzCisgKiBhcmNoaXZlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX1Y4NTBfREVMQVlfSF9fCisjZGVmaW5lIF9fVjg1MF9ERUxBWV9IX18KKworI2luY2x1ZGUgPGFzbS9wYXJhbS5oPgorCitleHRlcm4gX19pbmxpbmVfXyB2b2lkIF9fZGVsYXkodW5zaWduZWQgbG9uZyBsb29wcykKK3sKKwlpZiAobG9vcHMpCisJCV9fYXNtX18gX192b2xhdGlsZV9fICgiMTogYWRkIC0xLCAlMDsgYm56IDFiIgorCQkJCSAgICAgIDogIj1yIiAobG9vcHMpIDogIjAiIChsb29wcykpOworfQorCisvKgorICogVXNlIG9ubHkgZm9yIHZlcnkgc21hbGwgZGVsYXlzICggPCAxIG1zZWMpLiAgU2hvdWxkIHByb2JhYmx5IHVzZSBhCisgKiBsb29rdXAgdGFibGUsIHJlYWxseSwgYXMgdGhlIG11bHRpcGxpY2F0aW9ucyB0YWtlIG11Y2ggdG9vIGxvbmcgd2l0aAorICogc2hvcnQgZGVsYXlzLiAgVGhpcyBpcyBhICJyZWFzb25hYmxlIiBpbXBsZW1lbnRhdGlvbiwgdGhvdWdoIChhbmQgdGhlCisgKiBmaXJzdCBjb25zdGFudCBtdWx0aXBsaWNhdGlvbnMgZ2V0cyBvcHRpbWl6ZWQgYXdheSBpZiB0aGUgZGVsYXkgaXMKKyAqIGEgY29uc3RhbnQpICAKKyAqLworCitleHRlcm4gdW5zaWduZWQgbG9uZyBsb29wc19wZXJfamlmZnk7CisKK2V4dGVybiBfX2lubGluZV9fIHZvaWQgdWRlbGF5KHVuc2lnbmVkIGxvbmcgdXNlY3MpCit7CisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBmdWxsX2xvb3BzLCBwYXJ0X2xvb3BzOworCisJZnVsbF9sb29wcyA9ICgodXNlY3MgKiBIWikgLyAxMDAwMDAwKSAqIGxvb3BzX3Blcl9qaWZmeTsKKwl1c2VjcyAlPSAoMTAwMDAwMCAvIEhaKTsKKwlwYXJ0X2xvb3BzID0gKHVzZWNzICogSFogKiBsb29wc19wZXJfamlmZnkpIC8gMTAwMDAwMDsKKworCV9fZGVsYXkoZnVsbF9sb29wcyArIHBhcnRfbG9vcHMpOworfQorCisjZW5kaWYgLyogX19WODUwX0RFTEFZX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdjg1MC9kaXY2NC5oIGIvaW5jbHVkZS9hc20tdjg1MC9kaXY2NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjZDk3OGMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS12ODUwL2RpdjY0LmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2RpdjY0Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS12ODUwL2RtYS1tYXBwaW5nLmggYi9pbmNsdWRlL2FzbS12ODUwL2RtYS1tYXBwaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYzZmI1MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXY4NTAvZG1hLW1hcHBpbmcuaApAQCAtMCwwICsxLDEyIEBACisjaWZuZGVmIF9fVjg1MF9ETUFfTUFQUElOR19IX18KKyNkZWZpbmUgX19WODUwX0RNQV9NQVBQSU5HX0hfXworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpZmRlZiBDT05GSUdfUENJCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZG1hLW1hcHBpbmcuaD4KKyNlbHNlCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZG1hLW1hcHBpbmctYnJva2VuLmg+CisjZW5kaWYKKworI2VuZGlmIC8qIF9fVjg1MF9ETUFfTUFQUElOR19IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXY4NTAvZG1hLmggYi9pbmNsdWRlL2FzbS12ODUwL2RtYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzNjk4NDkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS12ODUwL2RtYS5oCkBAIC0wLDAgKzEsMTggQEAKKyNpZm5kZWYgX19WODUwX0RNQV9IX18KKyNkZWZpbmUgX19WODUwX0RNQV9IX18KKworLyogV2hhdCBzaG91bGQgdGhpcyBiZT8gICovCisjZGVmaW5lIE1BWF9ETUFfQUREUkVTUwkweEZGRkZGRkZGCisKKy8qIHJlc2VydmUgYSBETUEgY2hhbm5lbCAqLworZXh0ZXJuIGludCByZXF1ZXN0X2RtYSAodW5zaWduZWQgaW50IGRtYW5yLCBjb25zdCBjaGFyICogZGV2aWNlX2lkKTsKKy8qIHJlbGVhc2UgaXQgYWdhaW4gKi8KK2V4dGVybiB2b2lkIGZyZWVfZG1hICh1bnNpZ25lZCBpbnQgZG1hbnIpOworCisjaWZkZWYgQ09ORklHX1BDSQorZXh0ZXJuIGludCBpc2FfZG1hX2JyaWRnZV9idWdneTsKKyNlbHNlCisjZGVmaW5lIGlzYV9kbWFfYnJpZGdlX2J1Z2d5ICAgICgwKQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX1Y4NTBfRE1BX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdjg1MC9lbGYuaCBiL2luY2x1ZGUvYXNtLXY4NTAvZWxmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RiOGVkZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXY4NTAvZWxmLmgKQEAgLTAsMCArMSwxMDEgQEAKKyNpZm5kZWYgX19WODUwX0VMRl9IX18KKyNkZWZpbmUgX19WODUwX0VMRl9IX18KKworLyoKKyAqIEVMRiByZWdpc3RlciBkZWZpbml0aW9ucy4uCisgKi8KKworI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vdXNlci5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGVsZl9ncmVnX3Q7CisKKyNkZWZpbmUgRUxGX05HUkVHIChzaXplb2YgKHN0cnVjdCBwdF9yZWdzKSAvIHNpemVvZihlbGZfZ3JlZ190KSkKK3R5cGVkZWYgZWxmX2dyZWdfdCBlbGZfZ3JlZ3NldF90W0VMRl9OR1JFR107CisKK3R5cGVkZWYgc3RydWN0IHVzZXJfZnB1X3N0cnVjdCBlbGZfZnByZWdzZXRfdDsKKworLyoKKyAqIFRoaXMgaXMgdXNlZCB0byBlbnN1cmUgd2UgZG9uJ3QgbG9hZCBzb21ldGhpbmcgZm9yIHRoZSB3cm9uZyBhcmNoaXRlY3R1cmUuCisgKi8KKyNkZWZpbmUgZWxmX2NoZWNrX2FyY2goeCkgIFwKKyAgKCh4KS0+ZV9tYWNoaW5lID09IEVNX1Y4NTAgfHwgKHgpLT5lX21hY2hpbmUgPT0gRU1fQ1lHTlVTX1Y4NTApCisKKworLyogdjg1MCByZWxvY2F0aW9uIHR5cGVzLiAgKi8KKyNkZWZpbmUgUl9WODUwX05PTkUJCTAKKyNkZWZpbmUgUl9WODUwXzlfUENSRUwJCTEKKyNkZWZpbmUgUl9WODUwXzIyX1BDUkVMCQkyCisjZGVmaW5lIFJfVjg1MF9ISTE2X1MJCTMKKyNkZWZpbmUgUl9WODUwX0hJMTYJCTQKKyNkZWZpbmUgUl9WODUwX0xPMTYJCTUKKyNkZWZpbmUgUl9WODUwXzMyCQk2CisjZGVmaW5lIFJfVjg1MF8xNgkJNworI2RlZmluZSBSX1Y4NTBfOAkJOAorI2RlZmluZSBSX1Y4NTBfU0RBXzE2XzE2X09GRlNFVAk5CS8qIEZvciBsZC5iLCBzdC5iLCBzZXQxLCBjbHIxLAorCQkJCQkgICBub3QxLCB0c3QxLCBtb3ZlYSwgbW92aGkgKi8KKyNkZWZpbmUgUl9WODUwX1NEQV8xNV8xNl9PRkZTRVQJMTAJLyogRm9yIGxkLncsIGxkLmgsIGxkLmh1LCBzdC53LCBzdC5oICovCisjZGVmaW5lIFJfVjg1MF9aREFfMTZfMTZfT0ZGU0VUCTExCS8qIEZvciBsZC5iLCBzdC5iLCBzZXQxLCBjbHIxLAorCQkJCQkgICBub3QxLCB0c3QxLCBtb3ZlYSwgbW92aGkgKi8KKyNkZWZpbmUgUl9WODUwX1pEQV8xNV8xNl9PRkZTRVQJMTIJLyogRm9yIGxkLncsIGxkLmgsIGxkLmh1LCBzdC53LCBzdC5oICovCisjZGVmaW5lIFJfVjg1MF9UREFfNl84X09GRlNFVAkxMwkvKiBGb3Igc3N0LncsIHNsZC53ICovCisjZGVmaW5lIFJfVjg1MF9UREFfN184X09GRlNFVAkxNAkvKiBGb3Igc3N0LmgsIHNsZC5oICovCisjZGVmaW5lIFJfVjg1MF9UREFfN183X09GRlNFVAkxNQkvKiBGb3Igc3N0LmIsIHNsZC5iICovCisjZGVmaW5lIFJfVjg1MF9UREFfMTZfMTZfT0ZGU0VUCTE2CS8qIEZvciBzZXQxLCBjbHIxLCBub3QxLCB0c3QxLAorCQkJCQkgICBtb3ZlYSwgbW92aGkgKi8KKyNkZWZpbmUgUl9WODUwX05VTQkJMTcKKworCisvKgorICogVGhlc2UgYXJlIHVzZWQgdG8gc2V0IHBhcmFtZXRlcnMgaW4gdGhlIGNvcmUgZHVtcHMuCisgKi8KKyNkZWZpbmUgRUxGX0NMQVNTCUVMRkNMQVNTMzIKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSBFTEZfREFUQQlFTEZEQVRBMkxTQgorI2Vsc2UKKyNkZWZpbmUgRUxGX0RBVEEJRUxGREFUQTJNU0IKKyNlbmRpZgorI2RlZmluZSBFTEZfQVJDSAlFTV9WODUwCisKKyNkZWZpbmUgVVNFX0VMRl9DT1JFX0RVTVAKKyNkZWZpbmUgRUxGX0VYRUNfUEFHRVNJWkUJNDA5NgorCisKKyNkZWZpbmUgRUxGX0NPUkVfQ09QWV9SRUdTKF9kZXN0LF9yZWdzKQkJCQlcCisJbWVtY3B5KChjaGFyICopICZfZGVzdCwgKGNoYXIgKikgX3JlZ3MsCQkJXAorCSAgICAgICBzaXplb2Yoc3RydWN0IHB0X3JlZ3MpKTsKKworLyogVGhpcyB5aWVsZHMgYSBtYXNrIHRoYXQgdXNlciBwcm9ncmFtcyBjYW4gdXNlIHRvIGZpZ3VyZSBvdXQgd2hhdAorICAgaW5zdHJ1Y3Rpb24gc2V0IHRoaXMgQ1BVIHN1cHBvcnRzLiAgVGhpcyBjb3VsZCBiZSBkb25lIGluIHVzZXIgc3BhY2UsCisgICBidXQgaXQncyBub3QgZWFzeSwgYW5kIHdlJ3ZlIGFscmVhZHkgZG9uZSBpdCBoZXJlLiAgKi8KKworI2RlZmluZSBFTEZfSFdDQVAJKDApCisKKy8qIFRoaXMgeWllbGRzIGEgc3RyaW5nIHRoYXQgbGQuc28gd2lsbCB1c2UgdG8gbG9hZCBpbXBsZW1lbnRhdGlvbgorICAgc3BlY2lmaWMgbGlicmFyaWVzIGZvciBvcHRpbWl6YXRpb24uICBUaGlzIGlzIG1vcmUgc3BlY2lmaWMgaW4KKyAgIGludGVudCB0aGFuIHBva2luZyBhdCB1bmFtZSBvciAvcHJvYy9jcHVpbmZvLgorCisgICBGb3IgdGhlIG1vbWVudCwgd2UgaGF2ZSBvbmx5IG9wdGltaXphdGlvbnMgZm9yIHRoZSBJbnRlbCBnZW5lcmF0aW9ucywKKyAgIGJ1dCB0aGF0IGNvdWxkIGNoYW5nZS4uLiAqLworCisjZGVmaW5lIEVMRl9QTEFURk9STSAgKE5VTEwpCisKKyNkZWZpbmUgRUxGX1BMQVRfSU5JVChfciwgbG9hZF9hZGRyKQkJCQkJICAgICAgXAorICBkbyB7CQkJCQkJCQkJICAgICAgXAorCSBfci0+Z3ByWzBdID0gIF9yLT5ncHJbMV0gPSAgX3ItPmdwclsyXSA9ICBfci0+Z3ByWzNdID0JCSAgICAgIFwKKwkgX3ItPmdwcls0XSA9ICBfci0+Z3ByWzVdID0gIF9yLT5ncHJbNl0gPSAgX3ItPmdwcls3XSA9CQkgICAgICBcCisJIF9yLT5ncHJbOF0gPSAgX3ItPmdwcls5XSA9IF9yLT5ncHJbMTBdID0gX3ItPmdwclsxMV0gPQkJICAgICAgXAorCV9yLT5ncHJbMTJdID0gX3ItPmdwclsxM10gPSBfci0+Z3ByWzE0XSA9IF9yLT5ncHJbMTVdID0JCSAgICAgIFwKKwlfci0+Z3ByWzE2XSA9IF9yLT5ncHJbMTddID0gX3ItPmdwclsxOF0gPSBfci0+Z3ByWzE5XSA9CQkgICAgICBcCisJX3ItPmdwclsyMF0gPSBfci0+Z3ByWzIxXSA9IF9yLT5ncHJbMjJdID0gX3ItPmdwclsyM10gPQkJICAgICAgXAorCV9yLT5ncHJbMjRdID0gX3ItPmdwclsyNV0gPSBfci0+Z3ByWzI2XSA9IF9yLT5ncHJbMjddID0JCSAgICAgIFwKKwlfci0+Z3ByWzI4XSA9IF9yLT5ncHJbMjldID0gX3ItPmdwclszMF0gPSBfci0+Z3ByWzMxXSA9CQkgICAgICBcCisJMDsJCQkJCQkJCSAgICAgIFwKKyAgfSB3aGlsZSAoMCkKKworI2lmZGVmIF9fS0VSTkVMX18KKyNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4LCBpYmNzMikgc2V0X3BlcnNvbmFsaXR5KFBFUl9MSU5VWF8zMkJJVCkKKyNlbmRpZgorCisjZW5kaWYgLyogX19WODUwX0VMRl9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXY4NTAvZW50cnkuaCBiL2luY2x1ZGUvYXNtLXY4NTAvZW50cnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWRmOGFjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdjg1MC9lbnRyeS5oCkBAIC0wLDAgKzEsMTEzIEBACisvKgorICogaW5jbHVkZS9hc20tdjg1MC9lbnRyeS5oIC0tIERlZmluaXRpb25zIHVzZWQgYnkgbG93LWxldmVsIHRyYXAgaGFuZGxlcnMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxLDAyLDAzICBORUMgRWxlY3Ryb25pY3MgQ29ycG9yYXRpb24KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEsMDIsMDMgIE1pbGVzIEJhZGVyIDxtaWxlc0BnbnUub3JnPgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMKKyAqIGFyY2hpdmUgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBXcml0dGVuIGJ5IE1pbGVzIEJhZGVyIDxtaWxlc0BnbnUub3JnPgorICovCisKKyNpZm5kZWYgX19WODUwX0VOVFJZX0hfXworI2RlZmluZSBfX1Y4NTBfRU5UUllfSF9fCisKKworI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgorCisKKy8qIFRoZXNlIGFyZSBzcGVjaWFsIHZhcmlhYmxlcyB1c2luZyBieSB0aGUga2VybmVsIHRyYXAvaW50ZXJydXB0IGNvZGUKKyAgIHRvIHNhdmUgcmVnaXN0ZXJzIGluLCBhdCBhIHRpbWUgd2hlbiB0aGVyZSBhcmUgbm8gc3BhcmUgcmVnaXN0ZXJzIHdlCisgICBjYW4gdXNlIHRvIGRvIHNvLCBhbmQgd2UgY2FuJ3QgZGVwZW5kIG9uIHRoZSB2YWx1ZSBvZiB0aGUgc3RhY2sKKyAgIHBvaW50ZXIuICBUaGlzIG1lYW5zIHRoYXQgdGhleSBtdXN0IGJlIHdpdGhpbiBhIHNpZ25lZCAxNi1iaXQKKyAgIGRpc3BsYWNlbWVudCBvZiAweDAwMDAwMDAwLiAgKi8KKworI2RlZmluZSBLRVJORUxfVkFSX1NQQUNFX0FERFIJUjBfUkFNX0FERFIKKworI2lmZGVmIF9fQVNTRU1CTFlfXworI2RlZmluZSBLRVJORUxfVkFSKGFkZHIpCWFkZHJbcjBdCisjZWxzZQorI2RlZmluZSBLRVJORUxfVkFSKGFkZHIpCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoYWRkcikpCisjZW5kaWYKKworLyogS2VybmVsIHN0YWNrIHBvaW50ZXIsIDQgYnl0ZXMuICAqLworI2RlZmluZSBLU1BfQUREUgkJKEtFUk5FTF9WQVJfU1BBQ0VfQUREUiArICAwKQorI2RlZmluZSBLU1AJCQlLRVJORUxfVkFSIChLU1BfQUREUikKKy8qIDEgaWYgaW4ga2VybmVsLW1vZGUsIDAgaWYgaW4gdXNlciBtb2RlLCAxIGJ5dGUuICAqLworI2RlZmluZSBLTV9BRERSIAkJKEtFUk5FTF9WQVJfU1BBQ0VfQUREUiArICA0KQorI2RlZmluZSBLTQkJCUtFUk5FTF9WQVIgKEtNX0FERFIpCisvKiBUZW1wb3Jhcnkgc3RvcmFnZSBmb3IgaW50ZXJydXB0IGhhbmRsZXJzLCA0IGJ5dGVzLiAgKi8KKyNkZWZpbmUgSU5UX1NDUkFUQ0hfQUREUgkoS0VSTkVMX1ZBUl9TUEFDRV9BRERSICsgIDgpCisjZGVmaW5lIElOVF9TQ1JBVENICQlLRVJORUxfVkFSIChJTlRfU0NSQVRDSF9BRERSKQorLyogV2hlcmUgdGhlIHN0YWNrLXBvaW50ZXIgaXMgc2F2ZWQgd2hlbiBqdW1waW5nIHRvIHZhcmlvdXMgc29ydHMgb2YKKyAgIGludGVycnVwdCBoYW5kbGVycy4gIEVOVFJZX1NQIGlzIHVzZWQgYnkgZXZlcnl0aGluZyBleGNlcHQgTk1JcywKKyAgIHdoaWNoIGhhdmUgdGhlaXIgb3duIGxvY2F0aW9uLiAgSGlnaGVyLXByaW9yaXR5IE5NSXMgY2FuIGNsb2JiZXIgdGhlCisgICB2YWx1ZSB3cml0dGVuIGJ5IGEgbG93ZXIgcHJpb3JpdHkgTk1JLCBzaW5jZSB0aGV5IGNhbid0IGJlIGRpc2FibGVkLAorICAgYnV0IHRoYXQncyBPSywgYmVjYXVzZSBvbmx5IE5NSTAgKHRoZSBsb3dlc3QtcHJpb3JpdHkgb25lKSBpcyBhbGxvd2VkCisgICB0byByZXR1cm4uICAqLworI2RlZmluZSBFTlRSWV9TUF9BRERSCQkoS0VSTkVMX1ZBUl9TUEFDRV9BRERSICsgMTIpCisjZGVmaW5lIEVOVFJZX1NQCQlLRVJORUxfVkFSIChFTlRSWV9TUF9BRERSKQorI2RlZmluZSBOTUlfRU5UUllfU1BfQUREUgkoS0VSTkVMX1ZBUl9TUEFDRV9BRERSICsgMTYpCisjZGVmaW5lIE5NSV9FTlRSWV9TUAkJS0VSTkVMX1ZBUiAoTk1JX0VOVFJZX1NQX0FERFIpCisKKyNpZmRlZiBDT05GSUdfUkVTRVRfR1VBUkQKKy8qIFVzZWQgdG8gZGV0ZWN0IHVuZXhwZWN0ZWQgcmVzZXRzIChzaW5jZSB0aGUgdjg1MCBoYXMgbm8gTU1VLCBhbnkgY2FsbAorICAgdGhyb3VnaCBhIG51bGwgcG9pbnRlciB3aWxsIGp1bXAgdG8gdGhlIHJlc2V0IHZlY3RvcikuICBXZSBkZXRlY3QKKyAgIHN1Y2ggcmVzZXRzIGJ5IGNoZWNraW5nIGZvciBhIG1hZ2ljIHZhbHVlLCBSRVNFVF9HVUFSRF9BQ1RJVkUsIGluCisgICB0aGlzIGxvY2F0aW9uLiAgUHJvcGVybHkgcmVzZXR0aW5nIHRoZSBtYWNoaW5lIHN0b3JlcyB6ZXJvIHRoZXJlLCBzbworICAgaXQgc2hvdWxkbid0IHRyaWdnZXIgdGhlIGd1YXJkOyB0aGUgcG93ZXItb24gdmFsdWUgaXMgdW5jZXJ0YWluLCBidXQKKyAgIGl0J3MgdW5saWtlbHkgdG8gYmUgUkVTRVRfR1VBUkRfQUNUSVZFLiAgKi8KKyNkZWZpbmUgUkVTRVRfR1VBUkRfQUREUgkoS0VSTkVMX1ZBUl9TUEFDRV9BRERSICsgMjgpCisjZGVmaW5lIFJFU0VUX0dVQVJECQlLRVJORUxfVkFSIChSRVNFVF9HVUFSRF9BRERSKQorI2RlZmluZSBSRVNFVF9HVUFSRF9BQ1RJVkUJMHhGQUI0QkVFRgorI2VuZGlmIC8qIENPTkZJR19SRVNFVF9HVUFSRCAqLworCisjaWZkZWYgQ09ORklHX1Y4NTBFX0hJR0hSRVNfVElNRVIKKyNkZWZpbmUgSElHSFJFU19USU1FUl9TTE9XX1RJQ0tTX0FERFIgKEtFUk5FTF9WQVJfU1BBQ0VfQUREUiArIDMyKQorI2RlZmluZSBISUdIUkVTX1RJTUVSX1NMT1dfVElDS1MgICAgIEtFUk5FTF9WQVIgKEhJR0hSRVNfVElNRVJfU0xPV19USUNLU19BRERSKQorI2VuZGlmIC8qIENPTkZJR19WODUwRV9ISUdIUkVTX1RJTUVSICovCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNpZmRlZiBDT05GSUdfUkVTRVRfR1VBUkQKKy8qIFR1cm4gb2ZmIHJlc2V0IGd1YXJkLCBzbyB0aGF0IHJlc2V0dGluZyB0aGUgbWFjaGluZSB3b3JrcyBub3JtYWxseS4KKyAgIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBpbiB0aGUgdmFyaW91cyBtYWNoaW5lX2hhbHQsIGV0Yy4sIGZ1bmN0aW9ucy4gICovCitzdGF0aWMgaW5saW5lIHZvaWQgZGlzYWJsZV9yZXNldF9ndWFyZCAodm9pZCkKK3sKKwlSRVNFVF9HVUFSRCA9IDA7Cit9CisjZW5kaWYgLyogQ09ORklHX1JFU0VUX0dVQVJEICovCisKKyNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCisKKworLyogQSBgc3RhdGUgc2F2ZSBmcmFtZScgaXMgYSBzdHJ1Y3QgcHRfcmVncyBwcmVjZWRlZCBieSBzb21lIGV4dHJhIHNwYWNlCisgICBzdWl0YWJsZSBmb3IgYSBmdW5jdGlvbiBjYWxsIHN0YWNrIGZyYW1lLiAgKi8KKworLyogQW1vdW50IG9mIHJvb20gb24gdGhlIHN0YWNrIHJlc2VydmVkIGZvciBhcmd1bWVudHMgYW5kIHRvIHNhdGlzZnkgdGhlCisgICBDIGNhbGxpbmcgY29udmVudGlvbnMsIGluIGFkZGl0aW9uIHRvIHRoZSBzcGFjZSB1c2VkIGJ5IHRoZSBzdHJ1Y3QKKyAgIHB0X3JlZ3MgdGhhdCBhY3R1YWxseSBob2xkcyBzYXZlZCB2YWx1ZXMuICAqLworI2RlZmluZSBTVEFURV9TQVZFX0FSR19TUEFDRQkoNio0KSAvKiBVcCB0byBzaXggYXJndW1lbnRzLiAgKi8KKworCisjaWZkZWYgX19BU1NFTUJMWV9fCisKKy8qIFRoZSBzaXplIG9mIGEgc3RhdGUgc2F2ZSBmcmFtZS4gICovCisjZGVmaW5lIFNUQVRFX1NBVkVfU0laRQkJKFBUX1NJWkUgKyBTVEFURV9TQVZFX0FSR19TUEFDRSkKKworI2Vsc2UgLyogIV9fQVNTRU1CTFlfXyAqLworCisvKiBUaGUgc2l6ZSBvZiBhIHN0YXRlIHNhdmUgZnJhbWUuICAqLworI2RlZmluZSBTVEFURV9TQVZFX1NJWkUJICAgICAgIChzaXplb2YgKHN0cnVjdCBwdF9yZWdzKSArIFNUQVRFX1NBVkVfQVJHX1NQQUNFKQorCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKworLyogT2Zmc2V0IG9mIHRoZSBzdHJ1Y3QgcHRfcmVncyBpbiBhIHN0YXRlIHNhdmUgZnJhbWUuICAqLworI2RlZmluZSBTVEFURV9TQVZFX1BUX09GRlNFVAlTVEFURV9TQVZFX0FSR19TUEFDRQorCisKKyNlbmRpZiAvKiBfX1Y4NTBfRU5UUllfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS12ODUwL2Vycm5vLmggYi9pbmNsdWRlL2FzbS12ODUwL2Vycm5vLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFjOTFkZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXY4NTAvZXJybm8uaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19WODUwX0VSUk5PX0hfXworI2RlZmluZSBfX1Y4NTBfRVJSTk9fSF9fCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9lcnJuby5oPgorCisjZW5kaWYgLyogX19WODUwX0VSUk5PX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdjg1MC9mY250bC5oIGIvaW5jbHVkZS9hc20tdjg1MC9mY250bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxZDRiNTkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS12ODUwL2ZjbnRsLmgKQEAgLTAsMCArMSw4NyBAQAorI2lmbmRlZiBfX1Y4NTBfRkNOVExfSF9fCisjZGVmaW5lIF9fVjg1MF9GQ05UTF9IX18KKworLyogb3Blbi9mY250bCAtIE9fU1lOQyBpcyBvbmx5IGltcGxlbWVudGVkIG9uIGJsb2NrcyBkZXZpY2VzIGFuZCBvbiBmaWxlcworICAgbG9jYXRlZCBvbiBhbiBleHQyIGZpbGUgc3lzdGVtICovCisjZGVmaW5lIE9fQUNDTU9ERQkgIDAwMDMKKyNkZWZpbmUgT19SRE9OTFkJICAgIDAwCisjZGVmaW5lIE9fV1JPTkxZCSAgICAwMQorI2RlZmluZSBPX1JEV1IJCSAgICAwMgorI2RlZmluZSBPX0NSRUFUCQkgIDAxMDAJLyogbm90IGZjbnRsICovCisjZGVmaW5lIE9fRVhDTAkJICAwMjAwCS8qIG5vdCBmY250bCAqLworI2RlZmluZSBPX05PQ1RUWQkgIDA0MDAJLyogbm90IGZjbnRsICovCisjZGVmaW5lIE9fVFJVTkMJCSAwMTAwMAkvKiBub3QgZmNudGwgKi8KKyNkZWZpbmUgT19BUFBFTkQJIDAyMDAwCisjZGVmaW5lIE9fTk9OQkxPQ0sJIDA0MDAwCisjZGVmaW5lIE9fTkRFTEFZCU9fTk9OQkxPQ0sKKyNkZWZpbmUgT19TWU5DCQkwMTAwMDAKKyNkZWZpbmUgRkFTWU5DCQkwMjAwMDAJLyogZmNudGwsIGZvciBCU0QgY29tcGF0aWJpbGl0eSAqLworI2RlZmluZSBPX0RJUkVDVE9SWQkwNDAwMDAJLyogbXVzdCBiZSBhIGRpcmVjdG9yeSAqLworI2RlZmluZSBPX05PRk9MTE9XICAgICAwMTAwMDAwCS8qIGRvbid0IGZvbGxvdyBsaW5rcyAqLworI2RlZmluZSBPX0RJUkVDVCAgICAgICAwMjAwMDAwCS8qIGRpcmVjdCBkaXNrIGFjY2VzcyBoaW50IC0gY3VycmVudGx5IGlnbm9yZWQgKi8KKyNkZWZpbmUgT19MQVJHRUZJTEUgICAgMDQwMDAwMAorI2RlZmluZSBPX05PQVRJTUUJMDEwMDAwMDAKKworI2RlZmluZSBGX0RVUEZECQkwCS8qIGR1cCAqLworI2RlZmluZSBGX0dFVEZECQkxCS8qIGdldCBjbG9zZV9vbl9leGVjICovCisjZGVmaW5lIEZfU0VURkQJCTIJLyogc2V0L2NsZWFyIGNsb3NlX29uX2V4ZWMgKi8KKyNkZWZpbmUgRl9HRVRGTAkJMwkvKiBnZXQgZmlsZS0+Zl9mbGFncyAqLworI2RlZmluZSBGX1NFVEZMCQk0CS8qIHNldCBmaWxlLT5mX2ZsYWdzICovCisjZGVmaW5lIEZfR0VUTEsJCTUKKyNkZWZpbmUgRl9TRVRMSwkJNgorI2RlZmluZSBGX1NFVExLVwk3CisKKyNkZWZpbmUgRl9TRVRPV04JOAkvKiAgZm9yIHNvY2tldHMuICovCisjZGVmaW5lIEZfR0VUT1dOCTkJLyogIGZvciBzb2NrZXRzLiAqLworI2RlZmluZSBGX1NFVFNJRwkxMAkvKiAgZm9yIHNvY2tldHMuICovCisjZGVmaW5lIEZfR0VUU0lHCTExCS8qICBmb3Igc29ja2V0cy4gKi8KKworI2RlZmluZSBGX0dFVExLNjQJMTIJLyogIHVzaW5nICdzdHJ1Y3QgZmxvY2s2NCcgKi8KKyNkZWZpbmUgRl9TRVRMSzY0CTEzCisjZGVmaW5lIEZfU0VUTEtXNjQJMTQKKworLyogZm9yIEZfW0dFVHxTRVRdRkwgKi8KKyNkZWZpbmUgRkRfQ0xPRVhFQwkxCS8qIGFjdHVhbGx5IGFueXRoaW5nIHdpdGggbG93IGJpdCBzZXQgZ29lcyAqLworCisvKiBmb3IgcG9zaXggZmNudGwoKSBhbmQgbG9ja2YoKSAqLworI2RlZmluZSBGX1JETENLCQkwCisjZGVmaW5lIEZfV1JMQ0sJCTEKKyNkZWZpbmUgRl9VTkxDSwkJMgorCisvKiBmb3Igb2xkIGltcGxlbWVudGF0aW9uIG9mIGJzZCBmbG9jayAoKSAqLworI2RlZmluZSBGX0VYTENLCQk0CS8qIG9yIDMgKi8KKyNkZWZpbmUgRl9TSExDSwkJOAkvKiBvciA0ICovCisKKy8qIGZvciBsZWFzZXMgKi8KKyNkZWZpbmUgRl9JTlBST0dSRVNTCTE2CisKKy8qIG9wZXJhdGlvbnMgZm9yIGJzZCBmbG9jaygpLCBhbHNvIHVzZWQgYnkgdGhlIGtlcm5lbCBpbXBsZW1lbnRhdGlvbiAqLworI2RlZmluZSBMT0NLX1NICQkxCS8qIHNoYXJlZCBsb2NrICovCisjZGVmaW5lIExPQ0tfRVgJCTIJLyogZXhjbHVzaXZlIGxvY2sgKi8KKyNkZWZpbmUgTE9DS19OQgkJNAkvKiBvcidkIHdpdGggb25lIG9mIHRoZSBhYm92ZSB0byBwcmV2ZW50CisJCQkJICAgYmxvY2tpbmcgKi8KKyNkZWZpbmUgTE9DS19VTgkJOAkvKiByZW1vdmUgbG9jayAqLworCisjZGVmaW5lIExPQ0tfTUFORAkzMgkvKiBUaGlzIGlzIGEgbWFuZGF0b3J5IGZsb2NrICovCisjZGVmaW5lIExPQ0tfUkVBRAk2NAkvKiAuLi4gV2hpY2ggYWxsb3dzIGNvbmN1cnJlbnQgcmVhZCBvcGVyYXRpb25zICovCisjZGVmaW5lIExPQ0tfV1JJVEUJMTI4CS8qIC4uLiBXaGljaCBhbGxvd3MgY29uY3VycmVudCB3cml0ZSBvcGVyYXRpb25zICovCisjZGVmaW5lIExPQ0tfUlcJCTE5MgkvKiAuLi4gV2hpY2ggYWxsb3dzIGNvbmN1cnJlbnQgcmVhZCAmIHdyaXRlIG9wcyAqLworCitzdHJ1Y3QgZmxvY2sgeworCXNob3J0IGxfdHlwZTsKKwlzaG9ydCBsX3doZW5jZTsKKwlvZmZfdCBsX3N0YXJ0OworCW9mZl90IGxfbGVuOworCXBpZF90IGxfcGlkOworfTsKKworc3RydWN0IGZsb2NrNjQgeworCXNob3J0ICBsX3R5cGU7CisJc2hvcnQgIGxfd2hlbmNlOworCWxvZmZfdCBsX3N0YXJ0OworCWxvZmZfdCBsX2xlbjsKKwlwaWRfdCAgbF9waWQ7Cit9OworCisjZGVmaW5lIEZfTElOVVhfU1BFQ0lGSUNfQkFTRQkxMDI0CisjZW5kaWYgLyogX19WODUwX0ZDTlRMX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdjg1MC9mbGF0LmggYi9pbmNsdWRlL2FzbS12ODUwL2ZsYXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODg4ZjU5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdjg1MC9mbGF0LmgKQEAgLTAsMCArMSwxMzEgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS12ODUwL2ZsYXQuaCAtLSB1Q2xpbnV4IGZsYXQtZm9ybWF0IGV4ZWN1dGFibGVzCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMiwwMyAgTkVDIEVsZWN0cm9uaWNzIENvcnBvcmF0aW9uCisgKiAgQ29weXJpZ2h0IChDKSAyMDAyLDAzICBNaWxlcyBCYWRlciA8bWlsZXNAZ251Lm9yZz4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzCisgKiBhcmNoaXZlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogV3JpdHRlbiBieSBNaWxlcyBCYWRlciA8bWlsZXNAZ251Lm9yZz4KKyAqLworCisjaWZuZGVmIF9fVjg1MF9GTEFUX0hfXworI2RlZmluZSBfX1Y4NTBfRkxBVF9IX18KKworLyogVGhlIGFtb3VudCBieSB3aGljaCBhIHJlbG9jYXRpb24gY2FuIGV4Y2VlZCB0aGUgcHJvZ3JhbSBpbWFnZSBsaW1pdHMKKyAgIHdpdGhvdXQgYmVpbmcgcmVnYXJkZWQgYXMgYW4gZXJyb3IuICBPbiB0aGUgdjg1MCwgdGhlIHJlbG9jYXRpb25zIG9mCisgICBzb21lIGJhc2UtcG9pbnRlcnMgY2FuIGJlIG9mZnNldCBieSAweDgwMDAgKHRvIGFsbG93IGJldHRlciB1c2FnZSBvZiB0aGUKKyAgIHNwYWNlIG9mZmVyZWQgYnkgMTYtYml0IHNpZ25lZCBvZmZzZXRzIC0tIGluIG1vc3QgY2FzZXMgdGhlIG9mZnNldHMgdXNlZAorICAgd2l0aCBzdWNoIGEgYmFzZS1wb2ludGVyIHdpbGwgYmUgbmVnYXRpdmUpLiAgKi8KKworI2RlZmluZQlmbGF0X3JlbG9jX3ZhbGlkKHJlbG9jLCBzaXplKQkoKHJlbG9jKSA8PSAoc2l6ZSArIDB4ODAwMCkpCisKKyNkZWZpbmUJZmxhdF9zdGFja19hbGlnbihzcCkJCS8qIG5vdGhpbmcgbmVlZGVkICovCisjZGVmaW5lCWZsYXRfYXJndnBfZW52cF9vbl9zdGFjaygpCTAKKyNkZWZpbmUJZmxhdF9vbGRfcmFtX2ZsYWcoZmxhZ3MpCShmbGFncykKKworLyogV2Ugc3RvcmUgdGhlIHR5cGUgb2YgcmVsb2NhdGlvbiBpbiB0aGUgdG9wIDQgYml0cyBvZiB0aGUgYHJlbHZhbC4nICovCisKKy8qIENvbnZlcnQgYSByZWxvY2F0aW9uIGVudHJ5IGludG8gYW4gYWRkcmVzcy4gICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK2ZsYXRfZ2V0X3JlbG9jYXRlX2FkZHIgKHVuc2lnbmVkIGxvbmcgcmVsdmFsKQoreworCXJldHVybiByZWx2YWwgJiAweDBmZmZmZmZmOyAvKiBNYXNrIG91dCB0b3AgNC1iaXRzICovCit9CisKKyNkZWZpbmUgZmxhdF92ODUwX2dldF9yZWxvY190eXBlKHJlbHZhbCkgKChyZWx2YWwpID4+IDI4KQorCisjZGVmaW5lIEZMQVRfVjg1MF9SXzMyCQkwIC8qIE5vcm1hbCAzMi1iaXQgcmVsb2MgKi8KKyNkZWZpbmUgRkxBVF9WODUwX1JfSEkxNlNfTE8xNQkxIC8qIEhpZ2ggMTYtYml0cyArIHNpZ25lZCAxNS1iaXQgbG93IGZpZWxkICovCisjZGVmaW5lIEZMQVRfVjg1MF9SX0hJMTZTX0xPMTYJMiAvKiBIaWdoIDE2LWJpdHMgKyBzaWduZWQgMTYtYml0IGxvdyBmaWVsZCAqLworCisvKiBFeHRyYWN0IHRoZSBhZGRyZXNzIHRvIGJlIHJlbG9jYXRlZCBmcm9tIHRoZSBzeW1ib2wgcmVmZXJlbmNlIGF0IFJQOworICAgUkVMVkFMIGlzIHRoZSByYXcgcmVsb2NhdGlvbi10YWJsZSBlbnRyeSBmcm9tIHdoaWNoIFJQIGlzIGRlcml2ZWQuCisgICBGb3IgdGhlIHY4NTAsIFJQIHNob3VsZCBhbHdheXMgYmUgaGFsZi13b3JkIGFsaWduZWQuICAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGZsYXRfZ2V0X2FkZHJfZnJvbV9ycCAodW5zaWduZWQgbG9uZyAqcnAsCisJCQkJCQkgICB1bnNpZ25lZCBsb25nIHJlbHZhbCwKKwkJCQkJCSAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJc2hvcnQgKnNycCA9IChzaG9ydCAqKXJwOworCisJc3dpdGNoIChmbGF0X3Y4NTBfZ2V0X3JlbG9jX3R5cGUgKHJlbHZhbCkpCisJeworCWNhc2UgRkxBVF9WODUwX1JfMzI6CisJCS8qIFNpbXBsZSAzMi1iaXQgYWRkcmVzcy4gICovCisJCXJldHVybiBzcnBbMF0gfCAoc3JwWzFdIDw8IDE2KTsKKworCWNhc2UgRkxBVF9WODUwX1JfSEkxNlNfTE8xNjoKKwkJLyogVGhlIGhpZ2ggYW5kIGxvdyBoYWx2ZXMgb2YgdGhlIGFkZHJlc3MgYXJlIGluIHRoZSAxNgorCQkgICBiaXRzIGF0IFJQLCBhbmQgdGhlIDJuZCB3b3JkIG9mIHRoZSAzMi1iaXQgaW5zdHJ1Y3Rpb24KKwkJICAgZm9sbG93aW5nIHRoYXQsIHJlc3BlY3RpdmVseS4gIFRoZSBsb3cgaGFsZiBpcyBfc2lnbmVkXworCQkgICBzbyB3ZSBoYXZlIHRvIHNpZ24tZXh0ZW5kIGl0IGFuZCBhZGQgaXQgdG8gdGhlIHVwcGVyCisJCSAgIGhhbGYgaW5zdGVhZCBvZiBzaW1wbHkgb3ItaW5nIHRoZW0gdG9nZXRoZXIuCisKKwkJICAgVW5saWtlIG1vc3QgcmVsb2NhdGVkIGFkZHJlc3MsIHRoaXMgb25lIGlzIHN0b3JlZCBpbgorCQkgICBuYXRpdmUgKGxpdHRsZS1lbmRpYW4pIGJ5dGUtb3JkZXIgdG8gYXZvaWQgcHJvYmxlbXMgd2l0aAorCQkgICB0cmFzaGluZyB0aGUgbG93LW9yZGVyIGJpdCwgc28gd2UgaGF2ZSB0byBjb252ZXJ0IHRvCisJCSAgIG5ldHdvcmstYnl0ZS1vcmRlciBiZWZvcmUgcmV0dXJuaW5nLCBhcyB0aGF0J3Mgd2hhdCB0aGUKKwkJICAgY2FsbGVyIGV4cGVjdHMuICAqLworCQlyZXR1cm4gaHRvbmwgKChzcnBbMF0gPDwgMTYpICsgc3JwWzJdKTsKKworCWNhc2UgRkxBVF9WODUwX1JfSEkxNlNfTE8xNToKKwkJLyogVGhlIGhpZ2ggYW5kIGxvdyBoYWx2ZXMgb2YgdGhlIGFkZHJlc3MgYXJlIGluIHRoZSAxNgorCQkgICBiaXRzIGF0IFJQLCBhbmQgdGhlIHVwcGVyIDE1IGJpdHMgb2YgdGhlIDJuZCB3b3JkIG9mIHRoZQorCQkgICAzMi1iaXQgaW5zdHJ1Y3Rpb24gZm9sbG93aW5nIHRoYXQsIHJlc3BlY3RpdmVseS4gIFRoZQorCQkgICBsb3cgaGFsZiBpcyBfc2lnbmVkXyBzbyB3ZSBoYXZlIHRvIHNpZ24tZXh0ZW5kIGl0IGFuZAorCQkgICBhZGQgaXQgdG8gdGhlIHVwcGVyIGhhbGYgaW5zdGVhZCBvZiBzaW1wbHkgb3ItaW5nIHRoZW0KKwkJICAgdG9nZXRoZXIuICBUaGUgbG93ZXN0IGJpdCBpcyBhbHdheXMgemVyby4KKworCQkgICBVbmxpa2UgbW9zdCByZWxvY2F0ZWQgYWRkcmVzcywgdGhpcyBvbmUgaXMgc3RvcmVkIGluCisJCSAgIG5hdGl2ZSAobGl0dGxlLWVuZGlhbikgYnl0ZS1vcmRlciB0byBhdm9pZCBwcm9ibGVtcyB3aXRoCisJCSAgIHRyYXNoaW5nIHRoZSBsb3ctb3JkZXIgYml0LCBzbyB3ZSBoYXZlIHRvIGNvbnZlcnQgdG8KKwkJICAgbmV0d29yay1ieXRlLW9yZGVyIGJlZm9yZSByZXR1cm5pbmcsIGFzIHRoYXQncyB3aGF0IHRoZQorCQkgICBjYWxsZXIgZXhwZWN0cy4gICovCisJCXJldHVybiBodG9ubCAoKHNycFswXSA8PCAxNikgKyAoc3JwWzJdICYgfjB4MSkpOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIH4wOwkvKiBib2d1cyB2YWx1ZSAqLworCX0KK30KKworLyogSW5zZXJ0IHRoZSBhZGRyZXNzIEFERFIgaW50byB0aGUgc3ltYm9sIHJlZmVyZW5jZSBhdCBSUDsKKyAgIFJFTFZBTCBpcyB0aGUgcmF3IHJlbG9jYXRpb24tdGFibGUgZW50cnkgZnJvbSB3aGljaCBSUCBpcyBkZXJpdmVkLgorICAgRm9yIHRoZSB2ODUwLCBSUCBzaG91bGQgYWx3YXlzIGJlIGhhbGYtd29yZCBhbGlnbmVkLiAgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBmbGF0X3B1dF9hZGRyX2F0X3JwICh1bnNpZ25lZCBsb25nICpycCwgdW5zaWduZWQgbG9uZyBhZGRyLAorCQkJCQl1bnNpZ25lZCBsb25nIHJlbHZhbCkKK3sKKwlzaG9ydCAqc3JwID0gKHNob3J0ICopcnA7CisKKwlzd2l0Y2ggKGZsYXRfdjg1MF9nZXRfcmVsb2NfdHlwZSAocmVsdmFsKSkgeworCWNhc2UgRkxBVF9WODUwX1JfMzI6CisJCS8qIFNpbXBsZSAzMi1iaXQgYWRkcmVzcy4gICovCisJCXNycFswXSA9IGFkZHIgJiAweEZGRkY7CisJCXNycFsxXSA9IChhZGRyID4+IDE2KTsKKwkJYnJlYWs7CisKKwljYXNlIEZMQVRfVjg1MF9SX0hJMTZTX0xPMTY6CisJCS8qIFRoZSBoaWdoIGFuZCBsb3cgaGFsdmVzIG9mIHRoZSBhZGRyZXNzIGFyZSBpbiB0aGUgMTYKKwkJICAgYml0cyBhdCBSUCwgYW5kIHRoZSAybmQgd29yZCBvZiB0aGUgMzItYml0IGluc3RydWN0aW9uCisJCSAgIGZvbGxvd2luZyB0aGF0LCByZXNwZWN0aXZlbHkuICBUaGUgbG93IGhhbGYgaXMgX3NpZ25lZF8KKwkJICAgc28gd2UgbXVzdCBjYXJyeSBpdHMgc2lnbiBiaXQgdG8gdGhlIHVwcGVyIGhhbGYgYmVmb3JlCisJCSAgIHdyaXRpbmcgdGhlIHVwcGVyIGhhbGYuICAqLworCQlzcnBbMF0gPSAoYWRkciA+PiAxNikgKyAoKGFkZHIgPj4gMTUpICYgMHgxKTsKKwkJc3JwWzJdID0gYWRkciAmIDB4RkZGRjsKKwkJYnJlYWs7CisKKwljYXNlIEZMQVRfVjg1MF9SX0hJMTZTX0xPMTU6CisJCS8qIFRoZSBoaWdoIGFuZCBsb3cgaGFsdmVzIG9mIHRoZSBhZGRyZXNzIGFyZSBpbiB0aGUgMTYKKwkJICAgYml0cyBhdCBSUCwgYW5kIHRoZSB1cHBlciAxNSBiaXRzIG9mIHRoZSAybmQgd29yZCBvZiB0aGUKKwkJICAgMzItYml0IGluc3RydWN0aW9uIGZvbGxvd2luZyB0aGF0LCByZXNwZWN0aXZlbHkuICBUaGUKKwkJICAgbG93IGhhbGYgaXMgX3NpZ25lZF8gc28gd2UgbXVzdCBjYXJyeSBpdHMgc2lnbiBiaXQgdG8KKwkJICAgdGhlIHVwcGVyIGhhbGYgYmVmb3JlIHdyaXRpbmcgdGhlIHVwcGVyIGhhbGYuICBUaGUKKwkJICAgbG93ZXN0IGJpdCB3ZSBwcmVzZXJ2ZSBmcm9tIHRoZSBleGlzdGluZyBpbnN0cnVjdGlvbi4gICovCisJCXNycFswXSA9IChhZGRyID4+IDE2KSArICgoYWRkciA+PiAxNSkgJiAweDEpOworCQlzcnBbMl0gPSAoYWRkciAmIDB4RkZGRSkgfCAoc3JwWzJdICYgMHgxKTsKKwkJYnJlYWs7CisJfQorfQorCisjZW5kaWYgLyogX19WODUwX0ZMQVRfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS12ODUwL2ZwZ2E4NWUyYy5oIGIvaW5jbHVkZS9hc20tdjg1MC9mcGdhODVlMmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzJmMDQ1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdjg1MC9mcGdhODVlMmMuaApAQCAtMCwwICsxLDg4IEBACisvKgorICogaW5jbHVkZS9hc20tdjg1MC9mcGdhODVlMmMuaCAtLSBNYWNoaW5lLWRlcGVuZGVudCBkZWZzIGZvcgorICoJRlBHQSBpbXBsZW1lbnRhdGlvbiBvZiBWODUwRTIvTkE4NUUyQworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDIsMDMgIE5FQyBFbGVjdHJvbmljcyBDb3Jwb3JhdGlvbgorICogIENvcHlyaWdodCAoQykgMjAwMiwwMyAgTWlsZXMgQmFkZXIgPG1pbGVzQGdudS5vcmc+CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcworICogYXJjaGl2ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFdyaXR0ZW4gYnkgTWlsZXMgQmFkZXIgPG1pbGVzQGdudS5vcmc+CisgKi8KKworI2lmbmRlZiBfX1Y4NTBfRlBHQTg1RTJDX0hfXworI2RlZmluZSBfX1Y4NTBfRlBHQTg1RTJDX0hfXworCisjaW5jbHVkZSA8YXNtL3Y4NTBlMi5oPgorI2luY2x1ZGUgPGFzbS9jbGlua2FnZS5oPgorCisKKyNkZWZpbmUgQ1BVX01PREVMCSJ2ODUwZTIvZnBnYTg1ZTJjIgorI2RlZmluZSBDUFVfTU9ERUxfTE9ORwkiTkVDIFY4NTBFMi9OQTg1RTJDIgorI2RlZmluZSBQTEFURk9STQkiZnBnYTg1ZTJjIgorI2RlZmluZSBQTEFURk9STV9MT05HCSJOQTg1RTJDIEZQR0EgaW1wbGVtZW50YXRpb24iCisKKworLyogYGV4dGVybmFsIHJhbScuICAqLworI2RlZmluZSBFUkFNX0FERFIJCTAKKyNkZWZpbmUgRVJBTV9TSVpFCQkweDAwMTAwMDAwIC8qIDFNQiAqLworCisKKy8qIEZQR0Egc3BlY2lmaWMgY29udHJvbCByZWdpc3RlcnMuICAqLworCisvKiBXcml0aW5nIGEgbm9uLXplcm8gdmFsdWUgdG8gRkxHUkVHKDApIHdpbGwgc2lnbmFsIHRoZSBjb250cm9sbGluZyBDUFUKKyAgIHRvIHN0b3AgZXhlY3V0aW9uLiAgKi8KKyNkZWZpbmUgRkxHUkVHX0FERFIobikJCSgweEZGRTgwMTAwICsgMioobikpCisjZGVmaW5lIEZMR1JFRyhuKQkJKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKUZMR1JFR19BRERSIChuKSkKKyNkZWZpbmUgRkxHUkVHX05VTQkJMgorCisjZGVmaW5lIENTREVWX0FERFIobikJCSgweEZGRTgwMTEwICsgMioobikpCisjZGVmaW5lIENTREVWKG4pCQkoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopQ1NERVZfQUREUiAobikpCisKKworLyogVGltZXIgaW50ZXJydXB0cyAwLTMsIGludGVycnVwdCBhdCBpbnRlcnZhbHMgZnJvbSBDTEsvNDA5NiB0byBDTEsvMTYzODQuICAqLworI2RlZmluZSBJUlFfUlBVKG4pCQkoNjAgKyAobikpCisjZGVmaW5lIElSUV9SUFVfTlVNCQk0CisKKy8qIEZvciA8YXNtL2lycS5oPiAqLworI2RlZmluZSBOVU1fQ1BVX0lSUVMJCTY0CisKKworLyogR2VuZXJhbC1wdXJwb3NlIHRpbWVyLiAgKi8KKy8qIGNvbnRyb2wvc3RhdHVzIHJlZ2lzdGVyIChjYW4gb25seSBiZSByZWFkL3dyaXR0ZW4gdmlhIGJpdCBpbnNucykgKi8KKyNkZWZpbmUgUlBVX0dUTUNfQUREUgkJMHhGRkZGRkIwMAorI2RlZmluZSBSUFVfR1RNQwkJKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKVJQVV9HVE1DX0FERFIpCisjZGVmaW5lIFJQVV9HVE1DX0NFX0JJVAkJNyAvKiBjbG9jayBlbmFibGUgKGNvbnRyb2wpICovCisjZGVmaW5lIFJQVV9HVE1DX09WX0JJVAkJNiAvKiBvdmVyZmxvdyAoc3RhdHVzKSAqLworI2RlZmluZSBSUFVfR1RNQ19DTEtfQklUCTEgLyogMCA9IC41IE1IeiBDTEssIDEgPSAxIE1oeiAoY29udHJvbCkgKi8KKy8qIDMyLWJpdCBjb3VudCAoOCBsZWFzdC1zaWduaWZpY2FudCBiaXRzIGFyZSBhbHdheXMgemVybykuICAqLworI2RlZmluZSBSUFVfR1RNX0FERFIJCTB4RkZGRkZCMjgKKyNkZWZpbmUgUlBVX0dUTQkJCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKilSUFVfR1RNQ19BRERSKQorCisKKy8qIEZvciA8YXNtL3BhZ2UuaD4gKi8KKyNkZWZpbmUgUEFHRV9PRkZTRVQJCUVSQU1fQUREUiAvKiBtaW5pbXVtIGFsbG9jYXRhYmxlIGFkZHJlc3MgKi8KKworCisvKiBGb3IgPGFzbS9lbnRyeS5oPiAqLworLyogYFIwIFJBTScsIHVzZWQgZm9yIGEgZmV3IG1pc2NlbGxhbmVvdXMgdmFyaWFibGVzIHRoYXQgbXVzdCBiZSBhY2Nlc3NpYmxlCisgICB1c2luZyBhIGxvYWQgaW5zdHJ1Y3Rpb24gcmVsYXRpdmUgdG8gUjAuICBUaGUgRlBHQSBpbXBsZW1lbnRhdGlvbgorICAgYWN0dWFsbHkgaGFzIG5vIG9uLWNoaXAgUkFNLCBzbyB3ZSB1c2UgcGFydCBvZiBtYWluIHJhbSBqdXN0IGFmdGVyIHRoZQorICAgaW50ZXJydXB0IHZlY3RvcnMuICAqLworI2lmZGVmIF9fQVNTRU1CTFlfXworI2RlZmluZSBSMF9SQU1fQUREUgkJbG8oQ19TWU1CT0xfTkFNRShfcjBfcmFtKSkKKyNlbHNlCitleHRlcm4gY2hhciBfcjBfcmFtOworI2RlZmluZSBSMF9SQU1fQUREUgkJKCh1bnNpZ25lZCBsb25nKSZfcjBfcmFtKTsKKyNlbmRpZgorCisKKy8qIEZvciA8YXNtL3BhcmFtLmg+ICovCisjaWZuZGVmIEhaCisjZGVmaW5lIEhaCQkJMTIyIC8qIGFjdHVhbGx5LCA4LjE5Mm1zIHRpY2tzID1+IDEyMi4wNyAqLworI2VuZGlmCisKKworI2VuZGlmIC8qIF9fVjg1MF9GUEdBODVFMkNfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS12ODUwL2didXNfaW50LmggYi9pbmNsdWRlL2FzbS12ODUwL2didXNfaW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM0YmNlNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXY4NTAvZ2J1c19pbnQuaApAQCAtMCwwICsxLDk3IEBACisvKgorICogaW5jbHVkZS9hc20tdjg1MC9nYnVzX2ludC5oIC0tIE1pZGFzIGxhYnMgR0JVUyBpbnRlcnJ1cHQgc3VwcG9ydAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEsMDIgIE5FQyBDb3Jwb3JhdGlvbgorICogIENvcHlyaWdodCAoQykgMjAwMSwwMiAgTWlsZXMgQmFkZXIgPG1pbGVzQGdudS5vcmc+CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcworICogYXJjaGl2ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFdyaXR0ZW4gYnkgTWlsZXMgQmFkZXIgPG1pbGVzQGdudS5vcmc+CisgKi8KKworI2lmbmRlZiBfX1Y4NTBfR0JVU19JTlRfSF9fCisjZGVmaW5lIF9fVjg1MF9HQlVTX0lOVF9IX18KKworCisvKiBUaGUgR0JVUyBpbnRlcnJ1cHQgaW50ZXJmYWNlIGhhcyAzMiBpbnRlcnJ1cHRzIHNoYXJlZCBhbW9uZyA0CisgICBwcm9jZXNzb3IgaW50ZXJydXB0cy4gIFRoZSAzMiBHQlVTIGludGVycnVwdHMgYXJlIGRpdmlkZWQgaW50byB0d28KKyAgIHNldHMgb2YgMTYgZWFjaCwgZm9yIGFsbG9jYXRpbmcgYW1vbmcgY29udHJvbCByZWdpc3RlcnMsIGV0YyAodGhlcmUKKyAgIGFyZSB0d28gb2YgZWFjaCBjb250cm9sIHJlZ2lzdGVyLCB3aXRoIGJpdHMgMC0xNSBjb250cm9sbGluZyBhbgorICAgaW50ZXJydXB0IGVhY2gpLiAgKi8KKworLyogVGhlIEdCVVMgaW50ZXJydXB0cyB0aGVtc2VsdmVzLiAgKi8KKyNkZWZpbmUgSVJRX0dCVVNfSU5UKG4pCQkoR0JVU19JTlRfQkFTRV9JUlEgKyAobikpCisjZGVmaW5lIElSUV9HQlVTX0lOVF9OVU0JMzIKKworLyogQ29udHJvbCByZWdpc3RlcnMuICAqLworI2RlZmluZSBHQlVTX0lOVF9TVEFUVVNfQUREUih3KQkoR0JVU19JTlRfQkFTRV9BRERSICsgKHcpKjB4NDApCisjZGVmaW5lIEdCVVNfSU5UX1NUQVRVUyh3KQkoKih2b2xhdGlsZSB1MTYgKilHQlVTX0lOVF9TVEFUVVNfQUREUih3KSkKKyNkZWZpbmUgR0JVU19JTlRfQ0xFQVJfQUREUih3KQkoR0JVU19JTlRfQkFTRV9BRERSICsgMHgxMCArICh3KSoweDQwKQorI2RlZmluZSBHQlVTX0lOVF9DTEVBUih3KQkoKih2b2xhdGlsZSB1MTYgKilHQlVTX0lOVF9DTEVBUl9BRERSKHcpKQorI2RlZmluZSBHQlVTX0lOVF9FREdFX0FERFIodykJKEdCVVNfSU5UX0JBU0VfQUREUiArIDB4MjAgKyAodykqMHg0MCkKKyNkZWZpbmUgR0JVU19JTlRfRURHRSh3KQkoKih2b2xhdGlsZSB1MTYgKilHQlVTX0lOVF9FREdFX0FERFIodykpCisjZGVmaW5lIEdCVVNfSU5UX1BPTEFSSVRZX0FERFIodykJKEdCVVNfSU5UX0JBU0VfQUREUiArIDB4MzAgKyAodykqMHg0MCkKKyNkZWZpbmUgR0JVU19JTlRfUE9MQVJJVFkodykJKCoodm9sYXRpbGUgdTE2ICopR0JVU19JTlRfUE9MQVJJVFlfQUREUih3KSkKKy8qIFRoaXMgYWxsb3dzIGVuYWJsaW5nIGludGVycnVwdCBiaXRzIGluIHdvcmQgVyBmb3IgaW50ZXJydXB0IEdJTlRuLiAgKi8KKyNkZWZpbmUgR0JVU19JTlRfRU5BQkxFX0FERFIodywgbikgXAorICAgKEdCVVNfSU5UX0JBU0VfQUREUiArIDB4MTAwICsgKHcpKjB4MTAgKyAobikqMHgyMCkKKyNkZWZpbmUgR0JVU19JTlRfRU5BQkxFKHcsIG4pCSgqKHZvbGF0aWxlIHUxNiAqKUdCVVNfSU5UX0VOQUJMRV9BRERSKHcsIG4pKQorCisvKiBNYXBwaW5nIGJldHdlZW4ga2VybmVsIGludGVycnVwdCBudW1iZXJzIGFuZCBoYXJkd2FyZSBjb250cm9sIHJlZ3MvYml0cy4gICovCisjZGVmaW5lIEdCVVNfSU5UX0JJVFNfUEVSX1dPUkQJMTYKKyNkZWZpbmUgR0JVU19JTlRfTlVNX1dPUkRTCShJUlFfR0JVU19JTlRfTlVNIC8gR0JVU19JTlRfQklUU19QRVJfV09SRCkKKyNkZWZpbmUgR0JVU19JTlRfSVJRX1dPUkQoaXJxKQkoKChpcnEpIC0gR0JVU19JTlRfQkFTRV9JUlEpID4+IDQpCisjZGVmaW5lIEdCVVNfSU5UX0lSUV9CSVQoaXJxKQkoKChpcnEpIC0gR0JVU19JTlRfQkFTRV9JUlEpICYgMHhGKQorI2RlZmluZSBHQlVTX0lOVF9JUlFfTUFTSyhpcnEpCSgxIDw8IEdCVVNfSU5UX0lSUV9CSVQoaXJxKSkKKworCisvKiBQb3NzaWJsZSBwcmlvcml0aWVzIGZvciBHQlVTIGludGVycnVwdHMuICAqLworI2RlZmluZSBHQlVTX0lOVF9QUklPUklUWV9ISUdICQkyCisjZGVmaW5lIEdCVVNfSU5UX1BSSU9SSVRZX01FRElVTQk0CisjZGVmaW5lIEdCVVNfSU5UX1BSSU9SSVRZX0xPVwkJNgorCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKy8qIEVuYWJsZSBpbnRlcnJ1cHQgaGFuZGxpbmcgZm9yIGludGVycnVwdCBJUlEuICAqLworZXh0ZXJuIHZvaWQgZ2J1c19pbnRfZW5hYmxlX2lycSAodW5zaWduZWQgaXJxKTsKKy8qIERpc2FibGUgaW50ZXJydXB0IGhhbmRsaW5nIGZvciBpbnRlcnJ1cHQgSVJRLiAgTm90ZSB0aGF0IGFueQorICAgaW50ZXJydXB0cyByZWNlaXZlZCB3aGlsZSBkaXNhYmxlZCB3aWxsIGJlIGRlbGl2ZXJlZCBvbmNlIHRoZQorICAgaW50ZXJydXB0IGlzIGVuYWJsZWQgYWdhaW4sIHVubGVzcyB0aGV5IGFyZSBleHBsaWNpdGx5IGNsZWFyZWQgdXNpbmcKKyAgIGBnYnVzX2ludF9jbGVhcl9wZW5kaW5nX2lycScuICAqLworZXh0ZXJuIHZvaWQgZ2J1c19pbnRfZGlzYWJsZV9pcnEgKHVuc2lnbmVkIGlycSk7CisvKiBSZXR1cm4gdHJ1ZSBpZiBpbnRlcnJ1cHQgaGFuZGxpbmcgZm9yIGludGVycnVwdCBJUlEgaXMgZW5hYmxlZC4gICovCitleHRlcm4gaW50IGdidXNfaW50X2lycV9lbmFibGVkICh1bnNpZ25lZCBpcnEpOworLyogRGlzYWJsZSBhbGwgR0JVUyBpcnFzLiAgKi8KK2V4dGVybiB2b2lkIGdidXNfaW50X2Rpc2FibGVfaXJxcyAodm9pZCk7CisvKiBDbGVhciBhbnkgcGVuZGluZyBpbnRlcnJ1cHRzIGZvciBJUlEuICAqLworZXh0ZXJuIHZvaWQgZ2J1c19pbnRfY2xlYXJfcGVuZGluZ19pcnEgKHVuc2lnbmVkIGlycSk7CisvKiBSZXR1cm4gdHJ1ZSBpZiBpbnRlcnJ1cHQgSVJRIGlzIHBlbmRpbmcgKGJ1dCBkaXNhYmxlZCkuICAqLworZXh0ZXJuIGludCBnYnVzX2ludF9pcnFfcGVuZGluZyAodW5zaWduZWQgaXJxKTsKKworCitzdHJ1Y3QgZ2J1c19pbnRfaXJxX2luaXQgeworCWNvbnN0IGNoYXIgKm5hbWU7CS8qIG5hbWUgb2YgaW50ZXJydXB0IHR5cGUgKi8KKworCS8qIFJhbmdlIG9mIGtlcm5lbCBpcnEgbnVtYmVycyBmb3IgdGhpcyB0eXBlOgorCSAgIEJBU0UsIEJBU0UrSU5URVJWQUwsIC4uLiwgQkFTRStJTlRFUlZBTCpOVU0gICovCisJdW5zaWduZWQgYmFzZSwgbnVtLCBpbnRlcnZhbDsKKworCXVuc2lnbmVkIHByaW9yaXR5OwkvKiBpbnRlcnJ1cHQgcHJpb3JpdHkgdG8gYXNzaWduICovCit9Oworc3RydWN0IGh3X2ludGVycnVwdF90eXBlOwkvKiBmd2QgZGVjbCAqLworCisvKiBJbml0aWFsaXplIEhXX0lSUV9UWVBFUyBmb3IgR0JVUyBpcnFzIGRlc2NyaWJlZCBpbiBhcnJheQorICAgSU5JVFMgKHdoaWNoIGlzIHRlcm1pbmF0ZWQgYnkgYW4gZW50cnkgd2l0aCB0aGUgbmFtZSBmaWVsZCA9PSAwKS4gICovCitleHRlcm4gdm9pZCBnYnVzX2ludF9pbml0X2lycV90eXBlcyAoc3RydWN0IGdidXNfaW50X2lycV9pbml0ICppbml0cywKKwkJCQkgICAgIHN0cnVjdCBod19pbnRlcnJ1cHRfdHlwZSAqaHdfaXJxX3R5cGVzKTsKKworLyogSW5pdGlhbGl6ZSBHQlVTIGludGVycnVwdHMuICAqLworZXh0ZXJuIHZvaWQgZ2J1c19pbnRfaW5pdF9pcnFzICh2b2lkKTsKKworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKworCisjZW5kaWYgLyogX19WODUwX0dCVVNfSU5UX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdjg1MC9oYXJkaXJxLmggYi9pbmNsdWRlL2FzbS12ODUwL2hhcmRpcnEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGZjYTgwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdjg1MC9oYXJkaXJxLmgKQEAgLTAsMCArMSwyNSBAQAorI2lmbmRlZiBfX1Y4NTBfSEFSRElSUV9IX18KKyNkZWZpbmUgX19WODUwX0hBUkRJUlFfSF9fCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludCBfX3NvZnRpcnFfcGVuZGluZzsKK30gX19fX2NhY2hlbGluZV9hbGlnbmVkIGlycV9jcHVzdGF0X3Q7CisKKyNpbmNsdWRlIDxsaW51eC9pcnFfY3B1c3RhdC5oPgkvKiBTdGFuZGFyZCBtYXBwaW5ncyBmb3IgaXJxX2NwdXN0YXRfdCBhYm92ZSAqLworCisjZGVmaW5lIEhBUkRJUlFfQklUUwk4CisKKy8qCisgKiBUaGUgaGFyZGlycSBtYXNrIGhhcyB0byBiZSBsYXJnZSBlbm91Z2ggdG8gaGF2ZQorICogc3BhY2UgZm9yIHBvdGVudGlhbGx5IGFsbCBJUlEgc291cmNlcyBpbiB0aGUgc3lzdGVtCisgKiBuZXN0aW5nIG9uIGEgc2luZ2xlIENQVToKKyAqLworI2lmICgxIDw8IEhBUkRJUlFfQklUUykgPCBOUl9JUlFTCisjIGVycm9yIEhBUkRJUlFfQklUUyBpcyB0b28gbG93IQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX1Y4NTBfSEFSRElSUV9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXY4NTAvaGlnaHJlc190aW1lci5oIGIvaW5jbHVkZS9hc20tdjg1MC9oaWdocmVzX3RpbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg2ZmI0OQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXY4NTAvaGlnaHJlc190aW1lci5oCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS12ODUwL2hpZ2hyZXNfdGltZXIuaCAtLSBIaWdoIHJlc29sdXRpb24gdGltaW5nIHJvdXRpbmVzCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMSwwMyAgTkVDIEVsZWN0cm9uaWNzIENvcnBvcmF0aW9uCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxLDAzICBNaWxlcyBCYWRlciA8bWlsZXNAZ251Lm9yZz4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzCisgKiBhcmNoaXZlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogV3JpdHRlbiBieSBNaWxlcyBCYWRlciA8bWlsZXNAZ251Lm9yZz4KKyAqLworCisjaWZuZGVmIF9fVjg1MF9ISUdIUkVTX1RJTUVSX0hfXworI2RlZmluZSBfX1Y4NTBfSElHSFJFU19USU1FUl9IX18KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGFzbS9lbnRyeS5oPgorCisKKy8qIEZyZXF1ZW5jeSBvZiB0aGUgYHNsb3cgdGlja3MnIChvbmUgdGljayBlYWNoIHRpbWUgdGhlIGZhc3QtdGljaworICAgY291bnRlciBvdmVyZmxvd3MpLiAgKi8KKyNkZWZpbmUgSElHSFJFU19USU1FUl9TTE9XX1RJQ0tfUkFURQkyNQorCisvKiBXaGljaCB0aW1lciBpbiB0aGUgVjg1MEUgYFRpbWVyIEQnIHdlIHVzZS4gICovCisjZGVmaW5lIEhJR0hSRVNfVElNRVJfVElNRVJfRF9VTklUCTMKKworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCitleHRlcm4gdm9pZCBoaWdocmVzX3RpbWVyX3N0YXJ0ICh2b2lkKSwgaGlnaHJlc190aW1lcl9zdG9wICh2b2lkKTsKK2V4dGVybiB2b2lkIGhpZ2hyZXNfdGltZXJfcmVzZXQgKHZvaWQpOworZXh0ZXJuIHZvaWQgaGlnaHJlc190aW1lcl9yZWFkX3RpY2tzICh1MzIgKnNsb3dfdGlja3MsIHUzMiAqZmFzdF90aWNrcyk7CitleHRlcm4gdm9pZCBoaWdocmVzX3RpbWVyX3RpY2tzX3RvX3RpbWV2YWwgKHUzMiBzbG93X3RpY2tzLCB1MzIgZmFzdF90aWNrcywKKwkJCQkJICAgIHN0cnVjdCB0aW1ldmFsICp0dik7CitleHRlcm4gdm9pZCBoaWdocmVzX3RpbWVyX3JlYWQgKHN0cnVjdCB0aW1ldmFsICp0dik7CisKKyNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCisKKworI2VuZGlmIC8qIF9fVjg1MF9ISUdIUkVTX1RJTUVSX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdjg1MC9od19pcnEuaCBiL2luY2x1ZGUvYXNtLXY4NTAvaHdfaXJxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJkYzk4ZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXY4NTAvaHdfaXJxLmgKQEAgLTAsMCArMSw4IEBACisjaWZuZGVmIF9fVjg1MF9IV19JUlFfSF9fCisjZGVmaW5lIF9fVjg1MF9IV19JUlFfSF9fCisKK2V4dGVybiBpbmxpbmUgdm9pZCBod19yZXNlbmRfaXJxIChzdHJ1Y3QgaHdfaW50ZXJydXB0X3R5cGUgKmgsIHVuc2lnbmVkIGludCBpKQoreworfQorCisjZW5kaWYgLyogX19WODUwX0hXX0lSUV9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXY4NTAvaW8uaCBiL2luY2x1ZGUvYXNtLXY4NTAvaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjVlZmQxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdjg1MC9pby5oCkBAIC0wLDAgKzEsMTMzIEBACisvKgorICogaW5jbHVkZS9hc20tdjg1MC9pby5oIC0tIE1pc2MgSS9PIG9wZXJhdGlvbnMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxLDAyLDAzLDA0ICBORUMgRWxlY3Ryb25pY3MgQ29ycG9yYXRpb24KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEsMDIsMDMsMDQgIE1pbGVzIEJhZGVyIDxtaWxlc0BnbnUub3JnPgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMKKyAqIGFyY2hpdmUgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBXcml0dGVuIGJ5IE1pbGVzIEJhZGVyIDxtaWxlc0BnbnUub3JnPgorICovCisKKyNpZm5kZWYgX19WODUwX0lPX0hfXworI2RlZmluZSBfX1Y4NTBfSU9fSF9fCisKKyNkZWZpbmUgSU9fU1BBQ0VfTElNSVQgMHhGRkZGRkZGRgorCisjZGVmaW5lIHJlYWRiKGFkZHIpIFwKKyAgKHsgdW5zaWduZWQgY2hhciBfX3YgPSAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIChhZGRyKSk7IF9fdjsgfSkKKyNkZWZpbmUgcmVhZHcoYWRkcikgXAorICAoeyB1bnNpZ25lZCBzaG9ydCBfX3YgPSAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSAoYWRkcikpOyBfX3Y7IH0pCisjZGVmaW5lIHJlYWRsKGFkZHIpIFwKKyAgKHsgdW5zaWduZWQgbG9uZyBfX3YgPSAoKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopIChhZGRyKSk7IF9fdjsgfSkKKworI2RlZmluZSByZWFkYl9yZWxheGVkKGEpIHJlYWRiKGEpCisjZGVmaW5lIHJlYWR3X3JlbGF4ZWQoYSkgcmVhZHcoYSkKKyNkZWZpbmUgcmVhZGxfcmVsYXhlZChhKSByZWFkbChhKQorCisjZGVmaW5lIHdyaXRlYihiLCBhZGRyKSBcCisgICh2b2lkKSgoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIChhZGRyKSkgPSAoYikpCisjZGVmaW5lIHdyaXRldyhiLCBhZGRyKSBcCisgICh2b2lkKSgoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSAoYWRkcikpID0gKGIpKQorI2RlZmluZSB3cml0ZWwoYiwgYWRkcikgXAorICAodm9pZCkoKCoodm9sYXRpbGUgdW5zaWduZWQgaW50ICopIChhZGRyKSkgPSAoYikpCisKKyNkZWZpbmUgX19yYXdfcmVhZGIgcmVhZGIKKyNkZWZpbmUgX19yYXdfcmVhZHcgcmVhZHcKKyNkZWZpbmUgX19yYXdfcmVhZGwgcmVhZGwKKyNkZWZpbmUgX19yYXdfd3JpdGViIHdyaXRlYgorI2RlZmluZSBfX3Jhd193cml0ZXcgd3JpdGV3CisjZGVmaW5lIF9fcmF3X3dyaXRlbCB3cml0ZWwKKworI2RlZmluZSBpbmIoYWRkcikJcmVhZGIgKGFkZHIpCisjZGVmaW5lIGludyhhZGRyKQlyZWFkdyAoYWRkcikKKyNkZWZpbmUgaW5sKGFkZHIpCXJlYWRsIChhZGRyKQorI2RlZmluZSBvdXRiKHgsIGFkZHIpCSgodm9pZCkgd3JpdGViICh4LCBhZGRyKSkKKyNkZWZpbmUgb3V0dyh4LCBhZGRyKQkoKHZvaWQpIHdyaXRldyAoeCwgYWRkcikpCisjZGVmaW5lIG91dGwoeCwgYWRkcikJKCh2b2lkKSB3cml0ZWwgKHgsIGFkZHIpKQorCisjZGVmaW5lIGluYl9wKHBvcnQpCQlpbmIoKHBvcnQpKQorI2RlZmluZSBvdXRiX3AodmFsLCBwb3J0KQlvdXRiKCh2YWwpLCAocG9ydCkpCisjZGVmaW5lIGlud19wKHBvcnQpCQlpbncoKHBvcnQpKQorI2RlZmluZSBvdXR3X3AodmFsLCBwb3J0KQlvdXR3KCh2YWwpLCAocG9ydCkpCisjZGVmaW5lIGlubF9wKHBvcnQpCQlpbmwoKHBvcnQpKQorI2RlZmluZSBvdXRsX3AodmFsLCBwb3J0KQlvdXRsKCh2YWwpLCAocG9ydCkpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbnNiICh1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmRzdCwgdW5zaWduZWQgbG9uZyBjb3VudCkKK3sKKwl1bnNpZ25lZCBjaGFyICpwID0gZHN0OworCXdoaWxlIChjb3VudC0tKQorCQkqcCsrID0gaW5iIChwb3J0KTsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBpbnN3ICh1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmRzdCwgdW5zaWduZWQgbG9uZyBjb3VudCkKK3sKKwl1bnNpZ25lZCBzaG9ydCAqcCA9IGRzdDsKKwl3aGlsZSAoY291bnQtLSkKKwkJKnArKyA9IGludyAocG9ydCk7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgaW5zbCAodW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICpkc3QsIHVuc2lnbmVkIGxvbmcgY291bnQpCit7CisJdW5zaWduZWQgbG9uZyAqcCA9IGRzdDsKKwl3aGlsZSAoY291bnQtLSkKKwkJKnArKyA9IGlubCAocG9ydCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorb3V0c2IgKHVuc2lnbmVkIGxvbmcgcG9ydCwgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBsb25nIGNvdW50KQoreworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnAgPSBzcmM7CisJd2hpbGUgKGNvdW50LS0pCisJCW91dGIgKCpwKyssIHBvcnQpOworfQorc3RhdGljIGlubGluZSB2b2lkCitvdXRzdyAodW5zaWduZWQgbG9uZyBwb3J0LCBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGxvbmcgY291bnQpCit7CisJY29uc3QgdW5zaWduZWQgc2hvcnQgKnAgPSBzcmM7CisJd2hpbGUgKGNvdW50LS0pCisJCW91dHcgKCpwKyssIHBvcnQpOworfQorc3RhdGljIGlubGluZSB2b2lkCitvdXRzbCAodW5zaWduZWQgbG9uZyBwb3J0LCBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGxvbmcgY291bnQpCit7CisJY29uc3QgdW5zaWduZWQgbG9uZyAqcCA9IHNyYzsKKwl3aGlsZSAoY291bnQtLSkKKwkJb3V0bCAoKnArKywgcG9ydCk7Cit9CisKKyNkZWZpbmUgaW91bm1hcChhZGRyKQkJCQkoKHZvaWQpMCkKKyNkZWZpbmUgaW9yZW1hcChwaHlzYWRkciwgc2l6ZSkJCQkocGh5c2FkZHIpCisjZGVmaW5lIGlvcmVtYXBfbm9jYWNoZShwaHlzYWRkciwgc2l6ZSkJCShwaHlzYWRkcikKKyNkZWZpbmUgaW9yZW1hcF93cml0ZXRocm91Z2gocGh5c2FkZHIsIHNpemUpCShwaHlzYWRkcikKKyNkZWZpbmUgaW9yZW1hcF9mdWxsY2FjaGUocGh5c2FkZHIsIHNpemUpCShwaHlzYWRkcikKKworI2RlZmluZSBtbWlvd2IoKQorCisjZGVmaW5lIHBhZ2VfdG9fcGh5cyhwYWdlKSAgICAgICgocGFnZSAtIG1lbV9tYXApIDw8IFBBR0VfU0hJRlQpCisjaWYgMAorLyogVGhpcyBpcyByZWFsbHkgc3R1cGlkOyBkb24ndCBkZWZpbmUgaXQuICAqLworI2RlZmluZSBwYWdlX3RvX2J1cyhwYWdlKSAgICAgICBwYWdlX3RvX3BoeXMgKHBhZ2UpCisjZW5kaWYKKworLyogQ29udmVyc2lvbiBiZXR3ZWVuIHZpcnR1YWwgYW5kIHBoeXNpY2FsIG1hcHBpbmdzLiAgKi8KKyNkZWZpbmUgbW1fcHRvdihhZGRyKQkJKCh2b2lkICopX19waHlzX3RvX3ZpcnQgKGFkZHIpKQorI2RlZmluZSBtbV92dG9wKGFkZHIpCQkoKHVuc2lnbmVkIGxvbmcpX192aXJ0X3RvX3BoeXMgKGFkZHIpKQorI2RlZmluZSBwaHlzX3RvX3ZpcnQoYWRkcikJKCh2b2lkICopX19waHlzX3RvX3ZpcnQgKGFkZHIpKQorI2RlZmluZSB2aXJ0X3RvX3BoeXMoYWRkcikJKCh1bnNpZ25lZCBsb25nKV9fdmlydF90b19waHlzIChhZGRyKSkKKworI2RlZmluZSBtZW1jcHlfZnJvbWlvKGRzdCwgc3JjLCBsZW4pIG1lbWNweSAoZHN0LCAodm9pZCAqKXNyYywgbGVuKQorI2RlZmluZSBtZW1jcHlfdG9pbyhkc3QsIHNyYywgbGVuKSBtZW1jcHkgKCh2b2lkICopZHN0LCBzcmMsIGxlbikKKworLyoKKyAqIENvbnZlcnQgYSBwaHlzaWNhbCBwb2ludGVyIHRvIGEgdmlydHVhbCBrZXJuZWwgcG9pbnRlciBmb3IgL2Rldi9tZW0KKyAqIGFjY2VzcworICovCisjZGVmaW5lIHhsYXRlX2Rldl9tZW1fcHRyKHApCV9fdmEocCkKKworLyoKKyAqIENvbnZlcnQgYSB2aXJ0dWFsIGNhY2hlZCBwb2ludGVyIHRvIGFuIHVuY2FjaGVkIHBvaW50ZXIKKyAqLworI2RlZmluZSB4bGF0ZV9kZXZfa21lbV9wdHIocCkJcAorCisjZW5kaWYgLyogX19WODUwX0lPX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdjg1MC9pb2N0bC5oIGIvaW5jbHVkZS9hc20tdjg1MC9pb2N0bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3NjVkZjYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS12ODUwL2lvY3RsLmgKQEAgLTAsMCArMSw4MCBAQAorLyogJElkOiBpb2N0bC5oLHYgMS4xIDIwMDIvMDkvMjggMTQ6NTg6NDEgZ2VyZyBFeHAgJAorICoKKyAqIGxpbnV4L2lvY3RsLmggZm9yIExpbnV4IGJ5IEguSC4gQmVyZ21hbi4KKyAqLworCisjaWZuZGVmIF9WODUwX0lPQ1RMX0gKKyNkZWZpbmUgX1Y4NTBfSU9DVExfSAorCisvKiBpb2N0bCBjb21tYW5kIGVuY29kaW5nOiAzMiBiaXRzIHRvdGFsLCBjb21tYW5kIGluIGxvd2VyIDE2IGJpdHMsCisgKiBzaXplIG9mIHRoZSBwYXJhbWV0ZXIgc3RydWN0dXJlIGluIHRoZSBsb3dlciAxNCBiaXRzIG9mIHRoZQorICogdXBwZXIgMTYgYml0cy4KKyAqIEVuY29kaW5nIHRoZSBzaXplIG9mIHRoZSBwYXJhbWV0ZXIgc3RydWN0dXJlIGluIHRoZSBpb2N0bCByZXF1ZXN0CisgKiBpcyB1c2VmdWwgZm9yIGNhdGNoaW5nIHByb2dyYW1zIGNvbXBpbGVkIHdpdGggb2xkIHZlcnNpb25zCisgKiBhbmQgdG8gYXZvaWQgb3ZlcndyaXRpbmcgdXNlciBzcGFjZSBvdXRzaWRlIHRoZSB1c2VyIGJ1ZmZlciBhcmVhLgorICogVGhlIGhpZ2hlc3QgMiBiaXRzIGFyZSByZXNlcnZlZCBmb3IgaW5kaWNhdGluZyB0aGUgYGBhY2Nlc3MgbW9kZScnLgorICogTk9URTogVGhpcyBsaW1pdHMgdGhlIG1heCBwYXJhbWV0ZXIgc2l6ZSB0byAxNmtCIC0xICEKKyAqLworCisvKgorICogSSBkb24ndCByZWFsbHkgaGF2ZSBhbnkgaWRlYSBhYm91dCB3aGF0IHRoaXMgc2hvdWxkIGxvb2sgbGlrZSwgc28KKyAqIGZvciB0aGUgdGltZSBiZWluZywgdGhpcyBpcyBoZWF2aWx5IGJhc2VkIG9uIHRoZSBQQyBkZWZpbml0aW9ucy4KKyAqLworCisvKgorICogVGhlIGZvbGxvd2luZyBpcyBmb3IgY29tcGF0aWJpbGl0eSBhY3Jvc3MgdGhlIHZhcmlvdXMgTGludXgKKyAqIHBsYXRmb3Jtcy4gIFRoZSBpMzg2IGlvY3RsIG51bWJlcmluZyBzY2hlbWUgZG9lc24ndCByZWFsbHkgZW5mb3JjZQorICogYSB0eXBlIGZpZWxkLiAgRGUgZmFjdG8sIGhvd2V2ZXIsIHRoZSB0b3AgOCBiaXRzIG9mIHRoZSBsb3dlciAxNgorICogYml0cyBhcmUgaW5kZWVkIHVzZWQgYXMgYSB0eXBlIGZpZWxkLCBzbyB3ZSBtaWdodCBqdXN0IGFzIHdlbGwgbWFrZQorICogdGhpcyBleHBsaWNpdCBoZXJlLiAgUGxlYXNlIGJlIHN1cmUgdG8gdXNlIHRoZSBkZWNvZGluZyBtYWNyb3MKKyAqIGJlbG93IGZyb20gbm93IG9uLgorICovCisjZGVmaW5lIF9JT0NfTlJCSVRTCTgKKyNkZWZpbmUgX0lPQ19UWVBFQklUUwk4CisjZGVmaW5lIF9JT0NfU0laRUJJVFMJMTQKKyNkZWZpbmUgX0lPQ19ESVJCSVRTCTIKKworI2RlZmluZSBfSU9DX05STUFTSwkoKDEgPDwgX0lPQ19OUkJJVFMpLTEpCisjZGVmaW5lIF9JT0NfVFlQRU1BU0sJKCgxIDw8IF9JT0NfVFlQRUJJVFMpLTEpCisjZGVmaW5lIF9JT0NfU0laRU1BU0sJKCgxIDw8IF9JT0NfU0laRUJJVFMpLTEpCisjZGVmaW5lIF9JT0NfRElSTUFTSwkoKDEgPDwgX0lPQ19ESVJCSVRTKS0xKQorCisjZGVmaW5lIF9JT0NfTlJTSElGVAkwCisjZGVmaW5lIF9JT0NfVFlQRVNISUZUCShfSU9DX05SU0hJRlQrX0lPQ19OUkJJVFMpCisjZGVmaW5lIF9JT0NfU0laRVNISUZUCShfSU9DX1RZUEVTSElGVCtfSU9DX1RZUEVCSVRTKQorI2RlZmluZSBfSU9DX0RJUlNISUZUCShfSU9DX1NJWkVTSElGVCtfSU9DX1NJWkVCSVRTKQorCisvKgorICogRGlyZWN0aW9uIGJpdHMuCisgKi8KKyNkZWZpbmUgX0lPQ19OT05FCTBVCisjZGVmaW5lIF9JT0NfV1JJVEUJMVUKKyNkZWZpbmUgX0lPQ19SRUFECTJVCisKKyNkZWZpbmUgX0lPQyhkaXIsdHlwZSxucixzaXplKSBcCisJKCgoZGlyKSAgPDwgX0lPQ19ESVJTSElGVCkgfCBcCisJICgodHlwZSkgPDwgX0lPQ19UWVBFU0hJRlQpIHwgXAorCSAoKG5yKSAgIDw8IF9JT0NfTlJTSElGVCkgfCBcCisJICgoc2l6ZSkgPDwgX0lPQ19TSVpFU0hJRlQpKQorCisvKiB1c2VkIHRvIGNyZWF0ZSBudW1iZXJzICovCisjZGVmaW5lIF9JTyh0eXBlLG5yKQkJX0lPQyhfSU9DX05PTkUsKHR5cGUpLChuciksMCkKKyNkZWZpbmUgX0lPUih0eXBlLG5yLHNpemUpCV9JT0MoX0lPQ19SRUFELCh0eXBlKSwobnIpLHNpemVvZihzaXplKSkKKyNkZWZpbmUgX0lPVyh0eXBlLG5yLHNpemUpCV9JT0MoX0lPQ19XUklURSwodHlwZSksKG5yKSxzaXplb2Yoc2l6ZSkpCisjZGVmaW5lIF9JT1dSKHR5cGUsbnIsc2l6ZSkJX0lPQyhfSU9DX1JFQUR8X0lPQ19XUklURSwodHlwZSksKG5yKSxzaXplb2Yoc2l6ZSkpCisKKy8qIHVzZWQgdG8gZGVjb2RlIGlvY3RsIG51bWJlcnMuLiAqLworI2RlZmluZSBfSU9DX0RJUihucikJCSgoKG5yKSA+PiBfSU9DX0RJUlNISUZUKSAmIF9JT0NfRElSTUFTSykKKyNkZWZpbmUgX0lPQ19UWVBFKG5yKQkJKCgobnIpID4+IF9JT0NfVFlQRVNISUZUKSAmIF9JT0NfVFlQRU1BU0spCisjZGVmaW5lIF9JT0NfTlIobnIpCQkoKChucikgPj4gX0lPQ19OUlNISUZUKSAmIF9JT0NfTlJNQVNLKQorI2RlZmluZSBfSU9DX1NJWkUobnIpCQkoKChucikgPj4gX0lPQ19TSVpFU0hJRlQpICYgX0lPQ19TSVpFTUFTSykKKworLyogLi4uYW5kIGZvciB0aGUgZHJpdmVycy9zb3VuZCBmaWxlcy4uLiAqLworCisjZGVmaW5lIElPQ19JTgkJKF9JT0NfV1JJVEUgPDwgX0lPQ19ESVJTSElGVCkKKyNkZWZpbmUgSU9DX09VVAkJKF9JT0NfUkVBRCA8PCBfSU9DX0RJUlNISUZUKQorI2RlZmluZSBJT0NfSU5PVVQJKChfSU9DX1dSSVRFfF9JT0NfUkVBRCkgPDwgX0lPQ19ESVJTSElGVCkKKyNkZWZpbmUgSU9DU0laRV9NQVNLCShfSU9DX1NJWkVNQVNLIDw8IF9JT0NfU0laRVNISUZUKQorI2RlZmluZSBJT0NTSVpFX1NISUZUCShfSU9DX1NJWkVTSElGVCkKKworI2VuZGlmIC8qIF9fVjg1MF9JT0NUTF9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXY4NTAvaW9jdGxzLmggYi9pbmNsdWRlL2FzbS12ODUwL2lvY3Rscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1YzBkYzkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS12ODUwL2lvY3Rscy5oCkBAIC0wLDAgKzEsODAgQEAKKyNpZm5kZWYgX19WODUwX0lPQ1RMU19IX18KKyNkZWZpbmUgX19WODUwX0lPQ1RMU19IX18KKworI2luY2x1ZGUgPGFzbS9pb2N0bC5oPgorCisvKiAweDU0IGlzIGp1c3QgYSBtYWdpYyBudW1iZXIgdG8gbWFrZSB0aGVzZSByZWxhdGl2ZWx5IHVuaXF1ZSAoJ1QnKSAqLworCisjZGVmaW5lIFRDR0VUUwkJMHg1NDAxCisjZGVmaW5lIFRDU0VUUwkJMHg1NDAyCisjZGVmaW5lIFRDU0VUU1cJCTB4NTQwMworI2RlZmluZSBUQ1NFVFNGCQkweDU0MDQKKyNkZWZpbmUgVENHRVRBCQkweDU0MDUKKyNkZWZpbmUgVENTRVRBCQkweDU0MDYKKyNkZWZpbmUgVENTRVRBVwkJMHg1NDA3CisjZGVmaW5lIFRDU0VUQUYJCTB4NTQwOAorI2RlZmluZSBUQ1NCUksJCTB4NTQwOQorI2RlZmluZSBUQ1hPTkMJCTB4NTQwQQorI2RlZmluZSBUQ0ZMU0gJCTB4NTQwQgorI2RlZmluZSBUSU9DRVhDTAkweDU0MEMKKyNkZWZpbmUgVElPQ05YQ0wJMHg1NDBECisjZGVmaW5lIFRJT0NTQ1RUWQkweDU0MEUKKyNkZWZpbmUgVElPQ0dQR1JQCTB4NTQwRgorI2RlZmluZSBUSU9DU1BHUlAJMHg1NDEwCisjZGVmaW5lIFRJT0NPVVRRCTB4NTQxMQorI2RlZmluZSBUSU9DU1RJCQkweDU0MTIKKyNkZWZpbmUgVElPQ0dXSU5TWgkweDU0MTMKKyNkZWZpbmUgVElPQ1NXSU5TWgkweDU0MTQKKyNkZWZpbmUgVElPQ01HRVQJMHg1NDE1CisjZGVmaW5lIFRJT0NNQklTCTB4NTQxNgorI2RlZmluZSBUSU9DTUJJQwkweDU0MTcKKyNkZWZpbmUgVElPQ01TRVQJMHg1NDE4CisjZGVmaW5lIFRJT0NHU09GVENBUgkweDU0MTkKKyNkZWZpbmUgVElPQ1NTT0ZUQ0FSCTB4NTQxQQorI2RlZmluZSBGSU9OUkVBRAkweDU0MUIKKyNkZWZpbmUgVElPQ0lOUQkJRklPTlJFQUQKKyNkZWZpbmUgVElPQ0xJTlVYCTB4NTQxQworI2RlZmluZSBUSU9DQ09OUwkweDU0MUQKKyNkZWZpbmUgVElPQ0dTRVJJQUwJMHg1NDFFCisjZGVmaW5lIFRJT0NTU0VSSUFMCTB4NTQxRgorI2RlZmluZSBUSU9DUEtUCQkweDU0MjAKKyNkZWZpbmUgRklPTkJJTwkJMHg1NDIxCisjZGVmaW5lIFRJT0NOT1RUWQkweDU0MjIKKyNkZWZpbmUgVElPQ1NFVEQJMHg1NDIzCisjZGVmaW5lIFRJT0NHRVRECTB4NTQyNAorI2RlZmluZSBUQ1NCUktQCQkweDU0MjUJLyogTmVlZGVkIGZvciBQT1NJWCB0Y3NlbmRicmVhaygpICovCisjZGVmaW5lIFRJT0NTQlJLCTB4NTQyNyAgLyogQlNEIGNvbXBhdGliaWxpdHkgKi8KKyNkZWZpbmUgVElPQ0NCUksJMHg1NDI4ICAvKiBCU0QgY29tcGF0aWJpbGl0eSAqLworI2RlZmluZSBUSU9DR1NJRAkweDU0MjkgIC8qIFJldHVybiB0aGUgc2Vzc2lvbiBJRCBvZiBGRCAqLworI2RlZmluZSBUSU9DR1BUTglfSU9SKCdUJywweDMwLCB1bnNpZ25lZCBpbnQpIC8qIEdldCBQdHkgTnVtYmVyIChvZiBwdHktbXV4IGRldmljZSkgKi8KKyNkZWZpbmUgVElPQ1NQVExDSwlfSU9XKCdUJywweDMxLCBpbnQpICAvKiBMb2NrL3VubG9jayBQdHkgKi8KKworI2RlZmluZSBGSU9OQ0xFWAkweDU0NTAgIC8qIHRoZXNlIG51bWJlcnMgbmVlZCB0byBiZSBhZGp1c3RlZC4gKi8KKyNkZWZpbmUgRklPQ0xFWAkJMHg1NDUxCisjZGVmaW5lIEZJT0FTWU5DCTB4NTQ1MgorI2RlZmluZSBUSU9DU0VSQ09ORklHCTB4NTQ1MworI2RlZmluZSBUSU9DU0VSR1dJTEQJMHg1NDU0CisjZGVmaW5lIFRJT0NTRVJTV0lMRAkweDU0NTUKKyNkZWZpbmUgVElPQ0dMQ0tUUk1JT1MJMHg1NDU2CisjZGVmaW5lIFRJT0NTTENLVFJNSU9TCTB4NTQ1NworI2RlZmluZSBUSU9DU0VSR1NUUlVDVAkweDU0NTggLyogRm9yIGRlYnVnZ2luZyBvbmx5ICovCisjZGVmaW5lIFRJT0NTRVJHRVRMU1IgICAweDU0NTkgLyogR2V0IGxpbmUgc3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIFRJT0NTRVJHRVRNVUxUSSAweDU0NUEgLyogR2V0IG11bHRpcG9ydCBjb25maWcgICovCisjZGVmaW5lIFRJT0NTRVJTRVRNVUxUSSAweDU0NUIgLyogU2V0IG11bHRpcG9ydCBjb25maWcgKi8KKworI2RlZmluZSBUSU9DTUlXQUlUCTB4NTQ1QwkvKiB3YWl0IGZvciBhIGNoYW5nZSBvbiBzZXJpYWwgaW5wdXQgbGluZShzKSAqLworI2RlZmluZSBUSU9DR0lDT1VOVAkweDU0NUQJLyogcmVhZCBzZXJpYWwgcG9ydCBpbmxpbmUgaW50ZXJydXB0IGNvdW50cyAqLworI2RlZmluZSBGSU9RU0laRQkweDU0NUUKKworLyogVXNlZCBmb3IgcGFja2V0IG1vZGUgKi8KKyNkZWZpbmUgVElPQ1BLVF9EQVRBCQkgMAorI2RlZmluZSBUSU9DUEtUX0ZMVVNIUkVBRAkgMQorI2RlZmluZSBUSU9DUEtUX0ZMVVNIV1JJVEUJIDIKKyNkZWZpbmUgVElPQ1BLVF9TVE9QCQkgNAorI2RlZmluZSBUSU9DUEtUX1NUQVJUCQkgOAorI2RlZmluZSBUSU9DUEtUX05PU1RPUAkJMTYKKyNkZWZpbmUgVElPQ1BLVF9ET1NUT1AJCTMyCisKKyNkZWZpbmUgVElPQ1NFUl9URU1UICAgIDB4MDEJLyogVHJhbnNtaXR0ZXIgcGh5c2ljYWxseSBlbXB0eSAqLworCisjZW5kaWYgLyogX19WODUwX0lPQ1RMU19IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXY4NTAvaXBjLmggYi9pbmNsdWRlL2FzbS12ODUwL2lwYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0NmUzZDkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS12ODUwL2lwYy5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pcGMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXY4NTAvaXBjYnVmLmggYi9pbmNsdWRlL2FzbS12ODUwL2lwY2J1Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4Y2JlOTgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS12ODUwL2lwY2J1Zi5oCkBAIC0wLDAgKzEsMjkgQEAKKyNpZm5kZWYgX19WODUwRV9JUENCVUZfSF9fCisjZGVmaW5lIF9fVjg1MEVfSVBDQlVGX0hfXworCisvKgorICogVGhlIHVzZXJfaXBjX3Blcm0gc3RydWN0dXJlIGZvciB2ODUwZSBhcmNoaXRlY3R1cmUuCisgKiBOb3RlIGV4dHJhIHBhZGRpbmcgYmVjYXVzZSB0aGlzIHN0cnVjdHVyZSBpcyBwYXNzZWQgYmFjayBhbmQgZm9ydGgKKyAqIGJldHdlZW4ga2VybmVsIGFuZCB1c2VyIHNwYWNlLgorICoKKyAqIFBhZCBzcGFjZSBpcyBsZWZ0IGZvcjoKKyAqIC0gMzItYml0IG1vZGVfdCBhbmQgc2VxCisgKiAtIDIgbWlzY2VsbGFuZW91cyAzMi1iaXQgdmFsdWVzCisgKi8KKworc3RydWN0IGlwYzY0X3Blcm0KK3sKKwlfX2tlcm5lbF9rZXlfdAkJa2V5OworCV9fa2VybmVsX3VpZDMyX3QJdWlkOworCV9fa2VybmVsX2dpZDMyX3QJZ2lkOworCV9fa2VybmVsX3VpZDMyX3QJY3VpZDsKKwlfX2tlcm5lbF9naWQzMl90CWNnaWQ7CisJX19rZXJuZWxfbW9kZV90CQltb2RlOworCXVuc2lnbmVkIHNob3J0CQlfX3BhZDE7CisJdW5zaWduZWQgc2hvcnQJCXNlcTsKKwl1bnNpZ25lZCBzaG9ydAkJX19wYWQyOworCXVuc2lnbmVkIGxvbmcJCV9fdW51c2VkMTsKKwl1bnNpZ25lZCBsb25nCQlfX3VudXNlZDI7Cit9OworCisjZW5kaWYgLyogX19WODUwRV9JUENCVUZfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS12ODUwL2lycS5oIGIvaW5jbHVkZS9hc20tdjg1MC9pcnEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDQzMTE1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdjg1MC9pcnEuaApAQCAtMCwwICsxLDY5IEBACisvKgorICogaW5jbHVkZS9hc20tdjg1MC9pcnEuaCAtLSBNYWNoaW5lIGludGVycnVwdCBoYW5kbGluZworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEsMDIsMDQgIE5FQyBFbGVjdHJvbmljcyBDb3Jwb3JhdGlvbgorICogIENvcHlyaWdodCAoQykgMjAwMSwwMiwwNCAgTWlsZXMgQmFkZXIgPG1pbGVzQGdudS5vcmc+CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcworICogYXJjaGl2ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFdyaXR0ZW4gYnkgTWlsZXMgQmFkZXIgPG1pbGVzQGdudS5vcmc+CisgKi8KKworI2lmbmRlZiBfX1Y4NTBfSVJRX0hfXworI2RlZmluZSBfX1Y4NTBfSVJRX0hfXworCisjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KKworLyogRGVmYXVsdCBOVU1fTUFDSF9JUlFTLiAgKi8KKyNpZm5kZWYgTlVNX01BQ0hfSVJRUworI2RlZmluZSBOVU1fTUFDSF9JUlFTCU5VTV9DUFVfSVJRUworI2VuZGlmCisKKy8qIE5NSXMgaGF2ZSBJUlEgbnVtYmVycyBmcm9tIEZJUlNUX05NSSB0byBGSVJTVF9OTUkrTlVNX05NSVMtMS4gICovCisjZGVmaW5lIEZJUlNUX05NSQlOVU1fTUFDSF9JUlFTCisjZGVmaW5lIElSUV9OTUkobikJKEZJUlNUX05NSSArIChuKSkKKy8qIHY4NTAgcHJvY2Vzc29ycyBoYXZlIDMgbm9uLW1hc2thYmxlIGludGVycnVwdHMuICAqLworI2RlZmluZSBOVU1fTk1JUwkzCisKKy8qIEluY2x1ZGVzIGJvdGggbWFza2FibGUgYW5kIG5vbi1tYXNrYWJsZSBpcnFzLiAgKi8KKyNkZWZpbmUgTlJfSVJRUwkJKE5VTV9NQUNIX0lSUVMgKyBOVU1fTk1JUykKKworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCitzdHJ1Y3QgcHRfcmVnczsKK3N0cnVjdCBod19pbnRlcnJ1cHRfdHlwZTsKK3N0cnVjdCBpcnFhY3Rpb247CisKKyNkZWZpbmUgaXJxX2Nhbm9uaWNhbGl6ZShpcnEpCShpcnEpCisKKy8qIEluaXRpYWxpemUgaXJxIGhhbmRsaW5nIGZvciBJUlFzLgorICAgQkFTRV9JUlEsIEJBU0VfSVJRK0lOVEVSVkFMLCAuLi4sIEJBU0VfSVJRK05VTSpJTlRFUlZBTAorICAgdG8gSVJRX1RZUEUuICBBbiBJUlFfVFlQRSBvZiAwIG1lYW5zIHRvIHVzZSBhIGdlbmVyaWMgaW50ZXJydXB0IHR5cGUuICAqLworZXh0ZXJuIHZvaWQKK2luaXRfaXJxX2hhbmRsZXJzIChpbnQgYmFzZV9pcnEsIGludCBudW0sIGludCBpbnRlcnZhbCwKKwkJICAgc3RydWN0IGh3X2ludGVycnVwdF90eXBlICppcnFfdHlwZSk7CisKK3R5cGVkZWYgdm9pZCAoKmlycV9oYW5kbGVyX3QpKGludCBpcnEsIHZvaWQgKmRhdGEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworLyogSGFuZGxlIGludGVycnVwdCBJUlEuICBSRUdTIGFyZSB0aGUgcmVnaXN0ZXJzIGF0IHRoZSB0aW1lIG9mIHRoZXIKKyAgIGludGVycnVwdC4gICovCitleHRlcm4gdW5zaWduZWQgaW50IGhhbmRsZV9pcnEgKGludCBpcnEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworCisvKiBFbmFibGUgaW50ZXJydXB0IGhhbmRsaW5nIG9uIGFuIGlycS4gICovCitleHRlcm4gdm9pZCBlbmFibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpOworCisvKiBEaXNhYmxlIGFuIGlycSBhbmQgd2FpdCBmb3IgY29tcGxldGlvbi4gICovCitleHRlcm4gdm9pZCBkaXNhYmxlX2lycSAodW5zaWduZWQgaW50IGlycSk7CisKKy8qIERpc2FibGUgYW4gaXJxIHdpdGhvdXQgd2FpdGluZy4gKi8KK2V4dGVybiB2b2lkIGRpc2FibGVfaXJxX25vc3luYyAodW5zaWduZWQgaW50IGlycSk7CisKK2V4dGVybiBpbnQgaGFuZGxlX0lSUV9ldmVudCh1bnNpZ25lZCBpbnQsIHN0cnVjdCBwdF9yZWdzICosIHN0cnVjdCBpcnFhY3Rpb24gKik7CisKKyNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiBfX1Y4NTBfSVJRX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdjg1MC9rbWFwX3R5cGVzLmggYi9pbmNsdWRlL2FzbS12ODUwL2ttYXBfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjg4OTc2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdjg1MC9rbWFwX3R5cGVzLmgKQEAgLTAsMCArMSwxOSBAQAorI2lmbmRlZiBfX1Y4NTBfS01BUF9UWVBFU19IX18KKyNkZWZpbmUgX19WODUwX0tNQVBfVFlQRVNfSF9fCisKK2VudW0ga21fdHlwZSB7CisJS01fQk9VTkNFX1JFQUQsCisJS01fU0tCX1NVTlJQQ19EQVRBLAorCUtNX1NLQl9EQVRBX1NPRlRJUlEsCisJS01fVVNFUjAsCisJS01fVVNFUjEsCisJS01fQklPX1NSQ19JUlEsCisJS01fQklPX0RTVF9JUlEsCisJS01fUFRFMCwKKwlLTV9QVEUxLAorCUtNX0lSUTAsCisJS01fSVJRMSwKKwlLTV9UWVBFX05SCit9OworCisjZW5kaWYgLyogX19WODUwX0tNQVBfVFlQRVNfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS12ODUwL2xpbmthZ2UuaCBiL2luY2x1ZGUvYXNtLXY4NTAvbGlua2FnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5MWMyZDAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS12ODUwL2xpbmthZ2UuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19BU01fTElOS0FHRV9ICisjZGVmaW5lIF9fQVNNX0xJTktBR0VfSAorCisvKiBOb3RoaW5nIHRvIHNlZSBoZXJlLi4uICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdjg1MC9sb2NhbC5oIGIvaW5jbHVkZS9hc20tdjg1MC9sb2NhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwNTE0OGEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS12ODUwL2xvY2FsLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fVjg1MF9MT0NBTF9IX18KKyNkZWZpbmUgX19WODUwX0xPQ0FMX0hfXworCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbG9jYWwuaD4KKworI2VuZGlmIC8qIF9fVjg1MF9MT0NBTF9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXY4NTAvbWEuaCBiL2luY2x1ZGUvYXNtLXY4NTAvbWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWU2NjQ3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdjg1MC9tYS5oCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogaW5jbHVkZS9hc20tdjg1MC9tYS5oIC0tIFY4NTBFL01BIHNlcmllcyBvZiBjcHUgY2hpcHMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxLDAyLDAzICBORUMgRWxlY3Ryb25pY3MgQ29ycG9yYXRpb24KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEsMDIsMDMgIE1pbGVzIEJhZGVyIDxtaWxlc0BnbnUub3JnPgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMKKyAqIGFyY2hpdmUgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBXcml0dGVuIGJ5IE1pbGVzIEJhZGVyIDxtaWxlc0BnbnUub3JnPgorICovCisKKyNpZm5kZWYgX19WODUwX01BX0hfXworI2RlZmluZSBfX1Y4NTBfTUFfSF9fCisKKy8qIFRoZSBNQSBzZXJpZXMgdXNlcyB0aGUgVjg1MEUgY3B1IGNvcmUuICAqLworI2luY2x1ZGUgPGFzbS92ODUwZS5oPgorCisKKy8qIEZvciA8YXNtL2VudHJ5Lmg+ICovCisvKiBXZSB1c2Ugb24tY2hpcCBSQU0sIGZvciBhIGZldyBtaXNjZWxsYW5lb3VzIHZhcmlhYmxlcyB0aGF0IG11c3QgYmUKKyAgIGFjY2Vzc2libGUgdXNpbmcgYSBsb2FkIGluc3RydWN0aW9uIHJlbGF0aXZlIHRvIFIwLiAgVGhlIGFtb3VudAorICAgdmFyaWVzIGJldHdlZW4gY2hpcCBtb2RlbHMsIGJ1dCB0aGVyZSdzIGFsd2F5cyBhdCBsZWFzdCA0SywgYW5kIGl0CisgICBzaG91bGQgYWx3YXlzIHN0YXJ0IGF0IEZGRkZDMDAwLiAgKi8KKyNkZWZpbmUgUjBfUkFNX0FERFIJCQkweEZGRkZDMDAwCisKKworLyogTUEgc2VyaWVzIFVBUlQgZGV0YWlscy4gICovCisjZGVmaW5lIFY4NTBFX1VBUlRfQkFTRV9GUkVRCQlDUFVfQ0xPQ0tfRlJFUQorCisvKiBUaGlzIGlzIGEgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBiZWZvcmUgY29uZmlndXJpbmcgdGhlIFVBUlQuICAqLworI2RlZmluZSBWODUwRV9VQVJUX1BSRV9DT05GSUdVUkUJbWFfdWFydF9wcmVfY29uZmlndXJlCisjaWZuZGVmIF9fQVNTRU1CTFlfXworZXh0ZXJuIHZvaWQgbWFfdWFydF9wcmVfY29uZmlndXJlICh1bnNpZ25lZCBjaGFuLAorCQkJCSAgIHVuc2lnbmVkIGNmbGFncywgdW5zaWduZWQgYmF1ZCk7CisjZW5kaWYKKworCisvKiBNQSBzZXJpZXMgdGltZXIgQyBkZXRhaWxzLiAgKi8KKyNkZWZpbmUgVjg1MEVfVElNRVJfQ19CQVNFX0FERFIJCTB4RkZGRkY2MDAKKworCisvKiBNQSBzZXJpZXMgdGltZXIgRCBkZXRhaWxzLiAgKi8KKyNkZWZpbmUgVjg1MEVfVElNRVJfRF9CQVNFX0FERFIJCTB4RkZGRkY1NDAKKyNkZWZpbmUgVjg1MEVfVElNRVJfRF9UTURfQkFTRV9BRERSIAkoVjg1MEVfVElNRVJfRF9CQVNFX0FERFIgKyAweDApCisjZGVmaW5lIFY4NTBFX1RJTUVSX0RfQ01EX0JBU0VfQUREUiAJKFY4NTBFX1RJTUVSX0RfQkFTRV9BRERSICsgMHgyKQorI2RlZmluZSBWODUwRV9USU1FUl9EX1RNQ0RfQkFTRV9BRERSIAkoVjg1MEVfVElNRVJfRF9CQVNFX0FERFIgKyAweDQpCisKKyNkZWZpbmUgVjg1MEVfVElNRVJfRF9CQVNFX0ZSRVEJCUNQVV9DTE9DS19GUkVRCisKKworLyogUG9ydCAwICovCisvKiBEaXJlY3QgSS9PLiAgQml0cyAwLTcgYXJlIHBpbnMgUDAwLVAwNy4gICovCisjZGVmaW5lIE1BX1BPUlQwX0lPX0FERFIJCTB4RkZGRkY0MDAKKyNkZWZpbmUgTUFfUE9SVDBfSU8JCQkoKih2b2xhdGlsZSB1OCAqKU1BX1BPUlQwX0lPX0FERFIpCisvKiBQb3J0IG1vZGUgKGZvciBkaXJlY3QgSS9PLCAwID0gb3V0cHV0LCAxID0gaW5wdXQpLiAgKi8KKyNkZWZpbmUgTUFfUE9SVDBfUE1fQUREUgkJMHhGRkZGRjQyMAorI2RlZmluZSBNQV9QT1JUMF9QTQkJCSgqKHZvbGF0aWxlIHU4ICopTUFfUE9SVDBfUE1fQUREUikKKy8qIFBvcnQgbW9kZSBjb250cm9sICgwID0gZGlyZWN0IEkvTyBtb2RlLCAxID0gYWx0ZXJuYXRpdmUgSS9PIG1vZGUpLiAgKi8KKyNkZWZpbmUgTUFfUE9SVDBfUE1DX0FERFIJCTB4RkZGRkY0NDAKKyNkZWZpbmUgTUFfUE9SVDBfUE1DCQkJKCoodm9sYXRpbGUgdTggKilNQV9QT1JUMF9QTUNfQUREUikKKy8qIFBvcnQgZnVuY3Rpb24gY29udHJvbCAoZm9yIFAwNC1QMDcsIDAgPSBJUlEsIDEgPSBETUFSUSkuICAqLworI2RlZmluZSBNQV9QT1JUMF9QRkNfQUREUgkJMHhGRkZGRjQ2MAorI2RlZmluZSBNQV9QT1JUMF9QRkMJCQkoKih2b2xhdGlsZSB1OCAqKU1BX1BPUlQwX1BGQ19BRERSKQorCisvKiBQb3J0IDEgKi8KKy8qIERpcmVjdCBJL08uICBCaXRzIDAtMyBhcmUgcGlucyBQMTAtUDEzLiAgKi8KKyNkZWZpbmUgTUFfUE9SVDFfSU9fQUREUgkJMHhGRkZGRjQwMgorI2RlZmluZSBNQV9QT1JUMV9JTwkJCSgqKHZvbGF0aWxlIHU4ICopTUFfUE9SVDFfSU9fQUREUikKKy8qIFBvcnQgbW9kZSAoZm9yIGRpcmVjdCBJL08sIDAgPSBvdXRwdXQsIDEgPSBpbnB1dCkuICAqLworI2RlZmluZSBNQV9QT1JUMV9QTV9BRERSCQkweEZGRkZGNDIwCisjZGVmaW5lIE1BX1BPUlQxX1BNCQkJKCoodm9sYXRpbGUgdTggKilNQV9QT1JUMV9QTV9BRERSKQorLyogUG9ydCBtb2RlIGNvbnRyb2wgKDAgPSBkaXJlY3QgSS9PIG1vZGUsIDEgPSBhbHRlcm5hdGl2ZSBJL08gbW9kZSkuICAqLworI2RlZmluZSBNQV9QT1JUMV9QTUNfQUREUgkJMHhGRkZGRjQ0MgorI2RlZmluZSBNQV9QT1JUMV9QTUMJCQkoKih2b2xhdGlsZSB1OCAqKU1BX1BPUlQxX1BNQ19BRERSKQorCisvKiBQb3J0IDQgKi8KKy8qIERpcmVjdCBJL08uICBCaXRzIDAtNSBhcmUgcGlucyBQNDAtUDQ1LiAgKi8KKyNkZWZpbmUgTUFfUE9SVDRfSU9fQUREUgkJMHhGRkZGRjQwOAorI2RlZmluZSBNQV9QT1JUNF9JTwkJCSgqKHZvbGF0aWxlIHU4ICopTUFfUE9SVDRfSU9fQUREUikKKy8qIFBvcnQgbW9kZSAoZm9yIGRpcmVjdCBJL08sIDAgPSBvdXRwdXQsIDEgPSBpbnB1dCkuICAqLworI2RlZmluZSBNQV9QT1JUNF9QTV9BRERSCQkweEZGRkZGNDI4CisjZGVmaW5lIE1BX1BPUlQ0X1BNCQkJKCoodm9sYXRpbGUgdTggKilNQV9QT1JUNF9QTV9BRERSKQorLyogUG9ydCBtb2RlIGNvbnRyb2wgKDAgPSBkaXJlY3QgSS9PIG1vZGUsIDEgPSBhbHRlcm5hdGl2ZSBJL08gbW9kZSkuICAqLworI2RlZmluZSBNQV9QT1JUNF9QTUNfQUREUgkJMHhGRkZGRjQ0OAorI2RlZmluZSBNQV9QT1JUNF9QTUMJCQkoKih2b2xhdGlsZSB1OCAqKU1BX1BPUlQ0X1BNQ19BRERSKQorLyogUG9ydCBmdW5jdGlvbiBjb250cm9sIChmb3Igc2VyaWFsIGludGVyZmFjZXMsIDAgPSBDU0ksIDEgPSBVQVJUKS4gICovCisjZGVmaW5lIE1BX1BPUlQ0X1BGQ19BRERSCQkweEZGRkZGNDY4CisjZGVmaW5lIE1BX1BPUlQ0X1BGQwkJCSgqKHZvbGF0aWxlIHU4ICopTUFfUE9SVDRfUEZDX0FERFIpCisKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworLyogSW5pdGlhbGl6ZSBNQSBjaGlwIGludGVycnVwdHMuICAqLworZXh0ZXJuIHZvaWQgbWFfaW5pdF9pcnFzICh2b2lkKTsKKworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKworCisjZW5kaWYgLyogX19WODUwX01BX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdjg1MC9tYTEuaCBiL2luY2x1ZGUvYXNtLXY4NTAvbWExLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRlMWYxZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXY4NTAvbWExLmgKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLXY4NTAvbWExLmggLS0gVjg1MEUvTUExIGNwdSBjaGlwCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMSwwMiwwMyAgTkVDIEVsZWN0cm9uaWNzIENvcnBvcmF0aW9uCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxLDAyLDAzICBNaWxlcyBCYWRlciA8bWlsZXNAZ251Lm9yZz4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzCisgKiBhcmNoaXZlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogV3JpdHRlbiBieSBNaWxlcyBCYWRlciA8bWlsZXNAZ251Lm9yZz4KKyAqLworCisjaWZuZGVmIF9fVjg1MF9NQTFfSF9fCisjZGVmaW5lIF9fVjg1MF9NQTFfSF9fCisKKy8qIEluaGVyaXQgbW9yZSBnZW5lcmljIGRldGFpbHMgZnJvbSBNQSBzZXJpZXMuICAqLworI2luY2x1ZGUgPGFzbS9tYS5oPgorCisKKyNkZWZpbmUgQ1BVX01PREVMCSJ2ODUwZS9tYTEiCisjZGVmaW5lIENQVV9NT0RFTF9MT05HCSJORUMgVjg1MEUvTUExIgorCisKKy8qIEhhcmR3YXJlLXNwZWNpZmljIGludGVycnVwdCBudW1iZXJzIChpbiB0aGUga2VybmVsIElSUSBuYW1lc3BhY2UpLiAgKi8KKyNkZWZpbmUgSVJRX0lOVE9WKG4pCShuKQkvKiAwLTMgKi8KKyNkZWZpbmUgSVJRX0lOVE9WX05VTQk0CisjZGVmaW5lIElSUV9JTlRQKG4pCSgweDQgICsgKG4pKSAvKiBQbm5uIChwaW4pIGludGVycnVwdHMgKi8KKyNkZWZpbmUgSVJRX0lOVFBfTlVNCTI0CisjZGVmaW5lIElSUV9JTlRDTUQobikJKDB4MWMgKyAobikpIC8qIGludGVydmFsIHRpbWVyIGludGVycnVwdHMgMC0zICovCisjZGVmaW5lIElSUV9JTlRDTURfTlVNCTQKKyNkZWZpbmUgSVJRX0lOVERNQShuKQkoMHgyMCArIChuKSkgLyogRE1BIGludGVycnVwdHMgMC0zICovCisjZGVmaW5lIElSUV9JTlRETUFfTlVNCTQKKyNkZWZpbmUgSVJRX0lOVENTSShuKQkoMHgyNCArIChuKSo0KS8qIENTSSAwLTIgdHJhbnNtaXQvcmVjZWl2ZSBjb21wbGV0aW9uICovCisjZGVmaW5lIElSUV9JTlRDU0lfTlVNCTMKKyNkZWZpbmUgSVJRX0lOVFNFUihuKQkoMHgyNSArIChuKSo0KSAvKiBVQVJUIDAtMiByZWNlcHRpb24gZXJyb3IgKi8KKyNkZWZpbmUgSVJRX0lOVFNFUl9OVU0JMworI2RlZmluZSBJUlFfSU5UU1IobikJKDB4MjYgKyAobikqNCkgLyogVUFSVCAwLTIgcmVjZXB0aW9uIGNvbXBsZXRpb24gKi8KKyNkZWZpbmUgSVJRX0lOVFNSX05VTQkzCisjZGVmaW5lIElSUV9JTlRTVChuKQkoMHgyNyArIChuKSo0KSAvKiBVQVJUIDAtMiB0cmFuc21pc3Npb24gY29tcGxldGlvbiAqLworI2RlZmluZSBJUlFfSU5UU1RfTlVNCTMKKworI2RlZmluZSBOVU1fQ1BVX0lSUVMJMHgzMAorCisKKy8qIFRoZSBNQTEgaGFzIGEgVUFSVCB3aXRoIDMgY2hhbm5lbHMuICAqLworI2RlZmluZSBWODUwRV9VQVJUX05VTV9DSEFOTkVMUwkzCisKKworI2VuZGlmIC8qIF9fVjg1MF9NQTFfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS12ODUwL21hY2hkZXAuaCBiL2luY2x1ZGUvYXNtLXY4NTAvbWFjaGRlcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4ZDhiZjYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS12ODUwL21hY2hkZXAuaApAQCAtMCwwICsxLDYxIEBACisvKgorICogaW5jbHVkZS9hc20tdjg1MC9tYWNoZGVwLmggLS0gTWFjaGluZS1kZXBlbmRlbnQgZGVmaW5pdGlvbnMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxLDAyLDAzICBORUMgRWxlY3Ryb25pY3MgQ29ycG9yYXRpb24KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEsMDIsMDMgIE1pbGVzIEJhZGVyIDxtaWxlc0BnbnUub3JnPgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMKKyAqIGFyY2hpdmUgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBXcml0dGVuIGJ5IE1pbGVzIEJhZGVyIDxtaWxlc0BnbnUub3JnPgorICovCisKKyNpZm5kZWYgX19WODUwX01BQ0hERVBfSF9fCisjZGVmaW5lIF9fVjg1MF9NQUNIREVQX0hfXworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKy8qIGNoaXBzICovCisjaWZkZWYgQ09ORklHX1Y4NTBFX01BMQorI2luY2x1ZGUgPGFzbS9tYTEuaD4KKyNlbmRpZgorI2lmZGVmIENPTkZJR19WODUwRV9NRTIKKyNpbmNsdWRlIDxhc20vbWUyLmg+CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfVjg1MEVfVEVHCisjaW5jbHVkZSA8YXNtL3RlZy5oPgorI2VuZGlmCisKKy8qIFRoZXNlIGFyZSBib3RoIGNoaXBzIF9hbmRfIHBsYXRmb3Jtcywgc28gcHV0IHRoZW0gaW4gdGhlIG1pZGRsZS4uLiAqLworI2lmZGVmIENPTkZJR19WODUwRTJfQU5OQQorI2luY2x1ZGUgPGFzbS9hbm5hLmg+CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfVjg1MEVfQVM4NUVQMQorI2luY2x1ZGUgPGFzbS9hczg1ZXAxLmg+CisjZW5kaWYKKworLyogcGxhdGZvcm1zICovCisjaWZkZWYgQ09ORklHX1JURV9DQl9NQTEKKyNpbmNsdWRlIDxhc20vcnRlX21hMV9jYi5oPgorI2VuZGlmCisjaWZkZWYgQ09ORklHX1JURV9DQl9NRTIKKyNpbmNsdWRlIDxhc20vcnRlX21lMl9jYi5oPgorI2VuZGlmCisjaWZkZWYgQ09ORklHX1JURV9DQl9OQjg1RQorI2luY2x1ZGUgPGFzbS9ydGVfbmI4NWVfY2IuaD4KKyNlbmRpZgorI2lmZGVmIENPTkZJR19WODUwRV9TSU0KKyNpbmNsdWRlIDxhc20vc2ltLmg+CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfVjg1MEUyX1NJTTg1RTJDCisjaW5jbHVkZSA8YXNtL3NpbTg1ZTJjLmg+CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfVjg1MEUyX1NJTTg1RTJTCisjaW5jbHVkZSA8YXNtL3NpbTg1ZTJzLmg+CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfVjg1MEUyX0ZQR0E4NUUyQworI2luY2x1ZGUgPGFzbS9mcGdhODVlMmMuaD4KKyNlbmRpZgorCisjZW5kaWYgLyogX19WODUwX01BQ0hERVBfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS12ODUwL21hY3JvbG9neS5oIGIvaW5jbHVkZS9hc20tdjg1MC9tYWNyb2xvZ3kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2FiZjg3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdjg1MC9tYWNyb2xvZ3kuaApAQCAtMCwwICsxLDE3IEBACisvKgorICogaW5jbHVkZS9hc20tdjg1MC9tYWNyb2xvZ3kuaCAtLSBWYXJpb3VzIHVzZWZ1bCBDUFAgbWFjcm9zCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMSAgTkVDIENvcnBvcmF0aW9uCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxICBNaWxlcyBCYWRlciA8bWlsZXNAZ251Lm9yZz4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzCisgKiBhcmNoaXZlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogV3JpdHRlbiBieSBNaWxlcyBCYWRlciA8bWlsZXNAZ251Lm9yZz4KKyAqLworCisjZGVmaW5lIG1hY3JvbG9neV9wYXN0ZShhcmcxLCBhcmcyKQltYWNyb2xvZ3lfcGFzdGVfMShhcmcxLCBhcmcyKQorI2RlZmluZSBtYWNyb2xvZ3lfcGFzdGVfMShhcmcxLCBhcmcyKQlhcmcxICMjIGFyZzIKKyNkZWZpbmUgbWFjcm9sb2d5X3N0cmluZ2lmeShzeW0pCW1hY3JvbG9neV9zdHJpbmdpZnlfMShzeW0pCisjZGVmaW5lIG1hY3JvbG9neV9zdHJpbmdpZnlfMShzeW0pCSNzeW0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXY4NTAvbWUyLmggYi9pbmNsdWRlL2FzbS12ODUwL21lMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjN2M5Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS12ODUwL21lMi5oCkBAIC0wLDAgKzEsMTgyIEBACisvKgorICogaW5jbHVkZS9hc20tdjg1MC9tZTIuaCAtLSBWODUwRS9NRTIgY3B1IGNoaXAKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxLDAyLDAzICBORUMgRWxlY3Ryb25pY3MgQ29ycG9yYXRpb24KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEsMDIsMDMgIE1pbGVzIEJhZGVyIDxtaWxlc0BnbnUub3JnPgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMKKyAqIGFyY2hpdmUgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBXcml0dGVuIGJ5IE1pbGVzIEJhZGVyIDxtaWxlc0BnbnUub3JnPgorICovCisKKyNpZm5kZWYgX19WODUwX01FMl9IX18KKyNkZWZpbmUgX19WODUwX01FMl9IX18KKworI2luY2x1ZGUgPGFzbS92ODUwZS5oPgorI2luY2x1ZGUgPGFzbS92ODUwZV9jYWNoZS5oPgorCisKKyNkZWZpbmUgQ1BVX01PREVMCSJ2ODUwZS9tZTIiCisjZGVmaW5lIENQVV9NT0RFTF9MT05HCSJORUMgVjg1MEUvTUUyIgorCisKKy8qIEhhcmR3YXJlLXNwZWNpZmljIGludGVycnVwdCBudW1iZXJzIChpbiB0aGUga2VybmVsIElSUSBuYW1lc3BhY2UpLiAgKi8KKyNkZWZpbmUgSVJRX0lOVFAobikgICAgICAgKG4pIC8qIFBubm4gKHBpbikgaW50ZXJydXB0cyAqLworI2RlZmluZSBJUlFfSU5UUF9OVU0gICAgICAzMQorI2RlZmluZSBJUlFfSU5UQ01EKG4pICAgICAoMHgzMSArIChuKSkgLyogaW50ZXJ2YWwgdGltZXIgaW50ZXJydXB0cyAwLTMgKi8KKyNkZWZpbmUgSVJRX0lOVENNRF9OVU0gICAgNAorI2RlZmluZSBJUlFfSU5URE1BKG4pICAgICAoMHg0MSArIChuKSkgLyogRE1BIGludGVycnVwdHMgMC0zICovCisjZGVmaW5lIElSUV9JTlRETUFfTlVNICAgIDQKKyNkZWZpbmUgSVJRX0lOVFVCVElSRShuKSAgKDB4NDkgKyAobikqNSkvKiBVQVJUQiAwLTEgcmVjZXB0aW9uIGVycm9yICovCisjZGVmaW5lIElSUV9JTlRVQlRJUkVfTlVNIDIKKyNkZWZpbmUgSVJRX0lOVFVCVElSKG4pICAgKDB4NGEgKyAobikqNSkgLyogVUFSVEIgMC0xIHJlY2VwdGlvbiBjb21wbGV0ZSAqLworI2RlZmluZSBJUlFfSU5UVUJUSVJfTlVNICAyCisjZGVmaW5lIElSUV9JTlRVQlRJVChuKSAgICgweDRiICsgKG4pKjUpIC8qIFVBUlRCIDAtMSB0cmFuc21pc3Npb24gY29tcGxldGUgKi8KKyNkZWZpbmUgSVJRX0lOVFVCVElUX05VTSAgMgorI2RlZmluZSBJUlFfSU5UVUJUSUYobikgICAoMHg0YyArIChuKSo1KSAvKiBVQVJUQiAwLTEgRklGTyB0cmFucy4gY29tcGxldGUgKi8KKyNkZWZpbmUgSVJRX0lOVFVCVElGX05VTSAgMgorI2RlZmluZSBJUlFfSU5UVUJUSVRPKG4pICAoMHg0ZCArIChuKSo1KSAvKiBVQVJUQiAwLTEgcmVjZXB0aW9uIHRpbWVvdXQgKi8KKyNkZWZpbmUgSVJRX0lOVFVCVElUT19OVU0gMgorCisvKiBGb3IgPGFzbS9pcnEuaD4gKi8KKyNkZWZpbmUgTlVNX0NQVV9JUlFTCQkweDU5IC8qIFY4NTBFL01FMiAqLworCisKKy8qIEZvciA8YXNtL2VudHJ5Lmg+ICovCisvKiBXZSB1c2Ugb24tY2hpcCBSQU0sIGZvciBhIGZldyBtaXNjZWxsYW5lb3VzIHZhcmlhYmxlcyB0aGF0IG11c3QgYmUKKyAgIGFjY2Vzc2libGUgdXNpbmcgYSBsb2FkIGluc3RydWN0aW9uIHJlbGF0aXZlIHRvIFIwLiAgKi8KKyNkZWZpbmUgUjBfUkFNX0FERFIJCQkweEZGRkZCMDAwIC8qIFY4NTBFL01FMiAqLworCisKKy8qIFY4NTBFL01FMiBVQVJUQiBkZXRhaWxzLiovCisjZGVmaW5lIFY4NTBFX1VBUlRfTlVNX0NIQU5ORUxTCQkyCisjZGVmaW5lIFY4NTBFX1VBUlRCX0JBU0VfRlJFUQkJKENQVV9DTE9DS19GUkVRIC8gNCkKKworLyogVGhpcyBpcyBhIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgYmVmb3JlIGNvbmZpZ3VyaW5nIHRoZSBVQVJULiAgKi8KKyNkZWZpbmUgVjg1MEVfVUFSVF9QUkVfQ09ORklHVVJFCW1lMl91YXJ0X3ByZV9jb25maWd1cmUKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitleHRlcm4gdm9pZCBtZTJfdWFydF9wcmVfY29uZmlndXJlICh1bnNpZ25lZCBjaGFuLAorCQkJCSAgICB1bnNpZ25lZCBjZmxhZ3MsIHVuc2lnbmVkIGJhdWQpOworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisKKy8qIFY4NTBFL01FMiB0aW1lciBDIGRldGFpbHMuICAqLworI2RlZmluZSBWODUwRV9USU1FUl9DX0JBU0VfQUREUgkJMHhGRkZGRjYwMAorCisKKy8qIFY4NTBFL01FMiB0aW1lciBEIGRldGFpbHMuICAqLworI2RlZmluZSBWODUwRV9USU1FUl9EX0JBU0VfQUREUgkJMHhGRkZGRjU0MAorI2RlZmluZSBWODUwRV9USU1FUl9EX1RNRF9CQVNFX0FERFIJKFY4NTBFX1RJTUVSX0RfQkFTRV9BRERSICsgMHgwKQorI2RlZmluZSBWODUwRV9USU1FUl9EX0NNRF9CQVNFX0FERFIgCShWODUwRV9USU1FUl9EX0JBU0VfQUREUiArIDB4MikKKyNkZWZpbmUgVjg1MEVfVElNRVJfRF9UTUNEX0JBU0VfQUREUgkoVjg1MEVfVElNRVJfRF9CQVNFX0FERFIgKyAweDQpCisKKyNkZWZpbmUgVjg1MEVfVElNRVJfRF9CQVNFX0ZSRVEJCShDUFVfQ0xPQ0tfRlJFUSAvIDIpCisKKworLyogU2VsZWN0IGlSQU0gbW9kZS4gICovCisjZGVmaW5lIE1FMl9JUkFNTV9BRERSCQkJMHhGRkZGRjgwQQorI2RlZmluZSBNRTJfSVJBTU0JCQkoKih2b2xhdGlsZSB1OCopTUUyX0lSQU1NX0FERFIpCisKKworLyogSW50ZXJydXB0IGVkZ2UtZGV0ZWN0aW9uIGNvbmZpZ3VyYXRpb24uICBJTlRGKG4pIGFuZCBJTlRSKG4pIGFyZSBvbmx5CisgICB2YWxpZCBmb3IgbiA9PSAxLCAyLCBvciA1LiAgKi8KKyNkZWZpbmUgTUUyX0lOVEZfQUREUihuKQkJKDB4RkZGRkZDMDAgKyAobikgKiAweDIpCisjZGVmaW5lIE1FMl9JTlRGKG4pCQkJKCoodm9sYXRpbGUgdTgqKU1FMl9JTlRGX0FERFIobikpCisjZGVmaW5lIE1FMl9JTlRSX0FERFIobikJCSgweEZGRkZGQzIwICsgKG4pICogMHgyKQorI2RlZmluZSBNRTJfSU5UUihuKQkJCSgqKHZvbGF0aWxlIHU4KilNRTJfSU5UUl9BRERSKG4pKQorI2RlZmluZSBNRTJfSU5URkFMX0FERFIJCQkweEZGRkZGQzEwCisjZGVmaW5lIE1FMl9JTlRGQUwJCQkoKih2b2xhdGlsZSB1OCopTUUyX0lOVEZBTF9BRERSKQorI2RlZmluZSBNRTJfSU5UUkFMX0FERFIJCQkweEZGRkZGQzMwCisjZGVmaW5lIE1FMl9JTlRSQUwJCQkoKih2b2xhdGlsZSB1OCopTUUyX0lOVFJBTF9BRERSKQorI2RlZmluZSBNRTJfSU5URkRIX0FERFIJCQkweEZGRkZGQzE2CisjZGVmaW5lIE1FMl9JTlRGREgJCQkoKih2b2xhdGlsZSB1MTYqKU1FMl9JTlRGREhfQUREUikKKyNkZWZpbmUgTUUyX0lOVFJESF9BRERSCQkJMHhGRkZGRkMzNgorI2RlZmluZSBNRTJfSU5UUkRICQkJKCoodm9sYXRpbGUgdTE2KilNRTJfSU5UUkRIX0FERFIpCisjZGVmaW5lIE1FMl9TRVNDX0FERFIobikJCSgweEZGRkZGNjA5ICsgKG4pICogMHgxMCkKKyNkZWZpbmUgTUUyX1NFU0MobikJCQkoKih2b2xhdGlsZSB1OCopTUUyX1NFU0NfQUREUihuKSkKKyNkZWZpbmUgTUUyX1NFU0ExMF9BRERSCQkJMHhGRkZGRjVBRAorI2RlZmluZSBNRTJfU0VTQTEwCQkJKCoodm9sYXRpbGUgdTgqKU1FMl9TRVNBMTBfQUREUikKKyNkZWZpbmUgTUUyX1NFU0ExMV9BRERSCQkJMHhGRkZGRjVERAorI2RlZmluZSBNRTJfU0VTQTExCQkJKCoodm9sYXRpbGUgdTgqKU1FMl9TRVNBMTFfQUREUikKKworCisvKiBQb3J0IDEgKi8KKy8qIERpcmVjdCBJL08uICBCaXRzIDAtMyBhcmUgcGlucyBQMTAtUDEzLiAgKi8KKyNkZWZpbmUgTUUyX1BPUlQxX0lPX0FERFIJCTB4RkZGRkY0MDIKKyNkZWZpbmUgTUUyX1BPUlQxX0lPCQkJKCoodm9sYXRpbGUgdTggKilNRTJfUE9SVDFfSU9fQUREUikKKy8qIFBvcnQgbW9kZSAoZm9yIGRpcmVjdCBJL08sIDAgPSBvdXRwdXQsIDEgPSBpbnB1dCkuICAqLworI2RlZmluZSBNRTJfUE9SVDFfUE1fQUREUgkJMHhGRkZGRjQyMgorI2RlZmluZSBNRTJfUE9SVDFfUE0JCQkoKih2b2xhdGlsZSB1OCAqKU1FMl9QT1JUMV9QTV9BRERSKQorLyogUG9ydCBtb2RlIGNvbnRyb2wgKDAgPSBkaXJlY3QgSS9PIG1vZGUsIDEgPSBhbHRlcm5hdGl2ZSBJL08gbW9kZSkuICAqLworI2RlZmluZSBNRTJfUE9SVDFfUE1DX0FERFIJCTB4RkZGRkY0NDIKKyNkZWZpbmUgTUUyX1BPUlQxX1BNQwkJCSgqKHZvbGF0aWxlIHU4ICopTUUyX1BPUlQxX1BNQ19BRERSKQorLyogUG9ydCBmdW5jdGlvbiBjb250cm9sIChmb3Igc2VyaWFsIGludGVyZmFjZXMsIDAgPSBDU0kzMCwgMSA9IFVBUlRCMCApLiAgKi8KKyNkZWZpbmUgTUUyX1BPUlQxX1BGQ19BRERSCQkweEZGRkZGNDYyCisjZGVmaW5lIE1FMl9QT1JUMV9QRkMJCQkoKih2b2xhdGlsZSB1OCAqKU1FMl9QT1JUMV9QRkNfQUREUikKKworLyogUG9ydCAyICovCisvKiBEaXJlY3QgSS9PLiAgQml0cyAwLTMgYXJlIHBpbnMgUDIwLVAyNS4gICovCisjZGVmaW5lIE1FMl9QT1JUMl9JT19BRERSCQkweEZGRkZGNDA0CisjZGVmaW5lIE1FMl9QT1JUMl9JTwkJCSgqKHZvbGF0aWxlIHU4ICopTUUyX1BPUlQyX0lPX0FERFIpCisvKiBQb3J0IG1vZGUgKGZvciBkaXJlY3QgSS9PLCAwID0gb3V0cHV0LCAxID0gaW5wdXQpLiAgKi8KKyNkZWZpbmUgTUUyX1BPUlQyX1BNX0FERFIJCTB4RkZGRkY0MjQKKyNkZWZpbmUgTUUyX1BPUlQyX1BNCQkJKCoodm9sYXRpbGUgdTggKilNRTJfUE9SVDJfUE1fQUREUikKKy8qIFBvcnQgbW9kZSBjb250cm9sICgwID0gZGlyZWN0IEkvTyBtb2RlLCAxID0gYWx0ZXJuYXRpdmUgSS9PIG1vZGUpLiAgKi8KKyNkZWZpbmUgTUUyX1BPUlQyX1BNQ19BRERSCQkweEZGRkZGNDQ0CisjZGVmaW5lIE1FMl9QT1JUMl9QTUMJCQkoKih2b2xhdGlsZSB1OCAqKU1FMl9QT1JUMl9QTUNfQUREUikKKy8qIFBvcnQgZnVuY3Rpb24gY29udHJvbCAoZm9yIHNlcmlhbCBpbnRlcmZhY2VzLCAwID0gSU5UUDJ4LCAxID0gVUFSVEIxICkuICAqLworI2RlZmluZSBNRTJfUE9SVDJfUEZDX0FERFIJCTB4RkZGRkY0NjQKKyNkZWZpbmUgTUUyX1BPUlQyX1BGQwkJCSgqKHZvbGF0aWxlIHU4ICopTUUyX1BPUlQyX1BGQ19BRERSKQorCisvKiBQb3J0IDUgKi8KKy8qIERpcmVjdCBJL08uICBCaXRzIDAtNSBhcmUgcGlucyBQNTAtUDU1LiAgKi8KKyNkZWZpbmUgTUUyX1BPUlQ1X0lPX0FERFIJCTB4RkZGRkY0MEEKKyNkZWZpbmUgTUUyX1BPUlQ1X0lPCQkJKCoodm9sYXRpbGUgdTggKilNRTJfUE9SVDVfSU9fQUREUikKKy8qIFBvcnQgbW9kZSAoZm9yIGRpcmVjdCBJL08sIDAgPSBvdXRwdXQsIDEgPSBpbnB1dCkuICAqLworI2RlZmluZSBNRTJfUE9SVDVfUE1fQUREUgkJMHhGRkZGRjQyQQorI2RlZmluZSBNRTJfUE9SVDVfUE0JCQkoKih2b2xhdGlsZSB1OCAqKU1FMl9QT1JUNV9QTV9BRERSKQorLyogUG9ydCBtb2RlIGNvbnRyb2wgKDAgPSBkaXJlY3QgSS9PIG1vZGUsIDEgPSBhbHRlcm5hdGl2ZSBJL08gbW9kZSkuICAqLworI2RlZmluZSBNRTJfUE9SVDVfUE1DX0FERFIJCTB4RkZGRkY0NEEKKyNkZWZpbmUgTUUyX1BPUlQ1X1BNQwkJCSgqKHZvbGF0aWxlIHU4ICopTUUyX1BPUlQ1X1BNQ19BRERSKQorLyogUG9ydCBmdW5jdGlvbiBjb250cm9sICgpLiAgKi8KKyNkZWZpbmUgTUUyX1BPUlQ1X1BGQ19BRERSCQkweEZGRkZGNDZBCisjZGVmaW5lIE1FMl9QT1JUNV9QRkMJCQkoKih2b2xhdGlsZSB1OCAqKU1FMl9QT1JUNV9QRkNfQUREUikKKworLyogUG9ydCA2ICovCisvKiBEaXJlY3QgSS9PLiAgQml0cyA1LTcgYXJlIHBpbnMgUDY1LVA2Ny4gICovCisjZGVmaW5lIE1FMl9QT1JUNl9JT19BRERSCQkweEZGRkZGNDBDCisjZGVmaW5lIE1FMl9QT1JUNl9JTwkJCSgqKHZvbGF0aWxlIHU4ICopTUUyX1BPUlQ2X0lPX0FERFIpCisvKiBQb3J0IG1vZGUgKGZvciBkaXJlY3QgSS9PLCAwID0gb3V0cHV0LCAxID0gaW5wdXQpLiAgKi8KKyNkZWZpbmUgTUUyX1BPUlQ2X1BNX0FERFIJCTB4RkZGRkY0MkMKKyNkZWZpbmUgTUUyX1BPUlQ2X1BNCQkJKCoodm9sYXRpbGUgdTggKilNRTJfUE9SVDZfUE1fQUREUikKKy8qIFBvcnQgbW9kZSBjb250cm9sICgwID0gZGlyZWN0IEkvTyBtb2RlLCAxID0gYWx0ZXJuYXRpdmUgSS9PIG1vZGUpLiAgKi8KKyNkZWZpbmUgTUUyX1BPUlQ2X1BNQ19BRERSCQkweEZGRkZGNDRDCisjZGVmaW5lIE1FMl9QT1JUNl9QTUMJCQkoKih2b2xhdGlsZSB1OCAqKU1FMl9QT1JUNl9QTUNfQUREUikKKy8qIFBvcnQgZnVuY3Rpb24gY29udHJvbCAoKS4gICovCisjZGVmaW5lIE1FMl9QT1JUNl9QRkNfQUREUgkJMHhGRkZGRjQ2QworI2RlZmluZSBNRTJfUE9SVDZfUEZDCQkJKCoodm9sYXRpbGUgdTggKilNRTJfUE9SVDZfUEZDX0FERFIpCisKKy8qIFBvcnQgNyAqLworLyogRGlyZWN0IEkvTy4gIEJpdHMgMi03IGFyZSBwaW5zIFA3Mi1QNzcuICAqLworI2RlZmluZSBNRTJfUE9SVDdfSU9fQUREUgkJMHhGRkZGRjQwRQorI2RlZmluZSBNRTJfUE9SVDdfSU8JCQkoKih2b2xhdGlsZSB1OCAqKU1FMl9QT1JUN19JT19BRERSKQorLyogUG9ydCBtb2RlIChmb3IgZGlyZWN0IEkvTywgMCA9IG91dHB1dCwgMSA9IGlucHV0KS4gICovCisjZGVmaW5lIE1FMl9QT1JUN19QTV9BRERSCQkweEZGRkZGNDJFCisjZGVmaW5lIE1FMl9QT1JUN19QTQkJCSgqKHZvbGF0aWxlIHU4ICopTUUyX1BPUlQ3X1BNX0FERFIpCisvKiBQb3J0IG1vZGUgY29udHJvbCAoMCA9IGRpcmVjdCBJL08gbW9kZSwgMSA9IGFsdGVybmF0aXZlIEkvTyBtb2RlKS4gICovCisjZGVmaW5lIE1FMl9QT1JUN19QTUNfQUREUgkJMHhGRkZGRjQ0RQorI2RlZmluZSBNRTJfUE9SVDdfUE1DCQkJKCoodm9sYXRpbGUgdTggKilNRTJfUE9SVDdfUE1DX0FERFIpCisvKiBQb3J0IGZ1bmN0aW9uIGNvbnRyb2wgKCkuICAqLworI2RlZmluZSBNRTJfUE9SVDdfUEZDX0FERFIJCTB4RkZGRkY0NkUKKyNkZWZpbmUgTUUyX1BPUlQ3X1BGQwkJCSgqKHZvbGF0aWxlIHU4ICopTUUyX1BPUlQ3X1BGQ19BRERSKQorCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisvKiBJbml0aWFsaXplIFY4NTBFL01FMiBjaGlwIGludGVycnVwdHMuICAqLworZXh0ZXJuIHZvaWQgbWUyX2luaXRfaXJxcyAodm9pZCk7CisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisKKyNlbmRpZiAvKiBfX1Y4NTBfTUUyX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdjg1MC9tbWFuLmggYi9pbmNsdWRlL2FzbS12ODUwL21tYW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmI5MDA4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdjg1MC9tbWFuLmgKQEAgLTAsMCArMSw0MCBAQAorI2lmbmRlZiBfX1Y4NTBfTU1BTl9IX18KKyNkZWZpbmUgX19WODUwX01NQU5fSF9fCisKKyNkZWZpbmUgUFJPVF9SRUFECTB4MQkJLyogcGFnZSBjYW4gYmUgcmVhZCAqLworI2RlZmluZSBQUk9UX1dSSVRFCTB4MgkJLyogcGFnZSBjYW4gYmUgd3JpdHRlbiAqLworI2RlZmluZSBQUk9UX0VYRUMJMHg0CQkvKiBwYWdlIGNhbiBiZSBleGVjdXRlZCAqLworI2RlZmluZSBQUk9UX05PTkUJMHgwCQkvKiBwYWdlIGNhbiBub3QgYmUgYWNjZXNzZWQgKi8KKyNkZWZpbmUgUFJPVF9HUk9XU0RPV04JMHgwMTAwMDAwMAkvKiBtcHJvdGVjdCBmbGFnOiBleHRlbmQgY2hhbmdlIHRvIHN0YXJ0IG9mIGdyb3dzZG93biB2bWEgKi8KKyNkZWZpbmUgUFJPVF9HUk9XU1VQCTB4MDIwMDAwMDAJLyogbXByb3RlY3QgZmxhZzogZXh0ZW5kIGNoYW5nZSB0byBlbmQgb2YgZ3Jvd3N1cCB2bWEgKi8KKworI2RlZmluZSBNQVBfU0hBUkVECTB4MDEJCS8qIFNoYXJlIGNoYW5nZXMgKi8KKyNkZWZpbmUgTUFQX1BSSVZBVEUJMHgwMgkJLyogQ2hhbmdlcyBhcmUgcHJpdmF0ZSAqLworI2RlZmluZSBNQVBfVFlQRQkweDBmCQkvKiBNYXNrIGZvciB0eXBlIG9mIG1hcHBpbmcgKi8KKyNkZWZpbmUgTUFQX0ZJWEVECTB4MTAJCS8qIEludGVycHJldCBhZGRyIGV4YWN0bHkgKi8KKyNkZWZpbmUgTUFQX0FOT05ZTU9VUwkweDIwCQkvKiBkb24ndCB1c2UgYSBmaWxlICovCisKKyNkZWZpbmUgTUFQX0dST1dTRE9XTgkweDAxMDAJCS8qIHN0YWNrLWxpa2Ugc2VnbWVudCAqLworI2RlZmluZSBNQVBfREVOWVdSSVRFCTB4MDgwMAkJLyogRVRYVEJTWSAqLworI2RlZmluZSBNQVBfRVhFQ1VUQUJMRQkweDEwMDAJCS8qIG1hcmsgaXQgYXMgYW4gZXhlY3V0YWJsZSAqLworI2RlZmluZSBNQVBfTE9DS0VECTB4MjAwMAkJLyogcGFnZXMgYXJlIGxvY2tlZCAqLworI2RlZmluZSBNQVBfTk9SRVNFUlZFCTB4NDAwMAkJLyogZG9uJ3QgY2hlY2sgZm9yIHJlc2VydmF0aW9ucyAqLworCisjZGVmaW5lIE1TX0FTWU5DCTEJCS8qIHN5bmMgbWVtb3J5IGFzeW5jaHJvbm91c2x5ICovCisjZGVmaW5lIE1TX0lOVkFMSURBVEUJMgkJLyogaW52YWxpZGF0ZSB0aGUgY2FjaGVzICovCisjZGVmaW5lIE1TX1NZTkMJCTQJCS8qIHN5bmNocm9ub3VzIG1lbW9yeSBzeW5jICovCisKKyNkZWZpbmUgTUNMX0NVUlJFTlQJMQkJLyogbG9jayBhbGwgY3VycmVudCBtYXBwaW5ncyAqLworI2RlZmluZSBNQ0xfRlVUVVJFCTIJCS8qIGxvY2sgYWxsIGZ1dHVyZSBtYXBwaW5ncyAqLworCisjZGVmaW5lIE1BRFZfTk9STUFMCTB4MAkJLyogZGVmYXVsdCBwYWdlLWluIGJlaGF2aW9yICovCisjZGVmaW5lIE1BRFZfUkFORE9NCTB4MQkJLyogcGFnZS1pbiBtaW5pbXVtIHJlcXVpcmVkICovCisjZGVmaW5lIE1BRFZfU0VRVUVOVElBTAkweDIJCS8qIHJlYWQtYWhlYWQgYWdncmVzc2l2ZWx5ICovCisjZGVmaW5lIE1BRFZfV0lMTE5FRUQJMHgzCQkvKiBwcmUtZmF1bHQgcGFnZXMgKi8KKyNkZWZpbmUgTUFEVl9ET05UTkVFRAkweDQJCS8qIGRpc2NhcmQgdGhlc2UgcGFnZXMgKi8KKworLyogY29tcGF0aWJpbGl0eSBmbGFncyAqLworI2RlZmluZSBNQVBfQU5PTglNQVBfQU5PTllNT1VTCisjZGVmaW5lIE1BUF9GSUxFCTAKKworI2VuZGlmIC8qIF9fVjg1MF9NTUFOX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdjg1MC9tbXUuaCBiL2luY2x1ZGUvYXNtLXY4NTAvbW11LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTMwYTUyYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXY4NTAvbW11LmgKQEAgLTAsMCArMSwyMiBAQAorLyogQ29weXJpZ2h0IChDKSAyMDAyLCBEYXZpZCBNY0N1bGxvdWdoIDxkYXZpZG1Ac25hcGdlYXIuY29tPiAqLworCisjaWZuZGVmIF9fVjg1MF9NTVVfSF9fCisjZGVmaW5lIF9fVjg1MF9NTVVfSF9fCisKK3N0cnVjdCBtbV9yYmxvY2tfc3RydWN0IHsKKwlpbnQJCXNpemU7CisJaW50CQlyZWZjb3VudDsKKwl2b2lkCSprYmxvY2s7Cit9OworCitzdHJ1Y3QgbW1fdGJsb2NrX3N0cnVjdCB7CisJc3RydWN0IG1tX3JibG9ja19zdHJ1Y3QJKnJibG9jazsKKwlzdHJ1Y3QgbW1fdGJsb2NrX3N0cnVjdAkqbmV4dDsKK307CisKK3R5cGVkZWYgc3RydWN0IHsKKwlzdHJ1Y3QgbW1fdGJsb2NrX3N0cnVjdAl0YmxvY2s7CisJdW5zaWduZWQgbG9uZwkJCWVuZF9icms7Cit9IG1tX2NvbnRleHRfdDsKKworI2VuZGlmIC8qIF9fVjg1MF9NTVVfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS12ODUwL21tdV9jb250ZXh0LmggYi9pbmNsdWRlL2FzbS12ODUwL21tdV9jb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjUyMWM4MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXY4NTAvbW11X2NvbnRleHQuaApAQCAtMCwwICsxLDExIEBACisjaWZuZGVmIF9fVjg1MF9NTVVfQ09OVEVYVF9IX18KKyNkZWZpbmUgX19WODUwX01NVV9DT05URVhUX0hfXworCisjZGVmaW5lIGRlc3Ryb3lfY29udGV4dChtbSkJCSgodm9pZCkwKQorI2RlZmluZSBpbml0X25ld19jb250ZXh0KHRzayxtbSkJMAorI2RlZmluZSBzd2l0Y2hfbW0ocHJldixuZXh0LHRzaykJKCh2b2lkKTApCisjZGVmaW5lIGRlYWN0aXZhdGVfbW0odHNrLG1tKQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBhY3RpdmF0ZV9tbShwcmV2LG5leHQpCQkoKHZvaWQpMCkKKyNkZWZpbmUgZW50ZXJfbGF6eV90bGIobW0sdHNrKQkJKCh2b2lkKTApCisKKyNlbmRpZiAvKiBfX1Y4NTBfTU1VX0NPTlRFWFRfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS12ODUwL21vZHVsZS5oIGIvaW5jbHVkZS9hc20tdjg1MC9tb2R1bGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzJmNDk0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdjg1MC9tb2R1bGUuaApAQCAtMCwwICsxLDYyIEBACisvKgorICogaW5jbHVkZS9hc20tdjg1MC9tb2R1bGUuaCAtLSBBcmNoaXRlY3R1cmUtc3BlY2lmaWMgbW9kdWxlIGhvb2tzCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMSwwMiwwMywwNCAgTkVDIENvcnBvcmF0aW9uCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxLDAyLDAzLDA0ICBNaWxlcyBCYWRlciA8bWlsZXNAZ251Lm9yZz4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEsMDMgIFJ1c3R5IFJ1c3NlbGwKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzCisgKiBhcmNoaXZlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogV3JpdHRlbiBieSBNaWxlcyBCYWRlciA8bWlsZXNAZ251Lm9yZz4KKyAqCisgKiBEZXJpdmVkIGluIHBhcnQgZnJvbSBpbmNsdWRlL2FzbS1wcGMvbW9kdWxlLmgKKyAqLworCisjaWZuZGVmIF9fVjg1MF9NT0RVTEVfSF9fCisjZGVmaW5lIF9fVjg1MF9NT0RVTEVfSF9fCisKKyNkZWZpbmUgTU9EVUxFX1NZTUJPTF9QUkVGSVggIl8iCisKK3N0cnVjdCB2ODUwX3BsdF9lbnRyeQoreworCS8qIEluZGlyZWN0IGp1bXAgaW5zdHJ1Y3Rpb24gc2VxdWVuY2UgKDYtYnl0ZSBtb3YgKyAyLWJ5dGUganIpLiAgKi8KKwl1bnNpZ25lZCBsb25nIHRyYW1wWzJdOworfTsKKworc3RydWN0IG1vZF9hcmNoX3NwZWNpZmljCit7CisJLyogSW5kaWNlcyBvZiBQTFQgc2VjdGlvbnMgd2l0aGluIG1vZHVsZS4gKi8KKwl1bnNpZ25lZCBpbnQgY29yZV9wbHRfc2VjdGlvbiwgaW5pdF9wbHRfc2VjdGlvbjsKK307CisKKyNkZWZpbmUgRWxmX1NoZHIgRWxmMzJfU2hkcgorI2RlZmluZSBFbGZfU3ltIEVsZjMyX1N5bQorI2RlZmluZSBFbGZfRWhkciBFbGYzMl9FaGRyCisKKy8qIE1ha2UgZW1wdHkgc2VjdGlvbnMgZm9yIG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMgdG8gZXhwYW5kLiAqLworI2lmZGVmIE1PRFVMRQorYXNtKCIuc2VjdGlvbiAucGx0LFwiYXhcIixAbm9iaXRzOyAuYWxpZ24gMzsgLnByZXZpb3VzIik7Cithc20oIi5zZWN0aW9uIC5pbml0LnBsdCxcImF4XCIsQG5vYml0czsgLmFsaWduIDM7IC5wcmV2aW91cyIpOworI2VuZGlmCisKKy8qIFdlIGRvbid0IGRvIGV4Y2VwdGlvbiB0YWJsZXMuICAqLworc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeTsKK3N0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqCitzZWFyY2hfZXh0YWJsZShjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpmaXJzdCwKKwkgICAgICAgY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqbGFzdCwKKwkgICAgICAgdW5zaWduZWQgbG9uZyB2YWx1ZSkKK3sKKwlyZXR1cm4gMDsKK30KKyNkZWZpbmUgQVJDSF9IQVNfU0VBUkNIX0VYVEFCTEUKK3N0YXRpYyBpbmxpbmUgdm9pZAorc29ydF9leHRhYmxlKHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKnN0YXJ0LAorCSAgICAgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZmluaXNoKQoreworCS8qIG5hZGEgKi8KK30KKyNkZWZpbmUgQVJDSF9IQVNfU09SVF9FWFRBQkxFCisKKyNlbmRpZiAvKiBfX1Y4NTBfTU9EVUxFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdjg1MC9tc2didWYuaCBiL2luY2x1ZGUvYXNtLXY4NTAvbXNnYnVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQwN2RiZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXY4NTAvbXNnYnVmLmgKQEAgLTAsMCArMSwzMSBAQAorI2lmbmRlZiBfX1Y4NTBfTVNHQlVGX0hfXworI2RlZmluZSBfX1Y4NTBfTVNHQlVGX0hfXworCisvKiAKKyAqIFRoZSBtc3FpZDY0X2RzIHN0cnVjdHVyZSBmb3Igdjg1MCBhcmNoaXRlY3R1cmUuCisgKiBOb3RlIGV4dHJhIHBhZGRpbmcgYmVjYXVzZSB0aGlzIHN0cnVjdHVyZSBpcyBwYXNzZWQgYmFjayBhbmQgZm9ydGgKKyAqIGJldHdlZW4ga2VybmVsIGFuZCB1c2VyIHNwYWNlLgorICoKKyAqIFBhZCBzcGFjZSBpcyBsZWZ0IGZvcjoKKyAqIC0gNjQtYml0IHRpbWVfdCB0byBzb2x2ZSB5MjAzOCBwcm9ibGVtCisgKiAtIDIgbWlzY2VsbGFuZW91cyAzMi1iaXQgdmFsdWVzCisgKi8KKworc3RydWN0IG1zcWlkNjRfZHMgeworCXN0cnVjdCBpcGM2NF9wZXJtIG1zZ19wZXJtOworCV9fa2VybmVsX3RpbWVfdCBtc2dfc3RpbWU7CS8qIGxhc3QgbXNnc25kIHRpbWUgKi8KKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkMTsKKwlfX2tlcm5lbF90aW1lX3QgbXNnX3J0aW1lOwkvKiBsYXN0IG1zZ3JjdiB0aW1lICovCisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDI7CisJX19rZXJuZWxfdGltZV90IG1zZ19jdGltZTsJLyogbGFzdCBjaGFuZ2UgdGltZSAqLworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQzOworCXVuc2lnbmVkIGxvbmcgIG1zZ19jYnl0ZXM7CS8qIGN1cnJlbnQgbnVtYmVyIG9mIGJ5dGVzIG9uIHF1ZXVlICovCisJdW5zaWduZWQgbG9uZyAgbXNnX3FudW07CS8qIG51bWJlciBvZiBtZXNzYWdlcyBpbiBxdWV1ZSAqLworCXVuc2lnbmVkIGxvbmcgIG1zZ19xYnl0ZXM7CS8qIG1heCBudW1iZXIgb2YgYnl0ZXMgb24gcXVldWUgKi8KKwlfX2tlcm5lbF9waWRfdCBtc2dfbHNwaWQ7CS8qIHBpZCBvZiBsYXN0IG1zZ3NuZCAqLworCV9fa2VybmVsX3BpZF90IG1zZ19scnBpZDsJLyogbGFzdCByZWNlaXZlIHBpZCAqLworCXVuc2lnbmVkIGxvbmcgIF9fdW51c2VkNDsKKwl1bnNpZ25lZCBsb25nICBfX3VudXNlZDU7Cit9OworCisjZW5kaWYgLyogX19WODUwX01TR0JVRl9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXY4NTAvbmFtZWkuaCBiL2luY2x1ZGUvYXNtLXY4NTAvbmFtZWkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTgzMzliCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdjg1MC9uYW1laS5oCkBAIC0wLDAgKzEsMTcgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS12ODUwL25hbWVpLmgKKyAqCisgKiBJbmNsdWRlZCBmcm9tIGxpbnV4L2ZzL25hbWVpLmMKKyAqLworCisjaWZuZGVmIF9fVjg1MF9OQU1FSV9IX18KKyNkZWZpbmUgX19WODUwX05BTUVJX0hfXworCisvKiBUaGlzIGR1bW15IHJvdXRpbmUgbWF5YmUgY2hhbmdlZCB0byBzb21ldGhpbmcgdXNlZnVsCisgKiBmb3IgL3Vzci9nbmVtdWwvIGVtdWxhdGlvbiBzdHVmZi4KKyAqIExvb2sgYXQgYXNtLXNwYXJjL25hbWVpLmggZm9yIGRldGFpbHMuCisgKi8KKworI2RlZmluZSBfX2VtdWxfcHJlZml4KCkgTlVMTAorCisjZW5kaWYgLyogX19WODUwX05BTUVJX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdjg1MC9wYWdlLmggYi9pbmNsdWRlL2FzbS12ODUwL3BhZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjA4NWIwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdjg1MC9wYWdlLmgKQEAgLTAsMCArMSwxNDYgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS12ODUwL3BhZ2UuaCAtLSBWTSBvcHMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxLDAyLDAzICBORUMgRWxlY3Ryb25pY3MgQ29ycG9yYXRpb24KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEsMDIsMDMgIE1pbGVzIEJhZGVyIDxtaWxlc0BnbnUub3JnPgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMKKyAqIGFyY2hpdmUgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBXcml0dGVuIGJ5IE1pbGVzIEJhZGVyIDxtaWxlc0BnbnUub3JnPgorICovCisKKyNpZm5kZWYgX19WODUwX1BBR0VfSF9fCisjZGVmaW5lIF9fVjg1MF9QQUdFX0hfXworCisjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KKworCisjZGVmaW5lIFBBR0VfU0hJRlQJMTIKKyNkZWZpbmUgUEFHRV9TSVpFICAgICAgICgxVUwgPDwgUEFHRV9TSElGVCkKKyNkZWZpbmUgUEFHRV9NQVNLICAgICAgICh+KFBBR0VfU0laRS0xKSkKKworCisvKgorICogUEFHRV9PRkZTRVQgLS0gdGhlIGZpcnN0IGFkZHJlc3Mgb2YgdGhlIGZpcnN0IHBhZ2Ugb2YgbWVtb3J5LiBGb3IgYXJjaHMgd2l0aAorICogbm8gTU1VIHRoaXMgY29ycmVzcG9uZHMgdG8gdGhlIGZpcnN0IGZyZWUgcGFnZSBpbiBwaHlzaWNhbCBtZW1vcnkgKGFsaWduZWQKKyAqIG9uIGEgcGFnZSBib3VuZGFyeSkuCisgKi8KKyNpZm5kZWYgUEFHRV9PRkZTRVQKKyNkZWZpbmUgUEFHRV9PRkZTRVQgIDB4MDAwMDAwMAorI2VuZGlmCisKKworI2lmZGVmIF9fS0VSTkVMX18KKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNkZWZpbmUgU1RSSUNUX01NX1RZUEVDSEVDS1MKKworI2RlZmluZSBjbGVhcl9wYWdlKHBhZ2UpCW1lbXNldCAoKHZvaWQgKikocGFnZSksIDAsIFBBR0VfU0laRSkKKyNkZWZpbmUgY29weV9wYWdlKHRvLCBmcm9tKQltZW1jcHkgKCh2b2lkICopKHRvKSwgKHZvaWQgKilmcm9tLCBQQUdFX1NJWkUpCisKKyNkZWZpbmUgY2xlYXJfdXNlcl9wYWdlKGFkZHIsIHZhZGRyLCBwYWdlKQlcCisJZG8geyAJY2xlYXJfcGFnZShhZGRyKTsJCVwKKwkJZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSk7CVwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBjb3B5X3VzZXJfcGFnZSh0bywgZnJvbSwgdmFkZHIsIHBhZ2UpCVwKKwlkbyB7CWNvcHlfcGFnZSh0bywgZnJvbSk7CQlcCisJCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOwlcCisJfSB3aGlsZSAoMCkKKworI2lmZGVmIFNUUklDVF9NTV9UWVBFQ0hFQ0tTCisvKgorICogVGhlc2UgYXJlIHVzZWQgdG8gbWFrZSB1c2Ugb2YgQyB0eXBlLWNoZWNraW5nLi4KKyAqLworCit0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgcHRlOyB9IHB0ZV90OwordHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHBtZDsgfSBwbWRfdDsKK3R5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBwZ2Q7IH0gcGdkX3Q7Cit0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgcGdwcm90OyB9IHBncHJvdF90OworCisjZGVmaW5lIHB0ZV92YWwoeCkgICAgICAoKHgpLnB0ZSkKKyNkZWZpbmUgcG1kX3ZhbCh4KSAgICAgICgoeCkucG1kKQorI2RlZmluZSBwZ2RfdmFsKHgpICAgICAgKCh4KS5wZ2QpCisjZGVmaW5lIHBncHJvdF92YWwoeCkgICAoKHgpLnBncHJvdCkKKworI2RlZmluZSBfX3B0ZSh4KSAgICAgICAgKChwdGVfdCkgeyAoeCkgfSApCisjZGVmaW5lIF9fcG1kKHgpICAgICAgICAoKHBtZF90KSB7ICh4KSB9ICkKKyNkZWZpbmUgX19wZ2QoeCkgICAgICAgICgocGdkX3QpIHsgKHgpIH0gKQorI2RlZmluZSBfX3BncHJvdCh4KSAgICAgKChwZ3Byb3RfdCkgeyAoeCkgfSApCisKKyNlbHNlIC8qICFTVFJJQ1RfTU1fVFlQRUNIRUNLUyAqLworLyoKKyAqIC4uIHdoaWxlIHRoZXNlIG1ha2UgaXQgZWFzaWVyIG9uIHRoZSBjb21waWxlcgorICovCisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBwdGVfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBwbWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBwZ2RfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBwZ3Byb3RfdDsKKworI2RlZmluZSBwdGVfdmFsKHgpICAgICAgKHgpCisjZGVmaW5lIHBtZF92YWwoeCkgICAgICAoeCkKKyNkZWZpbmUgcGdkX3ZhbCh4KSAgICAgICh4KQorI2RlZmluZSBwZ3Byb3RfdmFsKHgpICAgKHgpCisKKyNkZWZpbmUgX19wdGUoeCkgICAgICAgICh4KQorI2RlZmluZSBfX3BtZCh4KSAgICAgICAgKHgpCisjZGVmaW5lIF9fcGdkKHgpICAgICAgICAoeCkKKyNkZWZpbmUgX19wZ3Byb3QoeCkgICAgICh4KQorCisjZW5kaWYgLyogU1RSSUNUX01NX1RZUEVDSEVDS1MgKi8KKworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKworCisvKiB0byBhbGlnbiB0aGUgcG9pbnRlciB0byB0aGUgKG5leHQpIHBhZ2UgYm91bmRhcnkgKi8KKyNkZWZpbmUgUEFHRV9BTElHTihhZGRyKQkoKChhZGRyKSArIFBBR0VfU0laRSAtIDEpICYgUEFHRV9NQVNLKQorCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKy8qIFB1cmUgMl5uIHZlcnNpb24gb2YgZ2V0X29yZGVyICovCitleHRlcm4gX19pbmxpbmVfXyBpbnQgZ2V0X29yZGVyICh1bnNpZ25lZCBsb25nIHNpemUpCit7CisJaW50IG9yZGVyOworCisJc2l6ZSA9IChzaXplLTEpID4+IChQQUdFX1NISUZULTEpOworCW9yZGVyID0gLTE7CisJZG8geworCQlzaXplID4+PSAxOworCQlvcmRlcisrOworCX0gd2hpbGUgKHNpemUpOworCXJldHVybiBvcmRlcjsKK30KKworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKworCisvKiBObyBjdXJyZW50IHY4NTAgcHJvY2Vzc29yIGhhcyB2aXJ0dWFsIG1lbW9yeS4gICovCisjZGVmaW5lIF9fdmlydF90b19waHlzKGFkZHIpCShhZGRyKQorI2RlZmluZSBfX3BoeXNfdG9fdmlydChhZGRyKQkoYWRkcikKKworI2RlZmluZSB2aXJ0X3RvX3BmbihrYWRkcikJKF9fdmlydF90b19waHlzIChrYWRkcikgPj4gUEFHRV9TSElGVCkKKyNkZWZpbmUgcGZuX3RvX3ZpcnQocGZuKQlfX3BoeXNfdG9fdmlydCAoKHBmbikgPDwgUEFHRV9TSElGVCkKKworI2RlZmluZSBNQVBfTlIoa2FkZHIpIFwKKyAgKCgodW5zaWduZWQgbG9uZykoa2FkZHIpIC0gUEFHRV9PRkZTRVQpID4+IFBBR0VfU0hJRlQpCisjZGVmaW5lIHZpcnRfdG9fcGFnZShrYWRkcikJKG1lbV9tYXAgKyBNQVBfTlIgKGthZGRyKSkKKyNkZWZpbmUgcGFnZV90b192aXJ0KHBhZ2UpIFwKKyAgKCgoKHBhZ2UpIC0gbWVtX21hcCkgPDwgUEFHRV9TSElGVCkgKyBQQUdFX09GRlNFVCkKKworI2RlZmluZSBwZm5fdG9fcGFnZShwZm4pCXZpcnRfdG9fcGFnZSAocGZuX3RvX3ZpcnQgKHBmbikpCisjZGVmaW5lIHBhZ2VfdG9fcGZuKHBhZ2UpCXZpcnRfdG9fcGZuIChwYWdlX3RvX3ZpcnQgKHBhZ2UpKQorCisjZGVmaW5lCXZpcnRfYWRkcl92YWxpZChrYWRkcikJCQkJCQlcCisgICgoKHZvaWQgKikoa2FkZHIpID49ICh2b2lkICopUEFHRV9PRkZTRVQpICYmIE1BUF9OUiAoa2FkZHIpIDwgbWF4X21hcG5yKQorCisKKyNkZWZpbmUgX19wYSh4KQkJICAgICBfX3ZpcnRfdG9fcGh5cyAoKHVuc2lnbmVkIGxvbmcpKHgpKQorI2RlZmluZSBfX3ZhKHgpCQkgICAgICgodm9pZCAqKV9fcGh5c190b192aXJ0ICgodW5zaWduZWQgbG9uZykoeCkpKQorCisKKyNlbmRpZiAvKiBLRVJORUwgKi8KKworI2VuZGlmIC8qIF9fVjg1MF9QQUdFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdjg1MC9wYXJhbS5oIGIvaW5jbHVkZS9hc20tdjg1MC9wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkNzk2ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS12ODUwL3BhcmFtLmgKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLXY4NTAvcGFyYW0uaCAtLSBWYXJpb25zIGtlcm5lbCBwYXJhbWV0ZXJzCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMSwwMiAgTkVDIENvcnBvcmF0aW9uCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxLDAyICBNaWxlcyBCYWRlciA8bWlsZXNAZ251Lm9yZz4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzCisgKiBhcmNoaXZlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogV3JpdHRlbiBieSBNaWxlcyBCYWRlciA8bWlsZXNAZ251Lm9yZz4KKyAqLworCisjaWZuZGVmIF9fVjg1MF9QQVJBTV9IX18KKyNkZWZpbmUgX19WODUwX1BBUkFNX0hfXworCisjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4JLyogRm9yIEhaICovCisKKyNkZWZpbmUgRVhFQ19QQUdFU0laRQk0MDk2CisKKyNpZm5kZWYgTk9HUk9VUAorI2RlZmluZSBOT0dST1VQCQkoLTEpCisjZW5kaWYKKworI2RlZmluZSBNQVhIT1NUTkFNRUxFTgk2NAkvKiBtYXggbGVuZ3RoIG9mIGhvc3RuYW1lICovCisKKyNpZmRlZiBfX0tFUk5FTF9fCisjIGRlZmluZSBVU0VSX0haCTEwMAorIyBkZWZpbmUgQ0xPQ0tTX1BFUl9TRUMJVVNFUl9IWgorI2VuZGlmCisKKyNlbmRpZiAvKiBfX1Y4NTBfUEFSQU1fSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS12ODUwL3BjaS5oIGIvaW5jbHVkZS9hc20tdjg1MC9wY2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDE5NDE0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdjg1MC9wY2kuaApAQCAtMCwwICsxLDg4IEBACisvKgorICogaW5jbHVkZS9hc20tdjg1MC9wY2kuaCAtLSBQQ0kgc3VwcG9ydAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEsMDIgIE5FQyBDb3Jwb3JhdGlvbgorICogIENvcHlyaWdodCAoQykgMjAwMSwwMiAgTWlsZXMgQmFkZXIgPG1pbGVzQGdudS5vcmc+CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcworICogYXJjaGl2ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFdyaXR0ZW4gYnkgTWlsZXMgQmFkZXIgPG1pbGVzQGdudS5vcmc+CisgKi8KKworI2lmbmRlZiBfX1Y4NTBfUENJX0hfXworI2RlZmluZSBfX1Y4NTBfUENJX0hfXworCisvKiBHZXQgYW55IHBsYXRmb3JtLWRlcGVuZGVudCBkZWZpbml0aW9ucy4gICovCisjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KKworI2RlZmluZSBwY2liaW9zX3NjYW5fYWxsX2ZucyhhLCBiKQkwCisKKy8qIEdlbmVyaWMgZGVjbGFyYXRpb25zLiAgKi8KKworc3RydWN0IHNjYXR0ZXJsaXN0OworCitleHRlcm4gdm9pZCBwY2liaW9zX3NldF9tYXN0ZXIgKHN0cnVjdCBwY2lfZGV2ICpkZXYpOworCisvKiBgR3JhbnQnIHRvIFBERVYgdGhlIG1lbW9yeSBibG9jayBhdCBDUFVfQUREUiwgZm9yIGRvaW5nIERNQS4gIFRoZQorICAgMzItYml0IFBDSSBidXMgbWFzdGVyaW5nIGFkZHJlc3MgdG8gdXNlIGlzIHJldHVybmVkLiAgdGhlIGRldmljZSBvd25zCisgICB0aGlzIG1lbW9yeSB1bnRpbCBlaXRoZXIgcGNpX3VubWFwX3NpbmdsZSBvciBwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUgaXMKKyAgIHBlcmZvcm1lZC4gICovCitleHRlcm4gZG1hX2FkZHJfdAorcGNpX21hcF9zaW5nbGUgKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB2b2lkICpjcHVfYWRkciwgc2l6ZV90IHNpemUsIGludCBkaXIpOworCisvKiBSZXR1cm4gdG8gdGhlIENQVSB0aGUgUENJIERNQSBtZW1vcnkgYmxvY2sgcHJldmlvdXNseSBgZ3JhbnRlZCcgdG8KKyAgIFBERVYsIGF0IERNQV9BRERSLiAgKi8KK2V4dGVybiB2b2lkCitwY2lfdW5tYXBfc2luZ2xlIChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgZG1hX2FkZHJfdCBkbWFfYWRkciwgc2l6ZV90IHNpemUsCisJCSAgaW50IGRpcik7CisKKy8qIE1ha2UgcGh5c2ljYWwgbWVtb3J5IGNvbnNpc3RlbnQgZm9yIGEgc2luZ2xlIHN0cmVhbWluZyBtb2RlIERNQQorICAgdHJhbnNsYXRpb24gYWZ0ZXIgYSB0cmFuc2Zlci4KKworICAgSWYgeW91IHBlcmZvcm0gYSBwY2lfbWFwX3NpbmdsZSgpIGJ1dCB3aXNoIHRvIGludGVycm9nYXRlIHRoZQorICAgYnVmZmVyIHVzaW5nIHRoZSBjcHUsIHlldCBkbyBub3Qgd2lzaCB0byB0ZWFyZG93biB0aGUgUENJIGRtYQorICAgbWFwcGluZywgeW91IG11c3QgY2FsbCB0aGlzIGZ1bmN0aW9uIGJlZm9yZSBkb2luZyBzby4gIEF0IHRoZSBuZXh0CisgICBwb2ludCB5b3UgZ2l2ZSB0aGUgUENJIGRtYSBhZGRyZXNzIGJhY2sgdG8gdGhlIGNhcmQsIHlvdSBtdXN0IGZpcnN0CisgICBwZXJmb3JtIGEgcGNpX2RtYV9zeW5jX2Zvcl9kZXZpY2UsIGFuZCB0aGVuIHRoZSBkZXZpY2UgYWdhaW4gb3ducworICAgdGhlIGJ1ZmZlci4gICovCitleHRlcm4gdm9pZAorcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1IChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyLCBzaXplX3Qgc2l6ZSwKKwkJICAgICBpbnQgZGlyKTsKKworZXh0ZXJuIHZvaWQKK3BjaV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZSAoc3RydWN0IHBjaV9kZXYgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkciwgc2l6ZV90IHNpemUsCisJCSAgICAgaW50IGRpcik7CisKKworLyogRG8gbXVsdGlwbGUgRE1BIG1hcHBpbmdzIGF0IG9uY2UuICAqLworZXh0ZXJuIGludAorcGNpX21hcF9zZyAoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBzZ19sZW4sIGludCBkaXIpOworCisvKiBVbm1hcCBtdWx0aXBsZSBETUEgbWFwcGluZ3MgYXQgb25jZS4gICovCitleHRlcm4gdm9pZAorcGNpX3VubWFwX3NnIChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IHNnX2xlbiwKKwkgICAgICBpbnQgZGlyKTsKKworLyogQWxsb2NhdGUgYW5kIG1hcCBrZXJuZWwgYnVmZmVyIHVzaW5nIGNvbnNpc3RlbnQgbW9kZSBETUEgZm9yIFBDSQorICAgZGV2aWNlLiAgUmV0dXJucyBub24tTlVMTCBjcHUtdmlldyBwb2ludGVyIHRvIHRoZSBidWZmZXIgaWYKKyAgIHN1Y2Nlc3NmdWwgYW5kIHNldHMgKkRNQV9BRERSIHRvIHRoZSBwY2kgc2lkZSBkbWEgYWRkcmVzcyBhcyB3ZWxsLAorICAgZWxzZSBETUFfQUREUiBpcyB1bmRlZmluZWQuICAqLworZXh0ZXJuIHZvaWQgKgorcGNpX2FsbG9jX2NvbnNpc3RlbnQgKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCAqZG1hX2FkZHIpOworCisvKiBGcmVlIGFuZCB1bm1hcCBhIGNvbnNpc3RlbnQgRE1BIGJ1ZmZlci4gIENQVV9BRERSIGFuZCBETUFfQUREUiBtdXN0CisgICBiZSB2YWx1ZXMgdGhhdCB3ZXJlIHJldHVybmVkIGZyb20gcGNpX2FsbG9jX2NvbnNpc3RlbnQuICBTSVpFIG11c3QgYmUKKyAgIHRoZSBzYW1lIGFzIHdoYXQgYXMgcGFzc2VkIGludG8gcGNpX2FsbG9jX2NvbnNpc3RlbnQuICBSZWZlcmVuY2VzIHRvCisgICB0aGUgbWVtb3J5IGFuZCBtYXBwaW5ncyBhc3Nvc2NpYXRlZCB3aXRoIENQVV9BRERSIG9yIERNQV9BRERSIHBhc3QKKyAgIHRoaXMgY2FsbCBhcmUgaWxsZWdhbC4gICovCitleHRlcm4gdm9pZAorcGNpX2ZyZWVfY29uc2lzdGVudCAoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHNpemVfdCBzaXplLCB2b2lkICpjcHVfYWRkciwKKwkJICAgICBkbWFfYWRkcl90IGRtYV9hZGRyKTsKKworc3RhdGljIGlubGluZSB2b2lkIHBjaWJpb3NfYWRkX3BsYXRmb3JtX2VudHJpZXMoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKK30KKworI2VuZGlmIC8qIF9fVjg1MF9QQ0lfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS12ODUwL3BlcmNwdS5oIGIvaW5jbHVkZS9hc20tdjg1MC9wZXJjcHUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTVhYzY1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdjg1MC9wZXJjcHUuaApAQCAtMCwwICsxLDE0IEBACisjaWZuZGVmIF9fVjg1MF9QRVJDUFVfSF9fCisjZGVmaW5lIF9fVjg1MF9QRVJDUFVfSF9fCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wZXJjcHUuaD4KKworLyogVGhpcyBpcyBhIHN0dXBpZCBoYWNrIHRvIHNhdGlzZnkgc29tZSBncm90dHkgaW1wbGljaXQgaW5jbHVkZS1maWxlCisgICBkZXBlbmRlbmN5OyBiYXNpY2FsbHksIDxsaW51eC9zbXAuaD4gdXNlcyBCVUdfT04sIHdoaWNoIGNhbGxzIEJVRywgYnV0CisgICBkb2Vzbid0IGluY2x1ZGUgdGhlIG5lY2Vzc2FyeSBoZWFkZXJzIHRvIGRlZmluZSBpdC4gIEluIHRoZSB0d2lzdGVkCisgICBmZXN0ZXJpbmcgbWVzcyBvZiBpbmNsdWRlcyB0aGlzIG11c3QgYWxsIGJlIHJlc29sdmVkIHNvbWVob3cgb24gb3RoZXIKKyAgIHBsYXRmb3JtcywgYnV0IEkgaGF2ZW4ndCB0aGUgZmFpbnRlc3QgaWRlYSBob3csIGFuZCBkb24ndCBjYXJlOyBoZXJlIHdpbGwKKyAgIGRvLCBldmVuIHRob3VnaCBkb2Vzbid0IGFjdHVhbGx5IG1ha2UgYW55IHNlbnNlLiAgKi8KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorCisjZW5kaWYgLyogX19WODUwX1BFUkNQVV9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXY4NTAvcGdhbGxvYy5oIGIvaW5jbHVkZS9hc20tdjg1MC9wZ2FsbG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjkxZWIyZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXY4NTAvcGdhbGxvYy5oCkBAIC0wLDAgKzEsMjIgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS12ODUwL3BnYWxsb2MuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEsMDIgIE5FQyBDb3Jwb3JhdGlvbgorICogIENvcHlyaWdodCAoQykgMjAwMSwwMiAgTWlsZXMgQmFkZXIgPG1pbGVzQGdudS5vcmc+CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcworICogYXJjaGl2ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFdyaXR0ZW4gYnkgTWlsZXMgQmFkZXIgPG1pbGVzQGdudS5vcmc+CisgKi8KKworI2lmbmRlZiBfX1Y4NTBfUEdBTExPQ19IX18KKyNkZWZpbmUgX19WODUwX1BHQUxMT0NfSF9fCisKKyNpbmNsdWRlIDxsaW51eC9tbS5oPiAgLyogc29tZSBjcmFwIGNvZGUgZXhwZWN0cyB0aGlzICovCisKKy8qIC4uLiBhbmQgdGhlbiwgdGhlcmUgd2FzIG9uZS4gICovCisjZGVmaW5lIGNoZWNrX3BndF9jYWNoZSgpCSgodm9pZCkwKQorCisjZW5kaWYgLyogX19WODUwX1BHQUxMT0NfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS12ODUwL3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLXY4NTAvcGd0YWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2ZTM4MGUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS12ODUwL3BndGFibGUuaApAQCAtMCwwICsxLDU4IEBACisjaWZuZGVmIF9fVjg1MF9QR1RBQkxFX0hfXworI2RlZmluZSBfX1Y4NTBfUEdUQUJMRV9IX18KKworI2luY2x1ZGUgPGFzbS1nZW5lcmljLzRsZXZlbC1maXh1cC5oPgorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKworCisjZGVmaW5lIHBnZF9wcmVzZW50KHBnZCkJKDEpIC8qIHBhZ2VzIGFyZSBhbHdheXMgcHJlc2VudCBvbiBOT19NTSAqLworI2RlZmluZSBwZ2Rfbm9uZShwZ2QpCQkoMCkKKyNkZWZpbmUgcGdkX2JhZChwZ2QpCQkoMCkKKyNkZWZpbmUgcGdkX2NsZWFyKHBnZHApCQkoKHZvaWQpMCkKKworI2RlZmluZQlwbWRfb2Zmc2V0KGEsIGIpCSgodm9pZCAqKTApCisKKyNkZWZpbmUga2Vybl9hZGRyX3ZhbGlkKGFkZHIpCSgxKQorCisKKyNkZWZpbmUgX19zd3BfdHlwZSh4KQkJKDApCisjZGVmaW5lIF9fc3dwX29mZnNldCh4KQkJKDApCisjZGVmaW5lIF9fc3dwX2VudHJ5KHR5cCxvZmYpCSgoc3dwX2VudHJ5X3QpIHsgKCh0eXApIHwgKChvZmYpIDw8IDcpKSB9KQorI2RlZmluZSBfX3B0ZV90b19zd3BfZW50cnkocHRlKQkoKHN3cF9lbnRyeV90KSB7IHB0ZV92YWwocHRlKSB9KQorI2RlZmluZSBfX3N3cF9lbnRyeV90b19wdGUoeCkJKChwdGVfdCkgeyAoeCkudmFsIH0pCisKKworLyogVGhlc2UgbWVhbiBub3RoaW5nIHRvICFDT05GSUdfTU1VLiAgKi8KKyNkZWZpbmUgUEFHRV9OT05FCQlfX3BncHJvdCgwKQorI2RlZmluZSBQQUdFX1NIQVJFRAkJX19wZ3Byb3QoMCkKKyNkZWZpbmUgUEFHRV9DT1BZCQlfX3BncHJvdCgwKQorI2RlZmluZSBQQUdFX1JFQURPTkxZCQlfX3BncHJvdCgwKQorI2RlZmluZSBQQUdFX0tFUk5FTAkJX19wZ3Byb3QoMCkKKworCisvKgorICogWkVST19QQUdFIGlzIGEgZ2xvYmFsIHNoYXJlZCBwYWdlIHRoYXQgaXMgYWx3YXlzIHplcm86IHVzZWQKKyAqIGZvciB6ZXJvLW1hcHBlZCBtZW1vcnkgYXJlYXMgZXRjLiAgV2hlbiBDT05GSUdfTU1VIGlzIG5vdCBkZWZpbmVkLCB0aGlzCisgKiBzaG91bGQgbmV2ZXIgYWN0dWFsbHkgYmUgdXNlZCwgc28ganVzdCBkZWZpbmUgaXQgdG8gc29tZXRoaW5nIHRoYXQncworICogd2lsbCBob3BlZnVsbHkgY2F1c2UgYSBidXMgZXJyb3IgaWYgaXQgaXMuCisgKi8KKyNkZWZpbmUgWkVST19QQUdFKHZhZGRyKQkoKHZvaWQgKikweDg3NjU0MzIxKQorCisKKy8qIFNvbWUgYm9ndXMgY29kZSBpbiBwcm9jZnMgdXNlcyB0aGVzZTsgd2hhdGV2ZXIuICAqLworI2RlZmluZSBWTUFMTE9DX1NUQVJUCTAKKyNkZWZpbmUgVk1BTExPQ19FTkQJKH4wKQorCisKK2V4dGVybiB2b2lkIHBhZ2luZ19pbml0ICh2b2lkKTsKKyNkZWZpbmUgc3dhcHBlcl9wZ19kaXIgKChwZ2RfdCAqKSAwKQorCisjZGVmaW5lIHBndGFibGVfY2FjaGVfaW5pdCgpICAgKCh2b2lkKTApCisKKworZXh0ZXJuIHVuc2lnbmVkIGludCBrb2Jqc2l6ZShjb25zdCB2b2lkICpvYmpwKTsKKworCisjZW5kaWYgLyogX19WODUwX1BHVEFCTEVfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS12ODUwL3BvbGwuaCBiL2luY2x1ZGUvYXNtLXY4NTAvcG9sbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzNjk1NjIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS12ODUwL3BvbGwuaApAQCAtMCwwICsxLDIzIEBACisjaWZuZGVmIF9fVjg1MF9QT0xMX0hfXworI2RlZmluZSBfX1Y4NTBfUE9MTF9IX18KKworI2RlZmluZSBQT0xMSU4JCTB4MDAwMQorI2RlZmluZSBQT0xMUFJJCQkweDAwMDIKKyNkZWZpbmUgUE9MTE9VVAkJMHgwMDA0CisjZGVmaW5lIFBPTExFUlIJCTB4MDAwOAorI2RlZmluZSBQT0xMSFVQCQkweDAwMTAKKyNkZWZpbmUgUE9MTE5WQUwJMHgwMDIwCisjZGVmaW5lIFBPTExSRE5PUk0JMHgwMDQwCisjZGVmaW5lIFBPTExXUk5PUk0JUE9MTE9VVAorI2RlZmluZSBQT0xMUkRCQU5ECTB4MDA4MAorI2RlZmluZSBQT0xMV1JCQU5ECTB4MDEwMAorI2RlZmluZSBQT0xMTVNHCQkweDA0MDAKKyNkZWZpbmUgUE9MTFJFTU9WRQkweDEwMDAKKworc3RydWN0IHBvbGxmZCB7CisJaW50IGZkOworCXNob3J0IGV2ZW50czsKKwlzaG9ydCByZXZlbnRzOworfTsKKworI2VuZGlmIC8qIF9fVjg1MF9QT0xMX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdjg1MC9wb3NpeF90eXBlcy5oIGIvaW5jbHVkZS9hc20tdjg1MC9wb3NpeF90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjYjcyOTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS12ODUwL3Bvc2l4X3R5cGVzLmgKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLXY4NTAvcG9zaXhfdHlwZXMuaCAtLSBLZXJuZWwgdmVyc2lvbnMgb2Ygc3RhbmRhcmQgdHlwZXMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxLDAyLDAzICBORUMgRWxlY3Ryb25pY3MgQ29ycG9yYXRpb24KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEsMDIsMDMgIE1pbGVzIEJhZGVyIDxtaWxlc0BnbnUub3JnPgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMKKyAqIGFyY2hpdmUgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBXcml0dGVuIGJ5IE1pbGVzIEJhZGVyIDxtaWxlc0BnbnUub3JnPgorICovCisKKyNpZm5kZWYgX19WODUwX1BPU0lYX1RZUEVTX0hfXworI2RlZmluZSBfX1Y4NTBfUE9TSVhfVFlQRVNfSF9fCisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZwlfX2tlcm5lbF9pbm9fdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIF9fa2VybmVsX2lubzY0X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludAlfX2tlcm5lbF9tb2RlX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludAlfX2tlcm5lbF9ubGlua190OwordHlwZWRlZiBsb25nCQlfX2tlcm5lbF9vZmZfdDsKK3R5cGVkZWYgbG9uZyBsb25nCV9fa2VybmVsX2xvZmZfdDsKK3R5cGVkZWYgaW50CQlfX2tlcm5lbF9waWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJX19rZXJuZWxfaXBjX3BpZF90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQJX19rZXJuZWxfdWlkX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludAlfX2tlcm5lbF9naWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50CV9fa2VybmVsX3NpemVfdDsKK3R5cGVkZWYgaW50CQlfX2tlcm5lbF9zc2l6ZV90OwordHlwZWRlZiBpbnQJCV9fa2VybmVsX3B0cmRpZmZfdDsKK3R5cGVkZWYgbG9uZwkJX19rZXJuZWxfdGltZV90OwordHlwZWRlZiBsb25nCQlfX2tlcm5lbF9zdXNlY29uZHNfdDsKK3R5cGVkZWYgbG9uZwkJX19rZXJuZWxfY2xvY2tfdDsKK3R5cGVkZWYgaW50CQlfX2tlcm5lbF90aW1lcl90OwordHlwZWRlZiBpbnQJCV9fa2VybmVsX2Nsb2NraWRfdDsKK3R5cGVkZWYgaW50CQlfX2tlcm5lbF9kYWRkcl90OwordHlwZWRlZiBjaGFyICoJCV9fa2VybmVsX2NhZGRyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CV9fa2VybmVsX3VpZDE2X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CV9fa2VybmVsX2dpZDE2X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludAlfX2tlcm5lbF91aWQzMl90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQJX19rZXJuZWxfZ2lkMzJfdDsKKworLyogU29tZSBib2d1cyBjb2RlIGRlcGVuZHMgb24gdGhpczsgd2UgZG9uJ3QgY2FyZS4gICovCit0eXBlZGVmIF9fa2VybmVsX3VpZF90IF9fa2VybmVsX29sZF91aWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50CV9fa2VybmVsX29sZF9kZXZfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworI2lmIGRlZmluZWQoX19LRVJORUxfXykgfHwgZGVmaW5lZChfX1VTRV9BTEwpCisJaW50CXZhbFsyXTsKKyNlbHNlIC8qICFkZWZpbmVkKF9fS0VSTkVMX18pICYmICFkZWZpbmVkKF9fVVNFX0FMTCkgKi8KKwlpbnQJX192YWxbMl07CisjZW5kaWYgLyogIWRlZmluZWQoX19LRVJORUxfXykgJiYgIWRlZmluZWQoX19VU0VfQUxMKSAqLworfSBfX2tlcm5lbF9mc2lkX3Q7CisKKworI2lmIGRlZmluZWQoX19LRVJORUxfXykgfHwgIWRlZmluZWQoX19HTElCQ19fKSB8fCAoX19HTElCQ19fIDwgMikKKworLyogV2UgdXNlZCB0byBpbmNsdWRlIDxhc20vYml0b3BzLmg+IGhlcmUsIHdoaWNoIHNlZW1zIHRoZSByaWdodCB0aGluZywgYnV0CisgICBpdCBjYXVzZWQgbmFzdHkgaW5jbHVkZS1maWxlIGRlZmluaXRpb24gb3JkZXIgcHJvYmxlbXMuICBSZW1vdmluZyB0aGUKKyAgIGluY2x1ZGUgc2VlbXMgdG8gd29yaywgc28gZmluZ2VycyBjcm9zc2VkLi4uICAqLworCisjdW5kZWYJX19GRF9TRVQKKyNkZWZpbmUgX19GRF9TRVQoZmQsIGZkX3NldCkgXAorICBfX3NldF9iaXQgKGZkLCAodm9pZCAqKSYoKF9fa2VybmVsX2ZkX3NldCAqKWZkX3NldCktPmZkc19iaXRzKQorI3VuZGVmIF9fRkRfQ0xSCisjZGVmaW5lIF9fRkRfQ0xSKGZkLCBmZF9zZXQpIFwKKyAgX19jbGVhcl9iaXQgKGZkLCAodm9pZCAqKSYoKF9fa2VybmVsX2ZkX3NldCAqKWZkX3NldCktPmZkc19iaXRzKQorI3VuZGVmCV9fRkRfSVNTRVQKKyNkZWZpbmUgX19GRF9JU1NFVChmZCwgZmRfc2V0KSBcCisgIF9fdGVzdF9iaXQgKGZkLCAodm9pZCAqKSYoKF9fa2VybmVsX2ZkX3NldCAqKWZkX3NldCktPmZkc19iaXRzKQorI3VuZGVmCV9fRkRfWkVSTworI2RlZmluZSBfX0ZEX1pFUk8oZmRfc2V0KSBcCisgIG1lbXNldCAoZmRfc2V0LCAwLCBzaXplb2YgKCooZmRfc2V0ICopZmRfc2V0KSkKKworI2VuZGlmIC8qIGRlZmluZWQoX19LRVJORUxfXykgfHwgIWRlZmluZWQoX19HTElCQ19fKSB8fCAoX19HTElCQ19fIDwgMikgKi8KKworI2VuZGlmIC8qIF9fVjg1MF9QT1NJWF9UWVBFU19IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXY4NTAvcHJvY2Vzc29yLmggYi9pbmNsdWRlL2FzbS12ODUwL3Byb2Nlc3Nvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0MWY5MjUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS12ODUwL3Byb2Nlc3Nvci5oCkBAIC0wLDAgKzEsMTIwIEBACisvKgorICogaW5jbHVkZS9hc20tdjg1MC9wcm9jZXNzb3IuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEsMDIsMDMgIE5FQyBFbGVjdHJvbmljcyBDb3Jwb3JhdGlvbgorICogIENvcHlyaWdodCAoQykgMjAwMSwwMiwwMyAgTWlsZXMgQmFkZXIgPG1pbGVzQGdudS5vcmc+CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcworICogYXJjaGl2ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFdyaXR0ZW4gYnkgTWlsZXMgQmFkZXIgPG1pbGVzQGdudS5vcmc+CisgKi8KKworI2lmbmRlZiBfX1Y4NTBfUFJPQ0VTU09SX0hfXworI2RlZmluZSBfX1Y4NTBfUFJPQ0VTU09SX0hfXworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaWZuZGVmIF9fQVNTRU1CTFlfXyAvKiA8bGludXgvdGhyZWFkX2luZm8uaD4gaXMgbm90IGFzbS1zYWZlLiAgKi8KKyNpbmNsdWRlIDxsaW51eC90aHJlYWRfaW5mby5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisjaW5jbHVkZSA8YXNtL2VudHJ5Lmg+CisKKy8qIFNvbWUgY29kZSBleHBlY3RzIGBzZWdtZW50JyBzdHVmZiB0byBiZSBkZWZpbmVkIGhlcmUuICAqLworI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CisKKworLyoKKyAqIFRoZSBvbmx5IHBsYWNlcyB0aGlzIGlzIHVzZWQgc2VlbSB0byBiZSBob3JyaWJsZSBibGV0Y2hlcm91cyBrbHVkZ2VzLAorICogc28gd2UganVzdCBkZWZpbmUgaXQgdG8gYmUgYXMgbGFyZ2UgYXMgcG9zc2libGUuCisgKi8KKyNkZWZpbmUgVEFTS19TSVpFCSgweEZGRkZGRkZGKQorCisvKgorICogVGhpcyBkZWNpZGVzIHdoZXJlIHRoZSBrZXJuZWwgd2lsbCBzZWFyY2ggZm9yIGEgZnJlZSBjaHVuayBvZiB2bQorICogc3BhY2UgZHVyaW5nIG1tYXAncy4gIFdlIHdvbid0IGJlIHVzaW5nIGl0LgorICovCisjZGVmaW5lIFRBU0tfVU5NQVBQRURfQkFTRQkwCisKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworCisvKgorICogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBtYWNybyB0aGF0IHJldHVybnMgY3VycmVudAorICogaW5zdHJ1Y3Rpb24gcG9pbnRlciAoInByb2dyYW0gY291bnRlciIpLgorICovCisjZGVmaW5lIGN1cnJlbnRfdGV4dF9hZGRyKCkJKHsgX19sYWJlbF9fIF9sOyBfbDogJiZfbDt9KQorCisvKiBJZiB5b3UgY2hhbmdlIHRoaXMsIHlvdSBtdXN0IGNoYW5nZSB0aGUgYXNzb2NpYXRlZCBhc3NlbWJseS1sYW5ndWFnZXMKKyAgIGNvbnN0YW50cyBkZWZpbmVkIGJlbG93LCBUSFJFQURfKi4gICovCitzdHJ1Y3QgdGhyZWFkX3N0cnVjdCB7CisJLyoga2VybmVsIHN0YWNrIHBvaW50ZXIgKG11c3QgYmUgZmlyc3QgZmllbGQgaW4gc3RydWN0dXJlKSAqLworCXVuc2lnbmVkIGxvbmcgIGtzcDsKK307CisKKyNkZWZpbmUgSU5JVF9USFJFQUQgeyBzaXplb2YgaW5pdF9zdGFjayArICh1bnNpZ25lZCBsb25nKWluaXRfc3RhY2sgfQorCisKKy8qIERvIG5lY2Vzc2FyeSBzZXR1cCB0byBzdGFydCB1cCBhIG5ld2x5IGV4ZWN1dGVkIHRocmVhZC4gICovCitleHRlcm4gaW5saW5lIHZvaWQgc3RhcnRfdGhyZWFkIChzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwkJCQkgdW5zaWduZWQgbG9uZyBwYywgdW5zaWduZWQgbG9uZyB1c3ApCit7CisJcmVncy0+cGMgPSBwYzsKKwlyZWdzLT5ncHJbR1BSX1NQXSA9IHVzcDsKKwlyZWdzLT5rZXJuZWxfbW9kZSA9IDA7Cit9CisKKy8qIEZyZWUgYWxsIHJlc291cmNlcyBoZWxkIGJ5IGEgdGhyZWFkLiAqLworZXh0ZXJuIGlubGluZSB2b2lkIHJlbGVhc2VfdGhyZWFkIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmRlYWRfdGFzaykKK3sKK30KKworLyogUHJlcGFyZSB0byBjb3B5IHRocmVhZCBzdGF0ZSAtIHVubGF6eSBhbGwgbGF6eSBzdGF0dXMgKi8KKyNkZWZpbmUgcHJlcGFyZV90b19jb3B5KHRzaykJZG8geyB9IHdoaWxlICgwKQorCitleHRlcm4gaW50IGtlcm5lbF90aHJlYWQgKGludCAoKmZuKSh2b2lkICopLCB2b2lkICogYXJnLCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKKworLyogRnJlZSBjdXJyZW50IHRocmVhZCBkYXRhIHN0cnVjdHVyZXMgZXRjLiAgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBleGl0X3RocmVhZCAodm9pZCkKK3sKK30KKworCisvKiBSZXR1cm4gdGhlIHJlZ2lzdGVycyBzYXZlZCBkdXJpbmcgY29udGV4dC1zd2l0Y2ggYnkgdGhlIGN1cnJlbnRseQorICAgbm90LXJ1bm5pbmcgdGhyZWFkIFQuICBOb3RlIHRoYXQgdGhpcyBvbmx5IGluY2x1ZGVzIHNvbWUgcmVnaXN0ZXJzIQorICAgU2VlIGVudHJ5LlMgZm9yIGRldGFpbHMuICAqLworI2RlZmluZSB0aHJlYWRfc2F2ZWRfcmVncyh0KSBcCisgICAoKHN0cnVjdCBwdF9yZWdzKikoKHQpLT50aHJlYWQua3NwICsgU1RBVEVfU0FWRV9QVF9PRkZTRVQpKQorLyogUmV0dXJuIHNhdmVkIChrZXJuZWwpIFBDIG9mIGEgYmxvY2tlZCB0aHJlYWQuICBBY3R1YWxseSwgd2UgcmV0dXJuIHRoZQorICAgTFAgcmVnaXN0ZXIsIGJlY2F1c2UgdGhlIHRocmVhZCBpcyBhY3R1YWxseSBibG9ja2VkIGluIHN3aXRjaF90aHJlYWQsCisgICBhbmQgd2UncmUgaW50ZXJlc3RlZCBpbiB0aGUgUEMgaXQgd2lsbCBfcmV0dXJuXyB0by4gICovCisjZGVmaW5lIHRocmVhZF9zYXZlZF9wYyh0KSAgICh0aHJlYWRfc2F2ZWRfcmVncyh0KS0+Z3ByW0dQUl9MUF0pCisKKwordW5zaWduZWQgbG9uZyBnZXRfd2NoYW4gKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7CisKKworLyogUmV0dXJuIHNvbWUgaW5mbyBhYm91dCB0aGUgdXNlciBwcm9jZXNzIFRBU0suICAqLworI2RlZmluZSB0YXNrX3Rvcyh0YXNrKQkoKHVuc2lnbmVkIGxvbmcpKHRhc2spLT50aHJlYWRfaW5mbyArIFRIUkVBRF9TSVpFKQorI2RlZmluZSB0YXNrX3JlZ3ModGFzaykgKChzdHJ1Y3QgcHRfcmVncyAqKXRhc2tfdG9zICh0YXNrKSAtIDEpCisjZGVmaW5lIHRhc2tfc3AodGFzaykJKHRhc2tfcmVncyAodGFzayktPmdwcltHUFJfU1BdKQorI2RlZmluZSB0YXNrX3BjKHRhc2spCSh0YXNrX3JlZ3MgKHRhc2spLT5wYykKKy8qIEdyb3R0eSBvbGQgbmFtZXMgZm9yIHNvbWUuICAqLworI2RlZmluZSBLU1RLX0VJUCh0YXNrKQl0YXNrX3BjICh0YXNrKQorI2RlZmluZSBLU1RLX0VTUCh0YXNrKQl0YXNrX3NwICh0YXNrKQorCisKKyNkZWZpbmUgY3B1X3JlbGF4KCkgICAgKCh2b2lkKTApCisKKworI2Vsc2UgLyogX19BU1NFTUJMWV9fICovCisKKyNkZWZpbmUgVEhSRUFEX0tTUAkwCisKKyNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCisKKworI2VuZGlmIC8qIF9fVjg1MF9QUk9DRVNTT1JfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS12ODUwL3B0cmFjZS5oIGIvaW5jbHVkZS9hc20tdjg1MC9wdHJhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmY3MmJiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdjg1MC9wdHJhY2UuaApAQCAtMCwwICsxLDEyMSBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLXY4NTAvcHRyYWNlLmggLS0gQWNjZXNzIHRvIENQVSByZWdpc3RlcnMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxLDAyLDAzICBORUMgRWxlY3Ryb25pY3MgQ29ycG9yYXRpb24KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEsMDIsMDMgIE1pbGVzIEJhZGVyIDxtaWxlc0BnbnUub3JnPgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMKKyAqIGFyY2hpdmUgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBXcml0dGVuIGJ5IE1pbGVzIEJhZGVyIDxtaWxlc0BnbnUub3JnPgorICovCisKKyNpZm5kZWYgX19WODUwX1BUUkFDRV9IX18KKyNkZWZpbmUgX19WODUwX1BUUkFDRV9IX18KKworCisvKiB2ODUwIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMgd2l0aCBzcGVjaWFsIG1lYW5pbmdzLiAgKi8KKyNkZWZpbmUgR1BSX1pFUk8JMAkvKiBjb25zdGFudCB6ZXJvICovCisjZGVmaW5lIEdQUl9BU00JCTEJLyogcmVzZXJ2ZWQgZm9yIGFzc2VtYmxlciAqLworI2RlZmluZSBHUFJfU1AJCTMJLyogc3RhY2sgcG9pbnRlciAqLworI2RlZmluZSBHUFJfR1AJCTQJLyogZ2xvYmFsIGRhdGEgcG9pbnRlciAqLworI2RlZmluZSBHUFJfVFAJCTUJLyogYHRleHQgcG9pbnRlcicgKi8KKyNkZWZpbmUgR1BSX0VQCQkzMAkvKiBgZWxlbWVudCBwb2ludGVyJyAqLworI2RlZmluZSBHUFJfTFAJCTMxCS8qIGxpbmsgcG9pbnRlciAoY3VycmVudCByZXR1cm4gYWRkcmVzcykgKi8KKworLyogVGhlc2UgYXJlbid0IG9mZmljaWFsIG5hbWVzLCBidXQgdGhleSBtYWtlIHNvbWUgY29kZSBtb3JlIGRlc2NyaXB0aXZlLiAgKi8KKyNkZWZpbmUgR1BSX0FSRzAJNgorI2RlZmluZSBHUFJfQVJHMQk3CisjZGVmaW5lIEdQUl9BUkcyCTgKKyNkZWZpbmUgR1BSX0FSRzMJOQorI2RlZmluZSBHUFJfUlZBTDAJMTAKKyNkZWZpbmUgR1BSX1JWQUwxCTExCisjZGVmaW5lIEdQUl9SVkFMCUdQUl9SVkFMMAorCisjZGVmaW5lIE5VTV9HUFJTCTMyCisKKy8qIHY4NTAgYHN5c3RlbScgcmVnaXN0ZXJzLiAgKi8KKyNkZWZpbmUgU1JfRUlQQwkJMAorI2RlZmluZSBTUl9FSVBTVwkxCisjZGVmaW5lIFNSX0ZFUEMJCTIKKyNkZWZpbmUgU1JfRkVQU1cJMworI2RlZmluZSBTUl9FQ1IJCTQKKyNkZWZpbmUgU1JfUFNXCQk1CisjZGVmaW5lIFNSX0NUUEMJCTE2CisjZGVmaW5lIFNSX0NUUFNXCTE3CisjZGVmaW5lIFNSX0RCUEMJCTE4CisjZGVmaW5lIFNSX0RCUFNXCTE5CisjZGVmaW5lIFNSX0NUQlAJCTIwCisjZGVmaW5lIFNSX0RJUgkJMjEKKyNkZWZpbmUgU1JfQVNJRAkJMjMKKworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdjg1MF9yZWdfdDsKKworLyogSG93IHByb2Nlc3NvciBzdGF0ZSBpcyBzdG9yZWQgb24gdGhlIHN0YWNrIGR1cmluZyBhIHN5c2NhbGwvc2lnbmFsLgorICAgSWYgeW91IGNoYW5nZSB0aGlzIHN0cnVjdHVyZSwgY2hhbmdlIHRoZSBhc3NvY2lhdGVkIGFzc2VtYmx5LWxhbmd1YWdlCisgICBtYWNyb3MgYmVsb3cgdG9vIChQVF8qKSEgICovCitzdHJ1Y3QgcHRfcmVncworeworCS8qIEdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMuICAqLworCXY4NTBfcmVnX3QgZ3ByW05VTV9HUFJTXTsKKworCXY4NTBfcmVnX3QgcGM7CQkvKiBwcm9ncmFtIGNvdW50ZXIgKi8KKwl2ODUwX3JlZ190IHBzdzsJCS8qIHByb2dyYW0gc3RhdHVzIHdvcmQgKi8KKworCS8qIFJlZ2lzdGVycyB1c2VkIGJ5IGBjYWxsdCcgaW5zdHJ1Y3Rpb246ICAqLworCXY4NTBfcmVnX3QgY3RwYzsJLyogc2F2ZWQgcHJvZ3JhbSBjb3VudGVyICovCisJdjg1MF9yZWdfdCBjdHBzdzsJLyogc2F2ZWQgcHN3ICovCisJdjg1MF9yZWdfdCBjdGJwOwkvKiBiYXNlIHBvaW50ZXIgZm9yIGNhbGx0IHRhYmxlICovCisKKwljaGFyIGtlcm5lbF9tb2RlOwkvKiAxIGlmIGluIGBrZXJuZWwgbW9kZScsIDAgaWYgdXNlciBtb2RlICovCit9OworCisKKyNkZWZpbmUgaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKQkoKHJlZ3MpLT5wYykKKyNkZWZpbmUgcHJvZmlsZV9wYyhyZWdzKSBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpCisjZGVmaW5lIHVzZXJfbW9kZShyZWdzKQkJCSghKHJlZ3MpLT5rZXJuZWxfbW9kZSkKKworLyogV2hlbiBhIHN0cnVjdCBwdF9yZWdzIGlzIHVzZWQgdG8gc2F2ZSB1c2VyIHN0YXRlIGZvciBhIHN5c3RlbSBjYWxsIGluCisgICB0aGUga2VybmVsLCB0aGUgc3lzdGVtIGNhbGwgaXMgc3RvcmVkIGluIHRoZSBzcGFjZSBmb3IgUjAgKHNpbmNlIGl0J3MKKyAgIG5ldmVyIHVzZWQgb3RoZXJ3aXNlLCBSMCBiZWluZyBhIGNvbnN0YW50IDApLiAgTm9uLXN5c3RlbS1jYWxscworICAgc2ltcGx5IHN0b3JlIDAgdGhlcmUuICAqLworI2RlZmluZSBQVF9SRUdTX1NZU0NBTEwocmVncykJCShyZWdzKS0+Z3ByWzBdCisjZGVmaW5lIFBUX1JFR1NfU0VUX1NZU0NBTEwocmVncywgdmFsKQkoKHJlZ3MpLT5ncHJbMF0gPSAodmFsKSkKKworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKworCisvKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIHVzZWQgdG8gc3RvcmUgZWFjaCByZWdpc3Rlci4gICovCisjZGVmaW5lIF9QVF9SRUdfU0laRQk0CisKKy8qIE9mZnNldCBvZiBhIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlciBpbiBhIHN0dWN0IHB0X3JlZ3MuICAqLworI2RlZmluZSBQVF9HUFIobnVtKQkoKG51bSkgKiBfUFRfUkVHX1NJWkUpCisKKy8qIE9mZnNldHMgb2YgdmFyaW91cyBzcGVjaWFsIHJlZ2lzdGVycyAmIGZpZWxkcyBpbiBhIHN0cnVjdCBwdF9yZWdzLiAgKi8KKyNkZWZpbmUgUFRfUEMJCSgoTlVNX0dQUlMgKyAwKSAqIF9QVF9SRUdfU0laRSkKKyNkZWZpbmUgUFRfUFNXCQkoKE5VTV9HUFJTICsgMSkgKiBfUFRfUkVHX1NJWkUpCisjZGVmaW5lIFBUX0NUUEMJCSgoTlVNX0dQUlMgKyAyKSAqIF9QVF9SRUdfU0laRSkKKyNkZWZpbmUgUFRfQ1RQU1cJKChOVU1fR1BSUyArIDMpICogX1BUX1JFR19TSVpFKQorI2RlZmluZSBQVF9DVEJQCQkoKE5VTV9HUFJTICsgNCkgKiBfUFRfUkVHX1NJWkUpCisjZGVmaW5lIFBUX0tFUk5FTF9NT0RFCSgoTlVNX0dQUlMgKyA1KSAqIF9QVF9SRUdfU0laRSkKKworLyogV2hlcmUgdGhlIGN1cnJlbnQgc3lzY2FsbCBudW1iZXIgaXMgc3Rhc2hlZDsgb2J2aW91c2x5IG9ubHkgdmFsaWQgaW4KKyAgIHRoZSBrZXJuZWwhICAqLworI2RlZmluZSBQVF9DVVJfU1lTQ0FMTAlQVF9HUFIoMCkKKworLyogU2l6ZSBvZiBzdHJ1Y3QgcHRfcmVncywgaW5jbHVkaW5nIGFsaWdubWVudC4gICovCisjZGVmaW5lIFBUX1NJWkUJCSgoTlVNX0dQUlMgKyA2KSAqIF9QVF9SRUdfU0laRSkKKworCisvKiBUaGVzZSBhcmUgYG1hZ2ljJyB2YWx1ZXMgZm9yIFBUUkFDRV9QRUVLVVNSIHRoYXQgcmV0dXJuIGluZm8gYWJvdXQgd2hlcmUKKyAgIGEgcHJvY2VzcyBpcyBsb2NhdGVkIGluIG1lbW9yeS4gICovCisjZGVmaW5lIFBUX1RFWFRfQUREUgkoUFRfU0laRSArIDEpCisjZGVmaW5lIFBUX1RFWFRfTEVOCShQVF9TSVpFICsgMikKKyNkZWZpbmUgUFRfREFUQV9BRERSCShQVF9TSVpFICsgMykKKworCisjZW5kaWYgLyogX19WODUwX1BUUkFDRV9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXY4NTAvcmVzb3VyY2UuaCBiL2luY2x1ZGUvYXNtLXY4NTAvcmVzb3VyY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjlkY2Q0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdjg1MC9yZXNvdXJjZS5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfX1Y4NTBfUkVTT1VSQ0VfSF9fCisjZGVmaW5lIF9fVjg1MF9SRVNPVVJDRV9IX18KKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3Jlc291cmNlLmg+CisKKyNlbmRpZiAvKiBfX1Y4NTBfUkVTT1VSQ0VfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS12ODUwL3J0ZV9jYi5oIGIvaW5jbHVkZS9hc20tdjg1MC9ydGVfY2IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjdmMDJjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdjg1MC9ydGVfY2IuaApAQCAtMCwwICsxLDg1IEBACisvKgorICogaW5jbHVkZS9hc20tdjg1MC9ydGVfY2IuaCAtLSBNaWRhcyBsYWJzIFJURS1DQiBzZXJpZXMgb2YgZXZhbHVhdGlvbiBib2FyZHMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxLDAyLDAzICBORUMgRWxlY3Ryb25pY3MgQ29ycG9yYXRpb24KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEsMDIsMDMgIE1pbGVzIEJhZGVyIDxtaWxlc0BnbnUub3JnPgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMKKyAqIGFyY2hpdmUgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBXcml0dGVuIGJ5IE1pbGVzIEJhZGVyIDxtaWxlc0BnbnUub3JnPgorICovCisKKyNpZm5kZWYgX19WODUwX1JURV9DQl9IX18KKyNkZWZpbmUgX19WODUwX1JURV9DQl9IX18KKworCisvKiBUaGUgU1JBTSBvbiB0aGUgTW90aGVyLUEgbW90aGVyYm9hcmQuICAqLworI2RlZmluZSBNQl9BX1NSQU1fQUREUgkJR0NTMF9BRERSCisjZGVmaW5lIE1CX0FfU1JBTV9TSVpFCQkweDAwMjAwMDAwIC8qIDJNQiAqLworCisKKyNpZmRlZiBDT05GSUdfUlRFX0dCVVNfSU5UCisvKiBHQlVTIGludGVycnVwdCBzdXBwb3J0LiAgKi8KKworIyBpbmNsdWRlIDxhc20vZ2J1c19pbnQuaD4KKworIyBkZWZpbmUgR0JVU19JTlRfQkFTRV9JUlEJTlVNX1JURV9DQl9JUlFTCisjIGRlZmluZSBHQlVTX0lOVF9CQVNFX0FERFIJKEdDUzJfQUREUiArIDB4MDAwMDYwMDApCisKKy8qIFNvbWUgc3BlY2lmaWMgaW50ZXJydXB0cy4gICovCisjIGRlZmluZSBJUlFfTUJfQV9MQU4JCUlSUV9HQlVTX0lOVCgxMCkKKyMgZGVmaW5lIElSUV9NQl9BX1BDSTEobikJKElSUV9HQlVTX0lOVCgxNikgKyAobikpCisjIGRlZmluZSBJUlFfTUJfQV9QQ0kxX05VTQk0CisjIGRlZmluZSBJUlFfTUJfQV9QQ0kyKG4pCShJUlFfR0JVU19JTlQoMjApICsgKG4pKQorIyBkZWZpbmUgSVJRX01CX0FfUENJMl9OVU0JNAorIyBkZWZpbmUgSVJRX01CX0FfRVhUKG4pCShJUlFfR0JVU19JTlQoMjQpICsgKG4pKQorIyBkZWZpbmUgSVJRX01CX0FfRVhUX05VTQk0CisjIGRlZmluZSBJUlFfTUJfQV9VU0JfT0MobikJKElSUV9HQlVTX0lOVCgyOCkgKyAobikpCisjIGRlZmluZSBJUlFfTUJfQV9VU0JfT0NfTlVNCTIKKyMgZGVmaW5lIElSUV9NQl9BX1BDTUNJQV9PQwlJUlFfR0JVU19JTlQoMzApCisKKy8qIFdlIGRlZmluZSBOVU1fTUFDSF9JUlFTIHRvIGluY2x1ZGUgZXh0cmEgaW50ZXJydXB0cyBmcm9tIHRoZSBHQlVTLiAgKi8KKyMgZGVmaW5lIE5VTV9NQUNIX0lSUVMJCShOVU1fUlRFX0NCX0lSUVMgKyBJUlFfR0JVU19JTlRfTlVNKQorCisjZWxzZSAvKiAhQ09ORklHX1JURV9HQlVTX0lOVCAqLworCisjIGRlZmluZSBOVU1fTUFDSF9JUlFTCQlOVU1fUlRFX0NCX0lSUVMKKworI2VuZGlmIC8qIENPTkZJR19SVEVfR0JVU19JTlQgKi8KKworCisjaWZkZWYgQ09ORklHX1JURV9NQl9BX1BDSQorLyogTW90aGVyLUEgUENJIGJ1cyBzdXBwb3J0LiAgKi8KKworIyBpbmNsdWRlIDxhc20vcnRlX21iX2FfcGNpLmg+CisKKy8qIFRoZXNlIGFyZSB0aGUgYmFzZSBhZGRyZXNzZXMgdXNlZCBmb3IgYWxsb2NhdGluZyBkZXZpY2UgYWRkcmVzcworICAgc3BhY2UuICA1MTJLIG9mIHRoZSBtb3RoZXJib2FyZCBTUkFNIGlzIGluIHRoZSBzYW1lIHNwYWNlLCBzbyB3ZSBoYXZlCisgICB0byBiZSBjYXJlZnVsIG5vdCB0byBsZXQgaXQgYmUgYWxsb2NhdGVkLiAgKi8KKyMgZGVmaW5lIFBDSUJJT1NfTUlOX01FTQkoTUJfQV9QQ0lfTUVNX0FERFIgKyAweDgwMDAwKQorIyBkZWZpbmUgUENJQklPU19NSU5fSU8JCU1CX0FfUENJX0lPX0FERFIKKworLyogQXMgd2UgZG9uJ3QgcmVhbGx5IHN1cHBvcnQgUENJIERNQSB0byBjcHUgbWVtb3J5LCBhbmQgdXNlIGJvdW5jZS1idWZmZXJzCisgICBpbnN0ZWFkLCBwZXJ2ZXJzZWx5IGVub3VnaCwgdGhpcyBiZWNvbWVzIGFsd2F5cyB0cnVlISAqLworIyBkZWZpbmUgcGNpX2RtYV9zdXBwb3J0ZWQoZGV2LCBtYXNrKQkJMQorIyBkZWZpbmUgcGNpX2RhY19kbWFfc3VwcG9ydGVkKGRldiwgbWFzaykJMAorIyBkZWZpbmUgcGNpYmlvc19hc3NpZ25fYWxsX2J1c3NlcygpCQkxCisKKyNlbmRpZiAvKiBDT05GSUdfUlRFX01CX0FfUENJICovCisKKworLyogRm9yIDxhc20vcGFyYW0uaD4gKi8KKyNpZm5kZWYgSFoKKyNkZWZpbmUgSFoJMTAwCisjZW5kaWYKKworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworZXh0ZXJuIHZvaWQgcnRlX2NiX2Vhcmx5X2luaXQgKHZvaWQpOworZXh0ZXJuIHZvaWQgcnRlX2NiX2luaXRfaXJxcyAodm9pZCk7CisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisKKyNlbmRpZiAvKiBfX1Y4NTBfUlRFX0NCX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdjg1MC9ydGVfbWExX2NiLmggYi9pbmNsdWRlL2FzbS12ODUwL3J0ZV9tYTFfY2IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDMxNjJhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdjg1MC9ydGVfbWExX2NiLmgKQEAgLTAsMCArMSwxMjggQEAKKy8qCisgKiBpbmNsdWRlL2FzbS12ODUwL3J0ZV9tYTFfY2IuaCAtLSBNaWRhcyBsYWJzIFJURS1WODUwL01BMS1DQiBib2FyZAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEsMDIsMDMgIE5FQyBFbGVjdHJvbmljcyBDb3Jwb3JhdGlvbgorICogIENvcHlyaWdodCAoQykgMjAwMSwwMiwwMyAgTWlsZXMgQmFkZXIgPG1pbGVzQGdudS5vcmc+CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcworICogYXJjaGl2ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFdyaXR0ZW4gYnkgTWlsZXMgQmFkZXIgPG1pbGVzQGdudS5vcmc+CisgKi8KKworI2lmbmRlZiBfX1Y4NTBfUlRFX01BMV9DQl9IX18KKyNkZWZpbmUgX19WODUwX1JURV9NQTFfQ0JfSF9fCisKKyNpbmNsdWRlIDxhc20vcnRlX2NiLmg+CQkvKiBDb21tb24gZGVmcyBmb3IgTWlkYXMgUlRFLUNCIGJvYXJkcy4gICovCisKKworI2RlZmluZSBQTEFURk9STQkJInJ0ZS12ODUwZS9tYTEtY2IiCisjZGVmaW5lIFBMQVRGT1JNX0xPTkcJCSJNaWRhcyBsYWIgUlRFLVY4NTBFL01BMS1DQiIKKworI2RlZmluZSBDUFVfQ0xPQ0tfRlJFUQkJNTAwMDAwMDAgLyogNTBNSHogKi8KKworLyogMU1CIG9mIG9uYm9hcmQgU1JBTS4gIE5vdGUgdGhhdCB0aGUgbW9uaXRvciBST00gdXNlcyBwYXJ0cyBvZiB0aGlzCisgICBmb3IgaXRzIG93biBwdXJwb3Nlcywgc28gY2FyZSBtdXN0IGJlIHRha2VuLiAgU29tZSBhZGRyZXNzIGxpbmVzIGFyZQorICAgbm90IGRlY29kZWQsIHNvIHRoZSBTUkFNIGFyZWEgaXMgbWlycm9yZWQgZXZlcnkgMU1CIGZyb20gMHg0MDAwMDAgdG8KKyAgIDB4ODAwMDAwIChleGNsdXNpdmUpLiAgKi8KKyNkZWZpbmUgU1JBTV9BRERSCQkweDAwNDAwMDAwCisjZGVmaW5lIFNSQU1fU0laRQkJMHgwMDEwMDAwMCAvKiAxTUIgKi8KKworLyogMzJNQiBvZiBvbmJhcmQgU0RSQU0uICAqLworI2RlZmluZSBTRFJBTV9BRERSCQkweDAwODAwMDAwCisjZGVmaW5lIFNEUkFNX1NJWkUJCTB4MDIwMDAwMDAgLyogMzJNQiAqLworCisKKy8qIENQVSBhZGRyZXNzZXMgb2YgR0JVUyBtZW1vcnkgc3BhY2VzLiAgKi8KKyNkZWZpbmUgR0NTMF9BRERSCQkweDA1MDAwMDAwIC8qIEdDUzAgLSBDb21tb24gU1JBTSAoMk1CKSAqLworI2RlZmluZSBHQ1MwX1NJWkUJCTB4MDAyMDAwMDAgLyogICAyTUIgKi8KKyNkZWZpbmUgR0NTMV9BRERSCQkweDA2MDAwMDAwIC8qIEdDUzEgLSBGbGFzaCBST00gKDhNQikgKi8KKyNkZWZpbmUgR0NTMV9TSVpFCQkweDAwODAwMDAwIC8qICAgOE1CICovCisjZGVmaW5lIEdDUzJfQUREUgkJMHgwNzkwMDAwMCAvKiBHQ1MyIC0gSS9PIHJlZ2lzdGVycyAqLworI2RlZmluZSBHQ1MyX1NJWkUJCTB4MDA0MDAwMDAgLyogICA0TUIgKi8KKyNkZWZpbmUgR0NTNV9BRERSCQkweDA0MDAwMDAwIC8qIEdDUzUgLSBQQ0kgYnVzIHNwYWNlICovCisjZGVmaW5lIEdDUzVfU0laRQkJMHgwMTAwMDAwMCAvKiAgIDE2TUIgKi8KKyNkZWZpbmUgR0NTNl9BRERSCQkweDA3OTgwMDAwIC8qIEdDUzYgLSBQQ0kgY29udHJvbCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgR0NTNl9TSVpFCQkweDAwMDAwMjAwIC8qICAgNTEyQiAqLworCisKKy8qIEZvciA8YXNtL3BhZ2UuaD4gKi8KKyNkZWZpbmUgUEFHRV9PRkZTRVQgCQlTUkFNX0FERFIKKworCisvKiBUaGUgR0JVUyBHSU5UMCAtIEdJTlQzIGludGVycnVwdHMgYXJlIGNvbm5lY3RlZCB0byB0aGUgSU5UUDAwMCAtIElOVFAwMTEKKyAgIHBpbnMgb24gdGhlIENQVS4gIFRoZXNlIGFyZSBzaGFyZWQgYW1vbmcgdGhlIEdCVVMgaW50ZXJydXB0cy4gICovCisjZGVmaW5lIElSUV9HSU5UKG4pCQlJUlFfSU5UUChuKQorI2RlZmluZSBJUlFfR0lOVF9OVU0JCTQKKworLyogVXNlZCBieSA8YXNtL3J0ZV9jYi5oPiB0byBkZXJpdmUgTlVNX01BQ0hfSVJRUy4gICovCisjZGVmaW5lIE5VTV9SVEVfQ0JfSVJRUwkJTlVNX0NQVV9JUlFTCisKKworI2lmZGVmIENPTkZJR19ST01fS0VSTkVMCisvKiBLZXJuZWwgaXMgaW4gUk9NLCBzdGFydGluZyBhdCBhZGRyZXNzIDAuICAqLworCisjZGVmaW5lIElOVFZfQkFTRQkJMAorCisjZWxzZSAvKiAhQ09ORklHX1JPTV9LRVJORUwgKi8KKworI2lmZGVmIENPTkZJR19SVEVfQ0JfTVVMVEkKKy8qIFVzaW5nIFJBTSBrZXJuZWwgd2l0aCBST00gbW9uaXRvciBmb3IgTXVsdGkgZGVidWdnZXIuICAqLworCisvKiBUaGUgY2hpcCdzIHJlYWwgaW50ZXJydXB0IHZlY3RvcnMgYXJlIGluIFJPTSwgYnV0IHRoZXkganVtcCB0byBhCisgICBzZWNvbmRhcnkgaW50ZXJydXB0IHZlY3RvciB0YWJsZSBpbiBSQU0uICAqLworI2RlZmluZSBJTlRWX0JBU0UJCTB4MDA0RjgwMDAKKworLyogU2NyYXRjaCBtZW1vcnkgdXNlZCBieSB0aGUgUk9NIG1vbml0b3IsIHdoaWNoIHNob3VsZG4ndCBiZSB1c2VkIGJ5CisgICBsaW51eCAoZXhjZXB0IGZvciB0aGUgYWx0ZXJuYXRlIGludGVycnVwdCB2ZWN0b3IgYXJlYSwgZGVmaW5lZAorICAgYWJvdmUpLiAgKi8KKyNkZWZpbmUgTU9OX1NDUkFUQ0hfQUREUgkweDAwNEY4MDAwCisjZGVmaW5lIE1PTl9TQ1JBVENIX1NJWkUJMHgwMDAwODAwMCAvKiAzMktCICovCisKKyNlbHNlIC8qICFDT05GSUdfUlRFX0NCX01VTFRJICovCisvKiBVc2luZyBSQU0ta2VybmVsLiAgQXNzdW1lIHNvbWUgc29ydCBvZiBib290LWxvYWRlciBnb3QgdXMgbG9hZGVkIGF0CisgICBhZGRyZXNzIDAuICAqLworCisjZGVmaW5lIElOVFZfQkFTRQkJMAorCisjZW5kaWYgLyogQ09ORklHX1JURV9DQl9NVUxUSSAqLworCisjZW5kaWYgLyogQ09ORklHX1JPTV9LRVJORUwgKi8KKworCisvKiBTb21lIG1pc2MuIG9uLWJvYXJkIGRldmljZXMuICAqLworCisvKiBTZXZlbi1zZWdtZW50IExFRCBkaXNwbGF5ICh0d28gZGlnaXRzKS4gIFdyaXRlLW9ubHkuICAqLworI2RlZmluZSBMRURfQUREUihuKQkJKDB4MDc4MDIwMDAgKyAobikpCisjZGVmaW5lIExFRChuKQkJCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilMRURfQUREUihuKSkKKyNkZWZpbmUgTEVEX05VTV9ESUdJVFMJCTIKKworCisvKiBPdmVycmlkZSB0aGUgYmFzaWMgTUEgdWFydCBwcmUtaW5pdGlhbGl6YXRpb24gc28gdGhhdCB3ZSBjYW4KKyAgIGluaXRpYWxpemUgZXh0cmEgc3R1ZmYuICAqLworI3VuZGVmIFY4NTBFX1VBUlRfUFJFX0NPTkZJR1VSRQkvKiBzaG91bGQgYmUgZGVmaW5lZCBieSA8YXNtL21hLmg+ICovCisjZGVmaW5lIFY4NTBFX1VBUlRfUFJFX0NPTkZJR1VSRQlydGVfbWExX2NiX3VhcnRfcHJlX2NvbmZpZ3VyZQorI2lmbmRlZiBfX0FTU0VNQkxZX18KK2V4dGVybiB2b2lkIHJ0ZV9tYTFfY2JfdWFydF9wcmVfY29uZmlndXJlICh1bnNpZ25lZCBjaGFuLAorCQkJCQkgICB1bnNpZ25lZCBjZmxhZ3MsIHVuc2lnbmVkIGJhdWQpOworI2VuZGlmCisKKy8qIFRoaXMgYm9hcmQgc3VwcG9ydHMgUlRTL0NUUyBmb3IgdGhlIG9uLWNoaXAgVUFSVCwgYnV0IG9ubHkgZm9yIGNoYW5uZWwgMC4gKi8KKworLyogQ1RTIGZvciBVQVJUIGNoYW5uZWwgMCBpcyBwaW4gUDQzIChiaXQgMyBvZiBwb3J0IDQpLiAgKi8KKyNkZWZpbmUgVjg1MEVfVUFSVF9DVFMoY2hhbikJKChjaGFuKSA9PSAwID8gIShNQV9QT1JUNF9JTyAmIDB4OCkgOiAxKQorLyogUlRTIGZvciBVQVJUIGNoYW5uZWwgMCBpcyBwaW4gUDQyIChiaXQgMiBvZiBwb3J0IDQpLiAgKi8KKyNkZWZpbmUgVjg1MEVfVUFSVF9TRVRfUlRTKGNoYW4sIHZhbCkJCQkJCSAgICAgIFwKKyAgIGRvIHsJCQkJCQkJCQkgICAgICBcCisJICAgaWYgKGNoYW4gPT0gMCkgewkJCQkJCSAgICAgIFwKKwkJICAgdW5zaWduZWQgb2xkID0gTUFfUE9SVDRfSU87IAkJCQkgICAgICBcCisJCSAgIGlmICh2YWwpCQkJCQkJICAgICAgXAorCQkJICAgTUFfUE9SVDRfSU8gPSBvbGQgJiB+MHg0OwkJCSAgICAgIFwKKwkJICAgZWxzZQkJCQkJCQkgICAgICBcCisJCQkgICBNQV9QT1JUNF9JTyA9IG9sZCB8IDB4NDsJCQkgICAgICBcCisJICAgfQkJCQkJCQkJICAgICAgXAorICAgfSB3aGlsZSAoMCkKKworCisjZW5kaWYgLyogX19WODUwX1JURV9NQTFfQ0JfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS12ODUwL3J0ZV9tYl9hX3BjaS5oIGIvaW5jbHVkZS9hc20tdjg1MC9ydGVfbWJfYV9wY2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWFjMTg1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdjg1MC9ydGVfbWJfYV9wY2kuaApAQCAtMCwwICsxLDU2IEBACisvKgorICogaW5jbHVkZS9hc20tdjg1MC9tYl9hX3BjaS5oIC0tIFBDSSBzdXBwb3J0IGZvciBNaWRhcyBsYWIgUlRFLU1PVEhFUi1BIGJvYXJkCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMSAgTkVDIENvcnBvcmF0aW9uCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxICBNaWxlcyBCYWRlciA8bWlsZXNAZ251Lm9yZz4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzCisgKiBhcmNoaXZlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogV3JpdHRlbiBieSBNaWxlcyBCYWRlciA8bWlsZXNAZ251Lm9yZz4KKyAqLworCisjaWZuZGVmIF9fVjg1MF9NQl9BX1BDSV9IX18KKyNkZWZpbmUgX19WODUwX01CX0FfUENJX0hfXworCisKKyNkZWZpbmUgTUJfQV9QQ0lfTUVNX0FERFIJR0NTNV9BRERSCisjZGVmaW5lIE1CX0FfUENJX01FTV9TSVpFCShHQ1M1X1NJWkUgLyAyKQorI2RlZmluZSBNQl9BX1BDSV9JT19BRERSCShHQ1M1X0FERFIgKyBNQl9BX1BDSV9NRU1fU0laRSkKKyNkZWZpbmUgTUJfQV9QQ0lfSU9fU0laRQkoR0NTNV9TSVpFIC8gMikKKyNkZWZpbmUgTUJfQV9QQ0lfUkVHX0JBU0VfQUREUglHQ1M2X0FERFIKKworI2RlZmluZSBNQl9BX1BDSV9QQ0lDUl9BRERSCShNQl9BX1BDSV9SRUdfQkFTRV9BRERSICsgMHg0KQorI2RlZmluZSBNQl9BX1BDSV9QQ0lDUgkJKCoodm9sYXRpbGUgdTE2ICopTUJfQV9QQ0lfUENJQ1JfQUREUikKKyNkZWZpbmUgTUJfQV9QQ0lfUENJU1JfQUREUgkoTUJfQV9QQ0lfUkVHX0JBU0VfQUREUiArIDB4NikKKyNkZWZpbmUgTUJfQV9QQ0lfUENJU1IJCSgqKHZvbGF0aWxlIHUxNiAqKU1CX0FfUENJX1BDSVNSX0FERFIpCisjZGVmaW5lIE1CX0FfUENJX1BDSUxUUl9BRERSCShNQl9BX1BDSV9SRUdfQkFTRV9BRERSICsgMHhEKQorI2RlZmluZSBNQl9BX1BDSV9QQ0lMVFIJCSgqKHZvbGF0aWxlIHU4ICopTUJfQV9QQ0lfUENJTFRSX0FERFIpCisjZGVmaW5lIE1CX0FfUENJX1BDSUJBUjBfQUREUgkoTUJfQV9QQ0lfUkVHX0JBU0VfQUREUiArIDB4MTApCisjZGVmaW5lIE1CX0FfUENJX1BDSUJBUjAJKCoodm9sYXRpbGUgdTMyICopTUJfQV9QQ0lfUENJQkFSMF9BRERSKQorI2RlZmluZSBNQl9BX1BDSV9QQ0lCQVIxX0FERFIJKE1CX0FfUENJX1JFR19CQVNFX0FERFIgKyAweDE0KQorI2RlZmluZSBNQl9BX1BDSV9QQ0lCQVIxCSgqKHZvbGF0aWxlIHUzMiAqKU1CX0FfUENJX1BDSUJBUjFfQUREUikKKyNkZWZpbmUgTUJfQV9QQ0lfUENJQkFSMl9BRERSCShNQl9BX1BDSV9SRUdfQkFTRV9BRERSICsgMHgxOCkKKyNkZWZpbmUgTUJfQV9QQ0lfUENJQkFSMgkoKih2b2xhdGlsZSB1MzIgKilNQl9BX1BDSV9QQ0lCQVIyX0FERFIpCisjZGVmaW5lIE1CX0FfUENJX1ZFTkRPUl9JRF9BRERSCShNQl9BX1BDSV9SRUdfQkFTRV9BRERSICsgMHgyQykKKyNkZWZpbmUgTUJfQV9QQ0lfVkVORE9SX0lECSgqKHZvbGF0aWxlIHUxNiAqKU1CX0FfUENJX1ZFTkRPUl9JRF9BRERSKQorI2RlZmluZSBNQl9BX1BDSV9ERVZJQ0VfSURfQUREUgkoTUJfQV9QQ0lfUkVHX0JBU0VfQUREUiArIDB4MkUpCisjZGVmaW5lIE1CX0FfUENJX0RFVklDRV9JRAkoKih2b2xhdGlsZSB1MTYgKilNQl9BX1BDSV9ERVZJQ0VfSURfQUREUikKKyNkZWZpbmUgTUJfQV9QQ0lfRE1SUl9BRERSCShNQl9BX1BDSV9SRUdfQkFTRV9BRERSICsgMHg5QykKKyNkZWZpbmUgTUJfQV9QQ0lfRE1SUgkJKCoodm9sYXRpbGUgdTMyICopTUJfQV9QQ0lfRE1SUl9BRERSKQorI2RlZmluZSBNQl9BX1BDSV9ETUxCQU1fQUREUgkoTUJfQV9QQ0lfUkVHX0JBU0VfQUREUiArIDB4QTApCisjZGVmaW5lIE1CX0FfUENJX0RNTEJBTQkJKCoodm9sYXRpbGUgdTMyICopTUJfQV9QQ0lfRE1MQkFNX0FERFIpCisjZGVmaW5lIE1CX0FfUENJX0RNTEJBSV9BRERSCShNQl9BX1BDSV9SRUdfQkFTRV9BRERSICsgMHhBNCkKKyNkZWZpbmUgTUJfQV9QQ0lfRE1MQkFJCQkoKih2b2xhdGlsZSB1MzIgKilNQl9BX1BDSV9ETUxCQUlfQUREUikKKyNkZWZpbmUgTUJfQV9QQ0lfUENJUEJBTV9BRERSCShNQl9BX1BDSV9SRUdfQkFTRV9BRERSICsgMHhBOCkKKyNkZWZpbmUgTUJfQV9QQ0lfUENJUEJBTQkoKih2b2xhdGlsZSB1MzIgKilNQl9BX1BDSV9QQ0lQQkFNX0FERFIpCisvKiBgUENJIENvbmZpZ3VyYXRpb24gQWRkcmVzcyBSZWdpc3RlciBmb3IgRGlyZWN0IE1hc3RlciB0byBQQ0kgSU8vQ0ZHJyAgKi8KKyNkZWZpbmUgTUJfQV9QQ0lfRE1DRkdBX0FERFIJKE1CX0FfUENJX1JFR19CQVNFX0FERFIgKyAweEFDKQorI2RlZmluZSBNQl9BX1BDSV9ETUNGR0EJCSgqKHZvbGF0aWxlIHUzMiAqKU1CX0FfUENJX0RNQ0ZHQV9BRERSKQorLyogYFBDSSBQZXJtYW5lbnQgQ29uZmlndXJhdGlvbiBJRCBSZWdpc3RlcicgICovCisjZGVmaW5lIE1CX0FfUENJX1BDSUhJRFJfQUREUgkoTUJfQV9QQ0lfUkVHX0JBU0VfQUREUiArIDB4RjApCisjZGVmaW5lIE1CX0FfUENJX1BDSUhJRFIJKCoodm9sYXRpbGUgdTMyICopTUJfQV9QQ0lfUENJSElEUl9BRERSKQorCisKKyNlbmRpZiAvKiBfX1Y4NTBfTUJfQV9QQ0lfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS12ODUwL3J0ZV9tZTJfY2IuaCBiL2luY2x1ZGUvYXNtLXY4NTAvcnRlX21lMl9jYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5MjJjODUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS12ODUwL3J0ZV9tZTJfY2IuaApAQCAtMCwwICsxLDIwMiBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLXY4NTAvcnRlX21lMl9jYi5oIC0tIE1pZGFzIGxhYnMgUlRFLVY4NTBFL01FMi1DQiBib2FyZAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEsMDIsMDMgIE5FQyBDb3Jwb3JhdGlvbgorICogIENvcHlyaWdodCAoQykgMjAwMSwwMiwwMyAgTWlsZXMgQmFkZXIgPG1pbGVzQGdudS5vcmc+CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcworICogYXJjaGl2ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFdyaXR0ZW4gYnkgTWlsZXMgQmFkZXIgPG1pbGVzQGdudS5vcmc+CisgKi8KKworI2lmbmRlZiBfX1Y4NTBfUlRFX01FMl9DQl9IX18KKyNkZWZpbmUgX19WODUwX1JURV9NRTJfQ0JfSF9fCisKKyNpbmNsdWRlIDxhc20vcnRlX2NiLmg+CQkvKiBDb21tb24gZGVmcyBmb3IgTWlkYXMgUlRFLUNCIGJvYXJkcy4gICovCisKKworI2RlZmluZSBQTEFURk9STQkJInJ0ZS12ODUwZS9tZTItY2IiCisjZGVmaW5lIFBMQVRGT1JNX0xPTkcJCSJNaWRhcyBsYWIgUlRFLVY4NTBFL01FMi1DQiIKKworI2RlZmluZSBDUFVfQ0xPQ0tfRlJFUQkJMTUwMDAwMDAwIC8qIDE1ME1IeiAqLworI2RlZmluZSBGSVhFRF9CT0dPTUlQUwkJNTAKKworLyogMzJNQiBvZiBvbmJhcmQgU0RSQU0uICAqLworI2RlZmluZSBTRFJBTV9BRERSCQkweDAwODAwMDAwCisjZGVmaW5lIFNEUkFNX1NJWkUJCTB4MDIwMDAwMDAgLyogMzJNQiAqLworCisKKy8qIENQVSBhZGRyZXNzZXMgb2YgR0JVUyBtZW1vcnkgc3BhY2VzLiAgKi8KKyNkZWZpbmUgR0NTMF9BRERSCQkweDA0MDAwMDAwIC8qIEdDUzAgLSBDb21tb24gU1JBTSAoMk1CKSAqLworI2RlZmluZSBHQ1MwX1NJWkUJCTB4MDA4MDAwMDAgLyogICA4TUIgKi8KKyNkZWZpbmUgR0NTMV9BRERSCQkweDA0ODAwMDAwIC8qIEdDUzEgLSBGbGFzaCBST00gKDhNQikgKi8KKyNkZWZpbmUgR0NTMV9TSVpFCQkweDAwODAwMDAwIC8qICAgOE1CICovCisjZGVmaW5lIEdDUzJfQUREUgkJMHgwNzAwMDAwMCAvKiBHQ1MyIC0gSS9PIHJlZ2lzdGVycyAqLworI2RlZmluZSBHQ1MyX1NJWkUJCTB4MDA4MDAwMDAgLyogICA4TUIgKi8KKyNkZWZpbmUgR0NTNV9BRERSCQkweDA4MDAwMDAwIC8qIEdDUzUgLSBQQ0kgYnVzIHNwYWNlICovCisjZGVmaW5lIEdDUzVfU0laRQkJMHgwMjAwMDAwMCAvKiAgIDMyTUIgKi8KKyNkZWZpbmUgR0NTNl9BRERSCQkweDA3ODAwMDAwIC8qIEdDUzYgLSBQQ0kgY29udHJvbCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgR0NTNl9TSVpFCQkweDAwODAwMDAwIC8qICAgOE1CICovCisKKworLyogRm9yIDxhc20vcGFnZS5oPiAqLworI2RlZmluZSBQQUdFX09GRlNFVCAJCVNEUkFNX0FERFIKKworCisjaWZkZWYgQ09ORklHX1JPTV9LRVJORUwKKy8qIEtlcm5lbCBpcyBpbiBST00sIHN0YXJ0aW5nIGF0IGFkZHJlc3MgMC4gICovCisKKyNkZWZpbmUgSU5UVl9CQVNFCQkwCisjZGVmaW5lIFJPT1RfRlNfSU1BR0VfUlcJMAorCisjZWxzZSAvKiAhQ09ORklHX1JPTV9LRVJORUwgKi8KKy8qIFVzaW5nIFJBTS1rZXJuZWwuICBBc3N1bWUgc29tZSBzb3J0IG9mIGJvb3QtbG9hZGVyIGdvdCB1cyBsb2FkZWQgYXQKKyAgIGFkZHJlc3MgMC4gICovCisKKyNkZWZpbmUgSU5UVl9CQVNFCQkwCisjZGVmaW5lIFJPT1RfRlNfSU1BR0VfUlcJMQorCisjZW5kaWYgLyogQ09ORklHX1JPTV9LRVJORUwgKi8KKworCisvKiBTb21lIG1pc2MuIG9uLWJvYXJkIGRldmljZXMuICAqLworCisvKiBTZXZlbi1zZWdtZW50IExFRCBkaXNwbGF5IChmb3VyIGRpZ2l0cykuICAqLworI2RlZmluZSBMRURfQUREUihuKQkJKDB4MEZFMDIwMDAgKyAobikpCisjZGVmaW5lIExFRChuKQkJCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilMRURfQUREUihuKSkKKyNkZWZpbmUgTEVEX05VTV9ESUdJVFMJCTQKKworCisvKiBPbi1ib2FyZCBQSUMuICAqLworCisjZGVmaW5lIENCX1BJQ19CQVNFX0FERFIgCTB4MEZFMDQwMDAKKworI2RlZmluZSBDQl9QSUNfSU5UME1fQUREUiAJKENCX1BJQ19CQVNFX0FERFIgKyAweDAwKQorI2RlZmluZSBDQl9QSUNfSU5UME0gICAgICAJKCoodm9sYXRpbGUgdTE2ICopQ0JfUElDX0lOVDBNX0FERFIpCisjZGVmaW5lIENCX1BJQ19JTlQxTV9BRERSIAkoQ0JfUElDX0JBU0VfQUREUiArIDB4MTApCisjZGVmaW5lIENCX1BJQ19JTlQxTSAgICAgIAkoKih2b2xhdGlsZSB1MTYgKilDQl9QSUNfSU5UMU1fQUREUikKKyNkZWZpbmUgQ0JfUElDX0lOVFJfQUREUiAgCShDQl9QSUNfQkFTRV9BRERSICsgMHgyMCkKKyNkZWZpbmUgQ0JfUElDX0lOVFIgICAgICAgCSgqKHZvbGF0aWxlIHUxNiAqKUNCX1BJQ19JTlRSX0FERFIpCisjZGVmaW5lIENCX1BJQ19JTlRFTl9BRERSIAkoQ0JfUElDX0JBU0VfQUREUiArIDB4MzApCisjZGVmaW5lIENCX1BJQ19JTlRFTiAgICAgIAkoKih2b2xhdGlsZSB1MTYgKilDQl9QSUNfSU5URU5fQUREUikKKworI2RlZmluZSBDQl9QSUNfSU5UMEVOICAgICAgICAJMHgwMDAxCisjZGVmaW5lIENCX1BJQ19JTlQxRU4gICAgICAgIAkweDAwMDIKKyNkZWZpbmUgQ0JfUElDX0lOVDBTRUwgICAgICAgCTB4MDA4MAorCisvKiBUaGUgUElDIGludGVycnVwdHMgdGhlbXNlbHZlcy4gICovCisjZGVmaW5lIENCX1BJQ19CQVNFX0lSUQkJTlVNX0NQVV9JUlFTCisjZGVmaW5lIElSUV9DQl9QSUNfTlVNCQkxMAorCisvKiBTb21lIHNwZWNpZmljIENCX1BJQyBpbnRlcnJ1cHRzLiAqLworI2RlZmluZSBJUlFfQ0JfRVhUVE0wCQkoQ0JfUElDX0JBU0VfSVJRICsgMCkKKyNkZWZpbmUgSVJRX0NCX0VYVFNJTwkJKENCX1BJQ19CQVNFX0lSUSArIDEpCisjZGVmaW5lIElSUV9DQl9UT1ZFUgkJKENCX1BJQ19CQVNFX0lSUSArIDIpCisjZGVmaW5lIElSUV9DQl9HSU5UMAkJKENCX1BJQ19CQVNFX0lSUSArIDMpCisjZGVmaW5lIElSUV9DQl9VU0IJCShDQl9QSUNfQkFTRV9JUlEgKyA0KQorI2RlZmluZSBJUlFfQ0JfTEFOQwkJKENCX1BJQ19CQVNFX0lSUSArIDUpCisjZGVmaW5lIElSUV9DQl9VU0JfVkJVU19PTgkoQ0JfUElDX0JBU0VfSVJRICsgNikKKyNkZWZpbmUgSVJRX0NCX1VTQl9WQlVTX09GRgkoQ0JfUElDX0JBU0VfSVJRICsgNykKKyNkZWZpbmUgSVJRX0NCX0VYVFRNMQkJKENCX1BJQ19CQVNFX0lSUSArIDgpCisjZGVmaW5lIElSUV9DQl9FWFRUTTIJCShDQl9QSUNfQkFTRV9JUlEgKyA5KQorCisvKiBUaGUgR0JVUyBHSU5UMSAtIEdJTlQzIChub3RlLCBub3QgR0lOVDAhKSBpbnRlcnJ1cHRzIGFyZSBjb25uZWN0ZWQgdG8KKyAgIHRoZSBJTlRQNjUgLSBJTlRQNjcgcGlucyBvbiB0aGUgQ1BVLiAgVGhlc2UgYXJlIHNoYXJlZCBhbW9uZyB0aGUgR0JVUworICAgaW50ZXJydXB0cy4gICovCisjZGVmaW5lIElSUV9HSU5UKG4pCQlJUlFfSU5UUCgobikgKyA5KSAgLyogMCBpcyB1bnVzZWQhICovCisjZGVmaW5lIElSUV9HSU5UX05VTQkJNAkJICAgLyogMCBpcyB1bnVzZWQhICovCisKKy8qIFRoZSBzaGFyZWQgaW50ZXJydXB0IGxpbmUgZnJvbSB0aGUgUElDIGlzIGNvbm5lY3RlZCB0byBDUFUgcGluIElOVFAyMy4gICovCisjZGVmaW5lIElSUV9DQl9QSUMJCUlSUV9JTlRQKDQpIC8qIFAyMyAqLworCisvKiBVc2VkIGJ5IDxhc20vcnRlX2NiLmg+IHRvIGRlcml2ZSBOVU1fTUFDSF9JUlFTLiAgKi8KKyNkZWZpbmUgTlVNX1JURV9DQl9JUlFTCQkoTlVNX0NQVV9JUlFTICsgSVJRX0NCX1BJQ19OVU0pCisKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK3N0cnVjdCBjYl9waWNfaXJxX2luaXQgeworCWNvbnN0IGNoYXIgKm5hbWU7CS8qIG5hbWUgb2YgaW50ZXJydXB0IHR5cGUgKi8KKworCS8qIFJhbmdlIG9mIGtlcm5lbCBpcnEgbnVtYmVycyBmb3IgdGhpcyB0eXBlOgorCSAgIEJBU0UsIEJBU0UrSU5URVJWQUwsIC4uLiwgQkFTRStJTlRFUlZBTCpOVU0gICovCisJdW5zaWduZWQgYmFzZSwgbnVtLCBpbnRlcnZhbDsKKworCXVuc2lnbmVkIHByaW9yaXR5OwkvKiBpbnRlcnJ1cHQgcHJpb3JpdHkgdG8gYXNzaWduICovCit9Oworc3RydWN0IGh3X2ludGVycnVwdF90eXBlOwkvKiBmd2QgZGVjbCAqLworCisvKiBFbmFibGUgaW50ZXJydXB0IGhhbmRsaW5nIGZvciBpbnRlcnJ1cHQgSVJRLiAgKi8KK2V4dGVybiB2b2lkIGNiX3BpY19lbmFibGVfaXJxICh1bnNpZ25lZCBpcnEpOworLyogRGlzYWJsZSBpbnRlcnJ1cHQgaGFuZGxpbmcgZm9yIGludGVycnVwdCBJUlEuICBOb3RlIHRoYXQgYW55IGludGVycnVwdHMKKyAgIHJlY2VpdmVkIHdoaWxlIGRpc2FibGVkIHdpbGwgYmUgZGVsaXZlcmVkIG9uY2UgdGhlIGludGVycnVwdCBpcyBlbmFibGVkCisgICBhZ2FpbiwgdW5sZXNzIHRoZXkgYXJlIGV4cGxpY2l0bHkgY2xlYXJlZCB1c2luZyBgY2JfcGljX2NsZWFyX3BlbmRpbmdfaXJxJy4gICovCitleHRlcm4gdm9pZCBjYl9waWNfZGlzYWJsZV9pcnEgKHVuc2lnbmVkIGlycSk7CisvKiBJbml0aWFsaXplIEhXX0lSUV9UWVBFUyBmb3IgUElDIGlycXMgZGVzY3JpYmVkIGluIGFycmF5IElOSVRTICh3aGljaCBpcworICAgdGVybWluYXRlZCBieSBhbiBlbnRyeSB3aXRoIHRoZSBuYW1lIGZpZWxkID09IDApLiAgKi8KK2V4dGVybiB2b2lkIGNiX3BpY19pbml0X2lycV90eXBlcyAoc3RydWN0IGNiX3BpY19pcnFfaW5pdCAqaW5pdHMsCisJCQkJICAgc3RydWN0IGh3X2ludGVycnVwdF90eXBlICpod19pcnFfdHlwZXMpOworLyogSW5pdGlhbGl6ZSBQSUMgaW50ZXJydXB0cy4gICovCitleHRlcm4gdm9pZCBjYl9waWNfaW5pdF9pcnFzICh2b2lkKTsKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworCisvKiBUTDE2QzU1MEMgb24gYm9hcmQgVUFSVCBzZWUgYWxzbyBhc20vc2VyaWFsLmggKi8KKyNkZWZpbmUgQ0JfVUFSVF9CQVNFICAgIAkweDBGRTA4MDAwCisjZGVmaW5lIENCX1VBUlRfUkVHX0dBUCAJMHgxMAorI2RlZmluZSBDQl9VQVJUX0NMT0NLICAgCTB4MTYwMDAwMDAKKworLyogQ29tcGFjdEZsYXNoIHNldHRpbmcgKi8KKyNkZWZpbmUgQ0JfQ0ZfQkFTRSAgICAgCQkweDBGRTBDMDAwCisjZGVmaW5lIENCX0NGX0NDUl9BRERSIAkJKENCX0NGX0JBU0UrMHgyMDApCisjZGVmaW5lIENCX0NGX0NDUiAgICAgIAkJKCoodm9sYXRpbGUgdTggKilDQl9DRl9DQ1JfQUREUikKKyNkZWZpbmUgQ0JfQ0ZfUkVHMF9BRERSCQkoQ0JfQ0ZfQkFTRSsweDEwMDApCisjZGVmaW5lIENCX0NGX1JFRzAgICAgIAkJKCoodm9sYXRpbGUgdTE2ICopQ0JfQ0ZfUkVHMF9BRERSKQorI2RlZmluZSBDQl9DRl9TVFMwX0FERFIJCShDQl9DRl9CQVNFKzB4MTAwNCkKKyNkZWZpbmUgQ0JfQ0ZfU1RTMCAgICAgCQkoKih2b2xhdGlsZSB1MTYgKilDQl9DRl9TVFMwX0FERFIpCisjZGVmaW5lIENCX1BDQVRBX0JBU0UgIAkJKENCX0NGX0JBU0UrMHg4MDApCisjZGVmaW5lIENCX0lERV9CQVNFICAgIAkJKENCX0NGX0JBU0UrMHg5RjApCisjZGVmaW5lIENCX0lERV9DVFJMICAgIAkJKENCX0NGX0JBU0UrMHhCRjYpCisjZGVmaW5lIENCX0lERV9SRUdfT0ZGUwkJMHgxCisKKworLyogU01TQyBMQU45MUMxMTEgc2V0dGluZyAqLworI2lmIGRlZmluZWQoQ09ORklHX1NNQzkxMTExKQorI2RlZmluZSBDQl9MQU5DX0JBU0UgCQkweDBGRTEwMzAwCisjZGVmaW5lIENPTkZJR19TTUMxNkJJVE9OTFkKKyNkZWZpbmUgRVRIMF9BRERSIAkJQ0JfTEFOQ19CQVNFCisjZGVmaW5lIEVUSDBfSVJRIAkJSVJRX0NCX0xBTkMKKyNlbmRpZiAvKiBDT05GSUdfU01DMTZCSVRPTkxZICovCisKKworI3VuZGVmIFY4NTBFX1VBUlRfUFJFX0NPTkZJR1VSRQorI2RlZmluZSBWODUwRV9VQVJUX1BSRV9DT05GSUdVUkUJcnRlX21lMl9jYl91YXJ0X3ByZV9jb25maWd1cmUKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitleHRlcm4gdm9pZCBydGVfbWUyX2NiX3VhcnRfcHJlX2NvbmZpZ3VyZSAodW5zaWduZWQgY2hhbiwKKwkJCQkJICAgdW5zaWduZWQgY2ZsYWdzLCB1bnNpZ25lZCBiYXVkKTsKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworLyogVGhpcyBib2FyZCBzdXBwb3J0cyBSVFMvQ1RTIGZvciB0aGUgb24tY2hpcCBVQVJULCBidXQgb25seSBmb3IgY2hhbm5lbCAwLiAqLworCisvKiBDVFMgZm9yIFVBUlQgY2hhbm5lbCAwIGlzIHBpbiBQMjIgKGJpdCAyIG9mIHBvcnQgMikuICAqLworI2RlZmluZSBWODUwRV9VQVJUX0NUUyhjaGFuKQkoKGNoYW4pID09IDAgPyAhKE1FMl9QT1JUMl9JTyAmIDB4NCkgOiAxKQorLyogUlRTIGZvciBVQVJUIGNoYW5uZWwgMCBpcyBwaW4gUDIxIChiaXQgMSBvZiBwb3J0IDIpLiAgKi8KKyNkZWZpbmUgVjg1MEVfVUFSVF9TRVRfUlRTKGNoYW4sIHZhbCkJCQkJCSAgICAgIFwKKyAgIGRvIHsJCQkJCQkJCQkgICAgICBcCisJICAgaWYgKGNoYW4gPT0gMCkgewkJCQkJCSAgICAgIFwKKwkJICAgdW5zaWduZWQgb2xkID0gTUUyX1BPUlQyX0lPOyAJCQkgICAgICBcCisJCSAgIGlmICh2YWwpCQkJCQkJICAgICAgXAorCQkJICAgTUUyX1BPUlQyX0lPID0gb2xkICYgfjB4MjsJCQkgICAgICBcCisJCSAgIGVsc2UJCQkJCQkJICAgICAgXAorCQkJICAgTUUyX1BPUlQyX0lPID0gb2xkIHwgMHgyOwkJCSAgICAgIFwKKwkgICB9CQkJCQkJCQkgICAgICBcCisgICB9IHdoaWxlICgwKQorCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitleHRlcm4gdm9pZCBydGVfbWUyX2NiX2luaXRfaXJxcyAodm9pZCk7CisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisKKyNlbmRpZiAvKiBfX1Y4NTBfUlRFX01FMl9DQl9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXY4NTAvcnRlX25iODVlX2NiLmggYi9pbmNsdWRlL2FzbS12ODUwL3J0ZV9uYjg1ZV9jYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1NjU5MWMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS12ODUwL3J0ZV9uYjg1ZV9jYi5oCkBAIC0wLDAgKzEsMTExIEBACisvKgorICogaW5jbHVkZS9hc20tdjg1MC9ydGVfbmI4NWVfY2IuaCAtLSBNaWRhcyBsYWJzIFJURS1WODUwL05CODVFLUNCIGJvYXJkCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMSwwMiwwMyAgTkVDIEVsZWN0cm9uaWNzIENvcnBvcmF0aW9uCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxLDAyLDAzICBNaWxlcyBCYWRlciA8bWlsZXNAZ251Lm9yZz4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzCisgKiBhcmNoaXZlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogV3JpdHRlbiBieSBNaWxlcyBCYWRlciA8bWlsZXNAZ251Lm9yZz4KKyAqLworCisjaWZuZGVmIF9fVjg1MF9SVEVfTkI4NUVfQ0JfSF9fCisjZGVmaW5lIF9fVjg1MF9SVEVfTkI4NUVfQ0JfSF9fCisKKyNpbmNsdWRlIDxhc20vcnRlX2NiLmg+CQkvKiBDb21tb24gZGVmcyBmb3IgTWlkYXMgUlRFLUNCIGJvYXJkcy4gICovCisKKworI2RlZmluZSBQTEFURk9STQkJInJ0ZS12ODUwZS9uYjg1ZS1jYiIKKyNkZWZpbmUgUExBVEZPUk1fTE9ORwkJIk1pZGFzIGxhYiBSVEUtVjg1MEUvTkI4NUUtQ0IiCisKKyNkZWZpbmUgQ1BVX0NMT0NLX0ZSRVEJCTUwMDAwMDAwIC8qIDUwTUh6ICovCisKKy8qIDFNQiBvZiBvbmJvYXJkIFNSQU0uICBOb3RlIHRoYXQgdGhlIG1vbml0b3IgUk9NIHVzZXMgcGFydHMgb2YgdGhpcworICAgZm9yIGl0cyBvd24gcHVycG9zZXMsIHNvIGNhcmUgbXVzdCBiZSB0YWtlbi4gICovCisjZGVmaW5lIFNSQU1fQUREUgkJMHgwM0MwMDAwMAorI2RlZmluZSBTUkFNX1NJWkUJCTB4MDAxMDAwMDAgLyogMU1CICovCisKKy8qIDE2TUIgb2Ygb25iYXJkIFNEUkFNLiAgKi8KKyNkZWZpbmUgU0RSQU1fQUREUgkJMHgwMTAwMDAwMAorI2RlZmluZSBTRFJBTV9TSVpFCQkweDAxMDAwMDAwIC8qIDE2TUIgKi8KKworCisvKiBDUFUgYWRkcmVzc2VzIG9mIEdCVVMgbWVtb3J5IHNwYWNlcy4gICovCisjZGVmaW5lIEdDUzBfQUREUgkJMHgwMDQwMDAwMCAvKiBHQ1MwIC0gQ29tbW9uIFNSQU0gKDJNQikgKi8KKyNkZWZpbmUgR0NTMF9TSVpFCQkweDAwNDAwMDAwIC8qICAgNE1CICovCisjZGVmaW5lIEdDUzFfQUREUgkJMHgwMjAwMDAwMCAvKiBHQ1MxIC0gRmxhc2ggUk9NICg4TUIpICovCisjZGVmaW5lIEdDUzFfU0laRQkJMHgwMDgwMDAwMCAvKiAgIDhNQiAqLworI2RlZmluZSBHQ1MyX0FERFIJCTB4MDM5MDAwMDAgLyogR0NTMiAtIEkvTyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgR0NTMl9TSVpFCQkweDAwMDgwMDAwIC8qICAgNTEyS0IgKi8KKyNkZWZpbmUgR0NTM19BRERSCQkweDAyODAwMDAwIC8qIEdDUzMgLSBFWFQtYnVzOiBtZW1vcnkgc3BhY2UgKi8KKyNkZWZpbmUgR0NTM19TSVpFCQkweDAwODAwMDAwIC8qICAgOE1CICovCisjZGVmaW5lIEdDUzRfQUREUgkJMHgwM0EwMDAwMCAvKiBHQ1M0IC0gRVhULWJ1czogSS9PIHNwYWNlICovCisjZGVmaW5lIEdDUzRfU0laRQkJMHgwMDIwMDAwMCAvKiAgIDJNQiAqLworI2RlZmluZSBHQ1M1X0FERFIJCTB4MDA4MDAwMDAgLyogR0NTNSAtIFBDSSBidXMgc3BhY2UgKi8KKyNkZWZpbmUgR0NTNV9TSVpFCQkweDAwODAwMDAwIC8qICAgOE1CICovCisjZGVmaW5lIEdDUzZfQUREUgkJMHgwMzk4MDAwMCAvKiBHQ1M2IC0gUENJIGNvbnRyb2wgcmVnaXN0ZXJzICovCisjZGVmaW5lIEdDUzZfU0laRQkJMHgwMDAxMDAwMCAvKiAgIDY0S0IgKi8KKworCisvKiBUaGUgR0JVUyBHSU5UMCAtIEdJTlQzIGludGVycnVwdHMgYXJlIGNvbm5lY3RlZCB0byBDUFUgaW50ZXJydXB0cyAxMC0xMi4KKyAgIFRoZXNlIGFyZSBzaGFyZWQgYW1vbmcgdGhlIEdCVVMgaW50ZXJydXB0cy4gICovCisjZGVmaW5lIElSUV9HSU5UKG4pCQkoMTAgKyAobikpCisjZGVmaW5lIElSUV9HSU5UX05VTQkJMworCisvKiBVc2VkIGJ5IDxhc20vcnRlX2NiLmg+IHRvIGRlcml2ZSBOVU1fTUFDSF9JUlFTLiAgKi8KKyNkZWZpbmUgTlVNX1JURV9DQl9JUlFTCQlOVU1fQ1BVX0lSUVMKKworCisjaWZkZWYgQ09ORklHX1JPTV9LRVJORUwKKy8qIEtlcm5lbCBpcyBpbiBST00sIHN0YXJ0aW5nIGF0IGFkZHJlc3MgMC4gICovCisKKyNkZWZpbmUgSU5UVl9CQVNFCTAKKworI2Vsc2UgLyogIUNPTkZJR19ST01fS0VSTkVMICovCisvKiBXZSdyZSB1c2luZyB0aGUgUk9NIG1vbml0b3IuICAqLworCisvKiBUaGUgY2hpcCdzIHJlYWwgaW50ZXJydXB0IHZlY3RvcnMgYXJlIGluIFJPTSwgYnV0IHRoZXkganVtcCB0byBhCisgICBzZWNvbmRhcnkgaW50ZXJydXB0IHZlY3RvciB0YWJsZSBpbiBSQU0uICAqLworI2RlZmluZSBJTlRWX0JBU0UJCTB4MDNDRjgwMDAKKworLyogU2NyYXRjaCBtZW1vcnkgdXNlZCBieSB0aGUgUk9NIG1vbml0b3IsIHdoaWNoIHNob3VsZG4ndCBiZSB1c2VkIGJ5CisgICBsaW51eCAoZXhjZXB0IGZvciB0aGUgYWx0ZXJuYXRlIGludGVycnVwdCB2ZWN0b3IgYXJlYSwgZGVmaW5lZAorICAgYWJvdmUpLiAgKi8KKyNkZWZpbmUgTU9OX1NDUkFUQ0hfQUREUgkweDAzQ0U4MDAwCisjZGVmaW5lIE1PTl9TQ1JBVENIX1NJWkUJMHgwMDAxODAwMCAvKiA5NktCICovCisKKyNlbmRpZiAvKiBDT05GSUdfUk9NX0tFUk5FTCAqLworCisKKy8qIFNvbWUgbWlzYy4gb24tYm9hcmQgZGV2aWNlcy4gICovCisKKy8qIFNldmVuLXNlZ21lbnQgTEVEIGRpc3BsYXkgKHR3byBkaWdpdHMpLiAgV3JpdGUtb25seS4gICovCisjZGVmaW5lIExFRF9BRERSKG4pCSgweDAzODAyMDAwICsgKG4pKQorI2RlZmluZSBMRUQobikJCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilMRURfQUREUihuKSkKKyNkZWZpbmUgTEVEX05VTV9ESUdJVFMJNAorCisKKy8qIE92ZXJyaWRlIHRoZSBiYXNpYyBURUcgVUFSVCBwcmUtaW5pdGlhbGl6YXRpb24gc28gdGhhdCB3ZSBjYW4KKyAgIGluaXRpYWxpemUgZXh0cmEgc3R1ZmYuICAqLworI3VuZGVmIFY4NTBFX1VBUlRfUFJFX0NPTkZJR1VSRQkvKiBzaG91bGQgYmUgZGVmaW5lZCBieSA8YXNtL3RlZy5oPiAqLworI2RlZmluZSBWODUwRV9VQVJUX1BSRV9DT05GSUdVUkUJcnRlX25iODVlX2NiX3VhcnRfcHJlX2NvbmZpZ3VyZQorI2lmbmRlZiBfX0FTU0VNQkxZX18KK2V4dGVybiB2b2lkIHJ0ZV9uYjg1ZV9jYl91YXJ0X3ByZV9jb25maWd1cmUgKHVuc2lnbmVkIGNoYW4sCisJCQkJCSAgICAgdW5zaWduZWQgY2ZsYWdzLCB1bnNpZ25lZCBiYXVkKTsKKyNlbmRpZgorCisvKiBUaGlzIGJvYXJkIHN1cHBvcnRzIFJUUy9DVFMgZm9yIHRoZSBvbi1jaGlwIFVBUlQuICovCisKKy8qIENUUyBpcyBwaW4gUDAwLiAgKi8KKyNkZWZpbmUgVjg1MEVfVUFSVF9DVFMoY2hhbikJKCEgKFRFR19QT1JUMF9JTyAmIDB4MSkpCisvKiBSVFMgaXMgcGluIFAwMi4gICovCisjZGVmaW5lIFY4NTBFX1VBUlRfU0VUX1JUUyhjaGFuLCB2YWwpCQkJCQkgICAgICBcCisgICBkbyB7CQkJCQkJCQkJICAgICAgXAorCSAgIHVuc2lnbmVkIG9sZCA9IFRFR19QT1JUMF9JTzsJCQkJCSAgICAgIFwKKwkgICBURUdfUE9SVDBfSU8gPSB2YWwgPyAob2xkICYgfjB4NCkgOiAob2xkIHwgMHg0KTsJCSAgICAgIFwKKyAgIH0gd2hpbGUgKDApCisKKworI2VuZGlmIC8qIF9fVjg1MF9SVEVfTkI4NUVfQ0JfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS12ODUwL3NjYXR0ZXJsaXN0LmggYi9pbmNsdWRlL2FzbS12ODUwL3NjYXR0ZXJsaXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYxY2JhNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXY4NTAvc2NhdHRlcmxpc3QuaApAQCAtMCwwICsxLDI2IEBACisvKgorICogaW5jbHVkZS9hc20tdjg1MC9zY2F0dGVybGlzdC5oCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMSwwMiAgTkVDIENvcnBvcmF0aW9uCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxLDAyICBNaWxlcyBCYWRlciA8bWlsZXNAZ251Lm9yZz4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzCisgKiBhcmNoaXZlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogV3JpdHRlbiBieSBNaWxlcyBCYWRlciA8bWlsZXNAZ251Lm9yZz4KKyAqLworCisjaWZuZGVmIF9fVjg1MF9TQ0FUVEVSTElTVF9IX18KKyNkZWZpbmUgX19WODUwX1NDQVRURVJMSVNUX0hfXworCitzdHJ1Y3Qgc2NhdHRlcmxpc3QgeworCXN0cnVjdCBwYWdlCSpwYWdlOworCXVuc2lnbmVkCW9mZnNldDsKKwlkbWFfYWRkcl90CWRtYV9hZGRyZXNzOworCXVuc2lnbmVkCWxlbmd0aDsKK307CisKKyNkZWZpbmUgSVNBX0RNQV9USFJFU0hPTEQJKH4wVUwpCisKKyNlbmRpZiAvKiBfX1Y4NTBfU0NBVFRFUkxJU1RfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS12ODUwL3NlY3Rpb25zLmggYi9pbmNsdWRlL2FzbS12ODUwL3NlY3Rpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTAyMzgyNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXY4NTAvc2VjdGlvbnMuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19WODUwX1NFQ1RJT05TX0hfXworI2RlZmluZSBfX1Y4NTBfU0VDVElPTlNfSF9fCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zZWN0aW9ucy5oPgorCisjZW5kaWYgLyogX19WODUwX1NFQ1RJT05TX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdjg1MC9zZWdtZW50LmggYi9pbmNsdWRlL2FzbS12ODUwL3NlZ21lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTJiMTVkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdjg1MC9zZWdtZW50LmgKQEAgLTAsMCArMSwzNiBAQAorI2lmbmRlZiBfX1Y4NTBfU0VHTUVOVF9IX18KKyNkZWZpbmUgX19WODUwX1NFR01FTlRfSF9fCisKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKwordHlwZWRlZiB1bnNpZ25lZCBsb25nIG1tX3NlZ21lbnRfdDsJLyogZG9tYWluIHJlZ2lzdGVyICovCisKKyNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCisKKworI2RlZmluZSBfX0tFUk5FTF9DUwkweDAKKyNkZWZpbmUgX19LRVJORUxfRFMJMHgwCisKKyNkZWZpbmUgX19VU0VSX0NTCTB4MQorI2RlZmluZSBfX1VTRVJfRFMJMHgxCisKKyNkZWZpbmUgS0VSTkVMX0RTCV9fS0VSTkVMX0RTCisjZGVmaW5lIEtFUk5FTF9DUwlfX0tFUk5FTF9DUworI2RlZmluZSBVU0VSX0RTCQlfX1VTRVJfRFMKKyNkZWZpbmUgVVNFUl9DUwkJX19VU0VSX0NTCisKKyNkZWZpbmUgc2VnbWVudF9lcShhLGIpCSgoYSkgPT0gKGIpKQorCisjZGVmaW5lIGdldF9kcygpCShLRVJORUxfRFMpCisjZGVmaW5lIGdldF9mcygpCShVU0VSX0RTKQorCisjZGVmaW5lIHNldF9mcyhzZWcpCSgodm9pZCkoc2VnKSkKKworCisjZGVmaW5lIGNvcHlfc2VnbWVudHModGFzaywgbW0pCSgodm9pZCkoKHZvaWQpKHRhc2spLCAobW0pKSkKKyNkZWZpbmUgcmVsZWFzZV9zZWdtZW50cyhtbSkJKCh2b2lkKShtbSkpCisjZGVmaW5lIGZvcmdldF9zZWdtZW50cygpCSgodm9pZCkwKQorCisKKyNlbmRpZiAvKiBfX1Y4NTBfU0VHTUVOVF9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXY4NTAvc2VtYXBob3JlLmggYi9pbmNsdWRlL2FzbS12ODUwL3NlbWFwaG9yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1MTQwNjIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS12ODUwL3NlbWFwaG9yZS5oCkBAIC0wLDAgKzEsODggQEAKKyNpZm5kZWYgX19WODUwX1NFTUFQSE9SRV9IX18KKyNkZWZpbmUgX19WODUwX1NFTUFQSE9SRV9IX18KKworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgorCisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorCitzdHJ1Y3Qgc2VtYXBob3JlIHsKKwlhdG9taWNfdCBjb3VudDsKKwlpbnQgc2xlZXBlcnM7CisJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKK307CisKKyNkZWZpbmUgX19TRU1BUEhPUkVfSU5JVElBTElaRVIobmFtZSxjb3VudCkJCQkJICAgICAgXAorCXsgQVRPTUlDX0lOSVQgKGNvdW50KSwgMCwJCQkJCSAgICAgIFwKKwkgIF9fV0FJVF9RVUVVRV9IRUFEX0lOSVRJQUxJWkVSICgobmFtZSkud2FpdCkgfQorCisjZGVmaW5lIF9fTVVURVhfSU5JVElBTElaRVIobmFtZSkJCQkJCSAgICAgIFwKKwlfX1NFTUFQSE9SRV9JTklUSUFMSVpFUiAobmFtZSwxKQorCisjZGVmaW5lIF9fREVDTEFSRV9TRU1BUEhPUkVfR0VORVJJQyhuYW1lLGNvdW50KQlcCisJc3RydWN0IHNlbWFwaG9yZSBuYW1lID0gX19TRU1BUEhPUkVfSU5JVElBTElaRVIgKG5hbWUsY291bnQpCisKKyNkZWZpbmUgREVDTEFSRV9NVVRFWChuYW1lKQkJX19ERUNMQVJFX1NFTUFQSE9SRV9HRU5FUklDIChuYW1lLDEpCisjZGVmaW5lIERFQ0xBUkVfTVVURVhfTE9DS0VEKG5hbWUpCV9fREVDTEFSRV9TRU1BUEhPUkVfR0VORVJJQyAobmFtZSwwKQorCitleHRlcm4gaW5saW5lIHZvaWQgc2VtYV9pbml0IChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0sIGludCB2YWwpCit7CisJKnNlbSA9IChzdHJ1Y3Qgc2VtYXBob3JlKV9fU0VNQVBIT1JFX0lOSVRJQUxJWkVSKCgqc2VtKSx2YWwpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9NVVRFWCAoc3RydWN0IHNlbWFwaG9yZSAqc2VtKQoreworCXNlbWFfaW5pdCAoc2VtLCAxKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGluaXRfTVVURVhfTE9DS0VEIChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCit7CisJc2VtYV9pbml0IChzZW0sIDApOworfQorCisvKgorICogc3BlY2lhbCByZWdpc3RlciBjYWxsaW5nIGNvbnZlbnRpb24KKyAqLworYXNtbGlua2FnZSB2b2lkIF9fZG93bl9mYWlsZWQgKHZvaWQpOworYXNtbGlua2FnZSBpbnQgIF9fZG93bl9pbnRlcnJ1cHRpYmxlX2ZhaWxlZCAodm9pZCk7Cithc21saW5rYWdlIGludCAgX19kb3duX3RyeWxvY2tfZmFpbGVkICh2b2lkKTsKK2FzbWxpbmthZ2Ugdm9pZCBfX3VwX3dha2V1cCAodm9pZCk7CisKK2V4dGVybiB2b2lkIF9fZG93biAoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSk7CitleHRlcm4gaW50ICBfX2Rvd25faW50ZXJydXB0aWJsZSAoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSk7CitleHRlcm4gaW50ICBfX2Rvd25fdHJ5bG9jayAoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSk7CitleHRlcm4gdm9pZCBfX3VwIChzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKTsKKworZXh0ZXJuIGlubGluZSB2b2lkIGRvd24gKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCit7CisJbWlnaHRfc2xlZXAoKTsKKwlpZiAoYXRvbWljX2RlY19yZXR1cm4gKCZzZW0tPmNvdW50KSA8IDApCisJCV9fZG93biAoc2VtKTsKK30KKworZXh0ZXJuIGlubGluZSBpbnQgZG93bl9pbnRlcnJ1cHRpYmxlIChzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQoreworCWludCByZXQgPSAwOworCW1pZ2h0X3NsZWVwKCk7CisJaWYgKGF0b21pY19kZWNfcmV0dXJuICgmc2VtLT5jb3VudCkgPCAwKQorCQlyZXQgPSBfX2Rvd25faW50ZXJydXB0aWJsZSAoc2VtKTsKKwlyZXR1cm4gcmV0OworfQorCitleHRlcm4gaW5saW5lIGludCBkb3duX3RyeWxvY2sgKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKK3sKKwlpbnQgcmV0ID0gMDsKKwlpZiAoYXRvbWljX2RlY19yZXR1cm4gKCZzZW0tPmNvdW50KSA8IDApCisJCXJldCA9IF9fZG93bl90cnlsb2NrIChzZW0pOworCXJldHVybiByZXQ7Cit9CisKK2V4dGVybiBpbmxpbmUgdm9pZCB1cCAoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKK3sKKwlpZiAoYXRvbWljX2luY19yZXR1cm4gKCZzZW0tPmNvdW50KSA8PSAwKQorCQlfX3VwIChzZW0pOworfQorCisjZW5kaWYgLyogX19WODUwX1NFTUFQSE9SRV9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXY4NTAvc2VtYnVmLmggYi9pbmNsdWRlL2FzbS12ODUwL3NlbWJ1Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2MjIyMzEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS12ODUwL3NlbWJ1Zi5oCkBAIC0wLDAgKzEsMjUgQEAKKyNpZm5kZWYgX19WODUwX1NFTUJVRl9IX18KKyNkZWZpbmUgX19WODUwX1NFTUJVRl9IX18KKworLyogCisgKiBUaGUgc2VtaWQ2NF9kcyBzdHJ1Y3R1cmUgZm9yIHY4NTAgYXJjaGl0ZWN0dXJlLgorICogTm90ZSBleHRyYSBwYWRkaW5nIGJlY2F1c2UgdGhpcyBzdHJ1Y3R1cmUgaXMgcGFzc2VkIGJhY2sgYW5kIGZvcnRoCisgKiBiZXR3ZWVuIGtlcm5lbCBhbmQgdXNlciBzcGFjZS4KKyAqCisgKiBQYWQgc3BhY2UgaXMgbGVmdCBmb3I6CisgKiAtIDY0LWJpdCB0aW1lX3QgdG8gc29sdmUgeTIwMzggcHJvYmxlbQorICogLSAyIG1pc2NlbGxhbmVvdXMgMzItYml0IHZhbHVlcworICovCisKK3N0cnVjdCBzZW1pZDY0X2RzIHsKKwlzdHJ1Y3QgaXBjNjRfcGVybSBzZW1fcGVybTsJCS8qIHBlcm1pc3Npb25zIC4uIHNlZSBpcGMuaCAqLworCV9fa2VybmVsX3RpbWVfdAlzZW1fb3RpbWU7CQkvKiBsYXN0IHNlbW9wIHRpbWUgKi8KKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkMTsKKwlfX2tlcm5lbF90aW1lX3QJc2VtX2N0aW1lOwkJLyogbGFzdCBjaGFuZ2UgdGltZSAqLworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQyOworCXVuc2lnbmVkIGxvbmcJc2VtX25zZW1zOwkJLyogbm8uIG9mIHNlbWFwaG9yZXMgaW4gYXJyYXkgKi8KKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkMzsKKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkNDsKK307CisKKyNlbmRpZiAvKiBfX1Y4NTBfU0VNQlVGX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdjg1MC9zZXJpYWwuaCBiL2luY2x1ZGUvYXNtLXY4NTAvc2VyaWFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGMyYTYwOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXY4NTAvc2VyaWFsLmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBieSBSYWxmIEJhZWNobGUKKyAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCisgKi8gCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpZmRlZiBDT05GSUdfUlRFX0NCX01FMgorCisjaW5jbHVkZSA8YXNtL3J0ZV9tZTJfY2IuaD4KKworI2RlZmluZSBTVERfQ09NX0ZMQUdTIChBU1lOQ19CT09UX0FVVE9DT05GIHwgQVNZTkNfU0tJUF9URVNUKQorCisjZGVmaW5lIGlycV9jYW5ub25pY2FsaXplKHgpICh4KQorI2RlZmluZSBCQVNFX0JBVUQJMjUwMDAwCS8qICgxNk1IeiAvICgxNiAqIDM4NDAwKSkgKiA5NjAwICovCisjZGVmaW5lIFNFUklBTF9QT1JUX0RGTlMgXAorICAgeyAwLCBCQVNFX0JBVUQsIENCX1VBUlRfQkFTRSwgSVJRX0NCX0VYVFNJTywgU1REX0NPTV9GTEFHUyB9LAorCisvKiBSZWRlZmluZSBVQVJUIHJlZ2lzdGVyIG9mZnNldHMuICAqLworI3VuZGVmIFVBUlRfUlgKKyN1bmRlZiBVQVJUX1RYCisjdW5kZWYgVUFSVF9ETEwKKyN1bmRlZiBVQVJUX1RSRworI3VuZGVmIFVBUlRfRExNCisjdW5kZWYgVUFSVF9JRVIKKyN1bmRlZiBVQVJUX0ZDVFIKKyN1bmRlZiBVQVJUX0lJUgorI3VuZGVmIFVBUlRfRkNSCisjdW5kZWYgVUFSVF9FRlIKKyN1bmRlZiBVQVJUX0xDUgorI3VuZGVmIFVBUlRfTUNSCisjdW5kZWYgVUFSVF9MU1IKKyN1bmRlZiBVQVJUX01TUgorI3VuZGVmIFVBUlRfU0NSCisjdW5kZWYgVUFSVF9FTVNSCisKKyNkZWZpbmUgVUFSVF9SWAkJKDAgKiBDQl9VQVJUX1JFR19HQVApCisjZGVmaW5lIFVBUlRfVFgJCSgwICogQ0JfVUFSVF9SRUdfR0FQKQorI2RlZmluZSBVQVJUX0RMTAkoMCAqIENCX1VBUlRfUkVHX0dBUCkKKyNkZWZpbmUgVUFSVF9UUkcJKDAgKiBDQl9VQVJUX1JFR19HQVApCisjZGVmaW5lIFVBUlRfRExNCSgxICogQ0JfVUFSVF9SRUdfR0FQKQorI2RlZmluZSBVQVJUX0lFUgkoMSAqIENCX1VBUlRfUkVHX0dBUCkKKyNkZWZpbmUgVUFSVF9GQ1RSCSgxICogQ0JfVUFSVF9SRUdfR0FQKQorI2RlZmluZSBVQVJUX0lJUgkoMiAqIENCX1VBUlRfUkVHX0dBUCkKKyNkZWZpbmUgVUFSVF9GQ1IJKDIgKiBDQl9VQVJUX1JFR19HQVApCisjZGVmaW5lIFVBUlRfRUZSCSgyICogQ0JfVUFSVF9SRUdfR0FQKQorI2RlZmluZSBVQVJUX0xDUgkoMyAqIENCX1VBUlRfUkVHX0dBUCkKKyNkZWZpbmUgVUFSVF9NQ1IJKDQgKiBDQl9VQVJUX1JFR19HQVApCisjZGVmaW5lIFVBUlRfTFNSCSg1ICogQ0JfVUFSVF9SRUdfR0FQKQorI2RlZmluZSBVQVJUX01TUgkoNiAqIENCX1VBUlRfUkVHX0dBUCkKKyNkZWZpbmUgVUFSVF9TQ1IJKDcgKiBDQl9VQVJUX1JFR19HQVApCisjZGVmaW5lIFVBUlRfRU1TUgkoNyAqIENCX1VBUlRfUkVHX0dBUCkKKworI2VuZGlmIC8qIENPTkZJR19SVEVfQ0JfTUUyICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS12ODUwL3NldHVwLmggYi9pbmNsdWRlL2FzbS12ODUwL3NldHVwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ4YTliOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXY4NTAvc2V0dXAuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX1Y4NTBfU0VUVVBfSAorI2RlZmluZSBfVjg1MF9TRVRVUF9ICisKKyNkZWZpbmUgQ09NTUFORF9MSU5FX1NJWkUJNTEyCisKKyNlbmRpZiAvKiBfX1NFVFVQX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXY4NTAvc2htYnVmLmggYi9pbmNsdWRlL2FzbS12ODUwL3NobWJ1Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkMDg1YzkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS12ODUwL3NobWJ1Zi5oCkBAIC0wLDAgKzEsNDIgQEAKKyNpZm5kZWYgX19WODUwX1NITUJVRl9IX18KKyNkZWZpbmUgX19WODUwX1NITUJVRl9IX18KKworLyogCisgKiBUaGUgc2htaWQ2NF9kcyBzdHJ1Y3R1cmUgZm9yIHY4NTAgYXJjaGl0ZWN0dXJlLgorICogTm90ZSBleHRyYSBwYWRkaW5nIGJlY2F1c2UgdGhpcyBzdHJ1Y3R1cmUgaXMgcGFzc2VkIGJhY2sgYW5kIGZvcnRoCisgKiBiZXR3ZWVuIGtlcm5lbCBhbmQgdXNlciBzcGFjZS4KKyAqCisgKiBQYWQgc3BhY2UgaXMgbGVmdCBmb3I6CisgKiAtIDY0LWJpdCB0aW1lX3QgdG8gc29sdmUgeTIwMzggcHJvYmxlbQorICogLSAyIG1pc2NlbGxhbmVvdXMgMzItYml0IHZhbHVlcworICovCisKK3N0cnVjdCBzaG1pZDY0X2RzIHsKKwlzdHJ1Y3QgaXBjNjRfcGVybQlzaG1fcGVybTsJLyogb3BlcmF0aW9uIHBlcm1zICovCisJc2l6ZV90CQkJc2htX3NlZ3N6OwkvKiBzaXplIG9mIHNlZ21lbnQgKGJ5dGVzKSAqLworCV9fa2VybmVsX3RpbWVfdAkJc2htX2F0aW1lOwkvKiBsYXN0IGF0dGFjaCB0aW1lICovCisJdW5zaWduZWQgbG9uZwkJX191bnVzZWQxOworCV9fa2VybmVsX3RpbWVfdAkJc2htX2R0aW1lOwkvKiBsYXN0IGRldGFjaCB0aW1lICovCisJdW5zaWduZWQgbG9uZwkJX191bnVzZWQyOworCV9fa2VybmVsX3RpbWVfdAkJc2htX2N0aW1lOwkvKiBsYXN0IGNoYW5nZSB0aW1lICovCisJdW5zaWduZWQgbG9uZwkJX191bnVzZWQzOworCV9fa2VybmVsX3BpZF90CQlzaG1fY3BpZDsJLyogcGlkIG9mIGNyZWF0b3IgKi8KKwlfX2tlcm5lbF9waWRfdAkJc2htX2xwaWQ7CS8qIHBpZCBvZiBsYXN0IG9wZXJhdG9yICovCisJdW5zaWduZWQgbG9uZwkJc2htX25hdHRjaDsJLyogbm8uIG9mIGN1cnJlbnQgYXR0YWNoZXMgKi8KKwl1bnNpZ25lZCBsb25nCQlfX3VudXNlZDQ7CisJdW5zaWduZWQgbG9uZwkJX191bnVzZWQ1OworfTsKKworc3RydWN0IHNobWluZm82NCB7CisJdW5zaWduZWQgbG9uZwlzaG1tYXg7CisJdW5zaWduZWQgbG9uZwlzaG1taW47CisJdW5zaWduZWQgbG9uZwlzaG1tbmk7CisJdW5zaWduZWQgbG9uZwlzaG1zZWc7CisJdW5zaWduZWQgbG9uZwlzaG1hbGw7CisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDE7CisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDI7CisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDM7CisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDQ7Cit9OworCisjZW5kaWYgLyogX19WODUwX1NITUJVRl9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXY4NTAvc2htcGFyYW0uaCBiL2luY2x1ZGUvYXNtLXY4NTAvc2htcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGNiNjczCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdjg1MC9zaG1wYXJhbS5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfX1Y4NTBfU0hNUEFSQU1fSF9fCisjZGVmaW5lIF9fVjg1MF9TSE1QQVJBTV9IX18KKworI2RlZmluZQlTSE1MQkEJCVBBR0VfU0laRQkvKiBhdHRhY2ggYWRkciBhIG11bHRpcGxlIG9mIHRoaXMgKi8KKworI2VuZGlmIC8qIF9fVjg1MF9TSE1QQVJBTV9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXY4NTAvc2lnY29udGV4dC5oIGIvaW5jbHVkZS9hc20tdjg1MC9zaWdjb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA4OTBmNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXY4NTAvc2lnY29udGV4dC5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS12ODUwL3NpZ2NvbnRleHQuaCAtLSBTaWduYWwgY29udGV4dHMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxICBORUMgQ29ycG9yYXRpb24KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEgIE1pbGVzIEJhZGVyIDxtaWxlc0BnbnUub3JnPgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMKKyAqIGFyY2hpdmUgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBXcml0dGVuIGJ5IE1pbGVzIEJhZGVyIDxtaWxlc0BnbnUub3JnPgorICovCisKKyNpZm5kZWYgX19WODUwX1NJR0NPTlRFWFRfSF9fCisjZGVmaW5lIF9fVjg1MF9TSUdDT05URVhUX0hfXworCisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorCitzdHJ1Y3Qgc2lnY29udGV4dAoreworCXN0cnVjdCBwdF9yZWdzIAlyZWdzOworCXVuc2lnbmVkIGxvbmcJb2xkbWFzazsKK307CisKKyNlbmRpZiAvKiBfX1Y4NTBfU0lHQ09OVEVYVF9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXY4NTAvc2lnaW5mby5oIGIvaW5jbHVkZS9hc20tdjg1MC9zaWdpbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ViOTQ3MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXY4NTAvc2lnaW5mby5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfX1Y4NTBfU0lHSU5GT19IX18KKyNkZWZpbmUgX19WODUwX1NJR0lORk9fSF9fCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zaWdpbmZvLmg+CisKKyNlbmRpZiAvKiBfX1Y4NTBfU0lHSU5GT19IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXY4NTAvc2lnbmFsLmggYi9pbmNsdWRlL2FzbS12ODUwL3NpZ25hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwN2RiODcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS12ODUwL3NpZ25hbC5oCkBAIC0wLDAgKzEsMTk1IEBACisjaWZuZGVmIF9fVjg1MF9TSUdOQUxfSF9fCisjZGVmaW5lIF9fVjg1MF9TSUdOQUxfSF9fCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKiBBdm9pZCB0b28gbWFueSBoZWFkZXIgb3JkZXJpbmcgcHJvYmxlbXMuICAqLworc3RydWN0IHNpZ2luZm87CisKKworI2lmZGVmIF9fS0VSTkVMX18KKworLyogTW9zdCB0aGluZ3Mgc2hvdWxkIGJlIGNsZWFuIGVub3VnaCB0byByZWRlZmluZSB0aGlzIGF0IHdpbGwsIGlmIGNhcmUKKyAgIGlzIHRha2VuIHRvIG1ha2UgbGliYyBtYXRjaC4gICovCisjZGVmaW5lIF9OU0lHCQk2NAorI2RlZmluZSBfTlNJR19CUFcJMzIKKyNkZWZpbmUgX05TSUdfV09SRFMJKF9OU0lHIC8gX05TSUdfQlBXKQorCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgb2xkX3NpZ3NldF90OwkJLyogYXQgbGVhc3QgMzIgYml0cyAqLworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgbG9uZyBzaWdbX05TSUdfV09SRFNdOworfSBzaWdzZXRfdDsKKworI2Vsc2UgLyogIV9fS0VSTkVMX18gKi8KKworLyogSGVyZSB3ZSBtdXN0IGNhdGVyIHRvIGxpYmNzIHRoYXQgcG9rZSBhYm91dCBpbiBrZXJuZWwgaGVhZGVycy4gICovCisKKyNkZWZpbmUgTlNJRwkJMzIKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBzaWdzZXRfdDsKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworCisjZGVmaW5lIFNJR0hVUAkJIDEKKyNkZWZpbmUgU0lHSU5UCQkgMgorI2RlZmluZSBTSUdRVUlUCQkgMworI2RlZmluZSBTSUdJTEwJCSA0CisjZGVmaW5lIFNJR1RSQVAJCSA1CisjZGVmaW5lIFNJR0FCUlQJCSA2CisjZGVmaW5lIFNJR0lPVAkJIDYKKyNkZWZpbmUgU0lHQlVTCQkgNworI2RlZmluZSBTSUdGUEUJCSA4CisjZGVmaW5lIFNJR0tJTEwJCSA5CisjZGVmaW5lIFNJR1VTUjEJCTEwCisjZGVmaW5lIFNJR1NFR1YJCTExCisjZGVmaW5lIFNJR1VTUjIJCTEyCisjZGVmaW5lIFNJR1BJUEUJCTEzCisjZGVmaW5lIFNJR0FMUk0JCTE0CisjZGVmaW5lIFNJR1RFUk0JCTE1CisjZGVmaW5lIFNJR1NUS0ZMVAkxNgorI2RlZmluZSBTSUdDSExECQkxNworI2RlZmluZSBTSUdDT05UCQkxOAorI2RlZmluZSBTSUdTVE9QCQkxOQorI2RlZmluZSBTSUdUU1RQCQkyMAorI2RlZmluZSBTSUdUVElOCQkyMQorI2RlZmluZSBTSUdUVE9VCQkyMgorI2RlZmluZSBTSUdVUkcJCTIzCisjZGVmaW5lIFNJR1hDUFUJCTI0CisjZGVmaW5lIFNJR1hGU1oJCTI1CisjZGVmaW5lIFNJR1ZUQUxSTQkyNgorI2RlZmluZSBTSUdQUk9GCQkyNworI2RlZmluZSBTSUdXSU5DSAkyOAorI2RlZmluZSBTSUdJTwkJMjkKKyNkZWZpbmUgU0lHUE9MTAkJU0lHSU8KKy8qCisjZGVmaW5lIFNJR0xPU1QJCTI5CisqLworI2RlZmluZSBTSUdQV1IJCTMwCisjZGVmaW5lIFNJR1NZUwkJMzEKKyNkZWZpbmUJU0lHVU5VU0VECTMxCisKKy8qIFRoZXNlIHNob3VsZCBub3QgYmUgY29uc2lkZXJlZCBjb25zdGFudHMgZnJvbSB1c2VybGFuZC4gICovCisjZGVmaW5lIFNJR1JUTUlOCTMyCisjZGVmaW5lIFNJR1JUTUFYCV9OU0lHCisKKy8qCisgKiBTQV9GTEFHUyB2YWx1ZXM6CisgKgorICogU0FfT05TVEFDSyBpbmRpY2F0ZXMgdGhhdCBhIHJlZ2lzdGVyZWQgc3RhY2tfdCB3aWxsIGJlIHVzZWQuCisgKiBTQV9JTlRFUlJVUFQgaXMgYSBuby1vcCwgYnV0IGxlZnQgZHVlIHRvIGhpc3RvcmljYWwgcmVhc29ucy4gVXNlIHRoZQorICogU0FfUkVTVEFSVCBmbGFnIHRvIGdldCByZXN0YXJ0aW5nIHNpZ25hbHMgKHdoaWNoIHdlcmUgdGhlIGRlZmF1bHQgbG9uZyBhZ28pCisgKiBTQV9OT0NMRFNUT1AgZmxhZyB0byB0dXJuIG9mZiBTSUdDSExEIHdoZW4gY2hpbGRyZW4gc3RvcC4KKyAqIFNBX1JFU0VUSEFORCBjbGVhcnMgdGhlIGhhbmRsZXIgd2hlbiB0aGUgc2lnbmFsIGlzIGRlbGl2ZXJlZC4KKyAqIFNBX05PQ0xEV0FJVCBmbGFnIG9uIFNJR0NITEQgdG8gaW5oaWJpdCB6b21iaWVzLgorICogU0FfTk9ERUZFUiBwcmV2ZW50cyB0aGUgY3VycmVudCBzaWduYWwgZnJvbSBiZWluZyBtYXNrZWQgaW4gdGhlIGhhbmRsZXIuCisgKgorICogU0FfT05FU0hPVCBhbmQgU0FfTk9NQVNLIGFyZSB0aGUgaGlzdG9yaWNhbCBMaW51eCBuYW1lcyBmb3IgdGhlIFNpbmdsZQorICogVW5peCBuYW1lcyBSRVNFVEhBTkQgYW5kIE5PREVGRVIgcmVzcGVjdGl2ZWx5LgorICovCisjZGVmaW5lIFNBX05PQ0xEU1RPUAkweDAwMDAwMDAxCisjZGVmaW5lIFNBX05PQ0xEV0FJVAkweDAwMDAwMDAyCisjZGVmaW5lIFNBX1NJR0lORk8JMHgwMDAwMDAwNAorI2RlZmluZSBTQV9PTlNUQUNLCTB4MDgwMDAwMDAKKyNkZWZpbmUgU0FfUkVTVEFSVAkweDEwMDAwMDAwCisjZGVmaW5lIFNBX05PREVGRVIJMHg0MDAwMDAwMAorI2RlZmluZSBTQV9SRVNFVEhBTkQJMHg4MDAwMDAwMAorCisjZGVmaW5lIFNBX05PTUFTSwlTQV9OT0RFRkVSCisjZGVmaW5lIFNBX09ORVNIT1QJU0FfUkVTRVRIQU5ECisjZGVmaW5lIFNBX0lOVEVSUlVQVAkweDIwMDAwMDAwIC8qIGR1bW15IC0tIGlnbm9yZWQgKi8KKworI2RlZmluZSBTQV9SRVNUT1JFUgkweDA0MDAwMDAwCisKKy8qIAorICogc2lnYWx0c3RhY2sgY29udHJvbHMKKyAqLworI2RlZmluZSBTU19PTlNUQUNLCTEKKyNkZWZpbmUgU1NfRElTQUJMRQkyCisKKyNkZWZpbmUgTUlOU0lHU1RLU1oJMjA0OAorI2RlZmluZSBTSUdTVEtTWgk4MTkyCisKKworI2lmZGVmIF9fS0VSTkVMX18KKy8qCisgKiBUaGVzZSB2YWx1ZXMgb2Ygc2FfZmxhZ3MgYXJlIHVzZWQgb25seSBieSB0aGUga2VybmVsIGFzIHBhcnQgb2YgdGhlCisgKiBpcnEgaGFuZGxpbmcgcm91dGluZXMuCisgKgorICogU0FfSU5URVJSVVBUIGlzIGFsc28gdXNlZCBieSB0aGUgaXJxIGhhbmRsaW5nIHJvdXRpbmVzLgorICogU0FfU0hJUlEgaXMgZm9yIHNoYXJlZCBpbnRlcnJ1cHQgc3VwcG9ydCBvbiBQQ0kgYW5kIEVJU0EuCisgKi8KKyNkZWZpbmUgU0FfUFJPQkUJCVNBX09ORVNIT1QKKyNkZWZpbmUgU0FfU0FNUExFX1JBTkRPTQlTQV9SRVNUQVJUCisjZGVmaW5lIFNBX1NISVJRCQkweDA0MDAwMDAwCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisKKyNkZWZpbmUgU0lHX0JMT0NLICAgICAgICAgIDAJLyogZm9yIGJsb2NraW5nIHNpZ25hbHMgKi8KKyNkZWZpbmUgU0lHX1VOQkxPQ0sgICAgICAgIDEJLyogZm9yIHVuYmxvY2tpbmcgc2lnbmFscyAqLworI2RlZmluZSBTSUdfU0VUTUFTSyAgICAgICAgMgkvKiBmb3Igc2V0dGluZyB0aGUgc2lnbmFsIG1hc2sgKi8KKworLyogVHlwZSBvZiBhIHNpZ25hbCBoYW5kbGVyLiAgKi8KK3R5cGVkZWYgdm9pZCAoKl9fc2lnaGFuZGxlcl90KShpbnQpOworCisjZGVmaW5lIFNJR19ERkwJKChfX3NpZ2hhbmRsZXJfdCkwKQkvKiBkZWZhdWx0IHNpZ25hbCBoYW5kbGluZyAqLworI2RlZmluZSBTSUdfSUdOCSgoX19zaWdoYW5kbGVyX3QpMSkJLyogaWdub3JlIHNpZ25hbCAqLworI2RlZmluZSBTSUdfRVJSCSgoX19zaWdoYW5kbGVyX3QpLTEpCS8qIGVycm9yIHJldHVybiBmcm9tIHNpZ25hbCAqLworCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKK3N0cnVjdCBvbGRfc2lnYWN0aW9uIHsKKwlfX3NpZ2hhbmRsZXJfdCBzYV9oYW5kbGVyOworCW9sZF9zaWdzZXRfdCBzYV9tYXNrOworCXVuc2lnbmVkIGxvbmcgc2FfZmxhZ3M7CisJdm9pZCAoKnNhX3Jlc3RvcmVyKSh2b2lkKTsKK307CisKK3N0cnVjdCBzaWdhY3Rpb24geworCV9fc2lnaGFuZGxlcl90IHNhX2hhbmRsZXI7CisJdW5zaWduZWQgbG9uZyBzYV9mbGFnczsKKwl2b2lkICgqc2FfcmVzdG9yZXIpKHZvaWQpOworCXNpZ3NldF90IHNhX21hc2s7CQkvKiBtYXNrIGxhc3QgZm9yIGV4dGVuc2liaWxpdHkgKi8KK307CisKK3N0cnVjdCBrX3NpZ2FjdGlvbiB7CisJc3RydWN0IHNpZ2FjdGlvbiBzYTsKK307CisKKyNlbHNlIC8qICFfX0tFUk5FTF9fICovCisKKy8qIEhlcmUgd2UgbXVzdCBjYXRlciB0byBsaWJjcyB0aGF0IHBva2UgYWJvdXQgaW4ga2VybmVsIGhlYWRlcnMuICAqLworCitzdHJ1Y3Qgc2lnYWN0aW9uIHsKKwl1bmlvbiB7CisJICBfX3NpZ2hhbmRsZXJfdCBfc2FfaGFuZGxlcjsKKwkgIHZvaWQgKCpfc2Ffc2lnYWN0aW9uKShpbnQsIHN0cnVjdCBzaWdpbmZvICosIHZvaWQgKik7CisJfSBfdTsKKwlzaWdzZXRfdCBzYV9tYXNrOworCXVuc2lnbmVkIGxvbmcgc2FfZmxhZ3M7CisJdm9pZCAoKnNhX3Jlc3RvcmVyKSh2b2lkKTsKK307CisKKyNkZWZpbmUgc2FfaGFuZGxlcglfdS5fc2FfaGFuZGxlcgorI2RlZmluZSBzYV9zaWdhY3Rpb24JX3UuX3NhX3NpZ2FjdGlvbgorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisKK3R5cGVkZWYgc3RydWN0IHNpZ2FsdHN0YWNrIHsKKwl2b2lkICpzc19zcDsKKwlpbnQgc3NfZmxhZ3M7CisJc2l6ZV90IHNzX3NpemU7Cit9IHN0YWNrX3Q7CisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxhc20vc2lnY29udGV4dC5oPgorI3VuZGVmIF9fSEFWRV9BUkNIX1NJR19CSVRPUFMKKworI2RlZmluZSBwdHJhY2Vfc2lnbmFsX2RlbGl2ZXIocmVncywgY29va2llKSBkbyB7IH0gd2hpbGUgKDApCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfX1Y4NTBfU0lHTkFMX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdjg1MC9zaW0uaCBiL2luY2x1ZGUvYXNtLXY4NTAvc2ltLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTAyMzZhYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXY4NTAvc2ltLmgKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLXY4NTAvc2ltLmggLS0gTWFjaGluZS1kZXBlbmRlbnQgZGVmcyBmb3IgR0RCIHY4NTBlIHNpbXVsYXRvcgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEsMDIsMDMgIE5FQyBFbGVjdHJvbmljcyBDb3Jwb3JhdGlvbgorICogIENvcHlyaWdodCAoQykgMjAwMSwwMiwwMyAgTWlsZXMgQmFkZXIgPG1pbGVzQGdudS5vcmc+CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcworICogYXJjaGl2ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFdyaXR0ZW4gYnkgTWlsZXMgQmFkZXIgPG1pbGVzQGdudS5vcmc+CisgKi8KKworI2lmbmRlZiBfX1Y4NTBfU0lNX0hfXworI2RlZmluZSBfX1Y4NTBfU0lNX0hfXworCisKKyNkZWZpbmUgQ1BVX0FSQ0gJCSJ2ODUwZSIKKyNkZWZpbmUgQ1BVX01PREVMCQkidjg1MGUiCisjZGVmaW5lIENQVV9NT0RFTF9MT05HCQkiTkVDIFY4NTBFIgorI2RlZmluZSBQTEFURk9STQkJImdkYi92ODUwZSIKKyNkZWZpbmUgUExBVEZPUk1fTE9ORwkJIkdEQiBWODUwRSBzaW11bGF0b3IiCisKKworLyogV2UgdXNlIGEgd2VpcmQgdmFsdWUgZm9yIFJBTSwgbm90IGp1c3QgMCwgZm9yIHRlc3RpbmcgcHVycG9zZXMuCisgICBUaGVzZSBtdXN0IG1hdGNoIHRoZSB2YWx1ZXMgdXNlZCBpbiB0aGUgbGlua2VyIHNjcmlwdC4gICovCisjZGVmaW5lIFJBTV9BRERSCQkweDhGMDAwMDAwCisjZGVmaW5lIFJBTV9TSVpFCQkweDAzMDAwMDAwCisKKworLyogRm9yIDxhc20vcGFnZS5oPiAqLworI2RlZmluZSBQQUdFX09GRlNFVCAJCVJBTV9BRERSCisKKworLyogRm9yIDxhc20vZW50cnkuaD4gKi8KKy8qIGBSMCBSQU0nLCB1c2VkIGZvciBhIGZldyBtaXNjZWxsYW5lb3VzIHZhcmlhYmxlcyB0aGF0IG11c3QgYmUKKyAgIGFjY2Vzc2libGUgdXNpbmcgYSBsb2FkIGluc3RydWN0aW9uIHJlbGF0aXZlIHRvIFIwLiAgT24gcmVhbAorICAgcHJvY2Vzc29ycywgdGhpcyB1c3VhbGx5IGlzIG9uLWNoaXAgUkFNLCBidXQgaGVyZSB3ZSBqdXN0CisgICBjaG9vc2UgYW4gYXJiaXRyYXJ5IGFkZHJlc3MgdGhhdCBtZWV0cyB0aGUgYWJvdmUgY29uc3RyYWludC4gICovCisjZGVmaW5lIFIwX1JBTV9BRERSCQkweEZGRkZGMDAwCisKKworLyogRm9yIDxhc20vcGFyYW0uaD4gKi8KKyNpZm5kZWYgSFoKKyNkZWZpbmUgSFoJCQkyNAkvKiBNaW5pbXVtIHN1cHBvcnRlZCBmcmVxdWVuY3kuICAqLworI2VuZGlmCisKKy8qIEZvciA8YXNtL2lycS5oPiAqLworI2RlZmluZSBOVU1fQ1BVX0lSUVMJCTYKKworCisjZW5kaWYgLyogX19WODUwX1NJTV9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXY4NTAvc2ltODVlMi5oIGIvaW5jbHVkZS9hc20tdjg1MC9zaW04NWUyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdkZDRmYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXY4NTAvc2ltODVlMi5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS12ODUwL3NpbTg1ZTIuaCAtLSBNYWNoaW5lLWRlcGVuZGVudCBkZWZzIGZvcgorICoJVjg1MEUyIFJUTCBzaW11bGF0b3IKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAyLDAzICBORUMgRWxlY3Ryb25pY3MgQ29ycG9yYXRpb24KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDIsMDMgIE1pbGVzIEJhZGVyIDxtaWxlc0BnbnUub3JnPgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMKKyAqIGFyY2hpdmUgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBXcml0dGVuIGJ5IE1pbGVzIEJhZGVyIDxtaWxlc0BnbnUub3JnPgorICovCisKKyNpZm5kZWYgX19WODUwX1NJTTg1RTJfSF9fCisjZGVmaW5lIF9fVjg1MF9TSU04NUUyX0hfXworCisKKyNpbmNsdWRlIDxhc20vdjg1MGUyLmg+CQkvKiBCYXNlZCBvbiBWODUwRTIgY29yZS4gICovCisKKworLyogVmFyaW91cyBtZW1vcnkgYXJlYXMgc3VwcG9ydGVkIGJ5IHRoZSBzaW11bGF0b3IuCisgICBUaGVzZSBzaG91bGQgbWF0Y2ggdGhlIGNvcnJlc3BvbmRpbmcgZGVmaW5pdGlvbnMgaW4gdGhlIGxpbmtlciBzY3JpcHQuICAqLworCisvKiBgaW5zdHJ1Y3Rpb24gUkFNJzsgaW5zdHJ1Y3Rpb24gZmV0Y2hlcyBhcmUgbXVjaCBmYXN0ZXIgZnJvbSBJUkFNIHRoYW4KKyAgIGZyb20gRFJBTS4gICovCisjZGVmaW5lIElSQU1fQUREUgkJMAorI2RlZmluZSBJUkFNX1NJWkUJCTB4MDAxMDAwMDAgLyogMU1CICovCisvKiBgZGF0YSBSQU0nLCBiZWxvdyBhbmQgY29udGlndW91cyB3aXRoIHRoZSBJL08gc3BhY2UuCisgICBEYXRhIGZldGNoZXMgYXJlIG11Y2ggZmFzdGVyIGZyb20gRFJBTSB0aGFuIGZyb20gSVJBTS4gICovCisjZGVmaW5lIERSQU1fQUREUgkJMHhmZmYwMDAwMAorI2RlZmluZSBEUkFNX1NJWkUJCTB4MDAwZmYwMDAgLyogMTAyMEtCICovCisvKiBgZXh0ZXJuYWwgcmFtJy4gIFVubGlrZSB0aGUgYWJvdmUgUkFNIGFyZWFzLCB0aGlzIG1lbW9yeSBpcyBjYWNoZWQsCisgICBzbyBib3RoIGluc3RydWN0aW9uIGFuZCBkYXRhIGZldGNoZXMgc2hvdWxkIGJlIChtb3N0bHkpIGZhc3QgLS0KKyAgIGhvd2V2ZXIsIGN1cnJlbnRseSBvbmx5IHdyaXRlLXRocm91Z2ggY2FjaGluZyBpcyBzdXBwb3J0ZWQsIHNvIHdyaXRlcworICAgdG8gRVJBTSB3aWxsIGJlIHNsb3cuICAqLworI2RlZmluZSBFUkFNX0FERFIJCTB4MDAxMDAwMDAKKyNkZWZpbmUgRVJBTV9TSVpFCQkweDA3ZjAwMDAwIC8qIDEyN01CIChtYXgpICovCisvKiBEeW5hbWljIFJBTTsgdXNlcyBtZW1vcnkgY29udHJvbGxlci4gICovCisjZGVmaW5lIFNEUkFNX0FERFIJCTB4MTAwMDAwMDAKKyNkZWZpbmUgU0RSQU1fU0laRQkJMHgwMTAwMDAwMCAvKiAxNk1CICovCisKKworLyogU2ltdWxhdG9yIHNwZWNpZmljIGNvbnRyb2wgcmVnaXN0ZXJzLiAgKi8KKy8qIE5PVEhBTCBjb250cm9scyB3aGV0aGVyIHRoZSBzaW11bGF0b3Igd2lsbCBzdG9wIGF0IGEgYGhhbHQnIGluc24uICAqLworI2RlZmluZSBTSU04NUUyX05PVEhBTF9BRERSCTB4ZmZmZmZmMjIKKyNkZWZpbmUgU0lNODVFMl9OT1RIQUwJCSgqKHZvbGF0aWxlIHU4ICopU0lNODVFMl9OT1RIQUxfQUREUikKKy8qIFRoZSBzaW11bGF0b3Igd2lsbCBzdG9wIE4gY3ljbGVzIGFmdGVyIE4gaXMgd3JpdHRlbiB0byBTSU1GSU4uICAqLworI2RlZmluZSBTSU04NUUyX1NJTUZJTl9BRERSCTB4ZmZmZmZmMjQKKyNkZWZpbmUgU0lNODVFMl9TSU1GSU4JCSgqKHZvbGF0aWxlIHUxNiAqKVNJTTg1RTJfU0lNRklOX0FERFIpCisKKworLyogRm9yIDxhc20vaXJxLmg+ICovCisjZGVmaW5lIE5VTV9DUFVfSVJRUwkJNjQKKworCisvKiBGb3IgPGFzbS9wYWdlLmg+ICovCisjZGVmaW5lIFBBR0VfT0ZGU0VUCQlTRFJBTV9BRERSCisKKworLyogRm9yIDxhc20vZW50cnkuaD4gKi8KKy8qIGBSMCBSQU0nLCB1c2VkIGZvciBhIGZldyBtaXNjZWxsYW5lb3VzIHZhcmlhYmxlcyB0aGF0IG11c3QgYmUgYWNjZXNzaWJsZQorICAgdXNpbmcgYSBsb2FkIGluc3RydWN0aW9uIHJlbGF0aXZlIHRvIFIwLiAgVGhlIHNpbTg1ZTIgc2ltdWxhdG9yCisgICBhY3R1YWxseSBwdXRzIDEwMjBLIG9mIFJBTSBmcm9tIEZGRjAwMDAwIHRvIEZGRkZGMDAwLCBzbyB3ZSBhcmJpdGFyaWx5CisgICBjaG9vc2UgYSBzbWFsbCBwb3J0aW9uIGF0IHRoZSBlbmQgb2YgdGhhdC4gICovCisjZGVmaW5lIFIwX1JBTV9BRERSCQkweEZGRkZFMDAwCisKKworLyogRm9yIDxhc20vcGFyYW0uaD4gKi8KKyNpZm5kZWYgSFoKKyNkZWZpbmUgSFoJCQkyNAkvKiBNaW5pbXVtIHN1cHBvcnRlZCBmcmVxdWVuY3kuICAqLworI2VuZGlmCisKKworI2VuZGlmIC8qIF9fVjg1MF9TSU04NUUyX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdjg1MC9zaW04NWUyYy5oIGIvaW5jbHVkZS9hc20tdjg1MC9zaW04NWUyYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlZTU0M2YKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS12ODUwL3NpbTg1ZTJjLmgKQEAgLTAsMCArMSwyNiBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLXY4NTAvc2ltODVlMmMuaCAtLSBNYWNoaW5lLWRlcGVuZGVudCBkZWZzIGZvcgorICoJVjg1MEUyIFJUTCBzaW11bGF0b3IKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAyICBORUMgQ29ycG9yYXRpb24KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDIgIE1pbGVzIEJhZGVyIDxtaWxlc0BnbnUub3JnPgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMKKyAqIGFyY2hpdmUgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBXcml0dGVuIGJ5IE1pbGVzIEJhZGVyIDxtaWxlc0BnbnUub3JnPgorICovCisKKyNpZm5kZWYgX19WODUwX1NJTTg1RTJDX0hfXworI2RlZmluZSBfX1Y4NTBfU0lNODVFMkNfSF9fCisKKy8qIFVzZSBnZW5lcmljIHNpbTg1ZTIgc2V0dGluZ3MsIG90aGVyIHRoYW4gdGhlIHZhcmlvdXMgbmFtZXMuICAqLworI2luY2x1ZGUgPGFzbS9zaW04NWUyLmg+CisKKyNkZWZpbmUgQ1BVX01PREVMCSJ2ODUwZTIiCisjZGVmaW5lIENQVV9NT0RFTF9MT05HCSJORUMgVjg1MEUyIgorI2RlZmluZSBQTEFURk9STQkic2ltODVlMmMiCisjZGVmaW5lIFBMQVRGT1JNX0xPTkcJIlNJTTg1RTJDIFY4NTBFMiBzaW11bGF0b3IiCisKKyNlbmRpZiAvKiBfX1Y4NTBfU0lNODVFMkNfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS12ODUwL3NpbTg1ZTJzLmggYi9pbmNsdWRlL2FzbS12ODUwL3NpbTg1ZTJzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWUwNjZkNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXY4NTAvc2ltODVlMnMuaApAQCAtMCwwICsxLDI4IEBACisvKgorICogaW5jbHVkZS9hc20tdjg1MC9zaW04NWUycy5oIC0tIE1hY2hpbmUtZGVwZW5kZW50IGRlZnMgZm9yCisgKglWODUwRTIgUlRMIHNpbXVsYXRvcgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMgIE5FQyBFbGVjdHJvbmljcyBDb3Jwb3JhdGlvbgorICogIENvcHlyaWdodCAoQykgMjAwMyAgTWlsZXMgQmFkZXIgPG1pbGVzQGdudS5vcmc+CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcworICogYXJjaGl2ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFdyaXR0ZW4gYnkgTWlsZXMgQmFkZXIgPG1pbGVzQGdudS5vcmc+CisgKi8KKworI2lmbmRlZiBfX1Y4NTBfU0lNODVFMlNfSF9fCisjZGVmaW5lIF9fVjg1MF9TSU04NUUyU19IX18KKworI2luY2x1ZGUgPGFzbS9zaW04NWUyLmg+CS8qIFVzZSBnZW5lcmljIHNpbTg1ZTIgc2V0dGluZ3MuICAqLworI2lmIDAKKyNpbmNsdWRlIDxhc20vdjg1MGUyX2NhY2hlLmg+CS8qICsgY2FjaGUgKi8KKyNlbmRpZgorCisjZGVmaW5lIENQVV9NT0RFTAkidjg1MGUyIgorI2RlZmluZSBDUFVfTU9ERUxfTE9ORwkiTkVDIFY4NTBFMiIKKyNkZWZpbmUgUExBVEZPUk0JInNpbTg1ZTJzIgorI2RlZmluZSBQTEFURk9STV9MT05HCSJTSU04NUUyUyBWODUwRTIgc2ltdWxhdG9yIgorCisjZW5kaWYgLyogX19WODUwX1NJTTg1RTJTX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdjg1MC9zaW1zeXNjYWxsLmggYi9pbmNsdWRlL2FzbS12ODUwL3NpbXN5c2NhbGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTE5ZDVhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdjg1MC9zaW1zeXNjYWxsLmgKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLXY4NTAvc2ltc3lzY2FsbC5oIC0tIGBTeXN0ZW0gY2FsbHMnIHVuZGVyIHRoZSB2ODUwZSBlbXVsYXRvcgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEgIE5FQyBDb3Jwb3JhdGlvbgorICogIENvcHlyaWdodCAoQykgMjAwMSAgTWlsZXMgQmFkZXIgPG1pbGVzQGdudS5vcmc+CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcworICogYXJjaGl2ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFdyaXR0ZW4gYnkgTWlsZXMgQmFkZXIgPG1pbGVzQGdudS5vcmc+CisgKi8KKworI2lmbmRlZiBfX1Y4NTBfU0lNU1lTQ0FMTF9IX18KKyNkZWZpbmUgX19WODUwX1NJTVNZU0NBTExfSF9fCisKKyNkZWZpbmUgVjg1MF9TSU1fU1lTX2V4aXQoYS4uLikJCVY4NTBfU0lNX1NZU0NBTExfMSAoMQksICMjYSkKKyNkZWZpbmUgVjg1MF9TSU1fU1lTX2ZvcmsoYS4uLikJCVY4NTBfU0lNX1NZU0NBTExfMCAoMgksICMjYSkKKyNkZWZpbmUgVjg1MF9TSU1fU1lTX3JlYWQoYS4uLikJCVY4NTBfU0lNX1NZU0NBTExfMyAoMwksICMjYSkKKyNkZWZpbmUgVjg1MF9TSU1fU1lTX3dyaXRlKGEuLi4pCVY4NTBfU0lNX1NZU0NBTExfMyAoNAksICMjYSkKKyNkZWZpbmUgVjg1MF9TSU1fU1lTX29wZW4oYS4uLikJCVY4NTBfU0lNX1NZU0NBTExfMiAoNQksICMjYSkKKyNkZWZpbmUgVjg1MF9TSU1fU1lTX2Nsb3NlKGEuLi4pCVY4NTBfU0lNX1NZU0NBTExfMSAoNgksICMjYSkKKyNkZWZpbmUgVjg1MF9TSU1fU1lTX3dhaXQ0KGEuLi4pCVY4NTBfU0lNX1NZU0NBTExfNCAoNwksICMjYSkKKy8qICNkZWZpbmUgVjg1MF9TSU1fU1lTX2NyZWF0KGEuLi4pCVY4NTBfU0lNX1NZU0NBTExfMSAoOAksICMjYSkgKi8KKy8qICNkZWZpbmUgVjg1MF9TSU1fU1lTX2xpbmsoYS4uLikJVjg1MF9TSU1fU1lTQ0FMTF8xICg5CSwgIyNhKSAqLworLyogI2RlZmluZSBWODUwX1NJTV9TWVNfdW5saW5rKGEuLi4pCVY4NTBfU0lNX1NZU0NBTExfMSAoMTAJLCAjI2EpICovCisjZGVmaW5lIFY4NTBfU0lNX1NZU19leGVjdihhLi4uKQlWODUwX1NJTV9TWVNDQUxMXzIgKDExCSwgIyNhKQorLyogI2RlZmluZSBWODUwX1NJTV9TWVNfY2hkaXIoYS4uLikJVjg1MF9TSU1fU1lTQ0FMTF8xICgxMgksICMjYSkgKi8KKy8qICNkZWZpbmUgVjg1MF9TSU1fU1lTX21rbm9kKGEuLi4pCVY4NTBfU0lNX1NZU0NBTExfMSAoMTQJLCAjI2EpICovCisjZGVmaW5lIFY4NTBfU0lNX1NZU19jaG1vZChhLi4uKQlWODUwX1NJTV9TWVNDQUxMXzIgKDE1CSwgIyNhKQorI2RlZmluZSBWODUwX1NJTV9TWVNfY2hvd24oYS4uLikJVjg1MF9TSU1fU1lTQ0FMTF8yICgxNgksICMjYSkKKyNkZWZpbmUgVjg1MF9TSU1fU1lTX2xzZWVrKGEuLi4pCVY4NTBfU0lNX1NZU0NBTExfMyAoMTkJLCAjI2EpCisvKiAjZGVmaW5lIFY4NTBfU0lNX1NZU19nZXRwaWQoYS4uLikJVjg1MF9TSU1fU1lTQ0FMTF8xICgyMAksICMjYSkgKi8KKy8qICNkZWZpbmUgVjg1MF9TSU1fU1lTX2lzYXR0eShhLi4uKQlWODUwX1NJTV9TWVNDQUxMXzEgKDIxCSwgIyNhKSAqLworLyogI2RlZmluZSBWODUwX1NJTV9TWVNfZnN0YXQoYS4uLikJVjg1MF9TSU1fU1lTQ0FMTF8xICgyMgksICMjYSkgKi8KKyNkZWZpbmUgVjg1MF9TSU1fU1lTX3RpbWUoYS4uLikJCVY4NTBfU0lNX1NZU0NBTExfMSAoMjMJLCAjI2EpCisjZGVmaW5lIFY4NTBfU0lNX1NZU19wb2xsKGEuLi4pCQlWODUwX1NJTV9TWVNDQUxMXzMgKDI0CSwgIyNhKQorI2RlZmluZSBWODUwX1NJTV9TWVNfc3RhdChhLi4uKQkJVjg1MF9TSU1fU1lTQ0FMTF8yICgzOAksICMjYSkKKyNkZWZpbmUgVjg1MF9TSU1fU1lTX3BpcGUoYS4uLikJCVY4NTBfU0lNX1NZU0NBTExfMSAoNDIJLCAjI2EpCisjZGVmaW5lIFY4NTBfU0lNX1NZU190aW1lcyhhLi4uKQlWODUwX1NJTV9TWVNDQUxMXzEgKDQzCSwgIyNhKQorI2RlZmluZSBWODUwX1NJTV9TWVNfZXhlY3ZlKGEuLi4pCVY4NTBfU0lNX1NZU0NBTExfMyAoNTkJLCAjI2EpCisjZGVmaW5lIFY4NTBfU0lNX1NZU19nZXR0aW1lb2ZkYXkoYS4uLikJVjg1MF9TSU1fU1lTQ0FMTF8yICgxMTYJLCAjI2EpCisvKiAjZGVmaW5lIFY4NTBfU0lNX1NZU191dGltZShhLi4uKQlWODUwX1NJTV9TWVNDQUxMXzIgKDIwMQksICMjYSkgKi8KKy8qICNkZWZpbmUgVjg1MF9TSU1fU1lTX3dhaXQoYS4uLikJVjg1MF9TSU1fU1lTQ0FMTF8xICgyMDIJLCAjI2EpICovCisKKyNkZWZpbmUgVjg1MF9TSU1fU1lTX21ha2VfcmF3KGEuLi4pCVY4NTBfU0lNX1NZU0NBTExfMSAoMTAyNCAsICMjYSkKKworCisjZGVmaW5lIFY4NTBfU0lNX1NZU0NBTExfMChfY2FsbCkJCQkJCSAgICAgIFwKKyh7CQkJCQkJCQkJICAgICAgXAorCXJlZ2lzdGVyIGludCBjYWxsIF9fYXNtX18gKCJyNiIpID0gX2NhbGw7CQkJICAgICAgXAorCXJlZ2lzdGVyIGludCBydmFsIF9fYXNtX18gKCJyMTAiKTsJCQkJICAgICAgXAorCV9fYXNtX18gX192b2xhdGlsZV9fICgidHJhcCAzMSIJCQkJCSAgICAgIFwKKwkJCSAgICAgIDogIj1yIiAocnZhbCkJCQkJICAgICAgXAorCQkJICAgICAgOiAiciIgKGNhbGwpCQkJCSAgICAgIFwKKwkJCSAgICAgIDogInIxMSIsICJtZW1vcnkiKTsJCQkgICAgICBcCisJcnZhbDsJCQkJCQkJCSAgICAgIFwKK30pCisjZGVmaW5lIFY4NTBfU0lNX1NZU0NBTExfMShfY2FsbCwgX2FyZzApCQkJCSAgICAgIFwKKyh7CQkJCQkJCQkJICAgICAgXAorCXJlZ2lzdGVyIGludCBjYWxsIF9fYXNtX18gKCJyNiIpID0gX2NhbGw7CQkJICAgICAgXAorCXJlZ2lzdGVyIGxvbmcgYXJnMCBfX2FzbV9fICgicjciKSA9IChsb25nKV9hcmcwOwkJICAgICAgXAorCXJlZ2lzdGVyIGludCBydmFsIF9fYXNtX18gKCJyMTAiKTsJCQkJICAgICAgXAorCV9fYXNtX18gX192b2xhdGlsZV9fICgidHJhcCAzMSIJCQkJCSAgICAgIFwKKwkJCSAgICAgIDogIj1yIiAocnZhbCkJCQkJICAgICAgXAorCQkJICAgICAgOiAiciIgKGNhbGwpLCAiciIgKGFyZzApCQkJICAgICAgXAorCQkJICAgICAgOiAicjExIiwgIm1lbW9yeSIpOwkJCSAgICAgIFwKKwlydmFsOwkJCQkJCQkJICAgICAgXAorfSkKKyNkZWZpbmUgVjg1MF9TSU1fU1lTQ0FMTF8yKF9jYWxsLCBfYXJnMCwgX2FyZzEpCQkJCSAgICAgIFwKKyh7CQkJCQkJCQkJICAgICAgXAorCXJlZ2lzdGVyIGludCBjYWxsIF9fYXNtX18gKCJyNiIpID0gX2NhbGw7CQkJICAgICAgXAorCXJlZ2lzdGVyIGxvbmcgYXJnMCBfX2FzbV9fICgicjciKSA9IChsb25nKV9hcmcwOwkJICAgICAgXAorCXJlZ2lzdGVyIGxvbmcgYXJnMSBfX2FzbV9fICgicjgiKSA9IChsb25nKV9hcmcxOwkJICAgICAgXAorCXJlZ2lzdGVyIGludCBydmFsIF9fYXNtX18gKCJyMTAiKTsJCQkJICAgICAgXAorCV9fYXNtX18gX192b2xhdGlsZV9fICgidHJhcCAzMSIJCQkJCSAgICAgIFwKKwkJCSAgICAgIDogIj1yIiAocnZhbCkJCQkJICAgICAgXAorCQkJICAgICAgOiAiciIgKGNhbGwpLCAiciIgKGFyZzApLCAiciIgKGFyZzEpCSAgICAgIFwKKwkJCSAgICAgIDogInIxMSIsICJtZW1vcnkiKTsJCQkgICAgICBcCisJcnZhbDsJCQkJCQkJCSAgICAgIFwKK30pCisjZGVmaW5lIFY4NTBfU0lNX1NZU0NBTExfMyhfY2FsbCwgX2FyZzAsIF9hcmcxLCBfYXJnMikJCQkgICAgICBcCisoewkJCQkJCQkJCSAgICAgIFwKKwlyZWdpc3RlciBpbnQgY2FsbCBfX2FzbV9fICgicjYiKSA9IF9jYWxsOwkJCSAgICAgIFwKKwlyZWdpc3RlciBsb25nIGFyZzAgX19hc21fXyAoInI3IikgPSAobG9uZylfYXJnMDsJCSAgICAgIFwKKwlyZWdpc3RlciBsb25nIGFyZzEgX19hc21fXyAoInI4IikgPSAobG9uZylfYXJnMTsJCSAgICAgIFwKKwlyZWdpc3RlciBsb25nIGFyZzIgX19hc21fXyAoInI5IikgPSAobG9uZylfYXJnMjsJCSAgICAgIFwKKwlyZWdpc3RlciBpbnQgcnZhbCBfX2FzbV9fICgicjEwIik7CQkJCSAgICAgIFwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInRyYXAgMzEiCQkJCQkgICAgICBcCisJCQkgICAgICA6ICI9ciIgKHJ2YWwpCQkJCSAgICAgIFwKKwkJCSAgICAgIDogInIiIChjYWxsKSwgInIiIChhcmcwKSwgInIiIChhcmcxKSwgInIiIChhcmcyKVwKKwkJCSAgICAgIDogInIxMSIsICJtZW1vcnkiKTsJCQkgICAgICBcCisJcnZhbDsJCQkJCQkJCSAgICAgIFwKK30pCisKKyNkZWZpbmUgVjg1MF9TSU1fU1lTQ0FMTChjYWxsLCBhcmdzLi4uKSBcCisgICBWODUwX1NJTV9TWVNfIyNjYWxsIChhcmdzKQorCisjZW5kaWYgLyogX19WODUwX1NJTVNZU0NBTExfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS12ODUwL3NvY2tldC5oIGIvaW5jbHVkZS9hc20tdjg1MC9zb2NrZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTNiODUyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdjg1MC9zb2NrZXQuaApAQCAtMCwwICsxLDUwIEBACisjaWZuZGVmIF9fVjg1MF9TT0NLRVRfSF9fCisjZGVmaW5lIF9fVjg1MF9TT0NLRVRfSF9fCisKKyNpbmNsdWRlIDxhc20vc29ja2lvcy5oPgorCisvKiBGb3Igc2V0c29ja29wdGlvbnMoMikgKi8KKyNkZWZpbmUgU09MX1NPQ0tFVAkxCisKKyNkZWZpbmUgU09fREVCVUcJMQorI2RlZmluZSBTT19SRVVTRUFERFIJMgorI2RlZmluZSBTT19UWVBFCQkzCisjZGVmaW5lIFNPX0VSUk9SCTQKKyNkZWZpbmUgU09fRE9OVFJPVVRFCTUKKyNkZWZpbmUgU09fQlJPQURDQVNUCTYKKyNkZWZpbmUgU09fU05EQlVGCTcKKyNkZWZpbmUgU09fUkNWQlVGCTgKKyNkZWZpbmUgU09fS0VFUEFMSVZFCTkKKyNkZWZpbmUgU09fT09CSU5MSU5FCTEwCisjZGVmaW5lIFNPX05PX0NIRUNLCTExCisjZGVmaW5lIFNPX1BSSU9SSVRZCTEyCisjZGVmaW5lIFNPX0xJTkdFUgkxMworI2RlZmluZSBTT19CU0RDT01QQVQJMTQKKy8qIFRvIGFkZCA6I2RlZmluZSBTT19SRVVTRVBPUlQgMTUgKi8KKyNkZWZpbmUgU09fUEFTU0NSRUQJMTYKKyNkZWZpbmUgU09fUEVFUkNSRUQJMTcKKyNkZWZpbmUgU09fUkNWTE9XQVQJMTgKKyNkZWZpbmUgU09fU05ETE9XQVQJMTkKKyNkZWZpbmUgU09fUkNWVElNRU8JMjAKKyNkZWZpbmUgU09fU05EVElNRU8JMjEKKworLyogU2VjdXJpdHkgbGV2ZWxzIC0gYXMgcGVyIE5STCBJUHY2IC0gZG9uJ3QgYWN0dWFsbHkgZG8gYW55dGhpbmcgKi8KKyNkZWZpbmUgU09fU0VDVVJJVFlfQVVUSEVOVElDQVRJT04JCTIyCisjZGVmaW5lIFNPX1NFQ1VSSVRZX0VOQ1JZUFRJT05fVFJBTlNQT1JUCTIzCisjZGVmaW5lIFNPX1NFQ1VSSVRZX0VOQ1JZUFRJT05fTkVUV09SSwkJMjQKKworI2RlZmluZSBTT19CSU5EVE9ERVZJQ0UJMjUKKworLyogU29ja2V0IGZpbHRlcmluZyAqLworI2RlZmluZSBTT19BVFRBQ0hfRklMVEVSICAgICAgICAyNgorI2RlZmluZSBTT19ERVRBQ0hfRklMVEVSICAgICAgICAyNworCisjZGVmaW5lIFNPX1BFRVJOQU1FICAgICAgICAgICAgIDI4CisjZGVmaW5lIFNPX1RJTUVTVEFNUAkJMjkKKyNkZWZpbmUgU0NNX1RJTUVTVEFNUAkJU09fVElNRVNUQU1QCisKKyNkZWZpbmUgU09fQUNDRVBUQ09OTgkJMzAKKworI2RlZmluZSBTT19QRUVSU0VDCQkzMQorCisjZW5kaWYgLyogX19WODUwX1NPQ0tFVF9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXY4NTAvc29ja2lvcy5oIGIvaW5jbHVkZS9hc20tdjg1MC9zb2NraW9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y0ODc0YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXY4NTAvc29ja2lvcy5oCkBAIC0wLDAgKzEsMTIgQEAKKyNpZm5kZWYgX19WODUwX1NPQ0tJT1NfSF9fCisjZGVmaW5lIF9fVjg1MF9TT0NLSU9TX0hfXworCisvKiBTb2NrZXQtbGV2ZWwgSS9PIGNvbnRyb2wgY2FsbHMuICovCisjZGVmaW5lIEZJT1NFVE9XTiAJMHg4OTAxCisjZGVmaW5lIFNJT0NTUEdSUAkweDg5MDIKKyNkZWZpbmUgRklPR0VUT1dOCTB4ODkwMworI2RlZmluZSBTSU9DR1BHUlAJMHg4OTA0CisjZGVmaW5lIFNJT0NBVE1BUksJMHg4OTA1CisjZGVmaW5lIFNJT0NHU1RBTVAJMHg4OTA2CQkvKiBHZXQgc3RhbXAgKi8KKworI2VuZGlmIC8qIF9fVjg1MF9TT0NLSU9TX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdjg1MC9zdGF0LmggYi9pbmNsdWRlL2FzbS12ODUwL3N0YXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjhjNjBkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdjg1MC9zdGF0LmgKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLXY4NTAvc3RhdC5oIC0tIHY4NTAgc3RhdCBzdHJ1Y3R1cmUKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxLDAyLDAzICBORUMgRWxlY3Ryb25pY3MgQ29ycG9yYXRpb24KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEsMDIsMDMgIE1pbGVzIEJhZGVyIDxtaWxlc0BnbnUub3JnPgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMKKyAqIGFyY2hpdmUgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBXcml0dGVuIGJ5IE1pbGVzIEJhZGVyIDxtaWxlc0BnbnUub3JnPgorICovCisKKyNpZm5kZWYgX19WODUwX1NUQVRfSF9fCisjZGVmaW5lIF9fVjg1MF9TVEFUX0hfXworCisjaW5jbHVkZSA8YXNtL3Bvc2l4X3R5cGVzLmg+CisKK3N0cnVjdCBzdGF0IHsKKwl1bnNpZ25lZCBpbnQJc3RfZGV2OworCXVuc2lnbmVkIGxvbmcJc3RfaW5vOworCXVuc2lnbmVkIGludAlzdF9tb2RlOworCXVuc2lnbmVkIGludAlzdF9ubGluazsKKwl1bnNpZ25lZCBpbnQgCXN0X3VpZDsKKwl1bnNpZ25lZCBpbnQgCXN0X2dpZDsKKwl1bnNpZ25lZCBpbnQJc3RfcmRldjsKKwlsb25nCQlzdF9zaXplOworCXVuc2lnbmVkIGxvbmcJc3RfYmxrc2l6ZTsKKwl1bnNpZ25lZCBsb25nCXN0X2Jsb2NrczsKKwl1bnNpZ25lZCBsb25nCXN0X2F0aW1lOworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQxOworCXVuc2lnbmVkIGxvbmcJc3RfbXRpbWU7CisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDI7CisJdW5zaWduZWQgbG9uZwlzdF9jdGltZTsKKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkMzsKKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkNDsKKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkNTsKK307CisKK3N0cnVjdCBzdGF0NjQgeworCXVuc2lnbmVkIGxvbmcgbG9uZwlzdF9kZXY7CisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDE7CisKKwl1bnNpZ25lZCBsb25nIGxvbmcJc3RfaW5vOworCisJdW5zaWduZWQgaW50CXN0X21vZGU7CisJdW5zaWduZWQgaW50CXN0X25saW5rOworCisJdW5zaWduZWQgaW50CXN0X3VpZDsKKwl1bnNpZ25lZCBpbnQJc3RfZ2lkOworCisJdW5zaWduZWQgbG9uZyBsb25nCXN0X3JkZXY7CisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDM7CisKKwlsb25nIGxvbmcJc3Rfc2l6ZTsKKwl1bnNpZ25lZCBsb25nCXN0X2Jsa3NpemU7CisKKwl1bnNpZ25lZCBsb25nCXN0X2Jsb2NrczsgLyogTm8uIG9mIDUxMi1ieXRlIGJsb2NrcyBhbGxvY2F0ZWQgKi8KKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkNDsgLyogZnV0dXJlIHBvc3NpYmxlIHN0X2Jsb2NrcyBoaWdoIGJpdHMgKi8KKworCXVuc2lnbmVkIGxvbmcJc3RfYXRpbWU7CisJdW5zaWduZWQgbG9uZwlzdF9hdGltZV9uc2VjOworCisJdW5zaWduZWQgbG9uZwlzdF9tdGltZTsKKwl1bnNpZ25lZCBsb25nCXN0X210aW1lX25zZWM7CisKKwl1bnNpZ25lZCBsb25nCXN0X2N0aW1lOworCXVuc2lnbmVkIGxvbmcJc3RfY3RpbWVfbnNlYzsKKworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQ4OworfTsKKworI2VuZGlmIC8qIF9fVjg1MF9TVEFUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdjg1MC9zdGF0ZnMuaCBiL2luY2x1ZGUvYXNtLXY4NTAvc3RhdGZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWExNTk2NgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXY4NTAvc3RhdGZzLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fVjg1MF9TVEFURlNfSF9fCisjZGVmaW5lIF9fVjg1MF9TVEFURlNfSF9fCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zdGF0ZnMuaD4KKworI2VuZGlmIC8qIF9fVjg1MF9TVEFURlNfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS12ODUwL3N0cmluZy5oIGIvaW5jbHVkZS9hc20tdjg1MC9zdHJpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzhlMjM0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdjg1MC9zdHJpbmcuaApAQCAtMCwwICsxLDI1IEBACisvKgorICogaW5jbHVkZS9hc20tdjg1MC9zdHJpbmcuaCAtLSBBcmNoaXRlY3R1cmUgc3BlY2lmaWMgc3RyaW5nIHJvdXRpbmVzCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMSwwMiAgTkVDIENvcnBvcmF0aW9uCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxLDAyICBNaWxlcyBCYWRlciA8bWlsZXNAZ251Lm9yZz4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzCisgKiBhcmNoaXZlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogV3JpdHRlbiBieSBNaWxlcyBCYWRlciA8bWlsZXNAZ251Lm9yZz4KKyAqLworCisjaWZuZGVmIF9fVjg1MF9TVFJJTkdfSF9fCisjZGVmaW5lIF9fVjg1MF9TVFJJTkdfSF9fCisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNQ1BZCisjZGVmaW5lIF9fSEFWRV9BUkNIX01FTVNFVAorI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1NT1ZFCisKK2V4dGVybiB2b2lkICptZW1jcHkgKHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBfX2tlcm5lbF9zaXplX3QpOworZXh0ZXJuIHZvaWQgKm1lbXNldCAodm9pZCAqLCBpbnQsIF9fa2VybmVsX3NpemVfdCk7CitleHRlcm4gdm9pZCAqbWVtbW92ZSAodm9pZCAqLCBjb25zdCB2b2lkICosIF9fa2VybmVsX3NpemVfdCk7CisKKyNlbmRpZiAvKiBfX1Y4NTBfU1RSSU5HX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdjg1MC9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLXY4NTAvc3lzdGVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBmNGM3MwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXY4NTAvc3lzdGVtLmgKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS12ODUwL3N5c3RlbS5oIC0tIExvdy1sZXZlbCBpbnRlcnJ1cHQvdGhyZWFkIG9wcworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEsMDIsMDMgIE5FQyBFbGVjdHJvbmljcyBDb3Jwb3JhdGlvbgorICogIENvcHlyaWdodCAoQykgMjAwMSwwMiwwMyAgTWlsZXMgQmFkZXIgPG1pbGVzQGdudS5vcmc+CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcworICogYXJjaGl2ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFdyaXR0ZW4gYnkgTWlsZXMgQmFkZXIgPG1pbGVzQGdudS5vcmc+CisgKi8KKworI2lmbmRlZiBfX1Y4NTBfU1lTVEVNX0hfXworI2RlZmluZSBfX1Y4NTBfU1lTVEVNX0hfXworCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKworCisjZGVmaW5lIHByZXBhcmVfdG9fc3dpdGNoKCkJZG8geyB9IHdoaWxlICgwKQorCisvKgorICogc3dpdGNoX3RvKG4pIHNob3VsZCBzd2l0Y2ggdGFza3MgdG8gdGFzayBwdHIsIGZpcnN0IGNoZWNraW5nIHRoYXQKKyAqIHB0ciBpc24ndCB0aGUgY3VycmVudCB0YXNrLCBpbiB3aGljaCBjYXNlIGl0IGRvZXMgbm90aGluZy4KKyAqLworc3RydWN0IHRocmVhZF9zdHJ1Y3Q7CitleHRlcm4gdm9pZCAqc3dpdGNoX3RocmVhZCAoc3RydWN0IHRocmVhZF9zdHJ1Y3QgKmxhc3QsCisJCQkgICAgc3RydWN0IHRocmVhZF9zdHJ1Y3QgKm5leHQpOworI2RlZmluZSBzd2l0Y2hfdG8ocHJldixuZXh0LGxhc3QpCQkJCQkgICAgICBcCisgIGRvIHsJCQkJCQkJCQkgICAgICBcCisgICAgICAgIGlmIChwcmV2ICE9IG5leHQpIHsJCQkJCQkgICAgICBcCisgCQkobGFzdCkgPSBzd2l0Y2hfdGhyZWFkICgmcHJldi0+dGhyZWFkLCAmbmV4dC0+dGhyZWFkKTsJICAgICAgXAorCX0JCQkJCQkJCSAgICAgIFwKKyAgfSB3aGlsZSAoMCkKKworCisvKiBFbmFibGUvZGlzYWJsZSBpbnRlcnJ1cHRzLiAgKi8KKyNkZWZpbmUgbG9jYWxfaXJxX2VuYWJsZSgpCV9fYXNtX18gX192b2xhdGlsZV9fICgiZWkiKQorI2RlZmluZSBsb2NhbF9pcnFfZGlzYWJsZSgpCV9fYXNtX18gX192b2xhdGlsZV9fICgiZGkiKQorCisjZGVmaW5lIGxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpIFwKKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzdHNyICUxLCAlMCIgOiAiPXIiIChmbGFncykgOiAiaSIgKFNSX1BTVykpCisjZGVmaW5lIGxvY2FsX3Jlc3RvcmVfZmxhZ3MoZmxhZ3MpIFwKKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJsZHNyICUwLCAlMSIgOjogInIiIChmbGFncyksICJpIiAoU1JfUFNXKSkKKworLyogRm9yIHNwaW5sb2NrcyBldGMgKi8KKyNkZWZpbmUJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpIFwKKyAgZG8geyBsb2NhbF9zYXZlX2ZsYWdzIChmbGFncyk7IGxvY2FsX2lycV9kaXNhYmxlICgpOyB9IHdoaWxlICgwKSAKKyNkZWZpbmUgbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpIFwKKyAgbG9jYWxfcmVzdG9yZV9mbGFncyAoZmxhZ3MpOworCisKK3N0YXRpYyBpbmxpbmUgaW50IGlycXNfZGlzYWJsZWQgKHZvaWQpCit7CisJdW5zaWduZWQgZmxhZ3M7CisJbG9jYWxfc2F2ZV9mbGFncyAoZmxhZ3MpOworCXJldHVybiAhIShmbGFncyAmIDB4MjApOworfQorCisKKy8qCisgKiBGb3JjZSBzdHJpY3QgQ1BVIG9yZGVyaW5nLgorICogTm90IHJlYWxseSByZXF1aXJlZCBvbiB2ODUwLi4uCisgKi8KKyNkZWZpbmUgbm9wKCkJCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm5vcCIpCisjZGVmaW5lIG1iKCkJCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIiIgOjo6ICJtZW1vcnkiKQorI2RlZmluZSBybWIoKQkJCW1iICgpCisjZGVmaW5lIHdtYigpCQkJbWIgKCkKKyNkZWZpbmUgcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQkoKHZvaWQpMCkKKyNkZWZpbmUgc2V0X3JtYih2YXIsIHZhbHVlKQlkbyB7IHhjaGcgKCZ2YXIsIHZhbHVlKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgc2V0X21iKHZhciwgdmFsdWUpCXNldF9ybWIgKHZhciwgdmFsdWUpCisjZGVmaW5lIHNldF93bWIodmFyLCB2YWx1ZSkJZG8geyB2YXIgPSB2YWx1ZTsgd21iICgpOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIHNtcF9tYigpCW1iICgpCisjZGVmaW5lIHNtcF9ybWIoKQlybWIgKCkKKyNkZWZpbmUgc21wX3dtYigpCXdtYiAoKQorI2RlZmluZSBzbXBfcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQlyZWFkX2JhcnJpZXJfZGVwZW5kcygpCisKKyNkZWZpbmUgeGNoZyhwdHIsIHdpdGgpIFwKKyAgKChfX3R5cGVvZl9fICgqKHB0cikpKV9feGNoZyAoKHVuc2lnbmVkIGxvbmcpKHdpdGgpLCAocHRyKSwgc2l6ZW9mICgqKHB0cikpKSkKKyNkZWZpbmUgdGFzKHB0cikgKHhjaGcgKChwdHIpLCAxKSkKKworZXh0ZXJuIGlubGluZSB1bnNpZ25lZCBsb25nIF9feGNoZyAodW5zaWduZWQgbG9uZyB3aXRoLAorCQkJCSAgICBfX3ZvbGF0aWxlX18gdm9pZCAqcHRyLCBpbnQgc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIHRtcCwgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZSAoZmxhZ3MpOworCisJc3dpdGNoIChzaXplKSB7CisJY2FzZSAxOgorCQl0bXAgPSAqKHVuc2lnbmVkIGNoYXIgKilwdHI7CisJCSoodW5zaWduZWQgY2hhciAqKXB0ciA9IHdpdGg7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJdG1wID0gKih1bnNpZ25lZCBzaG9ydCAqKXB0cjsKKwkJKih1bnNpZ25lZCBzaG9ydCAqKXB0ciA9IHdpdGg7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJdG1wID0gKih1bnNpZ25lZCBsb25nICopcHRyOworCQkqKHVuc2lnbmVkIGxvbmcgKilwdHIgPSB3aXRoOworCQlicmVhazsKKwl9CisKKwlsb2NhbF9pcnFfcmVzdG9yZSAoZmxhZ3MpOworCisJcmV0dXJuIHRtcDsKK30KKworI2RlZmluZSBhcmNoX2FsaWduX3N0YWNrKHgpICh4KQorCisjZW5kaWYgLyogX19WODUwX1NZU1RFTV9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXY4NTAvdGVnLmggYi9pbmNsdWRlL2FzbS12ODUwL3RlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjYzhjN2QKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS12ODUwL3RlZy5oCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogaW5jbHVkZS9hc20tdjg1MC90ZWcuaCAtLSBOQjg1RS1URUcgY3B1IGNoaXAKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxLDAyLDAzICBORUMgRWxlY3Ryb25pY3MgQ29ycG9yYXRpb24KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEsMDIsMDMgIE1pbGVzIEJhZGVyIDxtaWxlc0BnbnUub3JnPgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMKKyAqIGFyY2hpdmUgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBXcml0dGVuIGJ5IE1pbGVzIEJhZGVyIDxtaWxlc0BnbnUub3JnPgorICovCisKKyNpZm5kZWYgX19WODUwX1RFR19IX18KKyNkZWZpbmUgX19WODUwX1RFR19IX18KKworCisvKiBUaGUgVEVHIHVzZXMgdGhlIFY4NTBFIGNwdSBjb3JlLiAgKi8KKyNpbmNsdWRlIDxhc20vdjg1MGUuaD4KKyNpbmNsdWRlIDxhc20vdjg1MGVfY2FjaGUuaD4KKworCisjZGVmaW5lIENQVV9NT0RFTAkidjg1MGUvbmI4NWUtdGVnIgorI2RlZmluZSBDUFVfTU9ERUxfTE9ORwkiTkVDIFY4NTBFL05CODVFIFRFRyIKKworCisvKiBGb3IgPGFzbS9lbnRyeS5oPiAqLworLyogV2UgdXNlIG9uLWNoaXAgUkFNLCBmb3IgYSBmZXcgbWlzY2VsbGFuZW91cyB2YXJpYWJsZXMgdGhhdCBtdXN0IGJlCisgICBhY2Nlc3NpYmxlIHVzaW5nIGEgbG9hZCBpbnN0cnVjdGlvbiByZWxhdGl2ZSB0byBSMC4gIE9uIHRoZSBOQjg1RS9URUcsCisgICBUaGVyZSdzIDYwS0Igb2YgaVJBTSBzdGFydGluZyBhdCAweEZGRkYwMDAwLCBob3dldmVyIHdlIG5lZWQgdGhlIGJhc2UKKyAgIGFkZHJlc3MgdG8gYmUgYWRkcmVzc2FibGUgYnkgYSAxNi1iaXQgc2lnbmVkIG9mZnNldCwgc28gd2Ugb25seSB1c2UgdGhlCisgICBzZWNvbmQgaGFsZiBvZiBpdCBzdGFydGluZyBmcm9tIDB4RkZGRjgwMDAuICAqLworI2RlZmluZSBSMF9SQU1fQUREUgkJCTB4RkZGRjgwMDAKKworCisvKiBIYXJkd2FyZS1zcGVjaWZpYyBpbnRlcnJ1cHQgbnVtYmVycyAoaW4gdGhlIGtlcm5lbCBJUlEgbmFtZXNwYWNlKS4KKyAgIFNvbWUgb2YgdGhlc2UgYXJlIHBhcmFtZXRlcml6ZWQgZXZlbiB0aG91Z2ggdGhlcmUncyBvbmx5IGEgc2luZ2xlCisgICBpbnRlcnJ1cHQsIGZvciBjb21wYXRpYmlsaXR5IHdpdGggc29tZSBnZW5lcmljIGNvZGUgdGhhdCB3b3JrcyBvbiBvdGhlcgorICAgcHJvY2Vzc29yIG1vZGVscy4gICovCisjZGVmaW5lIElSUV9JTlRDTUQobikJNgkvKiBpbnRlcnZhbCB0aW1lciBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRX0lOVENNRF9OVU0JMQorI2RlZmluZSBJUlFfSU5UU0VSKG4pCTE2CS8qIFVBUlQgcmVjZXB0aW9uIGVycm9yICovCisjZGVmaW5lIElSUV9JTlRTRVJfTlVNCTEKKyNkZWZpbmUgSVJRX0lOVFNSKG4pCTE3CS8qIFVBUlQgcmVjZXB0aW9uIGNvbXBsZXRpb24gKi8KKyNkZWZpbmUgSVJRX0lOVFNSX05VTQkxCisjZGVmaW5lIElSUV9JTlRTVChuKQkxOAkvKiBVQVJUIHRyYW5zbWlzc2lvbiBjb21wbGV0aW9uICovCisjZGVmaW5lIElSUV9JTlRTVF9OVU0JMQorCisvKiBGb3IgPGFzbS9pcnEuaD4gKi8KKyNkZWZpbmUgTlVNX0NQVV9JUlFTCTY0CisKKworLyogVEVHIFVBUlQgZGV0YWlscy4gICovCisjZGVmaW5lIFY4NTBFX1VBUlRfQkFTRV9BRERSKG4pCQkoMHhGRkZGRjYwMCArIDB4MTAgKiAobikpCisjZGVmaW5lIFY4NTBFX1VBUlRfQVNJTV9BRERSKG4pCQkoVjg1MEVfVUFSVF9CQVNFX0FERFIobikgKyAweDApCisjZGVmaW5lIFY4NTBFX1VBUlRfQVNJU19BRERSKG4pCQkoVjg1MEVfVUFSVF9CQVNFX0FERFIobikgKyAweDIpCisjZGVmaW5lIFY4NTBFX1VBUlRfQVNJRl9BRERSKG4pCQkoVjg1MEVfVUFSVF9CQVNFX0FERFIobikgKyAweDQpCisjZGVmaW5lIFY4NTBFX1VBUlRfQ0tTUl9BRERSKG4pCQkoVjg1MEVfVUFSVF9CQVNFX0FERFIobikgKyAweDYpCisjZGVmaW5lIFY4NTBFX1VBUlRfQlJHQ19BRERSKG4pCQkoVjg1MEVfVUFSVF9CQVNFX0FERFIobikgKyAweDgpCisjZGVmaW5lIFY4NTBFX1VBUlRfVFhCX0FERFIobikJCShWODUwRV9VQVJUX0JBU0VfQUREUihuKSArIDB4QSkKKyNkZWZpbmUgVjg1MEVfVUFSVF9SWEJfQUREUihuKQkJKFY4NTBFX1VBUlRfQkFTRV9BRERSKG4pICsgMHhDKQorI2RlZmluZSBWODUwRV9VQVJUX05VTV9DSEFOTkVMUwkJMQorI2RlZmluZSBWODUwRV9VQVJUX0JBU0VfRlJFUQkJQ1BVX0NMT0NLX0ZSRVEKKy8qIFRoaXMgaXMgYSBmdW5jdGlvbiB0aGF0IGdldHMgY2FsbGVkIGJlZm9yZSBjb25maWd1cmluZyB0aGUgVUFSVC4gICovCisjZGVmaW5lIFY4NTBFX1VBUlRfUFJFX0NPTkZJR1VSRQl0ZWdfdWFydF9wcmVfY29uZmlndXJlCisjaWZuZGVmIF9fQVNTRU1CTFlfXworZXh0ZXJuIHZvaWQgdGVnX3VhcnRfcHJlX2NvbmZpZ3VyZSAodW5zaWduZWQgY2hhbiwKKwkJCQkgICAgdW5zaWduZWQgY2ZsYWdzLCB1bnNpZ25lZCBiYXVkKTsKKyNlbmRpZgorCisKKy8qIFRoZSBURUcgUlRQVS4gICovCisjZGVmaW5lIFY4NTBFX1JUUFVfQkFTRV9BRERSCQkweEZGRkZGMjEwCisKKworLyogVEVHIHNlcmllcyB0aW1lciBEIGRldGFpbHMuICAqLworI2RlZmluZSBWODUwRV9USU1FUl9EX0JBU0VfQUREUgkJMHhGRkZGRjIxMAorI2RlZmluZSBWODUwRV9USU1FUl9EX1RNQ0RfQkFTRV9BRERSIAkoVjg1MEVfVElNRVJfRF9CQVNFX0FERFIgKyAweDApCisjZGVmaW5lIFY4NTBFX1RJTUVSX0RfVE1EX0JBU0VfQUREUiAJKFY4NTBFX1RJTUVSX0RfQkFTRV9BRERSICsgMHg0KQorI2RlZmluZSBWODUwRV9USU1FUl9EX0NNRF9CQVNFX0FERFIgCShWODUwRV9USU1FUl9EX0JBU0VfQUREUiArIDB4OCkKKyNkZWZpbmUgVjg1MEVfVElNRVJfRF9CQVNFX0ZSRVEJCUNQVV9DTE9DS19GUkVRCisKKworLyogYEludGVycnVwdCBTb3VyY2UgU2VsZWN0JyBjb250cm9sIHJlZ2lzdGVyLiAgKi8KKyNkZWZpbmUgVEVHX0lTU19BRERSCQkJMHhGRkZGRjdGQQorI2RlZmluZSBURUdfSVNTCQkJCSgqKHZvbGF0aWxlIHU4ICopVEVHX0lTU19BRERSKQorCisvKiBQb3J0IDAgSS9PIHJlZ2lzdGVyIChiaXRzIDAtMyB1c2VkKS4gICovCisjZGVmaW5lIFRFR19QT1JUMF9JT19BRERSCQkweEZGRkZGN0YyCisjZGVmaW5lIFRFR19QT1JUMF9JTwkJCSgqKHZvbGF0aWxlIHU4ICopVEVHX1BPUlQwX0lPX0FERFIpCisvKiBQb3J0IDAgY29udHJvbCByZWdpc3RlciAoYml0cyAwLTMgY29udHJvbCBtb2RlLCAwID0gb3V0cHV0LCAxID0gaW5wdXQpLiAgKi8KKyNkZWZpbmUgVEVHX1BPUlQwX1BNX0FERFIJCTB4RkZGRkY3RjQKKyNkZWZpbmUgVEVHX1BPUlQwX1BNCQkJKCoodm9sYXRpbGUgdTggKilURUdfUE9SVDBfUE1fQUREUikKKworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworZXh0ZXJuIHZvaWQgdGVnX2luaXRfaXJxcyAodm9pZCk7CisjZW5kaWYKKworCisjZW5kaWYgLyogX19WODUwX1RFR19IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXY4NTAvdGVybWJpdHMuaCBiL2luY2x1ZGUvYXNtLXY4NTAvdGVybWJpdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTJkNGUyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdjg1MC90ZXJtYml0cy5oCkBAIC0wLDAgKzEsMTc1IEBACisjaWZuZGVmIF9fVjg1MF9URVJNQklUU19IX18KKyNkZWZpbmUgX19WODUwX1RFUk1CSVRTX0hfXworCisjaW5jbHVkZSA8bGludXgvcG9zaXhfdHlwZXMuaD4KKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyCWNjX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludAlzcGVlZF90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQJdGNmbGFnX3Q7CisKKyNkZWZpbmUgTkNDUyAxOQorc3RydWN0IHRlcm1pb3MgeworCXRjZmxhZ190IGNfaWZsYWc7CQkvKiBpbnB1dCBtb2RlIGZsYWdzICovCisJdGNmbGFnX3QgY19vZmxhZzsJCS8qIG91dHB1dCBtb2RlIGZsYWdzICovCisJdGNmbGFnX3QgY19jZmxhZzsJCS8qIGNvbnRyb2wgbW9kZSBmbGFncyAqLworCXRjZmxhZ190IGNfbGZsYWc7CQkvKiBsb2NhbCBtb2RlIGZsYWdzICovCisJY2NfdCBjX2xpbmU7CQkJLyogbGluZSBkaXNjaXBsaW5lICovCisJY2NfdCBjX2NjW05DQ1NdOwkJLyogY29udHJvbCBjaGFyYWN0ZXJzICovCit9OworCisvKiBjX2NjIGNoYXJhY3RlcnMgKi8KKyNkZWZpbmUgVklOVFIgMAorI2RlZmluZSBWUVVJVCAxCisjZGVmaW5lIFZFUkFTRSAyCisjZGVmaW5lIFZLSUxMIDMKKyNkZWZpbmUgVkVPRiA0CisjZGVmaW5lIFZUSU1FIDUKKyNkZWZpbmUgVk1JTiA2CisjZGVmaW5lIFZTV1RDIDcKKyNkZWZpbmUgVlNUQVJUIDgKKyNkZWZpbmUgVlNUT1AgOQorI2RlZmluZSBWU1VTUCAxMAorI2RlZmluZSBWRU9MIDExCisjZGVmaW5lIFZSRVBSSU5UIDEyCisjZGVmaW5lIFZESVNDQVJEIDEzCisjZGVmaW5lIFZXRVJBU0UgMTQKKyNkZWZpbmUgVkxORVhUIDE1CisjZGVmaW5lIFZFT0wyIDE2CisKKworLyogY19pZmxhZyBiaXRzICovCisjZGVmaW5lIElHTkJSSwkwMDAwMDAxCisjZGVmaW5lIEJSS0lOVAkwMDAwMDAyCisjZGVmaW5lIElHTlBBUgkwMDAwMDA0CisjZGVmaW5lIFBBUk1SSwkwMDAwMDEwCisjZGVmaW5lIElOUENLCTAwMDAwMjAKKyNkZWZpbmUgSVNUUklQCTAwMDAwNDAKKyNkZWZpbmUgSU5MQ1IJMDAwMDEwMAorI2RlZmluZSBJR05DUgkwMDAwMjAwCisjZGVmaW5lIElDUk5MCTAwMDA0MDAKKyNkZWZpbmUgSVVDTEMJMDAwMTAwMAorI2RlZmluZSBJWE9OCTAwMDIwMDAKKyNkZWZpbmUgSVhBTlkJMDAwNDAwMAorI2RlZmluZSBJWE9GRgkwMDEwMDAwCisjZGVmaW5lIElNQVhCRUwJMDAyMDAwMAorI2RlZmluZSBJVVRGOAkwMDQwMDAwCisKKy8qIGNfb2ZsYWcgYml0cyAqLworI2RlZmluZSBPUE9TVAkwMDAwMDAxCisjZGVmaW5lIE9MQ1VDCTAwMDAwMDIKKyNkZWZpbmUgT05MQ1IJMDAwMDAwNAorI2RlZmluZSBPQ1JOTAkwMDAwMDEwCisjZGVmaW5lIE9OT0NSCTAwMDAwMjAKKyNkZWZpbmUgT05MUkVUCTAwMDAwNDAKKyNkZWZpbmUgT0ZJTEwJMDAwMDEwMAorI2RlZmluZSBPRkRFTAkwMDAwMjAwCisjZGVmaW5lIE5MRExZCTAwMDA0MDAKKyNkZWZpbmUgICBOTDAJMDAwMDAwMAorI2RlZmluZSAgIE5MMQkwMDAwNDAwCisjZGVmaW5lIENSRExZCTAwMDMwMDAKKyNkZWZpbmUgICBDUjAJMDAwMDAwMAorI2RlZmluZSAgIENSMQkwMDAxMDAwCisjZGVmaW5lICAgQ1IyCTAwMDIwMDAKKyNkZWZpbmUgICBDUjMJMDAwMzAwMAorI2RlZmluZSBUQUJETFkJMDAxNDAwMAorI2RlZmluZSAgIFRBQjAJMDAwMDAwMAorI2RlZmluZSAgIFRBQjEJMDAwNDAwMAorI2RlZmluZSAgIFRBQjIJMDAxMDAwMAorI2RlZmluZSAgIFRBQjMJMDAxNDAwMAorI2RlZmluZSAgIFhUQUJTCTAwMTQwMDAKKyNkZWZpbmUgQlNETFkJMDAyMDAwMAorI2RlZmluZSAgIEJTMAkwMDAwMDAwCisjZGVmaW5lICAgQlMxCTAwMjAwMDAKKyNkZWZpbmUgVlRETFkJMDA0MDAwMAorI2RlZmluZSAgIFZUMAkwMDAwMDAwCisjZGVmaW5lICAgVlQxCTAwNDAwMDAKKyNkZWZpbmUgRkZETFkJMDEwMDAwMAorI2RlZmluZSAgIEZGMAkwMDAwMDAwCisjZGVmaW5lICAgRkYxCTAxMDAwMDAKKworLyogY19jZmxhZyBiaXQgbWVhbmluZyAqLworI2RlZmluZSBDQkFVRAkwMDEwMDE3CisjZGVmaW5lICBCMAkwMDAwMDAwCQkvKiBoYW5nIHVwICovCisjZGVmaW5lICBCNTAJMDAwMDAwMQorI2RlZmluZSAgQjc1CTAwMDAwMDIKKyNkZWZpbmUgIEIxMTAJMDAwMDAwMworI2RlZmluZSAgQjEzNAkwMDAwMDA0CisjZGVmaW5lICBCMTUwCTAwMDAwMDUKKyNkZWZpbmUgIEIyMDAJMDAwMDAwNgorI2RlZmluZSAgQjMwMAkwMDAwMDA3CisjZGVmaW5lICBCNjAwCTAwMDAwMTAKKyNkZWZpbmUgIEIxMjAwCTAwMDAwMTEKKyNkZWZpbmUgIEIxODAwCTAwMDAwMTIKKyNkZWZpbmUgIEIyNDAwCTAwMDAwMTMKKyNkZWZpbmUgIEI0ODAwCTAwMDAwMTQKKyNkZWZpbmUgIEI5NjAwCTAwMDAwMTUKKyNkZWZpbmUgIEIxOTIwMAkwMDAwMDE2CisjZGVmaW5lICBCMzg0MDAJMDAwMDAxNworI2RlZmluZSBFWFRBIEIxOTIwMAorI2RlZmluZSBFWFRCIEIzODQwMAorI2RlZmluZSBDU0laRQkwMDAwMDYwCisjZGVmaW5lICAgQ1M1CTAwMDAwMDAKKyNkZWZpbmUgICBDUzYJMDAwMDAyMAorI2RlZmluZSAgIENTNwkwMDAwMDQwCisjZGVmaW5lICAgQ1M4CTAwMDAwNjAKKyNkZWZpbmUgQ1NUT1BCCTAwMDAxMDAKKyNkZWZpbmUgQ1JFQUQJMDAwMDIwMAorI2RlZmluZSBQQVJFTkIJMDAwMDQwMAorI2RlZmluZSBQQVJPREQJMDAwMTAwMAorI2RlZmluZSBIVVBDTAkwMDAyMDAwCisjZGVmaW5lIENMT0NBTAkwMDA0MDAwCisjZGVmaW5lIENCQVVERVggMDAxMDAwMAorI2RlZmluZSAgICBCNTc2MDAgMDAxMDAwMQorI2RlZmluZSAgIEIxMTUyMDAgMDAxMDAwMgorI2RlZmluZSAgIEIyMzA0MDAgMDAxMDAwMworI2RlZmluZSAgIEI0NjA4MDAgMDAxMDAwNAorI2RlZmluZSAgIEI1MDAwMDAgMDAxMDAwNQorI2RlZmluZSAgIEI1NzYwMDAgMDAxMDAwNgorI2RlZmluZSAgIEI5MjE2MDAgMDAxMDAwNworI2RlZmluZSAgQjEwMDAwMDAgMDAxMDAxMAorI2RlZmluZSAgQjExNTIwMDAgMDAxMDAxMQorI2RlZmluZSAgQjE1MDAwMDAgMDAxMDAxMgorI2RlZmluZSAgQjIwMDAwMDAgMDAxMDAxMworI2RlZmluZSAgQjI1MDAwMDAgMDAxMDAxNAorI2RlZmluZSAgQjMwMDAwMDAgMDAxMDAxNQorI2RlZmluZSAgQjM1MDAwMDAgMDAxMDAxNgorI2RlZmluZSAgQjQwMDAwMDAgMDAxMDAxNworI2RlZmluZSBDSUJBVUQJICAwMDIwMDM2MDAwMDAJLyogaW5wdXQgYmF1ZCByYXRlIChub3QgdXNlZCkgKi8KKyNkZWZpbmUgQ01TUEFSCSAgMDEwMDAwMDAwMDAwCQkvKiBtYXJrIG9yIHNwYWNlIChzdGljaykgcGFyaXR5ICovCisjZGVmaW5lIENSVFNDVFMJICAwMjAwMDAwMDAwMDAJCS8qIGZsb3cgY29udHJvbCAqLworCisvKiBjX2xmbGFnIGJpdHMgKi8KKyNkZWZpbmUgSVNJRwkwMDAwMDAxCisjZGVmaW5lIElDQU5PTgkwMDAwMDAyCisjZGVmaW5lIFhDQVNFCTAwMDAwMDQKKyNkZWZpbmUgRUNITwkwMDAwMDEwCisjZGVmaW5lIEVDSE9FCTAwMDAwMjAKKyNkZWZpbmUgRUNIT0sJMDAwMDA0MAorI2RlZmluZSBFQ0hPTkwJMDAwMDEwMAorI2RlZmluZSBOT0ZMU0gJMDAwMDIwMAorI2RlZmluZSBUT1NUT1AJMDAwMDQwMAorI2RlZmluZSBFQ0hPQ1RMCTAwMDEwMDAKKyNkZWZpbmUgRUNIT1BSVAkwMDAyMDAwCisjZGVmaW5lIEVDSE9LRQkwMDA0MDAwCisjZGVmaW5lIEZMVVNITwkwMDEwMDAwCisjZGVmaW5lIFBFTkRJTgkwMDQwMDAwCisjZGVmaW5lIElFWFRFTgkwMTAwMDAwCisKKworLyogdGNmbG93KCkgYW5kIFRDWE9OQyB1c2UgdGhlc2UgKi8KKyNkZWZpbmUJVENPT0ZGCQkwCisjZGVmaW5lCVRDT09OCQkxCisjZGVmaW5lCVRDSU9GRgkJMgorI2RlZmluZQlUQ0lPTgkJMworCisvKiB0Y2ZsdXNoKCkgYW5kIFRDRkxTSCB1c2UgdGhlc2UgKi8KKyNkZWZpbmUJVENJRkxVU0gJMAorI2RlZmluZQlUQ09GTFVTSAkxCisjZGVmaW5lCVRDSU9GTFVTSAkyCisKKy8qIHRjc2V0YXR0ciB1c2VzIHRoZXNlICovCisjZGVmaW5lCVRDU0FOT1cJCTAKKyNkZWZpbmUJVENTQURSQUlOCTEKKyNkZWZpbmUJVENTQUZMVVNICTIKKworI2VuZGlmIC8qIF9fVjg1MF9URVJNQklUU19IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXY4NTAvdGVybWlvcy5oIGIvaW5jbHVkZS9hc20tdjg1MC90ZXJtaW9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzllOTdiNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXY4NTAvdGVybWlvcy5oCkBAIC0wLDAgKzEsMTA2IEBACisjaWZuZGVmIF9fVjg1MF9URVJNSU9TX0hfXworI2RlZmluZSBfX1Y4NTBfVEVSTUlPU19IX18KKworI2luY2x1ZGUgPGFzbS90ZXJtYml0cy5oPgorI2luY2x1ZGUgPGFzbS9pb2N0bHMuaD4KKworc3RydWN0IHdpbnNpemUgeworCXVuc2lnbmVkIHNob3J0IHdzX3JvdzsKKwl1bnNpZ25lZCBzaG9ydCB3c19jb2w7CisJdW5zaWduZWQgc2hvcnQgd3NfeHBpeGVsOworCXVuc2lnbmVkIHNob3J0IHdzX3lwaXhlbDsKK307CisKKyNkZWZpbmUgTkNDIDgKK3N0cnVjdCB0ZXJtaW8geworCXVuc2lnbmVkIHNob3J0IGNfaWZsYWc7CQkvKiBpbnB1dCBtb2RlIGZsYWdzICovCisJdW5zaWduZWQgc2hvcnQgY19vZmxhZzsJCS8qIG91dHB1dCBtb2RlIGZsYWdzICovCisJdW5zaWduZWQgc2hvcnQgY19jZmxhZzsJCS8qIGNvbnRyb2wgbW9kZSBmbGFncyAqLworCXVuc2lnbmVkIHNob3J0IGNfbGZsYWc7CQkvKiBsb2NhbCBtb2RlIGZsYWdzICovCisJdW5zaWduZWQgY2hhciBjX2xpbmU7CQkvKiBsaW5lIGRpc2NpcGxpbmUgKi8KKwl1bnNpZ25lZCBjaGFyIGNfY2NbTkNDXTsJLyogY29udHJvbCBjaGFyYWN0ZXJzICovCit9OworCisvKiBtb2RlbSBsaW5lcyAqLworI2RlZmluZSBUSU9DTV9MRQkweDAwMQorI2RlZmluZSBUSU9DTV9EVFIJMHgwMDIKKyNkZWZpbmUgVElPQ01fUlRTCTB4MDA0CisjZGVmaW5lIFRJT0NNX1NUCTB4MDA4CisjZGVmaW5lIFRJT0NNX1NSCTB4MDEwCisjZGVmaW5lIFRJT0NNX0NUUwkweDAyMAorI2RlZmluZSBUSU9DTV9DQVIJMHgwNDAKKyNkZWZpbmUgVElPQ01fUk5HCTB4MDgwCisjZGVmaW5lIFRJT0NNX0RTUgkweDEwMAorI2RlZmluZSBUSU9DTV9DRAlUSU9DTV9DQVIKKyNkZWZpbmUgVElPQ01fUkkJVElPQ01fUk5HCisjZGVmaW5lIFRJT0NNX09VVDEJMHgyMDAwCisjZGVmaW5lIFRJT0NNX09VVDIJMHg0MDAwCisjZGVmaW5lIFRJT0NNX0xPT1AJMHg4MDAwCisKKy8qIGlvY3RsIChmZCwgVElPQ1NFUkdFVExTUiwgJnJlc3VsdCkgd2hlcmUgcmVzdWx0IG1heSBiZSBhcyBiZWxvdyAqLworCisvKiBsaW5lIGRpc2NpcGxpbmVzICovCisjZGVmaW5lIE5fVFRZCQkwCisjZGVmaW5lIE5fU0xJUAkJMQorI2RlZmluZSBOX01PVVNFCQkyCisjZGVmaW5lIE5fUFBQCQkzCisjZGVmaW5lIE5fU1RSSVAJCTQKKyNkZWZpbmUgTl9BWDI1CQk1CisjZGVmaW5lIE5fWDI1CQk2CS8qIFguMjUgYXN5bmMgKi8KKyNkZWZpbmUgTl82UEFDSwkJNworI2RlZmluZSBOX01BU0MJCTgJLyogUmVzZXJ2ZWQgZm9yIE1vYml0ZXggbW9kdWxlIDxrYXpAY2FmZS5uZXQ+ICovCisjZGVmaW5lIE5fUjM5NjQJCTkJLyogUmVzZXJ2ZWQgZm9yIFNpbWF0aWMgUjM5NjQgbW9kdWxlICovCisjZGVmaW5lIE5fUFJPRklCVVNfRkRMCTEwCS8qIFJlc2VydmVkIGZvciBQcm9maWJ1cyA8RGF2ZUBtdmhpLmNvbT4gKi8KKyNkZWZpbmUgTl9JUkRBCQkxMQkvKiBMaW51eCBJUiAtIGh0dHA6Ly9pcmRhLnNvdXJjZWZvcmdlLm5ldC8gKi8KKyNkZWZpbmUgTl9TTVNCTE9DSwkxMgkvKiBTTVMgYmxvY2sgbW9kZSAtIGZvciB0YWxraW5nIHRvIEdTTSBkYXRhIGNhcmRzIGFib3V0IFNNUyBtZXNzYWdlcyAqLworI2RlZmluZSBOX0hETEMJCTEzCS8qIHN5bmNocm9ub3VzIEhETEMgKi8KKyNkZWZpbmUgTl9TWU5DX1BQUAkxNAkvKiBzeW5jaHJvbm91cyBQUFAgKi8KKyNkZWZpbmUgTl9IQ0kJCTE1ICAvKiBCbHVldG9vdGggSENJIFVBUlQgKi8KKworI2lmZGVmIF9fS0VSTkVMX18KKworLyoJaW50cj1eQwkJcXVpdD1eXAkJZXJhc2U9ZGVsCWtpbGw9XlUKKwllb2Y9XkQJCXZ0aW1lPVwwCXZtaW49XDEJCXN4dGM9XDAKKwlzdGFydD1eUQlzdG9wPV5TCQlzdXNwPV5aCQllb2w9XDAKKwlyZXByaW50PV5SCWRpc2NhcmQ9XlUJd2VyYXNlPV5XCWxuZXh0PV5WCisJZW9sMj1cMAorKi8KKyNkZWZpbmUgSU5JVF9DX0NDICJcMDAzXDAzNFwxNzdcMDI1XDAwNFwwXDFcMFwwMjFcMDIzXDAzMlwwXDAyMlwwMTdcMDI3XDAyNlwwIgorCisvKgorICogVHJhbnNsYXRlIGEgInRlcm1pbyIgc3RydWN0dXJlIGludG8gYSAidGVybWlvcyIuIFVnaC4KKyAqLworI2RlZmluZSBTRVRfTE9XX1RFUk1JT1NfQklUUyh0ZXJtaW9zLCB0ZXJtaW8sIHgpIHsgXAorCXVuc2lnbmVkIHNob3J0IF9fdG1wOyBcCisJZ2V0X3VzZXIoX190bXAsJih0ZXJtaW8pLT54KTsgXAorCSoodW5zaWduZWQgc2hvcnQgKikgJih0ZXJtaW9zKS0+eCA9IF9fdG1wOyBcCit9CisKKyNkZWZpbmUgdXNlcl90ZXJtaW9fdG9fa2VybmVsX3Rlcm1pb3ModGVybWlvcywgdGVybWlvKSBcCisoeyBcCisJU0VUX0xPV19URVJNSU9TX0JJVFModGVybWlvcywgdGVybWlvLCBjX2lmbGFnKTsgXAorCVNFVF9MT1dfVEVSTUlPU19CSVRTKHRlcm1pb3MsIHRlcm1pbywgY19vZmxhZyk7IFwKKwlTRVRfTE9XX1RFUk1JT1NfQklUUyh0ZXJtaW9zLCB0ZXJtaW8sIGNfY2ZsYWcpOyBcCisJU0VUX0xPV19URVJNSU9TX0JJVFModGVybWlvcywgdGVybWlvLCBjX2xmbGFnKTsgXAorCWNvcHlfZnJvbV91c2VyKCh0ZXJtaW9zKS0+Y19jYywgKHRlcm1pbyktPmNfY2MsIE5DQyk7IFwKK30pCisKKy8qCisgKiBUcmFuc2xhdGUgYSAidGVybWlvcyIgc3RydWN0dXJlIGludG8gYSAidGVybWlvIi4gVWdoLgorICovCisjZGVmaW5lIGtlcm5lbF90ZXJtaW9zX3RvX3VzZXJfdGVybWlvKHRlcm1pbywgdGVybWlvcykgXAorKHsgXAorCXB1dF91c2VyKCh0ZXJtaW9zKS0+Y19pZmxhZywgJih0ZXJtaW8pLT5jX2lmbGFnKTsgXAorCXB1dF91c2VyKCh0ZXJtaW9zKS0+Y19vZmxhZywgJih0ZXJtaW8pLT5jX29mbGFnKTsgXAorCXB1dF91c2VyKCh0ZXJtaW9zKS0+Y19jZmxhZywgJih0ZXJtaW8pLT5jX2NmbGFnKTsgXAorCXB1dF91c2VyKCh0ZXJtaW9zKS0+Y19sZmxhZywgJih0ZXJtaW8pLT5jX2xmbGFnKTsgXAorCXB1dF91c2VyKCh0ZXJtaW9zKS0+Y19saW5lLCAgJih0ZXJtaW8pLT5jX2xpbmUpOyBcCisJY29weV90b191c2VyKCh0ZXJtaW8pLT5jX2NjLCAodGVybWlvcyktPmNfY2MsIE5DQyk7IFwKK30pCisKKyNkZWZpbmUgdXNlcl90ZXJtaW9zX3RvX2tlcm5lbF90ZXJtaW9zKGssIHUpIGNvcHlfZnJvbV91c2VyKGssIHUsIHNpemVvZihzdHJ1Y3QgdGVybWlvcykpCisjZGVmaW5lIGtlcm5lbF90ZXJtaW9zX3RvX3VzZXJfdGVybWlvcyh1LCBrKSBjb3B5X3RvX3VzZXIodSwgaywgc2l6ZW9mKHN0cnVjdCB0ZXJtaW9zKSkKKworI2VuZGlmCS8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmCS8qIF9fVjg1MF9URVJNSU9TX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdjg1MC90aHJlYWRfaW5mby5oIGIvaW5jbHVkZS9hc20tdjg1MC90aHJlYWRfaW5mby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyZWY0NDUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS12ODUwL3RocmVhZF9pbmZvLmgKQEAgLTAsMCArMSwxMzIgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS12ODUwL3RocmVhZF9pbmZvLmggLS0gdjg1MCBsb3ctbGV2ZWwgdGhyZWFkIGluZm9ybWF0aW9uCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMiAgTkVDIENvcnBvcmF0aW9uCisgKiAgQ29weXJpZ2h0IChDKSAyMDAyICBNaWxlcyBCYWRlciA8bWlsZXNAZ251Lm9yZz4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDIgIERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKiAgICAtIEluY29ycG9yYXRpbmcgc3VnZ2VzdGlvbnMgbWFkZSBieSBMaW51cyBUb3J2YWxkcyBhbmQgRGF2ZSBNaWxsZXIKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzCisgKiBhcmNoaXZlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogVGhpcyBmaWxlIHdhcyBkZXJpdmVkIGZyb20gdGhlIFBQQyB2ZXJzaW9uLCBpbmNsdWRlL2FzbS1wcGMvdGhyZWFkX2luZm8uaAorICogd2hpY2ggd2FzIGFkYXB0ZWQgZnJvbSB0aGUgaTM4NiB2ZXJzaW9uIGJ5IFBhdWwgTWFja2VycmFzCisgKi8KKworI2lmbmRlZiBfX1Y4NTBfVEhSRUFEX0lORk9fSF9fCisjZGVmaW5lIF9fVjg1MF9USFJFQURfSU5GT19IX18KKworI2lmZGVmIF9fS0VSTkVMX18KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworLyoKKyAqIGxvdyBsZXZlbCB0YXNrIGRhdGEuCisgKiBJZiB5b3UgY2hhbmdlIHRoaXMsIGNoYW5nZSB0aGUgVElfKiBvZmZzZXRzIGJlbG93IHRvIG1hdGNoLgorICovCitzdHJ1Y3QgdGhyZWFkX2luZm8geworCXN0cnVjdCB0YXNrX3N0cnVjdAkqdGFzazsJCS8qIG1haW4gdGFzayBzdHJ1Y3R1cmUgKi8KKwlzdHJ1Y3QgZXhlY19kb21haW4JKmV4ZWNfZG9tYWluOwkvKiBleGVjdXRpb24gZG9tYWluICovCisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CQkvKiBsb3cgbGV2ZWwgZmxhZ3MgKi8KKwlpbnQJCQljcHU7CQkvKiBjcHUgd2UncmUgb24gKi8KKwlpbnQJCQlwcmVlbXB0X2NvdW50OworCXN0cnVjdCByZXN0YXJ0X2Jsb2NrCXJlc3RhcnRfYmxvY2s7Cit9OworCisjZGVmaW5lIElOSVRfVEhSRUFEX0lORk8odHNrKQkJCQkJCSAgICAgIFwKK3sJCQkJCQkJCQkgICAgICBcCisJLnRhc2sgPQkJJnRzaywJCQkJCQkgICAgICBcCisJLmV4ZWNfZG9tYWluID0JJmRlZmF1bHRfZXhlY19kb21haW4sCQkJCSAgICAgIFwKKwkuZmxhZ3MgPQkwLAkJCQkJCSAgICAgIFwKKwkuY3B1ID0JCTAsCQkJCQkJICAgICAgXAorCS5wcmVlbXB0X2NvdW50ID0gMSwJCQkJCQkgICAgICBcCisJLnJlc3RhcnRfYmxvY2sgPSB7CQkJCQkJICAgICAgXAorCQkuZm4gPSBkb19ub19yZXN0YXJ0X3N5c2NhbGwsCQkJCSAgICAgIFwKKwl9LAkJCQkJCQkJICAgICAgXAorfQorCisjZGVmaW5lIGluaXRfdGhyZWFkX2luZm8JKGluaXRfdGhyZWFkX3VuaW9uLnRocmVhZF9pbmZvKQorI2RlZmluZSBpbml0X3N0YWNrCQkoaW5pdF90aHJlYWRfdW5pb24uc3RhY2spCisKKy8qCisgKiBtYWNyb3MvZnVuY3Rpb25zIGZvciBnYWluaW5nIGFjY2VzcyB0byB0aGUgdGhyZWFkIGluZm9ybWF0aW9uIHN0cnVjdHVyZQorICovCisKKy8qIHRocmVhZCBpbmZvcm1hdGlvbiBhbGxvY2F0aW9uICovCisjZGVmaW5lIGFsbG9jX3RocmVhZF9pbmZvKHRzaykgKChzdHJ1Y3QgdGhyZWFkX2luZm8gKikgXAorCQkJCV9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwgMSkpCisjZGVmaW5lIGZyZWVfdGhyZWFkX2luZm8odGkpCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpICh0aSksIDEpCisjZGVmaW5lIGdldF90aHJlYWRfaW5mbyh0aSkJZ2V0X3Rhc2tfc3RydWN0KCh0aSktPnRhc2spCisjZGVmaW5lIHB1dF90aHJlYWRfaW5mbyh0aSkJcHV0X3Rhc2tfc3RydWN0KCh0aSktPnRhc2spCisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworCisvKgorICogT2Zmc2V0cyBpbiB0aHJlYWRfaW5mbyBzdHJ1Y3R1cmUsIHVzZWQgaW4gYXNzZW1ibHkgY29kZQorICovCisjZGVmaW5lIFRJX1RBU0sJCTAKKyNkZWZpbmUgVElfRVhFQ0RPTUFJTgk0CisjZGVmaW5lIFRJX0ZMQUdTCTgKKyNkZWZpbmUgVElfQ1BVCQkxMgorI2RlZmluZSBUSV9QUkVFTVBUCTE2CisKKyNkZWZpbmUgUFJFRU1QVF9BQ1RJVkUJCTB4NDAwMDAwMAorCisvKgorICogdGhyZWFkIGluZm9ybWF0aW9uIGZsYWcgYml0IG51bWJlcnMKKyAqLworI2RlZmluZSBUSUZfU1lTQ0FMTF9UUkFDRQkwCS8qIHN5c2NhbGwgdHJhY2UgYWN0aXZlICovCisjZGVmaW5lIFRJRl9OT1RJRllfUkVTVU1FCTEJLyogcmVzdW1wdGlvbiBub3RpZmljYXRpb24gcmVxdWVzdGVkICovCisjZGVmaW5lIFRJRl9TSUdQRU5ESU5HCQkyCS8qIHNpZ25hbCBwZW5kaW5nICovCisjZGVmaW5lIFRJRl9ORUVEX1JFU0NIRUQJMwkvKiByZXNjaGVkdWxpbmcgbmVjZXNzYXJ5ICovCisjZGVmaW5lIFRJRl9QT0xMSU5HX05SRkxBRwk0CS8qIHRydWUgaWYgcG9sbF9pZGxlKCkgaXMgcG9sbGluZworCQkJCQkgICBUSUZfTkVFRF9SRVNDSEVEICovCisjZGVmaW5lIFRJRl9NRU1ESUUJCTUKKworLyogYXMgYWJvdmUsIGJ1dCBhcyBiaXQgdmFsdWVzICovCisjZGVmaW5lIF9USUZfU1lTQ0FMTF9UUkFDRQkoMTw8VElGX1NZU0NBTExfVFJBQ0UpCisjZGVmaW5lIF9USUZfTk9USUZZX1JFU1VNRQkoMTw8VElGX05PVElGWV9SRVNVTUUpCisjZGVmaW5lIF9USUZfU0lHUEVORElORwkJKDE8PFRJRl9TSUdQRU5ESU5HKQorI2RlZmluZSBfVElGX05FRURfUkVTQ0hFRAkoMTw8VElGX05FRURfUkVTQ0hFRCkKKyNkZWZpbmUgX1RJRl9QT0xMSU5HX05SRkxBRwkoMTw8VElGX1BPTExJTkdfTlJGTEFHKQorCisKKy8qIFNpemUgb2Yga2VybmVsIHN0YWNrIGZvciBlYWNoIHByb2Nlc3MuICAqLworI2RlZmluZSBUSFJFQURfU0laRQkJMHgyMDAwCisKKy8qIFRoZSBhbGlnbm1lbnQgb2Yga2VybmVsIHRocmVhZHMsIHdpdGggdGhyZWFkX2luZm8gc3RydWN0dXJlcyBhdCB0aGVpcgorICAgYmFzZS4gIFRodXMsIGEgcG9pbnRlciBmb3IgYSB0YXNrJ3MgdGFzayBzdHJ1Y3R1cmUgY2FuIGJlIGRlcml2ZWQgZnJvbQorICAgaXRzIGtlcm5lbCBzdGFjayBwb2ludGVyLiAgKi8KKyNkZWZpbmUgVEhSRUFEX0FMSUdOTUVOVAlUSFJFQURfU0laRQorI2RlZmluZSBUSFJFQURfTUFTSwkJKC1USFJFQURfQUxJR05NRU5UKQorCisKKyNpZmRlZiBfX0FTU0VNQkxZX18KKworLyogUHV0IGEgcG9pbnRlciB0byB0aGUgY3VycmVudCB0aHJlYWRfaW5mbyBzdHJ1Y3R1cmUgaW50byBSRUcuICBOb3RlIHRoYXQKKyAgIHRoaXMgZGVmaW5pdGlvbiByZXF1aXJlcyBUSFJFQURfTUFTSyB0byBiZSByZXByZXNlbnRhYmxlIGFzIGEgc2lnbmVkCisgICAxNi1iaXQgdmFsdWUuICAqLworI2RlZmluZSBHRVRfQ1VSUkVOVF9USFJFQUQocmVnKQkJCQkJCVwKKyAgICAgICAgLyogVXNlIGBhZGRpJyBhbmQgdGhlbiBgYW5kJyBpbnN0ZWFkIG9mIGp1c3QgYGFuZGknLCBiZWNhdXNlCVwKKwkgICBgYWRkaScgc2lnbi1leHRlbmRzIHRoZSBpbW1lZGlhdGUgdmFsdWUsIHdoZXJlYXMgYGFuZGknCVwKKwkgICB6ZXJvLWV4dGVuZHMgaXQuICAqLwkJCQkJCVwKKwlhZGRpCVRIUkVBRF9NQVNLLCByMCwgcmVnOwkJCQkJXAorCWFuZAlzcCwgcmVnCisKKyNlbHNlCisKKy8qIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgdGhyZWFkX2luZm8gc3RydWN0dXJlLiAgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRocmVhZF9pbmZvICpjdXJyZW50X3RocmVhZF9pbmZvICh2b2lkKQoreworCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgc3AgX19hc21fXyAoInNwIik7CisJcmV0dXJuIChzdHJ1Y3QgdGhyZWFkX2luZm8gKikoc3AgJiBUSFJFQURfTUFTSyk7Cit9CisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX19WODUwX1RIUkVBRF9JTkZPX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdjg1MC90aW1leC5oIGIvaW5jbHVkZS9hc20tdjg1MC90aW1leC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNzllNWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS12ODUwL3RpbWV4LmgKQEAgLTAsMCArMSwxOCBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLXY4NTAvdGltZXguaAorICoKKyAqIHY4NTAgYXJjaGl0ZWN0dXJlIHRpbWV4IHNwZWNpZmljYXRpb25zCisgKi8KKyNpZm5kZWYgX19WODUwX1RJTUVYX0hfXworI2RlZmluZSBfX1Y4NTBfVElNRVhfSF9fCisKKyNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFCTExOTMxODAgLyogVW5kZXJseWluZyBIWiAqLworCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgY3ljbGVzX3Q7CisKK3N0YXRpYyBpbmxpbmUgY3ljbGVzX3QgZ2V0X2N5Y2xlcyh2b2lkKQoreworCXJldHVybiAwOworfQorCisjZW5kaWYgLyogX19WODUwX1RJTUVYX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdjg1MC90bGIuaCBiL2luY2x1ZGUvYXNtLXY4NTAvdGxiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNiYzllYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXY4NTAvdGxiLmgKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLXY4NTAvdGxiLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAyICBORUMgQ29ycG9yYXRpb24KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDIgIE1pbGVzIEJhZGVyIDxtaWxlc0BnbnUub3JnPgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMKKyAqIGFyY2hpdmUgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBXcml0dGVuIGJ5IE1pbGVzIEJhZGVyIDxtaWxlc0BnbnUub3JnPgorICovCisKKyNpZm5kZWYgX19WODUwX1RMQl9IX18KKyNkZWZpbmUgX19WODUwX1RMQl9IX18KKworI2RlZmluZSB0bGJfZmx1c2godGxiKQkoKHZvaWQpMCkKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3RsYi5oPgorCisjZW5kaWYgLyogX19WODUwX1RMQl9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXY4NTAvdGxiZmx1c2guaCBiL2luY2x1ZGUvYXNtLXY4NTAvdGxiZmx1c2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDFlNDQ5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdjg1MC90bGJmbHVzaC5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS12ODUwL3RsYmZsdXNoLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxLDAyLDAzICBORUMgRWxlY3Ryb25pY3MgQ29ycG9yYXRpb24KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEsMDIsMDMgIE1pbGVzIEJhZGVyIDxtaWxlc0BnbnUub3JnPgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMKKyAqIGFyY2hpdmUgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBXcml0dGVuIGJ5IE1pbGVzIEJhZGVyIDxtaWxlc0BnbnUub3JnPgorICovCisKKyNpZm5kZWYgX19WODUwX1RMQkZMVVNIX0hfXworI2RlZmluZSBfX1Y4NTBfVExCRkxVU0hfSF9fCisKKyNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgorCisKKy8qCisgKiBmbHVzaCBhbGwgdXNlci1zcGFjZSBhdGMgZW50cmllcy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIF9fZmx1c2hfdGxiKHZvaWQpCit7CisJQlVHICgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19mbHVzaF90bGJfb25lKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlCVUcgKCk7Cit9CisKKyNkZWZpbmUgZmx1c2hfdGxiKCkgX19mbHVzaF90bGIoKQorCisvKgorICogZmx1c2ggYWxsIGF0YyBlbnRyaWVzIChib3RoIGtlcm5lbCBhbmQgdXNlci1zcGFjZSBlbnRyaWVzKS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9hbGwodm9pZCkKK3sKKwlCVUcgKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJQlVHICgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlCVUcgKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQkJICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJQlVHICgpOworfQorCitleHRlcm4gaW5saW5lIHZvaWQgZmx1c2hfdGxiX2tlcm5lbF9wYWdlKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlCVUcgKCk7Cit9CisKK2V4dGVybiBpbmxpbmUgdm9pZCBmbHVzaF90bGJfcGd0YWJsZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJQlVHICgpOworfQorCisjZW5kaWYgLyogX19WODUwX1RMQkZMVVNIX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdjg1MC90b3BvbG9neS5oIGIvaW5jbHVkZS9hc20tdjg1MC90b3BvbG9neS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwNDBlNDEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS12ODUwL3RvcG9sb2d5LmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fVjg1MF9UT1BPTE9HWV9IX18KKyNkZWZpbmUgX19WODUwX1RPUE9MT0dZX0hfXworCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdG9wb2xvZ3kuaD4KKworI2VuZGlmIC8qIF9fVjg1MF9UT1BPTE9HWV9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXY4NTAvdHlwZXMuaCBiL2luY2x1ZGUvYXNtLXY4NTAvdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lN2NmZTViCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdjg1MC90eXBlcy5oCkBAIC0wLDAgKzEsNjggQEAKKyNpZm5kZWYgX19WODUwX1RZUEVTX0hfXworI2RlZmluZSBfX1Y4NTBfVFlQRVNfSF9fCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKy8qCisgKiBUaGlzIGZpbGUgaXMgbmV2ZXIgaW5jbHVkZWQgYnkgYXBwbGljYXRpb24gc29mdHdhcmUgdW5sZXNzCisgKiBleHBsaWNpdGx5IHJlcXVlc3RlZCAoZS5nLiwgdmlhIGxpbnV4L3R5cGVzLmgpIGluIHdoaWNoIGNhc2UgdGhlCisgKiBhcHBsaWNhdGlvbiBpcyBMaW51eCBzcGVjaWZpYyBzbyAodXNlci0pIG5hbWUgc3BhY2UgcG9sbHV0aW9uIGlzCisgKiBub3QgYSBtYWpvciBpc3N1ZS4gIEhvd2V2ZXIsIGZvciBpbnRlcm9wZXJhYmlsaXR5LCBsaWJyYXJpZXMgc3RpbGwKKyAqIG5lZWQgdG8gYmUgY2FyZWZ1bCB0byBhdm9pZCBhIG5hbWUgY2xhc2hlcy4KKyAqLworCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVtb2RlX3Q7CisKKy8qCisgKiBfX3h4IGlzIG9rOiBpdCBkb2Vzbid0IHBvbGx1dGUgdGhlIFBPU0lYIG5hbWVzcGFjZS4gVXNlIHRoZXNlIGluIHRoZQorICogaGVhZGVyIGZpbGVzIGV4cG9ydGVkIHRvIHVzZXIgc3BhY2UKKyAqLworCit0eXBlZGVmIF9fc2lnbmVkX18gY2hhciBfX3M4OwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdTg7CisKK3R5cGVkZWYgX19zaWduZWRfXyBzaG9ydCBfX3MxNjsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgX191MTY7CisKK3R5cGVkZWYgX19zaWduZWRfXyBpbnQgX19zMzI7Cit0eXBlZGVmIHVuc2lnbmVkIGludCBfX3UzMjsKKworI2lmIGRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykKK3R5cGVkZWYgX19zaWduZWRfXyBsb25nIGxvbmcgX19zNjQ7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3U2NDsKKyNlbmRpZgorCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisvKgorICogVGhlc2UgYXJlbid0IGV4cG9ydGVkIG91dHNpZGUgdGhlIGtlcm5lbCB0byBhdm9pZCBuYW1lIHNwYWNlIGNsYXNoZXMKKyAqLworI2lmZGVmIF9fS0VSTkVMX18KKworI2RlZmluZSBCSVRTX1BFUl9MT05HIDMyCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK3R5cGVkZWYgc2lnbmVkIGNoYXIgczg7Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdTg7CisKK3R5cGVkZWYgc2lnbmVkIHNob3J0IHMxNjsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgdTE2OworCit0eXBlZGVmIHNpZ25lZCBpbnQgczMyOwordHlwZWRlZiB1bnNpZ25lZCBpbnQgdTMyOworCit0eXBlZGVmIHNpZ25lZCBsb25nIGxvbmcgczY0OwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdTY0OworCisvKiBEbWEgYWRkcmVzc2VzIGFyZSAzMi1iaXRzIHdpZGUuICAqLworCit0eXBlZGVmIHUzMiBkbWFfYWRkcl90OworCit0eXBlZGVmIHVuc2lnbmVkIGludCBrbWVtX2J1ZmN0bF90OworCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX19WODUwX1RZUEVTX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdjg1MC91YWNjZXNzLmggYi9pbmNsdWRlL2FzbS12ODUwL3VhY2Nlc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Mzg2Y2ZjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdjg1MC91YWNjZXNzLmgKQEAgLTAsMCArMSwxNjUgQEAKKyNpZm5kZWYgX19WODUwX1VBQ0NFU1NfSF9fCisjZGVmaW5lIF9fVjg1MF9VQUNDRVNTX0hfXworCisvKgorICogVXNlciBzcGFjZSBtZW1vcnkgYWNjZXNzIGZ1bmN0aW9ucworICovCisKKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorCisjaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KKyNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgorCisjZGVmaW5lIFZFUklGWV9SRUFECTAKKyNkZWZpbmUgVkVSSUZZX1dSSVRFCTEKKworZXh0ZXJuIGlubGluZSBpbnQgYWNjZXNzX29rIChpbnQgdHlwZSwgY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCS8qIFhYWCBJIGd1ZXNzIHdlIHNob3VsZCBjaGVjayBhZ2FpbnN0IHJlYWwgcmFtIGJvdW5kcyBhdCBsZWFzdCwgYW5kCisJICAgcG9zc2libHkgbWFrZSBzdXJlIEFERFIgaXMgbm90IHdpdGhpbiB0aGUga2VybmVsLgorCSAgIEZvciBub3cgd2UganVzdCBjaGVjayB0byBtYWtlIHN1cmUgaXQncyBub3QgYSBzbWFsbCBwb3NpdGl2ZQorCSAgIG9yIG5lZ2F0aXZlIHZhbHVlLCBhcyB0aGF0IHdpbGwgYXQgbGVhc3QgY2F0Y2ggc29tZSBraW5kcyBvZgorCSAgIGVycm9yLiAgSW4gcGFydGljdWxhciwgd2UgbWFrZSBzdXJlIHRoYXQgQUREUidzIG5vdCB3aXRoaW4gdGhlCisJICAgaW50ZXJydXB0IHZlY3RvciBhcmVhLCB3aGljaCB3ZSBrbm93IHN0YXJ0cyBhdCB6ZXJvLCBvciB3aXRoaW4gdGhlCisJICAgcGVyaXBoZXJhbC1JL08gYXJlYSwgd2hpY2ggaXMgbG9jYXRlZCBqdXN0IF9iZWZvcmVfIHplcm8uICAqLworCXVuc2lnbmVkIGxvbmcgdmFsID0gKHVuc2lnbmVkIGxvbmcpYWRkcjsKKwlyZXR1cm4gdmFsID49ICgweDgwICsgTlVNX0NQVV9JUlFTKjE2KSAmJiB2YWwgPCAweEZGRkZGMDAwOworfQorCisvKiB0aGlzIGZ1bmN0aW9uIHdpbGwgZ28gYXdheSBzb29uIC0gdXNlIGFjY2Vzc19vaygpIGluc3RlYWQgKi8KK2V4dGVybiBpbmxpbmUgaW50IF9fZGVwcmVjYXRlZCB2ZXJpZnlfYXJlYSAoaW50IHR5cGUsIGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlyZXR1cm4gYWNjZXNzX29rICh0eXBlLCBhZGRyLCBzaXplKSA/IDAgOiAtRUZBVUxUOworfQorCisvKgorICogVGhlIGV4Y2VwdGlvbiB0YWJsZSBjb25zaXN0cyBvZiBwYWlycyBvZiBhZGRyZXNzZXM6IHRoZSBmaXJzdCBpcyB0aGUKKyAqIGFkZHJlc3Mgb2YgYW4gaW5zdHJ1Y3Rpb24gdGhhdCBpcyBhbGxvd2VkIHRvIGZhdWx0LCBhbmQgdGhlIHNlY29uZCBpcworICogdGhlIGFkZHJlc3MgYXQgd2hpY2ggdGhlIHByb2dyYW0gc2hvdWxkIGNvbnRpbnVlLiAgTm8gcmVnaXN0ZXJzIGFyZQorICogbW9kaWZpZWQsIHNvIGl0IGlzIGVudGlyZWx5IHVwIHRvIHRoZSBjb250aW51YXRpb24gY29kZSB0byBmaWd1cmUgb3V0CisgKiB3aGF0IHRvIGRvLgorICoKKyAqIEFsbCB0aGUgcm91dGluZXMgYmVsb3cgdXNlIGJpdHMgb2YgZml4dXAgY29kZSB0aGF0IGFyZSBvdXQgb2YgbGluZQorICogd2l0aCB0aGUgbWFpbiBpbnN0cnVjdGlvbiBwYXRoLiAgVGhpcyBtZWFucyB3aGVuIGV2ZXJ5dGhpbmcgaXMgd2VsbCwKKyAqIHdlIGRvbid0IGV2ZW4gaGF2ZSB0byBqdW1wIG92ZXIgdGhlbS4gIEZ1cnRoZXIsIHRoZXkgZG8gbm90IGludHJ1ZGUKKyAqIG9uIG91ciBjYWNoZSBvciB0bGIgZW50cmllcy4KKyAqLworCitzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5Cit7CisJdW5zaWduZWQgbG9uZyBpbnNuLCBmaXh1cDsKK307CisKKy8qIFJldHVybnMgMCBpZiBleGNlcHRpb24gbm90IGZvdW5kIGFuZCBmaXh1cCBvdGhlcndpc2UuICAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc2VhcmNoX2V4Y2VwdGlvbl90YWJsZSAodW5zaWduZWQgbG9uZyk7CisKKworLyoKKyAqIFRoZXNlIGFyZSB0aGUgbWFpbiBzaW5nbGUtdmFsdWUgdHJhbnNmZXIgcm91dGluZXMuICBUaGV5IGF1dG9tYXRpY2FsbHkKKyAqIHVzZSB0aGUgcmlnaHQgc2l6ZSBpZiB3ZSBqdXN0IGhhdmUgdGhlIHJpZ2h0IHBvaW50ZXIgdHlwZS4KKyAqLworCitleHRlcm4gaW50IGJhZF91c2VyX2FjY2Vzc19sZW5ndGggKHZvaWQpOworCisjZGVmaW5lIF9fZ2V0X3VzZXIodmFyLCBwdHIpCQkJCQkJICAgICAgXAorICAoewkJCQkJCQkJCSAgICAgIFwKKwkgIGludCBfX2d1X2VyciA9IDA7CQkJCQkJICAgICAgXAorCSAgdHlwZW9mKCoocHRyKSkgX19ndV92YWwgPSAwOwkJCQkJICAgICAgXAorCSAgc3dpdGNoIChzaXplb2YgKCoocHRyKSkpIHsJCQkJCSAgICAgIFwKKwkgIGNhc2UgMToJCQkJCQkJICAgICAgXAorCSAgY2FzZSAyOgkJCQkJCQkgICAgICBcCisJICBjYXNlIDQ6CQkJCQkJCSAgICAgIFwKKwkJICBfX2d1X3ZhbCA9ICoocHRyKTsJCQkJCSAgICAgIFwKKwkJICBicmVhazsJCQkJCQkgICAgICBcCisJICBjYXNlIDg6CQkJCQkJCSAgICAgIFwKKwkJICBtZW1jcHkoJl9fZ3VfdmFsLCBwdHIsIHNpemVvZihfX2d1X3ZhbCkpOwkJICAgICAgXAorCQkgIGJyZWFrOwkJCQkJCSAgICAgIFwKKwkgIGRlZmF1bHQ6CQkJCQkJCSAgICAgIFwKKwkJICBfX2d1X3ZhbCA9IDA7CQkJCQkJICAgICAgXAorCQkgIF9fZ3VfZXJyID0gX19nZXRfdXNlcl9iYWQgKCk7CQkJCSAgICAgIFwKKwkJICBicmVhazsJCQkJCQkgICAgICBcCisJICB9CQkJCQkJCQkgICAgICBcCisJICAodmFyKSA9IF9fZ3VfdmFsOwkJCQkJCSAgICAgIFwKKwkgIF9fZ3VfZXJyOwkJCQkJCQkgICAgICBcCisgIH0pCisjZGVmaW5lIF9fZ2V0X3VzZXJfYmFkKCkJKGJhZF91c2VyX2FjY2Vzc19sZW5ndGggKCksICgtRUZBVUxUKSkKKworI2RlZmluZSBfX3B1dF91c2VyKHZhciwgcHRyKQkJCQkJCSAgICAgIFwKKyAgKHsJCQkJCQkJCQkgICAgICBcCisJICBpbnQgX19wdV9lcnIgPSAwOwkJCQkJCSAgICAgIFwKKwkgIHN3aXRjaCAoc2l6ZW9mICgqKHB0cikpKSB7CQkJCQkgICAgICBcCisJICBjYXNlIDE6CQkJCQkJCSAgICAgIFwKKwkgIGNhc2UgMjoJCQkJCQkJICAgICAgXAorCSAgY2FzZSA0OgkJCQkJCQkgICAgICBcCisJCSAgKihwdHIpID0gKHZhcik7CQkJCQkgICAgICBcCisJCSAgYnJlYWs7CQkJCQkJICAgICAgXAorCSAgY2FzZSA4OiB7CQkJCQkJCSAgICAgIFwKKwkgIAkgIHR5cGVvZigqKHB0cikpIF9fcHVfdmFsID0gMDsJCQkJICAgICAgXAorCQkgIG1lbWNweShwdHIsICZfX3B1X3ZhbCwgc2l6ZW9mKF9fcHVfdmFsKSk7CQkgICAgICBcCisJCSAgfQkJCQkJCQkgICAgICBcCisJCSAgYnJlYWs7CQkJCQkJICAgICAgXAorCSAgZGVmYXVsdDoJCQkJCQkJICAgICAgXAorCQkgIF9fcHVfZXJyID0gX19wdXRfdXNlcl9iYWQgKCk7CQkJCSAgICAgIFwKKwkJICBicmVhazsJCQkJCQkgICAgICBcCisJICB9CQkJCQkJCQkgICAgICBcCisJICBfX3B1X2VycjsJCQkJCQkJICAgICAgXAorICB9KQorI2RlZmluZSBfX3B1dF91c2VyX2JhZCgpCShiYWRfdXNlcl9hY2Nlc3NfbGVuZ3RoICgpLCAoLUVGQVVMVCkpCisKKyNkZWZpbmUgcHV0X3VzZXIoeCwgcHRyKQlfX3B1dF91c2VyKHgsIHB0cikKKyNkZWZpbmUgZ2V0X3VzZXIoeCwgcHRyKQlfX2dldF91c2VyKHgsIHB0cikKKworI2RlZmluZSBfX2NvcHlfZnJvbV91c2VyKHRvLCBmcm9tLCBuKQkobWVtY3B5ICh0bywgZnJvbSwgbiksIDApCisjZGVmaW5lIF9fY29weV90b191c2VyKHRvLCBmcm9tLCBuKQkobWVtY3B5KHRvLCBmcm9tLCBuKSwgMCkKKworI2RlZmluZSBfX2NvcHlfdG9fdXNlcl9pbmF0b21pYyBfX2NvcHlfdG9fdXNlcgorI2RlZmluZSBfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljIF9fY29weV9mcm9tX3VzZXIKKworI2RlZmluZSBjb3B5X2Zyb21fdXNlcih0bywgZnJvbSwgbikJX19jb3B5X2Zyb21fdXNlciAodG8sIGZyb20sIG4pCisjZGVmaW5lIGNvcHlfdG9fdXNlcih0bywgZnJvbSwgbikgCV9fY29weV90b191c2VyKHRvLCBmcm9tLCBuKQorCisjZGVmaW5lIGNvcHlfdG9fdXNlcl9yZXQodG8sZnJvbSxuLHJldHZhbCkgXAorICAoeyBpZiAoY29weV90b191c2VyICh0byxmcm9tLG4pKSByZXR1cm4gcmV0dmFsOyB9KQorCisjZGVmaW5lIGNvcHlfZnJvbV91c2VyX3JldCh0byxmcm9tLG4scmV0dmFsKSBcCisgICh7IGlmIChjb3B5X2Zyb21fdXNlciAodG8sZnJvbSxuKSkgcmV0dXJuIHJldHZhbDsgfSkKKworLyoKKyAqIENvcHkgYSBudWxsIHRlcm1pbmF0ZWQgc3RyaW5nIGZyb20gdXNlcnNwYWNlLgorICovCisKK3N0YXRpYyBpbmxpbmUgbG9uZworc3RybmNweV9mcm9tX3VzZXIgKGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjLCBsb25nIGNvdW50KQoreworCWNoYXIgKnRtcDsKKwlzdHJuY3B5IChkc3QsIHNyYywgY291bnQpOworCWZvciAodG1wID0gZHN0OyAqdG1wICYmIGNvdW50ID4gMDsgdG1wKyssIGNvdW50LS0pCisJCTsKKwlyZXR1cm4gdG1wIC0gZHN0OworfQorCisvKgorICogUmV0dXJuIHRoZSBzaXplIG9mIGEgc3RyaW5nIChpbmNsdWRpbmcgdGhlIGVuZGluZyAwKQorICoKKyAqIFJldHVybiAwIG9uIGV4Y2VwdGlvbiwgYSB2YWx1ZSBncmVhdGVyIHRoYW4gTiBpZiB0b28gbG9uZworICovCitzdGF0aWMgaW5saW5lIGxvbmcgc3Rybmxlbl91c2VyIChjb25zdCBjaGFyICpzcmMsIGxvbmcgbikKK3sKKwlyZXR1cm4gc3RybGVuIChzcmMpICsgMTsKK30KKworI2RlZmluZSBzdHJsZW5fdXNlcihzdHIpCXN0cm5sZW5fdXNlciAoc3RyLCAzMjc2NykKKworLyoKKyAqIFplcm8gVXNlcnNwYWNlCisgKi8KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCitjbGVhcl91c2VyICh2b2lkICp0bywgdW5zaWduZWQgbG9uZyBuKQoreworCW1lbXNldCAodG8sIDAsIG4pOworCXJldHVybiAwOworfQorCisjZW5kaWYgLyogX19WODUwX1VBQ0NFU1NfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS12ODUwL3Vjb250ZXh0LmggYi9pbmNsdWRlL2FzbS12ODUwL3Vjb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzAzYzIxNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXY4NTAvdWNvbnRleHQuaApAQCAtMCwwICsxLDE0IEBACisjaWZuZGVmIF9fVjg1MF9VQ09OVEVYVF9IX18KKyNkZWZpbmUgX19WODUwX1VDT05URVhUX0hfXworCisjaW5jbHVkZSA8YXNtL3NpZ2NvbnRleHQuaD4KKworc3RydWN0IHVjb250ZXh0IHsKKwl1bnNpZ25lZCBsb25nCSAgdWNfZmxhZ3M7CisJc3RydWN0IHVjb250ZXh0ICAqdWNfbGluazsKKwlzdGFja190CQkgIHVjX3N0YWNrOworCXN0cnVjdCBzaWdjb250ZXh0IHVjX21jb250ZXh0OworCXNpZ3NldF90CSAgdWNfc2lnbWFzazsJLyogbWFzayBsYXN0IGZvciBleHRlbnNpYmlsaXR5ICovCit9OworCisjZW5kaWYgLyogX19WODUwX1VDT05URVhUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdjg1MC91bmFsaWduZWQuaCBiL2luY2x1ZGUvYXNtLXY4NTAvdW5hbGlnbmVkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVlMzgzNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXY4NTAvdW5hbGlnbmVkLmgKQEAgLTAsMCArMSwxMzAgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS12ODUwL3VuYWxpZ25lZC5oIC0tIFVuYWxpZ25lZCBtZW1vcnkgYWNjZXNzCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMSAgTkVDIENvcnBvcmF0aW9uCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxICBNaWxlcyBCYWRlciA8bWlsZXNAZ251Lm9yZz4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzCisgKiBhcmNoaXZlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogVGhpcyBmaWxlIGlzIGEgY29weSBvZiB0aGUgYXJtIHZlcnNpb24sIGluY2x1ZGUvYXNtLWFybS91bmFsaWduZWQuaAorICoKKyAqIE5vdGUgdGhhdCBzb21lIHY4NTAgY2hpcHMgc3VwcG9ydCB1bmFsaWduZWQgYWNjZXNzLCBidXQgaXQgc2VlbXMgdG9vCisgKiBhbm5veWluZyB0byB1c2UuCisgKi8KKworI2lmbmRlZiBfX1Y4NTBfVU5BTElHTkVEX0hfXworI2RlZmluZSBfX1Y4NTBfVU5BTElHTkVEX0hfXworCisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisKK2V4dGVybiBpbnQgX19idWdfdW5hbGlnbmVkX3godm9pZCAqcHRyKTsKKworLyoKKyAqIFdoYXQgaXMgdGhlIG1vc3QgZWZmaWNpZW50IHdheSBvZiBsb2FkaW5nL3N0b3JpbmcgYW4gdW5hbGlnbmVkIHZhbHVlPworICoKKyAqIFRoYXQgaXMgdGhlIHN1YmplY3Qgb2YgdGhpcyBmaWxlLiAgRWZmaWNpZW5jeSBoZXJlIGlzIGRlZmluZWQgYXMKKyAqIG1pbmltdW0gY29kZSBzaXplIHdpdGggbWluaW11bSByZWdpc3RlciB1c2FnZSBmb3IgdGhlIGNvbW1vbiBjYXNlcy4KKyAqIEl0IGlzIGN1cnJlbnRseSBub3QgYmVsaWV2ZWQgdGhhdCBsb25nIGxvbmdzIGFyZSBjb21tb24sIHNvIHdlCisgKiB0cmFkZSBlZmZpY2llbmN5IGZvciB0aGUgY2hhcnMsIHNob3J0cyBhbmQgbG9uZ3MgYWdhaW5zdCB0aGUgbG9uZworICogbG9uZ3MuCisgKgorICogQ3VycmVudCBzdGF0cyB3aXRoIGdjYyAyLjcuMi4yIGZvciB0aGVzZSBmdW5jdGlvbnM6CisgKgorICoJcHRyc2l6ZQlnZXQ6CWNvZGUJcmVncwlwdXQ6CWNvZGUJcmVncworICoJMQkJMQkxCQkxCTIKKyAqCTIJCTMJMgkJMwkyCisgKgk0CQk3CTMJCTcJMworICoJOAkJMjAJNgkJMTYJNgorICoKKyAqIGdjYyAyLjk1LjEgc2VlbXMgdG8gY29kZSBkaWZmZXJlbnRseToKKyAqCisgKglwdHJzaXplCWdldDoJY29kZQlyZWdzCXB1dDoJY29kZQlyZWdzCisgKgkxCQkxCTEJCTEJMgorICoJMgkJMwkyCQkzCTIKKyAqCTQJCTcJNAkJNwk0CisgKgk4CQkxOQk4CQkxNQk2CisgKgorICogd2hpY2ggbWF5IG9yIG1heSBub3QgYmUgbW9yZSBlZmZpY2llbnQgKGRlcGVuZGluZyB1cG9uIHdoZXRoZXIKKyAqIHlvdSBjYW4gYWZmb3JkIHRoZSBleHRyYSByZWdpc3RlcnMpLiAgSG9wZWZ1bGx5IHRoZSBnY2MgMi45NQorICogaXMgaW50ZWxpZ2VudCBlbm91Z2ggdG8gZGVjaWRlIGlmIGl0IGlzIGJldHRlciB0byB1c2UgdGhlCisgKiBleHRyYSByZWdpc3RlciwgYnV0IGV2aWRlbmNlIHNvIGZhciBzZWVtcyB0byBzdWdnZXN0IG90aGVyd2lzZS4KKyAqCisgKiBVbmZvcnR1bmF0ZWx5LCBnY2MgaXMgbm90IGFibGUgdG8gb3B0aW1pc2UgdGhlIGhpZ2ggd29yZAorICogb3V0IG9mIGxvbmcgbG9uZyA+PiAzMiwgb3IgdGhlIGxvdyB3b3JkIGZyb20gbG9uZyBsb25nIDw8IDMyCisgKi8KKworI2RlZmluZSBfX2dldF91bmFsaWduZWRfMihfX3ApCQkJCQlcCisJKF9fcFswXSB8IF9fcFsxXSA8PCA4KQorCisjZGVmaW5lIF9fZ2V0X3VuYWxpZ25lZF80KF9fcCkJCQkJCVwKKwkoX19wWzBdIHwgX19wWzFdIDw8IDggfCBfX3BbMl0gPDwgMTYgfCBfX3BbM10gPDwgMjQpCisKKyNkZWZpbmUgZ2V0X3VuYWxpZ25lZChwdHIpCQkJCQlcCisJKHsJCQkJCQkJXAorCQlfX3R5cGVvZl9fKCoocHRyKSkgX192OwkJCQlcCisJCV9fdTggKl9fcCA9IChfX3U4ICopKHB0cik7CQkJXAorCQlzd2l0Y2ggKHNpemVvZigqKHB0cikpKSB7CQkJXAorCQljYXNlIDE6CV9fdiA9ICoocHRyKTsJCQlicmVhazsJXAorCQljYXNlIDI6IF9fdiA9IF9fZ2V0X3VuYWxpZ25lZF8yKF9fcCk7CWJyZWFrOwlcCisJCWNhc2UgNDogX192ID0gX19nZXRfdW5hbGlnbmVkXzQoX19wKTsJYnJlYWs7CVwKKwkJY2FzZSA4OiB7CQkJCQlcCisJCQkJdW5zaWduZWQgaW50IF9fdjEsIF9fdjI7CVwKKwkJCQlfX3YyID0gX19nZXRfdW5hbGlnbmVkXzQoKF9fcCs0KSk7IFwKKwkJCQlfX3YxID0gX19nZXRfdW5hbGlnbmVkXzQoX19wKTsJXAorCQkJCV9fdiA9ICgodW5zaWduZWQgbG9uZyBsb25nKV9fdjIgPDwgMzIgfCBfX3YxKTsJXAorCQkJfQkJCQkJXAorCQkJYnJlYWs7CQkJCQlcCisJCWRlZmF1bHQ6IF9fdiA9IF9fYnVnX3VuYWxpZ25lZF94KF9fcCk7CWJyZWFrOwlcCisJCX0JCQkJCQlcCisJCV9fdjsJCQkJCQlcCisJfSkKKworCitleHRlcm4gaW5saW5lIHZvaWQgX19wdXRfdW5hbGlnbmVkXzIoX191MzIgX192LCByZWdpc3RlciBfX3U4ICpfX3ApCit7CisJKl9fcCsrID0gX192OworCSpfX3ArKyA9IF9fdiA+PiA4OworfQorCitleHRlcm4gaW5saW5lIHZvaWQgX19wdXRfdW5hbGlnbmVkXzQoX191MzIgX192LCByZWdpc3RlciBfX3U4ICpfX3ApCit7CisJX19wdXRfdW5hbGlnbmVkXzIoX192ID4+IDE2LCBfX3AgKyAyKTsKKwlfX3B1dF91bmFsaWduZWRfMihfX3YsIF9fcCk7Cit9CisKK2V4dGVybiBpbmxpbmUgdm9pZCBfX3B1dF91bmFsaWduZWRfOChjb25zdCB1bnNpZ25lZCBsb25nIGxvbmcgX192LCByZWdpc3RlciBfX3U4ICpfX3ApCit7CisJLyoKKwkgKiB0cmFkZW9mZjogOCBieXRlcyBvZiBzdGFjayBmb3IgYWxsIHVuYWxpZ25lZCBwdXRzICgyCisJICogaW5zdHJ1Y3Rpb25zKSwgb3IgYW4gZXh0cmEgcmVnaXN0ZXIgaW4gdGhlIGxvbmcgbG9uZworCSAqIGNhc2UgLSBnbyBmb3IgdGhlIGV4dHJhIHJlZ2lzdGVyLgorCSAqLworCV9fcHV0X3VuYWxpZ25lZF80KF9fdiA+PiAzMiwgX19wKzQpOworCV9fcHV0X3VuYWxpZ25lZF80KF9fdiwgX19wKTsKK30KKworLyoKKyAqIFRyeSB0byBzdG9yZSBhbiB1bmFsaWduZWQgdmFsdWUgYXMgZWZmaWNpZW50bHkgYXMgcG9zc2libGUuCisgKi8KKyNkZWZpbmUgcHV0X3VuYWxpZ25lZCh2YWwscHRyKQkJCQkJXAorCSh7CQkJCQkJCVwKKwkJc3dpdGNoIChzaXplb2YoKihwdHIpKSkgewkJCVwKKwkJY2FzZSAxOgkJCQkJCVwKKwkJCSoocHRyKSA9ICh2YWwpOwkJCQlcCisJCQlicmVhazsJCQkJCVwKKwkJY2FzZSAyOiBfX3B1dF91bmFsaWduZWRfMigodmFsKSwoX191OCAqKShwdHIpKTsJXAorCQkJYnJlYWs7CQkJCQlcCisJCWNhc2UgNDoJX19wdXRfdW5hbGlnbmVkXzQoKHZhbCksKF9fdTggKikocHRyKSk7CVwKKwkJCWJyZWFrOwkJCQkJXAorCQljYXNlIDg6CV9fcHV0X3VuYWxpZ25lZF84KCh2YWwpLChfX3U4ICopKHB0cikpOyBcCisJCQlicmVhazsJCQkJCVwKKwkJZGVmYXVsdDogX19idWdfdW5hbGlnbmVkX3gocHRyKTsJCVwKKwkJCWJyZWFrOwkJCQkJXAorCQl9CQkJCQkJXAorCQkodm9pZCkgMDsJCQkJCVwKKwl9KQorCisKKyNlbmRpZiAvKiBfX1Y4NTBfVU5BTElHTkVEX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdjg1MC91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLXY4NTAvdW5pc3RkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I1NTIwOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXY4NTAvdW5pc3RkLmgKQEAgLTAsMCArMSw0NzcgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS12ODUwL3VuaXN0ZC5oIC0tIFN5c3RlbSBjYWxsIG51bWJlcnMgYW5kIGludm9jYXRpb24gbWVjaGFuaXNtCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMSwwMiwwMywwNCAgTkVDIEVsZWN0cm9uaWNzIENvcnBvcmF0aW9uCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxLDAyLDAzLDA0ICBNaWxlcyBCYWRlciA8bWlsZXNAZ251Lm9yZz4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzCisgKiBhcmNoaXZlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogV3JpdHRlbiBieSBNaWxlcyBCYWRlciA8bWlsZXNAZ251Lm9yZz4KKyAqLworCisjaWZuZGVmIF9fVjg1MF9VTklTVERfSF9fCisjZGVmaW5lIF9fVjg1MF9VTklTVERfSF9fCisKKyNpbmNsdWRlIDxhc20vY2xpbmthZ2UuaD4KKworI2RlZmluZSBfX05SX3Jlc3RhcnRfc3lzY2FsbAkgIDAKKyNkZWZpbmUgX19OUl9leGl0CQkgIDEKKyNkZWZpbmUgX19OUl9mb3JrCQkgIDIKKyNkZWZpbmUgX19OUl9yZWFkCQkgIDMKKyNkZWZpbmUgX19OUl93cml0ZQkJICA0CisjZGVmaW5lIF9fTlJfb3BlbgkJICA1CisjZGVmaW5lIF9fTlJfY2xvc2UJCSAgNgorI2RlZmluZSBfX05SX3dhaXRwaWQJCSAgNworI2RlZmluZSBfX05SX2NyZWF0CQkgIDgKKyNkZWZpbmUgX19OUl9saW5rCQkgIDkKKyNkZWZpbmUgX19OUl91bmxpbmsJCSAxMAorI2RlZmluZSBfX05SX2V4ZWN2ZQkJIDExCisjZGVmaW5lIF9fTlJfY2hkaXIJCSAxMgorI2RlZmluZSBfX05SX3RpbWUJCSAxMworI2RlZmluZSBfX05SX21rbm9kCQkgMTQKKyNkZWZpbmUgX19OUl9jaG1vZAkJIDE1CisjZGVmaW5lIF9fTlJfY2hvd24JCSAxNgorI2RlZmluZSBfX05SX2JyZWFrCQkgMTcKKyNkZWZpbmUgX19OUl9sc2VlawkJIDE5CisjZGVmaW5lIF9fTlJfZ2V0cGlkCQkgMjAKKyNkZWZpbmUgX19OUl9tb3VudAkJIDIxCisjZGVmaW5lIF9fTlJfdW1vdW50CQkgMjIKKyNkZWZpbmUgX19OUl9zZXR1aWQJCSAyMworI2RlZmluZSBfX05SX2dldHVpZAkJIDI0CisjZGVmaW5lIF9fTlJfc3RpbWUJCSAyNQorI2RlZmluZSBfX05SX3B0cmFjZQkJIDI2CisjZGVmaW5lIF9fTlJfYWxhcm0JCSAyNworI2RlZmluZSBfX05SX3BhdXNlCQkgMjkKKyNkZWZpbmUgX19OUl91dGltZQkJIDMwCisjZGVmaW5lIF9fTlJfc3R0eQkJIDMxCisjZGVmaW5lIF9fTlJfZ3R0eQkJIDMyCisjZGVmaW5lIF9fTlJfYWNjZXNzCQkgMzMKKyNkZWZpbmUgX19OUl9uaWNlCQkgMzQKKyNkZWZpbmUgX19OUl9mdGltZQkJIDM1CisjZGVmaW5lIF9fTlJfc3luYwkJIDM2CisjZGVmaW5lIF9fTlJfa2lsbAkJIDM3CisjZGVmaW5lIF9fTlJfcmVuYW1lCQkgMzgKKyNkZWZpbmUgX19OUl9ta2RpcgkJIDM5CisjZGVmaW5lIF9fTlJfcm1kaXIJCSA0MAorI2RlZmluZSBfX05SX2R1cAkJIDQxCisjZGVmaW5lIF9fTlJfcGlwZQkJIDQyCisjZGVmaW5lIF9fTlJfdGltZXMJCSA0MworI2RlZmluZSBfX05SX3Byb2YJCSA0NAorI2RlZmluZSBfX05SX2JyawkJIDQ1CisjZGVmaW5lIF9fTlJfc2V0Z2lkCQkgNDYKKyNkZWZpbmUgX19OUl9nZXRnaWQJCSA0NworI2RlZmluZSBfX05SX3NpZ25hbAkJIDQ4CisjZGVmaW5lIF9fTlJfZ2V0ZXVpZAkJIDQ5CisjZGVmaW5lIF9fTlJfZ2V0ZWdpZAkJIDUwCisjZGVmaW5lIF9fTlJfYWNjdAkJIDUxCisjZGVmaW5lIF9fTlJfdW1vdW50MgkJIDUyCisjZGVmaW5lIF9fTlJfbG9jawkJIDUzCisjZGVmaW5lIF9fTlJfaW9jdGwJCSA1NAorI2RlZmluZSBfX05SX2ZjbnRsCQkgNTUKKyNkZWZpbmUgX19OUl9zZXRwZ2lkCQkgNTcKKyNkZWZpbmUgX19OUl91bWFzawkJIDYwCisjZGVmaW5lIF9fTlJfY2hyb290CQkgNjEKKyNkZWZpbmUgX19OUl91c3RhdAkJIDYyCisjZGVmaW5lIF9fTlJfZHVwMgkJIDYzCisjZGVmaW5lIF9fTlJfZ2V0cHBpZAkJIDY0CisjZGVmaW5lIF9fTlJfZ2V0cGdycAkJIDY1CisjZGVmaW5lIF9fTlJfc2V0c2lkCQkgNjYKKyNkZWZpbmUgX19OUl9zaWdhY3Rpb24JCSA2NworI2RlZmluZSBfX05SX3NnZXRtYXNrCQkgNjgKKyNkZWZpbmUgX19OUl9zc2V0bWFzawkJIDY5CisjZGVmaW5lIF9fTlJfc2V0cmV1aWQJCSA3MAorI2RlZmluZSBfX05SX3NldHJlZ2lkCQkgNzEKKyNkZWZpbmUgX19OUl9zaWdzdXNwZW5kCQkgNzIKKyNkZWZpbmUgX19OUl9zaWdwZW5kaW5nCQkgNzMKKyNkZWZpbmUgX19OUl9zZXRob3N0bmFtZQkgNzQKKyNkZWZpbmUgX19OUl9zZXRybGltaXQJCSA3NQorI2RlZmluZSBfX05SX3VnZXRybGltaXQJIAkgNzYKKyNkZWZpbmUgX19OUl9nZXRydXNhZ2UJCSA3NworI2RlZmluZSBfX05SX2dldHRpbWVvZmRheQkgNzgKKyNkZWZpbmUgX19OUl9zZXR0aW1lb2ZkYXkJIDc5CisjZGVmaW5lIF9fTlJfZ2V0Z3JvdXBzCQkgODAKKyNkZWZpbmUgX19OUl9zZXRncm91cHMJCSA4MQorI2RlZmluZSBfX05SX3NlbGVjdAkJIDgyCisjZGVmaW5lIF9fTlJfc3ltbGluawkJIDgzCisjZGVmaW5lIF9fTlJfcmVhZGxpbmsJCSA4NQorI2RlZmluZSBfX05SX3VzZWxpYgkJIDg2CisjZGVmaW5lIF9fTlJfc3dhcG9uCQkgODcKKyNkZWZpbmUgX19OUl9yZWJvb3QJCSA4OAorI2RlZmluZSBfX05SX3JlYWRkaXIJCSA4OQorI2RlZmluZSBfX05SX21tYXAJCSA5MAorI2RlZmluZSBfX05SX211bm1hcAkJIDkxCisjZGVmaW5lIF9fTlJfdHJ1bmNhdGUJCSA5MgorI2RlZmluZSBfX05SX2Z0cnVuY2F0ZQkJIDkzCisjZGVmaW5lIF9fTlJfZmNobW9kCQkgOTQKKyNkZWZpbmUgX19OUl9mY2hvd24JCSA5NQorI2RlZmluZSBfX05SX2dldHByaW9yaXR5CSA5NgorI2RlZmluZSBfX05SX3NldHByaW9yaXR5CSA5NworI2RlZmluZSBfX05SX3Byb2ZpbAkJIDk4CisjZGVmaW5lIF9fTlJfc3RhdGZzCQkgOTkKKyNkZWZpbmUgX19OUl9mc3RhdGZzCQkxMDAKKyNkZWZpbmUgX19OUl9zb2NrZXRjYWxsCQkxMDIKKyNkZWZpbmUgX19OUl9zeXNsb2cJCTEwMworI2RlZmluZSBfX05SX3NldGl0aW1lcgkJMTA0CisjZGVmaW5lIF9fTlJfZ2V0aXRpbWVyCQkxMDUKKyNkZWZpbmUgX19OUl9zdGF0CQkxMDYKKyNkZWZpbmUgX19OUl9sc3RhdAkJMTA3CisjZGVmaW5lIF9fTlJfZnN0YXQJCTEwOAorI2RlZmluZSBfX05SX3ZoYW5ndXAJCTExMQorI2RlZmluZSBfX05SX3dhaXQ0CQkxMTQKKyNkZWZpbmUgX19OUl9zd2Fwb2ZmCQkxMTUKKyNkZWZpbmUgX19OUl9zeXNpbmZvCQkxMTYKKyNkZWZpbmUgX19OUl9pcGMJCTExNworI2RlZmluZSBfX05SX2ZzeW5jCQkxMTgKKyNkZWZpbmUgX19OUl9zaWdyZXR1cm4JCTExOQorI2RlZmluZSBfX05SX2Nsb25lCQkxMjAKKyNkZWZpbmUgX19OUl9zZXRkb21haW5uYW1lCTEyMQorI2RlZmluZSBfX05SX3VuYW1lCQkxMjIKKyNkZWZpbmUgX19OUl9jYWNoZWZsdXNoCQkxMjMKKyNkZWZpbmUgX19OUl9hZGp0aW1leAkJMTI0CisjZGVmaW5lIF9fTlJfbXByb3RlY3QJCTEyNQorI2RlZmluZSBfX05SX3NpZ3Byb2NtYXNrCTEyNgorI2RlZmluZSBfX05SX2NyZWF0ZV9tb2R1bGUJMTI3CisjZGVmaW5lIF9fTlJfaW5pdF9tb2R1bGUJMTI4CisjZGVmaW5lIF9fTlJfZGVsZXRlX21vZHVsZQkxMjkKKyNkZWZpbmUgX19OUl9nZXRfa2VybmVsX3N5bXMJMTMwCisjZGVmaW5lIF9fTlJfcXVvdGFjdGwJCTEzMQorI2RlZmluZSBfX05SX2dldHBnaWQJCTEzMgorI2RlZmluZSBfX05SX2ZjaGRpcgkJMTMzCisjZGVmaW5lIF9fTlJfYmRmbHVzaAkJMTM0CisjZGVmaW5lIF9fTlJfc3lzZnMJCTEzNQorI2RlZmluZSBfX05SX3BlcnNvbmFsaXR5CTEzNgorI2RlZmluZSBfX05SX2Fmc19zeXNjYWxsCTEzNyAvKiBTeXNjYWxsIGZvciBBbmRyZXcgRmlsZSBTeXN0ZW0gKi8KKyNkZWZpbmUgX19OUl9zZXRmc3VpZAkJMTM4CisjZGVmaW5lIF9fTlJfc2V0ZnNnaWQJCTEzOQorI2RlZmluZSBfX05SX19sbHNlZWsJCTE0MAorI2RlZmluZSBfX05SX2dldGRlbnRzCQkxNDEKKyNkZWZpbmUgX19OUl9mbG9jawkJMTQzCisjZGVmaW5lIF9fTlJfbXN5bmMJCTE0NAorI2RlZmluZSBfX05SX3JlYWR2CQkxNDUKKyNkZWZpbmUgX19OUl93cml0ZXYJCTE0NgorI2RlZmluZSBfX05SX2dldHNpZAkJMTQ3CisjZGVmaW5lIF9fTlJfZmRhdGFzeW5jCQkxNDgKKyNkZWZpbmUgX19OUl9fc3lzY3RsCQkxNDkKKyNkZWZpbmUgX19OUl9tbG9jawkJMTUwCisjZGVmaW5lIF9fTlJfbXVubG9jawkJMTUxCisjZGVmaW5lIF9fTlJfbWxvY2thbGwJCTE1MgorI2RlZmluZSBfX05SX211bmxvY2thbGwJCTE1MworI2RlZmluZSBfX05SX3NjaGVkX3NldHBhcmFtCQkxNTQKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRwYXJhbQkJMTU1CisjZGVmaW5lIF9fTlJfc2NoZWRfc2V0c2NoZWR1bGVyCQkxNTYKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRzY2hlZHVsZXIJCTE1NworI2RlZmluZSBfX05SX3NjaGVkX3lpZWxkCQkxNTgKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4CTE1OQorI2RlZmluZSBfX05SX3NjaGVkX2dldF9wcmlvcml0eV9taW4JMTYwCisjZGVmaW5lIF9fTlJfc2NoZWRfcnJfZ2V0X2ludGVydmFsCTE2MQorI2RlZmluZSBfX05SX25hbm9zbGVlcAkJMTYyCisjZGVmaW5lIF9fTlJfbXJlbWFwCQkxNjMKKyNkZWZpbmUgX19OUl9zZXRyZXN1aWQJCTE2NAorI2RlZmluZSBfX05SX2dldHJlc3VpZAkJMTY1CisjZGVmaW5lIF9fTlJfcXVlcnlfbW9kdWxlCTE2NworI2RlZmluZSBfX05SX3BvbGwJCTE2OAorI2RlZmluZSBfX05SX25mc3NlcnZjdGwJCTE2OQorI2RlZmluZSBfX05SX3NldHJlc2dpZAkJMTcwCisjZGVmaW5lIF9fTlJfZ2V0cmVzZ2lkCQkxNzEKKyNkZWZpbmUgX19OUl9wcmN0bAkJMTcyCisjZGVmaW5lIF9fTlJfcnRfc2lncmV0dXJuCTE3MworI2RlZmluZSBfX05SX3J0X3NpZ2FjdGlvbgkxNzQKKyNkZWZpbmUgX19OUl9ydF9zaWdwcm9jbWFzawkxNzUKKyNkZWZpbmUgX19OUl9ydF9zaWdwZW5kaW5nCTE3NgorI2RlZmluZSBfX05SX3J0X3NpZ3RpbWVkd2FpdAkxNzcKKyNkZWZpbmUgX19OUl9ydF9zaWdxdWV1ZWluZm8JMTc4CisjZGVmaW5lIF9fTlJfcnRfc2lnc3VzcGVuZAkxNzkKKyNkZWZpbmUgX19OUl9wcmVhZAkJMTgwCisjZGVmaW5lIF9fTlJfcHdyaXRlCQkxODEKKyNkZWZpbmUgX19OUl9sY2hvd24JCTE4MgorI2RlZmluZSBfX05SX2dldGN3ZAkJMTgzCisjZGVmaW5lIF9fTlJfY2FwZ2V0CQkxODQKKyNkZWZpbmUgX19OUl9jYXBzZXQJCTE4NQorI2RlZmluZSBfX05SX3NpZ2FsdHN0YWNrCTE4NgorI2RlZmluZSBfX05SX3NlbmRmaWxlCQkxODcKKyNkZWZpbmUgX19OUl9nZXRwbXNnCQkxODgJLyogc29tZSBwZW9wbGUgYWN0dWFsbHkgd2FudCBzdHJlYW1zICovCisjZGVmaW5lIF9fTlJfcHV0cG1zZwkJMTg5CS8qIHNvbWUgcGVvcGxlIGFjdHVhbGx5IHdhbnQgc3RyZWFtcyAqLworI2RlZmluZSBfX05SX3Zmb3JrCQkxOTAKKyNkZWZpbmUgX19OUl9tbWFwMgkJMTkyCisjZGVmaW5lIF9fTlJfdHJ1bmNhdGU2NAkJMTkzCisjZGVmaW5lIF9fTlJfZnRydW5jYXRlNjQJMTk0CisjZGVmaW5lIF9fTlJfc3RhdDY0CQkxOTUKKyNkZWZpbmUgX19OUl9sc3RhdDY0CQkxOTYKKyNkZWZpbmUgX19OUl9mc3RhdDY0CQkxOTcKKyNkZWZpbmUgX19OUl9mY250bDY0CQkxOTgKKyNkZWZpbmUgX19OUl9nZXRkZW50czY0CQkxOTkKKyNkZWZpbmUgX19OUl9waXZvdF9yb290CQkyMDAKKyNkZWZpbmUgX19OUl9nZXR0aWQJCTIwMQorI2RlZmluZSBfX05SX3RraWxsCQkyMDIKKworCisvKiBTeXNjYWxsIHByb3RvY29sOgorICAgU3lzY2FsbCBudW1iZXIgaW4gcjEyLCBhcmdzIGluIHI2LXI5LCByMTMtcjE0CisgICBSZXR1cm4gdmFsdWUgaW4gcjEwCisgICBUcmFwIDAgZm9yIGBzaG9ydCcgc3lzY2FsbHMsIHdoZXJlIGFsbCB0aGUgYXJncyBjYW4gZml0IGluIGZ1bmN0aW9uCisgICBjYWxsIGFyZ3VtZW50IHJlZ2lzdGVycywgYW5kIHRyYXAgMSB3aGVuIHRoZXJlIGFyZSBhZGRpdGlvbmFsIGFyZ3MgaW4KKyAgIHIxMy1yMTQuICAqLworCisjZGVmaW5lIFNZU0NBTExfTlVNCSJyMTIiCisjZGVmaW5lIFNZU0NBTExfQVJHMAkicjYiCisjZGVmaW5lIFNZU0NBTExfQVJHMQkicjciCisjZGVmaW5lIFNZU0NBTExfQVJHMgkicjgiCisjZGVmaW5lIFNZU0NBTExfQVJHMwkicjkiCisjZGVmaW5lIFNZU0NBTExfQVJHNAkicjEzIgorI2RlZmluZSBTWVNDQUxMX0FSRzUJInIxNCIKKyNkZWZpbmUgU1lTQ0FMTF9SRVQJInIxMCIKKworI2RlZmluZSBTWVNDQUxMX1NIT1JUX1RSQVAJIjAiCisjZGVmaW5lIFNZU0NBTExfTE9OR19UUkFQCSIxIgorCisvKiBSZWdpc3RlcnMgY2xvYmJlcmVkIGJ5IGFueSBzeXNjYWxsLiAgVGhpcyBfZG9lc24ndF8gaW5jbHVkZSB0aGUgc3lzY2FsbAorICAgbnVtYmVyIChyMTIpIG9yIHRoZSBgZXh0ZW5kZWQgYXJnJyByZWdpc3RlcnMgKHIxMywgcjE0KSwgZXZlbiB0aG91Z2gKKyAgIHRoZXkgYXJlIGFjdHVhbGx5IGNsb2JiZXJlZCB0b28gKHRoaXMgaXMgYmVjYXVzZSBnY2MncyBgYXNtJyBzdGF0ZW1lbnQKKyAgIGRvZXNuJ3QgYWxsb3cgYSBjbG9iYmVyIHRvIGJlIHVzZWQgYXMgYW4gaW5wdXQgb3Igb3V0cHV0KS4gICovCisjZGVmaW5lIFNZU0NBTExfQ0xPQkJFUlMJInIxIiwgInI1IiwgInIxMSIsICJyMTUiLCAicjE2IiwgXAorCQkJCSJyMTciLCAicjE4IiwgInIxOSIKKworLyogUmVnaXN0ZXJzIGNsb2JiZXJlZCBieSBhIGBzaG9ydCcgc3lzY2FsbC4gIFRoaXMgaW5jbHVkZXMgYWxsIGNsb2JiZXJzCisgICBleGNlcHQgdGhlIHN5c2NhbGwgbnVtYmVyIChyMTIpLiAgKi8KKyNkZWZpbmUgU1lTQ0FMTF9TSE9SVF9DTE9CQkVSUwlTWVNDQUxMX0NMT0JCRVJTLCAicjEzIiwgInIxNCIKKworCisvKiBVc2VyIHByb2dyYW1zIHNvbWV0aW1lcyBlbmQgdXAgaW5jbHVkaW5nIHRoaXMgaGVhZGVyIGZpbGUKKyAgIChpbmRpcmVjdGx5LCB2aWEgdUNsaWJjIGhlYWRlciBmaWxlcyksIHNvIEknbSBhIGJpdCBuZXJ2b3VzIGp1c3QKKyAgIGluY2x1ZGluZyA8bGludXgvY29tcGlsZXIuaD4uICAqLworI2lmICFkZWZpbmVkKF9fYnVpbHRpbl9leHBlY3QpICYmIF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPCA5NgorI2RlZmluZSBfX2J1aWx0aW5fZXhwZWN0KHgsIGV4cGVjdGVkX3ZhbHVlKSAoeCkKKyNlbmRpZgorCisjZGVmaW5lIF9fc3lzY2FsbF9yZXR1cm4odHlwZSwgcmVzKQkJCQkJICAgICAgXAorICBkbyB7CQkJCQkJCQkJICAgICAgXAorCSAgLyogdXNlci12aXNpYmxlIGVycm9yIG51bWJlcnMgYXJlIGluIHRoZSByYW5nZSAtMSAtIC0xMjQ6CSAgICAgIFwKKwkgICAgIHNlZSA8YXNtLXY4NTAvZXJybm8uaD4gKi8JCQkJCSAgICAgIFwKKwkgIGlmIChfX2J1aWx0aW5fZXhwZWN0ICgodW5zaWduZWQgbG9uZykocmVzKSA+PSAodW5zaWduZWQgbG9uZykoLTEyNSksIDApKSB7IFwKKwkJICBlcnJubyA9IC0ocmVzKTsJCQkJCSAgICAgIFwKKwkJICByZXMgPSAtMTsJCQkJCQkgICAgICBcCisJICB9CQkJCQkJCQkgICAgICBcCisJICByZXR1cm4gKHR5cGUpIChyZXMpOwkJCQkJCSAgICAgIFwKKyAgfSB3aGlsZSAoMCkKKworCisjZGVmaW5lIF9zeXNjYWxsMCh0eXBlLCBuYW1lKQkJCQkJCSAgICAgIFwKK3R5cGUgbmFtZSAodm9pZCkJCQkJCQkJICAgICAgXAorewkJCQkJCQkJCSAgICAgIFwKKyAgcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3N5c2NhbGwgX19hc21fXyAoU1lTQ0FMTF9OVU0pID0gX19OUl8jI25hbWU7CSAgICAgIFwKKyAgcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3JldCBfX2FzbV9fIChTWVNDQUxMX1JFVCk7CQkJICAgICAgXAorICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInRyYXAgIiBTWVNDQUxMX1NIT1JUX1RSQVAJCQkgICAgICBcCisJCQk6ICI9ciIgKF9fcmV0KSwgIj1yIiAoX19zeXNjYWxsKQkgCSAgICAgIFwKKwkJCTogIjEiIChfX3N5c2NhbGwpCQkJCSAgICAgIFwKKwkJCTogU1lTQ0FMTF9TSE9SVF9DTE9CQkVSUyk7CQkJICAgICAgXAorICBfX3N5c2NhbGxfcmV0dXJuICh0eXBlLCBfX3JldCk7CQkJCQkgICAgICBcCit9CisKKyNkZWZpbmUgX3N5c2NhbGwxKHR5cGUsIG5hbWUsIGF0eXBlLCBhKQkJCQkJICAgICAgXAordHlwZSBuYW1lIChhdHlwZSBhKQkJCQkJCQkgICAgICBcCit7CQkJCQkJCQkJICAgICAgXAorICByZWdpc3RlciBhdHlwZSBfX2EgX19hc21fXyAoU1lTQ0FMTF9BUkcwKSA9IGE7CQkJICAgICAgXAorICByZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fc3lzY2FsbCBfX2FzbV9fIChTWVNDQUxMX05VTSkgPSBfX05SXyMjbmFtZTsJICAgICAgXAorICByZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fcmV0IF9fYXNtX18gKFNZU0NBTExfUkVUKTsJCQkgICAgICBcCisgIF9fYXNtX18gX192b2xhdGlsZV9fICgidHJhcCAiIFNZU0NBTExfU0hPUlRfVFJBUAkJCSAgICAgIFwKKwkJCTogIj1yIiAoX19yZXQpLCAiPXIiIChfX3N5c2NhbGwpCQkgICAgICBcCisJCQk6ICIxIiAoX19zeXNjYWxsKSwgInIiIChfX2EpCQkJICAgICAgXAorCQkJOiBTWVNDQUxMX1NIT1JUX0NMT0JCRVJTKTsJCQkgICAgICBcCisgIF9fc3lzY2FsbF9yZXR1cm4gKHR5cGUsIF9fcmV0KTsJCQkJCSAgICAgIFwKK30KKworI2RlZmluZSBfc3lzY2FsbDIodHlwZSwgbmFtZSwgYXR5cGUsIGEsIGJ0eXBlLCBiKQkJCSAgICAgIFwKK3R5cGUgbmFtZSAoYXR5cGUgYSwgYnR5cGUgYikJCQkJCQkgICAgICBcCit7CQkJCQkJCQkJICAgICAgXAorICByZWdpc3RlciBhdHlwZSBfX2EgX19hc21fXyAoU1lTQ0FMTF9BUkcwKSA9IGE7CQkJICAgICAgXAorICByZWdpc3RlciBidHlwZSBfX2IgX19hc21fXyAoU1lTQ0FMTF9BUkcxKSA9IGI7CQkJICAgICAgXAorICByZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fc3lzY2FsbCBfX2FzbV9fIChTWVNDQUxMX05VTSkgPSBfX05SXyMjbmFtZTsJICAgICAgXAorICByZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fcmV0IF9fYXNtX18gKFNZU0NBTExfUkVUKTsJCQkgICAgICBcCisgIF9fYXNtX18gX192b2xhdGlsZV9fICgidHJhcCAiIFNZU0NBTExfU0hPUlRfVFJBUAkJCSAgICAgIFwKKwkJCTogIj1yIiAoX19yZXQpLCAiPXIiIChfX3N5c2NhbGwpCQkgICAgICBcCisJCQk6ICIxIiAoX19zeXNjYWxsKSwgInIiIChfX2EpLCAiciIgKF9fYikJCSAgICAgIFwKKwkJCTogU1lTQ0FMTF9TSE9SVF9DTE9CQkVSUyk7CQkJICAgICAgXAorICBfX3N5c2NhbGxfcmV0dXJuICh0eXBlLCBfX3JldCk7CQkJCQkgICAgICBcCit9CisKKyNkZWZpbmUgX3N5c2NhbGwzKHR5cGUsIG5hbWUsIGF0eXBlLCBhLCBidHlwZSwgYiwgY3R5cGUsIGMpCQkgICAgICBcCit0eXBlIG5hbWUgKGF0eXBlIGEsIGJ0eXBlIGIsIGN0eXBlIGMpCQkJCQkgICAgICBcCit7CQkJCQkJCQkJICAgICAgXAorICByZWdpc3RlciBhdHlwZSBfX2EgX19hc21fXyAoU1lTQ0FMTF9BUkcwKSA9IGE7CQkJICAgICAgXAorICByZWdpc3RlciBidHlwZSBfX2IgX19hc21fXyAoU1lTQ0FMTF9BUkcxKSA9IGI7CQkJICAgICAgXAorICByZWdpc3RlciBjdHlwZSBfX2MgX19hc21fXyAoU1lTQ0FMTF9BUkcyKSA9IGM7CQkJICAgICAgXAorICByZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fc3lzY2FsbCBfX2FzbV9fIChTWVNDQUxMX05VTSkgPSBfX05SXyMjbmFtZTsJICAgICAgXAorICByZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fcmV0IF9fYXNtX18gKFNZU0NBTExfUkVUKTsJCQkgICAgICBcCisgIF9fYXNtX18gX192b2xhdGlsZV9fICgidHJhcCAiIFNZU0NBTExfU0hPUlRfVFJBUAkJCSAgICAgIFwKKwkJCTogIj1yIiAoX19yZXQpLCAiPXIiIChfX3N5c2NhbGwpCQkgICAgICBcCisJCQk6ICIxIiAoX19zeXNjYWxsKSwgInIiIChfX2EpLCAiciIgKF9fYiksICJyIiAoX19jKSAgICBcCisJCQk6IFNZU0NBTExfU0hPUlRfQ0xPQkJFUlMpOwkJCSAgICAgIFwKKyAgX19zeXNjYWxsX3JldHVybiAodHlwZSwgX19yZXQpOwkJCQkJICAgICAgXAorfQorCisjZGVmaW5lIF9zeXNjYWxsNCh0eXBlLCBuYW1lLCBhdHlwZSwgYSwgYnR5cGUsIGIsIGN0eXBlLCBjLCBkdHlwZSwgZCkJICAgICAgXAordHlwZSBuYW1lIChhdHlwZSBhLCBidHlwZSBiLCBjdHlwZSBjLCBkdHlwZSBkKQkJCQkgICAgICBcCit7CQkJCQkJCQkJICAgICAgXAorICByZWdpc3RlciBhdHlwZSBfX2EgX19hc21fXyAoU1lTQ0FMTF9BUkcwKSA9IGE7CQkJICAgICAgXAorICByZWdpc3RlciBidHlwZSBfX2IgX19hc21fXyAoU1lTQ0FMTF9BUkcxKSA9IGI7CQkJICAgICAgXAorICByZWdpc3RlciBjdHlwZSBfX2MgX19hc21fXyAoU1lTQ0FMTF9BUkcyKSA9IGM7CQkJICAgICAgXAorICByZWdpc3RlciBkdHlwZSBfX2QgX19hc21fXyAoU1lTQ0FMTF9BUkczKSA9IGQ7CQkJICAgICAgXAorICByZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fc3lzY2FsbCBfX2FzbV9fIChTWVNDQUxMX05VTSkgPSBfX05SXyMjbmFtZTsJICAgICAgXAorICByZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fcmV0IF9fYXNtX18gKFNZU0NBTExfUkVUKTsJCQkgICAgICBcCisgIF9fYXNtX18gX192b2xhdGlsZV9fICgidHJhcCAiIFNZU0NBTExfU0hPUlRfVFJBUAkJCSAgICAgIFwKKwkJCTogIj1yIiAoX19yZXQpLCAiPXIiIChfX3N5c2NhbGwpCQkgICAgICBcCisJCQk6ICIxIiAoX19zeXNjYWxsKSwJCQkJICAgICAgXAorCQkJInIiIChfX2EpLCAiciIgKF9fYiksICJyIiAoX19jKSwgInIiIChfX2QpCSAgICAgIFwKKwkJCTogU1lTQ0FMTF9TSE9SVF9DTE9CQkVSUyk7CQkJICAgICAgXAorICBfX3N5c2NhbGxfcmV0dXJuICh0eXBlLCBfX3JldCk7CQkJCQkgICAgICBcCit9CisKKyNkZWZpbmUgX3N5c2NhbGw1KHR5cGUsIG5hbWUsIGF0eXBlLCBhLCBidHlwZSwgYiwgY3R5cGUsIGMsIGR0eXBlLCBkLCBldHlwZSxlKVwKK3R5cGUgbmFtZSAoYXR5cGUgYSwgYnR5cGUgYiwgY3R5cGUgYywgZHR5cGUgZCwgZXR5cGUgZSkJCQkgICAgICBcCit7CQkJCQkJCQkJICAgICAgXAorICByZWdpc3RlciBhdHlwZSBfX2EgX19hc21fXyAoU1lTQ0FMTF9BUkcwKSA9IGE7CQkJICAgICAgXAorICByZWdpc3RlciBidHlwZSBfX2IgX19hc21fXyAoU1lTQ0FMTF9BUkcxKSA9IGI7CQkJICAgICAgXAorICByZWdpc3RlciBjdHlwZSBfX2MgX19hc21fXyAoU1lTQ0FMTF9BUkcyKSA9IGM7CQkJICAgICAgXAorICByZWdpc3RlciBkdHlwZSBfX2QgX19hc21fXyAoU1lTQ0FMTF9BUkczKSA9IGQ7CQkJICAgICAgXAorICByZWdpc3RlciBldHlwZSBfX2UgX19hc21fXyAoU1lTQ0FMTF9BUkc0KSA9IGU7CQkJICAgICAgXAorICByZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fc3lzY2FsbCBfX2FzbV9fIChTWVNDQUxMX05VTSkgPSBfX05SXyMjbmFtZTsJICAgICAgXAorICByZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fcmV0IF9fYXNtX18gKFNZU0NBTExfUkVUKTsJCQkgICAgICBcCisgIF9fYXNtX18gX192b2xhdGlsZV9fICgidHJhcCAiIFNZU0NBTExfTE9OR19UUkFQCQkJICAgICAgXAorCQkJOiAiPXIiIChfX3JldCksICI9ciIgKF9fc3lzY2FsbCksICI9ciIgKF9fZSkJICAgICAgXAorCQkJOiAiMSIgKF9fc3lzY2FsbCksCQkJCSAgICAgIFwKKwkJCSJyIiAoX19hKSwgInIiIChfX2IpLCAiciIgKF9fYyksICJyIiAoX19kKSwgIjIiIChfX2UpIFwKKwkJCTogU1lTQ0FMTF9DTE9CQkVSUyk7CQkJCSAgICAgIFwKKyAgX19zeXNjYWxsX3JldHVybiAodHlwZSwgX19yZXQpOwkJCQkJICAgICAgXAorfQorCisjaWYgX19HTlVDX18gPCAzCisvKiBJbiBvbGRlciB2ZXJzaW9ucyBvZiBnY2MsIGBhc20nIHN0YXRlbWVudHMgd2l0aCBtb3JlIHRoYW4gMTAKKyAgIGlucHV0L291dHB1dCBhcmd1bWVudHMgcHJvZHVjZSBhIGZhdGFsIGVycm9yLiAgVG8gd29yayBhcm91bmQgdGhpcworICAgcHJvYmxlbSwgd2UgdXNlIHR3byB2ZXJzaW9ucywgb25lIGZvciBnY2MtMy54IGFuZCBvbmUgZm9yIGVhcmxpZXIKKyAgIHZlcnNpb25zIG9mIGdjYyAodGhlIGBlYXJsaWVyIGdjYycgdmVyc2lvbiBkb2Vzbid0IHdvcmsgd2l0aCBnY2MtMy54CisgICBiZWNhdXNlIGdjYy0zLnggZG9lc24ndCBhbGxvdyBjbG9iYmVycyB0byBhbHNvIGJlIGlucHV0IGFyZ3VtZW50cykuICAqLworI2RlZmluZSBfX1NZU0NBTEw2X1RSQVAoc3lzY2FsbCwgcmV0LCBhLCBiLCBjLCBkLCBlLCBmKQkJCSAgICAgIFwKKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJ0cmFwICIgU1lTQ0FMTF9MT05HX1RSQVAJCQkgICAgICBcCisJCQk6ICI9ciIgKHJldCksICI9ciIgKHN5c2NhbGwpCQkJICAgICAgXAorCQkJOiAiMSIgKHN5c2NhbGwpLAkJCQkgICAgICBcCisJCQkiciIgKGEpLCAiciIgKGIpLCAiciIgKGMpLCAiciIgKGQpLAkJICAgICAgXAorIAkJCSJyIiAoZSksICJyIiAoZikJCQkJICAgICAgXAorCQkJOiBTWVNDQUxMX0NMT0JCRVJTLCBTWVNDQUxMX0FSRzQsIFNZU0NBTExfQVJHNSk7CisjZWxzZSAvKiBfX0dOVUNfXyA+PSAzICovCisjZGVmaW5lIF9fU1lTQ0FMTDZfVFJBUChzeXNjYWxsLCByZXQsIGEsIGIsIGMsIGQsIGUsIGYpCQkJICAgICAgXAorICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInRyYXAgIiBTWVNDQUxMX0xPTkdfVFJBUAkJCSAgICAgIFwKKwkJCTogIj1yIiAocmV0KSwgIj1yIiAoc3lzY2FsbCksCQkJICAgICAgXAorIAkJCSI9ciIgKGUpLCAiPXIiIChmKQkJCQkgICAgICBcCisJCQk6ICIxIiAoc3lzY2FsbCksCQkJCSAgICAgIFwKKwkJCSJyIiAoYSksICJyIiAoYiksICJyIiAoYyksICJyIiAoZCksCQkgICAgICBcCisJCQkiMiIgKGUpLCAiMyIgKGYpCQkJCSAgICAgIFwKKwkJCTogU1lTQ0FMTF9DTE9CQkVSUyk7CisjZW5kaWYKKworI2RlZmluZSBfc3lzY2FsbDYodHlwZSwgbmFtZSwgYXR5cGUsIGEsIGJ0eXBlLCBiLCBjdHlwZSwgYywgZHR5cGUsIGQsIGV0eXBlLCBlLCBmdHlwZSwgZikgXAordHlwZSBuYW1lIChhdHlwZSBhLCBidHlwZSBiLCBjdHlwZSBjLCBkdHlwZSBkLCBldHlwZSBlLCBmdHlwZSBmKQkgICAgICBcCit7CQkJCQkJCQkJICAgICAgXAorICByZWdpc3RlciBhdHlwZSBfX2EgX19hc21fXyAoU1lTQ0FMTF9BUkcwKSA9IGE7CQkJICAgICAgXAorICByZWdpc3RlciBidHlwZSBfX2IgX19hc21fXyAoU1lTQ0FMTF9BUkcxKSA9IGI7CQkJICAgICAgXAorICByZWdpc3RlciBjdHlwZSBfX2MgX19hc21fXyAoU1lTQ0FMTF9BUkcyKSA9IGM7CQkJICAgICAgXAorICByZWdpc3RlciBkdHlwZSBfX2QgX19hc21fXyAoU1lTQ0FMTF9BUkczKSA9IGQ7CQkJICAgICAgXAorICByZWdpc3RlciBldHlwZSBfX2UgX19hc21fXyAoU1lTQ0FMTF9BUkc0KSA9IGU7CQkJICAgICAgXAorICByZWdpc3RlciBldHlwZSBfX2YgX19hc21fXyAoU1lTQ0FMTF9BUkc1KSA9IGY7CQkJICAgICAgXAorICByZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fc3lzY2FsbCBfX2FzbV9fIChTWVNDQUxMX05VTSkgPSBfX05SXyMjbmFtZTsJICAgICAgXAorICByZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fcmV0IF9fYXNtX18gKFNZU0NBTExfUkVUKTsJCQkgICAgICBcCisgIF9fU1lTQ0FMTDZfVFJBUChfX3N5c2NhbGwsIF9fcmV0LCBfX2EsIF9fYiwgX19jLCBfX2QsIF9fZSwgX19mKTsJICAgICAgXAorICBfX3N5c2NhbGxfcmV0dXJuICh0eXBlLCBfX3JldCk7CQkJCQkgICAgICBcCit9CisJCQorCisjaWZkZWYgX19LRVJORUxfXworI2RlZmluZSBfX0FSQ0hfV0FOVF9JUENfUEFSU0VfVkVSU0lPTgorI2RlZmluZSBfX0FSQ0hfV0FOVF9PTERfUkVBRERJUgorI2RlZmluZSBfX0FSQ0hfV0FOVF9TVEFUNjQKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0FMQVJNCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19HRVRIT1NUTkFNRQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfUEFVU0UKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NHRVRNQVNLCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdOQUwKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1RJTUUKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1VUSU1FCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19XQUlUUElECisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TT0NLRVRDQUxMCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19GQURWSVNFNjQKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0dFVFBHUlAKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0xMU0VFSworI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfTklDRQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfT0xEVU1PVU5UCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdQRU5ESU5HCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdQUk9DTUFTSworI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfUlRfU0lHQUNUSU9OCisjZW5kaWYKKworI2lmZGVmIF9fS0VSTkVMX1NZU0NBTExTX18KKworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyoKKyAqIHdlIG5lZWQgdGhpcyBpbmxpbmUgLSBmb3JraW5nIGZyb20ga2VybmVsIHNwYWNlIHdpbGwgcmVzdWx0CisgKiBpbiBOTyBDT1BZIE9OIFdSSVRFICghISEpLCB1bnRpbCBhbiBleGVjdmUgaXMgZXhlY3V0ZWQuIFRoaXMKKyAqIGlzIG5vIHByb2JsZW0sIGJ1dCBmb3IgdGhlIHN0YWNrLiBUaGlzIGlzIGhhbmRsZWQgYnkgbm90IGxldHRpbmcKKyAqIG1haW4oKSB1c2UgdGhlIHN0YWNrIGF0IGFsbCBhZnRlciBmb3JrKCkuIFRodXMsIG5vIGZ1bmN0aW9uCisgKiBjYWxscyAtIHdoaWNoIG1lYW5zIGlubGluZSBjb2RlIGZvciBmb3JrIHRvbywgYXMgb3RoZXJ3aXNlIHdlCisgKiB3b3VsZCB1c2UgdGhlIHN0YWNrIHVwb24gZXhpdCBmcm9tICdmb3JrKCknLgorICoKKyAqIEFjdHVhbGx5IG9ubHkgcGF1c2UgYW5kIGZvcmsgYXJlIG5lZWRlZCBpbmxpbmUsIHNvIHRoYXQgdGhlcmUKKyAqIHdvbid0IGJlIGFueSBtZXNzaW5nIHdpdGggdGhlIHN0YWNrIGZyb20gbWFpbigpLCBidXQgd2UgZGVmaW5lCisgKiBzb21lIG90aGVycyB0b28uCisgKi8KKyNkZWZpbmUgX19OUl9fZXhpdCBfX05SX2V4aXQKK2V4dGVybiBpbmxpbmUgX3N5c2NhbGwwKHBpZF90LHNldHNpZCkKK2V4dGVybiBpbmxpbmUgX3N5c2NhbGwzKGludCx3cml0ZSxpbnQsZmQsY29uc3QgY2hhciAqLGJ1ZixvZmZfdCxjb3VudCkKK2V4dGVybiBpbmxpbmUgX3N5c2NhbGwzKGludCxyZWFkLGludCxmZCxjaGFyICosYnVmLG9mZl90LGNvdW50KQorZXh0ZXJuIGlubGluZSBfc3lzY2FsbDMob2ZmX3QsbHNlZWssaW50LGZkLG9mZl90LG9mZnNldCxpbnQsY291bnQpCitleHRlcm4gaW5saW5lIF9zeXNjYWxsMShpbnQsZHVwLGludCxmZCkKK2V4dGVybiBpbmxpbmUgX3N5c2NhbGwzKGludCxleGVjdmUsY29uc3QgY2hhciAqLGZpbGUsY2hhciAqKixhcmd2LGNoYXIgKiosZW52cCkKK2V4dGVybiBpbmxpbmUgX3N5c2NhbGwzKGludCxvcGVuLGNvbnN0IGNoYXIgKixmaWxlLGludCxmbGFnLGludCxtb2RlKQorZXh0ZXJuIGlubGluZSBfc3lzY2FsbDEoaW50LGNsb3NlLGludCxmZCkKK2V4dGVybiBpbmxpbmUgX3N5c2NhbGwxKGludCxfZXhpdCxpbnQsZXhpdGNvZGUpCitleHRlcm4gaW5saW5lIF9zeXNjYWxsMyhwaWRfdCx3YWl0cGlkLHBpZF90LHBpZCxpbnQgKix3YWl0X3N0YXQsaW50LG9wdGlvbnMpCisKK2V4dGVybiBpbmxpbmUgcGlkX3Qgd2FpdChpbnQgKiB3YWl0X3N0YXQpCit7CisJcmV0dXJuIHdhaXRwaWQgKC0xLCB3YWl0X3N0YXQsIDApOworfQorCit1bnNpZ25lZCBsb25nIHN5c19tbWFwKHVuc2lnbmVkIGxvbmcgYWRkciwgc2l6ZV90IGxlbiwKKwkJCXVuc2lnbmVkIGxvbmcgcHJvdCwgdW5zaWduZWQgbG9uZyBmbGFncywKKwkJCXVuc2lnbmVkIGxvbmcgZmQsIG9mZl90IG9mZnNldCk7Cit1bnNpZ25lZCBsb25nIHN5c19tbWFwMih1bnNpZ25lZCBsb25nIGFkZHIsIHNpemVfdCBsZW4sCisJCQl1bnNpZ25lZCBsb25nIHByb3QsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCisJCQl1bnNpZ25lZCBsb25nIGZkLCB1bnNpZ25lZCBsb25nIHBnb2ZmKTsKK3N0cnVjdCBwdF9yZWdzOworaW50IHN5c19leGVjdmUgKGNoYXIgKm5hbWUsIGNoYXIgKiphcmd2LCBjaGFyICoqZW52cCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworaW50IHN5c19waXBlIChpbnQgKmZpbGRlcyk7CitpbnQgc3lzX3B0cmFjZShsb25nIHJlcXVlc3QsIGxvbmcgcGlkLCBsb25nIGFkZHIsIGxvbmcgZGF0YSk7CitzdHJ1Y3Qgc2lnYWN0aW9uOworYXNtbGlua2FnZSBsb25nIHN5c19ydF9zaWdhY3Rpb24oaW50IHNpZywKKwkJCQljb25zdCBzdHJ1Y3Qgc2lnYWN0aW9uIF9fdXNlciAqYWN0LAorCQkJCXN0cnVjdCBzaWdhY3Rpb24gX191c2VyICpvYWN0LAorCQkJCXNpemVfdCBzaWdzZXRzaXplKTsKKworI2VuZGlmCisKKy8qCisgKiAiQ29uZGl0aW9uYWwiIHN5c2NhbGxzCisgKi8KKyNkZWZpbmUgY29uZF9zeXNjYWxsKG5hbWUpCQkJCQkJICAgICAgXAorICBhc20gKCIud2Vha1x0IiBDX1NZTUJPTF9TVFJJTkcobmFtZSkgIjsiCQkJCSAgICAgIFwKKyAgICAgICAiLnNldFx0IiBDX1NZTUJPTF9TVFJJTkcobmFtZSkgIiwiIENfU1lNQk9MX1NUUklORyhzeXNfbmlfc3lzY2FsbCkpCisjaWYgMAorLyogVGhpcyBkb2Vzbid0IHdvcmsgaWYgdGhlcmUncyBhIGZ1bmN0aW9uIHByb3RvdHlwZSBmb3IgTkFNRSB2aXNpYmxlLAorICAgYmVjYXVzZSB0aGUgYXJndW1lbnQgdHlwZXMgcHJvYmFibHkgd29uJ3QgbWF0Y2guICAqLworI2RlZmluZSBjb25kX3N5c2NhbGwobmFtZSkgIFwKKyAgdm9pZCBuYW1lICh2b2lkKSBfX2F0dHJpYnV0ZV9fICgod2VhaywgYWxpYXMgKCJzeXNfbmlfc3lzY2FsbCIpKSk7CisjZW5kaWYKKworI2VuZGlmIC8qIF9fVjg1MF9VTklTVERfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS12ODUwL3VzZXIuaCBiL2luY2x1ZGUvYXNtLXY4NTAvdXNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjZjRjZWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS12ODUwL3VzZXIuaApAQCAtMCwwICsxLDU2IEBACisjaWZuZGVmIF9fVjg1MF9VU0VSX0hfXworI2RlZmluZSBfX1Y4NTBfVVNFUl9IX18KKworLyogQWRhcHRlZCBmcm9tIDxhc20tcHBjL3VzZXIuaD4uICAqLworCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKworLyoKKyAqIENvcmUgZmlsZSBmb3JtYXQ6IFRoZSBjb3JlIGZpbGUgaXMgd3JpdHRlbiBpbiBzdWNoIGEgd2F5IHRoYXQgZ2RiCisgKiBjYW4gdW5kZXJzdGFuZCBpdCBhbmQgcHJvdmlkZSB1c2VmdWwgaW5mb3JtYXRpb24gdG8gdGhlIHVzZXIgKHVuZGVyCisgKiBsaW51eCB3ZSB1c2UgdGhlIGB0cmFkLWNvcmUnIGJmZCwgTk9UIHRoZSBvc2YtY29yZSkuICBUaGUgZmlsZSBjb250ZW50cworICogYXJlIGFzIGZvbGxvd3M6CisgKgorICogIHVwYWdlOiAxIHBhZ2UgY29uc2lzdGluZyBvZiBhIHVzZXIgc3RydWN0IHRoYXQgdGVsbHMgZ2RiCisgKgl3aGF0IGlzIHByZXNlbnQgaW4gdGhlIGZpbGUuICBEaXJlY3RseSBhZnRlciB0aGlzIGlzIGEKKyAqCWNvcHkgb2YgdGhlIHRhc2tfc3RydWN0LCB3aGljaCBpcyBjdXJyZW50bHkgbm90IHVzZWQgYnkgZ2RiLAorICoJYnV0IGl0IG1heSBjb21lIGluIGhhbmR5IGF0IHNvbWUgcG9pbnQuICBBbGwgb2YgdGhlIHJlZ2lzdGVycworICoJYXJlIHN0b3JlZCBhcyBwYXJ0IG9mIHRoZSB1cGFnZS4gIFRoZSB1cGFnZSBzaG91bGQgYWx3YXlzIGJlCisgKglvbmx5IG9uZSBwYWdlIGxvbmcuCisgKiAgZGF0YTogVGhlIGRhdGEgc2VnbWVudCBmb2xsb3dzIG5leHQuICBXZSB1c2UgY3VycmVudC0+ZW5kX3RleHQgdG8KKyAqCWN1cnJlbnQtPmJyayB0byBwaWNrIHVwIGFsbCBvZiB0aGUgdXNlciB2YXJpYWJsZXMsIHBsdXMgYW55IG1lbW9yeQorICoJdGhhdCBtYXkgaGF2ZSBiZWVuIHNicmsnZWQuICBObyBhdHRlbXB0IGlzIG1hZGUgdG8gZGV0ZXJtaW5lIGlmIGEKKyAqCXBhZ2UgaXMgZGVtYW5kLXplcm8gb3IgaWYgYSBwYWdlIGlzIHRvdGFsbHkgdW51c2VkLCB3ZSBqdXN0IGNvdmVyCisgKgl0aGUgZW50aXJlIHJhbmdlLiAgQWxsIG9mIHRoZSBhZGRyZXNzZXMgYXJlIHJvdW5kZWQgaW4gc3VjaCBhIHdheQorICoJdGhhdCBhbiBpbnRlZ3JhbCBudW1iZXIgb2YgcGFnZXMgaXMgd3JpdHRlbi4KKyAqICBzdGFjazogV2UgbmVlZCB0aGUgc3RhY2sgaW5mb3JtYXRpb24gaW4gb3JkZXIgdG8gZ2V0IGEgbWVhbmluZ2Z1bAorICoJYmFja3RyYWNlLiAgV2UgbmVlZCB0byB3cml0ZSB0aGUgZGF0YSBmcm9tIHVzcCB0bworICoJY3VycmVudC0+c3RhcnRfc3RhY2ssIHNvIHdlIHJvdW5kIGVhY2ggb2YgdGhlc2UgaW4gb3JkZXIgdG8gYmUgYWJsZQorICoJdG8gd3JpdGUgYW4gaW50ZWdlciBudW1iZXIgb2YgcGFnZXMuCisgKi8KK3N0cnVjdCB1c2VyIHsKKwlzdHJ1Y3QgcHRfcmVncwlyZWdzOwkJCS8qIGVudGlyZSBtYWNoaW5lIHN0YXRlICovCisJc2l6ZV90CQl1X3RzaXplOwkJLyogdGV4dCBzaXplIChwYWdlcykgKi8KKwlzaXplX3QJCXVfZHNpemU7CQkvKiBkYXRhIHNpemUgKHBhZ2VzKSAqLworCXNpemVfdAkJdV9zc2l6ZTsJCS8qIHN0YWNrIHNpemUgKHBhZ2VzKSAqLworCXVuc2lnbmVkIGxvbmcJc3RhcnRfY29kZTsJCS8qIHRleHQgc3RhcnRpbmcgYWRkcmVzcyAqLworCXVuc2lnbmVkIGxvbmcJc3RhcnRfZGF0YTsJCS8qIGRhdGEgc3RhcnRpbmcgYWRkcmVzcyAqLworCXVuc2lnbmVkIGxvbmcJc3RhcnRfc3RhY2s7CQkvKiBzdGFjayBzdGFydGluZyBhZGRyZXNzICovCisJbG9uZyBpbnQJc2lnbmFsOwkJCS8qIHNpZ25hbCBjYXVzaW5nIGNvcmUgZHVtcCAqLworCXN0cnVjdCByZWdzICoJdV9hcjA7CQkJLyogaGVscCBnZGIgZmluZCByZWdpc3RlcnMgKi8KKwl1bnNpZ25lZCBsb25nCW1hZ2ljOwkJCS8qIGlkZW50aWZpZXMgYSBjb3JlIGZpbGUgKi8KKwljaGFyCQl1X2NvbW1bMzJdOwkJLyogdXNlciBjb21tYW5kIG5hbWUgKi8KK307CisKKyNkZWZpbmUgTkJQRwkJCVBBR0VfU0laRQorI2RlZmluZSBVUEFHRVMJCQkxCisjZGVmaW5lIEhPU1RfVEVYVF9TVEFSVF9BRERSCSh1LnN0YXJ0X2NvZGUpCisjZGVmaW5lIEhPU1RfREFUQV9TVEFSVF9BRERSCSh1LnN0YXJ0X2RhdGEpCisjZGVmaW5lIEhPU1RfU1RBQ0tfRU5EX0FERFIJKHUuc3RhcnRfc3RhY2sgKyB1LnVfc3NpemUgKiBOQlBHKQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX19WODUwX1VTRVJfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS12ODUwL3Y4NTBlLmggYi9pbmNsdWRlL2FzbS12ODUwL3Y4NTBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWEyMjJlYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXY4NTAvdjg1MGUuaApAQCAtMCwwICsxLDIxIEBACisvKgorICogaW5jbHVkZS9hc20tdjg1MC92ODUwZS5oIC0tIFY4NTBFIENQVQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEsMDIsMDMgIE5FQyBFbGVjdHJvbmljcyBDb3Jwb3JhdGlvbgorICogIENvcHlyaWdodCAoQykgMjAwMSwwMiwwMyAgTWlsZXMgQmFkZXIgPG1pbGVzQGdudS5vcmc+CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcworICogYXJjaGl2ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFdyaXR0ZW4gYnkgTWlsZXMgQmFkZXIgPG1pbGVzQGdudS5vcmc+CisgKi8KKworI2lmbmRlZiBfX1Y4NTBfVjg1MEVfSF9fCisjZGVmaW5lIF9fVjg1MF9WODUwRV9IX18KKworI2luY2x1ZGUgPGFzbS92ODUwZV9pbnRjLmg+CisKKyNkZWZpbmUgQ1BVX0FSQ0ggInY4NTBlIgorCisjZW5kaWYgLyogX19WODUwX1Y4NTBFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdjg1MC92ODUwZTIuaCBiL2luY2x1ZGUvYXNtLXY4NTAvdjg1MGUyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg2ODA0MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXY4NTAvdjg1MGUyLmgKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLXY4NTAvdjg1MGUyLmggLS0gTWFjaGluZS1kZXBlbmRlbnQgZGVmcyBmb3IgVjg1MEUyIENQVXMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAyLDAzICBORUMgRWxlY3Ryb25pY3MgQ29ycG9yYXRpb24KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDIsMDMgIE1pbGVzIEJhZGVyIDxtaWxlc0BnbnUub3JnPgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMKKyAqIGFyY2hpdmUgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBXcml0dGVuIGJ5IE1pbGVzIEJhZGVyIDxtaWxlc0BnbnUub3JnPgorICovCisKKyNpZm5kZWYgX19WODUwX1Y4NTBFMl9IX18KKyNkZWZpbmUgX19WODUwX1Y4NTBFMl9IX18KKworI2luY2x1ZGUgPGFzbS92ODUwZV9pbnRjLmg+CS8qIHY4NTBlLXN0eWxlIGludGVycnVwdCBzeXN0ZW0uICAqLworCisKKyNkZWZpbmUgQ1BVX0FSQ0ggInY4NTBlMiIKKworCisvKiBDb250cm9sIHJlZ2lzdGVycy4gICovCisKKy8qIENoaXAgYXJlYSBzZWxlY3QgY29udHJvbCAqLyAKKyNkZWZpbmUgVjg1MEUyX0NTQ19BRERSKG4pCSgweEZGRkZGMDYwICsgKG4pICogMikKKyNkZWZpbmUgVjg1MEUyX0NTQyhuKQkJKCoodm9sYXRpbGUgdTE2ICopVjg1MEUyX0NTQ19BRERSKG4pKQorLyogSS9PIGFyZWEgc2VsZWN0IGNvbnRyb2wgKi8KKyNkZWZpbmUgVjg1MEUyX0JQQ19BRERSCQkweEZGRkZGMDY0CisjZGVmaW5lIFY4NTBFMl9CUEMJCSgqKHZvbGF0aWxlIHUxNiAqKVY4NTBFMl9CUENfQUREUikKKy8qIEJ1cyBzaXplIGNvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgVjg1MEUyX0JTQ19BRERSCQkweEZGRkZGMDY2CisjZGVmaW5lIFY4NTBFMl9CU0MJCSgqKHZvbGF0aWxlIHUxNiAqKVY4NTBFMl9CU0NfQUREUikKKy8qIEVuZGlhbiBjb25maWd1cmF0aW9uICovCisjZGVmaW5lIFY4NTBFMl9CRUNfQUREUgkJMHhGRkZGRjA2OAorI2RlZmluZSBWODUwRTJfQkVDCQkoKih2b2xhdGlsZSB1MTYgKilWODUwRTJfQkVDX0FERFIpCisvKiBDYWNoZSBjb25maWd1cmF0aW9uICovCisjZGVmaW5lIFY4NTBFMl9CSENfQUREUgkJMHhGRkZGRjA2QQorI2RlZmluZSBWODUwRTJfQkhDCQkoKih2b2xhdGlsZSB1MTYgKilWODUwRTJfQkhDX0FERFIpCisvKiBOUEIgc3Ryb2JlLXdhaXQgY29uZmlndXJhdGlvbiAqLworI2RlZmluZSBWODUwRTJfVlNXQ19BRERSCTB4RkZGRkYwNkUKKyNkZWZpbmUgVjg1MEUyX1ZTV0MJCSgqKHZvbGF0aWxlIHUxNiAqKVY4NTBFMl9WU1dDX0FERFIpCisvKiBCdXMgY3ljbGUgdHlwZSAqLworI2RlZmluZSBWODUwRTJfQkNUX0FERFIobikJKDB4RkZGRkY0ODAgKyAobikgKiAyKQorI2RlZmluZSBWODUwRTJfQkNUKG4pCQkoKih2b2xhdGlsZSB1MTYgKilWODUwRTJfQkNUX0FERFIobikpCisvKiBEYXRhIHdhaXQgY29udHJvbCAqLworI2RlZmluZSBWODUwRTJfRFdDX0FERFIobikJKDB4RkZGRkY0ODQgKyAobikgKiAyKQorI2RlZmluZSBWODUwRTJfRFdDKG4pCQkoKih2b2xhdGlsZSB1MTYgKilWODUwRTJfRFdDX0FERFIobikpCisvKiBCdXMgY3ljbGUgY29udHJvbCAqLworI2RlZmluZSBWODUwRTJfQkNDX0FERFIJCTB4RkZGRkY0ODgKKyNkZWZpbmUgVjg1MEUyX0JDQwkJKCoodm9sYXRpbGUgdTE2ICopVjg1MEUyX0JDQ19BRERSKQorLyogQWRkcmVzcyB3YWl0IGNvbnRyb2wgKi8KKyNkZWZpbmUgVjg1MEUyX0FTQ19BRERSCQkweEZGRkZGNDhBCisjZGVmaW5lIFY4NTBFMl9BU0MJCSgqKHZvbGF0aWxlIHUxNiAqKVY4NTBFMl9BU0NfQUREUikKKy8qIExvY2FsIGJ1cyBzaXppbmcgY29udHJvbCAqLworI2RlZmluZSBWODUwRTJfTEJTX0FERFIJCTB4RkZGRkY0OEUKKyNkZWZpbmUgVjg1MEUyX0xCUwkJKCoodm9sYXRpbGUgdTE2ICopVjg1MEUyX0xCU19BRERSKQorLyogTGluZSBidWZmZXIgY29udHJvbCAqLworI2RlZmluZSBWODUwRTJfTEJDX0FERFIobikJKDB4RkZGRkY0OTAgKyAobikgKiAyKQorI2RlZmluZSBWODUwRTJfTEJDKG4pCQkoKih2b2xhdGlsZSB1MTYgKilWODUwRTJfTEJDX0FERFIobikpCisvKiBTRFJBTSBjb25maWd1cmF0aW9uICovCisjZGVmaW5lIFY4NTBFMl9TQ1JfQUREUihuKQkoMHhGRkZGRjRBMCArIChuKSAqIDQpCisjZGVmaW5lIFY4NTBFMl9TQ1IobikJCSgqKHZvbGF0aWxlIHUxNiAqKVY4NTBFMl9TQ1JfQUREUihuKSkKKy8qIFNEUkFNIHJlZnJlc2ggY3ljbGUgY29udHJvbCAqLworI2RlZmluZSBWODUwRTJfUkZTX0FERFIobikJKDB4RkZGRkY0QTIgKyAobikgKiA0KQorI2RlZmluZSBWODUwRTJfUkZTKG4pCQkoKih2b2xhdGlsZSB1MTYgKilWODUwRTJfUkZTX0FERFIobikpCisKKworI2VuZGlmIC8qIF9fVjg1MF9WODUwRTJfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS12ODUwL3Y4NTBlMl9jYWNoZS5oIGIvaW5jbHVkZS9hc20tdjg1MC92ODUwZTJfY2FjaGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWFjZGExCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdjg1MC92ODUwZTJfY2FjaGUuaApAQCAtMCwwICsxLDc0IEBACisvKgorICogaW5jbHVkZS9hc20tdjg1MC92ODUwZTJfY2FjaGVfY2FjaGUuaCAtLSBDYWNoZSBjb250cm9sIGZvciBWODUwRTIKKyAqIAljYWNoZSBtZW1vcmllcworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMgIE5FQyBFbGVjdHJvbmljcyBDb3Jwb3JhdGlvbgorICogIENvcHlyaWdodCAoQykgMjAwMyAgTWlsZXMgQmFkZXIgPG1pbGVzQGdudS5vcmc+CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcworICogYXJjaGl2ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFdyaXR0ZW4gYnkgTWlsZXMgQmFkZXIgPG1pbGVzQGdudS5vcmc+CisgKi8KKworI2lmbmRlZiBfX1Y4NTBfVjg1MEUyX0NBQ0hFX0hfXworI2RlZmluZSBfX1Y4NTBfVjg1MEUyX0NBQ0hFX0hfXworCisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisKKworLyogQ2FjaGUgY29udHJvbCByZWdpc3RlcnMuICAqLworCisvKiBCdXMgVHJhbnNhY3Rpb24gQ29udHJvbCAqLworI2RlZmluZSBWODUwRTJfQ0FDSEVfQlRTQ19BRERSCTB4RkZGRkYwNzAKKyNkZWZpbmUgVjg1MEUyX0NBQ0hFX0JUU0MgCSgqKHZvbGF0aWxlIHUxNiAqKVY4NTBFMl9DQUNIRV9CVFNDX0FERFIpCisjZGVmaW5lIFY4NTBFMl9DQUNIRV9CVFNDX0lDTQkweDAwMDEgLyogaWNhY2hlIGVuYWJsZSAqLworI2RlZmluZSBWODUwRTJfQ0FDSEVfQlRTQ19EQ00wCTB4MDAwNCAvKiBkY2FjaGUgZW5hYmxlLCBiaXQgMCAqLworI2RlZmluZSBWODUwRTJfQ0FDSEVfQlRTQ19EQ00xCTB4MDAwOCAvKiBkY2FjaGUgZW5hYmxlLCBiaXQgMSAqLworI2RlZmluZSBWODUwRTJfQ0FDSEVfQlRTQ19EQ01fV1QJCSAgICAgIC8qIHdyaXRlLXRocm91Z2ggKi8gXAorCQkJVjg1MEUyX0NBQ0hFX0JUU0NfRENNMAorI2lmZGVmIENPTkZJR19WODUwRTJfVjg1MEUyUworIyBkZWZpbmUgVjg1MEUyX0NBQ0hFX0JUU0NfRENNX1dCX05PX0FMTE9DICAgIC8qIHdyaXRlLWJhY2ssIG5vbi1hbGxvYyAqLyBcCisJCQlWODUwRTJfQ0FDSEVfQlRTQ19EQ00xCQorIyBkZWZpbmUgVjg1MEUyX0NBQ0hFX0JUU0NfRENNX1dCX0FMTE9DCSAgICAgIC8qIHdyaXRlLWJhY2ssIG5vbi1hbGxvYyAqLyBcCisJCQkoVjg1MEUyX0NBQ0hFX0JUU0NfRENNMSB8IFY4NTBFMl9DQUNIRV9CVFNDX0RDTTApCisjIGRlZmluZSBWODUwRTJfQ0FDSEVfQlRTQ19JU0VRCTB4MDAxMCAvKiBpY2FjaGUgYGFkZHJlc3Mgc2VxdWVuY2UgbW9kZScgKi8KKyMgZGVmaW5lIFY4NTBFMl9DQUNIRV9CVFNDX0RTRVEJMHgwMDIwIC8qIGRjYWNoZSBgYWRkcmVzcyBzZXF1ZW5jZSBtb2RlJyAqLworIyBkZWZpbmUgVjg1MEUyX0NBQ0hFX0JUU0NfSVJGQwkweDAwMzAKKyMgZGVmaW5lIFY4NTBFMl9DQUNIRV9CVFNDX0lMQ0QJMHg0MDAwCisjIGRlZmluZSBWODUwRTJfQ0FDSEVfQlRTQ19WQUJFCTB4ODAwMAorI2VuZGlmIC8qIENPTkZJR19WODUwRTJfVjg1MEUyUyAqLworCisvKiBDYWNoZSBvcGVyYXRpb24gc3RhcnQgYWRkcmVzcyByZWdpc3RlciAobG93LWJpdHMpLiAgKi8KKyNkZWZpbmUgVjg1MEUyX0NBQ0hFX0NBRExfQUREUgkweEZGRkZGMDc0CisjZGVmaW5lIFY4NTBFMl9DQUNIRV9DQURMIAkoKih2b2xhdGlsZSB1MTYgKilWODUwRTJfQ0FDSEVfQ0FETF9BRERSKQorLyogQ2FjaGUgb3BlcmF0aW9uIHN0YXJ0IGFkZHJlc3MgcmVnaXN0ZXIgKGhpZ2gtYml0cykuICAqLworI2RlZmluZSBWODUwRTJfQ0FDSEVfQ0FESF9BRERSCTB4RkZGRkYwNzYKKyNkZWZpbmUgVjg1MEUyX0NBQ0hFX0NBREggCSgqKHZvbGF0aWxlIHUxNiAqKVY4NTBFMl9DQUNIRV9DQURIX0FERFIpCisvKiBDYWNoZSBvcGVyYXRpb24gY291bnQgcmVnaXN0ZXIuICAqLworI2RlZmluZSBWODUwRTJfQ0FDSEVfQ0NOVF9BRERSCTB4RkZGRkYwNzgKKyNkZWZpbmUgVjg1MEUyX0NBQ0hFX0NDTlQgCSgqKHZvbGF0aWxlIHUxNiAqKVY4NTBFMl9DQUNIRV9DQ05UX0FERFIpCisvKiBDYWNoZSBvcGVyYXRpb24gc3BlY2lmaWNhdGlvbiByZWdpc3Rlci4gICovCisjZGVmaW5lIFY4NTBFMl9DQUNIRV9DT1BSX0FERFIJMHhGRkZGRjA3QQorI2RlZmluZSBWODUwRTJfQ0FDSEVfQ09QUiAJKCoodm9sYXRpbGUgdTE2ICopVjg1MEUyX0NBQ0hFX0NPUFJfQUREUikKKyNkZWZpbmUgVjg1MEUyX0NBQ0hFX0NPUFJfU1RSVAkweDAwMDEgLyogc3RhcnQgY2FjaGUgb3BlcmF0aW9uICovCisjZGVmaW5lIFY4NTBFMl9DQUNIRV9DT1BSX0xCU0wJMHgwMTAwIC8qIDAgPSBpY2FjaGUsIDEgPSBkY2FjaGUgKi8KKyNkZWZpbmUgVjg1MEUyX0NBQ0hFX0NPUFJfV1NMRQkweDAyMDAgLyogb3BlcmF0ZSBvbiBjYWNoZSB3YXkgKi8KKyNkZWZpbmUgVjg1MEUyX0NBQ0hFX0NPUFJfV1NMKHdheSkgKCh3YXkpICogMHgwNDAwKSAvKiB3YXkgc2VsZWN0ICovCisjZGVmaW5lIFY4NTBFMl9DQUNIRV9DT1BSX0NGQyhvcCkgICgob3ApICAqIDB4MTAwMCkgLyogY2FjaGUgZnVuY3Rpb24gY29kZSAqLworCisKKy8qIFNpemUgb2YgYSBjYWNoZSBsaW5lIGluIGJ5dGVzLiAgKi8KKyNkZWZpbmUgVjg1MEUyX0NBQ0hFX0xJTkVfU0laRV9CSVRTCTQKKyNkZWZpbmUgVjg1MEUyX0NBQ0hFX0xJTkVfU0laRQkJKDEgPDwgVjg1MEUyX0NBQ0hFX0xJTkVfU0laRV9CSVRTKQorCisvKiBUaGUgc2l6ZSBvZiBlYWNoIGNhY2hlIGB3YXknIGluIGxpbmVzLiAgKi8KKyNkZWZpbmUgVjg1MEUyX0NBQ0hFX1dBWV9TSVpFCQkyNTYKKworCisvKiBGb3IgPGFzbS9jYWNoZS5oPiAqLworI2RlZmluZSBMMV9DQUNIRV9CWVRFUwkJCVY4NTBFMl9DQUNIRV9MSU5FX1NJWkUKKworCisjZW5kaWYgLyogX19WODUwX1Y4NTBFMl9DQUNIRV9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXY4NTAvdjg1MGVfY2FjaGUuaCBiL2luY2x1ZGUvYXNtLXY4NTAvdjg1MGVfY2FjaGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTdkN2ViCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdjg1MC92ODUwZV9jYWNoZS5oCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBpbmNsdWRlL2FzbS12ODUwL3Y4NTBlX2NhY2hlLmggLS0gQ2FjaGUgY29udHJvbCBmb3IgVjg1MEUgY2FjaGUgbWVtb3JpZXMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxLDAzICBORUMgRWxlY3Ryb25pY3MgQ29ycG9yYXRpb24KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEsMDMgIE1pbGVzIEJhZGVyIDxtaWxlc0BnbnUub3JnPgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMKKyAqIGFyY2hpdmUgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBXcml0dGVuIGJ5IE1pbGVzIEJhZGVyIDxtaWxlc0BnbnUub3JnPgorICovCisKKy8qIFRoaXMgZmlsZSBpbXBsZW1lbnRzIGNhY2hlIGNvbnRyb2wgZm9yIHRoZSByYXRoZXIgc2ltcGxlIGNhY2hlIHVzZWQgb24KKyAgIHNvbWUgVjg1MEUgQ1BVcywgc3BlY2lmaWNhbGx5IHRoZSBOQjg1RS9URUcgQ1BVLWNvcmUgYW5kIHRoZSBWODUwRS9NRTIKKyAgIENQVS4gIFY4NTBFMiBwcm9jZXNzb3JzIGhhdmUgdGhlaXIgb3duIChiZXR0ZXIpIGNhY2hlCisgICBpbXBsZW1lbnRhdGlvbi4gICovCisKKyNpZm5kZWYgX19WODUwX1Y4NTBFX0NBQ0hFX0hfXworI2RlZmluZSBfX1Y4NTBfVjg1MEVfQ0FDSEVfSF9fCisKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKworCisvKiBDYWNoZSBjb250cm9sIHJlZ2lzdGVycy4gICovCisjZGVmaW5lIFY4NTBFX0NBQ0hFX0JIQ19BRERSCTB4RkZGRkYwNkEKKyNkZWZpbmUgVjg1MEVfQ0FDSEVfQkhDCQkoKih2b2xhdGlsZSB1MTYgKilWODUwRV9DQUNIRV9CSENfQUREUikKKyNkZWZpbmUgVjg1MEVfQ0FDSEVfSUNDX0FERFIJMHhGRkZGRjA3MAorI2RlZmluZSBWODUwRV9DQUNIRV9JQ0MJCSgqKHZvbGF0aWxlIHUxNiAqKVY4NTBFX0NBQ0hFX0lDQ19BRERSKQorI2RlZmluZSBWODUwRV9DQUNIRV9JU0lfQUREUgkweEZGRkZGMDcyCisjZGVmaW5lIFY4NTBFX0NBQ0hFX0lTSQkJKCoodm9sYXRpbGUgdTE2ICopVjg1MEVfQ0FDSEVfSVNJX0FERFIpCisjZGVmaW5lIFY4NTBFX0NBQ0hFX0RDQ19BRERSCTB4RkZGRkYwNzgKKyNkZWZpbmUgVjg1MEVfQ0FDSEVfRENDCQkoKih2b2xhdGlsZSB1MTYgKilWODUwRV9DQUNIRV9EQ0NfQUREUikKKworLyogU2l6ZSBvZiBhIGNhY2hlIGxpbmUgaW4gYnl0ZXMuICAqLworI2RlZmluZSBWODUwRV9DQUNIRV9MSU5FX1NJWkUJMTYKKworLyogRm9yIDxhc20vY2FjaGUuaD4gKi8KKyNkZWZpbmUgTDFfQ0FDSEVfQllURVMJCVY4NTBFX0NBQ0hFX0xJTkVfU0laRQorCisKKyNpZiBkZWZpbmVkKF9fS0VSTkVMX18pICYmICFkZWZpbmVkKF9fQVNTRU1CTFlfXykKKy8qIFNldCBjYWNoaW5nIHBhcmFtcyB2aWEgdGhlIEJIQywgSUNDLCBhbmQgRENDIHJlZ2lzdGVycy4gICovCit2b2lkIHY4NTBlX2NhY2hlX2VuYWJsZSAodTE2IGJoYywgdTE2IGljYywgdTE2IGRjYyk7CisjZW5kaWYgLyogX19LRVJORUxfXyAmJiAhX19BU1NFTUJMWV9fICovCisKKworI2VuZGlmIC8qIF9fVjg1MF9WODUwRV9DQUNIRV9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXY4NTAvdjg1MGVfaW50Yy5oIGIvaW5jbHVkZS9hc20tdjg1MC92ODUwZV9pbnRjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZkZjk1NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXY4NTAvdjg1MGVfaW50Yy5oCkBAIC0wLDAgKzEsMTMzIEBACisvKgorICogaW5jbHVkZS9hc20tdjg1MC92ODUwZV9pbnRjLmggLS0gVjg1MEUgQ1BVIGludGVycnVwdCBjb250cm9sbGVyIChJTlRDKQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEsMDIsMDMgIE5FQyBFbGVjdHJvbmljcyBDb3Jwb3JhdGlvbgorICogIENvcHlyaWdodCAoQykgMjAwMSwwMiwwMyAgTWlsZXMgQmFkZXIgPG1pbGVzQGdudS5vcmc+CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcworICogYXJjaGl2ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFdyaXR0ZW4gYnkgTWlsZXMgQmFkZXIgPG1pbGVzQGdudS5vcmc+CisgKi8KKworI2lmbmRlZiBfX1Y4NTBfVjg1MEVfSU5UQ19IX18KKyNkZWZpbmUgX19WODUwX1Y4NTBFX0lOVENfSF9fCisKKworLyogVGhlcmUgYXJlIDQgMTYtYml0IGBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlcnMnIGxvY2F0ZWQgY29udGlndW91c2x5CisgICBzdGFydGluZyBmcm9tIHRoaXMgYmFzZS4gIEVhY2ggaW50ZXJydXB0IHVzZXMgYSBzaW5nbGUgYml0IHRvCisgICBpbmRpY2F0ZWQgZW5hYmxlZC9kaXNhYmxlZCBzdGF0dXMuICAqLworI2RlZmluZSBWODUwRV9JTlRDX0lNUl9CQVNFX0FERFIgIDB4RkZGRkYxMDAKKyNkZWZpbmUgVjg1MEVfSU5UQ19JTVJfQUREUihpcnEpICAoVjg1MEVfSU5UQ19JTVJfQkFTRV9BRERSICsgKChpcnEpID4+IDMpKQorI2RlZmluZSBWODUwRV9JTlRDX0lNUl9CSVQoaXJxKQkgICgoaXJxKSAmIDB4NykKKworLyogRWFjaCBtYXNrYWJsZSBpbnRlcnJ1cHQgaGFzIGEgc2luZ2xlLWJ5dGUgY29udHJvbCByZWdpc3RlciBhdCB0aGlzCisgICBhZGRyZXNzLiAgKi8KKyNkZWZpbmUgVjg1MEVfSU5UQ19JQ19CQVNFX0FERFIJICAweEZGRkZGMTEwCisjZGVmaW5lIFY4NTBFX0lOVENfSUNfQUREUihpcnEpCSAgKFY4NTBFX0lOVENfSUNfQkFTRV9BRERSICsgKChpcnEpIDw8IDEpKQorI2RlZmluZSBWODUwRV9JTlRDX0lDKGlycSkJICAoKih2b2xhdGlsZSB1OCAqKVY4NTBFX0lOVENfSUNfQUREUihpcnEpKQorLyogRW5jb2RlIHByaW9yaXR5IFBSIGZvciBzdG9yaW5nIGluIGFuIGludGVycnVwdCBjb250cm9sIHJlZ2lzdGVyLiAgKi8KKyNkZWZpbmUgVjg1MEVfSU5UQ19JQ19QUihwcikJICAocHIpCisvKiBJbnRlcnJ1cHQgZGlzYWJsZSBiaXQgaW4gYW4gaW50ZXJydXB0IGNvbnRyb2wgcmVnaXN0ZXIuICAqLworI2RlZmluZSBWODUwRV9JTlRDX0lDX01LX0JJVAkgIDYKKyNkZWZpbmUgVjg1MEVfSU5UQ19JQ19NSwkgICgxIDw8IFY4NTBFX0lOVENfSUNfTUtfQklUKQorLyogSW50ZXJydXB0IHBlbmRpbmcgZmxhZyBpbiBhbiBpbnRlcnJ1cHQgY29udHJvbCByZWdpc3Rlci4gICovCisjZGVmaW5lIFY4NTBFX0lOVENfSUNfSUZfQklUCSAgNworI2RlZmluZSBWODUwRV9JTlRDX0lDX0lGCSAgKDEgPDwgVjg1MEVfSU5UQ19JQ19JRl9CSVQpCisKKy8qIFRoZSBJU1BSIChJbi1zZXJ2aWNlIHByaW9yaXR5IHJlZ2lzdGVyKSBjb250YWlucyBvbmUgYml0IGZvciBlYWNoIGludGVycnVwdAorICAgcHJpb3JpdHkgbGV2ZWwsIHdoaWNoIGlzIHNldCB0byBvbmUgd2hlbiB0aGF0IGxldmVsIGlzIGN1cnJlbnRseSBiZWluZworICAgc2VydmljZWQgKGFuZCB0aHVzIGJsb2NraW5nIGFueSBpbnRlcnJ1cHRzIG9mIGVxdWFsIG9yIGxlc3NlciBsZXZlbCkuICAqLworI2RlZmluZSBWODUwRV9JTlRDX0lTUFJfQUREUgkgIDB4RkZGRkYxRkEKKyNkZWZpbmUgVjg1MEVfSU5UQ19JU1BSCQkgICgqKHZvbGF0aWxlIHU4ICopVjg1MEVfSU5UQ19JU1BSX0FERFIpCisKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworLyogRW5hYmxlIGludGVycnVwdCBoYW5kbGluZyBmb3IgaW50ZXJydXB0IElSUS4gICovCitzdGF0aWMgaW5saW5lIHZvaWQgdjg1MGVfaW50Y19lbmFibGVfaXJxICh1bnNpZ25lZCBpcnEpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJjbHIxICUwLCBbJTFdIgorCQkJICAgICAgOjogInIiIChWODUwRV9JTlRDX0lNUl9CSVQgKGlycSkpLAorCQkJICAgICAgICAgInIiIChWODUwRV9JTlRDX0lNUl9BRERSIChpcnEpKQorCQkJICAgICAgOiAibWVtb3J5Iik7Cit9CisKKy8qIERpc2FibGUgaW50ZXJydXB0IGhhbmRsaW5nIGZvciBpbnRlcnJ1cHQgSVJRLiAgTm90ZSB0aGF0IGFueQorICAgaW50ZXJydXB0cyByZWNlaXZlZCB3aGlsZSBkaXNhYmxlZCB3aWxsIGJlIGRlbGl2ZXJlZCBvbmNlIHRoZQorICAgaW50ZXJydXB0IGlzIGVuYWJsZWQgYWdhaW4sIHVubGVzcyB0aGV5IGFyZSBleHBsaWNpdGx5IGNsZWFyZWQgdXNpbmcKKyAgIGB2ODUwZV9pbnRjX2NsZWFyX3BlbmRpbmdfaXJxJy4gICovCitzdGF0aWMgaW5saW5lIHZvaWQgdjg1MGVfaW50Y19kaXNhYmxlX2lycSAodW5zaWduZWQgaXJxKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fICgic2V0MSAlMCwgWyUxXSIKKwkJCSAgICAgIDo6ICJyIiAoVjg1MEVfSU5UQ19JTVJfQklUIChpcnEpKSwKKwkJCSAgICAgICAgICJyIiAoVjg1MEVfSU5UQ19JTVJfQUREUiAoaXJxKSkKKwkJCSAgICAgIDogIm1lbW9yeSIpOworfQorCisvKiBSZXR1cm4gdHJ1ZSBpZiBpbnRlcnJ1cHQgaGFuZGxpbmcgZm9yIGludGVycnVwdCBJUlEgaXMgZW5hYmxlZC4gICovCitzdGF0aWMgaW5saW5lIGludCB2ODUwZV9pbnRjX2lycV9lbmFibGVkICh1bnNpZ25lZCBpcnEpCit7CisJaW50IHJ2YWw7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJ0c3QxICUxLCBbJTJdOyBzZXRmIHosICUwIgorCQkJICAgICAgOiAiPXIiIChydmFsKQorCQkJICAgICAgOiAiciIgKFY4NTBFX0lOVENfSU1SX0JJVCAoaXJxKSksCisJCQkgICAgICAgICJyIiAoVjg1MEVfSU5UQ19JTVJfQUREUiAoaXJxKSkpOworCXJldHVybiBydmFsOworfQorCisvKiBEaXNhYmxlIGlycXMgZnJvbSAwIHVudGlsIExJTUlULiAgTElNSVQgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDguICAqLworc3RhdGljIGlubGluZSB2b2lkIF92ODUwZV9pbnRjX2Rpc2FibGVfaXJxcyAodW5zaWduZWQgbGltaXQpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCWZvciAoYWRkciA9IFY4NTBFX0lOVENfSU1SX0JBU0VfQUREUjsgbGltaXQgPj0gODsgYWRkcisrLCBsaW1pdCAtPSA4KQorCQkqKGNoYXIgKilhZGRyID0gMHhGRjsKK30KKworLyogRGlzYWJsZSBhbGwgaXJxcy4gIFRoaXMgaXMgcHVycG9zZWx5IGEgbWFjcm8sIGJlY2F1c2UgTlVNX01BQ0hfSVJRUworICAgd2lsbCBiZSBvbmx5IGJlIGRlZmluZWQgbGF0ZXIuICAqLworI2RlZmluZSB2ODUwZV9pbnRjX2Rpc2FibGVfaXJxcygpICAgX3Y4NTBlX2ludGNfZGlzYWJsZV9pcnFzIChOVU1fTUFDSF9JUlFTKQorCisvKiBDbGVhciBhbnkgcGVuZGluZyBpbnRlcnJ1cHRzIGZvciBJUlEuICAqLworc3RhdGljIGlubGluZSB2b2lkIHY4NTBlX2ludGNfY2xlYXJfcGVuZGluZ19pcnEgKHVuc2lnbmVkIGlycSkKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImNscjEgJTAsIDBbJTFdIgorCQkJICAgICAgOjogImkiIChWODUwRV9JTlRDX0lDX0lGX0JJVCksCisJCQkgICAgICAgICAiciIgKFY4NTBFX0lOVENfSUNfQUREUiAoaXJxKSkKKwkJCSAgICAgIDogIm1lbW9yeSIpOworfQorCisvKiBSZXR1cm4gdHJ1ZSBpZiBpbnRlcnJ1cHQgSVJRIGlzIHBlbmRpbmcgKGJ1dCBkaXNhYmxlZCkuICAqLworc3RhdGljIGlubGluZSBpbnQgdjg1MGVfaW50Y19pcnFfcGVuZGluZyAodW5zaWduZWQgaXJxKQoreworCWludCBydmFsOworCV9fYXNtX18gX192b2xhdGlsZV9fICgidHN0MSAlMSwgMFslMl07IHNldGYgbnosICUwIgorCQkJICAgICAgOiAiPXIiIChydmFsKQorCQkJICAgICAgOiAiaSIgKFY4NTBFX0lOVENfSUNfSUZfQklUKSwKKwkJCSAgICAgICAgInIiIChWODUwRV9JTlRDX0lDX0FERFIgKGlycSkpKTsKKwlyZXR1cm4gcnZhbDsKK30KKworCitzdHJ1Y3Qgdjg1MGVfaW50Y19pcnFfaW5pdCB7CisJY29uc3QgY2hhciAqbmFtZTsJLyogbmFtZSBvZiBpbnRlcnJ1cHQgdHlwZSAqLworCisJLyogUmFuZ2Ugb2Yga2VybmVsIGlycSBudW1iZXJzIGZvciB0aGlzIHR5cGU6CisJICAgQkFTRSwgQkFTRStJTlRFUlZBTCwgLi4uLCBCQVNFK0lOVEVSVkFMKk5VTSAgKi8KKwl1bnNpZ25lZCBiYXNlLCBudW0sIGludGVydmFsOworCisJdW5zaWduZWQgcHJpb3JpdHk7CS8qIGludGVycnVwdCBwcmlvcml0eSB0byBhc3NpZ24gKi8KK307CitzdHJ1Y3QgaHdfaW50ZXJydXB0X3R5cGU7CS8qIGZ3ZCBkZWNsICovCisKKy8qIEluaXRpYWxpemUgSFdfSVJRX1RZUEVTIGZvciBJTlRDLWNvbnRyb2xsZWQgaXJxcyBkZXNjcmliZWQgaW4gYXJyYXkKKyAgIElOSVRTICh3aGljaCBpcyB0ZXJtaW5hdGVkIGJ5IGFuIGVudHJ5IHdpdGggdGhlIG5hbWUgZmllbGQgPT0gMCkuICAqLworZXh0ZXJuIHZvaWQgdjg1MGVfaW50Y19pbml0X2lycV90eXBlcyAoc3RydWN0IHY4NTBlX2ludGNfaXJxX2luaXQgKmluaXRzLAorCQkJCSAgICAgICBzdHJ1Y3QgaHdfaW50ZXJydXB0X3R5cGUgKmh3X2lycV90eXBlcyk7CisKKworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKworCisjZW5kaWYgLyogX19WODUwX1Y4NTBFX0lOVENfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS12ODUwL3Y4NTBlX3RpbWVyX2MuaCBiL2luY2x1ZGUvYXNtLXY4NTAvdjg1MGVfdGltZXJfYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3MDU3NWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS12ODUwL3Y4NTBlX3RpbWVyX2MuaApAQCAtMCwwICsxLDQ4IEBACisvKgorICogaW5jbHVkZS9hc20tdjg1MC92ODUwZV90aW1lcl9jLmggLS0gYFRpbWVyIEMnIGNvbXBvbmVudCBvZnRlbiB1c2VkCisgKgl3aXRoIHRoZSBWODUwRSBjcHUgY29yZQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEsMDMgIE5FQyBFbGVjdHJvbmljcyBDb3Jwb3JhdGlvbgorICogIENvcHlyaWdodCAoQykgMjAwMSwwMyAgTWlsZXMgQmFkZXIgPG1pbGVzQGdudS5vcmc+CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcworICogYXJjaGl2ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFdyaXR0ZW4gYnkgTWlsZXMgQmFkZXIgPG1pbGVzQGdudS5vcmc+CisgKi8KKworLyogTk9URTogdGhpcyBpbmNsdWRlIGZpbGUgY3VycmVudGx5IGNvbnRhaW5zIG9ubHkgZW5vdWdoIHRvIGFsbG93IHVzIHRvCisgICB1c2UgdGltZXIgQyBhcyBhbiBpbnRlcnJ1cHQgcGFzcy10aHJvdWdoLiAgKi8KKworI2lmbmRlZiBfX1Y4NTBfVjg1MEVfVElNRVJfQ19IX18KKyNkZWZpbmUgX19WODUwX1Y4NTBFX1RJTUVSX0NfSF9fCisKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgkvKiBQaWNrIHVwIGNoaXAtc3BlY2lmaWMgZGVmcy4gICovCisKKworLyogVGltZXIgQyAoMTYtYml0IGludGVydmFsIHRpbWVycykuICAqLworCisvKiBDb250cm9sIHJlZ2lzdGVyIDAgZm9yIHRpbWVyIEMuICAqLworI2RlZmluZSBWODUwRV9USU1FUl9DX1RNQ0MwX0FERFIobikgKFY4NTBFX1RJTUVSX0NfQkFTRV9BRERSICsgMHg2ICsgMHgxMCAqKG4pKQorI2RlZmluZSBWODUwRV9USU1FUl9DX1RNQ0MwKG4pCSAgKCoodm9sYXRpbGUgdTggKilWODUwRV9USU1FUl9DX1RNQ0MwX0FERFIobikpCisjZGVmaW5lIFY4NTBFX1RJTUVSX0NfVE1DQzBfQ0FFCSAgMHgwMSAvKiBjbG9jayBhY3Rpb24gZW5hYmxlICovCisjZGVmaW5lIFY4NTBFX1RJTUVSX0NfVE1DQzBfQ0UJICAweDAyIC8qIGNvdW50IGVuYWJsZSAqLworLyogLi4uICovCisKKy8qIENvbnRyb2wgcmVnaXN0ZXIgMSBmb3IgdGltZXIgQy4gICovCisjZGVmaW5lIFY4NTBFX1RJTUVSX0NfVE1DQzFfQUREUihuKSAoVjg1MEVfVElNRVJfQ19CQVNFX0FERFIgKyAweDggKyAweDEwICoobikpCisjZGVmaW5lIFY4NTBFX1RJTUVSX0NfVE1DQzEobikJICAoKih2b2xhdGlsZSB1OCAqKVY4NTBFX1RJTUVSX0NfVE1DQzFfQUREUihuKSkKKyNkZWZpbmUgVjg1MEVfVElNRVJfQ19UTUNDMV9DTVMwICAweDAxIC8qIGNhcHR1cmUvY29tcGFyZSBtb2RlIHNlbGVjdCAoY2NjMCkgKi8KKyNkZWZpbmUgVjg1MEVfVElNRVJfQ19UTUNDMV9DTVMxICAweDAyIC8qIGNhcHR1cmUvY29tcGFyZSBtb2RlIHNlbGVjdCAoY2NjMSkgKi8KKy8qIC4uLiAqLworCisvKiBJbnRlcnJ1cHQgZWRnZS1zZW5zaXRpdml0eSBjb250cm9sIGZvciB0aW1lciBDLiAgKi8KKyNkZWZpbmUgVjg1MEVfVElNRVJfQ19TRVNDX0FERFIobikgKFY4NTBFX1RJTUVSX0NfQkFTRV9BRERSICsgMHg5ICsgMHgxMCAqKG4pKQorI2RlZmluZSBWODUwRV9USU1FUl9DX1NFU0MobikJICAoKih2b2xhdGlsZSB1OCAqKVY4NTBFX1RJTUVSX0NfU0VTQ19BRERSKG4pKQorCisvKiAuLi5ldGMuLi4gKi8KKworCisjZW5kaWYgLyogX19WODUwX1Y4NTBFX1RJTUVSX0NfSF9fICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdjg1MC92ODUwZV90aW1lcl9kLmggYi9pbmNsdWRlL2FzbS12ODUwL3Y4NTBlX3RpbWVyX2QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTc2MTJjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdjg1MC92ODUwZV90aW1lcl9kLmgKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLXY4NTAvdjg1MGVfdGltZXJfZC5oIC0tIGBUaW1lciBEJyBjb21wb25lbnQgb2Z0ZW4gdXNlZAorICoJd2l0aCB0aGUgVjg1MEUgY3B1IGNvcmUKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxLDAyLDAzICBORUMgRWxlY3Ryb25pY3MgQ29ycG9yYXRpb24KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEsMDIsMDMgIE1pbGVzIEJhZGVyIDxtaWxlc0BnbnUub3JnPgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMKKyAqIGFyY2hpdmUgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBXcml0dGVuIGJ5IE1pbGVzIEJhZGVyIDxtaWxlc0BnbnUub3JnPgorICovCisKKyNpZm5kZWYgX19WODUwX1Y4NTBFX1RJTUVSX0RfSF9fCisjZGVmaW5lIF9fVjg1MF9WODUwRV9USU1FUl9EX0hfXworCisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4JLyogUGljayB1cCBjaGlwLXNwZWNpZmljIGRlZnMuICAqLworCisKKy8qIFRpbWVyIEQgKDE2LWJpdCBpbnRlcnZhbCB0aW1lcnMpLiAgKi8KKworLyogQ291bnQgcmVnaXN0ZXJzIGZvciB0aW1lciBELiAgKi8KKyNkZWZpbmUgVjg1MEVfVElNRVJfRF9UTURfQUREUihuKSAoVjg1MEVfVElNRVJfRF9UTURfQkFTRV9BRERSICsgMHgxMCAqIChuKSkKKyNkZWZpbmUgVjg1MEVfVElNRVJfRF9UTUQobikJICAoKih2b2xhdGlsZSB1MTYgKilWODUwRV9USU1FUl9EX1RNRF9BRERSKG4pKQorCisvKiBDb3VudCBjb21wYXJlIHJlZ2lzdGVycyBmb3IgdGltZXIgRC4gICovCisjZGVmaW5lIFY4NTBFX1RJTUVSX0RfQ01EX0FERFIobikgKFY4NTBFX1RJTUVSX0RfQ01EX0JBU0VfQUREUiArIDB4MTAgKiAobikpCisjZGVmaW5lIFY4NTBFX1RJTUVSX0RfQ01EKG4pCSAgKCoodm9sYXRpbGUgdTE2ICopVjg1MEVfVElNRVJfRF9DTURfQUREUihuKSkKKworLyogQ29udHJvbCByZWdpc3RlcnMgZm9yIHRpbWVyIEQuICAqLworI2RlZmluZSBWODUwRV9USU1FUl9EX1RNQ0RfQUREUihuKSAoVjg1MEVfVElNRVJfRF9UTUNEX0JBU0VfQUREUiArIDB4MTAgKiAobikpCisjZGVmaW5lIFY4NTBFX1RJTUVSX0RfVE1DRChuKQkgICAoKih2b2xhdGlsZSB1OCAqKVY4NTBFX1RJTUVSX0RfVE1DRF9BRERSKG4pKQorLyogQ29udHJvbCBiaXRzIGZvciB0aW1lciBELiAgKi8KKyNkZWZpbmUgVjg1MEVfVElNRVJfRF9UTUNEX0NFICAJICAgMHgyIC8qIGNvdW50IGVuYWJsZSAqLworI2RlZmluZSBWODUwRV9USU1FUl9EX1RNQ0RfQ0FFCSAgIDB4MSAvKiBjbG9jayBhY3Rpb24gZW5hYmxlICovCisvKiBDbG9jayBkaXZpZGVyIHNldHRpbmcgKGxvZzIpLiAgKi8KKyNkZWZpbmUgVjg1MEVfVElNRVJfRF9UTUNEX0NTKGRpdmxvZzIpICgoKGRpdmxvZzIpIC0gVjg1MEVfVElNRVJfRF9UTUNEX0NTX01JTikgPDwgNCkKKy8qIE1pbmltdW0gY2xvY2sgZGl2aWRlciBzZXR0aW5nIChsb2cyKS4gICovCisjaWZuZGVmIFY4NTBFX1RJTUVSX0RfVE1DRF9DU19NSU4gLyogQ2FuIGJlIG92ZXJyaWRkZW4gYnkgbWFjaC1zcGVjaWZpYyBoZHJzICovCisjZGVmaW5lIFY4NTBFX1RJTUVSX0RfVE1DRF9DU19NSU4gIDIgLyogRGVmYXVsdCBpcyBjb3JyZWN0IGZvciB0aGUgdjg1MGUvbWExICovCisjZW5kaWYKKy8qIE1heGltdW0gY2xvY2sgZGl2aWRlciBzZXR0aW5nIChsb2cyKS4gICovCisjZGVmaW5lIFY4NTBFX1RJTUVSX0RfVE1DRF9DU19NQVggIChWODUwRV9USU1FUl9EX1RNQ0RfQ1NfTUlOICsgNykKKworLyogUmV0dXJuIHRoZSBjbG9jay1kaXZpZGVyIChsb2cyKSBvZiB0aW1lciBEIHVuaXQgTi4gICovCisjZGVmaW5lIFY4NTBFX1RJTUVSX0RfRElWTE9HMihuKSBcCisgICgoKFY4NTBFX1RJTUVSX0RfVE1DRChuKSA+PiA0KSAmIDB4NykgKyBWODUwRV9USU1FUl9EX1RNQ0RfQ1NfTUlOKQorCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKy8qIFN0YXJ0IGludGVydmFsIHRpbWVyIFRJTUVSICgwLTMpLiAgVGhlIHRpbWVyIHdpbGwgaXNzdWUgdGhlCisgICBjb3JyZXNwb25kaW5nIElOVENNRCBpbnRlcnJ1cHQgUkFURSB0aW1lcyBwZXIgc2Vjb25kLiAgVGhpcyBmdW5jdGlvbgorICAgZG9lcyBub3QgZW5hYmxlIHRoZSBpbnRlcnJ1cHQuICAqLworZXh0ZXJuIHZvaWQgdjg1MGVfdGltZXJfZF9jb25maWd1cmUgKHVuc2lnbmVkIHRpbWVyLCB1bnNpZ25lZCByYXRlKTsKKworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKworCisjZW5kaWYgLyogX19WODUwX1Y4NTBFX1RJTUVSX0RfSF9fICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdjg1MC92ODUwZV91YXJ0LmggYi9pbmNsdWRlL2FzbS12ODUwL3Y4NTBlX3VhcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTMwZDU5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdjg1MC92ODUwZV91YXJ0LmgKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLXY4NTAvdjg1MGVfdWFydC5oIC0tIGNvbW1vbiBWODUwRSBvbi1jaGlwIFVBUlQgZHJpdmVyCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMSwwMiwwMyAgTkVDIEVsZWN0cm9uaWNzIENvcnBvcmF0aW9uCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxLDAyLDAzICBNaWxlcyBCYWRlciA8bWlsZXNAZ251Lm9yZz4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzCisgKiBhcmNoaXZlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogV3JpdHRlbiBieSBNaWxlcyBCYWRlciA8bWlsZXNAZ251Lm9yZz4KKyAqLworCisvKiBUaGVyZSdzIG5vdCBhY3R1YWxseSBhIHNpbmdsZSBVQVJUIGltcGxlbWVudGF0aW9uIHVzZWQgYnkgVjg1MEUgQ1BVcywKKyAgIGJ1dCByYXRoZXIgYSBzZXJpZXMgb2YgaW1wbGVtZW50YXRpb25zIHRoYXQgYXJlIGFsbCBgY2xvc2UnIHRvIG9uZQorICAgYW5vdGhlci4gIFRoaXMgZmlsZSBjb3JyZXNwb25kcyB0byB0aGUgc2luZ2xlIGRyaXZlciB3aGljaCBoYW5kbGVzIGFsbAorICAgb2YgdGhlbS4gICovCisKKyNpZm5kZWYgX19WODUwX1Y4NTBFX1VBUlRfSF9fCisjZGVmaW5lIF9fVjg1MF9WODUwRV9VQVJUX0hfXworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvdGVybWlvcy5oPgorCisjaW5jbHVkZSA8YXNtL3Y4NTBlX3V0aWxzLmg+CisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4JLyogUGljayB1cCBjaGlwLXNwZWNpZmljIGRlZnMuICAqLworCisKKy8qIEluY2x1ZGUgbW9kZWwtc3BlY2lmaWMgZGVmaW5pdGlvbnMuICAqLworI2lmZGVmIENPTkZJR19WODUwRV9VQVJUCisjIGlmZGVmIENPTkZJR19WODUwRV9VQVJUQgorIyAgaW5jbHVkZSA8YXNtLXY4NTAvdjg1MGVfdWFydGIuaD4KKyMgZWxzZQorIyAgaW5jbHVkZSA8YXNtLXY4NTAvdjg1MGVfdWFydGEuaD4gLyogb3JpZ2luYWwgVjg1MEUgVUFSVCAqLworIyBlbmRpZgorI2VuZGlmCisKKworLyogT3B0aW9uYWwgY2FwYWJpbGl0aWVzIHNvbWUgaGFyZHdhcmUgcHJvdmlkZXMuICAqLworCisvKiBUaGlzIFVBUlQgZG9lc24ndCBpbXBsZW1lbnQgUlRTL0NUUyBieSBkZWZhdWx0LCBidXQgc29tZSBwbGF0Zm9ybXMKKyAgIGltcGxlbWVudCB0aGVtIGV4dGVybmFsbHksIHNvIGNoZWNrIHRvIHNlZSBpZiA8YXNtL21hY2hkZXAuaD4gZGVmaW5lZAorICAgYW55dGhpbmcuICAqLworI2lmZGVmIFY4NTBFX1VBUlRfQ1RTCisjZGVmaW5lIHY4NTBlX3VhcnRfY3RzKG4pCQlWODUwRV9VQVJUX0NUUyhuKQorI2Vsc2UKKyNkZWZpbmUgdjg1MGVfdWFydF9jdHMobikJCSgxKQorI2VuZGlmCisKKy8qIERvIHRoZSBzYW1lIGZvciBSVFMuICAqLworI2lmZGVmIFY4NTBFX1VBUlRfU0VUX1JUUworI2RlZmluZSB2ODUwZV91YXJ0X3NldF9ydHMobix2KQkJVjg1MEVfVUFSVF9TRVRfUlRTKG4sdikKKyNlbHNlCisjZGVmaW5lIHY4NTBlX3VhcnRfc2V0X3J0cyhuLHYpCQkoKHZvaWQpMCkKKyNlbmRpZgorCisKKy8qIFRoaXMgaXMgdGhlIHNlcmlhbCBjaGFubmVsIHRvIHVzZSBmb3IgdGhlIGJvb3QgY29uc29sZSAoaWYgZGVzaXJlZCkuICAqLworI2lmbmRlZiBWODUwRV9VQVJUX0NPTlNPTEVfQ0hBTk5FTAorIyBkZWZpbmUgVjg1MEVfVUFSVF9DT05TT0xFX0NIQU5ORUwgMAorI2VuZGlmCisKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworLyogU2V0dXAgYSBjb25zb2xlIHVzaW5nIGNoYW5uZWwgMCBvZiB0aGUgYnVpbHRpbiB1YXJ0LiAgKi8KK2V4dGVybiB2b2lkIHY4NTBlX3VhcnRfY29uc19pbml0ICh1bnNpZ25lZCBjaGFuKTsKKworLyogQ29uZmlndXJlIGFuZCB0dXJuIG9uIHVhcnQgY2hhbm5lbCBDSEFOLCB1c2luZyB0aGUgdGVybWlvcyBgY29udHJvbAorICAgbW9kZXMnIGJpdHMgaW4gQ0ZMQUdTLCBhbmQgYSBiYXVkLXJhdGUgb2YgQkFVRC4gICovCit2b2lkIHY4NTBlX3VhcnRfY29uZmlndXJlICh1bnNpZ25lZCBjaGFuLCB1bnNpZ25lZCBjZmxhZ3MsIHVuc2lnbmVkIGJhdWQpOworCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisKKyNlbmRpZiAvKiBfX1Y4NTBfVjg1MEVfVUFSVF9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXY4NTAvdjg1MGVfdWFydGEuaCBiL2luY2x1ZGUvYXNtLXY4NTAvdjg1MGVfdWFydGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDgzZTA5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdjg1MC92ODUwZV91YXJ0YS5oCkBAIC0wLDAgKzEsMjc4IEBACisvKgorICogaW5jbHVkZS9hc20tdjg1MC92ODUwZV91YXJ0YS5oIC0tIG9yaWdpbmFsIFY4NTBFIG9uLWNoaXAgVUFSVAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEsMDIsMDMgIE5FQyBFbGVjdHJvbmljcyBDb3Jwb3JhdGlvbgorICogIENvcHlyaWdodCAoQykgMjAwMSwwMiwwMyAgTWlsZXMgQmFkZXIgPG1pbGVzQGdudS5vcmc+CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcworICogYXJjaGl2ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFdyaXR0ZW4gYnkgTWlsZXMgQmFkZXIgPG1pbGVzQGdudS5vcmc+CisgKi8KKworLyogVGhpcyBpcyB0aGUgb3JpZ2luYWwgVjg1MEUgVUFSVCBpbXBsZW1lbnRhdGlvbiBpcyBjYWxsZWQganVzdCBgVUFSVCcgaW4KKyAgIHRoZSBkb2NzLCBidXQgd2UgbmFtZSB0aGlzIGhlYWRlciBmaWxlIDxhc20vdjg1MGVfdWFydGEuaD4gYmVjYXVzZSB0aGUKKyAgIG5hbWUgPGFzbS92ODUwZV91YXJ0Lmg+IGlzIHVzZWQgZm9yIHRoZSBjb21tb24gZHJpdmVyIHRoYXQgaGFuZGxlcyBib3RoCisgICBgVUFSVCcgYW5kIGBVQVJUQicgaW1wbGVtZW50YXRpb25zLiAgKi8KKworI2lmbmRlZiBfX1Y4NTBfVjg1MEVfVUFSVEFfSF9fCisjZGVmaW5lIF9fVjg1MF9WODUwRV9VQVJUQV9IX18KKworDAorLyogUmF3IGhhcmR3YXJlIGludGVyZmFjZS4gICovCisKKy8qIFRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIFVBUlQgY29udHJvbCByZWdpc3RlcnMgZm9yIGNoYW5uZWwgTi4KKyAgIFRoZSBkZWZhdWx0IGlzIHRoZSBhZGRyZXNzIHVzZWQgb24gdGhlIFY4NTBFL01BMS4gICovCisjaWZuZGVmIFY4NTBFX1VBUlRfQkFTRV9BRERSCisjZGVmaW5lIFY4NTBFX1VBUlRfQkFTRV9BRERSKG4pCQkoMHhGRkZGRkEwMCArIDB4MTAgKiAobikpCisjZW5kaWYgCisKKy8qIEFkZHJlc3NlcyBvZiBzcGVjaWZpYyBVQVJUIGNvbnRyb2wgcmVnaXN0ZXJzIGZvciBjaGFubmVsIE4uCisgICBUaGUgZGVmYXVsdHMgYXJlIHRoZSBhZGRyZXNzZXMgdXNlZCBvbiB0aGUgVjg1MEUvTUExOyBpZiBhIHBsYXRmb3JtCisgICB3YW50cyB0byByZWRlZmluZSBhbnkgb2YgdGhlc2UsIGl0IG11c3QgcmVkZWZpbmUgdGhlbSBhbGwuICAqLworI2lmbmRlZiBWODUwRV9VQVJUX0FTSU1fQUREUgorI2RlZmluZSBWODUwRV9VQVJUX0FTSU1fQUREUihuKQkJKFY4NTBFX1VBUlRfQkFTRV9BRERSKG4pICsgMHgwKQorI2RlZmluZSBWODUwRV9VQVJUX1JYQl9BRERSKG4pCQkoVjg1MEVfVUFSVF9CQVNFX0FERFIobikgKyAweDIpCisjZGVmaW5lIFY4NTBFX1VBUlRfQVNJU19BRERSKG4pCQkoVjg1MEVfVUFSVF9CQVNFX0FERFIobikgKyAweDMpCisjZGVmaW5lIFY4NTBFX1VBUlRfVFhCX0FERFIobikJCShWODUwRV9VQVJUX0JBU0VfQUREUihuKSArIDB4NCkKKyNkZWZpbmUgVjg1MEVfVUFSVF9BU0lGX0FERFIobikJCShWODUwRV9VQVJUX0JBU0VfQUREUihuKSArIDB4NSkKKyNkZWZpbmUgVjg1MEVfVUFSVF9DS1NSX0FERFIobikJCShWODUwRV9VQVJUX0JBU0VfQUREUihuKSArIDB4NikKKyNkZWZpbmUgVjg1MEVfVUFSVF9CUkdDX0FERFIobikJCShWODUwRV9VQVJUX0JBU0VfQUREUihuKSArIDB4NykKKyNlbmRpZgorCisvKiBVQVJUIGNvbmZpZyByZWdpc3RlcnMuICAqLworI2RlZmluZSBWODUwRV9VQVJUX0FTSU0obikJKCoodm9sYXRpbGUgdTggKilWODUwRV9VQVJUX0FTSU1fQUREUihuKSkKKy8qIENvbnRyb2wgYml0cyBmb3IgY29uZmlnIHJlZ2lzdGVycy4gICovCisjZGVmaW5lIFY4NTBFX1VBUlRfQVNJTV9DQUUJMHg4MCAvKiBjbG9jayBlbmFibGUgKi8KKyNkZWZpbmUgVjg1MEVfVUFSVF9BU0lNX1RYRQkweDQwIC8qIHRyYW5zbWl0IGVuYWJsZSAqLworI2RlZmluZSBWODUwRV9VQVJUX0FTSU1fUlhFCTB4MjAgLyogcmVjZWl2ZSBlbmFibGUgKi8KKyNkZWZpbmUgVjg1MEVfVUFSVF9BU0lNX1BTX01BU0sJMHgxOCAvKiBtYXNrIGNvdmVyaW5nIHBhcml0eS1zZWxlY3QgYml0cyAqLworI2RlZmluZSBWODUwRV9VQVJUX0FTSU1fUFNfTk9ORQkweDAwIC8qIG5vIHBhcml0eSAqLworI2RlZmluZSBWODUwRV9VQVJUX0FTSU1fUFNfWkVSTwkweDA4IC8qIHplcm8gcGFyaXR5ICovCisjZGVmaW5lIFY4NTBFX1VBUlRfQVNJTV9QU19PREQJMHgxMCAvKiBvZGQgcGFyaXR5ICovCisjZGVmaW5lIFY4NTBFX1VBUlRfQVNJTV9QU19FVkVOCTB4MTggLyogZXZlbiBwYXJpdHkgKi8KKyNkZWZpbmUgVjg1MEVfVUFSVF9BU0lNX0NMXzgJMHgwNCAvKiBjaGFyIGxlbiBpcyA4IGJpdHMgKG90aGVyd2lzZSwgNykgKi8KKyNkZWZpbmUgVjg1MEVfVUFSVF9BU0lNX1NMXzIJMHgwMiAvKiAyIHN0b3AgYml0cyAob3RoZXJ3aXNlLCAxKSAqLworI2RlZmluZSBWODUwRV9VQVJUX0FTSU1fSVNSTQkweDAxIC8qIGdlbmVyYXRlIElOVFNSIGludGVycnVwdCBvbiBlcnJvcnMKKwkJCQkJKG90aGVyd2lzZSwgZ2VuZXJhdGUgSU5UU0VSKSAqLworCisvKiBVQVJUIHNlcmlhbCBpbnRlcmZhY2Ugc3RhdHVzIHJlZ2lzdGVycy4gICovCisjZGVmaW5lIFY4NTBFX1VBUlRfQVNJUyhuKQkoKih2b2xhdGlsZSB1OCAqKVY4NTBFX1VBUlRfQVNJU19BRERSKG4pKQorLyogQ29udHJvbCBiaXRzIGZvciBzdGF0dXMgcmVnaXN0ZXJzLiAgKi8KKyNkZWZpbmUgVjg1MEVfVUFSVF9BU0lTX1BFCTB4MDQgLyogcGFyaXR5IGVycm9yICovCisjZGVmaW5lIFY4NTBFX1VBUlRfQVNJU19GRQkweDAyIC8qIGZyYW1pbmcgZXJyb3IgKi8KKyNkZWZpbmUgVjg1MEVfVUFSVF9BU0lTX09WRQkweDAxIC8qIG92ZXJydW4gZXJyb3IgKi8KKworLyogVUFSVCBzZXJpYWwgaW50ZXJmYWNlIHRyYW5zbWlzc2lvbiBzdGF0dXMgcmVnaXN0ZXJzLiAgKi8KKyNkZWZpbmUgVjg1MEVfVUFSVF9BU0lGKG4pCSgqKHZvbGF0aWxlIHU4ICopVjg1MEVfVUFSVF9BU0lGX0FERFIobikpCisjZGVmaW5lIFY4NTBFX1VBUlRfQVNJRl9UWEJGCTB4MDIgLyogdHJhbnNtaXQgYnVmZmVyIGZsYWcgKGRhdGEgaW4gVFhCKSAqLworI2RlZmluZSBWODUwRV9VQVJUX0FTSUZfVFhTRgkweDAxIC8qIHRyYW5zbWl0IHNoaWZ0IGZsYWcgKHNlbmRpbmcgZGF0YSkgKi8KKworLyogVUFSVCByZWNlaXZlIGJ1ZmZlciByZWdpc3Rlci4gICovCisjZGVmaW5lIFY4NTBFX1VBUlRfUlhCKG4pCSgqKHZvbGF0aWxlIHU4ICopVjg1MEVfVUFSVF9SWEJfQUREUihuKSkKKworLyogVUFSVCB0cmFuc21pdCBidWZmZXIgcmVnaXN0ZXIuICAqLworI2RlZmluZSBWODUwRV9VQVJUX1RYQihuKQkoKih2b2xhdGlsZSB1OCAqKVY4NTBFX1VBUlRfVFhCX0FERFIobikpCisKKy8qIFVBUlQgYmF1ZC1yYXRlIGdlbmVyYXRvciBjb250cm9sIHJlZ2lzdGVycy4gICovCisjZGVmaW5lIFY4NTBFX1VBUlRfQ0tTUihuKQkoKih2b2xhdGlsZSB1OCAqKVY4NTBFX1VBUlRfQ0tTUl9BRERSKG4pKQorI2RlZmluZSBWODUwRV9VQVJUX0NLU1JfTUFYCTExCisjZGVmaW5lIFY4NTBFX1VBUlRfQlJHQyhuKQkoKih2b2xhdGlsZSB1OCAqKVY4NTBFX1VBUlRfQlJHQ19BRERSKG4pKQorI2RlZmluZSBWODUwRV9VQVJUX0JSR0NfTUlOCTgKKworCisjaWZuZGVmIFY4NTBFX1VBUlRfQ0tTUl9NQVhfRlJFUQorI2RlZmluZSBWODUwRV9VQVJUX0NLU1JfTUFYX0ZSRVEgKDI1KjEwMDAqMTAwMCkKKyNlbmRpZgorCisvKiBDYWxjdWxhdGUgdGhlIG1pbmltdW0gdmFsdWUgZm9yIENLU1Igb24gdGhpcyBwcm9jZXNzb3IuICAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCB2ODUwZV91YXJ0X2Nrc3JfbWluICh2b2lkKQoreworCWludCBtaW4gPSAwOworCXVuc2lnbmVkIGZyZXEgPSBWODUwRV9VQVJUX0JBU0VfRlJFUTsKKwl3aGlsZSAoZnJlcSA+IFY4NTBFX1VBUlRfQ0tTUl9NQVhfRlJFUSkgeworCQlmcmVxID4+PSAxOworCQltaW4rKzsKKwl9CisJcmV0dXJuIG1pbjsKK30KKworDAorLyogU2xpZ2h0bHkgYWJzdHJhY3QgaW50ZXJmYWNlIHVzZWQgYnkgZHJpdmVyLiAgKi8KKworCisvKiBJbnRlcnJ1cHRzIHVzZWQgYnkgdGhlIFVBUlQuICAqLworCisvKiBSZWNlaXZlZCB3aGVuIHRoZSBtb3N0IHJlY2VudGx5IHRyYW5zbWl0dGVkIGNoYXJhY3RlciBoYXMgYmVlbiBzZW50LiAgKi8KKyNkZWZpbmUgVjg1MEVfVUFSVF9UWF9JUlEoY2hhbikJCUlSUV9JTlRTVCAoY2hhbikKKy8qIFJlY2VpdmVkIHdoZW4gYSBuZXcgY2hhcmFjdGVyIGhhcyBiZWVuIHJlY2VpdmVkLiAgKi8KKyNkZWZpbmUgVjg1MEVfVUFSVF9SWF9JUlEoY2hhbikJCUlSUV9JTlRTUiAoY2hhbikKKworCisvKiBVQVJUIGNsb2NrIGdlbmVyYXRvciBpbnRlcmZhY2UuICAqLworCisvKiBUaGlzIHR5cGUgZW5jYXBzdWxhdGVzIGEgcGFydGljdWxhciB1YXJ0IGZyZXF1ZW5jeS4gICovCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgY2xrX2RpdmxvZzI7CisJdW5zaWduZWQgYnJnZW5fY291bnQ7Cit9IHY4NTBlX3VhcnRfc3BlZWRfdDsKKworLyogQ2FsY3VsYXRlIGEgdWFydCBzcGVlZCBmcm9tIEJBVUQgZm9yIHRoaXMgdWFydC4gICovCitzdGF0aWMgaW5saW5lIHY4NTBlX3VhcnRfc3BlZWRfdCB2ODUwZV91YXJ0X2NhbGNfc3BlZWQgKHVuc2lnbmVkIGJhdWQpCit7CisJdjg1MGVfdWFydF9zcGVlZF90IHNwZWVkOworCisJLyogQ2FsY3VsYXRlIHRoZSBsb2cyIGNsb2NrIGRpdmlkZXIgYW5kIGJhdWQtcmF0ZSBjb3VudGVyIHZhbHVlcworCSAgIChub3RlIHRoYXQgdGhlIFVBUlQgZGl2aWRlcyB0aGUgcmVzdWx0aW5nIGNsb2NrIGJ5IDIsIHNvCisJICAgbXVsdGlwbHkgQkFVRCBieSAyIGhlcmUgdG8gY29tcGVuc2F0ZSkuICAqLworCWNhbGNfY291bnRlcl9wYXJhbXMgKFY4NTBFX1VBUlRfQkFTRV9GUkVRLCBiYXVkICogMiwKKwkJCSAgICAgdjg1MGVfdWFydF9ja3NyX21pbigpLAorCQkJICAgICBWODUwRV9VQVJUX0NLU1JfTUFYLCA4LypiaXRzKi8sCisJCQkgICAgICZzcGVlZC5jbGtfZGl2bG9nMiwgJnNwZWVkLmJyZ2VuX2NvdW50KTsKKworCXJldHVybiBzcGVlZDsKK30KKworLyogUmV0dXJuIHRoZSBjdXJyZW50IHNwZWVkIG9mIHVhcnQgY2hhbm5lbCBDSEFOLiAgKi8KK3N0YXRpYyBpbmxpbmUgdjg1MGVfdWFydF9zcGVlZF90IHY4NTBlX3VhcnRfc3BlZWQgKHVuc2lnbmVkIGNoYW4pCit7CisJdjg1MGVfdWFydF9zcGVlZF90IHNwZWVkOworCXNwZWVkLmNsa19kaXZsb2cyID0gVjg1MEVfVUFSVF9DS1NSIChjaGFuKTsKKwlzcGVlZC5icmdlbl9jb3VudCA9IFY4NTBFX1VBUlRfQlJHQyAoY2hhbik7CisJcmV0dXJuIHNwZWVkOworfQorCisvKiBTZXQgdGhlIGN1cnJlbnQgc3BlZWQgb2YgdWFydCBjaGFubmVsIENIQU4uICAqLworc3RhdGljIGlubGluZSB2b2lkIHY4NTBlX3VhcnRfc2V0X3NwZWVkKHVuc2lnbmVkIGNoYW4sdjg1MGVfdWFydF9zcGVlZF90IHNwZWVkKQoreworCVY4NTBFX1VBUlRfQ0tTUiAoY2hhbikgPSBzcGVlZC5jbGtfZGl2bG9nMjsKKwlWODUwRV9VQVJUX0JSR0MgKGNoYW4pID0gc3BlZWQuYnJnZW5fY291bnQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50Cit2ODUwZV91YXJ0X3NwZWVkX2VxICh2ODUwZV91YXJ0X3NwZWVkX3Qgc3BlZWQxLCB2ODUwZV91YXJ0X3NwZWVkX3Qgc3BlZWQyKQoreworCXJldHVybiBzcGVlZDEuY2xrX2RpdmxvZzIgPT0gc3BlZWQyLmNsa19kaXZsb2cyCisJCSYmIHNwZWVkMS5icmdlbl9jb3VudCA9PSBzcGVlZDIuYnJnZW5fY291bnQ7Cit9CisKKy8qIE1pbmltdW0gYmF1ZCByYXRlIHBvc3NpYmxlLiAgKi8KKyNkZWZpbmUgdjg1MGVfdWFydF9taW5fYmF1ZCgpIFwKKyAgICgoVjg1MEVfVUFSVF9CQVNFX0ZSRVEgPj4gVjg1MEVfVUFSVF9DS1NSX01BWCkgLyAoMiAqIDI1NSkgKyAxKQorCisvKiBNYXhpbXVtIGJhdWQgcmF0ZSBwb3NzaWJsZS4gIFRoZSBlcnJvciBpcyBxdWl0ZSBoaWdoIGF0IG1heCwgdGhvdWdoLiAgKi8KKyNkZWZpbmUgdjg1MGVfdWFydF9tYXhfYmF1ZCgpIFwKKyAgICgoVjg1MEVfVUFSVF9CQVNFX0ZSRVEgPj4gdjg1MGVfdWFydF9ja3NyX21pbigpKSAvICgyICpWODUwRV9VQVJUX0JSR0NfTUlOKSkKKworLyogVGhlIGBtYXhpbXVtJyBjbG9jayByYXRlIHRoZSB1YXJ0IGNhbiB1c2VkLCB3aGljaCBpcyB3YW50ZWQgKHRob3VnaCBub3QKKyAgIHJlYWxseSB1c2VkIGluIGFueSB1c2VmdWwgd2F5KSBieSB0aGUgc2VyaWFsIGZyYW1ld29yay4gICovCisjZGVmaW5lIHY4NTBlX3VhcnRfbWF4X2Nsb2NrKCkgXAorICAgKChWODUwRV9VQVJUX0JBU0VfRlJFUSA+PiB2ODUwZV91YXJ0X2Nrc3JfbWluKCkpIC8gMikKKworCisvKiBVQVJUIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlLiAgKi8KKworLyogVHlwZSBvZiB0aGUgdWFydCBjb25maWcgcmVnaXN0ZXI7IG11c3QgYmUgYSBzY2FsYXIuICAqLwordHlwZWRlZiB1MTYgdjg1MGVfdWFydF9jb25maWdfdDsKKworLyogVGhlIHVhcnQgaGFyZHdhcmUgY29uZmlnIHJlZ2lzdGVyIGZvciBjaGFubmVsIENIQU4uICAqLworI2RlZmluZSBWODUwRV9VQVJUX0NPTkZJRyhjaGFuKQkJVjg1MEVfVUFSVF9BU0lNIChjaGFuKQorCisvKiBUaGlzIGNvbmZpZyBiaXQgc2V0IGlmIHRoZSB1YXJ0IGlzIGVuYWJsZWQuICAqLworI2RlZmluZSBWODUwRV9VQVJUX0NPTkZJR19FTkFCTEVECVY4NTBFX1VBUlRfQVNJTV9DQUUKKy8qIElmIHRoZSB1YXJ0IF9pc24ndF8gZW5hYmxlZCwgc3RvcmUgdGhpcyB2YWx1ZSB0byBpdCB0byBkbyBzby4gICovCisjZGVmaW5lIFY4NTBFX1VBUlRfQ09ORklHX0lOSVQJCVY4NTBFX1VBUlRfQVNJTV9DQUUKKy8qIFN0b3JlIHRoaXMgY29uZmlnIHZhbHVlIHRvIGRpc2FibGUgdGhlIHVhcnQgY2hhbm5lbCBjb21wbGV0ZWx5LiAgKi8KKyNkZWZpbmUgVjg1MEVfVUFSVF9DT05GSUdfRklOSQkJMAorCisvKiBTZXR0aW5nL2NsZWFyaW5nIHRoZXNlIGJpdHMgZW5hYmxlL2Rpc2FibGUgVFgvUlgsIHJlc3BlY3RpdmVseSAoYnV0CisgICBvdGhlcndpc2UgZ2VuZXJhbGx5IGxlYXZlIHRoaW5ncyBydW5uaW5nKS4gICovCisjZGVmaW5lIFY4NTBFX1VBUlRfQ09ORklHX1JYX0VOQUJMRQlWODUwRV9VQVJUX0FTSU1fUlhFCisjZGVmaW5lIFY4NTBFX1VBUlRfQ09ORklHX1RYX0VOQUJMRQlWODUwRV9VQVJUX0FTSU1fVFhFCisKKy8qIFRoZXNlIG1hc2tzIGRlZmluZSB3aGljaCBjb25maWcgYml0cyBhZmZlY3QgVFgvUlggbW9kZXMsIHJlc3BlY3RpdmVseS4gICovCisjZGVmaW5lIFY4NTBFX1VBUlRfQ09ORklHX1JYX0JJVFMgXAorICAoVjg1MEVfVUFSVF9BU0lNX1BTX01BU0sgfCBWODUwRV9VQVJUX0FTSU1fQ0xfOCB8IFY4NTBFX1VBUlRfQVNJTV9JU1JNKQorI2RlZmluZSBWODUwRV9VQVJUX0NPTkZJR19UWF9CSVRTIFwKKyAgKFY4NTBFX1VBUlRfQVNJTV9QU19NQVNLIHwgVjg1MEVfVUFSVF9BU0lNX0NMXzggfCBWODUwRV9VQVJUX0FTSU1fU0xfMikKKworc3RhdGljIGlubGluZSB2ODUwZV91YXJ0X2NvbmZpZ190IHY4NTBlX3VhcnRfY2FsY19jb25maWcgKHVuc2lnbmVkIGNmbGFncykKK3sKKwl2ODUwZV91YXJ0X2NvbmZpZ190IGNvbmZpZyA9IDA7CisKKwkvKiBGaWd1cmUgb3V0IG5ldyBjb25maWd1cmF0aW9uIG9mIGNvbnRyb2wgcmVnaXN0ZXIuICAqLworCWlmIChjZmxhZ3MgJiBDU1RPUEIpCisJCS8qIE51bWJlciBvZiBzdG9wIGJpdHMsIDEgb3IgMi4gICovCisJCWNvbmZpZyB8PSBWODUwRV9VQVJUX0FTSU1fU0xfMjsKKwlpZiAoKGNmbGFncyAmIENTSVpFKSA9PSBDUzgpCisJCS8qIE51bWJlciBvZiBkYXRhIGJpdHMsIDcgb3IgOC4gICovCisJCWNvbmZpZyB8PSBWODUwRV9VQVJUX0FTSU1fQ0xfODsKKwlpZiAoISAoY2ZsYWdzICYgUEFSRU5CKSkKKwkJLyogTm8gcGFyaXR5IGNoZWNrL2dlbmVyYXRpb24uICAqLworCQljb25maWcgfD0gVjg1MEVfVUFSVF9BU0lNX1BTX05PTkU7CisJZWxzZSBpZiAoY2ZsYWdzICYgUEFST0REKQorCQkvKiBPZGQgcGFyaXR5IGNoZWNrL2dlbmVyYXRpb24uICAqLworCQljb25maWcgfD0gVjg1MEVfVUFSVF9BU0lNX1BTX09ERDsKKwllbHNlCisJCS8qIEV2ZW4gcGFyaXR5IGNoZWNrL2dlbmVyYXRpb24uICAqLworCQljb25maWcgfD0gVjg1MEVfVUFSVF9BU0lNX1BTX0VWRU47CisJaWYgKGNmbGFncyAmIENSRUFEKQorCQkvKiBSZWFkaW5nIGVuYWJsZWQuICAqLworCQljb25maWcgfD0gVjg1MEVfVUFSVF9BU0lNX1JYRTsKKworCWNvbmZpZyB8PSBWODUwRV9VQVJUX0FTSU1fQ0FFOworCWNvbmZpZyB8PSBWODUwRV9VQVJUX0FTSU1fVFhFOyAvKiBXcml0aW5nIGlzIGFsd2F5cyBlbmFibGVkLiAgKi8KKwljb25maWcgfD0gVjg1MEVfVUFSVF9BU0lNX0lTUk07IC8qIEVycm9ycyBnZW5lcmF0ZSBhIHJlYWQtaXJxLiAgKi8KKworCXJldHVybiBjb25maWc7Cit9CisKKy8qIFRoaXMgc2hvdWxkIGRlbGF5IGFzIGxvbmcgYXMgbmVjZXNzYXJ5IGZvciBhIHJlY2VudGx5IHdyaXR0ZW4gY29uZmlnCisgICBzZXR0aW5nIHRvIHNldHRsZSwgYmVmb3JlIHdlIHR1cm4gdGhlIHVhcnQgYmFjayBvbi4gICovCitzdGF0aWMgaW5saW5lIHZvaWQKK3Y4NTBlX3VhcnRfY29uZmlnX2RlbGF5ICh2ODUwZV91YXJ0X2NvbmZpZ190IGNvbmZpZywgdjg1MGVfdWFydF9zcGVlZF90IHNwZWVkKQoreworCS8qIFRoZSBVQVJUIG1heSBub3QgYmUgcmVzZXQgcHJvcGVybHkgdW5sZXNzIHdlIHdhaXQgYXQgbGVhc3QgMgorCSAgIGBiYXNpYy1jbG9ja3MnIHVudGlsIHR1cm5pbmcgb24gdGhlIFRYRS9SWEUgYml0cyBhZ2Fpbi4KKwkgICBBIGBiYXNpYyBjbG9jaycgaXMgdGhlIGNsb2NrIHVzZWQgYnkgdGhlIGJhdWQtcmF0ZSBnZW5lcmF0b3IsCisJICAgaS5lLiwgdGhlIGNwdSBjbG9jayBkaXZpZGVkIGJ5IHRoZSAyXm5ld19jbGtfZGl2bG9nMi4KKwkgICBUaGUgbG9vcCB0YWtlcyAyIGluc25zLCBzbyBsb29wIENZQ0xFUyAvIDIgdGltZXMuICAqLworCXJlZ2lzdGVyIHVuc2lnbmVkIGNvdW50ID0gMSA8PCBzcGVlZC5jbGtfZGl2bG9nMjsKKwl3aGlsZSAoLS1jb3VudCAhPSAwKQorCQkvKiBub3RoaW5nICovOworfQorCisKKy8qIFJYL1RYIGludGVyZmFjZS4gICovCisKKy8qIFJldHVybiB0cnVlIGlmIGFsbCBjaGFyYWN0ZXJzIGF3YWl0aW5nIHRyYW5zbWlzc2lvbiBvbiB1YXJ0IGNoYW5uZWwgTgorICAgaGF2ZSBiZWVuIHRyYW5zbWl0dGVkLiAgKi8KKyNkZWZpbmUgdjg1MGVfdWFydF94bWl0X2RvbmUobikJCQkJCQkgICAgICBcCisgICAoISAoVjg1MEVfVUFSVF9BU0lGKG4pICYgVjg1MEVfVUFSVF9BU0lGX1RYQkYpKQorLyogV2FpdCBmb3IgdGhpcyB0byBiZSB0cnVlLiAgKi8KKyNkZWZpbmUgdjg1MGVfdWFydF93YWl0X2Zvcl94bWl0X2RvbmUobikJCQkJICAgICAgXAorICAgZG8geyB9IHdoaWxlICghIHY4NTBlX3VhcnRfeG1pdF9kb25lIChuKSkKKworLyogUmV0dXJuIHRydWUgaWYgdWFydCBjaGFubmVsIE4gaXMgcmVhZHkgdG8gdHJhbnNtaXQgYSBjaGFyYWN0ZXIuICAqLworI2RlZmluZSB2ODUwZV91YXJ0X3htaXRfb2sobikJCQkJCQkgICAgICBcCisgICAodjg1MGVfdWFydF94bWl0X2RvbmUobikgJiYgdjg1MGVfdWFydF9jdHMobikpCisvKiBXYWl0IGZvciB0aGlzIHRvIGJlIHRydWUuICAqLworI2RlZmluZSB2ODUwZV91YXJ0X3dhaXRfZm9yX3htaXRfb2sobikJCQkJCSAgICAgIFwKKyAgIGRvIHsgfSB3aGlsZSAoISB2ODUwZV91YXJ0X3htaXRfb2sgKG4pKQorCisvKiBXcml0ZSBjaGFyYWN0ZXIgQ0ggdG8gdWFydCBjaGFubmVsIENIQU4uICAqLworI2RlZmluZSB2ODUwZV91YXJ0X3B1dGMoY2hhbiwgY2gpCShWODUwRV9VQVJUX1RYQihjaGFuKSA9IChjaCkpCisKKy8qIFJldHVybiBsYXRlc3QgY2hhcmFjdGVyIHJlYWQgb24gY2hhbm5lbCBDSEFOLiAgKi8KKyNkZWZpbmUgdjg1MGVfdWFydF9nZXRjKGNoYW4pCQlWODUwRV9VQVJUX1JYQiAoY2hhbikKKworLyogUmV0dXJuIGJpdC1tYXNrIG9mIHVhcnQgZXJyb3Igc3RhdHVzLiAgKi8KKyNkZWZpbmUgdjg1MGVfdWFydF9lcnIoY2hhbikJCVY4NTBFX1VBUlRfQVNJUyAoY2hhbikKKy8qIFZhcmlvdXMgZXJyb3IgYml0cyBzZXQgaW4gdGhlIGVycm9yIHJlc3VsdC4gICovCisjZGVmaW5lIFY4NTBFX1VBUlRfRVJSX09WRVJSVU4JCVY4NTBFX1VBUlRfQVNJU19PVkUKKyNkZWZpbmUgVjg1MEVfVUFSVF9FUlJfRlJBTUUJCVY4NTBFX1VBUlRfQVNJU19GRQorI2RlZmluZSBWODUwRV9VQVJUX0VSUl9QQVJJVFkJCVY4NTBFX1VBUlRfQVNJU19QRQorCisKKyNlbmRpZiAvKiBfX1Y4NTBfVjg1MEVfVUFSVEFfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS12ODUwL3Y4NTBlX3VhcnRiLmggYi9pbmNsdWRlL2FzbS12ODUwL3Y4NTBlX3VhcnRiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ0NzY3ZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXY4NTAvdjg1MGVfdWFydGIuaApAQCAtMCwwICsxLDI2MiBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLXY4NTAvdjg1MGVfdWFydGIuaCAtLSBWODUwRSBvbi1jaGlwIGBVQVJUQicgVUFSVAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEsMDIsMDMgIE5FQyBFbGVjdHJvbmljcyBDb3Jwb3JhdGlvbgorICogIENvcHlyaWdodCAoQykgMjAwMSwwMiwwMyAgTWlsZXMgQmFkZXIgPG1pbGVzQGdudS5vcmc+CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcworICogYXJjaGl2ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFdyaXR0ZW4gYnkgTWlsZXMgQmFkZXIgPG1pbGVzQGdudS5vcmc+CisgKi8KKworLyogVGhlIFY4NTBFIFVBUlRCIGlzIGJhc2ljYWxseSBhIHN1cGVyc2V0IG9mIHRoZSBvcmlnaW5hbCBWODUwRSBVQVJULCBidXQKKyAgIGV2ZW4gd2hlcmUgaXQncyB0aGUgc2FtZSwgdGhlIG5hbWVzIGFuZCBkZXRhaWxzIGhhdmUgY2hhbmdlZCBhIGJpdC4KKyAgIEl0J3Mgc2ltaWxhciBlbm91Z2ggdG8gdXNlIHRoZSBzYW1lIGRyaXZlciAodjg1MGVfdWFydC5jKSwgYnV0IHRoZQorICAgZGV0YWlscyBoYXZlIGJlZW4gYWJzdHJhY3RlZCBzbGlnaHRseSB0byBkbyBzby4gICovCisKKyNpZm5kZWYgX19WODUwX1Y4NTBFX1VBUlRCX0hfXworI2RlZmluZSBfX1Y4NTBfVjg1MEVfVUFSVEJfSF9fCisKKwwKKy8qIFJhdyBoYXJkd2FyZSBpbnRlcmZhY2UuICAqLworCisjZGVmaW5lIFY4NTBFX1VBUlRCX0JBU0VfQUREUihuKQkoMHhGRkZGRkEwMCArIDB4MTAgKiAobikpCisKKy8qIEFkZHJlc3NlcyBvZiBzcGVjaWZpYyBVQVJUIGNvbnRyb2wgcmVnaXN0ZXJzIGZvciBjaGFubmVsIE4uICAqLworI2RlZmluZSBWODUwRV9VQVJUQl9DVEwwX0FERFIobikJKFY4NTBFX1VBUlRCX0JBU0VfQUREUihuKSArIDB4MCkKKyNkZWZpbmUgVjg1MEVfVUFSVEJfQ1RMMl9BRERSKG4pCShWODUwRV9VQVJUQl9CQVNFX0FERFIobikgKyAweDIpCisjZGVmaW5lIFY4NTBFX1VBUlRCX1NUUl9BRERSKG4pCQkoVjg1MEVfVUFSVEJfQkFTRV9BRERSKG4pICsgMHg0KQorI2RlZmluZSBWODUwRV9VQVJUQl9SWF9BRERSKG4pCQkoVjg1MEVfVUFSVEJfQkFTRV9BRERSKG4pICsgMHg2KQorI2RlZmluZSBWODUwRV9VQVJUQl9SWEFQX0FERFIobikJKFY4NTBFX1VBUlRCX0JBU0VfQUREUihuKSArIDB4NikKKyNkZWZpbmUgVjg1MEVfVUFSVEJfVFhfQUREUihuKQkJKFY4NTBFX1VBUlRCX0JBU0VfQUREUihuKSArIDB4OCkKKyNkZWZpbmUgVjg1MEVfVUFSVEJfRklDMF9BRERSKG4pCShWODUwRV9VQVJUQl9CQVNFX0FERFIobikgKyAweEEpCisjZGVmaW5lIFY4NTBFX1VBUlRCX0ZJQzFfQUREUihuKQkoVjg1MEVfVUFSVEJfQkFTRV9BRERSKG4pICsgMHhCKQorI2RlZmluZSBWODUwRV9VQVJUQl9GSUMyX0FERFIobikJKFY4NTBFX1VBUlRCX0JBU0VfQUREUihuKSArIDB4QykKKyNkZWZpbmUgVjg1MEVfVUFSVEJfRklTMF9BRERSKG4pCShWODUwRV9VQVJUQl9CQVNFX0FERFIobikgKyAweEUpCisjZGVmaW5lIFY4NTBFX1VBUlRCX0ZJUzFfQUREUihuKQkoVjg1MEVfVUFSVEJfQkFTRV9BRERSKG4pICsgMHhGKQorCisvKiBVQVJUQiBjb250cm9sIHJlZ2lzdGVyIDAgKGdlbmVyYWwgY29uZmlnKS4gICovCisjZGVmaW5lIFY4NTBFX1VBUlRCX0NUTDAobikJKCoodm9sYXRpbGUgdTggKilWODUwRV9VQVJUQl9DVEwwX0FERFIobikpCisvKiBDb250cm9sIGJpdHMgZm9yIGNvbmZpZyByZWdpc3RlcnMuICAqLworI2RlZmluZSBWODUwRV9VQVJUQl9DVEwwX1BXUgkJMHg4MAkvKiBjbG9jayBlbmFibGUgKi8KKyNkZWZpbmUgVjg1MEVfVUFSVEJfQ1RMMF9UWEUJCTB4NDAJLyogdHJhbnNtaXQgZW5hYmxlICovCisjZGVmaW5lIFY4NTBFX1VBUlRCX0NUTDBfUlhFCQkweDIwCS8qIHJlY2VpdmUgZW5hYmxlICovCisjZGVmaW5lIFY4NTBFX1VBUlRCX0NUTDBfRElSCQkweDEwCS8qICAqLworI2RlZmluZSBWODUwRV9VQVJUQl9DVEwwX1BTMQkJMHgwOAkvKiBwYXJpdHkgKi8KKyNkZWZpbmUgVjg1MEVfVUFSVEJfQ1RMMF9QUzAJCTB4MDQJLyogcGFyaXR5ICovCisjZGVmaW5lIFY4NTBFX1VBUlRCX0NUTDBfQ0wJCTB4MDIJLyogY2hhciBsZW4gMTo4Yml0LCAwOjdiaXQgKi8KKyNkZWZpbmUgVjg1MEVfVUFSVEJfQ1RMMF9TTAkJMHgwMQkvKiBzdG9wIGJpdCAxOjJiaXQsIDA6MWJpdCAqLworI2RlZmluZSBWODUwRV9VQVJUQl9DVEwwX1BTX01BU0sJMHgwQwkvKiBtYXNrIGNvdmVyaW5nIHBhcml0eSBiaXRzICovCisjZGVmaW5lIFY4NTBFX1VBUlRCX0NUTDBfUFNfTk9ORQkweDAwCS8qIG5vIHBhcml0eSAqLworI2RlZmluZSBWODUwRV9VQVJUQl9DVEwwX1BTX1pFUk8JMHgwNAkvKiB6ZXJvIHBhcml0eSAqLworI2RlZmluZSBWODUwRV9VQVJUQl9DVEwwX1BTX09ERAkJMHgwOAkvKiBvZGQgcGFyaXR5ICovCisjZGVmaW5lIFY4NTBFX1VBUlRCX0NUTDBfUFNfRVZFTgkweDBDCS8qIGV2ZW4gcGFyaXR5ICovCisjZGVmaW5lIFY4NTBFX1VBUlRCX0NUTDBfQ0xfOAkJMHgwMgkvKiBjaGFyIGxlbiAxOjhiaXQsIDA6N2JpdCAqLworI2RlZmluZSBWODUwRV9VQVJUQl9DVEwwX1NMXzIJCTB4MDEJLyogc3RvcCBiaXQgMToyYml0LCAwOjFiaXQgKi8KKworLyogVUFSVEIgY29udHJvbCByZWdpc3RlciAyIChjbG9jayBkaXZpZGVyKS4gICovCisjZGVmaW5lIFY4NTBFX1VBUlRCX0NUTDIobikJKCoodm9sYXRpbGUgdTE2ICopVjg1MEVfVUFSVEJfQ1RMMl9BRERSKG4pKQorI2RlZmluZSBWODUwRV9VQVJUQl9DVEwyX01JTgk0CisjZGVmaW5lIFY4NTBFX1VBUlRCX0NUTDJfTUFYCTB4RkZGRgorCisvKiBVQVJUQiBzZXJpYWwgaW50ZXJmYWNlIHN0YXR1cyByZWdpc3Rlci4gICovCisjZGVmaW5lIFY4NTBFX1VBUlRCX1NUUihuKQkoKih2b2xhdGlsZSB1OCAqKVY4NTBFX1VBUlRCX1NUUl9BRERSKG4pKQorLyogQ29udHJvbCBiaXRzIGZvciBzdGF0dXMgcmVnaXN0ZXJzLiAgKi8KKyNkZWZpbmUgVjg1MEVfVUFSVEJfU1RSX1RTRgkweDgwCS8qIFVCVFggb3IgRklGTyBleGlzdCBkYXRhICAqLworI2RlZmluZSBWODUwRV9VQVJUQl9TVFJfT1ZGCTB4MDgJLyogb3ZlcmZsb3cgZXJyb3IgKi8KKyNkZWZpbmUgVjg1MEVfVUFSVEJfU1RSX1BFCTB4MDQJLyogcGFyaXR5IGVycm9yICovCisjZGVmaW5lIFY4NTBFX1VBUlRCX1NUUl9GRQkweDAyCS8qIGZyYW1pbmcgZXJyb3IgKi8KKyNkZWZpbmUgVjg1MEVfVUFSVEJfU1RSX09WRQkweDAxCS8qIG92ZXJydW4gZXJyb3IgKi8KKworLyogVUFSVEIgcmVjZWl2ZSBkYXRhIHJlZ2lzdGVyLiAgKi8KKyNkZWZpbmUgVjg1MEVfVUFSVEJfUlgobikJKCoodm9sYXRpbGUgdTggKilWODUwRV9VQVJUQl9SWF9BRERSKG4pKQorI2RlZmluZSBWODUwRV9VQVJUQl9SWEFQKG4pCSgqKHZvbGF0aWxlIHUxNiAqKVY4NTBFX1VBUlRCX1JYQVBfQUREUihuKSkKKy8qIENvbnRyb2wgYml0cyBmb3Igc3RhdHVzIHJlZ2lzdGVycy4gICovCisjZGVmaW5lIFY4NTBFX1VBUlRCX1JYQVBfUEVGCTB4MDIwMCAvKiBwYXJpdHkgZXJyb3IgKi8KKyNkZWZpbmUgVjg1MEVfVUFSVEJfUlhBUF9GRUYJMHgwMTAwIC8qIGZyYW1pbmcgZXJyb3IgKi8KKworLyogVUFSVEIgdHJhbnNtaXQgZGF0YSByZWdpc3Rlci4gICovCisjZGVmaW5lIFY4NTBFX1VBUlRCX1RYKG4pCSgqKHZvbGF0aWxlIHU4ICopVjg1MEVfVUFSVEJfVFhfQUREUihuKSkKKworLyogVUFSVEIgRklGTyBjb250cm9sIHJlZ2lzdGVyIDAuICAqLworI2RlZmluZSBWODUwRV9VQVJUQl9GSUMwKG4pCSgqKHZvbGF0aWxlIHU4ICopVjg1MEVfVUFSVEJfRklDMF9BRERSKG4pKQorCisvKiBVQVJUQiBGSUZPIGNvbnRyb2wgcmVnaXN0ZXIgMS4gICovCisjZGVmaW5lIFY4NTBFX1VBUlRCX0ZJQzEobikJKCoodm9sYXRpbGUgdTggKilWODUwRV9VQVJUQl9GSUMxX0FERFIobikpCisKKy8qIFVBUlRCIEZJRk8gY29udHJvbCByZWdpc3RlciAyLiAgKi8KKyNkZWZpbmUgVjg1MEVfVUFSVEJfRklDMihuKQkoKih2b2xhdGlsZSB1MTYgKilWODUwRV9VQVJUQl9GSUMyX0FERFIobikpCisKKy8qIFVBUlRCIEZJRk8gc3RhdHVzIHJlZ2lzdGVyIDAuICAqLworI2RlZmluZSBWODUwRV9VQVJUQl9GSVMwKG4pCSgqKHZvbGF0aWxlIHU4ICopVjg1MEVfVUFSVEJfRklTMF9BRERSKG4pKQorCisvKiBVQVJUQiBGSUZPIHN0YXR1cyByZWdpc3RlciAxLiAgKi8KKyNkZWZpbmUgVjg1MEVfVUFSVEJfRklTMShuKQkoKih2b2xhdGlsZSB1OCAqKVY4NTBFX1VBUlRCX0ZJUzFfQUREUihuKSkKKworDAorLyogU2xpZ2h0bHkgYWJzdHJhY3QgaW50ZXJmYWNlIHVzZWQgYnkgZHJpdmVyLiAgKi8KKworCisvKiBJbnRlcnJ1cHRzIHVzZWQgYnkgdGhlIFVBUlQuICAqLworCisvKiBSZWNlaXZlZCB3aGVuIHRoZSBtb3N0IHJlY2VudGx5IHRyYW5zbWl0dGVkIGNoYXJhY3RlciBoYXMgYmVlbiBzZW50LiAgKi8KKyNkZWZpbmUgVjg1MEVfVUFSVF9UWF9JUlEoY2hhbikJCUlSUV9JTlRVQlRJVCAoY2hhbikKKy8qIFJlY2VpdmVkIHdoZW4gYSBuZXcgY2hhcmFjdGVyIGhhcyBiZWVuIHJlY2VpdmVkLiAgKi8KKyNkZWZpbmUgVjg1MEVfVUFSVF9SWF9JUlEoY2hhbikJCUlSUV9JTlRVQlRJUiAoY2hhbikKKworLyogVXNlIGJ5IHNlcmlhbCBkcml2ZXIgZm9yIGluZm9ybWF0aW9uIHB1cnBvc2VzLiAgKi8KKyNkZWZpbmUgVjg1MEVfVUFSVF9CQVNFX0FERFIoY2hhbikJVjg1MEVfVUFSVEJfQkFTRV9BRERSKGNoYW4pCisKKworLyogVUFSVCBjbG9jayBnZW5lcmF0b3IgaW50ZXJmYWNlLiAgKi8KKworLyogVGhpcyB0eXBlIGVuY2Fwc3VsYXRlcyBhIHBhcnRpY3VsYXIgdWFydCBmcmVxdWVuY3kuICAqLwordHlwZWRlZiB1MTYgdjg1MGVfdWFydF9zcGVlZF90OworCisvKiBDYWxjdWxhdGUgYSB1YXJ0IHNwZWVkIGZyb20gQkFVRCBmb3IgdGhpcyB1YXJ0LiAgKi8KK3N0YXRpYyBpbmxpbmUgdjg1MGVfdWFydF9zcGVlZF90IHY4NTBlX3VhcnRfY2FsY19zcGVlZCAodW5zaWduZWQgYmF1ZCkKK3sKKwl2ODUwZV91YXJ0X3NwZWVkX3Qgc3BlZWQ7CisKKwkvKgorCSAqIFY4NTBFL01FMiBVQVJUQiBiYXVkIHJhdGUgaXMgZGV0ZXJtaW5lZCBieSB0aGUgdmFsdWUgb2YgVUJDVEwyCisJICogZnggPSBWODUwRV9VQVJUQl9CQVNFX0ZSRVEgPSBDUFVfQ0xPQ0tfRlJFUS80CisJICogYmF1ZCA9IGZ4IC8gMipzcGVlZCAgIFsgc3BlZWQgPj0gNCBdCisJICovCisJc3BlZWQgPSBWODUwRV9VQVJUQl9DVEwyX01JTjsKKwl3aGlsZSAoKChWODUwRV9VQVJUQl9CQVNFX0ZSRVEgLyAyKSAvIHNwZWVkICkgPiBiYXVkKQorCQlzcGVlZCsrOworCisJcmV0dXJuIHNwZWVkOworfQorCisvKiBSZXR1cm4gdGhlIGN1cnJlbnQgc3BlZWQgb2YgdWFydCBjaGFubmVsIENIQU4uICAqLworI2RlZmluZSB2ODUwZV91YXJ0X3NwZWVkKGNoYW4pCQkgICAgVjg1MEVfVUFSVEJfQ1RMMiAoY2hhbikKKworLyogU2V0IHRoZSBjdXJyZW50IHNwZWVkIG9mIHVhcnQgY2hhbm5lbCBDSEFOLiAgKi8KKyNkZWZpbmUgdjg1MGVfdWFydF9zZXRfc3BlZWQoY2hhbiwgc3BlZWQpICAgKFY4NTBFX1VBUlRCX0NUTDIgKGNoYW4pID0gKHNwZWVkKSkKKworLyogUmV0dXJuIHRydWUgaWYgU1BFRUQxIGFuZCBTUEVFRDIgYXJlIHRoZSBzYW1lLiAgKi8KKyNkZWZpbmUgdjg1MGVfdWFydF9zcGVlZF9lcShzcGVlZDEsIHNwZWVkMikgKChzcGVlZDEpID09IChzcGVlZDIpKQorCisvKiBNaW5pbXVtIGJhdWQgcmF0ZSBwb3NzaWJsZS4gICovCisjZGVmaW5lIHY4NTBlX3VhcnRfbWluX2JhdWQoKSBcCisgICAoKFY4NTBFX1VBUlRCX0JBU0VfRlJFUSAvIDIpIC8gVjg1MEVfVUFSVEJfQ1RMMl9NQVgpCisKKy8qIE1heGltdW0gYmF1ZCByYXRlIHBvc3NpYmxlLiAgVGhlIGVycm9yIGlzIHF1aXRlIGhpZ2ggYXQgbWF4LCB0aG91Z2guICAqLworI2RlZmluZSB2ODUwZV91YXJ0X21heF9iYXVkKCkgXAorICAgKChWODUwRV9VQVJUQl9CQVNFX0ZSRVEgLyAyKSAvIFY4NTBFX1VBUlRCX0NUTDJfTUlOKQorCisvKiBUaGUgYG1heGltdW0nIGNsb2NrIHJhdGUgdGhlIHVhcnQgY2FuIHVzZWQsIHdoaWNoIGlzIHdhbnRlZCAodGhvdWdoIG5vdAorICAgcmVhbGx5IHVzZWQgaW4gYW55IHVzZWZ1bCB3YXkpIGJ5IHRoZSBzZXJpYWwgZnJhbWV3b3JrLiAgKi8KKyNkZWZpbmUgdjg1MGVfdWFydF9tYXhfY2xvY2soKSBcCisgICAoVjg1MEVfVUFSVEJfQkFTRV9GUkVRIC8gMikKKworCisvKiBVQVJUIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlLiAgKi8KKworLyogVHlwZSBvZiB0aGUgdWFydCBjb25maWcgcmVnaXN0ZXI7IG11c3QgYmUgYSBzY2FsYXIuICAqLwordHlwZWRlZiB1MTYgdjg1MGVfdWFydF9jb25maWdfdDsKKworLyogVGhlIHVhcnQgaGFyZHdhcmUgY29uZmlnIHJlZ2lzdGVyIGZvciBjaGFubmVsIENIQU4uICAqLworI2RlZmluZSBWODUwRV9VQVJUX0NPTkZJRyhjaGFuKQkJVjg1MEVfVUFSVEJfQ1RMMCAoY2hhbikKKworLyogVGhpcyBjb25maWcgYml0IHNldCBpZiB0aGUgdWFydCBpcyBlbmFibGVkLiAgKi8KKyNkZWZpbmUgVjg1MEVfVUFSVF9DT05GSUdfRU5BQkxFRAlWODUwRV9VQVJUQl9DVEwwX1BXUgorLyogSWYgdGhlIHVhcnQgX2lzbid0XyBlbmFibGVkLCBzdG9yZSB0aGlzIHZhbHVlIHRvIGl0IHRvIGRvIHNvLiAgKi8KKyNkZWZpbmUgVjg1MEVfVUFSVF9DT05GSUdfSU5JVAkJVjg1MEVfVUFSVEJfQ1RMMF9QV1IKKy8qIFN0b3JlIHRoaXMgY29uZmlnIHZhbHVlIHRvIGRpc2FibGUgdGhlIHVhcnQgY2hhbm5lbCBjb21wbGV0ZWx5LiAgKi8KKyNkZWZpbmUgVjg1MEVfVUFSVF9DT05GSUdfRklOSQkJMAorCisvKiBTZXR0aW5nL2NsZWFyaW5nIHRoZXNlIGJpdHMgZW5hYmxlL2Rpc2FibGUgVFgvUlgsIHJlc3BlY3RpdmVseSAoYnV0CisgICBvdGhlcndpc2UgZ2VuZXJhbGx5IGxlYXZlIHRoaW5ncyBydW5uaW5nKS4gICovCisjZGVmaW5lIFY4NTBFX1VBUlRfQ09ORklHX1JYX0VOQUJMRQlWODUwRV9VQVJUQl9DVEwwX1JYRQorI2RlZmluZSBWODUwRV9VQVJUX0NPTkZJR19UWF9FTkFCTEUJVjg1MEVfVUFSVEJfQ1RMMF9UWEUKKworLyogVGhlc2UgbWFza3MgZGVmaW5lIHdoaWNoIGNvbmZpZyBiaXRzIGFmZmVjdCBUWC9SWCBtb2RlcywgcmVzcGVjdGl2ZWx5LiAgKi8KKyNkZWZpbmUgVjg1MEVfVUFSVF9DT05GSUdfUlhfQklUUyBcCisgIChWODUwRV9VQVJUQl9DVEwwX1BTX01BU0sgfCBWODUwRV9VQVJUQl9DVEwwX0NMXzgpCisjZGVmaW5lIFY4NTBFX1VBUlRfQ09ORklHX1RYX0JJVFMgXAorICAoVjg1MEVfVUFSVEJfQ1RMMF9QU19NQVNLIHwgVjg1MEVfVUFSVEJfQ1RMMF9DTF84IHwgVjg1MEVfVUFSVEJfQ1RMMF9TTF8yKQorCitzdGF0aWMgaW5saW5lIHY4NTBlX3VhcnRfY29uZmlnX3Qgdjg1MGVfdWFydF9jYWxjX2NvbmZpZyAodW5zaWduZWQgY2ZsYWdzKQoreworCXY4NTBlX3VhcnRfY29uZmlnX3QgY29uZmlnID0gMDsKKworCS8qIEZpZ3VyZSBvdXQgbmV3IGNvbmZpZ3VyYXRpb24gb2YgY29udHJvbCByZWdpc3Rlci4gICovCisJaWYgKGNmbGFncyAmIENTVE9QQikKKwkJLyogTnVtYmVyIG9mIHN0b3AgYml0cywgMSBvciAyLiAgKi8KKwkJY29uZmlnIHw9IFY4NTBFX1VBUlRCX0NUTDBfU0xfMjsKKwlpZiAoKGNmbGFncyAmIENTSVpFKSA9PSBDUzgpCisJCS8qIE51bWJlciBvZiBkYXRhIGJpdHMsIDcgb3IgOC4gICovCisJCWNvbmZpZyB8PSBWODUwRV9VQVJUQl9DVEwwX0NMXzg7CisJaWYgKCEgKGNmbGFncyAmIFBBUkVOQikpCisJCS8qIE5vIHBhcml0eSBjaGVjay9nZW5lcmF0aW9uLiAgKi8KKwkJY29uZmlnIHw9IFY4NTBFX1VBUlRCX0NUTDBfUFNfTk9ORTsKKwllbHNlIGlmIChjZmxhZ3MgJiBQQVJPREQpCisJCS8qIE9kZCBwYXJpdHkgY2hlY2svZ2VuZXJhdGlvbi4gICovCisJCWNvbmZpZyB8PSBWODUwRV9VQVJUQl9DVEwwX1BTX09ERDsKKwllbHNlCisJCS8qIEV2ZW4gcGFyaXR5IGNoZWNrL2dlbmVyYXRpb24uICAqLworCQljb25maWcgfD0gVjg1MEVfVUFSVEJfQ1RMMF9QU19FVkVOOworCWlmIChjZmxhZ3MgJiBDUkVBRCkKKwkJLyogUmVhZGluZyBlbmFibGVkLiAgKi8KKwkJY29uZmlnIHw9IFY4NTBFX1VBUlRCX0NUTDBfUlhFOworCisJY29uZmlnIHw9IFY4NTBFX1VBUlRCX0NUTDBfUFdSOworCWNvbmZpZyB8PSBWODUwRV9VQVJUQl9DVEwwX1RYRTsgLyogV3JpdGluZyBpcyBhbHdheXMgZW5hYmxlZC4gICovCisJY29uZmlnIHw9IFY4NTBFX1VBUlRCX0NUTDBfRElSOyAvKiBMU0IgZmlyc3QuICAqLworCisJcmV0dXJuIGNvbmZpZzsKK30KKworLyogVGhpcyBzaG91bGQgZGVsYXkgYXMgbG9uZyBhcyBuZWNlc3NhcnkgZm9yIGEgcmVjZW50bHkgd3JpdHRlbiBjb25maWcKKyAgIHNldHRpbmcgdG8gc2V0dGxlLCBiZWZvcmUgd2UgdHVybiB0aGUgdWFydCBiYWNrIG9uLiAgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAordjg1MGVfdWFydF9jb25maWdfZGVsYXkgKHY4NTBlX3VhcnRfY29uZmlnX3QgY29uZmlnLCB2ODUwZV91YXJ0X3NwZWVkX3Qgc3BlZWQpCit7CisJLyogVGhlIFVBUlQgbWF5IG5vdCBiZSByZXNldCBwcm9wZXJseSB1bmxlc3Mgd2Ugd2FpdCBhdCBsZWFzdCAyCisJICAgYGJhc2ljLWNsb2NrcycgdW50aWwgdHVybmluZyBvbiB0aGUgVFhFL1JYRSBiaXRzIGFnYWluLgorCSAgIEEgYGJhc2ljIGNsb2NrJyBpcyB0aGUgY2xvY2sgdXNlZCBieSB0aGUgYmF1ZC1yYXRlIGdlbmVyYXRvciwKKwkgICBpLmUuLCB0aGUgY3B1IGNsb2NrIGRpdmlkZWQgYnkgdGhlIDJebmV3X2Nsa19kaXZsb2cyLgorCSAgIFRoZSBsb29wIHRha2VzIDIgaW5zbnMsIHNvIGxvb3AgQ1lDTEVTIC8gMiB0aW1lcy4gICovCisJcmVnaXN0ZXIgdW5zaWduZWQgY291bnQgPSAxIDw8IHNwZWVkOworCXdoaWxlICgtLWNvdW50ICE9IDApCisJCS8qIG5vdGhpbmcgKi87Cit9CisKKworLyogUlgvVFggaW50ZXJmYWNlLiAgKi8KKworLyogUmV0dXJuIHRydWUgaWYgYWxsIGNoYXJhY3RlcnMgYXdhaXRpbmcgdHJhbnNtaXNzaW9uIG9uIHVhcnQgY2hhbm5lbCBOCisgICBoYXZlIGJlZW4gdHJhbnNtaXR0ZWQuICAqLworI2RlZmluZSB2ODUwZV91YXJ0X3htaXRfZG9uZShuKQkJCQkJCSAgICAgIFwKKyAgICghIChWODUwRV9VQVJUQl9TVFIobikgJiBWODUwRV9VQVJUQl9TVFJfVFNGKSkKKy8qIFdhaXQgZm9yIHRoaXMgdG8gYmUgdHJ1ZS4gICovCisjZGVmaW5lIHY4NTBlX3VhcnRfd2FpdF9mb3JfeG1pdF9kb25lKG4pCQkJCSAgICAgIFwKKyAgIGRvIHsgfSB3aGlsZSAoISB2ODUwZV91YXJ0X3htaXRfZG9uZSAobikpCisKKy8qIFJldHVybiB0cnVlIGlmIHVhcnQgY2hhbm5lbCBOIGlzIHJlYWR5IHRvIHRyYW5zbWl0IGEgY2hhcmFjdGVyLiAgKi8KKyNkZWZpbmUgdjg1MGVfdWFydF94bWl0X29rKG4pCQkJCQkJICAgICAgXAorICAgKHY4NTBlX3VhcnRfeG1pdF9kb25lKG4pICYmIHY4NTBlX3VhcnRfY3RzKG4pKQorLyogV2FpdCBmb3IgdGhpcyB0byBiZSB0cnVlLiAgKi8KKyNkZWZpbmUgdjg1MGVfdWFydF93YWl0X2Zvcl94bWl0X29rKG4pCQkJCQkgICAgICBcCisgICBkbyB7IH0gd2hpbGUgKCEgdjg1MGVfdWFydF94bWl0X29rIChuKSkKKworLyogV3JpdGUgY2hhcmFjdGVyIENIIHRvIHVhcnQgY2hhbm5lbCBDSEFOLiAgKi8KKyNkZWZpbmUgdjg1MGVfdWFydF9wdXRjKGNoYW4sIGNoKQkoVjg1MEVfVUFSVEJfVFgoY2hhbikgPSAoY2gpKQorCisvKiBSZXR1cm4gbGF0ZXN0IGNoYXJhY3RlciByZWFkIG9uIGNoYW5uZWwgQ0hBTi4gICovCisjZGVmaW5lIHY4NTBlX3VhcnRfZ2V0YyhjaGFuKQkJVjg1MEVfVUFSVEJfUlggKGNoYW4pCisKKy8qIFJldHVybiBiaXQtbWFzayBvZiB1YXJ0IGVycm9yIHN0YXR1cy4gICovCisjZGVmaW5lIHY4NTBlX3VhcnRfZXJyKGNoYW4pCQlWODUwRV9VQVJUQl9TVFIgKGNoYW4pCisvKiBWYXJpb3VzIGVycm9yIGJpdHMgc2V0IGluIHRoZSBlcnJvciByZXN1bHQuICAqLworI2RlZmluZSBWODUwRV9VQVJUX0VSUl9PVkVSUlVOCQlWODUwRV9VQVJUQl9TVFJfT1ZFCisjZGVmaW5lIFY4NTBFX1VBUlRfRVJSX0ZSQU1FCQlWODUwRV9VQVJUQl9TVFJfRkUKKyNkZWZpbmUgVjg1MEVfVUFSVF9FUlJfUEFSSVRZCQlWODUwRV9VQVJUQl9TVFJfUEUKKworCisjZW5kaWYgLyogX19WODUwX1Y4NTBFX1VBUlRCX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdjg1MC92ODUwZV91dGlscy5oIGIvaW5jbHVkZS9hc20tdjg1MC92ODUwZV91dGlscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyZWI3MjgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS12ODUwL3Y4NTBlX3V0aWxzLmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLXY4NTAvdjg1MGVfdXRpbHMuaCAtLSBVdGlsaXR5IGZ1bmN0aW9ucyBhc3NvY2lhdGVkIHdpdGgKKyAqCVY4NTBFIENQVXMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxLDAzICBORUMgRWxlY3Ryb25pY3MgQ29ycG9yYXRpb24KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEsMDMgIE1pbGVzIEJhZGVyIDxtaWxlc0BnbnUub3JnPgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMKKyAqIGFyY2hpdmUgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBXcml0dGVuIGJ5IE1pbGVzIEJhZGVyIDxtaWxlc0BnbnUub3JnPgorICovCisKKyNpZm5kZWYgX19WODUwX1Y4NTBFX1VUSUxTX0hfXworI2RlZmluZSBfX1Y4NTBfVjg1MEVfVVRJTFNfSF9fCisKKy8qIENhbGN1bGF0ZSBjb3VudGVyIGNsb2NrLWRpdmlkZXIgYW5kIGNvdW50IHZhbHVlcyB0byBhdHRhaW4gdGhlCisgICBkZXNpcmVkIGZyZXF1ZW5jeSBSQVRFIGZyb20gdGhlIGJhc2UgZnJlcXVlbmN5IEJBU0VfRlJFUS4gIFRoZQorICAgY291bnRlciBpcyBleHBlY3RlZCB0byBoYXZlIGEgY2xvY2stZGl2aWRlciwgd2hpY2ggY2FuIGRpdmlkZSB0aGUKKyAgIHN5c3RlbSBjcHUgY2xvY2sgYnkgYSBwb3dlciBvZiB0d28gdmFsdWUgZnJvbSBNSU5fRElWTE9HMiB0bworICAgTUFYX0RJVl9MT0cyLCBhbmQgYSB3b3JkLXNpemUgb2YgQ09VTlRFUl9TSVpFIGJpdHMgKHRoZSBjb3VudGVyCisgICBjb3VudHMgdXAgYW5kIHJlc2V0cyB3aGVuZXZlciBpdCdzIGVxdWFsIHRvIHRoZSBjb21wYXJlIHJlZ2lzdGVyLAorICAgZ2VuZXJhdGluZyBhbiBpbnRlcnJ1cHQgb3Igd2hhdGV2ZXIgd2hlbiBpdCBkb2VzIHNvKS4gIFRoZSByZXR1cm5lZAorICAgdmFsdWVzIGFyZTogKkRJVkxPRzIgLS0gbG9nMiBvZiB0aGUgZGVzaXJlZCBjbG9jayBkaXZpZGVyIGFuZCAqQ09VTlQKKyAgIC0tIHRoZSBjb3VudGVyIGNvbXBhcmUgdmFsdWUgdG8gdXNlLiAgUmV0dXJucyB0cnVlIGlmIGl0IHdhcyBwb3NzaWJsZQorICAgdG8gZmluZCBhIHJlYXNvbmFibGUgdmFsdWUsIG90aGVyd2lzZSBmYWxzZSAoYW5kIHRoZSBvdGhlciByZXR1cm4KKyAgIHZhbHVlcyB3aWxsIGJlIHNldCB0byBiZSBhcyBnb29kIGFzIHBvc3NpYmxlKS4gICovCitleHRlcm4gaW50IGNhbGNfY291bnRlcl9wYXJhbXMgKHVuc2lnbmVkIGxvbmcgYmFzZV9mcmVxLAorCQkJCXVuc2lnbmVkIGxvbmcgcmF0ZSwKKwkJCQl1bnNpZ25lZCBtaW5fZGl2bG9nMiwgdW5zaWduZWQgbWF4X2RpdmxvZzIsCisJCQkJdW5zaWduZWQgY291bnRlcl9zaXplLAorCQkJCXVuc2lnbmVkICpkaXZsb2cyLCB1bnNpZ25lZCAqY291bnQpOworCisjZW5kaWYgLyogX19WODUwX1Y4NTBFX1VUSUxTX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0LzgyNTNwaXQuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC84MjUzcGl0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg1Zjc4NAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC84MjUzcGl0LmgKQEAgLTAsMCArMSwxMCBAQAorLyoKKyAqIDgyNTMvODI1NCBQcm9ncmFtbWFibGUgSW50ZXJ2YWwgVGltZXIKKyAqLworCisjaWZuZGVmIF84MjUzUElUX0gKKyNkZWZpbmUgXzgyNTNQSVRfSAorCisjZGVmaW5lIFBJVF9USUNLX1JBVEUgCTExOTMxODJVTAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9hLm91dC5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2Eub3V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk1MjkxNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9hLm91dC5oCkBAIC0wLDAgKzEsMjcgQEAKKyNpZm5kZWYgX19YODY2NF9BX09VVF9IX18KKyNkZWZpbmUgX19YODY2NF9BX09VVF9IX18KKworLyogMzJiaXQgYS5vdXQgKi8KKworc3RydWN0IGV4ZWMKK3sKKyAgdW5zaWduZWQgaW50IGFfaW5mbzsJCS8qIFVzZSBtYWNyb3MgTl9NQUdJQywgZXRjIGZvciBhY2Nlc3MgKi8KKyAgdW5zaWduZWQgYV90ZXh0OwkJLyogbGVuZ3RoIG9mIHRleHQsIGluIGJ5dGVzICovCisgIHVuc2lnbmVkIGFfZGF0YTsJCS8qIGxlbmd0aCBvZiBkYXRhLCBpbiBieXRlcyAqLworICB1bnNpZ25lZCBhX2JzczsJCS8qIGxlbmd0aCBvZiB1bmluaXRpYWxpemVkIGRhdGEgYXJlYSBmb3IgZmlsZSwgaW4gYnl0ZXMgKi8KKyAgdW5zaWduZWQgYV9zeW1zOwkJLyogbGVuZ3RoIG9mIHN5bWJvbCB0YWJsZSBkYXRhIGluIGZpbGUsIGluIGJ5dGVzICovCisgIHVuc2lnbmVkIGFfZW50cnk7CQkvKiBzdGFydCBhZGRyZXNzICovCisgIHVuc2lnbmVkIGFfdHJzaXplOwkJLyogbGVuZ3RoIG9mIHJlbG9jYXRpb24gaW5mbyBmb3IgdGV4dCwgaW4gYnl0ZXMgKi8KKyAgdW5zaWduZWQgYV9kcnNpemU7CQkvKiBsZW5ndGggb2YgcmVsb2NhdGlvbiBpbmZvIGZvciBkYXRhLCBpbiBieXRlcyAqLworfTsKKworI2RlZmluZSBOX1RSU0laRShhKQkoKGEpLmFfdHJzaXplKQorI2RlZmluZSBOX0RSU0laRShhKQkoKGEpLmFfZHJzaXplKQorI2RlZmluZSBOX1NZTVNJWkUoYSkJKChhKS5hX3N5bXMpCisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8bGludXgvdGhyZWFkX2luZm8uaD4KKyNkZWZpbmUgU1RBQ0tfVE9QICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9JQTMyKSA/IElBMzJfUEFHRV9PRkZTRVQgOiBUQVNLX1NJWkUpCisjZW5kaWYKKworI2VuZGlmIC8qIF9fQV9PVVRfR05VX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2FjcGkuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9hY3BpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZiNDFiOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9hY3BpLmgKQEAgLTAsMCArMSwxNzYgQEAKKy8qCisgKiAgYXNtLXg4Nl82NC9hY3BpLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBhdWwgRGllZmVuYmF1Z2ggPHBhdWwucy5kaWVmZW5iYXVnaEBpbnRlbC5jb20+CisgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBhdHJpY2sgTW9jaGVsIDxtb2NoZWxAb3NkbC5vcmc+CisgICoKKyAqIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyAqLworCisjaWZuZGVmIF9BU01fQUNQSV9ICisjZGVmaW5lIF9BU01fQUNQSV9ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNkZWZpbmUgQ09NUElMRVJfREVQRU5ERU5UX0lOVDY0ICAgbG9uZyBsb25nCisjZGVmaW5lIENPTVBJTEVSX0RFUEVOREVOVF9VSU5UNjQgIHVuc2lnbmVkIGxvbmcgbG9uZworCisvKgorICogQ2FsbGluZyBjb252ZW50aW9uczoKKyAqCisgKiBBQ1BJX1NZU1RFTV9YRkFDRSAgICAgICAgLSBJbnRlcmZhY2VzIHRvIGhvc3QgT1MgKGhhbmRsZXJzLCB0aHJlYWRzKQorICogQUNQSV9FWFRFUk5BTF9YRkFDRSAgICAgIC0gRXh0ZXJuYWwgQUNQSSBpbnRlcmZhY2VzIAorICogQUNQSV9JTlRFUk5BTF9YRkFDRSAgICAgIC0gSW50ZXJuYWwgQUNQSSBpbnRlcmZhY2VzCisgKiBBQ1BJX0lOVEVSTkFMX1ZBUl9YRkFDRSAgLSBJbnRlcm5hbCB2YXJpYWJsZS1wYXJhbWV0ZXIgbGlzdCBpbnRlcmZhY2VzCisgKi8KKyNkZWZpbmUgQUNQSV9TWVNURU1fWEZBQ0UKKyNkZWZpbmUgQUNQSV9FWFRFUk5BTF9YRkFDRQorI2RlZmluZSBBQ1BJX0lOVEVSTkFMX1hGQUNFCisjZGVmaW5lIEFDUElfSU5URVJOQUxfVkFSX1hGQUNFCisKKy8qIEFzbSBtYWNyb3MgKi8KKworI2RlZmluZSBBQ1BJX0FTTV9NQUNST1MKKyNkZWZpbmUgQlJFQUtQT0lOVDMKKyNkZWZpbmUgQUNQSV9ESVNBQkxFX0lSUVMoKSBsb2NhbF9pcnFfZGlzYWJsZSgpCisjZGVmaW5lIEFDUElfRU5BQkxFX0lSUVMoKSAgbG9jYWxfaXJxX2VuYWJsZSgpCisjZGVmaW5lIEFDUElfRkxVU0hfQ1BVX0NBQ0hFKCkJd2JpbnZkKCkKKworCitzdGF0aWMgaW5saW5lIGludAorX19hY3BpX2FjcXVpcmVfZ2xvYmFsX2xvY2sgKHVuc2lnbmVkIGludCAqbG9jaykKK3sKKwl1bnNpZ25lZCBpbnQgb2xkLCBuZXcsIHZhbDsKKwlkbyB7CisJCW9sZCA9ICpsb2NrOworCQluZXcgPSAoKChvbGQgJiB+MHgzKSArIDIpICsgKChvbGQgPj4gMSkgJiAweDEpKTsKKwkJdmFsID0gY21weGNoZyhsb2NrLCBvbGQsIG5ldyk7CisJfSB3aGlsZSAodW5saWtlbHkgKHZhbCAhPSBvbGQpKTsKKwlyZXR1cm4gKG5ldyA8IDMpID8gLTEgOiAwOworfQorCitzdGF0aWMgaW5saW5lIGludAorX19hY3BpX3JlbGVhc2VfZ2xvYmFsX2xvY2sgKHVuc2lnbmVkIGludCAqbG9jaykKK3sKKwl1bnNpZ25lZCBpbnQgb2xkLCBuZXcsIHZhbDsKKwlkbyB7CisJCW9sZCA9ICpsb2NrOworCQluZXcgPSBvbGQgJiB+MHgzOworCQl2YWwgPSBjbXB4Y2hnKGxvY2ssIG9sZCwgbmV3KTsKKwl9IHdoaWxlICh1bmxpa2VseSAodmFsICE9IG9sZCkpOworCXJldHVybiBvbGQgJiAweDE7Cit9CisKKyNkZWZpbmUgQUNQSV9BQ1FVSVJFX0dMT0JBTF9MT0NLKEdMcHRyLCBBY3EpIFwKKwkoKEFjcSkgPSBfX2FjcGlfYWNxdWlyZV9nbG9iYWxfbG9jaygodW5zaWduZWQgaW50ICopIEdMcHRyKSkKKworI2RlZmluZSBBQ1BJX1JFTEVBU0VfR0xPQkFMX0xPQ0soR0xwdHIsIEFjcSkgXAorCSgoQWNxKSA9IF9fYWNwaV9yZWxlYXNlX2dsb2JhbF9sb2NrKCh1bnNpZ25lZCBpbnQgKikgR0xwdHIpKQorCisvKgorICogTWF0aCBoZWxwZXIgYXNtIG1hY3JvcworICovCisjZGVmaW5lIEFDUElfRElWXzY0X0JZXzMyKG5faGksIG5fbG8sIGQzMiwgcTMyLCByMzIpIFwKKyAgICAgICAgYXNtKCJkaXZsICUyOyIgICAgICAgIFwKKyAgICAgICAgOiI9YSIocTMyKSwgIj1kIihyMzIpIFwKKyAgICAgICAgOiJyIihkMzIpLCAgICAgICAgICAgIFwKKyAgICAgICAgIjAiKG5fbG8pLCAiMSIobl9oaSkpCisKKworI2RlZmluZSBBQ1BJX1NISUZUX1JJR0hUXzY0KG5faGksIG5fbG8pIFwKKyAgICBhc20oInNocmwgICAkMSwlMjsiICAgICAgICAgICAgIFwKKyAgICAgICAgInJjcmwgICAkMSwlMzsiICAgICAgICAgICAgIFwKKyAgICAgICAgOiI9ciIobl9oaSksICI9ciIobl9sbykgICAgIFwKKyAgICAgICAgOiIwIihuX2hpKSwgIjEiKG5fbG8pKQorCisvKgorICogUmVmZXIgSW50ZWwgQUNQSSBfUERDIHN1cHBvcnQgZG9jdW1lbnQgZm9yIGJpdCBkZWZpbml0aW9ucworICovCisjZGVmaW5lIEFDUElfUERDX0VTVF9DQVBBQklMSVRZX1NNUCAJMHhhCisjZGVmaW5lIEFDUElfUERDX0VTVF9DQVBBQklMSVRZX01TUgkweDEKKworI2lmZGVmIENPTkZJR19BQ1BJX0JPT1QKK2V4dGVybiBpbnQgYWNwaV9sYXBpYzsKK2V4dGVybiBpbnQgYWNwaV9pb2FwaWM7CitleHRlcm4gaW50IGFjcGlfbm9pcnE7CitleHRlcm4gaW50IGFjcGlfc3RyaWN0OworZXh0ZXJuIGludCBhY3BpX2Rpc2FibGVkOworZXh0ZXJuIGludCBhY3BpX3BjaV9kaXNhYmxlZDsKK2V4dGVybiBpbnQgYWNwaV9odDsKK3N0YXRpYyBpbmxpbmUgdm9pZCBkaXNhYmxlX2FjcGkodm9pZCkgCit7IAorCWFjcGlfZGlzYWJsZWQgPSAxOyAKKwlhY3BpX2h0ID0gMDsgCisJYWNwaV9wY2lfZGlzYWJsZWQgPSAxOworCWFjcGlfbm9pcnEgPSAxOworfQorCisvKiBGaXhtYXAgcGFnZXMgdG8gcmVzZXJ2ZSBmb3IgQUNQSSBib290LXRpbWUgdGFibGVzIChzZWUgZml4bWFwLmgpICovCisjZGVmaW5lIEZJWF9BQ1BJX1BBR0VTIDQKKworZXh0ZXJuIGludCBhY3BpX2dzaV90b19pcnEodTMyIGdzaSwgdW5zaWduZWQgaW50ICppcnEpOworCisjZWxzZQkvKiAhQ09ORklHX0FDUElfQk9PVCAqLworI2RlZmluZSBhY3BpX2xhcGljIDAKKyNkZWZpbmUgYWNwaV9pb2FwaWMgMAorI2VuZGlmIC8qICFDT05GSUdfQUNQSV9CT09UICovCisKK2V4dGVybiBpbnQgYWNwaV9udW1hOworZXh0ZXJuIGludCBhY3BpX3NjYW5fbm9kZXModW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpOworI2RlZmluZSBOUl9OT0RFX01FTUJMS1MgKE1BWF9OVU1OT0RFUyoyKQorCisjaWZkZWYgQ09ORklHX0FDUElfUENJCitzdGF0aWMgaW5saW5lIHZvaWQgYWNwaV9ub2lycV9zZXQodm9pZCkgeyBhY3BpX25vaXJxID0gMTsgfQorc3RhdGljIGlubGluZSB2b2lkIGFjcGlfZGlzYWJsZV9wY2kodm9pZCkgCit7CisJYWNwaV9wY2lfZGlzYWJsZWQgPSAxOyAKKwlhY3BpX25vaXJxX3NldCgpOworfQorZXh0ZXJuIGludCBhY3BpX2lycV9iYWxhbmNlX3NldChjaGFyICpzdHIpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBhY3BpX25vaXJxX3NldCh2b2lkKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBhY3BpX2Rpc2FibGVfcGNpKHZvaWQpIHsgfQorc3RhdGljIGlubGluZSBpbnQgYWNwaV9pcnFfYmFsYW5jZV9zZXQoY2hhciAqc3RyKSB7IHJldHVybiAwOyB9CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19BQ1BJX1NMRUVQCisKKy8qIHJvdXRpbmVzIGZvciBzYXZpbmcvcmVzdG9yaW5nIGtlcm5lbCBzdGF0ZSAqLworZXh0ZXJuIGludCBhY3BpX3NhdmVfc3RhdGVfbWVtKHZvaWQpOworZXh0ZXJuIHZvaWQgYWNwaV9yZXN0b3JlX3N0YXRlX21lbSh2b2lkKTsKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgYWNwaV93YWtldXBfYWRkcmVzczsKKworLyogZWFybHkgaW5pdGlhbGl6YXRpb24gcm91dGluZSAqLworZXh0ZXJuIHZvaWQgYWNwaV9yZXNlcnZlX2Jvb3RtZW0odm9pZCk7CisKKyNlbmRpZiAvKkNPTkZJR19BQ1BJX1NMRUVQKi8KKworI2RlZmluZSBib290X2NwdV9waHlzaWNhbF9hcGljaWQgYm9vdF9jcHVfaWQKKworZXh0ZXJuIGludCBhY3BpX2Rpc2FibGVkOworZXh0ZXJuIGludCBhY3BpX3BjaV9kaXNhYmxlZDsKKworZXh0ZXJuIHU4IHg4Nl9hY3BpaWRfdG9fYXBpY2lkW107CisKK2V4dGVybiBpbnQgYWNwaV9za2lwX3RpbWVyX292ZXJyaWRlOworCisjZW5kaWYgLypfX0tFUk5FTF9fKi8KKworI2VuZGlmIC8qX0FTTV9BQ1BJX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2FncC5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2FncC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiYjkwMTkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvYWdwLmgKQEAgLTAsMCArMSwyMiBAQAorI2lmbmRlZiBBR1BfSAorI2RlZmluZSBBR1BfSCAxCisKKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorCisvKiAKKyAqIEZ1bmN0aW9ucyB0byBrZWVwIHRoZSBhZ3BnYXJ0IG1hcHBpbmdzIGNvaGVyZW50LgorICogVGhlIEdBUlQgZ2l2ZXMgdGhlIENQVSBhIHBoeXNpY2FsIGFsaWFzIG9mIG1lbW9yeS4gVGhlIGFsaWFzIGlzCisgKiBtYXBwZWQgdW5jYWNoZWFibGUuIE1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gY29uZmxpY3RpbmcgbWFwcGluZ3MKKyAqIHdpdGggZGlmZmVyZW50IGNhY2hhYmlsaXR5IGF0dHJpYnV0ZXMgZm9yIHRoZSBzYW1lIHBhZ2UuCisgKi8KKworaW50IG1hcF9wYWdlX2ludG9fYWdwKHN0cnVjdCBwYWdlICpwYWdlKTsKK2ludCB1bm1hcF9wYWdlX2Zyb21fYWdwKHN0cnVjdCBwYWdlICpwYWdlKTsKKyNkZWZpbmUgZmx1c2hfYWdwX21hcHBpbmdzKCkgZ2xvYmFsX2ZsdXNoX3RsYigpCisKKy8qIENvdWxkIHVzZSBDTEZMVVNIIGhlcmUgaWYgdGhlIGNwdSBzdXBwb3J0cyBpdC4gQnV0IHRoZW4gaXQgd291bGQKKyAgIG5lZWQgdG8gYmUgY2FsbGVkIGZvciBlYWNoIGNhY2hlbGluZSBvZiB0aGUgd2hvbGUgcGFnZSBzbyBpdCBtYXkgbm90IGJlIAorICAgd29ydGggaXQuIFdvdWxkIG5lZWQgYSBwYWdlIGZvciBpdC4gKi8KKyNkZWZpbmUgZmx1c2hfYWdwX2NhY2hlKCkgYXNtIHZvbGF0aWxlKCJ3YmludmQiOjo6Im1lbW9yeSIpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2FwaWMuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9hcGljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzAyNWNjMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9hcGljLmgKQEAgLTAsMCArMSwxMTggQEAKKyNpZm5kZWYgX19BU01fQVBJQ19ICisjZGVmaW5lIF9fQVNNX0FQSUNfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxhc20vZml4bWFwLmg+CisjaW5jbHVkZSA8YXNtL2FwaWNkZWYuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisKKyNkZWZpbmUgRHByaW50ayh4Li4uKQorCisvKgorICogRGVidWdnaW5nIG1hY3JvcworICovCisjZGVmaW5lIEFQSUNfUVVJRVQgICAwCisjZGVmaW5lIEFQSUNfVkVSQk9TRSAxCisjZGVmaW5lIEFQSUNfREVCVUcgICAyCisKK2V4dGVybiBpbnQgYXBpY192ZXJib3NpdHk7CisKKy8qCisgKiBEZWZpbmUgdGhlIGRlZmF1bHQgbGV2ZWwgb2Ygb3V0cHV0IHRvIGJlIHZlcnkgbGl0dGxlCisgKiBUaGlzIGNhbiBiZSB0dXJuZWQgdXAgYnkgdXNpbmcgYXBpYz12ZXJib3NlIGZvciBtb3JlCisgKiBpbmZvcm1hdGlvbiBhbmQgYXBpYz1kZWJ1ZyBmb3IgX2xvdHNfIG9mIGluZm9ybWF0aW9uLgorICogYXBpY192ZXJib3NpdHkgaXMgZGVmaW5lZCBpbiBhcGljLmMKKyAqLworI2RlZmluZSBhcGljX3ByaW50ayh2LCBzLCBhLi4uKSBkbyB7ICAgICAgIFwKKwkJaWYgKCh2KSA8PSBhcGljX3ZlcmJvc2l0eSkgXAorCQkJcHJpbnRrKHMsICMjYSk7ICAgIFwKKwl9IHdoaWxlICgwKQorCisjaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCisKK3N0cnVjdCBwdF9yZWdzOworCisvKgorICogQmFzaWMgZnVuY3Rpb25zIGFjY2Vzc2luZyBBUElDcy4KKyAqLworCitzdGF0aWMgX19pbmxpbmUgdm9pZCBhcGljX3dyaXRlKHVuc2lnbmVkIGxvbmcgcmVnLCB1bnNpZ25lZCBpbnQgdikKK3sKKwkqKCh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikoQVBJQ19CQVNFK3JlZykpID0gdjsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQgYXBpY193cml0ZV9hdG9taWModW5zaWduZWQgbG9uZyByZWcsIHVuc2lnbmVkIGludCB2KQoreworCXhjaGcoKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKShBUElDX0JBU0UrcmVnKSwgdik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBpbnQgYXBpY19yZWFkKHVuc2lnbmVkIGxvbmcgcmVnKQoreworCXJldHVybiAqKCh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikoQVBJQ19CQVNFK3JlZykpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGFwaWNfd2FpdF9pY3JfaWRsZSh2b2lkKQoreworCXdoaWxlICggYXBpY19yZWFkKCBBUElDX0lDUiApICYgQVBJQ19JQ1JfQlVTWSApOworfQorCisjZGVmaW5lIEZPUkNFX1JFQURfQVJPVU5EX1dSSVRFIDAKKyNkZWZpbmUgYXBpY19yZWFkX2Fyb3VuZCh4KQorI2RlZmluZSBhcGljX3dyaXRlX2Fyb3VuZCh4LHkpIGFwaWNfd3JpdGUoKHgpLCh5KSkKKworc3RhdGljIGlubGluZSB2b2lkIGFja19BUElDX2lycSh2b2lkKQoreworCS8qCisJICogYWNrX0FQSUNfaXJxKCkgYWN0dWFsbHkgZ2V0cyBjb21waWxlZCBhcyBhIHNpbmdsZSBpbnN0cnVjdGlvbjoKKwkgKiAtIGEgc2luZ2xlIHJtdyBvbiBQZW50aXVtLzgyNDg5RFgKKwkgKiAtIGEgc2luZ2xlIHdyaXRlIG9uIFA2KyBjb3JlcyAoQ09ORklHX1g4Nl9HT09EX0FQSUMpCisJICogLi4uIHl1bW1pZS4KKwkgKi8KKworCS8qIERvY3Mgc2F5IHVzZSAwIGZvciBmdXR1cmUgY29tcGF0aWJpbGl0eSAqLworCWFwaWNfd3JpdGVfYXJvdW5kKEFQSUNfRU9JLCAwKTsKK30KKworZXh0ZXJuIGludCBnZXRfbWF4bHZ0ICh2b2lkKTsKK2V4dGVybiB2b2lkIGNsZWFyX2xvY2FsX0FQSUMgKHZvaWQpOworZXh0ZXJuIHZvaWQgY29ubmVjdF9ic3BfQVBJQyAodm9pZCk7CitleHRlcm4gdm9pZCBkaXNjb25uZWN0X2JzcF9BUElDICh2b2lkKTsKK2V4dGVybiB2b2lkIGRpc2FibGVfbG9jYWxfQVBJQyAodm9pZCk7CitleHRlcm4gaW50IHZlcmlmeV9sb2NhbF9BUElDICh2b2lkKTsKK2V4dGVybiB2b2lkIGNhY2hlX0FQSUNfcmVnaXN0ZXJzICh2b2lkKTsKK2V4dGVybiB2b2lkIHN5bmNfQXJiX0lEcyAodm9pZCk7CitleHRlcm4gdm9pZCBpbml0X2JzcF9BUElDICh2b2lkKTsKK2V4dGVybiB2b2lkIHNldHVwX2xvY2FsX0FQSUMgKHZvaWQpOworZXh0ZXJuIHZvaWQgaW5pdF9hcGljX21hcHBpbmdzICh2b2lkKTsKK2V4dGVybiB2b2lkIHNtcF9sb2NhbF90aW1lcl9pbnRlcnJ1cHQgKHN0cnVjdCBwdF9yZWdzICogcmVncyk7CitleHRlcm4gdm9pZCBzZXR1cF9ib290X0FQSUNfY2xvY2sgKHZvaWQpOworZXh0ZXJuIHZvaWQgc2V0dXBfc2Vjb25kYXJ5X0FQSUNfY2xvY2sgKHZvaWQpOworZXh0ZXJuIHZvaWQgc2V0dXBfYXBpY19ubWlfd2F0Y2hkb2cgKHZvaWQpOworZXh0ZXJuIGludCByZXNlcnZlX2xhcGljX25taSh2b2lkKTsKK2V4dGVybiB2b2lkIHJlbGVhc2VfbGFwaWNfbm1pKHZvaWQpOworZXh0ZXJuIHZvaWQgZGlzYWJsZV90aW1lcl9ubWlfd2F0Y2hkb2codm9pZCk7CitleHRlcm4gdm9pZCBlbmFibGVfdGltZXJfbm1pX3dhdGNoZG9nKHZvaWQpOworZXh0ZXJuIHZvaWQgbm1pX3dhdGNoZG9nX3RpY2sgKHN0cnVjdCBwdF9yZWdzICogcmVncywgdW5zaWduZWQgcmVhc29uKTsKK2V4dGVybiBpbnQgQVBJQ19pbml0X3VuaXByb2Nlc3NvciAodm9pZCk7CitleHRlcm4gdm9pZCBkaXNhYmxlX0FQSUNfdGltZXIodm9pZCk7CitleHRlcm4gdm9pZCBlbmFibGVfQVBJQ190aW1lcih2b2lkKTsKK2V4dGVybiB2b2lkIGNsdXN0ZXJlZF9hcGljX2NoZWNrKHZvaWQpOworCitleHRlcm4gaW50IGNoZWNrX25taV93YXRjaGRvZyh2b2lkKTsKK2V4dGVybiB2b2lkIG5taV93YXRjaGRvZ19kZWZhdWx0KHZvaWQpOworZXh0ZXJuIGludCBzZXR1cF9ubWlfd2F0Y2hkb2coY2hhciAqKTsKKworZXh0ZXJuIHVuc2lnbmVkIGludCBubWlfd2F0Y2hkb2c7CisjZGVmaW5lIE5NSV9ERUZBVUxUCS0xCisjZGVmaW5lIE5NSV9OT05FCTAKKyNkZWZpbmUgTk1JX0lPX0FQSUMJMQorI2RlZmluZSBOTUlfTE9DQUxfQVBJQwkyCisjZGVmaW5lIE5NSV9JTlZBTElECTMKKworI2VuZGlmIC8qIENPTkZJR19YODZfTE9DQUxfQVBJQyAqLworCisjZGVmaW5lIGVzcl9kaXNhYmxlIDAKK2V4dGVybiB1bnNpZ25lZCBib290X2NwdV9pZDsKKworI2VuZGlmIC8qIF9fQVNNX0FQSUNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2FwaWNkZWYuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9hcGljZGVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q3NjI3ZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9hcGljZGVmLmgKQEAgLTAsMCArMSwzOTEgQEAKKyNpZm5kZWYgX19BU01fQVBJQ0RFRl9ICisjZGVmaW5lIF9fQVNNX0FQSUNERUZfSAorCisvKgorICogQ29uc3RhbnRzIGZvciB2YXJpb3VzIEludGVsIEFQSUNzLiAobG9jYWwgQVBJQywgSU9BUElDLCBldGMuKQorICoKKyAqIEFsYW4gQ294IDxBbGFuLkNveEBsaW51eC5vcmc+LCAxOTk1LgorICogSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+LCAxOTk5LCAyMDAwCisgKi8KKworI2RlZmluZQkJQVBJQ19ERUZBVUxUX1BIWVNfQkFTRQkweGZlZTAwMDAwCisgCisjZGVmaW5lCQlBUElDX0lECQkweDIwCisjZGVmaW5lCQkJQVBJQ19JRF9NQVNLCQkoMHhGRnU8PDI0KQorI2RlZmluZQkJCUdFVF9BUElDX0lEKHgpCQkoKCh4KT4+MjQpJjB4RkZ1KQorI2RlZmluZQkJQVBJQ19MVlIJMHgzMAorI2RlZmluZQkJCUFQSUNfTFZSX01BU0sJCTB4RkYwMEZGCisjZGVmaW5lCQkJR0VUX0FQSUNfVkVSU0lPTih4KQkoKHgpJjB4RkZ1KQorI2RlZmluZQkJCUdFVF9BUElDX01BWExWVCh4KQkoKCh4KT4+MTYpJjB4RkZ1KQorI2RlZmluZQkJCUFQSUNfSU5URUdSQVRFRCh4KQkoKHgpJjB4RjB1KQorI2RlZmluZQkJQVBJQ19UQVNLUFJJCTB4ODAKKyNkZWZpbmUJCQlBUElDX1RQUklfTUFTSwkJMHhGRnUKKyNkZWZpbmUJCUFQSUNfQVJCUFJJCTB4OTAKKyNkZWZpbmUJCQlBUElDX0FSQlBSSV9NQVNLCTB4RkZ1CisjZGVmaW5lCQlBUElDX1BST0NQUkkJMHhBMAorI2RlZmluZQkJQVBJQ19FT0kJMHhCMAorI2RlZmluZQkJCUFQSUNfRUlPX0FDSwkJMHgwCQkvKiBXcml0ZSB0aGlzIHRvIHRoZSBFT0kgcmVnaXN0ZXIgKi8KKyNkZWZpbmUJCUFQSUNfUlJSCTB4QzAKKyNkZWZpbmUJCUFQSUNfTERSCTB4RDAKKyNkZWZpbmUJCQlBUElDX0xEUl9NQVNLCQkoMHhGRnU8PDI0KQorI2RlZmluZQkJCUdFVF9BUElDX0xPR0lDQUxfSUQoeCkJKCgoeCk+PjI0KSYweEZGdSkKKyNkZWZpbmUJCQlTRVRfQVBJQ19MT0dJQ0FMX0lEKHgpCSgoKHgpPDwyNCkpCisjZGVmaW5lCQkJQVBJQ19BTExfQ1BVUwkJMHhGRnUKKyNkZWZpbmUJCUFQSUNfREZSCTB4RTAKKyNkZWZpbmUJCQlBUElDX0RGUl9DTFVTVEVSCQkweDBGRkZGRkZGdWwKKyNkZWZpbmUJCQlBUElDX0RGUl9GTEFUCQkJMHhGRkZGRkZGRnVsCisjZGVmaW5lCQlBUElDX1NQSVYJMHhGMAorI2RlZmluZQkJCUFQSUNfU1BJVl9GT0NVU19ESVNBQkxFRAkoMTw8OSkKKyNkZWZpbmUJCQlBUElDX1NQSVZfQVBJQ19FTkFCTEVECQkoMTw8OCkKKyNkZWZpbmUJCUFQSUNfSVNSCTB4MTAwCisjZGVmaW5lCQlBUElDX1RNUgkweDE4MAorI2RlZmluZSAJQVBJQ19JUlIJMHgyMDAKKyNkZWZpbmUgCUFQSUNfRVNSCTB4MjgwCisjZGVmaW5lCQkJQVBJQ19FU1JfU0VORF9DUwkweDAwMDAxCisjZGVmaW5lCQkJQVBJQ19FU1JfUkVDVl9DUwkweDAwMDAyCisjZGVmaW5lCQkJQVBJQ19FU1JfU0VORF9BQ0MJMHgwMDAwNAorI2RlZmluZQkJCUFQSUNfRVNSX1JFQ1ZfQUNDCTB4MDAwMDgKKyNkZWZpbmUJCQlBUElDX0VTUl9TRU5ESUxMCTB4MDAwMjAKKyNkZWZpbmUJCQlBUElDX0VTUl9SRUNWSUxMCTB4MDAwNDAKKyNkZWZpbmUJCQlBUElDX0VTUl9JTExSRUdBCTB4MDAwODAKKyNkZWZpbmUJCUFQSUNfSUNSCTB4MzAwCisjZGVmaW5lCQkJQVBJQ19ERVNUX1NFTEYJCTB4NDAwMDAKKyNkZWZpbmUJCQlBUElDX0RFU1RfQUxMSU5DCTB4ODAwMDAKKyNkZWZpbmUJCQlBUElDX0RFU1RfQUxMQlVUCTB4QzAwMDAKKyNkZWZpbmUJCQlBUElDX0lDUl9SUl9NQVNLCTB4MzAwMDAKKyNkZWZpbmUJCQlBUElDX0lDUl9SUl9JTlZBTElECTB4MDAwMDAKKyNkZWZpbmUJCQlBUElDX0lDUl9SUl9JTlBST0cJMHgxMDAwMAorI2RlZmluZQkJCUFQSUNfSUNSX1JSX1ZBTElECTB4MjAwMDAKKyNkZWZpbmUJCQlBUElDX0lOVF9MRVZFTFRSSUcJMHgwODAwMAorI2RlZmluZQkJCUFQSUNfSU5UX0FTU0VSVAkJMHgwNDAwMAorI2RlZmluZQkJCUFQSUNfSUNSX0JVU1kJCTB4MDEwMDAKKyNkZWZpbmUJCQlBUElDX0RFU1RfTE9HSUNBTAkweDAwODAwCisjZGVmaW5lCQkJQVBJQ19ERVNUX1BIWVNJQ0FMCTB4MDAwMDAKKyNkZWZpbmUJCQlBUElDX0RNX0ZJWEVECQkweDAwMDAwCisjZGVmaW5lCQkJQVBJQ19ETV9MT1dFU1QJCTB4MDAxMDAKKyNkZWZpbmUJCQlBUElDX0RNX1NNSQkJMHgwMDIwMAorI2RlZmluZQkJCUFQSUNfRE1fUkVNUkQJCTB4MDAzMDAKKyNkZWZpbmUJCQlBUElDX0RNX05NSQkJMHgwMDQwMAorI2RlZmluZQkJCUFQSUNfRE1fSU5JVAkJMHgwMDUwMAorI2RlZmluZQkJCUFQSUNfRE1fU1RBUlRVUAkJMHgwMDYwMAorI2RlZmluZQkJCUFQSUNfRE1fRVhUSU5UCQkweDAwNzAwCisjZGVmaW5lCQkJQVBJQ19WRUNUT1JfTUFTSwkweDAwMEZGCisjZGVmaW5lCQlBUElDX0lDUjIJMHgzMTAKKyNkZWZpbmUJCQlHRVRfQVBJQ19ERVNUX0ZJRUxEKHgpCSgoKHgpPj4yNCkmMHhGRikKKyNkZWZpbmUJCQlTRVRfQVBJQ19ERVNUX0ZJRUxEKHgpCSgoeCk8PDI0KQorI2RlZmluZQkJQVBJQ19MVlRUCTB4MzIwCisjZGVmaW5lCQlBUElDX0xWVFRITVIJMHgzMzAKKyNkZWZpbmUJCUFQSUNfTFZUUEMJMHgzNDAKKyNkZWZpbmUJCUFQSUNfTFZUMAkweDM1MAorI2RlZmluZQkJCUFQSUNfTFZUX1RJTUVSX0JBU0VfTUFTSwkoMHgzPDwxOCkKKyNkZWZpbmUJCQlHRVRfQVBJQ19USU1FUl9CQVNFKHgpCQkoKCh4KT4+MTgpJjB4MykKKyNkZWZpbmUJCQlTRVRfQVBJQ19USU1FUl9CQVNFKHgpCQkoKCh4KTw8MTgpKQorI2RlZmluZQkJCUFQSUNfVElNRVJfQkFTRV9DTEtJTgkJMHgwCisjZGVmaW5lCQkJQVBJQ19USU1FUl9CQVNFX1RNQkFTRQkJMHgxCisjZGVmaW5lCQkJQVBJQ19USU1FUl9CQVNFX0RJVgkJMHgyCisjZGVmaW5lCQkJQVBJQ19MVlRfVElNRVJfUEVSSU9ESUMJCSgxPDwxNykKKyNkZWZpbmUJCQlBUElDX0xWVF9NQVNLRUQJCQkoMTw8MTYpCisjZGVmaW5lCQkJQVBJQ19MVlRfTEVWRUxfVFJJR0dFUgkJKDE8PDE1KQorI2RlZmluZQkJCUFQSUNfTFZUX1JFTU9URV9JUlIJCSgxPDwxNCkKKyNkZWZpbmUJCQlBUElDX0lOUFVUX1BPTEFSSVRZCQkoMTw8MTMpCisjZGVmaW5lCQkJQVBJQ19TRU5EX1BFTkRJTkcJCSgxPDwxMikKKyNkZWZpbmUJCQlBUElDX01PREVfTUFTSwkJCTB4NzAwCisjZGVmaW5lCQkJR0VUX0FQSUNfREVMSVZFUllfTU9ERSh4KQkoKCh4KT4+OCkmMHg3KQorI2RlZmluZQkJCVNFVF9BUElDX0RFTElWRVJZX01PREUoeCx5KQkoKCh4KSZ+MHg3MDApfCgoeSk8PDgpKQorI2RlZmluZQkJCQlBUElDX01PREVfRklYRUQJCTB4MAorI2RlZmluZQkJCQlBUElDX01PREVfTk1JCQkweDQKKyNkZWZpbmUJCQkJQVBJQ19NT0RFX0VYSU5UCQkweDcKKyNkZWZpbmUgCUFQSUNfTFZUMQkweDM2MAorI2RlZmluZQkJQVBJQ19MVlRFUlIJMHgzNzAKKyNkZWZpbmUJCUFQSUNfVE1JQ1QJMHgzODAKKyNkZWZpbmUJCUFQSUNfVE1DQ1QJMHgzOTAKKyNkZWZpbmUJCUFQSUNfVERDUgkweDNFMAorI2RlZmluZQkJCUFQSUNfVERSX0RJVl9UTUJBU0UJKDE8PDIpCisjZGVmaW5lCQkJQVBJQ19URFJfRElWXzEJCTB4QgorI2RlZmluZQkJCUFQSUNfVERSX0RJVl8yCQkweDAKKyNkZWZpbmUJCQlBUElDX1REUl9ESVZfNAkJMHgxCisjZGVmaW5lCQkJQVBJQ19URFJfRElWXzgJCTB4MgorI2RlZmluZQkJCUFQSUNfVERSX0RJVl8xNgkJMHgzCisjZGVmaW5lCQkJQVBJQ19URFJfRElWXzMyCQkweDgKKyNkZWZpbmUJCQlBUElDX1REUl9ESVZfNjQJCTB4OQorI2RlZmluZQkJCUFQSUNfVERSX0RJVl8xMjgJMHhBCisKKyNkZWZpbmUgQVBJQ19CQVNFIChmaXhfdG9fdmlydChGSVhfQVBJQ19CQVNFKSkKKworI2RlZmluZSBNQVhfSU9fQVBJQ1MgMzIKKworLyoKKyAqIEFsbCB4ODYtNjQgc3lzdGVtcyBhcmUgeEFQSUMgY29tcGF0aWJsZS4KKyAqIEluIHRoZSBmb2xsb3dpbmcsICJhcGljaWQiIGlzIGEgcGh5c2ljYWwgQVBJQyBJRC4KKyAqLworI2RlZmluZSBYQVBJQ19ERVNUX0NQVVNfU0hJRlQJNAorI2RlZmluZSBYQVBJQ19ERVNUX0NQVVNfTUFTSwkoKDF1IDw8IFhBUElDX0RFU1RfQ1BVU19TSElGVCkgLSAxKQorI2RlZmluZSBYQVBJQ19ERVNUX0NMVVNURVJfTUFTSwkoWEFQSUNfREVTVF9DUFVTX01BU0sgPDwgWEFQSUNfREVTVF9DUFVTX1NISUZUKQorI2RlZmluZSBBUElDX0NMVVNURVIoYXBpY2lkKQkoKGFwaWNpZCkgJiBYQVBJQ19ERVNUX0NMVVNURVJfTUFTSykKKyNkZWZpbmUgQVBJQ19DTFVTVEVSSUQoYXBpY2lkKQkoQVBJQ19DTFVTVEVSKGFwaWNpZCkgPj4gWEFQSUNfREVTVF9DUFVTX1NISUZUKQorI2RlZmluZSBBUElDX0NQVUlEKGFwaWNpZCkJKChhcGljaWQpICYgWEFQSUNfREVTVF9DUFVTX01BU0spCisjZGVmaW5lIE5VTV9BUElDX0NMVVNURVJTCSgoQkFEX0FQSUNJRCArIDEpID4+IFhBUElDX0RFU1RfQ1BVU19TSElGVCkKKworLyoKKyAqIHRoZSBsb2NhbCBBUElDIHJlZ2lzdGVyIHN0cnVjdHVyZSwgbWVtb3J5IG1hcHBlZC4gTm90IHRlcnJpYmx5IHdlbGwKKyAqIHRlc3RlZCwgYnV0IHdlIG1pZ2h0IGV2ZW50dWFsbHkgdXNlIHRoaXMgb25lIGluIHRoZSBmdXR1cmUgLSB0aGUKKyAqIHByb2JsZW0gd2h5IHdlIGNhbm5vdCB1c2UgaXQgcmlnaHQgbm93IGlzIHRoZSBQNSBBUElDLCBpdCBoYXMgYW4KKyAqIGVycmF0YSB3aGljaCBjYW5ub3QgdGFrZSA4LWJpdCByZWFkcyBhbmQgd3JpdGVzLCBvbmx5IDMyLWJpdCBvbmVzIC4uLgorICovCisjZGVmaW5lIHUzMiB1bnNpZ25lZCBpbnQKKworI2RlZmluZSBsYXBpYyAoKHZvbGF0aWxlIHN0cnVjdCBsb2NhbF9hcGljICopQVBJQ19CQVNFKQorCitzdHJ1Y3QgbG9jYWxfYXBpYyB7CisKKy8qMDAwKi8Jc3RydWN0IHsgdTMyIF9fcmVzZXJ2ZWRbNF07IH0gX19yZXNlcnZlZF8wMTsKKworLyowMTAqLwlzdHJ1Y3QgeyB1MzIgX19yZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzAyOworCisvKjAyMCovCXN0cnVjdCB7IC8qIEFQSUMgSUQgUmVnaXN0ZXIgKi8KKwkJdTMyICAgX19yZXNlcnZlZF8xCTogMjQsCisJCQlwaHlzX2FwaWNfaWQJOiAgNCwKKwkJCV9fcmVzZXJ2ZWRfMgk6ICA0OworCQl1MzIgX19yZXNlcnZlZFszXTsKKwl9IGlkOworCisvKjAzMCovCWNvbnN0CisJc3RydWN0IHsgLyogQVBJQyBWZXJzaW9uIFJlZ2lzdGVyICovCisJCXUzMiAgIHZlcnNpb24JCTogIDgsCisJCQlfX3Jlc2VydmVkXzEJOiAgOCwKKwkJCW1heF9sdnQJCTogIDgsCisJCQlfX3Jlc2VydmVkXzIJOiAgODsKKwkJdTMyIF9fcmVzZXJ2ZWRbM107CisJfSB2ZXJzaW9uOworCisvKjA0MCovCXN0cnVjdCB7IHUzMiBfX3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2ZWRfMDM7CisKKy8qMDUwKi8Jc3RydWN0IHsgdTMyIF9fcmVzZXJ2ZWRbNF07IH0gX19yZXNlcnZlZF8wNDsKKworLyowNjAqLwlzdHJ1Y3QgeyB1MzIgX19yZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzA1OworCisvKjA3MCovCXN0cnVjdCB7IHUzMiBfX3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2ZWRfMDY7CisKKy8qMDgwKi8Jc3RydWN0IHsgLyogVGFzayBQcmlvcml0eSBSZWdpc3RlciAqLworCQl1MzIgICBwcmlvcml0eQk6ICA4LAorCQkJX19yZXNlcnZlZF8xCTogMjQ7CisJCXUzMiBfX3Jlc2VydmVkXzJbM107CisJfSB0cHI7CisKKy8qMDkwKi8JY29uc3QKKwlzdHJ1Y3QgeyAvKiBBcmJpdHJhdGlvbiBQcmlvcml0eSBSZWdpc3RlciAqLworCQl1MzIgICBwcmlvcml0eQk6ICA4LAorCQkJX19yZXNlcnZlZF8xCTogMjQ7CisJCXUzMiBfX3Jlc2VydmVkXzJbM107CisJfSBhcHI7CisKKy8qMEEwKi8JY29uc3QKKwlzdHJ1Y3QgeyAvKiBQcm9jZXNzb3IgUHJpb3JpdHkgUmVnaXN0ZXIgKi8KKwkJdTMyICAgcHJpb3JpdHkJOiAgOCwKKwkJCV9fcmVzZXJ2ZWRfMQk6IDI0OworCQl1MzIgX19yZXNlcnZlZF8yWzNdOworCX0gcHByOworCisvKjBCMCovCXN0cnVjdCB7IC8qIEVuZCBPZiBJbnRlcnJ1cHQgUmVnaXN0ZXIgKi8KKwkJdTMyICAgZW9pOworCQl1MzIgX19yZXNlcnZlZFszXTsKKwl9IGVvaTsKKworLyowQzAqLwlzdHJ1Y3QgeyB1MzIgX19yZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzA3OworCisvKjBEMCovCXN0cnVjdCB7IC8qIExvZ2ljYWwgRGVzdGluYXRpb24gUmVnaXN0ZXIgKi8KKwkJdTMyICAgX19yZXNlcnZlZF8xCTogMjQsCisJCQlsb2dpY2FsX2Rlc3QJOiAgODsKKwkJdTMyIF9fcmVzZXJ2ZWRfMlszXTsKKwl9IGxkcjsKKworLyowRTAqLwlzdHJ1Y3QgeyAvKiBEZXN0aW5hdGlvbiBGb3JtYXQgUmVnaXN0ZXIgKi8KKwkJdTMyICAgX19yZXNlcnZlZF8xCTogMjgsCisJCQltb2RlbAkJOiAgNDsKKwkJdTMyIF9fcmVzZXJ2ZWRfMlszXTsKKwl9IGRmcjsKKworLyowRjAqLwlzdHJ1Y3QgeyAvKiBTcHVyaW91cyBJbnRlcnJ1cHQgVmVjdG9yIFJlZ2lzdGVyICovCisJCXUzMglzcHVyaW91c192ZWN0b3IJOiAgOCwKKwkJCWFwaWNfZW5hYmxlZAk6ICAxLAorCQkJZm9jdXNfY3B1CTogIDEsCisJCQlfX3Jlc2VydmVkXzIJOiAyMjsKKwkJdTMyIF9fcmVzZXJ2ZWRfM1szXTsKKwl9IHN2cjsKKworLyoxMDAqLwlzdHJ1Y3QgeyAvKiBJbiBTZXJ2aWNlIFJlZ2lzdGVyICovCisvKjE3MCovCQl1MzIgYml0ZmllbGQ7CisJCXUzMiBfX3Jlc2VydmVkWzNdOworCX0gaXNyIFs4XTsKKworLyoxODAqLwlzdHJ1Y3QgeyAvKiBUcmlnZ2VyIE1vZGUgUmVnaXN0ZXIgKi8KKy8qMUYwKi8JCXUzMiBiaXRmaWVsZDsKKwkJdTMyIF9fcmVzZXJ2ZWRbM107CisJfSB0bXIgWzhdOworCisvKjIwMCovCXN0cnVjdCB7IC8qIEludGVycnVwdCBSZXF1ZXN0IFJlZ2lzdGVyICovCisvKjI3MCovCQl1MzIgYml0ZmllbGQ7CisJCXUzMiBfX3Jlc2VydmVkWzNdOworCX0gaXJyIFs4XTsKKworLyoyODAqLwl1bmlvbiB7IC8qIEVycm9yIFN0YXR1cyBSZWdpc3RlciAqLworCQlzdHJ1Y3QgeworCQkJdTMyICAgc2VuZF9jc19lcnJvcgkJCTogIDEsCisJCQkJcmVjZWl2ZV9jc19lcnJvcgkJOiAgMSwKKwkJCQlzZW5kX2FjY2VwdF9lcnJvcgkJOiAgMSwKKwkJCQlyZWNlaXZlX2FjY2VwdF9lcnJvcgkJOiAgMSwKKwkJCQlfX3Jlc2VydmVkXzEJCQk6ICAxLAorCQkJCXNlbmRfaWxsZWdhbF92ZWN0b3IJCTogIDEsCisJCQkJcmVjZWl2ZV9pbGxlZ2FsX3ZlY3RvcgkJOiAgMSwKKwkJCQlpbGxlZ2FsX3JlZ2lzdGVyX2FkZHJlc3MJOiAgMSwKKwkJCQlfX3Jlc2VydmVkXzIJCQk6IDI0OworCQkJdTMyIF9fcmVzZXJ2ZWRfM1szXTsKKwkJfSBlcnJvcl9iaXRzOworCQlzdHJ1Y3QgeworCQkJdTMyIGVycm9yczsKKwkJCXUzMiBfX3Jlc2VydmVkXzNbM107CisJCX0gYWxsX2Vycm9yczsKKwl9IGVzcjsKKworLyoyOTAqLwlzdHJ1Y3QgeyB1MzIgX19yZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzA4OworCisvKjJBMCovCXN0cnVjdCB7IHUzMiBfX3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2ZWRfMDk7CisKKy8qMkIwKi8Jc3RydWN0IHsgdTMyIF9fcmVzZXJ2ZWRbNF07IH0gX19yZXNlcnZlZF8xMDsKKworLyoyQzAqLwlzdHJ1Y3QgeyB1MzIgX19yZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzExOworCisvKjJEMCovCXN0cnVjdCB7IHUzMiBfX3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2ZWRfMTI7CisKKy8qMkUwKi8Jc3RydWN0IHsgdTMyIF9fcmVzZXJ2ZWRbNF07IH0gX19yZXNlcnZlZF8xMzsKKworLyoyRjAqLwlzdHJ1Y3QgeyB1MzIgX19yZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzE0OworCisvKjMwMCovCXN0cnVjdCB7IC8qIEludGVycnVwdCBDb21tYW5kIFJlZ2lzdGVyIDEgKi8KKwkJdTMyICAgdmVjdG9yCQkJOiAgOCwKKwkJCWRlbGl2ZXJ5X21vZGUJCTogIDMsCisJCQlkZXN0aW5hdGlvbl9tb2RlCTogIDEsCisJCQlkZWxpdmVyeV9zdGF0dXMJCTogIDEsCisJCQlfX3Jlc2VydmVkXzEJCTogIDEsCisJCQlsZXZlbAkJCTogIDEsCisJCQl0cmlnZ2VyCQkJOiAgMSwKKwkJCV9fcmVzZXJ2ZWRfMgkJOiAgMiwKKwkJCXNob3J0aGFuZAkJOiAgMiwKKwkJCV9fcmVzZXJ2ZWRfMwkJOiAgMTI7CisJCXUzMiBfX3Jlc2VydmVkXzRbM107CisJfSBpY3IxOworCisvKjMxMCovCXN0cnVjdCB7IC8qIEludGVycnVwdCBDb21tYW5kIFJlZ2lzdGVyIDIgKi8KKwkJdW5pb24geworCQkJdTMyICAgX19yZXNlcnZlZF8xCTogMjQsCisJCQkJcGh5c19kZXN0CTogIDQsCisJCQkJX19yZXNlcnZlZF8yCTogIDQ7CisJCQl1MzIgICBfX3Jlc2VydmVkXzMJOiAyNCwKKwkJCQlsb2dpY2FsX2Rlc3QJOiAgODsKKwkJfSBkZXN0OworCQl1MzIgX19yZXNlcnZlZF80WzNdOworCX0gaWNyMjsKKworLyozMjAqLwlzdHJ1Y3QgeyAvKiBMVlQgLSBUaW1lciAqLworCQl1MzIgICB2ZWN0b3IJCTogIDgsCisJCQlfX3Jlc2VydmVkXzEJOiAgNCwKKwkJCWRlbGl2ZXJ5X3N0YXR1cwk6ICAxLAorCQkJX19yZXNlcnZlZF8yCTogIDMsCisJCQltYXNrCQk6ICAxLAorCQkJdGltZXJfbW9kZQk6ICAxLAorCQkJX19yZXNlcnZlZF8zCTogMTQ7CisJCXUzMiBfX3Jlc2VydmVkXzRbM107CisJfSBsdnRfdGltZXI7CisKKy8qMzMwKi8Jc3RydWN0IHsgLyogTFZUIC0gVGhlcm1hbCBTZW5zb3IgKi8KKwkJdTMyICB2ZWN0b3IJCTogIDgsCisJCQlkZWxpdmVyeV9tb2RlCTogIDMsCisJCQlfX3Jlc2VydmVkXzEJOiAgMSwKKwkJCWRlbGl2ZXJ5X3N0YXR1cwk6ICAxLAorCQkJX19yZXNlcnZlZF8yCTogIDMsCisJCQltYXNrCQk6ICAxLAorCQkJX19yZXNlcnZlZF8zCTogMTU7CisJCXUzMiBfX3Jlc2VydmVkXzRbM107CisJfSBsdnRfdGhlcm1hbDsKKworLyozNDAqLwlzdHJ1Y3QgeyAvKiBMVlQgLSBQZXJmb3JtYW5jZSBDb3VudGVyICovCisJCXUzMiAgIHZlY3RvcgkJOiAgOCwKKwkJCWRlbGl2ZXJ5X21vZGUJOiAgMywKKwkJCV9fcmVzZXJ2ZWRfMQk6ICAxLAorCQkJZGVsaXZlcnlfc3RhdHVzCTogIDEsCisJCQlfX3Jlc2VydmVkXzIJOiAgMywKKwkJCW1hc2sJCTogIDEsCisJCQlfX3Jlc2VydmVkXzMJOiAxNTsKKwkJdTMyIF9fcmVzZXJ2ZWRfNFszXTsKKwl9IGx2dF9wYzsKKworLyozNTAqLwlzdHJ1Y3QgeyAvKiBMVlQgLSBMSU5UMCAqLworCQl1MzIgICB2ZWN0b3IJCTogIDgsCisJCQlkZWxpdmVyeV9tb2RlCTogIDMsCisJCQlfX3Jlc2VydmVkXzEJOiAgMSwKKwkJCWRlbGl2ZXJ5X3N0YXR1cwk6ICAxLAorCQkJcG9sYXJpdHkJOiAgMSwKKwkJCXJlbW90ZV9pcnIJOiAgMSwKKwkJCXRyaWdnZXIJCTogIDEsCisJCQltYXNrCQk6ICAxLAorCQkJX19yZXNlcnZlZF8yCTogMTU7CisJCXUzMiBfX3Jlc2VydmVkXzNbM107CisJfSBsdnRfbGludDA7CisKKy8qMzYwKi8Jc3RydWN0IHsgLyogTFZUIC0gTElOVDEgKi8KKwkJdTMyICAgdmVjdG9yCQk6ICA4LAorCQkJZGVsaXZlcnlfbW9kZQk6ICAzLAorCQkJX19yZXNlcnZlZF8xCTogIDEsCisJCQlkZWxpdmVyeV9zdGF0dXMJOiAgMSwKKwkJCXBvbGFyaXR5CTogIDEsCisJCQlyZW1vdGVfaXJyCTogIDEsCisJCQl0cmlnZ2VyCQk6ICAxLAorCQkJbWFzawkJOiAgMSwKKwkJCV9fcmVzZXJ2ZWRfMgk6IDE1OworCQl1MzIgX19yZXNlcnZlZF8zWzNdOworCX0gbHZ0X2xpbnQxOworCisvKjM3MCovCXN0cnVjdCB7IC8qIExWVCAtIEVycm9yICovCisJCXUzMiAgIHZlY3RvcgkJOiAgOCwKKwkJCV9fcmVzZXJ2ZWRfMQk6ICA0LAorCQkJZGVsaXZlcnlfc3RhdHVzCTogIDEsCisJCQlfX3Jlc2VydmVkXzIJOiAgMywKKwkJCW1hc2sJCTogIDEsCisJCQlfX3Jlc2VydmVkXzMJOiAxNTsKKwkJdTMyIF9fcmVzZXJ2ZWRfNFszXTsKKwl9IGx2dF9lcnJvcjsKKworLyozODAqLwlzdHJ1Y3QgeyAvKiBUaW1lciBJbml0aWFsIENvdW50IFJlZ2lzdGVyICovCisJCXUzMiAgIGluaXRpYWxfY291bnQ7CisJCXUzMiBfX3Jlc2VydmVkXzJbM107CisJfSB0aW1lcl9pY3I7CisKKy8qMzkwKi8JY29uc3QKKwlzdHJ1Y3QgeyAvKiBUaW1lciBDdXJyZW50IENvdW50IFJlZ2lzdGVyICovCisJCXUzMiAgIGN1cnJfY291bnQ7CisJCXUzMiBfX3Jlc2VydmVkXzJbM107CisJfSB0aW1lcl9jY3I7CisKKy8qM0EwKi8Jc3RydWN0IHsgdTMyIF9fcmVzZXJ2ZWRbNF07IH0gX19yZXNlcnZlZF8xNjsKKworLyozQjAqLwlzdHJ1Y3QgeyB1MzIgX19yZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzE3OworCisvKjNDMCovCXN0cnVjdCB7IHUzMiBfX3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2ZWRfMTg7CisKKy8qM0QwKi8Jc3RydWN0IHsgdTMyIF9fcmVzZXJ2ZWRbNF07IH0gX19yZXNlcnZlZF8xOTsKKworLyozRTAqLwlzdHJ1Y3QgeyAvKiBUaW1lciBEaXZpZGUgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworCQl1MzIgICBkaXZpc29yCQk6ICA0LAorCQkJX19yZXNlcnZlZF8xCTogMjg7CisJCXUzMiBfX3Jlc2VydmVkXzJbM107CisJfSB0aW1lcl9kY3I7CisKKy8qM0YwKi8Jc3RydWN0IHsgdTMyIF9fcmVzZXJ2ZWRbNF07IH0gX19yZXNlcnZlZF8yMDsKKworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyN1bmRlZiB1MzIKKworI2RlZmluZSBCQURfQVBJQ0lEIDB4RkZ1CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2F0b21pYy5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2F0b21pYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjNGM1OTUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvYXRvbWljLmgKQEAgLTAsMCArMSwzODEgQEAKKyNpZm5kZWYgX19BUkNIX1g4Nl82NF9BVE9NSUNfXworI2RlZmluZSBfX0FSQ0hfWDg2XzY0X0FUT01JQ19fCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworLyogYXRvbWljX3Qgc2hvdWxkIGJlIDMyIGJpdCBzaWduZWQgdHlwZSAqLworCisvKgorICogQXRvbWljIG9wZXJhdGlvbnMgdGhhdCBDIGNhbid0IGd1YXJhbnRlZSB1cy4gIFVzZWZ1bCBmb3IKKyAqIHJlc291cmNlIGNvdW50aW5nIGV0Yy4uCisgKi8KKworI2lmZGVmIENPTkZJR19TTVAKKyNkZWZpbmUgTE9DSyAibG9jayA7ICIKKyNlbHNlCisjZGVmaW5lIExPQ0sgIiIKKyNlbmRpZgorCisvKgorICogTWFrZSBzdXJlIGdjYyBkb2Vzbid0IHRyeSB0byBiZSBjbGV2ZXIgYW5kIG1vdmUgdGhpbmdzIGFyb3VuZAorICogb24gdXMuIFdlIG5lZWQgdG8gdXNlIF9leGFjdGx5XyB0aGUgYWRkcmVzcyB0aGUgdXNlciBnYXZlIHVzLAorICogbm90IHNvbWUgYWxpYXMgdGhhdCBjb250YWlucyB0aGUgc2FtZSBpbmZvcm1hdGlvbi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeyB2b2xhdGlsZSBpbnQgY291bnRlcjsgfSBhdG9taWNfdDsKKworI2RlZmluZSBBVE9NSUNfSU5JVChpKQl7IChpKSB9CisKKy8qKgorICogYXRvbWljX3JlYWQgLSByZWFkIGF0b21pYyB2YXJpYWJsZQorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICogCisgKiBBdG9taWNhbGx5IHJlYWRzIHRoZSB2YWx1ZSBvZiBAdi4KKyAqLyAKKyNkZWZpbmUgYXRvbWljX3JlYWQodikJCSgodiktPmNvdW50ZXIpCisKKy8qKgorICogYXRvbWljX3NldCAtIHNldCBhdG9taWMgdmFyaWFibGUKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqIEBpOiByZXF1aXJlZCB2YWx1ZQorICogCisgKiBBdG9taWNhbGx5IHNldHMgdGhlIHZhbHVlIG9mIEB2IHRvIEBpLgorICovIAorI2RlZmluZSBhdG9taWNfc2V0KHYsaSkJCSgoKHYpLT5jb3VudGVyKSA9IChpKSkKKworLyoqCisgKiBhdG9taWNfYWRkIC0gYWRkIGludGVnZXIgdG8gYXRvbWljIHZhcmlhYmxlCisgKiBAaTogaW50ZWdlciB2YWx1ZSB0byBhZGQKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqIAorICogQXRvbWljYWxseSBhZGRzIEBpIHRvIEB2LgorICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGF0b21pY19hZGQoaW50IGksIGF0b21pY190ICp2KQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQlMT0NLICJhZGRsICUxLCUwIgorCQk6Ij1tIiAodi0+Y291bnRlcikKKwkJOiJpciIgKGkpLCAibSIgKHYtPmNvdW50ZXIpKTsKK30KKworLyoqCisgKiBhdG9taWNfc3ViIC0gc3VidHJhY3QgdGhlIGF0b21pYyB2YXJpYWJsZQorICogQGk6IGludGVnZXIgdmFsdWUgdG8gc3VidHJhY3QKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqIAorICogQXRvbWljYWxseSBzdWJ0cmFjdHMgQGkgZnJvbSBAdi4KKyAqLworc3RhdGljIF9faW5saW5lX18gdm9pZCBhdG9taWNfc3ViKGludCBpLCBhdG9taWNfdCAqdikKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJTE9DSyAic3VibCAlMSwlMCIKKwkJOiI9bSIgKHYtPmNvdW50ZXIpCisJCToiaXIiIChpKSwgIm0iICh2LT5jb3VudGVyKSk7Cit9CisKKy8qKgorICogYXRvbWljX3N1Yl9hbmRfdGVzdCAtIHN1YnRyYWN0IHZhbHVlIGZyb20gdmFyaWFibGUgYW5kIHRlc3QgcmVzdWx0CisgKiBAaTogaW50ZWdlciB2YWx1ZSB0byBzdWJ0cmFjdAorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICogCisgKiBBdG9taWNhbGx5IHN1YnRyYWN0cyBAaSBmcm9tIEB2IGFuZCByZXR1cm5zCisgKiB0cnVlIGlmIHRoZSByZXN1bHQgaXMgemVybywgb3IgZmFsc2UgZm9yIGFsbAorICogb3RoZXIgY2FzZXMuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIGludCBhdG9taWNfc3ViX2FuZF90ZXN0KGludCBpLCBhdG9taWNfdCAqdikKK3sKKwl1bnNpZ25lZCBjaGFyIGM7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJTE9DSyAic3VibCAlMiwlMDsgc2V0ZSAlMSIKKwkJOiI9bSIgKHYtPmNvdW50ZXIpLCAiPXFtIiAoYykKKwkJOiJpciIgKGkpLCAibSIgKHYtPmNvdW50ZXIpIDogIm1lbW9yeSIpOworCXJldHVybiBjOworfQorCisvKioKKyAqIGF0b21pY19pbmMgLSBpbmNyZW1lbnQgYXRvbWljIHZhcmlhYmxlCisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CisgKiAKKyAqIEF0b21pY2FsbHkgaW5jcmVtZW50cyBAdiBieSAxLgorICovIAorc3RhdGljIF9faW5saW5lX18gdm9pZCBhdG9taWNfaW5jKGF0b21pY190ICp2KQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQlMT0NLICJpbmNsICUwIgorCQk6Ij1tIiAodi0+Y291bnRlcikKKwkJOiJtIiAodi0+Y291bnRlcikpOworfQorCisvKioKKyAqIGF0b21pY19kZWMgLSBkZWNyZW1lbnQgYXRvbWljIHZhcmlhYmxlCisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CisgKiAKKyAqIEF0b21pY2FsbHkgZGVjcmVtZW50cyBAdiBieSAxLgorICovIAorc3RhdGljIF9faW5saW5lX18gdm9pZCBhdG9taWNfZGVjKGF0b21pY190ICp2KQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQlMT0NLICJkZWNsICUwIgorCQk6Ij1tIiAodi0+Y291bnRlcikKKwkJOiJtIiAodi0+Y291bnRlcikpOworfQorCisvKioKKyAqIGF0b21pY19kZWNfYW5kX3Rlc3QgLSBkZWNyZW1lbnQgYW5kIHRlc3QKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqIAorICogQXRvbWljYWxseSBkZWNyZW1lbnRzIEB2IGJ5IDEgYW5kCisgKiByZXR1cm5zIHRydWUgaWYgdGhlIHJlc3VsdCBpcyAwLCBvciBmYWxzZSBmb3IgYWxsIG90aGVyCisgKiBjYXNlcy4KKyAqLyAKK3N0YXRpYyBfX2lubGluZV9fIGludCBhdG9taWNfZGVjX2FuZF90ZXN0KGF0b21pY190ICp2KQoreworCXVuc2lnbmVkIGNoYXIgYzsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQlMT0NLICJkZWNsICUwOyBzZXRlICUxIgorCQk6Ij1tIiAodi0+Y291bnRlciksICI9cW0iIChjKQorCQk6Im0iICh2LT5jb3VudGVyKSA6ICJtZW1vcnkiKTsKKwlyZXR1cm4gYyAhPSAwOworfQorCisvKioKKyAqIGF0b21pY19pbmNfYW5kX3Rlc3QgLSBpbmNyZW1lbnQgYW5kIHRlc3QgCisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CisgKiAKKyAqIEF0b21pY2FsbHkgaW5jcmVtZW50cyBAdiBieSAxCisgKiBhbmQgcmV0dXJucyB0cnVlIGlmIHRoZSByZXN1bHQgaXMgemVybywgb3IgZmFsc2UgZm9yIGFsbAorICogb3RoZXIgY2FzZXMuCisgKi8gCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgYXRvbWljX2luY19hbmRfdGVzdChhdG9taWNfdCAqdikKK3sKKwl1bnNpZ25lZCBjaGFyIGM7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJTE9DSyAiaW5jbCAlMDsgc2V0ZSAlMSIKKwkJOiI9bSIgKHYtPmNvdW50ZXIpLCAiPXFtIiAoYykKKwkJOiJtIiAodi0+Y291bnRlcikgOiAibWVtb3J5Iik7CisJcmV0dXJuIGMgIT0gMDsKK30KKworLyoqCisgKiBhdG9taWNfYWRkX25lZ2F0aXZlIC0gYWRkIGFuZCB0ZXN0IGlmIG5lZ2F0aXZlCisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CisgKiBAaTogaW50ZWdlciB2YWx1ZSB0byBhZGQKKyAqIAorICogQXRvbWljYWxseSBhZGRzIEBpIHRvIEB2IGFuZCByZXR1cm5zIHRydWUKKyAqIGlmIHRoZSByZXN1bHQgaXMgbmVnYXRpdmUsIG9yIGZhbHNlIHdoZW4KKyAqIHJlc3VsdCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gemVyby4KKyAqLyAKK3N0YXRpYyBfX2lubGluZV9fIGludCBhdG9taWNfYWRkX25lZ2F0aXZlKGludCBpLCBhdG9taWNfdCAqdikKK3sKKwl1bnNpZ25lZCBjaGFyIGM7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJTE9DSyAiYWRkbCAlMiwlMDsgc2V0cyAlMSIKKwkJOiI9bSIgKHYtPmNvdW50ZXIpLCAiPXFtIiAoYykKKwkJOiJpciIgKGkpLCAibSIgKHYtPmNvdW50ZXIpIDogIm1lbW9yeSIpOworCXJldHVybiBjOworfQorCisvKiBBbiA2NGJpdCBhdG9taWMgdHlwZSAqLworCit0eXBlZGVmIHN0cnVjdCB7IHZvbGF0aWxlIGxvbmcgY291bnRlcjsgfSBhdG9taWM2NF90OworCisjZGVmaW5lIEFUT01JQzY0X0lOSVQoaSkJeyAoaSkgfQorCisvKioKKyAqIGF0b21pYzY0X3JlYWQgLSByZWFkIGF0b21pYzY0IHZhcmlhYmxlCisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pYzY0X3QKKyAqCisgKiBBdG9taWNhbGx5IHJlYWRzIHRoZSB2YWx1ZSBvZiBAdi4KKyAqIERvZXNuJ3QgaW1wbHkgYSByZWFkIG1lbW9yeSBiYXJyaWVyLgorICovCisjZGVmaW5lIGF0b21pYzY0X3JlYWQodikJCSgodiktPmNvdW50ZXIpCisKKy8qKgorICogYXRvbWljNjRfc2V0IC0gc2V0IGF0b21pYzY0IHZhcmlhYmxlCisgKiBAdjogcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKKyAqIEBpOiByZXF1aXJlZCB2YWx1ZQorICoKKyAqIEF0b21pY2FsbHkgc2V0cyB0aGUgdmFsdWUgb2YgQHYgdG8gQGkuCisgKi8KKyNkZWZpbmUgYXRvbWljNjRfc2V0KHYsaSkJCSgoKHYpLT5jb3VudGVyKSA9IChpKSkKKworLyoqCisgKiBhdG9taWM2NF9hZGQgLSBhZGQgaW50ZWdlciB0byBhdG9taWM2NCB2YXJpYWJsZQorICogQGk6IGludGVnZXIgdmFsdWUgdG8gYWRkCisgKiBAdjogcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKKyAqCisgKiBBdG9taWNhbGx5IGFkZHMgQGkgdG8gQHYuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgYXRvbWljNjRfYWRkKGxvbmcgaSwgYXRvbWljNjRfdCAqdikKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJTE9DSyAiYWRkcSAlMSwlMCIKKwkJOiI9bSIgKHYtPmNvdW50ZXIpCisJCToiaXIiIChpKSwgIm0iICh2LT5jb3VudGVyKSk7Cit9CisKKy8qKgorICogYXRvbWljNjRfc3ViIC0gc3VidHJhY3QgdGhlIGF0b21pYzY0IHZhcmlhYmxlCisgKiBAaTogaW50ZWdlciB2YWx1ZSB0byBzdWJ0cmFjdAorICogQHY6IHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90CisgKgorICogQXRvbWljYWxseSBzdWJ0cmFjdHMgQGkgZnJvbSBAdi4KKyAqLworc3RhdGljIF9faW5saW5lX18gdm9pZCBhdG9taWM2NF9zdWIobG9uZyBpLCBhdG9taWM2NF90ICp2KQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQlMT0NLICJzdWJxICUxLCUwIgorCQk6Ij1tIiAodi0+Y291bnRlcikKKwkJOiJpciIgKGkpLCAibSIgKHYtPmNvdW50ZXIpKTsKK30KKworLyoqCisgKiBhdG9taWM2NF9zdWJfYW5kX3Rlc3QgLSBzdWJ0cmFjdCB2YWx1ZSBmcm9tIHZhcmlhYmxlIGFuZCB0ZXN0IHJlc3VsdAorICogQGk6IGludGVnZXIgdmFsdWUgdG8gc3VidHJhY3QKKyAqIEB2OiBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAorICoKKyAqIEF0b21pY2FsbHkgc3VidHJhY3RzIEBpIGZyb20gQHYgYW5kIHJldHVybnMKKyAqIHRydWUgaWYgdGhlIHJlc3VsdCBpcyB6ZXJvLCBvciBmYWxzZSBmb3IgYWxsCisgKiBvdGhlciBjYXNlcy4KKyAqLworc3RhdGljIF9faW5saW5lX18gaW50IGF0b21pYzY0X3N1Yl9hbmRfdGVzdChsb25nIGksIGF0b21pYzY0X3QgKnYpCit7CisJdW5zaWduZWQgY2hhciBjOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCUxPQ0sgInN1YnEgJTIsJTA7IHNldGUgJTEiCisJCToiPW0iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCisJCToiaXIiIChpKSwgIm0iICh2LT5jb3VudGVyKSA6ICJtZW1vcnkiKTsKKwlyZXR1cm4gYzsKK30KKworLyoqCisgKiBhdG9taWM2NF9pbmMgLSBpbmNyZW1lbnQgYXRvbWljNjQgdmFyaWFibGUKKyAqIEB2OiBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAorICoKKyAqIEF0b21pY2FsbHkgaW5jcmVtZW50cyBAdiBieSAxLgorICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGF0b21pYzY0X2luYyhhdG9taWM2NF90ICp2KQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQlMT0NLICJpbmNxICUwIgorCQk6Ij1tIiAodi0+Y291bnRlcikKKwkJOiJtIiAodi0+Y291bnRlcikpOworfQorCisvKioKKyAqIGF0b21pYzY0X2RlYyAtIGRlY3JlbWVudCBhdG9taWM2NCB2YXJpYWJsZQorICogQHY6IHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90CisgKgorICogQXRvbWljYWxseSBkZWNyZW1lbnRzIEB2IGJ5IDEuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgYXRvbWljNjRfZGVjKGF0b21pYzY0X3QgKnYpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCUxPQ0sgImRlY3EgJTAiCisJCToiPW0iICh2LT5jb3VudGVyKQorCQk6Im0iICh2LT5jb3VudGVyKSk7Cit9CisKKy8qKgorICogYXRvbWljNjRfZGVjX2FuZF90ZXN0IC0gZGVjcmVtZW50IGFuZCB0ZXN0CisgKiBAdjogcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKKyAqCisgKiBBdG9taWNhbGx5IGRlY3JlbWVudHMgQHYgYnkgMSBhbmQKKyAqIHJldHVybnMgdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIDAsIG9yIGZhbHNlIGZvciBhbGwgb3RoZXIKKyAqIGNhc2VzLgorICovCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgYXRvbWljNjRfZGVjX2FuZF90ZXN0KGF0b21pYzY0X3QgKnYpCit7CisJdW5zaWduZWQgY2hhciBjOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCUxPQ0sgImRlY3EgJTA7IHNldGUgJTEiCisJCToiPW0iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCisJCToibSIgKHYtPmNvdW50ZXIpIDogIm1lbW9yeSIpOworCXJldHVybiBjICE9IDA7Cit9CisKKy8qKgorICogYXRvbWljNjRfaW5jX2FuZF90ZXN0IC0gaW5jcmVtZW50IGFuZCB0ZXN0CisgKiBAdjogcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKKyAqCisgKiBBdG9taWNhbGx5IGluY3JlbWVudHMgQHYgYnkgMQorICogYW5kIHJldHVybnMgdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIHplcm8sIG9yIGZhbHNlIGZvciBhbGwKKyAqIG90aGVyIGNhc2VzLgorICovCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgYXRvbWljNjRfaW5jX2FuZF90ZXN0KGF0b21pYzY0X3QgKnYpCit7CisJdW5zaWduZWQgY2hhciBjOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCUxPQ0sgImluY3EgJTA7IHNldGUgJTEiCisJCToiPW0iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCisJCToibSIgKHYtPmNvdW50ZXIpIDogIm1lbW9yeSIpOworCXJldHVybiBjICE9IDA7Cit9CisKKy8qKgorICogYXRvbWljNjRfYWRkX25lZ2F0aXZlIC0gYWRkIGFuZCB0ZXN0IGlmIG5lZ2F0aXZlCisgKiBAdjogcG9pbnRlciB0byBhdG9taWM2NF90CisgKiBAaTogaW50ZWdlciB2YWx1ZSB0byBhZGQKKyAqCisgKiBBdG9taWNhbGx5IGFkZHMgQGkgdG8gQHYgYW5kIHJldHVybnMgdHJ1ZQorICogaWYgdGhlIHJlc3VsdCBpcyBuZWdhdGl2ZSwgb3IgZmFsc2Ugd2hlbgorICogcmVzdWx0IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB6ZXJvLgorICovCitzdGF0aWMgX19pbmxpbmVfXyBsb25nIGF0b21pYzY0X2FkZF9uZWdhdGl2ZShsb25nIGksIGF0b21pYzY0X3QgKnYpCit7CisJdW5zaWduZWQgY2hhciBjOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCUxPQ0sgImFkZHEgJTIsJTA7IHNldHMgJTEiCisJCToiPW0iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCisJCToiaXIiIChpKSwgIm0iICh2LT5jb3VudGVyKSA6ICJtZW1vcnkiKTsKKwlyZXR1cm4gYzsKK30KKworLyoqCisgKiBhdG9taWNfYWRkX3JldHVybiAtIGFkZCBhbmQgcmV0dXJuCisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CisgKiBAaTogaW50ZWdlciB2YWx1ZSB0byBhZGQKKyAqCisgKiBBdG9taWNhbGx5IGFkZHMgQGkgdG8gQHYgYW5kIHJldHVybnMgQGkgKyBAdgorICovCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgYXRvbWljX2FkZF9yZXR1cm4oaW50IGksIGF0b21pY190ICp2KQoreworCWludCBfX2kgPSBpOworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQlMT0NLICJ4YWRkbCAlMCwgJTE7IgorCQk6Ij1yIihpKQorCQk6Im0iKHYtPmNvdW50ZXIpLCAiMCIoaSkpOworCXJldHVybiBpICsgX19pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgYXRvbWljX3N1Yl9yZXR1cm4oaW50IGksIGF0b21pY190ICp2KQoreworCXJldHVybiBhdG9taWNfYWRkX3JldHVybigtaSx2KTsKK30KKworI2RlZmluZSBhdG9taWNfaW5jX3JldHVybih2KSAgKGF0b21pY19hZGRfcmV0dXJuKDEsdikpCisjZGVmaW5lIGF0b21pY19kZWNfcmV0dXJuKHYpICAoYXRvbWljX3N1Yl9yZXR1cm4oMSx2KSkKKworLyogVGhlc2UgYXJlIHg4Ni1zcGVjaWZpYywgdXNlZCBieSBzb21lIGhlYWRlciBmaWxlcyAqLworI2RlZmluZSBhdG9taWNfY2xlYXJfbWFzayhtYXNrLCBhZGRyKSBcCitfX2FzbV9fIF9fdm9sYXRpbGVfXyhMT0NLICJhbmRsICUwLCUxIiBcCis6IDogInIiICh+KG1hc2spKSwibSIgKCphZGRyKSA6ICJtZW1vcnkiKQorCisjZGVmaW5lIGF0b21pY19zZXRfbWFzayhtYXNrLCBhZGRyKSBcCitfX2FzbV9fIF9fdm9sYXRpbGVfXyhMT0NLICJvcmwgJTAsJTEiIFwKKzogOiAiciIgKCh1bnNpZ25lZCltYXNrKSwibSIgKCooYWRkcikpIDogIm1lbW9yeSIpCisKKy8qIEF0b21pYyBvcGVyYXRpb25zIGFyZSBhbHJlYWR5IHNlcmlhbGl6aW5nIG9uIHg4NiAqLworI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfZGVjKCkJYmFycmllcigpCisjZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2RlYygpCWJhcnJpZXIoKQorI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfaW5jKCkJYmFycmllcigpCisjZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpCWJhcnJpZXIoKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9iaXRvcHMuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9iaXRvcHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGQ3NzI3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L2JpdG9wcy5oCkBAIC0wLDAgKzEsNDE4IEBACisjaWZuZGVmIF9YODZfNjRfQklUT1BTX0gKKyNkZWZpbmUgX1g4Nl82NF9CSVRPUFNfSAorCisvKgorICogQ29weXJpZ2h0IDE5OTIsIExpbnVzIFRvcnZhbGRzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2lmZGVmIENPTkZJR19TTVAKKyNkZWZpbmUgTE9DS19QUkVGSVggImxvY2sgOyAiCisjZWxzZQorI2RlZmluZSBMT0NLX1BSRUZJWCAiIgorI2VuZGlmCisKKyNkZWZpbmUgQUREUiAoKih2b2xhdGlsZSBsb25nICopIGFkZHIpCisKKy8qKgorICogc2V0X2JpdCAtIEF0b21pY2FsbHkgc2V0IGEgYml0IGluIG1lbW9yeQorICogQG5yOiB0aGUgYml0IHRvIHNldAorICogQGFkZHI6IHRoZSBhZGRyZXNzIHRvIHN0YXJ0IGNvdW50aW5nIGZyb20KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGF0b21pYyBhbmQgbWF5IG5vdCBiZSByZW9yZGVyZWQuICBTZWUgX19zZXRfYml0KCkKKyAqIGlmIHlvdSBkbyBub3QgcmVxdWlyZSB0aGUgYXRvbWljIGd1YXJhbnRlZXMuCisgKiBOb3RlIHRoYXQgQG5yIG1heSBiZSBhbG1vc3QgYXJiaXRyYXJpbHkgbGFyZ2U7IHRoaXMgZnVuY3Rpb24gaXMgbm90CisgKiByZXN0cmljdGVkIHRvIGFjdGluZyBvbiBhIHNpbmdsZS13b3JkIHF1YW50aXR5LgorICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHNldF9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyggTE9DS19QUkVGSVgKKwkJImJ0c2wgJTEsJTAiCisJCToiPW0iIChBRERSKQorCQk6ImRJciIgKG5yKSA6ICJtZW1vcnkiKTsKK30KKworLyoqCisgKiBfX3NldF9iaXQgLSBTZXQgYSBiaXQgaW4gbWVtb3J5CisgKiBAbnI6IHRoZSBiaXQgdG8gc2V0CisgKiBAYWRkcjogdGhlIGFkZHJlc3MgdG8gc3RhcnQgY291bnRpbmcgZnJvbQorICoKKyAqIFVubGlrZSBzZXRfYml0KCksIHRoaXMgZnVuY3Rpb24gaXMgbm9uLWF0b21pYyBhbmQgbWF5IGJlIHJlb3JkZXJlZC4KKyAqIElmIGl0J3MgY2FsbGVkIG9uIHRoZSBzYW1lIHJlZ2lvbiBvZiBtZW1vcnkgc2ltdWx0YW5lb3VzbHksIHRoZSBlZmZlY3QKKyAqIG1heSBiZSB0aGF0IG9ubHkgb25lIG9wZXJhdGlvbiBzdWNjZWVkcy4KKyAqLworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX3NldF9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKK3sKKwlfX2FzbV9fIHZvbGF0aWxlKAorCQkiYnRzbCAlMSwlMCIKKwkJOiI9bSIgKEFERFIpCisJCToiZElyIiAobnIpIDogIm1lbW9yeSIpOworfQorCisvKioKKyAqIGNsZWFyX2JpdCAtIENsZWFycyBhIGJpdCBpbiBtZW1vcnkKKyAqIEBucjogQml0IHRvIGNsZWFyCisgKiBAYWRkcjogQWRkcmVzcyB0byBzdGFydCBjb3VudGluZyBmcm9tCisgKgorICogY2xlYXJfYml0KCkgaXMgYXRvbWljIGFuZCBtYXkgbm90IGJlIHJlb3JkZXJlZC4gIEhvd2V2ZXIsIGl0IGRvZXMKKyAqIG5vdCBjb250YWluIGEgbWVtb3J5IGJhcnJpZXIsIHNvIGlmIGl0IGlzIHVzZWQgZm9yIGxvY2tpbmcgcHVycG9zZXMsCisgKiB5b3Ugc2hvdWxkIGNhbGwgc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCkgYW5kL29yIHNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCkKKyAqIGluIG9yZGVyIHRvIGVuc3VyZSBjaGFuZ2VzIGFyZSB2aXNpYmxlIG9uIG90aGVyIHByb2Nlc3NvcnMuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgY2xlYXJfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oIExPQ0tfUFJFRklYCisJCSJidHJsICUxLCUwIgorCQk6Ij1tIiAoQUREUikKKwkJOiJkSXIiIChucikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fY2xlYXJfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSJidHJsICUxLCUwIgorCQk6Ij1tIiAoQUREUikKKwkJOiJkSXIiIChucikpOworfQorCisjZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpCWJhcnJpZXIoKQorI2RlZmluZSBzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpCWJhcnJpZXIoKQorCisvKioKKyAqIF9fY2hhbmdlX2JpdCAtIFRvZ2dsZSBhIGJpdCBpbiBtZW1vcnkKKyAqIEBucjogdGhlIGJpdCB0byBjaGFuZ2UKKyAqIEBhZGRyOiB0aGUgYWRkcmVzcyB0byBzdGFydCBjb3VudGluZyBmcm9tCisgKgorICogVW5saWtlIGNoYW5nZV9iaXQoKSwgdGhpcyBmdW5jdGlvbiBpcyBub24tYXRvbWljIGFuZCBtYXkgYmUgcmVvcmRlcmVkLgorICogSWYgaXQncyBjYWxsZWQgb24gdGhlIHNhbWUgcmVnaW9uIG9mIG1lbW9yeSBzaW11bHRhbmVvdXNseSwgdGhlIGVmZmVjdAorICogbWF5IGJlIHRoYXQgb25seSBvbmUgb3BlcmF0aW9uIHN1Y2NlZWRzLgorICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fY2hhbmdlX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkiYnRjbCAlMSwlMCIKKwkJOiI9bSIgKEFERFIpCisJCToiZElyIiAobnIpKTsKK30KKworLyoqCisgKiBjaGFuZ2VfYml0IC0gVG9nZ2xlIGEgYml0IGluIG1lbW9yeQorICogQG5yOiBCaXQgdG8gY2hhbmdlCisgKiBAYWRkcjogQWRkcmVzcyB0byBzdGFydCBjb3VudGluZyBmcm9tCisgKgorICogY2hhbmdlX2JpdCgpIGlzIGF0b21pYyBhbmQgbWF5IG5vdCBiZSByZW9yZGVyZWQuCisgKiBOb3RlIHRoYXQgQG5yIG1heSBiZSBhbG1vc3QgYXJiaXRyYXJpbHkgbGFyZ2U7IHRoaXMgZnVuY3Rpb24gaXMgbm90CisgKiByZXN0cmljdGVkIHRvIGFjdGluZyBvbiBhIHNpbmdsZS13b3JkIHF1YW50aXR5LgorICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGNoYW5nZV9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyggTE9DS19QUkVGSVgKKwkJImJ0Y2wgJTEsJTAiCisJCToiPW0iIChBRERSKQorCQk6ImRJciIgKG5yKSk7Cit9CisKKy8qKgorICogdGVzdF9hbmRfc2V0X2JpdCAtIFNldCBhIGJpdCBhbmQgcmV0dXJuIGl0cyBvbGQgdmFsdWUKKyAqIEBucjogQml0IHRvIHNldAorICogQGFkZHI6IEFkZHJlc3MgdG8gY291bnQgZnJvbQorICoKKyAqIFRoaXMgb3BlcmF0aW9uIGlzIGF0b21pYyBhbmQgY2Fubm90IGJlIHJlb3JkZXJlZC4gIAorICogSXQgYWxzbyBpbXBsaWVzIGEgbWVtb3J5IGJhcnJpZXIuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIGludCB0ZXN0X2FuZF9zZXRfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCit7CisJaW50IG9sZGJpdDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKCBMT0NLX1BSRUZJWAorCQkiYnRzbCAlMiwlMVxuXHRzYmJsICUwLCUwIgorCQk6Ij1yIiAob2xkYml0KSwiPW0iIChBRERSKQorCQk6ImRJciIgKG5yKSA6ICJtZW1vcnkiKTsKKwlyZXR1cm4gb2xkYml0OworfQorCisvKioKKyAqIF9fdGVzdF9hbmRfc2V0X2JpdCAtIFNldCBhIGJpdCBhbmQgcmV0dXJuIGl0cyBvbGQgdmFsdWUKKyAqIEBucjogQml0IHRvIHNldAorICogQGFkZHI6IEFkZHJlc3MgdG8gY291bnQgZnJvbQorICoKKyAqIFRoaXMgb3BlcmF0aW9uIGlzIG5vbi1hdG9taWMgYW5kIGNhbiBiZSByZW9yZGVyZWQuICAKKyAqIElmIHR3byBleGFtcGxlcyBvZiB0aGlzIG9wZXJhdGlvbiByYWNlLCBvbmUgY2FuIGFwcGVhciB0byBzdWNjZWVkCisgKiBidXQgYWN0dWFsbHkgZmFpbC4gIFlvdSBtdXN0IHByb3RlY3QgbXVsdGlwbGUgYWNjZXNzZXMgd2l0aCBhIGxvY2suCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIGludCBfX3Rlc3RfYW5kX3NldF9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKK3sKKwlpbnQgb2xkYml0OworCisJX19hc21fXygKKwkJImJ0c2wgJTIsJTFcblx0c2JibCAlMCwlMCIKKwkJOiI9ciIgKG9sZGJpdCksIj1tIiAoQUREUikKKwkJOiJkSXIiIChucikpOworCXJldHVybiBvbGRiaXQ7Cit9CisKKy8qKgorICogdGVzdF9hbmRfY2xlYXJfYml0IC0gQ2xlYXIgYSBiaXQgYW5kIHJldHVybiBpdHMgb2xkIHZhbHVlCisgKiBAbnI6IEJpdCB0byBjbGVhcgorICogQGFkZHI6IEFkZHJlc3MgdG8gY291bnQgZnJvbQorICoKKyAqIFRoaXMgb3BlcmF0aW9uIGlzIGF0b21pYyBhbmQgY2Fubm90IGJlIHJlb3JkZXJlZC4gIAorICogSXQgYWxzbyBpbXBsaWVzIGEgbWVtb3J5IGJhcnJpZXIuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIGludCB0ZXN0X2FuZF9jbGVhcl9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKK3sKKwlpbnQgb2xkYml0OworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oIExPQ0tfUFJFRklYCisJCSJidHJsICUyLCUxXG5cdHNiYmwgJTAsJTAiCisJCToiPXIiIChvbGRiaXQpLCI9bSIgKEFERFIpCisJCToiZElyIiAobnIpIDogIm1lbW9yeSIpOworCXJldHVybiBvbGRiaXQ7Cit9CisKKy8qKgorICogX190ZXN0X2FuZF9jbGVhcl9iaXQgLSBDbGVhciBhIGJpdCBhbmQgcmV0dXJuIGl0cyBvbGQgdmFsdWUKKyAqIEBucjogQml0IHRvIGNsZWFyCisgKiBAYWRkcjogQWRkcmVzcyB0byBjb3VudCBmcm9tCisgKgorICogVGhpcyBvcGVyYXRpb24gaXMgbm9uLWF0b21pYyBhbmQgY2FuIGJlIHJlb3JkZXJlZC4gIAorICogSWYgdHdvIGV4YW1wbGVzIG9mIHRoaXMgb3BlcmF0aW9uIHJhY2UsIG9uZSBjYW4gYXBwZWFyIHRvIHN1Y2NlZWQKKyAqIGJ1dCBhY3R1YWxseSBmYWlsLiAgWW91IG11c3QgcHJvdGVjdCBtdWx0aXBsZSBhY2Nlc3NlcyB3aXRoIGEgbG9jay4KKyAqLworc3RhdGljIF9faW5saW5lX18gaW50IF9fdGVzdF9hbmRfY2xlYXJfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCit7CisJaW50IG9sZGJpdDsKKworCV9fYXNtX18oCisJCSJidHJsICUyLCUxXG5cdHNiYmwgJTAsJTAiCisJCToiPXIiIChvbGRiaXQpLCI9bSIgKEFERFIpCisJCToiZElyIiAobnIpKTsKKwlyZXR1cm4gb2xkYml0OworfQorCisvKiBXQVJOSU5HOiBub24gYXRvbWljIGFuZCBpdCBjYW4gYmUgcmVvcmRlcmVkISAqLworc3RhdGljIF9faW5saW5lX18gaW50IF9fdGVzdF9hbmRfY2hhbmdlX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQoreworCWludCBvbGRiaXQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJImJ0Y2wgJTIsJTFcblx0c2JibCAlMCwlMCIKKwkJOiI9ciIgKG9sZGJpdCksIj1tIiAoQUREUikKKwkJOiJkSXIiIChucikgOiAibWVtb3J5Iik7CisJcmV0dXJuIG9sZGJpdDsKK30KKworLyoqCisgKiB0ZXN0X2FuZF9jaGFuZ2VfYml0IC0gQ2hhbmdlIGEgYml0IGFuZCByZXR1cm4gaXRzIG9sZCB2YWx1ZQorICogQG5yOiBCaXQgdG8gY2hhbmdlCisgKiBAYWRkcjogQWRkcmVzcyB0byBjb3VudCBmcm9tCisgKgorICogVGhpcyBvcGVyYXRpb24gaXMgYXRvbWljIGFuZCBjYW5ub3QgYmUgcmVvcmRlcmVkLiAgCisgKiBJdCBhbHNvIGltcGxpZXMgYSBtZW1vcnkgYmFycmllci4KKyAqLworc3RhdGljIF9faW5saW5lX18gaW50IHRlc3RfYW5kX2NoYW5nZV9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKK3sKKwlpbnQgb2xkYml0OworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oIExPQ0tfUFJFRklYCisJCSJidGNsICUyLCUxXG5cdHNiYmwgJTAsJTAiCisJCToiPXIiIChvbGRiaXQpLCI9bSIgKEFERFIpCisJCToiZElyIiAobnIpIDogIm1lbW9yeSIpOworCXJldHVybiBvbGRiaXQ7Cit9CisKKyNpZiAwIC8qIEZvb2wga2VybmVsLWRvYyBzaW5jZSBpdCBkb2Vzbid0IGRvIG1hY3JvcyB5ZXQgKi8KKy8qKgorICogdGVzdF9iaXQgLSBEZXRlcm1pbmUgd2hldGhlciBhIGJpdCBpcyBzZXQKKyAqIEBucjogYml0IG51bWJlciB0byB0ZXN0CisgKiBAYWRkcjogQWRkcmVzcyB0byBzdGFydCBjb3VudGluZyBmcm9tCisgKi8KK3N0YXRpYyBpbnQgdGVzdF9iaXQoaW50IG5yLCBjb25zdCB2b2xhdGlsZSB2b2lkICogYWRkcik7CisjZW5kaWYKKworc3RhdGljIF9faW5saW5lX18gaW50IGNvbnN0YW50X3Rlc3RfYml0KGludCBuciwgY29uc3Qgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCit7CisJcmV0dXJuICgoMVVMIDw8IChuciAmIDMxKSkgJiAoKChjb25zdCB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgYWRkcilbbnIgPj4gNV0pKSAhPSAwOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgdmFyaWFibGVfdGVzdF9iaXQoaW50IG5yLCB2b2xhdGlsZSBjb25zdCB2b2lkICogYWRkcikKK3sKKwlpbnQgb2xkYml0OworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSJidGwgJTIsJTFcblx0c2JibCAlMCwlMCIKKwkJOiI9ciIgKG9sZGJpdCkKKwkJOiJtIiAoQUREUiksImRJciIgKG5yKSk7CisJcmV0dXJuIG9sZGJpdDsKK30KKworI2RlZmluZSB0ZXN0X2JpdChucixhZGRyKSBcCisoX19idWlsdGluX2NvbnN0YW50X3AobnIpID8gXAorIGNvbnN0YW50X3Rlc3RfYml0KChuciksKGFkZHIpKSA6IFwKKyB2YXJpYWJsZV90ZXN0X2JpdCgobnIpLChhZGRyKSkpCisKKyN1bmRlZiBBRERSCisKK2V4dGVybiBsb25nIGZpbmRfZmlyc3RfemVyb19iaXQoY29uc3QgdW5zaWduZWQgbG9uZyAqIGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CitleHRlcm4gbG9uZyBmaW5kX25leHRfemVyb19iaXQgKGNvbnN0IHVuc2lnbmVkIGxvbmcgKiBhZGRyLCBsb25nIHNpemUsIGxvbmcgb2Zmc2V0KTsKK2V4dGVybiBsb25nIGZpbmRfZmlyc3RfYml0KGNvbnN0IHVuc2lnbmVkIGxvbmcgKiBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpOworZXh0ZXJuIGxvbmcgZmluZF9uZXh0X2JpdChjb25zdCB1bnNpZ25lZCBsb25nICogYWRkciwgbG9uZyBzaXplLCBsb25nIG9mZnNldCk7CisKKy8qIHJldHVybiBpbmRleCBvZiBmaXJzdCBiZXQgc2V0IGluIHZhbCBvciBtYXggd2hlbiBubyBiaXQgaXMgc2V0ICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19zY2FuYml0KHVuc2lnbmVkIGxvbmcgdmFsLCB1bnNpZ25lZCBsb25nIG1heCkKK3sKKwlhc20oImJzZnEgJTEsJTAgOyBjbW92eiAlMiwlMCIgOiAiPSZyIiAodmFsKSA6ICJyIiAodmFsKSwgInIiIChtYXgpKTsKKwlyZXR1cm4gdmFsOworfQorCisjZGVmaW5lIGZpbmRfZmlyc3RfYml0KGFkZHIsc2l6ZSkgXAorKChfX2J1aWx0aW5fY29uc3RhbnRfcChzaXplKSAmJiAoc2l6ZSkgPD0gQklUU19QRVJfTE9ORyA/IFwKKyAgKF9fc2NhbmJpdCgqKHVuc2lnbmVkIGxvbmcgKilhZGRyLChzaXplKSkpIDogXAorICBmaW5kX2ZpcnN0X2JpdChhZGRyLHNpemUpKSkKKworI2RlZmluZSBmaW5kX25leHRfYml0KGFkZHIsc2l6ZSxvZmYpIFwKKygoX19idWlsdGluX2NvbnN0YW50X3Aoc2l6ZSkgJiYgKHNpemUpIDw9IEJJVFNfUEVSX0xPTkcgPyAJICBcCisgICgob2ZmKSArIChfX3NjYW5iaXQoKCoodW5zaWduZWQgbG9uZyAqKWFkZHIpID4+IChvZmYpLChzaXplKS0ob2ZmKSkpKSA6IFwKKwlmaW5kX25leHRfYml0KGFkZHIsc2l6ZSxvZmYpKSkKKworI2RlZmluZSBmaW5kX2ZpcnN0X3plcm9fYml0KGFkZHIsc2l6ZSkgXAorKChfX2J1aWx0aW5fY29uc3RhbnRfcChzaXplKSAmJiAoc2l6ZSkgPD0gQklUU19QRVJfTE9ORyA/IFwKKyAgKF9fc2NhbmJpdCh+Kih1bnNpZ25lZCBsb25nICopYWRkciwoc2l6ZSkpKSA6IFwKKyAgCWZpbmRfZmlyc3RfemVyb19iaXQoYWRkcixzaXplKSkpCisJCisjZGVmaW5lIGZpbmRfbmV4dF96ZXJvX2JpdChhZGRyLHNpemUsb2ZmKSBcCisoKF9fYnVpbHRpbl9jb25zdGFudF9wKHNpemUpICYmIChzaXplKSA8PSBCSVRTX1BFUl9MT05HID8gCSAgXAorICAoKG9mZikrKF9fc2NhbmJpdCh+KCgoKih1bnNpZ25lZCBsb25nICopYWRkcikpID4+IChvZmYpKSwoc2l6ZSktKG9mZikpKSkgOiBcCisJZmluZF9uZXh0X3plcm9fYml0KGFkZHIsc2l6ZSxvZmYpKSkKKworLyogCisgKiBGaW5kIHN0cmluZyBvZiB6ZXJvIGJpdHMgaW4gYSBiaXRtYXAuIC0xIHdoZW4gbm90IGZvdW5kLgorICovIAorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgCitmaW5kX25leHRfemVyb19zdHJpbmcodW5zaWduZWQgbG9uZyAqYml0bWFwLCBsb25nIHN0YXJ0LCBsb25nIG5iaXRzLCBpbnQgbGVuKTsKKworc3RhdGljIGlubGluZSB2b2lkIHNldF9iaXRfc3RyaW5nKHVuc2lnbmVkIGxvbmcgKmJpdG1hcCwgdW5zaWduZWQgbG9uZyBpLCAKKwkJCQkgIGludCBsZW4pIAoreyAKKwl1bnNpZ25lZCBsb25nIGVuZCA9IGkgKyBsZW47IAorCXdoaWxlIChpIDwgZW5kKSB7CisJCV9fc2V0X2JpdChpLCBiaXRtYXApOyAKKwkJaSsrOworCX0KK30gCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2NsZWFyX2JpdF9zdHJpbmcodW5zaWduZWQgbG9uZyAqYml0bWFwLCB1bnNpZ25lZCBsb25nIGksIAorCQkJCSAgICBpbnQgbGVuKSAKK3sgCisJdW5zaWduZWQgbG9uZyBlbmQgPSBpICsgbGVuOyAKKwl3aGlsZSAoaSA8IGVuZCkgeworCQlfX2NsZWFyX2JpdChpLCBiaXRtYXApOyAKKwkJaSsrOworCX0KK30gCisKKy8qKgorICogZmZ6IC0gZmluZCBmaXJzdCB6ZXJvIGluIHdvcmQuCisgKiBAd29yZDogVGhlIHdvcmQgdG8gc2VhcmNoCisgKgorICogVW5kZWZpbmVkIGlmIG5vIHplcm8gZXhpc3RzLCBzbyBjb2RlIHNob3VsZCBjaGVjayBhZ2FpbnN0IH4wVUwgZmlyc3QuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgZmZ6KHVuc2lnbmVkIGxvbmcgd29yZCkKK3sKKwlfX2FzbV9fKCJic2ZxICUxLCUwIgorCQk6Ij1yIiAod29yZCkKKwkJOiJyIiAofndvcmQpKTsKKwlyZXR1cm4gd29yZDsKK30KKworLyoqCisgKiBfX2ZmcyAtIGZpbmQgZmlyc3QgYml0IGluIHdvcmQuCisgKiBAd29yZDogVGhlIHdvcmQgdG8gc2VhcmNoCisgKgorICogVW5kZWZpbmVkIGlmIG5vIGJpdCBleGlzdHMsIHNvIGNvZGUgc2hvdWxkIGNoZWNrIGFnYWluc3QgMCBmaXJzdC4KKyAqLworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBfX2Zmcyh1bnNpZ25lZCBsb25nIHdvcmQpCit7CisJX19hc21fXygiYnNmcSAlMSwlMCIKKwkJOiI9ciIgKHdvcmQpCisJCToicm0iICh3b3JkKSk7CisJcmV0dXJuIHdvcmQ7Cit9CisKKyNpZmRlZiBfX0tFUk5FTF9fCisKK3N0YXRpYyBpbmxpbmUgaW50IHNjaGVkX2ZpbmRfZmlyc3RfYml0KGNvbnN0IHVuc2lnbmVkIGxvbmcgKmIpCit7CisJaWYgKGJbMF0pCisJCXJldHVybiBfX2ZmcyhiWzBdKTsKKwlpZiAoYlsxXSkKKwkJcmV0dXJuIF9fZmZzKGJbMV0pICsgNjQ7CisJaWYgKGJbMl0pCisJCXJldHVybiBfX2ZmcyhiWzJdKSArIDEyODsKK30KKworLyoqCisgKiBmZnMgLSBmaW5kIGZpcnN0IGJpdCBzZXQKKyAqIEB4OiB0aGUgd29yZCB0byBzZWFyY2gKKyAqCisgKiBUaGlzIGlzIGRlZmluZWQgdGhlIHNhbWUgd2F5IGFzCisgKiB0aGUgbGliYyBhbmQgY29tcGlsZXIgYnVpbHRpbiBmZnMgcm91dGluZXMsIHRoZXJlZm9yZQorICogZGlmZmVycyBpbiBzcGlyaXQgZnJvbSB0aGUgYWJvdmUgZmZ6IChtYW4gZmZzKS4KKyAqLworc3RhdGljIF9faW5saW5lX18gaW50IGZmcyhpbnQgeCkKK3sKKwlpbnQgcjsKKworCV9fYXNtX18oImJzZmwgJTEsJTBcblx0IgorCQkiY21vdnpsICUyLCUwIiAKKwkJOiAiPXIiIChyKSA6ICJybSIgKHgpLCAiciIgKC0xKSk7CisJcmV0dXJuIHIrMTsKK30KKworLyoqCisgKiBod2VpZ2h0TiAtIHJldHVybnMgdGhlIGhhbW1pbmcgd2VpZ2h0IG9mIGEgTi1iaXQgd29yZAorICogQHg6IHRoZSB3b3JkIHRvIHdlaWdoCisgKgorICogVGhlIEhhbW1pbmcgV2VpZ2h0IG9mIGEgbnVtYmVyIGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgYml0cyBzZXQgaW4gaXQuCisgKi8KKworI2RlZmluZSBod2VpZ2h0NjQoeCkgZ2VuZXJpY19od2VpZ2h0NjQoeCkKKyNkZWZpbmUgaHdlaWdodDMyKHgpIGdlbmVyaWNfaHdlaWdodDMyKHgpCisjZGVmaW5lIGh3ZWlnaHQxNih4KSBnZW5lcmljX2h3ZWlnaHQxNih4KQorI2RlZmluZSBod2VpZ2h0OCh4KSBnZW5lcmljX2h3ZWlnaHQ4KHgpCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNkZWZpbmUgZXh0Ml9zZXRfYml0KG5yLGFkZHIpIFwKKwlfX3Rlc3RfYW5kX3NldF9iaXQoKG5yKSwodW5zaWduZWQgbG9uZyopYWRkcikKKyNkZWZpbmUgZXh0Ml9zZXRfYml0X2F0b21pYyhsb2NrLG5yLGFkZHIpIFwKKwkgICAgICAgIHRlc3RfYW5kX3NldF9iaXQoKG5yKSwodW5zaWduZWQgbG9uZyopYWRkcikKKyNkZWZpbmUgZXh0Ml9jbGVhcl9iaXQobnIsIGFkZHIpIFwKKwlfX3Rlc3RfYW5kX2NsZWFyX2JpdCgobnIpLCh1bnNpZ25lZCBsb25nKilhZGRyKQorI2RlZmluZSBleHQyX2NsZWFyX2JpdF9hdG9taWMobG9jayxucixhZGRyKSBcCisJICAgICAgICB0ZXN0X2FuZF9jbGVhcl9iaXQoKG5yKSwodW5zaWduZWQgbG9uZyopYWRkcikKKyNkZWZpbmUgZXh0Ml90ZXN0X2JpdChuciwgYWRkcikgICAgICB0ZXN0X2JpdCgobnIpLCh1bnNpZ25lZCBsb25nKilhZGRyKQorI2RlZmluZSBleHQyX2ZpbmRfZmlyc3RfemVyb19iaXQoYWRkciwgc2l6ZSkgXAorCWZpbmRfZmlyc3RfemVyb19iaXQoKHVuc2lnbmVkIGxvbmcqKWFkZHIsIHNpemUpCisjZGVmaW5lIGV4dDJfZmluZF9uZXh0X3plcm9fYml0KGFkZHIsIHNpemUsIG9mZikgXAorCWZpbmRfbmV4dF96ZXJvX2JpdCgodW5zaWduZWQgbG9uZyopYWRkciwgc2l6ZSwgb2ZmKQorCisvKiBCaXRtYXAgZnVuY3Rpb25zIGZvciB0aGUgbWluaXggZmlsZXN5c3RlbS4gICovCisjZGVmaW5lIG1pbml4X3Rlc3RfYW5kX3NldF9iaXQobnIsYWRkcikgX190ZXN0X2FuZF9zZXRfYml0KG5yLCh2b2lkKilhZGRyKQorI2RlZmluZSBtaW5peF9zZXRfYml0KG5yLGFkZHIpIF9fc2V0X2JpdChuciwodm9pZCopYWRkcikKKyNkZWZpbmUgbWluaXhfdGVzdF9hbmRfY2xlYXJfYml0KG5yLGFkZHIpIF9fdGVzdF9hbmRfY2xlYXJfYml0KG5yLCh2b2lkKilhZGRyKQorI2RlZmluZSBtaW5peF90ZXN0X2JpdChucixhZGRyKSB0ZXN0X2JpdChuciwodm9pZCopYWRkcikKKyNkZWZpbmUgbWluaXhfZmluZF9maXJzdF96ZXJvX2JpdChhZGRyLHNpemUpIFwKKwlmaW5kX2ZpcnN0X3plcm9fYml0KCh2b2lkKilhZGRyLHNpemUpCisKKy8qIGZpbmQgbGFzdCBzZXQgYml0ICovCisjZGVmaW5lIGZscyh4KSBnZW5lcmljX2Zscyh4KQorCisjZGVmaW5lIEFSQ0hfSEFTX0FUT01JQ19VTlNJR05FRCAxCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfWDg2XzY0X0JJVE9QU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvYm9vdC5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2Jvb3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmIyMjhlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L2Jvb3QuaApAQCAtMCwwICsxLDE1IEBACisjaWZuZGVmIF9MSU5VWF9CT09UX0gKKyNkZWZpbmUgX0xJTlVYX0JPT1RfSAorCisvKiBEb24ndCB0b3VjaCB0aGVzZSwgdW5sZXNzIHlvdSByZWFsbHkga25vdyB3aGF0IHlvdSdyZSBkb2luZy4gKi8KKyNkZWZpbmUgREVGX0lOSVRTRUcJMHg5MDAwCisjZGVmaW5lIERFRl9TWVNTRUcJMHgxMDAwCisjZGVmaW5lIERFRl9TRVRVUFNFRwkweDkwMjAKKyNkZWZpbmUgREVGX1NZU1NJWkUJMHg3RjAwCisKKy8qIEludGVybmFsIHN2Z2Egc3RhcnR1cCBjb25zdGFudHMgKi8KKyNkZWZpbmUgTk9STUFMX1ZHQQkweGZmZmYJCS8qIDgweDI1IG1vZGUgKi8KKyNkZWZpbmUgRVhURU5ERURfVkdBCTB4ZmZmZQkJLyogODB4NTAgbW9kZSAqLworI2RlZmluZSBBU0tfVkdBCQkweGZmZmQJCS8qIGFzayBmb3IgaXQgYXQgYm9vdHVwICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2Jvb3RzZXR1cC5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2Jvb3RzZXR1cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1NzBhNDgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvYm9vdHNldHVwLmgKQEAgLTAsMCArMSwzOSBAQAorCisjaWZuZGVmIF9YODZfNjRfQk9PVFNFVFVQX0gKKyNkZWZpbmUgX1g4Nl82NF9CT09UU0VUVVBfSCAxCisKK2V4dGVybiBjaGFyIHg4Nl9ib290X3BhcmFtc1syMDQ4XTsKKworLyoKKyAqIFRoaXMgaXMgc2V0IHVwIGJ5IHRoZSBzZXR1cC1yb3V0aW5lIGF0IGJvb3QtdGltZQorICovCisjZGVmaW5lIFBBUkFNCSgodW5zaWduZWQgY2hhciAqKXg4Nl9ib290X3BhcmFtcykKKyNkZWZpbmUgU0NSRUVOX0lORk8gKCooc3RydWN0IHNjcmVlbl9pbmZvICopIChQQVJBTSswKSkKKyNkZWZpbmUgRVhUX01FTV9LICgqKHVuc2lnbmVkIHNob3J0ICopIChQQVJBTSsyKSkKKyNkZWZpbmUgQUxUX01FTV9LICgqKHVuc2lnbmVkIGludCAqKSAoUEFSQU0rMHgxZTApKQorI2RlZmluZSBFODIwX01BUF9OUiAoKihjaGFyKikgKFBBUkFNK0U4MjBOUikpCisjZGVmaW5lIEU4MjBfTUFQICAgICgoc3RydWN0IGU4MjBlbnRyeSAqKSAoUEFSQU0rRTgyME1BUCkpCisjZGVmaW5lIEFQTV9CSU9TX0lORk8gKCooc3RydWN0IGFwbV9iaW9zX2luZm8gKikgKFBBUkFNKzB4NDApKQorI2RlZmluZSBEUklWRV9JTkZPICgqKHN0cnVjdCBkcml2ZV9pbmZvX3N0cnVjdCAqKSAoUEFSQU0rMHg4MCkpCisjZGVmaW5lIFNZU19ERVNDX1RBQkxFICgqKHN0cnVjdCBzeXNfZGVzY190YWJsZV9zdHJ1Y3QqKShQQVJBTSsweGEwKSkKKyNkZWZpbmUgTU9VTlRfUk9PVF9SRE9OTFkgKCoodW5zaWduZWQgc2hvcnQgKikgKFBBUkFNKzB4MUYyKSkKKyNkZWZpbmUgUkFNRElTS19GTEFHUyAoKih1bnNpZ25lZCBzaG9ydCAqKSAoUEFSQU0rMHgxRjgpKQorI2RlZmluZSBTQVZFRF9WSURFT19NT0RFICgqKHVuc2lnbmVkIHNob3J0ICopIChQQVJBTSsweDFGQSkpCisjZGVmaW5lIE9SSUdfUk9PVF9ERVYgKCoodW5zaWduZWQgc2hvcnQgKikgKFBBUkFNKzB4MUZDKSkKKyNkZWZpbmUgQVVYX0RFVklDRV9JTkZPICgqKHVuc2lnbmVkIGNoYXIgKikgKFBBUkFNKzB4MUZGKSkKKyNkZWZpbmUgTE9BREVSX1RZUEUgKCoodW5zaWduZWQgY2hhciAqKSAoUEFSQU0rMHgyMTApKQorI2RlZmluZSBLRVJORUxfU1RBUlQgKCoodW5zaWduZWQgaW50ICopIChQQVJBTSsweDIxNCkpCisjZGVmaW5lIElOSVRSRF9TVEFSVCAoKih1bnNpZ25lZCBpbnQgKikgKFBBUkFNKzB4MjE4KSkKKyNkZWZpbmUgSU5JVFJEX1NJWkUgKCoodW5zaWduZWQgaW50ICopIChQQVJBTSsweDIxYykpCisjZGVmaW5lIEVESURfSU5GTyAoKihzdHJ1Y3QgZWRpZF9pbmZvICopIChQQVJBTSsweDE0MCkpCisjZGVmaW5lIEVERF9OUiAgICAgKCoodW5zaWduZWQgY2hhciAqKSAoUEFSQU0rRURETlIpKQorI2RlZmluZSBFRERfTUJSX1NJR19OUiAoKih1bnNpZ25lZCBjaGFyICopIChQQVJBTStFRERfTUJSX1NJR19OUl9CVUYpKQorI2RlZmluZSBFRERfTUJSX1NJR05BVFVSRSAoKHVuc2lnbmVkIGludCAqKSAoUEFSQU0rRUREX01CUl9TSUdfQlVGKSkKKyNkZWZpbmUgRUREX0JVRiAgICAgKChzdHJ1Y3QgZWRkX2luZm8gKikgKFBBUkFNK0VEREJVRikpCisjZGVmaW5lIENPTU1BTkRfTElORSBzYXZlZF9jb21tYW5kX2xpbmUKKworI2RlZmluZSBSQU1ESVNLX0lNQUdFX1NUQVJUX01BU0sgIAkweDA3RkYKKyNkZWZpbmUgUkFNRElTS19QUk9NUFRfRkxBRwkJMHg4MDAwCisjZGVmaW5lIFJBTURJU0tfTE9BRF9GTEFHCQkweDQwMDAJCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2J1Zy5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2J1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyMDMyZjUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvYnVnLmgKQEAgLTAsMCArMSwyNSBAQAorI2lmbmRlZiBfX0FTTV9YODY2NF9CVUdfSAorI2RlZmluZSBfX0FTTV9YODY2NF9CVUdfSCAxCisKKyNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KKworLyoKKyAqIFRlbGwgdGhlIHVzZXIgdGhlcmUgaXMgc29tZSBwcm9ibGVtLiAgVGhlIGV4Y2VwdGlvbiBoYW5kbGVyIGRlY29kZXMgCisgKiB0aGlzIGZyYW1lLgorICovCitzdHJ1Y3QgYnVnX2ZyYW1lIHsKKyAgICAgICB1bnNpZ25lZCBjaGFyIHVkMlsyXTsKKwkvKiBzaG91bGQgdXNlIDMyYml0IG9mZnNldCBpbnN0ZWFkLCBidXQgdGhlIGFzc2VtYmxlciBkb2Vzbid0IAorCSAgIGxpa2UgaXQgKi8KKwljaGFyICpmaWxlbmFtZTsKKwl1bnNpZ25lZCBzaG9ydCBsaW5lOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBIQVZFX0FSQ0hfQlVHCisjZGVmaW5lIEJVRygpIFwKKwlhc20gdm9sYXRpbGUoInVkMiA7IC5xdWFkICVjMSA7IC5zaG9ydCAlYzAiIDo6IFwKKwkJICAgICAiaSIoX19MSU5FX18pLCAiaSIgKF9fc3RyaW5naWZ5KEtCVUlMRF9CQVNFTkFNRSkpKQordm9pZCBvdXRfb2ZfbGluZV9idWcodm9pZCk7CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYnVnLmg+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2J1Z3MuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9idWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTliYzY4OQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9idWdzLmgKQEAgLTAsMCArMSwyOSBAQAorLyoKKyAqICBpbmNsdWRlL2FzbS14ODZfNjQvYnVncy5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NCAgTGludXMgVG9ydmFsZHMKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDAgIFN1U0UKKyAqCisgKiBUaGlzIGlzIGluY2x1ZGVkIGJ5IGluaXQvbWFpbi5jIHRvIGNoZWNrIGZvciBhcmNoaXRlY3R1cmUtZGVwZW5kZW50IGJ1Z3MuCisgKgorICogTmVlZHM6CisgKgl2b2lkIGNoZWNrX2J1Z3Modm9pZCk7CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vaTM4Ny5oPgorI2luY2x1ZGUgPGFzbS9tc3IuaD4KKyNpbmNsdWRlIDxhc20vcGRhLmg+CisKK2V4dGVybiB2b2lkIGFsdGVybmF0aXZlX2luc3RydWN0aW9ucyh2b2lkKTsKKworc3RhdGljIHZvaWQgX19pbml0IGNoZWNrX2J1Z3Modm9pZCkKK3sKKwlpZGVudGlmeV9jcHUoJmJvb3RfY3B1X2RhdGEpOworI2lmICFkZWZpbmVkKENPTkZJR19TTVApCisJcHJpbnRrKCJDUFU6ICIpOworCXByaW50X2NwdV9pbmZvKCZib290X2NwdV9kYXRhKTsKKyNlbmRpZgorCWFsdGVybmF0aXZlX2luc3RydWN0aW9ucygpOyAKK30KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9ieXRlb3JkZXIuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9ieXRlb3JkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTg2Yzg2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L2J5dGVvcmRlci5oCkBAIC0wLDAgKzEsMzMgQEAKKyNpZm5kZWYgX1g4Nl82NF9CWVRFT1JERVJfSAorI2RlZmluZSBfWDg2XzY0X0JZVEVPUkRFUl9ICisKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorCisjaWZkZWYgX19HTlVDX18KKworc3RhdGljIF9faW5saW5lX18gX19hdHRyaWJ1dGVfY29uc3RfXyBfX3U2NCBfX19hcmNoX19zd2FiNjQoX191NjQgeCkKK3sKKwlfX2FzbV9fKCJic3dhcHEgJTAiIDogIj1yIiAoeCkgOiAiMCIgKHgpKTsKKwlyZXR1cm4geDsKK30KKworc3RhdGljIF9faW5saW5lX18gX19hdHRyaWJ1dGVfY29uc3RfXyBfX3UzMiBfX19hcmNoX19zd2FiMzIoX191MzIgeCkKK3sKKwlfX2FzbV9fKCJic3dhcGwgJTAiIDogIj1yIiAoeCkgOiAiMCIgKHgpKTsKKwlyZXR1cm4geDsKK30KKworLyogRG8gbm90IGRlZmluZSBzd2FiMTYuICBHY2MgaXMgc21hcnQgZW5vdWdoIHRvIHJlY29nbml6ZSAiQyIgdmVyc2lvbiBhbmQKKyAgIGNvbnZlcnQgaXQgaW50byByb3RhdGlvbiBvciBleGhhbmdlLiAgKi8KKworI2RlZmluZSBfX2FyY2hfX3N3YWIzMih4KSBfX19hcmNoX19zd2FiMzIoeCkKKyNkZWZpbmUgX19hcmNoX19zd2FiNjQoeCkgX19fYXJjaF9fc3dhYjY0KHgpCisKKyNlbmRpZiAvKiBfX0dOVUNfXyAqLworCisjZGVmaW5lIF9fQllURU9SREVSX0hBU19VNjRfXworCisjaW5jbHVkZSA8bGludXgvYnl0ZW9yZGVyL2xpdHRsZV9lbmRpYW4uaD4KKworI2VuZGlmIC8qIF9YODZfNjRfQllURU9SREVSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9jYWNoZS5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2NhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRhNjJiYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9jYWNoZS5oCkBAIC0wLDAgKzEsMTQgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS14ODY2NC9jYWNoZS5oCisgKi8KKyNpZm5kZWYgX19BUkNIX1g4NjY0X0NBQ0hFX0gKKyNkZWZpbmUgX19BUkNIX1g4NjY0X0NBQ0hFX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisvKiBMMSBjYWNoZSBsaW5lIHNpemUgKi8KKyNkZWZpbmUgTDFfQ0FDSEVfU0hJRlQJKENPTkZJR19YODZfTDFfQ0FDSEVfU0hJRlQpCisjZGVmaW5lIEwxX0NBQ0hFX0JZVEVTCSgxIDw8IEwxX0NBQ0hFX1NISUZUKQorI2RlZmluZSBMMV9DQUNIRV9TSElGVF9NQVggNgkvKiBsYXJnZXN0IEwxIHdoaWNoIHRoaXMgYXJjaCBzdXBwb3J0cyAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9jYWNoZWZsdXNoLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvY2FjaGVmbHVzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMTg5ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvY2FjaGVmbHVzaC5oCkBAIC0wLDAgKzEsMzAgQEAKKyNpZm5kZWYgX1g4NjY0X0NBQ0hFRkxVU0hfSAorI2RlZmluZSBfWDg2NjRfQ0FDSEVGTFVTSF9ICisKKy8qIEtlZXAgaW5jbHVkZXMgdGhlIHNhbWUgYWNyb3NzIGFyY2hlcy4gICovCisjaW5jbHVkZSA8bGludXgvbW0uaD4KKworLyogQ2FjaGVzIGFyZW4ndCBicmFpbi1kZWFkIG9uIHRoZSBpbnRlbC4gKi8KKyNkZWZpbmUgZmx1c2hfY2FjaGVfYWxsKCkJCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2NhY2hlX21tKG1tKQkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfcmFuZ2Uodm1hLCBzdGFydCwgZW5kKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2NhY2hlX3BhZ2Uodm1hLCB2bWFkZHIsIHBmbikJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9kY2FjaGVfcGFnZShwYWdlKQkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfZGNhY2hlX21tYXBfbG9jayhtYXBwaW5nKQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9kY2FjaGVfbW1hcF91bmxvY2sobWFwcGluZykJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9pY2FjaGVfcmFuZ2Uoc3RhcnQsIGVuZCkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfaWNhY2hlX3BhZ2Uodm1hLHBnKQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9pY2FjaGVfdXNlcl9yYW5nZSh2bWEscGcsYWRyLGxlbikJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9jYWNoZV92bWFwKHN0YXJ0LCBlbmQpCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2NhY2hlX3Z1bm1hcChzdGFydCwgZW5kKQkJZG8geyB9IHdoaWxlICgwKQorCisjZGVmaW5lIGNvcHlfdG9fdXNlcl9wYWdlKHZtYSwgcGFnZSwgdmFkZHIsIGRzdCwgc3JjLCBsZW4pIFwKKwltZW1jcHkoZHN0LCBzcmMsIGxlbikKKyNkZWZpbmUgY29weV9mcm9tX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIHZhZGRyLCBkc3QsIHNyYywgbGVuKSBcCisJbWVtY3B5KGRzdCwgc3JjLCBsZW4pCisKK3ZvaWQgZ2xvYmFsX2ZsdXNoX3RsYih2b2lkKTsgCitpbnQgY2hhbmdlX3BhZ2VfYXR0cihzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG51bXBhZ2VzLCBwZ3Byb3RfdCBwcm90KTsKK2ludCBjaGFuZ2VfcGFnZV9hdHRyX2FkZHIodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMsIHBncHJvdF90IHByb3QpOworCisjZW5kaWYgLyogX1g4NjY0X0NBQ0hFRkxVU0hfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2NhbGxpbmcuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9jYWxsaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJjMTI2NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9jYWxsaW5nLmgKQEAgLTAsMCArMSwxNTYgQEAKKy8qIAorICogU29tZSBtYWNyb3MgdG8gaGFuZGxlIHN0YWNrIGZyYW1lcyBpbiBhc3NlbWJseS4KKyAqLyAKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjZGVmaW5lIFIxNSAwCisjZGVmaW5lIFIxNCA4CisjZGVmaW5lIFIxMyAxNgorI2RlZmluZSBSMTIgMjQKKyNkZWZpbmUgUkJQIDMyCisjZGVmaW5lIFJCWCA0MAorLyogYXJndW1lbnRzOiBpbnRlcnJ1cHRzL25vbiB0cmFjaW5nIHN5c2NhbGxzIG9ubHkgc2F2ZSB1cHRvIGhlcmUqLworI2RlZmluZSBSMTEgNDgKKyNkZWZpbmUgUjEwIDU2CQorI2RlZmluZSBSOSA2NAorI2RlZmluZSBSOCA3MgorI2RlZmluZSBSQVggODAKKyNkZWZpbmUgUkNYIDg4CisjZGVmaW5lIFJEWCA5NgorI2RlZmluZSBSU0kgMTA0CisjZGVmaW5lIFJESSAxMTIKKyNkZWZpbmUgT1JJR19SQVggMTIwICAgICAgIC8qICsgZXJyb3JfY29kZSAqLyAKKy8qIGVuZCBvZiBhcmd1bWVudHMgKi8gCQorLyogY3B1IGV4Y2VwdGlvbiBmcmFtZSBvciB1bmRlZmluZWQgaW4gY2FzZSBvZiBmYXN0IHN5c2NhbGwuICovCisjZGVmaW5lIFJJUCAxMjgKKyNkZWZpbmUgQ1MgMTM2CisjZGVmaW5lIEVGTEFHUyAxNDQKKyNkZWZpbmUgUlNQIDE1MgorI2RlZmluZSBTUyAxNjAKKyNkZWZpbmUgQVJHT0ZGU0VUIFIxMQorI2RlZmluZSBTV0ZSQU1FIE9SSUdfUkFYCisKKwkubWFjcm8gU0FWRV9BUkdTIGFkZHNraXA9MCxub3JjeD0wLG5vcjg5MTAxMT0wCisJc3VicSAgJDkqOCtcYWRkc2tpcCwlcnNwCisJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUCTkqOCtcYWRkc2tpcAorCW1vdnEgICVyZGksOCo4KCVyc3ApIAorCUNGSV9SRUxfT0ZGU0VUCXJkaSw4KjgKKwltb3ZxICAlcnNpLDcqOCglcnNwKSAKKwlDRklfUkVMX09GRlNFVAlyc2ksNyo4CisJbW92cSAgJXJkeCw2KjgoJXJzcCkKKwlDRklfUkVMX09GRlNFVAlyZHgsNio4CisJLmlmIFxub3JjeAorCS5lbHNlCisJbW92cSAgJXJjeCw1KjgoJXJzcCkKKwlDRklfUkVMX09GRlNFVAlyY3gsNSo4CisJLmVuZGlmCisJbW92cSAgJXJheCw0KjgoJXJzcCkgCisJQ0ZJX1JFTF9PRkZTRVQJcmF4LDQqOAorCS5pZiBcbm9yODkxMDExCisJLmVsc2UKKwltb3ZxICAlcjgsMyo4KCVyc3ApIAorCUNGSV9SRUxfT0ZGU0VUCXI4LDMqOAorCW1vdnEgICVyOSwyKjgoJXJzcCkgCisJQ0ZJX1JFTF9PRkZTRVQJcjksMio4CisJbW92cSAgJXIxMCwxKjgoJXJzcCkgCisJQ0ZJX1JFTF9PRkZTRVQJcjEwLDEqOAorCW1vdnEgICVyMTEsKCVyc3ApIAorCUNGSV9SRUxfT0ZGU0VUCXIxMSwwKjgKKwkuZW5kaWYKKwkuZW5kbQorCisjZGVmaW5lIEFSR19TS0lQIDkqOAorCS5tYWNybyBSRVNUT1JFX0FSR1Mgc2tpcHJheD0wLGFkZHNraXA9MCxza2lwcmN4PTAsc2tpcHIxMT0wLHNraXByODkxMD0wLHNraXByZHg9MAorCS5pZiBcc2tpcHIxMQorCS5lbHNlCisJbW92cSAoJXJzcCksJXIxMQorCS5lbmRpZgorCS5pZiBcc2tpcHI4OTEwCisJLmVsc2UKKwltb3ZxIDEqOCglcnNwKSwlcjEwCisJbW92cSAyKjgoJXJzcCksJXI5CisJbW92cSAzKjgoJXJzcCksJXI4CisJLmVuZGlmCisJLmlmIFxza2lwcmF4CisJLmVsc2UKKwltb3ZxIDQqOCglcnNwKSwlcmF4CisJLmVuZGlmCisJLmlmIFxza2lwcmN4CisJLmVsc2UKKwltb3ZxIDUqOCglcnNwKSwlcmN4CisJLmVuZGlmCisJLmlmIFxza2lwcmR4CisJLmVsc2UKKwltb3ZxIDYqOCglcnNwKSwlcmR4CisJLmVuZGlmCisJbW92cSA3KjgoJXJzcCksJXJzaQorCW1vdnEgOCo4KCVyc3ApLCVyZGkKKwkuaWYgQVJHX1NLSVArXGFkZHNraXAgPiAwCisJYWRkcSAkQVJHX1NLSVArXGFkZHNraXAsJXJzcAorCUNGSV9BREpVU1RfQ0ZBX09GRlNFVAktKEFSR19TS0lQK1xhZGRza2lwKQorCS5lbmRpZgorCS5lbmRtCQorCisJLm1hY3JvIExPQURfQVJHUyBvZmZzZXQKKwltb3ZxIFxvZmZzZXQoJXJzcCksJXIxMQorCW1vdnEgXG9mZnNldCs4KCVyc3ApLCVyMTAKKwltb3ZxIFxvZmZzZXQrMTYoJXJzcCksJXI5CisJbW92cSBcb2Zmc2V0KzI0KCVyc3ApLCVyOAorCW1vdnEgXG9mZnNldCs0MCglcnNwKSwlcmN4CisJbW92cSBcb2Zmc2V0KzQ4KCVyc3ApLCVyZHgKKwltb3ZxIFxvZmZzZXQrNTYoJXJzcCksJXJzaQorCW1vdnEgXG9mZnNldCs2NCglcnNwKSwlcmRpCisJbW92cSBcb2Zmc2V0KzcyKCVyc3ApLCVyYXgKKwkuZW5kbQorCQkJCisjZGVmaW5lIFJFU1RfU0tJUCA2KjgJCQkKKwkubWFjcm8gU0FWRV9SRVNUCisJc3VicSAkUkVTVF9TS0lQLCVyc3AKKwlDRklfQURKVVNUX0NGQV9PRkZTRVQJUkVTVF9TS0lQCisJbW92cSAlcmJ4LDUqOCglcnNwKSAKKwlDRklfUkVMX09GRlNFVAlyYngsNSo4CisJbW92cSAlcmJwLDQqOCglcnNwKSAKKwlDRklfUkVMX09GRlNFVAlyYnAsNCo4CisJbW92cSAlcjEyLDMqOCglcnNwKSAKKwlDRklfUkVMX09GRlNFVAlyMTIsMyo4CisJbW92cSAlcjEzLDIqOCglcnNwKSAKKwlDRklfUkVMX09GRlNFVAlyMTMsMio4CisJbW92cSAlcjE0LDEqOCglcnNwKSAKKwlDRklfUkVMX09GRlNFVAlyMTQsMSo4CisJbW92cSAlcjE1LCglcnNwKSAKKwlDRklfUkVMX09GRlNFVAlyMTUsMCo4CisJLmVuZG0JCQorCisJLm1hY3JvIFJFU1RPUkVfUkVTVAorCW1vdnEgKCVyc3ApLCVyMTUKKwltb3ZxIDEqOCglcnNwKSwlcjE0CisJbW92cSAyKjgoJXJzcCksJXIxMworCW1vdnEgMyo4KCVyc3ApLCVyMTIKKwltb3ZxIDQqOCglcnNwKSwlcmJwCisJbW92cSA1KjgoJXJzcCksJXJieAorCWFkZHEgJFJFU1RfU0tJUCwlcnNwCisJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUCS0oUkVTVF9TS0lQKQorCS5lbmRtCisJCQorCS5tYWNybyBTQVZFX0FMTAorCVNBVkVfQVJHUworCVNBVkVfUkVTVAorCS5lbmRtCisJCQorCS5tYWNybyBSRVNUT1JFX0FMTCBhZGRza2lwPTAKKwlSRVNUT1JFX1JFU1QKKwlSRVNUT1JFX0FSR1MgMCxcYWRkc2tpcAorCS5lbmRtCisKKwkubWFjcm8gaWNlYnAKKwkuYnl0ZSAweGYxCisJLmVuZG0KKworI2lmZGVmIENPTkZJR19GUkFNRV9QT0lOVEVSCisjZGVmaW5lIEVOVEVSIGVudGVyCisjZGVmaW5lIExFQVZFIGxlYXZlCisjZWxzZQorI2RlZmluZSBFTlRFUgorI2RlZmluZSBMRUFWRQorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvY2hlY2tzdW0uaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9jaGVja3N1bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwMTM1NmYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvY2hlY2tzdW0uaApAQCAtMCwwICsxLDE5MyBAQAorI2lmbmRlZiBfWDg2XzY0X0NIRUNLU1VNX0gKKyNkZWZpbmUgX1g4Nl82NF9DSEVDS1NVTV9ICisKKy8qIAorICogQ2hlY2tzdW1zIGZvciB4ODYtNjQgCisgKiBDb3B5cmlnaHQgMjAwMiBieSBBbmRpIEtsZWVuLCBTdVNFIExhYnMgCisgKiB3aXRoIHNvbWUgY29kZSBmcm9tIGFzbS1pMzg2L2NoZWNrc3VtLmgKKyAqLyAKKworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisKKy8qKiAKKyAqIGNzdW1fZm9sZCAtIEZvbGQgYW5kIGludmVydCBhIDMyYml0IGNoZWNrc3VtLgorICogc3VtOiAzMmJpdCB1bmZvbGRlZCBzdW0KKyAqIAorICogRm9sZCBhIDMyYml0IHJ1bm5pbmcgY2hlY2tzdW0gdG8gMTZiaXQgYW5kIGludmVydCBpdC4gVGhpcyBpcyB1c3VhbGx5CisgKiB0aGUgbGFzdCBzdGVwIGJlZm9yZSBwdXR0aW5nIGEgY2hlY2tzdW0gaW50byBhIHBhY2tldC4KKyAqIE1ha2Ugc3VyZSBub3QgdG8gbWl4IHdpdGggNjRiaXQgY2hlY2tzdW1zLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjc3VtX2ZvbGQodW5zaWduZWQgaW50IHN1bSkKK3sKKwlfX2FzbV9fKAorCQkiICBhZGRsICUxLCUwXG4iCisJCSIgIGFkY2wgJDB4ZmZmZiwlMCIKKwkJOiAiPXIiIChzdW0pCisJCTogInIiIChzdW0gPDwgMTYpLCAiMCIgKHN1bSAmIDB4ZmZmZjAwMDApCisJKTsKKwlyZXR1cm4gKH5zdW0pID4+IDE2OworfQorCisvKgorICoJVGhpcyBpcyBhIHZlcnNpb24gb2YgaXBfY29tcHV0ZV9jc3VtKCkgb3B0aW1pemVkIGZvciBJUCBoZWFkZXJzLAorICoJd2hpY2ggYWx3YXlzIGNoZWNrc3VtIG9uIDQgb2N0ZXQgYm91bmRhcmllcy4KKyAqCisgKglCeSBKb3JnZSBDd2lrIDxqb3JnZUBsYXNlci5zYXRsaW5rLm5ldD4sIGFkYXB0ZWQgZm9yIGxpbnV4IGJ5CisgKglBcm50IEd1bGJyYW5kc2VuLgorICovCisKKy8qKgorICogaXBfZmFzdF9jc3VtIC0gQ29tcHV0ZSB0aGUgSVB2NCBoZWFkZXIgY2hlY2tzdW0gZWZmaWNpZW50bHkuCisgKiBpcGg6IGlwdjQgaGVhZGVyCisgKiBpaGw6IGxlbmd0aCBvZiBoZWFkZXIgLyA0CisgKi8gCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IGlwX2Zhc3RfY3N1bSh1bnNpZ25lZCBjaGFyICppcGgsIHVuc2lnbmVkIGludCBpaGwpIAoreworCXVuc2lnbmVkIGludCBzdW07CisKKwlhc20oCSIgIG1vdmwgKCUxKSwgJTBcbiIKKwkJIiAgc3VibCAkNCwgJTJcbiIKKwkJIiAgamJlIDJmXG4iCisJCSIgIGFkZGwgNCglMSksICUwXG4iCisJCSIgIGFkY2wgOCglMSksICUwXG4iCisJCSIgIGFkY2wgMTIoJTEpLCAlMFxuIgorCQkiMTogYWRjbCAxNiglMSksICUwXG4iCisJCSIgIGxlYSA0KCUxKSwgJTFcbiIKKwkJIiAgZGVjbCAlMlxuIgorCQkiICBqbmUJMWJcbiIKKwkJIiAgYWRjbCAkMCwgJTBcbiIKKwkJIiAgbW92bCAlMCwgJTJcbiIKKwkJIiAgc2hybCAkMTYsICUwXG4iCisJCSIgIGFkZHcgJXcyLCAldzBcbiIKKwkJIiAgYWRjbCAkMCwgJTBcbiIKKwkJIiAgbm90bCAlMFxuIgorCQkiMjoiCisJLyogU2luY2UgdGhlIGlucHV0IHJlZ2lzdGVycyB3aGljaCBhcmUgbG9hZGVkIHdpdGggaXBoIGFuZCBpcGwKKwkgICBhcmUgbW9kaWZpZWQsIHdlIG11c3QgYWxzbyBzcGVjaWZ5IHRoZW0gYXMgb3V0cHV0cywgb3IgZ2NjCisJICAgd2lsbCBhc3N1bWUgdGhleSBjb250YWluIHRoZWlyIG9yaWdpbmFsIHZhbHVlcy4gKi8KKwk6ICI9ciIgKHN1bSksICI9ciIgKGlwaCksICI9ciIgKGlobCkKKwk6ICIxIiAoaXBoKSwgIjIiIChpaGwpCisJOiAibWVtb3J5Iik7CisJcmV0dXJuKHN1bSk7Cit9CisKKy8qKiAKKyAqIGNzdW1fdGNwdXBfbm9mb2xkIC0gQ29tcHV0ZSBhbiBJUHY0IHBzZXVkbyBoZWFkZXIgY2hlY2tzdW0uCisgKiBAc2FkZHI6IHNvdXJjZSBhZGRyZXNzCisgKiBAZGFkZHI6IGRlc3RpbmF0aW9uIGFkZHJlc3MKKyAqIEBsZW46IGxlbmd0aCBvZiBwYWNrZXQKKyAqIEBwcm90bzogaXAgcHJvdG9jb2wgb2YgcGFja2V0CisgKiBAc3VtOiBpbml0aWFsIHN1bSB0byBiZSBhZGRlZCBpbiAoMzJiaXQgdW5mb2xkZWQpIAorICogCisgKiBSZXR1cm5zIHRoZSBwc2V1ZG8gaGVhZGVyIGNoZWNrc3VtIHRoZSBpbnB1dCBkYXRhLiBSZXN1bHQgaXMgCisgKiAzMmJpdCB1bmZvbGRlZC4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIAorY3N1bV90Y3B1ZHBfbm9mb2xkKHVuc2lnbmVkIHNhZGRyLCB1bnNpZ25lZCBkYWRkciwgdW5zaWduZWQgc2hvcnQgbGVuLAorCQkgICB1bnNpZ25lZCBzaG9ydCBwcm90bywgdW5zaWduZWQgaW50IHN1bSkgCit7CisJYXNtKCIgIGFkZGwgJTEsICUwXG4iCisJICAgICIgIGFkY2wgJTIsICUwXG4iCisJICAgICIgIGFkY2wgJTMsICUwXG4iCisJICAgICIgIGFkY2wgJDAsICUwXG4iCisJCTogIj1yIiAoc3VtKQorCSAgICA6ICJnIiAoZGFkZHIpLCAiZyIgKHNhZGRyKSwgImciICgobnRvaHMobGVuKTw8MTYpK3Byb3RvKjI1NiksICIwIiAoc3VtKSk7CisgICAgcmV0dXJuIHN1bTsKK30KKworCisvKiogCisgKiBjc3VtX3RjcHVwX21hZ2ljIC0gQ29tcHV0ZSBhbiBJUHY0IHBzZXVkbyBoZWFkZXIgY2hlY2tzdW0uCisgKiBAc2FkZHI6IHNvdXJjZSBhZGRyZXNzCisgKiBAZGFkZHI6IGRlc3RpbmF0aW9uIGFkZHJlc3MKKyAqIEBsZW46IGxlbmd0aCBvZiBwYWNrZXQKKyAqIEBwcm90bzogaXAgcHJvdG9jb2wgb2YgcGFja2V0CisgKiBAc3VtOiBpbml0aWFsIHN1bSB0byBiZSBhZGRlZCBpbiAoMzJiaXQgdW5mb2xkZWQpIAorICogCisgKiBSZXR1cm5zIHRoZSAxNmJpdCBwc2V1ZG8gaGVhZGVyIGNoZWNrc3VtIHRoZSBpbnB1dCBkYXRhIGFscmVhZHkKKyAqIGNvbXBsZW1lbnRlZCBhbmQgcmVhZHkgdG8gYmUgZmlsbGVkIGluLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IGludCAKK2NzdW1fdGNwdWRwX21hZ2ljKHVuc2lnbmVkIGxvbmcgc2FkZHIsIHVuc2lnbmVkIGxvbmcgZGFkZHIsCisJCSAgdW5zaWduZWQgc2hvcnQgbGVuLCB1bnNpZ25lZCBzaG9ydCBwcm90bywgdW5zaWduZWQgaW50IHN1bSkgCit7CisJcmV0dXJuIGNzdW1fZm9sZChjc3VtX3RjcHVkcF9ub2ZvbGQoc2FkZHIsZGFkZHIsbGVuLHByb3RvLHN1bSkpOworfQorCisvKiogCisgKiBjc3VtX3BhcnRpYWwgLSBDb21wdXRlIGFuIGludGVybmV0IGNoZWNrc3VtLgorICogQGJ1ZmY6IGJ1ZmZlciB0byBiZSBjaGVja3N1bW1lZAorICogQGxlbjogbGVuZ3RoIG9mIGJ1ZmZlci4KKyAqIEBzdW06IGluaXRpYWwgc3VtIHRvIGJlIGFkZGVkIGluICgzMmJpdCB1bmZvbGRlZCkKKyAqCisgKiBSZXR1cm5zIHRoZSAzMmJpdCB1bmZvbGRlZCBpbnRlcm5ldCBjaGVja3N1bSBvZiB0aGUgYnVmZmVyLgorICogQmVmb3JlIGZpbGxpbmcgaXQgaW4gaXQgbmVlZHMgdG8gYmUgY3N1bV9mb2xkKCknZWQuCisgKiBidWZmIHNob3VsZCBiZSBhbGlnbmVkIHRvIGEgNjRiaXQgYm91bmRhcnkgaWYgcG9zc2libGUuCisgKi8gCitleHRlcm4gdW5zaWduZWQgaW50IGNzdW1fcGFydGlhbChjb25zdCB1bnNpZ25lZCBjaGFyICpidWZmLCB1bnNpZ25lZCBsZW4sIHVuc2lnbmVkIGludCBzdW0pOworCisjZGVmaW5lICBfSEFWRV9BUkNIX0NPUFlfQU5EX0NTVU1fRlJPTV9VU0VSIDEKKyNkZWZpbmUgSEFWRV9DU1VNX0NPUFlfVVNFUiAxCisKKworLyogRG8gbm90IGNhbGwgdGhpcyBkaXJlY3RseS4gVXNlIHRoZSB3cmFwcGVycyBiZWxvdyAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgY3N1bV9wYXJ0aWFsX2NvcHlfZ2VuZXJpYyhjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRzdCwKKwkJCQkJICAgICAgIHVuc2lnbmVkIGxlbiwKKwkJCQkJICAgICAgIHVuc2lnbmVkIHN1bSwgCisJCQkJCSAgICAgICBpbnQgKnNyY19lcnJfcHRyLCBpbnQgKmRzdF9lcnJfcHRyKTsKKworCitleHRlcm4gdW5zaWduZWQgaW50IGNzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlcihjb25zdCB1bnNpZ25lZCBjaGFyIF9fdXNlciAqc3JjLCB1bnNpZ25lZCBjaGFyICpkc3QsCisJCQkJICAgICAgIGludCBsZW4sIHVuc2lnbmVkIGludCBpc3VtLCBpbnQgKmVycnApOworZXh0ZXJuIHVuc2lnbmVkIGludCBjc3VtX3BhcnRpYWxfY29weV90b191c2VyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYywgdW5zaWduZWQgY2hhciBfX3VzZXIgKmRzdCwKKwkJCQkgICAgICBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgaXN1bSwgaW50ICplcnJwKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgY3N1bV9wYXJ0aWFsX2NvcHlfbm9jaGVjayhjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMsIHVuc2lnbmVkIGNoYXIgKmRzdCwgaW50IGxlbiwKKwkJCQkJICAgICAgdW5zaWduZWQgaW50IHN1bSk7CisKKy8qIE9sZCBuYW1lcy4gVG8gYmUgcmVtb3ZlZC4gKi8KKyNkZWZpbmUgY3N1bV9hbmRfY29weV90b191c2VyIGNzdW1fcGFydGlhbF9jb3B5X3RvX3VzZXIKKyNkZWZpbmUgY3N1bV9hbmRfY29weV9mcm9tX3VzZXIgY3N1bV9wYXJ0aWFsX2NvcHlfZnJvbV91c2VyCisKKy8qKiAKKyAqIGlwX2NvbXB1dGVfY3N1bSAtIENvbXB1dGUgYW4gMTZiaXQgSVAgY2hlY2tzdW0uCisgKiBAYnVmZjogYnVmZmVyIGFkZHJlc3MuCisgKiBAbGVuOiBsZW5ndGggb2YgYnVmZmVyLgorICoKKyAqIFJldHVybnMgdGhlIDE2Yml0IGZvbGRlZC9pbnZlcnRlZCBjaGVja3N1bSBvZiB0aGUgcGFzc2VkIGJ1ZmZlci4KKyAqIFJlYWR5IHRvIGZpbGwgaW4uCisgKi8KK2V4dGVybiB1bnNpZ25lZCBzaG9ydCBpcF9jb21wdXRlX2NzdW0odW5zaWduZWQgY2hhciAqIGJ1ZmYsIGludCBsZW4pOworCisvKioKKyAqIGNzdW1faXB2Nl9tYWdpYyAtIENvbXB1dGUgY2hlY2tzdW0gb2YgYW4gSVB2NiBwc2V1ZG8gaGVhZGVyLgorICogQHNhZGRyOiBzb3VyY2UgYWRkcmVzcworICogQGRhZGRyOiBkZXN0aW5hdGlvbiBhZGRyZXNzCisgKiBAbGVuOiBsZW5ndGggb2YgcGFja2V0CisgKiBAcHJvdG86IHByb3RvY29sIG9mIHBhY2tldAorICogQHN1bTogaW5pdGlhbCBzdW0gKDMyYml0IHVuZm9sZGVkKSB0byBiZSBhZGRlZCBpbgorICoKKyAqIENvbXB1dGVzIGFuIElQdjYgcHNldWRvIGhlYWRlciBjaGVja3N1bS4gVGhpcyBzdW0gaXMgYWRkZWQgdGhlIGNoZWNrc3VtIAorICogaW50byBVRFAvVENQIHBhY2tldHMgYW5kIGNvbnRhaW5zIHNvbWUgbGluayBsYXllciBpbmZvcm1hdGlvbi4KKyAqIFJldHVybnMgdGhlIHVuZm9sZGVkIDMyYml0IGNoZWNrc3VtLgorICovCisKK3N0cnVjdCBpbjZfYWRkcjsKKworI2RlZmluZSBfSEFWRV9BUkNIX0lQVjZfQ1NVTSAxCitleHRlcm4gdW5zaWduZWQgc2hvcnQgCitjc3VtX2lwdjZfbWFnaWMoc3RydWN0IGluNl9hZGRyICpzYWRkciwgc3RydWN0IGluNl9hZGRyICpkYWRkciwKKwkJX191MzIgbGVuLCB1bnNpZ25lZCBzaG9ydCBwcm90bywgdW5zaWduZWQgaW50IHN1bSk7CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgYWRkMzJfd2l0aF9jYXJyeSh1bnNpZ25lZCBhLCB1bnNpZ25lZCBiKQoreworCWFzbSgiYWRkbCAlMiwlMFxuXHQiCisJICAgICJhZGNsICQwLCUwIiAKKwkgICAgOiAiPXIiIChhKSAKKwkgICAgOiAiMCIgKGEpLCAiciIgKGIpKTsKKwlyZXR1cm4gYTsKK30KKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9jb21wYXQuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9jb21wYXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGY0NTNjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L2NvbXBhdC5oCkBAIC0wLDAgKzEsMjA1IEBACisjaWZuZGVmIF9BU01fWDg2XzY0X0NPTVBBVF9ICisjZGVmaW5lIF9BU01fWDg2XzY0X0NPTVBBVF9ICisKKy8qCisgKiBBcmNoaXRlY3R1cmUgc3BlY2lmaWMgY29tcGF0aWJpbGl0eSB0eXBlcworICovCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorCisjZGVmaW5lIENPTVBBVF9VU0VSX0haCTEwMAorCit0eXBlZGVmIHUzMgkJY29tcGF0X3NpemVfdDsKK3R5cGVkZWYgczMyCQljb21wYXRfc3NpemVfdDsKK3R5cGVkZWYgczMyCQljb21wYXRfdGltZV90OwordHlwZWRlZiBzMzIJCWNvbXBhdF9jbG9ja190OwordHlwZWRlZiBzMzIJCWNvbXBhdF9waWRfdDsKK3R5cGVkZWYgdTE2CQljb21wYXRfdWlkX3Q7Cit0eXBlZGVmIHUxNgkJY29tcGF0X2dpZF90OwordHlwZWRlZiB1MzIJCWNvbXBhdF91aWQzMl90OwordHlwZWRlZiB1MzIJCWNvbXBhdF9naWQzMl90OwordHlwZWRlZiB1MTYJCWNvbXBhdF9tb2RlX3Q7Cit0eXBlZGVmIHUzMgkJY29tcGF0X2lub190OwordHlwZWRlZiB1MTYJCWNvbXBhdF9kZXZfdDsKK3R5cGVkZWYgczMyCQljb21wYXRfb2ZmX3Q7Cit0eXBlZGVmIHM2NAkJY29tcGF0X2xvZmZfdDsKK3R5cGVkZWYgdTE2CQljb21wYXRfbmxpbmtfdDsKK3R5cGVkZWYgdTE2CQljb21wYXRfaXBjX3BpZF90OwordHlwZWRlZiBzMzIJCWNvbXBhdF9kYWRkcl90OwordHlwZWRlZiB1MzIJCWNvbXBhdF9jYWRkcl90OwordHlwZWRlZiBfX2tlcm5lbF9mc2lkX3QJY29tcGF0X2ZzaWRfdDsKK3R5cGVkZWYgczMyCQljb21wYXRfdGltZXJfdDsKK3R5cGVkZWYgczMyCQljb21wYXRfa2V5X3Q7CisKK3R5cGVkZWYgczMyCQljb21wYXRfaW50X3Q7Cit0eXBlZGVmIHMzMgkJY29tcGF0X2xvbmdfdDsKK3R5cGVkZWYgdTMyCQljb21wYXRfdWludF90OwordHlwZWRlZiB1MzIJCWNvbXBhdF91bG9uZ190OworCitzdHJ1Y3QgY29tcGF0X3RpbWVzcGVjIHsKKwljb21wYXRfdGltZV90CXR2X3NlYzsKKwlzMzIJCXR2X25zZWM7Cit9OworCitzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgeworCWNvbXBhdF90aW1lX3QJdHZfc2VjOworCXMzMgkJdHZfdXNlYzsKK307CisKK3N0cnVjdCBjb21wYXRfc3RhdCB7CisJY29tcGF0X2Rldl90CXN0X2RldjsKKwl1MTYJCV9fcGFkMTsKKwljb21wYXRfaW5vX3QJc3RfaW5vOworCWNvbXBhdF9tb2RlX3QJc3RfbW9kZTsKKwljb21wYXRfbmxpbmtfdAlzdF9ubGluazsKKwljb21wYXRfdWlkX3QJc3RfdWlkOworCWNvbXBhdF9naWRfdAlzdF9naWQ7CisJY29tcGF0X2Rldl90CXN0X3JkZXY7CisJdTE2CQlfX3BhZDI7CisJdTMyCQlzdF9zaXplOworCXUzMgkJc3RfYmxrc2l6ZTsKKwl1MzIJCXN0X2Jsb2NrczsKKwl1MzIJCXN0X2F0aW1lOworCXUzMgkJc3RfYXRpbWVfbnNlYzsKKwl1MzIJCXN0X210aW1lOworCXUzMgkJc3RfbXRpbWVfbnNlYzsKKwl1MzIJCXN0X2N0aW1lOworCXUzMgkJc3RfY3RpbWVfbnNlYzsKKwl1MzIJCV9fdW51c2VkNDsKKwl1MzIJCV9fdW51c2VkNTsKK307CisKK3N0cnVjdCBjb21wYXRfZmxvY2sgeworCXNob3J0CQlsX3R5cGU7CisJc2hvcnQJCWxfd2hlbmNlOworCWNvbXBhdF9vZmZfdAlsX3N0YXJ0OworCWNvbXBhdF9vZmZfdAlsX2xlbjsKKwljb21wYXRfcGlkX3QJbF9waWQ7Cit9OworCisjZGVmaW5lIEZfR0VUTEs2NAkxMgkvKiAgdXNpbmcgJ3N0cnVjdCBmbG9jazY0JyAqLworI2RlZmluZSBGX1NFVExLNjQJMTMKKyNkZWZpbmUgRl9TRVRMS1c2NAkxNAorCisvKgorICogSUEzMiB1c2VzIDQgYnl0ZSBhbGlnbm1lbnQgZm9yIDY0IGJpdCBxdWFudGl0aWVzLAorICogc28gd2UgbmVlZCB0byBwYWNrIHRoaXMgc3RydWN0dXJlLgorICovCitzdHJ1Y3QgY29tcGF0X2Zsb2NrNjQgeworCXNob3J0CQlsX3R5cGU7CisJc2hvcnQJCWxfd2hlbmNlOworCWNvbXBhdF9sb2ZmX3QJbF9zdGFydDsKKwljb21wYXRfbG9mZl90CWxfbGVuOworCWNvbXBhdF9waWRfdAlsX3BpZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBjb21wYXRfc3RhdGZzIHsKKwlpbnQJCWZfdHlwZTsKKwlpbnQJCWZfYnNpemU7CisJaW50CQlmX2Jsb2NrczsKKwlpbnQJCWZfYmZyZWU7CisJaW50CQlmX2JhdmFpbDsKKwlpbnQJCWZfZmlsZXM7CisJaW50CQlmX2ZmcmVlOworCWNvbXBhdF9mc2lkX3QJZl9mc2lkOworCWludAkJZl9uYW1lbGVuOwkvKiBTdW5PUyBpZ25vcmVzIHRoaXMgZmllbGQuICovCisJaW50CQlmX2Zyc2l6ZTsKKwlpbnQJCWZfc3BhcmVbNV07Cit9OworCisjZGVmaW5lIENPTVBBVF9STElNX09MRF9JTkZJTklUWQkweDdmZmZmZmZmCisjZGVmaW5lIENPTVBBVF9STElNX0lORklOSVRZCQkweGZmZmZmZmZmCisKK3R5cGVkZWYgdTMyCQljb21wYXRfb2xkX3NpZ3NldF90OwkvKiBhdCBsZWFzdCAzMiBiaXRzICovCisKKyNkZWZpbmUgX0NPTVBBVF9OU0lHCQk2NAorI2RlZmluZSBfQ09NUEFUX05TSUdfQlBXCTMyCisKK3R5cGVkZWYgdTMyICAgICAgICAgICAgICAgY29tcGF0X3NpZ3NldF93b3JkOworCisjZGVmaW5lIENPTVBBVF9PRkZfVF9NQVgJMHg3ZmZmZmZmZgorI2RlZmluZSBDT01QQVRfTE9GRl9UX01BWAkweDdmZmZmZmZmZmZmZmZmZmZMCisKK3N0cnVjdCBjb21wYXRfaXBjNjRfcGVybSB7CisJY29tcGF0X2tleV90IGtleTsKKwljb21wYXRfdWlkMzJfdCB1aWQ7CisJY29tcGF0X2dpZDMyX3QgZ2lkOworCWNvbXBhdF91aWQzMl90IGN1aWQ7CisJY29tcGF0X2dpZDMyX3QgY2dpZDsKKwl1bnNpZ25lZCBzaG9ydCBtb2RlOworCXVuc2lnbmVkIHNob3J0IF9fcGFkMTsKKwl1bnNpZ25lZCBzaG9ydCBzZXE7CisJdW5zaWduZWQgc2hvcnQgX19wYWQyOworCWNvbXBhdF91bG9uZ190IHVudXNlZDE7CisJY29tcGF0X3Vsb25nX3QgdW51c2VkMjsKK307CisKK3N0cnVjdCBjb21wYXRfc2VtaWQ2NF9kcyB7CisJc3RydWN0IGNvbXBhdF9pcGM2NF9wZXJtIHNlbV9wZXJtOworCWNvbXBhdF90aW1lX3QgIHNlbV9vdGltZTsKKwljb21wYXRfdWxvbmdfdCBfX3VudXNlZDE7CisJY29tcGF0X3RpbWVfdCAgc2VtX2N0aW1lOworCWNvbXBhdF91bG9uZ190IF9fdW51c2VkMjsKKwljb21wYXRfdWxvbmdfdCBzZW1fbnNlbXM7CisJY29tcGF0X3Vsb25nX3QgX191bnVzZWQzOworCWNvbXBhdF91bG9uZ190IF9fdW51c2VkNDsKK307CisKK3N0cnVjdCBjb21wYXRfbXNxaWQ2NF9kcyB7CisJc3RydWN0IGNvbXBhdF9pcGM2NF9wZXJtIG1zZ19wZXJtOworCWNvbXBhdF90aW1lX3QgIG1zZ19zdGltZTsKKwljb21wYXRfdWxvbmdfdCBfX3VudXNlZDE7CisJY29tcGF0X3RpbWVfdCAgbXNnX3J0aW1lOworCWNvbXBhdF91bG9uZ190IF9fdW51c2VkMjsKKwljb21wYXRfdGltZV90ICBtc2dfY3RpbWU7CisJY29tcGF0X3Vsb25nX3QgX191bnVzZWQzOworCWNvbXBhdF91bG9uZ190IG1zZ19jYnl0ZXM7CisJY29tcGF0X3Vsb25nX3QgbXNnX3FudW07CisJY29tcGF0X3Vsb25nX3QgbXNnX3FieXRlczsKKwljb21wYXRfcGlkX3QgICBtc2dfbHNwaWQ7CisJY29tcGF0X3BpZF90ICAgbXNnX2xycGlkOworCWNvbXBhdF91bG9uZ190IF9fdW51c2VkNDsKKwljb21wYXRfdWxvbmdfdCBfX3VudXNlZDU7Cit9OworCitzdHJ1Y3QgY29tcGF0X3NobWlkNjRfZHMgeworCXN0cnVjdCBjb21wYXRfaXBjNjRfcGVybSBzaG1fcGVybTsKKwljb21wYXRfc2l6ZV90ICBzaG1fc2Vnc3o7CisJY29tcGF0X3RpbWVfdCAgc2htX2F0aW1lOworCWNvbXBhdF91bG9uZ190IF9fdW51c2VkMTsKKwljb21wYXRfdGltZV90ICBzaG1fZHRpbWU7CisJY29tcGF0X3Vsb25nX3QgX191bnVzZWQyOworCWNvbXBhdF90aW1lX3QgIHNobV9jdGltZTsKKwljb21wYXRfdWxvbmdfdCBfX3VudXNlZDM7CisJY29tcGF0X3BpZF90ICAgc2htX2NwaWQ7CisJY29tcGF0X3BpZF90ICAgc2htX2xwaWQ7CisJY29tcGF0X3Vsb25nX3Qgc2htX25hdHRjaDsKKwljb21wYXRfdWxvbmdfdCBfX3VudXNlZDQ7CisJY29tcGF0X3Vsb25nX3QgX191bnVzZWQ1OworfTsKKworLyoKKyAqIEEgcG9pbnRlciBwYXNzZWQgaW4gZnJvbSB1c2VyIG1vZGUuIFRoaXMgc2hvdWxkIG5vdAorICogYmUgdXNlZCBmb3Igc3lzY2FsbCBwYXJhbWV0ZXJzLCBqdXN0IGRlY2xhcmUgdGhlbQorICogYXMgcG9pbnRlcnMgYmVjYXVzZSB0aGUgc3lzY2FsbCBlbnRyeSBjb2RlIHdpbGwgaGF2ZQorICogYXBwcm9wcmlhdGVseSBjb212ZXJ0ZWQgdGhlbSBhbHJlYWR5LgorICovCit0eXBlZGVmCXUzMgkJY29tcGF0X3VwdHJfdDsKKworc3RhdGljIGlubGluZSB2b2lkIF9fdXNlciAqY29tcGF0X3B0cihjb21wYXRfdXB0cl90IHVwdHIpCit7CisJcmV0dXJuICh2b2lkIF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKXVwdHI7Cit9CisKK3N0YXRpYyBpbmxpbmUgY29tcGF0X3VwdHJfdCBwdHJfdG9fY29tcGF0KHZvaWQgX191c2VyICp1cHRyKQoreworCXJldHVybiAodTMyKSh1bnNpZ25lZCBsb25nKXVwdHI7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX191c2VyICpjb21wYXRfYWxsb2NfdXNlcl9zcGFjZShsb25nIGxlbikKK3sKKwlzdHJ1Y3QgcHRfcmVncyAqcmVncyA9ICh2b2lkICopY3VycmVudC0+dGhyZWFkLnJzcDAgLSBzaXplb2Yoc3RydWN0IHB0X3JlZ3MpOyAKKwlyZXR1cm4gKHZvaWQgX191c2VyICopcmVncy0+cnNwIC0gbGVuOyAKK30KKworI2VuZGlmIC8qIF9BU01fWDg2XzY0X0NPTVBBVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvY3B1LmggYi9pbmNsdWRlL2FzbS14ODZfNjQvY3B1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVlYTA3NgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9jcHUuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLWkzODYvY3B1Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvY3B1ZmVhdHVyZS5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2NwdWZlYXR1cmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTQ3YTZkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L2NwdWZlYXR1cmUuaApAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIGNwdWZlYXR1cmUuaAorICoKKyAqIERlZmluZXMgeDg2IENQVSBmZWF0dXJlIGJpdHMKKyAqLworCisjaWZuZGVmIF9fQVNNX1g4NjY0X0NQVUZFQVRVUkVfSAorI2RlZmluZSBfX0FTTV9YODY2NF9DUFVGRUFUVVJFX0gKKworI2RlZmluZSBOQ0FQSU5UUwk2CisKKy8qIEludGVsLWRlZmluZWQgQ1BVIGZlYXR1cmVzLCBDUFVJRCBsZXZlbCAweDAwMDAwMDAxLCB3b3JkIDAgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfRlBVCQkoMCozMisgMCkgLyogT25ib2FyZCBGUFUgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfVk1FCQkoMCozMisgMSkgLyogVmlydHVhbCBNb2RlIEV4dGVuc2lvbnMgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfREUJCSgwKjMyKyAyKSAvKiBEZWJ1Z2dpbmcgRXh0ZW5zaW9ucyAqLworI2RlZmluZSBYODZfRkVBVFVSRV9QU0UgCSgwKjMyKyAzKSAvKiBQYWdlIFNpemUgRXh0ZW5zaW9ucyAqLworI2RlZmluZSBYODZfRkVBVFVSRV9UU0MJCSgwKjMyKyA0KSAvKiBUaW1lIFN0YW1wIENvdW50ZXIgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfTVNSCQkoMCozMisgNSkgLyogTW9kZWwtU3BlY2lmaWMgUmVnaXN0ZXJzLCBSRE1TUiwgV1JNU1IgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfUEFFCQkoMCozMisgNikgLyogUGh5c2ljYWwgQWRkcmVzcyBFeHRlbnNpb25zICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX01DRQkJKDAqMzIrIDcpIC8qIE1hY2hpbmUgQ2hlY2sgQXJjaGl0ZWN0dXJlICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX0NYOAkJKDAqMzIrIDgpIC8qIENNUFhDSEc4IGluc3RydWN0aW9uICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX0FQSUMJKDAqMzIrIDkpIC8qIE9uYm9hcmQgQVBJQyAqLworI2RlZmluZSBYODZfRkVBVFVSRV9TRVAJCSgwKjMyKzExKSAvKiBTWVNFTlRFUi9TWVNFWElUICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX01UUlIJKDAqMzIrMTIpIC8qIE1lbW9yeSBUeXBlIFJhbmdlIFJlZ2lzdGVycyAqLworI2RlZmluZSBYODZfRkVBVFVSRV9QR0UJCSgwKjMyKzEzKSAvKiBQYWdlIEdsb2JhbCBFbmFibGUgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfTUNBCQkoMCozMisxNCkgLyogTWFjaGluZSBDaGVjayBBcmNoaXRlY3R1cmUgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfQ01PVgkoMCozMisxNSkgLyogQ01PViBpbnN0cnVjdGlvbiAoRkNNT1ZDQyBhbmQgRkNPTUkgdG9vIGlmIEZQVSBwcmVzZW50KSAqLworI2RlZmluZSBYODZfRkVBVFVSRV9QQVQJCSgwKjMyKzE2KSAvKiBQYWdlIEF0dHJpYnV0ZSBUYWJsZSAqLworI2RlZmluZSBYODZfRkVBVFVSRV9QU0UzNgkoMCozMisxNykgLyogMzYtYml0IFBTRXMgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfUE4JCSgwKjMyKzE4KSAvKiBQcm9jZXNzb3Igc2VyaWFsIG51bWJlciAqLworI2RlZmluZSBYODZfRkVBVFVSRV9DTEZMU0gJKDAqMzIrMTkpIC8qIFN1cHBvcnRzIHRoZSBDTEZMVVNIIGluc3RydWN0aW9uICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX0RURVMJKDAqMzIrMjEpIC8qIERlYnVnIFRyYWNlIFN0b3JlICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX0FDUEkJKDAqMzIrMjIpIC8qIEFDUEkgdmlhIE1TUiAqLworI2RlZmluZSBYODZfRkVBVFVSRV9NTVgJCSgwKjMyKzIzKSAvKiBNdWx0aW1lZGlhIEV4dGVuc2lvbnMgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfRlhTUgkoMCozMisyNCkgLyogRlhTQVZFIGFuZCBGWFJTVE9SIGluc3RydWN0aW9ucyAoZmFzdCBzYXZlIGFuZCByZXN0b3JlICovCisJCQkJICAgICAgICAgIC8qIG9mIEZQVSBjb250ZXh0KSwgYW5kIENSNC5PU0ZYU1IgYXZhaWxhYmxlICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX1hNTQkJKDAqMzIrMjUpIC8qIFN0cmVhbWluZyBTSU1EIEV4dGVuc2lvbnMgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfWE1NMgkoMCozMisyNikgLyogU3RyZWFtaW5nIFNJTUQgRXh0ZW5zaW9ucy0yICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX1NFTEZTTk9PUAkoMCozMisyNykgLyogQ1BVIHNlbGYgc25vb3AgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfSFQJCSgwKjMyKzI4KSAvKiBIeXBlci1UaHJlYWRpbmcgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfQUNDCQkoMCozMisyOSkgLyogQXV0b21hdGljIGNsb2NrIGNvbnRyb2wgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfSUE2NAkoMCozMiszMCkgLyogSUEtNjQgcHJvY2Vzc29yICovCisKKy8qIEFNRC1kZWZpbmVkIENQVSBmZWF0dXJlcywgQ1BVSUQgbGV2ZWwgMHg4MDAwMDAwMSwgd29yZCAxICovCisvKiBEb24ndCBkdXBsaWNhdGUgZmVhdHVyZSBmbGFncyB3aGljaCBhcmUgcmVkdW5kYW50IHdpdGggSW50ZWwhICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX1NZU0NBTEwJKDEqMzIrMTEpIC8qIFNZU0NBTEwvU1lTUkVUICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX01NWEVYVAkoMSozMisyMikgLyogQU1EIE1NWCBleHRlbnNpb25zICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX0ZYU1JfT1BUCSgxKjMyKzI1KSAvKiBGWFNSIG9wdGltaXphdGlvbnMgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfTE0JCSgxKjMyKzI5KSAvKiBMb25nIE1vZGUgKHg4Ni02NCkgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfM0ROT1dFWFQJKDEqMzIrMzApIC8qIEFNRCAzRE5vdyEgZXh0ZW5zaW9ucyAqLworI2RlZmluZSBYODZfRkVBVFVSRV8zRE5PVwkoMSozMiszMSkgLyogM0ROb3chICovCisKKy8qIFRyYW5zbWV0YS1kZWZpbmVkIENQVSBmZWF0dXJlcywgQ1BVSUQgbGV2ZWwgMHg4MDg2MDAwMSwgd29yZCAyICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX1JFQ09WRVJZCSgyKjMyKyAwKSAvKiBDUFUgaW4gcmVjb3ZlcnkgbW9kZSAqLworI2RlZmluZSBYODZfRkVBVFVSRV9MT05HUlVOCSgyKjMyKyAxKSAvKiBMb25ncnVuIHBvd2VyIGNvbnRyb2wgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfTFJUSQkoMiozMisgMykgLyogTG9uZ1J1biB0YWJsZSBpbnRlcmZhY2UgKi8KKworLyogT3RoZXIgZmVhdHVyZXMsIExpbnV4LWRlZmluZWQgbWFwcGluZywgd29yZCAzICovCisvKiBUaGlzIHJhbmdlIGlzIHVzZWQgZm9yIGZlYXR1cmUgYml0cyB3aGljaCBjb25mbGljdCBvciBhcmUgc3ludGhlc2l6ZWQgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfQ1hNTVgJKDMqMzIrIDApIC8qIEN5cml4IE1NWCBleHRlbnNpb25zICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX0s2X01UUlIJKDMqMzIrIDEpIC8qIEFNRCBLNiBub25zdGFuZGFyZCBNVFJScyAqLworI2RlZmluZSBYODZfRkVBVFVSRV9DWVJJWF9BUlIJKDMqMzIrIDIpIC8qIEN5cml4IEFSUnMgKD0gTVRSUnMpICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX0NFTlRBVVJfTUNSCSgzKjMyKyAzKSAvKiBDZW50YXVyIE1DUnMgKD0gTVRSUnMpICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX0s4X0MJKDMqMzIrIDQpIC8qIEMgc3RlcHBpbmcgSzggKi8KKworLyogSW50ZWwtZGVmaW5lZCBDUFUgZmVhdHVyZXMsIENQVUlEIGxldmVsIDB4MDAwMDAwMDEgKGVjeCksIHdvcmQgNCAqLworI2RlZmluZSBYODZfRkVBVFVSRV9YTU0zCSg0KjMyKyAwKSAvKiBTdHJlYW1pbmcgU0lNRCBFeHRlbnNpb25zLTMgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfTVdBSVQJKDQqMzIrIDMpIC8qIE1vbml0b3IvTXdhaXQgc3VwcG9ydCAqLworI2RlZmluZSBYODZfRkVBVFVSRV9EU0NQTAkoNCozMisgNCkgLyogQ1BMIFF1YWxpZmllZCBEZWJ1ZyBTdG9yZSAqLworI2RlZmluZSBYODZfRkVBVFVSRV9FU1QJCSg0KjMyKyA3KSAvKiBFbmhhbmNlZCBTcGVlZFN0ZXAgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfVE0yCQkoNCozMisgOCkgLyogVGhlcm1hbCBNb25pdG9yIDIgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfQ0lECQkoNCozMisxMCkgLyogQ29udGV4dCBJRCAqLworI2RlZmluZSBYODZfRkVBVFVSRV9DWDE2CSg0KjMyKzEzKSAvKiBDTVBYQ0hHMTZCICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX1hUUFIJKDQqMzIrMTQpIC8qIFNlbmQgVGFzayBQcmlvcml0eSBNZXNzYWdlcyAqLworCisvKiBNb3JlIGV4dGVuZGVkIEFNRCBmbGFnczogQ1BVSUQgbGV2ZWwgMHg4MDAwMDAwMSwgZWN4LCB3b3JkIDUgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfTEFIRl9MTQkoNSozMisgMCkgLyogTEFIRi9TQUhGIGluIGxvbmcgbW9kZSAqLworI2RlZmluZSBYODZfRkVBVFVSRV9DTVBfTEVHQUNZCSg1KjMyKyAxKSAvKiBJZiB5ZXMgSHlwZXJUaHJlYWRpbmcgbm90IHZhbGlkICovCisKKyNkZWZpbmUgY3B1X2hhcyhjLCBiaXQpICAgICAgICAgICAgICAgIHRlc3RfYml0KGJpdCwgKGMpLT54ODZfY2FwYWJpbGl0eSkKKyNkZWZpbmUgYm9vdF9jcHVfaGFzKGJpdCkgICAgICB0ZXN0X2JpdChiaXQsIGJvb3RfY3B1X2RhdGEueDg2X2NhcGFiaWxpdHkpCisKKyNkZWZpbmUgY3B1X2hhc19mcHUgICAgICAgICAgICAxCisjZGVmaW5lIGNwdV9oYXNfdm1lICAgICAgICAgICAgMAorI2RlZmluZSBjcHVfaGFzX2RlICAgICAgICAgICAgIDEKKyNkZWZpbmUgY3B1X2hhc19wc2UgICAgICAgICAgICAxCisjZGVmaW5lIGNwdV9oYXNfdHNjICAgICAgICAgICAgMQorI2RlZmluZSBjcHVfaGFzX3BhZSAgICAgICAgICAgIF9fX0JVR19fXworI2RlZmluZSBjcHVfaGFzX3BnZSAgICAgICAgICAgIDEKKyNkZWZpbmUgY3B1X2hhc19hcGljICAgICAgICAgICBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQVBJQykKKyNkZWZpbmUgY3B1X2hhc19tdHJyICAgICAgICAgICAxCisjZGVmaW5lIGNwdV9oYXNfbW14ICAgICAgICAgICAgMQorI2RlZmluZSBjcHVfaGFzX2Z4c3IgICAgICAgICAgIDEKKyNkZWZpbmUgY3B1X2hhc194bW0gICAgICAgICAgICAxCisjZGVmaW5lIGNwdV9oYXNfeG1tMiAgICAgICAgICAgMQorI2RlZmluZSBjcHVfaGFzX3htbTMgICAgICAgICAgIGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9YTU0zKQorI2RlZmluZSBjcHVfaGFzX2h0ICAgICAgICAgICAgIGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9IVCkKKyNkZWZpbmUgY3B1X2hhc19tcCAgICAgICAgICAgICAxIC8qIFhYWCAqLworI2RlZmluZSBjcHVfaGFzX2s2X210cnIgICAgICAgIDAKKyNkZWZpbmUgY3B1X2hhc19jeXJpeF9hcnIgICAgICAwCisjZGVmaW5lIGNwdV9oYXNfY2VudGF1cl9tY3IgICAgMAorI2RlZmluZSBjcHVfaGFzX2NsZmx1c2gJICAgICAgIGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9DTEZMU0gpCisKKyNlbmRpZiAvKiBfX0FTTV9YODY2NF9DUFVGRUFUVVJFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9jcHV0aW1lLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvY3B1dGltZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwNzAxMmQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvY3B1dGltZS5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfX1g4Nl82NF9DUFVUSU1FX0gKKyNkZWZpbmUgX19YODZfNjRfQ1BVVElNRV9ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9jcHV0aW1lLmg+CisKKyNlbmRpZiAvKiBfX1g4Nl82NF9DUFVUSU1FX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9jdXJyZW50LmggYi9pbmNsdWRlL2FzbS14ODZfNjQvY3VycmVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkYjU2MGUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvY3VycmVudC5oCkBAIC0wLDAgKzEsMjcgQEAKKyNpZm5kZWYgX1g4Nl82NF9DVVJSRU5UX0gKKyNkZWZpbmUgX1g4Nl82NF9DVVJSRU5UX0gKKworI2lmICFkZWZpbmVkKF9fQVNTRU1CTFlfXykgCitzdHJ1Y3QgdGFza19zdHJ1Y3Q7CisKKyNpbmNsdWRlIDxhc20vcGRhLmg+CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRhc2tfc3RydWN0ICpnZXRfY3VycmVudCh2b2lkKSAKK3sgCisJc3RydWN0IHRhc2tfc3RydWN0ICp0ID0gcmVhZF9wZGEocGN1cnJlbnQpOyAKKwlyZXR1cm4gdDsKK30gCisKKyNkZWZpbmUgY3VycmVudCBnZXRfY3VycmVudCgpCisKKyNlbHNlCisKKyNpZm5kZWYgQVNNX09GRlNFVF9ICisjaW5jbHVkZSA8YXNtL29mZnNldC5oPiAKKyNlbmRpZgorCisjZGVmaW5lIEdFVF9DVVJSRU5UKHJlZykgbW92cSAlZ3M6KHBkYV9wY3VycmVudCkscmVnCisKKyNlbmRpZgorCisjZW5kaWYgLyogIShfWDg2XzY0X0NVUlJFTlRfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9kZWJ1Z3JlZy5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2RlYnVncmVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQxYWFiMWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvZGVidWdyZWcuaApAQCAtMCwwICsxLDY1IEBACisjaWZuZGVmIF9YODZfNjRfREVCVUdSRUdfSAorI2RlZmluZSBfWDg2XzY0X0RFQlVHUkVHX0gKKworCisvKiBJbmRpY2F0ZSB0aGUgcmVnaXN0ZXIgbnVtYmVycyBmb3IgYSBudW1iZXIgb2YgdGhlIHNwZWNpZmljCisgICBkZWJ1ZyByZWdpc3RlcnMuICBSZWdpc3RlcnMgMC0zIGNvbnRhaW4gdGhlIGFkZHJlc3NlcyB3ZSB3aXNoIHRvIHRyYXAgb24gKi8KKyNkZWZpbmUgRFJfRklSU1RBRERSIDAgICAgICAgIC8qIHVfZGVidWdyZWdbRFJfRklSU1RBRERSXSAqLworI2RlZmluZSBEUl9MQVNUQUREUiAzICAgICAgICAgLyogdV9kZWJ1Z3JlZ1tEUl9MQVNUQUREUl0gICovCisKKyNkZWZpbmUgRFJfU1RBVFVTIDYgICAgICAgICAgIC8qIHVfZGVidWdyZWdbRFJfU1RBVFVTXSAgICAgKi8KKyNkZWZpbmUgRFJfQ09OVFJPTCA3ICAgICAgICAgIC8qIHVfZGVidWdyZWdbRFJfQ09OVFJPTF0gKi8KKworLyogRGVmaW5lIGEgZmV3IHRoaW5ncyBmb3IgdGhlIHN0YXR1cyByZWdpc3Rlci4gIFdlIGNhbiB1c2UgdGhpcyB0byBkZXRlcm1pbmUKKyAgIHdoaWNoIGRlYnVnZ2luZyByZWdpc3RlciB3YXMgcmVzcG9uc2libGUgZm9yIHRoZSB0cmFwLiAgVGhlIG90aGVyIGJpdHMKKyAgIGFyZSBlaXRoZXIgcmVzZXJ2ZWQgb3Igbm90IG9mIGludGVyZXN0IHRvIHVzLiAqLworCisjZGVmaW5lIERSX1RSQVAwCSgweDEpCQkvKiBkYjAgKi8KKyNkZWZpbmUgRFJfVFJBUDEJKDB4MikJCS8qIGRiMSAqLworI2RlZmluZSBEUl9UUkFQMgkoMHg0KQkJLyogZGIyICovCisjZGVmaW5lIERSX1RSQVAzCSgweDgpCQkvKiBkYjMgKi8KKworI2RlZmluZSBEUl9TVEVQCQkoMHg0MDAwKQkvKiBzaW5nbGUtc3RlcCAqLworI2RlZmluZSBEUl9TV0lUQ0gJKDB4ODAwMCkJLyogdGFzayBzd2l0Y2ggKi8KKworLyogTm93IGRlZmluZSBhIGJ1bmNoIG9mIHRoaW5ncyBmb3IgbWFuaXB1bGF0aW5nIHRoZSBjb250cm9sIHJlZ2lzdGVyLgorICAgVGhlIHRvcCB0d28gYnl0ZXMgb2YgdGhlIGNvbnRyb2wgcmVnaXN0ZXIgY29uc2lzdCBvZiA0IGZpZWxkcyBvZiA0CisgICBiaXRzIC0gZWFjaCBmaWVsZCBjb3JyZXNwb25kcyB0byBvbmUgb2YgdGhlIGZvdXIgZGVidWcgcmVnaXN0ZXJzLAorICAgYW5kIGluZGljYXRlcyB3aGF0IHR5cGVzIG9mIGFjY2VzcyB3ZSB0cmFwIG9uLCBhbmQgaG93IGxhcmdlIHRoZSBkYXRhCisgICBmaWVsZCBpcyB0aGF0IHdlIGFyZSBsb29raW5nIGF0ICovCisKKyNkZWZpbmUgRFJfQ09OVFJPTF9TSElGVCAxNiAvKiBTa2lwIHRoaXMgbWFueSBiaXRzIGluIGN0bCByZWdpc3RlciAqLworI2RlZmluZSBEUl9DT05UUk9MX1NJWkUgNCAgIC8qIDQgY29udHJvbCBiaXRzIHBlciByZWdpc3RlciAqLworCisjZGVmaW5lIERSX1JXX0VYRUNVVEUgKDB4MCkgICAvKiBTZXR0aW5ncyBmb3IgdGhlIGFjY2VzcyB0eXBlcyB0byB0cmFwIG9uICovCisjZGVmaW5lIERSX1JXX1dSSVRFICgweDEpCisjZGVmaW5lIERSX1JXX1JFQUQgKDB4MykKKworI2RlZmluZSBEUl9MRU5fMSAoMHgwKSAvKiBTZXR0aW5ncyBmb3IgZGF0YSBsZW5ndGggdG8gdHJhcCBvbiAqLworI2RlZmluZSBEUl9MRU5fMiAoMHg0KQorI2RlZmluZSBEUl9MRU5fNCAoMHhDKQorI2RlZmluZSBEUl9MRU5fOCAoMHg4KQorCisvKiBUaGUgbG93IGJ5dGUgdG8gdGhlIGNvbnRyb2wgcmVnaXN0ZXIgZGV0ZXJtaW5lIHdoaWNoIHJlZ2lzdGVycyBhcmUKKyAgIGVuYWJsZWQuICBUaGVyZSBhcmUgNCBmaWVsZHMgb2YgdHdvIGJpdHMuICBPbmUgYml0IGlzICJsb2NhbCIsIG1lYW5pbmcKKyAgIHRoYXQgdGhlIHByb2Nlc3NvciB3aWxsIHJlc2V0IHRoZSBiaXQgYWZ0ZXIgYSB0YXNrIHN3aXRjaCBhbmQgdGhlIG90aGVyCisgICBpcyBnbG9iYWwgbWVhbmluZyB0aGF0IHdlIGhhdmUgdG8gZXhwbGljaXRseSByZXNldCB0aGUgYml0LiAgV2l0aCBsaW51eCwKKyAgIHlvdSBjYW4gdXNlIGVpdGhlciBvbmUsIHNpbmNlIHdlIGV4cGxpY2l0bHkgemVybyB0aGUgcmVnaXN0ZXIgd2hlbiB3ZSBlbnRlcgorICAga2VybmVsIG1vZGUuICovCisKKyNkZWZpbmUgRFJfTE9DQUxfRU5BQkxFX1NISUZUIDAgICAgLyogRXh0cmEgc2hpZnQgdG8gdGhlIGxvY2FsIGVuYWJsZSBiaXQgKi8KKyNkZWZpbmUgRFJfR0xPQkFMX0VOQUJMRV9TSElGVCAxICAgLyogRXh0cmEgc2hpZnQgdG8gdGhlIGdsb2JhbCBlbmFibGUgYml0ICovCisjZGVmaW5lIERSX0VOQUJMRV9TSVpFIDIgICAgICAgICAgIC8qIDIgZW5hYmxlIGJpdHMgcGVyIHJlZ2lzdGVyICovCisKKyNkZWZpbmUgRFJfTE9DQUxfRU5BQkxFX01BU0sgKDB4NTUpICAvKiBTZXQgIGxvY2FsIGJpdHMgZm9yIGFsbCA0IHJlZ3MgKi8KKyNkZWZpbmUgRFJfR0xPQkFMX0VOQUJMRV9NQVNLICgweEFBKSAvKiBTZXQgZ2xvYmFsIGJpdHMgZm9yIGFsbCA0IHJlZ3MgKi8KKworLyogVGhlIHNlY29uZCBieXRlIHRvIHRoZSBjb250cm9sIHJlZ2lzdGVyIGhhcyBhIGZldyBzcGVjaWFsIHRoaW5ncy4KKyAgIFdlIGNhbiBzbG93IHRoZSBpbnN0cnVjdGlvbiBwaXBlbGluZSBmb3IgaW5zdHJ1Y3Rpb25zIGNvbWluZyB2aWEgdGhlCisgICBnZHQgb3IgdGhlIGxkdCBpZiB3ZSB3YW50IHRvLiAgSSBhbSBub3Qgc3VyZSB3aHkgdGhpcyBpcyBhbiBhZHZhbnRhZ2UgKi8KKworI2RlZmluZSBEUl9DT05UUk9MX1JFU0VSVkVEICgweEZGRkZGRkZGMDAwMEZDMDBVTCkgLyogUmVzZXJ2ZWQgKi8KKyNkZWZpbmUgRFJfTE9DQUxfU0xPV0RPV04gKDB4MTAwKSAgIC8qIExvY2FsIHNsb3cgdGhlIHBpcGVsaW5lICovCisjZGVmaW5lIERSX0dMT0JBTF9TTE9XRE9XTiAoMHgyMDApICAvKiBHbG9iYWwgc2xvdyB0aGUgcGlwZWxpbmUgKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvZGVsYXkuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9kZWxheS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1ZjY0YWMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvZGVsYXkuaApAQCAtMCwwICsxLDI3IEBACisjaWZuZGVmIF9YODY2NF9ERUxBWV9ICisjZGVmaW5lIF9YODY2NF9ERUxBWV9ICisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTMgTGludXMgVG9ydmFsZHMKKyAqCisgKiBEZWxheSByb3V0aW5lcyBjYWxsaW5nIGZ1bmN0aW9ucyBpbiBhcmNoL3g4Nl82NC9saWIvZGVsYXkuYworICovCisgCitleHRlcm4gdm9pZCBfX2JhZF91ZGVsYXkodm9pZCk7CitleHRlcm4gdm9pZCBfX2JhZF9uZGVsYXkodm9pZCk7CisKK2V4dGVybiB2b2lkIF9fdWRlbGF5KHVuc2lnbmVkIGxvbmcgdXNlY3MpOworZXh0ZXJuIHZvaWQgX19uZGVsYXkodW5zaWduZWQgbG9uZyB1c2Vjcyk7CitleHRlcm4gdm9pZCBfX2NvbnN0X3VkZWxheSh1bnNpZ25lZCBsb25nIHVzZWNzKTsKK2V4dGVybiB2b2lkIF9fZGVsYXkodW5zaWduZWQgbG9uZyBsb29wcyk7CisKKyNkZWZpbmUgdWRlbGF5KG4pIChfX2J1aWx0aW5fY29uc3RhbnRfcChuKSA/IFwKKwkoKG4pID4gMjAwMDAgPyBfX2JhZF91ZGVsYXkoKSA6IF9fY29uc3RfdWRlbGF5KChuKSAqIDB4MTBjNnVsKSkgOiBcCisJX191ZGVsYXkobikpCisKKyNkZWZpbmUgbmRlbGF5KG4pIChfX2J1aWx0aW5fY29uc3RhbnRfcChuKSA/IFwKKyAgICAgICAoKG4pID4gMjAwMDAgPyBfX2JhZF9uZGVsYXkoKSA6IF9fY29uc3RfdWRlbGF5KChuKSAqIDV1bCkpIDogXAorICAgICAgIF9fbmRlbGF5KG4pKQorCisKKyNlbmRpZiAvKiBkZWZpbmVkKF9YODY2NF9ERUxBWV9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2Rlc2MuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9kZXNjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFlZmI5YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9kZXNjLmgKQEAgLTAsMCArMSwyMTcgQEAKKy8qIFdyaXR0ZW4gMjAwMCBieSBBbmRpIEtsZWVuICovIAorI2lmbmRlZiBfX0FSQ0hfREVTQ19ICisjZGVmaW5lIF9fQVJDSF9ERVNDX0gKKworI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKyNpbmNsdWRlIDxhc20vbGR0Lmg+CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgorI2luY2x1ZGUgPGFzbS9tbXUuaD4KKworLy8gOCBieXRlIHNlZ21lbnQgZGVzY3JpcHRvcgorc3RydWN0IGRlc2Nfc3RydWN0IHsgCisJdTE2IGxpbWl0MDsKKwl1MTYgYmFzZTA7CisJdW5zaWduZWQgYmFzZTEgOiA4LCB0eXBlIDogNCwgcyA6IDEsIGRwbCA6IDIsIHAgOiAxOworCXVuc2lnbmVkIGxpbWl0IDogNCwgYXZsIDogMSwgbCA6IDEsIGQgOiAxLCBnIDogMSwgYmFzZTIgOiA4OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsgCisKK3N0cnVjdCBuX2Rlc2Nfc3RydWN0IHsgCisJdW5zaWduZWQgaW50IGEsYjsKK307IAkKKworZXh0ZXJuIHN0cnVjdCBkZXNjX3N0cnVjdCBjcHVfZ2R0X3RhYmxlW05SX0NQVVNdW0dEVF9FTlRSSUVTXTsKKworZW51bSB7IAorCUdBVEVfSU5URVJSVVBUID0gMHhFLCAKKwlHQVRFX1RSQVAgPSAweEYsIAkKKwlHQVRFX0NBTEwgPSAweEMsCit9OyAJCisKKy8vIDE2Ynl0ZSBnYXRlCitzdHJ1Y3QgZ2F0ZV9zdHJ1Y3QgeyAgICAgICAgICAKKwl1MTYgb2Zmc2V0X2xvdzsKKwl1MTYgc2VnbWVudDsgCisJdW5zaWduZWQgaXN0IDogMywgemVybzAgOiA1LCB0eXBlIDogNSwgZHBsIDogMiwgcCA6IDE7CisJdTE2IG9mZnNldF9taWRkbGU7CisJdTMyIG9mZnNldF9oaWdoOworCXUzMiB6ZXJvMTsgCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIFBUUl9MT1coeCkgKCh1bnNpZ25lZCBsb25nKSh4KSAmIDB4RkZGRikgCisjZGVmaW5lIFBUUl9NSURETEUoeCkgKCgodW5zaWduZWQgbG9uZykoeCkgPj4gMTYpICYgMHhGRkZGKQorI2RlZmluZSBQVFJfSElHSCh4KSAoKHVuc2lnbmVkIGxvbmcpKHgpID4+IDMyKQorCitlbnVtIHsgCisJREVTQ19UU1MgPSAweDksCisJREVTQ19MRFQgPSAweDIsCit9OyAKKworLy8gTERUIG9yIFRTUyBkZXNjcmlwdG9yIGluIHRoZSBHRFQuIDE2IGJ5dGVzLgorc3RydWN0IGxkdHRzc19kZXNjIHsgCisJdTE2IGxpbWl0MDsKKwl1MTYgYmFzZTA7CisJdW5zaWduZWQgYmFzZTEgOiA4LCB0eXBlIDogNSwgZHBsIDogMiwgcCA6IDE7CisJdW5zaWduZWQgbGltaXQxIDogNCwgemVybzAgOiAzLCBnIDogMSwgYmFzZTIgOiA4OworCXUzMiBiYXNlMzsKKwl1MzIgemVybzE7IAorfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsgCisKK3N0cnVjdCBkZXNjX3B0ciB7CisJdW5zaWduZWQgc2hvcnQgc2l6ZTsKKwl1bnNpZ25lZCBsb25nIGFkZHJlc3M7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIDsKKworI2RlZmluZSBsb2FkX1RSX2Rlc2MoKSBhc20gdm9sYXRpbGUoImx0ciAldzAiOjoiciIgKEdEVF9FTlRSWV9UU1MqOCkpCisjZGVmaW5lIGxvYWRfTERUX2Rlc2MoKSBhc20gdm9sYXRpbGUoImxsZHQgJXcwIjo6InIiIChHRFRfRU5UUllfTERUKjgpKQorI2RlZmluZSBjbGVhcl9MRFQoKSAgYXNtIHZvbGF0aWxlKCJsbGR0ICV3MCI6OiJyIiAoMCkpCisKKy8qCisgKiBUaGlzIGlzIHRoZSBsZHQgdGhhdCBldmVyeSBwcm9jZXNzIHdpbGwgZ2V0IHVubGVzcyB3ZSBuZWVkCisgKiBzb21ldGhpbmcgb3RoZXIgdGhhbiB0aGlzLgorICovCitleHRlcm4gc3RydWN0IGRlc2Nfc3RydWN0IGRlZmF1bHRfbGR0W107CitleHRlcm4gc3RydWN0IGdhdGVfc3RydWN0IGlkdF90YWJsZVtdOyAKKworc3RhdGljIGlubGluZSB2b2lkIF9zZXRfZ2F0ZSh2b2lkICphZHIsIHVuc2lnbmVkIHR5cGUsIHVuc2lnbmVkIGxvbmcgZnVuYywgdW5zaWduZWQgZHBsLCB1bnNpZ25lZCBpc3QpICAKK3sKKwlzdHJ1Y3QgZ2F0ZV9zdHJ1Y3QgczsgCQorCXMub2Zmc2V0X2xvdyA9IFBUUl9MT1coZnVuYyk7IAorCXMuc2VnbWVudCA9IF9fS0VSTkVMX0NTOworCXMuaXN0ID0gaXN0OyAKKwlzLnAgPSAxOworCXMuZHBsID0gZHBsOyAKKwlzLnplcm8wID0gMDsKKwlzLnplcm8xID0gMDsgCisJcy50eXBlID0gdHlwZTsgCisJcy5vZmZzZXRfbWlkZGxlID0gUFRSX01JRERMRShmdW5jKTsgCisJcy5vZmZzZXRfaGlnaCA9IFBUUl9ISUdIKGZ1bmMpOyAKKwkvKiBkb2VzIG5vdCBuZWVkIHRvIGJlIGF0b21pYyBiZWNhdXNlIGl0IGlzIG9ubHkgZG9uZSBvbmNlIGF0IHNldHVwIHRpbWUgKi8gCisJbWVtY3B5KGFkciwgJnMsIDE2KTsgCit9IAorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2ludHJfZ2F0ZShpbnQgbnIsIHZvaWQgKmZ1bmMpIAoreyAKKwlfc2V0X2dhdGUoJmlkdF90YWJsZVtucl0sIEdBVEVfSU5URVJSVVBULCAodW5zaWduZWQgbG9uZykgZnVuYywgMCwgMCk7IAorfSAKKworc3RhdGljIGlubGluZSB2b2lkIHNldF9pbnRyX2dhdGVfaXN0KGludCBuciwgdm9pZCAqZnVuYywgdW5zaWduZWQgaXN0KSAKK3sgCisJX3NldF9nYXRlKCZpZHRfdGFibGVbbnJdLCBHQVRFX0lOVEVSUlVQVCwgKHVuc2lnbmVkIGxvbmcpIGZ1bmMsIDAsIGlzdCk7IAorfSAKKworc3RhdGljIGlubGluZSB2b2lkIHNldF9zeXN0ZW1fZ2F0ZShpbnQgbnIsIHZvaWQgKmZ1bmMpIAoreyAKKwlfc2V0X2dhdGUoJmlkdF90YWJsZVtucl0sIEdBVEVfSU5URVJSVVBULCAodW5zaWduZWQgbG9uZykgZnVuYywgMywgMCk7IAorfSAKKworc3RhdGljIGlubGluZSB2b2lkIHNldF90c3NsZHRfZGVzY3JpcHRvcih2b2lkICpwdHIsIHVuc2lnbmVkIGxvbmcgdHNzLCB1bnNpZ25lZCB0eXBlLCAKKwkJCQkJIHVuc2lnbmVkIHNpemUpIAoreyAKKwlzdHJ1Y3QgbGR0dHNzX2Rlc2MgZDsKKwltZW1zZXQoJmQsMCxzaXplb2YoZCkpOyAKKwlkLmxpbWl0MCA9IHNpemUgJiAweEZGRkY7CisJZC5iYXNlMCA9IFBUUl9MT1codHNzKTsgCisJZC5iYXNlMSA9IFBUUl9NSURETEUodHNzKSAmIDB4RkY7IAorCWQudHlwZSA9IHR5cGU7CisJZC5wID0gMTsgCisJZC5saW1pdDEgPSAoc2l6ZSA+PiAxNikgJiAweEY7CisJZC5iYXNlMiA9IChQVFJfTUlERExFKHRzcykgPj4gOCkgJiAweEZGOyAKKwlkLmJhc2UzID0gUFRSX0hJR0godHNzKTsgCisJbWVtY3B5KHB0ciwgJmQsIDE2KTsgCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfdHNzX2Rlc2ModW5zaWduZWQgY3B1LCB2b2lkICphZGRyKQoreyAKKwlzZXRfdHNzbGR0X2Rlc2NyaXB0b3IoJmNwdV9nZHRfdGFibGVbY3B1XVtHRFRfRU5UUllfVFNTXSwgKHVuc2lnbmVkIGxvbmcpYWRkciwgCisJCQkgICAgICBERVNDX1RTUywKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3QgdHNzX3N0cnVjdCkgLSAxKTsKK30gCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfbGR0X2Rlc2ModW5zaWduZWQgY3B1LCB2b2lkICphZGRyLCBpbnQgc2l6ZSkKK3sgCisJc2V0X3Rzc2xkdF9kZXNjcmlwdG9yKCZjcHVfZ2R0X3RhYmxlW2NwdV1bR0RUX0VOVFJZX0xEVF0sICh1bnNpZ25lZCBsb25nKWFkZHIsIAorCQkJICAgICAgREVTQ19MRFQsIHNpemUgKiA4IC0gMSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfc2VnX2Jhc2UodW5zaWduZWQgY3B1LCBpbnQgZW50cnksIHZvaWQgKmJhc2UpCit7IAorCXN0cnVjdCBkZXNjX3N0cnVjdCAqZCA9ICZjcHVfZ2R0X3RhYmxlW2NwdV1bZW50cnldOworCXUzMiBhZGRyID0gKHUzMikodTY0KWJhc2U7CisJQlVHX09OKCh1NjQpYmFzZSA+PiAzMik7IAorCWQtPmJhc2UwID0gYWRkciAmIDB4ZmZmZjsKKwlkLT5iYXNlMSA9IChhZGRyID4+IDE2KSAmIDB4ZmY7CisJZC0+YmFzZTIgPSAoYWRkciA+PiAyNCkgJiAweGZmOworfSAKKworI2RlZmluZSBMRFRfZW50cnlfYShpbmZvKSBcCisJKCgoKGluZm8pLT5iYXNlX2FkZHIgJiAweDAwMDBmZmZmKSA8PCAxNikgfCAoKGluZm8pLT5saW1pdCAmIDB4MGZmZmYpKQorLyogRG9uJ3QgYWxsb3cgc2V0dGluZyBvZiB0aGUgbG0gYml0LiBJdCBpcyB1c2VsZXNzIGFueXdheXMgYmVjYXVzZSAKKyAgIDY0Yml0IHN5c3RlbSBjYWxscyByZXF1aXJlIF9fVVNFUl9DUy4gKi8gCisjZGVmaW5lIExEVF9lbnRyeV9iKGluZm8pIFwKKwkoKChpbmZvKS0+YmFzZV9hZGRyICYgMHhmZjAwMDAwMCkgfCBcCisJKCgoaW5mbyktPmJhc2VfYWRkciAmIDB4MDBmZjAwMDApID4+IDE2KSB8IFwKKwkoKGluZm8pLT5saW1pdCAmIDB4ZjAwMDApIHwgXAorCSgoKGluZm8pLT5yZWFkX2V4ZWNfb25seSBeIDEpIDw8IDkpIHwgXAorCSgoaW5mbyktPmNvbnRlbnRzIDw8IDEwKSB8IFwKKwkoKChpbmZvKS0+c2VnX25vdF9wcmVzZW50IF4gMSkgPDwgMTUpIHwgXAorCSgoaW5mbyktPnNlZ18zMmJpdCA8PCAyMikgfCBcCisJKChpbmZvKS0+bGltaXRfaW5fcGFnZXMgPDwgMjMpIHwgXAorCSgoaW5mbyktPnVzZWFibGUgPDwgMjApIHwgXAorCS8qICgoaW5mbyktPmxtIDw8IDIxKSB8ICovIFwKKwkweDcwMDApCisKKyNkZWZpbmUgTERUX2VtcHR5KGluZm8pIChcCisJKGluZm8pLT5iYXNlX2FkZHIJPT0gMAkmJiBcCisJKGluZm8pLT5saW1pdAkJPT0gMAkmJiBcCisJKGluZm8pLT5jb250ZW50cwk9PSAwCSYmIFwKKwkoaW5mbyktPnJlYWRfZXhlY19vbmx5CT09IDEJJiYgXAorCShpbmZvKS0+c2VnXzMyYml0CT09IDAJJiYgXAorCShpbmZvKS0+bGltaXRfaW5fcGFnZXMJPT0gMAkmJiBcCisJKGluZm8pLT5zZWdfbm90X3ByZXNlbnQJPT0gMQkmJiBcCisJKGluZm8pLT51c2VhYmxlCQk9PSAwCSYmIFwKKwkoaW5mbyktPmxtCQk9PSAwKQorCisjaWYgVExTX1NJWkUgIT0gMjQKKyMgZXJyb3IgdXBkYXRlIHRoaXMgY29kZS4KKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHZvaWQgbG9hZF9UTFMoc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnQsIHVuc2lnbmVkIGludCBjcHUpCit7CisJdTY0ICpnZHQgPSAodTY0ICopKGNwdV9nZHRfdGFibGVbY3B1XSArIEdEVF9FTlRSWV9UTFNfTUlOKTsKKwlnZHRbMF0gPSB0LT50bHNfYXJyYXlbMF07CisJZ2R0WzFdID0gdC0+dGxzX2FycmF5WzFdOworCWdkdFsyXSA9IHQtPnRsc19hcnJheVsyXTsKK30gCisKKy8qCisgKiBsb2FkIG9uZSBwYXJ0aWN1bGFyIExEVCBpbnRvIHRoZSBjdXJyZW50IENQVQorICovCitleHRlcm4gaW5saW5lIHZvaWQgbG9hZF9MRFRfbm9sb2NrIChtbV9jb250ZXh0X3QgKnBjLCBpbnQgY3B1KQoreworCWludCBjb3VudCA9IHBjLT5zaXplOworCisJaWYgKGxpa2VseSghY291bnQpKSB7CisJCWNsZWFyX0xEVCgpOworCQlyZXR1cm47CisJfQorCQkKKwlzZXRfbGR0X2Rlc2MoY3B1LCBwYy0+bGR0LCBjb3VudCk7CisJbG9hZF9MRFRfZGVzYygpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbG9hZF9MRFQobW1fY29udGV4dF90ICpwYykKK3sKKwlpbnQgY3B1ID0gZ2V0X2NwdSgpOworCWxvYWRfTERUX25vbG9jayhwYywgY3B1KTsKKwlwdXRfY3B1KCk7Cit9CisKK2V4dGVybiBzdHJ1Y3QgZGVzY19wdHIgaWR0X2Rlc2NyOworCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9kaXY2NC5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2RpdjY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNkOTc4YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9kaXY2NC5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9kaXY2NC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2RtYS1tYXBwaW5nLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvZG1hLW1hcHBpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDE2ZGMzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L2RtYS1tYXBwaW5nLmgKQEAgLTAsMCArMSwxMzggQEAKKyNpZm5kZWYgX1g4NjY0X0RNQV9NQVBQSU5HX0gKKyNkZWZpbmUgX1g4NjY0X0RNQV9NQVBQSU5HX0ggMQorCisvKgorICogSU9NTVUgaW50ZXJmYWNlLiBTZWUgRG9jdW1lbnRhdGlvbi9ETUEtbWFwcGluZy50eHQgYW5kIERNQS1BUEkudHh0IGZvcgorICogZG9jdW1lbnRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpbmNsdWRlIDxhc20vc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vc3dpb3RsYi5oPgorCitleHRlcm4gZG1hX2FkZHJfdCBiYWRfZG1hX2FkZHJlc3M7CisjZGVmaW5lIGRtYV9tYXBwaW5nX2Vycm9yKHgpIFwKKwkoc3dpb3RsYiA/IHN3aW90bGJfZG1hX21hcHBpbmdfZXJyb3IoeCkgOiAoKHgpID09IGJhZF9kbWFfYWRkcmVzcykpCisKK3ZvaWQgKmRtYV9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLAorCQkJIHVuc2lnbmVkIGdmcCk7Cit2b2lkIGRtYV9mcmVlX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIHZvaWQgKnZhZGRyLAorCQkJIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSk7CisKKyNpZmRlZiBDT05GSUdfR0FSVF9JT01NVQorCitleHRlcm4gZG1hX2FkZHJfdCBkbWFfbWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpod2Rldiwgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwKKwkJCQkgaW50IGRpcmVjdGlvbik7CitleHRlcm4gdm9pZCBkbWFfdW5tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBhZGRyLHNpemVfdCBzaXplLAorCQkJICAgICBpbnQgZGlyZWN0aW9uKTsKKworI2Vsc2UKKworLyogTm8gSU9NTVUgKi8KKworc3RhdGljIGlubGluZSBkbWFfYWRkcl90IGRtYV9tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCB2b2lkICpwdHIsCisJCQkJCXNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKQoreworCWRtYV9hZGRyX3QgYWRkcjsKKworCWlmIChkaXJlY3Rpb24gPT0gRE1BX05PTkUpCisJCW91dF9vZl9saW5lX2J1ZygpOworCWFkZHIgPSB2aXJ0X3RvX2J1cyhwdHIpOworCisJaWYgKChhZGRyK3NpemUpICYgfipod2Rldi0+ZG1hX21hc2spCisJCW91dF9vZl9saW5lX2J1ZygpOworCXJldHVybiBhZGRyOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZG1hX3VubWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpod2RldiwgZG1hX2FkZHJfdCBkbWFfYWRkciwKKwkJCQkgICAgc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pCit7CisJaWYgKGRpcmVjdGlvbiA9PSBETUFfTk9ORSkKKwkJb3V0X29mX2xpbmVfYnVnKCk7CisJLyogTm90aGluZyB0byBkbyAqLworfQorCisjZW5kaWYKKworI2RlZmluZSBkbWFfbWFwX3BhZ2UoZGV2LHBhZ2Usb2Zmc2V0LHNpemUsZGlyKSBcCisJZG1hX21hcF9zaW5nbGUoKGRldiksIHBhZ2VfYWRkcmVzcyhwYWdlKSsob2Zmc2V0KSwgKHNpemUpLCAoZGlyKSkKKworc3RhdGljIGlubGluZSB2b2lkIGRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmh3ZGV2LAorCQkJCQkgICAgICAgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAorCQkJCQkgICAgICAgc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pCit7CisJaWYgKGRpcmVjdGlvbiA9PSBETUFfTk9ORSkKKwkJb3V0X29mX2xpbmVfYnVnKCk7CisKKwlpZiAoc3dpb3RsYikKKwkJcmV0dXJuIHN3aW90bGJfc3luY19zaW5nbGVfZm9yX2NwdShod2RldixkbWFfaGFuZGxlLHNpemUsZGlyZWN0aW9uKTsKKworCWZsdXNoX3dyaXRlX2J1ZmZlcnMoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LAorCQkJCQkJICBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCisJCQkJCQkgIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKQoreworICAgICAgICBpZiAoZGlyZWN0aW9uID09IERNQV9OT05FKQorCQlvdXRfb2ZfbGluZV9idWcoKTsKKworCWlmIChzd2lvdGxiKQorCQlyZXR1cm4gc3dpb3RsYl9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGh3ZGV2LGRtYV9oYW5kbGUsc2l6ZSxkaXJlY3Rpb24pOworCisJZmx1c2hfd3JpdGVfYnVmZmVycygpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZG1hX3N5bmNfc2dfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpod2RldiwKKwkJCQkgICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwkJCQkgICAgICAgaW50IG5lbGVtcywgaW50IGRpcmVjdGlvbikKK3sKKwlpZiAoZGlyZWN0aW9uID09IERNQV9OT05FKQorCQlvdXRfb2ZfbGluZV9idWcoKTsKKworCWlmIChzd2lvdGxiKQorCQlyZXR1cm4gc3dpb3RsYl9zeW5jX3NnX2Zvcl9jcHUoaHdkZXYsc2csbmVsZW1zLGRpcmVjdGlvbik7CisKKwlmbHVzaF93cml0ZV9idWZmZXJzKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkbWFfc3luY19zZ19mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LAorCQkJCQkgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJCQkJCSAgaW50IG5lbGVtcywgaW50IGRpcmVjdGlvbikKK3sKKwlpZiAoZGlyZWN0aW9uID09IERNQV9OT05FKQorCQlvdXRfb2ZfbGluZV9idWcoKTsKKworCWlmIChzd2lvdGxiKQorCQlyZXR1cm4gc3dpb3RsYl9zeW5jX3NnX2Zvcl9kZXZpY2UoaHdkZXYsc2csbmVsZW1zLGRpcmVjdGlvbik7CisKKwlmbHVzaF93cml0ZV9idWZmZXJzKCk7Cit9CisKK2V4dGVybiBpbnQgZG1hX21hcF9zZyhzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwkJICAgICAgaW50IG5lbnRzLCBpbnQgZGlyZWN0aW9uKTsKK2V4dGVybiB2b2lkIGRtYV91bm1hcF9zZyhzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwkJCSBpbnQgbmVudHMsIGludCBkaXJlY3Rpb24pOworCisjZGVmaW5lIGRtYV91bm1hcF9wYWdlIGRtYV91bm1hcF9zaW5nbGUKKworZXh0ZXJuIGludCBkbWFfc3VwcG9ydGVkKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCB1NjQgbWFzayk7CitleHRlcm4gaW50IGRtYV9nZXRfY2FjaGVfYWxpZ25tZW50KHZvaWQpOworI2RlZmluZSBkbWFfaXNfY29uc2lzdGVudChoKSAxCisKK3N0YXRpYyBpbmxpbmUgaW50IGRtYV9zZXRfbWFzayhzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBtYXNrKQoreworCWlmICghZGV2LT5kbWFfbWFzayB8fCAhZG1hX3N1cHBvcnRlZChkZXYsIG1hc2spKQorCQlyZXR1cm4gLUVJTzsKKwkqZGV2LT5kbWFfbWFzayA9IG1hc2s7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkbWFfY2FjaGVfc3luYyh2b2lkICp2YWRkciwgc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3sKKwlmbHVzaF93cml0ZV9idWZmZXJzKCk7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2RtYS5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2RtYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2ZmEzYTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvZG1hLmgKQEAgLTAsMCArMSwyOTggQEAKKy8qICRJZDogZG1hLmgsdiAxLjEuMS4xIDIwMDEvMDQvMTkgMjA6MDA6MzggYWsgRXhwICQKKyAqIGxpbnV4L2luY2x1ZGUvYXNtL2RtYS5oOiBEZWZpbmVzIGZvciB1c2luZyBhbmQgYWxsb2NhdGluZyBkbWEgY2hhbm5lbHMuCisgKiBXcml0dGVuIGJ5IEhlbm51cyBCZXJnbWFuLCAxOTkyLgorICogSGlnaCBETUEgY2hhbm5lbCBzdXBwb3J0ICYgaW5mbyBieSBIYW5udSBTYXZvbGFpbmVuCisgKiBhbmQgSm9obiBCb3lkLCBOb3YuIDE5OTIuCisgKi8KKworI2lmbmRlZiBfQVNNX0RNQV9ICisjZGVmaW5lIF9BU01fRE1BX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CS8qIEFuZCBzcGlubG9ja3MgKi8KKyNpbmNsdWRlIDxhc20vaW8uaD4JCS8qIG5lZWQgYnl0ZSBJTyAqLworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKworI2lmZGVmIEhBVkVfUkVBTExZX1NMT1dfRE1BX0NPTlRST0xMRVIKKyNkZWZpbmUgZG1hX291dGIJb3V0Yl9wCisjZWxzZQorI2RlZmluZSBkbWFfb3V0YglvdXRiCisjZW5kaWYKKworI2RlZmluZSBkbWFfaW5iCQlpbmIKKworLyoKKyAqIE5PVEVTIGFib3V0IERNQSB0cmFuc2ZlcnM6CisgKgorICogIGNvbnRyb2xsZXIgMTogY2hhbm5lbHMgMC0zLCBieXRlIG9wZXJhdGlvbnMsIHBvcnRzIDAwLTFGCisgKiAgY29udHJvbGxlciAyOiBjaGFubmVscyA0LTcsIHdvcmQgb3BlcmF0aW9ucywgcG9ydHMgQzAtREYKKyAqCisgKiAgLSBBTEwgcmVnaXN0ZXJzIGFyZSA4IGJpdHMgb25seSwgcmVnYXJkbGVzcyBvZiB0cmFuc2ZlciBzaXplCisgKiAgLSBjaGFubmVsIDQgaXMgbm90IHVzZWQgLSBjYXNjYWRlcyAxIGludG8gMi4KKyAqICAtIGNoYW5uZWxzIDAtMyBhcmUgYnl0ZSAtIGFkZHJlc3Nlcy9jb3VudHMgYXJlIGZvciBwaHlzaWNhbCBieXRlcworICogIC0gY2hhbm5lbHMgNS03IGFyZSB3b3JkIC0gYWRkcmVzc2VzL2NvdW50cyBhcmUgZm9yIHBoeXNpY2FsIHdvcmRzCisgKiAgLSB0cmFuc2ZlcnMgbXVzdCBub3QgY3Jvc3MgcGh5c2ljYWwgNjRLICgwLTMpIG9yIDEyOEsgKDUtNykgYm91bmRhcmllcworICogIC0gdHJhbnNmZXIgY291bnQgbG9hZGVkIHRvIHJlZ2lzdGVycyBpcyAxIGxlc3MgdGhhbiBhY3R1YWwgY291bnQKKyAqICAtIGNvbnRyb2xsZXIgMiBvZmZzZXRzIGFyZSBhbGwgZXZlbiAoMnggb2Zmc2V0cyBmb3IgY29udHJvbGxlciAxKQorICogIC0gcGFnZSByZWdpc3RlcnMgZm9yIDUtNyBkb24ndCB1c2UgZGF0YSBiaXQgMCwgcmVwcmVzZW50IDEyOEsgcGFnZXMKKyAqICAtIHBhZ2UgcmVnaXN0ZXJzIGZvciAwLTMgdXNlIGJpdCAwLCByZXByZXNlbnQgNjRLIHBhZ2VzCisgKgorICogRE1BIHRyYW5zZmVycyBhcmUgbGltaXRlZCB0byB0aGUgbG93ZXIgMTZNQiBvZiBfcGh5c2ljYWxfIG1lbW9yeS4gIAorICogTm90ZSB0aGF0IGFkZHJlc3NlcyBsb2FkZWQgaW50byByZWdpc3RlcnMgbXVzdCBiZSBfcGh5c2ljYWxfIGFkZHJlc3NlcywKKyAqIG5vdCBsb2dpY2FsIGFkZHJlc3NlcyAod2hpY2ggbWF5IGRpZmZlciBpZiBwYWdpbmcgaXMgYWN0aXZlKS4KKyAqCisgKiAgQWRkcmVzcyBtYXBwaW5nIGZvciBjaGFubmVscyAwLTM6CisgKgorICogICBBMjMgLi4uIEExNiBBMTUgLi4uIEE4ICBBNyAuLi4gQTAgICAgKFBoeXNpY2FsIGFkZHJlc3NlcykKKyAqICAgIHwgIC4uLiAgfCAgIHwgIC4uLiB8ICAgfCAgLi4uIHwKKyAqICAgIHwgIC4uLiAgfCAgIHwgIC4uLiB8ICAgfCAgLi4uIHwKKyAqICAgIHwgIC4uLiAgfCAgIHwgIC4uLiB8ICAgfCAgLi4uIHwKKyAqICAgUDcgIC4uLiAgUDAgIEE3IC4uLiBBMCAgQTcgLi4uIEEwICAgCisgKiB8ICAgIFBhZ2UgICAgfCBBZGRyIE1TQiB8IEFkZHIgTFNCIHwgICAoRE1BIHJlZ2lzdGVycykKKyAqCisgKiAgQWRkcmVzcyBtYXBwaW5nIGZvciBjaGFubmVscyA1LTc6CisgKgorICogICBBMjMgLi4uIEExNyBBMTYgQTE1IC4uLiBBOSBBOCBBNyAuLi4gQTEgQTAgICAgKFBoeXNpY2FsIGFkZHJlc3NlcykKKyAqICAgIHwgIC4uLiAgfCAgIFwgICBcICAgLi4uIFwgIFwgIFwgIC4uLiBcICBcCisgKiAgICB8ICAuLi4gIHwgICAgXCAgIFwgICAuLi4gXCAgXCAgXCAgLi4uIFwgIChub3QgdXNlZCkKKyAqICAgIHwgIC4uLiAgfCAgICAgXCAgIFwgICAuLi4gXCAgXCAgXCAgLi4uIFwKKyAqICAgUDcgIC4uLiAgUDEgKDApIEE3IEE2ICAuLi4gQTAgQTcgQTYgLi4uIEEwICAgCisgKiB8ICAgICAgUGFnZSAgICAgIHwgIEFkZHIgTVNCICAgfCAgQWRkciBMU0IgIHwgICAoRE1BIHJlZ2lzdGVycykKKyAqCisgKiBBZ2FpbiwgY2hhbm5lbHMgNS03IHRyYW5zZmVyIF9waHlzaWNhbF8gd29yZHMgKDE2IGJpdHMpLCBzbyBhZGRyZXNzZXMKKyAqIGFuZCBjb3VudHMgX211c3RfIGJlIHdvcmQtYWxpZ25lZCAodGhlIGxvd2VzdCBhZGRyZXNzIGJpdCBpcyBfaWdub3JlZF8gYXQKKyAqIHRoZSBoYXJkd2FyZSBsZXZlbCwgc28gb2RkLWJ5dGUgdHJhbnNmZXJzIGFyZW4ndCBwb3NzaWJsZSkuCisgKgorICogVHJhbnNmZXIgY291bnQgKF9ub3QgIyBieXRlc18pIGlzIGxpbWl0ZWQgdG8gNjRLLCByZXByZXNlbnRlZCBhcyBhY3R1YWwKKyAqIGNvdW50IC0gMSA6IDY0SyA9PiAweEZGRkYsIDEgPT4gMHgwMDAwLiAgVGh1cywgY291bnQgaXMgYWx3YXlzIDEgb3IgbW9yZSwKKyAqIGFuZCB1cCB0byAxMjhLIGJ5dGVzIG1heSBiZSB0cmFuc2ZlcnJlZCBvbiBjaGFubmVscyA1LTcgaW4gb25lIG9wZXJhdGlvbi4gCisgKgorICovCisKKyNkZWZpbmUgTUFYX0RNQV9DSEFOTkVMUwk4CisKKy8qIFRoZSBtYXhpbXVtIGFkZHJlc3MgdGhhdCB3ZSBjYW4gcGVyZm9ybSBhIERNQSB0cmFuc2ZlciB0byBvbiB0aGlzIHBsYXRmb3JtICovCisjZGVmaW5lIE1BWF9ETUFfQUREUkVTUyAgICAgIChQQUdFX09GRlNFVCsweDEwMDAwMDApCisKKy8qIDgyMzcgRE1BIGNvbnRyb2xsZXJzICovCisjZGVmaW5lIElPX0RNQTFfQkFTRQkweDAwCS8qIDggYml0IHNsYXZlIERNQSwgY2hhbm5lbHMgMC4uMyAqLworI2RlZmluZSBJT19ETUEyX0JBU0UJMHhDMAkvKiAxNiBiaXQgbWFzdGVyIERNQSwgY2ggNCg9c2xhdmUgaW5wdXQpLi43ICovCisKKy8qIERNQSBjb250cm9sbGVyIHJlZ2lzdGVycyAqLworI2RlZmluZSBETUExX0NNRF9SRUcJCTB4MDgJLyogY29tbWFuZCByZWdpc3RlciAodykgKi8KKyNkZWZpbmUgRE1BMV9TVEFUX1JFRwkJMHgwOAkvKiBzdGF0dXMgcmVnaXN0ZXIgKHIpICovCisjZGVmaW5lIERNQTFfUkVRX1JFRyAgICAgICAgICAgIDB4MDkgICAgLyogcmVxdWVzdCByZWdpc3RlciAodykgKi8KKyNkZWZpbmUgRE1BMV9NQVNLX1JFRwkJMHgwQQkvKiBzaW5nbGUtY2hhbm5lbCBtYXNrICh3KSAqLworI2RlZmluZSBETUExX01PREVfUkVHCQkweDBCCS8qIG1vZGUgcmVnaXN0ZXIgKHcpICovCisjZGVmaW5lIERNQTFfQ0xFQVJfRkZfUkVHCTB4MEMJLyogY2xlYXIgcG9pbnRlciBmbGlwLWZsb3AgKHcpICovCisjZGVmaW5lIERNQTFfVEVNUF9SRUcgICAgICAgICAgIDB4MEQgICAgLyogVGVtcG9yYXJ5IFJlZ2lzdGVyIChyKSAqLworI2RlZmluZSBETUExX1JFU0VUX1JFRwkJMHgwRAkvKiBNYXN0ZXIgQ2xlYXIgKHcpICovCisjZGVmaW5lIERNQTFfQ0xSX01BU0tfUkVHICAgICAgIDB4MEUgICAgLyogQ2xlYXIgTWFzayAqLworI2RlZmluZSBETUExX01BU0tfQUxMX1JFRyAgICAgICAweDBGICAgIC8qIGFsbC1jaGFubmVscyBtYXNrICh3KSAqLworCisjZGVmaW5lIERNQTJfQ01EX1JFRwkJMHhEMAkvKiBjb21tYW5kIHJlZ2lzdGVyICh3KSAqLworI2RlZmluZSBETUEyX1NUQVRfUkVHCQkweEQwCS8qIHN0YXR1cyByZWdpc3RlciAocikgKi8KKyNkZWZpbmUgRE1BMl9SRVFfUkVHICAgICAgICAgICAgMHhEMiAgICAvKiByZXF1ZXN0IHJlZ2lzdGVyICh3KSAqLworI2RlZmluZSBETUEyX01BU0tfUkVHCQkweEQ0CS8qIHNpbmdsZS1jaGFubmVsIG1hc2sgKHcpICovCisjZGVmaW5lIERNQTJfTU9ERV9SRUcJCTB4RDYJLyogbW9kZSByZWdpc3RlciAodykgKi8KKyNkZWZpbmUgRE1BMl9DTEVBUl9GRl9SRUcJMHhEOAkvKiBjbGVhciBwb2ludGVyIGZsaXAtZmxvcCAodykgKi8KKyNkZWZpbmUgRE1BMl9URU1QX1JFRyAgICAgICAgICAgMHhEQSAgICAvKiBUZW1wb3JhcnkgUmVnaXN0ZXIgKHIpICovCisjZGVmaW5lIERNQTJfUkVTRVRfUkVHCQkweERBCS8qIE1hc3RlciBDbGVhciAodykgKi8KKyNkZWZpbmUgRE1BMl9DTFJfTUFTS19SRUcgICAgICAgMHhEQyAgICAvKiBDbGVhciBNYXNrICovCisjZGVmaW5lIERNQTJfTUFTS19BTExfUkVHICAgICAgIDB4REUgICAgLyogYWxsLWNoYW5uZWxzIG1hc2sgKHcpICovCisKKyNkZWZpbmUgRE1BX0FERFJfMCAgICAgICAgICAgICAgMHgwMCAgICAvKiBETUEgYWRkcmVzcyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgRE1BX0FERFJfMSAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBETUFfQUREUl8yICAgICAgICAgICAgICAweDA0CisjZGVmaW5lIERNQV9BRERSXzMgICAgICAgICAgICAgIDB4MDYKKyNkZWZpbmUgRE1BX0FERFJfNCAgICAgICAgICAgICAgMHhDMAorI2RlZmluZSBETUFfQUREUl81ICAgICAgICAgICAgICAweEM0CisjZGVmaW5lIERNQV9BRERSXzYgICAgICAgICAgICAgIDB4QzgKKyNkZWZpbmUgRE1BX0FERFJfNyAgICAgICAgICAgICAgMHhDQworCisjZGVmaW5lIERNQV9DTlRfMCAgICAgICAgICAgICAgIDB4MDEgICAgLyogRE1BIGNvdW50IHJlZ2lzdGVycyAqLworI2RlZmluZSBETUFfQ05UXzEgICAgICAgICAgICAgICAweDAzCisjZGVmaW5lIERNQV9DTlRfMiAgICAgICAgICAgICAgIDB4MDUKKyNkZWZpbmUgRE1BX0NOVF8zICAgICAgICAgICAgICAgMHgwNworI2RlZmluZSBETUFfQ05UXzQgICAgICAgICAgICAgICAweEMyCisjZGVmaW5lIERNQV9DTlRfNSAgICAgICAgICAgICAgIDB4QzYKKyNkZWZpbmUgRE1BX0NOVF82ICAgICAgICAgICAgICAgMHhDQQorI2RlZmluZSBETUFfQ05UXzcgICAgICAgICAgICAgICAweENFCisKKyNkZWZpbmUgRE1BX1BBR0VfMCAgICAgICAgICAgICAgMHg4NyAgICAvKiBETUEgcGFnZSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgRE1BX1BBR0VfMSAgICAgICAgICAgICAgMHg4MworI2RlZmluZSBETUFfUEFHRV8yICAgICAgICAgICAgICAweDgxCisjZGVmaW5lIERNQV9QQUdFXzMgICAgICAgICAgICAgIDB4ODIKKyNkZWZpbmUgRE1BX1BBR0VfNSAgICAgICAgICAgICAgMHg4QgorI2RlZmluZSBETUFfUEFHRV82ICAgICAgICAgICAgICAweDg5CisjZGVmaW5lIERNQV9QQUdFXzcgICAgICAgICAgICAgIDB4OEEKKworI2RlZmluZSBETUFfTU9ERV9SRUFECTB4NDQJLyogSS9PIHRvIG1lbW9yeSwgbm8gYXV0b2luaXQsIGluY3JlbWVudCwgc2luZ2xlIG1vZGUgKi8KKyNkZWZpbmUgRE1BX01PREVfV1JJVEUJMHg0OAkvKiBtZW1vcnkgdG8gSS9PLCBubyBhdXRvaW5pdCwgaW5jcmVtZW50LCBzaW5nbGUgbW9kZSAqLworI2RlZmluZSBETUFfTU9ERV9DQVNDQURFIDB4QzAgICAvKiBwYXNzIHRocnUgRFJFUS0+SFJRLCBEQUNLPC1ITERBIG9ubHkgKi8KKworI2RlZmluZSBETUFfQVVUT0lOSVQJMHgxMAorCisKK2V4dGVybiBzcGlubG9ja190ICBkbWFfc3Bpbl9sb2NrOworCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGNsYWltX2RtYV9sb2NrKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZG1hX3NwaW5fbG9jaywgZmxhZ3MpOworCXJldHVybiBmbGFnczsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCByZWxlYXNlX2RtYV9sb2NrKHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZG1hX3NwaW5fbG9jaywgZmxhZ3MpOworfQorCisvKiBlbmFibGUvZGlzYWJsZSBhIHNwZWNpZmljIERNQSBjaGFubmVsICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGVuYWJsZV9kbWEodW5zaWduZWQgaW50IGRtYW5yKQoreworCWlmIChkbWFucjw9MykKKwkJZG1hX291dGIoZG1hbnIsICBETUExX01BU0tfUkVHKTsKKwllbHNlCisJCWRtYV9vdXRiKGRtYW5yICYgMywgIERNQTJfTUFTS19SRUcpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGRpc2FibGVfZG1hKHVuc2lnbmVkIGludCBkbWFucikKK3sKKwlpZiAoZG1hbnI8PTMpCisJCWRtYV9vdXRiKGRtYW5yIHwgNCwgIERNQTFfTUFTS19SRUcpOworCWVsc2UKKwkJZG1hX291dGIoKGRtYW5yICYgMykgfCA0LCAgRE1BMl9NQVNLX1JFRyk7Cit9CisKKy8qIENsZWFyIHRoZSAnRE1BIFBvaW50ZXIgRmxpcCBGbG9wJy4KKyAqIFdyaXRlIDAgZm9yIExTQi9NU0IsIDEgZm9yIE1TQi9MU0IgYWNjZXNzLgorICogVXNlIHRoaXMgb25jZSB0byBpbml0aWFsaXplIHRoZSBGRiB0byBhIGtub3duIHN0YXRlLgorICogQWZ0ZXIgdGhhdCwga2VlcCB0cmFjayBvZiBpdC4gOi0pCisgKiAtLS0gSW4gb3JkZXIgdG8gZG8gdGhhdCwgdGhlIERNQSByb3V0aW5lcyBiZWxvdyBzaG91bGQgLS0tCisgKiAtLS0gb25seSBiZSB1c2VkIHdoaWxlIGhvbGRpbmcgdGhlIERNQSBsb2NrICEgLS0tCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgY2xlYXJfZG1hX2ZmKHVuc2lnbmVkIGludCBkbWFucikKK3sKKwlpZiAoZG1hbnI8PTMpCisJCWRtYV9vdXRiKDAsICBETUExX0NMRUFSX0ZGX1JFRyk7CisJZWxzZQorCQlkbWFfb3V0YigwLCAgRE1BMl9DTEVBUl9GRl9SRUcpOworfQorCisvKiBzZXQgbW9kZSAoYWJvdmUpIGZvciBhIHNwZWNpZmljIERNQSBjaGFubmVsICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHNldF9kbWFfbW9kZSh1bnNpZ25lZCBpbnQgZG1hbnIsIGNoYXIgbW9kZSkKK3sKKwlpZiAoZG1hbnI8PTMpCisJCWRtYV9vdXRiKG1vZGUgfCBkbWFuciwgIERNQTFfTU9ERV9SRUcpOworCWVsc2UKKwkJZG1hX291dGIobW9kZSB8IChkbWFuciYzKSwgIERNQTJfTU9ERV9SRUcpOworfQorCisvKiBTZXQgb25seSB0aGUgcGFnZSByZWdpc3RlciBiaXRzIG9mIHRoZSB0cmFuc2ZlciBhZGRyZXNzLgorICogVGhpcyBpcyB1c2VkIGZvciBzdWNjZXNzaXZlIHRyYW5zZmVycyB3aGVuIHdlIGtub3cgdGhlIGNvbnRlbnRzIG9mCisgKiB0aGUgbG93ZXIgMTYgYml0cyBvZiB0aGUgRE1BIGN1cnJlbnQgYWRkcmVzcyByZWdpc3RlciwgYnV0IGEgNjRrIGJvdW5kYXJ5CisgKiBtYXkgaGF2ZSBiZWVuIGNyb3NzZWQuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgc2V0X2RtYV9wYWdlKHVuc2lnbmVkIGludCBkbWFuciwgY2hhciBwYWdlbnIpCit7CisJc3dpdGNoKGRtYW5yKSB7CisJCWNhc2UgMDoKKwkJCWRtYV9vdXRiKHBhZ2VuciwgRE1BX1BBR0VfMCk7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJZG1hX291dGIocGFnZW5yLCBETUFfUEFHRV8xKTsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlkbWFfb3V0YihwYWdlbnIsIERNQV9QQUdFXzIpOworCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJCWRtYV9vdXRiKHBhZ2VuciwgRE1BX1BBR0VfMyk7CisJCQlicmVhazsKKwkJY2FzZSA1OgorCQkJZG1hX291dGIocGFnZW5yICYgMHhmZSwgRE1BX1BBR0VfNSk7CisJCQlicmVhazsKKwkJY2FzZSA2OgorCQkJZG1hX291dGIocGFnZW5yICYgMHhmZSwgRE1BX1BBR0VfNik7CisJCQlicmVhazsKKwkJY2FzZSA3OgorCQkJZG1hX291dGIocGFnZW5yICYgMHhmZSwgRE1BX1BBR0VfNyk7CisJCQlicmVhazsKKwl9Cit9CisKKworLyogU2V0IHRyYW5zZmVyIGFkZHJlc3MgJiBwYWdlIGJpdHMgZm9yIHNwZWNpZmljIERNQSBjaGFubmVsLgorICogQXNzdW1lcyBkbWEgZmxpcGZsb3AgaXMgY2xlYXIuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgc2V0X2RtYV9hZGRyKHVuc2lnbmVkIGludCBkbWFuciwgdW5zaWduZWQgaW50IGEpCit7CisJc2V0X2RtYV9wYWdlKGRtYW5yLCBhPj4xNik7CisJaWYgKGRtYW5yIDw9IDMpICB7CisJICAgIGRtYV9vdXRiKCBhICYgMHhmZiwgKChkbWFuciYzKTw8MSkgKyBJT19ETUExX0JBU0UgKTsKKyAgICAgICAgICAgIGRtYV9vdXRiKCAoYT4+OCkgJiAweGZmLCAoKGRtYW5yJjMpPDwxKSArIElPX0RNQTFfQkFTRSApOworCX0gIGVsc2UgIHsKKwkgICAgZG1hX291dGIoIChhPj4xKSAmIDB4ZmYsICgoZG1hbnImMyk8PDIpICsgSU9fRE1BMl9CQVNFICk7CisJICAgIGRtYV9vdXRiKCAoYT4+OSkgJiAweGZmLCAoKGRtYW5yJjMpPDwyKSArIElPX0RNQTJfQkFTRSApOworCX0KK30KKworCisvKiBTZXQgdHJhbnNmZXIgc2l6ZSAobWF4IDY0ayBmb3IgRE1BMS4uMywgMTI4ayBmb3IgRE1BNS4uNykgZm9yCisgKiBhIHNwZWNpZmljIERNQSBjaGFubmVsLgorICogWW91IG11c3QgZW5zdXJlIHRoZSBwYXJhbWV0ZXJzIGFyZSB2YWxpZC4KKyAqIE5PVEU6IGZyb20gYSBtYW51YWw6ICJ0aGUgbnVtYmVyIG9mIHRyYW5zZmVycyBpcyBvbmUgbW9yZQorICogdGhhbiB0aGUgaW5pdGlhbCB3b3JkIGNvdW50IiEgVGhpcyBpcyB0YWtlbiBpbnRvIGFjY291bnQuCisgKiBBc3N1bWVzIGRtYSBmbGlwLWZsb3AgaXMgY2xlYXIuCisgKiBOT1RFIDI6ICJjb3VudCIgcmVwcmVzZW50cyBfYnl0ZXNfIGFuZCBtdXN0IGJlIGV2ZW4gZm9yIGNoYW5uZWxzIDUtNy4KKyAqLworc3RhdGljIF9faW5saW5lX18gdm9pZCBzZXRfZG1hX2NvdW50KHVuc2lnbmVkIGludCBkbWFuciwgdW5zaWduZWQgaW50IGNvdW50KQoreworICAgICAgICBjb3VudC0tOworCWlmIChkbWFuciA8PSAzKSAgeworCSAgICBkbWFfb3V0YiggY291bnQgJiAweGZmLCAoKGRtYW5yJjMpPDwxKSArIDEgKyBJT19ETUExX0JBU0UgKTsKKwkgICAgZG1hX291dGIoIChjb3VudD4+OCkgJiAweGZmLCAoKGRtYW5yJjMpPDwxKSArIDEgKyBJT19ETUExX0JBU0UgKTsKKyAgICAgICAgfSBlbHNlIHsKKwkgICAgZG1hX291dGIoIChjb3VudD4+MSkgJiAweGZmLCAoKGRtYW5yJjMpPDwyKSArIDIgKyBJT19ETUEyX0JBU0UgKTsKKwkgICAgZG1hX291dGIoIChjb3VudD4+OSkgJiAweGZmLCAoKGRtYW5yJjMpPDwyKSArIDIgKyBJT19ETUEyX0JBU0UgKTsKKyAgICAgICAgfQorfQorCisKKy8qIEdldCBETUEgcmVzaWR1ZSBjb3VudC4gQWZ0ZXIgYSBETUEgdHJhbnNmZXIsIHRoaXMKKyAqIHNob3VsZCByZXR1cm4gemVyby4gUmVhZGluZyB0aGlzIHdoaWxlIGEgRE1BIHRyYW5zZmVyIGlzCisgKiBzdGlsbCBpbiBwcm9ncmVzcyB3aWxsIHJldHVybiB1bnByZWRpY3RhYmxlIHJlc3VsdHMuCisgKiBJZiBjYWxsZWQgYmVmb3JlIHRoZSBjaGFubmVsIGhhcyBiZWVuIHVzZWQsIGl0IG1heSByZXR1cm4gMS4KKyAqIE90aGVyd2lzZSwgaXQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIF9ieXRlc18gbGVmdCB0byB0cmFuc2Zlci4KKyAqCisgKiBBc3N1bWVzIERNQSBmbGlwLWZsb3AgaXMgY2xlYXIuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIGludCBnZXRfZG1hX3Jlc2lkdWUodW5zaWduZWQgaW50IGRtYW5yKQoreworCXVuc2lnbmVkIGludCBpb19wb3J0ID0gKGRtYW5yPD0zKT8gKChkbWFuciYzKTw8MSkgKyAxICsgSU9fRE1BMV9CQVNFCisJCQkJCSA6ICgoZG1hbnImMyk8PDIpICsgMiArIElPX0RNQTJfQkFTRTsKKworCS8qIHVzaW5nIHNob3J0IHRvIGdldCAxNi1iaXQgd3JhcCBhcm91bmQgKi8KKwl1bnNpZ25lZCBzaG9ydCBjb3VudDsKKworCWNvdW50ID0gMSArIGRtYV9pbmIoaW9fcG9ydCk7CisJY291bnQgKz0gZG1hX2luYihpb19wb3J0KSA8PCA4OworCQorCXJldHVybiAoZG1hbnI8PTMpPyBjb3VudCA6IChjb3VudDw8MSk7Cit9CisKKworLyogVGhlc2UgYXJlIGluIGtlcm5lbC9kbWEuYzogKi8KK2V4dGVybiBpbnQgcmVxdWVzdF9kbWEodW5zaWduZWQgaW50IGRtYW5yLCBjb25zdCBjaGFyICogZGV2aWNlX2lkKTsJLyogcmVzZXJ2ZSBhIERNQSBjaGFubmVsICovCitleHRlcm4gdm9pZCBmcmVlX2RtYSh1bnNpZ25lZCBpbnQgZG1hbnIpOwkvKiByZWxlYXNlIGl0IGFnYWluICovCisKKy8qIEZyb20gUENJICovCisKKyNpZmRlZiBDT05GSUdfUENJCitleHRlcm4gaW50IGlzYV9kbWFfYnJpZGdlX2J1Z2d5OworI2Vsc2UKKyNkZWZpbmUgaXNhX2RtYV9icmlkZ2VfYnVnZ3kgCSgwKQorI2VuZGlmCisKKyNlbmRpZiAvKiBfQVNNX0RNQV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvZHdhcmYyLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvZHdhcmYyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZkNDIxMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9kd2FyZjIuaApAQCAtMCwwICsxLDQyIEBACisjaWZuZGVmIF9EV0FSRjJfSAorI2RlZmluZSBfRFdBUkYyX0ggMQorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjd2FybmluZyAiYXNtL2R3YXJmMi5oIHNob3VsZCBiZSBvbmx5IGluY2x1ZGVkIGluIHB1cmUgYXNzZW1ibHkgZmlsZXMiCisjZW5kaWYKKworLyogCisgICBNYWNyb3MgZm9yIGR3YXJmMiBDRkkgdW53aW5kIHRhYmxlIGVudHJpZXMuCisgICBTZWUgImFzLmluZm8iIGZvciBkZXRhaWxzIG9uIHRoZXNlIHBzZXVkbyBvcHMuIFVuZm9ydHVuYXRlbHkgCisgICB0aGV5IGFyZSBvbmx5IHN1cHBvcnRlZCBpbiB2ZXJ5IG5ldyBiaW51dGlscywgc28gZGVmaW5lIHRoZW0gCisgICBhd2F5IGZvciBvbGRlciB2ZXJzaW9uLiAKKyAqLworCisjaWZkZWYgQ09ORklHX0RFQlVHX0lORk8KKworI2RlZmluZSBDRklfU1RBUlRQUk9DIC5jZmlfc3RhcnRwcm9jCisjZGVmaW5lIENGSV9FTkRQUk9DIC5jZmlfZW5kcHJvYworI2RlZmluZSBDRklfREVGX0NGQSAuY2ZpX2RlZl9jZmEKKyNkZWZpbmUgQ0ZJX0RFRl9DRkFfUkVHSVNURVIgLmNmaV9kZWZfY2ZhX3JlZ2lzdGVyCisjZGVmaW5lIENGSV9ERUZfQ0ZBX09GRlNFVCAuY2ZpX2RlZl9jZmFfb2Zmc2V0CisjZGVmaW5lIENGSV9BREpVU1RfQ0ZBX09GRlNFVCAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0CisjZGVmaW5lIENGSV9PRkZTRVQgLmNmaV9vZmZzZXQKKyNkZWZpbmUgQ0ZJX1JFTF9PRkZTRVQgLmNmaV9yZWxfb2Zmc2V0CisKKyNlbHNlCisKKy8qIHVzZSBhc3NlbWJsZXIgbGluZSBjb21tZW50IGNoYXJhY3RlciAjIHRvIGlnbm9yZSB0aGUgYXJndW1lbnRzLiAqLworI2RlZmluZSBDRklfU1RBUlRQUk9DCSMKKyNkZWZpbmUgQ0ZJX0VORFBST0MJIworI2RlZmluZSBDRklfREVGX0NGQQkjCisjZGVmaW5lIENGSV9ERUZfQ0ZBX1JFR0lTVEVSCSMKKyNkZWZpbmUgQ0ZJX0RFRl9DRkFfT0ZGU0VUCSMKKyNkZWZpbmUgQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUCSMKKyNkZWZpbmUgQ0ZJX09GRlNFVAkjCisjZGVmaW5lIENGSV9SRUxfT0ZGU0VUCSMKKworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2U4MjAuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9lODIwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWIzNzZlNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9lODIwLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIHN0cnVjdHVyZXMgYW5kIGRlZmluaXRpb25zIGZvciB0aGUgaW50IDE1LCBheD1lODIwIG1lbW9yeSBtYXAKKyAqIHNjaGVtZS4KKyAqCisgKiBJbiBhIG51dHNoZWxsLCBzZXR1cC5TIHBvcHVsYXRlcyBhIHNjcmF0Y2ggdGFibGUgaW4gdGhlCisgKiBlbXB0eV96ZXJvX2Jsb2NrIHRoYXQgY29udGFpbnMgYSBsaXN0IG9mIHVzYWJsZSBhZGRyZXNzL3NpemUKKyAqIGR1cGxlcy4gIHNldHVwLmMsIHRoaXMgaW5mb3JtYXRpb24gaXMgdHJhbnNmZXJyZWQgaW50byB0aGUgZTgyMG1hcCwKKyAqIGFuZCBpbiBpbml0LmMvbnVtYS5jLCB0aGF0IG5ldyBpbmZvcm1hdGlvbiBpcyB1c2VkIHRvIG1hcmsgcGFnZXMKKyAqIHJlc2VydmVkIG9yIG5vdC4KKyAqLworI2lmbmRlZiBfX0U4MjBfSEVBREVSCisjZGVmaW5lIF9fRTgyMF9IRUFERVIKKworI2luY2x1ZGUgPGxpbnV4L21tem9uZS5oPgorCisjZGVmaW5lIEU4MjBNQVAJMHgyZDAJCS8qIG91ciBtYXAgKi8KKyNkZWZpbmUgRTgyME1BWAkzMgkJLyogbnVtYmVyIG9mIGVudHJpZXMgaW4gRTgyME1BUCAqLworI2RlZmluZSBFODIwTlIJMHgxZTgJCS8qICMgZW50cmllcyBpbiBFODIwTUFQICovCisKKyNkZWZpbmUgRTgyMF9SQU0JMQorI2RlZmluZSBFODIwX1JFU0VSVkVECTIKKyNkZWZpbmUgRTgyMF9BQ1BJCTMgLyogdXNhYmxlIGFzIFJBTSBvbmNlIEFDUEkgdGFibGVzIGhhdmUgYmVlbiByZWFkICovCisjZGVmaW5lIEU4MjBfTlZTCTQKKworI2RlZmluZSBISUdIX01FTU9SWQkoMTAyNCoxMDI0KQorCisjZGVmaW5lIExPV01FTVNJWkUoKQkoMHg5ZjAwMCkKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK3N0cnVjdCBlODIwZW50cnkgeworCXU2NCBhZGRyOwkvKiBzdGFydCBvZiBtZW1vcnkgc2VnbWVudCAqLworCXU2NCBzaXplOwkvKiBzaXplIG9mIG1lbW9yeSBzZWdtZW50ICovCisJdTMyIHR5cGU7CS8qIHR5cGUgb2YgbWVtb3J5IHNlZ21lbnQgKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBlODIwbWFwIHsKKyAgICBpbnQgbnJfbWFwOworCXN0cnVjdCBlODIwZW50cnkgbWFwW0U4MjBNQVhdOworfTsKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZmluZF9lODIwX2FyZWEodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIAorCQkJCSAgICB1bnNpZ25lZCBzaXplKTsKK2V4dGVybiB2b2lkIGFkZF9tZW1vcnlfcmVnaW9uKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgCisJCQkgICAgICBpbnQgdHlwZSk7CitleHRlcm4gdm9pZCBzZXR1cF9tZW1vcnlfcmVnaW9uKHZvaWQpOworZXh0ZXJuIHZvaWQgY29udGlnX2U4MjBfc2V0dXAodm9pZCk7IAorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZTgyMF9lbmRfb2ZfcmFtKHZvaWQpOworZXh0ZXJuIHZvaWQgZTgyMF9yZXNlcnZlX3Jlc291cmNlcyh2b2lkKTsKK2V4dGVybiB2b2lkIGU4MjBfcHJpbnRfbWFwKGNoYXIgKndobyk7CitleHRlcm4gaW50IGU4MjBfbWFwcGVkKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCB1bnNpZ25lZCB0eXBlKTsKKworZXh0ZXJuIHZvaWQgZTgyMF9ib290bWVtX2ZyZWUocGdfZGF0YV90ICpwZ2RhdCwgdW5zaWduZWQgbG9uZyBzdGFydCx1bnNpZ25lZCBsb25nIGVuZCk7CisKK2V4dGVybiB2b2lkIF9faW5pdCBwYXJzZV9tZW1vcHQoY2hhciAqcCwgY2hhciAqKmVuZCk7CisKK2V4dGVybiBzdHJ1Y3QgZTgyMG1hcCBlODIwOworI2VuZGlmLyohX19BU1NFTUJMWV9fKi8KKworI2VuZGlmLypfX0U4MjBfSEVBREVSKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9lbGYuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9lbGYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjBhMzVlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L2VsZi5oCkBAIC0wLDAgKzEsMTYwIEBACisjaWZuZGVmIF9fQVNNX1g4Nl82NF9FTEZfSAorI2RlZmluZSBfX0FTTV9YODZfNjRfRUxGX0gKKworLyoKKyAqIEVMRiByZWdpc3RlciBkZWZpbml0aW9ucy4uCisgKi8KKworI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vdXNlci5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKworLyogeDg2LTY0IHJlbG9jYXRpb24gdHlwZXMgKi8KKyNkZWZpbmUgUl9YODZfNjRfTk9ORQkJMAkvKiBObyByZWxvYyAqLworI2RlZmluZSBSX1g4Nl82NF82NAkJMQkvKiBEaXJlY3QgNjQgYml0ICAqLworI2RlZmluZSBSX1g4Nl82NF9QQzMyCQkyCS8qIFBDIHJlbGF0aXZlIDMyIGJpdCBzaWduZWQgKi8KKyNkZWZpbmUgUl9YODZfNjRfR09UMzIJCTMJLyogMzIgYml0IEdPVCBlbnRyeSAqLworI2RlZmluZSBSX1g4Nl82NF9QTFQzMgkJNAkvKiAzMiBiaXQgUExUIGFkZHJlc3MgKi8KKyNkZWZpbmUgUl9YODZfNjRfQ09QWQkJNQkvKiBDb3B5IHN5bWJvbCBhdCBydW50aW1lICovCisjZGVmaW5lIFJfWDg2XzY0X0dMT0JfREFUCTYJLyogQ3JlYXRlIEdPVCBlbnRyeSAqLworI2RlZmluZSBSX1g4Nl82NF9KVU1QX1NMT1QJNwkvKiBDcmVhdGUgUExUIGVudHJ5ICovCisjZGVmaW5lIFJfWDg2XzY0X1JFTEFUSVZFCTgJLyogQWRqdXN0IGJ5IHByb2dyYW0gYmFzZSAqLworI2RlZmluZSBSX1g4Nl82NF9HT1RQQ1JFTAk5CS8qIDMyIGJpdCBzaWduZWQgcGMgcmVsYXRpdmUKKwkJCQkJICAgb2Zmc2V0IHRvIEdPVCAqLworI2RlZmluZSBSX1g4Nl82NF8zMgkJMTAJLyogRGlyZWN0IDMyIGJpdCB6ZXJvIGV4dGVuZGVkICovCisjZGVmaW5lIFJfWDg2XzY0XzMyUwkJMTEJLyogRGlyZWN0IDMyIGJpdCBzaWduIGV4dGVuZGVkICovCisjZGVmaW5lIFJfWDg2XzY0XzE2CQkxMgkvKiBEaXJlY3QgMTYgYml0IHplcm8gZXh0ZW5kZWQgKi8KKyNkZWZpbmUgUl9YODZfNjRfUEMxNgkJMTMJLyogMTYgYml0IHNpZ24gZXh0ZW5kZWQgcGMgcmVsYXRpdmUgKi8KKyNkZWZpbmUgUl9YODZfNjRfOAkJMTQJLyogRGlyZWN0IDggYml0IHNpZ24gZXh0ZW5kZWQgICovCisjZGVmaW5lIFJfWDg2XzY0X1BDOAkJMTUJLyogOCBiaXQgc2lnbiBleHRlbmRlZCBwYyByZWxhdGl2ZSAqLworCisjZGVmaW5lIFJfWDg2XzY0X05VTQkJMTYKKwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGVsZl9ncmVnX3Q7CisKKyNkZWZpbmUgRUxGX05HUkVHIChzaXplb2YgKHN0cnVjdCB1c2VyX3JlZ3Nfc3RydWN0KSAvIHNpemVvZihlbGZfZ3JlZ190KSkKK3R5cGVkZWYgZWxmX2dyZWdfdCBlbGZfZ3JlZ3NldF90W0VMRl9OR1JFR107CisKK3R5cGVkZWYgc3RydWN0IHVzZXJfaTM4N19zdHJ1Y3QgZWxmX2ZwcmVnc2V0X3Q7CisKKy8qCisgKiBUaGlzIGlzIHVzZWQgdG8gZW5zdXJlIHdlIGRvbid0IGxvYWQgc29tZXRoaW5nIGZvciB0aGUgd3JvbmcgYXJjaGl0ZWN0dXJlLgorICovCisjZGVmaW5lIGVsZl9jaGVja19hcmNoKHgpIFwKKwkoKHgpLT5lX21hY2hpbmUgPT0gRU1fWDg2XzY0KQorCisvKgorICogVGhlc2UgYXJlIHVzZWQgdG8gc2V0IHBhcmFtZXRlcnMgaW4gdGhlIGNvcmUgZHVtcHMuCisgKi8KKyNkZWZpbmUgRUxGX0NMQVNTCUVMRkNMQVNTNjQKKyNkZWZpbmUgRUxGX0RBVEEJRUxGREFUQTJMU0IKKyNkZWZpbmUgRUxGX0FSQ0gJRU1fWDg2XzY0CisKKy8qIFNWUjQvaTM4NiBBQkkgKHBhZ2VzIDMtMzEsIDMtMzIpIHNheXMgdGhhdCB3aGVuIHRoZSBwcm9ncmFtIHN0YXJ0cyAlZWR4CisgICBjb250YWlucyBhIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiB3aGljaCBtaWdodCBiZSByZWdpc3RlcmVkIHVzaW5nIGBhdGV4aXQnLgorICAgVGhpcyBwcm92aWRlcyBhIG1lYW4gZm9yIHRoZSBkeW5hbWljIGxpbmtlciB0byBjYWxsIERUX0ZJTkkgZnVuY3Rpb25zIGZvcgorICAgc2hhcmVkIGxpYnJhcmllcyB0aGF0IGhhdmUgYmVlbiBsb2FkZWQgYmVmb3JlIHRoZSBjb2RlIHJ1bnMuCisKKyAgIEEgdmFsdWUgb2YgMCB0ZWxscyB3ZSBoYXZlIG5vIHN1Y2ggaGFuZGxlci4gCisKKyAgIFdlIG1pZ2h0IGFzIHdlbGwgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgZWxzZSBpcyBjbGVhcmVkIHRvbyAoZXhjZXB0IGZvciAlZXNwKSwKKyAgIGp1c3QgdG8gbWFrZSB0aGluZ3MgbW9yZSBkZXRlcm1pbmlzdGljLgorICovCisjZGVmaW5lIEVMRl9QTEFUX0lOSVQoX3IsIGxvYWRfYWRkcikJZG8geyBcCisJc3RydWN0IHRhc2tfc3RydWN0ICpjdXIgPSBjdXJyZW50OyBcCisJKF9yKS0+cmJ4ID0gMDsgKF9yKS0+cmN4ID0gMDsgKF9yKS0+cmR4ID0gMDsgXAorCShfciktPnJzaSA9IDA7IChfciktPnJkaSA9IDA7IChfciktPnJicCA9IDA7IFwKKwkoX3IpLT5yYXggPSAwOwkJCQlcCisJKF9yKS0+cjggPSAwOwkJCQlcCisJKF9yKS0+cjkgPSAwOwkJCQlcCisJKF9yKS0+cjEwID0gMDsJCQkJXAorCShfciktPnIxMSA9IDA7CQkJCVwKKwkoX3IpLT5yMTIgPSAwOwkJCQlcCisJKF9yKS0+cjEzID0gMDsJCQkJXAorCShfciktPnIxNCA9IDA7CQkJCVwKKwkoX3IpLT5yMTUgPSAwOwkJCQlcCisgICAgICAgIGN1ci0+dGhyZWFkLmZzID0gMDsgY3VyLT50aHJlYWQuZ3MgPSAwOyBcCisJY3VyLT50aHJlYWQuZnNpbmRleCA9IDA7IGN1ci0+dGhyZWFkLmdzaW5kZXggPSAwOyBcCisgICAgICAgIGN1ci0+dGhyZWFkLmRzID0gMDsgY3VyLT50aHJlYWQuZXMgPSAwOyAgXAorCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9JQTMyKTsgXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBVU0VfRUxGX0NPUkVfRFVNUAorI2RlZmluZSBFTEZfRVhFQ19QQUdFU0laRQk0MDk2CisKKy8qIFRoaXMgaXMgdGhlIGxvY2F0aW9uIHRoYXQgYW4gRVRfRFlOIHByb2dyYW0gaXMgbG9hZGVkIGlmIGV4ZWMnZWQuICBUeXBpY2FsCisgICB1c2Ugb2YgdGhpcyBpcyB0byBpbnZva2UgIi4vbGQuc28gc29tZXByb2ciIHRvIHRlc3Qgb3V0IGEgbmV3IHZlcnNpb24gb2YKKyAgIHRoZSBsb2FkZXIuICBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGl0IGlzIG91dCBvZiB0aGUgd2F5IG9mIHRoZSBwcm9ncmFtCisgICB0aGF0IGl0IHdpbGwgImV4ZWMiLCBhbmQgdGhhdCB0aGVyZSBpcyBzdWZmaWNpZW50IHJvb20gZm9yIHRoZSBicmsuICAqLworCisjZGVmaW5lIEVMRl9FVF9EWU5fQkFTRSAgICAgICAgICgyICogVEFTS19TSVpFIC8gMykKKworLyogcmVncyBpcyBzdHJ1Y3QgcHRfcmVncywgcHJfcmVnIGlzIGVsZl9ncmVnc2V0X3QgKHdoaWNoIGlzCisgICBub3cgc3RydWN0X3VzZXJfcmVncywgdGhleSBhcmUgZGlmZmVyZW50KS4gQXNzdW1lcyBjdXJyZW50IGlzIHRoZSBwcm9jZXNzCisgICBnZXR0aW5nIGR1bXBlZC4gKi8KKworI2RlZmluZSBFTEZfQ09SRV9DT1BZX1JFR1MocHJfcmVnLCByZWdzKSAgZG8geyBcCisJdW5zaWduZWQgdjsJCQkJCQlcCisJKHByX3JlZylbMF0gPSAocmVncyktPnIxNTsJCQkJXAorCShwcl9yZWcpWzFdID0gKHJlZ3MpLT5yMTQ7CQkJCVwKKwkocHJfcmVnKVsyXSA9IChyZWdzKS0+cjEzOwkJCQlcCisJKHByX3JlZylbM10gPSAocmVncyktPnIxMjsJCQkJXAorCShwcl9yZWcpWzRdID0gKHJlZ3MpLT5yYnA7CQkJCVwKKwkocHJfcmVnKVs1XSA9IChyZWdzKS0+cmJ4OwkJCQlcCisJKHByX3JlZylbNl0gPSAocmVncyktPnIxMTsJCQkJXAorCShwcl9yZWcpWzddID0gKHJlZ3MpLT5yMTA7CQkJCVwKKwkocHJfcmVnKVs4XSA9IChyZWdzKS0+cjk7CQkJCVwKKwkocHJfcmVnKVs5XSA9IChyZWdzKS0+cjg7CQkJCVwKKwkocHJfcmVnKVsxMF0gPSAocmVncyktPnJheDsJCQkJXAorCShwcl9yZWcpWzExXSA9IChyZWdzKS0+cmN4OwkJCQlcCisJKHByX3JlZylbMTJdID0gKHJlZ3MpLT5yZHg7CQkJCVwKKwkocHJfcmVnKVsxM10gPSAocmVncyktPnJzaTsJCQkJXAorCShwcl9yZWcpWzE0XSA9IChyZWdzKS0+cmRpOwkJCQlcCisJKHByX3JlZylbMTVdID0gKHJlZ3MpLT5vcmlnX3JheDsJCQlcCisJKHByX3JlZylbMTZdID0gKHJlZ3MpLT5yaXA7CQkJXAorCShwcl9yZWcpWzE3XSA9IChyZWdzKS0+Y3M7CQkJXAorCShwcl9yZWcpWzE4XSA9IChyZWdzKS0+ZWZsYWdzOwkJCVwKKwkocHJfcmVnKVsxOV0gPSAocmVncyktPnJzcDsJCQlcCisJKHByX3JlZylbMjBdID0gKHJlZ3MpLT5zczsJCQlcCisJKHByX3JlZylbMjFdID0gY3VycmVudC0+dGhyZWFkLmZzOwkJCVwKKwkocHJfcmVnKVsyMl0gPSBjdXJyZW50LT50aHJlYWQuZ3M7CQkJXAorCWFzbSgibW92bCAlJWRzLCUwIiA6ICI9ciIgKHYpKTsgKHByX3JlZylbMjNdID0gdjsJXAorCWFzbSgibW92bCAlJWVzLCUwIiA6ICI9ciIgKHYpKTsgKHByX3JlZylbMjRdID0gdjsJXAorCWFzbSgibW92bCAlJWZzLCUwIiA6ICI9ciIgKHYpKTsgKHByX3JlZylbMjVdID0gdjsJXAorCWFzbSgibW92bCAlJWdzLCUwIiA6ICI9ciIgKHYpKTsgKHByX3JlZylbMjZdID0gdjsJXAorfSB3aGlsZSgwKTsKKworLyogVGhpcyB5aWVsZHMgYSBtYXNrIHRoYXQgdXNlciBwcm9ncmFtcyBjYW4gdXNlIHRvIGZpZ3VyZSBvdXQgd2hhdAorICAgaW5zdHJ1Y3Rpb24gc2V0IHRoaXMgQ1BVIHN1cHBvcnRzLiAgVGhpcyBjb3VsZCBiZSBkb25lIGluIHVzZXIgc3BhY2UsCisgICBidXQgaXQncyBub3QgZWFzeSwgYW5kIHdlJ3ZlIGFscmVhZHkgZG9uZSBpdCBoZXJlLiAgKi8KKworI2RlZmluZSBFTEZfSFdDQVAJKGJvb3RfY3B1X2RhdGEueDg2X2NhcGFiaWxpdHlbMF0pCisKKy8qIFRoaXMgeWllbGRzIGEgc3RyaW5nIHRoYXQgbGQuc28gd2lsbCB1c2UgdG8gbG9hZCBpbXBsZW1lbnRhdGlvbgorICAgc3BlY2lmaWMgbGlicmFyaWVzIGZvciBvcHRpbWl6YXRpb24uICBUaGlzIGlzIG1vcmUgc3BlY2lmaWMgaW4KKyAgIGludGVudCB0aGFuIHBva2luZyBhdCB1bmFtZSBvciAvcHJvYy9jcHVpbmZvLgorCisgICBGb3IgdGhlIG1vbWVudCwgd2UgaGF2ZSBvbmx5IG9wdGltaXphdGlvbnMgZm9yIHRoZSBJbnRlbCBnZW5lcmF0aW9ucywKKyAgIGJ1dCB0aGF0IGNvdWxkIGNoYW5nZS4uLiAqLworCisvKiBJJ20gbm90IHN1cmUgaWYgd2UgY2FuIHVzZSAnLScgaGVyZSAqLworI2RlZmluZSBFTEZfUExBVEZPUk0gICgieDg2XzY0IikKKworI2lmZGVmIF9fS0VSTkVMX18KK2V4dGVybiB2b2lkIHNldF9wZXJzb25hbGl0eV82NGJpdCh2b2lkKTsKKyNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4LCBpYmNzMikgc2V0X3BlcnNvbmFsaXR5XzY0Yml0KCkKKy8qCisgKiBBbiBleGVjdXRhYmxlIGZvciB3aGljaCBlbGZfcmVhZF9pbXBsaWVzX2V4ZWMoKSByZXR1cm5zIFRSVUUgd2lsbAorICogaGF2ZSB0aGUgUkVBRF9JTVBMSUVTX0VYRUMgcGVyc29uYWxpdHkgZmxhZyBzZXQgYXV0b21hdGljYWxseS4KKyAqLworI2RlZmluZSBlbGZfcmVhZF9pbXBsaWVzX2V4ZWMoZXgsIGV4ZWN1dGFibGVfc3RhY2spCShleGVjdXRhYmxlX3N0YWNrICE9IEVYU1RBQ0tfRElTQUJMRV9YKQorCitleHRlcm4gaW50IGR1bXBfdGFza19yZWdzIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgZWxmX2dyZWdzZXRfdCAqKTsKK2V4dGVybiBpbnQgZHVtcF90YXNrX2ZwdSAoc3RydWN0IHRhc2tfc3RydWN0ICosIGVsZl9mcHJlZ3NldF90ICopOworCisjZGVmaW5lIEVMRl9DT1JFX0NPUFlfVEFTS19SRUdTKHRzaywgZWxmX3JlZ3MpIGR1bXBfdGFza19yZWdzKHRzaywgZWxmX3JlZ3MpCisjZGVmaW5lIEVMRl9DT1JFX0NPUFlfRlBSRUdTKHRzaywgZWxmX2ZwcmVncykgZHVtcF90YXNrX2ZwdSh0c2ssIGVsZl9mcHJlZ3MpCisKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9lcnJuby5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2Vycm5vLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzExMTgyMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9lcnJuby5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfWDg2NjRfRVJSTk9fSAorI2RlZmluZSBfWDg2NjRfRVJSTk9fSAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZXJybm8uaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvZmNudGwuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9mY250bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0MTFmMjIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvZmNudGwuaApAQCAtMCwwICsxLDc2IEBACisjaWZuZGVmIF9YODZfNjRfRkNOVExfSAorI2RlZmluZSBfWDg2XzY0X0ZDTlRMX0gKKworLyogb3Blbi9mY250bCAtIE9fU1lOQyBpcyBvbmx5IGltcGxlbWVudGVkIG9uIGJsb2NrcyBkZXZpY2VzIGFuZCBvbiBmaWxlcworICAgbG9jYXRlZCBvbiBhbiBleHQyIGZpbGUgc3lzdGVtICovCisjZGVmaW5lIE9fQUNDTU9ERQkgICAwMDAzCisjZGVmaW5lIE9fUkRPTkxZCSAgICAgMDAKKyNkZWZpbmUgT19XUk9OTFkJICAgICAwMQorI2RlZmluZSBPX1JEV1IJCSAgICAgMDIKKyNkZWZpbmUgT19DUkVBVAkJICAgMDEwMAkvKiBub3QgZmNudGwgKi8KKyNkZWZpbmUgT19FWENMCQkgICAwMjAwCS8qIG5vdCBmY250bCAqLworI2RlZmluZSBPX05PQ1RUWQkgICAwNDAwCS8qIG5vdCBmY250bCAqLworI2RlZmluZSBPX1RSVU5DCQkgIDAxMDAwCS8qIG5vdCBmY250bCAqLworI2RlZmluZSBPX0FQUEVORAkgIDAyMDAwCisjZGVmaW5lIE9fTk9OQkxPQ0sJICAwNDAwMAorI2RlZmluZSBPX05ERUxBWQlPX05PTkJMT0NLCisjZGVmaW5lIE9fU1lOQwkJIDAxMDAwMAorI2RlZmluZSBGQVNZTkMJCSAwMjAwMDAJLyogZmNudGwsIGZvciBCU0QgY29tcGF0aWJpbGl0eSAqLworI2RlZmluZSBPX0RJUkVDVAkgMDQwMDAwCS8qIGRpcmVjdCBkaXNrIGFjY2VzcyBoaW50ICovCisjZGVmaW5lIE9fTEFSR0VGSUxFCTAxMDAwMDAKKyNkZWZpbmUgT19ESVJFQ1RPUlkJMDIwMDAwMAkvKiBtdXN0IGJlIGEgZGlyZWN0b3J5ICovCisjZGVmaW5lIE9fTk9GT0xMT1cJMDQwMDAwMCAvKiBkb24ndCBmb2xsb3cgbGlua3MgKi8KKyNkZWZpbmUgT19OT0FUSU1FCTAxMDAwMDAwCisKKyNkZWZpbmUgRl9EVVBGRAkJMAkvKiBkdXAgKi8KKyNkZWZpbmUgRl9HRVRGRAkJMQkvKiBnZXQgY2xvc2Vfb25fZXhlYyAqLworI2RlZmluZSBGX1NFVEZECQkyCS8qIHNldC9jbGVhciBjbG9zZV9vbl9leGVjICovCisjZGVmaW5lIEZfR0VURkwJCTMJLyogZ2V0IGZpbGUtPmZfZmxhZ3MgKi8KKyNkZWZpbmUgRl9TRVRGTAkJNAkvKiBzZXQgZmlsZS0+Zl9mbGFncyAqLworI2RlZmluZSBGX0dFVExLCQk1CisjZGVmaW5lIEZfU0VUTEsJCTYKKyNkZWZpbmUgRl9TRVRMS1cJNworCisjZGVmaW5lIEZfU0VUT1dOCTgJLyogIGZvciBzb2NrZXRzLiAqLworI2RlZmluZSBGX0dFVE9XTgk5CS8qICBmb3Igc29ja2V0cy4gKi8KKyNkZWZpbmUgRl9TRVRTSUcJMTAJLyogIGZvciBzb2NrZXRzLiAqLworI2RlZmluZSBGX0dFVFNJRwkxMQkvKiAgZm9yIHNvY2tldHMuICovCisKKy8qIGZvciBGX1tHRVR8U0VUXUZMICovCisjZGVmaW5lIEZEX0NMT0VYRUMJMQkvKiBhY3R1YWxseSBhbnl0aGluZyB3aXRoIGxvdyBiaXQgc2V0IGdvZXMgKi8KKworLyogZm9yIHBvc2l4IGZjbnRsKCkgYW5kIGxvY2tmKCkgKi8KKyNkZWZpbmUgRl9SRExDSwkJMAorI2RlZmluZSBGX1dSTENLCQkxCisjZGVmaW5lIEZfVU5MQ0sJCTIKKworLyogZm9yIG9sZCBpbXBsZW1lbnRhdGlvbiBvZiBic2QgZmxvY2sgKCkgKi8KKyNkZWZpbmUgRl9FWExDSwkJNAkvKiBvciAzICovCisjZGVmaW5lIEZfU0hMQ0sJCTgJLyogb3IgNCAqLworCisvKiBmb3IgbGVhc2VzICovCisjZGVmaW5lIEZfSU5QUk9HUkVTUwkxNgorCisvKiBvcGVyYXRpb25zIGZvciBic2QgZmxvY2soKSwgYWxzbyB1c2VkIGJ5IHRoZSBrZXJuZWwgaW1wbGVtZW50YXRpb24gKi8KKyNkZWZpbmUgTE9DS19TSAkJMQkvKiBzaGFyZWQgbG9jayAqLworI2RlZmluZSBMT0NLX0VYCQkyCS8qIGV4Y2x1c2l2ZSBsb2NrICovCisjZGVmaW5lIExPQ0tfTkIJCTQJLyogb3InZCB3aXRoIG9uZSBvZiB0aGUgYWJvdmUgdG8gcHJldmVudAorCQkJCSAgIGJsb2NraW5nICovCisjZGVmaW5lIExPQ0tfVU4JCTgJLyogcmVtb3ZlIGxvY2sgKi8KKworI2RlZmluZSBMT0NLX01BTkQJMzIJLyogVGhpcyBpcyBhIG1hbmRhdG9yeSBmbG9jayAqLworI2RlZmluZSBMT0NLX1JFQUQJNjQJLyogLi4uIFdoaWNoIGFsbG93cyBjb25jdXJyZW50IHJlYWQgb3BlcmF0aW9ucyAqLworI2RlZmluZSBMT0NLX1dSSVRFCTEyOAkvKiAuLi4gV2hpY2ggYWxsb3dzIGNvbmN1cnJlbnQgd3JpdGUgb3BlcmF0aW9ucyAqLworI2RlZmluZSBMT0NLX1JXCQkxOTIJLyogLi4uIFdoaWNoIGFsbG93cyBjb25jdXJyZW50IHJlYWQgJiB3cml0ZSBvcHMgKi8KKworc3RydWN0IGZsb2NrIHsKKwlzaG9ydCAgbF90eXBlOworCXNob3J0ICBsX3doZW5jZTsKKwlvZmZfdCBsX3N0YXJ0OworCW9mZl90IGxfbGVuOworCXBpZF90ICBsX3BpZDsKK307CisKKyNkZWZpbmUgRl9MSU5VWF9TUEVDSUZJQ19CQVNFCTEwMjQKKworI2VuZGlmIC8qICFfWDg2XzY0X0ZDTlRMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9maXhtYXAuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9maXhtYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjhiMTZjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L2ZpeG1hcC5oCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBmaXhtYXAuaDogY29tcGlsZS10aW1lIHZpcnR1YWwgbWVtb3J5IGFsbG9jYXRpb24KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggSW5nbyBNb2xuYXIKKyAqLworCisjaWZuZGVmIF9BU01fRklYTUFQX0gKKyNkZWZpbmUgX0FTTV9GSVhNQVBfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8YXNtL2FwaWNkZWYuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS92c3lzY2FsbC5oPgorI2luY2x1ZGUgPGFzbS92c3lzY2FsbDMyLmg+CisKKy8qCisgKiBIZXJlIHdlIGRlZmluZSBhbGwgdGhlIGNvbXBpbGUtdGltZSAnc3BlY2lhbCcgdmlydHVhbAorICogYWRkcmVzc2VzLiBUaGUgcG9pbnQgaXMgdG8gaGF2ZSBhIGNvbnN0YW50IGFkZHJlc3MgYXQKKyAqIGNvbXBpbGUgdGltZSwgYnV0IHRvIHNldCB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvbmx5CisgKiBpbiB0aGUgYm9vdCBwcm9jZXNzLgorICoKKyAqIHRoZXNlICdjb21waWxlLXRpbWUgYWxsb2NhdGVkJyBtZW1vcnkgYnVmZmVycyBhcmUKKyAqIGZpeGVkLXNpemUgNGsgcGFnZXMuIChvciBsYXJnZXIgaWYgdXNlZCB3aXRoIGFuIGluY3JlbWVudAorICogaGlnaGdlciB0aGFuIDEpIHVzZSBmaXhtYXBfc2V0KGlkeCxwaHlzKSB0byBhc3NvY2lhdGUKKyAqIHBoeXNpY2FsIG1lbW9yeSB3aXRoIGZpeG1hcCBpbmRpY2VzLgorICoKKyAqIFRMQiBlbnRyaWVzIG9mIHN1Y2ggYnVmZmVycyB3aWxsIG5vdCBiZSBmbHVzaGVkIGFjcm9zcworICogdGFzayBzd2l0Y2hlcy4KKyAqLworCitlbnVtIGZpeGVkX2FkZHJlc3NlcyB7CisJVlNZU0NBTExfTEFTVF9QQUdFLAorCVZTWVNDQUxMX0ZJUlNUX1BBR0UgPSBWU1lTQ0FMTF9MQVNUX1BBR0UgKyAoKFZTWVNDQUxMX0VORC1WU1lTQ0FMTF9TVEFSVCkgPj4gUEFHRV9TSElGVCkgLSAxLAorCVZTWVNDQUxMX0hQRVQsCisJRklYX0hQRVRfQkFTRSwKKyNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKKwlGSVhfQVBJQ19CQVNFLAkvKiBsb2NhbCAoQ1BVKSBBUElDKSAtLSByZXF1aXJlZCBmb3IgU01QIG9yIG5vdCAqLworI2VuZGlmCisjaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCisJRklYX0lPX0FQSUNfQkFTRV8wLAorCUZJWF9JT19BUElDX0JBU0VfRU5EID0gRklYX0lPX0FQSUNfQkFTRV8wICsgTUFYX0lPX0FQSUNTLTEsCisjZW5kaWYKKwlfX2VuZF9vZl9maXhlZF9hZGRyZXNzZXMKK307CisKK2V4dGVybiB2b2lkIF9fc2V0X2ZpeG1hcCAoZW51bSBmaXhlZF9hZGRyZXNzZXMgaWR4LAorCQkJCQl1bnNpZ25lZCBsb25nIHBoeXMsIHBncHJvdF90IGZsYWdzKTsKKworI2RlZmluZSBzZXRfZml4bWFwKGlkeCwgcGh5cykgXAorCQlfX3NldF9maXhtYXAoaWR4LCBwaHlzLCBQQUdFX0tFUk5FTCkKKy8qCisgKiBTb21lIGhhcmR3YXJlIHdhbnRzIHRvIGdldCBmaXhtYXBwZWQgd2l0aG91dCBjYWNoaW5nLgorICovCisjZGVmaW5lIHNldF9maXhtYXBfbm9jYWNoZShpZHgsIHBoeXMpIFwKKwkJX19zZXRfZml4bWFwKGlkeCwgcGh5cywgUEFHRV9LRVJORUxfTk9DQUNIRSkKKworI2RlZmluZSBGSVhBRERSX1RPUAkoVlNZU0NBTExfRU5ELVBBR0VfU0laRSkKKyNkZWZpbmUgRklYQUREUl9TSVpFCShfX2VuZF9vZl9maXhlZF9hZGRyZXNzZXMgPDwgUEFHRV9TSElGVCkKKyNkZWZpbmUgRklYQUREUl9TVEFSVAkoRklYQUREUl9UT1AgLSBGSVhBRERSX1NJWkUpCisKKy8qIE9ubHkgY292ZXJzIDMyYml0IHZzeXNjYWxscyBjdXJyZW50bHkuIE5lZWQgYW5vdGhlciBzZXQgZm9yIDY0Yml0LiAqLworI2RlZmluZSBGSVhBRERSX1VTRVJfU1RBUlQJKCh1bnNpZ25lZCBsb25nKVZTWVNDQUxMMzJfVlNZU0NBTEwpCisjZGVmaW5lIEZJWEFERFJfVVNFUl9FTkQJKEZJWEFERFJfVVNFUl9TVEFSVCArIFBBR0VfU0laRSkKKworI2RlZmluZSBfX2ZpeF90b192aXJ0KHgpCShGSVhBRERSX1RPUCAtICgoeCkgPDwgUEFHRV9TSElGVCkpCisKK2V4dGVybiB2b2lkIF9fdGhpc19maXhtYXBfZG9lc19ub3RfZXhpc3Qodm9pZCk7CisKKy8qCisgKiAnaW5kZXggdG8gYWRkcmVzcycgdHJhbnNsYXRpb24uIElmIGFueW9uZSB0cmllcyB0byB1c2UgdGhlIGlkeAorICogZGlyZWN0bHkgd2l0aG91dCB0cmFuc2xhdGlvbiwgd2UgY2F0Y2ggdGhlIGJ1ZyB3aXRoIGEgTlVMTC1kZWZlcmVuY2UKKyAqIGtlcm5lbCBvb3BzLiBJbGxlZ2FsIHJhbmdlcyBvZiBpbmNvbWluZyBpbmRpY2VzIGFyZSBjYXVnaHQgdG9vLgorICovCitleHRlcm4gaW5saW5lIHVuc2lnbmVkIGxvbmcgZml4X3RvX3ZpcnQoY29uc3QgdW5zaWduZWQgaW50IGlkeCkKK3sKKwkvKgorCSAqIHRoaXMgYnJhbmNoIGdldHMgY29tcGxldGVseSBlbGltaW5hdGVkIGFmdGVyIGlubGluaW5nLAorCSAqIGV4Y2VwdCB3aGVuIHNvbWVvbmUgdHJpZXMgdG8gdXNlIGZpeGFkZHIgaW5kaWNlcyBpbiBhbgorCSAqIGlsbGVnYWwgd2F5LiAoc3VjaCBhcyBtaXhpbmcgdXAgYWRkcmVzcyB0eXBlcyBvciB1c2luZworCSAqIG91dC1vZi1yYW5nZSBpbmRpY2VzKS4KKwkgKgorCSAqIElmIGl0IGRvZXNuJ3QgZ2V0IHJlbW92ZWQsIHRoZSBsaW5rZXIgd2lsbCBjb21wbGFpbgorCSAqIGxvdWRseSB3aXRoIGEgcmVhc29uYWJseSBjbGVhciBlcnJvciBtZXNzYWdlLi4KKwkgKi8KKwlpZiAoaWR4ID49IF9fZW5kX29mX2ZpeGVkX2FkZHJlc3NlcykKKwkJX190aGlzX2ZpeG1hcF9kb2VzX25vdF9leGlzdCgpOworCisgICAgICAgIHJldHVybiBfX2ZpeF90b192aXJ0KGlkeCk7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2Zsb3BweS5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2Zsb3BweS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjYTliMjgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvZmxvcHB5LmgKQEAgLTAsMCArMSwyODUgQEAKKy8qCisgKiBBcmNoaXRlY3R1cmUgc3BlY2lmaWMgcGFydHMgb2YgdGhlIEZsb3BweSBkcml2ZXIKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUKKyAqLworI2lmbmRlZiBfX0FTTV9YODZfNjRfRkxPUFBZX0gKKyNkZWZpbmUgX19BU01fWDg2XzY0X0ZMT1BQWV9ICisKKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisKKworLyoKKyAqIFRoZSBETUEgY2hhbm5lbCB1c2VkIGJ5IHRoZSBmbG9wcHkgY29udHJvbGxlciBjYW5ub3QgYWNjZXNzIGRhdGEgYXQKKyAqIGFkZHJlc3NlcyA+PSAxNk1CCisgKgorICogV2VudCBiYWNrIHRvIHRoZSAxTUIgbGltaXQsIGFzIHNvbWUgcGVvcGxlIGhhZCBwcm9ibGVtcyB3aXRoIHRoZSBmbG9wcHkKKyAqIGRyaXZlciBvdGhlcndpc2UuIEl0IGRvZXNuJ3QgbWF0dGVyIG11Y2ggZm9yIHBlcmZvcm1hbmNlIGFueXdheSwgYXMgbW9zdAorICogZmxvcHB5IGFjY2Vzc2VzIGdvIHRocm91Z2ggdGhlIHRyYWNrIGJ1ZmZlci4KKyAqLworI2RlZmluZSBfQ1JPU1NfNjRLQihhLHMsdmRtYSkgXAorKCEodmRtYSkgJiYgKCh1bnNpZ25lZCBsb25nKShhKS9LXzY0ICE9ICgodW5zaWduZWQgbG9uZykoYSkgKyAocykgLSAxKSAvIEtfNjQpKQorCisjZGVmaW5lIENST1NTXzY0S0IoYSxzKSBfQ1JPU1NfNjRLQihhLHMsdXNlX3ZpcnR1YWxfZG1hICYgMSkKKworCisjZGVmaW5lIFNXIGZkX3JvdXRpbmVbdXNlX3ZpcnR1YWxfZG1hJjFdCisjZGVmaW5lIENTVyBmZF9yb3V0aW5lW2Nhbl91c2VfdmlydHVhbF9kbWEgJiAxXQorCisKKyNkZWZpbmUgZmRfaW5iKHBvcnQpCQkJaW5iX3AocG9ydCkKKyNkZWZpbmUgZmRfb3V0Yih2YWx1ZSxwb3J0KQkJb3V0Yl9wKHZhbHVlLHBvcnQpCisKKyNkZWZpbmUgZmRfcmVxdWVzdF9kbWEoKSAgICAgICAgQ1NXLl9yZXF1ZXN0X2RtYShGTE9QUFlfRE1BLCJmbG9wcHkiKQorI2RlZmluZSBmZF9mcmVlX2RtYSgpICAgICAgICAgICBDU1cuX2ZyZWVfZG1hKEZMT1BQWV9ETUEpCisjZGVmaW5lIGZkX2VuYWJsZV9pcnEoKSAgICAgICAgIGVuYWJsZV9pcnEoRkxPUFBZX0lSUSkKKyNkZWZpbmUgZmRfZGlzYWJsZV9pcnEoKSAgICAgICAgZGlzYWJsZV9pcnEoRkxPUFBZX0lSUSkKKyNkZWZpbmUgZmRfZnJlZV9pcnEoKQkJZnJlZV9pcnEoRkxPUFBZX0lSUSwgTlVMTCkKKyNkZWZpbmUgZmRfZ2V0X2RtYV9yZXNpZHVlKCkgICAgU1cuX2dldF9kbWFfcmVzaWR1ZShGTE9QUFlfRE1BKQorI2RlZmluZSBmZF9kbWFfbWVtX2FsbG9jKHNpemUpCVNXLl9kbWFfbWVtX2FsbG9jKHNpemUpCisjZGVmaW5lIGZkX2RtYV9zZXR1cChhZGRyLCBzaXplLCBtb2RlLCBpbykgU1cuX2RtYV9zZXR1cChhZGRyLCBzaXplLCBtb2RlLCBpbykKKworI2RlZmluZSBGTE9QUFlfQ0FOX0ZBTExCQUNLX09OX05PRE1BCisKK3N0YXRpYyBpbnQgdmlydHVhbF9kbWFfY291bnQ7CitzdGF0aWMgaW50IHZpcnR1YWxfZG1hX3Jlc2lkdWU7CitzdGF0aWMgY2hhciAqdmlydHVhbF9kbWFfYWRkcjsKK3N0YXRpYyBpbnQgdmlydHVhbF9kbWFfbW9kZTsKK3N0YXRpYyBpbnQgZG9pbmdfcGRtYTsKKworc3RhdGljIGlycXJldHVybl90IGZsb3BweV9oYXJkaW50KGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKiByZWdzKQoreworCXJlZ2lzdGVyIHVuc2lnbmVkIGNoYXIgc3Q7CisKKyN1bmRlZiBUUkFDRV9GTFBZX0lOVAorCisjaWZkZWYgVFJBQ0VfRkxQWV9JTlQKKwlzdGF0aWMgaW50IGNhbGxzPTA7CisJc3RhdGljIGludCBieXRlcz0wOworCXN0YXRpYyBpbnQgZG1hX3dhaXQ9MDsKKyNlbmRpZgorCWlmICghZG9pbmdfcGRtYSkKKwkJcmV0dXJuIGZsb3BweV9pbnRlcnJ1cHQoaXJxLCBkZXZfaWQsIHJlZ3MpOworCisjaWZkZWYgVFJBQ0VfRkxQWV9JTlQKKwlpZighY2FsbHMpCisJCWJ5dGVzID0gdmlydHVhbF9kbWFfY291bnQ7CisjZW5kaWYKKworCXsKKwkJcmVnaXN0ZXIgaW50IGxjb3VudDsKKwkJcmVnaXN0ZXIgY2hhciAqbHB0cjsKKworCQlzdCA9IDE7CisJCWZvcihsY291bnQ9dmlydHVhbF9kbWFfY291bnQsIGxwdHI9dmlydHVhbF9kbWFfYWRkcjsgCisJCSAgICBsY291bnQ7IGxjb3VudC0tLCBscHRyKyspIHsKKwkJCXN0PWluYih2aXJ0dWFsX2RtYV9wb3J0KzQpICYgMHhhMCA7CisJCQlpZihzdCAhPSAweGEwKSAKKwkJCQlicmVhazsKKwkJCWlmKHZpcnR1YWxfZG1hX21vZGUpCisJCQkJb3V0Yl9wKCpscHRyLCB2aXJ0dWFsX2RtYV9wb3J0KzUpOworCQkJZWxzZQorCQkJCSpscHRyID0gaW5iX3AodmlydHVhbF9kbWFfcG9ydCs1KTsKKwkJfQorCQl2aXJ0dWFsX2RtYV9jb3VudCA9IGxjb3VudDsKKwkJdmlydHVhbF9kbWFfYWRkciA9IGxwdHI7CisJCXN0ID0gaW5iKHZpcnR1YWxfZG1hX3BvcnQrNCk7CisJfQorCisjaWZkZWYgVFJBQ0VfRkxQWV9JTlQKKwljYWxscysrOworI2VuZGlmCisJaWYoc3QgPT0gMHgyMCkKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCWlmKCEoc3QgJiAweDIwKSkgeworCQl2aXJ0dWFsX2RtYV9yZXNpZHVlICs9IHZpcnR1YWxfZG1hX2NvdW50OworCQl2aXJ0dWFsX2RtYV9jb3VudD0wOworI2lmZGVmIFRSQUNFX0ZMUFlfSU5UCisJCXByaW50aygiY291bnQ9JXgsIHJlc2lkdWU9JXggY2FsbHM9JWQgYnl0ZXM9JWQgZG1hX3dhaXQ9JWRcbiIsIAorCQkgICAgICAgdmlydHVhbF9kbWFfY291bnQsIHZpcnR1YWxfZG1hX3Jlc2lkdWUsIGNhbGxzLCBieXRlcywKKwkJICAgICAgIGRtYV93YWl0KTsKKwkJY2FsbHMgPSAwOworCQlkbWFfd2FpdD0wOworI2VuZGlmCisJCWRvaW5nX3BkbWEgPSAwOworCQlmbG9wcHlfaW50ZXJydXB0KGlycSwgZGV2X2lkLCByZWdzKTsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKyNpZmRlZiBUUkFDRV9GTFBZX0lOVAorCWlmKCF2aXJ0dWFsX2RtYV9jb3VudCkKKwkJZG1hX3dhaXQrKzsKKyNlbmRpZgorCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQgZmRfZGlzYWJsZV9kbWEodm9pZCkKK3sKKwlpZighIChjYW5fdXNlX3ZpcnR1YWxfZG1hICYgMSkpCisJCWRpc2FibGVfZG1hKEZMT1BQWV9ETUEpOworCWRvaW5nX3BkbWEgPSAwOworCXZpcnR1YWxfZG1hX3Jlc2lkdWUgKz0gdmlydHVhbF9kbWFfY291bnQ7CisJdmlydHVhbF9kbWFfY291bnQ9MDsKK30KKworc3RhdGljIGludCB2ZG1hX3JlcXVlc3RfZG1hKHVuc2lnbmVkIGludCBkbWFuciwgY29uc3QgY2hhciAqIGRldmljZV9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdmRtYV9ub3AodW5zaWduZWQgaW50IGR1bW15KQoreworfQorCisKK3N0YXRpYyBpbnQgdmRtYV9nZXRfZG1hX3Jlc2lkdWUodW5zaWduZWQgaW50IGR1bW15KQoreworCXJldHVybiB2aXJ0dWFsX2RtYV9jb3VudCArIHZpcnR1YWxfZG1hX3Jlc2lkdWU7Cit9CisKKworc3RhdGljIGludCBmZF9yZXF1ZXN0X2lycSh2b2lkKQoreworCWlmKGNhbl91c2VfdmlydHVhbF9kbWEpCisJCXJldHVybiByZXF1ZXN0X2lycShGTE9QUFlfSVJRLCBmbG9wcHlfaGFyZGludCxTQV9JTlRFUlJVUFQsCisJCQkJCQkgICAiZmxvcHB5IiwgTlVMTCk7CisJZWxzZQorCQlyZXR1cm4gcmVxdWVzdF9pcnEoRkxPUFBZX0lSUSwgZmxvcHB5X2ludGVycnVwdCwKKwkJCQkJCSAgIFNBX0lOVEVSUlVQVHxTQV9TQU1QTEVfUkFORE9NLAorCQkJCQkJICAgImZsb3BweSIsIE5VTEwpOwkKKworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBkbWFfbWVtX2FsbG9jKHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlyZXR1cm4gX19nZXRfZG1hX3BhZ2VzKEdGUF9LRVJORUwsZ2V0X29yZGVyKHNpemUpKTsKK30KKworCitzdGF0aWMgdW5zaWduZWQgbG9uZyB2ZG1hX21lbV9hbGxvYyh1bnNpZ25lZCBsb25nIHNpemUpCit7CisJcmV0dXJuICh1bnNpZ25lZCBsb25nKSB2bWFsbG9jKHNpemUpOworCit9CisKKyNkZWZpbmUgbm9kbWFfbWVtX2FsbG9jKHNpemUpIHZkbWFfbWVtX2FsbG9jKHNpemUpCisKK3N0YXRpYyB2b2lkIF9mZF9kbWFfbWVtX2ZyZWUodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJaWYoKHVuc2lnbmVkIGxvbmcpIGFkZHIgPj0gKHVuc2lnbmVkIGxvbmcpIGhpZ2hfbWVtb3J5KQorCQl2ZnJlZSgodm9pZCAqKWFkZHIpOworCWVsc2UKKwkJZnJlZV9wYWdlcyhhZGRyLCBnZXRfb3JkZXIoc2l6ZSkpOwkJCit9CisKKyNkZWZpbmUgZmRfZG1hX21lbV9mcmVlKGFkZHIsIHNpemUpICBfZmRfZG1hX21lbV9mcmVlKGFkZHIsIHNpemUpIAorCitzdGF0aWMgdm9pZCBfZmRfY2hvc2VfZG1hX21vZGUoY2hhciAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCWlmKGNhbl91c2VfdmlydHVhbF9kbWEgPT0gMikgeworCQlpZigodW5zaWduZWQgbG9uZykgYWRkciA+PSAodW5zaWduZWQgbG9uZykgaGlnaF9tZW1vcnkgfHwKKwkJICAgaXNhX3ZpcnRfdG9fYnVzKGFkZHIpID49IDB4MTAwMDAwMCB8fAorCQkgICBfQ1JPU1NfNjRLQihhZGRyLCBzaXplLCAwKSkKKwkJCXVzZV92aXJ0dWFsX2RtYSA9IDE7CisJCWVsc2UKKwkJCXVzZV92aXJ0dWFsX2RtYSA9IDA7CisJfSBlbHNlIHsKKwkJdXNlX3ZpcnR1YWxfZG1hID0gY2FuX3VzZV92aXJ0dWFsX2RtYSAmIDE7CisJfQorfQorCisjZGVmaW5lIGZkX2Nob3NlX2RtYV9tb2RlKGFkZHIsIHNpemUpIF9mZF9jaG9zZV9kbWFfbW9kZShhZGRyLCBzaXplKQorCisKK3N0YXRpYyBpbnQgdmRtYV9kbWFfc2V0dXAoY2hhciAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLCBpbnQgbW9kZSwgaW50IGlvKQoreworCWRvaW5nX3BkbWEgPSAxOworCXZpcnR1YWxfZG1hX3BvcnQgPSBpbzsKKwl2aXJ0dWFsX2RtYV9tb2RlID0gKG1vZGUgID09IERNQV9NT0RFX1dSSVRFKTsKKwl2aXJ0dWFsX2RtYV9hZGRyID0gYWRkcjsKKwl2aXJ0dWFsX2RtYV9jb3VudCA9IHNpemU7CisJdmlydHVhbF9kbWFfcmVzaWR1ZSA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGFyZF9kbWFfc2V0dXAoY2hhciAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLCBpbnQgbW9kZSwgaW50IGlvKQoreworI2lmZGVmIEZMT1BQWV9TQU5JVFlfQ0hFQ0sKKwlpZiAoQ1JPU1NfNjRLQihhZGRyLCBzaXplKSkgeworCQlwcmludGsoIkRNQSBjcm9zc2luZyA2NC1LIGJvdW5kYXJ5ICVwLSVwXG4iLCBhZGRyLCBhZGRyK3NpemUpOworCQlyZXR1cm4gLTE7CisJfQorI2VuZGlmCisJLyogYWN0dWFsLCBwaHlzaWNhbCBETUEgKi8KKwlkb2luZ19wZG1hID0gMDsKKwljbGVhcl9kbWFfZmYoRkxPUFBZX0RNQSk7CisJc2V0X2RtYV9tb2RlKEZMT1BQWV9ETUEsbW9kZSk7CisJc2V0X2RtYV9hZGRyKEZMT1BQWV9ETUEsaXNhX3ZpcnRfdG9fYnVzKGFkZHIpKTsKKwlzZXRfZG1hX2NvdW50KEZMT1BQWV9ETUEsc2l6ZSk7CisJZW5hYmxlX2RtYShGTE9QUFlfRE1BKTsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGZkX3JvdXRpbmVfbCB7CisJaW50ICgqX3JlcXVlc3RfZG1hKSh1bnNpZ25lZCBpbnQgZG1hbnIsIGNvbnN0IGNoYXIgKiBkZXZpY2VfaWQpOworCXZvaWQgKCpfZnJlZV9kbWEpKHVuc2lnbmVkIGludCBkbWFucik7CisJaW50ICgqX2dldF9kbWFfcmVzaWR1ZSkodW5zaWduZWQgaW50IGR1bW15KTsKKwl1bnNpZ25lZCBsb25nICgqX2RtYV9tZW1fYWxsb2MpICh1bnNpZ25lZCBsb25nIHNpemUpOworCWludCAoKl9kbWFfc2V0dXApKGNoYXIgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IG1vZGUsIGludCBpbyk7Cit9IGZkX3JvdXRpbmVbXSA9IHsKKwl7CisJCXJlcXVlc3RfZG1hLAorCQlmcmVlX2RtYSwKKwkJZ2V0X2RtYV9yZXNpZHVlLAorCQlkbWFfbWVtX2FsbG9jLAorCQloYXJkX2RtYV9zZXR1cAorCX0sCisJeworCQl2ZG1hX3JlcXVlc3RfZG1hLAorCQl2ZG1hX25vcCwKKwkJdmRtYV9nZXRfZG1hX3Jlc2lkdWUsCisJCXZkbWFfbWVtX2FsbG9jLAorCQl2ZG1hX2RtYV9zZXR1cAorCX0KK307CisKKworc3RhdGljIGludCBGREMxID0gMHgzZjA7CitzdGF0aWMgaW50IEZEQzIgPSAtMTsKKworLyoKKyAqIEZsb3BweSB0eXBlcyBhcmUgc3RvcmVkIGluIHRoZSBydGMncyBDTU9TIFJBTSBhbmQgc28gcnRjX2xvY2sKKyAqIGlzIG5lZWRlZCB0byBwcmV2ZW50IGNvcnJ1cHRlZCBDTU9TIFJBTSBpbiBjYXNlICJpbnNtb2QgZmxvcHB5IgorICogY29pbmNpZGVzIHdpdGggYW5vdGhlciBydGMgQ01PUyB1c2VyLgkJUGF1bCBHLgorICovCisjZGVmaW5lIEZMT1BQWTBfVFlQRQkoewkJCQlcCisJdW5zaWduZWQgbG9uZyBmbGFnczsJCQkJXAorCXVuc2lnbmVkIGNoYXIgdmFsOwkJCQlcCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJ0Y19sb2NrLCBmbGFncyk7CQlcCisJdmFsID0gKENNT1NfUkVBRCgweDEwKSA+PiA0KSAmIDE1OwkJXAorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0Y19sb2NrLCBmbGFncyk7CVwKKwl2YWw7CQkJCQkJXAorfSkKKworI2RlZmluZSBGTE9QUFkxX1RZUEUJKHsJCQkJXAorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CQkJCVwKKwl1bnNpZ25lZCBjaGFyIHZhbDsJCQkJXAorCXNwaW5fbG9ja19pcnFzYXZlKCZydGNfbG9jaywgZmxhZ3MpOwkJXAorCXZhbCA9IENNT1NfUkVBRCgweDEwKSAmIDE1OwkJCVwKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGNfbG9jaywgZmxhZ3MpOwlcCisJdmFsOwkJCQkJCVwKK30pCisKKyNkZWZpbmUgTl9GREMgMgorI2RlZmluZSBOX0RSSVZFIDgKKworI2RlZmluZSBGTE9QUFlfTU9UT1JfTUFTSyAweGYwCisKKyNkZWZpbmUgQVVUT19ETUEKKworI2RlZmluZSBFWFRSQV9GTE9QUFlfUEFSQU1TCisKKyNlbmRpZiAvKiBfX0FTTV9YODZfNjRfRkxPUFBZX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9mcHUzMi5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2ZwdTMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE1M2RiNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9mcHUzMi5oCkBAIC0wLDAgKzEsMTAgQEAKKyNpZm5kZWYgX0ZQVTMyX0gKKyNkZWZpbmUgX0ZQVTMyX0ggMQorCitzdHJ1Y3QgX2Zwc3RhdGVfaWEzMjsKKworaW50IHJlc3RvcmVfaTM4N19pYTMyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgX2Zwc3RhdGVfaWEzMiBfX3VzZXIgKmJ1ZiwgaW50IGZzYXZlKTsKK2ludCBzYXZlX2kzODdfaWEzMihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IF9mcHN0YXRlX2lhMzIgX191c2VyICpidWYsIAorCQkgICBzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGZzYXZlKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvZ2VuYXBpYy5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2dlbmFwaWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGIzOGU3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L2dlbmFwaWMuaApAQCAtMCwwICsxLDM1IEBACisjaWZuZGVmIF9BU01fR0VOQVBJQ19ICisjZGVmaW5lIF9BU01fR0VOQVBJQ19IIDEKKworLyoKKyAqIENvcHlyaWdodCAyMDA0IEphbWVzIENsZXZlcmRvbiwgSUJNLgorICogU3ViamVjdCB0byB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLCB2LjIKKyAqCisgKiBHZW5lcmljIEFQSUMgc3ViLWFyY2ggZGF0YSBzdHJ1Y3QuCisgKgorICogSGFja2VkIGZvciB4ODYtNjQgYnkgSmFtZXMgQ2xldmVyZG9uIGZyb20gaTM4NiBhcmNoaXRlY3R1cmUgY29kZSBieQorICogTWFydGluIEJsaWdoLCBBbmRpIEtsZWVuLCBKYW1lcyBCb3R0b21sZXksIEpvaG4gU3R1bHR6LCBhbmQKKyAqIEphbWVzIENsZXZlcmRvbi4KKyAqLworCitzdHJ1Y3QgZ2VuYXBpYyB7CisJY2hhciAqbmFtZTsKKwl1MzIgaW50X2RlbGl2ZXJ5X21vZGU7CisJdTMyIGludF9kZXN0X21vZGU7CisJdTMyIGludF9kZWxpdmVyeV9kZXN0OwkvKiBmb3IgcXVpY2sgSVBJcyAqLworCWludCAoKmFwaWNfaWRfcmVnaXN0ZXJlZCkodm9pZCk7CisJY3B1bWFza190ICgqdGFyZ2V0X2NwdXMpKHZvaWQpOworCXZvaWQgKCppbml0X2FwaWNfbGRyKSh2b2lkKTsKKwkvKiBpcGkgKi8KKwl2b2lkICgqc2VuZF9JUElfbWFzaykoY3B1bWFza190IG1hc2ssIGludCB2ZWN0b3IpOworCXZvaWQgKCpzZW5kX0lQSV9hbGxidXRzZWxmKShpbnQgdmVjdG9yKTsKKwl2b2lkICgqc2VuZF9JUElfYWxsKShpbnQgdmVjdG9yKTsKKwkvKiAqLworCXVuc2lnbmVkIGludCAoKmNwdV9tYXNrX3RvX2FwaWNpZCkoY3B1bWFza190IGNwdW1hc2spOworCXVuc2lnbmVkIGludCAoKnBoeXNfcGtnX2lkKShpbnQgaW5kZXhfbXNiKTsKK307CisKKworZXh0ZXJuIHN0cnVjdCBnZW5hcGljICpnZW5hcGljOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9oYXJkaXJxLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvaGFyZGlycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3YzM4MWYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvaGFyZGlycS5oCkBAIC0wLDAgKzEsMzcgQEAKKyNpZm5kZWYgX19BU01fSEFSRElSUV9ICisjZGVmaW5lIF9fQVNNX0hBUkRJUlFfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGFzbS9wZGEuaD4KKyNpbmNsdWRlIDxhc20vYXBpYy5oPgorCisjZGVmaW5lIF9fQVJDSF9JUlFfU1RBVCAxCisKKy8qIEdlbmVyYXRlIGEgbHZhbHVlIGZvciBhIHBkYSBtZW1iZXIuIFNob3VsZCBmaXggc29mdGlycS5jIGluc3RlYWQgdG8gdXNlCisgICBzcGVjaWFsIGFjY2VzcyBtYWNyb3MuIFRoaXMgd291bGQgZ2VuZXJhdGUgYmV0dGVyIGNvZGUuICovIAorI2RlZmluZSBfX0lSUV9TVEFUKGNwdSxtZW1iZXIpIChyZWFkX3BkYShtZSktPm1lbWJlcikKKworI2luY2x1ZGUgPGxpbnV4L2lycV9jcHVzdGF0Lmg+CS8qIFN0YW5kYXJkIG1hcHBpbmdzIGZvciBpcnFfY3B1c3RhdF90IGFib3ZlICovCisKKy8qCisgKiAnd2hhdCBzaG91bGQgd2UgZG8gaWYgd2UgZ2V0IGEgaHcgaXJxIGV2ZW50IG9uIGFuIGlsbGVnYWwgdmVjdG9yJy4KKyAqIGVhY2ggYXJjaGl0ZWN0dXJlIGhhcyB0byBhbnN3ZXIgdGhpcyB0aGVtc2VsdmVzLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgYWNrX2JhZF9pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlwcmludGsoInVuZXhwZWN0ZWQgSVJRIHRyYXAgYXQgdmVjdG9yICUwMnhcbiIsIGlycSk7CisjaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCisJLyoKKwkgKiBDdXJyZW50bHkgdW5leHBlY3RlZCB2ZWN0b3JzIGhhcHBlbiBvbmx5IG9uIFNNUCBhbmQgQVBJQy4KKwkgKiBXZSBfbXVzdF8gYWNrIHRoZXNlIGJlY2F1c2UgZXZlcnkgbG9jYWwgQVBJQyBoYXMgb25seSBOCisJICogaXJxIHNsb3RzIHBlciBwcmlvcml0eSBsZXZlbCwgYW5kIGEgJ2hhbmdpbmcsIHVuYWNrZWQnIElSUQorCSAqIGhvbGRzIHVwIGFuIGlycSBzbG90IC0gaW4gZXhjZXNzaXZlIGNhc2VzICh3aGVuIG11bHRpcGxlCisJICogdW5leHBlY3RlZCB2ZWN0b3JzIG9jY3VyKSB0aGF0IG1pZ2h0IGxvY2sgdXAgdGhlIEFQSUMKKwkgKiBjb21wbGV0ZWx5LgorCSAqLworCWFja19BUElDX2lycSgpOworI2VuZGlmCit9CisjZW5kaWYgLyogX19BU01fSEFSRElSUV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvaGRyZWcuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9oZHJlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5ODliYmMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvaGRyZWcuaApAQCAtMCwwICsxIEBACisjd2FybmluZyB0aGlzIGZpbGUgaXMgb2Jzb2xldGUsIHBsZWFzZSBkbyBub3QgdXNlIGl0CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvaHBldC5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2hwZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzg3N2Y1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L2hwZXQuaApAQCAtMCwwICsxLDYwIEBACisjaWZuZGVmIF9BU01fWDg2NjRfSFBFVF9ICisjZGVmaW5lIF9BU01fWDg2NjRfSFBFVF9IIDEKKworLyoKKyAqIERvY3VtZW50YXRpb24gb24gSFBFVCBjYW4gYmUgZm91bmQgYXQ6CisgKiAgICAgIGh0dHA6Ly93d3cuaW50ZWwuY29tL2lhbC9ob21lL3NwL3BjbW1zcGVjLmh0bQorICogICAgICBmdHA6Ly9kb3dubG9hZC5pbnRlbC5jb20vaWFsL2hvbWUvc3AvbW10czA5OC5wZGYKKyAqLworCisjZGVmaW5lIEhQRVRfTU1BUF9TSVpFCTEwMjQKKworI2RlZmluZSBIUEVUX0lECQkweDAwMAorI2RlZmluZSBIUEVUX1BFUklPRAkweDAwNAorI2RlZmluZSBIUEVUX0NGRwkweDAxMAorI2RlZmluZSBIUEVUX1NUQVRVUwkweDAyMAorI2RlZmluZSBIUEVUX0NPVU5URVIJMHgwZjAKKyNkZWZpbmUgSFBFVF9UMF9DRkcJMHgxMDAKKyNkZWZpbmUgSFBFVF9UMF9DTVAJMHgxMDgKKyNkZWZpbmUgSFBFVF9UMF9ST1VURQkweDExMAorI2RlZmluZSBIUEVUX1QxX0NGRwkweDEyMAorI2RlZmluZSBIUEVUX1QxX0NNUAkweDEyOAorI2RlZmluZSBIUEVUX1QxX1JPVVRFCTB4MTMwCisjZGVmaW5lIEhQRVRfVDJfQ0ZHCTB4MTQwCisjZGVmaW5lIEhQRVRfVDJfQ01QCTB4MTQ4CisjZGVmaW5lIEhQRVRfVDJfUk9VVEUJMHgxNTAKKworI2RlZmluZSBIUEVUX0lEX1ZFTkRPUgkweGZmZmYwMDAwCisjZGVmaW5lIEhQRVRfSURfTEVHU1VQCTB4MDAwMDgwMDAKKyNkZWZpbmUgSFBFVF9JRF9OVU1CRVIJMHgwMDAwMWYwMAorI2RlZmluZSBIUEVUX0lEX1JFVgkweDAwMDAwMGZmCisjZGVmaW5lCUhQRVRfSURfTlVNQkVSX1NISUZUCTgKKworI2RlZmluZSBIUEVUX0lEX1ZFTkRPUl9TSElGVAkxNgorI2RlZmluZSBIUEVUX0lEX1ZFTkRPUl84MDg2CTB4ODA4NgorCisjZGVmaW5lIEhQRVRfQ0ZHX0VOQUJMRQkweDAwMQorI2RlZmluZSBIUEVUX0NGR19MRUdBQ1kJMHgwMDIKKyNkZWZpbmUJSFBFVF9MRUdBQ1lfODI1NAkyCisjZGVmaW5lCUhQRVRfTEVHQUNZX1JUQwkJOAorCisjZGVmaW5lIEhQRVRfVE5fRU5BQkxFCQkweDAwNAorI2RlZmluZSBIUEVUX1ROX1BFUklPRElDCTB4MDA4CisjZGVmaW5lIEhQRVRfVE5fUEVSSU9ESUNfQ0FQCTB4MDEwCisjZGVmaW5lIEhQRVRfVE5fU0VUVkFMCQkweDA0MAorI2RlZmluZSBIUEVUX1ROXzMyQklUCQkweDEwMAorCitleHRlcm4gaW50IGlzX2hwZXRfZW5hYmxlZCh2b2lkKTsKK2V4dGVybiBpbnQgaHBldF9ydGNfdGltZXJfaW5pdCh2b2lkKTsKK2V4dGVybiBpbnQgb2VtX2ZvcmNlX2hwZXRfdGltZXIodm9pZCk7CisKKyNpZmRlZiBDT05GSUdfSFBFVF9FTVVMQVRFX1JUQworZXh0ZXJuIGludCBocGV0X21hc2tfcnRjX2lycV9iaXQodW5zaWduZWQgbG9uZyBiaXRfbWFzayk7CitleHRlcm4gaW50IGhwZXRfc2V0X3J0Y19pcnFfYml0KHVuc2lnbmVkIGxvbmcgYml0X21hc2spOworZXh0ZXJuIGludCBocGV0X3NldF9hbGFybV90aW1lKHVuc2lnbmVkIGNoYXIgaHJzLCB1bnNpZ25lZCBjaGFyIG1pbiwgdW5zaWduZWQgY2hhciBzZWMpOworZXh0ZXJuIGludCBocGV0X3NldF9wZXJpb2RpY19mcmVxKHVuc2lnbmVkIGxvbmcgZnJlcSk7CitleHRlcm4gaW50IGhwZXRfcnRjX2Ryb3BwZWRfaXJxKHZvaWQpOworZXh0ZXJuIGludCBocGV0X3J0Y190aW1lcl9pbml0KHZvaWQpOworI2VuZGlmIC8qIENPTkZJR19IUEVUX0VNVUxBVEVfUlRDICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2h3X2lycS5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2h3X2lycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiNWNiMjgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvaHdfaXJxLmgKQEAgLTAsMCArMSwxNDQgQEAKKyNpZm5kZWYgX0FTTV9IV19JUlFfSAorI2RlZmluZSBfQVNNX0hXX0lSUV9ICisKKy8qCisgKglsaW51eC9pbmNsdWRlL2FzbS9od19pcnEuaAorICoKKyAqCShDKSAxOTkyLCAxOTkzIExpbnVzIFRvcnZhbGRzLCAoQykgMTk5NyBJbmdvIE1vbG5hcgorICoKKyAqCW1vdmVkIHNvbWUgb2YgdGhlIG9sZCBhcmNoL2kzODYva2VybmVsL2lycS5oIHRvIGhlcmUuIFZZCisgKgorICoJSVJRL0lQSSBjaGFuZ2VzIHRha2VuIGZyb20gd29yayBieSBUaG9tYXMgUmFka2UKKyAqCTx0b21zb2Z0QGluZm9ybWF0aWsudHUtY2hlbW5pdHouZGU+CisgKgorICoJaGFja2VkIGJ5IEFuZGkgS2xlZW4gZm9yIHg4Ni02NC4KKyAqIAorICogICRJZDogaHdfaXJxLmgsdiAxLjI0IDIwMDEvMDkvMTQgMjA6NTU6MDMgdm9qdGVjaCBFeHAgJAorICovCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CisKK3N0cnVjdCBod19pbnRlcnJ1cHRfdHlwZTsKKyNlbmRpZgorCisvKgorICogSURUIHZlY3RvcnMgdXNhYmxlIGZvciBleHRlcm5hbCBpbnRlcnJ1cHQgc291cmNlcyBzdGFydAorICogYXQgMHgyMDoKKyAqLworI2RlZmluZSBGSVJTVF9FWFRFUk5BTF9WRUNUT1IJMHgyMAorCisjZGVmaW5lIElBMzJfU1lTQ0FMTF9WRUNUT1IJMHg4MAorCisKKy8qCisgKiBWZWN0b3JzIDB4MjAtMHgyZiBhcmUgdXNlZCBmb3IgSVNBIGludGVycnVwdHMuCisgKi8KKworLyoKKyAqIFNwZWNpYWwgSVJRIHZlY3RvcnMgdXNlZCBieSB0aGUgU01QIGFyY2hpdGVjdHVyZSwgMHhmMC0weGZmCisgKgorICogIHNvbWUgb2YgdGhlIGZvbGxvd2luZyB2ZWN0b3JzIGFyZSAncmFyZScsIHRoZXkgYXJlIG1lcmdlZAorICogIGludG8gYSBzaW5nbGUgdmVjdG9yIChDQUxMX0ZVTkNUSU9OX1ZFQ1RPUikgdG8gc2F2ZSB2ZWN0b3Igc3BhY2UuCisgKiAgVExCLCByZXNjaGVkdWxlIGFuZCBsb2NhbCBBUElDIHZlY3RvcnMgYXJlIHBlcmZvcm1hbmNlLWNyaXRpY2FsLgorICoKKyAqICBWZWN0b3JzIDB4ZjAtMHhmOSBhcmUgZnJlZSAocmVzZXJ2ZWQgZm9yIGZ1dHVyZSBMaW51eCB1c2UpLgorICovCisjZGVmaW5lIFNQVVJJT1VTX0FQSUNfVkVDVE9SCTB4ZmYKKyNkZWZpbmUgRVJST1JfQVBJQ19WRUNUT1IJMHhmZQorI2RlZmluZSBJTlZBTElEQVRFX1RMQl9WRUNUT1IJMHhmZAorI2RlZmluZSBSRVNDSEVEVUxFX1ZFQ1RPUgkweGZjCisjZGVmaW5lIFRBU0tfTUlHUkFUSU9OX1ZFQ1RPUgkweGZiCisjZGVmaW5lIENBTExfRlVOQ1RJT05fVkVDVE9SCTB4ZmEKKyNkZWZpbmUgS0RCX1ZFQ1RPUgkweGY5CisKKyNkZWZpbmUgVEhFUk1BTF9BUElDX1ZFQ1RPUgkweGYwCisKKworLyoKKyAqIExvY2FsIEFQSUMgdGltZXIgSVJRIHZlY3RvciBpcyBvbiBhIGRpZmZlcmVudCBwcmlvcml0eSBsZXZlbCwKKyAqIHRvIHdvcmsgYXJvdW5kIHRoZSAnbG9zdCBsb2NhbCBpbnRlcnJ1cHQgaWYgbW9yZSB0aGFuIDIgSVJRCisgKiBzb3VyY2VzIHBlciBsZXZlbCcgZXJyYXRhLgorICovCisjZGVmaW5lIExPQ0FMX1RJTUVSX1ZFQ1RPUgkweGVmCisKKy8qCisgKiBGaXJzdCBBUElDIHZlY3RvciBhdmFpbGFibGUgdG8gZHJpdmVyczogKHZlY3RvcnMgMHgzMC0weGVlKQorICogd2Ugc3RhcnQgYXQgMHgzMSB0byBzcHJlYWQgb3V0IHZlY3RvcnMgZXZlbmx5IGJldHdlZW4gcHJpb3JpdHkKKyAqIGxldmVscy4gKDB4ODAgaXMgdGhlIHN5c2NhbGwgdmVjdG9yKQorICovCisjZGVmaW5lIEZJUlNUX0RFVklDRV9WRUNUT1IJMHgzMQorI2RlZmluZSBGSVJTVF9TWVNURU1fVkVDVE9SCTB4ZWYgICAvKiBkdXBsaWNhdGVkIGluIGlycS5oICovCisKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK2V4dGVybiB1OCBpcnFfdmVjdG9yW05SX0lSUV9WRUNUT1JTXTsKKyNkZWZpbmUgSU9fQVBJQ19WRUNUT1IoaXJxKQkoaXJxX3ZlY3RvcltpcnFdKQorI2RlZmluZSBBVVRPX0FTU0lHTgkJLTEKKworLyoKKyAqIFZhcmlvdXMgbG93LWxldmVsIGlycSBkZXRhaWxzIG5lZWRlZCBieSBpcnEuYywgcHJvY2Vzcy5jLAorICogdGltZS5jLCBpb19hcGljLmMgYW5kIHNtcC5jCisgKgorICogSW50ZXJydXB0IGVudHJ5L2V4aXQgY29kZSBhdCBib3RoIEMgYW5kIGFzc2VtYmx5IGxldmVsCisgKi8KKworZXh0ZXJuIHZvaWQgZGlzYWJsZV84MjU5QV9pcnEodW5zaWduZWQgaW50IGlycSk7CitleHRlcm4gdm9pZCBlbmFibGVfODI1OUFfaXJxKHVuc2lnbmVkIGludCBpcnEpOworZXh0ZXJuIGludCBpODI1OUFfaXJxX3BlbmRpbmcodW5zaWduZWQgaW50IGlycSk7CitleHRlcm4gdm9pZCBtYWtlXzgyNTlBX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKK2V4dGVybiB2b2lkIGluaXRfODI1OUEoaW50IGFlb2kpOworZXh0ZXJuIHZvaWQgRkFTVENBTEwoc2VuZF9JUElfc2VsZihpbnQgdmVjdG9yKSk7CitleHRlcm4gdm9pZCBpbml0X1ZJU1dTX0FQSUNfaXJxcyh2b2lkKTsKK2V4dGVybiB2b2lkIHNldHVwX0lPX0FQSUModm9pZCk7CitleHRlcm4gdm9pZCBkaXNhYmxlX0lPX0FQSUModm9pZCk7CitleHRlcm4gdm9pZCBwcmludF9JT19BUElDKHZvaWQpOworZXh0ZXJuIGludCBJT19BUElDX2dldF9QQ0lfaXJxX3ZlY3RvcihpbnQgYnVzLCBpbnQgc2xvdCwgaW50IGZuKTsKK2V4dGVybiB2b2lkIHNlbmRfSVBJKGludCBkZXN0LCBpbnQgdmVjdG9yKTsKK2V4dGVybiB2b2lkIHNldHVwX2lvYXBpY19kZXN0KHZvaWQpOworCitleHRlcm4gdW5zaWduZWQgbG9uZyBpb19hcGljX2lycXM7CisKK2V4dGVybiBhdG9taWNfdCBpcnFfZXJyX2NvdW50OworZXh0ZXJuIGF0b21pY190IGlycV9taXNfY291bnQ7CisKKyNkZWZpbmUgSU9fQVBJQ19JUlEoeCkgKCgoeCkgPj0gMTYpIHx8ICgoMTw8KHgpKSAmIGlvX2FwaWNfaXJxcykpCisKKyNkZWZpbmUgX19TVFIoeCkgI3gKKyNkZWZpbmUgU1RSKHgpIF9fU1RSKHgpCisKKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisKKyNkZWZpbmUgSVJRX05BTUUyKG5yKSBuciMjX2ludGVycnVwdCh2b2lkKQorI2RlZmluZSBJUlFfTkFNRShucikgSVJRX05BTUUyKElSUSMjbnIpCisKKy8qCisgKglTTVAgaGFzIGEgZmV3IHNwZWNpYWwgaW50ZXJydXB0cyBmb3IgSVBJIG1lc3NhZ2VzCisgKi8KKworI2RlZmluZSBCVUlMRF9JUlEobnIpIFwKK2FzbWxpbmthZ2Ugdm9pZCBJUlFfTkFNRShucik7IFwKK19fYXNtX18oIFwKKyJcbi5wMmFsaWduXG4iIFwKKyJJUlEiICNuciAiX2ludGVycnVwdDpcblx0IiBcCisJInB1c2ggJCIgI25yICItMjU2IDsgIiBcCisJImptcCBjb21tb25faW50ZXJydXB0Iik7CisKKyNpZiBkZWZpbmVkKENPTkZJR19YODZfSU9fQVBJQykKK3N0YXRpYyBpbmxpbmUgdm9pZCBod19yZXNlbmRfaXJxKHN0cnVjdCBod19pbnRlcnJ1cHRfdHlwZSAqaCwgdW5zaWduZWQgaW50IGkpIHsKKwlpZiAoSU9fQVBJQ19JUlEoaSkpCisJCXNlbmRfSVBJX3NlbGYoSU9fQVBJQ19WRUNUT1IoaSkpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBod19yZXNlbmRfaXJxKHN0cnVjdCBod19pbnRlcnJ1cHRfdHlwZSAqaCwgdW5zaWduZWQgaW50IGkpIHt9CisjZW5kaWYKKworI2RlZmluZSBwbGF0Zm9ybV9sZWdhY3lfaXJxKGlycSkJKChpcnEpIDwgMTYpCisKKyNlbmRpZgorCisjZW5kaWYgLyogX0FTTV9IV19JUlFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2kzODcuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9pMzg3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWEzOWNmZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9pMzg3LmgKQEAgLTAsMCArMSwxNTAgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS14ODZfNjQvaTM4Ny5oCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk0IExpbnVzIFRvcnZhbGRzCisgKgorICogUGVudGl1bSBJSUkgRlhTUiwgU1NFIHN1cHBvcnQKKyAqIEdlbmVyYWwgRlBVIHN0YXRlIGhhbmRsaW5nIGNsZWFudXBzCisgKglHYXJldGggSHVnaGVzIDxnYXJldGhAdmFsaW51eC5jb20+LCBNYXkgMjAwMAorICogeDg2LTY0IHdvcmsgYnkgQW5kaSBLbGVlbiAyMDAyCisgKi8KKworI2lmbmRlZiBfX0FTTV9YODZfNjRfSTM4N19ICisjZGVmaW5lIF9fQVNNX1g4Nl82NF9JMzg3X0gKKworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9zaWdjb250ZXh0Lmg+CisjaW5jbHVkZSA8YXNtL3VzZXIuaD4KKyNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorCitleHRlcm4gdm9pZCBmcHVfaW5pdCh2b2lkKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgbXhjc3JfZmVhdHVyZV9tYXNrOworZXh0ZXJuIHZvaWQgbXhjc3JfZmVhdHVyZV9tYXNrX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBpbml0X2ZwdShzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKTsKK2V4dGVybiBpbnQgc2F2ZV9pMzg3KHN0cnVjdCBfZnBzdGF0ZSBfX3VzZXIgKmJ1Zik7CisKKy8qCisgKiBGUFUgbGF6eSBzdGF0ZSBzYXZlIGhhbmRsaW5nLi4uCisgKi8KKworI2RlZmluZSB1bmxhenlfZnB1KHRzaykgZG8geyBcCisJaWYgKCh0c2spLT50aHJlYWRfaW5mby0+c3RhdHVzICYgVFNfVVNFREZQVSkgXAorCQlzYXZlX2luaXRfZnB1KHRzayk7IFwKK30gd2hpbGUgKDApCisKKy8qIElnbm9yZSBkZWxheWVkIGV4Y2VwdGlvbnMgZnJvbSB1c2VyIHNwYWNlICovCitzdGF0aWMgaW5saW5lIHZvaWQgdG9sZXJhbnRfZndhaXQodm9pZCkKK3sKKwlhc20gdm9sYXRpbGUoIjE6IGZ3YWl0XG4iCisJCSAgICAgIjI6XG4iCisJCSAgICAgIiAgIC5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIKKwkJICAgICAiCS5hbGlnbiA4XG4iCisJCSAgICAgIgkucXVhZCAxYiwyYlxuIgorCQkgICAgICIJLnByZXZpb3VzXG4iKTsKK30KKworI2RlZmluZSBjbGVhcl9mcHUodHNrKSBkbyB7IFwKKwlpZiAoKHRzayktPnRocmVhZF9pbmZvLT5zdGF0dXMgJiBUU19VU0VERlBVKSB7CQlcCisJCXRvbGVyYW50X2Z3YWl0KCk7CQkJCVwKKwkJKHRzayktPnRocmVhZF9pbmZvLT5zdGF0dXMgJj0gflRTX1VTRURGUFU7CVwKKwkJc3R0cygpOwkJCQkJCVwKKwl9CQkJCQkJCVwKK30gd2hpbGUgKDApCisKKy8qCisgKiBwdHJhY2UgcmVxdWVzdCBoYW5kZXJzLi4uCisgKi8KK2V4dGVybiBpbnQgZ2V0X2ZwcmVncyhzdHJ1Y3QgdXNlcl9pMzg3X3N0cnVjdCBfX3VzZXIgKmJ1ZiwKKwkJICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spOworZXh0ZXJuIGludCBzZXRfZnByZWdzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLAorCQkgICAgICBzdHJ1Y3QgdXNlcl9pMzg3X3N0cnVjdCBfX3VzZXIgKmJ1Zik7CisKKy8qCisgKiBpMzg3IHN0YXRlIGludGVyYWN0aW9uCisgKi8KKyNkZWZpbmUgZ2V0X2ZwdV9teGNzcih0KSAoKHQpLT50aHJlYWQuaTM4Ny5meHNhdmUubXhjc3IpCisjZGVmaW5lIGdldF9mcHVfY3dkKHQpICgodCktPnRocmVhZC5pMzg3LmZ4c2F2ZS5jd2QpCisjZGVmaW5lIGdldF9mcHVfZnhzcl90d2QodCkgKCh0KS0+dGhyZWFkLmkzODcuZnhzYXZlLnR3ZCkKKyNkZWZpbmUgZ2V0X2ZwdV9zd2QodCkgKCh0KS0+dGhyZWFkLmkzODcuZnhzYXZlLnN3ZCkKKyNkZWZpbmUgc2V0X2ZwdV9jd2QodCx2YWwpICgodCktPnRocmVhZC5pMzg3LmZ4c2F2ZS5jd2QgPSAodmFsKSkKKyNkZWZpbmUgc2V0X2ZwdV9zd2QodCx2YWwpICgodCktPnRocmVhZC5pMzg3LmZ4c2F2ZS5zd2QgPSAodmFsKSkKKyNkZWZpbmUgc2V0X2ZwdV9meHNyX3R3ZCh0LHZhbCkgKCh0KS0+dGhyZWFkLmkzODcuZnhzYXZlLnR3ZCA9ICh2YWwpKQorCitzdGF0aWMgaW5saW5lIGludCByZXN0b3JlX2ZwdV9jaGVja2luZyhzdHJ1Y3QgaTM4N19meHNhdmVfc3RydWN0ICpmeCkgCit7IAorCWludCBlcnI7CisJYXNtIHZvbGF0aWxlKCIxOiAgcmV4NjQgOyBmeHJzdG9yICglW2Z4XSlcblx0IgorCQkgICAgICIyOlxuIgorCQkgICAgICIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iCisJCSAgICAgIjM6ICBtb3ZsICQtMSwlW2Vycl1cbiIKKwkJICAgICAiICAgIGptcCAgMmJcbiIKKwkJICAgICAiLnByZXZpb3VzXG4iCisJCSAgICAgIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIKKwkJICAgICAiICAgLmFsaWduIDhcbiIKKwkJICAgICAiICAgLnF1YWQgIDFiLDNiXG4iCisJCSAgICAgIi5wcmV2aW91cyIKKwkJICAgICA6IFtlcnJdICI9ciIgKGVycikKKwkJICAgICA6IFtmeF0gInIiIChmeCksICIwIiAoMCkpOyAKKwlpZiAodW5saWtlbHkoZXJyKSkKKwkJaW5pdF9mcHUoY3VycmVudCk7CisJcmV0dXJuIGVycjsKK30gCisKK3N0YXRpYyBpbmxpbmUgaW50IHNhdmVfaTM4N19jaGVja2luZyhzdHJ1Y3QgaTM4N19meHNhdmVfc3RydWN0IF9fdXNlciAqZngpIAoreyAKKwlpbnQgZXJyOworCWFzbSB2b2xhdGlsZSgiMTogIHJleDY0IDsgZnhzYXZlICglW2Z4XSlcblx0IgorCQkgICAgICIyOlxuIgorCQkgICAgICIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iCisJCSAgICAgIjM6ICBtb3ZsICQtMSwlW2Vycl1cbiIKKwkJICAgICAiICAgIGptcCAgMmJcbiIKKwkJICAgICAiLnByZXZpb3VzXG4iCisJCSAgICAgIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIKKwkJICAgICAiICAgLmFsaWduIDhcbiIKKwkJICAgICAiICAgLnF1YWQgIDFiLDNiXG4iCisJCSAgICAgIi5wcmV2aW91cyIKKwkJICAgICA6IFtlcnJdICI9ciIgKGVycikKKwkJICAgICA6IFtmeF0gInIiIChmeCksICIwIiAoMCkpOyAKKwlpZiAodW5saWtlbHkoZXJyKSkKKwkJX19jbGVhcl91c2VyKGZ4LCBzaXplb2Yoc3RydWN0IGkzODdfZnhzYXZlX3N0cnVjdCkpOworCXJldHVybiBlcnI7Cit9IAorCitzdGF0aWMgaW5saW5lIHZvaWQga2VybmVsX2ZwdV9iZWdpbih2b2lkKQoreworCXN0cnVjdCB0aHJlYWRfaW5mbyAqbWUgPSBjdXJyZW50X3RocmVhZF9pbmZvKCk7CisJcHJlZW1wdF9kaXNhYmxlKCk7CisJaWYgKG1lLT5zdGF0dXMgJiBUU19VU0VERlBVKSB7IAorCQlhc20gdm9sYXRpbGUoInJleDY0IDsgZnhzYXZlICUwIDsgZm5jbGV4IgorCQkJICAgICAgOiAiPW0iIChtZS0+dGFzay0+dGhyZWFkLmkzODcuZnhzYXZlKSk7CisJCW1lLT5zdGF0dXMgJj0gflRTX1VTRURGUFU7CisJCXJldHVybjsKKwl9CisJY2x0cygpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQga2VybmVsX2ZwdV9lbmQodm9pZCkKK3sKKwlzdHRzKCk7CisJcHJlZW1wdF9lbmFibGUoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNhdmVfaW5pdF9mcHUoIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrICkKK3sKKwlhc20gdm9sYXRpbGUoICJyZXg2NCA7IGZ4c2F2ZSAlMCA7IGZuY2xleCIKKwkJICAgICAgOiAiPW0iICh0c2stPnRocmVhZC5pMzg3LmZ4c2F2ZSkpOworCXRzay0+dGhyZWFkX2luZm8tPnN0YXR1cyAmPSB+VFNfVVNFREZQVTsKKwlzdHRzKCk7Cit9CisKKy8qIAorICogVGhpcyByZXN0b3JlcyBkaXJlY3RseSBvdXQgb2YgdXNlciBzcGFjZS4gRXhjZXB0aW9ucyBhcmUgaGFuZGxlZC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgcmVzdG9yZV9pMzg3KHN0cnVjdCBfZnBzdGF0ZSBfX3VzZXIgKmJ1ZikKK3sKKwlyZXR1cm4gcmVzdG9yZV9mcHVfY2hlY2tpbmcoKF9fZm9yY2Ugc3RydWN0IGkzODdfZnhzYXZlX3N0cnVjdCAqKWJ1Zik7Cit9CisKKyNlbmRpZiAvKiBfX0FTTV9YODZfNjRfSTM4N19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvaWEzMi5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2lhMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGE3NzE3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L2lhMzIuaApAQCAtMCwwICsxLDE3MiBAQAorI2lmbmRlZiBfQVNNX1g4Nl82NF9JQTMyX0gKKyNkZWZpbmUgX0FTTV9YODZfNjRfSUEzMl9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2lmZGVmIENPTkZJR19JQTMyX0VNVUxBVElPTgorCisjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CisKKy8qCisgKiAzMiBiaXQgc3RydWN0dXJlcyBmb3IgSUEzMiBzdXBwb3J0LgorICovCisKKyNpbmNsdWRlIDxhc20vc2lnY29udGV4dDMyLmg+CisKKy8qIHNpZ25hbC5oICovCitzdHJ1Y3Qgc2lnYWN0aW9uMzIgeworICAgICAgIHVuc2lnbmVkIGludCAgc2FfaGFuZGxlcjsJLyogUmVhbGx5IGEgcG9pbnRlciwgYnV0IG5lZWQgdG8gZGVhbCAKKwkJCQkJICAgICB3aXRoIDMyIGJpdHMgKi8KKyAgICAgICB1bnNpZ25lZCBpbnQgc2FfZmxhZ3M7CisgICAgICAgdW5zaWduZWQgaW50IHNhX3Jlc3RvcmVyOwkvKiBBbm90aGVyIDMyIGJpdCBwb2ludGVyICovCisgICAgICAgY29tcGF0X3NpZ3NldF90IHNhX21hc2s7CQkvKiBBIDMyIGJpdCBtYXNrICovCit9OworCitzdHJ1Y3Qgb2xkX3NpZ2FjdGlvbjMyIHsKKyAgICAgICB1bnNpZ25lZCBpbnQgIHNhX2hhbmRsZXI7CS8qIFJlYWxseSBhIHBvaW50ZXIsIGJ1dCBuZWVkIHRvIGRlYWwgCisJCQkJCSAgICAgd2l0aCAzMiBiaXRzICovCisgICAgICAgY29tcGF0X29sZF9zaWdzZXRfdCBzYV9tYXNrOwkJLyogQSAzMiBiaXQgbWFzayAqLworICAgICAgIHVuc2lnbmVkIGludCBzYV9mbGFnczsKKyAgICAgICB1bnNpZ25lZCBpbnQgc2FfcmVzdG9yZXI7CS8qIEFub3RoZXIgMzIgYml0IHBvaW50ZXIgKi8KK307CisKK3R5cGVkZWYgc3RydWN0IHNpZ2FsdHN0YWNrX2lhMzIgeworCXVuc2lnbmVkIGludAlzc19zcDsKKwlpbnQJCXNzX2ZsYWdzOworCXVuc2lnbmVkIGludAlzc19zaXplOworfSBzdGFja19pYTMyX3Q7CisKK3N0cnVjdCB1Y29udGV4dF9pYTMyIHsKKwl1bnNpZ25lZCBpbnQJICB1Y19mbGFnczsKKwl1bnNpZ25lZCBpbnQgCSAgdWNfbGluazsKKwlzdGFja19pYTMyX3QJICB1Y19zdGFjazsKKwlzdHJ1Y3Qgc2lnY29udGV4dF9pYTMyIHVjX21jb250ZXh0OworCWNvbXBhdF9zaWdzZXRfdAkgIHVjX3NpZ21hc2s7CS8qIG1hc2sgbGFzdCBmb3IgZXh0ZW5zaWJpbGl0eSAqLworfTsKKworLyogVGhpcyBtYXRjaGVzIHN0cnVjdCBzdGF0NjQgaW4gZ2xpYmMyLjIsIGhlbmNlIHRoZSBhYnNvbHV0ZWx5CisgKiBpbnNhbmUgYW1vdW50cyBvZiBwYWRkaW5nIGFyb3VuZCBkZXZfdCdzLgorICovCitzdHJ1Y3Qgc3RhdDY0IHsKKwl1bnNpZ25lZCBsb25nIGxvbmcJc3RfZGV2OworCXVuc2lnbmVkIGNoYXIJCV9fcGFkMFs0XTsKKworI2RlZmluZSBTVEFUNjRfSEFTX0JST0tFTl9TVF9JTk8JMQorCXVuc2lnbmVkIGludAkJX19zdF9pbm87CisKKwl1bnNpZ25lZCBpbnQJCXN0X21vZGU7CisJdW5zaWduZWQgaW50CQlzdF9ubGluazsKKworCXVuc2lnbmVkIGludAkJc3RfdWlkOworCXVuc2lnbmVkIGludAkJc3RfZ2lkOworCisJdW5zaWduZWQgbG9uZyBsb25nCXN0X3JkZXY7CisJdW5zaWduZWQgY2hhcgkJX19wYWQzWzRdOworCisJbG9uZyBsb25nCQlzdF9zaXplOworCXVuc2lnbmVkIGludAkJc3RfYmxrc2l6ZTsKKworCWxvbmcgbG9uZwkJc3RfYmxvY2tzOy8qIE51bWJlciA1MTItYnl0ZSBibG9ja3MgYWxsb2NhdGVkLiAqLworCisJdW5zaWduZWQgCQlzdF9hdGltZTsKKwl1bnNpZ25lZCAJCXN0X2F0aW1lX25zZWM7CisJdW5zaWduZWQgCQlzdF9tdGltZTsKKwl1bnNpZ25lZCAJCXN0X210aW1lX25zZWM7CisJdW5zaWduZWQgCQlzdF9jdGltZTsKKwl1bnNpZ25lZCAJCXN0X2N0aW1lX25zZWM7CisKKwl1bnNpZ25lZCBsb25nIGxvbmcJc3RfaW5vOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwordHlwZWRlZiBzdHJ1Y3QgY29tcGF0X3NpZ2luZm97CisJaW50IHNpX3NpZ25vOworCWludCBzaV9lcnJubzsKKwlpbnQgc2lfY29kZTsKKworCXVuaW9uIHsKKwkJaW50IF9wYWRbKCgxMjgvc2l6ZW9mKGludCkpIC0gMyldOworCisJCS8qIGtpbGwoKSAqLworCQlzdHJ1Y3QgeworCQkJdW5zaWduZWQgaW50IF9waWQ7CS8qIHNlbmRlcidzIHBpZCAqLworCQkJdW5zaWduZWQgaW50IF91aWQ7CS8qIHNlbmRlcidzIHVpZCAqLworCQl9IF9raWxsOworCisJCS8qIFBPU0lYLjFiIHRpbWVycyAqLworCQlzdHJ1Y3QgeworCQkJaW50IF90aWQ7CQkvKiB0aW1lciBpZCAqLworCQkJaW50IF9vdmVycnVuOwkJLyogb3ZlcnJ1biBjb3VudCAqLworCQkJY29tcGF0X3NpZ3ZhbF90IF9zaWd2YWw7CS8qIHNhbWUgYXMgYmVsb3cgKi8KKwkJCWludCBfc3lzX3ByaXZhdGU7CS8qIG5vdCB0byBiZSBwYXNzZWQgdG8gdXNlciAqLworCQkJaW50IF9vdmVycnVuX2luY3I7CS8qIGFtb3VudCB0byBhZGQgdG8gb3ZlcnJ1biAqLworCQl9IF90aW1lcjsKKworCQkvKiBQT1NJWC4xYiBzaWduYWxzICovCisJCXN0cnVjdCB7CisJCQl1bnNpZ25lZCBpbnQgX3BpZDsJLyogc2VuZGVyJ3MgcGlkICovCisJCQl1bnNpZ25lZCBpbnQgX3VpZDsJLyogc2VuZGVyJ3MgdWlkICovCisJCQljb21wYXRfc2lndmFsX3QgX3NpZ3ZhbDsKKwkJfSBfcnQ7CisKKwkJLyogU0lHQ0hMRCAqLworCQlzdHJ1Y3QgeworCQkJdW5zaWduZWQgaW50IF9waWQ7CS8qIHdoaWNoIGNoaWxkICovCisJCQl1bnNpZ25lZCBpbnQgX3VpZDsJLyogc2VuZGVyJ3MgdWlkICovCisJCQlpbnQgX3N0YXR1czsJCS8qIGV4aXQgY29kZSAqLworCQkJY29tcGF0X2Nsb2NrX3QgX3V0aW1lOworCQkJY29tcGF0X2Nsb2NrX3QgX3N0aW1lOworCQl9IF9zaWdjaGxkOworCisJCS8qIFNJR0lMTCwgU0lHRlBFLCBTSUdTRUdWLCBTSUdCVVMgKi8KKwkJc3RydWN0IHsKKwkJCXVuc2lnbmVkIGludCBfYWRkcjsJLyogZmF1bHRpbmcgaW5zbi9tZW1vcnkgcmVmLiAqLworCQl9IF9zaWdmYXVsdDsKKworCQkvKiBTSUdQT0xMICovCisJCXN0cnVjdCB7CisJCQlpbnQgX2JhbmQ7CS8qIFBPTExfSU4sIFBPTExfT1VULCBQT0xMX01TRyAqLworCQkJaW50IF9mZDsKKwkJfSBfc2lncG9sbDsKKwl9IF9zaWZpZWxkczsKK30gY29tcGF0X3NpZ2luZm9fdDsKKworc3RydWN0IHNpZ2ZyYW1lMzIKK3sKKyAgICAgICAgdTMyIHByZXRjb2RlOworICAgICAgICBpbnQgc2lnOworICAgICAgICBzdHJ1Y3Qgc2lnY29udGV4dF9pYTMyIHNjOworICAgICAgICBzdHJ1Y3QgX2Zwc3RhdGVfaWEzMiBmcHN0YXRlOworICAgICAgICB1bnNpZ25lZCBpbnQgZXh0cmFtYXNrW19DT01QQVRfTlNJR19XT1JEUy0xXTsKK307CisKK3N0cnVjdCBydF9zaWdmcmFtZTMyCit7CisgICAgICAgIHUzMiBwcmV0Y29kZTsKKyAgICAgICAgaW50IHNpZzsKKyAgICAgICAgdTMyIHBpbmZvOworICAgICAgICB1MzIgcHVjOworICAgICAgICBjb21wYXRfc2lnaW5mb190IGluZm87CisgICAgICAgIHN0cnVjdCB1Y29udGV4dF9pYTMyIHVjOworICAgICAgICBzdHJ1Y3QgX2Zwc3RhdGVfaWEzMiBmcHN0YXRlOworfTsKKworc3RydWN0IHVzdGF0MzIgeworCV9fdTMyCWZfdGZyZWU7CisJY29tcGF0X2lub190CQlmX3Rpbm9kZTsKKwljaGFyCQkJZl9mbmFtZVs2XTsKKwljaGFyCQkJZl9mcGFja1s2XTsKK307CisKKyNkZWZpbmUgSUEzMl9TVEFDS19UT1AgSUEzMl9QQUdFX09GRlNFVAorCisjaWZkZWYgX19LRVJORUxfXworc3RydWN0IHVzZXJfZGVzYzsKK3N0cnVjdCBzaWdpbmZvX3Q7CitpbnQgZG9fZ2V0X3RocmVhZF9hcmVhKHN0cnVjdCB0aHJlYWRfc3RydWN0ICp0LCBzdHJ1Y3QgdXNlcl9kZXNjIF9fdXNlciAqaW5mbyk7CitpbnQgZG9fc2V0X3RocmVhZF9hcmVhKHN0cnVjdCB0aHJlYWRfc3RydWN0ICp0LCBzdHJ1Y3QgdXNlcl9kZXNjIF9fdXNlciAqaW5mbyk7CitpbnQgaWEzMl9jaGlsZF90bHMoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgcHRfcmVncyAqY2hpbGRyZWdzKTsKKyNlbmRpZgorCisjZW5kaWYgLyogIUNPTkZJR19JQTMyX1NVUFBPUlQgKi8KKyAKKyNlbmRpZiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9pYTMyX3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2lhMzJfdW5pc3RkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNiNzExMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9pYTMyX3VuaXN0ZC5oCkBAIC0wLDAgKzEsMzAwIEBACisjaWZuZGVmIF9BU01fWDg2XzY0X0lBMzJfVU5JU1REX0hfCisjZGVmaW5lIF9BU01fWDg2XzY0X0lBMzJfVU5JU1REX0hfCisKKy8qCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHN5c3RlbSBjYWxsIG51bWJlcnMgb2YgdGhlIGlhMzIgcG9ydCwKKyAqIHRoaXMgaXMgZm9yIHRoZSBrZXJuZWwgb25seS4KKyAqLworCisjZGVmaW5lIF9fTlJfaWEzMl9yZXN0YXJ0X3N5c2NhbGwgMAorI2RlZmluZSBfX05SX2lhMzJfZXhpdAkJICAxCisjZGVmaW5lIF9fTlJfaWEzMl9mb3JrCQkgIDIKKyNkZWZpbmUgX19OUl9pYTMyX3JlYWQJCSAgMworI2RlZmluZSBfX05SX2lhMzJfd3JpdGUJCSAgNAorI2RlZmluZSBfX05SX2lhMzJfb3BlbgkJICA1CisjZGVmaW5lIF9fTlJfaWEzMl9jbG9zZQkJICA2CisjZGVmaW5lIF9fTlJfaWEzMl93YWl0cGlkCQkgIDcKKyNkZWZpbmUgX19OUl9pYTMyX2NyZWF0CQkgIDgKKyNkZWZpbmUgX19OUl9pYTMyX2xpbmsJCSAgOQorI2RlZmluZSBfX05SX2lhMzJfdW5saW5rCQkgMTAKKyNkZWZpbmUgX19OUl9pYTMyX2V4ZWN2ZQkJIDExCisjZGVmaW5lIF9fTlJfaWEzMl9jaGRpcgkJIDEyCisjZGVmaW5lIF9fTlJfaWEzMl90aW1lCQkgMTMKKyNkZWZpbmUgX19OUl9pYTMyX21rbm9kCQkgMTQKKyNkZWZpbmUgX19OUl9pYTMyX2NobW9kCQkgMTUKKyNkZWZpbmUgX19OUl9pYTMyX2xjaG93bgkJIDE2CisjZGVmaW5lIF9fTlJfaWEzMl9icmVhawkJIDE3CisjZGVmaW5lIF9fTlJfaWEzMl9vbGRzdGF0CQkgMTgKKyNkZWZpbmUgX19OUl9pYTMyX2xzZWVrCQkgMTkKKyNkZWZpbmUgX19OUl9pYTMyX2dldHBpZAkJIDIwCisjZGVmaW5lIF9fTlJfaWEzMl9tb3VudAkJIDIxCisjZGVmaW5lIF9fTlJfaWEzMl91bW91bnQJCSAyMgorI2RlZmluZSBfX05SX2lhMzJfc2V0dWlkCQkgMjMKKyNkZWZpbmUgX19OUl9pYTMyX2dldHVpZAkJIDI0CisjZGVmaW5lIF9fTlJfaWEzMl9zdGltZQkJIDI1CisjZGVmaW5lIF9fTlJfaWEzMl9wdHJhY2UJCSAyNgorI2RlZmluZSBfX05SX2lhMzJfYWxhcm0JCSAyNworI2RlZmluZSBfX05SX2lhMzJfb2xkZnN0YXQJCSAyOAorI2RlZmluZSBfX05SX2lhMzJfcGF1c2UJCSAyOQorI2RlZmluZSBfX05SX2lhMzJfdXRpbWUJCSAzMAorI2RlZmluZSBfX05SX2lhMzJfc3R0eQkJIDMxCisjZGVmaW5lIF9fTlJfaWEzMl9ndHR5CQkgMzIKKyNkZWZpbmUgX19OUl9pYTMyX2FjY2VzcwkJIDMzCisjZGVmaW5lIF9fTlJfaWEzMl9uaWNlCQkgMzQKKyNkZWZpbmUgX19OUl9pYTMyX2Z0aW1lCQkgMzUKKyNkZWZpbmUgX19OUl9pYTMyX3N5bmMJCSAzNgorI2RlZmluZSBfX05SX2lhMzJfa2lsbAkJIDM3CisjZGVmaW5lIF9fTlJfaWEzMl9yZW5hbWUJCSAzOAorI2RlZmluZSBfX05SX2lhMzJfbWtkaXIJCSAzOQorI2RlZmluZSBfX05SX2lhMzJfcm1kaXIJCSA0MAorI2RlZmluZSBfX05SX2lhMzJfZHVwCQkgNDEKKyNkZWZpbmUgX19OUl9pYTMyX3BpcGUJCSA0MgorI2RlZmluZSBfX05SX2lhMzJfdGltZXMJCSA0MworI2RlZmluZSBfX05SX2lhMzJfcHJvZgkJIDQ0CisjZGVmaW5lIF9fTlJfaWEzMl9icmsJCSA0NQorI2RlZmluZSBfX05SX2lhMzJfc2V0Z2lkCQkgNDYKKyNkZWZpbmUgX19OUl9pYTMyX2dldGdpZAkJIDQ3CisjZGVmaW5lIF9fTlJfaWEzMl9zaWduYWwJCSA0OAorI2RlZmluZSBfX05SX2lhMzJfZ2V0ZXVpZAkJIDQ5CisjZGVmaW5lIF9fTlJfaWEzMl9nZXRlZ2lkCQkgNTAKKyNkZWZpbmUgX19OUl9pYTMyX2FjY3QJCSA1MQorI2RlZmluZSBfX05SX2lhMzJfdW1vdW50MgkJIDUyCisjZGVmaW5lIF9fTlJfaWEzMl9sb2NrCQkgNTMKKyNkZWZpbmUgX19OUl9pYTMyX2lvY3RsCQkgNTQKKyNkZWZpbmUgX19OUl9pYTMyX2ZjbnRsCQkgNTUKKyNkZWZpbmUgX19OUl9pYTMyX21weAkJIDU2CisjZGVmaW5lIF9fTlJfaWEzMl9zZXRwZ2lkCQkgNTcKKyNkZWZpbmUgX19OUl9pYTMyX3VsaW1pdAkJIDU4CisjZGVmaW5lIF9fTlJfaWEzMl9vbGRvbGR1bmFtZQkgNTkKKyNkZWZpbmUgX19OUl9pYTMyX3VtYXNrCQkgNjAKKyNkZWZpbmUgX19OUl9pYTMyX2Nocm9vdAkJIDYxCisjZGVmaW5lIF9fTlJfaWEzMl91c3RhdAkJIDYyCisjZGVmaW5lIF9fTlJfaWEzMl9kdXAyCQkgNjMKKyNkZWZpbmUgX19OUl9pYTMyX2dldHBwaWQJCSA2NAorI2RlZmluZSBfX05SX2lhMzJfZ2V0cGdycAkJIDY1CisjZGVmaW5lIF9fTlJfaWEzMl9zZXRzaWQJCSA2NgorI2RlZmluZSBfX05SX2lhMzJfc2lnYWN0aW9uCQkgNjcKKyNkZWZpbmUgX19OUl9pYTMyX3NnZXRtYXNrCQkgNjgKKyNkZWZpbmUgX19OUl9pYTMyX3NzZXRtYXNrCQkgNjkKKyNkZWZpbmUgX19OUl9pYTMyX3NldHJldWlkCQkgNzAKKyNkZWZpbmUgX19OUl9pYTMyX3NldHJlZ2lkCQkgNzEKKyNkZWZpbmUgX19OUl9pYTMyX3NpZ3N1c3BlbmQJCSA3MgorI2RlZmluZSBfX05SX2lhMzJfc2lncGVuZGluZwkJIDczCisjZGVmaW5lIF9fTlJfaWEzMl9zZXRob3N0bmFtZQkgNzQKKyNkZWZpbmUgX19OUl9pYTMyX3NldHJsaW1pdAkJIDc1CisjZGVmaW5lIF9fTlJfaWEzMl9nZXRybGltaXQJCSA3NgkvKiBCYWNrIGNvbXBhdGlibGUgMkdpZyBsaW1pdGVkIHJsaW1pdCAqLworI2RlZmluZSBfX05SX2lhMzJfZ2V0cnVzYWdlCQkgNzcKKyNkZWZpbmUgX19OUl9pYTMyX2dldHRpbWVvZmRheQkgNzgKKyNkZWZpbmUgX19OUl9pYTMyX3NldHRpbWVvZmRheQkgNzkKKyNkZWZpbmUgX19OUl9pYTMyX2dldGdyb3VwcwkJIDgwCisjZGVmaW5lIF9fTlJfaWEzMl9zZXRncm91cHMJCSA4MQorI2RlZmluZSBfX05SX2lhMzJfc2VsZWN0CQkgODIKKyNkZWZpbmUgX19OUl9pYTMyX3N5bWxpbmsJCSA4MworI2RlZmluZSBfX05SX2lhMzJfb2xkbHN0YXQJCSA4NAorI2RlZmluZSBfX05SX2lhMzJfcmVhZGxpbmsJCSA4NQorI2RlZmluZSBfX05SX2lhMzJfdXNlbGliCQkgODYKKyNkZWZpbmUgX19OUl9pYTMyX3N3YXBvbgkJIDg3CisjZGVmaW5lIF9fTlJfaWEzMl9yZWJvb3QJCSA4OAorI2RlZmluZSBfX05SX2lhMzJfcmVhZGRpcgkJIDg5CisjZGVmaW5lIF9fTlJfaWEzMl9tbWFwCQkgOTAKKyNkZWZpbmUgX19OUl9pYTMyX211bm1hcAkJIDkxCisjZGVmaW5lIF9fTlJfaWEzMl90cnVuY2F0ZQkJIDkyCisjZGVmaW5lIF9fTlJfaWEzMl9mdHJ1bmNhdGUJCSA5MworI2RlZmluZSBfX05SX2lhMzJfZmNobW9kCQkgOTQKKyNkZWZpbmUgX19OUl9pYTMyX2ZjaG93bgkJIDk1CisjZGVmaW5lIF9fTlJfaWEzMl9nZXRwcmlvcml0eQkgOTYKKyNkZWZpbmUgX19OUl9pYTMyX3NldHByaW9yaXR5CSA5NworI2RlZmluZSBfX05SX2lhMzJfcHJvZmlsCQkgOTgKKyNkZWZpbmUgX19OUl9pYTMyX3N0YXRmcwkJIDk5CisjZGVmaW5lIF9fTlJfaWEzMl9mc3RhdGZzCQkxMDAKKyNkZWZpbmUgX19OUl9pYTMyX2lvcGVybQkJMTAxCisjZGVmaW5lIF9fTlJfaWEzMl9zb2NrZXRjYWxsCQkxMDIKKyNkZWZpbmUgX19OUl9pYTMyX3N5c2xvZwkJMTAzCisjZGVmaW5lIF9fTlJfaWEzMl9zZXRpdGltZXIJCTEwNAorI2RlZmluZSBfX05SX2lhMzJfZ2V0aXRpbWVyCQkxMDUKKyNkZWZpbmUgX19OUl9pYTMyX3N0YXQJCTEwNgorI2RlZmluZSBfX05SX2lhMzJfbHN0YXQJCTEwNworI2RlZmluZSBfX05SX2lhMzJfZnN0YXQJCTEwOAorI2RlZmluZSBfX05SX2lhMzJfb2xkdW5hbWUJCTEwOQorI2RlZmluZSBfX05SX2lhMzJfaW9wbAkJMTEwCisjZGVmaW5lIF9fTlJfaWEzMl92aGFuZ3VwCQkxMTEKKyNkZWZpbmUgX19OUl9pYTMyX2lkbGUJCTExMgorI2RlZmluZSBfX05SX2lhMzJfdm04Nm9sZAkJMTEzCisjZGVmaW5lIF9fTlJfaWEzMl93YWl0NAkJMTE0CisjZGVmaW5lIF9fTlJfaWEzMl9zd2Fwb2ZmCQkxMTUKKyNkZWZpbmUgX19OUl9pYTMyX3N5c2luZm8JCTExNgorI2RlZmluZSBfX05SX2lhMzJfaXBjCQkxMTcKKyNkZWZpbmUgX19OUl9pYTMyX2ZzeW5jCQkxMTgKKyNkZWZpbmUgX19OUl9pYTMyX3NpZ3JldHVybgkJMTE5CisjZGVmaW5lIF9fTlJfaWEzMl9jbG9uZQkJMTIwCisjZGVmaW5lIF9fTlJfaWEzMl9zZXRkb21haW5uYW1lCTEyMQorI2RlZmluZSBfX05SX2lhMzJfdW5hbWUJCTEyMgorI2RlZmluZSBfX05SX2lhMzJfbW9kaWZ5X2xkdAkJMTIzCisjZGVmaW5lIF9fTlJfaWEzMl9hZGp0aW1leAkJMTI0CisjZGVmaW5lIF9fTlJfaWEzMl9tcHJvdGVjdAkJMTI1CisjZGVmaW5lIF9fTlJfaWEzMl9zaWdwcm9jbWFzawkxMjYKKyNkZWZpbmUgX19OUl9pYTMyX2NyZWF0ZV9tb2R1bGUJMTI3CisjZGVmaW5lIF9fTlJfaWEzMl9pbml0X21vZHVsZQkxMjgKKyNkZWZpbmUgX19OUl9pYTMyX2RlbGV0ZV9tb2R1bGUJMTI5CisjZGVmaW5lIF9fTlJfaWEzMl9nZXRfa2VybmVsX3N5bXMJMTMwCisjZGVmaW5lIF9fTlJfaWEzMl9xdW90YWN0bAkJMTMxCisjZGVmaW5lIF9fTlJfaWEzMl9nZXRwZ2lkCQkxMzIKKyNkZWZpbmUgX19OUl9pYTMyX2ZjaGRpcgkJMTMzCisjZGVmaW5lIF9fTlJfaWEzMl9iZGZsdXNoCQkxMzQKKyNkZWZpbmUgX19OUl9pYTMyX3N5c2ZzCQkxMzUKKyNkZWZpbmUgX19OUl9pYTMyX3BlcnNvbmFsaXR5CTEzNgorI2RlZmluZSBfX05SX2lhMzJfYWZzX3N5c2NhbGwJMTM3IC8qIFN5c2NhbGwgZm9yIEFuZHJldyBGaWxlIFN5c3RlbSAqLworI2RlZmluZSBfX05SX2lhMzJfc2V0ZnN1aWQJCTEzOAorI2RlZmluZSBfX05SX2lhMzJfc2V0ZnNnaWQJCTEzOQorI2RlZmluZSBfX05SX2lhMzJfX2xsc2VlawkJMTQwCisjZGVmaW5lIF9fTlJfaWEzMl9nZXRkZW50cwkJMTQxCisjZGVmaW5lIF9fTlJfaWEzMl9fbmV3c2VsZWN0CQkxNDIKKyNkZWZpbmUgX19OUl9pYTMyX2Zsb2NrCQkxNDMKKyNkZWZpbmUgX19OUl9pYTMyX21zeW5jCQkxNDQKKyNkZWZpbmUgX19OUl9pYTMyX3JlYWR2CQkxNDUKKyNkZWZpbmUgX19OUl9pYTMyX3dyaXRldgkJMTQ2CisjZGVmaW5lIF9fTlJfaWEzMl9nZXRzaWQJCTE0NworI2RlZmluZSBfX05SX2lhMzJfZmRhdGFzeW5jCQkxNDgKKyNkZWZpbmUgX19OUl9pYTMyX19zeXNjdGwJCTE0OQorI2RlZmluZSBfX05SX2lhMzJfbWxvY2sJCTE1MAorI2RlZmluZSBfX05SX2lhMzJfbXVubG9jawkJMTUxCisjZGVmaW5lIF9fTlJfaWEzMl9tbG9ja2FsbAkJMTUyCisjZGVmaW5lIF9fTlJfaWEzMl9tdW5sb2NrYWxsCQkxNTMKKyNkZWZpbmUgX19OUl9pYTMyX3NjaGVkX3NldHBhcmFtCQkxNTQKKyNkZWZpbmUgX19OUl9pYTMyX3NjaGVkX2dldHBhcmFtCQkxNTUKKyNkZWZpbmUgX19OUl9pYTMyX3NjaGVkX3NldHNjaGVkdWxlcgkJMTU2CisjZGVmaW5lIF9fTlJfaWEzMl9zY2hlZF9nZXRzY2hlZHVsZXIJCTE1NworI2RlZmluZSBfX05SX2lhMzJfc2NoZWRfeWllbGQJCTE1OAorI2RlZmluZSBfX05SX2lhMzJfc2NoZWRfZ2V0X3ByaW9yaXR5X21heAkxNTkKKyNkZWZpbmUgX19OUl9pYTMyX3NjaGVkX2dldF9wcmlvcml0eV9taW4JMTYwCisjZGVmaW5lIF9fTlJfaWEzMl9zY2hlZF9ycl9nZXRfaW50ZXJ2YWwJMTYxCisjZGVmaW5lIF9fTlJfaWEzMl9uYW5vc2xlZXAJCTE2MgorI2RlZmluZSBfX05SX2lhMzJfbXJlbWFwCQkxNjMKKyNkZWZpbmUgX19OUl9pYTMyX3NldHJlc3VpZAkJMTY0CisjZGVmaW5lIF9fTlJfaWEzMl9nZXRyZXN1aWQJCTE2NQorI2RlZmluZSBfX05SX2lhMzJfdm04NgkJMTY2CisjZGVmaW5lIF9fTlJfaWEzMl9xdWVyeV9tb2R1bGUJMTY3CisjZGVmaW5lIF9fTlJfaWEzMl9wb2xsCQkxNjgKKyNkZWZpbmUgX19OUl9pYTMyX25mc3NlcnZjdGwJCTE2OQorI2RlZmluZSBfX05SX2lhMzJfc2V0cmVzZ2lkCQkxNzAKKyNkZWZpbmUgX19OUl9pYTMyX2dldHJlc2dpZAkJMTcxCisjZGVmaW5lIF9fTlJfaWEzMl9wcmN0bCAgICAgICAgICAgICAgMTcyCisjZGVmaW5lIF9fTlJfaWEzMl9ydF9zaWdyZXR1cm4JMTczCisjZGVmaW5lIF9fTlJfaWEzMl9ydF9zaWdhY3Rpb24JMTc0CisjZGVmaW5lIF9fTlJfaWEzMl9ydF9zaWdwcm9jbWFzawkxNzUKKyNkZWZpbmUgX19OUl9pYTMyX3J0X3NpZ3BlbmRpbmcJMTc2CisjZGVmaW5lIF9fTlJfaWEzMl9ydF9zaWd0aW1lZHdhaXQJMTc3CisjZGVmaW5lIF9fTlJfaWEzMl9ydF9zaWdxdWV1ZWluZm8JMTc4CisjZGVmaW5lIF9fTlJfaWEzMl9ydF9zaWdzdXNwZW5kCTE3OQorI2RlZmluZSBfX05SX2lhMzJfcHJlYWQJCTE4MAorI2RlZmluZSBfX05SX2lhMzJfcHdyaXRlCQkxODEKKyNkZWZpbmUgX19OUl9pYTMyX2Nob3duCQkxODIKKyNkZWZpbmUgX19OUl9pYTMyX2dldGN3ZAkJMTgzCisjZGVmaW5lIF9fTlJfaWEzMl9jYXBnZXQJCTE4NAorI2RlZmluZSBfX05SX2lhMzJfY2Fwc2V0CQkxODUKKyNkZWZpbmUgX19OUl9pYTMyX3NpZ2FsdHN0YWNrCTE4NgorI2RlZmluZSBfX05SX2lhMzJfc2VuZGZpbGUJCTE4NworI2RlZmluZSBfX05SX2lhMzJfZ2V0cG1zZwkJMTg4CS8qIHNvbWUgcGVvcGxlIGFjdHVhbGx5IHdhbnQgc3RyZWFtcyAqLworI2RlZmluZSBfX05SX2lhMzJfcHV0cG1zZwkJMTg5CS8qIHNvbWUgcGVvcGxlIGFjdHVhbGx5IHdhbnQgc3RyZWFtcyAqLworI2RlZmluZSBfX05SX2lhMzJfdmZvcmsJCTE5MAorI2RlZmluZSBfX05SX2lhMzJfdWdldHJsaW1pdAkJMTkxCS8qIFN1UyBjb21wbGlhbnQgZ2V0cmxpbWl0ICovCisjZGVmaW5lIF9fTlJfaWEzMl9tbWFwMgkJMTkyCisjZGVmaW5lIF9fTlJfaWEzMl90cnVuY2F0ZTY0CQkxOTMKKyNkZWZpbmUgX19OUl9pYTMyX2Z0cnVuY2F0ZTY0CTE5NAorI2RlZmluZSBfX05SX2lhMzJfc3RhdDY0CQkxOTUKKyNkZWZpbmUgX19OUl9pYTMyX2xzdGF0NjQJCTE5NgorI2RlZmluZSBfX05SX2lhMzJfZnN0YXQ2NAkJMTk3CisjZGVmaW5lIF9fTlJfaWEzMl9sY2hvd24zMgkJMTk4CisjZGVmaW5lIF9fTlJfaWEzMl9nZXR1aWQzMgkJMTk5CisjZGVmaW5lIF9fTlJfaWEzMl9nZXRnaWQzMgkJMjAwCisjZGVmaW5lIF9fTlJfaWEzMl9nZXRldWlkMzIJCTIwMQorI2RlZmluZSBfX05SX2lhMzJfZ2V0ZWdpZDMyCQkyMDIKKyNkZWZpbmUgX19OUl9pYTMyX3NldHJldWlkMzIJCTIwMworI2RlZmluZSBfX05SX2lhMzJfc2V0cmVnaWQzMgkJMjA0CisjZGVmaW5lIF9fTlJfaWEzMl9nZXRncm91cHMzMgkyMDUKKyNkZWZpbmUgX19OUl9pYTMyX3NldGdyb3VwczMyCTIwNgorI2RlZmluZSBfX05SX2lhMzJfZmNob3duMzIJCTIwNworI2RlZmluZSBfX05SX2lhMzJfc2V0cmVzdWlkMzIJMjA4CisjZGVmaW5lIF9fTlJfaWEzMl9nZXRyZXN1aWQzMgkyMDkKKyNkZWZpbmUgX19OUl9pYTMyX3NldHJlc2dpZDMyCTIxMAorI2RlZmluZSBfX05SX2lhMzJfZ2V0cmVzZ2lkMzIJMjExCisjZGVmaW5lIF9fTlJfaWEzMl9jaG93bjMyCQkyMTIKKyNkZWZpbmUgX19OUl9pYTMyX3NldHVpZDMyCQkyMTMKKyNkZWZpbmUgX19OUl9pYTMyX3NldGdpZDMyCQkyMTQKKyNkZWZpbmUgX19OUl9pYTMyX3NldGZzdWlkMzIJCTIxNQorI2RlZmluZSBfX05SX2lhMzJfc2V0ZnNnaWQzMgkJMjE2CisjZGVmaW5lIF9fTlJfaWEzMl9waXZvdF9yb290CQkyMTcKKyNkZWZpbmUgX19OUl9pYTMyX21pbmNvcmUJCTIxOAorI2RlZmluZSBfX05SX2lhMzJfbWFkdmlzZQkJMjE5CisjZGVmaW5lIF9fTlJfaWEzMl9tYWR2aXNlMQkJMjE5CS8qIGRlbGV0ZSB3aGVuIEMgbGliIHN0dWIgaXMgcmVtb3ZlZCAqLworI2RlZmluZSBfX05SX2lhMzJfZ2V0ZGVudHM2NAkJMjIwCisjZGVmaW5lIF9fTlJfaWEzMl9mY250bDY0CQkyMjEKKyNkZWZpbmUgX19OUl9pYTMyX3R1eGNhbGwJCTIyMgorI2RlZmluZSBfX05SX2lhMzJfc2VjdXJpdHkJCTIyMworI2RlZmluZSBfX05SX2lhMzJfZ2V0dGlkCQkyMjQKKyNkZWZpbmUgX19OUl9pYTMyX3JlYWRhaGVhZAkJMjI1CisjZGVmaW5lIF9fTlJfaWEzMl9zZXR4YXR0cgkJMjI2CisjZGVmaW5lIF9fTlJfaWEzMl9sc2V0eGF0dHIJCTIyNworI2RlZmluZSBfX05SX2lhMzJfZnNldHhhdHRyCQkyMjgKKyNkZWZpbmUgX19OUl9pYTMyX2dldHhhdHRyCQkyMjkKKyNkZWZpbmUgX19OUl9pYTMyX2xnZXR4YXR0cgkJMjMwCisjZGVmaW5lIF9fTlJfaWEzMl9mZ2V0eGF0dHIJCTIzMQorI2RlZmluZSBfX05SX2lhMzJfbGlzdHhhdHRyCQkyMzIKKyNkZWZpbmUgX19OUl9pYTMyX2xsaXN0eGF0dHIJCTIzMworI2RlZmluZSBfX05SX2lhMzJfZmxpc3R4YXR0cgkJMjM0CisjZGVmaW5lIF9fTlJfaWEzMl9yZW1vdmV4YXR0cgkyMzUKKyNkZWZpbmUgX19OUl9pYTMyX2xyZW1vdmV4YXR0cgkyMzYKKyNkZWZpbmUgX19OUl9pYTMyX2ZyZW1vdmV4YXR0cgkyMzcKKyNkZWZpbmUgX19OUl9pYTMyX3RraWxsCQkyMzgKKyNkZWZpbmUgX19OUl9pYTMyX3NlbmRmaWxlNjQJCTIzOQorI2RlZmluZSBfX05SX2lhMzJfZnV0ZXgJCTI0MAorI2RlZmluZSBfX05SX2lhMzJfc2NoZWRfc2V0YWZmaW5pdHkJMjQxCisjZGVmaW5lIF9fTlJfaWEzMl9zY2hlZF9nZXRhZmZpbml0eQkyNDIKKyNkZWZpbmUgX19OUl9pYTMyX3NldF90aHJlYWRfYXJlYSAgIDI0MworI2RlZmluZSBfX05SX2lhMzJfZ2V0X3RocmVhZF9hcmVhCTI0NAorI2RlZmluZSBfX05SX2lhMzJfaW9fc2V0dXAJCTI0NQorI2RlZmluZSBfX05SX2lhMzJfaW9fZGVzdHJveQkJMjQ2CisjZGVmaW5lIF9fTlJfaWEzMl9pb19nZXRldmVudHMJMjQ3CisjZGVmaW5lIF9fTlJfaWEzMl9pb19zdWJtaXQJCTI0OAorI2RlZmluZSBfX05SX2lhMzJfaW9fY2FuY2VsCQkyNDkKKyNkZWZpbmUgX19OUl9pYTMyX2V4aXRfZ3JvdXAJCTI1MgorI2RlZmluZSBfX05SX2lhMzJfbG9va3VwX2Rjb29raWUJMjUzCisjZGVmaW5lIF9fTlJfaWEzMl9zeXNfZXBvbGxfY3JlYXRlCTI1NAorI2RlZmluZSBfX05SX2lhMzJfc3lzX2Vwb2xsX2N0bAkyNTUKKyNkZWZpbmUgX19OUl9pYTMyX3N5c19lcG9sbF93YWl0CTI1NgorI2RlZmluZSBfX05SX2lhMzJfcmVtYXBfZmlsZV9wYWdlcwkyNTcKKyNkZWZpbmUgX19OUl9pYTMyX3NldF90aWRfYWRkcmVzcwkyNTgKKyNkZWZpbmUgX19OUl9pYTMyX3RpbWVyX2NyZWF0ZQkJMjU5CisjZGVmaW5lIF9fTlJfaWEzMl90aW1lcl9zZXR0aW1lCShfX05SX2lhMzJfdGltZXJfY3JlYXRlKzEpCisjZGVmaW5lIF9fTlJfaWEzMl90aW1lcl9nZXR0aW1lCShfX05SX2lhMzJfdGltZXJfY3JlYXRlKzIpCisjZGVmaW5lIF9fTlJfaWEzMl90aW1lcl9nZXRvdmVycnVuCShfX05SX2lhMzJfdGltZXJfY3JlYXRlKzMpCisjZGVmaW5lIF9fTlJfaWEzMl90aW1lcl9kZWxldGUJKF9fTlJfaWEzMl90aW1lcl9jcmVhdGUrNCkKKyNkZWZpbmUgX19OUl9pYTMyX2Nsb2NrX3NldHRpbWUJKF9fTlJfaWEzMl90aW1lcl9jcmVhdGUrNSkKKyNkZWZpbmUgX19OUl9pYTMyX2Nsb2NrX2dldHRpbWUJKF9fTlJfaWEzMl90aW1lcl9jcmVhdGUrNikKKyNkZWZpbmUgX19OUl9pYTMyX2Nsb2NrX2dldHJlcwkoX19OUl9pYTMyX3RpbWVyX2NyZWF0ZSs3KQorI2RlZmluZSBfX05SX2lhMzJfY2xvY2tfbmFub3NsZWVwCShfX05SX2lhMzJfdGltZXJfY3JlYXRlKzgpCisjZGVmaW5lIF9fTlJfaWEzMl9zdGF0ZnM2NAkJMjY4CisjZGVmaW5lIF9fTlJfaWEzMl9mc3RhdGZzNjQJCTI2OQorI2RlZmluZSBfX05SX2lhMzJfdGdraWxsCQkyNzAKKyNkZWZpbmUgX19OUl9pYTMyX3V0aW1lcwkJMjcxCisjZGVmaW5lIF9fTlJfaWEzMl9mYWR2aXNlNjRfNjQJCTI3MgorI2RlZmluZSBfX05SX2lhMzJfdnNlcnZlcgkJMjczCisjZGVmaW5lIF9fTlJfaWEzMl9tYmluZAkJMjc0CisjZGVmaW5lIF9fTlJfaWEzMl9nZXRfbWVtcG9saWN5CTI3NQorI2RlZmluZSBfX05SX2lhMzJfc2V0X21lbXBvbGljeQkyNzYKKyNkZWZpbmUgX19OUl9pYTMyX21xX29wZW4gCQkyNzcKKyNkZWZpbmUgX19OUl9pYTMyX21xX3VubGluawkJKF9fTlJfaWEzMl9tcV9vcGVuKzEpCisjZGVmaW5lIF9fTlJfaWEzMl9tcV90aW1lZHNlbmQJKF9fTlJfaWEzMl9tcV9vcGVuKzIpCisjZGVmaW5lIF9fTlJfaWEzMl9tcV90aW1lZHJlY2VpdmUJKF9fTlJfaWEzMl9tcV9vcGVuKzMpCisjZGVmaW5lIF9fTlJfaWEzMl9tcV9ub3RpZnkJCShfX05SX2lhMzJfbXFfb3Blbis0KQorI2RlZmluZSBfX05SX2lhMzJfbXFfZ2V0c2V0YXR0cgkoX19OUl9pYTMyX21xX29wZW4rNSkKKyNkZWZpbmUgX19OUl9pYTMyX2tleGVjCQkyODMKKyNkZWZpbmUgX19OUl9pYTMyX3dhaXRpZAkJMjg0CisvKiAjZGVmaW5lIF9fTlJfc3lzX3NldGFsdHJvb3QJMjg1ICovCisjZGVmaW5lIF9fTlJfaWEzMl9hZGRfa2V5CQkyODYKKyNkZWZpbmUgX19OUl9pYTMyX3JlcXVlc3Rfa2V5CTI4NworI2RlZmluZSBfX05SX2lhMzJfa2V5Y3RsCQkyODgKKworI2RlZmluZSBJQTMyX05SX3N5c2NhbGxzIDI5MAkvKiBtdXN0IGJlID4gdGhhbiBiaWdnZXN0IHN5c2NhbGwhICovCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl82NF9JQTMyX1VOSVNURF9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2lkZS5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2lkZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjZWYwZWYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvaWRlLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGFzbS1pMzg2L2lkZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2lvLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDIwMjcwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L2lvLmgKQEAgLTAsMCArMSwzNDEgQEAKKyNpZm5kZWYgX0FTTV9JT19ICisjZGVmaW5lIF9BU01fSU9fSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKy8qCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGRlZmluaXRpb25zIGZvciB0aGUgeDg2IElPIGluc3RydWN0aW9ucworICogaW5iL2ludy9pbmwvb3V0Yi9vdXR3L291dGwgYW5kIHRoZSAic3RyaW5nIHZlcnNpb25zIiBvZiB0aGUgc2FtZQorICogKGluc2IvaW5zdy9pbnNsL291dHNiL291dHN3L291dHNsKS4gWW91IGNhbiBhbHNvIHVzZSAicGF1c2luZyIKKyAqIHZlcnNpb25zIG9mIHRoZSBzaW5nbGUtSU8gaW5zdHJ1Y3Rpb25zIChpbmJfcC9pbndfcC8uLikuCisgKgorICogVGhpcyBmaWxlIGlzIG5vdCBtZWFudCB0byBiZSBvYmZ1c2NhdGluZzogaXQncyBqdXN0IGNvbXBsaWNhdGVkCisgKiB0byAoYSkgaGFuZGxlIGl0IGFsbCBpbiBhIHdheSB0aGF0IG1ha2VzIGdjYyBhYmxlIHRvIG9wdGltaXplIGl0CisgKiBhcyB3ZWxsIGFzIHBvc3NpYmxlIGFuZCAoYikgdHJ5aW5nIHRvIGF2b2lkIHdyaXRpbmcgdGhlIHNhbWUgdGhpbmcKKyAqIG92ZXIgYW5kIG92ZXIgYWdhaW4gd2l0aCBzbGlnaHQgdmFyaWF0aW9ucyBhbmQgcG9zc2libHkgbWFraW5nIGEKKyAqIG1pc3Rha2Ugc29tZXdoZXJlLgorICovCisKKy8qCisgKiBUaGFua3MgdG8gSmFtZXMgdmFuIEFydHNkYWxlbiBmb3IgYSBiZXR0ZXIgdGltaW5nLWZpeCB0aGFuCisgKiB0aGUgdHdvIHNob3J0IGp1bXBzOiB1c2luZyBvdXRiJ3MgdG8gYSBub25leGlzdGVudCBwb3J0IHNlZW1zCisgKiB0byBndWFyYW50ZWUgYmV0dGVyIHRpbWluZ3MgZXZlbiBvbiBmYXN0IG1hY2hpbmVzLgorICoKKyAqIE9uIHRoZSBvdGhlciBoYW5kLCBJJ2QgbGlrZSB0byBiZSBzdXJlIG9mIGEgbm9uLWV4aXN0ZW50IHBvcnQ6CisgKiBJIGZlZWwgYSBiaXQgdW5zYWZlIGFib3V0IHVzaW5nIDB4ODAgKHNob3VsZCBiZSBzYWZlLCB0aG91Z2gpCisgKgorICoJCUxpbnVzCisgKi8KKworIC8qCisgICogIEJpdCBzaW1wbGlmaWVkIGFuZCBvcHRpbWl6ZWQgYnkgSmFuIEh1Ymlja2EKKyAgKiAgU3VwcG9ydCBvZiBCSUdNRU0gYWRkZWQgYnkgR2VyaGFyZCBXaWNoZXJ0LCBTaWVtZW5zIEFHLCBKdWx5IDE5OTkuCisgICoKKyAgKiAgaXNhX21lbXNldF9pbywgaXNhX21lbWNweV9mcm9taW8sIGlzYV9tZW1jcHlfdG9pbyBhZGRlZCwKKyAgKiAgaXNhX3JlYWRbd2xdIGFuZCBpc2Ffd3JpdGVbd2xdIGZpeGVkCisgICogIC0gQXJuYWxkbyBDYXJ2YWxobyBkZSBNZWxvIDxhY21lQGNvbmVjdGl2YS5jb20uYnI+CisgICovCisKKyNkZWZpbmUgX19TTE9XX0RPV05fSU8gIlxub3V0YiAlJWFsLCQweDgwIgorCisjaWZkZWYgUkVBTExZX1NMT1dfSU8KKyNkZWZpbmUgX19GVUxMX1NMT1dfRE9XTl9JTyBfX1NMT1dfRE9XTl9JTyBfX1NMT1dfRE9XTl9JTyBfX1NMT1dfRE9XTl9JTyBfX1NMT1dfRE9XTl9JTworI2Vsc2UKKyNkZWZpbmUgX19GVUxMX1NMT1dfRE9XTl9JTyBfX1NMT1dfRE9XTl9JTworI2VuZGlmCisKKy8qCisgKiBUYWxrIGFib3V0IG1pc3VzaW5nIG1hY3Jvcy4uCisgKi8KKyNkZWZpbmUgX19PVVQxKHMseCkgXAorZXh0ZXJuIGlubGluZSB2b2lkIG91dCMjcyh1bnNpZ25lZCB4IHZhbHVlLCB1bnNpZ25lZCBzaG9ydCBwb3J0KSB7CisKKyNkZWZpbmUgX19PVVQyKHMsczEsczIpIFwKK19fYXNtX18gX192b2xhdGlsZV9fICgib3V0IiAjcyAiICUiIHMxICIwLCUiIHMyICIxIgorCisjZGVmaW5lIF9fT1VUKHMsczEseCkgXAorX19PVVQxKHMseCkgX19PVVQyKHMsczEsInciKSA6IDogImEiICh2YWx1ZSksICJOZCIgKHBvcnQpKTsgfSBcCitfX09VVDEocyMjX3AseCkgX19PVVQyKHMsczEsInciKSBfX0ZVTExfU0xPV19ET1dOX0lPIDogOiAiYSIgKHZhbHVlKSwgIk5kIiAocG9ydCkpO30gXAorCisjZGVmaW5lIF9fSU4xKHMpIFwKK2V4dGVybiBpbmxpbmUgUkVUVVJOX1RZUEUgaW4jI3ModW5zaWduZWQgc2hvcnQgcG9ydCkgeyBSRVRVUk5fVFlQRSBfdjsKKworI2RlZmluZSBfX0lOMihzLHMxLHMyKSBcCitfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImluIiAjcyAiICUiIHMyICIxLCUiIHMxICIwIgorCisjZGVmaW5lIF9fSU4ocyxzMSxpLi4uKSBcCitfX0lOMShzKSBfX0lOMihzLHMxLCJ3IikgOiAiPWEiIChfdikgOiAiTmQiIChwb3J0KSAsIyNpICk7IHJldHVybiBfdjsgfSBcCitfX0lOMShzIyNfcCkgX19JTjIocyxzMSwidyIpIF9fRlVMTF9TTE9XX0RPV05fSU8gOiAiPWEiIChfdikgOiAiTmQiIChwb3J0KSAsIyNpICk7IHJldHVybiBfdjsgfSBcCisKKyNkZWZpbmUgX19JTlMocykgXAorZXh0ZXJuIGlubGluZSB2b2lkIGlucyMjcyh1bnNpZ25lZCBzaG9ydCBwb3J0LCB2b2lkICogYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCkgXAoreyBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInJlcCA7IGlucyIgI3MgXAorOiAiPUQiIChhZGRyKSwgIj1jIiAoY291bnQpIDogImQiIChwb3J0KSwiMCIgKGFkZHIpLCIxIiAoY291bnQpKTsgfQorCisjZGVmaW5lIF9fT1VUUyhzKSBcCitleHRlcm4gaW5saW5lIHZvaWQgb3V0cyMjcyh1bnNpZ25lZCBzaG9ydCBwb3J0LCBjb25zdCB2b2lkICogYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCkgXAoreyBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInJlcCA7IG91dHMiICNzIFwKKzogIj1TIiAoYWRkciksICI9YyIgKGNvdW50KSA6ICJkIiAocG9ydCksIjAiIChhZGRyKSwiMSIgKGNvdW50KSk7IH0KKworI2RlZmluZSBSRVRVUk5fVFlQRSB1bnNpZ25lZCBjaGFyCitfX0lOKGIsIiIpCisjdW5kZWYgUkVUVVJOX1RZUEUKKyNkZWZpbmUgUkVUVVJOX1RZUEUgdW5zaWduZWQgc2hvcnQKK19fSU4odywiIikKKyN1bmRlZiBSRVRVUk5fVFlQRQorI2RlZmluZSBSRVRVUk5fVFlQRSB1bnNpZ25lZCBpbnQKK19fSU4obCwiIikKKyN1bmRlZiBSRVRVUk5fVFlQRQorCitfX09VVChiLCJiIixjaGFyKQorX19PVVQodywidyIsc2hvcnQpCitfX09VVChsLCxpbnQpCisKK19fSU5TKGIpCitfX0lOUyh3KQorX19JTlMobCkKKworX19PVVRTKGIpCitfX09VVFModykKK19fT1VUUyhsKQorCisjZGVmaW5lIElPX1NQQUNFX0xJTUlUIDB4ZmZmZgorCisjaWYgZGVmaW5lZChfX0tFUk5FTF9fKSAmJiBfX3g4Nl82NF9fCisKKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisKKyNpZm5kZWYgX19pMzg2X18KKy8qCisgKiBDaGFuZ2UgdmlydHVhbCBhZGRyZXNzZXMgdG8gcGh5c2ljYWwgYWRkcmVzc2VzIGFuZCB2di4KKyAqIFRoZXNlIGFyZSBwcmV0dHkgdHJpdmlhbAorICovCitleHRlcm4gaW5saW5lIHVuc2lnbmVkIGxvbmcgdmlydF90b19waHlzKHZvbGF0aWxlIHZvaWQgKiBhZGRyZXNzKQoreworCXJldHVybiBfX3BhKGFkZHJlc3MpOworfQorCitleHRlcm4gaW5saW5lIHZvaWQgKiBwaHlzX3RvX3ZpcnQodW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCXJldHVybiBfX3ZhKGFkZHJlc3MpOworfQorI2VuZGlmCisKKy8qCisgKiBDaGFuZ2UgInN0cnVjdCBwYWdlIiB0byBwaHlzaWNhbCBhZGRyZXNzLgorICovCisjaWZkZWYgQ09ORklHX0RJU0NPTlRJR01FTQorI2luY2x1ZGUgPGFzbS9tbXpvbmUuaD4KKyNkZWZpbmUgcGFnZV90b19waHlzKHBhZ2UpICAgICgoZG1hX2FkZHJfdClwYWdlX3RvX3BmbihwYWdlKSA8PCBQQUdFX1NISUZUKQorI2Vsc2UKKyNkZWZpbmUgcGFnZV90b19waHlzKHBhZ2UpCSgocGFnZSAtIG1lbV9tYXApIDw8IFBBR0VfU0hJRlQpCisjZW5kaWYKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2lvbWFwLmg+CisKK2V4dGVybiB2b2lkIF9faW9tZW0gKl9faW9yZW1hcCh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKKworZXh0ZXJuIGlubGluZSB2b2lkIF9faW9tZW0gKiBpb3JlbWFwICh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXJldHVybiBfX2lvcmVtYXAob2Zmc2V0LCBzaXplLCAwKTsKK30KKworLyoKKyAqIFRoaXMgb25lIG1hcHMgaGlnaCBhZGRyZXNzIGRldmljZSBtZW1vcnkgYW5kIHR1cm5zIG9mZiBjYWNoaW5nIGZvciB0aGF0IGFyZWEuCisgKiBpdCdzIHVzZWZ1bCBpZiBzb21lIGNvbnRyb2wgcmVnaXN0ZXJzIGFyZSBpbiBzdWNoIGFuIGFyZWEgYW5kIHdyaXRlIGNvbWJpbmluZworICogb3IgcmVhZCBjYWNoaW5nIGlzIG5vdCBkZXNpcmFibGU6CisgKi8KK2V4dGVybiB2b2lkIF9faW9tZW0gKiBpb3JlbWFwX25vY2FjaGUgKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUpOworZXh0ZXJuIHZvaWQgaW91bm1hcCh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpOworCisvKgorICogSVNBIEkvTyBidXMgbWVtb3J5IGFkZHJlc3NlcyBhcmUgMToxIHdpdGggdGhlIHBoeXNpY2FsIGFkZHJlc3MuCisgKi8KKyNkZWZpbmUgaXNhX3ZpcnRfdG9fYnVzIHZpcnRfdG9fcGh5cworI2RlZmluZSBpc2FfcGFnZV90b19idXMgcGFnZV90b19waHlzCisjZGVmaW5lIGlzYV9idXNfdG9fdmlydCBwaHlzX3RvX3ZpcnQKKworLyoKKyAqIEhvd2V2ZXIgUENJIG9uZXMgYXJlIG5vdCBuZWNlc3NhcmlseSAxOjEgYW5kIHRoZXJlZm9yZSB0aGVzZSBpbnRlcmZhY2VzCisgKiBhcmUgZm9yYmlkZGVuIGluIHBvcnRhYmxlIFBDSSBkcml2ZXJzLgorICoKKyAqIEFsbG93IHRoZW0gb24geDg2IGZvciBsZWdhY3kgZHJpdmVycywgdGhvdWdoLgorICovCisjZGVmaW5lIHZpcnRfdG9fYnVzIHZpcnRfdG9fcGh5cworI2RlZmluZSBidXNfdG9fdmlydCBwaHlzX3RvX3ZpcnQKKworLyoKKyAqIHJlYWRYL3dyaXRlWCgpIGFyZSB1c2VkIHRvIGFjY2VzcyBtZW1vcnkgbWFwcGVkIGRldmljZXMuIE9uIHNvbWUKKyAqIGFyY2hpdGVjdHVyZXMgdGhlIG1lbW9yeSBtYXBwZWQgSU8gc3R1ZmYgbmVlZHMgdG8gYmUgYWNjZXNzZWQKKyAqIGRpZmZlcmVudGx5LiBPbiB0aGUgeDg2IGFyY2hpdGVjdHVyZSwgd2UganVzdCByZWFkL3dyaXRlIHRoZQorICogbWVtb3J5IGxvY2F0aW9uIGRpcmVjdGx5LgorICovCisKK3N0YXRpYyBpbmxpbmUgX191OCBfX3JlYWRiKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlyZXR1cm4gKihfX2ZvcmNlIHZvbGF0aWxlIF9fdTggKilhZGRyOworfQorc3RhdGljIGlubGluZSBfX3UxNiBfX3JlYWR3KGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlyZXR1cm4gKihfX2ZvcmNlIHZvbGF0aWxlIF9fdTE2ICopYWRkcjsKK30KK3N0YXRpYyBpbmxpbmUgX191MzIgX19yZWFkbChjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJcmV0dXJuICooX19mb3JjZSB2b2xhdGlsZSBfX3UzMiAqKWFkZHI7Cit9CitzdGF0aWMgaW5saW5lIF9fdTY0IF9fcmVhZHEoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCXJldHVybiAqKF9fZm9yY2Ugdm9sYXRpbGUgX191NjQgKilhZGRyOworfQorI2RlZmluZSByZWFkYih4KSBfX3JlYWRiKHgpCisjZGVmaW5lIHJlYWR3KHgpIF9fcmVhZHcoeCkKKyNkZWZpbmUgcmVhZGwoeCkgX19yZWFkbCh4KQorI2RlZmluZSByZWFkcSh4KSBfX3JlYWRxKHgpCisjZGVmaW5lIHJlYWRiX3JlbGF4ZWQoYSkgcmVhZGIoYSkKKyNkZWZpbmUgcmVhZHdfcmVsYXhlZChhKSByZWFkdyhhKQorI2RlZmluZSByZWFkbF9yZWxheGVkKGEpIHJlYWRsKGEpCisjZGVmaW5lIHJlYWRxX3JlbGF4ZWQoYSkgcmVhZHEoYSkKKyNkZWZpbmUgX19yYXdfcmVhZGIgcmVhZGIKKyNkZWZpbmUgX19yYXdfcmVhZHcgcmVhZHcKKyNkZWZpbmUgX19yYXdfcmVhZGwgcmVhZGwKKyNkZWZpbmUgX19yYXdfcmVhZHEgcmVhZHEKKworI2RlZmluZSBtbWlvd2IoKQorCisjaWZkZWYgQ09ORklHX1VOT1JERVJFRF9JTworc3RhdGljIGlubGluZSB2b2lkIF9fd3JpdGVsKF9fdTMyIHZhbCwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCXZvbGF0aWxlIF9fdTMyIF9faW9tZW0gKnRhcmdldCA9IGFkZHI7CisJYXNtIHZvbGF0aWxlKCJtb3ZudGkgJTEsJTAiCisJCSAgICAgOiAiPW0iICgqdGFyZ2V0KQorCQkgICAgIDogInIiICh2YWwpIDogIm1lbW9yeSIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX193cml0ZXEoX191NjQgdmFsLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJdm9sYXRpbGUgX191NjQgX19pb21lbSAqdGFyZ2V0ID0gYWRkcjsKKwlhc20gdm9sYXRpbGUoIm1vdm50aSAlMSwlMCIKKwkJICAgICA6ICI9bSIgKCp0YXJnZXQpCisJCSAgICAgOiAiciIgKHZhbCkgOiAibWVtb3J5Iik7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIF9fd3JpdGVsKF9fdTMyIGIsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwkqKF9fZm9yY2Ugdm9sYXRpbGUgX191MzIgKilhZGRyID0gYjsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3dyaXRlcShfX3U2NCBiLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJKihfX2ZvcmNlIHZvbGF0aWxlIF9fdTY0ICopYWRkciA9IGI7Cit9CisjZW5kaWYKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3dyaXRlYihfX3U4IGIsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwkqKF9fZm9yY2Ugdm9sYXRpbGUgX191OCAqKWFkZHIgPSBiOworfQorc3RhdGljIGlubGluZSB2b2lkIF9fd3JpdGV3KF9fdTE2IGIsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwkqKF9fZm9yY2Ugdm9sYXRpbGUgX191MTYgKilhZGRyID0gYjsKK30KKyNkZWZpbmUgd3JpdGVxKHZhbCxhZGRyKSBfX3dyaXRlcSgodmFsKSwoYWRkcikpCisjZGVmaW5lIHdyaXRlbCh2YWwsYWRkcikgX193cml0ZWwoKHZhbCksKGFkZHIpKQorI2RlZmluZSB3cml0ZXcodmFsLGFkZHIpIF9fd3JpdGV3KCh2YWwpLChhZGRyKSkKKyNkZWZpbmUgd3JpdGViKHZhbCxhZGRyKSBfX3dyaXRlYigodmFsKSwoYWRkcikpCisjZGVmaW5lIF9fcmF3X3dyaXRlYiB3cml0ZWIKKyNkZWZpbmUgX19yYXdfd3JpdGV3IHdyaXRldworI2RlZmluZSBfX3Jhd193cml0ZWwgd3JpdGVsCisjZGVmaW5lIF9fcmF3X3dyaXRlcSB3cml0ZXEKKwordm9pZCBfX21lbWNweV9mcm9taW8odm9pZCosdW5zaWduZWQgbG9uZyx1bnNpZ25lZCk7Cit2b2lkIF9fbWVtY3B5X3RvaW8odW5zaWduZWQgbG9uZyxjb25zdCB2b2lkKix1bnNpZ25lZCk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtZW1jcHlfZnJvbWlvKHZvaWQgKnRvLCBjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmZyb20sIHVuc2lnbmVkIGxlbikKK3sKKwlfX21lbWNweV9mcm9taW8odG8sKHVuc2lnbmVkIGxvbmcpZnJvbSxsZW4pOworfQorc3RhdGljIGlubGluZSB2b2lkIG1lbWNweV90b2lvKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxlbikKK3sKKwlfX21lbWNweV90b2lvKCh1bnNpZ25lZCBsb25nKXRvLGZyb20sbGVuKTsKK30KKwordm9pZCBtZW1zZXRfaW8odm9sYXRpbGUgdm9pZCBfX2lvbWVtICphLCBpbnQgYiwgc2l6ZV90IGMpOworCisvKgorICogSVNBIHNwYWNlIGlzICdhbHdheXMgbWFwcGVkJyBvbiBhIHR5cGljYWwgeDg2IHN5c3RlbSwgbm8gbmVlZCB0bworICogZXhwbGljaXRseSBpb3JlbWFwKCkgaXQuIFRoZSBmYWN0IHRoYXQgdGhlIElTQSBJTyBzcGFjZSBpcyBtYXBwZWQKKyAqIHRvIFBBR0VfT0ZGU0VUIGlzIHB1cmUgY29pbmNpZGVuY2UgLSBpdCBkb2VzIG5vdCBtZWFuIElTQSB2YWx1ZXMKKyAqIGFyZSBwaHlzaWNhbCBhZGRyZXNzZXMuIFRoZSBmb2xsb3dpbmcgY29uc3RhbnQgcG9pbnRlciBjYW4gYmUKKyAqIHVzZWQgYXMgdGhlIElPLWFyZWEgcG9pbnRlciAoaXQgY2FuIGJlIGlvdW5tYXBwZWQgYXMgd2VsbCwgc28gdGhlCisgKiBhbmFsb2d5IHdpdGggUENJIGlzIHF1aXRlIGxhcmdlKToKKyAqLworI2RlZmluZSBfX0lTQV9JT19iYXNlICgoY2hhciBfX2lvbWVtICopKFBBR0VfT0ZGU0VUKSkKKworI2RlZmluZSBpc2FfcmVhZGIoYSkgcmVhZGIoX19JU0FfSU9fYmFzZSArIChhKSkKKyNkZWZpbmUgaXNhX3JlYWR3KGEpIHJlYWR3KF9fSVNBX0lPX2Jhc2UgKyAoYSkpCisjZGVmaW5lIGlzYV9yZWFkbChhKSByZWFkbChfX0lTQV9JT19iYXNlICsgKGEpKQorI2RlZmluZSBpc2Ffd3JpdGViKGIsYSkgd3JpdGViKGIsX19JU0FfSU9fYmFzZSArIChhKSkKKyNkZWZpbmUgaXNhX3dyaXRldyh3LGEpIHdyaXRldyh3LF9fSVNBX0lPX2Jhc2UgKyAoYSkpCisjZGVmaW5lIGlzYV93cml0ZWwobCxhKSB3cml0ZWwobCxfX0lTQV9JT19iYXNlICsgKGEpKQorI2RlZmluZSBpc2FfbWVtc2V0X2lvKGEsYixjKQkJbWVtc2V0X2lvKF9fSVNBX0lPX2Jhc2UgKyAoYSksKGIpLChjKSkKKyNkZWZpbmUgaXNhX21lbWNweV9mcm9taW8oYSxiLGMpCW1lbWNweV9mcm9taW8oKGEpLF9fSVNBX0lPX2Jhc2UgKyAoYiksKGMpKQorI2RlZmluZSBpc2FfbWVtY3B5X3RvaW8oYSxiLGMpCQltZW1jcHlfdG9pbyhfX0lTQV9JT19iYXNlICsgKGEpLChiKSwoYykpCisKKworLyoKKyAqIEFnYWluLCB4ODYtNjQgZG9lcyBub3QgcmVxdWlyZSBtZW0gSU8gc3BlY2lmaWMgZnVuY3Rpb24uCisgKi8KKworI2RlZmluZSBldGhfaW9fY29weV9hbmRfc3VtKGEsYixjLGQpCQlldGhfY29weV9hbmRfc3VtKChhKSwodm9pZCAqKShiKSwoYyksKGQpKQorI2RlZmluZSBpc2FfZXRoX2lvX2NvcHlfYW5kX3N1bShhLGIsYyxkKQlldGhfY29weV9hbmRfc3VtKChhKSwodm9pZCAqKShfX0lTQV9JT19iYXNlICsgKGIpKSwoYyksKGQpKQorCisvKioKKyAqCWNoZWNrX3NpZ25hdHVyZQkJLQlmaW5kIEJJT1Mgc2lnbmF0dXJlcworICoJQGlvX2FkZHI6IG1taW8gYWRkcmVzcyB0byBjaGVjayAKKyAqCUBzaWduYXR1cmU6ICBzaWduYXR1cmUgYmxvY2sKKyAqCUBsZW5ndGg6IGxlbmd0aCBvZiBzaWduYXR1cmUKKyAqCisgKglQZXJmb3JtIGEgc2lnbmF0dXJlIGNvbXBhcmlzb24gd2l0aCB0aGUgbW1pbyBhZGRyZXNzIGlvX2FkZHIuIFRoaXMKKyAqCWFkZHJlc3Mgc2hvdWxkIGhhdmUgYmVlbiBvYnRhaW5lZCBieSBpb3JlbWFwLgorICoJUmV0dXJucyAxIG9uIGEgbWF0Y2guCisgKi8KKyAKK3N0YXRpYyBpbmxpbmUgaW50IGNoZWNrX3NpZ25hdHVyZSh2b2lkIF9faW9tZW0gKmlvX2FkZHIsCisJY29uc3QgdW5zaWduZWQgY2hhciAqc2lnbmF0dXJlLCBpbnQgbGVuZ3RoKQoreworCWludCByZXR2YWwgPSAwOworCWRvIHsKKwkJaWYgKHJlYWRiKGlvX2FkZHIpICE9ICpzaWduYXR1cmUpCisJCQlnb3RvIG91dDsKKwkJaW9fYWRkcisrOworCQlzaWduYXR1cmUrKzsKKwkJbGVuZ3RoLS07CisJfSB3aGlsZSAobGVuZ3RoKTsKKwlyZXR2YWwgPSAxOworb3V0OgorCXJldHVybiByZXR2YWw7Cit9CisKKy8qIE5vdGhpbmcgdG8gZG8gKi8KKworI2RlZmluZSBkbWFfY2FjaGVfaW52KF9zdGFydCxfc2l6ZSkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZG1hX2NhY2hlX3diYWNrKF9zdGFydCxfc2l6ZSkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZG1hX2NhY2hlX3diYWNrX2ludihfc3RhcnQsX3NpemUpCWRvIHsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBmbHVzaF93cml0ZV9idWZmZXJzKCkgCisKK2V4dGVybiBpbnQgaW9tbXVfYmlvX21lcmdlOworI2RlZmluZSBCSU9fVk1FUkdFX0JPVU5EQVJZIGlvbW11X2Jpb19tZXJnZQorCisvKgorICogQ29udmVydCBhIHBoeXNpY2FsIHBvaW50ZXIgdG8gYSB2aXJ0dWFsIGtlcm5lbCBwb2ludGVyIGZvciAvZGV2L21lbQorICogYWNjZXNzCisgKi8KKyNkZWZpbmUgeGxhdGVfZGV2X21lbV9wdHIocCkJX192YShwKQorCisvKgorICogQ29udmVydCBhIHZpcnR1YWwgY2FjaGVkIHBvaW50ZXIgdG8gYW4gdW5jYWNoZWQgcG9pbnRlcgorICovCisjZGVmaW5lIHhsYXRlX2Rldl9rbWVtX3B0cihwKQlwCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2lvX2FwaWMuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9pb19hcGljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2VmYzkzMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9pb19hcGljLmgKQEAgLTAsMCArMSwyMjEgQEAKKyNpZm5kZWYgX19BU01fSU9fQVBJQ19ICisjZGVmaW5lIF9fQVNNX0lPX0FQSUNfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21wc3BlYy5oPgorCisvKgorICogSW50ZWwgSU8tQVBJQyBzdXBwb3J0IGZvciBTTVAgYW5kIFVQIHN5c3RlbXMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwIEluZ28gTW9sbmFyCisgKi8KKworI2lmZGVmIENPTkZJR19YODZfSU9fQVBJQworCisjaWZkZWYgQ09ORklHX1BDSV9NU0kKK3N0YXRpYyBpbmxpbmUgaW50IHVzZV9wY2lfdmVjdG9yKHZvaWQpCXtyZXR1cm4gMTt9CitzdGF0aWMgaW5saW5lIHZvaWQgZGlzYWJsZV9lZGdlX2lvYXBpY192ZWN0b3IodW5zaWduZWQgaW50IHZlY3RvcikgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgbWFza19hbmRfYWNrX2xldmVsX2lvYXBpY192ZWN0b3IodW5zaWduZWQgaW50IHZlY3RvcikgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgZW5kX2VkZ2VfaW9hcGljX3ZlY3RvciAodW5zaWduZWQgaW50IHZlY3RvcikgeyB9CisjZGVmaW5lIHN0YXJ0dXBfbGV2ZWxfaW9hcGljCXN0YXJ0dXBfbGV2ZWxfaW9hcGljX3ZlY3RvcgorI2RlZmluZSBzaHV0ZG93bl9sZXZlbF9pb2FwaWMJbWFza19JT19BUElDX3ZlY3RvcgorI2RlZmluZSBlbmFibGVfbGV2ZWxfaW9hcGljCXVubWFza19JT19BUElDX3ZlY3RvcgorI2RlZmluZSBkaXNhYmxlX2xldmVsX2lvYXBpYwltYXNrX0lPX0FQSUNfdmVjdG9yCisjZGVmaW5lIG1hc2tfYW5kX2Fja19sZXZlbF9pb2FwaWMgbWFza19hbmRfYWNrX2xldmVsX2lvYXBpY192ZWN0b3IKKyNkZWZpbmUgZW5kX2xldmVsX2lvYXBpYwllbmRfbGV2ZWxfaW9hcGljX3ZlY3RvcgorI2RlZmluZSBzZXRfaW9hcGljX2FmZmluaXR5CXNldF9pb2FwaWNfYWZmaW5pdHlfdmVjdG9yCisKKyNkZWZpbmUgc3RhcnR1cF9lZGdlX2lvYXBpYyAJc3RhcnR1cF9lZGdlX2lvYXBpY192ZWN0b3IKKyNkZWZpbmUgc2h1dGRvd25fZWRnZV9pb2FwaWMgCWRpc2FibGVfZWRnZV9pb2FwaWNfdmVjdG9yCisjZGVmaW5lIGVuYWJsZV9lZGdlX2lvYXBpYyAJdW5tYXNrX0lPX0FQSUNfdmVjdG9yCisjZGVmaW5lIGRpc2FibGVfZWRnZV9pb2FwaWMgCWRpc2FibGVfZWRnZV9pb2FwaWNfdmVjdG9yCisjZGVmaW5lIGFja19lZGdlX2lvYXBpYyAJYWNrX2VkZ2VfaW9hcGljX3ZlY3RvcgorI2RlZmluZSBlbmRfZWRnZV9pb2FwaWMgCWVuZF9lZGdlX2lvYXBpY192ZWN0b3IKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCB1c2VfcGNpX3ZlY3Rvcih2b2lkKQl7cmV0dXJuIDA7fQorc3RhdGljIGlubGluZSB2b2lkIGRpc2FibGVfZWRnZV9pb2FwaWNfaXJxKHVuc2lnbmVkIGludCBpcnEpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIG1hc2tfYW5kX2Fja19sZXZlbF9pb2FwaWNfaXJxKHVuc2lnbmVkIGludCBpcnEpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIGVuZF9lZGdlX2lvYXBpY19pcnEgKHVuc2lnbmVkIGludCBpcnEpIHsgfQorI2RlZmluZSBzdGFydHVwX2xldmVsX2lvYXBpYwlzdGFydHVwX2xldmVsX2lvYXBpY19pcnEKKyNkZWZpbmUgc2h1dGRvd25fbGV2ZWxfaW9hcGljCW1hc2tfSU9fQVBJQ19pcnEKKyNkZWZpbmUgZW5hYmxlX2xldmVsX2lvYXBpYwl1bm1hc2tfSU9fQVBJQ19pcnEKKyNkZWZpbmUgZGlzYWJsZV9sZXZlbF9pb2FwaWMJbWFza19JT19BUElDX2lycQorI2RlZmluZSBtYXNrX2FuZF9hY2tfbGV2ZWxfaW9hcGljIG1hc2tfYW5kX2Fja19sZXZlbF9pb2FwaWNfaXJxCisjZGVmaW5lIGVuZF9sZXZlbF9pb2FwaWMJZW5kX2xldmVsX2lvYXBpY19pcnEKKyNkZWZpbmUgc2V0X2lvYXBpY19hZmZpbml0eQlzZXRfaW9hcGljX2FmZmluaXR5X2lycQorCisjZGVmaW5lIHN0YXJ0dXBfZWRnZV9pb2FwaWMgCXN0YXJ0dXBfZWRnZV9pb2FwaWNfaXJxCisjZGVmaW5lIHNodXRkb3duX2VkZ2VfaW9hcGljIAlkaXNhYmxlX2VkZ2VfaW9hcGljX2lycQorI2RlZmluZSBlbmFibGVfZWRnZV9pb2FwaWMgCXVubWFza19JT19BUElDX2lycQorI2RlZmluZSBkaXNhYmxlX2VkZ2VfaW9hcGljIAlkaXNhYmxlX2VkZ2VfaW9hcGljX2lycQorI2RlZmluZSBhY2tfZWRnZV9pb2FwaWMgCWFja19lZGdlX2lvYXBpY19pcnEKKyNkZWZpbmUgZW5kX2VkZ2VfaW9hcGljIAllbmRfZWRnZV9pb2FwaWNfaXJxCisjZW5kaWYKKworI2RlZmluZSBBUElDX01JU01BVENIX0RFQlVHCisKKyNkZWZpbmUgSU9fQVBJQ19CQVNFKGlkeCkgXAorCQkoKHZvbGF0aWxlIGludCAqKShfX2ZpeF90b192aXJ0KEZJWF9JT19BUElDX0JBU0VfMCArIGlkeCkgXAorCQkrIChtcF9pb2FwaWNzW2lkeF0ubXBjX2FwaWNhZGRyICYgflBBR0VfTUFTSykpKQorCisvKgorICogVGhlIHN0cnVjdHVyZSBvZiB0aGUgSU8tQVBJQzoKKyAqLwordW5pb24gSU9fQVBJQ19yZWdfMDAgeworCXUzMglyYXc7CisJc3RydWN0IHsKKwkJdTMyCV9fcmVzZXJ2ZWRfMgk6IDE0LAorCQkJTFRTCQk6ICAxLAorCQkJZGVsaXZlcnlfdHlwZQk6ICAxLAorCQkJX19yZXNlcnZlZF8xCTogIDgsCisJCQlJRAkJOiAgODsKKwl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBiaXRzOworfTsKKwordW5pb24gSU9fQVBJQ19yZWdfMDEgeworCXUzMglyYXc7CisJc3RydWN0IHsKKwkJdTMyCXZlcnNpb24JCTogIDgsCisJCV9fcmVzZXJ2ZWRfMgk6ICA3LAorCQlQUlEJCTogIDEsCisJCWVudHJpZXMJCTogIDgsCisJCV9fcmVzZXJ2ZWRfMQk6ICA4OworCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGJpdHM7Cit9OworCit1bmlvbiBJT19BUElDX3JlZ18wMiB7CisJdTMyCXJhdzsKKwlzdHJ1Y3QgeworCQl1MzIJX19yZXNlcnZlZF8yCTogMjQsCisJCWFyYml0cmF0aW9uCTogIDQsCisJCV9fcmVzZXJ2ZWRfMQk6ICA0OworCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGJpdHM7Cit9OworCit1bmlvbiBJT19BUElDX3JlZ18wMyB7CisJdTMyCXJhdzsKKwlzdHJ1Y3QgeworCQl1MzIJYm9vdF9EVAkJOiAgMSwKKwkJCV9fcmVzZXJ2ZWRfMQk6IDMxOworCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGJpdHM7Cit9OworCisvKgorICogIyBvZiBJTy1BUElDcyBhbmQgIyBvZiBJUlEgcm91dGluZyByZWdpc3RlcnMKKyAqLworZXh0ZXJuIGludCBucl9pb2FwaWNzOworZXh0ZXJuIGludCBucl9pb2FwaWNfcmVnaXN0ZXJzW01BWF9JT19BUElDU107CisKK2VudW0gaW9hcGljX2lycV9kZXN0aW5hdGlvbl90eXBlcyB7CisJZGVzdF9GaXhlZCA9IDAsCisJZGVzdF9Mb3dlc3RQcmlvID0gMSwKKwlkZXN0X1NNSSA9IDIsCisJZGVzdF9fcmVzZXJ2ZWRfMSA9IDMsCisJZGVzdF9OTUkgPSA0LAorCWRlc3RfSU5JVCA9IDUsCisJZGVzdF9fcmVzZXJ2ZWRfMiA9IDYsCisJZGVzdF9FeHRJTlQgPSA3Cit9OworCitzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSB7CisJX191MzIJdmVjdG9yCQk6ICA4LAorCQlkZWxpdmVyeV9tb2RlCTogIDMsCS8qIDAwMDogRklYRUQKKwkJCQkJICogMDAxOiBsb3dlc3QgcHJpbworCQkJCQkgKiAxMTE6IEV4dElOVAorCQkJCQkgKi8KKwkJZGVzdF9tb2RlCTogIDEsCS8qIDA6IHBoeXNpY2FsLCAxOiBsb2dpY2FsICovCisJCWRlbGl2ZXJ5X3N0YXR1cwk6ICAxLAorCQlwb2xhcml0eQk6ICAxLAorCQlpcnIJCTogIDEsCisJCXRyaWdnZXIJCTogIDEsCS8qIDA6IGVkZ2UsIDE6IGxldmVsICovCisJCW1hc2sJCTogIDEsCS8qIDA6IGVuYWJsZWQsIDE6IGRpc2FibGVkICovCisJCV9fcmVzZXJ2ZWRfMgk6IDE1OworCisJdW5pb24gewkJc3RydWN0IHsgX191MzIKKwkJCQkJX19yZXNlcnZlZF8xCTogMjQsCisJCQkJCXBoeXNpY2FsX2Rlc3QJOiAgNCwKKwkJCQkJX19yZXNlcnZlZF8yCTogIDQ7CisJCQl9IHBoeXNpY2FsOworCisJCQlzdHJ1Y3QgeyBfX3UzMgorCQkJCQlfX3Jlc2VydmVkXzEJOiAyNCwKKwkJCQkJbG9naWNhbF9kZXN0CTogIDg7CisJCQl9IGxvZ2ljYWw7CisJfSBkZXN0OworCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyoKKyAqIE1QLUJJT1MgaXJxIGNvbmZpZ3VyYXRpb24gdGFibGUgc3RydWN0dXJlczoKKyAqLworCisvKiBJL08gQVBJQyBlbnRyaWVzICovCitleHRlcm4gc3RydWN0IG1wY19jb25maWdfaW9hcGljIG1wX2lvYXBpY3NbTUFYX0lPX0FQSUNTXTsKKworLyogIyBvZiBNUCBJUlEgc291cmNlIGVudHJpZXMgKi8KK2V4dGVybiBpbnQgbXBfaXJxX2VudHJpZXM7CisKKy8qIE1QIElSUSBzb3VyY2UgZW50cmllcyAqLworZXh0ZXJuIHN0cnVjdCBtcGNfY29uZmlnX2ludHNyYyBtcF9pcnFzW01BWF9JUlFfU09VUkNFU107CisKKy8qIG5vbi0wIGlmIGRlZmF1bHQgKHRhYmxlLWxlc3MpIE1QIGNvbmZpZ3VyYXRpb24gKi8KK2V4dGVybiBpbnQgbXBjX2RlZmF1bHRfdHlwZTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaW9fYXBpY19yZWFkKHVuc2lnbmVkIGludCBhcGljLCB1bnNpZ25lZCBpbnQgcmVnKQoreworCSpJT19BUElDX0JBU0UoYXBpYykgPSByZWc7CisJcmV0dXJuICooSU9fQVBJQ19CQVNFKGFwaWMpKzQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW9fYXBpY193cml0ZSh1bnNpZ25lZCBpbnQgYXBpYywgdW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50IHZhbHVlKQoreworCSpJT19BUElDX0JBU0UoYXBpYykgPSByZWc7CisJKihJT19BUElDX0JBU0UoYXBpYykrNCkgPSB2YWx1ZTsKK30KKworLyoKKyAqIFJlLXdyaXRlIGEgdmFsdWU6IHRvIGJlIHVzZWQgZm9yIHJlYWQtbW9kaWZ5LXdyaXRlCisgKiBjeWNsZXMgd2hlcmUgdGhlIHJlYWQgYWxyZWFkeSBzZXQgdXAgdGhlIGluZGV4IHJlZ2lzdGVyLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaW9fYXBpY19tb2RpZnkodW5zaWduZWQgaW50IGFwaWMsIHVuc2lnbmVkIGludCB2YWx1ZSkKK3sKKwkqKElPX0FQSUNfQkFTRShhcGljKSs0KSA9IHZhbHVlOworfQorCisvKgorICogU3luY2hyb25pemUgdGhlIElPLUFQSUMgYW5kIHRoZSBDUFUgYnkgZG9pbmcKKyAqIGEgZHVtbXkgcmVhZCBmcm9tIHRoZSBJTy1BUElDCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpb19hcGljX3N5bmModW5zaWduZWQgaW50IGFwaWMpCit7CisJKHZvaWQpICooSU9fQVBJQ19CQVNFKGFwaWMpKzQpOworfQorCisvKiAxIGlmICJub2FwaWMiIGJvb3Qgb3B0aW9uIHBhc3NlZCAqLworZXh0ZXJuIGludCBza2lwX2lvYXBpY19zZXR1cDsKKworLyoKKyAqIElmIHdlIHVzZSB0aGUgSU8tQVBJQyBmb3IgSVJRIHJvdXRpbmcsIGRpc2FibGUgYXV0b21hdGljCisgKiBhc3NpZ25tZW50IG9mIFBDSSBJUlEncy4KKyAqLworI2RlZmluZSBpb19hcGljX2Fzc2lnbl9wY2lfaXJxcyAobXBfaXJxX2VudHJpZXMgJiYgIXNraXBfaW9hcGljX3NldHVwICYmIGlvX2FwaWNfaXJxcykKKworI2lmZGVmIENPTkZJR19BQ1BJX0JPT1QKK2V4dGVybiBpbnQgaW9fYXBpY19nZXRfdW5pcXVlX2lkIChpbnQgaW9hcGljLCBpbnQgYXBpY19pZCk7CitleHRlcm4gaW50IGlvX2FwaWNfZ2V0X3ZlcnNpb24gKGludCBpb2FwaWMpOworZXh0ZXJuIGludCBpb19hcGljX2dldF9yZWRpcl9lbnRyaWVzIChpbnQgaW9hcGljKTsKK2V4dGVybiBpbnQgaW9fYXBpY19zZXRfcGNpX3JvdXRpbmcgKGludCBpb2FwaWMsIGludCBwaW4sIGludCBpcnEsIGludCwgaW50KTsKKyNlbmRpZgorCitleHRlcm4gaW50IHNpc19hcGljX2J1ZzsgLyogZHVtbXkgKi8gCisKKyNlbHNlICAvKiAhQ09ORklHX1g4Nl9JT19BUElDICovCisjZGVmaW5lIGlvX2FwaWNfYXNzaWduX3BjaV9pcnFzIDAKKyNlbmRpZgorCitleHRlcm4gaW50IGFzc2lnbl9pcnFfdmVjdG9yKGludCBpcnEpOworCit2b2lkIGVuYWJsZV9OTUlfdGhyb3VnaF9MVlQwICh2b2lkICogZHVtbXkpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9pb2N0bC5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2lvY3RsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA5YjY2MwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9pb2N0bC5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qICRJZDogaW9jdGwuaCx2IDEuMiAyMDAxLzA3LzA0IDA5OjA4OjEzIGFrIEV4cCAkCisgKgorICogbGludXgvaW9jdGwuaCBmb3IgTGludXggYnkgSC5ILiBCZXJnbWFuLgorICovCisKKyNpZm5kZWYgX0FTTVg4NjY0X0lPQ1RMX0gKKyNkZWZpbmUgX0FTTVg4NjY0X0lPQ1RMX0gKKworLyogaW9jdGwgY29tbWFuZCBlbmNvZGluZzogMzIgYml0cyB0b3RhbCwgY29tbWFuZCBpbiBsb3dlciAxNiBiaXRzLAorICogc2l6ZSBvZiB0aGUgcGFyYW1ldGVyIHN0cnVjdHVyZSBpbiB0aGUgbG93ZXIgMTQgYml0cyBvZiB0aGUKKyAqIHVwcGVyIDE2IGJpdHMuCisgKiBFbmNvZGluZyB0aGUgc2l6ZSBvZiB0aGUgcGFyYW1ldGVyIHN0cnVjdHVyZSBpbiB0aGUgaW9jdGwgcmVxdWVzdAorICogaXMgdXNlZnVsIGZvciBjYXRjaGluZyBwcm9ncmFtcyBjb21waWxlZCB3aXRoIG9sZCB2ZXJzaW9ucworICogYW5kIHRvIGF2b2lkIG92ZXJ3cml0aW5nIHVzZXIgc3BhY2Ugb3V0c2lkZSB0aGUgdXNlciBidWZmZXIgYXJlYS4KKyAqIFRoZSBoaWdoZXN0IDIgYml0cyBhcmUgcmVzZXJ2ZWQgZm9yIGluZGljYXRpbmcgdGhlIGBgYWNjZXNzIG1vZGUnJy4KKyAqIE5PVEU6IFRoaXMgbGltaXRzIHRoZSBtYXggcGFyYW1ldGVyIHNpemUgdG8gMTZrQiAtMSAhCisgKi8KKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgaXMgZm9yIGNvbXBhdGliaWxpdHkgYWNyb3NzIHRoZSB2YXJpb3VzIExpbnV4CisgKiBwbGF0Zm9ybXMuICBUaGUgaTM4NiBpb2N0bCBudW1iZXJpbmcgc2NoZW1lIGRvZXNuJ3QgcmVhbGx5IGVuZm9yY2UKKyAqIGEgdHlwZSBmaWVsZC4gIERlIGZhY3RvLCBob3dldmVyLCB0aGUgdG9wIDggYml0cyBvZiB0aGUgbG93ZXIgMTYKKyAqIGJpdHMgYXJlIGluZGVlZCB1c2VkIGFzIGEgdHlwZSBmaWVsZCwgc28gd2UgbWlnaHQganVzdCBhcyB3ZWxsIG1ha2UKKyAqIHRoaXMgZXhwbGljaXQgaGVyZS4gIFBsZWFzZSBiZSBzdXJlIHRvIHVzZSB0aGUgZGVjb2RpbmcgbWFjcm9zCisgKiBiZWxvdyBmcm9tIG5vdyBvbi4KKyAqLworI2RlZmluZSBfSU9DX05SQklUUwk4CisjZGVmaW5lIF9JT0NfVFlQRUJJVFMJOAorI2RlZmluZSBfSU9DX1NJWkVCSVRTCTE0CisjZGVmaW5lIF9JT0NfRElSQklUUwkyCisKKyNkZWZpbmUgX0lPQ19OUk1BU0sJKCgxIDw8IF9JT0NfTlJCSVRTKS0xKQorI2RlZmluZSBfSU9DX1RZUEVNQVNLCSgoMSA8PCBfSU9DX1RZUEVCSVRTKS0xKQorI2RlZmluZSBfSU9DX1NJWkVNQVNLCSgoMSA8PCBfSU9DX1NJWkVCSVRTKS0xKQorI2RlZmluZSBfSU9DX0RJUk1BU0sJKCgxIDw8IF9JT0NfRElSQklUUyktMSkKKworI2RlZmluZSBfSU9DX05SU0hJRlQJMAorI2RlZmluZSBfSU9DX1RZUEVTSElGVAkoX0lPQ19OUlNISUZUK19JT0NfTlJCSVRTKQorI2RlZmluZSBfSU9DX1NJWkVTSElGVAkoX0lPQ19UWVBFU0hJRlQrX0lPQ19UWVBFQklUUykKKyNkZWZpbmUgX0lPQ19ESVJTSElGVAkoX0lPQ19TSVpFU0hJRlQrX0lPQ19TSVpFQklUUykKKworLyoKKyAqIERpcmVjdGlvbiBiaXRzLgorICovCisjZGVmaW5lIF9JT0NfTk9ORQkwVQorI2RlZmluZSBfSU9DX1dSSVRFCTFVCisjZGVmaW5lIF9JT0NfUkVBRAkyVQorCisjZGVmaW5lIF9JT0MoZGlyLHR5cGUsbnIsc2l6ZSkgXAorCSgoKGRpcikgIDw8IF9JT0NfRElSU0hJRlQpIHwgXAorCSAoKHR5cGUpIDw8IF9JT0NfVFlQRVNISUZUKSB8IFwKKwkgKChucikgICA8PCBfSU9DX05SU0hJRlQpIHwgXAorCSAoKHNpemUpIDw8IF9JT0NfU0laRVNISUZUKSkKKworLyogdXNlZCB0byBjcmVhdGUgbnVtYmVycyAqLworI2RlZmluZSBfSU8odHlwZSxucikJCV9JT0MoX0lPQ19OT05FLCh0eXBlKSwobnIpLDApCisjZGVmaW5lIF9JT1IodHlwZSxucixzaXplKQlfSU9DKF9JT0NfUkVBRCwodHlwZSksKG5yKSxzaXplb2Yoc2l6ZSkpCisjZGVmaW5lIF9JT1codHlwZSxucixzaXplKQlfSU9DKF9JT0NfV1JJVEUsKHR5cGUpLChuciksc2l6ZW9mKHNpemUpKQorI2RlZmluZSBfSU9XUih0eXBlLG5yLHNpemUpCV9JT0MoX0lPQ19SRUFEfF9JT0NfV1JJVEUsKHR5cGUpLChuciksc2l6ZW9mKHNpemUpKQorCisvKiB1c2VkIHRvIGRlY29kZSBpb2N0bCBudW1iZXJzLi4gKi8KKyNkZWZpbmUgX0lPQ19ESVIobnIpCQkoKChucikgPj4gX0lPQ19ESVJTSElGVCkgJiBfSU9DX0RJUk1BU0spCisjZGVmaW5lIF9JT0NfVFlQRShucikJCSgoKG5yKSA+PiBfSU9DX1RZUEVTSElGVCkgJiBfSU9DX1RZUEVNQVNLKQorI2RlZmluZSBfSU9DX05SKG5yKQkJKCgobnIpID4+IF9JT0NfTlJTSElGVCkgJiBfSU9DX05STUFTSykKKyNkZWZpbmUgX0lPQ19TSVpFKG5yKQkJKCgobnIpID4+IF9JT0NfU0laRVNISUZUKSAmIF9JT0NfU0laRU1BU0spCisKKy8qIC4uLmFuZCBmb3IgdGhlIGRyaXZlcnMvc291bmQgZmlsZXMuLi4gKi8KKworI2RlZmluZSBJT0NfSU4JCShfSU9DX1dSSVRFIDw8IF9JT0NfRElSU0hJRlQpCisjZGVmaW5lIElPQ19PVVQJCShfSU9DX1JFQUQgPDwgX0lPQ19ESVJTSElGVCkKKyNkZWZpbmUgSU9DX0lOT1VUCSgoX0lPQ19XUklURXxfSU9DX1JFQUQpIDw8IF9JT0NfRElSU0hJRlQpCisjZGVmaW5lIElPQ1NJWkVfTUFTSwkoX0lPQ19TSVpFTUFTSyA8PCBfSU9DX1NJWkVTSElGVCkKKyNkZWZpbmUgSU9DU0laRV9TSElGVAkoX0lPQ19TSVpFU0hJRlQpCisKKyNlbmRpZiAvKiBfQVNNWDg2NjRfSU9DVExfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2lvY3RsMzIuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9pb2N0bDMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBkMjI3ZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9pb2N0bDMyLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGxpbnV4L2lvY3RsMzIuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9pb2N0bHMuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9pb2N0bHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmNhZjhiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L2lvY3Rscy5oCkBAIC0wLDAgKzEsODIgQEAKKyNpZm5kZWYgX19BUkNIX1g4NjY0X0lPQ1RMU19IX18KKyNkZWZpbmUgX19BUkNIX1g4NjY0X0lPQ1RMU19IX18KKworI2luY2x1ZGUgPGFzbS9pb2N0bC5oPgorCisvKiAweDU0IGlzIGp1c3QgYSBtYWdpYyBudW1iZXIgdG8gbWFrZSB0aGVzZSByZWxhdGl2ZWx5IHVuaXF1ZSAoJ1QnKSAqLworCisjZGVmaW5lIFRDR0VUUwkJMHg1NDAxCisjZGVmaW5lIFRDU0VUUwkJMHg1NDAyCisjZGVmaW5lIFRDU0VUU1cJCTB4NTQwMworI2RlZmluZSBUQ1NFVFNGCQkweDU0MDQKKyNkZWZpbmUgVENHRVRBCQkweDU0MDUKKyNkZWZpbmUgVENTRVRBCQkweDU0MDYKKyNkZWZpbmUgVENTRVRBVwkJMHg1NDA3CisjZGVmaW5lIFRDU0VUQUYJCTB4NTQwOAorI2RlZmluZSBUQ1NCUksJCTB4NTQwOQorI2RlZmluZSBUQ1hPTkMJCTB4NTQwQQorI2RlZmluZSBUQ0ZMU0gJCTB4NTQwQgorI2RlZmluZSBUSU9DRVhDTAkweDU0MEMKKyNkZWZpbmUgVElPQ05YQ0wJMHg1NDBECisjZGVmaW5lIFRJT0NTQ1RUWQkweDU0MEUKKyNkZWZpbmUgVElPQ0dQR1JQCTB4NTQwRgorI2RlZmluZSBUSU9DU1BHUlAJMHg1NDEwCisjZGVmaW5lIFRJT0NPVVRRCTB4NTQxMQorI2RlZmluZSBUSU9DU1RJCQkweDU0MTIKKyNkZWZpbmUgVElPQ0dXSU5TWgkweDU0MTMKKyNkZWZpbmUgVElPQ1NXSU5TWgkweDU0MTQKKyNkZWZpbmUgVElPQ01HRVQJMHg1NDE1CisjZGVmaW5lIFRJT0NNQklTCTB4NTQxNgorI2RlZmluZSBUSU9DTUJJQwkweDU0MTcKKyNkZWZpbmUgVElPQ01TRVQJMHg1NDE4CisjZGVmaW5lIFRJT0NHU09GVENBUgkweDU0MTkKKyNkZWZpbmUgVElPQ1NTT0ZUQ0FSCTB4NTQxQQorI2RlZmluZSBGSU9OUkVBRAkweDU0MUIKKyNkZWZpbmUgVElPQ0lOUQkJRklPTlJFQUQKKyNkZWZpbmUgVElPQ0xJTlVYCTB4NTQxQworI2RlZmluZSBUSU9DQ09OUwkweDU0MUQKKyNkZWZpbmUgVElPQ0dTRVJJQUwJMHg1NDFFCisjZGVmaW5lIFRJT0NTU0VSSUFMCTB4NTQxRgorI2RlZmluZSBUSU9DUEtUCQkweDU0MjAKKyNkZWZpbmUgRklPTkJJTwkJMHg1NDIxCisjZGVmaW5lIFRJT0NOT1RUWQkweDU0MjIKKyNkZWZpbmUgVElPQ1NFVEQJMHg1NDIzCisjZGVmaW5lIFRJT0NHRVRECTB4NTQyNAorI2RlZmluZSBUQ1NCUktQCQkweDU0MjUJLyogTmVlZGVkIGZvciBQT1NJWCB0Y3NlbmRicmVhaygpICovCisjZGVmaW5lIFRJT0NTQlJLCTB4NTQyNyAgLyogQlNEIGNvbXBhdGliaWxpdHkgKi8KKyNkZWZpbmUgVElPQ0NCUksJMHg1NDI4ICAvKiBCU0QgY29tcGF0aWJpbGl0eSAqLworI2RlZmluZSBUSU9DR1NJRAkweDU0MjkgIC8qIFJldHVybiB0aGUgc2Vzc2lvbiBJRCBvZiBGRCAqLworI2RlZmluZSBUSU9DR1BUTglfSU9SKCdUJywweDMwLCB1bnNpZ25lZCBpbnQpIC8qIEdldCBQdHkgTnVtYmVyIChvZiBwdHktbXV4IGRldmljZSkgKi8KKyNkZWZpbmUgVElPQ1NQVExDSwlfSU9XKCdUJywweDMxLCBpbnQpICAvKiBMb2NrL3VubG9jayBQdHkgKi8KKworI2RlZmluZSBGSU9OQ0xFWAkweDU0NTAgIC8qIHRoZXNlIG51bWJlcnMgbmVlZCB0byBiZSBhZGp1c3RlZC4gKi8KKyNkZWZpbmUgRklPQ0xFWAkJMHg1NDUxCisjZGVmaW5lIEZJT0FTWU5DCTB4NTQ1MgorI2RlZmluZSBUSU9DU0VSQ09ORklHCTB4NTQ1MworI2RlZmluZSBUSU9DU0VSR1dJTEQJMHg1NDU0CisjZGVmaW5lIFRJT0NTRVJTV0lMRAkweDU0NTUKKyNkZWZpbmUgVElPQ0dMQ0tUUk1JT1MJMHg1NDU2CisjZGVmaW5lIFRJT0NTTENLVFJNSU9TCTB4NTQ1NworI2RlZmluZSBUSU9DU0VSR1NUUlVDVAkweDU0NTggLyogRm9yIGRlYnVnZ2luZyBvbmx5ICovCisjZGVmaW5lIFRJT0NTRVJHRVRMU1IgICAweDU0NTkgLyogR2V0IGxpbmUgc3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIFRJT0NTRVJHRVRNVUxUSSAweDU0NUEgLyogR2V0IG11bHRpcG9ydCBjb25maWcgICovCisjZGVmaW5lIFRJT0NTRVJTRVRNVUxUSSAweDU0NUIgLyogU2V0IG11bHRpcG9ydCBjb25maWcgKi8KKworI2RlZmluZSBUSU9DTUlXQUlUCTB4NTQ1QwkvKiB3YWl0IGZvciBhIGNoYW5nZSBvbiBzZXJpYWwgaW5wdXQgbGluZShzKSAqLworI2RlZmluZSBUSU9DR0lDT1VOVAkweDU0NUQJLyogcmVhZCBzZXJpYWwgcG9ydCBpbmxpbmUgaW50ZXJydXB0IGNvdW50cyAqLworI2RlZmluZSBUSU9DR0hBWUVTRVNQICAgMHg1NDVFICAvKiBHZXQgSGF5ZXMgRVNQIGNvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgVElPQ1NIQVlFU0VTUCAgIDB4NTQ1RiAgLyogU2V0IEhheWVzIEVTUCBjb25maWd1cmF0aW9uICovCisjZGVmaW5lIEZJT1FTSVpFICAgICAgIDB4NTQ2MAorCisvKiBVc2VkIGZvciBwYWNrZXQgbW9kZSAqLworI2RlZmluZSBUSU9DUEtUX0RBVEEJCSAwCisjZGVmaW5lIFRJT0NQS1RfRkxVU0hSRUFECSAxCisjZGVmaW5lIFRJT0NQS1RfRkxVU0hXUklURQkgMgorI2RlZmluZSBUSU9DUEtUX1NUT1AJCSA0CisjZGVmaW5lIFRJT0NQS1RfU1RBUlQJCSA4CisjZGVmaW5lIFRJT0NQS1RfTk9TVE9QCQkxNgorI2RlZmluZSBUSU9DUEtUX0RPU1RPUAkJMzIKKworI2RlZmluZSBUSU9DU0VSX1RFTVQgICAgMHgwMQkvKiBUcmFuc21pdHRlciBwaHlzaWNhbGx5IGVtcHR5ICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2lwY2J1Zi5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2lwY2J1Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3MGNmODUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvaXBjYnVmLmgKQEAgLTAsMCArMSwyOSBAQAorI2lmbmRlZiBfX3g4Nl82NF9JUENCVUZfSF9fCisjZGVmaW5lIF9feDg2XzY0X0lQQ0JVRl9IX18KKworLyoKKyAqIFRoZSBpcGM2NF9wZXJtIHN0cnVjdHVyZSBmb3IgeDg2XzY0IGFyY2hpdGVjdHVyZS4KKyAqIE5vdGUgZXh0cmEgcGFkZGluZyBiZWNhdXNlIHRoaXMgc3RydWN0dXJlIGlzIHBhc3NlZCBiYWNrIGFuZCBmb3J0aAorICogYmV0d2VlbiBrZXJuZWwgYW5kIHVzZXIgc3BhY2UuCisgKgorICogUGFkIHNwYWNlIGlzIGxlZnQgZm9yOgorICogLSAzMi1iaXQgbW9kZV90IGFuZCBzZXEKKyAqIC0gMiBtaXNjZWxsYW5lb3VzIDMyLWJpdCB2YWx1ZXMKKyAqLworCitzdHJ1Y3QgaXBjNjRfcGVybQoreworCV9fa2VybmVsX2tleV90CQlrZXk7CisJX19rZXJuZWxfdWlkMzJfdAl1aWQ7CisJX19rZXJuZWxfZ2lkMzJfdAlnaWQ7CisJX19rZXJuZWxfdWlkMzJfdAljdWlkOworCV9fa2VybmVsX2dpZDMyX3QJY2dpZDsKKwlfX2tlcm5lbF9tb2RlX3QJCW1vZGU7CisJdW5zaWduZWQgc2hvcnQJCV9fcGFkMTsKKwl1bnNpZ25lZCBzaG9ydAkJc2VxOworCXVuc2lnbmVkIHNob3J0CQlfX3BhZDI7CisJdW5zaWduZWQgbG9uZwkJX191bnVzZWQxOworCXVuc2lnbmVkIGxvbmcJCV9fdW51c2VkMjsKK307CisKKyNlbmRpZiAvKiBfX3g4Nl82NF9JUENCVUZfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvaXBpLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvaXBpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE4NDE4NAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9pcGkuaApAQCAtMCwwICsxLDExMyBAQAorI2lmbmRlZiBfX0FTTV9JUElfSAorI2RlZmluZSBfX0FTTV9JUElfSAorCisvKgorICogQ29weXJpZ2h0IDIwMDQgSmFtZXMgQ2xldmVyZG9uLCBJQk0uCisgKiBTdWJqZWN0IHRvIHRoZSBHTlUgUHVibGljIExpY2Vuc2UsIHYuMgorICoKKyAqIEdlbmVyaWMgQVBJQyBJbnRlclByb2Nlc3NvciBJbnRlcnJ1cHQgY29kZS4KKyAqCisgKiBNb3ZlZCB0byBpbmNsdWRlIGZpbGUgYnkgSmFtZXMgQ2xldmVyZG9uIGZyb20KKyAqIGFyY2gveDg2LTY0L2tlcm5lbC9zbXAuYworICoKKyAqIENvcHlyaWdodHMgZnJvbSBrZXJuZWwvc21wLmM6CisgKgorICogKGMpIDE5OTUgQWxhbiBDb3gsIEJ1aWxkaW5nICMzIDxhbGFuQHJlZGhhdC5jb20+CisgKiAoYykgMTk5OC05OSwgMjAwMCBJbmdvIE1vbG5hciA8bWluZ29AcmVkaGF0LmNvbT4KKyAqIChjKSAyMDAyLDIwMDMgQW5kaSBLbGVlbiwgU3VTRSBMYWJzLgorICogU3ViamVjdCB0byB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLCB2LjIKKyAqLworCisjaW5jbHVkZSA8YXNtL2ZpeG1hcC5oPgorI2luY2x1ZGUgPGFzbS9od19pcnEuaD4KKyNpbmNsdWRlIDxhc20vYXBpY2RlZi5oPgorI2luY2x1ZGUgPGFzbS9nZW5hcGljLmg+CisKKy8qCisgKiB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBkZWFsIHdpdGggc2VuZGluZyBJUElzIGJldHdlZW4gQ1BVcy4KKyAqCisgKiBXZSB1c2UgJ2Jyb2FkY2FzdCcsIENQVS0+Q1BVIElQSXMgYW5kIHNlbGYtSVBJcyB0b28uCisgKi8KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgX19wcmVwYXJlX0lDUiAodW5zaWduZWQgaW50IHNob3J0Y3V0LCBpbnQgdmVjdG9yLCB1bnNpZ25lZCBpbnQgZGVzdCkKK3sKKwl1bnNpZ25lZCBpbnQgaWNyID0gIEFQSUNfRE1fRklYRUQgfCBzaG9ydGN1dCB8IHZlY3RvciB8IGRlc3Q7CisJaWYgKHZlY3RvciA9PSBLREJfVkVDVE9SKQorCQlpY3IgPSAoaWNyICYgKH5BUElDX1ZFQ1RPUl9NQVNLKSkgfCBBUElDX0RNX05NSTsKKwlyZXR1cm4gaWNyOworfQorCitzdGF0aWMgaW5saW5lIGludCBfX3ByZXBhcmVfSUNSMiAodW5zaWduZWQgaW50IG1hc2spCit7CisJcmV0dXJuIFNFVF9BUElDX0RFU1RfRklFTEQobWFzayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3NlbmRfSVBJX3Nob3J0Y3V0KHVuc2lnbmVkIGludCBzaG9ydGN1dCwgaW50IHZlY3RvciwgdW5zaWduZWQgaW50IGRlc3QpCit7CisJLyoKKwkgKiBTdWJ0bGUuIEluIHRoZSBjYXNlIG9mIHRoZSAnbmV2ZXIgZG8gZG91YmxlIHdyaXRlcycgd29ya2Fyb3VuZAorCSAqIHdlIGhhdmUgdG8gbG9jayBvdXQgaW50ZXJydXB0cyB0byBiZSBzYWZlLiAgQXMgd2UgZG9uJ3QgY2FyZQorCSAqIG9mIHRoZSB2YWx1ZSByZWFkIHdlIHVzZSBhbiBhdG9taWMgcm13IGFjY2VzcyB0byBhdm9pZCBjb3N0bHkKKwkgKiBjbGkvc3RpLiAgT3RoZXJ3aXNlIHdlIHVzZSBhbiBldmVuIGNoZWFwZXIgc2luZ2xlIGF0b21pYyB3cml0ZQorCSAqIHRvIHRoZSBBUElDLgorCSAqLworCXVuc2lnbmVkIGludCBjZmc7CisKKwkvKgorCSAqIFdhaXQgZm9yIGlkbGUuCisJICovCisJYXBpY193YWl0X2ljcl9pZGxlKCk7CisKKwkvKgorCSAqIE5vIG5lZWQgdG8gdG91Y2ggdGhlIHRhcmdldCBjaGlwIGZpZWxkCisJICovCisJY2ZnID0gX19wcmVwYXJlX0lDUihzaG9ydGN1dCwgdmVjdG9yLCBkZXN0KTsKKworCS8qCisJICogU2VuZCB0aGUgSVBJLiBUaGUgd3JpdGUgdG8gQVBJQ19JQ1IgZmlyZXMgdGhpcyBvZmYuCisJICovCisJYXBpY193cml0ZV9hcm91bmQoQVBJQ19JQ1IsIGNmZyk7Cit9CisKKworc3RhdGljIGlubGluZSB2b2lkIHNlbmRfSVBJX21hc2tfc2VxdWVuY2UoY3B1bWFza190IG1hc2ssIGludCB2ZWN0b3IpCit7CisJdW5zaWduZWQgbG9uZyBjZmcsIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgcXVlcnlfY3B1OworCisJLyoKKwkgKiBIYWNrLiBUaGUgY2x1c3RlcmVkIEFQSUMgYWRkcmVzc2luZyBtb2RlIGRvZXNuJ3QgYWxsb3cgdXMgdG8gc2VuZAorCSAqIHRvIGFuIGFyYml0cmFyeSBtYXNrLCBzbyBJIGRvIGEgdW5pY2FzdCB0byBlYWNoIENQVSBpbnN0ZWFkLgorCSAqIC0gbWJsaWdoCisJICovCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJZm9yIChxdWVyeV9jcHUgPSAwOyBxdWVyeV9jcHUgPCBOUl9DUFVTOyArK3F1ZXJ5X2NwdSkgeworCQlpZiAoY3B1X2lzc2V0KHF1ZXJ5X2NwdSwgbWFzaykpIHsKKworCQkJLyoKKwkJCSAqIFdhaXQgZm9yIGlkbGUuCisJCQkgKi8KKwkJCWFwaWNfd2FpdF9pY3JfaWRsZSgpOworCisJCQkvKgorCQkJICogcHJlcGFyZSB0YXJnZXQgY2hpcCBmaWVsZAorCQkJICovCisJCQljZmcgPSBfX3ByZXBhcmVfSUNSMih4ODZfY3B1X3RvX2FwaWNpZFtxdWVyeV9jcHVdKTsKKwkJCWFwaWNfd3JpdGVfYXJvdW5kKEFQSUNfSUNSMiwgY2ZnKTsKKworCQkJLyoKKwkJCSAqIHByb2dyYW0gdGhlIElDUgorCQkJICovCisJCQljZmcgPSBfX3ByZXBhcmVfSUNSKDAsIHZlY3RvciwgQVBJQ19ERVNUX1BIWVNJQ0FMKTsKKworCQkJLyoKKwkJCSAqIFNlbmQgdGhlIElQSS4gVGhlIHdyaXRlIHRvIEFQSUNfSUNSIGZpcmVzIHRoaXMgb2ZmLgorCQkJICovCisJCQlhcGljX3dyaXRlX2Fyb3VuZChBUElDX0lDUiwgY2ZnKTsKKwkJfQorCX0KKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKKyNlbmRpZiAvKiBfX0FTTV9JUElfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2lycS5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2lycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhZjUwYjMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvaXJxLmgKQEAgLTAsMCArMSw1NSBAQAorI2lmbmRlZiBfQVNNX0lSUV9ICisjZGVmaW5lIF9BU01fSVJRX0gKKworLyoKKyAqCWxpbnV4L2luY2x1ZGUvYXNtL2lycS5oCisgKgorICoJKEMpIDE5OTIsIDE5OTMgTGludXMgVG9ydmFsZHMsIChDKSAxOTk3IEluZ28gTW9sbmFyCisgKgorICoJSVJRL0lQSSBjaGFuZ2VzIHRha2VuIGZyb20gd29yayBieSBUaG9tYXMgUmFka2UKKyAqCTx0b21zb2Z0QGluZm9ybWF0aWsudHUtY2hlbW5pdHouZGU+CisgKi8KKworI2RlZmluZSBUSU1FUl9JUlEgMAorCisvKgorICogMTYgODI1OUEgSVJRJ3MsIDIwOCBwb3RlbnRpYWwgQVBJQyBpbnRlcnJ1cHQgc291cmNlcy4KKyAqIFJpZ2h0IG5vdyB0aGUgQVBJQyBpcyBtb3N0bHkgb25seSB1c2VkIGZvciBTTVAuCisgKiAyNTYgdmVjdG9ycyBpcyBhbiBhcmNoaXRlY3R1cmFsIGxpbWl0LiAod2UgY2FuIGhhdmUKKyAqIG1vcmUgdGhhbiAyNTYgZGV2aWNlcyB0aGVvcmV0aWNhbGx5LCBidXQgdGhleSB3aWxsCisgKiBoYXZlIHRvIHVzZSBzaGFyZWQgaW50ZXJydXB0cykKKyAqIFNpbmNlIHZlY3RvcnMgMHgwMC0weDFmIGFyZSB1c2VkL3Jlc2VydmVkIGZvciB0aGUgQ1BVLAorICogdGhlIHVzYWJsZSB2ZWN0b3Igc3BhY2UgaXMgMHgyMC0weGZmICgyMjQgdmVjdG9ycykKKyAqLworCisvKgorICogVGhlIG1heGltdW0gbnVtYmVyIG9mIHZlY3RvcnMgc3VwcG9ydGVkIGJ5IHg4Nl82NCBwcm9jZXNzb3JzCisgKiBpcyBsaW1pdGVkIHRvIDI1Ni4gRm9yIHByb2Nlc3NvcnMgb3RoZXIgdGhhbiB4ODZfNjQsIE5SX1ZFQ1RPUlMKKyAqIHNob3VsZCBiZSBjaGFuZ2VkIGFjY29yZGluZ2x5LgorICovCisjZGVmaW5lIE5SX1ZFQ1RPUlMgMjU2CisKKyNkZWZpbmUgRklSU1RfU1lTVEVNX1ZFQ1RPUgkweGVmICAgLyogZHVwbGljYXRlZCBpbiBod19pcnEuaCAqLworCisjaWZkZWYgQ09ORklHX1BDSV9NU0kKKyNkZWZpbmUgTlJfSVJRUyBGSVJTVF9TWVNURU1fVkVDVE9SCisjZGVmaW5lIE5SX0lSUV9WRUNUT1JTIE5SX0lSUVMKKyNlbHNlCisjZGVmaW5lIE5SX0lSUVMgMjI0CisjZGVmaW5lIE5SX0lSUV9WRUNUT1JTIDEwMjQKKyNlbmRpZgorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgaXJxX2Nhbm9uaWNhbGl6ZShpbnQgaXJxKQoreworCXJldHVybiAoKGlycSA9PSAyKSA/IDkgOiBpcnEpOworfQorCisjaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCisjZGVmaW5lIEFSQ0hfSEFTX05NSV9XQVRDSERPRwkJLyogU2VlIGluY2x1ZGUvbGludXgvbm1pLmggKi8KKyNlbmRpZgorCitzdHJ1Y3QgaXJxYWN0aW9uOworc3RydWN0IHB0X3JlZ3M7CitpbnQgaGFuZGxlX0lSUV9ldmVudCh1bnNpZ25lZCBpbnQsIHN0cnVjdCBwdF9yZWdzICosIHN0cnVjdCBpcnFhY3Rpb24gKik7CisKKyNlbmRpZiAvKiBfQVNNX0lSUV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQva2RlYnVnLmggYi9pbmNsdWRlL2FzbS14ODZfNjQva2RlYnVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRiNmY5MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9rZGVidWcuaApAQCAtMCwwICsxLDUzIEBACisjaWZuZGVmIF9YODZfNjRfS0RFQlVHX0gKKyNkZWZpbmUgX1g4Nl82NF9LREVCVUdfSCAxCisKKyNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgorCitzdHJ1Y3QgcHRfcmVnczsKKworc3RydWN0IGRpZV9hcmdzIHsgCisJc3RydWN0IHB0X3JlZ3MgKnJlZ3M7CisJY29uc3QgY2hhciAqc3RyOworCWxvbmcgZXJyOyAKKwlpbnQgdHJhcG5yOworCWludCBzaWducjsKK307IAorCisvKiBOb3RlIC0geW91IHNob3VsZCBuZXZlciB1bnJlZ2lzdGVyIGJlY2F1c2UgdGhhdCBjYW4gcmFjZSB3aXRoIE5NSXMuCisgICBJZiB5b3UgcmVhbGx5IHdhbnQgdG8gZG8gaXQgZmlyc3QgdW5yZWdpc3RlciAtIHRoZW4gc3luY2hyb25pemVfa2VybmVsIC0gdGhlbiBmcmVlLiAKKyAgKi8KK2ludCByZWdpc3Rlcl9kaWVfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7CitleHRlcm4gc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpkaWVfY2hhaW47CisvKiBHcm9zc2x5IG1pc25hbWVkLiAqLworZW51bSBkaWVfdmFsIHsgCisJRElFX09PUFMgPSAxLAorCURJRV9JTlQzLAorCURJRV9ERUJVRywKKwlESUVfREVCVUdTVEVQLAorCURJRV9QQU5JQywKKwlESUVfTk1JLAorCURJRV9ESUUsCisJRElFX05NSVdBVENIRE9HLAorCURJRV9LRVJORUxERUJVRywKKwlESUVfVFJBUCwKKwlESUVfR1BGLAorCURJRV9DQUxMLAorCURJRV9OTUlfSVBJLAorCURJRV9QQUdFX0ZBVUxULAorfTsgCisJCitzdGF0aWMgaW5saW5lIGludCBub3RpZnlfZGllKGVudW0gZGllX3ZhbCB2YWwsY2hhciAqc3RyLHN0cnVjdCBwdF9yZWdzICpyZWdzLGxvbmcgZXJyLGludCB0cmFwLCBpbnQgc2lnKQoreyAKKwlzdHJ1Y3QgZGllX2FyZ3MgYXJncyA9IHsgLnJlZ3M9cmVncywgLnN0cj1zdHIsIC5lcnI9ZXJyLCAudHJhcG5yPXRyYXAsLnNpZ25yPXNpZyB9OyAKKwlyZXR1cm4gbm90aWZpZXJfY2FsbF9jaGFpbigmZGllX2NoYWluLCB2YWwsICZhcmdzKTsgCit9IAorCitleHRlcm4gaW50IHByaW50a19hZGRyZXNzKHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7CitleHRlcm4gdm9pZCBkaWUoY29uc3QgY2hhciAqLHN0cnVjdCBwdF9yZWdzICosbG9uZyk7CitleHRlcm4gdm9pZCBfX2RpZShjb25zdCBjaGFyICosc3RydWN0IHB0X3JlZ3MgKixsb25nKTsKK2V4dGVybiB2b2lkIHNob3dfcmVnaXN0ZXJzKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2V4dGVybiB2b2lkIGR1bXBfcGFnZXRhYmxlKHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuIHZvaWQgb29wc19iZWdpbih2b2lkKTsKK2V4dGVybiB2b2lkIG9vcHNfZW5kKHZvaWQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9rbWFwX3R5cGVzLmggYi9pbmNsdWRlL2FzbS14ODZfNjQva21hcF90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0ODYzMzgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQva21hcF90eXBlcy5oCkBAIC0wLDAgKzEsMTkgQEAKKyNpZm5kZWYgX0FTTV9LTUFQX1RZUEVTX0gKKyNkZWZpbmUgX0FTTV9LTUFQX1RZUEVTX0gKKworZW51bSBrbV90eXBlIHsKKwlLTV9CT1VOQ0VfUkVBRCwKKwlLTV9TS0JfU1VOUlBDX0RBVEEsCisJS01fU0tCX0RBVEFfU09GVElSUSwKKwlLTV9VU0VSMCwKKwlLTV9VU0VSMSwKKwlLTV9CSU9fU1JDX0lSUSwKKwlLTV9CSU9fRFNUX0lSUSwKKwlLTV9JUlEwLAorCUtNX0lSUTEsCisJS01fU09GVElSUTAsCisJS01fU09GVElSUTEsCisJS01fVFlQRV9OUgorfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQva3Byb2Jlcy5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2twcm9iZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmVhNTJkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L2twcm9iZXMuaApAQCAtMCwwICsxLDYzIEBACisjaWZuZGVmIF9BU01fS1BST0JFU19ICisjZGVmaW5lIF9BU01fS1BST0JFU19ICisvKgorICogIEtlcm5lbCBQcm9iZXMgKEtQcm9iZXMpCisgKiAgaW5jbHVkZS9hc20teDg2XzY0L2twcm9iZXMuaAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICogQ29weXJpZ2h0IChDKSBJQk0gQ29ycG9yYXRpb24sIDIwMDIsIDIwMDQKKyAqCisgKiAyMDA0LU9jdAlQcmFzYW5uYSBTIFBhbmNoYW11a2hpIDxwcmFzYW5uYUBpbi5pYm0uY29tPiBhbmQgSmltIEtlbmlzdG9uCisgKgkJa2VuaXN0b2pAdXMuaWJtLmNvbSBhZG9wdGVkIGZyb20gaTM4Ni4KKyAqLworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisKK3N0cnVjdCBwdF9yZWdzOworCit0eXBlZGVmIHU4IGtwcm9iZV9vcGNvZGVfdDsKKyNkZWZpbmUgQlJFQUtQT0lOVF9JTlNUUlVDVElPTgkweGNjCisjZGVmaW5lIE1BWF9JTlNOX1NJWkUgMTUKKyNkZWZpbmUgTUFYX1NUQUNLX1NJWkUgNjQKKyNkZWZpbmUgTUlOX1NUQUNLX1NJWkUoQUREUikgKCgoTUFYX1NUQUNLX1NJWkUpIDwgXAorCSgoKHVuc2lnbmVkIGxvbmcpY3VycmVudF90aHJlYWRfaW5mbygpKSArIFRIUkVBRF9TSVpFIC0gKEFERFIpKSkgXAorCT8gKE1BWF9TVEFDS19TSVpFKSBcCisJOiAoKCh1bnNpZ25lZCBsb25nKWN1cnJlbnRfdGhyZWFkX2luZm8oKSkgKyBUSFJFQURfU0laRSAtIChBRERSKSkpCisKKyNkZWZpbmUgSlBST0JFX0VOVFJZKHBlbnRyeSkJKGtwcm9iZV9vcGNvZGVfdCAqKXBlbnRyeQorCisvKiBBcmNoaXRlY3R1cmUgc3BlY2lmaWMgY29weSBvZiBvcmlnaW5hbCBpbnN0cnVjdGlvbiovCitzdHJ1Y3QgYXJjaF9zcGVjaWZpY19pbnNuIHsKKwkvKiBjb3B5IG9mIHRoZSBvcmlnaW5hbCBpbnN0cnVjdGlvbiAqLworCWtwcm9iZV9vcGNvZGVfdCAqaW5zbjsKK307CisKKy8qIHRyYXAzLzEgYXJlIGludHIgZ2F0ZXMgZm9yIGtwcm9iZXMuICBTbywgcmVzdG9yZSB0aGUgc3RhdHVzIG9mIElGLAorICogaWYgbmVjZXNzYXJ5LCBiZWZvcmUgZXhlY3V0aW5nIHRoZSBvcmlnaW5hbCBpbnQzLzEgKHRyYXApIGhhbmRsZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCByZXN0b3JlX2ludGVycnVwdHMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaWYgKHJlZ3MtPmVmbGFncyAmIElGX01BU0spCisJCWxvY2FsX2lycV9lbmFibGUoKTsKK30KKworZXh0ZXJuIGludCBwb3N0X2twcm9iZV9oYW5kbGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2V4dGVybiBpbnQga3Byb2JlX2ZhdWx0X2hhbmRsZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCB0cmFwbnIpOworZXh0ZXJuIGludCBrcHJvYmVfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKK2V4dGVybiBpbnQga3Byb2JlX2V4Y2VwdGlvbnNfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKKwkJCQkgICAgdW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKmRhdGEpOworI2VuZGlmCQkJCS8qIF9BU01fS1BST0JFU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvbGR0LmggYi9pbmNsdWRlL2FzbS14ODZfNjQvbGR0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWVmNjQ3YgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9sZHQuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogbGR0LmgKKyAqCisgKiBEZWZpbml0aW9ucyBvZiBzdHJ1Y3R1cmVzIHVzZWQgd2l0aCB0aGUgbW9kaWZ5X2xkdCBzeXN0ZW0gY2FsbC4KKyAqLworI2lmbmRlZiBfTElOVVhfTERUX0gKKyNkZWZpbmUgX0xJTlVYX0xEVF9ICisKKy8qIE1heGltdW0gbnVtYmVyIG9mIExEVCBlbnRyaWVzIHN1cHBvcnRlZC4gKi8KKyNkZWZpbmUgTERUX0VOVFJJRVMJODE5MgorLyogVGhlIHNpemUgb2YgZWFjaCBMRFQgZW50cnkuICovCisjZGVmaW5lIExEVF9FTlRSWV9TSVpFCTgKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKy8qIE5vdGUgb24gNjRiaXQgYmFzZSBhbmQgbGltaXQgaXMgaWdub3JlZCBhbmQgeW91IGNhbm5vdCBzZXQKKyAgIERTL0VTL0NTIG5vdCB0byB0aGUgZGVmYXVsdCB2YWx1ZXMgaWYgeW91IHN0aWxsIHdhbnQgdG8gZG8gc3lzY2FsbHMuIFRoaXMKKyAgIGNhbGwgaXMgbW9yZSBmb3IgMzJiaXQgbW9kZSB0aGVyZWZvcmUuICovCitzdHJ1Y3QgdXNlcl9kZXNjIHsKKwl1bnNpZ25lZCBpbnQgIGVudHJ5X251bWJlcjsKKwl1bnNpZ25lZCBpbnQgIGJhc2VfYWRkcjsKKwl1bnNpZ25lZCBpbnQgIGxpbWl0OworCXVuc2lnbmVkIGludCAgc2VnXzMyYml0OjE7CisJdW5zaWduZWQgaW50ICBjb250ZW50czoyOworCXVuc2lnbmVkIGludCAgcmVhZF9leGVjX29ubHk6MTsKKwl1bnNpZ25lZCBpbnQgIGxpbWl0X2luX3BhZ2VzOjE7CisJdW5zaWduZWQgaW50ICBzZWdfbm90X3ByZXNlbnQ6MTsKKwl1bnNpZ25lZCBpbnQgIHVzZWFibGU6MTsKKwl1bnNpZ25lZCBpbnQgIGxtOjE7Cit9OworCisjZGVmaW5lIE1PRElGWV9MRFRfQ09OVEVOVFNfREFUQQkwCisjZGVmaW5lIE1PRElGWV9MRFRfQ09OVEVOVFNfU1RBQ0sJMQorI2RlZmluZSBNT0RJRllfTERUX0NPTlRFTlRTX0NPREUJMgorCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvbGlua2FnZS5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2xpbmthZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTFjMmQwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L2xpbmthZ2UuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19BU01fTElOS0FHRV9ICisjZGVmaW5lIF9fQVNNX0xJTktBR0VfSAorCisvKiBOb3RoaW5nIHRvIHNlZSBoZXJlLi4uICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2xvY2FsLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvbG9jYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjljMjIzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L2xvY2FsLmgKQEAgLTAsMCArMSw3MyBAQAorI2lmbmRlZiBfQVJDSF9YODY2NF9MT0NBTF9ICisjZGVmaW5lIF9BUkNIX1g4NjY0X0xPQ0FMX0gKKworI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorCit0eXBlZGVmIHN0cnVjdAoreworCXZvbGF0aWxlIHVuc2lnbmVkIGludCBjb3VudGVyOworfSBsb2NhbF90OworCisjZGVmaW5lIExPQ0FMX0lOSVQoaSkJeyAoaSkgfQorCisjZGVmaW5lIGxvY2FsX3JlYWQodikJKCh2KS0+Y291bnRlcikKKyNkZWZpbmUgbG9jYWxfc2V0KHYsaSkJKCgodiktPmNvdW50ZXIpID0gKGkpKQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGxvY2FsX2luYyhsb2NhbF90ICp2KQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkiaW5jbCAlMCIKKwkJOiI9bSIgKHYtPmNvdW50ZXIpCisJCToibSIgKHYtPmNvdW50ZXIpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBsb2NhbF9kZWMobG9jYWxfdCAqdikKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJImRlY2wgJTAiCisJCToiPW0iICh2LT5jb3VudGVyKQorCQk6Im0iICh2LT5jb3VudGVyKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgbG9jYWxfYWRkKHVuc2lnbmVkIGxvbmcgaSwgbG9jYWxfdCAqdikKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJImFkZGwgJTEsJTAiCisJCToiPW0iICh2LT5jb3VudGVyKQorCQk6ImlyIiAoaSksICJtIiAodi0+Y291bnRlcikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGxvY2FsX3N1Yih1bnNpZ25lZCBsb25nIGksIGxvY2FsX3QgKnYpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSJzdWJsICUxLCUwIgorCQk6Ij1tIiAodi0+Y291bnRlcikKKwkJOiJpciIgKGkpLCAibSIgKHYtPmNvdW50ZXIpKTsKK30KKworLyogT24geDg2LCB0aGVzZSBhcmUgbm8gYmV0dGVyIHRoYW4gdGhlIGF0b21pYyB2YXJpYW50cy4gKi8KKyNkZWZpbmUgX19sb2NhbF9pbmMobCkJCWxvY2FsX2luYyhsKQorI2RlZmluZSBfX2xvY2FsX2RlYyhsKQkJbG9jYWxfZGVjKGwpCisjZGVmaW5lIF9fbG9jYWxfYWRkKGksbCkJbG9jYWxfYWRkKChpKSwobCkpCisjZGVmaW5lIF9fbG9jYWxfc3ViKGksbCkJbG9jYWxfc3ViKChpKSwobCkpCisKKy8qIFVzZSB0aGVzZSBmb3IgcGVyLWNwdSBsb2NhbF90IHZhcmlhYmxlczogb24gc29tZSBhcmNocyB0aGV5IGFyZQorICogbXVjaCBtb3JlIGVmZmljaWVudCB0aGFuIHRoZXNlIG5haXZlIGltcGxlbWVudGF0aW9ucy4gIE5vdGUgdGhleSB0YWtlCisgKiBhIHZhcmlhYmxlLCBub3QgYW4gYWRkcmVzcy4KKyAqCisgKiBUaGlzIGNvdWxkIGJlIGRvbmUgYmV0dGVyIGlmIHdlIG1vdmVkIHRoZSBwZXIgY3B1IGRhdGEgZGlyZWN0bHkKKyAqIGFmdGVyIEdTLgorICovCisjZGVmaW5lIGNwdV9sb2NhbF9yZWFkKHYpCWxvY2FsX3JlYWQoJl9fZ2V0X2NwdV92YXIodikpCisjZGVmaW5lIGNwdV9sb2NhbF9zZXQodiwgaSkJbG9jYWxfc2V0KCZfX2dldF9jcHVfdmFyKHYpLCAoaSkpCisjZGVmaW5lIGNwdV9sb2NhbF9pbmModikJbG9jYWxfaW5jKCZfX2dldF9jcHVfdmFyKHYpKQorI2RlZmluZSBjcHVfbG9jYWxfZGVjKHYpCWxvY2FsX2RlYygmX19nZXRfY3B1X3Zhcih2KSkKKyNkZWZpbmUgY3B1X2xvY2FsX2FkZChpLCB2KQlsb2NhbF9hZGQoKGkpLCAmX19nZXRfY3B1X3Zhcih2KSkKKyNkZWZpbmUgY3B1X2xvY2FsX3N1YihpLCB2KQlsb2NhbF9zdWIoKGkpLCAmX19nZXRfY3B1X3Zhcih2KSkKKworI2RlZmluZSBfX2NwdV9sb2NhbF9pbmModikJY3B1X2xvY2FsX2luYyh2KQorI2RlZmluZSBfX2NwdV9sb2NhbF9kZWModikJY3B1X2xvY2FsX2RlYyh2KQorI2RlZmluZSBfX2NwdV9sb2NhbF9hZGQoaSwgdikJY3B1X2xvY2FsX2FkZCgoaSksICh2KSkKKyNkZWZpbmUgX19jcHVfbG9jYWxfc3ViKGksIHYpCWNwdV9sb2NhbF9zdWIoKGkpLCAodikpCisKKyNlbmRpZiAvKiBfQVJDSF9JMzg2X0xPQ0FMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9tYWNoX2FwaWMuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9tYWNoX2FwaWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWNlYTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L21hY2hfYXBpYy5oCkBAIC0wLDAgKzEsMjkgQEAKKyNpZm5kZWYgX19BU01fTUFDSF9BUElDX0gKKyNkZWZpbmUgX19BU01fTUFDSF9BUElDX0gKKworLyoKKyAqIENvcHlyaWdodCAyMDA0IEphbWVzIENsZXZlcmRvbiwgSUJNLgorICogU3ViamVjdCB0byB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLCB2LjIKKyAqCisgKiBHZW5lcmljIEFQSUMgc3ViLWFyY2ggZGVmaW5lcy4KKyAqCisgKiBIYWNrZWQgZm9yIHg4Ni02NCBieSBKYW1lcyBDbGV2ZXJkb24gZnJvbSBpMzg2IGFyY2hpdGVjdHVyZSBjb2RlIGJ5CisgKiBNYXJ0aW4gQmxpZ2gsIEFuZGkgS2xlZW4sIEphbWVzIEJvdHRvbWxleSwgSm9obiBTdHVsdHosIGFuZAorICogSmFtZXMgQ2xldmVyZG9uLgorICovCisKKyNpbmNsdWRlIDxhc20vZ2VuYXBpYy5oPgorCisjZGVmaW5lIElOVF9ERUxJVkVSWV9NT0RFIChnZW5hcGljLT5pbnRfZGVsaXZlcnlfbW9kZSkKKyNkZWZpbmUgSU5UX0RFU1RfTU9ERSAoZ2VuYXBpYy0+aW50X2Rlc3RfbW9kZSkKKyNkZWZpbmUgSU5UX0RFTElWRVJZX0RFU1QgKGdlbmFwaWMtPmludF9kZWxpdmVyeV9kZXN0KQorI2RlZmluZSBUQVJHRVRfQ1BVUwkgIChnZW5hcGljLT50YXJnZXRfY3B1cygpKQorI2RlZmluZSBhcGljX2lkX3JlZ2lzdGVyZWQgKGdlbmFwaWMtPmFwaWNfaWRfcmVnaXN0ZXJlZCkKKyNkZWZpbmUgaW5pdF9hcGljX2xkciAoZ2VuYXBpYy0+aW5pdF9hcGljX2xkcikKKyNkZWZpbmUgc2VuZF9JUElfbWFzayAoZ2VuYXBpYy0+c2VuZF9JUElfbWFzaykKKyNkZWZpbmUgc2VuZF9JUElfYWxsYnV0c2VsZiAoZ2VuYXBpYy0+c2VuZF9JUElfYWxsYnV0c2VsZikKKyNkZWZpbmUgc2VuZF9JUElfYWxsIChnZW5hcGljLT5zZW5kX0lQSV9hbGwpCisjZGVmaW5lIGNwdV9tYXNrX3RvX2FwaWNpZCAoZ2VuYXBpYy0+Y3B1X21hc2tfdG9fYXBpY2lkKQorI2RlZmluZSBwaHlzX3BrZ19pZAkoZ2VuYXBpYy0+cGh5c19wa2dfaWQpCisKKyNlbmRpZiAvKiBfX0FTTV9NQUNIX0FQSUNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L21jMTQ2ODE4cnRjLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvbWMxNDY4MThydGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmUzMDA5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L21jMTQ2ODE4cnRjLmgKQEAgLTAsMCArMSwyOSBAQAorLyoKKyAqIE1hY2hpbmUgZGVwZW5kZW50IGFjY2VzcyBmdW5jdGlvbnMgZm9yIFJUQyByZWdpc3RlcnMuCisgKi8KKyNpZm5kZWYgX0FTTV9NQzE0NjgxOFJUQ19ICisjZGVmaW5lIF9BU01fTUMxNDY4MThSVENfSAorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNpZm5kZWYgUlRDX1BPUlQKKyNkZWZpbmUgUlRDX1BPUlQoeCkJKDB4NzAgKyAoeCkpCisjZGVmaW5lIFJUQ19BTFdBWVNfQkNECTEJLyogUlRDIG9wZXJhdGVzIGluIGJpbmFyeSBtb2RlICovCisjZW5kaWYKKworLyoKKyAqIFRoZSB5ZXQgc3VwcG9ydGVkIG1hY2hpbmVzIGFsbCBhY2Nlc3MgdGhlIFJUQyBpbmRleCByZWdpc3RlciB2aWEKKyAqIGFuIElTQSBwb3J0IGFjY2VzcyBidXQgdGhlIHdheSB0byBhY2Nlc3MgdGhlIGRhdGUgcmVnaXN0ZXIgZGlmZmVycyAuLi4KKyAqLworI2RlZmluZSBDTU9TX1JFQUQoYWRkcikgKHsgXAorb3V0Yl9wKChhZGRyKSxSVENfUE9SVCgwKSk7IFwKK2luYl9wKFJUQ19QT1JUKDEpKTsgXAorfSkKKyNkZWZpbmUgQ01PU19XUklURSh2YWwsIGFkZHIpICh7IFwKK291dGJfcCgoYWRkciksUlRDX1BPUlQoMCkpOyBcCitvdXRiX3AoKHZhbCksUlRDX1BPUlQoMSkpOyBcCit9KQorCisjZGVmaW5lIFJUQ19JUlEgOAorCisjZW5kaWYgLyogX0FTTV9NQzE0NjgxOFJUQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvbWNlLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvbWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY5MjQ5ZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9tY2UuaApAQCAtMCwwICsxLDgwIEBACisjaWZuZGVmIF9BU01fTUNFX0gKKyNkZWZpbmUgX0FTTV9NQ0VfSCAxCisKKyNpbmNsdWRlIDxhc20vaW9jdGxzLmg+CisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisKKy8qIAorICogTWFjaGluZSBDaGVjayBzdXBwb3J0IGZvciB4ODYKKyAqLworCisjZGVmaW5lIE1DR19DVExfUCAgICAgICAgKDFVTDw8OCkgICAvKiBNQ0dfQ0FQIHJlZ2lzdGVyIGF2YWlsYWJsZSAqLworCisjZGVmaW5lIE1DR19TVEFUVVNfUklQViAgKDFVTDw8MCkgICAvKiByZXN0YXJ0IGlwIHZhbGlkICovCisjZGVmaW5lIE1DR19TVEFUVVNfRUlQViAgKDFVTDw8MSkgICAvKiBlaXAgcG9pbnRzIHRvIGNvcnJlY3QgaW5zdHJ1Y3Rpb24gKi8KKyNkZWZpbmUgTUNHX1NUQVRVU19NQ0lQICAoMVVMPDwyKSAgIC8qIG1hY2hpbmUgY2hlY2sgaW4gcHJvZ3Jlc3MgKi8KKworI2RlZmluZSBNQ0lfU1RBVFVTX1ZBTCAgICgxVUw8PDYzKSAgLyogdmFsaWQgZXJyb3IgKi8KKyNkZWZpbmUgTUNJX1NUQVRVU19PVkVSICAoMVVMPDw2MikgIC8qIHByZXZpb3VzIGVycm9ycyBsb3N0ICovCisjZGVmaW5lIE1DSV9TVEFUVVNfVUMgICAgKDFVTDw8NjEpICAvKiB1bmNvcnJlY3RlZCBlcnJvciAqLworI2RlZmluZSBNQ0lfU1RBVFVTX0VOICAgICgxVUw8PDYwKSAgLyogZXJyb3IgZW5hYmxlZCAqLworI2RlZmluZSBNQ0lfU1RBVFVTX01JU0NWICgxVUw8PDU5KSAgLyogbWlzYyBlcnJvciByZWcuIHZhbGlkICovCisjZGVmaW5lIE1DSV9TVEFUVVNfQUREUlYgKDFVTDw8NTgpICAvKiBhZGRyIHJlZy4gdmFsaWQgKi8KKyNkZWZpbmUgTUNJX1NUQVRVU19QQ0MgICAoMVVMPDw1NykgIC8qIHByb2Nlc3NvciBjb250ZXh0IGNvcnJ1cHQgKi8KKworLyogRmllbGRzIGFyZSB6ZXJvIHdoZW4gbm90IGF2YWlsYWJsZSAqLworc3RydWN0IG1jZSB7CisJX191NjQgc3RhdHVzOworCV9fdTY0IG1pc2M7CisJX191NjQgYWRkcjsKKwlfX3U2NCBtY2dzdGF0dXM7CisJX191NjQgcmlwOwkKKwlfX3U2NCB0c2M7CS8qIGNwdSB0aW1lIHN0YW1wIGNvdW50ZXIgKi8KKwlfX3U2NCByZXMxOwkvKiBmb3IgZnV0dXJlIGV4dGVuc2lvbiAqLwkKKwlfX3U2NCByZXMyOwkvKiBkaXRvLiAqLworCV9fdTggIGNzOwkJLyogY29kZSBzZWdtZW50ICovCisJX191OCAgYmFuazsJLyogbWFjaGluZSBjaGVjayBiYW5rICovCisJX191OCAgY3B1OwkvKiBjcHUgdGhhdCByYWlzZWQgdGhlIGVycm9yICovCisJX191OCAgZmluaXNoZWQ7ICAgLyogZW50cnkgaXMgdmFsaWQgKi8KKwlfX3UzMiBwYWQ7ICAgCit9OworCisvKiAKKyAqIFRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIGFsbCBkYXRhIHJlbGF0ZWQgdG8gdGhlIE1DRSBsb2cuCisgKiBBbHNvIGNhcnJpZXMgYSBzaWduYXR1cmUgdG8gbWFrZSBpdCBlYXNpZXIgdG8gZmluZCBmcm9tIGV4dGVybmFsIGRlYnVnZ2luZyB0b29scy4KKyAqIEVhY2ggZW50cnkgaXMgb25seSB2YWxpZCB3aGVuIGl0cyBmaW5pc2hlZCBmbGFnIGlzIHNldC4KKyAqLworCisjZGVmaW5lIE1DRV9MT0dfTEVOIDMyCisKK3N0cnVjdCBtY2VfbG9nIHsgCisJY2hhciBzaWduYXR1cmVbMTJdOyAvKiAiTUFDSElORUNIRUNLIiAqLyAKKwl1bnNpZ25lZCBsZW47ICAJICAgIC8qID0gTUNFX0xPR19MRU4gKi8gCisJdW5zaWduZWQgbmV4dDsKKwl1bnNpZ25lZCBmbGFnczsKKwl1bnNpZ25lZCBwYWQwOyAKKwlzdHJ1Y3QgbWNlIGVudHJ5W01DRV9MT0dfTEVOXTsKK307CisKKyNkZWZpbmUgTUNFX09WRVJGTE9XIDAJCS8qIGJpdCAwIGluIGZsYWdzIG1lYW5zIG92ZXJmbG93ICovCisKKyNkZWZpbmUgTUNFX0xPR19TSUdOQVRVUkUgCSJNQUNISU5FQ0hFQ0siCisKKyNkZWZpbmUgTUNFX0dFVF9SRUNPUkRfTEVOICAgX0lPUignTScsIDEsIGludCkKKyNkZWZpbmUgTUNFX0dFVF9MT0dfTEVOICAgICAgX0lPUignTScsIDIsIGludCkKKyNkZWZpbmUgTUNFX0dFVENMRUFSX0ZMQUdTICAgX0lPUignTScsIDMsIGludCkKKworLyogU29mdHdhcmUgZGVmaW5lZCBiYW5rcyAqLworI2RlZmluZSBNQ0VfRVhURU5ERURfQkFOSwkxMjgKKyNkZWZpbmUgTUNFX1RIRVJNQUxfQkFOSwlNQ0VfRVhURU5ERURfQkFOSyArIDAKKwordm9pZCBtY2VfbG9nKHN0cnVjdCBtY2UgKm0pOworI2lmZGVmIENPTkZJR19YODZfTUNFX0lOVEVMCit2b2lkIG1jZV9pbnRlbF9mZWF0dXJlX2luaXQoc3RydWN0IGNwdWluZm9feDg2ICpjKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgbWNlX2ludGVsX2ZlYXR1cmVfaW5pdChzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCit7Cit9CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvbW1hbi5oIGIvaW5jbHVkZS9hc20teDg2XzY0L21tYW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGU2MGE0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L21tYW4uaApAQCAtMCwwICsxLDQ0IEBACisjaWZuZGVmIF9fWDg2NjRfTU1BTl9IX18KKyNkZWZpbmUgX19YODY2NF9NTUFOX0hfXworCisjZGVmaW5lIFBST1RfUkVBRAkweDEJCS8qIHBhZ2UgY2FuIGJlIHJlYWQgKi8KKyNkZWZpbmUgUFJPVF9XUklURQkweDIJCS8qIHBhZ2UgY2FuIGJlIHdyaXR0ZW4gKi8KKyNkZWZpbmUgUFJPVF9FWEVDCTB4NAkJLyogcGFnZSBjYW4gYmUgZXhlY3V0ZWQgKi8KKyNkZWZpbmUgUFJPVF9OT05FCTB4MAkJLyogcGFnZSBjYW4gbm90IGJlIGFjY2Vzc2VkICovCisjZGVmaW5lIFBST1RfU0VNCTB4OAorI2RlZmluZSBQUk9UX0dST1dTRE9XTgkweDAxMDAwMDAwCS8qIG1wcm90ZWN0IGZsYWc6IGV4dGVuZCBjaGFuZ2UgdG8gc3RhcnQgb2YgZ3Jvd3Nkb3duIHZtYSAqLworI2RlZmluZSBQUk9UX0dST1dTVVAJMHgwMjAwMDAwMAkvKiBtcHJvdGVjdCBmbGFnOiBleHRlbmQgY2hhbmdlIHRvIGVuZCBvZiBncm93c3VwIHZtYSAqLworCisjZGVmaW5lIE1BUF9TSEFSRUQJMHgwMQkJLyogU2hhcmUgY2hhbmdlcyAqLworI2RlZmluZSBNQVBfUFJJVkFURQkweDAyCQkvKiBDaGFuZ2VzIGFyZSBwcml2YXRlICovCisjZGVmaW5lIE1BUF9UWVBFCTB4MGYJCS8qIE1hc2sgZm9yIHR5cGUgb2YgbWFwcGluZyAqLworI2RlZmluZSBNQVBfRklYRUQJMHgxMAkJLyogSW50ZXJwcmV0IGFkZHIgZXhhY3RseSAqLworI2RlZmluZSBNQVBfQU5PTllNT1VTCTB4MjAJCS8qIGRvbid0IHVzZSBhIGZpbGUgKi8KKyNkZWZpbmUgTUFQXzMyQklUCTB4NDAJCS8qIG9ubHkgZ2l2ZSBvdXQgMzJiaXQgYWRkcmVzc2VzICovCisKKyNkZWZpbmUgTUFQX0dST1dTRE9XTgkweDAxMDAJCS8qIHN0YWNrLWxpa2Ugc2VnbWVudCAqLworI2RlZmluZSBNQVBfREVOWVdSSVRFCTB4MDgwMAkJLyogRVRYVEJTWSAqLworI2RlZmluZSBNQVBfRVhFQ1VUQUJMRQkweDEwMDAJCS8qIG1hcmsgaXQgYXMgYW4gZXhlY3V0YWJsZSAqLworI2RlZmluZSBNQVBfTE9DS0VECTB4MjAwMAkJLyogcGFnZXMgYXJlIGxvY2tlZCAqLworI2RlZmluZSBNQVBfTk9SRVNFUlZFCTB4NDAwMAkJLyogZG9uJ3QgY2hlY2sgZm9yIHJlc2VydmF0aW9ucyAqLworI2RlZmluZSBNQVBfUE9QVUxBVEUJMHg4MDAwCQkvKiBwb3B1bGF0ZSAocHJlZmF1bHQpIHBhZ2V0YWJsZXMgKi8KKyNkZWZpbmUgTUFQX05PTkJMT0NLCTB4MTAwMDAJCS8qIGRvIG5vdCBibG9jayBvbiBJTyAqLworCisjZGVmaW5lIE1TX0FTWU5DCTEJCS8qIHN5bmMgbWVtb3J5IGFzeW5jaHJvbm91c2x5ICovCisjZGVmaW5lIE1TX0lOVkFMSURBVEUJMgkJLyogaW52YWxpZGF0ZSB0aGUgY2FjaGVzICovCisjZGVmaW5lIE1TX1NZTkMJCTQJCS8qIHN5bmNocm9ub3VzIG1lbW9yeSBzeW5jICovCisKKyNkZWZpbmUgTUNMX0NVUlJFTlQJMQkJLyogbG9jayBhbGwgY3VycmVudCBtYXBwaW5ncyAqLworI2RlZmluZSBNQ0xfRlVUVVJFCTIJCS8qIGxvY2sgYWxsIGZ1dHVyZSBtYXBwaW5ncyAqLworCisjZGVmaW5lIE1BRFZfTk9STUFMCTB4MAkJLyogZGVmYXVsdCBwYWdlLWluIGJlaGF2aW9yICovCisjZGVmaW5lIE1BRFZfUkFORE9NCTB4MQkJLyogcGFnZS1pbiBtaW5pbXVtIHJlcXVpcmVkICovCisjZGVmaW5lIE1BRFZfU0VRVUVOVElBTAkweDIJCS8qIHJlYWQtYWhlYWQgYWdncmVzc2l2ZWx5ICovCisjZGVmaW5lIE1BRFZfV0lMTE5FRUQJMHgzCQkvKiBwcmUtZmF1bHQgcGFnZXMgKi8KKyNkZWZpbmUgTUFEVl9ET05UTkVFRAkweDQJCS8qIGRpc2NhcmQgdGhlc2UgcGFnZXMgKi8KKworLyogY29tcGF0aWJpbGl0eSBmbGFncyAqLworI2RlZmluZSBNQVBfQU5PTglNQVBfQU5PTllNT1VTCisjZGVmaW5lIE1BUF9GSUxFCTAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvbW1zZWdtZW50LmggYi9pbmNsdWRlL2FzbS14ODZfNjQvbW1zZWdtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNmODBjOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9tbXNlZ21lbnQuaApAQCAtMCwwICsxLDggQEAKKyNpZm5kZWYgX0FTTV9NTVNFR01FTlRfSAorI2RlZmluZSBfQVNNX01NU0VHTUVOVF9IIDEKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcgc2VnOworfSBtbV9zZWdtZW50X3Q7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L21tdS5oIGIvaW5jbHVkZS9hc20teDg2XzY0L21tdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkYzZlZDcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvbW11LmgKQEAgLTAsMCArMSwyMCBAQAorI2lmbmRlZiBfX3g4Nl82NF9NTVVfSAorI2RlZmluZSBfX3g4Nl82NF9NTVVfSAorCisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CisKKy8qCisgKiBUaGUgeDg2XzY0IGRvZXNuJ3QgaGF2ZSBhIG1tdSBjb250ZXh0LCBidXQKKyAqIHdlIHB1dCB0aGUgc2VnbWVudCBpbmZvcm1hdGlvbiBoZXJlLgorICoKKyAqIGNwdV92bV9tYXNrIGlzIHVzZWQgdG8gb3B0aW1pemUgbGR0IGZsdXNoaW5nLgorICovCit0eXBlZGVmIHN0cnVjdCB7IAorCXZvaWQgKmxkdDsKKwlyd2xvY2tfdCBsZHRsb2NrOyAKKwlpbnQgc2l6ZTsKKwlzdHJ1Y3Qgc2VtYXBob3JlIHNlbTsgCit9IG1tX2NvbnRleHRfdDsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvbW11X2NvbnRleHQuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9tbXVfY29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2MzBkNTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvbW11X2NvbnRleHQuaApAQCAtMCwwICsxLDc5IEBACisjaWZuZGVmIF9fWDg2XzY0X01NVV9DT05URVhUX0gKKyNkZWZpbmUgX19YODZfNjRfTU1VX0NPTlRFWFRfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL2Rlc2MuaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KKyNpbmNsdWRlIDxhc20vcGRhLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KKworLyoKKyAqIHBvc3NpYmx5IGRvIHRoZSBMRFQgdW5sb2FkIGhlcmU/CisgKi8KK2ludCBpbml0X25ld19jb250ZXh0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSk7Cit2b2lkIGRlc3Ryb3lfY29udGV4dChzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CisKKyNpZmRlZiBDT05GSUdfU01QCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBlbnRlcl9sYXp5X3RsYihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJaWYgKHJlYWRfcGRhKG1tdV9zdGF0ZSkgPT0gVExCU1RBVEVfT0spIAorCQl3cml0ZV9wZGEobW11X3N0YXRlLCBUTEJTVEFURV9MQVpZKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgZW50ZXJfbGF6eV90bGIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworfQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2FkX2NyMyhwZ2RfdCAqcGdkKQoreworCWFzbSB2b2xhdGlsZSgibW92cSAlMCwlJWNyMyIgOjogInIiIChfX3BhKHBnZCkpIDogIm1lbW9yeSIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3dpdGNoX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKnByZXYsIHN0cnVjdCBtbV9zdHJ1Y3QgKm5leHQsIAorCQkJICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwl1bnNpZ25lZCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJaWYgKGxpa2VseShwcmV2ICE9IG5leHQpKSB7CisJCS8qIHN0b3AgZmx1c2ggaXBpcyBmb3IgdGhlIHByZXZpb3VzIG1tICovCisJCWNsZWFyX2JpdChjcHUsICZwcmV2LT5jcHVfdm1fbWFzayk7CisjaWZkZWYgQ09ORklHX1NNUAorCQl3cml0ZV9wZGEobW11X3N0YXRlLCBUTEJTVEFURV9PSyk7CisJCXdyaXRlX3BkYShhY3RpdmVfbW0sIG5leHQpOworI2VuZGlmCisJCXNldF9iaXQoY3B1LCAmbmV4dC0+Y3B1X3ZtX21hc2spOworCQlsb2FkX2NyMyhuZXh0LT5wZ2QpOworCisJCWlmICh1bmxpa2VseShuZXh0LT5jb250ZXh0LmxkdCAhPSBwcmV2LT5jb250ZXh0LmxkdCkpIAorCQkJbG9hZF9MRFRfbm9sb2NrKCZuZXh0LT5jb250ZXh0LCBjcHUpOworCX0KKyNpZmRlZiBDT05GSUdfU01QCisJZWxzZSB7CisJCXdyaXRlX3BkYShtbXVfc3RhdGUsIFRMQlNUQVRFX09LKTsKKwkJaWYgKHJlYWRfcGRhKGFjdGl2ZV9tbSkgIT0gbmV4dCkKKwkJCW91dF9vZl9saW5lX2J1ZygpOworCQlpZighdGVzdF9hbmRfc2V0X2JpdChjcHUsICZuZXh0LT5jcHVfdm1fbWFzaykpIHsKKwkJCS8qIFdlIHdlcmUgaW4gbGF6eSB0bGIgbW9kZSBhbmQgbGVhdmVfbW0gZGlzYWJsZWQgCisJCQkgKiB0bGIgZmx1c2ggSVBJIGRlbGl2ZXJ5LiBXZSBtdXN0IHJlbG9hZCBDUjMKKwkJCSAqIHRvIG1ha2Ugc3VyZSB0byB1c2Ugbm8gZnJlZWQgcGFnZSB0YWJsZXMuCisJCQkgKi8KKwkJCWxvYWRfY3IzKG5leHQtPnBnZCk7CisJCQlsb2FkX0xEVF9ub2xvY2soJm5leHQtPmNvbnRleHQsIGNwdSk7CisJCX0KKwl9CisjZW5kaWYKK30KKworI2RlZmluZSBkZWFjdGl2YXRlX21tKHRzayxtbSkJZG8geyBcCisJbG9hZF9nc19pbmRleCgwKTsgXAorCWFzbSB2b2xhdGlsZSgibW92bCAlMCwlJWZzIjo6InIiKDApKTsgIFwKK30gd2hpbGUoMCkKKworI2RlZmluZSBhY3RpdmF0ZV9tbShwcmV2LCBuZXh0KSBcCisJc3dpdGNoX21tKChwcmV2KSwobmV4dCksTlVMTCkKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9tbXguaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9tbXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmI3MWRhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L21teC5oCkBAIC0wLDAgKzEsMTQgQEAKKyNpZm5kZWYgX0FTTV9NTVhfSAorI2RlZmluZSBfQVNNX01NWF9ICisKKy8qCisgKglNTVggM0Rub3chIGhlbHBlciBvcGVyYXRpb25zCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisgCitleHRlcm4gdm9pZCAqX21teF9tZW1jcHkodm9pZCAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHNpemVfdCBzaXplKTsKK2V4dGVybiB2b2lkIG1teF9jbGVhcl9wYWdlKHZvaWQgKnBhZ2UpOworZXh0ZXJuIHZvaWQgbW14X2NvcHlfcGFnZSh2b2lkICp0bywgdm9pZCAqZnJvbSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L21tem9uZS5oIGIvaW5jbHVkZS9hc20teDg2XzY0L21tem9uZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5NWI3YzIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvbW16b25lLmgKQEAgLTAsMCArMSw2MyBAQAorLyogSzggTlVNQSBzdXBwb3J0ICovCisvKiBDb3B5cmlnaHQgMjAwMiwyMDAzIGJ5IEFuZGkgS2xlZW4sIFN1U0UgTGFicyAqLworLyogMi41IFZlcnNpb24gbG9vc2VseSBiYXNlZCBvbiB0aGUgTlVNQVEgQ29kZSBieSBQYXQgR2F1Z2hlbi4gKi8KKyNpZm5kZWYgX0FTTV9YODZfNjRfTU1aT05FX0gKKyNkZWZpbmUgX0FTTV9YODZfNjRfTU1aT05FX0ggMQorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpZmRlZiBDT05GSUdfRElTQ09OVElHTUVNCisKKyNkZWZpbmUgVklSVFVBTF9CVUdfT04oeCkgCisKKyNpbmNsdWRlIDxhc20vc21wLmg+CisKKyNkZWZpbmUgTk9ERU1BUFNJWkUgMHhmZgorCisvKiBTaW1wbGUgcGVyZmVjdCBoYXNoIHRvIG1hcCBwaHlzaWNhbCBhZGRyZXNzZXMgdG8gbm9kZSBudW1iZXJzICovCitleHRlcm4gaW50IG1lbW5vZGVfc2hpZnQ7IAorZXh0ZXJuIHU4ICBtZW1ub2RlbWFwW05PREVNQVBTSVpFXTsgCitleHRlcm4gaW50IG1heG5vZGU7CisKK2V4dGVybiBzdHJ1Y3QgcGdsaXN0X2RhdGEgKm5vZGVfZGF0YVtdOworCitzdGF0aWMgaW5saW5lIF9fYXR0cmlidXRlX18oKHB1cmUpKSBpbnQgcGh5c190b19uaWQodW5zaWduZWQgbG9uZyBhZGRyKSAKK3sgCisJaW50IG5pZDsgCisJVklSVFVBTF9CVUdfT04oKGFkZHIgPj4gbWVtbm9kZV9zaGlmdCkgPj0gTk9ERU1BUFNJWkUpOworCW5pZCA9IG1lbW5vZGVtYXBbYWRkciA+PiBtZW1ub2RlX3NoaWZ0XTsgCisJVklSVFVBTF9CVUdfT04obmlkID4gbWF4bm9kZSk7IAorCXJldHVybiBuaWQ7IAorfSAKKworI2RlZmluZSBwZm5fdG9fbmlkKHBmbikgcGh5c190b19uaWQoKHVuc2lnbmVkIGxvbmcpKHBmbikgPDwgUEFHRV9TSElGVCkKKworI2RlZmluZSBrdmFkZHJfdG9fbmlkKGthZGRyKQlwaHlzX3RvX25pZChfX3BhKGthZGRyKSkKKyNkZWZpbmUgTk9ERV9EQVRBKG5pZCkJCShub2RlX2RhdGFbbmlkXSkKKworI2RlZmluZSBub2RlX21lbV9tYXAobmlkKQkoTk9ERV9EQVRBKG5pZCktPm5vZGVfbWVtX21hcCkKKworI2RlZmluZSBub2RlX21lbV9tYXAobmlkKQkoTk9ERV9EQVRBKG5pZCktPm5vZGVfbWVtX21hcCkKKyNkZWZpbmUgbm9kZV9zdGFydF9wZm4obmlkKQkoTk9ERV9EQVRBKG5pZCktPm5vZGVfc3RhcnRfcGZuKQorI2RlZmluZSBub2RlX2VuZF9wZm4obmlkKSAgICAgICAoTk9ERV9EQVRBKG5pZCktPm5vZGVfc3RhcnRfcGZuICsgXAorCQkJCSBOT0RFX0RBVEEobmlkKS0+bm9kZV9zcGFubmVkX3BhZ2VzKQorCisjZGVmaW5lIGxvY2FsX21hcG5yKGt2YWRkcikgXAorCSggKF9fcGEoa3ZhZGRyKSA+PiBQQUdFX1NISUZUKSAtIG5vZGVfc3RhcnRfcGZuKGt2YWRkcl90b19uaWQoa3ZhZGRyKSkgKQorCisvKiBBSzogdGhpcyBjdXJyZW50bHkgZG9lc24ndCBkZWFsIHdpdGggaW52YWxpZCBhZGRyZXNzZXMuIFdlJ2xsIHNlZSAKKyAgIGlmIHRoZSAyLjUga2VybmVsIGRvZXNuJ3QgcGFzcyB0aGVtCisgICAoMi40IHVzZWQgdG8pLiAqLworI2RlZmluZSBwZm5fdG9fcGFnZShwZm4pICh7IFwKKwlpbnQgbmlkID0gcGh5c190b19uaWQoKCh1bnNpZ25lZCBsb25nKShwZm4pKSA8PCBQQUdFX1NISUZUKTsgCVwKKwkoKHBmbikgLSBub2RlX3N0YXJ0X3BmbihuaWQpKSArIG5vZGVfbWVtX21hcChuaWQpOwkJXAorfSkKKworI2RlZmluZSBwYWdlX3RvX3BmbihwYWdlKSBcCisJKGxvbmcpKCgocGFnZSkgLSBwYWdlX3pvbmUocGFnZSktPnpvbmVfbWVtX21hcCkgKyBwYWdlX3pvbmUocGFnZSktPnpvbmVfc3RhcnRfcGZuKQorCisjZGVmaW5lIHBmbl92YWxpZChwZm4pICgocGZuKSA+PSBudW1fcGh5c3BhZ2VzID8gMCA6IFwKKwkJCSh7IHU4IG5pZF9fID0gcGZuX3RvX25pZChwZm4pOyBcCisJCQkgICBuaWRfXyAhPSAweGZmICYmIChwZm4pID49IG5vZGVfc3RhcnRfcGZuKG5pZF9fKSAmJiAocGZuKSA8PSBub2RlX2VuZF9wZm4obmlkX18pOyB9KSkKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvbW9kdWxlLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvbW9kdWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdmOGY2OQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9tb2R1bGUuaApAQCAtMCwwICsxLDEwIEBACisjaWZuZGVmIF9BU01fWDg2NjRfTU9EVUxFX0gKKyNkZWZpbmUgX0FTTV9YODY2NF9NT0RVTEVfSAorCitzdHJ1Y3QgbW9kX2FyY2hfc3BlY2lmaWMge307IAorCisjZGVmaW5lIEVsZl9TaGRyIEVsZjY0X1NoZHIKKyNkZWZpbmUgRWxmX1N5bSBFbGY2NF9TeW0KKyNkZWZpbmUgRWxmX0VoZHIgRWxmNjRfRWhkcgorCisjZW5kaWYgCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvbXBzcGVjLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvbXBzcGVjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzMxZjZhMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9tcHNwZWMuaApAQCAtMCwwICsxLDI0MSBAQAorI2lmbmRlZiBfX0FTTV9NUFNQRUNfSAorI2RlZmluZSBfX0FTTV9NUFNQRUNfSAorCisvKgorICogU3RydWN0dXJlIGRlZmluaXRpb25zIGZvciBTTVAgbWFjaGluZXMgZm9sbG93aW5nIHRoZQorICogSW50ZWwgTXVsdGlwcm9jZXNzaW5nIFNwZWNpZmljYXRpb24gMS4xIGFuZCAxLjQuCisgKi8KKworLyoKKyAqIFRoaXMgdGFnIGlkZW50aWZpZXMgd2hlcmUgdGhlIFNNUCBjb25maWd1cmF0aW9uCisgKiBpbmZvcm1hdGlvbiBpcy4gCisgKi8KKyAKKyNkZWZpbmUgU01QX01BR0lDX0lERU5UCSgoJ18nPDwyNCl8KCdQJzw8MTYpfCgnTSc8PDgpfCdfJykKKworLyoKKyAqIEEgbWF4aW11bSBvZiAyNTUgQVBJQ3Mgd2l0aCB0aGUgY3VycmVudCBBUElDIElEIGFyY2hpdGVjdHVyZS4KKyAqLworI2RlZmluZSBNQVhfQVBJQ1MgMTI4CisKK3N0cnVjdCBpbnRlbF9tcF9mbG9hdGluZworeworCWNoYXIgbXBmX3NpZ25hdHVyZVs0XTsJCS8qICJfTVBfIiAJCQkqLworCXVuc2lnbmVkIGludCBtcGZfcGh5c3B0cjsJLyogQ29uZmlndXJhdGlvbiB0YWJsZSBhZGRyZXNzCSovCisJdW5zaWduZWQgY2hhciBtcGZfbGVuZ3RoOwkvKiBPdXIgbGVuZ3RoIChwYXJhZ3JhcGhzKQkqLworCXVuc2lnbmVkIGNoYXIgbXBmX3NwZWNpZmljYXRpb247LyogU3BlY2lmaWNhdGlvbiB2ZXJzaW9uCSovCisJdW5zaWduZWQgY2hhciBtcGZfY2hlY2tzdW07CS8qIENoZWNrc3VtIChtYWtlcyBzdW0gMCkJKi8KKwl1bnNpZ25lZCBjaGFyIG1wZl9mZWF0dXJlMTsJLyogU3RhbmRhcmQgb3IgY29uZmlndXJhdGlvbiA/IAkqLworCXVuc2lnbmVkIGNoYXIgbXBmX2ZlYXR1cmUyOwkvKiBCaXQ3IHNldCBmb3IgSU1DUnxQSUMJKi8KKwl1bnNpZ25lZCBjaGFyIG1wZl9mZWF0dXJlMzsJLyogVW51c2VkICgwKQkJCSovCisJdW5zaWduZWQgY2hhciBtcGZfZmVhdHVyZTQ7CS8qIFVudXNlZCAoMCkJCQkqLworCXVuc2lnbmVkIGNoYXIgbXBmX2ZlYXR1cmU1OwkvKiBVbnVzZWQgKDApCQkJKi8KK307CisKK3N0cnVjdCBtcF9jb25maWdfdGFibGUKK3sKKwljaGFyIG1wY19zaWduYXR1cmVbNF07CisjZGVmaW5lIE1QQ19TSUdOQVRVUkUgIlBDTVAiCisJdW5zaWduZWQgc2hvcnQgbXBjX2xlbmd0aDsJLyogU2l6ZSBvZiB0YWJsZSAqLworCWNoYXIgIG1wY19zcGVjOwkJCS8qIDB4MDEgKi8KKwljaGFyICBtcGNfY2hlY2tzdW07CisJY2hhciAgbXBjX29lbVs4XTsKKwljaGFyICBtcGNfcHJvZHVjdGlkWzEyXTsKKwl1bnNpZ25lZCBpbnQgbXBjX29lbXB0cjsJLyogMCBpZiBub3QgcHJlc2VudCAqLworCXVuc2lnbmVkIHNob3J0IG1wY19vZW1zaXplOwkvKiAwIGlmIG5vdCBwcmVzZW50ICovCisJdW5zaWduZWQgc2hvcnQgbXBjX29lbWNvdW50OworCXVuc2lnbmVkIGludCBtcGNfbGFwaWM7CS8qIEFQSUMgYWRkcmVzcyAqLworCXVuc2lnbmVkIGludCByZXNlcnZlZDsKK307CisKKy8qIEZvbGxvd2VkIGJ5IGVudHJpZXMgKi8KKworI2RlZmluZQlNUF9QUk9DRVNTT1IJMAorI2RlZmluZQlNUF9CVVMJCTEKKyNkZWZpbmUJTVBfSU9BUElDCTIKKyNkZWZpbmUJTVBfSU5UU1JDCTMKKyNkZWZpbmUJTVBfTElOVFNSQwk0CisKK3N0cnVjdCBtcGNfY29uZmlnX3Byb2Nlc3NvcgoreworCXVuc2lnbmVkIGNoYXIgbXBjX3R5cGU7CisJdW5zaWduZWQgY2hhciBtcGNfYXBpY2lkOwkvKiBMb2NhbCBBUElDIG51bWJlciAqLworCXVuc2lnbmVkIGNoYXIgbXBjX2FwaWN2ZXI7CS8qIEl0cyB2ZXJzaW9ucyAqLworCXVuc2lnbmVkIGNoYXIgbXBjX2NwdWZsYWc7CisjZGVmaW5lIENQVV9FTkFCTEVECQkxCS8qIFByb2Nlc3NvciBpcyBhdmFpbGFibGUgKi8KKyNkZWZpbmUgQ1BVX0JPT1RQUk9DRVNTT1IJMgkvKiBQcm9jZXNzb3IgaXMgdGhlIEJQICovCisJdW5zaWduZWQgaW50IG1wY19jcHVmZWF0dXJlOwkJCisjZGVmaW5lIENQVV9TVEVQUElOR19NQVNLIDB4MEYKKyNkZWZpbmUgQ1BVX01PREVMX01BU0sJMHhGMAorI2RlZmluZSBDUFVfRkFNSUxZX01BU0sJMHhGMDAKKwl1bnNpZ25lZCBpbnQgbXBjX2ZlYXR1cmVmbGFnOwkvKiBDUFVJRCBmZWF0dXJlIHZhbHVlICovCisJdW5zaWduZWQgaW50IG1wY19yZXNlcnZlZFsyXTsKK307CisKK3N0cnVjdCBtcGNfY29uZmlnX2J1cworeworCXVuc2lnbmVkIGNoYXIgbXBjX3R5cGU7CisJdW5zaWduZWQgY2hhciBtcGNfYnVzaWQ7CisJdW5zaWduZWQgY2hhciBtcGNfYnVzdHlwZVs2XSBfX2F0dHJpYnV0ZSgocGFja2VkKSk7Cit9OworCisvKiBMaXN0IG9mIEJ1cyBUeXBlIHN0cmluZyB2YWx1ZXMsIEludGVsIE1QIFNwZWMuICovCisjZGVmaW5lIEJVU1RZUEVfRUlTQQkiRUlTQSIKKyNkZWZpbmUgQlVTVFlQRV9JU0EJIklTQSIKKyNkZWZpbmUgQlVTVFlQRV9JTlRFUk4JIklOVEVSTiIJLyogSW50ZXJuYWwgQlVTICovCisjZGVmaW5lIEJVU1RZUEVfTUNBCSJNQ0EiCisjZGVmaW5lIEJVU1RZUEVfVkwJIlZMIgkJLyogTG9jYWwgYnVzICovCisjZGVmaW5lIEJVU1RZUEVfUENJCSJQQ0kiCisjZGVmaW5lIEJVU1RZUEVfUENNQ0lBCSJQQ01DSUEiCisjZGVmaW5lIEJVU1RZUEVfQ0JVUwkiQ0JVUyIKKyNkZWZpbmUgQlVTVFlQRV9DQlVTSUkJIkNCVVNJSSIKKyNkZWZpbmUgQlVTVFlQRV9GVVRVUkUJIkZVVFVSRSIKKyNkZWZpbmUgQlVTVFlQRV9NQkkJIk1CSSIKKyNkZWZpbmUgQlVTVFlQRV9NQklJCSJNQklJIgorI2RlZmluZSBCVVNUWVBFX01QSQkiTVBJIgorI2RlZmluZSBCVVNUWVBFX01QU0EJIk1QU0EiCisjZGVmaW5lIEJVU1RZUEVfTlVCVVMJIk5VQlVTIgorI2RlZmluZSBCVVNUWVBFX1RDCSJUQyIKKyNkZWZpbmUgQlVTVFlQRV9WTUUJIlZNRSIKKyNkZWZpbmUgQlVTVFlQRV9YUFJFU1MJIlhQUkVTUyIKKworc3RydWN0IG1wY19jb25maWdfaW9hcGljCit7CisJdW5zaWduZWQgY2hhciBtcGNfdHlwZTsKKwl1bnNpZ25lZCBjaGFyIG1wY19hcGljaWQ7CisJdW5zaWduZWQgY2hhciBtcGNfYXBpY3ZlcjsKKwl1bnNpZ25lZCBjaGFyIG1wY19mbGFnczsKKyNkZWZpbmUgTVBDX0FQSUNfVVNBQkxFCQkweDAxCisJdW5zaWduZWQgaW50IG1wY19hcGljYWRkcjsKK307CisKK3N0cnVjdCBtcGNfY29uZmlnX2ludHNyYworeworCXVuc2lnbmVkIGNoYXIgbXBjX3R5cGU7CisJdW5zaWduZWQgY2hhciBtcGNfaXJxdHlwZTsKKwl1bnNpZ25lZCBzaG9ydCBtcGNfaXJxZmxhZzsKKwl1bnNpZ25lZCBjaGFyIG1wY19zcmNidXM7CisJdW5zaWduZWQgY2hhciBtcGNfc3JjYnVzaXJxOworCXVuc2lnbmVkIGNoYXIgbXBjX2RzdGFwaWM7CisJdW5zaWduZWQgY2hhciBtcGNfZHN0aXJxOworfTsKKworZW51bSBtcF9pcnFfc291cmNlX3R5cGVzIHsKKwltcF9JTlQgPSAwLAorCW1wX05NSSA9IDEsCisJbXBfU01JID0gMiwKKwltcF9FeHRJTlQgPSAzCit9OworCisjZGVmaW5lIE1QX0lSUURJUl9ERUZBVUxUCTAKKyNkZWZpbmUgTVBfSVJRRElSX0hJR0gJCTEKKyNkZWZpbmUgTVBfSVJRRElSX0xPVwkJMworCisKK3N0cnVjdCBtcGNfY29uZmlnX2xpbnRzcmMKK3sKKwl1bnNpZ25lZCBjaGFyIG1wY190eXBlOworCXVuc2lnbmVkIGNoYXIgbXBjX2lycXR5cGU7CisJdW5zaWduZWQgc2hvcnQgbXBjX2lycWZsYWc7CisJdW5zaWduZWQgY2hhciBtcGNfc3JjYnVzaWQ7CisJdW5zaWduZWQgY2hhciBtcGNfc3JjYnVzaXJxOworCXVuc2lnbmVkIGNoYXIgbXBjX2Rlc3RhcGljOwkKKyNkZWZpbmUgTVBfQVBJQ19BTEwJMHhGRgorCXVuc2lnbmVkIGNoYXIgbXBjX2Rlc3RhcGljbGludDsKK307CisKKy8qCisgKglEZWZhdWx0IGNvbmZpZ3VyYXRpb25zCisgKgorICoJMQkyIENQVSBJU0EgODI0ODlEWAorICoJMgkyIENQVSBFSVNBIDgyNDg5RFggbmVpdGhlciBJUlEgMCB0aW1lciBub3IgSVJRIDEzIERNQSBjaGFpbmluZworICoJMwkyIENQVSBFSVNBIDgyNDg5RFgKKyAqCTQJMiBDUFUgTUNBIDgyNDg5RFgKKyAqCTUJMiBDUFUgSVNBK1BDSQorICoJNgkyIENQVSBFSVNBK1BDSQorICoJNwkyIENQVSBNQ0ErUENJCisgKi8KKworI2RlZmluZSBNQVhfTVBfQlVTU0VTIDI1NgorI2RlZmluZSBNQVhfSVJRX1NPVVJDRVMgMjU2CitlbnVtIG1wX2J1c3R5cGUgeworCU1QX0JVU19JU0EgPSAxLAorCU1QX0JVU19FSVNBLAorCU1QX0JVU19QQ0ksCisJTVBfQlVTX01DQQorfTsKK2V4dGVybiB1bnNpZ25lZCBjaGFyIG1wX2J1c19pZF90b190eXBlIFtNQVhfTVBfQlVTU0VTXTsKK2V4dGVybiBpbnQgbXBfYnVzX2lkX3RvX3BjaV9idXMgW01BWF9NUF9CVVNTRVNdOworCitleHRlcm4gdW5zaWduZWQgaW50IGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZDsKK2V4dGVybiBpbnQgc21wX2ZvdW5kX2NvbmZpZzsKK2V4dGVybiB2b2lkIGZpbmRfc21wX2NvbmZpZyAodm9pZCk7CitleHRlcm4gdm9pZCBnZXRfc21wX2NvbmZpZyAodm9pZCk7CitleHRlcm4gaW50IG5yX2lvYXBpY3M7CitleHRlcm4gaW50IGFwaWNfdmVyc2lvbiBbTUFYX0FQSUNTXTsKK2V4dGVybiBpbnQgbXBfaXJxX2VudHJpZXM7CitleHRlcm4gc3RydWN0IG1wY19jb25maWdfaW50c3JjIG1wX2lycXMgW01BWF9JUlFfU09VUkNFU107CitleHRlcm4gaW50IG1wY19kZWZhdWx0X3R5cGU7CitleHRlcm4gdW5zaWduZWQgbG9uZyBtcF9sYXBpY19hZGRyOworZXh0ZXJuIGludCBwaWNfbW9kZTsKKworI2lmZGVmIENPTkZJR19BQ1BJX0JPT1QKK2V4dGVybiB2b2lkIG1wX3JlZ2lzdGVyX2xhcGljICh1OCBpZCwgdTggZW5hYmxlZCk7CitleHRlcm4gdm9pZCBtcF9yZWdpc3Rlcl9sYXBpY19hZGRyZXNzICh1NjQgYWRkcmVzcyk7CisKKyNpZmRlZiBDT05GSUdfWDg2X0lPX0FQSUMKK2V4dGVybiB2b2lkIG1wX3JlZ2lzdGVyX2lvYXBpYyAodTggaWQsIHUzMiBhZGRyZXNzLCB1MzIgZ3NpX2Jhc2UpOworZXh0ZXJuIHZvaWQgbXBfb3ZlcnJpZGVfbGVnYWN5X2lycSAodTggYnVzX2lycSwgdTggcG9sYXJpdHksIHU4IHRyaWdnZXIsIHUzMiBnc2kpOworZXh0ZXJuIHZvaWQgbXBfY29uZmlnX2FjcGlfbGVnYWN5X2lycXMgKHZvaWQpOworZXh0ZXJuIGludCBtcF9yZWdpc3Rlcl9nc2kgKHUzMiBnc2ksIGludCBlZGdlX2xldmVsLCBpbnQgYWN0aXZlX2hpZ2hfbG93KTsKKyNlbmRpZiAvKkNPTkZJR19YODZfSU9fQVBJQyovCisjZW5kaWYKKworZXh0ZXJuIGludCB1c2luZ19hcGljX3RpbWVyOworCisjZGVmaW5lIFBIWVNJRF9BUlJBWV9TSVpFCUJJVFNfVE9fTE9OR1MoTUFYX0FQSUNTKQorCitzdHJ1Y3QgcGh5c2lkX21hc2sKK3sKKwl1bnNpZ25lZCBsb25nIG1hc2tbUEhZU0lEX0FSUkFZX1NJWkVdOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgcGh5c2lkX21hc2sgcGh5c2lkX21hc2tfdDsKKworI2RlZmluZSBwaHlzaWRfc2V0KHBoeXNpZCwgbWFwKQkJCXNldF9iaXQocGh5c2lkLCAobWFwKS5tYXNrKQorI2RlZmluZSBwaHlzaWRfY2xlYXIocGh5c2lkLCBtYXApCQljbGVhcl9iaXQocGh5c2lkLCAobWFwKS5tYXNrKQorI2RlZmluZSBwaHlzaWRfaXNzZXQocGh5c2lkLCBtYXApCQl0ZXN0X2JpdChwaHlzaWQsIChtYXApLm1hc2spCisjZGVmaW5lIHBoeXNpZF90ZXN0X2FuZF9zZXQocGh5c2lkLCBtYXApCXRlc3RfYW5kX3NldF9iaXQocGh5c2lkLCAobWFwKS5tYXNrKQorCisjZGVmaW5lIHBoeXNpZHNfYW5kKGRzdCwgc3JjMSwgc3JjMikJCWJpdG1hcF9hbmQoKGRzdCkubWFzaywgKHNyYzEpLm1hc2ssIChzcmMyKS5tYXNrLCBNQVhfQVBJQ1MpCisjZGVmaW5lIHBoeXNpZHNfb3IoZHN0LCBzcmMxLCBzcmMyKQkJYml0bWFwX29yKChkc3QpLm1hc2ssIChzcmMxKS5tYXNrLCAoc3JjMikubWFzaywgTUFYX0FQSUNTKQorI2RlZmluZSBwaHlzaWRzX2NsZWFyKG1hcCkJCQliaXRtYXBfemVybygobWFwKS5tYXNrLCBNQVhfQVBJQ1MpCisjZGVmaW5lIHBoeXNpZHNfY29tcGxlbWVudChkc3QsIHNyYykJCWJpdG1hcF9jb21wbGVtZW50KChkc3QpLm1hc2ssIChzcmMpLm1hc2ssIE1BWF9BUElDUykKKyNkZWZpbmUgcGh5c2lkc19lbXB0eShtYXApCQkJYml0bWFwX2VtcHR5KChtYXApLm1hc2ssIE1BWF9BUElDUykKKyNkZWZpbmUgcGh5c2lkc19lcXVhbChtYXAxLCBtYXAyKQkJYml0bWFwX2VxdWFsKChtYXAxKS5tYXNrLCAobWFwMikubWFzaywgTUFYX0FQSUNTKQorI2RlZmluZSBwaHlzaWRzX3dlaWdodChtYXApCQkJYml0bWFwX3dlaWdodCgobWFwKS5tYXNrLCBNQVhfQVBJQ1MpCisjZGVmaW5lIHBoeXNpZHNfc2hpZnRfcmlnaHQoZCwgcywgbikJCWJpdG1hcF9zaGlmdF9yaWdodCgoZCkubWFzaywgKHMpLm1hc2ssIG4sIE1BWF9BUElDUykKKyNkZWZpbmUgcGh5c2lkc19zaGlmdF9sZWZ0KGQsIHMsIG4pCQliaXRtYXBfc2hpZnRfbGVmdCgoZCkubWFzaywgKHMpLm1hc2ssIG4sIE1BWF9BUElDUykKKyNkZWZpbmUgcGh5c2lkc19jb2VyY2UobWFwKQkJCSgobWFwKS5tYXNrWzBdKQorCisjZGVmaW5lIHBoeXNpZHNfcHJvbW90ZShwaHlzaWRzKQkJCQkJCVwKKwkoewkJCQkJCQkJCVwKKwkJcGh5c2lkX21hc2tfdCBfX3BoeXNpZF9tYXNrID0gUEhZU0lEX01BU0tfTk9ORTsJCQlcCisJCV9fcGh5c2lkX21hc2subWFza1swXSA9IHBoeXNpZHM7CQkJCVwKKwkJX19waHlzaWRfbWFzazsJCQkJCQkJXAorCX0pCisKKyNkZWZpbmUgcGh5c2lkX21hc2tfb2ZfcGh5c2lkKHBoeXNpZCkJCQkJCQlcCisJKHsJCQkJCQkJCQlcCisJCXBoeXNpZF9tYXNrX3QgX19waHlzaWRfbWFzayA9IFBIWVNJRF9NQVNLX05PTkU7CQkJXAorCQlwaHlzaWRfc2V0KHBoeXNpZCwgX19waHlzaWRfbWFzayk7CQkJCVwKKwkJX19waHlzaWRfbWFzazsJCQkJCQkJXAorCX0pCisKKyNkZWZpbmUgUEhZU0lEX01BU0tfQUxMCQl7IHtbMCAuLi4gUEhZU0lEX0FSUkFZX1NJWkUtMV0gPSB+MFVMfSB9CisjZGVmaW5lIFBIWVNJRF9NQVNLX05PTkUJeyB7WzAgLi4uIFBIWVNJRF9BUlJBWV9TSVpFLTFdID0gMFVMfSB9CisKK2V4dGVybiBwaHlzaWRfbWFza190IHBoeXNfY3B1X3ByZXNlbnRfbWFwOworCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L21zZ2J1Zi5oIGIvaW5jbHVkZS9hc20teDg2XzY0L21zZ2J1Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkNmY5NWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvbXNnYnVmLmgKQEAgLTAsMCArMSwyNyBAQAorI2lmbmRlZiBfWDg2NjRfTVNHQlVGX0gKKyNkZWZpbmUgX1g4NjY0X01TR0JVRl9ICisKKy8qIAorICogVGhlIG1zcWlkNjRfZHMgc3RydWN0dXJlIGZvciB4ODYtNjQgYXJjaGl0ZWN0dXJlLgorICogTm90ZSBleHRyYSBwYWRkaW5nIGJlY2F1c2UgdGhpcyBzdHJ1Y3R1cmUgaXMgcGFzc2VkIGJhY2sgYW5kIGZvcnRoCisgKiBiZXR3ZWVuIGtlcm5lbCBhbmQgdXNlciBzcGFjZS4KKyAqCisgKiBQYWQgc3BhY2UgaXMgbGVmdCBmb3I6CisgKiAtIDIgbWlzY2VsbGFuZW91cyA2NC1iaXQgdmFsdWVzCisgKi8KKworc3RydWN0IG1zcWlkNjRfZHMgeworCXN0cnVjdCBpcGM2NF9wZXJtIG1zZ19wZXJtOworCV9fa2VybmVsX3RpbWVfdCBtc2dfc3RpbWU7CS8qIGxhc3QgbXNnc25kIHRpbWUgKi8KKwlfX2tlcm5lbF90aW1lX3QgbXNnX3J0aW1lOwkvKiBsYXN0IG1zZ3JjdiB0aW1lICovCisJX19rZXJuZWxfdGltZV90IG1zZ19jdGltZTsJLyogbGFzdCBjaGFuZ2UgdGltZSAqLworCXVuc2lnbmVkIGxvbmcgIG1zZ19jYnl0ZXM7CS8qIGN1cnJlbnQgbnVtYmVyIG9mIGJ5dGVzIG9uIHF1ZXVlICovCisJdW5zaWduZWQgbG9uZyAgbXNnX3FudW07CS8qIG51bWJlciBvZiBtZXNzYWdlcyBpbiBxdWV1ZSAqLworCXVuc2lnbmVkIGxvbmcgIG1zZ19xYnl0ZXM7CS8qIG1heCBudW1iZXIgb2YgYnl0ZXMgb24gcXVldWUgKi8KKwlfX2tlcm5lbF9waWRfdCBtc2dfbHNwaWQ7CS8qIHBpZCBvZiBsYXN0IG1zZ3NuZCAqLworCV9fa2VybmVsX3BpZF90IG1zZ19scnBpZDsJLyogbGFzdCByZWNlaXZlIHBpZCAqLworCXVuc2lnbmVkIGxvbmcgIF9fdW51c2VkNDsKKwl1bnNpZ25lZCBsb25nICBfX3VudXNlZDU7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9tc2kuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9tc2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWM0MjdlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L21zaS5oCkBAIC0wLDAgKzEsMTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNCBJbnRlbAorICogQ29weXJpZ2h0IChDKSBUb20gTG9uZyBOZ3V5ZW4gKHRvbS5sLm5ndXllbkBpbnRlbC5jb20pCisgKi8KKworI2lmbmRlZiBBU01fTVNJX0gKKyNkZWZpbmUgQVNNX01TSV9ICisKKyNpbmNsdWRlIDxhc20vZGVzYy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoX2FwaWMuaD4KKyNpbmNsdWRlIDxhc20vc21wLmg+CisKKyNkZWZpbmUgTEFTVF9ERVZJQ0VfVkVDVE9SCQkyMzIKKyNkZWZpbmUgTVNJX0RFU1RfTU9ERQkJCU1TSV9MT0dJQ0FMX01PREUKKyNkZWZpbmUgTVNJX1RBUkdFVF9DUFVfU0hJRlQJCTEyCisjZGVmaW5lIE1TSV9UQVJHRVRfQ1BVCQkJbG9naWNhbF9zbXBfcHJvY2Vzc29yX2lkKCkKKworI2VuZGlmIC8qIEFTTV9NU0lfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L21zci5oIGIvaW5jbHVkZS9hc20teDg2XzY0L21zci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2ZjBiZTEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvbXNyLmgKQEAgLTAsMCArMSwzODcgQEAKKyNpZm5kZWYgWDg2XzY0X01TUl9ICisjZGVmaW5lIFg4Nl82NF9NU1JfSCAxCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisvKgorICogQWNjZXNzIHRvIG1hY2hpbmUtc3BlY2lmaWMgcmVnaXN0ZXJzIChhdmFpbGFibGUgb24gNTg2IGFuZCBiZXR0ZXIgb25seSkKKyAqIE5vdGU6IHRoZSByZCogb3BlcmF0aW9ucyBtb2RpZnkgdGhlIHBhcmFtZXRlcnMgZGlyZWN0bHkgKHdpdGhvdXQgdXNpbmcKKyAqIHBvaW50ZXIgaW5kaXJlY3Rpb24pLCB0aGlzIGFsbG93cyBnY2MgdG8gb3B0aW1pemUgYmV0dGVyCisgKi8KKworI2RlZmluZSByZG1zcihtc3IsdmFsMSx2YWwyKSBcCisgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInJkbXNyIiBcCisJCQkgICAgOiAiPWEiICh2YWwxKSwgIj1kIiAodmFsMikgXAorCQkJICAgIDogImMiIChtc3IpKQorCisKKyNkZWZpbmUgcmRtc3JsKG1zcix2YWwpIGRvIHsgdW5zaWduZWQgbG9uZyBhX18sYl9fOyBcCisgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInJkbXNyIiBcCisJCQkgICAgOiAiPWEiIChhX18pLCAiPWQiIChiX18pIFwKKwkJCSAgICA6ICJjIiAobXNyKSk7IFwKKyAgICAgICB2YWwgPSBhX18gfCAoYl9fPDwzMik7IFwKK30gd2hpbGUoMCk7IAorCisjZGVmaW5lIHdybXNyKG1zcix2YWwxLHZhbDIpIFwKKyAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oIndybXNyIiBcCisJCQkgIDogLyogbm8gb3V0cHV0cyAqLyBcCisJCQkgIDogImMiIChtc3IpLCAiYSIgKHZhbDEpLCAiZCIgKHZhbDIpKQorCisjZGVmaW5lIHdybXNybChtc3IsdmFsKSB3cm1zcihtc3IsKF9fdTMyKSgoX191NjQpKHZhbCkpLCgoX191NjQpKHZhbCkpPj4zMikgCisKKy8qIHdybXNyIHdpdGggZXhjZXB0aW9uIGhhbmRsaW5nICovCisjZGVmaW5lIHdybXNyX3NhZmUobXNyLGEsYikgKHsgaW50IHJldF9fOwkJCQkJCVwKKwlhc20gdm9sYXRpbGUoIjI6IHdybXNyIDsgeG9ybCAlMCwlMFxuIgkJCQkJCVwKKwkJICAgICAiMTpcblx0IgkJCQkJCQkJXAorCQkgICAgICIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG5cdCIJCQkJCVwKKwkJICAgICAiMzogIG1vdmwgJTQsJTAgOyBqbXAgMWJcblx0IgkJCQkJXAorCQkgICAgICIucHJldmlvdXNcblx0IgkJCQkJCQlcCisgCQkgICAgICIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCQkJCQlcCisJCSAgICAgIiAgIC5hbGlnbiA4XG5cdCIJCQkJCQkJXAorCQkgICAgICIgICAucXVhZCAJMmIsM2Jcblx0IgkJCQkJCVwKKwkJICAgICAiLnByZXZpb3VzIgkJCQkJCQlcCisJCSAgICAgOiAiPWEiIChyZXRfXykJCQkJCQkJXAorCQkgICAgIDogImMiIChtc3IpLCAiMCIgKGEpLCAiZCIgKGIpLCAiaSIgKC1FRkFVTFQpKTtcCisJcmV0X187IH0pCisKKyNkZWZpbmUgY2hlY2tpbmdfd3Jtc3JsKG1zcix2YWwpIHdybXNyX3NhZmUobXNyLCh1MzIpKHZhbCksKHUzMikoKHZhbCk+PjMyKSkKKworI2RlZmluZSByZHRzYyhsb3csaGlnaCkgXAorICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygicmR0c2MiIDogIj1hIiAobG93KSwgIj1kIiAoaGlnaCkpCisKKyNkZWZpbmUgcmR0c2NsKGxvdykgXAorICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInJkdHNjIiA6ICI9YSIgKGxvdykgOiA6ICJlZHgiKQorCisjZGVmaW5lIHJkdHNjbGwodmFsKSBkbyB7IFwKKyAgICAgdW5zaWduZWQgaW50IF9fYSxfX2Q7IFwKKyAgICAgYXNtIHZvbGF0aWxlKCJyZHRzYyIgOiAiPWEiIChfX2EpLCAiPWQiIChfX2QpKTsgXAorICAgICAodmFsKSA9ICgodW5zaWduZWQgbG9uZylfX2EpIHwgKCgodW5zaWduZWQgbG9uZylfX2QpPDwzMik7IFwKK30gd2hpbGUoMCkKKworI2RlZmluZSByZHBtYyhjb3VudGVyLGxvdyxoaWdoKSBcCisgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJyZHBtYyIgXAorCQkJICA6ICI9YSIgKGxvdyksICI9ZCIgKGhpZ2gpIFwKKwkJCSAgOiAiYyIgKGNvdW50ZXIpKQorCisjZGVmaW5lIHdyaXRlX3RzYyh2YWwxLHZhbDIpIHdybXNyKDB4MTAsIHZhbDEsIHZhbDIpCisKKyNkZWZpbmUgcmRwbWMoY291bnRlcixsb3csaGlnaCkgXAorICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygicmRwbWMiIFwKKwkJCSAgOiAiPWEiIChsb3cpLCAiPWQiIChoaWdoKSBcCisJCQkgIDogImMiIChjb3VudGVyKSkKKworZXh0ZXJuIGlubGluZSB2b2lkIGNwdWlkKGludCBvcCwgdW5zaWduZWQgaW50ICplYXgsIHVuc2lnbmVkIGludCAqZWJ4LAorCQkJIHVuc2lnbmVkIGludCAqZWN4LCB1bnNpZ25lZCBpbnQgKmVkeCkKK3sKKwlfX2FzbV9fKCJjcHVpZCIKKwkJOiAiPWEiICgqZWF4KSwKKwkJICAiPWIiICgqZWJ4KSwKKwkJICAiPWMiICgqZWN4KSwKKwkJICAiPWQiICgqZWR4KQorCQk6ICIwIiAob3ApKTsKK30KKworLyogU29tZSBDUFVJRCBjYWxscyB3YW50ICdjb3VudCcgdG8gYmUgcGxhY2VkIGluIGVjeCAqLworc3RhdGljIGlubGluZSB2b2lkIGNwdWlkX2NvdW50KGludCBvcCwgaW50IGNvdW50LCBpbnQgKmVheCwgaW50ICplYngsIGludCAqZWN4LAorCSAgICAgICAJaW50ICplZHgpCit7CisJX19hc21fXygiY3B1aWQiCisJCTogIj1hIiAoKmVheCksCisJCSAgIj1iIiAoKmVieCksCisJCSAgIj1jIiAoKmVjeCksCisJCSAgIj1kIiAoKmVkeCkKKwkJOiAiMCIgKG9wKSwgImMiIChjb3VudCkpOworfQorCisvKgorICogQ1BVSUQgZnVuY3Rpb25zIHJldHVybmluZyBhIHNpbmdsZSBkYXR1bQorICovCitleHRlcm4gaW5saW5lIHVuc2lnbmVkIGludCBjcHVpZF9lYXgodW5zaWduZWQgaW50IG9wKQoreworCXVuc2lnbmVkIGludCBlYXg7CisKKwlfX2FzbV9fKCJjcHVpZCIKKwkJOiAiPWEiIChlYXgpCisJCTogIjAiIChvcCkKKwkJOiAiYngiLCAiY3giLCAiZHgiKTsKKwlyZXR1cm4gZWF4OworfQorZXh0ZXJuIGlubGluZSB1bnNpZ25lZCBpbnQgY3B1aWRfZWJ4KHVuc2lnbmVkIGludCBvcCkKK3sKKwl1bnNpZ25lZCBpbnQgZWF4LCBlYng7CisKKwlfX2FzbV9fKCJjcHVpZCIKKwkJOiAiPWEiIChlYXgpLCAiPWIiIChlYngpCisJCTogIjAiIChvcCkKKwkJOiAiY3giLCAiZHgiICk7CisJcmV0dXJuIGVieDsKK30KK2V4dGVybiBpbmxpbmUgdW5zaWduZWQgaW50IGNwdWlkX2VjeCh1bnNpZ25lZCBpbnQgb3ApCit7CisJdW5zaWduZWQgaW50IGVheCwgZWN4OworCisJX19hc21fXygiY3B1aWQiCisJCTogIj1hIiAoZWF4KSwgIj1jIiAoZWN4KQorCQk6ICIwIiAob3ApCisJCTogImJ4IiwgImR4IiApOworCXJldHVybiBlY3g7Cit9CitleHRlcm4gaW5saW5lIHVuc2lnbmVkIGludCBjcHVpZF9lZHgodW5zaWduZWQgaW50IG9wKQoreworCXVuc2lnbmVkIGludCBlYXgsIGVkeDsKKworCV9fYXNtX18oImNwdWlkIgorCQk6ICI9YSIgKGVheCksICI9ZCIgKGVkeCkKKwkJOiAiMCIgKG9wKQorCQk6ICJieCIsICJjeCIpOworCXJldHVybiBlZHg7Cit9CisKKyNkZWZpbmUgTVNSX0lBMzJfVUNPREVfV1JJVEUJCTB4NzkKKyNkZWZpbmUgTVNSX0lBMzJfVUNPREVfUkVWCQkweDhiCisKKworI2VuZGlmCisKKy8qIEFNRC9LOCBzcGVjaWZpYyBNU1JzICovIAorI2RlZmluZSBNU1JfRUZFUiAweGMwMDAwMDgwCQkvKiBleHRlbmRlZCBmZWF0dXJlIHJlZ2lzdGVyICovCisjZGVmaW5lIE1TUl9TVEFSIDB4YzAwMDAwODEJCS8qIGxlZ2FjeSBtb2RlIFNZU0NBTEwgdGFyZ2V0ICovCisjZGVmaW5lIE1TUl9MU1RBUiAweGMwMDAwMDgyIAkJLyogbG9uZyBtb2RlIFNZU0NBTEwgdGFyZ2V0ICovCisjZGVmaW5lIE1TUl9DU1RBUiAweGMwMDAwMDgzCQkvKiBjb21wYXRpYmlsaXR5IG1vZGUgU1lTQ0FMTCB0YXJnZXQgKi8KKyNkZWZpbmUgTVNSX1NZU0NBTExfTUFTSyAweGMwMDAwMDg0CS8qIEVGTEFHUyBtYXNrIGZvciBzeXNjYWxsICovCisjZGVmaW5lIE1TUl9GU19CQVNFIDB4YzAwMDAxMDAJCS8qIDY0Yml0IEdTIGJhc2UgKi8KKyNkZWZpbmUgTVNSX0dTX0JBU0UgMHhjMDAwMDEwMQkJLyogNjRiaXQgRlMgYmFzZSAqLworI2RlZmluZSBNU1JfS0VSTkVMX0dTX0JBU0UgIDB4YzAwMDAxMDIJLyogU3dhcEdTIEdTIHNoYWRvdyAob3IgVVNFUl9HUyBmcm9tIGtlcm5lbCkgKi8gCisvKiBFRkVSIGJpdHM6ICovIAorI2RlZmluZSBfRUZFUl9TQ0UgMCAgLyogU1lTQ0FMTC9TWVNSRVQgKi8KKyNkZWZpbmUgX0VGRVJfTE1FIDggIC8qIExvbmcgbW9kZSBlbmFibGUgKi8KKyNkZWZpbmUgX0VGRVJfTE1BIDEwIC8qIExvbmcgbW9kZSBhY3RpdmUgKHJlYWQtb25seSkgKi8KKyNkZWZpbmUgX0VGRVJfTlggMTEgIC8qIE5vIGV4ZWN1dGUgZW5hYmxlICovCisKKyNkZWZpbmUgRUZFUl9TQ0UgKDE8PF9FRkVSX1NDRSkKKyNkZWZpbmUgRUZFUl9MTUUgKDE8PF9FRkVSX0xNRSkKKyNkZWZpbmUgRUZFUl9MTUEgKDE8PF9FRkVSX0xNQSkKKyNkZWZpbmUgRUZFUl9OWCAoMTw8X0VGRVJfTlgpCisKKy8qIEludGVsIE1TUnMuIFNvbWUgYWxzbyBhdmFpbGFibGUgb24gb3RoZXIgQ1BVcyAqLworI2RlZmluZSBNU1JfSUEzMl9QTEFURk9STV9JRAkweDE3CisKKyNkZWZpbmUgTVNSX0lBMzJfUEVSRkNUUjAgICAgICAweGMxCisjZGVmaW5lIE1TUl9JQTMyX1BFUkZDVFIxICAgICAgMHhjMgorCisjZGVmaW5lIE1TUl9NVFJSY2FwCQkweDBmZQorI2RlZmluZSBNU1JfSUEzMl9CQkxfQ1JfQ1RMICAgICAgICAweDExOQorCisjZGVmaW5lIE1TUl9JQTMyX1NZU0VOVEVSX0NTCTB4MTc0CisjZGVmaW5lIE1TUl9JQTMyX1NZU0VOVEVSX0VTUAkweDE3NQorI2RlZmluZSBNU1JfSUEzMl9TWVNFTlRFUl9FSVAJMHgxNzYKKworI2RlZmluZSBNU1JfSUEzMl9NQ0dfQ0FQICAgICAgIDB4MTc5CisjZGVmaW5lIE1TUl9JQTMyX01DR19TVEFUVVMgICAgICAgIDB4MTdhCisjZGVmaW5lIE1TUl9JQTMyX01DR19DVEwgICAgICAgMHgxN2IKKworI2RlZmluZSBNU1JfSUEzMl9FVk5UU0VMMCAgICAgIDB4MTg2CisjZGVmaW5lIE1TUl9JQTMyX0VWTlRTRUwxICAgICAgMHgxODcKKworI2RlZmluZSBNU1JfSUEzMl9ERUJVR0NUTE1TUiAgICAgICAweDFkOQorI2RlZmluZSBNU1JfSUEzMl9MQVNUQlJBTkNIRlJPTUlQICAweDFkYgorI2RlZmluZSBNU1JfSUEzMl9MQVNUQlJBTkNIVE9JUCAgICAgICAgMHgxZGMKKyNkZWZpbmUgTVNSX0lBMzJfTEFTVElOVEZST01JUCAgICAgMHgxZGQKKyNkZWZpbmUgTVNSX0lBMzJfTEFTVElOVFRPSVAgICAgICAgMHgxZGUKKworI2RlZmluZSBNU1JfTVRSUmZpeDY0S18wMDAwMAkweDI1MAorI2RlZmluZSBNU1JfTVRSUmZpeDE2S184MDAwMAkweDI1OAorI2RlZmluZSBNU1JfTVRSUmZpeDE2S19BMDAwMAkweDI1OQorI2RlZmluZSBNU1JfTVRSUmZpeDRLX0MwMDAwCTB4MjY4CisjZGVmaW5lIE1TUl9NVFJSZml4NEtfQzgwMDAJMHgyNjkKKyNkZWZpbmUgTVNSX01UUlJmaXg0S19EMDAwMAkweDI2YQorI2RlZmluZSBNU1JfTVRSUmZpeDRLX0Q4MDAwCTB4MjZiCisjZGVmaW5lIE1TUl9NVFJSZml4NEtfRTAwMDAJMHgyNmMKKyNkZWZpbmUgTVNSX01UUlJmaXg0S19FODAwMAkweDI2ZAorI2RlZmluZSBNU1JfTVRSUmZpeDRLX0YwMDAwCTB4MjZlCisjZGVmaW5lIE1TUl9NVFJSZml4NEtfRjgwMDAJMHgyNmYKKyNkZWZpbmUgTVNSX01UUlJkZWZUeXBlCQkweDJmZgorCisjZGVmaW5lIE1TUl9JQTMyX01DMF9DVEwgICAgICAgMHg0MDAKKyNkZWZpbmUgTVNSX0lBMzJfTUMwX1NUQVRVUyAgICAgICAgMHg0MDEKKyNkZWZpbmUgTVNSX0lBMzJfTUMwX0FERFIgICAgICAweDQwMgorI2RlZmluZSBNU1JfSUEzMl9NQzBfTUlTQyAgICAgIDB4NDAzCisKKyNkZWZpbmUgTVNSX1A2X1BFUkZDVFIwCQkJMHhjMQorI2RlZmluZSBNU1JfUDZfUEVSRkNUUjEJCQkweGMyCisjZGVmaW5lIE1TUl9QNl9FVk5UU0VMMAkJCTB4MTg2CisjZGVmaW5lIE1TUl9QNl9FVk5UU0VMMQkJCTB4MTg3CisKKy8qIEs3L0s4IE1TUnMuIE5vdCBjb21wbGV0ZS4gU2VlIHRoZSBhcmNoaXRlY3R1cmUgbWFudWFsIGZvciBhIG1vcmUgY29tcGxldGUgbGlzdC4gKi8KKyNkZWZpbmUgTVNSX0s3X0VWTlRTRUwwICAgICAgICAgICAgMHhDMDAxMDAwMAorI2RlZmluZSBNU1JfSzdfUEVSRkNUUjAgICAgICAgICAgICAweEMwMDEwMDA0CisjZGVmaW5lIE1TUl9LN19FVk5UU0VMMSAgICAgICAgICAgIDB4QzAwMTAwMDEKKyNkZWZpbmUgTVNSX0s3X1BFUkZDVFIxICAgICAgICAgICAgMHhDMDAxMDAwNQorI2RlZmluZSBNU1JfSzdfRVZOVFNFTDIgICAgICAgICAgICAweEMwMDEwMDAyCisjZGVmaW5lIE1TUl9LN19QRVJGQ1RSMiAgICAgICAgICAgIDB4QzAwMTAwMDYKKyNkZWZpbmUgTVNSX0s3X0VWTlRTRUwzICAgICAgICAgICAgMHhDMDAxMDAwMworI2RlZmluZSBNU1JfSzdfUEVSRkNUUjMgICAgICAgICAgICAweEMwMDEwMDA3CisjZGVmaW5lIE1TUl9LOF9UT1BfTUVNMQkJICAgMHhDMDAxMDAxQQorI2RlZmluZSBNU1JfSzhfVE9QX01FTTIJCSAgIDB4QzAwMTAwMUQKKyNkZWZpbmUgTVNSX0s4X1NZU0NGRwkJICAgMHhDMDAwMDAxMAkKKworLyogSzYgTVNScyAqLworI2RlZmluZSBNU1JfSzZfRUZFUgkJCTB4QzAwMDAwODAKKyNkZWZpbmUgTVNSX0s2X1NUQVIJCQkweEMwMDAwMDgxCisjZGVmaW5lIE1TUl9LNl9XSENSCQkJMHhDMDAwMDA4MgorI2RlZmluZSBNU1JfSzZfVVdDQ1IJCQkweEMwMDAwMDg1CisjZGVmaW5lIE1TUl9LNl9QU09SCQkJMHhDMDAwMDA4NworI2RlZmluZSBNU1JfSzZfUEZJUgkJCTB4QzAwMDAwODgKKworLyogQ2VudGF1ci1IYXVscy9JRFQgZGVmaW5lZCBNU1JzLiAqLworI2RlZmluZSBNU1JfSURUX0ZDUjEJCQkweDEwNworI2RlZmluZSBNU1JfSURUX0ZDUjIJCQkweDEwOAorI2RlZmluZSBNU1JfSURUX0ZDUjMJCQkweDEwOQorI2RlZmluZSBNU1JfSURUX0ZDUjQJCQkweDEwYQorCisjZGVmaW5lIE1TUl9JRFRfTUNSMAkJCTB4MTEwCisjZGVmaW5lIE1TUl9JRFRfTUNSMQkJCTB4MTExCisjZGVmaW5lIE1TUl9JRFRfTUNSMgkJCTB4MTEyCisjZGVmaW5lIE1TUl9JRFRfTUNSMwkJCTB4MTEzCisjZGVmaW5lIE1TUl9JRFRfTUNSNAkJCTB4MTE0CisjZGVmaW5lIE1TUl9JRFRfTUNSNQkJCTB4MTE1CisjZGVmaW5lIE1TUl9JRFRfTUNSNgkJCTB4MTE2CisjZGVmaW5lIE1TUl9JRFRfTUNSNwkJCTB4MTE3CisjZGVmaW5lIE1TUl9JRFRfTUNSX0NUUkwJCTB4MTIwCisKKy8qIFZJQSBDeXJpeCBkZWZpbmVkIE1TUnMqLworI2RlZmluZSBNU1JfVklBX0ZDUgkJCTB4MTEwNworI2RlZmluZSBNU1JfVklBX0xPTkdIQVVMCQkweDExMGEKKyNkZWZpbmUgTVNSX1ZJQV9STkcJCQkweDExMGIKKyNkZWZpbmUgTVNSX1ZJQV9CQ1IyCQkJMHgxMTQ3CisKKy8qIEludGVsIGRlZmluZWQgTVNScy4gKi8KKyNkZWZpbmUgTVNSX0lBMzJfUDVfTUNfQUREUgkJMAorI2RlZmluZSBNU1JfSUEzMl9QNV9NQ19UWVBFCQkxCisjZGVmaW5lIE1TUl9JQTMyX1BMQVRGT1JNX0lECQkweDE3CisjZGVmaW5lIE1TUl9JQTMyX0VCTF9DUl9QT1dFUk9OCQkweDJhCisKKyNkZWZpbmUgTVNSX0lBMzJfQVBJQ0JBU0UgICAgICAgICAgICAgICAweDFiCisjZGVmaW5lIE1TUl9JQTMyX0FQSUNCQVNFX0JTUCAgICAgICAgICAgKDE8PDgpCisjZGVmaW5lIE1TUl9JQTMyX0FQSUNCQVNFX0VOQUJMRSAgICAgICAgKDE8PDExKQorI2RlZmluZSBNU1JfSUEzMl9BUElDQkFTRV9CQVNFICAgICAgICAgICgweGZmZmZmPDwxMikKKworLyogUDQvWGVvbisgc3BlY2lmaWMgKi8KKyNkZWZpbmUgTVNSX0lBMzJfTUNHX0VBWAkJMHgxODAKKyNkZWZpbmUgTVNSX0lBMzJfTUNHX0VCWAkJMHgxODEKKyNkZWZpbmUgTVNSX0lBMzJfTUNHX0VDWAkJMHgxODIKKyNkZWZpbmUgTVNSX0lBMzJfTUNHX0VEWAkJMHgxODMKKyNkZWZpbmUgTVNSX0lBMzJfTUNHX0VTSQkJMHgxODQKKyNkZWZpbmUgTVNSX0lBMzJfTUNHX0VESQkJMHgxODUKKyNkZWZpbmUgTVNSX0lBMzJfTUNHX0VCUAkJMHgxODYKKyNkZWZpbmUgTVNSX0lBMzJfTUNHX0VTUAkJMHgxODcKKyNkZWZpbmUgTVNSX0lBMzJfTUNHX0VGTEFHUwkJMHgxODgKKyNkZWZpbmUgTVNSX0lBMzJfTUNHX0VJUAkJMHgxODkKKyNkZWZpbmUgTVNSX0lBMzJfTUNHX1JFU0VSVkVECQkweDE4QQorCisjZGVmaW5lIE1TUl9QNl9FVk5UU0VMMAkJCTB4MTg2CisjZGVmaW5lIE1TUl9QNl9FVk5UU0VMMQkJCTB4MTg3CisKKyNkZWZpbmUgTVNSX0lBMzJfUEVSRl9TVEFUVVMJCTB4MTk4CisjZGVmaW5lIE1TUl9JQTMyX1BFUkZfQ1RMCQkweDE5OQorCisjZGVmaW5lIE1TUl9JQTMyX1RIRVJNX0NPTlRST0wJCTB4MTlhCisjZGVmaW5lIE1TUl9JQTMyX1RIRVJNX0lOVEVSUlVQVAkweDE5YgorI2RlZmluZSBNU1JfSUEzMl9USEVSTV9TVEFUVVMJCTB4MTljCisjZGVmaW5lIE1TUl9JQTMyX01JU0NfRU5BQkxFCQkweDFhMAorCisjZGVmaW5lIE1TUl9JQTMyX0RFQlVHQ1RMTVNSCQkweDFkOQorI2RlZmluZSBNU1JfSUEzMl9MQVNUQlJBTkNIRlJPTUlQCTB4MWRiCisjZGVmaW5lIE1TUl9JQTMyX0xBU1RCUkFOQ0hUT0lQCQkweDFkYworI2RlZmluZSBNU1JfSUEzMl9MQVNUSU5URlJPTUlQCQkweDFkZAorI2RlZmluZSBNU1JfSUEzMl9MQVNUSU5UVE9JUAkJMHgxZGUKKworI2RlZmluZSBNU1JfSUEzMl9NQzBfQ1RMCQkweDQwMAorI2RlZmluZSBNU1JfSUEzMl9NQzBfU1RBVFVTCQkweDQwMQorI2RlZmluZSBNU1JfSUEzMl9NQzBfQUREUgkJMHg0MDIKKyNkZWZpbmUgTVNSX0lBMzJfTUMwX01JU0MJCTB4NDAzCisKKy8qIFBlbnRpdW0gSVYgcGVyZm9ybWFuY2UgY291bnRlciBNU1JzICovCisjZGVmaW5lIE1TUl9QNF9CUFVfUEVSRkNUUjAgCQkweDMwMAorI2RlZmluZSBNU1JfUDRfQlBVX1BFUkZDVFIxIAkJMHgzMDEKKyNkZWZpbmUgTVNSX1A0X0JQVV9QRVJGQ1RSMiAJCTB4MzAyCisjZGVmaW5lIE1TUl9QNF9CUFVfUEVSRkNUUjMgCQkweDMwMworI2RlZmluZSBNU1JfUDRfTVNfUEVSRkNUUjAgCQkweDMwNAorI2RlZmluZSBNU1JfUDRfTVNfUEVSRkNUUjEgCQkweDMwNQorI2RlZmluZSBNU1JfUDRfTVNfUEVSRkNUUjIgCQkweDMwNgorI2RlZmluZSBNU1JfUDRfTVNfUEVSRkNUUjMgCQkweDMwNworI2RlZmluZSBNU1JfUDRfRkxBTUVfUEVSRkNUUjAgCQkweDMwOAorI2RlZmluZSBNU1JfUDRfRkxBTUVfUEVSRkNUUjEgCQkweDMwOQorI2RlZmluZSBNU1JfUDRfRkxBTUVfUEVSRkNUUjIgCQkweDMwYQorI2RlZmluZSBNU1JfUDRfRkxBTUVfUEVSRkNUUjMgCQkweDMwYgorI2RlZmluZSBNU1JfUDRfSVFfUEVSRkNUUjAgCQkweDMwYworI2RlZmluZSBNU1JfUDRfSVFfUEVSRkNUUjEgCQkweDMwZAorI2RlZmluZSBNU1JfUDRfSVFfUEVSRkNUUjIgCQkweDMwZQorI2RlZmluZSBNU1JfUDRfSVFfUEVSRkNUUjMgCQkweDMwZgorI2RlZmluZSBNU1JfUDRfSVFfUEVSRkNUUjQgCQkweDMxMAorI2RlZmluZSBNU1JfUDRfSVFfUEVSRkNUUjUgCQkweDMxMQorI2RlZmluZSBNU1JfUDRfQlBVX0NDQ1IwIAkJMHgzNjAKKyNkZWZpbmUgTVNSX1A0X0JQVV9DQ0NSMSAJCTB4MzYxCisjZGVmaW5lIE1TUl9QNF9CUFVfQ0NDUjIgCQkweDM2MgorI2RlZmluZSBNU1JfUDRfQlBVX0NDQ1IzIAkJMHgzNjMKKyNkZWZpbmUgTVNSX1A0X01TX0NDQ1IwIAkJMHgzNjQKKyNkZWZpbmUgTVNSX1A0X01TX0NDQ1IxIAkJMHgzNjUKKyNkZWZpbmUgTVNSX1A0X01TX0NDQ1IyIAkJMHgzNjYKKyNkZWZpbmUgTVNSX1A0X01TX0NDQ1IzIAkJMHgzNjcKKyNkZWZpbmUgTVNSX1A0X0ZMQU1FX0NDQ1IwIAkJMHgzNjgKKyNkZWZpbmUgTVNSX1A0X0ZMQU1FX0NDQ1IxIAkJMHgzNjkKKyNkZWZpbmUgTVNSX1A0X0ZMQU1FX0NDQ1IyIAkJMHgzNmEKKyNkZWZpbmUgTVNSX1A0X0ZMQU1FX0NDQ1IzIAkJMHgzNmIKKyNkZWZpbmUgTVNSX1A0X0lRX0NDQ1IwIAkJMHgzNmMKKyNkZWZpbmUgTVNSX1A0X0lRX0NDQ1IxIAkJMHgzNmQKKyNkZWZpbmUgTVNSX1A0X0lRX0NDQ1IyIAkJMHgzNmUKKyNkZWZpbmUgTVNSX1A0X0lRX0NDQ1IzIAkJMHgzNmYKKyNkZWZpbmUgTVNSX1A0X0lRX0NDQ1I0IAkJMHgzNzAKKyNkZWZpbmUgTVNSX1A0X0lRX0NDQ1I1IAkJMHgzNzEKKyNkZWZpbmUgTVNSX1A0X0FMRl9FU0NSMCAJCTB4M2NhCisjZGVmaW5lIE1TUl9QNF9BTEZfRVNDUjEgCQkweDNjYgorI2RlZmluZSBNU1JfUDRfQlBVX0VTQ1IwIAkJMHgzYjIKKyNkZWZpbmUgTVNSX1A0X0JQVV9FU0NSMSAJCTB4M2IzCisjZGVmaW5lIE1TUl9QNF9CU1VfRVNDUjAgCQkweDNhMAorI2RlZmluZSBNU1JfUDRfQlNVX0VTQ1IxIAkJMHgzYTEKKyNkZWZpbmUgTVNSX1A0X0NSVV9FU0NSMCAJCTB4M2I4CisjZGVmaW5lIE1TUl9QNF9DUlVfRVNDUjEgCQkweDNiOQorI2RlZmluZSBNU1JfUDRfQ1JVX0VTQ1IyIAkJMHgzY2MKKyNkZWZpbmUgTVNSX1A0X0NSVV9FU0NSMyAJCTB4M2NkCisjZGVmaW5lIE1TUl9QNF9DUlVfRVNDUjQgCQkweDNlMAorI2RlZmluZSBNU1JfUDRfQ1JVX0VTQ1I1IAkJMHgzZTEKKyNkZWZpbmUgTVNSX1A0X0RBQ19FU0NSMCAJCTB4M2E4CisjZGVmaW5lIE1TUl9QNF9EQUNfRVNDUjEgCQkweDNhOQorI2RlZmluZSBNU1JfUDRfRklSTV9FU0NSMCAJCTB4M2E0CisjZGVmaW5lIE1TUl9QNF9GSVJNX0VTQ1IxIAkJMHgzYTUKKyNkZWZpbmUgTVNSX1A0X0ZMQU1FX0VTQ1IwIAkJMHgzYTYKKyNkZWZpbmUgTVNSX1A0X0ZMQU1FX0VTQ1IxIAkJMHgzYTcKKyNkZWZpbmUgTVNSX1A0X0ZTQl9FU0NSMCAJCTB4M2EyCisjZGVmaW5lIE1TUl9QNF9GU0JfRVNDUjEgCQkweDNhMworI2RlZmluZSBNU1JfUDRfSVFfRVNDUjAgCQkweDNiYQorI2RlZmluZSBNU1JfUDRfSVFfRVNDUjEgCQkweDNiYgorI2RlZmluZSBNU1JfUDRfSVNfRVNDUjAgCQkweDNiNAorI2RlZmluZSBNU1JfUDRfSVNfRVNDUjEgCQkweDNiNQorI2RlZmluZSBNU1JfUDRfSVRMQl9FU0NSMCAJCTB4M2I2CisjZGVmaW5lIE1TUl9QNF9JVExCX0VTQ1IxIAkJMHgzYjcKKyNkZWZpbmUgTVNSX1A0X0lYX0VTQ1IwIAkJMHgzYzgKKyNkZWZpbmUgTVNSX1A0X0lYX0VTQ1IxIAkJMHgzYzkKKyNkZWZpbmUgTVNSX1A0X01PQl9FU0NSMCAJCTB4M2FhCisjZGVmaW5lIE1TUl9QNF9NT0JfRVNDUjEgCQkweDNhYgorI2RlZmluZSBNU1JfUDRfTVNfRVNDUjAgCQkweDNjMAorI2RlZmluZSBNU1JfUDRfTVNfRVNDUjEgCQkweDNjMQorI2RlZmluZSBNU1JfUDRfUE1IX0VTQ1IwIAkJMHgzYWMKKyNkZWZpbmUgTVNSX1A0X1BNSF9FU0NSMSAJCTB4M2FkCisjZGVmaW5lIE1TUl9QNF9SQVRfRVNDUjAgCQkweDNiYworI2RlZmluZSBNU1JfUDRfUkFUX0VTQ1IxIAkJMHgzYmQKKyNkZWZpbmUgTVNSX1A0X1NBQVRfRVNDUjAgCQkweDNhZQorI2RlZmluZSBNU1JfUDRfU0FBVF9FU0NSMSAJCTB4M2FmCisjZGVmaW5lIE1TUl9QNF9TU1VfRVNDUjAgCQkweDNiZQorI2RlZmluZSBNU1JfUDRfU1NVX0VTQ1IxIAkJMHgzYmYgICAgLyogZ3Vlc3M6IG5vdCBkZWZpbmVkIGluIG1hbnVhbCAqLworI2RlZmluZSBNU1JfUDRfVEJQVV9FU0NSMCAJCTB4M2MyCisjZGVmaW5lIE1TUl9QNF9UQlBVX0VTQ1IxIAkJMHgzYzMKKyNkZWZpbmUgTVNSX1A0X1RDX0VTQ1IwIAkJMHgzYzQKKyNkZWZpbmUgTVNSX1A0X1RDX0VTQ1IxIAkJMHgzYzUKKyNkZWZpbmUgTVNSX1A0X1UyTF9FU0NSMCAJCTB4M2IwCisjZGVmaW5lIE1TUl9QNF9VMkxfRVNDUjEgCQkweDNiMQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9tdHJyLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvbXRyci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1OTU5ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvbXRyci5oCkBAIC0wLDAgKzEsMTA4IEBACisvKiAgR2VuZXJpYyBNVFJSIChNZW1vcnkgVHlwZSBSYW5nZSBSZWdpc3RlcikgaW9jdGxzLgorCisgICAgQ29weXJpZ2h0IChDKSAxOTk3LTE5OTkgIFJpY2hhcmQgR29vY2gKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisgICAgUmljaGFyZCBHb29jaCBtYXkgYmUgcmVhY2hlZCBieSBlbWFpbCBhdCAgcmdvb2NoQGF0bmYuY3Npcm8uYXUKKyAgICBUaGUgcG9zdGFsIGFkZHJlc3MgaXM6CisgICAgICBSaWNoYXJkIEdvb2NoLCBjL28gQVRORiwgUC4gTy4gQm94IDc2LCBFcHBpbmcsIE4uUy5XLiwgMjEyMSwgQXVzdHJhbGlhLgorKi8KKyNpZm5kZWYgX0xJTlVYX01UUlJfSAorI2RlZmluZSBfTElOVVhfTVRSUl9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorCisjZGVmaW5lCU1UUlJfSU9DVExfQkFTRQknTScKKworc3RydWN0IG10cnJfc2VudHJ5Cit7CisgICAgdW5zaWduZWQgbG9uZyBiYXNlOyAgICAvKiAgQmFzZSBhZGRyZXNzICAgICAqLworICAgIHVuc2lnbmVkIGludCBzaXplOyAgICAvKiAgU2l6ZSBvZiByZWdpb24gICAqLworICAgIHVuc2lnbmVkIGludCB0eXBlOyAgICAgLyogIFR5cGUgb2YgcmVnaW9uICAgKi8KK307CisKKy8qIFdhcm5pbmc6IHRoaXMgc3RydWN0dXJlIGhhcyBhIGRpZmZlcmVudCBvcmRlciBmcm9tIGkzODYKKyAgIG9uIHg4Ni02NC4gVGhlIDMyYml0IGVtdWxhdGlvbiBjb2RlIHRha2VzIGNhcmUgb2YgdGhhdC4KKyAgIEJ1dCB5b3UgbmVlZCB0byB1c2UgdGhpcyBmb3IgNjRiaXQsIG90aGVyd2lzZSB5b3VyIFggc2VydmVyCisgICB3aWxsIGJyZWFrLiAqLworc3RydWN0IG10cnJfZ2VudHJ5Cit7CisgICAgdW5zaWduZWQgbG9uZyBiYXNlOyAgICAvKiAgQmFzZSBhZGRyZXNzICAgICAqLworICAgIHVuc2lnbmVkIGludCBzaXplOyAgICAvKiAgU2l6ZSBvZiByZWdpb24gICAqLworICAgIHVuc2lnbmVkIGludCByZWdudW07ICAgLyogIFJlZ2lzdGVyIG51bWJlciAgKi8KKyAgICB1bnNpZ25lZCBpbnQgdHlwZTsgICAgIC8qICBUeXBlIG9mIHJlZ2lvbiAgICovCit9OworCisvKiAgVGhlc2UgYXJlIHRoZSB2YXJpb3VzIGlvY3RscyAgKi8KKyNkZWZpbmUgTVRSUklPQ19BRERfRU5UUlkgICAgICAgIF9JT1coTVRSUl9JT0NUTF9CQVNFLCAgMCwgc3RydWN0IG10cnJfc2VudHJ5KQorI2RlZmluZSBNVFJSSU9DX1NFVF9FTlRSWSAgICAgICAgX0lPVyhNVFJSX0lPQ1RMX0JBU0UsICAxLCBzdHJ1Y3QgbXRycl9zZW50cnkpCisjZGVmaW5lIE1UUlJJT0NfREVMX0VOVFJZICAgICAgICBfSU9XKE1UUlJfSU9DVExfQkFTRSwgIDIsIHN0cnVjdCBtdHJyX3NlbnRyeSkKKyNkZWZpbmUgTVRSUklPQ19HRVRfRU5UUlkgICAgICAgIF9JT1dSKE1UUlJfSU9DVExfQkFTRSwgMywgc3RydWN0IG10cnJfZ2VudHJ5KQorI2RlZmluZSBNVFJSSU9DX0tJTExfRU5UUlkgICAgICAgX0lPVyhNVFJSX0lPQ1RMX0JBU0UsICA0LCBzdHJ1Y3QgbXRycl9zZW50cnkpCisjZGVmaW5lIE1UUlJJT0NfQUREX1BBR0VfRU5UUlkgICBfSU9XKE1UUlJfSU9DVExfQkFTRSwgIDUsIHN0cnVjdCBtdHJyX3NlbnRyeSkKKyNkZWZpbmUgTVRSUklPQ19TRVRfUEFHRV9FTlRSWSAgIF9JT1coTVRSUl9JT0NUTF9CQVNFLCAgNiwgc3RydWN0IG10cnJfc2VudHJ5KQorI2RlZmluZSBNVFJSSU9DX0RFTF9QQUdFX0VOVFJZICAgX0lPVyhNVFJSX0lPQ1RMX0JBU0UsICA3LCBzdHJ1Y3QgbXRycl9zZW50cnkpCisjZGVmaW5lIE1UUlJJT0NfR0VUX1BBR0VfRU5UUlkgICBfSU9XUihNVFJSX0lPQ1RMX0JBU0UsIDgsIHN0cnVjdCBtdHJyX2dlbnRyeSkKKyNkZWZpbmUgTVRSUklPQ19LSUxMX1BBR0VfRU5UUlkgIF9JT1coTVRSUl9JT0NUTF9CQVNFLCAgOSwgc3RydWN0IG10cnJfc2VudHJ5KQorCisvKiAgVGhlc2UgYXJlIHRoZSByZWdpb24gdHlwZXMgICovCisjZGVmaW5lIE1UUlJfVFlQRV9VTkNBQ0hBQkxFIDAKKyNkZWZpbmUgTVRSUl9UWVBFX1dSQ09NQiAgICAgMQorLyojZGVmaW5lIE1UUlJfVFlQRV8gICAgICAgICAyKi8KKy8qI2RlZmluZSBNVFJSX1RZUEVfICAgICAgICAgMyovCisjZGVmaW5lIE1UUlJfVFlQRV9XUlRIUk9VR0ggIDQKKyNkZWZpbmUgTVRSUl9UWVBFX1dSUFJPVCAgICAgNQorI2RlZmluZSBNVFJSX1RZUEVfV1JCQUNLICAgICA2CisjZGVmaW5lIE1UUlJfTlVNX1RZUEVTICAgICAgIDcKKworI2lmZGVmIF9fS0VSTkVMX18KKworLyogIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBmb3IgdXNlIGJ5IG90aGVyIGRyaXZlcnMgICovCisjIGlmZGVmIENPTkZJR19NVFJSCitleHRlcm4gaW50IG10cnJfYWRkICh1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJICAgICB1bnNpZ25lZCBpbnQgdHlwZSwgY2hhciBpbmNyZW1lbnQpOworZXh0ZXJuIGludCBtdHJyX2FkZF9wYWdlICh1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJICAgICB1bnNpZ25lZCBpbnQgdHlwZSwgY2hhciBpbmNyZW1lbnQpOworZXh0ZXJuIGludCBtdHJyX2RlbCAoaW50IHJlZywgdW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUpOworZXh0ZXJuIGludCBtdHJyX2RlbF9wYWdlIChpbnQgcmVnLCB1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CisjICBlbHNlCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgbXRycl9hZGQgKHVuc2lnbmVkIGxvbmcgYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJCXVuc2lnbmVkIGludCB0eXBlLCBjaGFyIGluY3JlbWVudCkKK3sKKyAgICByZXR1cm4gLUVOT0RFVjsKK30KK3N0YXRpYyBfX2lubGluZV9fIGludCBtdHJyX2FkZF9wYWdlICh1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCQl1bnNpZ25lZCBpbnQgdHlwZSwgY2hhciBpbmNyZW1lbnQpCit7CisgICAgcmV0dXJuIC1FTk9ERVY7Cit9CitzdGF0aWMgX19pbmxpbmVfXyBpbnQgbXRycl9kZWwgKGludCByZWcsIHVuc2lnbmVkIGxvbmcgYmFzZSwKKwkJCQl1bnNpZ25lZCBsb25nIHNpemUpCit7CisgICAgcmV0dXJuIC1FTk9ERVY7Cit9CitzdGF0aWMgX19pbmxpbmVfXyBpbnQgbXRycl9kZWxfcGFnZSAoaW50IHJlZywgdW5zaWduZWQgbG9uZyBiYXNlLAorCQkJCXVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKyAgICByZXR1cm4gLUVOT0RFVjsKK30KKworIyAgZW5kaWYKKworI2VuZGlmCisKKyNlbmRpZiAgLyogIF9MSU5VWF9NVFJSX0ggICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvbmFtZWkuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9uYW1laS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlZjIzOWYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvbmFtZWkuaApAQCAtMCwwICsxLDExIEBACisjaWZuZGVmIF9fWDg2NjRfTkFNRUlfSAorI2RlZmluZSBfX1g4NjY0X05BTUVJX0gKKworLyogVGhpcyBkdW1teSByb3V0aW5lIG1heWJlIGNoYW5nZWQgdG8gc29tZXRoaW5nIHVzZWZ1bAorICogZm9yIC91c3IvZ25lbXVsLyBlbXVsYXRpb24gc3R1ZmYuCisgKiBMb29rIGF0IGFzbS1zcGFyYy9uYW1laS5oIGZvciBkZXRhaWxzLgorICovCisKKyNkZWZpbmUgX19lbXVsX3ByZWZpeCgpIE5VTEwKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvbm1pLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvbm1pLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFkNTZiMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9ubWkuaApAQCAtMCwwICsxLDU3IEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWkzODYvbm1pLmgKKyAqLworI2lmbmRlZiBBU01fTk1JX0gKKyNkZWZpbmUgQVNNX05NSV9ICisKKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorIAorc3RydWN0IHB0X3JlZ3M7CisgCit0eXBlZGVmIGludCAoKm5taV9jYWxsYmFja190KShzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MsIGludCBjcHUpOworIAorLyoqIAorICogc2V0X25taV9jYWxsYmFjaworICoKKyAqIFNldCBhIGhhbmRsZXIgZm9yIGFuIE5NSS4gT25seSBvbmUgaGFuZGxlciBtYXkgYmUKKyAqIHNldC4gUmV0dXJuIDEgaWYgdGhlIE5NSSB3YXMgaGFuZGxlZC4KKyAqLwordm9pZCBzZXRfbm1pX2NhbGxiYWNrKG5taV9jYWxsYmFja190IGNhbGxiYWNrKTsKKyAKKy8qKiAKKyAqIHVuc2V0X25taV9jYWxsYmFjaworICoKKyAqIFJlbW92ZSB0aGUgaGFuZGxlciBwcmV2aW91c2x5IHNldC4KKyAqLwordm9pZCB1bnNldF9ubWlfY2FsbGJhY2sodm9pZCk7CisgCisjaWZkZWYgQ09ORklHX1BNCisgCisvKiogUmVwbGFjZSB0aGUgUE0gY2FsbGJhY2sgcm91dGluZSBmb3IgTk1JLiAqLworc3RydWN0IHBtX2RldiAqIHNldF9ubWlfcG1fY2FsbGJhY2socG1fY2FsbGJhY2sgY2FsbGJhY2spOworCisvKiogVW5zZXQgdGhlIFBNIGNhbGxiYWNrIHJvdXRpbmUgYmFjayB0byB0aGUgZGVmYXVsdC4gKi8KK3ZvaWQgdW5zZXRfbm1pX3BtX2NhbGxiYWNrKHN0cnVjdCBwbV9kZXYgKiBkZXYpOworCisjZWxzZQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwbV9kZXYgKiBzZXRfbm1pX3BtX2NhbGxiYWNrKHBtX2NhbGxiYWNrIGNhbGxiYWNrKQoreworCXJldHVybiAwOworfSAKKyAKK3N0YXRpYyBpbmxpbmUgdm9pZCB1bnNldF9ubWlfcG1fY2FsbGJhY2soc3RydWN0IHBtX2RldiAqIGRldikKK3sKK30KKworI2VuZGlmIC8qIENPTkZJR19QTSAqLworIAorZXh0ZXJuIHZvaWQgZGVmYXVsdF9kb19ubWkoc3RydWN0IHB0X3JlZ3MgKik7CitleHRlcm4gdm9pZCBkaWVfbm1pKGNoYXIgKnN0ciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCisjZGVmaW5lIGdldF9ubWlfcmVhc29uKCkgaW5iKDB4NjEpCisKK2V4dGVybiBpbnQgcGFuaWNfb25fdGltZW91dDsKK2V4dGVybiBpbnQgdW5rbm93bl9ubWlfcGFuaWM7CisgCisjZW5kaWYgLyogQVNNX05NSV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvbm9kZS5oIGIvaW5jbHVkZS9hc20teDg2XzY0L25vZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWU2Zjg4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L25vZGUuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLWkzODYvbm9kZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L251bWEuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9udW1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWMzNjNhMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9udW1hLmgKQEAgLTAsMCArMSwyMSBAQAorI2lmbmRlZiBfQVNNX1g4NjY0X05VTUFfSCAKKyNkZWZpbmUgX0FTTV9YODY2NF9OVU1BX0ggMQorCisjaW5jbHVkZSA8bGludXgvbm9kZW1hc2suaD4KKyNpbmNsdWRlIDxhc20vbnVtbm9kZXMuaD4KKworc3RydWN0IG5vZGUgeyAKKwl1NjQgc3RhcnQsZW5kOyAKK307CisKK2V4dGVybiBpbnQgY29tcHV0ZV9oYXNoX3NoaWZ0KHN0cnVjdCBub2RlICpub2RlcywgaW50IG51bW5vZGVzKTsKKworI2RlZmluZSBaT05FX0FMSUdOICgxVUwgPDwgKE1BWF9PUkRFUitQQUdFX1NISUZUKSkKKworZXh0ZXJuIHZvaWQgbnVtYV9hZGRfY3B1KGludCBjcHUpOworZXh0ZXJuIHZvaWQgbnVtYV9pbml0X2FycmF5KHZvaWQpOworZXh0ZXJuIGludCBudW1hX29mZjsKKworI2RlZmluZSBOVU1BX05PX05PREUgMHhmZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9udW1ub2Rlcy5oIGIvaW5jbHVkZS9hc20teDg2XzY0L251bW5vZGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJiZTE2YgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9udW1ub2Rlcy5oCkBAIC0wLDAgKzEsMTIgQEAKKyNpZm5kZWYgX0FTTV9YODY2NF9OVU1OT0RFU19ICisjZGVmaW5lIF9BU01fWDg2NjRfTlVNTk9ERVNfSCAxCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2lmZGVmIENPTkZJR19OVU1BCisjZGVmaW5lIE5PREVTX1NISUZUCTYKKyNlbHNlCisjZGVmaW5lIE5PREVTX1NISUZUCTAKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9wYWdlLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvcGFnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0MzA0ODAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvcGFnZS5oCkBAIC0wLDAgKzEsMTM5IEBACisjaWZuZGVmIF9YODZfNjRfUEFHRV9ICisjZGVmaW5lIF9YODZfNjRfUEFHRV9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworLyogUEFHRV9TSElGVCBkZXRlcm1pbmVzIHRoZSBwYWdlIHNpemUgKi8KKyNkZWZpbmUgUEFHRV9TSElGVAkxMgorI2lmZGVmIF9fQVNTRU1CTFlfXworI2RlZmluZSBQQUdFX1NJWkUJKDB4MSA8PCBQQUdFX1NISUZUKQorI2Vsc2UKKyNkZWZpbmUgUEFHRV9TSVpFCSgxVUwgPDwgUEFHRV9TSElGVCkKKyNlbmRpZgorI2RlZmluZSBQQUdFX01BU0sJKH4oUEFHRV9TSVpFLTEpKQorI2RlZmluZSBQSFlTSUNBTF9QQUdFX01BU0sJKH4oUEFHRV9TSVpFLTEpICYgKF9fUEhZU0lDQUxfTUFTSyA8PCBQQUdFX1NISUZUKSkKKworI2RlZmluZSBUSFJFQURfT1JERVIgMSAKKyNpZmRlZiBfX0FTU0VNQkxZX18KKyNkZWZpbmUgVEhSRUFEX1NJWkUgICgxIDw8IChQQUdFX1NISUZUICsgVEhSRUFEX09SREVSKSkKKyNlbHNlCisjZGVmaW5lIFRIUkVBRF9TSVpFICAoMVVMIDw8IChQQUdFX1NISUZUICsgVEhSRUFEX09SREVSKSkKKyNlbmRpZgorI2RlZmluZSBDVVJSRU5UX01BU0sgKH4oVEhSRUFEX1NJWkUtMSkpCisKKyNkZWZpbmUgTEFSR0VfUEFHRV9NQVNLICh+KExBUkdFX1BBR0VfU0laRS0xKSkKKyNkZWZpbmUgTEFSR0VfUEFHRV9TSVpFICgxVUwgPDwgUE1EX1NISUZUKQorCisjZGVmaW5lIEhQQUdFX1NISUZUIFBNRF9TSElGVAorI2RlZmluZSBIUEFHRV9TSVpFCSgoMVVMKSA8PCBIUEFHRV9TSElGVCkKKyNkZWZpbmUgSFBBR0VfTUFTSwkofihIUEFHRV9TSVpFIC0gMSkpCisjZGVmaW5lIEhVR0VUTEJfUEFHRV9PUkRFUgkoSFBBR0VfU0hJRlQgLSBQQUdFX1NISUZUKQorCisjaWZkZWYgX19LRVJORUxfXworI2lmbmRlZiBfX0FTU0VNQkxZX18KKwordm9pZCBjbGVhcl9wYWdlKHZvaWQgKik7Cit2b2lkIGNvcHlfcGFnZSh2b2lkICosIHZvaWQgKik7CisKKyNkZWZpbmUgY2xlYXJfdXNlcl9wYWdlKHBhZ2UsIHZhZGRyLCBwZykJY2xlYXJfcGFnZShwYWdlKQorI2RlZmluZSBjb3B5X3VzZXJfcGFnZSh0bywgZnJvbSwgdmFkZHIsIHBnKQljb3B5X3BhZ2UodG8sIGZyb20pCisKKyNkZWZpbmUgYWxsb2NfemVyb2VkX3VzZXJfaGlnaHBhZ2Uodm1hLCB2YWRkcikgYWxsb2NfcGFnZV92bWEoR0ZQX0hJR0hVU0VSIHwgX19HRlBfWkVSTywgdm1hLCB2YWRkcikKKyNkZWZpbmUgX19IQVZFX0FSQ0hfQUxMT0NfWkVST0VEX1VTRVJfSElHSFBBR0UKKy8qCisgKiBUaGVzZSBhcmUgdXNlZCB0byBtYWtlIHVzZSBvZiBDIHR5cGUtY2hlY2tpbmcuLgorICovCit0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgcHRlOyB9IHB0ZV90OwordHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHBtZDsgfSBwbWRfdDsKK3R5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBwdWQ7IH0gcHVkX3Q7Cit0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgcGdkOyB9IHBnZF90OworI2RlZmluZSBQVEVfTUFTSwlQSFlTSUNBTF9QQUdFX01BU0sKKwordHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHBncHJvdDsgfSBwZ3Byb3RfdDsKKworI2RlZmluZSBwdGVfdmFsKHgpCSgoeCkucHRlKQorI2RlZmluZSBwbWRfdmFsKHgpCSgoeCkucG1kKQorI2RlZmluZSBwdWRfdmFsKHgpCSgoeCkucHVkKQorI2RlZmluZSBwZ2RfdmFsKHgpCSgoeCkucGdkKQorI2RlZmluZSBwZ3Byb3RfdmFsKHgpCSgoeCkucGdwcm90KQorCisjZGVmaW5lIF9fcHRlKHgpICgocHRlX3QpIHsgKHgpIH0gKQorI2RlZmluZSBfX3BtZCh4KSAoKHBtZF90KSB7ICh4KSB9ICkKKyNkZWZpbmUgX19wdWQoeCkgKChwdWRfdCkgeyAoeCkgfSApCisjZGVmaW5lIF9fcGdkKHgpICgocGdkX3QpIHsgKHgpIH0gKQorI2RlZmluZSBfX3BncHJvdCh4KQkoKHBncHJvdF90KSB7ICh4KSB9ICkKKworI2RlZmluZSBfX1NUQVJUX0tFUk5FTAkJMHhmZmZmZmZmZjgwMTAwMDAwVUwKKyNkZWZpbmUgX19TVEFSVF9LRVJORUxfbWFwCTB4ZmZmZmZmZmY4MDAwMDAwMFVMCisjZGVmaW5lIF9fUEFHRV9PRkZTRVQgICAgICAgICAgIDB4ZmZmZjgxMDAwMDAwMDAwMFVMCisKKyNlbHNlCisjZGVmaW5lIF9fU1RBUlRfS0VSTkVMCQkweGZmZmZmZmZmODAxMDAwMDAKKyNkZWZpbmUgX19TVEFSVF9LRVJORUxfbWFwCTB4ZmZmZmZmZmY4MDAwMDAwMAorI2RlZmluZSBfX1BBR0VfT0ZGU0VUICAgICAgICAgICAweGZmZmY4MTAwMDAwMDAwMDAKKyNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCisKKy8qIHRvIGFsaWduIHRoZSBwb2ludGVyIHRvIHRoZSAobmV4dCkgcGFnZSBib3VuZGFyeSAqLworI2RlZmluZSBQQUdFX0FMSUdOKGFkZHIpCSgoKGFkZHIpK1BBR0VfU0laRS0xKSZQQUdFX01BU0spCisKKy8qIFNlZSBEb2N1bWVudGF0aW9uL3g4Nl82NC9tbS50eHQgZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIG1lbW9yeSBtYXAuICovCisjZGVmaW5lIF9fUEhZU0lDQUxfTUFTS19TSElGVAk0NgorI2RlZmluZSBfX1BIWVNJQ0FMX01BU0sJCSgoMVVMIDw8IF9fUEhZU0lDQUxfTUFTS19TSElGVCkgLSAxKQorI2RlZmluZSBfX1ZJUlRVQUxfTUFTS19TSElGVAk0OAorI2RlZmluZSBfX1ZJUlRVQUxfTUFTSwkJKCgxVUwgPDwgX19WSVJUVUFMX01BU0tfU0hJRlQpIC0gMSkKKworI2RlZmluZSBLRVJORUxfVEVYVF9TSVpFICAoNDBVTCoxMDI0KjEwMjQpCisjZGVmaW5lIEtFUk5FTF9URVhUX1NUQVJUIDB4ZmZmZmZmZmY4MDAwMDAwMFVMIAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjaW5jbHVkZSA8YXNtL2J1Zy5oPgorCisvKiBQdXJlIDJebiB2ZXJzaW9uIG9mIGdldF9vcmRlciAqLworZXh0ZXJuIF9faW5saW5lX18gaW50IGdldF9vcmRlcih1bnNpZ25lZCBsb25nIHNpemUpCit7CisJaW50IG9yZGVyOworCisJc2l6ZSA9IChzaXplLTEpID4+IChQQUdFX1NISUZULTEpOworCW9yZGVyID0gLTE7CisJZG8geworCQlzaXplID4+PSAxOworCQlvcmRlcisrOworCX0gd2hpbGUgKHNpemUpOworCXJldHVybiBvcmRlcjsKK30KKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisjZGVmaW5lIFBBR0VfT0ZGU0VUCQkoKHVuc2lnbmVkIGxvbmcpX19QQUdFX09GRlNFVCkKKworLyogTm90ZTogX19wYSgmc3ltYm9sX3Zpc2libGVfdG9fYykgc2hvdWxkIGJlIGFsd2F5cyByZXBsYWNlZCB3aXRoIF9fcGFfc3ltYm9sLgorICAgT3RoZXJ3aXNlIHlvdSByaXNrIG1pc2NvbXBpbGF0aW9uLiAqLyAKKyNkZWZpbmUgX19wYSh4KQkJCSgoKHVuc2lnbmVkIGxvbmcpKHgpPj1fX1NUQVJUX0tFUk5FTF9tYXApPyh1bnNpZ25lZCBsb25nKSh4KSAtICh1bnNpZ25lZCBsb25nKV9fU1RBUlRfS0VSTkVMX21hcDoodW5zaWduZWQgbG9uZykoeCkgLSBQQUdFX09GRlNFVCkKKy8qIF9fcGFfc3ltYm9sIHNob3VsZCBiZSB1c2VkIGZvciBDIHZpc2libGUgc3ltYm9scy4KKyAgIFRoaXMgc2VlbXMgdG8gYmUgdGhlIG9mZmljaWFsIGdjYyBibGVzc2VkIHdheSB0byBkbyBzdWNoIGFyaXRobWV0aWMuICovIAorI2RlZmluZSBfX3BhX3N5bWJvbCh4KQkJXAorCSh7dW5zaWduZWQgbG9uZyB2OyAgXAorCSAgYXNtKCIiIDogIj1yIiAodikgOiAiMCIgKHgpKTsgXAorCSAgX19wYSh2KTsgfSkKKworI2RlZmluZSBfX3ZhKHgpCQkJKCh2b2lkICopKCh1bnNpZ25lZCBsb25nKSh4KStQQUdFX09GRlNFVCkpCisjaWZuZGVmIENPTkZJR19ESVNDT05USUdNRU0KKyNkZWZpbmUgcGZuX3RvX3BhZ2UocGZuKQkobWVtX21hcCArIChwZm4pKQorI2RlZmluZSBwYWdlX3RvX3BmbihwYWdlKQkoKHVuc2lnbmVkIGxvbmcpKChwYWdlKSAtIG1lbV9tYXApKQorI2RlZmluZSBwZm5fdmFsaWQocGZuKQkJKChwZm4pIDwgbWF4X21hcG5yKQorI2VuZGlmCisKKyNkZWZpbmUgdmlydF90b19wYWdlKGthZGRyKQlwZm5fdG9fcGFnZShfX3BhKGthZGRyKSA+PiBQQUdFX1NISUZUKQorI2RlZmluZSB2aXJ0X2FkZHJfdmFsaWQoa2FkZHIpCXBmbl92YWxpZChfX3BhKGthZGRyKSA+PiBQQUdFX1NISUZUKQorI2RlZmluZSBwZm5fdG9fa2FkZHIocGZuKSAgICAgIF9fdmEoKHBmbikgPDwgUEFHRV9TSElGVCkKKworI2RlZmluZSBWTV9EQVRBX0RFRkFVTFRfRkxBR1MgXAorCSgoKGN1cnJlbnQtPnBlcnNvbmFsaXR5ICYgUkVBRF9JTVBMSUVTX0VYRUMpID8gVk1fRVhFQyA6IDAgKSB8IFwKKwkgVk1fUkVBRCB8IFZNX1dSSVRFIHwgVk1fTUFZUkVBRCB8IFZNX01BWVdSSVRFIHwgVk1fTUFZRVhFQykKKworI2RlZmluZSBfX0hBVkVfQVJDSF9HQVRFX0FSRUEgMQkKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9YODZfNjRfUEFHRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvcGFyYW0uaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3MDdmMDUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvcGFyYW0uaApAQCAtMCwwICsxLDIyIEBACisjaWZuZGVmIF9BU014ODZfNjRfUEFSQU1fSAorI2RlZmluZSBfQVNNeDg2XzY0X1BBUkFNX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKyMgZGVmaW5lIEhaICAgICAgICAgICAgMTAwMCAgICAgICAgICAgIC8qIEludGVybmFsIGtlcm5lbCB0aW1lciBmcmVxdWVuY3kgKi8KKyMgZGVmaW5lIFVTRVJfSFogICAgICAgMTAwICAgICAgICAgIC8qIC4uIHNvbWUgdXNlciBpbnRlcmZhY2VzIGFyZSBpbiAidGlja3MgKi8KKyNkZWZpbmUgQ0xPQ0tTX1BFUl9TRUMgICAgICAgIChVU0VSX0haKSAgICAgICAvKiBsaWtlIHRpbWVzKCkgKi8KKyNlbmRpZgorCisjaWZuZGVmIEhaCisjZGVmaW5lIEhaIDEwMAorI2VuZGlmCisKKyNkZWZpbmUgRVhFQ19QQUdFU0laRQk0MDk2CisKKyNpZm5kZWYgTk9HUk9VUAorI2RlZmluZSBOT0dST1VQCQkoLTEpCisjZW5kaWYKKworI2RlZmluZSBNQVhIT1NUTkFNRUxFTgk2NAkvKiBtYXggbGVuZ3RoIG9mIGhvc3RuYW1lICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L3BhcnBvcnQuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9wYXJwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzEzNWVmOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9wYXJwb3J0LmgKQEAgLTAsMCArMSwxOCBAQAorLyoKKyAqIHBhcnBvcnQuaDogaWEzMi1zcGVjaWZpYyBwYXJwb3J0IGluaXRpYWxpc2F0aW9uCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwICBUaW0gV2F1Z2ggPHRpbUBjeWJlcmVsay5kZW1vbi5jby51az4KKyAqCisgKiBUaGlzIGZpbGUgc2hvdWxkIG9ubHkgYmUgaW5jbHVkZWQgYnkgZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfcGMuYy4KKyAqLworCisjaWZuZGVmIF9BU01fWDg2NjRfUEFSUE9SVF9ICisjZGVmaW5lIF9BU01fWDg2NjRfUEFSUE9SVF9IIDEKKworc3RhdGljIGludCBfX2RldmluaXQgcGFycG9ydF9wY19maW5kX2lzYV9wb3J0cyAoaW50IGF1dG9pcnEsIGludCBhdXRvZG1hKTsKK3N0YXRpYyBpbnQgX19kZXZpbml0IHBhcnBvcnRfcGNfZmluZF9ub25wY2lfcG9ydHMgKGludCBhdXRvaXJxLCBpbnQgYXV0b2RtYSkKK3sKKwlyZXR1cm4gcGFycG9ydF9wY19maW5kX2lzYV9wb3J0cyAoYXV0b2lycSwgYXV0b2RtYSk7Cit9CisKKyNlbmRpZiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9wY2ktZGlyZWN0LmggYi9pbmNsdWRlL2FzbS14ODZfNjQvcGNpLWRpcmVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzNmI2Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvcGNpLWRpcmVjdC5oCkBAIC0wLDAgKzEsNDggQEAKKyNpZm5kZWYgQVNNX1BDSV9ESVJFQ1RfSAorI2RlZmluZSBBU01fUENJX0RJUkVDVF9IIDEKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKy8qIERpcmVjdCBQQ0kgYWNjZXNzLiBUaGlzIGlzIHVzZWQgZm9yIFBDSSBhY2Nlc3NlcyBpbiBlYXJseSBib290IGJlZm9yZQorICAgdGhlIFBDSSBzdWJzeXN0ZW0gd29ya3MuICovIAorCisjZGVmaW5lIFBEcHJpbnRrKHguLi4pCisKK3N0YXRpYyBpbmxpbmUgdTMyIHJlYWRfcGNpX2NvbmZpZyh1OCBidXMsIHU4IHNsb3QsIHU4IGZ1bmMsIHU4IG9mZnNldCkKK3sKKwl1MzIgdjsgCisJb3V0bCgweDgwMDAwMDAwIHwgKGJ1czw8MTYpIHwgKHNsb3Q8PDExKSB8IChmdW5jPDw4KSB8IG9mZnNldCwgMHhjZjgpOworCXYgPSBpbmwoMHhjZmMpOyAKKwlpZiAodiAhPSAweGZmZmZmZmZmKQorCQlQRHByaW50aygiJXggcmVhZGluZyA0IGZyb20gJXg6ICV4XG4iLCBzbG90LCBvZmZzZXQsIHYpOworCXJldHVybiB2OworfQorCitzdGF0aWMgaW5saW5lIHU4IHJlYWRfcGNpX2NvbmZpZ19ieXRlKHU4IGJ1cywgdTggc2xvdCwgdTggZnVuYywgdTggb2Zmc2V0KQoreworCXU4IHY7IAorCW91dGwoMHg4MDAwMDAwMCB8IChidXM8PDE2KSB8IChzbG90PDwxMSkgfCAoZnVuYzw8OCkgfCBvZmZzZXQsIDB4Y2Y4KTsKKwl2ID0gaW5iKDB4Y2ZjICsgKG9mZnNldCYzKSk7IAorCVBEcHJpbnRrKCIleCByZWFkaW5nIDEgZnJvbSAleDogJXhcbiIsIHNsb3QsIG9mZnNldCwgdik7CisJcmV0dXJuIHY7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTE2IHJlYWRfcGNpX2NvbmZpZ18xNih1OCBidXMsIHU4IHNsb3QsIHU4IGZ1bmMsIHU4IG9mZnNldCkKK3sKKwl1MTYgdjsgCisJb3V0bCgweDgwMDAwMDAwIHwgKGJ1czw8MTYpIHwgKHNsb3Q8PDExKSB8IChmdW5jPDw4KSB8IG9mZnNldCwgMHhjZjgpOworCXYgPSBpbncoMHhjZmMgKyAob2Zmc2V0JjIpKTsgCisJUERwcmludGsoIiV4IHJlYWRpbmcgMiBmcm9tICV4OiAleFxuIiwgc2xvdCwgb2Zmc2V0LCB2KTsKKwlyZXR1cm4gdjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHdyaXRlX3BjaV9jb25maWcodTggYnVzLCB1OCBzbG90LCB1OCBmdW5jLCB1OCBvZmZzZXQsCisJCQkJICAgIHUzMiB2YWwpCit7CisJUERwcmludGsoIiV4IHdyaXRpbmcgdG8gJXg6ICV4XG4iLCBzbG90LCBvZmZzZXQsIHZhbCk7IAorCW91dGwoMHg4MDAwMDAwMCB8IChidXM8PDE2KSB8IChzbG90PDwxMSkgfCAoZnVuYzw8OCkgfCBvZmZzZXQsIDB4Y2Y4KTsKKwlvdXRsKHZhbCwgMHhjZmMpOyAKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvcGNpLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvcGNpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODcxMjUyMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9wY2kuaApAQCAtMCwwICsxLDE0MSBAQAorI2lmbmRlZiBfX3g4NjY0X1BDSV9ICisjZGVmaW5lIF9feDg2NjRfUENJX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvbW0uaD4gLyogZm9yIHN0cnVjdCBwYWdlICovCisKKy8qIENhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIHRoZSBsb2dpYyBpbiBwY2lfc2Nhbl9idXMgZm9yIHNraXBwaW5nCisgICBhbHJlYWR5LWNvbmZpZ3VyZWQgYnVzIG51bWJlcnMgLSB0byBiZSB1c2VkIGZvciBidWdneSBCSU9TZXMKKyAgIG9yIGFyY2hpdGVjdHVyZXMgd2l0aCBpbmNvbXBsZXRlIFBDSSBzZXR1cCBieSB0aGUgbG9hZGVyICovCisKKyNpZmRlZiBDT05GSUdfUENJCitleHRlcm4gdW5zaWduZWQgaW50IHBjaWJpb3NfYXNzaWduX2FsbF9idXNzZXModm9pZCk7CisjZWxzZQorI2RlZmluZSBwY2liaW9zX2Fzc2lnbl9hbGxfYnVzc2VzKCkJMAorI2VuZGlmCisjZGVmaW5lIHBjaWJpb3Nfc2Nhbl9hbGxfZm5zKGEsIGIpCTAKKworZXh0ZXJuIGludCBub19pb21tdSwgZm9yY2VfaW9tbXU7CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIHBjaV9tZW1fc3RhcnQ7CisjZGVmaW5lIFBDSUJJT1NfTUlOX0lPCQkweDEwMDAKKyNkZWZpbmUgUENJQklPU19NSU5fTUVNCQkocGNpX21lbV9zdGFydCkKKworI2RlZmluZSBQQ0lCSU9TX01JTl9DQVJEQlVTX0lPCTB4NDAwMAorCit2b2lkIHBjaWJpb3NfY29uZmlnX2luaXQodm9pZCk7CitzdHJ1Y3QgcGNpX2J1cyAqIHBjaWJpb3Nfc2Nhbl9yb290KGludCBidXMpOworZXh0ZXJuIGludCAoKnBjaV9jb25maWdfcmVhZCkoaW50IHNlZywgaW50IGJ1cywgaW50IGRldiwgaW50IGZuLCBpbnQgcmVnLCBpbnQgbGVuLCB1MzIgKnZhbHVlKTsKK2V4dGVybiBpbnQgKCpwY2lfY29uZmlnX3dyaXRlKShpbnQgc2VnLCBpbnQgYnVzLCBpbnQgZGV2LCBpbnQgZm4sIGludCByZWcsIGludCBsZW4sIHUzMiB2YWx1ZSk7CisKK3ZvaWQgcGNpYmlvc19zZXRfbWFzdGVyKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwordm9pZCBwY2liaW9zX3BlbmFsaXplX2lzYV9pcnEoaW50IGlycSk7CitzdHJ1Y3QgaXJxX3JvdXRpbmdfdGFibGUgKnBjaWJpb3NfZ2V0X2lycV9yb3V0aW5nX3RhYmxlKHZvaWQpOworaW50IHBjaWJpb3Nfc2V0X2lycV9yb3V0aW5nKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBwaW4sIGludCBpcnEpOworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKworZXh0ZXJuIGludCBpb21tdV9zZXR1cChjaGFyICpvcHQpOworCisjaWZkZWYgQ09ORklHX0dBUlRfSU9NTVUKKy8qIFRoZSBQQ0kgYWRkcmVzcyBzcGFjZSBkb2VzIGVxdWFsIHRoZSBwaHlzaWNhbCBtZW1vcnkKKyAqIGFkZHJlc3Mgc3BhY2UuICBUaGUgbmV0d29ya2luZyBhbmQgYmxvY2sgZGV2aWNlIGxheWVycyB1c2UKKyAqIHRoaXMgYm9vbGVhbiBmb3IgYm91bmNlIGJ1ZmZlciBkZWNpc2lvbnMKKyAqCisgKiBPbiBBTUQ2NCBpdCBtb3N0bHkgZXF1YWxzLCBidXQgd2Ugc2V0IGl0IHRvIHplcm8gdG8gdGVsbCBzb21lIHN1YnN5c3RlbXMKKyAqIHRoYXQgYW4gSU9NTVUgaXMgYXZhaWxhYmxlLgorICovCisjZGVmaW5lIFBDSV9ETUFfQlVTX0lTX1BIWVMJKG5vX2lvbW11ID8gMSA6IDApCisKKy8qCisgKiB4ODYtNjQgYWx3YXlzIHN1cHBvcnRzIERBQywgYnV0IHNvbWV0aW1lcyBpdCBpcyB1c2VmdWwgdG8gZm9yY2UKKyAqIGRldmljZXMgdGhyb3VnaCB0aGUgSU9NTVUgdG8gZ2V0IGF1dG9tYXRpYyBzZyBsaXN0IG1lcmdpbmcuCisgKiBPcHRpb25hbCByaWdodCBub3cuCisgKi8KK2V4dGVybiBpbnQgaW9tbXVfc2FjX2ZvcmNlOworI2RlZmluZSBwY2lfZGFjX2RtYV9zdXBwb3J0ZWQocGNpX2RldiwgbWFzaykJKCFpb21tdV9zYWNfZm9yY2UpCisKKyNkZWZpbmUgREVDTEFSRV9QQ0lfVU5NQVBfQUREUihBRERSX05BTUUpCVwKKwlkbWFfYWRkcl90IEFERFJfTkFNRTsKKyNkZWZpbmUgREVDTEFSRV9QQ0lfVU5NQVBfTEVOKExFTl9OQU1FKQkJXAorCV9fdTMyIExFTl9OQU1FOworI2RlZmluZSBwY2lfdW5tYXBfYWRkcihQVFIsIEFERFJfTkFNRSkJCQlcCisJKChQVFIpLT5BRERSX05BTUUpCisjZGVmaW5lIHBjaV91bm1hcF9hZGRyX3NldChQVFIsIEFERFJfTkFNRSwgVkFMKQkJXAorCSgoKFBUUiktPkFERFJfTkFNRSkgPSAoVkFMKSkKKyNkZWZpbmUgcGNpX3VubWFwX2xlbihQVFIsIExFTl9OQU1FKQkJCVwKKwkoKFBUUiktPkxFTl9OQU1FKQorI2RlZmluZSBwY2lfdW5tYXBfbGVuX3NldChQVFIsIExFTl9OQU1FLCBWQUwpCQlcCisJKCgoUFRSKS0+TEVOX05BTUUpID0gKFZBTCkpCisKKyNlbHNlCisvKiBObyBJT01NVSAqLworCisjZGVmaW5lIFBDSV9ETUFfQlVTX0lTX1BIWVMJMQorI2RlZmluZSBwY2lfZGFjX2RtYV9zdXBwb3J0ZWQocGNpX2RldiwgbWFzaykgICAgMQorCisjZGVmaW5lIERFQ0xBUkVfUENJX1VOTUFQX0FERFIoQUREUl9OQU1FKQorI2RlZmluZSBERUNMQVJFX1BDSV9VTk1BUF9MRU4oTEVOX05BTUUpCisjZGVmaW5lIHBjaV91bm1hcF9hZGRyKFBUUiwgQUREUl9OQU1FKQkJKDApCisjZGVmaW5lIHBjaV91bm1hcF9hZGRyX3NldChQVFIsIEFERFJfTkFNRSwgVkFMKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHBjaV91bm1hcF9sZW4oUFRSLCBMRU5fTkFNRSkJCSgwKQorI2RlZmluZSBwY2lfdW5tYXBfbGVuX3NldChQVFIsIExFTl9OQU1FLCBWQUwpCWRvIHsgfSB3aGlsZSAoMCkKKworI2VuZGlmCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wY2ktZG1hLWNvbXBhdC5oPgorCitzdGF0aWMgaW5saW5lIGRtYTY0X2FkZHJfdAorcGNpX2RhY19wYWdlX3RvX2RtYShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBpbnQgZGlyZWN0aW9uKQoreworCXJldHVybiAoKGRtYTY0X2FkZHJfdCkgcGFnZV90b19waHlzKHBhZ2UpICsKKwkJKGRtYTY0X2FkZHJfdCkgb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqCitwY2lfZGFjX2RtYV90b19wYWdlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBkbWE2NF9hZGRyX3QgZG1hX2FkZHIpCit7CisJcmV0dXJuIHZpcnRfdG9fcGFnZShfX3ZhKGRtYV9hZGRyKSk7IAkKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCitwY2lfZGFjX2RtYV90b19vZmZzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGRtYTY0X2FkZHJfdCBkbWFfYWRkcikKK3sKKwlyZXR1cm4gKGRtYV9hZGRyICYgflBBR0VfTUFTSyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcGNpX2RhY19kbWFfc3luY19zaW5nbGVfZm9yX2NwdShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgZG1hNjRfYWRkcl90IGRtYV9hZGRyLCBzaXplX3QgbGVuLCBpbnQgZGlyZWN0aW9uKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3BjaV9kYWNfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGRtYTY0X2FkZHJfdCBkbWFfYWRkciwgc2l6ZV90IGxlbiwgaW50IGRpcmVjdGlvbikKK3sKKwlmbHVzaF93cml0ZV9idWZmZXJzKCk7Cit9CisKKyNkZWZpbmUgSEFWRV9QQ0lfTU1BUAorZXh0ZXJuIGludCBwY2lfbW1hcF9wYWdlX3JhbmdlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJICAgICAgIGVudW0gcGNpX21tYXBfc3RhdGUgbW1hcF9zdGF0ZSwgaW50IHdyaXRlX2NvbWJpbmUpOworCitzdGF0aWMgaW5saW5lIHZvaWQgcGNpYmlvc19hZGRfcGxhdGZvcm1fZW50cmllcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworfQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisvKiBnZW5lcmljIHBjaSBzdHVmZiAqLworI2lmZGVmIENPTkZJR19QQ0kKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wY2kuaD4KKyNlbmRpZgorCisjZW5kaWYgLyogX194ODY2NF9QQ0lfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L3BkYS5oIGIvaW5jbHVkZS9hc20teDg2XzY0L3BkYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2Yjc2NmMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvcGRhLmgKQEAgLTAsMCArMSw4MyBAQAorI2lmbmRlZiBYODZfNjRfUERBX0gKKyNkZWZpbmUgWDg2XzY0X1BEQV9ICisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgorCisvKiBQZXIgcHJvY2Vzc29yIGRhdGFzdHJ1Y3R1cmUuICVncyBwb2ludHMgdG8gaXQgd2hpbGUgdGhlIGtlcm5lbCBydW5zICovIAorc3RydWN0IHg4NjY0X3BkYSB7CisJc3RydWN0IHRhc2tfc3RydWN0ICpwY3VycmVudDsJLyogQ3VycmVudCBwcm9jZXNzICovCisJdW5zaWduZWQgbG9uZyBkYXRhX29mZnNldDsJLyogUGVyIGNwdSBkYXRhIG9mZnNldCBmcm9tIGxpbmtlciBhZGRyZXNzICovCisJc3RydWN0IHg4NjY0X3BkYSAqbWU7CSAgICAvKiBQb2ludGVyIHRvIGl0c2VsZiAqLyAgCisJdW5zaWduZWQgbG9uZyBrZXJuZWxzdGFjazsgIC8qIHRvcCBvZiBrZXJuZWwgc3RhY2sgZm9yIGN1cnJlbnQgKi8gCisJdW5zaWduZWQgbG9uZyBvbGRyc3A7IAkgICAgLyogdXNlciByc3AgZm9yIHN5c3RlbSBjYWxsICovCisJdW5zaWduZWQgbG9uZyBpcnFyc3A7CSAgICAvKiBPbGQgcnNwIGZvciBpbnRlcnJ1cHRzLiAqLyAKKyAgICAgICAgaW50IGlycWNvdW50OwkJICAgIC8qIElycSBuZXN0aW5nIGNvdW50ZXIuIFN0YXJ0cyB3aXRoIC0xICovICAJCisJaW50IGNwdW51bWJlcjsJCSAgICAvKiBMb2dpY2FsIENQVSBudW1iZXIgKi8KKwljaGFyICppcnFzdGFja3B0cjsJLyogdG9wIG9mIGlycXN0YWNrICovCisJdW5zaWduZWQgaW50IF9fc29mdGlycV9wZW5kaW5nOworCXVuc2lnbmVkIGludCBfX25taV9jb3VudDsJLyogbnVtYmVyIG9mIE5NSSBvbiB0aGlzIENQVXMgKi8KKwlzdHJ1Y3QgbW1fc3RydWN0ICphY3RpdmVfbW07CisJaW50IG1tdV9zdGF0ZTsgICAgIAorCXVuc2lnbmVkIGFwaWNfdGltZXJfaXJxczsKK30gX19fX2NhY2hlbGluZV9hbGlnbmVkOworCisKKyNkZWZpbmUgSVJRU1RBQ0tfT1JERVIgMgorI2RlZmluZSBJUlFTVEFDS1NJWkUgKFBBR0VfU0laRSA8PCBJUlFTVEFDS19PUkRFUikgCisKK2V4dGVybiBzdHJ1Y3QgeDg2NjRfcGRhIGNwdV9wZGFbXTsKKworLyogCisgKiBUaGVyZSBpcyBubyBmYXN0IHdheSB0byBnZXQgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgUERBLCBhbGwgdGhlIGFjY2Vzc2VzCisgKiBoYXZlIHRvIG1lbnRpb24gJWZzLyVncy4gIFNvIGl0IG5lZWRzIHRvIGJlIGRvbmUgdGhpcyBUb3J2YWxkaWFuIHdheS4KKyAqLyAKKyNkZWZpbmUgc2l6ZW9mX2ZpZWxkKHR5cGUsZmllbGQpICAoc2l6ZW9mKCgodHlwZSAqKTApLT5maWVsZCkpCisjZGVmaW5lIHR5cGVvZl9maWVsZCh0eXBlLGZpZWxkKSAgdHlwZW9mKCgodHlwZSAqKTApLT5maWVsZCkKKworZXh0ZXJuIHZvaWQgX19iYWRfcGRhX2ZpZWxkKHZvaWQpOworCisjZGVmaW5lIHBkYV9vZmZzZXQoZmllbGQpIG9mZnNldG9mKHN0cnVjdCB4ODY2NF9wZGEsIGZpZWxkKQorCisjZGVmaW5lIHBkYV90b19vcChvcCxmaWVsZCx2YWwpIGRvIHsgXAorICAgICAgIHN3aXRjaCAoc2l6ZW9mX2ZpZWxkKHN0cnVjdCB4ODY2NF9wZGEsIGZpZWxkKSkgeyAJCVwKK2Nhc2UgMjogXAorYXNtIHZvbGF0aWxlKG9wICJ3ICUwLCUlZ3M6JVAxIjo6InIiICh2YWwpLCJpIihwZGFfb2Zmc2V0KGZpZWxkKSk6Im1lbW9yeSIpOyBicmVhazsgXAorY2FzZSA0OiBcCithc20gdm9sYXRpbGUob3AgImwgJTAsJSVnczolUDEiOjoiciIgKHZhbCksImkiKHBkYV9vZmZzZXQoZmllbGQpKToibWVtb3J5Iik7IGJyZWFrOyBcCitjYXNlIDg6IFwKK2FzbSB2b2xhdGlsZShvcCAicSAlMCwlJWdzOiVQMSI6OiJyIiAodmFsKSwiaSIocGRhX29mZnNldChmaWVsZCkpOiJtZW1vcnkiKTsgYnJlYWs7IFwKKyAgICAgICBkZWZhdWx0OiBfX2JhZF9wZGFfZmllbGQoKTsgCQkJCQlcCisgICAgICAgfSBcCisgICAgICAgfSB3aGlsZSAoMCkKKworLyogCisgKiBBSzogUERBIHJlYWQgYWNjZXNzZXMgc2hvdWxkIGJlIG5laXRoZXIgdm9sYXRpbGUgbm9yIGhhdmUgYW4gbWVtb3J5IGNsb2JiZXIuCisgKiBVbmZvcnR1bmF0ZWx5IHJlbW92aW5nIHRoZW0gY2F1c2VzIGFsbCBoZWxsIHRvIGJyZWFrIGxvc2UgY3VycmVudGx5LgorICovCisjZGVmaW5lIHBkYV9mcm9tX29wKG9wLGZpZWxkKSAoeyBcCisgICAgICAgdHlwZWRlZiB0eXBlb2ZfZmllbGQoc3RydWN0IHg4NjY0X3BkYSwgZmllbGQpIFRfXzsgVF9fIHJldF9fOyBcCisgICAgICAgc3dpdGNoIChzaXplb2ZfZmllbGQoc3RydWN0IHg4NjY0X3BkYSwgZmllbGQpKSB7IAkJXAorY2FzZSAyOiBcCithc20gdm9sYXRpbGUob3AgIncgJSVnczolUDEsJTAiOiI9ciIgKHJldF9fKToiaSIocGRhX29mZnNldChmaWVsZCkpOiJtZW1vcnkiKTsgYnJlYWs7XAorY2FzZSA0OiBcCithc20gdm9sYXRpbGUob3AgImwgJSVnczolUDEsJTAiOiI9ciIgKHJldF9fKToiaSIocGRhX29mZnNldChmaWVsZCkpOiJtZW1vcnkiKTsgYnJlYWs7XAorY2FzZSA4OiBcCithc20gdm9sYXRpbGUob3AgInEgJSVnczolUDEsJTAiOiI9ciIgKHJldF9fKToiaSIocGRhX29mZnNldChmaWVsZCkpOiJtZW1vcnkiKTsgYnJlYWs7XAorICAgICAgIGRlZmF1bHQ6IF9fYmFkX3BkYV9maWVsZCgpOyAJCQkJCVwKKyAgICAgICB9IFwKKyAgICAgICByZXRfXzsgfSkKKworCisjZGVmaW5lIHJlYWRfcGRhKGZpZWxkKSBwZGFfZnJvbV9vcCgibW92IixmaWVsZCkKKyNkZWZpbmUgd3JpdGVfcGRhKGZpZWxkLHZhbCkgcGRhX3RvX29wKCJtb3YiLGZpZWxkLHZhbCkKKyNkZWZpbmUgYWRkX3BkYShmaWVsZCx2YWwpIHBkYV90b19vcCgiYWRkIixmaWVsZCx2YWwpCisjZGVmaW5lIHN1Yl9wZGEoZmllbGQsdmFsKSBwZGFfdG9fb3AoInN1YiIsZmllbGQsdmFsKQorCisjZW5kaWYKKworI2RlZmluZSBQREFfU1RBQ0tPRkZTRVQgKDUqOCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvcGVyY3B1LmggYi9pbmNsdWRlL2FzbS14ODZfNjQvcGVyY3B1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE1ZDczZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9wZXJjcHUuaApAQCAtMCwwICsxLDUyIEBACisjaWZuZGVmIF9BU01fWDg2NjRfUEVSQ1BVX0hfCisjZGVmaW5lIF9BU01fWDg2NjRfUEVSQ1BVX0hfCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKworLyogU2FtZSBhcyBhc20tZ2VuZXJpYy9wZXJjcHUuaCwgZXhjZXB0IHRoYXQgd2Ugc3RvcmUgdGhlIHBlciBjcHUgb2Zmc2V0CisgICBpbiB0aGUgUERBLiBMb25nZXIgdGVybSB0aGUgUERBIGFuZCBldmVyeSBwZXIgY3B1IHZhcmlhYmxlCisgICBzaG91bGQgYmUganVzdCBwdXQgaW50byBhIHNpbmdsZSBzZWN0aW9uIGFuZCByZWZlcmVuY2VkIGRpcmVjdGx5CisgICBmcm9tICVncyAqLworCisjaWZkZWYgQ09ORklHX1NNUAorCisjaW5jbHVkZSA8YXNtL3BkYS5oPgorCisjZGVmaW5lIF9fcGVyX2NwdV9vZmZzZXQoY3B1KSAoY3B1X3BkYVtjcHVdLmRhdGFfb2Zmc2V0KQorI2RlZmluZSBfX215X2NwdV9vZmZzZXQoKSByZWFkX3BkYShkYXRhX29mZnNldCkKKworLyogU2VwYXJhdGUgb3V0IHRoZSB0eXBlLCBzbyAoaW50WzNdLCBmb28pIHdvcmtzLiAqLworI2RlZmluZSBERUZJTkVfUEVSX0NQVSh0eXBlLCBuYW1lKSBcCisgICAgX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIi5kYXRhLnBlcmNwdSIpKSkgX190eXBlb2ZfXyh0eXBlKSBwZXJfY3B1X18jI25hbWUKKworLyogdmFyIGlzIGluIGRpc2NhcmRlZCByZWdpb246IG9mZnNldCB0byBwYXJ0aWN1bGFyIGNvcHkgd2Ugd2FudCAqLworI2RlZmluZSBwZXJfY3B1KHZhciwgY3B1KSAoKlJFTE9DX0hJREUoJnBlcl9jcHVfXyMjdmFyLCBfX3Blcl9jcHVfb2Zmc2V0KGNwdSkpKQorI2RlZmluZSBfX2dldF9jcHVfdmFyKHZhcikgKCpSRUxPQ19ISURFKCZwZXJfY3B1X18jI3ZhciwgX19teV9jcHVfb2Zmc2V0KCkpKQorCisvKiBBIG1hY3JvIHRvIGF2b2lkICNpbmNsdWRlIGhlbGwuLi4gKi8KKyNkZWZpbmUgcGVyY3B1X21vZGNvcHkocGNwdWRzdCwgc3JjLCBzaXplKQkJCVwKK2RvIHsJCQkJCQkJCVwKKwl1bnNpZ25lZCBpbnQgX19pOwkJCQkJXAorCWZvciAoX19pID0gMDsgX19pIDwgTlJfQ1BVUzsgX19pKyspCQkJXAorCQlpZiAoY3B1X3Bvc3NpYmxlKF9faSkpCQkJCVwKKwkJCW1lbWNweSgocGNwdWRzdCkrX19wZXJfY3B1X29mZnNldChfX2kpLAlcCisJCQkgICAgICAgKHNyYyksIChzaXplKSk7CQkJXAorfSB3aGlsZSAoMCkKKworZXh0ZXJuIHZvaWQgc2V0dXBfcGVyX2NwdV9hcmVhcyh2b2lkKTsKKworI2Vsc2UgLyogISBTTVAgKi8KKworI2RlZmluZSBERUZJTkVfUEVSX0NQVSh0eXBlLCBuYW1lKSBcCisgICAgX190eXBlb2ZfXyh0eXBlKSBwZXJfY3B1X18jI25hbWUKKworI2RlZmluZSBwZXJfY3B1KHZhciwgY3B1KQkJCSgqKCh2b2lkKWNwdSwgJnBlcl9jcHVfXyMjdmFyKSkKKyNkZWZpbmUgX19nZXRfY3B1X3Zhcih2YXIpCQkJcGVyX2NwdV9fIyN2YXIKKworI2VuZGlmCS8qIFNNUCAqLworCisjZGVmaW5lIERFQ0xBUkVfUEVSX0NQVSh0eXBlLCBuYW1lKSBleHRlcm4gX190eXBlb2ZfXyh0eXBlKSBwZXJfY3B1X18jI25hbWUKKworI2RlZmluZSBFWFBPUlRfUEVSX0NQVV9TWU1CT0wodmFyKSBFWFBPUlRfU1lNQk9MKHBlcl9jcHVfXyMjdmFyKQorI2RlZmluZSBFWFBPUlRfUEVSX0NQVV9TWU1CT0xfR1BMKHZhcikgRVhQT1JUX1NZTUJPTF9HUEwocGVyX2NwdV9fIyN2YXIpCisKKyNlbmRpZiAvKiBfQVNNX1g4NjY0X1BFUkNQVV9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L3BnYWxsb2MuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9wZ2FsbG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVhZGQxNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9wZ2FsbG9jLmgKQEAgLTAsMCArMSwxMDUgQEAKKyNpZm5kZWYgX1g4Nl82NF9QR0FMTE9DX0gKKyNkZWZpbmUgX1g4Nl82NF9QR0FMTE9DX0gKKworI2luY2x1ZGUgPGFzbS9maXhtYXAuaD4KKyNpbmNsdWRlIDxhc20vcGRhLmg+CisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisKKyNkZWZpbmUgcG1kX3BvcHVsYXRlX2tlcm5lbChtbSwgcG1kLCBwdGUpIFwKKwkJc2V0X3BtZChwbWQsIF9fcG1kKF9QQUdFX1RBQkxFIHwgX19wYShwdGUpKSkKKyNkZWZpbmUgcHVkX3BvcHVsYXRlKG1tLCBwdWQsIHBtZCkgXAorCQlzZXRfcHVkKHB1ZCwgX19wdWQoX1BBR0VfVEFCTEUgfCBfX3BhKHBtZCkpKQorI2RlZmluZSBwZ2RfcG9wdWxhdGUobW0sIHBnZCwgcHVkKSBcCisJCXNldF9wZ2QocGdkLCBfX3BnZChfUEFHRV9UQUJMRSB8IF9fcGEocHVkKSkpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwbWRfcG9wdWxhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQsIHN0cnVjdCBwYWdlICpwdGUpCit7CisJc2V0X3BtZChwbWQsIF9fcG1kKF9QQUdFX1RBQkxFIHwgKHBhZ2VfdG9fcGZuKHB0ZSkgPDwgUEFHRV9TSElGVCkpKTsKK30KKworZXh0ZXJuIF9faW5saW5lX18gcG1kX3QgKmdldF9wbWQodm9pZCkKK3sKKwlyZXR1cm4gKHBtZF90ICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOworfQorCitleHRlcm4gX19pbmxpbmVfXyB2b2lkIHBtZF9mcmVlKHBtZF90ICpwbWQpCit7CisJQlVHX09OKCh1bnNpZ25lZCBsb25nKXBtZCAmIChQQUdFX1NJWkUtMSkpOworCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylwbWQpOworfQorCitzdGF0aWMgaW5saW5lIHBtZF90ICpwbWRfYWxsb2Nfb25lIChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCXJldHVybiAocG1kX3QgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTHxfX0dGUF9SRVBFQVQpOworfQorCitzdGF0aWMgaW5saW5lIHB1ZF90ICpwdWRfYWxsb2Nfb25lKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcmV0dXJuIChwdWRfdCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMfF9fR0ZQX1JFUEVBVCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdWRfZnJlZSAocHVkX3QgKnB1ZCkKK3sKKwlCVUdfT04oKHVuc2lnbmVkIGxvbmcpcHVkICYgKFBBR0VfU0laRS0xKSk7CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXB1ZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgcGdkX3QgKnBnZF9hbGxvYyhzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwl1bnNpZ25lZCBib3VuZGFyeTsKKwlwZ2RfdCAqcGdkID0gKHBnZF90ICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUx8X19HRlBfUkVQRUFUKTsKKwlpZiAoIXBnZCkKKwkJcmV0dXJuIE5VTEw7CisJLyoKKwkgKiBDb3B5IGtlcm5lbCBwb2ludGVycyBpbiBmcm9tIGluaXQuCisJICogQ291bGQga2VlcCBhIGZyZWVsaXN0IG9yIHNsYWIgY2FjaGUgb2YgdGhvc2UgYmVjYXVzZSB0aGUga2VybmVsCisJICogcGFydCBuZXZlciBjaGFuZ2VzLgorCSAqLworCWJvdW5kYXJ5ID0gcGdkX2luZGV4KF9fUEFHRV9PRkZTRVQpOworCW1lbXNldChwZ2QsIDAsIGJvdW5kYXJ5ICogc2l6ZW9mKHBnZF90KSk7CisJbWVtY3B5KHBnZCArIGJvdW5kYXJ5LAorCSAgICAgICBpbml0X2xldmVsNF9wZ3QgKyBib3VuZGFyeSwKKwkgICAgICAgKFBUUlNfUEVSX1BHRCAtIGJvdW5kYXJ5KSAqIHNpemVvZihwZ2RfdCkpOworCXJldHVybiBwZ2Q7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwZ2RfZnJlZShwZ2RfdCAqcGdkKQoreworCUJVR19PTigodW5zaWduZWQgbG9uZylwZ2QgJiAoUEFHRV9TSVpFLTEpKTsKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcGdkKTsKK30KKworc3RhdGljIGlubGluZSBwdGVfdCAqcHRlX2FsbG9jX29uZV9rZXJuZWwoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwlyZXR1cm4gKHB0ZV90ICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUx8X19HRlBfUkVQRUFUKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqcHRlX2FsbG9jX29uZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCXZvaWQgKnAgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMfF9fR0ZQX1JFUEVBVCk7CisJaWYgKCFwKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gdmlydF90b19wYWdlKHApOworfQorCisvKiBTaG91bGQgcmVhbGx5IGltcGxlbWVudCBnYyBmb3IgZnJlZSBwYWdlIHRhYmxlIHBhZ2VzLiBUaGlzIGNvdWxkIGJlCisgICBkb25lIHdpdGggYSByZWZlcmVuY2UgY291bnQgaW4gc3RydWN0IHBhZ2UuICovCisKK2V4dGVybiBfX2lubGluZV9fIHZvaWQgcHRlX2ZyZWVfa2VybmVsKHB0ZV90ICpwdGUpCit7CisJQlVHX09OKCh1bnNpZ25lZCBsb25nKXB0ZSAmIChQQUdFX1NJWkUtMSkpOworCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylwdGUpOyAKK30KKworZXh0ZXJuIGlubGluZSB2b2lkIHB0ZV9mcmVlKHN0cnVjdCBwYWdlICpwdGUpCit7CisJX19mcmVlX3BhZ2UocHRlKTsKK30gCisKKyNkZWZpbmUgX19wdGVfZnJlZV90bGIodGxiLHB0ZSkgdGxiX3JlbW92ZV9wYWdlKCh0bGIpLChwdGUpKQorCisjZGVmaW5lIF9fcG1kX2ZyZWVfdGxiKHRsYix4KSAgIHRsYl9yZW1vdmVfcGFnZSgodGxiKSx2aXJ0X3RvX3BhZ2UoeCkpCisjZGVmaW5lIF9fcHVkX2ZyZWVfdGxiKHRsYix4KSAgIHRsYl9yZW1vdmVfcGFnZSgodGxiKSx2aXJ0X3RvX3BhZ2UoeCkpCisKKyNlbmRpZiAvKiBfWDg2XzY0X1BHQUxMT0NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9wZ3RhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM2YjZmMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9wZ3RhYmxlLmgKQEAgLTAsMCArMSw0MzcgQEAKKyNpZm5kZWYgX1g4Nl82NF9QR1RBQkxFX0gKKyNkZWZpbmUgX1g4Nl82NF9QR1RBQkxFX0gKKworLyoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZnVuY3Rpb25zIGFuZCBkZWZpbmVzIG5lY2Vzc2FyeSB0byBtb2RpZnkgYW5kIHVzZQorICogdGhlIHg4Ni02NCBwYWdlIHRhYmxlIHRyZWUuCisgKi8KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL2ZpeG1hcC5oPgorI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisjaW5jbHVkZSA8YXNtL3BkYS5oPgorCitleHRlcm4gcHVkX3QgbGV2ZWwzX2tlcm5lbF9wZ3RbNTEyXTsKK2V4dGVybiBwdWRfdCBsZXZlbDNfcGh5c21lbV9wZ3RbNTEyXTsKK2V4dGVybiBwdWRfdCBsZXZlbDNfaWRlbnRfcGd0WzUxMl07CitleHRlcm4gcG1kX3QgbGV2ZWwyX2tlcm5lbF9wZ3RbNTEyXTsKK2V4dGVybiBwZ2RfdCBpbml0X2xldmVsNF9wZ3RbXTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fc3VwcG9ydGVkX3B0ZV9tYXNrOworCisjZGVmaW5lIHN3YXBwZXJfcGdfZGlyIGluaXRfbGV2ZWw0X3BndAorCitleHRlcm4gaW50IG5vbnhfc2V0dXAoY2hhciAqc3RyKTsKK2V4dGVybiB2b2lkIHBhZ2luZ19pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgY2xlYXJfa2VybmVsX21hcHBpbmcodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpOworCitleHRlcm4gdW5zaWduZWQgbG9uZyBwZ2tlcm5fbWFzazsKKworLyoKKyAqIFpFUk9fUEFHRSBpcyBhIGdsb2JhbCBzaGFyZWQgcGFnZSB0aGF0IGlzIGFsd2F5cyB6ZXJvOiB1c2VkCisgKiBmb3IgemVyby1tYXBwZWQgbWVtb3J5IGFyZWFzIGV0Yy4uCisgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIGVtcHR5X3plcm9fcGFnZVtQQUdFX1NJWkUvc2l6ZW9mKHVuc2lnbmVkIGxvbmcpXTsKKyNkZWZpbmUgWkVST19QQUdFKHZhZGRyKSAodmlydF90b19wYWdlKGVtcHR5X3plcm9fcGFnZSkpCisKKy8qCisgKiBQR0RJUl9TSElGVCBkZXRlcm1pbmVzIHdoYXQgYSB0b3AtbGV2ZWwgcGFnZSB0YWJsZSBlbnRyeSBjYW4gbWFwCisgKi8KKyNkZWZpbmUgUEdESVJfU0hJRlQJMzkKKyNkZWZpbmUgUFRSU19QRVJfUEdECTUxMgorCisvKgorICogM3JkIGxldmVsIHBhZ2UKKyAqLworI2RlZmluZSBQVURfU0hJRlQJMzAKKyNkZWZpbmUgUFRSU19QRVJfUFVECTUxMgorCisvKgorICogUE1EX1NISUZUIGRldGVybWluZXMgdGhlIHNpemUgb2YgdGhlIGFyZWEgYSBtaWRkbGUtbGV2ZWwKKyAqIHBhZ2UgdGFibGUgY2FuIG1hcAorICovCisjZGVmaW5lIFBNRF9TSElGVAkyMQorI2RlZmluZSBQVFJTX1BFUl9QTUQJNTEyCisKKy8qCisgKiBlbnRyaWVzIHBlciBwYWdlIGRpcmVjdG9yeSBsZXZlbAorICovCisjZGVmaW5lIFBUUlNfUEVSX1BURQk1MTIKKworI2RlZmluZSBwdGVfRVJST1IoZSkgXAorCXByaW50aygiJXM6JWQ6IGJhZCBwdGUgJXAoJTAxNmx4KS5cbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgJihlKSwgcHRlX3ZhbChlKSkKKyNkZWZpbmUgcG1kX0VSUk9SKGUpIFwKKwlwcmludGsoIiVzOiVkOiBiYWQgcG1kICVwKCUwMTZseCkuXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sICYoZSksIHBtZF92YWwoZSkpCisjZGVmaW5lIHB1ZF9FUlJPUihlKSBcCisJcHJpbnRrKCIlczolZDogYmFkIHB1ZCAlcCglMDE2bHgpLlxuIiwgX19GSUxFX18sIF9fTElORV9fLCAmKGUpLCBwdWRfdmFsKGUpKQorI2RlZmluZSBwZ2RfRVJST1IoZSkgXAorCXByaW50aygiJXM6JWQ6IGJhZCBwZ2QgJXAoJTAxNmx4KS5cbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgJihlKSwgcGdkX3ZhbChlKSkKKworI2RlZmluZSBwZ2Rfbm9uZSh4KQkoIXBnZF92YWwoeCkpCisjZGVmaW5lIHB1ZF9ub25lKHgpCSghcHVkX3ZhbCh4KSkKKworc3RhdGljIGlubGluZSB2b2lkIHNldF9wdGUocHRlX3QgKmRzdCwgcHRlX3QgdmFsKQoreworCXB0ZV92YWwoKmRzdCkgPSBwdGVfdmFsKHZhbCk7Cit9IAorI2RlZmluZSBzZXRfcHRlX2F0KG1tLGFkZHIscHRlcCxwdGV2YWwpIHNldF9wdGUocHRlcCxwdGV2YWwpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcG1kKHBtZF90ICpkc3QsIHBtZF90IHZhbCkKK3sKKyAgICAgICAgcG1kX3ZhbCgqZHN0KSA9IHBtZF92YWwodmFsKTsgCit9IAorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3B1ZChwdWRfdCAqZHN0LCBwdWRfdCB2YWwpCit7CisJcHVkX3ZhbCgqZHN0KSA9IHB1ZF92YWwodmFsKTsKK30KKworZXh0ZXJuIGlubGluZSB2b2lkIHB1ZF9jbGVhciAocHVkX3QgKnB1ZCkKK3sKKwlzZXRfcHVkKHB1ZCwgX19wdWQoMCkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BnZChwZ2RfdCAqZHN0LCBwZ2RfdCB2YWwpCit7CisJcGdkX3ZhbCgqZHN0KSA9IHBnZF92YWwodmFsKTsgCit9IAorCitleHRlcm4gaW5saW5lIHZvaWQgcGdkX2NsZWFyIChwZ2RfdCAqIHBnZCkKK3sKKwlzZXRfcGdkKHBnZCwgX19wZ2QoMCkpOworfQorCisjZGVmaW5lIHB1ZF9wYWdlKHB1ZCkgXAorKCh1bnNpZ25lZCBsb25nKSBfX3ZhKHB1ZF92YWwocHVkKSAmIFBIWVNJQ0FMX1BBR0VfTUFTSykpCisKKyNkZWZpbmUgcHRlcF9nZXRfYW5kX2NsZWFyKG1tLGFkZHIseHApCV9fcHRlKHhjaGcoJih4cCktPnB0ZSwgMCkpCisjZGVmaW5lIHB0ZV9zYW1lKGEsIGIpCQkoKGEpLnB0ZSA9PSAoYikucHRlKQorCisjZGVmaW5lIFBNRF9TSVpFCSgxVUwgPDwgUE1EX1NISUZUKQorI2RlZmluZSBQTURfTUFTSwkofihQTURfU0laRS0xKSkKKyNkZWZpbmUgUFVEX1NJWkUJKDFVTCA8PCBQVURfU0hJRlQpCisjZGVmaW5lIFBVRF9NQVNLCSh+KFBVRF9TSVpFLTEpKQorI2RlZmluZSBQR0RJUl9TSVpFCSgxVUwgPDwgUEdESVJfU0hJRlQpCisjZGVmaW5lIFBHRElSX01BU0sJKH4oUEdESVJfU0laRS0xKSkKKworI2RlZmluZSBVU0VSX1BUUlNfUEVSX1BHRAkoVEFTS19TSVpFL1BHRElSX1NJWkUpCisjZGVmaW5lIEZJUlNUX1VTRVJfUEdEX05SCTAKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNkZWZpbmUgTUFYTUVNCQkgMHgzZmZmZmZmZmZmZmZVTAorI2RlZmluZSBWTUFMTE9DX1NUQVJUICAgIDB4ZmZmZmMyMDAwMDAwMDAwMFVMCisjZGVmaW5lIFZNQUxMT0NfRU5EICAgICAgMHhmZmZmZTFmZmZmZmZmZmZmVUwKKyNkZWZpbmUgTU9EVUxFU19WQUREUiAgICAweGZmZmZmZmZmODgwMDAwMDBVTAorI2RlZmluZSBNT0RVTEVTX0VORCAgICAgIDB4ZmZmZmZmZmZmZmYwMDAwMFVMCisjZGVmaW5lIE1PRFVMRVNfTEVOICAgKE1PRFVMRVNfRU5EIC0gTU9EVUxFU19WQUREUikKKworI2RlZmluZSBfUEFHRV9CSVRfUFJFU0VOVAkwCisjZGVmaW5lIF9QQUdFX0JJVF9SVwkJMQorI2RlZmluZSBfUEFHRV9CSVRfVVNFUgkJMgorI2RlZmluZSBfUEFHRV9CSVRfUFdUCQkzCisjZGVmaW5lIF9QQUdFX0JJVF9QQ0QJCTQKKyNkZWZpbmUgX1BBR0VfQklUX0FDQ0VTU0VECTUKKyNkZWZpbmUgX1BBR0VfQklUX0RJUlRZCQk2CisjZGVmaW5lIF9QQUdFX0JJVF9QU0UJCTcJLyogNCBNQiAob3IgMk1CKSBwYWdlICovCisjZGVmaW5lIF9QQUdFX0JJVF9HTE9CQUwJOAkvKiBHbG9iYWwgVExCIGVudHJ5IFBQcm8rICovCisjZGVmaW5lIF9QQUdFX0JJVF9OWCAgICAgICAgICAgNjMgICAgICAgLyogTm8gZXhlY3V0ZTogb25seSB2YWxpZCBhZnRlciBjcHVpZCBjaGVjayAqLworCisjZGVmaW5lIF9QQUdFX1BSRVNFTlQJMHgwMDEKKyNkZWZpbmUgX1BBR0VfUlcJMHgwMDIKKyNkZWZpbmUgX1BBR0VfVVNFUgkweDAwNAorI2RlZmluZSBfUEFHRV9QV1QJMHgwMDgKKyNkZWZpbmUgX1BBR0VfUENECTB4MDEwCisjZGVmaW5lIF9QQUdFX0FDQ0VTU0VECTB4MDIwCisjZGVmaW5lIF9QQUdFX0RJUlRZCTB4MDQwCisjZGVmaW5lIF9QQUdFX1BTRQkweDA4MAkvKiAyTUIgcGFnZSAqLworI2RlZmluZSBfUEFHRV9GSUxFCTB4MDQwCS8qIHNldDpwYWdlY2FjaGUsIHVuc2V0OnN3YXAgKi8KKyNkZWZpbmUgX1BBR0VfR0xPQkFMCTB4MTAwCS8qIEdsb2JhbCBUTEIgZW50cnkgKi8KKworI2RlZmluZSBfUEFHRV9QUk9UTk9ORQkweDA4MAkvKiBJZiBub3QgcHJlc2VudCAqLworI2RlZmluZSBfUEFHRV9OWCAgICAgICAgKDFVTDw8X1BBR0VfQklUX05YKQorCisjZGVmaW5lIF9QQUdFX1RBQkxFCShfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUlcgfCBfUEFHRV9VU0VSIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9ESVJUWSkKKyNkZWZpbmUgX0tFUk5QR19UQUJMRQkoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JXIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9ESVJUWSkKKworI2RlZmluZSBfUEFHRV9DSEdfTUFTSwkoUFRFX01BU0sgfCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX0RJUlRZKQorCisjZGVmaW5lIFBBR0VfTk9ORQlfX3BncHJvdChfUEFHRV9QUk9UTk9ORSB8IF9QQUdFX0FDQ0VTU0VEKQorI2RlZmluZSBQQUdFX1NIQVJFRAlfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUlcgfCBfUEFHRV9VU0VSIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9OWCkKKyNkZWZpbmUgUEFHRV9TSEFSRURfRVhFQyBfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUlcgfCBfUEFHRV9VU0VSIHwgX1BBR0VfQUNDRVNTRUQpCisjZGVmaW5lIFBBR0VfQ09QWV9OT0VYRUMgX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1VTRVIgfCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX05YKQorI2RlZmluZSBQQUdFX0NPUFkgUEFHRV9DT1BZX05PRVhFQworI2RlZmluZSBQQUdFX0NPUFlfRVhFQyBfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfVVNFUiB8IF9QQUdFX0FDQ0VTU0VEKQorI2RlZmluZSBQQUdFX1JFQURPTkxZCV9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9VU0VSIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9OWCkKKyNkZWZpbmUgUEFHRV9SRUFET05MWV9FWEVDIF9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9VU0VSIHwgX1BBR0VfQUNDRVNTRUQpCisjZGVmaW5lIF9fUEFHRV9LRVJORUwgXAorCShfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUlcgfCBfUEFHRV9ESVJUWSB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfTlgpCisjZGVmaW5lIF9fUEFHRV9LRVJORUxfRVhFQyBcCisJKF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SVyB8IF9QQUdFX0RJUlRZIHwgX1BBR0VfQUNDRVNTRUQpCisjZGVmaW5lIF9fUEFHRV9LRVJORUxfTk9DQUNIRSBcCisJKF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SVyB8IF9QQUdFX0RJUlRZIHwgX1BBR0VfUENEIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9OWCkKKyNkZWZpbmUgX19QQUdFX0tFUk5FTF9STyBcCisJKF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9ESVJUWSB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfTlgpCisjZGVmaW5lIF9fUEFHRV9LRVJORUxfVlNZU0NBTEwgXAorCShfUEFHRV9QUkVTRU5UIHwgX1BBR0VfVVNFUiB8IF9QQUdFX0FDQ0VTU0VEKQorI2RlZmluZSBfX1BBR0VfS0VSTkVMX1ZTWVNDQUxMX05PQ0FDSEUgXAorCShfUEFHRV9QUkVTRU5UIHwgX1BBR0VfVVNFUiB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfUENEKQorI2RlZmluZSBfX1BBR0VfS0VSTkVMX0xBUkdFIFwKKwkoX19QQUdFX0tFUk5FTCB8IF9QQUdFX1BTRSkKKworI2RlZmluZSBNQUtFX0dMT0JBTCh4KSBfX3BncHJvdCgoeCkgfCBfUEFHRV9HTE9CQUwpCisKKyNkZWZpbmUgUEFHRV9LRVJORUwgTUFLRV9HTE9CQUwoX19QQUdFX0tFUk5FTCkKKyNkZWZpbmUgUEFHRV9LRVJORUxfRVhFQyBNQUtFX0dMT0JBTChfX1BBR0VfS0VSTkVMX0VYRUMpCisjZGVmaW5lIFBBR0VfS0VSTkVMX1JPIE1BS0VfR0xPQkFMKF9fUEFHRV9LRVJORUxfUk8pCisjZGVmaW5lIFBBR0VfS0VSTkVMX05PQ0FDSEUgTUFLRV9HTE9CQUwoX19QQUdFX0tFUk5FTF9OT0NBQ0hFKQorI2RlZmluZSBQQUdFX0tFUk5FTF9WU1lTQ0FMTDMyIF9fcGdwcm90KF9fUEFHRV9LRVJORUxfVlNZU0NBTEwpCisjZGVmaW5lIFBBR0VfS0VSTkVMX1ZTWVNDQUxMIE1BS0VfR0xPQkFMKF9fUEFHRV9LRVJORUxfVlNZU0NBTEwpCisjZGVmaW5lIFBBR0VfS0VSTkVMX0xBUkdFIE1BS0VfR0xPQkFMKF9fUEFHRV9LRVJORUxfTEFSR0UpCisjZGVmaW5lIFBBR0VfS0VSTkVMX1ZTWVNDQUxMX05PQ0FDSEUgTUFLRV9HTE9CQUwoX19QQUdFX0tFUk5FTF9WU1lTQ0FMTF9OT0NBQ0hFKQorCisvKiAgICAgICAgIHh3ciAqLworI2RlZmluZSBfX1AwMDAJUEFHRV9OT05FCisjZGVmaW5lIF9fUDAwMQlQQUdFX1JFQURPTkxZCisjZGVmaW5lIF9fUDAxMAlQQUdFX0NPUFkKKyNkZWZpbmUgX19QMDExCVBBR0VfQ09QWQorI2RlZmluZSBfX1AxMDAJUEFHRV9SRUFET05MWV9FWEVDCisjZGVmaW5lIF9fUDEwMQlQQUdFX1JFQURPTkxZX0VYRUMKKyNkZWZpbmUgX19QMTEwCVBBR0VfQ09QWV9FWEVDCisjZGVmaW5lIF9fUDExMQlQQUdFX0NPUFlfRVhFQworCisjZGVmaW5lIF9fUzAwMAlQQUdFX05PTkUKKyNkZWZpbmUgX19TMDAxCVBBR0VfUkVBRE9OTFkKKyNkZWZpbmUgX19TMDEwCVBBR0VfU0hBUkVECisjZGVmaW5lIF9fUzAxMQlQQUdFX1NIQVJFRAorI2RlZmluZSBfX1MxMDAJUEFHRV9SRUFET05MWV9FWEVDCisjZGVmaW5lIF9fUzEwMQlQQUdFX1JFQURPTkxZX0VYRUMKKyNkZWZpbmUgX19TMTEwCVBBR0VfU0hBUkVEX0VYRUMKKyNkZWZpbmUgX19TMTExCVBBR0VfU0hBUkVEX0VYRUMKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHBnZF9iYWQocGdkX3QgcGdkKSAKK3sgCisgICAgICAgdW5zaWduZWQgbG9uZyB2YWwgPSBwZ2RfdmFsKHBnZCk7CisgICAgICAgdmFsICY9IH5QVEVfTUFTSzsgCisgICAgICAgdmFsICY9IH4oX1BBR0VfVVNFUiB8IF9QQUdFX0RJUlRZKTsgCisgICAgICAgcmV0dXJuIHZhbCAmIH4oX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JXIHwgX1BBR0VfQUNDRVNTRUQpOyAgICAgIAorfSAKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHB1ZF9iYWQocHVkX3QgcHVkKQoreworICAgICAgIHVuc2lnbmVkIGxvbmcgdmFsID0gcHVkX3ZhbChwdWQpOworICAgICAgIHZhbCAmPSB+UFRFX01BU0s7CisgICAgICAgdmFsICY9IH4oX1BBR0VfVVNFUiB8IF9QQUdFX0RJUlRZKTsKKyAgICAgICByZXR1cm4gdmFsICYgfihfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUlcgfCBfUEFHRV9BQ0NFU1NFRCk7Cit9CisKKyNkZWZpbmUgcHRlX25vbmUoeCkJKCFwdGVfdmFsKHgpKQorI2RlZmluZSBwdGVfcHJlc2VudCh4KQkocHRlX3ZhbCh4KSAmIChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUFJPVE5PTkUpKQorI2RlZmluZSBwdGVfY2xlYXIobW0sYWRkcix4cCkJZG8geyBzZXRfcHRlX2F0KG1tLCBhZGRyLCB4cCwgX19wdGUoMCkpOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIHBhZ2VzX3RvX21iKHgpICgoeCkgPj4gKDIwLVBBR0VfU0hJRlQpKQkvKiBGSVhNRTogaXMgdGhpcworCQkJCQkJICAgcmlnaHQ/ICovCisjZGVmaW5lIHB0ZV9wYWdlKHgpCXBmbl90b19wYWdlKHB0ZV9wZm4oeCkpCisjZGVmaW5lIHB0ZV9wZm4oeCkgICgocHRlX3ZhbCh4KSA+PiBQQUdFX1NISUZUKSAmIF9fUEhZU0lDQUxfTUFTSykKKworc3RhdGljIGlubGluZSBwdGVfdCBwZm5fcHRlKHVuc2lnbmVkIGxvbmcgcGFnZV9uciwgcGdwcm90X3QgcGdwcm90KQoreworCXB0ZV90IHB0ZTsKKwlwdGVfdmFsKHB0ZSkgPSAocGFnZV9uciA8PCBQQUdFX1NISUZUKTsKKwlwdGVfdmFsKHB0ZSkgfD0gcGdwcm90X3ZhbChwZ3Byb3QpOworCXB0ZV92YWwocHRlKSAmPSBfX3N1cHBvcnRlZF9wdGVfbWFzazsKKwlyZXR1cm4gcHRlOworfQorCisvKgorICogVGhlIGZvbGxvd2luZyBvbmx5IHdvcmsgaWYgcHRlX3ByZXNlbnQoKSBpcyB0cnVlLgorICogVW5kZWZpbmVkIGJlaGF2aW91ciBpZiBub3QuLgorICovCitzdGF0aWMgaW5saW5lIGludCBwdGVfdXNlcihwdGVfdCBwdGUpCQl7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9VU0VSOyB9CitleHRlcm4gaW5saW5lIGludCBwdGVfcmVhZChwdGVfdCBwdGUpCQl7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9VU0VSOyB9CitleHRlcm4gaW5saW5lIGludCBwdGVfZXhlYyhwdGVfdCBwdGUpCQl7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9VU0VSOyB9CitleHRlcm4gaW5saW5lIGludCBwdGVfZGlydHkocHRlX3QgcHRlKQkJeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfRElSVFk7IH0KK2V4dGVybiBpbmxpbmUgaW50IHB0ZV95b3VuZyhwdGVfdCBwdGUpCQl7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9BQ0NFU1NFRDsgfQorZXh0ZXJuIGlubGluZSBpbnQgcHRlX3dyaXRlKHB0ZV90IHB0ZSkJCXsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX1JXOyB9CitzdGF0aWMgaW5saW5lIGludCBwdGVfZmlsZShwdGVfdCBwdGUpCQl7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9GSUxFOyB9CisKK2V4dGVybiBpbmxpbmUgcHRlX3QgcHRlX3JkcHJvdGVjdChwdGVfdCBwdGUpCXsgc2V0X3B0ZSgmcHRlLCBfX3B0ZShwdGVfdmFsKHB0ZSkgJiB+X1BBR0VfVVNFUikpOyByZXR1cm4gcHRlOyB9CitleHRlcm4gaW5saW5lIHB0ZV90IHB0ZV9leHByb3RlY3QocHRlX3QgcHRlKQl7IHNldF9wdGUoJnB0ZSwgX19wdGUocHRlX3ZhbChwdGUpICYgfl9QQUdFX1VTRVIpKTsgcmV0dXJuIHB0ZTsgfQorZXh0ZXJuIGlubGluZSBwdGVfdCBwdGVfbWtjbGVhbihwdGVfdCBwdGUpCXsgc2V0X3B0ZSgmcHRlLCBfX3B0ZShwdGVfdmFsKHB0ZSkgJiB+X1BBR0VfRElSVFkpKTsgcmV0dXJuIHB0ZTsgfQorZXh0ZXJuIGlubGluZSBwdGVfdCBwdGVfbWtvbGQocHRlX3QgcHRlKQl7IHNldF9wdGUoJnB0ZSwgX19wdGUocHRlX3ZhbChwdGUpICYgfl9QQUdFX0FDQ0VTU0VEKSk7IHJldHVybiBwdGU7IH0KK2V4dGVybiBpbmxpbmUgcHRlX3QgcHRlX3dycHJvdGVjdChwdGVfdCBwdGUpCXsgc2V0X3B0ZSgmcHRlLCBfX3B0ZShwdGVfdmFsKHB0ZSkgJiB+X1BBR0VfUlcpKTsgcmV0dXJuIHB0ZTsgfQorZXh0ZXJuIGlubGluZSBwdGVfdCBwdGVfbWtyZWFkKHB0ZV90IHB0ZSkJeyBzZXRfcHRlKCZwdGUsIF9fcHRlKHB0ZV92YWwocHRlKSB8IF9QQUdFX1VTRVIpKTsgcmV0dXJuIHB0ZTsgfQorZXh0ZXJuIGlubGluZSBwdGVfdCBwdGVfbWtleGVjKHB0ZV90IHB0ZSkJeyBzZXRfcHRlKCZwdGUsIF9fcHRlKHB0ZV92YWwocHRlKSB8IF9QQUdFX1VTRVIpKTsgcmV0dXJuIHB0ZTsgfQorZXh0ZXJuIGlubGluZSBwdGVfdCBwdGVfbWtkaXJ0eShwdGVfdCBwdGUpCXsgc2V0X3B0ZSgmcHRlLCBfX3B0ZShwdGVfdmFsKHB0ZSkgfCBfUEFHRV9ESVJUWSkpOyByZXR1cm4gcHRlOyB9CitleHRlcm4gaW5saW5lIHB0ZV90IHB0ZV9ta3lvdW5nKHB0ZV90IHB0ZSkJeyBzZXRfcHRlKCZwdGUsIF9fcHRlKHB0ZV92YWwocHRlKSB8IF9QQUdFX0FDQ0VTU0VEKSk7IHJldHVybiBwdGU7IH0KK2V4dGVybiBpbmxpbmUgcHRlX3QgcHRlX21rd3JpdGUocHRlX3QgcHRlKQl7IHNldF9wdGUoJnB0ZSwgX19wdGUocHRlX3ZhbChwdGUpIHwgX1BBR0VfUlcpKTsgcmV0dXJuIHB0ZTsgfQorCitzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Q7CisKK3N0YXRpYyBpbmxpbmUgaW50IHB0ZXBfdGVzdF9hbmRfY2xlYXJfZGlydHkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApCit7CisJaWYgKCFwdGVfZGlydHkoKnB0ZXApKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gdGVzdF9hbmRfY2xlYXJfYml0KF9QQUdFX0JJVF9ESVJUWSwgcHRlcCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApCit7CisJaWYgKCFwdGVfeW91bmcoKnB0ZXApKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gdGVzdF9hbmRfY2xlYXJfYml0KF9QQUdFX0JJVF9BQ0NFU1NFRCwgcHRlcCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdGVwX3NldF93cnByb3RlY3Qoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApCit7CisJY2xlYXJfYml0KF9QQUdFX0JJVF9SVywgcHRlcCk7Cit9CisKKy8qCisgKiBNYWNybyB0byBtYXJrIGEgcGFnZSBwcm90ZWN0aW9uIHZhbHVlIGFzICJ1bmNhY2hlYWJsZSIuCisgKi8KKyNkZWZpbmUgcGdwcm90X25vbmNhY2hlZChwcm90KQkoX19wZ3Byb3QocGdwcm90X3ZhbChwcm90KSB8IF9QQUdFX1BDRCB8IF9QQUdFX1BXVCkpCisKKyNkZWZpbmUgX19MQVJHRV9QVEUgKF9QQUdFX1BTRXxfUEFHRV9QUkVTRU5UKSAKK3N0YXRpYyBpbmxpbmUgaW50IHBtZF9sYXJnZShwbWRfdCBwdGUpIHsgCisJcmV0dXJuIChwbWRfdmFsKHB0ZSkgJiBfX0xBUkdFX1BURSkgPT0gX19MQVJHRV9QVEU7IAorfSAJCisKKworLyoKKyAqIENvbnZlcnNpb24gZnVuY3Rpb25zOiBjb252ZXJ0IGEgcGFnZSBhbmQgcHJvdGVjdGlvbiB0byBhIHBhZ2UgZW50cnksCisgKiBhbmQgYSBwYWdlIGVudHJ5IGFuZCBwYWdlIGRpcmVjdG9yeSB0byB0aGUgcGFnZSB0aGV5IHJlZmVyIHRvLgorICovCisKKyNkZWZpbmUgcGFnZV9wdGUocGFnZSkgcGFnZV9wdGVfcHJvdChwYWdlLCBfX3BncHJvdCgwKSkKKworLyoKKyAqIExldmVsIDQgYWNjZXNzLgorICovCisjZGVmaW5lIHBnZF9wYWdlKHBnZCkgKCh1bnNpZ25lZCBsb25nKSBfX3ZhKCh1bnNpZ25lZCBsb25nKXBnZF92YWwocGdkKSAmIFBURV9NQVNLKSkKKyNkZWZpbmUgcGdkX2luZGV4KGFkZHJlc3MpICgoKGFkZHJlc3MpID4+IFBHRElSX1NISUZUKSAmIChQVFJTX1BFUl9QR0QtMSkpCisjZGVmaW5lIHBnZF9vZmZzZXQobW0sIGFkZHIpICgobW0pLT5wZ2QgKyBwZ2RfaW5kZXgoYWRkcikpCisjZGVmaW5lIHBnZF9vZmZzZXRfayhhZGRyZXNzKSAoaW5pdF9sZXZlbDRfcGd0ICsgcGdkX2luZGV4KGFkZHJlc3MpKQorI2RlZmluZSBwZ2RfcHJlc2VudChwZ2QpIChwZ2RfdmFsKHBnZCkgJiBfUEFHRV9QUkVTRU5UKQorI2RlZmluZSBta19rZXJuZWxfcGdkKGFkZHJlc3MpICgocGdkX3QpeyAoYWRkcmVzcykgfCBfS0VSTlBHX1RBQkxFIH0pCisKKy8qIFBVRCAtIExldmVsMyBhY2Nlc3MgKi8KKy8qIHRvIGZpbmQgYW4gZW50cnkgaW4gYSBwYWdlLXRhYmxlLWRpcmVjdG9yeS4gKi8KKyNkZWZpbmUgcHVkX2luZGV4KGFkZHJlc3MpICgoKGFkZHJlc3MpID4+IFBVRF9TSElGVCkgJiAoUFRSU19QRVJfUFVELTEpKQorI2RlZmluZSBwdWRfb2Zmc2V0KHBnZCwgYWRkcmVzcykgKChwdWRfdCAqKSBwZ2RfcGFnZSgqKHBnZCkpICsgcHVkX2luZGV4KGFkZHJlc3MpKQorI2RlZmluZSBwdWRfb2Zmc2V0X2socGdkLCBhZGRyKSBwdWRfb2Zmc2V0KHBnZCwgYWRkcikKKyNkZWZpbmUgcHVkX3ByZXNlbnQocHVkKSAocHVkX3ZhbChwdWQpICYgX1BBR0VfUFJFU0VOVCkKKworc3RhdGljIGlubGluZSBwdWRfdCAqX19wdWRfb2Zmc2V0X2socHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreyAKKwlyZXR1cm4gcHVkICsgcHVkX2luZGV4KGFkZHJlc3MpOworfSAKKworLyogUE1EICAtIExldmVsIDIgYWNjZXNzICovCisjZGVmaW5lIHBtZF9wYWdlX2tlcm5lbChwbWQpICgodW5zaWduZWQgbG9uZykgX192YShwbWRfdmFsKHBtZCkgJiBQVEVfTUFTSykpCisjZGVmaW5lIHBtZF9wYWdlKHBtZCkJCShwZm5fdG9fcGFnZShwbWRfdmFsKHBtZCkgPj4gUEFHRV9TSElGVCkpCisKKyNkZWZpbmUgcG1kX2luZGV4KGFkZHJlc3MpICgoKGFkZHJlc3MpID4+IFBNRF9TSElGVCkgJiAoUFRSU19QRVJfUE1ELTEpKQorI2RlZmluZSBwbWRfb2Zmc2V0KGRpciwgYWRkcmVzcykgKChwbWRfdCAqKSBwdWRfcGFnZSgqKGRpcikpICsgXAorCQkJcG1kX2luZGV4KGFkZHJlc3MpKQorI2RlZmluZSBwbWRfbm9uZSh4KQkoIXBtZF92YWwoeCkpCisjZGVmaW5lIHBtZF9wcmVzZW50KHgpCShwbWRfdmFsKHgpICYgX1BBR0VfUFJFU0VOVCkKKyNkZWZpbmUgcG1kX2NsZWFyKHhwKQlkbyB7IHNldF9wbWQoeHAsIF9fcG1kKDApKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUJcG1kX2JhZCh4KQkoKHBtZF92YWwoeCkgJiAoflBURV9NQVNLICYgfl9QQUdFX1VTRVIpKSAhPSBfS0VSTlBHX1RBQkxFICkKKyNkZWZpbmUgcGZuX3BtZChucixwcm90KSAoX19wbWQoKChucikgPDwgUEFHRV9TSElGVCkgfCBwZ3Byb3RfdmFsKHByb3QpKSkKKyNkZWZpbmUgcG1kX3Bmbih4KSAgKChwbWRfdmFsKHgpID4+IFBBR0VfU0hJRlQpICYgX19QSFlTSUNBTF9NQVNLKQorCisjZGVmaW5lIHB0ZV90b19wZ29mZihwdGUpICgocHRlX3ZhbChwdGUpICYgUEhZU0lDQUxfUEFHRV9NQVNLKSA+PiBQQUdFX1NISUZUKQorI2RlZmluZSBwZ29mZl90b19wdGUob2ZmKSAoKHB0ZV90KSB7ICgob2ZmKSA8PCBQQUdFX1NISUZUKSB8IF9QQUdFX0ZJTEUgfSkKKyNkZWZpbmUgUFRFX0ZJTEVfTUFYX0JJVFMgX19QSFlTSUNBTF9NQVNLX1NISUZUCisKKy8qIFBURSAtIExldmVsIDEgYWNjZXNzLiAqLworCisvKiBwYWdlLCBwcm90ZWN0aW9uIC0+IHB0ZSAqLworI2RlZmluZSBta19wdGUocGFnZSwgcGdwcm90KQlwZm5fcHRlKHBhZ2VfdG9fcGZuKHBhZ2UpLCAocGdwcm90KSkKKyNkZWZpbmUgbWtfcHRlX2h1Z2UoZW50cnkpIChwdGVfdmFsKGVudHJ5KSB8PSBfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUFNFKQorIAorLyogcGh5c2ljYWwgYWRkcmVzcyAtPiBQVEUgKi8KK3N0YXRpYyBpbmxpbmUgcHRlX3QgbWtfcHRlX3BoeXModW5zaWduZWQgbG9uZyBwaHlzcGFnZSwgcGdwcm90X3QgcGdwcm90KQoreyAKKwlwdGVfdCBwdGU7CisJcHRlX3ZhbChwdGUpID0gcGh5c3BhZ2UgfCBwZ3Byb3RfdmFsKHBncHJvdCk7IAorCXJldHVybiBwdGU7IAorfQorIAorLyogQ2hhbmdlIGZsYWdzIG9mIGEgUFRFICovCitleHRlcm4gaW5saW5lIHB0ZV90IHB0ZV9tb2RpZnkocHRlX3QgcHRlLCBwZ3Byb3RfdCBuZXdwcm90KQoreyAKKwlwdGVfdmFsKHB0ZSkgJj0gX1BBR0VfQ0hHX01BU0s7CisJcHRlX3ZhbChwdGUpIHw9IHBncHJvdF92YWwobmV3cHJvdCk7CisJcHRlX3ZhbChwdGUpICY9IF9fc3VwcG9ydGVkX3B0ZV9tYXNrOworICAgICAgIHJldHVybiBwdGU7IAorfQorCisjZGVmaW5lIHB0ZV9pbmRleChhZGRyZXNzKSBcCisJCSgoYWRkcmVzcyA+PiBQQUdFX1NISUZUKSAmIChQVFJTX1BFUl9QVEUgLSAxKSkKKyNkZWZpbmUgcHRlX29mZnNldF9rZXJuZWwoZGlyLCBhZGRyZXNzKSAoKHB0ZV90ICopIHBtZF9wYWdlX2tlcm5lbCgqKGRpcikpICsgXAorCQkJcHRlX2luZGV4KGFkZHJlc3MpKQorCisvKiB4ODYtNjQgYWx3YXlzIGhhcyBhbGwgcGFnZSB0YWJsZXMgbWFwcGVkLiAqLworI2RlZmluZSBwdGVfb2Zmc2V0X21hcChkaXIsYWRkcmVzcykgcHRlX29mZnNldF9rZXJuZWwoZGlyLGFkZHJlc3MpCisjZGVmaW5lIHB0ZV9vZmZzZXRfbWFwX25lc3RlZChkaXIsYWRkcmVzcykgcHRlX29mZnNldF9rZXJuZWwoZGlyLGFkZHJlc3MpCisjZGVmaW5lIHB0ZV91bm1hcChwdGUpIC8qIE5PUCAqLworI2RlZmluZSBwdGVfdW5tYXBfbmVzdGVkKHB0ZSkgLyogTk9QICovIAorCisjZGVmaW5lIHVwZGF0ZV9tbXVfY2FjaGUodm1hLGFkZHJlc3MscHRlKSBkbyB7IH0gd2hpbGUgKDApCisKKy8qIFdlIG9ubHkgdXBkYXRlIHRoZSBkaXJ0eS9hY2Nlc3NlZCBzdGF0ZSBpZiB3ZSBzZXQKKyAqIHRoZSBkaXJ0eSBiaXQgYnkgaGFuZCBpbiB0aGUga2VybmVsLCBzaW5jZSB0aGUgaGFyZHdhcmUKKyAqIHdpbGwgZG8gdGhlIGFjY2Vzc2VkIGJpdCBmb3IgdXMsIGFuZCB3ZSBkb24ndCB3YW50IHRvCisgKiByYWNlIHdpdGggb3RoZXIgQ1BVJ3MgdGhhdCBtaWdodCBiZSB1cGRhdGluZyB0aGUgZGlydHkKKyAqIGJpdCBhdCB0aGUgc2FtZSB0aW1lLiAqLworI2RlZmluZSAgX19IQVZFX0FSQ0hfUFRFUF9TRVRfQUNDRVNTX0ZMQUdTCisjZGVmaW5lIHB0ZXBfc2V0X2FjY2Vzc19mbGFncyhfX3ZtYSwgX19hZGRyZXNzLCBfX3B0ZXAsIF9fZW50cnksIF9fZGlydHkpIFwKKwlkbyB7CQkJCQkJCQkgIFwKKwkJaWYgKF9fZGlydHkpIHsJCQkJCQkgIFwKKwkJCXNldF9wdGUoX19wdGVwLCBfX2VudHJ5KTsJCQkgIFwKKwkJCWZsdXNoX3RsYl9wYWdlKF9fdm1hLCBfX2FkZHJlc3MpOwkJICBcCisJCX0JCQkJCQkJICBcCisJfSB3aGlsZSAoMCkKKworLyogRW5jb2RlIGFuZCBkZS1jb2RlIGEgc3dhcCBlbnRyeSAqLworI2RlZmluZSBfX3N3cF90eXBlKHgpCQkJKCgoeCkudmFsID4+IDEpICYgMHgzZikKKyNkZWZpbmUgX19zd3Bfb2Zmc2V0KHgpCQkJKCh4KS52YWwgPj4gOCkKKyNkZWZpbmUgX19zd3BfZW50cnkodHlwZSwgb2Zmc2V0KQkoKHN3cF9lbnRyeV90KSB7ICgodHlwZSkgPDwgMSkgfCAoKG9mZnNldCkgPDwgOCkgfSkKKyNkZWZpbmUgX19wdGVfdG9fc3dwX2VudHJ5KHB0ZSkJCSgoc3dwX2VudHJ5X3QpIHsgcHRlX3ZhbChwdGUpIH0pCisjZGVmaW5lIF9fc3dwX2VudHJ5X3RvX3B0ZSh4KQkJKChwdGVfdCkgeyAoeCkudmFsIH0pCisKKyNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCisKK2V4dGVybiBpbnQga2Vybl9hZGRyX3ZhbGlkKHVuc2lnbmVkIGxvbmcgYWRkcik7IAorCisjZGVmaW5lIGlvX3JlbWFwX3BhZ2VfcmFuZ2Uodm1hLCB2YWRkciwgcGFkZHIsIHNpemUsIHByb3QpCQlcCisJCXJlbWFwX3Bmbl9yYW5nZSh2bWEsIHZhZGRyLCAocGFkZHIpID4+IFBBR0VfU0hJRlQsIHNpemUsIHByb3QpCisKKyNkZWZpbmUgaW9fcmVtYXBfcGZuX3JhbmdlKHZtYSwgdmFkZHIsIHBmbiwgc2l6ZSwgcHJvdCkJCVwKKwkJcmVtYXBfcGZuX3JhbmdlKHZtYSwgdmFkZHIsIHBmbiwgc2l6ZSwgcHJvdCkKKworI2RlZmluZSBNS19JT1NQQUNFX1BGTihzcGFjZSwgcGZuKQkocGZuKQorI2RlZmluZSBHRVRfSU9TUEFDRShwZm4pCQkwCisjZGVmaW5lIEdFVF9QRk4ocGZuKQkJCShwZm4pCisKKyNkZWZpbmUgSEFWRV9BUkNIX1VOTUFQUEVEX0FSRUEKKworI2RlZmluZSBwZ3RhYmxlX2NhY2hlX2luaXQoKSAgIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgY2hlY2tfcGd0X2NhY2hlKCkgICAgICBkbyB7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgUEFHRV9BR1AgICAgUEFHRV9LRVJORUxfTk9DQUNIRQorI2RlZmluZSBIQVZFX1BBR0VfQUdQIDEKKworLyogZnMvcHJvYy9rY29yZS5jICovCisjZGVmaW5lCWtjX3ZhZGRyX3RvX29mZnNldCh2KSAoKHYpICYgX19WSVJUVUFMX01BU0spCisjZGVmaW5lCWtjX29mZnNldF90b192YWRkcihvKSBcCisgICAoKChvKSAmICgxVUwgPDwgKF9fVklSVFVBTF9NQVNLX1NISUZULTEpKSkgPyAoKG8pIHwgKH5fX1ZJUlRVQUxfTUFTSykpIDogKG8pKQorCisjZGVmaW5lIF9fSEFWRV9BUkNIX1BURVBfVEVTVF9BTkRfQ0xFQVJfWU9VTkcKKyNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFUF9URVNUX0FORF9DTEVBUl9ESVJUWQorI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX0dFVF9BTkRfQ0xFQVIKKyNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFUF9TRVRfV1JQUk9URUNUCisjZGVmaW5lIF9fSEFWRV9BUkNIX1BURV9TQU1FCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGd0YWJsZS5oPgorCisjZW5kaWYgLyogX1g4Nl82NF9QR1RBQkxFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9wb2xsLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvcG9sbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0M2NiYmEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvcG9sbC5oCkBAIC0wLDAgKzEsMjYgQEAKKyNpZm5kZWYgX194ODZfNjRfUE9MTF9ICisjZGVmaW5lIF9feDg2XzY0X1BPTExfSAorCisvKiBUaGVzZSBhcmUgc3BlY2lmaWVkIGJ5IGlCQ1MyICovCisjZGVmaW5lIFBPTExJTgkJMHgwMDAxCisjZGVmaW5lIFBPTExQUkkJCTB4MDAwMgorI2RlZmluZSBQT0xMT1VUCQkweDAwMDQKKyNkZWZpbmUgUE9MTEVSUgkJMHgwMDA4CisjZGVmaW5lIFBPTExIVVAJCTB4MDAxMAorI2RlZmluZSBQT0xMTlZBTAkweDAwMjAKKworLyogVGhlIHJlc3Qgc2VlbSB0byBiZSBtb3JlLW9yLWxlc3Mgbm9uc3RhbmRhcmQuIENoZWNrIHRoZW0hICovCisjZGVmaW5lIFBPTExSRE5PUk0JMHgwMDQwCisjZGVmaW5lIFBPTExSREJBTkQJMHgwMDgwCisjZGVmaW5lIFBPTExXUk5PUk0JMHgwMTAwCisjZGVmaW5lIFBPTExXUkJBTkQJMHgwMjAwCisjZGVmaW5lIFBPTExNU0cJCTB4MDQwMAorI2RlZmluZSBQT0xMUkVNT1ZFCTB4MTAwMAorCitzdHJ1Y3QgcG9sbGZkIHsKKwlpbnQgZmQ7CisJc2hvcnQgZXZlbnRzOworCXNob3J0IHJldmVudHM7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9wb3NpeF90eXBlcy5oIGIvaW5jbHVkZS9hc20teDg2XzY0L3Bvc2l4X3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTkyNmFhNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9wb3NpeF90eXBlcy5oCkBAIC0wLDAgKzEsMTE5IEBACisjaWZuZGVmIF9BU01fWDg2XzY0X1BPU0lYX1RZUEVTX0gKKyNkZWZpbmUgX0FTTV9YODZfNjRfUE9TSVhfVFlQRVNfSAorCisvKgorICogVGhpcyBmaWxlIGlzIGdlbmVyYWxseSB1c2VkIGJ5IHVzZXItbGV2ZWwgc29mdHdhcmUsIHNvIHlvdSBuZWVkIHRvCisgKiBiZSBhIGxpdHRsZSBjYXJlZnVsIGFib3V0IG5hbWVzcGFjZSBwb2xsdXRpb24gZXRjLiAgQWxzbywgd2UgY2Fubm90CisgKiBhc3N1bWUgR0NDIGlzIGJlaW5nIHVzZWQuCisgKi8KKwordHlwZWRlZiB1bnNpZ25lZCBsb25nCV9fa2VybmVsX2lub190OwordHlwZWRlZiB1bnNpZ25lZCBpbnQJX19rZXJuZWxfbW9kZV90OwordHlwZWRlZiB1bnNpZ25lZCBsb25nCV9fa2VybmVsX25saW5rX3Q7Cit0eXBlZGVmIGxvbmcJCV9fa2VybmVsX29mZl90OwordHlwZWRlZiBpbnQJCV9fa2VybmVsX3BpZF90OwordHlwZWRlZiBpbnQJCV9fa2VybmVsX2lwY19waWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50CV9fa2VybmVsX3VpZF90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQJX19rZXJuZWxfZ2lkX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcJX19rZXJuZWxfc2l6ZV90OwordHlwZWRlZiBsb25nCQlfX2tlcm5lbF9zc2l6ZV90OwordHlwZWRlZiBsb25nCQlfX2tlcm5lbF9wdHJkaWZmX3Q7Cit0eXBlZGVmIGxvbmcJCV9fa2VybmVsX3RpbWVfdDsKK3R5cGVkZWYgbG9uZwkJX19rZXJuZWxfc3VzZWNvbmRzX3Q7Cit0eXBlZGVmIGxvbmcJCV9fa2VybmVsX2Nsb2NrX3Q7Cit0eXBlZGVmIGludAkJX19rZXJuZWxfdGltZXJfdDsKK3R5cGVkZWYgaW50CQlfX2tlcm5lbF9jbG9ja2lkX3Q7Cit0eXBlZGVmIGludAkJX19rZXJuZWxfZGFkZHJfdDsKK3R5cGVkZWYgY2hhciAqCQlfX2tlcm5lbF9jYWRkcl90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAlfX2tlcm5lbF91aWQxNl90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAlfX2tlcm5lbF9naWQxNl90OworCisjaWZkZWYgX19HTlVDX18KK3R5cGVkZWYgbG9uZyBsb25nCV9fa2VybmVsX2xvZmZfdDsKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCB7CisJaW50CXZhbFsyXTsKK30gX19rZXJuZWxfZnNpZF90OworCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fa2VybmVsX29sZF91aWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgX19rZXJuZWxfb2xkX2dpZF90OwordHlwZWRlZiBfX2tlcm5lbF91aWRfdCBfX2tlcm5lbF91aWQzMl90OwordHlwZWRlZiBfX2tlcm5lbF9naWRfdCBfX2tlcm5lbF9naWQzMl90OworCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcJX19rZXJuZWxfb2xkX2Rldl90OworCisjaWZkZWYgX19LRVJORUxfXworCisjdW5kZWYgX19GRF9TRVQKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19GRF9TRVQodW5zaWduZWQgbG9uZyBmZCwgX19rZXJuZWxfZmRfc2V0ICpmZHNldHApCit7CisJdW5zaWduZWQgbG9uZyBfdG1wID0gZmQgLyBfX05GREJJVFM7CisJdW5zaWduZWQgbG9uZyBfcmVtID0gZmQgJSBfX05GREJJVFM7CisJZmRzZXRwLT5mZHNfYml0c1tfdG1wXSB8PSAoMVVMPDxfcmVtKTsKK30KKworI3VuZGVmIF9fRkRfQ0xSCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fRkRfQ0xSKHVuc2lnbmVkIGxvbmcgZmQsIF9fa2VybmVsX2ZkX3NldCAqZmRzZXRwKQoreworCXVuc2lnbmVkIGxvbmcgX3RtcCA9IGZkIC8gX19ORkRCSVRTOworCXVuc2lnbmVkIGxvbmcgX3JlbSA9IGZkICUgX19ORkRCSVRTOworCWZkc2V0cC0+ZmRzX2JpdHNbX3RtcF0gJj0gfigxVUw8PF9yZW0pOworfQorCisjdW5kZWYgX19GRF9JU1NFVAorc3RhdGljIF9faW5saW5lX18gaW50IF9fRkRfSVNTRVQodW5zaWduZWQgbG9uZyBmZCwgX19jb25zdF9fIF9fa2VybmVsX2ZkX3NldCAqcCkKK3sKKwl1bnNpZ25lZCBsb25nIF90bXAgPSBmZCAvIF9fTkZEQklUUzsKKwl1bnNpZ25lZCBsb25nIF9yZW0gPSBmZCAlIF9fTkZEQklUUzsKKwlyZXR1cm4gKHAtPmZkc19iaXRzW190bXBdICYgKDFVTDw8X3JlbSkpICE9IDA7Cit9CisKKy8qCisgKiBUaGlzIHdpbGwgdW5yb2xsIHRoZSBsb29wIGZvciB0aGUgbm9ybWFsIGNvbnN0YW50IGNhc2VzICg4IG9yIDMyIGxvbmdzLAorICogZm9yIDI1NiBhbmQgMTAyNC1iaXQgZmRfc2V0cyByZXNwZWN0aXZlbHkpCisgKi8KKyN1bmRlZiBfX0ZEX1pFUk8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19GRF9aRVJPKF9fa2VybmVsX2ZkX3NldCAqcCkKK3sKKwl1bnNpZ25lZCBsb25nICp0bXAgPSBwLT5mZHNfYml0czsKKwlpbnQgaTsKKworCWlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChfX0ZEU0VUX0xPTkdTKSkgeworCQlzd2l0Y2ggKF9fRkRTRVRfTE9OR1MpIHsKKwkJCWNhc2UgMzI6CisJCQkgIHRtcFsgMF0gPSAwOyB0bXBbIDFdID0gMDsgdG1wWyAyXSA9IDA7IHRtcFsgM10gPSAwOworCQkJICB0bXBbIDRdID0gMDsgdG1wWyA1XSA9IDA7IHRtcFsgNl0gPSAwOyB0bXBbIDddID0gMDsKKwkJCSAgdG1wWyA4XSA9IDA7IHRtcFsgOV0gPSAwOyB0bXBbMTBdID0gMDsgdG1wWzExXSA9IDA7CisJCQkgIHRtcFsxMl0gPSAwOyB0bXBbMTNdID0gMDsgdG1wWzE0XSA9IDA7IHRtcFsxNV0gPSAwOworCQkJICB0bXBbMTZdID0gMDsgdG1wWzE3XSA9IDA7IHRtcFsxOF0gPSAwOyB0bXBbMTldID0gMDsKKwkJCSAgdG1wWzIwXSA9IDA7IHRtcFsyMV0gPSAwOyB0bXBbMjJdID0gMDsgdG1wWzIzXSA9IDA7CisJCQkgIHRtcFsyNF0gPSAwOyB0bXBbMjVdID0gMDsgdG1wWzI2XSA9IDA7IHRtcFsyN10gPSAwOworCQkJICB0bXBbMjhdID0gMDsgdG1wWzI5XSA9IDA7IHRtcFszMF0gPSAwOyB0bXBbMzFdID0gMDsKKwkJCSAgcmV0dXJuOworCQkJY2FzZSAxNjoKKwkJCSAgdG1wWyAwXSA9IDA7IHRtcFsgMV0gPSAwOyB0bXBbIDJdID0gMDsgdG1wWyAzXSA9IDA7CisJCQkgIHRtcFsgNF0gPSAwOyB0bXBbIDVdID0gMDsgdG1wWyA2XSA9IDA7IHRtcFsgN10gPSAwOworCQkJICB0bXBbIDhdID0gMDsgdG1wWyA5XSA9IDA7IHRtcFsxMF0gPSAwOyB0bXBbMTFdID0gMDsKKwkJCSAgdG1wWzEyXSA9IDA7IHRtcFsxM10gPSAwOyB0bXBbMTRdID0gMDsgdG1wWzE1XSA9IDA7CisJCQkgIHJldHVybjsKKwkJCWNhc2UgODoKKwkJCSAgdG1wWyAwXSA9IDA7IHRtcFsgMV0gPSAwOyB0bXBbIDJdID0gMDsgdG1wWyAzXSA9IDA7CisJCQkgIHRtcFsgNF0gPSAwOyB0bXBbIDVdID0gMDsgdG1wWyA2XSA9IDA7IHRtcFsgN10gPSAwOworCQkJICByZXR1cm47CisJCQljYXNlIDQ6CisJCQkgIHRtcFsgMF0gPSAwOyB0bXBbIDFdID0gMDsgdG1wWyAyXSA9IDA7IHRtcFsgM10gPSAwOworCQkJICByZXR1cm47CisJCX0KKwl9CisJaSA9IF9fRkRTRVRfTE9OR1M7CisJd2hpbGUgKGkpIHsKKwkJaS0tOworCQkqdG1wID0gMDsKKwkJdG1wKys7CisJfQorfQorCisjZW5kaWYgLyogZGVmaW5lZChfX0tFUk5FTF9fKSAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9wcmN0bC5oIGIvaW5jbHVkZS9hc20teDg2XzY0L3ByY3RsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI5NTJhZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9wcmN0bC5oCkBAIC0wLDAgKzEsMTAgQEAKKyNpZm5kZWYgWDg2XzY0X1BSQ1RMX0gKKyNkZWZpbmUgWDg2XzY0X1BSQ1RMX0ggMQorCisjZGVmaW5lIEFSQ0hfU0VUX0dTIDB4MTAwMQorI2RlZmluZSBBUkNIX1NFVF9GUyAweDEwMDIKKyNkZWZpbmUgQVJDSF9HRVRfRlMgMHgxMDAzCisjZGVmaW5lIEFSQ0hfR0VUX0dTIDB4MTAwNAorCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L3Byb2Nlc3Nvci5oIGIvaW5jbHVkZS9hc20teDg2XzY0L3Byb2Nlc3Nvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1YWI3NGUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvcHJvY2Vzc29yLmgKQEAgLTAsMCArMSw0NjIgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS14ODZfNjQvcHJvY2Vzc29yLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTQgTGludXMgVG9ydmFsZHMKKyAqLworCisjaWZuZGVmIF9fQVNNX1g4Nl82NF9QUk9DRVNTT1JfSAorI2RlZmluZSBfX0FTTV9YODZfNjRfUFJPQ0VTU09SX0gKKworI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vc2lnY29udGV4dC5oPgorI2luY2x1ZGUgPGFzbS9jcHVmZWF0dXJlLmg+CisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorI2luY2x1ZGUgPGFzbS9tc3IuaD4KKyNpbmNsdWRlIDxhc20vY3VycmVudC5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vbW1zZWdtZW50Lmg+CisjaW5jbHVkZSA8YXNtL3BlcmNwdS5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcnNvbmFsaXR5Lmg+CisKKyNkZWZpbmUgVEZfTUFTSwkJMHgwMDAwMDEwMAorI2RlZmluZSBJRl9NQVNLCQkweDAwMDAwMjAwCisjZGVmaW5lIElPUExfTUFTSwkweDAwMDAzMDAwCisjZGVmaW5lIE5UX01BU0sJCTB4MDAwMDQwMDAKKyNkZWZpbmUgVk1fTUFTSwkJMHgwMDAyMDAwMAorI2RlZmluZSBBQ19NQVNLCQkweDAwMDQwMDAwCisjZGVmaW5lIFZJRl9NQVNLCTB4MDAwODAwMDAJLyogdmlydHVhbCBpbnRlcnJ1cHQgZmxhZyAqLworI2RlZmluZSBWSVBfTUFTSwkweDAwMTAwMDAwCS8qIHZpcnR1YWwgaW50ZXJydXB0IHBlbmRpbmcgKi8KKyNkZWZpbmUgSURfTUFTSwkJMHgwMDIwMDAwMAorCisjZGVmaW5lIGRlc2NfZW1wdHkoZGVzYykgXAorICAgICAgICAgICAgICAgKCEoKGRlc2MpLT5hICsgKGRlc2MpLT5iKSkKKworI2RlZmluZSBkZXNjX2VxdWFsKGRlc2MxLCBkZXNjMikgXAorICAgICAgICAgICAgICAgKCgoZGVzYzEpLT5hID09IChkZXNjMiktPmEpICYmICgoZGVzYzEpLT5iID09IChkZXNjMiktPmIpKQorCisvKgorICogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBtYWNybyB0aGF0IHJldHVybnMgY3VycmVudAorICogaW5zdHJ1Y3Rpb24gcG9pbnRlciAoInByb2dyYW0gY291bnRlciIpLgorICovCisjZGVmaW5lIGN1cnJlbnRfdGV4dF9hZGRyKCkgKHsgdm9pZCAqcGM7IGFzbSB2b2xhdGlsZSgibGVhcSAxZiglJXJpcCksJTBcbjE6IjoiPXIiKHBjKSk7IHBjOyB9KQorCisvKgorICogIENQVSB0eXBlIGFuZCBoYXJkd2FyZSBidWcgZmxhZ3MuIEtlcHQgc2VwYXJhdGVseSBmb3IgZWFjaCBDUFUuCisgKi8KKworc3RydWN0IGNwdWluZm9feDg2IHsKKwlfX3U4CXg4NjsJCS8qIENQVSBmYW1pbHkgKi8KKwlfX3U4CXg4Nl92ZW5kb3I7CS8qIENQVSB2ZW5kb3IgKi8KKwlfX3U4CXg4Nl9tb2RlbDsKKwlfX3U4CXg4Nl9tYXNrOworCWludAljcHVpZF9sZXZlbDsJLyogTWF4aW11bSBzdXBwb3J0ZWQgQ1BVSUQgbGV2ZWwsIC0xPW5vIENQVUlEICovCisJX191MzIJeDg2X2NhcGFiaWxpdHlbTkNBUElOVFNdOworCWNoYXIJeDg2X3ZlbmRvcl9pZFsxNl07CisJY2hhcgl4ODZfbW9kZWxfaWRbNjRdOworCWludCAJeDg2X2NhY2hlX3NpemU7ICAvKiBpbiBLQiAqLworCWludAl4ODZfY2xmbHVzaF9zaXplOworCWludAl4ODZfY2FjaGVfYWxpZ25tZW50OworCWludAl4ODZfdGxic2l6ZTsJLyogbnVtYmVyIG9mIDRLIHBhZ2VzIGluIERUTEIvSVRMQiBjb21iaW5lZChpbiBwYWdlcykqLworICAgICAgICBfX3U4ICAgIHg4Nl92aXJ0X2JpdHMsIHg4Nl9waHlzX2JpdHM7CisJX191OAl4ODZfbnVtX2NvcmVzOworCV9fdTgJeDg2X2FwaWNpZDsKKyAgICAgICAgX191MzIgICB4ODZfcG93ZXI7IAkKKwlfX3UzMiAgIHg4Nl9jcHVpZF9sZXZlbDsJLyogTWF4IENQVUlEIGZ1bmN0aW9uIHN1cHBvcnRlZCAqLworCXVuc2lnbmVkIGxvbmcgbG9vcHNfcGVyX2ppZmZ5OworfSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CisKKyNkZWZpbmUgWDg2X1ZFTkRPUl9JTlRFTCAwCisjZGVmaW5lIFg4Nl9WRU5ET1JfQ1lSSVggMQorI2RlZmluZSBYODZfVkVORE9SX0FNRCAyCisjZGVmaW5lIFg4Nl9WRU5ET1JfVU1DIDMKKyNkZWZpbmUgWDg2X1ZFTkRPUl9ORVhHRU4gNAorI2RlZmluZSBYODZfVkVORE9SX0NFTlRBVVIgNQorI2RlZmluZSBYODZfVkVORE9SX1JJU0UgNgorI2RlZmluZSBYODZfVkVORE9SX1RSQU5TTUVUQSA3CisjZGVmaW5lIFg4Nl9WRU5ET1JfTlVNIDgKKyNkZWZpbmUgWDg2X1ZFTkRPUl9VTktOT1dOIDB4ZmYKKworI2lmZGVmIENPTkZJR19TTVAKK2V4dGVybiBzdHJ1Y3QgY3B1aW5mb194ODYgY3B1X2RhdGFbXTsKKyNkZWZpbmUgY3VycmVudF9jcHVfZGF0YSBjcHVfZGF0YVtzbXBfcHJvY2Vzc29yX2lkKCldCisjZWxzZQorI2RlZmluZSBjcHVfZGF0YSAoJmJvb3RfY3B1X2RhdGEpCisjZGVmaW5lIGN1cnJlbnRfY3B1X2RhdGEgYm9vdF9jcHVfZGF0YQorI2VuZGlmCisKK2V4dGVybiBjaGFyIGlnbm9yZV9pcnExMzsKKworZXh0ZXJuIHZvaWQgaWRlbnRpZnlfY3B1KHN0cnVjdCBjcHVpbmZvX3g4NiAqKTsKK2V4dGVybiB2b2lkIHByaW50X2NwdV9pbmZvKHN0cnVjdCBjcHVpbmZvX3g4NiAqKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgaW5pdF9pbnRlbF9jYWNoZWluZm8oc3RydWN0IGNwdWluZm9feDg2ICpjKTsKKworLyoKKyAqIEVGTEFHUyBiaXRzCisgKi8KKyNkZWZpbmUgWDg2X0VGTEFHU19DRgkweDAwMDAwMDAxIC8qIENhcnJ5IEZsYWcgKi8KKyNkZWZpbmUgWDg2X0VGTEFHU19QRgkweDAwMDAwMDA0IC8qIFBhcml0eSBGbGFnICovCisjZGVmaW5lIFg4Nl9FRkxBR1NfQUYJMHgwMDAwMDAxMCAvKiBBdXhpbGxhcnkgY2FycnkgRmxhZyAqLworI2RlZmluZSBYODZfRUZMQUdTX1pGCTB4MDAwMDAwNDAgLyogWmVybyBGbGFnICovCisjZGVmaW5lIFg4Nl9FRkxBR1NfU0YJMHgwMDAwMDA4MCAvKiBTaWduIEZsYWcgKi8KKyNkZWZpbmUgWDg2X0VGTEFHU19URgkweDAwMDAwMTAwIC8qIFRyYXAgRmxhZyAqLworI2RlZmluZSBYODZfRUZMQUdTX0lGCTB4MDAwMDAyMDAgLyogSW50ZXJydXB0IEZsYWcgKi8KKyNkZWZpbmUgWDg2X0VGTEFHU19ERgkweDAwMDAwNDAwIC8qIERpcmVjdGlvbiBGbGFnICovCisjZGVmaW5lIFg4Nl9FRkxBR1NfT0YJMHgwMDAwMDgwMCAvKiBPdmVyZmxvdyBGbGFnICovCisjZGVmaW5lIFg4Nl9FRkxBR1NfSU9QTAkweDAwMDAzMDAwIC8qIElPUEwgbWFzayAqLworI2RlZmluZSBYODZfRUZMQUdTX05UCTB4MDAwMDQwMDAgLyogTmVzdGVkIFRhc2sgKi8KKyNkZWZpbmUgWDg2X0VGTEFHU19SRgkweDAwMDEwMDAwIC8qIFJlc3VtZSBGbGFnICovCisjZGVmaW5lIFg4Nl9FRkxBR1NfVk0JMHgwMDAyMDAwMCAvKiBWaXJ0dWFsIE1vZGUgKi8KKyNkZWZpbmUgWDg2X0VGTEFHU19BQwkweDAwMDQwMDAwIC8qIEFsaWdubWVudCBDaGVjayAqLworI2RlZmluZSBYODZfRUZMQUdTX1ZJRgkweDAwMDgwMDAwIC8qIFZpcnR1YWwgSW50ZXJydXB0IEZsYWcgKi8KKyNkZWZpbmUgWDg2X0VGTEFHU19WSVAJMHgwMDEwMDAwMCAvKiBWaXJ0dWFsIEludGVycnVwdCBQZW5kaW5nICovCisjZGVmaW5lIFg4Nl9FRkxBR1NfSUQJMHgwMDIwMDAwMCAvKiBDUFVJRCBkZXRlY3Rpb24gZmxhZyAqLworCisvKgorICogSW50ZWwgQ1BVIGZlYXR1cmVzIGluIENSNAorICovCisjZGVmaW5lIFg4Nl9DUjRfVk1FCQkweDAwMDEJLyogZW5hYmxlIHZtODYgZXh0ZW5zaW9ucyAqLworI2RlZmluZSBYODZfQ1I0X1BWSQkJMHgwMDAyCS8qIHZpcnR1YWwgaW50ZXJydXB0cyBmbGFnIGVuYWJsZSAqLworI2RlZmluZSBYODZfQ1I0X1RTRAkJMHgwMDA0CS8qIGRpc2FibGUgdGltZSBzdGFtcCBhdCBpcGwgMyAqLworI2RlZmluZSBYODZfQ1I0X0RFCQkweDAwMDgJLyogZW5hYmxlIGRlYnVnZ2luZyBleHRlbnNpb25zICovCisjZGVmaW5lIFg4Nl9DUjRfUFNFCQkweDAwMTAJLyogZW5hYmxlIHBhZ2Ugc2l6ZSBleHRlbnNpb25zICovCisjZGVmaW5lIFg4Nl9DUjRfUEFFCQkweDAwMjAJLyogZW5hYmxlIHBoeXNpY2FsIGFkZHJlc3MgZXh0ZW5zaW9ucyAqLworI2RlZmluZSBYODZfQ1I0X01DRQkJMHgwMDQwCS8qIE1hY2hpbmUgY2hlY2sgZW5hYmxlICovCisjZGVmaW5lIFg4Nl9DUjRfUEdFCQkweDAwODAJLyogZW5hYmxlIGdsb2JhbCBwYWdlcyAqLworI2RlZmluZSBYODZfQ1I0X1BDRQkJMHgwMTAwCS8qIGVuYWJsZSBwZXJmb3JtYW5jZSBjb3VudGVycyBhdCBpcGwgMyAqLworI2RlZmluZSBYODZfQ1I0X09TRlhTUgkJMHgwMjAwCS8qIGVuYWJsZSBmYXN0IEZQVSBzYXZlIGFuZCByZXN0b3JlICovCisjZGVmaW5lIFg4Nl9DUjRfT1NYTU1FWENQVAkweDA0MDAJLyogZW5hYmxlIHVubWFza2VkIFNTRSBleGNlcHRpb25zICovCisKKy8qCisgKiBTYXZlIHRoZSBjcjQgZmVhdHVyZSBzZXQgd2UncmUgdXNpbmcgKGllCisgKiBQZW50aXVtIDRNQiBlbmFibGUgYW5kIFBQcm8gR2xvYmFsIHBhZ2UKKyAqIGVuYWJsZSksIHNvIHRoYXQgYW55IENQVSdzIHRoYXQgYm9vdCB1cAorICogYWZ0ZXIgdXMgY2FuIGdldCB0aGUgY29ycmVjdCBmbGFncy4KKyAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbW11X2NyNF9mZWF0dXJlczsKKworc3RhdGljIGlubGluZSB2b2lkIHNldF9pbl9jcjQgKHVuc2lnbmVkIGxvbmcgbWFzaykKK3sKKwltbXVfY3I0X2ZlYXR1cmVzIHw9IG1hc2s7CisJX19hc21fXygibW92cSAlJWNyNCwlJXJheFxuXHQiCisJCSJvcnEgJTAsJSVyYXhcblx0IgorCQkibW92cSAlJXJheCwlJWNyNFxuIgorCQk6IDogImlyZyIgKG1hc2spCisJCToiYXgiKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX2luX2NyNCAodW5zaWduZWQgbG9uZyBtYXNrKQoreworCW1tdV9jcjRfZmVhdHVyZXMgJj0gfm1hc2s7CisJX19hc21fXygibW92cSAlJWNyNCwlJXJheFxuXHQiCisJCSJhbmRxICUwLCUlcmF4XG5cdCIKKwkJIm1vdnEgJSVyYXgsJSVjcjRcbiIKKwkJOiA6ICJpcmciICh+bWFzaykKKwkJOiJheCIpOworfQorCisKKy8qCisgKiBVc2VyIHNwYWNlIHByb2Nlc3Mgc2l6ZS4gNDdiaXRzLgorICovCisjZGVmaW5lIFRBU0tfU0laRQkoMHg4MDAwMDAwMDAwMDBVTCkKKworLyogVGhpcyBkZWNpZGVzIHdoZXJlIHRoZSBrZXJuZWwgd2lsbCBzZWFyY2ggZm9yIGEgZnJlZSBjaHVuayBvZiB2bQorICogc3BhY2UgZHVyaW5nIG1tYXAncy4KKyAqLworI2RlZmluZSBJQTMyX1BBR0VfT0ZGU0VUICgoY3VycmVudC0+cGVyc29uYWxpdHkgJiBBRERSX0xJTUlUXzNHQikgPyAweGMwMDAwMDAwIDogMHhGRkZGZTAwMCkKKyNkZWZpbmUgVEFTS19VTk1BUFBFRF8zMiBQQUdFX0FMSUdOKElBMzJfUEFHRV9PRkZTRVQvMykKKyNkZWZpbmUgVEFTS19VTk1BUFBFRF82NCBQQUdFX0FMSUdOKFRBU0tfU0laRS8zKSAKKyNkZWZpbmUgVEFTS19VTk1BUFBFRF9CQVNFCVwKKwkodGVzdF90aHJlYWRfZmxhZyhUSUZfSUEzMikgPyBUQVNLX1VOTUFQUEVEXzMyIDogVEFTS19VTk1BUFBFRF82NCkgIAorCisvKgorICogU2l6ZSBvZiBpb19iaXRtYXAuCisgKi8KKyNkZWZpbmUgSU9fQklUTUFQX0JJVFMgIDY1NTM2CisjZGVmaW5lIElPX0JJVE1BUF9CWVRFUyAoSU9fQklUTUFQX0JJVFMvOCkKKyNkZWZpbmUgSU9fQklUTUFQX0xPTkdTIChJT19CSVRNQVBfQllURVMvc2l6ZW9mKGxvbmcpKQorI2RlZmluZSBJT19CSVRNQVBfT0ZGU0VUIG9mZnNldG9mKHN0cnVjdCB0c3Nfc3RydWN0LGlvX2JpdG1hcCkKKyNkZWZpbmUgSU5WQUxJRF9JT19CSVRNQVBfT0ZGU0VUIDB4ODAwMAorCitzdHJ1Y3QgaTM4N19meHNhdmVfc3RydWN0IHsKKwl1MTYJY3dkOworCXUxNglzd2Q7CisJdTE2CXR3ZDsKKwl1MTYJZm9wOworCXU2NAlyaXA7CisJdTY0CXJkcDsgCisJdTMyCW14Y3NyOworCXUzMglteGNzcl9tYXNrOworCXUzMglzdF9zcGFjZVszMl07CS8qIDgqMTYgYnl0ZXMgZm9yIGVhY2ggRlAtcmVnID0gMTI4IGJ5dGVzICovCisJdTMyCXhtbV9zcGFjZVs2NF07CS8qIDE2KjE2IGJ5dGVzIGZvciBlYWNoIFhNTS1yZWcgPSAxMjggYnl0ZXMgKi8KKwl1MzIJcGFkZGluZ1syNF07Cit9IF9fYXR0cmlidXRlX18gKChhbGlnbmVkICgxNikpKTsKKwordW5pb24gaTM4N191bmlvbiB7CisJc3RydWN0IGkzODdfZnhzYXZlX3N0cnVjdAlmeHNhdmU7Cit9OworCitzdHJ1Y3QgdHNzX3N0cnVjdCB7CisJdTMyIHJlc2VydmVkMTsKKwl1NjQgcnNwMDsJCisJdTY0IHJzcDE7CisJdTY0IHJzcDI7CisJdTY0IHJlc2VydmVkMjsKKwl1NjQgaXN0WzddOworCXUzMiByZXNlcnZlZDM7CisJdTMyIHJlc2VydmVkNDsKKwl1MTYgcmVzZXJ2ZWQ1OworCXUxNiBpb19iaXRtYXBfYmFzZTsKKwkvKgorCSAqIFRoZSBleHRyYSAxIGlzIHRoZXJlIGJlY2F1c2UgdGhlIENQVSB3aWxsIGFjY2VzcyBhbgorCSAqIGFkZGl0aW9uYWwgYnl0ZSBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgSU8gcGVybWlzc2lvbgorCSAqIGJpdG1hcC4gVGhlIGV4dHJhIGJ5dGUgbXVzdCBiZSBhbGwgMSBiaXRzLCBhbmQgbXVzdAorCSAqIGJlIHdpdGhpbiB0aGUgbGltaXQuIFRodXMgd2UgaGF2ZToKKwkgKgorCSAqIDEyOCBieXRlcywgdGhlIGJpdG1hcCBpdHNlbGYsIGZvciBwb3J0cyAwLi4weDNmZgorCSAqIDggYnl0ZXMsIGZvciBhbiBleHRyYSAibG9uZyIgb2YgfjBVTAorCSAqLworCXVuc2lnbmVkIGxvbmcgaW9fYml0bWFwW0lPX0JJVE1BUF9MT05HUyArIDFdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CisKK2V4dGVybiBzdHJ1Y3QgY3B1aW5mb194ODYgYm9vdF9jcHVfZGF0YTsKK0RFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgdHNzX3N0cnVjdCxpbml0X3Rzcyk7CisKKyNkZWZpbmUgQVJDSF9NSU5fVEFTS0FMSUdOCTE2CisKK3N0cnVjdCB0aHJlYWRfc3RydWN0IHsKKwl1bnNpZ25lZCBsb25nCXJzcDA7CisJdW5zaWduZWQgbG9uZwlyc3A7CisJdW5zaWduZWQgbG9uZyAJdXNlcnJzcDsJLyogQ29weSBmcm9tIFBEQSAqLyAKKwl1bnNpZ25lZCBsb25nCWZzOworCXVuc2lnbmVkIGxvbmcJZ3M7CisJdW5zaWduZWQgc2hvcnQJZXMsIGRzLCBmc2luZGV4LCBnc2luZGV4OwkKKy8qIEhhcmR3YXJlIGRlYnVnZ2luZyByZWdpc3RlcnMgKi8KKwl1bnNpZ25lZCBsb25nCWRlYnVncmVnMDsgIAorCXVuc2lnbmVkIGxvbmcJZGVidWdyZWcxOyAgCisJdW5zaWduZWQgbG9uZwlkZWJ1Z3JlZzI7ICAKKwl1bnNpZ25lZCBsb25nCWRlYnVncmVnMzsgIAorCXVuc2lnbmVkIGxvbmcJZGVidWdyZWc2OyAgCisJdW5zaWduZWQgbG9uZwlkZWJ1Z3JlZzc7ICAKKy8qIGZhdWx0IGluZm8gKi8KKwl1bnNpZ25lZCBsb25nCWNyMiwgdHJhcF9ubywgZXJyb3JfY29kZTsKKy8qIGZsb2F0aW5nIHBvaW50IGluZm8gKi8KKwl1bmlvbiBpMzg3X3VuaW9uCWkzODcgIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMTYpKSk7CisvKiBJTyBwZXJtaXNzaW9ucy4gdGhlIGJpdG1hcCBjb3VsZCBiZSBtb3ZlZCBpbnRvIHRoZSBHRFQsIHRoYXQgd291bGQgbWFrZQorICAgc3dpdGNoIGZhc3RlciBmb3IgYSBsaW1pdGVkIG51bWJlciBvZiBpb3Blcm0gdXNpbmcgdGFza3MuIC1BSyAqLworCWludAkJaW9wZXJtOworCXVuc2lnbmVkIGxvbmcJKmlvX2JpdG1hcF9wdHI7CisJdW5zaWduZWQgaW9fYml0bWFwX21heDsKKy8qIGNhY2hlZCBUTFMgZGVzY3JpcHRvcnMuICovCisJdTY0IHRsc19hcnJheVtHRFRfRU5UUllfVExTX0VOVFJJRVNdOworfSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDE2KSkpOworCisjZGVmaW5lIElOSVRfVEhSRUFEICB7fQorCisjZGVmaW5lIElOSVRfTU1BUCBcCit7ICZpbml0X21tLCAwLCAwLCBOVUxMLCBQQUdFX1NIQVJFRCwgVk1fUkVBRCB8IFZNX1dSSVRFIHwgVk1fRVhFQywgMSwgTlVMTCwgTlVMTCB9CisKKyNkZWZpbmUgU1RBQ0tGQVVMVF9TVEFDSyAxCisjZGVmaW5lIERPVUJMRUZBVUxUX1NUQUNLIDIgCisjZGVmaW5lIE5NSV9TVEFDSyAzIAorI2RlZmluZSBERUJVR19TVEFDSyA0IAorI2RlZmluZSBNQ0VfU1RBQ0sgNQorI2RlZmluZSBOX0VYQ0VQVElPTl9TVEFDS1MgNSAgLyogaHcgbGltaXQ6IDcgKi8KKyNkZWZpbmUgRVhDRVBUSU9OX1NUS1NaIChQQUdFX1NJWkUgPDwgRVhDRVBUSU9OX1NUQUNLX09SREVSKQorI2RlZmluZSBFWENFUFRJT05fU1RBQ0tfT1JERVIgMCAKKworI2RlZmluZSBzdGFydF90aHJlYWQocmVncyxuZXdfcmlwLG5ld19yc3ApIGRvIHsgXAorCWFzbSB2b2xhdGlsZSgibW92bCAlMCwlJWZzOyBtb3ZsICUwLCUlZXM7IG1vdmwgJTAsJSVkcyI6IDoiciIgKDApKTsJIFwKKwlsb2FkX2dzX2luZGV4KDApOwkJCQkJCQlcCisJKHJlZ3MpLT5yaXAgPSAobmV3X3JpcCk7CQkJCQkJIFwKKwkocmVncyktPnJzcCA9IChuZXdfcnNwKTsJCQkJCQkgXAorCXdyaXRlX3BkYShvbGRyc3AsIChuZXdfcnNwKSk7CQkJCQkJIFwKKwkocmVncyktPmNzID0gX19VU0VSX0NTOwkJCQkJCQkgXAorCShyZWdzKS0+c3MgPSBfX1VTRVJfRFM7CQkJCQkJCSBcCisJKHJlZ3MpLT5lZmxhZ3MgPSAweDIwMDsJCQkJCQkJIFwKKwlzZXRfZnMoVVNFUl9EUyk7CQkJCQkJCSBcCit9IHdoaWxlKDApIAorCitzdHJ1Y3QgdGFza19zdHJ1Y3Q7CitzdHJ1Y3QgbW1fc3RydWN0OworCisvKiBGcmVlIGFsbCByZXNvdXJjZXMgaGVsZCBieSBhIHRocmVhZC4gKi8KK2V4dGVybiB2b2lkIHJlbGVhc2VfdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKKworLyogUHJlcGFyZSB0byBjb3B5IHRocmVhZCBzdGF0ZSAtIHVubGF6eSBhbGwgbGF6eSBzdGF0dXMgKi8KK2V4dGVybiB2b2lkIHByZXBhcmVfdG9fY29weShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7CisKKy8qCisgKiBjcmVhdGUgYSBrZXJuZWwgdGhyZWFkIHdpdGhvdXQgcmVtb3ZpbmcgaXQgZnJvbSB0YXNrbGlzdHMKKyAqLworZXh0ZXJuIGxvbmcga2VybmVsX3RocmVhZChpbnQgKCpmbikodm9pZCAqKSwgdm9pZCAqIGFyZywgdW5zaWduZWQgbG9uZyBmbGFncyk7CisKKy8qCisgKiBSZXR1cm4gc2F2ZWQgUEMgb2YgYSBibG9ja2VkIHRocmVhZC4KKyAqIFdoYXQgaXMgdGhpcyBnb29kIGZvcj8gaXQgd2lsbCBiZSBhbHdheXMgdGhlIHNjaGVkdWxlciBvciByZXRfZnJvbV9mb3JrLgorICovCisjZGVmaW5lIHRocmVhZF9zYXZlZF9wYyh0KSAoKih1bnNpZ25lZCBsb25nICopKCh0KS0+dGhyZWFkLnJzcCAtIDgpKQorCitleHRlcm4gdW5zaWduZWQgbG9uZyBnZXRfd2NoYW4oc3RydWN0IHRhc2tfc3RydWN0ICpwKTsKKyNkZWZpbmUgS1NUS19FSVAodHNrKSBcCisJKCgoc3RydWN0IHB0X3JlZ3MgKikodHNrLT50aHJlYWQucnNwMCAtIHNpemVvZihzdHJ1Y3QgcHRfcmVncykpKS0+cmlwKQorI2RlZmluZSBLU1RLX0VTUCh0c2spIC0xIC8qIHNvcnJ5LiBkb2Vzbid0IHdvcmsgZm9yIHN5c2NhbGwuICovCisKKworc3RydWN0IG1pY3JvY29kZV9oZWFkZXIgeworCXVuc2lnbmVkIGludCBoZHJ2ZXI7CisJdW5zaWduZWQgaW50IHJldjsKKwl1bnNpZ25lZCBpbnQgZGF0ZTsKKwl1bnNpZ25lZCBpbnQgc2lnOworCXVuc2lnbmVkIGludCBja3N1bTsKKwl1bnNpZ25lZCBpbnQgbGRydmVyOworCXVuc2lnbmVkIGludCBwZjsKKwl1bnNpZ25lZCBpbnQgZGF0YXNpemU7CisJdW5zaWduZWQgaW50IHRvdGFsc2l6ZTsKKwl1bnNpZ25lZCBpbnQgcmVzZXJ2ZWRbM107Cit9OworCitzdHJ1Y3QgbWljcm9jb2RlIHsKKwlzdHJ1Y3QgbWljcm9jb2RlX2hlYWRlciBoZHI7CisJdW5zaWduZWQgaW50IGJpdHNbMF07Cit9OworCit0eXBlZGVmIHN0cnVjdCBtaWNyb2NvZGUgbWljcm9jb2RlX3Q7Cit0eXBlZGVmIHN0cnVjdCBtaWNyb2NvZGVfaGVhZGVyIG1pY3JvY29kZV9oZWFkZXJfdDsKKworLyogbWljcm9jb2RlIGZvcm1hdCBpcyBleHRlbmRlZCBmcm9tIHByZXNjb3R0IHByb2Nlc3NvcnMgKi8KK3N0cnVjdCBleHRlbmRlZF9zaWduYXR1cmUgeworCXVuc2lnbmVkIGludCBzaWc7CisJdW5zaWduZWQgaW50IHBmOworCXVuc2lnbmVkIGludCBja3N1bTsKK307CisKK3N0cnVjdCBleHRlbmRlZF9zaWd0YWJsZSB7CisJdW5zaWduZWQgaW50IGNvdW50OworCXVuc2lnbmVkIGludCBja3N1bTsKKwl1bnNpZ25lZCBpbnQgcmVzZXJ2ZWRbM107CisJc3RydWN0IGV4dGVuZGVkX3NpZ25hdHVyZSBzaWdzWzBdOworfTsKKworLyogJzYnIGJlY2F1c2UgaXQgdXNlZCB0byBiZSBmb3IgUDYgb25seSAoYnV0IG5vdyBjb3ZlcnMgUGVudGl1bSA0IGFzIHdlbGwpICovCisjZGVmaW5lIE1JQ1JPQ09ERV9JT0NGUkVFCV9JTygnNicsMCkKKworCisjZGVmaW5lIEFTTV9OT1AxIEs4X05PUDEKKyNkZWZpbmUgQVNNX05PUDIgSzhfTk9QMgorI2RlZmluZSBBU01fTk9QMyBLOF9OT1AzCisjZGVmaW5lIEFTTV9OT1A0IEs4X05PUDQKKyNkZWZpbmUgQVNNX05PUDUgSzhfTk9QNQorI2RlZmluZSBBU01fTk9QNiBLOF9OT1A2CisjZGVmaW5lIEFTTV9OT1A3IEs4X05PUDcKKyNkZWZpbmUgQVNNX05PUDggSzhfTk9QOAorCisvKiBPcHRlcm9uIG5vcHMgKi8KKyNkZWZpbmUgSzhfTk9QMSAiLmJ5dGUgMHg5MFxuIgorI2RlZmluZSBLOF9OT1AyCSIuYnl0ZSAweDY2LDB4OTBcbiIgCisjZGVmaW5lIEs4X05PUDMJIi5ieXRlIDB4NjYsMHg2NiwweDkwXG4iIAorI2RlZmluZSBLOF9OT1A0CSIuYnl0ZSAweDY2LDB4NjYsMHg2NiwweDkwXG4iIAorI2RlZmluZSBLOF9OT1A1CUs4X05PUDMgSzhfTk9QMiAKKyNkZWZpbmUgSzhfTk9QNglLOF9OT1AzIEs4X05PUDMKKyNkZWZpbmUgSzhfTk9QNwlLOF9OT1A0IEs4X05PUDMKKyNkZWZpbmUgSzhfTk9QOAlLOF9OT1A0IEs4X05PUDQKKworI2RlZmluZSBBU01fTk9QX01BWCA4CisKKy8qIFJFUCBOT1AgKFBBVVNFKSBpcyBhIGdvb2QgdGhpbmcgdG8gaW5zZXJ0IGludG8gYnVzeS13YWl0IGxvb3BzLiAqLworZXh0ZXJuIGlubGluZSB2b2lkIHJlcF9ub3Aodm9pZCkKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygicmVwO25vcCI6IDogOiJtZW1vcnkiKTsKK30KKworLyogU3RvcCBzcGVjdWxhdGl2ZSBleGVjdXRpb24gKi8KK2V4dGVybiBpbmxpbmUgdm9pZCBzeW5jX2NvcmUodm9pZCkKK3sgCisJaW50IHRtcDsKKwlhc20gdm9sYXRpbGUoImNwdWlkIiA6ICI9YSIgKHRtcCkgOiAiMCIgKDEpIDogImVieCIsImVjeCIsImVkeCIsIm1lbW9yeSIpOworfSAKKworI2RlZmluZSBjcHVfaGFzX2ZwdSAxCisKKyNkZWZpbmUgQVJDSF9IQVNfUFJFRkVUQ0gKK3N0YXRpYyBpbmxpbmUgdm9pZCBwcmVmZXRjaCh2b2lkICp4KSAKK3sgCisJYXNtIHZvbGF0aWxlKCJwcmVmZXRjaHQwICUwIiA6OiAibSIgKCoodW5zaWduZWQgbG9uZyAqKXgpKTsKK30gCisKKyNkZWZpbmUgQVJDSF9IQVNfUFJFRkVUQ0hXIDEKK3N0YXRpYyBpbmxpbmUgdm9pZCBwcmVmZXRjaHcodm9pZCAqeCkgCit7IAorCWFsdGVybmF0aXZlX2lucHV0KEFTTV9OT1A1LAorCQkJICAicHJlZmV0Y2h3ICglMSkiLAorCQkJICBYODZfRkVBVFVSRV8zRE5PVywKKwkJCSAgInIiICh4KSk7Cit9IAorCisjZGVmaW5lIEFSQ0hfSEFTX1NQSU5MT0NLX1BSRUZFVENIIDEKKworI2RlZmluZSBzcGluX2xvY2tfcHJlZmV0Y2goeCkgIHByZWZldGNodyh4KQorCisjZGVmaW5lIGNwdV9yZWxheCgpICAgcmVwX25vcCgpCisKKy8qCisgKiAgICAgIE5TQy9DeXJpeCBDUFUgY29uZmlndXJhdGlvbiByZWdpc3RlciBpbmRleGVzCisgKi8KKyNkZWZpbmUgQ1g4Nl9DQ1IwIDB4YzAKKyNkZWZpbmUgQ1g4Nl9DQ1IxIDB4YzEKKyNkZWZpbmUgQ1g4Nl9DQ1IyIDB4YzIKKyNkZWZpbmUgQ1g4Nl9DQ1IzIDB4YzMKKyNkZWZpbmUgQ1g4Nl9DQ1I0IDB4ZTgKKyNkZWZpbmUgQ1g4Nl9DQ1I1IDB4ZTkKKyNkZWZpbmUgQ1g4Nl9DQ1I2IDB4ZWEKKyNkZWZpbmUgQ1g4Nl9DQ1I3IDB4ZWIKKyNkZWZpbmUgQ1g4Nl9ESVIwIDB4ZmUKKyNkZWZpbmUgQ1g4Nl9ESVIxIDB4ZmYKKyNkZWZpbmUgQ1g4Nl9BUlJfQkFTRSAweGM0CisjZGVmaW5lIENYODZfUkNSX0JBU0UgMHhkYworCisvKgorICogICAgICBOU0MvQ3lyaXggQ1BVIGluZGV4ZWQgcmVnaXN0ZXIgYWNjZXNzIG1hY3JvcworICovCisKKyNkZWZpbmUgZ2V0Q3g4NihyZWcpICh7IG91dGIoKHJlZyksIDB4MjIpOyBpbmIoMHgyMyk7IH0pCisKKyNkZWZpbmUgc2V0Q3g4NihyZWcsIGRhdGEpIGRvIHsgXAorCW91dGIoKHJlZyksIDB4MjIpOyBcCisJb3V0YigoZGF0YSksIDB4MjMpOyBcCit9IHdoaWxlICgwKQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19tb25pdG9yKGNvbnN0IHZvaWQgKmVheCwgdW5zaWduZWQgbG9uZyBlY3gsCisJCXVuc2lnbmVkIGxvbmcgZWR4KQoreworCS8qICJtb25pdG9yICVlYXgsJWVjeCwlZWR4OyIgKi8KKwlhc20gdm9sYXRpbGUoCisJCSIuYnl0ZSAweDBmLDB4MDEsMHhjODsiCisJCTogOiJhIiAoZWF4KSwgImMiIChlY3gpLCAiZCIoZWR4KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX213YWl0KHVuc2lnbmVkIGxvbmcgZWF4LCB1bnNpZ25lZCBsb25nIGVjeCkKK3sKKwkvKiAibXdhaXQgJWVheCwlZWN4OyIgKi8KKwlhc20gdm9sYXRpbGUoCisJCSIuYnl0ZSAweDBmLDB4MDEsMHhjOTsiCisJCTogOiJhIiAoZWF4KSwgImMiIChlY3gpKTsKK30KKworI2RlZmluZSBzdGFja19jdXJyZW50KCkgXAorKHsJCQkJCQkJCVwKKwlzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpOwkJCQkJXAorCWFzbSgiYW5kcSAlJXJzcCwlMDsgIjoiPXIiICh0aSkgOiAiMCIgKENVUlJFTlRfTUFTSykpOwlcCisJdGktPnRhc2s7CQkJCQlcCit9KQorCisjZGVmaW5lIGNhY2hlX2xpbmVfc2l6ZSgpIChib290X2NwdV9kYXRhLng4Nl9jYWNoZV9hbGlnbm1lbnQpCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIGJvb3Rfb3B0aW9uX2lkbGVfb3ZlcnJpZGU7CisvKiBCb290IGxvYWRlciB0eXBlIGZyb20gdGhlIHNldHVwIGhlYWRlciAqLworZXh0ZXJuIGludCBib290bG9hZGVyX3R5cGU7CisKKyNlbmRpZiAvKiBfX0FTTV9YODZfNjRfUFJPQ0VTU09SX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9wcm90by5oIGIvaW5jbHVkZS9hc20teDg2XzY0L3Byb3RvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU5NTI2ZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9wcm90by5oCkBAIC0wLDAgKzEsMTE4IEBACisjaWZuZGVmIF9BU01fWDg2NjRfUFJPVE9fSAorI2RlZmluZSBfQVNNX1g4NjY0X1BST1RPX0ggMQorCisjaW5jbHVkZSA8YXNtL2xkdC5oPgorCisvKiBtaXNjIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBwcm90b3R5cGVzICovCisKK3N0cnVjdCBjcHVpbmZvX3g4NjsgCitzdHJ1Y3QgcHRfcmVnczsKKworZXh0ZXJuIHZvaWQgZ2V0X2NwdV92ZW5kb3Ioc3RydWN0IGNwdWluZm9feDg2Kik7CitleHRlcm4gdm9pZCBzdGFydF9rZXJuZWwodm9pZCk7CitleHRlcm4gdm9pZCBwZGFfaW5pdChpbnQpOyAKKworZXh0ZXJuIHZvaWQgZWFybHlfaWR0X2hhbmRsZXIodm9pZCk7CisKK2V4dGVybiB2b2lkIG1jaGVja19pbml0KHN0cnVjdCBjcHVpbmZvX3g4NiAqYyk7CitleHRlcm4gdm9pZCBpbml0X21lbW9yeV9tYXBwaW5nKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTsKKworZXh0ZXJuIHZvaWQgc3lzdGVtX2NhbGwodm9pZCk7IAorZXh0ZXJuIGludCBrZXJuZWxfc3lzY2FsbCh2b2lkKTsKK2V4dGVybiB2b2lkIHN5c2NhbGxfaW5pdCh2b2lkKTsKKworZXh0ZXJuIHZvaWQgaWEzMl9zeXNjYWxsKHZvaWQpOworZXh0ZXJuIHZvaWQgaWEzMl9jc3Rhcl90YXJnZXQodm9pZCk7IAorZXh0ZXJuIHZvaWQgaWEzMl9zeXNlbnRlcl90YXJnZXQodm9pZCk7IAorCitleHRlcm4gdm9pZCBjb25maWdfYWNwaV90YWJsZXModm9pZCk7CitleHRlcm4gdm9pZCBpYTMyX3N5c2NhbGwodm9pZCk7CitleHRlcm4gdm9pZCBpb21tdV9ob2xlX2luaXQodm9pZCk7CisKK2V4dGVybiB2b2lkIHRpbWVfaW5pdF9zbXAodm9pZCk7CisKK2V4dGVybiB2b2lkIGRvX3NvZnRpcnFfdGh1bmsodm9pZCk7CisKK2V4dGVybiBpbnQgbnVtYV9zZXR1cChjaGFyICpvcHQpOworCitleHRlcm4gaW50IHNldHVwX2Vhcmx5X3ByaW50ayhjaGFyICopOyAKK2V4dGVybiB2b2lkIGVhcmx5X3ByaW50ayhjb25zdCBjaGFyICpmbXQsIC4uLikgX19hdHRyaWJ1dGVfXygoZm9ybWF0KHByaW50ZiwxLDIpKSk7CisKK2V4dGVybiB2b2lkIGVhcmx5X2lkZW50aWZ5X2NwdShzdHJ1Y3QgY3B1aW5mb194ODYgKmMpOworCitleHRlcm4gaW50IGs4X3NjYW5fbm9kZXModW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpOworCitleHRlcm4gdm9pZCBudW1hX2luaXRtZW1faW5pdCh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIG51bWFfZnJlZV9hbGxfYm9vdG1lbSh2b2lkKTsKKworZXh0ZXJuIHZvaWQgcmVzZXJ2ZV9ib290bWVtX2dlbmVyaWModW5zaWduZWQgbG9uZyBwaHlzLCB1bnNpZ25lZCBsZW4pOworZXh0ZXJuIHZvaWQgZnJlZV9ib290bWVtX2dlbmVyaWModW5zaWduZWQgbG9uZyBwaHlzLCB1bnNpZ25lZCBsZW4pOworCitleHRlcm4gdm9pZCBsb2FkX2dzX2luZGV4KHVuc2lnbmVkIGdzKTsKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZW5kX3Bmbl9tYXA7IAorCitleHRlcm4gY3B1bWFza190IGNwdV9pbml0aWFsaXplZDsKKworZXh0ZXJuIHZvaWQgc2hvd190cmFjZSh1bnNpZ25lZCBsb25nICogcnNwKTsKK2V4dGVybiB2b2lkIHNob3dfcmVnaXN0ZXJzKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworZXh0ZXJuIHZvaWQgZXhjZXB0aW9uX3RhYmxlX2NoZWNrKHZvaWQpOworCitleHRlcm4gdm9pZCBhY3BpX3Jlc2VydmVfYm9vdG1lbSh2b2lkKTsKKworZXh0ZXJuIHZvaWQgc3dhcF9sb3dfbWFwcGluZ3Modm9pZCk7CisKK2V4dGVybiB2b2lkIG9vcHNfYmVnaW4odm9pZCk7CitleHRlcm4gdm9pZCBkaWUoY29uc3QgY2hhciAqLHN0cnVjdCBwdF9yZWdzICosbG9uZyk7CitleHRlcm4gdm9pZCBfX2RpZShjb25zdCBjaGFyICogc3RyLCBzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MsIGxvbmcgZXJyKTsKK2V4dGVybiB2b2lkIF9fc2hvd19yZWdzKHN0cnVjdCBwdF9yZWdzICogcmVncyk7CitleHRlcm4gdm9pZCBzaG93X3JlZ3Moc3RydWN0IHB0X3JlZ3MgKiByZWdzKTsKKworZXh0ZXJuIGludCBtYXBfc3lzY2FsbDMyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpOworZXh0ZXJuIGludCBfX21hcF9zeXNjYWxsMzIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7CitleHRlcm4gY2hhciAqc3lzY2FsbDMyX3BhZ2U7CitleHRlcm4gdm9pZCBzeXNjYWxsMzJfY3B1X2luaXQodm9pZCk7CisKK2V4dGVybiB2b2lkIHNldHVwX25vZGVfYm9vdG1lbShpbnQgbm9kZWlkLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7CisKK2V4dGVybiB2b2lkIGNoZWNrX2lvYXBpYyh2b2lkKTsKK2V4dGVybiB2b2lkIGNoZWNrX2VmZXIodm9pZCk7CisKK2V4dGVybiBpbnQgdW5oYW5kbGVkX3NpZ25hbChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgaW50IHNpZyk7CisKK2V4dGVybiB2b2lkIHNlbGVjdF9pZGxlX3JvdXRpbmUoY29uc3Qgc3RydWN0IGNwdWluZm9feDg2ICpjKTsKK2V4dGVybiB2b2lkIHN3aW90bGJfaW5pdCh2b2lkKTsKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWF4X21hcG5yOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZW5kX3BmbjsgCitleHRlcm4gdW5zaWduZWQgbG9uZyB0YWJsZV9zdGFydCwgdGFibGVfZW5kOworCitleHRlcm4gaW50IGV4Y2VwdGlvbl90cmFjZTsKK2V4dGVybiBpbnQgZm9yY2VfaW9tbXUsIG5vX2lvbW11OworZXh0ZXJuIGludCB1c2luZ19hcGljX3RpbWVyOworZXh0ZXJuIGludCBkaXNhYmxlX2FwaWM7CitleHRlcm4gdW5zaWduZWQgY3B1X2toejsKK2V4dGVybiBpbnQgaW9hcGljX2ZvcmNlOworZXh0ZXJuIGludCBza2lwX2lvYXBpY19zZXR1cDsKK2V4dGVybiBpbnQgYWNwaV9odDsKK2V4dGVybiBpbnQgYWNwaV9kaXNhYmxlZDsKKworZXh0ZXJuIGludCBmYWxsYmFja19hcGVyX29yZGVyOworZXh0ZXJuIGludCBmYWxsYmFja19hcGVyX2ZvcmNlOworZXh0ZXJuIGludCBpb21tdV9hcGVydHVyZTsKK2V4dGVybiBpbnQgaW9tbXVfYXBlcnR1cmVfZGlzYWJsZWQ7CitleHRlcm4gaW50IGlvbW11X2FwZXJ0dXJlX2FsbG93ZWQ7CitleHRlcm4gaW50IGZpeF9hcGVydHVyZTsKK2V4dGVybiBpbnQgZm9yY2VfaW9tbXU7CisKK2V4dGVybiBpbnQgcmVib290X2ZvcmNlOworCitleHRlcm4gdm9pZCBzbXBfbG9jYWxfdGltZXJfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICogcmVncyk7CisKK2xvbmcgZG9fYXJjaF9wcmN0bChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCBjb2RlLCB1bnNpZ25lZCBsb25nIGFkZHIpOworCisjZGVmaW5lIHJvdW5kX3VwKHgseSkgKCgoeCkgKyAoeSkgLSAxKSAmIH4oKHkpLTEpKQorI2RlZmluZSByb3VuZF9kb3duKHgseSkgKCh4KSAmIH4oKHkpLTEpKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9wdHJhY2UuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9wdHJhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzg2NWNmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L3B0cmFjZS5oCkBAIC0wLDAgKzEsMTE0IEBACisjaWZuZGVmIF9YODZfNjRfUFRSQUNFX0gKKyNkZWZpbmUgX1g4Nl82NF9QVFJBQ0VfSAorCisjaWYgZGVmaW5lZChfX0FTU0VNQkxZX18pIHx8IGRlZmluZWQoX19GUkFNRV9PRkZTRVRTKSAKKyNkZWZpbmUgUjE1IDAKKyNkZWZpbmUgUjE0IDgKKyNkZWZpbmUgUjEzIDE2CisjZGVmaW5lIFIxMiAyNAorI2RlZmluZSBSQlAgMzIKKyNkZWZpbmUgUkJYIDQwCisvKiBhcmd1bWVudHM6IGludGVycnVwdHMvbm9uIHRyYWNpbmcgc3lzY2FsbHMgb25seSBzYXZlIHVwdG8gaGVyZSovCisjZGVmaW5lIFIxMSA0OAorI2RlZmluZSBSMTAgNTYJCisjZGVmaW5lIFI5IDY0CisjZGVmaW5lIFI4IDcyCisjZGVmaW5lIFJBWCA4MAorI2RlZmluZSBSQ1ggODgKKyNkZWZpbmUgUkRYIDk2CisjZGVmaW5lIFJTSSAxMDQKKyNkZWZpbmUgUkRJIDExMgorI2RlZmluZSBPUklHX1JBWCAxMjAgICAgICAgLyogPSBFUlJPUiAqLyAKKy8qIGVuZCBvZiBhcmd1bWVudHMgKi8gCQorLyogY3B1IGV4Y2VwdGlvbiBmcmFtZSBvciB1bmRlZmluZWQgaW4gY2FzZSBvZiBmYXN0IHN5c2NhbGwuICovCisjZGVmaW5lIFJJUCAxMjgKKyNkZWZpbmUgQ1MgMTM2CisjZGVmaW5lIEVGTEFHUyAxNDQKKyNkZWZpbmUgUlNQIDE1MgorI2RlZmluZSBTUyAxNjAKKyNkZWZpbmUgQVJHT0ZGU0VUIFIxMQorI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisvKiB0b3Agb2Ygc3RhY2sgcGFnZSAqLyAKKyNkZWZpbmUgRlJBTUVfU0laRSAxNjgKKworI2RlZmluZSBQVFJBQ0VfT0xEU0VUT1BUSU9OUyAgICAgICAgIDIxCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fIAorCitzdHJ1Y3QgcHRfcmVncyB7CisJdW5zaWduZWQgbG9uZyByMTU7CisJdW5zaWduZWQgbG9uZyByMTQ7CisJdW5zaWduZWQgbG9uZyByMTM7CisJdW5zaWduZWQgbG9uZyByMTI7CisJdW5zaWduZWQgbG9uZyByYnA7CisJdW5zaWduZWQgbG9uZyByYng7CisvKiBhcmd1bWVudHM6IG5vbiBpbnRlcnJ1cHRzL25vbiB0cmFjaW5nIHN5c2NhbGxzIG9ubHkgc2F2ZSB1cHRvIGhlcmUqLworIAl1bnNpZ25lZCBsb25nIHIxMTsKKwl1bnNpZ25lZCBsb25nIHIxMDsJCisJdW5zaWduZWQgbG9uZyByOTsKKwl1bnNpZ25lZCBsb25nIHI4OworCXVuc2lnbmVkIGxvbmcgcmF4OworCXVuc2lnbmVkIGxvbmcgcmN4OworCXVuc2lnbmVkIGxvbmcgcmR4OworCXVuc2lnbmVkIGxvbmcgcnNpOworCXVuc2lnbmVkIGxvbmcgcmRpOworCXVuc2lnbmVkIGxvbmcgb3JpZ19yYXg7CisvKiBlbmQgb2YgYXJndW1lbnRzICovIAkKKy8qIGNwdSBleGNlcHRpb24gZnJhbWUgb3IgdW5kZWZpbmVkICovCisJdW5zaWduZWQgbG9uZyByaXA7CisJdW5zaWduZWQgbG9uZyBjczsKKwl1bnNpZ25lZCBsb25nIGVmbGFnczsgCisJdW5zaWduZWQgbG9uZyByc3A7IAorCXVuc2lnbmVkIGxvbmcgc3M7CisvKiB0b3Agb2Ygc3RhY2sgcGFnZSAqLyAKK307CisKKyNlbmRpZgorCisvKiBBcmJpdHJhcmlseSBjaG9vc2UgdGhlIHNhbWUgcHRyYWNlIG51bWJlcnMgYXMgdXNlZCBieSB0aGUgU3BhcmMgY29kZS4gKi8KKyNkZWZpbmUgUFRSQUNFX0dFVFJFR1MgICAgICAgICAgICAxMgorI2RlZmluZSBQVFJBQ0VfU0VUUkVHUyAgICAgICAgICAgIDEzCisjZGVmaW5lIFBUUkFDRV9HRVRGUFJFR1MgICAgICAgICAgMTQKKyNkZWZpbmUgUFRSQUNFX1NFVEZQUkVHUyAgICAgICAgICAxNQorI2RlZmluZSBQVFJBQ0VfR0VURlBYUkVHUyAgICAgICAgIDE4CisjZGVmaW5lIFBUUkFDRV9TRVRGUFhSRUdTICAgICAgICAgMTkKKworLyogb25seSB1c2VmdWwgZm9yIGFjY2VzcyAzMmJpdCBwcm9ncmFtcyAqLworI2RlZmluZSBQVFJBQ0VfR0VUX1RIUkVBRF9BUkVBICAgIDI1CisjZGVmaW5lIFBUUkFDRV9TRVRfVEhSRUFEX0FSRUEgICAgMjYKKworI2RlZmluZSBQVFJBQ0VfQVJDSF9QUkNUTAkgIDMwCS8qIGFyY2hfcHJjdGwgZm9yIGNoaWxkICovCisKKyNpZiBkZWZpbmVkKF9fS0VSTkVMX18pICYmICFkZWZpbmVkKF9fQVNTRU1CTFlfXykgCisjZGVmaW5lIHVzZXJfbW9kZShyZWdzKSAoISEoKHJlZ3MpLT5jcyAmIDMpKQorI2RlZmluZSBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpICgocmVncyktPnJpcCkKK2V4dGVybiB1bnNpZ25lZCBsb25nIHByb2ZpbGVfcGMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwordm9pZCBzaWduYWxfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHZvaWQgX191c2VyICpmcmFtZSwgY2hhciAqd2hlcmUpOworCitlbnVtIHsKKyAgICAgICAgRUZfQ0YgICA9IDB4MDAwMDAwMDEsCisgICAgICAgIEVGX1BGICAgPSAweDAwMDAwMDA0LAorICAgICAgICBFRl9BRiAgID0gMHgwMDAwMDAxMCwKKyAgICAgICAgRUZfWkYgICA9IDB4MDAwMDAwNDAsCisgICAgICAgIEVGX1NGICAgPSAweDAwMDAwMDgwLAorICAgICAgICBFRl9URiAgID0gMHgwMDAwMDEwMCwKKyAgICAgICAgRUZfSUUgICA9IDB4MDAwMDAyMDAsCisgICAgICAgIEVGX0RGICAgPSAweDAwMDAwNDAwLAorICAgICAgICBFRl9PRiAgID0gMHgwMDAwMDgwMCwKKyAgICAgICAgRUZfSU9QTCA9IDB4MDAwMDMwMDAsCisgICAgICAgIEVGX0lPUExfUklORzAgPSAweDAwMDAwMDAwLAorICAgICAgICBFRl9JT1BMX1JJTkcxID0gMHgwMDAwMTAwMCwKKyAgICAgICAgRUZfSU9QTF9SSU5HMiA9IDB4MDAwMDIwMDAsCisgICAgICAgIEVGX05UICAgPSAweDAwMDA0MDAwLCAgIC8qIG5lc3RlZCB0YXNrICovCisgICAgICAgIEVGX1JGICAgPSAweDAwMDEwMDAwLCAgIC8qIHJlc3VtZSAqLworICAgICAgICBFRl9WTSAgID0gMHgwMDAyMDAwMCwgICAvKiB2aXJ0dWFsIG1vZGUgKi8KKyAgICAgICAgRUZfQUMgICA9IDB4MDAwNDAwMDAsICAgLyogYWxpZ25tZW50ICovCisgICAgICAgIEVGX1ZJRiAgPSAweDAwMDgwMDAwLCAgIC8qIHZpcnR1YWwgaW50ZXJydXB0ICovCisgICAgICAgIEVGX1ZJUCAgPSAweDAwMTAwMDAwLCAgIC8qIHZpcnR1YWwgaW50ZXJydXB0IHBlbmRpbmcgKi8KKyAgICAgICAgRUZfSUQgICA9IDB4MDAyMDAwMDAsICAgLyogaWQgKi8KK307CisKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9yZXNvdXJjZS5oIGIvaW5jbHVkZS9hc20teDg2XzY0L3Jlc291cmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQwYjQwNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9yZXNvdXJjZS5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfWDg2NjRfUkVTT1VSQ0VfSAorI2RlZmluZSBfWDg2NjRfUkVTT1VSQ0VfSAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcmVzb3VyY2UuaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvcnRjLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvcnRjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThlZDcxM2EKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvcnRjLmgKQEAgLTAsMCArMSwxMCBAQAorI2lmbmRlZiBfWDg2XzY0X1JUQ19ICisjZGVmaW5lIF9YODZfNjRfUlRDX0gKKworLyoKKyAqIHg4NiB1c2VzIHRoZSBkZWZhdWx0IGFjY2VzcyBtZXRob2RzIGZvciB0aGUgUlRDLgorICovCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9ydGMuaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvcndsb2NrLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvcndsb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE3OGE0YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9yd2xvY2suaApAQCAtMCwwICsxLDg2IEBACisvKiBpbmNsdWRlL2FzbS14ODZfNjQvcndsb2NrLmgKKyAqCisgKglIZWxwZXJzIHVzZWQgYnkgYm90aCBydyBzcGlubG9ja3MgYW5kIHJ3IHNlbWFwaG9yZXMuCisgKgorICoJQmFzZWQgaW4gcGFydCBvbiBjb2RlIGZyb20gc2VtYXBob3JlLmggYW5kCisgKglzcGlubG9jay5oIENvcHlyaWdodCAxOTk2IExpbnVzIFRvcnZhbGRzLgorICoKKyAqCUNvcHlyaWdodCAxOTk5IFJlZCBIYXQsIEluYy4KKyAqCUNvcHlyaWdodCAyMDAxLDIwMDIgU3VTRSBsYWJzIAorICoKKyAqCVdyaXR0ZW4gYnkgQmVuamFtaW4gTGFIYWlzZS4KKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICoJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKgkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisjaWZuZGVmIF9BU01fWDg2XzY0X1JXTE9DS19ICisjZGVmaW5lIF9BU01fWDg2XzY0X1JXTE9DS19ICisKKyNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KKworI2RlZmluZSBSV19MT0NLX0JJQVMJCSAweDAxMDAwMDAwCisjZGVmaW5lIFJXX0xPQ0tfQklBU19TVFIJIjB4MDEwMDAwMDAiCisKKyNkZWZpbmUgX19idWlsZF9yZWFkX2xvY2tfcHRyKHJ3LCBoZWxwZXIpICAgXAorCWFzbSB2b2xhdGlsZShMT0NLICJzdWJsICQxLCglMClcblx0IiBcCisJCSAgICAgImpzIDJmXG4iIFwKKwkJICAgICAiMTpcbiIgXAorCQkgICAgTE9DS19TRUNUSU9OX1NUQVJUKCIiKSBcCisJCSAgICAgIjI6XHRjYWxsICIgaGVscGVyICJcblx0IiBcCisJCSAgICAgImptcCAxYlxuIiBcCisJCSAgICBMT0NLX1NFQ1RJT05fRU5EIFwKKwkJICAgICA6OiJhIiAocncpIDogIm1lbW9yeSIpCisKKyNkZWZpbmUgX19idWlsZF9yZWFkX2xvY2tfY29uc3QocncsIGhlbHBlcikgICBcCisJYXNtIHZvbGF0aWxlKExPQ0sgInN1YmwgJDEsJTBcblx0IiBcCisJCSAgICAgImpzIDJmXG4iIFwKKwkJICAgICAiMTpcbiIgXAorCQkgICAgTE9DS19TRUNUSU9OX1NUQVJUKCIiKSBcCisJCSAgICAgIjI6XHRwdXNocSAlJXJheFxuXHQiIFwKKwkJICAgICAibGVhcSAlMCwlJXJheFxuXHQiIFwKKwkJICAgICAiY2FsbCAiIGhlbHBlciAiXG5cdCIgXAorCQkgICAgICJwb3BxICUlcmF4XG5cdCIgXAorCQkgICAgICJqbXAgMWJcbiIgXAorCQkgICAgTE9DS19TRUNUSU9OX0VORCBcCisJCSAgICAgOiI9bSIgKCooKHZvbGF0aWxlIGludCAqKXJ3KSk6OiJtZW1vcnkiKQorCisjZGVmaW5lIF9fYnVpbGRfcmVhZF9sb2NrKHJ3LCBoZWxwZXIpCWRvIHsgXAorCQkJCQkJaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKHJ3KSkgXAorCQkJCQkJCV9fYnVpbGRfcmVhZF9sb2NrX2NvbnN0KHJ3LCBoZWxwZXIpOyBcCisJCQkJCQllbHNlIFwKKwkJCQkJCQlfX2J1aWxkX3JlYWRfbG9ja19wdHIocncsIGhlbHBlcik7IFwKKwkJCQkJfSB3aGlsZSAoMCkKKworI2RlZmluZSBfX2J1aWxkX3dyaXRlX2xvY2tfcHRyKHJ3LCBoZWxwZXIpIFwKKwlhc20gdm9sYXRpbGUoTE9DSyAic3VibCAkIiBSV19MT0NLX0JJQVNfU1RSICIsKCUwKVxuXHQiIFwKKwkJICAgICAiam56IDJmXG4iIFwKKwkJICAgICAiMTpcbiIgXAorCQkgICAgIExPQ0tfU0VDVElPTl9TVEFSVCgiIikgXAorCQkgICAgICIyOlx0Y2FsbCAiIGhlbHBlciAiXG5cdCIgXAorCQkgICAgICJqbXAgMWJcbiIgXAorCQkgICAgIExPQ0tfU0VDVElPTl9FTkQgXAorCQkgICAgIDo6ImEiIChydykgOiAibWVtb3J5IikKKworI2RlZmluZSBfX2J1aWxkX3dyaXRlX2xvY2tfY29uc3QocncsIGhlbHBlcikgXAorCWFzbSB2b2xhdGlsZShMT0NLICJzdWJsICQiIFJXX0xPQ0tfQklBU19TVFIgIiwoJTApXG5cdCIgXAorCQkgICAgICJqbnogMmZcbiIgXAorCQkgICAgICIxOlxuIiBcCisJCSAgICBMT0NLX1NFQ1RJT05fU1RBUlQoIiIpIFwKKwkJICAgICAiMjpcdHB1c2hxICUlcmF4XG5cdCIgXAorCQkgICAgICJsZWFxICUwLCUlcmF4XG5cdCIgXAorCQkgICAgICJjYWxsICIgaGVscGVyICJcblx0IiBcCisJCSAgICAgInBvcHEgJSVyYXhcblx0IiBcCisJCSAgICAgImptcCAxYlxuIiBcCisJCSAgICBMT0NLX1NFQ1RJT05fRU5EIFwKKwkJICAgICA6Ij1tIiAoKigodm9sYXRpbGUgbG9uZyAqKXJ3KSk6OiJtZW1vcnkiKQorCisjZGVmaW5lIF9fYnVpbGRfd3JpdGVfbG9jayhydywgaGVscGVyKQlkbyB7IFwKKwkJCQkJCWlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChydykpIFwKKwkJCQkJCQlfX2J1aWxkX3dyaXRlX2xvY2tfY29uc3QocncsIGhlbHBlcik7IFwKKwkJCQkJCWVsc2UgXAorCQkJCQkJCV9fYnVpbGRfd3JpdGVfbG9ja19wdHIocncsIGhlbHBlcik7IFwKKwkJCQkJfSB3aGlsZSAoMCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvcndzZW0uaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9yd3NlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwMDIxNzUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvcndzZW0uaApAQCAtMCwwICsxLDI3OCBAQAorLyogcndzZW0uaDogUi9XIHNlbWFwaG9yZXMgaW1wbGVtZW50ZWQgdXNpbmcgWEFERC9DTVBYQ0hHIGZvciB4ODZfNjQrCisgKgorICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKS4KKyAqIFBvcnRlZCBieSBBbmRpIEtsZWVuIDxha0BzdXNlLmRlPiB0byB4ODYtNjQuCisgKgorICogRGVyaXZlZCBmcm9tIGFzbS1pMzg2L3NlbWFwaG9yZS5oIGFuZCBhc20taTM4Ni9yd3NlbS5oCisgKgorICoKKyAqIFRoZSBNU1cgb2YgdGhlIGNvdW50IGlzIHRoZSBuZWdhdGVkIG51bWJlciBvZiBhY3RpdmUgd3JpdGVycyBhbmQgd2FpdGluZworICogbG9ja2VycywgYW5kIHRoZSBMU1cgaXMgdGhlIHRvdGFsIG51bWJlciBvZiBhY3RpdmUgbG9ja3MKKyAqCisgKiBUaGUgbG9jayBjb3VudCBpcyBpbml0aWFsaXplZCB0byAwIChubyBhY3RpdmUgYW5kIG5vIHdhaXRpbmcgbG9ja2VycykuCisgKgorICogV2hlbiBhIHdyaXRlciBzdWJ0cmFjdHMgV1JJVEVfQklBUywgaXQnbGwgZ2V0IDB4ZmZmZjAwMDEgZm9yIHRoZSBjYXNlIG9mIGFuCisgKiB1bmNvbnRlbmRlZCBsb2NrLiBUaGlzIGNhbiBiZSBkZXRlcm1pbmVkIGJlY2F1c2UgWEFERCByZXR1cm5zIHRoZSBvbGQgdmFsdWUuCisgKiBSZWFkZXJzIGluY3JlbWVudCBieSAxIGFuZCBzZWUgYSBwb3NpdGl2ZSB2YWx1ZSB3aGVuIHVuY29udGVuZGVkLCBuZWdhdGl2ZQorICogaWYgdGhlcmUgYXJlIHdyaXRlcnMgKGFuZCBtYXliZSkgcmVhZGVycyB3YWl0aW5nIChpbiB3aGljaCBjYXNlIGl0IGdvZXMgdG8KKyAqIHNsZWVwKS4KKyAqCisgKiBUaGUgdmFsdWUgb2YgV0FJVElOR19CSUFTIHN1cHBvcnRzIHVwIHRvIDMyNzY2IHdhaXRpbmcgcHJvY2Vzc2VzLiBUaGlzIGNhbgorICogYmUgZXh0ZW5kZWQgdG8gNjU1MzQgYnkgbWFudWFsbHkgY2hlY2tpbmcgdGhlIHdob2xlIE1TVyByYXRoZXIgdGhhbiByZWx5aW5nCisgKiBvbiB0aGUgUyBmbGFnLgorICoKKyAqIFRoZSB2YWx1ZSBvZiBBQ1RJVkVfQklBUyBzdXBwb3J0cyB1cCB0byA2NTUzNSBhY3RpdmUgcHJvY2Vzc2VzLgorICoKKyAqIFRoaXMgc2hvdWxkIGJlIHRvdGFsbHkgZmFpciAtIGlmIGFueXRoaW5nIGlzIHdhaXRpbmcsIGEgcHJvY2VzcyB0aGF0IHdhbnRzIGEKKyAqIGxvY2sgd2lsbCBnbyB0byB0aGUgYmFjayBvZiB0aGUgcXVldWUuIFdoZW4gdGhlIGN1cnJlbnRseSBhY3RpdmUgbG9jayBpcworICogcmVsZWFzZWQsIGlmIHRoZXJlJ3MgYSB3cml0ZXIgYXQgdGhlIGZyb250IG9mIHRoZSBxdWV1ZSwgdGhlbiB0aGF0IGFuZCBvbmx5CisgKiB0aGF0IHdpbGwgYmUgd29rZW4gdXA7IGlmIHRoZXJlJ3MgYSBidW5jaCBvZiBjb25zZWN1dGl2ZSByZWFkZXJzIGF0IHRoZQorICogZnJvbnQsIHRoZW4gdGhleSdsbCBhbGwgYmUgd29rZW4gdXAsIGJ1dCBubyBvdGhlciByZWFkZXJzIHdpbGwgYmUuCisgKi8KKworI2lmbmRlZiBfWDg2NjRfUldTRU1fSAorI2RlZmluZSBfWDg2NjRfUldTRU1fSAorCisjaWZuZGVmIF9MSU5VWF9SV1NFTV9ICisjZXJyb3IgInBsZWFzZSBkb24ndCBpbmNsdWRlIGFzbS9yd3NlbS5oIGRpcmVjdGx5LCB1c2UgbGludXgvcndzZW0uaCBpbnN0ZWFkIgorI2VuZGlmCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKworc3RydWN0IHJ3c2VtX3dhaXRlcjsKKworZXh0ZXJuIHN0cnVjdCByd19zZW1hcGhvcmUgKnJ3c2VtX2Rvd25fcmVhZF9mYWlsZWQoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKTsKK2V4dGVybiBzdHJ1Y3Qgcndfc2VtYXBob3JlICpyd3NlbV9kb3duX3dyaXRlX2ZhaWxlZChzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pOworZXh0ZXJuIHN0cnVjdCByd19zZW1hcGhvcmUgKnJ3c2VtX3dha2Uoc3RydWN0IHJ3X3NlbWFwaG9yZSAqKTsKK2V4dGVybiBzdHJ1Y3Qgcndfc2VtYXBob3JlICpyd3NlbV9kb3duZ3JhZGVfd2FrZShzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pOworCisvKgorICogdGhlIHNlbWFwaG9yZSBkZWZpbml0aW9uCisgKi8KK3N0cnVjdCByd19zZW1hcGhvcmUgeworCXNpZ25lZCBpbnQJCWNvdW50OworI2RlZmluZSBSV1NFTV9VTkxPQ0tFRF9WQUxVRQkJMHgwMDAwMDAwMAorI2RlZmluZSBSV1NFTV9BQ1RJVkVfQklBUwkJMHgwMDAwMDAwMQorI2RlZmluZSBSV1NFTV9BQ1RJVkVfTUFTSwkJMHgwMDAwZmZmZgorI2RlZmluZSBSV1NFTV9XQUlUSU5HX0JJQVMJCSgtMHgwMDAxMDAwMCkKKyNkZWZpbmUgUldTRU1fQUNUSVZFX1JFQURfQklBUwkJUldTRU1fQUNUSVZFX0JJQVMKKyNkZWZpbmUgUldTRU1fQUNUSVZFX1dSSVRFX0JJQVMJCShSV1NFTV9XQUlUSU5HX0JJQVMgKyBSV1NFTV9BQ1RJVkVfQklBUykKKwlzcGlubG9ja190CQl3YWl0X2xvY2s7CisJc3RydWN0IGxpc3RfaGVhZAl3YWl0X2xpc3Q7CisjaWYgUldTRU1fREVCVUcKKwlpbnQJCQlkZWJ1ZzsKKyNlbmRpZgorfTsKKworLyoKKyAqIGluaXRpYWxpc2F0aW9uCisgKi8KKyNpZiBSV1NFTV9ERUJVRworI2RlZmluZSBfX1JXU0VNX0RFQlVHX0lOSVQgICAgICAsIDAKKyNlbHNlCisjZGVmaW5lIF9fUldTRU1fREVCVUdfSU5JVAkvKiAqLworI2VuZGlmCisKKyNkZWZpbmUgX19SV1NFTV9JTklUSUFMSVpFUihuYW1lKSBcCit7IFJXU0VNX1VOTE9DS0VEX1ZBTFVFLCBTUElOX0xPQ0tfVU5MT0NLRUQsIExJU1RfSEVBRF9JTklUKChuYW1lKS53YWl0X2xpc3QpIFwKKwlfX1JXU0VNX0RFQlVHX0lOSVQgfQorCisjZGVmaW5lIERFQ0xBUkVfUldTRU0obmFtZSkgXAorCXN0cnVjdCByd19zZW1hcGhvcmUgbmFtZSA9IF9fUldTRU1fSU5JVElBTElaRVIobmFtZSkKKworc3RhdGljIGlubGluZSB2b2lkIGluaXRfcndzZW0oc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQoreworCXNlbS0+Y291bnQgPSBSV1NFTV9VTkxPQ0tFRF9WQUxVRTsKKwlzcGluX2xvY2tfaW5pdCgmc2VtLT53YWl0X2xvY2spOworCUlOSVRfTElTVF9IRUFEKCZzZW0tPndhaXRfbGlzdCk7CisjaWYgUldTRU1fREVCVUcKKwlzZW0tPmRlYnVnID0gMDsKKyNlbmRpZgorfQorCisvKgorICogbG9jayBmb3IgcmVhZGluZworICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19kb3duX3JlYWQoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkiIyBiZWdpbm5pbmcgZG93bl9yZWFkXG5cdCIKK0xPQ0tfUFJFRklYCSIgIGluY2wgICAgICAoJSVyZGkpXG5cdCIgLyogYWRkcyAweDAwMDAwMDAxLCByZXR1cm5zIHRoZSBvbGQgdmFsdWUgKi8KKwkJIiAganMgICAgICAgIDJmXG5cdCIgLyoganVtcCBpZiB3ZSB3ZXJlbid0IGdyYW50ZWQgdGhlIGxvY2sgKi8KKwkJIjE6XG5cdCIKKwkJTE9DS19TRUNUSU9OX1NUQVJUKCIiKSBcCisJCSIyOlxuXHQiCisJCSIgIGNhbGwgICAgICByd3NlbV9kb3duX3JlYWRfZmFpbGVkX3RodW5rXG5cdCIKKwkJIiAgam1wICAgICAgIDFiXG4iCisJCUxPQ0tfU0VDVElPTl9FTkQgXAorCQkiIyBlbmRpbmcgZG93bl9yZWFkXG5cdCIKKwkJOiAiK20iKHNlbS0+Y291bnQpCisJCTogIkQiKHNlbSkKKwkJOiAibWVtb3J5IiwgImNjIik7Cit9CisKKworLyoKKyAqIHRyeWxvY2sgZm9yIHJlYWRpbmcgLS0gcmV0dXJucyAxIGlmIHN1Y2Nlc3NmdWwsIDAgaWYgY29udGVudGlvbgorICovCitzdGF0aWMgaW5saW5lIGludCBfX2Rvd25fcmVhZF90cnlsb2NrKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKK3sKKwlfX3MzMiByZXN1bHQsIHRtcDsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJIiMgYmVnaW5uaW5nIF9fZG93bl9yZWFkX3RyeWxvY2tcblx0IgorCQkiICBtb3ZsICAgICAgJTAsJTFcblx0IgorCQkiMTpcblx0IgorCQkiICBtb3ZsCSAgICAgJTEsJTJcblx0IgorCQkiICBhZGRsICAgICAgJTMsJTJcblx0IgorCQkiICBqbGUJICAgICAyZlxuXHQiCitMT0NLX1BSRUZJWAkiICBjbXB4Y2hnbCAgJTIsJTBcblx0IgorCQkiICBqbnoJICAgICAxYlxuXHQiCisJCSIyOlxuXHQiCisJCSIjIGVuZGluZyBfX2Rvd25fcmVhZF90cnlsb2NrXG5cdCIKKwkJOiAiK20iKHNlbS0+Y291bnQpLCAiPSZhIihyZXN1bHQpLCAiPSZyIih0bXApCisJCTogImkiKFJXU0VNX0FDVElWRV9SRUFEX0JJQVMpCisJCTogIm1lbW9yeSIsICJjYyIpOworCXJldHVybiByZXN1bHQ+PTAgPyAxIDogMDsKK30KKworCisvKgorICogbG9jayBmb3Igd3JpdGluZworICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19kb3duX3dyaXRlKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKK3sKKwlpbnQgdG1wOworCisJdG1wID0gUldTRU1fQUNUSVZFX1dSSVRFX0JJQVM7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSIjIGJlZ2lubmluZyBkb3duX3dyaXRlXG5cdCIKK0xPQ0tfUFJFRklYCSIgIHhhZGRsICAgICAgJTAsKCUlcmRpKVxuXHQiIC8qIHN1YnRyYWN0IDB4MDAwMGZmZmYsIHJldHVybnMgdGhlIG9sZCB2YWx1ZSAqLworCQkiICB0ZXN0bCAgICAgJTAsJTBcblx0IiAvKiB3YXMgdGhlIGNvdW50IDAgYmVmb3JlPyAqLworCQkiICBqbnogICAgICAgMmZcblx0IiAvKiBqdW1wIGlmIHdlIHdlcmVuJ3QgZ3JhbnRlZCB0aGUgbG9jayAqLworCQkiMTpcblx0IgorCQlMT0NLX1NFQ1RJT05fU1RBUlQoIiIpCisJCSIyOlxuXHQiCisJCSIgIGNhbGwgICAgICByd3NlbV9kb3duX3dyaXRlX2ZhaWxlZF90aHVua1xuXHQiCisJCSIgIGptcCAgICAgICAxYlxuIgorCQlMT0NLX1NFQ1RJT05fRU5ECisJCSIjIGVuZGluZyBkb3duX3dyaXRlIgorCQk6ICI9JnIiICh0bXApIAorCQk6ICIwIih0bXApLCAiRCIoc2VtKQorCQk6ICJtZW1vcnkiLCAiY2MiKTsKK30KKworLyoKKyAqIHRyeWxvY2sgZm9yIHdyaXRpbmcgLS0gcmV0dXJucyAxIGlmIHN1Y2Nlc3NmdWwsIDAgaWYgY29udGVudGlvbgorICovCitzdGF0aWMgaW5saW5lIGludCBfX2Rvd25fd3JpdGVfdHJ5bG9jayhzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCit7CisJc2lnbmVkIGxvbmcgcmV0ID0gY21weGNoZygmc2VtLT5jb3VudCwKKwkJCQkgIFJXU0VNX1VOTE9DS0VEX1ZBTFVFLCAKKwkJCQkgIFJXU0VNX0FDVElWRV9XUklURV9CSUFTKTsKKwlpZiAocmV0ID09IFJXU0VNX1VOTE9DS0VEX1ZBTFVFKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHVubG9jayBhZnRlciByZWFkaW5nCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3VwX3JlYWQoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQoreworCV9fczMyIHRtcCA9IC1SV1NFTV9BQ1RJVkVfUkVBRF9CSUFTOworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkiIyBiZWdpbm5pbmcgX191cF9yZWFkXG5cdCIKK0xPQ0tfUFJFRklYCSIgIHhhZGRsICAgICAgJVt0bXBdLCglJXJkaSlcblx0IiAvKiBzdWJ0cmFjdHMgMSwgcmV0dXJucyB0aGUgb2xkIHZhbHVlICovCisJCSIgIGpzICAgICAgICAyZlxuXHQiIC8qIGp1bXAgaWYgdGhlIGxvY2sgaXMgYmVpbmcgd2FpdGVkIHVwb24gKi8KKwkJIjE6XG5cdCIKKwkJTE9DS19TRUNUSU9OX1NUQVJUKCIiKQorCQkiMjpcblx0IgorCQkiICBkZWN3ICAgICAgJXdbdG1wXVxuXHQiIC8qIGRvIG5vdGhpbmcgaWYgc3RpbGwgb3V0c3RhbmRpbmcgYWN0aXZlIHJlYWRlcnMgKi8KKwkJIiAgam56ICAgICAgIDFiXG5cdCIKKwkJIiAgY2FsbCAgICAgIHJ3c2VtX3dha2VfdGh1bmtcblx0IgorCQkiICBqbXAgICAgICAgMWJcbiIKKwkJTE9DS19TRUNUSU9OX0VORAorCQkiIyBlbmRpbmcgX191cF9yZWFkXG4iCisJCTogIittIihzZW0tPmNvdW50KSwgW3RtcF0gIityIiAodG1wKQorCQk6ICJEIihzZW0pCisJCTogIm1lbW9yeSIsICJjYyIpOworfQorCisvKgorICogdW5sb2NrIGFmdGVyIHdyaXRpbmcKKyAqLworc3RhdGljIGlubGluZSB2b2lkIF9fdXBfd3JpdGUoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQoreworCXVuc2lnbmVkIHRtcDsgCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSIjIGJlZ2lubmluZyBfX3VwX3dyaXRlXG5cdCIKKwkJIiAgbW92bCAgICAgJVtiaWFzXSwlW3RtcF1cblx0IgorTE9DS19QUkVGSVgJIiAgeGFkZGwgICAgICVbdG1wXSwoJSVyZGkpXG5cdCIgLyogdHJpZXMgdG8gdHJhbnNpdGlvbiAweGZmZmYwMDAxIC0+IDB4MDAwMDAwMDAgKi8KKwkJIiAgam56ICAgICAgIDJmXG5cdCIgLyoganVtcCBpZiB0aGUgbG9jayBpcyBiZWluZyB3YWl0ZWQgdXBvbiAqLworCQkiMTpcblx0IgorCQlMT0NLX1NFQ1RJT05fU1RBUlQoIiIpCisJCSIyOlxuXHQiCisJCSIgIGRlY3cgICAgICAld1t0bXBdXG5cdCIgLyogZGlkIHRoZSBhY3RpdmUgY291bnQgcmVkdWNlIHRvIDA/ICovCisJCSIgIGpueiAgICAgICAxYlxuXHQiIC8qIGp1bXAgYmFjayBpZiBub3QgKi8KKwkJIiAgY2FsbCAgICAgIHJ3c2VtX3dha2VfdGh1bmtcblx0IgorCQkiICBqbXAgICAgICAgMWJcbiIKKwkJTE9DS19TRUNUSU9OX0VORAorCQkiIyBlbmRpbmcgX191cF93cml0ZVxuIgorCQk6ICIrbSIoc2VtLT5jb3VudCksIFt0bXBdICI9ciIgKHRtcCkKKwkJOiAiRCIoc2VtKSwgW2JpYXNdICJpIigtUldTRU1fQUNUSVZFX1dSSVRFX0JJQVMpCisJCTogIm1lbW9yeSIsICJjYyIpOworfQorCisvKgorICogZG93bmdyYWRlIHdyaXRlIGxvY2sgdG8gcmVhZCBsb2NrCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2Rvd25ncmFkZV93cml0ZShzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSIjIGJlZ2lubmluZyBfX2Rvd25ncmFkZV93cml0ZVxuXHQiCitMT0NLX1BSRUZJWAkiICBhZGRsICAgICAgJVtiaWFzXSwoJSVyZGkpXG5cdCIgLyogdHJhbnNpdGlvbnMgMHhaWlpaMDAwMSAtPiAweFlZWVkwMDAxICovCisJCSIgIGpzICAgICAgICAyZlxuXHQiIC8qIGp1bXAgaWYgdGhlIGxvY2sgaXMgYmVpbmcgd2FpdGVkIHVwb24gKi8KKwkJIjE6XG5cdCIKKwkJTE9DS19TRUNUSU9OX1NUQVJUKCIiKQorCQkiMjpcblx0IgorCQkiICBjYWxsCSAgICAgcndzZW1fZG93bmdyYWRlX3RodW5rXG4iCisJCSIgIGptcCAgICAgICAxYlxuIgorCQlMT0NLX1NFQ1RJT05fRU5ECisJCSIjIGVuZGluZyBfX2Rvd25ncmFkZV93cml0ZVxuIgorCQk6ICI9bSIoc2VtLT5jb3VudCkKKwkJOiAiRCIoc2VtKSwgW2JpYXNdICJpIigtUldTRU1fV0FJVElOR19CSUFTKSwgIm0iKHNlbS0+Y291bnQpCisJCTogIm1lbW9yeSIsICJjYyIpOworfQorCisvKgorICogaW1wbGVtZW50IGF0b21pYyBhZGQgZnVuY3Rpb25hbGl0eQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgcndzZW1fYXRvbWljX2FkZChpbnQgZGVsdGEsIHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKK0xPQ0tfUFJFRklYCSJhZGRsICUxLCUwIgorCQk6Ij1tIihzZW0tPmNvdW50KQorCQk6ImlyIihkZWx0YSksICJtIihzZW0tPmNvdW50KSk7Cit9CisKKy8qCisgKiBpbXBsZW1lbnQgZXhjaGFuZ2UgYW5kIGFkZCBmdW5jdGlvbmFsaXR5CisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHJ3c2VtX2F0b21pY191cGRhdGUoaW50IGRlbHRhLCBzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCit7CisJaW50IHRtcCA9IGRlbHRhOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCitMT0NLX1BSRUZJWAkieGFkZGwgJTAsKCUyKSIKKwkJOiAiPXIiKHRtcCksICI9bSIoc2VtLT5jb3VudCkKKwkJOiAiciIoc2VtKSwgIm0iKHNlbS0+Y291bnQpLCAiMCIgKHRtcCkKKwkJOiAibWVtb3J5Iik7CisKKwlyZXR1cm4gdG1wK2RlbHRhOworfQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9YODY2NF9SV1NFTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvc2NhdHRlcmxpc3QuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9zY2F0dGVybGlzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5ZDg5ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvc2NhdHRlcmxpc3QuaApAQCAtMCwwICsxLDIyIEBACisjaWZuZGVmIF9YODY2NF9TQ0FUVEVSTElTVF9ICisjZGVmaW5lIF9YODY2NF9TQ0FUVEVSTElTVF9ICisKK3N0cnVjdCBzY2F0dGVybGlzdCB7CisgICAgc3RydWN0IHBhZ2UJCSpwYWdlOworICAgIHVuc2lnbmVkIGludAlvZmZzZXQ7CisgICAgdW5zaWduZWQgaW50CWxlbmd0aDsKKyAgICBkbWFfYWRkcl90CQlkbWFfYWRkcmVzczsKKyAgICB1bnNpZ25lZCBpbnQgICAgICAgIGRtYV9sZW5ndGg7Cit9OworCisjZGVmaW5lIElTQV9ETUFfVEhSRVNIT0xEICgweDAwZmZmZmZmKQorCisvKiBUaGVzZSBtYWNyb3Mgc2hvdWxkIGJlIHVzZWQgYWZ0ZXIgYSBwY2lfbWFwX3NnIGNhbGwgaGFzIGJlZW4gZG9uZQorICogdG8gZ2V0IGJ1cyBhZGRyZXNzZXMgb2YgZWFjaCBvZiB0aGUgU0cgZW50cmllcyBhbmQgdGhlaXIgbGVuZ3Rocy4KKyAqIFlvdSBzaG91bGQgb25seSB3b3JrIHdpdGggdGhlIG51bWJlciBvZiBzZyBlbnRyaWVzIHBjaV9tYXBfc2cKKyAqIHJldHVybnMuCisgKi8KKyNkZWZpbmUgc2dfZG1hX2FkZHJlc3Moc2cpICAgICAoKHNnKS0+ZG1hX2FkZHJlc3MpCisjZGVmaW5lIHNnX2RtYV9sZW4oc2cpICAgICAgICAgKChzZyktPmRtYV9sZW5ndGgpCisKKyNlbmRpZiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9zZWNjb21wLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvc2VjY29tcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1M2FmNjUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvc2VjY29tcC5oCkBAIC0wLDAgKzEsMjQgQEAKKyNpZm5kZWYgX0FTTV9TRUNDT01QX0gKKworI2luY2x1ZGUgPGxpbnV4L3RocmVhZF9pbmZvLmg+CisKKyNpZmRlZiBUSUZfMzJCSVQKKyNlcnJvciAidW5leHBlY3RlZCBUSUZfMzJCSVQgb24geDg2XzY0IgorI2Vsc2UKKyNkZWZpbmUgVElGXzMyQklUIFRJRl9JQTMyCisjZW5kaWYKKworI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgorI2luY2x1ZGUgPGFzbS9pYTMyX3VuaXN0ZC5oPgorCisjZGVmaW5lIF9fTlJfc2VjY29tcF9yZWFkIF9fTlJfcmVhZAorI2RlZmluZSBfX05SX3NlY2NvbXBfd3JpdGUgX19OUl93cml0ZQorI2RlZmluZSBfX05SX3NlY2NvbXBfZXhpdCBfX05SX2V4aXQKKyNkZWZpbmUgX19OUl9zZWNjb21wX3NpZ3JldHVybiBfX05SX3J0X3NpZ3JldHVybgorCisjZGVmaW5lIF9fTlJfc2VjY29tcF9yZWFkXzMyIF9fTlJfaWEzMl9yZWFkCisjZGVmaW5lIF9fTlJfc2VjY29tcF93cml0ZV8zMiBfX05SX2lhMzJfd3JpdGUKKyNkZWZpbmUgX19OUl9zZWNjb21wX2V4aXRfMzIgX19OUl9pYTMyX2V4aXQKKyNkZWZpbmUgX19OUl9zZWNjb21wX3NpZ3JldHVybl8zMiBfX05SX2lhMzJfc2lncmV0dXJuCisKKyNlbmRpZiAvKiBfQVNNX1NFQ0NPTVBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L3NlY3Rpb25zLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvc2VjdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzQ2ZDlmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L3NlY3Rpb25zLmgKQEAgLTAsMCArMSw3IEBACisjaWZuZGVmIF9YODY2NF9TRUNUSU9OU19ICisjZGVmaW5lIF9YODY2NF9TRUNUSU9OU19ICisKKy8qIG5vdGhpbmcgdG8gc2VlLCBtb3ZlIGFsb25nICovCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2VjdGlvbnMuaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvc2VnbWVudC5oIGIvaW5jbHVkZS9hc20teDg2XzY0L3NlZ21lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGFkYWYxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L3NlZ21lbnQuaApAQCAtMCwwICsxLDQ2IEBACisjaWZuZGVmIF9BU01fU0VHTUVOVF9ICisjZGVmaW5lIF9BU01fU0VHTUVOVF9ICisKKyNpbmNsdWRlIDxhc20vY2FjaGUuaD4KKworI2RlZmluZSBfX0tFUk5FTF9DUwkweDEwCisjZGVmaW5lIF9fS0VSTkVMX0RTCTB4MTgKKworI2RlZmluZSBfX0tFUk5FTDMyX0NTICAgMHgzOAorCisvKiAKKyAqIHdlIGNhbm5vdCB1c2UgdGhlIHNhbWUgY29kZSBzZWdtZW50IGRlc2NyaXB0b3IgZm9yIHVzZXIgYW5kIGtlcm5lbAorICogLS0gbm90IGV2ZW4gaW4gdGhlIGxvbmcgZmxhdCBtb2RlLCBiZWNhdXNlIG9mIGRpZmZlcmVudCBEUEwgL2trZWlsIAorICogVGhlIHNlZ21lbnQgb2Zmc2V0IG5lZWRzIHRvIGNvbnRhaW4gYSBSUEwuIEdyci4gLUFLCisgKiBHRFQgbGF5b3V0IHRvIGdldCA2NGJpdCBzeXNjYWxsIHJpZ2h0IChzeXNyZXQgaGFyZGNvZGVzIGdkdCBvZmZzZXRzKSAKKyAqLworCisjZGVmaW5lIF9fVVNFUjMyX0NTICAgMHgyMyAgIC8qIDQqOCszICovIAorI2RlZmluZSBfX1VTRVJfRFMgICAgIDB4MmIgICAvKiA1KjgrMyAqLyAKKyNkZWZpbmUgX19VU0VSX0NTICAgICAweDMzICAgLyogNio4KzMgKi8gCisjZGVmaW5lIF9fVVNFUjMyX0RTCV9fVVNFUl9EUyAKKyNkZWZpbmUgX19LRVJORUwxNl9DUwkoR0RUX0VOVFJZX0tFUk5FTENTMTYgKiA4KQorI2RlZmluZSBfX0tFUk5FTF9DT01QQVQzMl9DUyAgIDB4OAorCisjZGVmaW5lIEdEVF9FTlRSWV9UTFMgMQorI2RlZmluZSBHRFRfRU5UUllfVFNTIDgJLyogbmVlZHMgdHdvIGVudHJpZXMgKi8KKyNkZWZpbmUgR0RUX0VOVFJZX0xEVCAxMCAvKiBuZWVkcyB0d28gZW50cmllcyAqLworI2RlZmluZSBHRFRfRU5UUllfVExTX01JTiAxMgorI2RlZmluZSBHRFRfRU5UUllfVExTX01BWCAxNAorI2RlZmluZSBHRFRfRU5UUllfS0VSTkVMQ1MxNiAxNQorCisjZGVmaW5lIEdEVF9FTlRSWV9UTFNfRU5UUklFUyAzCisKKy8qIFRMUyBpbmRleGVzIGZvciA2NGJpdCAtIGhhcmRjb2RlZCBpbiBhcmNoX3ByY3RsICovCisjZGVmaW5lIEZTX1RMUyAwCQorI2RlZmluZSBHU19UTFMgMQkKKworI2RlZmluZSBHU19UTFNfU0VMICgoR0RUX0VOVFJZX1RMU19NSU4rR1NfVExTKSo4ICsgMykKKyNkZWZpbmUgRlNfVExTX1NFTCAoKEdEVF9FTlRSWV9UTFNfTUlOK0ZTX1RMUykqOCArIDMpCisKKyNkZWZpbmUgSURUX0VOVFJJRVMgMjU2CisjZGVmaW5lIEdEVF9FTlRSSUVTIDE2CisjZGVmaW5lIEdEVF9TSVpFIChHRFRfRU5UUklFUyAqIDgpCisjZGVmaW5lIFRMU19TSVpFIChHRFRfRU5UUllfVExTX0VOVFJJRVMgKiA4KSAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvc2VtYXBob3JlLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvc2VtYXBob3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjMyNWUzOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9zZW1hcGhvcmUuaApAQCAtMCwwICsxLDE5NiBAQAorI2lmbmRlZiBfWDg2XzY0X1NFTUFQSE9SRV9ICisjZGVmaW5lIF9YODZfNjRfU0VNQVBIT1JFX0gKKworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKworI2lmZGVmIF9fS0VSTkVMX18KKworLyoKKyAqIFNNUC0gYW5kIGludGVycnVwdC1zYWZlIHNlbWFwaG9yZXMuLgorICoKKyAqIChDKSBDb3B5cmlnaHQgMTk5NiBMaW51cyBUb3J2YWxkcworICoKKyAqIE1vZGlmaWVkIDE5OTYtMTItMjMgYnkgRGF2ZSBHcm90aGUgPGRhdmVAZ2NvbS5jb20+IHRvIGZpeCBidWdzIGluCisgKiAgICAgICAgICAgICAgICAgICAgIHRoZSBvcmlnaW5hbCBjb2RlIGFuZCB0byBtYWtlIHNlbWFwaG9yZSB3YWl0cworICogICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHRpYmxlIHNvIHRoYXQgcHJvY2Vzc2VzIHdhaXRpbmcgb24KKyAqICAgICAgICAgICAgICAgICAgICAgc2VtYXBob3JlcyBjYW4gYmUga2lsbGVkLgorICogTW9kaWZpZWQgMTk5OS0wMi0xNCBieSBBbmRyZWEgQXJjYW5nZWxpLCBzcGxpdCB0aGUgc2NoZWQuYyBoZWxwZXIKKyAqCQkgICAgICAgZnVuY3Rpb25zIGluIGFzbS9zZW1wYWhvcmUtaGVscGVyLmggd2hpbGUgZml4aW5nIGEKKyAqCQkgICAgICAgcG90ZW50aWFsIGFuZCBzdWJ0bGUgcmFjZSBkaXNjb3ZlcmVkIGJ5IFVscmljaCBTY2htaWQKKyAqCQkgICAgICAgaW4gZG93bl9pbnRlcnJ1cHRpYmxlKCkuIFNpbmNlIEkgc3RhcnRlZCB0byBwbGF5IGhlcmUgSQorICoJCSAgICAgICBhbHNvIGltcGxlbWVudGVkIHRoZSBgdHJ5bG9jaycgc2VtYXBob3JlIG9wZXJhdGlvbi4KKyAqICAgICAgICAgIDE5OTktMDctMDIgQXJ0dXIgU2thd2luYSA8c2thd2luYUBnZW9jaXRpZXMuY29tPgorICogICAgICAgICAgICAgICAgICAgICBPcHRpbWl6ZWQgIjAoZWN4KSIgLT4gIihlY3gpIiAodGhlIGFzc2VtYmxlciBkb2VzIG5vdAorICogICAgICAgICAgICAgICAgICAgICBkbyB0aGlzKS4gQ2hhbmdlZCBjYWxsaW5nIHNlcXVlbmNlcyBmcm9tIHB1c2gvam1wIHRvCisgKiAgICAgICAgICAgICAgICAgICAgIHRyYWRpdGlvbmFsIGNhbGwvcmV0LgorICogTW9kaWZpZWQgMjAwMS0wMS0wMSBBbmRyZWFzIEZyYW5jayA8YWZyYW5ja0BnbXguZGU+CisgKgkJICAgICAgIFNvbWUgaGFja3MgdG8gZW5zdXJlIGNvbXBhdGliaWxpdHkgd2l0aCByZWNlbnQKKyAqCQkgICAgICAgR0NDIHNuYXBzaG90cywgdG8gYXZvaWQgc3RhY2sgY29ycnVwdGlvbiB3aGVuIGNvbXBpbGluZworICoJCSAgICAgICB3aXRoIC1mb21pdC1mcmFtZS1wb2ludGVyLiBJdCdzIG5vdCBzdXJlIGlmIHRoaXMgd2lsbAorICoJCSAgICAgICBiZSBmaXhlZCBpbiBHQ0MsIGFzIG91ciBwcmV2aW91cyBpbXBsZW1lbnRhdGlvbiB3YXMgYQorICoJCSAgICAgICBiaXQgZHViaW91cy4KKyAqCisgKiBJZiB5b3Ugd291bGQgbGlrZSB0byBzZWUgYW4gYW5hbHlzaXMgb2YgdGhpcyBpbXBsZW1lbnRhdGlvbiwgcGxlYXNlCisgKiBmdHAgdG8gZ2NvbS5jb20gYW5kIGRvd25sb2FkIHRoZSBmaWxlCisgKiAvcHViL2xpbnV4L3NyYy9zZW1hcGhvcmUvc2VtYXBob3JlLTIuMC4yNC50YXIuZ3ouCisgKgorICovCisKKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgPGFzbS9yd2xvY2suaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KKworc3RydWN0IHNlbWFwaG9yZSB7CisJYXRvbWljX3QgY291bnQ7CisJaW50IHNsZWVwZXJzOworCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7Cit9OworCisjZGVmaW5lIF9fU0VNQVBIT1JFX0lOSVRJQUxJWkVSKG5hbWUsIG4pCQkJCVwKK3sJCQkJCQkJCQlcCisJLmNvdW50CQk9IEFUT01JQ19JTklUKG4pLAkJCQlcCisJLnNsZWVwZXJzCT0gMCwJCQkJCQlcCisJLndhaXQJCT0gX19XQUlUX1FVRVVFX0hFQURfSU5JVElBTElaRVIoKG5hbWUpLndhaXQpCVwKK30KKworI2RlZmluZSBfX01VVEVYX0lOSVRJQUxJWkVSKG5hbWUpIFwKKwlfX1NFTUFQSE9SRV9JTklUSUFMSVpFUihuYW1lLDEpCisKKyNkZWZpbmUgX19ERUNMQVJFX1NFTUFQSE9SRV9HRU5FUklDKG5hbWUsY291bnQpIFwKKwlzdHJ1Y3Qgc2VtYXBob3JlIG5hbWUgPSBfX1NFTUFQSE9SRV9JTklUSUFMSVpFUihuYW1lLGNvdW50KQorCisjZGVmaW5lIERFQ0xBUkVfTVVURVgobmFtZSkgX19ERUNMQVJFX1NFTUFQSE9SRV9HRU5FUklDKG5hbWUsMSkKKyNkZWZpbmUgREVDTEFSRV9NVVRFWF9MT0NLRUQobmFtZSkgX19ERUNMQVJFX1NFTUFQSE9SRV9HRU5FUklDKG5hbWUsMCkKKworc3RhdGljIGlubGluZSB2b2lkIHNlbWFfaW5pdCAoc3RydWN0IHNlbWFwaG9yZSAqc2VtLCBpbnQgdmFsKQoreworLyoKKyAqCSpzZW0gPSAoc3RydWN0IHNlbWFwaG9yZSlfX1NFTUFQSE9SRV9JTklUSUFMSVpFUigoKnNlbSksdmFsKTsKKyAqCisgKiBpJ2QgcmF0aGVyIHVzZSB0aGUgbW9yZSBmbGV4aWJsZSBpbml0aWFsaXphdGlvbiBhYm92ZSwgYnV0IHNhZGx5CisgKiBHQ0MgMi43LjIuMyBlbWl0cyBhIGJvZ3VzIHdhcm5pbmcuIEVHQ1MgZG9lc24ndC4gT2ggd2VsbC4KKyAqLworCWF0b21pY19zZXQoJnNlbS0+Y291bnQsIHZhbCk7CisJc2VtLT5zbGVlcGVycyA9IDA7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmc2VtLT53YWl0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGluaXRfTVVURVggKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKK3sKKwlzZW1hX2luaXQoc2VtLCAxKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGluaXRfTVVURVhfTE9DS0VEIChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCit7CisJc2VtYV9pbml0KHNlbSwgMCk7Cit9CisKK2FzbWxpbmthZ2Ugdm9pZCBfX2Rvd25fZmFpbGVkKHZvaWQgLyogc3BlY2lhbCByZWdpc3RlciBjYWxsaW5nIGNvbnZlbnRpb24gKi8pOworYXNtbGlua2FnZSBpbnQgIF9fZG93bl9mYWlsZWRfaW50ZXJydXB0aWJsZSh2b2lkICAvKiBwYXJhbXMgaW4gcmVnaXN0ZXJzICovKTsKK2FzbWxpbmthZ2UgaW50ICBfX2Rvd25fZmFpbGVkX3RyeWxvY2sodm9pZCAgLyogcGFyYW1zIGluIHJlZ2lzdGVycyAqLyk7Cithc21saW5rYWdlIHZvaWQgX191cF93YWtldXAodm9pZCAvKiBzcGVjaWFsIHJlZ2lzdGVyIGNhbGxpbmcgY29udmVudGlvbiAqLyk7CisKK2FzbWxpbmthZ2Ugdm9pZCBfX2Rvd24oc3RydWN0IHNlbWFwaG9yZSAqIHNlbSk7Cithc21saW5rYWdlIGludCAgX19kb3duX2ludGVycnVwdGlibGUoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSk7Cithc21saW5rYWdlIGludCAgX19kb3duX3RyeWxvY2soc3RydWN0IHNlbWFwaG9yZSAqIHNlbSk7Cithc21saW5rYWdlIHZvaWQgX191cChzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKTsKKworLyoKKyAqIFRoaXMgaXMgdWdseSwgYnV0IHdlIHdhbnQgdGhlIGRlZmF1bHQgY2FzZSB0byBmYWxsIHRocm91Z2guCisgKiAiX19kb3duX2ZhaWxlZCIgaXMgYSBzcGVjaWFsIGFzbSBoYW5kbGVyIHRoYXQgY2FsbHMgdGhlIEMKKyAqIHJvdXRpbmUgdGhhdCBhY3R1YWxseSB3YWl0cy4gU2VlIGFyY2gveDg2XzY0L2tlcm5lbC9zZW1hcGhvcmUuYworICovCitzdGF0aWMgaW5saW5lIHZvaWQgZG93bihzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQoreworCW1pZ2h0X3NsZWVwKCk7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJIiMgYXRvbWljIGRvd24gb3BlcmF0aW9uXG5cdCIKKwkJTE9DSyAiZGVjbCAlMFxuXHQiICAgICAvKiAtLXNlbS0+Y291bnQgKi8KKwkJImpzIDJmXG4iCisJCSIxOlxuIgorCQlMT0NLX1NFQ1RJT05fU1RBUlQoIiIpCisJCSIyOlx0Y2FsbCBfX2Rvd25fZmFpbGVkXG5cdCIKKwkJImptcCAxYlxuIgorCQlMT0NLX1NFQ1RJT05fRU5ECisJCToiPW0iIChzZW0tPmNvdW50KQorCQk6IkQiIChzZW0pCisJCToibWVtb3J5Iik7Cit9CisKKy8qCisgKiBJbnRlcnJ1cHRpYmxlIHRyeSB0byBhY3F1aXJlIGEgc2VtYXBob3JlLiAgSWYgd2Ugb2J0YWluZWQKKyAqIGl0LCByZXR1cm4gemVyby4gIElmIHdlIHdlcmUgaW50ZXJydXB0ZWQsIHJldHVybnMgLUVJTlRSCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGRvd25faW50ZXJydXB0aWJsZShzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQoreworCWludCByZXN1bHQ7CisKKwltaWdodF9zbGVlcCgpOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSIjIGF0b21pYyBpbnRlcnJ1cHRpYmxlIGRvd24gb3BlcmF0aW9uXG5cdCIKKwkJTE9DSyAiZGVjbCAlMVxuXHQiICAgICAvKiAtLXNlbS0+Y291bnQgKi8KKwkJImpzIDJmXG5cdCIKKwkJInhvcmwgJTAsJTBcbiIKKwkJIjE6XG4iCisJCUxPQ0tfU0VDVElPTl9TVEFSVCgiIikKKwkJIjI6XHRjYWxsIF9fZG93bl9mYWlsZWRfaW50ZXJydXB0aWJsZVxuXHQiCisJCSJqbXAgMWJcbiIKKwkJTE9DS19TRUNUSU9OX0VORAorCQk6Ij1hIiAocmVzdWx0KSwgIj1tIiAoc2VtLT5jb3VudCkKKwkJOiJEIiAoc2VtKQorCQk6Im1lbW9yeSIpOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBOb24tYmxvY2tpbmdseSBhdHRlbXB0IHRvIGRvd24oKSBhIHNlbWFwaG9yZS4KKyAqIFJldHVybnMgemVybyBpZiB3ZSBhY3F1aXJlZCBpdAorICovCitzdGF0aWMgaW5saW5lIGludCBkb3duX3RyeWxvY2soc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKK3sKKwlpbnQgcmVzdWx0OworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSIjIGF0b21pYyBpbnRlcnJ1cHRpYmxlIGRvd24gb3BlcmF0aW9uXG5cdCIKKwkJTE9DSyAiZGVjbCAlMVxuXHQiICAgICAvKiAtLXNlbS0+Y291bnQgKi8KKwkJImpzIDJmXG5cdCIKKwkJInhvcmwgJTAsJTBcbiIKKwkJIjE6XG4iCisJCUxPQ0tfU0VDVElPTl9TVEFSVCgiIikKKwkJIjI6XHRjYWxsIF9fZG93bl9mYWlsZWRfdHJ5bG9ja1xuXHQiCisJCSJqbXAgMWJcbiIKKwkJTE9DS19TRUNUSU9OX0VORAorCQk6Ij1hIiAocmVzdWx0KSwgIj1tIiAoc2VtLT5jb3VudCkKKwkJOiJEIiAoc2VtKQorCQk6Im1lbW9yeSIsImNjIik7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIE5vdGUhIFRoaXMgaXMgc3VidGxlLiBXZSBqdW1wIHRvIHdha2UgcGVvcGxlIHVwIG9ubHkgaWYKKyAqIHRoZSBzZW1hcGhvcmUgd2FzIG5lZ2F0aXZlICg9PSBzb21lYm9keSB3YXMgd2FpdGluZyBvbiBpdCkuCisgKiBUaGUgZGVmYXVsdCBjYXNlIChubyBjb250ZW50aW9uKSB3aWxsIHJlc3VsdCBpbiBOTworICoganVtcHMgZm9yIGJvdGggZG93bigpIGFuZCB1cCgpLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgdXAoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJIiMgYXRvbWljIHVwIG9wZXJhdGlvblxuXHQiCisJCUxPQ0sgImluY2wgJTBcblx0IiAgICAgLyogKytzZW0tPmNvdW50ICovCisJCSJqbGUgMmZcbiIKKwkJIjE6XG4iCisJCUxPQ0tfU0VDVElPTl9TVEFSVCgiIikKKwkJIjI6XHRjYWxsIF9fdXBfd2FrZXVwXG5cdCIKKwkJImptcCAxYlxuIgorCQlMT0NLX1NFQ1RJT05fRU5ECisJCToiPW0iIChzZW0tPmNvdW50KQorCQk6IkQiIChzZW0pCisJCToibWVtb3J5Iik7Cit9CisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvc2VtYnVmLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvc2VtYnVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNiNTI5MgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9zZW1idWYuaApAQCAtMCwwICsxLDI1IEBACisjaWZuZGVmIF9YODZfNjRfU0VNQlVGX0gKKyNkZWZpbmUgX1g4Nl82NF9TRU1CVUZfSAorCisvKiAKKyAqIFRoZSBzZW1pZDY0X2RzIHN0cnVjdHVyZSBmb3IgeDg2XzY0IGFyY2hpdGVjdHVyZS4KKyAqIE5vdGUgZXh0cmEgcGFkZGluZyBiZWNhdXNlIHRoaXMgc3RydWN0dXJlIGlzIHBhc3NlZCBiYWNrIGFuZCBmb3J0aAorICogYmV0d2VlbiBrZXJuZWwgYW5kIHVzZXIgc3BhY2UuCisgKgorICogUGFkIHNwYWNlIGlzIGxlZnQgZm9yOgorICogLSA2NC1iaXQgdGltZV90IHRvIHNvbHZlIHkyMDM4IHByb2JsZW0KKyAqIC0gMiBtaXNjZWxsYW5lb3VzIDMyLWJpdCB2YWx1ZXMKKyAqLworCitzdHJ1Y3Qgc2VtaWQ2NF9kcyB7CisJc3RydWN0IGlwYzY0X3Blcm0gc2VtX3Blcm07CQkvKiBwZXJtaXNzaW9ucyAuLiBzZWUgaXBjLmggKi8KKwlfX2tlcm5lbF90aW1lX3QJc2VtX290aW1lOwkJLyogbGFzdCBzZW1vcCB0aW1lICovCisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDE7CisJX19rZXJuZWxfdGltZV90CXNlbV9jdGltZTsJCS8qIGxhc3QgY2hhbmdlIHRpbWUgKi8KKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkMjsKKwl1bnNpZ25lZCBsb25nCXNlbV9uc2VtczsJCS8qIG5vLiBvZiBzZW1hcGhvcmVzIGluIGFycmF5ICovCisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDM7CisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDQ7Cit9OworCisjZW5kaWYgLyogX1g4Nl82NF9TRU1CVUZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L3NlcmlhbC5oIGIvaW5jbHVkZS9hc20teDg2XzY0L3NlcmlhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiYWIyMzIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvc2VyaWFsLmgKQEAgLTAsMCArMSwxMzAgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS14ODZfNjQvc2VyaWFsLmgKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKy8qCisgKiBUaGlzIGFzc3VtZXMgeW91IGhhdmUgYSAxLjg0MzIgTUh6IGNsb2NrIGZvciB5b3VyIFVBUlQuCisgKgorICogSXQnZCBiZSBuaWNlIGlmIHNvbWVvbmUgYnVpbHQgYSBzZXJpYWwgY2FyZCB3aXRoIGEgMjQuNTc2IE1IegorICogY2xvY2ssIHNpbmNlIHRoZSAxNjU1MEEgaXMgY2FwYWJsZSBvZiBoYW5kbGluZyBhIHRvcCBzcGVlZCBvZiAxLjUKKyAqIG1lZ2FiaXRzL3NlY29uZDsgYnV0IHRoaXMgcmVxdWlyZXMgdGhlIGZhc3RlciBjbG9jay4KKyAqLworI2RlZmluZSBCQVNFX0JBVUQgKCAxODQzMjAwIC8gMTYgKQorCisvKiBTdGFuZGFyZCBDT00gZmxhZ3MgKGV4Y2VwdCBmb3IgQ09NNCwgYmVjYXVzZSBvZiB0aGUgODUxNCBwcm9ibGVtKSAqLworI2lmZGVmIENPTkZJR19TRVJJQUxfREVURUNUX0lSUQorI2RlZmluZSBTVERfQ09NX0ZMQUdTIChBU1lOQ19CT09UX0FVVE9DT05GIHwgQVNZTkNfU0tJUF9URVNUIHwgQVNZTkNfQVVUT19JUlEpCisjZGVmaW5lIFNURF9DT000X0ZMQUdTIChBU1lOQ19CT09UX0FVVE9DT05GIHwgQVNZTkNfQVVUT19JUlEpCisjZWxzZQorI2RlZmluZSBTVERfQ09NX0ZMQUdTIChBU1lOQ19CT09UX0FVVE9DT05GIHwgQVNZTkNfU0tJUF9URVNUKQorI2RlZmluZSBTVERfQ09NNF9GTEFHUyBBU1lOQ19CT09UX0FVVE9DT05GCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19TRVJJQUxfTUFOWV9QT1JUUworI2RlZmluZSBGT1VSUE9SVF9GTEFHUyBBU1lOQ19GT1VSUE9SVAorI2RlZmluZSBBQ0NFTlRfRkxBR1MgMAorI2RlZmluZSBCT0NBX0ZMQUdTIDAKKyNkZWZpbmUgSFVCNl9GTEFHUyAwCisjZW5kaWYKKworI2RlZmluZSBNQ0FfQ09NX0ZMQUdTCShTVERfQ09NX0ZMQUdTfEFTWU5DX0JPT1RfT05MWU1DQSkKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgZGVmaW5lIHRoZSBhY2Nlc3MgbWV0aG9kcyBmb3IgdGhlIEhVQjYgY2FyZC4gQWxsCisgKiBhY2Nlc3MgaXMgdGhyb3VnaCB0d28gcG9ydHMgZm9yIGFsbCAyNCBwb3NzaWJsZSBjaGlwcy4gVGhlIGNhcmQgaXMKKyAqIHNlbGVjdGVkIHRocm91Z2ggdGhlIGhpZ2ggMiBiaXRzLCB0aGUgcG9ydCBvbiB0aGF0IGNhcmQgd2l0aCB0aGUKKyAqICJtaWRkbGUiIDMgYml0cywgYW5kIHRoZSByZWdpc3RlciBvbiB0aGF0IHBvcnQgd2l0aCB0aGUgYm90dG9tCisgKiAzIGJpdHMuCisgKgorICogV2hpbGUgdGhlIGFjY2VzcyBwb3J0IGFuZCBpbnRlcnJ1cHQgaXMgY29uZmlndXJhYmxlLCB0aGUgZGVmYXVsdAorICogcG9ydCBsb2NhdGlvbnMgYXJlIDB4MzAyIGZvciB0aGUgcG9ydCBjb250cm9sIHJlZ2lzdGVyLCBhbmQgMHgzMDMKKyAqIGZvciB0aGUgZGF0YSByZWFkL3dyaXRlIHJlZ2lzdGVyLiBOb3JtYWxseSwgdGhlIGludGVycnVwdCBpcyBhdCBpcnEzCisgKiBidXQgY2FuIGJlIGFueXRoaW5nIGZyb20gMyB0byA3IGluY2x1c2l2ZS4gTm90ZSB0aGF0IHVzaW5nIDMgd2lsbAorICogcmVxdWlyZSBkaXNhYmxpbmcgY29tMi4KKyAqLworCisjZGVmaW5lIENfUChjYXJkLHBvcnQpICgoKGNhcmQpPDw2fChwb3J0KTw8MykgKyAxKQorCisjZGVmaW5lIFNURF9TRVJJQUxfUE9SVF9ERUZOUwkJCVwKKwkvKiBVQVJUIENMSyAgIFBPUlQgSVJRICAgICBGTEFHUyAgICAgICAgKi8JCQlcCisJeyAwLCBCQVNFX0JBVUQsIDB4M0Y4LCA0LCBTVERfQ09NX0ZMQUdTIH0sCS8qIHR0eVMwICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgyRjgsIDMsIFNURF9DT01fRkxBR1MgfSwJLyogdHR5UzEgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDNFOCwgNCwgU1REX0NPTV9GTEFHUyB9LAkvKiB0dHlTMiAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MkU4LCAzLCBTVERfQ09NNF9GTEFHUyB9LAkvKiB0dHlTMyAqLworCisKKyNpZmRlZiBDT05GSUdfU0VSSUFMX01BTllfUE9SVFMKKyNkZWZpbmUgRVhUUkFfU0VSSUFMX1BPUlRfREVGTlMJCQlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MUEwLCA5LCBGT1VSUE9SVF9GTEFHUyB9LCAJLyogdHR5UzQgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDFBOCwgOSwgRk9VUlBPUlRfRkxBR1MgfSwJLyogdHR5UzUgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDFCMCwgOSwgRk9VUlBPUlRfRkxBR1MgfSwJLyogdHR5UzYgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDFCOCwgOSwgRk9VUlBPUlRfRkxBR1MgfSwJLyogdHR5UzcgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDJBMCwgNSwgRk9VUlBPUlRfRkxBR1MgfSwJLyogdHR5UzggKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDJBOCwgNSwgRk9VUlBPUlRfRkxBR1MgfSwJLyogdHR5UzkgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDJCMCwgNSwgRk9VUlBPUlRfRkxBR1MgfSwJLyogdHR5UzEwICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgyQjgsIDUsIEZPVVJQT1JUX0ZMQUdTIH0sCS8qIHR0eVMxMSAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MzMwLCA0LCBBQ0NFTlRfRkxBR1MgfSwJLyogdHR5UzEyICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgzMzgsIDQsIEFDQ0VOVF9GTEFHUyB9LAkvKiB0dHlTMTMgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDAwMCwgMCwgMCB9LAkvKiB0dHlTMTQgKHNwYXJlKSAqLwkJXAorCXsgMCwgQkFTRV9CQVVELCAweDAwMCwgMCwgMCB9LAkvKiB0dHlTMTUgKHNwYXJlKSAqLwkJXAorCXsgMCwgQkFTRV9CQVVELCAweDEwMCwgMTIsIEJPQ0FfRkxBR1MgfSwJLyogdHR5UzE2ICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgxMDgsIDEyLCBCT0NBX0ZMQUdTIH0sCS8qIHR0eVMxNyAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MTEwLCAxMiwgQk9DQV9GTEFHUyB9LAkvKiB0dHlTMTggKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDExOCwgMTIsIEJPQ0FfRkxBR1MgfSwJLyogdHR5UzE5ICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgxMjAsIDEyLCBCT0NBX0ZMQUdTIH0sCS8qIHR0eVMyMCAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MTI4LCAxMiwgQk9DQV9GTEFHUyB9LAkvKiB0dHlTMjEgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDEzMCwgMTIsIEJPQ0FfRkxBR1MgfSwJLyogdHR5UzIyICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgxMzgsIDEyLCBCT0NBX0ZMQUdTIH0sCS8qIHR0eVMyMyAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MTQwLCAxMiwgQk9DQV9GTEFHUyB9LAkvKiB0dHlTMjQgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDE0OCwgMTIsIEJPQ0FfRkxBR1MgfSwJLyogdHR5UzI1ICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgxNTAsIDEyLCBCT0NBX0ZMQUdTIH0sCS8qIHR0eVMyNiAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MTU4LCAxMiwgQk9DQV9GTEFHUyB9LAkvKiB0dHlTMjcgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDE2MCwgMTIsIEJPQ0FfRkxBR1MgfSwJLyogdHR5UzI4ICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgxNjgsIDEyLCBCT0NBX0ZMQUdTIH0sCS8qIHR0eVMyOSAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MTcwLCAxMiwgQk9DQV9GTEFHUyB9LAkvKiB0dHlTMzAgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDE3OCwgMTIsIEJPQ0FfRkxBR1MgfSwJLyogdHR5UzMxICovCisjZWxzZQorI2RlZmluZSBFWFRSQV9TRVJJQUxfUE9SVF9ERUZOUworI2VuZGlmCisKKy8qIFlvdSBjYW4gaGF2ZSB1cCB0byBmb3VyIEhVQjYncyBpbiB0aGUgc3lzdGVtLCBidXQgSSd2ZSBvbmx5CisgKiBpbmNsdWRlZCB0d28gY2FyZHMgaGVyZSBmb3IgYSB0b3RhbCBvZiB0d2VsdmUgcG9ydHMuCisgKi8KKyNpZiAoZGVmaW5lZChDT05GSUdfSFVCNikgJiYgZGVmaW5lZChDT05GSUdfU0VSSUFMX01BTllfUE9SVFMpKQorI2RlZmluZSBIVUI2X1NFUklBTF9QT1JUX0RGTlMJCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgzMDIsIDMsIEhVQjZfRkxBR1MsIENfUCgwLDApIH0sICAvKiB0dHlTMzIgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDMwMiwgMywgSFVCNl9GTEFHUywgQ19QKDAsMSkgfSwgIC8qIHR0eVMzMyAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MzAyLCAzLCBIVUI2X0ZMQUdTLCBDX1AoMCwyKSB9LCAgLyogdHR5UzM0ICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgzMDIsIDMsIEhVQjZfRkxBR1MsIENfUCgwLDMpIH0sICAvKiB0dHlTMzUgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDMwMiwgMywgSFVCNl9GTEFHUywgQ19QKDAsNCkgfSwgIC8qIHR0eVMzNiAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MzAyLCAzLCBIVUI2X0ZMQUdTLCBDX1AoMCw1KSB9LCAgLyogdHR5UzM3ICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgzMDIsIDMsIEhVQjZfRkxBR1MsIENfUCgxLDApIH0sICAvKiB0dHlTMzggKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDMwMiwgMywgSFVCNl9GTEFHUywgQ19QKDEsMSkgfSwgIC8qIHR0eVMzOSAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MzAyLCAzLCBIVUI2X0ZMQUdTLCBDX1AoMSwyKSB9LCAgLyogdHR5UzQwICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgzMDIsIDMsIEhVQjZfRkxBR1MsIENfUCgxLDMpIH0sICAvKiB0dHlTNDEgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDMwMiwgMywgSFVCNl9GTEFHUywgQ19QKDEsNCkgfSwgIC8qIHR0eVM0MiAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MzAyLCAzLCBIVUI2X0ZMQUdTLCBDX1AoMSw1KSB9LCAgLyogdHR5UzQzICovCisjZWxzZQorI2RlZmluZSBIVUI2X1NFUklBTF9QT1JUX0RGTlMKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01DQQorI2RlZmluZSBNQ0FfU0VSSUFMX1BPUlRfREZOUwkJCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgzMjIwLCAzLCBNQ0FfQ09NX0ZMQUdTIH0sCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgzMjI4LCAzLCBNQ0FfQ09NX0ZMQUdTIH0sCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHg0MjIwLCAzLCBNQ0FfQ09NX0ZMQUdTIH0sCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHg0MjI4LCAzLCBNQ0FfQ09NX0ZMQUdTIH0sCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHg1MjIwLCAzLCBNQ0FfQ09NX0ZMQUdTIH0sCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHg1MjI4LCAzLCBNQ0FfQ09NX0ZMQUdTIH0sCisjZWxzZQorI2RlZmluZSBNQ0FfU0VSSUFMX1BPUlRfREZOUworI2VuZGlmCisKKyNkZWZpbmUgU0VSSUFMX1BPUlRfREZOUwkJXAorCVNURF9TRVJJQUxfUE9SVF9ERUZOUwkJXAorCUVYVFJBX1NFUklBTF9QT1JUX0RFRk5TCQlcCisJSFVCNl9TRVJJQUxfUE9SVF9ERk5TCQlcCisJTUNBX1NFUklBTF9QT1JUX0RGTlMKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L3NldHVwLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvc2V0dXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODVkNGUzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L3NldHVwLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF94ODY2NF9TRVRVUF9ICisjZGVmaW5lIF94ODY2NF9TRVRVUF9ICisKKyNkZWZpbmUgQ09NTUFORF9MSU5FX1NJWkUJMjU2CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L3NobWJ1Zi5oIGIvaW5jbHVkZS9hc20teDg2XzY0L3NobWJ1Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhNmQ2ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvc2htYnVmLmgKQEAgLTAsMCArMSwzOCBAQAorI2lmbmRlZiBfWDg2NjRfU0hNQlVGX0gKKyNkZWZpbmUgX1g4NjY0X1NITUJVRl9ICisKKy8qIAorICogVGhlIHNobWlkNjRfZHMgc3RydWN0dXJlIGZvciB4ODY2NCBhcmNoaXRlY3R1cmUuCisgKiBOb3RlIGV4dHJhIHBhZGRpbmcgYmVjYXVzZSB0aGlzIHN0cnVjdHVyZSBpcyBwYXNzZWQgYmFjayBhbmQgZm9ydGgKKyAqIGJldHdlZW4ga2VybmVsIGFuZCB1c2VyIHNwYWNlLgorICoKKyAqIFBhZCBzcGFjZSBpcyBsZWZ0IGZvcjoKKyAqIC0gMiBtaXNjZWxsYW5lb3VzIDY0LWJpdCB2YWx1ZXMKKyAqLworCitzdHJ1Y3Qgc2htaWQ2NF9kcyB7CisJc3RydWN0IGlwYzY0X3Blcm0Jc2htX3Blcm07CS8qIG9wZXJhdGlvbiBwZXJtcyAqLworCXNpemVfdAkJCXNobV9zZWdzejsJLyogc2l6ZSBvZiBzZWdtZW50IChieXRlcykgKi8KKwlfX2tlcm5lbF90aW1lX3QJCXNobV9hdGltZTsJLyogbGFzdCBhdHRhY2ggdGltZSAqLworCV9fa2VybmVsX3RpbWVfdAkJc2htX2R0aW1lOwkvKiBsYXN0IGRldGFjaCB0aW1lICovCisJX19rZXJuZWxfdGltZV90CQlzaG1fY3RpbWU7CS8qIGxhc3QgY2hhbmdlIHRpbWUgKi8KKwlfX2tlcm5lbF9waWRfdAkJc2htX2NwaWQ7CS8qIHBpZCBvZiBjcmVhdG9yICovCisJX19rZXJuZWxfcGlkX3QJCXNobV9scGlkOwkvKiBwaWQgb2YgbGFzdCBvcGVyYXRvciAqLworCXVuc2lnbmVkIGxvbmcJCXNobV9uYXR0Y2g7CS8qIG5vLiBvZiBjdXJyZW50IGF0dGFjaGVzICovCisJdW5zaWduZWQgbG9uZwkJX191bnVzZWQ0OworCXVuc2lnbmVkIGxvbmcJCV9fdW51c2VkNTsKK307CisKK3N0cnVjdCBzaG1pbmZvNjQgeworCXVuc2lnbmVkIGxvbmcJc2htbWF4OworCXVuc2lnbmVkIGxvbmcJc2htbWluOworCXVuc2lnbmVkIGxvbmcJc2htbW5pOworCXVuc2lnbmVkIGxvbmcJc2htc2VnOworCXVuc2lnbmVkIGxvbmcJc2htYWxsOworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQxOworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQyOworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQzOworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQ0OworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvc2htcGFyYW0uaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9zaG1wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3MDIxNjIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvc2htcGFyYW0uaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX0FTTVg4NjY0X1NITVBBUkFNX0gKKyNkZWZpbmUgX0FTTVg4NjY0X1NITVBBUkFNX0gKKworI2RlZmluZQlTSE1MQkEgUEFHRV9TSVpFCQkgLyogYXR0YWNoIGFkZHIgYSBtdWx0aXBsZSBvZiB0aGlzICovCisKKyNlbmRpZiAvKiBfQVNNWDg2NjRfU0hNUEFSQU1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L3NpZ2NvbnRleHQuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9zaWdjb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRlNDAyMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9zaWdjb250ZXh0LmgKQEAgLTAsMCArMSw1NSBAQAorI2lmbmRlZiBfQVNNX1g4Nl82NF9TSUdDT05URVhUX0gKKyNkZWZpbmUgX0FTTV9YODZfNjRfU0lHQ09OVEVYVF9ICisKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorCisvKiBGWFNBVkUgZnJhbWUgKi8KKy8qIE5vdGU6IHJlc2VydmVkMS8yIG1heSBzb21lZGF5IGNvbnRhaW4gdmFsdWFibGUgZGF0YS4gQWx3YXlzIHNhdmUvcmVzdG9yZQorICAgdGhlbSB3aGVuIHlvdSBjaGFuZ2Ugc2lnbmFsIGZyYW1lcy4gKi8KK3N0cnVjdCBfZnBzdGF0ZSB7CisJX191MTYJY3dkOworCV9fdTE2CXN3ZDsKKwlfX3UxNgl0d2Q7CS8qIE5vdGUgdGhpcyBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIDMyYml0L3g4Ny9GU0FWRSB0d2QgKi8KKwlfX3UxNglmb3A7CisJX191NjQJcmlwOworCV9fdTY0CXJkcDsgCisJX191MzIJbXhjc3I7CisJX191MzIJbXhjc3JfbWFzazsKKwlfX3UzMglzdF9zcGFjZVszMl07CS8qIDgqMTYgYnl0ZXMgZm9yIGVhY2ggRlAtcmVnICovCisJX191MzIJeG1tX3NwYWNlWzY0XTsJLyogMTYqMTYgYnl0ZXMgZm9yIGVhY2ggWE1NLXJlZyAgKi8KKwlfX3UzMglyZXNlcnZlZDJbMjRdOworfTsKKworc3RydWN0IHNpZ2NvbnRleHQgeyAKKwl1bnNpZ25lZCBsb25nIHI4OworCXVuc2lnbmVkIGxvbmcgcjk7CisJdW5zaWduZWQgbG9uZyByMTA7CisJdW5zaWduZWQgbG9uZyByMTE7CisJdW5zaWduZWQgbG9uZyByMTI7CisJdW5zaWduZWQgbG9uZyByMTM7CisJdW5zaWduZWQgbG9uZyByMTQ7CisJdW5zaWduZWQgbG9uZyByMTU7CisJdW5zaWduZWQgbG9uZyByZGk7CisJdW5zaWduZWQgbG9uZyByc2k7CisJdW5zaWduZWQgbG9uZyByYnA7CisJdW5zaWduZWQgbG9uZyByYng7CisJdW5zaWduZWQgbG9uZyByZHg7CisJdW5zaWduZWQgbG9uZyByYXg7CisJdW5zaWduZWQgbG9uZyByY3g7CisJdW5zaWduZWQgbG9uZyByc3A7CisJdW5zaWduZWQgbG9uZyByaXA7CisJdW5zaWduZWQgbG9uZyBlZmxhZ3M7CQkvKiBSRkxBR1MgKi8KKwl1bnNpZ25lZCBzaG9ydCBjczsKKwl1bnNpZ25lZCBzaG9ydCBnczsKKwl1bnNpZ25lZCBzaG9ydCBmczsKKwl1bnNpZ25lZCBzaG9ydCBfX3BhZDA7IAorCXVuc2lnbmVkIGxvbmcgZXJyOworCXVuc2lnbmVkIGxvbmcgdHJhcG5vOworCXVuc2lnbmVkIGxvbmcgb2xkbWFzazsKKwl1bnNpZ25lZCBsb25nIGNyMjsKKwlzdHJ1Y3QgX2Zwc3RhdGUgX191c2VyICpmcHN0YXRlOwkvKiB6ZXJvIHdoZW4gbm8gRlBVIGNvbnRleHQgKi8KKwl1bnNpZ25lZCBsb25nIHJlc2VydmVkMVs4XTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L3NpZ2NvbnRleHQzMi5oIGIvaW5jbHVkZS9hc20teDg2XzY0L3NpZ2NvbnRleHQzMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkNjU3MDMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvc2lnY29udGV4dDMyLmgKQEAgLTAsMCArMSw3MSBAQAorI2lmbmRlZiBfU0lHQ09OVEVYVDMyX0gKKyNkZWZpbmUgX1NJR0NPTlRFWFQzMl9IIDEKKworLyogc2lnbmFsIGNvbnRleHQgZm9yIDMyYml0IHByb2dyYW1zLiAqLworCisjZGVmaW5lIFg4Nl9GWFNSX01BR0lDCQkweDAwMDAKKworc3RydWN0IF9mcHJlZyB7CisJdW5zaWduZWQgc2hvcnQgc2lnbmlmaWNhbmRbNF07CisJdW5zaWduZWQgc2hvcnQgZXhwb25lbnQ7Cit9OworCitzdHJ1Y3QgX2ZweHJlZyB7CisJdW5zaWduZWQgc2hvcnQgc2lnbmlmaWNhbmRbNF07CisJdW5zaWduZWQgc2hvcnQgZXhwb25lbnQ7CisJdW5zaWduZWQgc2hvcnQgcGFkZGluZ1szXTsKK307CisKK3N0cnVjdCBfeG1tcmVnIHsKKwlfX3UzMgllbGVtZW50WzRdOworfTsKKworLyogRlNBVkUgZnJhbWUgd2l0aCBleHRlbnNpb25zICovCitzdHJ1Y3QgX2Zwc3RhdGVfaWEzMiB7CisJLyogUmVndWxhciBGUFUgZW52aXJvbm1lbnQgKi8KKwlfX3UzMiAJY3c7CisJX191MzIJc3c7CisJX191MzIJdGFnOwkvKiBub3QgY29tcGF0aWJsZSB0byA2NGJpdCB0d2QgKi8KKwlfX3UzMglpcG9mZjsJCQkKKwlfX3UzMgljc3NlbDsKKwlfX3UzMglkYXRhb2ZmOworCV9fdTMyCWRhdGFzZWw7CisJc3RydWN0IF9mcHJlZwlfc3RbOF07CisJdW5zaWduZWQgc2hvcnQJc3RhdHVzOworCXVuc2lnbmVkIHNob3J0CW1hZ2ljOwkJLyogMHhmZmZmID0gcmVndWxhciBGUFUgZGF0YSBvbmx5ICovCisKKwkvKiBGWFNSIEZQVSBlbnZpcm9ubWVudCAqLworCV9fdTMyCV9meHNyX2Vudls2XTsKKwlfX3UzMglteGNzcjsKKwlfX3UzMglyZXNlcnZlZDsKKwlzdHJ1Y3QgX2ZweHJlZwlfZnhzcl9zdFs4XTsKKwlzdHJ1Y3QgX3htbXJlZwlfeG1tWzhdOwkvKiBJdCdzIGFjdHVhbGx5IDE2ICovIAorCV9fdTMyCXBhZGRpbmdbNTZdOworfTsKKworc3RydWN0IHNpZ2NvbnRleHRfaWEzMiB7CisgICAgICAgdW5zaWduZWQgc2hvcnQgZ3MsIF9fZ3NoOworICAgICAgIHVuc2lnbmVkIHNob3J0IGZzLCBfX2ZzaDsKKyAgICAgICB1bnNpZ25lZCBzaG9ydCBlcywgX19lc2g7CisgICAgICAgdW5zaWduZWQgc2hvcnQgZHMsIF9fZHNoOworICAgICAgIHVuc2lnbmVkIGludCBlZGk7CisgICAgICAgdW5zaWduZWQgaW50IGVzaTsKKyAgICAgICB1bnNpZ25lZCBpbnQgZWJwOworICAgICAgIHVuc2lnbmVkIGludCBlc3A7CisgICAgICAgdW5zaWduZWQgaW50IGVieDsKKyAgICAgICB1bnNpZ25lZCBpbnQgZWR4OworICAgICAgIHVuc2lnbmVkIGludCBlY3g7CisgICAgICAgdW5zaWduZWQgaW50IGVheDsKKyAgICAgICB1bnNpZ25lZCBpbnQgdHJhcG5vOworICAgICAgIHVuc2lnbmVkIGludCBlcnI7CisgICAgICAgdW5zaWduZWQgaW50IGVpcDsKKyAgICAgICB1bnNpZ25lZCBzaG9ydCBjcywgX19jc2g7CisgICAgICAgdW5zaWduZWQgaW50IGVmbGFnczsKKyAgICAgICB1bnNpZ25lZCBpbnQgZXNwX2F0X3NpZ25hbDsKKyAgICAgICB1bnNpZ25lZCBzaG9ydCBzcywgX19zc2g7CisgICAgICAgdW5zaWduZWQgaW50IGZwc3RhdGU7CQkvKiByZWFsbHkgKHN0cnVjdCBfZnBzdGF0ZV9pYTMyICopICovCisgICAgICAgdW5zaWduZWQgaW50IG9sZG1hc2s7CisgICAgICAgdW5zaWduZWQgaW50IGNyMjsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L3NpZ2luZm8uaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9zaWdpbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JjMTU5OAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9zaWdpbmZvLmgKQEAgLTAsMCArMSwxMCBAQAorI2lmbmRlZiBfWDg2NjRfU0lHSU5GT19ICisjZGVmaW5lIF9YODY2NF9TSUdJTkZPX0gKKworI2RlZmluZSBfX0FSQ0hfU0lfUFJFQU1CTEVfU0laRQkoNCAqIHNpemVvZihpbnQpKQorCisjZGVmaW5lIFNJR0VWX1BBRF9TSVpFICgoU0lHRVZfTUFYX1NJWkUvc2l6ZW9mKGludCkpIC0gNCkKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NpZ2luZm8uaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvc2lnbmFsLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvc2lnbmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQzYTIwZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9zaWduYWwuaApAQCAtMCwwICsxLDIxMyBAQAorI2lmbmRlZiBfQVNNeDg2NjRfU0lHTkFMX0gKKyNkZWZpbmUgX0FTTXg4NjY0X1NJR05BTF9ICisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorCisvKiBBdm9pZCB0b28gbWFueSBoZWFkZXIgb3JkZXJpbmcgcHJvYmxlbXMuICAqLworc3RydWN0IHNpZ2luZm87CisKKyNpZmRlZiBfX0tFUk5FTF9fCisvKiBNb3N0IHRoaW5ncyBzaG91bGQgYmUgY2xlYW4gZW5vdWdoIHRvIHJlZGVmaW5lIHRoaXMgYXQgd2lsbCwgaWYgY2FyZQorICAgaXMgdGFrZW4gdG8gbWFrZSBsaWJjIG1hdGNoLiAgKi8KKworI2RlZmluZSBfTlNJRwkJNjQKKyNkZWZpbmUgX05TSUdfQlBXCTY0CisjZGVmaW5lIF9OU0lHX1dPUkRTCShfTlNJRyAvIF9OU0lHX0JQVykKKwordHlwZWRlZiB1bnNpZ25lZCBsb25nIG9sZF9zaWdzZXRfdDsJCS8qIGF0IGxlYXN0IDMyIGJpdHMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcgc2lnW19OU0lHX1dPUkRTXTsKK30gc2lnc2V0X3Q7CisKKworc3RydWN0IHB0X3JlZ3M7IAorYXNtbGlua2FnZSBpbnQgZG9fc2lnbmFsKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzaWdzZXRfdCAqb2xkc2V0KTsKKworCisjZWxzZQorLyogSGVyZSB3ZSBtdXN0IGNhdGVyIHRvIGxpYmNzIHRoYXQgcG9rZSBhYm91dCBpbiBrZXJuZWwgaGVhZGVycy4gICovCisKKyNkZWZpbmUgTlNJRwkJMzIKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBzaWdzZXRfdDsKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZgorCisjZGVmaW5lIFNJR0hVUAkJIDEKKyNkZWZpbmUgU0lHSU5UCQkgMgorI2RlZmluZSBTSUdRVUlUCQkgMworI2RlZmluZSBTSUdJTEwJCSA0CisjZGVmaW5lIFNJR1RSQVAJCSA1CisjZGVmaW5lIFNJR0FCUlQJCSA2CisjZGVmaW5lIFNJR0lPVAkJIDYKKyNkZWZpbmUgU0lHQlVTCQkgNworI2RlZmluZSBTSUdGUEUJCSA4CisjZGVmaW5lIFNJR0tJTEwJCSA5CisjZGVmaW5lIFNJR1VTUjEJCTEwCisjZGVmaW5lIFNJR1NFR1YJCTExCisjZGVmaW5lIFNJR1VTUjIJCTEyCisjZGVmaW5lIFNJR1BJUEUJCTEzCisjZGVmaW5lIFNJR0FMUk0JCTE0CisjZGVmaW5lIFNJR1RFUk0JCTE1CisjZGVmaW5lIFNJR1NUS0ZMVAkxNgorI2RlZmluZSBTSUdDSExECQkxNworI2RlZmluZSBTSUdDT05UCQkxOAorI2RlZmluZSBTSUdTVE9QCQkxOQorI2RlZmluZSBTSUdUU1RQCQkyMAorI2RlZmluZSBTSUdUVElOCQkyMQorI2RlZmluZSBTSUdUVE9VCQkyMgorI2RlZmluZSBTSUdVUkcJCTIzCisjZGVmaW5lIFNJR1hDUFUJCTI0CisjZGVmaW5lIFNJR1hGU1oJCTI1CisjZGVmaW5lIFNJR1ZUQUxSTQkyNgorI2RlZmluZSBTSUdQUk9GCQkyNworI2RlZmluZSBTSUdXSU5DSAkyOAorI2RlZmluZSBTSUdJTwkJMjkKKyNkZWZpbmUgU0lHUE9MTAkJU0lHSU8KKy8qCisjZGVmaW5lIFNJR0xPU1QJCTI5CisqLworI2RlZmluZSBTSUdQV1IJCTMwCisjZGVmaW5lIFNJR1NZUwkJMzEKKyNkZWZpbmUJU0lHVU5VU0VECTMxCisKKy8qIFRoZXNlIHNob3VsZCBub3QgYmUgY29uc2lkZXJlZCBjb25zdGFudHMgZnJvbSB1c2VybGFuZC4gICovCisjZGVmaW5lIFNJR1JUTUlOCTMyCisjZGVmaW5lIFNJR1JUTUFYCV9OU0lHCisKKy8qCisgKiBTQV9GTEFHUyB2YWx1ZXM6CisgKgorICogU0FfT05TVEFDSyBpbmRpY2F0ZXMgdGhhdCBhIHJlZ2lzdGVyZWQgc3RhY2tfdCB3aWxsIGJlIHVzZWQuCisgKiBTQV9JTlRFUlJVUFQgaXMgYSBuby1vcCwgYnV0IGxlZnQgZHVlIHRvIGhpc3RvcmljYWwgcmVhc29ucy4gVXNlIHRoZQorICogU0FfUkVTVEFSVCBmbGFnIHRvIGdldCByZXN0YXJ0aW5nIHNpZ25hbHMgKHdoaWNoIHdlcmUgdGhlIGRlZmF1bHQgbG9uZyBhZ28pCisgKiBTQV9OT0NMRFNUT1AgZmxhZyB0byB0dXJuIG9mZiBTSUdDSExEIHdoZW4gY2hpbGRyZW4gc3RvcC4KKyAqIFNBX1JFU0VUSEFORCBjbGVhcnMgdGhlIGhhbmRsZXIgd2hlbiB0aGUgc2lnbmFsIGlzIGRlbGl2ZXJlZC4KKyAqIFNBX05PQ0xEV0FJVCBmbGFnIG9uIFNJR0NITEQgdG8gaW5oaWJpdCB6b21iaWVzLgorICogU0FfTk9ERUZFUiBwcmV2ZW50cyB0aGUgY3VycmVudCBzaWduYWwgZnJvbSBiZWluZyBtYXNrZWQgaW4gdGhlIGhhbmRsZXIuCisgKgorICogU0FfT05FU0hPVCBhbmQgU0FfTk9NQVNLIGFyZSB0aGUgaGlzdG9yaWNhbCBMaW51eCBuYW1lcyBmb3IgdGhlIFNpbmdsZQorICogVW5peCBuYW1lcyBSRVNFVEhBTkQgYW5kIE5PREVGRVIgcmVzcGVjdGl2ZWx5LgorICovCisjZGVmaW5lIFNBX05PQ0xEU1RPUAkweDAwMDAwMDAxCisjZGVmaW5lIFNBX05PQ0xEV0FJVAkweDAwMDAwMDAyCisjZGVmaW5lIFNBX1NJR0lORk8JMHgwMDAwMDAwNAorI2RlZmluZSBTQV9PTlNUQUNLCTB4MDgwMDAwMDAKKyNkZWZpbmUgU0FfUkVTVEFSVAkweDEwMDAwMDAwCisjZGVmaW5lIFNBX05PREVGRVIJMHg0MDAwMDAwMAorI2RlZmluZSBTQV9SRVNFVEhBTkQJMHg4MDAwMDAwMAorCisjZGVmaW5lIFNBX05PTUFTSwlTQV9OT0RFRkVSCisjZGVmaW5lIFNBX09ORVNIT1QJU0FfUkVTRVRIQU5ECisjZGVmaW5lIFNBX0lOVEVSUlVQVAkweDIwMDAwMDAwIC8qIGR1bW15IC0tIGlnbm9yZWQgKi8KKworI2RlZmluZSBTQV9SRVNUT1JFUgkweDA0MDAwMDAwCisKKy8qCisgKiBzaWdhbHRzdGFjayBjb250cm9scworICovCisjZGVmaW5lIFNTX09OU1RBQ0sJMQorI2RlZmluZSBTU19ESVNBQkxFCTIKKworI2RlZmluZSBNSU5TSUdTVEtTWgkyMDQ4CisjZGVmaW5lIFNJR1NUS1NaCTgxOTIKKworI2lmZGVmIF9fS0VSTkVMX18KKworLyoKKyAqIFRoZXNlIHZhbHVlcyBvZiBzYV9mbGFncyBhcmUgdXNlZCBvbmx5IGJ5IHRoZSBrZXJuZWwgYXMgcGFydCBvZiB0aGUKKyAqIGlycSBoYW5kbGluZyByb3V0aW5lcy4KKyAqCisgKiBTQV9JTlRFUlJVUFQgaXMgYWxzbyB1c2VkIGJ5IHRoZSBpcnEgaGFuZGxpbmcgcm91dGluZXMuCisgKiBTQV9TSElSUSBpcyBmb3Igc2hhcmVkIGludGVycnVwdCBzdXBwb3J0IG9uIFBDSSBhbmQgRUlTQS4KKyAqLworI2RlZmluZSBTQV9QUk9CRQkJU0FfT05FU0hPVAorI2RlZmluZSBTQV9TQU1QTEVfUkFORE9NCVNBX1JFU1RBUlQKKyNkZWZpbmUgU0FfU0hJUlEJCTB4MDQwMDAwMDAKKyNlbmRpZgorCisjZGVmaW5lIFNJR19CTE9DSyAgICAgICAgICAwCS8qIGZvciBibG9ja2luZyBzaWduYWxzICovCisjZGVmaW5lIFNJR19VTkJMT0NLICAgICAgICAxCS8qIGZvciB1bmJsb2NraW5nIHNpZ25hbHMgKi8KKyNkZWZpbmUgU0lHX1NFVE1BU0sgICAgICAgIDIJLyogZm9yIHNldHRpbmcgdGhlIHNpZ25hbCBtYXNrICovCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisvKiBUeXBlIG9mIGEgc2lnbmFsIGhhbmRsZXIuICAqLwordHlwZWRlZiB2b2lkIF9fc2lnbmFsZm5fdChpbnQpOwordHlwZWRlZiBfX3NpZ25hbGZuX3QgX191c2VyICpfX3NpZ2hhbmRsZXJfdDsKKwordHlwZWRlZiB2b2lkIF9fcmVzdG9yZWZuX3Qodm9pZCk7Cit0eXBlZGVmIF9fcmVzdG9yZWZuX3QgX191c2VyICpfX3NpZ3Jlc3RvcmVfdDsKKworI2RlZmluZSBTSUdfREZMCSgoX19zaWdoYW5kbGVyX3QpMCkJLyogZGVmYXVsdCBzaWduYWwgaGFuZGxpbmcgKi8KKyNkZWZpbmUgU0lHX0lHTgkoKF9fc2lnaGFuZGxlcl90KTEpCS8qIGlnbm9yZSBzaWduYWwgKi8KKyNkZWZpbmUgU0lHX0VSUgkoKF9fc2lnaGFuZGxlcl90KS0xKQkvKiBlcnJvciByZXR1cm4gZnJvbSBzaWduYWwgKi8KKworc3RydWN0IHNpZ2FjdGlvbiB7CisJX19zaWdoYW5kbGVyX3Qgc2FfaGFuZGxlcjsKKwl1bnNpZ25lZCBsb25nIHNhX2ZsYWdzOworCV9fc2lncmVzdG9yZV90IHNhX3Jlc3RvcmVyOworCXNpZ3NldF90IHNhX21hc2s7CQkvKiBtYXNrIGxhc3QgZm9yIGV4dGVuc2liaWxpdHkgKi8KK307CisKK3N0cnVjdCBrX3NpZ2FjdGlvbiB7CisJc3RydWN0IHNpZ2FjdGlvbiBzYTsKK307CisKK3R5cGVkZWYgc3RydWN0IHNpZ2FsdHN0YWNrIHsKKwl2b2lkIF9fdXNlciAqc3Nfc3A7CisJaW50IHNzX2ZsYWdzOworCXNpemVfdCBzc19zaXplOworfSBzdGFja190OworCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGFzbS9zaWdjb250ZXh0Lmg+CisKKyN1bmRlZiBfX0hBVkVfQVJDSF9TSUdfQklUT1BTCisjaWYgMAorCitleHRlcm4gX19pbmxpbmVfXyB2b2lkIHNpZ2FkZHNldChzaWdzZXRfdCAqc2V0LCBpbnQgX3NpZykKK3sKKwlfX2FzbV9fKCJidHNxICUxLCUwIiA6ICI9bSIoKnNldCkgOiAiSXIiKF9zaWcgLSAxKSA6ICJjYyIpOworfQorCitleHRlcm4gX19pbmxpbmVfXyB2b2lkIHNpZ2RlbHNldChzaWdzZXRfdCAqc2V0LCBpbnQgX3NpZykKK3sKKwlfX2FzbV9fKCJidHJxICUxLCUwIiA6ICI9bSIoKnNldCkgOiAiSXIiKF9zaWcgLSAxKSA6ICJjYyIpOworfQorCitleHRlcm4gX19pbmxpbmVfXyBpbnQgX19jb25zdF9zaWdpc21lbWJlcihzaWdzZXRfdCAqc2V0LCBpbnQgX3NpZykKK3sKKwl1bnNpZ25lZCBsb25nIHNpZyA9IF9zaWcgLSAxOworCXJldHVybiAxICYgKHNldC0+c2lnW3NpZyAvIF9OU0lHX0JQV10gPj4gKHNpZyAmIH4oX05TSUdfQlBXLTEpKSk7Cit9CisKK2V4dGVybiBfX2lubGluZV9fIGludCBfX2dlbl9zaWdpc21lbWJlcihzaWdzZXRfdCAqc2V0LCBpbnQgX3NpZykKK3sKKwlpbnQgcmV0OworCV9fYXNtX18oImJ0cSAlMiwlMVxuXHRzYmJxICUwLCUwIgorCQk6ICI9ciIocmV0KSA6ICJtIigqc2V0KSwgIklyIihfc2lnLTEpIDogImNjIik7CisJcmV0dXJuIHJldDsKK30KKworI2RlZmluZSBzaWdpc21lbWJlcihzZXQsc2lnKQkJCVwKKwkoX19idWlsdGluX2NvbnN0YW50X3Aoc2lnKSA/CQlcCisJIF9fY29uc3Rfc2lnaXNtZW1iZXIoKHNldCksKHNpZykpIDoJXAorCSBfX2dlbl9zaWdpc21lbWJlcigoc2V0KSwoc2lnKSkpCisKK2V4dGVybiBfX2lubGluZV9fIGludCBzaWdmaW5kaW53b3JkKHVuc2lnbmVkIGxvbmcgd29yZCkKK3sKKwlfX2FzbV9fKCJic2ZxICUxLCUwIiA6ICI9ciIod29yZCkgOiAicm0iKHdvcmQpIDogImNjIik7CisJcmV0dXJuIHdvcmQ7Cit9CisjZW5kaWYKKyNlbmRpZgorCisjZGVmaW5lIHB0cmFjZV9zaWduYWxfZGVsaXZlcihyZWdzLCBjb29raWUpIGRvIHsgfSB3aGlsZSAoMCkKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvc21wLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvc21wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU1MjNlMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9zbXAuaApAQCAtMCwwICsxLDE0OSBAQAorI2lmbmRlZiBfX0FTTV9TTVBfSAorI2RlZmluZSBfX0FTTV9TTVBfSAorCisvKgorICogV2UgbmVlZCB0aGUgQVBJQyBkZWZpbml0aW9ucyBhdXRvbWF0aWNhbGx5IGFzIHBhcnQgb2YgJ3NtcC5oJworICovCisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CitleHRlcm4gaW50IGRpc2FibGVfYXBpYzsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2luY2x1ZGUgPGFzbS9maXhtYXAuaD4KKyNpbmNsdWRlIDxhc20vbXBzcGVjLmg+CisjaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCisjaW5jbHVkZSA8YXNtL2lvX2FwaWMuaD4KKyNlbmRpZgorI2luY2x1ZGUgPGFzbS9hcGljLmg+CisjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CisjZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1NNUAorI2lmbmRlZiBBU1NFTUJMWQorCisjaW5jbHVkZSA8YXNtL3BkYS5oPgorCitzdHJ1Y3QgcHRfcmVnczsKKworLyoKKyAqIFByaXZhdGUgcm91dGluZXMvZGF0YQorICovCisgCitleHRlcm4gdm9pZCBzbXBfYWxsb2NfbWVtb3J5KHZvaWQpOworZXh0ZXJuIGNwdW1hc2tfdCBjcHVfb25saW5lX21hcDsKK2V4dGVybiB2b2xhdGlsZSB1bnNpZ25lZCBsb25nIHNtcF9pbnZhbGlkYXRlX25lZWRlZDsKK2V4dGVybiBpbnQgcGljX21vZGU7CitleHRlcm4gaW50IHNtcF9udW1fc2libGluZ3M7CitleHRlcm4gdm9pZCBzbXBfZmx1c2hfdGxiKHZvaWQpOworZXh0ZXJuIHZvaWQgc21wX21lc3NhZ2VfaXJxKGludCBjcGwsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworZXh0ZXJuIHZvaWQgc21wX3NlbmRfcmVzY2hlZHVsZShpbnQgY3B1KTsKK2V4dGVybiB2b2lkIHNtcF9pbnZhbGlkYXRlX3Jjdih2b2lkKTsJCS8qIFByb2Nlc3MgYW4gTk1JICovCitleHRlcm4gdm9pZCAoKm10cnJfaG9vaykgKHZvaWQpOworZXh0ZXJuIHZvaWQgemFwX2xvd19tYXBwaW5ncyh2b2lkKTsKK3ZvaWQgc21wX3N0b3BfY3B1KHZvaWQpOworZXh0ZXJuIGNwdW1hc2tfdCBjcHVfc2libGluZ19tYXBbTlJfQ1BVU107CitleHRlcm4gdTggcGh5c19wcm9jX2lkW05SX0NQVVNdOworCisjZGVmaW5lIFNNUF9UUkFNUE9MSU5FX0JBU0UgMHg2MDAwCisKKy8qCisgKiBPbiB4ODYgYWxsIENQVXMgYXJlIG1hcHBlZCAxOjEgdG8gdGhlIEFQSUMgc3BhY2UuCisgKiBUaGlzIHNpbXBsaWZpZXMgc2NoZWR1bGluZyBhbmQgSVBJIHNlbmRpbmcgYW5kCisgKiBjb21wcmVzc2VzIGRhdGEgc3RydWN0dXJlcy4KKyAqLworCitleHRlcm4gY3B1bWFza190IGNwdV9jYWxsb3V0X21hcDsKK2V4dGVybiBjcHVtYXNrX3QgY3B1X2NhbGxpbl9tYXA7CisjZGVmaW5lIGNwdV9wb3NzaWJsZV9tYXAgY3B1X2NhbGxvdXRfbWFwCisKK3N0YXRpYyBpbmxpbmUgaW50IG51bV9ib290aW5nX2NwdXModm9pZCkKK3sKKwlyZXR1cm4gY3B1c193ZWlnaHQoY3B1X2NhbGxvdXRfbWFwKTsKK30KKworI2RlZmluZSBfX3NtcF9wcm9jZXNzb3JfaWQoKSByZWFkX3BkYShjcHVudW1iZXIpCisKK2V4dGVybiBfX2lubGluZSBpbnQgaGFyZF9zbXBfcHJvY2Vzc29yX2lkKHZvaWQpCit7CisJLyogd2UgZG9uJ3Qgd2FudCB0byBtYXJrIHRoaXMgYWNjZXNzIHZvbGF0aWxlIC0gYmFkIGNvZGUgZ2VuZXJhdGlvbiAqLworCXJldHVybiBHRVRfQVBJQ19JRCgqKHVuc2lnbmVkIGludCAqKShBUElDX0JBU0UrQVBJQ19JRCkpOworfQorCisjZGVmaW5lIHNhZmVfc21wX3Byb2Nlc3Nvcl9pZCgpIChkaXNhYmxlX2FwaWMgPyAwIDogeDg2X2FwaWNpZF90b19jcHUoaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCkpKQorCisjZW5kaWYgLyogIUFTU0VNQkxZICovCisKKyNkZWZpbmUgTk9fUFJPQ19JRAkJMHhGRgkJLyogTm8gcHJvY2Vzc29yIG1hZ2ljIG1hcmtlciAqLworCisjZW5kaWYKKworI2lmbmRlZiBBU1NFTUJMWQorLyoKKyAqIFNvbWUgbG93bGV2ZWwgZnVuY3Rpb25zIG1pZ2h0IHdhbnQgdG8ga25vdyBhYm91dAorICogdGhlIHJlYWwgQVBJQyBJRCA8LT4gQ1BVICMgbWFwcGluZy4KKyAqLworZXh0ZXJuIHU4IHg4Nl9jcHVfdG9fYXBpY2lkW05SX0NQVVNdOwkvKiBwaHlzaWNhbCBJRCAqLworZXh0ZXJuIHU4IHg4Nl9jcHVfdG9fbG9nX2FwaWNpZFtOUl9DUFVTXTsKK2V4dGVybiB1OCBiaW9zX2NwdV9hcGljaWRbXTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3B1X21hc2tfdG9fYXBpY2lkKGNwdW1hc2tfdCBjcHVtYXNrKQoreworCXJldHVybiBjcHVzX2FkZHIoY3B1bWFzaylbMF07Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHg4Nl9hcGljaWRfdG9fY3B1KHU4IGFwaWNpZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBOUl9DUFVTOyArK2kpCisJCWlmICh4ODZfY3B1X3RvX2FwaWNpZFtpXSA9PSBhcGljaWQpCisJCQlyZXR1cm4gaTsKKworCS8qIE5vIGVudHJpZXMgaW4geDg2X2NwdV90b19hcGljaWQ/ICBFaXRoZXIgbm8gTVBTfEFDUEksCisJICogb3IgY2FsbGVkIHRvbyBlYXJseS4gIEVpdGhlciB3YXksIHdlIG11c3QgYmUgQ1BVIDAuICovCisgICAgICAJaWYgKHg4Nl9jcHVfdG9fYXBpY2lkWzBdID09IEJBRF9BUElDSUQpCisJCXJldHVybiAwOworCisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW5saW5lIGludCBjcHVfcHJlc2VudF90b19hcGljaWQoaW50IG1wc19jcHUpCit7CisJaWYgKG1wc19jcHUgPCBOUl9DUFVTKQorCQlyZXR1cm4gKGludCliaW9zX2NwdV9hcGljaWRbbXBzX2NwdV07CisJZWxzZQorCQlyZXR1cm4gQkFEX0FQSUNJRDsKK30KKworI2VuZGlmIC8qICFBU1NFTUJMWSAqLworCisjaWZuZGVmIENPTkZJR19TTVAKKyNkZWZpbmUgc3RhY2tfc21wX3Byb2Nlc3Nvcl9pZCgpIDAKKyNkZWZpbmUgc2FmZV9zbXBfcHJvY2Vzc29yX2lkKCkgMAorI2RlZmluZSBjcHVfbG9naWNhbF9tYXAoeCkgKHgpCisjZWxzZQorI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgorI2RlZmluZSBzdGFja19zbXBfcHJvY2Vzc29yX2lkKCkgXAorKHsgCQkJCQkJCQlcCisJc3RydWN0IHRocmVhZF9pbmZvICp0aTsJCQkJCVwKKwlfX2FzbV9fKCJhbmRxICUlcnNwLCUwOyAiOiI9ciIgKHRpKSA6ICIwIiAoQ1VSUkVOVF9NQVNLKSk7CVwKKwl0aS0+Y3B1OwkJCQkJCVwKK30pCisjZW5kaWYKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK3N0YXRpYyBfX2lubGluZSBpbnQgbG9naWNhbF9zbXBfcHJvY2Vzc29yX2lkKHZvaWQpCit7CisJLyogd2UgZG9uJ3Qgd2FudCB0byBtYXJrIHRoaXMgYWNjZXNzIHZvbGF0aWxlIC0gYmFkIGNvZGUgZ2VuZXJhdGlvbiAqLworCXJldHVybiBHRVRfQVBJQ19MT0dJQ0FMX0lEKCoodW5zaWduZWQgbG9uZyAqKShBUElDX0JBU0UrQVBJQ19MRFIpKTsKK30KKyNlbmRpZgorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L3NvY2tldC5oIGIvaW5jbHVkZS9hc20teDg2XzY0L3NvY2tldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5YTI1MmUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvc29ja2V0LmgKQEAgLTAsMCArMSw1MCBAQAorI2lmbmRlZiBfQVNNX1NPQ0tFVF9ICisjZGVmaW5lIF9BU01fU09DS0VUX0gKKworI2luY2x1ZGUgPGFzbS9zb2NraW9zLmg+CisKKy8qIEZvciBzZXRzb2Nrb3B0KDIpICovCisjZGVmaW5lIFNPTF9TT0NLRVQJMQorCisjZGVmaW5lIFNPX0RFQlVHCTEKKyNkZWZpbmUgU09fUkVVU0VBRERSCTIKKyNkZWZpbmUgU09fVFlQRQkJMworI2RlZmluZSBTT19FUlJPUgk0CisjZGVmaW5lIFNPX0RPTlRST1VURQk1CisjZGVmaW5lIFNPX0JST0FEQ0FTVAk2CisjZGVmaW5lIFNPX1NOREJVRgk3CisjZGVmaW5lIFNPX1JDVkJVRgk4CisjZGVmaW5lIFNPX0tFRVBBTElWRQk5CisjZGVmaW5lIFNPX09PQklOTElORQkxMAorI2RlZmluZSBTT19OT19DSEVDSwkxMQorI2RlZmluZSBTT19QUklPUklUWQkxMgorI2RlZmluZSBTT19MSU5HRVIJMTMKKyNkZWZpbmUgU09fQlNEQ09NUEFUCTE0CisvKiBUbyBhZGQgOiNkZWZpbmUgU09fUkVVU0VQT1JUIDE1ICovCisjZGVmaW5lIFNPX1BBU1NDUkVECTE2CisjZGVmaW5lIFNPX1BFRVJDUkVECTE3CisjZGVmaW5lIFNPX1JDVkxPV0FUCTE4CisjZGVmaW5lIFNPX1NORExPV0FUCTE5CisjZGVmaW5lIFNPX1JDVlRJTUVPCTIwCisjZGVmaW5lIFNPX1NORFRJTUVPCTIxCisKKy8qIFNlY3VyaXR5IGxldmVscyAtIGFzIHBlciBOUkwgSVB2NiAtIGRvbid0IGFjdHVhbGx5IGRvIGFueXRoaW5nICovCisjZGVmaW5lIFNPX1NFQ1VSSVRZX0FVVEhFTlRJQ0FUSU9OCQkyMgorI2RlZmluZSBTT19TRUNVUklUWV9FTkNSWVBUSU9OX1RSQU5TUE9SVAkyMworI2RlZmluZSBTT19TRUNVUklUWV9FTkNSWVBUSU9OX05FVFdPUksJCTI0CisKKyNkZWZpbmUgU09fQklORFRPREVWSUNFCTI1CisKKy8qIFNvY2tldCBmaWx0ZXJpbmcgKi8KKyNkZWZpbmUgU09fQVRUQUNIX0ZJTFRFUiAgICAgICAgMjYKKyNkZWZpbmUgU09fREVUQUNIX0ZJTFRFUiAgICAgICAgMjcKKworI2RlZmluZSBTT19QRUVSTkFNRQkJMjgKKyNkZWZpbmUgU09fVElNRVNUQU1QCQkyOQorI2RlZmluZSBTQ01fVElNRVNUQU1QCQlTT19USU1FU1RBTVAKKworI2RlZmluZSBTT19BQ0NFUFRDT05OCQkzMAorCisjZGVmaW5lIFNPX1BFRVJTRUMgICAgICAgICAgICAgMzEKKworI2VuZGlmIC8qIF9BU01fU09DS0VUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9zb2NraW9zLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvc29ja2lvcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlZWZkMTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvc29ja2lvcy5oCkBAIC0wLDAgKzEsMTIgQEAKKyNpZm5kZWYgX19BUkNIX1g4NjY0X1NPQ0tJT1NfXworI2RlZmluZSBfX0FSQ0hfWDg2NjRfU09DS0lPU19fCisKKy8qIFNvY2tldC1sZXZlbCBJL08gY29udHJvbCBjYWxscy4gKi8KKyNkZWZpbmUgRklPU0VUT1dOIAkweDg5MDEKKyNkZWZpbmUgU0lPQ1NQR1JQCTB4ODkwMgorI2RlZmluZSBGSU9HRVRPV04JMHg4OTAzCisjZGVmaW5lIFNJT0NHUEdSUAkweDg5MDQKKyNkZWZpbmUgU0lPQ0FUTUFSSwkweDg5MDUKKyNkZWZpbmUgU0lPQ0dTVEFNUAkweDg5MDYJCS8qIEdldCBzdGFtcCAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9zcGlubG9jay5oIGIvaW5jbHVkZS9hc20teDg2XzY0L3NwaW5sb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFlYjU3YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9zcGlubG9jay5oCkBAIC0wLDAgKzEsMjE0IEBACisjaWZuZGVmIF9fQVNNX1NQSU5MT0NLX0gKKyNkZWZpbmUgX19BU01fU1BJTkxPQ0tfSAorCisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgPGFzbS9yd2xvY2suaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCitleHRlcm4gaW50IHByaW50ayhjb25zdCBjaGFyICogZm10LCAuLi4pCisJX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpOworCisvKgorICogWW91ciBiYXNpYyBTTVAgc3BpbmxvY2tzLCBhbGxvd2luZyBvbmx5IGEgc2luZ2xlIENQVSBhbnl3aGVyZQorICovCisKK3R5cGVkZWYgc3RydWN0IHsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbG9jazsKKyNpZmRlZiBDT05GSUdfREVCVUdfU1BJTkxPQ0sKKwl1bnNpZ25lZCBtYWdpYzsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19QUkVFTVBUCisJdW5zaWduZWQgaW50IGJyZWFrX2xvY2s7CisjZW5kaWYKK30gc3BpbmxvY2tfdDsKKworI2RlZmluZSBTUElOTE9DS19NQUdJQwkweGRlYWQ0ZWFkCisKKyNpZmRlZiBDT05GSUdfREVCVUdfU1BJTkxPQ0sKKyNkZWZpbmUgU1BJTkxPQ0tfTUFHSUNfSU5JVAksIFNQSU5MT0NLX01BR0lDCisjZWxzZQorI2RlZmluZSBTUElOTE9DS19NQUdJQ19JTklUCS8qICovCisjZW5kaWYKKworI2RlZmluZSBTUElOX0xPQ0tfVU5MT0NLRUQgKHNwaW5sb2NrX3QpIHsgMSBTUElOTE9DS19NQUdJQ19JTklUIH0KKworI2RlZmluZSBzcGluX2xvY2tfaW5pdCh4KQlkbyB7ICooeCkgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7IH0gd2hpbGUoMCkKKworLyoKKyAqIFNpbXBsZSBzcGluIGxvY2sgb3BlcmF0aW9ucy4gIFRoZXJlIGFyZSB0d28gdmFyaWFudHMsIG9uZSBjbGVhcnMgSVJRJ3MKKyAqIG9uIHRoZSBsb2NhbCBwcm9jZXNzb3IsIG9uZSBkb2VzIG5vdC4KKyAqCisgKiBXZSBtYWtlIG5vIGZhaXJuZXNzIGFzc3VtcHRpb25zLiBUaGV5IGhhdmUgYSBjb3N0LgorICovCisKKyNkZWZpbmUgc3Bpbl9pc19sb2NrZWQoeCkJKCoodm9sYXRpbGUgc2lnbmVkIGNoYXIgKikoJih4KS0+bG9jaykgPD0gMCkKKyNkZWZpbmUgc3Bpbl91bmxvY2tfd2FpdCh4KQlkbyB7IGJhcnJpZXIoKTsgfSB3aGlsZShzcGluX2lzX2xvY2tlZCh4KSkKKyNkZWZpbmUgX3Jhd19zcGluX2xvY2tfZmxhZ3MobG9jaywgZmxhZ3MpIF9yYXdfc3Bpbl9sb2NrKGxvY2spCisKKyNkZWZpbmUgc3Bpbl9sb2NrX3N0cmluZyBcCisJIlxuMTpcdCIgXAorCSJsb2NrIDsgZGVjYiAlMFxuXHQiIFwKKwkianMgMmZcbiIgXAorCUxPQ0tfU0VDVElPTl9TVEFSVCgiIikgXAorCSIyOlx0IiBcCisJInJlcDtub3Bcblx0IiBcCisJImNtcGIgJDAsJTBcblx0IiBcCisJImpsZSAyYlxuXHQiIFwKKwkiam1wIDFiXG4iIFwKKwlMT0NLX1NFQ1RJT05fRU5ECisKKy8qCisgKiBUaGlzIHdvcmtzLiBEZXNwaXRlIGFsbCB0aGUgY29uZnVzaW9uLgorICogKGV4Y2VwdCBvbiBQUHJvIFNNUCBvciBpZiB3ZSBhcmUgdXNpbmcgT09TVE9SRSkKKyAqIChQUHJvIGVycmF0YSA2NiwgOTIpCisgKi8KKyAKKyNpZiAhZGVmaW5lZChDT05GSUdfWDg2X09PU1RPUkUpICYmICFkZWZpbmVkKENPTkZJR19YODZfUFBST19GRU5DRSkKKworI2RlZmluZSBzcGluX3VubG9ja19zdHJpbmcgXAorCSJtb3ZiICQxLCUwIiBcCisJCToiPW0iIChsb2NrLT5sb2NrKSA6IDogIm1lbW9yeSIKKworCitzdGF0aWMgaW5saW5lIHZvaWQgX3Jhd19zcGluX3VubG9jayhzcGlubG9ja190ICpsb2NrKQoreworI2lmZGVmIENPTkZJR19ERUJVR19TUElOTE9DSworCUJVR19PTihsb2NrLT5tYWdpYyAhPSBTUElOTE9DS19NQUdJQyk7CisJYXNzZXJ0X3NwaW5fbG9ja2VkKGxvY2spOworI2VuZGlmCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCXNwaW5fdW5sb2NrX3N0cmluZworCSk7Cit9CisKKyNlbHNlCisKKyNkZWZpbmUgc3Bpbl91bmxvY2tfc3RyaW5nIFwKKwkieGNoZ2IgJWIwLCAlMSIgXAorCQk6Ij1xIiAob2xkdmFsKSwgIj1tIiAobG9jay0+bG9jaykgXAorCQk6IjAiIChvbGR2YWwpIDogIm1lbW9yeSIKKworc3RhdGljIGlubGluZSB2b2lkIF9yYXdfc3Bpbl91bmxvY2soc3BpbmxvY2tfdCAqbG9jaykKK3sKKwljaGFyIG9sZHZhbCA9IDE7CisjaWZkZWYgQ09ORklHX0RFQlVHX1NQSU5MT0NLCisJQlVHX09OKGxvY2stPm1hZ2ljICE9IFNQSU5MT0NLX01BR0lDKTsKKwlhc3NlcnRfc3Bpbl9sb2NrZWQobG9jayk7CisjZW5kaWYKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJc3Bpbl91bmxvY2tfc3RyaW5nCisJKTsKK30KKworI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgaW50IF9yYXdfc3Bpbl90cnlsb2NrKHNwaW5sb2NrX3QgKmxvY2spCit7CisJY2hhciBvbGR2YWw7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSJ4Y2hnYiAlYjAsJTEiCisJCToiPXEiIChvbGR2YWwpLCAiPW0iIChsb2NrLT5sb2NrKQorCQk6IjAiICgwKSA6ICJtZW1vcnkiKTsKKwlyZXR1cm4gb2xkdmFsID4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9yYXdfc3Bpbl9sb2NrKHNwaW5sb2NrX3QgKmxvY2spCit7CisjaWZkZWYgQ09ORklHX0RFQlVHX1NQSU5MT0NLCisJaWYgKGxvY2stPm1hZ2ljICE9IFNQSU5MT0NLX01BR0lDKSB7CisJCXByaW50aygiZWlwOiAlcFxuIiwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKKwkJQlVHKCk7CisJfQorI2VuZGlmCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCXNwaW5fbG9ja19zdHJpbmcKKwkJOiI9bSIgKGxvY2stPmxvY2spIDogOiAibWVtb3J5Iik7Cit9CisKKworLyoKKyAqIFJlYWQtd3JpdGUgc3BpbmxvY2tzLCBhbGxvd2luZyBtdWx0aXBsZSByZWFkZXJzCisgKiBidXQgb25seSBvbmUgd3JpdGVyLgorICoKKyAqIE5PVEUhIGl0IGlzIHF1aXRlIGNvbW1vbiB0byBoYXZlIHJlYWRlcnMgaW4gaW50ZXJydXB0cworICogYnV0IG5vIGludGVycnVwdCB3cml0ZXJzLiBGb3IgdGhvc2UgY2lyY3Vtc3RhbmNlcyB3ZQorICogY2FuICJtaXgiIGlycS1zYWZlIGxvY2tzIC0gYW55IHdyaXRlciBuZWVkcyB0byBnZXQgYQorICogaXJxLXNhZmUgd3JpdGUtbG9jaywgYnV0IHJlYWRlcnMgY2FuIGdldCBub24taXJxc2FmZQorICogcmVhZC1sb2Nrcy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCXZvbGF0aWxlIHVuc2lnbmVkIGludCBsb2NrOworI2lmZGVmIENPTkZJR19ERUJVR19TUElOTE9DSworCXVuc2lnbmVkIG1hZ2ljOworI2VuZGlmCisjaWZkZWYgQ09ORklHX1BSRUVNUFQKKwl1bnNpZ25lZCBpbnQgYnJlYWtfbG9jazsKKyNlbmRpZgorfSByd2xvY2tfdDsKKworI2RlZmluZSBSV0xPQ0tfTUFHSUMJMHhkZWFmMWVlZAorCisjaWZkZWYgQ09ORklHX0RFQlVHX1NQSU5MT0NLCisjZGVmaW5lIFJXTE9DS19NQUdJQ19JTklUCSwgUldMT0NLX01BR0lDCisjZWxzZQorI2RlZmluZSBSV0xPQ0tfTUFHSUNfSU5JVAkvKiAqLworI2VuZGlmCisKKyNkZWZpbmUgUldfTE9DS19VTkxPQ0tFRCAocndsb2NrX3QpIHsgUldfTE9DS19CSUFTIFJXTE9DS19NQUdJQ19JTklUIH0KKworI2RlZmluZSByd2xvY2tfaW5pdCh4KQlkbyB7ICooeCkgPSBSV19MT0NLX1VOTE9DS0VEOyB9IHdoaWxlKDApCisKKyNkZWZpbmUgcmVhZF9jYW5fbG9jayh4KQkoKGludCkoeCktPmxvY2sgPiAwKQorI2RlZmluZSB3cml0ZV9jYW5fbG9jayh4KQkoKHgpLT5sb2NrID09IFJXX0xPQ0tfQklBUykKKworLyoKKyAqIE9uIHg4Niwgd2UgaW1wbGVtZW50IHJlYWQtd3JpdGUgbG9ja3MgYXMgYSAzMi1iaXQgY291bnRlcgorICogd2l0aCB0aGUgaGlnaCBiaXQgKHNpZ24pIGJlaW5nIHRoZSAiY29udGVuZGVkIiBiaXQuCisgKgorICogVGhlIGlubGluZSBhc3NlbWJseSBpcyBub24tb2J2aW91cy4gVGhpbmsgYWJvdXQgaXQuCisgKgorICogQ2hhbmdlZCB0byB1c2UgdGhlIHNhbWUgdGVjaG5pcXVlIGFzIHJ3IHNlbWFwaG9yZXMuICBTZWUKKyAqIHNlbWFwaG9yZS5oIGZvciBkZXRhaWxzLiAgLWJlbgorICovCisvKiB0aGUgc3BpbmxvY2sgaGVscGVycyBhcmUgaW4gYXJjaC9pMzg2L2tlcm5lbC9zZW1hcGhvcmUuYyAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgX3Jhd19yZWFkX2xvY2socndsb2NrX3QgKnJ3KQoreworI2lmZGVmIENPTkZJR19ERUJVR19TUElOTE9DSworCUJVR19PTihydy0+bWFnaWMgIT0gUldMT0NLX01BR0lDKTsKKyNlbmRpZgorCV9fYnVpbGRfcmVhZF9sb2NrKHJ3LCAiX19yZWFkX2xvY2tfZmFpbGVkIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfcmF3X3dyaXRlX2xvY2socndsb2NrX3QgKnJ3KQoreworI2lmZGVmIENPTkZJR19ERUJVR19TUElOTE9DSworCUJVR19PTihydy0+bWFnaWMgIT0gUldMT0NLX01BR0lDKTsKKyNlbmRpZgorCV9fYnVpbGRfd3JpdGVfbG9jayhydywgIl9fd3JpdGVfbG9ja19mYWlsZWQiKTsKK30KKworI2RlZmluZSBfcmF3X3JlYWRfdW5sb2NrKHJ3KQkJYXNtIHZvbGF0aWxlKCJsb2NrIDsgaW5jbCAlMCIgOiI9bSIgKChydyktPmxvY2spIDogOiAibWVtb3J5IikKKyNkZWZpbmUgX3Jhd193cml0ZV91bmxvY2socncpCWFzbSB2b2xhdGlsZSgibG9jayA7IGFkZGwgJCIgUldfTE9DS19CSUFTX1NUUiAiLCUwIjoiPW0iICgocncpLT5sb2NrKSA6IDogIm1lbW9yeSIpCisKK3N0YXRpYyBpbmxpbmUgaW50IF9yYXdfcmVhZF90cnlsb2NrKHJ3bG9ja190ICpsb2NrKQoreworCWF0b21pY190ICpjb3VudCA9IChhdG9taWNfdCAqKWxvY2s7CisJYXRvbWljX2RlYyhjb3VudCk7CisJaWYgKGF0b21pY19yZWFkKGNvdW50KSA+PSAwKQorCQlyZXR1cm4gMTsKKwlhdG9taWNfaW5jKGNvdW50KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgX3Jhd193cml0ZV90cnlsb2NrKHJ3bG9ja190ICpsb2NrKQoreworCWF0b21pY190ICpjb3VudCA9IChhdG9taWNfdCAqKWxvY2s7CisJaWYgKGF0b21pY19zdWJfYW5kX3Rlc3QoUldfTE9DS19CSUFTLCBjb3VudCkpCisJCXJldHVybiAxOworCWF0b21pY19hZGQoUldfTE9DS19CSUFTLCBjb3VudCk7CisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvKiBfX0FTTV9TUElOTE9DS19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvc3RhdC5oIGIvaW5jbHVkZS9hc20teDg2XzY0L3N0YXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDlmMDBkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L3N0YXQuaApAQCAtMCwwICsxLDQ0IEBACisjaWZuZGVmIF9BU01fWDg2XzY0X1NUQVRfSAorI2RlZmluZSBfQVNNX1g4Nl82NF9TVEFUX0gKKworI2RlZmluZSBTVEFUX0hBVkVfTlNFQyAxCisKK3N0cnVjdCBzdGF0IHsKKwl1bnNpZ25lZCBsb25nCXN0X2RldjsKKwl1bnNpZ25lZCBsb25nCXN0X2lubzsKKwl1bnNpZ25lZCBsb25nCXN0X25saW5rOworCisJdW5zaWduZWQgaW50CXN0X21vZGU7CisJdW5zaWduZWQgaW50CXN0X3VpZDsKKwl1bnNpZ25lZCBpbnQJc3RfZ2lkOworCXVuc2lnbmVkIGludAlfX3BhZDA7CisJdW5zaWduZWQgbG9uZwlzdF9yZGV2OworCWxvbmcJCXN0X3NpemU7CisJbG9uZwkJc3RfYmxrc2l6ZTsKKwlsb25nCQlzdF9ibG9ja3M7CS8qIE51bWJlciA1MTItYnl0ZSBibG9ja3MgYWxsb2NhdGVkLiAqLworCisJdW5zaWduZWQgbG9uZwlzdF9hdGltZTsKKwl1bnNpZ25lZCBsb25nIAlzdF9hdGltZV9uc2VjOyAKKwl1bnNpZ25lZCBsb25nCXN0X210aW1lOworCXVuc2lnbmVkIGxvbmcJc3RfbXRpbWVfbnNlYzsKKwl1bnNpZ25lZCBsb25nCXN0X2N0aW1lOworCXVuc2lnbmVkIGxvbmcgICBzdF9jdGltZV9uc2VjOworICAJbG9uZwkJX191bnVzZWRbM107Cit9OworCisvKiBGb3IgMzJiaXQgZW11bGF0aW9uICovCitzdHJ1Y3QgX19vbGRfa2VybmVsX3N0YXQgeworCXVuc2lnbmVkIHNob3J0IHN0X2RldjsKKwl1bnNpZ25lZCBzaG9ydCBzdF9pbm87CisJdW5zaWduZWQgc2hvcnQgc3RfbW9kZTsKKwl1bnNpZ25lZCBzaG9ydCBzdF9ubGluazsKKwl1bnNpZ25lZCBzaG9ydCBzdF91aWQ7CisJdW5zaWduZWQgc2hvcnQgc3RfZ2lkOworCXVuc2lnbmVkIHNob3J0IHN0X3JkZXY7CisJdW5zaWduZWQgaW50ICBzdF9zaXplOworCXVuc2lnbmVkIGludCAgc3RfYXRpbWU7CisJdW5zaWduZWQgaW50ICBzdF9tdGltZTsKKwl1bnNpZ25lZCBpbnQgIHN0X2N0aW1lOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvc3RhdGZzLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvc3RhdGZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNmNDcxOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9zdGF0ZnMuaApAQCAtMCwwICsxLDU4IEBACisjaWZuZGVmIF9YODZfNjRfU1RBVEZTX0gKKyNkZWZpbmUgX1g4Nl82NF9TVEFURlNfSAorCisjaWZuZGVmIF9fS0VSTkVMX1NUUklDVF9OQU1FUworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwordHlwZWRlZiBfX2tlcm5lbF9mc2lkX3QJZnNpZF90OworCisjZW5kaWYKKworLyoKKyAqIFRoaXMgaXMgdWdseSAtLSB3ZSdyZSBhbHJlYWR5IDY0LWJpdCBjbGVhbiwgc28ganVzdCBkdXBsaWNhdGUgdGhlIAorICogZGVmaW5pdGlvbnMuCisgKi8KK3N0cnVjdCBzdGF0ZnMgeworCWxvbmcgZl90eXBlOworCWxvbmcgZl9ic2l6ZTsKKwlsb25nIGZfYmxvY2tzOworCWxvbmcgZl9iZnJlZTsKKwlsb25nIGZfYmF2YWlsOworCWxvbmcgZl9maWxlczsKKwlsb25nIGZfZmZyZWU7CisJX19rZXJuZWxfZnNpZF90IGZfZnNpZDsKKwlsb25nIGZfbmFtZWxlbjsKKwlsb25nIGZfZnJzaXplOworCWxvbmcgZl9zcGFyZVs1XTsKK307CisKK3N0cnVjdCBzdGF0ZnM2NCB7CisJbG9uZyBmX3R5cGU7CisJbG9uZyBmX2JzaXplOworCWxvbmcgZl9ibG9ja3M7CisJbG9uZyBmX2JmcmVlOworCWxvbmcgZl9iYXZhaWw7CisJbG9uZyBmX2ZpbGVzOworCWxvbmcgZl9mZnJlZTsKKwlfX2tlcm5lbF9mc2lkX3QgZl9mc2lkOworCWxvbmcgZl9uYW1lbGVuOworCWxvbmcgZl9mcnNpemU7CisJbG9uZyBmX3NwYXJlWzVdOworfTsKKworc3RydWN0IGNvbXBhdF9zdGF0ZnM2NCB7CisJX191MzIgZl90eXBlOworCV9fdTMyIGZfYnNpemU7CisJX191NjQgZl9ibG9ja3M7CisJX191NjQgZl9iZnJlZTsKKwlfX3U2NCBmX2JhdmFpbDsKKwlfX3U2NCBmX2ZpbGVzOworCV9fdTY0IGZfZmZyZWU7CisJX19rZXJuZWxfZnNpZF90IGZfZnNpZDsKKwlfX3UzMiBmX25hbWVsZW47CisJX191MzIgZl9mcnNpemU7CisJX191MzIgZl9zcGFyZVs1XTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L3N0cmluZy5oIGIvaW5jbHVkZS9hc20teDg2XzY0L3N0cmluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzNDkzZWUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvc3RyaW5nLmgKQEAgLTAsMCArMSw2NyBAQAorI2lmbmRlZiBfWDg2XzY0X1NUUklOR19IXworI2RlZmluZSBfWDg2XzY0X1NUUklOR19IXworCisjaWZkZWYgX19LRVJORUxfXworCisvKiBXcml0dGVuIDIwMDIgYnkgQW5kaSBLbGVlbiAqLyAKKworLyogT25seSB1c2VkIGZvciBzcGVjaWFsIGNpcmN1bXN0YW5jZXMuIFN0b2xlbiBmcm9tIGkzODYvc3RyaW5nLmggKi8gCitzdGF0aWMgaW5saW5lIHZvaWQgKiBfX2lubGluZV9tZW1jcHkodm9pZCAqIHRvLCBjb25zdCB2b2lkICogZnJvbSwgc2l6ZV90IG4pCit7Cit1bnNpZ25lZCBsb25nIGQwLCBkMSwgZDI7CitfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkicmVwIDsgbW92c2xcblx0IgorCSJ0ZXN0YiAkMiwlYjRcblx0IgorCSJqZSAxZlxuXHQiCisJIm1vdnN3XG4iCisJIjE6XHR0ZXN0YiAkMSwlYjRcblx0IgorCSJqZSAyZlxuXHQiCisJIm1vdnNiXG4iCisJIjI6IgorCTogIj0mYyIgKGQwKSwgIj0mRCIgKGQxKSwgIj0mUyIgKGQyKQorCToiMCIgKG4vNCksICJxIiAobiksIjEiICgobG9uZykgdG8pLCIyIiAoKGxvbmcpIGZyb20pCisJOiAibWVtb3J5Iik7CityZXR1cm4gKHRvKTsKK30KKworLyogRXZlbiB3aXRoIF9fYnVpbHRpbl8gdGhlIGNvbXBpbGVyIG1heSBkZWNpZGUgdG8gdXNlIHRoZSBvdXQgb2YgbGluZQorICAgZnVuY3Rpb24uICovCisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNQ1BZIDEKK2V4dGVybiB2b2lkICpfX21lbWNweSh2b2lkICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgc2l6ZV90IGxlbik7IAorI2RlZmluZSBtZW1jcHkoZHN0LHNyYyxsZW4pIFwKKwkoeyBzaXplX3QgX19sZW4gPSAobGVuKTsJCQkJXAorCSAgIHZvaWQgKl9fcmV0OwkJCQkJCVwKKwkgICBpZiAoX19idWlsdGluX2NvbnN0YW50X3AobGVuKSAmJiBfX2xlbiA+PSA2NCkJXAorCQkgX19yZXQgPSBfX21lbWNweSgoZHN0KSwoc3JjKSxfX2xlbik7CQlcCisJICAgZWxzZQkJCQkJCQlcCisJCSBfX3JldCA9IF9fYnVpbHRpbl9tZW1jcHkoKGRzdCksKHNyYyksX19sZW4pOwlcCisJICAgX19yZXQ7IH0pIAorCisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNU0VUCisjZGVmaW5lIG1lbXNldCBfX2J1aWx0aW5fbWVtc2V0CisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNTU9WRQordm9pZCAqIG1lbW1vdmUodm9pZCAqIGRlc3QsY29uc3Qgdm9pZCAqc3JjLHNpemVfdCBjb3VudCk7CisKKy8qIFVzZSBDIG91dCBvZiBsaW5lIHZlcnNpb24gZm9yIG1lbWNtcCAqLyAKKyNkZWZpbmUgbWVtY21wIF9fYnVpbHRpbl9tZW1jbXAKK2ludCBtZW1jbXAoY29uc3Qgdm9pZCAqIGNzLGNvbnN0IHZvaWQgKiBjdCxzaXplX3QgY291bnQpOworCisvKiBvdXQgb2YgbGluZSBzdHJpbmcgZnVuY3Rpb25zIHVzZSBhbHdheXMgQyB2ZXJzaW9ucyAqLyAKKyNkZWZpbmUgc3RybGVuIF9fYnVpbHRpbl9zdHJsZW4KK3NpemVfdCBzdHJsZW4oY29uc3QgY2hhciAqIHMpOworCisjZGVmaW5lIHN0cmNweSBfX2J1aWx0aW5fc3RyY3B5CitjaGFyICogc3RyY3B5KGNoYXIgKiBkZXN0LGNvbnN0IGNoYXIgKnNyYyk7CisKKyNkZWZpbmUgc3RyY2F0IF9fYnVpbHRpbl9zdHJjYXQKK2NoYXIgKiBzdHJjYXQoY2hhciAqIGRlc3QsIGNvbnN0IGNoYXIgKiBzcmMpOworCisjZGVmaW5lIHN0cmNtcCBfX2J1aWx0aW5fc3RyY21wCitpbnQgc3RyY21wKGNvbnN0IGNoYXIgKiBjcyxjb25zdCBjaGFyICogY3QpOworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9zdXNwZW5kLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvc3VzcGVuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjNzQ1ODAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvc3VzcGVuZC5oCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMS0yMDAzIFBhdmVsIE1hY2hlayA8cGF2ZWxAc3VzZS5jej4KKyAqIEJhc2VkIG9uIGNvZGUKKyAqIENvcHlyaWdodCAyMDAxIFBhdHJpY2sgTW9jaGVsIDxtb2NoZWxAb3NkbC5vcmc+CisgKi8KKyNpbmNsdWRlIDxhc20vZGVzYy5oPgorI2luY2x1ZGUgPGFzbS9pMzg3Lmg+CisKK3N0YXRpYyBpbmxpbmUgaW50CithcmNoX3ByZXBhcmVfc3VzcGVuZCh2b2lkKQoreworCXJldHVybiAwOworfQorCisvKiBJbWFnZSBvZiB0aGUgc2F2ZWQgcHJvY2Vzc29yIHN0YXRlLiBJZiB5b3UgdG91Y2ggdGhpcywgZml4IGFjcGlfd2FrZXVwLlMuICovCitzdHJ1Y3Qgc2F2ZWRfY29udGV4dCB7CisgIAl1MTYgZHMsIGVzLCBmcywgZ3MsIHNzOworCXVuc2lnbmVkIGxvbmcgZ3NfYmFzZSwgZ3Nfa2VybmVsX2Jhc2UsIGZzX2Jhc2U7CisJdW5zaWduZWQgbG9uZyBjcjAsIGNyMiwgY3IzLCBjcjQ7CisJdTE2IGdkdF9wYWQ7CisJdTE2IGdkdF9saW1pdDsKKwl1bnNpZ25lZCBsb25nIGdkdF9iYXNlOworCXUxNiBpZHRfcGFkOworCXUxNiBpZHRfbGltaXQ7CisJdW5zaWduZWQgbG9uZyBpZHRfYmFzZTsKKwl1MTYgbGR0OworCXUxNiB0c3M7CisJdW5zaWduZWQgbG9uZyB0cjsKKwl1bnNpZ25lZCBsb25nIHNhZmV0eTsKKwl1bnNpZ25lZCBsb25nIHJldHVybl9hZGRyZXNzOworCXVuc2lnbmVkIGxvbmcgZWZsYWdzOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyogV2UnbGwgYWNjZXNzIHRoZXNlIGZyb20gYXNzZW1ibHksIHNvIHdlJ2QgYmV0dGVyIGhhdmUgdGhlbSBvdXRzaWRlIHN0cnVjdCAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc2F2ZWRfY29udGV4dF9lYXgsIHNhdmVkX2NvbnRleHRfZWJ4LCBzYXZlZF9jb250ZXh0X2VjeCwgc2F2ZWRfY29udGV4dF9lZHg7CitleHRlcm4gdW5zaWduZWQgbG9uZyBzYXZlZF9jb250ZXh0X2VzcCwgc2F2ZWRfY29udGV4dF9lYnAsIHNhdmVkX2NvbnRleHRfZXNpLCBzYXZlZF9jb250ZXh0X2VkaTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHNhdmVkX2NvbnRleHRfcjA4LCBzYXZlZF9jb250ZXh0X3IwOSwgc2F2ZWRfY29udGV4dF9yMTAsIHNhdmVkX2NvbnRleHRfcjExOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc2F2ZWRfY29udGV4dF9yMTIsIHNhdmVkX2NvbnRleHRfcjEzLCBzYXZlZF9jb250ZXh0X3IxNCwgc2F2ZWRfY29udGV4dF9yMTU7CitleHRlcm4gdW5zaWduZWQgbG9uZyBzYXZlZF9jb250ZXh0X2VmbGFnczsKKworI2RlZmluZSBsb2FkZGVidWcodGhyZWFkLHJlZ2lzdGVyKSBcCisgICAgICAgICAgICAgICBfX2FzbV9fKCJtb3ZxICUwLCUlZGIiICNyZWdpc3RlciAgXAorICAgICAgICAgICAgICAgICAgICAgICA6IC8qIG5vIG91dHB1dCAqLyBcCisgICAgICAgICAgICAgICAgICAgICAgIDoiciIgKCh0aHJlYWQpLT5kZWJ1Z3JlZyMjcmVnaXN0ZXIpKQorCitleHRlcm4gdm9pZCBmaXhfcHJvY2Vzc29yX2NvbnRleHQodm9pZCk7CisKKyNpZmRlZiBDT05GSUdfQUNQSV9TTEVFUAorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc2F2ZWRfZWlwOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc2F2ZWRfZXNwOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc2F2ZWRfZWJwOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc2F2ZWRfZWJ4OworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc2F2ZWRfZXNpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc2F2ZWRfZWRpOworCisvKiByb3V0aW5lcyBmb3Igc2F2aW5nL3Jlc3RvcmluZyBrZXJuZWwgc3RhdGUgKi8KK2V4dGVybiBpbnQgYWNwaV9zYXZlX3N0YXRlX21lbSh2b2lkKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L3N3aW90bGIuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9zd2lvdGxiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzYyOTMwNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9zd2lvdGxiLmgKQEAgLTAsMCArMSw0MCBAQAorI2lmbmRlZiBfQVNNX1NXSU9UTEJfSAorI2RlZmluZSBfQVNNX1NXVElPTEJfSCAxCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworLyogU1dJT1RMQiBpbnRlcmZhY2UgKi8KKworZXh0ZXJuIGRtYV9hZGRyX3Qgc3dpb3RsYl9tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCB2b2lkICpwdHIsIHNpemVfdCBzaXplLAorCQkJCSAgICAgIGludCBkaXIpOworZXh0ZXJuIHZvaWQgc3dpb3RsYl91bm1hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqaHdkZXYsIGRtYV9hZGRyX3QgZGV2X2FkZHIsCisJCQkJICBzaXplX3Qgc2l6ZSwgaW50IGRpcik7CitleHRlcm4gdm9pZCBzd2lvdGxiX3N5bmNfc2luZ2xlX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqaHdkZXYsCisJCQkJCSBkbWFfYWRkcl90IGRldl9hZGRyLAorCQkJCQkgc2l6ZV90IHNpemUsIGludCBkaXIpOworZXh0ZXJuIHZvaWQgc3dpb3RsYl9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LAorCQkJCQkgICAgZG1hX2FkZHJfdCBkZXZfYWRkciwKKwkJCQkJICAgIHNpemVfdCBzaXplLCBpbnQgZGlyKTsKK2V4dGVybiB2b2lkIHN3aW90bGJfc3luY19zZ19mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmh3ZGV2LAorCQkJCSAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbGVtcywKKwkJCQkgICAgIGludCBkaXIpOworZXh0ZXJuIHZvaWQgc3dpb3RsYl9zeW5jX3NnX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqaHdkZXYsCisJCQkJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZWxlbXMsCisJCQkJCWludCBkaXIpOworZXh0ZXJuIGludCBzd2lvdGxiX21hcF9zZyhzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwkJICAgICAgaW50IG5lbnRzLCBpbnQgZGlyZWN0aW9uKTsKK2V4dGVybiB2b2lkIHN3aW90bGJfdW5tYXBfc2coc3RydWN0IGRldmljZSAqaHdkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJCQkgaW50IG5lbnRzLCBpbnQgZGlyZWN0aW9uKTsKK2V4dGVybiBpbnQgc3dpb3RsYl9kbWFfbWFwcGluZ19lcnJvcihkbWFfYWRkcl90IGRtYV9hZGRyKTsKK2V4dGVybiB2b2lkICpzd2lvdGxiX2FsbG9jX2NvaGVyZW50IChzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc2l6ZV90IHNpemUsCisJCQkJICAgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBpbnQgZmxhZ3MpOworZXh0ZXJuIHZvaWQgc3dpb3RsYl9mcmVlX2NvaGVyZW50IChzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc2l6ZV90IHNpemUsCisJCQkJICAgdm9pZCAqdmFkZHIsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSk7CisKKyNpZmRlZiBDT05GSUdfU1dJT1RMQgorZXh0ZXJuIGludCBzd2lvdGxiOworI2Vsc2UKKyNkZWZpbmUgc3dpb3RsYiAwCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvc3lzdGVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzYxNjU3MwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9zeXN0ZW0uaApAQCAtMCwwICsxLDM0MyBAQAorI2lmbmRlZiBfX0FTTV9TWVNURU1fSAorI2RlZmluZSBfX0FTTV9TWVNURU1fSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KKworI2lmZGVmIF9fS0VSTkVMX18KKworI2lmZGVmIENPTkZJR19TTVAKKyNkZWZpbmUgTE9DS19QUkVGSVggImxvY2sgOyAiCisjZWxzZQorI2RlZmluZSBMT0NLX1BSRUZJWCAiIgorI2VuZGlmCisKKyNkZWZpbmUgX19TVFIoeCkgI3gKKyNkZWZpbmUgU1RSKHgpIF9fU1RSKHgpCisKKyNkZWZpbmUgX19TQVZFKHJlZyxvZmZzZXQpICJtb3ZxICUlIiAjcmVnICIsKDE0LSIgI29mZnNldCAiKSo4KCUlcnNwKVxuXHQiCisjZGVmaW5lIF9fUkVTVE9SRShyZWcsb2Zmc2V0KSAibW92cSAoMTQtIiAjb2Zmc2V0ICIpKjgoJSVyc3ApLCUlIiAjcmVnICJcblx0IgorCisvKiBmcmFtZSBwb2ludGVyIG11c3QgYmUgbGFzdCBmb3IgZ2V0X3djaGFuICovCisjZGVmaW5lIFNBVkVfQ09OVEVYVCAgICAicHVzaGZxIDsgcHVzaHEgJSVyYnAgOyBtb3ZxICUlcnNpLCUlcmJwXG5cdCIKKyNkZWZpbmUgUkVTVE9SRV9DT05URVhUICJtb3ZxICUlcmJwLCUlcnNpIDsgcG9wcSAlJXJicCA7IHBvcGZxXG5cdCIgCisKKyNkZWZpbmUgX19FWFRSQV9DTE9CQkVSICBcCisJLCJyY3giLCJyYngiLCJyZHgiLCJyOCIsInI5IiwicjEwIiwicjExIiwicjEyIiwicjEzIiwicjE0IiwicjE1IgorCisjZGVmaW5lIHN3aXRjaF90byhwcmV2LG5leHQsbGFzdCkgXAorCWFzbSB2b2xhdGlsZShTQVZFX0NPTlRFWFQJCQkJCQkgICAgXAorCQkgICAgICJtb3ZxICUlcnNwLCVQW3RocmVhZHJzcF0oJVtwcmV2XSlcblx0IiAvKiBzYXZlIFJTUCAqLwkgIFwKKwkJICAgICAibW92cSAlUFt0aHJlYWRyc3BdKCVbbmV4dF0pLCUlcnNwXG5cdCIgLyogcmVzdG9yZSBSU1AgKi8JICBcCisJCSAgICAgImNhbGwgX19zd2l0Y2hfdG9cblx0IgkJCQkJICBcCisJCSAgICAgIi5nbG9ibCB0aHJlYWRfcmV0dXJuXG4iCQkJCQlcCisJCSAgICAgInRocmVhZF9yZXR1cm46XG5cdCIJCQkJCSAgICBcCisJCSAgICAgIm1vdnEgJSVnczolUFtwZGFfcGN1cnJlbnRdLCUlcnNpXG5cdCIJCQkgIFwKKwkJICAgICAibW92cSAlUFt0aHJlYWRfaW5mb10oJSVyc2kpLCUlcjhcblx0IgkJCSAgXAorCQkgICAgIExPQ0sgImJ0ciAgJVt0aWZfZm9ya10sJVBbdGlfZmxhZ3NdKCUlcjgpXG5cdCIJCSAgXAorCQkgICAgICJtb3ZxICUlcmF4LCUlcmRpXG5cdCIgCQkJCQkgIFwKKwkJICAgICAiamMgICByZXRfZnJvbV9mb3JrXG5cdCIJCQkJCSAgXAorCQkgICAgIFJFU1RPUkVfQ09OVEVYVAkJCQkJCSAgICBcCisJCSAgICAgOiAiPWEiIChsYXN0KQkJCQkJICAJICBcCisJCSAgICAgOiBbbmV4dF0gIlMiIChuZXh0KSwgW3ByZXZdICJEIiAocHJldiksCQkJICBcCisJCSAgICAgICBbdGhyZWFkcnNwXSAiaSIgKG9mZnNldG9mKHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLnJzcCkpLCBcCisJCSAgICAgICBbdGlfZmxhZ3NdICJpIiAob2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9pbmZvLCBmbGFncykpLFwKKwkJICAgICAgIFt0aWZfZm9ya10gImkiIChUSUZfRk9SSyksCQkJICBcCisJCSAgICAgICBbdGhyZWFkX2luZm9dICJpIiAob2Zmc2V0b2Yoc3RydWN0IHRhc2tfc3RydWN0LCB0aHJlYWRfaW5mbykpLCBcCisJCSAgICAgICBbcGRhX3BjdXJyZW50XSAiaSIgKG9mZnNldG9mKHN0cnVjdCB4ODY2NF9wZGEsIHBjdXJyZW50KSkgICBcCisJCSAgICAgOiAibWVtb3J5IiwgImNjIiBfX0VYVFJBX0NMT0JCRVIpCisgICAgCitleHRlcm4gdm9pZCBsb2FkX2dzX2luZGV4KHVuc2lnbmVkKTsgCisKKy8qCisgKiBMb2FkIGEgc2VnbWVudC4gRmFsbCBiYWNrIG9uIGxvYWRpbmcgdGhlIHplcm8KKyAqIHNlZ21lbnQgaWYgc29tZXRoaW5nIGdvZXMgd3JvbmcuLgorICovCisjZGVmaW5lIGxvYWRzZWdtZW50KHNlZyx2YWx1ZSkJXAorCWFzbSB2b2xhdGlsZSgiXG4iCQkJXAorCQkiMTpcdCIJCQkJXAorCQkibW92bCAlazAsJSUiICNzZWcgIlxuIgkJXAorCQkiMjpcbiIJCQkJXAorCQkiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIglcCisJCSIzOlx0IgkJCQlcCisJCSJtb3ZsICUxLCUlIiAjc2VnICJcblx0IiAJXAorCQkiam1wIDJiXG4iCQkJXAorCQkiLnByZXZpb3VzXG4iCQkJXAorCQkiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuXHQiCVwKKwkJIi5hbGlnbiA4XG5cdCIJCQlcCisJCSIucXVhZCAxYiwzYlxuIgkJCVwKKwkJIi5wcmV2aW91cyIJCQlcCisJCTogOiJyIiAodmFsdWUpLCAiciIgKDApKQorCisjZGVmaW5lIHNldF9kZWJ1Zyh2YWx1ZSxyZWdpc3RlcikgXAorICAgICAgICAgICAgICAgIF9fYXNtX18oIm1vdnEgJTAsJSVkYiIgI3JlZ2lzdGVyICBcCisJCTogLyogbm8gb3V0cHV0ICovIFwKKwkJOiJyIiAoKHVuc2lnbmVkIGxvbmcpIHZhbHVlKSkKKworCisjaWZkZWYgX19LRVJORUxfXworc3RydWN0IGFsdF9pbnN0ciB7IAorCV9fdTggKmluc3RyOyAJCS8qIG9yaWdpbmFsIGluc3RydWN0aW9uICovCisJX191OCAqcmVwbGFjZW1lbnQ7CisJX191OCAgY3B1aWQ7CQkvKiBjcHVpZCBiaXQgc2V0IGZvciByZXBsYWNlbWVudCAqLworCV9fdTggIGluc3RybGVuOwkJLyogbGVuZ3RoIG9mIG9yaWdpbmFsIGluc3RydWN0aW9uICovCisJX191OCAgcmVwbGFjZW1lbnRsZW47IAkvKiBsZW5ndGggb2YgbmV3IGluc3RydWN0aW9uLCA8PSBpbnN0cmxlbiAqLyAKKwlfX3U4ICBwYWRbNV07Cit9OyAKKyNlbmRpZgorCisvKgorICogQWx0ZXJuYXRpdmUgaW5zdHJ1Y3Rpb25zIGZvciBkaWZmZXJlbnQgQ1BVIHR5cGVzIG9yIGNhcGFiaWxpdGllcy4KKyAqIAorICogVGhpcyBhbGxvd3MgdG8gdXNlIG9wdGltaXplZCBpbnN0cnVjdGlvbnMgZXZlbiBvbiBnZW5lcmljIGJpbmFyeQorICoga2VybmVscy4KKyAqIAorICogbGVuZ3RoIG9mIG9sZGluc3RyIG11c3QgYmUgbG9uZ2VyIG9yIGVxdWFsIHRoZSBsZW5ndGggb2YgbmV3aW5zdHIKKyAqIEl0IGNhbiBiZSBwYWRkZWQgd2l0aCBub3BzIGFzIG5lZWRlZC4KKyAqIAorICogRm9yIG5vbiBiYXJyaWVyIGxpa2UgaW5saW5lcyBwbGVhc2UgZGVmaW5lIG5ldyB2YXJpYW50cworICogd2l0aG91dCB2b2xhdGlsZSBhbmQgbWVtb3J5IGNsb2JiZXIuCisgKi8KKyNkZWZpbmUgYWx0ZXJuYXRpdmUob2xkaW5zdHIsIG5ld2luc3RyLCBmZWF0dXJlKSAJXAorCWFzbSB2b2xhdGlsZSAoIjY2MTpcblx0IiBvbGRpbnN0ciAiXG42NjI6XG4iIAkJICAgICBcCisJCSAgICAgICIuc2VjdGlvbiAuYWx0aW5zdHJ1Y3Rpb25zLFwiYVwiXG4iICAgICAJICAgICBcCisJCSAgICAgICIgIC5hbGlnbiA4XG4iCQkJCSAgICAgICBcCisJCSAgICAgICIgIC5xdWFkIDY2MWJcbiIgICAgICAgICAgICAvKiBsYWJlbCAqLyAgICAgICAgICBcCisJCSAgICAgICIgIC5xdWFkIDY2M2ZcbiIJCSAgLyogbmV3IGluc3RydWN0aW9uICovIFwKKwkJICAgICAgIiAgLmJ5dGUgJWMwXG4iICAgICAgICAgICAgIC8qIGZlYXR1cmUgYml0ICovICAgIFwKKwkJICAgICAgIiAgLmJ5dGUgNjYyYi02NjFiXG4iICAgICAgIC8qIHNvdXJjZWxlbiAqLyAgICAgIFwKKwkJICAgICAgIiAgLmJ5dGUgNjY0Zi02NjNmXG4iICAgICAgIC8qIHJlcGxhY2VtZW50bGVuICovIFwKKwkJICAgICAgIi5wcmV2aW91c1xuIgkJCQkJXAorCQkgICAgICAiLnNlY3Rpb24gLmFsdGluc3RyX3JlcGxhY2VtZW50LFwiYXhcIlxuIgkJXAorCQkgICAgICAiNjYzOlxuXHQiIG5ld2luc3RyICJcbjY2NDpcbiIgICAvKiByZXBsYWNlbWVudCAqLyBcCisJCSAgICAgICIucHJldmlvdXMiIDo6ICJpIiAoZmVhdHVyZSkgOiAibWVtb3J5IikgIAorCisvKgorICogQWx0ZXJuYXRpdmUgaW5saW5lIGFzc2VtYmx5IHdpdGggaW5wdXQuCisgKiAKKyAqIFBlY3VsYXJpdGllczoKKyAqIE5vIG1lbW9yeSBjbG9iYmVyIGhlcmUuIAorICogQXJndW1lbnQgbnVtYmVycyBzdGFydCB3aXRoIDEuCisgKiBCZXN0IGlzIHRvIHVzZSBjb25zdHJhaW50cyB0aGF0IGFyZSBmaXhlZCBzaXplIChsaWtlICglMSkgLi4uICJyIikKKyAqIElmIHlvdSB1c2UgdmFyaWFibGUgc2l6ZWQgY29uc3RyYWludHMgbGlrZSAibSIgb3IgImciIGluIHRoZSAKKyAqIHJlcGxhY2VtZW50IG1hYWtlIHN1cmUgdG8gcGFkIHRvIHRoZSB3b3JzdCBjYXNlIGxlbmd0aC4KKyAqLworI2RlZmluZSBhbHRlcm5hdGl2ZV9pbnB1dChvbGRpbnN0ciwgbmV3aW5zdHIsIGZlYXR1cmUsIGlucHV0Li4uKQlcCisJYXNtIHZvbGF0aWxlICgiNjYxOlxuXHQiIG9sZGluc3RyICJcbjY2MjpcbiIJCQlcCisJCSAgICAgICIuc2VjdGlvbiAuYWx0aW5zdHJ1Y3Rpb25zLFwiYVwiXG4iCQlcCisJCSAgICAgICIgIC5hbGlnbiA4XG4iCQkJCQlcCisJCSAgICAgICIgIC5xdWFkIDY2MWJcbiIgICAgICAgICAgICAvKiBsYWJlbCAqLwkJXAorCQkgICAgICAiICAucXVhZCA2NjNmXG4iCQkgIC8qIG5ldyBpbnN0cnVjdGlvbiAqLwlcCisJCSAgICAgICIgIC5ieXRlICVjMFxuIiAgICAgICAgICAgICAvKiBmZWF0dXJlIGJpdCAqLwlcCisJCSAgICAgICIgIC5ieXRlIDY2MmItNjYxYlxuIiAgICAgICAvKiBzb3VyY2VsZW4gKi8JXAorCQkgICAgICAiICAuYnl0ZSA2NjRmLTY2M2ZcbiIgICAgICAgLyogcmVwbGFjZW1lbnRsZW4gKi8JXAorCQkgICAgICAiLnByZXZpb3VzXG4iCQkJCQlcCisJCSAgICAgICIuc2VjdGlvbiAuYWx0aW5zdHJfcmVwbGFjZW1lbnQsXCJheFwiXG4iCQlcCisJCSAgICAgICI2NjM6XG5cdCIgbmV3aW5zdHIgIlxuNjY0OlxuIiAgIC8qIHJlcGxhY2VtZW50ICovIFwKKwkJICAgICAgIi5wcmV2aW91cyIgOjogImkiIChmZWF0dXJlKSwgIyNpbnB1dCkKKworLyoKKyAqIENsZWFyIGFuZCBzZXQgJ1RTJyBiaXQgcmVzcGVjdGl2ZWx5CisgKi8KKyNkZWZpbmUgY2x0cygpIF9fYXNtX18gX192b2xhdGlsZV9fICgiY2x0cyIpCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyByZWFkX2NyMCh2b2lkKQoreyAKKwl1bnNpZ25lZCBsb25nIGNyMDsKKwlhc20gdm9sYXRpbGUoIm1vdnEgJSVjcjAsJTAiIDogIj1yIiAoY3IwKSk7CisJcmV0dXJuIGNyMDsKK30gCisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZV9jcjAodW5zaWduZWQgbG9uZyB2YWwpIAoreyAKKwlhc20gdm9sYXRpbGUoIm1vdnEgJTAsJSVjcjAiIDo6ICJyIiAodmFsKSk7Cit9IAorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcmVhZF9jcjModm9pZCkKK3sgCisJdW5zaWduZWQgbG9uZyBjcjM7CisJYXNtKCJtb3ZxICUlY3IzLCUwIiA6ICI9ciIgKGNyMykpOworCXJldHVybiBjcjM7Cit9IAorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcmVhZF9jcjQodm9pZCkKK3sgCisJdW5zaWduZWQgbG9uZyBjcjQ7CisJYXNtKCJtb3ZxICUlY3I0LCUwIiA6ICI9ciIgKGNyNCkpOworCXJldHVybiBjcjQ7Cit9IAorCitzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVfY3I0KHVuc2lnbmVkIGxvbmcgdmFsKQoreyAKKwlhc20gdm9sYXRpbGUoIm1vdnEgJTAsJSVjcjQiIDo6ICJyIiAodmFsKSk7Cit9IAorCisjZGVmaW5lIHN0dHMoKSB3cml0ZV9jcjAoOCB8IHJlYWRfY3IwKCkpCisKKyNkZWZpbmUgd2JpbnZkKCkgXAorCV9fYXNtX18gX192b2xhdGlsZV9fICgid2JpbnZkIjogOiA6Im1lbW9yeSIpOworCisjZW5kaWYJLyogX19LRVJORUxfXyAqLworCisjZGVmaW5lIG5vcCgpIF9fYXNtX18gX192b2xhdGlsZV9fICgibm9wIikKKworI2RlZmluZSB4Y2hnKHB0cix2KSAoKF9fdHlwZW9mX18oKihwdHIpKSlfX3hjaGcoKHVuc2lnbmVkIGxvbmcpKHYpLChwdHIpLHNpemVvZigqKHB0cikpKSkKKworI2RlZmluZSB0YXMocHRyKSAoeGNoZygocHRyKSwxKSkKKworI2RlZmluZSBfX3hnKHgpICgodm9sYXRpbGUgbG9uZyAqKSh4KSkKKworZXh0ZXJuIGlubGluZSB2b2lkIHNldF82NGJpdCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICpwdHIsIHVuc2lnbmVkIGxvbmcgdmFsKQoreworCSpwdHIgPSB2YWw7Cit9CisKKyNkZWZpbmUgX3NldF82NGJpdCBzZXRfNjRiaXQKKworLyoKKyAqIE5vdGU6IG5vICJsb2NrIiBwcmVmaXggZXZlbiBvbiBTTVA6IHhjaGcgYWx3YXlzIGltcGxpZXMgbG9jayBhbnl3YXkKKyAqIE5vdGUgMjogeGNoZyBoYXMgc2lkZSBlZmZlY3QsIHNvIHRoYXQgYXR0cmlidXRlIHZvbGF0aWxlIGlzIG5lY2Vzc2FyeSwKKyAqCSAgYnV0IGdlbmVyYWxseSB0aGUgcHJpbWl0aXZlIGlzIGludmFsaWQsICpwdHIgaXMgb3V0cHV0IGFyZ3VtZW50LiAtLUFOSworICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX194Y2hnKHVuc2lnbmVkIGxvbmcgeCwgdm9sYXRpbGUgdm9pZCAqIHB0ciwgaW50IHNpemUpCit7CisJc3dpdGNoIChzaXplKSB7CisJCWNhc2UgMToKKwkJCV9fYXNtX18gX192b2xhdGlsZV9fKCJ4Y2hnYiAlYjAsJTEiCisJCQkJOiI9cSIgKHgpCisJCQkJOiJtIiAoKl9feGcocHRyKSksICIwIiAoeCkKKwkJCQk6Im1lbW9yeSIpOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCV9fYXNtX18gX192b2xhdGlsZV9fKCJ4Y2hndyAldzAsJTEiCisJCQkJOiI9ciIgKHgpCisJCQkJOiJtIiAoKl9feGcocHRyKSksICIwIiAoeCkKKwkJCQk6Im1lbW9yeSIpOworCQkJYnJlYWs7CisJCWNhc2UgNDoKKwkJCV9fYXNtX18gX192b2xhdGlsZV9fKCJ4Y2hnbCAlazAsJTEiCisJCQkJOiI9ciIgKHgpCisJCQkJOiJtIiAoKl9feGcocHRyKSksICIwIiAoeCkKKwkJCQk6Im1lbW9yeSIpOworCQkJYnJlYWs7CisJCWNhc2UgODoKKwkJCV9fYXNtX18gX192b2xhdGlsZV9fKCJ4Y2hncSAlMCwlMSIKKwkJCQk6Ij1yIiAoeCkKKwkJCQk6Im0iICgqX194ZyhwdHIpKSwgIjAiICh4KQorCQkJCToibWVtb3J5Iik7CisJCQlicmVhazsKKwl9CisJcmV0dXJuIHg7Cit9CisKKy8qCisgKiBBdG9taWMgY29tcGFyZSBhbmQgZXhjaGFuZ2UuICBDb21wYXJlIE9MRCB3aXRoIE1FTSwgaWYgaWRlbnRpY2FsLAorICogc3RvcmUgTkVXIGluIE1FTS4gIFJldHVybiB0aGUgaW5pdGlhbCB2YWx1ZSBpbiBNRU0uICBTdWNjZXNzIGlzCisgKiBpbmRpY2F0ZWQgYnkgY29tcGFyaW5nIFJFVFVSTiB3aXRoIE9MRC4KKyAqLworCisjZGVmaW5lIF9fSEFWRV9BUkNIX0NNUFhDSEcgMQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19jbXB4Y2hnKHZvbGF0aWxlIHZvaWQgKnB0ciwgdW5zaWduZWQgbG9uZyBvbGQsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBuZXcsIGludCBzaXplKQoreworCXVuc2lnbmVkIGxvbmcgcHJldjsKKwlzd2l0Y2ggKHNpemUpIHsKKwljYXNlIDE6CisJCV9fYXNtX18gX192b2xhdGlsZV9fKExPQ0tfUFJFRklYICJjbXB4Y2hnYiAlYjEsJTIiCisJCQkJICAgICA6ICI9YSIocHJldikKKwkJCQkgICAgIDogInEiKG5ldyksICJtIigqX194ZyhwdHIpKSwgIjAiKG9sZCkKKwkJCQkgICAgIDogIm1lbW9yeSIpOworCQlyZXR1cm4gcHJldjsKKwljYXNlIDI6CisJCV9fYXNtX18gX192b2xhdGlsZV9fKExPQ0tfUFJFRklYICJjbXB4Y2hndyAldzEsJTIiCisJCQkJICAgICA6ICI9YSIocHJldikKKwkJCQkgICAgIDogInEiKG5ldyksICJtIigqX194ZyhwdHIpKSwgIjAiKG9sZCkKKwkJCQkgICAgIDogIm1lbW9yeSIpOworCQlyZXR1cm4gcHJldjsKKwljYXNlIDQ6CisJCV9fYXNtX18gX192b2xhdGlsZV9fKExPQ0tfUFJFRklYICJjbXB4Y2hnbCAlazEsJTIiCisJCQkJICAgICA6ICI9YSIocHJldikKKwkJCQkgICAgIDogInEiKG5ldyksICJtIigqX194ZyhwdHIpKSwgIjAiKG9sZCkKKwkJCQkgICAgIDogIm1lbW9yeSIpOworCQlyZXR1cm4gcHJldjsKKwljYXNlIDg6CisJCV9fYXNtX18gX192b2xhdGlsZV9fKExPQ0tfUFJFRklYICJjbXB4Y2hncSAlMSwlMiIKKwkJCQkgICAgIDogIj1hIihwcmV2KQorCQkJCSAgICAgOiAicSIobmV3KSwgIm0iKCpfX3hnKHB0cikpLCAiMCIob2xkKQorCQkJCSAgICAgOiAibWVtb3J5Iik7CisJCXJldHVybiBwcmV2OworCX0KKwlyZXR1cm4gb2xkOworfQorCisjZGVmaW5lIGNtcHhjaGcocHRyLG8sbilcCisJKChfX3R5cGVvZl9fKCoocHRyKSkpX19jbXB4Y2hnKChwdHIpLCh1bnNpZ25lZCBsb25nKShvKSxcCisJCQkJCSh1bnNpZ25lZCBsb25nKShuKSxzaXplb2YoKihwdHIpKSkpCisKKyNpZmRlZiBDT05GSUdfU01QCisjZGVmaW5lIHNtcF9tYigpCW1iKCkKKyNkZWZpbmUgc21wX3JtYigpCXJtYigpCisjZGVmaW5lIHNtcF93bWIoKQl3bWIoKQorI2RlZmluZSBzbXBfcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQlkbyB7fSB3aGlsZSgwKQorI2Vsc2UKKyNkZWZpbmUgc21wX21iKCkJYmFycmllcigpCisjZGVmaW5lIHNtcF9ybWIoKQliYXJyaWVyKCkKKyNkZWZpbmUgc21wX3dtYigpCWJhcnJpZXIoKQorI2RlZmluZSBzbXBfcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQlkbyB7fSB3aGlsZSgwKQorI2VuZGlmCisKKyAgICAKKy8qCisgKiBGb3JjZSBzdHJpY3QgQ1BVIG9yZGVyaW5nLgorICogQW5kIHllcywgdGhpcyBpcyByZXF1aXJlZCBvbiBVUCB0b28gd2hlbiB3ZSdyZSB0YWxraW5nCisgKiB0byBkZXZpY2VzLgorICovCisjZGVmaW5lIG1iKCkgCWFzbSB2b2xhdGlsZSgibWZlbmNlIjo6OiJtZW1vcnkiKQorI2RlZmluZSBybWIoKQlhc20gdm9sYXRpbGUoImxmZW5jZSI6OjoibWVtb3J5IikKKworI2lmZGVmIENPTkZJR19VTk9SREVSRURfSU8KKyNkZWZpbmUgd21iKCkJYXNtIHZvbGF0aWxlKCJzZmVuY2UiIDo6OiAibWVtb3J5IikKKyNlbHNlCisjZGVmaW5lIHdtYigpCWFzbSB2b2xhdGlsZSgiIiA6OjogIm1lbW9yeSIpCisjZW5kaWYKKyNkZWZpbmUgcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQlkbyB7fSB3aGlsZSgwKQorI2RlZmluZSBzZXRfbWIodmFyLCB2YWx1ZSkgZG8geyB4Y2hnKCZ2YXIsIHZhbHVlKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgc2V0X3dtYih2YXIsIHZhbHVlKSBkbyB7IHZhciA9IHZhbHVlOyB3bWIoKTsgfSB3aGlsZSAoMCkKKworI2RlZmluZSB3YXJuX2lmX25vdF91bG9uZyh4KSBkbyB7IHVuc2lnbmVkIGxvbmcgZm9vOyAodm9pZCkgKCYoeCkgPT0gJmZvbyk7IH0gd2hpbGUgKDApCisKKy8qIGludGVycnVwdCBjb250cm9sLi4gKi8KKyNkZWZpbmUgbG9jYWxfc2F2ZV9mbGFncyh4KQlkbyB7IHdhcm5faWZfbm90X3Vsb25nKHgpOyBfX2FzbV9fIF9fdm9sYXRpbGVfXygiIyBzYXZlX2ZsYWdzIFxuXHQgcHVzaGZxIDsgcG9wcSAlcTAiOiI9ZyIgKHgpOiAvKiBubyBpbnB1dCAqLyA6Im1lbW9yeSIpOyB9IHdoaWxlICgwKQorI2RlZmluZSBsb2NhbF9pcnFfcmVzdG9yZSh4KSAJX19hc21fXyBfX3ZvbGF0aWxlX18oIiMgcmVzdG9yZV9mbGFncyBcblx0IHB1c2hxICUwIDsgcG9wZnEiOiAvKiBubyBvdXRwdXQgKi8gOiJnIiAoeCk6Im1lbW9yeSIsICJjYyIpCisjZGVmaW5lIGxvY2FsX2lycV9kaXNhYmxlKCkgCV9fYXNtX18gX192b2xhdGlsZV9fKCJjbGkiOiA6IDoibWVtb3J5IikKKyNkZWZpbmUgbG9jYWxfaXJxX2VuYWJsZSgpCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdGkiOiA6IDoibWVtb3J5IikKKy8qIHVzZWQgaW4gdGhlIGlkbGUgbG9vcDsgc3RpIHRha2VzIG9uZSBpbnN0cnVjdGlvbiBjeWNsZSB0byBjb21wbGV0ZSAqLworI2RlZmluZSBzYWZlX2hhbHQoKQkJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0aTsgaGx0IjogOiA6Im1lbW9yeSIpCisKKyNkZWZpbmUgaXJxc19kaXNhYmxlZCgpCQkJXAorKHsJCQkJCVwKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwkJXAorCWxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpOwlcCisJIShmbGFncyAmICgxPDw5KSk7CQlcCit9KQorCisvKiBGb3Igc3BpbmxvY2tzIGV0YyAqLworI2RlZmluZSBsb2NhbF9pcnFfc2F2ZSh4KSAJZG8geyB3YXJuX2lmX25vdF91bG9uZyh4KTsgX19hc21fXyBfX3ZvbGF0aWxlX18oIiMgbG9jYWxfaXJxX3NhdmUgXG5cdCBwdXNoZnEgOyBwb3BxICUwIDsgY2xpIjoiPWciICh4KTogLyogbm8gaW5wdXQgKi8gOiJtZW1vcnkiKTsgfSB3aGlsZSAoMCkKKwordm9pZCBjcHVfaWRsZV93YWl0KHZvaWQpOworCisvKgorICogZGlzYWJsZSBobHQgZHVyaW5nIGNlcnRhaW4gY3JpdGljYWwgaS9vIG9wZXJhdGlvbnMKKyAqLworI2RlZmluZSBIQVZFX0RJU0FCTEVfSExUCit2b2lkIGRpc2FibGVfaGx0KHZvaWQpOwordm9pZCBlbmFibGVfaGx0KHZvaWQpOworCisjZGVmaW5lIEhBVkVfRUFUX0tFWQordm9pZCBlYXRfa2V5KHZvaWQpOworCitleHRlcm4gdW5zaWduZWQgbG9uZyBhcmNoX2FsaWduX3N0YWNrKHVuc2lnbmVkIGxvbmcgc3ApOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC90ZXJtYml0cy5oIGIvaW5jbHVkZS9hc20teDg2XzY0L3Rlcm1iaXRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQ5NTA5NAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC90ZXJtYml0cy5oCkBAIC0wLDAgKzEsMTczIEBACisjaWZuZGVmIF9fQVJDSF9YODY2NF9URVJNQklUU19IX18KKyNkZWZpbmUgX19BUkNIX1g4NjY0X1RFUk1CSVRTX0hfXworCisjaW5jbHVkZSA8bGludXgvcG9zaXhfdHlwZXMuaD4KKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyCWNjX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludAlzcGVlZF90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQJdGNmbGFnX3Q7CisKKyNkZWZpbmUgTkNDUyAxOQorc3RydWN0IHRlcm1pb3MgeworCXRjZmxhZ190IGNfaWZsYWc7CQkvKiBpbnB1dCBtb2RlIGZsYWdzICovCisJdGNmbGFnX3QgY19vZmxhZzsJCS8qIG91dHB1dCBtb2RlIGZsYWdzICovCisJdGNmbGFnX3QgY19jZmxhZzsJCS8qIGNvbnRyb2wgbW9kZSBmbGFncyAqLworCXRjZmxhZ190IGNfbGZsYWc7CQkvKiBsb2NhbCBtb2RlIGZsYWdzICovCisJY2NfdCBjX2xpbmU7CQkJLyogbGluZSBkaXNjaXBsaW5lICovCisJY2NfdCBjX2NjW05DQ1NdOwkJLyogY29udHJvbCBjaGFyYWN0ZXJzICovCit9OworCisvKiBjX2NjIGNoYXJhY3RlcnMgKi8KKyNkZWZpbmUgVklOVFIgMAorI2RlZmluZSBWUVVJVCAxCisjZGVmaW5lIFZFUkFTRSAyCisjZGVmaW5lIFZLSUxMIDMKKyNkZWZpbmUgVkVPRiA0CisjZGVmaW5lIFZUSU1FIDUKKyNkZWZpbmUgVk1JTiA2CisjZGVmaW5lIFZTV1RDIDcKKyNkZWZpbmUgVlNUQVJUIDgKKyNkZWZpbmUgVlNUT1AgOQorI2RlZmluZSBWU1VTUCAxMAorI2RlZmluZSBWRU9MIDExCisjZGVmaW5lIFZSRVBSSU5UIDEyCisjZGVmaW5lIFZESVNDQVJEIDEzCisjZGVmaW5lIFZXRVJBU0UgMTQKKyNkZWZpbmUgVkxORVhUIDE1CisjZGVmaW5lIFZFT0wyIDE2CisKKy8qIGNfaWZsYWcgYml0cyAqLworI2RlZmluZSBJR05CUksJMDAwMDAwMQorI2RlZmluZSBCUktJTlQJMDAwMDAwMgorI2RlZmluZSBJR05QQVIJMDAwMDAwNAorI2RlZmluZSBQQVJNUksJMDAwMDAxMAorI2RlZmluZSBJTlBDSwkwMDAwMDIwCisjZGVmaW5lIElTVFJJUAkwMDAwMDQwCisjZGVmaW5lIElOTENSCTAwMDAxMDAKKyNkZWZpbmUgSUdOQ1IJMDAwMDIwMAorI2RlZmluZSBJQ1JOTAkwMDAwNDAwCisjZGVmaW5lIElVQ0xDCTAwMDEwMDAKKyNkZWZpbmUgSVhPTgkwMDAyMDAwCisjZGVmaW5lIElYQU5ZCTAwMDQwMDAKKyNkZWZpbmUgSVhPRkYJMDAxMDAwMAorI2RlZmluZSBJTUFYQkVMCTAwMjAwMDAKKyNkZWZpbmUgSVVURjgJMDA0MDAwMAorCisvKiBjX29mbGFnIGJpdHMgKi8KKyNkZWZpbmUgT1BPU1QJMDAwMDAwMQorI2RlZmluZSBPTENVQwkwMDAwMDAyCisjZGVmaW5lIE9OTENSCTAwMDAwMDQKKyNkZWZpbmUgT0NSTkwJMDAwMDAxMAorI2RlZmluZSBPTk9DUgkwMDAwMDIwCisjZGVmaW5lIE9OTFJFVAkwMDAwMDQwCisjZGVmaW5lIE9GSUxMCTAwMDAxMDAKKyNkZWZpbmUgT0ZERUwJMDAwMDIwMAorI2RlZmluZSBOTERMWQkwMDAwNDAwCisjZGVmaW5lICAgTkwwCTAwMDAwMDAKKyNkZWZpbmUgICBOTDEJMDAwMDQwMAorI2RlZmluZSBDUkRMWQkwMDAzMDAwCisjZGVmaW5lICAgQ1IwCTAwMDAwMDAKKyNkZWZpbmUgICBDUjEJMDAwMTAwMAorI2RlZmluZSAgIENSMgkwMDAyMDAwCisjZGVmaW5lICAgQ1IzCTAwMDMwMDAKKyNkZWZpbmUgVEFCRExZCTAwMTQwMDAKKyNkZWZpbmUgICBUQUIwCTAwMDAwMDAKKyNkZWZpbmUgICBUQUIxCTAwMDQwMDAKKyNkZWZpbmUgICBUQUIyCTAwMTAwMDAKKyNkZWZpbmUgICBUQUIzCTAwMTQwMDAKKyNkZWZpbmUgICBYVEFCUwkwMDE0MDAwCisjZGVmaW5lIEJTRExZCTAwMjAwMDAKKyNkZWZpbmUgICBCUzAJMDAwMDAwMAorI2RlZmluZSAgIEJTMQkwMDIwMDAwCisjZGVmaW5lIFZURExZCTAwNDAwMDAKKyNkZWZpbmUgICBWVDAJMDAwMDAwMAorI2RlZmluZSAgIFZUMQkwMDQwMDAwCisjZGVmaW5lIEZGRExZCTAxMDAwMDAKKyNkZWZpbmUgICBGRjAJMDAwMDAwMAorI2RlZmluZSAgIEZGMQkwMTAwMDAwCisKKy8qIGNfY2ZsYWcgYml0IG1lYW5pbmcgKi8KKyNkZWZpbmUgQ0JBVUQJMDAxMDAxNworI2RlZmluZSAgQjAJMDAwMDAwMAkJLyogaGFuZyB1cCAqLworI2RlZmluZSAgQjUwCTAwMDAwMDEKKyNkZWZpbmUgIEI3NQkwMDAwMDAyCisjZGVmaW5lICBCMTEwCTAwMDAwMDMKKyNkZWZpbmUgIEIxMzQJMDAwMDAwNAorI2RlZmluZSAgQjE1MAkwMDAwMDA1CisjZGVmaW5lICBCMjAwCTAwMDAwMDYKKyNkZWZpbmUgIEIzMDAJMDAwMDAwNworI2RlZmluZSAgQjYwMAkwMDAwMDEwCisjZGVmaW5lICBCMTIwMAkwMDAwMDExCisjZGVmaW5lICBCMTgwMAkwMDAwMDEyCisjZGVmaW5lICBCMjQwMAkwMDAwMDEzCisjZGVmaW5lICBCNDgwMAkwMDAwMDE0CisjZGVmaW5lICBCOTYwMAkwMDAwMDE1CisjZGVmaW5lICBCMTkyMDAJMDAwMDAxNgorI2RlZmluZSAgQjM4NDAwCTAwMDAwMTcKKyNkZWZpbmUgRVhUQSBCMTkyMDAKKyNkZWZpbmUgRVhUQiBCMzg0MDAKKyNkZWZpbmUgQ1NJWkUJMDAwMDA2MAorI2RlZmluZSAgIENTNQkwMDAwMDAwCisjZGVmaW5lICAgQ1M2CTAwMDAwMjAKKyNkZWZpbmUgICBDUzcJMDAwMDA0MAorI2RlZmluZSAgIENTOAkwMDAwMDYwCisjZGVmaW5lIENTVE9QQgkwMDAwMTAwCisjZGVmaW5lIENSRUFECTAwMDAyMDAKKyNkZWZpbmUgUEFSRU5CCTAwMDA0MDAKKyNkZWZpbmUgUEFST0RECTAwMDEwMDAKKyNkZWZpbmUgSFVQQ0wJMDAwMjAwMAorI2RlZmluZSBDTE9DQUwJMDAwNDAwMAorI2RlZmluZSBDQkFVREVYIDAwMTAwMDAKKyNkZWZpbmUgICAgQjU3NjAwIDAwMTAwMDEKKyNkZWZpbmUgICBCMTE1MjAwIDAwMTAwMDIKKyNkZWZpbmUgICBCMjMwNDAwIDAwMTAwMDMKKyNkZWZpbmUgICBCNDYwODAwIDAwMTAwMDQKKyNkZWZpbmUgICBCNTAwMDAwIDAwMTAwMDUKKyNkZWZpbmUgICBCNTc2MDAwIDAwMTAwMDYKKyNkZWZpbmUgICBCOTIxNjAwIDAwMTAwMDcKKyNkZWZpbmUgIEIxMDAwMDAwIDAwMTAwMTAKKyNkZWZpbmUgIEIxMTUyMDAwIDAwMTAwMTEKKyNkZWZpbmUgIEIxNTAwMDAwIDAwMTAwMTIKKyNkZWZpbmUgIEIyMDAwMDAwIDAwMTAwMTMKKyNkZWZpbmUgIEIyNTAwMDAwIDAwMTAwMTQKKyNkZWZpbmUgIEIzMDAwMDAwIDAwMTAwMTUKKyNkZWZpbmUgIEIzNTAwMDAwIDAwMTAwMTYKKyNkZWZpbmUgIEI0MDAwMDAwIDAwMTAwMTcKKyNkZWZpbmUgQ0lCQVVECSAgMDAyMDAzNjAwMDAwCS8qIGlucHV0IGJhdWQgcmF0ZSAobm90IHVzZWQpICovCisjZGVmaW5lIENNU1BBUgkgIDAxMDAwMDAwMDAwMAkJLyogbWFyayBvciBzcGFjZSAoc3RpY2spIHBhcml0eSAqLworI2RlZmluZSBDUlRTQ1RTCSAgMDIwMDAwMDAwMDAwCQkvKiBmbG93IGNvbnRyb2wgKi8KKworLyogY19sZmxhZyBiaXRzICovCisjZGVmaW5lIElTSUcJMDAwMDAwMQorI2RlZmluZSBJQ0FOT04JMDAwMDAwMgorI2RlZmluZSBYQ0FTRQkwMDAwMDA0CisjZGVmaW5lIEVDSE8JMDAwMDAxMAorI2RlZmluZSBFQ0hPRQkwMDAwMDIwCisjZGVmaW5lIEVDSE9LCTAwMDAwNDAKKyNkZWZpbmUgRUNIT05MCTAwMDAxMDAKKyNkZWZpbmUgTk9GTFNICTAwMDAyMDAKKyNkZWZpbmUgVE9TVE9QCTAwMDA0MDAKKyNkZWZpbmUgRUNIT0NUTAkwMDAxMDAwCisjZGVmaW5lIEVDSE9QUlQJMDAwMjAwMAorI2RlZmluZSBFQ0hPS0UJMDAwNDAwMAorI2RlZmluZSBGTFVTSE8JMDAxMDAwMAorI2RlZmluZSBQRU5ESU4JMDA0MDAwMAorI2RlZmluZSBJRVhURU4JMDEwMDAwMAorCisvKiB0Y2Zsb3coKSBhbmQgVENYT05DIHVzZSB0aGVzZSAqLworI2RlZmluZQlUQ09PRkYJCTAKKyNkZWZpbmUJVENPT04JCTEKKyNkZWZpbmUJVENJT0ZGCQkyCisjZGVmaW5lCVRDSU9OCQkzCisKKy8qIHRjZmx1c2goKSBhbmQgVENGTFNIIHVzZSB0aGVzZSAqLworI2RlZmluZQlUQ0lGTFVTSAkwCisjZGVmaW5lCVRDT0ZMVVNICTEKKyNkZWZpbmUJVENJT0ZMVVNICTIKKworLyogdGNzZXRhdHRyIHVzZXMgdGhlc2UgKi8KKyNkZWZpbmUJVENTQU5PVwkJMAorI2RlZmluZQlUQ1NBRFJBSU4JMQorI2RlZmluZQlUQ1NBRkxVU0gJMgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC90ZXJtaW9zLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvdGVybWlvcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0MWE5MWYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvdGVybWlvcy5oCkBAIC0wLDAgKzEsMTA2IEBACisjaWZuZGVmIF9YODY2NF9URVJNSU9TX0gKKyNkZWZpbmUgX1g4NjY0X1RFUk1JT1NfSAorCisjaW5jbHVkZSA8YXNtL3Rlcm1iaXRzLmg+CisjaW5jbHVkZSA8YXNtL2lvY3Rscy5oPgorCitzdHJ1Y3Qgd2luc2l6ZSB7CisJdW5zaWduZWQgc2hvcnQgd3Nfcm93OworCXVuc2lnbmVkIHNob3J0IHdzX2NvbDsKKwl1bnNpZ25lZCBzaG9ydCB3c194cGl4ZWw7CisJdW5zaWduZWQgc2hvcnQgd3NfeXBpeGVsOworfTsKKworI2RlZmluZSBOQ0MgOAorc3RydWN0IHRlcm1pbyB7CisJdW5zaWduZWQgc2hvcnQgY19pZmxhZzsJCS8qIGlucHV0IG1vZGUgZmxhZ3MgKi8KKwl1bnNpZ25lZCBzaG9ydCBjX29mbGFnOwkJLyogb3V0cHV0IG1vZGUgZmxhZ3MgKi8KKwl1bnNpZ25lZCBzaG9ydCBjX2NmbGFnOwkJLyogY29udHJvbCBtb2RlIGZsYWdzICovCisJdW5zaWduZWQgc2hvcnQgY19sZmxhZzsJCS8qIGxvY2FsIG1vZGUgZmxhZ3MgKi8KKwl1bnNpZ25lZCBjaGFyIGNfbGluZTsJCS8qIGxpbmUgZGlzY2lwbGluZSAqLworCXVuc2lnbmVkIGNoYXIgY19jY1tOQ0NdOwkvKiBjb250cm9sIGNoYXJhY3RlcnMgKi8KK307CisKKy8qIG1vZGVtIGxpbmVzICovCisjZGVmaW5lIFRJT0NNX0xFCTB4MDAxCisjZGVmaW5lIFRJT0NNX0RUUgkweDAwMgorI2RlZmluZSBUSU9DTV9SVFMJMHgwMDQKKyNkZWZpbmUgVElPQ01fU1QJMHgwMDgKKyNkZWZpbmUgVElPQ01fU1IJMHgwMTAKKyNkZWZpbmUgVElPQ01fQ1RTCTB4MDIwCisjZGVmaW5lIFRJT0NNX0NBUgkweDA0MAorI2RlZmluZSBUSU9DTV9STkcJMHgwODAKKyNkZWZpbmUgVElPQ01fRFNSCTB4MTAwCisjZGVmaW5lIFRJT0NNX0NECVRJT0NNX0NBUgorI2RlZmluZSBUSU9DTV9SSQlUSU9DTV9STkcKKyNkZWZpbmUgVElPQ01fT1VUMQkweDIwMDAKKyNkZWZpbmUgVElPQ01fT1VUMgkweDQwMDAKKyNkZWZpbmUgVElPQ01fTE9PUAkweDgwMDAKKworLyogaW9jdGwgKGZkLCBUSU9DU0VSR0VUTFNSLCAmcmVzdWx0KSB3aGVyZSByZXN1bHQgbWF5IGJlIGFzIGJlbG93ICovCisKKy8qIGxpbmUgZGlzY2lwbGluZXMgKi8KKyNkZWZpbmUgTl9UVFkJCTAKKyNkZWZpbmUgTl9TTElQCQkxCisjZGVmaW5lIE5fTU9VU0UJCTIKKyNkZWZpbmUgTl9QUFAJCTMKKyNkZWZpbmUgTl9TVFJJUAkJNAorI2RlZmluZSBOX0FYMjUJCTUKKyNkZWZpbmUgTl9YMjUJCTYJLyogWC4yNSBhc3luYyAqLworI2RlZmluZSBOXzZQQUNLCQk3CisjZGVmaW5lIE5fTUFTQwkJOAkvKiBSZXNlcnZlZCBmb3IgTW9iaXRleCBtb2R1bGUgPGthekBjYWZlLm5ldD4gKi8KKyNkZWZpbmUgTl9SMzk2NAkJOQkvKiBSZXNlcnZlZCBmb3IgU2ltYXRpYyBSMzk2NCBtb2R1bGUgKi8KKyNkZWZpbmUgTl9QUk9GSUJVU19GREwJMTAJLyogUmVzZXJ2ZWQgZm9yIFByb2ZpYnVzIDxEYXZlQG12aGkuY29tPiAqLworI2RlZmluZSBOX0lSREEJCTExCS8qIExpbnV4IElSIC0gaHR0cDovL2lyZGEuc291cmNlZm9yZ2UubmV0LyAqLworI2RlZmluZSBOX1NNU0JMT0NLCTEyCS8qIFNNUyBibG9jayBtb2RlIC0gZm9yIHRhbGtpbmcgdG8gR1NNIGRhdGEgY2FyZHMgYWJvdXQgU01TIG1lc3NhZ2VzICovCisjZGVmaW5lIE5fSERMQwkJMTMJLyogc3luY2hyb25vdXMgSERMQyAqLworI2RlZmluZSBOX1NZTkNfUFBQCTE0CS8qIHN5bmNocm9ub3VzIFBQUCAqLworI2RlZmluZSBOX0hDSQkJMTUgIC8qIEJsdWV0b290aCBIQ0kgVUFSVCAqLworCisjaWZkZWYgX19LRVJORUxfXworCisvKglpbnRyPV5DCQlxdWl0PV5cCQllcmFzZT1kZWwJa2lsbD1eVQorCWVvZj1eRAkJdnRpbWU9XDAJdm1pbj1cMQkJc3h0Yz1cMAorCXN0YXJ0PV5RCXN0b3A9XlMJCXN1c3A9XloJCWVvbD1cMAorCXJlcHJpbnQ9XlIJZGlzY2FyZD1eVQl3ZXJhc2U9XlcJbG5leHQ9XlYKKwllb2wyPVwwCisqLworI2RlZmluZSBJTklUX0NfQ0MgIlwwMDNcMDM0XDE3N1wwMjVcMDA0XDBcMVwwXDAyMVwwMjNcMDMyXDBcMDIyXDAxN1wwMjdcMDI2XDAiCisKKy8qCisgKiBUcmFuc2xhdGUgYSAidGVybWlvIiBzdHJ1Y3R1cmUgaW50byBhICJ0ZXJtaW9zIi4gVWdoLgorICovCisjZGVmaW5lIFNFVF9MT1dfVEVSTUlPU19CSVRTKHRlcm1pb3MsIHRlcm1pbywgeCkgeyBcCisJdW5zaWduZWQgc2hvcnQgX190bXA7IFwKKwlnZXRfdXNlcihfX3RtcCwmKHRlcm1pbyktPngpOyBcCisJKih1bnNpZ25lZCBzaG9ydCAqKSAmKHRlcm1pb3MpLT54ID0gX190bXA7IFwKK30KKworI2RlZmluZSB1c2VyX3Rlcm1pb190b19rZXJuZWxfdGVybWlvcyh0ZXJtaW9zLCB0ZXJtaW8pIFwKKyh7IFwKKwlTRVRfTE9XX1RFUk1JT1NfQklUUyh0ZXJtaW9zLCB0ZXJtaW8sIGNfaWZsYWcpOyBcCisJU0VUX0xPV19URVJNSU9TX0JJVFModGVybWlvcywgdGVybWlvLCBjX29mbGFnKTsgXAorCVNFVF9MT1dfVEVSTUlPU19CSVRTKHRlcm1pb3MsIHRlcm1pbywgY19jZmxhZyk7IFwKKwlTRVRfTE9XX1RFUk1JT1NfQklUUyh0ZXJtaW9zLCB0ZXJtaW8sIGNfbGZsYWcpOyBcCisJY29weV9mcm9tX3VzZXIoKHRlcm1pb3MpLT5jX2NjLCAodGVybWlvKS0+Y19jYywgTkNDKTsgXAorfSkKKworLyoKKyAqIFRyYW5zbGF0ZSBhICJ0ZXJtaW9zIiBzdHJ1Y3R1cmUgaW50byBhICJ0ZXJtaW8iLiBVZ2guCisgKi8KKyNkZWZpbmUga2VybmVsX3Rlcm1pb3NfdG9fdXNlcl90ZXJtaW8odGVybWlvLCB0ZXJtaW9zKSBcCisoeyBcCisJcHV0X3VzZXIoKHRlcm1pb3MpLT5jX2lmbGFnLCAmKHRlcm1pbyktPmNfaWZsYWcpOyBcCisJcHV0X3VzZXIoKHRlcm1pb3MpLT5jX29mbGFnLCAmKHRlcm1pbyktPmNfb2ZsYWcpOyBcCisJcHV0X3VzZXIoKHRlcm1pb3MpLT5jX2NmbGFnLCAmKHRlcm1pbyktPmNfY2ZsYWcpOyBcCisJcHV0X3VzZXIoKHRlcm1pb3MpLT5jX2xmbGFnLCAmKHRlcm1pbyktPmNfbGZsYWcpOyBcCisJcHV0X3VzZXIoKHRlcm1pb3MpLT5jX2xpbmUsICAmKHRlcm1pbyktPmNfbGluZSk7IFwKKwljb3B5X3RvX3VzZXIoKHRlcm1pbyktPmNfY2MsICh0ZXJtaW9zKS0+Y19jYywgTkNDKTsgXAorfSkKKworI2RlZmluZSB1c2VyX3Rlcm1pb3NfdG9fa2VybmVsX3Rlcm1pb3MoaywgdSkgY29weV9mcm9tX3VzZXIoaywgdSwgc2l6ZW9mKHN0cnVjdCB0ZXJtaW9zKSkKKyNkZWZpbmUga2VybmVsX3Rlcm1pb3NfdG9fdXNlcl90ZXJtaW9zKHUsIGspIGNvcHlfdG9fdXNlcih1LCBrLCBzaXplb2Yoc3RydWN0IHRlcm1pb3MpKQorCisjZW5kaWYJLyogX19LRVJORUxfXyAqLworCisjZW5kaWYJLyogX1g4NjY0X1RFUk1JT1NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L3RocmVhZF9pbmZvLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvdGhyZWFkX2luZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGIzYjI0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L3RocmVhZF9pbmZvLmgKQEAgLTAsMCArMSwxNDQgQEAKKy8qIHRocmVhZF9pbmZvLmg6IHg4Nl82NCBsb3ctbGV2ZWwgdGhyZWFkIGluZm9ybWF0aW9uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAyICBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQorICogLSBJbmNvcnBvcmF0aW5nIHN1Z2dlc3Rpb25zIG1hZGUgYnkgTGludXMgVG9ydmFsZHMgYW5kIERhdmUgTWlsbGVyCisgKi8KKworI2lmbmRlZiBfQVNNX1RIUkVBRF9JTkZPX0gKKyNkZWZpbmUgX0FTTV9USFJFQURfSU5GT19ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9wZGEuaD4KKworLyoKKyAqIGxvdyBsZXZlbCB0YXNrIGRhdGEgdGhhdCBlbnRyeS5TIG5lZWRzIGltbWVkaWF0ZSBhY2Nlc3MgdG8KKyAqIC0gdGhpcyBzdHJ1Y3Qgc2hvdWxkIGZpdCBlbnRpcmVseSBpbnNpZGUgb2Ygb25lIGNhY2hlIGxpbmUKKyAqIC0gdGhpcyBzdHJ1Y3Qgc2hhcmVzIHRoZSBzdXBlcnZpc29yIHN0YWNrIHBhZ2VzCisgKi8KKyNpZm5kZWYgX19BU1NFTUJMWV9fCitzdHJ1Y3QgdGFza19zdHJ1Y3Q7CitzdHJ1Y3QgZXhlY19kb21haW47CisjaW5jbHVkZSA8YXNtL21tc2VnbWVudC5oPgorCitzdHJ1Y3QgdGhyZWFkX2luZm8geworCXN0cnVjdCB0YXNrX3N0cnVjdAkqdGFzazsJCS8qIG1haW4gdGFzayBzdHJ1Y3R1cmUgKi8KKwlzdHJ1Y3QgZXhlY19kb21haW4JKmV4ZWNfZG9tYWluOwkvKiBleGVjdXRpb24gZG9tYWluICovCisJX191MzIJCQlmbGFnczsJCS8qIGxvdyBsZXZlbCBmbGFncyAqLworCV9fdTMyCQkJc3RhdHVzOwkJLyogdGhyZWFkIHN5bmNocm9ub3VzIGZsYWdzICovCisJX191MzIJCQljcHU7CQkvKiBjdXJyZW50IENQVSAqLworCWludCAJCQlwcmVlbXB0X2NvdW50OworCisJbW1fc2VnbWVudF90CQlhZGRyX2xpbWl0OwkKKwlzdHJ1Y3QgcmVzdGFydF9ibG9jayAgICByZXN0YXJ0X2Jsb2NrOworfTsKKyNlbmRpZgorCisvKgorICogbWFjcm9zL2Z1bmN0aW9ucyBmb3IgZ2FpbmluZyBhY2Nlc3MgdG8gdGhlIHRocmVhZCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUKKyAqIHByZWVtcHRfY291bnQgbmVlZHMgdG8gYmUgMSBpbml0aWFsbHksIHVudGlsIHRoZSBzY2hlZHVsZXIgaXMgZnVuY3Rpb25hbC4KKyAqLworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNkZWZpbmUgSU5JVF9USFJFQURfSU5GTyh0c2spCQkJXAorewkJCQkJCVwKKwkudGFzawkgICAgICAgPSAmdHNrLAkJCVwKKwkuZXhlY19kb21haW4gICA9ICZkZWZhdWx0X2V4ZWNfZG9tYWluLAlcCisJLmZsYWdzCSAgICAgICA9IDAsCQkJXAorCS5jcHUJICAgICAgID0gMCwJCQlcCisJLnByZWVtcHRfY291bnQgPSAxLAkJCVwKKwkuYWRkcl9saW1pdCAgICAgPSBLRVJORUxfRFMsCQlcCisJLnJlc3RhcnRfYmxvY2sgPSB7CQkJXAorCQkuZm4gPSBkb19ub19yZXN0YXJ0X3N5c2NhbGwsCVwKKwl9LAkJCQkJXAorfQorCisjZGVmaW5lIGluaXRfdGhyZWFkX2luZm8JKGluaXRfdGhyZWFkX3VuaW9uLnRocmVhZF9pbmZvKQorI2RlZmluZSBpbml0X3N0YWNrCQkoaW5pdF90aHJlYWRfdW5pb24uc3RhY2spCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRocmVhZF9pbmZvICpjdXJyZW50X3RocmVhZF9pbmZvKHZvaWQpCit7IAorCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGk7CisJdGkgPSAodm9pZCAqKShyZWFkX3BkYShrZXJuZWxzdGFjaykgKyBQREFfU1RBQ0tPRkZTRVQgLSBUSFJFQURfU0laRSk7CisJcmV0dXJuIHRpOyAKK30KKworLyogZG8gbm90IHVzZSBpbiBpbnRlcnJ1cHQgY29udGV4dCAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgdGhyZWFkX2luZm8gKnN0YWNrX3RocmVhZF9pbmZvKHZvaWQpCit7CisJc3RydWN0IHRocmVhZF9pbmZvICp0aTsKKwlfX2FzbV9fKCJhbmRxICUlcnNwLCUwOyAiOiI9ciIgKHRpKSA6ICIwIiAofihUSFJFQURfU0laRSAtIDEpKSk7CisJcmV0dXJuIHRpOworfQorCisvKiB0aHJlYWQgaW5mb3JtYXRpb24gYWxsb2NhdGlvbiAqLworI2RlZmluZSBhbGxvY190aHJlYWRfaW5mbyh0c2spIFwKKwkoKHN0cnVjdCB0aHJlYWRfaW5mbyAqKSBfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwsVEhSRUFEX09SREVSKSkKKyNkZWZpbmUgZnJlZV90aHJlYWRfaW5mbyh0aSkgZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZykgKHRpKSwgVEhSRUFEX09SREVSKQorI2RlZmluZSBnZXRfdGhyZWFkX2luZm8odGkpIGdldF90YXNrX3N0cnVjdCgodGkpLT50YXNrKQorI2RlZmluZSBwdXRfdGhyZWFkX2luZm8odGkpIHB1dF90YXNrX3N0cnVjdCgodGkpLT50YXNrKQorCisjZWxzZSAvKiAhX19BU1NFTUJMWV9fICovCisKKy8qIGhvdyB0byBnZXQgdGhlIHRocmVhZCBpbmZvcm1hdGlvbiBzdHJ1Y3QgZnJvbSBBU00gKi8KKyNkZWZpbmUgR0VUX1RIUkVBRF9JTkZPKHJlZykgXAorCW1vdnEgJWdzOnBkYV9rZXJuZWxzdGFjayxyZWcgOyBcCisJc3VicSAkKFRIUkVBRF9TSVpFLVBEQV9TVEFDS09GRlNFVCkscmVnCisKKyNlbmRpZgorCisvKgorICogdGhyZWFkIGluZm9ybWF0aW9uIGZsYWdzCisgKiAtIHRoZXNlIGFyZSBwcm9jZXNzIHN0YXRlIGZsYWdzIHRoYXQgdmFyaW91cyBhc3NlbWJseSBmaWxlcyBtYXkgbmVlZCB0byBhY2Nlc3MKKyAqIC0gcGVuZGluZyB3b3JrLXRvLWJlLWRvbmUgZmxhZ3MgYXJlIGluIExTVworICogLSBvdGhlciBmbGFncyBpbiBNU1cKKyAqIFdhcm5pbmc6IGxheW91dCBvZiBMU1cgaXMgaGFyZGNvZGVkIGluIGVudHJ5LlMKKyAqLworI2RlZmluZSBUSUZfU1lTQ0FMTF9UUkFDRQkwCS8qIHN5c2NhbGwgdHJhY2UgYWN0aXZlICovCisjZGVmaW5lIFRJRl9OT1RJRllfUkVTVU1FCTEJLyogcmVzdW1wdGlvbiBub3RpZmljYXRpb24gcmVxdWVzdGVkICovCisjZGVmaW5lIFRJRl9TSUdQRU5ESU5HCQkyCS8qIHNpZ25hbCBwZW5kaW5nICovCisjZGVmaW5lIFRJRl9ORUVEX1JFU0NIRUQJMwkvKiByZXNjaGVkdWxpbmcgbmVjZXNzYXJ5ICovCisjZGVmaW5lIFRJRl9TSU5HTEVTVEVQCQk0CS8qIHJlZW5hYmxlIHNpbmdsZXN0ZXAgb24gdXNlciByZXR1cm4qLworI2RlZmluZSBUSUZfSVJFVAkJNQkvKiBmb3JjZSBJUkVUICovCisjZGVmaW5lIFRJRl9TWVNDQUxMX0FVRElUCTcJLyogc3lzY2FsbCBhdWRpdGluZyBhY3RpdmUgKi8KKyNkZWZpbmUgVElGX1NFQ0NPTVAJCTgJLyogc2VjdXJlIGNvbXB1dGluZyAqLworI2RlZmluZSBUSUZfUE9MTElOR19OUkZMQUcJMTYJLyogdHJ1ZSBpZiBwb2xsX2lkbGUoKSBpcyBwb2xsaW5nIFRJRl9ORUVEX1JFU0NIRUQgKi8KKyNkZWZpbmUgVElGX0lBMzIJCTE3CS8qIDMyYml0IHByb2Nlc3MgKi8gCisjZGVmaW5lIFRJRl9GT1JLCQkxOAkvKiByZXRfZnJvbV9mb3JrICovCisjZGVmaW5lIFRJRl9BQklfUEVORElORwkJMTkKKyNkZWZpbmUgVElGX01FTURJRQkJMjAKKworI2RlZmluZSBfVElGX1NZU0NBTExfVFJBQ0UJKDE8PFRJRl9TWVNDQUxMX1RSQUNFKQorI2RlZmluZSBfVElGX05PVElGWV9SRVNVTUUJKDE8PFRJRl9OT1RJRllfUkVTVU1FKQorI2RlZmluZSBfVElGX1NJR1BFTkRJTkcJCSgxPDxUSUZfU0lHUEVORElORykKKyNkZWZpbmUgX1RJRl9TSU5HTEVTVEVQCQkoMTw8VElGX1NJTkdMRVNURVApCisjZGVmaW5lIF9USUZfTkVFRF9SRVNDSEVECSgxPDxUSUZfTkVFRF9SRVNDSEVEKQorI2RlZmluZSBfVElGX0lSRVQJCSgxPDxUSUZfSVJFVCkKKyNkZWZpbmUgX1RJRl9TWVNDQUxMX0FVRElUCSgxPDxUSUZfU1lTQ0FMTF9BVURJVCkKKyNkZWZpbmUgX1RJRl9TRUNDT01QCQkoMTw8VElGX1NFQ0NPTVApCisjZGVmaW5lIF9USUZfUE9MTElOR19OUkZMQUcJKDE8PFRJRl9QT0xMSU5HX05SRkxBRykKKyNkZWZpbmUgX1RJRl9JQTMyCQkoMTw8VElGX0lBMzIpCisjZGVmaW5lIF9USUZfRk9SSwkJKDE8PFRJRl9GT1JLKQorI2RlZmluZSBfVElGX0FCSV9QRU5ESU5HCSgxPDxUSUZfQUJJX1BFTkRJTkcpCisKKy8qIHdvcmsgdG8gZG8gb24gaW50ZXJydXB0L2V4Y2VwdGlvbiByZXR1cm4gKi8KKyNkZWZpbmUgX1RJRl9XT1JLX01BU0sgXAorICAoMHgwMDAwRkZGRiAmIH4oX1RJRl9TWVNDQUxMX1RSQUNFfF9USUZfU1lTQ0FMTF9BVURJVHxfVElGX1NJTkdMRVNURVB8X1RJRl9TRUNDT01QKSkKKy8qIHdvcmsgdG8gZG8gb24gYW55IHJldHVybiB0byB1c2VyIHNwYWNlICovCisjZGVmaW5lIF9USUZfQUxMV09SS19NQVNLICgweDAwMDBGRkZGICYgfl9USUZfU0VDQ09NUCkKKworI2RlZmluZSBQUkVFTVBUX0FDVElWRSAgICAgMHgxMDAwMDAwMAorCisvKgorICogVGhyZWFkLXN5bmNocm9ub3VzIHN0YXR1cy4KKyAqCisgKiBUaGlzIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBmbGFncyBpbiB0aGF0IG5vYm9keSBlbHNlCisgKiBldmVyIHRvdWNoZXMgb3VyIHRocmVhZC1zeW5jaHJvbm91cyBzdGF0dXMsIHNvIHdlIGRvbid0CisgKiBoYXZlIHRvIHdvcnJ5IGFib3V0IGF0b21pYyBhY2Nlc3Nlcy4KKyAqLworI2RlZmluZSBUU19VU0VERlBVCQkweDAwMDEJLyogRlBVIHdhcyB1c2VkIGJ5IHRoaXMgdGFzayB0aGlzIHF1YW50dW0gKFNNUCkgKi8KKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9BU01fVEhSRUFEX0lORk9fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L3RpbWV4LmggYi9pbmNsdWRlL2FzbS14ODZfNjQvdGltZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGYzMWExCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L3RpbWV4LmgKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLXg4Nl82NC90aW1leC5oCisgKgorICogeDg2LTY0IGFyY2hpdGVjdHVyZSB0aW1leCBzcGVjaWZpY2F0aW9ucworICovCisjaWZuZGVmIF9BU014ODY2NF9USU1FWF9ICisjZGVmaW5lIF9BU014ODY2NF9USU1FWF9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxhc20vODI1M3BpdC5oPgorI2luY2x1ZGUgPGFzbS9tc3IuaD4KKyNpbmNsdWRlIDxhc20vdnN5c2NhbGwuaD4KKyNpbmNsdWRlIDxhc20vaHBldC5oPgorCisjZGVmaW5lIENMT0NLX1RJQ0tfUkFURQlQSVRfVElDS19SQVRFCS8qIFVuZGVybHlpbmcgSFogKi8KKwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgY3ljbGVzX3Q7CisKK3N0YXRpYyBpbmxpbmUgY3ljbGVzX3QgZ2V0X2N5Y2xlcyAodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgcmV0OworCisJcmR0c2NsbChyZXQpOworCXJldHVybiByZXQ7Cit9CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgY3B1X2toejsKKworZXh0ZXJuIHN0cnVjdCB2eHRpbWVfZGF0YSB2eHRpbWU7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L3RsYi5oIGIvaW5jbHVkZS9hc20teDg2XzY0L3RsYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkNGMzYzUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvdGxiLmgKQEAgLTAsMCArMSwxMyBAQAorI2lmbmRlZiBUTEJfSAorI2RlZmluZSBUTEJfSCAxCisKKworI2RlZmluZSB0bGJfc3RhcnRfdm1hKHRsYiwgdm1hKSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHRsYl9lbmRfdm1hKHRsYiwgdm1hKSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIF9fdGxiX3JlbW92ZV90bGJfZW50cnkodGxiLCBwdGVwLCBhZGRyZXNzKSBkbyB7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgdGxiX2ZsdXNoKHRsYikgZmx1c2hfdGxiX21tKCh0bGIpLT5tbSkKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3RsYi5oPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC90bGJmbHVzaC5oIGIvaW5jbHVkZS9hc20teDg2XzY0L3RsYmZsdXNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU4MTFhYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC90bGJmbHVzaC5oCkBAIC0wLDAgKzEsMTE5IEBACisjaWZuZGVmIF9YODY2NF9UTEJGTFVTSF9ICisjZGVmaW5lIF9YODY2NF9UTEJGTFVTSF9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKworI2RlZmluZSBfX2ZsdXNoX3RsYigpCQkJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCXVuc2lnbmVkIGxvbmcgdG1wcmVnOwkJCQkJXAorCQkJCQkJCQkJXAorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCVwKKwkJCSJtb3ZxICUlY3IzLCAlMDsgICMgZmx1c2ggVExCIFxuIgkJXAorCQkJIm1vdnEgJTAsICUlY3IzOyAgICAgICAgICAgICAgXG4iCQlcCisJCQk6ICI9ciIgKHRtcHJlZykJCQkJCVwKKwkJCTo6ICJtZW1vcnkiKTsJCQkJCVwKKwl9IHdoaWxlICgwKQorCisvKgorICogR2xvYmFsIHBhZ2VzIGhhdmUgdG8gYmUgZmx1c2hlZCBhIGJpdCBkaWZmZXJlbnRseS4gTm90IGEgcmVhbAorICogcGVyZm9ybWFuY2UgcHJvYmxlbSBiZWNhdXNlIHRoaXMgZG9lcyBub3QgaGFwcGVuIG9mdGVuLgorICovCisjZGVmaW5lIF9fZmx1c2hfdGxiX2dsb2JhbCgpCQkJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJdW5zaWduZWQgbG9uZyB0bXByZWc7CQkJCQlcCisJCQkJCQkJCQlcCisJCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJXAorCQkJIm1vdnEgJTEsICUlY3I0OyAgIyB0dXJuIG9mZiBQR0UgICAgIFxuIglcCisJCQkibW92cSAlJWNyMywgJTA7ICAjIGZsdXNoIFRMQiAgICAgICAgXG4iCVwKKwkJCSJtb3ZxICUwLCAlJWNyMzsgICAgICAgICAgICAgICAgICAgICBcbiIJXAorCQkJIm1vdnEgJTIsICUlY3I0OyAgIyB0dXJuIFBHRSBiYWNrIG9uIFxuIglcCisJCQk6ICI9JnIiICh0bXByZWcpCQkJCVwKKwkJCTogInIiIChtbXVfY3I0X2ZlYXR1cmVzICYgflg4Nl9DUjRfUEdFKSwJXAorCQkJICAiciIgKG1tdV9jcjRfZmVhdHVyZXMpCQkJXAorCQkJOiAibWVtb3J5Iik7CQkJCQlcCisJfSB3aGlsZSAoMCkKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGdrZXJuX21hc2s7CisKKyNkZWZpbmUgX19mbHVzaF90bGJfYWxsKCkgX19mbHVzaF90bGJfZ2xvYmFsKCkKKworI2RlZmluZSBfX2ZsdXNoX3RsYl9vbmUoYWRkcikgXAorCV9fYXNtX18gX192b2xhdGlsZV9fKCJpbnZscGcgJTAiOiA6Im0iICgqKGNoYXIgKikgYWRkcikpCisKKworLyoKKyAqIFRMQiBmbHVzaGluZzoKKyAqCisgKiAgLSBmbHVzaF90bGIoKSBmbHVzaGVzIHRoZSBjdXJyZW50IG1tIHN0cnVjdCBUTEJzCisgKiAgLSBmbHVzaF90bGJfYWxsKCkgZmx1c2hlcyBhbGwgcHJvY2Vzc2VzIFRMQnMKKyAqICAtIGZsdXNoX3RsYl9tbShtbSkgZmx1c2hlcyB0aGUgc3BlY2lmaWVkIG1tIGNvbnRleHQgVExCJ3MKKyAqICAtIGZsdXNoX3RsYl9wYWdlKHZtYSwgdm1hZGRyKSBmbHVzaGVzIG9uZSBwYWdlCisgKiAgLSBmbHVzaF90bGJfcmFuZ2Uodm1hLCBzdGFydCwgZW5kKSBmbHVzaGVzIGEgcmFuZ2Ugb2YgcGFnZXMKKyAqICAtIGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2Uoc3RhcnQsIGVuZCkgZmx1c2hlcyBhIHJhbmdlIG9mIGtlcm5lbCBwYWdlcworICogIC0gZmx1c2hfdGxiX3BndGFibGVzKG1tLCBzdGFydCwgZW5kKSBmbHVzaGVzIGEgcmFuZ2Ugb2YgcGFnZSB0YWJsZXMKKyAqCisgKiAuLmJ1dCB0aGUgeDg2XzY0IGhhcyBzb21ld2hhdCBsaW1pdGVkIHRsYiBmbHVzaGluZyBjYXBhYmlsaXRpZXMsCisgKiBhbmQgcGFnZS1ncmFudWxhciBmbHVzaGVzIGFyZSBhdmFpbGFibGUgb25seSBvbiBpNDg2IGFuZCB1cC4KKyAqLworCisjaWZuZGVmIENPTkZJR19TTVAKKworI2RlZmluZSBmbHVzaF90bGIoKSBfX2ZsdXNoX3RsYigpCisjZGVmaW5lIGZsdXNoX3RsYl9hbGwoKSBfX2ZsdXNoX3RsYl9hbGwoKQorI2RlZmluZSBsb2NhbF9mbHVzaF90bGIoKSBfX2ZsdXNoX3RsYigpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJaWYgKG1tID09IGN1cnJlbnQtPmFjdGl2ZV9tbSkKKwkJX19mbHVzaF90bGIoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCXVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlpZiAodm1hLT52bV9tbSA9PSBjdXJyZW50LT5hY3RpdmVfbW0pCisJCV9fZmx1c2hfdGxiX29uZShhZGRyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwl1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwlpZiAodm1hLT52bV9tbSA9PSBjdXJyZW50LT5hY3RpdmVfbW0pCisJCV9fZmx1c2hfdGxiKCk7Cit9CisKKyNlbHNlCisKKyNpbmNsdWRlIDxhc20vc21wLmg+CisKKyNkZWZpbmUgbG9jYWxfZmx1c2hfdGxiKCkgXAorCV9fZmx1c2hfdGxiKCkKKworZXh0ZXJuIHZvaWQgZmx1c2hfdGxiX2FsbCh2b2lkKTsKK2V4dGVybiB2b2lkIGZsdXNoX3RsYl9jdXJyZW50X3Rhc2sodm9pZCk7CitleHRlcm4gdm9pZCBmbHVzaF90bGJfbW0oc3RydWN0IG1tX3N0cnVjdCAqKTsKK2V4dGVybiB2b2lkIGZsdXNoX3RsYl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nKTsKKworI2RlZmluZSBmbHVzaF90bGIoKQlmbHVzaF90bGJfY3VycmVudF90YXNrKCkKKworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCWZsdXNoX3RsYl9tbSh2bWEtPnZtX21tKTsKK30KKworI2RlZmluZSBUTEJTVEFURV9PSwkxCisjZGVmaW5lIFRMQlNUQVRFX0xBWlkJMgorCisjZW5kaWYKKworI2RlZmluZSBmbHVzaF90bGJfa2VybmVsX3JhbmdlKHN0YXJ0LCBlbmQpIGZsdXNoX3RsYl9hbGwoKQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX3BndGFibGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCS8qIHg4Nl82NCBkb2VzIG5vdCBrZWVwIGFueSBwYWdlIHRhYmxlIGNhY2hlcyBpbiBUTEIgKi8KK30KKworI2VuZGlmIC8qIF9YODY2NF9UTEJGTFVTSF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvdG9wb2xvZ3kuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC90b3BvbG9neS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3ZjI0ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvdG9wb2xvZ3kuaApAQCAtMCwwICsxLDY4IEBACisjaWZuZGVmIF9BU01fWDg2XzY0X1RPUE9MT0dZX0gKKyNkZWZpbmUgX0FTTV9YODZfNjRfVE9QT0xPR1lfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpZmRlZiBDT05GSUdfRElTQ09OVElHTUVNCisKKyNpbmNsdWRlIDxhc20vbXBzcGVjLmg+CisjaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgorCisvKiBNYXAgdGhlIEs4IENQVSBsb2NhbCBtZW1vcnkgY29udHJvbGxlcnMgdG8gYSBzaW1wbGUgMToxIENQVTpOT0RFIHRvcG9sb2d5ICovCisKK2V4dGVybiBjcHVtYXNrX3QgY3B1X29ubGluZV9tYXA7CisKK2V4dGVybiB1bnNpZ25lZCBjaGFyIGNwdV90b19ub2RlW107CitleHRlcm4gY3B1bWFza190ICAgICBub2RlX3RvX2NwdW1hc2tbXTsKK2V4dGVybiBjcHVtYXNrX3QgcGNpX2J1c190b19jcHVtYXNrW107CisKKyNpZmRlZiBDT05GSUdfQUNQSV9OVU1BCitleHRlcm4gaW50IF9fbm9kZV9kaXN0YW5jZShpbnQsIGludCk7CisjZGVmaW5lIG5vZGVfZGlzdGFuY2UoYSxiKSBfX25vZGVfZGlzdGFuY2UoYSxiKQorLyogI2Vsc2UgZmFsbGJhY2sgdmVyc2lvbiAqLworI2VuZGlmCisKKyNkZWZpbmUgY3B1X3RvX25vZGUoY3B1KQkJKGNwdV90b19ub2RlW2NwdV0pCisjZGVmaW5lIHBhcmVudF9ub2RlKG5vZGUpCQkobm9kZSkKKyNkZWZpbmUgbm9kZV90b19maXJzdF9jcHUobm9kZSkgCShfX2Zmcyhub2RlX3RvX2NwdW1hc2tbbm9kZV0pKQorI2RlZmluZSBub2RlX3RvX2NwdW1hc2sobm9kZSkJCShub2RlX3RvX2NwdW1hc2tbbm9kZV0pCisKK3N0YXRpYyBpbmxpbmUgY3B1bWFza190IF9fcGNpYnVzX3RvX2NwdW1hc2soaW50IGJ1cykKK3sKKwljcHVtYXNrX3QgYnVzbWFzayA9IHBjaV9idXNfdG9fY3B1bWFza1tidXNdOworCWNwdW1hc2tfdCBvbmxpbmUgPSBjcHVfb25saW5lX21hcDsKKwljcHVtYXNrX3QgcmVzOworCWNwdXNfYW5kKHJlcywgYnVzbWFzaywgb25saW5lKTsKKwlyZXR1cm4gcmVzOworfQorI2RlZmluZSBwY2lidXNfdG9fY3B1bWFzayhidXMpIF9fcGNpYnVzX3RvX2NwdW1hc2soYnVzLT5udW1iZXIpCisKKyNpZmRlZiBDT05GSUdfTlVNQQorLyogc2NoZWRfZG9tYWlucyBTRF9OT0RFX0lOSVQgZm9yIHg4Nl82NCBtYWNoaW5lcyAqLworI2RlZmluZSBTRF9OT0RFX0lOSVQgKHN0cnVjdCBzY2hlZF9kb21haW4pIHsJCVwKKwkuc3BhbgkJCT0gQ1BVX01BU0tfTk9ORSwJXAorCS5wYXJlbnQJCQk9IE5VTEwsCQkJXAorCS5ncm91cHMJCQk9IE5VTEwsCQkJXAorCS5taW5faW50ZXJ2YWwJCT0gOCwJCQlcCisJLm1heF9pbnRlcnZhbAkJPSAzMiwJCQlcCisJLmJ1c3lfZmFjdG9yCQk9IDMyLAkJCVwKKwkuaW1iYWxhbmNlX3BjdAkJPSAxMjUsCQkJXAorCS5jYWNoZV9ob3RfdGltZQkJPSAoMTAqMTAwMDAwMCksCQlcCisJLmNhY2hlX25pY2VfdHJpZXMJPSAxLAkJCVwKKwkucGVyX2NwdV9nYWluCQk9IDEwMCwJCQlcCisJLmZsYWdzCQkJPSBTRF9MT0FEX0JBTEFOQ0UJXAorCQkJCXwgU0RfQkFMQU5DRV9ORVdJRExFCVwKKwkJCQl8IFNEX0JBTEFOQ0VfRVhFQwlcCisJCQkJfCBTRF9XQUtFX0lETEUJCVwKKwkJCQl8IFNEX1dBS0VfQkFMQU5DRSwJXAorCS5sYXN0X2JhbGFuY2UJCT0gamlmZmllcywJCVwKKwkuYmFsYW5jZV9pbnRlcnZhbAk9IDEsCQkJXAorCS5ucl9iYWxhbmNlX2ZhaWxlZAk9IDAsCQkJXAorfQorI2VuZGlmCisKKyNlbmRpZgorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdG9wb2xvZ3kuaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvdHlwZXMuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyYmQxNDIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvdHlwZXMuaApAQCAtMCwwICsxLDYwIEBACisjaWZuZGVmIF9YODZfNjRfVFlQRVNfSAorI2RlZmluZSBfWDg2XzY0X1RZUEVTX0gKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1bW9kZV90OworCisvKgorICogX194eCBpcyBvazogaXQgZG9lc24ndCBwb2xsdXRlIHRoZSBQT1NJWCBuYW1lc3BhY2UuIFVzZSB0aGVzZSBpbiB0aGUKKyAqIGhlYWRlciBmaWxlcyBleHBvcnRlZCB0byB1c2VyIHNwYWNlCisgKi8KKwordHlwZWRlZiBfX3NpZ25lZF9fIGNoYXIgX19zODsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBfX3U4OworCit0eXBlZGVmIF9fc2lnbmVkX18gc2hvcnQgX19zMTY7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fdTE2OworCit0eXBlZGVmIF9fc2lnbmVkX18gaW50IF9fczMyOwordHlwZWRlZiB1bnNpZ25lZCBpbnQgX191MzI7CisKK3R5cGVkZWYgX19zaWduZWRfXyBsb25nIGxvbmcgX19zNjQ7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyAgX191NjQ7CisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworLyoKKyAqIFRoZXNlIGFyZW4ndCBleHBvcnRlZCBvdXRzaWRlIHRoZSBrZXJuZWwgdG8gYXZvaWQgbmFtZSBzcGFjZSBjbGFzaGVzCisgKi8KKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNkZWZpbmUgQklUU19QRVJfTE9ORyA2NAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCit0eXBlZGVmIHNpZ25lZCBjaGFyIHM4OwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIHU4OworCit0eXBlZGVmIHNpZ25lZCBzaG9ydCBzMTY7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHUxNjsKKwordHlwZWRlZiBzaWduZWQgaW50IHMzMjsKK3R5cGVkZWYgdW5zaWduZWQgaW50IHUzMjsKKwordHlwZWRlZiBzaWduZWQgbG9uZyBsb25nIHM2NDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHU2NDsKKwordHlwZWRlZiB1NjQgZG1hNjRfYWRkcl90OwordHlwZWRlZiB1NjQgZG1hX2FkZHJfdDsKKwordHlwZWRlZiB1NjQgc2VjdG9yX3Q7CisjZGVmaW5lIEhBVkVfU0VDVE9SX1QKKwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBrbWVtX2J1ZmN0bF90OworCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L3VhY2Nlc3MuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC91YWNjZXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhmMjkyNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC91YWNjZXNzLmgKQEAgLTAsMCArMSwzNjUgQEAKKyNpZm5kZWYgX19YODZfNjRfVUFDQ0VTU19ICisjZGVmaW5lIF9fWDg2XzY0X1VBQ0NFU1NfSAorCisvKgorICogVXNlciBzcGFjZSBtZW1vcnkgYWNjZXNzIGZ1bmN0aW9ucworICovCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorCisjZGVmaW5lIFZFUklGWV9SRUFEIDAKKyNkZWZpbmUgVkVSSUZZX1dSSVRFIDEKKworLyoKKyAqIFRoZSBmcyB2YWx1ZSBkZXRlcm1pbmVzIHdoZXRoZXIgYXJndW1lbnQgdmFsaWRpdHkgY2hlY2tpbmcgc2hvdWxkIGJlCisgKiBwZXJmb3JtZWQgb3Igbm90LiAgSWYgZ2V0X2ZzKCkgPT0gVVNFUl9EUywgY2hlY2tpbmcgaXMgcGVyZm9ybWVkLCB3aXRoCisgKiBnZXRfZnMoKSA9PSBLRVJORUxfRFMsIGNoZWNraW5nIGlzIGJ5cGFzc2VkLgorICoKKyAqIEZvciBoaXN0b3JpY2FsIHJlYXNvbnMsIHRoZXNlIG1hY3JvcyBhcmUgZ3Jvc3NseSBtaXNuYW1lZC4KKyAqLworCisjZGVmaW5lIE1BS0VfTU1fU0VHKHMpCSgobW1fc2VnbWVudF90KSB7IChzKSB9KQorCisjZGVmaW5lIEtFUk5FTF9EUwlNQUtFX01NX1NFRygweEZGRkZGRkZGRkZGRkZGRkZVTCkKKyNkZWZpbmUgVVNFUl9EUwkJTUFLRV9NTV9TRUcoUEFHRV9PRkZTRVQpCisKKyNkZWZpbmUgZ2V0X2RzKCkJKEtFUk5FTF9EUykKKyNkZWZpbmUgZ2V0X2ZzKCkJKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+YWRkcl9saW1pdCkKKyNkZWZpbmUgc2V0X2ZzKHgpCShjdXJyZW50X3RocmVhZF9pbmZvKCktPmFkZHJfbGltaXQgPSAoeCkpCisKKyNkZWZpbmUgc2VnbWVudF9lcShhLGIpCSgoYSkuc2VnID09IChiKS5zZWcpCisKKyNkZWZpbmUgX19hZGRyX29rKGFkZHIpICghKCh1bnNpZ25lZCBsb25nKShhZGRyKSAmIChjdXJyZW50X3RocmVhZF9pbmZvKCktPmFkZHJfbGltaXQuc2VnKSkpCisKKy8qCisgKiBVaGh1aCwgdGhpcyBuZWVkcyA2NS1iaXQgYXJpdGhtZXRpYy4gV2UgaGF2ZSBhIGNhcnJ5Li4KKyAqLworI2RlZmluZSBfX3JhbmdlX25vdF9vayhhZGRyLHNpemUpICh7IFwKKwl1bnNpZ25lZCBsb25nIGZsYWcsc3VtOyBcCisJX19jaGtfdXNlcl9wdHIoYWRkcik7IFwKKwlhc20oIiMgcmFuZ2Vfb2tcblxyIiBcCisJCSJhZGRxICUzLCUxIDsgc2JicSAlMCwlMCA7IGNtcHEgJTEsJTQgOyBzYmJxICQwLCUwIiAgXAorCQk6Ij0mciIgKGZsYWcpLCAiPXIiIChzdW0pIFwKKwkJOiIxIiAoYWRkciksImciICgobG9uZykoc2l6ZSkpLCJnIiAoY3VycmVudF90aHJlYWRfaW5mbygpLT5hZGRyX2xpbWl0LnNlZykpOyBcCisJZmxhZzsgfSkKKworI2RlZmluZSBhY2Nlc3Nfb2sodHlwZSwgYWRkciwgc2l6ZSkgKF9fcmFuZ2Vfbm90X29rKGFkZHIsc2l6ZSkgPT0gMCkKKworLyogdGhpcyBmdW5jdGlvbiB3aWxsIGdvIGF3YXkgc29vbiAtIHVzZSBhY2Nlc3Nfb2soKSBpbnN0ZWFkICovCitleHRlcm4gaW5saW5lIGludCBfX2RlcHJlY2F0ZWQgdmVyaWZ5X2FyZWEoaW50IHR5cGUsIGNvbnN0IHZvaWQgX191c2VyICogYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXJldHVybiBhY2Nlc3Nfb2sodHlwZSxhZGRyLHNpemUpID8gMCA6IC1FRkFVTFQ7Cit9CisKKworLyoKKyAqIFRoZSBleGNlcHRpb24gdGFibGUgY29uc2lzdHMgb2YgcGFpcnMgb2YgYWRkcmVzc2VzOiB0aGUgZmlyc3QgaXMgdGhlCisgKiBhZGRyZXNzIG9mIGFuIGluc3RydWN0aW9uIHRoYXQgaXMgYWxsb3dlZCB0byBmYXVsdCwgYW5kIHRoZSBzZWNvbmQgaXMKKyAqIHRoZSBhZGRyZXNzIGF0IHdoaWNoIHRoZSBwcm9ncmFtIHNob3VsZCBjb250aW51ZS4gIE5vIHJlZ2lzdGVycyBhcmUKKyAqIG1vZGlmaWVkLCBzbyBpdCBpcyBlbnRpcmVseSB1cCB0byB0aGUgY29udGludWF0aW9uIGNvZGUgdG8gZmlndXJlIG91dAorICogd2hhdCB0byBkby4KKyAqCisgKiBBbGwgdGhlIHJvdXRpbmVzIGJlbG93IHVzZSBiaXRzIG9mIGZpeHVwIGNvZGUgdGhhdCBhcmUgb3V0IG9mIGxpbmUKKyAqIHdpdGggdGhlIG1haW4gaW5zdHJ1Y3Rpb24gcGF0aC4gIFRoaXMgbWVhbnMgd2hlbiBldmVyeXRoaW5nIGlzIHdlbGwsCisgKiB3ZSBkb24ndCBldmVuIGhhdmUgdG8ganVtcCBvdmVyIHRoZW0uICBGdXJ0aGVyLCB0aGV5IGRvIG5vdCBpbnRydWRlCisgKiBvbiBvdXIgY2FjaGUgb3IgdGxiIGVudHJpZXMuCisgKi8KKworc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeQoreworCXVuc2lnbmVkIGxvbmcgaW5zbiwgZml4dXA7Cit9OworCisjZGVmaW5lIEFSQ0hfSEFTX1NFQVJDSF9FWFRBQkxFCisKKy8qCisgKiBUaGVzZSBhcmUgdGhlIG1haW4gc2luZ2xlLXZhbHVlIHRyYW5zZmVyIHJvdXRpbmVzLiAgVGhleSBhdXRvbWF0aWNhbGx5CisgKiB1c2UgdGhlIHJpZ2h0IHNpemUgaWYgd2UganVzdCBoYXZlIHRoZSByaWdodCBwb2ludGVyIHR5cGUuCisgKgorICogVGhpcyBnZXRzIGtpbmQgb2YgdWdseS4gV2Ugd2FudCB0byByZXR1cm4gX3R3b18gdmFsdWVzIGluICJnZXRfdXNlcigpIgorICogYW5kIHlldCB3ZSBkb24ndCB3YW50IHRvIGRvIGFueSBwb2ludGVycywgYmVjYXVzZSB0aGF0IGlzIHRvbyBtdWNoCisgKiBvZiBhIHBlcmZvcm1hbmNlIGltcGFjdC4gVGh1cyB3ZSBoYXZlIGEgZmV3IHJhdGhlciB1Z2x5IG1hY3JvcyBoZXJlLAorICogYW5kIGhpZGUgYWxsIHRoZSB1Z2xpbmVzcyBmcm9tIHRoZSB1c2VyLgorICoKKyAqIFRoZSAiX194eHgiIHZlcnNpb25zIG9mIHRoZSB1c2VyIGFjY2VzcyBmdW5jdGlvbnMgYXJlIHZlcnNpb25zIHRoYXQKKyAqIGRvIG5vdCB2ZXJpZnkgdGhlIGFkZHJlc3Mgc3BhY2UsIHRoYXQgbXVzdCBoYXZlIGJlZW4gZG9uZSBwcmV2aW91c2x5CisgKiB3aXRoIGEgc2VwYXJhdGUgImFjY2Vzc19vaygpIiBjYWxsICh0aGlzIGlzIHVzZWQgd2hlbiB3ZSBkbyBtdWx0aXBsZQorICogYWNjZXNzZXMgdG8gdGhlIHNhbWUgYXJlYSBvZiB1c2VyIG1lbW9yeSkuCisgKi8KKworI2RlZmluZSBfX2dldF91c2VyX3goc2l6ZSxyZXQseCxwdHIpIFwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygiY2FsbCBfX2dldF91c2VyXyIgI3NpemUgXAorCQk6Ij1hIiAocmV0KSwiPWQiICh4KSBcCisJCToiYyIgKHB0cikgXAorCQk6InI4IikKKworLyogQ2FyZWZ1bDogd2UgaGF2ZSB0byBjYXN0IHRoZSByZXN1bHQgdG8gdGhlIHR5cGUgb2YgdGhlIHBvaW50ZXIgZm9yIHNpZ24gcmVhc29ucyAqLworI2RlZmluZSBnZXRfdXNlcih4LHB0cikJCQkJCQkJXAorKHsJdW5zaWduZWQgbG9uZyBfX3ZhbF9ndTsJCQkJCQlcCisJaW50IF9fcmV0X2d1OyAJCQkJCQkJXAorCV9fY2hrX3VzZXJfcHRyKHB0cik7CQkJCQkJXAorCXN3aXRjaChzaXplb2YgKCoocHRyKSkpIHsJCQkJCVwKKwljYXNlIDE6ICBfX2dldF91c2VyX3goMSxfX3JldF9ndSxfX3ZhbF9ndSxwdHIpOyBicmVhazsJCVwKKwljYXNlIDI6ICBfX2dldF91c2VyX3goMixfX3JldF9ndSxfX3ZhbF9ndSxwdHIpOyBicmVhazsJCVwKKwljYXNlIDQ6ICBfX2dldF91c2VyX3goNCxfX3JldF9ndSxfX3ZhbF9ndSxwdHIpOyBicmVhazsJCVwKKwljYXNlIDg6ICBfX2dldF91c2VyX3goOCxfX3JldF9ndSxfX3ZhbF9ndSxwdHIpOyBicmVhazsJCVwKKwlkZWZhdWx0OiBfX2dldF91c2VyX2JhZCgpOyBicmVhazsJCQkJXAorCX0JCQkJCQkJCVwKKwkoeCkgPSAoX190eXBlb2ZfXygqKHB0cikpKV9fdmFsX2d1OwkJCQlcCisJX19yZXRfZ3U7CQkJCQkJCVwKK30pCisKK2V4dGVybiB2b2lkIF9fcHV0X3VzZXJfMSh2b2lkKTsKK2V4dGVybiB2b2lkIF9fcHV0X3VzZXJfMih2b2lkKTsKK2V4dGVybiB2b2lkIF9fcHV0X3VzZXJfNCh2b2lkKTsKK2V4dGVybiB2b2lkIF9fcHV0X3VzZXJfOCh2b2lkKTsKK2V4dGVybiB2b2lkIF9fcHV0X3VzZXJfYmFkKHZvaWQpOworCisjZGVmaW5lIF9fcHV0X3VzZXJfeChzaXplLHJldCx4LHB0cikJCQkJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygiY2FsbCBfX3B1dF91c2VyXyIgI3NpemUJCQlcCisJCToiPWEiIChyZXQpCQkJCQkJXAorCQk6ImMiIChwdHIpLCJkIiAoeCkJCQkJCVwKKwkJOiJyOCIpCisKKyNkZWZpbmUgcHV0X3VzZXIoeCxwdHIpCQkJCQkJCVwKKyAgX19wdXRfdXNlcl9jaGVjaygoX190eXBlb2ZfXygqKHB0cikpKSh4KSwocHRyKSxzaXplb2YoKihwdHIpKSkKKworI2RlZmluZSBfX2dldF91c2VyKHgscHRyKSBcCisgIF9fZ2V0X3VzZXJfbm9jaGVjaygoeCksKHB0ciksc2l6ZW9mKCoocHRyKSkpCisjZGVmaW5lIF9fcHV0X3VzZXIoeCxwdHIpIFwKKyAgX19wdXRfdXNlcl9ub2NoZWNrKChfX3R5cGVvZl9fKCoocHRyKSkpKHgpLChwdHIpLHNpemVvZigqKHB0cikpKQorCisjZGVmaW5lIF9fZ2V0X3VzZXJfdW5hbGlnbmVkIF9fZ2V0X3VzZXIKKyNkZWZpbmUgX19wdXRfdXNlcl91bmFsaWduZWQgX19wdXRfdXNlcgorCisjZGVmaW5lIF9fcHV0X3VzZXJfbm9jaGVjayh4LHB0cixzaXplKQkJCVwKKyh7CQkJCQkJCVwKKwlpbnQgX19wdV9lcnI7CQkJCQlcCisJX19wdXRfdXNlcl9zaXplKCh4KSwocHRyKSwoc2l6ZSksX19wdV9lcnIpOwlcCisJX19wdV9lcnI7CQkJCQlcCit9KQorCisKKyNkZWZpbmUgX19wdXRfdXNlcl9jaGVjayh4LHB0cixzaXplKQkJCVwKKyh7CQkJCQkJCVwKKwlpbnQgX19wdV9lcnI7CQkJCQlcCisJX190eXBlb2ZfXygqKHB0cikpIF9fdXNlciAqX19wdV9hZGRyID0gKHB0cik7CVwKKwlzd2l0Y2ggKHNpemUpIHsgCQkJCVwKKwljYXNlIDE6IF9fcHV0X3VzZXJfeCgxLF9fcHVfZXJyLHgsX19wdV9hZGRyKTsgYnJlYWs7CVwKKwljYXNlIDI6IF9fcHV0X3VzZXJfeCgyLF9fcHVfZXJyLHgsX19wdV9hZGRyKTsgYnJlYWs7CVwKKwljYXNlIDQ6IF9fcHV0X3VzZXJfeCg0LF9fcHVfZXJyLHgsX19wdV9hZGRyKTsgYnJlYWs7CVwKKwljYXNlIDg6IF9fcHV0X3VzZXJfeCg4LF9fcHVfZXJyLHgsX19wdV9hZGRyKTsgYnJlYWs7CVwKKwlkZWZhdWx0OiBfX3B1dF91c2VyX2JhZCgpOwkJCVwKKwl9CQkJCQkJXAorCV9fcHVfZXJyOwkJCQkJXAorfSkKKworI2RlZmluZSBfX3B1dF91c2VyX3NpemUoeCxwdHIsc2l6ZSxyZXR2YWwpCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJcmV0dmFsID0gMDsJCQkJCQkJXAorCV9fY2hrX3VzZXJfcHRyKHB0cik7CQkJCQkJXAorCXN3aXRjaCAoc2l6ZSkgewkJCQkJCQlcCisJICBjYXNlIDE6IF9fcHV0X3VzZXJfYXNtKHgscHRyLHJldHZhbCwiYiIsImIiLCJpcSIsLUVGQVVMVCk7IGJyZWFrO1wKKwkgIGNhc2UgMjogX19wdXRfdXNlcl9hc20oeCxwdHIscmV0dmFsLCJ3IiwidyIsImlyIiwtRUZBVUxUKTsgYnJlYWs7XAorCSAgY2FzZSA0OiBfX3B1dF91c2VyX2FzbSh4LHB0cixyZXR2YWwsImwiLCJrIiwiaXIiLC1FRkFVTFQpOyBicmVhaztcCisJICBjYXNlIDg6IF9fcHV0X3VzZXJfYXNtKHgscHRyLHJldHZhbCwicSIsIiIsImlyIiwtRUZBVUxUKTsgYnJlYWs7XAorCSAgZGVmYXVsdDogX19wdXRfdXNlcl9iYWQoKTsJCQkJCVwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisvKiBGSVhNRTogdGhpcyBoYWNrIGlzIGRlZmluaXRlbHkgd3JvbmcgLUFLICovCitzdHJ1Y3QgX19sYXJnZV9zdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIGJ1ZlsxMDBdOyB9OworI2RlZmluZSBfX20oeCkgKCooc3RydWN0IF9fbGFyZ2Vfc3RydWN0IF9fdXNlciAqKSh4KSkKKworLyoKKyAqIFRlbGwgZ2NjIHdlIHJlYWQgZnJvbSBtZW1vcnkgaW5zdGVhZCBvZiB3cml0aW5nOiB0aGlzIGlzIGJlY2F1c2UKKyAqIHdlIGRvIG5vdCB3cml0ZSB0byBhbnkgbWVtb3J5IGdjYyBrbm93cyBhYm91dCwgc28gdGhlcmUgYXJlIG5vCisgKiBhbGlhc2luZyBpc3N1ZXMuCisgKi8KKyNkZWZpbmUgX19wdXRfdXNlcl9hc20oeCwgYWRkciwgZXJyLCBpdHlwZSwgcnR5cGUsIGx0eXBlLCBlcnJubykJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJXAorCQkiMToJbW92Iml0eXBlIiAlInJ0eXBlIjEsJTJcbiIJCVwKKwkJIjI6XG4iCQkJCQkJXAorCQkiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIgkJCVwKKwkJIjM6CW1vdiAlMywlMFxuIgkJCQlcCisJCSIJam1wIDJiXG4iCQkJCVwKKwkJIi5wcmV2aW91c1xuIgkJCQkJXAorCQkiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgkJCVwKKwkJIgkuYWxpZ24gOFxuIgkJCQlcCisJCSIJLnF1YWQgMWIsM2JcbiIJCQkJXAorCQkiLnByZXZpb3VzIgkJCQkJXAorCQk6ICI9ciIoZXJyKQkJCQkJXAorCQk6IGx0eXBlICh4KSwgIm0iKF9fbShhZGRyKSksICJpIihlcnJubyksICIwIihlcnIpKQorCisKKyNkZWZpbmUgX19nZXRfdXNlcl9ub2NoZWNrKHgscHRyLHNpemUpCQkJCVwKKyh7CQkJCQkJCQlcCisJaW50IF9fZ3VfZXJyOwkJCQkJCVwKKwl1bnNpZ25lZCBsb25nIF9fZ3VfdmFsOwkJCQkJXAorCV9fZ2V0X3VzZXJfc2l6ZShfX2d1X3ZhbCwocHRyKSwoc2l6ZSksX19ndV9lcnIpOwlcCisJKHgpID0gKF9fdHlwZW9mX18oKihwdHIpKSlfX2d1X3ZhbDsJCQlcCisJX19ndV9lcnI7CQkJCQkJXAorfSkKKworZXh0ZXJuIGludCBfX2dldF91c2VyXzEodm9pZCk7CitleHRlcm4gaW50IF9fZ2V0X3VzZXJfMih2b2lkKTsKK2V4dGVybiBpbnQgX19nZXRfdXNlcl80KHZvaWQpOworZXh0ZXJuIGludCBfX2dldF91c2VyXzgodm9pZCk7CitleHRlcm4gaW50IF9fZ2V0X3VzZXJfYmFkKHZvaWQpOworCisjZGVmaW5lIF9fZ2V0X3VzZXJfc2l6ZSh4LHB0cixzaXplLHJldHZhbCkJCQkJXAorZG8gewkJCQkJCQkJCVwKKwlyZXR2YWwgPSAwOwkJCQkJCQlcCisJX19jaGtfdXNlcl9wdHIocHRyKTsJCQkJCQlcCisJc3dpdGNoIChzaXplKSB7CQkJCQkJCVwKKwkgIGNhc2UgMTogX19nZXRfdXNlcl9hc20oeCxwdHIscmV0dmFsLCJiIiwiYiIsIj1xIiwtRUZBVUxUKTsgYnJlYWs7XAorCSAgY2FzZSAyOiBfX2dldF91c2VyX2FzbSh4LHB0cixyZXR2YWwsInciLCJ3IiwiPXIiLC1FRkFVTFQpOyBicmVhaztcCisJICBjYXNlIDQ6IF9fZ2V0X3VzZXJfYXNtKHgscHRyLHJldHZhbCwibCIsImsiLCI9ciIsLUVGQVVMVCk7IGJyZWFrO1wKKwkgIGNhc2UgODogX19nZXRfdXNlcl9hc20oeCxwdHIscmV0dmFsLCJxIiwiIiwiPXIiLC1FRkFVTFQpOyBicmVhaztcCisJICBkZWZhdWx0OiAoeCkgPSBfX2dldF91c2VyX2JhZCgpOwkJCQlcCisJfQkJCQkJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBfX2dldF91c2VyX2FzbSh4LCBhZGRyLCBlcnIsIGl0eXBlLCBydHlwZSwgbHR5cGUsIGVycm5vKQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQlcCisJCSIxOgltb3YiaXR5cGUiICUyLCUicnR5cGUiMVxuIgkJXAorCQkiMjpcbiIJCQkJCQlcCisJCSIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iCQkJXAorCQkiMzoJbW92ICUzLCUwXG4iCQkJCVwKKwkJIgl4b3IiaXR5cGUiICUicnR5cGUiMSwlInJ0eXBlIjFcbiIJXAorCQkiCWptcCAyYlxuIgkJCQlcCisJCSIucHJldmlvdXNcbiIJCQkJCVwKKwkJIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIJCQlcCisJCSIJLmFsaWduIDhcbiIJCQkJXAorCQkiCS5xdWFkIDFiLDNiXG4iCQkJCVwKKwkJIi5wcmV2aW91cyIJCQkJCVwKKwkJOiAiPXIiKGVyciksIGx0eXBlICh4KQkJCQlcCisJCTogIm0iKF9fbShhZGRyKSksICJpIihlcnJubyksICIwIihlcnIpKQorCisvKgorICogQ29weSBUby9Gcm9tIFVzZXJzcGFjZQorICovCisKKy8qIEhhbmRsZXMgZXhjZXB0aW9ucyBpbiBib3RoIHRvIGFuZCBmcm9tLCBidXQgZG9lc24ndCBkbyBhY2Nlc3Nfb2sgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIGNvcHlfdXNlcl9nZW5lcmljKHZvaWQgKnRvLCBjb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBsZW4pOyAKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgY29weV90b191c2VyKHZvaWQgX191c2VyICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgbGVuKTsgCitleHRlcm4gdW5zaWduZWQgbG9uZyBjb3B5X2Zyb21fdXNlcih2b2lkICp0bywgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGxlbik7IAorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgY29weV9pbl91c2VyKHZvaWQgX191c2VyICp0bywgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGxlbik7IAorCitzdGF0aWMgaW5saW5lIGludCBfX2NvcHlfZnJvbV91c2VyKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCBfX3VzZXIgKnNyYywgdW5zaWduZWQgc2l6ZSkgCit7IAorICAgICAgIGludCByZXQgPSAwOworCWlmICghX19idWlsdGluX2NvbnN0YW50X3Aoc2l6ZSkpCisJCXJldHVybiBjb3B5X3VzZXJfZ2VuZXJpYyhkc3QsKF9fZm9yY2Ugdm9pZCAqKXNyYyxzaXplKTsKKwlzd2l0Y2ggKHNpemUpIHsgCisJY2FzZSAxOl9fZ2V0X3VzZXJfYXNtKCoodTgqKWRzdCwodTggX191c2VyICopc3JjLHJldCwiYiIsImIiLCI9cSIsMSk7IAorCQlyZXR1cm4gcmV0OworCWNhc2UgMjpfX2dldF91c2VyX2FzbSgqKHUxNiopZHN0LCh1MTYgX191c2VyICopc3JjLHJldCwidyIsInciLCI9ciIsMik7CisJCXJldHVybiByZXQ7CisJY2FzZSA0Ol9fZ2V0X3VzZXJfYXNtKCoodTMyKilkc3QsKHUzMiBfX3VzZXIgKilzcmMscmV0LCJsIiwiayIsIj1yIiw0KTsKKwkJcmV0dXJuIHJldDsKKwljYXNlIDg6X19nZXRfdXNlcl9hc20oKih1NjQqKWRzdCwodTY0IF9fdXNlciAqKXNyYyxyZXQsInEiLCIiLCI9ciIsOCk7CisJCXJldHVybiByZXQ7IAorCWNhc2UgMTA6CisJICAgICAgIAlfX2dldF91c2VyX2FzbSgqKHU2NCopZHN0LCh1NjQgX191c2VyICopc3JjLHJldCwicSIsIiIsIj1yIiwxNik7CisJCWlmICh1bmxpa2VseShyZXQpKSByZXR1cm4gcmV0OworCQlfX2dldF91c2VyX2FzbSgqKHUxNiopKDgrKGNoYXIqKWRzdCksKHUxNiBfX3VzZXIgKikoOCsoY2hhciBfX3VzZXIgKilzcmMpLHJldCwidyIsInciLCI9ciIsMik7CisJCXJldHVybiByZXQ7IAorCWNhc2UgMTY6CisJCV9fZ2V0X3VzZXJfYXNtKCoodTY0Kilkc3QsKHU2NCBfX3VzZXIgKilzcmMscmV0LCJxIiwiIiwiPXIiLDE2KTsKKwkJaWYgKHVubGlrZWx5KHJldCkpIHJldHVybiByZXQ7CisJCV9fZ2V0X3VzZXJfYXNtKCoodTY0KikoOCsoY2hhciopZHN0KSwodTY0IF9fdXNlciAqKSg4KyhjaGFyIF9fdXNlciAqKXNyYykscmV0LCJxIiwiIiwiPXIiLDgpOworCQlyZXR1cm4gcmV0OyAKKwlkZWZhdWx0OgorCQlyZXR1cm4gY29weV91c2VyX2dlbmVyaWMoZHN0LChfX2ZvcmNlIHZvaWQgKilzcmMsc2l6ZSk7IAorCX0KK30JCisKK3N0YXRpYyBpbmxpbmUgaW50IF9fY29weV90b191c2VyKHZvaWQgX191c2VyICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgc2l6ZSkgCit7IAorICAgICAgIGludCByZXQgPSAwOworCWlmICghX19idWlsdGluX2NvbnN0YW50X3Aoc2l6ZSkpCisJCXJldHVybiBjb3B5X3VzZXJfZ2VuZXJpYygoX19mb3JjZSB2b2lkICopZHN0LHNyYyxzaXplKTsKKwlzd2l0Y2ggKHNpemUpIHsgCisJY2FzZSAxOl9fcHV0X3VzZXJfYXNtKCoodTgqKXNyYywodTggX191c2VyICopZHN0LHJldCwiYiIsImIiLCJpcSIsMSk7IAorCQlyZXR1cm4gcmV0OworCWNhc2UgMjpfX3B1dF91c2VyX2FzbSgqKHUxNiopc3JjLCh1MTYgX191c2VyICopZHN0LHJldCwidyIsInciLCJpciIsMik7CisJCXJldHVybiByZXQ7CisJY2FzZSA0Ol9fcHV0X3VzZXJfYXNtKCoodTMyKilzcmMsKHUzMiBfX3VzZXIgKilkc3QscmV0LCJsIiwiayIsImlyIiw0KTsKKwkJcmV0dXJuIHJldDsKKwljYXNlIDg6X19wdXRfdXNlcl9hc20oKih1NjQqKXNyYywodTY0IF9fdXNlciAqKWRzdCxyZXQsInEiLCIiLCJpciIsOCk7CisJCXJldHVybiByZXQ7IAorCWNhc2UgMTA6CisJCV9fcHV0X3VzZXJfYXNtKCoodTY0KilzcmMsKHU2NCBfX3VzZXIgKilkc3QscmV0LCJxIiwiIiwiaXIiLDEwKTsKKwkJaWYgKHVubGlrZWx5KHJldCkpIHJldHVybiByZXQ7CisJCWFzbSgiIjo6OiJtZW1vcnkiKTsKKwkJX19wdXRfdXNlcl9hc20oNFsodTE2KilzcmNdLDQrKHUxNiBfX3VzZXIgKilkc3QscmV0LCJ3IiwidyIsImlyIiwyKTsKKwkJcmV0dXJuIHJldDsgCisJY2FzZSAxNjoKKwkJX19wdXRfdXNlcl9hc20oKih1NjQqKXNyYywodTY0IF9fdXNlciAqKWRzdCxyZXQsInEiLCIiLCJpciIsMTYpOworCQlpZiAodW5saWtlbHkocmV0KSkgcmV0dXJuIHJldDsKKwkJYXNtKCIiOjo6Im1lbW9yeSIpOworCQlfX3B1dF91c2VyX2FzbSgxWyh1NjQqKXNyY10sMSsodTY0IF9fdXNlciAqKWRzdCxyZXQsInEiLCIiLCJpciIsOCk7CisJCXJldHVybiByZXQ7IAorCWRlZmF1bHQ6CisJCXJldHVybiBjb3B5X3VzZXJfZ2VuZXJpYygoX19mb3JjZSB2b2lkICopZHN0LHNyYyxzaXplKTsgCisJfQorfQkKKworCitzdGF0aWMgaW5saW5lIGludCBfX2NvcHlfaW5fdXNlcih2b2lkIF9fdXNlciAqZHN0LCBjb25zdCB2b2lkIF9fdXNlciAqc3JjLCB1bnNpZ25lZCBzaXplKSAKK3sgCisgICAgICAgaW50IHJldCA9IDA7CisJaWYgKCFfX2J1aWx0aW5fY29uc3RhbnRfcChzaXplKSkKKwkJcmV0dXJuIGNvcHlfdXNlcl9nZW5lcmljKChfX2ZvcmNlIHZvaWQgKilkc3QsKF9fZm9yY2Ugdm9pZCAqKXNyYyxzaXplKTsKKwlzd2l0Y2ggKHNpemUpIHsgCisJY2FzZSAxOiB7IAorCQl1OCB0bXA7CisJCV9fZ2V0X3VzZXJfYXNtKHRtcCwodTggX191c2VyICopc3JjLHJldCwiYiIsImIiLCI9cSIsMSk7IAorCQlpZiAobGlrZWx5KCFyZXQpKQorCQkJX19wdXRfdXNlcl9hc20odG1wLCh1OCBfX3VzZXIgKilkc3QscmV0LCJiIiwiYiIsImlxIiwxKTsgCisJCXJldHVybiByZXQ7CisJfQorCWNhc2UgMjogeyAKKwkJdTE2IHRtcDsKKwkJX19nZXRfdXNlcl9hc20odG1wLCh1MTYgX191c2VyICopc3JjLHJldCwidyIsInciLCI9ciIsMik7IAorCQlpZiAobGlrZWx5KCFyZXQpKQorCQkJX19wdXRfdXNlcl9hc20odG1wLCh1MTYgX191c2VyICopZHN0LHJldCwidyIsInciLCJpciIsMik7IAorCQlyZXR1cm4gcmV0OworCX0KKworCWNhc2UgNDogeyAKKwkJdTMyIHRtcDsKKwkJX19nZXRfdXNlcl9hc20odG1wLCh1MzIgX191c2VyICopc3JjLHJldCwibCIsImsiLCI9ciIsNCk7IAorCQlpZiAobGlrZWx5KCFyZXQpKQorCQkJX19wdXRfdXNlcl9hc20odG1wLCh1MzIgX191c2VyICopZHN0LHJldCwibCIsImsiLCJpciIsNCk7IAorCQlyZXR1cm4gcmV0OworCX0KKwljYXNlIDg6IHsgCisJCXU2NCB0bXA7CisJCV9fZ2V0X3VzZXJfYXNtKHRtcCwodTY0IF9fdXNlciAqKXNyYyxyZXQsInEiLCIiLCI9ciIsOCk7IAorCQlpZiAobGlrZWx5KCFyZXQpKQorCQkJX19wdXRfdXNlcl9hc20odG1wLCh1NjQgX191c2VyICopZHN0LHJldCwicSIsIiIsImlyIiw4KTsgCisJCXJldHVybiByZXQ7CisJfQorCWRlZmF1bHQ6CisJCXJldHVybiBjb3B5X3VzZXJfZ2VuZXJpYygoX19mb3JjZSB2b2lkICopZHN0LChfX2ZvcmNlIHZvaWQgKilzcmMsc2l6ZSk7IAorCX0KK30JCisKK2xvbmcgc3RybmNweV9mcm9tX3VzZXIoY2hhciAqZHN0LCBjb25zdCBjaGFyIF9fdXNlciAqc3JjLCBsb25nIGNvdW50KTsKK2xvbmcgX19zdHJuY3B5X2Zyb21fdXNlcihjaGFyICpkc3QsIGNvbnN0IGNoYXIgX191c2VyICpzcmMsIGxvbmcgY291bnQpOworbG9uZyBzdHJubGVuX3VzZXIoY29uc3QgY2hhciBfX3VzZXIgKnN0ciwgbG9uZyBuKTsKK2xvbmcgc3RybGVuX3VzZXIoY29uc3QgY2hhciBfX3VzZXIgKnN0cik7Cit1bnNpZ25lZCBsb25nIGNsZWFyX3VzZXIodm9pZCBfX3VzZXIgKm1lbSwgdW5zaWduZWQgbG9uZyBsZW4pOwordW5zaWduZWQgbG9uZyBfX2NsZWFyX3VzZXIodm9pZCBfX3VzZXIgKm1lbSwgdW5zaWduZWQgbG9uZyBsZW4pOworCisjZGVmaW5lIF9fY29weV90b191c2VyX2luYXRvbWljIF9fY29weV90b191c2VyCisjZGVmaW5lIF9fY29weV9mcm9tX3VzZXJfaW5hdG9taWMgX19jb3B5X2Zyb21fdXNlcgorCisjZW5kaWYgLyogX19YODZfNjRfVUFDQ0VTU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvdWNvbnRleHQuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC91Y29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1OWEzZGEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvdWNvbnRleHQuaApAQCAtMCwwICsxLDEyIEBACisjaWZuZGVmIF9BU01YODY2NF9VQ09OVEVYVF9ICisjZGVmaW5lIF9BU01YODY2NF9VQ09OVEVYVF9ICisKK3N0cnVjdCB1Y29udGV4dCB7CisJdW5zaWduZWQgbG9uZwkgIHVjX2ZsYWdzOworCXN0cnVjdCB1Y29udGV4dCAgKnVjX2xpbms7CisJc3RhY2tfdAkJICB1Y19zdGFjazsKKwlzdHJ1Y3Qgc2lnY29udGV4dCB1Y19tY29udGV4dDsKKwlzaWdzZXRfdAkgIHVjX3NpZ21hc2s7CS8qIG1hc2sgbGFzdCBmb3IgZXh0ZW5zaWJpbGl0eSAqLworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvdW5hbGlnbmVkLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvdW5hbGlnbmVkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRiZjc4ZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC91bmFsaWduZWQuaApAQCAtMCwwICsxLDM3IEBACisjaWZuZGVmIF9fWDg2NjRfVU5BTElHTkVEX0gKKyNkZWZpbmUgX19YODY2NF9VTkFMSUdORURfSAorCisvKgorICogVGhlIHg4Ni02NCBjYW4gZG8gdW5hbGlnbmVkIGFjY2Vzc2VzIGl0c2VsZi4gCisgKgorICogVGhlIHN0cmFuZ2UgbWFjcm9zIGFyZSB0aGVyZSB0byBtYWtlIHN1cmUgdGhlc2UgY2FuJ3QKKyAqIGJlIG1pc3VzZWQgaW4gYSB3YXkgdGhhdCBtYWtlcyB0aGVtIG5vdCB3b3JrIG9uIG90aGVyCisgKiBhcmNoaXRlY3R1cmVzIHdoZXJlIHVuYWxpZ25lZCBhY2Nlc3NlcyBhcmVuJ3QgYXMgc2ltcGxlLgorICovCisKKy8qKgorICogZ2V0X3VuYWxpZ25lZCAtIGdldCB2YWx1ZSBmcm9tIHBvc3NpYmx5IG1pcy1hbGlnbmVkIGxvY2F0aW9uCisgKiBAcHRyOiBwb2ludGVyIHRvIHZhbHVlCisgKgorICogVGhpcyBtYWNybyBzaG91bGQgYmUgdXNlZCBmb3IgYWNjZXNzaW5nIHZhbHVlcyBsYXJnZXIgaW4gc2l6ZSB0aGFuIAorICogc2luZ2xlIGJ5dGVzIGF0IGxvY2F0aW9ucyB0aGF0IGFyZSBleHBlY3RlZCB0byBiZSBpbXByb3Blcmx5IGFsaWduZWQsIAorICogZS5nLiByZXRyaWV2aW5nIGEgdTE2IHZhbHVlIGZyb20gYSBsb2NhdGlvbiBub3QgdTE2LWFsaWduZWQuCisgKgorICogTm90ZSB0aGF0IHVuYWxpZ25lZCBhY2Nlc3NlcyBjYW4gYmUgdmVyeSBleHBlbnNpdmUgb24gc29tZSBhcmNoaXRlY3R1cmVzLgorICovCisjZGVmaW5lIGdldF91bmFsaWduZWQocHRyKSAoKihwdHIpKQorCisvKioKKyAqIHB1dF91bmFsaWduZWQgLSBwdXQgdmFsdWUgdG8gYSBwb3NzaWJseSBtaXMtYWxpZ25lZCBsb2NhdGlvbgorICogQHZhbDogdmFsdWUgdG8gcGxhY2UKKyAqIEBwdHI6IHBvaW50ZXIgdG8gbG9jYXRpb24KKyAqCisgKiBUaGlzIG1hY3JvIHNob3VsZCBiZSB1c2VkIGZvciBwbGFjaW5nIHZhbHVlcyBsYXJnZXIgaW4gc2l6ZSB0aGFuIAorICogc2luZ2xlIGJ5dGVzIGF0IGxvY2F0aW9ucyB0aGF0IGFyZSBleHBlY3RlZCB0byBiZSBpbXByb3Blcmx5IGFsaWduZWQsIAorICogZS5nLiB3cml0aW5nIGEgdTE2IHZhbHVlIHRvIGEgbG9jYXRpb24gbm90IHUxNi1hbGlnbmVkLgorICoKKyAqIE5vdGUgdGhhdCB1bmFsaWduZWQgYWNjZXNzZXMgY2FuIGJlIHZlcnkgZXhwZW5zaXZlIG9uIHNvbWUgYXJjaGl0ZWN0dXJlcy4KKyAqLworI2RlZmluZSBwdXRfdW5hbGlnbmVkKHZhbCwgcHRyKSAoKHZvaWQpKCAqKHB0cikgPSAodmFsKSApKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC91bmlzdGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGVhMDE2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L3VuaXN0ZC5oCkBAIC0wLDAgKzEsNzk3IEBACisjaWZuZGVmIF9BU01fWDg2XzY0X1VOSVNURF9IXworI2RlZmluZSBfQVNNX1g4Nl82NF9VTklTVERfSF8KKworI2lmbmRlZiBfX1NZU0NBTEwKKyNkZWZpbmUgX19TWVNDQUxMKGEsYikgCisjZW5kaWYKKworLyoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgc3lzdGVtIGNhbGwgbnVtYmVycy4KKyAqIAorICogTm90ZTogaG9sZXMgYXJlIG5vdCBhbGxvd2VkLgorICovCisKKy8qIGF0IGxlYXN0IDggc3lzY2FsbCBwZXIgY2FjaGVsaW5lICovCisjZGVmaW5lIF9fTlJfcmVhZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorX19TWVNDQUxMKF9fTlJfcmVhZCwgc3lzX3JlYWQpCisjZGVmaW5lIF9fTlJfd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorX19TWVNDQUxMKF9fTlJfd3JpdGUsIHN5c193cml0ZSkKKyNkZWZpbmUgX19OUl9vcGVuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCitfX1NZU0NBTEwoX19OUl9vcGVuLCBzeXNfb3BlbikKKyNkZWZpbmUgX19OUl9jbG9zZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCitfX1NZU0NBTEwoX19OUl9jbG9zZSwgc3lzX2Nsb3NlKQorI2RlZmluZSBfX05SX3N0YXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKK19fU1lTQ0FMTChfX05SX3N0YXQsIHN5c19uZXdzdGF0KQorI2RlZmluZSBfX05SX2ZzdGF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKK19fU1lTQ0FMTChfX05SX2ZzdGF0LCBzeXNfbmV3ZnN0YXQpCisjZGVmaW5lIF9fTlJfbHN0YXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorX19TWVNDQUxMKF9fTlJfbHN0YXQsIHN5c19uZXdsc3RhdCkKKyNkZWZpbmUgX19OUl9wb2xsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CitfX1NZU0NBTEwoX19OUl9wb2xsLCBzeXNfcG9sbCkKKworI2RlZmluZSBfX05SX2xzZWVrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKK19fU1lTQ0FMTChfX05SX2xzZWVrLCBzeXNfbHNlZWspCisjZGVmaW5lIF9fTlJfbW1hcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorX19TWVNDQUxMKF9fTlJfbW1hcCwgc3lzX21tYXApCisjZGVmaW5lIF9fTlJfbXByb3RlY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorX19TWVNDQUxMKF9fTlJfbXByb3RlY3QsIHN5c19tcHJvdGVjdCkKKyNkZWZpbmUgX19OUl9tdW5tYXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCitfX1NZU0NBTEwoX19OUl9tdW5tYXAsIHN5c19tdW5tYXApCisjZGVmaW5lIF9fTlJfYnJrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorX19TWVNDQUxMKF9fTlJfYnJrLCBzeXNfYnJrKQorI2RlZmluZSBfX05SX3J0X3NpZ2FjdGlvbiAgICAgICAgICAgICAgICAgICAgICAgMTMKK19fU1lTQ0FMTChfX05SX3J0X3NpZ2FjdGlvbiwgc3lzX3J0X3NpZ2FjdGlvbikKKyNkZWZpbmUgX19OUl9ydF9zaWdwcm9jbWFzayAgICAgICAgICAgICAgICAgICAgIDE0CitfX1NZU0NBTEwoX19OUl9ydF9zaWdwcm9jbWFzaywgc3lzX3J0X3NpZ3Byb2NtYXNrKQorI2RlZmluZSBfX05SX3J0X3NpZ3JldHVybiAgICAgICAgICAgICAgICAgICAgICAgMTUKK19fU1lTQ0FMTChfX05SX3J0X3NpZ3JldHVybiwgc3R1Yl9ydF9zaWdyZXR1cm4pCisKKyNkZWZpbmUgX19OUl9pb2N0bCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CitfX1NZU0NBTEwoX19OUl9pb2N0bCwgc3lzX2lvY3RsKQorI2RlZmluZSBfX05SX3ByZWFkNjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKK19fU1lTQ0FMTChfX05SX3ByZWFkNjQsIHN5c19wcmVhZDY0KQorI2RlZmluZSBfX05SX3B3cml0ZTY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKK19fU1lTQ0FMTChfX05SX3B3cml0ZTY0LCBzeXNfcHdyaXRlNjQpCisjZGVmaW5lIF9fTlJfcmVhZHYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQorX19TWVNDQUxMKF9fTlJfcmVhZHYsIHN5c19yZWFkdikKKyNkZWZpbmUgX19OUl93cml0ZXYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCitfX1NZU0NBTEwoX19OUl93cml0ZXYsIHN5c193cml0ZXYpCisjZGVmaW5lIF9fTlJfYWNjZXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQorX19TWVNDQUxMKF9fTlJfYWNjZXNzLCBzeXNfYWNjZXNzKQorI2RlZmluZSBfX05SX3BpcGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKK19fU1lTQ0FMTChfX05SX3BpcGUsIHN5c19waXBlKQorI2RlZmluZSBfX05SX3NlbGVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKK19fU1lTQ0FMTChfX05SX3NlbGVjdCwgc3lzX3NlbGVjdCkKKworI2RlZmluZSBfX05SX3NjaGVkX3lpZWxkICAgICAgICAgICAgICAgICAgICAgICAgMjQKK19fU1lTQ0FMTChfX05SX3NjaGVkX3lpZWxkLCBzeXNfc2NoZWRfeWllbGQpCisjZGVmaW5lIF9fTlJfbXJlbWFwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQorX19TWVNDQUxMKF9fTlJfbXJlbWFwLCBzeXNfbXJlbWFwKQorI2RlZmluZSBfX05SX21zeW5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKK19fU1lTQ0FMTChfX05SX21zeW5jLCBzeXNfbXN5bmMpCisjZGVmaW5lIF9fTlJfbWluY29yZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNworX19TWVNDQUxMKF9fTlJfbWluY29yZSwgc3lzX21pbmNvcmUpCisjZGVmaW5lIF9fTlJfbWFkdmlzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAorX19TWVNDQUxMKF9fTlJfbWFkdmlzZSwgc3lzX21hZHZpc2UpCisjZGVmaW5lIF9fTlJfc2htZ2V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorX19TWVNDQUxMKF9fTlJfc2htZ2V0LCBzeXNfc2htZ2V0KQorI2RlZmluZSBfX05SX3NobWF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKK19fU1lTQ0FMTChfX05SX3NobWF0LCB3cmFwX3N5c19zaG1hdCkKKyNkZWZpbmUgX19OUl9zaG1jdGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCitfX1NZU0NBTEwoX19OUl9zaG1jdGwsIHN5c19zaG1jdGwpCisKKyNkZWZpbmUgX19OUl9kdXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCitfX1NZU0NBTEwoX19OUl9kdXAsIHN5c19kdXApCisjZGVmaW5lIF9fTlJfZHVwMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMworX19TWVNDQUxMKF9fTlJfZHVwMiwgc3lzX2R1cDIpCisjZGVmaW5lIF9fTlJfcGF1c2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNAorX19TWVNDQUxMKF9fTlJfcGF1c2UsIHN5c19wYXVzZSkKKyNkZWZpbmUgX19OUl9uYW5vc2xlZXAgICAgICAgICAgICAgICAgICAgICAgICAgIDM1CitfX1NZU0NBTEwoX19OUl9uYW5vc2xlZXAsIHN5c19uYW5vc2xlZXApCisjZGVmaW5lIF9fTlJfZ2V0aXRpbWVyICAgICAgICAgICAgICAgICAgICAgICAgICAzNgorX19TWVNDQUxMKF9fTlJfZ2V0aXRpbWVyLCBzeXNfZ2V0aXRpbWVyKQorI2RlZmluZSBfX05SX2FsYXJtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzcKK19fU1lTQ0FMTChfX05SX2FsYXJtLCBzeXNfYWxhcm0pCisjZGVmaW5lIF9fTlJfc2V0aXRpbWVyICAgICAgICAgICAgICAgICAgICAgICAgICAzOAorX19TWVNDQUxMKF9fTlJfc2V0aXRpbWVyLCBzeXNfc2V0aXRpbWVyKQorI2RlZmluZSBfX05SX2dldHBpZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzkKK19fU1lTQ0FMTChfX05SX2dldHBpZCwgc3lzX2dldHBpZCkKKworI2RlZmluZSBfX05SX3NlbmRmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgNDAKK19fU1lTQ0FMTChfX05SX3NlbmRmaWxlLCBzeXNfc2VuZGZpbGU2NCkKKyNkZWZpbmUgX19OUl9zb2NrZXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQxCitfX1NZU0NBTEwoX19OUl9zb2NrZXQsIHN5c19zb2NrZXQpCisjZGVmaW5lIF9fTlJfY29ubmVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MgorX19TWVNDQUxMKF9fTlJfY29ubmVjdCwgc3lzX2Nvbm5lY3QpCisjZGVmaW5lIF9fTlJfYWNjZXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MworX19TWVNDQUxMKF9fTlJfYWNjZXB0LCBzeXNfYWNjZXB0KQorI2RlZmluZSBfX05SX3NlbmR0byAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDQKK19fU1lTQ0FMTChfX05SX3NlbmR0bywgc3lzX3NlbmR0bykKKyNkZWZpbmUgX19OUl9yZWN2ZnJvbSAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ1CitfX1NZU0NBTEwoX19OUl9yZWN2ZnJvbSwgc3lzX3JlY3Zmcm9tKQorI2RlZmluZSBfX05SX3NlbmRtc2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDYKK19fU1lTQ0FMTChfX05SX3NlbmRtc2csIHN5c19zZW5kbXNnKQorI2RlZmluZSBfX05SX3JlY3Ztc2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDcKK19fU1lTQ0FMTChfX05SX3JlY3Ztc2csIHN5c19yZWN2bXNnKQorCisjZGVmaW5lIF9fTlJfc2h1dGRvd24gICAgICAgICAgICAgICAgICAgICAgICAgICA0OAorX19TWVNDQUxMKF9fTlJfc2h1dGRvd24sIHN5c19zaHV0ZG93bikKKyNkZWZpbmUgX19OUl9iaW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ5CitfX1NZU0NBTEwoX19OUl9iaW5kLCBzeXNfYmluZCkKKyNkZWZpbmUgX19OUl9saXN0ZW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUwCitfX1NZU0NBTEwoX19OUl9saXN0ZW4sIHN5c19saXN0ZW4pCisjZGVmaW5lIF9fTlJfZ2V0c29ja25hbWUgICAgICAgICAgICAgICAgICAgICAgICA1MQorX19TWVNDQUxMKF9fTlJfZ2V0c29ja25hbWUsIHN5c19nZXRzb2NrbmFtZSkKKyNkZWZpbmUgX19OUl9nZXRwZWVybmFtZSAgICAgICAgICAgICAgICAgICAgICAgIDUyCitfX1NZU0NBTEwoX19OUl9nZXRwZWVybmFtZSwgc3lzX2dldHBlZXJuYW1lKQorI2RlZmluZSBfX05SX3NvY2tldHBhaXIgICAgICAgICAgICAgICAgICAgICAgICAgNTMKK19fU1lTQ0FMTChfX05SX3NvY2tldHBhaXIsIHN5c19zb2NrZXRwYWlyKQorI2RlZmluZSBfX05SX3NldHNvY2tvcHQgICAgICAgICAgICAgICAgICAgICAgICAgNTQKK19fU1lTQ0FMTChfX05SX3NldHNvY2tvcHQsIHN5c19zZXRzb2Nrb3B0KQorI2RlZmluZSBfX05SX2dldHNvY2tvcHQgICAgICAgICAgICAgICAgICAgICAgICAgNTUKK19fU1lTQ0FMTChfX05SX2dldHNvY2tvcHQsIHN5c19nZXRzb2Nrb3B0KQorCisjZGVmaW5lIF9fTlJfY2xvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1NgorX19TWVNDQUxMKF9fTlJfY2xvbmUsIHN0dWJfY2xvbmUpCisjZGVmaW5lIF9fTlJfZm9yayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1NworX19TWVNDQUxMKF9fTlJfZm9yaywgc3R1Yl9mb3JrKSAKKyNkZWZpbmUgX19OUl92Zm9yayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU4CitfX1NZU0NBTEwoX19OUl92Zm9yaywgc3R1Yl92Zm9yaykKKyNkZWZpbmUgX19OUl9leGVjdmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU5CitfX1NZU0NBTEwoX19OUl9leGVjdmUsIHN0dWJfZXhlY3ZlKQorI2RlZmluZSBfX05SX2V4aXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjAKK19fU1lTQ0FMTChfX05SX2V4aXQsIHN5c19leGl0KQorI2RlZmluZSBfX05SX3dhaXQ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjEKK19fU1lTQ0FMTChfX05SX3dhaXQ0LCBzeXNfd2FpdDQpCisjZGVmaW5lIF9fTlJfa2lsbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2MgorX19TWVNDQUxMKF9fTlJfa2lsbCwgc3lzX2tpbGwpCisjZGVmaW5lIF9fTlJfdW5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2MworX19TWVNDQUxMKF9fTlJfdW5hbWUsIHN5c191bmFtZSkKKworI2RlZmluZSBfX05SX3NlbWdldCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjQKK19fU1lTQ0FMTChfX05SX3NlbWdldCwgc3lzX3NlbWdldCkKKyNkZWZpbmUgX19OUl9zZW1vcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY1CitfX1NZU0NBTEwoX19OUl9zZW1vcCwgc3lzX3NlbW9wKQorI2RlZmluZSBfX05SX3NlbWN0bCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjYKK19fU1lTQ0FMTChfX05SX3NlbWN0bCwgc3lzX3NlbWN0bCkKKyNkZWZpbmUgX19OUl9zaG1kdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY3CitfX1NZU0NBTEwoX19OUl9zaG1kdCwgc3lzX3NobWR0KQorI2RlZmluZSBfX05SX21zZ2dldCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjgKK19fU1lTQ0FMTChfX05SX21zZ2dldCwgc3lzX21zZ2dldCkKKyNkZWZpbmUgX19OUl9tc2dzbmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY5CitfX1NZU0NBTEwoX19OUl9tc2dzbmQsIHN5c19tc2dzbmQpCisjZGVmaW5lIF9fTlJfbXNncmN2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3MAorX19TWVNDQUxMKF9fTlJfbXNncmN2LCBzeXNfbXNncmN2KQorI2RlZmluZSBfX05SX21zZ2N0bCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNzEKK19fU1lTQ0FMTChfX05SX21zZ2N0bCwgc3lzX21zZ2N0bCkKKworI2RlZmluZSBfX05SX2ZjbnRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNzIKK19fU1lTQ0FMTChfX05SX2ZjbnRsLCBzeXNfZmNudGwpCisjZGVmaW5lIF9fTlJfZmxvY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3MworX19TWVNDQUxMKF9fTlJfZmxvY2ssIHN5c19mbG9jaykKKyNkZWZpbmUgX19OUl9mc3luYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDc0CitfX1NZU0NBTEwoX19OUl9mc3luYywgc3lzX2ZzeW5jKQorI2RlZmluZSBfX05SX2ZkYXRhc3luYyAgICAgICAgICAgICAgICAgICAgICAgICAgNzUKK19fU1lTQ0FMTChfX05SX2ZkYXRhc3luYywgc3lzX2ZkYXRhc3luYykKKyNkZWZpbmUgX19OUl90cnVuY2F0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgIDc2CitfX1NZU0NBTEwoX19OUl90cnVuY2F0ZSwgc3lzX3RydW5jYXRlKQorI2RlZmluZSBfX05SX2Z0cnVuY2F0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgNzcKK19fU1lTQ0FMTChfX05SX2Z0cnVuY2F0ZSwgc3lzX2Z0cnVuY2F0ZSkKKyNkZWZpbmUgX19OUl9nZXRkZW50cyAgICAgICAgICAgICAgICAgICAgICAgICAgIDc4CitfX1NZU0NBTEwoX19OUl9nZXRkZW50cywgc3lzX2dldGRlbnRzKQorI2RlZmluZSBfX05SX2dldGN3ZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNzkKK19fU1lTQ0FMTChfX05SX2dldGN3ZCwgc3lzX2dldGN3ZCkKKworI2RlZmluZSBfX05SX2NoZGlyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODAKK19fU1lTQ0FMTChfX05SX2NoZGlyLCBzeXNfY2hkaXIpCisjZGVmaW5lIF9fTlJfZmNoZGlyICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4MQorX19TWVNDQUxMKF9fTlJfZmNoZGlyLCBzeXNfZmNoZGlyKQorI2RlZmluZSBfX05SX3JlbmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODIKK19fU1lTQ0FMTChfX05SX3JlbmFtZSwgc3lzX3JlbmFtZSkKKyNkZWZpbmUgX19OUl9ta2RpciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgzCitfX1NZU0NBTEwoX19OUl9ta2Rpciwgc3lzX21rZGlyKQorI2RlZmluZSBfX05SX3JtZGlyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODQKK19fU1lTQ0FMTChfX05SX3JtZGlyLCBzeXNfcm1kaXIpCisjZGVmaW5lIF9fTlJfY3JlYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4NQorX19TWVNDQUxMKF9fTlJfY3JlYXQsIHN5c19jcmVhdCkKKyNkZWZpbmUgX19OUl9saW5rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDg2CitfX1NZU0NBTEwoX19OUl9saW5rLCBzeXNfbGluaykKKyNkZWZpbmUgX19OUl91bmxpbmsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDg3CitfX1NZU0NBTEwoX19OUl91bmxpbmssIHN5c191bmxpbmspCisKKyNkZWZpbmUgX19OUl9zeW1saW5rICAgICAgICAgICAgICAgICAgICAgICAgICAgIDg4CitfX1NZU0NBTEwoX19OUl9zeW1saW5rLCBzeXNfc3ltbGluaykKKyNkZWZpbmUgX19OUl9yZWFkbGluayAgICAgICAgICAgICAgICAgICAgICAgICAgIDg5CitfX1NZU0NBTEwoX19OUl9yZWFkbGluaywgc3lzX3JlYWRsaW5rKQorI2RlZmluZSBfX05SX2NobW9kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTAKK19fU1lTQ0FMTChfX05SX2NobW9kLCBzeXNfY2htb2QpCisjZGVmaW5lIF9fTlJfZmNobW9kICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5MQorX19TWVNDQUxMKF9fTlJfZmNobW9kLCBzeXNfZmNobW9kKQorI2RlZmluZSBfX05SX2Nob3duICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTIKK19fU1lTQ0FMTChfX05SX2Nob3duLCBzeXNfY2hvd24pCisjZGVmaW5lIF9fTlJfZmNob3duICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5MworX19TWVNDQUxMKF9fTlJfZmNob3duLCBzeXNfZmNob3duKQorI2RlZmluZSBfX05SX2xjaG93biAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTQKK19fU1lTQ0FMTChfX05SX2xjaG93biwgc3lzX2xjaG93bikKKyNkZWZpbmUgX19OUl91bWFzayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDk1CitfX1NZU0NBTEwoX19OUl91bWFzaywgc3lzX3VtYXNrKQorCisjZGVmaW5lIF9fTlJfZ2V0dGltZW9mZGF5ICAgICAgICAgICAgICAgICAgICAgICA5NgorX19TWVNDQUxMKF9fTlJfZ2V0dGltZW9mZGF5LCBzeXNfZ2V0dGltZW9mZGF5KQorI2RlZmluZSBfX05SX2dldHJsaW1pdCAgICAgICAgICAgICAgICAgICAgICAgICAgOTcKK19fU1lTQ0FMTChfX05SX2dldHJsaW1pdCwgc3lzX2dldHJsaW1pdCkKKyNkZWZpbmUgX19OUl9nZXRydXNhZ2UgICAgICAgICAgICAgICAgICAgICAgICAgIDk4CitfX1NZU0NBTEwoX19OUl9nZXRydXNhZ2UsIHN5c19nZXRydXNhZ2UpCisjZGVmaW5lIF9fTlJfc3lzaW5mbyAgICAgICAgICAgICAgICAgICAgICAgICAgICA5OQorX19TWVNDQUxMKF9fTlJfc3lzaW5mbywgc3lzX3N5c2luZm8pCisjZGVmaW5lIF9fTlJfdGltZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMAorX19TWVNDQUxMKF9fTlJfdGltZXMsIHN5c190aW1lcykKKyNkZWZpbmUgX19OUl9wdHJhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAxCitfX1NZU0NBTEwoX19OUl9wdHJhY2UsIHN5c19wdHJhY2UpCisjZGVmaW5lIF9fTlJfZ2V0dWlkICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMgorX19TWVNDQUxMKF9fTlJfZ2V0dWlkLCBzeXNfZ2V0dWlkKQorI2RlZmluZSBfX05SX3N5c2xvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDMKK19fU1lTQ0FMTChfX05SX3N5c2xvZywgc3lzX3N5c2xvZykKKworLyogYXQgdGhlIHZlcnkgZW5kIHRoZSBzdHVmZiB0aGF0IG5ldmVyIHJ1bnMgZHVyaW5nIHRoZSBiZW5jaG1hcmtzICovCisjZGVmaW5lIF9fTlJfZ2V0Z2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwNAorX19TWVNDQUxMKF9fTlJfZ2V0Z2lkLCBzeXNfZ2V0Z2lkKQorI2RlZmluZSBfX05SX3NldHVpZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDUKK19fU1lTQ0FMTChfX05SX3NldHVpZCwgc3lzX3NldHVpZCkKKyNkZWZpbmUgX19OUl9zZXRnaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTA2CitfX1NZU0NBTEwoX19OUl9zZXRnaWQsIHN5c19zZXRnaWQpCisjZGVmaW5lIF9fTlJfZ2V0ZXVpZCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwNworX19TWVNDQUxMKF9fTlJfZ2V0ZXVpZCwgc3lzX2dldGV1aWQpCisjZGVmaW5lIF9fTlJfZ2V0ZWdpZCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwOAorX19TWVNDQUxMKF9fTlJfZ2V0ZWdpZCwgc3lzX2dldGVnaWQpCisjZGVmaW5lIF9fTlJfc2V0cGdpZCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwOQorX19TWVNDQUxMKF9fTlJfc2V0cGdpZCwgc3lzX3NldHBnaWQpCisjZGVmaW5lIF9fTlJfZ2V0cHBpZCAgICAgICAgICAgICAgICAgICAgICAgICAgIDExMAorX19TWVNDQUxMKF9fTlJfZ2V0cHBpZCwgc3lzX2dldHBwaWQpCisjZGVmaW5lIF9fTlJfZ2V0cGdycCAgICAgICAgICAgICAgICAgICAgICAgICAgIDExMQorX19TWVNDQUxMKF9fTlJfZ2V0cGdycCwgc3lzX2dldHBncnApCisKKyNkZWZpbmUgX19OUl9zZXRzaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEyCitfX1NZU0NBTEwoX19OUl9zZXRzaWQsIHN5c19zZXRzaWQpCisjZGVmaW5lIF9fTlJfc2V0cmV1aWQgICAgICAgICAgICAgICAgICAgICAgICAgIDExMworX19TWVNDQUxMKF9fTlJfc2V0cmV1aWQsIHN5c19zZXRyZXVpZCkKKyNkZWZpbmUgX19OUl9zZXRyZWdpZCAgICAgICAgICAgICAgICAgICAgICAgICAgMTE0CitfX1NZU0NBTEwoX19OUl9zZXRyZWdpZCwgc3lzX3NldHJlZ2lkKQorI2RlZmluZSBfX05SX2dldGdyb3VwcyAgICAgICAgICAgICAgICAgICAgICAgICAxMTUKK19fU1lTQ0FMTChfX05SX2dldGdyb3Vwcywgc3lzX2dldGdyb3VwcykKKyNkZWZpbmUgX19OUl9zZXRncm91cHMgICAgICAgICAgICAgICAgICAgICAgICAgMTE2CitfX1NZU0NBTEwoX19OUl9zZXRncm91cHMsIHN5c19zZXRncm91cHMpCisjZGVmaW5lIF9fTlJfc2V0cmVzdWlkICAgICAgICAgICAgICAgICAgICAgICAgIDExNworX19TWVNDQUxMKF9fTlJfc2V0cmVzdWlkLCBzeXNfc2V0cmVzdWlkKQorI2RlZmluZSBfX05SX2dldHJlc3VpZCAgICAgICAgICAgICAgICAgICAgICAgICAxMTgKK19fU1lTQ0FMTChfX05SX2dldHJlc3VpZCwgc3lzX2dldHJlc3VpZCkKKyNkZWZpbmUgX19OUl9zZXRyZXNnaWQgICAgICAgICAgICAgICAgICAgICAgICAgMTE5CitfX1NZU0NBTEwoX19OUl9zZXRyZXNnaWQsIHN5c19zZXRyZXNnaWQpCisKKyNkZWZpbmUgX19OUl9nZXRyZXNnaWQgICAgICAgICAgICAgICAgICAgICAgICAgMTIwCitfX1NZU0NBTEwoX19OUl9nZXRyZXNnaWQsIHN5c19nZXRyZXNnaWQpCisjZGVmaW5lIF9fTlJfZ2V0cGdpZCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyMQorX19TWVNDQUxMKF9fTlJfZ2V0cGdpZCwgc3lzX2dldHBnaWQpCisjZGVmaW5lIF9fTlJfc2V0ZnN1aWQgICAgICAgICAgICAgICAgICAgICAgICAgIDEyMgorX19TWVNDQUxMKF9fTlJfc2V0ZnN1aWQsIHN5c19zZXRmc3VpZCkKKyNkZWZpbmUgX19OUl9zZXRmc2dpZCAgICAgICAgICAgICAgICAgICAgICAgICAgMTIzCitfX1NZU0NBTEwoX19OUl9zZXRmc2dpZCwgc3lzX3NldGZzZ2lkKQorI2RlZmluZSBfX05SX2dldHNpZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjQKK19fU1lTQ0FMTChfX05SX2dldHNpZCwgc3lzX2dldHNpZCkKKyNkZWZpbmUgX19OUl9jYXBnZXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTI1CitfX1NZU0NBTEwoX19OUl9jYXBnZXQsIHN5c19jYXBnZXQpCisjZGVmaW5lIF9fTlJfY2Fwc2V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyNgorX19TWVNDQUxMKF9fTlJfY2Fwc2V0LCBzeXNfY2Fwc2V0KQorCisjZGVmaW5lIF9fTlJfcnRfc2lncGVuZGluZyAgICAgICAgICAgICAgICAgICAgIDEyNworX19TWVNDQUxMKF9fTlJfcnRfc2lncGVuZGluZywgc3lzX3J0X3NpZ3BlbmRpbmcpCisjZGVmaW5lIF9fTlJfcnRfc2lndGltZWR3YWl0ICAgICAgICAgICAgICAgICAgIDEyOAorX19TWVNDQUxMKF9fTlJfcnRfc2lndGltZWR3YWl0LCBzeXNfcnRfc2lndGltZWR3YWl0KQorI2RlZmluZSBfX05SX3J0X3NpZ3F1ZXVlaW5mbyAgICAgICAgICAgICAgICAgICAxMjkKK19fU1lTQ0FMTChfX05SX3J0X3NpZ3F1ZXVlaW5mbywgc3lzX3J0X3NpZ3F1ZXVlaW5mbykKKyNkZWZpbmUgX19OUl9ydF9zaWdzdXNwZW5kICAgICAgICAgICAgICAgICAgICAgMTMwCitfX1NZU0NBTEwoX19OUl9ydF9zaWdzdXNwZW5kLCBzdHViX3J0X3NpZ3N1c3BlbmQpCisjZGVmaW5lIF9fTlJfc2lnYWx0c3RhY2sgICAgICAgICAgICAgICAgICAgICAgIDEzMQorX19TWVNDQUxMKF9fTlJfc2lnYWx0c3RhY2ssIHN0dWJfc2lnYWx0c3RhY2spCisjZGVmaW5lIF9fTlJfdXRpbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzMgorX19TWVNDQUxMKF9fTlJfdXRpbWUsIHN5c191dGltZSkKKyNkZWZpbmUgX19OUl9ta25vZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMzCitfX1NZU0NBTEwoX19OUl9ta25vZCwgc3lzX21rbm9kKQorCisvKiBPbmx5IG5lZWRlZCBmb3IgYS5vdXQgKi8KKyNkZWZpbmUgX19OUl91c2VsaWIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTM0CitfX1NZU0NBTEwoX19OUl91c2VsaWIsIHN5c19uaV9zeXNjYWxsKQorI2RlZmluZSBfX05SX3BlcnNvbmFsaXR5ICAgICAgICAgICAgICAgICAgICAgICAxMzUKK19fU1lTQ0FMTChfX05SX3BlcnNvbmFsaXR5LCBzeXNfcGVyc29uYWxpdHkpCisKKyNkZWZpbmUgX19OUl91c3RhdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTM2CitfX1NZU0NBTEwoX19OUl91c3RhdCwgc3lzX3VzdGF0KQorI2RlZmluZSBfX05SX3N0YXRmcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMzcKK19fU1lTQ0FMTChfX05SX3N0YXRmcywgc3lzX3N0YXRmcykKKyNkZWZpbmUgX19OUl9mc3RhdGZzICAgICAgICAgICAgICAgICAgICAgICAgICAgMTM4CitfX1NZU0NBTEwoX19OUl9mc3RhdGZzLCBzeXNfZnN0YXRmcykKKyNkZWZpbmUgX19OUl9zeXNmcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTM5CitfX1NZU0NBTEwoX19OUl9zeXNmcywgc3lzX3N5c2ZzKQorCisjZGVmaW5lIF9fTlJfZ2V0cHJpb3JpdHkgICAgICAgICAgICAgICAgICAgICAgIDE0MAorX19TWVNDQUxMKF9fTlJfZ2V0cHJpb3JpdHksIHN5c19nZXRwcmlvcml0eSkKKyNkZWZpbmUgX19OUl9zZXRwcmlvcml0eSAgICAgICAgICAgICAgICAgICAgICAgMTQxCitfX1NZU0NBTEwoX19OUl9zZXRwcmlvcml0eSwgc3lzX3NldHByaW9yaXR5KQorI2RlZmluZSBfX05SX3NjaGVkX3NldHBhcmFtICAgICAgICAgICAgICAgICAgICAxNDIKK19fU1lTQ0FMTChfX05SX3NjaGVkX3NldHBhcmFtLCBzeXNfc2NoZWRfc2V0cGFyYW0pCisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0cGFyYW0gICAgICAgICAgICAgICAgICAgIDE0MworX19TWVNDQUxMKF9fTlJfc2NoZWRfZ2V0cGFyYW0sIHN5c19zY2hlZF9nZXRwYXJhbSkKKyNkZWZpbmUgX19OUl9zY2hlZF9zZXRzY2hlZHVsZXIgICAgICAgICAgICAgICAgMTQ0CitfX1NZU0NBTEwoX19OUl9zY2hlZF9zZXRzY2hlZHVsZXIsIHN5c19zY2hlZF9zZXRzY2hlZHVsZXIpCisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0c2NoZWR1bGVyICAgICAgICAgICAgICAgIDE0NQorX19TWVNDQUxMKF9fTlJfc2NoZWRfZ2V0c2NoZWR1bGVyLCBzeXNfc2NoZWRfZ2V0c2NoZWR1bGVyKQorI2RlZmluZSBfX05SX3NjaGVkX2dldF9wcmlvcml0eV9tYXggICAgICAgICAgICAxNDYKK19fU1lTQ0FMTChfX05SX3NjaGVkX2dldF9wcmlvcml0eV9tYXgsIHN5c19zY2hlZF9nZXRfcHJpb3JpdHlfbWF4KQorI2RlZmluZSBfX05SX3NjaGVkX2dldF9wcmlvcml0eV9taW4gICAgICAgICAgICAxNDcKK19fU1lTQ0FMTChfX05SX3NjaGVkX2dldF9wcmlvcml0eV9taW4sIHN5c19zY2hlZF9nZXRfcHJpb3JpdHlfbWluKQorI2RlZmluZSBfX05SX3NjaGVkX3JyX2dldF9pbnRlcnZhbCAgICAgICAgICAgICAxNDgKK19fU1lTQ0FMTChfX05SX3NjaGVkX3JyX2dldF9pbnRlcnZhbCwgc3lzX3NjaGVkX3JyX2dldF9pbnRlcnZhbCkKKworI2RlZmluZSBfX05SX21sb2NrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNDkKK19fU1lTQ0FMTChfX05SX21sb2NrLCBzeXNfbWxvY2spCisjZGVmaW5lIF9fTlJfbXVubG9jayAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1MAorX19TWVNDQUxMKF9fTlJfbXVubG9jaywgc3lzX211bmxvY2spCisjZGVmaW5lIF9fTlJfbWxvY2thbGwgICAgICAgICAgICAgICAgICAgICAgICAgIDE1MQorX19TWVNDQUxMKF9fTlJfbWxvY2thbGwsIHN5c19tbG9ja2FsbCkKKyNkZWZpbmUgX19OUl9tdW5sb2NrYWxsICAgICAgICAgICAgICAgICAgICAgICAgMTUyCitfX1NZU0NBTEwoX19OUl9tdW5sb2NrYWxsLCBzeXNfbXVubG9ja2FsbCkKKworI2RlZmluZSBfX05SX3ZoYW5ndXAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNTMKK19fU1lTQ0FMTChfX05SX3ZoYW5ndXAsIHN5c192aGFuZ3VwKQorCisjZGVmaW5lIF9fTlJfbW9kaWZ5X2xkdCAgICAgICAgICAgICAgICAgICAgICAgIDE1NAorX19TWVNDQUxMKF9fTlJfbW9kaWZ5X2xkdCwgc3lzX21vZGlmeV9sZHQpCisKKyNkZWZpbmUgX19OUl9waXZvdF9yb290ICAgICAgICAgICAgICAgICAgICAgICAgMTU1CitfX1NZU0NBTEwoX19OUl9waXZvdF9yb290LCBzeXNfcGl2b3Rfcm9vdCkKKworI2RlZmluZSBfX05SX19zeXNjdGwgICAgICAgICAgICAgICAgICAgICAgICAgICAxNTYKK19fU1lTQ0FMTChfX05SX19zeXNjdGwsIHN5c19zeXNjdGwpCisKKyNkZWZpbmUgX19OUl9wcmN0bCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTU3CitfX1NZU0NBTEwoX19OUl9wcmN0bCwgc3lzX3ByY3RsKQorI2RlZmluZSBfX05SX2FyY2hfcHJjdGwgICAgICAgICAgICAgICAgICAgICAgICAxNTgKK19fU1lTQ0FMTChfX05SX2FyY2hfcHJjdGwsCXN5c19hcmNoX3ByY3RsKSAKKworI2RlZmluZSBfX05SX2FkanRpbWV4ICAgICAgICAgICAgICAgICAgICAgICAgICAxNTkKK19fU1lTQ0FMTChfX05SX2FkanRpbWV4LCBzeXNfYWRqdGltZXgpCisKKyNkZWZpbmUgX19OUl9zZXRybGltaXQgICAgICAgICAgICAgICAgICAgICAgICAgMTYwCitfX1NZU0NBTEwoX19OUl9zZXRybGltaXQsIHN5c19zZXRybGltaXQpCisKKyNkZWZpbmUgX19OUl9jaHJvb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYxCitfX1NZU0NBTEwoX19OUl9jaHJvb3QsIHN5c19jaHJvb3QpCisKKyNkZWZpbmUgX19OUl9zeW5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYyCitfX1NZU0NBTEwoX19OUl9zeW5jLCBzeXNfc3luYykKKworI2RlZmluZSBfX05SX2FjY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNjMKK19fU1lTQ0FMTChfX05SX2FjY3QsIHN5c19hY2N0KQorCisjZGVmaW5lIF9fTlJfc2V0dGltZW9mZGF5ICAgICAgICAgICAgICAgICAgICAgIDE2NAorX19TWVNDQUxMKF9fTlJfc2V0dGltZW9mZGF5LCBzeXNfc2V0dGltZW9mZGF5KQorCisjZGVmaW5lIF9fTlJfbW91bnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2NQorX19TWVNDQUxMKF9fTlJfbW91bnQsIHN5c19tb3VudCkKKyNkZWZpbmUgX19OUl91bW91bnQyICAgICAgICAgICAgICAgICAgICAgICAgICAgMTY2CitfX1NZU0NBTEwoX19OUl91bW91bnQyLCBzeXNfdW1vdW50KQorCisjZGVmaW5lIF9fTlJfc3dhcG9uICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2NworX19TWVNDQUxMKF9fTlJfc3dhcG9uLCBzeXNfc3dhcG9uKQorI2RlZmluZSBfX05SX3N3YXBvZmYgICAgICAgICAgICAgICAgICAgICAgICAgICAxNjgKK19fU1lTQ0FMTChfX05SX3N3YXBvZmYsIHN5c19zd2Fwb2ZmKQorCisjZGVmaW5lIF9fTlJfcmVib290ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2OQorX19TWVNDQUxMKF9fTlJfcmVib290LCBzeXNfcmVib290KQorCisjZGVmaW5lIF9fTlJfc2V0aG9zdG5hbWUgICAgICAgICAgICAgICAgICAgICAgIDE3MAorX19TWVNDQUxMKF9fTlJfc2V0aG9zdG5hbWUsIHN5c19zZXRob3N0bmFtZSkKKyNkZWZpbmUgX19OUl9zZXRkb21haW5uYW1lICAgICAgICAgICAgICAgICAgICAgMTcxCitfX1NZU0NBTEwoX19OUl9zZXRkb21haW5uYW1lLCBzeXNfc2V0ZG9tYWlubmFtZSkKKworI2RlZmluZSBfX05SX2lvcGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNzIKK19fU1lTQ0FMTChfX05SX2lvcGwsIHN0dWJfaW9wbCkKKyNkZWZpbmUgX19OUl9pb3Blcm0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMTczCitfX1NZU0NBTEwoX19OUl9pb3Blcm0sIHN5c19pb3Blcm0pCisKKyNkZWZpbmUgX19OUl9jcmVhdGVfbW9kdWxlICAgICAgICAgICAgICAgICAgICAgMTc0CitfX1NZU0NBTEwoX19OUl9jcmVhdGVfbW9kdWxlLCBzeXNfbmlfc3lzY2FsbCkKKyNkZWZpbmUgX19OUl9pbml0X21vZHVsZSAgICAgICAgICAgICAgICAgICAgICAgMTc1CitfX1NZU0NBTEwoX19OUl9pbml0X21vZHVsZSwgc3lzX2luaXRfbW9kdWxlKQorI2RlZmluZSBfX05SX2RlbGV0ZV9tb2R1bGUgICAgICAgICAgICAgICAgICAgICAxNzYKK19fU1lTQ0FMTChfX05SX2RlbGV0ZV9tb2R1bGUsIHN5c19kZWxldGVfbW9kdWxlKQorI2RlZmluZSBfX05SX2dldF9rZXJuZWxfc3ltcyAgICAgICAgICAgICAgICAgICAxNzcKK19fU1lTQ0FMTChfX05SX2dldF9rZXJuZWxfc3ltcywgc3lzX25pX3N5c2NhbGwpCisjZGVmaW5lIF9fTlJfcXVlcnlfbW9kdWxlICAgICAgICAgICAgICAgICAgICAgIDE3OAorX19TWVNDQUxMKF9fTlJfcXVlcnlfbW9kdWxlLCBzeXNfbmlfc3lzY2FsbCkKKworI2RlZmluZSBfX05SX3F1b3RhY3RsICAgICAgICAgICAgICAgICAgICAgICAgICAxNzkKK19fU1lTQ0FMTChfX05SX3F1b3RhY3RsLCBzeXNfcXVvdGFjdGwpCisKKyNkZWZpbmUgX19OUl9uZnNzZXJ2Y3RsICAgICAgICAgICAgICAgICAgICAgICAgMTgwCitfX1NZU0NBTEwoX19OUl9uZnNzZXJ2Y3RsLCBzeXNfbmZzc2VydmN0bCkKKworI2RlZmluZSBfX05SX2dldHBtc2cgICAgICAgICAgICAgICAgICAgICAgICAgICAxODEJLyogcmVzZXJ2ZWQgZm9yIExpUy9TVFJFQU1TICovCitfX1NZU0NBTEwoX19OUl9nZXRwbXNnLCBzeXNfbmlfc3lzY2FsbCkKKyNkZWZpbmUgX19OUl9wdXRwbXNnICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgyCS8qIHJlc2VydmVkIGZvciBMaVMvU1RSRUFNUyAqLworX19TWVNDQUxMKF9fTlJfcHV0cG1zZywgc3lzX25pX3N5c2NhbGwpCisKKyNkZWZpbmUgX19OUl9hZnNfc3lzY2FsbCAgICAgICAgICAgICAgICAgICAgICAgMTgzCS8qIHJlc2VydmVkIGZvciBBRlMgKi8gCitfX1NZU0NBTEwoX19OUl9hZnNfc3lzY2FsbCwgc3lzX25pX3N5c2NhbGwpCisKKyNkZWZpbmUgX19OUl90dXhjYWxsICAgICAgCQkxODQgLyogcmVzZXJ2ZWQgZm9yIHR1eCAqLworX19TWVNDQUxMKF9fTlJfdHV4Y2FsbCwgc3lzX25pX3N5c2NhbGwpCisKKyNkZWZpbmUgX19OUl9zZWN1cml0eQkJCTE4NQorX19TWVNDQUxMKF9fTlJfc2VjdXJpdHksIHN5c19uaV9zeXNjYWxsKQorCisjZGVmaW5lIF9fTlJfZ2V0dGlkCQkxODYKK19fU1lTQ0FMTChfX05SX2dldHRpZCwgc3lzX2dldHRpZCkKKworI2RlZmluZSBfX05SX3JlYWRhaGVhZAkJMTg3CitfX1NZU0NBTEwoX19OUl9yZWFkYWhlYWQsIHN5c19yZWFkYWhlYWQpCisjZGVmaW5lIF9fTlJfc2V0eGF0dHIJCTE4OAorX19TWVNDQUxMKF9fTlJfc2V0eGF0dHIsIHN5c19zZXR4YXR0cikKKyNkZWZpbmUgX19OUl9sc2V0eGF0dHIJCTE4OQorX19TWVNDQUxMKF9fTlJfbHNldHhhdHRyLCBzeXNfbHNldHhhdHRyKQorI2RlZmluZSBfX05SX2ZzZXR4YXR0cgkJMTkwCitfX1NZU0NBTEwoX19OUl9mc2V0eGF0dHIsIHN5c19mc2V0eGF0dHIpCisjZGVmaW5lIF9fTlJfZ2V0eGF0dHIJCTE5MQorX19TWVNDQUxMKF9fTlJfZ2V0eGF0dHIsIHN5c19nZXR4YXR0cikKKyNkZWZpbmUgX19OUl9sZ2V0eGF0dHIJCTE5MgorX19TWVNDQUxMKF9fTlJfbGdldHhhdHRyLCBzeXNfbGdldHhhdHRyKQorI2RlZmluZSBfX05SX2ZnZXR4YXR0cgkJMTkzCitfX1NZU0NBTEwoX19OUl9mZ2V0eGF0dHIsIHN5c19mZ2V0eGF0dHIpIAorI2RlZmluZSBfX05SX2xpc3R4YXR0cgkJMTk0CitfX1NZU0NBTEwoX19OUl9saXN0eGF0dHIsIHN5c19saXN0eGF0dHIpIAorI2RlZmluZSBfX05SX2xsaXN0eGF0dHIJCTE5NQorX19TWVNDQUxMKF9fTlJfbGxpc3R4YXR0ciwgc3lzX2xsaXN0eGF0dHIpIAorI2RlZmluZSBfX05SX2ZsaXN0eGF0dHIJCTE5NgorX19TWVNDQUxMKF9fTlJfZmxpc3R4YXR0ciwgc3lzX2ZsaXN0eGF0dHIpIAorI2RlZmluZSBfX05SX3JlbW92ZXhhdHRyCTE5NworX19TWVNDQUxMKF9fTlJfcmVtb3ZleGF0dHIsIHN5c19yZW1vdmV4YXR0cikgCisjZGVmaW5lIF9fTlJfbHJlbW92ZXhhdHRyCTE5OAorX19TWVNDQUxMKF9fTlJfbHJlbW92ZXhhdHRyLCBzeXNfbHJlbW92ZXhhdHRyKSAKKyNkZWZpbmUgX19OUl9mcmVtb3ZleGF0dHIJMTk5CitfX1NZU0NBTEwoX19OUl9mcmVtb3ZleGF0dHIsIHN5c19mcmVtb3ZleGF0dHIpIAorI2RlZmluZSBfX05SX3RraWxsCTIwMAorX19TWVNDQUxMKF9fTlJfdGtpbGwsIHN5c190a2lsbCkgCisjZGVmaW5lIF9fTlJfdGltZSAgICAgIDIwMQorX19TWVNDQUxMKF9fTlJfdGltZSwgc3lzX3RpbWU2NCkKKyNkZWZpbmUgX19OUl9mdXRleCAgICAgMjAyCitfX1NZU0NBTEwoX19OUl9mdXRleCwgc3lzX2Z1dGV4KQorI2RlZmluZSBfX05SX3NjaGVkX3NldGFmZmluaXR5ICAgIDIwMworX19TWVNDQUxMKF9fTlJfc2NoZWRfc2V0YWZmaW5pdHksIHN5c19zY2hlZF9zZXRhZmZpbml0eSkKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRhZmZpbml0eSAgICAgMjA0CitfX1NZU0NBTEwoX19OUl9zY2hlZF9nZXRhZmZpbml0eSwgc3lzX3NjaGVkX2dldGFmZmluaXR5KQorI2RlZmluZSBfX05SX3NldF90aHJlYWRfYXJlYQkyMDUKK19fU1lTQ0FMTChfX05SX3NldF90aHJlYWRfYXJlYSwgc3lzX25pX3N5c2NhbGwpCS8qIHVzZSBhcmNoX3ByY3RsICovCisjZGVmaW5lIF9fTlJfaW9fc2V0dXAJMjA2CitfX1NZU0NBTEwoX19OUl9pb19zZXR1cCwgc3lzX2lvX3NldHVwKQorI2RlZmluZSBfX05SX2lvX2Rlc3Ryb3kJMjA3CitfX1NZU0NBTEwoX19OUl9pb19kZXN0cm95LCBzeXNfaW9fZGVzdHJveSkKKyNkZWZpbmUgX19OUl9pb19nZXRldmVudHMJMjA4CitfX1NZU0NBTEwoX19OUl9pb19nZXRldmVudHMsIHN5c19pb19nZXRldmVudHMpCisjZGVmaW5lIF9fTlJfaW9fc3VibWl0CTIwOQorX19TWVNDQUxMKF9fTlJfaW9fc3VibWl0LCBzeXNfaW9fc3VibWl0KQorI2RlZmluZSBfX05SX2lvX2NhbmNlbAkyMTAKK19fU1lTQ0FMTChfX05SX2lvX2NhbmNlbCwgc3lzX2lvX2NhbmNlbCkKKyNkZWZpbmUgX19OUl9nZXRfdGhyZWFkX2FyZWEJMjExCitfX1NZU0NBTEwoX19OUl9nZXRfdGhyZWFkX2FyZWEsIHN5c19uaV9zeXNjYWxsKQkvKiB1c2UgYXJjaF9wcmN0bCAqLworI2RlZmluZSBfX05SX2xvb2t1cF9kY29va2llCTIxMgorX19TWVNDQUxMKF9fTlJfbG9va3VwX2Rjb29raWUsIHN5c19sb29rdXBfZGNvb2tpZSkKKyNkZWZpbmUgX19OUl9lcG9sbF9jcmVhdGUJMjEzCitfX1NZU0NBTEwoX19OUl9lcG9sbF9jcmVhdGUsIHN5c19lcG9sbF9jcmVhdGUpCisjZGVmaW5lIF9fTlJfZXBvbGxfY3RsX29sZAkyMTQKK19fU1lTQ0FMTChfX05SX2Vwb2xsX2N0bF9vbGQsIHN5c19uaV9zeXNjYWxsKQorI2RlZmluZSBfX05SX2Vwb2xsX3dhaXRfb2xkCTIxNQorX19TWVNDQUxMKF9fTlJfZXBvbGxfd2FpdF9vbGQsIHN5c19uaV9zeXNjYWxsKQorI2RlZmluZSBfX05SX3JlbWFwX2ZpbGVfcGFnZXMJMjE2CitfX1NZU0NBTEwoX19OUl9yZW1hcF9maWxlX3BhZ2VzLCBzeXNfcmVtYXBfZmlsZV9wYWdlcykKKyNkZWZpbmUgX19OUl9nZXRkZW50czY0CTIxNworX19TWVNDQUxMKF9fTlJfZ2V0ZGVudHM2NCwgc3lzX2dldGRlbnRzNjQpCisjZGVmaW5lIF9fTlJfc2V0X3RpZF9hZGRyZXNzCTIxOAorX19TWVNDQUxMKF9fTlJfc2V0X3RpZF9hZGRyZXNzLCBzeXNfc2V0X3RpZF9hZGRyZXNzKQorI2RlZmluZSBfX05SX3Jlc3RhcnRfc3lzY2FsbAkyMTkKK19fU1lTQ0FMTChfX05SX3Jlc3RhcnRfc3lzY2FsbCwgc3lzX3Jlc3RhcnRfc3lzY2FsbCkKKyNkZWZpbmUgX19OUl9zZW10aW1lZG9wCQkyMjAKK19fU1lTQ0FMTChfX05SX3NlbXRpbWVkb3AsIHN5c19zZW10aW1lZG9wKQorI2RlZmluZSBfX05SX2ZhZHZpc2U2NAkJMjIxCitfX1NZU0NBTEwoX19OUl9mYWR2aXNlNjQsIHN5c19mYWR2aXNlNjQpCisjZGVmaW5lIF9fTlJfdGltZXJfY3JlYXRlCQkyMjIKK19fU1lTQ0FMTChfX05SX3RpbWVyX2NyZWF0ZSwgc3lzX3RpbWVyX2NyZWF0ZSkKKyNkZWZpbmUgX19OUl90aW1lcl9zZXR0aW1lCQkyMjMKK19fU1lTQ0FMTChfX05SX3RpbWVyX3NldHRpbWUsIHN5c190aW1lcl9zZXR0aW1lKQorI2RlZmluZSBfX05SX3RpbWVyX2dldHRpbWUJCTIyNAorX19TWVNDQUxMKF9fTlJfdGltZXJfZ2V0dGltZSwgc3lzX3RpbWVyX2dldHRpbWUpCisjZGVmaW5lIF9fTlJfdGltZXJfZ2V0b3ZlcnJ1bgkJMjI1CitfX1NZU0NBTEwoX19OUl90aW1lcl9nZXRvdmVycnVuLCBzeXNfdGltZXJfZ2V0b3ZlcnJ1bikKKyNkZWZpbmUgX19OUl90aW1lcl9kZWxldGUJMjI2CitfX1NZU0NBTEwoX19OUl90aW1lcl9kZWxldGUsIHN5c190aW1lcl9kZWxldGUpCisjZGVmaW5lIF9fTlJfY2xvY2tfc2V0dGltZQkyMjcKK19fU1lTQ0FMTChfX05SX2Nsb2NrX3NldHRpbWUsIHN5c19jbG9ja19zZXR0aW1lKQorI2RlZmluZSBfX05SX2Nsb2NrX2dldHRpbWUJMjI4CitfX1NZU0NBTEwoX19OUl9jbG9ja19nZXR0aW1lLCBzeXNfY2xvY2tfZ2V0dGltZSkKKyNkZWZpbmUgX19OUl9jbG9ja19nZXRyZXMJMjI5CitfX1NZU0NBTEwoX19OUl9jbG9ja19nZXRyZXMsIHN5c19jbG9ja19nZXRyZXMpCisjZGVmaW5lIF9fTlJfY2xvY2tfbmFub3NsZWVwCTIzMAorX19TWVNDQUxMKF9fTlJfY2xvY2tfbmFub3NsZWVwLCBzeXNfY2xvY2tfbmFub3NsZWVwKQorI2RlZmluZSBfX05SX2V4aXRfZ3JvdXAJCTIzMQorX19TWVNDQUxMKF9fTlJfZXhpdF9ncm91cCwgc3lzX2V4aXRfZ3JvdXApCisjZGVmaW5lIF9fTlJfZXBvbGxfd2FpdAkJMjMyCitfX1NZU0NBTEwoX19OUl9lcG9sbF93YWl0LCBzeXNfZXBvbGxfd2FpdCkKKyNkZWZpbmUgX19OUl9lcG9sbF9jdGwJCTIzMworX19TWVNDQUxMKF9fTlJfZXBvbGxfY3RsLCBzeXNfZXBvbGxfY3RsKQorI2RlZmluZSBfX05SX3Rna2lsbAkJMjM0CitfX1NZU0NBTEwoX19OUl90Z2tpbGwsIHN5c190Z2tpbGwpCisjZGVmaW5lIF9fTlJfdXRpbWVzCQkyMzUKK19fU1lTQ0FMTChfX05SX3V0aW1lcywgc3lzX3V0aW1lcykKKyNkZWZpbmUgX19OUl92c2VydmVyCQkyMzYKK19fU1lTQ0FMTChfX05SX3ZzZXJ2ZXIsIHN5c19uaV9zeXNjYWxsKQorI2RlZmluZSBfX05SX3ZzZXJ2ZXIJCTIzNgorX19TWVNDQUxMKF9fTlJfdnNlcnZlciwgc3lzX25pX3N5c2NhbGwpCisjZGVmaW5lIF9fTlJfbWJpbmQgCQkyMzcKK19fU1lTQ0FMTChfX05SX21iaW5kLCBzeXNfbWJpbmQpCisjZGVmaW5lIF9fTlJfc2V0X21lbXBvbGljeSAJMjM4CitfX1NZU0NBTEwoX19OUl9zZXRfbWVtcG9saWN5LCBzeXNfc2V0X21lbXBvbGljeSkKKyNkZWZpbmUgX19OUl9nZXRfbWVtcG9saWN5IAkyMzkKK19fU1lTQ0FMTChfX05SX2dldF9tZW1wb2xpY3ksIHN5c19nZXRfbWVtcG9saWN5KQorI2RlZmluZSBfX05SX21xX29wZW4gCQkyNDAKK19fU1lTQ0FMTChfX05SX21xX29wZW4sIHN5c19tcV9vcGVuKQorI2RlZmluZSBfX05SX21xX3VubGluayAJCTI0MQorX19TWVNDQUxMKF9fTlJfbXFfdW5saW5rLCBzeXNfbXFfdW5saW5rKQorI2RlZmluZSBfX05SX21xX3RpbWVkc2VuZCAJMjQyCitfX1NZU0NBTEwoX19OUl9tcV90aW1lZHNlbmQsIHN5c19tcV90aW1lZHNlbmQpCisjZGVmaW5lIF9fTlJfbXFfdGltZWRyZWNlaXZlCTI0MworX19TWVNDQUxMKF9fTlJfbXFfdGltZWRyZWNlaXZlLCBzeXNfbXFfdGltZWRyZWNlaXZlKQorI2RlZmluZSBfX05SX21xX25vdGlmeSAJCTI0NAorX19TWVNDQUxMKF9fTlJfbXFfbm90aWZ5LCBzeXNfbXFfbm90aWZ5KQorI2RlZmluZSBfX05SX21xX2dldHNldGF0dHIgCTI0NQorX19TWVNDQUxMKF9fTlJfbXFfZ2V0c2V0YXR0ciwgc3lzX21xX2dldHNldGF0dHIpCisjZGVmaW5lIF9fTlJfa2V4ZWNfbG9hZCAJMjQ2CitfX1NZU0NBTEwoX19OUl9rZXhlY19sb2FkLCBzeXNfbmlfc3lzY2FsbCkKKyNkZWZpbmUgX19OUl93YWl0aWQJCTI0NworX19TWVNDQUxMKF9fTlJfd2FpdGlkLCBzeXNfd2FpdGlkKQorI2RlZmluZSBfX05SX2FkZF9rZXkJCTI0OAorX19TWVNDQUxMKF9fTlJfYWRkX2tleSwgc3lzX2FkZF9rZXkpCisjZGVmaW5lIF9fTlJfcmVxdWVzdF9rZXkJMjQ5CitfX1NZU0NBTEwoX19OUl9yZXF1ZXN0X2tleSwgc3lzX3JlcXVlc3Rfa2V5KQorI2RlZmluZSBfX05SX2tleWN0bAkJMjUwCitfX1NZU0NBTEwoX19OUl9rZXljdGwsIHN5c19rZXljdGwpCisKKyNkZWZpbmUgX19OUl9zeXNjYWxsX21heCBfX05SX2tleWN0bAorI2lmbmRlZiBfX05PX1NUVUJTCisKKy8qIHVzZXItdmlzaWJsZSBlcnJvciBudW1iZXJzIGFyZSBpbiB0aGUgcmFuZ2UgLTEgLSAtNDA5NSAqLworCisjZGVmaW5lIF9fc3lzY2FsbF9jbG9iYmVyICJyMTEiLCJyY3giLCJtZW1vcnkiIAorCisjZGVmaW5lIF9fc3lzY2FsbF9yZXR1cm4odHlwZSwgcmVzKSBcCitkbyB7IFwKKwlpZiAoKHVuc2lnbmVkIGxvbmcpKHJlcykgPj0gKHVuc2lnbmVkIGxvbmcpKC0xMjcpKSB7IFwKKwkJZXJybm8gPSAtKHJlcyk7IFwKKwkJcmVzID0gLTE7IFwKKwl9IFwKKwlyZXR1cm4gKHR5cGUpIChyZXMpOyBcCit9IHdoaWxlICgwKQorCisjaWZkZWYgX19LRVJORUxfXworI2RlZmluZSBfX0FSQ0hfV0FOVF9PTERfUkVBRERJUgorI2RlZmluZSBfX0FSQ0hfV0FOVF9PTERfU1RBVAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfQUxBUk0KKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0dFVEhPU1ROQU1FCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19QQVVTRQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0dFVE1BU0sKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR05BTAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfVVRJTUUKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1dBSVRQSUQKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NPQ0tFVENBTEwKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0ZBRFZJU0U2NAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfR0VUUEdSUAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfTExTRUVLCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19OSUNFCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19PTERfR0VUUkxJTUlUCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19PTERVTU9VTlQKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR1BFTkRJTkcKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR1BST0NNQVNLCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19SVF9TSUdBQ1RJT04KKyNkZWZpbmUgX19BUkNIX1dBTlRfQ09NUEFUX1NZU19USU1FCisjZW5kaWYKKworI2lmbmRlZiBfX0tFUk5FTF9TWVNDQUxMU19fCisKKyNkZWZpbmUgX19zeXNjYWxsICJzeXNjYWxsIgorCisjZGVmaW5lIF9zeXNjYWxsMCh0eXBlLG5hbWUpIFwKK3R5cGUgbmFtZSh2b2lkKSBcCit7IFwKK2xvbmcgX19yZXM7IFwKK19fYXNtX18gdm9sYXRpbGUgKF9fc3lzY2FsbCBcCisJOiAiPWEiIChfX3JlcykgXAorCTogIjAiIChfX05SXyMjbmFtZSkgOiBfX3N5c2NhbGxfY2xvYmJlciApOyBcCitfX3N5c2NhbGxfcmV0dXJuKHR5cGUsX19yZXMpOyBcCit9CisKKyNkZWZpbmUgX3N5c2NhbGwxKHR5cGUsbmFtZSx0eXBlMSxhcmcxKSBcCit0eXBlIG5hbWUodHlwZTEgYXJnMSkgXAoreyBcCitsb25nIF9fcmVzOyBcCitfX2FzbV9fIHZvbGF0aWxlIChfX3N5c2NhbGwgXAorCTogIj1hIiAoX19yZXMpIFwKKwk6ICIwIiAoX19OUl8jI25hbWUpLCJEIiAoKGxvbmcpKGFyZzEpKSA6IF9fc3lzY2FsbF9jbG9iYmVyICk7IFwKK19fc3lzY2FsbF9yZXR1cm4odHlwZSxfX3Jlcyk7IFwKK30KKworI2RlZmluZSBfc3lzY2FsbDIodHlwZSxuYW1lLHR5cGUxLGFyZzEsdHlwZTIsYXJnMikgXAordHlwZSBuYW1lKHR5cGUxIGFyZzEsdHlwZTIgYXJnMikgXAoreyBcCitsb25nIF9fcmVzOyBcCitfX2FzbV9fIHZvbGF0aWxlIChfX3N5c2NhbGwgXAorCTogIj1hIiAoX19yZXMpIFwKKwk6ICIwIiAoX19OUl8jI25hbWUpLCJEIiAoKGxvbmcpKGFyZzEpKSwiUyIgKChsb25nKShhcmcyKSkgOiBfX3N5c2NhbGxfY2xvYmJlciApOyBcCitfX3N5c2NhbGxfcmV0dXJuKHR5cGUsX19yZXMpOyBcCit9CisKKyNkZWZpbmUgX3N5c2NhbGwzKHR5cGUsbmFtZSx0eXBlMSxhcmcxLHR5cGUyLGFyZzIsdHlwZTMsYXJnMykgXAordHlwZSBuYW1lKHR5cGUxIGFyZzEsdHlwZTIgYXJnMix0eXBlMyBhcmczKSBcCit7IFwKK2xvbmcgX19yZXM7IFwKK19fYXNtX18gdm9sYXRpbGUgKF9fc3lzY2FsbCBcCisJOiAiPWEiIChfX3JlcykgXAorCTogIjAiIChfX05SXyMjbmFtZSksIkQiICgobG9uZykoYXJnMSkpLCJTIiAoKGxvbmcpKGFyZzIpKSwgXAorCQkgICJkIiAoKGxvbmcpKGFyZzMpKSA6IF9fc3lzY2FsbF9jbG9iYmVyKTsgXAorX19zeXNjYWxsX3JldHVybih0eXBlLF9fcmVzKTsgXAorfQorCisjZGVmaW5lIF9zeXNjYWxsNCh0eXBlLG5hbWUsdHlwZTEsYXJnMSx0eXBlMixhcmcyLHR5cGUzLGFyZzMsdHlwZTQsYXJnNCkgXAordHlwZSBuYW1lICh0eXBlMSBhcmcxLCB0eXBlMiBhcmcyLCB0eXBlMyBhcmczLCB0eXBlNCBhcmc0KSBcCit7IFwKK2xvbmcgX19yZXM7IFwKK19fYXNtX18gdm9sYXRpbGUgKCJtb3ZxICU1LCUlcjEwIDsiIF9fc3lzY2FsbCBcCisJOiAiPWEiIChfX3JlcykgXAorCTogIjAiIChfX05SXyMjbmFtZSksIkQiICgobG9uZykoYXJnMSkpLCJTIiAoKGxvbmcpKGFyZzIpKSwgXAorCSAgImQiICgobG9uZykoYXJnMykpLCJnIiAoKGxvbmcpKGFyZzQpKSA6IF9fc3lzY2FsbF9jbG9iYmVyLCJyMTAiICk7IFwKK19fc3lzY2FsbF9yZXR1cm4odHlwZSxfX3Jlcyk7IFwKK30gCisKKyNkZWZpbmUgX3N5c2NhbGw1KHR5cGUsbmFtZSx0eXBlMSxhcmcxLHR5cGUyLGFyZzIsdHlwZTMsYXJnMyx0eXBlNCxhcmc0LCBcCisJICB0eXBlNSxhcmc1KSBcCit0eXBlIG5hbWUgKHR5cGUxIGFyZzEsdHlwZTIgYXJnMix0eXBlMyBhcmczLHR5cGU0IGFyZzQsdHlwZTUgYXJnNSkgXAoreyBcCitsb25nIF9fcmVzOyBcCitfX2FzbV9fIHZvbGF0aWxlICgibW92cSAlNSwlJXIxMCA7IG1vdnEgJTYsJSVyOCA7ICIgX19zeXNjYWxsIFwKKwk6ICI9YSIgKF9fcmVzKSBcCisJOiAiMCIgKF9fTlJfIyNuYW1lKSwiRCIgKChsb25nKShhcmcxKSksIlMiICgobG9uZykoYXJnMikpLCBcCisJICAiZCIgKChsb25nKShhcmczKSksImciICgobG9uZykoYXJnNCkpLCJnIiAoKGxvbmcpKGFyZzUpKSA6IFwKKwlfX3N5c2NhbGxfY2xvYmJlciwicjgiLCJyMTAiICk7IFwKK19fc3lzY2FsbF9yZXR1cm4odHlwZSxfX3Jlcyk7IFwKK30KKworI2RlZmluZSBfc3lzY2FsbDYodHlwZSxuYW1lLHR5cGUxLGFyZzEsdHlwZTIsYXJnMix0eXBlMyxhcmczLHR5cGU0LGFyZzQsIFwKKwkgIHR5cGU1LGFyZzUsdHlwZTYsYXJnNikgXAordHlwZSBuYW1lICh0eXBlMSBhcmcxLHR5cGUyIGFyZzIsdHlwZTMgYXJnMyx0eXBlNCBhcmc0LHR5cGU1IGFyZzUsdHlwZTYgYXJnNikgXAoreyBcCitsb25nIF9fcmVzOyBcCitfX2FzbV9fIHZvbGF0aWxlICgibW92cSAlNSwlJXIxMCA7IG1vdnEgJTYsJSVyOCA7IG1vdnEgJTcsJSVyOSA7ICIgX19zeXNjYWxsIFwKKwk6ICI9YSIgKF9fcmVzKSBcCisJOiAiMCIgKF9fTlJfIyNuYW1lKSwiRCIgKChsb25nKShhcmcxKSksIlMiICgobG9uZykoYXJnMikpLCBcCisJICAiZCIgKChsb25nKShhcmczKSksICJnIiAoKGxvbmcpKGFyZzQpKSwgImciICgobG9uZykoYXJnNSkpLCBcCisJICAiZyIgKChsb25nKShhcmc2KSkgOiBcCisJX19zeXNjYWxsX2Nsb2JiZXIsInI4IiwicjEwIiwicjkiICk7IFwKK19fc3lzY2FsbF9yZXR1cm4odHlwZSxfX3Jlcyk7IFwKK30KKworI2Vsc2UgLyogX19LRVJORUxfU1lTQ0FMTFNfXyAqLworCisjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisKKy8qCisgKiB3ZSBuZWVkIHRoaXMgaW5saW5lIC0gZm9ya2luZyBmcm9tIGtlcm5lbCBzcGFjZSB3aWxsIHJlc3VsdAorICogaW4gTk8gQ09QWSBPTiBXUklURSAoISEhKSwgdW50aWwgYW4gZXhlY3ZlIGlzIGV4ZWN1dGVkLiBUaGlzCisgKiBpcyBubyBwcm9ibGVtLCBidXQgZm9yIHRoZSBzdGFjay4gVGhpcyBpcyBoYW5kbGVkIGJ5IG5vdCBsZXR0aW5nCisgKiBtYWluKCkgdXNlIHRoZSBzdGFjayBhdCBhbGwgYWZ0ZXIgZm9yaygpLiBUaHVzLCBubyBmdW5jdGlvbgorICogY2FsbHMgLSB3aGljaCBtZWFucyBpbmxpbmUgY29kZSBmb3IgZm9yayB0b28sIGFzIG90aGVyd2lzZSB3ZQorICogd291bGQgdXNlIHRoZSBzdGFjayB1cG9uIGV4aXQgZnJvbSAnZm9yaygpJy4KKyAqCisgKiBBY3R1YWxseSBvbmx5IHBhdXNlIGFuZCBmb3JrIGFyZSBuZWVkZWQgaW5saW5lLCBzbyB0aGF0IHRoZXJlCisgKiB3b24ndCBiZSBhbnkgbWVzc2luZyB3aXRoIHRoZSBzdGFjayBmcm9tIG1haW4oKSwgYnV0IHdlIGRlZmluZQorICogc29tZSBvdGhlcnMgdG9vLgorICovCisjZGVmaW5lIF9fTlJfX2V4aXQgX19OUl9leGl0CisKK3N0YXRpYyBpbmxpbmUgcGlkX3Qgc2V0c2lkKHZvaWQpCit7CisJcmV0dXJuIHN5c19zZXRzaWQoKTsKK30KKworc3RhdGljIGlubGluZSBzc2l6ZV90IHdyaXRlKHVuc2lnbmVkIGludCBmZCwgY2hhciAqIGJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXJldHVybiBzeXNfd3JpdGUoZmQsIGJ1ZiwgY291bnQpOworfQorCitzdGF0aWMgaW5saW5lIHNzaXplX3QgcmVhZCh1bnNpZ25lZCBpbnQgZmQsIGNoYXIgKiBidWYsIHNpemVfdCBjb3VudCkKK3sKKwlyZXR1cm4gc3lzX3JlYWQoZmQsIGJ1ZiwgY291bnQpOworfQorCitzdGF0aWMgaW5saW5lIG9mZl90IGxzZWVrKHVuc2lnbmVkIGludCBmZCwgb2ZmX3Qgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgb3JpZ2luKQoreworCXJldHVybiBzeXNfbHNlZWsoZmQsIG9mZnNldCwgb3JpZ2luKTsKK30KKworc3RhdGljIGlubGluZSBsb25nIGR1cCh1bnNpZ25lZCBpbnQgZmQpCit7CisJcmV0dXJuIHN5c19kdXAoZmQpOworfQorCisvKiBpbXBsZW1lbnRlZCBpbiBhc20gaW4gYXJjaC94ODZfNjQva2VybmVsL2VudHJ5LlMgKi8KK2V4dGVybiBpbnQgZXhlY3ZlKGNvbnN0IGNoYXIgKiwgY2hhciAqIGNvbnN0ICosIGNoYXIgKiBjb25zdCAqKTsKKworc3RhdGljIGlubGluZSBsb25nIG9wZW4oY29uc3QgY2hhciAqIGZpbGVuYW1lLCBpbnQgZmxhZ3MsIGludCBtb2RlKQoreworCXJldHVybiBzeXNfb3BlbihmaWxlbmFtZSwgZmxhZ3MsIG1vZGUpOworfQorCitzdGF0aWMgaW5saW5lIGxvbmcgY2xvc2UodW5zaWduZWQgaW50IGZkKQoreworCXJldHVybiBzeXNfY2xvc2UoZmQpOworfQorCitzdGF0aWMgaW5saW5lIHBpZF90IHdhaXRwaWQoaW50IHBpZCwgaW50ICogd2FpdF9zdGF0LCBpbnQgZmxhZ3MpCit7CisJcmV0dXJuIHN5c193YWl0NChwaWQsIHdhaXRfc3RhdCwgZmxhZ3MsIE5VTEwpOworfQorCitleHRlcm4gbG9uZyBzeXNfbW1hcCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLAorCQkJdW5zaWduZWQgbG9uZyBwcm90LCB1bnNpZ25lZCBsb25nIGZsYWdzLAorCQkJdW5zaWduZWQgbG9uZyBmZCwgdW5zaWduZWQgbG9uZyBvZmYpOworCitleHRlcm4gaW50IHN5c19tb2RpZnlfbGR0KGludCBmdW5jLCB2b2lkICpwdHIsIHVuc2lnbmVkIGxvbmcgYnl0ZWNvdW50KTsKKworYXNtbGlua2FnZSBsb25nIHN5c19leGVjdmUoY2hhciAqbmFtZSwgY2hhciAqKmFyZ3YsIGNoYXIgKiplbnZwLAorCQkJc3RydWN0IHB0X3JlZ3MgcmVncyk7Cithc21saW5rYWdlIGxvbmcgc3lzX2Nsb25lKHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgbmV3c3AsCisJCQl2b2lkICpwYXJlbnRfdGlkLCB2b2lkICpjaGlsZF90aWQsCisJCQlzdHJ1Y3QgcHRfcmVncyByZWdzKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfZm9yayhzdHJ1Y3QgcHRfcmVncyByZWdzKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfdmZvcmsoc3RydWN0IHB0X3JlZ3MgcmVncyk7Cithc21saW5rYWdlIGxvbmcgc3lzX3BpcGUoaW50ICpmaWxkZXMpOworCisjZW5kaWYgLyogX19LRVJORUxfU1lTQ0FMTFNfXyAqLworCisjaWYgIWRlZmluZWQoX19BU1NFTUJMWV9fKSAmJiBkZWZpbmVkKF9fS0VSTkVMX18pCisKKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKworYXNtbGlua2FnZSBsb25nIHN5c19wdHJhY2UobG9uZyByZXF1ZXN0LCBsb25nIHBpZCwKKwkJCQl1bnNpZ25lZCBsb25nIGFkZHIsIGxvbmcgZGF0YSk7Cithc21saW5rYWdlIGxvbmcgc3lzX2lvcGwodW5zaWduZWQgaW50IGxldmVsLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Cithc21saW5rYWdlIGxvbmcgc3lzX2lvcGVybSh1bnNpZ25lZCBsb25nIGZyb20sIHVuc2lnbmVkIGxvbmcgbnVtLCBpbnQgdHVybl9vbik7CitzdHJ1Y3Qgc2lnYWN0aW9uOworYXNtbGlua2FnZSBsb25nIHN5c19ydF9zaWdhY3Rpb24oaW50IHNpZywKKwkJCQljb25zdCBzdHJ1Y3Qgc2lnYWN0aW9uIF9fdXNlciAqYWN0LAorCQkJCXN0cnVjdCBzaWdhY3Rpb24gX191c2VyICpvYWN0LAorCQkJCXNpemVfdCBzaWdzZXRzaXplKTsKKworI2VuZGlmCS8qIF9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYgLyogX19OT19TVFVCUyAqLworCisvKgorICogIkNvbmRpdGlvbmFsIiBzeXNjYWxscworICoKKyAqIFdoYXQgd2Ugd2FudCBpcyBfX2F0dHJpYnV0ZV9fKCh3ZWFrLGFsaWFzKCJzeXNfbmlfc3lzY2FsbCIpKSksCisgKiBidXQgaXQgZG9lc24ndCB3b3JrIG9uIGFsbCB0b29sY2hhaW5zLCBzbyB3ZSBqdXN0IGRvIGl0IGJ5IGhhbmQKKyAqLworI2RlZmluZSBjb25kX3N5c2NhbGwoeCkgYXNtKCIud2Vha1x0IiAjeCAiXG5cdC5zZXRcdCIgI3ggIixzeXNfbmlfc3lzY2FsbCIpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L3VzZXIuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC91c2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI3ODVjNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC91c2VyLmgKQEAgLTAsMCArMSwxMTQgQEAKKyNpZm5kZWYgX1g4Nl82NF9VU0VSX0gKKyNkZWZpbmUgX1g4Nl82NF9VU0VSX0gKKworI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisvKiBDb3JlIGZpbGUgZm9ybWF0OiBUaGUgY29yZSBmaWxlIGlzIHdyaXR0ZW4gaW4gc3VjaCBhIHdheSB0aGF0IGdkYgorICAgY2FuIHVuZGVyc3RhbmQgaXQgYW5kIHByb3ZpZGUgdXNlZnVsIGluZm9ybWF0aW9uIHRvIHRoZSB1c2VyLgorICAgVGhlcmUgYXJlIHF1aXRlIGEgbnVtYmVyIG9mIG9ic3RhY2xlcyB0byBiZWluZyBhYmxlIHRvIHZpZXcgdGhlCisgICBjb250ZW50cyBvZiB0aGUgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzLCBhbmQgdW50aWwgdGhlc2UgYXJlCisgICBzb2x2ZWQgeW91IHdpbGwgbm90IGJlIGFibGUgdG8gdmlldyB0aGUgY29udGVudHMgb2YgdGhlbS4KKyAgIEFjdHVhbGx5LCB5b3UgY2FuIHJlYWQgaW4gdGhlIGNvcmUgZmlsZSBhbmQgbG9vayBhdCB0aGUgY29udGVudHMgb2YKKyAgIHRoZSB1c2VyIHN0cnVjdCB0byBmaW5kIG91dCB3aGF0IHRoZSBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMKKyAgIGNvbnRhaW4uCisKKyAgIFRoZSBhY3R1YWwgZmlsZSBjb250ZW50cyBhcmUgYXMgZm9sbG93czoKKyAgIFVQQUdFOiAxIHBhZ2UgY29uc2lzdGluZyBvZiBhIHVzZXIgc3RydWN0IHRoYXQgdGVsbHMgZ2RiIHdoYXQgaXMgcHJlc2VudAorICAgaW4gdGhlIGZpbGUuICBEaXJlY3RseSBhZnRlciB0aGlzIGlzIGEgY29weSBvZiB0aGUgdGFza19zdHJ1Y3QsIHdoaWNoCisgICBpcyBjdXJyZW50bHkgbm90IHVzZWQgYnkgZ2RiLCBidXQgaXQgbWF5IGNvbWUgaW4gdXNlZnVsIGF0IHNvbWUgcG9pbnQuCisgICBBbGwgb2YgdGhlIHJlZ2lzdGVycyBhcmUgc3RvcmVkIGFzIHBhcnQgb2YgdGhlIHVwYWdlLiAgVGhlIHVwYWdlIHNob3VsZAorICAgYWx3YXlzIGJlIG9ubHkgb25lIHBhZ2UuCisgICBEQVRBOiBUaGUgZGF0YSBhcmVhIGlzIHN0b3JlZC4gIFdlIHVzZSBjdXJyZW50LT5lbmRfdGV4dCB0bworICAgY3VycmVudC0+YnJrIHRvIHBpY2sgdXAgYWxsIG9mIHRoZSB1c2VyIHZhcmlhYmxlcywgcGx1cyBhbnkgbWVtb3J5CisgICB0aGF0IG1heSBoYXZlIGJlZW4gbWFsbG9jZWQuICBObyBhdHRlbXB0IGlzIG1hZGUgdG8gZGV0ZXJtaW5lIGlmIGEgcGFnZQorICAgaXMgZGVtYW5kLXplcm8gb3IgaWYgYSBwYWdlIGlzIHRvdGFsbHkgdW51c2VkLCB3ZSBqdXN0IGNvdmVyIHRoZSBlbnRpcmUKKyAgIHJhbmdlLiAgQWxsIG9mIHRoZSBhZGRyZXNzZXMgYXJlIHJvdW5kZWQgaW4gc3VjaCBhIHdheSB0aGF0IGFuIGludGVncmFsCisgICBudW1iZXIgb2YgcGFnZXMgaXMgd3JpdHRlbi4KKyAgIFNUQUNLOiBXZSBuZWVkIHRoZSBzdGFjayBpbmZvcm1hdGlvbiBpbiBvcmRlciB0byBnZXQgYSBtZWFuaW5nZnVsCisgICBiYWNrdHJhY2UuICBXZSBuZWVkIHRvIHdyaXRlIHRoZSBkYXRhIGZyb20gKGVzcCkgdG8KKyAgIGN1cnJlbnQtPnN0YXJ0X3N0YWNrLCBzbyB3ZSByb3VuZCBlYWNoIG9mIHRoZXNlIG9mZiBpbiBvcmRlciB0byBiZSBhYmxlCisgICB0byB3cml0ZSBhbiBpbnRlZ2VyIG51bWJlciBvZiBwYWdlcy4KKyAgIFRoZSBtaW5pbXVtIGNvcmUgZmlsZSBzaXplIGlzIDMgcGFnZXMsIG9yIDEyMjg4IGJ5dGVzLiAgKi8KKworLyoKKyAqIFBlbnRpdW0gSUlJIEZYU1IsIFNTRSBzdXBwb3J0CisgKglHYXJldGggSHVnaGVzIDxnYXJldGhAdmFsaW51eC5jb20+LCBNYXkgMjAwMAorICoKKyAqIFByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlIEdEQiA1LjArIFBUUkFDRV97R0VUfFNFVH1GUFhSRUdTIHJlcXVlc3RzIGZvcgorICogaW50ZXJhY3Rpbmcgd2l0aCB0aGUgRlhTUi1mb3JtYXQgZmxvYXRpbmcgcG9pbnQgZW52aXJvbm1lbnQuICBGbG9hdGluZworICogcG9pbnQgZGF0YSBjYW4gYmUgYWNjZXNzZWQgaW4gdGhlIHJlZ3VsYXIgZm9ybWF0IGluIHRoZSB1c3VhbCBtYW5uZXIsCisgKiBhbmQgYm90aCB0aGUgc3RhbmRhcmQgYW5kIFNJTUQgZmxvYXRpbmcgcG9pbnQgZGF0YSBjYW4gYmUgYWNjZXNzZWQgdmlhCisgKiB0aGUgbmV3IHB0cmFjZSByZXF1ZXN0cy4gIEluIGVpdGhlciBjYXNlLCBjaGFuZ2VzIHRvIHRoZSBGUFUgZW52aXJvbm1lbnQKKyAqIHdpbGwgYmUgcmVmbGVjdGVkIGluIHRoZSB0YXNrJ3Mgc3RhdGUgYXMgZXhwZWN0ZWQuCisgKiAKKyAqIHg4Ni02NCBzdXBwb3J0IGJ5IEFuZGkgS2xlZW4uCisgKi8KKworLyogVGhpcyBtYXRjaGVzIHRoZSA2NGJpdCBGWFNBVkUgZm9ybWF0IGFzIGRlZmluZWQgYnkgQU1ELiBJdCBpcyB0aGUgc2FtZQorICAgYXMgdGhlIDMyYml0IGZvcm1hdCBkZWZpbmVkIGJ5IEludGVsLCBleGNlcHQgdGhhdCB0aGUgc2VsZWN0b3I6b2Zmc2V0IHBhaXJzIGZvcgorICAgZGF0YSBhbmQgZWlwIGFyZSByZXBsYWNlZCB3aXRoIGZsYXQgNjRiaXQgcG9pbnRlcnMuICovIAorc3RydWN0IHVzZXJfaTM4N19zdHJ1Y3QgeworCXVuc2lnbmVkIHNob3J0CWN3ZDsKKwl1bnNpZ25lZCBzaG9ydAlzd2Q7CisJdW5zaWduZWQgc2hvcnQJdHdkOyAvKiBOb3RlIHRoaXMgaXMgbm90IHRoZSBzYW1lIGFzIHRoZSAzMmJpdC94ODcvRlNBVkUgdHdkICovCisJdW5zaWduZWQgc2hvcnQJZm9wOworCV9fdTY0CXJpcDsKKwlfX3U2NAlyZHA7CisJX191MzIJbXhjc3I7CisJX191MzIJbXhjc3JfbWFzazsKKwlfX3UzMglzdF9zcGFjZVszMl07CS8qIDgqMTYgYnl0ZXMgZm9yIGVhY2ggRlAtcmVnID0gMTI4IGJ5dGVzICovCisJX191MzIJeG1tX3NwYWNlWzY0XTsJLyogMTYqMTYgYnl0ZXMgZm9yIGVhY2ggWE1NLXJlZyA9IDI1NiBieXRlcyAqLworCV9fdTMyCXBhZGRpbmdbMjRdOworfTsKKworLyoKKyAqIFNlZ21lbnQgcmVnaXN0ZXIgbGF5b3V0IGluIGNvcmVkdW1wcy4KKyAqLworc3RydWN0IHVzZXJfcmVnc19zdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcgcjE1LHIxNCxyMTMscjEyLHJicCxyYngscjExLHIxMDsKKwl1bnNpZ25lZCBsb25nIHI5LHI4LHJheCxyY3gscmR4LHJzaSxyZGksb3JpZ19yYXg7CisJdW5zaWduZWQgbG9uZyByaXAsY3MsZWZsYWdzOworCXVuc2lnbmVkIGxvbmcgcnNwLHNzOworICAJdW5zaWduZWQgbG9uZyBmc19iYXNlLCBnc19iYXNlOworCXVuc2lnbmVkIGxvbmcgZHMsZXMsZnMsZ3M7IAorfTsgCisKKy8qIFdoZW4gdGhlIGtlcm5lbCBkdW1wcyBjb3JlLCBpdCBzdGFydHMgYnkgZHVtcGluZyB0aGUgdXNlciBzdHJ1Y3QgLQorICAgdGhpcyB3aWxsIGJlIHVzZWQgYnkgZ2RiIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGRhdGEgYW5kIHN0YWNrIHNlZ21lbnRzCisgICBhcmUgd2l0aGluIHRoZSBmaWxlLCBhbmQgd2hhdCB2aXJ0dWFsIGFkZHJlc3NlcyB0byB1c2UuICovCitzdHJ1Y3QgdXNlcnsKKy8qIFdlIHN0YXJ0IHdpdGggdGhlIHJlZ2lzdGVycywgdG8gbWltaWMgdGhlIHdheSB0aGF0ICJtZW1vcnkiIGlzIHJldHVybmVkCisgICBmcm9tIHRoZSBwdHJhY2UoMywuLi4pIGZ1bmN0aW9uLiAgKi8KKyAgc3RydWN0IHVzZXJfcmVnc19zdHJ1Y3QgcmVnczsJCS8qIFdoZXJlIHRoZSByZWdpc3RlcnMgYXJlIGFjdHVhbGx5IHN0b3JlZCAqLworLyogcHRyYWNlIGRvZXMgbm90IHlldCBzdXBwbHkgdGhlc2UuICBTb21lZGF5Li4uLiAqLworICBpbnQgdV9mcHZhbGlkOwkJLyogVHJ1ZSBpZiBtYXRoIGNvLXByb2Nlc3NvciBiZWluZyB1c2VkLiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmb3IgdGhpcyBtZXNzLiBOb3QgeWV0IHVzZWQuICovCisgIGludCBwYWQwOworICBzdHJ1Y3QgdXNlcl9pMzg3X3N0cnVjdCBpMzg3OwkvKiBNYXRoIENvLXByb2Nlc3NvciByZWdpc3RlcnMuICovCisvKiBUaGUgcmVzdCBvZiB0aGlzIGp1bmsgaXMgdG8gaGVscCBnZGIgZmlndXJlIG91dCB3aGF0IGdvZXMgd2hlcmUgKi8KKyAgdW5zaWduZWQgbG9uZyBpbnQgdV90c2l6ZTsJLyogVGV4dCBzZWdtZW50IHNpemUgKHBhZ2VzKS4gKi8KKyAgdW5zaWduZWQgbG9uZyBpbnQgdV9kc2l6ZTsJLyogRGF0YSBzZWdtZW50IHNpemUgKHBhZ2VzKS4gKi8KKyAgdW5zaWduZWQgbG9uZyBpbnQgdV9zc2l6ZTsJLyogU3RhY2sgc2VnbWVudCBzaXplIChwYWdlcykuICovCisgIHVuc2lnbmVkIGxvbmcgc3RhcnRfY29kZTsgICAgIC8qIFN0YXJ0aW5nIHZpcnR1YWwgYWRkcmVzcyBvZiB0ZXh0LiAqLworICB1bnNpZ25lZCBsb25nIHN0YXJ0X3N0YWNrOwkvKiBTdGFydGluZyB2aXJ0dWFsIGFkZHJlc3Mgb2Ygc3RhY2sgYXJlYS4KKwkJCQkgICBUaGlzIGlzIGFjdHVhbGx5IHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLAorCQkJCSAgIHRoZSB0b3Agb2YgdGhlIHN0YWNrIGlzIGFsd2F5cyBmb3VuZCBpbiB0aGUKKwkJCQkgICBlc3AgcmVnaXN0ZXIuICAqLworICBsb25nIGludCBzaWduYWw7ICAgICAJCS8qIFNpZ25hbCB0aGF0IGNhdXNlZCB0aGUgY29yZSBkdW1wLiAqLworICBpbnQgcmVzZXJ2ZWQ7CQkJLyogTm8gbG9uZ2VyIHVzZWQgKi8KKyAgaW50IHBhZDE7CisgIHN0cnVjdCB1c2VyX3B0X3JlZ3MgKiB1X2FyMDsJLyogVXNlZCBieSBnZGIgdG8gaGVscCBmaW5kIHRoZSB2YWx1ZXMgZm9yICovCisJCQkJLyogdGhlIHJlZ2lzdGVycy4gKi8KKyAgc3RydWN0IHVzZXJfaTM4N19zdHJ1Y3QqIHVfZnBzdGF0ZTsJLyogTWF0aCBDby1wcm9jZXNzb3IgcG9pbnRlci4gKi8KKyAgdW5zaWduZWQgbG9uZyBtYWdpYzsJCS8qIFRvIHVuaXF1ZWx5IGlkZW50aWZ5IGEgY29yZSBmaWxlICovCisgIGNoYXIgdV9jb21tWzMyXTsJCS8qIFVzZXIgY29tbWFuZCB0aGF0IHdhcyByZXNwb25zaWJsZSAqLworICB1bnNpZ25lZCBsb25nIHVfZGVidWdyZWdbOF07CisgIHVuc2lnbmVkIGxvbmcgZXJyb3JfY29kZTsgLyogQ1BVIGVycm9yIGNvZGUgb3IgMCAqLworICB1bnNpZ25lZCBsb25nIGZhdWx0X2FkZHJlc3M7IC8qIENSMyBvciAwICovCit9OworI2RlZmluZSBOQlBHIFBBR0VfU0laRQorI2RlZmluZSBVUEFHRVMgMQorI2RlZmluZSBIT1NUX1RFWFRfU1RBUlRfQUREUiAodS5zdGFydF9jb2RlKQorI2RlZmluZSBIT1NUX1NUQUNLX0VORF9BRERSICh1LnN0YXJ0X3N0YWNrICsgdS51X3NzaXplICogTkJQRykKKworI2VuZGlmIC8qIF9YODZfNjRfVVNFUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvdXNlcjMyLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvdXNlcjMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc2OTg3MgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC91c2VyMzIuaApAQCAtMCwwICsxLDY5IEBACisjaWZuZGVmIFVTRVIzMl9ICisjZGVmaW5lIFVTRVIzMl9IIDEKKworLyogSUEzMiBjb21wYXRpYmxlIHVzZXIgc3RydWN0dXJlcyBmb3IgcHRyYWNlLiBUaGVzZSBzaG91bGQgYmUgdXNlZCBmb3IgMzJiaXQgY29yZWR1bXBzIHRvby4gKi8KKworc3RydWN0IHVzZXJfaTM4N19pYTMyX3N0cnVjdCB7CisJdTMyCWN3ZDsKKwl1MzIJc3dkOworCXUzMgl0d2Q7CisJdTMyCWZpcDsKKwl1MzIJZmNzOworCXUzMglmb287CisJdTMyCWZvczsKKwl1MzIJc3Rfc3BhY2VbMjBdOyAgIC8qIDgqMTAgYnl0ZXMgZm9yIGVhY2ggRlAtcmVnID0gODAgYnl0ZXMgKi8KK307CisKKy8qIEZTQVZFIGZyYW1lIHdpdGggZXh0ZW5zaW9ucyAqLworc3RydWN0IHVzZXIzMl9meHNyX3N0cnVjdCB7CisJdW5zaWduZWQgc2hvcnQJY3dkOworCXVuc2lnbmVkIHNob3J0CXN3ZDsKKwl1bnNpZ25lZCBzaG9ydAl0d2Q7CS8qIG5vdCBjb21wYXRpYmxlIHRvIDY0Yml0IHR3ZCAqLworCXVuc2lnbmVkIHNob3J0CWZvcDsKKwlpbnQJZmlwOworCWludAlmY3M7CisJaW50CWZvbzsKKwlpbnQJZm9zOworCWludAlteGNzcjsKKwlpbnQJcmVzZXJ2ZWQ7CisJaW50CXN0X3NwYWNlWzMyXTsJLyogOCoxNiBieXRlcyBmb3IgZWFjaCBGUC1yZWcgPSAxMjggYnl0ZXMgKi8KKwlpbnQJeG1tX3NwYWNlWzMyXTsJLyogOCoxNiBieXRlcyBmb3IgZWFjaCBYTU0tcmVnID0gMTI4IGJ5dGVzICovCisJaW50CXBhZGRpbmdbNTZdOworfTsKKworc3RydWN0IHVzZXJfcmVnc19zdHJ1Y3QzMiB7CisJX191MzIgZWJ4LCBlY3gsIGVkeCwgZXNpLCBlZGksIGVicCwgZWF4OworCXVuc2lnbmVkIHNob3J0IGRzLCBfX2RzLCBlcywgX19lczsKKwl1bnNpZ25lZCBzaG9ydCBmcywgX19mcywgZ3MsIF9fZ3M7CisJX191MzIgb3JpZ19lYXgsIGVpcDsKKwl1bnNpZ25lZCBzaG9ydCBjcywgX19jczsKKwlfX3UzMiBlZmxhZ3MsIGVzcDsKKwl1bnNpZ25lZCBzaG9ydCBzcywgX19zczsKK307CisKK3N0cnVjdCB1c2VyMzIgeworICBzdHJ1Y3QgdXNlcl9yZWdzX3N0cnVjdDMyIHJlZ3M7CQkvKiBXaGVyZSB0aGUgcmVnaXN0ZXJzIGFyZSBhY3R1YWxseSBzdG9yZWQgKi8KKyAgaW50IHVfZnB2YWxpZDsJCS8qIFRydWUgaWYgbWF0aCBjby1wcm9jZXNzb3IgYmVpbmcgdXNlZC4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZm9yIHRoaXMgbWVzcy4gTm90IHlldCB1c2VkLiAqLworICBzdHJ1Y3QgdXNlcl9pMzg3X2lhMzJfc3RydWN0IGkzODc7CS8qIE1hdGggQ28tcHJvY2Vzc29yIHJlZ2lzdGVycy4gKi8KKy8qIFRoZSByZXN0IG9mIHRoaXMganVuayBpcyB0byBoZWxwIGdkYiBmaWd1cmUgb3V0IHdoYXQgZ29lcyB3aGVyZSAqLworICBfX3UzMiB1X3RzaXplOwkvKiBUZXh0IHNlZ21lbnQgc2l6ZSAocGFnZXMpLiAqLworICBfX3UzMiB1X2RzaXplOwkvKiBEYXRhIHNlZ21lbnQgc2l6ZSAocGFnZXMpLiAqLworICBfX3UzMiB1X3NzaXplOwkvKiBTdGFjayBzZWdtZW50IHNpemUgKHBhZ2VzKS4gKi8KKyAgX191MzIgc3RhcnRfY29kZTsgICAgIC8qIFN0YXJ0aW5nIHZpcnR1YWwgYWRkcmVzcyBvZiB0ZXh0LiAqLworICBfX3UzMiBzdGFydF9zdGFjazsJLyogU3RhcnRpbmcgdmlydHVhbCBhZGRyZXNzIG9mIHN0YWNrIGFyZWEuCisJCQkJICAgVGhpcyBpcyBhY3R1YWxseSB0aGUgYm90dG9tIG9mIHRoZSBzdGFjaywKKwkJCQkgICB0aGUgdG9wIG9mIHRoZSBzdGFjayBpcyBhbHdheXMgZm91bmQgaW4gdGhlCisJCQkJICAgZXNwIHJlZ2lzdGVyLiAgKi8KKyAgX191MzIgc2lnbmFsOyAgICAgCQkvKiBTaWduYWwgdGhhdCBjYXVzZWQgdGhlIGNvcmUgZHVtcC4gKi8KKyAgaW50IHJlc2VydmVkOwkJCS8qIE5vIF9fdTMyZXIgdXNlZCAqLworICBfX3UzMiB1X2FyMDsJLyogVXNlZCBieSBnZGIgdG8gaGVscCBmaW5kIHRoZSB2YWx1ZXMgZm9yICovCisJCQkJLyogdGhlIHJlZ2lzdGVycy4gKi8KKyAgX191MzIgdV9mcHN0YXRlOwkvKiBNYXRoIENvLXByb2Nlc3NvciBwb2ludGVyLiAqLworICBfX3UzMiBtYWdpYzsJCS8qIFRvIHVuaXF1ZWx5IGlkZW50aWZ5IGEgY29yZSBmaWxlICovCisgIGNoYXIgdV9jb21tWzMyXTsJCS8qIFVzZXIgY29tbWFuZCB0aGF0IHdhcyByZXNwb25zaWJsZSAqLworICBpbnQgdV9kZWJ1Z3JlZ1s4XTsKK307CisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvdmdhLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvdmdhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWYwYzBlNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC92Z2EuaApAQCAtMCwwICsxLDIwIEBACisvKgorICoJQWNjZXNzIHRvIFZHQSB2aWRlb3JhbQorICoKKyAqCShjKSAxOTk4IE1hcnRpbiBNYXJlcyA8bWpAdWN3LmN6PgorICovCisKKyNpZm5kZWYgX0xJTlVYX0FTTV9WR0FfSF8KKyNkZWZpbmUgX0xJTlVYX0FTTV9WR0FfSF8KKworLyoKKyAqCU9uIHRoZSBQQywgd2UgY2FuIGp1c3QgcmVjYWxjdWxhdGUgYWRkcmVzc2VzIGFuZCB0aGVuCisgKglhY2Nlc3MgdGhlIHZpZGVvcmFtIGRpcmVjdGx5IHdpdGhvdXQgYW55IGJsYWNrIG1hZ2ljLgorICovCisKKyNkZWZpbmUgVkdBX01BUF9NRU0oeCkgKHVuc2lnbmVkIGxvbmcpcGh5c190b192aXJ0KHgpCisKKyNkZWZpbmUgdmdhX3JlYWRiKHgpICgqKHgpKQorI2RlZmluZSB2Z2Ffd3JpdGViKHgseSkgKCooeSkgPSAoeCkpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L3ZzeXNjYWxsLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvdnN5c2NhbGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGM4ZDQzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L3ZzeXNjYWxsLmgKQEAgLTAsMCArMSw2MSBAQAorI2lmbmRlZiBfQVNNX1g4Nl82NF9WU1lTQ0FMTF9IXworI2RlZmluZSBfQVNNX1g4Nl82NF9WU1lTQ0FMTF9IXworCisjaW5jbHVkZSA8bGludXgvc2VxbG9jay5oPgorCitlbnVtIHZzeXNjYWxsX251bSB7CisJX19OUl92Z2V0dGltZW9mZGF5LAorCV9fTlJfdnRpbWUsCit9OworCisjZGVmaW5lIFZTWVNDQUxMX1NUQVJUICgtMTBVTCA8PCAyMCkKKyNkZWZpbmUgVlNZU0NBTExfU0laRSAxMDI0CisjZGVmaW5lIFZTWVNDQUxMX0VORCAoLTJVTCA8PCAyMCkKKyNkZWZpbmUgVlNZU0NBTExfQUREUih2c3lzY2FsbF9ucikgKFZTWVNDQUxMX1NUQVJUK1ZTWVNDQUxMX1NJWkUqKHZzeXNjYWxsX25yKSkKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2RlZmluZSBfX3NlY3Rpb25fdnh0aW1lIF9fYXR0cmlidXRlX18gKCh1bnVzZWQsIF9fc2VjdGlvbl9fICgiLnZ4dGltZSIpLCBhbGlnbmVkKDE2KSkpCisjZGVmaW5lIF9fc2VjdGlvbl93YWxsX2ppZmZpZXMgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCwgX19zZWN0aW9uX18gKCIud2FsbF9qaWZmaWVzIiksIGFsaWduZWQoMTYpKSkKKyNkZWZpbmUgX19zZWN0aW9uX2ppZmZpZXMgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCwgX19zZWN0aW9uX18gKCIuamlmZmllcyIpLCBhbGlnbmVkKDE2KSkpCisjZGVmaW5lIF9fc2VjdGlvbl9zeXNfdHogX19hdHRyaWJ1dGVfXyAoKHVudXNlZCwgX19zZWN0aW9uX18gKCIuc3lzX3R6IiksIGFsaWduZWQoMTYpKSkKKyNkZWZpbmUgX19zZWN0aW9uX3N5c2N0bF92c3lzY2FsbCBfX2F0dHJpYnV0ZV9fICgodW51c2VkLCBfX3NlY3Rpb25fXyAoIi5zeXNjdGxfdnN5c2NhbGwiKSwgYWxpZ25lZCgxNikpKQorI2RlZmluZSBfX3NlY3Rpb25feHRpbWUgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCwgX19zZWN0aW9uX18gKCIueHRpbWUiKSwgYWxpZ25lZCgxNikpKQorI2RlZmluZSBfX3NlY3Rpb25feHRpbWVfbG9jayBfX2F0dHJpYnV0ZV9fICgodW51c2VkLCBfX3NlY3Rpb25fXyAoIi54dGltZV9sb2NrIiksIGFsaWduZWQoMTYpKSkKKworI2RlZmluZSBWWFRJTUVfVFNDCTEKKyNkZWZpbmUgVlhUSU1FX0hQRVQJMgorCitzdHJ1Y3Qgdnh0aW1lX2RhdGEgeworCWxvbmcgaHBldF9hZGRyZXNzOwkvKiBIUEVUIGJhc2UgYWRkcmVzcyAqLworCXVuc2lnbmVkIGxvbmcgaHo7CS8qIEhQRVQgY2xvY2tzIC8gc2VjICovCisJaW50IGxhc3Q7CisJdW5zaWduZWQgbG9uZyBsYXN0X3RzYzsKKwlsb25nIHF1b3Q7CisJbG9uZyB0c2NfcXVvdDsKKwlpbnQgbW9kZTsKK307CisKKyNkZWZpbmUgaHBldF9yZWFkbChhKSAgICAgICAgICAgcmVhZGwoKHZvaWQgKilmaXhfdG9fdmlydChGSVhfSFBFVF9CQVNFKSArIGEpCisjZGVmaW5lIGhwZXRfd3JpdGVsKGQsYSkgICAgICAgIHdyaXRlbChkLCAodm9pZCAqKWZpeF90b192aXJ0KEZJWF9IUEVUX0JBU0UpICsgYSkKKworLyogdnN5c2NhbGwgc3BhY2UgKHJlYWRvbmx5KSAqLworZXh0ZXJuIHN0cnVjdCB2eHRpbWVfZGF0YSBfX3Z4dGltZTsKK2V4dGVybiBzdHJ1Y3QgdGltZXNwZWMgX194dGltZTsKK2V4dGVybiB2b2xhdGlsZSB1bnNpZ25lZCBsb25nIF9famlmZmllczsKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fd2FsbF9qaWZmaWVzOworZXh0ZXJuIHN0cnVjdCB0aW1lem9uZSBfX3N5c190ejsKK2V4dGVybiBzZXFsb2NrX3QgX194dGltZV9sb2NrOworCisvKiBrZXJuZWwgc3BhY2UgKHdyaXRlYWJsZSkgKi8KK2V4dGVybiBzdHJ1Y3Qgdnh0aW1lX2RhdGEgdnh0aW1lOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgd2FsbF9qaWZmaWVzOworZXh0ZXJuIHN0cnVjdCB0aW1lem9uZSBzeXNfdHo7CitleHRlcm4gaW50IHN5c2N0bF92c3lzY2FsbDsKK2V4dGVybiBzZXFsb2NrX3QgeHRpbWVfbG9jazsKKworI2RlZmluZSBBUkNIX0hBVkVfWFRJTUVfTE9DSyAxCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl82NF9WU1lTQ0FMTF9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L3ZzeXNjYWxsMzIuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC92c3lzY2FsbDMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYzMWMwOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC92c3lzY2FsbDMyLmgKQEAgLTAsMCArMSwyMCBAQAorI2lmbmRlZiBfQVNNX1ZTWVNDQUxMMzJfSAorI2RlZmluZSBfQVNNX1ZTWVNDQUxMMzJfSCAxCisKKy8qIFZhbHVlcyBuZWVkIHRvIG1hdGNoIGFyY2gveDg2XzY0L2lhMzIvdnN5c2NhbGwubGRzICovCisKKyNpZmRlZiBfX0FTU0VNQkxZX18KKyNkZWZpbmUgVlNZU0NBTEwzMl9CQVNFIDB4ZmZmZmUwMDAKKyNkZWZpbmUgVlNZU0NBTEwzMl9TWVNFWElUIChWU1lTQ0FMTDMyX0JBU0UgKyAweDQxMCkKKyNlbHNlCisjZGVmaW5lIFZTWVNDQUxMMzJfQkFTRSAweGZmZmZlMDAwVUwKKyNkZWZpbmUgVlNZU0NBTEwzMl9FTkQgKFZTWVNDQUxMMzJfQkFTRSArIFBBR0VfU0laRSkKKyNkZWZpbmUgVlNZU0NBTEwzMl9FSERSICgoY29uc3Qgc3RydWN0IGVsZjMyX2hkciAqKSBWU1lTQ0FMTDMyX0JBU0UpCisKKyNkZWZpbmUgVlNZU0NBTEwzMl9WU1lTQ0FMTCAoKHZvaWQgKilWU1lTQ0FMTDMyX0JBU0UgKyAweDQwMCkgCisjZGVmaW5lIFZTWVNDQUxMMzJfU1lTRVhJVCAoKHZvaWQgKilWU1lTQ0FMTDMyX0JBU0UgKyAweDQxMCkKKyNkZWZpbmUgVlNZU0NBTEwzMl9TSUdSRVRVUk4gKCh2b2lkIF9fdXNlciAqKVZTWVNDQUxMMzJfQkFTRSArIDB4NTAwKSAKKyNkZWZpbmUgVlNZU0NBTEwzMl9SVFNJR1JFVFVSTiAoKHZvaWQgX191c2VyICopVlNZU0NBTEwzMl9CQVNFICsgMHg2MDApIAorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L3hvci5oIGIvaW5jbHVkZS9hc20teDg2XzY0L3hvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5NDJmY2MKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQveG9yLmgKQEAgLTAsMCArMSwzNTQgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS14ODZfNjQveG9yLmgKKyAqCisgKiBPcHRpbWl6ZWQgUkFJRC01IGNoZWNrc3VtbWluZyBmdW5jdGlvbnMgZm9yIE1NWCBhbmQgU1NFLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIChmb3IgZXhhbXBsZSAvdXNyL3NyYy9saW51eC9DT1BZSU5HKTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworCisvKgorICogQ2FjaGUgYXZvaWRpbmcgY2hlY2tzdW1taW5nIGZ1bmN0aW9ucyB1dGlsaXppbmcgS05JIGluc3RydWN0aW9ucworICogQ29weXJpZ2h0IChDKSAxOTk5IFphY2ggQnJvd24gKHdpdGggb2J2aW91cyBjcmVkaXQgZHVlIEluZ28pCisgKi8KKworLyoKKyAqIEJhc2VkIG9uCisgKiBIaWdoLXNwZWVkIFJBSUQ1IGNoZWNrc3VtbWluZyBmdW5jdGlvbnMgdXRpbGl6aW5nIFNTRSBpbnN0cnVjdGlvbnMuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggSW5nbyBNb2xuYXIuCisgKi8KKworLyoKKyAqIHg4Ni02NCBjaGFuZ2VzIC8gZ2NjIGZpeGVzIGZyb20gQW5kaSBLbGVlbi4gCisgKiBDb3B5cmlnaHQgMjAwMiBBbmRpIEtsZWVuLCBTdVNFIExhYnMuCisgKgorICogVGhpcyBoYXNuJ3QgYmVlbiBvcHRpbWl6ZWQgZm9yIHRoZSBoYW1tZXIgeWV0LCBidXQgdGhlcmUgYXJlIGxpa2VseQorICogbm8gYWR2YW50YWdlcyB0byBiZSBnb3R0ZW4gZnJvbSB4ODYtNjQgaGVyZSBhbnl3YXlzLgorICovCisKK3R5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBhLGI7IH0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgxNikpKSB4bW1fc3RvcmVfdDsKKworLyogRG9lc24ndCB1c2UgZ2NjIHRvIHNhdmUgdGhlIFhNTSByZWdpc3RlcnMsIGJlY2F1c2UgdGhlcmUgaXMgbm8gZWFzeSB3YXkgdG8gCisgICB0ZWxsIGl0IHRvIGRvIGEgY2x0cyBiZWZvcmUgdGhlIHJlZ2lzdGVyIHNhdmluZy4gKi8KKyNkZWZpbmUgWE1NU19TQVZFIGRvIHsJCQkJXAorCXByZWVtcHRfZGlzYWJsZSgpOwkJCVwKKwlhc20gdm9sYXRpbGUgKAkJCQlcCisJCSJtb3ZxICUlY3IwLCUwCQk7XG5cdCIJXAorCQkiY2x0cwkJCTtcblx0IglcCisJCSJtb3Z1cHMgJSV4bW0wLCglMSkJO1xuXHQiCVwKKwkJIm1vdnVwcyAlJXhtbTEsMHgxMCglMSkJO1xuXHQiCVwKKwkJIm1vdnVwcyAlJXhtbTIsMHgyMCglMSkJO1xuXHQiCVwKKwkJIm1vdnVwcyAlJXhtbTMsMHgzMCglMSkJO1xuXHQiCVwKKwkJOiAiPSZyIiAoY3IwKQkJCVwKKwkJOiAiciIgKHhtbV9zYXZlKSAJCVwKKwkJOiAibWVtb3J5Iik7CQkJXAorfSB3aGlsZSgwKQorCisjZGVmaW5lIFhNTVNfUkVTVE9SRSBkbyB7CQkJXAorCWFzbSB2b2xhdGlsZSAoCQkJCVwKKwkJInNmZW5jZQkJCTtcblx0IglcCisJCSJtb3Z1cHMgKCUxKSwlJXhtbTAJO1xuXHQiCVwKKwkJIm1vdnVwcyAweDEwKCUxKSwlJXhtbTEJO1xuXHQiCVwKKwkJIm1vdnVwcyAweDIwKCUxKSwlJXhtbTIJO1xuXHQiCVwKKwkJIm1vdnVwcyAweDMwKCUxKSwlJXhtbTMJO1xuXHQiCVwKKwkJIm1vdnEgCSUwLCUlY3IwCTtcblx0IglcCisJCToJCQkJXAorCQk6ICJyIiAoY3IwKSwgInIiICh4bW1fc2F2ZSkJXAorCQk6ICJtZW1vcnkiKTsJCQlcCisJcHJlZW1wdF9lbmFibGUoKTsJCQlcCit9IHdoaWxlKDApCisKKyNkZWZpbmUgT0ZGUyh4KQkJIjE2KigiI3giKSIKKyNkZWZpbmUgUEZfT0ZGUyh4KQkiMjU2KzE2KigiI3giKSIKKyNkZWZpbmUJUEYwKHgpCQkiCXByZWZldGNobnRhICJQRl9PRkZTKHgpIiglW3AxXSkJCTtcbiIKKyNkZWZpbmUgTEQoeCx5KQkJIiAgICAgICBtb3ZhcHMgICAiT0ZGUyh4KSIoJVtwMV0pLCAlJXhtbSIjeSIJO1xuIgorI2RlZmluZSBTVCh4LHkpCQkiICAgICAgIG1vdmFwcyAlJXhtbSIjeSIsICAgIk9GRlMoeCkiKCVbcDFdKQk7XG4iCisjZGVmaW5lIFBGMSh4KQkJIglwcmVmZXRjaG50YSAiUEZfT0ZGUyh4KSIoJVtwMl0pCQk7XG4iCisjZGVmaW5lIFBGMih4KQkJIglwcmVmZXRjaG50YSAiUEZfT0ZGUyh4KSIoJVtwM10pCQk7XG4iCisjZGVmaW5lIFBGMyh4KQkJIglwcmVmZXRjaG50YSAiUEZfT0ZGUyh4KSIoJVtwNF0pCQk7XG4iCisjZGVmaW5lIFBGNCh4KQkJIglwcmVmZXRjaG50YSAiUEZfT0ZGUyh4KSIoJVtwNV0pCQk7XG4iCisjZGVmaW5lIFBGNSh4KQkJIglwcmVmZXRjaG50YSAiUEZfT0ZGUyh4KSIoJVtwNl0pCQk7XG4iCisjZGVmaW5lIFhPMSh4LHkpCSIgICAgICAgeG9ycHMgICAiT0ZGUyh4KSIoJVtwMl0pLCAlJXhtbSIjeSIJO1xuIgorI2RlZmluZSBYTzIoeCx5KQkiICAgICAgIHhvcnBzICAgIk9GRlMoeCkiKCVbcDNdKSwgJSV4bW0iI3kiCTtcbiIKKyNkZWZpbmUgWE8zKHgseSkJIiAgICAgICB4b3JwcyAgICJPRkZTKHgpIiglW3A0XSksICUleG1tIiN5Igk7XG4iCisjZGVmaW5lIFhPNCh4LHkpCSIgICAgICAgeG9ycHMgICAiT0ZGUyh4KSIoJVtwNV0pLCAlJXhtbSIjeSIJO1xuIgorI2RlZmluZSBYTzUoeCx5KQkiICAgICAgIHhvcnBzICAgIk9GRlMoeCkiKCVbcDZdKSwgJSV4bW0iI3kiCTtcbiIKKworCitzdGF0aWMgdm9pZAoreG9yX3NzZV8yKHVuc2lnbmVkIGxvbmcgYnl0ZXMsIHVuc2lnbmVkIGxvbmcgKnAxLCB1bnNpZ25lZCBsb25nICpwMikKK3sKKyAgICAgICAgdW5zaWduZWQgaW50IGxpbmVzID0gYnl0ZXMgPj4gODsKKwl1bnNpZ25lZCBsb25nIGNyMDsKKwl4bW1fc3RvcmVfdCB4bW1fc2F2ZVs0XTsKKworCVhNTVNfU0FWRTsKKworICAgICAgICBhc20gdm9sYXRpbGUgKAorI3VuZGVmIEJMT0NLCisjZGVmaW5lIEJMT0NLKGkpIFwKKwkJTEQoaSwwKQkJCQkJXAorCQkJTEQoaSsxLDEpCQkJXAorCQlQRjEoaSkJCQkJCVwKKwkJCQlQRjEoaSsyKQkJXAorCQkJCUxEKGkrMiwyKQkJXAorCQkJCQlMRChpKzMsMykJXAorCQlQRjAoaSs0KQkJCQlcCisJCQkJUEYwKGkrNikJCVwKKwkJWE8xKGksMCkJCQkJXAorCQkJWE8xKGkrMSwxKQkJCVwKKwkJCQlYTzEoaSsyLDIpCQlcCisJCQkJCVhPMShpKzMsMykJXAorCQlTVChpLDApCQkJCQlcCisJCQlTVChpKzEsMSkJCQlcCisJCQkJU1QoaSsyLDIpCQlcCisJCQkJCVNUKGkrMywzKQlcCisKKworCQlQRjAoMCkKKwkJCQlQRjAoMikKKworCSIgLmFsaWduIDMyCQkJO1xuIgorICAgICAgICAiIDE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcbiIKKworCQlCTE9DSygwKQorCQlCTE9DSyg0KQorCQlCTE9DSyg4KQorCQlCTE9DSygxMikKKworICAgICAgICAiICAgICAgIGFkZHEgJVtpbmNdLCAlW3AxXSAgICAgICAgICAgO1xuIgorICAgICAgICAiICAgICAgIGFkZHEgJVtpbmNdLCAlW3AyXSAgICAgICAgICAgO1xuIgorCQkiCQlkZWNsICVbY250XSA7IGpueiAxYiIKKwk6IFtwMV0gIityIiAocDEpLCBbcDJdICIrciIgKHAyKSwgW2NudF0gIityIiAobGluZXMpCisJOiBbaW5jXSAiciIgKDI1NlVMKSAKKyAgICAgICAgOiAibWVtb3J5Iik7CisKKwlYTU1TX1JFU1RPUkU7Cit9CisKK3N0YXRpYyB2b2lkCit4b3Jfc3NlXzModW5zaWduZWQgbG9uZyBieXRlcywgdW5zaWduZWQgbG9uZyAqcDEsIHVuc2lnbmVkIGxvbmcgKnAyLAorCSAgdW5zaWduZWQgbG9uZyAqcDMpCit7CisJdW5zaWduZWQgaW50IGxpbmVzID0gYnl0ZXMgPj4gODsKKwl4bW1fc3RvcmVfdCB4bW1fc2F2ZVs0XTsKKwl1bnNpZ25lZCBsb25nIGNyMDsKKworCVhNTVNfU0FWRTsKKworICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisjdW5kZWYgQkxPQ0sKKyNkZWZpbmUgQkxPQ0soaSkgXAorCQlQRjEoaSkJCQkJCVwKKwkJCQlQRjEoaSsyKQkJXAorCQlMRChpLDApCQkJCQlcCisJCQlMRChpKzEsMSkJCQlcCisJCQkJTEQoaSsyLDIpCQlcCisJCQkJCUxEKGkrMywzKQlcCisJCVBGMihpKQkJCQkJXAorCQkJCVBGMihpKzIpCQlcCisJCVBGMChpKzQpCQkJCVwKKwkJCQlQRjAoaSs2KQkJXAorCQlYTzEoaSwwKQkJCQlcCisJCQlYTzEoaSsxLDEpCQkJXAorCQkJCVhPMShpKzIsMikJCVwKKwkJCQkJWE8xKGkrMywzKQlcCisJCVhPMihpLDApCQkJCVwKKwkJCVhPMihpKzEsMSkJCQlcCisJCQkJWE8yKGkrMiwyKQkJXAorCQkJCQlYTzIoaSszLDMpCVwKKwkJU1QoaSwwKQkJCQkJXAorCQkJU1QoaSsxLDEpCQkJXAorCQkJCVNUKGkrMiwyKQkJXAorCQkJCQlTVChpKzMsMykJXAorCisKKwkJUEYwKDApCisJCQkJUEYwKDIpCisKKwkiIC5hbGlnbiAzMgkJCTtcbiIKKyAgICAgICAgIiAxOiAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG4iCisKKwkJQkxPQ0soMCkKKwkJQkxPQ0soNCkKKwkJQkxPQ0soOCkKKwkJQkxPQ0soMTIpCisKKyAgICAgICAgIiAgICAgICBhZGRxICVbaW5jXSwgJVtwMV0gICAgICAgICAgIDtcbiIKKyAgICAgICAgIiAgICAgICBhZGRxICVbaW5jXSwgJVtwMl0gICAgICAgICAgO1xuIgorICAgICAgICAiICAgICAgIGFkZHEgJVtpbmNdLCAlW3AzXSAgICAgICAgICAgO1xuIgorCQkiCQlkZWNsICVbY250XSA7IGpueiAxYiIKKwk6IFtjbnRdICIrciIgKGxpbmVzKSwKKwkgIFtwMV0gIityIiAocDEpLCBbcDJdICIrciIgKHAyKSwgW3AzXSAiK3IiIChwMykKKwk6IFtpbmNdICJyIiAoMjU2VUwpCisJOiAibWVtb3J5Iik7IAorCVhNTVNfUkVTVE9SRTsKK30KKworc3RhdGljIHZvaWQKK3hvcl9zc2VfNCh1bnNpZ25lZCBsb25nIGJ5dGVzLCB1bnNpZ25lZCBsb25nICpwMSwgdW5zaWduZWQgbG9uZyAqcDIsCisJICB1bnNpZ25lZCBsb25nICpwMywgdW5zaWduZWQgbG9uZyAqcDQpCit7CisJdW5zaWduZWQgaW50IGxpbmVzID0gYnl0ZXMgPj4gODsKKwl4bW1fc3RvcmVfdCB4bW1fc2F2ZVs0XTsgCisJdW5zaWduZWQgbG9uZyBjcjA7CisKKwlYTU1TX1NBVkU7CisKKyAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAorI3VuZGVmIEJMT0NLCisjZGVmaW5lIEJMT0NLKGkpIFwKKwkJUEYxKGkpCQkJCQlcCisJCQkJUEYxKGkrMikJCVwKKwkJTEQoaSwwKQkJCQkJXAorCQkJTEQoaSsxLDEpCQkJXAorCQkJCUxEKGkrMiwyKQkJXAorCQkJCQlMRChpKzMsMykJXAorCQlQRjIoaSkJCQkJCVwKKwkJCQlQRjIoaSsyKQkJXAorCQlYTzEoaSwwKQkJCQlcCisJCQlYTzEoaSsxLDEpCQkJXAorCQkJCVhPMShpKzIsMikJCVwKKwkJCQkJWE8xKGkrMywzKQlcCisJCVBGMyhpKQkJCQkJXAorCQkJCVBGMyhpKzIpCQlcCisJCVBGMChpKzQpCQkJCVwKKwkJCQlQRjAoaSs2KQkJXAorCQlYTzIoaSwwKQkJCQlcCisJCQlYTzIoaSsxLDEpCQkJXAorCQkJCVhPMihpKzIsMikJCVwKKwkJCQkJWE8yKGkrMywzKQlcCisJCVhPMyhpLDApCQkJCVwKKwkJCVhPMyhpKzEsMSkJCQlcCisJCQkJWE8zKGkrMiwyKQkJXAorCQkJCQlYTzMoaSszLDMpCVwKKwkJU1QoaSwwKQkJCQkJXAorCQkJU1QoaSsxLDEpCQkJXAorCQkJCVNUKGkrMiwyKQkJXAorCQkJCQlTVChpKzMsMykJXAorCisKKwkJUEYwKDApCisJCQkJUEYwKDIpCisKKwkiIC5hbGlnbiAzMgkJCTtcbiIKKyAgICAgICAgIiAxOiAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG4iCisKKwkJQkxPQ0soMCkKKwkJQkxPQ0soNCkKKwkJQkxPQ0soOCkKKwkJQkxPQ0soMTIpCisKKyAgICAgICAgIiAgICAgICBhZGRxICVbaW5jXSwgJVtwMV0gICAgICAgICAgIDtcbiIKKyAgICAgICAgIiAgICAgICBhZGRxICVbaW5jXSwgJVtwMl0gICAgICAgICAgIDtcbiIKKyAgICAgICAgIiAgICAgICBhZGRxICVbaW5jXSwgJVtwM10gICAgICAgICAgIDtcbiIKKyAgICAgICAgIiAgICAgICBhZGRxICVbaW5jXSwgJVtwNF0gICAgICAgICAgIDtcbiIKKwkiCWRlY2wgJVtjbnRdIDsgam56IDFiIgorCTogW2NudF0gIitjIiAobGluZXMpLAorCSAgW3AxXSAiK3IiIChwMSksIFtwMl0gIityIiAocDIpLCBbcDNdICIrciIgKHAzKSwgW3A0XSAiK3IiIChwNCkKKwk6IFtpbmNdICJyIiAoMjU2VUwpCisgICAgICAgIDogIm1lbW9yeSIgKTsKKworCVhNTVNfUkVTVE9SRTsKK30KKworc3RhdGljIHZvaWQKK3hvcl9zc2VfNSh1bnNpZ25lZCBsb25nIGJ5dGVzLCB1bnNpZ25lZCBsb25nICpwMSwgdW5zaWduZWQgbG9uZyAqcDIsCisJICB1bnNpZ25lZCBsb25nICpwMywgdW5zaWduZWQgbG9uZyAqcDQsIHVuc2lnbmVkIGxvbmcgKnA1KQoreworICAgICAgICB1bnNpZ25lZCBpbnQgbGluZXMgPSBieXRlcyA+PiA4OworCXhtbV9zdG9yZV90IHhtbV9zYXZlWzRdOworCXVuc2lnbmVkIGxvbmcgY3IwOworCisJWE1NU19TQVZFOworCisgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKKyN1bmRlZiBCTE9DSworI2RlZmluZSBCTE9DSyhpKSBcCisJCVBGMShpKQkJCQkJXAorCQkJCVBGMShpKzIpCQlcCisJCUxEKGksMCkJCQkJCVwKKwkJCUxEKGkrMSwxKQkJCVwKKwkJCQlMRChpKzIsMikJCVwKKwkJCQkJTEQoaSszLDMpCVwKKwkJUEYyKGkpCQkJCQlcCisJCQkJUEYyKGkrMikJCVwKKwkJWE8xKGksMCkJCQkJXAorCQkJWE8xKGkrMSwxKQkJCVwKKwkJCQlYTzEoaSsyLDIpCQlcCisJCQkJCVhPMShpKzMsMykJXAorCQlQRjMoaSkJCQkJCVwKKwkJCQlQRjMoaSsyKQkJXAorCQlYTzIoaSwwKQkJCQlcCisJCQlYTzIoaSsxLDEpCQkJXAorCQkJCVhPMihpKzIsMikJCVwKKwkJCQkJWE8yKGkrMywzKQlcCisJCVBGNChpKQkJCQkJXAorCQkJCVBGNChpKzIpCQlcCisJCVBGMChpKzQpCQkJCVwKKwkJCQlQRjAoaSs2KQkJXAorCQlYTzMoaSwwKQkJCQlcCisJCQlYTzMoaSsxLDEpCQkJXAorCQkJCVhPMyhpKzIsMikJCVwKKwkJCQkJWE8zKGkrMywzKQlcCisJCVhPNChpLDApCQkJCVwKKwkJCVhPNChpKzEsMSkJCQlcCisJCQkJWE80KGkrMiwyKQkJXAorCQkJCQlYTzQoaSszLDMpCVwKKwkJU1QoaSwwKQkJCQkJXAorCQkJU1QoaSsxLDEpCQkJXAorCQkJCVNUKGkrMiwyKQkJXAorCQkJCQlTVChpKzMsMykJXAorCisKKwkJUEYwKDApCisJCQkJUEYwKDIpCisKKwkiIC5hbGlnbiAzMgkJCTtcbiIKKyAgICAgICAgIiAxOiAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG4iCisKKwkJQkxPQ0soMCkKKwkJQkxPQ0soNCkKKwkJQkxPQ0soOCkKKwkJQkxPQ0soMTIpCisKKyAgICAgICAgIiAgICAgICBhZGRxICVbaW5jXSwgJVtwMV0gICAgICAgICAgIDtcbiIKKyAgICAgICAgIiAgICAgICBhZGRxICVbaW5jXSwgJVtwMl0gICAgICAgICAgIDtcbiIKKyAgICAgICAgIiAgICAgICBhZGRxICVbaW5jXSwgJVtwM10gICAgICAgICAgIDtcbiIKKyAgICAgICAgIiAgICAgICBhZGRxICVbaW5jXSwgJVtwNF0gICAgICAgICAgIDtcbiIKKyAgICAgICAgIiAgICAgICBhZGRxICVbaW5jXSwgJVtwNV0gICAgICAgICAgIDtcbiIKKwkiCWRlY2wgJVtjbnRdIDsgam56IDFiIgorCTogW2NudF0gIitjIiAobGluZXMpLAorICAJICBbcDFdICIrciIgKHAxKSwgW3AyXSAiK3IiIChwMiksIFtwM10gIityIiAocDMpLCBbcDRdICIrciIgKHA0KSwgCisJICBbcDVdICIrciIgKHA1KQorCTogW2luY10gInIiICgyNTZVTCkKKwk6ICJtZW1vcnkiKTsKKworCVhNTVNfUkVTVE9SRTsKK30KKworc3RhdGljIHN0cnVjdCB4b3JfYmxvY2tfdGVtcGxhdGUgeG9yX2Jsb2NrX3NzZSA9IHsKKyAgICAgICAgLm5hbWUgPSAiZ2VuZXJpY19zc2UiLAorICAgICAgICAuZG9fMiA9IHhvcl9zc2VfMiwKKyAgICAgICAgLmRvXzMgPSB4b3Jfc3NlXzMsCisgICAgICAgIC5kb180ID0geG9yX3NzZV80LAorICAgICAgICAuZG9fNSA9IHhvcl9zc2VfNSwKK307CisKKyN1bmRlZiBYT1JfVFJZX1RFTVBMQVRFUworI2RlZmluZSBYT1JfVFJZX1RFTVBMQVRFUwkJCQlcCisJZG8gewkJCQkJCVwKKwkJeG9yX3NwZWVkKCZ4b3JfYmxvY2tfc3NlKTsJXAorCX0gd2hpbGUgKDApCisKKy8qIFdlIGZvcmNlIHRoZSB1c2Ugb2YgdGhlIFNTRSB4b3IgYmxvY2sgYmVjYXVzZSBpdCBjYW4gd3JpdGUgYXJvdW5kIEwyLgorICAgV2UgbWF5IGFsc28gYmUgYWJsZSB0byBsb2FkIGludG8gdGhlIEwxIG9ubHkgZGVwZW5kaW5nIG9uIGhvdyB0aGUgY3B1CisgICBkZWFscyB3aXRoIGEgbG9hZCB0byBhIGxpbmUgdGhhdCBpcyBiZWluZyBwcmVmZXRjaGVkLiAgKi8KKyNkZWZpbmUgWE9SX1NFTEVDVF9URU1QTEFURShGQVNURVNUKSAoJnhvcl9ibG9ja19zc2UpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4LzgyNTBfcGNpLmggYi9pbmNsdWRlL2xpbnV4LzgyNTBfcGNpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWYzYWIyMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvODI1MF9wY2kuaApAQCAtMCwwICsxLDIgQEAKK2ludCBwY2lfc2lpZzEweF9mbihzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgZW5hYmxlKTsKK2ludCBwY2lfc2lpZzIweF9mbihzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgZW5hYmxlKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYS5vdXQuaCBiL2luY2x1ZGUvbGludXgvYS5vdXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjhhMWRmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9hLm91dC5oCkBAIC0wLDAgKzEsMjY4IEBACisjaWZuZGVmIF9fQV9PVVRfR05VX0hfXworI2RlZmluZSBfX0FfT1VUX0dOVV9IX18KKworI2RlZmluZSBfX0dOVV9FWEVDX01BQ1JPU19fCisKKyNpZm5kZWYgX19TVFJVQ1RfRVhFQ19PVkVSUklERV9fCisKKyNpbmNsdWRlIDxhc20vYS5vdXQuaD4KKworI2VuZGlmIC8qIF9fU1RSVUNUX0VYRUNfT1ZFUlJJREVfXyAqLworCisvKiB0aGVzZSBnbyBpbiB0aGUgTl9NQUNIVFlQRSBmaWVsZCAqLworZW51bSBtYWNoaW5lX3R5cGUgeworI2lmIGRlZmluZWQgKE1fT0xEU1VOMikKKyAgTV9fT0xEU1VOMiA9IE1fT0xEU1VOMiwKKyNlbHNlCisgIE1fT0xEU1VOMiA9IDAsCisjZW5kaWYKKyNpZiBkZWZpbmVkIChNXzY4MDEwKQorICBNX182ODAxMCA9IE1fNjgwMTAsCisjZWxzZQorICBNXzY4MDEwID0gMSwKKyNlbmRpZgorI2lmIGRlZmluZWQgKE1fNjgwMjApCisgIE1fXzY4MDIwID0gTV82ODAyMCwKKyNlbHNlCisgIE1fNjgwMjAgPSAyLAorI2VuZGlmCisjaWYgZGVmaW5lZCAoTV9TUEFSQykKKyAgTV9fU1BBUkMgPSBNX1NQQVJDLAorI2Vsc2UKKyAgTV9TUEFSQyA9IDMsCisjZW5kaWYKKyAgLyogc2tpcCBhIGJ1bmNoIHNvIHdlIGRvbid0IHJ1biBpbnRvIGFueSBvZiBzdW4ncyBudW1iZXJzICovCisgIE1fMzg2ID0gMTAwLAorICBNX01JUFMxID0gMTUxLAkvKiBNSVBTIFIzMDAwL1IzMDAwIGJpbmFyeSAqLworICBNX01JUFMyID0gMTUyCQkvKiBNSVBTIFI2MDAwL1I0MDAwIGJpbmFyeSAqLworfTsKKworI2lmICFkZWZpbmVkIChOX01BR0lDKQorI2RlZmluZSBOX01BR0lDKGV4ZWMpICgoZXhlYykuYV9pbmZvICYgMHhmZmZmKQorI2VuZGlmCisjZGVmaW5lIE5fTUFDSFRZUEUoZXhlYykgKChlbnVtIG1hY2hpbmVfdHlwZSkoKChleGVjKS5hX2luZm8gPj4gMTYpICYgMHhmZikpCisjZGVmaW5lIE5fRkxBR1MoZXhlYykgKCgoZXhlYykuYV9pbmZvID4+IDI0KSAmIDB4ZmYpCisjZGVmaW5lIE5fU0VUX0lORk8oZXhlYywgbWFnaWMsIHR5cGUsIGZsYWdzKSBcCisJKChleGVjKS5hX2luZm8gPSAoKG1hZ2ljKSAmIDB4ZmZmZikgXAorCSB8ICgoKGludCkodHlwZSkgJiAweGZmKSA8PCAxNikgXAorCSB8ICgoKGZsYWdzKSAmIDB4ZmYpIDw8IDI0KSkKKyNkZWZpbmUgTl9TRVRfTUFHSUMoZXhlYywgbWFnaWMpIFwKKwkoKGV4ZWMpLmFfaW5mbyA9ICgoKGV4ZWMpLmFfaW5mbyAmIDB4ZmZmZjAwMDApIHwgKChtYWdpYykgJiAweGZmZmYpKSkKKworI2RlZmluZSBOX1NFVF9NQUNIVFlQRShleGVjLCBtYWNodHlwZSkgXAorCSgoZXhlYykuYV9pbmZvID0gXAorCSAoKGV4ZWMpLmFfaW5mbyYweGZmMDBmZmZmKSB8ICgoKChpbnQpKG1hY2h0eXBlKSkmMHhmZikgPDwgMTYpKQorCisjZGVmaW5lIE5fU0VUX0ZMQUdTKGV4ZWMsIGZsYWdzKSBcCisJKChleGVjKS5hX2luZm8gPSBcCisJICgoZXhlYykuYV9pbmZvJjB4MDBmZmZmZmYpIHwgKCgoZmxhZ3MpICYgMHhmZikgPDwgMjQpKQorCisvKiBDb2RlIGluZGljYXRpbmcgb2JqZWN0IGZpbGUgb3IgaW1wdXJlIGV4ZWN1dGFibGUuICAqLworI2RlZmluZSBPTUFHSUMgMDQwNworLyogQ29kZSBpbmRpY2F0aW5nIHB1cmUgZXhlY3V0YWJsZS4gICovCisjZGVmaW5lIE5NQUdJQyAwNDEwCisvKiBDb2RlIGluZGljYXRpbmcgZGVtYW5kLXBhZ2VkIGV4ZWN1dGFibGUuICAqLworI2RlZmluZSBaTUFHSUMgMDQxMworLyogVGhpcyBpbmRpY2F0ZXMgYSBkZW1hbmQtcGFnZWQgZXhlY3V0YWJsZSB3aXRoIHRoZSBoZWFkZXIgaW4gdGhlIHRleHQuIAorICAgVGhlIGZpcnN0IHBhZ2UgaXMgdW5tYXBwZWQgdG8gaGVscCB0cmFwIE5VTEwgcG9pbnRlciByZWZlcmVuY2VzICovCisjZGVmaW5lIFFNQUdJQyAwMzE0CisKKy8qIENvZGUgaW5kaWNhdGluZyBjb3JlIGZpbGUuICAqLworI2RlZmluZSBDTUFHSUMgMDQyMQorCisjaWYgIWRlZmluZWQgKE5fQkFETUFHKQorI2RlZmluZSBOX0JBRE1BRyh4KQkgIChOX01BR0lDKHgpICE9IE9NQUdJQwkJXAorCQkJJiYgTl9NQUdJQyh4KSAhPSBOTUFHSUMJCVwKKyAgCQkJJiYgTl9NQUdJQyh4KSAhPSBaTUFHSUMgXAorCQkgICAgICAgICYmIE5fTUFHSUMoeCkgIT0gUU1BR0lDKQorI2VuZGlmCisKKyNkZWZpbmUgX05fSERST0ZGKHgpICgxMDI0IC0gc2l6ZW9mIChzdHJ1Y3QgZXhlYykpCisKKyNpZiAhZGVmaW5lZCAoTl9UWFRPRkYpCisjZGVmaW5lIE5fVFhUT0ZGKHgpIFwKKyAoTl9NQUdJQyh4KSA9PSBaTUFHSUMgPyBfTl9IRFJPRkYoKHgpKSArIHNpemVvZiAoc3RydWN0IGV4ZWMpIDogXAorICAoTl9NQUdJQyh4KSA9PSBRTUFHSUMgPyAwIDogc2l6ZW9mIChzdHJ1Y3QgZXhlYykpKQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZCAoTl9EQVRPRkYpCisjZGVmaW5lIE5fREFUT0ZGKHgpIChOX1RYVE9GRih4KSArICh4KS5hX3RleHQpCisjZW5kaWYKKworI2lmICFkZWZpbmVkIChOX1RSRUxPRkYpCisjZGVmaW5lIE5fVFJFTE9GRih4KSAoTl9EQVRPRkYoeCkgKyAoeCkuYV9kYXRhKQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZCAoTl9EUkVMT0ZGKQorI2RlZmluZSBOX0RSRUxPRkYoeCkgKE5fVFJFTE9GRih4KSArIE5fVFJTSVpFKHgpKQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZCAoTl9TWU1PRkYpCisjZGVmaW5lIE5fU1lNT0ZGKHgpIChOX0RSRUxPRkYoeCkgKyBOX0RSU0laRSh4KSkKKyNlbmRpZgorCisjaWYgIWRlZmluZWQgKE5fU1RST0ZGKQorI2RlZmluZSBOX1NUUk9GRih4KSAoTl9TWU1PRkYoeCkgKyBOX1NZTVNJWkUoeCkpCisjZW5kaWYKKworLyogQWRkcmVzcyBvZiB0ZXh0IHNlZ21lbnQgaW4gbWVtb3J5IGFmdGVyIGl0IGlzIGxvYWRlZC4gICovCisjaWYgIWRlZmluZWQgKE5fVFhUQUREUikKKyNkZWZpbmUgTl9UWFRBRERSKHgpIChOX01BR0lDKHgpID09IFFNQUdJQyA/IFBBR0VfU0laRSA6IDApCisjZW5kaWYKKworLyogQWRkcmVzcyBvZiBkYXRhIHNlZ21lbnQgaW4gbWVtb3J5IGFmdGVyIGl0IGlzIGxvYWRlZC4KKyAgIE5vdGUgdGhhdCBpdCBpcyB1cCB0byB5b3UgdG8gZGVmaW5lIFNFR01FTlRfU0laRQorICAgb24gbWFjaGluZXMgbm90IGxpc3RlZCBoZXJlLiAgKi8KKyNpZiBkZWZpbmVkKHZheCkgfHwgZGVmaW5lZChocDMwMCkgfHwgZGVmaW5lZChweXIpCisjZGVmaW5lIFNFR01FTlRfU0laRSBwYWdlX3NpemUKKyNlbmRpZgorI2lmZGVmCXNvbnkKKyNkZWZpbmUJU0VHTUVOVF9TSVpFCTB4MjAwMAorI2VuZGlmCS8qIFNvbnkuICAqLworI2lmZGVmIGlzNjhrCisjZGVmaW5lIFNFR01FTlRfU0laRSAweDIwMDAwCisjZW5kaWYKKyNpZiBkZWZpbmVkKG02OGspICYmIGRlZmluZWQoUE9SVEFSKQorI2RlZmluZSBQQUdFX1NJWkUgMHg0MDAKKyNkZWZpbmUgU0VHTUVOVF9TSVpFIFBBR0VfU0laRQorI2VuZGlmCisKKyNpZmRlZiBsaW51eAorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX21jNjgwMDBfXykKKyNkZWZpbmUgU0VHTUVOVF9TSVpFCTEwMjQKKyNlbHNlCisjaWZuZGVmIFNFR01FTlRfU0laRQorI2RlZmluZSBTRUdNRU5UX1NJWkUJUEFHRV9TSVpFCisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisKKyNkZWZpbmUgX05fU0VHTUVOVF9ST1VORCh4KSAoKCh4KSArIFNFR01FTlRfU0laRSAtIDEpICYgfihTRUdNRU5UX1NJWkUgLSAxKSkKKworI2RlZmluZSBfTl9UWFRFTkRBRERSKHgpIChOX1RYVEFERFIoeCkrKHgpLmFfdGV4dCkKKworI2lmbmRlZiBOX0RBVEFERFIKKyNkZWZpbmUgTl9EQVRBRERSKHgpIFwKKyAgICAoTl9NQUdJQyh4KT09T01BR0lDPyAoX05fVFhURU5EQUREUih4KSkgXAorICAgICA6IChfTl9TRUdNRU5UX1JPVU5EIChfTl9UWFRFTkRBRERSKHgpKSkpCisjZW5kaWYKKworLyogQWRkcmVzcyBvZiBic3Mgc2VnbWVudCBpbiBtZW1vcnkgYWZ0ZXIgaXQgaXMgbG9hZGVkLiAgKi8KKyNpZiAhZGVmaW5lZCAoTl9CU1NBRERSKQorI2RlZmluZSBOX0JTU0FERFIoeCkgKE5fREFUQUREUih4KSArICh4KS5hX2RhdGEpCisjZW5kaWYKKwwKKyNpZiAhZGVmaW5lZCAoTl9OTElTVF9ERUNMQVJFRCkKK3N0cnVjdCBubGlzdCB7CisgIHVuaW9uIHsKKyAgICBjaGFyICpuX25hbWU7CisgICAgc3RydWN0IG5saXN0ICpuX25leHQ7CisgICAgbG9uZyBuX3N0cng7CisgIH0gbl91bjsKKyAgdW5zaWduZWQgY2hhciBuX3R5cGU7CisgIGNoYXIgbl9vdGhlcjsKKyAgc2hvcnQgbl9kZXNjOworICB1bnNpZ25lZCBsb25nIG5fdmFsdWU7Cit9OworI2VuZGlmIC8qIG5vIE5fTkxJU1RfREVDTEFSRUQuICAqLworCisjaWYgIWRlZmluZWQgKE5fVU5ERikKKyNkZWZpbmUgTl9VTkRGIDAKKyNlbmRpZgorI2lmICFkZWZpbmVkIChOX0FCUykKKyNkZWZpbmUgTl9BQlMgMgorI2VuZGlmCisjaWYgIWRlZmluZWQgKE5fVEVYVCkKKyNkZWZpbmUgTl9URVhUIDQKKyNlbmRpZgorI2lmICFkZWZpbmVkIChOX0RBVEEpCisjZGVmaW5lIE5fREFUQSA2CisjZW5kaWYKKyNpZiAhZGVmaW5lZCAoTl9CU1MpCisjZGVmaW5lIE5fQlNTIDgKKyNlbmRpZgorI2lmICFkZWZpbmVkIChOX0ZOKQorI2RlZmluZSBOX0ZOIDE1CisjZW5kaWYKKworI2lmICFkZWZpbmVkIChOX0VYVCkKKyNkZWZpbmUgTl9FWFQgMQorI2VuZGlmCisjaWYgIWRlZmluZWQgKE5fVFlQRSkKKyNkZWZpbmUgTl9UWVBFIDAzNgorI2VuZGlmCisjaWYgIWRlZmluZWQgKE5fU1RBQikKKyNkZWZpbmUgTl9TVEFCIDAzNDAKKyNlbmRpZgorCisvKiBUaGUgZm9sbG93aW5nIHR5cGUgaW5kaWNhdGVzIHRoZSBkZWZpbml0aW9uIG9mIGEgc3ltYm9sIGFzIGJlaW5nCisgICBhbiBpbmRpcmVjdCByZWZlcmVuY2UgdG8gYW5vdGhlciBzeW1ib2wuICBUaGUgb3RoZXIgc3ltYm9sCisgICBhcHBlYXJzIGFzIGFuIHVuZGVmaW5lZCByZWZlcmVuY2UsIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGlzIHN5bWJvbC4KKworICAgSW5kaXJlY3Rpb24gaXMgYXN5bW1ldHJpY2FsLiAgVGhlIG90aGVyIHN5bWJvbCdzIHZhbHVlIHdpbGwgYmUgdXNlZAorICAgdG8gc2F0aXNmeSByZXF1ZXN0cyBmb3IgdGhlIGluZGlyZWN0IHN5bWJvbCwgYnV0IG5vdCB2aWNlIHZlcnNhLgorICAgSWYgdGhlIG90aGVyIHN5bWJvbCBkb2VzIG5vdCBoYXZlIGEgZGVmaW5pdGlvbiwgbGlicmFyaWVzIHdpbGwKKyAgIGJlIHNlYXJjaGVkIHRvIGZpbmQgYSBkZWZpbml0aW9uLiAgKi8KKyNkZWZpbmUgTl9JTkRSIDB4YQorCisvKiBUaGUgZm9sbG93aW5nIHN5bWJvbHMgcmVmZXIgdG8gc2V0IGVsZW1lbnRzLgorICAgQWxsIHRoZSBOX1NFVFtBVERCXSBzeW1ib2xzIHdpdGggdGhlIHNhbWUgbmFtZSBmb3JtIG9uZSBzZXQuCisgICBTcGFjZSBpcyBhbGxvY2F0ZWQgZm9yIHRoZSBzZXQgaW4gdGhlIHRleHQgc2VjdGlvbiwgYW5kIGVhY2ggc2V0CisgICBlbGVtZW50J3MgdmFsdWUgaXMgc3RvcmVkIGludG8gb25lIHdvcmQgb2YgdGhlIHNwYWNlLgorICAgVGhlIGZpcnN0IHdvcmQgb2YgdGhlIHNwYWNlIGlzIHRoZSBsZW5ndGggb2YgdGhlIHNldCAobnVtYmVyIG9mIGVsZW1lbnRzKS4KKworICAgVGhlIGFkZHJlc3Mgb2YgdGhlIHNldCBpcyBtYWRlIGludG8gYW4gTl9TRVRWIHN5bWJvbAorICAgd2hvc2UgbmFtZSBpcyB0aGUgc2FtZSBhcyB0aGUgbmFtZSBvZiB0aGUgc2V0LgorICAgVGhpcyBzeW1ib2wgYWN0cyBsaWtlIGEgTl9EQVRBIGdsb2JhbCBzeW1ib2wKKyAgIGluIHRoYXQgaXQgY2FuIHNhdGlzZnkgdW5kZWZpbmVkIGV4dGVybmFsIHJlZmVyZW5jZXMuICAqLworCisvKiBUaGVzZSBhcHBlYXIgYXMgaW5wdXQgdG8gTEQsIGluIGEgLm8gZmlsZS4gICovCisjZGVmaW5lCU5fU0VUQQkweDE0CQkvKiBBYnNvbHV0ZSBzZXQgZWxlbWVudCBzeW1ib2wgKi8KKyNkZWZpbmUJTl9TRVRUCTB4MTYJCS8qIFRleHQgc2V0IGVsZW1lbnQgc3ltYm9sICovCisjZGVmaW5lCU5fU0VURAkweDE4CQkvKiBEYXRhIHNldCBlbGVtZW50IHN5bWJvbCAqLworI2RlZmluZQlOX1NFVEIJMHgxQQkJLyogQnNzIHNldCBlbGVtZW50IHN5bWJvbCAqLworCisvKiBUaGlzIGlzIG91dHB1dCBmcm9tIExELiAgKi8KKyNkZWZpbmUgTl9TRVRWCTB4MUMJCS8qIFBvaW50ZXIgdG8gc2V0IHZlY3RvciBpbiBkYXRhIGFyZWEuICAqLworDAorI2lmICFkZWZpbmVkIChOX1JFTE9DQVRJT05fSU5GT19ERUNMQVJFRCkKKy8qIFRoaXMgc3RydWN0dXJlIGRlc2NyaWJlcyBhIHNpbmdsZSByZWxvY2F0aW9uIHRvIGJlIHBlcmZvcm1lZC4KKyAgIFRoZSB0ZXh0LXJlbG9jYXRpb24gc2VjdGlvbiBvZiB0aGUgZmlsZSBpcyBhIHZlY3RvciBvZiB0aGVzZSBzdHJ1Y3R1cmVzLAorICAgYWxsIG9mIHdoaWNoIGFwcGx5IHRvIHRoZSB0ZXh0IHNlY3Rpb24uCisgICBMaWtld2lzZSwgdGhlIGRhdGEtcmVsb2NhdGlvbiBzZWN0aW9uIGFwcGxpZXMgdG8gdGhlIGRhdGEgc2VjdGlvbi4gICovCisKK3N0cnVjdCByZWxvY2F0aW9uX2luZm8KK3sKKyAgLyogQWRkcmVzcyAod2l0aGluIHNlZ21lbnQpIHRvIGJlIHJlbG9jYXRlZC4gICovCisgIGludCByX2FkZHJlc3M7CisgIC8qIFRoZSBtZWFuaW5nIG9mIHJfc3ltYm9sbnVtIGRlcGVuZHMgb24gcl9leHRlcm4uICAqLworICB1bnNpZ25lZCBpbnQgcl9zeW1ib2xudW06MjQ7CisgIC8qIE5vbnplcm8gbWVhbnMgdmFsdWUgaXMgYSBwYy1yZWxhdGl2ZSBvZmZzZXQKKyAgICAgYW5kIGl0IHNob3VsZCBiZSByZWxvY2F0ZWQgZm9yIGNoYW5nZXMgaW4gaXRzIG93biBhZGRyZXNzCisgICAgIGFzIHdlbGwgYXMgZm9yIGNoYW5nZXMgaW4gdGhlIHN5bWJvbCBvciBzZWN0aW9uIHNwZWNpZmllZC4gICovCisgIHVuc2lnbmVkIGludCByX3BjcmVsOjE7CisgIC8qIExlbmd0aCAoYXMgZXhwb25lbnQgb2YgMikgb2YgdGhlIGZpZWxkIHRvIGJlIHJlbG9jYXRlZC4KKyAgICAgVGh1cywgYSB2YWx1ZSBvZiAyIGluZGljYXRlcyAxPDwyIGJ5dGVzLiAgKi8KKyAgdW5zaWduZWQgaW50IHJfbGVuZ3RoOjI7CisgIC8qIDEgPT4gcmVsb2NhdGUgd2l0aCB2YWx1ZSBvZiBzeW1ib2wuCisgICAgICAgICAgcl9zeW1ib2xudW0gaXMgdGhlIGluZGV4IG9mIHRoZSBzeW1ib2wKKwkgIGluIGZpbGUncyB0aGUgc3ltYm9sIHRhYmxlLgorICAgICAwID0+IHJlbG9jYXRlIHdpdGggdGhlIGFkZHJlc3Mgb2YgYSBzZWdtZW50LgorICAgICAgICAgIHJfc3ltYm9sbnVtIGlzIE5fVEVYVCwgTl9EQVRBLCBOX0JTUyBvciBOX0FCUworCSAgKHRoZSBOX0VYVCBiaXQgbWF5IGJlIHNldCBhbHNvLCBidXQgc2lnbmlmaWVzIG5vdGhpbmcpLiAgKi8KKyAgdW5zaWduZWQgaW50IHJfZXh0ZXJuOjE7CisgIC8qIEZvdXIgYml0cyB0aGF0IGFyZW4ndCB1c2VkLCBidXQgd2hlbiB3cml0aW5nIGFuIG9iamVjdCBmaWxlCisgICAgIGl0IGlzIGRlc2lyYWJsZSB0byBjbGVhciB0aGVtLiAgKi8KKyNpZmRlZiBOUzMySworICB1bnNpZ25lZCByX2JzcjoxOworICB1bnNpZ25lZCByX2Rpc3A6MTsKKyAgdW5zaWduZWQgcl9wYWQ6MjsKKyNlbHNlCisgIHVuc2lnbmVkIGludCByX3BhZDo0OworI2VuZGlmCit9OworI2VuZGlmIC8qIG5vIE5fUkVMT0NBVElPTl9JTkZPX0RFQ0xBUkVELiAgKi8KKworCisjZW5kaWYgLyogX19BX09VVF9HTlVfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2FjOTdfY29kZWMuaCBiL2luY2x1ZGUvbGludXgvYWM5N19jb2RlYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNTgzMzgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2FjOTdfY29kZWMuaApAQCAtMCwwICsxLDM3NCBAQAorI2lmbmRlZiBfQUM5N19DT0RFQ19IXworI2RlZmluZSBfQUM5N19DT0RFQ19IXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zb3VuZGNhcmQuaD4KKworLyogQUM5NyAxLjAgKi8KKyNkZWZpbmUgIEFDOTdfUkVTRVQgICAgICAgICAgICAgICAweDAwMDAgICAgICAvLworI2RlZmluZSAgQUM5N19NQVNURVJfVk9MX1NURVJFTyAgIDB4MDAwMiAgICAgIC8vIExpbmUgT3V0CisjZGVmaW5lICBBQzk3X0hFQURQSE9ORV9WT0wgICAgICAgMHgwMDA0ICAgICAgLy8gCisjZGVmaW5lICBBQzk3X01BU1RFUl9WT0xfTU9OTyAgICAgMHgwMDA2ICAgICAgLy8gVEFEIE91dHB1dAorI2RlZmluZSAgQUM5N19NQVNURVJfVE9ORSAgICAgICAgIDB4MDAwOCAgICAgIC8vCisjZGVmaW5lICBBQzk3X1BDQkVFUF9WT0wgICAgICAgICAgMHgwMDBhICAgICAgLy8gbm9uZQorI2RlZmluZSAgQUM5N19QSE9ORV9WT0wgICAgICAgICAgIDB4MDAwYyAgICAgIC8vIFRBRCBJbnB1dCAobW9ubykKKyNkZWZpbmUgIEFDOTdfTUlDX1ZPTCAgICAgICAgICAgICAweDAwMGUgICAgICAvLyBNSUMgSW5wdXQgKG1vbm8pCisjZGVmaW5lICBBQzk3X0xJTkVJTl9WT0wgICAgICAgICAgMHgwMDEwICAgICAgLy8gTGluZSBJbnB1dCAoc3RlcmVvKQorI2RlZmluZSAgQUM5N19DRF9WT0wgICAgICAgICAgICAgIDB4MDAxMiAgICAgIC8vIENEIElucHV0IChzdGVyZW8pCisjZGVmaW5lICBBQzk3X1ZJREVPX1ZPTCAgICAgICAgICAgMHgwMDE0ICAgICAgLy8gbm9uZQorI2RlZmluZSAgQUM5N19BVVhfVk9MICAgICAgICAgICAgIDB4MDAxNiAgICAgIC8vIEF1eCBJbnB1dCAoc3RlcmVvKQorI2RlZmluZSAgQUM5N19QQ01PVVRfVk9MICAgICAgICAgIDB4MDAxOCAgICAgIC8vIFdhdmUgT3V0cHV0IChzdGVyZW8pCisjZGVmaW5lICBBQzk3X1JFQ09SRF9TRUxFQ1QgICAgICAgMHgwMDFhICAgICAgLy8KKyNkZWZpbmUgIEFDOTdfUkVDT1JEX0dBSU4gICAgICAgICAweDAwMWMKKyNkZWZpbmUgIEFDOTdfUkVDT1JEX0dBSU5fTUlDICAgICAweDAwMWUKKyNkZWZpbmUgIEFDOTdfR0VORVJBTF9QVVJQT1NFICAgICAweDAwMjAKKyNkZWZpbmUgIEFDOTdfM0RfQ09OVFJPTCAgICAgICAgICAweDAwMjIKKyNkZWZpbmUgIEFDOTdfTU9ERU1fUkFURSAgICAgICAgICAweDAwMjQKKyNkZWZpbmUgIEFDOTdfUE9XRVJfQ09OVFJPTCAgICAgICAweDAwMjYKKworLyogQUMnOTcgMi4wICovCisjZGVmaW5lIEFDOTdfRVhURU5ERURfSUQgICAgICAgICAgMHgwMDI4ICAgICAgIC8qIEV4dGVuZGVkIEF1ZGlvIElEICovCisjZGVmaW5lIEFDOTdfRVhURU5ERURfU1RBVFVTICAgICAgMHgwMDJBICAgICAgIC8qIEV4dGVuZGVkIEF1ZGlvIFN0YXR1cyAqLworI2RlZmluZSBBQzk3X1BDTV9GUk9OVF9EQUNfUkFURSAgIDB4MDAyQyAgICAgICAvKiBQQ00gRnJvbnQgREFDIFJhdGUgKi8KKyNkZWZpbmUgQUM5N19QQ01fU1VSUl9EQUNfUkFURSAgICAweDAwMkUgICAgICAgLyogUENNIFN1cnJvdW5kIERBQyBSYXRlICovCisjZGVmaW5lIEFDOTdfUENNX0xGRV9EQUNfUkFURSAgICAgMHgwMDMwICAgICAgIC8qIFBDTSBMRkUgREFDIFJhdGUgKi8KKyNkZWZpbmUgQUM5N19QQ01fTFJfQURDX1JBVEUgICAgICAweDAwMzIgICAgICAgLyogUENNIExSIEFEQyBSYXRlICovCisjZGVmaW5lIEFDOTdfUENNX01JQ19BRENfUkFURSAgICAgMHgwMDM0ICAgICAgIC8qIFBDTSBNSUMgQURDIFJhdGUgKi8KKyNkZWZpbmUgQUM5N19DRU5URVJfTEZFX01BU1RFUiAgICAweDAwMzYgICAgICAgLyogQ2VudGVyICsgTEZFIE1hc3RlciBWb2x1bWUgKi8KKyNkZWZpbmUgQUM5N19TVVJST1VORF9NQVNURVIgICAgICAweDAwMzggICAgICAgLyogU3Vycm91bmQgKFJlYXIpIE1hc3RlciBWb2x1bWUgKi8KKyNkZWZpbmUgQUM5N19SRVNFUlZFRF8zQSAgICAgICAgICAweDAwM0EgICAgICAgLyogUmVzZXJ2ZWQgaW4gQUMgJzk3IDwgMi4yICovCisKKy8qIEFDJzk3IDIuMiAqLworI2RlZmluZSBBQzk3X1NQRElGX0NPTlRST0wgICAgICAgIDB4MDAzQSAgICAgICAvKiBTL1BESUYgQ29udHJvbCAqLworCisvKiByYW5nZSAweDNjLTB4NTggLSBNT0RFTSAqLworI2RlZmluZSBBQzk3X0VYVEVOREVEX01PREVNX0lEICAgIDB4MDAzQworI2RlZmluZSBBQzk3X0VYVEVORF9NT0RFTV9TVEFUICAgIDB4MDAzRQorI2RlZmluZSBBQzk3X0xJTkUxX1JBVEUgICAgICAgICAgIDB4MDA0MAorI2RlZmluZSBBQzk3X0xJTkUyX1JBVEUgICAgICAgICAgIDB4MDA0MgorI2RlZmluZSBBQzk3X0hBTkRTRVRfUkFURSAgICAgICAgIDB4MDA0NAorI2RlZmluZSBBQzk3X0xJTkUxX0xFVkVMICAgICAgICAgIDB4MDA0NgorI2RlZmluZSBBQzk3X0xJTkUyX0xFVkVMICAgICAgICAgIDB4MDA0OAorI2RlZmluZSBBQzk3X0hBTkRTRVRfTEVWRUwgICAgICAgIDB4MDA0QQorI2RlZmluZSBBQzk3X0dQSU9fQ09ORklHICAgICAgICAgIDB4MDA0QworI2RlZmluZSBBQzk3X0dQSU9fUE9MQVJJVFkgICAgICAgIDB4MDA0RQorI2RlZmluZSBBQzk3X0dQSU9fU1RJQ0tZICAgICAgICAgIDB4MDA1MAorI2RlZmluZSBBQzk3X0dQSU9fV0FLRV9VUCAgICAgICAgIDB4MDA1MgorI2RlZmluZSBBQzk3X0dQSU9fU1RBVFVTICAgICAgICAgIDB4MDA1NAorI2RlZmluZSBBQzk3X01JU0NfTU9ERU1fU1RBVCAgICAgIDB4MDA1NgorI2RlZmluZSBBQzk3X1JFU0VSVkVEXzU4ICAgICAgICAgIDB4MDA1OAorCisvKiByZWdpc3RlcnMgMHgwMDVhIC0gMHgwMDdhIGFyZSB2ZW5kb3IgcmVzZXJ2ZWQgKi8KKworI2RlZmluZSBBQzk3X1ZFTkRPUl9JRDEgICAgICAgICAgIDB4MDA3YworI2RlZmluZSBBQzk3X1ZFTkRPUl9JRDIgICAgICAgICAgIDB4MDA3ZQorCisvKiB2b2x1bWUgY29udHJvbCBiaXQgZGVmaW5lcyAqLworI2RlZmluZSBBQzk3X01VVEUgICAgICAgICAgICAgICAgIDB4ODAwMAorI2RlZmluZSBBQzk3X01JQ0JPT1NUICAgICAgICAgICAgIDB4MDA0MAorI2RlZmluZSBBQzk3X0xFRlRWT0wgICAgICAgICAgICAgIDB4M2YwMAorI2RlZmluZSBBQzk3X1JJR0hUVk9MICAgICAgICAgICAgIDB4MDAzZgorCisvKiByZWNvcmQgbXV4IGRlZmluZXMgKi8KKyNkZWZpbmUgQUM5N19SRUNNVVhfTUlDICAgICAgICAgICAweDAwMDAKKyNkZWZpbmUgQUM5N19SRUNNVVhfQ0QgICAgICAgICAgICAweDAxMDEKKyNkZWZpbmUgQUM5N19SRUNNVVhfVklERU8gICAgICAgICAweDAyMDIKKyNkZWZpbmUgQUM5N19SRUNNVVhfQVVYICAgICAgICAgICAweDAzMDMKKyNkZWZpbmUgQUM5N19SRUNNVVhfTElORSAgICAgICAgICAweDA0MDQKKyNkZWZpbmUgQUM5N19SRUNNVVhfU1RFUkVPX01JWCAgICAweDA1MDUKKyNkZWZpbmUgQUM5N19SRUNNVVhfTU9OT19NSVggICAgICAweDA2MDYKKyNkZWZpbmUgQUM5N19SRUNNVVhfUEhPTkUgICAgICAgICAweDA3MDcKKworLyogZ2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVyIGJpdCBkZWZpbmVzICovCisjZGVmaW5lIEFDOTdfR1BfTFBCSyAgICAgICAgICAgICAgMHgwMDgwICAgICAgIC8qIExvb3BiYWNrIG1vZGUgKi8KKyNkZWZpbmUgQUM5N19HUF9NUyAgICAgICAgICAgICAgICAweDAxMDAgICAgICAgLyogTWljIFNlbGVjdCAwPU1pYzEsIDE9TWljMiAqLworI2RlZmluZSBBQzk3X0dQX01JWCAgICAgICAgICAgICAgIDB4MDIwMCAgICAgICAvKiBNb25vIG91dHB1dCBzZWxlY3QgMD1NaXgsIDE9TWljICovCisjZGVmaW5lIEFDOTdfR1BfUkxCSyAgICAgICAgICAgICAgMHgwNDAwICAgICAgIC8qIFJlbW90ZSBMb29wYmFjayAtIE1vZGVtIGxpbmUgY29kZWMgKi8KKyNkZWZpbmUgQUM5N19HUF9MTEJLICAgICAgICAgICAgICAweDA4MDAgICAgICAgLyogTG9jYWwgTG9vcGJhY2sgLSBNb2RlbSBMaW5lIGNvZGVjICovCisjZGVmaW5lIEFDOTdfR1BfTEQgICAgICAgICAgICAgICAgMHgxMDAwICAgICAgIC8qIExvdWRuZXNzIDE9b24gKi8KKyNkZWZpbmUgQUM5N19HUF8zRCAgICAgICAgICAgICAgICAweDIwMDAgICAgICAgLyogM0QgRW5oYW5jZW1lbnQgMT1vbiAqLworI2RlZmluZSBBQzk3X0dQX1NUICAgICAgICAgICAgICAgIDB4NDAwMCAgICAgICAvKiBTdGVyZW8gRW5oYW5jZW1lbnQgMT1vbiAqLworI2RlZmluZSBBQzk3X0dQX1BPUCAgICAgICAgICAgICAgIDB4ODAwMCAgICAgICAvKiBQY20gT3V0IFBhdGgsIDA9cHJlIDNELCAxPXBvc3QgM0QgKi8KKworLyogZXh0ZW5kZWQgYXVkaW8gc3RhdHVzIGFuZCBjb250cm9sIGJpdCBkZWZpbmVzICovCisjZGVmaW5lIEFDOTdfRUFfVlJBICAgICAgICAgICAgICAgMHgwMDAxICAgICAgIC8qIFZhcmlhYmxlIGJpdCByYXRlIGVuYWJsZSBiaXQgKi8KKyNkZWZpbmUgQUM5N19FQV9EUkEgICAgICAgICAgICAgICAweDAwMDIgICAgICAgLyogRG91YmxlLXJhdGUgYXVkaW8gZW5hYmxlIGJpdCAqLworI2RlZmluZSBBQzk3X0VBX1NQRElGICAgICAgICAgICAgIDB4MDAwNCAgICAgICAvKiBTL1BESUYgRW5hYmxlIGJpdCAqLworI2RlZmluZSBBQzk3X0VBX1ZSTSAgICAgICAgICAgICAgIDB4MDAwOCAgICAgICAvKiBWYXJpYWJsZSBiaXQgcmF0ZSBmb3IgTUlDIGVuYWJsZSBiaXQgKi8KKyNkZWZpbmUgQUM5N19FQV9DREFDICAgICAgICAgICAgICAweDAwNDAgICAgICAgLyogUENNIENlbnRlciBEQUMgaXMgcmVhZHkgKFJlYWQgb25seSkgKi8KKyNkZWZpbmUgQUM5N19FQV9TREFDICAgICAgICAgICAgICAweDAwNDAgICAgICAgLyogUENNIFN1cnJvdW5kIERBQ3MgYXJlIHJlYWR5IChSZWFkIG9ubHkpICovCisjZGVmaW5lIEFDOTdfRUFfTERBQyAgICAgICAgICAgICAgMHgwMDgwICAgICAgIC8qIFBDTSBMRkUgREFDIGlzIHJlYWR5IChSZWFkIG9ubHkpICovCisjZGVmaW5lIEFDOTdfRUFfTURBQyAgICAgICAgICAgICAgMHgwMTAwICAgICAgIC8qIE1JQyBBREMgaXMgcmVhZHkgKFJlYWQgb25seSkgKi8KKyNkZWZpbmUgQUM5N19FQV9TUENWICAgICAgICAgICAgICAweDA0MDAgICAgICAgLyogUy9QRElGIGNvbmZpZ3VyYXRpb24gdmFsaWQgKFJlYWQgb25seSkgKi8KKyNkZWZpbmUgQUM5N19FQV9QUkkgICAgICAgICAgICAgICAweDA4MDAgICAgICAgLyogVHVybnMgdGhlIFBDTSBDZW50ZXIgREFDIG9mZiAqLworI2RlZmluZSBBQzk3X0VBX1BSSiAgICAgICAgICAgICAgIDB4MTAwMCAgICAgICAvKiBUdXJucyB0aGUgUENNIFN1cnJvdW5kIERBQ3Mgb2ZmICovCisjZGVmaW5lIEFDOTdfRUFfUFJLICAgICAgICAgICAgICAgMHgyMDAwICAgICAgIC8qIFR1cm5zIHRoZSBQQ00gTEZFIERBQyBvZmYgKi8KKyNkZWZpbmUgQUM5N19FQV9QUkwgICAgICAgICAgICAgICAweDQwMDAgICAgICAgLyogVHVybnMgdGhlIE1JQyBBREMgb2ZmICovCisjZGVmaW5lIEFDOTdfRUFfU0xPVF9NQVNLICAgICAgICAgMHhmZmNmICAgICAgIC8qIE1hc2sgZm9yIHNsb3QgYXNzaWdubWVudCBiaXRzICovCisjZGVmaW5lIEFDOTdfRUFfU1BTQV8zXzQgICAgICAgICAgMHgwMDAwICAgICAgIC8qIFNsb3QgYXNzaWduZWQgdG8gMyAmIDQgKi8KKyNkZWZpbmUgQUM5N19FQV9TUFNBXzdfOCAgICAgICAgICAweDAwMTAgICAgICAgLyogU2xvdCBhc3NpZ25lZCB0byA3ICYgOCAqLworI2RlZmluZSBBQzk3X0VBX1NQU0FfNl85ICAgICAgICAgIDB4MDAyMCAgICAgICAvKiBTbG90IGFzc2lnbmVkIHRvIDYgJiA5ICovCisjZGVmaW5lIEFDOTdfRUFfU1BTQV8xMF8xMSAgICAgICAgMHgwMDMwICAgICAgIC8qIFNsb3QgYXNzaWduZWQgdG8gMTAgJiAxMSAqLworCisvKiBTL1BESUYgY29udHJvbCBiaXQgZGVmaW5lcyAqLworI2RlZmluZSBBQzk3X1NDX1BSTyAgICAgICAgICAgICAgIDB4MDAwMSAgICAgICAvKiBQcm9mZXNzaW9uYWwgc3RhdHVzICovCisjZGVmaW5lIEFDOTdfU0NfTkFVRElPICAgICAgICAgICAgMHgwMDAyICAgICAgIC8qIE5vbiBhdWRpbyBzdHJlYW0gKi8KKyNkZWZpbmUgQUM5N19TQ19DT1BZICAgICAgICAgICAgICAweDAwMDQgICAgICAgLyogQ29weXJpZ2h0IHN0YXR1cyAqLworI2RlZmluZSBBQzk3X1NDX1BSRSAgICAgICAgICAgICAgIDB4MDAwOCAgICAgICAvKiBQcmVlbXBoYXNpcyBzdGF0dXMgKi8KKyNkZWZpbmUgQUM5N19TQ19DQ19NQVNLICAgICAgICAgICAweDA3ZjAgICAgICAgLyogQ2F0ZWdvcnkgQ29kZSBtYXNrICovCisjZGVmaW5lIEFDOTdfU0NfTCAgICAgICAgICAgICAgICAgMHgwODAwICAgICAgIC8qIEdlbmVyYXRpb24gTGV2ZWwgc3RhdHVzICovCisjZGVmaW5lIEFDOTdfU0NfU1BTUl9NQVNLICAgICAgICAgMHhjZmZmICAgICAgIC8qIFMvUERJRiBTYW1wbGUgUmF0ZSBiaXRzICovCisjZGVmaW5lIEFDOTdfU0NfU1BTUl80NEsgICAgICAgICAgMHgwMDAwICAgICAgIC8qIFVzZSA0NC4xa0h6IFNhbXBsZSByYXRlICovCisjZGVmaW5lIEFDOTdfU0NfU1BTUl80OEsgICAgICAgICAgMHgyMDAwICAgICAgIC8qIFVzZSA0OGtIeiBTYW1wbGUgcmF0ZSAqLworI2RlZmluZSBBQzk3X1NDX1NQU1JfMzJLICAgICAgICAgIDB4MzAwMCAgICAgICAvKiBVc2UgMzJrSHogU2FtcGxlIHJhdGUgKi8KKyNkZWZpbmUgQUM5N19TQ19EUlMgICAgICAgICAgICAgICAweDQwMDAgICAgICAgLyogRG91YmxlIFJhdGUgUy9QRElGICovCisjZGVmaW5lIEFDOTdfU0NfViAgICAgICAgICAgICAgICAgMHg4MDAwICAgICAgIC8qIFZhbGlkaXR5IHN0YXR1cyAqLworCisvKiBwb3dlcmRvd24gY29udHJvbCBhbmQgc3RhdHVzIGJpdCBkZWZpbmVzICovCisKKy8qIHN0YXR1cyAqLworI2RlZmluZSBBQzk3X1BXUl9NRE0gICAgICAgICAgICAgIDB4MDAxMCAgICAgICAvKiBNb2RlbSBzZWN0aW9uIHJlYWR5ICovCisjZGVmaW5lIEFDOTdfUFdSX1JFRiAgICAgICAgICAgICAgMHgwMDA4ICAgICAgIC8qIFZyZWYgbm9taW5hbCAqLworI2RlZmluZSBBQzk3X1BXUl9BTkwgICAgICAgICAgICAgIDB4MDAwNCAgICAgICAvKiBBbmFsb2cgc2VjdGlvbiByZWFkeSAqLworI2RlZmluZSBBQzk3X1BXUl9EQUMgICAgICAgICAgICAgIDB4MDAwMiAgICAgICAvKiBEQUMgc2VjdGlvbiByZWFkeSAqLworI2RlZmluZSBBQzk3X1BXUl9BREMgICAgICAgICAgICAgIDB4MDAwMSAgICAgICAvKiBBREMgc2VjdGlvbiByZWFkeSAqLworCisvKiBjb250cm9sICovCisjZGVmaW5lIEFDOTdfUFdSX1BSMCAgICAgICAgICAgICAgMHgwMTAwICAgICAgIC8qIEFEQyBhbmQgTXV4IHBvd2VyZG93biAqLworI2RlZmluZSBBQzk3X1BXUl9QUjEgICAgICAgICAgICAgIDB4MDIwMCAgICAgICAvKiBEQUMgcG93ZXJkb3duICovCisjZGVmaW5lIEFDOTdfUFdSX1BSMiAgICAgICAgICAgICAgMHgwNDAwICAgICAgIC8qIE91dHB1dCBtaXhlciBwb3dlcmRvd24gKFZyZWYgb24pICovCisjZGVmaW5lIEFDOTdfUFdSX1BSMyAgICAgICAgICAgICAgMHgwODAwICAgICAgIC8qIE91dHB1dCBtaXhlciBwb3dlcmRvd24gKFZyZWYgb2ZmKSAqLworI2RlZmluZSBBQzk3X1BXUl9QUjQgICAgICAgICAgICAgIDB4MTAwMCAgICAgICAvKiBBQy1saW5rIHBvd2VyZG93biAqLworI2RlZmluZSBBQzk3X1BXUl9QUjUgICAgICAgICAgICAgIDB4MjAwMCAgICAgICAvKiBJbnRlcm5hbCBDbGsgZGlzYWJsZSAqLworI2RlZmluZSBBQzk3X1BXUl9QUjYgICAgICAgICAgICAgIDB4NDAwMCAgICAgICAvKiBIUCBhbXAgcG93ZXJkb3duICovCisjZGVmaW5lIEFDOTdfUFdSX1BSNyAgICAgICAgICAgICAgMHg4MDAwICAgICAgIC8qIE1vZGVtIG9mZiAtIGlmIHN1cHBvcnRlZCAqLworCisvKiBleHRlbmRlZCBhdWRpbyBJRCByZWdpc3RlciBiaXQgZGVmaW5lcyAqLworI2RlZmluZSBBQzk3X0VYVElEX1ZSQSAgICAgICAgICAgIDB4MDAwMQorI2RlZmluZSBBQzk3X0VYVElEX0RSQSAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBBQzk3X0VYVElEX1NQRElGICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBBQzk3X0VYVElEX1ZSTSAgICAgICAgICAgIDB4MDAwOAorI2RlZmluZSBBQzk3X0VYVElEX0RTQTAgICAgICAgICAgIDB4MDAxMAorI2RlZmluZSBBQzk3X0VYVElEX0RTQTEgICAgICAgICAgIDB4MDAyMAorI2RlZmluZSBBQzk3X0VYVElEX0NEQUMgICAgICAgICAgIDB4MDA0MAorI2RlZmluZSBBQzk3X0VYVElEX1NEQUMgICAgICAgICAgIDB4MDA4MAorI2RlZmluZSBBQzk3X0VYVElEX0xEQUMgICAgICAgICAgIDB4MDEwMAorI2RlZmluZSBBQzk3X0VYVElEX0FNQVAgICAgICAgICAgIDB4MDIwMAorI2RlZmluZSBBQzk3X0VYVElEX1JFVjAgICAgICAgICAgIDB4MDQwMAorI2RlZmluZSBBQzk3X0VYVElEX1JFVjEgICAgICAgICAgIDB4MDgwMAorI2RlZmluZSBBQzk3X0VYVElEX0lEMCAgICAgICAgICAgIDB4NDAwMAorI2RlZmluZSBBQzk3X0VYVElEX0lEMSAgICAgICAgICAgIDB4ODAwMAorCisvKiBleHRlbmRlZCBzdGF0dXMgcmVnaXN0ZXIgYml0IGRlZmluZXMgKi8KKyNkZWZpbmUgQUM5N19FWFRTVEFUX1ZSQSAgICAgICAgICAweDAwMDEKKyNkZWZpbmUgQUM5N19FWFRTVEFUX0RSQSAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgQUM5N19FWFRTVEFUX1NQRElGICAgICAgICAweDAwMDQKKyNkZWZpbmUgQUM5N19FWFRTVEFUX1ZSTSAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgQUM5N19FWFRTVEFUX1NQU0EwICAgICAgICAweDAwMTAKKyNkZWZpbmUgQUM5N19FWFRTVEFUX1NQU0ExICAgICAgICAweDAwMjAKKyNkZWZpbmUgQUM5N19FWFRTVEFUX0NEQUMgICAgICAgICAweDAwNDAKKyNkZWZpbmUgQUM5N19FWFRTVEFUX1NEQUMgICAgICAgICAweDAwODAKKyNkZWZpbmUgQUM5N19FWFRTVEFUX0xEQUMgICAgICAgICAweDAxMDAKKyNkZWZpbmUgQUM5N19FWFRTVEFUX01BREMgICAgICAgICAweDAyMDAKKyNkZWZpbmUgQUM5N19FWFRTVEFUX1NQQ1YgICAgICAgICAweDA0MDAKKyNkZWZpbmUgQUM5N19FWFRTVEFUX1BSSSAgICAgICAgICAweDA4MDAKKyNkZWZpbmUgQUM5N19FWFRTVEFUX1BSSiAgICAgICAgICAweDEwMDAKKyNkZWZpbmUgQUM5N19FWFRTVEFUX1BSSyAgICAgICAgICAweDIwMDAKKyNkZWZpbmUgQUM5N19FWFRTVEFUX1BSTCAgICAgICAgICAweDQwMDAKKworLyogZXh0ZW5kZWQgYXVkaW8gSUQgcmVnaXN0ZXIgYml0IGRlZmluZXMgKi8KKyNkZWZpbmUgQUM5N19FWFRJRF9WUkEgICAgICAgICAgICAweDAwMDEKKyNkZWZpbmUgQUM5N19FWFRJRF9EUkEgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgQUM5N19FWFRJRF9TUERJRiAgICAgICAgICAweDAwMDQKKyNkZWZpbmUgQUM5N19FWFRJRF9WUk0gICAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgQUM5N19FWFRJRF9EU0EwICAgICAgICAgICAweDAwMTAKKyNkZWZpbmUgQUM5N19FWFRJRF9EU0ExICAgICAgICAgICAweDAwMjAKKyNkZWZpbmUgQUM5N19FWFRJRF9DREFDICAgICAgICAgICAweDAwNDAKKyNkZWZpbmUgQUM5N19FWFRJRF9TREFDICAgICAgICAgICAweDAwODAKKyNkZWZpbmUgQUM5N19FWFRJRF9MREFDICAgICAgICAgICAweDAxMDAKKyNkZWZpbmUgQUM5N19FWFRJRF9BTUFQICAgICAgICAgICAweDAyMDAKKyNkZWZpbmUgQUM5N19FWFRJRF9SRVYwICAgICAgICAgICAweDA0MDAKKyNkZWZpbmUgQUM5N19FWFRJRF9SRVYxICAgICAgICAgICAweDA4MDAKKyNkZWZpbmUgQUM5N19FWFRJRF9JRDAgICAgICAgICAgICAweDQwMDAKKyNkZWZpbmUgQUM5N19FWFRJRF9JRDEgICAgICAgICAgICAweDgwMDAKKworLyogZXh0ZW5kZWQgc3RhdHVzIHJlZ2lzdGVyIGJpdCBkZWZpbmVzICovCisjZGVmaW5lIEFDOTdfRVhUU1RBVF9WUkEgICAgICAgICAgMHgwMDAxCisjZGVmaW5lIEFDOTdfRVhUU1RBVF9EUkEgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIEFDOTdfRVhUU1RBVF9TUERJRiAgICAgICAgMHgwMDA0CisjZGVmaW5lIEFDOTdfRVhUU1RBVF9WUk0gICAgICAgICAgMHgwMDA4CisjZGVmaW5lIEFDOTdfRVhUU1RBVF9TUFNBMCAgICAgICAgMHgwMDEwCisjZGVmaW5lIEFDOTdfRVhUU1RBVF9TUFNBMSAgICAgICAgMHgwMDIwCisjZGVmaW5lIEFDOTdfRVhUU1RBVF9DREFDICAgICAgICAgMHgwMDQwCisjZGVmaW5lIEFDOTdfRVhUU1RBVF9TREFDICAgICAgICAgMHgwMDgwCisjZGVmaW5lIEFDOTdfRVhUU1RBVF9MREFDICAgICAgICAgMHgwMTAwCisjZGVmaW5lIEFDOTdfRVhUU1RBVF9NQURDICAgICAgICAgMHgwMjAwCisjZGVmaW5lIEFDOTdfRVhUU1RBVF9TUENWICAgICAgICAgMHgwNDAwCisjZGVmaW5lIEFDOTdfRVhUU1RBVF9QUkkgICAgICAgICAgMHgwODAwCisjZGVmaW5lIEFDOTdfRVhUU1RBVF9QUkogICAgICAgICAgMHgxMDAwCisjZGVmaW5lIEFDOTdfRVhUU1RBVF9QUksgICAgICAgICAgMHgyMDAwCisjZGVmaW5lIEFDOTdfRVhUU1RBVF9QUkwgICAgICAgICAgMHg0MDAwCisKKy8qIHVzZWZ1bCBwb3dlciBzdGF0ZXMgKi8KKyNkZWZpbmUgQUM5N19QV1JfRDAgICAgICAgICAgICAgICAweDAwMDAgICAgICAvKiBldmVyeXRoaW5nIG9uICovCisjZGVmaW5lIEFDOTdfUFdSX0QxICAgICAgICAgICAgICBBQzk3X1BXUl9QUjB8QUM5N19QV1JfUFIxfEFDOTdfUFdSX1BSNAorI2RlZmluZSBBQzk3X1BXUl9EMiAgICAgICAgICAgICAgQUM5N19QV1JfUFIwfEFDOTdfUFdSX1BSMXxBQzk3X1BXUl9QUjJ8QUM5N19QV1JfUFIzfEFDOTdfUFdSX1BSNAorI2RlZmluZSBBQzk3X1BXUl9EMyAgICAgICAgICAgICAgQUM5N19QV1JfUFIwfEFDOTdfUFdSX1BSMXxBQzk3X1BXUl9QUjJ8QUM5N19QV1JfUFIzfEFDOTdfUFdSX1BSNAorI2RlZmluZSBBQzk3X1BXUl9BTkxPRkYgICAgICAgICAgQUM5N19QV1JfUFIyfEFDOTdfUFdSX1BSMyAgLyogYW5hbG9nIHNlY3Rpb24gb2ZmICovCisKKy8qIFRvdGFsIG51bWJlciBvZiBkZWZpbmVkIHJlZ2lzdGVycy4gICovCisjZGVmaW5lIEFDOTdfUkVHX0NOVCA2NAorCisKKy8qIE9TUyBpbnRlcmZhY2UgdG8gdGhlIGFjOTdzLi4gKi8KKyNkZWZpbmUgQUM5N19TVEVSRU9fTUFTSyAoU09VTkRfTUFTS19WT0xVTUV8U09VTkRfTUFTS19QQ018XAorCVNPVU5EX01BU0tfTElORXxTT1VORF9NQVNLX0NEfFwKKwlTT1VORF9NQVNLX0FMVFBDTXxTT1VORF9NQVNLX0lHQUlOfFwKKwlTT1VORF9NQVNLX0xJTkUxfFNPVU5EX01BU0tfVklERU8pCisKKyNkZWZpbmUgQUM5N19TVVBQT1JURURfTUFTSyAoQUM5N19TVEVSRU9fTUFTSyB8IFwKKwlTT1VORF9NQVNLX0JBU1N8U09VTkRfTUFTS19UUkVCTEV8XAorCVNPVU5EX01BU0tfU1BFQUtFUnxTT1VORF9NQVNLX01JQ3xcCisJU09VTkRfTUFTS19QSE9ORUlOfFNPVU5EX01BU0tfUEhPTkVPVVQpCisKKyNkZWZpbmUgQUM5N19SRUNPUkRfTUFTSyAoU09VTkRfTUFTS19NSUN8XAorCVNPVU5EX01BU0tfQ0R8U09VTkRfTUFTS19JR0FJTnxTT1VORF9NQVNLX1ZJREVPfFwKKwlTT1VORF9NQVNLX0xJTkUxfCBTT1VORF9NQVNLX0xJTkV8XAorCVNPVU5EX01BU0tfUEhPTkVJTikKKworLyogb3JpZ2luYWwgY2hlY2sgaXMgbm90IGdvb2QgZW5vdWdoIGluIGNhc2UgRk9PIGlzIGdyZWF0ZXIgdGhhbgorICogU09VTkRfTUlYRVJfTlJERVZJQ0VTIGJlY2F1c2UgdGhlIHN1cHBvcnRlZF9taXhlcnMgaGFzIGV4YWN0bHkKKyAqIFNPVU5EX01JWEVSX05SREVWSUNFUyBlbGVtZW50cy4KKyAqIGJlZm9yZSBtYXRjaGluZyB0aGUgZ2l2ZW4gbWl4ZXIgYWdhaW5zdCB0aGUgYml0bWFzayBpbiBzdXBwb3J0ZWRfbWl4ZXJzIHdlCisgKiBjaGVjayBpZiBtaXhlciBudW1iZXIgZXhjZWVkcyBtYXhpbXVtIGFsbG93ZWQgc2l6ZSB3aGljaCBpcyBhcyBtZW50aW9uZWQKKyAqIGFib3ZlIFNPVU5EX01JWEVSX05SREVWSUNFUyAqLworI2RlZmluZSBzdXBwb3J0ZWRfbWl4ZXIoQ09ERUMsRk9PKSAoKEZPTyA+PSAwKSAmJiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRk9PIDwgU09VTkRfTUlYRVJfTlJERVZJQ0VTKSAmJiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQ09ERUMpLT5zdXBwb3J0ZWRfbWl4ZXJzICYgKDE8PEZPTykgKQorCitzdHJ1Y3QgYWM5N19jb2RlYyB7CisJLyogTGlua2VkIGxpc3Qgb2YgY29kZWNzICovCisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCisJLyogQUM5NyBjb250cm9sbGVyIGNvbm5lY3RlZCB3aXRoICovCisJdm9pZCAqcHJpdmF0ZV9kYXRhOworCisJY2hhciAqbmFtZTsKKwlpbnQgaWQ7CisJaW50IGRldl9taXhlcjsgCisJaW50IHR5cGU7CisJdTMyIG1vZGVsOworCisJaW50IG1vZGVtOjE7CisKKwlzdHJ1Y3QgYWM5N19vcHMgKmNvZGVjX29wczsKKworCS8qIGNvbnRyb2xsZXIgc3BlY2lmaWMgbG93ZXIgbGV2ZXJsIGFjOTcgYWNjZXNzaW5nIHJvdXRpbmVzLgorCSAgIG11c3QgYmUgcmUtZW50cmFudCBzYWZlICovCisJdTE2ICAoKmNvZGVjX3JlYWQpICAoc3RydWN0IGFjOTdfY29kZWMgKmNvZGVjLCB1OCByZWcpOworCXZvaWQgKCpjb2RlY193cml0ZSkgKHN0cnVjdCBhYzk3X2NvZGVjICpjb2RlYywgdTggcmVnLCB1MTYgdmFsKTsKKworCS8qIFdhaXQgZm9yIGNvZGVjLXJlYWR5LiAgT2sgdG8gc2xlZXAgaGVyZS4gICovCisJdm9pZCAgKCpjb2RlY193YWl0KSAgKHN0cnVjdCBhYzk3X2NvZGVjICpjb2RlYyk7CisKKwkvKiBjYWxsYmFjayB1c2VkIGJ5IGhlbHBlciBkcml2ZXJzIGZvciBpbnRlcmVzdGluZyBhYzk3IHNldHVwcyAqLworCXZvaWQgICgqY29kZWNfdW5yZWdpc3RlcikgKHN0cnVjdCBhYzk3X2NvZGVjICpjb2RlYyk7CisJCisJc3RydWN0IGFjOTdfZHJpdmVyICpkcml2ZXI7CisJdm9pZCAqZHJpdmVyX3ByaXZhdGU7CS8qIFByaXZhdGUgZGF0YSBmb3IgdGhlIGRyaXZlciAqLworCQorCXNwaW5sb2NrX3QgbG9jazsKKwkKKwkvKiBPU1MgbWl4ZXIgbWFza3MgKi8KKwlpbnQgbW9kY250OworCWludCBzdXBwb3J0ZWRfbWl4ZXJzOworCWludCBzdGVyZW9fbWl4ZXJzOworCWludCByZWNvcmRfc291cmNlczsKKworCS8qIFByb3BlcnR5IGZsYWdzICovCisJaW50IGZsYWdzOworCisJaW50IGJpdF9yZXNvbHV0aW9uOworCisJLyogT1NTIG1peGVyIGludGVyZmFjZSAqLworCWludCAgKCpyZWFkX21peGVyKSAoc3RydWN0IGFjOTdfY29kZWMgKmNvZGVjLCBpbnQgb3NzX2NoYW5uZWwpOworCXZvaWQgKCp3cml0ZV9taXhlcikoc3RydWN0IGFjOTdfY29kZWMgKmNvZGVjLCBpbnQgb3NzX2NoYW5uZWwsCisJCQkgICAgdW5zaWduZWQgaW50IGxlZnQsIHVuc2lnbmVkIGludCByaWdodCk7CisJaW50ICAoKnJlY21hc2tfaW8pIChzdHJ1Y3QgYWM5N19jb2RlYyAqY29kZWMsIGludCBydywgaW50IG1hc2spOworCWludCAgKCptaXhlcl9pb2N0bCkoc3RydWN0IGFjOTdfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CisKKwkvKiBzYXZlZCBPU1MgbWl4ZXIgc3RhdGVzICovCisJdW5zaWduZWQgaW50IG1peGVyX3N0YXRlW1NPVU5EX01JWEVSX05SREVWSUNFU107CisKKwkvKiBTb2Z0d2FyZSBNb2RlbSBpbnRlcmZhY2UgKi8KKwlpbnQgICgqbW9kZW1faW9jdGwpKHN0cnVjdCBhYzk3X2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworfTsKKworLyoKKyAqCU9wZXJhdGlvbiBzdHJ1Y3R1cmVzIGZvciBlYWNoIGtub3duIEFDOTcgY2hpcAorICovCisgCitzdHJ1Y3QgYWM5N19vcHMKK3sKKwkvKiBJbml0aWFsaXNlICovCisJaW50ICgqaW5pdCkoc3RydWN0IGFjOTdfY29kZWMgKmMpOworCS8qIEFtcGxpZmllciBjb250cm9sICovCisJaW50ICgqYW1wbGlmaWVyKShzdHJ1Y3QgYWM5N19jb2RlYyAqY29kZWMsIGludCBvbik7CisJLyogRGlnaXRhbCBtb2RlIGNvbnRyb2wgKi8KKwlpbnQgKCpkaWdpdGFsKShzdHJ1Y3QgYWM5N19jb2RlYyAqY29kZWMsIGludCBzbG90cywgaW50IHJhdGUsIGludCBtb2RlKTsKKyNkZWZpbmUgQVVESU9fRElHSVRBTAkJMHg4MDAwCisjZGVmaW5lIEFVRElPX1BSTwkJMHg0MDAwCisjZGVmaW5lIEFVRElPX0RSUwkJMHgyMDAwCisjZGVmaW5lIEFVRElPX0NDTUFTSwkJMHgwMDNGCisJCisjZGVmaW5lIEFDOTdfREVMVURFRF9NT0RFTQkxCS8qIEF1ZGlvIGNvZGVjIHJlcG9ydHMgaXRzIGEgbW9kZW0gKi8KKyNkZWZpbmUgQUM5N19OT19QQ01fVk9MVU1FCTIJLyogVm9sdW1lIGNvbnRyb2wgaXMgbWlzc2luZyAJICAgKi8KKyNkZWZpbmUgQUM5N19ERUZBVUxUX1BPV0VSX09GRiA0IC8qIE5lZWRzIHdhcm0gcmVzZXQgdG8gcG93ZXIgdXAgKi8KK307CisKK2V4dGVybiBpbnQgYWM5N19yZWFkX3Byb2MgKGNoYXIgKnBhZ2Vfb3V0LCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwKKwkJCSAgIGludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpOworZXh0ZXJuIGludCBhYzk3X3Byb2JlX2NvZGVjKHN0cnVjdCBhYzk3X2NvZGVjICopOworZXh0ZXJuIHVuc2lnbmVkIGludCBhYzk3X3NldF9hZGNfcmF0ZShzdHJ1Y3QgYWM5N19jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByYXRlKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgYWM5N19zZXRfZGFjX3JhdGUoc3RydWN0IGFjOTdfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmF0ZSk7CitleHRlcm4gaW50IGFjOTdfc2F2ZV9zdGF0ZShzdHJ1Y3QgYWM5N19jb2RlYyAqY29kZWMpOworZXh0ZXJuIGludCBhYzk3X3Jlc3RvcmVfc3RhdGUoc3RydWN0IGFjOTdfY29kZWMgKmNvZGVjKTsKKworZXh0ZXJuIHN0cnVjdCBhYzk3X2NvZGVjICphYzk3X2FsbG9jX2NvZGVjKHZvaWQpOworZXh0ZXJuIHZvaWQgYWM5N19yZWxlYXNlX2NvZGVjKHN0cnVjdCBhYzk3X2NvZGVjICpjb2RlYyk7CisKK3N0cnVjdCBhYzk3X2RyaXZlciB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCWNoYXIgKm5hbWU7CisJdTMyIGNvZGVjX2lkOworCXUzMiBjb2RlY19tYXNrOworCWludCAoKnByb2JlKSAoc3RydWN0IGFjOTdfY29kZWMgKmNvZGVjLCBzdHJ1Y3QgYWM5N19kcml2ZXIgKmRyaXZlcik7CisJdm9pZCAoKnJlbW92ZSkgKHN0cnVjdCBhYzk3X2NvZGVjICpjb2RlYywgc3RydWN0IGFjOTdfZHJpdmVyICpkcml2ZXIpOworfTsKKworZXh0ZXJuIGludCBhYzk3X3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgYWM5N19kcml2ZXIgKmRyaXZlcik7CitleHRlcm4gdm9pZCBhYzk3X3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBhYzk3X2RyaXZlciAqZHJpdmVyKTsKKworLyogcXVpcmsgdHlwZXMgKi8KK2VudW0geworCUFDOTdfVFVORV9ERUZBVUxUID0gLTEsIC8qIHVzZSBkZWZhdWx0IGZyb20gcXVpcmsgbGlzdCAobm90IHZhbGlkIGluIGxpc3QpICovCisJQUM5N19UVU5FX05PTkUgPSAwLCAgICAgLyogbm90aGluZyBleHRyYSB0byBkbyAqLworCUFDOTdfVFVORV9IUF9PTkxZLCAgICAgIC8qIGhlYWRwaG9uZSAodHJ1ZSBsaW5lLW91dCkgY29udHJvbCBhcyBtYXN0ZXIgb25seSAqLworCUFDOTdfVFVORV9TV0FQX0hQLCAgICAgIC8qIHN3YXAgaGVhZHBob25lIGFuZCBtYXN0ZXIgY29udHJvbHMgKi8KKwlBQzk3X1RVTkVfU1dBUF9TVVJST1VORCwgLyogc3dhcCBtYXN0ZXIgYW5kIHN1cnJvdW5kIGNvbnRyb2xzICovCisJQUM5N19UVU5FX0FEX1NIQVJJTkcsICAgLyogZm9yIEFEMTk4NSwgdHVybiBvbiBPTVMgYml0IGFuZCB1c2UgaGVhZHBob25lICovCisJQUM5N19UVU5FX0FMQ19KQUNLLCAgICAgLyogZm9yIFJlYWx0ZWssIGVuYWJsZSBKQUNLIGRldGVjdGlvbiAqLworfTsKKworc3RydWN0IGFjOTdfcXVpcmsgeworCXVuc2lnbmVkIHNob3J0IHZlbmRvcjsgIC8qIFBDSSB2ZW5kb3IgaWQgKi8KKwl1bnNpZ25lZCBzaG9ydCBkZXZpY2U7ICAvKiBQQ0kgZGV2aWNlIGlkICovCisJdW5zaWduZWQgc2hvcnQgbWFzazsgICAgLyogZGV2aWNlIGlkIGJpdCBtYXNrLCAwID0gYWNjZXB0IGFsbCAqLworCWNvbnN0IGNoYXIgKm5hbWU7ICAgICAgIC8qIG5hbWUgc2hvd24gYXMgaW5mbyAqLworCWludCB0eXBlOyAgICAgICAgICAgICAgIC8qIHF1aXJrIHR5cGUgYWJvdmUgKi8KK307CisKK3N0cnVjdCBwY2lfZGV2OworZXh0ZXJuIGludCBhYzk3X3R1bmVfaGFyZHdhcmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBhYzk3X3F1aXJrICpxdWlyaywgaW50IG92ZXJyaWRlKTsKKworI2VuZGlmIC8qIF9BQzk3X0NPREVDX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2FjY3QuaCBiL2luY2x1ZGUvbGludXgvYWNjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5OTNhMzYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2FjY3QuaApAQCAtMCwwICsxLDIwMSBAQAorLyoKKyAqICBCU0QgUHJvY2VzcyBBY2NvdW50aW5nIGZvciBMaW51eCAtIERlZmluaXRpb25zCisgKgorICogIEF1dGhvcjogTWFyY28gdmFuIFdpZXJpbmdlbiAobXZ3QHBsYW5ldHMuZWxtLm5ldCkKKyAqCisgKiAgVGhpcyBoZWFkZXIgZmlsZSBjb250YWlucyB0aGUgZGVmaW5pdGlvbnMgbmVlZGVkIHRvIGltcGxlbWVudAorICogIEJTRC1zdHlsZSBwcm9jZXNzIGFjY291bnRpbmcuIFRoZSBrZXJuZWwgYWNjb3VudGluZyBjb2RlIGFuZCBhbGwKKyAqICB1c2VyLWxldmVsIHByb2dyYW1zIHRoYXQgdHJ5IHRvIGRvIHNvbWV0aGluZyB1c2VmdWwgd2l0aCB0aGUKKyAqICBwcm9jZXNzIGFjY291bnRpbmcgbG9nIG11c3QgaW5jbHVkZSB0aGlzIGZpbGUuCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NSAtIDE5OTcgTWFyY28gdmFuIFdpZXJpbmdlbiAtIEVMTSBDb25zdWx0YW5jeSBCLlYuCisgKgorICovCisKKyNpZm5kZWYgX0xJTlVYX0FDQ1RfSAorI2RlZmluZSBfTElOVVhfQUNDVF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9wYXJhbS5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKworLyogCisgKiAgY29tcF90IGlzIGEgMTYtYml0ICJmbG9hdGluZyIgcG9pbnQgbnVtYmVyIHdpdGggYSAzLWJpdCBiYXNlIDgKKyAqICBleHBvbmVudCBhbmQgYSAxMy1iaXQgZnJhY3Rpb24uCisgKiAgY29tcDJfdCBpcyAyNC1iaXQgd2l0aCA1LWJpdCBiYXNlIDIgZXhwb25lbnQgYW5kIDIwIGJpdCBmcmFjdGlvbgorICogIChsZWFkaW5nIDEgbm90IHN0b3JlZCkuCisgKiAgU2VlIGxpbnV4L2tlcm5lbC9hY2N0LmMgZm9yIHRoZSBzcGVjaWZpYyBlbmNvZGluZyBzeXN0ZW1zIHVzZWQuCisgKi8KKwordHlwZWRlZiBfX3UxNgljb21wX3Q7Cit0eXBlZGVmIF9fdTMyCWNvbXAyX3Q7CisKKy8qCisgKiAgIGFjY291bnRpbmcgZmlsZSByZWNvcmQKKyAqCisgKiAgIFRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIGFsbCBvZiB0aGUgaW5mb3JtYXRpb24gd3JpdHRlbiBvdXQgdG8gdGhlCisgKiAgIHByb2Nlc3MgYWNjb3VudGluZyBmaWxlIHdoZW5ldmVyIGEgcHJvY2VzcyBleGl0cy4KKyAqLworCisjZGVmaW5lIEFDQ1RfQ09NTQkxNgorCitzdHJ1Y3QgYWNjdAoreworCWNoYXIJCWFjX2ZsYWc7CQkvKiBGbGFncyAqLworCWNoYXIJCWFjX3ZlcnNpb247CQkvKiBBbHdheXMgc2V0IHRvIEFDQ1RfVkVSU0lPTiAqLworCS8qIGZvciBiaW5hcnkgY29tcGF0aWJpbGl0eSBiYWNrIHVudGlsIDIuMCAqLworCV9fdTE2CQlhY191aWQxNjsJCS8qIExTQiBvZiBSZWFsIFVzZXIgSUQgKi8KKwlfX3UxNgkJYWNfZ2lkMTY7CQkvKiBMU0Igb2YgUmVhbCBHcm91cCBJRCAqLworCV9fdTE2CQlhY190dHk7CQkJLyogQ29udHJvbCBUZXJtaW5hbCAqLworCV9fdTMyCQlhY19idGltZTsJCS8qIFByb2Nlc3MgQ3JlYXRpb24gVGltZSAqLworCWNvbXBfdAkJYWNfdXRpbWU7CQkvKiBVc2VyIFRpbWUgKi8KKwljb21wX3QJCWFjX3N0aW1lOwkJLyogU3lzdGVtIFRpbWUgKi8KKwljb21wX3QJCWFjX2V0aW1lOwkJLyogRWxhcHNlZCBUaW1lICovCisJY29tcF90CQlhY19tZW07CQkJLyogQXZlcmFnZSBNZW1vcnkgVXNhZ2UgKi8KKwljb21wX3QJCWFjX2lvOwkJCS8qIENoYXJzIFRyYW5zZmVycmVkICovCisJY29tcF90CQlhY19ydzsJCQkvKiBCbG9ja3MgUmVhZCBvciBXcml0dGVuICovCisJY29tcF90CQlhY19taW5mbHQ7CQkvKiBNaW5vciBQYWdlZmF1bHRzICovCisJY29tcF90CQlhY19tYWpmbHQ7CQkvKiBNYWpvciBQYWdlZmF1bHRzICovCisJY29tcF90CQlhY19zd2FwczsJCS8qIE51bWJlciBvZiBTd2FwcyAqLworLyogbTY4ayBoYWQgbm8gcGFkZGluZyBoZXJlLiAqLworI2lmICFkZWZpbmVkKENPTkZJR19NNjhLKSB8fCAhZGVmaW5lZChfX0tFUk5FTF9fKQorCV9fdTE2CQlhY19haHo7CQkJLyogQUhaICovCisjZW5kaWYKKwlfX3UzMgkJYWNfZXhpdGNvZGU7CQkvKiBFeGl0Y29kZSAqLworCWNoYXIJCWFjX2NvbW1bQUNDVF9DT01NICsgMV07CS8qIENvbW1hbmQgTmFtZSAqLworCV9fdTgJCWFjX2V0aW1lX2hpOwkJLyogRWxhcHNlZCBUaW1lIE1TQiAqLworCV9fdTE2CQlhY19ldGltZV9sbzsJCS8qIEVsYXBzZWQgVGltZSBMU0IgKi8KKwlfX3UzMgkJYWNfdWlkOwkJCS8qIFJlYWwgVXNlciBJRCAqLworCV9fdTMyCQlhY19naWQ7CQkJLyogUmVhbCBHcm91cCBJRCAqLworfTsKKworc3RydWN0IGFjY3RfdjMKK3sKKwljaGFyCQlhY19mbGFnOwkJLyogRmxhZ3MgKi8KKwljaGFyCQlhY192ZXJzaW9uOwkJLyogQWx3YXlzIHNldCB0byBBQ0NUX1ZFUlNJT04gKi8KKwlfX3UxNgkJYWNfdHR5OwkJCS8qIENvbnRyb2wgVGVybWluYWwgKi8KKwlfX3UzMgkJYWNfZXhpdGNvZGU7CQkvKiBFeGl0Y29kZSAqLworCV9fdTMyCQlhY191aWQ7CQkJLyogUmVhbCBVc2VyIElEICovCisJX191MzIJCWFjX2dpZDsJCQkvKiBSZWFsIEdyb3VwIElEICovCisJX191MzIJCWFjX3BpZDsJCQkvKiBQcm9jZXNzIElEICovCisJX191MzIJCWFjX3BwaWQ7CQkvKiBQYXJlbnQgUHJvY2VzcyBJRCAqLworCV9fdTMyCQlhY19idGltZTsJCS8qIFByb2Nlc3MgQ3JlYXRpb24gVGltZSAqLworI2lmZGVmIF9fS0VSTkVMX18KKwlfX3UzMgkJYWNfZXRpbWU7CQkvKiBFbGFwc2VkIFRpbWUgKi8KKyNlbHNlCisJZmxvYXQJCWFjX2V0aW1lOwkJLyogRWxhcHNlZCBUaW1lICovCisjZW5kaWYKKwljb21wX3QJCWFjX3V0aW1lOwkJLyogVXNlciBUaW1lICovCisJY29tcF90CQlhY19zdGltZTsJCS8qIFN5c3RlbSBUaW1lICovCisJY29tcF90CQlhY19tZW07CQkJLyogQXZlcmFnZSBNZW1vcnkgVXNhZ2UgKi8KKwljb21wX3QJCWFjX2lvOwkJCS8qIENoYXJzIFRyYW5zZmVycmVkICovCisJY29tcF90CQlhY19ydzsJCQkvKiBCbG9ja3MgUmVhZCBvciBXcml0dGVuICovCisJY29tcF90CQlhY19taW5mbHQ7CQkvKiBNaW5vciBQYWdlZmF1bHRzICovCisJY29tcF90CQlhY19tYWpmbHQ7CQkvKiBNYWpvciBQYWdlZmF1bHRzICovCisJY29tcF90CQlhY19zd2FwczsJCS8qIE51bWJlciBvZiBTd2FwcyAqLworCWNoYXIJCWFjX2NvbW1bQUNDVF9DT01NXTsJLyogQ29tbWFuZCBOYW1lICovCit9OworCisvKgorICogIGFjY291bnRpbmcgZmxhZ3MKKyAqLworCQkJCS8qIGJpdCBzZXQgd2hlbiB0aGUgcHJvY2VzcyAuLi4gKi8KKyNkZWZpbmUgQUZPUksJCTB4MDEJLyogLi4uIGV4ZWN1dGVkIGZvcmssIGJ1dCBkaWQgbm90IGV4ZWMgKi8KKyNkZWZpbmUgQVNVCQkweDAyCS8qIC4uLiB1c2VkIHN1cGVyLXVzZXIgcHJpdmlsZWdlcyAqLworI2RlZmluZSBBQ09NUEFUCQkweDA0CS8qIC4uLiB1c2VkIGNvbXBhdGliaWxpdHkgbW9kZSAoVkFYIG9ubHkgbm90IHVzZWQpICovCisjZGVmaW5lIEFDT1JFCQkweDA4CS8qIC4uLiBkdW1wZWQgY29yZSAqLworI2RlZmluZSBBWFNJRwkJMHgxMAkvKiAuLi4gd2FzIGtpbGxlZCBieSBhIHNpZ25hbCAqLworCisjaWZkZWYgX19CSUdfRU5ESUFOCisjZGVmaW5lIEFDQ1RfQllURU9SREVSCTB4ODAJLyogYWNjb3VudGluZyBmaWxlIGlzIGJpZyBlbmRpYW4gKi8KKyNlbHNlCisjZGVmaW5lIEFDQ1RfQllURU9SREVSCTB4MDAJLyogYWNjb3VudGluZyBmaWxlIGlzIGxpdHRsZSBlbmRpYW4gKi8KKyNlbmRpZgorCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpZmRlZiBDT05GSUdfQlNEX1BST0NFU1NfQUNDVAorc3RydWN0IHN1cGVyX2Jsb2NrOworZXh0ZXJuIHZvaWQgYWNjdF9hdXRvX2Nsb3NlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOworZXh0ZXJuIHZvaWQgYWNjdF9wcm9jZXNzKGxvbmcgZXhpdGNvZGUpOworZXh0ZXJuIHZvaWQgYWNjdF91cGRhdGVfaW50ZWdyYWxzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKK2V4dGVybiB2b2lkIGFjY3RfY2xlYXJfaW50ZWdyYWxzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKKyNlbHNlCisjZGVmaW5lIGFjY3RfYXV0b19jbG9zZSh4KQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGFjY3RfcHJvY2Vzcyh4KQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBhY2N0X3VwZGF0ZV9pbnRlZ3JhbHMoeCkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgYWNjdF9jbGVhcl9pbnRlZ3JhbHModGFzaykJZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKKy8qCisgKiBBQ0NUX1ZFUlNJT04gbnVtYmVycyBhcyB5ZXQgZGVmaW5lZDoKKyAqIDA6IG9sZCBmb3JtYXQgKHVudGlsIDIuNi43KSB3aXRoIDE2IGJpdCB1aWQvZ2lkCisgKiAxOiBleHRlbmRlZCB2YXJpYW50IChiaW5hcnkgY29tcGF0aWJsZSBvbiBNNjhLKQorICogMjogZXh0ZW5kZWQgdmFyaWFudCAoYmluYXJ5IGNvbXBhdGlibGUgb24gZXZlcnl0aGluZyBleGNlcHQgTTY4SykKKyAqIDM6IG5ldyBiaW5hcnkgaW5jb21wYXRpYmxlIGZvcm1hdCAoNjQgYnl0ZXMpCisgKiA0OiBuZXcgYmluYXJ5IGluY29tcGF0aWJsZSBmb3JtYXQgKDEyOCBieXRlcykKKyAqIDU6IG5ldyBiaW5hcnkgaW5jb21wYXRpYmxlIGZvcm1hdCAoMTI4IGJ5dGVzLCBzZWNvbmQgaGFsZikKKyAqCisgKi8KKworI2lmZGVmIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzCisjZGVmaW5lIEFDQ1RfVkVSU0lPTgkzCisjZGVmaW5lIEFIWgkJMTAwCit0eXBlZGVmIHN0cnVjdCBhY2N0X3YzIGFjY3RfdDsKKyNlbHNlCisjaWZkZWYgQ09ORklHX002OEsKKyNkZWZpbmUgQUNDVF9WRVJTSU9OCTEKKyNlbHNlCisjZGVmaW5lIEFDQ1RfVkVSU0lPTgkyCisjZW5kaWYKKyNkZWZpbmUgQUhaCQkoVVNFUl9IWikKK3R5cGVkZWYgc3RydWN0IGFjY3QgYWNjdF90OworI2VuZGlmCisKKyNlbHNlCisjZGVmaW5lIEFDQ1RfVkVSU0lPTgkyCisjZGVmaW5lIEFIWgkJKEhaKQorI2VuZGlmCS8qIF9fS0VSTkVMICovCisKKyNpZmRlZiBfX0tFUk5FTF9fCisvKgorICogWWV0IGFub3RoZXIgc2V0IG9mIEhaIHRvICpIWiBoZWxwZXIgZnVuY3Rpb25zLgorICogU2VlIDxsaW51eC90aW1lcy5oPiBmb3IgdGhlIG9yaWdpbmFsLgorICovCisKK3N0YXRpYyBpbmxpbmUgdTMyIGppZmZpZXNfdG9fQUhaKHVuc2lnbmVkIGxvbmcgeCkKK3sKKyNpZiAoVElDS19OU0VDICUgKE5TRUNfUEVSX1NFQyAvIEFIWikpID09IDAKKwlyZXR1cm4geCAvIChIWiAvIFVTRVJfSFopOworI2Vsc2UKKyAgICAgICAgdTY0IHRtcCA9ICh1NjQpeCAqIFRJQ0tfTlNFQzsKKyAgICAgICAgZG9fZGl2KHRtcCwgKE5TRUNfUEVSX1NFQyAvIEFIWikpOworICAgICAgICByZXR1cm4gKGxvbmcpdG1wOworI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgdTY0IG5zZWNfdG9fQUhaKHU2NCB4KQoreworI2lmIChOU0VDX1BFUl9TRUMgJSBBSFopID09IDAKKwlkb19kaXYoeCwgKE5TRUNfUEVSX1NFQyAvIEFIWikpOworI2VsaWYgKEFIWiAlIDUxMikgPT0gMAorCXggKj0gQUhaLzUxMjsKKwlkb19kaXYoeCwgKE5TRUNfUEVSX1NFQyAvIDUxMikpOworI2Vsc2UKKwkvKgorICAgICAgICAgKiBtYXggcmVsYXRpdmUgZXJyb3IgNS43ZS04ICgxLjhzIHBlciB5ZWFyKSBmb3IgQUhaIDw9IDEwMjQsCisgICAgICAgICAqIG92ZXJmbG93IGFmdGVyIDY0Ljk5IHllYXJzLgorICAgICAgICAgKiBleGFjdCBmb3IgQUhaPTYwLCA3MiwgOTAsIDEyMCwgMTQ0LCAxODAsIDMwMCwgNjAwLCA5MDAsIC4uLgorICAgICAgICAgKi8KKwl4ICo9IDk7CisJZG9fZGl2KHgsICh1bnNpZ25lZCBsb25nKSgoOXVsbCAqIE5TRUNfUEVSX1NFQyArIChBSFovMikpCisJICAgICAgICAgICAgICAgICAgICAgICAgICAvIEFIWikpOworI2VuZGlmCisJcmV0dXJuIHg7Cit9CisKKyNlbmRpZiAgLyogX19LRVJORUwgKi8KKworI2VuZGlmCS8qIF9MSU5VWF9BQ0NUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYWNwaS5oIGIvaW5jbHVkZS9saW51eC9hY3BpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVmZTZkMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvYWNwaS5oCkBAIC0wLDAgKzEsNTM2IEBACisvKgorICogYWNwaS5oIC0gQUNQSSBJbnRlcmZhY2UKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgUGF1bCBEaWVmZW5iYXVnaCA8cGF1bC5zLmRpZWZlbmJhdWdoQGludGVsLmNvbT4KKyAqCisgKiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorICovCisKKyNpZm5kZWYgX0xJTlVYX0FDUElfSAorI2RlZmluZSBfTElOVVhfQUNQSV9ICisKKyNpZm5kZWYgX0xJTlVYCisjZGVmaW5lIF9MSU5VWAorI2VuZGlmCisKKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisKKyNpbmNsdWRlIDxhY3BpL2FjcGkuaD4KKyNpbmNsdWRlIDxhY3BpL2FjcGlfYnVzLmg+CisjaW5jbHVkZSA8YWNwaS9hY3BpX2RyaXZlcnMuaD4KKyNpbmNsdWRlIDxhc20vYWNwaS5oPgorCisKKyNpZmRlZiBDT05GSUdfQUNQSV9CT09UCisKK2VudW0gYWNwaV9pcnFfbW9kZWxfaWQgeworCUFDUElfSVJRX01PREVMX1BJQyA9IDAsCisJQUNQSV9JUlFfTU9ERUxfSU9BUElDLAorCUFDUElfSVJRX01PREVMX0lPU0FQSUMsCisJQUNQSV9JUlFfTU9ERUxfQ09VTlQKK307CisKK2V4dGVybiBlbnVtIGFjcGlfaXJxX21vZGVsX2lkCWFjcGlfaXJxX21vZGVsOworCisKKy8qIFJvb3QgU3lzdGVtIERlc2NyaXB0aW9uIFBvaW50ZXIgKFJTRFApICovCisKK3N0cnVjdCBhY3BpX3RhYmxlX3JzZHAgeworCWNoYXIJCQlzaWduYXR1cmVbOF07CisJdTgJCQljaGVja3N1bTsKKwljaGFyCQkJb2VtX2lkWzZdOworCXU4CQkJcmV2aXNpb247CisJdTMyCQkJcnNkdF9hZGRyZXNzOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBhY3BpMjBfdGFibGVfcnNkcCB7CisJY2hhcgkJCXNpZ25hdHVyZVs4XTsKKwl1OAkJCWNoZWNrc3VtOworCWNoYXIJCQlvZW1faWRbNl07CisJdTgJCQlyZXZpc2lvbjsKKwl1MzIJCQlyc2R0X2FkZHJlc3M7CisJdTMyCQkJbGVuZ3RoOworCXU2NAkJCXhzZHRfYWRkcmVzczsKKwl1OAkJCWV4dF9jaGVja3N1bTsKKwl1OAkJCXJlc2VydmVkWzNdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1OAkJCXR5cGU7CisJdTgJCQlsZW5ndGg7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBhY3BpX3RhYmxlX2VudHJ5X2hlYWRlcjsKKworLyogUm9vdCBTeXN0ZW0gRGVzY3JpcHRpb24gVGFibGUgKFJTRFQpICovCisKK3N0cnVjdCBhY3BpX3RhYmxlX3JzZHQgeworCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciBoZWFkZXI7CisJdTMyCQkJZW50cnlbOF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyogRXh0ZW5kZWQgU3lzdGVtIERlc2NyaXB0aW9uIFRhYmxlIChYU0RUKSAqLworCitzdHJ1Y3QgYWNwaV90YWJsZV94c2R0IHsKKwlzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgaGVhZGVyOworCXU2NAkJCWVudHJ5WzFdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qIEZpeGVkIEFDUEkgRGVzY3JpcHRpb24gVGFibGUgKEZBRFQpICovCisKK3N0cnVjdCBhY3BpX3RhYmxlX2ZhZHQgeworCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciBoZWFkZXI7CisJdTMyIGZhY3NfYWRkcjsKKwl1MzIgZHNkdF9hZGRyOworCS8qIC4uLiAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qIE11bHRpcGxlIEFQSUMgRGVzY3JpcHRpb24gVGFibGUgKE1BRFQpICovCisKK3N0cnVjdCBhY3BpX3RhYmxlX21hZHQgeworCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciBoZWFkZXI7CisJdTMyCQkJbGFwaWNfYWRkcmVzczsKKwlzdHJ1Y3QgeworCQl1MzIJCQlwY2F0X2NvbXBhdDoxOworCQl1MzIJCQlyZXNlcnZlZDozMTsKKwl9CQkJZmxhZ3M7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworZW51bSBhY3BpX21hZHRfZW50cnlfaWQgeworCUFDUElfTUFEVF9MQVBJQyA9IDAsCisJQUNQSV9NQURUX0lPQVBJQywKKwlBQ1BJX01BRFRfSU5UX1NSQ19PVlIsCisJQUNQSV9NQURUX05NSV9TUkMsCisJQUNQSV9NQURUX0xBUElDX05NSSwKKwlBQ1BJX01BRFRfTEFQSUNfQUREUl9PVlIsCisJQUNQSV9NQURUX0lPU0FQSUMsCisJQUNQSV9NQURUX0xTQVBJQywKKwlBQ1BJX01BRFRfUExBVF9JTlRfU1JDLAorCUFDUElfTUFEVF9FTlRSWV9DT1VOVAorfTsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXUxNgkJCXBvbGFyaXR5OjI7CisJdTE2CQkJdHJpZ2dlcjoyOworCXUxNgkJCXJlc2VydmVkOjEyOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgYWNwaV9pbnRlcnJ1cHRfZmxhZ3M7CisKK3N0cnVjdCBhY3BpX3RhYmxlX2xhcGljIHsKKwlhY3BpX3RhYmxlX2VudHJ5X2hlYWRlcgloZWFkZXI7CisJdTgJCQlhY3BpX2lkOworCXU4CQkJaWQ7CisJc3RydWN0IHsKKwkJdTMyCQkJZW5hYmxlZDoxOworCQl1MzIJCQlyZXNlcnZlZDozMTsKKwl9CQkJZmxhZ3M7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGFjcGlfdGFibGVfaW9hcGljIHsKKwlhY3BpX3RhYmxlX2VudHJ5X2hlYWRlcgloZWFkZXI7CisJdTgJCQlpZDsKKwl1OAkJCXJlc2VydmVkOworCXUzMgkJCWFkZHJlc3M7CisJdTMyCQkJZ2xvYmFsX2lycV9iYXNlOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBhY3BpX3RhYmxlX2ludF9zcmNfb3ZyIHsKKwlhY3BpX3RhYmxlX2VudHJ5X2hlYWRlcgloZWFkZXI7CisJdTgJCQlidXM7CisJdTgJCQlidXNfaXJxOworCXUzMgkJCWdsb2JhbF9pcnE7CisJYWNwaV9pbnRlcnJ1cHRfZmxhZ3MJZmxhZ3M7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGFjcGlfdGFibGVfbm1pX3NyYyB7CisJYWNwaV90YWJsZV9lbnRyeV9oZWFkZXIJaGVhZGVyOworCWFjcGlfaW50ZXJydXB0X2ZsYWdzCWZsYWdzOworCXUzMgkJCWdsb2JhbF9pcnE7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGFjcGlfdGFibGVfbGFwaWNfbm1pIHsKKwlhY3BpX3RhYmxlX2VudHJ5X2hlYWRlcgloZWFkZXI7CisJdTgJCQlhY3BpX2lkOworCWFjcGlfaW50ZXJydXB0X2ZsYWdzCWZsYWdzOworCXU4CQkJbGludDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgYWNwaV90YWJsZV9sYXBpY19hZGRyX292ciB7CisJYWNwaV90YWJsZV9lbnRyeV9oZWFkZXIJaGVhZGVyOworCXU4CQkJcmVzZXJ2ZWRbMl07CisJdTY0CQkJYWRkcmVzczsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgYWNwaV90YWJsZV9pb3NhcGljIHsKKwlhY3BpX3RhYmxlX2VudHJ5X2hlYWRlcgloZWFkZXI7CisJdTgJCQlpZDsKKwl1OAkJCXJlc2VydmVkOworCXUzMgkJCWdsb2JhbF9pcnFfYmFzZTsKKwl1NjQJCQlhZGRyZXNzOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBhY3BpX3RhYmxlX2xzYXBpYyB7CisJYWNwaV90YWJsZV9lbnRyeV9oZWFkZXIJaGVhZGVyOworCXU4CQkJYWNwaV9pZDsKKwl1OAkJCWlkOworCXU4CQkJZWlkOworCXU4CQkJcmVzZXJ2ZWRbM107CisJc3RydWN0IHsKKwkJdTMyCQkJZW5hYmxlZDoxOworCQl1MzIJCQlyZXNlcnZlZDozMTsKKwl9CQkJZmxhZ3M7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGFjcGlfdGFibGVfcGxhdF9pbnRfc3JjIHsKKwlhY3BpX3RhYmxlX2VudHJ5X2hlYWRlcgloZWFkZXI7CisJYWNwaV9pbnRlcnJ1cHRfZmxhZ3MJZmxhZ3M7CisJdTgJCQl0eXBlOwkvKiBTZWUgYWNwaV9pbnRlcnJ1cHRfdHlwZSAqLworCXU4CQkJaWQ7CisJdTgJCQllaWQ7CisJdTgJCQlpb3NhcGljX3ZlY3RvcjsKKwl1MzIJCQlnbG9iYWxfaXJxOworCXUzMgkJCXJlc2VydmVkOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK2VudW0gYWNwaV9pbnRlcnJ1cHRfaWQgeworCUFDUElfSU5URVJSVVBUX1BNSQk9IDEsCisJQUNQSV9JTlRFUlJVUFRfSU5JVCwKKwlBQ1BJX0lOVEVSUlVQVF9DUEVJLAorCUFDUElfSU5URVJSVVBUX0NPVU5UCit9OworCisjZGVmaW5lCUFDUElfU1BBQ0VfTUVNCQkwCisKK3N0cnVjdCBhY3BpX2dlbl9yZWdhZGRyIHsKKwl1OCAgc3BhY2VfaWQ7CisJdTggIGJpdF93aWR0aDsKKwl1OCAgYml0X29mZnNldDsKKwl1OCAgcmVzdjsKKwl1MzIgYWRkcmw7CisJdTMyIGFkZHJoOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBhY3BpX3RhYmxlX2hwZXQgeworCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciBoZWFkZXI7CisJdTMyIGlkOworCXN0cnVjdCBhY3BpX2dlbl9yZWdhZGRyIGFkZHI7CisJdTggbnVtYmVyOworCXUxNiBtaW5fdGljazsKKwl1OCBwYWdlX3Byb3RlY3Q7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyoKKyAqIFNpbXBsZSBCb290IEZsYWdzCisgKiBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vd2hkYy9od2Rldi9yZXNvdXJjZXMvc3BlY3Mvc2ltcF9iaW9zLm1zcHgKKyAqLworc3RydWN0IGFjcGlfdGFibGVfc2JmCit7CisJdTggc2JmX3NpZ25hdHVyZVs0XTsKKwl1MzIgc2JmX2xlbjsKKwl1OCBzYmZfcmV2aXNpb247CisJdTggc2JmX2NzdW07CisJdTggc2JmX29lbWlkWzZdOworCXU4IHNiZl9vZW10YWJsZVs4XTsKKwl1OCBzYmZfcmV2ZGF0YVs0XTsKKwl1OCBzYmZfY3JlYXRvcls0XTsKKwl1OCBzYmZfY3JlYXJldls0XTsKKwl1OCBzYmZfY21vczsKKwl1OCBzYmZfc3BhcmVbM107Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyoKKyAqIFN5c3RlbSBSZXNvdXJjZSBBZmZpbml0eSBUYWJsZSAoU1JBVCkKKyAqIGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS93aGRjL2h3ZGV2L3BsYXRmb3JtL3Byb2MvU1JBVC5tc3B4CisgKi8KKworc3RydWN0IGFjcGlfdGFibGVfc3JhdCB7CisJc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyIGhlYWRlcjsKKwl1MzIJCQl0YWJsZV9yZXZpc2lvbjsKKwl1NjQJCQlyZXNlcnZlZDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitlbnVtIGFjcGlfc3JhdF9lbnRyeV9pZCB7CisJQUNQSV9TUkFUX1BST0NFU1NPUl9BRkZJTklUWSA9IDAsCisJQUNQSV9TUkFUX01FTU9SWV9BRkZJTklUWSwKKwlBQ1BJX1NSQVRfRU5UUllfQ09VTlQKK307CisKK3N0cnVjdCBhY3BpX3RhYmxlX3Byb2Nlc3Nvcl9hZmZpbml0eSB7CisJYWNwaV90YWJsZV9lbnRyeV9oZWFkZXIJaGVhZGVyOworCXU4CQkJcHJveGltaXR5X2RvbWFpbjsKKwl1OAkJCWFwaWNfaWQ7CisJc3RydWN0IHsKKwkJdTMyCQkJZW5hYmxlZDoxOworCQl1MzIJCQlyZXNlcnZlZDozMTsKKwl9CQkJZmxhZ3M7CisJdTgJCQlsc2FwaWNfZWlkOworCXU4CQkJcmVzZXJ2ZWRbN107Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGFjcGlfdGFibGVfbWVtb3J5X2FmZmluaXR5IHsKKwlhY3BpX3RhYmxlX2VudHJ5X2hlYWRlcgloZWFkZXI7CisJdTgJCQlwcm94aW1pdHlfZG9tYWluOworCXU4CQkJcmVzZXJ2ZWQxWzVdOworCXUzMgkJCWJhc2VfYWRkcl9sbzsKKwl1MzIJCQliYXNlX2FkZHJfaGk7CisJdTMyCQkJbGVuZ3RoX2xvOworCXUzMgkJCWxlbmd0aF9oaTsKKwl1MzIJCQltZW1vcnlfdHlwZTsJLyogU2VlIGFjcGlfYWRkcmVzc19yYW5nZV9pZCAqLworCXN0cnVjdCB7CisJCXUzMgkJCWVuYWJsZWQ6MTsKKwkJdTMyCQkJaG90X3BsdWdnYWJsZToxOworCQl1MzIJCQlyZXNlcnZlZDozMDsKKwl9CQkJZmxhZ3M7CisJdTY0CQkJcmVzZXJ2ZWQyOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK2VudW0gYWNwaV9hZGRyZXNzX3JhbmdlX2lkIHsKKwlBQ1BJX0FERFJFU1NfUkFOR0VfTUVNT1JZID0gMSwKKwlBQ1BJX0FERFJFU1NfUkFOR0VfUkVTRVJWRUQgPSAyLAorCUFDUElfQUREUkVTU19SQU5HRV9BQ1BJID0gMywKKwlBQ1BJX0FERFJFU1NfUkFOR0VfTlZTCT0gNCwKKwlBQ1BJX0FERFJFU1NfUkFOR0VfQ09VTlQKK307CisKKy8qCisgKiBTeXN0ZW0gTG9jYWxpdHkgSW5mb3JtYXRpb24gVGFibGUgKFNMSVQpCisgKiAgIHNlZSBodHRwOi8vZGV2cmVzb3VyY2UuaHAuY29tL2RldnJlc291cmNlL2RvY3MvdGVjaHBhcGVycy9pYTY0L3NsaXQucGRmCisgKi8KKworc3RydWN0IGFjcGlfdGFibGVfc2xpdCB7CisJc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyIGhlYWRlcjsKKwl1NjQJCQlsb2NhbGl0aWVzOworCXU4CQkJZW50cnlbMV07CS8qIHJlYWwgc2l6ZSA9IGxvY2FsaXRpZXNeMiAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qIFNtYXJ0IEJhdHRlcnkgRGVzY3JpcHRpb24gVGFibGUgKFNCU1QpICovCisKK3N0cnVjdCBhY3BpX3RhYmxlX3Nic3QgeworCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciBoZWFkZXI7CisJdTMyCQkJd2FybmluZzsJLyogV2FybiB1c2VyICovCisJdTMyCQkJbG93OwkJLyogQ3JpdGljYWwgc2xlZXAgKi8KKwl1MzIJCQljcml0aWNhbDsJLyogQ3JpdGljYWwgc2h1dGRvd24gKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKiBFbWJlZGRlZCBDb250cm9sbGVyIEJvb3QgUmVzb3VyY2VzIFRhYmxlIChFQ0RUKSAqLworCitzdHJ1Y3QgYWNwaV90YWJsZV9lY2R0IHsKKwlzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgCWhlYWRlcjsKKwlzdHJ1Y3QgYWNwaV9nZW5lcmljX2FkZHJlc3MJZWNfY29udHJvbDsKKwlzdHJ1Y3QgYWNwaV9nZW5lcmljX2FkZHJlc3MJZWNfZGF0YTsKKwl1MzIJCQkJdWlkOworCXU4CQkJCWdwZV9iaXQ7CisJY2hhcgkJCQllY19pZFswXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKiBQQ0kgTU1DT05GSUcgKi8KKworc3RydWN0IGFjcGlfdGFibGVfbWNmZyB7CisJc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyCWhlYWRlcjsKKwl1OAkJCQlyZXNlcnZlZFs4XTsKKwl1MzIJCQkJYmFzZV9hZGRyZXNzOworCXUzMgkJCQliYXNlX3Jlc2VydmVkOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qIFRhYmxlIEhhbmRsZXJzICovCisKK2VudW0gYWNwaV90YWJsZV9pZCB7CisJQUNQSV9UQUJMRV9VTktOT1dOID0gMCwKKwlBQ1BJX0FQSUMsCisJQUNQSV9CT09ULAorCUFDUElfREJHUCwKKwlBQ1BJX0RTRFQsCisJQUNQSV9FQ0RULAorCUFDUElfRVREVCwKKwlBQ1BJX0ZBRFQsCisJQUNQSV9GQUNTLAorCUFDUElfT0VNWCwKKwlBQ1BJX1BTRFQsCisJQUNQSV9TQlNULAorCUFDUElfU0xJVCwKKwlBQ1BJX1NQQ1IsCisJQUNQSV9TUkFULAorCUFDUElfU1NEVCwKKwlBQ1BJX1NQTUksCisJQUNQSV9IUEVULAorCUFDUElfTUNGRywKKwlBQ1BJX1RBQkxFX0NPVU5UCit9OworCit0eXBlZGVmIGludCAoKmFjcGlfdGFibGVfaGFuZGxlcikgKHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpOworCitleHRlcm4gYWNwaV90YWJsZV9oYW5kbGVyIGFjcGlfdGFibGVfb3BzW0FDUElfVEFCTEVfQ09VTlRdOworCit0eXBlZGVmIGludCAoKmFjcGlfbWFkdF9lbnRyeV9oYW5kbGVyKSAoYWNwaV90YWJsZV9lbnRyeV9oZWFkZXIgKmhlYWRlciwgY29uc3QgdW5zaWduZWQgbG9uZyBlbmQpOworCitjaGFyICogX19hY3BpX21hcF90YWJsZSAodW5zaWduZWQgbG9uZyBwaHlzX2FkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7Cit1bnNpZ25lZCBsb25nIGFjcGlfZmluZF9yc2RwICh2b2lkKTsKK2ludCBhY3BpX2Jvb3RfaW5pdCAodm9pZCk7CitpbnQgYWNwaV9ib290X3RhYmxlX2luaXQgKHZvaWQpOworaW50IGFjcGlfbnVtYV9pbml0ICh2b2lkKTsKKworaW50IGFjcGlfdGFibGVfaW5pdCAodm9pZCk7CitpbnQgYWNwaV90YWJsZV9wYXJzZSAoZW51bSBhY3BpX3RhYmxlX2lkIGlkLCBhY3BpX3RhYmxlX2hhbmRsZXIgaGFuZGxlcik7CitpbnQgYWNwaV9nZXRfdGFibGVfaGVhZGVyX2Vhcmx5IChlbnVtIGFjcGlfdGFibGVfaWQgaWQsIHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqKmhlYWRlcik7CitpbnQgYWNwaV90YWJsZV9wYXJzZV9tYWR0IChlbnVtIGFjcGlfbWFkdF9lbnRyeV9pZCBpZCwgYWNwaV9tYWR0X2VudHJ5X2hhbmRsZXIgaGFuZGxlciwgdW5zaWduZWQgaW50IG1heF9lbnRyaWVzKTsKK2ludCBhY3BpX3RhYmxlX3BhcnNlX3NyYXQgKGVudW0gYWNwaV9zcmF0X2VudHJ5X2lkIGlkLCBhY3BpX21hZHRfZW50cnlfaGFuZGxlciBoYW5kbGVyLCB1bnNpZ25lZCBpbnQgbWF4X2VudHJpZXMpOwordm9pZCBhY3BpX3RhYmxlX3ByaW50IChzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKmhlYWRlciwgdW5zaWduZWQgbG9uZyBwaHlzX2FkZHIpOwordm9pZCBhY3BpX3RhYmxlX3ByaW50X21hZHRfZW50cnkgKGFjcGlfdGFibGVfZW50cnlfaGVhZGVyICptYWR0KTsKK3ZvaWQgYWNwaV90YWJsZV9wcmludF9zcmF0X2VudHJ5IChhY3BpX3RhYmxlX2VudHJ5X2hlYWRlciAqc3JhdCk7CisKKy8qIHRoZSBmb2xsb3dpbmcgZm91ciBmdW5jdGlvbnMgYXJlIGFyY2hpdGVjdHVyZS1kZXBlbmRlbnQgKi8KK3ZvaWQgYWNwaV9udW1hX3NsaXRfaW5pdCAoc3RydWN0IGFjcGlfdGFibGVfc2xpdCAqc2xpdCk7Cit2b2lkIGFjcGlfbnVtYV9wcm9jZXNzb3JfYWZmaW5pdHlfaW5pdCAoc3RydWN0IGFjcGlfdGFibGVfcHJvY2Vzc29yX2FmZmluaXR5ICpwYSk7Cit2b2lkIGFjcGlfbnVtYV9tZW1vcnlfYWZmaW5pdHlfaW5pdCAoc3RydWN0IGFjcGlfdGFibGVfbWVtb3J5X2FmZmluaXR5ICptYSk7Cit2b2lkIGFjcGlfbnVtYV9hcmNoX2ZpeHVwKHZvaWQpOworCisjaWZkZWYgQ09ORklHX0FDUElfSE9UUExVR19DUFUKKy8qIEFyY2ggZGVwZW5kZW50IGZ1bmN0aW9ucyBmb3IgY3B1IGhvdHBsdWcgc3VwcG9ydCAqLworaW50IGFjcGlfbWFwX2xzYXBpYyhhY3BpX2hhbmRsZSBoYW5kbGUsIGludCAqcGNwdSk7CitpbnQgYWNwaV91bm1hcF9sc2FwaWMoaW50IGNwdSk7CisjZW5kaWYgLyogQ09ORklHX0FDUElfSE9UUExVR19DUFUgKi8KKworZXh0ZXJuIGludCBhY3BpX21wX2NvbmZpZzsKKworZXh0ZXJuIHUzMiBwY2lfbW1jZmdfYmFzZV9hZGRyOworCitleHRlcm4gaW50IHNiZl9wb3J0IDsKKworI2Vsc2UJLyohQ09ORklHX0FDUElfQk9PVCovCisKKyNkZWZpbmUgYWNwaV9tcF9jb25maWcJMAorCitzdGF0aWMgaW5saW5lIGludCBhY3BpX2Jvb3RfaW5pdCh2b2lkKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBhY3BpX2Jvb3RfdGFibGVfaW5pdCh2b2lkKQoreworCXJldHVybiAwOworfQorCisjZW5kaWYgCS8qIUNPTkZJR19BQ1BJX0JPT1QqLworCit1bnNpZ25lZCBpbnQgYWNwaV9yZWdpc3Rlcl9nc2kgKHUzMiBnc2ksIGludCBlZGdlX2xldmVsLCBpbnQgYWN0aXZlX2hpZ2hfbG93KTsKK2ludCBhY3BpX2dzaV90b19pcnEgKHUzMiBnc2ksIHVuc2lnbmVkIGludCAqaXJxKTsKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gdW5kb2VzIHRoZSBlZmZlY3Qgb2Ygb25lIGNhbGwgdG8gYWNwaV9yZWdpc3Rlcl9nc2koKS4KKyAqIElmIHRoaXMgbWF0Y2hlcyB0aGUgbGFzdCByZWdpc3RyYXRpb24sIGFueSBJUlEgcmVzb3VyY2VzIGZvciBnc2kKKyAqIGFyZSBmcmVlZC4KKyAqLworI2lmZGVmIENPTkZJR19BQ1BJX0RFQUxMT0NBVEVfSVJRCit2b2lkIGFjcGlfdW5yZWdpc3Rlcl9nc2kgKHUzMiBnc2kpOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQUNQSV9QQ0kKKworc3RydWN0IGFjcGlfcHJ0X2VudHJ5IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCW5vZGU7CisJc3RydWN0IGFjcGlfcGNpX2lkCWlkOworCXU4CQkJcGluOworCXN0cnVjdCB7CisJCWFjcGlfaGFuZGxlCQloYW5kbGU7CisJCXUzMgkJCWluZGV4OworCX0JCQlsaW5rOworCXUzMgkJCWlycTsKK307CisKK3N0cnVjdCBhY3BpX3BydF9saXN0IHsKKwlpbnQJCQljb3VudDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWVudHJpZXM7Cit9OworCitzdHJ1Y3QgcGNpX2RldjsKKworaW50IGFjcGlfcGNpX2lycV9lbmFibGUgKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwordm9pZCBhY3BpX3BlbmFsaXplX2lzYV9pcnEoaW50IGlycSk7CisKKyNpZmRlZiBDT05GSUdfQUNQSV9ERUFMTE9DQVRFX0lSUQordm9pZCBhY3BpX3BjaV9pcnFfZGlzYWJsZSAoc3RydWN0IHBjaV9kZXYgKmRldik7CisjZW5kaWYKKworc3RydWN0IGFjcGlfcGNpX2RyaXZlciB7CisJc3RydWN0IGFjcGlfcGNpX2RyaXZlciAqbmV4dDsKKwlpbnQgKCphZGQpKGFjcGlfaGFuZGxlIGhhbmRsZSk7CisJdm9pZCAoKnJlbW92ZSkoYWNwaV9oYW5kbGUgaGFuZGxlKTsKK307CisKK2ludCBhY3BpX3BjaV9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IGFjcGlfcGNpX2RyaXZlciAqZHJpdmVyKTsKK3ZvaWQgYWNwaV9wY2lfdW5yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IGFjcGlfcGNpX2RyaXZlciAqZHJpdmVyKTsKKworI2VuZGlmIC8qQ09ORklHX0FDUElfUENJKi8KKworI2lmZGVmIENPTkZJR19BQ1BJX0VDCisKK2V4dGVybiBpbnQgZWNfcmVhZCh1OCBhZGRyLCB1OCAqdmFsKTsKK2V4dGVybiBpbnQgZWNfd3JpdGUodTggYWRkciwgdTggdmFsKTsKKworI2VuZGlmIC8qQ09ORklHX0FDUElfRUMqLworCisjaWZkZWYgQ09ORklHX0FDUElfSU5URVJQUkVURVIKKworZXh0ZXJuIGludCBhY3BpX2JsYWNrbGlzdGVkKHZvaWQpOworZXh0ZXJuIHZvaWQgYWNwaV9iaW9zX3llYXIoY2hhciAqcyk7CisKKyNlbHNlIC8qIUNPTkZJR19BQ1BJX0lOVEVSUFJFVEVSKi8KKworc3RhdGljIGlubGluZSBpbnQgYWNwaV9ibGFja2xpc3RlZCh2b2lkKQoreworCXJldHVybiAwOworfQorCisjZW5kaWYgLyohQ09ORklHX0FDUElfSU5URVJQUkVURVIqLworCisjZGVmaW5lCUFDUElfQ1NUQVRFX0xJTUlUX0RFRklORUQJLyogZm9yIGRyaXZlciBidWlsZHMgKi8KKyNpZmRlZglDT05GSUdfQUNQSQorCisvKgorICogU2V0IGhpZ2hlc3QgbGVnYWwgQy1zdGF0ZQorICogMDogQzAgb2theSwgYnV0IG5vdCBDMQorICogMTogQzEgb2theSwgYnV0IG5vdCBDMgorICogMjogQzIgb2theSwgYnV0IG5vdCBDMyBldGMuCisgKi8KKworZXh0ZXJuIHVuc2lnbmVkIGludCBtYXhfY3N0YXRlOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBhY3BpX2dldF9jc3RhdGVfbGltaXQodm9pZCkKK3sKKwlyZXR1cm4gbWF4X2NzdGF0ZTsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBhY3BpX3NldF9jc3RhdGVfbGltaXQodW5zaWduZWQgaW50IG5ld19saW1pdCkKK3sKKwltYXhfY3N0YXRlID0gbmV3X2xpbWl0OworCXJldHVybjsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBhY3BpX2dldF9jc3RhdGVfbGltaXQodm9pZCkgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSB2b2lkIGFjcGlfc2V0X2NzdGF0ZV9saW1pdCh1bnNpZ25lZCBpbnQgbmV3X2xpbWl0KSB7IHJldHVybjsgfQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQUNQSV9OVU1BCitpbnQgYWNwaV9nZXRfcHhtKGFjcGlfaGFuZGxlIGhhbmRsZSk7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgYWNwaV9nZXRfcHhtKGFjcGlfaGFuZGxlIGhhbmRsZSkKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitleHRlcm4gaW50IHBucGFjcGlfZGlzYWJsZWQ7CisKKyNlbmRpZiAvKl9MSU5VWF9BQ1BJX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hZGIuaCBiL2luY2x1ZGUvbGludXgvYWRiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTlmZGM2MwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvYWRiLmgKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBEZWZpbml0aW9ucyBmb3IgQURCIChBcHBsZSBEZXNrdG9wIEJ1cykgc3VwcG9ydC4KKyAqLworI2lmbmRlZiBfX0FEQl9ICisjZGVmaW5lIF9fQURCX0gKKworLyogQURCIGNvbW1hbmRzICovCisjZGVmaW5lIEFEQl9CVVNSRVNFVAkJMAorI2RlZmluZSBBREJfRkxVU0goaWQpCQkoMHgwMSB8ICgoaWQpIDw8IDQpKQorI2RlZmluZSBBREJfV1JJVEVSRUcoaWQsIHJlZykJKDB4MDggfCAocmVnKSB8ICgoaWQpIDw8IDQpKQorI2RlZmluZSBBREJfUkVBRFJFRyhpZCwgcmVnKQkoMHgwQyB8IChyZWcpIHwgKChpZCkgPDwgNCkpCisKKy8qIEFEQiBkZWZhdWx0IGRldmljZSBJRHMgKHVwcGVyIDQgYml0cyBvZiBBREIgY29tbWFuZCBieXRlKSAqLworI2RlZmluZSBBREJfRE9OR0xFCTEJLyogInNvZnR3YXJlIGV4ZWN1dGlvbiBjb250cm9sIiBkZXZpY2VzICovCisjZGVmaW5lIEFEQl9LRVlCT0FSRAkyCisjZGVmaW5lIEFEQl9NT1VTRQkzCisjZGVmaW5lIEFEQl9UQUJMRVQJNAorI2RlZmluZSBBREJfTU9ERU0JNQorI2RlZmluZSBBREJfTUlTQwk3CS8qIG1heWJlIGEgbW9uaXRvciAqLworCisjZGVmaW5lIEFEQl9SRVRfT0sJMAorI2RlZmluZSBBREJfUkVUX1RJTUVPVVQJMworCisvKiBUaGUga2luZCBvZiBBREIgcmVxdWVzdC4gVGhlIGNvbnRyb2xsZXIgbWF5IGVtdWxhdGUgc29tZQorICAgb3IgYWxsIG9mIHRob3NlIENVREEvUE1VIHBhY2tldCBraW5kcyAqLworI2RlZmluZSBBREJfUEFDS0VUCTAKKyNkZWZpbmUgQ1VEQV9QQUNLRVQJMQorI2RlZmluZSBFUlJPUl9QQUNLRVQJMgorI2RlZmluZSBUSU1FUl9QQUNLRVQJMworI2RlZmluZSBQT1dFUl9QQUNLRVQJNAorI2RlZmluZSBNQUNJSUNfUEFDS0VUCTUKKyNkZWZpbmUgUE1VX1BBQ0tFVAk2CisjZGVmaW5lIEFEQl9RVUVSWQk3CisKKy8qIEFEQiBxdWVyaWVzICovCisKKy8qIEFEQl9RVUVSWV9HRVRERVZJTkZPCisgKiBRdWVyeSBBREIgc2xvdCBmb3IgZGV2aWNlIHByZXNlbmNlCisgKiBkYXRhWzJdID0gaWQsIHJlcFswXSA9IG9yaWcgYWRkciwgcmVwWzFdID0gaGFuZGxlcl9pZAorICovCisjZGVmaW5lIEFEQl9RVUVSWV9HRVRERVZJTkZPCTEKKworI2lmZGVmIF9fS0VSTkVMX18KKworc3RydWN0IGFkYl9yZXF1ZXN0IHsKKwl1bnNpZ25lZCBjaGFyIGRhdGFbMzJdOworCWludCBuYnl0ZXM7CisJdW5zaWduZWQgY2hhciByZXBseVszMl07CisJaW50IHJlcGx5X2xlbjsKKwl1bnNpZ25lZCBjaGFyIHJlcGx5X2V4cGVjdGVkOworCXVuc2lnbmVkIGNoYXIgc2VudDsKKwl1bnNpZ25lZCBjaGFyIGNvbXBsZXRlOworCXZvaWQgKCpkb25lKShzdHJ1Y3QgYWRiX3JlcXVlc3QgKik7CisJdm9pZCAqYXJnOworCXN0cnVjdCBhZGJfcmVxdWVzdCAqbmV4dDsKK307CisKK3N0cnVjdCBhZGJfaWRzIHsKKwlpbnQgbmlkczsKKwl1bnNpZ25lZCBjaGFyIGlkWzE2XTsKK307CisKKy8qIFN0cnVjdHVyZSB3aGljaCBlbmNhcHN1bGF0ZXMgYSBsb3ctbGV2ZWwgQURCIGRyaXZlciAqLworCitzdHJ1Y3QgYWRiX2RyaXZlciB7CisJY2hhciBuYW1lWzE2XTsKKwlpbnQgKCpwcm9iZSkodm9pZCk7CisJaW50ICgqaW5pdCkodm9pZCk7CisJaW50ICgqc2VuZF9yZXF1ZXN0KShzdHJ1Y3QgYWRiX3JlcXVlc3QgKnJlcSwgaW50IHN5bmMpOworCWludCAoKmF1dG9wb2xsKShpbnQgZGV2cyk7CisJdm9pZCAoKnBvbGwpKHZvaWQpOworCWludCAoKnJlc2V0X2J1cykodm9pZCk7Cit9OworCisvKiBWYWx1ZXMgZm9yIGFkYl9yZXF1ZXN0IGZsYWdzICovCisjZGVmaW5lIEFEQlJFUV9SRVBMWQkxCS8qIGV4cGVjdCByZXBseSAqLworI2RlZmluZSBBREJSRVFfU1lOQwkyCS8qIHBvbGwgdW50aWwgZG9uZSAqLworI2RlZmluZSBBREJSRVFfTk9TRU5ECTQJLyogYnVpbGQgdGhlIHJlcXVlc3QsIGJ1dCBkb24ndCBzZW5kIGl0ICovCisKKy8qIE1lc3NhZ2VzIHNlbnQgdGhydSB0aGUgY2xpZW50X2xpc3Qgbm90aWZpZXIuIFlvdSBzaG91bGQgTk9UIHN0b3AKKyAgIHRoZSBvcGVyYXRpb24sIGF0IGxlYXN0IG5vdCB3aXRoIHRoaXMgdmVyc2lvbiAqLworZW51bSBhZGJfbWVzc2FnZSB7CisgICAgQURCX01TR19QT1dFUkRPV04sCS8qIEN1cnJlbnRseSBjYWxsZWQgYmVmb3JlIHNsZWVwIG9ubHkgKi8KKyAgICBBREJfTVNHX1BSRV9SRVNFVCwJLyogQ2FsbGVkIGJlZm9yZSByZXNldHRpbmcgdGhlIGJ1cyAqLworICAgIEFEQl9NU0dfUE9TVF9SRVNFVAkvKiBDYWxsZWQgYWZ0ZXIgcmVzZXR0aW5nIHRoZSBidXMgKHJlLWRvIGluaXQgJiByZWdpc3RlcikgKi8KK307CitleHRlcm4gc3RydWN0IGFkYl9kcml2ZXIgKmFkYl9jb250cm9sbGVyOworZXh0ZXJuIHN0cnVjdCBub3RpZmllcl9ibG9jayAqYWRiX2NsaWVudF9saXN0OworCitpbnQgYWRiX3JlcXVlc3Qoc3RydWN0IGFkYl9yZXF1ZXN0ICpyZXEsIHZvaWQgKCpkb25lKShzdHJ1Y3QgYWRiX3JlcXVlc3QgKiksCisJCWludCBmbGFncywgaW50IG5ieXRlcywgLi4uKTsKK2ludCBhZGJfcmVnaXN0ZXIoaW50IGRlZmF1bHRfaWQsaW50IGhhbmRsZXJfaWQsc3RydWN0IGFkYl9pZHMgKmlkcywKKwkJIHZvaWQgKCpoYW5kbGVyKSh1bnNpZ25lZCBjaGFyICosIGludCwgc3RydWN0IHB0X3JlZ3MgKiwgaW50KSk7CitpbnQgYWRiX3VucmVnaXN0ZXIoaW50IGluZGV4KTsKK3ZvaWQgYWRiX3BvbGwodm9pZCk7Cit2b2lkIGFkYl9pbnB1dCh1bnNpZ25lZCBjaGFyICosIGludCwgc3RydWN0IHB0X3JlZ3MgKiwgaW50KTsKK2ludCBhZGJfcmVzZXRfYnVzKHZvaWQpOworCitpbnQgYWRiX3RyeV9oYW5kbGVyX2NoYW5nZShpbnQgYWRkcmVzcywgaW50IG5ld19pZCk7CitpbnQgYWRiX2dldF9pbmZvcyhpbnQgYWRkcmVzcywgaW50ICpvcmlnaW5hbF9hZGRyZXNzLCBpbnQgKmhhbmRsZXJfaWQpOworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX19BREJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hZGZzX2ZzLmggYi9pbmNsdWRlL2xpbnV4L2FkZnNfZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTVkNTBjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9hZGZzX2ZzLmgKQEAgLTAsMCArMSw3NiBAQAorI2lmbmRlZiBfQURGU19GU19ICisjZGVmaW5lIF9BREZTX0ZTX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qCisgKiBEaXNjIFJlY29yZCBhdCBkaXNjIGFkZHJlc3MgMHhjMDAKKyAqLworc3RydWN0IGFkZnNfZGlzY3JlY29yZCB7CisgICAgX191OCAgbG9nMnNlY3NpemU7CisgICAgX191OCAgc2Vjc3BlcnRyYWNrOworICAgIF9fdTggIGhlYWRzOworICAgIF9fdTggIGRlbnNpdHk7CisgICAgX191OCAgaWRsZW47CisgICAgX191OCAgbG9nMmJwbWI7CisgICAgX191OCAgc2tldzsKKyAgICBfX3U4ICBib290b3B0aW9uOworICAgIF9fdTggIGxvd3NlY3RvcjsKKyAgICBfX3U4ICBuem9uZXM7CisgICAgX19sZTE2IHpvbmVfc3BhcmU7CisgICAgX19sZTMyIHJvb3Q7CisgICAgX19sZTMyIGRpc2Nfc2l6ZTsKKyAgICBfX2xlMTYgZGlzY19pZDsKKyAgICBfX3U4ICBkaXNjX25hbWVbMTBdOworICAgIF9fbGUzMiBkaXNjX3R5cGU7CisgICAgX19sZTMyIGRpc2Nfc2l6ZV9oaWdoOworICAgIF9fdTggIGxvZzJzaGFyZXNpemU6NDsKKyAgICBfX3U4ICB1bnVzZWQ0MDo0OworICAgIF9fdTggIGJpZ19mbGFnOjE7CisgICAgX191OCAgdW51c2VkNDE6MTsKKyAgICBfX3U4ICBuem9uZXNfaGlnaDsKKyAgICBfX2xlMzIgZm9ybWF0X3ZlcnNpb247CisgICAgX19sZTMyIHJvb3Rfc2l6ZTsKKyAgICBfX3U4ICB1bnVzZWQ1Mls2MCAtIDUyXTsKK307CisKKyNkZWZpbmUgQURGU19ESVNDUkVDT1JECQkoMHhjMDApCisjZGVmaW5lIEFERlNfRFJfT0ZGU0VUCQkoMHgxYzApCisjZGVmaW5lIEFERlNfRFJfU0laRQkJIDYwCisjZGVmaW5lIEFERlNfRFJfU0laRV9CSVRTCShBREZTX0RSX1NJWkUgPDwgMykKKyNkZWZpbmUgQURGU19TVVBFUl9NQUdJQwkgMHhhZGY1CisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8bGludXgvYWRmc19mc19pLmg+CisjaW5jbHVkZSA8bGludXgvYWRmc19mc19zYi5oPgorLyoKKyAqIENhbGN1bGF0ZSB0aGUgYm9vdCBibG9jayBjaGVja3N1bSBvbiBhbiBBREZTIGRyaXZlLiAgTm90ZSB0aGF0IHRoaXMgd2lsbAorICogYXBwZWFyIHRvIGJlIGNvcnJlY3QgaWYgdGhlIHNlY3RvciBjb250YWlucyBhbGwgemVyb3MsIHNvIGFsc28gY2hlY2sgdGhhdAorICogdGhlIGRpc2sgc2l6ZSBpcyBub24temVybyEhIQorICovCitzdGF0aWMgaW5saW5lIGludCBhZGZzX2NoZWNrYmJsayh1bnNpZ25lZCBjaGFyICpwdHIpCit7CisJdW5zaWduZWQgaW50IHJlc3VsdCA9IDA7CisJdW5zaWduZWQgY2hhciAqcCA9IHB0ciArIDUxMTsKKworCWRvIHsKKwkgICAgICAgIHJlc3VsdCA9IChyZXN1bHQgJiAweGZmKSArIChyZXN1bHQgPj4gOCk7CisgICAgICAgIAlyZXN1bHQgPSByZXN1bHQgKyAqLS1wOworCX0gd2hpbGUgKHAgIT0gcHRyKTsKKworCXJldHVybiAocmVzdWx0ICYgMHhmZikgIT0gcHRyWzUxMV07Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGFkZnNfc2JfaW5mbyAqQURGU19TQihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCXJldHVybiBzYi0+c19mc19pbmZvOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBhZGZzX2lub2RlX2luZm8gKkFERlNfSShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXJldHVybiBjb250YWluZXJfb2YoaW5vZGUsIHN0cnVjdCBhZGZzX2lub2RlX2luZm8sIHZmc19pbm9kZSk7Cit9CisKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYWRmc19mc19pLmggYi9pbmNsdWRlL2xpbnV4L2FkZnNfZnNfaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiNTQzMDMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2FkZnNfZnNfaS5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9saW51eC9hZGZzX2ZzX2kuaAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NyBSdXNzZWxsIEtpbmcKKyAqLworCisjaWZuZGVmIF9BREZTX0ZTX0kKKyNkZWZpbmUgX0FERlNfRlNfSQorCisvKgorICogYWRmcyBmaWxlIHN5c3RlbSBpbm9kZSBkYXRhIGluIG1lbW9yeQorICovCitzdHJ1Y3QgYWRmc19pbm9kZV9pbmZvIHsKKwlsb2ZmX3QJCW1tdV9wcml2YXRlOworCXVuc2lnbmVkIGxvbmcJcGFyZW50X2lkOwkvKiBvYmplY3QgaWQgb2YgcGFyZW50CQkqLworCV9fdTMyCQlsb2FkYWRkcjsJLyogUklTQyBPUyBsb2FkIGFkZHJlc3MJCSovCisJX191MzIJCWV4ZWNhZGRyOwkvKiBSSVNDIE9TIGV4ZWMgYWRkcmVzcwkJKi8KKwl1bnNpZ25lZCBpbnQJZmlsZXR5cGU7CS8qIFJJU0MgT1MgZmlsZSB0eXBlCQkqLworCXVuc2lnbmVkIGludAlhdHRyOwkJLyogUklTQyBPUyBwZXJtaXNzaW9ucwkJKi8KKwl1bnNpZ25lZCBpbnQJc3RhbXBlZDoxOwkvKiBSSVNDIE9TIGZpbGUgaGFzIGRhdGUvdGltZQkqLworCXN0cnVjdCBpbm9kZSB2ZnNfaW5vZGU7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYWRmc19mc19zYi5oIGIvaW5jbHVkZS9saW51eC9hZGZzX2ZzX3NiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDliZjA1YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvYWRmc19mc19zYi5oCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9saW51eC9hZGZzX2ZzX3NiLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTctMTk5OSBSdXNzZWxsIEtpbmcKKyAqLworCisjaWZuZGVmIF9BREZTX0ZTX1NCCisjZGVmaW5lIF9BREZTX0ZTX1NCCisKKy8qCisgKiBGb3J3YXJkLWRlY2xhcmUgdGhpcworICovCitzdHJ1Y3QgYWRmc19kaXNjbWFwOworc3RydWN0IGFkZnNfZGlyX29wczsKKworLyoKKyAqIEFERlMgZmlsZSBzeXN0ZW0gc3VwZXJibG9jayBkYXRhIGluIG1lbW9yeQorICovCitzdHJ1Y3QgYWRmc19zYl9pbmZvIHsKKwlzdHJ1Y3QgYWRmc19kaXNjbWFwICpzX21hcDsJLyogYmggbGlzdCBjb250YWluaW5nIG1hcAkJICovCisJc3RydWN0IGFkZnNfZGlyX29wcyAqc19kaXI7CS8qIGRpcmVjdG9yeSBvcGVyYXRpb25zCQkJICovCisKKwl1aWRfdAkJc191aWQ7CQkvKiBvd25lciB1aWQJCQkJICovCisJZ2lkX3QJCXNfZ2lkOwkJLyogb3duZXIgZ2lkCQkJCSAqLworCXVtb2RlX3QJCXNfb3duZXJfbWFzazsJLyogQURGUyBvd25lciBwZXJtIC0+IHVuaXggcGVybQkJICovCisJdW1vZGVfdAkJc19vdGhlcl9tYXNrOwkvKiBBREZTIG90aGVyIHBlcm0gLT4gdW5peCBwZXJtCQkgKi8KKworCV9fdTMyCQlzX2lkc19wZXJfem9uZTsJLyogbWF4LiBubyBpZHMgaW4gb25lIHpvbmUJCSAqLworCV9fdTMyCQlzX2lkbGVuOwkvKiBsZW5ndGggb2YgSUQgaW4gbWFwCQkJICovCisJX191MzIJCXNfbWFwX3NpemU7CS8qIHNlY3RvciBzaXplIG9mIGEgbWFwCQkJICovCisJdW5zaWduZWQgbG9uZwlzX3NpemU7CQkvKiB0b3RhbCBzaXplIChpbiBibG9ja3MpIG9mIHRoaXMgZnMJICovCisJc2lnbmVkIGludAlzX21hcDJibGs7CS8qIHNoaWZ0IGxlZnQgYnkgdGhpcyBmb3IgbWFwLT5zZWN0b3IJICovCisJdW5zaWduZWQgaW50CXNfbG9nMnNoYXJlc2l6ZTsvKiBsb2cyIHNoYXJlIHNpemUJCQkgKi8KKwlfX2xlMzIJCXNfdmVyc2lvbjsJLyogZGlzYyBmb3JtYXQgdmVyc2lvbgkJCSAqLworCXVuc2lnbmVkIGludAlzX25hbWVsZW47CS8qIG1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gbmFtZQkgKi8KK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hZmZzX2ZzLmggYi9pbmNsdWRlL2xpbnV4L2FmZnNfZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTdiNWVlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9hZmZzX2ZzLmgKQEAgLTAsMCArMSw3IEBACisjaWZuZGVmIF9BRkZTX0ZTX0gKKyNkZWZpbmUgX0FGRlNfRlNfSAorLyoKKyAqIFRoZSBhZmZzIGZpbGVzeXN0ZW0gY29uc3RhbnRzL3N0cnVjdHVyZXMKKyAqLworI2RlZmluZSBBRkZTX1NVUEVSX01BR0lDIDB4YWRmZgorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2FmZnNfaGFyZGJsb2Nrcy5oIGIvaW5jbHVkZS9saW51eC9hZmZzX2hhcmRibG9ja3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmI4Njk5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9hZmZzX2hhcmRibG9ja3MuaApAQCAtMCwwICsxLDY2IEBACisjaWZuZGVmCUFGRlNfSEFSREJMT0NLU19ICisjZGVmaW5lCUFGRlNfSEFSREJMT0NLU19ICisKKy8qIEp1c3QgdGhlIG5lZWRlZCBkZWZpbml0aW9ucyBmb3IgdGhlIFJEQiBvZiBhbiBBbWlnYSBIRC4gKi8KKworc3RydWN0IFJpZ2lkRGlza0Jsb2NrIHsKKwl1MzIJcmRiX0lEOworCV9fYmUzMglyZGJfU3VtbWVkTG9uZ3M7CisJczMyCXJkYl9DaGtTdW07CisJdTMyCXJkYl9Ib3N0SUQ7CisJX19iZTMyCXJkYl9CbG9ja0J5dGVzOworCXUzMglyZGJfRmxhZ3M7CisJdTMyCXJkYl9CYWRCbG9ja0xpc3Q7CisJX19iZTMyCXJkYl9QYXJ0aXRpb25MaXN0OworCXUzMglyZGJfRmlsZVN5c0hlYWRlckxpc3Q7CisJdTMyCXJkYl9Ecml2ZUluaXQ7CisJdTMyCXJkYl9SZXNlcnZlZDFbNl07CisJdTMyCXJkYl9DeWxpbmRlcnM7CisJdTMyCXJkYl9TZWN0b3JzOworCXUzMglyZGJfSGVhZHM7CisJdTMyCXJkYl9JbnRlcmxlYXZlOworCXUzMglyZGJfUGFyazsKKwl1MzIJcmRiX1Jlc2VydmVkMlszXTsKKwl1MzIJcmRiX1dyaXRlUHJlQ29tcDsKKwl1MzIJcmRiX1JlZHVjZWRXcml0ZTsKKwl1MzIJcmRiX1N0ZXBSYXRlOworCXUzMglyZGJfUmVzZXJ2ZWQzWzVdOworCXUzMglyZGJfUkRCQmxvY2tzTG87CisJdTMyCXJkYl9SREJCbG9ja3NIaTsKKwl1MzIJcmRiX0xvQ3lsaW5kZXI7CisJdTMyCXJkYl9IaUN5bGluZGVyOworCXUzMglyZGJfQ3lsQmxvY2tzOworCXUzMglyZGJfQXV0b1BhcmtTZWNvbmRzOworCXUzMglyZGJfSGlnaFJEU0tCbG9jazsKKwl1MzIJcmRiX1Jlc2VydmVkNDsKKwljaGFyCXJkYl9EaXNrVmVuZG9yWzhdOworCWNoYXIJcmRiX0Rpc2tQcm9kdWN0WzE2XTsKKwljaGFyCXJkYl9EaXNrUmV2aXNpb25bNF07CisJY2hhcglyZGJfQ29udHJvbGxlclZlbmRvcls4XTsKKwljaGFyCXJkYl9Db250cm9sbGVyUHJvZHVjdFsxNl07CisJY2hhcglyZGJfQ29udHJvbGxlclJldmlzaW9uWzRdOworCXUzMglyZGJfUmVzZXJ2ZWQ1WzEwXTsKK307CisKKyNkZWZpbmUJSUROQU1FX1JJR0lERElTSwkweDUyNDQ1MzRCCS8qICJSRFNLIiAqLworCitzdHJ1Y3QgUGFydGl0aW9uQmxvY2sgeworCV9fYmUzMglwYl9JRDsKKwlfX2JlMzIJcGJfU3VtbWVkTG9uZ3M7CisJczMyCXBiX0Noa1N1bTsKKwl1MzIJcGJfSG9zdElEOworCV9fYmUzMglwYl9OZXh0OworCXUzMglwYl9GbGFnczsKKwl1MzIJcGJfUmVzZXJ2ZWQxWzJdOworCXUzMglwYl9EZXZGbGFnczsKKwl1OAlwYl9Ecml2ZU5hbWVbMzJdOworCXUzMglwYl9SZXNlcnZlZDJbMTVdOworCV9fYmUzMglwYl9FbnZpcm9ubWVudFsxN107CisJdTMyCXBiX0VSZXNlcnZlZFsxNV07Cit9OworCisjZGVmaW5lCUlETkFNRV9QQVJUSVRJT04JMHg1MDQxNTI1NAkvKiAiUEFSVCIgKi8KKworI2RlZmluZSBSREJfQUxMT0NBVElPTl9MSU1JVAkxNgorCisjZW5kaWYJLyogQUZGU19IQVJEQkxPQ0tTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYWdwX2JhY2tlbmQuaCBiL2luY2x1ZGUvbGludXgvYWdwX2JhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWM4YmI1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9hZ3BfYmFja2VuZC5oCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogQUdQR0FSVCBiYWNrZW5kIHNwZWNpZmljIGluY2x1ZGVzLiBOb3QgZm9yIHVzZXJzcGFjZSBjb25zdW1wdGlvbi4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgU2lsaWNvbiBHcmFwaGljcywgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMDMgRGF2ZSBKb25lcworICogQ29weXJpZ2h0IChDKSAxOTk5IEplZmYgSGFydG1hbm4KKyAqIENvcHlyaWdodCAoQykgMTk5OSBQcmVjaXNpb24gSW5zaWdodCwgSW5jLgorICogQ29weXJpZ2h0IChDKSAxOTk5IFhpIEdyYXBoaWNzLCBJbmMuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBKRUZGIEhBUlRNQU5OLCBPUiBBTlkgT1RIRVIgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSAKKyAqIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqLworCisjaWZuZGVmIF9BR1BfQkFDS0VORF9ICisjZGVmaW5lIF9BR1BfQkFDS0VORF9IIDEKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2lmbmRlZiBUUlVFCisjZGVmaW5lIFRSVUUgMQorI2VuZGlmCisKKyNpZm5kZWYgRkFMU0UKKyNkZWZpbmUgRkFMU0UgMAorI2VuZGlmCisKK2VudW0gY2hpcHNldF90eXBlIHsKKwlOT1RfU1VQUE9SVEVELAorCVNVUFBPUlRFRCwKK307CisKK3N0cnVjdCBhZ3BfdmVyc2lvbiB7CisJdTE2IG1ham9yOworCXUxNiBtaW5vcjsKK307CisKK3N0cnVjdCBhZ3Bfa2Vybl9pbmZvIHsKKwlzdHJ1Y3QgYWdwX3ZlcnNpb24gdmVyc2lvbjsKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2aWNlOworCWVudW0gY2hpcHNldF90eXBlIGNoaXBzZXQ7CisJdW5zaWduZWQgbG9uZyBtb2RlOworCXVuc2lnbmVkIGxvbmcgYXBlcl9iYXNlOworCXNpemVfdCBhcGVyX3NpemU7CisJaW50IG1heF9tZW1vcnk7CQkvKiBJbiBwYWdlcyAqLworCWludCBjdXJyZW50X21lbW9yeTsKKwlpbnQgY2FudF91c2VfYXBlcnR1cmU7CisJdW5zaWduZWQgbG9uZyBwYWdlX21hc2s7CisJc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0ICp2bV9vcHM7Cit9OworCisvKgorICogVGhlIGFncF9tZW1vcnkgc3RydWN0dXJlIGhhcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYmxvY2sgb2YgYWdwIG1lbW9yeQorICogYWxsb2NhdGVkLiAgQSBjYWxsZXIgbWF5IG1hbmlwdWxhdGUgdGhlIG5leHQgYW5kIHByZXYgcG9pbnRlcnMgdG8gbGluaworICogZWFjaCBhbGxvY2F0ZWQgaXRlbSBpbnRvIGEgbGlzdC4gIFRoZXNlIHBvaW50ZXJzIGFyZSBpZ25vcmVkIGJ5IHRoZSBiYWNrZW5kLgorICogRXZlcnl0aGluZyBlbHNlIHNob3VsZCBuZXZlciBiZSB3cml0dGVuIHRvLCBidXQgdGhlIGNhbGxlciBtYXkgcmVhZCBhbnkgb2YKKyAqIHRoZSBpdGVtcyB0byBkZXRlcm1pbmUgdGhlIHN0YXR1cyBvZiB0aGlzIGJsb2NrIG9mIGFncCBtZW1vcnkuCisgKi8KKworc3RydWN0IGFncF9icmlkZ2VfZGF0YTsKKworc3RydWN0IGFncF9tZW1vcnkgeworCXN0cnVjdCBhZ3BfbWVtb3J5ICpuZXh0OworCXN0cnVjdCBhZ3BfbWVtb3J5ICpwcmV2OworCXN0cnVjdCBhZ3BfYnJpZGdlX2RhdGEgKmJyaWRnZTsKKwl1bnNpZ25lZCBsb25nICptZW1vcnk7CisJc2l6ZV90IHBhZ2VfY291bnQ7CisJaW50IGtleTsKKwlpbnQgbnVtX3NjcmF0Y2hfcGFnZXM7CisJb2ZmX3QgcGdfc3RhcnQ7CisJdTMyIHR5cGU7CisJdTMyIHBoeXNpY2FsOworCXU4IGlzX2JvdW5kOworCXU4IGlzX2ZsdXNoZWQ7Cit9OworCisjZGVmaW5lIEFHUF9OT1JNQUxfTUVNT1JZIDAKKworZXh0ZXJuIHN0cnVjdCBhZ3BfYnJpZGdlX2RhdGEgKmFncF9icmlkZ2U7CitleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBhZ3BfYnJpZGdlczsKKworZXh0ZXJuIHN0cnVjdCBhZ3BfYnJpZGdlX2RhdGEgKigqYWdwX2ZpbmRfYnJpZGdlKShzdHJ1Y3QgcGNpX2RldiAqKTsKKworZXh0ZXJuIHZvaWQgYWdwX2ZyZWVfbWVtb3J5KHN0cnVjdCBhZ3BfbWVtb3J5ICopOworZXh0ZXJuIHN0cnVjdCBhZ3BfbWVtb3J5ICphZ3BfYWxsb2NhdGVfbWVtb3J5KHN0cnVjdCBhZ3BfYnJpZGdlX2RhdGEgKiwgc2l6ZV90LCB1MzIpOworZXh0ZXJuIGludCBhZ3BfY29weV9pbmZvKHN0cnVjdCBhZ3BfYnJpZGdlX2RhdGEgKiwgc3RydWN0IGFncF9rZXJuX2luZm8gKik7CitleHRlcm4gaW50IGFncF9iaW5kX21lbW9yeShzdHJ1Y3QgYWdwX21lbW9yeSAqLCBvZmZfdCk7CitleHRlcm4gaW50IGFncF91bmJpbmRfbWVtb3J5KHN0cnVjdCBhZ3BfbWVtb3J5ICopOworZXh0ZXJuIHZvaWQgYWdwX2VuYWJsZShzdHJ1Y3QgYWdwX2JyaWRnZV9kYXRhICosIHUzMik7CitleHRlcm4gc3RydWN0IGFncF9icmlkZ2VfZGF0YSAqYWdwX2JhY2tlbmRfYWNxdWlyZShzdHJ1Y3QgcGNpX2RldiAqKTsKK2V4dGVybiB2b2lkIGFncF9iYWNrZW5kX3JlbGVhc2Uoc3RydWN0IGFncF9icmlkZ2VfZGF0YSAqKTsKKworI2VuZGlmCQkJCS8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZgkJCQkvKiBfQUdQX0JBQ0tFTkRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hZ3BnYXJ0LmggYi9pbmNsdWRlL2xpbnV4L2FncGdhcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2ExN2M1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9hZ3BnYXJ0LmgKQEAgLTAsMCArMSwyMTQgQEAKKy8qCisgKiBBR1BHQVJUIG1vZHVsZSB2ZXJzaW9uIDAuOTkKKyAqIENvcHlyaWdodCAoQykgMTk5OSBKZWZmIEhhcnRtYW5uCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgUHJlY2lzaW9uIEluc2lnaHQsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMTk5OSBYaSBHcmFwaGljcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogSkVGRiBIQVJUTUFOTiwgT1IgQU5ZIE9USEVSIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgCisgKiBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKi8KKworI2lmbmRlZiBfQUdQX0gKKyNkZWZpbmUgX0FHUF9IIDEKKworI2luY2x1ZGUgPGxpbnV4L2FncF9iYWNrZW5kLmg+CisKKyNkZWZpbmUgQUdQSU9DX0JBU0UgICAgICAgJ0EnCisjZGVmaW5lIEFHUElPQ19JTkZPICAgICAgIF9JT1IgKEFHUElPQ19CQVNFLCAwLCBzdHJ1Y3QgYWdwX2luZm8qKQorI2RlZmluZSBBR1BJT0NfQUNRVUlSRSAgICBfSU8gIChBR1BJT0NfQkFTRSwgMSkKKyNkZWZpbmUgQUdQSU9DX1JFTEVBU0UgICAgX0lPICAoQUdQSU9DX0JBU0UsIDIpCisjZGVmaW5lIEFHUElPQ19TRVRVUCAgICAgIF9JT1cgKEFHUElPQ19CQVNFLCAzLCBzdHJ1Y3QgYWdwX3NldHVwKikKKyNkZWZpbmUgQUdQSU9DX1JFU0VSVkUgICAgX0lPVyAoQUdQSU9DX0JBU0UsIDQsIHN0cnVjdCBhZ3BfcmVnaW9uKikKKyNkZWZpbmUgQUdQSU9DX1BST1RFQ1QgICAgX0lPVyAoQUdQSU9DX0JBU0UsIDUsIHN0cnVjdCBhZ3BfcmVnaW9uKikKKyNkZWZpbmUgQUdQSU9DX0FMTE9DQVRFICAgX0lPV1IoQUdQSU9DX0JBU0UsIDYsIHN0cnVjdCBhZ3BfYWxsb2NhdGUqKQorI2RlZmluZSBBR1BJT0NfREVBTExPQ0FURSBfSU9XIChBR1BJT0NfQkFTRSwgNywgaW50KQorI2RlZmluZSBBR1BJT0NfQklORCAgICAgICBfSU9XIChBR1BJT0NfQkFTRSwgOCwgc3RydWN0IGFncF9iaW5kKikKKyNkZWZpbmUgQUdQSU9DX1VOQklORCAgICAgX0lPVyAoQUdQSU9DX0JBU0UsIDksIHN0cnVjdCBhZ3BfdW5iaW5kKikKKworI2RlZmluZSBBR1BfREVWSUNFICAgICAgIi9kZXYvYWdwZ2FydCIKKworI2lmbmRlZiBUUlVFCisjZGVmaW5lIFRSVUUgMQorI2VuZGlmCisKKyNpZm5kZWYgRkFMU0UKKyNkZWZpbmUgRkFMU0UgMAorI2VuZGlmCisKKyNpZm5kZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisKK3N0cnVjdCBhZ3BfdmVyc2lvbiB7CisJX191MTYgbWFqb3I7CisJX191MTYgbWlub3I7Cit9OworCit0eXBlZGVmIHN0cnVjdCBfYWdwX2luZm8geworCXN0cnVjdCBhZ3BfdmVyc2lvbiB2ZXJzaW9uOwkvKiB2ZXJzaW9uIG9mIHRoZSBkcml2ZXIgICAgICAgICovCisJX191MzIgYnJpZGdlX2lkOwkvKiBicmlkZ2UgdmVuZG9yL2RldmljZSAgICAgICAgICovCisJX191MzIgYWdwX21vZGU7CQkvKiBtb2RlIGluZm8gb2YgYnJpZGdlICAgICAgICAgICovCisJdW5zaWduZWQgbG9uZyBhcGVyX2Jhc2U7LyogYmFzZSBvZiBhcGVydHVyZSAgICAgICAgICAgICAqLworCXNpemVfdCBhcGVyX3NpemU7CS8qIHNpemUgb2YgYXBlcnR1cmUgICAgICAgICAgICAgKi8KKwlzaXplX3QgcGdfdG90YWw7CS8qIG1heCBwYWdlcyAoc3dhcCArIHN5c3RlbSkgICAgKi8KKwlzaXplX3QgcGdfc3lzdGVtOwkvKiBtYXggcGFnZXMgKHN5c3RlbSkgICAgICAgICAgICovCisJc2l6ZV90IHBnX3VzZWQ7CQkvKiBjdXJyZW50IHBhZ2VzIHVzZWQgICAgICAgICAgICovCit9IGFncF9pbmZvOworCit0eXBlZGVmIHN0cnVjdCBfYWdwX3NldHVwIHsKKwlfX3UzMiBhZ3BfbW9kZTsJCS8qIG1vZGUgaW5mbyBvZiBicmlkZ2UgICAgICAgICAgKi8KK30gYWdwX3NldHVwOworCisvKgorICogVGhlICJwcm90IiBkb3duIGJlbG93IG5lZWRzIHN0aWxsIGEgInNsZWVwIiBmbGFnIHNvbWVob3cgLi4uCisgKi8KK3R5cGVkZWYgc3RydWN0IF9hZ3Bfc2VnbWVudCB7CisJb2ZmX3QgcGdfc3RhcnQ7CQkvKiBzdGFydGluZyBwYWdlIHRvIHBvcHVsYXRlICAgICovCisJc2l6ZV90IHBnX2NvdW50OwkvKiBudW1iZXIgb2YgcGFnZXMgICAgICAgICAgICAgICovCisJaW50IHByb3Q7CQkvKiBwcm90IGZsYWdzIGZvciBtbWFwICAgICAgICAgICovCit9IGFncF9zZWdtZW50OworCit0eXBlZGVmIHN0cnVjdCBfYWdwX3JlZ2lvbiB7CisJcGlkX3QgcGlkOwkJLyogcGlkIG9mIHByb2Nlc3MgICAgICAgICAgICAgICAqLworCXNpemVfdCBzZWdfY291bnQ7CS8qIG51bWJlciBvZiBzZWdtZW50cyAgICAgICAgICAgKi8KKwlzdHJ1Y3QgX2FncF9zZWdtZW50ICpzZWdfbGlzdDsKK30gYWdwX3JlZ2lvbjsKKwordHlwZWRlZiBzdHJ1Y3QgX2FncF9hbGxvY2F0ZSB7CisJaW50IGtleTsJCS8qIHRhZyBvZiBhbGxvY2F0aW9uICAgICAgICAgICAgKi8KKwlzaXplX3QgcGdfY291bnQ7CS8qIG51bWJlciBvZiBwYWdlcyAgICAgICAgICAgICAgKi8KKwlfX3UzMiB0eXBlOwkJLyogMCA9PSBub3JtYWwsIG90aGVyIGRldnNwZWMgICAqLworICAgCV9fdTMyIHBoeXNpY2FsOyAgICAgICAgIC8qIGRldmljZSBzcGVjaWZpYyAoc29tZSBkZXZpY2VzICAKKwkJCQkgKiBuZWVkIGEgcGh5cyBhZGRyZXNzIG9mIHRoZSAgICAgCisJCQkJICogYWN0dWFsIHBhZ2UgYmVoaW5kIHRoZSBnYXR0ICAgIAorCQkJCSAqIHRhYmxlKSAgICAgICAgICAgICAgICAgICAgICAgICovCit9IGFncF9hbGxvY2F0ZTsKKwordHlwZWRlZiBzdHJ1Y3QgX2FncF9iaW5kIHsKKwlpbnQga2V5OwkJLyogdGFnIG9mIGFsbG9jYXRpb24gICAgICAgICAgICAqLworCW9mZl90IHBnX3N0YXJ0OwkJLyogc3RhcnRpbmcgcGFnZSB0byBwb3B1bGF0ZSAgICAqLworfSBhZ3BfYmluZDsKKwordHlwZWRlZiBzdHJ1Y3QgX2FncF91bmJpbmQgeworCWludCBrZXk7CQkvKiB0YWcgb2YgYWxsb2NhdGlvbiAgICAgICAgICAgICovCisJX191MzIgcHJpb3JpdHk7CQkvKiBwcmlvcml0eSBmb3IgcGFnaW5nIG91dCAgICAgICovCit9IGFncF91bmJpbmQ7CisKKyNlbHNlCQkJCS8qIF9fS0VSTkVMX18gKi8KKworI2RlZmluZSBBR1BHQVJUX01JTk9SIDE3NQorCitzdHJ1Y3QgYWdwX2luZm8geworCXN0cnVjdCBhZ3BfdmVyc2lvbiB2ZXJzaW9uOwkvKiB2ZXJzaW9uIG9mIHRoZSBkcml2ZXIgICAgICAgICovCisJdTMyIGJyaWRnZV9pZDsJCS8qIGJyaWRnZSB2ZW5kb3IvZGV2aWNlICAgICAgICAgKi8KKwl1MzIgYWdwX21vZGU7CQkvKiBtb2RlIGluZm8gb2YgYnJpZGdlICAgICAgICAgICovCisJdW5zaWduZWQgbG9uZyBhcGVyX2Jhc2U7LyogYmFzZSBvZiBhcGVydHVyZSAgICAgICAgICAgICAqLworCXNpemVfdCBhcGVyX3NpemU7CS8qIHNpemUgb2YgYXBlcnR1cmUgICAgICAgICAgICAgKi8KKwlzaXplX3QgcGdfdG90YWw7CS8qIG1heCBwYWdlcyAoc3dhcCArIHN5c3RlbSkgICAgKi8KKwlzaXplX3QgcGdfc3lzdGVtOwkvKiBtYXggcGFnZXMgKHN5c3RlbSkgICAgICAgICAgICovCisJc2l6ZV90IHBnX3VzZWQ7CQkvKiBjdXJyZW50IHBhZ2VzIHVzZWQgICAgICAgICAgICovCit9OworCitzdHJ1Y3QgYWdwX3NldHVwIHsKKwl1MzIgYWdwX21vZGU7CQkvKiBtb2RlIGluZm8gb2YgYnJpZGdlICAgICAgICAgICovCit9OworCisvKgorICogVGhlICJwcm90IiBkb3duIGJlbG93IG5lZWRzIHN0aWxsIGEgInNsZWVwIiBmbGFnIHNvbWVob3cgLi4uCisgKi8KK3N0cnVjdCBhZ3Bfc2VnbWVudCB7CisJb2ZmX3QgcGdfc3RhcnQ7CQkvKiBzdGFydGluZyBwYWdlIHRvIHBvcHVsYXRlICAgICovCisJc2l6ZV90IHBnX2NvdW50OwkvKiBudW1iZXIgb2YgcGFnZXMgICAgICAgICAgICAgICovCisJaW50IHByb3Q7CQkvKiBwcm90IGZsYWdzIGZvciBtbWFwICAgICAgICAgICovCit9OworCitzdHJ1Y3QgYWdwX3NlZ21lbnRfcHJpdiB7CisJb2ZmX3QgcGdfc3RhcnQ7CisJc2l6ZV90IHBnX2NvdW50OworCXBncHJvdF90IHByb3Q7Cit9OworCitzdHJ1Y3QgYWdwX3JlZ2lvbiB7CisJcGlkX3QgcGlkOwkJLyogcGlkIG9mIHByb2Nlc3MgICAgICAgICAgICAgICAqLworCXNpemVfdCBzZWdfY291bnQ7CS8qIG51bWJlciBvZiBzZWdtZW50cyAgICAgICAgICAgKi8KKwlzdHJ1Y3QgYWdwX3NlZ21lbnQgKnNlZ19saXN0OworfTsKKworc3RydWN0IGFncF9hbGxvY2F0ZSB7CisJaW50IGtleTsJCS8qIHRhZyBvZiBhbGxvY2F0aW9uICAgICAgICAgICAgKi8KKwlzaXplX3QgcGdfY291bnQ7CS8qIG51bWJlciBvZiBwYWdlcyAgICAgICAgICAgICAgKi8KKwl1MzIgdHlwZTsJCS8qIDAgPT0gbm9ybWFsLCBvdGhlciBkZXZzcGVjICAgKi8KKwl1MzIgcGh5c2ljYWw7ICAgICAgICAgICAvKiBkZXZpY2Ugc3BlY2lmaWMgKHNvbWUgZGV2aWNlcyAgCisJCQkJICogbmVlZCBhIHBoeXMgYWRkcmVzcyBvZiB0aGUgICAgIAorCQkJCSAqIGFjdHVhbCBwYWdlIGJlaGluZCB0aGUgZ2F0dCAgICAKKwkJCQkgKiB0YWJsZSkgICAgICAgICAgICAgICAgICAgICAgICAqLworfTsKKworc3RydWN0IGFncF9iaW5kIHsKKwlpbnQga2V5OwkJLyogdGFnIG9mIGFsbG9jYXRpb24gICAgICAgICAgICAqLworCW9mZl90IHBnX3N0YXJ0OwkJLyogc3RhcnRpbmcgcGFnZSB0byBwb3B1bGF0ZSAgICAqLworfTsKKworc3RydWN0IGFncF91bmJpbmQgeworCWludCBrZXk7CQkvKiB0YWcgb2YgYWxsb2NhdGlvbiAgICAgICAgICAgICovCisJdTMyIHByaW9yaXR5OwkJLyogcHJpb3JpdHkgZm9yIHBhZ2luZyBvdXQgICAgICAqLworfTsKKworc3RydWN0IGFncF9jbGllbnQgeworCXN0cnVjdCBhZ3BfY2xpZW50ICpuZXh0OworCXN0cnVjdCBhZ3BfY2xpZW50ICpwcmV2OworCXBpZF90IHBpZDsKKwlpbnQgbnVtX3NlZ21lbnRzOworCXN0cnVjdCBhZ3Bfc2VnbWVudF9wcml2ICoqc2VnbWVudHM7Cit9OworCitzdHJ1Y3QgYWdwX2NvbnRyb2xsZXIgeworCXN0cnVjdCBhZ3BfY29udHJvbGxlciAqbmV4dDsKKwlzdHJ1Y3QgYWdwX2NvbnRyb2xsZXIgKnByZXY7CisJcGlkX3QgcGlkOworCWludCBudW1fY2xpZW50czsKKwlzdHJ1Y3QgYWdwX21lbW9yeSAqcG9vbDsKKwlzdHJ1Y3QgYWdwX2NsaWVudCAqY2xpZW50czsKK307CisKKyNkZWZpbmUgQUdQX0ZGX0FMTE9XX0NMSUVOVAkJMAorI2RlZmluZSBBR1BfRkZfQUxMT1dfQ09OVFJPTExFUiAJMQorI2RlZmluZSBBR1BfRkZfSVNfQ0xJRU5UCQkyCisjZGVmaW5lIEFHUF9GRl9JU19DT05UUk9MTEVSCQkzCisjZGVmaW5lIEFHUF9GRl9JU19WQUxJRCAJCTQKKworc3RydWN0IGFncF9maWxlX3ByaXZhdGUgeworCXN0cnVjdCBhZ3BfZmlsZV9wcml2YXRlICpuZXh0OworCXN0cnVjdCBhZ3BfZmlsZV9wcml2YXRlICpwcmV2OworCXBpZF90IG15X3BpZDsKKwlsb25nIGFjY2Vzc19mbGFnczsJLyogbG9uZyByZXEnZCBmb3Igc2V0X2JpdCAtLVJSICovCit9OworCitzdHJ1Y3QgYWdwX2Zyb250X2RhdGEgeworCXN0cnVjdCBzZW1hcGhvcmUgYWdwX211dGV4OworCXN0cnVjdCBhZ3BfY29udHJvbGxlciAqY3VycmVudF9jb250cm9sbGVyOworCXN0cnVjdCBhZ3BfY29udHJvbGxlciAqY29udHJvbGxlcnM7CisJc3RydWN0IGFncF9maWxlX3ByaXZhdGUgKmZpbGVfcHJpdl9saXN0OworCXU4IHVzZWRfYnlfY29udHJvbGxlcjsKKwl1OCBiYWNrZW5kX2FjcXVpcmVkOworfTsKKworI2VuZGlmCQkJCS8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmCQkJCS8qIF9BR1BfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9haW8uaCBiL2luY2x1ZGUvbGludXgvYWlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRkNWFmOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvYWlvLmgKQEAgLTAsMCArMSwyMDEgQEAKKyNpZm5kZWYgX19MSU5VWF9fQUlPX0gKKyNkZWZpbmUgX19MSU5VWF9fQUlPX0gKKworI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9haW9fYWJpLmg+CisKKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisKKyNkZWZpbmUgQUlPX01BWFNFR1MJCTQKKyNkZWZpbmUgQUlPX0tJT0dSUF9OUl9BVE9NSUMJOAorCitzdHJ1Y3Qga2lvY3R4OworCisvKiBOb3RlcyBvbiBjYW5jZWxsaW5nIGEga2lvY2I6CisgKglJZiBhIGtpb2NiIGlzIGNhbmNlbGxlZCwgYWlvX2NvbXBsZXRlIG1heSByZXR1cm4gMCB0byBpbmRpY2F0ZSAKKyAqCXRoYXQgY2FuY2VsIGhhcyBub3QgeWV0IGRpc3Bvc2VkIG9mIHRoZSBraW9jYi4gIEFsbCBjYW5jZWwgCisgKglvcGVyYXRpb25zICptdXN0KiBjYWxsIGFpb19wdXRfcmVxIHRvIGRpc3Bvc2Ugb2YgdGhlIGtpb2NiIAorICoJdG8gZ3VhcmQgYWdhaW5zdCByYWNlcyB3aXRoIHRoZSBjb21wbGV0aW9uIGNvZGUuCisgKi8KKyNkZWZpbmUgS0lPQ0JfQ19DQU5DRUxMRUQJMHgwMQorI2RlZmluZSBLSU9DQl9DX0NPTVBMRVRFCTB4MDIKKworI2RlZmluZSBLSU9DQl9TWU5DX0tFWQkJKH4wVSkKKworLyoga2lfZmxhZ3MgYml0cyAqLworI2RlZmluZSBLSUZfTE9DS0VECQkwCisjZGVmaW5lIEtJRl9LSUNLRUQJCTEKKyNkZWZpbmUgS0lGX0NBTkNFTExFRAkJMgorCisjZGVmaW5lIGtpb2NiVHJ5TG9jayhpb2NiKQl0ZXN0X2FuZF9zZXRfYml0KEtJRl9MT0NLRUQsICYoaW9jYiktPmtpX2ZsYWdzKQorI2RlZmluZSBraW9jYlRyeUtpY2soaW9jYikJdGVzdF9hbmRfc2V0X2JpdChLSUZfS0lDS0VELCAmKGlvY2IpLT5raV9mbGFncykKKworI2RlZmluZSBraW9jYlNldExvY2tlZChpb2NiKQlzZXRfYml0KEtJRl9MT0NLRUQsICYoaW9jYiktPmtpX2ZsYWdzKQorI2RlZmluZSBraW9jYlNldEtpY2tlZChpb2NiKQlzZXRfYml0KEtJRl9LSUNLRUQsICYoaW9jYiktPmtpX2ZsYWdzKQorI2RlZmluZSBraW9jYlNldENhbmNlbGxlZChpb2NiKQlzZXRfYml0KEtJRl9DQU5DRUxMRUQsICYoaW9jYiktPmtpX2ZsYWdzKQorCisjZGVmaW5lIGtpb2NiQ2xlYXJMb2NrZWQoaW9jYikJY2xlYXJfYml0KEtJRl9MT0NLRUQsICYoaW9jYiktPmtpX2ZsYWdzKQorI2RlZmluZSBraW9jYkNsZWFyS2lja2VkKGlvY2IpCWNsZWFyX2JpdChLSUZfS0lDS0VELCAmKGlvY2IpLT5raV9mbGFncykKKyNkZWZpbmUga2lvY2JDbGVhckNhbmNlbGxlZChpb2NiKQljbGVhcl9iaXQoS0lGX0NBTkNFTExFRCwgJihpb2NiKS0+a2lfZmxhZ3MpCisKKyNkZWZpbmUga2lvY2JJc0xvY2tlZChpb2NiKQl0ZXN0X2JpdChLSUZfTE9DS0VELCAmKGlvY2IpLT5raV9mbGFncykKKyNkZWZpbmUga2lvY2JJc0tpY2tlZChpb2NiKQl0ZXN0X2JpdChLSUZfS0lDS0VELCAmKGlvY2IpLT5raV9mbGFncykKKyNkZWZpbmUga2lvY2JJc0NhbmNlbGxlZChpb2NiKQl0ZXN0X2JpdChLSUZfQ0FOQ0VMTEVELCAmKGlvY2IpLT5raV9mbGFncykKKworc3RydWN0IGtpb2NiIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWtpX3J1bl9saXN0OworCWxvbmcJCQlraV9mbGFnczsKKwlpbnQJCQlraV91c2VyczsKKwl1bnNpZ25lZAkJa2lfa2V5OwkJLyogaWQgb2YgdGhpcyByZXF1ZXN0ICovCisKKwlzdHJ1Y3QgZmlsZQkJKmtpX2ZpbHA7CisJc3RydWN0IGtpb2N0eAkJKmtpX2N0eDsJLyogbWF5IGJlIE5VTEwgZm9yIHN5bmMgb3BzICovCisJaW50CQkJKCpraV9jYW5jZWwpKHN0cnVjdCBraW9jYiAqLCBzdHJ1Y3QgaW9fZXZlbnQgKik7CisJc3NpemVfdAkJCSgqa2lfcmV0cnkpKHN0cnVjdCBraW9jYiAqKTsKKwl2b2lkCQkJKCpraV9kdG9yKShzdHJ1Y3Qga2lvY2IgKik7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkCWtpX2xpc3Q7CS8qIHRoZSBhaW8gY29yZSB1c2VzIHRoaXMKKwkJCQkJCSAqIGZvciBjYW5jZWxsYXRpb24gKi8KKworCXVuaW9uIHsKKwkJdm9pZCBfX3VzZXIJCSp1c2VyOworCQlzdHJ1Y3QgdGFza19zdHJ1Y3QJKnRzazsKKwl9IGtpX29iajsKKwlfX3U2NAkJCWtpX3VzZXJfZGF0YTsJLyogdXNlcidzIGRhdGEgZm9yIGNvbXBsZXRpb24gKi8KKwlsb2ZmX3QJCQlraV9wb3M7CisJLyogU3RhdGUgdGhhdCB3ZSByZW1lbWJlciB0byBiZSBhYmxlIHRvIHJlc3RhcnQvcmV0cnkgICovCisJdW5zaWduZWQgc2hvcnQJCWtpX29wY29kZTsKKwlzaXplX3QJCQlraV9uYnl0ZXM7IAkvKiBjb3B5IG9mIGlvY2ItPmFpb19uYnl0ZXMgKi8KKwljaGFyIAkJCV9fdXNlciAqa2lfYnVmOwkvKiByZW1haW5pbmcgaW9jYi0+YWlvX2J1ZiAqLworCXNpemVfdAkJCWtpX2xlZnQ7IAkvKiByZW1haW5pbmcgYnl0ZXMgKi8KKwl3YWl0X3F1ZXVlX3QJCWtpX3dhaXQ7CisJbG9uZwkJCWtpX3JldHJpZWQ7IAkvKiBqdXN0IGZvciB0ZXN0aW5nICovCisJbG9uZwkJCWtpX2tpY2tlZDsgCS8qIGp1c3QgZm9yIHRlc3RpbmcgKi8KKwlsb25nCQkJa2lfcXVldWVkOyAJLyoganVzdCBmb3IgdGVzdGluZyAqLworCisJdm9pZAkJCSpwcml2YXRlOworfTsKKworI2RlZmluZSBpc19zeW5jX2tpb2NiKGlvY2IpCSgoaW9jYiktPmtpX2tleSA9PSBLSU9DQl9TWU5DX0tFWSkKKyNkZWZpbmUgaW5pdF9zeW5jX2tpb2NiKHgsIGZpbHApCQkJXAorCWRvIHsJCQkJCQlcCisJCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsJXAorCQkoeCktPmtpX2ZsYWdzID0gMDsJCQlcCisJCSh4KS0+a2lfdXNlcnMgPSAxOwkJCVwKKwkJKHgpLT5raV9rZXkgPSBLSU9DQl9TWU5DX0tFWTsJCVwKKwkJKHgpLT5raV9maWxwID0gKGZpbHApOwkJCVwKKwkJKHgpLT5raV9jdHggPSAmdHNrLT5hY3RpdmVfbW0tPmRlZmF1bHRfa2lvY3R4OwlcCisJCSh4KS0+a2lfY2FuY2VsID0gTlVMTDsJCQlcCisJCSh4KS0+a2lfZHRvciA9IE5VTEw7CQkJXAorCQkoeCktPmtpX29iai50c2sgPSB0c2s7CQkJXAorCQkoeCktPmtpX3VzZXJfZGF0YSA9IDA7ICAgICAgICAgICAgICAgICAgXAorCQlpbml0X3dhaXQoKCYoeCktPmtpX3dhaXQpKTsgICAgICAgICAgICAgXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgQUlPX1JJTkdfTUFHSUMJCQkweGExMGExMGExCisjZGVmaW5lIEFJT19SSU5HX0NPTVBBVF9GRUFUVVJFUwkxCisjZGVmaW5lIEFJT19SSU5HX0lOQ09NUEFUX0ZFQVRVUkVTCTAKK3N0cnVjdCBhaW9fcmluZyB7CisJdW5zaWduZWQJaWQ7CS8qIGtlcm5lbCBpbnRlcm5hbCBpbmRleCBudW1iZXIgKi8KKwl1bnNpZ25lZAlucjsJLyogbnVtYmVyIG9mIGlvX2V2ZW50cyAqLworCXVuc2lnbmVkCWhlYWQ7CisJdW5zaWduZWQJdGFpbDsKKworCXVuc2lnbmVkCW1hZ2ljOworCXVuc2lnbmVkCWNvbXBhdF9mZWF0dXJlczsKKwl1bnNpZ25lZAlpbmNvbXBhdF9mZWF0dXJlczsKKwl1bnNpZ25lZAloZWFkZXJfbGVuZ3RoOwkvKiBzaXplIG9mIGFpb19yaW5nICovCisKKworCXN0cnVjdCBpb19ldmVudAkJaW9fZXZlbnRzWzBdOworfTsgLyogMTI4IGJ5dGVzICsgcmluZyBzaXplICovCisKKyNkZWZpbmUgYWlvX3JpbmdfYXZhaWwoaW5mbywgcmluZykJKCgocmluZyktPmhlYWQgKyAoaW5mbyktPm5yIC0gMSAtIChyaW5nKS0+dGFpbCkgJSAoaW5mbyktPm5yKQorCisjZGVmaW5lIEFJT19SSU5HX1BBR0VTCTgKK3N0cnVjdCBhaW9fcmluZ19pbmZvIHsKKwl1bnNpZ25lZCBsb25nCQltbWFwX2Jhc2U7CisJdW5zaWduZWQgbG9uZwkJbW1hcF9zaXplOworCisJc3RydWN0IHBhZ2UJCSoqcmluZ19wYWdlczsKKwlzcGlubG9ja190CQlyaW5nX2xvY2s7CisJbG9uZwkJCW5yX3BhZ2VzOworCisJdW5zaWduZWQJCW5yLCB0YWlsOworCisJc3RydWN0IHBhZ2UJCSppbnRlcm5hbF9wYWdlc1tBSU9fUklOR19QQUdFU107Cit9OworCitzdHJ1Y3Qga2lvY3R4IHsKKwlhdG9taWNfdAkJdXNlcnM7CisJaW50CQkJZGVhZDsKKwlzdHJ1Y3QgbW1fc3RydWN0CSptbTsKKworCS8qIFRoaXMgbmVlZHMgaW1wcm92aW5nICovCisJdW5zaWduZWQgbG9uZwkJdXNlcl9pZDsKKwlzdHJ1Y3Qga2lvY3R4CQkqbmV4dDsKKworCXdhaXRfcXVldWVfaGVhZF90CXdhaXQ7CisKKwlzcGlubG9ja190CQljdHhfbG9jazsKKworCWludAkJCXJlcXNfYWN0aXZlOworCXN0cnVjdCBsaXN0X2hlYWQJYWN0aXZlX3JlcXM7CS8qIHVzZWQgZm9yIGNhbmNlbGxhdGlvbiAqLworCXN0cnVjdCBsaXN0X2hlYWQJcnVuX2xpc3Q7CS8qIHVzZWQgZm9yIGtpY2tlZCByZXFzICovCisKKwl1bnNpZ25lZAkJbWF4X3JlcXM7CisKKwlzdHJ1Y3QgYWlvX3JpbmdfaW5mbwlyaW5nX2luZm87CisKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJd3E7Cit9OworCisvKiBwcm90b3R5cGVzICovCitleHRlcm4gdW5zaWduZWQgYWlvX21heF9zaXplOworCitleHRlcm4gc3NpemVfdCBGQVNUQ0FMTCh3YWl0X29uX3N5bmNfa2lvY2Ioc3RydWN0IGtpb2NiICppb2NiKSk7CitleHRlcm4gaW50IEZBU1RDQUxMKGFpb19wdXRfcmVxKHN0cnVjdCBraW9jYiAqaW9jYikpOworZXh0ZXJuIHZvaWQgRkFTVENBTEwoa2lja19pb2NiKHN0cnVjdCBraW9jYiAqaW9jYikpOworZXh0ZXJuIGludCBGQVNUQ0FMTChhaW9fY29tcGxldGUoc3RydWN0IGtpb2NiICppb2NiLCBsb25nIHJlcywgbG9uZyByZXMyKSk7CitleHRlcm4gdm9pZCBGQVNUQ0FMTChfX3B1dF9pb2N0eChzdHJ1Y3Qga2lvY3R4ICpjdHgpKTsKK3N0cnVjdCBtbV9zdHJ1Y3Q7CitleHRlcm4gdm9pZCBGQVNUQ0FMTChleGl0X2FpbyhzdHJ1Y3QgbW1fc3RydWN0ICptbSkpOworZXh0ZXJuIHN0cnVjdCBraW9jdHggKmxvb2t1cF9pb2N0eCh1bnNpZ25lZCBsb25nIGN0eF9pZCk7CitleHRlcm4gaW50IEZBU1RDQUxMKGlvX3N1Ym1pdF9vbmUoc3RydWN0IGtpb2N0eCAqY3R4LAorCQkJc3RydWN0IGlvY2IgX191c2VyICp1c2VyX2lvY2IsIHN0cnVjdCBpb2NiICppb2NiKSk7CisKKy8qIHNlbWkgcHJpdmF0ZSwgYnV0IHVzZWQgYnkgdGhlIDMyYml0IGVtdWxhdGlvbnM6ICovCitzdHJ1Y3Qga2lvY3R4ICpsb29rdXBfaW9jdHgodW5zaWduZWQgbG9uZyBjdHhfaWQpOworaW50IEZBU1RDQUxMKGlvX3N1Ym1pdF9vbmUoc3RydWN0IGtpb2N0eCAqY3R4LCBzdHJ1Y3QgaW9jYiBfX3VzZXIgKnVzZXJfaW9jYiwKKwkJCQkgIHN0cnVjdCBpb2NiICppb2NiKSk7CisKKyNkZWZpbmUgZ2V0X2lvY3R4KGtpb2N0eCkJZG8geyBpZiAodW5saWtlbHkoYXRvbWljX3JlYWQoJihraW9jdHgpLT51c2VycykgPD0gMCkpIEJVRygpOyBhdG9taWNfaW5jKCYoa2lvY3R4KS0+dXNlcnMpOyB9IHdoaWxlICgwKQorI2RlZmluZSBwdXRfaW9jdHgoa2lvY3R4KQlkbyB7IGlmICh1bmxpa2VseShhdG9taWNfZGVjX2FuZF90ZXN0KCYoa2lvY3R4KS0+dXNlcnMpKSkgX19wdXRfaW9jdHgoa2lvY3R4KTsgZWxzZSBpZiAodW5saWtlbHkoYXRvbWljX3JlYWQoJihraW9jdHgpLT51c2VycykgPCAwKSkgQlVHKCk7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgaW5fYWlvKCkgIWlzX3N5bmNfd2FpdChjdXJyZW50LT5pb193YWl0KQorLyogbWF5IGJlIHVzZWQgZm9yIGRlYnVnZ2luZyAqLworI2RlZmluZSB3YXJuX2lmX2FzeW5jKCkJCQkJCQkJXAorZG8gewkJCQkJCQkJCVwKKwlpZiAoaW5fYWlvKCkpIHsJCQkJCQkJXAorCQlwcmludGsoS0VSTl9FUlIgIiVzKCVzOiVkKSBjYWxsZWQgaW4gYXN5bmMgY29udGV4dCFcbiIsCVwKKwkJCV9fRlVOQ1RJT05fXywgX19GSUxFX18sIF9fTElORV9fKTsJCVwKKwkJZHVtcF9zdGFjaygpOwkJCQkJCVwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIGlvX3dhaXRfdG9fa2lvY2Iod2FpdCkgY29udGFpbmVyX29mKHdhaXQsIHN0cnVjdCBraW9jYiwga2lfd2FpdCkKKyNkZWZpbmUgaXNfcmV0cmllZF9raW9jYihpb2NiKSAoKGlvY2IpLT5raV9yZXRyaWVkID4gMSkKKworI2luY2x1ZGUgPGxpbnV4L2Fpb19hYmkuaD4KKworc3RhdGljIGlubGluZSBzdHJ1Y3Qga2lvY2IgKmxpc3Rfa2lvY2Ioc3RydWN0IGxpc3RfaGVhZCAqaCkKK3sKKwlyZXR1cm4gbGlzdF9lbnRyeShoLCBzdHJ1Y3Qga2lvY2IsIGtpX2xpc3QpOworfQorCisvKiBmb3Igc3lzY3RsOiAqLworZXh0ZXJuIGF0b21pY190IGFpb19ucjsKK2V4dGVybiB1bnNpZ25lZCBhaW9fbWF4X25yOworCisjZW5kaWYgLyogX19MSU5VWF9fQUlPX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYWlvX2FiaS5oIGIvaW5jbHVkZS9saW51eC9haW9fYWJpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBmZGNjOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvYWlvX2FiaS5oCkBAIC0wLDAgKzEsOTIgQEAKKy8qIGxpbnV4L2Fpb19hYmkuaAorICoKKyAqIENvcHlyaWdodCAyMDAwLDIwMDEsMjAwMiBSZWQgSGF0LgorICoKKyAqIFdyaXR0ZW4gYnkgQmVuamFtaW4gTGFIYWlzZSA8YmNybEBrdmFjay5vcmc+CisgKgorICogRGlzdHJpYnV0ZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdQTHYyIChzZWUgLi4vLi4vQ09QWUlORykgb3IgdW5kZXIgCisgKiB0aGUgZm9sbG93aW5nIHRlcm1zLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cworICogZG9jdW1lbnRhdGlvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCB3aXRob3V0IGFueQorICogd2FycmFudHksIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFJlZCBIYXQgbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0CisgKiB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuCisgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgUkVEIEhBVCBCRSBMSUFCTEUgVE8gQU5ZIFBBUlRZIEZPUiBESVJFQ1QsIElORElSRUNULAorICogU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OLCBFVkVOIElGIFJFRCBIQVQgSEFTIEJFRU4gQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqIFJFRCBIQVQgRElTQ0xBSU1TIEFOWSBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UuICBUSEUgU09GVFdBUkUgUFJPVklERUQgSEVSRVVOREVSIElTIE9OIEFOICJBUyBJUyIgQkFTSVMsIEFORAorICogUkVEIEhBVCBIQVMgTk8gT0JMSUdBVElPTiBUTyBQUk9WSURFIE1BSU5URU5BTkNFLCBTVVBQT1JULCBVUERBVEVTLAorICogRU5IQU5DRU1FTlRTLCBPUiBNT0RJRklDQVRJT05TLgorICovCisjaWZuZGVmIF9fTElOVVhfX0FJT19BQklfSAorI2RlZmluZSBfX0xJTlVYX19BSU9fQUJJX0gKKworI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKwordHlwZWRlZiB1bnNpZ25lZCBsb25nCWFpb19jb250ZXh0X3Q7CisKK2VudW0geworCUlPQ0JfQ01EX1BSRUFEID0gMCwKKwlJT0NCX0NNRF9QV1JJVEUgPSAxLAorCUlPQ0JfQ01EX0ZTWU5DID0gMiwKKwlJT0NCX0NNRF9GRFNZTkMgPSAzLAorCS8qIFRoZXNlIHR3byBhcmUgZXhwZXJpbWVudGFsLgorCSAqIElPQ0JfQ01EX1BSRUFEWCA9IDQsCisJICogSU9DQl9DTURfUE9MTCA9IDUsCisJICovCisJSU9DQl9DTURfTk9PUCA9IDYsCit9OworCisvKiByZWFkKCkgZnJvbSAvZGV2L2FpbyByZXR1cm5zIHRoZXNlIHN0cnVjdHVyZXMuICovCitzdHJ1Y3QgaW9fZXZlbnQgeworCV9fdTY0CQlkYXRhOwkJLyogdGhlIGRhdGEgZmllbGQgZnJvbSB0aGUgaW9jYiAqLworCV9fdTY0CQlvYmo7CQkvKiB3aGF0IGlvY2IgdGhpcyBldmVudCBjYW1lIGZyb20gKi8KKwlfX3M2NAkJcmVzOwkJLyogcmVzdWx0IGNvZGUgZm9yIHRoaXMgZXZlbnQgKi8KKwlfX3M2NAkJcmVzMjsJCS8qIHNlY29uZGFyeSByZXN1bHQgKi8KK307CisKKyNpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKyNkZWZpbmUgUEFEREVEKHgseSkJeCwgeQorI2VsaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisjZGVmaW5lIFBBRERFRCh4LHkpCXksIHgKKyNlbHNlCisjZXJyb3IgZWRpdCBmb3IgeW91ciBvZGQgYnl0ZW9yZGVyLgorI2VuZGlmCisKKy8qCisgKiB3ZSBhbHdheXMgdXNlIGEgNjRiaXQgb2ZmX3Qgd2hlbiBjb21tdW5pY2F0aW5nCisgKiB3aXRoIHVzZXJsYW5kLiAgaXRzIHVwIHRvIGxpYnJhcmllcyB0byBkbyB0aGUKKyAqIHByb3BlciBwYWRkaW5nIGFuZCBhaW9fZXJyb3IgYWJzdHJhY3Rpb24KKyAqLworCitzdHJ1Y3QgaW9jYiB7CisJLyogdGhlc2UgYXJlIGludGVybmFsIHRvIHRoZSBrZXJuZWwvbGliYy4gKi8KKwlfX3U2NAlhaW9fZGF0YTsJLyogZGF0YSB0byBiZSByZXR1cm5lZCBpbiBldmVudCdzIGRhdGEgKi8KKwlfX3UzMglQQURERUQoYWlvX2tleSwgYWlvX3Jlc2VydmVkMSk7CisJCQkJLyogdGhlIGtlcm5lbCBzZXRzIGFpb19rZXkgdG8gdGhlIHJlcSAjICovCisKKwkvKiBjb21tb24gZmllbGRzICovCisJX191MTYJYWlvX2xpb19vcGNvZGU7CS8qIHNlZSBJT0NCX0NNRF8gYWJvdmUgKi8KKwlfX3MxNglhaW9fcmVxcHJpbzsKKwlfX3UzMglhaW9fZmlsZGVzOworCisJX191NjQJYWlvX2J1ZjsKKwlfX3U2NAlhaW9fbmJ5dGVzOworCV9fczY0CWFpb19vZmZzZXQ7CisKKwkvKiBleHRyYSBwYXJhbWV0ZXJzICovCisJX191NjQJYWlvX3Jlc2VydmVkMjsJLyogVE9ETzogdXNlIHRoaXMgZm9yIGEgKHN0cnVjdCBzaWdldmVudCAqKSAqLworCV9fdTY0CWFpb19yZXNlcnZlZDM7Cit9OyAvKiA2NCBieXRlcyAqLworCisjdW5kZWYgSUZCSUcKKyN1bmRlZiBJRkxJVFRMRQorCisjZW5kaWYgLyogX19MSU5VWF9fQUlPX0FCSV9IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYW1pZmQuaCBiL2luY2x1ZGUvbGludXgvYW1pZmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDY5OTMyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9hbWlmZC5oCkBAIC0wLDAgKzEsNjIgQEAKKyNpZm5kZWYgX0FNSUZEX0gKKyNkZWZpbmUgX0FNSUZEX0gKKworLyogRGVmaW5pdGlvbnMgZm9yIHRoZSBBbWlnYSBmbG9wcHkgZHJpdmVyICovCisKKyNpbmNsdWRlIDxsaW51eC9mZC5oPgorCisjZGVmaW5lIEZEX01BWF9VTklUUyAgICA0CS8qIE1heC4gTnVtYmVyIG9mIGRyaXZlcyAqLworI2RlZmluZSBGTE9QUFlfTUFYX1NFQ1RPUlMJMjIJLyogTWF4LiBOdW1iZXIgb2Ygc2VjdG9ycyBwZXIgdHJhY2sgKi8KKworI2lmbmRlZiBBU1NFTUJMRVIKKworc3RydWN0IGZkX2RhdGFfdHlwZSB7CisgICAgY2hhciAqbmFtZTsJCQkvKiBkZXNjcmlwdGlvbiBvZiBkYXRhIHR5cGUgKi8KKyAgICBpbnQgc2VjdHM7CQkJLyogc2VjdG9ycyBwZXIgdHJhY2sgKi8KKyNpZmRlZiBfX1NURENfXworICAgIGludCAoKnJlYWRfZmt0KShpbnQpOworICAgIHZvaWQgKCp3cml0ZV9ma3QpKGludCk7CisjZWxzZQorICAgIGludCAoKnJlYWRfZmt0KSgpOwkJLyogcmVhZCB3aG9sZSB0cmFjayAqLworICAgIHZvaWQgKCp3cml0ZV9ma3QpKCk7CQkvKiB3cml0ZSB3aG9sZSB0cmFjayAqLworI2VuZGlmCit9OworCisvKgorKiogRmxvcHB5IHR5cGUgZGVzY3JpcHRpb25zCisqLworCitzdHJ1Y3QgZmRfZHJpdmVfdHlwZSB7CisgICAgdW5zaWduZWQgbG9uZyBjb2RlOwkJLyogY29kZSByZXR1cm5lZCBmcm9tIGRyaXZlICovCisgICAgY2hhciAqbmFtZTsJCQkvKiBkZXNjcmlwdGlvbiBvZiBkcml2ZSAqLworICAgIHVuc2lnbmVkIGludCB0cmFja3M7CS8qIG51bWJlciBvZiB0cmFja3MgKi8KKyAgICB1bnNpZ25lZCBpbnQgaGVhZHM7CQkvKiBudW1iZXIgb2YgaGVhZHMgKi8KKyAgICB1bnNpZ25lZCBpbnQgcmVhZF9zaXplOwkvKiByYXcgcmVhZCBzaXplIGZvciBvbmUgdHJhY2sgKi8KKyAgICB1bnNpZ25lZCBpbnQgd3JpdGVfc2l6ZTsJLyogcmF3IHdyaXRlIHNpemUgZm9yIG9uZSB0cmFjayAqLworICAgIHVuc2lnbmVkIGludCBzZWN0X211bHQ7CS8qIHNlY3RvcnMgYW5kIGdhcCBtdWx0aXBsaWVyIChIRCA9IDIpICovCisgICAgdW5zaWduZWQgaW50IHByZWNvbXAxOwkvKiBzdGFydCB0cmFjayBmb3IgcHJlY29tcCAxICovCisgICAgdW5zaWduZWQgaW50IHByZWNvbXAyOwkvKiBzdGFydCB0cmFjayBmb3IgcHJlY29tcCAyICovCisgICAgdW5zaWduZWQgaW50IHN0ZXBfZGVsYXk7CS8qIHRpbWUgKGluIG1zKSBmb3IgZGVsYXkgYWZ0ZXIgc3RlcCAqLworICAgIHVuc2lnbmVkIGludCBzZXR0bGVfdGltZTsJLyogdGltZSB0byBzZXR0bGUgYWZ0ZXIgZGlyIGNoYW5nZSAqLworICAgIHVuc2lnbmVkIGludCBzaWRlX3RpbWU7CS8qIHRpbWUgbmVlZGVkIHRvIGNoYW5nZSBzaWRlcyAqLworfTsKKworc3RydWN0IGFtaWdhX2Zsb3BweV9zdHJ1Y3QgeworICAgIHN0cnVjdCBmZF9kcml2ZV90eXBlICp0eXBlOwkvKiB0eXBlIG9mIGZsb3BweSBmb3IgdGhpcyB1bml0ICovCisgICAgc3RydWN0IGZkX2RhdGFfdHlwZSAqZHR5cGU7CS8qIHR5cGUgb2YgZmxvcHB5IGZvciB0aGlzIHVuaXQgKi8KKyAgICBpbnQgdHJhY2s7CQkJLyogY3VycmVudCB0cmFjayAoLTEgPT0gdW5rbm93bikgKi8KKyAgICB1bnNpZ25lZCBjaGFyICp0cmFja2J1ZjsgICAgLyogY3VycmVudCB0cmFjayAoa21hbG9jKCknZCAqLworCisgICAgaW50IGJsb2NrczsJCQkvKiB0b3RhbCAjIGJsb2NrcyBvbiBkaXNrICovCisKKyAgICBpbnQgY2hhbmdlZDsJCS8qIHRydWUgd2hlbiBub3Qga25vd24gKi8KKyAgICBpbnQgZGlzazsJCQkvKiBkaXNrIGluIGRyaXZlICgtMSA9PSB1bmtub3duKSAqLworICAgIGludCBtb3RvcjsJCQkvKiB0cnVlIHdoZW4gbW90b3IgaXMgYXQgc3BlZWQgKi8KKyAgICBpbnQgYnVzeTsJCQkvKiB0cnVlIHdoZW4gZHJpdmUgaXMgYWN0aXZlICovCisgICAgaW50IGRpcnR5OwkJCS8qIHRydWUgd2hlbiB0cmFja2J1ZiBpcyBub3Qgb24gZGlzayAqLworICAgIGludCBzdGF0dXM7CQkJLyogY3VycmVudCBlcnJvciBjb2RlIGZvciB1bml0ICovCisgICAgc3RydWN0IGdlbmRpc2sgKmdlbmRpc2s7Cit9OworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hbWlmZHJlZy5oIGIvaW5jbHVkZS9saW51eC9hbWlmZHJlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2MTg4YmYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2FtaWZkcmVnLmgKQEAgLTAsMCArMSw4MSBAQAorI2lmbmRlZiBfTElOVVhfQU1JRkRSRUdfSAorI2RlZmluZSBfTElOVVhfQU1JRkRSRUdfSAorCisvKgorKiogQ0lBQVBSQSBiaXRzIChyZWFkIG9ubHkpCisqLworCisjZGVmaW5lIERTS1JEWSAgICAgICgweDE8PDUpICAgICAgICAvKiBkaXNrIHJlYWR5IHdoZW4gbG93ICovCisjZGVmaW5lIERTS1RSQUNLMCAgICgweDE8PDQpICAgICAgICAvKiBoZWFkIGF0IHRyYWNrIHplcm8gd2hlbiBsb3cgKi8KKyNkZWZpbmUgRFNLUFJPVCAgICAgKDB4MTw8MykgICAgICAgIC8qIGRpc2sgcHJvdGVjdGVkIHdoZW4gbG93ICovCisjZGVmaW5lIERTS0NIQU5HRSAgICgweDE8PDIpICAgICAgICAvKiBsb3cgd2hlbiBkaXNrIHJlbW92ZWQgKi8KKworLyoKKyoqIENJQUFQUkIgYml0cyAocmVhZC93cml0ZSkKKyovCisKKyNkZWZpbmUgRFNLTU9UT1IgICAgKDB4MTw8NykgICAgICAgIC8qIG1vdG9yIG9uIHdoZW4gbG93ICovCisjZGVmaW5lIERTS1NFTDMgICAgICgweDE8PDYpICAgICAgICAvKiBzZWxlY3QgZHJpdmUgMyB3aGVuIGxvdyAqLworI2RlZmluZSBEU0tTRUwyICAgICAoMHgxPDw1KSAgICAgICAgLyogc2VsZWN0IGRyaXZlIDIgd2hlbiBsb3cgKi8KKyNkZWZpbmUgRFNLU0VMMSAgICAgKDB4MTw8NCkgICAgICAgIC8qIHNlbGVjdCBkcml2ZSAxIHdoZW4gbG93ICovCisjZGVmaW5lIERTS1NFTDAgICAgICgweDE8PDMpICAgICAgICAvKiBzZWxlY3QgZHJpdmUgMCB3aGVuIGxvdyAqLworI2RlZmluZSBEU0tTSURFICAgICAoMHgxPDwyKSAgICAgICAgLyogc2lkZSBzZWxlY3Rpb246IDAgPSB1cHBlciwgMSA9IGxvd2VyICovCisjZGVmaW5lIERTS0RJUkVDICAgICgweDE8PDEpICAgICAgICAvKiBzdGVwIGRpcmVjdGlvbjogMD1pbiwgMT1vdXQgKHRvIHRyayAwKSAqLworI2RlZmluZSBEU0tTVEVQICAgICAoMHgxKSAgICAgICAgICAgLyogcHVsc2UgbG93IHRvIHN0ZXAgaGVhZCAxIHRyYWNrICovCisKKy8qCisqKiBEU0tCWVRSIGJpdHMgKHJlYWQgb25seSkKKyovCisKKyNkZWZpbmUgRFNLQllUICAgICAgKDE8PDE1KSAgICAgICAgIC8qIHJlZ2lzdGVyIGNvbnRhaW5zIHZhbGlkIGJ5dGUgd2hlbiBzZXQgKi8KKyNkZWZpbmUgRE1BT04gICAgICAgKDE8PDE0KSAgICAgICAgIC8qIGRpc2sgRE1BIGVuYWJsZWQgKi8KKyNkZWZpbmUgRElTS1dSSVRFICAgKDE8PDEzKSAgICAgICAgIC8qIGRpc2sgd3JpdGUgYml0IGluIERTS0xFTiBlbmFibGVkICovCisjZGVmaW5lIFdPUkRFUVVBTCAgICgxPDwxMikgICAgICAgICAvKiBEU0tTWU5DIHJlZ2lzdGVyIG1hdGNoIHdoZW4gdHJ1ZSAqLworLyogYml0cyA3LTAgYXJlIGRhdGEgKi8KKworLyoKKyoqIEFES0NPTi9BREtDT05SIGJpdHMKKyovCisKKyNpZm5kZWYgU0VUQ0xSCisjZGVmaW5lIEFES19TRVRDTFIgICAgICAoMTw8MTUpICAgICAvKiBjb250cm9sIGJpdCAqLworI2VuZGlmCisjZGVmaW5lIEFES19QUkVDT01QMSAgICAoMTw8MTQpICAgICAvKiBwcmVjb21wZW5zYXRpb24gc2VsZWN0aW9uICovCisjZGVmaW5lIEFES19QUkVDT01QMCAgICAoMTw8MTMpICAgICAvKiAwMD1ub25lLCAwMT0xNDBucywgMTA9MjgwbnMsIDExPTUwMG5zICovCisjZGVmaW5lIEFES19NRk1QUkVDICAgICAoMTw8MTIpICAgICAvKiAwPUdDUiBwcmVjb21wLiwgMT1NRk0gcHJlY29tcC4gKi8KKyNkZWZpbmUgQURLX1dPUkRTWU5DICAgICgxPDwxMCkgICAgIC8qIGVuYWJsZSBEU0tTWU5DIGF1dG8gRE1BICovCisjZGVmaW5lIEFES19NU0JTWU5DICAgICAoMTw8OSkgICAgICAvKiB3aGVuIDEsIGVuYWJsZSBzeW5jIG9uIE1TYml0IChmb3IgR0NSKSAqLworI2RlZmluZSBBREtfRkFTVCAgICAgICAgKDE8PDgpICAgICAgLyogYml0IGNlbGw6IDA9MnVzIChHQ1IpLCAxPTF1cyAoTUZNKSAqLworIAorLyoKKyoqIERTS0xFTiBiaXRzCisqLworCisjZGVmaW5lIERTS0xFTl9ETUFFTiAgICAoMTw8MTUpCisjZGVmaW5lIERTS0xFTl9XUklURSAgICAoMTw8MTQpCisKKy8qCisqKiBJTlRFTkEvSU5UUkVRIGJpdHMKKyovCisKKyNkZWZpbmUgRFNLSU5ERVggICAgKDB4MTw8NCkgICAgICAgIC8qIERTS0lOREVYIGJpdCAqLworCisvKgorKiogTWlzYworKi8KKyAKKyNkZWZpbmUgTUZNX1NZTkMgICAgMHg0NDg5ICAgICAgICAgIC8qIHN0YW5kYXJkIE1GTSBzeW5jIHZhbHVlICovCisKKy8qIFZhbHVlcyBmb3IgRkRfQ09NTUFORCAqLworI2RlZmluZSBGRF9SRUNBTElCUkFURQkJMHgwNwkvKiBtb3ZlIHRvIHRyYWNrIDAgKi8KKyNkZWZpbmUgRkRfU0VFSwkJCTB4MEYJLyogc2VlayB0cmFjayAqLworI2RlZmluZSBGRF9SRUFECQkJMHhFNgkvKiByZWFkIHdpdGggTVQsIE1GTSwgU0tpcCBkZWxldGVkICovCisjZGVmaW5lIEZEX1dSSVRFCQkweEM1CS8qIHdyaXRlIHdpdGggTVQsIE1GTSAqLworI2RlZmluZSBGRF9TRU5TRUkJCTB4MDgJLyogU2Vuc2UgSW50ZXJydXB0IFN0YXR1cyAqLworI2RlZmluZSBGRF9TUEVDSUZZCQkweDAzCS8qIHNwZWNpZnkgSFVUIGV0YyAqLworI2RlZmluZSBGRF9GT1JNQVQJCTB4NEQJLyogZm9ybWF0IG9uZSB0cmFjayAqLworI2RlZmluZSBGRF9WRVJTSU9OCQkweDEwCS8qIGdldCB2ZXJzaW9uIGNvZGUgKi8KKyNkZWZpbmUgRkRfQ09ORklHVVJFCQkweDEzCS8qIGNvbmZpZ3VyZSBGSUZPIG9wZXJhdGlvbiAqLworI2RlZmluZSBGRF9QRVJQRU5ESUNVTEFSCTB4MTIJLyogcGVycGVuZGljdWxhciByL3cgbW9kZSAqLworCisjZW5kaWYgLyogX0xJTlVYX0FNSUZEUkVHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYW1pZ2FmZnMuaCBiL2luY2x1ZGUvbGludXgvYW1pZ2FmZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2I0MWMwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9hbWlnYWZmcy5oCkBAIC0wLDAgKzEsMTQ0IEBACisjaWZuZGVmIEFNSUdBRkZTX0gKKyNkZWZpbmUgQU1JR0FGRlNfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisKKyNkZWZpbmUgRlNfT0ZTCQkweDQ0NEY1MzAwCisjZGVmaW5lIEZTX0ZGUwkJMHg0NDRGNTMwMQorI2RlZmluZSBGU19JTlRMT0ZTCTB4NDQ0RjUzMDIKKyNkZWZpbmUgRlNfSU5UTEZGUwkweDQ0NEY1MzAzCisjZGVmaW5lIEZTX0RDT0ZTCTB4NDQ0RjUzMDQKKyNkZWZpbmUgRlNfRENGRlMJMHg0NDRGNTMwNQorI2RlZmluZSBNVUZTX0ZTCQkweDZkNzU0NjUzICAgLyogJ211RlMnICovCisjZGVmaW5lIE1VRlNfT0ZTCTB4NmQ3NTQ2MDAgICAvKiAnbXVGXDAnICovCisjZGVmaW5lIE1VRlNfRkZTCTB4NmQ3NTQ2MDEgICAvKiAnbXVGXDEnICovCisjZGVmaW5lIE1VRlNfSU5UTE9GUwkweDZkNzU0NjAyICAgLyogJ211RlwyJyAqLworI2RlZmluZSBNVUZTX0lOVExGRlMJMHg2ZDc1NDYwMyAgIC8qICdtdUZcMycgKi8KKyNkZWZpbmUgTVVGU19EQ09GUwkweDZkNzU0NjA0ICAgLyogJ211Rlw0JyAqLworI2RlZmluZSBNVUZTX0RDRkZTCTB4NmQ3NTQ2MDUgICAvKiAnbXVGXDUnICovCisKKyNkZWZpbmUgVF9TSE9SVAkJMgorI2RlZmluZSBUX0xJU1QJCTE2CisjZGVmaW5lIFRfREFUQQkJOAorCisjZGVmaW5lIFNUX0xJTktGSUxFCS00CisjZGVmaW5lIFNUX0ZJTEUJCS0zCisjZGVmaW5lIFNUX1JPT1QJCTEKKyNkZWZpbmUgU1RfVVNFUkRJUgkyCisjZGVmaW5lIFNUX1NPRlRMSU5LCTMKKyNkZWZpbmUgU1RfTElOS0RJUgk0CisKKyNkZWZpbmUgQUZGU19ST09UX0JNQVBTCQkyNQorCitzdHJ1Y3QgYWZmc19kYXRlIHsKKwlfX2JlMzIgZGF5czsKKwlfX2JlMzIgbWluczsKKwlfX2JlMzIgdGlja3M7Cit9OworCitzdHJ1Y3QgYWZmc19zaG9ydF9kYXRlIHsKKwlfX2JlMTYgZGF5czsKKwlfX2JlMTYgbWluczsKKwlfX2JlMTYgdGlja3M7Cit9OworCitzdHJ1Y3QgYWZmc19yb290X2hlYWQgeworCV9fYmUzMiBwdHlwZTsKKwlfX2JlMzIgc3BhcmUxOworCV9fYmUzMiBzcGFyZTI7CisJX19iZTMyIGhhc2hfc2l6ZTsKKwlfX2JlMzIgc3BhcmUzOworCV9fYmUzMiBjaGVja3N1bTsKKwlfX2JlMzIgaGFzaHRhYmxlWzFdOworfTsKKworc3RydWN0IGFmZnNfcm9vdF90YWlsIHsKKwlfX2JlMzIgYm1fZmxhZzsKKwlfX2JlMzIgYm1fYmxrW0FGRlNfUk9PVF9CTUFQU107CisJX19iZTMyIGJtX2V4dDsKKwlzdHJ1Y3QgYWZmc19kYXRlIHJvb3RfY2hhbmdlOworCXU4IGRpc2tfbmFtZVszMl07CisJX19iZTMyIHNwYXJlMTsKKwlfX2JlMzIgc3BhcmUyOworCXN0cnVjdCBhZmZzX2RhdGUgZGlza19jaGFuZ2U7CisJc3RydWN0IGFmZnNfZGF0ZSBkaXNrX2NyZWF0ZTsKKwlfX2JlMzIgc3BhcmUzOworCV9fYmUzMiBzcGFyZTQ7CisJX19iZTMyIGRjYWNoZTsKKwlfX2JlMzIgc3R5cGU7Cit9OworCitzdHJ1Y3QgYWZmc19oZWFkIHsKKwlfX2JlMzIgcHR5cGU7CisJX19iZTMyIGtleTsKKwlfX2JlMzIgYmxvY2tfY291bnQ7CisJX19iZTMyIHNwYXJlMTsKKwlfX2JlMzIgZmlyc3RfZGF0YTsKKwlfX2JlMzIgY2hlY2tzdW07CisJX19iZTMyIHRhYmxlWzFdOworfTsKKworc3RydWN0IGFmZnNfdGFpbCB7CisJX19iZTMyIHNwYXJlMTsKKwlfX2JlMTYgdWlkOworCV9fYmUxNiBnaWQ7CisJX19iZTMyIHByb3RlY3Q7CisJX19iZTMyIHNpemU7CisJdTggY29tbWVudFs5Ml07CisJc3RydWN0IGFmZnNfZGF0ZSBjaGFuZ2U7CisJdTggbmFtZVszMl07CisJX19iZTMyIHNwYXJlMjsKKwlfX2JlMzIgb3JpZ2luYWw7CisJX19iZTMyIGxpbmtfY2hhaW47CisJX19iZTMyIHNwYXJlWzVdOworCV9fYmUzMiBoYXNoX2NoYWluOworCV9fYmUzMiBwYXJlbnQ7CisJX19iZTMyIGV4dGVuc2lvbjsKKwlfX2JlMzIgc3R5cGU7Cit9OworCitzdHJ1Y3Qgc2xpbmtfZnJvbnQKK3sKKwlfX2JlMzIgcHR5cGU7CisJX19iZTMyIGtleTsKKwlfX2JlMzIgc3BhcmUxWzNdOworCV9fYmUzMiBjaGVja3N1bTsKKwl1OCBzeW1uYW1lWzFdOwkvKiBkZXBlbmRzIG9uIGJsb2NrIHNpemUgKi8KK307CisKK3N0cnVjdCBhZmZzX2RhdGFfaGVhZAoreworCV9fYmUzMiBwdHlwZTsKKwlfX2JlMzIga2V5OworCV9fYmUzMiBzZXF1ZW5jZTsKKwlfX2JlMzIgc2l6ZTsKKwlfX2JlMzIgbmV4dDsKKwlfX2JlMzIgY2hlY2tzdW07CisJdTggZGF0YVsxXTsJLyogZGVwZW5kcyBvbiBibG9jayBzaXplICovCit9OworCisvKiBQZXJtaXNzaW9uIGJpdHMgKi8KKworI2RlZmluZSBGSUJGX09UUl9SRUFECQkweDgwMDAKKyNkZWZpbmUgRklCRl9PVFJfV1JJVEUJCTB4NDAwMAorI2RlZmluZSBGSUJGX09UUl9FWEVDVVRFCTB4MjAwMAorI2RlZmluZSBGSUJGX09UUl9ERUxFVEUJCTB4MTAwMAorI2RlZmluZSBGSUJGX0dSUF9SRUFECQkweDA4MDAKKyNkZWZpbmUgRklCRl9HUlBfV1JJVEUJCTB4MDQwMAorI2RlZmluZSBGSUJGX0dSUF9FWEVDVVRFCTB4MDIwMAorI2RlZmluZSBGSUJGX0dSUF9ERUxFVEUJCTB4MDEwMAorCisjZGVmaW5lIEZJQkZfSElEREVOCQkweDAwODAKKyNkZWZpbmUgRklCRl9TQ1JJUFQJCTB4MDA0MAorI2RlZmluZSBGSUJGX1BVUkUJCTB4MDAyMAkJLyogbm8gdXNlIHVuZGVyIGxpbnV4ICovCisjZGVmaW5lIEZJQkZfQVJDSElWRUQJCTB4MDAxMAkJLyogbmV2ZXIgc2V0LCBhbHdheXMgY2xlYXJlZCBvbiB3cml0ZSAqLworI2RlZmluZSBGSUJGX05PUkVBRAkJMHgwMDA4CQkvKiAwIG1lYW5zIGFsbG93ZWQgKi8KKyNkZWZpbmUgRklCRl9OT1dSSVRFCQkweDAwMDQJCS8qIDAgbWVhbnMgYWxsb3dlZCAqLworI2RlZmluZSBGSUJGX05PRVhFQ1VURQkJMHgwMDAyCQkvKiAwIG1lYW5zIGFsbG93ZWQsIGlnbm9yZWQgdW5kZXIgbGludXggKi8KKyNkZWZpbmUgRklCRl9OT0RFTEVURQkJMHgwMDAxCQkvKiAwIG1lYW5zIGFsbG93ZWQgKi8KKworI2RlZmluZSBGSUJGX09XTkVSCQkweDAwMEYJCS8qIEJpdHMgcGVydGFpbmluZyB0byBvd25lciAqLworI2RlZmluZSBGSUJGX01BU0sJCTB4RUUwRQkJLyogQml0cyBtb2RpZmllZCBieSBMaW51eCAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYXBtX2Jpb3MuaCBiL2luY2x1ZGUvbGludXgvYXBtX2Jpb3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTBhZWYzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9hcG1fYmlvcy5oCkBAIC0wLDAgKzEsMjE4IEBACisjaWZuZGVmIF9MSU5VWF9BUE1fSAorI2RlZmluZSBfTElOVVhfQVBNX0gKKworLyoKKyAqIEluY2x1ZGUgZmlsZSBmb3IgdGhlIGludGVyZmFjZSB0byBhbiBBUE0gQklPUworICogQ29weXJpZ2h0IDE5OTQtMjAwMSBTdGVwaGVuIFJvdGh3ZWxsIChzZnJAY2FuYi5hdXVnLm9yZy5hdSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAlhcG1fZXZlbnRfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJYXBtX2V2ZW50aW5mb190OworCisjaWZkZWYgX19LRVJORUxfXworCisjZGVmaW5lIEFQTV9DUwkJKEdEVF9FTlRSWV9BUE1CSU9TX0JBU0UgKiA4KQorI2RlZmluZSBBUE1fQ1NfMTYJKEFQTV9DUyArIDgpCisjZGVmaW5lIEFQTV9EUwkJKEFQTV9DU18xNiArIDgpCisKK3N0cnVjdCBhcG1fYmlvc19pbmZvIHsKKwl1bnNpZ25lZCBzaG9ydAl2ZXJzaW9uOworCXVuc2lnbmVkIHNob3J0CWNzZWc7CisJdW5zaWduZWQgbG9uZwlvZmZzZXQ7CisJdW5zaWduZWQgc2hvcnQJY3NlZ18xNjsKKwl1bnNpZ25lZCBzaG9ydAlkc2VnOworCXVuc2lnbmVkIHNob3J0CWZsYWdzOworCXVuc2lnbmVkIHNob3J0CWNzZWdfbGVuOworCXVuc2lnbmVkIHNob3J0CWNzZWdfMTZfbGVuOworCXVuc2lnbmVkIHNob3J0CWRzZWdfbGVuOworfTsKKworLyogUmVzdWx0cyBvZiBBUE0gSW5zdGFsbGF0aW9uIENoZWNrICovCisjZGVmaW5lIEFQTV8xNl9CSVRfU1VQUE9SVAkweDAwMDEKKyNkZWZpbmUgQVBNXzMyX0JJVF9TVVBQT1JUCTB4MDAwMgorI2RlZmluZSBBUE1fSURMRV9TTE9XU19DTE9DSwkweDAwMDQKKyNkZWZpbmUgQVBNX0JJT1NfRElTQUJMRUQgICAgICAJMHgwMDA4CisjZGVmaW5lIEFQTV9CSU9TX0RJU0VOR0FHRUQgICAgIDB4MDAxMAorCisvKgorICogRGF0YSBmb3IgQVBNIHRoYXQgaXMgcGVyc2lzdGVudCBhY3Jvc3MgbW9kdWxlIHVubG9hZC9sb2FkCisgKi8KK3N0cnVjdCBhcG1faW5mbyB7CisJc3RydWN0IGFwbV9iaW9zX2luZm8JYmlvczsKKwl1bnNpZ25lZCBzaG9ydAkJY29ubmVjdGlvbl92ZXJzaW9uOworCWludAkJCWdldF9wb3dlcl9zdGF0dXNfYnJva2VuOworCWludAkJCWdldF9wb3dlcl9zdGF0dXNfc3dhYmlubWludXRlczsKKwlpbnQJCQlhbGxvd19pbnRzOworCWludAkJCWZvcmJpZF9pZGxlOworCWludAkJCXJlYWxtb2RlX3Bvd2VyX29mZjsKKwlpbnQJCQlkaXNhYmxlZDsKK307CisKKy8qCisgKiBUaGUgQVBNIGZ1bmN0aW9uIGNvZGVzCisgKi8KKyNkZWZpbmUJQVBNX0ZVTkNfSU5TVF9DSEVDSwkweDUzMDAKKyNkZWZpbmUJQVBNX0ZVTkNfUkVBTF9DT05OCTB4NTMwMQorI2RlZmluZQlBUE1fRlVOQ18xNkJJVF9DT05OCTB4NTMwMgorI2RlZmluZQlBUE1fRlVOQ18zMkJJVF9DT05OCTB4NTMwMworI2RlZmluZQlBUE1fRlVOQ19ESVNDT05OCTB4NTMwNAorI2RlZmluZQlBUE1fRlVOQ19JRExFCQkweDUzMDUKKyNkZWZpbmUJQVBNX0ZVTkNfQlVTWQkJMHg1MzA2CisjZGVmaW5lCUFQTV9GVU5DX1NFVF9TVEFURQkweDUzMDcKKyNkZWZpbmUJQVBNX0ZVTkNfRU5BQkxFX1BNCTB4NTMwOAorI2RlZmluZQlBUE1fRlVOQ19SRVNUT1JFX0JJT1MJMHg1MzA5CisjZGVmaW5lCUFQTV9GVU5DX0dFVF9TVEFUVVMJMHg1MzBhCisjZGVmaW5lCUFQTV9GVU5DX0dFVF9FVkVOVAkweDUzMGIKKyNkZWZpbmUJQVBNX0ZVTkNfR0VUX1NUQVRFCTB4NTMwYworI2RlZmluZQlBUE1fRlVOQ19FTkFCTEVfREVWX1BNCTB4NTMwZAorI2RlZmluZQlBUE1fRlVOQ19WRVJTSU9OCTB4NTMwZQorI2RlZmluZQlBUE1fRlVOQ19FTkdBR0VfUE0JMHg1MzBmCisjZGVmaW5lCUFQTV9GVU5DX0dFVF9DQVAJMHg1MzEwCisjZGVmaW5lCUFQTV9GVU5DX1JFU1VNRV9USU1FUgkweDUzMTEKKyNkZWZpbmUJQVBNX0ZVTkNfUkVTVU1FX09OX1JJTkcJMHg1MzEyCisjZGVmaW5lCUFQTV9GVU5DX1RJTUVSCQkweDUzMTMKKworLyoKKyAqIEZ1bmN0aW9uIGNvZGUgZm9yIEFQTV9GVU5DX1JFU1VNRV9USU1FUgorICovCisjZGVmaW5lCUFQTV9GVU5DX0RJU0FCTEVfVElNRVIJMAorI2RlZmluZQlBUE1fRlVOQ19HRVRfVElNRVIJMQorI2RlZmluZQlBUE1fRlVOQ19TRVRfVElNRVIJMgorCisvKgorICogRnVuY3Rpb24gY29kZSBmb3IgQVBNX0ZVTkNfUkVTVU1FX09OX1JJTkcKKyAqLworI2RlZmluZQlBUE1fRlVOQ19ESVNBQkxFX1JJTkcJMAorI2RlZmluZQlBUE1fRlVOQ19FTkFCTEVfUklORwkxCisjZGVmaW5lCUFQTV9GVU5DX0dFVF9SSU5HCTIKKworLyoKKyAqIEZ1bmN0aW9uIGNvZGUgZm9yIEFQTV9GVU5DX1RJTUVSX1NUQVRVUworICovCisjZGVmaW5lCUFQTV9GVU5DX1RJTUVSX0RJU0FCTEUJMAorI2RlZmluZQlBUE1fRlVOQ19USU1FUl9FTkFCTEUJMQorI2RlZmluZQlBUE1fRlVOQ19USU1FUl9HRVQJMgorCisvKgorICogaW4gYXJjaC9pMzg2L2tlcm5lbC9zZXR1cC5jCisgKi8KK2V4dGVybiBzdHJ1Y3QgYXBtX2luZm8JYXBtX2luZm87CisKKyNlbmRpZgkvKiBfX0tFUk5FTF9fICovCisKKy8qCisgKiBQb3dlciBzdGF0ZXMKKyAqLworI2RlZmluZSBBUE1fU1RBVEVfUkVBRFkJCTB4MDAwMAorI2RlZmluZSBBUE1fU1RBVEVfU1RBTkRCWQkweDAwMDEKKyNkZWZpbmUgQVBNX1NUQVRFX1NVU1BFTkQJMHgwMDAyCisjZGVmaW5lIEFQTV9TVEFURV9PRkYJCTB4MDAwMworI2RlZmluZSBBUE1fU1RBVEVfQlVTWQkJMHgwMDA0CisjZGVmaW5lIEFQTV9TVEFURV9SRUpFQ1QJMHgwMDA1CisjZGVmaW5lIEFQTV9TVEFURV9PRU1fU1lTCTB4MDAyMAorI2RlZmluZSBBUE1fU1RBVEVfT0VNX0RFVgkweDAwNDAKKworI2RlZmluZSBBUE1fU1RBVEVfRElTQUJMRQkweDAwMDAKKyNkZWZpbmUgQVBNX1NUQVRFX0VOQUJMRQkweDAwMDEKKworI2RlZmluZSBBUE1fU1RBVEVfRElTRU5HQUdFCTB4MDAwMAorI2RlZmluZSBBUE1fU1RBVEVfRU5HQUdFCTB4MDAwMQorCisvKgorICogRXZlbnRzIChyZXN1bHRzIG9mIEdldCBQTSBFdmVudCkKKyAqLworI2RlZmluZSBBUE1fU1lTX1NUQU5EQlkJCTB4MDAwMQorI2RlZmluZSBBUE1fU1lTX1NVU1BFTkQJCTB4MDAwMgorI2RlZmluZSBBUE1fTk9STUFMX1JFU1VNRQkweDAwMDMKKyNkZWZpbmUgQVBNX0NSSVRJQ0FMX1JFU1VNRQkweDAwMDQKKyNkZWZpbmUgQVBNX0xPV19CQVRURVJZCQkweDAwMDUKKyNkZWZpbmUgQVBNX1BPV0VSX1NUQVRVU19DSEFOR0UJMHgwMDA2CisjZGVmaW5lIEFQTV9VUERBVEVfVElNRQkJMHgwMDA3CisjZGVmaW5lIEFQTV9DUklUSUNBTF9TVVNQRU5ECTB4MDAwOAorI2RlZmluZSBBUE1fVVNFUl9TVEFOREJZCTB4MDAwOQorI2RlZmluZSBBUE1fVVNFUl9TVVNQRU5ECTB4MDAwYQorI2RlZmluZSBBUE1fU1RBTkRCWV9SRVNVTUUJMHgwMDBiCisjZGVmaW5lIEFQTV9DQVBBQklMSVRZX0NIQU5HRQkweDAwMGMKKworLyoKKyAqIEVycm9yIGNvZGVzCisgKi8KKyNkZWZpbmUgQVBNX1NVQ0NFU1MJCTB4MDAKKyNkZWZpbmUgQVBNX0RJU0FCTEVECQkweDAxCisjZGVmaW5lIEFQTV9DT05ORUNURUQJCTB4MDIKKyNkZWZpbmUgQVBNX05PVF9DT05ORUNURUQJMHgwMworI2RlZmluZSBBUE1fMTZfQ09OTkVDVEVECTB4MDUKKyNkZWZpbmUgQVBNXzE2X1VOU1VQUE9SVEVECTB4MDYKKyNkZWZpbmUgQVBNXzMyX0NPTk5FQ1RFRAkweDA3CisjZGVmaW5lIEFQTV8zMl9VTlNVUFBPUlRFRAkweDA4CisjZGVmaW5lIEFQTV9CQURfREVWSUNFCQkweDA5CisjZGVmaW5lIEFQTV9CQURfUEFSQU0JCTB4MGEKKyNkZWZpbmUgQVBNX05PVF9FTkdBR0VECQkweDBiCisjZGVmaW5lIEFQTV9CQURfRlVOQ1RJT04JMHgwYworI2RlZmluZSBBUE1fUkVTVU1FX0RJU0FCTEVECTB4MGQKKyNkZWZpbmUgQVBNX05PX0VSUk9SCQkweDUzCisjZGVmaW5lIEFQTV9CQURfU1RBVEUJCTB4NjAKKyNkZWZpbmUgQVBNX05PX0VWRU5UUwkJMHg4MAorI2RlZmluZSBBUE1fTk9UX1BSRVNFTlQJCTB4ODYKKworLyoKKyAqIEFQTSBEZXZpY2UgSURzCisgKi8KKyNkZWZpbmUgQVBNX0RFVklDRV9CSU9TCQkweDAwMDAKKyNkZWZpbmUgQVBNX0RFVklDRV9BTEwJCTB4MDAwMQorI2RlZmluZSBBUE1fREVWSUNFX0RJU1BMQVkJMHgwMTAwCisjZGVmaW5lIEFQTV9ERVZJQ0VfU1RPUkFHRQkweDAyMDAKKyNkZWZpbmUgQVBNX0RFVklDRV9QQVJBTExFTAkweDAzMDAKKyNkZWZpbmUgQVBNX0RFVklDRV9TRVJJQUwJMHgwNDAwCisjZGVmaW5lIEFQTV9ERVZJQ0VfTkVUV09SSwkweDA1MDAKKyNkZWZpbmUgQVBNX0RFVklDRV9QQ01DSUEJMHgwNjAwCisjZGVmaW5lIEFQTV9ERVZJQ0VfQkFUVEVSWQkweDgwMDAKKyNkZWZpbmUgQVBNX0RFVklDRV9PRU0JCTB4ZTAwMAorI2RlZmluZSBBUE1fREVWSUNFX09MRF9BTEwJMHhmZmZmCisjZGVmaW5lIEFQTV9ERVZJQ0VfQ0xBU1MJMHgwMGZmCisjZGVmaW5lIEFQTV9ERVZJQ0VfTUFTSwkJMHhmZjAwCisKKyNpZmRlZiBfX0tFUk5FTF9fCisvKgorICogVGhpcyBpcyB0aGUgIkFsbCBEZXZpY2VzIiBJRCBjb21tdW5pY2F0ZWQgdG8gdGhlIEJJT1MKKyAqLworI2RlZmluZSBBUE1fREVWSUNFX0JBTEwJCSgoYXBtX2luZm8uY29ubmVjdGlvbl92ZXJzaW9uID4gMHgwMTAwKSA/IFwKKwkJCQkgQVBNX0RFVklDRV9BTEwgOiBBUE1fREVWSUNFX09MRF9BTEwpCisjZW5kaWYKKworLyoKKyAqIEJhdHRlcnkgc3RhdHVzCisgKi8KKyNkZWZpbmUgQVBNX01BWF9CQVRURVJJRVMJMgorCisvKgorICogQVBNIGRlZmluZWQgY2FwYWJpbGl0eSBiaXQgZmxhZ3MKKyAqLworI2RlZmluZSBBUE1fQ0FQX0dMT0JBTF9TVEFOREJZCQkweDAwMDEKKyNkZWZpbmUgQVBNX0NBUF9HTE9CQUxfU1VTUEVORAkJMHgwMDAyCisjZGVmaW5lIEFQTV9DQVBfUkVTVU1FX1NUQU5EQllfVElNRVIJMHgwMDA0IC8qIFRpbWVyIHJlc3VtZSBmcm9tIHN0YW5kYnkgKi8KKyNkZWZpbmUgQVBNX0NBUF9SRVNVTUVfU1VTUEVORF9USU1FUgkweDAwMDggLyogVGltZXIgcmVzdW1lIGZyb20gc3VzcGVuZCAqLworI2RlZmluZSBBUE1fQ0FQX1JFU1VNRV9TVEFOREJZX1JJTkcJMHgwMDEwIC8qIFJlc3VtZSBvbiBSaW5nIGZyIHN0YW5kYnkgKi8KKyNkZWZpbmUgQVBNX0NBUF9SRVNVTUVfU1VTUEVORF9SSU5HCTB4MDAyMCAvKiBSZXN1bWUgb24gUmluZyBmciBzdXNwZW5kICovCisjZGVmaW5lIEFQTV9DQVBfUkVTVU1FX1NUQU5EQllfUENNQ0lBCTB4MDA0MCAvKiBSZXN1bWUgb24gUENNQ0lBIFJpbmcJKi8KKyNkZWZpbmUgQVBNX0NBUF9SRVNVTUVfU1VTUEVORF9QQ01DSUEJMHgwMDgwIC8qIFJlc3VtZSBvbiBQQ01DSUEgUmluZwkqLworCisvKgorICogaW9jdGwgb3BlcmF0aW9ucworICovCisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKworI2RlZmluZSBBUE1fSU9DX1NUQU5EQlkJCV9JTygnQScsIDEpCisjZGVmaW5lIEFQTV9JT0NfU1VTUEVORAkJX0lPKCdBJywgMikKKworI2VuZGlmCS8qIExJTlVYX0FQTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2FyY2RldmljZS5oIGIvaW5jbHVkZS9saW51eC9hcmNkZXZpY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTk4ZjEyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9hcmNkZXZpY2UuaApAQCAtMCwwICsxLDM1MCBAQAorLyoKKyAqIElORVQgICAgICAgICBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgVENQL0lQIHByb3RvY29sIHN1aXRlIGZvciB0aGUgTElOVVgKKyAqICAgICAgICAgICAgICBvcGVyYXRpbmcgc3lzdGVtLiAgTkVUICBpcyBpbXBsZW1lbnRlZCB1c2luZyB0aGUgIEJTRCBTb2NrZXQKKyAqICAgICAgICAgICAgICBpbnRlcmZhY2UgYXMgdGhlIG1lYW5zIG9mIGNvbW11bmljYXRpb24gd2l0aCB0aGUgdXNlciBsZXZlbC4KKyAqCisgKiAgICAgICAgICAgICAgRGVmaW5pdGlvbnMgdXNlZCBieSB0aGUgQVJDbmV0IGRyaXZlci4KKyAqCisgKiBBdXRob3JzOiAgICAgQXZlcnkgUGVubmFydW4gYW5kIERhdmlkIFdvb2Rob3VzZQorICoKKyAqICAgICAgICAgICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgICAgICAgICAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgICAgICAgICAgICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqICAgICAgICAgICAgICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworI2lmbmRlZiBfTElOVVhfQVJDREVWSUNFX0gKKyNkZWZpbmUgX0xJTlVYX0FSQ0RFVklDRV9ICisKKyNpbmNsdWRlIDxhc20vdGltZXguaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcmNuZXQuaD4KKworI2lmZGVmIF9fS0VSTkVMX18KKworI2lmbmRlZiBib29sCisjZGVmaW5lIGJvb2wgaW50CisjZW5kaWYKKworLyoKKyAqIFJFQ09OX1RIUkVTSE9MRCBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgUkVDT04gbWVzc2FnZXMgdG8gcmVjZWl2ZQorICogd2l0aGluIG9uZSBtaW51dGUgYmVmb3JlIHByaW50aW5nIGEgImNhYmxpbmcgcHJvYmxlbSIgd2FybmluZy4gVGhlCisgKiBkZWZhdWx0IHZhbHVlIHNob3VsZCBiZSBmaW5lLgorICoKKyAqIEFmdGVyIHRoYXQsIGEgImNhYmxpbmcgcmVzdG9yZWQiIG1lc3NhZ2Ugd2lsbCBiZSBwcmludGVkIG9uIHRoZSBuZXh0IElSUQorICogaWYgbm8gUkVDT04gbWVzc2FnZXMgaGF2ZSBiZWVuIHJlY2VpdmVkIGZvciAxMCBzZWNvbmRzLgorICoKKyAqIERvIG5vdCBkZWZpbmUgUkVDT05fVEhSRVNIT0xEIGF0IGFsbCBpZiB5b3Ugd2FudCB0byBkaXNhYmxlIHRoaXMgZmVhdHVyZS4KKyAqLworI2RlZmluZSBSRUNPTl9USFJFU0hPTEQgMzAKKworCisvKgorICogRGVmaW5lIHRoaXMgdG8gdGhlIG1pbmltdW0gInRpbWVvdXQiIHZhbHVlLiAgSWYgYSB0cmFuc21pdCB0YWtlcyBsb25nZXIKKyAqIHRoYW4gVFhfVElNRU9VVCBqaWZmaWVzLCBMaW51eCB3aWxsIGFib3J0IHRoZSBUWCBhbmQgcmV0cnkuICBPbiBhIGxhcmdlCisgKiBuZXR3b3JrLCBvciBvbmUgd2l0aCBoZWF2eSBuZXR3b3JrIHRyYWZmaWMsIHRoaXMgdGltZW91dCBtYXkgbmVlZCB0byBiZQorICogaW5jcmVhc2VkLiAgVGhlIGxhcmdlciBpdCBpcywgdGhvdWdoLCB0aGUgbG9uZ2VyIGl0IHdpbGwgYmUgYmV0d2VlbgorICogbmVjZXNzYXJ5IHRyYW5zbWl0cyAtIGRvbid0IHNldCB0aGlzIHRvbyBoaWdoLgorICovCisjZGVmaW5lIFRYX1RJTUVPVVQgKEhaICogMjAwIC8gMTAwMCkKKworCisvKiBEaXNwbGF5IHdhcm5pbmdzIGFib3V0IHRoZSBkcml2ZXIgYmVpbmcgYW4gQUxQSEEgdmVyc2lvbi4gKi8KKyN1bmRlZiBBTFBIQV9XQVJOSU5HCisKKworLyoKKyAqIERlYnVnZ2luZyBiaXRmbGFnczogZWFjaCBvcHRpb24gY2FuIGJlIGVuYWJsZWQgaW5kaXZpZHVhbGx5LgorICogCisgKiBOb3RlOiBvbmx5IGRlYnVnIGZsYWdzIGluY2x1ZGVkIGluIHRoZSBBUkNORVRfREVCVUdfTUFYIGRlZmluZSB3aWxsCisgKiAgIGFjdHVhbGx5IGJlIGF2YWlsYWJsZS4gIEdDQyB3aWxsIChhdCBsZWFzdCwgR0NDIDIuNy4wIHdpbGwpIG5vdGljZQorICogICBsaW5lcyB1c2luZyBhIEJVR0xWTCBub3QgaW4gQVJDTkVUX0RFQlVHX01BWCBhbmQgYXV0b21hdGljYWxseSBvcHRpbWl6ZQorICogICB0aGVtIG91dC4KKyAqLworI2RlZmluZSBEX05PUk1BTAkxCS8qIGltcG9ydGFudCBvcGVyYXRpb25hbCBpbmZvICAgICAgICAgICAgICovCisjZGVmaW5lIERfRVhUUkEJCTIJLyogdXNlZnVsLCBidXQgbm9uLXZpdGFsIGluZm9ybWF0aW9uICAgICAgKi8KKyNkZWZpbmUJRF9JTklUCQk0CS8qIHNob3cgaW5pdC9wcm9iZSBtZXNzYWdlcyAgICAgICAgICAgICAgICovCisjZGVmaW5lIERfSU5JVF9SRUFTT05TCTgJLyogc2hvdyByZWFzb25zIGZvciBkaXNjYXJkaW5nIHByb2JlcyAgICAgKi8KKyNkZWZpbmUgRF9SRUNPTgkJMzIJLyogcHJpbnQgYSBtZXNzYWdlIHdoZW5ldmVyIHRva2VuIGlzIGxvc3QgKi8KKyNkZWZpbmUgRF9QUk9UTwkJNjQJLyogZGVidWcgYXV0by1wcm90b2NvbCBzdXBwb3J0ICAgICAgICAgICAgKi8KKy8qIGRlYnVnIGxldmVscyBiZWxvdyBnaXZlIExPVFMgb2Ygb3V0cHV0IGR1cmluZyBub3JtYWwgb3BlcmF0aW9uISAqLworI2RlZmluZSBEX0RVUklORwkxMjgJLyogdHJhY2Ugb3BlcmF0aW9ucyAoaW5jbHVkaW5nIGlycSdzKSAgICAgKi8KKyNkZWZpbmUgRF9UWAkgICAgICAgIDI1NgkvKiBzaG93IHR4IHBhY2tldHMgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBEX1JYCQk1MTIJLyogc2hvdyByeCBwYWNrZXRzICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRF9TS0IJCTEwMjQJLyogc2hvdyBza2IncyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRF9TS0JfU0laRQkyMDQ4CS8qIHNob3cgc2tiIHNpemVzCQkJICAqLworI2RlZmluZSBEX1RJTUlORwk0MDk2CS8qIHNob3cgdGltZSBuZWVkZWQgdG8gY29weSBidWZmZXJzIHRvIGNhcmQgKi8KKyNkZWZpbmUgRF9ERUJVRyAgICAgICAgIDgxOTIgICAgLyogVmVyeSBkZXRhaWxlZCBkZWJ1ZyBsaW5lIGZvciBsaW5lICovCisKKyNpZm5kZWYgQVJDTkVUX0RFQlVHX01BWAorI2RlZmluZSBBUkNORVRfREVCVUdfTUFYICgxMjcpCS8qIGNoYW5nZSB0byB+MCBpZiB5b3Ugd2FudCBkZXRhaWxlZCBkZWJ1Z2dpbmcgKi8KKyNlbmRpZgorCisjaWZuZGVmIEFSQ05FVF9ERUJVRworI2RlZmluZSBBUkNORVRfREVCVUcgKERfTk9STUFMfERfRVhUUkEpCisjZW5kaWYKK2V4dGVybiBpbnQgYXJjbmV0X2RlYnVnOworCisvKiBtYWNyb3MgdG8gc2ltcGxpZnkgZGVidWcgY2hlY2tpbmcgKi8KKyNkZWZpbmUgQlVHTFZMKHgpIGlmICgoQVJDTkVUX0RFQlVHX01BWCkmYXJjbmV0X2RlYnVnJih4KSkKKyNkZWZpbmUgQlVHTVNHMih4LG1zZyxhcmdzLi4uKSBkbyB7IEJVR0xWTCh4KSBwcmludGsobXNnLCAjIyBhcmdzKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgQlVHTVNHKHgsbXNnLGFyZ3MuLi4pIFwKKwlCVUdNU0cyKHgsICIlcyU2czogIiBtc2csIFwKKyAgICAgICAgICAgIHg9PURfTk9STUFMCT8gS0VSTl9XQVJOSU5HIFwKKyAgICAgICAgICAgIAkJOiB4IDwgRF9EVVJJTkcgPyBLRVJOX0lORk8gOiBLRVJOX0RFQlVHLCBcCisJICAgIGRldi0+bmFtZSAsICMjIGFyZ3MpCisKKy8qIHNlZSBob3cgbG9uZyBhIGZ1bmN0aW9uIGNhbGwgdGFrZXMgdG8gcnVuLCBleHByZXNzZWQgaW4gQ1BVIGN5Y2xlcyAqLworI2RlZmluZSBUSU1FKG5hbWUsIGJ5dGVzLCBjYWxsKSBCVUdMVkwoRF9USU1JTkcpIHsgXAorCSAgICB1bnNpZ25lZCBsb25nIF94LCBfeTsgXAorCSAgICBfeCA9IGdldF9jeWNsZXMoKTsgXAorCSAgICBjYWxsOyBcCisJICAgIF95ID0gZ2V0X2N5Y2xlcygpOyBcCisJICAgIEJVR01TRyhEX1RJTUlORywgXAorCSAgICAgICAiJXM6ICVkIGJ5dGVzIGluICVsdSBjeWNsZXMgPT0gIiBcCisJICAgICAgICIlbHUgS2J5dGVzLzEwME1jeWNsZVxuIixcCisJCSAgIG5hbWUsIGJ5dGVzLCBfeSAtIF94LCBcCisJCSAgIDEwMDAwMDAwMCAvIDEwMjQgKiBieXRlcyAvIChfeSAtIF94ICsgMSkpO1wKKwl9IFwKKwllbHNlIHsgXAorCQkgICAgY2FsbDtcCisJfQorCisKKy8qCisgKiBUaW1lIG5lZWRlZCB0byByZXNldCB0aGUgY2FyZCAtIGluIG1zIChtaWxsaXNlY29uZHMpLiAgVGhpcyB3b3JrcyBvbiBteQorICogU01DIFBDMTAwLiAgSSBjYW4ndCBmaW5kIGEgcmVmZXJlbmNlIHRoYXQgdGVsbHMgbWUganVzdCBob3cgbG9uZyBJCisgKiBzaG91bGQgd2FpdC4KKyAqLworI2RlZmluZSBSRVNFVHRpbWUgKDMwMCkKKworLyoKKyAqIFRoZXNlIGFyZSB0aGUgbWF4L21pbiBsZW5ndGhzIG9mIHBhY2tldCBwYXlsb2FkLCBub3QgaW5jbHVkaW5nIHRoZQorICogYXJjX2hhcmR3YXJlIGhlYWRlciwgYnV0IGRlZmluaXRlbHkgaW5jbHVkaW5nIHRoZSBzb2Z0IGhlYWRlci4KKyAqCisgKiBOb3RlOiBwYWNrZXQgc2l6ZXMgMjU0LCAyNTUsIDI1NiBhcmUgaW1wb3NzaWJsZSBiZWNhdXNlIG9mIHRoZSB3YXkKKyAqIEFSQ25ldCByZWdpc3RlcnMgd29yayAgVGhhdCdzIHdoeSBSRkMxMjAxIGRlZmluZXMgImV4Y2VwdGlvbiIgcGFja2V0cy4KKyAqIEluIG5vbi1SRkMxMjAxIHByb3RvY29scywgd2UgaGF2ZSB0byBqdXN0IHRhY2sgc29tZSBleHRyYSBieXRlcyBvbiB0aGUKKyAqIGVuZC4KKyAqLworI2RlZmluZSBNVFUJMjUzCQkvKiBub3JtYWwgcGFja2V0IG1heCBzaXplICovCisjZGVmaW5lIE1pblRVCTI1NwkJLyogZXh0ZW5kZWQgcGFja2V0IG1pbiBzaXplICovCisjZGVmaW5lIFhNVFUJNTA4CQkvKiBleHRlbmRlZCBwYWNrZXQgbWF4IHNpemUgKi8KKworLyogc3RhdHVzL2ludGVycnVwdCBtYXNrIGJpdCBmaWVsZHMgKi8KKyNkZWZpbmUgVFhGUkVFZmxhZwkweDAxCS8qIHRyYW5zbWl0dGVyIGF2YWlsYWJsZSAqLworI2RlZmluZSBUWEFDS2ZsYWcgICAgICAgMHgwMgkvKiB0cmFuc21pdHRlZCBtc2cuIGFja2QgKi8KKyNkZWZpbmUgUkVDT05mbGFnICAgICAgIDB4MDQJLyogbmV0d29yayByZWNvbmZpZ3VyZWQgKi8KKyNkZWZpbmUgVEVTVGZsYWcgICAgICAgIDB4MDgJLyogdGVzdCBmbGFnICovCisjZGVmaW5lIEVYQ05BS2ZsYWcgICAgICAweDA4ICAgIC8qIGV4Y2VzaXZlIG5hayBmbGFnICovCisjZGVmaW5lIFJFU0VUZmxhZyAgICAgICAweDEwCS8qIHBvd2VyLW9uLXJlc2V0ICovCisjZGVmaW5lIFJFUzFmbGFnICAgICAgICAweDIwCS8qIHJlc2VydmVkIC0gdXN1YWxseSBzZXQgYnkganVtcGVyICovCisjZGVmaW5lIFJFUzJmbGFnICAgICAgICAweDQwCS8qIHJlc2VydmVkIC0gdXN1YWxseSBzZXQgYnkganVtcGVyICovCisjZGVmaW5lIE5PUlhmbGFnICAgICAgICAweDgwCS8qIHJlY2VpdmVyIGluaGliaXRlZCAqLworCisvKiBGbGFncyB1c2VkIGZvciBJTy1tYXBwZWQgbWVtb3J5IG9wZXJhdGlvbnMgKi8KKyNkZWZpbmUgQVVUT0lOQ2ZsYWcgICAgIDB4NDAJLyogSW5jcmVhc2UgbG9jYXRpb24gd2l0aCBlYWNoIGFjY2VzcyAqLworI2RlZmluZSBJT01BUGZsYWcgICAgICAgMHgwMgkvKiAoZm9yIDkweHgpIFVzZSBJTyBtYXBwZWQgbWVtb3J5LCBub3QgbW1hcCAqLworI2RlZmluZSBFTkFCTEUxNmZsYWcgICAgMHg4MAkvKiAoZm9yIDkweHgpIEVuYWJsZSAxNi1iaXQgbW9kZSAqLworCisvKiBpbiB0aGUgY29tbWFuZCByZWdpc3RlciwgdGhlIGZvbGxvd2luZyBiaXRzIGhhdmUgdGhlc2UgbWVhbmluZ3M6CisgKiAgICAgICAgICAgICAgICAwLTIgICAgIGNvbW1hbmQKKyAqICAgICAgICAgICAgICAgIDMtNCAgICAgcGFnZSBudW1iZXIgKGZvciBlbmFibGUgcmN2L3htdCBjb21tYW5kKQorICogICAgICAgICAgICAgICAgIDcgICAgICByZWNlaXZlIGJyb2FkY2FzdHMKKyAqLworI2RlZmluZSBOT1RYY21kICAgICAgICAgMHgwMQkvKiBkaXNhYmxlIHRyYW5zbWl0dGVyICovCisjZGVmaW5lIE5PUlhjbWQgICAgICAgICAweDAyCS8qIGRpc2FibGUgcmVjZWl2ZXIgKi8KKyNkZWZpbmUgVFhjbWQgICAgICAgICAgIDB4MDMJLyogZW5hYmxlIHRyYW5zbWl0dGVyICovCisjZGVmaW5lIFJYY21kICAgICAgICAgICAweDA0CS8qIGVuYWJsZSByZWNlaXZlciAqLworI2RlZmluZSBDT05GSUdjbWQgICAgICAgMHgwNQkvKiBkZWZpbmUgY29uZmlndXJhdGlvbiAqLworI2RlZmluZSBDRkxBR1NjbWQgICAgICAgMHgwNgkvKiBjbGVhciBmbGFncyAqLworI2RlZmluZSBURVNUY21kICAgICAgICAgMHgwNwkvKiBsb2FkIHRlc3QgZmxhZ3MgKi8KKworLyogZmxhZ3MgZm9yICJjbGVhciBmbGFncyIgY29tbWFuZCAqLworI2RlZmluZSBSRVNFVGNsZWFyICAgICAgMHgwOAkvKiBwb3dlci1vbi1yZXNldCAqLworI2RlZmluZSBDT05GSUdjbGVhciAgICAgMHgxMAkvKiBzeXN0ZW0gcmVjb25maWd1cmVkICovCisKKyNkZWZpbmUgRVhDTkFLY2xlYXIgICAgIDB4MEUgICAgLyogQ2xlYXIgYW5kIGFja25vd2xlZGdlIHRoZSBleGNpdmUgbmFrIGJpdCAqLworCisvKiBmbGFncyBmb3IgImxvYWQgdGVzdCBmbGFncyIgY29tbWFuZCAqLworI2RlZmluZSBURVNUbG9hZCAgICAgICAgMHgwOAkvKiB0ZXN0IGZsYWcgKGRpYWdub3N0aWMpICovCisKKy8qIGJ5dGUgZGVwb3NpdGVkIGludG8gZmlyc3QgYWRkcmVzcyBvZiBidWZmZXJzIG9uIHJlc2V0ICovCisjZGVmaW5lIFRFU1R2YWx1ZSAgICAgICAwMzIxCS8qIHRoYXQncyBvY3RhbCBmb3IgMHhEMSA6KSAqLworCisvKiBmb3IgImVuYWJsZSByZWNlaXZlciIgY29tbWFuZCAqLworI2RlZmluZSBSWGJjYXN0cyAgICAgICAgMHg4MAkvKiByZWNlaXZlIGJyb2FkY2FzdHMgKi8KKworLyogZmxhZ3MgZm9yICJkZWZpbmUgY29uZmlndXJhdGlvbiIgY29tbWFuZCAqLworI2RlZmluZSBOT1JNQUxjb25mICAgICAgMHgwMAkvKiAxLTI0OSBieXRlIHBhY2tldHMgKi8KKyNkZWZpbmUgRVhUY29uZiAgICAgICAgIDB4MDgJLyogMjUwLTUwNCBieXRlIHBhY2tldHMgKi8KKworLyogY2FyZCBmZWF0dXJlIGZsYWdzLCBzZXQgZHVyaW5nIGF1dG8tZGV0ZWN0aW9uLgorICogKGN1cnJlbnRseSBvbmx5IHVzZWQgYnkgY29tMjAwMjBwY2kpCisgKi8KKyNkZWZpbmUgQVJDX0lTXzVNQklUICAgIDEgICAvKiBjYXJkIGRlZmF1bHQgc3BlZWQgaXMgNU1CaXQgKi8KKyNkZWZpbmUgQVJDX0NBTl8xME1CSVQgIDIgICAvKiBjYXJkIHVzZXMgQ09NMjAwMjIsIHN1cHBvcnRpbmcgMTBNQml0LAorCQkJCSBidXQgZGVmYXVsdCBpcyAyLjVNQml0LiAqLworCisKKy8qIGluZm9ybWF0aW9uIG5lZWRlZCB0byBkZWZpbmUgYW4gZW5jYXBzdWxhdGlvbiBkcml2ZXIgKi8KK3N0cnVjdCBBcmNQcm90byB7CisJY2hhciBzdWZmaXg7CQkvKiBhIGZvciBSRkMxMjAxLCBlIGZvciBldGhlci1lbmNhcCwgZXRjLiAqLworCWludCBtdHU7CQkvKiBsYXJnZXN0IHBvc3NpYmxlIHBhY2tldCAqLworCWludCBpc19pcDsgICAgICAgICAgICAgIC8qIFRoaXMgaXMgYSBpcCBwbHVnaW4gLSBub3QgYSByYXcgdGhpbmcgKi8KKworCXZvaWQgKCpyeCkgKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2LCBpbnQgYnVmbnVtLAorCQkgICAgc3RydWN0IGFyY2hkciAqIHBrdGhkciwgaW50IGxlbmd0aCk7CisJaW50ICgqYnVpbGRfaGVhZGVyKSAoc3RydWN0IHNrX2J1ZmYgKiBza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgIHVuc2lnbmVkIHNob3J0IGV0aHByb3RvLCB1aW50OF90IGRhZGRyKTsKKworCS8qIHRoZXNlIGZ1bmN0aW9ucyByZXR1cm4gJzEnIGlmIHRoZSBza2IgY2FuIG5vdyBiZSBmcmVlZCAqLworCWludCAoKnByZXBhcmVfdHgpIChzdHJ1Y3QgbmV0X2RldmljZSAqIGRldiwgc3RydWN0IGFyY2hkciAqIHBrdCwgaW50IGxlbmd0aCwKKwkJCSAgIGludCBidWZudW0pOworCWludCAoKmNvbnRpbnVlX3R4KSAoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsIGludCBidWZudW0pOworCWludCAoKmFja190eCkgKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2LCBpbnQgYWNrZWQpOworfTsKKworZXh0ZXJuIHN0cnVjdCBBcmNQcm90byAqYXJjX3Byb3RvX21hcFsyNTZdLCAqYXJjX3Byb3RvX2RlZmF1bHQsCisJKmFyY19iY2FzdF9wcm90bywgKmFyY19yYXdfcHJvdG87CitleHRlcm4gc3RydWN0IEFyY1Byb3RvIGFyY19wcm90b19udWxsOworCisKKy8qCisgKiAiSW5jb21pbmciIGlzIGluZm9ybWF0aW9uIG5lZWRlZCBmb3IgZWFjaCBhZGRyZXNzIHRoYXQgY291bGQgYmUgc2VuZGluZworICogdG8gdXMuICBNb3N0bHkgZm9yIHBhcnRpYWxseS1yZWNlaXZlZCBzcGxpdCBwYWNrZXRzLgorICovCitzdHJ1Y3QgSW5jb21pbmcgeworCXN0cnVjdCBza19idWZmICpza2I7CS8qIHBhY2tldCBkYXRhIGJ1ZmZlciAgICAgICAgICAgICAqLworCXVpbnQxNl90IHNlcXVlbmNlOwkvKiBzZXF1ZW5jZSBudW1iZXIgb2YgYXNzZW1ibHkgICAgKi8KKwl1aW50OF90IGxhc3RwYWNrZXQsCS8qIG51bWJlciBvZiBsYXN0IHBhY2tldCAoZnJvbSAxKSAqLworCQludW1wYWNrZXRzOwkvKiBudW1iZXIgb2YgcGFja2V0cyBpbiBzcGxpdCAgICAgKi8KK307CisKKworLyogb25seSBuZWVkZWQgZm9yIFJGQzEyMDEgKi8KK3N0cnVjdCBPdXRnb2luZyB7CisJc3RydWN0IEFyY1Byb3RvICpwcm90bzsJLyogcHJvdG9jb2wgZHJpdmVyIHRoYXQgb3ducyB0aGlzOgorCQkJCSAqICAgaWYgTlVMTCwgbm8gcGFja2V0IGlzIHBlbmRpbmcuCisJCQkJICovCisJc3RydWN0IHNrX2J1ZmYgKnNrYjsJLyogYnVmZmVyIGZyb20gdXBwZXIgbGV2ZWxzICovCisJc3RydWN0IGFyY2hkciAqcGt0OwkvKiBhIHBvaW50ZXIgaW50byB0aGUgc2tiICovCisJdWludDE2X3QgbGVuZ3RoLAkvKiBieXRlcyB0b3RhbCAqLworCQlkYXRhbGVmdCwJLyogYnl0ZXMgbGVmdCAqLworCQlzZWdudW0sCQkvKiBzZWdtZW50IGJlaW5nIHNlbnQgKi8KKwkJbnVtc2VnczsJLyogbnVtYmVyIG9mIHNlZ21lbnRzICovCit9OworCisKK3N0cnVjdCBhcmNuZXRfbG9jYWwgeworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOworCisJdWludDhfdCBjb25maWcsCQkvKiBjdXJyZW50IHZhbHVlIG9mIENPTkZJRyByZWdpc3RlciAqLworCQl0aW1lb3V0LAkvKiBFeHRlbmRlZCB0aW1lb3V0IGZvciBDT00yMDAyMCAqLworCQliYWNrcGxhbmUsCS8qIEJhY2twbGFuZSBmbGFnIGZvciBDT00yMDAyMCAqLworCQljbG9ja3AsCQkvKiBDT00yMDAyMCBjbG9jayBkaXZpZGVyICovCisJCWNsb2NrbSwJCS8qIENPTTIwMDIwIGNsb2NrIG11bHRpcGxpZXIgZmxhZyAqLworCQlzZXR1cCwJCS8qIENvbnRlbnRzIG9mIHNldHVwMSByZWdpc3RlciAqLworCQlzZXR1cDIsCQkvKiBDb250ZW50cyBvZiBzZXR1cDIgcmVnaXN0ZXIgKi8KKwkJaW50bWFzazsJLyogY3VycmVudCB2YWx1ZSBvZiBJTlRNQVNLIHJlZ2lzdGVyICovCisJdWludDhfdCBkZWZhdWx0X3Byb3RvWzI1Nl07CS8qIGRlZmF1bHQgZW5jYXAgdG8gdXNlIGZvciBlYWNoIGhvc3QgKi8KKwlpbnQJY3VyX3R4LAkJLyogYnVmZmVyIHVzZWQgYnkgY3VycmVudCB0cmFuc21pdCwgb3IgLTEgKi8KKwkJbmV4dF90eCwJLyogYnVmZmVyIHdoZXJlIGEgcGFja2V0IGlzIHJlYWR5IHRvIHNlbmQgKi8KKwkJY3VyX3J4OwkJLyogY3VycmVudCByZWNlaXZlIGJ1ZmZlciAqLworCWludAlsYXN0bG9hZF9kZXN0LAkvKiBjYW4gbGFzdCBsb2FkZWQgcGFja2V0IGJlIGFja2VkPyAqLworCQlsYXN0dHJhbnNfZGVzdDsJLyogY2FuIGxhc3QgVFgnZCBwYWNrZXQgYmUgYWNrZWQ/ICovCisJaW50CXRpbWVkX291dDsJLyogbmVlZCB0byBwcm9jZXNzIFRYIHRpbWVvdXQgYW5kIGRyb3AgcGFja2V0ICovCisJdW5zaWduZWQgbG9uZyBsYXN0X3RpbWVvdXQ7CS8qIHRpbWUgb2YgbGFzdCByZXBvcnRlZCB0aW1lb3V0ICovCisJY2hhciAqY2FyZF9uYW1lOwkvKiBjYXJkIGlkZW50IHN0cmluZyAqLworCWludCBjYXJkX2ZsYWdzOwkJLyogc3BlY2lhbCBjYXJkIGZlYXR1cmVzICovCisKKworCS8qIE9uIHByZWVtdGl2ZSBhbmQgU01CIGEgbG9jayBpcyBuZWVkZWQgKi8KKwlzcGlubG9ja190IGxvY2s7CisKKwkvKgorCSAqIEJ1ZmZlciBtYW5hZ2VtZW50OiBhbiBBUkNuZXQgY2FyZCBoYXMgNCB4IDUxMi1ieXRlIGJ1ZmZlcnMsIGVhY2ggb2YKKwkgKiB3aGljaCBjYW4gYmUgdXNlZCBmb3IgZWl0aGVyIHNlbmRpbmcgb3IgcmVjZWl2aW5nLiAgVGhlIG5ldyBkeW5hbWljCisJICogYnVmZmVyIG1hbmFnZW1lbnQgcm91dGluZXMgdXNlIGEgc2ltcGxlIGNpcmN1bGFyIHF1ZXVlIG9mIGF2YWlsYWJsZQorCSAqIGJ1ZmZlcnMsIGFuZCB0YWtlIHRoZW0gYXMgdGhleSdyZSBuZWVkZWQuICBUaGlzIHdheSwgd2Ugc2ltcGxpZnkKKwkgKiBzaXR1YXRpb25zIGluIHdoaWNoIHdlIChmb3IgZXhhbXBsZSkgd2FudCB0byBwcmUtbG9hZCBhIHRyYW5zbWl0CisJICogYnVmZmVyLCBvciBzdGFydCByZWNlaXZpbmcgd2hpbGUgd2UgY29weSBhIHJlY2VpdmVkIHBhY2tldCB0bworCSAqIG1lbW9yeS4KKwkgKiAKKwkgKiBUaGUgcnVsZXM6IG9ubHkgdGhlIGludGVycnVwdCBoYW5kbGVyIGlzIGFsbG93ZWQgdG8gX2FkZF8gYnVmZmVycyB0bworCSAqIHRoZSBxdWV1ZTsgdGh1cywgdGhpcyBkb2Vzbid0IHJlcXVpcmUgYSBsb2NrLiAgQm90aCB0aGUgaW50ZXJydXB0CisJICogaGFuZGxlciBhbmQgdGhlIHRyYW5zbWl0IGZ1bmN0aW9uIHdpbGwgd2FudCB0byBfcmVtb3ZlXyBidWZmZXJzLCBzbworCSAqIHdlIG5lZWQgdG8gaGFuZGxlIHRoZSBzaXR1YXRpb24gd2hlcmUgdGhleSB0cnkgdG8gZG8gaXQgYXQgdGhlIHNhbWUKKwkgKiB0aW1lLgorCSAqIAorCSAqIElmIG5leHRfYnVmID09IGZpcnN0X2ZyZWVfYnVmLCB0aGUgcXVldWUgaXMgZW1wdHkuICBTaW5jZSB0aGVyZSBhcmUKKwkgKiBvbmx5IGZvdXIgcG9zc2libGUgYnVmZmVycywgdGhlIHF1ZXVlIHNob3VsZCBuZXZlciBiZSBmdWxsLgorCSAqLworCWF0b21pY190IGJ1Zl9sb2NrOworCWludCBidWZfcXVldWVbNV07CisJaW50IG5leHRfYnVmLCBmaXJzdF9mcmVlX2J1ZjsKKworCS8qIG5ldHdvcmsgInJlY29uZmlndXJhdGlvbiIgaGFuZGxpbmcgKi8KKwl0aW1lX3QgZmlyc3RfcmVjb24sCS8qIHRpbWUgb2YgImZpcnN0IiBSRUNPTiBtZXNzYWdlIHRvIGNvdW50ICovCisJCWxhc3RfcmVjb247CS8qIHRpbWUgb2YgbW9zdCByZWNlbnQgUkVDT04gKi8KKwlpbnQgbnVtX3JlY29uczsJCS8qIG51bWJlciBvZiBSRUNPTnMgYmV0d2VlbiBmaXJzdCBhbmQgbGFzdC4gKi8KKwlib29sIG5ldHdvcmtfZG93bjsJLyogZG8gd2UgdGhpbmsgdGhlIG5ldHdvcmsgaXMgZG93bj8gKi8KKworCWJvb2wgZXhjbmFrX3BlbmRpbmc7ICAgIC8qIFdlIGp1c3QgZ290IGFuIGV4Y2VzaXZlIG5hayBpbnRlcnJ1cHQgKi8KKworCXN0cnVjdCB7CisJCXVpbnQxNl90IHNlcXVlbmNlOwkvKiBzZXF1ZW5jZSBudW1iZXIgKGluY3Mgd2l0aCBlYWNoIHBhY2tldCkgKi8KKwkJdWludDE2X3QgYWJvcnRlZF9zZXE7CisKKwkJc3RydWN0IEluY29taW5nIGluY29taW5nWzI1Nl07CS8qIG9uZSBmcm9tIGVhY2ggYWRkcmVzcyAqLworCX0gcmZjMTIwMTsKKworCS8qIHJlYWxseSBvbmx5IHVzZWQgYnkgcmZjMTIwMSwgYnV0IHdlJ2xsIHByZXRlbmQgaXQncyBub3QgKi8KKwlzdHJ1Y3QgT3V0Z29pbmcgb3V0Z29pbmc7CS8qIHBhY2tldCBjdXJyZW50bHkgYmVpbmcgc2VudCAqLworCisJLyogaGFyZHdhcmUtc3BlY2lmaWMgZnVuY3Rpb25zICovCisJc3RydWN0IHsKKwkJc3RydWN0IG1vZHVsZSAqb3duZXI7CisJCXZvaWQgKCpjb21tYW5kKSAoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsIGludCBjbWQpOworCQlpbnQgKCpzdGF0dXMpIChzdHJ1Y3QgbmV0X2RldmljZSAqIGRldik7CisJCXZvaWQgKCppbnRtYXNrKSAoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsIGludCBtYXNrKTsKKwkJYm9vbCAoKnJlc2V0KSAoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsIGJvb2wgcmVhbGx5X3Jlc2V0KTsKKwkJdm9pZCAoKm9wZW4pIChzdHJ1Y3QgbmV0X2RldmljZSAqIGRldik7CisJCXZvaWQgKCpjbG9zZSkgKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2KTsKKworCQl2b2lkICgqY29weV90b19jYXJkKSAoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsIGludCBidWZudW0sIGludCBvZmZzZXQsCisJCQkJICAgICAgdm9pZCAqYnVmLCBpbnQgY291bnQpOworCQl2b2lkICgqY29weV9mcm9tX2NhcmQpIChzdHJ1Y3QgbmV0X2RldmljZSAqIGRldiwgaW50IGJ1Zm51bSwgaW50IG9mZnNldCwKKwkJCQkJdm9pZCAqYnVmLCBpbnQgY291bnQpOworCX0gaHc7CisKKwl2b2lkIF9faW9tZW0gKm1lbV9zdGFydDsJLyogcG9pbnRlciB0byBpb3JlbWFwJ2VkIE1NSU8gKi8KK307CisKKworI2RlZmluZSBBUkNSRVNFVCh4KSAgKGxwLT5ody5yZXNldChkZXYsICh4KSkpCisjZGVmaW5lIEFDT01NQU5EKHgpICAobHAtPmh3LmNvbW1hbmQoZGV2LCAoeCkpKQorI2RlZmluZSBBU1RBVFVTKCkgICAgKGxwLT5ody5zdGF0dXMoZGV2KSkKKyNkZWZpbmUgQUlOVE1BU0soeCkgIChscC0+aHcuaW50bWFzayhkZXYsICh4KSkpCisKKworCisjaWYgQVJDTkVUX0RFQlVHX01BWCAmIERfU0tCCit2b2lkIGFyY25ldF9kdW1wX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjaGFyICpkZXNjKTsKKyNlbHNlCisjZGVmaW5lIGFyY25ldF9kdW1wX3NrYihkZXYsc2tiLGRlc2MpIDsKKyNlbmRpZgorCisjaWYgKEFSQ05FVF9ERUJVR19NQVggJiBEX1JYKSB8fCAoQVJDTkVUX0RFQlVHX01BWCAmIERfVFgpCit2b2lkIGFyY25ldF9kdW1wX3BhY2tldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgYnVmbnVtLCBjaGFyICpkZXNjLAorCQkJaW50IHRha2VfYXJjbmV0X2xvY2spOworI2Vsc2UKKyNkZWZpbmUgYXJjbmV0X2R1bXBfcGFja2V0KGRldiwgYnVmbnVtLCBkZXNjLHRha2VfYXJjbmV0X2xvY2spIDsKKyNlbmRpZgorCit2b2lkIGFyY25ldF91bnJlZ2lzdGVyX3Byb3RvKHN0cnVjdCBBcmNQcm90byAqcHJvdG8pOworaXJxcmV0dXJuX3QgYXJjbmV0X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK3N0cnVjdCBuZXRfZGV2aWNlICphbGxvY19hcmNkZXYoY2hhciAqbmFtZSk7Cit2b2lkIGFyY25ldF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgYnVmbnVtKTsKKworI2VuZGlmCQkJCS8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZgkJCQkvKiBfTElOVVhfQVJDREVWSUNFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYXRhLmggYi9pbmNsdWRlL2xpbnV4L2F0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxNzg4OTQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2F0YS5oCkBAIC0wLDAgKzEsMjY4IEBACisKKy8qCisgICBDb3B5cmlnaHQgMjAwMy0yMDA0IFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICBDb3B5cmlnaHQgMjAwMy0yMDA0IEplZmYgR2FyemlrCisKKyAgIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE9wZW4KKyAgIFNvZnR3YXJlIExpY2Vuc2UgdmVyc2lvbiAxLjEgdGhhdCBjYW4gYmUgZm91bmQgYXQKKyAgIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvb3NsLTEuMS50eHQgYW5kIGlzIGluY2x1ZGVkIGhlcmVpbgorICAgYnkgcmVmZXJlbmNlLgorCisgICBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcworICAgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiAodGhlICJHUEwiKSBhcyBkaXN0cmlidXRlZAorICAgaW4gdGhlIGtlcm5lbCBzb3VyY2UgQ09QWUlORyBmaWxlLCBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mCisgICB0aGUgR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhlIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cKKyAgIHRoZSB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAgIEdQTCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcgorICAgdGhlIE9TTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbiBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQKKyAgIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UgYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTC4KKyAgIElmIHlvdSBkbyBub3QgZGVsZXRlIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIKKyAgIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIGVpdGhlciB0aGUgT1NMIG9yIHRoZSBHUEwuCisKKyAqLworCisjaWZuZGVmIF9fTElOVVhfQVRBX0hfXworI2RlZmluZSBfX0xJTlVYX0FUQV9IX18KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qIGRlZmluZXMgb25seSBmb3IgdGhlIGNvbnN0YW50cyB3aGljaCBkb24ndCB3b3JrIHdlbGwgYXMgZW51bXMgKi8KKyNkZWZpbmUgQVRBX0RNQV9CT1VOREFSWQkweGZmZmZVTAorI2RlZmluZSBBVEFfRE1BX01BU0sJCTB4ZmZmZmZmZmZVTEwKKworZW51bSB7CisJLyogdmFyaW91cyBnbG9iYWwgY29uc3RhbnRzICovCisJQVRBX01BWF9ERVZJQ0VTCQk9IDIsCS8qIHBlciBidXMvcG9ydCAqLworCUFUQV9NQVhfUFJECQk9IDI1NiwJLyogd2UgY291bGQgbWFrZSB0aGVzZSAyNTYvMjU2ICovCisJQVRBX1NFQ1RfU0laRQkJPSA1MTIsCisKKwlBVEFfSURfV09SRFMJCT0gMjU2LAorCUFUQV9JRF9QUk9EX09GUwkJPSAyNywKKwlBVEFfSURfRldfUkVWX09GUwk9IDIzLAorCUFUQV9JRF9TRVJOT19PRlMJPSAxMCwKKwlBVEFfSURfTUFKT1JfVkVSCT0gODAsCisJQVRBX0lEX1BJT19NT0RFUwk9IDY0LAorCUFUQV9JRF9NV0RNQV9NT0RFUwk9IDYzLAorCUFUQV9JRF9VRE1BX01PREVTCT0gODgsCisJQVRBX0lEX1BJTzQJCT0gKDEgPDwgMSksCisKKwlBVEFfUENJX0NUTF9PRlMJCT0gMiwKKwlBVEFfU0VSTk9fTEVOCQk9IDIwLAorCUFUQV9VRE1BMAkJPSAoMSA8PCAwKSwKKwlBVEFfVURNQTEJCT0gQVRBX1VETUEwIHwgKDEgPDwgMSksCisJQVRBX1VETUEyCQk9IEFUQV9VRE1BMSB8ICgxIDw8IDIpLAorCUFUQV9VRE1BMwkJPSBBVEFfVURNQTIgfCAoMSA8PCAzKSwKKwlBVEFfVURNQTQJCT0gQVRBX1VETUEzIHwgKDEgPDwgNCksCisJQVRBX1VETUE1CQk9IEFUQV9VRE1BNCB8ICgxIDw8IDUpLAorCUFUQV9VRE1BNgkJPSBBVEFfVURNQTUgfCAoMSA8PCA2KSwKKwlBVEFfVURNQTcJCT0gQVRBX1VETUE2IHwgKDEgPDwgNyksCisJLyogQVRBX1VETUE3IGlzIGp1c3QgZm9yIGNvbXBsZXRlbmVzcy4uLiBkb2Vzbid0IGV4aXN0ICh5ZXQ/KS4gICovCisKKwlBVEFfVURNQV9NQVNLXzQwQwk9IEFUQV9VRE1BMiwJLyogdWRtYTAtMiAqLworCisJLyogRE1BLXJlbGF0ZWQgKi8KKwlBVEFfUFJEX1NaCQk9IDgsCisJQVRBX1BSRF9UQkxfU1oJCT0gKEFUQV9NQVhfUFJEICogQVRBX1BSRF9TWiksCisJQVRBX1BSRF9FT1QJCT0gKDEgPDwgMzEpLAkvKiBlbmQtb2YtdGFibGUgZmxhZyAqLworCisJQVRBX0RNQV9UQUJMRV9PRlMJPSA0LAorCUFUQV9ETUFfU1RBVFVTCQk9IDIsCisJQVRBX0RNQV9DTUQJCT0gMCwKKwlBVEFfRE1BX1dSCQk9ICgxIDw8IDMpLAorCUFUQV9ETUFfU1RBUlQJCT0gKDEgPDwgMCksCisJQVRBX0RNQV9JTlRSCQk9ICgxIDw8IDIpLAorCUFUQV9ETUFfRVJSCQk9ICgxIDw8IDEpLAorCUFUQV9ETUFfQUNUSVZFCQk9ICgxIDw8IDApLAorCisJLyogYml0cyBpbiBBVEEgY29tbWFuZCBibG9jayByZWdpc3RlcnMgKi8KKwlBVEFfSE9CCQkJPSAoMSA8PCA3KSwJLyogTEJBNDggc2VsZWN0b3IgKi8KKwlBVEFfTklFTgkJPSAoMSA8PCAxKSwJLyogZGlzYWJsZS1pcnEgZmxhZyAqLworCUFUQV9MQkEJCQk9ICgxIDw8IDYpLAkvKiBMQkEyOCBzZWxlY3RvciAqLworCUFUQV9ERVYxCQk9ICgxIDw8IDQpLAkvKiBTZWxlY3QgRGV2aWNlIDEgKHNsYXZlKSAqLworCUFUQV9ERVZJQ0VfT0JTCQk9ICgxIDw8IDcpIHwgKDEgPDwgNSksIC8qIG9icyBiaXRzIGluIGRldiByZWcgKi8KKwlBVEFfREVWQ1RMX09CUwkJPSAoMSA8PCAzKSwJLyogb2Jzb2xldGUgYml0IGluIGRldmN0bCByZWcgKi8KKwlBVEFfQlVTWQkJPSAoMSA8PCA3KSwJLyogQlNZIHN0YXR1cyBiaXQgKi8KKwlBVEFfRFJEWQkJPSAoMSA8PCA2KSwJLyogZGV2aWNlIHJlYWR5ICovCisJQVRBX0RGCQkJPSAoMSA8PCA1KSwJLyogZGV2aWNlIGZhdWx0ICovCisJQVRBX0RSUQkJCT0gKDEgPDwgMyksCS8qIGRhdGEgcmVxdWVzdCBpL28gKi8KKwlBVEFfRVJSCQkJPSAoMSA8PCAwKSwJLyogaGF2ZSBhbiBlcnJvciAqLworCUFUQV9TUlNUCQk9ICgxIDw8IDIpLAkvKiBzb2Z0d2FyZSByZXNldCAqLworCUFUQV9BQk9SVEVECQk9ICgxIDw8IDIpLAkvKiBjb21tYW5kIGFib3J0ZWQgKi8KKworCS8qIEFUQSBjb21tYW5kIGJsb2NrIHJlZ2lzdGVycyAqLworCUFUQV9SRUdfREFUQQkJPSAweDAwLAorCUFUQV9SRUdfRVJSCQk9IDB4MDEsCisJQVRBX1JFR19OU0VDVAkJPSAweDAyLAorCUFUQV9SRUdfTEJBTAkJPSAweDAzLAorCUFUQV9SRUdfTEJBTQkJPSAweDA0LAorCUFUQV9SRUdfTEJBSAkJPSAweDA1LAorCUFUQV9SRUdfREVWSUNFCQk9IDB4MDYsCisJQVRBX1JFR19TVEFUVVMJCT0gMHgwNywKKworCUFUQV9SRUdfRkVBVFVSRQkJPSBBVEFfUkVHX0VSUiwgLyogYW5kIHRoZWlyIGFsaWFzZXMgKi8KKwlBVEFfUkVHX0NNRAkJPSBBVEFfUkVHX1NUQVRVUywKKwlBVEFfUkVHX0JZVEVMCQk9IEFUQV9SRUdfTEJBTSwKKwlBVEFfUkVHX0JZVEVICQk9IEFUQV9SRUdfTEJBSCwKKwlBVEFfUkVHX0RFVlNFTAkJPSBBVEFfUkVHX0RFVklDRSwKKwlBVEFfUkVHX0lSUQkJPSBBVEFfUkVHX05TRUNULAorCisJLyogQVRBIGRldmljZSBjb21tYW5kcyAqLworCUFUQV9DTURfQ0hLX1BPV0VSCT0gMHhFNSwgLyogY2hlY2sgcG93ZXIgbW9kZSAqLworCUFUQV9DTURfRURECQk9IDB4OTAsCS8qIGV4ZWN1dGUgZGV2aWNlIGRpYWdub3N0aWMgKi8KKwlBVEFfQ01EX0ZMVVNICQk9IDB4RTcsCisJQVRBX0NNRF9GTFVTSF9FWFQJPSAweEVBLAorCUFUQV9DTURfSURfQVRBCQk9IDB4RUMsCisJQVRBX0NNRF9JRF9BVEFQSQk9IDB4QTEsCisJQVRBX0NNRF9SRUFECQk9IDB4QzgsCisJQVRBX0NNRF9SRUFEX0VYVAk9IDB4MjUsCisJQVRBX0NNRF9XUklURQkJPSAweENBLAorCUFUQV9DTURfV1JJVEVfRVhUCT0gMHgzNSwKKwlBVEFfQ01EX1BJT19SRUFECT0gMHgyMCwKKwlBVEFfQ01EX1BJT19SRUFEX0VYVAk9IDB4MjQsCisJQVRBX0NNRF9QSU9fV1JJVEUJPSAweDMwLAorCUFUQV9DTURfUElPX1dSSVRFX0VYVAk9IDB4MzQsCisJQVRBX0NNRF9TRVRfRkVBVFVSRVMJPSAweEVGLAorCUFUQV9DTURfUEFDS0VUCQk9IDB4QTAsCisJQVRBX0NNRF9WRVJJRlkJCT0gMHg0MCwKKwlBVEFfQ01EX1ZFUklGWV9FWFQJPSAweDQyLAorCisJLyogU0VURkVBVFVSRVMgc3R1ZmYgKi8KKwlTRVRGRUFUVVJFU19YRkVSCT0gMHgwMywKKwlYRkVSX1VETUFfNwkJPSAweDQ3LAorCVhGRVJfVURNQV82CQk9IDB4NDYsCisJWEZFUl9VRE1BXzUJCT0gMHg0NSwKKwlYRkVSX1VETUFfNAkJPSAweDQ0LAorCVhGRVJfVURNQV8zCQk9IDB4NDMsCisJWEZFUl9VRE1BXzIJCT0gMHg0MiwKKwlYRkVSX1VETUFfMQkJPSAweDQxLAorCVhGRVJfVURNQV8wCQk9IDB4NDAsCisJWEZFUl9NV19ETUFfMgkJPSAweDIyLAorCVhGRVJfTVdfRE1BXzEJCT0gMHgyMSwKKwlYRkVSX01XX0RNQV8wCQk9IDB4MjAsCisJWEZFUl9QSU9fNAkJPSAweDBDLAorCVhGRVJfUElPXzMJCT0gMHgwQiwKKwlYRkVSX1BJT18yCQk9IDB4MEEsCisJWEZFUl9QSU9fMQkJPSAweDA5LAorCVhGRVJfUElPXzAJCT0gMHgwOCwKKwlYRkVSX1NXX0RNQV8yCQk9IDB4MTIsCisJWEZFUl9TV19ETUFfMQkJPSAweDExLAorCVhGRVJfU1dfRE1BXzAJCT0gMHgxMCwKKwlYRkVSX1BJT19TTE9XCQk9IDB4MDAsCisKKwkvKiBBVEFQSSBzdHVmZiAqLworCUFUQVBJX1BLVF9ETUEJCT0gKDEgPDwgMCksCisJQVRBUElfRE1BRElSCQk9ICgxIDw8IDIpLAkvKiBBVEFQSSBkYXRhIGRpcjoKKwkJCQkJCSAgIDA9dG8gZGV2aWNlLCAxPXRvIGhvc3QgKi8KKwlBVEFQSV9DREJfTEVOCQk9IDE2LAorCisJLyogY2FibGUgdHlwZXMgKi8KKwlBVEFfQ0JMX05PTkUJCT0gMCwKKwlBVEFfQ0JMX1BBVEE0MAkJPSAxLAorCUFUQV9DQkxfUEFUQTgwCQk9IDIsCisJQVRBX0NCTF9QQVRBX1VOSwk9IDMsCisJQVRBX0NCTF9TQVRBCQk9IDQsCisKKwkvKiBTQVRBIFN0YXR1cyBhbmQgQ29udHJvbCBSZWdpc3RlcnMgKi8KKwlTQ1JfU1RBVFVTCQk9IDAsCisJU0NSX0VSUk9SCQk9IDEsCisJU0NSX0NPTlRST0wJCT0gMiwKKwlTQ1JfQUNUSVZFCQk9IDMsCisJU0NSX05PVElGSUNBVElPTgk9IDQsCisKKwkvKiBzdHJ1Y3QgYXRhX3Rhc2tmaWxlIGZsYWdzICovCisJQVRBX1RGTEFHX0xCQTQ4CQk9ICgxIDw8IDApLCAvKiBlbmFibGUgNDgtYml0IExCQSBhbmQgIkhPQiIgKi8KKwlBVEFfVEZMQUdfSVNBRERSCT0gKDEgPDwgMSksIC8qIGVuYWJsZSByL3cgdG8gbnNlY3QvbGJhIHJlZ3MgKi8KKwlBVEFfVEZMQUdfREVWSUNFCT0gKDEgPDwgMiksIC8qIGVuYWJsZSByL3cgdG8gZGV2aWNlIHJlZyAqLworCUFUQV9URkxBR19XUklURQkJPSAoMSA8PCAzKSwgLyogZGF0YSBkaXI6IGhvc3QtPmRldj09MSAod3JpdGUpICovCit9OworCitlbnVtIGF0YV90Zl9wcm90b2NvbHMgeworCS8qIEFUQSB0YXNrZmlsZSBwcm90b2NvbHMgKi8KKwlBVEFfUFJPVF9VTktOT1dOLAkvKiB1bmtub3duL2ludmFsaWQgKi8KKwlBVEFfUFJPVF9OT0RBVEEsCS8qIG5vIGRhdGEgKi8KKwlBVEFfUFJPVF9QSU8sCQkvKiBQSU8gc2luZ2xlIHNlY3RvciAqLworCUFUQV9QUk9UX1BJT19NVUxULAkvKiBQSU8gbXVsdGlwbGUgc2VjdG9yICovCisJQVRBX1BST1RfRE1BLAkJLyogRE1BICovCisJQVRBX1BST1RfQVRBUEksCQkvKiBwYWNrZXQgY29tbWFuZCwgUElPIGRhdGEgeGZlciovCisJQVRBX1BST1RfQVRBUElfTk9EQVRBLAkvKiBwYWNrZXQgY29tbWFuZCwgbm8gZGF0YSAqLworCUFUQV9QUk9UX0FUQVBJX0RNQSwJLyogcGFja2V0IGNvbW1hbmQgd2l0aCBzcGVjaWFsIERNQSBzYXVjZSAqLworfTsKKworZW51bSBhdGFfaW9jdGxzIHsKKwlBVEFfSU9DX0dFVF9JTzMyCT0gMHgzMDksCisJQVRBX0lPQ19TRVRfSU8zMgk9IDB4MzI0LAorfTsKKworLyogY29yZSBzdHJ1Y3R1cmVzICovCisKK3N0cnVjdCBhdGFfcHJkIHsKKwl1MzIJCQlhZGRyOworCXUzMgkJCWZsYWdzX2xlbjsKK307CisKK3N0cnVjdCBhdGFfdGFza2ZpbGUgeworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwkJLyogQVRBX1RGTEFHX3h4eCAqLworCXU4CQkJcHJvdG9jb2w7CS8qIEFUQV9QUk9UX3h4eCAqLworCisJdTgJCQljdGw7CQkvKiBjb250cm9sIHJlZyAqLworCisJdTgJCQlob2JfZmVhdHVyZTsJLyogYWRkaXRpb25hbCBkYXRhICovCisJdTgJCQlob2JfbnNlY3Q7CS8qIHRvIHN1cHBvcnQgTEJBNDggKi8KKwl1OAkJCWhvYl9sYmFsOworCXU4CQkJaG9iX2xiYW07CisJdTgJCQlob2JfbGJhaDsKKworCXU4CQkJZmVhdHVyZTsKKwl1OAkJCW5zZWN0OworCXU4CQkJbGJhbDsKKwl1OAkJCWxiYW07CisJdTgJCQlsYmFoOworCisJdTgJCQlkZXZpY2U7CisKKwl1OAkJCWNvbW1hbmQ7CS8qIElPIG9wZXJhdGlvbiAqLworfTsKKworI2RlZmluZSBhdGFfaWRfaXNfYXRhKGlkKQkoKChpZClbMF0gJiAoMSA8PCAxNSkpID09IDApCisjZGVmaW5lIGF0YV9pZF9yYWhlYWRfZW5hYmxlZChpZCkgKChpZClbODVdICYgKDEgPDwgNikpCisjZGVmaW5lIGF0YV9pZF93Y2FjaGVfZW5hYmxlZChpZCkgKChpZClbODVdICYgKDEgPDwgNSkpCisjZGVmaW5lIGF0YV9pZF9oYXNfZmx1c2goaWQpICgoaWQpWzgzXSAmICgxIDw8IDEyKSkKKyNkZWZpbmUgYXRhX2lkX2hhc19mbHVzaF9leHQoaWQpICgoaWQpWzgzXSAmICgxIDw8IDEzKSkKKyNkZWZpbmUgYXRhX2lkX2hhc19sYmE0OChpZCkJKChpZClbODNdICYgKDEgPDwgMTApKQorI2RlZmluZSBhdGFfaWRfaGFzX3djYWNoZShpZCkJKChpZClbODJdICYgKDEgPDwgNSkpCisjZGVmaW5lIGF0YV9pZF9oYXNfcG0oaWQpCSgoaWQpWzgyXSAmICgxIDw8IDMpKQorI2RlZmluZSBhdGFfaWRfaGFzX2xiYShpZCkJKChpZClbNDldICYgKDEgPDwgOSkpCisjZGVmaW5lIGF0YV9pZF9oYXNfZG1hKGlkKQkoKGlkKVs0OV0gJiAoMSA8PCA4KSkKKyNkZWZpbmUgYXRhX2lkX3JlbW92ZWFibGUoaWQpCSgoaWQpWzBdICYgKDEgPDwgNykpCisjZGVmaW5lIGF0YV9pZF91MzIoaWQsbikJXAorCSgoKHUzMikgKGlkKVsobikgKyAxXSA8PCAxNikgfCAoKHUzMikgKGlkKVsobildKSkKKyNkZWZpbmUgYXRhX2lkX3U2NChpZCxuKQlcCisJKCAoKHU2NCkgKGlkKVsobikgKyAzXSA8PCA0OCkgfAlcCisJICAoKHU2NCkgKGlkKVsobikgKyAyXSA8PCAzMikgfAlcCisJICAoKHU2NCkgKGlkKVsobikgKyAxXSA8PCAxNikgfAlcCisJICAoKHU2NCkgKGlkKVsobikgKyAwXSkgKQorCitzdGF0aWMgaW5saW5lIGludCBhdGFwaV9jZGJfbGVuKHUxNiAqZGV2X2lkKQoreworCXUxNiB0bXAgPSBkZXZfaWRbMF0gJiAweDM7CisJc3dpdGNoICh0bXApIHsKKwljYXNlIDA6CQlyZXR1cm4gMTI7CisJY2FzZSAxOgkJcmV0dXJuIDE2OworCWRlZmF1bHQ6CXJldHVybiAtMTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGlzX2F0YXBpX3Rhc2tmaWxlKHN0cnVjdCBhdGFfdGFza2ZpbGUgKnRmKQoreworCXJldHVybiAodGYtPnByb3RvY29sID09IEFUQV9QUk9UX0FUQVBJKSB8fAorCSAgICAgICAodGYtPnByb3RvY29sID09IEFUQV9QUk9UX0FUQVBJX05PREFUQSkgfHwKKwkgICAgICAgKHRmLT5wcm90b2NvbCA9PSBBVEFfUFJPVF9BVEFQSV9ETUEpOworfQorCitzdGF0aWMgaW5saW5lIGludCBhdGFfb2sodTggc3RhdHVzKQoreworCXJldHVybiAoKHN0YXR1cyAmIChBVEFfQlVTWSB8IEFUQV9EUkRZIHwgQVRBX0RGIHwgQVRBX0RSUSB8IEFUQV9FUlIpKQorCQkJPT0gQVRBX0RSRFkpOworfQorCisjZW5kaWYgLyogX19MSU5VWF9BVEFfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2F0YWxrLmggYi9pbmNsdWRlL2xpbnV4L2F0YWxrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVmY2ZjMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvYXRhbGsuaApAQCAtMCwwICsxLDI0NSBAQAorI2lmbmRlZiBfX0xJTlVYX0FUQUxLX0hfXworI2RlZmluZSBfX0xJTlVYX0FUQUxLX0hfXworCisjaW5jbHVkZSA8bmV0L3NvY2suaD4KKworLyoKKyAqIEFwcGxlVGFsayBuZXR3b3JraW5nIHN0cnVjdHVyZXMKKyAqCisgKiBUaGUgZm9sbG93aW5nIGFyZSBkaXJlY3RseSByZWZlcmVuY2VkIGZyb20gdGhlIFVuaXZlcnNpdHkgT2YgTWljaGlnYW4KKyAqIG5ldGF0YWxrIGZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMuCisgKi8KKyNkZWZpbmUgQVRQT1JUX0ZJUlNUCTEKKyNkZWZpbmUgQVRQT1JUX1JFU0VSVkVECTEyOAorI2RlZmluZSBBVFBPUlRfTEFTVAkyNTQJCS8qIDI1NCBpcyBvbmx5IGxlZ2FsIG9uIGxvY2FsdGFsayAqLyAKKyNkZWZpbmUgQVRBRERSX0FOWU5FVAkoX191MTYpMAorI2RlZmluZSBBVEFERFJfQU5ZTk9ERQkoX191OCkwCisjZGVmaW5lIEFUQUREUl9BTllQT1JUICAoX191OCkwCisjZGVmaW5lIEFUQUREUl9CQ0FTVAkoX191OCkyNTUKKyNkZWZpbmUgRERQX01BWFNaCTU4NworI2RlZmluZSBERFBfTUFYSE9QUyAgICAgMTUJCS8qIDQgYml0cyBvZiBob3AgY291bnRlciAqLworCisjZGVmaW5lIFNJT0NBVEFMS0RJRkFERFIgICAgICAgKFNJT0NQUk9UT1BSSVZBVEUgKyAwKQorCitzdHJ1Y3QgYXRhbGtfYWRkciB7CisJX191MTYJc19uZXQ7CisJX191OAlzX25vZGU7Cit9OworCitzdHJ1Y3Qgc29ja2FkZHJfYXQgeworCXNhX2ZhbWlseV90CSAgc2F0X2ZhbWlseTsKKwlfX3U4CQkgIHNhdF9wb3J0OworCXN0cnVjdCBhdGFsa19hZGRyIHNhdF9hZGRyOworCWNoYXIJCSAgc2F0X3plcm9bOF07Cit9OworCitzdHJ1Y3QgYXRhbGtfbmV0cmFuZ2UgeworCV9fdTgJbnJfcGhhc2U7CisJX191MTYJbnJfZmlyc3RuZXQ7CisJX191MTYJbnJfbGFzdG5ldDsKK307CisKK3N0cnVjdCBhdGFsa19yb3V0ZSB7CisJc3RydWN0IG5ldF9kZXZpY2UgICpkZXY7CisJc3RydWN0IGF0YWxrX2FkZHIgIHRhcmdldDsKKwlzdHJ1Y3QgYXRhbGtfYWRkciAgZ2F0ZXdheTsKKwlpbnQJCSAgIGZsYWdzOworCXN0cnVjdCBhdGFsa19yb3V0ZSAqbmV4dDsKK307CisKKy8qKgorICoJc3RydWN0IGF0YWxrX2lmYWNlIC0gQXBwbGVUYWxrIEludGVyZmFjZQorICoJQGRldiAtIE5ldHdvcmsgZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGludGVyZmFjZQorICoJQGFkZHJlc3MgLSBPdXIgYWRkcmVzcworICoJQHN0YXR1cyAtIFdoYXQgYXJlIHdlIGRvaW5nPworICoJQG5ldHMgLSBBc3NvY2lhdGVkIGRpcmVjdCBuZXRyYW5nZQorICoJQG5leHQgLSBuZXh0IGVsZW1lbnQgaW4gdGhlIGxpc3Qgb2YgaW50ZXJmYWNlcworICovCitzdHJ1Y3QgYXRhbGtfaWZhY2UgeworCXN0cnVjdCBuZXRfZGV2aWNlCSpkZXY7CisJc3RydWN0IGF0YWxrX2FkZHIJYWRkcmVzczsKKwlpbnQJCQlzdGF0dXM7CisjZGVmaW5lIEFUSUZfUFJPQkUJMQkJLyogUHJvYmluZyBmb3IgYW4gYWRkcmVzcyAqLworI2RlZmluZSBBVElGX1BST0JFX0ZBSUwJMgkJLyogUHJvYmUgY29sbGlkZWQgKi8KKwlzdHJ1Y3QgYXRhbGtfbmV0cmFuZ2UJbmV0czsKKwlzdHJ1Y3QgYXRhbGtfaWZhY2UJKm5leHQ7Cit9OworCQorc3RydWN0IGF0YWxrX3NvY2sgeworCS8qIHN0cnVjdCBzb2NrIGhhcyB0byBiZSB0aGUgZmlyc3QgbWVtYmVyIG9mIGF0YWxrX3NvY2sgKi8KKwlzdHJ1Y3Qgc29jawlzazsKKwl1bnNpZ25lZCBzaG9ydAlkZXN0X25ldDsKKwl1bnNpZ25lZCBzaG9ydAlzcmNfbmV0OworCXVuc2lnbmVkIGNoYXIJZGVzdF9ub2RlOworCXVuc2lnbmVkIGNoYXIJc3JjX25vZGU7CisJdW5zaWduZWQgY2hhcglkZXN0X3BvcnQ7CisJdW5zaWduZWQgY2hhcglzcmNfcG9ydDsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGF0YWxrX3NvY2sgKmF0X3NrKHN0cnVjdCBzb2NrICpzaykKK3sKKwlyZXR1cm4gKHN0cnVjdCBhdGFsa19zb2NrICopc2s7Cit9CisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisKK3N0cnVjdCBkZHBlaGRyIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fQklURklFTEQKKwlfX3UxNglkZWhfbGVuOjEwLAorCQlkZWhfaG9wczo0LAorCQlkZWhfcGFkOjI7CisjZWxzZQorCV9fdTE2CWRlaF9wYWQ6MiwKKwkJZGVoX2hvcHM6NCwKKwkJZGVoX2xlbjoxMDsKKyNlbmRpZgorCV9fdTE2CWRlaF9zdW07CisJX191MTYJZGVoX2RuZXQ7CisJX191MTYJZGVoX3NuZXQ7CisJX191OAlkZWhfZG5vZGU7CisJX191OAlkZWhfc25vZGU7CisJX191OAlkZWhfZHBvcnQ7CisJX191OAlkZWhfc3BvcnQ7CisJLyogQW5kIG5ldGF0YWxrIGFwcHMgZXhwZWN0IHRvIHN0aWNrIHRoZSB0eXBlIGluIHRoZW1zZWx2ZXMgKi8KK307CisKK3N0YXRpYyBfX2lubGluZV9fIHN0cnVjdCBkZHBlaGRyICpkZHBfaGRyKHN0cnVjdCBza19idWZmICpza2IpCit7CisJcmV0dXJuIChzdHJ1Y3QgZGRwZWhkciAqKXNrYi0+aC5yYXc7Cit9CisKKy8qCisgKglEb24ndCBkcm9wIHRoZSBzdHJ1Y3QgaW50byB0aGUgc3RydWN0IGFib3ZlLiAgWW91J2xsIGdldCBzb21lCisgKglzdXJwcmlzZSBwYWRkaW5nLgorICovCitzdHJ1Y3QgZGRwZWJpdHMgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9CSVRGSUVMRAorCV9fdTE2CWRlaF9sZW46MTAsCisJCWRlaF9ob3BzOjQsCisJCWRlaF9wYWQ6MjsKKyNlbHNlCisJX191MTYJZGVoX3BhZDoyLAorCQlkZWhfaG9wczo0LAorCQlkZWhfbGVuOjEwOworI2VuZGlmCit9OworCisvKiBTaG9ydCBmb3JtIGhlYWRlciAqLworc3RydWN0IGRkcHNoZHIgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9CSVRGSUVMRAorCV9fdTE2CWRzaF9sZW46MTAsCisJCWRzaF9wYWQ6NjsKKyNlbHNlCisJX191MTYJZHNoX3BhZDo2LAorCQlkc2hfbGVuOjEwOworI2VuZGlmCisJX191OAlkc2hfZHBvcnQ7CisJX191OAlkc2hfc3BvcnQ7CisJLyogQW5kIG5ldGF0YWxrIGFwcHMgZXhwZWN0IHRvIHN0aWNrIHRoZSB0eXBlIGluIHRoZW1zZWx2ZXMgKi8KK307CisKKy8qIEFwcGxlVGFsayBBQVJQIGhlYWRlcnMgKi8KK3N0cnVjdCBlbGFwYWFycCB7CisJX191MTYJaHdfdHlwZTsKKyNkZWZpbmUgQUFSUF9IV19UWVBFX0VUSEVSTkVUCQkxCisjZGVmaW5lIEFBUlBfSFdfVFlQRV9UT0tFTlJJTkcJCTIKKwlfX3UxNglwYV90eXBlOworCV9fdTgJaHdfbGVuOworCV9fdTgJcGFfbGVuOworI2RlZmluZSBBQVJQX1BBX0FMRU4JCQk0CisJX191MTYJZnVuY3Rpb247CisjZGVmaW5lIEFBUlBfUkVRVUVTVAkJCTEKKyNkZWZpbmUgQUFSUF9SRVBMWQkJCTIKKyNkZWZpbmUgQUFSUF9QUk9CRQkJCTMKKwlfX3U4CWh3X3NyY1tFVEhfQUxFTl0JX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCV9fdTgJcGFfc3JjX3plcm8JCV9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwlfX3UxNglwYV9zcmNfbmV0CQlfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisJX191OAlwYV9zcmNfbm9kZQkJX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCV9fdTgJaHdfZHN0W0VUSF9BTEVOXQlfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisJX191OAlwYV9kc3RfemVybwkJX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCV9fdTE2CXBhX2RzdF9uZXQJCV9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwlfX3U4CXBhX2RzdF9ub2RlCQlfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CQorfTsKKworc3RhdGljIF9faW5saW5lX18gc3RydWN0IGVsYXBhYXJwICphYXJwX2hkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXJldHVybiAoc3RydWN0IGVsYXBhYXJwICopc2tiLT5oLnJhdzsKK30KKworLyogTm90IHNwZWNpZmllZCAtIGhvdyBsb25nIHRpbGwgd2UgZHJvcCBhIHJlc29sdmVkIGVudHJ5ICovCisjZGVmaW5lIEFBUlBfRVhQSVJZX1RJTUUJKDUgKiA2MCAqIEhaKQorLyogU2l6ZSBvZiBoYXNoIHRhYmxlICovCisjZGVmaW5lIEFBUlBfSEFTSF9TSVpFCQkxNgorLyogRmFzdCByZXRyYW5zbWlzc2lvbiB0aW1lciB3aGVuIHJlc29sdmluZyAqLworI2RlZmluZSBBQVJQX1RJQ0tfVElNRQkJKEhaIC8gNSkKKy8qIFNlbmQgMTAgcmVxdWVzdHMgdGhlbiBnaXZlIHVwICgyIHNlY29uZHMpICovCisjZGVmaW5lIEFBUlBfUkVUUkFOU01JVF9MSU1JVAkxMAorLyoKKyAqIFNvbWUgdmFsdWUgYmlnZ2VyIHRoYW4gdG90YWwgcmV0cmFuc21pdCB0aW1lICsgYSBiaXQgZm9yIGxhc3QgcmVwbHkgdG8KKyAqIGFwcGVhciBhbmQgdG8gc3RvcCBjb250aW51YWwgcmVxdWVzdHMKKyAqLworI2RlZmluZSBBQVJQX1JFU09MVkVfVElNRQkoMTAgKiBIWikKKworZXh0ZXJuIHN0cnVjdCBkYXRhbGlua19wcm90byAqZGRwX2RsLCAqYWFycF9kbDsKK2V4dGVybiB2b2lkIGFhcnBfcHJvdG9faW5pdCh2b2lkKTsKKworLyogSW50ZXIgbW9kdWxlIGV4cG9ydHMgKi8KKworLyogR2l2ZSBhIGRldmljZSBmaW5kIGl0cyBhdGlmIGNvbnRyb2wgc3RydWN0dXJlICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBhdGFsa19pZmFjZSAqYXRhbGtfZmluZF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gZGV2LT5hdGFsa19wdHI7Cit9CisKK2V4dGVybiBzdHJ1Y3QgYXRhbGtfYWRkciAqYXRhbGtfZmluZF9kZXZfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK2V4dGVybiBzdHJ1Y3QgbmV0X2RldmljZSAqYXRydHJfZ2V0X2RldihzdHJ1Y3QgYXRhbGtfYWRkciAqc2EpOworZXh0ZXJuIGludAkJIGFhcnBfc2VuZF9kZHAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgICAgc3RydWN0IGF0YWxrX2FkZHIgKnNhLCB2b2lkICpod2FkZHIpOworZXh0ZXJuIHZvaWQJCSBhYXJwX2RldmljZV9kb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQJCSBhYXJwX3Byb2JlX25ldHdvcmsoc3RydWN0IGF0YWxrX2lmYWNlICphdGlmKTsKK2V4dGVybiBpbnQgCQkgYWFycF9wcm94eV9wcm9iZV9uZXR3b3JrKHN0cnVjdCBhdGFsa19pZmFjZSAqYXRpZiwKKwkJCQkgICAgIHN0cnVjdCBhdGFsa19hZGRyICpzYSk7CitleHRlcm4gdm9pZAkJIGFhcnBfcHJveHlfcmVtb3ZlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCSAgIHN0cnVjdCBhdGFsa19hZGRyICpzYSk7CisKK2V4dGVybiB2b2lkCQlhYXJwX2NsZWFudXBfbW9kdWxlKHZvaWQpOworCitleHRlcm4gc3RydWN0IGhsaXN0X2hlYWQgYXRhbGtfc29ja2V0czsKK2V4dGVybiByd2xvY2tfdCBhdGFsa19zb2NrZXRzX2xvY2s7CisKK2V4dGVybiBzdHJ1Y3QgYXRhbGtfcm91dGUgKmF0YWxrX3JvdXRlczsKK2V4dGVybiByd2xvY2tfdCBhdGFsa19yb3V0ZXNfbG9jazsKKworZXh0ZXJuIHN0cnVjdCBhdGFsa19pZmFjZSAqYXRhbGtfaW50ZXJmYWNlczsKK2V4dGVybiByd2xvY2tfdCBhdGFsa19pbnRlcmZhY2VzX2xvY2s7CisKK2V4dGVybiBzdHJ1Y3QgYXRhbGtfcm91dGUgYXRydHJfZGVmYXVsdDsKKworZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYXRhbGtfc2VxX2FycF9mb3BzOworCitleHRlcm4gaW50IHN5c2N0bF9hYXJwX2V4cGlyeV90aW1lOworZXh0ZXJuIGludCBzeXNjdGxfYWFycF90aWNrX3RpbWU7CitleHRlcm4gaW50IHN5c2N0bF9hYXJwX3JldHJhbnNtaXRfbGltaXQ7CitleHRlcm4gaW50IHN5c2N0bF9hYXJwX3Jlc29sdmVfdGltZTsKKworI2lmZGVmIENPTkZJR19TWVNDVEwKK2V4dGVybiB2b2lkIGF0YWxrX3JlZ2lzdGVyX3N5c2N0bCh2b2lkKTsKK2V4dGVybiB2b2lkIGF0YWxrX3VucmVnaXN0ZXJfc3lzY3RsKHZvaWQpOworI2Vsc2UKKyNkZWZpbmUgYXRhbGtfcmVnaXN0ZXJfc3lzY3RsKCkJCWRvIHsgfSB3aGlsZSgwKQorI2RlZmluZSBhdGFsa191bnJlZ2lzdGVyX3N5c2N0bCgpCWRvIHsgfSB3aGlsZSgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworZXh0ZXJuIGludCBhdGFsa19wcm9jX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBhdGFsa19wcm9jX2V4aXQodm9pZCk7CisjZWxzZQorI2RlZmluZSBhdGFsa19wcm9jX2luaXQoKQkoeyAwOyB9KQorI2RlZmluZSBhdGFsa19wcm9jX2V4aXQoKQlkbyB7IH0gd2hpbGUoMCkKKyNlbmRpZiAvKiBDT05GSUdfUFJPQ19GUyAqLworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9fTElOVVhfQVRBTEtfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2F0bS5oIGIvaW5jbHVkZS9saW51eC9hdG0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDEzNjY4NAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvYXRtLmgKQEAgLTAsMCArMSwyNDMgQEAKKy8qIGF0bS5oIC0gZ2VuZXJhbCBBVE0gZGVjbGFyYXRpb25zICovCisgCisvKiBXcml0dGVuIDE5OTUtMjAwMCBieSBXZXJuZXIgQWxtZXNiZXJnZXIsIEVQRkwgTFJDL0lDQSAqLworIAorCisvKgorICogV0FSTklORzogVXNlci1zcGFjZSBwcm9ncmFtcyBzaG91bGQgbm90ICNpbmNsdWRlIDxsaW51eC9hdG0uaD4gZGlyZWN0bHkuCisgKiAgICAgICAgICBJbnN0ZWFkLCAjaW5jbHVkZSA8YXRtLmg+CisgKi8KKworI2lmbmRlZiBfTElOVVhfQVRNX0gKKyNkZWZpbmUgX0xJTlVYX0FUTV9ICisKKy8qCisgKiBCRUdJTl94eCBhbmQgRU5EX3h4IG1hcmtlcnMgYXJlIHVzZWQgZm9yIGF1dG9tYXRpYyBnZW5lcmF0aW9uIG9mCisgKiBkb2N1bWVudGF0aW9uLiBEbyBub3QgY2hhbmdlIHRoZW0uCisgKi8KKworI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2VuZGlmCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9hdG1hcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9hdG1zYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9hdG1pb2MuaD4KKworCisvKiBnZW5lcmFsIEFUTSBjb25zdGFudHMgKi8KKyNkZWZpbmUgQVRNX0NFTExfU0laRQkJICAgIDUzCS8qIEFUTSBjZWxsIHNpemUgaW5jbC4gaGVhZGVyICovCisjZGVmaW5lIEFUTV9DRUxMX1BBWUxPQUQJICAgIDQ4CS8qIEFUTSBwYXlsb2FkIHNpemUgKi8KKyNkZWZpbmUgQVRNX0FBTDBfU0RVCQkgICAgNTIJLyogQUFMMCBTRFUgc2l6ZSAqLworI2RlZmluZSBBVE1fTUFYX0FBTDM0X1BEVQkgNjU1MzUJLyogbWF4aW11bSBBQUwzLzQgUERVIHBheWxvYWQgKi8KKyNkZWZpbmUgQVRNX0FBTDVfVFJBSUxFUgkgICAgIDgJLyogQUFMNSB0cmFpbGVyIHNpemUgKi8KKyNkZWZpbmUgQVRNX01BWF9BQUw1X1BEVQkgNjU1MzUJLyogbWF4aW11bSBBQUw1IFBEVSBwYXlsb2FkICovCisjZGVmaW5lIEFUTV9NQVhfQ0RWCQkgIDk5OTkJLyogbWF4aW11bSAoZGVmYXVsdCkgQ0RWICovCisjZGVmaW5lIEFUTV9OT1RfUlNWX1ZDSQkJICAgIDMyCS8qIGZpcnN0IG5vbi1yZXNlcnZlZCBWQ0kgdmFsdWUgKi8KKworI2RlZmluZSBBVE1fTUFYX1ZQSQkJICAgMjU1CS8qIG1heGltdW0gVlBJIGF0IHRoZSBVTkkgKi8KKyNkZWZpbmUgQVRNX01BWF9WUElfTk5JCQkgIDQwOTYJLyogbWF4aW11bSBWUEkgYXQgdGhlIE5OSSAqLworI2RlZmluZSBBVE1fTUFYX1ZDSQkJIDY1NTM1CS8qIG1heGltdW0gVkNJICovCisKKworLyogInByb3Rjb2wiIHZhbHVlcyBmb3IgdGhlIHNvY2tldCBzeXN0ZW0gY2FsbCAqLworI2RlZmluZSBBVE1fTk9fQUFMCTAJCS8qIEFBTCBub3Qgc3BlY2lmaWVkICovCisjZGVmaW5lIEFUTV9BQUwwCTEzCQkvKiAicmF3IiBBVE0gY2VsbHMgKi8KKyNkZWZpbmUgQVRNX0FBTDEJMQkJLyogQUFMMSAoQ0JSKSAqLworI2RlZmluZSBBVE1fQUFMMgkyCQkvKiBBQUwyIChWQlIpICovCisjZGVmaW5lIEFUTV9BQUwzNAkzCQkvKiBBQUwzLzQgKGRhdGEpICovCisjZGVmaW5lIEFUTV9BQUw1CTUJCS8qIEFBTDUgKGRhdGEpICovCisKKy8qCisgKiBzb2NrZXQgb3B0aW9uIG5hbWUgY29kaW5nIGZ1bmN0aW9ucworICoKKyAqIE5vdGUgdGhhdCBfX1NPX0VOQ09ERSBhbmQgX19TT19MRVZFTCBhcmUgc29tZXdoYXQgYSBoYWNrIHNpbmNlIHRoZQorICogPDwgMjIgb25seSByZXNlcnZlcyA5IGJpdHMgZm9yIHRoZSBsZXZlbC4gIE9uIHNvbWUgYXJjaGl0ZWN0dXJlcworICogU09MX1NPQ0tFVCBpcyAweEZGRkYsIHNvIHRoYXQncyBhIGJpdCBvZiBhIHByb2JsZW0KKyAqLworCisjZGVmaW5lIF9fU09fRU5DT0RFKGwsbix0KQkoKCgobCkgJiAweDFGRikgPDwgMjIpIHwgKChuKSA8PCAxNikgfCBcCisJCQkJc2l6ZW9mKHQpKQorI2RlZmluZSBfX1NPX0xFVkVMX01BVENIKGMsbSkJKCgoYykgPj4gMjIpID09ICgobSkgJiAweDFGRikpCisjZGVmaW5lIF9fU09fTlVNQkVSKGMpCQkoKChjKSA+PiAxNikgJiAweDNmKQorI2RlZmluZSBfX1NPX1NJWkUoYykJCSgoYykgJiAweDNmZmYpCisKKy8qCisgKiBBVE0gbGF5ZXIKKyAqLworCisjZGVmaW5lIFNPX1NFVENMUAlfX1NPX0VOQ09ERShTT0xfQVRNLDAsaW50KQorCQkJICAgIC8qIHNldCBDTFAgYml0IHZhbHVlIC0gVE9ETyAqLworI2RlZmluZSBTT19DSVJBTkdFCV9fU09fRU5DT0RFKFNPTF9BVE0sMSxzdHJ1Y3QgYXRtX2NpcmFuZ2UpCisJCQkgICAgLyogY29ubmVjdGlvbiBpZGVudGlmaWVyIHJhbmdlOyBzb2NrZXQgbXVzdCBiZQorCQkJICAgICAgIGJvdW5kIG9yIGNvbm5lY3RlZCAqLworI2RlZmluZSBTT19BVE1RT1MJX19TT19FTkNPREUoU09MX0FUTSwyLHN0cnVjdCBhdG1fcW9zKQorCQkJICAgIC8qIFF1YWxpdHkgb2YgU2VydmljZSBzZXR0aW5nICovCisjZGVmaW5lIFNPX0FUTVNBUAlfX1NPX0VOQ09ERShTT0xfQVRNLDMsc3RydWN0IGF0bV9zYXApCisJCQkgICAgLyogU2VydmljZSBBY2Nlc3MgUG9pbnQgKi8KKyNkZWZpbmUgU09fQVRNUFZDCV9fU09fRU5DT0RFKFNPTF9BVE0sNCxzdHJ1Y3Qgc29ja2FkZHJfYXRtcHZjKQorCQkJICAgIC8qICJQVkMiIGFkZHJlc3MgKGFsc28gZm9yIFNWQ3MpOyBnZXQgb25seSAqLworI2RlZmluZSBTT19NVUxUSVBPSU5UCV9fU09fRU5DT0RFKFNPTF9BVE0sIDUsIGludCkKKwkJCSAgICAvKiBtYWtlIHRoaXMgdmMgYSBwMm1wICovCisKKworLyoKKyAqIE5vdGUgQEBAOiBzaW5jZSB0aGUgc29ja2V0IGxheWVycyBkb24ndCByZWFsbHkgZGlzdGluZ3Vpc2ggdGhlIGNvbnRyb2wgYW5kCisgKiB0aGUgZGF0YSBwbGFuZSBidXQgZ2VuZXJhbGx5IHNlZW1zIHRvIGJlIGRhdGEgcGxhbmUtY2VudHJpYywgYW55IGxheWVyIGlzCisgKiBhYm91dCBlcXVhbGx5IHdyb25nIGZvciB0aGUgU0FQLiBJZiB5b3UgaGF2ZSBhIGJldHRlciBpZGVhIGFib3V0IHRoaXMsCisgKiBwbGVhc2Ugc3BlYWsgdXAgLi4uCisgKi8KKworCisvKiBBVE0gY2VsbCBoZWFkZXIgKGZvciBBQUwwKSAqLworCisvKiBCRUdJTl9DSCAqLworI2RlZmluZSBBVE1fSERSX0dGQ19NQVNLCTB4ZjAwMDAwMDAKKyNkZWZpbmUgQVRNX0hEUl9HRkNfU0hJRlQJMjgKKyNkZWZpbmUgQVRNX0hEUl9WUElfTUFTSwkweDBmZjAwMDAwCisjZGVmaW5lIEFUTV9IRFJfVlBJX1NISUZUCTIwCisjZGVmaW5lIEFUTV9IRFJfVkNJX01BU0sJMHgwMDBmZmZmMAorI2RlZmluZSBBVE1fSERSX1ZDSV9TSElGVAk0CisjZGVmaW5lIEFUTV9IRFJfUFRJX01BU0sJMHgwMDAwMDAwZQorI2RlZmluZSBBVE1fSERSX1BUSV9TSElGVAkxCisjZGVmaW5lIEFUTV9IRFJfQ0xQCQkweDAwMDAwMDAxCisvKiBFTkRfQ0ggKi8KKworCisvKiBQVEkgY29kaW5ncyAqLworCisvKiBCRUdJTl9QVEkgKi8KKyNkZWZpbmUgQVRNX1BUSV9VUzAJMCAgLyogdXNlciBkYXRhIGNlbGwsIGNvbmdlc3Rpb24gbm90IGV4cCwgU0RVLXR5cGUgMCAqLworI2RlZmluZSBBVE1fUFRJX1VTMQkxICAvKiB1c2VyIGRhdGEgY2VsbCwgY29uZ2VzdGlvbiBub3QgZXhwLCBTRFUtdHlwZSAxICovCisjZGVmaW5lIEFUTV9QVElfVUNFUzAJMiAgLyogdXNlciBkYXRhIGNlbGwsIGNvbmcuIGV4cGVyaWVuY2VkLCBTRFUtdHlwZSAwICovCisjZGVmaW5lIEFUTV9QVElfVUNFUzEJMyAgLyogdXNlciBkYXRhIGNlbGwsIGNvbmcuIGV4cGVyaWVuY2VkLCBTRFUtdHlwZSAxICovCisjZGVmaW5lIEFUTV9QVElfU0VHRjUJNCAgLyogc2VnbWVudCBPQU0gRjUgZmxvdyByZWxhdGVkIGNlbGwgKi8KKyNkZWZpbmUgQVRNX1BUSV9FMkVGNQk1ICAvKiBlbmQtdG8tZW5kIE9BTSBGNSBmbG93IHJlbGF0ZWQgY2VsbCAqLworI2RlZmluZSBBVE1fUFRJX1JTVl9STQk2ICAvKiByZXNlcnZlZCBmb3IgdHJhZmZpYyBjb250cm9sL3Jlc291cmNlIG1nbXQgKi8KKyNkZWZpbmUgQVRNX1BUSV9SU1YJNyAgLyogcmVzZXJ2ZWQgKi8KKy8qIEVORF9QVEkgKi8KKworCisvKgorICogVGhlIGZvbGxvd2luZyBpdGVtcyBzaG91bGQgc3RheSBpbiBsaW51eC9hdG0uaCwgd2hpY2ggc2hvdWxkIGJlIGxpbmtlZCB0bworICogbmV0YXRtL2F0bS5oCisgKi8KKworLyogVHJhZmZpYyBkZXNjcmlwdGlvbiAqLworCisjZGVmaW5lIEFUTV9OT05FCTAJCS8qIG5vIHRyYWZmaWMgKi8KKyNkZWZpbmUgQVRNX1VCUgkJMQorI2RlZmluZSBBVE1fQ0JSCQkyCisjZGVmaW5lIEFUTV9WQlIJCTMKKyNkZWZpbmUgQVRNX0FCUgkJNAorI2RlZmluZSBBVE1fQU5ZQ0xBU1MJNQkJLyogY29tcGF0aWJsZSB3aXRoIGV2ZXJ5dGhpbmcgKi8KKworI2RlZmluZSBBVE1fTUFYX1BDUgktMQkJLyogbWF4aW11bSBhdmFpbGFibGUgUENSICovCisKK3N0cnVjdCBhdG1fdHJhZnBybSB7CisJdW5zaWduZWQgY2hhcgl0cmFmZmljX2NsYXNzOwkvKiB0cmFmZmljIGNsYXNzIChBVE1fVUJSLCAuLi4pICovCisJaW50CQltYXhfcGNyOwkvKiBtYXhpbXVtIFBDUiBpbiBjZWxscyBwZXIgc2Vjb25kICovCisJaW50CQlwY3I7CQkvKiBkZXNpcmVkIFBDUiBpbiBjZWxscyBwZXIgc2Vjb25kICovCisJaW50CQltaW5fcGNyOwkvKiBtaW5pbXVtIFBDUiBpbiBjZWxscyBwZXIgc2Vjb25kICovCisJaW50CQltYXhfY2R2OwkvKiBtYXhpbXVtIENEViBpbiBtaWNyb3NlY29uZHMgKi8KKwlpbnQJCW1heF9zZHU7CS8qIG1heGltdW0gU0RVIGluIGJ5dGVzICovCisgICAgICAgIC8qIGV4dHJhIHBhcmFtcyBmb3IgQUJSICovCisgICAgICAgIHVuc2lnbmVkIGludCAJaWNyOyAgICAgICAgIAkvKiBJbml0aWFsIENlbGwgUmF0ZSAoMjQtYml0KSAqLworICAgICAgICB1bnNpZ25lZCBpbnQJdGJlOwkJLyogVHJhbnNpZW50IEJ1ZmZlciBFeHBvc3VyZSAoMjQtYml0KSAqLyAKKyAgICAgICAgdW5zaWduZWQgaW50IAlmcnR0IDogMjQ7CS8qIEZpeGVkIFJvdW5kIFRyaXAgVGltZSAoMjQtYml0KSAqLworICAgICAgICB1bnNpZ25lZCBpbnQgCXJpZiAgOiA0OyAgICAgICAvKiBSYXRlIEluY3JlbWVudCBGYWN0b3IgKDQtYml0KSAqLworICAgICAgICB1bnNpZ25lZCBpbnQgCXJkZiAgOiA0OyAgICAgICAvKiBSYXRlIERlY3JlYXNlIEZhY3RvciAoNC1iaXQpICovCisgICAgICAgIHVuc2lnbmVkIGludCBucm1fcHJlcyAgOjE7ICAgICAgLyogbnJtIHByZXNlbnQgYml0ICovCisgICAgICAgIHVuc2lnbmVkIGludCB0cm1fcHJlcyAgOjE7ICAgICAJLyogcm0gcHJlc2VudCBiaXQgKi8KKyAgICAgICAgdW5zaWduZWQgaW50IGFkdGZfcHJlcyA6MTsgICAgIAkvKiBhZHRmIHByZXNlbnQgYml0ICovCisgICAgICAgIHVuc2lnbmVkIGludCBjZGZfcHJlcyAgOjE7ICAgIAkvKiBjZGYgcHJlc2VudCBiaXQqLworICAgICAgICB1bnNpZ25lZCBpbnQgbnJtICAgICAgIDozOyAgICAgCS8qIE1heCAjIG9mIENlbGxzIGZvciBlYWNoIGZvcndhcmQgUk0gY2VsbCAoMy1iaXQpICovCisgICAgICAgIHVuc2lnbmVkIGludCB0cm0gICAgICAgOjM7ICAgIAkvKiBUaW1lIGJldHdlZW4gZm9yd2FyZCBSTSBjZWxscyAoMy1iaXQpICovICAgIAorCXVuc2lnbmVkIGludCBhZHRmICAgICAgOjEwOyAgICAgLyogQUNSIERlY3JlYXNlIFRpbWUgRmFjdG9yICgxMC1iaXQpICovCisJdW5zaWduZWQgaW50IGNkZiAgICAgICA6MzsgICAgICAvKiBDdXRvZmYgRGVjcmVhc2UgRmFjdG9yICgzLWJpdCkgKi8KKyAgICAgICAgdW5zaWduZWQgaW50IHNwYXJlICAgICA6OTsgICAgICAvKiBzcGFyZSBiaXRzICovIAorfTsKKworc3RydWN0IGF0bV9xb3MgeworCXN0cnVjdCBhdG1fdHJhZnBybSB0eHRwOwkvKiBwYXJhbWV0ZXJzIGluIFRYIGRpcmVjdGlvbiAqLworCXN0cnVjdCBhdG1fdHJhZnBybSByeHRwIF9fQVRNX0FQSV9BTElHTjsKKwkJCQkJLyogcGFyYW1ldGVycyBpbiBSWCBkaXJlY3Rpb24gKi8KKwl1bnNpZ25lZCBjaGFyIGFhbCBfX0FUTV9BUElfQUxJR047Cit9OworCisvKiBQVkMgYWRkcmVzc2luZyAqLworCisjZGVmaW5lIEFUTV9JVEZfQU5ZCS0xCQkvKiAibWFnaWMiIFBWQyBhZGRyZXNzIHZhbHVlcyAqLworI2RlZmluZSBBVE1fVlBJX0FOWQktMQorI2RlZmluZSBBVE1fVkNJX0FOWQktMQorI2RlZmluZSBBVE1fVlBJX1VOU1BFQwktMgorI2RlZmluZSBBVE1fVkNJX1VOU1BFQwktMgorCisKK3N0cnVjdCBzb2NrYWRkcl9hdG1wdmMgeworCXVuc2lnbmVkIHNob3J0IAlzYXBfZmFtaWx5OwkvKiBhZGRyZXNzIGZhbWlseSwgQUZfQVRNUFZDICAqLworCXN0cnVjdCB7CQkJLyogUFZDIGFkZHJlc3MgKi8KKwkJc2hvcnQJaXRmOwkJLyogQVRNIGludGVyZmFjZSAqLworCQlzaG9ydAl2cGk7CQkvKiBWUEkgKG9ubHkgOCBiaXRzIGF0IFVOSSkgKi8KKwkJaW50CXZjaTsJCS8qIFZDSSAob25seSAxNiBiaXRzIGF0IFVOSSkgKi8KKwl9IHNhcF9hZGRyIF9fQVRNX0FQSV9BTElHTjsJLyogUFZDIGFkZHJlc3MgKi8KK307CisKKy8qIFNWQyBhZGRyZXNzaW5nICovCisKKyNkZWZpbmUJQVRNX0VTQV9MRU4JMjAJCS8qIEFUTSBFbmQgU3lzdGVtIEFkZHJlc3MgbGVuZ3RoICovCisjZGVmaW5lIEFUTV9FMTY0X0xFTgkxMgkJLyogbWF4aW11bSBFLjE2NCBudW1iZXIgbGVuZ3RoICovCisKKyNkZWZpbmUgQVRNX0FGSV9EQ0MJMHgzOQkJLyogRENDIEFUTSBGb3JtYXQgKi8KKyNkZWZpbmUgQVRNX0FGSV9JQ0QJMHg0NwkJLyogSUNEIEFUTSBGb3JtYXQgKi8KKyNkZWZpbmUgQVRNX0FGSV9FMTY0CTB4NDUJCS8qIEUuMTY0IEFUTSBGb3JtYXQgKi8KKyNkZWZpbmUgQVRNX0FGSV9MT0NBTAkweDQ5CQkvKiBMb2NhbCBBVE0gRm9ybWF0ICovIAorCisjZGVmaW5lIEFUTV9BRklfRENDX0dST1VQCTB4QkQJLyogRENDIEFUTSBHcm91cCBGb3JtYXQgKi8KKyNkZWZpbmUgQVRNX0FGSV9JQ0RfR1JPVVAJMHhDNQkvKiBJQ0QgQVRNIEdyb3VwIEZvcm1hdCAqLworI2RlZmluZSBBVE1fQUZJX0UxNjRfR1JPVVAJMHhDMwkvKiBFLjE2NCBBVE0gR3JvdXAgRm9ybWF0ICovCisjZGVmaW5lIEFUTV9BRklfTE9DQUxfR1JPVVAJMHhDNwkvKiBMb2NhbCBBVE0gR3JvdXAgRm9ybWF0ICovCisKKyNkZWZpbmUgQVRNX0xJSl9OT05FCTAJCS8qIG5vIGxlYWYtaW5pdGlhdGVkIGpvaW4gKi8KKyNkZWZpbmUgQVRNX0xJSgkJMQkJLyogcmVxdWVzdCBqb2luaW5nICovCisjZGVmaW5lIEFUTV9MSUpfUlBKCTIJCS8qIHNldCB0byByb290LXByb21wdGVkIGpvaW4gKi8KKyNkZWZpbmUgQVRNX0xJSl9OSgkzCQkvKiBzZXQgdG8gbmV0d29yayBqb2luICovCisKKworc3RydWN0IHNvY2thZGRyX2F0bXN2YyB7CisgICAgdW5zaWduZWQgc2hvcnQgCXNhc19mYW1pbHk7CS8qIGFkZHJlc3MgZmFtaWx5LCBBRl9BVE1TVkMgKi8KKyAgICBzdHJ1Y3QgewkJCQkvKiBTVkMgYWRkcmVzcyAqLworICAgICAgICB1bnNpZ25lZCBjaGFyCXBydltBVE1fRVNBX0xFTl07LyogcHJpdmF0ZSBBVE0gYWRkcmVzcyAqLworICAgICAgICBjaGFyCQlwdWJbQVRNX0UxNjRfTEVOKzFdOyAvKiBwdWJsaWMgYWRkcmVzcyAoRS4xNjQpICovCisgICAgCQkJCQkvKiB1bnVzZWQgYWRkcmVzc2VzIG11c3QgYmUgYnplcm8nZWQgKi8KKwljaGFyCQlsaWpfdHlwZTsJLyogcm9sZSBpbiBMSUogY2FsbDsgb25lIG9mIEFUTV9MSUoqICovCisJdWludDMyX3QJbGlqX2lkOwkJLyogTElKIGNhbGwgaWRlbnRpZmllciAqLworICAgIH0gc2FzX2FkZHIgX19BVE1fQVBJX0FMSUdOOwkJLyogU1ZDIGFkZHJlc3MgKi8KK307CisKKworc3RhdGljIF9faW5saW5lX18gaW50IGF0bXN2Y19hZGRyX2luX3VzZShzdHJ1Y3Qgc29ja2FkZHJfYXRtc3ZjIGFkZHIpCit7CisJcmV0dXJuICphZGRyLnNhc19hZGRyLnBydiB8fCAqYWRkci5zYXNfYWRkci5wdWI7Cit9CisKKworc3RhdGljIF9faW5saW5lX18gaW50IGF0bXB2Y19hZGRyX2luX3VzZShzdHJ1Y3Qgc29ja2FkZHJfYXRtcHZjIGFkZHIpCit7CisJcmV0dXJuIGFkZHIuc2FwX2FkZHIuaXRmIHx8IGFkZHIuc2FwX2FkZHIudnBpIHx8IGFkZHIuc2FwX2FkZHIudmNpOworfQorCisKKy8qCisgKiBTb21lIHN0dWZmIGZvciBsaW51eC9zb2NraW9zLmgKKyAqLworCitzdHJ1Y3QgYXRtaWZfc2lvYyB7CisgICAgaW50IG51bWJlcjsKKyAgICBpbnQgbGVuZ3RoOworICAgIHZvaWQgX191c2VyICphcmc7Cit9OworCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGF0bV9iYWNrZW5kX3Q7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYXRtX2VuaS5oIGIvaW5jbHVkZS9saW51eC9hdG1fZW5pLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRmMzE3OQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvYXRtX2VuaS5oCkBAIC0wLDAgKzEsMjMgQEAKKy8qIGF0bV9lbmkuaCAtIERyaXZlci1zcGVjaWZpYyBkZWNsYXJhdGlvbnMgb2YgdGhlIEVOSSBkcml2ZXIgKGZvciB1c2UgYnkKKwkgICAgICAgZHJpdmVyLXNwZWNpZmljIHV0aWxpdGllcykgKi8KKworLyogV3JpdHRlbiAxOTk1LTIwMDAgYnkgV2VybmVyIEFsbWVzYmVyZ2VyLCBFUEZMIExSQy9JQ0EgKi8KKworCisjaWZuZGVmIExJTlVYX0FUTV9FTklfSAorI2RlZmluZSBMSU5VWF9BVE1fRU5JX0gKKworI2luY2x1ZGUgPGxpbnV4L2F0bWlvYy5oPgorCisKK3N0cnVjdCBlbmlfbXVsdGlwbGllcnMgeworCWludCB0eCxyeDsJLyogdmFsdWVzIGFyZSBpbiBwZXJjZW50IGFuZCBtdXN0IGJlID4gMTAwICovCit9OworCisKKyNkZWZpbmUgRU5JX01FTURVTVAgICAgIF9JT1coJ2EnLEFUTUlPQ19TQVJQUlYsc3RydWN0IGF0bWlmX3Npb2MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwcmludGsgbWVtb3J5IG1hcCAqLworI2RlZmluZSBFTklfU0VUTVVMVAlfSU9XKCdhJyxBVE1JT0NfU0FSUFJWKzcsc3RydWN0IGF0bWlmX3Npb2MpCisJCQkJCQkvKiBzZXQgYnVmZmVyIG11bHRpcGxpZXJzICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hdG1faGUuaCBiL2luY2x1ZGUvbGludXgvYXRtX2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE3NzEzYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvYXRtX2hlLmgKQEAgLTAsMCArMSwyMCBAQAorLyogYXRtX2hlLmggKi8KKworI2lmbmRlZiBMSU5VWF9BVE1fSEVfSAorI2RlZmluZSBMSU5VWF9BVE1fSEVfSAorCisjaW5jbHVkZSA8bGludXgvYXRtaW9jLmg+CisKKyNkZWZpbmUgSEVfR0VUX1JFRwlfSU9XKCdhJywgQVRNSU9DX1NBUlBSViwgc3RydWN0IGF0bWlmX3Npb2MpCisKKyNkZWZpbmUgSEVfUkVHVFlQRV9QQ0kJMQorI2RlZmluZSBIRV9SRUdUWVBFX1JDTQkyCisjZGVmaW5lIEhFX1JFR1RZUEVfVENNCTMKKyNkZWZpbmUgSEVfUkVHVFlQRV9NQk9YCTQKKworc3RydWN0IGhlX2lvY3RsX3JlZyB7CisJdW5zaWduZWQgYWRkciwgdmFsOworCWNoYXIgdHlwZTsKK307CisKKyNlbmRpZiAvKiBMSU5VWF9BVE1fSEVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hdG1faWR0NzcxMDUuaCBiL2luY2x1ZGUvbGludXgvYXRtX2lkdDc3MTA1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU2MjFjZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvYXRtX2lkdDc3MTA1LmgKQEAgLTAsMCArMSwyOCBAQAorLyogYXRtX2lkdDc3MTA1LmggLSBEcml2ZXItc3BlY2lmaWMgZGVjbGFyYXRpb25zIG9mIHRoZSBJRFQ3NzEwNSBkcml2ZXIgKGZvcgorICogdXNlIGJ5IGRyaXZlci1zcGVjaWZpYyB1dGlsaXRpZXMpICovCisKKy8qIFdyaXR0ZW4gMTk5OSBieSBHcmVnIEJhbmtzIDxnbmJAbGludXhmYW4uY29tPi4gQ29waWVkIGZyb20gYXRtX3N1bmkuaC4gKi8KKworCisjaWZuZGVmIExJTlVYX0FUTV9JRFQ3NzEwNV9ICisjZGVmaW5lIExJTlVYX0FUTV9JRFQ3NzEwNV9ICisKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9hdG1pb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9hdG1kZXYuaD4KKworLyoKKyAqIFN0cnVjdHVyZSBmb3IgSURUNzcxMDVfR0VUU1RBVCBhbmQgSURUNzcxMDVfR0VUU1RBVFogaW9jdGxzLgorICogUG9pbnRlZCB0byBieSBgYXJnJyBpbiBhdG1pZl9zaW9jLgorICovCitzdHJ1Y3QgaWR0NzcxMDVfc3RhdHMgeworICAgICAgICBfX3UzMiBzeW1ib2xfZXJyb3JzOyAgLyogd2lyZSBzeW1ib2wgZXJyb3JzICovCisgICAgICAgIF9fdTMyIHR4X2NlbGxzOyAgICAgICAvKiBjZWxscyB0cmFuc21pdHRlZCAqLworICAgICAgICBfX3UzMiByeF9jZWxsczsgICAgICAgLyogY2VsbHMgcmVjZWl2ZWQgKi8KKyAgICAgICAgX191MzIgcnhfaGVjX2Vycm9yczsgIC8qIEhlYWRlciBFcnJvciBDaGVjayBlcnJvcnMgb24gcmVjZWl2ZSAqLworfTsKKworI2RlZmluZSBJRFQ3NzEwNV9HRVRTVEFUCV9JT1coJ2EnLEFUTUlPQ19QSFlQUlYrMixzdHJ1Y3QgYXRtaWZfc2lvYykJLyogZ2V0IHN0YXRzICovCisjZGVmaW5lIElEVDc3MTA1X0dFVFNUQVRaCV9JT1coJ2EnLEFUTUlPQ19QSFlQUlYrMyxzdHJ1Y3QgYXRtaWZfc2lvYykJLyogZ2V0IHN0YXRzIGFuZCB6ZXJvICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hdG1fbmljc3Rhci5oIGIvaW5jbHVkZS9saW51eC9hdG1fbmljc3Rhci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3N2I3OWYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2F0bV9uaWNzdGFyLmgKQEAgLTAsMCArMSw1MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGF0bV9uaWNzdGFyLmgKKyAqCisgKiBEcml2ZXItc3BlY2lmaWMgZGVjbGFyYXRpb25zIGZvciB1c2UgYnkgTklDU1RBUiBkcml2ZXIgc3BlY2lmaWMgdXRpbHMuCisgKgorICogQXV0aG9yOiBSdWkgUHJpb3IKKyAqCisgKiAoQykgSU5FU0MgMTk5OAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBMSU5VWF9BVE1fTklDU1RBUl9ICisjZGVmaW5lIExJTlVYX0FUTV9OSUNTVEFSX0gKKworLyogTm90ZTogbm9uLWtlcm5lbCBwcm9ncmFtcyBpbmNsdWRpbmcgdGhpcyBmaWxlIG11c3QgYWxzbyBpbmNsdWRlCisgKiBzeXMvdHlwZXMuaCBmb3Igc3RydWN0IHRpbWV2YWwKKyAqLworCisjaW5jbHVkZSA8bGludXgvYXRtYXBpLmg+CisjaW5jbHVkZSA8bGludXgvYXRtaW9jLmg+CisKKyNkZWZpbmUgTlNfR0VUUFNUQVQJX0lPV1IoJ2EnLEFUTUlPQ19TQVJQUlYrMSxzdHJ1Y3QgYXRtaWZfc2lvYykKKwkJCQkJCS8qIGdldCBwb29sIHN0YXRpc3RpY3MgKi8KKyNkZWZpbmUgTlNfU0VUQlVGTEVWCV9JT1coJ2EnLEFUTUlPQ19TQVJQUlYrMixzdHJ1Y3QgYXRtaWZfc2lvYykKKwkJCQkJCS8qIHNldCBidWZmZXIgbGV2ZWwgbWFya2VycyAqLworI2RlZmluZSBOU19BREpCVUZMRVYJX0lPKCdhJyxBVE1JT0NfU0FSUFJWKzMpCisJCQkJCQkvKiBhZGp1c3QgYnVmZmVyIGxldmVsICovCisKK3R5cGVkZWYgc3RydWN0IGJ1Zl9ucgoreworICAgdW5zaWduZWQgbWluOworICAgdW5zaWduZWQgaW5pdDsKKyAgIHVuc2lnbmVkIG1heDsKK31idWZfbnI7CisKKwordHlwZWRlZiBzdHJ1Y3QgcG9vbF9sZXZlbHMKK3sKKyAgIGludCBidWZ0eXBlOworICAgaW50IGNvdW50OwkJLyogKEF0IGxlYXN0IGZvciBub3cpIG9ubHkgdXNlZCBpbiBOU19HRVRQU1RBVCAqLworICAgYnVmX25yIGxldmVsOworfSBwb29sX2xldmVsczsKKworLyogdHlwZSBtdXN0IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOiAqLworI2RlZmluZSBOU19CVUZUWVBFX1NNQUxMIDEKKyNkZWZpbmUgTlNfQlVGVFlQRV9MQVJHRSAyCisjZGVmaW5lIE5TX0JVRlRZUEVfSFVHRSAzCisjZGVmaW5lIE5TX0JVRlRZUEVfSU9WRUMgNAorCisKKyNlbmRpZiAvKiBMSU5VWF9BVE1fTklDU1RBUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2F0bV9zdW5pLmggYi9pbmNsdWRlL2xpbnV4L2F0bV9zdW5pLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRmM2FhYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvYXRtX3N1bmkuaApAQCAtMCwwICsxLDEyIEBACisvKiBhdG1fc3VuaS5oIC0gRHJpdmVyLXNwZWNpZmljIGRlY2xhcmF0aW9ucyBvZiB0aGUgU1VOSSBkcml2ZXIgKGZvciB1c2UgYnkKKwkJZHJpdmVyLXNwZWNpZmljIHV0aWxpdGllcykgKi8KKworLyogV3JpdHRlbiAxOTk4LDIwMDAgYnkgV2VybmVyIEFsbWVzYmVyZ2VyLCBFUEZMIElDQSAqLworCisKKyNpZm5kZWYgTElOVVhfQVRNX1NVTklfSAorI2RlZmluZSBMSU5VWF9BVE1fU1VOSV9ICisKKy8qIGV2ZXJ5dGhpbmcgb2Jzb2xldGVkICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hdG1fdGNwLmggYi9pbmNsdWRlL2xpbnV4L2F0bV90Y3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODc4N2Y5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9hdG1fdGNwLmgKQEAgLTAsMCArMSw3NSBAQAorLyogYXRtX3RjcC5oIC0gRHJpdmVyLXNwZWNpZmljIGRlY2xhcmF0aW9ucyBvZiB0aGUgQVRNVENQIGRyaXZlciAoZm9yIHVzZSBieQorCSAgICAgICBkcml2ZXItc3BlY2lmaWMgdXRpbGl0aWVzKSAqLworCisvKiBXcml0dGVuIDE5OTctMjAwMCBieSBXZXJuZXIgQWxtZXNiZXJnZXIsIEVQRkwgTFJDL0lDQSAqLworCisKKyNpZm5kZWYgTElOVVhfQVRNX1RDUF9ICisjZGVmaW5lIExJTlVYX0FUTV9UQ1BfSAorCisjaW5jbHVkZSA8bGludXgvYXRtYXBpLmg+CisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNlbmRpZgorI2luY2x1ZGUgPGxpbnV4L2F0bWlvYy5oPgorCisKKy8qCisgKiBBbGwgdmFsdWVzIGluIHN0cnVjdCBhdG10Y3BfaGRyIGFyZSBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIKKyAqLworCitzdHJ1Y3QgYXRtdGNwX2hkciB7CisJdWludDE2X3QJdnBpOworCXVpbnQxNl90CXZjaTsKKwl1aW50MzJfdAlsZW5ndGg7CQkvKiAuLi4gb2YgZGF0YSBwYXJ0ICovCit9OworCisvKgorICogQWxsIHZhbHVlcyBpbiBzdHJ1Y3QgYXRtdGNwX2NvbW1hbmQgYXJlIGluIGhvc3QgYnl0ZSBvcmRlcgorICovCisKKyNkZWZpbmUgQVRNVENQX0hEUl9NQUdJQwkofjApCS8qIHRoaXMgbGVuZ3RoIGluZGljYXRlcyBhIGNvbW1hbmQgKi8KKyNkZWZpbmUgQVRNVENQX0NUUkxfT1BFTgkxCS8qIHJlcXVlc3QvcmVwbHkgKi8KKyNkZWZpbmUgQVRNVENQX0NUUkxfQ0xPU0UJMgkvKiByZXF1ZXN0L3JlcGx5ICovCisKK3N0cnVjdCBhdG10Y3BfY29udHJvbCB7CisJc3RydWN0IGF0bXRjcF9oZHIgaGRyOwkvKiBtdXN0IGJlIGZpcnN0ICovCisJaW50IHR5cGU7CQkvKiBtZXNzYWdlIHR5cGU7IGJvdGggZGlyZWN0aW9ucyAqLworCWF0bV9rcHRyX3QgdmNjOwkJLyogYm90aCBkaXJlY3Rpb25zICovCisJc3RydWN0IHNvY2thZGRyX2F0bXB2YyBhZGRyOyAvKiBzdWdnZXN0ZWQgdmFsdWUgZnJvbSBrZXJuZWwgKi8KKwlzdHJ1Y3QgYXRtX3Fvcwlxb3M7CS8qIGJvdGggZGlyZWN0aW9ucyAqLworCWludCByZXN1bHQ7CQkvKiB0byBrZXJuZWwgb25seSAqLworfSBfX0FUTV9BUElfQUxJR047CisKKy8qCisgKiBGaWVsZCB1c2FnZToKKyAqIE1lc3NnZSB0eXBlCWRpci4JaGRyLnY/aQl0eXBlCWFkZHIJcW9zCXZjYwlyZXN1bHQKKyAqIC0tLS0tLS0tLS0tICAtLS0tCS0tLS0tLS0gLS0tLQktLS0tCS0tLQktLS0JLS0tLS0tCisgKiBPUEVOCQlLLT5ECVkJWQlZCVkJWQkwCisgKiBPUEVOCQlELT5LCS0JWQlZCVkJWQlZCisgKiBDTE9TRQlLLT5ECS0JLQlZCS0JWQkwCisgKiBDTE9TRQlELT5LCS0JLQktCS0JWQlZCisgKi8KKworI2RlZmluZSBTSU9DU0lGQVRNVENQCV9JTygnYScsQVRNSU9DX0lURikJLyogc2V0IEFUTVRDUCBtb2RlICovCisjZGVmaW5lIEFUTVRDUF9DUkVBVEUJX0lPKCdhJyxBVE1JT0NfSVRGKzE0KQkvKiBjcmVhdGUgcGVyc2lzdGVudCBBVE1UQ1AKKwkJCQkJCSAgIGludGVyZmFjZSAqLworI2RlZmluZSBBVE1UQ1BfUkVNT1ZFCV9JTygnYScsQVRNSU9DX0lURisxNSkJLyogZGVzdHJveSBwZXJzaXN0ZW50IEFUTVRDUAorCQkJCQkJICAgaW50ZXJmYWNlICovCisKKworI2lmZGVmIF9fS0VSTkVMX18KKworc3RydWN0IGF0bV90Y3Bfb3BzIHsKKwlpbnQgKCphdHRhY2gpKHN0cnVjdCBhdG1fdmNjICp2Y2MsaW50IGl0Zik7CisJaW50ICgqY3JlYXRlX3BlcnNpc3RlbnQpKGludCBpdGYpOworCWludCAoKnJlbW92ZV9wZXJzaXN0ZW50KShpbnQgaXRmKTsKKwlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKK307CisKK2V4dGVybiBzdHJ1Y3QgYXRtX3RjcF9vcHMgYXRtX3RjcF9vcHM7CisKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYXRtX3phdG0uaCBiL2luY2x1ZGUvbGludXgvYXRtX3phdG0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGYwZmEyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9hdG1femF0bS5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qIGF0bV96YXRtLmggLSBEcml2ZXItc3BlY2lmaWMgZGVjbGFyYXRpb25zIG9mIHRoZSBaQVRNIGRyaXZlciAoZm9yIHVzZSBieQorCQlkcml2ZXItc3BlY2lmaWMgdXRpbGl0aWVzKSAqLworCisvKiBXcml0dGVuIDE5OTUtMTk5OSBieSBXZXJuZXIgQWxtZXNiZXJnZXIsIEVQRkwgTFJDL0lDQSAqLworCisKKyNpZm5kZWYgTElOVVhfQVRNX1pBVE1fSAorI2RlZmluZSBMSU5VWF9BVE1fWkFUTV9ICisKKy8qCisgKiBOb3RlOiBub24ta2VybmVsIHByb2dyYW1zIGluY2x1ZGluZyB0aGlzIGZpbGUgbXVzdCBhbHNvIGluY2x1ZGUKKyAqIHN5cy90eXBlcy5oIGZvciBzdHJ1Y3QgdGltZXZhbAorICovCisKKyNpbmNsdWRlIDxsaW51eC9hdG1hcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9hdG1pb2MuaD4KKworI2RlZmluZSBaQVRNX0dFVFBPT0wJX0lPVygnYScsQVRNSU9DX1NBUlBSVisxLHN0cnVjdCBhdG1pZl9zaW9jKQorCQkJCQkJLyogZ2V0IHBvb2wgc3RhdGlzdGljcyAqLworI2RlZmluZSBaQVRNX0dFVFBPT0xaCV9JT1coJ2EnLEFUTUlPQ19TQVJQUlYrMixzdHJ1Y3QgYXRtaWZfc2lvYykKKwkJCQkJCS8qIGdldCBzdGF0aXN0aWNzIGFuZCB6ZXJvICovCisjZGVmaW5lIFpBVE1fU0VUUE9PTAlfSU9XKCdhJyxBVE1JT0NfU0FSUFJWKzMsc3RydWN0IGF0bWlmX3Npb2MpCisJCQkJCQkvKiBzZXQgcG9vbCBwYXJhbWV0ZXJzICovCisKK3N0cnVjdCB6YXRtX3Bvb2xfaW5mbyB7CisJaW50IHJlZl9jb3VudDsJCQkvKiBmcmVlIGJ1ZmZlciBwb29sIHVzYWdlIGNvdW50ZXJzICovCisJaW50IGxvd193YXRlcixoaWdoX3dhdGVyOwkvKiByZWZpbGwgcGFyYW1ldGVycyAqLworCWludCBycWFfY291bnQscnF1X2NvdW50OwkvKiBxdWV1ZSBjb25kaXRpb24gY291bnRlcnMgKi8KKwlpbnQgb2Zmc2V0LG5leHRfb2ZmOwkJLyogYWxpZ25tZW50IG9wdGltaXphdGlvbnM6IG9mZnNldCAqLworCWludCBuZXh0X2NudCxuZXh0X3RocmVzOwkvKiByZXBldGl0aW9uIGNvdW50ZXIgYW5kIHRocmVzaG9sZCAqLworfTsKKworc3RydWN0IHphdG1fcG9vbF9yZXEgeworCWludCBwb29sX251bTsJCQkvKiBwb29sIG51bWJlciAqLworCXN0cnVjdCB6YXRtX3Bvb2xfaW5mbyBpbmZvOwkvKiBhY3R1YWwgaW5mb3JtYXRpb24gKi8KK307CisKK3N0cnVjdCB6YXRtX3RfaGlzdCB7CisJc3RydWN0IHRpbWV2YWwgcmVhbDsJCS8qIHJlYWwgKHdhbGwtY2xvY2spIHRpbWUgKi8KKwlzdHJ1Y3QgdGltZXZhbCBleHBlY3RlZDsJLyogZXhwZWN0ZWQgcmVhbCB0aW1lICovCit9OworCisKKyNkZWZpbmUgWkFUTV9PQU1fUE9PTAkJMAkvKiBmcmVlIGJ1ZmZlciBwb29sIGZvciBPQU0gY2VsbHMgKi8KKyNkZWZpbmUgWkFUTV9BQUwwX1BPT0wJCTEJLyogZnJlZSBidWZmZXIgcG9vbCBmb3IgQUFMMCBjZWxscyAqLworI2RlZmluZSBaQVRNX0FBTDVfUE9PTF9CQVNFCTIJLyogZmlyc3QgQUFMNSBmcmVlIGJ1ZmZlciBwb29sICovCisjZGVmaW5lIFpBVE1fTEFTVF9QT09MCVpBVE1fQUFMNV9QT09MX0JBU0UrMTAgLyogbWF4LiA2NCBrQiAqLworCisjZGVmaW5lIFpBVE1fVElNRVJfSElTVE9SWV9TSVpFCTE2CS8qIG51bWJlciBvZiB0aW1lciBhZGp1c3RtZW50cyB0bworCQkJCQkgICByZWNvcmQ7IG11c3QgYmUgMl5uICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hdG1hcGkuaCBiL2luY2x1ZGUvbGludXgvYXRtYXBpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZlNTRkOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvYXRtYXBpLmgKQEAgLTAsMCArMSwyOSBAQAorLyogYXRtYXBpLmggLSBBVE0gQVBJIHVzZXIgc3BhY2Uva2VybmVsIGNvbXBhdGliaWxpdHkgKi8KKyAKKy8qIFdyaXR0ZW4gMTk5OSwyMDAwIGJ5IFdlcm5lciBBbG1lc2JlcmdlciwgRVBGTCBJQ0EgKi8KKyAKKworI2lmbmRlZiBfTElOVVhfQVRNQVBJX0gKKyNkZWZpbmUgX0xJTlVYX0FUTUFQSV9ICisKKyNpZiBkZWZpbmVkKF9fc3BhcmNfXykgfHwgZGVmaW5lZChfX2lhNjRfXykKKy8qIHN1Y2ggYWxpZ25tZW50IGlzIG5vdCByZXF1aXJlZCBvbiAzMiBiaXQgc3BhcmNzLCBidXQgd2UgY2FuJ3QKKyAgIGZpZ3VyZSB0aGF0IHdlIGFyZSBvbiBhIHNwYXJjNjQgd2hpbGUgY29tcGlsaW5nIHVzZXItc3BhY2UgcHJvZ3JhbXMuICovCisjZGVmaW5lIF9fQVRNX0FQSV9BTElHTglfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSkKKyNlbHNlCisjZGVmaW5lIF9fQVRNX0FQSV9BTElHTgorI2VuZGlmCisKKworLyoKKyAqIE9wYXF1ZSB0eXBlIGZvciBrZXJuZWwgcG9pbnRlcnMuIE5vdGUgdGhhdCBfIGlzIG5ldmVyIGFjY2Vzc2VkLiBXZSBuZWVkCisgKiB0aGUgc3RydWN0IGluIG9yZGVyIGhpZGUgdGhlIGFycmF5LCBzbyB0aGF0IHdlIGNhbiBtYWtlIHNpbXBsZSBhc3NpZ25tZW50cworICogaW5zdGVhZCBvZiBiZWluZyBmb3JjZWQgdG8gdXNlIG1lbWNweS4gSXQgYWxzbyBpbXByb3ZlcyBlcnJvciByZXBvcnRpbmcgZm9yCisgKiBjb2RlIHRoYXQgc3RpbGwgYXNzdW1lcyB0aGF0IHdlJ3JlIHBhc3NpbmcgdW5zaWduZWQgbG9uZ3MuCisgKgorICogQ29udmVudGlvbjogTlVMTCBwb2ludGVycyBhcmUgcGFzc2VkIGFzIGEgZmllbGQgb2YgYWxsIHplcm9lcy4KKyAqLworIAordHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBjaGFyIF9bOF07IH0gX19BVE1fQVBJX0FMSUdOIGF0bV9rcHRyX3Q7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hdG1hcnAuaCBiL2luY2x1ZGUvbGludXgvYXRtYXJwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRmODIzMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvYXRtYXJwLmgKQEAgLTAsMCArMSw0MyBAQAorLyogYXRtYXJwLmggLSBBVE0gQVJQIHByb3RvY29sIGFuZCBrZXJuZWwtZGVtb24gaW50ZXJmYWNlIGRlZmluaXRpb25zICovCisgCisvKiBXcml0dGVuIDE5OTUtMTk5OSBieSBXZXJuZXIgQWxtZXNiZXJnZXIsIEVQRkwgTFJDL0lDQSAqLworIAorCisjaWZuZGVmIF9MSU5VWF9BVE1BUlBfSAorI2RlZmluZSBfTElOVVhfQVRNQVJQX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2VuZGlmCisjaW5jbHVkZSA8bGludXgvYXRtYXBpLmg+CisjaW5jbHVkZSA8bGludXgvYXRtaW9jLmg+CisKKworI2RlZmluZSBBVE1BUlBfUkVUUllfREVMQVkgMzAJCS8qIHJlcXVlc3QgbmV4dCByZXNvbHV0aW9uIG9yIGZvcmdldAorCQkJCQkgICBOQUsgYWZ0ZXIgMzAgc2VjIC0gc2hvdWxkIGdvIGludG8KKwkJCQkJICAgYXRtY2xpcC5oICovCisjZGVmaW5lIEFUTUFSUF9NQVhfVU5SRVNfUEFDS0VUUyA1CS8qIHF1ZXVlIHRoYXQgbWFueSBwYWNrZXRzIHdoaWxlCisJCQkJCSAgIHdhaXRpbmcgZm9yIHRoZSByZXNvbHZlciAqLworCisKKyNkZWZpbmUgQVRNQVJQRF9DVFJMCV9JTygnYScsQVRNSU9DX0NMSVArMSkJLyogYmVjb21lIGF0bWFycGQgY3RybCBzb2NrICovCisjZGVmaW5lIEFUTUFSUF9NS0lQCV9JTygnYScsQVRNSU9DX0NMSVArMikJLyogYXR0YWNoIHNvY2tldCB0byBJUCAqLworI2RlZmluZSBBVE1BUlBfU0VURU5UUlkJX0lPKCdhJyxBVE1JT0NfQ0xJUCszKQkvKiBmaWxsIG9yIGhpZGUgQVJQIGVudHJ5ICovCisjZGVmaW5lIEFUTUFSUF9FTkNBUAlfSU8oJ2EnLEFUTUlPQ19DTElQKzUpCS8qIGNoYW5nZSBlbmNhcHN1bGF0aW9uICovCisKKworZW51bSBhdG1hcnBfY3RybF90eXBlIHsKKwlhY3RfaW52YWxpZCwJCS8qIGNhdGNoIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlcyAqLworCWFjdF9uZWVkLAkJLyogbmVlZCBhZGRyZXNzIHJlc29sdXRpb24gKi8KKwlhY3RfdXAsCQkJLyogaW50ZXJmYWNlIGlzIGNvbWluZyB1cCAqLworCWFjdF9kb3duLAkJLyogaW50ZXJmYWNlIGlzIGdvaW5nIGRvd24gKi8KKwlhY3RfY2hhbmdlCQkvKiBpbnRlcmZhY2UgY29uZmlndXJhdGlvbiBoYXMgY2hhbmdlZCAqLworfTsKKworc3RydWN0IGF0bWFycF9jdHJsIHsKKwllbnVtIGF0bWFycF9jdHJsX3R5cGUJdHlwZTsJLyogbWVzc2FnZSB0eXBlICovCisJaW50CQkJaXRmX251bTsvKiBpbnRlcmZhY2UgbnVtYmVyIChpZiBwcmVzZW50KSAqLworCXVpbnQzMl90CQlpcDsJLyogSVAgYWRkcmVzcyAoYWN0X25lZWQgb25seSkgKi8KK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hdG1icjI2ODQuaCBiL2luY2x1ZGUvbGludXgvYXRtYnIyNjg0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk4MWI3MwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvYXRtYnIyNjg0LmgKQEAgLTAsMCArMSwxMDEgQEAKKyNpZm5kZWYgX0xJTlVYX0FUTUJSMjY4NF9ICisjZGVmaW5lIF9MSU5VWF9BVE1CUjI2ODRfSAorCisjaW5jbHVkZSA8bGludXgvYXRtLmg+CisjaW5jbHVkZSA8bGludXgvaWYuaD4JCS8qIEZvciBJRk5BTVNJWiAqLworCisvKgorICogVHlwZSBvZiBtZWRpYSB3ZSdyZSBicmlkZ2luZyAoZXRoZXJuZXQsIHRva2VuIHJpbmcsIGV0YykgIEN1cnJlbnRseSBvbmx5CisgKiBldGhlcm5ldCBpcyBzdXBwb3J0ZWQKKyAqLworI2RlZmluZSBCUjI2ODRfTUVESUFfRVRIRVJORVQJKDApCS8qIDgwMi4zICovCisjZGVmaW5lIEJSMjY4NF9NRURJQV84MDJfNAkoMSkJLyogODAyLjQgKi8KKyNkZWZpbmUgQlIyNjg0X01FRElBX1RSCQkoMikJLyogODAyLjUgLSB0b2tlbiByaW5nICovCisjZGVmaW5lIEJSMjY4NF9NRURJQV9GRERJCSgzKQorI2RlZmluZSBCUjI2ODRfTUVESUFfODAyXzYJKDQpCS8qIDgwMi42ICovCisKKy8qCisgKiBJcyB0aGVyZSBGQ1MgaW5ib3VuZCBvbiB0aGlzIFZDPyAgVGhpcyBjdXJyZW50bHkgaXNuJ3Qgc3VwcG9ydGVkLgorICovCisjZGVmaW5lIEJSMjY4NF9GQ1NJTl9OTwkJKDApCisjZGVmaW5lIEJSMjY4NF9GQ1NJTl9JR05PUkUJKDEpCisjZGVmaW5lIEJSMjY4NF9GQ1NJTl9WRVJJRlkJKDIpCisKKy8qCisgKiBJcyB0aGVyZSBGQ1Mgb3V0Ym91bmQgb24gdGhpcyBWQz8gIFRoaXMgY3VycmVudGx5IGlzbid0IHN1cHBvcnRlZC4KKyAqLworI2RlZmluZSBCUjI2ODRfRkNTT1VUX05PCSgwKQorI2RlZmluZSBCUjI2ODRfRkNTT1VUX1NFTkRaRVJPCSgxKQorI2RlZmluZSBCUjI2ODRfRkNTT1VUX0dFTkVSQVRFCSgyKQorCisvKgorICogRG9lcyB0aGlzIFZDIGluY2x1ZGUgTExDIGVuY2Fwc3VsYXRpb24/CisgKi8KKyNkZWZpbmUgQlIyNjg0X0VOQ0FQU19WQwkoMCkJLyogVkMtbXV4ICovCisjZGVmaW5lIEJSMjY4NF9FTkNBUFNfTExDCSgxKQorI2RlZmluZSBCUjI2ODRfRU5DQVBTX0FVVE9ERVRFQ1QgKDIpCS8qIFVuc3Vwb3J0ZWQgKi8KKworLyoKKyAqIFRoaXMgaXMgZm9yIHRoZSBBVE1fTkVXQkFDS0VORElGIGNhbGwgLSB0aGVzZSBhcmUgbGlrZSBzb2NrZXQgZmFtaWxpZXM6CisgKiB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgc3RydWN0dXJlIGlzIHRoZSBiYWNrZW5kIG51bWJlciBhbmQgdGhlIHJlc3QKKyAqIGlzIHBlci1iYWNrZW5kIHNwZWNpZmljCisgKi8KK3N0cnVjdCBhdG1fbmV3aWZfYnIyNjg0IHsKKwlhdG1fYmFja2VuZF90CWJhY2tlbmRfbnVtOwkvKiBBVE1fQkFDS0VORF9CUjI2ODQgKi8KKwlpbnQJCW1lZGlhOwkJLyogQlIyNjg0X01FRElBXyogKi8KKwljaGFyCQlpZm5hbWVbSUZOQU1TSVpdOworCWludAkJbXR1OworfTsKKworLyoKKyAqIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgdG8gc3BlY2lmeSBhIGJyMjY4NCBpbnRlcmZhY2UgLSBlaXRoZXIgYnkgYQorICogcG9zaXRpdmUgaW50ZWdlciAocmV0dXJuZWQgYnkgQVRNX05FV0JBQ0tFTkRJRikgb3IgdGhlIGludGVyZmFjZXMgbmFtZQorICovCisjZGVmaW5lIEJSMjY4NF9GSU5EX0JZTk9USElORwkoMCkKKyNkZWZpbmUgQlIyNjg0X0ZJTkRfQllOVU0JKDEpCisjZGVmaW5lIEJSMjY4NF9GSU5EX0JZSUZOQU1FCSgyKQorc3RydWN0IGJyMjY4NF9pZl9zcGVjIHsKKwlpbnQgbWV0aG9kOwkJCS8qIEJSMjY4NF9GSU5EXyogKi8KKwl1bmlvbiB7CisJCWNoYXIJCWlmbmFtZVtJRk5BTVNJWl07CisJCWludAkJZGV2bnVtOworCX0gc3BlYzsKK307CisKKy8qCisgKiBUaGlzIGlzIGZvciB0aGUgQVRNX1NFVEJBQ0tFTkQgY2FsbCAtIHRoZXNlIGFyZSBsaWtlIHNvY2tldCBmYW1pbGllczoKKyAqIHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSBzdHJ1Y3R1cmUgaXMgdGhlIGJhY2tlbmQgbnVtYmVyIGFuZCB0aGUgcmVzdAorICogaXMgcGVyLWJhY2tlbmQgc3BlY2lmaWMKKyAqLworc3RydWN0IGF0bV9iYWNrZW5kX2JyMjY4NCB7CisJYXRtX2JhY2tlbmRfdAliYWNrZW5kX251bTsJLyogQVRNX0JBQ0tFTkRfQlIyNjg0ICovCisJc3RydWN0IGJyMjY4NF9pZl9zcGVjIGlmc3BlYzsKKwlpbnQJZmNzX2luOwkJLyogQlIyNjg0X0ZDU0lOXyogKi8KKwlpbnQJZmNzX291dDsJLyogQlIyNjg0X0ZDU09VVF8qICovCisJaW50CWZjc19hdXRvOwkvKiAxOiBmY3Nfe2luLG91dH0gZGlzYWJsZWQgaWYgbm8gRkNTIHJ4J2VkICovCisJaW50CWVuY2FwczsJCS8qIEJSMjY4NF9FTkNBUFNfKiAqLworCWludAloYXNfdnBpaWQ7CS8qIDE6IHVzZSB2cG5faWQgLSBVbnN1cHBvcnRlZCAqLworCV9fdTgJdnBuX2lkWzddOworCWludAlzZW5kX3BhZGRpbmc7CS8qIHVuc3VwcG9ydGVkICovCisJaW50CW1pbl9zaXplOwkvKiB3ZSB3aWxsIHBhZCBzbWFsbGVyIHBhY2tldHMgdGhhbiB0aGlzICovCit9OworCisvKgorICogVGhlIEJSMjY4NF9TRVRGSUxUIGlvY3RsIGlzIGFuIGV4cGVyaW1lbnRhbCBtZWNoYW5pc20gZm9yIGZvbGtzCisgKiB0ZXJtaW5hdGluZyBhIGxhcmdlIG51bWJlciBvZiBJUC1vbmx5IHZjYydzLiAgV2hlbiBuZXRmaWx0ZXIgYWxsb3dzCisgKiBlZmZpY2llbnQgcGVyLWlmIGluL291dCBmaWx0ZXJzLCB0aGlzIHN1cHBvcnQgd2lsbCBiZSByZW1vdmVkCisgKi8KK3N0cnVjdCBicjI2ODRfZmlsdGVyIHsKKwlfX3UzMglwcmVmaXg7CQkvKiBuZXR3b3JrIGJ5dGUgb3JkZXIgKi8KKwlfX3UzMgluZXRtYXNrOwkvKiAwID0gZGlzYWJsZSBmaWx0ZXIgKi8KK307CisKK3N0cnVjdCBicjI2ODRfZmlsdGVyX3NldCB7CisJc3RydWN0IGJyMjY4NF9pZl9zcGVjIGlmc3BlYzsKKwlzdHJ1Y3QgYnIyNjg0X2ZpbHRlciBmaWx0ZXI7Cit9OworCisjZGVmaW5lIEJSMjY4NF9TRVRGSUxUCV9JT1coICdhJywgQVRNSU9DX0JBQ0tFTkQgKyAwLCBcCisJCQkJc3RydWN0IGJyMjY4NF9maWx0ZXJfc2V0KQorCisjZW5kaWYgLyogX0xJTlVYX0FUTUJSMjY4NF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2F0bWNsaXAuaCBiL2luY2x1ZGUvbGludXgvYXRtY2xpcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyYzk0YzQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2F0bWNsaXAuaApAQCAtMCwwICsxLDIxIEBACisvKiBhdG1jbGlwLmggLSBDbGFzc2ljYWwgSVAgb3ZlciBBVE0gKi8KKyAKKy8qIFdyaXR0ZW4gMTk5NS0xOTk4IGJ5IFdlcm5lciBBbG1lc2JlcmdlciwgRVBGTCBMUkMvSUNBICovCisgCisKKyNpZm5kZWYgTElOVVhfQVRNQ0xJUF9ICisjZGVmaW5lIExJTlVYX0FUTUNMSVBfSAorCisjaW5jbHVkZSA8bGludXgvc29ja2lvcy5oPgorI2luY2x1ZGUgPGxpbnV4L2F0bWlvYy5oPgorCisKKyNkZWZpbmUgUkZDMTQ4M0xMQ19MRU4JOAkJLyogTExDK09VSStQSUQgPSA4ICovCisjZGVmaW5lIFJGQzE2MjZfTVRVCTkxODAJCS8qIFJGQzE2MjYgZGVmYXVsdCBNVFUgKi8KKworI2RlZmluZSBDTElQX0RFRkFVTFRfSURMRVRJTUVSIDEyMDAJLyogMjAgbWludXRlcywgc2VlIFJGQzE3NTUgKi8KKyNkZWZpbmUgQ0xJUF9DSEVDS19JTlRFUlZBTAkgMTAJLyogY2hlY2sgZXZlcnkgdGVuIHNlY29uZHMgKi8KKworI2RlZmluZQlTSU9DTUtDTElQCV9JTygnYScsQVRNSU9DX0NMSVApCS8qIGNyZWF0ZSBJUCBpbnRlcmZhY2UgKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2F0bWRldi5oIGIvaW5jbHVkZS9saW51eC9hdG1kZXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjM3NGNmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9hdG1kZXYuaApAQCAtMCwwICsxLDQ4OSBAQAorLyogYXRtZGV2LmggLSBBVE0gZGV2aWNlIGRyaXZlciBkZWNsYXJhdGlvbnMgYW5kIHZhcmlvdXMgcmVsYXRlZCBpdGVtcyAqLworIAorLyogV3JpdHRlbiAxOTk1LTIwMDAgYnkgV2VybmVyIEFsbWVzYmVyZ2VyLCBFUEZMIExSQy9JQ0EgKi8KKyAKKworI2lmbmRlZiBMSU5VWF9BVE1ERVZfSAorI2RlZmluZSBMSU5VWF9BVE1ERVZfSAorCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9hdG1hcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9hdG0uaD4KKyNpbmNsdWRlIDxsaW51eC9hdG1pb2MuaD4KKworCisjZGVmaW5lIEVTSV9MRU4JCTYKKworI2RlZmluZSBBVE1fT0MzX1BDUgkoMTU1NTIwMDAwLzI3MCoyNjAvOC81MykKKwkJCS8qIE9DMyBsaW5rIHJhdGU6ICAxNTU1MjAwMDAgYnBzCisJCQkgICBTT05FVCBvdmVyaGVhZDogLzI3MCoyNjAgKDkgc2VjdGlvbiwgMSBwYXRoKQorCQkJICAgYml0cyBwZXIgY2VsbDogIC84LzUzCisJCQkgICBtYXggY2VsbCByYXRlOiAgMzUzMjA3LjU0NyBjZWxscy9zZWMgKi8KKyNkZWZpbmUgQVRNXzI1X1BDUgkoKDI1NjAwMDAwLzgtODAwMCkvNTQpCisJCQkvKiAyNSBNYnBzIEFUTSBjZWxsIHJhdGUgKDU5MTExKSAqLworI2RlZmluZSBBVE1fT0MxMl9QQ1IJKDYyMjA4MDAwMC8xMDgwKjEwNDAvOC81MykKKwkJCS8qIE9DMTIgbGluayByYXRlOiA2MjIwODAwMDAgYnBzCisJCQkgICBTT05FVCBvdmVyaGVhZDogLzEwODAqMTA0MAorCQkJICAgYml0cyBwZXIgY2VsbDogIC84LzUzCisJCQkgICBtYXggY2VsbCByYXRlOiAgMTQxMjgzMC4xODggY2VsbHMvc2VjICovCisjZGVmaW5lIEFUTV9EUzNfUENSCSg4MDAwKjEyKQorCQkJLyogRFMzOiAxMiBjZWxscyBpbiBhIDEyNSB1c2VjIHRpbWUgc2xvdCAqLworCisKKyNkZWZpbmUgX19BQUxfU1RBVF9JVEVNUyBcCisgICAgX19IQU5ETEVfSVRFTSh0eCk7CQkJLyogVFggb2theSAqLyBcCisgICAgX19IQU5ETEVfSVRFTSh0eF9lcnIpOwkJLyogVFggZXJyb3JzICovIFwKKyAgICBfX0hBTkRMRV9JVEVNKHJ4KTsJCQkvKiBSWCBva2F5ICovIFwKKyAgICBfX0hBTkRMRV9JVEVNKHJ4X2Vycik7CQkvKiBSWCBlcnJvcnMgKi8gXAorICAgIF9fSEFORExFX0lURU0ocnhfZHJvcCk7CQkvKiBSWCBvdXQgb2YgbWVtb3J5ICovCisKK3N0cnVjdCBhdG1fYWFsX3N0YXRzIHsKKyNkZWZpbmUgX19IQU5ETEVfSVRFTShpKSBpbnQgaQorCV9fQUFMX1NUQVRfSVRFTVMKKyN1bmRlZiBfX0hBTkRMRV9JVEVNCit9OworCisKK3N0cnVjdCBhdG1fZGV2X3N0YXRzIHsKKwlzdHJ1Y3QgYXRtX2FhbF9zdGF0cyBhYWwwOworCXN0cnVjdCBhdG1fYWFsX3N0YXRzIGFhbDM0OworCXN0cnVjdCBhdG1fYWFsX3N0YXRzIGFhbDU7Cit9IF9fQVRNX0FQSV9BTElHTjsKKworCisjZGVmaW5lIEFUTV9HRVRMSU5LUkFURQlfSU9XKCdhJyxBVE1JT0NfSVRGKzEsc3RydWN0IGF0bWlmX3Npb2MpCisJCQkJCS8qIGdldCBsaW5rIHJhdGUgKi8KKyNkZWZpbmUgQVRNX0dFVE5BTUVTCV9JT1coJ2EnLEFUTUlPQ19JVEYrMyxzdHJ1Y3QgYXRtX2lvYnVmKQorCQkJCQkvKiBnZXQgaW50ZXJmYWNlIG5hbWVzIChudW1iZXJzKSAqLworI2RlZmluZSBBVE1fR0VUVFlQRQlfSU9XKCdhJyxBVE1JT0NfSVRGKzQsc3RydWN0IGF0bWlmX3Npb2MpCisJCQkJCS8qIGdldCBpbnRlcmZhY2UgdHlwZSBuYW1lICovCisjZGVmaW5lIEFUTV9HRVRFU0kJX0lPVygnYScsQVRNSU9DX0lURis1LHN0cnVjdCBhdG1pZl9zaW9jKQorCQkJCQkvKiBnZXQgaW50ZXJmYWNlIEVTSSAqLworI2RlZmluZSBBVE1fR0VUQUREUglfSU9XKCdhJyxBVE1JT0NfSVRGKzYsc3RydWN0IGF0bWlmX3Npb2MpCisJCQkJCS8qIGdldCBpdGYncyBsb2NhbCBBVE0gYWRkci4gbGlzdCAqLworI2RlZmluZSBBVE1fUlNUQUREUglfSU9XKCdhJyxBVE1JT0NfSVRGKzcsc3RydWN0IGF0bWlmX3Npb2MpCisJCQkJCS8qIHJlc2V0IGl0ZidzIEFUTSBhZGRyZXNzIGxpc3QgKi8KKyNkZWZpbmUgQVRNX0FEREFERFIJX0lPVygnYScsQVRNSU9DX0lURis4LHN0cnVjdCBhdG1pZl9zaW9jKQorCQkJCQkvKiBhZGQgYSBsb2NhbCBBVE0gYWRkcmVzcyAqLworI2RlZmluZSBBVE1fREVMQUREUglfSU9XKCdhJyxBVE1JT0NfSVRGKzksc3RydWN0IGF0bWlmX3Npb2MpCisJCQkJCS8qIHJlbW92ZSBhIGxvY2FsIEFUTSBhZGRyZXNzICovCisjZGVmaW5lIEFUTV9HRVRDSVJBTkdFCV9JT1coJ2EnLEFUTUlPQ19JVEYrMTAsc3RydWN0IGF0bWlmX3Npb2MpCisJCQkJCS8qIGdldCBjb25uZWN0aW9uIGlkZW50aWZpZXIgcmFuZ2UgKi8KKyNkZWZpbmUgQVRNX1NFVENJUkFOR0UJX0lPVygnYScsQVRNSU9DX0lURisxMSxzdHJ1Y3QgYXRtaWZfc2lvYykKKwkJCQkJLyogc2V0IGNvbm5lY3Rpb24gaWRlbnRpZmllciByYW5nZSAqLworI2RlZmluZSBBVE1fU0VURVNJCV9JT1coJ2EnLEFUTUlPQ19JVEYrMTIsc3RydWN0IGF0bWlmX3Npb2MpCisJCQkJCS8qIHNldCBpbnRlcmZhY2UgRVNJICovCisjZGVmaW5lIEFUTV9TRVRFU0lGCV9JT1coJ2EnLEFUTUlPQ19JVEYrMTMsc3RydWN0IGF0bWlmX3Npb2MpCisJCQkJCS8qIGZvcmNlIGludGVyZmFjZSBFU0kgKi8KKyNkZWZpbmUgQVRNX0dFVFNUQVQJX0lPVygnYScsQVRNSU9DX1NBUkNPTSswLHN0cnVjdCBhdG1pZl9zaW9jKQorCQkJCQkvKiBnZXQgQUFMIGxheWVyIHN0YXRpc3RpY3MgKi8KKyNkZWZpbmUgQVRNX0dFVFNUQVRaCV9JT1coJ2EnLEFUTUlPQ19TQVJDT00rMSxzdHJ1Y3QgYXRtaWZfc2lvYykKKwkJCQkJLyogZ2V0IEFBTCBsYXllciBzdGF0aXN0aWNzIGFuZCB6ZXJvICovCisjZGVmaW5lIEFUTV9HRVRMT09QCV9JT1coJ2EnLEFUTUlPQ19TQVJDT00rMixzdHJ1Y3QgYXRtaWZfc2lvYykKKwkJCQkJLyogZ2V0IGxvb3BiYWNrIG1vZGUgKi8KKyNkZWZpbmUgQVRNX1NFVExPT1AJX0lPVygnYScsQVRNSU9DX1NBUkNPTSszLHN0cnVjdCBhdG1pZl9zaW9jKQorCQkJCQkvKiBzZXQgbG9vcGJhY2sgbW9kZSAqLworI2RlZmluZSBBVE1fUVVFUllMT09QCV9JT1coJ2EnLEFUTUlPQ19TQVJDT00rNCxzdHJ1Y3QgYXRtaWZfc2lvYykKKwkJCQkJLyogcXVlcnkgc3VwcG9ydGVkIGxvb3BiYWNrIG1vZGVzICovCisjZGVmaW5lIEFUTV9TRVRTQwlfSU9XKCdhJyxBVE1JT0NfU1BFQ0lBTCsxLGludCkKKwkJCQkJLyogZW5hYmxlIG9yIGRpc2FibGUgc2luZ2xlLWNvcHkgKi8KKyNkZWZpbmUgQVRNX1NFVEJBQ0tFTkQJX0lPVygnYScsQVRNSU9DX1NQRUNJQUwrMixhdG1fYmFja2VuZF90KQorCQkJCQkvKiBzZXQgYmFja2VuZCBoYW5kbGVyICovCisjZGVmaW5lIEFUTV9ORVdCQUNLRU5ESUYgX0lPVygnYScsQVRNSU9DX1NQRUNJQUwrMyxhdG1fYmFja2VuZF90KQorCQkJCQkvKiB1c2UgYmFja2VuZCB0byBtYWtlIG5ldyBpZiAqLworI2RlZmluZSBBVE1fQUREUEFSVFkgIAlfSU9XKCdhJywgQVRNSU9DX1NQRUNJQUwrNCxzdHJ1Y3QgYXRtX2lvYnVmKQorIAkJCQkJLyogYWRkIHBhcnR5IHRvIHAybXAgY2FsbCAqLworI2RlZmluZSBBVE1fRFJPUFBBUlRZIAlfSU9XKCdhJywgQVRNSU9DX1NQRUNJQUwrNSxpbnQpCisJCQkJCS8qIGRyb3AgcGFydHkgZnJvbSBwMm1wIGNhbGwgKi8KKworLyoKKyAqIFRoZXNlIGFyZSBiYWNrZW5kIGhhbmRrZXJzIHRoYXQgY2FuIGJlIHNldCB2aWEgdGhlIEFUTV9TRVRCQUNLRU5EIGNhbGwKKyAqIGFib3ZlLiAgSW4gdGhlIGZ1dHVyZSB3ZSBtYXkgc3VwcG9ydCBkeW5hbWljIGxvYWRpbmcgb2YgdGhlc2UgLSBmb3Igbm93LAorICogdGhleSdyZSBqdXN0IGJlaW5nIHVzZWQgdG8gc2hhcmUgdGhlIEFUTUlPQ19CQUNLRU5EIGlvY3RscworICovCisjZGVmaW5lIEFUTV9CQUNLRU5EX1JBVwkJMAkKKyNkZWZpbmUgQVRNX0JBQ0tFTkRfUFBQCQkxCS8qIFBQUG9BVE0gLSBSRkMyMzY0ICovCisjZGVmaW5lIEFUTV9CQUNLRU5EX0JSMjY4NAkyCS8qIEJyaWRnZWQgUkZDMTQ4My8yNjg0ICovCisKKy8qIGZvciBBVE1fR0VUVFlQRSAqLworI2RlZmluZSBBVE1fSVRGVFlQX0xFTgk4CS8qIG1heGltdW0gbGVuZ3RoIG9mIGludGVyZmFjZSB0eXBlIG5hbWUgKi8KKworLyoKKyAqIExvb3BiYWNrIG1vZGVzIGZvciBBVE1fe1BIWSxTQVJ9X3tHRVQsU0VUfUxPT1AKKyAqLworCisvKiBQb2ludCBvZiBsb29wYmFjawkJCQlDUFUtLT5TQVItLT5QSFktLT5saW5lLS0+IC4uLiAqLworI2RlZmluZSBfX0FUTV9MTV9OT05FCTAJLyogbm8gbG9vcCBiYWNrICAgICBeICAgICBeICAgICBeICAgICAgXiAgICAgICovCisjZGVmaW5lIF9fQVRNX0xNX0FBTAkxCS8qIGxvb3AgYmFjayBQRFVzIC0tJyAgICAgfCAgICAgfCAgICAgIHwgICAgICAqLworI2RlZmluZSBfX0FUTV9MTV9BVE0JMgkvKiBsb29wIGJhY2sgQVRNIGNlbGxzIC0tLScgICAgIHwgICAgICB8ICAgICAgKi8KKy8qIFJFU0VSVkVECQk0CWxvb3AgYmFjayBvbiBQSFkgc2lkZSAgLS0tJwkJICAgICAgKi8KKyNkZWZpbmUgX19BVE1fTE1fUEhZCTgJLyogbG9vcCBiYWNrIGJpdHMgKGRpZ2l0YWwpIC0tLS0nICAgICAgfCAgICAgICovCisjZGVmaW5lIF9fQVRNX0xNX0FOQUxPRyAxNgkvKiBsb29wIGJhY2sgdGhlIGFuYWxvZyBzaWduYWwgLS0tLS0tLS0nICAgICAgKi8KKworLyogRGlyZWN0aW9uIG9mIGxvb3BiYWNrICovCisjZGVmaW5lIF9fQVRNX0xNX01LTE9DKG4pCSgobikpCSAgICAvKiBMb2NhbCAoaS5lLiBsb29wIFRYIHRvIFJYKSAqLworI2RlZmluZSBfX0FUTV9MTV9NS1JNVChuKQkoKG4pIDw8IDgpICAvKiBSZW1vdGUgKGkuZS4gbG9vcCBSWCB0byBUWCkgKi8KKworI2RlZmluZSBfX0FUTV9MTV9YVExPQyhuKQkoKG4pICYgMHhmZikKKyNkZWZpbmUgX19BVE1fTE1fWFRSTVQobikJKCgobikgPj4gOCkgJiAweGZmKQorCisjZGVmaW5lIEFUTV9MTV9OT05FCTAJLyogbm8gbG9vcGJhY2sgKi8KKworI2RlZmluZSBBVE1fTE1fTE9DX0FBTAlfX0FUTV9MTV9NS0xPQyhfX0FUTV9MTV9BQUwpCisjZGVmaW5lIEFUTV9MTV9MT0NfQVRNCV9fQVRNX0xNX01LTE9DKF9fQVRNX0xNX0FUTSkKKyNkZWZpbmUgQVRNX0xNX0xPQ19QSFkJX19BVE1fTE1fTUtMT0MoX19BVE1fTE1fUEhZKQorI2RlZmluZSBBVE1fTE1fTE9DX0FOQUxPRyBfX0FUTV9MTV9NS0xPQyhfX0FUTV9MTV9BTkFMT0cpCisKKyNkZWZpbmUgQVRNX0xNX1JNVF9BQUwJX19BVE1fTE1fTUtSTVQoX19BVE1fTE1fQUFMKQorI2RlZmluZSBBVE1fTE1fUk1UX0FUTQlfX0FUTV9MTV9NS1JNVChfX0FUTV9MTV9BVE0pCisjZGVmaW5lIEFUTV9MTV9STVRfUEhZCV9fQVRNX0xNX01LUk1UKF9fQVRNX0xNX1BIWSkKKyNkZWZpbmUgQVRNX0xNX1JNVF9BTkFMT0cgX19BVE1fTE1fTUtSTVQoX19BVE1fTE1fQU5BTE9HKQorCisvKgorICogTm90ZTogQVRNX0xNX0xPQ18qIGFuZCBBVE1fTE1fUk1UXyogY2FuIGJlIGNvbWJpbmVkLCBwcm92aWRlZCB0aGF0CisgKiBfX0FUTV9MTV9YVExPQyh4KSA8PSBfX0FUTV9MTV9YVFJNVCh4KQorICovCisKKworc3RydWN0IGF0bV9pb2J1ZiB7CisJaW50IGxlbmd0aDsKKwl2b2lkIF9fdXNlciAqYnVmZmVyOworfTsKKworLyogZm9yIEFUTV9HRVRDSVJBTkdFIC8gQVRNX1NFVENJUkFOR0UgKi8KKworI2RlZmluZSBBVE1fQ0lfTUFYICAgICAgLTEgICAgICAgICAgICAgIC8qIHVzZSBtYXhpbXVtIHJhbmdlIG9mIFZQSS9WQ0kgKi8KKyAKK3N0cnVjdCBhdG1fY2lyYW5nZSB7CisJc2lnbmVkIGNoYXIJdnBpX2JpdHM7CS8qIDEuLjgsIEFUTV9DSV9NQVggKC0xKSBmb3IgbWF4aW11bSAqLworCXNpZ25lZCBjaGFyCXZjaV9iaXRzOwkvKiAxLi4xNiwgQVRNX0NJX01BWCAoLTEpIGZvciBtYXhpbXVtICovCit9OworCisvKiBmb3IgQVRNX1NFVFNDOyBhY3R1YWxseSB0YWtlbiBmcm9tIHRoZSBBVE1fVkYgbnVtYmVyIHNwYWNlICovCisKKyNkZWZpbmUgQVRNX1NDX1JYCTEwMjQJCS8qIGVuYWJsZSBSWCBzaW5nbGUtY29weSAqLworI2RlZmluZSBBVE1fU0NfVFgJMjA0OAkJLyogZW5hYmxlIFRYIHNpbmdsZS1jb3B5ICovCisKKyNkZWZpbmUgQVRNX0JBQ0tMT0dfREVGQVVMVCAzMiAvKiBpZiB3ZSBnZXQgbW9yZSwgd2UncmUgbGlrZWx5IHRvIHRpbWUgb3V0CisJCQkJICBhbnl3YXkgKi8KKworLyogTUY6IGNoYW5nZV9xb3MgKE1vZGlmeSkgZmxhZ3MgKi8KKworI2RlZmluZSBBVE1fTUZfSU1NRUQJIDEJLyogQmxvY2sgdW50aWwgY2hhbmdlIGlzIGVmZmVjdGl2ZSAqLworI2RlZmluZSBBVE1fTUZfSU5DX1JTVgkgMgkvKiBDaGFuZ2UgcmVzZXJ2YXRpb24gb24gaW5jcmVhc2UgKi8KKyNkZWZpbmUgQVRNX01GX0lOQ19TSFAJIDQJLyogQ2hhbmdlIHNoYXBpbmcgb24gaW5jcmVhc2UgKi8KKyNkZWZpbmUgQVRNX01GX0RFQ19SU1YJIDgJLyogQ2hhbmdlIHJlc2VydmF0aW9uIG9uIGRlY3JlYXNlICovCisjZGVmaW5lIEFUTV9NRl9ERUNfU0hQCTE2CS8qIENoYW5nZSBzaGFwaW5nIG9uIGRlY3JlYXNlICovCisjZGVmaW5lIEFUTV9NRl9CV0QJMzIJLyogU2V0IHRoZSBiYWNrd2FyZCBkaXJlY3Rpb24gcGFyYW1ldGVycyAqLworCisjZGVmaW5lIEFUTV9NRl9TRVQJKEFUTV9NRl9JTkNfUlNWIHwgQVRNX01GX0lOQ19TSFAgfCBBVE1fTUZfREVDX1JTViB8IFwKKwkJCSAgQVRNX01GX0RFQ19TSFAgfCBBVE1fTUZfQldEKQorCisvKgorICogQVRNX1ZTXyogYXJlIHVzZWQgdG8gZXhwcmVzcyBWQyBzdGF0ZSBpbiBhIGh1bWFuLWZyaWVuZGx5IHdheS4KKyAqLworCisjZGVmaW5lIEFUTV9WU19JRExFCTAJLyogVkMgaXMgbm90IHVzZWQgKi8KKyNkZWZpbmUgQVRNX1ZTX0NPTk5FQ1RFRCAxCS8qIFZDIGlzIGNvbm5lY3RlZCAqLworI2RlZmluZSBBVE1fVlNfQ0xPU0lORwkyCS8qIFZDIGlzIGNsb3NpbmcgKi8KKyNkZWZpbmUgQVRNX1ZTX0xJU1RFTgkzCS8qIFZDIGlzIGxpc3RlbmluZyBmb3IgaW5jb21pbmcgc2V0dXBzICovCisjZGVmaW5lIEFUTV9WU19JTlVTRQk0CS8qIFZDIGlzIGluIHVzZSAocmVnaXN0ZXJlZCB3aXRoIGF0bXNpZ2QpICovCisjZGVmaW5lIEFUTV9WU19CT1VORAk1CS8qIFZDIGlzIGJvdW5kICovCisKKyNkZWZpbmUgQVRNX1ZTMlRYVF9NQVAgXAorICAgICJJRExFIiwgIkNPTk5FQ1RFRCIsICJDTE9TSU5HIiwgIkxJU1RFTiIsICJJTlVTRSIsICJCT1VORCIKKworI2RlZmluZSBBVE1fVkYyVFhUX01BUCBcCisgICAgIkFERFIiLAkiUkVBRFkiLAkiUEFSVElBTCIsCSJSRUdJUyIsIFwKKyAgICAiUkVMRUFTRUQiLCAiSEFTUU9TIiwJIkxJU1RFTiIsCSJNRVRBIiwgXAorICAgICIyNTYiLAkiNTEyIiwJCSIxMDI0IiwJCSIyMDQ4IiwgXAorICAgICJTRVNTSU9OIiwJIkhBU1NBUCIsCSJCT1VORCIsCSJDTE9TRSIKKworCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvd2FpdC5oPiAvKiB3YWl0X3F1ZXVlX2hlYWRfdCAqLworI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4gLyogc3RydWN0IHRpbWV2YWwgKi8KKyNpbmNsdWRlIDxsaW51eC9uZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4gLyogc3RydWN0IHNrX2J1ZmYgKi8KKyNpbmNsdWRlIDxsaW51eC91aW8uaD4KKyNpbmNsdWRlIDxuZXQvc29jay5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKworI2lmZGVmIENPTkZJR19QUk9DX0ZTCisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorCitleHRlcm4gc3RydWN0IHByb2NfZGlyX2VudHJ5ICphdG1fcHJvY19yb290OworI2VuZGlmCisKKworc3RydWN0IGtfYXRtX2FhbF9zdGF0cyB7CisjZGVmaW5lIF9fSEFORExFX0lURU0oaSkgYXRvbWljX3QgaQorCV9fQUFMX1NUQVRfSVRFTVMKKyN1bmRlZiBfX0hBTkRMRV9JVEVNCit9OworCisKK3N0cnVjdCBrX2F0bV9kZXZfc3RhdHMgeworCXN0cnVjdCBrX2F0bV9hYWxfc3RhdHMgYWFsMDsKKwlzdHJ1Y3Qga19hdG1fYWFsX3N0YXRzIGFhbDM0OworCXN0cnVjdCBrX2F0bV9hYWxfc3RhdHMgYWFsNTsKK307CisKKworZW51bSB7CisJQVRNX1ZGX0FERFIsCQkvKiBBZGRyZXNzIGlzIGluIHVzZS4gU2V0IGJ5IGFueWJvZHksIGNsZWFyZWQKKwkJCQkgICBieSBkZXZpY2UgZHJpdmVyLiAqLworCUFUTV9WRl9SRUFEWSwJCS8qIFZDIGlzIHJlYWR5IHRvIHRyYW5zZmVyIGRhdGEuIFNldCBieSBkZXZpY2UKKwkJCQkgICBkcml2ZXIsIGNsZWFyZWQgYnkgYW55Ym9keS4gKi8KKwlBVE1fVkZfUEFSVElBTCwJCS8qIHJlc291cmNlcyBhcmUgYm91bmQgdG8gUFZDIChwYXJ0aWFsIFBWQworCQkJCSAgIHNldHVwKSwgY29udHJvbGxlZCBieSBzb2NrZXQgbGF5ZXIgKi8KKwlBVE1fVkZfUkVHSVMsCQkvKiByZWdpc3RlcmVkIHdpdGggZGVtb24sIGNvbnRyb2xsZWQgYnkgU1ZDCisJCQkJICAgc29ja2V0IGxheWVyICovCisJQVRNX1ZGX0JPVU5ELAkJLyogbG9jYWwgU0FQIGlzIHNldCwgY29udHJvbGxlZCBieSBTVkMgc29ja2V0CisJCQkJICAgbGF5ZXIgKi8KKwlBVE1fVkZfUkVMRUFTRUQsCS8qIGRlbW9uIGhhcyBpbmRpY2F0ZWQvcmVxdWVzdGVkIHJlbGVhc2UsCisJCQkJICAgY29udHJvbGxlZCBieSBTVkMgc29ja2V0IGxheWVyICovCisJQVRNX1ZGX0hBU1FPUywJCS8qIFFPUyBwYXJhbWV0ZXJzIGhhdmUgYmVlbiBzZXQgKi8KKwlBVE1fVkZfTElTVEVOLAkJLyogc29ja2V0IGlzIHVzZWQgZm9yIGxpc3RlbmluZyAqLworCUFUTV9WRl9NRVRBLAkJLyogU1ZDIHNvY2tldCBpc24ndCB1c2VkIGZvciBub3JtYWwgZGF0YQorCQkJCSAgIHRyYWZmaWMgYW5kIGRvZXNuJ3QgZGVwZW5kIG9uIHNpZ25hbGluZworCQkJCSAgIHRvIGJlIGF2YWlsYWJsZSAqLworCUFUTV9WRl9TRVNTSU9OLAkJLyogVkNDIGlzIHAybXAgc2Vzc2lvbiBjb250cm9sIGRlc2NyaXB0b3IgKi8KKwlBVE1fVkZfSEFTU0FQLAkJLyogU0FQIGhhcyBiZWVuIHNldCAqLworCUFUTV9WRl9DTE9TRSwJCS8qIGFzeW5jaHJvbm91cyBjbG9zZSAtIHRyZWF0IGxpa2UgVkZfUkVMRUFTRUQqLworCUFUTV9WRl9XQUlUSU5HLAkJLyogd2FpdGluZyBmb3IgcmVwbHkgZnJvbSBzaWdkICovCisJQVRNX1ZGX0lTX0NMSVAsCQkvKiBpbiB1c2UgYnkgQ0xJUCBwcm90b2NvbCAqLworfTsKKworCisjZGVmaW5lIEFUTV9WRjJWUyhmbGFncykgXAorICAgICh0ZXN0X2JpdChBVE1fVkZfUkVBRFksJihmbGFncykpID8gQVRNX1ZTX0NPTk5FQ1RFRCA6IFwKKyAgICAgdGVzdF9iaXQoQVRNX1ZGX1JFTEVBU0VELCYoZmxhZ3MpKSA/IEFUTV9WU19DTE9TSU5HIDogXAorICAgICB0ZXN0X2JpdChBVE1fVkZfTElTVEVOLCYoZmxhZ3MpKSA/IEFUTV9WU19MSVNURU4gOiBcCisgICAgIHRlc3RfYml0KEFUTV9WRl9SRUdJUywmKGZsYWdzKSkgPyBBVE1fVlNfSU5VU0UgOiBcCisgICAgIHRlc3RfYml0KEFUTV9WRl9CT1VORCwmKGZsYWdzKSkgPyBBVE1fVlNfQk9VTkQgOiBBVE1fVlNfSURMRSkKKworCitlbnVtIHsKKwlBVE1fREZfQ0xPU0UsCQkvKiBjbG9zZSBkZXZpY2Ugd2hlbiBsYXN0IFZDQyBpcyBjbG9zZWQgKi8KK307CisKKworI2RlZmluZSBBVE1fUEhZX1NJR19MT1NUICAgIDAJLyogbm8gY2Fycmllci9saWdodCAqLworI2RlZmluZSBBVE1fUEhZX1NJR19VTktOT1dOIDEJLyogY2Fycmllci9saWdodCBzdGF0dXMgaXMgdW5rbm93biAqLworI2RlZmluZSBBVE1fUEhZX1NJR19GT1VORCAgIDIJLyogY2Fycmllci9saWdodCBva2F5ICovCisKKyNkZWZpbmUgQVRNX0FUTU9QVF9DTFAJMQkvKiBzZXQgQ0xQIGJpdCAqLworCitzdHJ1Y3QgYXRtX3ZjYyB7CisJLyogc3RydWN0IHNvY2sgaGFzIHRvIGJlIHRoZSBmaXJzdCBtZW1iZXIgb2YgYXRtX3ZjYyAqLworCXN0cnVjdCBzb2NrCXNrOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CQkvKiBWQ0MgZmxhZ3MgKEFUTV9WRl8qKSAqLworCXNob3J0CQl2cGk7CQkvKiBWUEkgYW5kIFZDSSAodHlwZXMgbXVzdCBiZSBlcXVhbCAqLworCQkJCQkvKiB3aXRoIHNvY2thZGRyKSAqLworCWludCAJCXZjaTsKKwl1bnNpZ25lZCBsb25nCWFhbF9vcHRpb25zOwkvKiBBQUwgbGF5ZXIgb3B0aW9ucyAqLworCXVuc2lnbmVkIGxvbmcJYXRtX29wdGlvbnM7CS8qIEFUTSBsYXllciBvcHRpb25zICovCisJc3RydWN0IGF0bV9kZXYJKmRldjsJCS8qIGRldmljZSBiYWNrIHBvaW50ZXIgKi8KKwlzdHJ1Y3QgYXRtX3Fvcwlxb3M7CQkvKiBRT1MgKi8KKwlzdHJ1Y3QgYXRtX3NhcAlzYXA7CQkvKiBTQVAgKi8KKwl2b2lkICgqcHVzaCkoc3RydWN0IGF0bV92Y2MgKnZjYyxzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKwl2b2lkICgqcG9wKShzdHJ1Y3QgYXRtX3ZjYyAqdmNjLHN0cnVjdCBza19idWZmICpza2IpOyAvKiBvcHRpb25hbCAqLworCWludCAoKnB1c2hfb2FtKShzdHJ1Y3QgYXRtX3ZjYyAqdmNjLHZvaWQgKmNlbGwpOworCWludCAoKnNlbmQpKHN0cnVjdCBhdG1fdmNjICp2Y2Msc3RydWN0IHNrX2J1ZmYgKnNrYik7CisJdm9pZAkJKmRldl9kYXRhOwkvKiBwZXItZGV2aWNlIGRhdGEgKi8KKwl2b2lkCQkqcHJvdG9fZGF0YTsJLyogcGVyLXByb3RvY29sIGRhdGEgKi8KKwlzdHJ1Y3Qga19hdG1fYWFsX3N0YXRzICpzdGF0czsJLyogcG9pbnRlciB0byBBQUwgc3RhdHMgZ3JvdXAgKi8KKwkvKiBTVkMgcGFydCAtLS0gbWF5IG1vdmUgbGF0ZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCXNob3J0CQlpdGY7CQkvKiBpbnRlcmZhY2UgbnVtYmVyICovCisJc3RydWN0IHNvY2thZGRyX2F0bXN2YyBsb2NhbDsKKwlzdHJ1Y3Qgc29ja2FkZHJfYXRtc3ZjIHJlbW90ZTsKKwkvKiBNdWx0aXBvaW50IHBhcnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCXN0cnVjdCBhdG1fdmNjCSpzZXNzaW9uOwkvKiBzZXNzaW9uIFZDQyBkZXNjcmlwdG9yICovCisJLyogT3RoZXIgc3R1ZmYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwl2b2lkCQkqdXNlcl9iYWNrOwkvKiB1c2VyIGJhY2tsaW5rIC0gbm90IHRvdWNoZWQgYnkgKi8KKwkJCQkJLyogbmF0aXZlIEFUTSBzdGFjay4gQ3VycmVudGx5IHVzZWQgKi8KKwkJCQkJLyogYnkgQ0xJUCBhbmQgc2NoX2F0bS4gKi8KK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGF0bV92Y2MgKmF0bV9zayhzdHJ1Y3Qgc29jayAqc2spCit7CisJcmV0dXJuIChzdHJ1Y3QgYXRtX3ZjYyAqKXNrOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBhdG1fdmNjICpBVE1fU0Qoc3RydWN0IHNvY2tldCAqc29jaykKK3sKKwlyZXR1cm4gYXRtX3NrKHNvY2stPnNrKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc29jayAqc2tfYXRtKHN0cnVjdCBhdG1fdmNjICp2Y2MpCit7CisJcmV0dXJuIChzdHJ1Y3Qgc29jayAqKXZjYzsKK30KKworc3RydWN0IGF0bV9kZXZfYWRkciB7CisJc3RydWN0IHNvY2thZGRyX2F0bXN2YyBhZGRyOwkvKiBBVE0gYWRkcmVzcyAqLworCXN0cnVjdCBsaXN0X2hlYWQgZW50cnk7CQkvKiBuZXh0IGFkZHJlc3MgKi8KK307CisKK3N0cnVjdCBhdG1fZGV2IHsKKwljb25zdCBzdHJ1Y3QgYXRtZGV2X29wcyAqb3BzOwkvKiBkZXZpY2Ugb3BlcmF0aW9uczsgTlVMTCBpZiB1bnVzZWQgKi8KKwljb25zdCBzdHJ1Y3QgYXRtcGh5X29wcyAqcGh5OwkvKiBQSFkgb3BlcmF0aW9ucywgbWF5IGJlIHVuZGVmaW5lZCAqLworCQkJCQkvKiAoTlVMTCkgKi8KKwljb25zdCBjaGFyCSp0eXBlOwkJLyogZGV2aWNlIHR5cGUgbmFtZSAqLworCWludAkJbnVtYmVyOwkJLyogZGV2aWNlIGluZGV4ICovCisJdm9pZAkJKmRldl9kYXRhOwkvKiBwZXItZGV2aWNlIGRhdGEgKi8KKwl2b2lkCQkqcGh5X2RhdGE7CS8qIHByaXZhdGUgUEhZIGRhdGUgKi8KKwl1bnNpZ25lZCBsb25nCWZsYWdzOwkJLyogZGV2aWNlIGZsYWdzIChBVE1fREZfKikgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGxvY2FsOwkJLyogbG9jYWwgQVRNIGFkZHJlc3NlcyAqLworCXVuc2lnbmVkIGNoYXIJZXNpW0VTSV9MRU5dOwkvKiBFU0kgKCJNQUMiIGFkZHIpICovCisJc3RydWN0IGF0bV9jaXJhbmdlIGNpX3JhbmdlOwkvKiBWUEkvVkNJIHJhbmdlICovCisJc3RydWN0IGtfYXRtX2Rldl9zdGF0cyBzdGF0czsJLyogc3RhdGlzdGljcyAqLworCWNoYXIJCXNpZ25hbDsJCS8qIHNpZ25hbCBzdGF0dXMgKEFUTV9QSFlfU0lHXyopICovCisJaW50CQlsaW5rX3JhdGU7CS8qIGxpbmsgcmF0ZSAoZGVmYXVsdDogT0MzKSAqLworCWF0b21pY190CXJlZmNudDsJCS8qIHJlZmVyZW5jZSBjb3VudCAqLworCXNwaW5sb2NrX3QJbG9jazsJCS8qIHByb3RlY3QgaW50ZXJuYWwgbWVtYmVycyAqLworI2lmZGVmIENPTkZJR19QUk9DX0ZTCisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX2VudHJ5OyAvKiBwcm9jIGVudHJ5ICovCisJY2hhciAqcHJvY19uYW1lOwkJLyogcHJvYyBlbnRyeSBuYW1lICovCisjZW5kaWYKKwlzdHJ1Y3QgbGlzdF9oZWFkIGRldl9saXN0OwkvKiBsaW5rYWdlICovCit9OworCisgCisvKiBPRjogc2VuZF9PYW0gRmxhZ3MgKi8KKworI2RlZmluZSBBVE1fT0ZfSU1NRUQgIDEJCS8qIEF0dGVtcHQgaW1tZWRpYXRlIGRlbGl2ZXJ5ICovCisjZGVmaW5lIEFUTV9PRl9JTlJBVEUgMgkJLyogQXR0ZW1wdCBpbi1yYXRlIGRlbGl2ZXJ5ICovCisKKworLyoKKyAqIGlvY3RsLCBnZXRzb2Nrb3B0LCBhbmQgc2V0c29ja29wdCBhcmUgb3B0aW9uYWwgYW5kIGNhbiBiZSBzZXQgdG8gTlVMTC4KKyAqLworCitzdHJ1Y3QgYXRtZGV2X29wcyB7IC8qIG9ubHkgc2VuZCBpcyByZXF1aXJlZCAqLworCXZvaWQgKCpkZXZfY2xvc2UpKHN0cnVjdCBhdG1fZGV2ICpkZXYpOworCWludCAoKm9wZW4pKHN0cnVjdCBhdG1fdmNjICp2Y2MpOworCXZvaWQgKCpjbG9zZSkoc3RydWN0IGF0bV92Y2MgKnZjYyk7CisJaW50ICgqaW9jdGwpKHN0cnVjdCBhdG1fZGV2ICpkZXYsdW5zaWduZWQgaW50IGNtZCx2b2lkIF9fdXNlciAqYXJnKTsKKwlpbnQgKCpnZXRzb2Nrb3B0KShzdHJ1Y3QgYXRtX3ZjYyAqdmNjLGludCBsZXZlbCxpbnQgb3B0bmFtZSwKKwkgICAgdm9pZCBfX3VzZXIgKm9wdHZhbCxpbnQgb3B0bGVuKTsKKwlpbnQgKCpzZXRzb2Nrb3B0KShzdHJ1Y3QgYXRtX3ZjYyAqdmNjLGludCBsZXZlbCxpbnQgb3B0bmFtZSwKKwkgICAgdm9pZCBfX3VzZXIgKm9wdHZhbCxpbnQgb3B0bGVuKTsKKwlpbnQgKCpzZW5kKShzdHJ1Y3QgYXRtX3ZjYyAqdmNjLHN0cnVjdCBza19idWZmICpza2IpOworCWludCAoKnNlbmRfb2FtKShzdHJ1Y3QgYXRtX3ZjYyAqdmNjLHZvaWQgKmNlbGwsaW50IGZsYWdzKTsKKwl2b2lkICgqcGh5X3B1dCkoc3RydWN0IGF0bV9kZXYgKmRldix1bnNpZ25lZCBjaGFyIHZhbHVlLAorCSAgICB1bnNpZ25lZCBsb25nIGFkZHIpOworCXVuc2lnbmVkIGNoYXIgKCpwaHlfZ2V0KShzdHJ1Y3QgYXRtX2RldiAqZGV2LHVuc2lnbmVkIGxvbmcgYWRkcik7CisJaW50ICgqY2hhbmdlX3Fvcykoc3RydWN0IGF0bV92Y2MgKnZjYyxzdHJ1Y3QgYXRtX3FvcyAqcW9zLGludCBmbGFncyk7CisJaW50ICgqcHJvY19yZWFkKShzdHJ1Y3QgYXRtX2RldiAqZGV2LGxvZmZfdCAqcG9zLGNoYXIgKnBhZ2UpOworCXN0cnVjdCBtb2R1bGUgKm93bmVyOworfTsKKworc3RydWN0IGF0bXBoeV9vcHMgeworCWludCAoKnN0YXJ0KShzdHJ1Y3QgYXRtX2RldiAqZGV2KTsKKwlpbnQgKCppb2N0bCkoc3RydWN0IGF0bV9kZXYgKmRldix1bnNpZ25lZCBpbnQgY21kLHZvaWQgX191c2VyICphcmcpOworCXZvaWQgKCppbnRlcnJ1cHQpKHN0cnVjdCBhdG1fZGV2ICpkZXYpOworCWludCAoKnN0b3ApKHN0cnVjdCBhdG1fZGV2ICpkZXYpOworfTsKKworc3RydWN0IGF0bV9za2JfZGF0YSB7CisJc3RydWN0IGF0bV92Y2MJKnZjYzsJCS8qIEFUTSBWQ0MgKi8KKwl1bnNpZ25lZCBsb25nCWF0bV9vcHRpb25zOwkvKiBBVE0gbGF5ZXIgb3B0aW9ucyAqLworfTsKKworI2RlZmluZSBWQ0NfSFRBQkxFX1NJWkUgMzIKKworZXh0ZXJuIHN0cnVjdCBobGlzdF9oZWFkIHZjY19oYXNoW1ZDQ19IVEFCTEVfU0laRV07CitleHRlcm4gcndsb2NrX3QgdmNjX3NrbGlzdF9sb2NrOworCisjZGVmaW5lIEFUTV9TS0Ioc2tiKSAoKChzdHJ1Y3QgYXRtX3NrYl9kYXRhICopIChza2IpLT5jYikpCisKK3N0cnVjdCBhdG1fZGV2ICphdG1fZGV2X3JlZ2lzdGVyKGNvbnN0IGNoYXIgKnR5cGUsY29uc3Qgc3RydWN0IGF0bWRldl9vcHMgKm9wcywKKyAgICBpbnQgbnVtYmVyLHVuc2lnbmVkIGxvbmcgKmZsYWdzKTsgLyogbnVtYmVyID09IC0xOiBwaWNrIGZpcnN0IGF2YWlsYWJsZSAqLworc3RydWN0IGF0bV9kZXYgKmF0bV9kZXZfbG9va3VwKGludCBudW1iZXIpOwordm9pZCBhdG1fZGV2X2RlcmVnaXN0ZXIoc3RydWN0IGF0bV9kZXYgKmRldik7Cit2b2lkIHNodXRkb3duX2F0bV9kZXYoc3RydWN0IGF0bV9kZXYgKmRldik7Cit2b2lkIHZjY19pbnNlcnRfc29ja2V0KHN0cnVjdCBzb2NrICpzayk7CisKKworLyoKKyAqIFRoaXMgaXMgYXBwcm94aW1hdGVseSB0aGUgYWxnb3JpdGhtIHVzZWQgYnkgYWxsb2Nfc2tiLgorICoKKyAqLworCitzdGF0aWMgaW5saW5lIGludCBhdG1fZ3Vlc3NfcGR1MnRydWVzaXplKGludCBzaXplKQoreworCXJldHVybiAoU0tCX0RBVEFfQUxJR04oc2l6ZSkgKyBzaXplb2Yoc3RydWN0IHNrYl9zaGFyZWRfaW5mbykpOworfQorCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdG1fZm9yY2VfY2hhcmdlKHN0cnVjdCBhdG1fdmNjICp2Y2MsaW50IHRydWVzaXplKQoreworCWF0b21pY19hZGQodHJ1ZXNpemUsICZza19hdG0odmNjKS0+c2tfcm1lbV9hbGxvYyk7Cit9CisKKworc3RhdGljIGlubGluZSB2b2lkIGF0bV9yZXR1cm4oc3RydWN0IGF0bV92Y2MgKnZjYyxpbnQgdHJ1ZXNpemUpCit7CisJYXRvbWljX3N1Yih0cnVlc2l6ZSwgJnNrX2F0bSh2Y2MpLT5za19ybWVtX2FsbG9jKTsKK30KKworCitzdGF0aWMgaW5saW5lIGludCBhdG1fbWF5X3NlbmQoc3RydWN0IGF0bV92Y2MgKnZjYyx1bnNpZ25lZCBpbnQgc2l6ZSkKK3sKKwlyZXR1cm4gKHNpemUgKyBhdG9taWNfcmVhZCgmc2tfYXRtKHZjYyktPnNrX3dtZW1fYWxsb2MpKSA8CisJICAgICAgIHNrX2F0bSh2Y2MpLT5za19zbmRidWY7Cit9CisKKworc3RhdGljIGlubGluZSB2b2lkIGF0bV9kZXZfaG9sZChzdHJ1Y3QgYXRtX2RldiAqZGV2KQoreworCWF0b21pY19pbmMoJmRldi0+cmVmY250KTsKK30KKworCitzdGF0aWMgaW5saW5lIHZvaWQgYXRtX2Rldl9wdXQoc3RydWN0IGF0bV9kZXYgKmRldikKK3sKKwlhdG9taWNfZGVjKCZkZXYtPnJlZmNudCk7CisKKwlpZiAoKGF0b21pY19yZWFkKCZkZXYtPnJlZmNudCkgPT0gMSkgJiYKKwkgICAgdGVzdF9iaXQoQVRNX0RGX0NMT1NFLCZkZXYtPmZsYWdzKSkKKwkJc2h1dGRvd25fYXRtX2RldihkZXYpOworfQorCisKK2ludCBhdG1fY2hhcmdlKHN0cnVjdCBhdG1fdmNjICp2Y2MsaW50IHRydWVzaXplKTsKK3N0cnVjdCBza19idWZmICphdG1fYWxsb2NfY2hhcmdlKHN0cnVjdCBhdG1fdmNjICp2Y2MsaW50IHBkdV9zaXplLAorICAgIGludCBnZnBfZmxhZ3MpOworaW50IGF0bV9wY3JfZ29hbChzdHJ1Y3QgYXRtX3RyYWZwcm0gKnRwKTsKKwordm9pZCB2Y2NfcmVsZWFzZV9hc3luYyhzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBpbnQgcmVwbHkpOworCitzdHJ1Y3QgYXRtX2lvY3RsIHsKKwlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKKwkvKiBBIG1vZHVsZSByZWZlcmVuY2UgaXMga2VwdCBpZiBhcHByb3ByaWF0ZSBvdmVyIHRoaXMgY2FsbC4KKwkgKiBSZXR1cm4gLUVOT0lPQ1RMQ01EIGlmIHlvdSBkb24ndCBoYW5kbGUgaXQuICovCisJaW50ICgqaW9jdGwpKHN0cnVjdCBzb2NrZXQgKiwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKK307CisKKy8qKgorICogcmVnaXN0ZXJfYXRtX2lvY3RsIC0gcmVnaXN0ZXIgaGFuZGxlciBmb3IgaW9jdGwgb3BlcmF0aW9ucworICoKKyAqIFNwZWNpYWwgKG5vbi1kZXZpY2UpIGhhbmRsZXJzIG9mIGlvY3RsJ3Mgc2hvdWxkCisgKiByZWdpc3RlciBoZXJlLiBJZiB5b3UncmUgYSBub3JtYWwgZGV2aWNlLCB5b3Ugc2hvdWxkCisgKiBzZXQgLmlvY3RsIGluIHlvdXIgYXRtZGV2X29wcyBpbnN0ZWFkLgorICovCit2b2lkIHJlZ2lzdGVyX2F0bV9pb2N0bChzdHJ1Y3QgYXRtX2lvY3RsICopOworCisvKioKKyAqIGRlcmVnaXN0ZXJfYXRtX2lvY3RsIC0gcmVtb3ZlIHRoZSBpb2N0bCBoYW5kbGVyCisgKi8KK3ZvaWQgZGVyZWdpc3Rlcl9hdG1faW9jdGwoc3RydWN0IGF0bV9pb2N0bCAqKTsKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2F0bWlvYy5oIGIvaW5jbHVkZS9saW51eC9hdG1pb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2Y2N2FhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9hdG1pb2MuaApAQCAtMCwwICsxLDQxIEBACisvKiBhdG1pb2MuaCAtIHJhbmdlcyBmb3IgQVRNLXJlbGF0ZWQgaW9jdGwgbnVtYmVycyAqLworIAorLyogV3JpdHRlbiAxOTk1LTE5OTkgYnkgV2VybmVyIEFsbWVzYmVyZ2VyLCBFUEZMIExSQy9JQ0EgKi8KKworCisvKgorICogU2VlIGh0dHA6Ly9pY2F3d3cxLmVwZmwuY2gvbGludXgtYXRtL21hZ2ljLmh0bWwgZm9yIHRoZSBjb21wbGV0ZSBsaXN0IG9mCisgKiAibWFnaWMiIGlvY3RsIG51bWJlcnMuCisgKi8KKworCisjaWZuZGVmIF9MSU5VWF9BVE1JT0NfSAorI2RlZmluZSBfTElOVVhfQVRNSU9DX0gKKworI2luY2x1ZGUgPGFzbS9pb2N0bC5oPgorCQkvKiBldmVyeWJvZHkgaW5jbHVkaW5nIGF0bWlvYy5oIHdpbGwgYWxzbyBuZWVkIF9JT3ssUixXLFdSfSAqLworCisjZGVmaW5lIEFUTUlPQ19QSFlDT00JICAweDAwIC8qIFBIWSBkZXZpY2UgY29tbW9uIGlvY3RscywgZ2xvYmFsbHkgdW5pcXVlICovCisjZGVmaW5lIEFUTUlPQ19QSFlDT01fRU5EIDB4MGYKKyNkZWZpbmUgQVRNSU9DX1BIWVRZUAkgIDB4MTAgLyogUEhZIGRldiB0eXBlIGlvY3RscywgdW5pcXVlIHBlciBQSFkgdHlwZSAqLworI2RlZmluZSBBVE1JT0NfUEhZVFlQX0VORCAweDJmCisjZGVmaW5lIEFUTUlPQ19QSFlQUlYJICAweDMwIC8qIFBIWSBkZXYgcHJpdmF0ZSBpb2N0bHMsIHVuaXF1ZSBwZXIgZHJpdmVyICovCisjZGVmaW5lIEFUTUlPQ19QSFlQUlZfRU5EIDB4NGYKKyNkZWZpbmUgQVRNSU9DX1NBUkNPTQkgIDB4NTAgLyogU0FSIGRldmljZSBjb21tb24gaW9jdGxzLCBnbG9iYWxseSB1bmlxdWUgKi8KKyNkZWZpbmUgQVRNSU9DX1NBUkNPTV9FTkQgMHg1MAorI2RlZmluZSBBVE1JT0NfU0FSUFJWCSAgMHg2MCAvKiBTQVIgZGV2IHByaXZhdGUgaW9jdGxzLCB1bmlxdWUgcGVyIGRyaXZlciAqLworI2RlZmluZSBBVE1JT0NfU0FSUFJWX0VORCAweDdmCisjZGVmaW5lIEFUTUlPQ19JVEYJICAweDgwIC8qIEludGVyZmFjZSBpb2N0bHMsIGdsb2JhbGx5IHVuaXF1ZSAqLworI2RlZmluZSBBVE1JT0NfSVRGX0VORAkgIDB4OGYKKyNkZWZpbmUgQVRNSU9DX0JBQ0tFTkQJICAweDkwIC8qIEFUTSBnZW5lcmljIGJhY2tlbmQgaW9jdGxzLCB1LiBwZXIgYmFja2VuZCAqLworI2RlZmluZSBBVE1JT0NfQkFDS0VORF9FTkQgMHhhZgorLyogMHhiMC0weGJmOiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqLworI2RlZmluZSBBVE1JT0NfQVJFUVVJUEEJICAweGMwIC8qIEFwcGxpY2F0aW9uIHJlcXVlc3RlZCBJUCBvdmVyIEFUTSwgZ2xvYi4gdS4gKi8KKyNkZWZpbmUgQVRNSU9DX0xBTkUJICAweGQwIC8qIExBTiBFbXVsYXRpb24sIGdsb2JhbGx5IHVuaXF1ZSAqLworI2RlZmluZSBBVE1JT0NfTVBPQSAgICAgICAweGQ4IC8qIE1QT0EsIGdsb2JhbGx5IHVuaXF1ZSAqLworI2RlZmluZQlBVE1JT0NfQ0xJUAkgIDB4ZTAgLyogQ2xhc3NpY2FsIElQIG92ZXIgQVRNIGNvbnRyb2wsIGdsb2JhbGx5IHUuICovCisjZGVmaW5lCUFUTUlPQ19DTElQX0VORAkgIDB4ZWYKKyNkZWZpbmUJQVRNSU9DX1NQRUNJQUwJICAweGYwIC8qIFNwZWNpYWwtcHVycG9zZSBjb250cm9scywgZ2xvYmFsbHkgdW5pcXVlICovCisjZGVmaW5lCUFUTUlPQ19TUEVDSUFMX0VORCAweGZmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hdG1sZWMuaCBiL2luY2x1ZGUvbGludXgvYXRtbGVjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI2N2YyNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvYXRtbGVjLmgKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIAorICogQVRNIExhbiBFbXVsYXRpb24gRGFlbW9uIHZzLiBkcml2ZXIgaW50ZXJmYWNlCisgKgorICogbWtpaXNraWxhQHlhaG9vLmNvbQorICoKKyAqLworCisjaWZuZGVmIF9BVE1MRUNfSF8KKyNkZWZpbmUgX0FUTUxFQ19IXworCisjaW5jbHVkZSA8bGludXgvYXRtYXBpLmg+CisjaW5jbHVkZSA8bGludXgvYXRtaW9jLmg+CisjaW5jbHVkZSA8bGludXgvYXRtLmg+CisjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KKy8qIEFUTSBsZWMgZGFlbW9uIGNvbnRyb2wgc29ja2V0ICovCisjZGVmaW5lIEFUTUxFQ19DVFJMIF9JTygnYScsQVRNSU9DX0xBTkUpCisjZGVmaW5lIEFUTUxFQ19EQVRBIF9JTygnYScsQVRNSU9DX0xBTkUrMSkKKyNkZWZpbmUgQVRNTEVDX01DQVNUIF9JTygnYScsQVRNSU9DX0xBTkUrMikKKworLyogTWF4aW11bSBudW1iZXIgb2YgTEVDIGludGVyZmFjZXMgKHR3ZWFrYWJsZSkgKi8KKyNkZWZpbmUgTUFYX0xFQ19JVEYgNDgKKworLyogRnJvbSB0aGUgdG90YWwgb2YgTUFYX0xFQ19JVEYsIGxhc3QgTlVNX1RSX0RFVlMgYXJlIHJlc2VydmVkIGZvciBUb2tlbiBSaW5nLgorICogRS5nLiBpZiBNQVhfTEVDX0lURiA9IDQ4IGFuZCBOVU1fVFJfREVWUyA9IDgsIHRoZW4gbGVjMC1sZWMzOSBhcmUgZm9yCisgKiBFdGhlcm5ldCBFTEFOcyBhbmQgbGVjNDAtbGVjNDcgYXJlIGZvciBUb2tlbiBSaW5nIEVMQU5TLgorICovCisjZGVmaW5lIE5VTV9UUl9ERVZTIDgKKwordHlwZWRlZiBlbnVtIHsgCisgICAgICAgIGxfc2V0X21hY19hZGRyLCAgIGxfZGVsX21hY19hZGRyLCAKKyAgICAgICAgbF9zdmNfc2V0dXAsIAorICAgICAgICBsX2FkZHJfZGVsZXRlLCAgICBsX3RvcG9sb2d5X2NoYW5nZSwgCisgICAgICAgIGxfZmx1c2hfY29tcGxldGUsIGxfYXJwX3VwZGF0ZSwKKyAgICAgICAgbF9uYXJwX3JlcSwgLyogTEFORTIgbWFuZGF0ZXMgdGhlIHVzZSBvZiB0aGlzICovCisgICAgICAgIGxfY29uZmlnLCAgICAgICAgIGxfZmx1c2hfdHJhbl9pZCwgCisgICAgICAgIGxfc2V0X2xlY2lkLCAgICAgIGxfYXJwX3htdCwKKyAgICAgICAgbF9yZGVzY19hcnBfeG10LAorICAgICAgICBsX2Fzc29jaWF0ZV9yZXEsCisgICAgICAgIGxfc2hvdWxkX2JyaWRnZSAgIC8qIHNob3VsZCB3ZSBicmlkZ2UgdGhpcyBNQUM/ICovCit9IGF0bWxlY19tc2dfdHlwZTsKKworI2RlZmluZSBBVE1MRUNfTVNHX1RZUEVfTUFYIGxfc2hvdWxkX2JyaWRnZQorCitzdHJ1Y3QgYXRtbGVjX2NvbmZpZ19tc2cgeworICAgICAgICB1bnNpZ25lZCBpbnQgbWF4aW11bV91bmtub3duX2ZyYW1lX2NvdW50OworICAgICAgICB1bnNpZ25lZCBpbnQgbWF4X3Vua25vd25fZnJhbWVfdGltZTsKKyAgICAgICAgdW5zaWduZWQgc2hvcnQgbWF4X3JldHJ5X2NvdW50OworICAgICAgICB1bnNpZ25lZCBpbnQgYWdpbmdfdGltZTsKKyAgICAgICAgdW5zaWduZWQgaW50IGZvcndhcmRfZGVsYXlfdGltZTsKKyAgICAgICAgdW5zaWduZWQgaW50IGFycF9yZXNwb25zZV90aW1lOworICAgICAgICB1bnNpZ25lZCBpbnQgZmx1c2hfdGltZW91dDsKKyAgICAgICAgdW5zaWduZWQgaW50IHBhdGhfc3dpdGNoaW5nX2RlbGF5OworICAgICAgICB1bnNpZ25lZCBpbnQgIGxhbmVfdmVyc2lvbjsgLyogTEFORTI6IDEgZm9yIExBTkV2MSwgMiBmb3IgTEFORXYyICovCisgICAgICAgIGludCBtdHU7CisgICAgICAgIGludCBpc19wcm94eTsKK307CisgCitzdHJ1Y3QgYXRtbGVjX21zZyB7CisgICAgICAgIGF0bWxlY19tc2dfdHlwZSB0eXBlOworICAgICAgICBpbnQgICAgICAgICAgICAgc2l6ZW9mdGx2czsgICAgICAgIC8qIExBTkUyOiBpZiAhPSAwLCB0bHZzIGZvbGxvdyAqLyAKKyAgICAgICAgdW5pb24geworICAgICAgICAgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIG1hY19hZGRyW0VUSF9BTEVOXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYXRtX2FkZHJbQVRNX0VTQV9MRU5dOworICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWc7LyogVG9wb2xvZ3lfY2hhbmdlIGZsYWcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW90ZWZsYWcsIHBlcm1hbmVudCBmbGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlY2lkLCB0cmFuc2FjdGlvbiBpZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHRhcmdldGxlc3NfbGVfYXJwOyAvKiBMQU5FMiAqLworICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG5vX3NvdXJjZV9sZV9uYXJwOyAvKiBMQU5FMiAqLworICAgICAgICAgICAgICAgIH0gbm9ybWFsOworICAgICAgICAgICAgICAgIHN0cnVjdCBhdG1sZWNfY29uZmlnX21zZyBjb25maWc7CisgICAgICAgICAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGxlY19pZDsgICAgICAgICAgICAgICAgICAgICAvKiByZXF1ZXN0b3IgbGVjX2lkICAqLworICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdHJhbl9pZDsgICAgICAgICAgICAgICAgICAgIC8qIHRyYW5zYWN0aW9uIGlkICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIG1hY19hZGRyW0VUSF9BTEVOXTsgICAgLyogZHN0IG1hYyBhZGRyICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYXRtX2FkZHJbQVRNX0VTQV9MRU5dOyAvKiByZXFlc3RvciBBVE0gYWRkciAqLworICAgICAgICAgICAgICAgIH0gcHJveHk7CisJCSAgICAgLyogRm9yIG1hcHBpbmcgTEVfQVJQIHJlcXVlc3RzIHRvIHJlc3BvbnNlcy4gRmlsbGVkIGJ5ICovCisgICAgICAgIH0gY29udGVudDsgICAgICAgLyogemVwcGVsaW4sIHJldHVybmVkIGJ5IGtlcm5lbC4gVXNlZCBvbmx5IHdoZW4gcHJveHlpbmcgKi8gCit9IF9fQVRNX0FQSV9BTElHTjsKKworc3RydWN0IGF0bWxlY19pb2MgeworICAgICAgICBpbnQgZGV2X251bTsKKyAgICAgICAgdW5zaWduZWQgY2hhciBhdG1fYWRkcltBVE1fRVNBX0xFTl07CisgICAgICAgIHVuc2lnbmVkIGNoYXIgcmVjZWl2ZTsgICAgLyogMT0gcmVjZWl2ZSB2Y2MsIDAgPSBzZW5kIHZjYyAqLworfTsKKyNlbmRpZiAvKiBfQVRNTEVDX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2F0bW1wYy5oIGIvaW5jbHVkZS9saW51eC9hdG1tcGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmJmYTY4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9hdG1tcGMuaApAQCAtMCwwICsxLDEyNSBAQAorI2lmbmRlZiBfQVRNTVBDX0hfCisjZGVmaW5lIF9BVE1NUENfSF8KKworI2luY2x1ZGUgPGxpbnV4L2F0bWFwaS5oPgorI2luY2x1ZGUgPGxpbnV4L2F0bWlvYy5oPgorI2luY2x1ZGUgPGxpbnV4L2F0bS5oPgorCisjZGVmaW5lIEFUTU1QQ19DVFJMIF9JTygnYScsIEFUTUlPQ19NUE9BKQorI2RlZmluZSBBVE1NUENfREFUQSBfSU8oJ2EnLCBBVE1JT0NfTVBPQSsxKQorCisjZGVmaW5lIE1QQ19TT0NLRVRfSU5HUkVTUyAxCisjZGVmaW5lIE1QQ19TT0NLRVRfRUdSRVNTICAyCisKK3N0cnVjdCBhdG1tcGNfaW9jIHsKKyAgICAgICAgaW50IGRldl9udW07CisgICAgICAgIHVpbnQzMl90IGlwYWRkcjsgICAgICAgICAgICAgIC8qIHRoZSBJUCBhZGRyZXNzIG9mIHRoZSBzaG9ydGN1dCAgICAqLworICAgICAgICBpbnQgdHlwZTsgICAgICAgICAgICAgICAgICAgICAvKiBpbmdyZXNzIG9yIGVncmVzcyAgICAgICAgICAgICAgICAgKi8KK307CisKK3R5cGVkZWYgc3RydWN0IGluX2N0cmxfaW5mbyB7CisgICAgICAgIHVpbnQ4X3QgICBMYXN0X05IUlBfQ0lFX2NvZGU7CisgICAgICAgIHVpbnQ4X3QgICBMYXN0X1EyOTMxX2NhdXNlX3ZhbHVlOyAgICAgCisgICAgICAgIHVpbnQ4X3QgICBlZ19NUENfQVRNX2FkZHJbQVRNX0VTQV9MRU5dOworICAgICAgICB1aW50MzJfdCAgdGFnOworICAgICAgICB1aW50MzJfdCAgaW5fZHN0X2lwOyAgICAgIC8qIElQIGFkZHJlc3MgdGhpcyBpbmdyZXNzIE1QQyBzZW5kcyBwYWNrZXRzIHRvICovCisgICAgICAgIHVpbnQxNl90ICBob2xkaW5nX3RpbWU7CisgICAgICAgIHVpbnQzMl90ICByZXF1ZXN0X2lkOworfSBpbl9jdHJsX2luZm87CisKK3R5cGVkZWYgc3RydWN0IGVnX2N0cmxfaW5mbyB7CisgICAgICAgIHVpbnQ4X3QgICBETExfaGVhZGVyWzI1Nl07CisgICAgICAgIHVpbnQ4X3QgICBESF9sZW5ndGg7CisgICAgICAgIHVpbnQzMl90ICBjYWNoZV9pZDsKKyAgICAgICAgdWludDMyX3QgIHRhZzsKKyAgICAgICAgdWludDMyX3QgIG1wc19pcDsKKyAgICAgICAgdWludDMyX3QgIGVnX2RzdF9pcDsgICAgICAvKiBJUCBhZGRyZXNzIHRvIHdoaWNoIGluZ3Jlc3MgTVBDIHNlbmRzIHBhY2tldHMgKi8KKyAgICAgICAgdWludDhfdCAgIGluX01QQ19kYXRhX0FUTV9hZGRyW0FUTV9FU0FfTEVOXTsKKyAgICAgICAgdWludDE2X3QgIGhvbGRpbmdfdGltZTsKK30gZWdfY3RybF9pbmZvOworCitzdHJ1Y3QgbXBjX3BhcmFtZXRlcnMgeworICAgICAgICB1aW50MTZfdCBtcGNfcDE7ICAgLyogU2hvcnRjdXQtU2V0dXAgRnJhbWUgQ291bnQgICAgKi8KKyAgICAgICAgdWludDE2X3QgbXBjX3AyOyAgIC8qIFNob3J0Y3V0LVNldHVwIEZyYW1lIFRpbWUgICAgICovCisgICAgICAgIHVpbnQ4X3QgbXBjX3AzWzhdOyAvKiBGbG93LWRldGVjdGlvbiBQcm90b2NvbHMgICAgICAqLworICAgICAgICB1aW50MTZfdCBtcGNfcDQ7ICAgLyogTVBDIEluaXRpYWwgUmV0cnkgVGltZSAgICAgICAgKi8KKyAgICAgICAgdWludDE2X3QgbXBjX3A1OyAgIC8qIE1QQyBSZXRyeSBUaW1lIE1heGltdW0gICAgICAgICovCisgICAgICAgIHVpbnQxNl90IG1wY19wNjsgICAvKiBIb2xkIERvd24gVGltZSAgICAgICAgICAgICAgICAqLyAgICAgIAorfSA7CisKK3N0cnVjdCBrX21lc3NhZ2UgeworICAgICAgICB1aW50MTZfdCB0eXBlOworICAgICAgICB1aW50MzJfdCBpcF9tYXNrOworICAgICAgICB1aW50OF90ICBNUFNfY3RybFtBVE1fRVNBX0xFTl07CisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgICAgICBpbl9jdHJsX2luZm8gaW5faW5mbzsKKyAgICAgICAgICAgICAgICBlZ19jdHJsX2luZm8gZWdfaW5mbzsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgbXBjX3BhcmFtZXRlcnMgcGFyYW1zOworICAgICAgICB9IGNvbnRlbnQ7CisgICAgICAgIHN0cnVjdCBhdG1fcW9zIHFvczsgICAgICAgCit9IF9fQVRNX0FQSV9BTElHTjsKKworc3RydWN0IGxsY19zbmFwX2hkciB7CisJLyogUkZDIDE0ODMgTExDL1NOQVAgZW5jYXBzdWxhdGlvbiBmb3Igcm91dGVkIElQIFBEVXMgKi8KKyAgICAgICAgdWludDhfdCAgZHNhcDsgICAgLyogRGVzdGluYXRpb24gU2VydmljZSBBY2Nlc3MgUG9pbnQgKDB4QUEpICAgICAqLworICAgICAgICB1aW50OF90ICBzc2FwOyAgICAvKiBTb3VyY2UgU2VydmljZSBBY2Nlc3MgUG9pbnQgICAgICAoMHhBQSkgICAgICovCisgICAgICAgIHVpbnQ4X3QgIHVpOyAgICAgIC8qIFVubnVtYmVyZWQgSW5mb3JtYXRpb24gICAgICAgICAgICgweDAzKSAgICAgKi8KKyAgICAgICAgdWludDhfdCAgb3JnWzNdOyAgLyogT3JnYW5pemF0aW9uYWwgaWRlbnRpZmljYXRpb24gICAgKDB4MDAwMDAwKSAqLworICAgICAgICB1aW50OF90ICB0eXBlWzJdOyAvKiBFdGhlciB0eXBlIChmb3IgSVApICAgICAgICAgICAgICAoMHgwODAwKSAgICovCit9OworCisvKiBUTFZzIHRoaXMgTVBDIHJlY29nbml6ZXMgKi8KKyNkZWZpbmUgVExWX01QT0FfREVWSUNFX1RZUEUgICAgICAgICAweDAwYTAzZTJhICAKKworLyogTVBPQSBkZXZpY2UgdHlwZXMgaW4gTVBPQSBEZXZpY2UgVHlwZSBUTFYgKi8KKyNkZWZpbmUgTk9OX01QT0EgICAgMAorI2RlZmluZSBNUFMgICAgICAgICAxCisjZGVmaW5lIE1QQyAgICAgICAgIDIKKyNkZWZpbmUgTVBTX0FORF9NUEMgMworCisKKy8qIE1QQyBwYXJhbWV0ZXIgZGVmYXVsdHMgKi8KKworI2RlZmluZSBNUENfUDEgMTAgIC8qIFNob3J0Y3V0LVNldHVwIEZyYW1lIENvdW50ICAqLyAKKyNkZWZpbmUgTVBDX1AyIDEgICAvKiBTaG9ydGN1dC1TZXR1cCBGcmFtZSBUaW1lICAgKi8KKyNkZWZpbmUgTVBDX1AzIDAgICAvKiBGbG93LWRldGVjdGlvbiBQcm90b2NvbHMgICAgKi8KKyNkZWZpbmUgTVBDX1A0IDUgICAvKiBNUEMgSW5pdGlhbCBSZXRyeSBUaW1lICAgICAgKi8KKyNkZWZpbmUgTVBDX1A1IDQwICAvKiBNUEMgUmV0cnkgVGltZSBNYXhpbXVtICAgICAgKi8KKyNkZWZpbmUgTVBDX1A2IDE2MCAvKiBIb2xkIERvd24gVGltZSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSE9MRElOR19USU1FX0RFRkFVTFQgMTIwMCAvKiBzYW1lIGFzIE1QUy1wNyAqLworCisvKiBNUEMgY29uc3RhbnRzICovCisKKyNkZWZpbmUgTVBDX0MxIDIgICAvKiBSZXRyeSBUaW1lIE11bHRpcGxpZXIgICAgICAgKi8KKyNkZWZpbmUgTVBDX0MyIDYwICAvKiBJbml0aWFsIEtlZXAtQWxpdmUgTGlmZXRpbWUgKi8KKworLyogTWVzc2FnZSB0eXBlcyAtIHRvIE1QT0EgZGFlbW9uICovCisKKyNkZWZpbmUgU05EX01QT0FfUkVTX1JRU1QgICAgMjAxCisjZGVmaW5lIFNFVF9NUFNfQ1RSTF9BRERSICAgIDIwMgorI2RlZmluZSBTTkRfTVBPQV9SRVNfUlRSWSAgICAyMDMgLyogRGlmZmVyZW50IHR5cGUgaW4gYSByZXRyeSBkdWUgdG8gcmVxIGlkICAgICAgICAgKi8KKyNkZWZpbmUgU1RPUF9LRUVQX0FMSVZFX1NNICAgMjA0CisjZGVmaW5lIEVHUkVTU19FTlRSWV9SRU1PVkVEIDIwNQorI2RlZmluZSBTTkRfRUdSRVNTX1BVUkdFICAgICAyMDYKKyNkZWZpbmUgRElFICAgICAgICAgICAgICAgICAgMjA3IC8qIHRlbGwgdGhlIGRhZW1vbiB0byBleGl0KCkgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERBVEFfUExBTkVfUFVSR0UgICAgIDIwOCAvKiBEYXRhIHBsYW5lIHB1cmdlIGJlY2F1c2Ugb2YgZWdyZXNzIGNhY2hlIGhpdCBtaXNzIG9yIGRlYWQgTVBTICovCisjZGVmaW5lIE9QRU5fSU5HUkVTU19TVkMgICAgIDIwOQorCisvKiBNZXNzYWdlIHR5cGVzIC0gZnJvbSBNUE9BIGRhZW1vbiAqLworCisjZGVmaW5lIE1QT0FfVFJJR0dFUl9SQ1ZEICAgICAxMDEKKyNkZWZpbmUgTVBPQV9SRVNfUkVQTFlfUkNWRCAgIDEwMgorI2RlZmluZSBJTkdSRVNTX1BVUkdFX1JDVkQgICAgMTAzCisjZGVmaW5lIEVHUkVTU19QVVJHRV9SQ1ZEICAgICAxMDQKKyNkZWZpbmUgTVBTX0RFQVRIICAgICAgICAgICAgIDEwNQorI2RlZmluZSBDQUNIRV9JTVBPU19SQ1ZEICAgICAgMTA2CisjZGVmaW5lIFNFVF9NUENfQ1RSTF9BRERSICAgICAxMDcgLyogT3VyIE1QQydzIGNvbnRyb2wgQVRNIGFkZHJlc3MgICAqLworI2RlZmluZSBTRVRfTVBTX01BQ19BRERSICAgICAgMTA4CisjZGVmaW5lIENMRUFOX1VQX0FORF9FWElUICAgICAxMDkKKyNkZWZpbmUgU0VUX01QQ19QQVJBTVMgICAgICAgIDExMCAvKiBNUEMgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzICAgICovCisKKy8qIE1lc3NhZ2UgdHlwZXMgLSBiaWRpcmVjdGlvbmFsICovICAgICAgIAorCisjZGVmaW5lIFJFTE9BRCAgICAgICAgICAgICAgICAzMDEgLyoga2lsbCAtSFVQIHRoZSBkYWVtb24gZm9yIHJlbG9hZCAqLworCisjZW5kaWYgLyogX0FUTU1QQ19IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hdG1wcHAuaCBiL2luY2x1ZGUvbGludXgvYXRtcHBwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzAwZGNjZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvYXRtcHBwLmgKQEAgLTAsMCArMSwyNCBAQAorLyogYXRtcHBwLmggLSBSRkMyMzY0IFBQUG9BVE0gKi8KKworLyogV3JpdHRlbiAyMDAwIGJ5IE1pdGNoZWxsIEJsYW5rIEpyICovCisKKyNpZm5kZWYgX0xJTlVYX0FUTVBQUF9ICisjZGVmaW5lIF9MSU5VWF9BVE1QUFBfSAorCisjaW5jbHVkZSA8bGludXgvYXRtLmg+CisKKyNkZWZpbmUgUFBQT0FUTV9FTkNBUFNfQVVUT0RFVEVDVAkoMCkKKyNkZWZpbmUgUFBQT0FUTV9FTkNBUFNfVkMJCSgxKQorI2RlZmluZSBQUFBPQVRNX0VOQ0FQU19MTEMJCSgyKQorCisvKgorICogVGhpcyBpcyBmb3IgdGhlIEFUTV9TRVRCQUNLRU5EIGNhbGwgLSB0aGVzZSBhcmUgbGlrZSBzb2NrZXQgZmFtaWxpZXM6CisgKiB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgc3RydWN0dXJlIGlzIHRoZSBiYWNrZW5kIG51bWJlciBhbmQgdGhlIHJlc3QKKyAqIGlzIHBlci1iYWNrZW5kIHNwZWNpZmljCisgKi8KK3N0cnVjdCBhdG1fYmFja2VuZF9wcHAgeworCWF0bV9iYWNrZW5kX3QJYmFja2VuZF9udW07CS8qIEFUTV9CQUNLRU5EX1BQUCAqLworCWludAkJZW5jYXBzOwkJLyogUFBQT0FUTV9FTkNBUFNfKiAqLworfTsKKworI2VuZGlmCS8qIF9MSU5VWF9BVE1QUFBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hdG1zYXAuaCBiL2luY2x1ZGUvbGludXgvYXRtc2FwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk5YjEwNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvYXRtc2FwLmgKQEAgLTAsMCArMSwxNjIgQEAKKy8qIGF0bXNhcC5oIC0gQVRNIFNlcnZpY2UgQWNjZXNzIFBvaW50IGFkZHJlc3NpbmcgZGVmaW5pdGlvbnMgKi8KKworLyogV3JpdHRlbiAxOTk1LTE5OTkgYnkgV2VybmVyIEFsbWVzYmVyZ2VyLCBFUEZMIExSQy9JQ0EgKi8KKworCisjaWZuZGVmIF9MSU5VWF9BVE1TQVBfSAorI2RlZmluZSBfTElOVVhfQVRNU0FQX0gKKworI2luY2x1ZGUgPGxpbnV4L2F0bWFwaS5oPgorCisvKgorICogQkVHSU5feHggYW5kIEVORF94eCBtYXJrZXJzIGFyZSB1c2VkIGZvciBhdXRvbWF0aWMgZ2VuZXJhdGlvbiBvZgorICogZG9jdW1lbnRhdGlvbi4gRG8gbm90IGNoYW5nZSB0aGVtLgorICovCisKKworLyoKKyAqIExheWVyIDIgcHJvdG9jb2wgaWRlbnRpZmllcnMKKyAqLworCisvKiBCRUdJTl9MMiAqLworI2RlZmluZSBBVE1fTDJfTk9ORQkwCS8qIEwyIG5vdCBzcGVjaWZpZWQgKi8KKyNkZWZpbmUgQVRNX0wyX0lTTzE3NDUgIDB4MDEJLyogQmFzaWMgbW9kZSBJU08gMTc0NSAqLworI2RlZmluZSBBVE1fTDJfUTI5MQkweDAyCS8qIElUVS1UIFEuMjkxIChSZWMuIEkuNDQxKSAqLworI2RlZmluZSBBVE1fTDJfWDI1X0xMCTB4MDYJLyogSVRVLVQgWC4yNSwgbGluayBsYXllciAqLworI2RlZmluZSBBVE1fTDJfWDI1X01MCTB4MDcJLyogSVRVLVQgWC4yNSwgbXVsdGlsaW5rICovCisjZGVmaW5lIEFUTV9MMl9MQVBCCTB4MDgJLyogRXh0ZW5kZWQgTEFQQiwgaGFsZi1kdXBsZXggKFJlYy4gVC43MSkgKi8KKyNkZWZpbmUgQVRNX0wyX0hETENfQVJNCTB4MDkJLyogSERMQyBBUk0gKElTTy9JRUMgNDMzNSkgKi8KKyNkZWZpbmUgQVRNX0wyX0hETENfTlJNCTB4MGEJLyogSERMQyBOUk0gKElTTy9JRUMgNDMzNSkgKi8KKyNkZWZpbmUgQVRNX0wyX0hETENfQUJNCTB4MGIJLyogSERMQyBBQk0gKElTTy9JRUMgNDMzNSkgKi8KKyNkZWZpbmUgQVRNX0wyX0lTTzg4MDIJMHgwYwkvKiBMQU4gTExDIChJU08vSUVDIDg4MDIvMikgKi8KKyNkZWZpbmUgQVRNX0wyX1g3NQkweDBkCS8qIElUVS1UIFguNzUsIFNMUCAqLworI2RlZmluZSBBVE1fTDJfUTkyMgkweDBlCS8qIElUVS1UIFEuOTIyICovCisjZGVmaW5lIEFUTV9MMl9VU0VSCTB4MTAJLyogdXNlci1zcGVjaWZpZWQgKi8KKyNkZWZpbmUgQVRNX0wyX0lTTzc3NzYJMHgxMQkvKiBJU08gNzc3NiBEVEUtRFRFICovCisvKiBFTkRfTDIgKi8KKworCisvKgorICogTGF5ZXIgMyBwcm90b2NvbCBpZGVudGlmaWVycworICovCisKKy8qIEJFR0lOX0wzICovCisjZGVmaW5lIEFUTV9MM19OT05FCTAJLyogTDMgbm90IHNwZWNpZmllZCAqLworI2RlZmluZSBBVE1fTDNfWDI1CTB4MDYJLyogSVRVLVQgWC4yNSwgcGFja2V0IGxheWVyICovCisjZGVmaW5lIEFUTV9MM19JU084MjA4CTB4MDcJLyogSVNPL0lFQyA4MjA4ICovCisjZGVmaW5lIEFUTV9MM19YMjIzCTB4MDgJLyogSVRVLVQgWC4yMjMgfCBJU08vSUVDIDg4NzggKi8KKyNkZWZpbmUgQVRNX0wzX0lTTzg0NzMJMHgwOQkvKiBJVFUtVCBYLjIzMyB8IElTTy9JRUMgODQ3MyAqLworI2RlZmluZSBBVE1fTDNfVDcwCTB4MGEJLyogSVRVLVQgVC43MCBtaW5pbXVtIG5ldHdvcmsgbGF5ZXIgKi8KKyNkZWZpbmUgQVRNX0wzX1RSOTU3NwkweDBiCS8qIElTTy9JRUMgVFIgOTU3NyAqLworI2RlZmluZSBBVE1fTDNfSDMxMAkweDBjCS8qIElUVS1UIFJlY29tbWVuZGF0aW9uIEguMzEwICovCisjZGVmaW5lIEFUTV9MM19IMzIxCTB4MGQJLyogSVRVLVQgUmVjb21tZW5kYXRpb24gSC4zMjEgKi8KKyNkZWZpbmUgQVRNX0wzX1VTRVIJMHgxMAkvKiB1c2VyLXNwZWNpZmllZCAqLworLyogRU5EX0wzICovCisKKworLyoKKyAqIEhpZ2ggbGF5ZXIgaWRlbnRpZmllcnMKKyAqLworCisvKiBCRUdJTl9ITCAqLworI2RlZmluZSBBVE1fSExfTk9ORQkwCS8qIEhMIG5vdCBzcGVjaWZpZWQgKi8KKyNkZWZpbmUgQVRNX0hMX0lTTwkweDAxCS8qIElTTyAqLworI2RlZmluZSBBVE1fSExfVVNFUgkweDAyCS8qIHVzZXItc3BlY2lmaWMgKi8KKyNkZWZpbmUgQVRNX0hMX0hMUAkweDAzCS8qIGhpZ2ggbGF5ZXIgcHJvZmlsZSAtIFVOSSAzLjAgb25seSAqLworI2RlZmluZSBBVE1fSExfVkVORE9SCTB4MDQJLyogdmVuZG9yLXNwZWNpZmljIGFwcGxpY2F0aW9uIGlkZW50aWZpZXIgKi8KKy8qIEVORF9ITCAqLworCisKKy8qCisgKiBJVFUtVCBjb2RlZCBtb2RlIG9mIG9wZXJhdGlvbgorICovCisKKy8qIEJFR0lOX0lNRCAqLworI2RlZmluZSBBVE1fSU1EX05PTkUJIDAJLyogbW9kZSBub3Qgc3BlY2lmaWVkICovCisjZGVmaW5lIEFUTV9JTURfTk9STUFMCSAxCS8qIG5vcm1hbCBtb2RlIG9mIG9wZXJhdGlvbiAqLworI2RlZmluZSBBVE1fSU1EX0VYVEVOREVEIDIJLyogZXh0ZW5kZWQgbW9kZSBvZiBvcGVyYXRpb24gKi8KKy8qIEVORF9JTUQgKi8KKworLyoKKyAqIEguMzEwIGNvZGUgcG9pbnRzCisgKi8KKworI2RlZmluZSBBVE1fVFRfTk9ORQkwCS8qIHRlcm1pbmFsIHR5cGUgbm90IHNwZWNpZmllZCAqLworI2RlZmluZSBBVE1fVFRfUlgJMQkvKiByZWNlaXZlIG9ubHkgKi8KKyNkZWZpbmUgQVRNX1RUX1RYCTIJLyogc2VuZCBvbmx5ICovCisjZGVmaW5lIEFUTV9UVF9SWFRYCTMJLyogcmVjZWl2ZSBhbmQgc2VuZCAqLworCisjZGVmaW5lIEFUTV9NQ19OT05FCTAJLyogbm8gbXVsdGlwbGV4aW5nICovCisjZGVmaW5lIEFUTV9NQ19UUwkxCS8qIHRyYW5zcG9ydCBzdHJlYW0gKFRTKSAqLworI2RlZmluZSBBVE1fTUNfVFNfRkVDCTIJLyogdHJhbnNwb3J0IHN0cmVhbSB3aXRoIGZvcndhcmQgZXJyb3IgY29yci4gKi8KKyNkZWZpbmUgQVRNX01DX1BTCTMJLyogcHJvZ3JhbSBzdHJlYW0gKFBTKSAqLworI2RlZmluZSBBVE1fTUNfUFNfRkVDCTQJLyogcHJvZ3JhbSBzdHJlYW0gd2l0aCBmb3J3YXJkIGVycm9yIGNvcnIuICovCisjZGVmaW5lIEFUTV9NQ19IMjIxCTUJLyogSVRVLVQgUmVjLiBILjIyMSAqLworCisvKgorICogU0FQIHN0cnVjdHVyZXMKKyAqLworCisjZGVmaW5lIEFUTV9NQVhfSExJCTgJLyogbWF4aW11bSBoaWdoLWxheWVyIGluZm9ybWF0aW9uIGxlbmd0aCAqLworCisKK3N0cnVjdCBhdG1fYmxsaSB7CisgICAgdW5zaWduZWQgY2hhciBsMl9wcm90bzsJLyogbGF5ZXIgMiBwcm90b2NvbCAqLworICAgIHVuaW9uIHsKKwlzdHJ1Y3QgeworCSAgICB1bnNpZ25lZCBjaGFyIG1vZGU7CS8qIG1vZGUgb2Ygb3BlcmF0aW9uIChBVE1fSU1EX3h4eCksIDAgaWYgKi8KKwkJCQkvKiBhYnNlbnQgKi8KKwkgICAgdW5zaWduZWQgY2hhciB3aW5kb3c7IC8qIHdpbmRvdyBzaXplIChrKSwgMS0xMjcgKDAgdG8gb21pdCkgKi8KKwl9IGl0dTsJCQkvKiBJVFUtVCBlbmNvZGluZyAqLworCXVuc2lnbmVkIGNoYXIgdXNlcjsJLyogdXNlci1zcGVjaWZpZWQgbDIgaW5mb3JtYXRpb24gKi8KKyAgICB9IGwyOworICAgIHVuc2lnbmVkIGNoYXIgbDNfcHJvdG87CS8qIGxheWVyIDMgcHJvdG9jb2wgKi8KKyAgICB1bmlvbiB7CisJc3RydWN0IHsKKwkgICAgdW5zaWduZWQgY2hhciBtb2RlOwkvKiBtb2RlIG9mIG9wZXJhdGlvbiAoQVRNX0lNRF94eHgpLCAwIGlmICovCisJCQkJLyogYWJzZW50ICovCisJICAgIHVuc2lnbmVkIGNoYXIgZGVmX3NpemU7IC8qIGRlZmF1bHQgcGFja2V0IHNpemUgKGxvZzIpLCA0LTEyICgwIHRvICovCisJCQkJICAgIC8qIG9taXQpICovCisJICAgIHVuc2lnbmVkIGNoYXIgd2luZG93Oy8qIHBhY2tldCB3aW5kb3cgc2l6ZSwgMS0xMjcgKDAgdG8gb21pdCkgKi8KKwl9IGl0dTsJCQkvKiBJVFUtVCBlbmNvZGluZyAqLworCXVuc2lnbmVkIGNoYXIgdXNlcjsJLyogdXNlciBzcGVjaWZpZWQgbDMgaW5mb3JtYXRpb24gKi8KKwlzdHJ1Y3QgewkJICAgICAgLyogaWYgbDNfcHJvdG8gPSBBVE1fTDNfSDMxMCAqLworCSAgICB1bnNpZ25lZCBjaGFyIHRlcm1fdHlwZTsgIC8qIHRlcm1pbmFsIHR5cGUgKi8KKwkgICAgdW5zaWduZWQgY2hhciBmd19tcHhfY2FwOyAvKiBmb3J3YXJkIG11bHRpcGxleGluZyBjYXBhYmlsaXR5ICovCisJCQkJICAgICAgLyogb25seSBpZiB0ZXJtX3R5cGUgIT0gQVRNX1RUX05PTkUgKi8KKwkgICAgdW5zaWduZWQgY2hhciBid19tcHhfY2FwOyAvKiBiYWNrd2FyZCBtdWx0aXBsZXhpbmcgY2FwYWJpbGl0eSAqLworCQkJCSAgICAgIC8qIG9ubHkgaWYgdGVybV90eXBlICE9IEFUTV9UVF9OT05FICovCisJfSBoMzEwOworCXN0cnVjdCB7CQkgIC8qIGlmIGwzX3Byb3RvID0gQVRNX0wzX1RSOTU3NyAqLworCSAgICB1bnNpZ25lZCBjaGFyIGlwaTsJICAvKiBpbml0aWFsIHByb3RvY29sIGlkICovCisJICAgIHVuc2lnbmVkIGNoYXIgc25hcFs1XTsvKiBJRUVFIDgwMi4xIFNOQVAgaWRlbnRpZmllciAqLworCQkJCSAgLyogKG9ubHkgaWYgaXBpID09IE5MUElEX0lFRUU4MDJfMV9TTkFQKSAqLworCX0gdHI5NTc3OworICAgIH0gbDM7Cit9IF9fQVRNX0FQSV9BTElHTjsKKworCitzdHJ1Y3QgYXRtX2JobGkgeworICAgIHVuc2lnbmVkIGNoYXIgaGxfdHlwZTsJLyogaGlnaCBsYXllciBpbmZvcm1hdGlvbiB0eXBlICovCisgICAgdW5zaWduZWQgY2hhciBobF9sZW5ndGg7CS8qIGxlbmd0aCAob25seSBpZiBobF90eXBlID09IEFUTV9ITF9VU0VSIHx8ICovCisJCQkJLyogaGxfdHlwZSA9PSBBVE1fSExfSVNPKSAqLworICAgIHVuc2lnbmVkIGNoYXIgaGxfaW5mb1tBVE1fTUFYX0hMSV07LyogaGlnaCBsYXllciBpbmZvcm1hdGlvbiAqLworfTsKKworCisjZGVmaW5lIEFUTV9NQVhfQkxMSQkzCQkvKiBtYXhpbXVtIG51bWJlciBvZiBCTExJIGVsZW1lbnRzICovCisKKworc3RydWN0IGF0bV9zYXAgeworCXN0cnVjdCBhdG1fYmhsaSBiaGxpOwkJLyogbG9jYWwgU0FQLCBoaWdoLWxheWVyIGluZm9ybWF0aW9uICovCisJc3RydWN0IGF0bV9ibGxpIGJsbGlbQVRNX01BWF9CTExJXSBfX0FUTV9BUElfQUxJR047CisJCQkJCS8qIGxvY2FsIFNBUCwgbG93LWxheWVyIGluZm8gKi8KK307CisKKworc3RhdGljIF9faW5saW5lX18gaW50IGJsbGlfaW5fdXNlKHN0cnVjdCBhdG1fYmxsaSBibGxpKQoreworCXJldHVybiBibGxpLmwyX3Byb3RvIHx8IGJsbGkubDNfcHJvdG87Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hdG1zdmMuaCBiL2luY2x1ZGUvbGludXgvYXRtc3ZjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE3MTU4MwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvYXRtc3ZjLmgKQEAgLTAsMCArMSw1NSBAQAorLyogYXRtc3ZjLmggLSBBVE0gc2lnbmFsaW5nIGtlcm5lbC1kZW1vbiBpbnRlcmZhY2UgZGVmaW5pdGlvbnMgKi8KKyAKKy8qIFdyaXR0ZW4gMTk5NS0yMDAwIGJ5IFdlcm5lciBBbG1lc2JlcmdlciwgRVBGTCBMUkMvSUNBICovCisgCisKKyNpZm5kZWYgX0xJTlVYX0FUTVNWQ19ICisjZGVmaW5lIF9MSU5VWF9BVE1TVkNfSAorCisjaW5jbHVkZSA8bGludXgvYXRtYXBpLmg+CisjaW5jbHVkZSA8bGludXgvYXRtLmg+CisjaW5jbHVkZSA8bGludXgvYXRtaW9jLmg+CisKKworI2RlZmluZSBBVE1TSUdEX0NUUkwgX0lPKCdhJyxBVE1JT0NfU1BFQ0lBTCkKKwkJCQkvKiBiZWNvbWUgQVRNIHNpZ25hbGluZyBkZW1vbiBjb250cm9sIHNvY2tldCAqLworCitlbnVtIGF0bXN2Y19tc2dfdHlwZSB7IGFzX2NhdGNoX251bGwsIGFzX2JpbmQsIGFzX2Nvbm5lY3QsIGFzX2FjY2VwdCwgYXNfcmVqZWN0LAorCQkgICAgICAgYXNfbGlzdGVuLCBhc19va2F5LCBhc19lcnJvciwgYXNfaW5kaWNhdGUsIGFzX2Nsb3NlLAorCQkgICAgICAgYXNfaXRmX25vdGlmeSwgYXNfbW9kaWZ5LCBhc19pZGVudGlmeSwgYXNfdGVybWluYXRlLAorCQkgICAgICAgYXNfYWRkcGFydHksIGFzX2Ryb3BwYXJ0eSB9OworCitzdHJ1Y3QgYXRtc3ZjX21zZyB7CisJZW51bSBhdG1zdmNfbXNnX3R5cGUgdHlwZTsKKwlhdG1fa3B0cl90IHZjYzsKKwlhdG1fa3B0cl90IGxpc3Rlbl92Y2M7CQkvKiBpbmRpY2F0ZSAqLworCWludCByZXBseTsJCQkvKiBmb3Igb2theSBhbmQgY2xvc2U6CQkgICAqLworCQkJCQkvKiAgIDwgMDogZXJyb3IgYmVmb3JlIGFjdGl2ZQkgICAqLworCQkJCQkvKiAgICAgICAgKHNpZ2QgaGFzIGRpc2NhcmRlZCBjdHgpICovCisJCQkJCS8qICAgPT0wOiBzdWNjZXNzCQkgICAqLworCQkJCSAgICAgICAgLyogICA+IDA6IGVycm9yIHdoZW4gYWN0aXZlIChzdGlsbCAqLworCQkJCQkvKiAgICAgICAgbmVlZCB0byBjbG9zZSkJICAgKi8KKwlzdHJ1Y3Qgc29ja2FkZHJfYXRtcHZjIHB2YzsJLyogaW5kaWNhdGUsIG9rYXkgKGNvbm5lY3QpICovCisJc3RydWN0IHNvY2thZGRyX2F0bXN2YyBsb2NhbDsJLyogbG9jYWwgU1ZDIGFkZHJlc3MgKi8KKwlzdHJ1Y3QgYXRtX3FvcyBxb3M7CQkvKiBRT1MgcGFyYW1ldGVycyAqLworCXN0cnVjdCBhdG1fc2FwIHNhcDsJCS8qIFNBUCAqLworCXVuc2lnbmVkIGludCBzZXNzaW9uOwkJLyogZm9yIHAycG0gKi8KKwlzdHJ1Y3Qgc29ja2FkZHJfYXRtc3ZjIHN2YzsJLyogU1ZDIGFkZHJlc3MgKi8KK30gX19BVE1fQVBJX0FMSUdOOworCisvKgorICogTWVzc2FnZSBjb250ZW50czogc2VlIGZ0cDovL2ljYWZ0cC5lcGZsLmNoL3B1Yi9saW51eC9hdG0vZG9jcy9pc3AtKi50YXIuZ3oKKyAqLworCisvKgorICogU29tZSBwb2xpY3kgc3R1ZmYgZm9yIGF0bXNpZ2QgYW5kIGZvciBuZXQvYXRtL3N2Yy5jLiBCb3RoIGhhdmUgdG8gYWdyZWUgb24KKyAqIHdoYXQgUENSIGlzIHVzZWQgdG8gcmVxdWVzdCBiYW5kd2lkdGggZnJvbSB0aGUgZGV2aWNlIGRyaXZlci4gbmV0L2F0bS9zdmMuYworICogdHJpZXMgdG8gZG8gYmV0dGVyIHRoYW4gdGhhdCwgYnV0IG9ubHkgaWYgdGhlcmUncyBubyByb3V0aW5nIGRlY2lzaW9uIChpLmUuCisgKiBpZiBzaWduYWxpbmcgb25seSB1c2VzIG9uZSBBVE0gaW50ZXJmYWNlKS4KKyAqLworCisjZGVmaW5lIFNFTEVDVF9UT1BfUENSKHRwKSAoKHRwKS5wY3IgPyAodHApLnBjciA6IFwKKyAgKHRwKS5tYXhfcGNyICYmICh0cCkubWF4X3BjciAhPSBBVE1fTUFYX1BDUiA/ICh0cCkubWF4X3BjciA6IFwKKyAgKHRwKS5taW5fcGNyID8gKHRwKS5taW5fcGNyIDogQVRNX01BWF9QQ1IpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hdHRyaWJ1dGVfY29udGFpbmVyLmggYi9pbmNsdWRlL2xpbnV4L2F0dHJpYnV0ZV9jb250YWluZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjEwMTBiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9hdHRyaWJ1dGVfY29udGFpbmVyLmgKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIGNsYXNzX2NvbnRhaW5lci5oIC0gYSBnZW5lcmljIGNvbnRhaW5lciBmb3IgYWxsIGNsYXNzZXMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgLSBKYW1lcyBCb3R0b21sZXkgPEphbWVzLkJvdHRvbWxleUBzdGVlbGV5ZS5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIEdQTHYyCisgKi8KKworI2lmbmRlZiBfQVRUUklCVVRFX0NPTlRBSU5FUl9IXworI2RlZmluZSBfQVRUUklCVVRFX0NPTlRBSU5FUl9IXworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorCitzdHJ1Y3QgYXR0cmlidXRlX2NvbnRhaW5lciB7CisJc3RydWN0IGxpc3RfaGVhZAlub2RlOworCXN0cnVjdCBsaXN0X2hlYWQJY29udGFpbmVyczsKKwlzdHJ1Y3QgY2xhc3MJCSpjbGFzczsKKwlzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSAqKmF0dHJzOworCWludCAoKm1hdGNoKShzdHJ1Y3QgYXR0cmlidXRlX2NvbnRhaW5lciAqLCBzdHJ1Y3QgZGV2aWNlICopOworI2RlZmluZQlBVFRSSUJVVEVfQ09OVEFJTkVSX05PX0NMQVNTREVWUwkweDAxCisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7Cit9OworCitzdGF0aWMgaW5saW5lIGludAorYXR0cmlidXRlX2NvbnRhaW5lcl9ub19jbGFzc2RldnMoc3RydWN0IGF0dHJpYnV0ZV9jb250YWluZXIgKmF0YykKK3sKKwlyZXR1cm4gYXRjLT5mbGFncyAmIEFUVFJJQlVURV9DT05UQUlORVJfTk9fQ0xBU1NERVZTOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2F0dHJpYnV0ZV9jb250YWluZXJfc2V0X25vX2NsYXNzZGV2cyhzdHJ1Y3QgYXR0cmlidXRlX2NvbnRhaW5lciAqYXRjKQoreworCWF0Yy0+ZmxhZ3MgfD0gQVRUUklCVVRFX0NPTlRBSU5FUl9OT19DTEFTU0RFVlM7Cit9CisKK2ludCBhdHRyaWJ1dGVfY29udGFpbmVyX3JlZ2lzdGVyKHN0cnVjdCBhdHRyaWJ1dGVfY29udGFpbmVyICpjb250KTsKK2ludCBhdHRyaWJ1dGVfY29udGFpbmVyX3VucmVnaXN0ZXIoc3RydWN0IGF0dHJpYnV0ZV9jb250YWluZXIgKmNvbnQpOwordm9pZCBhdHRyaWJ1dGVfY29udGFpbmVyX2NyZWF0ZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgICBpbnQgKCpmbikoc3RydWN0IGF0dHJpYnV0ZV9jb250YWluZXIgKiwKKwkJCQkJCSBzdHJ1Y3QgZGV2aWNlICosCisJCQkJCQkgc3RydWN0IGNsYXNzX2RldmljZSAqKSk7Cit2b2lkIGF0dHJpYnV0ZV9jb250YWluZXJfYWRkX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgIGludCAoKmZuKShzdHJ1Y3QgYXR0cmlidXRlX2NvbnRhaW5lciAqLAorCQkJCQkgICAgICBzdHJ1Y3QgZGV2aWNlICosCisJCQkJCSAgICAgIHN0cnVjdCBjbGFzc19kZXZpY2UgKikpOwordm9pZCBhdHRyaWJ1dGVfY29udGFpbmVyX3JlbW92ZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgICB2b2lkICgqZm4pKHN0cnVjdCBhdHRyaWJ1dGVfY29udGFpbmVyICosCisJCQkJCQkgIHN0cnVjdCBkZXZpY2UgKiwKKwkJCQkJCSAgc3RydWN0IGNsYXNzX2RldmljZSAqKSk7Cit2b2lkIGF0dHJpYnV0ZV9jb250YWluZXJfZGV2aWNlX3RyaWdnZXIoc3RydWN0IGRldmljZSAqZGV2LCAKKwkJCQkJaW50ICgqZm4pKHN0cnVjdCBhdHRyaWJ1dGVfY29udGFpbmVyICosCisJCQkJCQkgIHN0cnVjdCBkZXZpY2UgKiwKKwkJCQkJCSAgc3RydWN0IGNsYXNzX2RldmljZSAqKSk7Cit2b2lkIGF0dHJpYnV0ZV9jb250YWluZXJfdHJpZ2dlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIAorCQkJCSBpbnQgKCpmbikoc3RydWN0IGF0dHJpYnV0ZV9jb250YWluZXIgKiwKKwkJCQkJICAgc3RydWN0IGRldmljZSAqKSk7CitpbnQgYXR0cmlidXRlX2NvbnRhaW5lcl9hZGRfYXR0cnMoc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NkZXYpOworaW50IGF0dHJpYnV0ZV9jb250YWluZXJfYWRkX2NsYXNzX2RldmljZShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc2Rldik7CitpbnQgYXR0cmlidXRlX2NvbnRhaW5lcl9hZGRfY2xhc3NfZGV2aWNlX2FkYXB0ZXIoc3RydWN0IGF0dHJpYnV0ZV9jb250YWluZXIgKmNvbnQsCisJCQkJCQkgc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkJIHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzZGV2KTsKK3ZvaWQgYXR0cmlidXRlX2NvbnRhaW5lcl9yZW1vdmVfYXR0cnMoc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NkZXYpOwordm9pZCBhdHRyaWJ1dGVfY29udGFpbmVyX2NsYXNzX2RldmljZV9kZWwoc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NkZXYpOworCisKKworCisKKworc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgKiphdHRyaWJ1dGVfY29udGFpbmVyX2NsYXNzZGV2X3RvX2F0dHJzKGNvbnN0IHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzZGV2KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2F1ZGl0LmggYi9pbmNsdWRlL2xpbnV4L2F1ZGl0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzYyOGY3YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvYXVkaXQuaApAQCAtMCwwICsxLDE5NiBAQAorLyogYXVkaXQuaCAtLSBBdWRpdGluZyBzdXBwb3J0IC0qLSBsaW51eC1jIC0qLQorICoKKyAqIENvcHlyaWdodCAyMDAzLTIwMDQgUmVkIEhhdCBJbmMuLCBEdXJoYW0sIE5vcnRoIENhcm9saW5hLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICogV3JpdHRlbiBieSBSaWNrYXJkIEUuIChSaWspIEZhaXRoIDxmYWl0aEByZWRoYXQuY29tPgorICoKKyAqLworCisjaWZuZGVmIF9MSU5VWF9BVURJVF9IXworI2RlZmluZSBfTElOVVhfQVVESVRfSF8KKworLyogUmVxdWVzdCBhbmQgcmVwbHkgdHlwZXMgKi8KKyNkZWZpbmUgQVVESVRfR0VUICAgICAgMTAwMAkvKiBHZXQgc3RhdHVzICovCisjZGVmaW5lIEFVRElUX1NFVCAgICAgIDEwMDEJLyogU2V0IHN0YXR1cyAoZW5hYmxlL2Rpc2FibGUvYXVkaXRkKSAqLworI2RlZmluZSBBVURJVF9MSVNUICAgICAxMDAyCS8qIExpc3QgZmlsdGVyaW5nIHJ1bGVzICovCisjZGVmaW5lIEFVRElUX0FERCAgICAgIDEwMDMJLyogQWRkIGZpbHRlcmluZyBydWxlICovCisjZGVmaW5lIEFVRElUX0RFTCAgICAgIDEwMDQJLyogRGVsZXRlIGZpbHRlcmluZyBydWxlICovCisjZGVmaW5lIEFVRElUX1VTRVIgICAgIDEwMDUJLyogU2VuZCBhIG1lc3NhZ2UgZnJvbSB1c2VyLXNwYWNlICovCisjZGVmaW5lIEFVRElUX0xPR0lOICAgIDEwMDYgICAgIC8qIERlZmluZSB0aGUgbG9naW4gaWQgYW5kIGluZm9ybWFpdG9uICovCisjZGVmaW5lIEFVRElUX0tFUk5FTCAgIDIwMDAJLyogQXN5bmNocm9ub3VzIGF1ZGl0IHJlY29yZC4gTk9UIEEgUkVRVUVTVC4gKi8KKworLyogUnVsZSBmbGFncyAqLworI2RlZmluZSBBVURJVF9QRVJfVEFTSyAweDAxCS8qIEFwcGx5IHJ1bGUgYXQgdGFzayBjcmVhdGlvbiAobm90IHN5c2NhbGwpICovCisjZGVmaW5lIEFVRElUX0FUX0VOVFJZIDB4MDIJLyogQXBwbHkgcnVsZSBhdCBzeXNjYWxsIGVudHJ5ICovCisjZGVmaW5lIEFVRElUX0FUX0VYSVQgIDB4MDQJLyogQXBwbHkgcnVsZSBhdCBzeXNjYWxsIGV4aXQgKi8KKyNkZWZpbmUgQVVESVRfUFJFUEVORCAgMHgxMAkvKiBQcmVwZW5kIHRvIGZyb250IG9mIGxpc3QgKi8KKworLyogUnVsZSBhY3Rpb25zICovCisjZGVmaW5lIEFVRElUX05FVkVSICAgIDAJLyogRG8gbm90IGJ1aWxkIGNvbnRleHQgaWYgcnVsZSBtYXRjaGVzICovCisjZGVmaW5lIEFVRElUX1BPU1NJQkxFIDEJLyogQnVpbGQgY29udGV4dCBpZiBydWxlIG1hdGNoZXMgICovCisjZGVmaW5lIEFVRElUX0FMV0FZUyAgIDIJLyogR2VuZXJhdGUgYXVkaXQgcmVjb3JkIGlmIHJ1bGUgbWF0Y2hlcyAqLworCisvKiBSdWxlIHN0cnVjdHVyZSBzaXplcyAtLSBpZiB0aGVzZSBjaGFuZ2UsIGRpZmZlcmVudCBBVURJVF9BREQgYW5kCisgKiBBVURJVF9MSVNUIGNvbW1hbmRzIG11c3QgYmUgaW1wbGVtZW50ZWQuICovCisjZGVmaW5lIEFVRElUX01BWF9GSUVMRFMgICA2NAorI2RlZmluZSBBVURJVF9CSVRNQVNLX1NJWkUgNjQKKyNkZWZpbmUgQVVESVRfV09SRChucikgKChfX3UzMikoKG5yKS8zMikpCisjZGVmaW5lIEFVRElUX0JJVChucikgICgxIDw8ICgobnIpIC0gQVVESVRfV09SRChucikqMzIpKQorCisvKiBSdWxlIGZpZWxkcyAqLworCQkJCS8qIFRoZXNlIGFyZSB1c2VmdWwgd2hlbiBjaGVja2luZyB0aGUKKwkJCQkgKiB0YXNrIHN0cnVjdHVyZSBhdCB0YXNrIGNyZWF0aW9uIHRpbWUKKwkJCQkgKiAoQVVESVRfUEVSX1RBU0spLiAgKi8KKyNkZWZpbmUgQVVESVRfUElECTAKKyNkZWZpbmUgQVVESVRfVUlECTEKKyNkZWZpbmUgQVVESVRfRVVJRAkyCisjZGVmaW5lIEFVRElUX1NVSUQJMworI2RlZmluZSBBVURJVF9GU1VJRAk0CisjZGVmaW5lIEFVRElUX0dJRAk1CisjZGVmaW5lIEFVRElUX0VHSUQJNgorI2RlZmluZSBBVURJVF9TR0lECTcKKyNkZWZpbmUgQVVESVRfRlNHSUQJOAorI2RlZmluZSBBVURJVF9MT0dJTlVJRAk5CisjZGVmaW5lIEFVRElUX1BFUlMJMTAKKworCQkJCS8qIFRoZXNlIGFyZSBPTkxZIHVzZWZ1bCB3aGVuIGNoZWNraW5nCisJCQkJICogYXQgc3lzY2FsbCBleGl0IHRpbWUgKEFVRElUX0FUX0VYSVQpLiAqLworI2RlZmluZSBBVURJVF9ERVZNQUpPUgkxMDAKKyNkZWZpbmUgQVVESVRfREVWTUlOT1IJMTAxCisjZGVmaW5lIEFVRElUX0lOT0RFCTEwMgorI2RlZmluZSBBVURJVF9FWElUCTEwMworI2RlZmluZSBBVURJVF9TVUNDRVNTICAgMTA0CS8qIGV4aXQgPj0gMDsgdmFsdWUgaWdub3JlZCAqLworCisjZGVmaW5lIEFVRElUX0FSRzAgICAgICAyMDAKKyNkZWZpbmUgQVVESVRfQVJHMSAgICAgIChBVURJVF9BUkcwKzEpCisjZGVmaW5lIEFVRElUX0FSRzIgICAgICAoQVVESVRfQVJHMCsyKQorI2RlZmluZSBBVURJVF9BUkczICAgICAgKEFVRElUX0FSRzArMykKKworI2RlZmluZSBBVURJVF9ORUdBVEUgICAgMHg4MDAwMDAwMAorCisKKy8qIFN0YXR1cyBzeW1ib2xzICovCisJCQkJLyogTWFzayB2YWx1ZXMgKi8KKyNkZWZpbmUgQVVESVRfU1RBVFVTX0VOQUJMRUQJCTB4MDAwMQorI2RlZmluZSBBVURJVF9TVEFUVVNfRkFJTFVSRQkJMHgwMDAyCisjZGVmaW5lIEFVRElUX1NUQVRVU19QSUQJCTB4MDAwNAorI2RlZmluZSBBVURJVF9TVEFUVVNfUkFURV9MSU1JVAkJMHgwMDA4CisjZGVmaW5lIEFVRElUX1NUQVRVU19CQUNLTE9HX0xJTUlUCTB4MDAxMAorCQkJCS8qIEZhaWx1cmUtdG8tbG9nIGFjdGlvbnMgKi8KKyNkZWZpbmUgQVVESVRfRkFJTF9TSUxFTlQJMAorI2RlZmluZSBBVURJVF9GQUlMX1BSSU5USwkxCisjZGVmaW5lIEFVRElUX0ZBSUxfUEFOSUMJMgorCisjaWZuZGVmIF9fS0VSTkVMX18KK3N0cnVjdCBhdWRpdF9tZXNzYWdlIHsKKwlzdHJ1Y3Qgbmxtc2doZHIgbmxoOworCWNoYXIJCWRhdGFbMTIwMF07Cit9OworI2VuZGlmCisKK3N0cnVjdCBhdWRpdF9zdGF0dXMgeworCV9fdTMyCQltYXNrOwkJLyogQml0IG1hc2sgZm9yIHZhbGlkIGVudHJpZXMgKi8KKwlfX3UzMgkJZW5hYmxlZDsJLyogMSA9IGVuYWJsZWQsIDAgPSBkaXNiYWxlZCAqLworCV9fdTMyCQlmYWlsdXJlOwkvKiBGYWlsdXJlLXRvLWxvZyBhY3Rpb24gKi8KKwlfX3UzMgkJcGlkOwkJLyogcGlkIG9mIGF1ZGl0ZCBwcm9jZXNzICovCisJX191MzIJCXJhdGVfbGltaXQ7CS8qIG1lc3NhZ2VzIHJhdGUgbGltaXQgKHBlciBzZWNvbmQpICovCisJX191MzIJCWJhY2tsb2dfbGltaXQ7CS8qIHdhaXRpbmcgbWVzc2FnZXMgbGltaXQgKi8KKwlfX3UzMgkJbG9zdDsJCS8qIG1lc3NhZ2VzIGxvc3QgKi8KKwlfX3UzMgkJYmFja2xvZzsJLyogbWVzc2FnZXMgd2FpdGluZyBpbiBxdWV1ZSAqLworfTsKKworc3RydWN0IGF1ZGl0X3J1bGUgewkJLyogZm9yIEFVRElUX0xJU1QsIEFVRElUX0FERCwgYW5kIEFVRElUX0RFTCAqLworCV9fdTMyCQlmbGFnczsJLyogQVVESVRfUEVSX3tUQVNLLENBTEx9LCBBVURJVF9QUkVQRU5EICovCisJX191MzIJCWFjdGlvbjsJLyogQVVESVRfTkVWRVIsIEFVRElUX1BPU1NJQkxFLCBBVURJVF9BTFdBWVMgKi8KKwlfX3UzMgkJZmllbGRfY291bnQ7CisJX191MzIJCW1hc2tbQVVESVRfQklUTUFTS19TSVpFXTsKKwlfX3UzMgkJZmllbGRzW0FVRElUX01BWF9GSUVMRFNdOworCV9fdTMyCQl2YWx1ZXNbQVVESVRfTUFYX0ZJRUxEU107Cit9OworCisjaWZkZWYgX19LRVJORUxfXworCitzdHJ1Y3QgYXVkaXRfYnVmZmVyOworc3RydWN0IGF1ZGl0X2NvbnRleHQ7CitzdHJ1Y3QgaW5vZGU7CisKKyNpZmRlZiBDT05GSUdfQVVESVRTWVNDQUxMCisvKiBUaGVzZSBhcmUgZGVmaW5lZCBpbiBhdWRpdHNjLmMgKi8KKwkJCQkvKiBQdWJsaWMgQVBJICovCitleHRlcm4gaW50ICBhdWRpdF9hbGxvYyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOworZXh0ZXJuIHZvaWQgYXVkaXRfZnJlZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOworZXh0ZXJuIHZvaWQgYXVkaXRfc3lzY2FsbF9lbnRyeShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCisJCQkJaW50IG1ham9yLCB1bnNpZ25lZCBsb25nIGEwLCB1bnNpZ25lZCBsb25nIGExLAorCQkJCXVuc2lnbmVkIGxvbmcgYTIsIHVuc2lnbmVkIGxvbmcgYTMpOworZXh0ZXJuIHZvaWQgYXVkaXRfc3lzY2FsbF9leGl0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgaW50IHJldHVybl9jb2RlKTsKK2V4dGVybiB2b2lkIGF1ZGl0X2dldG5hbWUoY29uc3QgY2hhciAqbmFtZSk7CitleHRlcm4gdm9pZCBhdWRpdF9wdXRuYW1lKGNvbnN0IGNoYXIgKm5hbWUpOworZXh0ZXJuIHZvaWQgYXVkaXRfaW5vZGUoY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSk7CisKKwkJCQkvKiBQcml2YXRlIEFQSSAoZm9yIGF1ZGl0LmMgb25seSkgKi8KK2V4dGVybiBpbnQgIGF1ZGl0X3JlY2VpdmVfZmlsdGVyKGludCB0eXBlLCBpbnQgcGlkLCBpbnQgdWlkLCBpbnQgc2VxLAorCQkJCSB2b2lkICpkYXRhKTsKK2V4dGVybiB2b2lkIGF1ZGl0X2dldF9zdGFtcChzdHJ1Y3QgYXVkaXRfY29udGV4dCAqY3R4LAorCQkJICAgIHN0cnVjdCB0aW1lc3BlYyAqdCwgaW50ICpzZXJpYWwpOworZXh0ZXJuIGludCAgYXVkaXRfc2V0X2xvZ2ludWlkKHN0cnVjdCBhdWRpdF9jb250ZXh0ICpjdHgsIHVpZF90IGxvZ2ludWlkKTsKK2V4dGVybiB1aWRfdCBhdWRpdF9nZXRfbG9naW51aWQoc3RydWN0IGF1ZGl0X2NvbnRleHQgKmN0eCk7CitleHRlcm4gaW50IGF1ZGl0X2lwY19wZXJtcyh1bnNpZ25lZCBsb25nIHFieXRlcywgdWlkX3QgdWlkLCBnaWRfdCBnaWQsIG1vZGVfdCBtb2RlKTsKKyNlbHNlCisjZGVmaW5lIGF1ZGl0X2FsbG9jKHQpICh7IDA7IH0pCisjZGVmaW5lIGF1ZGl0X2ZyZWUodCkgZG8geyA7IH0gd2hpbGUgKDApCisjZGVmaW5lIGF1ZGl0X3N5c2NhbGxfZW50cnkodCxhLGIsYyxkLGUpIGRvIHsgOyB9IHdoaWxlICgwKQorI2RlZmluZSBhdWRpdF9zeXNjYWxsX2V4aXQodCxyKSBkbyB7IDsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgYXVkaXRfZ2V0bmFtZShuKSBkbyB7IDsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgYXVkaXRfcHV0bmFtZShuKSBkbyB7IDsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgYXVkaXRfaW5vZGUobixpKSBkbyB7IDsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgYXVkaXRfZ2V0X2xvZ2ludWlkKGMpICh7IC0xOyB9KQorI2RlZmluZSBhdWRpdF9pcGNfcGVybXMocSx1LGcsbSkgKHsgMDsgfSkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0FVRElUCisvKiBUaGVzZSBhcmUgZGVmaW5lZCBpbiBhdWRpdC5jICovCisJCQkJLyogUHVibGljIEFQSSAqLworZXh0ZXJuIHZvaWQJCSAgICBhdWRpdF9sb2coc3RydWN0IGF1ZGl0X2NvbnRleHQgKmN0eCwKKwkJCQkgICAgICBjb25zdCBjaGFyICpmbXQsIC4uLikKKwkJCSAgICBfX2F0dHJpYnV0ZV9fKChmb3JtYXQocHJpbnRmLDIsMykpKTsKKworZXh0ZXJuIHN0cnVjdCBhdWRpdF9idWZmZXIgKmF1ZGl0X2xvZ19zdGFydChzdHJ1Y3QgYXVkaXRfY29udGV4dCAqY3R4KTsKK2V4dGVybiB2b2lkCQkgICAgYXVkaXRfbG9nX2Zvcm1hdChzdHJ1Y3QgYXVkaXRfYnVmZmVyICphYiwKKwkJCQkJICAgICBjb25zdCBjaGFyICpmbXQsIC4uLikKKwkJCSAgICBfX2F0dHJpYnV0ZV9fKChmb3JtYXQocHJpbnRmLDIsMykpKTsKK2V4dGVybiB2b2lkCQkgICAgYXVkaXRfbG9nX2VuZChzdHJ1Y3QgYXVkaXRfYnVmZmVyICphYik7CitleHRlcm4gdm9pZAkJICAgIGF1ZGl0X2xvZ19kX3BhdGgoc3RydWN0IGF1ZGl0X2J1ZmZlciAqYWIsCisJCQkJCSAgICAgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCQkgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKKwkJCQkJICAgICBzdHJ1Y3QgdmZzbW91bnQgKnZmc21udCk7CisKKwkJCQkvKiBQcml2YXRlIEFQSSAoZm9yIGF1ZGl0c2MuYyBvbmx5KSAqLworZXh0ZXJuIHZvaWQJCSAgICBhdWRpdF9zZW5kX3JlcGx5KGludCBwaWQsIGludCBzZXEsIGludCB0eXBlLAorCQkJCQkgICAgIGludCBkb25lLCBpbnQgbXVsdGksCisJCQkJCSAgICAgdm9pZCAqcGF5bG9hZCwgaW50IHNpemUpOworZXh0ZXJuIHZvaWQJCSAgICBhdWRpdF9sb2dfbG9zdChjb25zdCBjaGFyICptZXNzYWdlKTsKKyNlbHNlCisjZGVmaW5lIGF1ZGl0X2xvZyh0LGYsLi4uKSBkbyB7IDsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgYXVkaXRfbG9nX3N0YXJ0KHQpICh7IE5VTEw7IH0pCisjZGVmaW5lIGF1ZGl0X2xvZ192Zm9ybWF0KGIsZixhKSBkbyB7IDsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgYXVkaXRfbG9nX2Zvcm1hdChiLGYsLi4uKSBkbyB7IDsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgYXVkaXRfbG9nX2VuZChiKSBkbyB7IDsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgYXVkaXRfbG9nX2RfcGF0aChiLHAsZCx2KSBkbyB7IDsgfSB3aGlsZSAoMCkKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYXV0b19mcy5oIGIvaW5jbHVkZS9saW51eC9hdXRvX2ZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIxZTU5NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvYXV0b19mcy5oCkBAIC0wLDAgKzEsODQgQEAKKy8qIC0qLSBsaW51eC1jIC0qLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICoKKyAqICAgCisgKiBsaW51eC9pbmNsdWRlL2xpbnV4L2F1dG9fZnMuaAorICoKKyAqICAgQ29weXJpZ2h0IDE5OTcgVHJhbnNtZXRhIENvcnBvcmF0aW9uIC0gQWxsIFJpZ2h0cyBSZXNlcnZlZAorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMaW51eCBrZXJuZWwgYW5kIGlzIG1hZGUgYXZhaWxhYmxlIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIsIG9yIGF0IHlvdXIKKyAqIG9wdGlvbiwgYW55IGxhdGVyIHZlcnNpb24sIGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgorICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKworI2lmbmRlZiBfTElOVVhfQVVUT19GU19ICisjZGVmaW5lIF9MSU5VWF9BVVRPX0ZTX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2xpbWl0cy5oPgorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisKKy8qIFRoaXMgZmlsZSBkZXNjcmliZXMgYXV0b2ZzIHYzICovCisjZGVmaW5lIEFVVE9GU19QUk9UT19WRVJTSU9OCTMKKworLyogUmFuZ2Ugb2YgcHJvdG9jb2wgdmVyc2lvbnMgZGVmaW5lZCAqLworI2RlZmluZSBBVVRPRlNfTUFYX1BST1RPX1ZFUlNJT04JQVVUT0ZTX1BST1RPX1ZFUlNJT04KKyNkZWZpbmUgQVVUT0ZTX01JTl9QUk9UT19WRVJTSU9OCUFVVE9GU19QUk9UT19WRVJTSU9OCisKKy8qCisgKiBBcmNoaXRlY3R1cmVzIHdoZXJlIGJvdGggMzItIGFuZCA2NC1iaXQgYmluYXJpZXMgY2FuIGJlIGV4ZWN1dGVkCisgKiBvbiA2NC1iaXQga2VybmVscyBuZWVkIHRoaXMuICBUaGlzIGtlZXBzIHRoZSBzdHJ1Y3R1cmUgZm9ybWF0CisgKiB1bmlmb3JtLCBhbmQgbWFrZXMgc3VyZSB0aGUgd2FpdF9xdWV1ZV90b2tlbiBpc24ndCB0b28gYmlnIHRvIGJlCisgKiBwYXNzZWQgYmFjayBkb3duIHRvIHRoZSBrZXJuZWwuCisgKgorICogVGhpcyBhc3N1bWVzIHRoYXQgb24gdGhlc2UgYXJjaGl0ZWN0dXJlczoKKyAqIG1vZGUgICAgIDMyIGJpdCAgICA2NCBiaXQKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIGludCAgICAgIDMyIGJpdCAgICAzMiBiaXQKKyAqIGxvbmcgICAgIDMyIGJpdCAgICA2NCBiaXQKKyAqCisgKiBJZiBzbywgMzItYml0IHVzZXItc3BhY2UgY29kZSBzaG91bGQgYmUgYmFja3dhcmRzIGNvbXBhdGlibGUuCisgKi8KKworI2lmIGRlZmluZWQoX19zcGFyY19fKSB8fCBkZWZpbmVkKF9fbWlwc19fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pIFwKKyB8fCBkZWZpbmVkKF9fcG93ZXJwY19fKSB8fCBkZWZpbmVkKF9fczM5MF9fKQordHlwZWRlZiB1bnNpZ25lZCBpbnQgYXV0b2ZzX3dxdF90OworI2Vsc2UKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBhdXRvZnNfd3F0X3Q7CisjZW5kaWYKKworLyogUGFja2V0IHR5cGVzICovCisjZGVmaW5lIGF1dG9mc19wdHlwZV9taXNzaW5nCTAJLyogTWlzc2luZyBlbnRyeSAobW91bnQgcmVxdWVzdCkgKi8KKyNkZWZpbmUgYXV0b2ZzX3B0eXBlX2V4cGlyZQkxCS8qIEV4cGlyZSBlbnRyeSAodW1vdW50IHJlcXVlc3QpICovCisKK3N0cnVjdCBhdXRvZnNfcGFja2V0X2hkciB7CisJaW50IHByb3RvX3ZlcnNpb247CQkvKiBQcm90b2NvbCB2ZXJzaW9uICovCisJaW50IHR5cGU7CQkJLyogVHlwZSBvZiBwYWNrZXQgKi8KK307CisKK3N0cnVjdCBhdXRvZnNfcGFja2V0X21pc3NpbmcgeworCXN0cnVjdCBhdXRvZnNfcGFja2V0X2hkciBoZHI7CisgICAgICAgIGF1dG9mc193cXRfdCB3YWl0X3F1ZXVlX3Rva2VuOworCWludCBsZW47CisJY2hhciBuYW1lW05BTUVfTUFYKzFdOworfTsJCisKKy8qIHYzIGV4cGlyZSAodmlhIGlvY3RsKSAqLworc3RydWN0IGF1dG9mc19wYWNrZXRfZXhwaXJlIHsKKwlzdHJ1Y3QgYXV0b2ZzX3BhY2tldF9oZHIgaGRyOworCWludCBsZW47CisJY2hhciBuYW1lW05BTUVfTUFYKzFdOworfTsKKworI2RlZmluZSBBVVRPRlNfSU9DX1JFQURZICAgICAgX0lPKDB4OTMsMHg2MCkKKyNkZWZpbmUgQVVUT0ZTX0lPQ19GQUlMICAgICAgIF9JTygweDkzLDB4NjEpCisjZGVmaW5lIEFVVE9GU19JT0NfQ0FUQVRPTklDICBfSU8oMHg5MywweDYyKQorI2RlZmluZSBBVVRPRlNfSU9DX1BST1RPVkVSICAgX0lPUigweDkzLDB4NjMsaW50KQorI2RlZmluZSBBVVRPRlNfSU9DX1NFVFRJTUVPVVQgX0lPV1IoMHg5MywweDY0LHVuc2lnbmVkIGxvbmcpCisjZGVmaW5lIEFVVE9GU19JT0NfRVhQSVJFICAgICBfSU9SKDB4OTMsMHg2NSxzdHJ1Y3QgYXV0b2ZzX3BhY2tldF9leHBpcmUpCisKKyNlbmRpZiAvKiBfTElOVVhfQVVUT19GU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2F1dG9fZnM0LmggYi9pbmNsdWRlL2xpbnV4L2F1dG9fZnM0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFjN2IwZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvYXV0b19mczQuaApAQCAtMCwwICsxLDU3IEBACisvKiAtKi0gYyAtKi0KKyAqIGxpbnV4L2luY2x1ZGUvbGludXgvYXV0b19mczQuaAorICoKKyAqIENvcHlyaWdodCAxOTk5LTIwMDAgSmVyZW15IEZpdHpoYXJkaW5nZSA8amVyZW15QGdvb3Aub3JnPgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMaW51eCBrZXJuZWwgYW5kIGlzIG1hZGUgYXZhaWxhYmxlIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIsIG9yIGF0IHlvdXIKKyAqIG9wdGlvbiwgYW55IGxhdGVyIHZlcnNpb24sIGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgorICovCisKKyNpZm5kZWYgX0xJTlVYX0FVVE9fRlM0X0gKKyNkZWZpbmUgX0xJTlVYX0FVVE9fRlM0X0gKKworLyogSW5jbHVkZSBjb21tb24gdjMgZGVmaW5pdGlvbnMgKi8KKyNpbmNsdWRlIDxsaW51eC9hdXRvX2ZzLmg+CisKKy8qIGF1dG9mcyB2NCBkZWZpbml0aW9ucyAqLworI3VuZGVmIEFVVE9GU19QUk9UT19WRVJTSU9OCisjdW5kZWYgQVVUT0ZTX01JTl9QUk9UT19WRVJTSU9OCisjdW5kZWYgQVVUT0ZTX01BWF9QUk9UT19WRVJTSU9OCisKKyNkZWZpbmUgQVVUT0ZTX1BST1RPX1ZFUlNJT04JCTQKKyNkZWZpbmUgQVVUT0ZTX01JTl9QUk9UT19WRVJTSU9OCTMKKyNkZWZpbmUgQVVUT0ZTX01BWF9QUk9UT19WRVJTSU9OCTQKKworI2RlZmluZSBBVVRPRlNfUFJPVE9fU1VCVkVSU0lPTiAgICAgICAgIDUKKworLyogTWFzayBmb3IgZXhwaXJlIGJlaGF2aW91ciAqLworI2RlZmluZSBBVVRPRlNfRVhQX0lNTUVESUFURQkJMQorI2RlZmluZSBBVVRPRlNfRVhQX0xFQVZFUwkJMgorCisvKiBOZXcgbWVzc2FnZSB0eXBlICovCisjZGVmaW5lIGF1dG9mc19wdHlwZV9leHBpcmVfbXVsdGkJMgkvKiBFeHBpcmUgZW50cnkgKHVtb3VudCByZXF1ZXN0KSAqLworCisvKiB2NCBtdWx0aSBleHBpcmUgKHZpYSBwaXBlKSAqLworc3RydWN0IGF1dG9mc19wYWNrZXRfZXhwaXJlX211bHRpIHsKKwlzdHJ1Y3QgYXV0b2ZzX3BhY2tldF9oZHIgaGRyOworICAgICAgICBhdXRvZnNfd3F0X3Qgd2FpdF9xdWV1ZV90b2tlbjsKKwlpbnQgbGVuOworCWNoYXIgbmFtZVtOQU1FX01BWCsxXTsKK307CisKK3VuaW9uIGF1dG9mc19wYWNrZXRfdW5pb24geworCXN0cnVjdCBhdXRvZnNfcGFja2V0X2hkciBoZHI7CisJc3RydWN0IGF1dG9mc19wYWNrZXRfbWlzc2luZyBtaXNzaW5nOworCXN0cnVjdCBhdXRvZnNfcGFja2V0X2V4cGlyZSBleHBpcmU7CisJc3RydWN0IGF1dG9mc19wYWNrZXRfZXhwaXJlX211bHRpIGV4cGlyZV9tdWx0aTsKK307CisKKyNkZWZpbmUgQVVUT0ZTX0lPQ19FWFBJUkVfTVVMVEkJCV9JT1coMHg5MywweDY2LGludCkKKyNkZWZpbmUgQVVUT0ZTX0lPQ19QUk9UT1NVQlZFUgkJX0lPUigweDkzLDB4NjcsaW50KQorI2RlZmluZSBBVVRPRlNfSU9DX0FTS1JFR0hPU1QgICAgICAgICAgIF9JT1IoMHg5MywweDY4LGludCkKKyNkZWZpbmUgQVVUT0ZTX0lPQ19UT0dHTEVSRUdIT1NUICAgICAgICBfSU9SKDB4OTMsMHg2OSxpbnQpCisjZGVmaW5lIEFVVE9GU19JT0NfQVNLVU1PVU5UCQlfSU9SKDB4OTMsMHg3MCxpbnQpCisKKworI2VuZGlmIC8qIF9MSU5VWF9BVVRPX0ZTNF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2F3ZV92b2ljZS5oIGIvaW5jbHVkZS9saW51eC9hd2Vfdm9pY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTBlMjdkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9hd2Vfdm9pY2UuaApAQCAtMCwwICsxLDUyNSBAQAorLyoKKyAqIHNvdW5kL2F3ZV92b2ljZS5oCisgKgorICogVm9pY2UgaW5mb3JtYXRpb24gZGVmaW5pdGlvbnMgZm9yIHRoZSBsb3cgbGV2ZWwgZHJpdmVyIGZvciB0aGUgCisgKiBBV0UzMi9TQjMyL0FXRTY0IHdhdmUgdGFibGUgc3ludGguCisgKiAgIHZlcnNpb24gMC40LjQ7IEphbi4gNCwgMjAwMAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwIFRha2FzaGkgSXdhaQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgQVdFX1ZPSUNFX0gKKyNkZWZpbmUgQVdFX1ZPSUNFX0gKKworI2lmbmRlZiBTQU1QTEVfVFlQRV9BV0UzMgorI2RlZmluZSBTQU1QTEVfVFlQRV9BV0UzMgkweDIwCisjZW5kaWYKKworI2lmbmRlZiBfUEFUQ0hLRVkKKyNkZWZpbmUgX1BBVENIS0VZKGlkKSAoKGlkPDw4KXwweGZkKQorI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcGF0Y2ggaW5mb3JtYXRpb24gcmVjb3JkCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBwYXRjaCBpbnRlcmZhY2UgaGVhZGVyOiAxNiBieXRlcyAqLwordHlwZWRlZiBzdHJ1Y3QgYXdlX3BhdGNoX2luZm8geworCXNob3J0IGtleTsJCQkvKiB1c2UgQVdFX1BBVENIIGhlcmUgKi8KKyNkZWZpbmUgQVdFX1BBVENICV9QQVRDSEtFWSgweDA3KQorCisJc2hvcnQgZGV2aWNlX25vOwkJLyogc3ludGhlc2l6ZXIgbnVtYmVyICovCisJdW5zaWduZWQgc2hvcnQgc2ZfaWQ7CQkvKiBmaWxlIGlkIChzaG91bGQgYmUgemVybykgKi8KKwlzaG9ydCBvcHRhcmc7CQkJLyogb3B0aW9uYWwgYXJndW1lbnQgKi8KKwlpbnQgbGVuOwkJCS8qIGRhdGEgbGVuZ3RoICh3aXRob3V0IHRoaXMgaGVhZGVyKSAqLworCisJc2hvcnQgdHlwZTsJCQkvKiBwYXRjaCBvcGVyYXRpb24gdHlwZSAqLworI2RlZmluZSBBV0VfTE9BRF9JTkZPCQkwCS8qIGF3ZV92b2ljZV9yZWMgKi8KKyNkZWZpbmUgQVdFX0xPQURfREFUQQkJMQkvKiBhd2Vfc2FtcGxlX2luZm8gKi8KKyNkZWZpbmUgQVdFX09QRU5fUEFUQ0gJCTIJLyogYXdlX29wZW5fcGFybSAqLworI2RlZmluZSBBV0VfQ0xPU0VfUEFUQ0gJCTMJLyogbm9uZSAqLworI2RlZmluZSBBV0VfVU5MT0FEX1BBVENICTQJLyogbm9uZSAqLworI2RlZmluZSBBV0VfUkVQTEFDRV9EQVRBCTUJLyogYXdlX3NhbXBsZV9pbmZvIChvcHRhcmc9I2NoYW5uZWxzKSovCisjZGVmaW5lIEFXRV9NQVBfUFJFU0VUCQk2CS8qIGF3ZV92b2ljZV9tYXAgKi8KKy8qI2RlZmluZSBBV0VfUFJPQkVfSU5GTwk3Ki8JLyogYXdlX3ZvaWNlX21hcCAocGF0IG9ubHkpICovCisjZGVmaW5lIEFXRV9QUk9CRV9EQVRBCQk4CS8qIG9wdGFyZz1zYW1wbGUgKi8KKyNkZWZpbmUgQVdFX1JFTU9WRV9JTkZPCQk5CS8qIG9wdGFyZz0oYmFuazw8OCl8aW5zdHIgKi8KKyNkZWZpbmUgQVdFX0xPQURfQ0hPUlVTX0ZYCTB4MTAJLyogYXdlX2Nob3J1c19meF9yZWMgKG9wdGFyZz1tb2RlKSAqLworI2RlZmluZSBBV0VfTE9BRF9SRVZFUkJfRlgJMHgxMQkvKiBhd2VfcmV2ZXJiX2Z4X3JlYyAob3B0YXJnPW1vZGUpICovCisKKwlzaG9ydCByZXNlcnZlZDsJCQkvKiB3b3JkIGFsaWdubWVudCBkYXRhICovCisKKwkvKiB0aGUgYWN0dWFsIHBhdGNoIGRhdGEgYmVnaW5zIGFmdGVyIHRoaXMgKi8KKyNpZiBkZWZpbmVkKEFXRV9DT01QQVRfMDMwKSAmJiBBV0VfQ09NUEFUXzAzMAorCWNoYXIgZGF0YVswXTsKKyNlbmRpZgorfSBhd2VfcGF0Y2hfaW5mbzsKKworLyojZGVmaW5lIEFXRV9QQVRDSF9JTkZPX1NJWkUJMTYqLworI2RlZmluZSBBV0VfUEFUQ0hfSU5GT19TSVpFCXNpemVvZihhd2VfcGF0Y2hfaW5mbykKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIG9wZW4gcGF0Y2gKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUgQVdFX1BBVENIX05BTUVfTEVOCTMyCisKK3R5cGVkZWYgc3RydWN0IF9hd2Vfb3Blbl9wYXJtIHsKKwl1bnNpZ25lZCBzaG9ydCB0eXBlOwkJLyogc2FtcGxlIHR5cGUgKi8KKyNkZWZpbmUgQVdFX1BBVF9UWVBFX01JU0MJMAorI2RlZmluZSBBV0VfUEFUX1RZUEVfR00JCTEKKyNkZWZpbmUgQVdFX1BBVF9UWVBFX0dTCQkyCisjZGVmaW5lIEFXRV9QQVRfVFlQRV9NVDMyCTMKKyNkZWZpbmUgQVdFX1BBVF9UWVBFX1hHCQk0CisjZGVmaW5lIEFXRV9QQVRfVFlQRV9TRlgJNQorI2RlZmluZSBBV0VfUEFUX1RZUEVfR1VTCTYKKyNkZWZpbmUgQVdFX1BBVF9UWVBFX01BUAk3CisKKyNkZWZpbmUgQVdFX1BBVF9MT0NLRUQJCTB4MTAwCS8qIGxvY2sgdGhlIHNhbXBsZXMgKi8KKyNkZWZpbmUgQVdFX1BBVF9TSEFSRUQJCTB4MjAwCS8qIHNhbXBsZSBpcyBzaGFyZWQgKi8KKworCXNob3J0IHJlc2VydmVkOworCWNoYXIgbmFtZVtBV0VfUEFUQ0hfTkFNRV9MRU5dOworfSBhd2Vfb3Blbl9wYXJtOworCisvKiNkZWZpbmUgQVdFX09QRU5fUEFSTV9TSVpFCTI4Ki8KKyNkZWZpbmUgQVdFX09QRU5fUEFSTV9TSVpFCXNpemVvZihhd2Vfb3Blbl9wYXJtKQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmF3IHZvaWNlIGluZm9ybWF0aW9uIHJlY29yZAorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogd2F2ZSB0YWJsZSBlbnZlbG9wZSAmIGVmZmVjdCBwYXJhbWV0ZXJzIHRvIGNvbnRyb2wgRU1VODAwMCAqLwordHlwZWRlZiBzdHJ1Y3QgX2F3ZV92b2ljZV9wYXJtIHsKKwl1bnNpZ25lZCBzaG9ydCBtb2RkZWxheTsJLyogbW9kdWxhdGlvbiBkZWxheSAoMHg4MDAwKSAqLworCXVuc2lnbmVkIHNob3J0IG1vZGF0a2hsZDsJLyogbW9kdWxhdGlvbiBhdHRhY2sgJiBob2xkIHRpbWUgKDB4N2Y3ZikgKi8KKwl1bnNpZ25lZCBzaG9ydCBtb2RkY3lzdXM7CS8qIG1vZHVsYXRpb24gZGVjYXkgJiBzdXN0YWluICgweDdmN2YpICovCisJdW5zaWduZWQgc2hvcnQgbW9kcmVsZWFzZTsJLyogbW9kdWxhdGlvbiByZWxlYXNlIHRpbWUgKDB4ODA3ZikgKi8KKwlzaG9ydCBtb2RrZXlob2xkLCBtb2RrZXlkZWNheTsJLyogZW52ZWxvcGUgY2hhbmdlIHBlciBrZXkgKG5vdCB1c2VkKSAqLworCXVuc2lnbmVkIHNob3J0IHZvbGRlbGF5OwkvKiB2b2x1bWUgZGVsYXkgKDB4ODAwMCkgKi8KKwl1bnNpZ25lZCBzaG9ydCB2b2xhdGtobGQ7CS8qIHZvbHVtZSBhdHRhY2sgJiBob2xkIHRpbWUgKDB4N2Y3ZikgKi8KKwl1bnNpZ25lZCBzaG9ydCB2b2xkY3lzdXM7CS8qIHZvbHVtZSBkZWNheSAmIHN1c3RhaW4gKDB4N2Y3ZikgKi8KKwl1bnNpZ25lZCBzaG9ydCB2b2xyZWxlYXNlOwkvKiB2b2x1bWUgcmVsZWFzZSB0aW1lICgweDgwN2YpICovCisJc2hvcnQgdm9sa2V5aG9sZCwgdm9sa2V5ZGVjYXk7CS8qIGVudmVsb3BlIGNoYW5nZSBwZXIga2V5IChub3QgdXNlZCkgKi8KKwl1bnNpZ25lZCBzaG9ydCBsZm8xZGVsYXk7CS8qIExGTzEgZGVsYXkgKDB4ODAwMCkgKi8KKwl1bnNpZ25lZCBzaG9ydCBsZm8yZGVsYXk7CS8qIExGTzIgZGVsYXkgKDB4ODAwMCkgKi8KKwl1bnNpZ25lZCBzaG9ydCBwZWZlOwkJLyogbW9kdWxhdGlvbiBwaXRjaCAmIGN1dG9mZiAoMHgwMDAwKSAqLworCXVuc2lnbmVkIHNob3J0IGZtbW9kOwkJLyogTEZPMSBwaXRjaCAmIGN1dG9mZiAoMHgwMDAwKSAqLworCXVuc2lnbmVkIHNob3J0IHRyZW1mcnE7CQkvKiBMRk8xIHZvbHVtZSAmIGZyZXEgKDB4MDAwMCkgKi8KKwl1bnNpZ25lZCBzaG9ydCBmbTJmcnEyOwkJLyogTEZPMiBwaXRjaCAmIGZyZXEgKDB4MDAwMCkgKi8KKwl1bnNpZ25lZCBjaGFyIGN1dG9mZjsJCS8qIGluaXRpYWwgY3V0b2ZmICgweGZmKSAqLworCXVuc2lnbmVkIGNoYXIgZmlsdGVyUTsJCS8qIGluaXRpYWwgZmlsdGVyIFEgWzAtMTVdICgweDApICovCisJdW5zaWduZWQgY2hhciBjaG9ydXM7CQkvKiBjaG9ydXMgc2VuZCAoMHgwMCkgKi8KKwl1bnNpZ25lZCBjaGFyIHJldmVyYjsJCS8qIHJldmVyYiBzZW5kICgweDAwKSAqLworCXVuc2lnbmVkIHNob3J0IHJlc2VydmVkWzRdOwkvKiBub3QgdXNlZCAqLworfSBhd2Vfdm9pY2VfcGFybTsKKwordHlwZWRlZiBzdHJ1Y3QgX2F3ZV92b2ljZV9wYXJtX2Jsb2NrIHsKKwl1bnNpZ25lZCBzaG9ydCBtb2RkZWxheTsJLyogbW9kdWxhdGlvbiBkZWxheSAoMHg4MDAwKSAqLworCXVuc2lnbmVkIGNoYXIgbW9kYXRrLCBtb2RobGQ7CisJdW5zaWduZWQgY2hhciBtb2RkY3ksIG1vZHN1czsKKwl1bnNpZ25lZCBjaGFyIG1vZHJlbCwgbW9kZHVtbXk7CisJc2hvcnQgbW9ka2V5aG9sZCwgbW9ka2V5ZGVjYXk7CS8qIGVudmVsb3BlIGNoYW5nZSBwZXIga2V5IChub3QgdXNlZCkgKi8KKwl1bnNpZ25lZCBzaG9ydCB2b2xkZWxheTsJLyogdm9sdW1lIGRlbGF5ICgweDgwMDApICovCisJdW5zaWduZWQgY2hhciB2b2xhdGssIHZvbGhsZDsKKwl1bnNpZ25lZCBjaGFyIHZvbGRjeSwgdm9sc3VzOworCXVuc2lnbmVkIGNoYXIgdm9scmVsLCB2b2xkdW1teTsKKwlzaG9ydCB2b2xrZXlob2xkLCB2b2xrZXlkZWNheTsJLyogZW52ZWxvcGUgY2hhbmdlIHBlciBrZXkgKG5vdCB1c2VkKSAqLworCXVuc2lnbmVkIHNob3J0IGxmbzFkZWxheTsJLyogTEZPMSBkZWxheSAoMHg4MDAwKSAqLworCXVuc2lnbmVkIHNob3J0IGxmbzJkZWxheTsJLyogTEZPMiBkZWxheSAoMHg4MDAwKSAqLworCXVuc2lnbmVkIGNoYXIgZW52MWZjLCBlbnYxcGl0OworCXVuc2lnbmVkIGNoYXIgbGZvMWZjLCBsZm8xcGl0OworCXVuc2lnbmVkIGNoYXIgbGZvMWZyZXEsIGxmbzF2b2w7CisJdW5zaWduZWQgY2hhciBsZm8yZnJlcSwgbGZvMnBpdDsKKwl1bnNpZ25lZCBjaGFyIGN1dG9mZjsJCS8qIGluaXRpYWwgY3V0b2ZmICgweGZmKSAqLworCXVuc2lnbmVkIGNoYXIgZmlsdGVyUTsJCS8qIGluaXRpYWwgZmlsdGVyIFEgWzAtMTVdICgweDApICovCisJdW5zaWduZWQgY2hhciBjaG9ydXM7CQkvKiBjaG9ydXMgc2VuZCAoMHgwMCkgKi8KKwl1bnNpZ25lZCBjaGFyIHJldmVyYjsJCS8qIHJldmVyYiBzZW5kICgweDAwKSAqLworCXVuc2lnbmVkIHNob3J0IHJlc2VydmVkWzRdOwkvKiBub3QgdXNlZCAqLworfSBhd2Vfdm9pY2VfcGFybV9ibG9jazsKKworI2RlZmluZSBBV0VfVk9JQ0VfUEFSTV9TSVpFCTQ4CisKKworLyogd2F2ZSB0YWJsZSBwYXJhbWV0ZXJzOiA5MiBieXRlcyAqLwordHlwZWRlZiBzdHJ1Y3QgX2F3ZV92b2ljZV9pbmZvIHsKKwl1bnNpZ25lZCBzaG9ydCBzZl9pZDsJCS8qIGZpbGUgaWQgKHNob3VsZCBiZSB6ZXJvKSAqLworCXVuc2lnbmVkIHNob3J0IHNhbXBsZTsJCS8qIHNhbXBsZSBpZCAqLworCWludCBzdGFydCwgZW5kOwkJCS8qIHNhbXBsZSBvZmZzZXQgY29ycmVjdGlvbiAqLworCWludCBsb29wc3RhcnQsIGxvb3BlbmQ7CQkvKiBsb29wIG9mZnNldCBjb3JyZWN0aW9uICovCisJc2hvcnQgcmF0ZV9vZmZzZXQ7CQkvKiBzYW1wbGUgcmF0ZSBwaXRjaCBvZmZzZXQgKi8KKwl1bnNpZ25lZCBzaG9ydCBtb2RlOwkJLyogc2FtcGxlIG1vZGUgKi8KKyNkZWZpbmUgQVdFX01PREVfUk9NU09VTkQJCTB4ODAwMAorI2RlZmluZSBBV0VfTU9ERV9TVEVSRU8JCQkxCisjZGVmaW5lIEFXRV9NT0RFX0xPT1BJTkcJCTIKKyNkZWZpbmUgQVdFX01PREVfTk9SRUxFQVNFCQk0CS8qIG9ic29sZXRlICovCisjZGVmaW5lIEFXRV9NT0RFX0lOSVRfUEFSTQkJOAorCisJc2hvcnQgcm9vdDsJCQkvKiBtaWRpIHJvb3Qga2V5ICovCisJc2hvcnQgdHVuZTsJCQkvKiBwaXRjaCB0dW5pbmcgKGluIGNlbnRzKSAqLworCXNpZ25lZCBjaGFyIGxvdywgaGlnaDsJCS8qIGtleSBub3RlIHJhbmdlICovCisJc2lnbmVkIGNoYXIgdmVsbG93LCB2ZWxoaWdoOwkvKiB2ZWxvY2l0eSByYW5nZSAqLworCXNpZ25lZCBjaGFyIGZpeGtleSwgZml4dmVsOwkvKiBmaXhlZCBrZXksIHZlbG9jaXR5ICovCisJc2lnbmVkIGNoYXIgcGFuLCBmaXhwYW47CS8qIHBhbm5pbmcsIGZpeGVkIHBhbm5pbmcgKi8KKwlzaG9ydCBleGNsdXNpdmVDbGFzczsJCS8qIGV4Y2x1c2l2ZSBjbGFzcyAoMCA9IG5vbmUpICovCisJdW5zaWduZWQgY2hhciBhbXBsaXR1ZGU7CS8qIHNhbXBsZSB2b2x1bWUgKDEyNyBtYXgpICovCisJdW5zaWduZWQgY2hhciBhdHRlbnVhdGlvbjsJLyogYXR0ZW51YXRpb24gKDAuMzc1ZEIpICovCisJc2hvcnQgc2NhbGVUdW5pbmc7CQkvKiBwaXRjaCBzY2FsZSB0dW5pbmcoJSksIG5vcm1hbGx5IDEwMCAqLworCWF3ZV92b2ljZV9wYXJtIHBhcm07CQkvKiB2b2ljZSBlbnZlbG9wZSBwYXJhbWV0ZXJzICovCisJc2hvcnQgaW5kZXg7CQkJLyogaW50ZXJuYWwgaW5kZXggKHNldCBieSBkcml2ZXIpICovCit9IGF3ZV92b2ljZV9pbmZvOworCisvKiNkZWZpbmUgQVdFX1ZPSUNFX0lORk9fU0laRQk5MiovCisjZGVmaW5lIEFXRV9WT0lDRV9JTkZPX1NJWkUJc2l6ZW9mKGF3ZV92b2ljZV9pbmZvKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBUaGUgaW5mbyBlbnRyeSBvZiBhd2Vfdm9pY2VfcmVjIGlzIGNoYW5nZWQgZnJvbSAwIHRvIDEKKyAqIGZvciBzb21lIGNvbXBpbGVycyByZWZ1c2luZyB6ZXJvIHNpemUgYXJyYXkuCisgKiBEdWUgdG8gdGhpcyBjaGFuZ2UsIHNpemVvZihhd2Vfdm9pY2VfcmVjKSBiZWNvbWVzIGRpZmZlcmVudAorICogZnJvbSBvbGRlciB2ZXJzaW9ucy4KKyAqIFVzZSBBV0VfVk9JQ0VfUkVDX1NJWkUgaW5zdGVhZC4KKyAqLworCisvKiBpbnN0cnVtZW50IGluZm8gaGVhZGVyOiA0IGJ5dGVzICovCit0eXBlZGVmIHN0cnVjdCBfYXdlX3ZvaWNlX3JlY19oZHIgeworCXVuc2lnbmVkIGNoYXIgYmFuazsJCS8qIG1pZGkgYmFuayBudW1iZXIgKi8KKwl1bnNpZ25lZCBjaGFyIGluc3RyOwkJLyogbWlkaSBwcmVzZXQgbnVtYmVyICovCisJY2hhciBudm9pY2VzOwkJCS8qIG51bWJlciBvZiB2b2ljZXMgKi8KKwljaGFyIHdyaXRlX21vZGU7CQkvKiB3cml0ZSBtb2RlOyBub3JtYWxseSAwICovCisjZGVmaW5lIEFXRV9XUl9BUFBFTkQJCTAJLyogYXBwZW5kIGFueXdheSAqLworI2RlZmluZSBBV0VfV1JfRVhDTFVTSVZFCTEJLyogc2tpcCBpZiBhbHJlYWR5IGV4aXN0cyAqLworI2RlZmluZSBBV0VfV1JfUkVQTEFDRQkJMgkvKiByZXBsYWNlIGlmIGFscmVhZHkgZXhpc3RzICovCit9IGF3ZV92b2ljZV9yZWNfaGRyOworCisvKiNkZWZpbmUgQVdFX1ZPSUNFX1JFQ19TSVpFCTQqLworI2RlZmluZSBBV0VfVk9JQ0VfUkVDX1NJWkUJc2l6ZW9mKGF3ZV92b2ljZV9yZWNfaGRyKQorCisvKiB0aGUgc3RhbmRhcmQgcGF0Y2ggc3RydWN0dXJlIGZvciBvbmUgc2FtcGxlICovCit0eXBlZGVmIHN0cnVjdCBfYXdlX3ZvaWNlX3JlY19wYXRjaCB7CisJYXdlX3BhdGNoX2luZm8JCXBhdGNoOworCWF3ZV92b2ljZV9yZWNfaGRyCWhkcjsKKwlhd2Vfdm9pY2VfaW5mbwkJaW5mbzsKK30gYXdlX3ZvaWNlX3JlY19wYXRjaDsKKworCisvKiBvYnNvbGV0ZSBkYXRhIHR5cGUgKi8KKyNpZiBkZWZpbmVkKEFXRV9DT01QQVRfMDMwKSAmJiBBV0VfQ09NUEFUXzAzMAorI2RlZmluZSBBV0VfSU5GT0FSUkFZX1NJWkUJMAorI2Vsc2UKKyNkZWZpbmUgQVdFX0lORk9BUlJBWV9TSVpFCTEKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCBfYXdlX3ZvaWNlX3JlYyB7CisJdW5zaWduZWQgY2hhciBiYW5rOwkJLyogbWlkaSBiYW5rIG51bWJlciAqLworCXVuc2lnbmVkIGNoYXIgaW5zdHI7CQkvKiBtaWRpIHByZXNldCBudW1iZXIgKi8KKwlzaG9ydCBudm9pY2VzOwkJCS8qIG51bWJlciBvZiB2b2ljZXMgKi8KKwkvKiB2b2ljZSBpbmZvcm1hdGlvbiBmb2xsb3dzIGhlcmUgKi8KKwlhd2Vfdm9pY2VfaW5mbyBpbmZvW0FXRV9JTkZPQVJSQVlfU0laRV07Cit9IGF3ZV92b2ljZV9yZWM7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBzYW1wbGUgd2F2ZSBpbmZvcm1hdGlvbgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogd2F2ZSB0YWJsZSBzYW1wbGUgaGVhZGVyOiAzMiBieXRlcyAqLwordHlwZWRlZiBzdHJ1Y3QgYXdlX3NhbXBsZV9pbmZvIHsKKwl1bnNpZ25lZCBzaG9ydCBzZl9pZDsJCS8qIGZpbGUgaWQgKHNob3VsZCBiZSB6ZXJvKSAqLworCXVuc2lnbmVkIHNob3J0IHNhbXBsZTsJCS8qIHNhbXBsZSBpZCAqLworCWludCBzdGFydCwgZW5kOwkJCS8qIHN0YXJ0ICYgZW5kIG9mZnNldCAqLworCWludCBsb29wc3RhcnQsIGxvb3BlbmQ7CQkvKiBsb29wIHN0YXJ0ICYgZW5kIG9mZnNldCAqLworCWludCBzaXplOwkJCS8qIHNpemUgKDAgPSBST00pICovCisJc2hvcnQgY2hlY2tzdW1fZmxhZzsJCS8qIHVzZSBjaGVjayBzdW0gPSAxICovCisJdW5zaWduZWQgc2hvcnQgbW9kZV9mbGFnczsJLyogbW9kZSBmbGFncyAqLworI2RlZmluZSBBV0VfU0FNUExFXzhCSVRTCTEJLyogd2F2ZSBkYXRhIGlzIDhiaXRzICovCisjZGVmaW5lIEFXRV9TQU1QTEVfVU5TSUdORUQJMgkvKiB3YXZlIGRhdGEgaXMgdW5zaWduZWQgKi8KKyNkZWZpbmUgQVdFX1NBTVBMRV9OT19CTEFOSwk0CS8qIG5vIGJsYW5rIGxvb3AgaXMgYXR0YWNoZWQgKi8KKyNkZWZpbmUgQVdFX1NBTVBMRV9TSU5HTEVTSE9UCTgJLyogc2luZ2xlLXNob3Qgdy9vIGxvb3AgKi8KKyNkZWZpbmUgQVdFX1NBTVBMRV9CSURJUl9MT09QCTE2CS8qIGJpZGlyZWN0aW9uYWwgbG9vcGluZyAqLworI2RlZmluZSBBV0VfU0FNUExFX1NURVJFT19MRUZUCTMyCS8qIHN0ZXJlbyBsZWZ0IHNvdW5kICovCisjZGVmaW5lIEFXRV9TQU1QTEVfU1RFUkVPX1JJR0hUCTY0CS8qIHN0ZXJlbyByaWdodCBzb3VuZCAqLworI2RlZmluZSBBV0VfU0FNUExFX1JFVkVSU0VfTE9PUCAxMjgJLyogcmV2ZXJzZSBsb29waW5nICovCisJdW5zaWduZWQgaW50IGNoZWNrc3VtOwkJLyogY2hlY2sgc3VtICovCisjaWYgZGVmaW5lZChBV0VfQ09NUEFUXzAzMCkgJiYgQVdFX0NPTVBBVF8wMzAKKwl1bnNpZ25lZCBzaG9ydCBkYXRhWzBdOwkJLyogc2FtcGxlIGRhdGEgZm9sbG93cyBoZXJlICovCisjZW5kaWYKK30gYXdlX3NhbXBsZV9pbmZvOworCisvKiNkZWZpbmUgQVdFX1NBTVBMRV9JTkZPX1NJWkUJMzIqLworI2RlZmluZSBBV0VfU0FNUExFX0lORk9fU0laRQlzaXplb2YoYXdlX3NhbXBsZV9pbmZvKQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogdm9pY2UgcHJlc2V0IG1hcHBpbmcKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3R5cGVkZWYgc3RydWN0IGF3ZV92b2ljZV9tYXAgeworCWludCBtYXBfYmFuaywgbWFwX2luc3RyLCBtYXBfa2V5OwkvKiBrZXkgPSAtMSBtZWFucyBhbGwga2V5cyAqLworCWludCBzcmNfYmFuaywgc3JjX2luc3RyLCBzcmNfa2V5OworfSBhd2Vfdm9pY2VfbWFwOworCisjZGVmaW5lIEFXRV9WT0lDRV9NQVBfU0laRQlzaXplb2YoYXdlX3ZvaWNlX21hcCkKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIGF3ZSBoYXJkd2FyZSBjb250cm9scworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZSBfQVdFX0RFQlVHX01PREUJCQkweDAwCisjZGVmaW5lIF9BV0VfUkVWRVJCX01PREUJCTB4MDEKKyNkZWZpbmUgX0FXRV9DSE9SVVNfTU9ERQkJMHgwMgorI2RlZmluZSBfQVdFX1JFTU9WRV9MQVNUX1NBTVBMRVMJMHgwMworI2RlZmluZSBfQVdFX0lOSVRJQUxJWkVfQ0hJUAkJMHgwNAorI2RlZmluZSBfQVdFX1NFTkRfRUZGRUNUCQkweDA1CisjZGVmaW5lIF9BV0VfVEVSTUlOQVRFX0NIQU5ORUwJCTB4MDYKKyNkZWZpbmUgX0FXRV9URVJNSU5BVEVfQUxMCQkweDA3CisjZGVmaW5lIF9BV0VfSU5JVElBTF9WT0xVTUUJCTB4MDgKKyNkZWZpbmUgX0FXRV9JTklUSUFMX0FUVEVOCV9BV0VfSU5JVElBTF9WT0xVTUUKKyNkZWZpbmUgX0FXRV9SRVNFVF9DSEFOTkVMCQkweDA5CisjZGVmaW5lIF9BV0VfQ0hBTk5FTF9NT0RFCQkweDBhCisjZGVmaW5lIF9BV0VfRFJVTV9DSEFOTkVMUwkJMHgwYgorI2RlZmluZSBfQVdFX01JU0NfTU9ERQkJCTB4MGMKKyNkZWZpbmUgX0FXRV9SRUxFQVNFX0FMTAkJMHgwZAorI2RlZmluZSBfQVdFX05PVEVPRkZfQUxMCQkweDBlCisjZGVmaW5lIF9BV0VfQ0hOX1BSRVNTVVJFCQkweDBmCisvKiNkZWZpbmUgX0FXRV9HRVRfQ1VSUkVOVF9NT0RFCQkweDEwKi8KKyNkZWZpbmUgX0FXRV9FUVVBTElaRVIJCQkweDExCisvKiNkZWZpbmUgX0FXRV9HRVRfTUlTQ19NT0RFCQkweDEyKi8KKy8qI2RlZmluZSBfQVdFX0dFVF9GT05USU5GTwkJMHgxMyovCisKKyNkZWZpbmUgX0FXRV9NT0RFX0ZMQUcJCQkweDgwCisjZGVmaW5lIF9BV0VfQ09PS0VEX0ZMQUcJCTB4NDAJLyogbm90IHN1cHBvcnRlZCAqLworI2RlZmluZSBfQVdFX01PREVfVkFMVUVfTUFTSwkJMHgzRgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZGVmaW5lIF9BV0VfU0VUX0NNRChwLGRldix2b2ljZSxjbWQscDEscDIpIFwKK3soKGNoYXIqKShwKSlbMF0gPSBTRVFfUFJJVkFURTtcCisgKChjaGFyKikocCkpWzFdID0gZGV2O1wKKyAoKGNoYXIqKShwKSlbMl0gPSBfQVdFX01PREVfRkxBR3woY21kKTtcCisgKChjaGFyKikocCkpWzNdID0gdm9pY2U7XAorICgodW5zaWduZWQgc2hvcnQqKShwKSlbMl0gPSBwMTtcCisgKCh1bnNpZ25lZCBzaG9ydCopKHApKVszXSA9IHAyO30KKworLyogYnVmZmVyZWQgYWNjZXNzICovCisjZGVmaW5lIF9BV0VfQ01EKGRldiwgdm9pY2UsIGNtZCwgcDEsIHAyKSBcCit7X1NFUV9ORUVEQlVGKDgpO1wKKyBfQVdFX1NFVF9DTUQoX3NlcWJ1ZiArIF9zZXFidWZwdHIsIGRldiwgdm9pY2UsIGNtZCwgcDEsIHAyKTtcCisgX1NFUV9BRFZCVUYoOCk7fQorCisvKiBkaXJlY3QgYWNjZXNzICovCisjZGVmaW5lIF9BV0VfQ01EX05PVyhzZXFmZCxkZXYsdm9pY2UsY21kLHAxLHAyKSBcCit7c3RydWN0IHNlcV9ldmVudF9yZWMgdG1wO1wKKyBfQVdFX1NFVF9DTUQoJnRtcCwgZGV2LCB2b2ljZSwgY21kLCBwMSwgcDIpO1wKKyBpb2N0bChzZXFmZCwgU05EQ1RMX1NFUV9PVVRPRkJBTkQsICZ0bXApO30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogc2V0IGRlYnVnZ2luZyBtb2RlICovCisjZGVmaW5lIEFXRV9ERUJVR19NT0RFKGRldixwMSkJX0FXRV9DTUQoZGV2LCAwLCBfQVdFX0RFQlVHX01PREUsIHAxLCAwKQorLyogc2V0IHJldmVyYiBtb2RlOyBmcm9tIDAgdG8gNyAqLworI2RlZmluZSBBV0VfUkVWRVJCX01PREUoZGV2LHAxKQlfQVdFX0NNRChkZXYsIDAsIF9BV0VfUkVWRVJCX01PREUsIHAxLCAwKQorLyogc2V0IGNob3J1cyBtb2RlOyBmcm9tIDAgdG8gNyAqLworI2RlZmluZSBBV0VfQ0hPUlVTX01PREUoZGV2LHAxKQlfQVdFX0NNRChkZXYsIDAsIF9BV0VfQ0hPUlVTX01PREUsIHAxLCAwKQorCisvKiByZXNldCBjaGFubmVsICovCisjZGVmaW5lIEFXRV9SRVNFVF9DSEFOTkVMKGRldixjaCkgX0FXRV9DTUQoZGV2LCBjaCwgX0FXRV9SRVNFVF9DSEFOTkVMLCAwLCAwKQorI2RlZmluZSBBV0VfUkVTRVRfQ09OVFJPTChkZXYsY2gpIF9BV0VfQ01EKGRldiwgY2gsIF9BV0VfUkVTRVRfQ0hBTk5FTCwgMSwgMCkKKworLyogc2VuZCBhbiBlZmZlY3QgdG8gYWxsIGxheWVycyAqLworI2RlZmluZSBBV0VfU0VORF9FRkZFQ1QoZGV2LHZvaWNlLHR5cGUsdmFsdWUpIF9BV0VfQ01EKGRldix2b2ljZSxfQVdFX1NFTkRfRUZGRUNULHR5cGUsdmFsdWUpCisjZGVmaW5lIEFXRV9BRERfRUZGRUNUKGRldix2b2ljZSx0eXBlLHZhbHVlKSBfQVdFX0NNRChkZXYsdm9pY2UsX0FXRV9TRU5EX0VGRkVDVCwoKHR5cGUpfDB4ODApLHZhbHVlKQorI2RlZmluZSBBV0VfVU5TRVRfRUZGRUNUKGRldix2b2ljZSx0eXBlKSBfQVdFX0NNRChkZXYsdm9pY2UsX0FXRV9TRU5EX0VGRkVDVCwoKHR5cGUpfDB4NDApLDApCisvKiBzZW5kIGFuIGVmZmVjdCB0byBhIGxheWVyICovCisjZGVmaW5lIEFXRV9TRU5EX0xBWUVSX0VGRkVDVChkZXYsdm9pY2UsbGF5ZXIsdHlwZSx2YWx1ZSkgX0FXRV9DTUQoZGV2LHZvaWNlLF9BV0VfU0VORF9FRkZFQ1QsKChsYXllcisxKTw8OHwodHlwZSkpLHZhbHVlKQorI2RlZmluZSBBV0VfQUREX0xBWUVSX0VGRkVDVChkZXYsdm9pY2UsbGF5ZXIsdHlwZSx2YWx1ZSkgX0FXRV9DTUQoZGV2LHZvaWNlLF9BV0VfU0VORF9FRkZFQ1QsKChsYXllcisxKTw8OHwodHlwZSl8MHg4MCksdmFsdWUpCisjZGVmaW5lIEFXRV9VTlNFVF9MQVlFUl9FRkZFQ1QoZGV2LHZvaWNlLGxheWVyLHR5cGUpIF9BV0VfQ01EKGRldix2b2ljZSxfQVdFX1NFTkRfRUZGRUNULCgobGF5ZXIrMSk8PDh8KHR5cGUpfDB4NDApLDApCisKKy8qIHRlcm1pbmF0ZSBzb3VuZCBvbiB0aGUgY2hhbm5lbC92b2ljZSAqLworI2RlZmluZSBBV0VfVEVSTUlOQVRFX0NIQU5ORUwoZGV2LHZvaWNlKSBfQVdFX0NNRChkZXYsdm9pY2UsX0FXRV9URVJNSU5BVEVfQ0hBTk5FTCwwLDApCisvKiB0ZXJtaW5hdGUgYWxsIHNvdW5kcyAqLworI2RlZmluZSBBV0VfVEVSTUlOQVRFX0FMTChkZXYpIF9BV0VfQ01EKGRldiwgMCwgX0FXRV9URVJNSU5BVEVfQUxMLCAwLCAwKQorLyogcmVsZWFzZSBhbGwgc291bmRzICh3L28gc3VzdGFpbiBlZmZlY3QpICovCisjZGVmaW5lIEFXRV9SRUxFQVNFX0FMTChkZXYpIF9BV0VfQ01EKGRldiwgMCwgX0FXRV9SRUxFQVNFX0FMTCwgMCwgMCkKKy8qIG5vdGUgb2ZmIGFsbCBzb3VuZHMgKHcgc3VzdGFpbiBlZmZlY3QpICovCisjZGVmaW5lIEFXRV9OT1RFT0ZGX0FMTChkZXYpIF9BV0VfQ01EKGRldiwgMCwgX0FXRV9OT1RFT0ZGX0FMTCwgMCwgMCkKKworLyogc2V0IGluaXRpYWwgYXR0ZW51YXRpb24gKi8KKyNkZWZpbmUgQVdFX0lOSVRJQUxfVk9MVU1FKGRldixhdHRlbikgX0FXRV9DTUQoZGV2LCAwLCBfQVdFX0lOSVRJQUxfVk9MVU1FLCBhdHRlbiwgMCkKKyNkZWZpbmUgQVdFX0lOSVRJQUxfQVRURU4gIEFXRV9JTklUSUFMX1ZPTFVNRQorLyogcmVsYXRpdmUgYXR0ZW51YXRpb24gKi8KKyNkZWZpbmUgQVdFX1NFVF9BVFRFTihkZXYsYXR0ZW4pICBfQVdFX0NNRChkZXYsIDAsIF9BV0VfSU5JVElBTF9WT0xVTUUsIGF0dGVuLCAxKQorCisvKiBzZXQgY2hhbm5lbCBwbGF5aW5nIG1vZGU7IG1vZGU9MC8xLzIgKi8KKyNkZWZpbmUgQVdFX1NFVF9DSEFOTkVMX01PREUoZGV2LG1vZGUpIF9BV0VfQ01EKGRldiwgMCwgX0FXRV9DSEFOTkVMX01PREUsIG1vZGUsIDApCisjZGVmaW5lIEFXRV9QTEFZX0lORElSRUNUCTAJLyogaW5kaXJlY3Qgdm9pY2UgbW9kZSAoZGVmYXVsdCkgKi8KKyNkZWZpbmUgQVdFX1BMQVlfTVVMVEkJCTEJLyogbXVsdGkgbm90ZSB2b2ljZSBtb2RlICovCisjZGVmaW5lIEFXRV9QTEFZX0RJUkVDVAkJMgkvKiBkaXJlY3Qgc2luZ2xlIHZvaWNlIG1vZGUgKi8KKyNkZWZpbmUgQVdFX1BMQVlfTVVMVEkyCQkzCS8qIHNlcXVlbmNlcjIgbW9kZTsgdXNlZCBpbnRlcm5hbGx5ICovCisKKy8qIHNldCBkcnVtIGNoYW5uZWwgbWFzazsgY2hhbm5lbHMgaXMgMzJiaXQgbG9uZyB2YWx1ZSAqLworI2RlZmluZSBBV0VfRFJVTV9DSEFOTkVMUyhkZXYsY2hhbm5lbHMpIF9BV0VfQ01EKGRldiwgMCwgX0FXRV9EUlVNX0NIQU5ORUxTLCAoKGNoYW5uZWxzKSAmIDB4ZmZmZiksICgoY2hhbm5lbHMpID4+IDE2KSkKKworLyogc2V0IGJhc3MgYW5kIHRyZWJsZSBjb250cm9sOyB2YWx1ZXMgYXJlIGZyb20gMCB0byAxMSAqLworI2RlZmluZSBBV0VfRVFVQUxJWkVSKGRldixiYXNzLHRyZWJsZSkgX0FXRV9DTUQoZGV2LCAwLCBfQVdFX0VRVUFMSVpFUiwgYmFzcywgdHJlYmxlKQorCisvKiByZW1vdmUgbGFzdCBsb2FkZWQgc2FtcGxlcyAqLworI2RlZmluZSBBV0VfUkVNT1ZFX0xBU1RfU0FNUExFUyhzZXFmZCxkZXYpIF9BV0VfQ01EX05PVyhzZXFmZCwgZGV2LCAwLCBfQVdFX1JFTU9WRV9MQVNUX1NBTVBMRVMsIDAsIDApCisvKiBpbml0aWFsaXplIGVtdTgwMDAgY2hpcCAqLworI2RlZmluZSBBV0VfSU5JVElBTElaRV9DSElQKHNlcWZkLGRldikgX0FXRV9DTURfTk9XKHNlcWZkLCBkZXYsIDAsIF9BV0VfSU5JVElBTElaRV9DSElQLCAwLCAwKQorCisvKiBzZXQgbWlzY2VsbGFuZW91cyBtb2RlczsgbWV0YSBjb21tYW5kICovCisjZGVmaW5lIEFXRV9NSVNDX01PREUoZGV2LG1vZGUsdmFsdWUpIF9BV0VfQ01EKGRldiwgMCwgX0FXRV9NSVNDX01PREUsIG1vZGUsIHZhbHVlKQorLyogZXhjbHVzaXZlIHNvdW5kIG9mZjsgMT1vZmYgKi8KKyNkZWZpbmUgQVdFX0VYQ0xVU0lWRV9TT1VORChkZXYsbW9kZSkgQVdFX01JU0NfTU9ERShkZXYsQVdFX01EX0VYQ0xVU0lWRV9TT1VORCxtb2RlKQorLyogZGVmYXVsdCBHVVMgYmFuayBudW1iZXIgKi8KKyNkZWZpbmUgQVdFX1NFVF9HVVNfQkFOSyhkZXYsYmFuaykgQVdFX01JU0NfTU9ERShkZXYsQVdFX01EX0dVU19CQU5LLGJhbmspCisvKiBjaGFuZ2UgcGFubmluZyBwb3NpdGlvbiBpbiByZWFsdGltZTsgMD1kb24ndCAxPWRvICovCisjZGVmaW5lIEFXRV9SRUFMVElNRV9QQU4oZGV2LG1vZGUpIEFXRV9NSVNDX01PREUoZGV2LEFXRV9NRF9SRUFMVElNRV9QQU4sbW9kZSkKKworLyogZXh0ZW5kZWQgcHJlc3N1cmUgY29udHJvbHM7IG5vdCBwb3J0YWJsZSB3aXRoIG90aGVyIHNvdW5kIGRyaXZlcnMgKi8KKyNkZWZpbmUgQVdFX0tFWV9QUkVTU1VSRShkZXYsY2gsbm90ZSx2ZWwpIFNFUV9TVEFSVF9OT1RFKGRldixjaCwobm90ZSkrMTI4LHZlbCkKKyNkZWZpbmUgQVdFX0NITl9QUkVTU1VSRShkZXYsY2gsdmVsKSBfQVdFX0NNRChkZXYsY2gsX0FXRV9DSE5fUFJFU1NVUkUsdmVsLDApCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIHJldmVyYiBtb2RlIHBhcmFtZXRlcnMgKi8KKyNkZWZpbmUJQVdFX1JFVkVSQl9ST09NMQkwCisjZGVmaW5lIEFXRV9SRVZFUkJfUk9PTTIJMQorI2RlZmluZQlBV0VfUkVWRVJCX1JPT00zCTIKKyNkZWZpbmUJQVdFX1JFVkVSQl9IQUxMMQkzCisjZGVmaW5lCUFXRV9SRVZFUkJfSEFMTDIJNAorI2RlZmluZQlBV0VfUkVWRVJCX1BMQVRFCTUKKyNkZWZpbmUJQVdFX1JFVkVSQl9ERUxBWQk2CisjZGVmaW5lCUFXRV9SRVZFUkJfUEFOTklOR0RFTEFZIDcKKyNkZWZpbmUgQVdFX1JFVkVSQl9QUkVERUZJTkVECTgKKy8qIHVzZXIgY2FuIGRlZmluZSByZXZlcmIgbW9kZXMgdXAgdG8gMzIgKi8KKyNkZWZpbmUgQVdFX1JFVkVSQl9OVU1CRVJTCTMyCisKK3R5cGVkZWYgc3RydWN0IGF3ZV9yZXZlcmJfZnhfcmVjIHsKKwl1bnNpZ25lZCBzaG9ydCBwYXJtc1syOF07Cit9IGF3ZV9yZXZlcmJfZnhfcmVjOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBjaG9ydXMgbW9kZSBwYXJhbWV0ZXJzICovCisjZGVmaW5lIEFXRV9DSE9SVVNfMQkJMAorI2RlZmluZQlBV0VfQ0hPUlVTXzIJCTEKKyNkZWZpbmUJQVdFX0NIT1JVU18zCQkyCisjZGVmaW5lCUFXRV9DSE9SVVNfNAkJMworI2RlZmluZQlBV0VfQ0hPUlVTX0ZFRURCQUNLCTQKKyNkZWZpbmUJQVdFX0NIT1JVU19GTEFOR0VSCTUKKyNkZWZpbmUJQVdFX0NIT1JVU19TSE9SVERFTEFZCTYKKyNkZWZpbmUJQVdFX0NIT1JVU19TSE9SVERFTEFZMgk3CisjZGVmaW5lIEFXRV9DSE9SVVNfUFJFREVGSU5FRAk4CisvKiB1c2VyIGNhbiBkZWZpbmUgY2hvcnVzIG1vZGVzIHVwIHRvIDMyICovCisjZGVmaW5lIEFXRV9DSE9SVVNfTlVNQkVSUwkzMgorCit0eXBlZGVmIHN0cnVjdCBhd2VfY2hvcnVzX2Z4X3JlYyB7CisJdW5zaWduZWQgc2hvcnQgZmVlZGJhY2s7CS8qIGZlZWRiYWNrIGxldmVsICgweEU2MDAtMHhFNkZGKSAqLworCXVuc2lnbmVkIHNob3J0IGRlbGF5X29mZnNldDsJLyogZGVsYXkgKDAtMHgwREEzKSBbMS80NDEwMCBzZWNdICovCisJdW5zaWduZWQgc2hvcnQgbGZvX2RlcHRoOwkvKiBMRk8gZGVwdGggKDB4QkMwMC0weEJDRkYpICovCisJdW5zaWduZWQgaW50IGRlbGF5OwkvKiByaWdodCBkZWxheSAoMC0weEZGRkZGRkZGKSBbMS8yNTYvNDQxMDAgc2VjXSAqLworCXVuc2lnbmVkIGludCBsZm9fZnJlcTsJCS8qIExGTyBmcmVxIExGTyBmcmVxICgwLTB4RkZGRkZGRkYpICovCit9IGF3ZV9jaG9ydXNfZnhfcmVjOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBtaXNjIG1vZGUgdHlwZXMgKi8KK2VudW0geworLyogMCovCUFXRV9NRF9FWENMVVNJVkVfT0ZGLAkvKiBvYnNvbGV0ZSAqLworLyogMSovCUFXRV9NRF9FWENMVVNJVkVfT04sCS8qIG9ic29sZXRlICovCisvKiAyKi8JQVdFX01EX1ZFUlNJT04sCQkvKiByZWFkIG9ubHkgKi8KKy8qIDMqLwlBV0VfTURfRVhDTFVTSVZFX1NPVU5ELAkvKiAwLzE6IGV4Y2x1c2l2ZSBub3RlIG9uIChkZWZhdWx0PTEpICovCisvKiA0Ki8JQVdFX01EX1JFQUxUSU1FX1BBTiwJLyogMC8xOiBkbyByZWFsdGltZSBwYW4gY2hhbmdlIChkZWZhdWx0PTEpICovCisvKiA1Ki8JQVdFX01EX0dVU19CQU5LLAkvKiBiYW5rIG51bWJlciBmb3IgR1VTIHBhdGNoZXMgKGRlZmF1bHQ9MCkgKi8KKy8qIDYqLwlBV0VfTURfS0VFUF9FRkZFQ1QsCS8qIDAvMToga2VlcCBlZmZlY3QgdmFsdWVzLCAoZGVmYXVsdD0wKSAqLworLyogNyovCUFXRV9NRF9aRVJPX0FUVEVOLAkvKiBhdHRlbnVhdGlvbiBvZiBtYXggdm9sdW1lIChkZWZhdWx0PTMyKSAqLworLyogOCovCUFXRV9NRF9DSE5fUFJJT1IsCS8qIDAvMTogc2V0IE1JREkgY2hhbm5lbCBwcmlvcml0eSBtb2RlIChkZWZhdWx0PTEpICovCisvKiA5Ki8JQVdFX01EX01PRF9TRU5TRSwJLyogaW50ZWdlcjogbW9kd2hlZWwgc2Vuc2l0aXZpdHkgKGRlZj0xOCkgKi8KKy8qMTAqLwlBV0VfTURfREVGX1BSRVNFVCwJLyogaW50ZWdlcjogZGVmYXVsdCBwcmVzZXQgbnVtYmVyIChkZWY9MCkgKi8KKy8qMTEqLwlBV0VfTURfREVGX0JBTkssCS8qIGludGVnZXI6IGRlZmF1bHQgYmFuayBudW1iZXIgKGRlZj0wKSAqLworLyoxMiovCUFXRV9NRF9ERUZfRFJVTSwJLyogaW50ZWdlcjogZGVmYXVsdCBkcnVtc2V0IG51bWJlciAoZGVmPTApICovCisvKjEzKi8JQVdFX01EX1RPR0dMRV9EUlVNX0JBTkssIC8qIDAvMTogdG9nZ2xlIGRydW0gZmxhZyB3aXRoIGJhbmsjIChkZWY9MCkgKi8KKy8qMTQqLwlBV0VfTURfTkVXX1ZPTFVNRV9DQUxDLAkvKiAwLzE6IHZvbHVtZSBjYWxjdWxhdGlvbiBtb2RlIChkZWY9MSkgKi8KKy8qMTUqLwlBV0VfTURfQ0hPUlVTX01PREUsCS8qIGludGVnZXI6IGNob3J1cyBtb2RlIChkZWY9MikgKi8KKy8qMTYqLwlBV0VfTURfUkVWRVJCX01PREUsCS8qIGludGVnZXI6IGNob3J1cyBtb2RlIChkZWY9NCkgKi8KKy8qMTcqLwlBV0VfTURfQkFTU19MRVZFTCwJLyogaW50ZWdlcjogYmFzcyBsZXZlbCAoZGVmPTUpICovCisvKjE4Ki8JQVdFX01EX1RSRUJMRV9MRVZFTCwJLyogaW50ZWdlcjogdHJlYmxlIGxldmVsIChkZWY9OSkgKi8KKy8qMTkqLwlBV0VfTURfREVCVUdfTU9ERSwJLyogaW50ZWdlcjogZGVidWcgbGV2ZWwgKGRlZj0wKSAqLworLyoyMCovCUFXRV9NRF9QQU5fRVhDSEFOR0UsCS8qIDAvMTogZXhjaGFuZ2UgcGFubmluZyBkaXJlY3Rpb24gKGRlZj0wKSAqLworCUFXRV9NRF9FTkQsCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBlZmZlY3QgcGFyYW1ldGVycyAqLworZW51bSB7CisKKy8qIG1vZHVsYXRpb24gZW52ZWxvcGUgcGFyYW1ldGVycyAqLworLyogMCovCUFXRV9GWF9FTlYxX0RFTEFZLAkvKiBXT1JEOiBFTlZWQUwgKi8KKy8qIDEqLwlBV0VfRlhfRU5WMV9BVFRBQ0ssCS8qIEJZVEU6IHVwIEFUS0hMRCAqLworLyogMiovCUFXRV9GWF9FTlYxX0hPTEQsCS8qIEJZVEU6IGx3IEFUS0hMRCAqLworLyogMyovCUFXRV9GWF9FTlYxX0RFQ0FZLAkvKiBCWVRFOiBsdyBEQ1lTVVMgKi8KKy8qIDQqLwlBV0VfRlhfRU5WMV9SRUxFQVNFLAkvKiBCWVRFOiBsdyBEQ1lTVVMgKi8KKy8qIDUqLwlBV0VfRlhfRU5WMV9TVVNUQUlOLAkvKiBCWVRFOiB1cCBEQ1lTVVMgKi8KKy8qIDYqLwlBV0VfRlhfRU5WMV9QSVRDSCwJLyogQllURTogdXAgUEVGRSAqLworLyogNyovCUFXRV9GWF9FTlYxX0NVVE9GRiwJLyogQllURTogbHcgUEVGRSAqLworCisvKiB2b2x1bWUgZW52ZWxvcGUgcGFyYW1ldGVycyAqLworLyogOCovCUFXRV9GWF9FTlYyX0RFTEFZLAkvKiBXT1JEOiBFTlZWT0wgKi8KKy8qIDkqLwlBV0VfRlhfRU5WMl9BVFRBQ0ssCS8qIEJZVEU6IHVwIEFUS0hMRFYgKi8KKy8qMTAqLwlBV0VfRlhfRU5WMl9IT0xELAkvKiBCWVRFOiBsdyBBVEtITERWICovCisvKjExKi8JQVdFX0ZYX0VOVjJfREVDQVksCS8qIEJZVEU6IGx3IERDWVNVU1YgKi8KKy8qMTIqLwlBV0VfRlhfRU5WMl9SRUxFQVNFLAkvKiBCWVRFOiBsdyBEQ1lTVVNWICovCisvKjEzKi8JQVdFX0ZYX0VOVjJfU1VTVEFJTiwJLyogQllURTogdXAgRENZU1VTViAqLworCQorLyogTEZPMSAodHJlbW9sbyAmIHZpYnJhdG8pIHBhcmFtZXRlcnMgKi8KKy8qMTQqLwlBV0VfRlhfTEZPMV9ERUxBWSwJLyogV09SRDogTEZPMVZBTCAqLworLyoxNSovCUFXRV9GWF9MRk8xX0ZSRVEsCS8qIEJZVEU6IGxvIFRSRU1GUlEgKi8KKy8qMTYqLwlBV0VfRlhfTEZPMV9WT0xVTUUsCS8qIEJZVEU6IHVwIFRSRU1GUlEgKi8KKy8qMTcqLwlBV0VfRlhfTEZPMV9QSVRDSCwJLyogQllURTogdXAgRk1NT0QgKi8KKy8qMTgqLwlBV0VfRlhfTEZPMV9DVVRPRkYsCS8qIEJZVEU6IGxvIEZNTU9EICovCisKKy8qIExGTzIgKHZpYnJhdG8pIHBhcmFtZXRlcnMgKi8KKy8qMTkqLwlBV0VfRlhfTEZPMl9ERUxBWSwJLyogV09SRDogTEZPMlZBTCAqLworLyoyMCovCUFXRV9GWF9MRk8yX0ZSRVEsCS8qIEJZVEU6IGxvIEZNMkZSUTIgKi8KKy8qMjEqLwlBV0VfRlhfTEZPMl9QSVRDSCwJLyogQllURTogdXAgRk0yRlJRMiAqLworCisvKiBPdGhlciBvdmVyYWxsIGVmZmVjdCBwYXJhbWV0ZXJzICovCisvKjIyKi8JQVdFX0ZYX0lOSVRfUElUQ0gsCS8qIFNIT1JUOiBwaXRjaCBvZmZzZXQgKi8KKy8qMjMqLwlBV0VfRlhfQ0hPUlVTLAkJLyogQllURTogY2hvcnVzIGVmZmVjdHMgc2VuZCAoMC0yNTUpICovCisvKjI0Ki8JQVdFX0ZYX1JFVkVSQiwJCS8qIEJZVEU6IHJldmVyYiBlZmZlY3RzIHNlbmQgKDAtMjU1KSAqLworLyoyNSovCUFXRV9GWF9DVVRPRkYsCQkvKiBCWVRFOiB1cCBJRkFUTiAqLworLyoyNiovCUFXRV9GWF9GSUxURVJRLAkJLyogQllURTogdXAgQ0NDQSAqLworCisvKiBTYW1wbGUgLyBsb29wIG9mZnNldCBjaGFuZ2VzICovCisvKjI3Ki8JQVdFX0ZYX1NBTVBMRV9TVEFSVCwJLyogU0hPUlQ6IG9mZnNldCAqLworLyoyOCovCUFXRV9GWF9MT09QX1NUQVJULAkvKiBTSE9SVDogb2Zmc2V0ICovCisvKjI5Ki8JQVdFX0ZYX0xPT1BfRU5ELAkvKiBTSE9SVDogb2Zmc2V0ICovCisvKjMwKi8JQVdFX0ZYX0NPQVJTRV9TQU1QTEVfU1RBUlQsCS8qIFNIT1JUOiB1cHBlciB3b3JkIG9mZnNldCAqLworLyozMSovCUFXRV9GWF9DT0FSU0VfTE9PUF9TVEFSVCwJLyogU0hPUlQ6IHVwcGVyIHdvcmQgb2Zmc2V0ICovCisvKjMyKi8JQVdFX0ZYX0NPQVJTRV9MT09QX0VORCwJCS8qIFNIT1JUOiB1cHBlciB3b3JkIG9mZnNldCAqLworLyozMyovCUFXRV9GWF9BVFRFTiwJCS8qIEJZVEU6IGxvIElGQVROICovCisKKwlBV0VfRlhfRU5ELAorfTsKKworI2VuZGlmIC8qIEFXRV9WT0lDRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2F4MjUuaCBiL2luY2x1ZGUvbGludXgvYXgyNS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2YzExZjAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2F4MjUuaApAQCAtMCwwICsxLDExNiBAQAorLyoKKyAqIFRoZXNlIGFyZSB0aGUgcHVibGljIGVsZW1lbnRzIG9mIHRoZSBMaW51eCBrZXJuZWwgQVguMjUgY29kZS4gQSBzaW1pbGFyCisgKiBmaWxlIG5ldHJvbS5oIGV4aXN0cyBmb3IgdGhlIE5FVC9ST00gcHJvdG9jb2wuCisgKi8KKworI2lmbmRlZglBWDI1X0tFUk5FTF9ICisjZGVmaW5lCUFYMjVfS0VSTkVMX0gKKworI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPgorCisjZGVmaW5lIEFYMjVfTVRVCTI1NgorI2RlZmluZSBBWDI1X01BWF9ESUdJUyAgOAorCisjZGVmaW5lIEFYMjVfV0lORE9XCTEKKyNkZWZpbmUgQVgyNV9UMQkJMgorI2RlZmluZSBBWDI1X04yCQkzCisjZGVmaW5lIEFYMjVfVDMJCTQKKyNkZWZpbmUgQVgyNV9UMgkJNQorI2RlZmluZQlBWDI1X0JBQ0tPRkYJNgorI2RlZmluZQlBWDI1X0VYVFNFUQk3CisjZGVmaW5lCUFYMjVfUElESU5DTAk4CisjZGVmaW5lIEFYMjVfSURMRQk5CisjZGVmaW5lIEFYMjVfUEFDTEVOCTEwCisjZGVmaW5lIEFYMjVfSUFNRElHSQkxMgorCisjZGVmaW5lIEFYMjVfS0lMTAk5OQorCisjZGVmaW5lIFNJT0NBWDI1R0VUVUlECQkoU0lPQ1BST1RPUFJJVkFURSswKQorI2RlZmluZSBTSU9DQVgyNUFERFVJRAkJKFNJT0NQUk9UT1BSSVZBVEUrMSkKKyNkZWZpbmUgU0lPQ0FYMjVERUxVSUQJCShTSU9DUFJPVE9QUklWQVRFKzIpCisjZGVmaW5lIFNJT0NBWDI1Tk9VSUQJCShTSU9DUFJPVE9QUklWQVRFKzMpCisjZGVmaW5lIFNJT0NBWDI1T1BUUlQJCShTSU9DUFJPVE9QUklWQVRFKzcpCisjZGVmaW5lIFNJT0NBWDI1Q1RMQ09OCQkoU0lPQ1BST1RPUFJJVkFURSs4KQorI2RlZmluZSBTSU9DQVgyNUdFVElORk9PTEQJKFNJT0NQUk9UT1BSSVZBVEUrOSkKKyNkZWZpbmUgU0lPQ0FYMjVBRERGV0QJCShTSU9DUFJPVE9QUklWQVRFKzEwKQorI2RlZmluZSBTSU9DQVgyNURFTEZXRAkJKFNJT0NQUk9UT1BSSVZBVEUrMTEpCisjZGVmaW5lIFNJT0NBWDI1REVWQ1RMICAgICAgICAgIChTSU9DUFJPVE9QUklWQVRFKzEyKQorI2RlZmluZSBTSU9DQVgyNUdFVElORk8gICAgICAgICAoU0lPQ1BST1RPUFJJVkFURSsxMykKKworI2RlZmluZSBBWDI1X1NFVF9SVF9JUE1PREUJMgorCisjZGVmaW5lIEFYMjVfTk9VSURfREVGQVVMVAkwCisjZGVmaW5lIEFYMjVfTk9VSURfQkxPQ0sJMQorCit0eXBlZGVmIHN0cnVjdCB7CisJY2hhcgkJYXgyNV9jYWxsWzddOwkvKiA2IGNhbGwgKyBTU0lEIChzaGlmdGVkIGFzY2lpISkgKi8KK30gYXgyNV9hZGRyZXNzOworCitzdHJ1Y3Qgc29ja2FkZHJfYXgyNSB7CisJc2FfZmFtaWx5X3QJc2F4MjVfZmFtaWx5OworCWF4MjVfYWRkcmVzcwlzYXgyNV9jYWxsOworCWludAkJc2F4MjVfbmRpZ2lzOworCS8qIERpZ2lwZWF0ZXIgYXgyNV9hZGRyZXNzIHNldHMgZm9sbG93ICovCit9OworCisjZGVmaW5lIHNheDI1X3VpZAlzYXgyNV9uZGlnaXMKKworc3RydWN0IGZ1bGxfc29ja2FkZHJfYXgyNSB7CisJc3RydWN0IHNvY2thZGRyX2F4MjUgZnNhX2F4MjU7CisJYXgyNV9hZGRyZXNzCWZzYV9kaWdpcGVhdGVyW0FYMjVfTUFYX0RJR0lTXTsKK307CisKK3N0cnVjdCBheDI1X3JvdXRlc19zdHJ1Y3QgeworCWF4MjVfYWRkcmVzcwlwb3J0X2FkZHI7CisJYXgyNV9hZGRyZXNzCWRlc3RfYWRkcjsKKwl1bnNpZ25lZCBjaGFyCWRpZ2lfY291bnQ7CisJYXgyNV9hZGRyZXNzCWRpZ2lfYWRkcltBWDI1X01BWF9ESUdJU107Cit9OworCitzdHJ1Y3QgYXgyNV9yb3V0ZV9vcHRfc3RydWN0IHsKKwlheDI1X2FkZHJlc3MJcG9ydF9hZGRyOworCWF4MjVfYWRkcmVzcwlkZXN0X2FkZHI7CisJaW50CQljbWQ7CisJaW50CQlhcmc7Cit9OworCitzdHJ1Y3QgYXgyNV9jdGxfc3RydWN0IHsKKyAgICAgICAgYXgyNV9hZGRyZXNzICAgICAgICAgICAgcG9ydF9hZGRyOworICAgICAgICBheDI1X2FkZHJlc3MgICAgICAgICAgICBzb3VyY2VfYWRkcjsKKyAgICAgICAgYXgyNV9hZGRyZXNzICAgICAgICAgICAgZGVzdF9hZGRyOworICAgICAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgICBjbWQ7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgICAgICAgICAgIGFyZzsKKyAgICAgICAgdW5zaWduZWQgY2hhciAgICAgICAgICAgZGlnaV9jb3VudDsKKyAgICAgICAgYXgyNV9hZGRyZXNzICAgICAgICAgICAgZGlnaV9hZGRyW0FYMjVfTUFYX0RJR0lTXTsKK307CisKKy8qIHRoaXMgd2lsbCBnbyBhd2F5LiBQbGVhc2UgZG8gbm90IGV4cG9ydCB0byB1c2VyIGxhbmQgKi8KK3N0cnVjdCBheDI1X2luZm9fc3RydWN0X2RlcHJlY2F0ZWQgeworCXVuc2lnbmVkIGludAluMiwgbjJjb3VudDsKKwl1bnNpZ25lZCBpbnQJdDEsIHQxdGltZXI7CisJdW5zaWduZWQgaW50CXQyLCB0MnRpbWVyOworCXVuc2lnbmVkIGludAl0MywgdDN0aW1lcjsKKwl1bnNpZ25lZCBpbnQJaWRsZSwgaWRsZXRpbWVyOworCXVuc2lnbmVkIGludAlzdGF0ZTsKKwl1bnNpZ25lZCBpbnQJcmN2X3EsIHNuZF9xOworfTsKKworc3RydWN0IGF4MjVfaW5mb19zdHJ1Y3QgeworCXVuc2lnbmVkIGludAluMiwgbjJjb3VudDsKKwl1bnNpZ25lZCBpbnQJdDEsIHQxdGltZXI7CisJdW5zaWduZWQgaW50CXQyLCB0MnRpbWVyOworCXVuc2lnbmVkIGludAl0MywgdDN0aW1lcjsKKwl1bnNpZ25lZCBpbnQJaWRsZSwgaWRsZXRpbWVyOworCXVuc2lnbmVkIGludAlzdGF0ZTsKKwl1bnNpZ25lZCBpbnQJcmN2X3EsIHNuZF9xOworCXVuc2lnbmVkIGludAl2cywgdnIsIHZhLCB2c19tYXg7CisJdW5zaWduZWQgaW50CXBhY2xlbjsKKwl1bnNpZ25lZCBpbnQJd2luZG93OworfTsKKworc3RydWN0IGF4MjVfZndkX3N0cnVjdCB7CisJYXgyNV9hZGRyZXNzCXBvcnRfZnJvbTsKKwlheDI1X2FkZHJlc3MJcG9ydF90bzsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iMWxsaS5oIGIvaW5jbHVkZS9saW51eC9iMWxsaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxM2Y3MTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2IxbGxpLmgKQEAgLTAsMCArMSw3MyBAQAorLyogJElkOiBiMWxsaS5oLHYgMS44LjguMyAyMDAxLzA5LzIzIDIyOjI1OjA1IGthaSBFeHAgJAorICoKKyAqIElTRE4gbG93bGV2ZWwtbW9kdWxlIGZvciBBVk0gQjEtY2FyZC4KKyAqCisgKiBDb3B5cmlnaHQgMTk5NiBieSBDYXJzdGVuIFBhZXRoIChjYWxsZUBjYWxsZS5pbi1iZXJsaW4uZGUpCisgKgorICogVGhpcyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSB0ZXJtcworICogb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KKyAqCisgKi8KKworI2lmbmRlZiBfQjFMTElfSF8KKyNkZWZpbmUgX0IxTExJX0hfCisvKgorICogc3RydWN0IGZvciBsb2FkaW5nIHQ0IGZpbGUgCisgKi8KK3R5cGVkZWYgc3RydWN0IGF2bWIxX3Q0ZmlsZSB7CisJaW50IGxlbjsKKwl1bnNpZ25lZCBjaGFyICpkYXRhOworfSBhdm1iMV90NGZpbGU7CisKK3R5cGVkZWYgc3RydWN0IGF2bWIxX2xvYWRkZWYgeworCWludCBjb250cjsKKwlhdm1iMV90NGZpbGUgdDRmaWxlOworfSBhdm1iMV9sb2FkZGVmOworCit0eXBlZGVmIHN0cnVjdCBhdm1iMV9sb2FkYW5kY29uZmlnZGVmIHsKKwlpbnQgY29udHI7CisJYXZtYjFfdDRmaWxlIHQ0ZmlsZTsKKyAgICAgICAgYXZtYjFfdDRmaWxlIHQ0Y29uZmlnOyAKK30gYXZtYjFfbG9hZGFuZGNvbmZpZ2RlZjsKKwordHlwZWRlZiBzdHJ1Y3QgYXZtYjFfcmVzZXRkZWYgeworCWludCBjb250cjsKK30gYXZtYjFfcmVzZXRkZWY7CisKK3R5cGVkZWYgc3RydWN0IGF2bWIxX2dldGRlZiB7CisJaW50IGNvbnRyOworCWludCBjYXJkdHlwZTsKKwlpbnQgY2FyZHN0YXRlOworfSBhdm1iMV9nZXRkZWY7CisKKy8qCisgKiBzdHJ1Y3QgZm9yIGFkZGluZyBuZXcgY2FyZHMgCisgKi8KK3R5cGVkZWYgc3RydWN0IGF2bWIxX2NhcmRkZWYgeworCWludCBwb3J0OworCWludCBpcnE7Cit9IGF2bWIxX2NhcmRkZWY7CisKKyNkZWZpbmUgQVZNX0NBUkRUWVBFX0IxCQkwCisjZGVmaW5lIEFWTV9DQVJEVFlQRV9UMQkJMQorI2RlZmluZSBBVk1fQ0FSRFRZUEVfTTEJCTIKKyNkZWZpbmUgQVZNX0NBUkRUWVBFX00yCQkzCisKK3R5cGVkZWYgc3RydWN0IGF2bWIxX2V4dGNhcmRkZWYgeworCWludCBwb3J0OworCWludCBpcnE7CisgICAgICAgIGludCBjYXJkdHlwZTsKKyAgICAgICAgaW50IGNhcmRucjsgIC8qIGZvciBIRU1BL1QxICovCit9IGF2bWIxX2V4dGNhcmRkZWY7CisKKyNkZWZpbmUJQVZNQjFfTE9BRAkJMAkvKiBsb2FkIGltYWdlIHRvIGNhcmQgKi8KKyNkZWZpbmUgQVZNQjFfQUREQ0FSRAkJMQkvKiBhZGQgYSBuZXcgY2FyZCAtIE9CU09MRVRFICovCisjZGVmaW5lIEFWTUIxX1JFU0VUQ0FSRAkJMgkvKiByZXNldCBhIGNhcmQgKi8KKyNkZWZpbmUJQVZNQjFfTE9BRF9BTkRfQ09ORklHCTMJLyogbG9hZCBpbWFnZSBhbmQgY29uZmlnIHRvIGNhcmQgKi8KKyNkZWZpbmUJQVZNQjFfQUREQ0FSRF9XSVRIX1RZUEUJNAkvKiBhZGQgYSBuZXcgY2FyZCwgd2l0aCBjYXJkdHlwZSAqLworI2RlZmluZSBBVk1CMV9HRVRfQ0FSRElORk8JNQkvKiBnZXQgY2FyZHR5cGUgKi8KKyNkZWZpbmUgQVZNQjFfUkVNT1ZFQ0FSRAk2CS8qIHJlbW92ZSBhIGNhcmQgLSBPQlNPTEVURSAqLworCisjZGVmaW5lCUFWTUIxX1JFR0lTVEVSQ0FSRF9JU19PQlNPTEVURQorCisjZW5kaWYJCQkJLyogX0IxTExJX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2IxcGNtY2lhLmggYi9pbmNsdWRlL2xpbnV4L2IxcGNtY2lhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJhODY3YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvYjFwY21jaWEuaApAQCAtMCwwICsxLDIxIEBACisvKiAkSWQ6IGIxcGNtY2lhLmgsdiAxLjEuOC4yIDIwMDEvMDkvMjMgMjI6MjU6MDUga2FpIEV4cCAkCisgKgorICogRXhwb3J0ZWQgZnVuY3Rpb25zIG9mIG1vZHVsZSBiMXBjbWNpYSB0byBiZSBjYWxsZWQgYnkKKyAqIGF2bV9jcyBjYXJkIHNlcnZpY2VzIG1vZHVsZS4KKyAqCisgKiBDb3B5cmlnaHQgMTk5OSBieSBDYXJzdGVuIFBhZXRoIChjYWxsZUBjYWxsZS5pbi1iZXJsaW4uZGUpCisgKgorICogVGhpcyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSB0ZXJtcworICogb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KKyAqCisgKi8KKworI2lmbmRlZiBfQjFQQ01DSUFfSF8KKyNkZWZpbmUgX0IxUENNQ0lBX0hfCisKK2ludCBiMXBjbWNpYV9hZGRjYXJkX2IxKHVuc2lnbmVkIGludCBwb3J0LCB1bnNpZ25lZCBpcnEpOworaW50IGIxcGNtY2lhX2FkZGNhcmRfbTEodW5zaWduZWQgaW50IHBvcnQsIHVuc2lnbmVkIGlycSk7CitpbnQgYjFwY21jaWFfYWRkY2FyZF9tMih1bnNpZ25lZCBpbnQgcG9ydCwgdW5zaWduZWQgaXJxKTsKK2ludCBiMXBjbWNpYV9kZWxjYXJkKHVuc2lnbmVkIGludCBwb3J0LCB1bnNpZ25lZCBpcnEpOworCisjZW5kaWYJLyogX0IxUENNQ0lBX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JhY2tpbmctZGV2LmggYi9pbmNsdWRlL2xpbnV4L2JhY2tpbmctZGV2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdhMTM5MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvYmFja2luZy1kZXYuaApAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIGluY2x1ZGUvbGludXgvYmFja2luZy1kZXYuaAorICoKKyAqIGxvdy1sZXZlbCBkZXZpY2UgaW5mb3JtYXRpb24gYW5kIHN0YXRlIHdoaWNoIGlzIHByb3BhZ2F0ZWQgdXAgdGhyb3VnaAorICogdG8gaGlnaC1sZXZlbCBjb2RlLgorICovCisKKyNpZm5kZWYgX0xJTlVYX0JBQ0tJTkdfREVWX0gKKyNkZWZpbmUgX0xJTlVYX0JBQ0tJTkdfREVWX0gKKworI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKworLyoKKyAqIEJpdHMgaW4gYmFja2luZ19kZXZfaW5mby5zdGF0ZQorICovCitlbnVtIGJkaV9zdGF0ZSB7CisJQkRJX3BkZmx1c2gsCQkvKiBBIHBkZmx1c2ggdGhyZWFkIGlzIHdvcmtpbmcgdGhpcyBkZXZpY2UgKi8KKwlCRElfd3JpdGVfY29uZ2VzdGVkLAkvKiBUaGUgd3JpdGUgcXVldWUgaXMgZ2V0dGluZyBmdWxsICovCisJQkRJX3JlYWRfY29uZ2VzdGVkLAkvKiBUaGUgcmVhZCBxdWV1ZSBpcyBnZXR0aW5nIGZ1bGwgKi8KKwlCRElfdW51c2VkLAkJLyogQXZhaWxhYmxlIGJpdHMgc3RhcnQgaGVyZSAqLworfTsKKwordHlwZWRlZiBpbnQgKGNvbmdlc3RlZF9mbikodm9pZCAqLCBpbnQpOworCitzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyB7CisJdW5zaWduZWQgbG9uZyByYV9wYWdlczsJLyogbWF4IHJlYWRhaGVhZCBpbiBQQUdFX0NBQ0hFX1NJWkUgdW5pdHMgKi8KKwl1bnNpZ25lZCBsb25nIHN0YXRlOwkvKiBBbHdheXMgdXNlIGF0b21pYyBiaXRvcHMgb24gdGhpcyAqLworCXVuc2lnbmVkIGludCBjYXBhYmlsaXRpZXM7IC8qIERldmljZSBjYXBhYmlsaXRpZXMgKi8KKwljb25nZXN0ZWRfZm4gKmNvbmdlc3RlZF9mbjsgLyogRnVuY3Rpb24gcG9pbnRlciBpZiBkZXZpY2UgaXMgbWQvZG0gKi8KKwl2b2lkICpjb25nZXN0ZWRfZGF0YTsJLyogUG9pbnRlciB0byBhdXggZGF0YSBmb3IgY29uZ2VzdGVkIGZ1bmMgKi8KKwl2b2lkICgqdW5wbHVnX2lvX2ZuKShzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqLCBzdHJ1Y3QgcGFnZSAqKTsKKwl2b2lkICp1bnBsdWdfaW9fZGF0YTsKK307CisKKworLyoKKyAqIEZsYWdzIGluIGJhY2tpbmdfZGV2X2luZm86OmNhcGFiaWxpdHkKKyAqIC0gVGhlIGZpcnN0IHR3byBmbGFncyBjb250cm9sIHdoZXRoZXIgZGlydHkgcGFnZXMgd2lsbCBjb250cmlidXRlIHRvIHRoZQorICogICBWTSdzIGFjY291bnRpbmcgYW5kIHdoZXRoZXIgd3JpdGVwYWdlcygpIHNob3VsZCBiZSBjYWxsZWQgZm9yIGRpcnR5IHBhZ2VzCisgKiAgIChzb21ldGhpbmcgdGhhdCB3b3VsZCBub3QsIGZvciBleGFtcGxlLCBiZSBhcHByb3ByaWF0ZSBmb3IgcmFtZnMpCisgKiAtIFRoZXNlIGZsYWdzIGxldCAhTU1VIG1tYXAoKSBnb3Zlcm4gZGlyZWN0IGRldmljZSBtYXBwaW5nIHZzIGltbWVkaWF0ZQorICogICBjb3B5aW5nIG1vcmUgZWFzaWx5IGZvciBNQVBfUFJJVkFURSwgZXNwZWNpYWxseSBmb3IgUk9NIGZpbGVzeXN0ZW1zCisgKi8KKyNkZWZpbmUgQkRJX0NBUF9OT19BQ0NUX0RJUlRZCTB4MDAwMDAwMDEJLyogRGlydHkgcGFnZXMgc2hvdWxkbid0IGNvbnRyaWJ1dGUgdG8gYWNjb3VudGluZyAqLworI2RlZmluZSBCRElfQ0FQX05PX1dSSVRFQkFDSwkweDAwMDAwMDAyCS8qIERvbid0IHdyaXRlIHBhZ2VzIGJhY2sgKi8KKyNkZWZpbmUgQkRJX0NBUF9NQVBfQ09QWQkweDAwMDAwMDA0CS8qIENvcHkgY2FuIGJlIG1hcHBlZCAoTUFQX1BSSVZBVEUpICovCisjZGVmaW5lIEJESV9DQVBfTUFQX0RJUkVDVAkweDAwMDAwMDA4CS8qIENhbiBiZSBtYXBwZWQgZGlyZWN0bHkgKE1BUF9TSEFSRUQpICovCisjZGVmaW5lIEJESV9DQVBfUkVBRF9NQVAJMHgwMDAwMDAxMAkvKiBDYW4gYmUgbWFwcGVkIGZvciByZWFkaW5nICovCisjZGVmaW5lIEJESV9DQVBfV1JJVEVfTUFQCTB4MDAwMDAwMjAJLyogQ2FuIGJlIG1hcHBlZCBmb3Igd3JpdGluZyAqLworI2RlZmluZSBCRElfQ0FQX0VYRUNfTUFQCTB4MDAwMDAwNDAJLyogQ2FuIGJlIG1hcHBlZCBmb3IgZXhlY3V0aW9uICovCisjZGVmaW5lIEJESV9DQVBfVk1GTEFHUyBcCisJKEJESV9DQVBfUkVBRF9NQVAgfCBCRElfQ0FQX1dSSVRFX01BUCB8IEJESV9DQVBfRVhFQ19NQVApCisKKyNpZiBkZWZpbmVkKFZNX01BWVJFQUQpICYmIFwKKwkoQkRJX0NBUF9SRUFEX01BUCAhPSBWTV9NQVlSRUFEIHx8IFwKKwkgQkRJX0NBUF9XUklURV9NQVAgIT0gVk1fTUFZV1JJVEUgfHwgXAorCSBCRElfQ0FQX0VYRUNfTUFQICE9IFZNX01BWUVYRUMpCisjZXJyb3IgcGxlYXNlIGNoYW5nZSBiYWNraW5nX2Rldl9pbmZvOjpjYXBhYmlsaXRpZXMgZmxhZ3MKKyNlbmRpZgorCitleHRlcm4gc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gZGVmYXVsdF9iYWNraW5nX2Rldl9pbmZvOwordm9pZCBkZWZhdWx0X3VucGx1Z19pb19mbihzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpLCBzdHJ1Y3QgcGFnZSAqcGFnZSk7CisKK2ludCB3cml0ZWJhY2tfYWNxdWlyZShzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpKTsKK2ludCB3cml0ZWJhY2tfaW5fcHJvZ3Jlc3Moc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSk7Cit2b2lkIHdyaXRlYmFja19yZWxlYXNlKHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGkpOworCitzdGF0aWMgaW5saW5lIGludCBiZGlfY29uZ2VzdGVkKHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGksIGludCBiZGlfYml0cykKK3sKKwlpZiAoYmRpLT5jb25nZXN0ZWRfZm4pCisJCXJldHVybiBiZGktPmNvbmdlc3RlZF9mbihiZGktPmNvbmdlc3RlZF9kYXRhLCBiZGlfYml0cyk7CisJcmV0dXJuIChiZGktPnN0YXRlICYgYmRpX2JpdHMpOworfQorCitzdGF0aWMgaW5saW5lIGludCBiZGlfcmVhZF9jb25nZXN0ZWQoc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSkKK3sKKwlyZXR1cm4gYmRpX2Nvbmdlc3RlZChiZGksIDEgPDwgQkRJX3JlYWRfY29uZ2VzdGVkKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYmRpX3dyaXRlX2Nvbmdlc3RlZChzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpKQoreworCXJldHVybiBiZGlfY29uZ2VzdGVkKGJkaSwgMSA8PCBCRElfd3JpdGVfY29uZ2VzdGVkKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYmRpX3J3X2Nvbmdlc3RlZChzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpKQoreworCXJldHVybiBiZGlfY29uZ2VzdGVkKGJkaSwgKDEgPDwgQkRJX3JlYWRfY29uZ2VzdGVkKXwKKwkJCQkgICgxIDw8IEJESV93cml0ZV9jb25nZXN0ZWQpKTsKK30KKworI2RlZmluZSBiZGlfY2FwX3dyaXRlYmFja19kaXJ0eShiZGkpIFwKKwkoISgoYmRpKS0+Y2FwYWJpbGl0aWVzICYgQkRJX0NBUF9OT19XUklURUJBQ0spKQorCisjZGVmaW5lIGJkaV9jYXBfYWNjb3VudF9kaXJ0eShiZGkpIFwKKwkoISgoYmRpKS0+Y2FwYWJpbGl0aWVzICYgQkRJX0NBUF9OT19BQ0NUX0RJUlRZKSkKKworI2RlZmluZSBtYXBwaW5nX2NhcF93cml0ZWJhY2tfZGlydHkobWFwcGluZykgXAorCWJkaV9jYXBfd3JpdGViYWNrX2RpcnR5KChtYXBwaW5nKS0+YmFja2luZ19kZXZfaW5mbykKKworI2RlZmluZSBtYXBwaW5nX2NhcF9hY2NvdW50X2RpcnR5KG1hcHBpbmcpIFwKKwliZGlfY2FwX2FjY291bnRfZGlydHkoKG1hcHBpbmcpLT5iYWNraW5nX2Rldl9pbmZvKQorCisKKyNlbmRpZgkJLyogX0xJTlVYX0JBQ0tJTkdfREVWX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmFja2xpZ2h0LmggYi9pbmNsdWRlL2xpbnV4L2JhY2tsaWdodC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiOWU1NDMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2JhY2tsaWdodC5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBCYWNrbGlnaHQgTG93bGV2ZWwgQ29udHJvbCBBYnN0cmFjdGlvbgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMywyMDA0IEhld2xldHQtUGFja2FyZCBDb21wYW55CisgKgorICovCisKKyNpZm5kZWYgX0xJTlVYX0JBQ0tMSUdIVF9ICisjZGVmaW5lIF9MSU5VWF9CQUNLTElHSFRfSAorCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KKworc3RydWN0IGJhY2tsaWdodF9kZXZpY2U7CitzdHJ1Y3QgZmJfaW5mbzsKKworLyogVGhpcyBzdHJ1Y3R1cmUgZGVmaW5lcyBhbGwgdGhlIHByb3BlcnRpZXMgb2YgYSBiYWNrbGlnaHQKKyAgICh1c3VhbGx5IGF0dGFjaGVkIHRvIGEgTENEKS4gKi8KK3N0cnVjdCBiYWNrbGlnaHRfcHJvcGVydGllcyB7CisJLyogT3duZXIgbW9kdWxlICovCisJc3RydWN0IG1vZHVsZSAqb3duZXI7CisJLyogR2V0IHRoZSBiYWNrbGlnaHQgcG93ZXIgc3RhdHVzICgwOiBmdWxsIG9uLCAxLi4zOiBwb3dlciBzYXZpbmcKKwkgICBtb2RlczsgNDogZnVsbCBvZmYpLCBzZWUgRkJfQkxBTktfWFhYICovCisJaW50ICgqZ2V0X3Bvd2VyKShzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqKTsKKwkvKiBFbmFibGUgb3IgZGlzYWJsZSBwb3dlciB0byB0aGUgTENEICgwOiBvbjsgNDogb2ZmLCBzZWUgRkJfQkxBTktfWFhYKSAqLworCWludCAoKnNldF9wb3dlcikoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKiwgaW50IHBvd2VyKTsKKwkvKiBNYXhpbWFsIHZhbHVlIGZvciBicmlnaHRuZXNzIChyZWFkLW9ubHkpICovCisJaW50IG1heF9icmlnaHRuZXNzOworCS8qIEdldCBjdXJyZW50IGJhY2tsaWdodCBicmlnaHRuZXNzICovCisJaW50ICgqZ2V0X2JyaWdodG5lc3MpKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICopOworCS8qIFNldCBiYWNrbGlnaHQgYnJpZ2h0bmVzcyAoMC4ubWF4X2JyaWdodG5lc3MpICovCisJaW50ICgqc2V0X2JyaWdodG5lc3MpKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICosIGludCBicmlnaHRuZXNzKTsKKwkvKiBDaGVjayBpZiBnaXZlbiBmcmFtZWJ1ZmZlciBkZXZpY2UgaXMgdGhlIG9uZSBib3VuZCB0byB0aGlzIGJhY2tsaWdodDsKKwkgICByZXR1cm4gMCBpZiBub3QsICE9MCBpZiBpdCBpcy4gSWYgTlVMTCwgYmFja2xpZ2h0IGFsd2F5cyBtYXRjaGVzIHRoZSBmYi4gKi8KKwlpbnQgKCpjaGVja19mYikoc3RydWN0IGZiX2luZm8gKik7Cit9OworCitzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSB7CisJLyogVGhpcyBwcm90ZWN0cyB0aGUgJ3Byb3BzJyBmaWVsZC4gSWYgJ3Byb3BzJyBpcyBOVUxMLCB0aGUgZHJpdmVyIHRoYXQKKwkgICByZWdpc3RlcmVkIHRoaXMgZGV2aWNlIGhhcyBiZWVuIHVubG9hZGVkLCBhbmQgaWYgY2xhc3NfZ2V0X2RldmRhdGEoKQorCSAgIHBvaW50cyB0byBzb21ldGhpbmcgaW4gdGhlIGJvZHkgb2YgdGhhdCBkcml2ZXIsIGl0IGlzIGFsc28gaW52YWxpZC4gKi8KKwlzdHJ1Y3Qgc2VtYXBob3JlIHNlbTsKKwkvKiBJZiB0aGlzIGlzIE5VTEwsIHRoZSBiYWNraW5nIG1vZHVsZSBpcyB1bmxvYWRlZCAqLworCXN0cnVjdCBiYWNrbGlnaHRfcHJvcGVydGllcyAqcHJvcHM7CisJLyogVGhlIGZyYW1lYnVmZmVyIG5vdGlmaWVyIGJsb2NrICovCisJc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGZiX25vdGlmOworCS8qIFRoZSBjbGFzcyBkZXZpY2Ugc3RydWN0dXJlICovCisJc3RydWN0IGNsYXNzX2RldmljZSBjbGFzc19kZXY7Cit9OworCitleHRlcm4gc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoY29uc3QgY2hhciAqbmFtZSwKKwl2b2lkICpkZXZkYXRhLCBzdHJ1Y3QgYmFja2xpZ2h0X3Byb3BlcnRpZXMgKmJwKTsKK2V4dGVybiB2b2lkIGJhY2tsaWdodF9kZXZpY2VfdW5yZWdpc3RlcihzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQpOworCisjZGVmaW5lIHRvX2JhY2tsaWdodF9kZXZpY2Uob2JqKSBjb250YWluZXJfb2Yob2JqLCBzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSwgY2xhc3NfZGV2KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmF5Y29tLmggYi9pbmNsdWRlL2xpbnV4L2JheWNvbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxMjQ5ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2JheWNvbS5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBUaGUgTGludXggQkFZQ09NIGRyaXZlciBmb3IgdGhlIEJheWNvbSBzZXJpYWwgMTIwMCBiYXVkIG1vZGVtCisgKiBhbmQgdGhlIHBhcmFsbGVsIDk2MDAgYmF1ZCBtb2RlbQorICogKEMpIDE5OTctMTk5OCBieSBUaG9tYXMgU2FpbGVyLCBIQjlKTlgvQUU0V0EKKyAqLworCisjaWZuZGVmIF9CQVlDT01fSAorI2RlZmluZSBfQkFZQ09NX0gKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qCisgKiBzdHJ1Y3RzIGZvciB0aGUgSU9DVEwgY29tbWFuZHMKKyAqLworCitzdHJ1Y3QgYmF5Y29tX2RlYnVnX2RhdGEgeworCXVuc2lnbmVkIGxvbmcgZGVidWcxOworCXVuc2lnbmVkIGxvbmcgZGVidWcyOworCWxvbmcgZGVidWczOworfTsKKworc3RydWN0IGJheWNvbV9pb2N0bCB7CisJaW50IGNtZDsKKwl1bmlvbiB7CisJCXN0cnVjdCBiYXljb21fZGVidWdfZGF0YSBkYmc7CisJfSBkYXRhOworfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAqIGlvY3RsIHZhbHVlcyBjaGFuZ2UgZm9yIGJheWNvbQorICovCisjZGVmaW5lIEJBWUNPTUNUTF9HRVRERUJVRyAgICAgICAweDkyCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNlbmRpZiAvKiBfQkFZQ09NX0ggKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JjZC5oIGIvaW5jbHVkZS9saW51eC9iY2QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTQ1MzA4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9iY2QuaApAQCAtMCwwICsxLDIwIEBACisvKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGNvcHksIG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRoaXMgY29kZQorICogaW4gdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIFZlcnNpb24gMiBvciBsYXRlciwKKyAqIGF0IHlvdXIgb3B0aW9uLgorICovCisKKy8qIG1hY3JvcyB0byB0cmFuc2xhdGUgdG8vZnJvbSBiaW5hcnkgYW5kIGJpbmFyeS1jb2RlZCBkZWNpbWFsIChmcmVxdWVudGx5CisgKiBmb3VuZCBpbiBSVEMgY2hpcHMpLgorICovCisKKyNpZm5kZWYgX0JDRF9ICisjZGVmaW5lIF9CQ0RfSAorCisjZGVmaW5lIEJDRDJCSU4odmFsKQkoKCh2YWwpICYgMHgwZikgKyAoKHZhbCk+PjQpKjEwKQorI2RlZmluZSBCSU4yQkNEKHZhbCkJKCgoKHZhbCkvMTApPDw0KSArICh2YWwpJTEwKQorCisvKiBiYWNrd2FyZHMgY29tcGF0ICovCisjZGVmaW5lIEJDRF9UT19CSU4odmFsKSAoKHZhbCk9QkNEMkJJTih2YWwpKQorI2RlZmluZSBCSU5fVE9fQkNEKHZhbCkgKCh2YWwpPUJJTjJCQ0QodmFsKSkKKworI2VuZGlmIC8qIF9CQ0RfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iZnNfZnMuaCBiL2luY2x1ZGUvbGludXgvYmZzX2ZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdmMDkxMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvYmZzX2ZzLmgKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqCWluY2x1ZGUvbGludXgvYmZzX2ZzLmggLSBCRlMgZGF0YSBzdHJ1Y3R1cmVzIG9uIGRpc2suCisgKglDb3B5cmlnaHQgKEMpIDE5OTkgVGlncmFuIEFpdmF6aWFuIDx0aWdyYW5AdmVyaXRhcy5jb20+CisgKi8KKworI2lmbmRlZiBfTElOVVhfQkZTX0ZTX0gKKyNkZWZpbmUgX0xJTlVYX0JGU19GU19ICisKKyNkZWZpbmUgQkZTX0JTSVpFX0JJVFMJCTkKKyNkZWZpbmUgQkZTX0JTSVpFCQkoMTw8QkZTX0JTSVpFX0JJVFMpCisKKyNkZWZpbmUgQkZTX01BR0lDCQkweDFCQURGQUNFCisjZGVmaW5lIEJGU19ST09UX0lOTwkJMgorI2RlZmluZSBCRlNfSU5PREVTX1BFUl9CTE9DSwk4CisKKy8qIFNWUjQgdm5vZGUgdHlwZSB2YWx1ZXMgKGJmc19pbm9kZS0+aV92dHlwZSkgKi8KKyNkZWZpbmUgQkZTX1ZESVIJCTIKKyNkZWZpbmUgQkZTX1ZSRUcJCTEKKworLyogQkZTIGlub2RlIGxheW91dCBvbiBkaXNrICovCitzdHJ1Y3QgYmZzX2lub2RlIHsKKwlfX3UxNiBpX2lubzsKKwlfX3UxNiBpX3VudXNlZDsKKwlfX3UzMiBpX3NibG9jazsKKwlfX3UzMiBpX2VibG9jazsKKwlfX3UzMiBpX2VvZmZzZXQ7CisJX191MzIgaV92dHlwZTsKKwlfX3UzMiBpX21vZGU7CisJX19zMzIgaV91aWQ7CisJX19zMzIgaV9naWQ7CisJX191MzIgaV9ubGluazsKKwlfX3UzMiBpX2F0aW1lOworCV9fdTMyIGlfbXRpbWU7CisJX191MzIgaV9jdGltZTsKKwlfX3UzMiBpX3BhZGRpbmdbNF07Cit9OworCisjZGVmaW5lIEJGU19OQU1FTEVOCQkxNAkKKyNkZWZpbmUgQkZTX0RJUkVOVF9TSVpFCQkxNgorI2RlZmluZSBCRlNfRElSU19QRVJfQkxPQ0sJMzIKKworc3RydWN0IGJmc19kaXJlbnQgeworCV9fdTE2IGlubzsKKwljaGFyIG5hbWVbQkZTX05BTUVMRU5dOworfTsKKworLyogQkZTIHN1cGVyYmxvY2sgbGF5b3V0IG9uIGRpc2sgKi8KK3N0cnVjdCBiZnNfc3VwZXJfYmxvY2sgeworCV9fdTMyIHNfbWFnaWM7CisJX191MzIgc19zdGFydDsKKwlfX3UzMiBzX2VuZDsKKwlfX3MzMiBzX2Zyb207CisJX19zMzIgc190bzsKKwlfX3MzMiBzX2Jmcm9tOworCV9fczMyIHNfYnRvOworCWNoYXIgIHNfZnNuYW1lWzZdOworCWNoYXIgIHNfdm9sdW1lWzZdOworCV9fdTMyIHNfcGFkZGluZ1sxMThdOworfTsKKworI2RlZmluZSBCRlNfTlpGSUxFU0laRShpcCkgXAorICAgICAgICAoKChpcCktPmlfZW9mZnNldCArIDEpIC0gKGlwKS0+aV9zYmxvY2sgKiBCRlNfQlNJWkUpCisKKyNkZWZpbmUgQkZTX0ZJTEVTSVpFKGlwKSBcCisgICAgICAgICgoaXApLT5pX3NibG9jayA9PSAwID8gMCA6IEJGU19OWkZJTEVTSVpFKGlwKSkKKworI2RlZmluZSBCRlNfRklMRUJMT0NLUyhpcCkgXAorICAgICAgICAoKGlwKS0+aV9zYmxvY2sgPT0gMCA/IDAgOiAoKGlwKS0+aV9lYmxvY2sgKyAxKSAtIChpcCktPmlfc2Jsb2NrKQorCisjZGVmaW5lIEJGU19PRkYySU5PKG9mZnNldCkgXAorICAgICAgICAoKCgob2Zmc2V0KSAtIEJGU19CU0laRSkgLyBzaXplb2Yoc3RydWN0IGJmc19pbm9kZSkpICsgQkZTX1JPT1RfSU5PKQorCisjZGVmaW5lIEJGU19JTk8yT0ZGKGlubykgXAorCSgoX191MzIpKCgoaW5vKSAtIEJGU19ST09UX0lOTykgKiBzaXplb2Yoc3RydWN0IGJmc19pbm9kZSkpICsgQkZTX0JTSVpFKQorCisjZGVmaW5lIEJGU19VTkNMRUFOKGJmc19zYiwgc2IpCVwKKwkoKGJmc19zYi0+c19mcm9tICE9IC0xKSAmJiAoYmZzX3NiLT5zX3RvICE9IC0xKSAmJiAhKHNiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKSkKKworI2VuZGlmCS8qIF9MSU5VWF9CRlNfRlNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iaW5mbXRzLmggYi9pbmNsdWRlL2xpbnV4L2JpbmZtdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGY4MjA4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9iaW5mbXRzLmgKQEAgLTAsMCArMSw4NyBAQAorI2lmbmRlZiBfTElOVVhfQklORk1UU19ICisjZGVmaW5lIF9MSU5VWF9CSU5GTVRTX0gKKworI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KKworc3RydWN0IHB0X3JlZ3M7CisKKy8qCisgKiBNQVhfQVJHX1BBR0VTIGRlZmluZXMgdGhlIG51bWJlciBvZiBwYWdlcyBhbGxvY2F0ZWQgZm9yIGFyZ3VtZW50cworICogYW5kIGVudmVsb3BlIGZvciB0aGUgbmV3IHByb2dyYW0uIDMyIHNob3VsZCBzdWZmaWNlLCB0aGlzIGdpdmVzCisgKiBhIG1heGltdW0gZW52K2FyZyBvZiAxMjhrQiB3LzRLQiBwYWdlcyEKKyAqLworI2RlZmluZSBNQVhfQVJHX1BBR0VTIDMyCisKKy8qIHNpemVvZihsaW51eF9iaW5wcm0tPmJ1ZikgKi8KKyNkZWZpbmUgQklOUFJNX0JVRl9TSVpFIDEyOAorCisjaWZkZWYgX19LRVJORUxfXworCisvKgorICogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBob2xkIHRoZSBhcmd1bWVudHMgdGhhdCBhcmUgdXNlZCB3aGVuIGxvYWRpbmcgYmluYXJpZXMuCisgKi8KK3N0cnVjdCBsaW51eF9iaW5wcm17CisJY2hhciBidWZbQklOUFJNX0JVRl9TSVpFXTsKKwlzdHJ1Y3QgcGFnZSAqcGFnZVtNQVhfQVJHX1BBR0VTXTsKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKKwl1bnNpZ25lZCBsb25nIHA7IC8qIGN1cnJlbnQgdG9wIG9mIG1lbSAqLworCWludCBzaF9iYW5nOworCXN0cnVjdCBmaWxlICogZmlsZTsKKwlpbnQgZV91aWQsIGVfZ2lkOworCWtlcm5lbF9jYXBfdCBjYXBfaW5oZXJpdGFibGUsIGNhcF9wZXJtaXR0ZWQsIGNhcF9lZmZlY3RpdmU7CisJdm9pZCAqc2VjdXJpdHk7CisJaW50IGFyZ2MsIGVudmM7CisJY2hhciAqIGZpbGVuYW1lOwkvKiBOYW1lIG9mIGJpbmFyeSBhcyBzZWVuIGJ5IHByb2NwcyAqLworCWNoYXIgKiBpbnRlcnA7CQkvKiBOYW1lIG9mIHRoZSBiaW5hcnkgcmVhbGx5IGV4ZWN1dGVkLiBNb3N0CisJCQkJICAgb2YgdGhlIHRpbWUgc2FtZSBhcyBmaWxlbmFtZSwgYnV0IGNvdWxkIGJlCisJCQkJICAgZGlmZmVyZW50IGZvciBiaW5mbXRfe21pc2Msc2NyaXB0fSAqLworCXVuc2lnbmVkIGludGVycF9mbGFnczsKKwl1bnNpZ25lZCBpbnRlcnBfZGF0YTsKKwl1bnNpZ25lZCBsb25nIGxvYWRlciwgZXhlYzsKK307CisKKyNkZWZpbmUgQklOUFJNX0ZMQUdTX0VORk9SQ0VfTk9ORFVNUF9CSVQgMAorI2RlZmluZSBCSU5QUk1fRkxBR1NfRU5GT1JDRV9OT05EVU1QICgxIDw8IEJJTlBSTV9GTEFHU19FTkZPUkNFX05PTkRVTVBfQklUKQorCisvKiBmZCBvZiB0aGUgYmluYXJ5IHNob3VsZCBiZSBwYXNzZWQgdG8gdGhlIGludGVycHJldGVyICovCisjZGVmaW5lIEJJTlBSTV9GTEFHU19FWEVDRkRfQklUIDEKKyNkZWZpbmUgQklOUFJNX0ZMQUdTX0VYRUNGRCAoMSA8PCBCSU5QUk1fRkxBR1NfRVhFQ0ZEX0JJVCkKKworCisvKgorICogVGhpcyBzdHJ1Y3R1cmUgZGVmaW5lcyB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlIHVzZWQgdG8gbG9hZCB0aGUgYmluYXJ5IGZvcm1hdHMgdGhhdAorICogbGludXggYWNjZXB0cy4KKyAqLworc3RydWN0IGxpbnV4X2JpbmZtdCB7CisJc3RydWN0IGxpbnV4X2JpbmZtdCAqIG5leHQ7CisJc3RydWN0IG1vZHVsZSAqbW9kdWxlOworCWludCAoKmxvYWRfYmluYXJ5KShzdHJ1Y3QgbGludXhfYmlucHJtICosIHN0cnVjdCAgcHRfcmVncyAqIHJlZ3MpOworCWludCAoKmxvYWRfc2hsaWIpKHN0cnVjdCBmaWxlICopOworCWludCAoKmNvcmVfZHVtcCkobG9uZyBzaWduciwgc3RydWN0IHB0X3JlZ3MgKiByZWdzLCBzdHJ1Y3QgZmlsZSAqIGZpbGUpOworCXVuc2lnbmVkIGxvbmcgbWluX2NvcmVkdW1wOwkvKiBtaW5pbWFsIGR1bXAgc2l6ZSAqLworfTsKKworZXh0ZXJuIGludCByZWdpc3Rlcl9iaW5mbXQoc3RydWN0IGxpbnV4X2JpbmZtdCAqKTsKK2V4dGVybiBpbnQgdW5yZWdpc3Rlcl9iaW5mbXQoc3RydWN0IGxpbnV4X2JpbmZtdCAqKTsKKworZXh0ZXJuIGludCBwcmVwYXJlX2JpbnBybShzdHJ1Y3QgbGludXhfYmlucHJtICopOworZXh0ZXJuIHZvaWQgcmVtb3ZlX2FyZ196ZXJvKHN0cnVjdCBsaW51eF9iaW5wcm0gKik7CitleHRlcm4gaW50IHNlYXJjaF9iaW5hcnlfaGFuZGxlcihzdHJ1Y3QgbGludXhfYmlucHJtICosc3RydWN0IHB0X3JlZ3MgKik7CitleHRlcm4gaW50IGZsdXNoX29sZF9leGVjKHN0cnVjdCBsaW51eF9iaW5wcm0gKiBicHJtKTsKKworLyogU3RhY2sgYXJlYSBwcm90ZWN0aW9ucyAqLworI2RlZmluZSBFWFNUQUNLX0RFRkFVTFQgICAwCS8qIFdoYXRldmVyIHRoZSBhcmNoIGRlZmF1bHRzIHRvICovCisjZGVmaW5lIEVYU1RBQ0tfRElTQUJMRV9YIDEJLyogRGlzYWJsZSBleGVjdXRhYmxlIHN0YWNrcyAqLworI2RlZmluZSBFWFNUQUNLX0VOQUJMRV9YICAyCS8qIEVuYWJsZSBleGVjdXRhYmxlIHN0YWNrcyAqLworCitleHRlcm4gaW50IHNldHVwX2FyZ19wYWdlcyhzdHJ1Y3QgbGludXhfYmlucHJtICogYnBybSwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgc3RhY2tfdG9wLAorCQkJICAgaW50IGV4ZWN1dGFibGVfc3RhY2spOworZXh0ZXJuIGludCBjb3B5X3N0cmluZ3MoaW50IGFyZ2MsY2hhciBfX3VzZXIgKiBfX3VzZXIgKiBhcmd2LHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pOyAKK2V4dGVybiBpbnQgY29weV9zdHJpbmdzX2tlcm5lbChpbnQgYXJnYyxjaGFyICoqIGFyZ3Ysc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSk7CitleHRlcm4gdm9pZCBjb21wdXRlX2NyZWRzKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJpbnBybSk7CitleHRlcm4gaW50IGRvX2NvcmVkdW1wKGxvbmcgc2lnbnIsIGludCBleGl0X2NvZGUsIHN0cnVjdCBwdF9yZWdzICogcmVncyk7CitleHRlcm4gaW50IHNldF9iaW5mbXQoc3RydWN0IGxpbnV4X2JpbmZtdCAqbmV3KTsKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAvKiBfTElOVVhfQklORk1UU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jpby5oIGIvaW5jbHVkZS9saW51eC9iaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzgwMjI3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9iaW8uaApAQCAtMCwwICsxLDMzOSBAQAorLyoKKyAqIDIuNSBibG9jayBJL08gbW9kZWwKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgSmVucyBBeGJvZSA8YXhib2VAc3VzZS5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKworICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLQorICovCisjaWZuZGVmIF9fTElOVVhfQklPX0gKKyNkZWZpbmUgX19MSU5VWF9CSU9fSAorCisjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L21lbXBvb2wuaD4KKworLyogUGxhdGZvcm1zIG1heSBzZXQgdGhpcyB0byB0ZWFjaCB0aGUgQklPIGxheWVyIGFib3V0IElPTU1VIGhhcmR3YXJlLiAqLworI2luY2x1ZGUgPGFzbS9pby5oPgorCisjaWYgZGVmaW5lZChCSU9fVk1FUkdFX01BWF9TSVpFKSAmJiBkZWZpbmVkKEJJT19WTUVSR0VfQk9VTkRBUlkpCisjZGVmaW5lIEJJT1ZFQ19WSVJUX1NUQVJUX1NJWkUoeCkgKGJ2ZWNfdG9fcGh5cyh4KSAmIChCSU9fVk1FUkdFX0JPVU5EQVJZIC0gMSkpCisjZGVmaW5lIEJJT1ZFQ19WSVJUX09WRVJTSVpFKHgpCSgoeCkgPiBCSU9fVk1FUkdFX01BWF9TSVpFKQorI2Vsc2UKKyNkZWZpbmUgQklPVkVDX1ZJUlRfU1RBUlRfU0laRSh4KQkwCisjZGVmaW5lIEJJT1ZFQ19WSVJUX09WRVJTSVpFKHgpCQkwCisjZW5kaWYKKworI2lmbmRlZiBCSU9fVk1FUkdFX0JPVU5EQVJZCisjZGVmaW5lIEJJT19WTUVSR0VfQk9VTkRBUlkJMAorI2VuZGlmCisKKyNkZWZpbmUgQklPX0RFQlVHCisKKyNpZmRlZiBCSU9fREVCVUcKKyNkZWZpbmUgQklPX0JVR19PTglCVUdfT04KKyNlbHNlCisjZGVmaW5lIEJJT19CVUdfT04KKyNlbmRpZgorCisjZGVmaW5lIEJJT19NQVhfUEFHRVMJCSgyNTYpCisjZGVmaW5lIEJJT19NQVhfU0laRQkJKEJJT19NQVhfUEFHRVMgPDwgUEFHRV9DQUNIRV9TSElGVCkKKyNkZWZpbmUgQklPX01BWF9TRUNUT1JTCQkoQklPX01BWF9TSVpFID4+IDkpCisKKy8qCisgKiB3YXMgdW5zaWduZWQgc2hvcnQsIGJ1dCB3ZSBtaWdodCBhcyB3ZWxsIGJlIHJlYWR5IGZvciA+IDY0a0IgSS9PIHBhZ2VzCisgKi8KK3N0cnVjdCBiaW9fdmVjIHsKKwlzdHJ1Y3QgcGFnZQkqYnZfcGFnZTsKKwl1bnNpZ25lZCBpbnQJYnZfbGVuOworCXVuc2lnbmVkIGludAlidl9vZmZzZXQ7Cit9OworCitzdHJ1Y3QgYmlvX3NldDsKK3N0cnVjdCBiaW87Cit0eXBlZGVmIGludCAoYmlvX2VuZF9pb190KSAoc3RydWN0IGJpbyAqLCB1bnNpZ25lZCBpbnQsIGludCk7Cit0eXBlZGVmIHZvaWQgKGJpb19kZXN0cnVjdG9yX3QpIChzdHJ1Y3QgYmlvICopOworCisvKgorICogbWFpbiB1bml0IG9mIEkvTyBmb3IgdGhlIGJsb2NrIGxheWVyIGFuZCBsb3dlciBsYXllcnMgKGllIGRyaXZlcnMgYW5kCisgKiBzdGFja2luZyBkcml2ZXJzKQorICovCitzdHJ1Y3QgYmlvIHsKKwlzZWN0b3JfdAkJYmlfc2VjdG9yOworCXN0cnVjdCBiaW8JCSpiaV9uZXh0OwkvKiByZXF1ZXN0IHF1ZXVlIGxpbmsgKi8KKwlzdHJ1Y3QgYmxvY2tfZGV2aWNlCSpiaV9iZGV2OworCXVuc2lnbmVkIGxvbmcJCWJpX2ZsYWdzOwkvKiBzdGF0dXMsIGNvbW1hbmQsIGV0YyAqLworCXVuc2lnbmVkIGxvbmcJCWJpX3J3OwkJLyogYm90dG9tIGJpdHMgUkVBRC9XUklURSwKKwkJCQkJCSAqIHRvcCBiaXRzIHByaW9yaXR5CisJCQkJCQkgKi8KKworCXVuc2lnbmVkIHNob3J0CQliaV92Y250OwkvKiBob3cgbWFueSBiaW9fdmVjJ3MgKi8KKwl1bnNpZ25lZCBzaG9ydAkJYmlfaWR4OwkJLyogY3VycmVudCBpbmRleCBpbnRvIGJ2bF92ZWMgKi8KKworCS8qIE51bWJlciBvZiBzZWdtZW50cyBpbiB0aGlzIEJJTyBhZnRlcgorCSAqIHBoeXNpY2FsIGFkZHJlc3MgY29hbGVzY2luZyBpcyBwZXJmb3JtZWQuCisJICovCisJdW5zaWduZWQgc2hvcnQJCWJpX3BoeXNfc2VnbWVudHM7CisKKwkvKiBOdW1iZXIgb2Ygc2VnbWVudHMgYWZ0ZXIgcGh5c2ljYWwgYW5kIERNQSByZW1hcHBpbmcKKwkgKiBoYXJkd2FyZSBjb2FsZXNjaW5nIGlzIHBlcmZvcm1lZC4KKwkgKi8KKwl1bnNpZ25lZCBzaG9ydAkJYmlfaHdfc2VnbWVudHM7CisKKwl1bnNpZ25lZCBpbnQJCWJpX3NpemU7CS8qIHJlc2lkdWFsIEkvTyBjb3VudCAqLworCisJLyoKKwkgKiBUbyBrZWVwIHRyYWNrIG9mIHRoZSBtYXggaHcgc2l6ZSwgd2UgYWNjb3VudCBmb3IgdGhlCisJICogc2l6ZXMgb2YgdGhlIGZpcnN0IGFuZCBsYXN0IHZpcnR1YWxseSBtZXJnZWFibGUgc2VnbWVudHMKKwkgKiBpbiB0aGlzIGJpbworCSAqLworCXVuc2lnbmVkIGludAkJYmlfaHdfZnJvbnRfc2l6ZTsKKwl1bnNpZ25lZCBpbnQJCWJpX2h3X2JhY2tfc2l6ZTsKKworCXVuc2lnbmVkIGludAkJYmlfbWF4X3ZlY3M7CS8qIG1heCBidmxfdmVjcyB3ZSBjYW4gaG9sZCAqLworCisJc3RydWN0IGJpb192ZWMJCSpiaV9pb192ZWM7CS8qIHRoZSBhY3R1YWwgdmVjIGxpc3QgKi8KKworCWJpb19lbmRfaW9fdAkJKmJpX2VuZF9pbzsKKwlhdG9taWNfdAkJYmlfY250OwkJLyogcGluIGNvdW50ICovCisKKwl2b2lkCQkJKmJpX3ByaXZhdGU7CisKKwliaW9fZGVzdHJ1Y3Rvcl90CSpiaV9kZXN0cnVjdG9yOwkvKiBkZXN0cnVjdG9yICovCisJc3RydWN0IGJpb19zZXQJCSpiaV9zZXQ7CS8qIG1lbW9yeSBwb29scyBzZXQgKi8KK307CisKKy8qCisgKiBiaW8gZmxhZ3MKKyAqLworI2RlZmluZSBCSU9fVVBUT0RBVEUJMAkvKiBvayBhZnRlciBJL08gY29tcGxldGlvbiAqLworI2RlZmluZSBCSU9fUldfQkxPQ0sJMQkvKiBSV19BSEVBRCBzZXQsIGFuZCByZWFkL3dyaXRlIHdvdWxkIGJsb2NrICovCisjZGVmaW5lIEJJT19FT0YJCTIJLyogb3V0LW91dC1ib3VuZHMgZXJyb3IgKi8KKyNkZWZpbmUgQklPX1NFR19WQUxJRAkzCS8qIG5yX2h3X3NlZyB2YWxpZCAqLworI2RlZmluZSBCSU9fQ0xPTkVECTQJLyogZG9lc24ndCBvd24gZGF0YSAqLworI2RlZmluZSBCSU9fQk9VTkNFRAk1CS8qIGJpbyBpcyBhIGJvdW5jZSBiaW8gKi8KKyNkZWZpbmUgQklPX1VTRVJfTUFQUEVEIDYJLyogY29udGFpbnMgdXNlciBwYWdlcyAqLworI2RlZmluZSBCSU9fRU9QTk9UU1VQUAk3CS8qIG5vdCBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUgYmlvX2ZsYWdnZWQoYmlvLCBmbGFnKQkoKGJpbyktPmJpX2ZsYWdzICYgKDEgPDwgKGZsYWcpKSkKKworLyoKKyAqIHRvcCA0IGJpdHMgb2YgYmlvIGZsYWdzIGluZGljYXRlIHRoZSBwb29sIHRoaXMgYmlvIGNhbWUgZnJvbQorICovCisjZGVmaW5lIEJJT19QT09MX0JJVFMJCSg0KQorI2RlZmluZSBCSU9fUE9PTF9PRkZTRVQJCShCSVRTX1BFUl9MT05HIC0gQklPX1BPT0xfQklUUykKKyNkZWZpbmUgQklPX1BPT0xfTUFTSwkJKDFVTCA8PCBCSU9fUE9PTF9PRkZTRVQpCisjZGVmaW5lIEJJT19QT09MX0lEWChiaW8pCSgoYmlvKS0+YmlfZmxhZ3MgPj4gQklPX1BPT0xfT0ZGU0VUKQkKKworLyoKKyAqIGJpbyBiaV9ydyBmbGFncworICoKKyAqIGJpdCAwIC0tIHJlYWQgKG5vdCBzZXQpIG9yIHdyaXRlIChzZXQpCisgKiBiaXQgMSAtLSBydy1haGVhZCB3aGVuIHNldAorICogYml0IDIgLS0gYmFycmllcgorICogYml0IDMgLS0gZmFpbCBmYXN0LCBkb24ndCB3YW50IGxvdyBsZXZlbCBkcml2ZXIgcmV0cmllcworICogYml0IDQgLS0gc3luY2hyb25vdXMgSS9PIGhpbnQ6IHRoZSBibG9jayBsYXllciB3aWxsIHVucGx1ZyBpbW1lZGlhdGVseQorICovCisjZGVmaW5lIEJJT19SVwkJMAorI2RlZmluZSBCSU9fUldfQUhFQUQJMQorI2RlZmluZSBCSU9fUldfQkFSUklFUgkyCisjZGVmaW5lIEJJT19SV19GQUlMRkFTVAkzCisjZGVmaW5lIEJJT19SV19TWU5DCTQKKworLyoKKyAqIHZhcmlvdXMgbWVtYmVyIGFjY2Vzcywgbm90ZSB0aGF0IGJpb19kYXRhIHNob3VsZCBvZiBjb3Vyc2Ugbm90IGJlIHVzZWQKKyAqIG9uIGhpZ2htZW0gcGFnZSB2ZWN0b3JzCisgKi8KKyNkZWZpbmUgYmlvX2lvdmVjX2lkeChiaW8sIGlkeCkJKCYoKGJpbyktPmJpX2lvX3ZlY1soaWR4KV0pKQorI2RlZmluZSBiaW9faW92ZWMoYmlvKQkJYmlvX2lvdmVjX2lkeCgoYmlvKSwgKGJpbyktPmJpX2lkeCkKKyNkZWZpbmUgYmlvX3BhZ2UoYmlvKQkJYmlvX2lvdmVjKChiaW8pKS0+YnZfcGFnZQorI2RlZmluZSBiaW9fb2Zmc2V0KGJpbykJCWJpb19pb3ZlYygoYmlvKSktPmJ2X29mZnNldAorI2RlZmluZSBiaW9fc2VnbWVudHMoYmlvKQkoKGJpbyktPmJpX3ZjbnQgLSAoYmlvKS0+YmlfaWR4KQorI2RlZmluZSBiaW9fc2VjdG9ycyhiaW8pCSgoYmlvKS0+Ymlfc2l6ZSA+PiA5KQorI2RlZmluZSBiaW9fY3VyX3NlY3RvcnMoYmlvKQkoYmlvX2lvdmVjKGJpbyktPmJ2X2xlbiA+PiA5KQorI2RlZmluZSBiaW9fZGF0YShiaW8pCQkocGFnZV9hZGRyZXNzKGJpb19wYWdlKChiaW8pKSkgKyBiaW9fb2Zmc2V0KChiaW8pKSkKKyNkZWZpbmUgYmlvX2JhcnJpZXIoYmlvKQkoKGJpbyktPmJpX3J3ICYgKDEgPDwgQklPX1JXX0JBUlJJRVIpKQorI2RlZmluZSBiaW9fc3luYyhiaW8pCQkoKGJpbyktPmJpX3J3ICYgKDEgPDwgQklPX1JXX1NZTkMpKQorI2RlZmluZSBiaW9fZmFpbGZhc3QoYmlvKQkoKGJpbyktPmJpX3J3ICYgKDEgPDwgQklPX1JXX0ZBSUxGQVNUKSkKKyNkZWZpbmUgYmlvX3J3X2FoZWFkKGJpbykJKChiaW8pLT5iaV9ydyAmICgxIDw8IEJJT19SV19BSEVBRCkpCisKKy8qCisgKiB3aWxsIGRpZQorICovCisjZGVmaW5lIGJpb190b19waHlzKGJpbykJKHBhZ2VfdG9fcGh5cyhiaW9fcGFnZSgoYmlvKSkpICsgKHVuc2lnbmVkIGxvbmcpIGJpb19vZmZzZXQoKGJpbykpKQorI2RlZmluZSBidmVjX3RvX3BoeXMoYnYpCShwYWdlX3RvX3BoeXMoKGJ2KS0+YnZfcGFnZSkgKyAodW5zaWduZWQgbG9uZykgKGJ2KS0+YnZfb2Zmc2V0KQorCisvKgorICogcXVldWVzIHRoYXQgaGF2ZSBoaWdobWVtIHN1cHBvcnQgZW5hYmxlZCBtYXkgc3RpbGwgbmVlZCB0byByZXZlcnQgdG8KKyAqIFBJTyB0cmFuc2ZlcnMgb2NjYXNpb25hbGx5IGFuZCB0aHVzIG1hcCBoaWdoIHBhZ2VzIHRlbXBvcmFyaWx5LiBGb3IKKyAqIHBlcm1hbmVudCBQSU8gZmFsbCBiYWNrLCB1c2VyIGlzIHByb2JhYmx5IGJldHRlciBvZmYgZGlzYWJsaW5nIGhpZ2htZW0KKyAqIEkvTyBjb21wbGV0ZWx5IG9uIHRoYXQgcXVldWUgKHNlZSBpZGUtZG1hIGZvciBleGFtcGxlKQorICovCisjZGVmaW5lIF9fYmlvX2ttYXBfYXRvbWljKGJpbywgaWR4LCBrbXR5cGUpCQkJCVwKKwkoa21hcF9hdG9taWMoYmlvX2lvdmVjX2lkeCgoYmlvKSwgKGlkeCkpLT5idl9wYWdlLCBrbXR5cGUpICsJXAorCQliaW9faW92ZWNfaWR4KChiaW8pLCAoaWR4KSktPmJ2X29mZnNldCkKKworI2RlZmluZSBfX2Jpb19rdW5tYXBfYXRvbWljKGFkZHIsIGttdHlwZSkga3VubWFwX2F0b21pYyhhZGRyLCBrbXR5cGUpCisKKy8qCisgKiBtZXJnZSBoZWxwZXJzIGV0YworICovCisKKyNkZWZpbmUgX19CVkVDX0VORChiaW8pCQliaW9faW92ZWNfaWR4KChiaW8pLCAoYmlvKS0+YmlfdmNudCAtIDEpCisjZGVmaW5lIF9fQlZFQ19TVEFSVChiaW8pCWJpb19pb3ZlY19pZHgoKGJpbyksIChiaW8pLT5iaV9pZHgpCisKKy8qCisgKiBhbGxvdyBhcmNoIG92ZXJyaWRlLCBmb3IgZWcgdmlydHVhbGl6ZWQgYXJjaGl0ZWN0dXJlcyAocHV0IGluIGFzbS9pby5oKQorICovCisjaWZuZGVmIEJJT1ZFQ19QSFlTX01FUkdFQUJMRQorI2RlZmluZSBCSU9WRUNfUEhZU19NRVJHRUFCTEUodmVjMSwgdmVjMikJXAorCSgoYnZlY190b19waHlzKCh2ZWMxKSkgKyAodmVjMSktPmJ2X2xlbikgPT0gYnZlY190b19waHlzKCh2ZWMyKSkpCisjZW5kaWYKKworI2RlZmluZSBCSU9WRUNfVklSVF9NRVJHRUFCTEUodmVjMSwgdmVjMikJXAorCSgoKChidmVjX3RvX3BoeXMoKHZlYzEpKSArICh2ZWMxKS0+YnZfbGVuKSB8IGJ2ZWNfdG9fcGh5cygodmVjMikpKSAmIChCSU9fVk1FUkdFX0JPVU5EQVJZIC0gMSkpID09IDApCisjZGVmaW5lIF9fQklPX1NFR19CT1VOREFSWShhZGRyMSwgYWRkcjIsIG1hc2spIFwKKwkoKChhZGRyMSkgfCAobWFzaykpID09ICgoKGFkZHIyKSAtIDEpIHwgKG1hc2spKSkKKyNkZWZpbmUgQklPVkVDX1NFR19CT1VOREFSWShxLCBiMSwgYjIpIFwKKwlfX0JJT19TRUdfQk9VTkRBUlkoYnZlY190b19waHlzKChiMSkpLCBidmVjX3RvX3BoeXMoKGIyKSkgKyAoYjIpLT5idl9sZW4sIChxKS0+c2VnX2JvdW5kYXJ5X21hc2spCisjZGVmaW5lIEJJT19TRUdfQk9VTkRBUlkocSwgYjEsIGIyKSBcCisJQklPVkVDX1NFR19CT1VOREFSWSgocSksIF9fQlZFQ19FTkQoKGIxKSksIF9fQlZFQ19TVEFSVCgoYjIpKSkKKworI2RlZmluZSBiaW9faW9fZXJyb3IoYmlvLCBieXRlcykgYmlvX2VuZGlvKChiaW8pLCAoYnl0ZXMpLCAtRUlPKQorCisvKgorICogZHJpdmVycyBzaG91bGQgbm90IHVzZSB0aGUgX18gdmVyc2lvbiB1bmxlc3MgdGhleSBfcmVhbGx5XyB3YW50IHRvCisgKiBydW4gdGhyb3VnaCB0aGUgZW50aXJlIGJpbyBhbmQgbm90IGp1c3QgcGVuZGluZyBwaWVjZXMKKyAqLworI2RlZmluZSBfX2Jpb19mb3JfZWFjaF9zZWdtZW50KGJ2bCwgYmlvLCBpLCBzdGFydF9pZHgpCQkJXAorCWZvciAoYnZsID0gYmlvX2lvdmVjX2lkeCgoYmlvKSwgKHN0YXJ0X2lkeCkpLCBpID0gKHN0YXJ0X2lkeCk7CVwKKwkgICAgIGkgPCAoYmlvKS0+YmlfdmNudDsJCQkJCVwKKwkgICAgIGJ2bCsrLCBpKyspCisKKyNkZWZpbmUgYmlvX2Zvcl9lYWNoX3NlZ21lbnQoYnZsLCBiaW8sIGkpCQkJCVwKKwlfX2Jpb19mb3JfZWFjaF9zZWdtZW50KGJ2bCwgYmlvLCBpLCAoYmlvKS0+YmlfaWR4KQorCisvKgorICogZ2V0IGEgcmVmZXJlbmNlIHRvIGEgYmlvLCBzbyBpdCB3b24ndCBkaXNhcHBlYXIuIHRoZSBpbnRlbmRlZCB1c2UgaXMKKyAqIHNvbWV0aGluZyBsaWtlOgorICoKKyAqIGJpb19nZXQoYmlvKTsKKyAqIHN1Ym1pdF9iaW8ocncsIGJpbyk7CisgKiBpZiAoYmlvLT5iaV9mbGFncyAuLi4pCisgKglkb19zb21ldGhpbmcKKyAqIGJpb19wdXQoYmlvKTsKKyAqCisgKiB3aXRob3V0IHRoZSBiaW9fZ2V0KCksIGl0IGNvdWxkIHBvdGVudGlhbGx5IGNvbXBsZXRlIEkvTyBiZWZvcmUgc3VibWl0X2JpbworICogcmV0dXJucy4gYW5kIHRoZW4gYmlvIHdvdWxkIGJlIGZyZWVkIG1lbW9yeSB3aGVuIGlmIChiaW8tPmJpX2ZsYWdzIC4uLikKKyAqIHJ1bnMKKyAqLworI2RlZmluZSBiaW9fZ2V0KGJpbykJYXRvbWljX2luYygmKGJpbyktPmJpX2NudCkKKworCisvKgorICogQSBiaW9fcGFpciBpcyB1c2VkIHdoZW4gd2UgbmVlZCB0byBzcGxpdCBhIGJpby4KKyAqIFRoaXMgY2FuIG9ubHkgaGFwcGVuIGZvciBhIGJpbyB0aGF0IHJlZmVycyB0byBqdXN0IG9uZQorICogcGFnZSBvZiBkYXRhLCBhbmQgaW4gdGhlIHVudXN1YWwgc2l0dWF0aW9uIHdoZW4gdGhlCisgKiBwYWdlIGNyb3NzZXMgYSBjaHVuay9kZXZpY2UgYm91bmRhcnkKKyAqCisgKiBUaGUgYWRkcmVzcyBvZiB0aGUgbWFzdGVyIGJpbyBpcyBzdG9yZWQgaW4gYmlvMS5iaV9wcml2YXRlCisgKiBUaGUgYWRkcmVzcyBvZiB0aGUgcG9vbCB0aGUgcGFpciB3YXMgYWxsb2NhdGVkIGZyb20gaXMgc3RvcmVkCisgKiAgIGluIGJpbzIuYmlfcHJpdmF0ZQorICovCitzdHJ1Y3QgYmlvX3BhaXIgeworCXN0cnVjdCBiaW8JYmlvMSwgYmlvMjsKKwlzdHJ1Y3QgYmlvX3ZlYwlidjEsIGJ2MjsKKwlhdG9taWNfdAljbnQ7CisJaW50CQllcnJvcjsKK307CitleHRlcm4gc3RydWN0IGJpb19wYWlyICpiaW9fc3BsaXQoc3RydWN0IGJpbyAqYmksIG1lbXBvb2xfdCAqcG9vbCwKKwkJCQkgIGludCBmaXJzdF9zZWN0b3JzKTsKK2V4dGVybiBtZW1wb29sX3QgKmJpb19zcGxpdF9wb29sOworZXh0ZXJuIHZvaWQgYmlvX3BhaXJfcmVsZWFzZShzdHJ1Y3QgYmlvX3BhaXIgKmRiaW8pOworCitleHRlcm4gc3RydWN0IGJpb19zZXQgKmJpb3NldF9jcmVhdGUoaW50LCBpbnQsIGludCk7CitleHRlcm4gdm9pZCBiaW9zZXRfZnJlZShzdHJ1Y3QgYmlvX3NldCAqKTsKKworZXh0ZXJuIHN0cnVjdCBiaW8gKmJpb19hbGxvYyh1bnNpZ25lZCBpbnQgX19ub2Nhc3QsIGludCk7CitleHRlcm4gc3RydWN0IGJpbyAqYmlvX2FsbG9jX2Jpb3NldCh1bnNpZ25lZCBpbnQgX19ub2Nhc3QsIGludCwgc3RydWN0IGJpb19zZXQgKik7CitleHRlcm4gdm9pZCBiaW9fcHV0KHN0cnVjdCBiaW8gKik7CisKK2V4dGVybiB2b2lkIGJpb19lbmRpbyhzdHJ1Y3QgYmlvICosIHVuc2lnbmVkIGludCwgaW50KTsKK3N0cnVjdCByZXF1ZXN0X3F1ZXVlOworZXh0ZXJuIGludCBiaW9fcGh5c19zZWdtZW50cyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCBzdHJ1Y3QgYmlvICopOworZXh0ZXJuIGludCBiaW9faHdfc2VnbWVudHMoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgc3RydWN0IGJpbyAqKTsKKworZXh0ZXJuIHZvaWQgX19iaW9fY2xvbmUoc3RydWN0IGJpbyAqLCBzdHJ1Y3QgYmlvICopOworZXh0ZXJuIHN0cnVjdCBiaW8gKmJpb19jbG9uZShzdHJ1Y3QgYmlvICosIHVuc2lnbmVkIGludCBfX25vY2FzdCk7CisKK2V4dGVybiB2b2lkIGJpb19pbml0KHN0cnVjdCBiaW8gKik7CisKK2V4dGVybiBpbnQgYmlvX2FkZF9wYWdlKHN0cnVjdCBiaW8gKiwgc3RydWN0IHBhZ2UgKiwgdW5zaWduZWQgaW50LHVuc2lnbmVkIGludCk7CitleHRlcm4gaW50IGJpb19nZXRfbnJfdmVjcyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICopOworZXh0ZXJuIHN0cnVjdCBiaW8gKmJpb19tYXBfdXNlcihzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICosCisJCQkJdW5zaWduZWQgbG9uZywgdW5zaWduZWQgaW50LCBpbnQpOworZXh0ZXJuIHZvaWQgYmlvX3VubWFwX3VzZXIoc3RydWN0IGJpbyAqKTsKK2V4dGVybiB2b2lkIGJpb19zZXRfcGFnZXNfZGlydHkoc3RydWN0IGJpbyAqYmlvKTsKK2V4dGVybiB2b2lkIGJpb19jaGVja19wYWdlc19kaXJ0eShzdHJ1Y3QgYmlvICpiaW8pOworZXh0ZXJuIHN0cnVjdCBiaW8gKmJpb19jb3B5X3VzZXIoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgaW50LCBpbnQpOworZXh0ZXJuIGludCBiaW9fdW5jb3B5X3VzZXIoc3RydWN0IGJpbyAqKTsKK3ZvaWQgemVyb19maWxsX2JpbyhzdHJ1Y3QgYmlvICpiaW8pOworCisjaWZkZWYgQ09ORklHX0hJR0hNRU0KKy8qCisgKiByZW1lbWJlciB0byBhZGQgb2Zmc2V0ISBhbmQgbmV2ZXIgZXZlciByZWVuYWJsZSBpbnRlcnJ1cHRzIGJldHdlZW4gYQorICogYnZlY19rbWFwX2lycSBhbmQgYnZlY19rdW5tYXBfaXJxISEKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIE1VU1QgYmUgaW5saW5lZCAtIGl0IHBsYXlzIHdpdGggdGhlIENQVSBpbnRlcnJ1cHQgZmxhZ3MuCisgKiBIZW5jZSB0aGUgYGV4dGVybiBpbmxpbmUnLgorICovCitleHRlcm4gaW5saW5lIGNoYXIgKmJ2ZWNfa21hcF9pcnEoc3RydWN0IGJpb192ZWMgKmJ2ZWMsIHVuc2lnbmVkIGxvbmcgKmZsYWdzKQoreworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKworCS8qCisJICogbWlnaHQgbm90IGJlIGEgaGlnaG1lbSBwYWdlLCBidXQgdGhlIHByZWVtcHQvaXJxIGNvdW50CisJICogYmFsYW5jaW5nIGlzIGEgbG90IG5pY2VyIHRoaXMgd2F5CisJICovCisJbG9jYWxfaXJxX3NhdmUoKmZsYWdzKTsKKwlhZGRyID0gKHVuc2lnbmVkIGxvbmcpIGttYXBfYXRvbWljKGJ2ZWMtPmJ2X3BhZ2UsIEtNX0JJT19TUkNfSVJRKTsKKworCUJVR19PTihhZGRyICYgflBBR0VfTUFTSyk7CisKKwlyZXR1cm4gKGNoYXIgKikgYWRkciArIGJ2ZWMtPmJ2X29mZnNldDsKK30KKworZXh0ZXJuIGlubGluZSB2b2lkIGJ2ZWNfa3VubWFwX2lycShjaGFyICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgKmZsYWdzKQoreworCXVuc2lnbmVkIGxvbmcgcHRyID0gKHVuc2lnbmVkIGxvbmcpIGJ1ZmZlciAmIFBBR0VfTUFTSzsKKworCWt1bm1hcF9hdG9taWMoKHZvaWQgKikgcHRyLCBLTV9CSU9fU1JDX0lSUSk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoKmZsYWdzKTsKK30KKworI2Vsc2UKKyNkZWZpbmUgYnZlY19rbWFwX2lycShidmVjLCBmbGFncykJKHBhZ2VfYWRkcmVzcygoYnZlYyktPmJ2X3BhZ2UpICsgKGJ2ZWMpLT5idl9vZmZzZXQpCisjZGVmaW5lIGJ2ZWNfa3VubWFwX2lycShidWYsIGZsYWdzKQlkbyB7ICooZmxhZ3MpID0gMDsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCitleHRlcm4gaW5saW5lIGNoYXIgKl9fYmlvX2ttYXBfaXJxKHN0cnVjdCBiaW8gKmJpbywgdW5zaWduZWQgc2hvcnQgaWR4LAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgKmZsYWdzKQoreworCXJldHVybiBidmVjX2ttYXBfaXJxKGJpb19pb3ZlY19pZHgoYmlvLCBpZHgpLCBmbGFncyk7Cit9CisjZGVmaW5lIF9fYmlvX2t1bm1hcF9pcnEoYnVmLCBmbGFncykJYnZlY19rdW5tYXBfaXJxKGJ1ZiwgZmxhZ3MpCisKKyNkZWZpbmUgYmlvX2ttYXBfaXJxKGJpbywgZmxhZ3MpIFwKKwlfX2Jpb19rbWFwX2lycSgoYmlvKSwgKGJpbyktPmJpX2lkeCwgKGZsYWdzKSkKKyNkZWZpbmUgYmlvX2t1bm1hcF9pcnEoYnVmLGZsYWdzKQlfX2Jpb19rdW5tYXBfaXJxKGJ1ZiwgZmxhZ3MpCisKKyNlbmRpZiAvKiBfX0xJTlVYX0JJT19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JpdG1hcC5oIGIvaW5jbHVkZS9saW51eC9iaXRtYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmRkNTUwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9iaXRtYXAuaApAQCAtMCwwICsxLDI2MSBAQAorI2lmbmRlZiBfX0xJTlVYX0JJVE1BUF9ICisjZGVmaW5lIF9fTElOVVhfQklUTUFQX0gKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisKKy8qCisgKiBiaXRtYXBzIHByb3ZpZGUgYml0IGFycmF5cyB0aGF0IGNvbnN1bWUgb25lIG9yIG1vcmUgdW5zaWduZWQKKyAqIGxvbmdzLiAgVGhlIGJpdG1hcCBpbnRlcmZhY2UgYW5kIGF2YWlsYWJsZSBvcGVyYXRpb25zIGFyZSBsaXN0ZWQKKyAqIGhlcmUsIGluIGJpdG1hcC5oCisgKgorICogRnVuY3Rpb24gaW1wbGVtZW50YXRpb25zIGdlbmVyaWMgdG8gYWxsIGFyY2hpdGVjdHVyZXMgYXJlIGluCisgKiBsaWIvYml0bWFwLmMuICBGdW5jdGlvbnMgaW1wbGVtZW50YXRpb25zIHRoYXQgYXJlIGFyY2hpdGVjdHVyZQorICogc3BlY2lmaWMgYXJlIGluIHZhcmlvdXMgaW5jbHVkZS9hc20tPGFyY2g+L2JpdG9wcy5oIGhlYWRlcnMKKyAqIGFuZCBvdGhlciBhcmNoLzxhcmNoPiBzcGVjaWZpYyBmaWxlcy4KKyAqCisgKiBTZWUgbGliL2JpdG1hcC5jIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoKKyAqIFRoZSBhdmFpbGFibGUgYml0bWFwIG9wZXJhdGlvbnMgYW5kIHRoZWlyIHJvdWdoIG1lYW5pbmcgaW4gdGhlCisgKiBjYXNlIHRoYXQgdGhlIGJpdG1hcCBpcyBhIHNpbmdsZSB1bnNpZ25lZCBsb25nIGFyZSB0aHVzOgorICoKKyAqIGJpdG1hcF96ZXJvKGRzdCwgbmJpdHMpCQkJKmRzdCA9IDBVTAorICogYml0bWFwX2ZpbGwoZHN0LCBuYml0cykJCQkqZHN0ID0gfjBVTAorICogYml0bWFwX2NvcHkoZHN0LCBzcmMsIG5iaXRzKQkJCSpkc3QgPSAqc3JjCisgKiBiaXRtYXBfYW5kKGRzdCwgc3JjMSwgc3JjMiwgbmJpdHMpCQkqZHN0ID0gKnNyYzEgJiAqc3JjMgorICogYml0bWFwX29yKGRzdCwgc3JjMSwgc3JjMiwgbmJpdHMpCQkqZHN0ID0gKnNyYzEgfCAqc3JjMgorICogYml0bWFwX3hvcihkc3QsIHNyYzEsIHNyYzIsIG5iaXRzKQkJKmRzdCA9ICpzcmMxIF4gKnNyYzIKKyAqIGJpdG1hcF9hbmRub3QoZHN0LCBzcmMxLCBzcmMyLCBuYml0cykJKmRzdCA9ICpzcmMxICYgfigqc3JjMikKKyAqIGJpdG1hcF9jb21wbGVtZW50KGRzdCwgc3JjLCBuYml0cykJCSpkc3QgPSB+KCpzcmMpCisgKiBiaXRtYXBfZXF1YWwoc3JjMSwgc3JjMiwgbmJpdHMpCQlBcmUgKnNyYzEgYW5kICpzcmMyIGVxdWFsPworICogYml0bWFwX2ludGVyc2VjdHMoc3JjMSwgc3JjMiwgbmJpdHMpIAlEbyAqc3JjMSBhbmQgKnNyYzIgb3ZlcmxhcD8KKyAqIGJpdG1hcF9zdWJzZXQoc3JjMSwgc3JjMiwgbmJpdHMpCQlJcyAqc3JjMSBhIHN1YnNldCBvZiAqc3JjMj8KKyAqIGJpdG1hcF9lbXB0eShzcmMsIG5iaXRzKQkJCUFyZSBhbGwgYml0cyB6ZXJvIGluICpzcmM/CisgKiBiaXRtYXBfZnVsbChzcmMsIG5iaXRzKQkJCUFyZSBhbGwgYml0cyBzZXQgaW4gKnNyYz8KKyAqIGJpdG1hcF93ZWlnaHQoc3JjLCBuYml0cykJCQlIYW1taW5nIFdlaWdodDogbnVtYmVyIHNldCBiaXRzCisgKiBiaXRtYXBfc2hpZnRfcmlnaHQoZHN0LCBzcmMsIG4sIG5iaXRzKQkqZHN0ID0gKnNyYyA+PiBuCisgKiBiaXRtYXBfc2hpZnRfbGVmdChkc3QsIHNyYywgbiwgbmJpdHMpCSpkc3QgPSAqc3JjIDw8IG4KKyAqIGJpdG1hcF9zY25wcmludGYoYnVmLCBsZW4sIHNyYywgbmJpdHMpCVByaW50IGJpdG1hcCBzcmMgdG8gYnVmCisgKiBiaXRtYXBfcGFyc2UodWJ1ZiwgdWxlbiwgZHN0LCBuYml0cykJCVBhcnNlIGJpdG1hcCBkc3QgZnJvbSB1c2VyIGJ1ZgorICogYml0bWFwX3Njbmxpc3RwcmludGYoYnVmLCBsZW4sIHNyYywgbmJpdHMpCVByaW50IGJpdG1hcCBzcmMgYXMgbGlzdCB0byBidWYKKyAqIGJpdG1hcF9wYXJzZWxpc3QoYnVmLCBkc3QsIG5iaXRzKQkJUGFyc2UgYml0bWFwIGRzdCBmcm9tIGxpc3QKKyAqLworCisvKgorICogQWxzbyB0aGUgZm9sbG93aW5nIG9wZXJhdGlvbnMgaW4gYXNtL2JpdG9wcy5oIGFwcGx5IHRvIGJpdG1hcHMuCisgKgorICogc2V0X2JpdChiaXQsIGFkZHIpCQkJKmFkZHIgfD0gYml0CisgKiBjbGVhcl9iaXQoYml0LCBhZGRyKQkJCSphZGRyICY9IH5iaXQKKyAqIGNoYW5nZV9iaXQoYml0LCBhZGRyKQkJKmFkZHIgXj0gYml0CisgKiB0ZXN0X2JpdChiaXQsIGFkZHIpCQkJSXMgYml0IHNldCBpbiAqYWRkcj8KKyAqIHRlc3RfYW5kX3NldF9iaXQoYml0LCBhZGRyKQkJU2V0IGJpdCBhbmQgcmV0dXJuIG9sZCB2YWx1ZQorICogdGVzdF9hbmRfY2xlYXJfYml0KGJpdCwgYWRkcikJQ2xlYXIgYml0IGFuZCByZXR1cm4gb2xkIHZhbHVlCisgKiB0ZXN0X2FuZF9jaGFuZ2VfYml0KGJpdCwgYWRkcikJQ2hhbmdlIGJpdCBhbmQgcmV0dXJuIG9sZCB2YWx1ZQorICogZmluZF9maXJzdF96ZXJvX2JpdChhZGRyLCBuYml0cykJUG9zaXRpb24gZmlyc3QgemVybyBiaXQgaW4gKmFkZHIKKyAqIGZpbmRfZmlyc3RfYml0KGFkZHIsIG5iaXRzKQkJUG9zaXRpb24gZmlyc3Qgc2V0IGJpdCBpbiAqYWRkcgorICogZmluZF9uZXh0X3plcm9fYml0KGFkZHIsIG5iaXRzLCBiaXQpCVBvc2l0aW9uIG5leHQgemVybyBiaXQgaW4gKmFkZHIgPj0gYml0CisgKiBmaW5kX25leHRfYml0KGFkZHIsIG5iaXRzLCBiaXQpCVBvc2l0aW9uIG5leHQgc2V0IGJpdCBpbiAqYWRkciA+PSBiaXQKKyAqLworCisvKgorICogVGhlIERFQ0xBUkVfQklUTUFQKG5hbWUsYml0cykgbWFjcm8sIGluIGxpbnV4L3R5cGVzLmgsIGNhbiBiZSB1c2VkCisgKiB0byBkZWNsYXJlIGFuIGFycmF5IG5hbWVkICduYW1lJyBvZiBqdXN0IGVub3VnaCB1bnNpZ25lZCBsb25ncyB0bworICogY29udGFpbiBhbGwgYml0IHBvc2l0aW9ucyBmcm9tIDAgdG8gJ2JpdHMnIC0gMS4KKyAqLworCisvKgorICogbGliL2JpdG1hcC5jIHByb3ZpZGVzIHRoZXNlIGZ1bmN0aW9uczoKKyAqLworCitleHRlcm4gaW50IF9fYml0bWFwX2VtcHR5KGNvbnN0IHVuc2lnbmVkIGxvbmcgKmJpdG1hcCwgaW50IGJpdHMpOworZXh0ZXJuIGludCBfX2JpdG1hcF9mdWxsKGNvbnN0IHVuc2lnbmVkIGxvbmcgKmJpdG1hcCwgaW50IGJpdHMpOworZXh0ZXJuIGludCBfX2JpdG1hcF9lcXVhbChjb25zdCB1bnNpZ25lZCBsb25nICpiaXRtYXAxLAorICAgICAgICAgICAgICAgIAljb25zdCB1bnNpZ25lZCBsb25nICpiaXRtYXAyLCBpbnQgYml0cyk7CitleHRlcm4gdm9pZCBfX2JpdG1hcF9jb21wbGVtZW50KHVuc2lnbmVkIGxvbmcgKmRzdCwgY29uc3QgdW5zaWduZWQgbG9uZyAqc3JjLAorCQkJaW50IGJpdHMpOworZXh0ZXJuIHZvaWQgX19iaXRtYXBfc2hpZnRfcmlnaHQodW5zaWduZWQgbG9uZyAqZHN0LAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgbG9uZyAqc3JjLCBpbnQgc2hpZnQsIGludCBiaXRzKTsKK2V4dGVybiB2b2lkIF9fYml0bWFwX3NoaWZ0X2xlZnQodW5zaWduZWQgbG9uZyAqZHN0LAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgbG9uZyAqc3JjLCBpbnQgc2hpZnQsIGludCBiaXRzKTsKK2V4dGVybiB2b2lkIF9fYml0bWFwX2FuZCh1bnNpZ25lZCBsb25nICpkc3QsIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmJpdG1hcDEsCisJCQljb25zdCB1bnNpZ25lZCBsb25nICpiaXRtYXAyLCBpbnQgYml0cyk7CitleHRlcm4gdm9pZCBfX2JpdG1hcF9vcih1bnNpZ25lZCBsb25nICpkc3QsIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmJpdG1hcDEsCisJCQljb25zdCB1bnNpZ25lZCBsb25nICpiaXRtYXAyLCBpbnQgYml0cyk7CitleHRlcm4gdm9pZCBfX2JpdG1hcF94b3IodW5zaWduZWQgbG9uZyAqZHN0LCBjb25zdCB1bnNpZ25lZCBsb25nICpiaXRtYXAxLAorCQkJY29uc3QgdW5zaWduZWQgbG9uZyAqYml0bWFwMiwgaW50IGJpdHMpOworZXh0ZXJuIHZvaWQgX19iaXRtYXBfYW5kbm90KHVuc2lnbmVkIGxvbmcgKmRzdCwgY29uc3QgdW5zaWduZWQgbG9uZyAqYml0bWFwMSwKKwkJCWNvbnN0IHVuc2lnbmVkIGxvbmcgKmJpdG1hcDIsIGludCBiaXRzKTsKK2V4dGVybiBpbnQgX19iaXRtYXBfaW50ZXJzZWN0cyhjb25zdCB1bnNpZ25lZCBsb25nICpiaXRtYXAxLAorCQkJY29uc3QgdW5zaWduZWQgbG9uZyAqYml0bWFwMiwgaW50IGJpdHMpOworZXh0ZXJuIGludCBfX2JpdG1hcF9zdWJzZXQoY29uc3QgdW5zaWduZWQgbG9uZyAqYml0bWFwMSwKKwkJCWNvbnN0IHVuc2lnbmVkIGxvbmcgKmJpdG1hcDIsIGludCBiaXRzKTsKK2V4dGVybiBpbnQgX19iaXRtYXBfd2VpZ2h0KGNvbnN0IHVuc2lnbmVkIGxvbmcgKmJpdG1hcCwgaW50IGJpdHMpOworCitleHRlcm4gaW50IGJpdG1hcF9zY25wcmludGYoY2hhciAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuLAorCQkJY29uc3QgdW5zaWduZWQgbG9uZyAqc3JjLCBpbnQgbmJpdHMpOworZXh0ZXJuIGludCBiaXRtYXBfcGFyc2UoY29uc3QgY2hhciBfX3VzZXIgKnVidWYsIHVuc2lnbmVkIGludCB1bGVuLAorCQkJdW5zaWduZWQgbG9uZyAqZHN0LCBpbnQgbmJpdHMpOworZXh0ZXJuIGludCBiaXRtYXBfc2NubGlzdHByaW50ZihjaGFyICpidWYsIHVuc2lnbmVkIGludCBsZW4sCisJCQljb25zdCB1bnNpZ25lZCBsb25nICpzcmMsIGludCBuYml0cyk7CitleHRlcm4gaW50IGJpdG1hcF9wYXJzZWxpc3QoY29uc3QgY2hhciAqYnVmLCB1bnNpZ25lZCBsb25nICptYXNrcCwKKwkJCWludCBubWFza2JpdHMpOworZXh0ZXJuIGludCBiaXRtYXBfZmluZF9mcmVlX3JlZ2lvbih1bnNpZ25lZCBsb25nICpiaXRtYXAsIGludCBiaXRzLCBpbnQgb3JkZXIpOworZXh0ZXJuIHZvaWQgYml0bWFwX3JlbGVhc2VfcmVnaW9uKHVuc2lnbmVkIGxvbmcgKmJpdG1hcCwgaW50IHBvcywgaW50IG9yZGVyKTsKK2V4dGVybiBpbnQgYml0bWFwX2FsbG9jYXRlX3JlZ2lvbih1bnNpZ25lZCBsb25nICpiaXRtYXAsIGludCBwb3MsIGludCBvcmRlcik7CisKKyNkZWZpbmUgQklUTUFQX0xBU1RfV09SRF9NQVNLKG5iaXRzKQkJCQkJXAorKAkJCQkJCQkJCVwKKwkoKG5iaXRzKSAlIEJJVFNfUEVSX0xPTkcpID8JCQkJCVwKKwkJKDFVTDw8KChuYml0cykgJSBCSVRTX1BFUl9MT05HKSktMSA6IH4wVUwJCVwKKykKKworc3RhdGljIGlubGluZSB2b2lkIGJpdG1hcF96ZXJvKHVuc2lnbmVkIGxvbmcgKmRzdCwgaW50IG5iaXRzKQoreworCWlmIChuYml0cyA8PSBCSVRTX1BFUl9MT05HKQorCQkqZHN0ID0gMFVMOworCWVsc2UgeworCQlpbnQgbGVuID0gQklUU19UT19MT05HUyhuYml0cykgKiBzaXplb2YodW5zaWduZWQgbG9uZyk7CisJCW1lbXNldChkc3QsIDAsIGxlbik7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYml0bWFwX2ZpbGwodW5zaWduZWQgbG9uZyAqZHN0LCBpbnQgbmJpdHMpCit7CisJc2l6ZV90IG5sb25ncyA9IEJJVFNfVE9fTE9OR1MobmJpdHMpOworCWlmIChubG9uZ3MgPiAxKSB7CisJCWludCBsZW4gPSAobmxvbmdzIC0gMSkgKiBzaXplb2YodW5zaWduZWQgbG9uZyk7CisJCW1lbXNldChkc3QsIDB4ZmYsICBsZW4pOworCX0KKwlkc3RbbmxvbmdzIC0gMV0gPSBCSVRNQVBfTEFTVF9XT1JEX01BU0sobmJpdHMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYml0bWFwX2NvcHkodW5zaWduZWQgbG9uZyAqZHN0LCBjb25zdCB1bnNpZ25lZCBsb25nICpzcmMsCisJCQlpbnQgbmJpdHMpCit7CisJaWYgKG5iaXRzIDw9IEJJVFNfUEVSX0xPTkcpCisJCSpkc3QgPSAqc3JjOworCWVsc2UgeworCQlpbnQgbGVuID0gQklUU19UT19MT05HUyhuYml0cykgKiBzaXplb2YodW5zaWduZWQgbG9uZyk7CisJCW1lbWNweShkc3QsIHNyYywgbGVuKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBiaXRtYXBfYW5kKHVuc2lnbmVkIGxvbmcgKmRzdCwgY29uc3QgdW5zaWduZWQgbG9uZyAqc3JjMSwKKwkJCWNvbnN0IHVuc2lnbmVkIGxvbmcgKnNyYzIsIGludCBuYml0cykKK3sKKwlpZiAobmJpdHMgPD0gQklUU19QRVJfTE9ORykKKwkJKmRzdCA9ICpzcmMxICYgKnNyYzI7CisJZWxzZQorCQlfX2JpdG1hcF9hbmQoZHN0LCBzcmMxLCBzcmMyLCBuYml0cyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBiaXRtYXBfb3IodW5zaWduZWQgbG9uZyAqZHN0LCBjb25zdCB1bnNpZ25lZCBsb25nICpzcmMxLAorCQkJY29uc3QgdW5zaWduZWQgbG9uZyAqc3JjMiwgaW50IG5iaXRzKQoreworCWlmIChuYml0cyA8PSBCSVRTX1BFUl9MT05HKQorCQkqZHN0ID0gKnNyYzEgfCAqc3JjMjsKKwllbHNlCisJCV9fYml0bWFwX29yKGRzdCwgc3JjMSwgc3JjMiwgbmJpdHMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYml0bWFwX3hvcih1bnNpZ25lZCBsb25nICpkc3QsIGNvbnN0IHVuc2lnbmVkIGxvbmcgKnNyYzEsCisJCQljb25zdCB1bnNpZ25lZCBsb25nICpzcmMyLCBpbnQgbmJpdHMpCit7CisJaWYgKG5iaXRzIDw9IEJJVFNfUEVSX0xPTkcpCisJCSpkc3QgPSAqc3JjMSBeICpzcmMyOworCWVsc2UKKwkJX19iaXRtYXBfeG9yKGRzdCwgc3JjMSwgc3JjMiwgbmJpdHMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYml0bWFwX2FuZG5vdCh1bnNpZ25lZCBsb25nICpkc3QsIGNvbnN0IHVuc2lnbmVkIGxvbmcgKnNyYzEsCisJCQljb25zdCB1bnNpZ25lZCBsb25nICpzcmMyLCBpbnQgbmJpdHMpCit7CisJaWYgKG5iaXRzIDw9IEJJVFNfUEVSX0xPTkcpCisJCSpkc3QgPSAqc3JjMSAmIH4oKnNyYzIpOworCWVsc2UKKwkJX19iaXRtYXBfYW5kbm90KGRzdCwgc3JjMSwgc3JjMiwgbmJpdHMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYml0bWFwX2NvbXBsZW1lbnQodW5zaWduZWQgbG9uZyAqZHN0LCBjb25zdCB1bnNpZ25lZCBsb25nICpzcmMsCisJCQlpbnQgbmJpdHMpCit7CisJaWYgKG5iaXRzIDw9IEJJVFNfUEVSX0xPTkcpCisJCSpkc3QgPSB+KCpzcmMpICYgQklUTUFQX0xBU1RfV09SRF9NQVNLKG5iaXRzKTsKKwllbHNlCisJCV9fYml0bWFwX2NvbXBsZW1lbnQoZHN0LCBzcmMsIG5iaXRzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYml0bWFwX2VxdWFsKGNvbnN0IHVuc2lnbmVkIGxvbmcgKnNyYzEsCisJCQljb25zdCB1bnNpZ25lZCBsb25nICpzcmMyLCBpbnQgbmJpdHMpCit7CisJaWYgKG5iaXRzIDw9IEJJVFNfUEVSX0xPTkcpCisJCXJldHVybiAhICgoKnNyYzEgXiAqc3JjMikgJiBCSVRNQVBfTEFTVF9XT1JEX01BU0sobmJpdHMpKTsKKwllbHNlCisJCXJldHVybiBfX2JpdG1hcF9lcXVhbChzcmMxLCBzcmMyLCBuYml0cyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGJpdG1hcF9pbnRlcnNlY3RzKGNvbnN0IHVuc2lnbmVkIGxvbmcgKnNyYzEsCisJCQljb25zdCB1bnNpZ25lZCBsb25nICpzcmMyLCBpbnQgbmJpdHMpCit7CisJaWYgKG5iaXRzIDw9IEJJVFNfUEVSX0xPTkcpCisJCXJldHVybiAoKCpzcmMxICYgKnNyYzIpICYgQklUTUFQX0xBU1RfV09SRF9NQVNLKG5iaXRzKSkgIT0gMDsKKwllbHNlCisJCXJldHVybiBfX2JpdG1hcF9pbnRlcnNlY3RzKHNyYzEsIHNyYzIsIG5iaXRzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYml0bWFwX3N1YnNldChjb25zdCB1bnNpZ25lZCBsb25nICpzcmMxLAorCQkJY29uc3QgdW5zaWduZWQgbG9uZyAqc3JjMiwgaW50IG5iaXRzKQoreworCWlmIChuYml0cyA8PSBCSVRTX1BFUl9MT05HKQorCQlyZXR1cm4gISAoKCpzcmMxICYgfigqc3JjMikpICYgQklUTUFQX0xBU1RfV09SRF9NQVNLKG5iaXRzKSk7CisJZWxzZQorCQlyZXR1cm4gX19iaXRtYXBfc3Vic2V0KHNyYzEsIHNyYzIsIG5iaXRzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYml0bWFwX2VtcHR5KGNvbnN0IHVuc2lnbmVkIGxvbmcgKnNyYywgaW50IG5iaXRzKQoreworCWlmIChuYml0cyA8PSBCSVRTX1BFUl9MT05HKQorCQlyZXR1cm4gISAoKnNyYyAmIEJJVE1BUF9MQVNUX1dPUkRfTUFTSyhuYml0cykpOworCWVsc2UKKwkJcmV0dXJuIF9fYml0bWFwX2VtcHR5KHNyYywgbmJpdHMpOworfQorCitzdGF0aWMgaW5saW5lIGludCBiaXRtYXBfZnVsbChjb25zdCB1bnNpZ25lZCBsb25nICpzcmMsIGludCBuYml0cykKK3sKKwlpZiAobmJpdHMgPD0gQklUU19QRVJfTE9ORykKKwkJcmV0dXJuICEgKH4oKnNyYykgJiBCSVRNQVBfTEFTVF9XT1JEX01BU0sobmJpdHMpKTsKKwllbHNlCisJCXJldHVybiBfX2JpdG1hcF9mdWxsKHNyYywgbmJpdHMpOworfQorCitzdGF0aWMgaW5saW5lIGludCBiaXRtYXBfd2VpZ2h0KGNvbnN0IHVuc2lnbmVkIGxvbmcgKnNyYywgaW50IG5iaXRzKQoreworCXJldHVybiBfX2JpdG1hcF93ZWlnaHQoc3JjLCBuYml0cyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBiaXRtYXBfc2hpZnRfcmlnaHQodW5zaWduZWQgbG9uZyAqZHN0LAorCQkJY29uc3QgdW5zaWduZWQgbG9uZyAqc3JjLCBpbnQgbiwgaW50IG5iaXRzKQoreworCWlmIChuYml0cyA8PSBCSVRTX1BFUl9MT05HKQorCQkqZHN0ID0gKnNyYyA+PiBuOworCWVsc2UKKwkJX19iaXRtYXBfc2hpZnRfcmlnaHQoZHN0LCBzcmMsIG4sIG5iaXRzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGJpdG1hcF9zaGlmdF9sZWZ0KHVuc2lnbmVkIGxvbmcgKmRzdCwKKwkJCWNvbnN0IHVuc2lnbmVkIGxvbmcgKnNyYywgaW50IG4sIGludCBuYml0cykKK3sKKwlpZiAobmJpdHMgPD0gQklUU19QRVJfTE9ORykKKwkJKmRzdCA9ICgqc3JjIDw8IG4pICYgQklUTUFQX0xBU1RfV09SRF9NQVNLKG5iaXRzKTsKKwllbHNlCisJCV9fYml0bWFwX3NoaWZ0X2xlZnQoZHN0LCBzcmMsIG4sIG5iaXRzKTsKK30KKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYgLyogX19MSU5VWF9CSVRNQVBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iaXRvcHMuaCBiL2luY2x1ZGUvbGludXgvYml0b3BzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2IzYzNlZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvYml0b3BzLmgKQEAgLTAsMCArMSwxNTkgQEAKKyNpZm5kZWYgX0xJTlVYX0JJVE9QU19ICisjZGVmaW5lIF9MSU5VWF9CSVRPUFNfSAorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCisvKgorICogZmZzOiBmaW5kIGZpcnN0IGJpdCBzZXQuIFRoaXMgaXMgZGVmaW5lZCB0aGUgc2FtZSB3YXkgYXMKKyAqIHRoZSBsaWJjIGFuZCBjb21waWxlciBidWlsdGluIGZmcyByb3V0aW5lcywgdGhlcmVmb3JlCisgKiBkaWZmZXJzIGluIHNwaXJpdCBmcm9tIHRoZSBhYm92ZSBmZnogKG1hbiBmZnMpLgorICovCisKK3N0YXRpYyBpbmxpbmUgaW50IGdlbmVyaWNfZmZzKGludCB4KQoreworCWludCByID0gMTsKKworCWlmICgheCkKKwkJcmV0dXJuIDA7CisJaWYgKCEoeCAmIDB4ZmZmZikpIHsKKwkJeCA+Pj0gMTY7CisJCXIgKz0gMTY7CisJfQorCWlmICghKHggJiAweGZmKSkgeworCQl4ID4+PSA4OworCQlyICs9IDg7CisJfQorCWlmICghKHggJiAweGYpKSB7CisJCXggPj49IDQ7CisJCXIgKz0gNDsKKwl9CisJaWYgKCEoeCAmIDMpKSB7CisJCXggPj49IDI7CisJCXIgKz0gMjsKKwl9CisJaWYgKCEoeCAmIDEpKSB7CisJCXggPj49IDE7CisJCXIgKz0gMTsKKwl9CisJcmV0dXJuIHI7Cit9CisKKy8qCisgKiBmbHM6IGZpbmQgbGFzdCBiaXQgc2V0LgorICovCisKK3N0YXRpYyBfX2lubGluZV9fIGludCBnZW5lcmljX2ZscyhpbnQgeCkKK3sKKwlpbnQgciA9IDMyOworCisJaWYgKCF4KQorCQlyZXR1cm4gMDsKKwlpZiAoISh4ICYgMHhmZmZmMDAwMHUpKSB7CisJCXggPDw9IDE2OworCQlyIC09IDE2OworCX0KKwlpZiAoISh4ICYgMHhmZjAwMDAwMHUpKSB7CisJCXggPDw9IDg7CisJCXIgLT0gODsKKwl9CisJaWYgKCEoeCAmIDB4ZjAwMDAwMDB1KSkgeworCQl4IDw8PSA0OworCQlyIC09IDQ7CisJfQorCWlmICghKHggJiAweGMwMDAwMDAwdSkpIHsKKwkJeCA8PD0gMjsKKwkJciAtPSAyOworCX0KKwlpZiAoISh4ICYgMHg4MDAwMDAwMHUpKSB7CisJCXggPDw9IDE7CisJCXIgLT0gMTsKKwl9CisJcmV0dXJuIHI7Cit9CisKKy8qCisgKiBJbmNsdWRlIHRoaXMgaGVyZSBiZWNhdXNlIHNvbWUgYXJjaGl0ZWN0dXJlcyBuZWVkIGdlbmVyaWNfZmZzL2ZscyBpbgorICogc2NvcGUKKyAqLworI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KKworc3RhdGljIF9faW5saW5lX18gaW50IGdldF9iaXRtYXNrX29yZGVyKHVuc2lnbmVkIGludCBjb3VudCkKK3sKKwlpbnQgb3JkZXI7CisJCisJb3JkZXIgPSBmbHMoY291bnQpOworCXJldHVybiBvcmRlcjsJLyogV2UgY291bGQgYmUgc2xpZ2h0bHkgbW9yZSBjbGV2ZXIgd2l0aCAtMSBoZXJlLi4uICovCit9CisKKy8qCisgKiBod2VpZ2h0TjogcmV0dXJucyB0aGUgaGFtbWluZyB3ZWlnaHQgKGkuZS4gdGhlIG51bWJlcgorICogb2YgYml0cyBzZXQpIG9mIGEgTi1iaXQgd29yZAorICovCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdlbmVyaWNfaHdlaWdodDMyKHVuc2lnbmVkIGludCB3KQoreworICAgICAgICB1bnNpZ25lZCBpbnQgcmVzID0gKHcgJiAweDU1NTU1NTU1KSArICgodyA+PiAxKSAmIDB4NTU1NTU1NTUpOworICAgICAgICByZXMgPSAocmVzICYgMHgzMzMzMzMzMykgKyAoKHJlcyA+PiAyKSAmIDB4MzMzMzMzMzMpOworICAgICAgICByZXMgPSAocmVzICYgMHgwRjBGMEYwRikgKyAoKHJlcyA+PiA0KSAmIDB4MEYwRjBGMEYpOworICAgICAgICByZXMgPSAocmVzICYgMHgwMEZGMDBGRikgKyAoKHJlcyA+PiA4KSAmIDB4MDBGRjAwRkYpOworICAgICAgICByZXR1cm4gKHJlcyAmIDB4MDAwMEZGRkYpICsgKChyZXMgPj4gMTYpICYgMHgwMDAwRkZGRik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdlbmVyaWNfaHdlaWdodDE2KHVuc2lnbmVkIGludCB3KQoreworICAgICAgICB1bnNpZ25lZCBpbnQgcmVzID0gKHcgJiAweDU1NTUpICsgKCh3ID4+IDEpICYgMHg1NTU1KTsKKyAgICAgICAgcmVzID0gKHJlcyAmIDB4MzMzMykgKyAoKHJlcyA+PiAyKSAmIDB4MzMzMyk7CisgICAgICAgIHJlcyA9IChyZXMgJiAweDBGMEYpICsgKChyZXMgPj4gNCkgJiAweDBGMEYpOworICAgICAgICByZXR1cm4gKHJlcyAmIDB4MDBGRikgKyAoKHJlcyA+PiA4KSAmIDB4MDBGRik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdlbmVyaWNfaHdlaWdodDgodW5zaWduZWQgaW50IHcpCit7CisgICAgICAgIHVuc2lnbmVkIGludCByZXMgPSAodyAmIDB4NTUpICsgKCh3ID4+IDEpICYgMHg1NSk7CisgICAgICAgIHJlcyA9IChyZXMgJiAweDMzKSArICgocmVzID4+IDIpICYgMHgzMyk7CisgICAgICAgIHJldHVybiAocmVzICYgMHgwRikgKyAoKHJlcyA+PiA0KSAmIDB4MEYpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2VuZXJpY19od2VpZ2h0NjQoX191NjQgdykKK3sKKyNpZiBCSVRTX1BFUl9MT05HIDwgNjQKKwlyZXR1cm4gZ2VuZXJpY19od2VpZ2h0MzIoKHVuc2lnbmVkIGludCkodyA+PiAzMikpICsKKwkJCQlnZW5lcmljX2h3ZWlnaHQzMigodW5zaWduZWQgaW50KXcpOworI2Vsc2UKKwl1NjQgcmVzOworCXJlcyA9ICh3ICYgMHg1NTU1NTU1NTU1NTU1NTU1dWwpICsgKCh3ID4+IDEpICYgMHg1NTU1NTU1NTU1NTU1NTU1dWwpOworCXJlcyA9IChyZXMgJiAweDMzMzMzMzMzMzMzMzMzMzN1bCkgKyAoKHJlcyA+PiAyKSAmIDB4MzMzMzMzMzMzMzMzMzMzM3VsKTsKKwlyZXMgPSAocmVzICYgMHgwRjBGMEYwRjBGMEYwRjBGdWwpICsgKChyZXMgPj4gNCkgJiAweDBGMEYwRjBGMEYwRjBGMEZ1bCk7CisJcmVzID0gKHJlcyAmIDB4MDBGRjAwRkYwMEZGMDBGRnVsKSArICgocmVzID4+IDgpICYgMHgwMEZGMDBGRjAwRkYwMEZGdWwpOworCXJlcyA9IChyZXMgJiAweDAwMDBGRkZGMDAwMEZGRkZ1bCkgKyAoKHJlcyA+PiAxNikgJiAweDAwMDBGRkZGMDAwMEZGRkZ1bCk7CisJcmV0dXJuIChyZXMgJiAweDAwMDAwMDAwRkZGRkZGRkZ1bCkgKyAoKHJlcyA+PiAzMikgJiAweDAwMDAwMDAwRkZGRkZGRkZ1bCk7CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGh3ZWlnaHRfbG9uZyh1bnNpZ25lZCBsb25nIHcpCit7CisJcmV0dXJuIHNpemVvZih3KSA9PSA0ID8gZ2VuZXJpY19od2VpZ2h0MzIodykgOiBnZW5lcmljX2h3ZWlnaHQ2NCh3KTsKK30KKworLyoKKyAqIHJvbDMyIC0gcm90YXRlIGEgMzItYml0IHZhbHVlIGxlZnQKKyAqCisgKiBAd29yZDogdmFsdWUgdG8gcm90YXRlCisgKiBAc2hpZnQ6IGJpdHMgdG8gcm9sbAorICovCitzdGF0aWMgaW5saW5lIF9fdTMyIHJvbDMyKF9fdTMyIHdvcmQsIHVuc2lnbmVkIGludCBzaGlmdCkKK3sKKwlyZXR1cm4gKHdvcmQgPDwgc2hpZnQpIHwgKHdvcmQgPj4gKDMyIC0gc2hpZnQpKTsKK30KKworLyoKKyAqIHJvcjMyIC0gcm90YXRlIGEgMzItYml0IHZhbHVlIHJpZ2h0CisgKgorICogQHdvcmQ6IHZhbHVlIHRvIHJvdGF0ZQorICogQHNoaWZ0OiBiaXRzIHRvIHJvbGwKKyAqLworc3RhdGljIGlubGluZSBfX3UzMiByb3IzMihfX3UzMiB3b3JkLCB1bnNpZ25lZCBpbnQgc2hpZnQpCit7CisJcmV0dXJuICh3b3JkID4+IHNoaWZ0KSB8ICh3b3JkIDw8ICgzMiAtIHNoaWZ0KSk7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaCBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBhYzI4NgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKQEAgLTAsMCArMSw3NTkgQEAKKyNpZm5kZWYgX0xJTlVYX0JMS0RFVl9ICisjZGVmaW5lIF9MSU5VWF9CTEtERVZfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KKyNpbmNsdWRlIDxsaW51eC9nZW5oZC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9iYWNraW5nLWRldi5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tZW1wb29sLmg+CisjaW5jbHVkZSA8bGludXgvYmlvLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5naWZ5Lmg+CisKKyNpbmNsdWRlIDxhc20vc2NhdHRlcmxpc3QuaD4KKworc3RydWN0IHJlcXVlc3RfcXVldWU7Cit0eXBlZGVmIHN0cnVjdCByZXF1ZXN0X3F1ZXVlIHJlcXVlc3RfcXVldWVfdDsKK3N0cnVjdCBlbGV2YXRvcl9xdWV1ZTsKK3R5cGVkZWYgc3RydWN0IGVsZXZhdG9yX3F1ZXVlIGVsZXZhdG9yX3Q7CitzdHJ1Y3QgcmVxdWVzdF9wbV9zdGF0ZTsKKworI2RlZmluZSBCTEtERVZfTUlOX1JRCTQKKyNkZWZpbmUgQkxLREVWX01BWF9SUQkxMjgJLyogRGVmYXVsdCBtYXhpbXVtICovCisKKy8qCisgKiBUaGlzIGlzIHRoZSBwZXItcHJvY2VzcyBhbnRpY2lwYXRvcnkgSS9PIHNjaGVkdWxlciBzdGF0ZS4KKyAqLworc3RydWN0IGFzX2lvX2NvbnRleHQgeworCXNwaW5sb2NrX3QgbG9jazsKKworCXZvaWQgKCpkdG9yKShzdHJ1Y3QgYXNfaW9fY29udGV4dCAqYWljKTsgLyogZGVzdHJ1Y3RvciAqLworCXZvaWQgKCpleGl0KShzdHJ1Y3QgYXNfaW9fY29udGV4dCAqYWljKTsgLyogY2FsbGVkIG9uIHRhc2sgZXhpdCAqLworCisJdW5zaWduZWQgbG9uZyBzdGF0ZTsKKwlhdG9taWNfdCBucl9xdWV1ZWQ7IC8qIHF1ZXVlZCByZWFkcyAmIHN5bmMgd3JpdGVzICovCisJYXRvbWljX3QgbnJfZGlzcGF0Y2hlZDsgLyogbnVtYmVyIG9mIHJlcXVlc3RzIGdvbmUgdG8gdGhlIGRyaXZlcnMgKi8KKworCS8qIElPIEhpc3RvcnkgdHJhY2tpbmcgKi8KKwkvKiBUaGlua3RpbWUgKi8KKwl1bnNpZ25lZCBsb25nIGxhc3RfZW5kX3JlcXVlc3Q7CisJdW5zaWduZWQgbG9uZyB0dGltZV90b3RhbDsKKwl1bnNpZ25lZCBsb25nIHR0aW1lX3NhbXBsZXM7CisJdW5zaWduZWQgbG9uZyB0dGltZV9tZWFuOworCS8qIExheW91dCBwYXR0ZXJuICovCisJdW5zaWduZWQgaW50IHNlZWtfc2FtcGxlczsKKwlzZWN0b3JfdCBsYXN0X3JlcXVlc3RfcG9zOworCXU2NCBzZWVrX3RvdGFsOworCXNlY3Rvcl90IHNlZWtfbWVhbjsKK307CisKK3N0cnVjdCBjZnFfcXVldWU7CitzdHJ1Y3QgY2ZxX2lvX2NvbnRleHQgeworCXZvaWQgKCpkdG9yKShzdHJ1Y3QgY2ZxX2lvX2NvbnRleHQgKik7CisJdm9pZCAoKmV4aXQpKHN0cnVjdCBjZnFfaW9fY29udGV4dCAqKTsKKworCXN0cnVjdCBpb19jb250ZXh0ICppb2M7CisKKwkvKgorCSAqIGNpcmN1bGFyIGxpc3Qgb2YgY2ZxX2lvX2NvbnRleHRzIGJlbG9uZ2luZyB0byBhIHByb2Nlc3MgaW8gY29udGV4dAorCSAqLworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFxOworfTsKKworLyoKKyAqIFRoaXMgaXMgdGhlIHBlci1wcm9jZXNzIEkvTyBzdWJzeXN0ZW0gc3RhdGUuICBJdCBpcyByZWZjb3VudGVkIGFuZAorICoga21hbGxvYydlZC4gQ3VycmVudGx5IGFsbCBmaWVsZHMgYXJlIG1vZGlmaWVkIGluIHByb2Nlc3MgaW8gY29udGV4dAorICogKGFwYXJ0IGZyb20gdGhlIGF0b21pYyByZWZjb3VudCksIHNvIHJlcXVpcmUgbm8gbG9ja2luZy4KKyAqLworc3RydWN0IGlvX2NvbnRleHQgeworCWF0b21pY190IHJlZmNvdW50OworCXBpZF90IHBpZDsKKworCS8qCisJICogRm9yIHJlcXVlc3QgYmF0Y2hpbmcKKwkgKi8KKwl1bnNpZ25lZCBsb25nIGxhc3Rfd2FpdGVkOyAvKiBUaW1lIGxhc3Qgd29rZW4gYWZ0ZXIgd2FpdCBmb3IgcmVxdWVzdCAqLworCWludCBucl9iYXRjaF9yZXF1ZXN0czsgICAgIC8qIE51bWJlciBvZiByZXF1ZXN0cyBsZWZ0IGluIHRoZSBiYXRjaCAqLworCisJc3BpbmxvY2tfdCBsb2NrOworCisJc3RydWN0IGFzX2lvX2NvbnRleHQgKmFpYzsKKwlzdHJ1Y3QgY2ZxX2lvX2NvbnRleHQgKmNpYzsKK307CisKK3ZvaWQgcHV0X2lvX2NvbnRleHQoc3RydWN0IGlvX2NvbnRleHQgKmlvYyk7Cit2b2lkIGV4aXRfaW9fY29udGV4dCh2b2lkKTsKK3N0cnVjdCBpb19jb250ZXh0ICpnZXRfaW9fY29udGV4dChpbnQgZ2ZwX2ZsYWdzKTsKK3ZvaWQgY29weV9pb19jb250ZXh0KHN0cnVjdCBpb19jb250ZXh0ICoqcGRzdCwgc3RydWN0IGlvX2NvbnRleHQgKipwc3JjKTsKK3ZvaWQgc3dhcF9pb19jb250ZXh0KHN0cnVjdCBpb19jb250ZXh0ICoqaW9jMSwgc3RydWN0IGlvX2NvbnRleHQgKippb2MyKTsKKworc3RydWN0IHJlcXVlc3Q7Cit0eXBlZGVmIHZvaWQgKHJxX2VuZF9pb19mbikoc3RydWN0IHJlcXVlc3QgKik7CisKK3N0cnVjdCByZXF1ZXN0X2xpc3QgeworCWludCBjb3VudFsyXTsKKwlpbnQgc3RhcnZlZFsyXTsKKwltZW1wb29sX3QgKnJxX3Bvb2w7CisJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdFsyXTsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBkcmFpbjsKK307CisKKyNkZWZpbmUgQkxLX01BWF9DREIJMTYKKworLyoKKyAqIHRyeSB0byBwdXQgdGhlIGZpZWxkcyB0aGF0IGFyZSByZWZlcmVuY2VkIHRvZ2V0aGVyIGluIHRoZSBzYW1lIGNhY2hlbGluZQorICovCitzdHJ1Y3QgcmVxdWVzdCB7CisJc3RydWN0IGxpc3RfaGVhZCBxdWV1ZWxpc3Q7IC8qIGxvb2tpbmcgZm9yIC0+cXVldWU/IHlvdSBtdXN0IF9ub3RfCisJCQkJICAgICAqIGFjY2VzcyBpdCBkaXJlY3RseSwgdXNlCisJCQkJICAgICAqIGJsa2Rldl9kZXF1ZXVlX3JlcXVlc3QhICovCisJdW5zaWduZWQgbG9uZyBmbGFnczsJCS8qIHNlZSBSRVFfIGJpdHMgYmVsb3cgKi8KKworCS8qIE1haW50YWluIGJpbyB0cmF2ZXJzYWwgc3RhdGUgZm9yIHBhcnQgYnkgcGFydCBJL08gc3VibWlzc2lvbi4KKwkgKiBoYXJkXyogYXJlIGJsb2NrIGxheWVyIGludGVybmFscywgbm8gZHJpdmVyIHNob3VsZCB0b3VjaCB0aGVtIQorCSAqLworCisJc2VjdG9yX3Qgc2VjdG9yOwkJLyogbmV4dCBzZWN0b3IgdG8gc3VibWl0ICovCisJdW5zaWduZWQgbG9uZyBucl9zZWN0b3JzOwkvKiBuby4gb2Ygc2VjdG9ycyBsZWZ0IHRvIHN1Ym1pdCAqLworCS8qIG5vLiBvZiBzZWN0b3JzIGxlZnQgdG8gc3VibWl0IGluIHRoZSBjdXJyZW50IHNlZ21lbnQgKi8KKwl1bnNpZ25lZCBpbnQgY3VycmVudF9ucl9zZWN0b3JzOworCisJc2VjdG9yX3QgaGFyZF9zZWN0b3I7CQkvKiBuZXh0IHNlY3RvciB0byBjb21wbGV0ZSAqLworCXVuc2lnbmVkIGxvbmcgaGFyZF9ucl9zZWN0b3JzOwkvKiBuby4gb2Ygc2VjdG9ycyBsZWZ0IHRvIGNvbXBsZXRlICovCisJLyogbm8uIG9mIHNlY3RvcnMgbGVmdCB0byBjb21wbGV0ZSBpbiB0aGUgY3VycmVudCBzZWdtZW50ICovCisJdW5zaWduZWQgaW50IGhhcmRfY3VyX3NlY3RvcnM7CisKKwlzdHJ1Y3QgYmlvICpiaW87CisJc3RydWN0IGJpbyAqYmlvdGFpbDsKKworCXZvaWQgKmVsZXZhdG9yX3ByaXZhdGU7CisKKwlpbnQgcnFfc3RhdHVzOwkvKiBzaG91bGQgc3BsaXQgdGhpcyBpbnRvIGEgZmV3IHN0YXR1cyBiaXRzICovCisJc3RydWN0IGdlbmRpc2sgKnJxX2Rpc2s7CisJaW50IGVycm9yczsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0X3RpbWU7CisKKwkvKiBOdW1iZXIgb2Ygc2NhdHRlci1nYXRoZXIgRE1BIGFkZHIrbGVuIHBhaXJzIGFmdGVyCisJICogcGh5c2ljYWwgYWRkcmVzcyBjb2FsZXNjaW5nIGlzIHBlcmZvcm1lZC4KKwkgKi8KKwl1bnNpZ25lZCBzaG9ydCBucl9waHlzX3NlZ21lbnRzOworCisJLyogTnVtYmVyIG9mIHNjYXR0ZXItZ2F0aGVyIGFkZHIrbGVuIHBhaXJzIGFmdGVyCisJICogcGh5c2ljYWwgYW5kIERNQSByZW1hcHBpbmcgaGFyZHdhcmUgY29hbGVzY2luZyBpcyBwZXJmb3JtZWQuCisJICogVGhpcyBpcyB0aGUgbnVtYmVyIG9mIHNjYXR0ZXItZ2F0aGVyIGVudHJpZXMgdGhlIGRyaXZlcgorCSAqIHdpbGwgYWN0dWFsbHkgaGF2ZSB0byBkZWFsIHdpdGggYWZ0ZXIgRE1BIG1hcHBpbmcgaXMgZG9uZS4KKwkgKi8KKwl1bnNpZ25lZCBzaG9ydCBucl9od19zZWdtZW50czsKKworCWludCB0YWc7CisJY2hhciAqYnVmZmVyOworCisJaW50IHJlZl9jb3VudDsKKwlyZXF1ZXN0X3F1ZXVlX3QgKnE7CisJc3RydWN0IHJlcXVlc3RfbGlzdCAqcmw7CisKKwlzdHJ1Y3QgY29tcGxldGlvbiAqd2FpdGluZzsKKwl2b2lkICpzcGVjaWFsOworCisJLyoKKwkgKiB3aGVuIHJlcXVlc3QgaXMgdXNlZCBhcyBhIHBhY2tldCBjb21tYW5kIGNhcnJpZXIKKwkgKi8KKwl1bnNpZ25lZCBpbnQgY21kX2xlbjsKKwl1bnNpZ25lZCBjaGFyIGNtZFtCTEtfTUFYX0NEQl07CisKKwl1bnNpZ25lZCBpbnQgZGF0YV9sZW47CisJdm9pZCAqZGF0YTsKKworCXVuc2lnbmVkIGludCBzZW5zZV9sZW47CisJdm9pZCAqc2Vuc2U7CisKKwl1bnNpZ25lZCBpbnQgdGltZW91dDsKKworCS8qCisJICogRm9yIFBvd2VyIE1hbmFnZW1lbnQgcmVxdWVzdHMKKwkgKi8KKwlzdHJ1Y3QgcmVxdWVzdF9wbV9zdGF0ZSAqcG07CisKKwkvKgorCSAqIGNvbXBsZXRpb24gY2FsbGJhY2suIGVuZF9pb19kYXRhIHNob3VsZCBiZSBmb2xkZWQgaW4gd2l0aCB3YWl0aW5nCisJICovCisJcnFfZW5kX2lvX2ZuICplbmRfaW87CisJdm9pZCAqZW5kX2lvX2RhdGE7Cit9OworCisvKgorICogZmlyc3QgdGhyZWUgYml0cyBtYXRjaCBCSU9fUlcqIGJpdHMsIGltcG9ydGFudAorICovCitlbnVtIHJxX2ZsYWdfYml0cyB7CisJX19SRVFfUlcsCQkvKiBub3Qgc2V0LCByZWFkLiBzZXQsIHdyaXRlICovCisJX19SRVFfRkFJTEZBU1QsCQkvKiBubyBsb3cgbGV2ZWwgZHJpdmVyIHJldHJpZXMgKi8KKwlfX1JFUV9TT0ZUQkFSUklFUiwJLyogbWF5IG5vdCBiZSBwYXNzZWQgYnkgaW9zY2hlZHVsZXIgKi8KKwlfX1JFUV9IQVJEQkFSUklFUiwJLyogbWF5IG5vdCBiZSBwYXNzZWQgYnkgZHJpdmUgZWl0aGVyICovCisJX19SRVFfQ01ELAkJLyogaXMgYSByZWd1bGFyIGZzIHJ3IHJlcXVlc3QgKi8KKwlfX1JFUV9OT01FUkdFLAkJLyogZG9uJ3QgdG91Y2ggdGhpcyBmb3IgbWVyZ2luZyAqLworCV9fUkVRX1NUQVJURUQsCQkvKiBkcml2ZSBhbHJlYWR5IG1heSBoYXZlIHN0YXJ0ZWQgdGhpcyBvbmUgKi8KKwlfX1JFUV9ET05UUFJFUCwJCS8qIGRvbid0IGNhbGwgcHJlcCBmb3IgdGhpcyBvbmUgKi8KKwlfX1JFUV9RVUVVRUQsCQkvKiB1c2VzIHF1ZXVlaW5nICovCisJLyoKKwkgKiBmb3IgQVRBL0FUQVBJIGRldmljZXMKKwkgKi8KKwlfX1JFUV9QQywJCS8qIHBhY2tldCBjb21tYW5kIChzcGVjaWFsKSAqLworCV9fUkVRX0JMT0NLX1BDLAkJLyogcXVldWVkIGRvd24gcGMgZnJvbSBibG9jayBsYXllciAqLworCV9fUkVRX1NFTlNFLAkJLyogc2Vuc2UgcmV0cml2YWwgKi8KKworCV9fUkVRX0ZBSUxFRCwJCS8qIHNldCBpZiB0aGUgcmVxdWVzdCBmYWlsZWQgKi8KKwlfX1JFUV9RVUlFVCwJCS8qIGRvbid0IHdvcnJ5IGFib3V0IGVycm9ycyAqLworCV9fUkVRX1NQRUNJQUwsCQkvKiBkcml2ZXIgc3VwbGllZCBjb21tYW5kICovCisJX19SRVFfRFJJVkVfQ01ELAorCV9fUkVRX0RSSVZFX1RBU0ssCisJX19SRVFfRFJJVkVfVEFTS0ZJTEUsCisJX19SRVFfUFJFRU1QVCwJCS8qIHNldCBmb3IgImlkZV9wcmVlbXB0IiByZXF1ZXN0cyAqLworCV9fUkVRX1BNX1NVU1BFTkQsCS8qIHN1c3BlbmQgcmVxdWVzdCAqLworCV9fUkVRX1BNX1JFU1VNRSwJLyogcmVzdW1lIHJlcXVlc3QgKi8KKwlfX1JFUV9QTV9TSFVURE9XTiwJLyogc2h1dGRvd24gcmVxdWVzdCAqLworCV9fUkVRX0JBUl9QUkVGTFVTSCwJLyogYmFycmllciBwcmUtZmx1c2ggZG9uZSAqLworCV9fUkVRX0JBUl9QT1NURkxVU0gsCS8qIGJhcnJpZXIgcG9zdC1mbHVzaCAqLworCV9fUkVRX0JBUl9GTFVTSCwJLyogcnEgaXMgdGhlIGZsdXNoIHJlcXVlc3QgKi8KKwlfX1JFUV9OUl9CSVRTLAkJLyogc3RvcHMgaGVyZSAqLworfTsKKworI2RlZmluZSBSRVFfUlcJCSgxIDw8IF9fUkVRX1JXKQorI2RlZmluZSBSRVFfRkFJTEZBU1QJKDEgPDwgX19SRVFfRkFJTEZBU1QpCisjZGVmaW5lIFJFUV9TT0ZUQkFSUklFUgkoMSA8PCBfX1JFUV9TT0ZUQkFSUklFUikKKyNkZWZpbmUgUkVRX0hBUkRCQVJSSUVSCSgxIDw8IF9fUkVRX0hBUkRCQVJSSUVSKQorI2RlZmluZSBSRVFfQ01ECQkoMSA8PCBfX1JFUV9DTUQpCisjZGVmaW5lIFJFUV9OT01FUkdFCSgxIDw8IF9fUkVRX05PTUVSR0UpCisjZGVmaW5lIFJFUV9TVEFSVEVECSgxIDw8IF9fUkVRX1NUQVJURUQpCisjZGVmaW5lIFJFUV9ET05UUFJFUAkoMSA8PCBfX1JFUV9ET05UUFJFUCkKKyNkZWZpbmUgUkVRX1FVRVVFRAkoMSA8PCBfX1JFUV9RVUVVRUQpCisjZGVmaW5lIFJFUV9QQwkJKDEgPDwgX19SRVFfUEMpCisjZGVmaW5lIFJFUV9CTE9DS19QQwkoMSA8PCBfX1JFUV9CTE9DS19QQykKKyNkZWZpbmUgUkVRX1NFTlNFCSgxIDw8IF9fUkVRX1NFTlNFKQorI2RlZmluZSBSRVFfRkFJTEVECSgxIDw8IF9fUkVRX0ZBSUxFRCkKKyNkZWZpbmUgUkVRX1FVSUVUCSgxIDw8IF9fUkVRX1FVSUVUKQorI2RlZmluZSBSRVFfU1BFQ0lBTAkoMSA8PCBfX1JFUV9TUEVDSUFMKQorI2RlZmluZSBSRVFfRFJJVkVfQ01ECSgxIDw8IF9fUkVRX0RSSVZFX0NNRCkKKyNkZWZpbmUgUkVRX0RSSVZFX1RBU0sJKDEgPDwgX19SRVFfRFJJVkVfVEFTSykKKyNkZWZpbmUgUkVRX0RSSVZFX1RBU0tGSUxFCSgxIDw8IF9fUkVRX0RSSVZFX1RBU0tGSUxFKQorI2RlZmluZSBSRVFfUFJFRU1QVAkoMSA8PCBfX1JFUV9QUkVFTVBUKQorI2RlZmluZSBSRVFfUE1fU1VTUEVORAkoMSA8PCBfX1JFUV9QTV9TVVNQRU5EKQorI2RlZmluZSBSRVFfUE1fUkVTVU1FCSgxIDw8IF9fUkVRX1BNX1JFU1VNRSkKKyNkZWZpbmUgUkVRX1BNX1NIVVRET1dOCSgxIDw8IF9fUkVRX1BNX1NIVVRET1dOKQorI2RlZmluZSBSRVFfQkFSX1BSRUZMVVNICSgxIDw8IF9fUkVRX0JBUl9QUkVGTFVTSCkKKyNkZWZpbmUgUkVRX0JBUl9QT1NURkxVU0gJKDEgPDwgX19SRVFfQkFSX1BPU1RGTFVTSCkKKyNkZWZpbmUgUkVRX0JBUl9GTFVTSAkoMSA8PCBfX1JFUV9CQVJfRkxVU0gpCisKKy8qCisgKiBTdGF0ZSBpbmZvcm1hdGlvbiBjYXJyaWVkIGZvciBSRVFfUE1fU1VTUEVORCBhbmQgUkVRX1BNX1JFU1VNRQorICogcmVxdWVzdHMuIFNvbWUgc3RlcCB2YWx1ZXMgY291bGQgZXZlbnR1YWxseSBiZSBtYWRlIGdlbmVyaWMuCisgKi8KK3N0cnVjdCByZXF1ZXN0X3BtX3N0YXRlCit7CisJLyogUE0gc3RhdGUgbWFjaGluZSBzdGVwIHZhbHVlLCBjdXJyZW50bHkgZHJpdmVyIHNwZWNpZmljICovCisJaW50CXBtX3N0ZXA7CisJLyogcmVxdWVzdGVkIFBNIHN0YXRlIHZhbHVlIChTMSwgUzIsIFMzLCBTNCwgLi4uKSAqLworCXUzMglwbV9zdGF0ZTsKKwl2b2lkKglkYXRhOwkJLyogZm9yIGRyaXZlciB1c2UgKi8KK307CisKKyNpbmNsdWRlIDxsaW51eC9lbGV2YXRvci5oPgorCit0eXBlZGVmIGludCAobWVyZ2VfcmVxdWVzdF9mbikgKHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqLAorCQkJCXN0cnVjdCBiaW8gKik7Cit0eXBlZGVmIGludCAobWVyZ2VfcmVxdWVzdHNfZm4pIChyZXF1ZXN0X3F1ZXVlX3QgKiwgc3RydWN0IHJlcXVlc3QgKiwKKwkJCQkgc3RydWN0IHJlcXVlc3QgKik7Cit0eXBlZGVmIHZvaWQgKHJlcXVlc3RfZm5fcHJvYykgKHJlcXVlc3RfcXVldWVfdCAqcSk7Cit0eXBlZGVmIGludCAobWFrZV9yZXF1ZXN0X2ZuKSAocmVxdWVzdF9xdWV1ZV90ICpxLCBzdHJ1Y3QgYmlvICpiaW8pOwordHlwZWRlZiBpbnQgKHByZXBfcnFfZm4pIChyZXF1ZXN0X3F1ZXVlX3QgKiwgc3RydWN0IHJlcXVlc3QgKik7Cit0eXBlZGVmIHZvaWQgKHVucGx1Z19mbikgKHJlcXVlc3RfcXVldWVfdCAqKTsKKworc3RydWN0IGJpb192ZWM7Cit0eXBlZGVmIGludCAobWVyZ2VfYnZlY19mbikgKHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1Y3QgYmlvICosIHN0cnVjdCBiaW9fdmVjICopOwordHlwZWRlZiB2b2lkIChhY3Rpdml0eV9mbikgKHZvaWQgKmRhdGEsIGludCBydyk7Cit0eXBlZGVmIGludCAoaXNzdWVfZmx1c2hfZm4pIChyZXF1ZXN0X3F1ZXVlX3QgKiwgc3RydWN0IGdlbmRpc2sgKiwgc2VjdG9yX3QgKik7Cit0eXBlZGVmIGludCAocHJlcGFyZV9mbHVzaF9mbikgKHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKK3R5cGVkZWYgdm9pZCAoZW5kX2ZsdXNoX2ZuKSAocmVxdWVzdF9xdWV1ZV90ICosIHN0cnVjdCByZXF1ZXN0ICopOworCitlbnVtIGJsa19xdWV1ZV9zdGF0ZSB7CisJUXVldWVfZG93biwKKwlRdWV1ZV91cCwKK307CisKKyNkZWZpbmUgQkxLX1RBR1NfUEVSX0xPTkcJKHNpemVvZih1bnNpZ25lZCBsb25nKSAqIDgpCisjZGVmaW5lIEJMS19UQUdTX01BU0sJCShCTEtfVEFHU19QRVJfTE9ORyAtIDEpCisKK3N0cnVjdCBibGtfcXVldWVfdGFnIHsKKwlzdHJ1Y3QgcmVxdWVzdCAqKnRhZ19pbmRleDsJLyogbWFwIG9mIGJ1c3kgdGFncyAqLworCXVuc2lnbmVkIGxvbmcgKnRhZ19tYXA7CQkvKiBiaXQgbWFwIG9mIGZyZWUvYnVzeSB0YWdzICovCisJc3RydWN0IGxpc3RfaGVhZCBidXN5X2xpc3Q7CS8qIGZpZm8gbGlzdCBvZiBidXN5IHRhZ3MgKi8KKwlpbnQgYnVzeTsJCQkvKiBjdXJyZW50IGRlcHRoICovCisJaW50IG1heF9kZXB0aDsJCQkvKiB3aGF0IHdlIHdpbGwgc2VuZCB0byBkZXZpY2UgKi8KKwlpbnQgcmVhbF9tYXhfZGVwdGg7CQkvKiB3aGF0IHRoZSBhcnJheSBjYW4gaG9sZCAqLworCWF0b21pY190IHJlZmNudDsJCS8qIG1hcCBjYW4gYmUgc2hhcmVkICovCit9OworCitzdHJ1Y3QgcmVxdWVzdF9xdWV1ZQoreworCS8qCisJICogVG9nZXRoZXIgd2l0aCBxdWV1ZV9oZWFkIGZvciBjYWNoZWxpbmUgc2hhcmluZworCSAqLworCXN0cnVjdCBsaXN0X2hlYWQJcXVldWVfaGVhZDsKKwlzdHJ1Y3QgcmVxdWVzdAkJKmxhc3RfbWVyZ2U7CisJZWxldmF0b3JfdAkJKmVsZXZhdG9yOworCisJLyoKKwkgKiB0aGUgcXVldWUgcmVxdWVzdCBmcmVlbGlzdCwgb25lIGZvciByZWFkcyBhbmQgb25lIGZvciB3cml0ZXMKKwkgKi8KKwlzdHJ1Y3QgcmVxdWVzdF9saXN0CXJxOworCisJcmVxdWVzdF9mbl9wcm9jCQkqcmVxdWVzdF9mbjsKKwltZXJnZV9yZXF1ZXN0X2ZuCSpiYWNrX21lcmdlX2ZuOworCW1lcmdlX3JlcXVlc3RfZm4JKmZyb250X21lcmdlX2ZuOworCW1lcmdlX3JlcXVlc3RzX2ZuCSptZXJnZV9yZXF1ZXN0c19mbjsKKwltYWtlX3JlcXVlc3RfZm4JCSptYWtlX3JlcXVlc3RfZm47CisJcHJlcF9ycV9mbgkJKnByZXBfcnFfZm47CisJdW5wbHVnX2ZuCQkqdW5wbHVnX2ZuOworCW1lcmdlX2J2ZWNfZm4JCSptZXJnZV9idmVjX2ZuOworCWFjdGl2aXR5X2ZuCQkqYWN0aXZpdHlfZm47CisJaXNzdWVfZmx1c2hfZm4JCSppc3N1ZV9mbHVzaF9mbjsKKwlwcmVwYXJlX2ZsdXNoX2ZuCSpwcmVwYXJlX2ZsdXNoX2ZuOworCWVuZF9mbHVzaF9mbgkJKmVuZF9mbHVzaF9mbjsKKworCS8qCisJICogQXV0by11bnBsdWdnaW5nIHN0YXRlCisJICovCisJc3RydWN0IHRpbWVyX2xpc3QJdW5wbHVnX3RpbWVyOworCWludAkJCXVucGx1Z190aHJlc2g7CS8qIEFmdGVyIHRoaXMgbWFueSByZXF1ZXN0cyAqLworCXVuc2lnbmVkIGxvbmcJCXVucGx1Z19kZWxheTsJLyogQWZ0ZXIgdGhpcyBtYW55IGppZmZpZXMgKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJdW5wbHVnX3dvcms7CisKKwlzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbwliYWNraW5nX2Rldl9pbmZvOworCisJLyoKKwkgKiBUaGUgcXVldWUgb3duZXIgZ2V0cyB0byB1c2UgdGhpcyBmb3Igd2hhdGV2ZXIgdGhleSBsaWtlLgorCSAqIGxsX3J3X2JsayBkb2Vzbid0IHRvdWNoIGl0LgorCSAqLworCXZvaWQJCQkqcXVldWVkYXRhOworCisJdm9pZAkJCSphY3Rpdml0eV9kYXRhOworCisJLyoKKwkgKiBxdWV1ZSBuZWVkcyBib3VuY2UgcGFnZXMgZm9yIHBhZ2VzIGFib3ZlIHRoaXMgbGltaXQKKwkgKi8KKwl1bnNpZ25lZCBsb25nCQlib3VuY2VfcGZuOworCXVuc2lnbmVkIGludAkJYm91bmNlX2dmcDsKKworCS8qCisJICogdmFyaW91cyBxdWV1ZSBmbGFncywgc2VlIFFVRVVFXyogYmVsb3cKKwkgKi8KKwl1bnNpZ25lZCBsb25nCQlxdWV1ZV9mbGFnczsKKworCS8qCisJICogcHJvdGVjdHMgcXVldWUgc3RydWN0dXJlcyBmcm9tIHJlZW50cmFuY3kKKwkgKi8KKwlzcGlubG9ja190CQkqcXVldWVfbG9jazsKKworCS8qCisJICogcXVldWUga29iamVjdAorCSAqLworCXN0cnVjdCBrb2JqZWN0IGtvYmo7CisKKwkvKgorCSAqIHF1ZXVlIHNldHRpbmdzCisJICovCisJdW5zaWduZWQgbG9uZwkJbnJfcmVxdWVzdHM7CS8qIE1heCAjIG9mIHJlcXVlc3RzICovCisJdW5zaWduZWQgaW50CQlucl9jb25nZXN0aW9uX29uOworCXVuc2lnbmVkIGludAkJbnJfY29uZ2VzdGlvbl9vZmY7CisJdW5zaWduZWQgaW50CQlucl9iYXRjaGluZzsKKworCXVuc2lnbmVkIHNob3J0CQltYXhfc2VjdG9yczsKKwl1bnNpZ25lZCBzaG9ydAkJbWF4X2h3X3NlY3RvcnM7CisJdW5zaWduZWQgc2hvcnQJCW1heF9waHlzX3NlZ21lbnRzOworCXVuc2lnbmVkIHNob3J0CQltYXhfaHdfc2VnbWVudHM7CisJdW5zaWduZWQgc2hvcnQJCWhhcmRzZWN0X3NpemU7CisJdW5zaWduZWQgaW50CQltYXhfc2VnbWVudF9zaXplOworCisJdW5zaWduZWQgbG9uZwkJc2VnX2JvdW5kYXJ5X21hc2s7CisJdW5zaWduZWQgaW50CQlkbWFfYWxpZ25tZW50OworCisJc3RydWN0IGJsa19xdWV1ZV90YWcJKnF1ZXVlX3RhZ3M7CisKKwlhdG9taWNfdAkJcmVmY250OworCisJdW5zaWduZWQgaW50CQlpbl9mbGlnaHQ7CisKKwkvKgorCSAqIHNnIHN0dWZmCisJICovCisJdW5zaWduZWQgaW50CQlzZ190aW1lb3V0OworCXVuc2lnbmVkIGludAkJc2dfcmVzZXJ2ZWRfc2l6ZTsKKworCXN0cnVjdCBsaXN0X2hlYWQJZHJhaW5fbGlzdDsKKworCS8qCisJICogcmVzZXJ2ZWQgZm9yIGZsdXNoIG9wZXJhdGlvbnMKKwkgKi8KKwlzdHJ1Y3QgcmVxdWVzdAkJKmZsdXNoX3JxOworCXVuc2lnbmVkIGNoYXIJCW9yZGVyZWQ7Cit9OworCitlbnVtIHsKKwlRVUVVRV9PUkRFUkVEX05PTkUsCisJUVVFVUVfT1JERVJFRF9UQUcsCisJUVVFVUVfT1JERVJFRF9GTFVTSCwKK307CisKKyNkZWZpbmUgUlFfSU5BQ1RJVkUJCSgtMSkKKyNkZWZpbmUgUlFfQUNUSVZFCQkxCisjZGVmaW5lIFJRX1NDU0lfQlVTWQkJMHhmZmZmCisjZGVmaW5lIFJRX1NDU0lfRE9ORQkJMHhmZmZlCisjZGVmaW5lIFJRX1NDU0lfRElTQ09OTkVDVElORwkweGZmZTAKKworI2RlZmluZSBRVUVVRV9GTEFHX0NMVVNURVIJMAkvKiBjbHVzdGVyIHNldmVyYWwgc2VnbWVudHMgaW50byAxICovCisjZGVmaW5lIFFVRVVFX0ZMQUdfUVVFVUVECTEJLyogdXNlcyBnZW5lcmljIHRhZyBxdWV1ZWluZyAqLworI2RlZmluZSBRVUVVRV9GTEFHX1NUT1BQRUQJMgkvKiBxdWV1ZSBpcyBzdG9wcGVkICovCisjZGVmaW5lCVFVRVVFX0ZMQUdfUkVBREZVTEwJMwkvKiB3cml0ZSBxdWV1ZSBoYXMgYmVlbiBmaWxsZWQgKi8KKyNkZWZpbmUgUVVFVUVfRkxBR19XUklURUZVTEwJNAkvKiByZWFkIHF1ZXVlIGhhcyBiZWVuIGZpbGxlZCAqLworI2RlZmluZSBRVUVVRV9GTEFHX0RFQUQJCTUJLyogcXVldWUgYmVpbmcgdG9ybiBkb3duICovCisjZGVmaW5lIFFVRVVFX0ZMQUdfUkVFTlRFUgk2CS8qIFJlLWVudHJhbmN5IGF2b2lkYW5jZSAqLworI2RlZmluZSBRVUVVRV9GTEFHX1BMVUdHRUQJNwkvKiBxdWV1ZSBpcyBwbHVnZ2VkICovCisjZGVmaW5lIFFVRVVFX0ZMQUdfRFJBSU4JOAkvKiBkcmFpbmluZyBxdWV1ZSBmb3Igc2NoZWQgc3dpdGNoICovCisjZGVmaW5lIFFVRVVFX0ZMQUdfRkxVU0gJOQkvKiBkb2luZyBiYXJyaWVyIGZsdXNoIHNlcXVlbmNlICovCisKKyNkZWZpbmUgYmxrX3F1ZXVlX3BsdWdnZWQocSkJdGVzdF9iaXQoUVVFVUVfRkxBR19QTFVHR0VELCAmKHEpLT5xdWV1ZV9mbGFncykKKyNkZWZpbmUgYmxrX3F1ZXVlX3RhZ2dlZChxKQl0ZXN0X2JpdChRVUVVRV9GTEFHX1FVRVVFRCwgJihxKS0+cXVldWVfZmxhZ3MpCisjZGVmaW5lIGJsa19xdWV1ZV9zdG9wcGVkKHEpCXRlc3RfYml0KFFVRVVFX0ZMQUdfU1RPUFBFRCwgJihxKS0+cXVldWVfZmxhZ3MpCisjZGVmaW5lIGJsa19xdWV1ZV9mbHVzaGluZyhxKQl0ZXN0X2JpdChRVUVVRV9GTEFHX0ZMVVNILCAmKHEpLT5xdWV1ZV9mbGFncykKKworI2RlZmluZSBibGtfZnNfcmVxdWVzdChycSkJKChycSktPmZsYWdzICYgUkVRX0NNRCkKKyNkZWZpbmUgYmxrX3BjX3JlcXVlc3QocnEpCSgocnEpLT5mbGFncyAmIFJFUV9CTE9DS19QQykKKyNkZWZpbmUgYmxrX25vcmV0cnlfcmVxdWVzdChycSkJKChycSktPmZsYWdzICYgUkVRX0ZBSUxGQVNUKQorI2RlZmluZSBibGtfcnFfc3RhcnRlZChycSkJKChycSktPmZsYWdzICYgUkVRX1NUQVJURUQpCisKKyNkZWZpbmUgYmxrX2FjY291bnRfcnEocnEpCShibGtfcnFfc3RhcnRlZChycSkgJiYgYmxrX2ZzX3JlcXVlc3QocnEpKQorCisjZGVmaW5lIGJsa19wbV9zdXNwZW5kX3JlcXVlc3QocnEpCSgocnEpLT5mbGFncyAmIFJFUV9QTV9TVVNQRU5EKQorI2RlZmluZSBibGtfcG1fcmVzdW1lX3JlcXVlc3QocnEpCSgocnEpLT5mbGFncyAmIFJFUV9QTV9SRVNVTUUpCisjZGVmaW5lIGJsa19wbV9yZXF1ZXN0KHJxKQlcCisJKChycSktPmZsYWdzICYgKFJFUV9QTV9TVVNQRU5EIHwgUkVRX1BNX1JFU1VNRSkpCisKKyNkZWZpbmUgYmxrX2JhcnJpZXJfcnEocnEpCSgocnEpLT5mbGFncyAmIFJFUV9IQVJEQkFSUklFUikKKyNkZWZpbmUgYmxrX2JhcnJpZXJfcHJlZmx1c2gocnEpCSgocnEpLT5mbGFncyAmIFJFUV9CQVJfUFJFRkxVU0gpCisjZGVmaW5lIGJsa19iYXJyaWVyX3Bvc3RmbHVzaChycSkJKChycSktPmZsYWdzICYgUkVRX0JBUl9QT1NURkxVU0gpCisKKyNkZWZpbmUgbGlzdF9lbnRyeV9ycShwdHIpCWxpc3RfZW50cnkoKHB0ciksIHN0cnVjdCByZXF1ZXN0LCBxdWV1ZWxpc3QpCisKKyNkZWZpbmUgcnFfZGF0YV9kaXIocnEpCQkoKHJxKS0+ZmxhZ3MgJiAxKQorCitzdGF0aWMgaW5saW5lIGludCBibGtfcXVldWVfZnVsbChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgaW50IHJ3KQoreworCWlmIChydyA9PSBSRUFEKQorCQlyZXR1cm4gdGVzdF9iaXQoUVVFVUVfRkxBR19SRUFERlVMTCwgJnEtPnF1ZXVlX2ZsYWdzKTsKKwlyZXR1cm4gdGVzdF9iaXQoUVVFVUVfRkxBR19XUklURUZVTEwsICZxLT5xdWV1ZV9mbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBibGtfc2V0X3F1ZXVlX2Z1bGwoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGludCBydykKK3sKKwlpZiAocncgPT0gUkVBRCkKKwkJc2V0X2JpdChRVUVVRV9GTEFHX1JFQURGVUxMLCAmcS0+cXVldWVfZmxhZ3MpOworCWVsc2UKKwkJc2V0X2JpdChRVUVVRV9GTEFHX1dSSVRFRlVMTCwgJnEtPnF1ZXVlX2ZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGJsa19jbGVhcl9xdWV1ZV9mdWxsKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBpbnQgcncpCit7CisJaWYgKHJ3ID09IFJFQUQpCisJCWNsZWFyX2JpdChRVUVVRV9GTEFHX1JFQURGVUxMLCAmcS0+cXVldWVfZmxhZ3MpOworCWVsc2UKKwkJY2xlYXJfYml0KFFVRVVFX0ZMQUdfV1JJVEVGVUxMLCAmcS0+cXVldWVfZmxhZ3MpOworfQorCisKKy8qCisgKiBtZXJnZWFibGUgcmVxdWVzdCBtdXN0IG5vdCBoYXZlIF9OT01FUkdFIG9yIF9CQVJSSUVSIGJpdCBzZXQsIG5vciBtYXkKKyAqIGl0IGFscmVhZHkgYmUgc3RhcnRlZCBieSBkcml2ZXIuCisgKi8KKyNkZWZpbmUgUlFfTk9NRVJHRV9GTEFHUwlcCisJKFJFUV9OT01FUkdFIHwgUkVRX1NUQVJURUQgfCBSRVFfSEFSREJBUlJJRVIgfCBSRVFfU09GVEJBUlJJRVIpCisjZGVmaW5lIHJxX21lcmdlYWJsZShycSkJXAorCSghKChycSktPmZsYWdzICYgUlFfTk9NRVJHRV9GTEFHUykgJiYgYmxrX2ZzX3JlcXVlc3QoKHJxKSkpCisKKy8qCisgKiBub29wLCByZXF1ZXN0cyBhcmUgYXV0b21hZ2ljYWxseSBtYXJrZWQgYXMgYWN0aXZlL2luYWN0aXZlIGJ5IEkvTworICogc2NoZWR1bGVyIC0tIHNlZSBlbHZfbmV4dF9yZXF1ZXN0CisgKi8KKyNkZWZpbmUgYmxrX3F1ZXVlX2hlYWRhY3RpdmUocSwgaGVhZF9hY3RpdmUpCisKKy8qCisgKiBxLT5wcmVwX3JxX2ZuIHJldHVybiB2YWx1ZXMKKyAqLworI2RlZmluZSBCTEtQUkVQX09LCQkwCS8qIHNlcnZlIGl0ICovCisjZGVmaW5lIEJMS1BSRVBfS0lMTAkJMQkvKiBmYXRhbCBlcnJvciwga2lsbCAqLworI2RlZmluZSBCTEtQUkVQX0RFRkVSCQkyCS8qIGxlYXZlIG9uIHF1ZXVlICovCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIGJsa19tYXhfbG93X3BmbiwgYmxrX21heF9wZm47CisKKy8qCisgKiBzdGFuZGFyZCBib3VuY2UgYWRkcmVzc2VzOgorICoKKyAqIEJMS19CT1VOQ0VfSElHSAk6IGJvdW5jZSBhbGwgaGlnaG1lbSBwYWdlcworICogQkxLX0JPVU5DRV9BTlkJOiBkb24ndCBib3VuY2UgYW55dGhpbmcKKyAqIEJMS19CT1VOQ0VfSVNBCTogYm91bmNlIHBhZ2VzIGFib3ZlIElTQSBETUEgYm91bmRhcnkKKyAqLworI2RlZmluZSBCTEtfQk9VTkNFX0hJR0gJCSgodTY0KWJsa19tYXhfbG93X3BmbiA8PCBQQUdFX1NISUZUKQorI2RlZmluZSBCTEtfQk9VTkNFX0FOWQkJKCh1NjQpYmxrX21heF9wZm4gPDwgUEFHRV9TSElGVCkKKyNkZWZpbmUgQkxLX0JPVU5DRV9JU0EJCShJU0FfRE1BX1RIUkVTSE9MRCkKKworI2lmZGVmIENPTkZJR19NTVUKK2V4dGVybiBpbnQgaW5pdF9lbWVyZ2VuY3lfaXNhX3Bvb2wodm9pZCk7CitleHRlcm4gdm9pZCBibGtfcXVldWVfYm91bmNlKHJlcXVlc3RfcXVldWVfdCAqcSwgc3RydWN0IGJpbyAqKmJpbyk7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgaW5pdF9lbWVyZ2VuY3lfaXNhX3Bvb2wodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBibGtfcXVldWVfYm91bmNlKHJlcXVlc3RfcXVldWVfdCAqcSwgc3RydWN0IGJpbyAqKmJpbykKK3sKK30KKyNlbmRpZiAvKiBDT05GSUdfTU1VICovCisKKyNkZWZpbmUgcnFfZm9yX2VhY2hfYmlvKF9iaW8sIHJxKQlcCisJaWYgKChycS0+YmlvKSkJCQlcCisJCWZvciAoX2JpbyA9IChycSktPmJpbzsgX2JpbzsgX2JpbyA9IF9iaW8tPmJpX25leHQpCisKK3N0cnVjdCBzZWNfc2l6ZSB7CisJdW5zaWduZWQgYmxvY2tfc2l6ZTsKKwl1bnNpZ25lZCBibG9ja19zaXplX2JpdHM7Cit9OworCitleHRlcm4gaW50IGJsa19yZWdpc3Rlcl9xdWV1ZShzdHJ1Y3QgZ2VuZGlzayAqZGlzayk7CitleHRlcm4gdm9pZCBibGtfdW5yZWdpc3Rlcl9xdWV1ZShzdHJ1Y3QgZ2VuZGlzayAqZGlzayk7CitleHRlcm4gdm9pZCByZWdpc3Rlcl9kaXNrKHN0cnVjdCBnZW5kaXNrICpkZXYpOworZXh0ZXJuIHZvaWQgZ2VuZXJpY19tYWtlX3JlcXVlc3Qoc3RydWN0IGJpbyAqYmlvKTsKK2V4dGVybiB2b2lkIGJsa19wdXRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqKTsKK2V4dGVybiB2b2lkIGJsa19lbmRfc3luY19ycShzdHJ1Y3QgcmVxdWVzdCAqcnEpOworZXh0ZXJuIHZvaWQgYmxrX2F0dGVtcHRfcmVtZXJnZShyZXF1ZXN0X3F1ZXVlX3QgKiwgc3RydWN0IHJlcXVlc3QgKik7CitleHRlcm4gdm9pZCBfX2Jsa19hdHRlbXB0X3JlbWVyZ2UocmVxdWVzdF9xdWV1ZV90ICosIHN0cnVjdCByZXF1ZXN0ICopOworZXh0ZXJuIHN0cnVjdCByZXF1ZXN0ICpibGtfZ2V0X3JlcXVlc3QocmVxdWVzdF9xdWV1ZV90ICosIGludCwgaW50KTsKK2V4dGVybiB2b2lkIGJsa19pbnNlcnRfcmVxdWVzdChyZXF1ZXN0X3F1ZXVlX3QgKiwgc3RydWN0IHJlcXVlc3QgKiwgaW50LCB2b2lkICosIGludCk7CitleHRlcm4gdm9pZCBibGtfcmVxdWV1ZV9yZXF1ZXN0KHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKK2V4dGVybiB2b2lkIGJsa19wbHVnX2RldmljZShyZXF1ZXN0X3F1ZXVlX3QgKik7CitleHRlcm4gaW50IGJsa19yZW1vdmVfcGx1ZyhyZXF1ZXN0X3F1ZXVlX3QgKik7CitleHRlcm4gdm9pZCBibGtfcmVjb3VudF9zZWdtZW50cyhyZXF1ZXN0X3F1ZXVlX3QgKiwgc3RydWN0IGJpbyAqKTsKK2V4dGVybiBpbnQgYmxrX3BoeXNfY29udGlnX3NlZ21lbnQocmVxdWVzdF9xdWV1ZV90ICpxLCBzdHJ1Y3QgYmlvICosIHN0cnVjdCBiaW8gKik7CitleHRlcm4gaW50IGJsa19od19jb250aWdfc2VnbWVudChyZXF1ZXN0X3F1ZXVlX3QgKnEsIHN0cnVjdCBiaW8gKiwgc3RydWN0IGJpbyAqKTsKK2V4dGVybiBpbnQgc2NzaV9jbWRfaW9jdGwoc3RydWN0IGZpbGUgKiwgc3RydWN0IGdlbmRpc2sgKiwgdW5zaWduZWQgaW50LCB2b2lkIF9fdXNlciAqKTsKK2V4dGVybiB2b2lkIGJsa19zdGFydF9xdWV1ZShyZXF1ZXN0X3F1ZXVlX3QgKnEpOworZXh0ZXJuIHZvaWQgYmxrX3N0b3BfcXVldWUocmVxdWVzdF9xdWV1ZV90ICpxKTsKK2V4dGVybiB2b2lkIGJsa19zeW5jX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKTsKK2V4dGVybiB2b2lkIF9fYmxrX3N0b3BfcXVldWUocmVxdWVzdF9xdWV1ZV90ICpxKTsKK2V4dGVybiB2b2lkIGJsa19ydW5fcXVldWUocmVxdWVzdF9xdWV1ZV90ICopOworZXh0ZXJuIHZvaWQgYmxrX3F1ZXVlX2FjdGl2aXR5X2ZuKHJlcXVlc3RfcXVldWVfdCAqLCBhY3Rpdml0eV9mbiAqLCB2b2lkICopOworZXh0ZXJuIHN0cnVjdCByZXF1ZXN0ICpibGtfcnFfbWFwX3VzZXIocmVxdWVzdF9xdWV1ZV90ICosIGludCwgdm9pZCBfX3VzZXIgKiwgdW5zaWduZWQgaW50KTsKK2V4dGVybiBpbnQgYmxrX3JxX3VubWFwX3VzZXIoc3RydWN0IHJlcXVlc3QgKiwgc3RydWN0IGJpbyAqLCB1bnNpZ25lZCBpbnQpOworZXh0ZXJuIGludCBibGtfZXhlY3V0ZV9ycShyZXF1ZXN0X3F1ZXVlX3QgKiwgc3RydWN0IGdlbmRpc2sgKiwgc3RydWN0IHJlcXVlc3QgKik7CisKK3N0YXRpYyBpbmxpbmUgcmVxdWVzdF9xdWV1ZV90ICpiZGV2X2dldF9xdWV1ZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KQoreworCXJldHVybiBiZGV2LT5iZF9kaXNrLT5xdWV1ZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGJsa19ydW5fYmFja2luZ19kZXYoc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSwKKwkJCQkgICAgICAgc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJaWYgKGJkaSAmJiBiZGktPnVucGx1Z19pb19mbikKKwkJYmRpLT51bnBsdWdfaW9fZm4oYmRpLCBwYWdlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGJsa19ydW5fYWRkcmVzc19zcGFjZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykKK3sKKwlpZiAobWFwcGluZykKKwkJYmxrX3J1bl9iYWNraW5nX2RldihtYXBwaW5nLT5iYWNraW5nX2Rldl9pbmZvLCBOVUxMKTsKK30KKworLyoKKyAqIGVuZF9yZXF1ZXN0KCkgYW5kIGZyaWVuZHMuIE11c3QgYmUgY2FsbGVkIHdpdGggdGhlIHJlcXVlc3QgcXVldWUgc3BpbmxvY2sKKyAqIGFjcXVpcmVkLiBBbGwgZnVuY3Rpb25zIGNhbGxlZCB3aXRoaW4gZW5kX3JlcXVlc3QoKSBfbXVzdF9iZV8gYXRvbWljLgorICoKKyAqIFNldmVyYWwgZHJpdmVycyBkZWZpbmUgdGhlaXIgb3duIGVuZF9yZXF1ZXN0IGFuZCBjYWxsCisgKiBlbmRfdGhhdF9yZXF1ZXN0X2ZpcnN0KCkgYW5kIGVuZF90aGF0X3JlcXVlc3RfbGFzdCgpCisgKiBmb3IgcGFydHMgb2YgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uLiBUaGlzIHByZXZlbnRzCisgKiBjb2RlIGR1cGxpY2F0aW9uIGluIGRyaXZlcnMuCisgKi8KK2V4dGVybiBpbnQgZW5kX3RoYXRfcmVxdWVzdF9maXJzdChzdHJ1Y3QgcmVxdWVzdCAqLCBpbnQsIGludCk7CitleHRlcm4gaW50IGVuZF90aGF0X3JlcXVlc3RfY2h1bmsoc3RydWN0IHJlcXVlc3QgKiwgaW50LCBpbnQpOworZXh0ZXJuIHZvaWQgZW5kX3RoYXRfcmVxdWVzdF9sYXN0KHN0cnVjdCByZXF1ZXN0ICopOworZXh0ZXJuIHZvaWQgZW5kX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJlcSwgaW50IHVwdG9kYXRlKTsKKworLyoKKyAqIGVuZF90aGF0X3JlcXVlc3RfZmlyc3QvY2h1bmsoKSB0YWtlcyBhbiB1cHRvZGF0ZSBhcmd1bWVudC4gd2UgYWNjb3VudAorICogYW55IHZhbHVlIDw9IGFzIGFuIGlvIGVycm9yLiAwIG1lYW5zIC1FSU8gZm9yIGNvbXBhdGFiaWxpdHkgcmVhc29ucywKKyAqIGFueSBvdGhlciA8IDAgdmFsdWUgaXMgdGhlIGRpcmVjdCBlcnJvciB0eXBlLiBBbiB1cHRvZGF0ZSB2YWx1ZSBvZgorICogMSBpbmRpY2F0ZXMgc3VjY2Vzc2Z1bCBpbyBjb21wbGV0aW9uCisgKi8KKyNkZWZpbmUgZW5kX2lvX2Vycm9yKHVwdG9kYXRlKQkodW5saWtlbHkoKHVwdG9kYXRlKSA8PSAwKSkKKworc3RhdGljIGlubGluZSB2b2lkIGJsa2Rldl9kZXF1ZXVlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJlcSkKK3sKKwlCVUdfT04obGlzdF9lbXB0eSgmcmVxLT5xdWV1ZWxpc3QpKTsKKworCWxpc3RfZGVsX2luaXQoJnJlcS0+cXVldWVsaXN0KTsKKworCWlmIChyZXEtPnJsKQorCQllbHZfcmVtb3ZlX3JlcXVlc3QocmVxLT5xLCByZXEpOworfQorCisvKgorICogQWNjZXNzIGZ1bmN0aW9ucyBmb3IgbWFuaXB1bGF0aW5nIHF1ZXVlIHByb3BlcnRpZXMKKyAqLworZXh0ZXJuIHJlcXVlc3RfcXVldWVfdCAqYmxrX2luaXRfcXVldWUocmVxdWVzdF9mbl9wcm9jICosIHNwaW5sb2NrX3QgKik7CitleHRlcm4gdm9pZCBibGtfY2xlYW51cF9xdWV1ZShyZXF1ZXN0X3F1ZXVlX3QgKik7CitleHRlcm4gdm9pZCBibGtfcXVldWVfbWFrZV9yZXF1ZXN0KHJlcXVlc3RfcXVldWVfdCAqLCBtYWtlX3JlcXVlc3RfZm4gKik7CitleHRlcm4gdm9pZCBibGtfcXVldWVfYm91bmNlX2xpbWl0KHJlcXVlc3RfcXVldWVfdCAqLCB1NjQpOworZXh0ZXJuIHZvaWQgYmxrX3F1ZXVlX21heF9zZWN0b3JzKHJlcXVlc3RfcXVldWVfdCAqLCB1bnNpZ25lZCBzaG9ydCk7CitleHRlcm4gdm9pZCBibGtfcXVldWVfbWF4X3BoeXNfc2VnbWVudHMocmVxdWVzdF9xdWV1ZV90ICosIHVuc2lnbmVkIHNob3J0KTsKK2V4dGVybiB2b2lkIGJsa19xdWV1ZV9tYXhfaHdfc2VnbWVudHMocmVxdWVzdF9xdWV1ZV90ICosIHVuc2lnbmVkIHNob3J0KTsKK2V4dGVybiB2b2lkIGJsa19xdWV1ZV9tYXhfc2VnbWVudF9zaXplKHJlcXVlc3RfcXVldWVfdCAqLCB1bnNpZ25lZCBpbnQpOworZXh0ZXJuIHZvaWQgYmxrX3F1ZXVlX2hhcmRzZWN0X3NpemUocmVxdWVzdF9xdWV1ZV90ICosIHVuc2lnbmVkIHNob3J0KTsKK2V4dGVybiB2b2lkIGJsa19xdWV1ZV9zdGFja19saW1pdHMocmVxdWVzdF9xdWV1ZV90ICp0LCByZXF1ZXN0X3F1ZXVlX3QgKmIpOworZXh0ZXJuIHZvaWQgYmxrX3F1ZXVlX3NlZ21lbnRfYm91bmRhcnkocmVxdWVzdF9xdWV1ZV90ICosIHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuIHZvaWQgYmxrX3F1ZXVlX3ByZXBfcnEocmVxdWVzdF9xdWV1ZV90ICosIHByZXBfcnFfZm4gKnBmbik7CitleHRlcm4gdm9pZCBibGtfcXVldWVfbWVyZ2VfYnZlYyhyZXF1ZXN0X3F1ZXVlX3QgKiwgbWVyZ2VfYnZlY19mbiAqKTsKK2V4dGVybiB2b2lkIGJsa19xdWV1ZV9kbWFfYWxpZ25tZW50KHJlcXVlc3RfcXVldWVfdCAqLCBpbnQpOworZXh0ZXJuIHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpibGtfZ2V0X2JhY2tpbmdfZGV2X2luZm8oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldik7CitleHRlcm4gdm9pZCBibGtfcXVldWVfb3JkZXJlZChyZXF1ZXN0X3F1ZXVlX3QgKiwgaW50KTsKK2V4dGVybiB2b2lkIGJsa19xdWV1ZV9pc3N1ZV9mbHVzaF9mbihyZXF1ZXN0X3F1ZXVlX3QgKiwgaXNzdWVfZmx1c2hfZm4gKik7CitleHRlcm4gaW50IGJsa2Rldl9zY3NpX2lzc3VlX2ZsdXNoX2ZuKHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1Y3QgZ2VuZGlzayAqLCBzZWN0b3JfdCAqKTsKK2V4dGVybiBzdHJ1Y3QgcmVxdWVzdCAqYmxrX3N0YXJ0X3ByZV9mbHVzaChyZXF1ZXN0X3F1ZXVlX3QgKixzdHJ1Y3QgcmVxdWVzdCAqKTsKK2V4dGVybiBpbnQgYmxrX2NvbXBsZXRlX2JhcnJpZXJfcnEocmVxdWVzdF9xdWV1ZV90ICosIHN0cnVjdCByZXF1ZXN0ICosIGludCk7CitleHRlcm4gaW50IGJsa19jb21wbGV0ZV9iYXJyaWVyX3JxX2xvY2tlZChyZXF1ZXN0X3F1ZXVlX3QgKiwgc3RydWN0IHJlcXVlc3QgKiwgaW50KTsKKworZXh0ZXJuIGludCBibGtfcnFfbWFwX3NnKHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKik7CitleHRlcm4gdm9pZCBibGtfZHVtcF9ycV9mbGFncyhzdHJ1Y3QgcmVxdWVzdCAqLCBjaGFyICopOworZXh0ZXJuIHZvaWQgZ2VuZXJpY191bnBsdWdfZGV2aWNlKHJlcXVlc3RfcXVldWVfdCAqKTsKK2V4dGVybiB2b2lkIF9fZ2VuZXJpY191bnBsdWdfZGV2aWNlKHJlcXVlc3RfcXVldWVfdCAqKTsKK2V4dGVybiBsb25nIG5yX2Jsb2NrZGV2X3BhZ2VzKHZvaWQpOworZXh0ZXJuIHZvaWQgYmxrX3dhaXRfcXVldWVfZHJhaW5lZChyZXF1ZXN0X3F1ZXVlX3QgKiwgaW50KTsKK2V4dGVybiB2b2lkIGJsa19maW5pc2hfcXVldWVfZHJhaW4ocmVxdWVzdF9xdWV1ZV90ICopOworCitpbnQgYmxrX2dldF9xdWV1ZShyZXF1ZXN0X3F1ZXVlX3QgKik7CityZXF1ZXN0X3F1ZXVlX3QgKmJsa19hbGxvY19xdWV1ZShpbnQpOworI2RlZmluZSBibGtfcHV0X3F1ZXVlKHEpIGJsa19jbGVhbnVwX3F1ZXVlKChxKSkKKworLyoKKyAqIHRhZyBzdHVmZgorICovCisjZGVmaW5lIGJsa19xdWV1ZV90YWdfZGVwdGgocSkJCSgocSktPnF1ZXVlX3RhZ3MtPmJ1c3kpCisjZGVmaW5lIGJsa19xdWV1ZV90YWdfcXVldWUocSkJCSgocSktPnF1ZXVlX3RhZ3MtPmJ1c3kgPCAocSktPnF1ZXVlX3RhZ3MtPm1heF9kZXB0aCkKKyNkZWZpbmUgYmxrX3JxX3RhZ2dlZChycSkJCSgocnEpLT5mbGFncyAmIFJFUV9RVUVVRUQpCitleHRlcm4gaW50IGJsa19xdWV1ZV9zdGFydF90YWcocmVxdWVzdF9xdWV1ZV90ICosIHN0cnVjdCByZXF1ZXN0ICopOworZXh0ZXJuIHN0cnVjdCByZXF1ZXN0ICpibGtfcXVldWVfZmluZF90YWcocmVxdWVzdF9xdWV1ZV90ICosIGludCk7CitleHRlcm4gdm9pZCBibGtfcXVldWVfZW5kX3RhZyhyZXF1ZXN0X3F1ZXVlX3QgKiwgc3RydWN0IHJlcXVlc3QgKik7CitleHRlcm4gaW50IGJsa19xdWV1ZV9pbml0X3RhZ3MocmVxdWVzdF9xdWV1ZV90ICosIGludCwgc3RydWN0IGJsa19xdWV1ZV90YWcgKik7CitleHRlcm4gdm9pZCBibGtfcXVldWVfZnJlZV90YWdzKHJlcXVlc3RfcXVldWVfdCAqKTsKK2V4dGVybiBpbnQgYmxrX3F1ZXVlX3Jlc2l6ZV90YWdzKHJlcXVlc3RfcXVldWVfdCAqLCBpbnQpOworZXh0ZXJuIHZvaWQgYmxrX3F1ZXVlX2ludmFsaWRhdGVfdGFncyhyZXF1ZXN0X3F1ZXVlX3QgKik7CitleHRlcm4gbG9uZyBibGtfY29uZ2VzdGlvbl93YWl0KGludCBydywgbG9uZyB0aW1lb3V0KTsKKworZXh0ZXJuIHZvaWQgYmxrX3JxX2Jpb19wcmVwKHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqLCBzdHJ1Y3QgYmlvICopOworZXh0ZXJuIGludCBibGtkZXZfaXNzdWVfZmx1c2goc3RydWN0IGJsb2NrX2RldmljZSAqLCBzZWN0b3JfdCAqKTsKKworI2RlZmluZSBNQVhfUEhZU19TRUdNRU5UUyAxMjgKKyNkZWZpbmUgTUFYX0hXX1NFR01FTlRTIDEyOAorI2RlZmluZSBNQVhfU0VDVE9SUyAyNTUKKworI2RlZmluZSBNQVhfU0VHTUVOVF9TSVpFCTY1NTM2CisKKyNkZWZpbmUgYmxrZGV2X2VudHJ5X3RvX3JlcXVlc3QoZW50cnkpIGxpc3RfZW50cnkoKGVudHJ5KSwgc3RydWN0IHJlcXVlc3QsIHF1ZXVlbGlzdCkKKworZXh0ZXJuIHZvaWQgZHJpdmVfc3RhdF9hY2N0KHN0cnVjdCByZXF1ZXN0ICosIGludCwgaW50KTsKKworc3RhdGljIGlubGluZSBpbnQgcXVldWVfaGFyZHNlY3Rfc2l6ZShyZXF1ZXN0X3F1ZXVlX3QgKnEpCit7CisJaW50IHJldHZhbCA9IDUxMjsKKworCWlmIChxICYmIHEtPmhhcmRzZWN0X3NpemUpCisJCXJldHZhbCA9IHEtPmhhcmRzZWN0X3NpemU7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW5saW5lIGludCBiZGV2X2hhcmRzZWN0X3NpemUoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikKK3sKKwlyZXR1cm4gcXVldWVfaGFyZHNlY3Rfc2l6ZShiZGV2X2dldF9xdWV1ZShiZGV2KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHF1ZXVlX2RtYV9hbGlnbm1lbnQocmVxdWVzdF9xdWV1ZV90ICpxKQoreworCWludCByZXR2YWwgPSA1MTE7CisKKwlpZiAocSAmJiBxLT5kbWFfYWxpZ25tZW50KQorCQlyZXR2YWwgPSBxLT5kbWFfYWxpZ25tZW50OworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGlubGluZSBpbnQgYmRldl9kbWFfYWxpZ21lbnQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikKK3sKKwlyZXR1cm4gcXVldWVfZG1hX2FsaWdubWVudChiZGV2X2dldF9xdWV1ZShiZGV2KSk7Cit9CisKKyNkZWZpbmUgYmxrX2ZpbmlzaGVkX2lvKG5zZWN0cykJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBibGtfc3RhcnRlZF9pbyhuc2VjdHMpCWRvIHsgfSB3aGlsZSAoMCkKKworLyogYXNzdW1lcyBzaXplID4gMjU2ICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBibGtzaXplX2JpdHModW5zaWduZWQgaW50IHNpemUpCit7CisJdW5zaWduZWQgaW50IGJpdHMgPSA4OworCWRvIHsKKwkJYml0cysrOworCQlzaXplID4+PSAxOworCX0gd2hpbGUgKHNpemUgPiAyNTYpOworCXJldHVybiBiaXRzOworfQorCitleHRlcm4gaW5saW5lIHVuc2lnbmVkIGludCBibG9ja19zaXplKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpCit7CisJcmV0dXJuIGJkZXYtPmJkX2Jsb2NrX3NpemU7Cit9CisKK3R5cGVkZWYgc3RydWN0IHtzdHJ1Y3QgcGFnZSAqdjt9IFNlY3RvcjsKKwordW5zaWduZWQgY2hhciAqcmVhZF9kZXZfc2VjdG9yKHN0cnVjdCBibG9ja19kZXZpY2UgKiwgc2VjdG9yX3QsIFNlY3RvciAqKTsKKworc3RhdGljIGlubGluZSB2b2lkIHB1dF9kZXZfc2VjdG9yKFNlY3RvciBwKQoreworCXBhZ2VfY2FjaGVfcmVsZWFzZShwLnYpOworfQorCitzdHJ1Y3Qgd29ya19zdHJ1Y3Q7CitpbnQga2Jsb2NrZF9zY2hlZHVsZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Cit2b2lkIGtibG9ja2RfZmx1c2godm9pZCk7CisKKyNpZmRlZiBDT05GSUdfTEJECisjIGluY2x1ZGUgPGFzbS9kaXY2NC5oPgorIyBkZWZpbmUgc2VjdG9yX2RpdihhLCBiKSBkb19kaXYoYSwgYikKKyNlbHNlCisjIGRlZmluZSBzZWN0b3JfZGl2KG4sIGIpKCBcCit7IFwKKwlpbnQgX3JlczsgXAorCV9yZXMgPSAobikgJSAoYik7IFwKKwkobikgLz0gKGIpOyBcCisJX3JlczsgXAorfSBcCispCisjZW5kaWYgCisKKyNkZWZpbmUgTU9EVUxFX0FMSUFTX0JMT0NLREVWKG1ham9yLG1pbm9yKSBcCisJTU9EVUxFX0FMSUFTKCJibG9jay1tYWpvci0iIF9fc3RyaW5naWZ5KG1ham9yKSAiLSIgX19zdHJpbmdpZnkobWlub3IpKQorI2RlZmluZSBNT0RVTEVfQUxJQVNfQkxPQ0tERVZfTUFKT1IobWFqb3IpIFwKKwlNT0RVTEVfQUxJQVMoImJsb2NrLW1ham9yLSIgX19zdHJpbmdpZnkobWFqb3IpICItKiIpCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa3BnLmggYi9pbmNsdWRlL2xpbnV4L2Jsa3BnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU1ZDBmNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvYmxrcGcuaApAQCAtMCwwICsxLDU3IEBACisjaWZuZGVmIF9MSU5VWF9CTEtQR19ICisjZGVmaW5lIF9MSU5VWF9CTEtQR19ICisKKy8qCisgKiBQYXJ0aXRpb24gdGFibGUgYW5kIGRpc2sgZ2VvbWV0cnkgaGFuZGxpbmcKKyAqCisgKiBBIHNpbmdsZSBpb2N0bCB3aXRoIGxvdHMgb2Ygc3ViZnVuY3Rpb25zOgorICoKKyAqIERldmljZSBudW1iZXIgc3R1ZmY6CisgKiAgICBnZXRfd2hvbGVfZGlzaygpCQkoZ2l2ZW4gdGhlIGRldmljZSBudW1iZXIgb2YgYSBwYXJ0aXRpb24sCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5kIHRoZSBkZXZpY2UgbnVtYmVyIG9mIHRoZSBlbmNvbXBhc3NpbmcgZGlzaykKKyAqICAgIGdldF9hbGxfcGFydGl0aW9ucygpCShnaXZlbiB0aGUgZGV2aWNlIG51bWJlciBvZiBhIGRpc2ssIHJldHVybiB0aGUKKyAqCQkJCSBkZXZpY2UgbnVtYmVycyBvZiBhbGwgaXRzIGtub3duIHBhcnRpdGlvbnMpCisgKgorICogUGFydGl0aW9uIHN0dWZmOgorICogICAgYWRkX3BhcnRpdGlvbigpCisgKiAgICBkZWxldGVfcGFydGl0aW9uKCkKKyAqICAgIHRlc3RfcGFydGl0aW9uX2luX3VzZSgpCShhbHNvIGZvciB0ZXN0X2Rpc2tfaW5fdXNlKQorICoKKyAqIEdlb21ldHJ5IHN0dWZmOgorICogICAgZ2V0X2dlb21ldHJ5KCkKKyAqICAgIHNldF9nZW9tZXRyeSgpCisgKiAgICBnZXRfYmlvc19kcml2ZWRhdGEoKQorICoKKyAqIEZvciB0b2RheSwgb25seSB0aGUgcGFydGl0aW9uIHN0dWZmIC0gYWViLCA5OTA1MTUKKyAqLworI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisKKyNkZWZpbmUgQkxLUEcgICAgICBfSU8oMHgxMiwxMDUpCisKKy8qIFRoZSBhcmd1bWVudCBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCBibGtwZ19pb2N0bF9hcmcgeworICAgICAgICBpbnQgb3A7CisgICAgICAgIGludCBmbGFnczsKKyAgICAgICAgaW50IGRhdGFsZW47CisgICAgICAgIHZvaWQgX191c2VyICpkYXRhOworfTsKKworLyogVGhlIHN1YmZ1bmN0aW9ucyAoZm9yIHRoZSBvcCBmaWVsZCkgKi8KKyNkZWZpbmUgQkxLUEdfQUREX1BBUlRJVElPTgkxCisjZGVmaW5lIEJMS1BHX0RFTF9QQVJUSVRJT04JMgorCisvKiBTaXplcyBvZiBuYW1lIGZpZWxkcy4gVW51c2VkIGF0IHByZXNlbnQuICovCisjZGVmaW5lIEJMS1BHX0RFVk5BTUVMVEgJNjQKKyNkZWZpbmUgQkxLUEdfVk9MTkFNRUxUSAk2NAorCisvKiBUaGUgZGF0YSBzdHJ1Y3R1cmUgZm9yIEFERF9QQVJUSVRJT04gYW5kIERFTF9QQVJUSVRJT04gKi8KK3N0cnVjdCBibGtwZ19wYXJ0aXRpb24geworCWxvbmcgbG9uZyBzdGFydDsJCS8qIHN0YXJ0aW5nIG9mZnNldCBpbiBieXRlcyAqLworCWxvbmcgbG9uZyBsZW5ndGg7CQkvKiBsZW5ndGggaW4gYnl0ZXMgKi8KKwlpbnQgcG5vOwkJCS8qIHBhcnRpdGlvbiBudW1iZXIgKi8KKwljaGFyIGRldm5hbWVbQkxLUEdfREVWTkFNRUxUSF07CS8qIHBhcnRpdGlvbiBuYW1lLCBsaWtlIHNkYTUgb3IgYzBkMXAyLAorCQkJCQkgICB0byBiZSB1c2VkIGluIGtlcm5lbCBtZXNzYWdlcyAqLworCWNoYXIgdm9sbmFtZVtCTEtQR19WT0xOQU1FTFRIXTsJLyogdm9sdW1lIGxhYmVsICovCit9OworCisjZW5kaWYgLyogX0xJTlVYX0JMS1BHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxvY2tncm91cF9sb2NrLmggYi9pbmNsdWRlL2xpbnV4L2Jsb2NrZ3JvdXBfbG9jay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxMzdlZTUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2Jsb2NrZ3JvdXBfbG9jay5oCkBAIC0wLDAgKzEsNjAgQEAKKyNpZm5kZWYgX0xJTlVYX0JMT0NLR1JPVVBfTE9DS19ICisjZGVmaW5lIF9MSU5VWF9CTE9DS0dST1VQX0xPQ0tfSAorLyoKKyAqIFBlci1ibG9ja2dyb3VwIGxvY2tpbmcgZm9yIGV4dDIgYW5kIGV4dDMuCisgKgorICogU2ltcGxlIGhhc2hlZCBzcGlubG9ja2luZy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgorCisjaWZkZWYgQ09ORklHX1NNUAorCisvKgorICogV2Ugd2FudCBhIHBvd2VyLW9mLXR3by4gIElzIHRoZXJlIGEgYmV0dGVyIHdheSB0aGFuIHRoaXM/CisgKi8KKworI2lmIE5SX0NQVVMgPj0gMzIKKyNkZWZpbmUgTlJfQkdfTE9DS1MJMTI4CisjZWxpZiBOUl9DUFVTID49IDE2CisjZGVmaW5lIE5SX0JHX0xPQ0tTCTY0CisjZWxpZiBOUl9DUFVTID49IDgKKyNkZWZpbmUgTlJfQkdfTE9DS1MJMzIKKyNlbGlmIE5SX0NQVVMgPj0gNAorI2RlZmluZSBOUl9CR19MT0NLUwkxNgorI2VsaWYgTlJfQ1BVUyA+PSAyCisjZGVmaW5lIE5SX0JHX0xPQ0tTCTgKKyNlbHNlCisjZGVmaW5lIE5SX0JHX0xPQ0tTCTQKKyNlbmRpZgorCisjZWxzZQkvKiBDT05GSUdfU01QICovCisjZGVmaW5lIE5SX0JHX0xPQ0tTCTEKKyNlbmRpZgkvKiBDT05GSUdfU01QICovCisKK3N0cnVjdCBiZ2xfbG9jayB7CisJc3BpbmxvY2tfdCBsb2NrOworfSBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOworCitzdHJ1Y3QgYmxvY2tncm91cF9sb2NrIHsKKwlzdHJ1Y3QgYmdsX2xvY2sgbG9ja3NbTlJfQkdfTE9DS1NdOworfTsKKworc3RhdGljIGlubGluZSB2b2lkIGJnbF9sb2NrX2luaXQoc3RydWN0IGJsb2NrZ3JvdXBfbG9jayAqYmdsKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IE5SX0JHX0xPQ0tTOyBpKyspCisJCXNwaW5fbG9ja19pbml0KCZiZ2wtPmxvY2tzW2ldLmxvY2spOworfQorCisvKgorICogVGhlIGFjY2Vzc29yIGlzIGEgbWFjcm8gc28gd2UgY2FuIGVtYmVkIGEgYmxvY2tncm91cF9sb2NrIGludG8gZGlmZmVyZW50CisgKiBzdXBlcmJsb2NrIHR5cGVzCisgKi8KKyNkZWZpbmUgc2JfYmdsX2xvY2soc2IsIGJsb2NrX2dyb3VwKSBcCisJKCYoc2IpLT5zX2Jsb2NrZ3JvdXBfbG9jay5sb2Nrc1soYmxvY2tfZ3JvdXApICYgKE5SX0JHX0xPQ0tTLTEpXS5sb2NrKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYm9vdG1lbS5oIGIvaW5jbHVkZS9saW51eC9ib290bWVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRkOGNhMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvYm9vdG1lbS5oCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBEaXNjb250aWd1b3VzIG1lbW9yeSBzdXBwb3J0LCBLYW5vaiBTYXJjYXIsIFNHSSwgTm92IDE5OTkKKyAqLworI2lmbmRlZiBfTElOVVhfQk9PVE1FTV9ICisjZGVmaW5lIF9MSU5VWF9CT09UTUVNX0gKKworI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL2RtYS5oPgorI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21tem9uZS5oPgorCisvKgorICogIHNpbXBsZSBib290LXRpbWUgcGh5c2ljYWwgbWVtb3J5IGFyZWEgYWxsb2NhdG9yLgorICovCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIG1heF9sb3dfcGZuOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWluX2xvd19wZm47CisKKy8qCisgKiBoaWdoZXN0IHBhZ2UKKyAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWF4X3BmbjsKKworLyoKKyAqIG5vZGVfYm9vdG1lbV9tYXAgaXMgYSBtYXAgcG9pbnRlciAtIHRoZSBiaXRzIHJlcHJlc2VudCBhbGwgcGh5c2ljYWwgCisgKiBtZW1vcnkgcGFnZXMgKGluY2x1ZGluZyBob2xlcykgb24gdGhlIG5vZGUuCisgKi8KK3R5cGVkZWYgc3RydWN0IGJvb3RtZW1fZGF0YSB7CisJdW5zaWduZWQgbG9uZyBub2RlX2Jvb3Rfc3RhcnQ7CisJdW5zaWduZWQgbG9uZyBub2RlX2xvd19wZm47CisJdm9pZCAqbm9kZV9ib290bWVtX21hcDsKKwl1bnNpZ25lZCBsb25nIGxhc3Rfb2Zmc2V0OworCXVuc2lnbmVkIGxvbmcgbGFzdF9wb3M7CisJdW5zaWduZWQgbG9uZyBsYXN0X3N1Y2Nlc3M7CS8qIFByZXZpb3VzIGFsbG9jYXRpb24gcG9pbnQuICBUbyBzcGVlZAorCQkJCQkgKiB1cCBzZWFyY2hpbmcgKi8KK30gYm9vdG1lbV9kYXRhX3Q7CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9faW5pdCBib290bWVtX2Jvb3RtYXBfcGFnZXMgKHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19pbml0IGluaXRfYm9vdG1lbSAodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIG1lbWVuZCk7CitleHRlcm4gdm9pZCBfX2luaXQgZnJlZV9ib290bWVtICh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CitleHRlcm4gdm9pZCAqIF9faW5pdCBfX2FsbG9jX2Jvb3RtZW0gKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBhbGlnbiwgdW5zaWduZWQgbG9uZyBnb2FsKTsKKyNpZm5kZWYgQ09ORklHX0hBVkVfQVJDSF9CT09UTUVNX05PREUKK2V4dGVybiB2b2lkIF9faW5pdCByZXNlcnZlX2Jvb3RtZW0gKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKTsKKyNkZWZpbmUgYWxsb2NfYm9vdG1lbSh4KSBcCisJX19hbGxvY19ib290bWVtKCh4KSwgU01QX0NBQ0hFX0JZVEVTLCBfX3BhKE1BWF9ETUFfQUREUkVTUykpCisjZGVmaW5lIGFsbG9jX2Jvb3RtZW1fbG93KHgpIFwKKwlfX2FsbG9jX2Jvb3RtZW0oKHgpLCBTTVBfQ0FDSEVfQllURVMsIDApCisjZGVmaW5lIGFsbG9jX2Jvb3RtZW1fcGFnZXMoeCkgXAorCV9fYWxsb2NfYm9vdG1lbSgoeCksIFBBR0VfU0laRSwgX19wYShNQVhfRE1BX0FERFJFU1MpKQorI2RlZmluZSBhbGxvY19ib290bWVtX2xvd19wYWdlcyh4KSBcCisJX19hbGxvY19ib290bWVtKCh4KSwgUEFHRV9TSVpFLCAwKQorI2VuZGlmIC8qICFDT05GSUdfSEFWRV9BUkNIX0JPT1RNRU1fTk9ERSAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19pbml0IGZyZWVfYWxsX2Jvb3RtZW0gKHZvaWQpOworCitleHRlcm4gdW5zaWduZWQgbG9uZyBfX2luaXQgaW5pdF9ib290bWVtX25vZGUgKHBnX2RhdGFfdCAqcGdkYXQsIHVuc2lnbmVkIGxvbmcgZnJlZXBmbiwgdW5zaWduZWQgbG9uZyBzdGFydHBmbiwgdW5zaWduZWQgbG9uZyBlbmRwZm4pOworZXh0ZXJuIHZvaWQgX19pbml0IHJlc2VydmVfYm9vdG1lbV9ub2RlIChwZ19kYXRhX3QgKnBnZGF0LCB1bnNpZ25lZCBsb25nIHBoeXNhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpOworZXh0ZXJuIHZvaWQgX19pbml0IGZyZWVfYm9vdG1lbV9ub2RlIChwZ19kYXRhX3QgKnBnZGF0LCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBfX2luaXQgZnJlZV9hbGxfYm9vdG1lbV9ub2RlIChwZ19kYXRhX3QgKnBnZGF0KTsKK2V4dGVybiB2b2lkICogX19pbml0IF9fYWxsb2NfYm9vdG1lbV9ub2RlIChwZ19kYXRhX3QgKnBnZGF0LCB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sIHVuc2lnbmVkIGxvbmcgZ29hbCk7CisjaWZuZGVmIENPTkZJR19IQVZFX0FSQ0hfQk9PVE1FTV9OT0RFCisjZGVmaW5lIGFsbG9jX2Jvb3RtZW1fbm9kZShwZ2RhdCwgeCkgXAorCV9fYWxsb2NfYm9vdG1lbV9ub2RlKChwZ2RhdCksICh4KSwgU01QX0NBQ0hFX0JZVEVTLCBfX3BhKE1BWF9ETUFfQUREUkVTUykpCisjZGVmaW5lIGFsbG9jX2Jvb3RtZW1fcGFnZXNfbm9kZShwZ2RhdCwgeCkgXAorCV9fYWxsb2NfYm9vdG1lbV9ub2RlKChwZ2RhdCksICh4KSwgUEFHRV9TSVpFLCBfX3BhKE1BWF9ETUFfQUREUkVTUykpCisjZGVmaW5lIGFsbG9jX2Jvb3RtZW1fbG93X3BhZ2VzX25vZGUocGdkYXQsIHgpIFwKKwlfX2FsbG9jX2Jvb3RtZW1fbm9kZSgocGdkYXQpLCAoeCksIFBBR0VfU0laRSwgMCkKKyNlbmRpZiAvKiAhQ09ORklHX0hBVkVfQVJDSF9CT09UTUVNX05PREUgKi8KKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19pbml0ZGF0YSBucl9rZXJuZWxfcGFnZXM7CitleHRlcm4gdW5zaWduZWQgbG9uZyBfX2luaXRkYXRhIG5yX2FsbF9wYWdlczsKKworZXh0ZXJuIHZvaWQgKl9faW5pdCBhbGxvY19sYXJnZV9zeXN0ZW1faGFzaChjb25zdCBjaGFyICp0YWJsZW5hbWUsCisJCQkJCSAgICB1bnNpZ25lZCBsb25nIGJ1Y2tldHNpemUsCisJCQkJCSAgICB1bnNpZ25lZCBsb25nIG51bWVudHJpZXMsCisJCQkJCSAgICBpbnQgc2NhbGUsCisJCQkJCSAgICBpbnQgZmxhZ3MsCisJCQkJCSAgICB1bnNpZ25lZCBpbnQgKl9oYXNoX3NoaWZ0LAorCQkJCQkgICAgdW5zaWduZWQgaW50ICpfaGFzaF9tYXNrLAorCQkJCQkgICAgdW5zaWduZWQgbG9uZyBsaW1pdCk7CisKKyNkZWZpbmUgSEFTSF9ISUdITUVNCTB4MDAwMDAwMDEJLyogQ29uc2lkZXIgaGlnaG1lbT8gKi8KKyNkZWZpbmUgSEFTSF9FQVJMWQkweDAwMDAwMDAyCS8qIEFsbG9jYXRpbmcgZHVyaW5nIGVhcmx5IGJvb3Q/ICovCisKKy8qIE9ubHkgTlVNQSBuZWVkcyBoYXNoIGRpc3RyaWJ1dGlvbi4KKyAqIElBNjQgaXMga25vd24gdG8gaGF2ZSBzdWZmaWNpZW50IHZtYWxsb2Mgc3BhY2UuCisgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19OVU1BKSAmJiBkZWZpbmVkKENPTkZJR19JQTY0KQorI2RlZmluZSBIQVNIRElTVF9ERUZBVUxUIDEKKyNlbHNlCisjZGVmaW5lIEhBU0hESVNUX0RFRkFVTFQgMAorI2VuZGlmCitleHRlcm4gaW50IF9faW5pdGRhdGEgaGFzaGRpc3Q7CQkvKiBEaXN0cmlidXRlIGhhc2hlcyBhY3Jvc3MgTlVNQSBub2Rlcz8gKi8KKworCisjZW5kaWYgLyogX0xJTlVYX0JPT1RNRU1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icHFldGhlci5oIGIvaW5jbHVkZS9saW51eC9icHFldGhlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2YzM1ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2JwcWV0aGVyLmgKQEAgLTAsMCArMSw0MSBAQAorI2lmbmRlZglfX0JQUUVUSEVSX0gKKyNkZWZpbmUJX19CUFFFVEhFUl9ICisKKy8qCisgKiAJRGVmaW5lcyBmb3IgdGhlIEJQUUVUSEVSIHBzZXVkbyBkZXZpY2UgZHJpdmVyCisgKi8KKworI2lmbmRlZiBfX0xJTlVYX0lGX0VUSEVSX0gKKyNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgorI2VuZGlmCisKKyNkZWZpbmUgU0lPQ1NCUFFFVEhPUFQJCShTSU9DREVWUFJJVkFURSswKQkvKiByZXNlcnZlZCAqLworI2RlZmluZSBTSU9DU0JQUUVUSEFERFIJCShTSU9DREVWUFJJVkFURSsxKQorIAorc3RydWN0IGJwcV9ldGhhZGRyIHsKKwl1bnNpZ25lZCBjaGFyIGRlc3RpbmF0aW9uW0VUSF9BTEVOXTsKKwl1bnNpZ25lZCBjaGFyIGFjY2VwdFtFVEhfQUxFTl07Cit9OworCisvKiAKKyAqIEZvciBTSU9DU0JQUUVUSE9QVCAtIHRoaXMgaXMgY29tcGF0aWJsZSB3aXRoIFBJMi9QYWNrZXRUd2luIGNhcmQgZHJpdmVycywKKyAqIGN1cnJlbnRseSBub3QgaW1wbGVtZW50ZWQsIHRob3VnaC4gSWYgc29tZW9uZSB3YW50cyB0byBob29rIGEgcmFkaW8KKyAqIHRvIGhpcyBFdGhlcm5ldCBjYXJkIGhlIG1heSBmaW5kIHRoaXMgdXNlZnVsLiA7LSkKKyAqLworCisjZGVmaW5lIFNJT0NHQlBRRVRIUEFSQU0JMHg1MDAwICAvKiBnZXQgTGV2ZWwgMSBwYXJhbWV0ZXJzICovCisjZGVmaW5lIFNJT0NTQlBRRVRIUEFSQU0JMHg1MDAxICAvKiBzZXQgKi8KKworc3RydWN0IGJwcV9yZXEgIHsKKyAgICBpbnQgY21kOworICAgIGludCBzcGVlZDsJCQkvKiB1bnVzZWQgKi8KKyAgICBpbnQgY2xvY2ttb2RlOwkJLyogdW51c2VkICovCisgICAgaW50IHR4ZGVsYXk7CisgICAgdW5zaWduZWQgY2hhciBwZXJzaXN0OwkvKiB1bnVzZWQgKi8KKyAgICBpbnQgc2xvdGltZTsJCS8qIHVudXNlZCAqLworICAgIGludCBzcXVlbGRlbGF5OworICAgIGludCBkbWFjaGFuOwkJLyogdW51c2VkICovCisgICAgaW50IGlycTsJCQkvKiB1bnVzZWQgKi8KK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oIGIvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwMmM5MWUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmgKQEAgLTAsMCArMSwyOTYgQEAKKy8qCisgKiBpbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmgKKyAqCisgKiBFdmVyeXRoaW5nIHRvIGRvIHdpdGggYnVmZmVyX2hlYWRzLgorICovCisKKyNpZm5kZWYgX0xJTlVYX0JVRkZFUl9IRUFEX0gKKyNkZWZpbmUgX0xJTlVYX0JVRkZFUl9IRUFEX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisKK2VudW0gYmhfc3RhdGVfYml0cyB7CisJQkhfVXB0b2RhdGUsCS8qIENvbnRhaW5zIHZhbGlkIGRhdGEgKi8KKwlCSF9EaXJ0eSwJLyogSXMgZGlydHkgKi8KKwlCSF9Mb2NrLAkvKiBJcyBsb2NrZWQgKi8KKwlCSF9SZXEsCQkvKiBIYXMgYmVlbiBzdWJtaXR0ZWQgZm9yIEkvTyAqLworCisJQkhfTWFwcGVkLAkvKiBIYXMgYSBkaXNrIG1hcHBpbmcgKi8KKwlCSF9OZXcsCQkvKiBEaXNrIG1hcHBpbmcgd2FzIG5ld2x5IGNyZWF0ZWQgYnkgZ2V0X2Jsb2NrICovCisJQkhfQXN5bmNfUmVhZCwJLyogSXMgdW5kZXIgZW5kX2J1ZmZlcl9hc3luY19yZWFkIEkvTyAqLworCUJIX0FzeW5jX1dyaXRlLAkvKiBJcyB1bmRlciBlbmRfYnVmZmVyX2FzeW5jX3dyaXRlIEkvTyAqLworCUJIX0RlbGF5LAkvKiBCdWZmZXIgaXMgbm90IHlldCBhbGxvY2F0ZWQgb24gZGlzayAqLworCUJIX0JvdW5kYXJ5LAkvKiBCbG9jayBpcyBmb2xsb3dlZCBieSBhIGRpc2NvbnRpZ3VpdHkgKi8KKwlCSF9Xcml0ZV9FSU8sCS8qIEkvTyBlcnJvciBvbiB3cml0ZSAqLworCUJIX09yZGVyZWQsCS8qIG9yZGVyZWQgd3JpdGUgKi8KKwlCSF9Fb3Bub3RzdXBwLAkvKiBvcGVyYXRpb24gbm90IHN1cHBvcnRlZCAoYmFycmllcikgKi8KKworCUJIX1ByaXZhdGVTdGFydCwvKiBub3QgYSBzdGF0ZSBiaXQsIGJ1dCB0aGUgZmlyc3QgYml0IGF2YWlsYWJsZQorCQkJICogZm9yIHByaXZhdGUgYWxsb2NhdGlvbiBieSBvdGhlciBlbnRpdGllcworCQkJICovCit9OworCisjZGVmaW5lIE1BWF9CVUZfUEVSX1BBR0UgKFBBR0VfQ0FDSEVfU0laRSAvIDUxMikKKworc3RydWN0IHBhZ2U7CitzdHJ1Y3QgYnVmZmVyX2hlYWQ7CitzdHJ1Y3QgYWRkcmVzc19zcGFjZTsKK3R5cGVkZWYgdm9pZCAoYmhfZW5kX2lvX3QpKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCB1cHRvZGF0ZSk7CisKKy8qCisgKiBLZWVwIHJlbGF0ZWQgZmllbGRzIGluIGNvbW1vbiBjYWNoZWxpbmVzLiAgVGhlIG1vc3QgY29tbW9ubHkgYWNjZXNzZWQKKyAqIGZpZWxkIChiX3N0YXRlKSBnb2VzIGF0IHRoZSBzdGFydCBzbyB0aGUgY29tcGlsZXIgZG9lcyBub3QgZ2VuZXJhdGUKKyAqIGluZGV4ZWQgYWRkcmVzc2luZyBmb3IgaXQuCisgKi8KK3N0cnVjdCBidWZmZXJfaGVhZCB7CisJLyogRmlyc3QgY2FjaGUgbGluZTogKi8KKwl1bnNpZ25lZCBsb25nIGJfc3RhdGU7CQkvKiBidWZmZXIgc3RhdGUgYml0bWFwIChzZWUgYWJvdmUpICovCisJc3RydWN0IGJ1ZmZlcl9oZWFkICpiX3RoaXNfcGFnZTsvKiBjaXJjdWxhciBsaXN0IG9mIHBhZ2UncyBidWZmZXJzICovCisJc3RydWN0IHBhZ2UgKmJfcGFnZTsJCS8qIHRoZSBwYWdlIHRoaXMgYmggaXMgbWFwcGVkIHRvICovCisJYXRvbWljX3QgYl9jb3VudDsJCS8qIHVzZXJzIHVzaW5nIHRoaXMgYmxvY2sgKi8KKwl1MzIgYl9zaXplOwkJCS8qIGJsb2NrIHNpemUgKi8KKworCXNlY3Rvcl90IGJfYmxvY2tucjsJCS8qIGJsb2NrIG51bWJlciAqLworCWNoYXIgKmJfZGF0YTsJCQkvKiBwb2ludGVyIHRvIGRhdGEgYmxvY2sgKi8KKworCXN0cnVjdCBibG9ja19kZXZpY2UgKmJfYmRldjsKKwliaF9lbmRfaW9fdCAqYl9lbmRfaW87CQkvKiBJL08gY29tcGxldGlvbiAqLworIAl2b2lkICpiX3ByaXZhdGU7CQkvKiByZXNlcnZlZCBmb3IgYl9lbmRfaW8gKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGJfYXNzb2NfYnVmZmVyczsgLyogYXNzb2NpYXRlZCB3aXRoIGFub3RoZXIgbWFwcGluZyAqLworfTsKKworLyoKKyAqIG1hY3JvIHRyaWNrcyB0byBleHBhbmQgdGhlIHNldF9idWZmZXJfZm9vKCksIGNsZWFyX2J1ZmZlcl9mb28oKQorICogYW5kIGJ1ZmZlcl9mb28oKSBmdW5jdGlvbnMuCisgKi8KKyNkZWZpbmUgQlVGRkVSX0ZOUyhiaXQsIG5hbWUpCQkJCQkJXAorc3RhdGljIGlubGluZSB2b2lkIHNldF9idWZmZXJfIyNuYW1lKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCQlcCit7CQkJCQkJCQkJXAorCXNldF9iaXQoQkhfIyNiaXQsICYoYmgpLT5iX3N0YXRlKTsJCQkJXAorfQkJCQkJCQkJCVwKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9idWZmZXJfIyNuYW1lKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCQlcCit7CQkJCQkJCQkJXAorCWNsZWFyX2JpdChCSF8jI2JpdCwgJihiaCktPmJfc3RhdGUpOwkJCQlcCit9CQkJCQkJCQkJXAorc3RhdGljIGlubGluZSBpbnQgYnVmZmVyXyMjbmFtZShjb25zdCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQkJXAorewkJCQkJCQkJCVwKKwlyZXR1cm4gdGVzdF9iaXQoQkhfIyNiaXQsICYoYmgpLT5iX3N0YXRlKTsJCQlcCit9CisKKy8qCisgKiB0ZXN0X3NldF9idWZmZXJfZm9vKCkgYW5kIHRlc3RfY2xlYXJfYnVmZmVyX2ZvbygpCisgKi8KKyNkZWZpbmUgVEFTX0JVRkZFUl9GTlMoYml0LCBuYW1lKQkJCQkJXAorc3RhdGljIGlubGluZSBpbnQgdGVzdF9zZXRfYnVmZmVyXyMjbmFtZShzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQlcCit7CQkJCQkJCQkJXAorCXJldHVybiB0ZXN0X2FuZF9zZXRfYml0KEJIXyMjYml0LCAmKGJoKS0+Yl9zdGF0ZSk7CQlcCit9CQkJCQkJCQkJXAorc3RhdGljIGlubGluZSBpbnQgdGVzdF9jbGVhcl9idWZmZXJfIyNuYW1lKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCVwKK3sJCQkJCQkJCQlcCisJcmV0dXJuIHRlc3RfYW5kX2NsZWFyX2JpdChCSF8jI2JpdCwgJihiaCktPmJfc3RhdGUpOwkJXAorfQkJCQkJCQkJCVwKKworLyoKKyAqIEVtaXQgdGhlIGJ1ZmZlciBiaXRvcHMgZnVuY3Rpb25zLiAgIE5vdGUgdGhhdCB0aGVyZSBhcmUgYWxzbyBmdW5jdGlvbnMKKyAqIG9mIHRoZSBmb3JtICJtYXJrX2J1ZmZlcl9mb28oKSIuICBUaGVzZSBhcmUgaGlnaGVyLWxldmVsIGZ1bmN0aW9ucyB3aGljaAorICogZG8gc29tZXRoaW5nIGluIGFkZGl0aW9uIHRvIHNldHRpbmcgYSBiX3N0YXRlIGJpdC4KKyAqLworQlVGRkVSX0ZOUyhVcHRvZGF0ZSwgdXB0b2RhdGUpCitCVUZGRVJfRk5TKERpcnR5LCBkaXJ0eSkKK1RBU19CVUZGRVJfRk5TKERpcnR5LCBkaXJ0eSkKK0JVRkZFUl9GTlMoTG9jaywgbG9ja2VkKQorVEFTX0JVRkZFUl9GTlMoTG9jaywgbG9ja2VkKQorQlVGRkVSX0ZOUyhSZXEsIHJlcSkKK1RBU19CVUZGRVJfRk5TKFJlcSwgcmVxKQorQlVGRkVSX0ZOUyhNYXBwZWQsIG1hcHBlZCkKK0JVRkZFUl9GTlMoTmV3LCBuZXcpCitCVUZGRVJfRk5TKEFzeW5jX1JlYWQsIGFzeW5jX3JlYWQpCitCVUZGRVJfRk5TKEFzeW5jX1dyaXRlLCBhc3luY193cml0ZSkKK0JVRkZFUl9GTlMoRGVsYXksIGRlbGF5KQorQlVGRkVSX0ZOUyhCb3VuZGFyeSwgYm91bmRhcnkpCitCVUZGRVJfRk5TKFdyaXRlX0VJTywgd3JpdGVfaW9fZXJyb3IpCitCVUZGRVJfRk5TKE9yZGVyZWQsIG9yZGVyZWQpCitCVUZGRVJfRk5TKEVvcG5vdHN1cHAsIGVvcG5vdHN1cHApCisKKyNkZWZpbmUgYmhfb2Zmc2V0KGJoKQkJKCh1bnNpZ25lZCBsb25nKShiaCktPmJfZGF0YSAmIH5QQUdFX01BU0spCisjZGVmaW5lIHRvdWNoX2J1ZmZlcihiaCkJbWFya19wYWdlX2FjY2Vzc2VkKGJoLT5iX3BhZ2UpCisKKy8qIElmIHdlICprbm93KiBwYWdlLT5wcml2YXRlIHJlZmVycyB0byBidWZmZXJfaGVhZHMgKi8KKyNkZWZpbmUgcGFnZV9idWZmZXJzKHBhZ2UpCQkJCQlcCisJKHsJCQkJCQkJXAorCQlCVUdfT04oIVBhZ2VQcml2YXRlKHBhZ2UpKTsJCVwKKwkJKChzdHJ1Y3QgYnVmZmVyX2hlYWQgKikocGFnZSktPnByaXZhdGUpOwlcCisJfSkKKyNkZWZpbmUgcGFnZV9oYXNfYnVmZmVycyhwYWdlKQlQYWdlUHJpdmF0ZShwYWdlKQorCisvKgorICogRGVjbGFyYXRpb25zCisgKi8KKwordm9pZCBGQVNUQ0FMTChtYXJrX2J1ZmZlcl9kaXJ0eShzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKSk7Cit2b2lkIGluaXRfYnVmZmVyKHN0cnVjdCBidWZmZXJfaGVhZCAqLCBiaF9lbmRfaW9fdCAqLCB2b2lkICopOwordm9pZCBzZXRfYmhfcGFnZShzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLAorCQlzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOworaW50IHRyeV90b19mcmVlX2J1ZmZlcnMoc3RydWN0IHBhZ2UgKik7CitzdHJ1Y3QgYnVmZmVyX2hlYWQgKmFsbG9jX3BhZ2VfYnVmZmVycyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBzaXplLAorCQlpbnQgcmV0cnkpOwordm9pZCBjcmVhdGVfZW1wdHlfYnVmZmVycyhzdHJ1Y3QgcGFnZSAqLCB1bnNpZ25lZCBsb25nLAorCQkJdW5zaWduZWQgbG9uZyBiX3N0YXRlKTsKK3ZvaWQgZW5kX2J1ZmZlcl9yZWFkX3N5bmMoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IHVwdG9kYXRlKTsKK3ZvaWQgZW5kX2J1ZmZlcl93cml0ZV9zeW5jKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCB1cHRvZGF0ZSk7Cit2b2lkIGVuZF9idWZmZXJfYXN5bmNfd3JpdGUoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IHVwdG9kYXRlKTsKKworLyogVGhpbmdzIHRvIGRvIHdpdGggYnVmZmVycyBhdCBtYXBwaW5nLT5wcml2YXRlX2xpc3QgKi8KK3ZvaWQgbWFya19idWZmZXJfZGlydHlfaW5vZGUoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgc3RydWN0IGlub2RlICppbm9kZSk7CitpbnQgaW5vZGVfaGFzX2J1ZmZlcnMoc3RydWN0IGlub2RlICopOwordm9pZCBpbnZhbGlkYXRlX2lub2RlX2J1ZmZlcnMoc3RydWN0IGlub2RlICopOworaW50IHJlbW92ZV9pbm9kZV9idWZmZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUpOworaW50IHN5bmNfbWFwcGluZ19idWZmZXJzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKTsKK3ZvaWQgdW5tYXBfdW5kZXJseWluZ19tZXRhZGF0YShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBibG9jayk7CisKK3ZvaWQgbWFya19idWZmZXJfYXN5bmNfd3JpdGUoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCk7Cit2b2lkIGludmFsaWRhdGVfYmRldihzdHJ1Y3QgYmxvY2tfZGV2aWNlICosIGludCk7CitpbnQgc3luY19ibG9ja2RldihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KTsKK3ZvaWQgX193YWl0X29uX2J1ZmZlcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKik7Cit3YWl0X3F1ZXVlX2hlYWRfdCAqYmhfd2FpdHFfaGVhZChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKTsKK2ludCBmc3luY19iZGV2KHN0cnVjdCBibG9ja19kZXZpY2UgKik7CitzdHJ1Y3Qgc3VwZXJfYmxvY2sgKmZyZWV6ZV9iZGV2KHN0cnVjdCBibG9ja19kZXZpY2UgKik7Cit2b2lkIHRoYXdfYmRldihzdHJ1Y3QgYmxvY2tfZGV2aWNlICosIHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKK2ludCBmc3luY19zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CitpbnQgZnN5bmNfbm9fc3VwZXIoc3RydWN0IGJsb2NrX2RldmljZSAqKTsKK3N0cnVjdCBidWZmZXJfaGVhZCAqX19maW5kX2dldF9ibG9jayhzdHJ1Y3QgYmxvY2tfZGV2aWNlICosIHNlY3Rvcl90LCBpbnQpOworc3RydWN0IGJ1ZmZlcl9oZWFkICogX19nZXRibGsoc3RydWN0IGJsb2NrX2RldmljZSAqLCBzZWN0b3JfdCwgaW50KTsKK3ZvaWQgX19icmVsc2Uoc3RydWN0IGJ1ZmZlcl9oZWFkICopOwordm9pZCBfX2Jmb3JnZXQoc3RydWN0IGJ1ZmZlcl9oZWFkICopOwordm9pZCBfX2JyZWFkYWhlYWQoc3RydWN0IGJsb2NrX2RldmljZSAqLCBzZWN0b3JfdCBibG9jaywgaW50IHNpemUpOworc3RydWN0IGJ1ZmZlcl9oZWFkICpfX2JyZWFkKHN0cnVjdCBibG9ja19kZXZpY2UgKiwgc2VjdG9yX3QgYmxvY2ssIGludCBzaXplKTsKK3N0cnVjdCBidWZmZXJfaGVhZCAqYWxsb2NfYnVmZmVyX2hlYWQodW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcF9mbGFncyk7Cit2b2lkIGZyZWVfYnVmZmVyX2hlYWQoc3RydWN0IGJ1ZmZlcl9oZWFkICogYmgpOwordm9pZCBGQVNUQ0FMTCh1bmxvY2tfYnVmZmVyKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpKTsKK3ZvaWQgRkFTVENBTEwoX19sb2NrX2J1ZmZlcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKSk7Cit2b2lkIGxsX3J3X2Jsb2NrKGludCwgaW50LCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBiaFtdKTsKK2ludCBzeW5jX2RpcnR5X2J1ZmZlcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKTsKK2ludCBzdWJtaXRfYmgoaW50LCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKik7Cit2b2lkIHdyaXRlX2JvdW5kYXJ5X2Jsb2NrKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsCisJCQlzZWN0b3JfdCBiYmxvY2ssIHVuc2lnbmVkIGJsb2Nrc2l6ZSk7CisKK2V4dGVybiBpbnQgYnVmZmVyX2hlYWRzX292ZXJfbGltaXQ7CisKKy8qCisgKiBHZW5lcmljIGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBpbXBsZW1lbnRhdGlvbnMgZm9yIGJ1ZmZlcl9oZWFkLWJhY2tlZAorICogYWRkcmVzc19zcGFjZXMuCisgKi8KK2ludCB0cnlfdG9fcmVsZWFzZV9wYWdlKHN0cnVjdCBwYWdlICogcGFnZSwgaW50IGdmcF9tYXNrKTsKK2ludCBibG9ja19pbnZhbGlkYXRlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOworaW50IGJsb2NrX3dyaXRlX2Z1bGxfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZ2V0X2Jsb2NrX3QgKmdldF9ibG9jaywKKwkJCQlzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyk7CitpbnQgYmxvY2tfcmVhZF9mdWxsX3BhZ2Uoc3RydWN0IHBhZ2UqLCBnZXRfYmxvY2tfdCopOworaW50IGJsb2NrX3ByZXBhcmVfd3JpdGUoc3RydWN0IHBhZ2UqLCB1bnNpZ25lZCwgdW5zaWduZWQsIGdldF9ibG9ja190Kik7CitpbnQgY29udF9wcmVwYXJlX3dyaXRlKHN0cnVjdCBwYWdlKiwgdW5zaWduZWQsIHVuc2lnbmVkLCBnZXRfYmxvY2tfdCosCisJCQkJbG9mZl90ICopOworaW50IGdlbmVyaWNfY29udF9leHBhbmQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHNpemUpIDsKK2ludCBibG9ja19jb21taXRfd3JpdGUoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKTsKK2ludCBibG9ja19zeW5jX3BhZ2Uoc3RydWN0IHBhZ2UgKik7CitzZWN0b3JfdCBnZW5lcmljX2Jsb2NrX2JtYXAoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKiwgc2VjdG9yX3QsIGdldF9ibG9ja190ICopOworaW50IGdlbmVyaWNfY29tbWl0X3dyaXRlKHN0cnVjdCBmaWxlICosIHN0cnVjdCBwYWdlICosIHVuc2lnbmVkLCB1bnNpZ25lZCk7CitpbnQgYmxvY2tfdHJ1bmNhdGVfcGFnZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqLCBsb2ZmX3QsIGdldF9ibG9ja190ICopOworaW50IGZpbGVfZnN5bmMoc3RydWN0IGZpbGUgKiwgc3RydWN0IGRlbnRyeSAqLCBpbnQpOworaW50IG5vYmhfcHJlcGFyZV93cml0ZShzdHJ1Y3QgcGFnZSosIHVuc2lnbmVkLCB1bnNpZ25lZCwgZ2V0X2Jsb2NrX3QqKTsKK2ludCBub2JoX2NvbW1pdF93cml0ZShzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgcGFnZSAqLCB1bnNpZ25lZCwgdW5zaWduZWQpOworaW50IG5vYmhfdHJ1bmNhdGVfcGFnZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqLCBsb2ZmX3QpOworaW50IG5vYmhfd3JpdGVwYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBnZXRfYmxvY2tfdCAqZ2V0X2Jsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpOworCisKKy8qCisgKiBpbmxpbmUgZGVmaW5pdGlvbnMKKyAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgYXR0YWNoX3BhZ2VfYnVmZmVycyhzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJc3RydWN0IGJ1ZmZlcl9oZWFkICpoZWFkKQoreworCXBhZ2VfY2FjaGVfZ2V0KHBhZ2UpOworCVNldFBhZ2VQcml2YXRlKHBhZ2UpOworCXBhZ2UtPnByaXZhdGUgPSAodW5zaWduZWQgbG9uZyloZWFkOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X2JoKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCit7CisgICAgICAgIGF0b21pY19pbmMoJmJoLT5iX2NvdW50KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHB1dF9iaChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQoreworICAgICAgICBzbXBfbWJfX2JlZm9yZV9hdG9taWNfZGVjKCk7CisgICAgICAgIGF0b21pY19kZWMoJmJoLT5iX2NvdW50KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGJyZWxzZShzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQoreworCWlmIChiaCkKKwkJX19icmVsc2UoYmgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYmZvcmdldChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQoreworCWlmIChiaCkKKwkJX19iZm9yZ2V0KGJoKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgYnVmZmVyX2hlYWQgKgorc2JfYnJlYWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc2VjdG9yX3QgYmxvY2spCit7CisJcmV0dXJuIF9fYnJlYWQoc2ItPnNfYmRldiwgYmxvY2ssIHNiLT5zX2Jsb2Nrc2l6ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorc2JfYnJlYWRhaGVhZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzZWN0b3JfdCBibG9jaykKK3sKKwlfX2JyZWFkYWhlYWQoc2ItPnNfYmRldiwgYmxvY2ssIHNiLT5zX2Jsb2Nrc2l6ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGJ1ZmZlcl9oZWFkICoKK3NiX2dldGJsayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzZWN0b3JfdCBibG9jaykKK3sKKwlyZXR1cm4gX19nZXRibGsoc2ItPnNfYmRldiwgYmxvY2ssIHNiLT5zX2Jsb2Nrc2l6ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGJ1ZmZlcl9oZWFkICoKK3NiX2ZpbmRfZ2V0X2Jsb2NrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHNlY3Rvcl90IGJsb2NrKQoreworCXJldHVybiBfX2ZpbmRfZ2V0X2Jsb2NrKHNiLT5zX2JkZXYsIGJsb2NrLCBzYi0+c19ibG9ja3NpemUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK21hcF9iaChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzZWN0b3JfdCBibG9jaykKK3sKKwlzZXRfYnVmZmVyX21hcHBlZChiaCk7CisJYmgtPmJfYmRldiA9IHNiLT5zX2JkZXY7CisJYmgtPmJfYmxvY2tuciA9IGJsb2NrOworfQorCisvKgorICogQ2FsbGluZyB3YWl0X29uX2J1ZmZlcigpIGZvciBhIHplcm8tcmVmIGJ1ZmZlciBpcyBpbGxlZ2FsLCBzbyB3ZSBjYWxsIGludG8KKyAqIF9fd2FpdF9vbl9idWZmZXIoKSBqdXN0IHRvIHRyaXAgYSBkZWJ1ZyBjaGVjay4gIEJlY2F1c2UgZGVidWcgY29kZSBpbiBpbmxpbmUKKyAqIGZ1bmN0aW9ucyBpcyBibG9hdHkuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB3YWl0X29uX2J1ZmZlcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQoreworCW1pZ2h0X3NsZWVwKCk7CisJaWYgKGJ1ZmZlcl9sb2NrZWQoYmgpIHx8IGF0b21pY19yZWFkKCZiaC0+Yl9jb3VudCkgPT0gMCkKKwkJX193YWl0X29uX2J1ZmZlcihiaCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2NrX2J1ZmZlcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQoreworCW1pZ2h0X3NsZWVwKCk7CisJaWYgKHRlc3Rfc2V0X2J1ZmZlcl9sb2NrZWQoYmgpKQorCQlfX2xvY2tfYnVmZmVyKGJoKTsKK30KKworI2VuZGlmIC8qIF9MSU5VWF9CVUZGRVJfSEVBRF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2J5dGVvcmRlci9iaWdfZW5kaWFuLmggYi9pbmNsdWRlL2xpbnV4L2J5dGVvcmRlci9iaWdfZW5kaWFuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVmODc4OQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvYnl0ZW9yZGVyL2JpZ19lbmRpYW4uaApAQCAtMCwwICsxLDEwNiBAQAorI2lmbmRlZiBfTElOVVhfQllURU9SREVSX0JJR19FTkRJQU5fSAorI2RlZmluZSBfTElOVVhfQllURU9SREVSX0JJR19FTkRJQU5fSAorCisjaWZuZGVmIF9fQklHX0VORElBTgorI2RlZmluZSBfX0JJR19FTkRJQU4gNDMyMQorI2VuZGlmCisjaWZuZGVmIF9fQklHX0VORElBTl9CSVRGSUVMRAorI2RlZmluZSBfX0JJR19FTkRJQU5fQklURklFTEQKKyNlbmRpZgorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9ieXRlb3JkZXIvc3dhYi5oPgorCisjZGVmaW5lIF9fY29uc3RhbnRfaHRvbmwoeCkgKChfX2ZvcmNlIF9fYmUzMikoX191MzIpKHgpKQorI2RlZmluZSBfX2NvbnN0YW50X250b2hsKHgpICgoX19mb3JjZSBfX3UzMikoX19iZTMyKSh4KSkKKyNkZWZpbmUgX19jb25zdGFudF9odG9ucyh4KSAoKF9fZm9yY2UgX19iZTE2KShfX3UxNikoeCkpCisjZGVmaW5lIF9fY29uc3RhbnRfbnRvaHMoeCkgKChfX2ZvcmNlIF9fdTE2KShfX2JlMTYpKHgpKQorI2RlZmluZSBfX2NvbnN0YW50X2NwdV90b19sZTY0KHgpICgoX19mb3JjZSBfX2xlNjQpX19fY29uc3RhbnRfc3dhYjY0KCh4KSkpCisjZGVmaW5lIF9fY29uc3RhbnRfbGU2NF90b19jcHUoeCkgX19fY29uc3RhbnRfc3dhYjY0KChfX2ZvcmNlIF9fdTY0KShfX2xlNjQpKHgpKQorI2RlZmluZSBfX2NvbnN0YW50X2NwdV90b19sZTMyKHgpICgoX19mb3JjZSBfX2xlMzIpX19fY29uc3RhbnRfc3dhYjMyKCh4KSkpCisjZGVmaW5lIF9fY29uc3RhbnRfbGUzMl90b19jcHUoeCkgX19fY29uc3RhbnRfc3dhYjMyKChfX2ZvcmNlIF9fdTMyKShfX2xlMzIpKHgpKQorI2RlZmluZSBfX2NvbnN0YW50X2NwdV90b19sZTE2KHgpICgoX19mb3JjZSBfX2xlMTYpX19fY29uc3RhbnRfc3dhYjE2KCh4KSkpCisjZGVmaW5lIF9fY29uc3RhbnRfbGUxNl90b19jcHUoeCkgX19fY29uc3RhbnRfc3dhYjE2KChfX2ZvcmNlIF9fdTE2KShfX2xlMTYpKHgpKQorI2RlZmluZSBfX2NvbnN0YW50X2NwdV90b19iZTY0KHgpICgoX19mb3JjZSBfX2JlNjQpKF9fdTY0KSh4KSkKKyNkZWZpbmUgX19jb25zdGFudF9iZTY0X3RvX2NwdSh4KSAoKF9fZm9yY2UgX191NjQpKF9fYmU2NCkoeCkpCisjZGVmaW5lIF9fY29uc3RhbnRfY3B1X3RvX2JlMzIoeCkgKChfX2ZvcmNlIF9fYmUzMikoX191MzIpKHgpKQorI2RlZmluZSBfX2NvbnN0YW50X2JlMzJfdG9fY3B1KHgpICgoX19mb3JjZSBfX3UzMikoX19iZTMyKSh4KSkKKyNkZWZpbmUgX19jb25zdGFudF9jcHVfdG9fYmUxNih4KSAoKF9fZm9yY2UgX19iZTE2KShfX3UxNikoeCkpCisjZGVmaW5lIF9fY29uc3RhbnRfYmUxNl90b19jcHUoeCkgKChfX2ZvcmNlIF9fdTE2KShfX2JlMTYpKHgpKQorI2RlZmluZSBfX2NwdV90b19sZTY0KHgpICgoX19mb3JjZSBfX2xlNjQpX19zd2FiNjQoKHgpKSkKKyNkZWZpbmUgX19sZTY0X3RvX2NwdSh4KSBfX3N3YWI2NCgoX19mb3JjZSBfX3U2NCkoX19sZTY0KSh4KSkKKyNkZWZpbmUgX19jcHVfdG9fbGUzMih4KSAoKF9fZm9yY2UgX19sZTMyKV9fc3dhYjMyKCh4KSkpCisjZGVmaW5lIF9fbGUzMl90b19jcHUoeCkgX19zd2FiMzIoKF9fZm9yY2UgX191MzIpKF9fbGUzMikoeCkpCisjZGVmaW5lIF9fY3B1X3RvX2xlMTYoeCkgKChfX2ZvcmNlIF9fbGUxNilfX3N3YWIxNigoeCkpKQorI2RlZmluZSBfX2xlMTZfdG9fY3B1KHgpIF9fc3dhYjE2KChfX2ZvcmNlIF9fdTE2KShfX2xlMTYpKHgpKQorI2RlZmluZSBfX2NwdV90b19iZTY0KHgpICgoX19mb3JjZSBfX2JlNjQpKF9fdTY0KSh4KSkKKyNkZWZpbmUgX19iZTY0X3RvX2NwdSh4KSAoKF9fZm9yY2UgX191NjQpKF9fYmU2NCkoeCkpCisjZGVmaW5lIF9fY3B1X3RvX2JlMzIoeCkgKChfX2ZvcmNlIF9fYmUzMikoX191MzIpKHgpKQorI2RlZmluZSBfX2JlMzJfdG9fY3B1KHgpICgoX19mb3JjZSBfX3UzMikoX19iZTMyKSh4KSkKKyNkZWZpbmUgX19jcHVfdG9fYmUxNih4KSAoKF9fZm9yY2UgX19iZTE2KShfX3UxNikoeCkpCisjZGVmaW5lIF9fYmUxNl90b19jcHUoeCkgKChfX2ZvcmNlIF9fdTE2KShfX2JlMTYpKHgpKQorCitzdGF0aWMgaW5saW5lIF9fbGU2NCBfX2NwdV90b19sZTY0cChjb25zdCBfX3U2NCAqcCkKK3sKKwlyZXR1cm4gKF9fZm9yY2UgX19sZTY0KV9fc3dhYjY0cChwKTsKK30KK3N0YXRpYyBpbmxpbmUgX191NjQgX19sZTY0X3RvX2NwdXAoY29uc3QgX19sZTY0ICpwKQoreworCXJldHVybiBfX3N3YWI2NHAoKF9fdTY0ICopcCk7Cit9CitzdGF0aWMgaW5saW5lIF9fbGUzMiBfX2NwdV90b19sZTMycChjb25zdCBfX3UzMiAqcCkKK3sKKwlyZXR1cm4gKF9fZm9yY2UgX19sZTMyKV9fc3dhYjMycChwKTsKK30KK3N0YXRpYyBpbmxpbmUgX191MzIgX19sZTMyX3RvX2NwdXAoY29uc3QgX19sZTMyICpwKQoreworCXJldHVybiBfX3N3YWIzMnAoKF9fdTMyICopcCk7Cit9CitzdGF0aWMgaW5saW5lIF9fbGUxNiBfX2NwdV90b19sZTE2cChjb25zdCBfX3UxNiAqcCkKK3sKKwlyZXR1cm4gKF9fZm9yY2UgX19sZTE2KV9fc3dhYjE2cChwKTsKK30KK3N0YXRpYyBpbmxpbmUgX191MTYgX19sZTE2X3RvX2NwdXAoY29uc3QgX19sZTE2ICpwKQoreworCXJldHVybiBfX3N3YWIxNnAoKF9fdTE2ICopcCk7Cit9CitzdGF0aWMgaW5saW5lIF9fYmU2NCBfX2NwdV90b19iZTY0cChjb25zdCBfX3U2NCAqcCkKK3sKKwlyZXR1cm4gKF9fZm9yY2UgX19iZTY0KSpwOworfQorc3RhdGljIGlubGluZSBfX3U2NCBfX2JlNjRfdG9fY3B1cChjb25zdCBfX2JlNjQgKnApCit7CisJcmV0dXJuIChfX2ZvcmNlIF9fdTY0KSpwOworfQorc3RhdGljIGlubGluZSBfX2JlMzIgX19jcHVfdG9fYmUzMnAoY29uc3QgX191MzIgKnApCit7CisJcmV0dXJuIChfX2ZvcmNlIF9fYmUzMikqcDsKK30KK3N0YXRpYyBpbmxpbmUgX191MzIgX19iZTMyX3RvX2NwdXAoY29uc3QgX19iZTMyICpwKQoreworCXJldHVybiAoX19mb3JjZSBfX3UzMikqcDsKK30KK3N0YXRpYyBpbmxpbmUgX19iZTE2IF9fY3B1X3RvX2JlMTZwKGNvbnN0IF9fdTE2ICpwKQoreworCXJldHVybiAoX19mb3JjZSBfX2JlMTYpKnA7Cit9CitzdGF0aWMgaW5saW5lIF9fdTE2IF9fYmUxNl90b19jcHVwKGNvbnN0IF9fYmUxNiAqcCkKK3sKKwlyZXR1cm4gKF9fZm9yY2UgX191MTYpKnA7Cit9CisjZGVmaW5lIF9fY3B1X3RvX2xlNjRzKHgpIF9fc3dhYjY0cygoeCkpCisjZGVmaW5lIF9fbGU2NF90b19jcHVzKHgpIF9fc3dhYjY0cygoeCkpCisjZGVmaW5lIF9fY3B1X3RvX2xlMzJzKHgpIF9fc3dhYjMycygoeCkpCisjZGVmaW5lIF9fbGUzMl90b19jcHVzKHgpIF9fc3dhYjMycygoeCkpCisjZGVmaW5lIF9fY3B1X3RvX2xlMTZzKHgpIF9fc3dhYjE2cygoeCkpCisjZGVmaW5lIF9fbGUxNl90b19jcHVzKHgpIF9fc3dhYjE2cygoeCkpCisjZGVmaW5lIF9fY3B1X3RvX2JlNjRzKHgpIGRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBfX2JlNjRfdG9fY3B1cyh4KSBkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgX19jcHVfdG9fYmUzMnMoeCkgZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIF9fYmUzMl90b19jcHVzKHgpIGRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBfX2NwdV90b19iZTE2cyh4KSBkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgX19iZTE2X3RvX2NwdXMoeCkgZG8ge30gd2hpbGUgKDApCisKKyNpbmNsdWRlIDxsaW51eC9ieXRlb3JkZXIvZ2VuZXJpYy5oPgorCisjZW5kaWYgLyogX0xJTlVYX0JZVEVPUkRFUl9CSUdfRU5ESUFOX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnl0ZW9yZGVyL2dlbmVyaWMuaCBiL2luY2x1ZGUvbGludXgvYnl0ZW9yZGVyL2dlbmVyaWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmRlNmY0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9ieXRlb3JkZXIvZ2VuZXJpYy5oCkBAIC0wLDAgKzEsMTcyIEBACisjaWZuZGVmIF9MSU5VWF9CWVRFT1JERVJfR0VORVJJQ19ICisjZGVmaW5lIF9MSU5VWF9CWVRFT1JERVJfR0VORVJJQ19ICisKKy8qCisgKiBsaW51eC9ieXRlb3JkZXJfZ2VuZXJpYy5oCisgKiBHZW5lcmljIEJ5dGUtcmVvcmRlcmluZyBzdXBwb3J0CisgKgorICogRnJhbmNvaXMtUmVuZSBSaWRlYXUgPGZhcmVAdHVuZXMub3JnPiAxOTk3MDcwNworICogICAgZ2F0aGVyZWQgYWxsIHRoZSBnb29kIGlkZWFzIGZyb20gYWxsIGFzbS1mb28vYnl0ZW9yZGVyLmggaW50byBvbmUgZmlsZSwKKyAqICAgIGNsZWFuZWQgdGhlbSB1cC4KKyAqICAgIEkgaG9wZSBpdCBpcyBjb21wbGlhbnQgd2l0aCBub24tR0NDIGNvbXBpbGVycy4KKyAqICAgIEkgZGVjaWRlZCB0byBwdXQgX19CWVRFT1JERVJfSEFTX1U2NF9fIGluIGJ5dGVvcmRlci5oLAorICogICAgYmVjYXVzZSBJIHdhc24ndCBzdXJlIGl0IHdvdWxkIGJlIG9rIHRvIHB1dCBpdCBpbiB0eXBlcy5oCisgKiAgICBVcGdyYWRlZCBpdCB0byAyLjEuNDMKKyAqIEZyYW5jb2lzLVJlbmUgUmlkZWF1IDxmYXJlQHR1bmVzLm9yZz4gMTk5NzEwMTIKKyAqICAgIFVwZ3JhZGVkIGl0IHRvIDIuMS41NworICogICAgdG8gcGxlYXNlIExpbnVzIFQuLCByZXBsYWNlZCBodWdlICNpZmRlZidzIGJldHdlZW4gbGl0dGxlL2JpZyBlbmRpYW4KKyAqICAgIGJ5IG5lc3RlZGx5ICNpbmNsdWRlJ2QgZmlsZXMuCisgKiBGcmFuY29pcy1SZW5lIFJpZGVhdSA8ZmFyZUB0dW5lcy5vcmc+IDE5OTcxMjA1CisgKiAgICBNYWRlIGl0IHRvIDIuMS43MTsgbm93IGEgZmFjZWxpZnQ6CisgKiAgICBQdXQgZmlsZXMgdW5kZXIgaW5jbHVkZS9saW51eC9ieXRlb3JkZXIvCisgKiAgICBTcGxpdCBzd2FiIGZyb20gZ2VuZXJpYyBzdXBwb3J0LgorICoKKyAqIFRPRE86CisgKiAgID0gUmVndWxhciBrZXJuZWwgbWFpbnRhaW5lcnMgY291bGQgYWxzbyByZXBsYWNlIGFsbCB0aGVzZSBtYW51YWwKKyAqICAgIGJ5dGVzd2FwIG1hY3JvcyB0aGF0IHJlbWFpbiwgZGlzc2VtaW5hdGVkIGFtb25nIGRyaXZlcnMsCisgKiAgICBhZnRlciBzb21lIGdyZXAgb3IgdGhlIHNvdXJjZXMuLi4KKyAqICAgPSBMaW51cyBtaWdodCB3YW50IHRvIHJlbmFtZSBhbGwgdGhlc2UgbWFjcm9zIGFuZCBmaWxlcyB0byBmaXQgaGlzIHRhc3RlLAorICogICAgdG8gZml0IGhpcyBwZXJzb25hbCBuYW1pbmcgc2NoZW1lLgorICogICA9IGl0IHNlZW1zIHRoYXQgYSBmZXcgZHJpdmVycyB3b3VsZCBhbHNvIGFwcHJlY2lhdGUKKyAqICAgIG55YmJsZSBzd2FwcGluZyBzdXBwb3J0Li4uCisgKiAgID0gZXZlcnkgYXJjaGl0ZWN0dXJlIGNvdWxkIGFkZCB0aGVpciBieXRlc3dhcCBtYWNybyBpbiBhc20vYnl0ZW9yZGVyLmgKKyAqICAgIHNlZSBob3cgc29tZSBhcmNoaXRlY3R1cmVzIGFscmVhZHkgZG8gKGkzODYsIGFscGhhLCBwcGMsIGV0YykKKyAqICAgPSBjcHVfdG9fYmVYWCBhbmQgYmVYWF90b19jcHUgbWlnaHQgc29tZSBkYXkgbmVlZCB0byBiZSB3ZWxsCisgKiAgICBkaXN0aW5ndWlzaGVkIHRocm91Z2hvdXQgdGhlIGtlcm5lbC4gVGhpcyBpcyBub3QgdGhlIGNhc2UgY3VycmVudGx5LAorICogICAgc2luY2UgbGl0dGxlIGVuZGlhbiwgYmlnIGVuZGlhbiwgYW5kIHBkcCBlbmRpYW4gbWFjaGluZXMgbmVlZG4ndCBpdC4KKyAqICAgIEJ1dCB0aGlzIG1pZ2h0IGJlIHRoZSBjYXNlIGZvciwgc2F5LCBhIHBvcnQgb2YgTGludXggdG8gMjAvMjEgYml0CisgKiAgICBhcmNoaXRlY3R1cmVzIChhbmQgRjIxIExpbnV4IGFkZGljdCBhcm91bmQ/KS4KKyAqLworCisvKgorICogVGhlIGZvbGxvd2luZyBtYWNyb3MgYXJlIHRvIGJlIGRlZmluZWQgYnkgPGFzbS9ieXRlb3JkZXIuaD46CisgKgorICogQ29udmVyc2lvbiBvZiBsb25nIGFuZCBzaG9ydCBpbnQgYmV0d2VlbiBuZXR3b3JrIGFuZCBob3N0IGZvcm1hdAorICoJbnRvaGwoX191MzIgeCkKKyAqCW50b2hzKF9fdTE2IHgpCisgKglodG9ubChfX3UzMiB4KQorICoJaHRvbnMoX191MTYgeCkKKyAqIEl0IHNlZW1zIHRoYXQgc29tZSBwcm9ncmFtcyAod2hpY2g/IHdoZXJlPyBvciBwZXJoYXBzIGEgc3RhbmRhcmQ/IFBPU0lYPykKKyAqIG1pZ2h0IGxpa2UgdGhlIGFib3ZlIHRvIGJlIGZ1bmN0aW9ucywgbm90IG1hY3JvcyAod2h5PykuCisgKiBpZiB0aGF0J3MgdHJ1ZSwgdGhlbiBkZXRlY3QgdGhlbSwgYW5kIHRha2UgbWVhc3VyZXMuCisgKiBBbnl3YXksIHRoZSBtZWFzdXJlIGlzOiBkZWZpbmUgb25seSBfX19udG9obCBhcyBhIG1hY3JvIGluc3RlYWQsCisgKiBhbmQgaW4gYSBzZXBhcmF0ZSBmaWxlLCBoYXZlCisgKiB1bnNpZ25lZCBsb25nIGlubGluZSBudG9obCh4KXtyZXR1cm4gX19fbnRvaGwoeCk7fQorICoKKyAqIFRoZSBzYW1lIGZvciBjb25zdGFudCBhcmd1bWVudHMKKyAqCV9fY29uc3RhbnRfbnRvaGwoX191MzIgeCkKKyAqCV9fY29uc3RhbnRfbnRvaHMoX191MTYgeCkKKyAqCV9fY29uc3RhbnRfaHRvbmwoX191MzIgeCkKKyAqCV9fY29uc3RhbnRfaHRvbnMoX191MTYgeCkKKyAqCisgKiBDb252ZXJzaW9uIG9mIFhYLWJpdCBpbnRlZ2VycyAoMTYtIDMyLSBvciA2NC0pCisgKiBiZXR3ZWVuIG5hdGl2ZSBDUFUgZm9ybWF0IGFuZCBsaXR0bGUvYmlnIGVuZGlhbiBmb3JtYXQKKyAqIDY0LWJpdCBzdHVmZiBvbmx5IGRlZmluZWQgZm9yIHByb3BlciBhcmNoaXRlY3R1cmVzCisgKgljcHVfdG9fW2JsXWVYWChfX3VYWCB4KQorICoJW2JsXWVYWF90b19jcHUoX191WFggeCkKKyAqCisgKiBUaGUgc2FtZSwgYnV0IHRha2VzIGEgcG9pbnRlciB0byB0aGUgdmFsdWUgdG8gY29udmVydAorICoJY3B1X3RvX1tibF1lWFhwKF9fdVhYIHgpCisgKglbYmxdZVhYX3RvX2NwdXAoX191WFggeCkKKyAqCisgKiBUaGUgc2FtZSwgYnV0IGNoYW5nZSBpbiBzaXR1CisgKgljcHVfdG9fW2JsXWVYWHMoX191WFggeCkKKyAqCVtibF1lWFhfdG9fY3B1cyhfX3VYWCB4KQorICoKKyAqIFNlZSBhc20tZm9vL2J5dGVvcmRlci5oIGZvciBleGFtcGxlcyBvZiBob3cgdG8gcHJvdmlkZQorICogYXJjaGl0ZWN0dXJlLW9wdGltaXplZCB2ZXJzaW9ucworICoKKyAqLworCisKKyNpZiBkZWZpbmVkKF9fS0VSTkVMX18pCisvKgorICogaW5zaWRlIHRoZSBrZXJuZWwsIHdlIGNhbiB1c2Ugbmlja25hbWVzOworICogb3V0c2lkZSBvZiBpdCwgd2UgbXVzdCBhdm9pZCBQT1NJWCBuYW1lc3BhY2UgcG9sbHV0aW9uLi4uCisgKi8KKyNkZWZpbmUgY3B1X3RvX2xlNjQgX19jcHVfdG9fbGU2NAorI2RlZmluZSBsZTY0X3RvX2NwdSBfX2xlNjRfdG9fY3B1CisjZGVmaW5lIGNwdV90b19sZTMyIF9fY3B1X3RvX2xlMzIKKyNkZWZpbmUgbGUzMl90b19jcHUgX19sZTMyX3RvX2NwdQorI2RlZmluZSBjcHVfdG9fbGUxNiBfX2NwdV90b19sZTE2CisjZGVmaW5lIGxlMTZfdG9fY3B1IF9fbGUxNl90b19jcHUKKyNkZWZpbmUgY3B1X3RvX2JlNjQgX19jcHVfdG9fYmU2NAorI2RlZmluZSBiZTY0X3RvX2NwdSBfX2JlNjRfdG9fY3B1CisjZGVmaW5lIGNwdV90b19iZTMyIF9fY3B1X3RvX2JlMzIKKyNkZWZpbmUgYmUzMl90b19jcHUgX19iZTMyX3RvX2NwdQorI2RlZmluZSBjcHVfdG9fYmUxNiBfX2NwdV90b19iZTE2CisjZGVmaW5lIGJlMTZfdG9fY3B1IF9fYmUxNl90b19jcHUKKyNkZWZpbmUgY3B1X3RvX2xlNjRwIF9fY3B1X3RvX2xlNjRwCisjZGVmaW5lIGxlNjRfdG9fY3B1cCBfX2xlNjRfdG9fY3B1cAorI2RlZmluZSBjcHVfdG9fbGUzMnAgX19jcHVfdG9fbGUzMnAKKyNkZWZpbmUgbGUzMl90b19jcHVwIF9fbGUzMl90b19jcHVwCisjZGVmaW5lIGNwdV90b19sZTE2cCBfX2NwdV90b19sZTE2cAorI2RlZmluZSBsZTE2X3RvX2NwdXAgX19sZTE2X3RvX2NwdXAKKyNkZWZpbmUgY3B1X3RvX2JlNjRwIF9fY3B1X3RvX2JlNjRwCisjZGVmaW5lIGJlNjRfdG9fY3B1cCBfX2JlNjRfdG9fY3B1cAorI2RlZmluZSBjcHVfdG9fYmUzMnAgX19jcHVfdG9fYmUzMnAKKyNkZWZpbmUgYmUzMl90b19jcHVwIF9fYmUzMl90b19jcHVwCisjZGVmaW5lIGNwdV90b19iZTE2cCBfX2NwdV90b19iZTE2cAorI2RlZmluZSBiZTE2X3RvX2NwdXAgX19iZTE2X3RvX2NwdXAKKyNkZWZpbmUgY3B1X3RvX2xlNjRzIF9fY3B1X3RvX2xlNjRzCisjZGVmaW5lIGxlNjRfdG9fY3B1cyBfX2xlNjRfdG9fY3B1cworI2RlZmluZSBjcHVfdG9fbGUzMnMgX19jcHVfdG9fbGUzMnMKKyNkZWZpbmUgbGUzMl90b19jcHVzIF9fbGUzMl90b19jcHVzCisjZGVmaW5lIGNwdV90b19sZTE2cyBfX2NwdV90b19sZTE2cworI2RlZmluZSBsZTE2X3RvX2NwdXMgX19sZTE2X3RvX2NwdXMKKyNkZWZpbmUgY3B1X3RvX2JlNjRzIF9fY3B1X3RvX2JlNjRzCisjZGVmaW5lIGJlNjRfdG9fY3B1cyBfX2JlNjRfdG9fY3B1cworI2RlZmluZSBjcHVfdG9fYmUzMnMgX19jcHVfdG9fYmUzMnMKKyNkZWZpbmUgYmUzMl90b19jcHVzIF9fYmUzMl90b19jcHVzCisjZGVmaW5lIGNwdV90b19iZTE2cyBfX2NwdV90b19iZTE2cworI2RlZmluZSBiZTE2X3RvX2NwdXMgX19iZTE2X3RvX2NwdXMKKyNlbmRpZgorCisKKyNpZiBkZWZpbmVkKF9fS0VSTkVMX18pCisvKgorICogSGFuZGxlIG50b2hsIGFuZCBzdWNoZXMuIFRoZXNlIGhhdmUgdmFyaW91cyBjb21wYXRpYmlsaXR5CisgKiBpc3N1ZXMgLSBsaWtlIHdlIHdhbnQgdG8gZ2l2ZSB0aGUgcHJvdG90eXBlIGV2ZW4gdGhvdWdoIHdlCisgKiBhbHNvIGhhdmUgYSBtYWNybyBmb3IgdGhlbSBpbiBjYXNlIHNvbWUgc3RyYW5nZSBwcm9ncmFtCisgKiB3YW50cyB0byB0YWtlIHRoZSBhZGRyZXNzIG9mIHRoZSB0aGluZyBvciBzb21ldGhpbmcuLgorICoKKyAqIE5vdGUgdGhhdCB0aGVzZSB1c2VkIHRvIHJldHVybiBhICJsb25nIiBpbiBsaWJjNSwgZXZlbiB0aG91Z2gKKyAqIGxvbmcgaXMgb2Z0ZW4gNjQtYml0IHRoZXNlIGRheXMuLiBUaHVzIHRoZSBjYXN0cy4KKyAqCisgKiBUaGV5IGhhdmUgdG8gYmUgbWFjcm9zIGluIG9yZGVyIHRvIGRvIHRoZSBjb25zdGFudCBmb2xkaW5nCisgKiBjb3JyZWN0bHkgLSBpZiB0aGUgYXJndW1lbnQgcGFzc2VkIGludG8gYSBpbmxpbmUgZnVuY3Rpb24KKyAqIGl0IGlzIG5vIGxvbmdlciBjb25zdGFudCBhY2NvcmRpbmcgdG8gZ2NjLi4KKyAqLworCisjdW5kZWYgbnRvaGwKKyN1bmRlZiBudG9ocworI3VuZGVmIGh0b25sCisjdW5kZWYgaHRvbnMKKworLyoKKyAqIERvIHRoZSBwcm90b3R5cGVzLiBTb21lYm9keSBtaWdodCB3YW50IHRvIHRha2UgdGhlCisgKiBhZGRyZXNzIG9yIHNvbWUgc3VjaCBzaWNrIHRoaW5nLi4KKyAqLworZXh0ZXJuIF9fdTMyCQkJbnRvaGwoX19iZTMyKTsKK2V4dGVybiBfX2JlMzIJCQlodG9ubChfX3UzMik7CitleHRlcm4gX191MTYJCQludG9ocyhfX2JlMTYpOworZXh0ZXJuIF9fYmUxNgkJCWh0b25zKF9fdTE2KTsKKworI2lmIGRlZmluZWQoX19HTlVDX18pICYmIChfX0dOVUNfXyA+PSAyKSAmJiBkZWZpbmVkKF9fT1BUSU1JWkVfXykKKworI2RlZmluZSBfX19odG9ubCh4KSBfX2NwdV90b19iZTMyKHgpCisjZGVmaW5lIF9fX2h0b25zKHgpIF9fY3B1X3RvX2JlMTYoeCkKKyNkZWZpbmUgX19fbnRvaGwoeCkgX19iZTMyX3RvX2NwdSh4KQorI2RlZmluZSBfX19udG9ocyh4KSBfX2JlMTZfdG9fY3B1KHgpCisKKyNkZWZpbmUgaHRvbmwoeCkgX19faHRvbmwoeCkKKyNkZWZpbmUgbnRvaGwoeCkgX19fbnRvaGwoeCkKKyNkZWZpbmUgaHRvbnMoeCkgX19faHRvbnMoeCkKKyNkZWZpbmUgbnRvaHMoeCkgX19fbnRvaHMoeCkKKworI2VuZGlmIC8qIE9QVElNSVpFICovCisKKyNlbmRpZiAvKiBLRVJORUwgKi8KKworCisjZW5kaWYgLyogX0xJTlVYX0JZVEVPUkRFUl9HRU5FUklDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnl0ZW9yZGVyL2xpdHRsZV9lbmRpYW4uaCBiL2luY2x1ZGUvbGludXgvYnl0ZW9yZGVyL2xpdHRsZV9lbmRpYW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmU2MmI3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9ieXRlb3JkZXIvbGl0dGxlX2VuZGlhbi5oCkBAIC0wLDAgKzEsMTA2IEBACisjaWZuZGVmIF9MSU5VWF9CWVRFT1JERVJfTElUVExFX0VORElBTl9ICisjZGVmaW5lIF9MSU5VWF9CWVRFT1JERVJfTElUVExFX0VORElBTl9ICisKKyNpZm5kZWYgX19MSVRUTEVfRU5ESUFOCisjZGVmaW5lIF9fTElUVExFX0VORElBTiAxMjM0CisjZW5kaWYKKyNpZm5kZWYgX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxECisjZGVmaW5lIF9fTElUVExFX0VORElBTl9CSVRGSUVMRAorI2VuZGlmCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9zd2FiLmg+CisKKyNkZWZpbmUgX19jb25zdGFudF9odG9ubCh4KSAoKF9fZm9yY2UgX19iZTMyKV9fX2NvbnN0YW50X3N3YWIzMigoeCkpKQorI2RlZmluZSBfX2NvbnN0YW50X250b2hsKHgpIF9fX2NvbnN0YW50X3N3YWIzMigoX19mb3JjZSBfX2JlMzIpKHgpKQorI2RlZmluZSBfX2NvbnN0YW50X2h0b25zKHgpICgoX19mb3JjZSBfX2JlMTYpX19fY29uc3RhbnRfc3dhYjE2KCh4KSkpCisjZGVmaW5lIF9fY29uc3RhbnRfbnRvaHMoeCkgX19fY29uc3RhbnRfc3dhYjE2KChfX2ZvcmNlIF9fYmUxNikoeCkpCisjZGVmaW5lIF9fY29uc3RhbnRfY3B1X3RvX2xlNjQoeCkgKChfX2ZvcmNlIF9fbGU2NCkoX191NjQpKHgpKQorI2RlZmluZSBfX2NvbnN0YW50X2xlNjRfdG9fY3B1KHgpICgoX19mb3JjZSBfX3U2NCkoX19sZTY0KSh4KSkKKyNkZWZpbmUgX19jb25zdGFudF9jcHVfdG9fbGUzMih4KSAoKF9fZm9yY2UgX19sZTMyKShfX3UzMikoeCkpCisjZGVmaW5lIF9fY29uc3RhbnRfbGUzMl90b19jcHUoeCkgKChfX2ZvcmNlIF9fdTMyKShfX2xlMzIpKHgpKQorI2RlZmluZSBfX2NvbnN0YW50X2NwdV90b19sZTE2KHgpICgoX19mb3JjZSBfX2xlMTYpKF9fdTE2KSh4KSkKKyNkZWZpbmUgX19jb25zdGFudF9sZTE2X3RvX2NwdSh4KSAoKF9fZm9yY2UgX191MTYpKF9fbGUxNikoeCkpCisjZGVmaW5lIF9fY29uc3RhbnRfY3B1X3RvX2JlNjQoeCkgKChfX2ZvcmNlIF9fYmU2NClfX19jb25zdGFudF9zd2FiNjQoKHgpKSkKKyNkZWZpbmUgX19jb25zdGFudF9iZTY0X3RvX2NwdSh4KSBfX19jb25zdGFudF9zd2FiNjQoKF9fZm9yY2UgX191NjQpKF9fYmU2NCkoeCkpCisjZGVmaW5lIF9fY29uc3RhbnRfY3B1X3RvX2JlMzIoeCkgKChfX2ZvcmNlIF9fYmUzMilfX19jb25zdGFudF9zd2FiMzIoKHgpKSkKKyNkZWZpbmUgX19jb25zdGFudF9iZTMyX3RvX2NwdSh4KSBfX19jb25zdGFudF9zd2FiMzIoKF9fZm9yY2UgX191MzIpKF9fYmUzMikoeCkpCisjZGVmaW5lIF9fY29uc3RhbnRfY3B1X3RvX2JlMTYoeCkgKChfX2ZvcmNlIF9fYmUxNilfX19jb25zdGFudF9zd2FiMTYoKHgpKSkKKyNkZWZpbmUgX19jb25zdGFudF9iZTE2X3RvX2NwdSh4KSBfX19jb25zdGFudF9zd2FiMTYoKF9fZm9yY2UgX191MTYpKF9fYmUxNikoeCkpCisjZGVmaW5lIF9fY3B1X3RvX2xlNjQoeCkgKChfX2ZvcmNlIF9fbGU2NCkoX191NjQpKHgpKQorI2RlZmluZSBfX2xlNjRfdG9fY3B1KHgpICgoX19mb3JjZSBfX3U2NCkoX19sZTY0KSh4KSkKKyNkZWZpbmUgX19jcHVfdG9fbGUzMih4KSAoKF9fZm9yY2UgX19sZTMyKShfX3UzMikoeCkpCisjZGVmaW5lIF9fbGUzMl90b19jcHUoeCkgKChfX2ZvcmNlIF9fdTMyKShfX2xlMzIpKHgpKQorI2RlZmluZSBfX2NwdV90b19sZTE2KHgpICgoX19mb3JjZSBfX2xlMTYpKF9fdTE2KSh4KSkKKyNkZWZpbmUgX19sZTE2X3RvX2NwdSh4KSAoKF9fZm9yY2UgX191MTYpKF9fbGUxNikoeCkpCisjZGVmaW5lIF9fY3B1X3RvX2JlNjQoeCkgKChfX2ZvcmNlIF9fYmU2NClfX3N3YWI2NCgoeCkpKQorI2RlZmluZSBfX2JlNjRfdG9fY3B1KHgpIF9fc3dhYjY0KChfX2ZvcmNlIF9fdTY0KShfX2JlNjQpKHgpKQorI2RlZmluZSBfX2NwdV90b19iZTMyKHgpICgoX19mb3JjZSBfX2JlMzIpX19zd2FiMzIoKHgpKSkKKyNkZWZpbmUgX19iZTMyX3RvX2NwdSh4KSBfX3N3YWIzMigoX19mb3JjZSBfX3UzMikoX19iZTMyKSh4KSkKKyNkZWZpbmUgX19jcHVfdG9fYmUxNih4KSAoKF9fZm9yY2UgX19iZTE2KV9fc3dhYjE2KCh4KSkpCisjZGVmaW5lIF9fYmUxNl90b19jcHUoeCkgX19zd2FiMTYoKF9fZm9yY2UgX191MTYpKF9fYmUxNikoeCkpCisKK3N0YXRpYyBpbmxpbmUgX19sZTY0IF9fY3B1X3RvX2xlNjRwKGNvbnN0IF9fdTY0ICpwKQoreworCXJldHVybiAoX19mb3JjZSBfX2xlNjQpKnA7Cit9CitzdGF0aWMgaW5saW5lIF9fdTY0IF9fbGU2NF90b19jcHVwKGNvbnN0IF9fbGU2NCAqcCkKK3sKKwlyZXR1cm4gKF9fZm9yY2UgX191NjQpKnA7Cit9CitzdGF0aWMgaW5saW5lIF9fbGUzMiBfX2NwdV90b19sZTMycChjb25zdCBfX3UzMiAqcCkKK3sKKwlyZXR1cm4gKF9fZm9yY2UgX19sZTMyKSpwOworfQorc3RhdGljIGlubGluZSBfX3UzMiBfX2xlMzJfdG9fY3B1cChjb25zdCBfX2xlMzIgKnApCit7CisJcmV0dXJuIChfX2ZvcmNlIF9fdTMyKSpwOworfQorc3RhdGljIGlubGluZSBfX2xlMTYgX19jcHVfdG9fbGUxNnAoY29uc3QgX191MTYgKnApCit7CisJcmV0dXJuIChfX2ZvcmNlIF9fbGUxNikqcDsKK30KK3N0YXRpYyBpbmxpbmUgX191MTYgX19sZTE2X3RvX2NwdXAoY29uc3QgX19sZTE2ICpwKQoreworCXJldHVybiAoX19mb3JjZSBfX3UxNikqcDsKK30KK3N0YXRpYyBpbmxpbmUgX19iZTY0IF9fY3B1X3RvX2JlNjRwKGNvbnN0IF9fdTY0ICpwKQoreworCXJldHVybiAoX19mb3JjZSBfX2JlNjQpX19zd2FiNjRwKHApOworfQorc3RhdGljIGlubGluZSBfX3U2NCBfX2JlNjRfdG9fY3B1cChjb25zdCBfX2JlNjQgKnApCit7CisJcmV0dXJuIF9fc3dhYjY0cCgoX191NjQgKilwKTsKK30KK3N0YXRpYyBpbmxpbmUgX19iZTMyIF9fY3B1X3RvX2JlMzJwKGNvbnN0IF9fdTMyICpwKQoreworCXJldHVybiAoX19mb3JjZSBfX2JlMzIpX19zd2FiMzJwKHApOworfQorc3RhdGljIGlubGluZSBfX3UzMiBfX2JlMzJfdG9fY3B1cChjb25zdCBfX2JlMzIgKnApCit7CisJcmV0dXJuIF9fc3dhYjMycCgoX191MzIgKilwKTsKK30KK3N0YXRpYyBpbmxpbmUgX19iZTE2IF9fY3B1X3RvX2JlMTZwKGNvbnN0IF9fdTE2ICpwKQoreworCXJldHVybiAoX19mb3JjZSBfX2JlMTYpX19zd2FiMTZwKHApOworfQorc3RhdGljIGlubGluZSBfX3UxNiBfX2JlMTZfdG9fY3B1cChjb25zdCBfX2JlMTYgKnApCit7CisJcmV0dXJuIF9fc3dhYjE2cCgoX191MTYgKilwKTsKK30KKyNkZWZpbmUgX19jcHVfdG9fbGU2NHMoeCkgZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIF9fbGU2NF90b19jcHVzKHgpIGRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBfX2NwdV90b19sZTMycyh4KSBkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgX19sZTMyX3RvX2NwdXMoeCkgZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIF9fY3B1X3RvX2xlMTZzKHgpIGRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBfX2xlMTZfdG9fY3B1cyh4KSBkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgX19jcHVfdG9fYmU2NHMoeCkgX19zd2FiNjRzKCh4KSkKKyNkZWZpbmUgX19iZTY0X3RvX2NwdXMoeCkgX19zd2FiNjRzKCh4KSkKKyNkZWZpbmUgX19jcHVfdG9fYmUzMnMoeCkgX19zd2FiMzJzKCh4KSkKKyNkZWZpbmUgX19iZTMyX3RvX2NwdXMoeCkgX19zd2FiMzJzKCh4KSkKKyNkZWZpbmUgX19jcHVfdG9fYmUxNnMoeCkgX19zd2FiMTZzKCh4KSkKKyNkZWZpbmUgX19iZTE2X3RvX2NwdXMoeCkgX19zd2FiMTZzKCh4KSkKKworI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9nZW5lcmljLmg+CisKKyNlbmRpZiAvKiBfTElOVVhfQllURU9SREVSX0xJVFRMRV9FTkRJQU5fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ieXRlb3JkZXIvcGRwX2VuZGlhbi5oIGIvaW5jbHVkZS9saW51eC9ieXRlb3JkZXIvcGRwX2VuZGlhbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxODYzMWMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2J5dGVvcmRlci9wZHBfZW5kaWFuLmgKQEAgLTAsMCArMSw4OCBAQAorI2lmbmRlZiBfTElOVVhfQllURU9SREVSX1BEUF9FTkRJQU5fSAorI2RlZmluZSBfTElOVVhfQllURU9SREVSX1BEUF9FTkRJQU5fSAorCisvKgorICogQ291bGQgaGF2ZSBiZWVuIG5hbWVkIE5VWEktZW5kaWFuLCBidXQgd2UgdXNlIHRoZSBzYW1lIG5hbWUgYXMgaW4gZ2xpYmMuCisgKiBob3BlZnVsbHkgb25seSB0aGUgUERQIGFuZCBpdHMgZXZvbHV0aW9ucyAob2xkIFZBWGVuIGluIGNvbXBhdGliaWxpdHkgbW9kZSkKKyAqIHNob3VsZCBldmVyIHVzZSB0aGlzIGJyYWluZGVhZCBieXRlb3JkZXIuCisgKiBUaGlzIGZpbGUgKnNob3VsZCogd29yaywgYnV0IGhhcyBub3QgYmVlbiB0ZXN0ZWQuCisgKgorICogbGl0dGxlLWVuZGlhbiBpcyAxMjM0OyBiaWctZW5kaWFuIGlzIDQzMjE7IG51eGkvcGRwLWVuZGlhbiBpcyAzNDEyCisgKgorICogSSB0aG91Z2h0IHZheGVuIHdlcmUgTlVYSS1lbmRpYW4sIGJ1dCB3YXMgdG9sZCB0aGV5IHdlcmUgY29ycmVjdC1lbmRpYW4KKyAqIChsaXR0bGUtZW5kaWFuKSwgdGhvdWdoIGluZGVlZCB0aGVyZSBleGlzdGVkIE5VWEktZW5kaWFuIG1hY2hpbmVzCisgKiAoREVDIFBEUC0xMSBhbmQgb2xkIFZBWGVuIGluIGNvbXBhdGliaWxpdHkgbW9kZSkuCisgKiBUaGlzIG1ha2VzIHRoaXMgZmlsZSBhIGJpdCB1c2VsZXNzLCBidXQgYXMgYSBwcm9vZi1vZi1jb25jZXB0LgorICoKKyAqIEJ1dCB3aGF0IGRvZXMgYSBfX3U2NCBsb29rIGxpa2U6IGlzIGl0IDM0MTI3ODU2IG9yIDc4NTYzNDEyID8/PworICogSSBkb24ndCBkYXJlIGltYWdpbmUhIEhlbmNlLCBubyA2NC1iaXQgYnl0ZW9yZGVyIHN1cHBvcnQgeWV0LgorICogSG9wZWZ1bGx5LCB0aGVyZSA2NC1iaXQgcGRwLWVuZGlhbiBzdXBwb3J0IHNob3VsZG4ndCBldmVyIGJlIHJlcXVpcmVkLgorICoKKyAqLworCisjaWZuZGVmIF9fUERQX0VORElBTgorI2RlZmluZSBfX1BEUF9FTkRJQU4gMzQxMgorI2VuZGlmCisjaWZuZGVmIF9fUERQX0VORElBTl9CSVRGSUVMRAorI2RlZmluZSBfX1BEUF9FTkRJQU5fQklURklFTEQKKyNlbmRpZgorCisjaW5jbHVkZSA8bGludXgvYnl0ZW9yZGVyL3N3YWIuaD4KKyNpbmNsdWRlIDxsaW51eC9ieXRlb3JkZXIvc3dhYmIuaD4KKworI2RlZmluZSBfX2NvbnN0YW50X2h0b25sKHgpIF9fX2NvbnN0YW50X3N3YWhiMzIoKHgpKQorI2RlZmluZSBfX2NvbnN0YW50X250b2hsKHgpIF9fX2NvbnN0YW50X3N3YWhiMzIoKHgpKQorI2RlZmluZSBfX2NvbnN0YW50X2h0b25zKHgpIF9fX2NvbnN0YW50X3N3YWIxNigoeCkpCisjZGVmaW5lIF9fY29uc3RhbnRfbnRvaHMoeCkgX19fY29uc3RhbnRfc3dhYjE2KCh4KSkKKyNkZWZpbmUgX19jb25zdGFudF9jcHVfdG9fbGU2NCh4KSBJIERPTidUIEtOT1cKKyNkZWZpbmUgX19jb25zdGFudF9sZTY0X3RvX2NwdSh4KSBJIERPTidUIEtOT1cKKyNkZWZpbmUgX19jb25zdGFudF9jcHVfdG9fbGUzMih4KSBfX19jb25zdGFudF9zd2FodzMyKCh4KSkKKyNkZWZpbmUgX19jb25zdGFudF9sZTMyX3RvX2NwdSh4KSBfX19jb25zdGFudF9zd2FodzMyKCh4KSkKKyNkZWZpbmUgX19jb25zdGFudF9jcHVfdG9fbGUxNih4KSAoKF9fdTE2KSh4KQorI2RlZmluZSBfX2NvbnN0YW50X2xlMTZfdG9fY3B1KHgpICgoX191MTYpKHgpCisjZGVmaW5lIF9fY29uc3RhbnRfY3B1X3RvX2JlNjQoeCkgSSBET04nVCBLTk9XCisjZGVmaW5lIF9fY29uc3RhbnRfYmU2NF90b19jcHUoeCkgSSBET04nVCBLTk9XCisjZGVmaW5lIF9fY29uc3RhbnRfY3B1X3RvX2JlMzIoeCkgX19fY29uc3RhbnRfc3dhaGIzMigoeCkpCisjZGVmaW5lIF9fY29uc3RhbnRfYmUzMl90b19jcHUoeCkgX19fY29uc3RhbnRfc3dhaGIzMigoeCkpCisjZGVmaW5lIF9fY29uc3RhbnRfY3B1X3RvX2JlMTYoeCkgX19fY29uc3RhbnRfc3dhYjE2KCh4KSkKKyNkZWZpbmUgX19jb25zdGFudF9iZTE2X3RvX2NwdSh4KSBfX19jb25zdGFudF9zd2FiMTYoKHgpKQorI2RlZmluZSBfX2NwdV90b19sZTY0KHgpIEkgRE9OJ1QgS05PVworI2RlZmluZSBfX2xlNjRfdG9fY3B1KHgpIEkgRE9OJ1QgS05PVworI2RlZmluZSBfX2NwdV90b19sZTMyKHgpIF9fX3N3YWh3MzIoKHgpKQorI2RlZmluZSBfX2xlMzJfdG9fY3B1KHgpIF9fX3N3YWh3MzIoKHgpKQorI2RlZmluZSBfX2NwdV90b19sZTE2KHgpICgoX191MTYpKHgpCisjZGVmaW5lIF9fbGUxNl90b19jcHUoeCkgKChfX3UxNikoeCkKKyNkZWZpbmUgX19jcHVfdG9fYmU2NCh4KSBJIERPTidUIEtOT1cKKyNkZWZpbmUgX19iZTY0X3RvX2NwdSh4KSBJIERPTidUIEtOT1cKKyNkZWZpbmUgX19jcHVfdG9fYmUzMih4KSBfX3N3YWhiMzIoKHgpKQorI2RlZmluZSBfX2JlMzJfdG9fY3B1KHgpIF9fc3dhaGIzMigoeCkpCisjZGVmaW5lIF9fY3B1X3RvX2JlMTYoeCkgX19zd2FiMTYoKHgpKQorI2RlZmluZSBfX2JlMTZfdG9fY3B1KHgpIF9fc3dhYjE2KCh4KSkKKyNkZWZpbmUgX19jcHVfdG9fbGU2NHAoeCkgSSBET04nVCBLTk9XCisjZGVmaW5lIF9fbGU2NF90b19jcHVwKHgpIEkgRE9OJ1QgS05PVworI2RlZmluZSBfX2NwdV90b19sZTMycCh4KSBfX19zd2FodzMycCgoeCkpCisjZGVmaW5lIF9fbGUzMl90b19jcHVwKHgpIF9fX3N3YWh3MzJwKCh4KSkKKyNkZWZpbmUgX19jcHVfdG9fbGUxNnAoeCkgKCooX191MTYqKSh4KSkKKyNkZWZpbmUgX19sZTE2X3RvX2NwdXAoeCkgKCooX191MTYqKSh4KSkKKyNkZWZpbmUgX19jcHVfdG9fYmU2NHAoeCkgSSBET04nVCBLTk9XCisjZGVmaW5lIF9fYmU2NF90b19jcHVwKHgpIEkgRE9OJ1QgS05PVworI2RlZmluZSBfX2NwdV90b19iZTMycCh4KSBfX3N3YWhiMzJwKCh4KSkKKyNkZWZpbmUgX19iZTMyX3RvX2NwdXAoeCkgX19zd2FoYjMycCgoeCkpCisjZGVmaW5lIF9fY3B1X3RvX2JlMTZwKHgpIF9fc3dhYjE2cCgoeCkpCisjZGVmaW5lIF9fYmUxNl90b19jcHVwKHgpIF9fc3dhYjE2cCgoeCkpCisjZGVmaW5lIF9fY3B1X3RvX2xlNjRzKHgpIEkgRE9OJ1QgS05PVworI2RlZmluZSBfX2xlNjRfdG9fY3B1cyh4KSBJIERPTidUIEtOT1cKKyNkZWZpbmUgX19jcHVfdG9fbGUzMnMoeCkgX19fc3dhaHczMnMoKHgpKQorI2RlZmluZSBfX2xlMzJfdG9fY3B1cyh4KSBfX19zd2FodzMycygoeCkpCisjZGVmaW5lIF9fY3B1X3RvX2xlMTZzKHgpIGRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBfX2xlMTZfdG9fY3B1cyh4KSBkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgX19jcHVfdG9fYmU2NHMoeCkgSSBET04nVCBLTk9XCisjZGVmaW5lIF9fYmU2NF90b19jcHVzKHgpIEkgRE9OJ1QgS05PVworI2RlZmluZSBfX2NwdV90b19iZTMycyh4KSBfX3N3YWhiMzJzKCh4KSkKKyNkZWZpbmUgX19iZTMyX3RvX2NwdXMoeCkgX19zd2FoYjMycygoeCkpCisjZGVmaW5lIF9fY3B1X3RvX2JlMTZzKHgpIF9fc3dhYjE2cygoeCkpCisjZGVmaW5lIF9fYmUxNl90b19jcHVzKHgpIF9fc3dhYjE2cygoeCkpCisKKyNpbmNsdWRlIDxsaW51eC9ieXRlb3JkZXIvZ2VuZXJpYy5oPgorCisjZW5kaWYgLyogX0xJTlVYX0JZVEVPUkRFUl9QRFBfRU5ESUFOX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnl0ZW9yZGVyL3N3YWIuaCBiL2luY2x1ZGUvbGludXgvYnl0ZW9yZGVyL3N3YWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjFjYjc3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9ieXRlb3JkZXIvc3dhYi5oCkBAIC0wLDAgKzEsMTkyIEBACisjaWZuZGVmIF9MSU5VWF9CWVRFT1JERVJfU1dBQl9ICisjZGVmaW5lIF9MSU5VWF9CWVRFT1JERVJfU1dBQl9ICisKKy8qCisgKiBsaW51eC9ieXRlb3JkZXIvc3dhYi5oCisgKiBCeXRlLXN3YXBwaW5nLCBpbmRlcGVuZGVudGx5IGZyb20gQ1BVIGVuZGlhbm5lc3MKKyAqCXN3YWJYWFtwc10/KGZvbykKKyAqCisgKiBGcmFuY29pcy1SZW5lIFJpZGVhdSA8ZmFyZUB0dW5lcy5vcmc+IDE5OTcxMjA1CisgKiAgICBzZXBhcmF0ZWQgc3dhYiBmdW5jdGlvbnMgZnJvbSBjcHVfdG9fWFgsCisgKiAgICB0byBjbGVhbiB1cCBzdXBwb3J0IGZvciBiaXphcnJlLWVuZGlhbiBhcmNoaXRlY3R1cmVzLgorICoKKyAqIFNlZSBhc20taTM4Ni9ieXRlb3JkZXIuaCBhbmQgc3VjaGVzIGZvciBleGFtcGxlcyBvZiBob3cgdG8gcHJvdmlkZQorICogYXJjaGl0ZWN0dXJlLWRlcGVuZGVudCBvcHRpbWl6ZWQgdmVyc2lvbnMKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisKKy8qIGNhc3RzIGFyZSBuZWNlc3NhcnkgZm9yIGNvbnN0YW50cywgYmVjYXVzZSB3ZSBuZXZlciBrbm93IGhvdyBmb3Igc3VyZQorICogaG93IFUvVUwvVUxMIG1hcCB0byBfX3UxNiwgX191MzIsIF9fdTY0LiBBdCBsZWFzdCBub3QgaW4gYSBwb3J0YWJsZSB3YXkuCisgKi8KKyNkZWZpbmUgX19fc3dhYjE2KHgpIFwKKyh7IFwKKwlfX3UxNiBfX3ggPSAoeCk7IFwKKwkoKF9fdTE2KSggXAorCQkoKChfX3UxNikoX194KSAmIChfX3UxNikweDAwZmZVKSA8PCA4KSB8IFwKKwkJKCgoX191MTYpKF9feCkgJiAoX191MTYpMHhmZjAwVSkgPj4gOCkgKSk7IFwKK30pCisKKyNkZWZpbmUgX19fc3dhYjMyKHgpIFwKKyh7IFwKKwlfX3UzMiBfX3ggPSAoeCk7IFwKKwkoKF9fdTMyKSggXAorCQkoKChfX3UzMikoX194KSAmIChfX3UzMikweDAwMDAwMGZmVUwpIDw8IDI0KSB8IFwKKwkJKCgoX191MzIpKF9feCkgJiAoX191MzIpMHgwMDAwZmYwMFVMKSA8PCAgOCkgfCBcCisJCSgoKF9fdTMyKShfX3gpICYgKF9fdTMyKTB4MDBmZjAwMDBVTCkgPj4gIDgpIHwgXAorCQkoKChfX3UzMikoX194KSAmIChfX3UzMikweGZmMDAwMDAwVUwpID4+IDI0KSApKTsgXAorfSkKKworI2RlZmluZSBfX19zd2FiNjQoeCkgXAorKHsgXAorCV9fdTY0IF9feCA9ICh4KTsgXAorCSgoX191NjQpKCBcCisJCShfX3U2NCkoKChfX3U2NCkoX194KSAmIChfX3U2NCkweDAwMDAwMDAwMDAwMDAwZmZVTEwpIDw8IDU2KSB8IFwKKwkJKF9fdTY0KSgoKF9fdTY0KShfX3gpICYgKF9fdTY0KTB4MDAwMDAwMDAwMDAwZmYwMFVMTCkgPDwgNDApIHwgXAorCQkoX191NjQpKCgoX191NjQpKF9feCkgJiAoX191NjQpMHgwMDAwMDAwMDAwZmYwMDAwVUxMKSA8PCAyNCkgfCBcCisJCShfX3U2NCkoKChfX3U2NCkoX194KSAmIChfX3U2NCkweDAwMDAwMDAwZmYwMDAwMDBVTEwpIDw8ICA4KSB8IFwKKwkgICAgICAgIChfX3U2NCkoKChfX3U2NCkoX194KSAmIChfX3U2NCkweDAwMDAwMGZmMDAwMDAwMDBVTEwpID4+ICA4KSB8IFwKKwkJKF9fdTY0KSgoKF9fdTY0KShfX3gpICYgKF9fdTY0KTB4MDAwMGZmMDAwMDAwMDAwMFVMTCkgPj4gMjQpIHwgXAorCQkoX191NjQpKCgoX191NjQpKF9feCkgJiAoX191NjQpMHgwMGZmMDAwMDAwMDAwMDAwVUxMKSA+PiA0MCkgfCBcCisJCShfX3U2NCkoKChfX3U2NCkoX194KSAmIChfX3U2NCkweGZmMDAwMDAwMDAwMDAwMDBVTEwpID4+IDU2KSApKTsgXAorfSkKKworI2RlZmluZSBfX19jb25zdGFudF9zd2FiMTYoeCkgXAorCSgoX191MTYpKCBcCisJCSgoKF9fdTE2KSh4KSAmIChfX3UxNikweDAwZmZVKSA8PCA4KSB8IFwKKwkJKCgoX191MTYpKHgpICYgKF9fdTE2KTB4ZmYwMFUpID4+IDgpICkpCisjZGVmaW5lIF9fX2NvbnN0YW50X3N3YWIzMih4KSBcCisJKChfX3UzMikoIFwKKwkJKCgoX191MzIpKHgpICYgKF9fdTMyKTB4MDAwMDAwZmZVTCkgPDwgMjQpIHwgXAorCQkoKChfX3UzMikoeCkgJiAoX191MzIpMHgwMDAwZmYwMFVMKSA8PCAgOCkgfCBcCisJCSgoKF9fdTMyKSh4KSAmIChfX3UzMikweDAwZmYwMDAwVUwpID4+ICA4KSB8IFwKKwkJKCgoX191MzIpKHgpICYgKF9fdTMyKTB4ZmYwMDAwMDBVTCkgPj4gMjQpICkpCisjZGVmaW5lIF9fX2NvbnN0YW50X3N3YWI2NCh4KSBcCisJKChfX3U2NCkoIFwKKwkJKF9fdTY0KSgoKF9fdTY0KSh4KSAmIChfX3U2NCkweDAwMDAwMDAwMDAwMDAwZmZVTEwpIDw8IDU2KSB8IFwKKwkJKF9fdTY0KSgoKF9fdTY0KSh4KSAmIChfX3U2NCkweDAwMDAwMDAwMDAwMGZmMDBVTEwpIDw8IDQwKSB8IFwKKwkJKF9fdTY0KSgoKF9fdTY0KSh4KSAmIChfX3U2NCkweDAwMDAwMDAwMDBmZjAwMDBVTEwpIDw8IDI0KSB8IFwKKwkJKF9fdTY0KSgoKF9fdTY0KSh4KSAmIChfX3U2NCkweDAwMDAwMDAwZmYwMDAwMDBVTEwpIDw8ICA4KSB8IFwKKwkgICAgICAgIChfX3U2NCkoKChfX3U2NCkoeCkgJiAoX191NjQpMHgwMDAwMDBmZjAwMDAwMDAwVUxMKSA+PiAgOCkgfCBcCisJCShfX3U2NCkoKChfX3U2NCkoeCkgJiAoX191NjQpMHgwMDAwZmYwMDAwMDAwMDAwVUxMKSA+PiAyNCkgfCBcCisJCShfX3U2NCkoKChfX3U2NCkoeCkgJiAoX191NjQpMHgwMGZmMDAwMDAwMDAwMDAwVUxMKSA+PiA0MCkgfCBcCisJCShfX3U2NCkoKChfX3U2NCkoeCkgJiAoX191NjQpMHhmZjAwMDAwMDAwMDAwMDAwVUxMKSA+PiA1NikgKSkKKworLyoKKyAqIHByb3ZpZGUgZGVmYXVsdHMgd2hlbiBubyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgb3B0aW1pemF0aW9uIGlzIGRldGVjdGVkCisgKi8KKyNpZm5kZWYgX19hcmNoX19zd2FiMTYKKyMgIGRlZmluZSBfX2FyY2hfX3N3YWIxNih4KSAoeyBfX3UxNiBfX3RtcCA9ICh4KSA7IF9fX3N3YWIxNihfX3RtcCk7IH0pCisjZW5kaWYKKyNpZm5kZWYgX19hcmNoX19zd2FiMzIKKyMgIGRlZmluZSBfX2FyY2hfX3N3YWIzMih4KSAoeyBfX3UzMiBfX3RtcCA9ICh4KSA7IF9fX3N3YWIzMihfX3RtcCk7IH0pCisjZW5kaWYKKyNpZm5kZWYgX19hcmNoX19zd2FiNjQKKyMgIGRlZmluZSBfX2FyY2hfX3N3YWI2NCh4KSAoeyBfX3U2NCBfX3RtcCA9ICh4KSA7IF9fX3N3YWI2NChfX3RtcCk7IH0pCisjZW5kaWYKKworI2lmbmRlZiBfX2FyY2hfX3N3YWIxNnAKKyMgIGRlZmluZSBfX2FyY2hfX3N3YWIxNnAoeCkgX19hcmNoX19zd2FiMTYoKih4KSkKKyNlbmRpZgorI2lmbmRlZiBfX2FyY2hfX3N3YWIzMnAKKyMgIGRlZmluZSBfX2FyY2hfX3N3YWIzMnAoeCkgX19hcmNoX19zd2FiMzIoKih4KSkKKyNlbmRpZgorI2lmbmRlZiBfX2FyY2hfX3N3YWI2NHAKKyMgIGRlZmluZSBfX2FyY2hfX3N3YWI2NHAoeCkgX19hcmNoX19zd2FiNjQoKih4KSkKKyNlbmRpZgorCisjaWZuZGVmIF9fYXJjaF9fc3dhYjE2cworIyAgZGVmaW5lIF9fYXJjaF9fc3dhYjE2cyh4KSBkbyB7ICooeCkgPSBfX2FyY2hfX3N3YWIxNnAoKHgpKTsgfSB3aGlsZSAoMCkKKyNlbmRpZgorI2lmbmRlZiBfX2FyY2hfX3N3YWIzMnMKKyMgIGRlZmluZSBfX2FyY2hfX3N3YWIzMnMoeCkgZG8geyAqKHgpID0gX19hcmNoX19zd2FiMzJwKCh4KSk7IH0gd2hpbGUgKDApCisjZW5kaWYKKyNpZm5kZWYgX19hcmNoX19zd2FiNjRzCisjICBkZWZpbmUgX19hcmNoX19zd2FiNjRzKHgpIGRvIHsgKih4KSA9IF9fYXJjaF9fc3dhYjY0cCgoeCkpOyB9IHdoaWxlICgwKQorI2VuZGlmCisKKworLyoKKyAqIEFsbG93IGNvbnN0YW50IGZvbGRpbmcKKyAqLworI2lmIGRlZmluZWQoX19HTlVDX18pICYmIChfX0dOVUNfXyA+PSAyKSAmJiBkZWZpbmVkKF9fT1BUSU1JWkVfXykKKyMgIGRlZmluZSBfX3N3YWIxNih4KSBcCisoX19idWlsdGluX2NvbnN0YW50X3AoKF9fdTE2KSh4KSkgPyBcCisgX19fc3dhYjE2KCh4KSkgOiBcCisgX19mc3dhYjE2KCh4KSkpCisjICBkZWZpbmUgX19zd2FiMzIoeCkgXAorKF9fYnVpbHRpbl9jb25zdGFudF9wKChfX3UzMikoeCkpID8gXAorIF9fX3N3YWIzMigoeCkpIDogXAorIF9fZnN3YWIzMigoeCkpKQorIyAgZGVmaW5lIF9fc3dhYjY0KHgpIFwKKyhfX2J1aWx0aW5fY29uc3RhbnRfcCgoX191NjQpKHgpKSA/IFwKKyBfX19zd2FiNjQoKHgpKSA6IFwKKyBfX2Zzd2FiNjQoKHgpKSkKKyNlbHNlCisjICBkZWZpbmUgX19zd2FiMTYoeCkgX19mc3dhYjE2KHgpCisjICBkZWZpbmUgX19zd2FiMzIoeCkgX19mc3dhYjMyKHgpCisjICBkZWZpbmUgX19zd2FiNjQoeCkgX19mc3dhYjY0KHgpCisjZW5kaWYgLyogT1BUSU1JWkUgKi8KKworCitzdGF0aWMgX19pbmxpbmVfXyBfX2F0dHJpYnV0ZV9jb25zdF9fIF9fdTE2IF9fZnN3YWIxNihfX3UxNiB4KQoreworCXJldHVybiBfX2FyY2hfX3N3YWIxNih4KTsKK30KK3N0YXRpYyBfX2lubGluZV9fIF9fdTE2IF9fc3dhYjE2cChjb25zdCBfX3UxNiAqeCkKK3sKKwlyZXR1cm4gX19hcmNoX19zd2FiMTZwKHgpOworfQorc3RhdGljIF9faW5saW5lX18gdm9pZCBfX3N3YWIxNnMoX191MTYgKmFkZHIpCit7CisJX19hcmNoX19zd2FiMTZzKGFkZHIpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX2F0dHJpYnV0ZV9jb25zdF9fIF9fdTMyIF9fZnN3YWIzMihfX3UzMiB4KQoreworCXJldHVybiBfX2FyY2hfX3N3YWIzMih4KTsKK30KK3N0YXRpYyBfX2lubGluZV9fIF9fdTMyIF9fc3dhYjMycChjb25zdCBfX3UzMiAqeCkKK3sKKwlyZXR1cm4gX19hcmNoX19zd2FiMzJwKHgpOworfQorc3RhdGljIF9faW5saW5lX18gdm9pZCBfX3N3YWIzMnMoX191MzIgKmFkZHIpCit7CisJX19hcmNoX19zd2FiMzJzKGFkZHIpOworfQorCisjaWZkZWYgX19CWVRFT1JERVJfSEFTX1U2NF9fCitzdGF0aWMgX19pbmxpbmVfXyBfX2F0dHJpYnV0ZV9jb25zdF9fIF9fdTY0IF9fZnN3YWI2NChfX3U2NCB4KQoreworIyAgaWZkZWYgX19TV0FCXzY0X1RIUlVfMzJfXworCV9fdTMyIGggPSB4ID4+IDMyOworICAgICAgICBfX3UzMiBsID0geCAmICgoMVVMTDw8MzIpLTEpOworICAgICAgICByZXR1cm4gKCgoX191NjQpX19zd2FiMzIobCkpIDw8IDMyKSB8ICgoX191NjQpKF9fc3dhYjMyKGgpKSk7CisjICBlbHNlCisJcmV0dXJuIF9fYXJjaF9fc3dhYjY0KHgpOworIyAgZW5kaWYKK30KK3N0YXRpYyBfX2lubGluZV9fIF9fdTY0IF9fc3dhYjY0cChjb25zdCBfX3U2NCAqeCkKK3sKKwlyZXR1cm4gX19hcmNoX19zd2FiNjRwKHgpOworfQorc3RhdGljIF9faW5saW5lX18gdm9pZCBfX3N3YWI2NHMoX191NjQgKmFkZHIpCit7CisJX19hcmNoX19zd2FiNjRzKGFkZHIpOworfQorI2VuZGlmIC8qIF9fQllURU9SREVSX0hBU19VNjRfXyAqLworCisjaWYgZGVmaW5lZChfX0tFUk5FTF9fKQorI2RlZmluZSBzd2FiMTYgX19zd2FiMTYKKyNkZWZpbmUgc3dhYjMyIF9fc3dhYjMyCisjZGVmaW5lIHN3YWI2NCBfX3N3YWI2NAorI2RlZmluZSBzd2FiMTZwIF9fc3dhYjE2cAorI2RlZmluZSBzd2FiMzJwIF9fc3dhYjMycAorI2RlZmluZSBzd2FiNjRwIF9fc3dhYjY0cAorI2RlZmluZSBzd2FiMTZzIF9fc3dhYjE2cworI2RlZmluZSBzd2FiMzJzIF9fc3dhYjMycworI2RlZmluZSBzd2FiNjRzIF9fc3dhYjY0cworI2VuZGlmCisKKyNlbmRpZiAvKiBfTElOVVhfQllURU9SREVSX1NXQUJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ieXRlb3JkZXIvc3dhYmIuaCBiL2luY2x1ZGUvbGludXgvYnl0ZW9yZGVyL3N3YWJiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI4ZDlhOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvYnl0ZW9yZGVyL3N3YWJiLmgKQEAgLTAsMCArMSwxMzcgQEAKKyNpZm5kZWYgX0xJTlVYX0JZVEVPUkRFUl9TV0FCQl9ICisjZGVmaW5lIF9MSU5VWF9CWVRFT1JERVJfU1dBQkJfSAorCisvKgorICogbGludXgvYnl0ZW9yZGVyL3N3YWJiLmgKKyAqIFNXQXAgQnl0ZXMgQml6YXJyZWx5CisgKglzd2FISFhYW3BzXT8oZm9vKQorICoKKyAqIFN1cHBvcnQgZm9yIG9iTlVYSW91cyBwZHAtZW5kaWFuIGFuZCBvdGhlciBiaXphcnJlIGFyY2hpdGVjdHVyZXMuCisgKiBXaWxsIExpbnV4IGV2ZXIgcnVuIG9uIHN1Y2ggYW5jaWVudCBiZWFzdHM/IGlmIG5vdCwgdGhpcyBmaWxlCisgKiB3aWxsIGJlIGJ1dCBhIHByb2dyYW1taW5nIHBlYXJsLiBTdGlsbCwgaXQncyBhIHJlbWluZGVyIHRoYXQgd2UKKyAqIHNob3VsZG4ndCBiZSBtYWtpbmcgdG9vIG1hbnkgYXNzdW1wdGlvbnMgd2hlbiB0cnlpbmcgdG8gYmUgcG9ydGFibGUuCisgKgorICovCisKKy8qCisgKiBNZWFuaW5nIG9mIHRoZSBuYW1lcyBJIGNob3NlICh2YXhsaW51eCBwZW9wbGUgZmVlbCBmcmVlIHRvIGNvcnJlY3QgdGhlbSk6CisgKiBzd2FodzMyCXN3YXAgMTYtYml0IGhhbGYtd29yZHMgaW4gYSAzMi1iaXQgd29yZAorICogc3dhaGIzMglzd2FwIDgtYml0IGhhbHZlcyBvZiBlYWNoIDE2LWJpdCBoYWxmLXdvcmQgaW4gYSAzMi1iaXQgd29yZAorICoKKyAqIE5vIDY0LWJpdCBzdXBwb3J0IHlldC4gSSBkb24ndCBrbm93IE5VWEkgY29udmVudGlvbnMgZm9yIGxvbmcgbG9uZ3MuCisgKiBJIGd1YXJhbnRlZSBpdCB3aWxsIGJlIGEgbWVzcyB3aGVuIGl0J3MgdGhlcmUsIHRob3VnaCA6LT4KKyAqIEl0IHdpbGwgYmUgZXZlbiB3b3JzZSBpZiB0aGVyZSBhcmUgY29uZmxpY3RpbmcgNjQtYml0IGNvbnZlbnRpb25zLgorICogSG9wZWZ1bGx5LCBubyBvbmUgZXZlciB1c2VkIDY0LWJpdCBvYmplY3RzIG9uIE5VWEkgbWFjaGluZXMuCisgKgorICovCisKKyNkZWZpbmUgX19fc3dhaHczMih4KSBcCisoeyBcCisJX191MzIgX194ID0gKHgpOyBcCisJKChfX3UzMikoIFwKKwkJKCgoX191MzIpKF9feCkgJiAoX191MzIpMHgwMDAwZmZmZlVMKSA8PCAxNikgfCBcCisJCSgoKF9fdTMyKShfX3gpICYgKF9fdTMyKTB4ZmZmZjAwMDBVTCkgPj4gMTYpICkpOyBcCit9KQorI2RlZmluZSBfX19zd2FoYjMyKHgpIFwKKyh7IFwKKwlfX3UzMiBfX3ggPSAoeCk7IFwKKwkoKF9fdTMyKSggXAorCQkoKChfX3UzMikoX194KSAmIChfX3UzMikweDAwZmYwMGZmVUwpIDw8IDgpIHwgXAorCQkoKChfX3UzMikoX194KSAmIChfX3UzMikweGZmMDBmZjAwVUwpID4+IDgpICkpOyBcCit9KQorCisjZGVmaW5lIF9fX2NvbnN0YW50X3N3YWh3MzIoeCkgXAorCSgoX191MzIpKCBcCisJCSgoKF9fdTMyKSh4KSAmIChfX3UzMikweDAwMDBmZmZmVUwpIDw8IDE2KSB8IFwKKwkJKCgoX191MzIpKHgpICYgKF9fdTMyKTB4ZmZmZjAwMDBVTCkgPj4gMTYpICkpCisjZGVmaW5lIF9fX2NvbnN0YW50X3N3YWhiMzIoeCkgXAorCSgoX191MzIpKCBcCisJCSgoKF9fdTMyKSh4KSAmIChfX3UzMikweDAwZmYwMGZmVUwpIDw8IDgpIHwgXAorCQkoKChfX3UzMikoeCkgJiAoX191MzIpMHhmZjAwZmYwMFVMKSA+PiA4KSApKQorCisvKgorICogcHJvdmlkZSBkZWZhdWx0cyB3aGVuIG5vIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBvcHRpbWl6YXRpb24gaXMgZGV0ZWN0ZWQKKyAqLworI2lmbmRlZiBfX2FyY2hfX3N3YWh3MzIKKyMgIGRlZmluZSBfX2FyY2hfX3N3YWh3MzIoeCkgX19fc3dhaHczMih4KQorI2VuZGlmCisjaWZuZGVmIF9fYXJjaF9fc3dhaGIzMgorIyAgZGVmaW5lIF9fYXJjaF9fc3dhaGIzMih4KSBfX19zd2FoYjMyKHgpCisjZW5kaWYKKworI2lmbmRlZiBfX2FyY2hfX3N3YWh3MzJwCisjICBkZWZpbmUgX19hcmNoX19zd2FodzMycCh4KSBfX3N3YWh3MzIoKih4KSkKKyNlbmRpZgorI2lmbmRlZiBfX2FyY2hfX3N3YWhiMzJwCisjICBkZWZpbmUgX19hcmNoX19zd2FoYjMycCh4KSBfX3N3YWhiMzIoKih4KSkKKyNlbmRpZgorCisjaWZuZGVmIF9fYXJjaF9fc3dhaHczMnMKKyMgIGRlZmluZSBfX2FyY2hfX3N3YWh3MzJzKHgpIGRvIHsgKih4KSA9IF9fc3dhaHczMnAoKHgpKTsgfSB3aGlsZSAoMCkKKyNlbmRpZgorI2lmbmRlZiBfX2FyY2hfX3N3YWhiMzJzCisjICBkZWZpbmUgX19hcmNoX19zd2FoYjMycyh4KSBkbyB7ICooeCkgPSBfX3N3YWhiMzJwKCh4KSk7IH0gd2hpbGUgKDApCisjZW5kaWYKKworCisvKgorICogQWxsb3cgY29uc3RhbnQgZm9sZGluZworICovCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKF9fR05VQ19fID49IDIpICYmIGRlZmluZWQoX19PUFRJTUlaRV9fKQorIyAgZGVmaW5lIF9fc3dhaHczMih4KSBcCisoX19idWlsdGluX2NvbnN0YW50X3AoKF9fdTMyKSh4KSkgPyBcCisgX19fc3dhaHczMigoeCkpIDogXAorIF9fZnN3YWh3MzIoKHgpKSkKKyMgIGRlZmluZSBfX3N3YWhiMzIoeCkgXAorKF9fYnVpbHRpbl9jb25zdGFudF9wKChfX3UzMikoeCkpID8gXAorIF9fX3N3YWhiMzIoKHgpKSA6IFwKKyBfX2Zzd2FoYjMyKCh4KSkpCisjZWxzZQorIyAgZGVmaW5lIF9fc3dhaHczMih4KSBfX2Zzd2FodzMyKHgpCisjICBkZWZpbmUgX19zd2FoYjMyKHgpIF9fZnN3YWhiMzIoeCkKKyNlbmRpZiAvKiBPUFRJTUlaRSAqLworCisKK3N0YXRpYyBfX2lubGluZV9fIF9fY29uc3RfXyBfX3UzMiBfX2Zzd2FodzMyKF9fdTMyIHgpCit7CisJcmV0dXJuIF9fYXJjaF9fc3dhaHczMih4KTsKK30KK3N0YXRpYyBfX2lubGluZV9fIF9fdTMyIF9fc3dhaHczMnAoX191MzIgKngpCit7CisJcmV0dXJuIF9fYXJjaF9fc3dhaHczMnAoeCk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fc3dhaHczMnMoX191MzIgKmFkZHIpCit7CisJX19hcmNoX19zd2FodzMycyhhZGRyKTsKK30KKworCitzdGF0aWMgX19pbmxpbmVfXyBfX2NvbnN0X18gX191MzIgX19mc3dhaGIzMihfX3UzMiB4KQoreworCXJldHVybiBfX2FyY2hfX3N3YWhiMzIoeCk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyBfX3UzMiBfX3N3YWhiMzJwKF9fdTMyICp4KQoreworCXJldHVybiBfX2FyY2hfX3N3YWhiMzJwKHgpOworfQorc3RhdGljIF9faW5saW5lX18gdm9pZCBfX3N3YWhiMzJzKF9fdTMyICphZGRyKQoreworCV9fYXJjaF9fc3dhaGIzMnMoYWRkcik7Cit9CisKKyNpZmRlZiBfX0JZVEVPUkRFUl9IQVNfVTY0X18KKy8qCisgKiBOb3Qgc3VwcG9ydGVkIHlldAorICovCisjZW5kaWYgLyogX19CWVRFT1JERVJfSEFTX1U2NF9fICovCisKKyNpZiBkZWZpbmVkKF9fS0VSTkVMX18pCisjZGVmaW5lIHN3YWh3MzIgX19zd2FodzMyCisjZGVmaW5lIHN3YWhiMzIgX19zd2FoYjMyCisjZGVmaW5lIHN3YWh3MzJwIF9fc3dhaHczMnAKKyNkZWZpbmUgc3dhaGIzMnAgX19zd2FoYjMycAorI2RlZmluZSBzd2FodzMycyBfX3N3YWh3MzJzCisjZGVmaW5lIHN3YWhiMzJzIF9fc3dhaGIzMnMKKyNlbmRpZgorCisjZW5kaWYgLyogX0xJTlVYX0JZVEVPUkRFUl9TV0FCQl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NhY2hlLmggYi9pbmNsdWRlL2xpbnV4L2NhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ3NjdiOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvY2FjaGUuaApAQCAtMCwwICsxLDUxIEBACisjaWZuZGVmIF9fTElOVVhfQ0FDSEVfSAorI2RlZmluZSBfX0xJTlVYX0NBQ0hFX0gKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgorCisjaWZuZGVmIEwxX0NBQ0hFX0FMSUdOCisjZGVmaW5lIEwxX0NBQ0hFX0FMSUdOKHgpIEFMSUdOKHgsIEwxX0NBQ0hFX0JZVEVTKQorI2VuZGlmCisKKyNpZm5kZWYgU01QX0NBQ0hFX0JZVEVTCisjZGVmaW5lIFNNUF9DQUNIRV9CWVRFUyBMMV9DQUNIRV9CWVRFUworI2VuZGlmCisKKyNpZm5kZWYgX19fX2NhY2hlbGluZV9hbGlnbmVkCisjZGVmaW5lIF9fX19jYWNoZWxpbmVfYWxpZ25lZCBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyhTTVBfQ0FDSEVfQllURVMpKSkKKyNlbmRpZgorCisjaWZuZGVmIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXAKKyNpZmRlZiBDT05GSUdfU01QCisjZGVmaW5lIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXAgX19fX2NhY2hlbGluZV9hbGlnbmVkCisjZWxzZQorI2RlZmluZSBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wCisjZW5kaWYgLyogQ09ORklHX1NNUCAqLworI2VuZGlmCisKKyNpZm5kZWYgX19jYWNoZWxpbmVfYWxpZ25lZAorI2RlZmluZSBfX2NhY2hlbGluZV9hbGlnbmVkCQkJCQlcCisgIF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKFNNUF9DQUNIRV9CWVRFUyksCQkJXAorCQkgX19zZWN0aW9uX18oIi5kYXRhLmNhY2hlbGluZV9hbGlnbmVkIikpKQorI2VuZGlmIC8qIF9fY2FjaGVsaW5lX2FsaWduZWQgKi8KKworI2lmbmRlZiBfX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcAorI2lmZGVmIENPTkZJR19TTVAKKyNkZWZpbmUgX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXAgX19jYWNoZWxpbmVfYWxpZ25lZAorI2Vsc2UKKyNkZWZpbmUgX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXAKKyNlbmRpZiAvKiBDT05GSUdfU01QICovCisjZW5kaWYKKworI2lmICFkZWZpbmVkKF9fX19jYWNoZWxpbmVfbWF4YWxpZ25lZF9pbl9zbXApCisjaWYgZGVmaW5lZChDT05GSUdfU01QKQorI2RlZmluZSBfX19fY2FjaGVsaW5lX21heGFsaWduZWRfaW5fc21wIFwKKwlfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXygxIDw8IChMMV9DQUNIRV9TSElGVF9NQVgpKSkpCisjZWxzZQorI2RlZmluZSBfX19fY2FjaGVsaW5lX21heGFsaWduZWRfaW5fc21wCisjZW5kaWYKKyNlbmRpZgorCisjZW5kaWYgLyogX19MSU5VWF9DQUNIRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NhcGFiaWxpdHkuaCBiL2luY2x1ZGUvbGludXgvY2FwYWJpbGl0eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkMTM5ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2NhcGFiaWxpdHkuaApAQCAtMCwwICsxLDM2MCBAQAorLyoKKyAqIFRoaXMgaXMgPGxpbnV4L2NhcGFiaWxpdHkuaD4KKyAqCisgKiBBbmRyZXcgRy4gTW9yZ2FuIDxtb3JnYW5AdHJhbnNtZXRhLmNvbT4KKyAqIEFsZXhhbmRlciBLamVsZGFhcyA8YXN0b3JAZ3VhcmRpYW4ubm8+CisgKiB3aXRoIGhlbHAgZnJvbSBBbGVwaDEsIFJvbGFuZCBCdXJlc3VuZCBhbmQgQW5kcmV3IE1haW4uCisgKgorICogU2VlIGhlcmUgZm9yIHRoZSBsaWJjYXAgbGlicmFyeSAoIlBPU0lYIGRyYWZ0IiBjb21wbGlhbmNlKToKKyAqCisgKiBmdHA6Ly9saW51eC5rZXJuZWwub3JnL3B1Yi9saW51eC9saWJzL3NlY3VyaXR5L2xpbnV4LXByaXZzL2tlcm5lbC0yLjIvCisgKi8gCisKKyNpZm5kZWYgX0xJTlVYX0NBUEFCSUxJVFlfSAorI2RlZmluZSBfTElOVVhfQ0FQQUJJTElUWV9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisKKy8qIFVzZXItbGV2ZWwgZG8gbW9zdCBvZiB0aGUgbWFwcGluZyBiZXR3ZWVuIGtlcm5lbCBhbmQgdXNlcgorICAgY2FwYWJpbGl0aWVzIGJhc2VkIG9uIHRoZSB2ZXJzaW9uIHRhZyBnaXZlbiBieSB0aGUga2VybmVsLiBUaGUKKyAgIGtlcm5lbCBtaWdodCBiZSBzb21ld2hhdCBiYWNrd2FyZHMgY29tcGF0aWJsZSwgYnV0IGRvbid0IGJldCBvbgorICAgaXQuICovCisKKy8qIFhYWCAtIE5vdGUsIGNhcF90LCBpcyBkZWZpbmVkIGJ5IFBPU0lYIHRvIGJlIGFuICJvcGFxdWUiIHBvaW50ZXIgdG8KKyAgIGEgc2V0IG9mIHRocmVlIGNhcGFiaWxpdHkgc2V0cy4gIFRoZSB0cmFuc3Bvc2l0aW9uIG9mIDMqdGhlCisgICBmb2xsb3dpbmcgc3RydWN0dXJlIHRvIHN1Y2ggYSBjb21wb3NpdGUgaXMgYmV0dGVyIGhhbmRsZWQgaW4gYSB1c2VyCisgICBsaWJyYXJ5IHNpbmNlIHRoZSBkcmFmdCBzdGFuZGFyZCByZXF1aXJlcyB0aGUgdXNlIG9mIG1hbGxvYy9mcmVlCisgICBldGMuLiAqLworIAorI2RlZmluZSBfTElOVVhfQ0FQQUJJTElUWV9WRVJTSU9OICAweDE5OTgwMzMwCisKK3R5cGVkZWYgc3RydWN0IF9fdXNlcl9jYXBfaGVhZGVyX3N0cnVjdCB7CisJX191MzIgdmVyc2lvbjsKKwlpbnQgcGlkOworfSBfX3VzZXIgKmNhcF91c2VyX2hlYWRlcl90OworIAordHlwZWRlZiBzdHJ1Y3QgX191c2VyX2NhcF9kYXRhX3N0cnVjdCB7CisgICAgICAgIF9fdTMyIGVmZmVjdGl2ZTsKKyAgICAgICAgX191MzIgcGVybWl0dGVkOworICAgICAgICBfX3UzMiBpbmhlcml0YWJsZTsKK30gX191c2VyICpjYXBfdXNlcl9kYXRhX3Q7CisgIAorI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisKKy8qICNkZWZpbmUgU1RSSUNUX0NBUF9UX1RZUEVDSEVDS1MgKi8KKworI2lmZGVmIFNUUklDVF9DQVBfVF9UWVBFQ0hFQ0tTCisKK3R5cGVkZWYgc3RydWN0IGtlcm5lbF9jYXBfc3RydWN0IHsKKwlfX3UzMiBjYXA7Cit9IGtlcm5lbF9jYXBfdDsKKworI2Vsc2UKKwordHlwZWRlZiBfX3UzMiBrZXJuZWxfY2FwX3Q7CisKKyNlbmRpZgorICAKKyNkZWZpbmUgX1VTRVJfQ0FQX0hFQURFUl9TSVpFICAoMipzaXplb2YoX191MzIpKQorI2RlZmluZSBfS0VSTkVMX0NBUF9UX1NJWkUgICAgIChzaXplb2Yoa2VybmVsX2NhcF90KSkKKworI2VuZGlmCisKKworLyoqCisgKiogUE9TSVgtZHJhZnQgZGVmaW5lZCBjYXBhYmlsaXRpZXMuIAorICoqLworCisvKiBJbiBhIHN5c3RlbSB3aXRoIHRoZSBbX1BPU0lYX0NIT1dOX1JFU1RSSUNURURdIG9wdGlvbiBkZWZpbmVkLCB0aGlzCisgICBvdmVycmlkZXMgdGhlIHJlc3RyaWN0aW9uIG9mIGNoYW5naW5nIGZpbGUgb3duZXJzaGlwIGFuZCBncm91cAorICAgb3duZXJzaGlwLiAqLworCisjZGVmaW5lIENBUF9DSE9XTiAgICAgICAgICAgIDAKKworLyogT3ZlcnJpZGUgYWxsIERBQyBhY2Nlc3MsIGluY2x1ZGluZyBBQ0wgZXhlY3V0ZSBhY2Nlc3MgaWYKKyAgIFtfUE9TSVhfQUNMXSBpcyBkZWZpbmVkLiBFeGNsdWRpbmcgREFDIGFjY2VzcyBjb3ZlcmVkIGJ5CisgICBDQVBfTElOVVhfSU1NVVRBQkxFLiAqLworCisjZGVmaW5lIENBUF9EQUNfT1ZFUlJJREUgICAgIDEKKworLyogT3ZlcnJpZGVzIGFsbCBEQUMgcmVzdHJpY3Rpb25zIHJlZ2FyZGluZyByZWFkIGFuZCBzZWFyY2ggb24gZmlsZXMKKyAgIGFuZCBkaXJlY3RvcmllcywgaW5jbHVkaW5nIEFDTCByZXN0cmljdGlvbnMgaWYgW19QT1NJWF9BQ0xdIGlzCisgICBkZWZpbmVkLiBFeGNsdWRpbmcgREFDIGFjY2VzcyBjb3ZlcmVkIGJ5IENBUF9MSU5VWF9JTU1VVEFCTEUuICovCisKKyNkZWZpbmUgQ0FQX0RBQ19SRUFEX1NFQVJDSCAgMgorICAgIAorLyogT3ZlcnJpZGVzIGFsbCByZXN0cmljdGlvbnMgYWJvdXQgYWxsb3dlZCBvcGVyYXRpb25zIG9uIGZpbGVzLCB3aGVyZQorICAgZmlsZSBvd25lciBJRCBtdXN0IGJlIGVxdWFsIHRvIHRoZSB1c2VyIElELCBleGNlcHQgd2hlcmUgQ0FQX0ZTRVRJRAorICAgaXMgYXBwbGljYWJsZS4gSXQgZG9lc24ndCBvdmVycmlkZSBNQUMgYW5kIERBQyByZXN0cmljdGlvbnMuICovCisKKyNkZWZpbmUgQ0FQX0ZPV05FUiAgICAgICAgICAgMworCisvKiBPdmVycmlkZXMgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnMgdGhhdCB0aGUgZWZmZWN0aXZlIHVzZXIgSUQKKyAgIHNoYWxsIG1hdGNoIHRoZSBmaWxlIG93bmVyIElEIHdoZW4gc2V0dGluZyB0aGUgU19JU1VJRCBhbmQgU19JU0dJRAorICAgYml0cyBvbiB0aGF0IGZpbGU7IHRoYXQgdGhlIGVmZmVjdGl2ZSBncm91cCBJRCAob3Igb25lIG9mIHRoZQorICAgc3VwcGxlbWVudGFyeSBncm91cCBJRHMpIHNoYWxsIG1hdGNoIHRoZSBmaWxlIG93bmVyIElEIHdoZW4gc2V0dGluZworICAgdGhlIFNfSVNHSUQgYml0IG9uIHRoYXQgZmlsZTsgdGhhdCB0aGUgU19JU1VJRCBhbmQgU19JU0dJRCBiaXRzIGFyZQorICAgY2xlYXJlZCBvbiBzdWNjZXNzZnVsIHJldHVybiBmcm9tIGNob3duKDIpIChub3QgaW1wbGVtZW50ZWQpLiAqLworCisjZGVmaW5lIENBUF9GU0VUSUQgICAgICAgICAgIDQKKworLyogVXNlZCB0byBkZWNpZGUgYmV0d2VlbiBmYWxsaW5nIGJhY2sgb24gdGhlIG9sZCBzdXNlcigpIG9yIGZzdXNlcigpLiAqLworCisjZGVmaW5lIENBUF9GU19NQVNLICAgICAgICAgIDB4MWYKKworLyogT3ZlcnJpZGVzIHRoZSByZXN0cmljdGlvbiB0aGF0IHRoZSByZWFsIG9yIGVmZmVjdGl2ZSB1c2VyIElEIG9mIGEKKyAgIHByb2Nlc3Mgc2VuZGluZyBhIHNpZ25hbCBtdXN0IG1hdGNoIHRoZSByZWFsIG9yIGVmZmVjdGl2ZSB1c2VyIElECisgICBvZiB0aGUgcHJvY2VzcyByZWNlaXZpbmcgdGhlIHNpZ25hbC4gKi8KKworI2RlZmluZSBDQVBfS0lMTCAgICAgICAgICAgICA1CisKKy8qIEFsbG93cyBzZXRnaWQoMikgbWFuaXB1bGF0aW9uICovCisvKiBBbGxvd3Mgc2V0Z3JvdXBzKDIpICovCisvKiBBbGxvd3MgZm9yZ2VkIGdpZHMgb24gc29ja2V0IGNyZWRlbnRpYWxzIHBhc3NpbmcuICovCisKKyNkZWZpbmUgQ0FQX1NFVEdJRCAgICAgICAgICAgNgorCisvKiBBbGxvd3Mgc2V0KnVpZCgyKSBtYW5pcHVsYXRpb24gKGluY2x1ZGluZyBmc3VpZCkuICovCisvKiBBbGxvd3MgZm9yZ2VkIHBpZHMgb24gc29ja2V0IGNyZWRlbnRpYWxzIHBhc3NpbmcuICovCisKKyNkZWZpbmUgQ0FQX1NFVFVJRCAgICAgICAgICAgNworCisKKy8qKgorICoqIExpbnV4LXNwZWNpZmljIGNhcGFiaWxpdGllcworICoqLworCisvKiBUcmFuc2ZlciBhbnkgY2FwYWJpbGl0eSBpbiB5b3VyIHBlcm1pdHRlZCBzZXQgdG8gYW55IHBpZCwKKyAgIHJlbW92ZSBhbnkgY2FwYWJpbGl0eSBpbiB5b3VyIHBlcm1pdHRlZCBzZXQgZnJvbSBhbnkgcGlkICovCisKKyNkZWZpbmUgQ0FQX1NFVFBDQVAgICAgICAgICAgOAorCisvKiBBbGxvdyBtb2RpZmljYXRpb24gb2YgU19JTU1VVEFCTEUgYW5kIFNfQVBQRU5EIGZpbGUgYXR0cmlidXRlcyAqLworCisjZGVmaW5lIENBUF9MSU5VWF9JTU1VVEFCTEUgIDkKKworLyogQWxsb3dzIGJpbmRpbmcgdG8gVENQL1VEUCBzb2NrZXRzIGJlbG93IDEwMjQgKi8KKy8qIEFsbG93cyBiaW5kaW5nIHRvIEFUTSBWQ0lzIGJlbG93IDMyICovCisKKyNkZWZpbmUgQ0FQX05FVF9CSU5EX1NFUlZJQ0UgMTAKKworLyogQWxsb3cgYnJvYWRjYXN0aW5nLCBsaXN0ZW4gdG8gbXVsdGljYXN0ICovCisKKyNkZWZpbmUgQ0FQX05FVF9CUk9BRENBU1QgICAgMTEKKworLyogQWxsb3cgaW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24gKi8KKy8qIEFsbG93IGFkbWluaXN0cmF0aW9uIG9mIElQIGZpcmV3YWxsLCBtYXNxdWVyYWRpbmcgYW5kIGFjY291bnRpbmcgKi8KKy8qIEFsbG93IHNldHRpbmcgZGVidWcgb3B0aW9uIG9uIHNvY2tldHMgKi8KKy8qIEFsbG93IG1vZGlmaWNhdGlvbiBvZiByb3V0aW5nIHRhYmxlcyAqLworLyogQWxsb3cgc2V0dGluZyBhcmJpdHJhcnkgcHJvY2VzcyAvIHByb2Nlc3MgZ3JvdXAgb3duZXJzaGlwIG9uCisgICBzb2NrZXRzICovCisvKiBBbGxvdyBiaW5kaW5nIHRvIGFueSBhZGRyZXNzIGZvciB0cmFuc3BhcmVudCBwcm94eWluZyAqLworLyogQWxsb3cgc2V0dGluZyBUT1MgKHR5cGUgb2Ygc2VydmljZSkgKi8KKy8qIEFsbG93IHNldHRpbmcgcHJvbWlzY3VvdXMgbW9kZSAqLworLyogQWxsb3cgY2xlYXJpbmcgZHJpdmVyIHN0YXRpc3RpY3MgKi8KKy8qIEFsbG93IG11bHRpY2FzdGluZyAqLworLyogQWxsb3cgcmVhZC93cml0ZSBvZiBkZXZpY2Utc3BlY2lmaWMgcmVnaXN0ZXJzICovCisvKiBBbGxvdyBhY3RpdmF0aW9uIG9mIEFUTSBjb250cm9sIHNvY2tldHMgKi8KKworI2RlZmluZSBDQVBfTkVUX0FETUlOICAgICAgICAxMgorCisvKiBBbGxvdyB1c2Ugb2YgUkFXIHNvY2tldHMgKi8KKy8qIEFsbG93IHVzZSBvZiBQQUNLRVQgc29ja2V0cyAqLworCisjZGVmaW5lIENBUF9ORVRfUkFXICAgICAgICAgIDEzCisKKy8qIEFsbG93IGxvY2tpbmcgb2Ygc2hhcmVkIG1lbW9yeSBzZWdtZW50cyAqLworLyogQWxsb3cgbWxvY2sgYW5kIG1sb2NrYWxsICh3aGljaCBkb2Vzbid0IHJlYWxseSBoYXZlIGFueXRoaW5nIHRvIGRvCisgICB3aXRoIElQQykgKi8KKworI2RlZmluZSBDQVBfSVBDX0xPQ0sgICAgICAgICAxNAorCisvKiBPdmVycmlkZSBJUEMgb3duZXJzaGlwIGNoZWNrcyAqLworCisjZGVmaW5lIENBUF9JUENfT1dORVIgICAgICAgIDE1CisKKy8qIEluc2VydCBhbmQgcmVtb3ZlIGtlcm5lbCBtb2R1bGVzIC0gbW9kaWZ5IGtlcm5lbCB3aXRob3V0IGxpbWl0ICovCisvKiBNb2RpZnkgY2FwX2JzZXQgKi8KKyNkZWZpbmUgQ0FQX1NZU19NT0RVTEUgICAgICAgMTYKKworLyogQWxsb3cgaW9wZXJtL2lvcGwgYWNjZXNzICovCisvKiBBbGxvdyBzZW5kaW5nIFVTQiBtZXNzYWdlcyB0byBhbnkgZGV2aWNlIHZpYSAvcHJvYy9idXMvdXNiICovCisKKyNkZWZpbmUgQ0FQX1NZU19SQVdJTyAgICAgICAgMTcKKworLyogQWxsb3cgdXNlIG9mIGNocm9vdCgpICovCisKKyNkZWZpbmUgQ0FQX1NZU19DSFJPT1QgICAgICAgMTgKKworLyogQWxsb3cgcHRyYWNlKCkgb2YgYW55IHByb2Nlc3MgKi8KKworI2RlZmluZSBDQVBfU1lTX1BUUkFDRSAgICAgICAxOQorCisvKiBBbGxvdyBjb25maWd1cmF0aW9uIG9mIHByb2Nlc3MgYWNjb3VudGluZyAqLworCisjZGVmaW5lIENBUF9TWVNfUEFDQ1QgICAgICAgIDIwCisKKy8qIEFsbG93IGNvbmZpZ3VyYXRpb24gb2YgdGhlIHNlY3VyZSBhdHRlbnRpb24ga2V5ICovCisvKiBBbGxvdyBhZG1pbmlzdHJhdGlvbiBvZiB0aGUgcmFuZG9tIGRldmljZSAqLworLyogQWxsb3cgZXhhbWluYXRpb24gYW5kIGNvbmZpZ3VyYXRpb24gb2YgZGlzayBxdW90YXMgKi8KKy8qIEFsbG93IGNvbmZpZ3VyaW5nIHRoZSBrZXJuZWwncyBzeXNsb2cgKHByaW50ayBiZWhhdmlvdXIpICovCisvKiBBbGxvdyBzZXR0aW5nIHRoZSBkb21haW5uYW1lICovCisvKiBBbGxvdyBzZXR0aW5nIHRoZSBob3N0bmFtZSAqLworLyogQWxsb3cgY2FsbGluZyBiZGZsdXNoKCkgKi8KKy8qIEFsbG93IG1vdW50KCkgYW5kIHVtb3VudCgpLCBzZXR0aW5nIHVwIG5ldyBzbWIgY29ubmVjdGlvbiAqLworLyogQWxsb3cgc29tZSBhdXRvZnMgcm9vdCBpb2N0bHMgKi8KKy8qIEFsbG93IG5mc3NlcnZjdGwgKi8KKy8qIEFsbG93IFZNODZfUkVRVUVTVF9JUlEgKi8KKy8qIEFsbG93IHRvIHJlYWQvd3JpdGUgcGNpIGNvbmZpZyBvbiBhbHBoYSAqLworLyogQWxsb3cgaXJpeF9wcmN0bCBvbiBtaXBzIChzZXRzdGFja3NpemUpICovCisvKiBBbGxvdyBmbHVzaGluZyBhbGwgY2FjaGUgb24gbTY4ayAoc3lzX2NhY2hlZmx1c2gpICovCisvKiBBbGxvdyByZW1vdmluZyBzZW1hcGhvcmVzICovCisvKiBVc2VkIGluc3RlYWQgb2YgQ0FQX0NIT1dOIHRvICJjaG93biIgSVBDIG1lc3NhZ2UgcXVldWVzLCBzZW1hcGhvcmVzCisgICBhbmQgc2hhcmVkIG1lbW9yeSAqLworLyogQWxsb3cgbG9ja2luZy91bmxvY2tpbmcgb2Ygc2hhcmVkIG1lbW9yeSBzZWdtZW50ICovCisvKiBBbGxvdyB0dXJuaW5nIHN3YXAgb24vb2ZmICovCisvKiBBbGxvdyBmb3JnZWQgcGlkcyBvbiBzb2NrZXQgY3JlZGVudGlhbHMgcGFzc2luZyAqLworLyogQWxsb3cgc2V0dGluZyByZWFkYWhlYWQgYW5kIGZsdXNoaW5nIGJ1ZmZlcnMgb24gYmxvY2sgZGV2aWNlcyAqLworLyogQWxsb3cgc2V0dGluZyBnZW9tZXRyeSBpbiBmbG9wcHkgZHJpdmVyICovCisvKiBBbGxvdyB0dXJuaW5nIERNQSBvbi9vZmYgaW4geGQgZHJpdmVyICovCisvKiBBbGxvdyBhZG1pbmlzdHJhdGlvbiBvZiBtZCBkZXZpY2VzIChtb3N0bHkgdGhlIGFib3ZlLCBidXQgc29tZQorICAgZXh0cmEgaW9jdGxzKSAqLworLyogQWxsb3cgdHVuaW5nIHRoZSBpZGUgZHJpdmVyICovCisvKiBBbGxvdyBhY2Nlc3MgdG8gdGhlIG52cmFtIGRldmljZSAqLworLyogQWxsb3cgYWRtaW5pc3RyYXRpb24gb2YgYXBtX2Jpb3MsIHNlcmlhbCBhbmQgYnR0diAoVFYpIGRldmljZSAqLworLyogQWxsb3cgbWFudWZhY3R1cmVyIGNvbW1hbmRzIGluIGlzZG4gQ0FQSSBzdXBwb3J0IGRyaXZlciAqLworLyogQWxsb3cgcmVhZGluZyBub24tc3RhbmRhcmRpemVkIHBvcnRpb25zIG9mIHBjaSBjb25maWd1cmF0aW9uIHNwYWNlICovCisvKiBBbGxvdyBEREkgZGVidWcgaW9jdGwgb24gc2JwY2QgZHJpdmVyICovCisvKiBBbGxvdyBzZXR0aW5nIHVwIHNlcmlhbCBwb3J0cyAqLworLyogQWxsb3cgc2VuZGluZyByYXcgcWljLTExNyBjb21tYW5kcyAqLworLyogQWxsb3cgZW5hYmxpbmcvZGlzYWJsaW5nIHRhZ2dlZCBxdWV1aW5nIG9uIFNDU0kgY29udHJvbGxlcnMgYW5kIHNlbmRpbmcKKyAgIGFyYml0cmFyeSBTQ1NJIGNvbW1hbmRzICovCisvKiBBbGxvdyBzZXR0aW5nIGVuY3J5cHRpb24ga2V5IG9uIGxvb3BiYWNrIGZpbGVzeXN0ZW0gKi8KKworI2RlZmluZSBDQVBfU1lTX0FETUlOICAgICAgICAyMQorCisvKiBBbGxvdyB1c2Ugb2YgcmVib290KCkgKi8KKworI2RlZmluZSBDQVBfU1lTX0JPT1QgICAgICAgICAyMgorCisvKiBBbGxvdyByYWlzaW5nIHByaW9yaXR5IGFuZCBzZXR0aW5nIHByaW9yaXR5IG9uIG90aGVyIChkaWZmZXJlbnQKKyAgIFVJRCkgcHJvY2Vzc2VzICovCisvKiBBbGxvdyB1c2Ugb2YgRklGTyBhbmQgcm91bmQtcm9iaW4gKHJlYWx0aW1lKSBzY2hlZHVsaW5nIG9uIG93bgorICAgcHJvY2Vzc2VzIGFuZCBzZXR0aW5nIHRoZSBzY2hlZHVsaW5nIGFsZ29yaXRobSB1c2VkIGJ5IGFub3RoZXIKKyAgIHByb2Nlc3MuICovCisvKiBBbGxvdyBzZXR0aW5nIGNwdSBhZmZpbml0eSBvbiBvdGhlciBwcm9jZXNzZXMgKi8KKworI2RlZmluZSBDQVBfU1lTX05JQ0UgICAgICAgICAyMworCisvKiBPdmVycmlkZSByZXNvdXJjZSBsaW1pdHMuIFNldCByZXNvdXJjZSBsaW1pdHMuICovCisvKiBPdmVycmlkZSBxdW90YSBsaW1pdHMuICovCisvKiBPdmVycmlkZSByZXNlcnZlZCBzcGFjZSBvbiBleHQyIGZpbGVzeXN0ZW0gKi8KKy8qIE1vZGlmeSBkYXRhIGpvdXJuYWxpbmcgbW9kZSBvbiBleHQzIGZpbGVzeXN0ZW0gKHVzZXMgam91cm5hbGluZworICAgcmVzb3VyY2VzKSAqLworLyogTk9URTogZXh0MiBob25vcnMgZnN1aWQgd2hlbiBjaGVja2luZyBmb3IgcmVzb3VyY2Ugb3ZlcnJpZGVzLCBzbyAKKyAgIHlvdSBjYW4gb3ZlcnJpZGUgdXNpbmcgZnN1aWQgdG9vICovCisvKiBPdmVycmlkZSBzaXplIHJlc3RyaWN0aW9ucyBvbiBJUEMgbWVzc2FnZSBxdWV1ZXMgKi8KKy8qIEFsbG93IG1vcmUgdGhhbiA2NGh6IGludGVycnVwdHMgZnJvbSB0aGUgcmVhbC10aW1lIGNsb2NrICovCisvKiBPdmVycmlkZSBtYXggbnVtYmVyIG9mIGNvbnNvbGVzIG9uIGNvbnNvbGUgYWxsb2NhdGlvbiAqLworLyogT3ZlcnJpZGUgbWF4IG51bWJlciBvZiBrZXltYXBzICovCisKKyNkZWZpbmUgQ0FQX1NZU19SRVNPVVJDRSAgICAgMjQKKworLyogQWxsb3cgbWFuaXB1bGF0aW9uIG9mIHN5c3RlbSBjbG9jayAqLworLyogQWxsb3cgaXJpeF9zdGltZSBvbiBtaXBzICovCisvKiBBbGxvdyBzZXR0aW5nIHRoZSByZWFsLXRpbWUgY2xvY2sgKi8KKworI2RlZmluZSBDQVBfU1lTX1RJTUUgICAgICAgICAyNQorCisvKiBBbGxvdyBjb25maWd1cmF0aW9uIG9mIHR0eSBkZXZpY2VzICovCisvKiBBbGxvdyB2aGFuZ3VwKCkgb2YgdHR5ICovCisKKyNkZWZpbmUgQ0FQX1NZU19UVFlfQ09ORklHICAgMjYKKworLyogQWxsb3cgdGhlIHByaXZpbGVnZWQgYXNwZWN0cyBvZiBta25vZCgpICovCisKKyNkZWZpbmUgQ0FQX01LTk9EICAgICAgICAgICAgMjcKKworLyogQWxsb3cgdGFraW5nIG9mIGxlYXNlcyBvbiBmaWxlcyAqLworCisjZGVmaW5lIENBUF9MRUFTRSAgICAgICAgICAgIDI4CisKKyNkZWZpbmUgQ0FQX0FVRElUX1dSSVRFICAgICAgMjkKKworI2RlZmluZSBDQVBfQVVESVRfQ09OVFJPTCAgICAzMAorCisjaWZkZWYgX19LRVJORUxfXworLyogCisgKiBCb3VuZGluZyBzZXQKKyAqLworZXh0ZXJuIGtlcm5lbF9jYXBfdCBjYXBfYnNldDsKKworLyoKKyAqIEludGVybmFsIGtlcm5lbCBmdW5jdGlvbnMgb25seQorICovCisgCisjaWZkZWYgU1RSSUNUX0NBUF9UX1RZUEVDSEVDS1MKKworI2RlZmluZSB0b19jYXBfdCh4KSB7IHggfQorI2RlZmluZSBjYXBfdCh4KSAoeCkuY2FwCisKKyNlbHNlCisKKyNkZWZpbmUgdG9fY2FwX3QoeCkgKHgpCisjZGVmaW5lIGNhcF90KHgpICh4KQorCisjZW5kaWYKKworI2RlZmluZSBDQVBfRU1QVFlfU0VUICAgICAgIHRvX2NhcF90KDApCisjZGVmaW5lIENBUF9GVUxMX1NFVCAgICAgICAgdG9fY2FwX3QofjApCisjZGVmaW5lIENBUF9JTklUX0VGRl9TRVQgICAgdG9fY2FwX3QofjAgJiB+Q0FQX1RPX01BU0soQ0FQX1NFVFBDQVApKQorI2RlZmluZSBDQVBfSU5JVF9JTkhfU0VUICAgIHRvX2NhcF90KDApCisKKyNkZWZpbmUgQ0FQX1RPX01BU0soeCkgKDEgPDwgKHgpKQorI2RlZmluZSBjYXBfcmFpc2UoYywgZmxhZykgICAoY2FwX3QoYykgfD0gIENBUF9UT19NQVNLKGZsYWcpKQorI2RlZmluZSBjYXBfbG93ZXIoYywgZmxhZykgICAoY2FwX3QoYykgJj0gfkNBUF9UT19NQVNLKGZsYWcpKQorI2RlZmluZSBjYXBfcmFpc2VkKGMsIGZsYWcpICAoY2FwX3QoYykgJiBDQVBfVE9fTUFTSyhmbGFnKSkKKworc3RhdGljIGlubGluZSBrZXJuZWxfY2FwX3QgY2FwX2NvbWJpbmUoa2VybmVsX2NhcF90IGEsIGtlcm5lbF9jYXBfdCBiKQoreworICAgICBrZXJuZWxfY2FwX3QgZGVzdDsKKyAgICAgY2FwX3QoZGVzdCkgPSBjYXBfdChhKSB8IGNhcF90KGIpOworICAgICByZXR1cm4gZGVzdDsKK30KKworc3RhdGljIGlubGluZSBrZXJuZWxfY2FwX3QgY2FwX2ludGVyc2VjdChrZXJuZWxfY2FwX3QgYSwga2VybmVsX2NhcF90IGIpCit7CisgICAgIGtlcm5lbF9jYXBfdCBkZXN0OworICAgICBjYXBfdChkZXN0KSA9IGNhcF90KGEpICYgY2FwX3QoYik7CisgICAgIHJldHVybiBkZXN0OworfQorCitzdGF0aWMgaW5saW5lIGtlcm5lbF9jYXBfdCBjYXBfZHJvcChrZXJuZWxfY2FwX3QgYSwga2VybmVsX2NhcF90IGRyb3ApCit7CisgICAgIGtlcm5lbF9jYXBfdCBkZXN0OworICAgICBjYXBfdChkZXN0KSA9IGNhcF90KGEpICYgfmNhcF90KGRyb3ApOworICAgICByZXR1cm4gZGVzdDsKK30KKworc3RhdGljIGlubGluZSBrZXJuZWxfY2FwX3QgY2FwX2ludmVydChrZXJuZWxfY2FwX3QgYykKK3sKKyAgICAga2VybmVsX2NhcF90IGRlc3Q7CisgICAgIGNhcF90KGRlc3QpID0gfmNhcF90KGMpOworICAgICByZXR1cm4gZGVzdDsKK30KKworI2RlZmluZSBjYXBfaXNjbGVhcihjKSAgICAgICAoIWNhcF90KGMpKQorI2RlZmluZSBjYXBfaXNzdWJzZXQoYSxzZXQpICAoIShjYXBfdChhKSAmIH5jYXBfdChzZXQpKSkKKworI2RlZmluZSBjYXBfY2xlYXIoYykgICAgICAgICBkbyB7IGNhcF90KGMpID0gIDA7IH0gd2hpbGUoMCkKKyNkZWZpbmUgY2FwX3NldF9mdWxsKGMpICAgICAgZG8geyBjYXBfdChjKSA9IH4wOyB9IHdoaWxlKDApCisjZGVmaW5lIGNhcF9tYXNrKGMsbWFzaykgICAgIGRvIHsgY2FwX3QoYykgJj0gY2FwX3QobWFzayk7IH0gd2hpbGUoMCkKKworI2RlZmluZSBjYXBfaXNfZnNfY2FwKGMpICAgICAoQ0FQX1RPX01BU0soYykgJiBDQVBfRlNfTUFTSykKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qICFfTElOVVhfQ0FQQUJJTElUWV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NhcGkuaCBiL2luY2x1ZGUvbGludXgvY2FwaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkZWJhYWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2NhcGkuaApAQCAtMCwwICsxLDEzMyBAQAorLyogJElkOiBjYXBpLmgsdiAxLjQuNi4xIDIwMDEvMDkvMjMgMjI6MjU6MDUga2FpIEV4cCAkCisgKiAKKyAqIENBUEkgMi4wIEludGVyZmFjZSBmb3IgTGludXgKKyAqIAorICogQ29weXJpZ2h0IDE5OTcgYnkgQ2Fyc3RlbiBQYWV0aCAoY2FsbGVAY2FsbGUuaW4tYmVybGluLmRlKQorICogCisgKiBUaGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHRlcm1zCisgKiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgorICoKKyAqLworCisjaWZuZGVmIF9fTElOVVhfQ0FQSV9IX18KKyNkZWZpbmUgX19MSU5VWF9DQVBJX0hfXworCisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKyNpZm5kZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbGNhcGkuaD4KKyNlbmRpZgorCisvKgorICogQ0FQSV9SRUdJU1RFUgorICovCisKK3R5cGVkZWYgc3RydWN0IGNhcGlfcmVnaXN0ZXJfcGFyYW1zIHsJLyogQ0FQSV9SRUdJU1RFUiAqLworCV9fdTMyIGxldmVsM2NudDsJLyogTm8uIG9mIHNpbXVsYXRuZW91cyB1c2VyIGRhdGEgY29ubmVjdGlvbnMgKi8KKwlfX3UzMiBkYXRhYmxrY250OwkvKiBOby4gb2YgYnVmZmVyZWQgZGF0YSBtZXNzYWdlcyAqLworCV9fdTMyIGRhdGFibGtsZW47CS8qIFNpemUgb2YgYnVmZmVyZWQgZGF0YSBtZXNzYWdlcyAqLworfSBjYXBpX3JlZ2lzdGVyX3BhcmFtczsKKworI2RlZmluZQlDQVBJX1JFR0lTVEVSCV9JT1coJ0MnLDB4MDEsc3RydWN0IGNhcGlfcmVnaXN0ZXJfcGFyYW1zKQorCisvKgorICogQ0FQSV9HRVRfTUFOVUZBQ1RVUkVSCisgKi8KKworI2RlZmluZSBDQVBJX01BTlVGQUNUVVJFUl9MRU4JCTY0CisKKyNkZWZpbmUJQ0FQSV9HRVRfTUFOVUZBQ1RVUkVSCV9JT1dSKCdDJywweDA2LGludCkJLyogYnJva2VuOiB3YW50ZWQgc2l6ZSA2NCAoQ0FQSV9NQU5VRkFDVFVSRVJfTEVOKSAqLworCisvKgorICogQ0FQSV9HRVRfVkVSU0lPTgorICovCisKK3R5cGVkZWYgc3RydWN0IGNhcGlfdmVyc2lvbiB7CisJX191MzIgbWFqb3J2ZXJzaW9uOworCV9fdTMyIG1pbm9ydmVyc2lvbjsKKwlfX3UzMiBtYWpvcm1hbnV2ZXJzaW9uOworCV9fdTMyIG1pbm9ybWFudXZlcnNpb247Cit9IGNhcGlfdmVyc2lvbjsKKworI2RlZmluZSBDQVBJX0dFVF9WRVJTSU9OCV9JT1dSKCdDJywweDA3LHN0cnVjdCBjYXBpX3ZlcnNpb24pCisKKy8qCisgKiBDQVBJX0dFVF9TRVJJQUwKKyAqLworCisjZGVmaW5lIENBUElfU0VSSUFMX0xFTgkJOAorI2RlZmluZSBDQVBJX0dFVF9TRVJJQUwJCV9JT1dSKCdDJywweDA4LGludCkJLyogYnJva2VuOiB3YW50ZWQgc2l6ZSA4IChDQVBJX1NFUklBTF9MRU4pICovCisKKy8qCisgKiBDQVBJX0dFVF9QUk9GSUxFCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgY2FwaV9wcm9maWxlIHsKKwlfX3UxNiBuY29udHJvbGxlcjsJLyogbnVtYmVyIG9mIGluc3RhbGxlZCBjb250cm9sbGVyICovCisJX191MTYgbmJjaGFubmVsOwkvKiBudW1iZXIgb2YgQi1DaGFubmVscyAqLworCV9fdTMyIGdvcHRpb25zOwkJLyogZ2xvYmFsIG9wdGlvbnMgKi8KKwlfX3UzMiBzdXBwb3J0MTsJCS8qIEIxIHByb3RvY29scyBzdXBwb3J0ICovCisJX191MzIgc3VwcG9ydDI7CQkvKiBCMiBwcm90b2NvbHMgc3VwcG9ydCAqLworCV9fdTMyIHN1cHBvcnQzOwkJLyogQjMgcHJvdG9jb2xzIHN1cHBvcnQgKi8KKwlfX3UzMiByZXNlcnZlZFs2XTsJLyogcmVzZXJ2ZWQgKi8KKwlfX3UzMiBtYW51WzVdOwkJLyogbWFudWZhY3R1cmVyIHNwZWNpZmljIGluZm9ybWF0aW9uICovCit9IGNhcGlfcHJvZmlsZTsKKworI2RlZmluZSBDQVBJX0dFVF9QUk9GSUxFCV9JT1dSKCdDJywweDA5LHN0cnVjdCBjYXBpX3Byb2ZpbGUpCisKK3R5cGVkZWYgc3RydWN0IGNhcGlfbWFudWZhY3R1cmVyX2NtZCB7CisJdW5zaWduZWQgbG9uZyBjbWQ7CisJdm9pZCBfX3VzZXIgKmRhdGE7Cit9IGNhcGlfbWFudWZhY3R1cmVyX2NtZDsKKworLyoKKyAqIENBUElfTUFOVUZBQ1RVUkVSX0NNRAorICovCisKKyNkZWZpbmUgQ0FQSV9NQU5VRkFDVFVSRVJfQ01ECV9JT1dSKCdDJywweDIwLCBzdHJ1Y3QgY2FwaV9tYW51ZmFjdHVyZXJfY21kKQorCisvKgorICogQ0FQSV9HRVRfRVJSQ09ERQorICogY2FwaSBlcnJjb2RlIGlzIHNldCwgKiBpZiByZWFkLCB3cml0ZSwgb3IgaW9jdGwgcmV0dXJucyBFSU8sCisgKiBpb2N0bCByZXR1cm5zIGVycmNvZGUgZGlyZWN0bHksIGFuZCBpbiBhcmcsIGlmICE9IDAKKyAqLworCisjZGVmaW5lIENBUElfR0VUX0VSUkNPREUJX0lPUignQycsMHgyMSwgX191MTYpCisKKy8qCisgKiBDQVBJX0lOU1RBTExFRAorICovCisjZGVmaW5lIENBUElfSU5TVEFMTEVECQlfSU9SKCdDJywweDIyLCBfX3UxNikKKworCisvKgorICogbWVtYmVyIGNvbnRyIGlzIGlucHV0IGZvcgorICogQ0FQSV9HRVRfTUFOVUZBQ1RVUkVSLCBDQVBJX1ZFUlNJT04sIENBUElfR0VUX1NFUklBTAorICogYW5kIENBUElfR0VUX1BST0ZJTEUKKyAqLwordHlwZWRlZiB1bmlvbiBjYXBpX2lvY3RsX3N0cnVjdCB7CisJX191MzIgY29udHI7CisJY2FwaV9yZWdpc3Rlcl9wYXJhbXMgcnBhcmFtczsKKwlfX3U4IG1hbnVmYWN0dXJlcltDQVBJX01BTlVGQUNUVVJFUl9MRU5dOworCWNhcGlfdmVyc2lvbiB2ZXJzaW9uOworCV9fdTggc2VyaWFsW0NBUElfU0VSSUFMX0xFTl07CisJY2FwaV9wcm9maWxlIHByb2ZpbGU7CisJY2FwaV9tYW51ZmFjdHVyZXJfY21kIGNtZDsKKwlfX3UxNiBlcnJjb2RlOworfSBjYXBpX2lvY3RsX3N0cnVjdDsKKworLyoKKyAqIE1pZGRsZXdhcmUgZXh0ZW5zaW9uCisgKi8KKworI2RlZmluZSBDQVBJRkxBR19ISUdISkFDS0lORwkweDAwMDEKKworI2RlZmluZSBDQVBJX0dFVF9GTEFHUwkJX0lPUignQycsMHgyMywgdW5zaWduZWQpCisjZGVmaW5lIENBUElfU0VUX0ZMQUdTCQlfSU9SKCdDJywweDI0LCB1bnNpZ25lZCkKKyNkZWZpbmUgQ0FQSV9DTFJfRkxBR1MJCV9JT1IoJ0MnLDB4MjUsIHVuc2lnbmVkKQorCisjZGVmaW5lIENBUElfTkNDSV9PUEVOQ09VTlQJX0lPUignQycsMHgyNiwgdW5zaWduZWQpCisKKyNkZWZpbmUgQ0FQSV9OQ0NJX0dFVFVOSVQJX0lPUignQycsMHgyNywgdW5zaWduZWQpCisKKyNlbmRpZgkJCQkvKiBfX0xJTlVYX0NBUElfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NjaXNzX2lvY3RsLmggYi9pbmNsdWRlL2xpbnV4L2NjaXNzX2lvY3RsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWUwYzZlOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvY2Npc3NfaW9jdGwuaApAQCAtMCwwICsxLDI0MCBAQAorI2lmbmRlZiBDQ0lTU19JT0NUTEgKKyNkZWZpbmUgQ0NJU1NfSU9DVExICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisKKyNkZWZpbmUgQ0NJU1NfSU9DX01BR0lDICdCJworCisKK3R5cGVkZWYgc3RydWN0IF9jY2lzc19wY2lfaW5mb19zdHJ1Y3QKK3sKKwl1bnNpZ25lZCBjaGFyIAlidXM7CisJdW5zaWduZWQgY2hhciAJZGV2X2ZuOworCV9fdTMyIAkJYm9hcmRfaWQ7Cit9IGNjaXNzX3BjaV9pbmZvX3N0cnVjdDsgCisKK3R5cGVkZWYgc3RydWN0IF9jY2lzc19jb2FsaW50X3N0cnVjdAoreworCV9fdTMyICBkZWxheTsKKwlfX3UzMiAgY291bnQ7Cit9IGNjaXNzX2NvYWxpbnRfc3RydWN0OworCit0eXBlZGVmIGNoYXIgTm9kZU5hbWVfdHlwZVsxNl07CisKK3R5cGVkZWYgX191MzIgSGVhcnRiZWF0X3R5cGU7CisKKyNkZWZpbmUgQ0lTU19QQVJTQ1NJVTIgCTB4MDAwMQorI2RlZmluZSBDSVNTX1BBUkNTQ0lVMyAJMHgwMDAyCisjZGVmaW5lIENJU1NfRklCUkUxRwkweDAxMDAKKyNkZWZpbmUgQ0lTU19GSUJSRTJHCTB4MDIwMAordHlwZWRlZiBfX3UzMiBCdXNUeXBlc190eXBlOworCit0eXBlZGVmIGNoYXIgRmlybXdhcmVWZXJfdHlwZVs0XTsKK3R5cGVkZWYgX191MzIgRHJpdmVyVmVyX3R5cGU7CisKKyNkZWZpbmUgTUFYX0tNQUxMT0NfU0laRSAxMjgwMDAKKworI2lmbmRlZiBDQ0lTU19DTURfSAorLy8gVGhpcyBkZWZpbmVzIGFyZSBkdXBsaWNhdGVkIGluIGNjaXNzX2NtZC5oIGluIHRoZSBkcml2ZXIgZGlyZWN0b3J5IAorCisvL2dlbmVyYWwgYm91bmRhcnkgZGVmaW50aW9ucworI2RlZmluZSBTRU5TRUlORk9CWVRFUyAgICAgICAgICAzMi8vbm90ZSB0aGF0IHRoaXMgdmFsdWUgbWF5IHZhcnkgYmV0d2VlbiBob3N0IGltcGxlbWVudGF0aW9ucworCisvL0NvbW1hbmQgU3RhdHVzIHZhbHVlCisjZGVmaW5lIENNRF9TVUNDRVNTICAgICAgICAgICAgIDB4MDAwMAorI2RlZmluZSBDTURfVEFSR0VUX1NUQVRVUyAgICAgICAweDAwMDEKKyNkZWZpbmUgQ01EX0RBVEFfVU5ERVJSVU4gICAgICAgMHgwMDAyCisjZGVmaW5lIENNRF9EQVRBX09WRVJSVU4gICAgICAgIDB4MDAwMworI2RlZmluZSBDTURfSU5WQUxJRCAgICAgICAgICAgICAweDAwMDQKKyNkZWZpbmUgQ01EX1BST1RPQ09MX0VSUiAgICAgICAgMHgwMDA1CisjZGVmaW5lIENNRF9IQVJEV0FSRV9FUlIgICAgICAgIDB4MDAwNgorI2RlZmluZSBDTURfQ09OTkVDVElPTl9MT1NUICAgICAweDAwMDcKKyNkZWZpbmUgQ01EX0FCT1JURUQgICAgICAgICAgICAgMHgwMDA4CisjZGVmaW5lIENNRF9BQk9SVF9GQUlMRUQgICAgICAgIDB4MDAwOQorI2RlZmluZSBDTURfVU5TT0xJQ0lURURfQUJPUlQgICAweDAwMEEKKyNkZWZpbmUgQ01EX1RJTUVPVVQgICAgICAgICAgICAgMHgwMDBCCisjZGVmaW5lIENNRF9VTkFCT1JUQUJMRQkJMHgwMDBDCisKKy8vdHJhbnNmZXIgZGlyZWN0aW9uCisjZGVmaW5lIFhGRVJfTk9ORSAgICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgWEZFUl9XUklURSAgICAgICAgICAgICAgMHgwMQorI2RlZmluZSBYRkVSX1JFQUQgICAgICAgICAgICAgICAweDAyCisjZGVmaW5lIFhGRVJfUlNWRCAgICAgICAgICAgICAgIDB4MDMKKworLy90YXNrIGF0dHJpYnV0ZQorI2RlZmluZSBBVFRSX1VOVEFHR0VEICAgICAgICAgICAweDAwCisjZGVmaW5lIEFUVFJfU0lNUExFICAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgQVRUUl9IRUFET0ZRVUVVRSAgICAgICAgMHgwNQorI2RlZmluZSBBVFRSX09SREVSRUQgICAgICAgICAgICAweDA2CisjZGVmaW5lIEFUVFJfQUNBICAgICAgICAgICAgICAgIDB4MDcKKworLy9jZGIgdHlwZQorI2RlZmluZSBUWVBFX0NNRAkJCQkweDAwCisjZGVmaW5lIFRZUEVfTVNHCQkJCTB4MDEKKworLy8gVHlwZSBkZWZzIHVzZWQgaW4gdGhlIGZvbGxvd2luZyBzdHJ1Y3RzCisjZGVmaW5lIEJZVEUgX191OAorI2RlZmluZSBXT1JEIF9fdTE2CisjZGVmaW5lIEhXT1JEIF9fdTE2CisjZGVmaW5lIERXT1JEIF9fdTMyCisKKyNkZWZpbmUgQ0lTU19NQVhfTFVOCTE2CQorCisjZGVmaW5lIExFVkVMMkxVTiAgIDEgICAvLyBpbmRleCBpbnRvIFRhcmdldCh4KSBzdHJ1Y3R1cmUsIGR1ZSB0byBieXRlIHN3YXBwaW5nCisjZGVmaW5lIExFVkVMM0xVTiAgIDAKKworI3ByYWdtYSBwYWNrKDEpCisKKy8vQ29tbWFuZCBMaXN0IFN0cnVjdHVyZQordHlwZWRlZiB1bmlvbiBfU0NTSTNBZGRyX3N0cnVjdCB7CisgICBzdHJ1Y3QgeworICAgIEJZVEUgRGV2OworICAgIEJZVEUgQnVzOjY7CisgICAgQllURSBNb2RlOjI7ICAgICAgICAvLyBiMDAKKyAgfSBQZXJpcERldjsKKyAgIHN0cnVjdCB7CisgICAgQllURSBEZXZMU0I7CisgICAgQllURSBEZXZNU0I6NjsKKyAgICBCWVRFIE1vZGU6MjsgICAgICAgIC8vIGIwMQorICB9IExvZ0RldjsKKyAgIHN0cnVjdCB7CisgICAgQllURSBEZXY6NTsKKyAgICBCWVRFIEJ1czozOworICAgIEJZVEUgVGFyZzo2OworICAgIEJZVEUgTW9kZToyOyAgICAgICAgLy8gYjEwCisgIH0gTG9nVW5pdDsKK30gU0NTSTNBZGRyX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgX1BoeXNEZXZBZGRyX3N0cnVjdCB7CisgIERXT1JEICAgICAgICAgICAgIFRhcmdldElkOjI0OworICBEV09SRCAgICAgICAgICAgICBCdXM6NjsKKyAgRFdPUkQgICAgICAgICAgICAgTW9kZToyOworICBTQ1NJM0FkZHJfc3RydWN0ICBUYXJnZXRbMl07IC8vMiBsZXZlbCB0YXJnZXQgZGV2aWNlIGFkZHIKK30gUGh5c0RldkFkZHJfc3RydWN0OworICAKK3R5cGVkZWYgc3RydWN0IF9Mb2dEZXZBZGRyX3N0cnVjdCB7CisgIERXT1JEICAgICAgICAgICAgVm9sSWQ6MzA7CisgIERXT1JEICAgICAgICAgICAgTW9kZToyOworICBCWVRFICAgICAgICAgICAgIHJlc2VydmVkWzRdOworfSBMb2dEZXZBZGRyX3N0cnVjdDsKKwordHlwZWRlZiB1bmlvbiBfTFVOQWRkcl9zdHJ1Y3QgeworICBCWVRFICAgICAgICAgICAgICAgTHVuQWRkckJ5dGVzWzhdOworICBTQ1NJM0FkZHJfc3RydWN0ICAgU0NTSTNMdW5bNF07CisgIFBoeXNEZXZBZGRyX3N0cnVjdCBQaHlzRGV2OworICBMb2dEZXZBZGRyX3N0cnVjdCAgTG9nRGV2OworfSBMVU5BZGRyX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgX1JlcXVlc3RCbG9ja19zdHJ1Y3QgeworICBCWVRFICAgQ0RCTGVuOworICBzdHJ1Y3QgeworICAgIEJZVEUgVHlwZTozOworICAgIEJZVEUgQXR0cmlidXRlOjM7CisgICAgQllURSBEaXJlY3Rpb246MjsKKyAgfSBUeXBlOworICBIV09SRCAgVGltZW91dDsKKyAgQllURSAgIENEQlsxNl07Cit9IFJlcXVlc3RCbG9ja19zdHJ1Y3Q7CisKK3R5cGVkZWYgdW5pb24gX01vcmVFcnJJbmZvX3N0cnVjdHsKKyAgc3RydWN0IHsKKyAgICBCWVRFICBSZXNlcnZlZFszXTsKKyAgICBCWVRFICBUeXBlOworICAgIERXT1JEIEVycm9ySW5mbzsKKyAgfUNvbW1vbl9JbmZvOworICBzdHJ1Y3R7CisgICAgQllURSAgUmVzZXJ2ZWRbMl07CisgICAgQllURSAgb2ZmZW5zZV9zaXplOy8vc2l6ZSBvZiBvZmZlbmRpbmcgZW50cnkKKyAgICBCWVRFICBvZmZlbnNlX251bTsgLy9ieXRlICMgb2Ygb2ZmZW5zZSAwLWJhc2UKKyAgICBEV09SRCBvZmZlbnNlX3ZhbHVlOworICB9SW52YWxpZF9DbWQ7Cit9TW9yZUVyckluZm9fc3RydWN0OwordHlwZWRlZiBzdHJ1Y3QgX0Vycm9ySW5mb19zdHJ1Y3QgeworICBCWVRFICAgICAgICAgICAgICAgU2NzaVN0YXR1czsKKyAgQllURSAgICAgICAgICAgICAgIFNlbnNlTGVuOworICBIV09SRCAgICAgICAgICAgICAgQ29tbWFuZFN0YXR1czsKKyAgRFdPUkQgICAgICAgICAgICAgIFJlc2lkdWFsQ250OworICBNb3JlRXJySW5mb19zdHJ1Y3QgTW9yZUVyckluZm87CisgIEJZVEUgICAgICAgICAgICAgICBTZW5zZUluZm9bU0VOU0VJTkZPQllURVNdOworfSBFcnJvckluZm9fc3RydWN0OworCisjcHJhZ21hIHBhY2soKQorI2VuZGlmIC8qIENDSVNTX0NNRF9IICovIAorCit0eXBlZGVmIHN0cnVjdCBfSU9DVExfQ29tbWFuZF9zdHJ1Y3QgeworICBMVU5BZGRyX3N0cnVjdAkgICBMVU5faW5mbzsKKyAgUmVxdWVzdEJsb2NrX3N0cnVjdCAgICAgIFJlcXVlc3Q7CisgIEVycm9ySW5mb19zdHJ1Y3QgIAkgICBlcnJvcl9pbmZvOyAKKyAgV09SRAkJCSAgIGJ1Zl9zaXplOyAgLyogc2l6ZSBpbiBieXRlcyBvZiB0aGUgYnVmICovCisgIEJZVEUJCQkgICBfX3VzZXIgKmJ1ZjsKK30gSU9DVExfQ29tbWFuZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IF9CSUdfSU9DVExfQ29tbWFuZF9zdHJ1Y3QgeworICBMVU5BZGRyX3N0cnVjdAkgICBMVU5faW5mbzsKKyAgUmVxdWVzdEJsb2NrX3N0cnVjdCAgICAgIFJlcXVlc3Q7CisgIEVycm9ySW5mb19zdHJ1Y3QgIAkgICBlcnJvcl9pbmZvOworICBEV09SRAkJCSAgIG1hbGxvY19zaXplOyAvKiA8IE1BWF9LTUFMTE9DX1NJWkUgaW4gY2Npc3MuYyAqLworICBEV09SRAkJCSAgIGJ1Zl9zaXplOyAgICAvKiBzaXplIGluIGJ5dGVzIG9mIHRoZSBidWYgKi8KKyAgCQkJCSAgICAgICAgLyogPCBtYWxsb2Nfc2l6ZSAqIE1BWFNHRU5UUklFUyAqLworICBCWVRFCQkJICAgX191c2VyICpidWY7Cit9IEJJR19JT0NUTF9Db21tYW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgX0xvZ3ZvbEluZm9fc3RydWN0eworCV9fdTMyCUx1bklEOworCWludAludW1fb3BlbnM7ICAvKiBudW1iZXIgb2Ygb3BlbnMgb24gdGhlIGxvZ2ljYWwgdm9sdW1lICovCisJaW50CW51bV9wYXJ0czsgIC8qIG51bWJlciBvZiBwYXJ0aXRpb25zIGNvbmZpZ3VyZWQgb24gbG9ndm9sICovCit9IExvZ3ZvbEluZm9fc3RydWN0OworCisjZGVmaW5lIENDSVNTX0dFVFBDSUlORk8gX0lPUihDQ0lTU19JT0NfTUFHSUMsIDEsIGNjaXNzX3BjaV9pbmZvX3N0cnVjdCkKKworI2RlZmluZSBDQ0lTU19HRVRJTlRJTkZPIF9JT1IoQ0NJU1NfSU9DX01BR0lDLCAyLCBjY2lzc19jb2FsaW50X3N0cnVjdCkKKyNkZWZpbmUgQ0NJU1NfU0VUSU5USU5GTyBfSU9XKENDSVNTX0lPQ19NQUdJQywgMywgY2Npc3NfY29hbGludF9zdHJ1Y3QpCisKKyNkZWZpbmUgQ0NJU1NfR0VUTk9ERU5BTUUgX0lPUihDQ0lTU19JT0NfTUFHSUMsIDQsIE5vZGVOYW1lX3R5cGUpCisjZGVmaW5lIENDSVNTX1NFVE5PREVOQU1FIF9JT1coQ0NJU1NfSU9DX01BR0lDLCA1LCBOb2RlTmFtZV90eXBlKQorCisjZGVmaW5lIENDSVNTX0dFVEhFQVJUQkVBVCBfSU9SKENDSVNTX0lPQ19NQUdJQywgNiwgSGVhcnRiZWF0X3R5cGUpCisjZGVmaW5lIENDSVNTX0dFVEJVU1RZUEVTICBfSU9SKENDSVNTX0lPQ19NQUdJQywgNywgQnVzVHlwZXNfdHlwZSkKKyNkZWZpbmUgQ0NJU1NfR0VURklSTVZFUiAgIF9JT1IoQ0NJU1NfSU9DX01BR0lDLCA4LCBGaXJtd2FyZVZlcl90eXBlKQorI2RlZmluZSBDQ0lTU19HRVREUklWVkVSICAgX0lPUihDQ0lTU19JT0NfTUFHSUMsIDksIERyaXZlclZlcl90eXBlKQorI2RlZmluZSBDQ0lTU19SRVZBTElEVk9MUyAgX0lPKENDSVNTX0lPQ19NQUdJQywgMTApCisjZGVmaW5lIENDSVNTX1BBU1NUSFJVCSAgIF9JT1dSKENDSVNTX0lPQ19NQUdJQywgMTEsIElPQ1RMX0NvbW1hbmRfc3RydWN0KQorI2RlZmluZSBDQ0lTU19ERVJFR0RJU0sJICAgX0lPKENDSVNTX0lPQ19NQUdJQywgMTIpCisKKy8qIG5vIGxvbmdlciB1c2VkLi4uIHVzZSBSRUdORVdEIGluc3RlYWQgKi8gCisjZGVmaW5lIENDSVNTX1JFR05FV0RJU0sgIF9JT1coQ0NJU1NfSU9DX01BR0lDLCAxMywgaW50KQorCisjZGVmaW5lIENDSVNTX1JFR05FV0QJICAgX0lPKENDSVNTX0lPQ19NQUdJQywgMTQpCisjZGVmaW5lIENDSVNTX1JFU0NBTkRJU0sgICBfSU8oQ0NJU1NfSU9DX01BR0lDLCAxNikKKyNkZWZpbmUgQ0NJU1NfR0VUTFVOSU5GTyAgIF9JT1IoQ0NJU1NfSU9DX01BR0lDLCAxNywgTG9ndm9sSW5mb19zdHJ1Y3QpCisjZGVmaW5lIENDSVNTX0JJR19QQVNTVEhSVSBfSU9XUihDQ0lTU19JT0NfTUFHSUMsIDE4LCBCSUdfSU9DVExfQ29tbWFuZF9zdHJ1Y3QpCisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaWZkZWYgQ09ORklHX0NPTVBBVAorCisvKiAzMiBiaXQgY29tcGF0aWJsZSBpb2N0bCBzdHJ1Y3RzICovCit0eXBlZGVmIHN0cnVjdCBfSU9DVEwzMl9Db21tYW5kX3N0cnVjdCB7CisgIExVTkFkZHJfc3RydWN0CSAgIExVTl9pbmZvOworICBSZXF1ZXN0QmxvY2tfc3RydWN0ICAgICAgUmVxdWVzdDsKKyAgRXJyb3JJbmZvX3N0cnVjdCAgCSAgIGVycm9yX2luZm87CisgIFdPUkQJCQkgICBidWZfc2l6ZTsgIC8qIHNpemUgaW4gYnl0ZXMgb2YgdGhlIGJ1ZiAqLworICBfX3UzMgkJCSAgIGJ1ZjsgLyogMzIgYml0IHBvaW50ZXIgdG8gZGF0YSBidWZmZXIgKi8KK30gSU9DVEwzMl9Db21tYW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgX0JJR19JT0NUTDMyX0NvbW1hbmRfc3RydWN0IHsKKyAgTFVOQWRkcl9zdHJ1Y3QJICAgTFVOX2luZm87CisgIFJlcXVlc3RCbG9ja19zdHJ1Y3QgICAgICBSZXF1ZXN0OworICBFcnJvckluZm9fc3RydWN0ICAJICAgZXJyb3JfaW5mbzsKKyAgRFdPUkQJCQkgICBtYWxsb2Nfc2l6ZTsgLyogPCBNQVhfS01BTExPQ19TSVpFIGluIGNjaXNzLmMgKi8KKyAgRFdPUkQJCQkgICBidWZfc2l6ZTsgICAgLyogc2l6ZSBpbiBieXRlcyBvZiB0aGUgYnVmICovCisgIAkJCQkgICAgICAgIC8qIDwgbWFsbG9jX3NpemUgKiBNQVhTR0VOVFJJRVMgKi8KKyAgX191MzIgCQlidWY7CS8qIDMyIGJpdCBwb2ludGVyIHRvIGRhdGEgYnVmZmVyICovCit9IEJJR19JT0NUTDMyX0NvbW1hbmRfc3RydWN0OworCisjZGVmaW5lIENDSVNTX1BBU1NUSFJVMzIgICBfSU9XUihDQ0lTU19JT0NfTUFHSUMsIDExLCBJT0NUTDMyX0NvbW1hbmRfc3RydWN0KQorI2RlZmluZSBDQ0lTU19CSUdfUEFTU1RIUlUzMiBfSU9XUihDQ0lTU19JT0NfTUFHSUMsIDE4LCBCSUdfSU9DVEwzMl9Db21tYW5kX3N0cnVjdCkKKworI2VuZGlmIC8qIENPTkZJR19DT01QQVQgKi8KKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYgIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jZDE0MDAuaCBiL2luY2x1ZGUvbGludXgvY2QxNDAwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRjM2FiMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvY2QxNDAwLmgKQEAgLTAsMCArMSwyOTIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCWNkMTQwMC5oICAtLSBjZDE0MDAgVUFSVCBoYXJkd2FyZSBpbmZvLgorICoKKyAqCUNvcHlyaWdodCAoQykgMTk5Ni0xOTk4ICBTdGFsbGlvbiBUZWNobm9sb2dpZXMKKyAqCUNvcHlyaWdodCAoQykgMTk5NC0xOTk2ICBHcmVnIFVuZ2VyZXIuCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKgl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICoJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqCWJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKglNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKglHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqCVlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKglhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICoJRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZglfQ0QxNDAwX0gKKyNkZWZpbmUJX0NEMTQwMF9ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKglEZWZpbmUgdGhlIG51bWJlciBvZiBhc3luYyBwb3J0cyBwZXIgY2QxNDAwIHVhcnQgY2hpcC4KKyAqLworI2RlZmluZQlDRDE0MDBfUE9SVFMJCTQKKworLyoKKyAqCURlZmluZSB0aGUgY2QxNDAwIHVhcnRzIGludGVybmFsIEZJRk8gc2l6ZXMuCisgKi8KKyNkZWZpbmUJQ0QxNDAwX1RYRklGT1NJWkUJMTIKKyNkZWZpbmUJQ0QxNDAwX1JYRklGT1NJWkUJMTIKKworLyoKKyAqCUxvY2FsIFJYIEZJRk8gdGhyZXNoIGhvbGQgbGV2ZWwuIEFsc28gZGVmaW5lIHRoZSBSVFMgdGhyZXNoIGhvbGQKKyAqCWJhc2VkIG9uIHRoZSBSWCB0aHJlc2ggaG9sZC4KKyAqLworI2RlZmluZQlGSUZPX1JYVEhSRVNIT0xECTYKKyNkZWZpbmUJRklGT19SVFNUSFJFU0hPTEQJNworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKglEZWZpbmUgdGhlIGNkMTQwMCByZWdpc3RlciBhZGRyZXNzZXMuIFRoZXNlIGFyZSBhbGwgdGhlIHZhbGlkCisgKglyZWdpc3RlcnMgd2l0aCB0aGUgY2QxNDAwLiBTb21lIGFyZSBnbG9iYWwsIHNvbWUgdmlydHVhbCwgc29tZQorICoJcGVyIHBvcnQuCisgKi8KKyNkZWZpbmUJR0ZSQ1IJCTB4NDAKKyNkZWZpbmUJQ0FSCQkweDY4CisjZGVmaW5lCUdDUgkJMHg0YgorI2RlZmluZQlTVlJSCQkweDY3CisjZGVmaW5lCVJJQ1IJCTB4NDQKKyNkZWZpbmUJVElDUgkJMHg0NQorI2RlZmluZQlNSUNSCQkweDQ2CisjZGVmaW5lCVJJUgkJMHg2YgorI2RlZmluZQlUSVIJCTB4NmEKKyNkZWZpbmUJTUlSCQkweDY5CisjZGVmaW5lCVBQUgkJMHg3ZQorCisjZGVmaW5lCVJJVlIJCTB4NDMKKyNkZWZpbmUJVElWUgkJMHg0MgorI2RlZmluZQlNSVZSCQkweDQxCisjZGVmaW5lCVREUgkJMHg2MworI2RlZmluZQlSRFNSCQkweDYyCisjZGVmaW5lCU1JU1IJCTB4NGMKKyNkZWZpbmUJRU9TUlIJCTB4NjAKKworI2RlZmluZQlMSVZSCQkweDE4CisjZGVmaW5lCUNDUgkJMHgwNQorI2RlZmluZQlTUkVSCQkweDA2CisjZGVmaW5lCUNPUjEJCTB4MDgKKyNkZWZpbmUJQ09SMgkJMHgwOQorI2RlZmluZQlDT1IzCQkweDBhCisjZGVmaW5lCUNPUjQJCTB4MWUKKyNkZWZpbmUJQ09SNQkJMHgxZgorI2RlZmluZQlDQ1NSCQkweDBiCisjZGVmaW5lCVJEQ1IJCTB4MGUKKyNkZWZpbmUJU0NIUjEJCTB4MWEKKyNkZWZpbmUJU0NIUjIJCTB4MWIKKyNkZWZpbmUJU0NIUjMJCTB4MWMKKyNkZWZpbmUJU0NIUjQJCTB4MWQKKyNkZWZpbmUJU0NSTAkJMHgyMgorI2RlZmluZQlTQ1JICQkweDIzCisjZGVmaW5lCUxOQwkJMHgyNAorI2RlZmluZQlNQ09SMQkJMHgxNQorI2RlZmluZQlNQ09SMgkJMHgxNgorI2RlZmluZQlSVFBSCQkweDIxCisjZGVmaW5lCU1TVlIxCQkweDZjCisjZGVmaW5lCU1TVlIyCQkweDZkCisjZGVmaW5lCVBTVlIJCTB4NmYKKyNkZWZpbmUJUkJQUgkJMHg3OAorI2RlZmluZQlSQ09SCQkweDdjCisjZGVmaW5lCVRCUFIJCTB4NzIKKyNkZWZpbmUJVENPUgkJMHg3NgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKglEZWZpbmUgdGhlIHNldCBvZiBiYXVkIHJhdGUgY2xvY2sgZGl2aXNvcnMuCisgKi8KKyNkZWZpbmUJQ0QxNDAwX0NMSzAJOAorI2RlZmluZQlDRDE0MDBfQ0xLMQkzMgorI2RlZmluZQlDRDE0MDBfQ0xLMgkxMjgKKyNkZWZpbmUJQ0QxNDAwX0NMSzMJNTEyCisjZGVmaW5lCUNEMTQwMF9DTEs0CTIwNDgKKworI2RlZmluZQlDRDE0MDBfTlVNQ0xLUwk1CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCURlZmluZSB0aGUgY2xvY2sgcHJlLXNjYWxhciB2YWx1ZSB0byBiZSBhIDUgbXMgY2xvY2suIFRoaXMgc2hvdWxkIGJlCisgKglPSyBmb3Igbm93LiBJdCB3b3VsZCBwcm9iYWJseSBiZSBiZXR0ZXIgdG8gbWFrZSBpdCAxMCBtcywgYnV0IHdlCisgKgljYW4ndCBmaXQgdGhhdCBkaXZpc29yIGludG8gOCBiaXRzIQorICovCisjZGVmaW5lCVBQUl9TQ0FMQVIJMjQ0CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCURlZmluZSB2YWx1ZXMgdXNlZCB0byBzZXQgY2hhcmFjdGVyIHNpemUgb3B0aW9ucy4KKyAqLworI2RlZmluZQlDT1IxX0NITDUJMHgwMAorI2RlZmluZQlDT1IxX0NITDYJMHgwMQorI2RlZmluZQlDT1IxX0NITDcJMHgwMgorI2RlZmluZQlDT1IxX0NITDgJMHgwMworCisvKgorICoJRGVmaW5lIHZhbHVlcyB1c2VkIHRvIHNldCB0aGUgbnVtYmVyIG9mIHN0b3AgYml0cy4KKyAqLworI2RlZmluZQlDT1IxX1NUT1AxCTB4MDAKKyNkZWZpbmUJQ09SMV9TVE9QMTUJMHgwNAorI2RlZmluZQlDT1IxX1NUT1AyCTB4MDgKKworLyoKKyAqCURlZmluZSB2YWx1ZXMgdXNlZCB0byBzZXQgdGhlIHBhcml0eSBzY2hlbWUgaW4gdXNlLgorICovCisjZGVmaW5lCUNPUjFfUEFSTk9ORQkweDAwCisjZGVmaW5lCUNPUjFfUEFSRk9SQ0UJMHgyMAorI2RlZmluZQlDT1IxX1BBUkVOQgkweDQwCisjZGVmaW5lCUNPUjFfUEFSSUdOT1JFCTB4MTAKKworI2RlZmluZQlDT1IxX1BBUk9ERAkweDgwCisjZGVmaW5lCUNPUjFfUEFSRVZFTgkweDAwCisKKyNkZWZpbmUJQ09SMl9JWE0JMHg4MAorI2RlZmluZQlDT1IyX1RYSUJFCTB4NDAKKyNkZWZpbmUJQ09SMl9FVEMJMHgyMAorI2RlZmluZQlDT1IyX0xMTQkweDEwCisjZGVmaW5lCUNPUjJfUkxNCTB4MDgKKyNkZWZpbmUJQ09SMl9SVFNBTwkweDA0CisjZGVmaW5lCUNPUjJfQ1RTQUUJMHgwMgorCisjZGVmaW5lCUNPUjNfU0NEUk5HCTB4ODAKKyNkZWZpbmUJQ09SM19TQ0QzNAkweDQwCisjZGVmaW5lCUNPUjNfRkNUCTB4MjAKKyNkZWZpbmUJQ09SM19TQ0QxMgkweDEwCisKKy8qCisgKglEZWZpbmUgdmFsdWVzIHVzZWQgYnkgQ09SNC4KKyAqLworI2RlZmluZQlDT1I0X0JSS0lOVAkweDA4CisjZGVmaW5lCUNPUjRfSUdOQlJLCTB4MTgKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICoJRGVmaW5lIHRoZSBtb2RlbSBjb250cm9sIHJlZ2lzdGVyIHZhbHVlcy4KKyAqCU5vdGUgdGhhdCB0aGUgYWN0dWFsIGhhcmR3YXJlIGlzIGEgbGl0dGxlIGRpZmZlcmVudCB0byB0aGUgY29udmVudGlvbmFsCisgKglwaW4gbmFtZXMgb24gdGhlIGNkMTQwMC4KKyAqLworI2RlZmluZQlNU1ZSMV9EVFIJMHgwMQorI2RlZmluZQlNU1ZSMV9EU1IJMHgxMAorI2RlZmluZQlNU1ZSMV9SSQkweDIwCisjZGVmaW5lCU1TVlIxX0NUUwkweDQwCisjZGVmaW5lCU1TVlIxX0RDRAkweDgwCisKKyNkZWZpbmUJTVNWUjJfUlRTCTB4MDIKKyNkZWZpbmUJTVNWUjJfRFNSCTB4MTAKKyNkZWZpbmUJTVNWUjJfUkkJMHgyMAorI2RlZmluZQlNU1ZSMl9DVFMJMHg0MAorI2RlZmluZQlNU1ZSMl9EQ0QJMHg4MAorCisjZGVmaW5lCU1DT1IxX0RDRAkweDgwCisjZGVmaW5lCU1DT1IxX0NUUwkweDQwCisjZGVmaW5lCU1DT1IxX1JJCTB4MjAKKyNkZWZpbmUJTUNPUjFfRFNSCTB4MTAKKworI2RlZmluZQlNQ09SMl9EQ0QJMHg4MAorI2RlZmluZQlNQ09SMl9DVFMJMHg0MAorI2RlZmluZQlNQ09SMl9SSQkweDIwCisjZGVmaW5lCU1DT1IyX0RTUgkweDEwCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCURlZmluZSB0aGUgYml0cyB1c2VkIHdpdGggdGhlIHNlcnZpY2UgKGludGVycnVwdCkgZW5hYmxlIHJlZ2lzdGVyLgorICovCisjZGVmaW5lCVNSRVJfTk5EVAkweDAxCisjZGVmaW5lCVNSRVJfVFhFTVBUWQkweDAyCisjZGVmaW5lCVNSRVJfVFhEQVRBCTB4MDQKKyNkZWZpbmUJU1JFUl9SWERBVEEJMHgxMAorI2RlZmluZQlTUkVSX01PREVNCTB4ODAKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICoJRGVmaW5lIG9wZXJhdGlvbmFsIGNvbW1hbmRzIGZvciB0aGUgY29tbWFuZCByZWdpc3Rlci4KKyAqLworI2RlZmluZQlDQ1JfUkVTRVQJMHg4MAorI2RlZmluZQlDQ1JfQ09SQ0hBTkdFCTB4NGUKKyNkZWZpbmUJQ0NSX1NFTkRDSAkweDIwCisjZGVmaW5lCUNDUl9DSEFOQ1RSTAkweDEwCisKKyNkZWZpbmUJQ0NSX1RYRU5BQkxFCShDQ1JfQ0hBTkNUUkwgfCAweDA4KQorI2RlZmluZQlDQ1JfVFhESVNBQkxFCShDQ1JfQ0hBTkNUUkwgfCAweDA0KQorI2RlZmluZQlDQ1JfUlhFTkFCTEUJKENDUl9DSEFOQ1RSTCB8IDB4MDIpCisjZGVmaW5lCUNDUl9SWERJU0FCTEUJKENDUl9DSEFOQ1RSTCB8IDB4MDEpCisKKyNkZWZpbmUJQ0NSX1NFTkRTQ0hSMQkoQ0NSX1NFTkRDSCB8IDB4MDEpCisjZGVmaW5lCUNDUl9TRU5EU0NIUjIJKENDUl9TRU5EQ0ggfCAweDAyKQorI2RlZmluZQlDQ1JfU0VORFNDSFIzCShDQ1JfU0VORENIIHwgMHgwMykKKyNkZWZpbmUJQ0NSX1NFTkRTQ0hSNAkoQ0NSX1NFTkRDSCB8IDB4MDQpCisKKyNkZWZpbmUJQ0NSX1JFU0VUQ0hBTgkoQ0NSX1JFU0VUIHwgMHgwMCkKKyNkZWZpbmUJQ0NSX1JFU0VURlVMTAkoQ0NSX1JFU0VUIHwgMHgwMSkKKyNkZWZpbmUJQ0NSX1RYRkxVU0hGSUZPCShDQ1JfUkVTRVQgfCAweDAyKQorCisjZGVmaW5lCUNDUl9NQVhXQUlUCTEwMDAwCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCURlZmluZSB0aGUgdmFsaWQgYWNrbm93bGVkZ2VtZW50IHR5cGVzIChmb3IgaHcgYWNrIGN5Y2xlKS4KKyAqLworI2RlZmluZQlBQ0tfVFlQTUFTSwkweDA3CisjZGVmaW5lCUFDS19UWVBUWAkweDAyCisjZGVmaW5lCUFDS19UWVBNRE0JMHgwMQorI2RlZmluZQlBQ0tfVFlQUlhHT09ECTB4MDMKKyNkZWZpbmUJQUNLX1RZUFJYQkFECTB4MDcKKworI2RlZmluZQlTVlJSX1JYCQkweDAxCisjZGVmaW5lCVNWUlJfVFgJCTB4MDIKKyNkZWZpbmUJU1ZSUl9NRE0JMHgwNAorCisjZGVmaW5lCVNUX09WRVJSVU4JMHgwMQorI2RlZmluZQlTVF9GUkFNSU5HCTB4MDIKKyNkZWZpbmUJU1RfUEFSSVRZCTB4MDQKKyNkZWZpbmUJU1RfQlJFQUsJMHgwOAorI2RlZmluZQlTVF9TQ0hBUjEJMHgxMAorI2RlZmluZQlTVF9TQ0hBUjIJMHgyMAorI2RlZmluZQlTVF9TQ0hBUjMJMHgzMAorI2RlZmluZQlTVF9TQ0hBUjQJMHg0MAorI2RlZmluZQlTVF9SQU5HRQkweDcwCisjZGVmaW5lCVNUX1NDSEFSTUFTSwkweDcwCisjZGVmaW5lCVNUX1RJTUVPVVQJMHg4MAorCisjZGVmaW5lCU1JU1JfRENECTB4ODAKKyNkZWZpbmUJTUlTUl9DVFMJMHg0MAorI2RlZmluZQlNSVNSX1JJCQkweDIwCisjZGVmaW5lCU1JU1JfRFNSCTB4MTAKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICoJRGVmaW5lcyBmb3IgdGhlIENDU1Igc3RhdHVzIHJlZ2lzdGVyLgorICovCisjZGVmaW5lCUNDU1JfUlhFTkFCTEVECTB4ODAKKyNkZWZpbmUJQ0NTUl9SWEZMT1dPTgkweDQwCisjZGVmaW5lCUNDU1JfUlhGTE9XT0ZGCTB4MjAKKyNkZWZpbmUJQ0NTUl9UWEVOQUJMRUQJMHgwOAorI2RlZmluZQlDQ1NSX1RYRkxPV09OCTB4MDQKKyNkZWZpbmUJQ0NTUl9UWEZMT1dPRkYJMHgwMgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKglEZWZpbmUgdGhlIGVtYmVkZGVkIGNvbW1hbmRzLgorICovCisjZGVmaW5lCUVUQ19DTUQJCTB4MDAKKyNkZWZpbmUJRVRDX1NUQVJUQlJFQUsJMHg4MQorI2RlZmluZQlFVENfREVMQVkJMHg4MgorI2RlZmluZQlFVENfU1RPUEJSRUFLCTB4ODMKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NkZXYuaCBiL2luY2x1ZGUvbGludXgvY2Rldi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkYTM3ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2NkZXYuaApAQCAtMCwwICsxLDI3IEBACisjaWZuZGVmIF9MSU5VWF9DREVWX0gKKyNkZWZpbmUgX0xJTlVYX0NERVZfSAorI2lmZGVmIF9fS0VSTkVMX18KKworc3RydWN0IGNkZXYgeworCXN0cnVjdCBrb2JqZWN0IGtvYmo7CisJc3RydWN0IG1vZHVsZSAqb3duZXI7CisJc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqb3BzOworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlkZXZfdCBkZXY7CisJdW5zaWduZWQgaW50IGNvdW50OworfTsKKwordm9pZCBjZGV2X2luaXQoc3RydWN0IGNkZXYgKiwgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqKTsKKworc3RydWN0IGNkZXYgKmNkZXZfYWxsb2Modm9pZCk7CisKK3ZvaWQgY2Rldl9wdXQoc3RydWN0IGNkZXYgKnApOworCitpbnQgY2Rldl9hZGQoc3RydWN0IGNkZXYgKiwgZGV2X3QsIHVuc2lnbmVkKTsKKwordm9pZCBjZGV2X2RlbChzdHJ1Y3QgY2RldiAqKTsKKwordm9pZCBjZF9mb3JnZXQoc3RydWN0IGlub2RlICopOworCisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jZGsuaCBiL2luY2x1ZGUvbGludXgvY2RrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDkwOGRhZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvY2RrLmgKQEAgLTAsMCArMSw0ODYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCWNkay5oICAtLSBDREsgaW50ZXJmYWNlIGRlZmluaXRpb25zLgorICoKKyAqCUNvcHlyaWdodCAoQykgMTk5Ni0xOTk4ICBTdGFsbGlvbiBUZWNobm9sb2dpZXMKKyAqCUNvcHlyaWdodCAoQykgMTk5NC0xOTk2ICBHcmVnIFVuZ2VyZXIuCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKgl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICoJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqCWJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKglNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKglHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqCVlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKglhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICoJRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZglfQ0RLX0gKKyNkZWZpbmUJX0NES19ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNwcmFnbWEJcGFjaygyKQorCisvKgorICoJVGhlIGZvbGxvd2luZyBzZXQgb2YgZGVmaW5pdGlvbnMgaXMgdXNlZCB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZQorICoJc2hhcmVkIG1lbW9yeSBpbnRlcmZhY2Ugb2YgdGhlIFN0YWxsaW9uIGludGVsbGlnZW50IG11bHRpcG9ydCBzZXJpYWwKKyAqCWJvYXJkcy4gVGhlIGRlZmluaXRpb25zIGluIHRoaXMgZmlsZSBhcmUgdGFrZW4gZGlyZWN0bHkgZnJvbSB0aGUKKyAqCWRvY3VtZW50IHRpdGxlZCAiR2VuZXJpYyBTdGFja2FibGUgSW50ZXJmYWNlLCBEb3dubG9hZGVyIGFuZAorICoJQ29tbXVuaWNhdGlvbnMgRGV2ZWxvcG1lbnQgS2l0Ii4KKyAqLworCisvKgorICoJRGVmaW5lIHRoZSBzZXQgb2YgaW1wb3J0YW50IHNoYXJlZCBtZW1vcnkgYWRkcmVzc2VzLiBUaGVzZSBhcmUKKyAqCXJlcXVpcmVkIHRvIGluaXRpYWxpemUgdGhlIGJvYXJkIGFuZCBnZXQgdGhpbmdzIHN0YXJ0ZWQuIEFsbCBvZiB0aGVzZQorICoJYWRkcmVzc2VzIGFyZSByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIHNoYXJlZCBtZW1vcnkuCisgKi8KKyNkZWZpbmUJQ0RLX1NJR0FERFIJMHgyMDAKKyNkZWZpbmUJQ0RLX0ZFQVRBRERSCTB4MjgwCisjZGVmaW5lCUNES19DREtBRERSCTB4MzAwCisjZGVmaW5lCUNES19SRFlBRERSCTB4MjYyCisKKyNkZWZpbmUJQ0RLX0FMSVZFTUFSS0VSCTEzCisKKy8qCisgKglPbiBoYXJkd2FyZSBwb3dlciB1cCB0aGUgUk9NcyBsb2NhdGVkIG9uIHRoZSBFYXN5Q29ubmVjdGlvbiA4LzY0IHdpbGwKKyAqCWZpbGwgb3V0IHRoZSBmb2xsb3dpbmcgc2lnbmF0dXJlIGluZm9ybWF0aW9uIGludG8gc2hhcmVkIG1lbW9yeS4gVGhpcworICoJd2F5IHRoZSBob3N0IHN5c3RlbSBjYW4gcXVpY2tseSBkZXRlcm1pbmUgdGhhdCB0aGUgYm9hcmQgaXMgcHJlc2VudAorICoJYW5kIGlzIG9wZXJhdGlvbmFsLgorICovCit0eXBlZGVmIHN0cnVjdCBjZGtlY3BzaWcgeworCXVuc2lnbmVkIGxvbmcJbWFnaWM7CisJdW5zaWduZWQgc2hvcnQJcm9tdmVyOworCXVuc2lnbmVkIHNob3J0CWNwdXR5cGU7CisJdW5zaWduZWQgY2hhcglwYW5lbGlkWzhdOworfSBjZGtlY3BzaWdfdDsKKworI2RlZmluZQlFQ1BfTUFHSUMJMHgyMTUwNDM0NQorCisvKgorICoJT24gaGFyZHdhcmUgcG93ZXIgdXAgdGhlIFJPTXMgbG9jYXRlZCBvbiB0aGUgT05ib2FyZCwgU3RhbGxpb24gYW5kCisgKglCcnVtYnlzIHdpbGwgZmlsbCBvdXQgdGhlIGZvbGxvd2luZyBzaWduYXR1cmUgaW5mb3JtYXRpb24gaW50byBzaGFyZWQKKyAqCW1lbW9yeS4gVGhpcyB3YXkgdGhlIGhvc3Qgc3lzdGVtIGNhbiBxdWlja2x5IGRldGVybWluZSB0aGF0IHRoZSBib2FyZAorICoJaXMgcHJlc2VudCBhbmQgaXMgb3BlcmF0aW9uYWwuCisgKi8KK3R5cGVkZWYgc3RydWN0IGNka29uYnNpZyB7CisJdW5zaWduZWQgc2hvcnQJbWFnaWMwOworCXVuc2lnbmVkIHNob3J0CW1hZ2ljMTsKKwl1bnNpZ25lZCBzaG9ydAltYWdpYzI7CisJdW5zaWduZWQgc2hvcnQJbWFnaWMzOworCXVuc2lnbmVkIHNob3J0CXJvbXZlcjsKKwl1bnNpZ25lZCBzaG9ydAltZW1vZmY7CisJdW5zaWduZWQgc2hvcnQJbWVtc2VnOworCXVuc2lnbmVkIHNob3J0CWFtYXNrMDsKKwl1bnNpZ25lZCBzaG9ydAlwaWM7CisJdW5zaWduZWQgc2hvcnQJc3RhdHVzOworCXVuc2lnbmVkIHNob3J0CWJ0eXBlOworCXVuc2lnbmVkIHNob3J0CWNsa3RpY2tzOworCXVuc2lnbmVkIHNob3J0CWNsa3NwZWVkOworCXVuc2lnbmVkIHNob3J0CWFtYXNrMTsKKwl1bnNpZ25lZCBzaG9ydAlhbWFzazI7Cit9IGNka29uYnNpZ190OworCisjZGVmaW5lCU9OQl9NQUdJQzAJMHhmMmE3CisjZGVmaW5lCU9OQl9NQUdJQzEJMHhhMTQ5CisjZGVmaW5lCU9OQl9NQUdJQzIJMHg2MzUyCisjZGVmaW5lCU9OQl9NQUdJQzMJMHhmMTIxCisKKy8qCisgKglEZWZpbmUgdGhlIGZlYXR1cmUgYXJlYSBzdHJ1Y3R1cmUuIFRoZSBmZWF0dXJlIGFyZWEgaXMgdGhlIHNldCBvZgorICoJc3RhcnR1cCBwYXJhbWV0ZXJzIHVzZWQgYnkgdGhlIHNsYXZlIGltYWdlIHdoZW4gaXQgc3RhcnRzIGV4ZWN1dGluZy4KKyAqCVRoZXkgYWxsb3cgZm9yIHRoZSBzcGVjaWZpY2F0aW9uIG9mIGJ1ZmZlciBzaXplcywgZGVidWcgdHJhY2UsIGV0Yy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgY2RrZmVhdHVyZSB7CisJdW5zaWduZWQgbG9uZwlkZWJ1ZzsKKwl1bnNpZ25lZCBsb25nCWJhbm5lcjsKKwl1bnNpZ25lZCBsb25nCWV0eXBlOworCXVuc2lnbmVkIGxvbmcJbnJkZXZzOworCXVuc2lnbmVkIGxvbmcJYnJkc3BlYzsKKwl1bnNpZ25lZCBsb25nCXR4cnFzaXplOworCXVuc2lnbmVkIGxvbmcJcnhycXNpemU7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKK30gY2RrZmVhdHVyZV90OworCisjZGVmaW5lCUVUWVBfRERLCTAKKyNkZWZpbmUJRVRZUF9DREsJMQorCisvKgorICoJRGVmaW5lIHRoZSBDREsgaGVhZGVyIHN0cnVjdHVyZS4gVGhpcyBpcyB0aGUgaW5mbyB0aGF0IHRoZSBzbGF2ZQorICoJZW52aXJvbm1lbnQgc2V0cyB1cCBhZnRlciBpdCBoYXMgYmVlbiBkb3dubG9hZGVkIGFuZCBzdGFydGVkLiBJdAorICoJZXNzZW50aWFsbHkgcHJvdmlkZXMgYSBtZW1vcnkgbWFwIGZvciB0aGUgc2hhcmVkIG1lbW9yeSBpbnRlcmZhY2UuCisgKi8KK3R5cGVkZWYgc3RydWN0IGNka2hkciB7CisJdW5zaWduZWQgc2hvcnQJY29tbWFuZDsKKwl1bnNpZ25lZCBzaG9ydAlzdGF0dXM7CisJdW5zaWduZWQgc2hvcnQJcG9ydDsKKwl1bnNpZ25lZCBzaG9ydAltb2RlOworCXVuc2lnbmVkIGxvbmcJY21kX2J1ZlsxNF07CisJdW5zaWduZWQgc2hvcnQJYWxpdmVfY250OworCXVuc2lnbmVkIHNob3J0CWludHJwdF9tb2RlOworCXVuc2lnbmVkIGNoYXIJaW50cnB0X2lkWzhdOworCXVuc2lnbmVkIGNoYXIJdmVyX3JlbGVhc2U7CisJdW5zaWduZWQgY2hhcgl2ZXJfbW9kaWZpY2F0aW9uOworCXVuc2lnbmVkIGNoYXIJdmVyX2ZpeDsKKwl1bnNpZ25lZCBjaGFyCWRlYWRtYW5fcmVzdGFydDsKKwl1bnNpZ25lZCBzaG9ydAlkZWFkbWFuOworCXVuc2lnbmVkIHNob3J0CW5yZGV2czsKKwl1bnNpZ25lZCBsb25nCW1lbXA7CisJdW5zaWduZWQgbG9uZwlob3N0cDsKKwl1bnNpZ25lZCBsb25nCXNsYXZlcDsKKwl1bnNpZ25lZCBjaGFyCWhvc3RyZXE7CisJdW5zaWduZWQgY2hhcglzbGF2ZXJlcTsKKwl1bnNpZ25lZCBjaGFyCWNtZF9yZXNlcnZlZFszMF07Cit9IGNka2hkcl90OworCisjZGVmaW5lCU1PREVfRERLCTAKKyNkZWZpbmUJTU9ERV9DREsJMQorCisjZGVmaW5lCUlNRF9JTlRSCTB4MAorI2RlZmluZQlJTURfUFBJTlRSCTB4MQorI2RlZmluZQlJTURfUE9MTAkweGZmCisKKy8qCisgKglEZWZpbmUgdGhlIG1lbW9yeSBtYXBwaW5nIHN0cnVjdHVyZS4gVGhpcyBzdHJ1Y3R1cmUgaXMgcG9pbnRlZCB0byBieQorICoJdGhlIG1lbXAgZmllbGQgaW4gdGhlIHN0bGNka2hkciBzdHJ1Y3QuIEFzIG1hbnkgYXMgdGhlc2Ugc3RydWN0dXJlcworICoJYXMgcmVxdWlyZWQgYXJlIGxheWVkIG91dCBpbiBzaGFyZWQgbWVtb3J5IHRvIGRlZmluZSBob3cgdGhlIHJlc3Qgb2YKKyAqCXNoYXJlZCBtZW1vcnkgaXMgZGl2aWRlZCB1cC4gVGhlcmUgd2lsbCBiZSBvbmUgZm9yIGVhY2ggcG9ydC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgY2RrbWVtIHsKKwl1bnNpZ25lZCBzaG9ydAlkdHlwZTsKKwl1bnNpZ25lZCBsb25nCW9mZnNldDsKK30gY2RrbWVtX3Q7CisKKyNkZWZpbmUJVFlQX1VOREVGSU5FRAkweDAKKyNkZWZpbmUJVFlQX0FTWU5DVFJMCTB4MQorI2RlZmluZQlUWVBfQVNZTkMJMHgyMAorI2RlZmluZQlUWVBfUEFSQUxMRUwJMHg0MAorI2RlZmluZQlUWVBfU1lOQ1gyMQkweDYwCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCUZvbGxvd2luZyBpcyBhIHNldCBvZiBkZWZpbmVzIGFuZCBzdHJ1Y3R1cmVzIHVzZWQgdG8gYWN0dWFsbHkgZGVhbAorICoJd2l0aCB0aGUgc2VyaWFsIHBvcnRzIG9uIHRoZSBib2FyZC4gRmlyc3RseSBpcyB0aGUgc2V0IG9mIGNvbW1hbmRzCisgKgl0aGF0IGNhbiBiZSBhcHBsaWVkIHRvIHBvcnRzLgorICovCisjZGVmaW5lCUFTWUNNRAkJKCgodW5zaWduZWQgbG9uZykgJ2EnKSA8PCA4KQorCisjZGVmaW5lCUFfTlVMTAkJKEFTWUNNRCB8IDApCisjZGVmaW5lCUFfRkxVU0gJCShBU1lDTUQgfCAxKQorI2RlZmluZQlBX0JSRUFLCQkoQVNZQ01EIHwgMikKKyNkZWZpbmUJQV9HRVRQT1JUCShBU1lDTUQgfCAzKQorI2RlZmluZQlBX1NFVFBPUlQJKEFTWUNNRCB8IDQpCisjZGVmaW5lCUFfU0VUUE9SVEYJKEFTWUNNRCB8IDUpCisjZGVmaW5lCUFfU0VUUE9SVEZUWAkoQVNZQ01EIHwgNikKKyNkZWZpbmUJQV9TRVRQT1JURlJYCShBU1lDTUQgfCA3KQorI2RlZmluZQlBX0dFVFNJR05BTFMJKEFTWUNNRCB8IDgpCisjZGVmaW5lCUFfU0VUU0lHTkFMUwkoQVNZQ01EIHwgOSkKKyNkZWZpbmUJQV9TRVRTSUdOQUxTRgkoQVNZQ01EIHwgMTApCisjZGVmaW5lCUFfU0VUU0lHTkFMU0ZUWAkoQVNZQ01EIHwgMTEpCisjZGVmaW5lCUFfU0VUU0lHTkFMU0ZSWAkoQVNZQ01EIHwgMTIpCisjZGVmaW5lCUFfR0VUTk9USUZZCShBU1lDTUQgfCAxMykKKyNkZWZpbmUJQV9TRVROT1RJRlkJKEFTWUNNRCB8IDE0KQorI2RlZmluZQlBX05PVElGWQkoQVNZQ01EIHwgMTUpCisjZGVmaW5lCUFfUE9SVENUUkwJKEFTWUNNRCB8IDE2KQorI2RlZmluZQlBX0dFVFNUQVRTCShBU1lDTUQgfCAxNykKKyNkZWZpbmUJQV9SUVNUQVRFCShBU1lDTUQgfCAxOCkKKyNkZWZpbmUJQV9GTE9XU1RBVEUJKEFTWUNNRCB8IDE5KQorI2RlZmluZQlBX0NMRUFSU1RBVFMJKEFTWUNNRCB8IDIwKQorCisvKgorICoJRGVmaW5lIHRob3NlIGFyZ3VtZW50cyB1c2VkIGZvciBzaW1wbGUgY29tbWFuZHMuCisgKi8KKyNkZWZpbmUJRkxVU0hSWAkJMHgxCisjZGVmaW5lCUZMVVNIVFgJCTB4MgorCisjZGVmaW5lCUJSRUFLT04JCS0xCisjZGVmaW5lCUJSRUFLT0ZGCS0yCisKKy8qCisgKglEZWZpbmUgdGhlIHBvcnQgc2V0dGluZyBzdHJ1Y3R1cmUsIGFuZCBhbGwgdGhvc2UgZGVmaW5lcyB0aGF0IGdvIGFsb25nCisgKgl3aXRoIGl0LiBCYXNpY2FsbHkgdGhpcyBzdHJ1Y3R1cmUgZGVmaW5lcyB0aGUgY2hhcmFjdGVyaXN0aWNzIG9mIHRoaXMKKyAqCXBvcnQ6IGJhdWQgcmF0ZSwgY2hhcnMsIHBhcml0eSwgaW5wdXQvb3V0cHV0IGNoYXIgY29va2luZyBldGMuCisgKi8KK3R5cGVkZWYgc3RydWN0IGFzeXBvcnQgeworCXVuc2lnbmVkIGxvbmcJYmF1ZG91dDsKKwl1bnNpZ25lZCBsb25nCWJhdWRpbjsKKwl1bnNpZ25lZCBsb25nCWlmbGFnOworCXVuc2lnbmVkIGxvbmcJb2ZsYWc7CisJdW5zaWduZWQgbG9uZwlsZmxhZzsKKwl1bnNpZ25lZCBsb25nCXBmbGFnOworCXVuc2lnbmVkIGxvbmcJZmxvdzsKKwl1bnNpZ25lZCBsb25nCXNwYXJlMTsKKwl1bnNpZ25lZCBzaG9ydAl2dGltZTsKKwl1bnNpZ25lZCBzaG9ydAl2bWluOworCXVuc2lnbmVkIHNob3J0CXR4bG87CisJdW5zaWduZWQgc2hvcnQJdHhoaTsKKwl1bnNpZ25lZCBzaG9ydAlyeGxvOworCXVuc2lnbmVkIHNob3J0CXJ4aGk7CisJdW5zaWduZWQgc2hvcnQJcnhob2c7CisJdW5zaWduZWQgc2hvcnQJc3BhcmUyOworCXVuc2lnbmVkIGNoYXIJY3NpemU7CisJdW5zaWduZWQgY2hhcglzdG9wYnM7CisJdW5zaWduZWQgY2hhcglwYXJpdHk7CisJdW5zaWduZWQgY2hhcglzdG9waW47CisJdW5zaWduZWQgY2hhcglzdGFydGluOworCXVuc2lnbmVkIGNoYXIJc3RvcG91dDsKKwl1bnNpZ25lZCBjaGFyCXN0YXJ0b3V0OworCXVuc2lnbmVkIGNoYXIJcGFybWFyazsKKwl1bnNpZ25lZCBjaGFyCWJya21hcms7CisJdW5zaWduZWQgY2hhcgljY1sxMV07Cit9IGFzeXBvcnRfdDsKKworI2RlZmluZQlQVF9TVE9QMQkweDAKKyNkZWZpbmUJUFRfU1RPUDE1CTB4MQorI2RlZmluZQlQVF9TVE9QMgkweDIKKworI2RlZmluZQlQVF9OT1BBUklUWQkweDAKKyNkZWZpbmUJUFRfT0REUEFSSVRZCTB4MQorI2RlZmluZQlQVF9FVkVOUEFSSVRZCTB4MgorI2RlZmluZQlQVF9NQVJLUEFSSVRZCTB4MworI2RlZmluZQlQVF9TUEFDRVBBUklUWQkweDQKKworI2RlZmluZQlGX05PTkUJCTB4MAorI2RlZmluZQlGX0lYT04JCTB4MQorI2RlZmluZQlGX0lYT0ZGCQkweDIKKyNkZWZpbmUJRl9JWEFOWQkJMHg0CisjZGVmaW5lCUZfSU9YQU5ZCTB4OAorI2RlZmluZQlGX1JUU0ZMT1cJMHgxMAorI2RlZmluZQlGX0NUU0ZMT1cJMHgyMAorI2RlZmluZQlGX0RUUkZMT1cJMHg0MAorI2RlZmluZQlGX0RDREZMT1cJMHg4MAorI2RlZmluZQlGX0RTUk9GTE9XCTB4MTAwCisjZGVmaW5lCUZfRFNSSUZMT1cJMHgyMDAKKworI2RlZmluZQlGSV9OT1JYCQkweDEKKyNkZWZpbmUJRklfUkFXCQkweDIKKyNkZWZpbmUJRklfSVNUUklQCTB4NAorI2RlZmluZQlGSV9VQ0xDCQkweDgKKyNkZWZpbmUJRklfSU5MQ1IJMHgxMAorI2RlZmluZQlGSV9JQ1JOTAkweDIwCisjZGVmaW5lCUZJX0lHTkNSCTB4NDAKKyNkZWZpbmUJRklfSUdOQlJFQUsJMHg4MAorI2RlZmluZQlGSV9EU0NSREJSRUFLCTB4MTAwCisjZGVmaW5lCUZJXzFNQVJLQlJFQUsJMHgyMDAKKyNkZWZpbmUJRklfMk1BUktCUkVBSwkweDQwMAorI2RlZmluZQlGSV9YQ0hOR0JSRUFLCTB4ODAwCisjZGVmaW5lCUZJX0lHTlJYRVJSUwkweDEwMDAKKyNkZWZpbmUJRklfRFNDRFJYRVJSUwkweDIwMDAKKyNkZWZpbmUJRklfMU1BUktSWEVSUlMJMHg0MDAwCisjZGVmaW5lCUZJXzJNQVJLUlhFUlJTCTB4ODAwMAorI2RlZmluZQlGSV9YQ0hOR1JYRVJSUwkweDEwMDAwCisjZGVmaW5lCUZJX0RTQ1JETlVMTAkweDIwMDAwCisKKyNkZWZpbmUJRk9fT0xDVUMJMHgxCisjZGVmaW5lCUZPX09OTENSCTB4MgorI2RlZmluZQlGT19PT0NSTkwJMHg0CisjZGVmaW5lCUZPX09OT0NSCTB4OAorI2RlZmluZQlGT19PTkxSRVQJMHgxMAorI2RlZmluZQlGT19PTkwJCTB4MjAKKyNkZWZpbmUJRk9fT0JTCQkweDQwCisjZGVmaW5lCUZPX09WVAkJMHg4MAorI2RlZmluZQlGT19PRkYJCTB4MTAwCisjZGVmaW5lCUZPX09UQUIxCTB4MjAwCisjZGVmaW5lCUZPX09UQUIyCTB4NDAwCisjZGVmaW5lCUZPX09UQUIzCTB4ODAwCisjZGVmaW5lCUZPX09DUjEJCTB4MTAwMAorI2RlZmluZQlGT19PQ1IyCQkweDIwMDAKKyNkZWZpbmUJRk9fT0NSMwkJMHg0MDAwCisjZGVmaW5lCUZPX09GSUxMCTB4ODAwMAorI2RlZmluZQlGT19PREVMTAkweDEwMDAwCisKKyNkZWZpbmUJUF9SVFNMT0NLCTB4MQorI2RlZmluZQlQX0NUU0xPQ0sJMHgyCisjZGVmaW5lCVBfTUFQUlRTCTB4NAorI2RlZmluZQlQX01BUENUUwkweDgKKyNkZWZpbmUJUF9MT09QQkFDSwkweDEwCisjZGVmaW5lCVBfRFRSRk9MTE9XCTB4MjAKKyNkZWZpbmUJUF9GQUtFRENECTB4NDAKKworI2RlZmluZQlQX1JYSU1JTgkweDEwMDAwCisjZGVmaW5lCVBfUlhJVElNRQkweDIwMDAwCisjZGVmaW5lCVBfUlhUSE9MRAkweDQwMDAwCisKKy8qCisgKglEZWZpbmUgYSBzdHJ1Y3R1cmUgdG8gY29tbXVuaWNhdGUgc2VyaWFsIHBvcnQgc2lnbmFsIGFuZCBkYXRhIHN0YXRlCisgKglpbmZvcm1hdGlvbi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgYXN5c2lncyB7CisJdW5zaWduZWQgbG9uZwlkYXRhOworCXVuc2lnbmVkIGxvbmcJc2lnbmFsOworCXVuc2lnbmVkIGxvbmcJc2lndmFsdWU7Cit9IGFzeXNpZ3NfdDsKKworI2RlZmluZQlEVF9UWEJVU1kJMHgxCisjZGVmaW5lCURUX1RYRU1QVFkJMHgyCisjZGVmaW5lCURUX1RYTE9XCTB4NAorI2RlZmluZQlEVF9UWEhJR0gJMHg4CisjZGVmaW5lCURUX1RYRlVMTAkweDEwCisjZGVmaW5lCURUX1RYSE9HCTB4MjAKKyNkZWZpbmUJRFRfVFhGTE9XRUQJMHg0MAorI2RlZmluZQlEVF9UWEJSRUFLCTB4ODAKKworI2RlZmluZQlEVF9SWEJVU1kJMHgxMDAKKyNkZWZpbmUJRFRfUlhFTVBUWQkweDIwMAorI2RlZmluZQlEVF9SWExPVwkweDQwMAorI2RlZmluZQlEVF9SWEhJR0gJMHg4MDAKKyNkZWZpbmUJRFRfUlhGVUxMCTB4MTAwMAorI2RlZmluZQlEVF9SWEhPRwkweDIwMDAKKyNkZWZpbmUJRFRfUlhGTE9XRUQJMHg0MDAwCisjZGVmaW5lCURUX1JYQlJFQUsJMHg4MDAwCisKKyNkZWZpbmUJU0dfRFRSCQkweDEKKyNkZWZpbmUJU0dfRENECQkweDIKKyNkZWZpbmUJU0dfUlRTCQkweDQKKyNkZWZpbmUJU0dfQ1RTCQkweDgKKyNkZWZpbmUJU0dfRFNSCQkweDEwCisjZGVmaW5lCVNHX1JJCQkweDIwCisKKy8qCisgKglEZWZpbmUgdGhlIG5vdGlmaWNhdGlvbiBzZXR0aW5nIHN0cnVjdHVyZS4gVGhpcyBpcyB1c2VkIHRvIHRlbGwgdGhlCisgKglwb3J0IHdoYXQgZXZlbnRzIHdlIHdhbnQgdG8gYmUgaW5mb3JtZWQgYWJvdXQuIEZpZWxkcyBoZXJlIHVzZSB0aGUKKyAqCXNhbWUgZGVmaW5lcyBhcyBmb3IgdGhlIGFzeXNpZ3Mgc3RydWN0dXJlIGFib3ZlLgorICovCit0eXBlZGVmIHN0cnVjdCBhc3lub3RpZnkgeworCXVuc2lnbmVkIGxvbmcJY3RybDsKKwl1bnNpZ25lZCBsb25nCWRhdGE7CisJdW5zaWduZWQgbG9uZwlzaWduYWw7CisJdW5zaWduZWQgbG9uZwlzaWd2YWx1ZTsKK30gYXN5bm90aWZ5X3Q7CisKKy8qCisgKglEZWZpbmUgdGhlIHBvcnQgY29udHJvbCBzdHJ1Y3R1cmUuIEl0IGlzIHVzZWQgdG8gZG8gZmluZSBncmFpbgorICoJY29udHJvbCBvcGVyYXRpb25zIG9uIHRoZSBwb3J0LgorICovCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgbG9uZwlyeGN0cmw7CisJdW5zaWduZWQgbG9uZwl0eGN0cmw7CisJY2hhcgkJcnhpbWRjaDsKKwljaGFyCQl0eGltZGNoOworCWNoYXIJCXNwYXJlMTsKKwljaGFyCQlzcGFyZTI7Cit9IGFzeWN0cmxfdDsKKworI2RlZmluZQlDVF9FTkFCTEUJMHgxCisjZGVmaW5lCUNUX0RJU0FCTEUJMHgyCisjZGVmaW5lCUNUX1NUT1AJCTB4NAorI2RlZmluZQlDVF9TVEFSVAkweDgKKyNkZWZpbmUJQ1RfU1RBUlRGTE9XCTB4MTAKKyNkZWZpbmUJQ1RfU1RPUEZMT1cJMHgyMAorI2RlZmluZQlDVF9TRU5EQ0hSCTB4NDAKKworLyoKKyAqCURlZmluZSB0aGUgc3RhdHMgc3RydWN0dXJlIGtlcHQgZm9yIGVhY2ggcG9ydC4gVGhpcyBpcyBhIHVzZWZ1bCBzZXQKKyAqCW9mIGRhdGEgY29sbGVjdGVkIGZvciBlYWNoIHBvcnQgb24gdGhlIHNsYXZlLiBUaGUgQV9HRVRTVEFUUyBjb21tYW5kCisgKglpcyB1c2VkIHRvIHJldHJpZXZlIHRoaXMgZGF0YSBmcm9tIHRoZSBzbGF2ZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgYXN5c3RhdHMgeworCXVuc2lnbmVkIGxvbmcJb3BlbnM7CisJdW5zaWduZWQgbG9uZwl0eGNoYXJzOworCXVuc2lnbmVkIGxvbmcJcnhjaGFyczsKKwl1bnNpZ25lZCBsb25nCXR4cmluZ3E7CisJdW5zaWduZWQgbG9uZwlyeHJpbmdxOworCXVuc2lnbmVkIGxvbmcJdHhtc2dzOworCXVuc2lnbmVkIGxvbmcJcnhtc2dzOworCXVuc2lnbmVkIGxvbmcJdHhmbHVzaGVzOworCXVuc2lnbmVkIGxvbmcJcnhmbHVzaGVzOworCXVuc2lnbmVkIGxvbmcJb3ZlcnJ1bnM7CisJdW5zaWduZWQgbG9uZwlmcmFtaW5nOworCXVuc2lnbmVkIGxvbmcJcGFyaXR5OworCXVuc2lnbmVkIGxvbmcJcmluZ292ZXI7CisJdW5zaWduZWQgbG9uZwlsb3N0OworCXVuc2lnbmVkIGxvbmcJcnhzdGFydDsKKwl1bnNpZ25lZCBsb25nCXJ4c3RvcDsKKwl1bnNpZ25lZCBsb25nCXR4c3RhcnQ7CisJdW5zaWduZWQgbG9uZwl0eHN0b3A7CisJdW5zaWduZWQgbG9uZwlkY2RjbnQ7CisJdW5zaWduZWQgbG9uZwlkdHJjbnQ7CisJdW5zaWduZWQgbG9uZwljdHNjbnQ7CisJdW5zaWduZWQgbG9uZwlydHNjbnQ7CisJdW5zaWduZWQgbG9uZwlkc3JjbnQ7CisJdW5zaWduZWQgbG9uZwlyaWNudDsKKwl1bnNpZ25lZCBsb25nCXR4YnJlYWtzOworCXVuc2lnbmVkIGxvbmcJcnhicmVha3M7CisJdW5zaWduZWQgbG9uZwlzaWduYWxzOworCXVuc2lnbmVkIGxvbmcJc3RhdGU7CisJdW5zaWduZWQgbG9uZwlod2lkOworfSBhc3lzdGF0c190OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKglBbGwgY29tbWFuZCBhbmQgY29udHJvbCBjb21tdW5pY2F0aW9uIHdpdGggYSBkZXZpY2Ugb24gdGhlIHNsYXZlIGlzCisgKgl2aWEgYSBjb250cm9sIGJsb2NrIGluIHNoYXJlZCBtZW1vcnkuIEVhY2ggZGV2aWNlIGhhcyBpdHMgb3duIGNvbnRyb2wKKyAqCWJsb2NrLCBkZWZpbmVkIGJ5IHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlLiBUaGUgY29udHJvbCBibG9jayBhbGxvd3MKKyAqCXRoZSBob3N0IHRvIG9wZW4sIGNsb3NlIGFuZCBjb250cm9sIHRoZSBkZXZpY2Ugb24gdGhlIHNsYXZlLgorICovCit0eXBlZGVmIHN0cnVjdCBjZGtjdHJsIHsKKwl1bnNpZ25lZCBjaGFyCW9wZW47CisJdW5zaWduZWQgY2hhcgljbG9zZTsKKwl1bnNpZ25lZCBsb25nCW9wZW5hcmc7CisJdW5zaWduZWQgbG9uZwljbG9zZWFyZzsKKwl1bnNpZ25lZCBsb25nCWNtZDsKKwl1bnNpZ25lZCBsb25nCXN0YXR1czsKKwl1bnNpZ25lZCBsb25nCWFyZ3NbMzJdOworfSBjZGtjdHJsX3Q7CisKKy8qCisgKglFYWNoIGRldmljZSBvbiB0aGUgc2xhdmUgcGFzc2VzIGRhdGEgdG8gYW5kIGZyb20gdGhlIGhvc3QgdmlhIGEgcmluZworICoJcXVldWUgaW4gc2hhcmVkIG1lbW9yeS4gRGVmaW5lIGEgcmluZyBxdWV1ZSBzdHJ1Y3R1cmUgdG8gaG9sZCB0aGUKKyAqCXZpdGFsIGluZm9ybWF0aW9uIGFib3V0IGVhY2ggcmluZyBxdWV1ZS4gVHdvIHJpbmcgcXVldWVzIHdpbGwgYmUKKyAqCWFsbG9jYXRlZCBmb3IgZWFjaCBwb3J0LCBvbmUgZm9yIHJlY2VpdmUgZGF0YSBhbmQgb25lIGZvciB0cmFuc21pdAorICoJZGF0YS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgY2RrYXN5cnEgeworCXVuc2lnbmVkIGxvbmcJb2Zmc2V0OworCXVuc2lnbmVkIHNob3J0CXNpemU7CisJdW5zaWduZWQgc2hvcnQJaGVhZDsKKwl1bnNpZ25lZCBzaG9ydAl0YWlsOworfSBjZGthc3lycV90OworCisvKgorICoJRWFjaCBhc3luY2hyb25vdXMgcG9ydCBpcyBkZWZpbmVkIGluIHNoYXJlZCBtZW1vcnkgYnkgdGhlIGZvbGxvd2luZworICoJc3RydWN0dXJlLiBJdCBjb250YWlucyBhIGNvbnRyb2wgYmxvY2sgdG8gY29tbWFuZCBhIGRldmljZSwgYW5kIGFsc28KKyAqCXRoZSBuZWNlc3NhcnkgZGF0YSBjaGFubmVsIGluZm9ybWF0aW9uIGFzIHdlbGwuCisgKi8KK3R5cGVkZWYgc3RydWN0IGNka2FzeSB7CisJY2RrY3RybF90CWN0cmw7CisJdW5zaWduZWQgc2hvcnQJbm90aWZ5OworCWFzeW5vdGlmeV90CWNoYW5nZWQ7CisJdW5zaWduZWQgc2hvcnQJcmVjZWl2ZTsKKwljZGthc3lycV90CXJ4cTsKKwl1bnNpZ25lZCBzaG9ydAl0cmFuc21pdDsKKwljZGthc3lycV90CXR4cTsKK30gY2RrYXN5X3Q7CisKKyNwcmFnbWEJcGFjaygpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCURlZmluZSB0aGUgc2V0IG9mIGlvY3RscyB1c2VkIGJ5IHRoZSBkcml2ZXIgdG8gZG8gc3BlY2lhbCB0aGluZ3MKKyAqCXRvIHRoZSBib2FyZC4gVGhlc2UgaW5jbHVkZSBpbnRlcnJ1cHRpbmcgaXQsIGFuZCBpbml0aWFsaXppbmcKKyAqCXRoZSBkcml2ZXIgYWZ0ZXIgYm9hcmQgc3RhcnR1cCBhbmQgc2h1dGRvd24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorCisjZGVmaW5lCVNUTF9CSU5UUglfSU8oJ3MnLDIwKQorI2RlZmluZQlTVExfQlNUQVJUCV9JTygncycsMjEpCisjZGVmaW5lCVNUTF9CU1RPUAlfSU8oJ3MnLDIyKQorI2RlZmluZQlTVExfQlJFU0VUCV9JTygncycsMjMpCisKKy8qCisgKglEZWZpbmUgYSBzZXQgb2YgaW9jdGwgZXh0ZW5zaW9ucywgdXNlZCB0byBnZXQgYXQgc3BlY2lhbCBzdHVmZi4KKyAqLworI2RlZmluZQlTVExfR0VUUEZMQUcJX0lPKCdzJyw4MCkKKyNkZWZpbmUJU1RMX1NFVFBGTEFHCV9JTygncycsODEpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jZHJvbS5oIGIvaW5jbHVkZS9saW51eC9jZHJvbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2OGZkZjEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2Nkcm9tLmgKQEAgLTAsMCArMSwxMTkyIEBACisvKgorICogLS0gPGxpbnV4L2Nkcm9tLmg+CisgKiBHZW5lcmFsIGhlYWRlciBmaWxlIGZvciBsaW51eCBDRC1ST00gZHJpdmVycyAKKyAqIENvcHlyaWdodCAoQykgMTk5MiAgICAgICAgIERhdmlkIEdpbGxlciwgcmFmZXRtYWRAb3h5LmVkdQorICogICAgICAgICAgICAgICAxOTk0LCAxOTk1ICAgRWJlcmhhcmQgTW9lbmtlYmVyZywgZW1vZW5rZUBnd2RnLmRlCisgKiAgICAgICAgICAgICAgIDE5OTYgICAgICAgICBEYXZpZCB2YW4gTGVldXdlbiwgZGF2aWRAdG0udG5vLm5sCisgKiAgICAgICAgICAgICAgIDE5OTcsIDE5OTggICBFcmlrIEFuZGVyc2VuLCBhbmRlcnNlZUBkZWJpYW4ub3JnCisgKiAgICAgICAgICAgICAgIDE5OTgtMjAwMiAgICBKZW5zIEF4Ym9lLCBheGJvZUBzdXNlLmRlCisgKi8KKyAKKyNpZm5kZWYJX0xJTlVYX0NEUk9NX0gKKyNkZWZpbmUJX0xJTlVYX0NEUk9NX0gKKworI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEFzIG9mIExpbnV4IDIuMS54LCBhbGwgTGludXggQ0QtUk9NIGFwcGxpY2F0aW9uIHByb2dyYW1zIHdpbGwgdXNlIHRoaXMgCisgKiAoYW5kIG9ubHkgdGhpcykgaW5jbHVkZSBmaWxlLiAgSXQgaXMgbXkgaG9wZSB0byBwcm92aWRlIExpbnV4IHdpdGgKKyAqIGEgdW5pZm9ybSBpbnRlcmZhY2UgYmV0d2VlbiBzb2Z0d2FyZSBhY2Nlc3NpbmcgQ0QtUk9NcyBhbmQgdGhlIHZhcmlvdXMgCisgKiBkZXZpY2UgZHJpdmVycyB0aGF0IGFjdHVhbGx5IHRhbGsgdG8gdGhlIGRyaXZlcy4gIFRoZXJlIG1heSBzdGlsbCBiZQorICogMjMgZGlmZmVyZW50IGtpbmRzIG9mIHN0cmFuZ2UgQ0QtUk9NIGRyaXZlcywgYnV0IGF0IGxlYXN0IHRoZXJlIHdpbGwgCisgKiBub3cgYmUgb25lLCBhbmQgb25seSBvbmUsIExpbnV4IENELVJPTSBpbnRlcmZhY2UuCisgKgorICogQWRkaXRpb25hbGx5LCBhcyBvZiBMaW51eCAyLjEueCwgYWxsIExpbnV4IGFwcGxpY2F0aW9uIHByb2dyYW1zIAorICogc2hvdWxkIHVzZSB0aGUgT19OT05CTE9DSyBvcHRpb24gd2hlbiBvcGVuaW5nIGEgQ0QtUk9NIGRldmljZSAKKyAqIGZvciBzdWJzZXF1ZW50IGlvY3RsIGNvbW1hbmRzLiAgVGhpcyBhbGxvd3MgZm9yIG5lYXQgc3lzdGVtIGVycm9ycyAKKyAqIGxpa2UgIk5vIG1lZGl1bSBmb3VuZCIgb3IgIldyb25nIG1lZGl1bSB0eXBlIiB1cG9uIGF0dGVtcHRpbmcgdG8gCisgKiBtb3VudCBvciBwbGF5IGFuIGVtcHR5IHNsb3QsIG1vdW50IGFuIGF1ZGlvIGRpc2MsIG9yIHBsYXkgYSBkYXRhIGRpc2MuCisgKiBHZW5lcmFsbHksIGNoYW5naW5nIGFuIGFwcGxpY2F0aW9uIHByb2dyYW0gdG8gc3VwcG9ydCBPX05PTkJMT0NLCisgKiBpcyBhcyBlYXN5IGFzIHRoZSBmb2xsb3dpbmc6CisgKiAgICAgICAtICAgIGRyaXZlID0gb3BlbigiL2Rldi9jZHJvbSIsIE9fUkRPTkxZKTsKKyAqICAgICAgICsgICAgZHJpdmUgPSBvcGVuKCIvZGV2L2Nkcm9tIiwgT19SRE9OTFkgfCBPX05PTkJMT0NLKTsKKyAqIEl0IGlzIHdvcnRoIHRoZSBzbWFsbCBjaGFuZ2UuCisgKgorICogIFBhdGNoZXMgZm9yIG1hbnkgY29tbW9uIENEIHByb2dyYW1zIChwcm92aWRlZCBieSBEYXZpZCBBLiB2YW4gTGVldXdlbikKKyAqICBjYW4gYmUgZm91bmQgYXQ6ICBmdHA6Ly9mdHAuZ3dkZy5kZS9wdWIvbGludXgvY2Ryb20vZHJpdmVycy9jbTIwNi8KKyAqIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFdoZW4gYSBkcml2ZXIgc3VwcG9ydHMgYSBjZXJ0YWluIGZ1bmN0aW9uLCBidXQgdGhlIGNkcm9tIGRyaXZlIHdlIGFyZSAKKyAqIHVzaW5nIGRvZXNuJ3QsIHdlIHdpbGwgcmV0dXJuIHRoZSBlcnJvciBFRFJJVkVfQ0FOVF9ET19USElTLiAgV2Ugd2lsbCAKKyAqIGJvcnJvdyB0aGUgIk9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkIiBlcnJvciBmcm9tIHRoZSBuZXR3b3JrIGZvbGtzIHRvIAorICogYWNjb21wbGlzaCB0aGlzLiAgTWF5YmUgc29tZWRheSB3ZSB3aWxsIGdldCBhIG1vcmUgdGFyZ2V0ZWQgZXJyb3IgY29kZSwgCisgKiBidXQgdGhpcyB3aWxsIGRvIGZvciBub3cuLi4gKi8KKyNkZWZpbmUgRURSSVZFX0NBTlRfRE9fVEhJUyAgRU9QTk9UU1VQUAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVGhlIENELVJPTSBJT0NUTCBjb21tYW5kcyAgLS0gdGhlc2Ugc2hvdWxkIGJlIHN1cHBvcnRlZCBieSAKKyAqIGFsbCB0aGUgdmFyaW91cyBjZHJvbSBkcml2ZXJzLiAgRm9yIHRoZSBDRC1ST00gaW9jdGxzLCB3ZSAKKyAqIHdpbGwgY29tbWFuZGVlciBieXRlIDB4NTMsIG9yICdTJy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBDRFJPTVBBVVNFCQkweDUzMDEgLyogUGF1c2UgQXVkaW8gT3BlcmF0aW9uICovIAorI2RlZmluZSBDRFJPTVJFU1VNRQkJMHg1MzAyIC8qIFJlc3VtZSBwYXVzZWQgQXVkaW8gT3BlcmF0aW9uICovCisjZGVmaW5lIENEUk9NUExBWU1TRgkJMHg1MzAzIC8qIFBsYXkgQXVkaW8gTVNGIChzdHJ1Y3QgY2Ryb21fbXNmKSAqLworI2RlZmluZSBDRFJPTVBMQVlUUktJTkQJCTB4NTMwNCAvKiBQbGF5IEF1ZGlvIFRyYWNrL2luZGV4IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgY2Ryb21fdGkpICovCisjZGVmaW5lIENEUk9NUkVBRFRPQ0hEUgkJMHg1MzA1IC8qIFJlYWQgVE9DIGhlYWRlciAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IGNkcm9tX3RvY2hkcikgKi8KKyNkZWZpbmUgQ0RST01SRUFEVE9DRU5UUlkJMHg1MzA2IC8qIFJlYWQgVE9DIGVudHJ5IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgY2Ryb21fdG9jZW50cnkpICovCisjZGVmaW5lIENEUk9NU1RPUAkJMHg1MzA3IC8qIFN0b3AgdGhlIGNkcm9tIGRyaXZlICovCisjZGVmaW5lIENEUk9NU1RBUlQJCTB4NTMwOCAvKiBTdGFydCB0aGUgY2Ryb20gZHJpdmUgKi8KKyNkZWZpbmUgQ0RST01FSkVDVAkJMHg1MzA5IC8qIEVqZWN0cyB0aGUgY2Ryb20gbWVkaWEgKi8KKyNkZWZpbmUgQ0RST01WT0xDVFJMCQkweDUzMGEgLyogQ29udHJvbCBvdXRwdXQgdm9sdW1lIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgY2Ryb21fdm9sY3RybCkgKi8KKyNkZWZpbmUgQ0RST01TVUJDSE5MCQkweDUzMGIgLyogUmVhZCBzdWJjaGFubmVsIGRhdGEgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBjZHJvbV9zdWJjaG5sKSAqLworI2RlZmluZSBDRFJPTVJFQURNT0RFMgkJMHg1MzBjIC8qIFJlYWQgQ0RST00gbW9kZSAyIGRhdGEgKDIzMzYgQnl0ZXMpIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgY2Ryb21fcmVhZCkgKi8KKyNkZWZpbmUgQ0RST01SRUFETU9ERTEJCTB4NTMwZCAvKiBSZWFkIENEUk9NIG1vZGUgMSBkYXRhICgyMDQ4IEJ5dGVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgY2Ryb21fcmVhZCkgKi8KKyNkZWZpbmUgQ0RST01SRUFEQVVESU8JCTB4NTMwZSAvKiAoc3RydWN0IGNkcm9tX3JlYWRfYXVkaW8pICovCisjZGVmaW5lIENEUk9NRUpFQ1RfU1cJCTB4NTMwZiAvKiBlbmFibGUoMSkvZGlzYWJsZSgwKSBhdXRvLWVqZWN0aW5nICovCisjZGVmaW5lIENEUk9NTVVMVElTRVNTSU9OCTB4NTMxMCAvKiBPYnRhaW4gdGhlIHN0YXJ0LW9mLWxhc3Qtc2Vzc2lvbiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzIG9mIG11bHRpIHNlc3Npb24gZGlza3MgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBjZHJvbV9tdWx0aXNlc3Npb24pICovCisjZGVmaW5lIENEUk9NX0dFVF9NQ04JCTB4NTMxMSAvKiBPYnRhaW4gdGhlICJVbml2ZXJzYWwgUHJvZHVjdCBDb2RlIiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBhdmFpbGFibGUgKHN0cnVjdCBjZHJvbV9tY24pICovCisjZGVmaW5lIENEUk9NX0dFVF9VUEMJCUNEUk9NX0dFVF9NQ04gIC8qIFRoaXMgb25lIGlzIGRlcHJpY2F0ZWQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0IGhlcmUgYW55d2F5IGZvciBjb21wYXRpYmlsaXR5ICovCisjZGVmaW5lIENEUk9NUkVTRVQJCTB4NTMxMiAvKiBoYXJkLXJlc2V0IHRoZSBkcml2ZSAqLworI2RlZmluZSBDRFJPTVZPTFJFQUQJCTB4NTMxMyAvKiBHZXQgdGhlIGRyaXZlJ3Mgdm9sdW1lIHNldHRpbmcgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IGNkcm9tX3ZvbGN0cmwpICovCisjZGVmaW5lIENEUk9NUkVBRFJBVwkJMHg1MzE0CS8qIHJlYWQgZGF0YSBpbiByYXcgbW9kZSAoMjM1MiBCeXRlcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IGNkcm9tX3JlYWQpICovCisvKiAKKyAqIFRoZXNlIGlvY3RscyBhcmUgdXNlZCBvbmx5IHVzZWQgaW4gYXp0Y2QuYyBhbmQgb3B0Y2QuYworICovCisjZGVmaW5lIENEUk9NUkVBRENPT0tFRAkJMHg1MzE1CS8qIHJlYWQgZGF0YSBpbiBjb29rZWQgbW9kZSAqLworI2RlZmluZSBDRFJPTVNFRUsJCTB4NTMxNiAgLyogc2VlayBtc2YgYWRkcmVzcyAqLworICAKKy8qCisgKiBUaGlzIGlvY3RsIGlzIG9ubHkgdXNlZCBieSB0aGUgc2NzaS1jZCBkcml2ZXIuICAKKyAgIEl0IGlzIGZvciBwbGF5aW5nIGF1ZGlvIGluIGxvZ2ljYWwgYmxvY2sgYWRkcmVzc2luZyBtb2RlLgorICovCisjZGVmaW5lIENEUk9NUExBWUJMSwkJMHg1MzE3CS8qIChzdHJ1Y3QgY2Ryb21fYmxrKSAqLworCisvKiAKKyAqIFRoZXNlIGlvY3RscyBhcmUgb25seSB1c2VkIGluIG9wdGNkLmMKKyAqLworI2RlZmluZSBDRFJPTVJFQURBTEwJCTB4NTMxOAkvKiByZWFkIGFsbCAyNjQ2IGJ5dGVzICovCisKKy8qIAorICogVGhlc2UgaW9jdGxzIGFyZSAobm93KSBvbmx5IGluIGlkZS1jZC5jIGZvciBjb250cm9sbGluZyAKKyAqIGRyaXZlIHNwaW5kb3duIHRpbWUuICBUaGV5IHNob3VsZCBiZSBpbXBsZW1lbnRlZCBpbiB0aGUKKyAqIFVuaWZvcm0gZHJpdmVyLCB2aWEgZ2VuZXJpYyBwYWNrZXQgY29tbWFuZHMsIEdQQ01EX01PREVfU0VMRUNUXzEwLAorICogR1BDTURfTU9ERV9TRU5TRV8xMCBhbmQgdGhlIEdQTU9ERV9QT1dFUl9QQUdFLi4uCisgKiAgLUVyaWsKKyAqLworI2RlZmluZSBDRFJPTUdFVFNQSU5ET1dOICAgICAgICAweDUzMWQKKyNkZWZpbmUgQ0RST01TRVRTUElORE9XTiAgICAgICAgMHg1MzFlCisKKy8qIAorICogVGhlc2UgaW9jdGxzIGFyZSBpbXBsZW1lbnRlZCB0aHJvdWdoIHRoZSB1bmlmb3JtIENELVJPTSBkcml2ZXIKKyAqIFRoZXkgX3dpbGxfIGJlIGFkb3B0ZWQgYnkgYWxsIENELVJPTSBkcml2ZXJzLCB3aGVuIGFsbCB0aGUgQ0QtUk9NCisgKiBkcml2ZXJzIGFyZSBldmVudHVhbGx5IHBvcnRlZCB0byB0aGUgdW5pZm9ybSBDRC1ST00gZHJpdmVyIGludGVyZmFjZS4KKyAqLworI2RlZmluZSBDRFJPTUNMT1NFVFJBWQkJMHg1MzE5CS8qIHBlbmRhbnQgb2YgQ0RST01FSkVDVCAqLworI2RlZmluZSBDRFJPTV9TRVRfT1BUSU9OUwkweDUzMjAgIC8qIFNldCBiZWhhdmlvciBvcHRpb25zICovCisjZGVmaW5lIENEUk9NX0NMRUFSX09QVElPTlMJMHg1MzIxICAvKiBDbGVhciBiZWhhdmlvciBvcHRpb25zICovCisjZGVmaW5lIENEUk9NX1NFTEVDVF9TUEVFRAkweDUzMjIgIC8qIFNldCB0aGUgQ0QtUk9NIHNwZWVkICovCisjZGVmaW5lIENEUk9NX1NFTEVDVF9ESVNDCTB4NTMyMyAgLyogU2VsZWN0IGRpc2MgKGZvciBqdWtlLWJveGVzKSAqLworI2RlZmluZSBDRFJPTV9NRURJQV9DSEFOR0VECTB4NTMyNSAgLyogQ2hlY2sgaXMgbWVkaWEgY2hhbmdlZCAgKi8KKyNkZWZpbmUgQ0RST01fRFJJVkVfU1RBVFVTCTB4NTMyNiAgLyogR2V0IHRyYXkgcG9zaXRpb24sIGV0Yy4gKi8KKyNkZWZpbmUgQ0RST01fRElTQ19TVEFUVVMJMHg1MzI3ICAvKiBHZXQgZGlzYyB0eXBlLCBldGMuICovCisjZGVmaW5lIENEUk9NX0NIQU5HRVJfTlNMT1RTICAgIDB4NTMyOCAgLyogR2V0IG51bWJlciBvZiBzbG90cyAqLworI2RlZmluZSBDRFJPTV9MT0NLRE9PUgkJMHg1MzI5ICAvKiBsb2NrIG9yIHVubG9jayBkb29yICovCisjZGVmaW5lIENEUk9NX0RFQlVHCQkweDUzMzAJLyogVHVybiBkZWJ1ZyBtZXNzYWdlcyBvbi9vZmYgKi8KKyNkZWZpbmUgQ0RST01fR0VUX0NBUEFCSUxJVFkJMHg1MzMxCS8qIGdldCBjYXBhYmlsaXRpZXMgKi8KKworLyogTm90ZSB0aGF0IHNjc2kvc2NzaV9pb2N0bC5oIGFsc28gdXNlcyAweDUzODIgLSAweDUzODYuCisgKiBGdXR1cmUgQ0RST00gaW9jdGxzIHNob3VsZCBiZSBrZXB0IGJlbG93IDB4NTM3RgorICovCisKKy8qIFRoaXMgaW9jdGwgaXMgb25seSB1c2VkIGJ5IHNicGNkIGF0IHRoZSBtb21lbnQgKi8KKyNkZWZpbmUgQ0RST01BVURJT0JVRlNJWiAgICAgICAgMHg1MzgyCS8qIHNldCB0aGUgYXVkaW8gYnVmZmVyIHNpemUgKi8KKwkJCQkJLyogY29uZmxpY3Qgd2l0aCBTQ1NJX0lPQ1RMX0dFVF9JRExVTiAqLworCisvKiBEVkQtUk9NIFNwZWNpZmljIGlvY3RscyAqLworI2RlZmluZSBEVkRfUkVBRF9TVFJVQ1QJCTB4NTM5MCAgLyogUmVhZCBzdHJ1Y3R1cmUgKi8KKyNkZWZpbmUgRFZEX1dSSVRFX1NUUlVDVAkweDUzOTEgIC8qIFdyaXRlIHN0cnVjdHVyZSAqLworI2RlZmluZSBEVkRfQVVUSAkJMHg1MzkyICAvKiBBdXRoZW50aWNhdGlvbiAqLworCisjZGVmaW5lIENEUk9NX1NFTkRfUEFDS0VUCTB4NTM5MwkvKiBzZW5kIGEgcGFja2V0IHRvIHRoZSBkcml2ZSAqLworI2RlZmluZSBDRFJPTV9ORVhUX1dSSVRBQkxFCTB4NTM5NAkvKiBnZXQgbmV4dCB3cml0YWJsZSBibG9jayAqLworI2RlZmluZSBDRFJPTV9MQVNUX1dSSVRURU4JMHg1Mzk1CS8qIGdldCBsYXN0IGJsb2NrIHdyaXR0ZW4gb24gZGlzYyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ0RST00gSU9DVEwgc3RydWN0dXJlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEFkZHJlc3MgaW4gTVNGIGZvcm1hdCAqLworc3RydWN0IGNkcm9tX21zZjAJCQoreworCV9fdTgJbWludXRlOworCV9fdTgJc2Vjb25kOworCV9fdTgJZnJhbWU7Cit9OworCisvKiBBZGRyZXNzIGluIGVpdGhlciBNU0Ygb3IgbG9naWNhbCBmb3JtYXQgKi8KK3VuaW9uIGNkcm9tX2FkZHIJCQoreworCXN0cnVjdCBjZHJvbV9tc2YwCW1zZjsKKwlpbnQJCQlsYmE7Cit9OworCisvKiBUaGlzIHN0cnVjdCBpcyB1c2VkIGJ5IHRoZSBDRFJPTVBMQVlNU0YgaW9jdGwgKi8gCitzdHJ1Y3QgY2Ryb21fbXNmIAoreworCV9fdTgJY2Rtc2ZfbWluMDsJLyogc3RhcnQgbWludXRlICovCisJX191OAljZG1zZl9zZWMwOwkvKiBzdGFydCBzZWNvbmQgKi8KKwlfX3U4CWNkbXNmX2ZyYW1lMDsJLyogc3RhcnQgZnJhbWUgKi8KKwlfX3U4CWNkbXNmX21pbjE7CS8qIGVuZCBtaW51dGUgKi8KKwlfX3U4CWNkbXNmX3NlYzE7CS8qIGVuZCBzZWNvbmQgKi8KKwlfX3U4CWNkbXNmX2ZyYW1lMTsJLyogZW5kIGZyYW1lICovCit9OworCisvKiBUaGlzIHN0cnVjdCBpcyB1c2VkIGJ5IHRoZSBDRFJPTVBMQVlUUktJTkQgaW9jdGwgKi8KK3N0cnVjdCBjZHJvbV90aSAKK3sKKwlfX3U4CWNkdGlfdHJrMDsJLyogc3RhcnQgdHJhY2sgKi8KKwlfX3U4CWNkdGlfaW5kMDsJLyogc3RhcnQgaW5kZXggKi8KKwlfX3U4CWNkdGlfdHJrMTsJLyogZW5kIHRyYWNrICovCisJX191OAljZHRpX2luZDE7CS8qIGVuZCBpbmRleCAqLworfTsKKworLyogVGhpcyBzdHJ1Y3QgaXMgdXNlZCBieSB0aGUgQ0RST01SRUFEVE9DSERSIGlvY3RsICovCitzdHJ1Y3QgY2Ryb21fdG9jaGRyIAkKK3sKKwlfX3U4CWNkdGhfdHJrMDsJLyogc3RhcnQgdHJhY2sgKi8KKwlfX3U4CWNkdGhfdHJrMTsJLyogZW5kIHRyYWNrICovCit9OworCisvKiBUaGlzIHN0cnVjdCBpcyB1c2VkIGJ5IHRoZSBDRFJPTVZPTENUUkwgYW5kIENEUk9NVk9MUkVBRCBpb2N0bHMgKi8KK3N0cnVjdCBjZHJvbV92b2xjdHJsCit7CisJX191OAljaGFubmVsMDsKKwlfX3U4CWNoYW5uZWwxOworCV9fdTgJY2hhbm5lbDI7CisJX191OAljaGFubmVsMzsKK307CisKKy8qIFRoaXMgc3RydWN0IGlzIHVzZWQgYnkgdGhlIENEUk9NU1VCQ0hOTCBpb2N0bCAqLworc3RydWN0IGNkcm9tX3N1YmNobmwgCit7CisJX191OAljZHNjX2Zvcm1hdDsKKwlfX3U4CWNkc2NfYXVkaW9zdGF0dXM7CisJX191OAljZHNjX2FkcjoJNDsKKwlfX3U4CWNkc2NfY3RybDoJNDsKKwlfX3U4CWNkc2NfdHJrOworCV9fdTgJY2RzY19pbmQ7CisJdW5pb24gY2Ryb21fYWRkciBjZHNjX2Fic2FkZHI7CisJdW5pb24gY2Ryb21fYWRkciBjZHNjX3JlbGFkZHI7Cit9OworCisKKy8qIFRoaXMgc3RydWN0IGlzIHVzZWQgYnkgdGhlIENEUk9NUkVBRFRPQ0VOVFJZIGlvY3RsICovCitzdHJ1Y3QgY2Ryb21fdG9jZW50cnkgCit7CisJX191OAljZHRlX3RyYWNrOworCV9fdTgJY2R0ZV9hZHIJOjQ7CisJX191OAljZHRlX2N0cmwJOjQ7CisJX191OAljZHRlX2Zvcm1hdDsKKwl1bmlvbiBjZHJvbV9hZGRyIGNkdGVfYWRkcjsKKwlfX3U4CWNkdGVfZGF0YW1vZGU7Cit9OworCisvKiBUaGlzIHN0cnVjdCBpcyB1c2VkIGJ5IHRoZSBDRFJPTVJFQURNT0RFMSwgYW5kIENEUk9NUkVBRE1PREUyIGlvY3RscyAqLworc3RydWN0IGNkcm9tX3JlYWQgICAgICAKK3sKKwlpbnQJY2RyZWFkX2xiYTsKKwljaGFyIAkqY2RyZWFkX2J1ZmFkZHI7CisJaW50CWNkcmVhZF9idWZsZW47Cit9OworCisvKiBUaGlzIHN0cnVjdCBpcyB1c2VkIGJ5IHRoZSBDRFJPTVJFQURBVURJTyBpb2N0bCAqLworc3RydWN0IGNkcm9tX3JlYWRfYXVkaW8KK3sKKwl1bmlvbiBjZHJvbV9hZGRyIGFkZHI7IC8qIGZyYW1lIGFkZHJlc3MgKi8KKwlfX3U4IGFkZHJfZm9ybWF0OyAgICAgIC8qIENEUk9NX0xCQSBvciBDRFJPTV9NU0YgKi8KKwlpbnQgbmZyYW1lczsgICAgICAgICAgIC8qIG51bWJlciBvZiAyMzUyLWJ5dGUtZnJhbWVzIHRvIHJlYWQgYXQgb25jZSAqLworCV9fdTggX191c2VyICpidWY7ICAgICAgLyogZnJhbWUgYnVmZmVyIChzaXplOiBuZnJhbWVzKjIzNTIgYnl0ZXMpICovCit9OworCisvKiBUaGlzIHN0cnVjdCBpcyB1c2VkIHdpdGggdGhlIENEUk9NTVVMVElTRVNTSU9OIGlvY3RsICovCitzdHJ1Y3QgY2Ryb21fbXVsdGlzZXNzaW9uCit7CisJdW5pb24gY2Ryb21fYWRkciBhZGRyOyAvKiBmcmFtZSBhZGRyZXNzOiBzdGFydC1vZi1sYXN0LXNlc3Npb24gCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5vdCB0aGUgbmV3ICJmcmFtZSAxNiIhKS4gIE9ubHkgdmFsaWQKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0aGUgInhhX2ZsYWciIGlzIHRydWUuICovCisJX191OCB4YV9mbGFnOyAgICAgICAgLyogMTogImlzIFhBIGRpc2siICovCisJX191OCBhZGRyX2Zvcm1hdDsgICAgLyogQ0RST01fTEJBIG9yIENEUk9NX01TRiAqLworfTsKKworLyogVGhpcyBzdHJ1Y3QgaXMgdXNlZCB3aXRoIHRoZSBDRFJPTV9HRVRfTUNOIGlvY3RsLiAgCisgKiBWZXJ5IGZldyBhdWRpbyBkaXNjcyBhY3R1YWxseSBoYXZlIFVuaXZlcnNhbCBQcm9kdWN0IENvZGUgaW5mb3JtYXRpb24sIAorICogd2hpY2ggc2hvdWxkIGp1c3QgYmUgdGhlIE1lZGl1bSBDYXRhbG9nIE51bWJlciBvbiB0aGUgYm94LiAgQWxzbyBub3RlIAorICogdGhhdCB0aGUgd2F5IHRoZSBjb2RlaXMgd3JpdHRlbiBvbiBDRCBpcyBfbm90XyB1bmlmb3JtIGFjcm9zcyBhbGwgZGlzY3MhCisgKi8gIAorc3RydWN0IGNkcm9tX21jbiAKK3sKKyAgX191OCBtZWRpdW1fY2F0YWxvZ19udW1iZXJbMTRdOyAvKiAxMyBBU0NJSSBkaWdpdHMsIG51bGwtdGVybWluYXRlZCAqLworfTsKKworLyogVGhpcyBpcyB1c2VkIGJ5IHRoZSBDRFJPTVBMQVlCTEsgaW9jdGwgKi8KK3N0cnVjdCBjZHJvbV9ibGsgCit7CisJdW5zaWduZWQgZnJvbTsKKwl1bnNpZ25lZCBzaG9ydCBsZW47Cit9OworCisjZGVmaW5lIENEUk9NX1BBQ0tFVF9TSVpFCTEyCisKKyNkZWZpbmUgQ0dDX0RBVEFfVU5LTk9XTgkwCisjZGVmaW5lIENHQ19EQVRBX1dSSVRFCQkxCisjZGVmaW5lIENHQ19EQVRBX1JFQUQJCTIKKyNkZWZpbmUgQ0dDX0RBVEFfTk9ORQkJMworCisvKiBmb3IgQ0RST01fUEFDS0VUX0NPTU1BTkQgaW9jdGwgKi8KK3N0cnVjdCBjZHJvbV9nZW5lcmljX2NvbW1hbmQKK3sKKwl1bnNpZ25lZCBjaGFyIAkJY21kW0NEUk9NX1BBQ0tFVF9TSVpFXTsKKwl1bnNpZ25lZCBjaGFyCQlfX3VzZXIgKmJ1ZmZlcjsKKwl1bnNpZ25lZCBpbnQgCQlidWZsZW47CisJaW50CQkJc3RhdDsKKwlzdHJ1Y3QgcmVxdWVzdF9zZW5zZQlfX3VzZXIgKnNlbnNlOworCXVuc2lnbmVkIGNoYXIJCWRhdGFfZGlyZWN0aW9uOworCWludAkJCXF1aWV0OworCWludAkJCXRpbWVvdXQ7CisJdm9pZAkJCV9fdXNlciAqcmVzZXJ2ZWRbMV07CS8qIHVudXNlZCwgYWN0dWFsbHkgKi8KK307CisKKy8qCisgKiBBIENELVJPTSBwaHlzaWNhbCBzZWN0b3Igc2l6ZSBpcyAyMDQ4LCAyMDUyLCAyMDU2LCAyMzI0LCAyMzMyLCAyMzM2LCAKKyAqIDIzNDAsIG9yIDIzNTIgYnl0ZXMgbG9uZy4gIAorCisqICAgICAgICAgU2VjdG9yIHR5cGVzIG9mIHRoZSBzdGFuZGFyZCBDRC1ST00gZGF0YSBmb3JtYXRzOgorICoKKyAqIGZvcm1hdCAgIHNlY3RvciB0eXBlICAgICAgICAgICAgICAgdXNlciBkYXRhIHNpemUgKGJ5dGVzKQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgMSAgICAgKFJlZCBCb29rKSAgICBDRC1EQSAgICAgICAgICAyMzUyICAgIChDRF9GUkFNRVNJWkVfUkFXKQorICogICAyICAgICAoWWVsbG93IEJvb2spIE1vZGUxIEZvcm0xICAgIDIwNDggICAgKENEX0ZSQU1FU0laRSkKKyAqICAgMyAgICAgKFllbGxvdyBCb29rKSBNb2RlMSBGb3JtMiAgICAyMzM2ICAgIChDRF9GUkFNRVNJWkVfUkFXMCkKKyAqICAgNCAgICAgKEdyZWVuIEJvb2spICBNb2RlMiBGb3JtMSAgICAyMDQ4ICAgIChDRF9GUkFNRVNJWkUpCisgKiAgIDUgICAgIChHcmVlbiBCb29rKSAgTW9kZTIgRm9ybTIgICAgMjMyOCAgICAoMjMyNCs0IHNwYXJlIGJ5dGVzKQorICoKKyAqCisgKiAgICAgICBUaGUgbGF5b3V0IG9mIHRoZSBzdGFuZGFyZCBDRC1ST00gZGF0YSBmb3JtYXRzOgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIC0gYXVkaW8gKHJlZCk6ICAgICAgICAgICAgICAgICAgfCBhdWRpb19zYW1wbGVfYnl0ZXMgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAyMzUyICAgICAgICB8CisgKgorICogLSBkYXRhICh5ZWxsb3csIG1vZGUxKTogICAgICAgICB8IHN5bmMgLSBoZWFkIC0gZGF0YSAtIEVEQyAtIHplcm8gLSBFQ0MgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxMiAgLSAgIDQgIC0gMjA0OCAtICA0ICAtICAgOCAgLSAyNzYgfAorICoKKyAqIC0gZGF0YSAoeWVsbG93LCBtb2RlMik6ICAgICAgICAgfCBzeW5jIC0gaGVhZCAtIGRhdGEgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxMiAgLSAgIDQgIC0gMjMzNiB8CisgKgorICogLSBYQSBkYXRhIChncmVlbiwgbW9kZTIgZm9ybTEpOiB8IHN5bmMgLSBoZWFkIC0gc3ViIC0gZGF0YSAtIEVEQyAtIEVDQyB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEyICAtICAgNCAgLSAgOCAgLSAyMDQ4IC0gIDQgIC0gMjc2IHwKKyAqCisgKiAtIFhBIGRhdGEgKGdyZWVuLCBtb2RlMiBmb3JtMik6IHwgc3luYyAtIGhlYWQgLSBzdWIgLSBkYXRhIC0gU3BhcmUgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxMiAgLSAgIDQgIC0gIDggIC0gMjMyNCAtICA0ICAgIHwKKyAqCisgKi8KKworLyogU29tZSBnZW5lcmFsbHkgdXNlZnVsIENELVJPTSBpbmZvcm1hdGlvbiAtLSBtb3N0bHkgYmFzZWQgb24gdGhlIGFib3ZlICovCisjZGVmaW5lIENEX01JTlMgICAgICAgICAgICAgIDc0IC8qIG1heC4gbWludXRlcyBwZXIgQ0QsIG5vdCByZWFsbHkgYSBsaW1pdCAqLworI2RlZmluZSBDRF9TRUNTICAgICAgICAgICAgICA2MCAvKiBzZWNvbmRzIHBlciBtaW51dGUgKi8KKyNkZWZpbmUgQ0RfRlJBTUVTICAgICAgICAgICAgNzUgLyogZnJhbWVzIHBlciBzZWNvbmQgKi8KKyNkZWZpbmUgQ0RfU1lOQ19TSVpFICAgICAgICAgMTIgLyogMTIgc3luYyBieXRlcyBwZXIgcmF3IGRhdGEgZnJhbWUgKi8KKyNkZWZpbmUgQ0RfTVNGX09GRlNFVCAgICAgICAxNTAgLyogTVNGIG51bWJlcmluZyBvZmZzZXQgb2YgZmlyc3QgZnJhbWUgKi8KKyNkZWZpbmUgQ0RfQ0hVTktfU0laRSAgICAgICAgMjQgLyogbG93ZXN0LWxldmVsICJkYXRhIGJ5dGVzIHBpZWNlIiAqLworI2RlZmluZSBDRF9OVU1fT0ZfQ0hVTktTICAgICA5OCAvKiBjaHVua3MgcGVyIGZyYW1lICovCisjZGVmaW5lIENEX0ZSQU1FU0laRV9TVUIgICAgIDk2IC8qIHN1YmNoYW5uZWwgZGF0YSAiZnJhbWUiIHNpemUgKi8KKyNkZWZpbmUgQ0RfSEVBRF9TSVpFICAgICAgICAgIDQgLyogaGVhZGVyIChhZGRyZXNzKSBieXRlcyBwZXIgcmF3IGRhdGEgZnJhbWUgKi8KKyNkZWZpbmUgQ0RfU1VCSEVBRF9TSVpFICAgICAgIDggLyogc3ViaGVhZGVyIGJ5dGVzIHBlciByYXcgWEEgZGF0YSBmcmFtZSAqLworI2RlZmluZSBDRF9FRENfU0laRSAgICAgICAgICAgNCAvKiBieXRlcyBFREMgcGVyIG1vc3QgcmF3IGRhdGEgZnJhbWUgdHlwZXMgKi8KKyNkZWZpbmUgQ0RfWkVST19TSVpFICAgICAgICAgIDggLyogYnl0ZXMgemVybyBwZXIgeWVsbG93IGJvb2sgbW9kZSAxIGZyYW1lICovCisjZGVmaW5lIENEX0VDQ19TSVpFICAgICAgICAgMjc2IC8qIGJ5dGVzIEVDQyBwZXIgbW9zdCByYXcgZGF0YSBmcmFtZSB0eXBlcyAqLworI2RlZmluZSBDRF9GUkFNRVNJWkUgICAgICAgMjA0OCAvKiBieXRlcyBwZXIgZnJhbWUsICJjb29rZWQiIG1vZGUgKi8KKyNkZWZpbmUgQ0RfRlJBTUVTSVpFX1JBVyAgIDIzNTIgLyogYnl0ZXMgcGVyIGZyYW1lLCAicmF3IiBtb2RlICovCisjZGVmaW5lIENEX0ZSQU1FU0laRV9SQVdFUiAyNjQ2IC8qIFRoZSBtYXhpbXVtIHBvc3NpYmxlIHJldHVybmVkIGJ5dGVzICovIAorLyogbW9zdCBkcml2ZXMgZG9uJ3QgZGVsaXZlciBldmVyeXRoaW5nOiAqLworI2RlZmluZSBDRF9GUkFNRVNJWkVfUkFXMSAoQ0RfRlJBTUVTSVpFX1JBVy1DRF9TWU5DX1NJWkUpIC8qMjM0MCovCisjZGVmaW5lIENEX0ZSQU1FU0laRV9SQVcwIChDRF9GUkFNRVNJWkVfUkFXLUNEX1NZTkNfU0laRS1DRF9IRUFEX1NJWkUpIC8qMjMzNiovCisKKyNkZWZpbmUgQ0RfWEFfSEVBRCAgICAgICAgKENEX0hFQURfU0laRStDRF9TVUJIRUFEX1NJWkUpIC8qICJiZWZvcmUgZGF0YSIgcGFydCBvZiByYXcgWEEgZnJhbWUgKi8KKyNkZWZpbmUgQ0RfWEFfVEFJTCAgICAgICAgKENEX0VEQ19TSVpFK0NEX0VDQ19TSVpFKSAvKiAiYWZ0ZXIgZGF0YSIgcGFydCBvZiByYXcgWEEgZnJhbWUgKi8KKyNkZWZpbmUgQ0RfWEFfU1lOQ19IRUFEICAgKENEX1NZTkNfU0laRStDRF9YQV9IRUFEKSAvKiBzeW5jIGJ5dGVzICsgaGVhZGVyIG9mIFhBIGZyYW1lICovCisKKy8qIENELVJPTSBhZGRyZXNzIHR5cGVzIChjZHJvbV90b2NlbnRyeS5jZHRlX2Zvcm1hdCkgKi8KKyNkZWZpbmUJQ0RST01fTEJBIDB4MDEgLyogImxvZ2ljYWwgYmxvY2siOiBmaXJzdCBmcmFtZSBpcyAjMCAqLworI2RlZmluZQlDRFJPTV9NU0YgMHgwMiAvKiAibWludXRlLXNlY29uZC1mcmFtZSI6IGJpbmFyeSwgbm90IGJjZCBoZXJlISAqLworCisvKiBiaXQgdG8gdGVsbCB3aGV0aGVyIHRyYWNrIGlzIGRhdGEgb3IgYXVkaW8gKGNkcm9tX3RvY2VudHJ5LmNkdGVfY3RybCkgKi8KKyNkZWZpbmUJQ0RST01fREFUQV9UUkFDSwkweDA0CisKKy8qIFRoZSBsZWFkb3V0IHRyYWNrIGlzIGFsd2F5cyAweEFBLCByZWdhcmRsZXNzIG9mICMgb2YgdHJhY2tzIG9uIGRpc2MgKi8KKyNkZWZpbmUJQ0RST01fTEVBRE9VVAkJMHhBQQorCisvKiBhdWRpbyBzdGF0ZXMgKGZyb20gU0NTSS0yLCBidXQgc2VlbiB3aXRoIG90aGVyIGRyaXZlcywgdG9vKSAqLworI2RlZmluZQlDRFJPTV9BVURJT19JTlZBTElECTB4MDAJLyogYXVkaW8gc3RhdHVzIG5vdCBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUJQ0RST01fQVVESU9fUExBWQkweDExCS8qIGF1ZGlvIHBsYXkgb3BlcmF0aW9uIGluIHByb2dyZXNzICovCisjZGVmaW5lCUNEUk9NX0FVRElPX1BBVVNFRAkweDEyCS8qIGF1ZGlvIHBsYXkgb3BlcmF0aW9uIHBhdXNlZCAqLworI2RlZmluZQlDRFJPTV9BVURJT19DT01QTEVURUQJMHgxMwkvKiBhdWRpbyBwbGF5IHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQgKi8KKyNkZWZpbmUJQ0RST01fQVVESU9fRVJST1IJMHgxNAkvKiBhdWRpbyBwbGF5IHN0b3BwZWQgZHVlIHRvIGVycm9yICovCisjZGVmaW5lCUNEUk9NX0FVRElPX05PX1NUQVRVUwkweDE1CS8qIG5vIGN1cnJlbnQgYXVkaW8gc3RhdHVzIHRvIHJldHVybiAqLworCisvKiBjYXBhYmlsaXR5IGZsYWdzIHVzZWQgd2l0aCB0aGUgdW5pZm9ybSBDRC1ST00gZHJpdmVyICovIAorI2RlZmluZSBDRENfQ0xPU0VfVFJBWQkJMHgxICAgICAvKiBjYWRkeSBzeXN0ZW1zIF9jYW4ndF8gY2xvc2UgKi8KKyNkZWZpbmUgQ0RDX09QRU5fVFJBWQkJMHgyICAgICAvKiBidXQgX2Nhbl8gZWplY3QuICAqLworI2RlZmluZSBDRENfTE9DSwkJMHg0ICAgICAvKiBkaXNhYmxlIG1hbnVhbCBlamVjdCAqLworI2RlZmluZSBDRENfU0VMRUNUX1NQRUVEIAkweDggICAgIC8qIHByb2dyYW1tYWJsZSBzcGVlZCAqLworI2RlZmluZSBDRENfU0VMRUNUX0RJU0MJCTB4MTAgICAgLyogc2VsZWN0IGRpc2MgZnJvbSBqdWtlLWJveCAqLworI2RlZmluZSBDRENfTVVMVElfU0VTU0lPTiAJMHgyMCAgICAvKiByZWFkIHNlc3Npb25zPjEgKi8KKyNkZWZpbmUgQ0RDX01DTgkJCTB4NDAgICAgLyogTWVkaXVtIENhdGFsb2cgTnVtYmVyICovCisjZGVmaW5lIENEQ19NRURJQV9DSEFOR0VEIAkweDgwICAgIC8qIG1lZGlhIGNoYW5nZWQgKi8KKyNkZWZpbmUgQ0RDX1BMQVlfQVVESU8JCTB4MTAwICAgLyogYXVkaW8gZnVuY3Rpb25zICovCisjZGVmaW5lIENEQ19SRVNFVCAgICAgICAgICAgICAgIDB4MjAwICAgLyogaGFyZCByZXNldCBkZXZpY2UgKi8KKyNkZWZpbmUgQ0RDX0lPQ1RMUyAgICAgICAgICAgICAgMHg0MDAgICAvKiBkcml2ZXIgaGFzIG5vbi1zdGFuZGFyZCBpb2N0bHMgKi8KKyNkZWZpbmUgQ0RDX0RSSVZFX1NUQVRVUyAgICAgICAgMHg4MDAgICAvKiBkcml2ZXIgaW1wbGVtZW50cyBkcml2ZSBzdGF0dXMgKi8KKyNkZWZpbmUgQ0RDX0dFTkVSSUNfUEFDS0VUCTB4MTAwMAkvKiBkcml2ZXIgaW1wbGVtZW50cyBnZW5lcmljIHBhY2tldHMgKi8KKyNkZWZpbmUgQ0RDX0NEX1IJCTB4MjAwMAkvKiBkcml2ZSBpcyBhIENELVIgKi8KKyNkZWZpbmUgQ0RDX0NEX1JXCQkweDQwMDAJLyogZHJpdmUgaXMgYSBDRC1SVyAqLworI2RlZmluZSBDRENfRFZECQkJMHg4MDAwCS8qIGRyaXZlIGlzIGEgRFZEICovCisjZGVmaW5lIENEQ19EVkRfUgkJMHgxMDAwMAkvKiBkcml2ZSBjYW4gd3JpdGUgRFZELVIgKi8KKyNkZWZpbmUgQ0RDX0RWRF9SQU0JCTB4MjAwMDAJLyogZHJpdmUgY2FuIHdyaXRlIERWRC1SQU0gKi8KKyNkZWZpbmUgQ0RDX01PX0RSSVZFCQkweDQwMDAwIC8qIGRyaXZlIGlzIGFuIE1PIGRldmljZSAqLworI2RlZmluZSBDRENfTVJXCQkJMHg4MDAwMCAvKiBkcml2ZSBjYW4gcmVhZCBNUlcgKi8KKyNkZWZpbmUgQ0RDX01SV19XCQkweDEwMDAwMCAvKiBkcml2ZSBjYW4gd3JpdGUgTVJXICovCisjZGVmaW5lIENEQ19SQU0JCQkweDIwMDAwMCAvKiBvayB0byBvcGVuIGZvciBXUklURSAqLworCisvKiBkcml2ZSBzdGF0dXMgcG9zc2liaWxpdGllcyByZXR1cm5lZCBieSBDRFJPTV9EUklWRV9TVEFUVVMgaW9jdGwgKi8KKyNkZWZpbmUgQ0RTX05PX0lORk8JCTAJLyogaWYgbm90IGltcGxlbWVudGVkICovCisjZGVmaW5lIENEU19OT19ESVNDCQkxCisjZGVmaW5lIENEU19UUkFZX09QRU4JCTIKKyNkZWZpbmUgQ0RTX0RSSVZFX05PVF9SRUFEWQkzCisjZGVmaW5lIENEU19ESVNDX09LCQk0CisKKy8qIHJldHVybiB2YWx1ZXMgZm9yIHRoZSBDRFJPTV9ESVNDX1NUQVRVUyBpb2N0bCAqLworLyogY2FuIGFsc28gcmV0dXJuIENEU19OT19bSU5GT3xESVNDXSwgZnJvbSBhYm92ZSAqLworI2RlZmluZSBDRFNfQVVESU8JCTEwMAorI2RlZmluZSBDRFNfREFUQV8xCQkxMDEKKyNkZWZpbmUgQ0RTX0RBVEFfMgkJMTAyCisjZGVmaW5lIENEU19YQV8yXzEJCTEwMworI2RlZmluZSBDRFNfWEFfMl8yCQkxMDQKKyNkZWZpbmUgQ0RTX01JWEVECQkxMDUKKworLyogVXNlci1jb25maWd1cmFibGUgYmVoYXZpb3Igb3B0aW9ucyBmb3IgdGhlIHVuaWZvcm0gQ0QtUk9NIGRyaXZlciAqLworI2RlZmluZSBDRE9fQVVUT19DTE9TRQkJMHgxICAgICAvKiBjbG9zZSB0cmF5IG9uIGZpcnN0IG9wZW4oKSAqLworI2RlZmluZSBDRE9fQVVUT19FSkVDVAkJMHgyICAgICAvKiBvcGVuIHRyYXkgb24gbGFzdCByZWxlYXNlKCkgKi8KKyNkZWZpbmUgQ0RPX1VTRV9GRkxBR1MJCTB4NCAgICAgLyogdXNlIE9fTk9OQkxPQ0sgaW5mb3JtYXRpb24gb24gb3BlbiAqLworI2RlZmluZSBDRE9fTE9DSwkJMHg4ICAgICAvKiBsb2NrIHRyYXkgb24gb3BlbiBmaWxlcyAqLworI2RlZmluZSBDRE9fQ0hFQ0tfVFlQRQkJMHgxMCAgICAvKiBjaGVjayB0eXBlIG9uIG9wZW4gZm9yIGRhdGEgKi8KKworLyogU3BlY2lhbCBjb2RlcyB1c2VkIHdoZW4gc3BlY2lmeWluZyBjaGFuZ2VyIHNsb3RzLiAqLworI2RlZmluZSBDRFNMX05PTkUgICAgICAgCSgoaW50KSAofjBVPj4xKS0xKQorI2RlZmluZSBDRFNMX0NVUlJFTlQgICAgCSgoaW50KSAofjBVPj4xKSkKKworLyogRm9yIHBhcnRpdGlvbiBiYXNlZCBtdWx0aXNlc3Npb24gYWNjZXNzLiBJREUgY2FuIGhhbmRsZSA2NCBwYXJ0aXRpb25zCisgKiBwZXIgZHJpdmUgLSBTQ1NJIENELVJPTSdzIHVzZSBtaW5vcnMgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIHRoZQorICogdmFyaW91cyBkcml2ZXMsIHNvIHdlIGNhbid0IGRvIG11bHRpc2Vzc2lvbnMgdGhlIHNhbWUgd2F5IHRoZXJlLgorICogVXNlIHRoZSAtbyBzZXNzaW9uPXggb3B0aW9uIHRvIG1vdW50IG9uIHRoZW0uCisgKi8KKyNkZWZpbmUgQ0RfUEFSVF9NQVgJCTY0CisjZGVmaW5lIENEX1BBUlRfTUFTSwkJKENEX1BBUlRfTUFYIC0gMSkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogR2VuZXJpYyBQYWNrZXQgY29tbWFuZHMsIE1NQyBjb21tYW5kcywgYW5kIHN1Y2gKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAvKiBUaGUgZ2VuZXJpYyBwYWNrZXQgY29tbWFuZCBvcGNvZGVzIGZvciBDRC9EVkQgTG9naWNhbCBVbml0cywKKyAqIEZyb20gVGFibGUgNTcgb2YgdGhlIFNGRjgwOTAgVmVyLiAzIChNdC4gRnVqaSkgZHJhZnQgc3RhbmRhcmQuICovCisjZGVmaW5lIEdQQ01EX0JMQU5LCQkJICAgIDB4YTEKKyNkZWZpbmUgR1BDTURfQ0xPU0VfVFJBQ0sJCSAgICAweDViCisjZGVmaW5lIEdQQ01EX0ZMVVNIX0NBQ0hFCQkgICAgMHgzNQorI2RlZmluZSBHUENNRF9GT1JNQVRfVU5JVAkJICAgIDB4MDQKKyNkZWZpbmUgR1BDTURfR0VUX0NPTkZJR1VSQVRJT04JCSAgICAweDQ2CisjZGVmaW5lIEdQQ01EX0dFVF9FVkVOVF9TVEFUVVNfTk9USUZJQ0FUSU9OIDB4NGEKKyNkZWZpbmUgR1BDTURfR0VUX1BFUkZPUk1BTkNFCQkgICAgMHhhYworI2RlZmluZSBHUENNRF9JTlFVSVJZCQkJICAgIDB4MTIKKyNkZWZpbmUgR1BDTURfTE9BRF9VTkxPQUQJCSAgICAweGE2CisjZGVmaW5lIEdQQ01EX01FQ0hBTklTTV9TVEFUVVMJCSAgICAweGJkCisjZGVmaW5lIEdQQ01EX01PREVfU0VMRUNUXzEwCQkgICAgMHg1NQorI2RlZmluZSBHUENNRF9NT0RFX1NFTlNFXzEwCQkgICAgMHg1YQorI2RlZmluZSBHUENNRF9QQVVTRV9SRVNVTUUJCSAgICAweDRiCisjZGVmaW5lIEdQQ01EX1BMQVlfQVVESU9fMTAJCSAgICAweDQ1CisjZGVmaW5lIEdQQ01EX1BMQVlfQVVESU9fTVNGCQkgICAgMHg0NworI2RlZmluZSBHUENNRF9QTEFZX0FVRElPX1RJCQkgICAgMHg0OAorI2RlZmluZSBHUENNRF9QTEFZX0NECQkJICAgIDB4YmMKKyNkZWZpbmUgR1BDTURfUFJFVkVOVF9BTExPV19NRURJVU1fUkVNT1ZBTCAgMHgxZQorI2RlZmluZSBHUENNRF9SRUFEXzEwCQkJICAgIDB4MjgKKyNkZWZpbmUgR1BDTURfUkVBRF8xMgkJCSAgICAweGE4CisjZGVmaW5lIEdQQ01EX1JFQURfQlVGRkVSX0NBUEFDSVRZCSAgICAweDVjCisjZGVmaW5lIEdQQ01EX1JFQURfQ0RWRF9DQVBBQ0lUWQkgICAgMHgyNQorI2RlZmluZSBHUENNRF9SRUFEX0NECQkJICAgIDB4YmUKKyNkZWZpbmUgR1BDTURfUkVBRF9DRF9NU0YJCSAgICAweGI5CisjZGVmaW5lIEdQQ01EX1JFQURfRElTQ19JTkZPCQkgICAgMHg1MQorI2RlZmluZSBHUENNRF9SRUFEX0RWRF9TVFJVQ1RVUkUJICAgIDB4YWQKKyNkZWZpbmUgR1BDTURfUkVBRF9GT1JNQVRfQ0FQQUNJVElFUwkgICAgMHgyMworI2RlZmluZSBHUENNRF9SRUFEX0hFQURFUgkJICAgIDB4NDQKKyNkZWZpbmUgR1BDTURfUkVBRF9UUkFDS19SWk9ORV9JTkZPCSAgICAweDUyCisjZGVmaW5lIEdQQ01EX1JFQURfU1VCQ0hBTk5FTAkJICAgIDB4NDIKKyNkZWZpbmUgR1BDTURfUkVBRF9UT0NfUE1BX0FUSVAJCSAgICAweDQzCisjZGVmaW5lIEdQQ01EX1JFUEFJUl9SWk9ORV9UUkFDSwkgICAgMHg1OAorI2RlZmluZSBHUENNRF9SRVBPUlRfS0VZCQkgICAgMHhhNAorI2RlZmluZSBHUENNRF9SRVFVRVNUX1NFTlNFCQkgICAgMHgwMworI2RlZmluZSBHUENNRF9SRVNFUlZFX1JaT05FX1RSQUNLCSAgICAweDUzCisjZGVmaW5lIEdQQ01EX1NFTkRfQ1VFX1NIRUVUCQkgICAgMHg1ZAorI2RlZmluZSBHUENNRF9TQ0FOCQkJICAgIDB4YmEKKyNkZWZpbmUgR1BDTURfU0VFSwkJCSAgICAweDJiCisjZGVmaW5lIEdQQ01EX1NFTkRfRFZEX1NUUlVDVFVSRQkgICAgMHhiZgorI2RlZmluZSBHUENNRF9TRU5EX0VWRU5UCQkgICAgMHhhMgorI2RlZmluZSBHUENNRF9TRU5EX0tFWQkJCSAgICAweGEzCisjZGVmaW5lIEdQQ01EX1NFTkRfT1BDCQkJICAgIDB4NTQKKyNkZWZpbmUgR1BDTURfU0VUX1JFQURfQUhFQUQJCSAgICAweGE3CisjZGVmaW5lIEdQQ01EX1NFVF9TVFJFQU1JTkcJCSAgICAweGI2CisjZGVmaW5lIEdQQ01EX1NUQVJUX1NUT1BfVU5JVAkJICAgIDB4MWIKKyNkZWZpbmUgR1BDTURfU1RPUF9QTEFZX1NDQU4JCSAgICAweDRlCisjZGVmaW5lIEdQQ01EX1RFU1RfVU5JVF9SRUFEWQkJICAgIDB4MDAKKyNkZWZpbmUgR1BDTURfVkVSSUZZXzEwCQkJICAgIDB4MmYKKyNkZWZpbmUgR1BDTURfV1JJVEVfMTAJCQkgICAgMHgyYQorI2RlZmluZSBHUENNRF9XUklURV9BTkRfVkVSSUZZXzEwCSAgICAweDJlCisvKiBUaGlzIGlzIGxpc3RlZCBhcyBvcHRpb25hbCBpbiBBVEFQSSAyLjYsIGJ1dCBpcyAoY3VyaW91c2x5KSAKKyAqIG1pc3NpbmcgZnJvbSBNdC4gRnVqaSwgVGFibGUgNTcuICBJdCBfaXNfIG1lbnRpb25lZCBpbiBNdC4gRnVqaQorICogVGFibGUgMzc3IGFzIGFuIE1NQyBjb21tYW5kIGZvciBTQ1NpIGRldmljZXMgdGhvdWdoLi4uICBNb3N0IEFUQVBJCisgKiBkcml2ZXMgc3VwcG9ydCBpdC4gKi8KKyNkZWZpbmUgR1BDTURfU0VUX1NQRUVECQkJICAgIDB4YmIKKy8qIFRoaXMgc2VlbXMgdG8gYmUgYSBTQ1NJIHNwZWNpZmljIENELVJPTSBvcGNvZGUgCisgKiB0byBwbGF5IGRhdGEgYXQgdHJhY2svaW5kZXggKi8KKyNkZWZpbmUgR1BDTURfUExBWUFVRElPX1RJCQkgICAgMHg0OAorLyoKKyAqIEZyb20gTVMgTWVkaWEgU3RhdHVzIE5vdGlmaWNhdGlvbiBTdXBwb3J0IFNwZWNpZmljYXRpb24uIEZvcgorICogb2xkZXIgZHJpdmVzIG9ubHkuCisgKi8KKyNkZWZpbmUgR1BDTURfR0VUX01FRElBX1NUQVRVUwkJICAgIDB4ZGEKKworLyogTW9kZSBwYWdlIGNvZGVzIGZvciBtb2RlIHNlbnNlL3NldCAqLworI2RlZmluZSBHUE1PREVfVkVORE9SX1BBR0UJCTB4MDAKKyNkZWZpbmUgR1BNT0RFX1JfV19FUlJPUl9QQUdFCQkweDAxCisjZGVmaW5lIEdQTU9ERV9XUklURV9QQVJNU19QQUdFCQkweDA1CisjZGVmaW5lIEdQTU9ERV9XQ0FDSElOR19QQUdFCQkweDA4CisjZGVmaW5lIEdQTU9ERV9BVURJT19DVExfUEFHRQkJMHgwZQorI2RlZmluZSBHUE1PREVfUE9XRVJfUEFHRQkJMHgxYQorI2RlZmluZSBHUE1PREVfRkFVTFRfRkFJTF9QQUdFCQkweDFjCisjZGVmaW5lIEdQTU9ERV9UT19QUk9URUNUX1BBR0UJCTB4MWQKKyNkZWZpbmUgR1BNT0RFX0NBUEFCSUxJVElFU19QQUdFCTB4MmEKKyNkZWZpbmUgR1BNT0RFX0FMTF9QQUdFUwkJMHgzZgorLyogTm90IGluIE10LiBGdWppLCBidXQgaW4gQVRBUEkgMi42IC0tIGRlcHJpY2F0ZWQgbm93IGluIGZhdm9yCisgKiBvZiBNT0RFX1NFTlNFX1BPV0VSX1BBR0UgKi8KKyNkZWZpbmUgR1BNT0RFX0NEUk9NX1BBR0UJCTB4MGQKKworCisKKy8qIERWRCBzdHJ1Y3QgdHlwZXMgKi8KKyNkZWZpbmUgRFZEX1NUUlVDVF9QSFlTSUNBTAkweDAwCisjZGVmaW5lIERWRF9TVFJVQ1RfQ09QWVJJR0hUCTB4MDEKKyNkZWZpbmUgRFZEX1NUUlVDVF9ESVNDS0VZCTB4MDIKKyNkZWZpbmUgRFZEX1NUUlVDVF9CQ0EJCTB4MDMKKyNkZWZpbmUgRFZEX1NUUlVDVF9NQU5VRkFDVAkweDA0CisKK3N0cnVjdCBkdmRfbGF5ZXIgeworCV9fdTggYm9va192ZXJzaW9uCTogNDsKKwlfX3U4IGJvb2tfdHlwZQkJOiA0OworCV9fdTggbWluX3JhdGUJCTogNDsKKwlfX3U4IGRpc2Nfc2l6ZQkJOiA0OworCV9fdTggbGF5ZXJfdHlwZQkJOiA0OworCV9fdTggdHJhY2tfcGF0aAkJOiAxOworCV9fdTggbmxheWVycwkJOiAyOworCV9fdTggdHJhY2tfZGVuc2l0eQk6IDQ7CisJX191OCBsaW5lYXJfZGVuc2l0eQk6IDQ7CisJX191OCBiY2EJCTogMTsKKwlfX3UzMiBzdGFydF9zZWN0b3I7CisJX191MzIgZW5kX3NlY3RvcjsKKwlfX3UzMiBlbmRfc2VjdG9yX2wwOworfTsKKworI2RlZmluZSBEVkRfTEFZRVJTCTQKKworc3RydWN0IGR2ZF9waHlzaWNhbCB7CisJX191OCB0eXBlOworCV9fdTggbGF5ZXJfbnVtOworCXN0cnVjdCBkdmRfbGF5ZXIgbGF5ZXJbRFZEX0xBWUVSU107Cit9OworCitzdHJ1Y3QgZHZkX2NvcHlyaWdodCB7CisJX191OCB0eXBlOworCisJX191OCBsYXllcl9udW07CisJX191OCBjcHN0OworCV9fdTggcm1pOworfTsKKworc3RydWN0IGR2ZF9kaXNja2V5IHsKKwlfX3U4IHR5cGU7CisKKwl1bnNpZ25lZCBhZ2lkCQk6IDI7CisJX191OCB2YWx1ZVsyMDQ4XTsKK307CisKK3N0cnVjdCBkdmRfYmNhIHsKKwlfX3U4IHR5cGU7CisKKwlpbnQgbGVuOworCV9fdTggdmFsdWVbMTg4XTsKK307CisKK3N0cnVjdCBkdmRfbWFudWZhY3QgeworCV9fdTggdHlwZTsKKworCV9fdTggbGF5ZXJfbnVtOworCWludCBsZW47CisJX191OCB2YWx1ZVsyMDQ4XTsKK307CisKK3R5cGVkZWYgdW5pb24geworCV9fdTggdHlwZTsKKworCXN0cnVjdCBkdmRfcGh5c2ljYWwJcGh5c2ljYWw7CisJc3RydWN0IGR2ZF9jb3B5cmlnaHQJY29weXJpZ2h0OworCXN0cnVjdCBkdmRfZGlzY2tleQlkaXNja2V5OworCXN0cnVjdCBkdmRfYmNhCQliY2E7CisJc3RydWN0IGR2ZF9tYW51ZmFjdAltYW51ZmFjdDsKK30gZHZkX3N0cnVjdDsKKworLyoKKyAqIERWRCBhdXRoZW50aWNhdGlvbiBpb2N0bAorICovCisKKy8qIEF1dGhlbnRpY2F0aW9uIHN0YXRlcyAqLworI2RlZmluZSBEVkRfTFVfU0VORF9BR0lECTAKKyNkZWZpbmUgRFZEX0hPU1RfU0VORF9DSEFMTEVOR0UJMQorI2RlZmluZSBEVkRfTFVfU0VORF9LRVkxCTIKKyNkZWZpbmUgRFZEX0xVX1NFTkRfQ0hBTExFTkdFCTMKKyNkZWZpbmUgRFZEX0hPU1RfU0VORF9LRVkyCTQKKworLyogVGVybWluYXRpb24gc3RhdGVzICovCisjZGVmaW5lIERWRF9BVVRIX0VTVEFCTElTSEVECTUKKyNkZWZpbmUgRFZEX0FVVEhfRkFJTFVSRQk2CisKKy8qIE90aGVyIGZ1bmN0aW9ucyAqLworI2RlZmluZSBEVkRfTFVfU0VORF9USVRMRV9LRVkJNworI2RlZmluZSBEVkRfTFVfU0VORF9BU0YJCTgKKyNkZWZpbmUgRFZEX0lOVkFMSURBVEVfQUdJRAk5CisjZGVmaW5lIERWRF9MVV9TRU5EX1JQQ19TVEFURQkxMAorI2RlZmluZSBEVkRfSE9TVF9TRU5EX1JQQ19TVEFURQkxMQorCisvKiBTdGF0ZSBkYXRhICovCit0eXBlZGVmIF9fdTggZHZkX2tleVs1XTsJCS8qIDQwLWJpdCB2YWx1ZSwgTVNCIGlzIGZpcnN0IGVsZW0uICovCit0eXBlZGVmIF9fdTggZHZkX2NoYWxsZW5nZVsxMF07CS8qIDgwLWJpdCB2YWx1ZSwgTVNCIGlzIGZpcnN0IGVsZW0uICovCisKK3N0cnVjdCBkdmRfbHVfc2VuZF9hZ2lkIHsKKwlfX3U4IHR5cGU7CisJdW5zaWduZWQgYWdpZAkJOiAyOworfTsKKworc3RydWN0IGR2ZF9ob3N0X3NlbmRfY2hhbGxlbmdlIHsKKwlfX3U4IHR5cGU7CisJdW5zaWduZWQgYWdpZAkJOiAyOworCisJZHZkX2NoYWxsZW5nZSBjaGFsOworfTsKKworc3RydWN0IGR2ZF9zZW5kX2tleSB7CisJX191OCB0eXBlOworCXVuc2lnbmVkIGFnaWQJCTogMjsKKworCWR2ZF9rZXkga2V5OworfTsKKworc3RydWN0IGR2ZF9sdV9zZW5kX2NoYWxsZW5nZSB7CisJX191OCB0eXBlOworCXVuc2lnbmVkIGFnaWQJCTogMjsKKworCWR2ZF9jaGFsbGVuZ2UgY2hhbDsKK307CisKKyNkZWZpbmUgRFZEX0NQTV9OT19DT1BZUklHSFQJMAorI2RlZmluZSBEVkRfQ1BNX0NPUFlSSUdIVEVECTEKKworI2RlZmluZSBEVkRfQ1BfU0VDX05PTkUJCTAKKyNkZWZpbmUgRFZEX0NQX1NFQ19FWElTVAkxCisKKyNkZWZpbmUgRFZEX0NHTVNfVU5SRVNUUklDVEVECTAKKyNkZWZpbmUgRFZEX0NHTVNfU0lOR0xFCQkyCisjZGVmaW5lIERWRF9DR01TX1JFU1RSSUNURUQJMworCitzdHJ1Y3QgZHZkX2x1X3NlbmRfdGl0bGVfa2V5IHsKKwlfX3U4IHR5cGU7CisJdW5zaWduZWQgYWdpZAkJOiAyOworCisJZHZkX2tleSB0aXRsZV9rZXk7CisJaW50IGxiYTsKKwl1bnNpZ25lZCBjcG0JCTogMTsKKwl1bnNpZ25lZCBjcF9zZWMJCTogMTsKKwl1bnNpZ25lZCBjZ21zCQk6IDI7Cit9OworCitzdHJ1Y3QgZHZkX2x1X3NlbmRfYXNmIHsKKwlfX3U4IHR5cGU7CisJdW5zaWduZWQgYWdpZAkJOiAyOworCisJdW5zaWduZWQgYXNmCQk6IDE7Cit9OworCitzdHJ1Y3QgZHZkX2hvc3Rfc2VuZF9ycGNzdGF0ZSB7CisJX191OCB0eXBlOworCV9fdTggcGRyYzsKK307CisKK3N0cnVjdCBkdmRfbHVfc2VuZF9ycGNzdGF0ZSB7CisJX191OCB0eXBlCQk6IDI7CisJX191OCB2cmEJCTogMzsKKwlfX3U4IHVjY2EJCTogMzsKKwlfX3U4IHJlZ2lvbl9tYXNrOworCV9fdTggcnBjX3NjaGVtZTsKK307CisKK3R5cGVkZWYgdW5pb24geworCV9fdTggdHlwZTsKKworCXN0cnVjdCBkdmRfbHVfc2VuZF9hZ2lkCQlsc2E7CisJc3RydWN0IGR2ZF9ob3N0X3NlbmRfY2hhbGxlbmdlCWhzYzsKKwlzdHJ1Y3QgZHZkX3NlbmRfa2V5CQlsc2s7CisJc3RydWN0IGR2ZF9sdV9zZW5kX2NoYWxsZW5nZQlsc2M7CisJc3RydWN0IGR2ZF9zZW5kX2tleQkJaHNrOworCXN0cnVjdCBkdmRfbHVfc2VuZF90aXRsZV9rZXkJbHN0azsKKwlzdHJ1Y3QgZHZkX2x1X3NlbmRfYXNmCQlsc2FzZjsKKwlzdHJ1Y3QgZHZkX2hvc3Rfc2VuZF9ycGNzdGF0ZQlocnBjczsKKwlzdHJ1Y3QgZHZkX2x1X3NlbmRfcnBjc3RhdGUJbHJwY3M7Cit9IGR2ZF9hdXRoaW5mbzsKKworc3RydWN0IHJlcXVlc3Rfc2Vuc2UgeworI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOX0JJVEZJRUxEKQorCV9fdTggdmFsaWQJCTogMTsKKwlfX3U4IGVycm9yX2NvZGUJCTogNzsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEKQorCV9fdTggZXJyb3JfY29kZQkJOiA3OworCV9fdTggdmFsaWQJCTogMTsKKyNlbmRpZgorCV9fdTggc2VnbWVudF9udW1iZXI7CisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU5fQklURklFTEQpCisJX191OCByZXNlcnZlZDEJCTogMjsKKwlfX3U4IGlsaQkJOiAxOworCV9fdTggcmVzZXJ2ZWQyCQk6IDE7CisJX191OCBzZW5zZV9rZXkJCTogNDsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEKQorCV9fdTggc2Vuc2Vfa2V5CQk6IDQ7CisJX191OCByZXNlcnZlZDIJCTogMTsKKwlfX3U4IGlsaQkJOiAxOworCV9fdTggcmVzZXJ2ZWQxCQk6IDI7CisjZW5kaWYKKwlfX3U4IGluZm9ybWF0aW9uWzRdOworCV9fdTggYWRkX3NlbnNlX2xlbjsKKwlfX3U4IGNvbW1hbmRfaW5mb1s0XTsKKwlfX3U4IGFzYzsKKwlfX3U4IGFzY3E7CisJX191OCBmcnVjOworCV9fdTggc2tzWzNdOworCV9fdTggYXNiWzQ2XTsKK307CisKKy8qCisgKiBmZWF0dXJlIHByb2ZpbGUKKyAqLworI2RlZmluZSBDREZfUldSVAkweDAwMjAJLyogIlJhbmRvbSBXcml0YWJsZSIgKi8KKyNkZWZpbmUgQ0RGX0hXRE0JMHgwMDI0CS8qICJIYXJkd2FyZSBEZWZlY3QgTWFuYWdlbWVudCIgKi8KKyNkZWZpbmUgQ0RGX01SVyAJMHgwMDI4CisKKy8qCisgKiBtZWRpYSBzdGF0dXMgYml0cworICovCisjZGVmaW5lIENETV9NUldfTk9UTVJXCQkJMAorI2RlZmluZSBDRE1fTVJXX0JHRk9STUFUX0lOQUNUSVZFCTEKKyNkZWZpbmUgQ0RNX01SV19CR0ZPUk1BVF9BQ1RJVkUJCTIKKyNkZWZpbmUgQ0RNX01SV19CR0ZPUk1BVF9DT01QTEVURQkzCisKKy8qCisgKiBtcncgYWRkcmVzcyBzcGFjZXMKKyAqLworI2RlZmluZSBNUldfTEJBX0RNQQkJCTAKKyNkZWZpbmUgTVJXX0xCQV9HQUEJCQkxCisKKy8qCisgKiBtcncgbW9kZSBwYWdlcyAoZmlyc3QgaXMgZGVwcmVjYXRlZCkgLS0gcHJvYmVkIGF0IGluaXQgdGltZSBhbmQKKyAqIGNkaS0+bXJ3X21vZGVfcGFnZSBpcyBzZXQKKyAqLworI2RlZmluZSBNUldfTU9ERV9QQ19QUkUxCQkweDJjCisjZGVmaW5lIE1SV19NT0RFX1BDCQkJMHgwMworCitzdHJ1Y3QgbXJ3X2ZlYXR1cmVfZGVzYyB7CisJX191MTYgZmVhdHVyZV9jb2RlOworI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOX0JJVEZJRUxEKQorCV9fdTggcmVzZXJ2ZWQxCQk6IDI7CisJX191OCBmZWF0dXJlX3ZlcnNpb24JOiA0OworCV9fdTggcGVyc2lzdGVudAkJOiAxOworCV9fdTggY3VycgkJOiAxOworI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fQklURklFTEQpCisJX191OCBjdXJyCQk6IDE7CisJX191OCBwZXJzaXN0ZW50CQk6IDE7CisJX191OCBmZWF0dXJlX3ZlcnNpb24JOiA0OworCV9fdTggcmVzZXJ2ZWQxCQk6IDI7CisjZW5kaWYKKwlfX3U4IGFkZF9sZW47CisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU5fQklURklFTEQpCisJX191OCByZXNlcnZlZDIJCTogNzsKKwlfX3U4IHdyaXRlCQk6IDE7CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTl9CSVRGSUVMRCkKKwlfX3U4IHdyaXRlCQk6IDE7CisJX191OCByZXNlcnZlZDIJCTogNzsKKyNlbmRpZgorCV9fdTggcmVzZXJ2ZWQzOworCV9fdTggcmVzZXJ2ZWQ0OworCV9fdTggcmVzZXJ2ZWQ1OworfTsKKworLyogY2YuIG1tYzRyMDJnLnBkZiA1LjMuMTAgUmFuZG9tIFdyaXRhYmxlIEZlYXR1cmUgKDAwMjBoKSBwZyAxOTcgb2YgNjM1ICovCitzdHJ1Y3QgcndydF9mZWF0dXJlX2Rlc2MgeworCV9fdTE2IGZlYXR1cmVfY29kZTsKKyNpZiBkZWZpbmVkKF9fQklHX0VORElBTl9CSVRGSUVMRCkKKwlfX3U4IHJlc2VydmVkMQkJOiAyOworCV9fdTggZmVhdHVyZV92ZXJzaW9uCTogNDsKKwlfX3U4IHBlcnNpc3RlbnQJCTogMTsKKwlfX3U4IGN1cnIJCTogMTsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEKQorCV9fdTggY3VycgkJOiAxOworCV9fdTggcGVyc2lzdGVudAkJOiAxOworCV9fdTggZmVhdHVyZV92ZXJzaW9uCTogNDsKKwlfX3U4IHJlc2VydmVkMQkJOiAyOworI2VuZGlmCisJX191OCBhZGRfbGVuOworCV9fdTMyIGxhc3RfbGJhOworCV9fdTMyIGJsb2NrX3NpemU7CisJX191MTYgYmxvY2tpbmc7CisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU5fQklURklFTEQpCisJX191OCByZXNlcnZlZDIJCTogNzsKKwlfX3U4IHBhZ2VfcHJlc2VudAk6IDE7CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTl9CSVRGSUVMRCkKKwlfX3U4IHBhZ2VfcHJlc2VudAk6IDE7CisJX191OCByZXNlcnZlZDIJCTogNzsKKyNlbmRpZgorCV9fdTggcmVzZXJ2ZWQzOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgeworCV9fdTE2IGRpc2NfaW5mb3JtYXRpb25fbGVuZ3RoOworI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOX0JJVEZJRUxEKQorCV9fdTggcmVzZXJ2ZWQxCQkJOiAzOworICAgICAgICBfX3U4IGVyYXNhYmxlCQkJOiAxOworICAgICAgICBfX3U4IGJvcmRlcl9zdGF0dXMJCTogMjsKKyAgICAgICAgX191OCBkaXNjX3N0YXR1cwkJOiAyOworI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fQklURklFTEQpCisgICAgICAgIF9fdTggZGlzY19zdGF0dXMJCTogMjsKKyAgICAgICAgX191OCBib3JkZXJfc3RhdHVzCQk6IDI7CisgICAgICAgIF9fdTggZXJhc2FibGUJCQk6IDE7CisJX191OCByZXNlcnZlZDEJCQk6IDM7CisjZWxzZQorI2Vycm9yICJQbGVhc2UgZml4IDxhc20vYnl0ZW9yZGVyLmg+IgorI2VuZGlmCisJX191OCBuX2ZpcnN0X3RyYWNrOworCV9fdTggbl9zZXNzaW9uc19sc2I7CisJX191OCBmaXJzdF90cmFja19sc2I7CisJX191OCBsYXN0X3RyYWNrX2xzYjsKKyNpZiBkZWZpbmVkKF9fQklHX0VORElBTl9CSVRGSUVMRCkKKwlfX3U4IGRpZF92CQkJOiAxOworICAgICAgICBfX3U4IGRiY192CQkJOiAxOworICAgICAgICBfX3U4IHVydQkJCTogMTsKKyAgICAgICAgX191OCByZXNlcnZlZDIJCQk6IDI7CisJX191OCBkYml0CQkJOiAxOworCV9fdTggbXJ3X3N0YXR1cwkJCTogMjsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEKQorCV9fdTggbXJ3X3N0YXR1cwkJCTogMjsKKwlfX3U4IGRiaXQJCQk6IDE7CisgICAgICAgIF9fdTggcmVzZXJ2ZWQyCQkJOiAyOworICAgICAgICBfX3U4IHVydQkJCTogMTsKKyAgICAgICAgX191OCBkYmNfdgkJCTogMTsKKwlfX3U4IGRpZF92CQkJOiAxOworI2VuZGlmCisJX191OCBkaXNjX3R5cGU7CisJX191OCBuX3Nlc3Npb25zX21zYjsKKwlfX3U4IGZpcnN0X3RyYWNrX21zYjsKKwlfX3U4IGxhc3RfdHJhY2tfbXNiOworCV9fdTMyIGRpc2NfaWQ7CisJX191MzIgbGVhZF9pbjsKKwlfX3UzMiBsZWFkX291dDsKKwlfX3U4IGRpc2NfYmFyX2NvZGVbOF07CisJX191OCByZXNlcnZlZDM7CisJX191OCBuX29wYzsKK30gZGlzY19pbmZvcm1hdGlvbjsKKwordHlwZWRlZiBzdHJ1Y3QgeworCV9fdTE2IHRyYWNrX2luZm9ybWF0aW9uX2xlbmd0aDsKKwlfX3U4IHRyYWNrX2xzYjsKKwlfX3U4IHNlc3Npb25fbHNiOworCV9fdTggcmVzZXJ2ZWQxOworI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOX0JJVEZJRUxEKQorCV9fdTggcmVzZXJ2ZWQyCQkJOiAyOworICAgICAgICBfX3U4IGRhbWFnZQkJCTogMTsKKyAgICAgICAgX191OCBjb3B5CQkJOiAxOworICAgICAgICBfX3U4IHRyYWNrX21vZGUJCQk6IDQ7CisJX191OCBydAkJCQk6IDE7CisJX191OCBibGFuawkJCTogMTsKKwlfX3U4IHBhY2tldAkJCTogMTsKKwlfX3U4IGZwCQkJCTogMTsKKwlfX3U4IGRhdGFfbW9kZQkJCTogNDsKKwlfX3U4IHJlc2VydmVkMwkJCTogNjsKKwlfX3U4IGxyYV92CQkJOiAxOworCV9fdTggbndhX3YJCQk6IDE7CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTl9CSVRGSUVMRCkKKyAgICAgICAgX191OCB0cmFja19tb2RlCQkJOiA0OworICAgICAgICBfX3U4IGNvcHkJCQk6IDE7CisgICAgICAgIF9fdTggZGFtYWdlCQkJOiAxOworCV9fdTggcmVzZXJ2ZWQyCQkJOiAyOworCV9fdTggZGF0YV9tb2RlCQkJOiA0OworCV9fdTggZnAJCQkJOiAxOworCV9fdTggcGFja2V0CQkJOiAxOworCV9fdTggYmxhbmsJCQk6IDE7CisJX191OCBydAkJCQk6IDE7CisJX191OCBud2FfdgkJCTogMTsKKwlfX3U4IGxyYV92CQkJOiAxOworCV9fdTggcmVzZXJ2ZWQzCQkJOiA2OworI2VuZGlmCisJX191MzIgdHJhY2tfc3RhcnQ7CisJX191MzIgbmV4dF93cml0YWJsZTsKKwlfX3UzMiBmcmVlX2Jsb2NrczsKKwlfX3UzMiBmaXhlZF9wYWNrZXRfc2l6ZTsKKwlfX3UzMiB0cmFja19zaXplOworCV9fdTMyIGxhc3RfcmVjX2FkZHJlc3M7Cit9IHRyYWNrX2luZm9ybWF0aW9uOworCitzdHJ1Y3QgZmVhdHVyZV9oZWFkZXIgeworCV9fdTMyIGRhdGFfbGVuOworCV9fdTggcmVzZXJ2ZWQxOworCV9fdTggcmVzZXJ2ZWQyOworCV9fdTE2IGN1cnJfcHJvZmlsZTsKK307CisKK3N0cnVjdCBtb2RlX3BhZ2VfaGVhZGVyIHsKKwlfX3UxNiBtb2RlX2RhdGFfbGVuZ3RoOworCV9fdTggbWVkaXVtX3R5cGU7CisJX191OCByZXNlcnZlZDE7CisJX191OCByZXNlcnZlZDI7CisJX191OCByZXNlcnZlZDM7CisJX191MTYgZGVzY19sZW5ndGg7Cit9OworCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CQkvKiBub3QgcmVhbGx5IG5lZWRlZCwgbGF0ZXIuLiAqLworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorCitzdHJ1Y3QgcGFja2V0X2NvbW1hbmQKK3sKKwl1bnNpZ25lZCBjaGFyIAkJY21kW0NEUk9NX1BBQ0tFVF9TSVpFXTsKKwl1bnNpZ25lZCBjaGFyIAkJKmJ1ZmZlcjsKKwl1bnNpZ25lZCBpbnQgCQlidWZsZW47CisJaW50CQkJc3RhdDsKKwlzdHJ1Y3QgcmVxdWVzdF9zZW5zZQkqc2Vuc2U7CisJdW5zaWduZWQgY2hhcgkJZGF0YV9kaXJlY3Rpb247CisJaW50CQkJcXVpZXQ7CisJaW50CQkJdGltZW91dDsKKwl2b2lkCQkJKnJlc2VydmVkWzFdOworfTsKKworLyoKKyAqIF9PTEQgd2lsbCB1c2UgUElPIHRyYW5zZmVyIG9uIGF0YXBpIGRldmljZXMsIF9CUENfKiB3aWxsIHVzZSBETUEKKyAqLworI2RlZmluZSBDRERBX09MRAkJMAkvKiBvbGQgc3R5bGUgKi8KKyNkZWZpbmUgQ0REQV9CUENfU0lOR0xFCQkxCS8qIHNpbmdsZSBmcmFtZSBibG9jayBwYyAqLworI2RlZmluZSBDRERBX0JQQ19GVUxMCQkyCS8qIG11bHRpIGZyYW1lIGJsb2NrIHBjICovCisKKy8qIFVuaWZvcm0gY2Ryb20gZGF0YSBzdHJ1Y3R1cmVzIGZvciBjZHJvbS5jICovCitzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8geworCXN0cnVjdCBjZHJvbV9kZXZpY2Vfb3BzICAqb3BzOyAgLyogbGluayB0byBkZXZpY2Vfb3BzICovCisJc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICpuZXh0OyAvKiBuZXh0IGRldmljZV9pbmZvIGZvciB0aGlzIG1ham9yICovCisJc3RydWN0IGdlbmRpc2sgKmRpc2s7CQkvKiBtYXRjaGluZyBibG9jayBsYXllciBkaXNrICovCisJdm9pZCAqaGFuZGxlOwkJICAgICAgICAvKiBkcml2ZXItZGVwZW5kZW50IGRhdGEgKi8KKy8qIHNwZWNpZmljYXRpb25zICovCisJaW50IG1hc2s7ICAgICAgICAgICAgICAgICAgICAgICAvKiBtYXNrIG9mIGNhcGFiaWxpdHk6IGRpc2FibGVzIHRoZW0gKi8KKwlpbnQgc3BlZWQ7CQkJLyogbWF4aW11bSBzcGVlZCBmb3IgcmVhZGluZyBkYXRhICovCisJaW50IGNhcGFjaXR5OwkJCS8qIG51bWJlciBvZiBkaXNjcyBpbiBqdWtlYm94ICovCisvKiBkZXZpY2UtcmVsYXRlZCBzdG9yYWdlICovCisJaW50IG9wdGlvbnMJCTogMzA7CS8qIG9wdGlvbnMgZmxhZ3MgKi8KKwl1bnNpZ25lZCBtY19mbGFncwk6IDI7CS8qIG1lZGlhIGNoYW5nZSBidWZmZXIgZmxhZ3MgKi8KKyAgICAJaW50IHVzZV9jb3VudDsgICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgdGltZXMgZGV2aWNlIG9wZW5lZCAqLworICAgIAljaGFyIG5hbWVbMjBdOyAgICAgICAgICAgICAgICAgIC8qIG5hbWUgb2YgdGhlIGRldmljZSB0eXBlICovCisvKiBwZXItZGV2aWNlIGZsYWdzICovCisgICAgICAgIF9fdTggc2FueW9fc2xvdAkJOiAyOwkvKiBTYW55byAzIENEIGNoYW5nZXIgc3VwcG9ydCAqLworICAgICAgICBfX3U4IHJlc2VydmVkCQk6IDY7CS8qIG5vdCB1c2VkIHlldCAqLworCWludCBjZGRhX21ldGhvZDsJCS8qIHNlZSBmbGFncyAqLworCV9fdTggbGFzdF9zZW5zZTsKKwlfX3U4IG1lZGlhX3dyaXR0ZW47CQkvKiBkaXJ0eSBmbGFnLCBEVkQrUlcgYm9va2tlZXBpbmcgKi8KKwl1bnNpZ25lZCBzaG9ydCBtbWMzX3Byb2ZpbGU7CS8qIGN1cnJlbnQgTU1DMyBwcm9maWxlICovCisJaW50IGZvcl9kYXRhOworCWludCAoKmV4aXQpKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqKTsKKwlpbnQgbXJ3X21vZGVfcGFnZTsKK307CisKK3N0cnVjdCBjZHJvbV9kZXZpY2Vfb3BzIHsKKy8qIHJvdXRpbmVzICovCisJaW50ICgqb3BlbikgKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqLCBpbnQpOworCXZvaWQgKCpyZWxlYXNlKSAoc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICopOworCWludCAoKmRyaXZlX3N0YXR1cykgKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqLCBpbnQpOworCWludCAoKm1lZGlhX2NoYW5nZWQpIChzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKiwgaW50KTsKKwlpbnQgKCp0cmF5X21vdmUpIChzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKiwgaW50KTsKKwlpbnQgKCpsb2NrX2Rvb3IpIChzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKiwgaW50KTsKKwlpbnQgKCpzZWxlY3Rfc3BlZWQpIChzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKiwgaW50KTsKKwlpbnQgKCpzZWxlY3RfZGlzYykgKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqLCBpbnQpOworCWludCAoKmdldF9sYXN0X3Nlc3Npb24pIChzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKiwKKwkJCQkgc3RydWN0IGNkcm9tX211bHRpc2Vzc2lvbiAqKTsKKwlpbnQgKCpnZXRfbWNuKSAoc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICosCisJCQlzdHJ1Y3QgY2Ryb21fbWNuICopOworCS8qIGhhcmQgcmVzZXQgZGV2aWNlICovCisJaW50ICgqcmVzZXQpIChzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKik7CisJLyogcGxheSBzdHVmZiAqLworCWludCAoKmF1ZGlvX2lvY3RsKSAoc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICosdW5zaWduZWQgaW50LCB2b2lkICopOworCS8qIGRldi1zcGVjaWZpYyAqLworIAlpbnQgKCpkZXZfaW9jdGwpIChzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKiwKKwkJCSAgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTsKKy8qIGRyaXZlciBzcGVjaWZpY2F0aW9ucyAqLworCWNvbnN0IGludCBjYXBhYmlsaXR5OyAgIC8qIGNhcGFiaWxpdHkgZmxhZ3MgKi8KKwlpbnQgbl9taW5vcnM7ICAgICAgICAgICAvKiBudW1iZXIgb2YgYWN0aXZlIG1pbm9yIGRldmljZXMgKi8KKwkvKiBoYW5kbGUgdW5pZm9ybSBwYWNrZXRzIGZvciBzY3NpIHR5cGUgZGV2aWNlcyAoc2NzaSxhdGFwaSkgKi8KKwlpbnQgKCpnZW5lcmljX3BhY2tldCkgKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqLAorCQkJICAgICAgIHN0cnVjdCBwYWNrZXRfY29tbWFuZCAqKTsKK307CisKKy8qIHRoZSBnZW5lcmFsIGJsb2NrX2RldmljZSBvcGVyYXRpb25zIHN0cnVjdHVyZTogKi8KK2V4dGVybiBpbnQgY2Ryb21fb3BlbihzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmNkaSwgc3RydWN0IGlub2RlICppcCwKKwkJCXN0cnVjdCBmaWxlICpmcCk7CitleHRlcm4gaW50IGNkcm9tX3JlbGVhc2Uoc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICpjZGksIHN0cnVjdCBmaWxlICpmcCk7CitleHRlcm4gaW50IGNkcm9tX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmNkaSwKKwkJc3RydWN0IGlub2RlICppcCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworZXh0ZXJuIGludCBjZHJvbV9tZWRpYV9jaGFuZ2VkKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqKTsKKworZXh0ZXJuIGludCByZWdpc3Rlcl9jZHJvbShzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmNkaSk7CitleHRlcm4gaW50IHVucmVnaXN0ZXJfY2Ryb20oc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICpjZGkpOworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgaW50IGRhdGE7CisgICAgaW50IGF1ZGlvOworICAgIGludCBjZGk7CisgICAgaW50IHhhOworICAgIGxvbmcgZXJyb3I7Cit9IHRyYWNrdHlwZTsKKworZXh0ZXJuIGludCBjZHJvbV9nZXRfbGFzdF93cml0dGVuKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpLCBsb25nICpsYXN0X3dyaXR0ZW4pOworZXh0ZXJuIGludCBjZHJvbV9udW1iZXJfb2Zfc2xvdHMoc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICpjZGkpOworZXh0ZXJuIGludCBjZHJvbV9tb2RlX3NlbGVjdChzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmNkaSwKKwkJCSAgICAgc3RydWN0IHBhY2tldF9jb21tYW5kICpjZ2MpOworZXh0ZXJuIGludCBjZHJvbV9tb2RlX3NlbnNlKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpLAorCQkJICAgIHN0cnVjdCBwYWNrZXRfY29tbWFuZCAqY2djLAorCQkJICAgIGludCBwYWdlX2NvZGUsIGludCBwYWdlX2NvbnRyb2wpOworZXh0ZXJuIHZvaWQgaW5pdF9jZHJvbV9jb21tYW5kKHN0cnVjdCBwYWNrZXRfY29tbWFuZCAqY2djLAorCQkJICAgICAgIHZvaWQgKmJ1ZmZlciwgaW50IGxlbiwgaW50IHR5cGUpOworCisvKiBUaGUgU0NTSSBzcGVjIHNheXMgdGhlcmUgY291bGQgYmUgMjU2IHNsb3RzLiAqLworI2RlZmluZSBDRFJPTV9NQVhfU0xPVFMJMjU2CisKK3N0cnVjdCBjZHJvbV9tZWNoc3RhdF9oZWFkZXIgeworI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOX0JJVEZJRUxEKQorCV9fdTggZmF1bHQgICAgICAgICA6IDE7CisJX191OCBjaGFuZ2VyX3N0YXRlIDogMjsKKwlfX3U4IGN1cnNsb3QgICAgICAgOiA1OworCV9fdTggbWVjaF9zdGF0ZSAgICA6IDM7CisJX191OCBkb29yX29wZW4gICAgIDogMTsKKwlfX3U4IHJlc2VydmVkMSAgICAgOiA0OworI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fQklURklFTEQpCisJX191OCBjdXJzbG90ICAgICAgIDogNTsKKwlfX3U4IGNoYW5nZXJfc3RhdGUgOiAyOworCV9fdTggZmF1bHQgICAgICAgICA6IDE7CisJX191OCByZXNlcnZlZDEgICAgIDogNDsKKwlfX3U4IGRvb3Jfb3BlbiAgICAgOiAxOworCV9fdTggbWVjaF9zdGF0ZSAgICA6IDM7CisjZW5kaWYKKwlfX3U4ICAgICBjdXJsYmFbM107CisJX191OCAgICAgbnNsb3RzOworCV9fdTE2IHNsb3RfdGFibGVsZW47Cit9OworCitzdHJ1Y3QgY2Ryb21fc2xvdCB7CisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU5fQklURklFTEQpCisJX191OCBkaXNjX3ByZXNlbnQgOiAxOworCV9fdTggcmVzZXJ2ZWQxICAgIDogNjsKKwlfX3U4IGNoYW5nZSAgICAgICA6IDE7CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTl9CSVRGSUVMRCkKKwlfX3U4IGNoYW5nZSAgICAgICA6IDE7CisJX191OCByZXNlcnZlZDEgICAgOiA2OworCV9fdTggZGlzY19wcmVzZW50IDogMTsKKyNlbmRpZgorCV9fdTggcmVzZXJ2ZWQyWzNdOworfTsKKworc3RydWN0IGNkcm9tX2NoYW5nZXJfaW5mbyB7CisJc3RydWN0IGNkcm9tX21lY2hzdGF0X2hlYWRlciBoZHI7CisJc3RydWN0IGNkcm9tX3Nsb3Qgc2xvdHNbQ0RST01fTUFYX1NMT1RTXTsKK307CisKK3R5cGVkZWYgZW51bSB7CisJbWVjaHR5cGVfY2FkZHkgPSAwLAorCW1lY2h0eXBlX3RyYXkgID0gMSwKKwltZWNodHlwZV9wb3B1cCA9IDIsCisJbWVjaHR5cGVfaW5kaXZpZHVhbF9jaGFuZ2VyID0gNCwKKwltZWNodHlwZV9jYXJ0cmlkZ2VfY2hhbmdlciAgPSA1Cit9IG1lY2h0eXBlX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyNpZiBkZWZpbmVkKF9fQklHX0VORElBTl9CSVRGSUVMRCkKKwlfX3U4IHBzCQkJOiAxOworCV9fdTggcmVzZXJ2ZWQxCQk6IDE7CisJX191OCBwYWdlX2NvZGUJCTogNjsKKyAgICAgICAgX191OCBwYWdlX2xlbmd0aDsKKwlfX3U4IHJlc2VydmVkMgkJOiAxOworCV9fdTggYnVmZQkJOiAxOworCV9fdTggbHNfdgkJOiAxOworCV9fdTggdGVzdF93cml0ZQkJOiAxOworICAgICAgICBfX3U4IHdyaXRlX3R5cGUJCTogNDsKKwlfX3U4IG11bHRpX3Nlc3Npb24JOiAyOyAvKiBvciBib3JkZXIsIERWRCAqLworCV9fdTggZnAJCQk6IDE7CisJX191OCBjb3B5CQk6IDE7CisJX191OCB0cmFja19tb2RlCQk6IDQ7CisJX191OCByZXNlcnZlZDMJCTogNDsKKwlfX3U4IGRhdGFfYmxvY2tfdHlwZQk6IDQ7CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTl9CSVRGSUVMRCkKKwlfX3U4IHBhZ2VfY29kZQkJOiA2OworCV9fdTggcmVzZXJ2ZWQxCQk6IDE7CisJX191OCBwcwkJCTogMTsKKyAgICAgICAgX191OCBwYWdlX2xlbmd0aDsKKyAgICAgICAgX191OCB3cml0ZV90eXBlCQk6IDQ7CisJX191OCB0ZXN0X3dyaXRlCQk6IDE7CisJX191OCBsc192CQk6IDE7CisJX191OCBidWZlCQk6IDE7CisJX191OCByZXNlcnZlZDIJCTogMTsKKwlfX3U4IHRyYWNrX21vZGUJCTogNDsKKwlfX3U4IGNvcHkJCTogMTsKKwlfX3U4IGZwCQkJOiAxOworCV9fdTggbXVsdGlfc2Vzc2lvbgk6IDI7IC8qIG9yIGJvcmRlciwgRFZEICovCisJX191OCBkYXRhX2Jsb2NrX3R5cGUJOiA0OworCV9fdTggcmVzZXJ2ZWQzCQk6IDQ7CisjZW5kaWYKKwlfX3U4IGxpbmtfc2l6ZTsKKwlfX3U4IHJlc2VydmVkNDsKKyNpZiBkZWZpbmVkKF9fQklHX0VORElBTl9CSVRGSUVMRCkKKwlfX3U4IHJlc2VydmVkNQkJOiAyOworCV9fdTggYXBwX2NvZGUJCTogNjsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEKQorCV9fdTggYXBwX2NvZGUJCTogNjsKKwlfX3U4IHJlc2VydmVkNQkJOiAyOworI2VuZGlmCisJX191OCBzZXNzaW9uX2Zvcm1hdDsKKwlfX3U4IHJlc2VydmVkNjsKKwlfX3UzMiBwYWNrZXRfc2l6ZTsKKwlfX3UxNiBhdWRpb19wYXVzZTsKKwlfX3U4IG1jblsxNl07CisJX191OCBpc3JjWzE2XTsKKwlfX3U4IHN1YmhkcjA7CisJX191OCBzdWJoZHIxOworCV9fdTggc3ViaGRyMjsKKwlfX3U4IHN1YmhkcjM7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHdyaXRlX3BhcmFtX3BhZ2U7CisKK3N0cnVjdCBtb2Rlc2VsX2hlYWQKK3sKKwlfX3U4CXJlc2VydmVkMTsKKwlfX3U4CW1lZGl1bTsKKwlfX3U4CXJlc2VydmVkMjsKKwlfX3U4CWJsb2NrX2Rlc2NfbGVuZ3RoOworCV9fdTgJZGVuc2l0eTsKKwlfX3U4CW51bWJlcl9vZl9ibG9ja3NfaGk7CisJX191OAludW1iZXJfb2ZfYmxvY2tzX21lZDsKKwlfX3U4CW51bWJlcl9vZl9ibG9ja3NfbG87CisJX191OAlyZXNlcnZlZDM7CisJX191OAlibG9ja19sZW5ndGhfaGk7CisJX191OAlibG9ja19sZW5ndGhfbWVkOworCV9fdTgJYmxvY2tfbGVuZ3RoX2xvOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgeworCV9fdTE2IHJlcG9ydF9rZXlfbGVuZ3RoOworCV9fdTggcmVzZXJ2ZWQxOworCV9fdTggcmVzZXJ2ZWQyOworI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOX0JJVEZJRUxEKQorCV9fdTggdHlwZV9jb2RlCQkJOiAyOworCV9fdTggdnJhCQkJOiAzOworCV9fdTggdWNjYQkJCTogMzsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEKQorCV9fdTggdWNjYQkJCTogMzsKKwlfX3U4IHZyYQkJCTogMzsKKwlfX3U4IHR5cGVfY29kZQkJCTogMjsKKyNlbmRpZgorCV9fdTggcmVnaW9uX21hc2s7CisJX191OCBycGNfc2NoZW1lOworCV9fdTggcmVzZXJ2ZWQzOworfSBycGNfc3RhdGVfdDsKKworc3RydWN0IGV2ZW50X2hlYWRlciB7CisJX191MTYgZGF0YV9sZW47CisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU5fQklURklFTEQpCisJX191OCBuZWEJCTogMTsKKwlfX3U4IHJlc2VydmVkMQkJOiA0OworCV9fdTggbm90aWZpY2F0aW9uX2NsYXNzCTogMzsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEKQorCV9fdTggbm90aWZpY2F0aW9uX2NsYXNzCTogMzsKKwlfX3U4IHJlc2VydmVkMQkJOiA0OworCV9fdTggbmVhCQk6IDE7CisjZW5kaWYKKwlfX3U4IHN1cHBfZXZlbnRfY2xhc3M7Cit9OworCitzdHJ1Y3QgbWVkaWFfZXZlbnRfZGVzYyB7CisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU5fQklURklFTEQpCisJX191OCByZXNlcnZlZDEJCTogNDsKKwlfX3U4IG1lZGlhX2V2ZW50X2NvZGUJOiA0OworCV9fdTggcmVzZXJ2ZWQyCQk6IDY7CisJX191OCBtZWRpYV9wcmVzZW50CTogMTsKKwlfX3U4IGRvb3Jfb3BlbgkJOiAxOworI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fQklURklFTEQpCisJX191OCBtZWRpYV9ldmVudF9jb2RlCTogNDsKKwlfX3U4IHJlc2VydmVkMQkJOiA0OworCV9fdTggZG9vcl9vcGVuCQk6IDE7CisJX191OCBtZWRpYV9wcmVzZW50CTogMTsKKwlfX3U4IHJlc2VydmVkMgkJOiA2OworI2VuZGlmCisJX191OCBzdGFydF9zbG90OworCV9fdTggZW5kX3Nsb3Q7Cit9OworCitleHRlcm4gaW50IGNkcm9tX2dldF9tZWRpYV9ldmVudChzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmNkaSwgc3RydWN0IG1lZGlhX2V2ZW50X2Rlc2MgKm1lZCk7CisKKyNlbmRpZiAgLyogRW5kIG9mIGtlcm5lbCBvbmx5IHN0dWZmICovIAorCisjZW5kaWYgIC8qIF9MSU5VWF9DRFJPTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NpcmNfYnVmLmggYi9pbmNsdWRlL2xpbnV4L2NpcmNfYnVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJlZDA1OQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvY2lyY19idWYuaApAQCAtMCwwICsxLDMyIEBACisjaWZuZGVmIF9MSU5VWF9DSVJDX0JVRl9ICisjZGVmaW5lIF9MSU5VWF9DSVJDX0JVRl9IIDEKKworc3RydWN0IGNpcmNfYnVmIHsKKwljaGFyICpidWY7CisJaW50IGhlYWQ7CisJaW50IHRhaWw7Cit9OworCisvKiBSZXR1cm4gY291bnQgaW4gYnVmZmVyLiAgKi8KKyNkZWZpbmUgQ0lSQ19DTlQoaGVhZCx0YWlsLHNpemUpICgoKGhlYWQpIC0gKHRhaWwpKSAmICgoc2l6ZSktMSkpCisKKy8qIFJldHVybiBzcGFjZSBhdmFpbGFibGUsIDAuLnNpemUtMS4gIFdlIGFsd2F5cyBsZWF2ZSBvbmUgZnJlZSBjaGFyCisgICBhcyBhIGNvbXBsZXRlbHkgZnVsbCBidWZmZXIgaGFzIGhlYWQgPT0gdGFpbCwgd2hpY2ggaXMgdGhlIHNhbWUgYXMKKyAgIGVtcHR5LiAgKi8KKyNkZWZpbmUgQ0lSQ19TUEFDRShoZWFkLHRhaWwsc2l6ZSkgQ0lSQ19DTlQoKHRhaWwpLCgoaGVhZCkrMSksKHNpemUpKQorCisvKiBSZXR1cm4gY291bnQgdXAgdG8gdGhlIGVuZCBvZiB0aGUgYnVmZmVyLiAgQ2FyZWZ1bGx5IGF2b2lkCisgICBhY2Nlc3NpbmcgaGVhZCBhbmQgdGFpbCBtb3JlIHRoYW4gb25jZSwgc28gdGhleSBjYW4gY2hhbmdlCisgICB1bmRlcm5lYXRoIHVzIHdpdGhvdXQgcmV0dXJuaW5nIGluY29uc2lzdGVudCByZXN1bHRzLiAgKi8KKyNkZWZpbmUgQ0lSQ19DTlRfVE9fRU5EKGhlYWQsdGFpbCxzaXplKSBcCisJKHtpbnQgZW5kID0gKHNpemUpIC0gKHRhaWwpOyBcCisJICBpbnQgbiA9ICgoaGVhZCkgKyBlbmQpICYgKChzaXplKS0xKTsgXAorCSAgbiA8IGVuZCA/IG4gOiBlbmQ7fSkKKworLyogUmV0dXJuIHNwYWNlIGF2YWlsYWJsZSB1cCB0byB0aGUgZW5kIG9mIHRoZSBidWZmZXIuICAqLworI2RlZmluZSBDSVJDX1NQQUNFX1RPX0VORChoZWFkLHRhaWwsc2l6ZSkgXAorCSh7aW50IGVuZCA9IChzaXplKSAtIDEgLSAoaGVhZCk7IFwKKwkgIGludCBuID0gKGVuZCArICh0YWlsKSkgJiAoKHNpemUpLTEpOyBcCisJICBuIDw9IGVuZCA/IG4gOiBlbmQrMTt9KQorCisjZW5kaWYgLyogX0xJTlVYX0NJUkNfQlVGX0ggICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NvYmFsdC1udnJhbS5oIGIvaW5jbHVkZS9saW51eC9jb2JhbHQtbnZyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTQyOTU2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9jb2JhbHQtbnZyYW0uaApAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAqICRJZDogY29iYWx0LW52cmFtLmgsdiAxLjIwIDIwMDEvMTAvMTcgMjM6MTY6NTUgdGhvY2tpbiBFeHAgJAorICogY29iYWx0LW52cmFtLmggOiBkZWZpbmVzIGZvciB0aGUgdmFyaW91cyBmaWVsZHMgaW4gdGhlIGNvYmFsdCBOVlJBTQorICoKKyAqIENvcHlyaWdodCAyMDAxLDIwMDIgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorICovCisKKyNpZm5kZWYgQ09CQUxUX05WUkFNX0gKKyNkZWZpbmUgQ09CQUxUX05WUkFNX0gKKworI2luY2x1ZGUgPGxpbnV4L252cmFtLmg+CisKKyNkZWZpbmUgQ09CVF9DTU9TX0lORk9fTUFYCQkweDdmCS8qIHRvcCBhZGRyZXNzIGFsbG93ZWQgKi8KKyNkZWZpbmUgQ09CVF9DTU9TX0JJT1NfRFJJVkVfSU5GTwkweDEyCS8qIGRyaXZlIGluZm8gd291bGQgZ28gaGVyZSAqLworCisjZGVmaW5lIENPQlRfQ01PU19DS1NfU1RBUlQJCU5WUkFNX09GRlNFVCgweDBlKQorI2RlZmluZSBDT0JUX0NNT1NfQ0tTX0VORAkJTlZSQU1fT0ZGU0VUKDB4N2YpCisKKy8qIGZsYWcgYnl0ZXMgLSAxNiBmbGFncyBmb3Igbm93LCBsZWF2ZSByb29tIGZvciBtb3JlICovCisjZGVmaW5lIENPQlRfQ01PU19GTEFHX0JZVEVfMAkJTlZSQU1fT0ZGU0VUKDB4MTApCisjZGVmaW5lIENPQlRfQ01PU19GTEFHX0JZVEVfMQkJTlZSQU1fT0ZGU0VUKDB4MTEpCisKKy8qIGZsYWdzIGluIGZsYWcgYnl0ZXMgLSB1cCB0byAxNiAqLworI2RlZmluZSBDT0JUX0NNT1NfRkxBR19NSU4JCTB4MDAwMQorI2RlZmluZSBDT0JUX0NNT1NfQ09OU09MRV9GTEFHCQkweDAwMDEgLyogY29uc29sZSBvbi9vZmYgKi8KKyNkZWZpbmUgQ09CVF9DTU9TX0RFQlVHX0ZMQUcJCTB4MDAwMiAvKiBST00gZGVidWcgbWVzc2FnZXMgKi8KKyNkZWZpbmUgQ09CVF9DTU9TX0FVVE9fUFJPTVBUX0ZMQUcJMHgwMDA0IC8qIGJvb3QgdG8gUk9NIHByb21wdD8gKi8KKyNkZWZpbmUgQ09CVF9DTU9TX0NMRUFOX0JPT1RfRkxBRwkweDAwMDggLyogc2V0IGJ5IGEgY2xlYW4gc2h1dGRvd24gKi8KKyNkZWZpbmUgQ09CVF9DTU9TX0hXX05PUFJPQkVfRkxBRwkweDAwMTAgLyogZ28gZWFzeSBvbiB0aGUgcHJvYmluZyAqLworI2RlZmluZSBDT0JUX0NNT1NfU1lTRkFVTFRfRkxBRwkJMHgwMDIwIC8qIHN5c3RlbSBmYXVsdCBkZXRlY3RlZCAqLworI2RlZmluZSBDT0JUX0NNT1NfT09QU1BBTklDX0ZMQUcJMHgwMDQwIC8qIHBhbmljIG9uIG9vcHMgKi8KKyNkZWZpbmUgQ09CVF9DTU9TX0RFTEFZX0NBQ0hFX0ZMQUcJMHgwMDgwIC8qIGRlbGF5IGNhY2hlIGluaXRpYWxpemF0aW9uICovCisjZGVmaW5lIENPQlRfQ01PU19OT0xPR09fRkxBRwkJMHgwMTAwIC8qIGhpZGUgIkMiIGxvZ28gQCBib290ICovCisjZGVmaW5lIENPQlRfQ01PU19WRVJTSU9OX0ZMQUcJCTB4MDIwMCAvKiB0aGUgdmVyc2lvbiBmaWVsZCBpcyB2YWxpZCAqLworI2RlZmluZSBDT0JUX0NNT1NfRkxBR19NQVgJCTB4MDIwMAorCisvKiBsZWF2ZSBieXRlIDB4MTIgYmxhbmsgLSBMaW51eCBsb29rcyBmb3IgZHJpdmUgaW5mbyBoZXJlICovCisKKy8qIENNT1Mgc3RydWN0dXJlIHZlcnNpb24sIHZhbGlkIGlmIENPQlRfQ01PU19WRVJTSU9OX0ZMQUcgaXMgdHJ1ZSAqLworI2RlZmluZSBDT0JUX0NNT1NfVkVSU0lPTgkJTlZSQU1fT0ZGU0VUKDB4MTMpCisjZGVmaW5lIENPQlRfQ01PU19WRVJfQlRPQ09ERQkJMSAvKiBtaW4uIHZlcnNpb24gbmVlZGVkIGZvciBidG9jb2RlICovCisKKy8qIGluZGV4IG9mIGRlZmF1bHQgYm9vdCBtZXRob2QgKi8KKyNkZWZpbmUgQ09CVF9DTU9TX0JPT1RfTUVUSE9ECQlOVlJBTV9PRkZTRVQoMHgyMCkKKyNkZWZpbmUgQ09CVF9DTU9TX0JPT1RfTUVUSE9EX0RJU0sJMAorI2RlZmluZSBDT0JUX0NNT1NfQk9PVF9NRVRIT0RfUk9NCTEKKyNkZWZpbmUgQ09CVF9DTU9TX0JPT1RfTUVUSE9EX05FVAkyCisKKyNkZWZpbmUgQ09CVF9DTU9TX0JPT1RfREVWX01JTgkJTlZSQU1fT0ZGU0VUKDB4MjEpCisvKiBtYWpvciAjLCBtaW5vciAjIG9mIGZpcnN0IHRocm91Z2ggZm91cnRoIGJvb3QgZGV2aWNlICovCisjZGVmaW5lIENPQlRfQ01PU19CT09UX0RFVjBfTUFKCQlOVlJBTV9PRkZTRVQoMHgyMSkKKyNkZWZpbmUgQ09CVF9DTU9TX0JPT1RfREVWMF9NSU4JCU5WUkFNX09GRlNFVCgweDIyKQorI2RlZmluZSBDT0JUX0NNT1NfQk9PVF9ERVYxX01BSgkJTlZSQU1fT0ZGU0VUKDB4MjMpCisjZGVmaW5lIENPQlRfQ01PU19CT09UX0RFVjFfTUlOCQlOVlJBTV9PRkZTRVQoMHgyNCkKKyNkZWZpbmUgQ09CVF9DTU9TX0JPT1RfREVWMl9NQUoJCU5WUkFNX09GRlNFVCgweDI1KQorI2RlZmluZSBDT0JUX0NNT1NfQk9PVF9ERVYyX01JTgkJTlZSQU1fT0ZGU0VUKDB4MjYpCisjZGVmaW5lIENPQlRfQ01PU19CT09UX0RFVjNfTUFKCQlOVlJBTV9PRkZTRVQoMHgyNykKKyNkZWZpbmUgQ09CVF9DTU9TX0JPT1RfREVWM19NSU4JCU5WUkFNX09GRlNFVCgweDI4KQorI2RlZmluZSBDT0JUX0NNT1NfQk9PVF9ERVZfTUFYCQlOVlJBTV9PRkZTRVQoMHgyOCkKKworLyogY2hlY2tzdW0gb2YgYnl0ZXMgMHhlLTB4N2YgKi8KKyNkZWZpbmUgQ09CVF9DTU9TX0NIRUNLU1VNCQlOVlJBTV9PRkZTRVQoMHgyZSkKKworLyogcnVubmluZyB1cHRpbWUgY291bnRlciwgdW5pdHMgb2YgNSBtaW51dGVzICgzMiBiaXRzID1+IDQxMDAwIHllYXJzKSAqLworI2RlZmluZSBDT0JUX0NNT1NfVVBUSU1FXzAJCU5WUkFNX09GRlNFVCgweDMwKQorI2RlZmluZSBDT0JUX0NNT1NfVVBUSU1FXzEJCU5WUkFNX09GRlNFVCgweDMxKQorI2RlZmluZSBDT0JUX0NNT1NfVVBUSU1FXzIJCU5WUkFNX09GRlNFVCgweDMyKQorI2RlZmluZSBDT0JUX0NNT1NfVVBUSU1FXzMJCU5WUkFNX09GRlNFVCgweDMzKQorCisvKiBjb3VudCBvZiBzdWNjZXNzZnVsIGJvb3RzICgzMiBiaXRzKSAqLworI2RlZmluZSBDT0JUX0NNT1NfQk9PVENPVU5UXzAJCU5WUkFNX09GRlNFVCgweDM4KQorI2RlZmluZSBDT0JUX0NNT1NfQk9PVENPVU5UXzEJCU5WUkFNX09GRlNFVCgweDM5KQorI2RlZmluZSBDT0JUX0NNT1NfQk9PVENPVU5UXzIJCU5WUkFNX09GRlNFVCgweDNhKQorI2RlZmluZSBDT0JUX0NNT1NfQk9PVENPVU5UXzMJCU5WUkFNX09GRlNFVCgweDNiKQorCisvKiAxMyBieXRlczogc3lzdGVtIHNlcmlhbCBudW1iZXIsIHNhbWUgYXMgb24gdGhlIGJhY2sgb2YgdGhlIHN5c3RlbSAqLworI2RlZmluZSBDT0JUX0NNT1NfU1lTX1NFUk5VTV9MRU4JMTMKKyNkZWZpbmUgQ09CVF9DTU9TX1NZU19TRVJOVU1fMAkJTlZSQU1fT0ZGU0VUKDB4NDApCisjZGVmaW5lIENPQlRfQ01PU19TWVNfU0VSTlVNXzEJCU5WUkFNX09GRlNFVCgweDQxKQorI2RlZmluZSBDT0JUX0NNT1NfU1lTX1NFUk5VTV8yCQlOVlJBTV9PRkZTRVQoMHg0MikKKyNkZWZpbmUgQ09CVF9DTU9TX1NZU19TRVJOVU1fMwkJTlZSQU1fT0ZGU0VUKDB4NDMpCisjZGVmaW5lIENPQlRfQ01PU19TWVNfU0VSTlVNXzQJCU5WUkFNX09GRlNFVCgweDQ0KQorI2RlZmluZSBDT0JUX0NNT1NfU1lTX1NFUk5VTV81CQlOVlJBTV9PRkZTRVQoMHg0NSkKKyNkZWZpbmUgQ09CVF9DTU9TX1NZU19TRVJOVU1fNgkJTlZSQU1fT0ZGU0VUKDB4NDYpCisjZGVmaW5lIENPQlRfQ01PU19TWVNfU0VSTlVNXzcJCU5WUkFNX09GRlNFVCgweDQ3KQorI2RlZmluZSBDT0JUX0NNT1NfU1lTX1NFUk5VTV84CQlOVlJBTV9PRkZTRVQoMHg0OCkKKyNkZWZpbmUgQ09CVF9DTU9TX1NZU19TRVJOVU1fOQkJTlZSQU1fT0ZGU0VUKDB4NDkpCisjZGVmaW5lIENPQlRfQ01PU19TWVNfU0VSTlVNXzEwCQlOVlJBTV9PRkZTRVQoMHg0YSkKKyNkZWZpbmUgQ09CVF9DTU9TX1NZU19TRVJOVU1fMTEJCU5WUkFNX09GRlNFVCgweDRiKQorI2RlZmluZSBDT0JUX0NNT1NfU1lTX1NFUk5VTV8xMgkJTlZSQU1fT0ZGU0VUKDB4NGMpCisvKiBjaGVja3N1bSBmb3Igc2VyaWFsIG51bSAtIDEgYnl0ZSAqLworI2RlZmluZSBDT0JUX0NNT1NfU1lTX1NFUk5VTV9DU1VNCU5WUkFNX09GRlNFVCgweDRmKQorCisjZGVmaW5lIENPQlRfQ01PU19ST01fUkVWX01BSgkJTlZSQU1fT0ZGU0VUKDB4NTApCisjZGVmaW5lIENPQlRfQ01PU19ST01fUkVWX01JTgkJTlZSQU1fT0ZGU0VUKDB4NTEpCisjZGVmaW5lIENPQlRfQ01PU19ST01fUkVWX1JFVgkJTlZSQU1fT0ZGU0VUKDB4NTIpCisKKyNkZWZpbmUgQ09CVF9DTU9TX0JUT19DT0RFXzAJCU5WUkFNX09GRlNFVCgweDUzKQorI2RlZmluZSBDT0JUX0NNT1NfQlRPX0NPREVfMQkJTlZSQU1fT0ZGU0VUKDB4NTQpCisjZGVmaW5lIENPQlRfQ01PU19CVE9fQ09ERV8yCQlOVlJBTV9PRkZTRVQoMHg1NSkKKyNkZWZpbmUgQ09CVF9DTU9TX0JUT19DT0RFXzMJCU5WUkFNX09GRlNFVCgweDU2KQorCisjZGVmaW5lIENPQlRfQ01PU19CVE9fSVBfQ1NVTQkJTlZSQU1fT0ZGU0VUKDB4NTcpCisjZGVmaW5lIENPQlRfQ01PU19CVE9fSVBfMAkJTlZSQU1fT0ZGU0VUKDB4NTgpCisjZGVmaW5lIENPQlRfQ01PU19CVE9fSVBfMQkJTlZSQU1fT0ZGU0VUKDB4NTkpCisjZGVmaW5lIENPQlRfQ01PU19CVE9fSVBfMgkJTlZSQU1fT0ZGU0VUKDB4NWEpCisjZGVmaW5lIENPQlRfQ01PU19CVE9fSVBfMwkJTlZSQU1fT0ZGU0VUKDB4NWIpCisKKyNlbmRpZiAvKiBDT0JBTFRfTlZSQU1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb2RhLmggYi9pbmNsdWRlL2xpbnV4L2NvZGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmM1YWZjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9jb2RhLmgKQEAgLTAsMCArMSw3ODggQEAKKy8qIAorICAgWW91IG1heSBkaXN0cmlidXRlIHRoaXMgZmlsZSB1bmRlciBlaXRoZXIgb2YgdGhlIHR3byBsaWNlbnNlcyB0aGF0CisgICBmb2xsb3cgYXQgeW91ciBkaXNjcmV0aW9uLgorKi8KKworLyogQkxVUkIgbGdwbAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RhIEZpbGUgU3lzdGVtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWxlYXNlIDUKKworICAgICAgICAgIENvcHlyaWdodCAoYykgMTk4Ny0xOTk5IENhcm5lZ2llIE1lbGxvbiBVbml2ZXJzaXR5CisgICAgICAgICAgICAgICAgICBBZGRpdGlvbmFsIGNvcHlyaWdodHMgbGlzdGVkIGJlbG93CisKK1RoaXMgY29kZSBpcyBkaXN0cmlidXRlZCAiQVMgSVMiIHdpdGhvdXQgd2FycmFudHkgb2YgYW55IGtpbmQgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5jZSBWZXJzaW9uIDIsIGFzCitzaG93biBpbiB0aGUgZmlsZSBMSUNFTlNFLCBvciB1bmRlciB0aGUgbGljZW5zZSBzaG93biBiZWxvdy4gVGhlCit0ZWNobmljYWwgYW5kIGZpbmFuY2lhbCBjb250cmlidXRvcnMgdG8gQ29kYSBhcmUgbGlzdGVkIGluIHRoZSBmaWxlCitDUkVESVRTLgorCisgICAgICAgICAgICAgICAgICAgICAgICBBZGRpdGlvbmFsIGNvcHlyaWdodHMgCisqLworCisvKgorCisgICAgICAgICAgICBDb2RhOiBhbiBFeHBlcmltZW50YWwgRGlzdHJpYnV0ZWQgRmlsZSBTeXN0ZW0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVsZWFzZSA0LjAKKworICAgICAgICAgIENvcHlyaWdodCAoYykgMTk4Ny0xOTk5IENhcm5lZ2llIE1lbGxvbiBVbml2ZXJzaXR5CisgICAgICAgICAgICAgICAgICAgICAgICAgQWxsIFJpZ2h0cyBSZXNlcnZlZAorCitQZXJtaXNzaW9uICB0byAgdXNlLCBjb3B5LCBtb2RpZnkgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCitkb2N1bWVudGF0aW9uIGlzIGhlcmVieSBncmFudGVkLCAgcHJvdmlkZWQgIHRoYXQgIGJvdGggIHRoZSAgY29weXJpZ2h0Citub3RpY2UgIGFuZCAgdGhpcyAgcGVybWlzc2lvbiAgbm90aWNlICBhcHBlYXIgIGluICBhbGwgIGNvcGllcyAgb2YgdGhlCitzb2Z0d2FyZSwgZGVyaXZhdGl2ZSB3b3JrcyBvciAgbW9kaWZpZWQgIHZlcnNpb25zLCAgYW5kICBhbnkgIHBvcnRpb25zCit0aGVyZW9mLCBhbmQgdGhhdCBib3RoIG5vdGljZXMgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5kCit0aGF0IGNyZWRpdCBpcyBnaXZlbiB0byBDYXJuZWdpZSBNZWxsb24gVW5pdmVyc2l0eSAgaW4gIGFsbCAgZG9jdW1lbnRzCithbmQgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlyZWN0IG9yIGluZGlyZWN0IHVzZSBvZiB0aGlzIGNvZGUgb3IgaXRzCitkZXJpdmF0aXZlcy4KKworQ09EQSBJUyBBTiBFWFBFUklNRU5UQUwgU09GVFdBUkUgU1lTVEVNIEFORCBJUyAgS05PV04gIFRPICBIQVZFICBCVUdTLAorU09NRSAgT0YgIFdISUNIIE1BWSBIQVZFIFNFUklPVVMgQ09OU0VRVUVOQ0VTLiAgQ0FSTkVHSUUgTUVMTE9OIEFMTE9XUworRlJFRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSBJTiBJVFMgIkFTIElTIiBDT05ESVRJT04uICAgQ0FSTkVHSUUgIE1FTExPTgorRElTQ0xBSU1TICBBTlkgIExJQUJJTElUWSAgT0YgIEFOWSAgS0lORCAgRk9SICBBTlkgIERBTUFHRVMgV0hBVFNPRVZFUgorUkVTVUxUSU5HIERJUkVDVExZIE9SIElORElSRUNUTFkgRlJPTSBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUgIE9SICBPRgorQU5ZIERFUklWQVRJVkUgV09SSy4KKworQ2FybmVnaWUgIE1lbGxvbiAgZW5jb3VyYWdlcyAgdXNlcnMgIG9mICB0aGlzICBzb2Z0d2FyZSAgdG8gcmV0dXJuIGFueQoraW1wcm92ZW1lbnRzIG9yIGV4dGVuc2lvbnMgdGhhdCAgdGhleSAgbWFrZSwgIGFuZCAgdG8gIGdyYW50ICBDYXJuZWdpZQorTWVsbG9uIHRoZSByaWdodHMgdG8gcmVkaXN0cmlidXRlIHRoZXNlIGNoYW5nZXMgd2l0aG91dCBlbmN1bWJyYW5jZS4KKyovCisKKy8qCisgKgorICogQmFzZWQgb24gY2ZzLmggZnJvbSBNYWNoLCBidXQgcmV2YW1wZWQgZm9yIGluY3JlYXNlZCBzaW1wbGljaXR5LgorICogTGludXggbW9kaWZpY2F0aW9ucyBieSAKKyAqIFBldGVyIEJyYWFtLCBBdWcgMTk5NgorICovCisKKyNpZm5kZWYgX0NPREFfSEVBREVSXworI2RlZmluZSBfQ09EQV9IRUFERVJfCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworLyogQ2F0Y2ggbmV3IF9LRVJORUwgZGVmbiBmb3IgTmV0QlNEIGFuZCBESkdQUC9fX0NZR1dJTjMyX18gKi8KKyNpZiBkZWZpbmVkKF9fTmV0QlNEX18pIHx8IFwKKyAgKChkZWZpbmVkKERKR1BQKSB8fCBkZWZpbmVkKF9fQ1lHV0lOMzJfXykpICYmICFkZWZpbmVkKEtFUk5FTCkpCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYgCisKKyNpZm5kZWYgQ09EQV9NQVhTWU1MSU5LUworI2RlZmluZSBDT0RBX01BWFNZTUxJTktTIDEwCisjZW5kaWYKKworI2lmIGRlZmluZWQoREpHUFApIHx8IGRlZmluZWQoX19DWUdXSU4zMl9fKQorI2lmZGVmIEtFUk5FTAordHlwZWRlZiB1bnNpZ25lZCBsb25nIHVfbG9uZzsKK3R5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1X3Nob3J0OwordHlwZWRlZiB1X2xvbmcgaW5vX3Q7Cit0eXBlZGVmIHVfbG9uZyBkZXZfdDsKK3R5cGVkZWYgdm9pZCAqIGNhZGRyX3Q7CisjaWZkZWYgRE9TCit0eXBlZGVmIHVuc2lnbmVkIF9faW50NjQgdV9xdWFkX3Q7CisjZWxzZSAKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHVfcXVhZF90OworI2VuZGlmCisKKyNkZWZpbmUgaW5saW5lCisKK3N0cnVjdCB0aW1lc3BlYyB7CisgICAgICAgIGxvbmcgICAgICAgdHNfc2VjOworICAgICAgICBsb25nICAgICAgIHRzX25zZWM7Cit9OworI2Vsc2UgIC8qIERKR1BQIGJ1dCBub3QgS0VSTkVMICovCisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHVfcXVhZF90OworI2VuZGlmIC8qICFLRVJORUwgKi8KKyNlbmRpZiAvKiAhREpHUFAgKi8KKworCisjaWYgZGVmaW5lZChfX2xpbnV4X18pCisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2RlZmluZSBjZGV2X3QgdV9xdWFkX3QKKyNpZm5kZWYgX19LRVJORUxfXworI2lmICFkZWZpbmVkKF9VUVVBRF9UXykgJiYgKCFkZWZpbmVkKF9fR0xJQkNfXykgfHwgX19HTElCQ19fIDwgMikKKyNkZWZpbmUgX1VRVUFEX1RfIDEKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHVfcXVhZF90OworI2VuZGlmCisjZWxzZSAvKl9fS0VSTkVMX18gKi8KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHVfcXVhZF90OworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbHNlCisjZGVmaW5lIGNkZXZfdCBkZXZfdAorI2VuZGlmCisKKyNpZmRlZiBfX0NZR1dJTjMyX18KK3N0cnVjdCB0aW1lc3BlYyB7CisgICAgICAgIHRpbWVfdCAgdHZfc2VjOyAgICAgICAgIC8qIHNlY29uZHMgKi8KKyAgICAgICAgbG9uZyAgICB0dl9uc2VjOyAgICAgICAgLyogbmFub3NlY29uZHMgKi8KK307CisjZW5kaWYKKworI2lmbmRlZiBfX0JJVF9UWVBFU19ERUZJTkVEX18KKyNkZWZpbmUgX19CSVRfVFlQRVNfREVGSU5FRF9fCit0eXBlZGVmIHNpZ25lZCBjaGFyCSAgICAgIGludDhfdDsKK3R5cGVkZWYgdW5zaWduZWQgY2hhcgkgICAgdV9pbnQ4X3Q7Cit0eXBlZGVmIHNob3J0CQkgICAgIGludDE2X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CSAgIHVfaW50MTZfdDsKK3R5cGVkZWYgaW50CQkgICAgIGludDMyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludAkgICB1X2ludDMyX3Q7CisjZW5kaWYKKworCisvKgorICogQ2ZzIGNvbnN0YW50cworICovCisjZGVmaW5lIENPREFfTUFYTkFNTEVOICAgMjU1CisjZGVmaW5lIENPREFfTUFYUEFUSExFTiAgMTAyNAorI2RlZmluZSBDT0RBX01BWFNZTUxJTksgIDEwCisKKy8qIHRoZXNlIGFyZSBDb2RhJ3MgdmVyc2lvbiBvZiBPX1JET05MWSBldGMgY29tYmluYXRpb25zCisgKiB0byBkZWFsIHdpdGggVkZTIG9wZW4gbW9kZXMKKyAqLworI2RlZmluZQlDX09fUkVBRAkweDAwMQorI2RlZmluZQlDX09fV1JJVEUgICAgICAgMHgwMDIKKyNkZWZpbmUgQ19PX1RSVU5DICAgICAgIDB4MDEwCisjZGVmaW5lIENfT19FWENMCTB4MTAwCisjZGVmaW5lIENfT19DUkVBVAkweDIwMAorCisvKiB0aGVzZSBhcmUgdG8gZmluZCBtb2RlIGJpdHMgaW4gVmVudXMgKi8gCisjZGVmaW5lIENfTV9SRUFEICAwMDQwMAorI2RlZmluZSBDX01fV1JJVEUgMDAyMDAKKworLyogZm9yIGFjY2VzcyBWZW51cyB3aWxsIHVzZSAqLworI2RlZmluZSBDX0FfQ19PSyAgICA4ICAgICAgICAgICAgICAgLyogVGVzdCBmb3Igd3JpdGluZyB1cG9uIGNyZWF0ZS4gICovCisjZGVmaW5lIENfQV9SX09LICAgIDQgICAgICAgICAgICAgICAvKiBUZXN0IGZvciByZWFkIHBlcm1pc3Npb24uICAqLworI2RlZmluZSBDX0FfV19PSyAgICAyICAgICAgICAgICAgICAgLyogVGVzdCBmb3Igd3JpdGUgcGVybWlzc2lvbi4gICovCisjZGVmaW5lIENfQV9YX09LICAgIDEgICAgICAgICAgICAgICAvKiBUZXN0IGZvciBleGVjdXRlIHBlcm1pc3Npb24uICAqLworI2RlZmluZSBDX0FfRl9PSyAgICAwICAgICAgICAgICAgICAgLyogVGVzdCBmb3IgZXhpc3RlbmNlLiAgKi8KKworCisKKyNpZm5kZWYgX1ZFTlVTX0RJUkVOVF9UXworI2RlZmluZSBfVkVOVVNfRElSRU5UX1RfIDEKK3N0cnVjdCB2ZW51c19kaXJlbnQgeworICAgICAgICB1X2ludDMyX3QgZF9maWxlbm87CQkvKiBmaWxlIG51bWJlciBvZiBlbnRyeSAqLworICAgICAgICB1X2ludDE2X3QgZF9yZWNsZW47CQkvKiBsZW5ndGggb2YgdGhpcyByZWNvcmQgKi8KKyAgICAgICAgdV9pbnQ4X3QgIGRfdHlwZTsJCQkvKiBmaWxlIHR5cGUsIHNlZSBiZWxvdyAqLworICAgICAgICB1X2ludDhfdCAgZF9uYW1sZW47CQkvKiBsZW5ndGggb2Ygc3RyaW5nIGluIGRfbmFtZSAqLworICAgICAgICBjaGFyCSAgZF9uYW1lW0NPREFfTUFYTkFNTEVOICsgMV07LyogbmFtZSBtdXN0IGJlIG5vIGxvbmdlciB0aGFuIHRoaXMgKi8KK307CisjdW5kZWYgRElSU0laCisjZGVmaW5lIERJUlNJWihkcCkgICAgICAoKHNpemVvZiAoc3RydWN0IHZlbnVzX2RpcmVudCkgLSAoQ09EQV9NQVhOQU1MRU4rMSkpICsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICgoKGRwKS0+ZF9uYW1sZW4rMSArIDMpICZ+IDMpKQorCisvKgorICogRmlsZSB0eXBlcworICovCisjZGVmaW5lCUNEVF9VTktOT1dOCSAwCisjZGVmaW5lCUNEVF9GSUZPCSAxCisjZGVmaW5lCUNEVF9DSFIJCSAyCisjZGVmaW5lCUNEVF9ESVIJCSA0CisjZGVmaW5lCUNEVF9CTEsJCSA2CisjZGVmaW5lCUNEVF9SRUcJCSA4CisjZGVmaW5lCUNEVF9MTksJCTEwCisjZGVmaW5lCUNEVF9TT0NLCTEyCisjZGVmaW5lCUNEVF9XSFQJCTE0CisKKy8qCisgKiBDb252ZXJ0IGJldHdlZW4gc3RhdCBzdHJ1Y3R1cmUgdHlwZXMgYW5kIGRpcmVjdG9yeSB0eXBlcy4KKyAqLworI2RlZmluZQlJRlRPQ0RUKG1vZGUpCSgoKG1vZGUpICYgMDE3MDAwMCkgPj4gMTIpCisjZGVmaW5lCUNEVFRPSUYoZGlydHlwZSkJKChkaXJ0eXBlKSA8PCAxMikKKworI2VuZGlmCisKKyNpZm5kZWYgX1ZVSURfVF8KKyNkZWZpbmUgX1ZVSURfVF8KK3R5cGVkZWYgdV9pbnQzMl90IHZ1aWRfdDsKK3R5cGVkZWYgdV9pbnQzMl90IHZnaWRfdDsKKyNlbmRpZiAvKl9WVUlEX1RfICovCisKKyNpZmRlZiBDT05GSUdfQ09EQV9GU19PTERfQVBJCitzdHJ1Y3QgQ29kYUZpZCB7CisJdV9pbnQzMl90IG9wYXF1ZVszXTsKK307CisKK3N0YXRpYyBfX2lubGluZV9fIGlub190ICBjb2RhX2YyaShzdHJ1Y3QgQ29kYUZpZCAqZmlkKQoreworCWlmICggISBmaWQgKSAKKwkJcmV0dXJuIDA7IAorCWlmIChmaWQtPm9wYXF1ZVsxXSA9PSAweGZmZmZmZmZlIHx8IGZpZC0+b3BhcXVlWzFdID09IDB4ZmZmZmZmZmYpCisJCXJldHVybiAoKGZpZC0+b3BhcXVlWzBdIDw8IDIwKSB8IChmaWQtPm9wYXF1ZVsyXSAmIDB4ZmZmZmYpKTsKKwllbHNlCisJCXJldHVybiAoZmlkLT5vcGFxdWVbMl0gKyAoZmlkLT5vcGFxdWVbMV08PDEwKSArIChmaWQtPm9wYXF1ZVswXTw8MjApKTsKK30KKworc3RydWN0IGNvZGFfY3JlZCB7CisgICAgdnVpZF90IGNyX3VpZCwgY3JfZXVpZCwgY3Jfc3VpZCwgY3JfZnN1aWQ7IC8qIFJlYWwsIGVmZnR2ZSwgc2V0LCBmcyB1aWQqLworICAgIHZnaWRfdCBjcl9ncm91cGlkLCBjcl9lZ2lkLCBjcl9zZ2lkLCBjcl9mc2dpZDsgLyogc2FtZSBmb3IgZ3JvdXBzICovCit9OworCisjZWxzZSAvKiBub3QgZGVmaW5lZChDT05GSUdfQ09EQV9GU19PTERfQVBJKSAqLworCitzdHJ1Y3QgQ29kYUZpZCB7CisJdV9pbnQzMl90IG9wYXF1ZVs0XTsKK307CisKKyNkZWZpbmUgY29kYV9mMmkoZmlkKVwKKwkoZmlkID8gKGZpZC0+b3BhcXVlWzNdIF4gKGZpZC0+b3BhcXVlWzJdPDwxMCkgXiAoZmlkLT5vcGFxdWVbMV08PDIwKSBeIGZpZC0+b3BhcXVlWzBdKSA6IDApCisKKyNlbmRpZgorCisjaWZuZGVmIF9WRU5VU19WQVRUUl9UXworI2RlZmluZSBfVkVOVVNfVkFUVFJfVF8KKy8qCisgKiBWbm9kZSB0eXBlcy4gIFZOT04gbWVhbnMgbm8gdHlwZS4KKyAqLworZW51bSBjb2RhX3Z0eXBlCXsgQ19WTk9OLCBDX1ZSRUcsIENfVkRJUiwgQ19WQkxLLCBDX1ZDSFIsIENfVkxOSywgQ19WU09DSywgQ19WRklGTywgQ19WQkFEIH07CisKK3N0cnVjdCBjb2RhX3ZhdHRyIHsKKwlsb25nICAgICAJdmFfdHlwZTsJLyogdm5vZGUgdHlwZSAoZm9yIGNyZWF0ZSkgKi8KKwl1X3Nob3J0CQl2YV9tb2RlOwkvKiBmaWxlcyBhY2Nlc3MgbW9kZSBhbmQgdHlwZSAqLworCXNob3J0CQl2YV9ubGluazsJLyogbnVtYmVyIG9mIHJlZmVyZW5jZXMgdG8gZmlsZSAqLworCXZ1aWRfdAkJdmFfdWlkOwkJLyogb3duZXIgdXNlciBpZCAqLworCXZnaWRfdAkJdmFfZ2lkOwkJLyogb3duZXIgZ3JvdXAgaWQgKi8KKwlsb25nCQl2YV9maWxlaWQ7CS8qIGZpbGUgaWQgKi8KKwl1X3F1YWRfdAl2YV9zaXplOwkvKiBmaWxlIHNpemUgaW4gYnl0ZXMgKi8KKwlsb25nCQl2YV9ibG9ja3NpemU7CS8qIGJsb2Nrc2l6ZSBwcmVmZXJyZWQgZm9yIGkvbyAqLworCXN0cnVjdCB0aW1lc3BlYwl2YV9hdGltZTsJLyogdGltZSBvZiBsYXN0IGFjY2VzcyAqLworCXN0cnVjdCB0aW1lc3BlYwl2YV9tdGltZTsJLyogdGltZSBvZiBsYXN0IG1vZGlmaWNhdGlvbiAqLworCXN0cnVjdCB0aW1lc3BlYwl2YV9jdGltZTsJLyogdGltZSBmaWxlIGNoYW5nZWQgKi8KKwl1X2xvbmcJCXZhX2dlbjsJCS8qIGdlbmVyYXRpb24gbnVtYmVyIG9mIGZpbGUgKi8KKwl1X2xvbmcJCXZhX2ZsYWdzOwkvKiBmbGFncyBkZWZpbmVkIGZvciBmaWxlICovCisJY2Rldl90CSAgICAgICAgdmFfcmRldjsJLyogZGV2aWNlIHNwZWNpYWwgZmlsZSByZXByZXNlbnRzICovCisJdV9xdWFkX3QJdmFfYnl0ZXM7CS8qIGJ5dGVzIG9mIGRpc2sgc3BhY2UgaGVsZCBieSBmaWxlICovCisJdV9xdWFkX3QJdmFfZmlsZXJldjsJLyogZmlsZSBtb2RpZmljYXRpb24gbnVtYmVyICovCit9OworCisjZW5kaWYgCisKKy8qIHN0cnVjdHVyZSB1c2VkIGJ5IENPREFfU1RBVEZTIGZvciBnZXR0aW5nIGNhY2hlIGluZm9ybWF0aW9uIGZyb20gdmVudXMgKi8KK3N0cnVjdCBjb2RhX3N0YXRmcyB7CisgICAgaW50MzJfdCBmX2Jsb2NrczsKKyAgICBpbnQzMl90IGZfYmZyZWU7CisgICAgaW50MzJfdCBmX2JhdmFpbDsKKyAgICBpbnQzMl90IGZfZmlsZXM7CisgICAgaW50MzJfdCBmX2ZmcmVlOworfTsKKworLyoKKyAqIEtlcm5lbCA8LS0+IFZlbnVzIGNvbW11bmljYXRpb25zLgorICovCisKKyNkZWZpbmUgQ09EQV9ST09UCTIKKyNkZWZpbmUgQ09EQV9PUEVOX0JZX0ZECTMKKyNkZWZpbmUgQ09EQV9PUEVOCTQKKyNkZWZpbmUgQ09EQV9DTE9TRQk1CisjZGVmaW5lIENPREFfSU9DVEwJNgorI2RlZmluZSBDT0RBX0dFVEFUVFIJNworI2RlZmluZSBDT0RBX1NFVEFUVFIJOAorI2RlZmluZSBDT0RBX0FDQ0VTUwk5CisjZGVmaW5lIENPREFfTE9PS1VQCTEwCisjZGVmaW5lIENPREFfQ1JFQVRFCTExCisjZGVmaW5lIENPREFfUkVNT1ZFCTEyCisjZGVmaW5lIENPREFfTElOSwkxMworI2RlZmluZSBDT0RBX1JFTkFNRQkxNAorI2RlZmluZSBDT0RBX01LRElSCTE1CisjZGVmaW5lIENPREFfUk1ESVIJMTYKKyNkZWZpbmUgQ09EQV9TWU1MSU5LCTE4CisjZGVmaW5lIENPREFfUkVBRExJTksJMTkKKyNkZWZpbmUgQ09EQV9GU1lOQwkyMAorI2RlZmluZSBDT0RBX1ZHRVQJMjIKKyNkZWZpbmUgQ09EQV9TSUdOQUwJMjMKKyNkZWZpbmUgQ09EQV9SRVBMQUNFCSAyNCAvKiBET1dOQ0FMTCAqLworI2RlZmluZSBDT0RBX0ZMVVNIICAgICAgIDI1IC8qIERPV05DQUxMICovCisjZGVmaW5lIENPREFfUFVSR0VVU0VSICAgMjYgLyogRE9XTkNBTEwgKi8KKyNkZWZpbmUgQ09EQV9aQVBGSUxFICAgICAyNyAvKiBET1dOQ0FMTCAqLworI2RlZmluZSBDT0RBX1pBUERJUiAgICAgIDI4IC8qIERPV05DQUxMICovCisjZGVmaW5lIENPREFfUFVSR0VGSUQgICAgMzAgLyogRE9XTkNBTEwgKi8KKyNkZWZpbmUgQ09EQV9PUEVOX0JZX1BBVEggMzEKKyNkZWZpbmUgQ09EQV9SRVNPTFZFICAgICAzMgorI2RlZmluZSBDT0RBX1JFSU5URUdSQVRFIDMzCisjZGVmaW5lIENPREFfU1RBVEZTCSAzNAorI2RlZmluZSBDT0RBX1NUT1JFCSAzNQorI2RlZmluZSBDT0RBX1JFTEVBU0UJIDM2CisjZGVmaW5lIENPREFfTkNBTExTIDM3CisKKyNkZWZpbmUgRE9XTkNBTEwob3Bjb2RlKSAob3Bjb2RlID49IENPREFfUkVQTEFDRSAmJiBvcGNvZGUgPD0gQ09EQV9QVVJHRUZJRCkKKworI2RlZmluZSBWQ19NQVhEQVRBU0laRQkgICAgODE5MgorI2RlZmluZSBWQ19NQVhNU0dTSVpFICAgICAgc2l6ZW9mKHVuaW9uIGlucHV0QXJncykrc2l6ZW9mKHVuaW9uIG91dHB1dEFyZ3MpICtcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkNfTUFYREFUQVNJWkUgIAorCisjZGVmaW5lIENJT0NfS0VSTkVMX1ZFUlNJT04gX0lPV1IoJ2MnLCAxMCwgc2l6ZV90KQorCisjaWYgMAorI2RlZmluZSBDT0RBX0tFUk5FTF9WRVJTSU9OIDAgLyogZG9uJ3QgY2FyZSBhYm91dCBrZXJuZWwgdmVyc2lvbiBudW1iZXIgKi8KKyNkZWZpbmUgQ09EQV9LRVJORUxfVkVSU0lPTiAxIC8qIFRoZSBvbGQgdmVudXMgNC42IGNvbXBhdGlibGUgaW50ZXJmYWNlICovCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQ09EQV9GU19PTERfQVBJCisjZGVmaW5lIENPREFfS0VSTkVMX1ZFUlNJT04gMiAvKiB2ZW51c19sb29rdXAgZ290IGFuIGV4dHJhIHBhcmFtZXRlciAqLworI2Vsc2UKKyNkZWZpbmUgQ09EQV9LRVJORUxfVkVSU0lPTiAzIC8qIDEyOC1iaXQgZmlsZSBpZGVudGlmaWVycyAqLworI2VuZGlmCisKKy8qCisgKiAgICAgICAgVmVudXMgPC0+IENvZGEgIFJQQyBhcmd1bWVudHMKKyAqLworc3RydWN0IGNvZGFfaW5faGRyIHsKKyAgICB1X2ludDMyX3Qgb3Bjb2RlOworICAgIHVfaW50MzJfdCB1bmlxdWU7CSAgICAvKiBLZWVwIG11bHRpcGxlIG91dHN0YW5kaW5nIG1zZ3MgZGlzdGluY3QgKi8KKyNpZmRlZiBDT05GSUdfQ09EQV9GU19PTERfQVBJCisgICAgdV9pbnQxNl90IHBpZDsJICAgIC8qIENvbW1vbiB0byBhbGwgKi8KKyAgICB1X2ludDE2X3QgcGdpZDsJICAgIC8qIENvbW1vbiB0byBhbGwgKi8KKyAgICB1X2ludDE2X3Qgc2lkOyAgICAgICAgICAvKiBDb21tb24gdG8gYWxsICovCisgICAgc3RydWN0IGNvZGFfY3JlZCBjcmVkOyAgLyogQ29tbW9uIHRvIGFsbCAqLworI2Vsc2UKKyAgICBwaWRfdCBwaWQ7CisgICAgcGlkX3QgcGdpZDsKKyAgICB2dWlkX3QgdWlkOworI2VuZGlmCit9OworCisvKiBSZWFsbHkgaW1wb3J0YW50IHRoYXQgb3Bjb2RlIGFuZCB1bmlxdWUgYXJlIDFzdCB0d28gZmllbGRzISAqLworc3RydWN0IGNvZGFfb3V0X2hkciB7CisgICAgdV9pbnQzMl90IG9wY29kZTsKKyAgICB1X2ludDMyX3QgdW5pcXVlOwkKKyAgICB1X2ludDMyX3QgcmVzdWx0OworfTsKKworLyogY29kYV9yb290OiBOT19JTiAqLworc3RydWN0IGNvZGFfcm9vdF9vdXQgeworICAgIHN0cnVjdCBjb2RhX291dF9oZHIgb2g7CisgICAgc3RydWN0IENvZGFGaWQgVkZpZDsKK307CisKK3N0cnVjdCBjb2RhX3Jvb3RfaW4geworICAgIHN0cnVjdCBjb2RhX2luX2hkciBpbjsKK307CisKKy8qIGNvZGFfb3BlbjogKi8KK3N0cnVjdCBjb2RhX29wZW5faW4geworICAgIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKKyAgICBzdHJ1Y3QgQ29kYUZpZCBWRmlkOworICAgIGludAlmbGFnczsKK307CisKK3N0cnVjdCBjb2RhX29wZW5fb3V0IHsKKyAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG9oOworICAgIGNkZXZfdAlkZXY7CisgICAgaW5vX3QJaW5vZGU7Cit9OworCisKKy8qIGNvZGFfc3RvcmU6ICovCitzdHJ1Y3QgY29kYV9zdG9yZV9pbiB7CisgICAgc3RydWN0IGNvZGFfaW5faGRyIGloOworICAgIHN0cnVjdCBDb2RhRmlkIFZGaWQ7CisgICAgaW50CWZsYWdzOworfTsKKworc3RydWN0IGNvZGFfc3RvcmVfb3V0IHsKKyAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG91dDsKK307CisKKy8qIGNvZGFfcmVsZWFzZTogKi8KK3N0cnVjdCBjb2RhX3JlbGVhc2VfaW4geworICAgIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKKyAgICBzdHJ1Y3QgQ29kYUZpZCBWRmlkOworICAgIGludAlmbGFnczsKK307CisKK3N0cnVjdCBjb2RhX3JlbGVhc2Vfb3V0IHsKKyAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG91dDsKK307CisKKy8qIGNvZGFfY2xvc2U6ICovCitzdHJ1Y3QgY29kYV9jbG9zZV9pbiB7CisgICAgc3RydWN0IGNvZGFfaW5faGRyIGloOworICAgIHN0cnVjdCBDb2RhRmlkIFZGaWQ7CisgICAgaW50CWZsYWdzOworfTsKKworc3RydWN0IGNvZGFfY2xvc2Vfb3V0IHsKKyAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG91dDsKK307CisKKy8qIGNvZGFfaW9jdGw6ICovCitzdHJ1Y3QgY29kYV9pb2N0bF9pbiB7CisgICAgc3RydWN0IGNvZGFfaW5faGRyIGloOworICAgIHN0cnVjdCBDb2RhRmlkIFZGaWQ7CisgICAgaW50CWNtZDsKKyAgICBpbnQJbGVuOworICAgIGludAlyd2ZsYWc7CisgICAgY2hhciAqZGF0YTsJCQkvKiBQbGFjZSBob2xkZXIgZm9yIGRhdGEuICovCit9OworCitzdHJ1Y3QgY29kYV9pb2N0bF9vdXQgeworICAgIHN0cnVjdCBjb2RhX291dF9oZHIgb2g7CisgICAgaW50CWxlbjsKKyAgICBjYWRkcl90CWRhdGE7CQkvKiBQbGFjZSBob2xkZXIgZm9yIGRhdGEuICovCit9OworCisKKy8qIGNvZGFfZ2V0YXR0cjogKi8KK3N0cnVjdCBjb2RhX2dldGF0dHJfaW4geworICAgIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKKyAgICBzdHJ1Y3QgQ29kYUZpZCBWRmlkOworfTsKKworc3RydWN0IGNvZGFfZ2V0YXR0cl9vdXQgeworICAgIHN0cnVjdCBjb2RhX291dF9oZHIgb2g7CisgICAgc3RydWN0IGNvZGFfdmF0dHIgYXR0cjsKK307CisKKworLyogY29kYV9zZXRhdHRyOiBOT19PVVQgKi8KK3N0cnVjdCBjb2RhX3NldGF0dHJfaW4geworICAgIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKKyAgICBzdHJ1Y3QgQ29kYUZpZCBWRmlkOworICAgIHN0cnVjdCBjb2RhX3ZhdHRyIGF0dHI7Cit9OworCitzdHJ1Y3QgY29kYV9zZXRhdHRyX291dCB7CisgICAgc3RydWN0IGNvZGFfb3V0X2hkciBvdXQ7Cit9OworCisvKiBjb2RhX2FjY2VzczogTk9fT1VUICovCitzdHJ1Y3QgY29kYV9hY2Nlc3NfaW4geworICAgIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKKyAgICBzdHJ1Y3QgQ29kYUZpZCBWRmlkOworICAgIGludAlmbGFnczsKK307CisKK3N0cnVjdCBjb2RhX2FjY2Vzc19vdXQgeworICAgIHN0cnVjdCBjb2RhX291dF9oZHIgb3V0OworfTsKKworCisvKiBsb29rdXAgZmxhZ3MgKi8KKyNkZWZpbmUgQ0xVX0NBU0VfU0VOU0lUSVZFICAgICAweDAxCisjZGVmaW5lIENMVV9DQVNFX0lOU0VOU0lUSVZFICAgMHgwMgorCisvKiBjb2RhX2xvb2t1cDogKi8KK3N0cnVjdCAgY29kYV9sb29rdXBfaW4geworICAgIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKKyAgICBzdHJ1Y3QgQ29kYUZpZCBWRmlkOworICAgIGludCAgICAgICAgIG5hbWU7CQkvKiBQbGFjZSBob2xkZXIgZm9yIGRhdGEuICovCisgICAgaW50ICAgICAgICAgZmxhZ3M7CQorfTsKKworc3RydWN0IGNvZGFfbG9va3VwX291dCB7CisgICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKKyAgICBzdHJ1Y3QgQ29kYUZpZCBWRmlkOworICAgIGludAl2dHlwZTsKK307CisKKworLyogY29kYV9jcmVhdGU6ICovCitzdHJ1Y3QgY29kYV9jcmVhdGVfaW4geworICAgIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKKyAgICBzdHJ1Y3QgQ29kYUZpZCBWRmlkOworICAgIHN0cnVjdCBjb2RhX3ZhdHRyIGF0dHI7CisgICAgaW50IGV4Y2w7CisgICAgaW50IG1vZGU7CisgICAgaW50IAluYW1lOwkJLyogUGxhY2UgaG9sZGVyIGZvciBkYXRhLiAqLworfTsKKworc3RydWN0IGNvZGFfY3JlYXRlX291dCB7CisgICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKKyAgICBzdHJ1Y3QgQ29kYUZpZCBWRmlkOworICAgIHN0cnVjdCBjb2RhX3ZhdHRyIGF0dHI7Cit9OworCisKKy8qIGNvZGFfcmVtb3ZlOiBOT19PVVQgKi8KK3N0cnVjdCBjb2RhX3JlbW92ZV9pbiB7CisgICAgc3RydWN0IGNvZGFfaW5faGRyIGloOworICAgIHN0cnVjdCBDb2RhRmlkIFZGaWQ7CisgICAgaW50IG5hbWU7CQkvKiBQbGFjZSBob2xkZXIgZm9yIGRhdGEuICovCit9OworCitzdHJ1Y3QgY29kYV9yZW1vdmVfb3V0IHsKKyAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG91dDsKK307CisKKy8qIGNvZGFfbGluazogTk9fT1VUICovCitzdHJ1Y3QgY29kYV9saW5rX2luIHsKKyAgICBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7CisgICAgc3RydWN0IENvZGFGaWQgc291cmNlRmlkOwkvKiBjbm9kZSB0byBsaW5rICp0byogKi8KKyAgICBzdHJ1Y3QgQ29kYUZpZCBkZXN0RmlkOwkvKiBEaXJlY3RvcnkgaW4gd2hpY2ggdG8gcGxhY2UgbGluayAqLworICAgIGludCB0bmFtZTsJCS8qIFBsYWNlIGhvbGRlciBmb3IgZGF0YS4gKi8KK307CisKK3N0cnVjdCBjb2RhX2xpbmtfb3V0IHsKKyAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG91dDsKK307CisKKworLyogY29kYV9yZW5hbWU6IE5PX09VVCAqLworc3RydWN0IGNvZGFfcmVuYW1lX2luIHsKKyAgICBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7CisgICAgc3RydWN0IENvZGFGaWQgc291cmNlRmlkOworICAgIGludCAJc3JjbmFtZTsKKyAgICBzdHJ1Y3QgQ29kYUZpZCBkZXN0RmlkOworICAgIGludCAJZGVzdG5hbWU7Cit9OworCitzdHJ1Y3QgY29kYV9yZW5hbWVfb3V0IHsKKyAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG91dDsKK307CisKKy8qIGNvZGFfbWtkaXI6ICovCitzdHJ1Y3QgY29kYV9ta2Rpcl9pbiB7CisgICAgc3RydWN0IGNvZGFfaW5faGRyIGloOworICAgIHN0cnVjdCBDb2RhRmlkIFZGaWQ7CisgICAgc3RydWN0IGNvZGFfdmF0dHIgYXR0cjsKKyAgICBpbnQJICAgbmFtZTsJCS8qIFBsYWNlIGhvbGRlciBmb3IgZGF0YS4gKi8KK307CisKK3N0cnVjdCBjb2RhX21rZGlyX291dCB7CisgICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKKyAgICBzdHJ1Y3QgQ29kYUZpZCBWRmlkOworICAgIHN0cnVjdCBjb2RhX3ZhdHRyIGF0dHI7Cit9OworCisKKy8qIGNvZGFfcm1kaXI6IE5PX09VVCAqLworc3RydWN0IGNvZGFfcm1kaXJfaW4geworICAgIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKKyAgICBzdHJ1Y3QgQ29kYUZpZCBWRmlkOworICAgIGludCBuYW1lOwkJLyogUGxhY2UgaG9sZGVyIGZvciBkYXRhLiAqLworfTsKKworc3RydWN0IGNvZGFfcm1kaXJfb3V0IHsKKyAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG91dDsKK307CisKKy8qIGNvZGFfc3ltbGluazogTk9fT1VUICovCitzdHJ1Y3QgY29kYV9zeW1saW5rX2luIHsKKyAgICBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7CisgICAgc3RydWN0IENvZGFGaWQgVkZpZDsJLyogRGlyZWN0b3J5IHRvIHB1dCBzeW1saW5rIGluICovCisgICAgaW50IHNyY25hbWU7CisgICAgc3RydWN0IGNvZGFfdmF0dHIgYXR0cjsKKyAgICBpbnQgdG5hbWU7Cit9OworCitzdHJ1Y3QgY29kYV9zeW1saW5rX291dCB7CisgICAgc3RydWN0IGNvZGFfb3V0X2hkciBvdXQ7Cit9OworCisvKiBjb2RhX3JlYWRsaW5rOiAqLworc3RydWN0IGNvZGFfcmVhZGxpbmtfaW4geworICAgIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKKyAgICBzdHJ1Y3QgQ29kYUZpZCBWRmlkOworfTsKKworc3RydWN0IGNvZGFfcmVhZGxpbmtfb3V0IHsKKyAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG9oOworICAgIGludAljb3VudDsKKyAgICBjYWRkcl90CWRhdGE7CQkvKiBQbGFjZSBob2xkZXIgZm9yIGRhdGEuICovCit9OworCisKKy8qIGNvZGFfZnN5bmM6IE5PX09VVCAqLworc3RydWN0IGNvZGFfZnN5bmNfaW4geworICAgIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKKyAgICBzdHJ1Y3QgQ29kYUZpZCBWRmlkOworfTsKKworc3RydWN0IGNvZGFfZnN5bmNfb3V0IHsKKyAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG91dDsKK307CisKKy8qIGNvZGFfdmdldDogKi8KK3N0cnVjdCBjb2RhX3ZnZXRfaW4geworICAgIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKKyAgICBzdHJ1Y3QgQ29kYUZpZCBWRmlkOworfTsKKworc3RydWN0IGNvZGFfdmdldF9vdXQgeworICAgIHN0cnVjdCBjb2RhX291dF9oZHIgb2g7CisgICAgc3RydWN0IENvZGFGaWQgVkZpZDsKKyAgICBpbnQJdnR5cGU7Cit9OworCisKKy8qIENPREFfU0lHTkFMIGlzIG91dC1vZi1iYW5kLCBkb2Vzbid0IG5lZWQgZGF0YS4gKi8KKy8qIENPREFfSU5WQUxJREFURSBpcyBhIHZlbnVzLT5rZXJuZWwgY2FsbCAqLworLyogQ09EQV9GTFVTSCBpcyBhIHZlbnVzLT5rZXJuZWwgY2FsbCAqLworCisvKiBjb2RhX3B1cmdldXNlcjogKi8KKy8qIENPREFfUFVSR0VVU0VSIGlzIGEgdmVudXMtPmtlcm5lbCBjYWxsICovCitzdHJ1Y3QgY29kYV9wdXJnZXVzZXJfb3V0IHsKKyAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG9oOworI2lmZGVmIENPTkZJR19DT0RBX0ZTX09MRF9BUEkKKyAgICBzdHJ1Y3QgY29kYV9jcmVkIGNyZWQ7CisjZWxzZQorICAgIHZ1aWRfdCB1aWQ7CisjZW5kaWYKK307CisKKy8qIGNvZGFfemFwZmlsZTogKi8KKy8qIENPREFfWkFQRklMRSBpcyBhIHZlbnVzLT5rZXJuZWwgY2FsbCAqLworc3RydWN0IGNvZGFfemFwZmlsZV9vdXQgeyAgCisgICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKKyAgICBzdHJ1Y3QgQ29kYUZpZCBDb2RhRmlkOworfTsKKworLyogY29kYV96YXBkaXI6ICovCisvKiBDT0RBX1pBUERJUiBpcyBhIHZlbnVzLT5rZXJuZWwgY2FsbCAqLwkKK3N0cnVjdCBjb2RhX3phcGRpcl9vdXQgewkgIAorICAgIHN0cnVjdCBjb2RhX291dF9oZHIgb2g7CisgICAgc3RydWN0IENvZGFGaWQgQ29kYUZpZDsKK307CisKKy8qIGNvZGFfcHVyZ2VmaWQ6ICovCisvKiBDT0RBX1BVUkdFRklEIGlzIGEgdmVudXMtPmtlcm5lbCBjYWxsICovCQorc3RydWN0IGNvZGFfcHVyZ2VmaWRfb3V0IHsgCisgICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKKyAgICBzdHJ1Y3QgQ29kYUZpZCBDb2RhRmlkOworfTsKKworLyogY29kYV9yZXBsYWNlOiAqLworLyogQ09EQV9SRVBMQUNFIGlzIGEgdmVudXMtPmtlcm5lbCBjYWxsICovCQorc3RydWN0IGNvZGFfcmVwbGFjZV9vdXQgeyAvKiBjb2RhX3JlcGxhY2UgaXMgYSB2ZW51cy0+a2VybmVsIGNhbGwgKi8KKyAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG9oOworICAgIHN0cnVjdCBDb2RhRmlkIE5ld0ZpZDsKKyAgICBzdHJ1Y3QgQ29kYUZpZCBPbGRGaWQ7Cit9OworCisvKiBjb2RhX29wZW5fYnlfZmQ6ICovCitzdHJ1Y3QgY29kYV9vcGVuX2J5X2ZkX2luIHsKKyAgICBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7CisgICAgc3RydWN0IENvZGFGaWQgVkZpZDsKKyAgICBpbnQgICAgICAgIGZsYWdzOworfTsKKworc3RydWN0IGNvZGFfb3Blbl9ieV9mZF9vdXQgeworICAgIHN0cnVjdCBjb2RhX291dF9oZHIgb2g7CisgICAgaW50IGZkOworCisjaWZkZWYgX19LRVJORUxfXworICAgIHN0cnVjdCBmaWxlICpmaDsgLyogbm90IHBhc3NlZCBmcm9tIHVzZXJzcGFjZSBidXQgdXNlZCBpbi1rZXJuZWwgb25seSAqLworI2VuZGlmCit9OworCisvKiBjb2RhX29wZW5fYnlfcGF0aDogKi8KK3N0cnVjdCBjb2RhX29wZW5fYnlfcGF0aF9pbiB7CisgICAgc3RydWN0IGNvZGFfaW5faGRyIGloOworICAgIHN0cnVjdCBDb2RhRmlkIFZGaWQ7CisgICAgaW50CWZsYWdzOworfTsKKworc3RydWN0IGNvZGFfb3Blbl9ieV9wYXRoX291dCB7CisgICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKKwlpbnQgcGF0aDsKK307CisKKy8qIGNvZGFfc3RhdGZzOiBOT19JTiAqLworc3RydWN0IGNvZGFfc3RhdGZzX2luIHsKKyAgICBzdHJ1Y3QgY29kYV9pbl9oZHIgaW47Cit9OworCitzdHJ1Y3QgY29kYV9zdGF0ZnNfb3V0IHsKKyAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG9oOworICAgIHN0cnVjdCBjb2RhX3N0YXRmcyBzdGF0OworfTsKKworLyogCisgKiBPY2Nhc2lvbmFsbHksIHdlIGRvbid0IGNhY2hlIHRoZSBmaWQgcmV0dXJuZWQgYnkgQ09EQV9MT09LVVAuIAorICogRm9yIGluc3RhbmNlLCBpZiB0aGUgZmlkIGlzIGluY29uc2lzdGVudC4gCisgKiBUaGlzIGNhc2UgaXMgaGFuZGxlZCBieSBzZXR0aW5nIHRoZSB0b3AgYml0IG9mIHRoZSB0eXBlIHJlc3VsdCBwYXJhbWV0ZXIuCisgKi8KKyNkZWZpbmUgQ09EQV9OT0NBQ0hFICAgICAgICAgIDB4ODAwMDAwMDAKKwordW5pb24gaW5wdXRBcmdzIHsKKyAgICBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7CQkvKiBOQjogZXZlcnkgc3RydWN0IGJlbG93IGJlZ2lucyB3aXRoIGFuIGloICovCisgICAgc3RydWN0IGNvZGFfb3Blbl9pbiBjb2RhX29wZW47CisgICAgc3RydWN0IGNvZGFfc3RvcmVfaW4gY29kYV9zdG9yZTsKKyAgICBzdHJ1Y3QgY29kYV9yZWxlYXNlX2luIGNvZGFfcmVsZWFzZTsKKyAgICBzdHJ1Y3QgY29kYV9jbG9zZV9pbiBjb2RhX2Nsb3NlOworICAgIHN0cnVjdCBjb2RhX2lvY3RsX2luIGNvZGFfaW9jdGw7CisgICAgc3RydWN0IGNvZGFfZ2V0YXR0cl9pbiBjb2RhX2dldGF0dHI7CisgICAgc3RydWN0IGNvZGFfc2V0YXR0cl9pbiBjb2RhX3NldGF0dHI7CisgICAgc3RydWN0IGNvZGFfYWNjZXNzX2luIGNvZGFfYWNjZXNzOworICAgIHN0cnVjdCBjb2RhX2xvb2t1cF9pbiBjb2RhX2xvb2t1cDsKKyAgICBzdHJ1Y3QgY29kYV9jcmVhdGVfaW4gY29kYV9jcmVhdGU7CisgICAgc3RydWN0IGNvZGFfcmVtb3ZlX2luIGNvZGFfcmVtb3ZlOworICAgIHN0cnVjdCBjb2RhX2xpbmtfaW4gY29kYV9saW5rOworICAgIHN0cnVjdCBjb2RhX3JlbmFtZV9pbiBjb2RhX3JlbmFtZTsKKyAgICBzdHJ1Y3QgY29kYV9ta2Rpcl9pbiBjb2RhX21rZGlyOworICAgIHN0cnVjdCBjb2RhX3JtZGlyX2luIGNvZGFfcm1kaXI7CisgICAgc3RydWN0IGNvZGFfc3ltbGlua19pbiBjb2RhX3N5bWxpbms7CisgICAgc3RydWN0IGNvZGFfcmVhZGxpbmtfaW4gY29kYV9yZWFkbGluazsKKyAgICBzdHJ1Y3QgY29kYV9mc3luY19pbiBjb2RhX2ZzeW5jOworICAgIHN0cnVjdCBjb2RhX3ZnZXRfaW4gY29kYV92Z2V0OworICAgIHN0cnVjdCBjb2RhX29wZW5fYnlfZmRfaW4gY29kYV9vcGVuX2J5X2ZkOworICAgIHN0cnVjdCBjb2RhX29wZW5fYnlfcGF0aF9pbiBjb2RhX29wZW5fYnlfcGF0aDsKKyAgICBzdHJ1Y3QgY29kYV9zdGF0ZnNfaW4gY29kYV9zdGF0ZnM7Cit9OworCit1bmlvbiBvdXRwdXRBcmdzIHsKKyAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG9oOwkJLyogTkI6IGV2ZXJ5IHN0cnVjdCBiZWxvdyBiZWdpbnMgd2l0aCBhbiBvaCAqLworICAgIHN0cnVjdCBjb2RhX3Jvb3Rfb3V0IGNvZGFfcm9vdDsKKyAgICBzdHJ1Y3QgY29kYV9vcGVuX291dCBjb2RhX29wZW47CisgICAgc3RydWN0IGNvZGFfaW9jdGxfb3V0IGNvZGFfaW9jdGw7CisgICAgc3RydWN0IGNvZGFfZ2V0YXR0cl9vdXQgY29kYV9nZXRhdHRyOworICAgIHN0cnVjdCBjb2RhX2xvb2t1cF9vdXQgY29kYV9sb29rdXA7CisgICAgc3RydWN0IGNvZGFfY3JlYXRlX291dCBjb2RhX2NyZWF0ZTsKKyAgICBzdHJ1Y3QgY29kYV9ta2Rpcl9vdXQgY29kYV9ta2RpcjsKKyAgICBzdHJ1Y3QgY29kYV9yZWFkbGlua19vdXQgY29kYV9yZWFkbGluazsKKyAgICBzdHJ1Y3QgY29kYV92Z2V0X291dCBjb2RhX3ZnZXQ7CisgICAgc3RydWN0IGNvZGFfcHVyZ2V1c2VyX291dCBjb2RhX3B1cmdldXNlcjsKKyAgICBzdHJ1Y3QgY29kYV96YXBmaWxlX291dCBjb2RhX3phcGZpbGU7CisgICAgc3RydWN0IGNvZGFfemFwZGlyX291dCBjb2RhX3phcGRpcjsKKyAgICBzdHJ1Y3QgY29kYV9wdXJnZWZpZF9vdXQgY29kYV9wdXJnZWZpZDsKKyAgICBzdHJ1Y3QgY29kYV9yZXBsYWNlX291dCBjb2RhX3JlcGxhY2U7CisgICAgc3RydWN0IGNvZGFfb3Blbl9ieV9mZF9vdXQgY29kYV9vcGVuX2J5X2ZkOworICAgIHN0cnVjdCBjb2RhX29wZW5fYnlfcGF0aF9vdXQgY29kYV9vcGVuX2J5X3BhdGg7CisgICAgc3RydWN0IGNvZGFfc3RhdGZzX291dCBjb2RhX3N0YXRmczsKK307ICAgIAorCit1bmlvbiBjb2RhX2Rvd25jYWxscyB7CisgICAgLyogQ09EQV9JTlZBTElEQVRFIGlzIGEgdmVudXMtPmtlcm5lbCBjYWxsICovCisgICAgLyogQ09EQV9GTFVTSCBpcyBhIHZlbnVzLT5rZXJuZWwgY2FsbCAqLworICAgIHN0cnVjdCBjb2RhX3B1cmdldXNlcl9vdXQgcHVyZ2V1c2VyOworICAgIHN0cnVjdCBjb2RhX3phcGZpbGVfb3V0IHphcGZpbGU7CisgICAgc3RydWN0IGNvZGFfemFwZGlyX291dCB6YXBkaXI7CisgICAgc3RydWN0IGNvZGFfcHVyZ2VmaWRfb3V0IHB1cmdlZmlkOworICAgIHN0cnVjdCBjb2RhX3JlcGxhY2Vfb3V0IHJlcGxhY2U7Cit9OworCisKKy8qCisgKiBVc2VkIGZvciBpZGVudGlmeWluZyB1c2FnZSBvZiAiQ29udHJvbCIgYW5kIHBpb2N0bHMKKyAqLworCisjZGVmaW5lIFBJT0NQQVJNX01BU0sgMHgwMDAwZmZmZgorc3RydWN0IFZpY2VJb2N0bCB7CisgICAgICAgIHZvaWQgX191c2VyICppbjsgICAgICAgIC8qIERhdGEgdG8gYmUgdHJhbnNmZXJyZWQgaW4gKi8KKyAgICAgICAgdm9pZCBfX3VzZXIgKm91dDsgICAgICAgLyogRGF0YSB0byBiZSB0cmFuc2ZlcnJlZCBvdXQgKi8KKyAgICAgICAgdV9zaG9ydCBpbl9zaXplOyAgICAgICAgLyogU2l6ZSBvZiBpbnB1dCBidWZmZXIgPD0gMksgKi8KKyAgICAgICAgdV9zaG9ydCBvdXRfc2l6ZTsgICAgICAgLyogTWF4aW11bSBzaXplIG9mIG91dHB1dCBidWZmZXIsIDw9IDJLICovCit9OworCitzdHJ1Y3QgUGlvY3RsRGF0YSB7CisgICAgICAgIGNvbnN0IGNoYXIgX191c2VyICpwYXRoOworICAgICAgICBpbnQgZm9sbG93OworICAgICAgICBzdHJ1Y3QgVmljZUlvY3RsIHZpOworfTsKKworI2RlZmluZSBDT0RBX0NPTlRST0wJCSIuQ09OVFJPTCIKKyNkZWZpbmUgQ09EQV9DT05UUk9MTEVOCQk4CisjZGVmaW5lIENUTF9JTk8JCQktMQorCisvKiBEYXRhIHBhc3NlZCB0byBtb3VudCAqLworCisjZGVmaW5lIENPREFfTU9VTlRfVkVSU0lPTiAxCisKK3N0cnVjdCBjb2RhX21vdW50X2RhdGEgeworCWludAkJdmVyc2lvbjsKKwlpbnQJCWZkOyAgICAgICAvKiBPcGVuZWQgZGV2aWNlICovCit9OworCisjZW5kaWYgCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29kYV9jYWNoZS5oIGIvaW5jbHVkZS9saW51eC9jb2RhX2NhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkxMGI1ZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvY29kYV9jYWNoZS5oCkBAIC0wLDAgKzEsMjIgQEAKKy8qIENvZGEgZmlsZXN5c3RlbSAtLSBMaW51eCBNaW5pY2FjaGUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5ODkgLSAxOTk3IENhcm5lZ2llIE1lbGxvbiBVbml2ZXJzaXR5CisgKgorICogQ2FybmVnaWUgTWVsbG9uIFVuaXZlcnNpdHkgZW5jb3VyYWdlcyB1c2VycyBvZiB0aGlzIHNvZnR3YXJlIHRvCisgKiBjb250cmlidXRlIGltcHJvdmVtZW50cyB0byB0aGUgQ29kYSBwcm9qZWN0LiBDb250YWN0IFBldGVyIEJyYWFtCisgKiA8Y29kYUBjcy5jbXUuZWR1PgorICovCisKKyNpZm5kZWYgX0NGU05DX0hFQURFUl8KKyNkZWZpbmUgX0NGU05DX0hFQURFUl8KKworLyogY3JlZGVudGlhbCBjYWNoZSAqLwordm9pZCBjb2RhX2NhY2hlX2VudGVyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKTsKK3ZvaWQgY29kYV9jYWNoZV9jbGVhcl9pbm9kZShzdHJ1Y3QgaW5vZGUgKik7Cit2b2lkIGNvZGFfY2FjaGVfY2xlYXJfYWxsKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOworaW50IGNvZGFfY2FjaGVfY2hlY2soc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spOworCisvKiBmb3IgZG93bmNhbGxzIGFuZCBhdHRyaWJ1dGVzIGFuZCBsb29rdXBzICovCit2b2lkIGNvZGFfZmxhZ19pbm9kZV9jaGlsZHJlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgZmxhZyk7CisKKyNlbmRpZiAvKiBfQ0ZTTkNfSEVBREVSXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb2RhX2ZzX2kuaCBiL2luY2x1ZGUvbGludXgvY29kYV9mc19pLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI0ZmU5YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvY29kYV9mc19pLmgKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqICBjb2RhX2ZzX2kuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTggQ2FybmVnaWUgTWVsbG9uIFVuaXZlcnNpdHkKKyAqCisgKi8KKworI2lmbmRlZiBfTElOVVhfQ09EQV9GU19JCisjZGVmaW5lIF9MSU5VWF9DT0RBX0ZTX0kKKworI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9jb2RhLmg+CisKKy8qCisgKiBjb2RhIGZzIGlub2RlIGRhdGEKKyAqLworc3RydWN0IGNvZGFfaW5vZGVfaW5mbyB7CisgICAgICAgIHN0cnVjdCBDb2RhRmlkCSAgIGNfZmlkOwkvKiBDb2RhIGlkZW50aWZpZXIgKi8KKyAgICAgICAgdV9zaG9ydAkgICAgICAgICAgIGNfZmxhZ3M7ICAgICAvKiBmbGFncyAoc2VlIGJlbG93KSAqLworCXN0cnVjdCBsaXN0X2hlYWQgICBjX2NpbGlzdDsgICAgLyogbGlzdCBvZiBhbGwgY29kYSBpbm9kZXMgKi8KKwl1bnNpZ25lZCBpbnQJICAgY19tYXBjb3VudDsgIC8qIG5yIG9mIHRpbWVzIHRoaXMgaW5vZGUgaXMgbWFwcGVkICovCisJdW5zaWduZWQgaW50CSAgIGNfY2FjaGVkX2Vwb2NoOyAvKiBlcG9jaCBmb3IgY2FjaGVkIHBlcm1pc3Npb25zICovCisJdnVpZF90CQkgICBjX3VpZDsJLyogZnN1aWQgZm9yIGNhY2hlZCBwZXJtaXNzaW9ucyAqLworICAgICAgICB1bnNpZ25lZCBpbnQgICAgICAgY19jYWNoZWRfcGVybTsgLyogY2FjaGVkIGFjY2VzcyBwZXJtaXNzaW9ucyAqLworCXN0cnVjdCBpbm9kZQkgICB2ZnNfaW5vZGU7Cit9OworCisvKgorICogY29kYSBmcyBmaWxlIHByaXZhdGUgZGF0YQorICovCisjZGVmaW5lIENPREFfTUFHSUMgMHhDMERBQzBEQQorc3RydWN0IGNvZGFfZmlsZV9pbmZvIHsKKwlpbnQJCSAgIGNmaV9tYWdpYzsJICAvKiBtYWdpYyBudW1iZXIgKi8KKwlzdHJ1Y3QgZmlsZQkgICpjZmlfY29udGFpbmVyOyAvKiBjb250YWluZXIgZmlsZSBmb3IgdGhpcyBjbm9kZSAqLworCXVuc2lnbmVkIGludAkgICBjZmlfbWFwY291bnQ7ICAvKiBuciBvZiB0aW1lcyB0aGlzIGZpbGUgaXMgbWFwcGVkICovCit9OworCisjZGVmaW5lIENPREFfRlRPQyhmaWxlKSAoKHN0cnVjdCBjb2RhX2ZpbGVfaW5mbyAqKSgoZmlsZSktPnByaXZhdGVfZGF0YSkpCisKKy8qIGZsYWdzICovCisjZGVmaW5lIENfVkFUVFIgICAgICAgMHgxICAgLyogVmFsaWRpdHkgb2YgdmF0dHIgaW4gaW5vZGUgKi8KKyNkZWZpbmUgQ19GTFVTSCAgICAgICAweDIgICAvKiB1c2VkIGFmdGVyIGEgZmx1c2ggKi8KKyNkZWZpbmUgQ19EWUlORyAgICAgICAweDQgICAvKiBmcm9tIHZlbnVzICh3aGljaCBkaWVkKSAqLworI2RlZmluZSBDX1BVUkdFICAgICAgIDB4OAorCitpbnQgY29kYV9jbm9kZV9tYWtlKHN0cnVjdCBpbm9kZSAqKiwgc3RydWN0IENvZGFGaWQgKiwgc3RydWN0IHN1cGVyX2Jsb2NrICopOworc3RydWN0IGlub2RlICpjb2RhX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IENvZGFGaWQgKmZpZCwgc3RydWN0IGNvZGFfdmF0dHIgKmF0dHIpOworaW50IGNvZGFfY25vZGVfbWFrZWN0bChzdHJ1Y3QgaW5vZGUgKippbm9kZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CitzdHJ1Y3QgaW5vZGUgKmNvZGFfZmlkX3RvX2lub2RlKHN0cnVjdCBDb2RhRmlkICpmaWQsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwordm9pZCBjb2RhX3JlcGxhY2VfZmlkKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgQ29kYUZpZCAqLCBzdHJ1Y3QgQ29kYUZpZCAqKTsKKworI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29kYV9saW51eC5oIGIvaW5jbHVkZS9saW51eC9jb2RhX2xpbnV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M2MjFlYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvY29kYV9saW51eC5oCkBAIC0wLDAgKzEsMTAyIEBACisvKiAKKyAqIENvZGEgRmlsZSBTeXN0ZW0sIExpbnV4IEtlcm5lbCBtb2R1bGUKKyAqIAorICogT3JpZ2luYWwgdmVyc2lvbiwgYWRhcHRlZCBmcm9tIGNmc19tYWNoLmMsIChDKSBDYXJuZWdpZSBNZWxsb24gVW5pdmVyc2l0eQorICogTGludXggbW9kaWZpY2F0aW9ucyAoQykgMTk5NiwgUGV0ZXIgSi4gQnJhYW0KKyAqIFJld3JpdHRlbiBmb3IgTGludXggMi4xIChDKSAxOTk3IENhcm5lZ2llIE1lbGxvbiBVbml2ZXJzaXR5CisgKgorICogQ2FybmVnaWUgTWVsbG9uIFVuaXZlcnNpdHkgZW5jb3VyYWdlcyB1c2VycyBvZiB0aGlzIHNvZnR3YXJlIHRvCisgKiBjb250cmlidXRlIGltcHJvdmVtZW50cyB0byB0aGUgQ29kYSBwcm9qZWN0LgorICovCisKKyNpZm5kZWYgX0xJTlVYX0NPREFfRlMKKyNkZWZpbmUgX0xJTlVYX0NPREFfRlMKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4JCQorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9jb2RhX2ZzX2kuaD4KKworLyogb3BlcmF0aW9ucyAqLworZXh0ZXJuIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGNvZGFfZGlyX2lub2RlX29wZXJhdGlvbnM7CitleHRlcm4gc3RydWN0IGlub2RlX29wZXJhdGlvbnMgY29kYV9maWxlX2lub2RlX29wZXJhdGlvbnM7CitleHRlcm4gc3RydWN0IGlub2RlX29wZXJhdGlvbnMgY29kYV9pb2N0bF9pbm9kZV9vcGVyYXRpb25zOworCitleHRlcm4gc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBjb2RhX2ZpbGVfYW9wczsKK2V4dGVybiBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGNvZGFfc3ltbGlua19hb3BzOworCitleHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjb2RhX2Rpcl9vcGVyYXRpb25zOworZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY29kYV9maWxlX29wZXJhdGlvbnM7CitleHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjb2RhX2lvY3RsX29wZXJhdGlvbnM7CisKKy8qIG9wZXJhdGlvbnMgc2hhcmVkIG92ZXIgbW9yZSB0aGFuIG9uZSBmaWxlICovCitpbnQgY29kYV9vcGVuKHN0cnVjdCBpbm9kZSAqaSwgc3RydWN0IGZpbGUgKmYpOworaW50IGNvZGFfZmx1c2goc3RydWN0IGZpbGUgKmYpOworaW50IGNvZGFfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmksIHN0cnVjdCBmaWxlICpmKTsKK2ludCBjb2RhX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2ssIHN0cnVjdCBuYW1laWRhdGEgKm5kKTsKK2ludCBjb2RhX3JldmFsaWRhdGVfaW5vZGUoc3RydWN0IGRlbnRyeSAqKTsKK2ludCBjb2RhX2dldGF0dHIoc3RydWN0IHZmc21vdW50ICosIHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGtzdGF0ICopOworaW50IGNvZGFfc2V0YXR0cihzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBpYXR0ciAqKTsKKworLyogZ2xvYmFsIHZhcmlhYmxlcyAqLworZXh0ZXJuIGludCBjb2RhX2Zha2Vfc3RhdGZzOworCisvKiB0aGlzIGZpbGU6ICBoZWxvZXJzICovCitzdGF0aWMgX19pbmxpbmVfXyBzdHJ1Y3QgQ29kYUZpZCAqY29kYV9pMmYoc3RydWN0IGlub2RlICopOworc3RhdGljIF9faW5saW5lX18gY2hhciAqY29kYV9pMnMoc3RydWN0IGlub2RlICopOworc3RhdGljIF9faW5saW5lX18gdm9pZCBjb2RhX2ZsYWdfaW5vZGUoc3RydWN0IGlub2RlICosIGludCBmbGFnKTsKK2NoYXIgKmNvZGFfZjJzKHN0cnVjdCBDb2RhRmlkICpmKTsKK2ludCBjb2RhX2lzcm9vdChzdHJ1Y3QgaW5vZGUgKmkpOworaW50IGNvZGFfaXNjb250cm9sKGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBsZW5ndGgpOworCit2b2lkIGNvZGFfdmF0dHJfdG9faWF0dHIoc3RydWN0IGlub2RlICosIHN0cnVjdCBjb2RhX3ZhdHRyICopOwordm9pZCBjb2RhX2lhdHRyX3RvX3ZhdHRyKHN0cnVjdCBpYXR0ciAqLCBzdHJ1Y3QgY29kYV92YXR0ciAqKTsKK3Vuc2lnbmVkIHNob3J0IGNvZGFfZmxhZ3NfdG9fY2ZsYWdzKHVuc2lnbmVkIHNob3J0KTsKKworLyogc3lzY3RsLmggKi8KK3ZvaWQgY29kYV9zeXNjdGxfaW5pdCh2b2lkKTsKK3ZvaWQgY29kYV9zeXNjdGxfY2xlYW4odm9pZCk7CisKKyNkZWZpbmUgQ09EQV9BTExPQyhwdHIsIGNhc3QsIHNpemUpIGRvIHsgXAorICAgIGlmIChzaXplIDwgUEFHRV9TSVpFKSBcCisgICAgICAgIHB0ciA9IChjYXN0KWttYWxsb2MoKHVuc2lnbmVkIGxvbmcpIHNpemUsIEdGUF9LRVJORUwpOyBcCisgICAgZWxzZSBcCisgICAgICAgIHB0ciA9IChjYXN0KXZtYWxsb2MoKHVuc2lnbmVkIGxvbmcpIHNpemUpOyBcCisgICAgaWYgKCFwdHIpIFwKKyAgICAgICAgcHJpbnRrKCJrZXJuZWwgbWFsbG9jIHJldHVybnMgMCBhdCAlczolZFxuIiwgX19GSUxFX18sIF9fTElORV9fKTsgXAorICAgIGVsc2UgbWVtc2V0KCBwdHIsIDAsIHNpemUgKTsgXAorfSB3aGlsZSAoMCkKKworCisjZGVmaW5lIENPREFfRlJFRShwdHIsc2l6ZSkgXAorICAgIGRvIHsgaWYgKHNpemUgPCBQQUdFX1NJWkUpIGtmcmVlKChwdHIpKTsgZWxzZSB2ZnJlZSgocHRyKSk7IH0gd2hpbGUgKDApCisKKy8qIGlub2RlIHRvIGNub2RlIGFjY2VzcyBmdW5jdGlvbnMgKi8KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgY29kYV9pbm9kZV9pbmZvICpJVE9DKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJcmV0dXJuIGxpc3RfZW50cnkoaW5vZGUsIHN0cnVjdCBjb2RhX2lub2RlX2luZm8sIHZmc19pbm9kZSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHN0cnVjdCBDb2RhRmlkICpjb2RhX2kyZihzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXJldHVybiAmKElUT0MoaW5vZGUpLT5jX2ZpZCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGNoYXIgKmNvZGFfaTJzKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJcmV0dXJuIGNvZGFfZjJzKCYoSVRPQyhpbm9kZSktPmNfZmlkKSk7Cit9CisKKy8qIHRoaXMgd2lsbCBub3QgemFwIHRoZSBpbm9kZSBhd2F5ICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGNvZGFfZmxhZ19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgZmxhZykKK3sKKwlJVE9DKGlub2RlKS0+Y19mbGFncyB8PSBmbGFnOworfQkJCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb2RhX3Byb2MuaCBiL2luY2x1ZGUvbGludXgvY29kYV9wcm9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRjMWIwNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvY29kYV9wcm9jLmgKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIGNvZGFfc3RhdGlzLmgKKyAqIAorICogQ09EQSBvcGVyYXRpb24gc3RhdGlzdGljcworICoKKyAqIChjKSBNYXJjaCwgMTk5OAorICogYnkgTWljaGloaXJvIEt1cmFtb2NoaSwgWmhlbnl1IFhpYSBhbmQgWmhhbnlvbmcgV2FuCisgKiB6aGFueW9uZy53YW5AeWFsZS5lZHUKKyAqCisgKi8KKworI2lmbmRlZiBfQ09EQV9QUk9DX0gKKyNkZWZpbmUgX0NPREFfUFJPQ19ICisKK3ZvaWQgY29kYV9zeXNjdGxfaW5pdCh2b2lkKTsKK3ZvaWQgY29kYV9zeXNjdGxfY2xlYW4odm9pZCk7CisKKyNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KKyNpbmNsdWRlIDxsaW51eC9jb2RhX2ZzX2kuaD4KKyNpbmNsdWRlIDxsaW51eC9jb2RhLmg+CisKKy8qIHRoZXNlIGZvdXIgZmlsZXMgYXJlIHByZXNlbnRlZCB0byBzaG93IHRoZSByZXN1bHQgb2YgdGhlIHN0YXRpc3RpY3M6CisgKgorICoJL3Byb2MvZnMvY29kYS92ZnNfc3RhdHMKKyAqCQkgICAgICBjYWNoZV9pbnZfc3RhdHMKKyAqCisgKiB0aGVzZSBmb3VyIGZpbGVzIGFyZSBwcmVzZW50ZWQgdG8gcmVzZXQgdGhlIHN0YXRpc3RpY3MgdG8gMDoKKyAqCisgKgkvcHJvYy9zeXMvY29kYS92ZnNfc3RhdHMKKyAqCQkgICAgICAgY2FjaGVfaW52X3N0YXRzCisgKi8KKworLyogVkZTIG9wZXJhdGlvbiBzdGF0aXN0aWNzICovCitzdHJ1Y3QgY29kYV92ZnNfc3RhdHMgCit7CisJLyogZmlsZSBvcGVyYXRpb25zICovCisJaW50IG9wZW47CisJaW50IGZsdXNoOworCWludCByZWxlYXNlOworCWludCBmc3luYzsKKworCS8qIGRpciBvcGVyYXRpb25zICovCisJaW50IHJlYWRkaXI7CisgIAorCS8qIGlub2RlIG9wZXJhdGlvbnMgKi8KKwlpbnQgY3JlYXRlOworCWludCBsb29rdXA7CisJaW50IGxpbms7CisJaW50IHVubGluazsKKwlpbnQgc3ltbGluazsKKwlpbnQgbWtkaXI7CisJaW50IHJtZGlyOworCWludCByZW5hbWU7CisJaW50IHBlcm1pc3Npb247CisKKwkvKiBzeW1saW5rIG9wZXJhdG9pbnMqLworCWludCBmb2xsb3dfbGluazsKKwlpbnQgcmVhZGxpbms7Cit9OworCisvKiBjYWNoZSBpbnZhbGlkYXRpb24gc3RhdGlzdGljcyAqLworc3RydWN0IGNvZGFfY2FjaGVfaW52X3N0YXRzCit7CisJaW50IGZsdXNoOworCWludCBwdXJnZV91c2VyOworCWludCB6YXBfZGlyOworCWludCB6YXBfZmlsZTsKKwlpbnQgemFwX3Zub2RlOworCWludCBwdXJnZV9maWQ7CisJaW50IHJlcGxhY2U7Cit9OworCisvKiB0aGVzZSBnbG9iYWwgdmFyaWFibGVzIGhvbGQgdGhlIGFjdHVhbCBzdGF0aXN0aWNzIGRhdGEgKi8KK2V4dGVybiBzdHJ1Y3QgY29kYV92ZnNfc3RhdHMJCWNvZGFfdmZzX3N0YXQ7CisKKyNlbmRpZiAvKiBfQ09EQV9QUk9DX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29kYV9wc2Rldi5oIGIvaW5jbHVkZS9saW51eC9jb2RhX3BzZGV2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUzOTI2MgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvY29kYV9wc2Rldi5oCkBAIC0wLDAgKzEsMTAzIEBACisjaWZuZGVmIF9fQ09EQV9QU0RFVl9ICisjZGVmaW5lIF9fQ09EQV9QU0RFVl9ICisKKyNkZWZpbmUgQ09EQV9QU0RFVl9NQUpPUiA2NworI2RlZmluZSBNQVhfQ09EQURFVlMgIDUJICAgLyogaG93IG1hbnkgZG8gd2UgYWxsb3cgKi8KKworI2RlZmluZSBDT0RBX1NVUEVSX01BR0lDCTB4NzM3NTcyNDUKKworc3RydWN0IGtzdGF0ZnM7CisKK3N0cnVjdCBjb2RhX3NiX2luZm8KK3sKKwlzdHJ1Y3QgdmVudXNfY29tbSAqc2JpX3Zjb21tOworfTsKKworLyogY29tbXVuaWNhdGlvbiBwZW5kaW5nL3Byb2Nlc3NpbmcgcXVldWVzICovCitzdHJ1Y3QgdmVudXNfY29tbSB7CisJdV9sb25nCQkgICAgdmNfc2VxOworCXdhaXRfcXVldWVfaGVhZF90ICAgdmNfd2FpdHE7IC8qIFZlbnVzIHdhaXQgcXVldWUgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkICAgIHZjX3BlbmRpbmc7CisJc3RydWN0IGxpc3RfaGVhZCAgICB2Y19wcm9jZXNzaW5nOworCWludCAgICAgICAgICAgICAgICAgdmNfaW51c2U7CisJc3RydWN0IHN1cGVyX2Jsb2NrICp2Y19zYjsKK307CisKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgY29kYV9zYl9pbmZvICpjb2RhX3NicChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworICAgIHJldHVybiAoKHN0cnVjdCBjb2RhX3NiX2luZm8gKikoKHNiKS0+c19mc19pbmZvKSk7Cit9CisKKworLyogdXBjYWxscyAqLworaW50IHZlbnVzX3Jvb3RmaWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IENvZGFGaWQgKmZpZHApOworaW50IHZlbnVzX2dldGF0dHIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IENvZGFGaWQgKmZpZCwKKwkJICBzdHJ1Y3QgY29kYV92YXR0ciAqYXR0cik7CitpbnQgdmVudXNfc2V0YXR0cihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IENvZGFGaWQgKiwgc3RydWN0IGNvZGFfdmF0dHIgKik7CitpbnQgdmVudXNfbG9va3VwKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBDb2RhRmlkICpmaWQsIAorCQkgY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbmd0aCwgaW50ICp0eXBlLCAKKwkJIHN0cnVjdCBDb2RhRmlkICpyZXNmaWQpOworaW50IHZlbnVzX3N0b3JlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBDb2RhRmlkICpmaWQsIGludCBmbGFncywKKwkJdnVpZF90IHVpZCk7CitpbnQgdmVudXNfcmVsZWFzZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgQ29kYUZpZCAqZmlkLCBpbnQgZmxhZ3MpOworaW50IHZlbnVzX2Nsb3NlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBDb2RhRmlkICpmaWQsIGludCBmbGFncywKKwkJdnVpZF90IHVpZCk7CitpbnQgdmVudXNfb3BlbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgQ29kYUZpZCAqZmlkLCBpbnQgZmxhZ3MsCisJICAgICAgIHN0cnVjdCBmaWxlICoqZik7CitpbnQgdmVudXNfbWtkaXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IENvZGFGaWQgKmRpcmZpZCwgCisJCWNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW5ndGgsIAorCQlzdHJ1Y3QgQ29kYUZpZCAqbmV3ZmlkLCBzdHJ1Y3QgY29kYV92YXR0ciAqYXR0cnMpOworaW50IHZlbnVzX2NyZWF0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgQ29kYUZpZCAqZGlyZmlkLCAKKwkJIGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW5ndGgsIGludCBleGNsLCBpbnQgbW9kZSwKKwkJIHN0cnVjdCBDb2RhRmlkICpuZXdmaWQsIHN0cnVjdCBjb2RhX3ZhdHRyICphdHRycykgOworaW50IHZlbnVzX3JtZGlyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBDb2RhRmlkICpkaXJmaWQsIAorCQljb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuZ3RoKTsKK2ludCB2ZW51c19yZW1vdmUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IENvZGFGaWQgKmRpcmZpZCwgCisJCSBjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuZ3RoKTsKK2ludCB2ZW51c19yZWFkbGluayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgQ29kYUZpZCAqZmlkLCAKKwkJICAgY2hhciAqYnVmZmVyLCBpbnQgKmxlbmd0aCk7CitpbnQgdmVudXNfcmVuYW1lKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3QgQ29kYUZpZCAqbmV3X2ZpZCwgCisJCSBzdHJ1Y3QgQ29kYUZpZCAqb2xkX2ZpZCwgc2l6ZV90IG9sZF9sZW5ndGgsIAorCQkgc2l6ZV90IG5ld19sZW5ndGgsIGNvbnN0IGNoYXIgKm9sZF9uYW1lLCAKKwkJIGNvbnN0IGNoYXIgKm5ld19uYW1lKTsKK2ludCB2ZW51c19saW5rKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBDb2RhRmlkICpmaWQsIAorCQkgIHN0cnVjdCBDb2RhRmlkICpkaXJmaWQsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4gKTsKK2ludCB2ZW51c19zeW1saW5rKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBDb2RhRmlkICpmaWQsCisJCSAgY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbiwgY29uc3QgY2hhciAqc3ltbmFtZSwgaW50IHN5bWxlbik7CitpbnQgdmVudXNfYWNjZXNzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBDb2RhRmlkICpmaWQsIGludCBtYXNrKTsKK2ludCB2ZW51c19waW9jdGwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IENvZGFGaWQgKmZpZCwKKwkJIHVuc2lnbmVkIGludCBjbWQsIHN0cnVjdCBQaW9jdGxEYXRhICpkYXRhKTsKK2ludCBjb2RhX2Rvd25jYWxsKGludCBvcGNvZGUsIHVuaW9uIG91dHB1dEFyZ3MgKm91dCwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CitpbnQgdmVudXNfZnN5bmMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IENvZGFGaWQgKmZpZCk7CitpbnQgdmVudXNfc3RhdGZzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBrc3RhdGZzICpzZnMpOworCisKKy8qIG1lc3NhZ2VzIGJldHdlZW4gY29kYSBmaWxlc3lzdGVtIGluIGtlcm5lbCBhbmQgVmVudXMgKi8KK2V4dGVybiBpbnQgY29kYV9oYXJkOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgY29kYV90aW1lb3V0Oworc3RydWN0IHVwY19yZXEgeworCXN0cnVjdCBsaXN0X2hlYWQgICAgdWNfY2hhaW47CisJY2FkZHJfdAkgICAgICAgICAgICB1Y19kYXRhOworCXVfc2hvcnQJICAgICAgICAgICAgdWNfZmxhZ3M7CisJdV9zaG9ydCAgICAgICAgICAgICB1Y19pblNpemU7ICAvKiBTaXplIGlzIGF0IG1vc3QgNTAwMCBieXRlcyAqLworCXVfc2hvcnQJICAgICAgICAgICAgdWNfb3V0U2l6ZTsKKwl1X3Nob3J0CSAgICAgICAgICAgIHVjX29wY29kZTsgIC8qIGNvcGllZCBmcm9tIGRhdGEgdG8gc2F2ZSBsb29rdXAgKi8KKwlpbnQJCSAgICB1Y191bmlxdWU7CisJd2FpdF9xdWV1ZV9oZWFkX3QgICB1Y19zbGVlcDsgICAvKiBwcm9jZXNzJyB3YWl0IHF1ZXVlICovCisJdW5zaWduZWQgbG9uZyAgICAgICB1Y19wb3N0dGltZTsKK307CisKKyNkZWZpbmUgUkVRX0FTWU5DICAweDEKKyNkZWZpbmUgUkVRX1JFQUQgICAweDIKKyNkZWZpbmUgUkVRX1dSSVRFICAweDQKKyNkZWZpbmUgUkVRX0FCT1JUICAweDgKKworCisvKgorICogU3RhdGlzdGljcworICovCisKK2V4dGVybiBzdHJ1Y3QgdmVudXNfY29tbSBjb2RhX2NvbW1zW107CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb2ZmLmggYi9pbmNsdWRlL2xpbnV4L2NvZmYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzU0YTdmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9jb2ZmLmgKQEAgLTAsMCArMSwzNTEgQEAKKy8qIFRoaXMgZmlsZSBpcyBkZXJpdmVkIGZyb20gdGhlIEdBUyAyLjEuNCBhc3NlbWJsZXIgY29udHJvbCBmaWxlLgorICAgVGhlIEdBUyBwcm9kdWN0IGlzIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyIG9yIGxhdGVyLgorICAgQXMgc3VjaCwgdGhpcyBmaWxlIGlzIGFsc28gdW5kZXIgdGhhdCBsaWNlbnNlLgorCisgICBJZiB0aGUgZmlsZSBmb3JtYXQgY2hhbmdlcyBpbiB0aGUgQ09GRiBvYmplY3QsIHRoaXMgZmlsZSBzaG91bGQgYmUKKyAgIHN1YnNlcXVlbnRseSB1cGRhdGVkIHRvIHJlZmxlY3QgdGhlIGNoYW5nZXMuCisKKyAgIFRoZSBhY3R1YWwgbG9hZGVyIG1vZHVsZSBvbmx5IHVzZXMgYSBmZXcgb2YgdGhlc2Ugc3RydWN0dXJlcy4gVGhlIGZ1bGwKKyAgIHNldCBpcyBkb2N1bWVudGVkIGhlcmUgYmVjYXVzZSBJIHJlY2VpdmVkIHRoZSBmdWxsIHNldC4gSWYgeW91IHdpc2gKKyAgIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgQ09GRiwgdGhlbiBPJ1JlaWxseSBoYXMgYSB2ZXJ5IGV4Y2VsbGVudCBib29rLgorKi8KKworI2RlZmluZSAgRV9TWU1OTUxFTiAgOCAgIC8qIE51bWJlciBvZiBjaGFyYWN0ZXJzIGluIGEgc3ltYm9sIG5hbWUgICAgICAgICAqLworI2RlZmluZSAgRV9GSUxOTUxFTiAxNCAgIC8qIE51bWJlciBvZiBjaGFyYWN0ZXJzIGluIGEgZmlsZSBuYW1lICAgICAgICAgICAqLworI2RlZmluZSAgRV9ESU1OVU0gICAgNCAgIC8qIE51bWJlciBvZiBhcnJheSBkaW1lbnNpb25zIGluIGF1eGlsaWFyeSBlbnRyeSAqLworCisvKgorICogVGhlc2UgZGVmaW5lcyBhcmUgYnl0ZSBvcmRlciBpbmRlcGVuZGVudC4gVGhlcmUgaXMgbm8gYWxpZ25tZW50IG9mIGZpZWxkcworICogcGVybWl0dGVkIGluIHRoZSBzdHJ1Y3R1cmVzLiBUaGVyZWZvcmUgdGhleSBhcmUgZGVjbGFyZWQgYXMgY2hhcmFjdGVycworICogYW5kIHRoZSB2YWx1ZXMgbG9hZGVkIGZyb20gdGhlIGNoYXJhY3RlciBwb3NpdGlvbnMuIEl0IGFsc28gbWFrZXMgaXQKKyAqIG5pY2UgdG8gaGF2ZSBpdCAiZW5kaWFuIiBpbmRlcGVuZGVudC4KKyAqLworIAorLyogTG9hZCBhIHNob3J0IGludCBmcm9tIHRoZSBmb2xsb3dpbmcgdGFibGVzIHdpdGggbGl0dGxlLWVuZGlhbiBmb3JtYXRzICovCisjZGVmaW5lIENPRkZfU0hPUlRfTChwcykgKChzaG9ydCkoKCh1bnNpZ25lZCBzaG9ydCkoKHVuc2lnbmVkIGNoYXIpcHNbMV0pPDw4KXxcCisJCQkJICAoKHVuc2lnbmVkIHNob3J0KSgodW5zaWduZWQgY2hhcilwc1swXSkpKSkKKworLyogTG9hZCBhIGxvbmcgaW50IGZyb20gdGhlIGZvbGxvd2luZyB0YWJsZXMgd2l0aCBsaXR0bGUtZW5kaWFuIGZvcm1hdHMgKi8KKyNkZWZpbmUgQ09GRl9MT05HX0wocHMpICgoKGxvbmcpKCgodW5zaWduZWQgbG9uZykoKHVuc2lnbmVkIGNoYXIpcHNbM10pPDwyNCkgfFwKKwkJCQkgKCh1bnNpZ25lZCBsb25nKSgodW5zaWduZWQgY2hhcilwc1syXSk8PDE2KSB8XAorCQkJCSAoKHVuc2lnbmVkIGxvbmcpKCh1bnNpZ25lZCBjaGFyKXBzWzFdKTw8OCkgIHxcCisJCQkJICgodW5zaWduZWQgbG9uZykoKHVuc2lnbmVkIGNoYXIpcHNbMF0pKSkpKQorIAorLyogTG9hZCBhIHNob3J0IGludCBmcm9tIHRoZSBmb2xsb3dpbmcgdGFibGVzIHdpdGggYmlnLWVuZGlhbiBmb3JtYXRzICovCisjZGVmaW5lIENPRkZfU0hPUlRfSChwcykgKChzaG9ydCkoKCh1bnNpZ25lZCBzaG9ydCkoKHVuc2lnbmVkIGNoYXIpcHNbMF0pPDw4KXxcCisJCQkJICAoKHVuc2lnbmVkIHNob3J0KSgodW5zaWduZWQgY2hhcilwc1sxXSkpKSkKKworLyogTG9hZCBhIGxvbmcgaW50IGZyb20gdGhlIGZvbGxvd2luZyB0YWJsZXMgd2l0aCBiaWctZW5kaWFuIGZvcm1hdHMgKi8KKyNkZWZpbmUgQ09GRl9MT05HX0gocHMpICgoKGxvbmcpKCgodW5zaWduZWQgbG9uZykoKHVuc2lnbmVkIGNoYXIpcHNbMF0pPDwyNCkgfFwKKwkJCQkgKCh1bnNpZ25lZCBsb25nKSgodW5zaWduZWQgY2hhcilwc1sxXSk8PDE2KSB8XAorCQkJCSAoKHVuc2lnbmVkIGxvbmcpKCh1bnNpZ25lZCBjaGFyKXBzWzJdKTw8OCkgIHxcCisJCQkJICgodW5zaWduZWQgbG9uZykoKHVuc2lnbmVkIGNoYXIpcHNbM10pKSkpKQorCisvKiBUaGVzZSBtYXkgYmUgb3ZlcnJpZGRlbiBsYXRlciBieSBicmFpbiBkZWFkIGltcGxlbWVudGF0aW9ucyB3aGljaCBnZW5lcmF0ZQorICAgYSBiaWctZW5kaWFuIGhlYWRlciB3aXRoIGxpdHRsZS1lbmRpYW4gZGF0YS4gSW4gdGhhdCBjYXNlLCBnZW5lcmF0ZSBhCisgICByZXBsYWNlbWVudCBtYWNybyB3aGljaCB0ZXN0cyBhIGZsYWcgYW5kIHVzZXMgZWl0aGVyIG9mIHRoZSB0d28gYWJvdmUKKyAgIGFzIGFwcHJvcHJpYXRlLiAqLworCisjZGVmaW5lIENPRkZfTE9ORyh2KSAgIENPRkZfTE9OR19MKHYpCisjZGVmaW5lIENPRkZfU0hPUlQodikgIENPRkZfU0hPUlRfTCh2KQorCisvKioqIGNvZmYgaW5mb3JtYXRpb24gZm9yIEludGVsIDM4Ni80ODYuICAqLworCisvKioqKioqKioqKioqKioqKioqKioqKiBGSUxFIEhFQURFUiAqKioqKioqKioqKioqKioqKioqKioqLworCitzdHJ1Y3QgQ09GRl9maWxlaGRyIHsKKwljaGFyIGZfbWFnaWNbMl07CS8qIG1hZ2ljIG51bWJlcgkJCSovCisJY2hhciBmX25zY25zWzJdOwkvKiBudW1iZXIgb2Ygc2VjdGlvbnMJCSovCisJY2hhciBmX3RpbWRhdFs0XTsJLyogdGltZSAmIGRhdGUgc3RhbXAJCSovCisJY2hhciBmX3N5bXB0cls0XTsJLyogZmlsZSBwb2ludGVyIHRvIHN5bXRhYgkqLworCWNoYXIgZl9uc3ltc1s0XTsJLyogbnVtYmVyIG9mIHN5bXRhYiBlbnRyaWVzCSovCisJY2hhciBmX29wdGhkclsyXTsJLyogc2l6ZW9mKG9wdGlvbmFsIGhkcikJCSovCisJY2hhciBmX2ZsYWdzWzJdOwkvKiBmbGFncwkJCSovCit9OworCisvKgorICogICBCaXRzIGZvciBmX2ZsYWdzOgorICoKKyAqCUZfUkVMRkxHCXJlbG9jYXRpb24gaW5mbyBzdHJpcHBlZCBmcm9tIGZpbGUKKyAqCUZfRVhFQwkJZmlsZSBpcyBleGVjdXRhYmxlICAoaS5lLiBubyB1bnJlc29sdmVkIGV4dGVybmFsCisgKgkJCXJlZmVyZW5jZXMpCisgKglGX0xOTk8JCWxpbmUgbnVtYmVycyBzdHJpcHBlZCBmcm9tIGZpbGUKKyAqCUZfTFNZTVMJCWxvY2FsIHN5bWJvbHMgc3RyaXBwZWQgZnJvbSBmaWxlCisgKglGX01JTk1BTAl0aGlzIGlzIGEgbWluaW1hbCBvYmplY3QgZmlsZSAoIi5tIikgb3V0cHV0IG9mIGZleHRyYWN0CisgKglGX1VQREFURQl0aGlzIGlzIGEgZnVsbHkgYm91bmQgdXBkYXRlIGZpbGUsIG91dHB1dCBvZiBvZ2VuCisgKglGX1NXQUJECQl0aGlzIGZpbGUgaGFzIGhhZCBpdHMgYnl0ZXMgc3dhYmJlZCAoaW4gbmFtZXMpCisgKglGX0FSMTZXUgl0aGlzIGZpbGUgaGFzIHRoZSBieXRlIG9yZGVyaW5nIG9mIGFuIEFSMTZXUgorICoJCQkoZS5nLiAxMS83MCkgbWFjaGluZQorICoJRl9BUjMyV1IJdGhpcyBmaWxlIGhhcyB0aGUgYnl0ZSBvcmRlcmluZyBvZiBhbiBBUjMyV1IgbWFjaGluZQorICoJCQkoZS5nLiB2YXggYW5kIGlOVEVMIDM4NikKKyAqCUZfQVIzMlcJCXRoaXMgZmlsZSBoYXMgdGhlIGJ5dGUgb3JkZXJpbmcgb2YgYW4gQVIzMlcgbWFjaGluZQorICoJCQkoZS5nLiAzYixtYXhpKQorICoJRl9QQVRDSAkJZmlsZSBjb250YWlucyAicGF0Y2giIGxpc3QgaW4gb3B0aW9uYWwgaGVhZGVyCisgKglGX05PREYJCShtaW5pbWFsIGZpbGUgb25seSkgbm8gZGVjaXNpb24gZnVuY3Rpb25zIGZvcgorICoJCQlyZXBsYWNlZCBmdW5jdGlvbnMKKyAqLworCisjZGVmaW5lICBDT0ZGX0ZfUkVMRkxHCQkwMDAwMDAxCisjZGVmaW5lICBDT0ZGX0ZfRVhFQwkJMDAwMDAwMgorI2RlZmluZSAgQ09GRl9GX0xOTk8JCTAwMDAwMDQKKyNkZWZpbmUgIENPRkZfRl9MU1lNUwkJMDAwMDAxMAorI2RlZmluZSAgQ09GRl9GX01JTk1BTAkJMDAwMDAyMAorI2RlZmluZSAgQ09GRl9GX1VQREFURQkJMDAwMDA0MAorI2RlZmluZSAgQ09GRl9GX1NXQUJECQkwMDAwMTAwCisjZGVmaW5lICBDT0ZGX0ZfQVIxNldSCQkwMDAwMjAwCisjZGVmaW5lICBDT0ZGX0ZfQVIzMldSCQkwMDAwNDAwCisjZGVmaW5lICBDT0ZGX0ZfQVIzMlcJCTAwMDEwMDAKKyNkZWZpbmUgIENPRkZfRl9QQVRDSAkJMDAwMjAwMAorI2RlZmluZSAgQ09GRl9GX05PREYJCTAwMDIwMDAKKworI2RlZmluZQlDT0ZGX0kzODZNQUdJQwkgICAgICAgIDB4MTRjICAgLyogTGludXgncyBzeXN0ZW0gICAgKi8KKworI2lmIDAgICAvKiBQZXJoYXBzLCBzb21lZGF5LCB0aGVzZSBmb3JtYXRzIG1heSBiZSB1c2VkLiAgICAgICovCisjZGVmaW5lIENPRkZfSTM4NlBUWE1BR0lDCTB4MTU0CisjZGVmaW5lIENPRkZfSTM4NkFJWE1BR0lDCTB4MTc1ICAgLyogSUJNJ3MgQUlYIHN5c3RlbSAgKi8KKyNkZWZpbmUgQ09GRl9JMzg2QkFETUFHKHgpICgoQ09GRl9TSE9SVCgoeCkuZl9tYWdpYykgIT0gQ09GRl9JMzg2TUFHSUMpIFwKKwkJCSAgJiYgQ09GRl9TSE9SVCgoeCkuZl9tYWdpYykgIT0gQ09GRl9JMzg2UFRYTUFHSUMgXAorCQkJICAmJiBDT0ZGX1NIT1JUKCh4KS5mX21hZ2ljKSAhPSBDT0ZGX0kzODZBSVhNQUdJQykKKyNlbHNlCisjZGVmaW5lIENPRkZfSTM4NkJBRE1BRyh4KSAoQ09GRl9TSE9SVCgoeCkuZl9tYWdpYykgIT0gQ09GRl9JMzg2TUFHSUMpCisjZW5kaWYKKworI2RlZmluZQlDT0ZGX0ZJTEhEUglzdHJ1Y3QgQ09GRl9maWxlaGRyCisjZGVmaW5lCUNPRkZfRklMSFNaCXNpemVvZihDT0ZGX0ZJTEhEUikKKworLyoqKioqKioqKioqKioqKioqKioqKiogQU9VVCAiT1BUSU9OQUwgSEVBREVSIiAqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBMaW51eCBDT0ZGIG11c3QgaGF2ZSB0aGlzICJvcHRpb25hbCIgaGVhZGVyLiBTdGFuZGFyZCBDT0ZGIGhhcyBubyBlbnRyeQorICAgbG9jYXRpb24gZm9yIHRoZSAiZW50cnkiIHBvaW50LiBUaGV5IG5vcm1hbGx5IHdvdWxkIHN0YXJ0IHdpdGggdGhlIGZpcnN0CisgICBsb2NhdGlvbiBvZiB0aGUgLnRleHQgc2VjdGlvbi4gVGhpcyBpcyBub3QgYSBnb29kIGlkZWEgZm9yIGxpbnV4LiBTbywKKyAgIHRoZSB1c2Ugb2YgdGhpcyAib3B0aW9uYWwiIGhlYWRlciBpcyBub3Qgb3B0aW9uYWwuIEl0IGlzIHJlcXVpcmVkLgorCisgICBEbyBub3QgYmUgdGVtcHRlZCB0byBhc3N1bWUgdGhhdCB0aGUgc2l6ZSBvZiB0aGUgb3B0aW9uYWwgaGVhZGVyIGlzCisgICBhIGNvbnN0YW50IGFuZCBzaW1wbHkgaW5kZXggdGhlIG5leHQgYnl0ZSBieSB0aGUgc2l6ZSBvZiB0aGlzIHN0cnVjdHVyZS4KKyAgIFVzZSB0aGUgJ2Zfb3B0aGRyJyBmaWVsZCBpbiB0aGUgbWFpbiBjb2ZmIGhlYWRlciBmb3IgdGhlIHNpemUgb2YgdGhlCisgICBzdHJ1Y3R1cmUgYWN0dWFsbHkgd3JpdHRlbiB0byB0aGUgZmlsZSEhCisqLworCit0eXBlZGVmIHN0cnVjdCAKK3sKKyAgY2hhciAJbWFnaWNbMl07CQkvKiB0eXBlIG9mIGZpbGUJCQkJICovCisgIGNoYXIJdnN0YW1wWzJdOwkJLyogdmVyc2lvbiBzdGFtcAkJCSAqLworICBjaGFyCXRzaXplWzRdOwkJLyogdGV4dCBzaXplIGluIGJ5dGVzLCBwYWRkZWQgdG8gRlcgYmRyeSAqLworICBjaGFyCWRzaXplWzRdOwkJLyogaW5pdGlhbGl6ZWQgICBkYXRhICIgICAiCQkgKi8KKyAgY2hhcglic2l6ZVs0XTsJCS8qIHVuaW5pdGlhbGl6ZWQgZGF0YSAiICAgIgkJICovCisgIGNoYXIJZW50cnlbNF07CQkvKiBlbnRyeSBwdC4JCQkJICovCisgIGNoYXIgCXRleHRfc3RhcnRbNF07CQkvKiBiYXNlIG9mIHRleHQgdXNlZCBmb3IgdGhpcyBmaWxlICAgICAgICovCisgIGNoYXIgCWRhdGFfc3RhcnRbNF07CQkvKiBiYXNlIG9mIGRhdGEgdXNlZCBmb3IgdGhpcyBmaWxlICAgICAgICovCit9CitDT0ZGX0FPVVRIRFI7CisKKyNkZWZpbmUgQ09GRl9BT1VUU1ogKHNpemVvZihDT0ZGX0FPVVRIRFIpKQorCisjZGVmaW5lIENPRkZfU1RNQUdJQwkwNDAxCisjZGVmaW5lIENPRkZfT01BR0lDICAgICAwNDA0CisjZGVmaW5lIENPRkZfSk1BR0lDICAgICAwNDA3ICAgIC8qIGRpcnR5IHRleHQgYW5kIGRhdGEgaW1hZ2UsIGNhbid0IHNoYXJlICAqLworI2RlZmluZSBDT0ZGX0RNQUdJQyAgICAgMDQxMCAgICAvKiBkaXJ0eSB0ZXh0IHNlZ21lbnQsIGRhdGEgYWxpZ25lZCAgICAgICAgKi8KKyNkZWZpbmUgQ09GRl9aTUFHSUMgICAgIDA0MTMgICAgLyogVGhlIHByb3BlciBtYWdpYyBudW1iZXIgZm9yIGV4ZWN1dGFibGVzICAqLworI2RlZmluZSBDT0ZGX1NITUFHSUMJMDQ0MwkvKiBzaGFyZWQgbGlicmFyeSBoZWFkZXIgICAgICAgICAgICAgICAgICAgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKiogU0VDVElPTiBIRUFERVIgKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RydWN0IENPRkZfc2NuaGRyIHsKKyAgY2hhcgkJc19uYW1lWzhdOwkvKiBzZWN0aW9uIG5hbWUJCQkgICAgKi8KKyAgY2hhcgkJc19wYWRkcls0XTsJLyogcGh5c2ljYWwgYWRkcmVzcywgYWxpYXNlZCBzX25saWIgKi8KKyAgY2hhcgkJc192YWRkcls0XTsJLyogdmlydHVhbCBhZGRyZXNzCQkgICAgKi8KKyAgY2hhcgkJc19zaXplWzRdOwkvKiBzZWN0aW9uIHNpemUJCQkgICAgKi8KKyAgY2hhcgkJc19zY25wdHJbNF07CS8qIGZpbGUgcHRyIHRvIHJhdyBkYXRhIGZvciBzZWN0aW9uICovCisgIGNoYXIJCXNfcmVscHRyWzRdOwkvKiBmaWxlIHB0ciB0byByZWxvY2F0aW9uCSAgICAqLworICBjaGFyCQlzX2xubm9wdHJbNF07CS8qIGZpbGUgcHRyIHRvIGxpbmUgbnVtYmVycwkgICAgKi8KKyAgY2hhcgkJc19ucmVsb2NbMl07CS8qIG51bWJlciBvZiByZWxvY2F0aW9uIGVudHJpZXMJICAgICovCisgIGNoYXIJCXNfbmxubm9bMl07CS8qIG51bWJlciBvZiBsaW5lIG51bWJlciBlbnRyaWVzICAgICovCisgIGNoYXIJCXNfZmxhZ3NbNF07CS8qIGZsYWdzCQkJICAgICovCit9OworCisjZGVmaW5lCUNPRkZfU0NOSERSCXN0cnVjdCBDT0ZGX3NjbmhkcgorI2RlZmluZQlDT0ZGX1NDTkhTWglzaXplb2YoQ09GRl9TQ05IRFIpCisKKy8qCisgKiBuYW1lcyBvZiAic3BlY2lhbCIgc2VjdGlvbnMKKyAqLworCisjZGVmaW5lIENPRkZfVEVYVAkiLnRleHQiCisjZGVmaW5lIENPRkZfREFUQQkiLmRhdGEiCisjZGVmaW5lIENPRkZfQlNTCSIuYnNzIgorI2RlZmluZSBDT0ZGX0NPTU1FTlQgICAgIi5jb21tZW50IgorI2RlZmluZSBDT0ZGX0xJQiAgICAgICAgIi5saWIiCisKKyNkZWZpbmUgQ09GRl9TRUNUX1RFWFQgIDAgICAgICAvKiBTZWN0aW9uIGZvciBpbnN0cnVjdGlvbiBjb2RlICAgICAgICAgICAgICovCisjZGVmaW5lIENPRkZfU0VDVF9EQVRBICAxICAgICAgLyogU2VjdGlvbiBmb3IgaW5pdGlhbGl6ZWQgZ2xvYmFscyAgICAgICAgICAqLworI2RlZmluZSBDT0ZGX1NFQ1RfQlNTICAgMiAgICAgIC8qIFNlY3Rpb24gZm9yIHVuLWluaXRpYWxpemVkIGdsb2JhbHMgICAgICAgKi8KKyNkZWZpbmUgQ09GRl9TRUNUX1JFUUQgIDMgICAgICAvKiBNaW5pbXVtIG51bWJlciBvZiBzZWN0aW9ucyBmb3IgZ29vZCBmaWxlICovCisKKyNkZWZpbmUgQ09GRl9TVFlQX1JFRyAgICAgMHgwMCAvKiByZWd1bGFyIHNlZ21lbnQgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPRkZfU1RZUF9EU0VDVCAgIDB4MDEgLyogZHVtbXkgc2VnbWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDT0ZGX1NUWVBfTk9MT0FEICAweDAyIC8qIG5vLWxvYWQgc2VnbWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09GRl9TVFlQX0dST1VQICAgMHgwNCAvKiBncm91cCBzZWdtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPRkZfU1RZUF9QQUQgICAgIDB4MDggLyogLnBhZCBzZWdtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDT0ZGX1NUWVBfQ09QWSAgICAweDEwIC8qIGNvcHkgc2VjdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09GRl9TVFlQX1RFWFQgICAgMHgyMCAvKiAudGV4dCBzZWdtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPRkZfU1RZUF9EQVRBICAgIDB4NDAgLyogLmRhdGEgc2VnbWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDT0ZGX1NUWVBfQlNTICAgICAweDgwIC8qIC5ic3Mgc2VnbWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09GRl9TVFlQX0lORk8gICAweDIwMCAvKiAuY29tbWVudCBzZWN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPRkZfU1RZUF9PVkVSICAgMHg0MDAgLyogb3ZlcmxheSBzZWN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDT0ZGX1NUWVBfTElCICAgIDB4ODAwIC8qIGxpYnJhcnkgc2VjdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworLyoKKyAqIFNoYXJlZCBsaWJyYXJpZXMgaGF2ZSB0aGUgZm9sbG93aW5nIHNlY3Rpb24gaGVhZGVyIGluIHRoZSBkYXRhIGZpZWxkIGZvcgorICogZWFjaCBsaWJyYXJ5LgorICovCisKK3N0cnVjdCBDT0ZGX3NsaWIgeworICBjaGFyCQlzbF9lbnRzels0XTsJLyogU2l6ZSBvZiB0aGlzIGVudHJ5ICAgICAgICAgICAgICAgKi8KKyAgY2hhcgkJc2xfcGF0aG5keFs0XTsJLyogc2l6ZSBvZiB0aGUgaGVhZGVyIGZpZWxkICAgICAgICAgKi8KK307CisKKyNkZWZpbmUJQ09GRl9TTElCSEQJc3RydWN0IENPRkZfc2xpYgorI2RlZmluZQlDT0ZGX1NMSUJTWglzaXplb2YoQ09GRl9TTElCSEQpCisKKy8qKioqKioqKioqKioqKioqKioqKioqIExJTkUgTlVNQkVSUyAqKioqKioqKioqKioqKioqKioqKioqLworCisvKiAxIGxpbmUgbnVtYmVyIGVudHJ5IGZvciBldmVyeSAiYnJlYWtwb2ludGFibGUiIHNvdXJjZSBsaW5lIGluIGEgc2VjdGlvbi4KKyAqIExpbmUgbnVtYmVycyBhcmUgZ3JvdXBlZCBvbiBhIHBlciBmdW5jdGlvbiBiYXNpczsgZmlyc3QgZW50cnkgaW4gYSBmdW5jdGlvbgorICogZ3JvdXBpbmcgd2lsbCBoYXZlIGxfbG5ubyA9IDAgYW5kIGluIHBsYWNlIG9mIHBoeXNpY2FsIGFkZHJlc3Mgd2lsbCBiZSB0aGUKKyAqIHN5bWJvbCB0YWJsZSBpbmRleCBvZiB0aGUgZnVuY3Rpb24gbmFtZS4KKyAqLworCitzdHJ1Y3QgQ09GRl9saW5lbm8geworICB1bmlvbiB7CisgICAgY2hhciBsX3N5bW5keFs0XTsJLyogZnVuY3Rpb24gbmFtZSBzeW1ib2wgaW5kZXgsIGlmZiBsX2xubm8gPT0gMCovCisgICAgY2hhciBsX3BhZGRyWzRdOwkvKiAocGh5c2ljYWwpIGFkZHJlc3Mgb2YgbGluZSBudW1iZXIJKi8KKyAgfSBsX2FkZHI7CisgIGNoYXIgbF9sbm5vWzJdOwkvKiBsaW5lIG51bWJlcgkJKi8KK307CisKKyNkZWZpbmUJQ09GRl9MSU5FTk8Jc3RydWN0IENPRkZfbGluZW5vCisjZGVmaW5lCUNPRkZfTElORVNaCTYKKworLyoqKioqKioqKioqKioqKioqKioqKiogU1lNQk9MUyAqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIENPRkZfRV9TWU1OTUxFTgkgOAkvKiAjIGNoYXJhY3RlcnMgaW4gYSBzaG9ydCBzeW1ib2wgbmFtZQkqLworI2RlZmluZSBDT0ZGX0VfRklMTk1MRU4JMTQJLyogIyBjaGFyYWN0ZXJzIGluIGEgZmlsZSBuYW1lCQkqLworI2RlZmluZSBDT0ZGX0VfRElNTlVNCSA0CS8qICMgYXJyYXkgZGltZW5zaW9ucyBpbiBhdXhpbGlhcnkgZW50cnkgKi8KKworLyoKKyAqICBBbGwgc3ltYm9scyBhbmQgc2VjdGlvbnMgaGF2ZSB0aGUgZm9sbG93aW5nIGRlZmluaXRpb24KKyAqLworCitzdHJ1Y3QgQ09GRl9zeW1lbnQgCit7CisgIHVuaW9uIHsKKyAgICBjaGFyIGVfbmFtZVtFX1NZTU5NTEVOXTsgICAgLyogU3ltYm9sIG5hbWUgKGZpcnN0IDggY2hhcmFjdGVycykgKi8KKyAgICBzdHJ1Y3QgeworICAgICAgY2hhciBlX3plcm9lc1s0XTsgICAgICAgICAvKiBMZWFkaW5nIHplcm9zICovCisgICAgICBjaGFyIGVfb2Zmc2V0WzRdOyAgICAgICAgIC8qIE9mZnNldCBpZiB0aGlzIGlzIGEgaGVhZGVyIHNlY3Rpb24gKi8KKyAgICB9IGU7CisgIH0gZTsKKworICBjaGFyIGVfdmFsdWVbNF07ICAgICAgICAgICAgICAvKiBWYWx1ZSAoYWRkcmVzcykgb2YgdGhlIHNlZ21lbnQgKi8KKyAgY2hhciBlX3NjbnVtWzJdOyAgICAgICAgICAgICAgLyogU2VjdGlvbiBudW1iZXIgKi8KKyAgY2hhciBlX3R5cGVbMl07ICAgICAgICAgICAgICAgLyogVHlwZSBvZiBzZWN0aW9uICovCisgIGNoYXIgZV9zY2xhc3NbMV07ICAgICAgICAgICAgIC8qIExvYWRlciBjbGFzcyAqLworICBjaGFyIGVfbnVtYXV4WzFdOyAgICAgICAgICAgICAvKiBOdW1iZXIgb2YgYXV4aWxpYXJ5IGVudHJpZXMgd2hpY2ggZm9sbG93ICovCit9OworCisjZGVmaW5lIENPRkZfTl9CVE1BU0sJKDB4ZikgICAvKiBNYXNrIGZvciBpbXBvcnRhbnQgY2xhc3MgYml0cyAqLworI2RlZmluZSBDT0ZGX05fVE1BU0sJKDB4MzApICAvKiBNYXNrIGZvciBpbXBvcnRhbnQgdHlwZSBiaXRzICAqLworI2RlZmluZSBDT0ZGX05fQlRTSEZUCSg0KSAgICAgLyogIyBiaXRzIHRvIHNoaWZ0IGNsYXNzIGZpZWxkICAgKi8KKyNkZWZpbmUgQ09GRl9OX1RTSElGVAkoMikgICAgIC8qICMgYml0cyB0byBzaGlmdCB0eXBlIGZpZWxkICAgICovCisKKy8qCisgKiAgQXV4aWxpYXJ5IGVudHJpZXMgYmVjYXVzZSB0aGUgbWFpbiB0YWJsZSBpcyB0b28gbGltaXRpbmcuCisgKi8KKyAgCit1bmlvbiBDT0ZGX2F1eGVudCB7CisKKy8qCisgKiAgRGVidWdnZXIgaW5mb3JtYXRpb24KKyAqLworCisgIHN0cnVjdCB7CisgICAgY2hhciB4X3RhZ25keFs0XTsJICAgICAgICAvKiBzdHIsIHVuLCBvciBlbnVtIHRhZyBpbmR4ICovCisgICAgdW5pb24geworICAgICAgc3RydWN0IHsKKwljaGFyICB4X2xubm9bMl07ICAgICAgICAvKiBkZWNsYXJhdGlvbiBsaW5lIG51bWJlciAqLworCWNoYXIgIHhfc2l6ZVsyXTsgICAgICAgIC8qIHN0ci91bmlvbi9hcnJheSBzaXplICovCisgICAgICB9IHhfbG5zejsKKyAgICAgIGNoYXIgeF9mc2l6ZVs0XTsJICAgICAgICAvKiBzaXplIG9mIGZ1bmN0aW9uICovCisgICAgfSB4X21pc2M7CisKKyAgICB1bmlvbiB7CisgICAgICBzdHJ1Y3QgewkJICAgICAgICAvKiBpZiBJU0ZDTiwgdGFnLCBvciAuYmIgKi8KKwljaGFyIHhfbG5ub3B0cls0XTsJLyogcHRyIHRvIGZjbiBsaW5lICMgKi8KKwljaGFyIHhfZW5kbmR4WzRdOwkvKiBlbnRyeSBuZHggcGFzdCBibG9jayBlbmQgKi8KKyAgICAgIH0geF9mY247CisKKyAgICAgIHN0cnVjdCB7CQkgICAgICAgIC8qIGlmIElTQVJZLCB1cCB0byA0IGRpbWVuLiAqLworCWNoYXIgeF9kaW1lbltFX0RJTU5VTV1bMl07CisgICAgICB9IHhfYXJ5OworICAgIH0geF9mY25hcnk7CisKKyAgICBjaGFyIHhfdHZuZHhbMl07CS8qIHR2IGluZGV4ICovCisgIH0geF9zeW07CisKKy8qCisgKiAgIFNvdXJjZSBmaWxlIG5hbWVzIChkZWJ1Z2dlciBpbmZvcm1hdGlvbikKKyAqLworCisgIHVuaW9uIHsKKyAgICBjaGFyIHhfZm5hbWVbRV9GSUxOTUxFTl07CisgICAgc3RydWN0IHsKKyAgICAgIGNoYXIgeF96ZXJvZXNbNF07CisgICAgICBjaGFyIHhfb2Zmc2V0WzRdOworICAgIH0geF9uOworICB9IHhfZmlsZTsKKworLyoKKyAqICAgU2VjdGlvbiBpbmZvcm1hdGlvbgorICovCisKKyAgc3RydWN0IHsKKyAgICBjaGFyIHhfc2NubGVuWzRdOwkvKiBzZWN0aW9uIGxlbmd0aCAqLworICAgIGNoYXIgeF9ucmVsb2NbMl07CS8qICMgcmVsb2NhdGlvbiBlbnRyaWVzICovCisgICAgY2hhciB4X25saW5ub1syXTsJLyogIyBsaW5lIG51bWJlcnMgKi8KKyAgfSB4X3NjbjsKKworLyoKKyAqICAgVHJhbnNmZXIgdmVjdG9yIChicmFuY2ggdGFibGUpCisgKi8KKyAgCisgIHN0cnVjdCB7CisgICAgY2hhciB4X3R2ZmlsbFs0XTsJLyogdHYgZmlsbCB2YWx1ZSAqLworICAgIGNoYXIgeF90dmxlblsyXTsJLyogbGVuZ3RoIG9mIC50diAqLworICAgIGNoYXIgeF90dnJhblsyXVsyXTsJLyogdHYgcmFuZ2UgKi8KKyAgfSB4X3R2OwkJLyogaW5mbyBhYm91dCAudHYgc2VjdGlvbiAoaW4gYXV4ZW50IG9mIHN5bWJvbCAudHYpKSAqLworfTsKKworI2RlZmluZQlDT0ZGX1NZTUVOVAlzdHJ1Y3QgQ09GRl9zeW1lbnQKKyNkZWZpbmUJQ09GRl9TWU1FU1oJMTgJCisjZGVmaW5lCUNPRkZfQVVYRU5UCXVuaW9uIENPRkZfYXV4ZW50CisjZGVmaW5lCUNPRkZfQVVYRVNaCTE4CisKKyNkZWZpbmUgQ09GRl9FVEVYVAkiZXRleHQiCisKKy8qKioqKioqKioqKioqKioqKioqKioqIFJFTE9DQVRJT04gRElSRUNUSVZFUyAqKioqKioqKioqKioqKioqKioqKioqLworCitzdHJ1Y3QgQ09GRl9yZWxvYyB7CisgIGNoYXIgcl92YWRkcls0XTsgICAgICAgIC8qIFZpcnR1YWwgYWRkcmVzcyBvZiBpdGVtICAgICovCisgIGNoYXIgcl9zeW1uZHhbNF07ICAgICAgIC8qIFN5bWJvbCBpbmRleCBpbiB0aGUgc3ltdGFiICovCisgIGNoYXIgcl90eXBlWzJdOyAgICAgICAgIC8qIFJlbG9jYXRpb24gdHlwZSAgICAgICAgICAgICovCit9OworCisjZGVmaW5lIENPRkZfUkVMT0Mgc3RydWN0IENPRkZfcmVsb2MKKyNkZWZpbmUgQ09GRl9SRUxTWiAxMAorCisjZGVmaW5lIENPRkZfREVGX0RBVEFfU0VDVElPTl9BTElHTk1FTlQgIDQKKyNkZWZpbmUgQ09GRl9ERUZfQlNTX1NFQ1RJT05fQUxJR05NRU5UICAgNAorI2RlZmluZSBDT0ZGX0RFRl9URVhUX1NFQ1RJT05fQUxJR05NRU5UICA0CisKKy8qIEZvciBuZXcgc2VjdGlvbnMgd2UgaGF2ZW4ndCBoZWFyZCBvZiBiZWZvcmUgKi8KKyNkZWZpbmUgQ09GRl9ERUZfU0VDVElPTl9BTElHTk1FTlQgICAgICAgNApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb20yMDAyMC5oIGIvaW5jbHVkZS9saW51eC9jb20yMDAyMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjNmQ5YTQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2NvbTIwMDIwLmgKQEAgLTAsMCArMSwxMTUgQEAKKy8qCisgKiBMaW51eCBBUkNuZXQgZHJpdmVyIC0gQ09NMjAwMjAgY2hpcHNldCBzdXBwb3J0IC0gZnVuY3Rpb24gZGVjbGFyYXRpb25zCisgKiAKKyAqIFdyaXR0ZW4gMTk5NyBieSBEYXZpZCBXb29kaG91c2UuCisgKiBXcml0dGVuIDE5OTQtMTk5OSBieSBBdmVyeSBQZW5uYXJ1bi4KKyAqIERlcml2ZWQgZnJvbSBza2VsZXRvbi5jIGJ5IERvbmFsZCBCZWNrZXIuCisgKgorICogU3BlY2lhbCB0aGFua3MgdG8gQ29udGVtcG9yYXJ5IENvbnRyb2xzLCBJbmMuICh3d3cuY2NvbnRyb2xzLmNvbSkKKyAqICBmb3Igc3BvbnNvcmluZyB0aGUgZnVydGhlciBkZXZlbG9wbWVudCBvZiB0aGlzIGRyaXZlci4KKyAqCisgKiAqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogVGhlIG9yaWdpbmFsIGNvcHlyaWdodCBvZiBza2VsZXRvbi5jIHdhcyBhcyBmb2xsb3dzOgorICoKKyAqIHNrZWxldG9uLmMgV3JpdHRlbiAxOTkzIGJ5IERvbmFsZCBCZWNrZXIuCisgKiBDb3B5cmlnaHQgMTk5MyBVbml0ZWQgU3RhdGVzIEdvdmVybm1lbnQgYXMgcmVwcmVzZW50ZWQgYnkgdGhlCisgKiBEaXJlY3RvciwgTmF0aW9uYWwgU2VjdXJpdHkgQWdlbmN5LiAgVGhpcyBzb2Z0d2FyZSBtYXkgb25seSBiZSB1c2VkCisgKiBhbmQgZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIG1vZGlmaWVkIGJ5IFNSQywgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuCisgKgorICogKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZvciBtb3JlIGRldGFpbHMsIHNlZSBkcml2ZXJzL25ldC9hcmNuZXQuYworICoKKyAqICoqKioqKioqKioqKioqKioqKioqKioKKyAqLworI2lmbmRlZiBfX0NPTTIwMDIwX0gKKyNkZWZpbmUgX19DT00yMDAyMF9ICisKK2ludCBjb20yMDAyMF9jaGVjayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK2ludCBjb20yMDAyMF9mb3VuZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgc2hhcmVkKTsKKworLyogVGhlIG51bWJlciBvZiBsb3cgSS9PIHBvcnRzIHVzZWQgYnkgdGhlIGNhcmQuICovCisjZGVmaW5lIEFSQ05FVF9UT1RBTF9TSVpFIDgKKworLyogdmFyaW91cyByZWdpc3RlciBhZGRyZXNzZXMgKi8KKyNpZmRlZiBDT05GSUdfU0ExMTAwX0NUNjAwMQorI2RlZmluZSBCVVNfQUxJR04gIDIgIC8qIDggYml0IGRldmljZSBvbiBhIDE2IGJpdCBidXMgLSBuZWVkcyBwYWRkaW5nICovCisjZWxzZQorI2RlZmluZSBCVVNfQUxJR04gIDEKKyNlbmRpZgorCisKKyNkZWZpbmUgX0lOVE1BU0sgIChpb2FkZHIrQlVTX0FMSUdOKjApCS8qIHdyaXRhYmxlICovCisjZGVmaW5lIF9TVEFUVVMgICAoaW9hZGRyK0JVU19BTElHTiowKQkvKiByZWFkYWJsZSAqLworI2RlZmluZSBfQ09NTUFORCAgKGlvYWRkcitCVVNfQUxJR04qMSkJLyogc3RhbmRhcmQgYXJjbmV0IGNvbW1hbmRzICovCisjZGVmaW5lIF9ESUFHU1RBVCAoaW9hZGRyK0JVU19BTElHTioxKQkvKiBkaWFnbm9zdGljIHN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBfQUREUl9ISSAgKGlvYWRkcitCVVNfQUxJR04qMikJLyogY29udHJvbCByZWdpc3RlcnMgZm9yIElPLW1hcHBlZCBtZW1vcnkgKi8KKyNkZWZpbmUgX0FERFJfTE8gIChpb2FkZHIrQlVTX0FMSUdOKjMpCisjZGVmaW5lIF9NRU1EQVRBICAoaW9hZGRyK0JVU19BTElHTio0KQkvKiBkYXRhIHBvcnQgZm9yIElPLW1hcHBlZCBtZW1vcnkgKi8KKyNkZWZpbmUgX1NVQkFEUiAgIChpb2FkZHIrQlVTX0FMSUdOKjUpCS8qIHRoZSBleHRlbmRlZCBwb3J0IF9YUkVHIHJlZmVycyB0byAqLworI2RlZmluZSBfQ09ORklHICAgKGlvYWRkcitCVVNfQUxJR04qNikJLyogY29uZmlndXJhdGlvbiByZWdpc3RlciAqLworI2RlZmluZSBfWFJFRyAgICAgKGlvYWRkcitCVVNfQUxJR04qNykJLyogZXh0cmEgcmVnaXN0ZXJzIChpbmRleGVkIGJ5IF9DT05GSUcKKyAgCQkJCQlvciBfU1VCQURSKSAqLworCisvKiBpbiB0aGUgQUREUl9ISSByZWdpc3RlciAqLworI2RlZmluZSBSRERBVEFmbGFnCTB4ODAJLyogbmV4dCBhY2Nlc3MgaXMgYSByZWFkIChub3QgYSB3cml0ZSkgKi8KKworLyogaW4gdGhlIERJQUdTVEFUIHJlZ2lzdGVyICovCisjZGVmaW5lIE5FV05YVElEZmxhZwkweDAyCS8qIElEIHRvIHdoaWNoIHRva2VuIGlzIHBhc3NlZCBoYXMgY2hhbmdlZCAqLworCisvKiBpbiB0aGUgQ09ORklHIHJlZ2lzdGVyICovCisjZGVmaW5lIFJFU0VUY2ZnCTB4ODAJLyogcHV0IGNhcmQgaW4gcmVzZXQgc3RhdGUgKi8KKyNkZWZpbmUgVFhFTmNmZwkJMHgyMAkvKiBlbmFibGUgVFggKi8KKworLyogaW4gU0VUVVAgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUFJPTUlTQ3NldAkweDEwCS8qIGVuYWJsZSBSQ1ZfQUxMICovCisjZGVmaW5lIFAxTU9ERQkJMHg4MCAgICAvKiBlbmFibGUgUDEtTU9ERSBmb3IgQmFja3BsYW5lICovCisjZGVmaW5lIFNMT1dBUkIJCTB4MDEgICAgLyogZW5hYmxlIFNsb3cgQXJiaXRyYXRpb24gZm9yID49NU1icHMgKi8KKworLyogQ09NMjAwMnggKi8KKyNkZWZpbmUgU1VCX1RFTlRBVElWRQkwCS8qIHRlbnRhdGl2ZSBub2RlIElEICovCisjZGVmaW5lIFNVQl9OT0RFCTEJLyogbm9kZSBJRCAqLworI2RlZmluZSBTVUJfU0VUVVAxCTIJLyogdmFyaW91cyBvcHRpb25zICovCisjZGVmaW5lIFNVQl9URVNUCTMJLyogdGVzdC9kaWFnIHJlZ2lzdGVyICovCisKKy8qIENPTTIwMDIyIG9ubHkgKi8KKyNkZWZpbmUgU1VCX1NFVFVQMgk0CS8qIHN1bmRyeSBvcHRpb25zICovCisjZGVmaW5lIFNVQl9CVVNDVEwJNQkvKiBidXMgY29udHJvbCBvcHRpb25zICovCisjZGVmaW5lIFNVQl9ETUFDT1VOVAk2CS8qIERNQSBjb3VudCBvcHRpb25zICovCisKKyNkZWZpbmUgU0VUX1NVQkFEUih4KSBkbyB7IFwKKwlpZiAoKHgpIDwgNCkgXAorCXsgXAorCQlscC0+Y29uZmlnID0gKGxwLT5jb25maWcgJiB+MHgwMykgfCAoeCk7IFwKKwkJU0VUQ09ORjsgXAorCX0gXAorCWVsc2UgXAorCXsgXAorCQlvdXRiKHgsIF9TVUJBRFIpOyBcCisJfSBcCit9IHdoaWxlICgwKQorCisjdW5kZWYgQVJDUkVTRVQKKyN1bmRlZiBBU1RBVFVTCisjdW5kZWYgQUNPTU1BTkQKKyN1bmRlZiBBSU5UTUFTSworCisjZGVmaW5lIEFSQ1JFU0VUIHsgb3V0YihscC0+Y29uZmlnIHwgMHg4MCwgX0NPTkZJRyk7IFwKKwkJICAgIHVkZWxheSg1KTsgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSAgICBvdXRiKGxwLT5jb25maWcgLCBfQ09ORklHKTsgICAgICAgXAorICAgICAgICAgICAgICAgICAgfQorI2RlZmluZSBBUkNSRVNFVDAgeyBvdXRiKDB4MTggfCAweDgwLCBfQ09ORklHKTsgICBcCisJCSAgICB1ZGVsYXkoNSk7ICAgICAgICAgICAgICAgICAgICAgICBcCisJCSAgICBvdXRiKDB4MTggLCBfQ09ORklHKTsgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICB9CisKKyNkZWZpbmUgQVNUQVRVUygpCWluYihfU1RBVFVTKQorI2RlZmluZSBBRElBR1NUQVRVUygpCWluYihfRElBR1NUQVQpCisjZGVmaW5lIEFDT01NQU5EKGNtZCkJb3V0YigoY21kKSxfQ09NTUFORCkKKyNkZWZpbmUgQUlOVE1BU0sobXNrKQlvdXRiKChtc2spLF9JTlRNQVNLKQorCisjZGVmaW5lIFNFVENPTkYJCW91dGIobHAtPmNvbmZpZywgX0NPTkZJRykKKworI2VuZGlmIC8qIF9fQ09NMjAwMjBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb21wYXQuaCBiL2luY2x1ZGUvbGludXgvY29tcGF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU4YjdkNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvY29tcGF0LmgKQEAgLTAsMCArMSwxNjIgQEAKKyNpZm5kZWYgX0xJTlVYX0NPTVBBVF9ICisjZGVmaW5lIF9MSU5VWF9DT01QQVRfSAorLyoKKyAqIFRoZXNlIGFyZSB0aGUgdHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIGFyY2hpdGVjdHVyZSBzcGVjaWZpYworICogc3lzY2FsbCBjb21wYXRpYmlsaXR5IGxheWVyLgorICovCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisKKyNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+CisjaW5jbHVkZSA8bGludXgvcGFyYW0uaD4JLyogZm9yIEhaICovCisjaW5jbHVkZSA8bGludXgvc2VtLmg+CisKKyNpbmNsdWRlIDxhc20vY29tcGF0Lmg+CisjaW5jbHVkZSA8YXNtL3NpZ2luZm8uaD4KKworI2RlZmluZSBjb21wYXRfamlmZmllc190b19jbG9ja190KHgpCVwKKwkJKCgodW5zaWduZWQgbG9uZykoeCkgKiBDT01QQVRfVVNFUl9IWikgLyBIWikKKworc3RydWN0IHJ1c2FnZTsKKworc3RydWN0IGNvbXBhdF9pdGltZXJzcGVjIHsgCisJc3RydWN0IGNvbXBhdF90aW1lc3BlYyBpdF9pbnRlcnZhbDsKKwlzdHJ1Y3QgY29tcGF0X3RpbWVzcGVjIGl0X3ZhbHVlOworfTsKKworc3RydWN0IGNvbXBhdF91dGltYnVmIHsKKwljb21wYXRfdGltZV90CQlhY3RpbWU7CisJY29tcGF0X3RpbWVfdAkJbW9kdGltZTsKK307CisKK3N0cnVjdCBjb21wYXRfaXRpbWVydmFsIHsKKwlzdHJ1Y3QgY29tcGF0X3RpbWV2YWwJaXRfaW50ZXJ2YWw7CisJc3RydWN0IGNvbXBhdF90aW1ldmFsCWl0X3ZhbHVlOworfTsKKworc3RydWN0IGNvbXBhdF90bXMgeworCWNvbXBhdF9jbG9ja190CQl0bXNfdXRpbWU7CisJY29tcGF0X2Nsb2NrX3QJCXRtc19zdGltZTsKKwljb21wYXRfY2xvY2tfdAkJdG1zX2N1dGltZTsKKwljb21wYXRfY2xvY2tfdAkJdG1zX2NzdGltZTsKK307CisKKyNkZWZpbmUgX0NPTVBBVF9OU0lHX1dPUkRTCShfQ09NUEFUX05TSUcgLyBfQ09NUEFUX05TSUdfQlBXKQorCit0eXBlZGVmIHN0cnVjdCB7CisJY29tcGF0X3NpZ3NldF93b3JkCXNpZ1tfQ09NUEFUX05TSUdfV09SRFNdOworfSBjb21wYXRfc2lnc2V0X3Q7CisKK2V4dGVybiBpbnQgY3BfY29tcGF0X3N0YXQoc3RydWN0IGtzdGF0ICosIHN0cnVjdCBjb21wYXRfc3RhdCBfX3VzZXIgKik7CitleHRlcm4gaW50IGdldF9jb21wYXRfdGltZXNwZWMoc3RydWN0IHRpbWVzcGVjICosIGNvbnN0IHN0cnVjdCBjb21wYXRfdGltZXNwZWMgX191c2VyICopOworZXh0ZXJuIGludCBwdXRfY29tcGF0X3RpbWVzcGVjKGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqLCBzdHJ1Y3QgY29tcGF0X3RpbWVzcGVjIF9fdXNlciAqKTsKKworc3RydWN0IGNvbXBhdF9pb3ZlYyB7CisJY29tcGF0X3VwdHJfdAlpb3ZfYmFzZTsKKwljb21wYXRfc2l6ZV90CWlvdl9sZW47Cit9OworCitzdHJ1Y3QgY29tcGF0X3JsaW1pdCB7CisJY29tcGF0X3Vsb25nX3QJcmxpbV9jdXI7CisJY29tcGF0X3Vsb25nX3QJcmxpbV9tYXg7Cit9OworCitzdHJ1Y3QgY29tcGF0X3J1c2FnZSB7CisJc3RydWN0IGNvbXBhdF90aW1ldmFsIHJ1X3V0aW1lOworCXN0cnVjdCBjb21wYXRfdGltZXZhbCBydV9zdGltZTsKKwljb21wYXRfbG9uZ190CXJ1X21heHJzczsKKwljb21wYXRfbG9uZ190CXJ1X2l4cnNzOworCWNvbXBhdF9sb25nX3QJcnVfaWRyc3M7CisJY29tcGF0X2xvbmdfdAlydV9pc3JzczsKKwljb21wYXRfbG9uZ190CXJ1X21pbmZsdDsKKwljb21wYXRfbG9uZ190CXJ1X21hamZsdDsKKwljb21wYXRfbG9uZ190CXJ1X25zd2FwOworCWNvbXBhdF9sb25nX3QJcnVfaW5ibG9jazsKKwljb21wYXRfbG9uZ190CXJ1X291YmxvY2s7CisJY29tcGF0X2xvbmdfdAlydV9tc2dzbmQ7CisJY29tcGF0X2xvbmdfdAlydV9tc2dyY3Y7CisJY29tcGF0X2xvbmdfdAlydV9uc2lnbmFsczsKKwljb21wYXRfbG9uZ190CXJ1X252Y3N3OworCWNvbXBhdF9sb25nX3QJcnVfbml2Y3N3OworfTsKKworZXh0ZXJuIGludCBwdXRfY29tcGF0X3J1c2FnZShjb25zdCBzdHJ1Y3QgcnVzYWdlICosIHN0cnVjdCBjb21wYXRfcnVzYWdlIF9fdXNlciAqKTsKKworc3RydWN0IGNvbXBhdF9zaWdpbmZvOworCitleHRlcm4gYXNtbGlua2FnZSBsb25nIGNvbXBhdF9zeXNfd2FpdGlkKGludCwgY29tcGF0X3BpZF90LAorCQlzdHJ1Y3QgY29tcGF0X3NpZ2luZm8gX191c2VyICosIGludCwKKwkJc3RydWN0IGNvbXBhdF9ydXNhZ2UgX191c2VyICopOworCitzdHJ1Y3QgY29tcGF0X2RpcmVudCB7CisJdTMyCQlkX2lubzsKKwljb21wYXRfb2ZmX3QJZF9vZmY7CisJdTE2CQlkX3JlY2xlbjsKKwljaGFyCQlkX25hbWVbMjU2XTsKK307CisKK3R5cGVkZWYgdW5pb24gY29tcGF0X3NpZ3ZhbCB7CisJY29tcGF0X2ludF90CXNpdmFsX2ludDsKKwljb21wYXRfdXB0cl90CXNpdmFsX3B0cjsKK30gY29tcGF0X3NpZ3ZhbF90OworCisjZGVmaW5lIENPTVBBVF9TSUdFVl9QQURfU0laRQkoKFNJR0VWX01BWF9TSVpFL3NpemVvZihpbnQpKSAtIDMpCisKK3R5cGVkZWYgc3RydWN0IGNvbXBhdF9zaWdldmVudCB7CisJY29tcGF0X3NpZ3ZhbF90IHNpZ2V2X3ZhbHVlOworCWNvbXBhdF9pbnRfdCBzaWdldl9zaWdubzsKKwljb21wYXRfaW50X3Qgc2lnZXZfbm90aWZ5OworCXVuaW9uIHsKKwkJY29tcGF0X2ludF90IF9wYWRbQ09NUEFUX1NJR0VWX1BBRF9TSVpFXTsKKwkJY29tcGF0X2ludF90IF90aWQ7CisKKwkJc3RydWN0IHsKKwkJCWNvbXBhdF91cHRyX3QgX2Z1bmN0aW9uOworCQkJY29tcGF0X3VwdHJfdCBfYXR0cmlidXRlOworCQl9IF9zaWdldl90aHJlYWQ7CisJfSBfc2lnZXZfdW47Cit9IGNvbXBhdF9zaWdldmVudF90OworCisKK2xvbmcgY29tcGF0X3N5c19zZW1jdGwoaW50IGZpcnN0LCBpbnQgc2Vjb25kLCBpbnQgdGhpcmQsIHZvaWQgX191c2VyICp1cHRyKTsKK2xvbmcgY29tcGF0X3N5c19tc2dzbmQoaW50IGZpcnN0LCBpbnQgc2Vjb25kLCBpbnQgdGhpcmQsIHZvaWQgX191c2VyICp1cHRyKTsKK2xvbmcgY29tcGF0X3N5c19tc2dyY3YoaW50IGZpcnN0LCBpbnQgc2Vjb25kLCBpbnQgbXNndHlwLCBpbnQgdGhpcmQsCisJCWludCB2ZXJzaW9uLCB2b2lkIF9fdXNlciAqdXB0cik7Citsb25nIGNvbXBhdF9zeXNfbXNnY3RsKGludCBmaXJzdCwgaW50IHNlY29uZCwgdm9pZCBfX3VzZXIgKnVwdHIpOworbG9uZyBjb21wYXRfc3lzX3NobWF0KGludCBmaXJzdCwgaW50IHNlY29uZCwgY29tcGF0X3VwdHJfdCB0aGlyZCwgaW50IHZlcnNpb24sCisJCXZvaWQgX191c2VyICp1cHRyKTsKK2xvbmcgY29tcGF0X3N5c19zaG1jdGwoaW50IGZpcnN0LCBpbnQgc2Vjb25kLCB2b2lkIF9fdXNlciAqdXB0cik7Citsb25nIGNvbXBhdF9zeXNfc2VtdGltZWRvcChpbnQgc2VtaWQsIHN0cnVjdCBzZW1idWYgX191c2VyICp0c2VtcywKKwkJdW5zaWduZWQgbnNlbXMsIGNvbnN0IHN0cnVjdCBjb21wYXRfdGltZXNwZWMgX191c2VyICp0aW1lb3V0KTsKK2FzbWxpbmthZ2UgbG9uZyBjb21wYXRfc3lzX2tleWN0bCh1MzIgb3B0aW9uLAorCQkJICAgICAgdTMyIGFyZzIsIHUzMiBhcmczLCB1MzIgYXJnNCwgdTMyIGFyZzUpOworCithc21saW5rYWdlIHNzaXplX3QgY29tcGF0X3N5c19yZWFkdih1bnNpZ25lZCBsb25nIGZkLAorCQljb25zdCBzdHJ1Y3QgY29tcGF0X2lvdmVjIF9fdXNlciAqdmVjLCB1bnNpZ25lZCBsb25nIHZsZW4pOworYXNtbGlua2FnZSBzc2l6ZV90IGNvbXBhdF9zeXNfd3JpdGV2KHVuc2lnbmVkIGxvbmcgZmQsCisJCWNvbnN0IHN0cnVjdCBjb21wYXRfaW92ZWMgX191c2VyICp2ZWMsIHVuc2lnbmVkIGxvbmcgdmxlbik7CisKK2ludCBjb21wYXRfZG9fZXhlY3ZlKGNoYXIgKiBmaWxlbmFtZSwgY29tcGF0X3VwdHJfdCBfX3VzZXIgKmFyZ3YsCisJICAgICAgICBjb21wYXRfdXB0cl90IF9fdXNlciAqZW52cCwgc3RydWN0IHB0X3JlZ3MgKiByZWdzKTsKKworYXNtbGlua2FnZSBsb25nIGNvbXBhdF9zeXNfc2VsZWN0KGludCBuLCBjb21wYXRfdWxvbmdfdCBfX3VzZXIgKmlucCwKKwkJY29tcGF0X3Vsb25nX3QgX191c2VyICpvdXRwLCBjb21wYXRfdWxvbmdfdCBfX3VzZXIgKmV4cCwKKwkJc3RydWN0IGNvbXBhdF90aW1ldmFsIF9fdXNlciAqdHZwKTsKKworI2RlZmluZSBCSVRTX1BFUl9DT01QQVRfTE9ORyAgICAoOCpzaXplb2YoY29tcGF0X2xvbmdfdCkpCisKKyNkZWZpbmUgQklUU19UT19DT01QQVRfTE9OR1MoYml0cykgXAorCSgoKGJpdHMpK0JJVFNfUEVSX0NPTVBBVF9MT05HLTEpL0JJVFNfUEVSX0NPTVBBVF9MT05HKQorCitsb25nIGNvbXBhdF9nZXRfYml0bWFwKHVuc2lnbmVkIGxvbmcgKm1hc2ssIGNvbXBhdF91bG9uZ190IF9fdXNlciAqdW1hc2ssCisJCSAgICAgICB1bnNpZ25lZCBsb25nIGJpdG1hcF9zaXplKTsKK2xvbmcgY29tcGF0X3B1dF9iaXRtYXAoY29tcGF0X3Vsb25nX3QgX191c2VyICp1bWFzaywgdW5zaWduZWQgbG9uZyAqbWFzaywKKwkJICAgICAgIHVuc2lnbmVkIGxvbmcgYml0bWFwX3NpemUpOworaW50IGNvcHlfc2lnaW5mb19mcm9tX3VzZXIzMihzaWdpbmZvX3QgKnRvLCBzdHJ1Y3QgY29tcGF0X3NpZ2luZm8gX191c2VyICpmcm9tKTsKK2ludCBjb3B5X3NpZ2luZm9fdG9fdXNlcjMyKHN0cnVjdCBjb21wYXRfc2lnaW5mbyBfX3VzZXIgKnRvLCBzaWdpbmZvX3QgKmZyb20pOworaW50IGdldF9jb21wYXRfc2lnZXZlbnQoc3RydWN0IHNpZ2V2ZW50ICpldmVudCwKKwkJY29uc3Qgc3RydWN0IGNvbXBhdF9zaWdldmVudCBfX3VzZXIgKnVfZXZlbnQpOworCisjZW5kaWYgLyogQ09ORklHX0NPTVBBVCAqLworI2VuZGlmIC8qIF9MSU5VWF9DT01QQVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb21wYXRfaW9jdGwuaCBiL2luY2x1ZGUvbGludXgvY29tcGF0X2lvY3RsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBhNGViYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvY29tcGF0X2lvY3RsLmgKQEAgLTAsMCArMSw3NzEgQEAKKy8qIExpc3QgaGVyZSBleHBsaWNpdGx5IHdoaWNoIGlvY3RsJ3MgYXJlIGtub3duIHRvIGhhdmUKKyAqIGNvbXBhdGlibGUgdHlwZXMgcGFzc2VkIG9yIG5vbmUgYXQgYWxsLi4uIFBsZWFzZSBpbmNsdWRlCisgKiBvbmx5IHN0dWZmIHRoYXQgaXMgY29tcGF0aWJsZSBvbiAqYWxsIGFyY2hpdGVjdHVyZXMqLgorICovCisjaWZuZGVmIENPTVBBVElCTEVfSU9DVEwgLyogcG9pbnRlciB0byBjb21wYXRpYmxlIHN0cnVjdHVyZSBvciBubyBhcmd1bWVudCAqLworI2RlZmluZSBDT01QQVRJQkxFX0lPQ1RMKGNtZCkgIEhBTkRMRV9JT0NUTCgoY21kKSwoaW9jdGxfdHJhbnNfaGFuZGxlcl90KXN5c19pb2N0bCkKKyNlbmRpZgorCisjaWZuZGVmIFVMT05HX0lPQ1RMIC8qIGFyZ3VtZW50IGlzIGFuIHVuc2lnbmVkIGxvbmcgaW50ZWdlciwgbm90IGEgcG9pbnRlciAqLworI2RlZmluZSBVTE9OR19JT0NUTChjbWQpICBIQU5ETEVfSU9DVEwoKGNtZCksKGlvY3RsX3RyYW5zX2hhbmRsZXJfdClzeXNfaW9jdGwpCisjZW5kaWYKKworLyogQmlnIFQgKi8KK0NPTVBBVElCTEVfSU9DVEwoVENHRVRBKQorQ09NUEFUSUJMRV9JT0NUTChUQ1NFVEEpCitDT01QQVRJQkxFX0lPQ1RMKFRDU0VUQVcpCitDT01QQVRJQkxFX0lPQ1RMKFRDU0VUQUYpCitDT01QQVRJQkxFX0lPQ1RMKFRDU0JSSykKK1VMT05HX0lPQ1RMKFRDU0JSS1ApCitDT01QQVRJQkxFX0lPQ1RMKFRDWE9OQykKK0NPTVBBVElCTEVfSU9DVEwoVENGTFNIKQorQ09NUEFUSUJMRV9JT0NUTChUQ0dFVFMpCitDT01QQVRJQkxFX0lPQ1RMKFRDU0VUUykKK0NPTVBBVElCTEVfSU9DVEwoVENTRVRTVykKK0NPTVBBVElCTEVfSU9DVEwoVENTRVRTRikKK0NPTVBBVElCTEVfSU9DVEwoVElPQ0xJTlVYKQorQ09NUEFUSUJMRV9JT0NUTChUSU9DU0JSSykKK0NPTVBBVElCTEVfSU9DVEwoVElPQ0NCUkspCitVTE9OR19JT0NUTChUSU9DTUlXQUlUKQorQ09NUEFUSUJMRV9JT0NUTChUSU9DR0lDT1VOVCkKKy8qIExpdHRsZSB0ICovCitDT01QQVRJQkxFX0lPQ1RMKFRJT0NHRVREKQorQ09NUEFUSUJMRV9JT0NUTChUSU9DU0VURCkKK0NPTVBBVElCTEVfSU9DVEwoVElPQ0VYQ0wpCitDT01QQVRJQkxFX0lPQ1RMKFRJT0NOWENMKQorQ09NUEFUSUJMRV9JT0NUTChUSU9DQ09OUykKK0NPTVBBVElCTEVfSU9DVEwoVElPQ0dTT0ZUQ0FSKQorQ09NUEFUSUJMRV9JT0NUTChUSU9DU1NPRlRDQVIpCitDT01QQVRJQkxFX0lPQ1RMKFRJT0NTV0lOU1opCitDT01QQVRJQkxFX0lPQ1RMKFRJT0NHV0lOU1opCitDT01QQVRJQkxFX0lPQ1RMKFRJT0NNR0VUKQorQ09NUEFUSUJMRV9JT0NUTChUSU9DTUJJQykKK0NPTVBBVElCTEVfSU9DVEwoVElPQ01CSVMpCitDT01QQVRJQkxFX0lPQ1RMKFRJT0NNU0VUKQorQ09NUEFUSUJMRV9JT0NUTChUSU9DUEtUKQorQ09NUEFUSUJMRV9JT0NUTChUSU9DTk9UVFkpCitDT01QQVRJQkxFX0lPQ1RMKFRJT0NTVEkpCitDT01QQVRJQkxFX0lPQ1RMKFRJT0NPVVRRKQorQ09NUEFUSUJMRV9JT0NUTChUSU9DU1BHUlApCitDT01QQVRJQkxFX0lPQ1RMKFRJT0NHUEdSUCkKK1VMT05HX0lPQ1RMKFRJT0NTQ1RUWSkKK0NPTVBBVElCTEVfSU9DVEwoVElPQ0dQVE4pCitDT01QQVRJQkxFX0lPQ1RMKFRJT0NTUFRMQ0spCitDT01QQVRJQkxFX0lPQ1RMKFRJT0NTRVJHRVRMU1IpCisvKiBCaWcgRiAqLworQ09NUEFUSUJMRV9JT0NUTChGQklPQkxBTkspCitDT01QQVRJQkxFX0lPQ1RMKEZCSU9HRVRfVlNDUkVFTklORk8pCitDT01QQVRJQkxFX0lPQ1RMKEZCSU9QVVRfVlNDUkVFTklORk8pCitDT01QQVRJQkxFX0lPQ1RMKEZCSU9QQU5fRElTUExBWSkKK0NPTVBBVElCTEVfSU9DVEwoRkJJT0dFVF9DT04yRkJNQVApCitDT01QQVRJQkxFX0lPQ1RMKEZCSU9QVVRfQ09OMkZCTUFQKQorLyogTGl0dGxlIGYgKi8KK0NPTVBBVElCTEVfSU9DVEwoRklPQ0xFWCkKK0NPTVBBVElCTEVfSU9DVEwoRklPTkNMRVgpCitDT01QQVRJQkxFX0lPQ1RMKEZJT0FTWU5DKQorQ09NUEFUSUJMRV9JT0NUTChGSU9OQklPKQorQ09NUEFUSUJMRV9JT0NUTChGSU9OUkVBRCkgIC8qIFRoaXMgaXMgYWxzbyBUSU9DSU5RICovCisvKiAweDAwICovCitDT01QQVRJQkxFX0lPQ1RMKEZJQk1BUCkKK0NPTVBBVElCTEVfSU9DVEwoRklHRVRCU1opCisvKiAweDAzIC0tIEhEL0lERSBpb2N0bCdzIHVzZWQgYnkgaGRwYXJtIGFuZCBmcmllbmRzLgorICogICAgICAgICBTb21lIG5lZWQgdHJhbnNsYXRpb25zLCB0aGVzZSBkbyBub3QuCisgKi8KK0NPTVBBVElCTEVfSU9DVEwoSERJT19HRVRfSURFTlRJVFkpCitDT01QQVRJQkxFX0lPQ1RMKEhESU9fU0VUX0RNQSkKK0NPTVBBVElCTEVfSU9DVEwoSERJT19TRVRfVU5NQVNLSU5UUikKK0NPTVBBVElCTEVfSU9DVEwoSERJT19TRVRfTk9XRVJSKQorQ09NUEFUSUJMRV9JT0NUTChIRElPX1NFVF8zMkJJVCkKK0NPTVBBVElCTEVfSU9DVEwoSERJT19TRVRfTVVMVENPVU5UKQorQ09NUEFUSUJMRV9JT0NUTChIRElPX0RSSVZFX0NNRCkKK0NPTVBBVElCTEVfSU9DVEwoSERJT19EUklWRV9UQVNLKQorQ09NUEFUSUJMRV9JT0NUTChIRElPX1NFVF9QSU9fTU9ERSkKK0NPTVBBVElCTEVfSU9DVEwoSERJT19TRVRfTklDRSkKKy8qIDB4MDIgLS0gRmxvcHB5IGlvY3RscyAqLworQ09NUEFUSUJMRV9JT0NUTChGRE1TR09OKQorQ09NUEFUSUJMRV9JT0NUTChGRE1TR09GRikKK0NPTVBBVElCTEVfSU9DVEwoRkRTRVRFTVNHVFJFU0gpCitDT01QQVRJQkxFX0lPQ1RMKEZERkxVU0gpCitDT01QQVRJQkxFX0lPQ1RMKEZEV0VSUk9SQ0xSKQorQ09NUEFUSUJMRV9JT0NUTChGRFNFVE1BWEVSUlMpCitDT01QQVRJQkxFX0lPQ1RMKEZER0VUTUFYRVJSUykKK0NPTVBBVElCTEVfSU9DVEwoRkRHRVREUlZUWVApCitDT01QQVRJQkxFX0lPQ1RMKEZERUpFQ1QpCitDT01QQVRJQkxFX0lPQ1RMKEZEQ0xSUFJNKQorQ09NUEFUSUJMRV9JT0NUTChGREZNVEJFRykKK0NPTVBBVElCTEVfSU9DVEwoRkRGTVRFTkQpCitDT01QQVRJQkxFX0lPQ1RMKEZEUkVTRVQpCitDT01QQVRJQkxFX0lPQ1RMKEZEVFdBRERMRSkKK0NPTVBBVElCTEVfSU9DVEwoRkRGTVRUUkspCitDT01QQVRJQkxFX0lPQ1RMKEZEUkFXQ01EKQorLyogMHgxMiAqLworQ09NUEFUSUJMRV9JT0NUTChCTEtST1NFVCkKK0NPTVBBVElCTEVfSU9DVEwoQkxLUk9HRVQpCitDT01QQVRJQkxFX0lPQ1RMKEJMS1JSUEFSVCkKK0NPTVBBVElCTEVfSU9DVEwoQkxLRkxTQlVGKQorQ09NUEFUSUJMRV9JT0NUTChCTEtTRUNUU0VUKQorQ09NUEFUSUJMRV9JT0NUTChCTEtTU1pHRVQpCitVTE9OR19JT0NUTChCTEtSQVNFVCkKK1VMT05HX0lPQ1RMKEJMS0ZSQVNFVCkKKy8qIFJBSUQgKi8KK0NPTVBBVElCTEVfSU9DVEwoUkFJRF9WRVJTSU9OKQorQ09NUEFUSUJMRV9JT0NUTChHRVRfQVJSQVlfSU5GTykKK0NPTVBBVElCTEVfSU9DVEwoR0VUX0RJU0tfSU5GTykKK0NPTVBBVElCTEVfSU9DVEwoUFJJTlRfUkFJRF9ERUJVRykKK0NPTVBBVElCTEVfSU9DVEwoUkFJRF9BVVRPUlVOKQorQ09NUEFUSUJMRV9JT0NUTChDTEVBUl9BUlJBWSkKK0NPTVBBVElCTEVfSU9DVEwoQUREX05FV19ESVNLKQorVUxPTkdfSU9DVEwoSE9UX1JFTU9WRV9ESVNLKQorQ09NUEFUSUJMRV9JT0NUTChTRVRfQVJSQVlfSU5GTykKK0NPTVBBVElCTEVfSU9DVEwoU0VUX0RJU0tfSU5GTykKK0NPTVBBVElCTEVfSU9DVEwoV1JJVEVfUkFJRF9JTkZPKQorQ09NUEFUSUJMRV9JT0NUTChVTlBST1RFQ1RfQVJSQVkpCitDT01QQVRJQkxFX0lPQ1RMKFBST1RFQ1RfQVJSQVkpCitVTE9OR19JT0NUTChIT1RfQUREX0RJU0spCitVTE9OR19JT0NUTChTRVRfRElTS19GQVVMVFkpCitDT01QQVRJQkxFX0lPQ1RMKFJVTl9BUlJBWSkKK1VMT05HX0lPQ1RMKFNUQVJUX0FSUkFZKQorQ09NUEFUSUJMRV9JT0NUTChTVE9QX0FSUkFZKQorQ09NUEFUSUJMRV9JT0NUTChTVE9QX0FSUkFZX1JPKQorQ09NUEFUSUJMRV9JT0NUTChSRVNUQVJUX0FSUkFZX1JXKQorLyogRE0gKi8KK0NPTVBBVElCTEVfSU9DVEwoRE1fVkVSU0lPTl8zMikKK0NPTVBBVElCTEVfSU9DVEwoRE1fUkVNT1ZFX0FMTF8zMikKK0NPTVBBVElCTEVfSU9DVEwoRE1fTElTVF9ERVZJQ0VTXzMyKQorQ09NUEFUSUJMRV9JT0NUTChETV9ERVZfQ1JFQVRFXzMyKQorQ09NUEFUSUJMRV9JT0NUTChETV9ERVZfUkVNT1ZFXzMyKQorQ09NUEFUSUJMRV9JT0NUTChETV9ERVZfUkVOQU1FXzMyKQorQ09NUEFUSUJMRV9JT0NUTChETV9ERVZfU1VTUEVORF8zMikKK0NPTVBBVElCTEVfSU9DVEwoRE1fREVWX1NUQVRVU18zMikKK0NPTVBBVElCTEVfSU9DVEwoRE1fREVWX1dBSVRfMzIpCitDT01QQVRJQkxFX0lPQ1RMKERNX1RBQkxFX0xPQURfMzIpCitDT01QQVRJQkxFX0lPQ1RMKERNX1RBQkxFX0NMRUFSXzMyKQorQ09NUEFUSUJMRV9JT0NUTChETV9UQUJMRV9ERVBTXzMyKQorQ09NUEFUSUJMRV9JT0NUTChETV9UQUJMRV9TVEFUVVNfMzIpCitDT01QQVRJQkxFX0lPQ1RMKERNX0xJU1RfVkVSU0lPTlNfMzIpCitDT01QQVRJQkxFX0lPQ1RMKERNX1RBUkdFVF9NU0dfMzIpCitDT01QQVRJQkxFX0lPQ1RMKERNX1ZFUlNJT04pCitDT01QQVRJQkxFX0lPQ1RMKERNX1JFTU9WRV9BTEwpCitDT01QQVRJQkxFX0lPQ1RMKERNX0xJU1RfREVWSUNFUykKK0NPTVBBVElCTEVfSU9DVEwoRE1fREVWX0NSRUFURSkKK0NPTVBBVElCTEVfSU9DVEwoRE1fREVWX1JFTU9WRSkKK0NPTVBBVElCTEVfSU9DVEwoRE1fREVWX1JFTkFNRSkKK0NPTVBBVElCTEVfSU9DVEwoRE1fREVWX1NVU1BFTkQpCitDT01QQVRJQkxFX0lPQ1RMKERNX0RFVl9TVEFUVVMpCitDT01QQVRJQkxFX0lPQ1RMKERNX0RFVl9XQUlUKQorQ09NUEFUSUJMRV9JT0NUTChETV9UQUJMRV9MT0FEKQorQ09NUEFUSUJMRV9JT0NUTChETV9UQUJMRV9DTEVBUikKK0NPTVBBVElCTEVfSU9DVEwoRE1fVEFCTEVfREVQUykKK0NPTVBBVElCTEVfSU9DVEwoRE1fVEFCTEVfU1RBVFVTKQorQ09NUEFUSUJMRV9JT0NUTChETV9MSVNUX1ZFUlNJT05TKQorQ09NUEFUSUJMRV9JT0NUTChETV9UQVJHRVRfTVNHKQorLyogQmlnIEsgKi8KK0NPTVBBVElCTEVfSU9DVEwoUElPX0ZPTlQpCitDT01QQVRJQkxFX0lPQ1RMKEdJT19GT05UKQorVUxPTkdfSU9DVEwoS0RTSUdBQ0NFUFQpCitDT01QQVRJQkxFX0lPQ1RMKEtER0VUS0VZQ09ERSkKK0NPTVBBVElCTEVfSU9DVEwoS0RTRVRLRVlDT0RFKQorVUxPTkdfSU9DVEwoS0lPQ1NPVU5EKQorVUxPTkdfSU9DVEwoS0RNS1RPTkUpCitDT01QQVRJQkxFX0lPQ1RMKEtER0tCVFlQRSkKK1VMT05HX0lPQ1RMKEtEU0VUTU9ERSkKK0NPTVBBVElCTEVfSU9DVEwoS0RHRVRNT0RFKQorVUxPTkdfSU9DVEwoS0RTS0JNT0RFKQorQ09NUEFUSUJMRV9JT0NUTChLREdLQk1PREUpCitVTE9OR19JT0NUTChLRFNLQk1FVEEpCitDT01QQVRJQkxFX0lPQ1RMKEtER0tCTUVUQSkKK0NPTVBBVElCTEVfSU9DVEwoS0RHS0JFTlQpCitDT01QQVRJQkxFX0lPQ1RMKEtEU0tCRU5UKQorQ09NUEFUSUJMRV9JT0NUTChLREdLQlNFTlQpCitDT01QQVRJQkxFX0lPQ1RMKEtEU0tCU0VOVCkKK0NPTVBBVElCTEVfSU9DVEwoS0RHS0JESUFDUikKK0NPTVBBVElCTEVfSU9DVEwoS0RTS0JESUFDUikKK0NPTVBBVElCTEVfSU9DVEwoS0RLQkRSRVApCitDT01QQVRJQkxFX0lPQ1RMKEtER0tCTEVEKQorVUxPTkdfSU9DVEwoS0RTS0JMRUQpCitDT01QQVRJQkxFX0lPQ1RMKEtER0VUTEVEKQorVUxPTkdfSU9DVEwoS0RTRVRMRUQpCitDT01QQVRJQkxFX0lPQ1RMKEdJT19TQ1JOTUFQKQorQ09NUEFUSUJMRV9JT0NUTChQSU9fU0NSTk1BUCkKK0NPTVBBVElCTEVfSU9DVEwoR0lPX1VOSVNDUk5NQVApCitDT01QQVRJQkxFX0lPQ1RMKFBJT19VTklTQ1JOTUFQKQorQ09NUEFUSUJMRV9JT0NUTChQSU9fRk9OVFJFU0VUKQorQ09NUEFUSUJMRV9JT0NUTChQSU9fVU5JTUFQQ0xSKQorLyogQmlnIFMgKi8KK0NPTVBBVElCTEVfSU9DVEwoU0NTSV9JT0NUTF9HRVRfSURMVU4pCitDT01QQVRJQkxFX0lPQ1RMKFNDU0lfSU9DVExfRE9PUkxPQ0spCitDT01QQVRJQkxFX0lPQ1RMKFNDU0lfSU9DVExfRE9PUlVOTE9DSykKK0NPTVBBVElCTEVfSU9DVEwoU0NTSV9JT0NUTF9URVNUX1VOSVRfUkVBRFkpCitDT01QQVRJQkxFX0lPQ1RMKFNDU0lfSU9DVExfR0VUX0JVU19OVU1CRVIpCitDT01QQVRJQkxFX0lPQ1RMKFNDU0lfSU9DVExfU0VORF9DT01NQU5EKQorQ09NUEFUSUJMRV9JT0NUTChTQ1NJX0lPQ1RMX1BST0JFX0hPU1QpCitDT01QQVRJQkxFX0lPQ1RMKFNDU0lfSU9DVExfR0VUX1BDSSkKKy8qIEJpZyBUICovCitDT01QQVRJQkxFX0lPQ1RMKFRVTlNFVE5PQ1NVTSkKK0NPTVBBVElCTEVfSU9DVEwoVFVOU0VUREVCVUcpCitDT01QQVRJQkxFX0lPQ1RMKFRVTlNFVFBFUlNJU1QpCitDT01QQVRJQkxFX0lPQ1RMKFRVTlNFVE9XTkVSKQorLyogQmlnIFYgKi8KK0NPTVBBVElCTEVfSU9DVEwoVlRfU0VUTU9ERSkKK0NPTVBBVElCTEVfSU9DVEwoVlRfR0VUTU9ERSkKK0NPTVBBVElCTEVfSU9DVEwoVlRfR0VUU1RBVEUpCitDT01QQVRJQkxFX0lPQ1RMKFZUX09QRU5RUlkpCitVTE9OR19JT0NUTChWVF9BQ1RJVkFURSkKK1VMT05HX0lPQ1RMKFZUX1dBSVRBQ1RJVkUpCitVTE9OR19JT0NUTChWVF9SRUxESVNQKQorVUxPTkdfSU9DVEwoVlRfRElTQUxMT0NBVEUpCitDT01QQVRJQkxFX0lPQ1RMKFZUX1JFU0laRSkKK0NPTVBBVElCTEVfSU9DVEwoVlRfUkVTSVpFWCkKK0NPTVBBVElCTEVfSU9DVEwoVlRfTE9DS1NXSVRDSCkKK0NPTVBBVElCTEVfSU9DVEwoVlRfVU5MT0NLU1dJVENIKQorLyogTGl0dGxlIHYgKi8KKy8qIExpdHRsZSB2LCB0aGUgdmlkZW80bGludXggaW9jdGxzIChjb25mbGljdD8pICovCitDT01QQVRJQkxFX0lPQ1RMKFZJRElPQ0dDQVApCitDT01QQVRJQkxFX0lPQ1RMKFZJRElPQ0dDSEFOKQorQ09NUEFUSUJMRV9JT0NUTChWSURJT0NTQ0hBTikKK0NPTVBBVElCTEVfSU9DVEwoVklESU9DR1BJQ1QpCitDT01QQVRJQkxFX0lPQ1RMKFZJRElPQ1NQSUNUKQorQ09NUEFUSUJMRV9JT0NUTChWSURJT0NDQVBUVVJFKQorQ09NUEFUSUJMRV9JT0NUTChWSURJT0NLRVkpCitDT01QQVRJQkxFX0lPQ1RMKFZJRElPQ0dBVURJTykKK0NPTVBBVElCTEVfSU9DVEwoVklESU9DU0FVRElPKQorQ09NUEFUSUJMRV9JT0NUTChWSURJT0NTWU5DKQorQ09NUEFUSUJMRV9JT0NUTChWSURJT0NNQ0FQVFVSRSkKK0NPTVBBVElCTEVfSU9DVEwoVklESU9DR01CVUYpCitDT01QQVRJQkxFX0lPQ1RMKFZJRElPQ0dVTklUKQorQ09NUEFUSUJMRV9JT0NUTChWSURJT0NHQ0FQVFVSRSkKK0NPTVBBVElCTEVfSU9DVEwoVklESU9DU0NBUFRVUkUpCisvKiBCVFRWIHNwZWNpZmljLi4uICovCitDT01QQVRJQkxFX0lPQ1RMKF9JT1coJ3YnLCAgQkFTRV9WSURJT0NQUklWQVRFKzAsIGNoYXIgWzI1Nl0pKQorQ09NUEFUSUJMRV9JT0NUTChfSU9SKCd2JywgIEJBU0VfVklESU9DUFJJVkFURSsxLCBjaGFyIFsyNTZdKSkKK0NPTVBBVElCTEVfSU9DVEwoX0lPUigndicgLCBCQVNFX1ZJRElPQ1BSSVZBVEUrMiwgdW5zaWduZWQgaW50KSkKK0NPTVBBVElCTEVfSU9DVEwoX0lPVygndicgLCBCQVNFX1ZJRElPQ1BSSVZBVEUrMywgY2hhciBbMTZdKSkgLyogc3RydWN0IGJ0dHZfcGxsX2luZm8gKi8KK0NPTVBBVElCTEVfSU9DVEwoX0lPUigndicgLCBCQVNFX1ZJRElPQ1BSSVZBVEUrNCwgaW50KSkKK0NPTVBBVElCTEVfSU9DVEwoX0lPUigndicgLCBCQVNFX1ZJRElPQ1BSSVZBVEUrNSwgaW50KSkKK0NPTVBBVElCTEVfSU9DVEwoX0lPUigndicgLCBCQVNFX1ZJRElPQ1BSSVZBVEUrNiwgaW50KSkKK0NPTVBBVElCTEVfSU9DVEwoX0lPUigndicgLCBCQVNFX1ZJRElPQ1BSSVZBVEUrNywgaW50KSkKKy8qIExpdHRsZSBwICgvZGV2L3J0YywgL2Rldi9lbnZjdHJsLCBldGMuKSAqLworQ09NUEFUSUJMRV9JT0NUTChSVENfQUlFX09OKQorQ09NUEFUSUJMRV9JT0NUTChSVENfQUlFX09GRikKK0NPTVBBVElCTEVfSU9DVEwoUlRDX1VJRV9PTikKK0NPTVBBVElCTEVfSU9DVEwoUlRDX1VJRV9PRkYpCitDT01QQVRJQkxFX0lPQ1RMKFJUQ19QSUVfT04pCitDT01QQVRJQkxFX0lPQ1RMKFJUQ19QSUVfT0ZGKQorQ09NUEFUSUJMRV9JT0NUTChSVENfV0lFX09OKQorQ09NUEFUSUJMRV9JT0NUTChSVENfV0lFX09GRikKK0NPTVBBVElCTEVfSU9DVEwoUlRDX0FMTV9TRVQpCitDT01QQVRJQkxFX0lPQ1RMKFJUQ19BTE1fUkVBRCkKK0NPTVBBVElCTEVfSU9DVEwoUlRDX1JEX1RJTUUpCitDT01QQVRJQkxFX0lPQ1RMKFJUQ19TRVRfVElNRSkKK0NPTVBBVElCTEVfSU9DVEwoUlRDX1dLQUxNX1NFVCkKK0NPTVBBVElCTEVfSU9DVEwoUlRDX1dLQUxNX1JEKQorLyogTGl0dGxlIG0gKi8KK0NPTVBBVElCTEVfSU9DVEwoTVRJT0NUT1ApCisvKiBTb2NrZXQgbGV2ZWwgc3R1ZmYgKi8KK0NPTVBBVElCTEVfSU9DVEwoRklPU0VUT1dOKQorQ09NUEFUSUJMRV9JT0NUTChTSU9DU1BHUlApCitDT01QQVRJQkxFX0lPQ1RMKEZJT0dFVE9XTikKK0NPTVBBVElCTEVfSU9DVEwoU0lPQ0dQR1JQKQorQ09NUEFUSUJMRV9JT0NUTChTSU9DQVRNQVJLKQorQ09NUEFUSUJMRV9JT0NUTChTSU9DU0lGTElOSykKK0NPTVBBVElCTEVfSU9DVEwoU0lPQ1NJRkVOQ0FQKQorQ09NUEFUSUJMRV9JT0NUTChTSU9DR0lGRU5DQVApCitDT01QQVRJQkxFX0lPQ1RMKFNJT0NTSUZOQU1FKQorQ09NUEFUSUJMRV9JT0NUTChTSU9DU0FSUCkKK0NPTVBBVElCTEVfSU9DVEwoU0lPQ0dBUlApCitDT01QQVRJQkxFX0lPQ1RMKFNJT0NEQVJQKQorQ09NUEFUSUJMRV9JT0NUTChTSU9DU1JBUlApCitDT01QQVRJQkxFX0lPQ1RMKFNJT0NHUkFSUCkKK0NPTVBBVElCTEVfSU9DVEwoU0lPQ0RSQVJQKQorQ09NUEFUSUJMRV9JT0NUTChTSU9DQURERExDSSkKK0NPTVBBVElCTEVfSU9DVEwoU0lPQ0RFTERMQ0kpCitDT01QQVRJQkxFX0lPQ1RMKFNJT0NHTUlJUEhZKQorQ09NUEFUSUJMRV9JT0NUTChTSU9DR01JSVJFRykKK0NPTVBBVElCTEVfSU9DVEwoU0lPQ1NNSUlSRUcpCitDT01QQVRJQkxFX0lPQ1RMKFNJT0NHSUZWTEFOKQorQ09NUEFUSUJMRV9JT0NUTChTSU9DU0lGVkxBTikKK0NPTVBBVElCTEVfSU9DVEwoU0lPQ0JSQUREQlIpCitDT01QQVRJQkxFX0lPQ1RMKFNJT0NCUkRFTEJSKQorLyogU0cgc3R1ZmYgKi8KK0NPTVBBVElCTEVfSU9DVEwoU0dfU0VUX1RJTUVPVVQpCitDT01QQVRJQkxFX0lPQ1RMKFNHX0dFVF9USU1FT1VUKQorQ09NUEFUSUJMRV9JT0NUTChTR19FTVVMQVRFRF9IT1NUKQorVUxPTkdfSU9DVEwoU0dfU0VUX1RSQU5TRk9STSkKK0NPTVBBVElCTEVfSU9DVEwoU0dfR0VUX1RSQU5TRk9STSkKK0NPTVBBVElCTEVfSU9DVEwoU0dfU0VUX1JFU0VSVkVEX1NJWkUpCitDT01QQVRJQkxFX0lPQ1RMKFNHX0dFVF9SRVNFUlZFRF9TSVpFKQorQ09NUEFUSUJMRV9JT0NUTChTR19HRVRfU0NTSV9JRCkKK0NPTVBBVElCTEVfSU9DVEwoU0dfU0VUX0ZPUkNFX0xPV19ETUEpCitDT01QQVRJQkxFX0lPQ1RMKFNHX0dFVF9MT1dfRE1BKQorQ09NUEFUSUJMRV9JT0NUTChTR19TRVRfRk9SQ0VfUEFDS19JRCkKK0NPTVBBVElCTEVfSU9DVEwoU0dfR0VUX1BBQ0tfSUQpCitDT01QQVRJQkxFX0lPQ1RMKFNHX0dFVF9OVU1fV0FJVElORykKK0NPTVBBVElCTEVfSU9DVEwoU0dfU0VUX0RFQlVHKQorQ09NUEFUSUJMRV9JT0NUTChTR19HRVRfU0dfVEFCTEVTSVpFKQorQ09NUEFUSUJMRV9JT0NUTChTR19HRVRfQ09NTUFORF9RKQorQ09NUEFUSUJMRV9JT0NUTChTR19TRVRfQ09NTUFORF9RKQorQ09NUEFUSUJMRV9JT0NUTChTR19HRVRfVkVSU0lPTl9OVU0pCitDT01QQVRJQkxFX0lPQ1RMKFNHX05FWFRfQ01EX0xFTikKK0NPTVBBVElCTEVfSU9DVEwoU0dfU0NTSV9SRVNFVCkKK0NPTVBBVElCTEVfSU9DVEwoU0dfR0VUX1JFUVVFU1RfVEFCTEUpCitDT01QQVRJQkxFX0lPQ1RMKFNHX1NFVF9LRUVQX09SUEhBTikKK0NPTVBBVElCTEVfSU9DVEwoU0dfR0VUX0tFRVBfT1JQSEFOKQorLyogUFBQIHN0dWZmICovCitDT01QQVRJQkxFX0lPQ1RMKFBQUElPQ0dGTEFHUykKK0NPTVBBVElCTEVfSU9DVEwoUFBQSU9DU0ZMQUdTKQorQ09NUEFUSUJMRV9JT0NUTChQUFBJT0NHQVNZTkNNQVApCitDT01QQVRJQkxFX0lPQ1RMKFBQUElPQ1NBU1lOQ01BUCkKK0NPTVBBVElCTEVfSU9DVEwoUFBQSU9DR1VOSVQpCitDT01QQVRJQkxFX0lPQ1RMKFBQUElPQ0dSQVNZTkNNQVApCitDT01QQVRJQkxFX0lPQ1RMKFBQUElPQ1NSQVNZTkNNQVApCitDT01QQVRJQkxFX0lPQ1RMKFBQUElPQ0dNUlUpCitDT01QQVRJQkxFX0lPQ1RMKFBQUElPQ1NNUlUpCitDT01QQVRJQkxFX0lPQ1RMKFBQUElPQ1NNQVhDSUQpCitDT01QQVRJQkxFX0lPQ1RMKFBQUElPQ0dYQVNZTkNNQVApCitDT01QQVRJQkxFX0lPQ1RMKFBQUElPQ1NYQVNZTkNNQVApCitDT01QQVRJQkxFX0lPQ1RMKFBQUElPQ1hGRVJVTklUKQorLyogUFBQSU9DU0NPTVBSRVNTIGlzIHRyYW5zbGF0ZWQgKi8KK0NPTVBBVElCTEVfSU9DVEwoUFBQSU9DR05QTU9ERSkKK0NPTVBBVElCTEVfSU9DVEwoUFBQSU9DU05QTU9ERSkKK0NPTVBBVElCTEVfSU9DVEwoUFBQSU9DR0RFQlVHKQorQ09NUEFUSUJMRV9JT0NUTChQUFBJT0NTREVCVUcpCisvKiBQUFBJT0NTUEFTUyBpcyB0cmFuc2xhdGVkICovCisvKiBQUFBJT0NTQUNUSVZFIGlzIHRyYW5zbGF0ZWQgKi8KKy8qIFBQUElPQ0dJRExFIGlzIHRyYW5zbGF0ZWQgKi8KK0NPTVBBVElCTEVfSU9DVEwoUFBQSU9DTkVXVU5JVCkKK0NPTVBBVElCTEVfSU9DVEwoUFBQSU9DQVRUQUNIKQorQ09NUEFUSUJMRV9JT0NUTChQUFBJT0NERVRBQ0gpCitDT01QQVRJQkxFX0lPQ1RMKFBQUElPQ1NNUlJVKQorQ09NUEFUSUJMRV9JT0NUTChQUFBJT0NDT05ORUNUKQorQ09NUEFUSUJMRV9JT0NUTChQUFBJT0NESVNDT05OKQorQ09NUEFUSUJMRV9JT0NUTChQUFBJT0NBVFRDSEFOKQorQ09NUEFUSUJMRV9JT0NUTChQUFBJT0NHQ0hBTikKKy8qIFBQUE9YICovCitDT01QQVRJQkxFX0lPQ1RMKFBQUE9FSU9DU0ZXRCkKK0NPTVBBVElCTEVfSU9DVEwoUFBQT0VJT0NERldEKQorLyogTFAgKi8KK0NPTVBBVElCTEVfSU9DVEwoTFBHRVRTVEFUVVMpCisvKiBwcGRldiAqLworQ09NUEFUSUJMRV9JT0NUTChQUENMQUlNKQorQ09NUEFUSUJMRV9JT0NUTChQUFJFTEVBU0UpCitDT01QQVRJQkxFX0lPQ1RMKFBQRVhDTCkKK0NPTVBBVElCTEVfSU9DVEwoUFBZSUVMRCkKKy8qIENEUk9NIHN0dWZmICovCitDT01QQVRJQkxFX0lPQ1RMKENEUk9NUEFVU0UpCitDT01QQVRJQkxFX0lPQ1RMKENEUk9NUkVTVU1FKQorQ09NUEFUSUJMRV9JT0NUTChDRFJPTVBMQVlNU0YpCitDT01QQVRJQkxFX0lPQ1RMKENEUk9NUExBWVRSS0lORCkKK0NPTVBBVElCTEVfSU9DVEwoQ0RST01SRUFEVE9DSERSKQorQ09NUEFUSUJMRV9JT0NUTChDRFJPTVJFQURUT0NFTlRSWSkKK0NPTVBBVElCTEVfSU9DVEwoQ0RST01TVE9QKQorQ09NUEFUSUJMRV9JT0NUTChDRFJPTVNUQVJUKQorQ09NUEFUSUJMRV9JT0NUTChDRFJPTUVKRUNUKQorQ09NUEFUSUJMRV9JT0NUTChDRFJPTVZPTENUUkwpCitDT01QQVRJQkxFX0lPQ1RMKENEUk9NU1VCQ0hOTCkKK1VMT05HX0lPQ1RMKENEUk9NRUpFQ1RfU1cpCitDT01QQVRJQkxFX0lPQ1RMKENEUk9NTVVMVElTRVNTSU9OKQorQ09NUEFUSUJMRV9JT0NUTChDRFJPTV9HRVRfTUNOKQorQ09NUEFUSUJMRV9JT0NUTChDRFJPTVJFU0VUKQorQ09NUEFUSUJMRV9JT0NUTChDRFJPTVZPTFJFQUQpCitDT01QQVRJQkxFX0lPQ1RMKENEUk9NU0VFSykKK0NPTVBBVElCTEVfSU9DVEwoQ0RST01QTEFZQkxLKQorQ09NUEFUSUJMRV9JT0NUTChDRFJPTUNMT1NFVFJBWSkKK1VMT05HX0lPQ1RMKENEUk9NX1NFVF9PUFRJT05TKQorVUxPTkdfSU9DVEwoQ0RST01fQ0xFQVJfT1BUSU9OUykKK1VMT05HX0lPQ1RMKENEUk9NX1NFTEVDVF9TUEVFRCkKK1VMT05HX0lPQ1RMKENEUk9NX1NFTEVDVF9ESVNDKQorVUxPTkdfSU9DVEwoQ0RST01fTUVESUFfQ0hBTkdFRCkKK1VMT05HX0lPQ1RMKENEUk9NX0RSSVZFX1NUQVRVUykKK0NPTVBBVElCTEVfSU9DVEwoQ0RST01fRElTQ19TVEFUVVMpCitDT01QQVRJQkxFX0lPQ1RMKENEUk9NX0NIQU5HRVJfTlNMT1RTKQorVUxPTkdfSU9DVEwoQ0RST01fTE9DS0RPT1IpCitVTE9OR19JT0NUTChDRFJPTV9ERUJVRykKK0NPTVBBVElCTEVfSU9DVEwoQ0RST01fR0VUX0NBUEFCSUxJVFkpCisvKiBJZ25vcmUgY2Ryb20uaCBhYm91dCB0aGVzZSBuZXh0IDUgaW9jdGxzLCB0aGV5IGFic29sdXRlbHkgZG8KKyAqIG5vdCB0YWtlIGEgc3RydWN0IGNkcm9tX3JlYWQsIGluc3RlYWQgdGhleSB0YWtlIGEgc3RydWN0IGNkcm9tX21zZgorICogd2hpY2ggaXMgY29tcGF0aWJsZS4KKyAqLworQ09NUEFUSUJMRV9JT0NUTChDRFJPTVJFQURNT0RFMikKK0NPTVBBVElCTEVfSU9DVEwoQ0RST01SRUFETU9ERTEpCitDT01QQVRJQkxFX0lPQ1RMKENEUk9NUkVBRFJBVykKK0NPTVBBVElCTEVfSU9DVEwoQ0RST01SRUFEQ09PS0VEKQorQ09NUEFUSUJMRV9JT0NUTChDRFJPTVJFQURBTEwpCisvKiBEVkQgaW9jdGxzICovCitDT01QQVRJQkxFX0lPQ1RMKERWRF9SRUFEX1NUUlVDVCkKK0NPTVBBVElCTEVfSU9DVEwoRFZEX1dSSVRFX1NUUlVDVCkKK0NPTVBBVElCTEVfSU9DVEwoRFZEX0FVVEgpCisvKiBwa3RjZHZkICovCitDT01QQVRJQkxFX0lPQ1RMKFBBQ0tFVF9DVFJMX0NNRCkKKy8qIEJpZyBMICovCitVTE9OR19JT0NUTChMT09QX1NFVF9GRCkKK1VMT05HX0lPQ1RMKExPT1BfQ0hBTkdFX0ZEKQorQ09NUEFUSUJMRV9JT0NUTChMT09QX0NMUl9GRCkKK0NPTVBBVElCTEVfSU9DVEwoTE9PUF9HRVRfU1RBVFVTNjQpCitDT01QQVRJQkxFX0lPQ1RMKExPT1BfU0VUX1NUQVRVUzY0KQorLyogQmlnIEEgKi8KKy8qIHNwYXJjIG9ubHkgKi8KKy8qIEJpZyBRIGZvciBzb3VuZC9PU1MgKi8KK0NPTVBBVElCTEVfSU9DVEwoU05EQ1RMX1NFUV9SRVNFVCkKK0NPTVBBVElCTEVfSU9DVEwoU05EQ1RMX1NFUV9TWU5DKQorQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfU1lOVEhfSU5GTykKK0NPTVBBVElCTEVfSU9DVEwoU05EQ1RMX1NFUV9DVFJMUkFURSkKK0NPTVBBVElCTEVfSU9DVEwoU05EQ1RMX1NFUV9HRVRPVVRDT1VOVCkKK0NPTVBBVElCTEVfSU9DVEwoU05EQ1RMX1NFUV9HRVRJTkNPVU5UKQorQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfU0VRX1BFUkNNT0RFKQorQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfRk1fTE9BRF9JTlNUUikKK0NPTVBBVElCTEVfSU9DVEwoU05EQ1RMX1NFUV9URVNUTUlESSkKK0NPTVBBVElCTEVfSU9DVEwoU05EQ1RMX1NFUV9SRVNFVFNBTVBMRVMpCitDT01QQVRJQkxFX0lPQ1RMKFNORENUTF9TRVFfTlJTWU5USFMpCitDT01QQVRJQkxFX0lPQ1RMKFNORENUTF9TRVFfTlJNSURJUykKK0NPTVBBVElCTEVfSU9DVEwoU05EQ1RMX01JRElfSU5GTykKK0NPTVBBVElCTEVfSU9DVEwoU05EQ1RMX1NFUV9USFJFU0hPTEQpCitDT01QQVRJQkxFX0lPQ1RMKFNORENUTF9TWU5USF9NRU1BVkwpCitDT01QQVRJQkxFX0lPQ1RMKFNORENUTF9GTV80T1BfRU5BQkxFKQorQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfU0VRX1BBTklDKQorQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfU0VRX09VVE9GQkFORCkKK0NPTVBBVElCTEVfSU9DVEwoU05EQ1RMX1NFUV9HRVRUSU1FKQorQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfU1lOVEhfSUQpCitDT01QQVRJQkxFX0lPQ1RMKFNORENUTF9TWU5USF9DT05UUk9MKQorQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfU1lOVEhfUkVNT1ZFU0FNUExFKQorLyogQmlnIFQgZm9yIHNvdW5kL09TUyAqLworQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfVE1SX1RJTUVCQVNFKQorQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfVE1SX1NUQVJUKQorQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfVE1SX1NUT1ApCitDT01QQVRJQkxFX0lPQ1RMKFNORENUTF9UTVJfQ09OVElOVUUpCitDT01QQVRJQkxFX0lPQ1RMKFNORENUTF9UTVJfVEVNUE8pCitDT01QQVRJQkxFX0lPQ1RMKFNORENUTF9UTVJfU09VUkNFKQorQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfVE1SX01FVFJPTk9NRSkKK0NPTVBBVElCTEVfSU9DVEwoU05EQ1RMX1RNUl9TRUxFQ1QpCisvKiBMaXR0bGUgbSBmb3Igc291bmQvT1NTICovCitDT01QQVRJQkxFX0lPQ1RMKFNORENUTF9NSURJX1BSRVRJTUUpCitDT01QQVRJQkxFX0lPQ1RMKFNORENUTF9NSURJX01QVU1PREUpCitDT01QQVRJQkxFX0lPQ1RMKFNORENUTF9NSURJX01QVUNNRCkKKy8qIEJpZyBQIGZvciBzb3VuZC9PU1MgKi8KK0NPTVBBVElCTEVfSU9DVEwoU05EQ1RMX0RTUF9SRVNFVCkKK0NPTVBBVElCTEVfSU9DVEwoU05EQ1RMX0RTUF9TWU5DKQorQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfRFNQX1NQRUVEKQorQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfRFNQX1NURVJFTykKK0NPTVBBVElCTEVfSU9DVEwoU05EQ1RMX0RTUF9HRVRCTEtTSVpFKQorQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfRFNQX0NIQU5ORUxTKQorQ09NUEFUSUJMRV9JT0NUTChTT1VORF9QQ01fV1JJVEVfRklMVEVSKQorQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfRFNQX1BPU1QpCitDT01QQVRJQkxFX0lPQ1RMKFNORENUTF9EU1BfU1VCRElWSURFKQorQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfRFNQX1NFVEZSQUdNRU5UKQorQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfRFNQX0dFVEZNVFMpCitDT01QQVRJQkxFX0lPQ1RMKFNORENUTF9EU1BfU0VURk1UKQorQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfRFNQX0dFVE9TUEFDRSkKK0NPTVBBVElCTEVfSU9DVEwoU05EQ1RMX0RTUF9HRVRJU1BBQ0UpCitDT01QQVRJQkxFX0lPQ1RMKFNORENUTF9EU1BfTk9OQkxPQ0spCitDT01QQVRJQkxFX0lPQ1RMKFNORENUTF9EU1BfR0VUQ0FQUykKK0NPTVBBVElCTEVfSU9DVEwoU05EQ1RMX0RTUF9HRVRUUklHR0VSKQorQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfRFNQX1NFVFRSSUdHRVIpCitDT01QQVRJQkxFX0lPQ1RMKFNORENUTF9EU1BfR0VUSVBUUikKK0NPTVBBVElCTEVfSU9DVEwoU05EQ1RMX0RTUF9HRVRPUFRSKQorLyogU05EQ1RMX0RTUF9NQVBJTkJVRiwgIFhYWCBuZWVkcyB0cmFuc2xhdGlvbiAqLworLyogU05EQ1RMX0RTUF9NQVBPVVRCVUYsICBYWFggbmVlZHMgdHJhbnNsYXRpb24gKi8KK0NPTVBBVElCTEVfSU9DVEwoU05EQ1RMX0RTUF9TRVRTWU5DUk8pCitDT01QQVRJQkxFX0lPQ1RMKFNORENUTF9EU1BfU0VURFVQTEVYKQorQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfRFNQX0dFVE9ERUxBWSkKK0NPTVBBVElCTEVfSU9DVEwoU05EQ1RMX0RTUF9QUk9GSUxFKQorQ09NUEFUSUJMRV9JT0NUTChTT1VORF9QQ01fUkVBRF9SQVRFKQorQ09NUEFUSUJMRV9JT0NUTChTT1VORF9QQ01fUkVBRF9DSEFOTkVMUykKK0NPTVBBVElCTEVfSU9DVEwoU09VTkRfUENNX1JFQURfQklUUykKK0NPTVBBVElCTEVfSU9DVEwoU09VTkRfUENNX1JFQURfRklMVEVSKQorLyogQmlnIEMgZm9yIHNvdW5kL09TUyAqLworQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfQ09QUl9SRVNFVCkKK0NPTVBBVElCTEVfSU9DVEwoU05EQ1RMX0NPUFJfTE9BRCkKK0NPTVBBVElCTEVfSU9DVEwoU05EQ1RMX0NPUFJfUkRBVEEpCitDT01QQVRJQkxFX0lPQ1RMKFNORENUTF9DT1BSX1JDT0RFKQorQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfQ09QUl9XREFUQSkKK0NPTVBBVElCTEVfSU9DVEwoU05EQ1RMX0NPUFJfV0NPREUpCitDT01QQVRJQkxFX0lPQ1RMKFNORENUTF9DT1BSX1JVTikKK0NPTVBBVElCTEVfSU9DVEwoU05EQ1RMX0NPUFJfSEFMVCkKK0NPTVBBVElCTEVfSU9DVEwoU05EQ1RMX0NPUFJfU0VORE1TRykKK0NPTVBBVElCTEVfSU9DVEwoU05EQ1RMX0NPUFJfUkNWTVNHKQorLyogQmlnIE0gZm9yIHNvdW5kL09TUyAqLworQ09NUEFUSUJMRV9JT0NUTChTT1VORF9NSVhFUl9SRUFEX1ZPTFVNRSkKK0NPTVBBVElCTEVfSU9DVEwoU09VTkRfTUlYRVJfUkVBRF9CQVNTKQorQ09NUEFUSUJMRV9JT0NUTChTT1VORF9NSVhFUl9SRUFEX1RSRUJMRSkKK0NPTVBBVElCTEVfSU9DVEwoU09VTkRfTUlYRVJfUkVBRF9TWU5USCkKK0NPTVBBVElCTEVfSU9DVEwoU09VTkRfTUlYRVJfUkVBRF9QQ00pCitDT01QQVRJQkxFX0lPQ1RMKFNPVU5EX01JWEVSX1JFQURfU1BFQUtFUikKK0NPTVBBVElCTEVfSU9DVEwoU09VTkRfTUlYRVJfUkVBRF9MSU5FKQorQ09NUEFUSUJMRV9JT0NUTChTT1VORF9NSVhFUl9SRUFEX01JQykKK0NPTVBBVElCTEVfSU9DVEwoU09VTkRfTUlYRVJfUkVBRF9DRCkKK0NPTVBBVElCTEVfSU9DVEwoU09VTkRfTUlYRVJfUkVBRF9JTUlYKQorQ09NUEFUSUJMRV9JT0NUTChTT1VORF9NSVhFUl9SRUFEX0FMVFBDTSkKK0NPTVBBVElCTEVfSU9DVEwoU09VTkRfTUlYRVJfUkVBRF9SRUNMRVYpCitDT01QQVRJQkxFX0lPQ1RMKFNPVU5EX01JWEVSX1JFQURfSUdBSU4pCitDT01QQVRJQkxFX0lPQ1RMKFNPVU5EX01JWEVSX1JFQURfT0dBSU4pCitDT01QQVRJQkxFX0lPQ1RMKFNPVU5EX01JWEVSX1JFQURfTElORTEpCitDT01QQVRJQkxFX0lPQ1RMKFNPVU5EX01JWEVSX1JFQURfTElORTIpCitDT01QQVRJQkxFX0lPQ1RMKFNPVU5EX01JWEVSX1JFQURfTElORTMpCitDT01QQVRJQkxFX0lPQ1RMKE1JWEVSX1JFQUQoU09VTkRfTUlYRVJfRElHSVRBTDEpKQorQ09NUEFUSUJMRV9JT0NUTChNSVhFUl9SRUFEKFNPVU5EX01JWEVSX0RJR0lUQUwyKSkKK0NPTVBBVElCTEVfSU9DVEwoTUlYRVJfUkVBRChTT1VORF9NSVhFUl9ESUdJVEFMMykpCitDT01QQVRJQkxFX0lPQ1RMKE1JWEVSX1JFQUQoU09VTkRfTUlYRVJfUEhPTkVJTikpCitDT01QQVRJQkxFX0lPQ1RMKE1JWEVSX1JFQUQoU09VTkRfTUlYRVJfUEhPTkVPVVQpKQorQ09NUEFUSUJMRV9JT0NUTChNSVhFUl9SRUFEKFNPVU5EX01JWEVSX1ZJREVPKSkKK0NPTVBBVElCTEVfSU9DVEwoTUlYRVJfUkVBRChTT1VORF9NSVhFUl9SQURJTykpCitDT01QQVRJQkxFX0lPQ1RMKE1JWEVSX1JFQUQoU09VTkRfTUlYRVJfTU9OSVRPUikpCitDT01QQVRJQkxFX0lPQ1RMKFNPVU5EX01JWEVSX1JFQURfTVVURSkKKy8qIFNPVU5EX01JWEVSX1JFQURfRU5IQU5DRSwgIHNhbWUgdmFsdWUgYXMgUkVBRF9NVVRFICovCisvKiBTT1VORF9NSVhFUl9SRUFEX0xPVUQsICBzYW1lIHZhbHVlIGFzIFJFQURfTVVURSAqLworQ09NUEFUSUJMRV9JT0NUTChTT1VORF9NSVhFUl9SRUFEX1JFQ1NSQykKK0NPTVBBVElCTEVfSU9DVEwoU09VTkRfTUlYRVJfUkVBRF9ERVZNQVNLKQorQ09NUEFUSUJMRV9JT0NUTChTT1VORF9NSVhFUl9SRUFEX1JFQ01BU0spCitDT01QQVRJQkxFX0lPQ1RMKFNPVU5EX01JWEVSX1JFQURfU1RFUkVPREVWUykKK0NPTVBBVElCTEVfSU9DVEwoU09VTkRfTUlYRVJfUkVBRF9DQVBTKQorQ09NUEFUSUJMRV9JT0NUTChTT1VORF9NSVhFUl9XUklURV9WT0xVTUUpCitDT01QQVRJQkxFX0lPQ1RMKFNPVU5EX01JWEVSX1dSSVRFX0JBU1MpCitDT01QQVRJQkxFX0lPQ1RMKFNPVU5EX01JWEVSX1dSSVRFX1RSRUJMRSkKK0NPTVBBVElCTEVfSU9DVEwoU09VTkRfTUlYRVJfV1JJVEVfU1lOVEgpCitDT01QQVRJQkxFX0lPQ1RMKFNPVU5EX01JWEVSX1dSSVRFX1BDTSkKK0NPTVBBVElCTEVfSU9DVEwoU09VTkRfTUlYRVJfV1JJVEVfU1BFQUtFUikKK0NPTVBBVElCTEVfSU9DVEwoU09VTkRfTUlYRVJfV1JJVEVfTElORSkKK0NPTVBBVElCTEVfSU9DVEwoU09VTkRfTUlYRVJfV1JJVEVfTUlDKQorQ09NUEFUSUJMRV9JT0NUTChTT1VORF9NSVhFUl9XUklURV9DRCkKK0NPTVBBVElCTEVfSU9DVEwoU09VTkRfTUlYRVJfV1JJVEVfSU1JWCkKK0NPTVBBVElCTEVfSU9DVEwoU09VTkRfTUlYRVJfV1JJVEVfQUxUUENNKQorQ09NUEFUSUJMRV9JT0NUTChTT1VORF9NSVhFUl9XUklURV9SRUNMRVYpCitDT01QQVRJQkxFX0lPQ1RMKFNPVU5EX01JWEVSX1dSSVRFX0lHQUlOKQorQ09NUEFUSUJMRV9JT0NUTChTT1VORF9NSVhFUl9XUklURV9PR0FJTikKK0NPTVBBVElCTEVfSU9DVEwoU09VTkRfTUlYRVJfV1JJVEVfTElORTEpCitDT01QQVRJQkxFX0lPQ1RMKFNPVU5EX01JWEVSX1dSSVRFX0xJTkUyKQorQ09NUEFUSUJMRV9JT0NUTChTT1VORF9NSVhFUl9XUklURV9MSU5FMykKK0NPTVBBVElCTEVfSU9DVEwoTUlYRVJfV1JJVEUoU09VTkRfTUlYRVJfRElHSVRBTDEpKQorQ09NUEFUSUJMRV9JT0NUTChNSVhFUl9XUklURShTT1VORF9NSVhFUl9ESUdJVEFMMikpCitDT01QQVRJQkxFX0lPQ1RMKE1JWEVSX1dSSVRFKFNPVU5EX01JWEVSX0RJR0lUQUwzKSkKK0NPTVBBVElCTEVfSU9DVEwoTUlYRVJfV1JJVEUoU09VTkRfTUlYRVJfUEhPTkVJTikpCitDT01QQVRJQkxFX0lPQ1RMKE1JWEVSX1dSSVRFKFNPVU5EX01JWEVSX1BIT05FT1VUKSkKK0NPTVBBVElCTEVfSU9DVEwoTUlYRVJfV1JJVEUoU09VTkRfTUlYRVJfVklERU8pKQorQ09NUEFUSUJMRV9JT0NUTChNSVhFUl9XUklURShTT1VORF9NSVhFUl9SQURJTykpCitDT01QQVRJQkxFX0lPQ1RMKE1JWEVSX1dSSVRFKFNPVU5EX01JWEVSX01PTklUT1IpKQorQ09NUEFUSUJMRV9JT0NUTChTT1VORF9NSVhFUl9XUklURV9NVVRFKQorLyogU09VTkRfTUlYRVJfV1JJVEVfRU5IQU5DRSwgIHNhbWUgdmFsdWUgYXMgV1JJVEVfTVVURSAqLworLyogU09VTkRfTUlYRVJfV1JJVEVfTE9VRCwgIHNhbWUgdmFsdWUgYXMgV1JJVEVfTVVURSAqLworQ09NUEFUSUJMRV9JT0NUTChTT1VORF9NSVhFUl9XUklURV9SRUNTUkMpCitDT01QQVRJQkxFX0lPQ1RMKFNPVU5EX01JWEVSX0lORk8pCitDT01QQVRJQkxFX0lPQ1RMKFNPVU5EX09MRF9NSVhFUl9JTkZPKQorQ09NUEFUSUJMRV9JT0NUTChTT1VORF9NSVhFUl9BQ0NFU1MpCitDT01QQVRJQkxFX0lPQ1RMKFNPVU5EX01JWEVSX0FHQykKK0NPTVBBVElCTEVfSU9DVEwoU09VTkRfTUlYRVJfM0RTRSkKK0NPTVBBVElCTEVfSU9DVEwoU09VTkRfTUlYRVJfUFJJVkFURTEpCitDT01QQVRJQkxFX0lPQ1RMKFNPVU5EX01JWEVSX1BSSVZBVEUyKQorQ09NUEFUSUJMRV9JT0NUTChTT1VORF9NSVhFUl9QUklWQVRFMykKK0NPTVBBVElCTEVfSU9DVEwoU09VTkRfTUlYRVJfUFJJVkFURTQpCitDT01QQVRJQkxFX0lPQ1RMKFNPVU5EX01JWEVSX1BSSVZBVEU1KQorQ09NUEFUSUJMRV9JT0NUTChTT1VORF9NSVhFUl9HRVRMRVZFTFMpCitDT01QQVRJQkxFX0lPQ1RMKFNPVU5EX01JWEVSX1NFVExFVkVMUykKK0NPTVBBVElCTEVfSU9DVEwoT1NTX0dFVFZFUlNJT04pCisvKiBBVVRPRlMgKi8KK1VMT05HX0lPQ1RMKEFVVE9GU19JT0NfUkVBRFkpCitVTE9OR19JT0NUTChBVVRPRlNfSU9DX0ZBSUwpCitDT01QQVRJQkxFX0lPQ1RMKEFVVE9GU19JT0NfQ0FUQVRPTklDKQorQ09NUEFUSUJMRV9JT0NUTChBVVRPRlNfSU9DX1BST1RPVkVSKQorQ09NUEFUSUJMRV9JT0NUTChBVVRPRlNfSU9DX0VYUElSRSkKK0NPTVBBVElCTEVfSU9DVEwoQVVUT0ZTX0lPQ19FWFBJUkVfTVVMVEkpCitDT01QQVRJQkxFX0lPQ1RMKEFVVE9GU19JT0NfUFJPVE9TVUJWRVIpCitDT01QQVRJQkxFX0lPQ1RMKEFVVE9GU19JT0NfQVNLUkVHSE9TVCkKK0NPTVBBVElCTEVfSU9DVEwoQVVUT0ZTX0lPQ19UT0dHTEVSRUdIT1NUKQorQ09NUEFUSUJMRV9JT0NUTChBVVRPRlNfSU9DX0FTS1VNT1VOVCkKKy8qIERFVkZTICovCitDT01QQVRJQkxFX0lPQ1RMKERFVkZTRElPQ19HRVRfUFJPVE9fUkVWKQorQ09NUEFUSUJMRV9JT0NUTChERVZGU0RJT0NfU0VUX0VWRU5UX01BU0spCitDT01QQVRJQkxFX0lPQ1RMKERFVkZTRElPQ19SRUxFQVNFX0VWRU5UX1FVRVVFKQorQ09NUEFUSUJMRV9JT0NUTChERVZGU0RJT0NfU0VUX0RFQlVHX01BU0spCisvKiBSYXcgZGV2aWNlcyAqLworQ09NUEFUSUJMRV9JT0NUTChSQVdfU0VUQklORCkKK0NPTVBBVElCTEVfSU9DVEwoUkFXX0dFVEJJTkQpCisvKiBTTUIgaW9jdGxzIHdoaWNoIGRvIG5vdCBuZWVkIGFueSB0cmFuc2xhdGlvbnMgKi8KK0NPTVBBVElCTEVfSU9DVEwoU01CX0lPQ19ORVdDT05OKQorLyogTkNQIGlvY3RscyB3aGljaCBkbyBub3QgbmVlZCBhbnkgdHJhbnNsYXRpb25zICovCitDT01QQVRJQkxFX0lPQ1RMKE5DUF9JT0NfQ09OTl9MT0dHRURfSU4pCitDT01QQVRJQkxFX0lPQ1RMKE5DUF9JT0NfU0lHTl9JTklUKQorQ09NUEFUSUJMRV9JT0NUTChOQ1BfSU9DX1NJR05fV0FOVEVEKQorQ09NUEFUSUJMRV9JT0NUTChOQ1BfSU9DX1NFVF9TSUdOX1dBTlRFRCkKK0NPTVBBVElCTEVfSU9DVEwoTkNQX0lPQ19MT0NLVU5MT0NLKQorQ09NUEFUSUJMRV9JT0NUTChOQ1BfSU9DX0dFVFJPT1QpCitDT01QQVRJQkxFX0lPQ1RMKE5DUF9JT0NfU0VUUk9PVCkKK0NPTVBBVElCTEVfSU9DVEwoTkNQX0lPQ19HRVRDSEFSU0VUUykKK0NPTVBBVElCTEVfSU9DVEwoTkNQX0lPQ19TRVRDSEFSU0VUUykKK0NPTVBBVElCTEVfSU9DVEwoTkNQX0lPQ19HRVRERU5UUllUVEwpCitDT01QQVRJQkxFX0lPQ1RMKE5DUF9JT0NfU0VUREVOVFJZVFRMKQorLyogTGl0dGxlIGEgKi8KK0NPTVBBVElCTEVfSU9DVEwoQVRNU0lHRF9DVFJMKQorQ09NUEFUSUJMRV9JT0NUTChBVE1BUlBEX0NUUkwpCitDT01QQVRJQkxFX0lPQ1RMKEFUTUxFQ19DVFJMKQorQ09NUEFUSUJMRV9JT0NUTChBVE1MRUNfTUNBU1QpCitDT01QQVRJQkxFX0lPQ1RMKEFUTUxFQ19EQVRBKQorQ09NUEFUSUJMRV9JT0NUTChBVE1fU0VUU0MpCitDT01QQVRJQkxFX0lPQ1RMKFNJT0NTSUZBVE1UQ1ApCitDT01QQVRJQkxFX0lPQ1RMKFNJT0NNS0NMSVApCitDT01QQVRJQkxFX0lPQ1RMKEFUTUFSUF9NS0lQKQorQ09NUEFUSUJMRV9JT0NUTChBVE1BUlBfU0VURU5UUlkpCitDT01QQVRJQkxFX0lPQ1RMKEFUTUFSUF9FTkNBUCkKK0NPTVBBVElCTEVfSU9DVEwoQVRNVENQX0NSRUFURSkKK0NPTVBBVElCTEVfSU9DVEwoQVRNVENQX1JFTU9WRSkKK0NPTVBBVElCTEVfSU9DVEwoQVRNTVBDX0NUUkwpCitDT01QQVRJQkxFX0lPQ1RMKEFUTU1QQ19EQVRBKQorLyogV2F0Y2hkb2cgKi8KK0NPTVBBVElCTEVfSU9DVEwoV0RJT0NfR0VUU1VQUE9SVCkKK0NPTVBBVElCTEVfSU9DVEwoV0RJT0NfR0VUU1RBVFVTKQorQ09NUEFUSUJMRV9JT0NUTChXRElPQ19HRVRCT09UU1RBVFVTKQorQ09NUEFUSUJMRV9JT0NUTChXRElPQ19HRVRURU1QKQorQ09NUEFUSUJMRV9JT0NUTChXRElPQ19TRVRPUFRJT05TKQorQ09NUEFUSUJMRV9JT0NUTChXRElPQ19LRUVQQUxJVkUpCitDT01QQVRJQkxFX0lPQ1RMKFdESU9DX1NFVFRJTUVPVVQpCitDT01QQVRJQkxFX0lPQ1RMKFdESU9DX0dFVFRJTUVPVVQpCisvKiBCaWcgUiAqLworQ09NUEFUSUJMRV9JT0NUTChSTkRHRVRFTlRDTlQpCitDT01QQVRJQkxFX0lPQ1RMKFJOREFERFRPRU5UQ05UKQorQ09NUEFUSUJMRV9JT0NUTChSTkRHRVRQT09MKQorQ09NUEFUSUJMRV9JT0NUTChSTkRBRERFTlRST1BZKQorQ09NUEFUSUJMRV9JT0NUTChSTkRaQVBFTlRDTlQpCitDT01QQVRJQkxFX0lPQ1RMKFJORENMRUFSUE9PTCkKKy8qIEJsdWV0b290aCAqLworQ09NUEFUSUJMRV9JT0NUTChIQ0lERVZVUCkKK0NPTVBBVElCTEVfSU9DVEwoSENJREVWRE9XTikKK0NPTVBBVElCTEVfSU9DVEwoSENJREVWUkVTRVQpCitDT01QQVRJQkxFX0lPQ1RMKEhDSURFVlJFU1RBVCkKK0NPTVBBVElCTEVfSU9DVEwoSENJR0VUREVWTElTVCkKK0NPTVBBVElCTEVfSU9DVEwoSENJR0VUREVWSU5GTykKK0NPTVBBVElCTEVfSU9DVEwoSENJR0VUQ09OTkxJU1QpCitDT01QQVRJQkxFX0lPQ1RMKEhDSUdFVENPTk5JTkZPKQorQ09NUEFUSUJMRV9JT0NUTChIQ0lTRVRSQVcpCitDT01QQVRJQkxFX0lPQ1RMKEhDSVNFVFNDQU4pCitDT01QQVRJQkxFX0lPQ1RMKEhDSVNFVEFVVEgpCitDT01QQVRJQkxFX0lPQ1RMKEhDSVNFVEVOQ1JZUFQpCitDT01QQVRJQkxFX0lPQ1RMKEhDSVNFVFBUWVBFKQorQ09NUEFUSUJMRV9JT0NUTChIQ0lTRVRMSU5LUE9MKQorQ09NUEFUSUJMRV9JT0NUTChIQ0lTRVRMSU5LTU9ERSkKK0NPTVBBVElCTEVfSU9DVEwoSENJU0VUQUNMTVRVKQorQ09NUEFUSUJMRV9JT0NUTChIQ0lTRVRTQ09NVFUpCitDT01QQVRJQkxFX0lPQ1RMKEhDSUlOUVVJUlkpCitDT01QQVRJQkxFX0lPQ1RMKEhDSVVBUlRTRVRQUk9UTykKK0NPTVBBVElCTEVfSU9DVEwoSENJVUFSVEdFVFBST1RPKQorQ09NUEFUSUJMRV9JT0NUTChSRkNPTU1DUkVBVEVERVYpCitDT01QQVRJQkxFX0lPQ1RMKFJGQ09NTVJFTEVBU0VERVYpCitDT01QQVRJQkxFX0lPQ1RMKFJGQ09NTUdFVERFVkxJU1QpCitDT01QQVRJQkxFX0lPQ1RMKFJGQ09NTUdFVERFVklORk8pCitDT01QQVRJQkxFX0lPQ1RMKFJGQ09NTVNURUFMRExDKQorQ09NUEFUSUJMRV9JT0NUTChCTkVQQ09OTkFERCkKK0NPTVBBVElCTEVfSU9DVEwoQk5FUENPTk5ERUwpCitDT01QQVRJQkxFX0lPQ1RMKEJORVBHRVRDT05OTElTVCkKK0NPTVBBVElCTEVfSU9DVEwoQk5FUEdFVENPTk5JTkZPKQorQ09NUEFUSUJMRV9JT0NUTChDTVRQQ09OTkFERCkKK0NPTVBBVElCTEVfSU9DVEwoQ01UUENPTk5ERUwpCitDT01QQVRJQkxFX0lPQ1RMKENNVFBHRVRDT05OTElTVCkKK0NPTVBBVElCTEVfSU9DVEwoQ01UUEdFVENPTk5JTkZPKQorQ09NUEFUSUJMRV9JT0NUTChISURQQ09OTkFERCkKK0NPTVBBVElCTEVfSU9DVEwoSElEUENPTk5ERUwpCitDT01QQVRJQkxFX0lPQ1RMKEhJRFBHRVRDT05OTElTVCkKK0NPTVBBVElCTEVfSU9DVEwoSElEUEdFVENPTk5JTkZPKQorLyogQ0FQSSAqLworQ09NUEFUSUJMRV9JT0NUTChDQVBJX1JFR0lTVEVSKQorQ09NUEFUSUJMRV9JT0NUTChDQVBJX0dFVF9NQU5VRkFDVFVSRVIpCitDT01QQVRJQkxFX0lPQ1RMKENBUElfR0VUX1ZFUlNJT04pCitDT01QQVRJQkxFX0lPQ1RMKENBUElfR0VUX1NFUklBTCkKK0NPTVBBVElCTEVfSU9DVEwoQ0FQSV9HRVRfUFJPRklMRSkKK0NPTVBBVElCTEVfSU9DVEwoQ0FQSV9NQU5VRkFDVFVSRVJfQ01EKQorQ09NUEFUSUJMRV9JT0NUTChDQVBJX0dFVF9FUlJDT0RFKQorQ09NUEFUSUJMRV9JT0NUTChDQVBJX0lOU1RBTExFRCkKK0NPTVBBVElCTEVfSU9DVEwoQ0FQSV9HRVRfRkxBR1MpCitDT01QQVRJQkxFX0lPQ1RMKENBUElfU0VUX0ZMQUdTKQorQ09NUEFUSUJMRV9JT0NUTChDQVBJX0NMUl9GTEFHUykKK0NPTVBBVElCTEVfSU9DVEwoQ0FQSV9OQ0NJX09QRU5DT1VOVCkKK0NPTVBBVElCTEVfSU9DVEwoQ0FQSV9OQ0NJX0dFVFVOSVQpCisvKiBNaXNjLiAqLworQ09NUEFUSUJMRV9JT0NUTCgweDQxNTQ1OTAwKQkJLyogQVRZSU9fQ0xLUiAqLworQ09NUEFUSUJMRV9JT0NUTCgweDQxNTQ1OTAxKQkJLyogQVRZSU9fQ0xLVyAqLworQ09NUEFUSUJMRV9JT0NUTChQQ0lJT0NfQ09OVFJPTExFUikKK0NPTVBBVElCTEVfSU9DVEwoUENJSU9DX01NQVBfSVNfSU8pCitDT01QQVRJQkxFX0lPQ1RMKFBDSUlPQ19NTUFQX0lTX01FTSkKK0NPTVBBVElCTEVfSU9DVEwoUENJSU9DX1dSSVRFX0NPTUJJTkUpCisvKiBVU0IgKi8KK0NPTVBBVElCTEVfSU9DVEwoVVNCREVWRlNfUkVTRVRFUCkKK0NPTVBBVElCTEVfSU9DVEwoVVNCREVWRlNfU0VUSU5URVJGQUNFKQorQ09NUEFUSUJMRV9JT0NUTChVU0JERVZGU19TRVRDT05GSUdVUkFUSU9OKQorQ09NUEFUSUJMRV9JT0NUTChVU0JERVZGU19HRVREUklWRVIpCitDT01QQVRJQkxFX0lPQ1RMKFVTQkRFVkZTX0RJU0NBUkRVUkIpCitDT01QQVRJQkxFX0lPQ1RMKFVTQkRFVkZTX0NMQUlNSU5URVJGQUNFKQorQ09NUEFUSUJMRV9JT0NUTChVU0JERVZGU19SRUxFQVNFSU5URVJGQUNFKQorQ09NUEFUSUJMRV9JT0NUTChVU0JERVZGU19DT05ORUNUSU5GTykKK0NPTVBBVElCTEVfSU9DVEwoVVNCREVWRlNfSFVCX1BPUlRJTkZPKQorQ09NUEFUSUJMRV9JT0NUTChVU0JERVZGU19SRVNFVCkKK0NPTVBBVElCTEVfSU9DVEwoVVNCREVWRlNfU1VCTUlUVVJCMzIpCitDT01QQVRJQkxFX0lPQ1RMKFVTQkRFVkZTX1JFQVBVUkIzMikKK0NPTVBBVElCTEVfSU9DVEwoVVNCREVWRlNfUkVBUFVSQk5ERUxBWTMyKQorQ09NUEFUSUJMRV9JT0NUTChVU0JERVZGU19DTEVBUl9IQUxUKQorLyogTVREICovCitDT01QQVRJQkxFX0lPQ1RMKE1FTUdFVElORk8pCitDT01QQVRJQkxFX0lPQ1RMKE1FTUVSQVNFKQorQ09NUEFUSUJMRV9JT0NUTChNRU1MT0NLKQorQ09NUEFUSUJMRV9JT0NUTChNRU1VTkxPQ0spCitDT01QQVRJQkxFX0lPQ1RMKE1FTUdFVFJFR0lPTkNPVU5UKQorQ09NUEFUSUJMRV9JT0NUTChNRU1HRVRSRUdJT05JTkZPKQorLyogTkJEICovCitVTE9OR19JT0NUTChOQkRfU0VUX1NPQ0spCitVTE9OR19JT0NUTChOQkRfU0VUX0JMS1NJWkUpCitVTE9OR19JT0NUTChOQkRfU0VUX1NJWkUpCitDT01QQVRJQkxFX0lPQ1RMKE5CRF9ET19JVCkKK0NPTVBBVElCTEVfSU9DVEwoTkJEX0NMRUFSX1NPQ0spCitDT01QQVRJQkxFX0lPQ1RMKE5CRF9DTEVBUl9RVUUpCitDT01QQVRJQkxFX0lPQ1RMKE5CRF9QUklOVF9ERUJVRykKK1VMT05HX0lPQ1RMKE5CRF9TRVRfU0laRV9CTE9DS1MpCitDT01QQVRJQkxFX0lPQ1RMKE5CRF9ESVNDT05ORUNUKQorLyogaTJjICovCitDT01QQVRJQkxFX0lPQ1RMKEkyQ19TTEFWRSkKK0NPTVBBVElCTEVfSU9DVEwoSTJDX1NMQVZFX0ZPUkNFKQorQ09NUEFUSUJMRV9JT0NUTChJMkNfVEVOQklUKQorQ09NUEFUSUJMRV9JT0NUTChJMkNfUEVDKQorQ09NUEFUSUJMRV9JT0NUTChJMkNfUkVUUklFUykKK0NPTVBBVElCTEVfSU9DVEwoSTJDX1RJTUVPVVQpCisvKiB3aXJlbGVzcyAqLworQ09NUEFUSUJMRV9JT0NUTChTSU9DU0lXQ09NTUlUKQorQ09NUEFUSUJMRV9JT0NUTChTSU9DR0lXTkFNRSkKK0NPTVBBVElCTEVfSU9DVEwoU0lPQ1NJV05XSUQpCitDT01QQVRJQkxFX0lPQ1RMKFNJT0NHSVdOV0lEKQorQ09NUEFUSUJMRV9JT0NUTChTSU9DU0lXRlJFUSkKK0NPTVBBVElCTEVfSU9DVEwoU0lPQ0dJV0ZSRVEpCitDT01QQVRJQkxFX0lPQ1RMKFNJT0NTSVdNT0RFKQorQ09NUEFUSUJMRV9JT0NUTChTSU9DR0lXTU9ERSkKK0NPTVBBVElCTEVfSU9DVEwoU0lPQ1NJV1NFTlMpCitDT01QQVRJQkxFX0lPQ1RMKFNJT0NHSVdTRU5TKQorQ09NUEFUSUJMRV9JT0NUTChTSU9DU0lXUkFOR0UpCitDT01QQVRJQkxFX0lPQ1RMKFNJT0NTSVdQUklWKQorQ09NUEFUSUJMRV9JT0NUTChTSU9DR0lXUFJJVikKK0NPTVBBVElCTEVfSU9DVEwoU0lPQ1NJV1NUQVRTKQorQ09NUEFUSUJMRV9JT0NUTChTSU9DR0lXU1RBVFMpCitDT01QQVRJQkxFX0lPQ1RMKFNJT0NTSVdBUCkKK0NPTVBBVElCTEVfSU9DVEwoU0lPQ0dJV0FQKQorQ09NUEFUSUJMRV9JT0NUTChTSU9DU0lXU0NBTikKK0NPTVBBVElCTEVfSU9DVEwoU0lPQ1NJV1JBVEUpCitDT01QQVRJQkxFX0lPQ1RMKFNJT0NHSVdSQVRFKQorQ09NUEFUSUJMRV9JT0NUTChTSU9DU0lXUlRTKQorQ09NUEFUSUJMRV9JT0NUTChTSU9DR0lXUlRTKQorQ09NUEFUSUJMRV9JT0NUTChTSU9DU0lXRlJBRykKK0NPTVBBVElCTEVfSU9DVEwoU0lPQ0dJV0ZSQUcpCitDT01QQVRJQkxFX0lPQ1RMKFNJT0NTSVdUWFBPVykKK0NPTVBBVElCTEVfSU9DVEwoU0lPQ0dJV1RYUE9XKQorQ09NUEFUSUJMRV9JT0NUTChTSU9DU0lXUkVUUlkpCitDT01QQVRJQkxFX0lPQ1RMKFNJT0NHSVdSRVRSWSkKK0NPTVBBVElCTEVfSU9DVEwoU0lPQ1NJV1BPV0VSKQorQ09NUEFUSUJMRV9JT0NUTChTSU9DR0lXUE9XRVIpCisvKiBoaWRkZXYgKi8KK0NPTVBBVElCTEVfSU9DVEwoSElESU9DR1ZFUlNJT04pCitDT01QQVRJQkxFX0lPQ1RMKEhJRElPQ0FQUExJQ0FUSU9OKQorQ09NUEFUSUJMRV9JT0NUTChISURJT0NHREVWSU5GTykKK0NPTVBBVElCTEVfSU9DVEwoSElESU9DR1NUUklORykKK0NPTVBBVElCTEVfSU9DVEwoSElESU9DSU5JVFJFUE9SVCkKK0NPTVBBVElCTEVfSU9DVEwoSElESU9DR1JFUE9SVCkKK0NPTVBBVElCTEVfSU9DVEwoSElESU9DU1JFUE9SVCkKK0NPTVBBVElCTEVfSU9DVEwoSElESU9DR1JFUE9SVElORk8pCitDT01QQVRJQkxFX0lPQ1RMKEhJRElPQ0dGSUVMRElORk8pCitDT01QQVRJQkxFX0lPQ1RMKEhJRElPQ0dVU0FHRSkKK0NPTVBBVElCTEVfSU9DVEwoSElESU9DU1VTQUdFKQorQ09NUEFUSUJMRV9JT0NUTChISURJT0NHVUNPREUpCitDT01QQVRJQkxFX0lPQ1RMKEhJRElPQ0dGTEFHKQorQ09NUEFUSUJMRV9JT0NUTChISURJT0NTRkxBRykKK0NPTVBBVElCTEVfSU9DVEwoSElESU9DR0NPTExFQ1RJT05JTkRFWCkKK0NPTVBBVElCTEVfSU9DVEwoSElESU9DR0NPTExFQ1RJT05JTkZPKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb21waWxlci1nY2MuaCBiL2luY2x1ZGUvbGludXgvY29tcGlsZXItZ2NjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTUyNzM0MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvY29tcGlsZXItZ2NjLmgKQEAgLTAsMCArMSwxNyBAQAorLyogTmV2ZXIgaW5jbHVkZSB0aGlzIGZpbGUgZGlyZWN0bHkuICBJbmNsdWRlIDxsaW51eC9jb21waWxlci5oPiBpbnN0ZWFkLiAgKi8KKworLyoKKyAqIENvbW1vbiBkZWZpbml0aW9ucyBmb3IgYWxsIGdjYyB2ZXJzaW9ucyBnbyBoZXJlLgorICovCisKKworLyogT3B0aW1pemF0aW9uIGJhcnJpZXIgKi8KKy8qIFRoZSAidm9sYXRpbGUiIGlzIGR1ZSB0byBnY2MgYnVncyAqLworI2RlZmluZSBiYXJyaWVyKCkgX19hc21fXyBfX3ZvbGF0aWxlX18oIiI6IDogOiJtZW1vcnkiKQorCisvKiBUaGlzIG1hY3JvIG9iZnVzY2F0ZXMgYXJpdGhtZXRpYyBvbiBhIHZhcmlhYmxlIGFkZHJlc3Mgc28gdGhhdCBnY2MKKyAgIHNob3VsZG4ndCByZWNvZ25pemUgdGhlIG9yaWdpbmFsIHZhciwgYW5kIG1ha2UgYXNzdW1wdGlvbnMgYWJvdXQgaXQgKi8KKyNkZWZpbmUgUkVMT0NfSElERShwdHIsIG9mZikJCQkJCVwKKyAgKHsgdW5zaWduZWQgbG9uZyBfX3B0cjsJCQkJCVwKKyAgICBfX2FzbV9fICgiIiA6ICI9ZyIoX19wdHIpIDogIjAiKHB0cikpOwkJXAorICAgICh0eXBlb2YocHRyKSkgKF9fcHRyICsgKG9mZikpOyB9KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb21waWxlci1nY2MyLmggYi9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLWdjYzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTM1OTE1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9jb21waWxlci1nY2MyLmgKQEAgLTAsMCArMSwyNCBAQAorLyogTmV2ZXIgaW5jbHVkZSB0aGlzIGZpbGUgZGlyZWN0bHkuICBJbmNsdWRlIDxsaW51eC9jb21waWxlci5oPiBpbnN0ZWFkLiAgKi8KKworLyogVGhlc2UgZGVmaW5pdGlvbnMgYXJlIGZvciBHQ0MgdjIueC4gICovCisKKy8qIFNvbWV3aGVyZSBpbiB0aGUgbWlkZGxlIG9mIHRoZSBHQ0MgMi45NiBkZXZlbG9wbWVudCBjeWNsZSwgd2UgaW1wbGVtZW50ZWQKKyAgIGEgbWVjaGFuaXNtIGJ5IHdoaWNoIHRoZSB1c2VyIGNhbiBhbm5vdGF0ZSBsaWtlbHkgYnJhbmNoIGRpcmVjdGlvbnMgYW5kCisgICBleHBlY3QgdGhlIGJsb2NrcyB0byBiZSByZW9yZGVyZWQgYXBwcm9wcmlhdGVseS4gIERlZmluZSBfX2J1aWx0aW5fZXhwZWN0CisgICB0byBub3RoaW5nIGZvciBlYXJsaWVyIGNvbXBpbGVycy4gICovCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXItZ2NjLmg+CisKKyNpZiBfX0dOVUNfTUlOT1JfXyA8IDk2CisjIGRlZmluZSBfX2J1aWx0aW5fZXhwZWN0KHgsIGV4cGVjdGVkX3ZhbHVlKSAoeCkKKyNlbmRpZgorCisjZGVmaW5lIF9fYXR0cmlidXRlX3VzZWRfXwlfX2F0dHJpYnV0ZV9fKChfX3VudXNlZF9fKSkKKworLyoKKyAqIFRoZSBhdHRyaWJ1dGUgYHB1cmUnIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiBHQ0MgdmVyc2lvbnMgZWFybGllcgorICogdGhhbiAyLjk2LgorICovCisjaWYgX19HTlVDX01JTk9SX18gPj0gOTYKKyMgZGVmaW5lIF9fYXR0cmlidXRlX3B1cmVfXwlfX2F0dHJpYnV0ZV9fKChwdXJlKSkKKyMgZGVmaW5lIF9fYXR0cmlidXRlX2NvbnN0X18JX19hdHRyaWJ1dGVfXygoX19jb25zdF9fKSkKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb21waWxlci1nY2MzLmggYi9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLWdjYzMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmZhNjE1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9jb21waWxlci1nY2MzLmgKQEAgLTAsMCArMSwzMiBAQAorLyogTmV2ZXIgaW5jbHVkZSB0aGlzIGZpbGUgZGlyZWN0bHkuICBJbmNsdWRlIDxsaW51eC9jb21waWxlci5oPiBpbnN0ZWFkLiAgKi8KKworLyogVGhlc2UgZGVmaW5pdGlvbnMgYXJlIGZvciBHQ0MgdjMueC4gICovCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXItZ2NjLmg+CisKKyNpZiBfX0dOVUNfTUlOT1JfXyA+PSAxCisjIGRlZmluZSBpbmxpbmUJCWlubGluZQkJX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpCisjIGRlZmluZSBfX2lubGluZV9fCV9faW5saW5lX18JX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpCisjIGRlZmluZSBfX2lubGluZQlfX2lubGluZQlfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkKKyNlbmRpZgorCisjaWYgX19HTlVDX01JTk9SX18gPiAwCisjIGRlZmluZSBfX2RlcHJlY2F0ZWQJCV9fYXR0cmlidXRlX18oKGRlcHJlY2F0ZWQpKQorI2VuZGlmCisKKyNpZiBfX0dOVUNfTUlOT1JfXyA+PSAzCisjIGRlZmluZSBfX2F0dHJpYnV0ZV91c2VkX18JX19hdHRyaWJ1dGVfXygoX191c2VkX18pKQorI2Vsc2UKKyMgZGVmaW5lIF9fYXR0cmlidXRlX3VzZWRfXwlfX2F0dHJpYnV0ZV9fKChfX3VudXNlZF9fKSkKKyNlbmRpZgorCisjZGVmaW5lIF9fYXR0cmlidXRlX3B1cmVfXwlfX2F0dHJpYnV0ZV9fKChwdXJlKSkKKyNkZWZpbmUgX19hdHRyaWJ1dGVfY29uc3RfXwlfX2F0dHJpYnV0ZV9fKChfX2NvbnN0X18pKQorCisjaWYgX19HTlVDX01JTk9SX18gPj0gMQorI2RlZmluZSAgbm9pbmxpbmUJCV9fYXR0cmlidXRlX18oKG5vaW5saW5lKSkKKyNlbmRpZgorCisjaWYgX19HTlVDX01JTk9SX18gPj0gNAorI2RlZmluZSBfX211c3RfY2hlY2sJCV9fYXR0cmlidXRlX18oKHdhcm5fdW51c2VkX3Jlc3VsdCkpCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb21waWxlci1nY2M0LmggYi9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLWdjYzQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzY4NmMwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9jb21waWxlci1nY2M0LmgKQEAgLTAsMCArMSwxNiBAQAorLyogTmV2ZXIgaW5jbHVkZSB0aGlzIGZpbGUgZGlyZWN0bHkuICBJbmNsdWRlIDxsaW51eC9jb21waWxlci5oPiBpbnN0ZWFkLiAgKi8KKworLyogVGhlc2UgZGVmaW5pdGlvbnMgYXJlIGZvciBHQ0MgdjQueC4gICovCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXItZ2NjLmg+CisKKyNkZWZpbmUgaW5saW5lCQkJaW5saW5lCQlfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkKKyNkZWZpbmUgX19pbmxpbmVfXwkJX19pbmxpbmVfXwlfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkKKyNkZWZpbmUgX19pbmxpbmUJCV9faW5saW5lCV9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKQorI2RlZmluZSBfX2RlcHJlY2F0ZWQJCV9fYXR0cmlidXRlX18oKGRlcHJlY2F0ZWQpKQorI2RlZmluZSBfX2F0dHJpYnV0ZV91c2VkX18JX19hdHRyaWJ1dGVfXygoX191c2VkX18pKQorI2RlZmluZSBfX2F0dHJpYnV0ZV9wdXJlX18JX19hdHRyaWJ1dGVfXygocHVyZSkpCisjZGVmaW5lIF9fYXR0cmlidXRlX2NvbnN0X18JX19hdHRyaWJ1dGVfXygoX19jb25zdF9fKSkKKyNkZWZpbmUgIG5vaW5saW5lCQlfX2F0dHJpYnV0ZV9fKChub2lubGluZSkpCisjZGVmaW5lIF9fbXVzdF9jaGVjayAJCV9fYXR0cmlidXRlX18oKHdhcm5fdW51c2VkX3Jlc3VsdCkpCisjZGVmaW5lIF9fY29tcGlsZXJfb2Zmc2V0b2YoYSxiKSBfX2J1aWx0aW5fb2Zmc2V0b2YoYSxiKQorCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLWludGVsLmggYi9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLWludGVsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQxYzNjZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvY29tcGlsZXItaW50ZWwuaApAQCAtMCwwICsxLDI0IEBACisvKiBOZXZlciBpbmNsdWRlIHRoaXMgZmlsZSBkaXJlY3RseS4gIEluY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+IGluc3RlYWQuICAqLworCisjaWZkZWYgX19FQ0MKKworLyogU29tZSBjb21waWxlciBzcGVjaWZpYyBkZWZpbml0aW9ucyBhcmUgb3ZlcndyaXR0ZW4gaGVyZQorICogZm9yIEludGVsIEVDQyBjb21waWxlcgorICovCisKKyNpbmNsdWRlIDxhc20vaW50cmluc2ljcy5oPgorCisvKiBJbnRlbCBFQ0MgY29tcGlsZXIgZG9lc24ndCBzdXBwb3J0IGdjYyBzcGVjaWZpYyBhc20gc3RtdHMuCisgKiBJdCB1c2VzIGludHJpbnNpY3MgdG8gZG8gdGhlIGVxdWl2YWxlbnQgdGhpbmdzLgorICovCisjdW5kZWYgYmFycmllcgorI3VuZGVmIFJFTE9DX0hJREUKKworI2RlZmluZSBiYXJyaWVyKCkgX19tZW1vcnlfYmFycmllcigpCisKKyNkZWZpbmUgUkVMT0NfSElERShwdHIsIG9mZikJCQkJCVwKKyAgKHsgdW5zaWduZWQgbG9uZyBfX3B0cjsJCQkJCVwKKyAgICAgX19wdHIgPSAodW5zaWduZWQgbG9uZykgKHB0cik7CQkJCVwKKyAgICAodHlwZW9mKHB0cikpIChfX3B0ciArIChvZmYpKTsgfSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmggYi9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg3NzI1YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaApAQCAtMCwwICsxLDE1MiBAQAorI2lmbmRlZiBfX0xJTlVYX0NPTVBJTEVSX0gKKyNkZWZpbmUgX19MSU5VWF9DT01QSUxFUl9ICisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNpZmRlZiBfX0NIRUNLRVJfXworIyBkZWZpbmUgX191c2VyCQlfX2F0dHJpYnV0ZV9fKChub2RlcmVmLCBhZGRyZXNzX3NwYWNlKDEpKSkKKyMgZGVmaW5lIF9fa2VybmVsCS8qIGRlZmF1bHQgYWRkcmVzcyBzcGFjZSAqLworIyBkZWZpbmUgX19zYWZlCQlfX2F0dHJpYnV0ZV9fKChzYWZlKSkKKyMgZGVmaW5lIF9fZm9yY2UJX19hdHRyaWJ1dGVfXygoZm9yY2UpKQorIyBkZWZpbmUgX19ub2Nhc3QJX19hdHRyaWJ1dGVfXygobm9jYXN0KSkKKyMgZGVmaW5lIF9faW9tZW0JX19hdHRyaWJ1dGVfXygobm9kZXJlZiwgYWRkcmVzc19zcGFjZSgyKSkpCisjIGRlZmluZSBfX2FjcXVpcmVzKHgpCV9fYXR0cmlidXRlX18oKGNvbnRleHQoMCwxKSkpCisjIGRlZmluZSBfX3JlbGVhc2VzKHgpCV9fYXR0cmlidXRlX18oKGNvbnRleHQoMSwwKSkpCisjIGRlZmluZSBfX2FjcXVpcmUoeCkJX19jb250ZXh0X18oMSkKKyMgZGVmaW5lIF9fcmVsZWFzZSh4KQlfX2NvbnRleHRfXygtMSkKKyMgZGVmaW5lIF9fY29uZF9sb2NrKHgpCSgoeCkgPyAoeyBfX2NvbnRleHRfXygxKTsgMTsgfSkgOiAwKQorZXh0ZXJuIHZvaWQgX19jaGtfdXNlcl9wdHIodm9pZCBfX3VzZXIgKik7CitleHRlcm4gdm9pZCBfX2Noa19pb19wdHIodm9pZCBfX2lvbWVtICopOworI2Vsc2UKKyMgZGVmaW5lIF9fdXNlcgorIyBkZWZpbmUgX19rZXJuZWwKKyMgZGVmaW5lIF9fc2FmZQorIyBkZWZpbmUgX19mb3JjZQorIyBkZWZpbmUgX19ub2Nhc3QKKyMgZGVmaW5lIF9faW9tZW0KKyMgZGVmaW5lIF9fY2hrX3VzZXJfcHRyKHgpICh2b2lkKTAKKyMgZGVmaW5lIF9fY2hrX2lvX3B0cih4KSAodm9pZCkwCisjIGRlZmluZSBfX2J1aWx0aW5fd2FybmluZyh4LCB5Li4uKSAoMSkKKyMgZGVmaW5lIF9fYWNxdWlyZXMoeCkKKyMgZGVmaW5lIF9fcmVsZWFzZXMoeCkKKyMgZGVmaW5lIF9fYWNxdWlyZSh4KSAodm9pZCkwCisjIGRlZmluZSBfX3JlbGVhc2UoeCkgKHZvaWQpMAorIyBkZWZpbmUgX19jb25kX2xvY2soeCkgKHgpCisjZW5kaWYKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2lmIF9fR05VQ19fID4gNAorI2Vycm9yIG5vIGNvbXBpbGVyLWdjYy5oIGZpbGUgZm9yIHRoaXMgZ2NjIHZlcnNpb24KKyNlbGlmIF9fR05VQ19fID09IDQKKyMgaW5jbHVkZSA8bGludXgvY29tcGlsZXItZ2NjNC5oPgorI2VsaWYgX19HTlVDX18gPT0gMworIyBpbmNsdWRlIDxsaW51eC9jb21waWxlci1nY2MzLmg+CisjZWxpZiBfX0dOVUNfXyA9PSAyCisjIGluY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLWdjYzIuaD4KKyNlbHNlCisjIGVycm9yIFNvcnJ5LCB5b3VyIGNvbXBpbGVyIGlzIHRvbyBvbGQvbm90IHJlY29nbml6ZWQuCisjZW5kaWYKKworLyogSW50ZWwgY29tcGlsZXIgZGVmaW5lcyBfX0dOVUNfXy4gU28gd2Ugd2lsbCBvdmVyd3JpdGUgaW1wbGVtZW50YXRpb25zCisgKiBjb21pbmcgZnJvbSBhYm92ZSBoZWFkZXIgZmlsZXMgaGVyZQorICovCisjaWZkZWYgX19JTlRFTF9DT01QSUxFUgorIyBpbmNsdWRlIDxsaW51eC9jb21waWxlci1pbnRlbC5oPgorI2VuZGlmCisKKy8qCisgKiBHZW5lcmljIGNvbXBpbGVyLWRlcGVuZGVudCBtYWNyb3MgcmVxdWlyZWQgZm9yIGtlcm5lbAorICogYnVpbGQgZ28gYmVsb3cgdGhpcyBjb21tZW50LiBBY3R1YWwgY29tcGlsZXIvY29tcGlsZXIgdmVyc2lvbgorICogc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zIGNvbWUgZnJvbSB0aGUgYWJvdmUgaGVhZGVyIGZpbGVzCisgKi8KKworI2RlZmluZSBsaWtlbHkoeCkJX19idWlsdGluX2V4cGVjdCghISh4KSwgMSkKKyNkZWZpbmUgdW5saWtlbHkoeCkJX19idWlsdGluX2V4cGVjdCghISh4KSwgMCkKKworLyogT3B0aW1pemF0aW9uIGJhcnJpZXIgKi8KKyNpZm5kZWYgYmFycmllcgorIyBkZWZpbmUgYmFycmllcigpIF9fbWVtb3J5X2JhcnJpZXIoKQorI2VuZGlmCisKKyNpZm5kZWYgUkVMT0NfSElERQorIyBkZWZpbmUgUkVMT0NfSElERShwdHIsIG9mZikJCQkJCVwKKyAgKHsgdW5zaWduZWQgbG9uZyBfX3B0cjsJCQkJCVwKKyAgICAgX19wdHIgPSAodW5zaWduZWQgbG9uZykgKHB0cik7CQkJCVwKKyAgICAodHlwZW9mKHB0cikpIChfX3B0ciArIChvZmYpKTsgfSkKKyNlbmRpZgorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKy8qCisgKiBBbGxvdyB1cyB0byBtYXJrIGZ1bmN0aW9ucyBhcyAnZGVwcmVjYXRlZCcgYW5kIGhhdmUgZ2NjIGVtaXQgYSBuaWNlCisgKiB3YXJuaW5nIGZvciBlYWNoIHVzZSwgaW4gaG9wZXMgb2Ygc3BlZWRpbmcgdGhlIGZ1bmN0aW9ucyByZW1vdmFsLgorICogVXNhZ2UgaXM6CisgKiAJCWludCBfX2RlcHJlY2F0ZWQgZm9vKHZvaWQpCisgKi8KKyNpZm5kZWYgX19kZXByZWNhdGVkCisjIGRlZmluZSBfX2RlcHJlY2F0ZWQJCS8qIHVuaW1wbGVtZW50ZWQgKi8KKyNlbmRpZgorCisjaWZuZGVmIF9fbXVzdF9jaGVjaworI2RlZmluZSBfX211c3RfY2hlY2sKKyNlbmRpZgorCisvKgorICogQWxsb3cgdXMgdG8gYXZvaWQgJ2RlZmluZWQgYnV0IG5vdCB1c2VkJyB3YXJuaW5ncyBvbiBmdW5jdGlvbnMgYW5kIGRhdGEsCisgKiBhcyB3ZWxsIGFzIGZvcmNlIHRoZW0gdG8gYmUgZW1pdHRlZCB0byB0aGUgYXNzZW1ibHkgZmlsZS4KKyAqCisgKiBBcyBvZiBnY2MgMy4zLCBzdGF0aWMgZnVuY3Rpb25zIHRoYXQgYXJlIG5vdCBtYXJrZWQgd2l0aCBhdHRyaWJ1dGUoKHVzZWQpKQorICogbWF5IGJlIGVsaWRlZCBmcm9tIHRoZSBhc3NlbWJseSBmaWxlLiAgQXMgb2YgZ2NjIDMuMywgc3RhdGljIGRhdGEgbm90IHNvCisgKiBtYXJrZWQgd2lsbCBub3QgYmUgZWxpZGVkLCBidXQgdGhpcyBtYXkgY2hhbmdlIGluIGEgZnV0dXJlIGdjYyB2ZXJzaW9uLgorICoKKyAqIEluIHByaW9yIHZlcnNpb25zIG9mIGdjYywgc3VjaCBmdW5jdGlvbnMgYW5kIGRhdGEgd291bGQgYmUgZW1pdHRlZCwgYnV0CisgKiB3b3VsZCBiZSB3YXJuZWQgYWJvdXQgZXhjZXB0IHdpdGggYXR0cmlidXRlKCh1bnVzZWQpKS4KKyAqLworI2lmbmRlZiBfX2F0dHJpYnV0ZV91c2VkX18KKyMgZGVmaW5lIF9fYXR0cmlidXRlX3VzZWRfXwkvKiB1bmltcGxlbWVudGVkICovCisjZW5kaWYKKworLyoKKyAqIEZyb20gdGhlIEdDQyBtYW51YWw6CisgKgorICogTWFueSBmdW5jdGlvbnMgaGF2ZSBubyBlZmZlY3RzIGV4Y2VwdCB0aGUgcmV0dXJuIHZhbHVlIGFuZCB0aGVpcgorICogcmV0dXJuIHZhbHVlIGRlcGVuZHMgb25seSBvbiB0aGUgcGFyYW1ldGVycyBhbmQvb3IgZ2xvYmFsCisgKiB2YXJpYWJsZXMuICBTdWNoIGEgZnVuY3Rpb24gY2FuIGJlIHN1YmplY3QgdG8gY29tbW9uIHN1YmV4cHJlc3Npb24KKyAqIGVsaW1pbmF0aW9uIGFuZCBsb29wIG9wdGltaXphdGlvbiBqdXN0IGFzIGFuIGFyaXRobWV0aWMgb3BlcmF0b3IKKyAqIHdvdWxkIGJlLgorICogWy4uLl0KKyAqLworI2lmbmRlZiBfX2F0dHJpYnV0ZV9wdXJlX18KKyMgZGVmaW5lIF9fYXR0cmlidXRlX3B1cmVfXwkvKiB1bmltcGxlbWVudGVkICovCisjZW5kaWYKKworLyoKKyAqIEZyb20gdGhlIEdDQyBtYW51YWw6CisgKgorICogTWFueSBmdW5jdGlvbnMgZG8gbm90IGV4YW1pbmUgYW55IHZhbHVlcyBleGNlcHQgdGhlaXIgYXJndW1lbnRzLAorICogYW5kIGhhdmUgbm8gZWZmZWN0cyBleGNlcHQgdGhlIHJldHVybiB2YWx1ZS4gIEJhc2ljYWxseSB0aGlzIGlzCisgKiBqdXN0IHNsaWdodGx5IG1vcmUgc3RyaWN0IGNsYXNzIHRoYW4gdGhlIGBwdXJlJyBhdHRyaWJ1dGUgYWJvdmUsCisgKiBzaW5jZSBmdW5jdGlvbiBpcyBub3QgYWxsb3dlZCB0byByZWFkIGdsb2JhbCBtZW1vcnkuCisgKgorICogTm90ZSB0aGF0IGEgZnVuY3Rpb24gdGhhdCBoYXMgcG9pbnRlciBhcmd1bWVudHMgYW5kIGV4YW1pbmVzIHRoZQorICogZGF0YSBwb2ludGVkIHRvIG11c3QgX25vdF8gYmUgZGVjbGFyZWQgYGNvbnN0Jy4gIExpa2V3aXNlLCBhCisgKiBmdW5jdGlvbiB0aGF0IGNhbGxzIGEgbm9uLWBjb25zdCcgZnVuY3Rpb24gdXN1YWxseSBtdXN0IG5vdCBiZQorICogYGNvbnN0Jy4gIEl0IGRvZXMgbm90IG1ha2Ugc2Vuc2UgZm9yIGEgYGNvbnN0JyBmdW5jdGlvbiB0byByZXR1cm4KKyAqIGB2b2lkJy4KKyAqLworI2lmbmRlZiBfX2F0dHJpYnV0ZV9jb25zdF9fCisjIGRlZmluZSBfX2F0dHJpYnV0ZV9jb25zdF9fCS8qIHVuaW1wbGVtZW50ZWQgKi8KKyNlbmRpZgorCisjaWZuZGVmIG5vaW5saW5lCisjZGVmaW5lIG5vaW5saW5lCisjZW5kaWYKKworI2lmbmRlZiBfX2Fsd2F5c19pbmxpbmUKKyNkZWZpbmUgX19hbHdheXNfaW5saW5lIGlubGluZQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0xJTlVYX0NPTVBJTEVSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29tcGxldGlvbi5oIGIvaW5jbHVkZS9saW51eC9jb21wbGV0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA2NjNhZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvY29tcGxldGlvbi5oCkBAIC0wLDAgKzEsNDIgQEAKKyNpZm5kZWYgX19MSU5VWF9DT01QTEVUSU9OX0gKKyNkZWZpbmUgX19MSU5VWF9DT01QTEVUSU9OX0gKKworLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMSBMaW51cyBUb3J2YWxkcworICoKKyAqIEF0b21pYyB3YWl0LWZvci1jb21wbGV0aW9uIGhhbmRsZXIgZGF0YSBzdHJ1Y3R1cmVzLgorICogU2VlIGtlcm5lbC9zY2hlZC5jIGZvciBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisKK3N0cnVjdCBjb21wbGV0aW9uIHsKKwl1bnNpZ25lZCBpbnQgZG9uZTsKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OworfTsKKworI2RlZmluZSBDT01QTEVUSU9OX0lOSVRJQUxJWkVSKHdvcmspIFwKKwl7IDAsIF9fV0FJVF9RVUVVRV9IRUFEX0lOSVRJQUxJWkVSKCh3b3JrKS53YWl0KSB9CisKKyNkZWZpbmUgREVDTEFSRV9DT01QTEVUSU9OKHdvcmspIFwKKwlzdHJ1Y3QgY29tcGxldGlvbiB3b3JrID0gQ09NUExFVElPTl9JTklUSUFMSVpFUih3b3JrKQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9jb21wbGV0aW9uKHN0cnVjdCBjb21wbGV0aW9uICp4KQoreworCXgtPmRvbmUgPSAwOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJngtPndhaXQpOworfQorCitleHRlcm4gdm9pZCBGQVNUQ0FMTCh3YWl0X2Zvcl9jb21wbGV0aW9uKHN0cnVjdCBjb21wbGV0aW9uICopKTsKK2V4dGVybiBpbnQgRkFTVENBTEwod2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlKHN0cnVjdCBjb21wbGV0aW9uICp4KSk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBGQVNUQ0FMTCh3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoc3RydWN0IGNvbXBsZXRpb24gKngsCisJCQkJCQkgICB1bnNpZ25lZCBsb25nIHRpbWVvdXQpKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIEZBU1RDQUxMKHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZV90aW1lb3V0KAorCQkJc3RydWN0IGNvbXBsZXRpb24gKngsIHVuc2lnbmVkIGxvbmcgdGltZW91dCkpOworCitleHRlcm4gdm9pZCBGQVNUQ0FMTChjb21wbGV0ZShzdHJ1Y3QgY29tcGxldGlvbiAqKSk7CitleHRlcm4gdm9pZCBGQVNUQ0FMTChjb21wbGV0ZV9hbGwoc3RydWN0IGNvbXBsZXRpb24gKikpOworCisjZGVmaW5lIElOSVRfQ09NUExFVElPTih4KQkoKHgpLmRvbmUgPSAwKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29tc3RhdHMuaCBiL2luY2x1ZGUvbGludXgvY29tc3RhdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjVlYThlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9jb21zdGF0cy5oCkBAIC0wLDAgKzEsMTE5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKgljb21zdGF0cy5oICAtLSBTZXJpYWwgUG9ydCBTdGF0cy4KKyAqCisgKglDb3B5cmlnaHQgKEMpIDE5OTYtMTk5OCAgU3RhbGxpb24gVGVjaG5vbG9naWVzCisgKglDb3B5cmlnaHQgKEMpIDE5OTQtMTk5NiAgR3JlZyBVbmdlcmVyLgorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKglpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICoJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqCShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKglidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICoJTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICoJR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKglZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICoJYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqCUZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYJX0NPTVNUQVRTX0gKKyNkZWZpbmUJX0NPTVNUQVRTX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCVNlcmlhbCBwb3J0IHN0YXRzIHN0cnVjdHVyZS4gVGhlIHN0cnVjdHVyZSBpdHNlbGYgaXMgVUFSVAorICoJaW5kZXBlbmRlbnQsIGJ1dCBzb21lIGZpZWxkcyBtYXkgYmUgVUFSVC9kcml2ZXIgc3BlY2lmaWMgKGZvcgorICoJZXhhbXBsZSBzdGF0ZSkuCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcJYnJkOworCXVuc2lnbmVkIGxvbmcJcGFuZWw7CisJdW5zaWduZWQgbG9uZwlwb3J0OworCXVuc2lnbmVkIGxvbmcJaHdpZDsKKwl1bnNpZ25lZCBsb25nCXR5cGU7CisJdW5zaWduZWQgbG9uZwl0eHRvdGFsOworCXVuc2lnbmVkIGxvbmcJcnh0b3RhbDsKKwl1bnNpZ25lZCBsb25nCXR4YnVmZmVyZWQ7CisJdW5zaWduZWQgbG9uZwlyeGJ1ZmZlcmVkOworCXVuc2lnbmVkIGxvbmcJcnhvdmVycnVuOworCXVuc2lnbmVkIGxvbmcJcnhwYXJpdHk7CisJdW5zaWduZWQgbG9uZwlyeGZyYW1pbmc7CisJdW5zaWduZWQgbG9uZwlyeGxvc3Q7CisJdW5zaWduZWQgbG9uZwl0eGJyZWFrczsKKwl1bnNpZ25lZCBsb25nCXJ4YnJlYWtzOworCXVuc2lnbmVkIGxvbmcJdHh4b247CisJdW5zaWduZWQgbG9uZwl0eHhvZmY7CisJdW5zaWduZWQgbG9uZwlyeHhvbjsKKwl1bnNpZ25lZCBsb25nCXJ4eG9mZjsKKwl1bnNpZ25lZCBsb25nCXR4Y3Rzb247CisJdW5zaWduZWQgbG9uZwl0eGN0c29mZjsKKwl1bnNpZ25lZCBsb25nCXJ4cnRzb247CisJdW5zaWduZWQgbG9uZwlyeHJ0c29mZjsKKwl1bnNpZ25lZCBsb25nCW1vZGVtOworCXVuc2lnbmVkIGxvbmcJc3RhdGU7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKwl1bnNpZ25lZCBsb25nCXR0eXN0YXRlOworCXVuc2lnbmVkIGxvbmcJY2ZsYWdzOworCXVuc2lnbmVkIGxvbmcJaWZsYWdzOworCXVuc2lnbmVkIGxvbmcJb2ZsYWdzOworCXVuc2lnbmVkIGxvbmcJbGZsYWdzOworCXVuc2lnbmVkIGxvbmcJc2lnbmFsczsKK30gY29tc3RhdHNfdDsKKworCisvKgorICoJQm9hcmQgc3RhdHMgc3RydWN0dXJlLiBSZXR1cm5zIHVzZWZ1bCBpbmZvIGFib3V0IHRoZSBib2FyZC4KKyAqLworCisjZGVmaW5lCUNPTV9NQVhQQU5FTFMJOAorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgbG9uZwlwYW5lbDsKKwl1bnNpZ25lZCBsb25nCXR5cGU7CisJdW5zaWduZWQgbG9uZwlod2lkOworCXVuc2lnbmVkIGxvbmcJbnJwb3J0czsKK30gY29tcGFuZWxfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcJYnJkOworCXVuc2lnbmVkIGxvbmcJdHlwZTsKKwl1bnNpZ25lZCBsb25nCWh3aWQ7CisJdW5zaWduZWQgbG9uZwlzdGF0ZTsKKwl1bnNpZ25lZCBsb25nCWlvYWRkcjsKKwl1bnNpZ25lZCBsb25nCWlvYWRkcjI7CisJdW5zaWduZWQgbG9uZwltZW1hZGRyOworCXVuc2lnbmVkIGxvbmcJaXJxOworCXVuc2lnbmVkIGxvbmcJbnJwYW5lbHM7CisJdW5zaWduZWQgbG9uZwlucnBvcnRzOworCWNvbXBhbmVsX3QJcGFuZWxzW0NPTV9NQVhQQU5FTFNdOworfSBjb21icmRfdDsKKworCisvKgorICoJRGVmaW5lIHRoZSBpb2N0bCBvcGVyYXRpb25zIGZvciBzdGF0cyBzdHVmZi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisKKyNkZWZpbmUJQ09NX0dFVFBPUlRTVEFUUwlfSU8oJ2MnLDMwKQorI2RlZmluZQlDT01fQ0xSUE9SVFNUQVRTCV9JTygnYycsMzEpCisjZGVmaW5lCUNPTV9HRVRCUkRTVEFUUwkJX0lPKCdjJywzMikKKworCisvKgorICoJRGVmaW5lIHRoZSBzZXQgb2YgaW9jdGxzIHRoYXQgZ2l2ZSB1c2VyIGxldmVsIGFjY2VzcyB0byB0aGUKKyAqCXByaXZhdGUgcG9ydCwgcGFuZWwgYW5kIGJvYXJkIHN0cnVjdHVyZXMuIFRoZSBhcmd1bWVudCByZXF1aXJlZAorICoJd2lsbCBiZSBkcml2ZXIgZGVwZW5kZW50ISAgCisgKi8KKyNkZWZpbmUJQ09NX1JFQURQT1JUCQlfSU8oJ2MnLDQwKQorI2RlZmluZQlDT01fUkVBREJPQVJECQlfSU8oJ2MnLDQxKQorI2RlZmluZQlDT01fUkVBRFBBTkVMCQlfSU8oJ2MnLDQyKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29uY2FwLmggYi9pbmNsdWRlL2xpbnV4L2NvbmNhcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3MzA0NjUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2NvbmNhcC5oCkBAIC0wLDAgKzEsMTEzIEBACisvKiAkSWQ6IGNvbmNhcC5oLHYgMS4zLjIuMiAyMDA0LzAxLzEyIDIzOjA4OjM1IGtlaWwgRXhwICQKKyAqCisgKiBDb3B5cmlnaHQgMTk5NyBieSBIZW5uZXIgRWlzZW4gPGVpc0BiYXR5LmhhbnNlLmRlPgorICoKKyAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgdGVybXMKKyAqIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuCisgKi8KKworI2lmbmRlZiBfTElOVVhfQ09OQ0FQX0gKKyNkZWZpbmUgX0xJTlVYX0NPTkNBUF9ICisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorCisvKiBTdHVmZiB0byBzdXBwb3J0IGVuY2Fwc3VsYXRpb24gcHJvdG9jb2xzIGdlbmVyaWNseS4gVGhlIGVuY2Fwc3VsYXRpb24KKyAgIHByb3RvY29sIGlzIHByb2Nlc3NlZCBhdCB0aGUgdXBwZXJtb3N0IGxheWVyIG9mIHRoZSBuZXR3b3JrIGludGVyZmFjZS4KKworICAgQmFzZWQgb24gYSBpZGVhcyBkZXZlbG9wZWQgaW4gYSAnc3luY2hyb25vdXMgZGV2aWNlJyB0aHJlYWQgaW4gdGhlCisgICBsaW51eC14MjUgbWFpbGluZyBsaXN0IGNvbnRyaWJ1dGVkIGJ5IEFsYW4gQ294LCBUaG9tYXN6IE1vdHlsZXdza2kKKyAgIGFuZCBKb25hdGhhbiBOYXlsb3IuCisKKyAgIEZvciBtb3JlIGRvY3VtZXRhdGlvbiBvbiB0aGlzIHJlZmVyIHRvIERvY3VtZW50YXRpb24vaXNkbi9SRUFETUUuY29uY2FwCisqLworCitzdHJ1Y3QgY29uY2FwX3Byb3RvX29wczsKK3N0cnVjdCBjb25jYXBfZGV2aWNlX29wczsKKworLyogdGhpcyBtYW5hZ2VzIGFsbCBkYXRhIG5lZWRlZCBieSB0aGUgZW5jYXBzdWxhdGlvbiBwcm90b2NvbAorICovCitzdHJ1Y3QgY29uY2FwX3Byb3RveworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2OwkvKiBuZXQgZGV2aWNlIHVzaW5nIG91ciBzZXJ2aWNlICAqLworCXN0cnVjdCBjb25jYXBfZGV2aWNlX29wcyAqZG9wczsJLyogY2FsbGJhY2tzIHByb3ZpZGVkIGJ5IGRldmljZSAqLworIAlzdHJ1Y3QgY29uY2FwX3Byb3RvX29wcyAgKnBvcHM7CS8qIGNhbGxiYWNrcyBwcm92aWRlZCBieSB1cyAqLworIAlzcGlubG9ja190IGxvY2s7CisJaW50IGZsYWdzOworCXZvaWQgKnByb3RvX2RhdGE7CQkvKiBwcm90b2NvbCBzcGVjaWZpYyBwcml2YXRlIGRhdGEsIHRvCisJCQkJCSAgIGJlIGFjY2Vzc2VkIHZpYSAqcG9wcyBtZXRob2RzIG9ubHkqLworCS8qCisJICA6CisJICB3aGF0ZXZlciAKKwkgIDoKKwkgICovCit9OworCisvKiBPcGVyYXRpb25zIHRvIGJlIHN1cHBvcnRlZCBieSB0aGUgbmV0IGRldmljZS4gQ2FsbGVkIGJ5IHRoZSBlbmNhcHN1bGF0aW9uCisgKiBwcm90b2NvbCBlbnRpdHkuIE5vIHJlY2VpdmUgbWV0aG9kIGlzIG9mZmVyZWQgYmVjYXVzZSB0aGUgZW5jYXBzdWxhdGlvbgorICogcHJvdG9jb2wgZGlyZWN0bHkgY2FsbHMgbmV0aWZfcngoKS4KKyAqLworc3RydWN0IGNvbmNhcF9kZXZpY2Vfb3BzeworCisJLyogdG8gcmVxdWVzdCBkYXRhIGlzIHN1Ym1pdHRlZCBieSBkZXZpY2UqLyAKKwlpbnQgKCpkYXRhX3JlcSkoc3RydWN0IGNvbmNhcF9wcm90byAqLCBzdHJ1Y3Qgc2tfYnVmZiAqKTsKKworCS8qIENvbnRyb2wgbWV0aG9kcyBtdXN0IGJlIHNldCB0byBOVUxMIGJ5IGRldmljZXMgd2hpY2ggZG8gbm90CisJICAgc3VwcG9ydCBjb25uZWN0aW9uIGNvbnRyb2wuKi8KKwkvKiB0byByZXF1ZXN0IGEgY29ubmVjdGlvbiBpcyBzZXQgdXAgKi8gCisJaW50ICgqY29ubmVjdF9yZXEpKHN0cnVjdCBjb25jYXBfcHJvdG8gKik7CisKKwkvKiB0byByZXF1ZXN0IGEgY29ubmVjdGlvbiBpcyByZWxlYXNlZCAqLworCWludCAoKmRpc2Nvbm5fcmVxKShzdHJ1Y3QgY29uY2FwX3Byb3RvICopOwkKK307CisKKy8qIE9wZXJhdGlvbnMgdG8gYmUgc3VwcG9ydGVkIGJ5IHRoZSBlbmNhcHN1bGF0aW9uIHByb3RvY29sLiBDYWxsZWQgYnkKKyAqIGRldmljZSBkcml2ZXIuCisgKi8KK3N0cnVjdCBjb25jYXBfcHJvdG9fb3BzeworCisJLyogY3JlYXRlIGEgbmV3IGVuY2Fwc3VsYXRpb24gcHJvdG9jb2wgaW5zdGFuY2Ugb2Ygc2FtZSB0eXBlICovCisJc3RydWN0IGNvbmNhcF9wcm90byAqICAoKnByb3RvX25ldykgKHZvaWQpOworCisJLyogZGVsZXRlIGVuY2Fwc3VsYXRpb24gcHJvdG9jb2wgaW5zdGFuY2UgYW5kIGZyZWUgYWxsIGl0cyByZXNvdXJjZXMuCisJICAgY3Byb3QgbWF5IG5vIGxvZ2VyIGJlIHJlZmVyZW5jZWQgYWZ0ZXIgY2FsbGluZyB0aGlzICovCisJdm9pZCAoKnByb3RvX2RlbCkoc3RydWN0IGNvbmNhcF9wcm90byAqY3Byb3QpOworCisJLyogaW5pdGlhbGl6ZSB0aGUgcHJvdG9jb2wncyBkYXRhLiBUbyBiZSBjYWxsZWQgYXQgaW50ZXJmYWNlIHN0YXJ0dXAKKwkgICBvciB3aGVuIHRoZSBkZXZpY2UgZHJpdmVyIHJlc2V0cyB0aGUgaW50ZXJmYWNlLiBBbGwgc2VydmljZXMgb2YgdGhlCisJICAgZW5jYXBzdWxhdGlvbiBwcm90b2NvbCBtYXkgYmUgdXNlZCBhZnRlciB0aGlzKi8KKwlpbnQgKCpyZXN0YXJ0KShzdHJ1Y3QgY29uY2FwX3Byb3RvICpjcHJvdCwgCisJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKKwkJICAgICAgIHN0cnVjdCBjb25jYXBfZGV2aWNlX29wcyAqZG9wcyk7CisKKwkvKiBpbmFjdGl2YXRlIGFuIGVuY2Fwc3VsYXRpb24gcHJvdG9jb2wgaW5zdGFuY2UuIFRoZSBlbmNhcHN1bGF0aW9uCisJICAgcHJvdG9jb2wgbWF5IG5vdCBjYWxsIGFueSAqZG9wcyBtZXRob2RzIGFmdGVyIHRoaXMuICovCisJaW50ICgqY2xvc2UpKHN0cnVjdCBjb25jYXBfcHJvdG8gKmNwcm90KTsKKworCS8qIHByb2Nlc3MgYSBmcmFtZSBoYW5kZWQgZG93biB0byB1cyBieSB1cHBlciBsYXllciAqLworCWludCAoKmVuY2FwX2FuZF94bWl0KShzdHJ1Y3QgY29uY2FwX3Byb3RvICpjcHJvdCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKKwkvKiB0byBiZSBjYWxsZWQgZm9yIGVhY2ggZGF0YSBlbnRpdHkgcmVjZWl2ZWQgZnJvbSBsb3dlciBsYXllciovIAorCWludCAoKmRhdGFfaW5kKShzdHJ1Y3QgY29uY2FwX3Byb3RvICpjcHJvdCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKKwkvKiB0byBiZSBjYWxsZWQgd2hlbiBhIGNvbm5lY3Rpb24gd2FzIHNldCB1cC9kb3duLgorCSAgIFByb3RvY29scyB0aGF0IGRvbid0IHByb2Nlc3MgdGhlc2UgcHJpbWl0aXZlcyBtaWdodCBmaWxsIGluCisJICAgZHVtbXkgbWV0aG9kcyBoZXJlICovCisJaW50ICgqY29ubmVjdF9pbmQpKHN0cnVjdCBjb25jYXBfcHJvdG8gKmNwcm90KTsKKwlpbnQgKCpkaXNjb25uX2luZCkoc3RydWN0IGNvbmNhcF9wcm90byAqY3Byb3QpOworICAvKgorICAgIFNvbWUgbmV0d29yayBkZXZpY2Ugc3VwcG9ydCBmdW5jdGlvbnMsIGxpa2UgbmV0X2hlYWRlcigpLCByZWJ1aWxkX2hlYWRlcigpLAorICAgIGFuZCBvdGhlcnMsIHRoYXQgZGVwZW5kIHNvbGVseSBvbiB0aGUgZW5jYXBzdWxhdGlvbiBwcm90b2NvbCwgbWlnaHQKKyAgICBiZSBwcm92aWRlZCBoZXJlLCB0b28uIFRoZSBuZXQgZGV2aWNlIHdvdWxkIGp1c3QgZmlsbCB0aGVtIGluIGl0cworICAgIGNvcnJlc3BvbmRpbmcgZmllbGRzIHdoZW4gaXQgaXMgb3BlbmVkLgorICAgICovCit9OworCisvKiBkdW1teSByZXN0YXJ0L2Nsb3NlL2Nvbm5lY3QvcmVzZXQvZGlzY29ubiBtZXRob2RzCisgKi8KK2V4dGVybiBpbnQgY29uY2FwX25vcChzdHJ1Y3QgY29uY2FwX3Byb3RvICpjcHJvdCk7IAorCisvKiBkdW1teSBzdWJtaXQgbWV0aG9kCisgKi8KK2V4dGVybiBpbnQgY29uY2FwX2Ryb3Bfc2tiKHN0cnVjdCBjb25jYXBfcHJvdG8gKmNwcm90LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NvbmZpZy5oIGIvaW5jbHVkZS9saW51eC9jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDFjMTRmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9jb25maWcuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX0xJTlVYX0NPTkZJR19ICisjZGVmaW5lIF9MSU5VWF9DT05GSUdfSAorCisjaW5jbHVkZSA8bGludXgvYXV0b2NvbmYuaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NvbnNvbGUuaCBiL2luY2x1ZGUvbGludXgvY29uc29sZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyMTM3MTMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2NvbnNvbGUuaApAQCAtMCwwICsxLDEzMyBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2xpbnV4L2NvbnNvbGUuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTMgICAgICAgIEhhbWlzaCBNYWNkb25hbGQKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ2hhbmdlZDoKKyAqIDEwLU1hci05NDogQXJubyBHcmlmZmlvZW46IENvbnZlcnNpb24gZm9yIHZ0MTAwIGVtdWxhdG9yIHBvcnQgZnJvbSBQQyBMSU5VWAorICovCisKKyNpZm5kZWYgX0xJTlVYX0NPTlNPTEVfSF8KKyNkZWZpbmUgX0xJTlVYX0NPTlNPTEVfSF8gMQorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorCitzdHJ1Y3QgdmNfZGF0YTsKK3N0cnVjdCBjb25zb2xlX2ZvbnRfb3A7CitzdHJ1Y3QgY29uc29sZV9mb250Oworc3RydWN0IG1vZHVsZTsKKworLyoKKyAqIHRoaXMgaXMgd2hhdCB0aGUgdGVybWluYWwgYW5zd2VycyB0byBhIEVTQy1aIG9yIGNzaTBjIHF1ZXJ5LgorICovCisjZGVmaW5lIFZUMTAwSUQgIlwwMzNbPzE7MmMiCisjZGVmaW5lIFZUMTAySUQgIlwwMzNbPzZjIgorCitzdHJ1Y3QgY29uc3cgeworCXN0cnVjdCBtb2R1bGUgKm93bmVyOworCWNvbnN0IGNoYXIgKigqY29uX3N0YXJ0dXApKHZvaWQpOworCXZvaWQJKCpjb25faW5pdCkoc3RydWN0IHZjX2RhdGEgKiwgaW50KTsKKwl2b2lkCSgqY29uX2RlaW5pdCkoc3RydWN0IHZjX2RhdGEgKik7CisJdm9pZAkoKmNvbl9jbGVhcikoc3RydWN0IHZjX2RhdGEgKiwgaW50LCBpbnQsIGludCwgaW50KTsKKwl2b2lkCSgqY29uX3B1dGMpKHN0cnVjdCB2Y19kYXRhICosIGludCwgaW50LCBpbnQpOworCXZvaWQJKCpjb25fcHV0Y3MpKHN0cnVjdCB2Y19kYXRhICosIGNvbnN0IHVuc2lnbmVkIHNob3J0ICosIGludCwgaW50LCBpbnQpOworCXZvaWQJKCpjb25fY3Vyc29yKShzdHJ1Y3QgdmNfZGF0YSAqLCBpbnQpOworCWludAkoKmNvbl9zY3JvbGwpKHN0cnVjdCB2Y19kYXRhICosIGludCwgaW50LCBpbnQsIGludCk7CisJdm9pZAkoKmNvbl9ibW92ZSkoc3RydWN0IHZjX2RhdGEgKiwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCk7CisJaW50CSgqY29uX3N3aXRjaCkoc3RydWN0IHZjX2RhdGEgKik7CisJaW50CSgqY29uX2JsYW5rKShzdHJ1Y3QgdmNfZGF0YSAqLCBpbnQsIGludCk7CisJaW50CSgqY29uX2ZvbnRfc2V0KShzdHJ1Y3QgdmNfZGF0YSAqLCBzdHJ1Y3QgY29uc29sZV9mb250ICosIHVuc2lnbmVkKTsKKwlpbnQJKCpjb25fZm9udF9nZXQpKHN0cnVjdCB2Y19kYXRhICosIHN0cnVjdCBjb25zb2xlX2ZvbnQgKik7CisJaW50CSgqY29uX2ZvbnRfZGVmYXVsdCkoc3RydWN0IHZjX2RhdGEgKiwgc3RydWN0IGNvbnNvbGVfZm9udCAqLCBjaGFyICopOworCWludAkoKmNvbl9mb250X2NvcHkpKHN0cnVjdCB2Y19kYXRhICosIGludCk7CisJaW50CSgqY29uX3Jlc2l6ZSkoc3RydWN0IHZjX2RhdGEgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOworCWludAkoKmNvbl9zZXRfcGFsZXR0ZSkoc3RydWN0IHZjX2RhdGEgKiwgdW5zaWduZWQgY2hhciAqKTsKKwlpbnQJKCpjb25fc2Nyb2xsZGVsdGEpKHN0cnVjdCB2Y19kYXRhICosIGludCk7CisJaW50CSgqY29uX3NldF9vcmlnaW4pKHN0cnVjdCB2Y19kYXRhICopOworCXZvaWQJKCpjb25fc2F2ZV9zY3JlZW4pKHN0cnVjdCB2Y19kYXRhICopOworCXU4CSgqY29uX2J1aWxkX2F0dHIpKHN0cnVjdCB2Y19kYXRhICosIHU4LCB1OCwgdTgsIHU4LCB1OCk7CisJdm9pZAkoKmNvbl9pbnZlcnRfcmVnaW9uKShzdHJ1Y3QgdmNfZGF0YSAqLCB1MTYgKiwgaW50KTsKKwl1MTYgICAgKigqY29uX3NjcmVlbl9wb3MpKHN0cnVjdCB2Y19kYXRhICosIGludCk7CisJdW5zaWduZWQgbG9uZyAoKmNvbl9nZXR4eSkoc3RydWN0IHZjX2RhdGEgKiwgdW5zaWduZWQgbG9uZywgaW50ICosIGludCAqKTsKK307CisKK2V4dGVybiBjb25zdCBzdHJ1Y3QgY29uc3cgKmNvbnN3aXRjaHA7CisKK2V4dGVybiBjb25zdCBzdHJ1Y3QgY29uc3cgZHVtbXlfY29uOwkvKiBkdW1teSBjb25zb2xlIGJ1ZmZlciAqLworZXh0ZXJuIGNvbnN0IHN0cnVjdCBjb25zdyB2Z2FfY29uOwkvKiBWR0EgdGV4dCBjb25zb2xlICovCitleHRlcm4gY29uc3Qgc3RydWN0IGNvbnN3IG5ld3BvcnRfY29uOwkvKiBTR0kgTmV3cG9ydCBjb25zb2xlICAqLworZXh0ZXJuIGNvbnN0IHN0cnVjdCBjb25zdyBwcm9tX2NvbjsJLyogU1BBUkMgUFJPTSBjb25zb2xlICovCisKK2ludCB0YWtlX292ZXJfY29uc29sZShjb25zdCBzdHJ1Y3QgY29uc3cgKnN3LCBpbnQgZmlyc3QsIGludCBsYXN0LCBpbnQgZGVmbHQpOwordm9pZCBnaXZlX3VwX2NvbnNvbGUoY29uc3Qgc3RydWN0IGNvbnN3ICpzdyk7CisKKy8qIHNjcm9sbCAqLworI2RlZmluZSBTTV9VUCAgICAgICAoMSkKKyNkZWZpbmUgU01fRE9XTiAgICAgKDIpCisKKy8qIGN1cnNvciAqLworI2RlZmluZSBDTV9EUkFXICAgICAoMSkKKyNkZWZpbmUgQ01fRVJBU0UgICAgKDIpCisjZGVmaW5lIENNX01PVkUgICAgICgzKQorCisvKgorICogVGhlIGludGVyZmFjZSBmb3IgYSBjb25zb2xlLCBvciBhbnkgb3RoZXIgZGV2aWNlIHRoYXQgd2FudHMgdG8gY2FwdHVyZQorICogY29uc29sZSBtZXNzYWdlcyAocHJpbnRlciBkcml2ZXI/KQorICoKKyAqIElmIGEgY29uc29sZSBkcml2ZXIgaXMgbWFya2VkIENPTl9CT09UIHRoZW4gaXQgd2lsbCBiZSBhdXRvLXVucmVnaXN0ZXJlZAorICogd2hlbiB0aGUgZmlyc3QgcmVhbCBjb25zb2xlIGlzIHJlZ2lzdGVyZWQuICBUaGlzIGlzIGZvciBlYXJseS1wcmludGsgZHJpdmVycy4KKyAqLworCisjZGVmaW5lIENPTl9QUklOVEJVRkZFUgkoMSkKKyNkZWZpbmUgQ09OX0NPTlNERVYJKDIpIC8qIExhc3Qgb24gdGhlIGNvbW1hbmQgbGluZSAqLworI2RlZmluZSBDT05fRU5BQkxFRAkoNCkKKyNkZWZpbmUgQ09OX0JPT1QJKDgpCisKK3N0cnVjdCBjb25zb2xlCit7CisJY2hhcgluYW1lWzhdOworCXZvaWQJKCp3cml0ZSkoc3RydWN0IGNvbnNvbGUgKiwgY29uc3QgY2hhciAqLCB1bnNpZ25lZCk7CisJaW50CSgqcmVhZCkoc3RydWN0IGNvbnNvbGUgKiwgY2hhciAqLCB1bnNpZ25lZCk7CisJc3RydWN0IHR0eV9kcml2ZXIgKigqZGV2aWNlKShzdHJ1Y3QgY29uc29sZSAqLCBpbnQgKik7CisJdm9pZAkoKnVuYmxhbmspKHZvaWQpOworCWludAkoKnNldHVwKShzdHJ1Y3QgY29uc29sZSAqLCBjaGFyICopOworCXNob3J0CWZsYWdzOworCXNob3J0CWluZGV4OworCWludAljZmxhZzsKKwl2b2lkCSpkYXRhOworCXN0cnVjdAkgY29uc29sZSAqbmV4dDsKK307CisKK2V4dGVybiBpbnQgYWRkX3ByZWZlcnJlZF9jb25zb2xlKGNoYXIgKm5hbWUsIGludCBpZHgsIGNoYXIgKm9wdGlvbnMpOworZXh0ZXJuIHZvaWQgcmVnaXN0ZXJfY29uc29sZShzdHJ1Y3QgY29uc29sZSAqKTsKK2V4dGVybiBpbnQgdW5yZWdpc3Rlcl9jb25zb2xlKHN0cnVjdCBjb25zb2xlICopOworZXh0ZXJuIHN0cnVjdCBjb25zb2xlICpjb25zb2xlX2RyaXZlcnM7CitleHRlcm4gdm9pZCBhY3F1aXJlX2NvbnNvbGVfc2VtKHZvaWQpOworZXh0ZXJuIGludCB0cnlfYWNxdWlyZV9jb25zb2xlX3NlbSh2b2lkKTsKK2V4dGVybiB2b2lkIHJlbGVhc2VfY29uc29sZV9zZW0odm9pZCk7CitleHRlcm4gdm9pZCBjb25zb2xlX2NvbmRpdGlvbmFsX3NjaGVkdWxlKHZvaWQpOworZXh0ZXJuIHZvaWQgY29uc29sZV91bmJsYW5rKHZvaWQpOworZXh0ZXJuIHN0cnVjdCB0dHlfZHJpdmVyICpjb25zb2xlX2RldmljZShpbnQgKik7CitleHRlcm4gdm9pZCBjb25zb2xlX3N0b3Aoc3RydWN0IGNvbnNvbGUgKik7CitleHRlcm4gdm9pZCBjb25zb2xlX3N0YXJ0KHN0cnVjdCBjb25zb2xlICopOworZXh0ZXJuIGludCBpc19jb25zb2xlX2xvY2tlZCh2b2lkKTsKKworLyogU29tZSBkZWJ1ZyBzdHViIHRvIGNhdGNoIHNvbWUgb2YgdGhlIG9idmlvdXMgcmFjZXMgaW4gdGhlIFZUIGNvZGUgKi8KKyNpZiAxCisjZGVmaW5lIFdBUk5fQ09OU09MRV9VTkxPQ0tFRCgpCVdBUk5fT04oIWlzX2NvbnNvbGVfbG9ja2VkKCkgJiYgIW9vcHNfaW5fcHJvZ3Jlc3MpCisjZWxzZQorI2RlZmluZSBXQVJOX0NPTlNPTEVfVU5MT0NLRUQoKQorI2VuZGlmCisKKy8qIFZFU0EgQmxhbmtpbmcgTGV2ZWxzICovCisjZGVmaW5lIFZFU0FfTk9fQkxBTktJTkcgICAgICAgIDAKKyNkZWZpbmUgVkVTQV9WU1lOQ19TVVNQRU5EICAgICAgMQorI2RlZmluZSBWRVNBX0hTWU5DX1NVU1BFTkQgICAgICAyCisjZGVmaW5lIFZFU0FfUE9XRVJET1dOICAgICAgICAgIDMKKworI2VuZGlmIC8qIF9MSU5VWF9DT05TT0xFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29uc29sZV9zdHJ1Y3QuaCBiL2luY2x1ZGUvbGludXgvY29uc29sZV9zdHJ1Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjViZTkwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9jb25zb2xlX3N0cnVjdC5oCkBAIC0wLDAgKzEsMTIzIEBACisvKgorICogY29uc29sZV9zdHJ1Y3QuaAorICoKKyAqIERhdGEgc3RydWN0dXJlIGRlc2NyaWJpbmcgc2luZ2xlIHZpcnR1YWwgY29uc29sZSBleGNlcHQgZm9yIGRhdGEKKyAqIHVzZWQgYnkgdnQuYy4KKyAqCisgKiBGaWVsZHMgbWFya2VkIHdpdGggWyNdIG11c3QgYmUgc2V0IGJ5IHRoZSBsb3ctbGV2ZWwgZHJpdmVyLgorICogRmllbGRzIG1hcmtlZCB3aXRoIFshXSBjYW4gYmUgY2hhbmdlZCBieSB0aGUgbG93LWxldmVsIGRyaXZlcgorICogdG8gYWNoaWV2ZSBlZmZlY3RzIHN1Y2ggYXMgZmFzdCBzY3JvbGxpbmcgYnkgY2hhbmdpbmcgdGhlIG9yaWdpbi4KKyAqLworCitzdHJ1Y3QgdnRfc3RydWN0OworCisjZGVmaW5lIE5QQVIgMTYKKworc3RydWN0IHZjX2RhdGEgeworCXVuc2lnbmVkIHNob3J0CXZjX251bTsJCQkvKiBDb25zb2xlIG51bWJlciAqLworCXVuc2lnbmVkIGludAl2Y19jb2xzOwkJLyogWyNdIENvbnNvbGUgc2l6ZSAqLworCXVuc2lnbmVkIGludAl2Y19yb3dzOworCXVuc2lnbmVkIGludAl2Y19zaXplX3JvdzsJCS8qIEJ5dGVzIHBlciByb3cgKi8KKwl1bnNpZ25lZCBpbnQJdmNfc2Nhbl9saW5lczsJCS8qICMgb2Ygc2NhbiBsaW5lcyAqLworCXVuc2lnbmVkIGxvbmcJdmNfb3JpZ2luOwkJLyogWyFdIFN0YXJ0IG9mIHJlYWwgc2NyZWVuICovCisJdW5zaWduZWQgbG9uZwl2Y19zY3JfZW5kOwkJLyogWyFdIEVuZCBvZiByZWFsIHNjcmVlbiAqLworCXVuc2lnbmVkIGxvbmcJdmNfdmlzaWJsZV9vcmlnaW47CS8qIFshXSBUb3Agb2YgdmlzaWJsZSB3aW5kb3cgKi8KKwl1bnNpZ25lZCBpbnQJdmNfdG9wLCB2Y19ib3R0b207CS8qIFNjcm9sbGluZyByZWdpb24gKi8KKwljb25zdCBzdHJ1Y3QgY29uc3cgKnZjX3N3OworCXVuc2lnbmVkIHNob3J0CSp2Y19zY3JlZW5idWY7CQkvKiBJbi1tZW1vcnkgY2hhcmFjdGVyL2F0dHJpYnV0ZSBidWZmZXIgKi8KKwl1bnNpZ25lZCBpbnQJdmNfc2NyZWVuYnVmX3NpemU7CisJdW5zaWduZWQgY2hhcgl2Y19tb2RlOwkJLyogS0RfVEVYVCwgLi4uICovCisJLyogYXR0cmlidXRlcyBmb3IgYWxsIGNoYXJhY3RlcnMgb24gc2NyZWVuICovCisJdW5zaWduZWQgY2hhcgl2Y19hdHRyOwkJLyogQ3VycmVudCBhdHRyaWJ1dGVzICovCisJdW5zaWduZWQgY2hhcgl2Y19kZWZfY29sb3I7CQkvKiBEZWZhdWx0IGNvbG9ycyAqLworCXVuc2lnbmVkIGNoYXIJdmNfY29sb3I7CQkvKiBGb3JlZ3JvdW5kICYgYmFja2dyb3VuZCAqLworCXVuc2lnbmVkIGNoYXIJdmNfc19jb2xvcjsJCS8qIFNhdmVkIGZvcmVncm91bmQgJiBiYWNrZ3JvdW5kICovCisJdW5zaWduZWQgY2hhcgl2Y191bGNvbG9yOwkJLyogQ29sb3IgZm9yIHVuZGVybGluZSBtb2RlICovCisJdW5zaWduZWQgY2hhcgl2Y19oYWxmY29sb3I7CQkvKiBDb2xvciBmb3IgaGFsZiBpbnRlbnNpdHkgbW9kZSAqLworCS8qIGN1cnNvciAqLworCXVuc2lnbmVkIGludAl2Y19jdXJzb3JfdHlwZTsKKwl1bnNpZ25lZCBzaG9ydAl2Y19jb21wbGVtZW50X21hc2s7CS8qIFsjXSBYb3IgbWFzayBmb3IgbW91c2UgcG9pbnRlciAqLworCXVuc2lnbmVkIHNob3J0CXZjX3NfY29tcGxlbWVudF9tYXNrOwkvKiBTYXZlZCBtb3VzZSBwb2ludGVyIG1hc2sgKi8KKwl1bnNpZ25lZCBpbnQJdmNfeCwgdmNfeTsJCS8qIEN1cnNvciBwb3NpdGlvbiAqLworCXVuc2lnbmVkIGludAl2Y19zYXZlZF94LCB2Y19zYXZlZF95OworCXVuc2lnbmVkIGxvbmcJdmNfcG9zOwkJCS8qIEN1cnNvciBhZGRyZXNzICovCisJLyogZm9udHMgKi8JCisJdW5zaWduZWQgc2hvcnQJdmNfaGlfZm9udF9tYXNrOwkvKiBbI10gQXR0cmlidXRlIHNldCBmb3IgdXBwZXIgMjU2IGNoYXJzIG9mIGZvbnQgb3IgMCBpZiBub3Qgc3VwcG9ydGVkICovCisJc3RydWN0IGNvbnNvbGVfZm9udCB2Y19mb250OwkJLyogQ3VycmVudCBWQyBmb250IHNldCAqLworCXVuc2lnbmVkIHNob3J0CXZjX3ZpZGVvX2VyYXNlX2NoYXI7CS8qIEJhY2tncm91bmQgZXJhc2UgY2hhcmFjdGVyICovCisJLyogVlQgdGVybWluYWwgZGF0YSAqLworCXVuc2lnbmVkIGludAl2Y19zdGF0ZTsJCS8qIEVzY2FwZSBzZXF1ZW5jZSBwYXJzZXIgc3RhdGUgKi8KKwl1bnNpZ25lZCBpbnQJdmNfbnBhcix2Y19wYXJbTlBBUl07CS8qIFBhcmFtZXRlcnMgb2YgY3VycmVudCBlc2NhcGUgc2VxdWVuY2UgKi8KKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdmNfdHR5OwkJLyogVFRZIHdlIGFyZSBhdHRhY2hlZCB0byAqLworCS8qIGRhdGEgZm9yIG1hbnVhbCB2dCBzd2l0Y2hpbmcgKi8KKwlzdHJ1Y3QgdnRfbW9kZQl2dF9tb2RlOworCWludAkJdnRfcGlkOworCWludAkJdnRfbmV3dnQ7CisJd2FpdF9xdWV1ZV9oZWFkX3QgcGFzdGVfd2FpdDsKKwkvKiBtb2RlIGZsYWdzICovCisJdW5zaWduZWQgaW50CXZjX2NoYXJzZXQJOiAxOwkvKiBDaGFyYWN0ZXIgc2V0IEcwIC8gRzEgKi8KKwl1bnNpZ25lZCBpbnQJdmNfc19jaGFyc2V0CTogMTsJLyogU2F2ZWQgY2hhcmFjdGVyIHNldCAqLworCXVuc2lnbmVkIGludAl2Y19kaXNwX2N0cmwJOiAxOwkvKiBEaXNwbGF5IGNoYXJzIDwgMzI/ICovCisJdW5zaWduZWQgaW50CXZjX3RvZ2dsZV9tZXRhCTogMTsJLyogVG9nZ2xlIGhpZ2ggYml0PyAqLworCXVuc2lnbmVkIGludAl2Y19kZWNzY25tCTogMTsJLyogU2NyZWVuIE1vZGUgKi8KKwl1bnNpZ25lZCBpbnQJdmNfZGVjb20JOiAxOwkvKiBPcmlnaW4gTW9kZSAqLworCXVuc2lnbmVkIGludAl2Y19kZWNhd20JOiAxOwkvKiBBdXRvd3JhcCBNb2RlICovCisJdW5zaWduZWQgaW50CXZjX2RlY2NtCTogMTsJLyogQ3Vyc29yIFZpc2libGUgKi8KKwl1bnNpZ25lZCBpbnQJdmNfZGVjaW0JOiAxOwkvKiBJbnNlcnQgTW9kZSAqLworCXVuc2lnbmVkIGludAl2Y19kZWNjb2xtCTogMTsJLyogODAvMTMyIENvbHVtbiBNb2RlICovCisJLyogYXR0cmlidXRlIGZsYWdzICovCisJdW5zaWduZWQgaW50CXZjX2ludGVuc2l0eQk6IDI7CS8qIDA9aGFsZi1icmlnaHQsIDE9bm9ybWFsLCAyPWJvbGQgKi8KKwl1bnNpZ25lZCBpbnQJdmNfdW5kZXJsaW5lCTogMTsKKwl1bnNpZ25lZCBpbnQJdmNfYmxpbmsJOiAxOworCXVuc2lnbmVkIGludAl2Y19yZXZlcnNlCTogMTsKKwl1bnNpZ25lZCBpbnQJdmNfc19pbnRlbnNpdHkJOiAyOwkvKiBzYXZlZCByZW5kaXRpb24gKi8KKwl1bnNpZ25lZCBpbnQJdmNfc191bmRlcmxpbmUJOiAxOworCXVuc2lnbmVkIGludAl2Y19zX2JsaW5rCTogMTsKKwl1bnNpZ25lZCBpbnQJdmNfc19yZXZlcnNlCTogMTsKKwkvKiBtaXNjICovCisJdW5zaWduZWQgaW50CXZjX3F1ZXMJCTogMTsKKwl1bnNpZ25lZCBpbnQJdmNfbmVlZF93cmFwCTogMTsKKwl1bnNpZ25lZCBpbnQJdmNfY2FuX2RvX2NvbG9yCTogMTsKKwl1bnNpZ25lZCBpbnQJdmNfcmVwb3J0X21vdXNlIDogMjsKKwl1bnNpZ25lZCBpbnQJdmNfa21hbGxvY2VkCTogMTsKKwl1bnNpZ25lZCBjaGFyCXZjX3V0ZgkJOiAxOwkvKiBVbmljb2RlIFVURi04IGVuY29kaW5nICovCisJdW5zaWduZWQgY2hhcgl2Y191dGZfY291bnQ7CisJCSBpbnQJdmNfdXRmX2NoYXI7CisJdW5zaWduZWQgaW50CXZjX3RhYl9zdG9wWzhdOwkJLyogVGFiIHN0b3BzLiAyNTYgY29sdW1ucy4gKi8KKwl1bnNpZ25lZCBjaGFyICAgdmNfcGFsZXR0ZVsxNiozXTsgICAgICAgLyogQ29sb3VyIHBhbGV0dGUgZm9yIFZHQSsgKi8KKwl1bnNpZ25lZCBzaG9ydCAqIHZjX3RyYW5zbGF0ZTsKKwl1bnNpZ25lZCBjaGFyIAl2Y19HMF9jaGFyc2V0OworCXVuc2lnbmVkIGNoYXIgCXZjX0cxX2NoYXJzZXQ7CisJdW5zaWduZWQgY2hhciAJdmNfc2F2ZWRfRzA7CisJdW5zaWduZWQgY2hhciAJdmNfc2F2ZWRfRzE7CisJdW5zaWduZWQgaW50CXZjX2JlbGxfcGl0Y2g7CQkvKiBDb25zb2xlIGJlbGwgcGl0Y2ggKi8KKwl1bnNpZ25lZCBpbnQJdmNfYmVsbF9kdXJhdGlvbjsJLyogQ29uc29sZSBiZWxsIGR1cmF0aW9uICovCisJc3RydWN0IHZjX2RhdGEgKip2Y19kaXNwbGF5X2ZnOwkJLyogWyFdIFB0ciB0byB2YXIgaG9sZGluZyBmZyBjb25zb2xlIGZvciB0aGlzIGRpc3BsYXkgKi8KKwl1bnNpZ25lZCBsb25nCXZjX3VuaV9wYWdlZGlyOworCXVuc2lnbmVkIGxvbmcJKnZjX3VuaV9wYWdlZGlyX2xvYzsgIC8qIFshXSBMb2NhdGlvbiBvZiB1bmlfcGFnZWRpciB2YXJpYWJsZSBmb3IgdGhpcyBjb25zb2xlICovCisJLyogYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpcyBpbiB2dF9rZXJuLmggKi8KK307CisKK3N0cnVjdCB2YyB7CisJc3RydWN0IHZjX2RhdGEgKmQ7CisKKwkvKiBtaWdodCBhZGQgIHNjcm1lbSwgdnRfc3RydWN0LCBrYmQgIGF0IHNvbWUgdGltZSwKKwkgICB0byBoYXZlIGV2ZXJ5dGhpbmcgaW4gb25lIHBsYWNlIC0gdGhlIGRpc2FkdmFudGFnZQorCSAgIHdvdWxkIGJlIHRoYXQgdmNfY29ucyBldGMgY2FuIG5vIGxvbmdlciBiZSBzdGF0aWMgKi8KK307CisKK2V4dGVybiBzdHJ1Y3QgdmMgdmNfY29ucyBbTUFYX05SX0NPTlNPTEVTXTsKKworI2RlZmluZSBDVVJfREVGCQkwCisjZGVmaW5lIENVUl9OT05FCTEKKyNkZWZpbmUgQ1VSX1VOREVSTElORQkyCisjZGVmaW5lIENVUl9MT1dFUl9USElSRAkzCisjZGVmaW5lIENVUl9MT1dFUl9IQUxGCTQKKyNkZWZpbmUgQ1VSX1RXT19USElSRFMJNQorI2RlZmluZSBDVVJfQkxPQ0sJNgorI2RlZmluZSBDVVJfSFdNQVNLCTB4MGYKKyNkZWZpbmUgQ1VSX1NXTUFTSwkweGZmZjAKKworI2RlZmluZSBDVVJfREVGQVVMVCBDVVJfVU5ERVJMSU5FCisKKyNkZWZpbmUgQ09OX0lTX1ZJU0lCTEUoY29ucCkgKCpjb25wLT52Y19kaXNwbGF5X2ZnID09IGNvbnApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NvbnNvbGVtYXAuaCBiL2luY2x1ZGUvbGludXgvY29uc29sZW1hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1ODQyZWYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2NvbnNvbGVtYXAuaApAQCAtMCwwICsxLDE1IEBACisvKgorICogY29uc29sZW1hcC5oCisgKgorICogSW50ZXJmYWNlIGJldHdlZW4gY29uc29sZS5jLCBzZWxlY3Rpb24uYyAgYW5kIGNvbnNvbGVtYXAuYworICovCisjZGVmaW5lIExBVDFfTUFQIDAKKyNkZWZpbmUgR1JBRl9NQVAgMQorI2RlZmluZSBJQk1QQ19NQVAgMgorI2RlZmluZSBVU0VSX01BUCAzCisKK3N0cnVjdCB2Y19kYXRhOworCitleHRlcm4gdW5zaWduZWQgY2hhciBpbnZlcnNlX3RyYW5zbGF0ZShzdHJ1Y3QgdmNfZGF0YSAqY29ucCwgaW50IGdseXBoKTsKK2V4dGVybiB1bnNpZ25lZCBzaG9ydCAqc2V0X3RyYW5zbGF0ZShpbnQgbSwgc3RydWN0IHZjX2RhdGEgKnZjKTsKK2V4dGVybiBpbnQgY29udl91bmlfdG9fcGMoc3RydWN0IHZjX2RhdGEgKmNvbnAsIGxvbmcgdWNzKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY3B1LmggYi9pbmNsdWRlL2xpbnV4L2NwdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlMDI5OGUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2NwdS5oCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBpbmNsdWRlL2xpbnV4L2NwdS5oIC0gZ2VuZXJpYyBjcHUgZGVmaW5pdGlvbgorICoKKyAqIFRoaXMgaXMgbWFpbmx5IGZvciB0b3BvbG9naWNhbCByZXByZXNlbnRhdGlvbi4gV2UgZGVmaW5lIHRoZSAKKyAqIGJhc2ljICdzdHJ1Y3QgY3B1JyBoZXJlLCB3aGljaCBjYW4gYmUgZW1iZWRkZWQgaW4gcGVyLWFyY2ggCisgKiBkZWZpbml0aW9ucyBvZiBwcm9jZXNzb3JzLgorICoKKyAqIEJhc2ljIGhhbmRsaW5nIG9mIHRoZSBkZXZpY2VzIGlzIGRvbmUgaW4gZHJpdmVycy9iYXNlL2NwdS5jCisgKiBhbmQgc3lzdGVtIGRldmljZXMgYXJlIGhhbmRsZWQgaW4gZHJpdmVycy9iYXNlL3N5cy5jLiAKKyAqCisgKiBDUFVzIGFyZSBleHBvcnRlZCB2aWEgZHJpdmVyZnMgaW4gdGhlIGNsYXNzL2NwdS9kZXZpY2VzLworICogZGlyZWN0b3J5LiAKKyAqCisgKiBQZXItY3B1IGludGVyZmFjZXMgY2FuIGJlIGltcGxlbWVudGVkIHVzaW5nIGEgc3RydWN0IGRldmljZV9pbnRlcmZhY2UuIAorICogU2VlIHRoZSBmb2xsb3dpbmcgZm9yIGhvdyB0byBkbyB0aGlzOiAKKyAqIC0gZHJpdmVycy9iYXNlL2ludGYuYyAKKyAqIC0gRG9jdW1lbnRhdGlvbi9kcml2ZXItbW9kZWwvaW50ZXJmYWNlLnR4dAorICovCisjaWZuZGVmIF9MSU5VWF9DUFVfSF8KKyNkZWZpbmUgX0xJTlVYX0NQVV9IXworCisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvbm9kZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgorI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KKworc3RydWN0IGNwdSB7CisJaW50IG5vZGVfaWQ7CQkvKiBUaGUgbm9kZSB3aGljaCBjb250YWlucyB0aGUgQ1BVICovCisJaW50IG5vX2NvbnRyb2w7CQkvKiBTaG91bGQgdGhlIHN5c2ZzIGNvbnRyb2wgZmlsZSBiZSBjcmVhdGVkPyAqLworCXN0cnVjdCBzeXNfZGV2aWNlIHN5c2RldjsKK307CisKK2V4dGVybiBpbnQgcmVnaXN0ZXJfY3B1KHN0cnVjdCBjcHUgKiwgaW50LCBzdHJ1Y3Qgbm9kZSAqKTsKKyNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKK2V4dGVybiB2b2lkIHVucmVnaXN0ZXJfY3B1KHN0cnVjdCBjcHUgKiwgc3RydWN0IG5vZGUgKik7CisjZW5kaWYKK3N0cnVjdCBub3RpZmllcl9ibG9jazsKKworI2lmZGVmIENPTkZJR19TTVAKKy8qIE5lZWQgdG8ga25vdyBhYm91dCBDUFVzIGdvaW5nIHVwL2Rvd24/ICovCitleHRlcm4gaW50IHJlZ2lzdGVyX2NwdV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTsKK2V4dGVybiB2b2lkIHVucmVnaXN0ZXJfY3B1X25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpOworCitpbnQgY3B1X3VwKHVuc2lnbmVkIGludCBjcHUpOworCisjZWxzZQorCitzdGF0aWMgaW5saW5lIGludCByZWdpc3Rlcl9jcHVfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKK3sKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCB1bnJlZ2lzdGVyX2NwdV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKQoreworfQorCisjZW5kaWYgLyogQ09ORklHX1NNUCAqLworZXh0ZXJuIHN0cnVjdCBzeXNkZXZfY2xhc3MgY3B1X3N5c2Rldl9jbGFzczsKKworI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQorLyogU3RvcCBDUFVzIGdvaW5nIHVwIGFuZCBkb3duLiAqLworZXh0ZXJuIHN0cnVjdCBzZW1hcGhvcmUgY3B1Y29udHJvbDsKKyNkZWZpbmUgbG9ja19jcHVfaG90cGx1ZygpCWRvd24oJmNwdWNvbnRyb2wpCisjZGVmaW5lIHVubG9ja19jcHVfaG90cGx1ZygpCXVwKCZjcHVjb250cm9sKQorI2RlZmluZSBsb2NrX2NwdV9ob3RwbHVnX2ludGVycnVwdGlibGUoKSBkb3duX2ludGVycnVwdGlibGUoJmNwdWNvbnRyb2wpCisjZGVmaW5lIGhvdGNwdV9ub3RpZmllcihmbiwgcHJpKSB7CQkJCVwKKwlzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGZuIyNfbmIgPQkJCVwKKwkJeyAubm90aWZpZXJfY2FsbCA9IGZuLCAucHJpb3JpdHkgPSBwcmkgfTsJXAorCXJlZ2lzdGVyX2NwdV9ub3RpZmllcigmZm4jI19uYik7CQkJXAorfQoraW50IGNwdV9kb3duKHVuc2lnbmVkIGludCBjcHUpOworI2RlZmluZSBjcHVfaXNfb2ZmbGluZShjcHUpIHVubGlrZWx5KCFjcHVfb25saW5lKGNwdSkpCisjZWxzZQorI2RlZmluZSBsb2NrX2NwdV9ob3RwbHVnKCkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSB1bmxvY2tfY3B1X2hvdHBsdWcoKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGxvY2tfY3B1X2hvdHBsdWdfaW50ZXJydXB0aWJsZSgpIDAKKyNkZWZpbmUgaG90Y3B1X25vdGlmaWVyKGZuLCBwcmkpCisKKy8qIENQVXMgZG9uJ3QgZ28gb2ZmbGluZSBvbmNlIHRoZXkncmUgb25saW5lIHcvbyBDT05GSUdfSE9UUExVR19DUFUgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGNwdV9pc19vZmZsaW5lKGludCBjcHUpIHsgcmV0dXJuIDA7IH0KKyNlbmRpZgorCisjZW5kaWYgLyogX0xJTlVYX0NQVV9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jcHVmcmVxLmggYi9pbmNsdWRlL2xpbnV4L2NwdWZyZXEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTBlY2EzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9jcHVmcmVxLmgKQEAgLTAsMCArMSwzMjggQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9saW51eC9jcHVmcmVxLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFJ1c3NlbGwgS2luZworICogICAgICAgICAgICAoQykgMjAwMiAtIDIwMDMgRG9taW5payBCcm9kb3dza2kgPGxpbnV4QGJyb2RvLmRlPgorICogICAgICAgICAgICAKKyAqCisgKiAkSWQ6IGNwdWZyZXEuaCx2IDEuMzYgMjAwMy8wMS8yMCAxNzozMTo0OCBkYiBFeHAgJAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpZm5kZWYgX0xJTlVYX0NQVUZSRVFfSAorI2RlZmluZSBfTElOVVhfQ1BVRlJFUV9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgorI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9rb2JqZWN0Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgorCisjZGVmaW5lIENQVUZSRVFfTkFNRV9MRU4gMTYKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgIENQVUZSRVEgTk9USUZJRVIgSU5URVJGQUNFICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbnQgY3B1ZnJlcV9yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBpbnQgbGlzdCk7CitpbnQgY3B1ZnJlcV91bnJlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGludCBsaXN0KTsKKworI2RlZmluZSBDUFVGUkVRX1RSQU5TSVRJT05fTk9USUZJRVIJKDApCisjZGVmaW5lIENQVUZSRVFfUE9MSUNZX05PVElGSUVSCQkoMSkKKworCisvKiBpZiAoY3B1ZnJlcV9kcml2ZXItPnRhcmdldCkgZXhpc3RzLCB0aGUgLT5nb3Zlcm5vciBkZWNpZGVzIHdoYXQgZnJlcXVlbmN5CisgKiB3aXRoaW4gdGhlIGxpbWl0cyBpcyB1c2VkLiBJZiAoY3B1ZnJlcV9kcml2ZXItPnNldHBvbGljeT4gZXhpc3RzLCB0aGVzZQorICogdHdvIGdlbmVyaWMgcG9saWNpZXMgYXJlIGF2YWlsYWJsZToKKyAqLworCisjZGVmaW5lIENQVUZSRVFfUE9MSUNZX1BPV0VSU0FWRQkoMSkKKyNkZWZpbmUgQ1BVRlJFUV9QT0xJQ1lfUEVSRk9STUFOQ0UJKDIpCisKKy8qIEZyZXF1ZW5jeSB2YWx1ZXMgaGVyZSBhcmUgQ1BVIGtIeiBzbyB0aGF0IGhhcmR3YXJlIHdoaWNoIGRvZXNuJ3QgcnVuIAorICogd2l0aCBzb21lIGZyZXF1ZW5jaWVzIGNhbiBjb21wbGFpbiB3aXRob3V0IGhhdmluZyB0byBndWVzcyB3aGF0IHBlciAKKyAqIGNlbnQgLyBwZXIgbWlsbGUgbWVhbnMuIAorICogTWF4aW11bSB0cmFuc2l0aW9uIGxhdGVuY3kgaXMgaW4gbWljcm9zZWNvbmRzIC0gaWYgaXQncyB1bmtub3duLAorICogQ1BVRlJFUV9FVEVSTkFMIHNoYWxsIGJlIHVzZWQuCisgKi8KKworc3RydWN0IGNwdWZyZXFfZ292ZXJub3I7CisKKyNkZWZpbmUgQ1BVRlJFUV9FVEVSTkFMCQkJKC0xKQorc3RydWN0IGNwdWZyZXFfY3B1aW5mbyB7CisJdW5zaWduZWQgaW50CQltYXhfZnJlcTsKKwl1bnNpZ25lZCBpbnQJCW1pbl9mcmVxOworCXVuc2lnbmVkIGludAkJdHJhbnNpdGlvbl9sYXRlbmN5OyAvKiBpbiAxMF4oLTkpIHMgPSBuYW5vc2Vjb25kcyAqLworfTsKKworc3RydWN0IGNwdWZyZXFfcmVhbF9wb2xpY3kgeworCXVuc2lnbmVkIGludAkJbWluOyAgICAvKiBpbiBrSHogKi8KKwl1bnNpZ25lZCBpbnQJCW1heDsgICAgLyogaW4ga0h6ICovCisgICAgICAgIHVuc2lnbmVkIGludAkJcG9saWN5OyAvKiBzZWUgYWJvdmUgKi8KKwlzdHJ1Y3QgY3B1ZnJlcV9nb3Zlcm5vcgkqZ292ZXJub3I7IC8qIHNlZSBiZWxvdyAqLworfTsKKworc3RydWN0IGNwdWZyZXFfcG9saWN5IHsKKwljcHVtYXNrX3QJCWNwdXM7CS8qIGFmZmVjdGVkIENQVXMgKi8KKwl1bnNpZ25lZCBpbnQJCWNwdTsgICAgLyogY3B1IG5yIG9mIHJlZ2lzdGVyZWQgQ1BVICovCisJc3RydWN0IGNwdWZyZXFfY3B1aW5mbwljcHVpbmZvOy8qIHNlZSBhYm92ZSAqLworCisJdW5zaWduZWQgaW50CQltaW47ICAgIC8qIGluIGtIeiAqLworCXVuc2lnbmVkIGludAkJbWF4OyAgICAvKiBpbiBrSHogKi8KKwl1bnNpZ25lZCBpbnQJCWN1cjsgICAgLyogaW4ga0h6LCBvbmx5IG5lZWRlZCBpZiBjcHVmcmVxCisJCQkJCSAqIGdvdmVybm9ycyBhcmUgdXNlZCAqLworICAgICAgICB1bnNpZ25lZCBpbnQJCXBvbGljeTsgLyogc2VlIGFib3ZlICovCisJc3RydWN0IGNwdWZyZXFfZ292ZXJub3IJKmdvdmVybm9yOyAvKiBzZWUgYmVsb3cgKi8KKworIAlzdHJ1Y3Qgc2VtYXBob3JlCWxvY2s7ICAgLyogQ1BVIC0+c2V0cG9saWN5IG9yIC0+dGFyZ2V0IG1heQorCQkJCQkgICBvbmx5IGJlIGNhbGxlZCBvbmNlIGEgdGltZSAqLworCisJc3RydWN0IHdvcmtfc3RydWN0CXVwZGF0ZTsgLyogaWYgdXBkYXRlX3BvbGljeSgpIG5lZWRzIHRvIGJlCisJCQkJCSAqIGNhbGxlZCwgYnV0IHlvdSdyZSBpbiBJUlEgY29udGV4dCAqLworCisJc3RydWN0IGNwdWZyZXFfcmVhbF9wb2xpY3kJdXNlcl9wb2xpY3k7CisKKwlzdHJ1Y3Qga29iamVjdAkJa29iajsKKwlzdHJ1Y3QgY29tcGxldGlvbglrb2JqX3VucmVnaXN0ZXI7Cit9OworCisjZGVmaW5lIENQVUZSRVFfQURKVVNUCQkoMCkKKyNkZWZpbmUgQ1BVRlJFUV9JTkNPTVBBVElCTEUJKDEpCisjZGVmaW5lIENQVUZSRVFfTk9USUZZCQkoMikKKworCisvKioqKioqKioqKioqKioqKioqKiogY3B1ZnJlcSB0cmFuc2l0aW9uIG5vdGlmaWVycyAqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIENQVUZSRVFfUFJFQ0hBTkdFCSgwKQorI2RlZmluZSBDUFVGUkVRX1BPU1RDSEFOR0UJKDEpCisjZGVmaW5lIENQVUZSRVFfUkVTVU1FQ0hBTkdFCSg4KQorCitzdHJ1Y3QgY3B1ZnJlcV9mcmVxcyB7CisJdW5zaWduZWQgaW50IGNwdTsJLyogY3B1IG5yICovCisJdW5zaWduZWQgaW50IG9sZDsKKwl1bnNpZ25lZCBpbnQgbmV3OworCXU4IGZsYWdzOwkJLyogZmxhZ3Mgb2YgY3B1ZnJlcV9kcml2ZXIsIHNlZSBiZWxvdy4gKi8KK307CisKKworLyoqCisgKiBjcHVmcmVxX3NjYWxlIC0gIm9sZCAqIG11bHQgLyBkaXYiIGNhbGN1bGF0aW9uIGZvciBsYXJnZSB2YWx1ZXMgKDMyLWJpdC1hcmNoIHNhZmUpCisgKiBAb2xkOiAgIG9sZCB2YWx1ZQorICogQGRpdjogICBkaXZpc29yCisgKiBAbXVsdDogIG11bHRpcGxpZXIKKyAqCisgKgorICogICAgbmV3ID0gb2xkICogbXVsdCAvIGRpdgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY3B1ZnJlcV9zY2FsZSh1bnNpZ25lZCBsb25nIG9sZCwgdV9pbnQgZGl2LCB1X2ludCBtdWx0KQoreworI2lmIEJJVFNfUEVSX0xPTkcgPT0gMzIKKworCXU2NCByZXN1bHQgPSAoKHU2NCkgb2xkKSAqICgodTY0KSBtdWx0KTsKKwlkb19kaXYocmVzdWx0LCBkaXYpOworCXJldHVybiAodW5zaWduZWQgbG9uZykgcmVzdWx0OworCisjZWxpZiBCSVRTX1BFUl9MT05HID09IDY0CisKKwl1bnNpZ25lZCBsb25nIHJlc3VsdCA9IG9sZCAqICgodTY0KSBtdWx0KTsKKwlyZXN1bHQgLz0gZGl2OworCXJldHVybiByZXN1bHQ7CisKKyNlbmRpZgorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgIENQVUZSRVEgR09WRVJOT1JTICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBDUFVGUkVRX0dPVl9TVEFSVCAgMQorI2RlZmluZSBDUFVGUkVRX0dPVl9TVE9QICAgMgorI2RlZmluZSBDUFVGUkVRX0dPVl9MSU1JVFMgMworCitzdHJ1Y3QgY3B1ZnJlcV9nb3Zlcm5vciB7CisJY2hhcgluYW1lW0NQVUZSRVFfTkFNRV9MRU5dOworCWludCAJKCpnb3Zlcm5vcikJKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LAorCQkJCSB1bnNpZ25lZCBpbnQgZXZlbnQpOworCXN0cnVjdCBsaXN0X2hlYWQJZ292ZXJub3JfbGlzdDsKKwlzdHJ1Y3QgbW9kdWxlCQkqb3duZXI7Cit9OworCisvKiBwYXNzIGEgdGFyZ2V0IHRvIHRoZSBjcHVmcmVxIGRyaXZlciAKKyAqLworZXh0ZXJuIGludCBjcHVmcmVxX2RyaXZlcl90YXJnZXQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksCisJCQkJIHVuc2lnbmVkIGludCB0YXJnZXRfZnJlcSwKKwkJCQkgdW5zaWduZWQgaW50IHJlbGF0aW9uKTsKK2V4dGVybiBpbnQgX19jcHVmcmVxX2RyaXZlcl90YXJnZXQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksCisJCQkJICAgdW5zaWduZWQgaW50IHRhcmdldF9mcmVxLAorCQkJCSAgIHVuc2lnbmVkIGludCByZWxhdGlvbik7CisKKworLyogcGFzcyBhbiBldmVudCB0byB0aGUgY3B1ZnJlcSBnb3Zlcm5vciAqLworaW50IGNwdWZyZXFfZ292ZXJub3IodW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgaW50IGV2ZW50KTsKKworaW50IGNwdWZyZXFfcmVnaXN0ZXJfZ292ZXJub3Ioc3RydWN0IGNwdWZyZXFfZ292ZXJub3IgKmdvdmVybm9yKTsKK3ZvaWQgY3B1ZnJlcV91bnJlZ2lzdGVyX2dvdmVybm9yKHN0cnVjdCBjcHVmcmVxX2dvdmVybm9yICpnb3Zlcm5vcik7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgQ1BVRlJFUSBEUklWRVIgSU5URVJGQUNFICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBDUFVGUkVRX1JFTEFUSU9OX0wgMCAgLyogbG93ZXN0IGZyZXF1ZW5jeSBhdCBvciBhYm92ZSB0YXJnZXQgKi8KKyNkZWZpbmUgQ1BVRlJFUV9SRUxBVElPTl9IIDEgIC8qIGhpZ2hlc3QgZnJlcXVlbmN5IGJlbG93IG9yIGF0IHRhcmdldCAqLworCitzdHJ1Y3QgZnJlcV9hdHRyOworCitzdHJ1Y3QgY3B1ZnJlcV9kcml2ZXIgeworCXN0cnVjdCBtb2R1bGUgICAgICAgICAgICpvd25lcjsKKwljaGFyCQkJbmFtZVtDUFVGUkVRX05BTUVfTEVOXTsKKwl1OAkJCWZsYWdzOworCisJLyogbmVlZGVkIGJ5IGFsbCBkcml2ZXJzICovCisJaW50CSgqaW5pdCkJCShzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSk7CisJaW50CSgqdmVyaWZ5KQkoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpOworCisJLyogZGVmaW5lIG9uZSBvdXQgb2YgdHdvICovCisJaW50CSgqc2V0cG9saWN5KQkoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpOworCWludAkoKnRhcmdldCkJKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LAorCQkJCSB1bnNpZ25lZCBpbnQgdGFyZ2V0X2ZyZXEsCisJCQkJIHVuc2lnbmVkIGludCByZWxhdGlvbik7CisKKwkvKiBzaG91bGQgYmUgZGVmaW5lZCwgaWYgcG9zc2libGUgKi8KKwl1bnNpZ25lZCBpbnQJKCpnZXQpCSh1bnNpZ25lZCBpbnQgY3B1KTsKKworCS8qIG9wdGlvbmFsICovCisJaW50CSgqZXhpdCkJCShzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSk7CisJaW50CSgqcmVzdW1lKQkoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpOworCXN0cnVjdCBmcmVxX2F0dHIJKiphdHRyOworfTsKKworLyogZmxhZ3MgKi8KKworI2RlZmluZSBDUFVGUkVRX1NUSUNLWQkJMHgwMQkvKiB0aGUgZHJpdmVyIGlzbid0IHJlbW92ZWQgZXZlbiBpZiAKKwkJCQkJICogYWxsIC0+aW5pdCgpIGNhbGxzIGZhaWxlZCAqLworI2RlZmluZSBDUFVGUkVRX0NPTlNUX0xPT1BTIAkweDAyCS8qIGxvb3BzX3Blcl9qaWZmeSBvciBvdGhlciBrZXJuZWwKKwkJCQkJICogImNvbnN0YW50cyIgYXJlbid0IGFmZmVjdGVkIGJ5CisJCQkJCSAqIGZyZXF1ZW5jeSB0cmFuc2l0aW9ucyAqLworCisKK2ludCBjcHVmcmVxX3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgY3B1ZnJlcV9kcml2ZXIgKmRyaXZlcl9kYXRhKTsKK2ludCBjcHVmcmVxX3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBjcHVmcmVxX2RyaXZlciAqZHJpdmVyX2RhdGEpOworCisKK3ZvaWQgY3B1ZnJlcV9ub3RpZnlfdHJhbnNpdGlvbihzdHJ1Y3QgY3B1ZnJlcV9mcmVxcyAqZnJlcXMsIHVuc2lnbmVkIGludCBzdGF0ZSk7CisKKworc3RhdGljIGlubGluZSB2b2lkIGNwdWZyZXFfdmVyaWZ5X3dpdGhpbl9saW1pdHMoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksIHVuc2lnbmVkIGludCBtaW4sIHVuc2lnbmVkIGludCBtYXgpIAoreworCWlmIChwb2xpY3ktPm1pbiA8IG1pbikKKwkJcG9saWN5LT5taW4gPSBtaW47CisJaWYgKHBvbGljeS0+bWF4IDwgbWluKQorCQlwb2xpY3ktPm1heCA9IG1pbjsKKwlpZiAocG9saWN5LT5taW4gPiBtYXgpCisJCXBvbGljeS0+bWluID0gbWF4OworCWlmIChwb2xpY3ktPm1heCA+IG1heCkKKwkJcG9saWN5LT5tYXggPSBtYXg7CisJaWYgKHBvbGljeS0+bWluID4gcG9saWN5LT5tYXgpCisJCXBvbGljeS0+bWluID0gcG9saWN5LT5tYXg7CisJcmV0dXJuOworfQorCitzdHJ1Y3QgZnJlcV9hdHRyIHsKKwlzdHJ1Y3QgYXR0cmlidXRlIGF0dHI7CisJc3NpemVfdCAoKnNob3cpKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqLCBjaGFyICopOworCXNzaXplX3QgKCpzdG9yZSkoc3RydWN0IGNwdWZyZXFfcG9saWN5ICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90IGNvdW50KTsKK307CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICBDUFVGUkVRIDIuNi4gSU5URVJGQUNFICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBjcHVmcmVxX3NldF9wb2xpY3koc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpOworaW50IGNwdWZyZXFfZ2V0X3BvbGljeShzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwgdW5zaWduZWQgaW50IGNwdSk7CitpbnQgY3B1ZnJlcV91cGRhdGVfcG9saWN5KHVuc2lnbmVkIGludCBjcHUpOworCisvKiBxdWVyeSB0aGUgY3VycmVudCBDUFUgZnJlcXVlbmN5IChpbiBrSHopLiBJZiB6ZXJvLCBjcHVmcmVxIGNvdWxkbid0IGRldGVjdCBpdCAqLwordW5zaWduZWQgaW50IGNwdWZyZXFfZ2V0KHVuc2lnbmVkIGludCBjcHUpOworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICBDUFVGUkVRIERFRkFVTFQgR09WRVJOT1IgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmZGVmIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9QRVJGT1JNQU5DRQorZXh0ZXJuIHN0cnVjdCBjcHVmcmVxX2dvdmVybm9yIGNwdWZyZXFfZ292X3BlcmZvcm1hbmNlOworI2RlZmluZSBDUFVGUkVRX0RFRkFVTFRfR09WRVJOT1IJJmNwdWZyZXFfZ292X3BlcmZvcm1hbmNlCisjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9VU0VSU1BBQ0UpCitleHRlcm4gc3RydWN0IGNwdWZyZXFfZ292ZXJub3IgY3B1ZnJlcV9nb3ZfdXNlcnNwYWNlOworI2RlZmluZSBDUFVGUkVRX0RFRkFVTFRfR09WRVJOT1IJJmNwdWZyZXFfZ292X3VzZXJzcGFjZQorI2VuZGlmCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICBGUkVRVUVOQ1kgVEFCTEUgSEVMUEVSUyAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBDUFVGUkVRX0VOVFJZX0lOVkFMSUQgfjAKKyNkZWZpbmUgQ1BVRlJFUV9UQUJMRV9FTkQgICAgIH4xCisKK3N0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSB7CisJdW5zaWduZWQgaW50CWluZGV4OyAgICAgLyogYW55ICovCisJdW5zaWduZWQgaW50CWZyZXF1ZW5jeTsgLyoga0h6IC0gZG9lc24ndCBuZWVkIHRvIGJlIGluIGFzY2VuZGluZworCQkJCSAgICAqIG9yZGVyICovCit9OworCitpbnQgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfY3B1aW5mbyhzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwKKwkJCQkgICAgc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICp0YWJsZSk7CisKK2ludCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV92ZXJpZnkoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksCisJCQkJICAgc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICp0YWJsZSk7CisKK2ludCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV90YXJnZXQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksCisJCQkJICAgc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICp0YWJsZSwKKwkJCQkgICB1bnNpZ25lZCBpbnQgdGFyZ2V0X2ZyZXEsCisJCQkJICAgdW5zaWduZWQgaW50IHJlbGF0aW9uLAorCQkJCSAgIHVuc2lnbmVkIGludCAqaW5kZXgpOworCisvKiB0aGUgZm9sbG93aW5nIDMgZnVudGlvbnMgYXJlIGZvciBjcHVmcmVxIGNvcmUgdXNlIG9ubHkgKi8KK3N0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqY3B1ZnJlcV9mcmVxdWVuY3lfZ2V0X3RhYmxlKHVuc2lnbmVkIGludCBjcHUpOworc3RydWN0IGNwdWZyZXFfcG9saWN5ICpjcHVmcmVxX2NwdV9nZXQodW5zaWduZWQgaW50IGNwdSk7Cit2b2lkICAgY3B1ZnJlcV9jcHVfcHV0IChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKmRhdGEpOworCisvKiB0aGUgZm9sbG93aW5nIGFyZSByZWFsbHkgcmVhbGx5IG9wdGlvbmFsICovCitleHRlcm4gc3RydWN0IGZyZXFfYXR0ciBjcHVmcmVxX2ZyZXFfYXR0cl9zY2FsaW5nX2F2YWlsYWJsZV9mcmVxczsKKwordm9pZCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV9nZXRfYXR0cihzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKnRhYmxlLCAKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgY3B1KTsKKwordm9pZCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV9wdXRfYXR0cih1bnNpZ25lZCBpbnQgY3B1KTsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgIFVOSUZJRUQgREVCVUcgSEVMUEVSUyAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIENQVUZSRVFfREVCVUdfQ09SRQkxCisjZGVmaW5lIENQVUZSRVFfREVCVUdfRFJJVkVSCTIKKyNkZWZpbmUgQ1BVRlJFUV9ERUJVR19HT1ZFUk5PUgk0CisKKyNpZmRlZiBDT05GSUdfQ1BVX0ZSRVFfREVCVUcKKworZXh0ZXJuIHZvaWQgY3B1ZnJlcV9kZWJ1Z19wcmludGsodW5zaWduZWQgaW50IHR5cGUsIGNvbnN0IGNoYXIgKnByZWZpeCwgCisJCQkJIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKKworI2Vsc2UKKworI2RlZmluZSBjcHVmcmVxX2RlYnVnX3ByaW50ayhtc2cuLi4pIGRvIHsgfSB3aGlsZSgwKQorCisjZW5kaWYgLyogQ09ORklHX0NQVV9GUkVRX0RFQlVHICovCisKKyNlbmRpZiAvKiBfTElOVVhfQ1BVRlJFUV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NwdW1hc2suaCBiL2luY2x1ZGUvbGludXgvY3B1bWFzay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxNTgyNmYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2NwdW1hc2suaApAQCAtMCwwICsxLDM5NSBAQAorI2lmbmRlZiBfX0xJTlVYX0NQVU1BU0tfSAorI2RlZmluZSBfX0xJTlVYX0NQVU1BU0tfSAorCisvKgorICogQ3B1bWFza3MgcHJvdmlkZSBhIGJpdG1hcCBzdWl0YWJsZSBmb3IgcmVwcmVzZW50aW5nIHRoZQorICogc2V0IG9mIENQVSdzIGluIGEgc3lzdGVtLCBvbmUgYml0IHBvc2l0aW9uIHBlciBDUFUgbnVtYmVyLgorICoKKyAqIFNlZSBkZXRhaWxlZCBjb21tZW50cyBpbiB0aGUgZmlsZSBsaW51eC9iaXRtYXAuaCBkZXNjcmliaW5nIHRoZQorICogZGF0YSB0eXBlIG9uIHdoaWNoIHRoZXNlIGNwdW1hc2tzIGFyZSBiYXNlZC4KKyAqCisgKiBGb3IgZGV0YWlscyBvZiBjcHVtYXNrX3NjbnByaW50ZigpIGFuZCBjcHVtYXNrX3BhcnNlKCksCisgKiBzZWUgYml0bWFwX3NjbnByaW50ZigpIGFuZCBiaXRtYXBfcGFyc2UoKSBpbiBsaWIvYml0bWFwLmMuCisgKiBGb3IgZGV0YWlscyBvZiBjcHVsaXN0X3NjbnByaW50ZigpIGFuZCBjcHVsaXN0X3BhcnNlKCksIHNlZQorICogYml0bWFwX3Njbmxpc3RwcmludGYoKSBhbmQgYml0bWFwX3BhcnNlbGlzdCgpLCBhbHNvIGluIGJpdG1hcC5jLgorICoKKyAqIFRoZSBhdmFpbGFibGUgY3B1bWFzayBvcGVyYXRpb25zIGFyZToKKyAqCisgKiB2b2lkIGNwdV9zZXQoY3B1LCBtYXNrKQkJdHVybiBvbiBiaXQgJ2NwdScgaW4gbWFzaworICogdm9pZCBjcHVfY2xlYXIoY3B1LCBtYXNrKQkJdHVybiBvZmYgYml0ICdjcHUnIGluIG1hc2sKKyAqIHZvaWQgY3B1c19zZXRhbGwobWFzaykJCXNldCBhbGwgYml0cworICogdm9pZCBjcHVzX2NsZWFyKG1hc2spCQljbGVhciBhbGwgYml0cworICogaW50IGNwdV9pc3NldChjcHUsIG1hc2spCQl0cnVlIGlmZiBiaXQgJ2NwdScgc2V0IGluIG1hc2sKKyAqIGludCBjcHVfdGVzdF9hbmRfc2V0KGNwdSwgbWFzaykJdGVzdCBhbmQgc2V0IGJpdCAnY3B1JyBpbiBtYXNrCisgKgorICogdm9pZCBjcHVzX2FuZChkc3QsIHNyYzEsIHNyYzIpCWRzdCA9IHNyYzEgJiBzcmMyICBbaW50ZXJzZWN0aW9uXQorICogdm9pZCBjcHVzX29yKGRzdCwgc3JjMSwgc3JjMikJZHN0ID0gc3JjMSB8IHNyYzIgIFt1bmlvbl0KKyAqIHZvaWQgY3B1c194b3IoZHN0LCBzcmMxLCBzcmMyKQlkc3QgPSBzcmMxIF4gc3JjMgorICogdm9pZCBjcHVzX2FuZG5vdChkc3QsIHNyYzEsIHNyYzIpCWRzdCA9IHNyYzEgJiB+c3JjMgorICogdm9pZCBjcHVzX2NvbXBsZW1lbnQoZHN0LCBzcmMpCWRzdCA9IH5zcmMKKyAqCisgKiBpbnQgY3B1c19lcXVhbChtYXNrMSwgbWFzazIpCQlEb2VzIG1hc2sxID09IG1hc2syPworICogaW50IGNwdXNfaW50ZXJzZWN0cyhtYXNrMSwgbWFzazIpCURvIG1hc2sxIGFuZCBtYXNrMiBpbnRlcnNlY3Q/CisgKiBpbnQgY3B1c19zdWJzZXQobWFzazEsIG1hc2syKQlJcyBtYXNrMSBhIHN1YnNldCBvZiBtYXNrMj8KKyAqIGludCBjcHVzX2VtcHR5KG1hc2spCQkJSXMgbWFzayBlbXB0eSAobm8gYml0cyBzZXRzKT8KKyAqIGludCBjcHVzX2Z1bGwobWFzaykJCQlJcyBtYXNrIGZ1bGwgKGFsbCBiaXRzIHNldHMpPworICogaW50IGNwdXNfd2VpZ2h0KG1hc2spCQlIYW1taW5nIHdlaWdoIC0gbnVtYmVyIG9mIHNldCBiaXRzCisgKgorICogdm9pZCBjcHVzX3NoaWZ0X3JpZ2h0KGRzdCwgc3JjLCBuKQlTaGlmdCByaWdodAorICogdm9pZCBjcHVzX3NoaWZ0X2xlZnQoZHN0LCBzcmMsIG4pCVNoaWZ0IGxlZnQKKyAqCisgKiBpbnQgZmlyc3RfY3B1KG1hc2spCQkJTnVtYmVyIGxvd2VzdCBzZXQgYml0LCBvciBOUl9DUFVTCisgKiBpbnQgbmV4dF9jcHUoY3B1LCBtYXNrKQkJTmV4dCBjcHUgcGFzdCAnY3B1Jywgb3IgTlJfQ1BVUworICoKKyAqIGNwdW1hc2tfdCBjcHVtYXNrX29mX2NwdShjcHUpCVJldHVybiBjcHVtYXNrIHdpdGggYml0ICdjcHUnIHNldAorICogQ1BVX01BU0tfQUxMCQkJCUluaXRpYWxpemVyIC0gYWxsIGJpdHMgc2V0CisgKiBDUFVfTUFTS19OT05FCQkJSW5pdGlhbGl6ZXIgLSBubyBiaXRzIHNldAorICogdW5zaWduZWQgbG9uZyAqY3B1c19hZGRyKG1hc2spCUFycmF5IG9mIHVuc2lnbmVkIGxvbmcncyBpbiBtYXNrCisgKgorICogaW50IGNwdW1hc2tfc2NucHJpbnRmKGJ1ZiwgbGVuLCBtYXNrKSBGb3JtYXQgY3B1bWFzayBmb3IgcHJpbnRpbmcKKyAqIGludCBjcHVtYXNrX3BhcnNlKHVidWYsIHVsZW4sIG1hc2spCVBhcnNlIGFzY2lpIHN0cmluZyBhcyBjcHVtYXNrCisgKiBpbnQgY3B1bGlzdF9zY25wcmludGYoYnVmLCBsZW4sIG1hc2spIEZvcm1hdCBjcHVtYXNrIGFzIGxpc3QgZm9yIHByaW50aW5nCisgKiBpbnQgY3B1bGlzdF9wYXJzZShidWYsIG1hcCkJCVBhcnNlIGFzY2lpIHN0cmluZyBhcyBjcHVsaXN0CisgKgorICogZm9yX2VhY2hfY3B1X21hc2soY3B1LCBtYXNrKQkJZm9yLWxvb3AgY3B1IG92ZXIgbWFzaworICoKKyAqIGludCBudW1fb25saW5lX2NwdXMoKQkJTnVtYmVyIG9mIG9ubGluZSBDUFVzCisgKiBpbnQgbnVtX3Bvc3NpYmxlX2NwdXMoKQkJTnVtYmVyIG9mIGFsbCBwb3NzaWJsZSBDUFVzCisgKiBpbnQgbnVtX3ByZXNlbnRfY3B1cygpCQlOdW1iZXIgb2YgcHJlc2VudCBDUFVzCisgKgorICogaW50IGNwdV9vbmxpbmUoY3B1KQkJCUlzIHNvbWUgY3B1IG9ubGluZT8KKyAqIGludCBjcHVfcG9zc2libGUoY3B1KQkJSXMgc29tZSBjcHUgcG9zc2libGU/CisgKiBpbnQgY3B1X3ByZXNlbnQoY3B1KQkJCUlzIHNvbWUgY3B1IHByZXNlbnQgKGNhbiBzY2hlZHVsZSk/CisgKgorICogaW50IGFueV9vbmxpbmVfY3B1KG1hc2spCQlGaXJzdCBvbmxpbmUgY3B1IGluIG1hc2sKKyAqCisgKiBmb3JfZWFjaF9jcHUoY3B1KQkJCWZvci1sb29wIGNwdSBvdmVyIGNwdV9wb3NzaWJsZV9tYXAKKyAqIGZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQkJZm9yLWxvb3AgY3B1IG92ZXIgY3B1X29ubGluZV9tYXAKKyAqIGZvcl9lYWNoX3ByZXNlbnRfY3B1KGNwdSkJCWZvci1sb29wIGNwdSBvdmVyIGNwdV9wcmVzZW50X21hcAorICoKKyAqIFN1YnRsZXR5OgorICogMSkgVGhlICd0eXBlLWNoZWNrZWQnIGZvcm0gb2YgY3B1X2lzc2V0KCkgY2F1c2VzIGdjYyAoMy4zLjIsIGFueXdheSkKKyAqICAgIHRvIGdlbmVyYXRlIHNsaWdodGx5IHdvcnNlIGNvZGUuICBOb3RlIGZvciBleGFtcGxlIHRoZSBhZGRpdGlvbmFsCisgKiAgICA0MCBsaW5lcyBvZiBhc3NlbWJseSBjb2RlIGNvbXBpbGluZyB0aGUgImZvciBlYWNoIHBvc3NpYmxlIGNwdSIKKyAqICAgIGxvb3BzIGJ1cmllZCBpbiB0aGUgZGlza19zdGF0X3JlYWQoKSBtYWNyb3MgY2FsbHMgd2hlbiBjb21waWxpbmcKKyAqICAgIGRyaXZlcnMvYmxvY2svZ2VuaGQuYyAoYXJjaCBpMzg2LCBDT05GSUdfU01QPXkpLiAgU28gdXNlIGEgc2ltcGxlCisgKiAgICBvbmUtbGluZSAjZGVmaW5lIGZvciBjcHVfaXNzZXQoKSwgaW5zdGVhZCBvZiB3cmFwcGluZyBhbiBpbmxpbmUKKyAqICAgIGluc2lkZSBhIG1hY3JvLCB0aGUgd2F5IHdlIGRvIHRoZSBvdGhlciBjYWxscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG1hcC5oPgorI2luY2x1ZGUgPGFzbS9idWcuaD4KKwordHlwZWRlZiBzdHJ1Y3QgeyBERUNMQVJFX0JJVE1BUChiaXRzLCBOUl9DUFVTKTsgfSBjcHVtYXNrX3Q7CitleHRlcm4gY3B1bWFza190IF91bnVzZWRfY3B1bWFza19hcmdfOworCisjZGVmaW5lIGNwdV9zZXQoY3B1LCBkc3QpIF9fY3B1X3NldCgoY3B1KSwgJihkc3QpKQorc3RhdGljIGlubGluZSB2b2lkIF9fY3B1X3NldChpbnQgY3B1LCB2b2xhdGlsZSBjcHVtYXNrX3QgKmRzdHApCit7CisJc2V0X2JpdChjcHUsIGRzdHAtPmJpdHMpOworfQorCisjZGVmaW5lIGNwdV9jbGVhcihjcHUsIGRzdCkgX19jcHVfY2xlYXIoKGNwdSksICYoZHN0KSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2NwdV9jbGVhcihpbnQgY3B1LCB2b2xhdGlsZSBjcHVtYXNrX3QgKmRzdHApCit7CisJY2xlYXJfYml0KGNwdSwgZHN0cC0+Yml0cyk7Cit9CisKKyNkZWZpbmUgY3B1c19zZXRhbGwoZHN0KSBfX2NwdXNfc2V0YWxsKCYoZHN0KSwgTlJfQ1BVUykKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2NwdXNfc2V0YWxsKGNwdW1hc2tfdCAqZHN0cCwgaW50IG5iaXRzKQoreworCWJpdG1hcF9maWxsKGRzdHAtPmJpdHMsIG5iaXRzKTsKK30KKworI2RlZmluZSBjcHVzX2NsZWFyKGRzdCkgX19jcHVzX2NsZWFyKCYoZHN0KSwgTlJfQ1BVUykKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2NwdXNfY2xlYXIoY3B1bWFza190ICpkc3RwLCBpbnQgbmJpdHMpCit7CisJYml0bWFwX3plcm8oZHN0cC0+Yml0cywgbmJpdHMpOworfQorCisvKiBObyBzdGF0aWMgaW5saW5lIHR5cGUgY2hlY2tpbmcgLSBzZWUgU3VidGxldHkgKDEpIGFib3ZlLiAqLworI2RlZmluZSBjcHVfaXNzZXQoY3B1LCBjcHVtYXNrKSB0ZXN0X2JpdCgoY3B1KSwgKGNwdW1hc2spLmJpdHMpCisKKyNkZWZpbmUgY3B1X3Rlc3RfYW5kX3NldChjcHUsIGNwdW1hc2spIF9fY3B1X3Rlc3RfYW5kX3NldCgoY3B1KSwgJihjcHVtYXNrKSkKK3N0YXRpYyBpbmxpbmUgaW50IF9fY3B1X3Rlc3RfYW5kX3NldChpbnQgY3B1LCBjcHVtYXNrX3QgKmFkZHIpCit7CisJcmV0dXJuIHRlc3RfYW5kX3NldF9iaXQoY3B1LCBhZGRyLT5iaXRzKTsKK30KKworI2RlZmluZSBjcHVzX2FuZChkc3QsIHNyYzEsIHNyYzIpIF9fY3B1c19hbmQoJihkc3QpLCAmKHNyYzEpLCAmKHNyYzIpLCBOUl9DUFVTKQorc3RhdGljIGlubGluZSB2b2lkIF9fY3B1c19hbmQoY3B1bWFza190ICpkc3RwLCBjb25zdCBjcHVtYXNrX3QgKnNyYzFwLAorCQkJCQljb25zdCBjcHVtYXNrX3QgKnNyYzJwLCBpbnQgbmJpdHMpCit7CisJYml0bWFwX2FuZChkc3RwLT5iaXRzLCBzcmMxcC0+Yml0cywgc3JjMnAtPmJpdHMsIG5iaXRzKTsKK30KKworI2RlZmluZSBjcHVzX29yKGRzdCwgc3JjMSwgc3JjMikgX19jcHVzX29yKCYoZHN0KSwgJihzcmMxKSwgJihzcmMyKSwgTlJfQ1BVUykKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2NwdXNfb3IoY3B1bWFza190ICpkc3RwLCBjb25zdCBjcHVtYXNrX3QgKnNyYzFwLAorCQkJCQljb25zdCBjcHVtYXNrX3QgKnNyYzJwLCBpbnQgbmJpdHMpCit7CisJYml0bWFwX29yKGRzdHAtPmJpdHMsIHNyYzFwLT5iaXRzLCBzcmMycC0+Yml0cywgbmJpdHMpOworfQorCisjZGVmaW5lIGNwdXNfeG9yKGRzdCwgc3JjMSwgc3JjMikgX19jcHVzX3hvcigmKGRzdCksICYoc3JjMSksICYoc3JjMiksIE5SX0NQVVMpCitzdGF0aWMgaW5saW5lIHZvaWQgX19jcHVzX3hvcihjcHVtYXNrX3QgKmRzdHAsIGNvbnN0IGNwdW1hc2tfdCAqc3JjMXAsCisJCQkJCWNvbnN0IGNwdW1hc2tfdCAqc3JjMnAsIGludCBuYml0cykKK3sKKwliaXRtYXBfeG9yKGRzdHAtPmJpdHMsIHNyYzFwLT5iaXRzLCBzcmMycC0+Yml0cywgbmJpdHMpOworfQorCisjZGVmaW5lIGNwdXNfYW5kbm90KGRzdCwgc3JjMSwgc3JjMikgXAorCQkJCV9fY3B1c19hbmRub3QoJihkc3QpLCAmKHNyYzEpLCAmKHNyYzIpLCBOUl9DUFVTKQorc3RhdGljIGlubGluZSB2b2lkIF9fY3B1c19hbmRub3QoY3B1bWFza190ICpkc3RwLCBjb25zdCBjcHVtYXNrX3QgKnNyYzFwLAorCQkJCQljb25zdCBjcHVtYXNrX3QgKnNyYzJwLCBpbnQgbmJpdHMpCit7CisJYml0bWFwX2FuZG5vdChkc3RwLT5iaXRzLCBzcmMxcC0+Yml0cywgc3JjMnAtPmJpdHMsIG5iaXRzKTsKK30KKworI2RlZmluZSBjcHVzX2NvbXBsZW1lbnQoZHN0LCBzcmMpIF9fY3B1c19jb21wbGVtZW50KCYoZHN0KSwgJihzcmMpLCBOUl9DUFVTKQorc3RhdGljIGlubGluZSB2b2lkIF9fY3B1c19jb21wbGVtZW50KGNwdW1hc2tfdCAqZHN0cCwKKwkJCQkJY29uc3QgY3B1bWFza190ICpzcmNwLCBpbnQgbmJpdHMpCit7CisJYml0bWFwX2NvbXBsZW1lbnQoZHN0cC0+Yml0cywgc3JjcC0+Yml0cywgbmJpdHMpOworfQorCisjZGVmaW5lIGNwdXNfZXF1YWwoc3JjMSwgc3JjMikgX19jcHVzX2VxdWFsKCYoc3JjMSksICYoc3JjMiksIE5SX0NQVVMpCitzdGF0aWMgaW5saW5lIGludCBfX2NwdXNfZXF1YWwoY29uc3QgY3B1bWFza190ICpzcmMxcCwKKwkJCQkJY29uc3QgY3B1bWFza190ICpzcmMycCwgaW50IG5iaXRzKQoreworCXJldHVybiBiaXRtYXBfZXF1YWwoc3JjMXAtPmJpdHMsIHNyYzJwLT5iaXRzLCBuYml0cyk7Cit9CisKKyNkZWZpbmUgY3B1c19pbnRlcnNlY3RzKHNyYzEsIHNyYzIpIF9fY3B1c19pbnRlcnNlY3RzKCYoc3JjMSksICYoc3JjMiksIE5SX0NQVVMpCitzdGF0aWMgaW5saW5lIGludCBfX2NwdXNfaW50ZXJzZWN0cyhjb25zdCBjcHVtYXNrX3QgKnNyYzFwLAorCQkJCQljb25zdCBjcHVtYXNrX3QgKnNyYzJwLCBpbnQgbmJpdHMpCit7CisJcmV0dXJuIGJpdG1hcF9pbnRlcnNlY3RzKHNyYzFwLT5iaXRzLCBzcmMycC0+Yml0cywgbmJpdHMpOworfQorCisjZGVmaW5lIGNwdXNfc3Vic2V0KHNyYzEsIHNyYzIpIF9fY3B1c19zdWJzZXQoJihzcmMxKSwgJihzcmMyKSwgTlJfQ1BVUykKK3N0YXRpYyBpbmxpbmUgaW50IF9fY3B1c19zdWJzZXQoY29uc3QgY3B1bWFza190ICpzcmMxcCwKKwkJCQkJY29uc3QgY3B1bWFza190ICpzcmMycCwgaW50IG5iaXRzKQoreworCXJldHVybiBiaXRtYXBfc3Vic2V0KHNyYzFwLT5iaXRzLCBzcmMycC0+Yml0cywgbmJpdHMpOworfQorCisjZGVmaW5lIGNwdXNfZW1wdHkoc3JjKSBfX2NwdXNfZW1wdHkoJihzcmMpLCBOUl9DUFVTKQorc3RhdGljIGlubGluZSBpbnQgX19jcHVzX2VtcHR5KGNvbnN0IGNwdW1hc2tfdCAqc3JjcCwgaW50IG5iaXRzKQoreworCXJldHVybiBiaXRtYXBfZW1wdHkoc3JjcC0+Yml0cywgbmJpdHMpOworfQorCisjZGVmaW5lIGNwdXNfZnVsbChjcHVtYXNrKSBfX2NwdXNfZnVsbCgmKGNwdW1hc2spLCBOUl9DUFVTKQorc3RhdGljIGlubGluZSBpbnQgX19jcHVzX2Z1bGwoY29uc3QgY3B1bWFza190ICpzcmNwLCBpbnQgbmJpdHMpCit7CisJcmV0dXJuIGJpdG1hcF9mdWxsKHNyY3AtPmJpdHMsIG5iaXRzKTsKK30KKworI2RlZmluZSBjcHVzX3dlaWdodChjcHVtYXNrKSBfX2NwdXNfd2VpZ2h0KCYoY3B1bWFzayksIE5SX0NQVVMpCitzdGF0aWMgaW5saW5lIGludCBfX2NwdXNfd2VpZ2h0KGNvbnN0IGNwdW1hc2tfdCAqc3JjcCwgaW50IG5iaXRzKQoreworCXJldHVybiBiaXRtYXBfd2VpZ2h0KHNyY3AtPmJpdHMsIG5iaXRzKTsKK30KKworI2RlZmluZSBjcHVzX3NoaWZ0X3JpZ2h0KGRzdCwgc3JjLCBuKSBcCisJCQlfX2NwdXNfc2hpZnRfcmlnaHQoJihkc3QpLCAmKHNyYyksIChuKSwgTlJfQ1BVUykKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2NwdXNfc2hpZnRfcmlnaHQoY3B1bWFza190ICpkc3RwLAorCQkJCQljb25zdCBjcHVtYXNrX3QgKnNyY3AsIGludCBuLCBpbnQgbmJpdHMpCit7CisJYml0bWFwX3NoaWZ0X3JpZ2h0KGRzdHAtPmJpdHMsIHNyY3AtPmJpdHMsIG4sIG5iaXRzKTsKK30KKworI2RlZmluZSBjcHVzX3NoaWZ0X2xlZnQoZHN0LCBzcmMsIG4pIFwKKwkJCV9fY3B1c19zaGlmdF9sZWZ0KCYoZHN0KSwgJihzcmMpLCAobiksIE5SX0NQVVMpCitzdGF0aWMgaW5saW5lIHZvaWQgX19jcHVzX3NoaWZ0X2xlZnQoY3B1bWFza190ICpkc3RwLAorCQkJCQljb25zdCBjcHVtYXNrX3QgKnNyY3AsIGludCBuLCBpbnQgbmJpdHMpCit7CisJYml0bWFwX3NoaWZ0X2xlZnQoZHN0cC0+Yml0cywgc3JjcC0+Yml0cywgbiwgbmJpdHMpOworfQorCisjZGVmaW5lIGZpcnN0X2NwdShzcmMpIF9fZmlyc3RfY3B1KCYoc3JjKSwgTlJfQ1BVUykKK3N0YXRpYyBpbmxpbmUgaW50IF9fZmlyc3RfY3B1KGNvbnN0IGNwdW1hc2tfdCAqc3JjcCwgaW50IG5iaXRzKQoreworCXJldHVybiBtaW5fdChpbnQsIG5iaXRzLCBmaW5kX2ZpcnN0X2JpdChzcmNwLT5iaXRzLCBuYml0cykpOworfQorCisjZGVmaW5lIG5leHRfY3B1KG4sIHNyYykgX19uZXh0X2NwdSgobiksICYoc3JjKSwgTlJfQ1BVUykKK3N0YXRpYyBpbmxpbmUgaW50IF9fbmV4dF9jcHUoaW50IG4sIGNvbnN0IGNwdW1hc2tfdCAqc3JjcCwgaW50IG5iaXRzKQoreworCXJldHVybiBtaW5fdChpbnQsIG5iaXRzLCBmaW5kX25leHRfYml0KHNyY3AtPmJpdHMsIG5iaXRzLCBuKzEpKTsKK30KKworI2RlZmluZSBjcHVtYXNrX29mX2NwdShjcHUpCQkJCQkJXAorKHsJCQkJCQkJCQlcCisJdHlwZW9mKF91bnVzZWRfY3B1bWFza19hcmdfKSBtOwkJCQkJXAorCWlmIChzaXplb2YobSkgPT0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSB7CQkJXAorCQltLmJpdHNbMF0gPSAxVUw8PChjcHUpOwkJCQkJXAorCX0gZWxzZSB7CQkJCQkJCVwKKwkJY3B1c19jbGVhcihtKTsJCQkJCQlcCisJCWNwdV9zZXQoKGNwdSksIG0pOwkJCQkJXAorCX0JCQkJCQkJCVwKKwltOwkJCQkJCQkJXAorfSkKKworI2RlZmluZSBDUFVfTUFTS19MQVNUX1dPUkQgQklUTUFQX0xBU1RfV09SRF9NQVNLKE5SX0NQVVMpCisKKyNpZiBOUl9DUFVTIDw9IEJJVFNfUEVSX0xPTkcKKworI2RlZmluZSBDUFVfTUFTS19BTEwJCQkJCQkJXAorKGNwdW1hc2tfdCkgeyB7CQkJCQkJCQlcCisJW0JJVFNfVE9fTE9OR1MoTlJfQ1BVUyktMV0gPSBDUFVfTUFTS19MQVNUX1dPUkQJCQlcCit9IH0KKworI2Vsc2UKKworI2RlZmluZSBDUFVfTUFTS19BTEwJCQkJCQkJXAorKGNwdW1hc2tfdCkgeyB7CQkJCQkJCQlcCisJWzAgLi4uIEJJVFNfVE9fTE9OR1MoTlJfQ1BVUyktMl0gPSB+MFVMLAkJCVwKKwlbQklUU19UT19MT05HUyhOUl9DUFVTKS0xXSA9IENQVV9NQVNLX0xBU1RfV09SRAkJCVwKK30gfQorCisjZW5kaWYKKworI2RlZmluZSBDUFVfTUFTS19OT05FCQkJCQkJCVwKKyhjcHVtYXNrX3QpIHsgewkJCQkJCQkJXAorCVswIC4uLiBCSVRTX1RPX0xPTkdTKE5SX0NQVVMpLTFdID0gIDBVTAkJCQlcCit9IH0KKworI2RlZmluZSBDUFVfTUFTS19DUFUwCQkJCQkJCVwKKyhjcHVtYXNrX3QpIHsgewkJCQkJCQkJXAorCVswXSA9ICAxVUwJCQkJCQkJXAorfSB9CisKKyNkZWZpbmUgY3B1c19hZGRyKHNyYykgKChzcmMpLmJpdHMpCisKKyNkZWZpbmUgY3B1bWFza19zY25wcmludGYoYnVmLCBsZW4sIHNyYykgXAorCQkJX19jcHVtYXNrX3NjbnByaW50ZigoYnVmKSwgKGxlbiksICYoc3JjKSwgTlJfQ1BVUykKK3N0YXRpYyBpbmxpbmUgaW50IF9fY3B1bWFza19zY25wcmludGYoY2hhciAqYnVmLCBpbnQgbGVuLAorCQkJCQljb25zdCBjcHVtYXNrX3QgKnNyY3AsIGludCBuYml0cykKK3sKKwlyZXR1cm4gYml0bWFwX3NjbnByaW50ZihidWYsIGxlbiwgc3JjcC0+Yml0cywgbmJpdHMpOworfQorCisjZGVmaW5lIGNwdW1hc2tfcGFyc2UodWJ1ZiwgdWxlbiwgZHN0KSBcCisJCQlfX2NwdW1hc2tfcGFyc2UoKHVidWYpLCAodWxlbiksICYoZHN0KSwgTlJfQ1BVUykKK3N0YXRpYyBpbmxpbmUgaW50IF9fY3B1bWFza19wYXJzZShjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBpbnQgbGVuLAorCQkJCQljcHVtYXNrX3QgKmRzdHAsIGludCBuYml0cykKK3sKKwlyZXR1cm4gYml0bWFwX3BhcnNlKGJ1ZiwgbGVuLCBkc3RwLT5iaXRzLCBuYml0cyk7Cit9CisKKyNkZWZpbmUgY3B1bGlzdF9zY25wcmludGYoYnVmLCBsZW4sIHNyYykgXAorCQkJX19jcHVsaXN0X3NjbnByaW50ZigoYnVmKSwgKGxlbiksICYoc3JjKSwgTlJfQ1BVUykKK3N0YXRpYyBpbmxpbmUgaW50IF9fY3B1bGlzdF9zY25wcmludGYoY2hhciAqYnVmLCBpbnQgbGVuLAorCQkJCQljb25zdCBjcHVtYXNrX3QgKnNyY3AsIGludCBuYml0cykKK3sKKwlyZXR1cm4gYml0bWFwX3Njbmxpc3RwcmludGYoYnVmLCBsZW4sIHNyY3AtPmJpdHMsIG5iaXRzKTsKK30KKworI2RlZmluZSBjcHVsaXN0X3BhcnNlKGJ1ZiwgZHN0KSBfX2NwdWxpc3RfcGFyc2UoKGJ1ZiksICYoZHN0KSwgTlJfQ1BVUykKK3N0YXRpYyBpbmxpbmUgaW50IF9fY3B1bGlzdF9wYXJzZShjb25zdCBjaGFyICpidWYsIGNwdW1hc2tfdCAqZHN0cCwgaW50IG5iaXRzKQoreworCXJldHVybiBiaXRtYXBfcGFyc2VsaXN0KGJ1ZiwgZHN0cC0+Yml0cywgbmJpdHMpOworfQorCisjaWYgTlJfQ1BVUyA+IDEKKyNkZWZpbmUgZm9yX2VhY2hfY3B1X21hc2soY3B1LCBtYXNrKQkJXAorCWZvciAoKGNwdSkgPSBmaXJzdF9jcHUobWFzayk7CQlcCisJCShjcHUpIDwgTlJfQ1BVUzsJCVwKKwkJKGNwdSkgPSBuZXh0X2NwdSgoY3B1KSwgKG1hc2spKSkKKyNlbHNlIC8qIE5SX0NQVVMgPT0gMSAqLworI2RlZmluZSBmb3JfZWFjaF9jcHVfbWFzayhjcHUsIG1hc2spIGZvciAoKGNwdSkgPSAwOyAoY3B1KSA8IDE7IChjcHUpKyspCisjZW5kaWYgLyogTlJfQ1BVUyAqLworCisvKgorICogVGhlIGZvbGxvd2luZyBwYXJ0aWN1bGFyIHN5c3RlbSBjcHVtYXNrcyBhbmQgb3BlcmF0aW9ucyBtYW5hZ2UKKyAqIHBvc3NpYmxlLCBwcmVzZW50IGFuZCBvbmxpbmUgY3B1cy4gIEVhY2ggb2YgdGhlbSBpcyBhIGZpeGVkIHNpemUKKyAqIGJpdG1hcCBvZiBzaXplIE5SX0NQVVMuCisgKgorICogICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKKyAqICAgICBjcHVfcG9zc2libGVfbWFwIC0gYWxsIE5SX0NQVVMgYml0cyBzZXQKKyAqICAgICBjcHVfcHJlc2VudF9tYXAgIC0gaGFzIGJpdCAnY3B1JyBzZXQgaWZmIGNwdSBpcyBwb3B1bGF0ZWQKKyAqICAgICBjcHVfb25saW5lX21hcCAgIC0gaGFzIGJpdCAnY3B1JyBzZXQgaWZmIGNwdSBhdmFpbGFibGUgdG8gc2NoZWR1bGVyCisgKiAgI2Vsc2UKKyAqICAgICBjcHVfcG9zc2libGVfbWFwIC0gaGFzIGJpdCAnY3B1JyBzZXQgaWZmIGNwdSBpcyBwb3B1bGF0ZWQKKyAqICAgICBjcHVfcHJlc2VudF9tYXAgIC0gY29weSBvZiBjcHVfcG9zc2libGVfbWFwCisgKiAgICAgY3B1X29ubGluZV9tYXAgICAtIGhhcyBiaXQgJ2NwdScgc2V0IGlmZiBjcHUgYXZhaWxhYmxlIHRvIHNjaGVkdWxlcgorICogICNlbmRpZgorICoKKyAqICBJbiBlaXRoZXIgY2FzZSwgTlJfQ1BVUyBpcyBmaXhlZCBhdCBjb21waWxlIHRpbWUsIGFzIHRoZSBzdGF0aWMKKyAqICBzaXplIG9mIHRoZXNlIGJpdG1hcHMuICBUaGUgY3B1X3Bvc3NpYmxlX21hcCBpcyBmaXhlZCBhdCBib290CisgKiAgdGltZSwgYXMgdGhlIHNldCBvZiBDUFUgaWQncyB0aGF0IGl0IGlzIHBvc3NpYmxlIG1pZ2h0IGV2ZXIKKyAqICBiZSBwbHVnZ2VkIGluIGF0IGFueXRpbWUgZHVyaW5nIHRoZSBsaWZlIG9mIHRoYXQgc3lzdGVtIGJvb3QuCisgKiAgVGhlIGNwdV9wcmVzZW50X21hcCBpcyBkeW5hbWljKCopLCByZXByZXNlbnRpbmcgd2hpY2ggQ1BVcworICogIGFyZSBjdXJyZW50bHkgcGx1Z2dlZCBpbi4gIEFuZCBjcHVfb25saW5lX21hcCBpcyB0aGUgZHluYW1pYworICogIHN1YnNldCBvZiBjcHVfcHJlc2VudF9tYXAsIGluZGljYXRpbmcgdGhvc2UgQ1BVcyBhdmFpbGFibGUKKyAqICBmb3Igc2NoZWR1bGluZy4KKyAqCisgKiAgSWYgSE9UUExVRyBpcyBlbmFibGVkLCB0aGVuIGNwdV9wb3NzaWJsZV9tYXAgaXMgZm9yY2VkIHRvIGhhdmUKKyAqICBhbGwgTlJfQ1BVUyBiaXRzIHNldCwgb3RoZXJ3aXNlIGl0IGlzIGp1c3QgdGhlIHNldCBvZiBDUFVzIHRoYXQKKyAqICBBQ1BJIHJlcG9ydHMgcHJlc2VudCBhdCBib290LgorICoKKyAqICBJZiBIT1RQTFVHIGlzIGVuYWJsZWQsIHRoZW4gY3B1X3ByZXNlbnRfbWFwIHZhcmllcyBkeW5hbWljYWxseSwKKyAqICBkZXBlbmRpbmcgb24gd2hhdCBBQ1BJIHJlcG9ydHMgYXMgY3VycmVudGx5IHBsdWdnZWQgaW4sIG90aGVyd2lzZQorICogIGNwdV9wcmVzZW50X21hcCBpcyBqdXN0IGEgY29weSBvZiBjcHVfcG9zc2libGVfbWFwLgorICoKKyAqICAoKikgV2VsbCwgY3B1X3ByZXNlbnRfbWFwIGlzIGR5bmFtaWMgaW4gdGhlIGhvdHBsdWcgY2FzZS4gIElmIG5vdAorICogICAgICBob3RwbHVnLCBpdCdzIGEgY29weSBvZiBjcHVfcG9zc2libGVfbWFwLCBoZW5jZSBmaXhlZCBhdCBib290LgorICoKKyAqIFN1YnRsZXRpZXM6CisgKiAxKSBVUCBhcmNoJ3MgKE5SX0NQVVMgPT0gMSwgQ09ORklHX1NNUCBub3QgZGVmaW5lZCkgaGFyZGNvZGUKKyAqICAgIGFzc3VtcHRpb24gdGhhdCB0aGVpciBzaW5nbGUgQ1BVIGlzIG9ubGluZS4gIFRoZSBVUAorICogICAgY3B1X3tvbmxpbmUscG9zc2libGUscHJlc2VudH1fbWFwcyBhcmUgcGxhY2Vib3MuICBDaGFuZ2luZyB0aGVtCisgKiAgICB3aWxsIGhhdmUgbm8gdXNlZnVsIGFmZmVjdCBvbiB0aGUgZm9sbG93aW5nIG51bV8qX2NwdXMoKQorICogICAgYW5kIGNwdV8qKCkgbWFjcm9zIGluIHRoZSBVUCBjYXNlLiAgVGhpcyB1Z2xpbmVzcyBpcyBhIFVQCisgKiAgICBvcHRpbWl6YXRpb24gLSBkb24ndCB3YXN0ZSBhbnkgaW5zdHJ1Y3Rpb25zIG9yIG1lbW9yeSByZWZlcmVuY2VzCisgKiAgICBhc2tpbmcgaWYgeW91J3JlIG9ubGluZSBvciBob3cgbWFueSBDUFVzIHRoZXJlIGFyZSBpZiB0aGVyZSBpcworICogICAgb25seSBvbmUgQ1BVLgorICogMikgTW9zdCBTTVAgYXJjaCdzICNkZWZpbmUgc29tZSBvZiB0aGVzZSBtYXBzIHRvIGJlIHNvbWUKKyAqICAgIG90aGVyIG1hcCBzcGVjaWZpYyB0byB0aGF0IGFyY2guICBUaGVyZWZvcmUsIHRoZSBmb2xsb3dpbmcKKyAqICAgIG11c3QgYmUgI2RlZmluZSBtYWNyb3MsIG5vdCBpbmxpbmVzLiAgVG8gc2VlIHdoeSwgZXhhbWluZQorICogICAgdGhlIGFzc2VtYmx5IGNvZGUgcHJvZHVjZWQgYnkgdGhlIGZvbGxvd2luZy4gIE5vdGUgdGhhdAorICogICAgc2V0MSgpIHdyaXRlcyBwaHlzX3hfbWFwLCBidXQgc2V0MigpIHdyaXRlcyB4X21hcDoKKyAqICAgICAgICBpbnQgeF9tYXAsIHBoeXNfeF9tYXA7CisgKiAgICAgICAgI2RlZmluZSBzZXQxKGEpIHhfbWFwID0gYQorICogICAgICAgIGlubGluZSB2b2lkIHNldDIoaW50IGEpIHsgeF9tYXAgPSBhOyB9CisgKiAgICAgICAgI2RlZmluZSB4X21hcCBwaHlzX3hfbWFwCisgKiAgICAgICAgbWFpbigpeyBzZXQxKDMpOyBzZXQyKDUpOyB9CisgKi8KKworZXh0ZXJuIGNwdW1hc2tfdCBjcHVfcG9zc2libGVfbWFwOworZXh0ZXJuIGNwdW1hc2tfdCBjcHVfb25saW5lX21hcDsKK2V4dGVybiBjcHVtYXNrX3QgY3B1X3ByZXNlbnRfbWFwOworCisjaWYgTlJfQ1BVUyA+IDEKKyNkZWZpbmUgbnVtX29ubGluZV9jcHVzKCkJY3B1c193ZWlnaHQoY3B1X29ubGluZV9tYXApCisjZGVmaW5lIG51bV9wb3NzaWJsZV9jcHVzKCkJY3B1c193ZWlnaHQoY3B1X3Bvc3NpYmxlX21hcCkKKyNkZWZpbmUgbnVtX3ByZXNlbnRfY3B1cygpCWNwdXNfd2VpZ2h0KGNwdV9wcmVzZW50X21hcCkKKyNkZWZpbmUgY3B1X29ubGluZShjcHUpCQljcHVfaXNzZXQoKGNwdSksIGNwdV9vbmxpbmVfbWFwKQorI2RlZmluZSBjcHVfcG9zc2libGUoY3B1KQljcHVfaXNzZXQoKGNwdSksIGNwdV9wb3NzaWJsZV9tYXApCisjZGVmaW5lIGNwdV9wcmVzZW50KGNwdSkJY3B1X2lzc2V0KChjcHUpLCBjcHVfcHJlc2VudF9tYXApCisjZWxzZQorI2RlZmluZSBudW1fb25saW5lX2NwdXMoKQkxCisjZGVmaW5lIG51bV9wb3NzaWJsZV9jcHVzKCkJMQorI2RlZmluZSBudW1fcHJlc2VudF9jcHVzKCkJMQorI2RlZmluZSBjcHVfb25saW5lKGNwdSkJCSgoY3B1KSA9PSAwKQorI2RlZmluZSBjcHVfcG9zc2libGUoY3B1KQkoKGNwdSkgPT0gMCkKKyNkZWZpbmUgY3B1X3ByZXNlbnQoY3B1KQkoKGNwdSkgPT0gMCkKKyNlbmRpZgorCisjZGVmaW5lIGFueV9vbmxpbmVfY3B1KG1hc2spCQkJXAorKHsJCQkJCQlcCisJaW50IGNwdTsJCQkJXAorCWZvcl9lYWNoX2NwdV9tYXNrKGNwdSwgKG1hc2spKQkJXAorCQlpZiAoY3B1X29ubGluZShjcHUpKQkJXAorCQkJYnJlYWs7CQkJXAorCWNwdTsJCQkJCVwKK30pCisKKyNkZWZpbmUgZm9yX2VhY2hfY3B1KGNwdSkJICBmb3JfZWFjaF9jcHVfbWFzaygoY3B1KSwgY3B1X3Bvc3NpYmxlX21hcCkKKyNkZWZpbmUgZm9yX2VhY2hfb25saW5lX2NwdShjcHUpICBmb3JfZWFjaF9jcHVfbWFzaygoY3B1KSwgY3B1X29ubGluZV9tYXApCisjZGVmaW5lIGZvcl9lYWNoX3ByZXNlbnRfY3B1KGNwdSkgZm9yX2VhY2hfY3B1X21hc2soKGNwdSksIGNwdV9wcmVzZW50X21hcCkKKworI2VuZGlmIC8qIF9fTElOVVhfQ1BVTUFTS19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NwdXNldC5oIGIvaW5jbHVkZS9saW51eC9jcHVzZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDlhNTAwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9jcHVzZXQuaApAQCAtMCwwICsxLDY0IEBACisjaWZuZGVmIF9MSU5VWF9DUFVTRVRfSAorI2RlZmluZSBfTElOVVhfQ1BVU0VUX0gKKy8qCisgKiAgY3B1c2V0IGludGVyZmFjZQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMgQlVMTCBTQQorICogIENvcHlyaWdodCAoQykgMjAwNCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KKyNpbmNsdWRlIDxsaW51eC9ub2RlbWFzay5oPgorCisjaWZkZWYgQ09ORklHX0NQVVNFVFMKKworZXh0ZXJuIGludCBjcHVzZXRfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIGNwdXNldF9pbml0X3NtcCh2b2lkKTsKK2V4dGVybiB2b2lkIGNwdXNldF9mb3JrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7CitleHRlcm4gdm9pZCBjcHVzZXRfZXhpdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApOworZXh0ZXJuIGNvbnN0IGNwdW1hc2tfdCBjcHVzZXRfY3B1c19hbGxvd2VkKGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7Cit2b2lkIGNwdXNldF9pbml0X2N1cnJlbnRfbWVtc19hbGxvd2VkKHZvaWQpOwordm9pZCBjcHVzZXRfdXBkYXRlX2N1cnJlbnRfbWVtc19hbGxvd2VkKHZvaWQpOwordm9pZCBjcHVzZXRfcmVzdHJpY3RfdG9fbWVtc19hbGxvd2VkKHVuc2lnbmVkIGxvbmcgKm5vZGVzKTsKK2ludCBjcHVzZXRfem9uZWxpc3RfdmFsaWRfbWVtc19hbGxvd2VkKHN0cnVjdCB6b25lbGlzdCAqemwpOworaW50IGNwdXNldF96b25lX2FsbG93ZWQoc3RydWN0IHpvbmUgKnopOworZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19jcHVzZXRfb3BlcmF0aW9uczsKK2V4dGVybiBjaGFyICpjcHVzZXRfdGFza19zdGF0dXNfYWxsb3dlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGNoYXIgKmJ1ZmZlcik7CisKKyNlbHNlIC8qICFDT05GSUdfQ1BVU0VUUyAqLworCitzdGF0aWMgaW5saW5lIGludCBjcHVzZXRfaW5pdCh2b2lkKSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgY3B1c2V0X2luaXRfc21wKHZvaWQpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgY3B1c2V0X2Zvcmsoc3RydWN0IHRhc2tfc3RydWN0ICpwKSB7fQorc3RhdGljIGlubGluZSB2b2lkIGNwdXNldF9leGl0KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkge30KKworc3RhdGljIGlubGluZSBjcHVtYXNrX3QgY3B1c2V0X2NwdXNfYWxsb3dlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCit7CisJcmV0dXJuIGNwdV9wb3NzaWJsZV9tYXA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjcHVzZXRfaW5pdF9jdXJyZW50X21lbXNfYWxsb3dlZCh2b2lkKSB7fQorc3RhdGljIGlubGluZSB2b2lkIGNwdXNldF91cGRhdGVfY3VycmVudF9tZW1zX2FsbG93ZWQodm9pZCkge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBjcHVzZXRfcmVzdHJpY3RfdG9fbWVtc19hbGxvd2VkKHVuc2lnbmVkIGxvbmcgKm5vZGVzKSB7fQorCitzdGF0aWMgaW5saW5lIGludCBjcHVzZXRfem9uZWxpc3RfdmFsaWRfbWVtc19hbGxvd2VkKHN0cnVjdCB6b25lbGlzdCAqemwpCit7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNwdXNldF96b25lX2FsbG93ZWQoc3RydWN0IHpvbmUgKnopCit7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgY2hhciAqY3B1c2V0X3Rhc2tfc3RhdHVzX2FsbG93ZWQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAorCQkJCQkJCWNoYXIgKmJ1ZmZlcikKK3sKKwlyZXR1cm4gYnVmZmVyOworfQorCisjZW5kaWYgLyogIUNPTkZJR19DUFVTRVRTICovCisKKyNlbmRpZiAvKiBfTElOVVhfQ1BVU0VUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY3JhbWZzX2ZzLmggYi9pbmNsdWRlL2xpbnV4L2NyYW1mc19mcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4OTQ4ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2NyYW1mc19mcy5oCkBAIC0wLDAgKzEsOTggQEAKKyNpZm5kZWYgX19DUkFNRlNfSAorI2RlZmluZSBfX0NSQU1GU19ICisKKyNpZm5kZWYgX19LRVJORUxfXworCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdTg7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHUxNjsKK3R5cGVkZWYgdW5zaWduZWQgaW50IHUzMjsKKworI2VuZGlmCisKKyNkZWZpbmUgQ1JBTUZTX01BR0lDCQkweDI4Y2QzZDQ1CS8qIHNvbWUgcmFuZG9tIG51bWJlciAqLworI2RlZmluZSBDUkFNRlNfU0lHTkFUVVJFCSJDb21wcmVzc2VkIFJPTUZTIgorCisvKgorICogV2lkdGggb2YgdmFyaW91cyBiaXRmaWVsZHMgaW4gc3RydWN0IGNyYW1mc19pbm9kZS4KKyAqIFByaW1hcmlseSB1c2VkIHRvIGdlbmVyYXRlIHdhcm5pbmdzIGluIG1rY3JhbWZzLgorICovCisjZGVmaW5lIENSQU1GU19NT0RFX1dJRFRIIDE2CisjZGVmaW5lIENSQU1GU19VSURfV0lEVEggMTYKKyNkZWZpbmUgQ1JBTUZTX1NJWkVfV0lEVEggMjQKKyNkZWZpbmUgQ1JBTUZTX0dJRF9XSURUSCA4CisjZGVmaW5lIENSQU1GU19OQU1FTEVOX1dJRFRIIDYKKyNkZWZpbmUgQ1JBTUZTX09GRlNFVF9XSURUSCAyNgorCisvKgorICogU2luY2UgaW5vZGUubmFtZWxlbiBpcyBhIHVuc2lnbmVkIDYtYml0IG51bWJlciwgdGhlIG1heGltdW0gY3JhbWZzCisgKiBwYXRoIGxlbmd0aCBpcyA2MyA8PCAyID0gMjUyLgorICovCisjZGVmaW5lIENSQU1GU19NQVhQQVRITEVOICgoKDEgPDwgQ1JBTUZTX05BTUVMRU5fV0lEVEgpIC0gMSkgPDwgMikKKworLyoKKyAqIFJlYXNvbmFibHkgdGVyc2UgcmVwcmVzZW50YXRpb24gb2YgdGhlIGlub2RlIGRhdGEuCisgKi8KK3N0cnVjdCBjcmFtZnNfaW5vZGUgeworCXUzMiBtb2RlOkNSQU1GU19NT0RFX1dJRFRILCB1aWQ6Q1JBTUZTX1VJRF9XSURUSDsKKwkvKiBTSVpFIGZvciBkZXZpY2UgZmlsZXMgaXMgaV9yZGV2ICovCisJdTMyIHNpemU6Q1JBTUZTX1NJWkVfV0lEVEgsIGdpZDpDUkFNRlNfR0lEX1dJRFRIOworCS8qIE5BTUVMRU4gaXMgdGhlIGxlbmd0aCBvZiB0aGUgZmlsZSBuYW1lLCBkaXZpZGVkIGJ5IDQgYW5kCisgICAgICAgICAgIHJvdW5kZWQgdXAuICAoY3JhbWZzIGRvZXNuJ3Qgc3VwcG9ydCBoYXJkIGxpbmtzLikgKi8KKwkvKiBPRkZTRVQ6IEZvciBzeW1saW5rcyBhbmQgbm9uLWVtcHR5IHJlZ3VsYXIgZmlsZXMsIHRoaXMKKwkgICBjb250YWlucyB0aGUgb2Zmc2V0IChkaXZpZGVkIGJ5IDQpIG9mIHRoZSBmaWxlIGRhdGEgaW4KKwkgICBjb21wcmVzc2VkIGZvcm0gKHN0YXJ0aW5nIHdpdGggYW4gYXJyYXkgb2YgYmxvY2sgcG9pbnRlcnM7CisJICAgc2VlIFJFQURNRSkuICBGb3Igbm9uLWVtcHR5IGRpcmVjdG9yaWVzIGl0IGlzIHRoZSBvZmZzZXQKKwkgICAoZGl2aWRlZCBieSA0KSBvZiB0aGUgaW5vZGUgb2YgdGhlIGZpcnN0IGZpbGUgaW4gdGhhdAorCSAgIGRpcmVjdG9yeS4gIEZvciBhbnl0aGluZyBlbHNlLCBvZmZzZXQgaXMgemVyby4gKi8KKwl1MzIgbmFtZWxlbjpDUkFNRlNfTkFNRUxFTl9XSURUSCwgb2Zmc2V0OkNSQU1GU19PRkZTRVRfV0lEVEg7Cit9OworCitzdHJ1Y3QgY3JhbWZzX2luZm8geworCXUzMiBjcmM7CisJdTMyIGVkaXRpb247CisJdTMyIGJsb2NrczsKKwl1MzIgZmlsZXM7Cit9OworCisvKgorICogU3VwZXJibG9jayBpbmZvcm1hdGlvbiBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBGUy4KKyAqLworc3RydWN0IGNyYW1mc19zdXBlciB7CisJdTMyIG1hZ2ljOwkJCS8qIDB4MjhjZDNkNDUgLSByYW5kb20gbnVtYmVyICovCisJdTMyIHNpemU7CQkJLyogbGVuZ3RoIGluIGJ5dGVzICovCisJdTMyIGZsYWdzOwkJCS8qIGZlYXR1cmUgZmxhZ3MgKi8KKwl1MzIgZnV0dXJlOwkJCS8qIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovCisJdTggc2lnbmF0dXJlWzE2XTsJCS8qICJDb21wcmVzc2VkIFJPTUZTIiAqLworCXN0cnVjdCBjcmFtZnNfaW5mbyBmc2lkOwkvKiB1bmlxdWUgZmlsZXN5c3RlbSBpbmZvICovCisJdTggbmFtZVsxNl07CQkJLyogdXNlci1kZWZpbmVkIG5hbWUgKi8KKwlzdHJ1Y3QgY3JhbWZzX2lub2RlIHJvb3Q7CS8qIHJvb3QgaW5vZGUgZGF0YSAqLworfTsKKworLyoKKyAqIEZlYXR1cmUgZmxhZ3MKKyAqCisgKiAweDAwMDAwMDAwIC0gMHgwMDAwMDBmZjogZmVhdHVyZXMgdGhhdCB3b3JrIGZvciBhbGwgcGFzdCBrZXJuZWxzCisgKiAweDAwMDAwMTAwIC0gMHhmZmZmZmZmZjogZmVhdHVyZXMgdGhhdCBkb24ndCB3b3JrIGZvciBwYXN0IGtlcm5lbHMKKyAqLworI2RlZmluZSBDUkFNRlNfRkxBR19GU0lEX1ZFUlNJT05fMgkweDAwMDAwMDAxCS8qIGZzaWQgdmVyc2lvbiAjMiAqLworI2RlZmluZSBDUkFNRlNfRkxBR19TT1JURURfRElSUwkJMHgwMDAwMDAwMgkvKiBzb3J0ZWQgZGlycyAqLworI2RlZmluZSBDUkFNRlNfRkxBR19IT0xFUwkJMHgwMDAwMDEwMAkvKiBzdXBwb3J0IGZvciBob2xlcyAqLworI2RlZmluZSBDUkFNRlNfRkxBR19XUk9OR19TSUdOQVRVUkUJMHgwMDAwMDIwMAkvKiByZXNlcnZlZCAqLworI2RlZmluZSBDUkFNRlNfRkxBR19TSElGVEVEX1JPT1RfT0ZGU0VUCTB4MDAwMDA0MDAJLyogc2hpZnRlZCByb290IGZzICovCisKKy8qCisgKiBWYWxpZCB2YWx1ZXMgaW4gc3VwZXIuZmxhZ3MuICBDdXJyZW50bHkgd2UgcmVmdXNlIHRvIG1vdW50CisgKiBpZiAoZmxhZ3MgJiB+Q1JBTUZTX1NVUFBPUlRFRF9GTEFHUykuICBNYXliZSB0aGF0IHNob3VsZCBiZQorICogY2hhbmdlZCB0byB0ZXN0IHN1cGVyLmZ1dHVyZSBpbnN0ZWFkLgorICovCisjZGVmaW5lIENSQU1GU19TVVBQT1JURURfRkxBR1MJKCAweDAwMDAwMGZmIFwKKwkJCQl8IENSQU1GU19GTEFHX0hPTEVTIFwKKwkJCQl8IENSQU1GU19GTEFHX1dST05HX1NJR05BVFVSRSBcCisJCQkJfCBDUkFNRlNfRkxBR19TSElGVEVEX1JPT1RfT0ZGU0VUICkKKworLyogVW5jb21wcmVzc2lvbiBpbnRlcmZhY2VzIHRvIHRoZSB1bmRlcmx5aW5nIHpsaWIgKi8KK2ludCBjcmFtZnNfdW5jb21wcmVzc19ibG9jayh2b2lkICpkc3QsIGludCBkc3RsZW4sIHZvaWQgKnNyYywgaW50IHNyY2xlbik7CitpbnQgY3JhbWZzX3VuY29tcHJlc3NfaW5pdCh2b2lkKTsKK2ludCBjcmFtZnNfdW5jb21wcmVzc19leGl0KHZvaWQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY3JhbWZzX2ZzX3NiLmggYi9pbmNsdWRlL2xpbnV4L2NyYW1mc19mc19zYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzOTA2OTMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2NyYW1mc19mc19zYi5oCkBAIC0wLDAgKzEsMjAgQEAKKyNpZm5kZWYgX0NSQU1GU19GU19TQgorI2RlZmluZSBfQ1JBTUZTX0ZTX1NCCisKKy8qCisgKiBjcmFtZnMgc3VwZXItYmxvY2sgZGF0YSBpbiBtZW1vcnkKKyAqLworc3RydWN0IGNyYW1mc19zYl9pbmZvIHsKKwkJCXVuc2lnbmVkIGxvbmcgbWFnaWM7CisJCQl1bnNpZ25lZCBsb25nIHNpemU7CisJCQl1bnNpZ25lZCBsb25nIGJsb2NrczsKKwkJCXVuc2lnbmVkIGxvbmcgZmlsZXM7CisJCQl1bnNpZ25lZCBsb25nIGZsYWdzOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgY3JhbWZzX3NiX2luZm8gKkNSQU1GU19TQihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCXJldHVybiBzYi0+c19mc19pbmZvOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY3JjLWNjaXR0LmggYi9pbmNsdWRlL2xpbnV4L2NyYy1jY2l0dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwMDM3NjEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2NyYy1jY2l0dC5oCkBAIC0wLDAgKzEsMTcgQEAKKyNpZm5kZWYgX0xJTlVYX0NSQ19DQ0lUVF9ICisjZGVmaW5lIF9MSU5VWF9DUkNfQ0NJVFRfSAorI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK2V4dGVybiB1MTYgY29uc3QgY3JjX2NjaXR0X3RhYmxlWzI1Nl07CisKK2V4dGVybiB1MTYgY3JjX2NjaXR0KHUxNiBjcmMsIGNvbnN0IHU4ICpidWZmZXIsIHNpemVfdCBsZW4pOworCitzdGF0aWMgaW5saW5lIHUxNiBjcmNfY2NpdHRfYnl0ZSh1MTYgY3JjLCBjb25zdCB1OCBjKQoreworCXJldHVybiAoY3JjID4+IDgpIF4gY3JjX2NjaXR0X3RhYmxlWyhjcmMgXiBjKSAmIDB4ZmZdOworfQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9MSU5VWF9DUkNfQ0NJVFRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jcmMzMi5oIGIvaW5jbHVkZS9saW51eC9jcmMzMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2YzA2NDUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2NyYzMyLmgKQEAgLTAsMCArMSwyNyBAQAorLyoKKyAqIGNyYzMyLmgKKyAqIFNlZSBsaW51eC9saWIvY3JjMzIuYyBmb3IgbGljZW5zZSBhbmQgY2hhbmdlcworICovCisjaWZuZGVmIF9MSU5VWF9DUkMzMl9ICisjZGVmaW5lIF9MSU5VWF9DUkMzMl9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitleHRlcm4gdTMyICBjcmMzMl9sZSh1MzIgY3JjLCB1bnNpZ25lZCBjaGFyIGNvbnN0ICpwLCBzaXplX3QgbGVuKTsKK2V4dGVybiB1MzIgIGNyYzMyX2JlKHUzMiBjcmMsIHVuc2lnbmVkIGNoYXIgY29uc3QgKnAsIHNpemVfdCBsZW4pOworZXh0ZXJuIHUzMiAgYml0cmV2ZXJzZSh1MzIgaW4pOworCisjZGVmaW5lIGNyYzMyKHNlZWQsIGRhdGEsIGxlbmd0aCkgIGNyYzMyX2xlKHNlZWQsICh1bnNpZ25lZCBjaGFyIGNvbnN0ICopZGF0YSwgbGVuZ3RoKQorCisvKgorICogSGVscGVycyBmb3IgaGFzaCB0YWJsZSBnZW5lcmF0aW9uIG9mIGV0aGVybmV0IG5pY3M6CisgKgorICogRXRoZXJuZXQgc2VuZHMgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdCBvZiBhIGJ5dGUgZmlyc3QsIHRodXMgY3JjMzJfbGUKKyAqIGlzIHVzZWQuIFRoZSBvdXRwdXQgb2YgY3JjMzJfbGUgaXMgYml0IHJldmVyc2VkIFttb3N0IHNpZ25pZmljYW50IGJpdAorICogaXMgaW4gYml0IG5yIDBdLCB0aHVzIGl0IG11c3QgYmUgcmV2ZXJzZWQgYmVmb3JlIHVzZS4gRXhjZXB0IGZvcgorICogbmljcyB0aGF0IGJpdCBzd2FwIHRoZSByZXN1bHQgaW50ZXJuYWxseS4uLgorICovCisjZGVmaW5lIGV0aGVyX2NyYyhsZW5ndGgsIGRhdGEpICAgIGJpdHJldmVyc2UoY3JjMzJfbGUofjAsIGRhdGEsIGxlbmd0aCkpCisjZGVmaW5lIGV0aGVyX2NyY19sZShsZW5ndGgsIGRhdGEpIGNyYzMyX2xlKH4wLCBkYXRhLCBsZW5ndGgpCisKKyNlbmRpZiAvKiBfTElOVVhfQ1JDMzJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jcmMzMmMuaCBiL2luY2x1ZGUvbGludXgvY3JjMzJjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA4ZjUxMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvY3JjMzJjLmgKQEAgLTAsMCArMSwxMSBAQAorI2lmbmRlZiBfTElOVVhfQ1JDMzJDX0gKKyNkZWZpbmUgX0xJTlVYX0NSQzMyQ19ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitleHRlcm4gdTMyIGNyYzMyY19sZSh1MzIgY3JjLCB1bnNpZ25lZCBjaGFyIGNvbnN0ICphZGRyZXNzLCBzaXplX3QgbGVuZ3RoKTsKK2V4dGVybiB1MzIgY3JjMzJjX2JlKHUzMiBjcmMsIHVuc2lnbmVkIGNoYXIgY29uc3QgKmFkZHJlc3MsIHNpemVfdCBsZW5ndGgpOworCisjZGVmaW5lIGNyYzMyYyhzZWVkLCBkYXRhLCBsZW5ndGgpICBjcmMzMmNfbGUoc2VlZCwgKHVuc2lnbmVkIGNoYXIgY29uc3QgKilkYXRhLCBsZW5ndGgpCisKKyNlbmRpZgkvKiBfTElOVVhfQ1JDMzJDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY3J5cHRvLmggYi9pbmNsdWRlL2xpbnV4L2NyeXB0by5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4N2RhNmEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2NyeXB0by5oCkBAIC0wLDAgKzEsMzk4IEBACisvKgorICogU2NhdHRlcmxpc3QgQ3J5cHRvZ3JhcGhpYyBBUEkuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAyIEphbWVzIE1vcnJpcyA8am1vcnJpc0BpbnRlcmNvZGUuY29tLmF1PgorICogQ29weXJpZ2h0IChjKSAyMDAyIERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AcmVkaGF0LmNvbSkKKyAqCisgKiBQb3J0aW9ucyBkZXJpdmVkIGZyb20gQ3J5cHRvYXBpLCBieSBBbGV4YW5kZXIgS2plbGRhYXMgPGFzdG9yQGZhc3Qubm8+CisgKiBhbmQgTmV0dGxlLCBieSBOaWVscyBN9mxsZXIuCisgKiAKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSAKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworI2lmbmRlZiBfTElOVVhfQ1JZUFRPX0gKKyNkZWZpbmUgX0xJTlVYX0NSWVBUT19ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorCisvKgorICogQWxnb3JpdGhtIG1hc2tzIGFuZCB0eXBlcy4KKyAqLworI2RlZmluZSBDUllQVE9fQUxHX1RZUEVfTUFTSwkJMHgwMDAwMDBmZgorI2RlZmluZSBDUllQVE9fQUxHX1RZUEVfQ0lQSEVSCQkweDAwMDAwMDAxCisjZGVmaW5lIENSWVBUT19BTEdfVFlQRV9ESUdFU1QJCTB4MDAwMDAwMDIKKyNkZWZpbmUgQ1JZUFRPX0FMR19UWVBFX0NPTVBSRVNTCTB4MDAwMDAwMDQKKworLyoKKyAqIFRyYW5zZm9ybSBtYXNrcyBhbmQgdmFsdWVzIChmb3IgY3J0X2ZsYWdzKS4KKyAqLworI2RlZmluZSBDUllQVE9fVEZNX01PREVfTUFTSwkJMHgwMDAwMDBmZgorI2RlZmluZSBDUllQVE9fVEZNX1JFUV9NQVNLCQkweDAwMGZmZjAwCisjZGVmaW5lIENSWVBUT19URk1fUkVTX01BU0sJCTB4ZmZmMDAwMDAKKworI2RlZmluZSBDUllQVE9fVEZNX01PREVfRUNCCQkweDAwMDAwMDAxCisjZGVmaW5lIENSWVBUT19URk1fTU9ERV9DQkMJCTB4MDAwMDAwMDIKKyNkZWZpbmUgQ1JZUFRPX1RGTV9NT0RFX0NGQgkJMHgwMDAwMDAwNAorI2RlZmluZSBDUllQVE9fVEZNX01PREVfQ1RSCQkweDAwMDAwMDA4CisKKyNkZWZpbmUgQ1JZUFRPX1RGTV9SRVFfV0VBS19LRVkJCTB4MDAwMDAxMDAKKyNkZWZpbmUgQ1JZUFRPX1RGTV9SRVNfV0VBS19LRVkJCTB4MDAxMDAwMDAKKyNkZWZpbmUgQ1JZUFRPX1RGTV9SRVNfQkFEX0tFWV9MRU4gICAJMHgwMDIwMDAwMAorI2RlZmluZSBDUllQVE9fVEZNX1JFU19CQURfS0VZX1NDSEVEIAkweDAwNDAwMDAwCisjZGVmaW5lIENSWVBUT19URk1fUkVTX0JBRF9CTE9DS19MRU4gCTB4MDA4MDAwMDAKKyNkZWZpbmUgQ1JZUFRPX1RGTV9SRVNfQkFEX0ZMQUdTIAkweDAxMDAwMDAwCisKKy8qCisgKiBNaXNjZWxsYW5lb3VzIHN0dWZmLgorICovCisjZGVmaW5lIENSWVBUT19VTlNQRUMJCQkwCisjZGVmaW5lIENSWVBUT19NQVhfQUxHX05BTUUJCTY0CisKKyNkZWZpbmUgQ1JZUFRPX0RJUl9FTkNSWVBUCQkxCisjZGVmaW5lIENSWVBUT19ESVJfREVDUllQVAkJMAorCitzdHJ1Y3Qgc2NhdHRlcmxpc3Q7CisKKy8qCisgKiBBbGdvcml0aG1zOiBtb2R1bGFyIGNyeXB0byBhbGdvcml0aG0gaW1wbGVtZW50YXRpb25zLCBtYW5hZ2VkCisgKiB2aWEgY3J5cHRvX3JlZ2lzdGVyX2FsZygpIGFuZCBjcnlwdG9fdW5yZWdpc3Rlcl9hbGcoKS4KKyAqLworc3RydWN0IGNpcGhlcl9hbGcgeworCXVuc2lnbmVkIGludCBjaWFfbWluX2tleXNpemU7CisJdW5zaWduZWQgaW50IGNpYV9tYXhfa2V5c2l6ZTsKKwlpbnQgKCpjaWFfc2V0a2V5KSh2b2lkICpjdHgsIGNvbnN0IHU4ICprZXksCisJICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGtleWxlbiwgdTMyICpmbGFncyk7CisJdm9pZCAoKmNpYV9lbmNyeXB0KSh2b2lkICpjdHgsIHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMpOworCXZvaWQgKCpjaWFfZGVjcnlwdCkodm9pZCAqY3R4LCB1OCAqZHN0LCBjb25zdCB1OCAqc3JjKTsKK307CisKK3N0cnVjdCBkaWdlc3RfYWxnIHsKKwl1bnNpZ25lZCBpbnQgZGlhX2RpZ2VzdHNpemU7CisJdm9pZCAoKmRpYV9pbml0KSh2b2lkICpjdHgpOworCXZvaWQgKCpkaWFfdXBkYXRlKSh2b2lkICpjdHgsIGNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKTsKKwl2b2lkICgqZGlhX2ZpbmFsKSh2b2lkICpjdHgsIHU4ICpvdXQpOworCWludCAoKmRpYV9zZXRrZXkpKHZvaWQgKmN0eCwgY29uc3QgdTggKmtleSwKKwkgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQga2V5bGVuLCB1MzIgKmZsYWdzKTsKK307CisKK3N0cnVjdCBjb21wcmVzc19hbGcgeworCWludCAoKmNvYV9pbml0KSh2b2lkICpjdHgpOworCXZvaWQgKCpjb2FfZXhpdCkodm9pZCAqY3R4KTsKKwlpbnQgKCpjb2FfY29tcHJlc3MpKHZvaWQgKmN0eCwgY29uc3QgdTggKnNyYywgdW5zaWduZWQgaW50IHNsZW4sCisJICAgICAgICAgICAgICAgICAgICB1OCAqZHN0LCB1bnNpZ25lZCBpbnQgKmRsZW4pOworCWludCAoKmNvYV9kZWNvbXByZXNzKSh2b2lkICpjdHgsIGNvbnN0IHU4ICpzcmMsIHVuc2lnbmVkIGludCBzbGVuLAorCSAgICAgICAgICAgICAgICAgICAgICB1OCAqZHN0LCB1bnNpZ25lZCBpbnQgKmRsZW4pOworfTsKKworI2RlZmluZSBjcmFfY2lwaGVyCWNyYV91LmNpcGhlcgorI2RlZmluZSBjcmFfZGlnZXN0CWNyYV91LmRpZ2VzdAorI2RlZmluZSBjcmFfY29tcHJlc3MJY3JhX3UuY29tcHJlc3MKKworc3RydWN0IGNyeXB0b19hbGcgeworCXN0cnVjdCBsaXN0X2hlYWQgY3JhX2xpc3Q7CisJdTMyIGNyYV9mbGFnczsKKwl1bnNpZ25lZCBpbnQgY3JhX2Jsb2Nrc2l6ZTsKKwl1bnNpZ25lZCBpbnQgY3JhX2N0eHNpemU7CisJY29uc3QgY2hhciBjcmFfbmFtZVtDUllQVE9fTUFYX0FMR19OQU1FXTsKKworCXVuaW9uIHsKKwkJc3RydWN0IGNpcGhlcl9hbGcgY2lwaGVyOworCQlzdHJ1Y3QgZGlnZXN0X2FsZyBkaWdlc3Q7CisJCXN0cnVjdCBjb21wcmVzc19hbGcgY29tcHJlc3M7CisJfSBjcmFfdTsKKwkKKwlzdHJ1Y3QgbW9kdWxlICpjcmFfbW9kdWxlOworfTsKKworLyoKKyAqIEFsZ29yaXRobSByZWdpc3RyYXRpb24gaW50ZXJmYWNlLgorICovCitpbnQgY3J5cHRvX3JlZ2lzdGVyX2FsZyhzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnKTsKK2ludCBjcnlwdG9fdW5yZWdpc3Rlcl9hbGcoc3RydWN0IGNyeXB0b19hbGcgKmFsZyk7CisKKy8qCisgKiBBbGdvcml0aG0gcXVlcnkgaW50ZXJmYWNlLgorICovCisjaWZkZWYgQ09ORklHX0NSWVBUTworaW50IGNyeXB0b19hbGdfYXZhaWxhYmxlKGNvbnN0IGNoYXIgKm5hbWUsIHUzMiBmbGFncyk7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgY3J5cHRvX2FsZ19hdmFpbGFibGUoY29uc3QgY2hhciAqbmFtZSwgdTMyIGZsYWdzKQoreworCXJldHVybiAwOworfQorI2VuZGlmCisKKy8qCisgKiBUcmFuc2Zvcm1zOiB1c2VyLWluc3RhbnRpYXRlZCBvYmplY3RzIHdoaWNoIGVuY2Fwc3VsYXRlIGFsZ29yaXRobXMKKyAqIGFuZCBjb3JlIHByb2Nlc3NpbmcgbG9naWMuICBNYW5hZ2VkIHZpYSBjcnlwdG9fYWxsb2NfdGZtKCkgYW5kCisgKiBjcnlwdG9fZnJlZV90Zm0oKSwgYXMgd2VsbCBhcyB0aGUgdmFyaW91cyBoZWxwZXJzIGJlbG93LgorICovCitzdHJ1Y3QgY3J5cHRvX3RmbTsKKworc3RydWN0IGNpcGhlcl90Zm0geworCXZvaWQgKmNpdF9pdjsKKwl1bnNpZ25lZCBpbnQgY2l0X2l2c2l6ZTsKKwl1MzIgY2l0X21vZGU7CisJaW50ICgqY2l0X3NldGtleSkoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwKKwkgICAgICAgICAgICAgICAgICBjb25zdCB1OCAqa2V5LCB1bnNpZ25lZCBpbnQga2V5bGVuKTsKKwlpbnQgKCpjaXRfZW5jcnlwdCkoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwKKwkJCSAgIHN0cnVjdCBzY2F0dGVybGlzdCAqZHN0LAorCQkJICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMsCisJCQkgICB1bnNpZ25lZCBpbnQgbmJ5dGVzKTsKKwlpbnQgKCpjaXRfZW5jcnlwdF9pdikoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwKKwkgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QsCisJICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc3JjLAorCSAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbmJ5dGVzLCB1OCAqaXYpOworCWludCAoKmNpdF9kZWNyeXB0KShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLAorCQkJICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QsCisJCQkgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNyYywKKwkJCSAgIHVuc2lnbmVkIGludCBuYnl0ZXMpOworCWludCAoKmNpdF9kZWNyeXB0X2l2KShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLAorCQkJICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QsCisJCQkgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNyYywKKwkJCSAgIHVuc2lnbmVkIGludCBuYnl0ZXMsIHU4ICppdik7CisJdm9pZCAoKmNpdF94b3JfYmxvY2spKHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMpOworfTsKKworc3RydWN0IGRpZ2VzdF90Zm0geworCXZvaWQgKCpkaXRfaW5pdCkoc3RydWN0IGNyeXB0b190Zm0gKnRmbSk7CisJdm9pZCAoKmRpdF91cGRhdGUpKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sCisJICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHVuc2lnbmVkIGludCBuc2cpOworCXZvaWQgKCpkaXRfZmluYWwpKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHU4ICpvdXQpOworCXZvaWQgKCpkaXRfZGlnZXN0KShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCSAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbnNnLCB1OCAqb3V0KTsKKwlpbnQgKCpkaXRfc2V0a2V5KShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLAorCSAgICAgICAgICAgICAgICAgIGNvbnN0IHU4ICprZXksIHVuc2lnbmVkIGludCBrZXlsZW4pOworI2lmZGVmIENPTkZJR19DUllQVE9fSE1BQworCXZvaWQgKmRpdF9obWFjX2Jsb2NrOworI2VuZGlmCit9OworCitzdHJ1Y3QgY29tcHJlc3NfdGZtIHsKKwlpbnQgKCpjb3RfY29tcHJlc3MpKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sCisJICAgICAgICAgICAgICAgICAgICBjb25zdCB1OCAqc3JjLCB1bnNpZ25lZCBpbnQgc2xlbiwKKwkgICAgICAgICAgICAgICAgICAgIHU4ICpkc3QsIHVuc2lnbmVkIGludCAqZGxlbik7CisJaW50ICgqY290X2RlY29tcHJlc3MpKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sCisJICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHU4ICpzcmMsIHVuc2lnbmVkIGludCBzbGVuLAorCSAgICAgICAgICAgICAgICAgICAgICB1OCAqZHN0LCB1bnNpZ25lZCBpbnQgKmRsZW4pOworfTsKKworI2RlZmluZSBjcnRfY2lwaGVyCWNydF91LmNpcGhlcgorI2RlZmluZSBjcnRfZGlnZXN0CWNydF91LmRpZ2VzdAorI2RlZmluZSBjcnRfY29tcHJlc3MJY3J0X3UuY29tcHJlc3MKKworc3RydWN0IGNyeXB0b190Zm0geworCisJdTMyIGNydF9mbGFnczsKKwkKKwl1bmlvbiB7CisJCXN0cnVjdCBjaXBoZXJfdGZtIGNpcGhlcjsKKwkJc3RydWN0IGRpZ2VzdF90Zm0gZGlnZXN0OworCQlzdHJ1Y3QgY29tcHJlc3NfdGZtIGNvbXByZXNzOworCX0gY3J0X3U7CisJCisJc3RydWN0IGNyeXB0b19hbGcgKl9fY3J0X2FsZzsKK307CisKKy8qIAorICogVHJhbnNmb3JtIHVzZXIgaW50ZXJmYWNlLgorICovCisgCisvKgorICogY3J5cHRvX2FsbG9jX3RmbSgpIHdpbGwgZmlyc3QgYXR0ZW1wdCB0byBsb2NhdGUgYW4gYWxyZWFkeSBsb2FkZWQgYWxnb3JpdGhtLgorICogSWYgdGhhdCBmYWlscyBhbmQgdGhlIGtlcm5lbCBzdXBwb3J0cyBkeW5hbWljYWxseSBsb2FkYWJsZSBtb2R1bGVzLCBpdAorICogd2lsbCB0aGVuIGF0dGVtcHQgdG8gbG9hZCBhIG1vZHVsZSBvZiB0aGUgc2FtZSBuYW1lIG9yIGFsaWFzLiAgQSByZWZjb3VudAorICogaXMgZ3JhYmJlZCBvbiB0aGUgYWxnb3JpdGhtIHdoaWNoIGlzIHRoZW4gYXNzb2NpYXRlZCB3aXRoIHRoZSBuZXcgdHJhbnNmb3JtLgorICoKKyAqIGNyeXB0b19mcmVlX3RmbSgpIGZyZWVzIHVwIHRoZSB0cmFuc2Zvcm0gYW5kIGFueSBhc3NvY2lhdGVkIHJlc291cmNlcywKKyAqIHRoZW4gZHJvcHMgdGhlIHJlZmNvdW50IG9uIHRoZSBhc3NvY2lhdGVkIGFsZ29yaXRobS4KKyAqLworc3RydWN0IGNyeXB0b190Zm0gKmNyeXB0b19hbGxvY190Zm0oY29uc3QgY2hhciAqYWxnX25hbWUsIHUzMiB0Zm1fZmxhZ3MpOwordm9pZCBjcnlwdG9fZnJlZV90Zm0oc3RydWN0IGNyeXB0b190Zm0gKnRmbSk7CisKKy8qCisgKiBUcmFuc2Zvcm0gaGVscGVycyB3aGljaCBxdWVyeSB0aGUgdW5kZXJseWluZyBhbGdvcml0aG0uCisgKi8KK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqY3J5cHRvX3RmbV9hbGdfbmFtZShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQoreworCXJldHVybiB0Zm0tPl9fY3J0X2FsZy0+Y3JhX25hbWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqY3J5cHRvX3RmbV9hbGdfbW9kbmFtZShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQoreworCXJldHVybiBtb2R1bGVfbmFtZSh0Zm0tPl9fY3J0X2FsZy0+Y3JhX21vZHVsZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGNyeXB0b190Zm1fYWxnX3R5cGUoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKK3sKKwlyZXR1cm4gdGZtLT5fX2NydF9hbGctPmNyYV9mbGFncyAmIENSWVBUT19BTEdfVFlQRV9NQVNLOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjcnlwdG9fdGZtX2FsZ19taW5fa2V5c2l6ZShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQoreworCUJVR19PTihjcnlwdG9fdGZtX2FsZ190eXBlKHRmbSkgIT0gQ1JZUFRPX0FMR19UWVBFX0NJUEhFUik7CisJcmV0dXJuIHRmbS0+X19jcnRfYWxnLT5jcmFfY2lwaGVyLmNpYV9taW5fa2V5c2l6ZTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3J5cHRvX3RmbV9hbGdfbWF4X2tleXNpemUoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKK3sKKwlCVUdfT04oY3J5cHRvX3RmbV9hbGdfdHlwZSh0Zm0pICE9IENSWVBUT19BTEdfVFlQRV9DSVBIRVIpOworCXJldHVybiB0Zm0tPl9fY3J0X2FsZy0+Y3JhX2NpcGhlci5jaWFfbWF4X2tleXNpemU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNyeXB0b190Zm1fYWxnX2l2c2l6ZShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQoreworCUJVR19PTihjcnlwdG9fdGZtX2FsZ190eXBlKHRmbSkgIT0gQ1JZUFRPX0FMR19UWVBFX0NJUEhFUik7CisJcmV0dXJuIHRmbS0+Y3J0X2NpcGhlci5jaXRfaXZzaXplOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjcnlwdG9fdGZtX2FsZ19ibG9ja3NpemUoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKK3sKKwlyZXR1cm4gdGZtLT5fX2NydF9hbGctPmNyYV9ibG9ja3NpemU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNyeXB0b190Zm1fYWxnX2RpZ2VzdHNpemUoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKK3sKKwlCVUdfT04oY3J5cHRvX3RmbV9hbGdfdHlwZSh0Zm0pICE9IENSWVBUT19BTEdfVFlQRV9ESUdFU1QpOworCXJldHVybiB0Zm0tPl9fY3J0X2FsZy0+Y3JhX2RpZ2VzdC5kaWFfZGlnZXN0c2l6ZTsKK30KKworLyoKKyAqIEFQSSB3cmFwcGVycy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGNyeXB0b19kaWdlc3RfaW5pdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQoreworCUJVR19PTihjcnlwdG9fdGZtX2FsZ190eXBlKHRmbSkgIT0gQ1JZUFRPX0FMR19UWVBFX0RJR0VTVCk7CisJdGZtLT5jcnRfZGlnZXN0LmRpdF9pbml0KHRmbSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjcnlwdG9fZGlnZXN0X3VwZGF0ZShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG5zZykKK3sKKwlCVUdfT04oY3J5cHRvX3RmbV9hbGdfdHlwZSh0Zm0pICE9IENSWVBUT19BTEdfVFlQRV9ESUdFU1QpOworCXRmbS0+Y3J0X2RpZ2VzdC5kaXRfdXBkYXRlKHRmbSwgc2csIG5zZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjcnlwdG9fZGlnZXN0X2ZpbmFsKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHU4ICpvdXQpCit7CisJQlVHX09OKGNyeXB0b190Zm1fYWxnX3R5cGUodGZtKSAhPSBDUllQVE9fQUxHX1RZUEVfRElHRVNUKTsKKwl0Zm0tPmNydF9kaWdlc3QuZGl0X2ZpbmFsKHRmbSwgb3V0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNyeXB0b19kaWdlc3RfZGlnZXN0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbnNnLCB1OCAqb3V0KQoreworCUJVR19PTihjcnlwdG9fdGZtX2FsZ190eXBlKHRmbSkgIT0gQ1JZUFRPX0FMR19UWVBFX0RJR0VTVCk7CisJdGZtLT5jcnRfZGlnZXN0LmRpdF9kaWdlc3QodGZtLCBzZywgbnNnLCBvdXQpOworfQorCitzdGF0aWMgaW5saW5lIGludCBjcnlwdG9fZGlnZXN0X3NldGtleShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdTggKmtleSwgdW5zaWduZWQgaW50IGtleWxlbikKK3sKKwlCVUdfT04oY3J5cHRvX3RmbV9hbGdfdHlwZSh0Zm0pICE9IENSWVBUT19BTEdfVFlQRV9ESUdFU1QpOworCWlmICh0Zm0tPmNydF9kaWdlc3QuZGl0X3NldGtleSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT1NZUzsKKwlyZXR1cm4gdGZtLT5jcnRfZGlnZXN0LmRpdF9zZXRrZXkodGZtLCBrZXksIGtleWxlbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNyeXB0b19jaXBoZXJfc2V0a2V5KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1OCAqa2V5LCB1bnNpZ25lZCBpbnQga2V5bGVuKQoreworCUJVR19PTihjcnlwdG9fdGZtX2FsZ190eXBlKHRmbSkgIT0gQ1JZUFRPX0FMR19UWVBFX0NJUEhFUik7CisJcmV0dXJuIHRmbS0+Y3J0X2NpcGhlci5jaXRfc2V0a2V5KHRmbSwga2V5LCBrZXlsZW4pOworfQorCitzdGF0aWMgaW5saW5lIGludCBjcnlwdG9fY2lwaGVyX2VuY3J5cHQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmRzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNyYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbmJ5dGVzKQoreworCUJVR19PTihjcnlwdG9fdGZtX2FsZ190eXBlKHRmbSkgIT0gQ1JZUFRPX0FMR19UWVBFX0NJUEhFUik7CisJcmV0dXJuIHRmbS0+Y3J0X2NpcGhlci5jaXRfZW5jcnlwdCh0Zm0sIGRzdCwgc3JjLCBuYnl0ZXMpOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKworc3RhdGljIGlubGluZSBpbnQgY3J5cHRvX2NpcGhlcl9lbmNyeXB0X2l2KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG5ieXRlcywgdTggKml2KQoreworCUJVR19PTihjcnlwdG9fdGZtX2FsZ190eXBlKHRmbSkgIT0gQ1JZUFRPX0FMR19UWVBFX0NJUEhFUik7CisJQlVHX09OKHRmbS0+Y3J0X2NpcGhlci5jaXRfbW9kZSA9PSBDUllQVE9fVEZNX01PREVfRUNCKTsKKwlyZXR1cm4gdGZtLT5jcnRfY2lwaGVyLmNpdF9lbmNyeXB0X2l2KHRmbSwgZHN0LCBzcmMsIG5ieXRlcywgaXYpOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKworc3RhdGljIGlubGluZSBpbnQgY3J5cHRvX2NpcGhlcl9kZWNyeXB0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG5ieXRlcykKK3sKKwlCVUdfT04oY3J5cHRvX3RmbV9hbGdfdHlwZSh0Zm0pICE9IENSWVBUT19BTEdfVFlQRV9DSVBIRVIpOworCXJldHVybiB0Zm0tPmNydF9jaXBoZXIuY2l0X2RlY3J5cHQodGZtLCBkc3QsIHNyYywgbmJ5dGVzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgY3J5cHRvX2NpcGhlcl9kZWNyeXB0X2l2KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG5ieXRlcywgdTggKml2KQoreworCUJVR19PTihjcnlwdG9fdGZtX2FsZ190eXBlKHRmbSkgIT0gQ1JZUFRPX0FMR19UWVBFX0NJUEhFUik7CisJQlVHX09OKHRmbS0+Y3J0X2NpcGhlci5jaXRfbW9kZSA9PSBDUllQVE9fVEZNX01PREVfRUNCKTsKKwlyZXR1cm4gdGZtLT5jcnRfY2lwaGVyLmNpdF9kZWNyeXB0X2l2KHRmbSwgZHN0LCBzcmMsIG5ieXRlcywgaXYpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY3J5cHRvX2NpcGhlcl9zZXRfaXYoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1OCAqc3JjLCB1bnNpZ25lZCBpbnQgbGVuKQoreworCUJVR19PTihjcnlwdG9fdGZtX2FsZ190eXBlKHRmbSkgIT0gQ1JZUFRPX0FMR19UWVBFX0NJUEhFUik7CisJbWVtY3B5KHRmbS0+Y3J0X2NpcGhlci5jaXRfaXYsIHNyYywgbGVuKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNyeXB0b19jaXBoZXJfZ2V0X2l2KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggKmRzdCwgdW5zaWduZWQgaW50IGxlbikKK3sKKwlCVUdfT04oY3J5cHRvX3RmbV9hbGdfdHlwZSh0Zm0pICE9IENSWVBUT19BTEdfVFlQRV9DSVBIRVIpOworCW1lbWNweShkc3QsIHRmbS0+Y3J0X2NpcGhlci5jaXRfaXYsIGxlbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNyeXB0b19jb21wX2NvbXByZXNzKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1OCAqc3JjLCB1bnNpZ25lZCBpbnQgc2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4ICpkc3QsIHVuc2lnbmVkIGludCAqZGxlbikKK3sKKwlCVUdfT04oY3J5cHRvX3RmbV9hbGdfdHlwZSh0Zm0pICE9IENSWVBUT19BTEdfVFlQRV9DT01QUkVTUyk7CisJcmV0dXJuIHRmbS0+Y3J0X2NvbXByZXNzLmNvdF9jb21wcmVzcyh0Zm0sIHNyYywgc2xlbiwgZHN0LCBkbGVuKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgY3J5cHRvX2NvbXBfZGVjb21wcmVzcyhzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1OCAqc3JjLCB1bnNpZ25lZCBpbnQgc2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggKmRzdCwgdW5zaWduZWQgaW50ICpkbGVuKQoreworCUJVR19PTihjcnlwdG9fdGZtX2FsZ190eXBlKHRmbSkgIT0gQ1JZUFRPX0FMR19UWVBFX0NPTVBSRVNTKTsKKwlyZXR1cm4gdGZtLT5jcnRfY29tcHJlc3MuY290X2RlY29tcHJlc3ModGZtLCBzcmMsIHNsZW4sIGRzdCwgZGxlbik7Cit9CisKKy8qCisgKiBITUFDIHN1cHBvcnQuCisgKi8KKyNpZmRlZiBDT05GSUdfQ1JZUFRPX0hNQUMKK3ZvaWQgY3J5cHRvX2htYWNfaW5pdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCB1OCAqa2V5LCB1bnNpZ25lZCBpbnQgKmtleWxlbik7Cit2b2lkIGNyeXB0b19obWFjX3VwZGF0ZShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgdW5zaWduZWQgaW50IG5zZyk7Cit2b2lkIGNyeXB0b19obWFjX2ZpbmFsKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHU4ICprZXksCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqa2V5bGVuLCB1OCAqb3V0KTsKK3ZvaWQgY3J5cHRvX2htYWMoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdTggKmtleSwgdW5zaWduZWQgaW50ICprZXlsZW4sCisgICAgICAgICAgICAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHVuc2lnbmVkIGludCBuc2csIHU4ICpvdXQpOworI2VuZGlmCS8qIENPTkZJR19DUllQVE9fSE1BQyAqLworCisjZW5kaWYJLyogX0xJTlVYX0NSWVBUT19IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY3J5cHRvaGFzaC5oIGIvaW5jbHVkZS9saW51eC9jcnlwdG9oYXNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzExOGIyYWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2NyeXB0b2hhc2guaApAQCAtMCwwICsxLDEyIEBACisjaWZuZGVmIF9fQ1JZUFRPSEFTSF9ICisjZGVmaW5lIF9fQ1JZUFRPSEFTSF9ICisKKyNkZWZpbmUgU0hBX0RJR0VTVF9XT1JEUyA1CisjZGVmaW5lIFNIQV9XT1JLU1BBQ0VfV09SRFMgODAKKwordm9pZCBzaGFfaW5pdChfX3UzMiAqYnVmKTsKK3ZvaWQgc2hhX3RyYW5zZm9ybShfX3UzMiAqZGlnZXN0LCBjb25zdCBjaGFyICpkYXRhLCBfX3UzMiAqVyk7CisKK19fdTMyIGhhbGZfbWQ0X3RyYW5zZm9ybShfX3UzMiBidWZbNF0sIF9fdTMyIGNvbnN0IGluWzhdKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2N0eXBlLmggYi9pbmNsdWRlL2xpbnV4L2N0eXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZhMzYzOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvY3R5cGUuaApAQCAtMCwwICsxLDU0IEBACisjaWZuZGVmIF9MSU5VWF9DVFlQRV9ICisjZGVmaW5lIF9MSU5VWF9DVFlQRV9ICisKKy8qCisgKiBOT1RFISBUaGlzIGN0eXBlIGRvZXMgbm90IGhhbmRsZSBFT0YgbGlrZSB0aGUgc3RhbmRhcmQgQworICogbGlicmFyeSBpcyByZXF1aXJlZCB0by4KKyAqLworCisjZGVmaW5lIF9VCTB4MDEJLyogdXBwZXIgKi8KKyNkZWZpbmUgX0wJMHgwMgkvKiBsb3dlciAqLworI2RlZmluZSBfRAkweDA0CS8qIGRpZ2l0ICovCisjZGVmaW5lIF9DCTB4MDgJLyogY250cmwgKi8KKyNkZWZpbmUgX1AJMHgxMAkvKiBwdW5jdCAqLworI2RlZmluZSBfUwkweDIwCS8qIHdoaXRlIHNwYWNlIChzcGFjZS9sZi90YWIpICovCisjZGVmaW5lIF9YCTB4NDAJLyogaGV4IGRpZ2l0ICovCisjZGVmaW5lIF9TUAkweDgwCS8qIGhhcmQgc3BhY2UgKDB4MjApICovCisKK2V4dGVybiB1bnNpZ25lZCBjaGFyIF9jdHlwZVtdOworCisjZGVmaW5lIF9faXNtYXNrKHgpIChfY3R5cGVbKGludCkodW5zaWduZWQgY2hhcikoeCldKQorCisjZGVmaW5lIGlzYWxudW0oYykJKChfX2lzbWFzayhjKSYoX1V8X0x8X0QpKSAhPSAwKQorI2RlZmluZSBpc2FscGhhKGMpCSgoX19pc21hc2soYykmKF9VfF9MKSkgIT0gMCkKKyNkZWZpbmUgaXNjbnRybChjKQkoKF9faXNtYXNrKGMpJihfQykpICE9IDApCisjZGVmaW5lIGlzZGlnaXQoYykJKChfX2lzbWFzayhjKSYoX0QpKSAhPSAwKQorI2RlZmluZSBpc2dyYXBoKGMpCSgoX19pc21hc2soYykmKF9QfF9VfF9MfF9EKSkgIT0gMCkKKyNkZWZpbmUgaXNsb3dlcihjKQkoKF9faXNtYXNrKGMpJihfTCkpICE9IDApCisjZGVmaW5lIGlzcHJpbnQoYykJKChfX2lzbWFzayhjKSYoX1B8X1V8X0x8X0R8X1NQKSkgIT0gMCkKKyNkZWZpbmUgaXNwdW5jdChjKQkoKF9faXNtYXNrKGMpJihfUCkpICE9IDApCisjZGVmaW5lIGlzc3BhY2UoYykJKChfX2lzbWFzayhjKSYoX1MpKSAhPSAwKQorI2RlZmluZSBpc3VwcGVyKGMpCSgoX19pc21hc2soYykmKF9VKSkgIT0gMCkKKyNkZWZpbmUgaXN4ZGlnaXQoYykJKChfX2lzbWFzayhjKSYoX0R8X1gpKSAhPSAwKQorCisjZGVmaW5lIGlzYXNjaWkoYykgKCgodW5zaWduZWQgY2hhcikoYykpPD0weDdmKQorI2RlZmluZSB0b2FzY2lpKGMpICgoKHVuc2lnbmVkIGNoYXIpKGMpKSYweDdmKQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgX190b2xvd2VyKHVuc2lnbmVkIGNoYXIgYykKK3sKKwlpZiAoaXN1cHBlcihjKSkKKwkJYyAtPSAnQSctJ2EnOworCXJldHVybiBjOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgX190b3VwcGVyKHVuc2lnbmVkIGNoYXIgYykKK3sKKwlpZiAoaXNsb3dlcihjKSkKKwkJYyAtPSAnYSctJ0EnOworCXJldHVybiBjOworfQorCisjZGVmaW5lIHRvbG93ZXIoYykgX190b2xvd2VyKGMpCisjZGVmaW5lIHRvdXBwZXIoYykgX190b3VwcGVyKGMpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jdWRhLmggYi9pbmNsdWRlL2xpbnV4L2N1ZGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTNlNjM4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9jdWRhLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIERlZmluaXRpb25zIGZvciB0YWxraW5nIHRvIHRoZSBDVURBLiAgVGhlIENVREEgaXMgYSBtaWNyb2NvbnRyb2xsZXIKKyAqIHdoaWNoIGNvbnRyb2xzIHRoZSBBREIsIHN5c3RlbSBwb3dlciwgUlRDLCBhbmQgdmFyaW91cyBvdGhlciB0aGluZ3MuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk2IFBhdWwgTWFja2VycmFzLgorICovCisKKy8qIENVREEgY29tbWFuZHMgKDJuZCBieXRlKSAqLworI2RlZmluZSBDVURBX1dBUk1fU1RBUlQJCTAKKyNkZWZpbmUgQ1VEQV9BVVRPUE9MTAkJMQorI2RlZmluZSBDVURBX0dFVF82ODA1X0FERFIJMgorI2RlZmluZSBDVURBX0dFVF9USU1FCQkzCisjZGVmaW5lIENVREFfR0VUX1BSQU0JCTcKKyNkZWZpbmUgQ1VEQV9TRVRfNjgwNV9BRERSCTgKKyNkZWZpbmUgQ1VEQV9TRVRfVElNRQkJOQorI2RlZmluZSBDVURBX1BPV0VSRE9XTgkJMHhhCisjZGVmaW5lIENVREFfUE9XRVJVUF9USU1FCTB4YgorI2RlZmluZSBDVURBX1NFVF9QUkFNCQkweGMKKyNkZWZpbmUgQ1VEQV9NU19SRVNFVAkJMHhkCisjZGVmaW5lIENVREFfU0VORF9ERkFDCQkweGUKKyNkZWZpbmUgQ1VEQV9SRVNFVF9TWVNURU0JMHgxMQorI2RlZmluZSBDVURBX1NFVF9JUEwJCTB4MTIKKyNkZWZpbmUgQ1VEQV9TRVRfQVVUT19SQVRFCTB4MTQKKyNkZWZpbmUgQ1VEQV9HRVRfQVVUT19SQVRFCTB4MTYKKyNkZWZpbmUgQ1VEQV9TRVRfREVWSUNFX0xJU1QJMHgxOQorI2RlZmluZSBDVURBX0dFVF9ERVZJQ0VfTElTVAkweDFhCisjZGVmaW5lIENVREFfR0VUX1NFVF9JSUMJMHgyMgorCisjaWZkZWYgX19LRVJORUxfXworCitleHRlcm4gaW50IGZpbmRfdmlhX2N1ZGEodm9pZCk7CitleHRlcm4gaW50IGN1ZGFfcmVxdWVzdChzdHJ1Y3QgYWRiX3JlcXVlc3QgKnJlcSwKKwkJCXZvaWQgKCpkb25lKShzdHJ1Y3QgYWRiX3JlcXVlc3QgKiksIGludCBuYnl0ZXMsIC4uLik7CitleHRlcm4gdm9pZCBjdWRhX3BvbGwodm9pZCk7CisKKyNlbmRpZgkvKiBfX0tFUk5FTCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jeWNsYWRlcy5oIGIvaW5jbHVkZS9saW51eC9jeWNsYWRlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2ZDgyNTQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2N5Y2xhZGVzLmgKQEAgLTAsMCArMSw4MjcgQEAKKy8qICRSZXZpc2lvbjogMy4wICQkRGF0ZTogMTk5OC8xMS8wMiAxNDoyMDo1OSAkCisgKiBsaW51eC9pbmNsdWRlL2xpbnV4L2N5Y2xhZGVzLmgKKyAqCisgKiBUaGlzIGZpbGUgd2FzIGluaXRpYWxseSB3cml0dGVuIGJ5CisgKiBSYW5kb2xwaCBCZW50c29uIDxiZW50c29uQGdyaWVnLnNlYXNsdWcub3JnPiBhbmQgaXMgbWFpbnRhaW5lZCBieQorICogSXZhbiBQYXNzb3MgPGl2YW5AY3ljbGFkZXMuY29tPi4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGdlbmVyYWwgZGVmaW5pdGlvbnMgZm9yIHRoZSBjeWNsYWRlcy5jIGRyaXZlcgorICokTG9nOiBjeWNsYWRlcy5oLHYgJAorICpSZXZpc2lvbiAzLjEgIDIwMDIvMDEvMjkgMTE6MzY6MTYgIGhlbnJpcXVlCisgKmFkZGVkIHRocm90dGxlIGZpZWxkIG9uIHN0cnVjdCBjeWNsYWRlc19wb3J0IHRvIGluZGljYXRlIHdoZXRoZXIgdGhlCisgKnBvcnQgaXMgdGhyb3R0bGVkIG9yIG5vdAorICoKKyAqUmV2aXNpb24gMy4xICAyMDAwLzA0LzE5IDE4OjUyOjUyICBpdmFuCisgKmNvbnZlcnRlZCBhZGRyZXNzIGZpZWxkcyB0byB1bnNpZ25lZCBsb25nIGFuZCBhZGRlZCBmaWVsZHMgZm9yIHBoeXNpY2FsCisgKmFkZHJlc3NlcyBvbiBjeWNsYWRlc19jYXJkIHN0cnVjdHVyZTsKKyAqCisgKlJldmlzaW9uIDMuMCAgMTk5OC8xMS8wMiAxNDoyMDo1OSAgaXZhbgorICphZGRlZCBucG9ydHMgZmllbGQgb24gY3ljbGFkZXNfY2FyZCBzdHJ1Y3R1cmU7CisgKgorICpSZXZpc2lvbiAyLjUgIDE5OTgvMDgvMDMgMTY6NTc6MDEgIGl2YW4KKyAqYWRkZWQgY3ljbGFkZXNfaWRsZV9zdGF0cyBzdHJ1Y3R1cmU7CisgKiAKKyAqUmV2aXNpb24gMi40ICAxOTk4LzA2LzAxIDEyOjA5OjUzICBpdmFuCisgKnJlbW92ZWQgY2xvc2luZ193YWl0MiBmcm9tIGN5Y2xhZGVzX3BvcnQgc3RydWN0dXJlOworICoKKyAqUmV2aXNpb24gMi4zICAxOTk4LzAzLzE2IDE4OjAxOjEyICBpdmFuCisgKmNoYW5nZXMgaW4gdGhlIGN5Y2xhZGVzX3BvcnQgc3RydWN0dXJlIHRvIGdldCBpdCBjbG9zZXIgdG8gdGhlIAorICpzdGFuZGFyZCBzZXJpYWwgcG9ydCBzdHJ1Y3R1cmU7CisgKmFkZGVkIGNvbnN0YW50cyBmb3IgbmV3IGlvY3RsczsKKyAqCisgKlJldmlzaW9uIDIuMiAgMTk5OC8wMi8xNyAxNjo1MDowMCAgaXZhbgorICpjaGFuZ2VzIGluIHRoZSBjeWNsYWRlc19wb3J0IHN0cnVjdHVyZSAoYWRkaXRpb24gb2Ygc2h1dGRvd25fd2FpdCBhbmQgCisgKmNoaXBfcmV2IHZhcmlhYmxlcyk7CisgKmFkZGVkIGNvbnN0YW50cyBmb3IgbmV3IGlvY3RscyBhbmQgZm9yIENEMTQwMCByZXYuIG51bWJlcnMuCisgKgorICpSZXZpc2lvbiAyLjEJMTk5Ny8xMC8yNCAxNjowMzowMCAgaXZhbgorICphZGRlZCByZmxvdyAod2hpY2ggYWxsb3dzIGVuYWJsaW5nIHRoZSBDRDE0MDAgc3BlY2lhbCBmbG93IGNvbnRyb2wgCisgKmZlYXR1cmUpIGFuZCBydHNkdHJfaW52ICh3aGljaCBhbGxvd3MgRFRSL1JUUyBwaW4gaW52ZXJzaW9uKSB0byAKKyAqY3ljbGFkZXNfcG9ydCBzdHJ1Y3R1cmU7CisgKmFkZGVkIEFscGhhIHN1cHBvcnQKKyAqCisgKlJldmlzaW9uIDIuMCAgMTk5Ny8wNi8zMCAxMDozMDowMCAgaXZhbgorICphZGRlZCBzb21lIG5ldyBkb29yYmVsbCBjb21tYW5kIGNvbnN0YW50cyByZWxhdGVkIHRvIElPQ1RMVyBhbmQKKyAqVUFSVCBlcnJvciBzaWduYWxpbmcKKyAqCisgKlJldmlzaW9uIDEuOCAgMTk5Ny8wNi8wMyAxNTozMDowMCAgaXZhbgorICphZGRlZCBjb25zdGFudCBaRklSTV9ITFQKKyAqYWRkZWQgY29uc3RhbnQgQ3lQQ0lfWmVfd2luICggPSAyICogQ3lfUENJX1p3aW4pCisgKgorICpSZXZpc2lvbiAxLjcgIDE5OTcvMDMvMjYgMTA6MzA6MDAgIGRhbmllbAorICpuZXcgZW50cmllcyBhdCB0aGUgZW5kIG9mIGN5Y2xhZGVzX3BvcnQgc3RydWN0IHRvIHJlYWxsb2NhdGUKKyAqdmFyaWFibGVzIGlsbGVnYWxseSBhbGxvY2F0ZWQgd2l0aGluIGNhcmQgbWVtb3J5LgorICoKKyAqUmV2aXNpb24gMS42ICAxOTk2LzA5LzA5IDE4OjM1OjMwICBiZW50c29uCisgKmZvbGQgaW4gY2hhbmdlcyBmb3IgQ3ljbG9tLVogLS0gaW5jbHVkaW5nIHN0cnVjdHVyZXMgZm9yCisgKmNvbW11bmljYXRpbmcgd2l0aCBib2FyZCBhcyB3ZWxsIG1vZGVzdCBjaGFuZ2VzIHRvIG9yaWdpbmFsCisgKnN0cnVjdHVyZXMgdG8gc3VwcG9ydCBuZXcgZmVhdHVyZXMuCisgKgorICpSZXZpc2lvbiAxLjUgIDE5OTUvMTEvMTMgMjE6MTM6MzEgIGJlbnRzb24KKyAqY2hhbmdlcyBzdWdnZXN0ZWQgYnkgTWljaGFlbCBDaGFzdGFpbiA8bWVjQGR1cmFjZWYuc2hvdXQubmV0PgorICp0byBzdXBwb3J0IHVzZSBvZiB0aGlzIGZpbGUgaW4gbm9uLWtlcm5lbCBhcHBsaWNhdGlvbnMKKyAqCisgKgorICovCisKKyNpZm5kZWYgX0xJTlVYX0NZQ0xBREVTX0gKKyNkZWZpbmUgX0xJTlVYX0NZQ0xBREVTX0gKKworc3RydWN0IGN5Y2xhZGVzX21vbml0b3IgeworICAgICAgICB1bnNpZ25lZCBsb25nICAgICAgICAgICBpbnRfY291bnQ7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgICAgICAgICAgIGNoYXJfY291bnQ7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgICAgICAgICAgIGNoYXJfbWF4OworICAgICAgICB1bnNpZ25lZCBsb25nICAgICAgICAgICBjaGFyX2xhc3Q7Cit9OworCisvKgorICogVGhlc2Ugc3RhdHMgYWxsIHJlZmxlY3QgYWN0aXZpdHkgc2luY2UgdGhlIGRldmljZSB3YXMgbGFzdCBpbml0aWFsaXplZC4KKyAqIChpLmUuLCBzaW5jZSB0aGUgcG9ydCB3YXMgb3BlbmVkIHdpdGggbm8gb3RoZXIgcHJvY2Vzc2VzIGFscmVhZHkgaGF2aW5nIGl0CisgKiBvcGVuKQorICovCitzdHJ1Y3QgY3ljbGFkZXNfaWRsZV9zdGF0cyB7CisgICAgdGltZV90CSAgIGluX3VzZTsJLyogVGltZSBkZXZpY2UgaGFzIGJlZW4gaW4gdXNlIChzZWNzKSAqLworICAgIHRpbWVfdAkgICByZWN2X2lkbGU7CS8qIFRpbWUgc2luY2UgbGFzdCBjaGFyIHJlY2VpdmVkIChzZWNzKSAqLworICAgIHRpbWVfdAkgICB4bWl0X2lkbGU7CS8qIFRpbWUgc2luY2UgbGFzdCBjaGFyIHRyYW5zbWl0dGVkIChzZWNzKSAqLworICAgIHVuc2lnbmVkIGxvbmcgIHJlY3ZfYnl0ZXM7CS8qIEJ5dGVzIHJlY2VpdmVkICovCisgICAgdW5zaWduZWQgbG9uZyAgeG1pdF9ieXRlczsJLyogQnl0ZXMgdHJhbnNtaXR0ZWQgKi8KKyAgICB1bnNpZ25lZCBsb25nICBvdmVycnVuczsJLyogSW5wdXQgb3ZlcnJ1bnMgKi8KKyAgICB1bnNpZ25lZCBsb25nICBmcmFtZV9lcnJzOwkvKiBJbnB1dCBmcmFtaW5nIGVycm9ycyAqLworICAgIHVuc2lnbmVkIGxvbmcgIHBhcml0eV9lcnJzOwkvKiBJbnB1dCBwYXJpdHkgZXJyb3JzICovCit9OworCisjZGVmaW5lIENZQ0xBREVTX01BR0lDICAweDQzNTkKKworI2RlZmluZSBDWUdFVE1PTiAgICAgICAgICAgICAgICAweDQzNTkwMQorI2RlZmluZSBDWUdFVFRIUkVTSCAgICAgICAgICAgICAweDQzNTkwMgorI2RlZmluZSBDWVNFVFRIUkVTSCAgICAgICAgICAgICAweDQzNTkwMworI2RlZmluZSBDWUdFVERFRlRIUkVTSCAgICAgICAgICAweDQzNTkwNAorI2RlZmluZSBDWVNFVERFRlRIUkVTSCAgICAgICAgICAweDQzNTkwNQorI2RlZmluZSBDWUdFVFRJTUVPVVQgICAgICAgICAgICAweDQzNTkwNgorI2RlZmluZSBDWVNFVFRJTUVPVVQgICAgICAgICAgICAweDQzNTkwNworI2RlZmluZSBDWUdFVERFRlRJTUVPVVQgICAgICAgICAweDQzNTkwOAorI2RlZmluZSBDWVNFVERFRlRJTUVPVVQgICAgICAgICAweDQzNTkwOQorI2RlZmluZSBDWVNFVFJGTE9XCQkweDQzNTkwYQorI2RlZmluZSBDWUdFVFJGTE9XCQkweDQzNTkwYgorI2RlZmluZSBDWVNFVFJUU0RUUl9JTlYJCTB4NDM1OTBjCisjZGVmaW5lIENZR0VUUlRTRFRSX0lOVgkJMHg0MzU5MGQKKyNkZWZpbmUgQ1laU0VUUE9MTENZQ0xFCQkweDQzNTkwZQorI2RlZmluZSBDWVpHRVRQT0xMQ1lDTEUJCTB4NDM1OTBmCisjZGVmaW5lIENZR0VUQ0QxNDAwVkVSCQkweDQzNTkxMAorI2RlZmluZSBDWUdFVENBUkRJTkZPCQkweDQzNTkxMQorI2RlZmluZQlDWVNFVFdBSVQJCTB4NDM1OTEyCisjZGVmaW5lCUNZR0VUV0FJVAkJMHg0MzU5MTMKKworLyoqKioqKioqKioqKioqKiBDWUNMT00tWiBBRERJVElPTlMgKioqKioqKioqKioqKioqLworCisjZGVmaW5lIENaSU9DICAgICAgICAgICAoJ00nIDw8IDgpCisjZGVmaW5lIENaX05CT0FSRFMgICAgICAoQ1pJT0N8MHhmYSkKKyNkZWZpbmUgQ1pfQk9PVF9TVEFSVCAgIChDWklPQ3wweGZiKQorI2RlZmluZSBDWl9CT09UX0RBVEEgICAgKENaSU9DfDB4ZmMpCisjZGVmaW5lIENaX0JPT1RfRU5EICAgICAoQ1pJT0N8MHhmZCkKKyNkZWZpbmUgQ1pfVEVTVCAgICAgICAgIChDWklPQ3wweGZlKQorCisjZGVmaW5lIENaX0RFRl9QT0xMCShIWi8yNSkKKworI2RlZmluZSBNQVhfQk9BUkQgICAgICAgNCAgICAgICAvKiBNYXggbnVtYmVyIG9mIGJvYXJkcyAqLworI2RlZmluZSBNQVhfREVWICAgICAgICAgMjU2ICAgICAvKiBNYXggbnVtYmVyIG9mIHBvcnRzIHRvdGFsICovCisjZGVmaW5lCUNZWl9NQVhfU1BFRUQJOTIxNjAwCisKKyNkZWZpbmUJQ1laX0ZJRk9fU0laRQkxNgorCisjZGVmaW5lIENZWl9CT09UX05XT1JEUyAweDEwMAorc3RydWN0IENZWl9CT09UX0NUUkwgeworICAgICAgICB1bnNpZ25lZCBzaG9ydCAgbmJvYXJkOworICAgICAgICBpbnQgICAgICAgICAgICAgc3RhdHVzW01BWF9CT0FSRF07CisgICAgICAgIGludCAgICAgICAgICAgICBuY2hhbm5lbFtNQVhfQk9BUkRdOworICAgICAgICBpbnQgICAgICAgICAgICAgZndfcmV2W01BWF9CT0FSRF07CisgICAgICAgIHVuc2lnbmVkIGxvbmcgICBvZmZzZXQ7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgICBkYXRhW0NZWl9CT09UX05XT1JEU107Cit9OworCisKKyNpZm5kZWYgRFBfV0lORE9XX1NJWkUKKy8qICNpbmNsdWRlICJjeWNsb216LmgiICovCisvKioqKioqKioqKioqKioqKioqICoqKioqKioqKioqKioqKioqKiAqKioqKioqKioqKioqKioqKioqLworLyoKKyAqCVRoZSBkYXRhIHR5cGVzIGRlZmluZWQgYmVsb3cgYXJlIHVzZWQgaW4gYWxsIFpGSVJNIGludGVyZmFjZQorICoJZGF0YSBzdHJ1Y3R1cmVzLiBUaGV5IGFjY29tb2RhdGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBIVworICoJYXJjaGl0ZWN0dXJlcyBhbmQgY29tcGlsZXJzLgorICovCisKKyNpZiBkZWZpbmVkKF9fYWxwaGFfXykKK3R5cGVkZWYgdW5zaWduZWQgbG9uZwl1Y2RvdWJsZTsJLyogNjQgYml0cywgdW5zaWduZWQgKi8KK3R5cGVkZWYgdW5zaWduZWQgaW50CXVjbG9uZzsJCS8qIDMyIGJpdHMsIHVuc2lnbmVkICovCisjZWxzZQordHlwZWRlZiB1bnNpZ25lZCBsb25nCXVjbG9uZzsJCS8qIDMyIGJpdHMsIHVuc2lnbmVkICovCisjZW5kaWYKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJdWNzaG9ydDsJLyogMTYgYml0cywgdW5zaWduZWQgKi8KK3R5cGVkZWYgdW5zaWduZWQgY2hhcgl1Y2NoYXI7CQkvKiA4IGJpdHMsIHVuc2lnbmVkICovCisKKy8qCisgKglNZW1vcnkgV2luZG93IFNpemVzCisgKi8KKworI2RlZmluZQlEUF9XSU5ET1dfU0laRQkJKDB4MDAwODAwMDApCS8qIHdpbmRvdyBzaXplIDUxMiBLYiAqLworI2RlZmluZQlaRV9EUF9XSU5ET1dfU0laRQkoMHgwMDEwMDAwMCkJLyogd2luZG93IHNpemUgMSBNYiAoWmUgYW5kCisJCQkJCQkgIDhabyBWLjIgKi8KKyNkZWZpbmUJQ1RSTF9XSU5ET1dfU0laRQkoMHgwMDAwMDA4MCkJLyogcnVudGltZSByZWdzIDEyOCBieXRlcyAqLworCisvKgorICoJQ1VTVE9NX1JFRyAtIEN5Y2xvbS1aL1BDSSBDdXN0b20gUmVnaXN0ZXJzIFNldC4gVGhlIGRyaXZlcgorICoJbm9ybWFsbHkgd2lsbCBhY2Nlc3Mgb25seSBpbnRlcmVzdGVkIG9uIHRoZSBmcGdhX2lkLCBmcGdhX3ZlcnNpb24sCisgKglzdGFydF9jcHUgYW5kIHN0b3BfY3B1LgorICovCisKK3N0cnVjdAlDVVNUT01fUkVHIHsKKwl1Y2xvbmcJZnBnYV9pZDsJCS8qIEZQR0EgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIgKi8KKwl1Y2xvbmcJZnBnYV92ZXJzaW9uOwkJLyogRlBHQSBWZXJzaW9uIE51bWJlciBSZWdpc3RlciAqLworCXVjbG9uZwljcHVfc3RhcnQ7CQkvKiBDUFUgc3RhcnQgUmVnaXN0ZXIgKHdyaXRlKSAqLworCXVjbG9uZwljcHVfc3RvcDsJCS8qIENQVSBzdG9wIFJlZ2lzdGVyICh3cml0ZSkgKi8KKwl1Y2xvbmcJbWlzY19yZWc7CQkvKiBNaXNjZWxhbmVvdXMgUmVnaXN0ZXIgKi8KKwl1Y2xvbmcJaWR0X21vZGU7CQkvKiBJRFQgbW9kZSBSZWdpc3RlciAqLworCXVjbG9uZwl1YXJ0X2lycV9zdGF0dXM7CS8qIFVBUlQgSVJRIHN0YXR1cyBSZWdpc3RlciAqLworCXVjbG9uZwljbGVhcl90aW1lcjBfaXJxOwkvKiBDbGVhciB0aW1lciBpbnRlcnJ1cHQgUmVnaXN0ZXIgKi8KKwl1Y2xvbmcJY2xlYXJfdGltZXIxX2lycTsJLyogQ2xlYXIgdGltZXIgaW50ZXJydXB0IFJlZ2lzdGVyICovCisJdWNsb25nCWNsZWFyX3RpbWVyMl9pcnE7CS8qIENsZWFyIHRpbWVyIGludGVycnVwdCBSZWdpc3RlciAqLworCXVjbG9uZwl0ZXN0X3JlZ2lzdGVyOwkJLyogVGVzdCBSZWdpc3RlciAqLworCXVjbG9uZwl0ZXN0X2NvdW50OwkJLyogVGVzdCBDb3VudCBSZWdpc3RlciAqLworCXVjbG9uZwl0aW1lcl9zZWxlY3Q7CQkvKiBUaW1lciBzZWxlY3QgcmVnaXN0ZXIgKi8KKwl1Y2xvbmcJcHJfdWFydF9pcnFfc3RhdHVzOwkvKiBQcmlvcml0aXplZCBVQVJUIElSUSBzdGF0IFJlZyAqLworCXVjbG9uZwlyYW1fd2FpdF9zdGF0ZTsJCS8qIFJBTSB3YWl0LXN0YXRlIFJlZ2lzdGVyICovCisJdWNsb25nCXVhcnRfd2FpdF9zdGF0ZTsJLyogVUFSVCB3YWl0LXN0YXRlIFJlZ2lzdGVyICovCisJdWNsb25nCXRpbWVyX3dhaXRfc3RhdGU7CS8qIHRpbWVyIHdhaXQtc3RhdGUgUmVnaXN0ZXIgKi8KKwl1Y2xvbmcJYWNrX3dhaXRfc3RhdGU7CQkvKiBBQ0sgd2FpdCBTdGF0ZSBSZWdpc3RlciAqLworfTsKKworLyoKKyAqCVJVTlRJTUVfOTA2MCAtIFBMWCBQQ0k5MDYwRVMgbG9jYWwgY29uZmlndXJhdGlvbiBhbmQgc2hhcmVkIHJ1bnRpbWUKKyAqCXJlZ2lzdGVycy4gVGhpcyBzdHJ1Y3R1cmUgY2FuIGJlIHVzZWQgdG8gYWNjZXNzIHRoZSA5MDYwIHJlZ2lzdGVycworICoJKG1lbW9yeSBtYXBwZWQpLgorICovCisKK3N0cnVjdCBSVU5USU1FXzkwNjAgeworCXVjbG9uZwlsb2NfYWRkcl9yYW5nZTsJLyogMDBoIC0gTG9jYWwgQWRkcmVzcyBSYW5nZSAqLworCXVjbG9uZwlsb2NfYWRkcl9iYXNlOwkvKiAwNGggLSBMb2NhbCBBZGRyZXNzIEJhc2UgKi8KKwl1Y2xvbmcJbG9jX2FyYml0cjsJLyogMDhoIC0gTG9jYWwgQXJiaXRyYXRpb24gKi8KKwl1Y2xvbmcJZW5kaWFuX2Rlc2NyOwkvKiAwQ2ggLSBCaWcvTGl0dGxlIEVuZGlhbiBEZXNjcmlwdG9yICovCisJdWNsb25nCWxvY19yb21fcmFuZ2U7CS8qIDEwaCAtIExvY2FsIFJPTSBSYW5nZSAqLworCXVjbG9uZwlsb2Nfcm9tX2Jhc2U7CS8qIDE0aCAtIExvY2FsIFJPTSBCYXNlICovCisJdWNsb25nCWxvY19idXNfZGVzY3I7CS8qIDE4aCAtIExvY2FsIEJ1cyBkZXNjcmlwdG9yICovCisJdWNsb25nCWxvY19yYW5nZV9tc3Q7CS8qIDFDaCAtIExvY2FsIFJhbmdlIGZvciBNYXN0ZXIgdG8gUENJICovCisJdWNsb25nCWxvY19iYXNlX21zdDsJLyogMjBoIC0gTG9jYWwgQmFzZSBmb3IgTWFzdGVyIFBDSSAqLworCXVjbG9uZwlsb2NfcmFuZ2VfaW87CS8qIDI0aCAtIExvY2FsIFJhbmdlIGZvciBNYXN0ZXIgSU8gKi8KKwl1Y2xvbmcJcGNpX2Jhc2VfbXN0OwkvKiAyOGggLSBQQ0kgQmFzZSBmb3IgTWFzdGVyIFBDSSAqLworCXVjbG9uZwlwY2lfY29uZl9pbzsJLyogMkNoIC0gUENJIGNvbmZpZ3VyYXRpb24gZm9yIE1hc3RlciBJTyAqLworCXVjbG9uZwlmaWxsZXIxOwkvKiAzMGggKi8KKwl1Y2xvbmcJZmlsbGVyMjsJLyogMzRoICovCisJdWNsb25nCWZpbGxlcjM7CS8qIDM4aCAqLworCXVjbG9uZwlmaWxsZXI0OwkvKiAzQ2ggKi8KKwl1Y2xvbmcJbWFpbF9ib3hfMDsJLyogNDBoIC0gTWFpbCBCb3ggMCAqLworCXVjbG9uZwltYWlsX2JveF8xOwkvKiA0NGggLSBNYWlsIEJveCAxICovCisJdWNsb25nCW1haWxfYm94XzI7CS8qIDQ4aCAtIE1haWwgQm94IDIgKi8KKwl1Y2xvbmcJbWFpbF9ib3hfMzsJLyogNENoIC0gTWFpbCBCb3ggMyAqLworCXVjbG9uZwlmaWxsZXI1OwkvKiA1MGggKi8KKwl1Y2xvbmcJZmlsbGVyNjsJLyogNTRoICovCisJdWNsb25nCWZpbGxlcjc7CS8qIDU4aCAqLworCXVjbG9uZwlmaWxsZXI4OwkvKiA1Q2ggKi8KKwl1Y2xvbmcJcGNpX2Rvb3JiZWxsOwkvKiA2MGggLSBQQ0kgdG8gTG9jYWwgRG9vcmJlbGwgKi8KKwl1Y2xvbmcJbG9jX2Rvb3JiZWxsOwkvKiA2NGggLSBMb2NhbCB0byBQQ0kgRG9vcmJlbGwgKi8KKwl1Y2xvbmcJaW50cl9jdHJsX3N0YXQ7CS8qIDY4aCAtIEludGVycnVwdCBDb250cm9sL1N0YXR1cyAqLworCXVjbG9uZwlpbml0X2N0cmw7CS8qIDZDaCAtIEVFUFJPTSBjb250cm9sLCBJbml0IENvbnRyb2wsIGV0YyAqLworfTsKKworLyogVmFsdWVzIGZvciB0aGUgTG9jYWwgQmFzZSBBZGRyZXNzIHJlLW1hcCByZWdpc3RlciAqLworCisjZGVmaW5lCVdJTl9SQU0JCTB4MDAwMDAwMDFMCS8qIHNldCB0aGUgc2xpZGluZyB3aW5kb3cgdG8gUkFNICovCisjZGVmaW5lCVdJTl9DUkVHCTB4MTQwMDAwMDFMCS8qIHNldCB0aGUgd2luZG93IHRvIGN1c3RvbSBSZWdpc3RlcnMgKi8KKworLyogVmFsdWVzIHRpbWVyIHNlbGVjdCByZWdpc3RlcnMgKi8KKworI2RlZmluZQlUSU1FUl9CWV8xTQkweDAwCQkvKiBjbG9jayBkaXZpZGVkIGJ5IDFNICovCisjZGVmaW5lCVRJTUVSX0JZXzI1NksJMHgwMQkJLyogY2xvY2sgZGl2aWRlZCBieSAyNTZrICovCisjZGVmaW5lCVRJTUVSX0JZXzEyOEsJMHgwMgkJLyogY2xvY2sgZGl2aWRlZCBieSAxMjhrICovCisjZGVmaW5lCVRJTUVSX0JZXzMySwkweDAzCQkvKiBjbG9jayBkaXZpZGVkIGJ5IDMyayAqLworCisvKioqKioqKioqKioqKioqKioqICoqKioqKioqKioqKioqKioqKiAqKioqKioqKioqKioqKioqKioqLworI2VuZGlmCisKKyNpZm5kZWYgWkZJUk1fSUQKKy8qICNpbmNsdWRlICJ6ZndpbnQuaCIgKi8KKy8qKioqKioqKioqKioqKioqKiogKioqKioqKioqKioqKioqKioqICoqKioqKioqKioqKioqKioqKiovCisvKgorICoJVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBkZWZpbml0aW9ucyBmb3IgaW50ZXJmYWNpbmcgd2l0aCB0aGUKKyAqCUN5Y2xvbS1aIFpGSVJNIEZpcm13YXJlLgorICovCisKKy8qIEdlbmVyYWwgQ29uc3RhbnQgZGVmaW5pdGlvbnMgKi8KKworI2RlZmluZQlNQVhfQ0hBTgk2NAkJLyogbWF4IG51bWJlciBvZiBjaGFubmVscyBwZXIgYm9hcmQgKi8KKworLyogZmlybXdhcmUgaWQgc3RydWN0dXJlIChzZXQgYWZ0ZXIgYm9vdCkgKi8KKworI2RlZmluZSBJRF9BRERSRVNTCTB4MDAwMDAxODBMCS8qIHNpZ25hdHVyZS9wb2ludGVyIGFkZHJlc3MgKi8KKyNkZWZpbmUJWkZJUk1fSUQJMHg1NTU3NDY1QUwJLyogWkZJUk0vVSBzaWduYXR1cmUgKi8KKyNkZWZpbmUJWkZJUk1fSExUCTB4NTk1MDVCNUNMCS8qIFpGSVJNIG5lZWRzIGV4dGVybmFsIHBvd2VyIHN1cHBseSAqLworI2RlZmluZQlaRklSTV9SU1QJMHg1NjA0MDY3NEwJLyogUlNUIHNpZ25hbCAoZHVlIHRvIEZXIHJlc2V0KSAqLworCisjZGVmaW5lCVpGX1RJTkFDVF9ERUYJMTAwMAkJLyogZGVmYXVsdCBpbmFjdGl2aXR5IHRpbWVvdXQgCisJCQkJCSAgICgxMDAwIG1zKSAqLworI2RlZmluZQlaRl9USU5BQ1QJWkZfVElOQUNUX0RFRgorCitzdHJ1Y3QJRklSTV9JRCB7CisJdWNsb25nCXNpZ25hdHVyZTsJCS8qIFpGSVJNL1Ugc2lnbmF0dXJlICovCisJdWNsb25nCXpmd2N0cmxfYWRkcjsJCS8qIHBvaW50ZXIgdG8gWkZXX0NUUkwgc3RydWN0dXJlICovCit9OworCisvKiBPcC4gU3lzdGVtIGlkICovCisKKyNkZWZpbmUJQ19PU19MSU5VWAkweDAwMDAwMDMwCS8qIGdlbmVyaWMgTGludXggc3lzdGVtICovCisKKy8qIGNoYW5uZWwgb3BfbW9kZSAqLworCisjZGVmaW5lCUNfQ0hfRElTQUJMRQkweDAwMDAwMDAwCS8qIGNoYW5uZWwgaXMgZGlzYWJsZWQgKi8KKyNkZWZpbmUJQ19DSF9UWEVOQUJMRQkweDAwMDAwMDAxCS8qIGNoYW5uZWwgVHggZW5hYmxlZCAqLworI2RlZmluZQlDX0NIX1JYRU5BQkxFCTB4MDAwMDAwMDIJLyogY2hhbm5lbCBSeCBlbmFibGVkICovCisjZGVmaW5lCUNfQ0hfRU5BQkxFCTB4MDAwMDAwMDMJLyogY2hhbm5lbCBUeC9SeCBlbmFibGVkICovCisjZGVmaW5lCUNfQ0hfTE9PUEJBQ0sJMHgwMDAwMDAwNAkvKiBMb29wYmFjayBtb2RlICovCisKKy8qIGNvbW1fcGFyaXR5IC0gcGFyaXR5ICovCisKKyNkZWZpbmUJQ19QUl9OT05FCTB4MDAwMDAwMDAJLyogTm9uZSAqLworI2RlZmluZQlDX1BSX09ERAkweDAwMDAwMDAxCS8qIE9kZCAqLworI2RlZmluZSBDX1BSX0VWRU4JMHgwMDAwMDAwMgkvKiBFdmVuICovCisjZGVmaW5lIENfUFJfTUFSSwkweDAwMDAwMDA0CS8qIE1hcmsgKi8KKyNkZWZpbmUgQ19QUl9TUEFDRQkweDAwMDAwMDA4CS8qIFNwYWNlICovCisjZGVmaW5lIENfUFJfUEFSSVRZCTB4MDAwMDAwZmYKKworI2RlZmluZQlDX1BSX0RJU0NBUkQJMHgwMDAwMDEwMAkvKiBkaXNjYXJkIGNoYXIgd2l0aCBmcmFtZS9wYXIgZXJyb3IgKi8KKyNkZWZpbmUgQ19QUl9JR05PUkUJMHgwMDAwMDIwMAkvKiBpZ25vcmUgZnJhbWUvcGFyIGVycm9yICovCisKKy8qIGNvbW1fZGF0YV9sIC0gZGF0YSBsZW5ndGggYW5kIHN0b3AgYml0cyAqLworCisjZGVmaW5lIENfRExfQ1M1CTB4MDAwMDAwMDEKKyNkZWZpbmUgQ19ETF9DUzYJMHgwMDAwMDAwMgorI2RlZmluZSBDX0RMX0NTNwkweDAwMDAwMDA0CisjZGVmaW5lIENfRExfQ1M4CTB4MDAwMDAwMDgKKyNkZWZpbmUJQ19ETF9DUwkJMHgwMDAwMDAwZgorI2RlZmluZSBDX0RMXzFTVE9QCTB4MDAwMDAwMTAKKyNkZWZpbmUgQ19ETF8xNVNUT1AJMHgwMDAwMDAyMAorI2RlZmluZSBDX0RMXzJTVE9QCTB4MDAwMDAwNDAKKyNkZWZpbmUJQ19ETF9TVE9QCTB4MDAwMDAwZjAKKworLyogaW50ZXJydXB0IGVuYWJsaW5nL3N0YXR1cyAqLworCisjZGVmaW5lCUNfSU5fRElTQUJMRQkweDAwMDAwMDAwCS8qIHplcm8sIGRpc2FibGUgaW50ZXJydXB0cyAqLworI2RlZmluZQlDX0lOX1RYQkVNUFRZCTB4MDAwMDAwMDEJLyogdHggYnVmZmVyIGVtcHR5ICovCisjZGVmaW5lCUNfSU5fVFhMT1dXTQkweDAwMDAwMDAyCS8qIHR4IGJ1ZmZlciBiZWxvdyBMV00gKi8KKyNkZWZpbmUJQ19JTl9SWEhJV00JMHgwMDAwMDAxMAkvKiByeCBidWZmZXIgYWJvdmUgSFdNICovCisjZGVmaW5lCUNfSU5fUlhOTkRUCTB4MDAwMDAwMjAJLyogcnggbm8gbmV3IGRhdGEgdGltZW91dCAqLworI2RlZmluZQlDX0lOX01EQ0QJMHgwMDAwMDEwMAkvKiBtb2RlbSBEQ0QgY2hhbmdlICovCisjZGVmaW5lCUNfSU5fTURTUgkweDAwMDAwMjAwCS8qIG1vZGVtIERTUiBjaGFuZ2UgKi8KKyNkZWZpbmUJQ19JTl9NUkkJMHgwMDAwMDQwMAkvKiBtb2RlbSBSSSBjaGFuZ2UgKi8KKyNkZWZpbmUJQ19JTl9NQ1RTCTB4MDAwMDA4MDAJLyogbW9kZW0gQ1RTIGNoYW5nZSAqLworI2RlZmluZQlDX0lOX1JYQlJLCTB4MDAwMDEwMDAJLyogQnJlYWsgcmVjZWl2ZWQgKi8KKyNkZWZpbmUJQ19JTl9QUl9FUlJPUgkweDAwMDAyMDAwCS8qIHBhcml0eSBlcnJvciAqLworI2RlZmluZQlDX0lOX0ZSX0VSUk9SCTB4MDAwMDQwMDAJLyogZnJhbWUgZXJyb3IgKi8KKyNkZWZpbmUgQ19JTl9PVlJfRVJST1IgIDB4MDAwMDgwMDAgICAgICAvKiBvdmVycnVuIGVycm9yICovCisjZGVmaW5lIENfSU5fUlhPRkwJMHgwMDAxMDAwMCAgICAgIC8qIFJYIGJ1ZmZlciBvdmVyZmxvdyAqLworI2RlZmluZSBDX0lOX0lPQ1RMVwkweDAwMDIwMDAwICAgICAgLyogSS9PIGNvbnRyb2wgdy8gd2FpdCAqLworI2RlZmluZSBDX0lOX01SVFMJMHgwMDA0MDAwMAkvKiBtb2RlbSBSVFMgZHJvcCAqLworI2RlZmluZSBDX0lOX0lDSEFSCTB4MDAwODAwMDAKKyAKKy8qIGZsb3cgY29udHJvbCAqLworCisjZGVmaW5lCUNfRkxfT1hYCTB4MDAwMDAwMDEJLyogb3V0cHV0IFhvbi9Yb2ZmIGZsb3cgY29udHJvbCAqLworI2RlZmluZQlDX0ZMX0lYWAkweDAwMDAwMDAyCS8qIG91dHB1dCBYb24vWG9mZiBmbG93IGNvbnRyb2wgKi8KKyNkZWZpbmUgQ19GTF9PSVhBTlkJMHgwMDAwMDAwNAkvKiBvdXRwdXQgWG9uL1hvZmYgKGFueSB4b24pICovCisjZGVmaW5lCUNfRkxfU1dGTE9XCTB4MDAwMDAwMGYKKworLyogZmxvdyBzdGF0dXMgKi8KKworI2RlZmluZQlDX0ZTX1RYSURMRQkweDAwMDAwMDAwCS8qIG5vIFR4IGRhdGEgaW4gdGhlIGJ1ZmZlciBvciBVQVJUICovCisjZGVmaW5lCUNfRlNfU0VORElORwkweDAwMDAwMDAxCS8qIFVBUlQgaXMgc2VuZGluZyBkYXRhICovCisjZGVmaW5lCUNfRlNfU1dGTE9XCTB4MDAwMDAwMDIJLyogVHggaXMgc3RvcHBlZCBieSByZWNlaXZlZCBYb2ZmICovCisKKy8qIHJzX2NvbnRyb2wvcnNfc3RhdHVzIFJTLTIzMiBzaWduYWxzICovCisKKyNkZWZpbmUgQ19SU19QQVJBTQkweDgwMDAwMDAwCS8qIEluZGljYXRlcyBwcmVzZW5jZSBvZiBwYXJhbWV0ZXIgaW4gCisJCQkJCSAgIElPQ1RMTSBjb21tYW5kICovCisjZGVmaW5lCUNfUlNfUlRTCTB4MDAwMDAwMDEJLyogUlRTICovCisjZGVmaW5lCUNfUlNfRFRSCTB4MDAwMDAwMDQJLyogRFRSICovCisjZGVmaW5lCUNfUlNfRENECTB4MDAwMDAxMDAJLyogQ0QgKi8KKyNkZWZpbmUJQ19SU19EU1IJMHgwMDAwMDIwMAkvKiBEU1IgKi8KKyNkZWZpbmUJQ19SU19SSQkJMHgwMDAwMDQwMAkvKiBSSSAqLworI2RlZmluZQlDX1JTX0NUUwkweDAwMDAwODAwCS8qIENUUyAqLworCisvKiBjb21tYW5kcyBIb3N0IDwtPiBCb2FyZCAqLworCisjZGVmaW5lCUNfQ01fUkVTRVQJMHgwMQkJLyogcmVzZXQvZmx1c2ggYnVmZmVycyAqLworI2RlZmluZQlDX0NNX0lPQ1RMCTB4MDIJCS8qIHJlLXJlYWQgQ0hfQ1RSTCAqLworI2RlZmluZQlDX0NNX0lPQ1RMVwkweDAzCQkvKiByZS1yZWFkIENIX0NUUkwsIGludHIgd2hlbiBkb25lICovCisjZGVmaW5lCUNfQ01fSU9DVExNCTB4MDQJCS8qIFJTLTIzMiBvdXRwdXRzIGNoYW5nZSAqLworI2RlZmluZQlDX0NNX1NFTkRYT0ZGCTB4MTAJCS8qIHNlbmQgWG9mZiAqLworI2RlZmluZQlDX0NNX1NFTkRYT04JMHgxMQkJLyogc2VuZCBYb24gKi8KKyNkZWZpbmUgQ19DTV9DTEZMT1cJMHgxMgkJLyogQ2xlYXIgZmxvdyBjb250cm9sIChyZXN1bWUpICovCisjZGVmaW5lCUNfQ01fU0VOREJSSwkweDQxCQkvKiBzZW5kIGJyZWFrICovCisjZGVmaW5lCUNfQ01fSU5UQkFDSwkweDQyCQkvKiBJbnRlcnJ1cHQgYmFjayAqLworI2RlZmluZQlDX0NNX1NFVF9CUkVBSwkweDQzCQkvKiBUeCBicmVhayBvbiAqLworI2RlZmluZQlDX0NNX0NMUl9CUkVBSwkweDQ0CQkvKiBUeCBicmVhayBvZmYgKi8KKyNkZWZpbmUJQ19DTV9DTURfRE9ORQkweDQ1CQkvKiBQcmV2aW91cyBjb21tYW5kIGRvbmUgKi8KKyNkZWZpbmUgQ19DTV9JTlRCQUNLMgkweDQ2CQkvKiBBbHRlcm5hdGUgSW50ZXJydXB0IGJhY2sgKi8KKyNkZWZpbmUJQ19DTV9USU5BQ1QJMHg1MQkJLyogc2V0IGluYWN0aXZpdHkgZGV0ZWN0aW9uICovCisjZGVmaW5lCUNfQ01fSVJRX0VOQkwJMHg1MgkJLyogZW5hYmxlIGdlbmVyYXRpb24gb2YgaW50ZXJydXB0cyAqLworI2RlZmluZQlDX0NNX0lSUV9EU0JMCTB4NTMJCS8qIGRpc2FibGUgZ2VuZXJhdGlvbiBvZiBpbnRlcnJ1cHRzICovCisjZGVmaW5lCUNfQ01fQUNLX0VOQkwJMHg1NAkJLyogZW5hYmxlIGFja25vd2xlZGdlZCBpbnRlcnJ1cHQgbW9kZSAqLworI2RlZmluZQlDX0NNX0FDS19EU0JMCTB4NTUJCS8qIGRpc2FibGUgYWNrbm93bGVkZ2VkIGludHIgbW9kZSAqLworI2RlZmluZQlDX0NNX0ZMVVNIX1JYCTB4NTYJCS8qIGZsdXNoZXMgUnggYnVmZmVyICovCisjZGVmaW5lCUNfQ01fRkxVU0hfVFgJMHg1NwkJLyogZmx1c2hlcyBUeCBidWZmZXIgKi8KKyNkZWZpbmUgQ19DTV9RX0VOQUJMRQkweDU4CQkvKiBlbmFibGVzIHF1ZXVlIGFjY2VzcyBmcm9tIHRoZSAKKwkJCQkJICAgZHJpdmVyICovCisjZGVmaW5lIENfQ01fUV9ESVNBQkxFICAweDU5ICAgICAgICAgICAgLyogZGlzYWJsZXMgcXVldWUgYWNjZXNzIGZyb20gdGhlIAorCQkJCQkgICBkcml2ZXIgKi8KKworI2RlZmluZQlDX0NNX1RYQkVNUFRZCTB4NjAJCS8qIFR4IGJ1ZmZlciBpcyBlbXB0eSAqLworI2RlZmluZQlDX0NNX1RYTE9XV00JMHg2MQkJLyogVHggYnVmZmVyIGxvdyB3YXRlciBtYXJrICovCisjZGVmaW5lCUNfQ01fUlhISVdNCTB4NjIJCS8qIFJ4IGJ1ZmZlciBoaWdoIHdhdGVyIG1hcmsgKi8KKyNkZWZpbmUJQ19DTV9SWE5ORFQJMHg2MwkJLyogcnggbm8gbmV3IGRhdGEgdGltZW91dCAqLworI2RlZmluZQlDX0NNX1RYRkVNUFRZCTB4NjQKKyNkZWZpbmUJQ19DTV9JQ0hBUgkweDY1CisjZGVmaW5lCUNfQ01fTURDRAkweDcwCQkvKiBtb2RlbSBEQ0QgY2hhbmdlICovCisjZGVmaW5lCUNfQ01fTURTUgkweDcxCQkvKiBtb2RlbSBEU1IgY2hhbmdlICovCisjZGVmaW5lCUNfQ01fTVJJCTB4NzIJCS8qIG1vZGVtIFJJIGNoYW5nZSAqLworI2RlZmluZQlDX0NNX01DVFMJMHg3MwkJLyogbW9kZW0gQ1RTIGNoYW5nZSAqLworI2RlZmluZSBDX0NNX01SVFMJMHg3NAkJLyogbW9kZW0gUlRTIGRyb3AgKi8KKyNkZWZpbmUJQ19DTV9SWEJSSwkweDg0CQkvKiBCcmVhayByZWNlaXZlZCAqLworI2RlZmluZQlDX0NNX1BSX0VSUk9SCTB4ODUJCS8qIFBhcml0eSBlcnJvciAqLworI2RlZmluZQlDX0NNX0ZSX0VSUk9SCTB4ODYJCS8qIEZyYW1lIGVycm9yICovCisjZGVmaW5lIENfQ01fT1ZSX0VSUk9SICAweDg3ICAgICAgICAgICAgLyogT3ZlcnJ1biBlcnJvciAqLworI2RlZmluZSBDX0NNX1JYT0ZMCTB4ODggICAgICAgICAgICAvKiBSWCBidWZmZXIgb3ZlcmZsb3cgKi8KKyNkZWZpbmUJQ19DTV9DTURFUlJPUgkweDkwCQkvKiBjb21tYW5kIGVycm9yICovCisjZGVmaW5lCUNfQ01fRkFUQUwJMHg5MQkJLyogZmF0YWwgZXJyb3IgKi8KKyNkZWZpbmUJQ19DTV9IV19SRVNFVAkweDkyCQkvKiByZXNldCBib2FyZCAqLworCisvKgorICoJQ0hfQ1RSTCAtIFRoaXMgcGVyIHBvcnQgc3RydWN0dXJlIGNvbnRhaW5zIGFsbCBwYXJhbWV0ZXJzCisgKgl0aGF0IGNvbnRyb2wgYW4gc3BlY2lmaWMgcG9ydC4gSXQgY2FuIGJlIHNlZW4gYXMgdGhlCisgKgljb25maWd1cmF0aW9uIHJlZ2lzdGVycyBvZiBhICJzdXBlci1zZXJpYWwtY29udHJvbGxlciIuCisgKi8KKworc3RydWN0IENIX0NUUkwgeworCXVjbG9uZwlvcF9tb2RlOwkvKiBvcGVyYXRpb24gbW9kZSAqLworCXVjbG9uZwlpbnRyX2VuYWJsZTsJLyogaW50ZXJydXB0IG1hc2tpbmcgKi8KKwl1Y2xvbmcJc3dfZmxvdzsJLyogU1cgZmxvdyBjb250cm9sICovCisJdWNsb25nCWZsb3dfc3RhdHVzOwkvKiBvdXRwdXQgZmxvdyBzdGF0dXMgKi8KKwl1Y2xvbmcJY29tbV9iYXVkOwkvKiBiYXVkIHJhdGUgIC0gbnVtZXJpY2FsbHkgc3BlY2lmaWVkICovCisJdWNsb25nCWNvbW1fcGFyaXR5OwkvKiBwYXJpdHkgKi8KKwl1Y2xvbmcJY29tbV9kYXRhX2w7CS8qIGRhdGEgbGVuZ3RoL3N0b3AgKi8KKwl1Y2xvbmcJY29tbV9mbGFnczsJLyogb3RoZXIgZmxhZ3MgKi8KKwl1Y2xvbmcJaHdfZmxvdzsJLyogSFcgZmxvdyBjb250cm9sICovCisJdWNsb25nCXJzX2NvbnRyb2w7CS8qIFJTLTIzMiBvdXRwdXRzICovCisJdWNsb25nCXJzX3N0YXR1czsJLyogUlMtMjMyIGlucHV0cyAqLworCXVjbG9uZwlmbG93X3hvbjsJLyogeG9uIGNoYXIgKi8KKwl1Y2xvbmcJZmxvd194b2ZmOwkvKiB4b2ZmIGNoYXIgKi8KKwl1Y2xvbmcJaHdfb3ZlcmZsb3c7CS8qIGh3IG92ZXJmbG93IGNvdW50ZXIgKi8KKwl1Y2xvbmcJc3dfb3ZlcmZsb3c7CS8qIHN3IG92ZXJmbG93IGNvdW50ZXIgKi8KKwl1Y2xvbmcJY29tbV9lcnJvcjsJLyogZnJhbWUvcGFyaXR5IGVycm9yIGNvdW50ZXIgKi8KKwl1Y2xvbmcgaWNoYXI7CisJdWNsb25nIGZpbGxlcls3XTsKK307CisKKworLyoKKyAqCUJVRl9DVFJMIC0gVGhpcyBwZXIgY2hhbm5lbCBzdHJ1Y3R1cmUgY29udGFpbnMKKyAqCWFsbCBUeCBhbmQgUnggYnVmZmVyIGNvbnRyb2wgZm9yIGEgZ2l2ZW4gY2hhbm5lbC4KKyAqLworCitzdHJ1Y3QJQlVGX0NUUkwJeworCXVjbG9uZwlmbGFnX2RtYTsJLyogYnVmZmVycyBhcmUgaW4gSG9zdCBtZW1vcnkgKi8KKwl1Y2xvbmcJdHhfYnVmYWRkcjsJLyogYWRkcmVzcyBvZiB0aGUgdHggYnVmZmVyICovCisJdWNsb25nCXR4X2J1ZnNpemU7CS8qIHR4IGJ1ZmZlciBzaXplICovCisJdWNsb25nCXR4X3RocmVzaG9sZDsJLyogdHggbG93IHdhdGVyIG1hcmsgKi8KKwl1Y2xvbmcJdHhfZ2V0OwkJLyogdGFpbCBpbmRleCB0eCBidWYgKi8KKwl1Y2xvbmcJdHhfcHV0OwkJLyogaGVhZCBpbmRleCB0eCBidWYgKi8KKwl1Y2xvbmcJcnhfYnVmYWRkcjsJLyogYWRkcmVzcyBvZiB0aGUgcnggYnVmZmVyICovCisJdWNsb25nCXJ4X2J1ZnNpemU7CS8qIHJ4IGJ1ZmZlciBzaXplICovCisJdWNsb25nCXJ4X3RocmVzaG9sZDsJLyogcnggaGlnaCB3YXRlciBtYXJrICovCisJdWNsb25nCXJ4X2dldDsJCS8qIHRhaWwgaW5kZXggcnggYnVmICovCisJdWNsb25nCXJ4X3B1dDsJCS8qIGhlYWQgaW5kZXggcnggYnVmICovCisJdWNsb25nCWZpbGxlcls1XTsJLyogZmlsbGVyIHRvIGFsaWduIHN0cnVjdHVyZXMgKi8KK307CisKKy8qCisgKglCT0FSRF9DVFJMIC0gVGhpcyBwZXIgYm9hcmQgc3RydWN0dXJlIGNvbnRhaW5zIGFsbCBnbG9iYWwgCisgKgljb250cm9sIGZpZWxkcyByZWxhdGVkIHRvIHRoZSBib2FyZC4KKyAqLworCitzdHJ1Y3QgQk9BUkRfQ1RSTCB7CisKKwkvKiBzdGF0aWMgaW5mbyBwcm92aWRlZCBieSB0aGUgb24tYm9hcmQgQ1BVICovCisJdWNsb25nCW5fY2hhbm5lbDsJLyogbnVtYmVyIG9mIGNoYW5uZWxzICovCisJdWNsb25nCWZ3X3ZlcnNpb247CS8qIGZpcm13YXJlIHZlcnNpb24gKi8KKworCS8qIHN0YXRpYyBpbmZvIHByb3ZpZGVkIGJ5IHRoZSBkcml2ZXIgKi8KKwl1Y2xvbmcJb3Bfc3lzdGVtOwkvKiBvcF9zeXN0ZW0gaWQgKi8KKwl1Y2xvbmcJZHJfdmVyc2lvbjsJLyogZHJpdmVyIHZlcnNpb24gKi8KKworCS8qIGJvYXJkIGNvbnRyb2wgYXJlYSAqLworCXVjbG9uZwlpbmFjdGl2aXR5OwkvKiBpbmFjdGl2aXR5IGNvbnRyb2wgKi8KKworCS8qIGhvc3QgdG8gRlcgY29tbWFuZHMgKi8KKwl1Y2xvbmcJaGNtZF9jaGFubmVsOwkvKiBjaGFubmVsIG51bWJlciAqLworCXVjbG9uZwloY21kX3BhcmFtOwkvKiBwb2ludGVyIHRvIHBhcmFtZXRlcnMgKi8KKworCS8qIEZXIHRvIEhvc3QgY29tbWFuZHMgKi8KKwl1Y2xvbmcJZndjbWRfY2hhbm5lbDsJLyogY2hhbm5lbCBudW1iZXIgKi8KKwl1Y2xvbmcJZndjbWRfcGFyYW07CS8qIHBvaW50ZXIgdG8gcGFyYW1ldGVycyAqLworCXVjbG9uZwl6Zl9pbnRfcXVldWVfYWRkcjsgLyogb2Zmc2V0IGZvciBJTlRfUVVFVUUgc3RydWN0dXJlICovCisKKwkvKiBmaWxsZXIgc28gdGhlIHN0cnVjdHVyZXMgYXJlIGFsaWduZWQgKi8KKwl1Y2xvbmcJZmlsbGVyWzZdOworfTsKKworLyogSG9zdCBJbnRlcnJ1cHQgUXVldWUgKi8KKworI2RlZmluZSBRVUVVRV9TSVpFCSgxMCpNQVhfQ0hBTikKKworc3RydWN0CUlOVF9RVUVVRSB7CisJdW5zaWduZWQgY2hhcglpbnRyX2NvZGVbUVVFVUVfU0laRV07CisJdW5zaWduZWQgbG9uZwljaGFubmVsW1FVRVVFX1NJWkVdOworCXVuc2lnbmVkIGxvbmcJcGFyYW1bUVVFVUVfU0laRV07CisJdW5zaWduZWQgbG9uZwlwdXQ7CisJdW5zaWduZWQgbG9uZwlnZXQ7Cit9OworCisvKgorICoJWkZXX0NUUkwgLSBUaGlzIGlzIHRoZSBkYXRhIHN0cnVjdHVyZSB0aGF0IGluY2x1ZGVzIGFsbCBvdGhlcgorICoJZGF0YSBzdHJ1Y3R1cmVzIHVzZWQgYnkgdGhlIEZpcm13YXJlLgorICovCisgCitzdHJ1Y3QgWkZXX0NUUkwgeworCXN0cnVjdCBCT0FSRF9DVFJMCWJvYXJkX2N0cmw7CisJc3RydWN0IENIX0NUUkwJCWNoX2N0cmxbTUFYX0NIQU5dOworCXN0cnVjdCBCVUZfQ1RSTAkJYnVmX2N0cmxbTUFYX0NIQU5dOworfTsKKworLyoqKioqKioqKioqKioqKioqKiAqKioqKioqKioqKioqKioqKiogKioqKioqKioqKioqKioqKioqKi8KKyNlbmRpZgorCisvKiBQZXIgY2FyZCBkYXRhIHN0cnVjdHVyZSAqLworc3RydWN0IHJlc291cmNlOworc3RydWN0IGN5Y2xhZGVzX2NhcmQgeworICAgIHVuc2lnbmVkIGxvbmcgYmFzZV9waHlzOworICAgIHVuc2lnbmVkIGxvbmcgY3RsX3BoeXM7CisgICAgdm9pZCBfX2lvbWVtICpiYXNlX2FkZHI7CisgICAgdm9pZCBfX2lvbWVtICpjdGxfYWRkcjsKKyAgICBpbnQgaXJxOworICAgIGludCBudW1fY2hpcHM7CS8qIDAgaWYgY2FyZCBhYnNlbnQsIC0xIGlmIFovUENJLCBlbHNlIFkgKi8KKyAgICBpbnQgZmlyc3RfbGluZTsJLyogbWlub3IgbnVtYmVyIG9mIGZpcnN0IGNoYW5uZWwgb24gY2FyZCAqLworICAgIGludCBucG9ydHM7CQkvKiBOdW1iZXIgb2YgcG9ydHMgaW4gdGhlIGNhcmQgKi8KKyAgICBpbnQgYnVzX2luZGV4OwkvKiBhZGRyZXNzIHNoaWZ0IC0gMCBmb3IgSVNBLCAxIGZvciBQQ0kgKi8KKyAgICBpbnQJaW50cl9lbmFibGVkOwkvKiBGVyBJbnRlcnJ1cHQgZmxhZyAtIDAgZGlzYWJsZWQsIDEgZW5hYmxlZCAqLworICAgIHN0cnVjdCBwY2lfZGV2ICpwZGV2OworI2lmZGVmIF9fS0VSTkVMX18KKyAgICBzcGlubG9ja190IGNhcmRfbG9jazsKKyNlbHNlCisgICAgdW5zaWduZWQgbG9uZyBmaWxsZXI7CisjZW5kaWYKK307CisKK3N0cnVjdCBjeWNsYWRlc19jaGlwIHsKKyAgaW50IGZpbGxlcjsKK307CisKKworI2lmZGVmIF9fS0VSTkVMX18KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTWVtb3J5IGFjY2VzcyBmdW5jdGlvbnMvbWFjcm9zICAgICAgKgorICogKHJlcXVpcmVkIHRvIHN1cHBvcnQgQWxwaGEgc3lzdGVtcykgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBjeV93cml0ZWIocG9ydCx2YWwpICAgICB7d3JpdGViKCh2YWwpLChwb3J0KSk7IG1iKCk7fQorI2RlZmluZSBjeV93cml0ZXcocG9ydCx2YWwpICAgICB7d3JpdGV3KCh2YWwpLChwb3J0KSk7IG1iKCk7fQorI2RlZmluZSBjeV93cml0ZWwocG9ydCx2YWwpICAgICB7d3JpdGVsKCh2YWwpLChwb3J0KSk7IG1iKCk7fQorCisjZGVmaW5lIGN5X3JlYWRiKHBvcnQpICByZWFkYihwb3J0KQorI2RlZmluZSBjeV9yZWFkdyhwb3J0KSAgcmVhZHcocG9ydCkKKyNkZWZpbmUgY3lfcmVhZGwocG9ydCkgIHJlYWRsKHBvcnQpCisKKy8qCisgKiBTdGF0aXN0aWNzIGNvdW50ZXJzCisgKi8KK3N0cnVjdCBjeWNsYWRlc19pY291bnQgeworCV9fdTMyCWN0cywgZHNyLCBybmcsIGRjZCwgdHgsIHJ4OworCV9fdTMyCWZyYW1lLCBwYXJpdHksIG92ZXJydW4sIGJyazsKKwlfX3UzMglidWZfb3ZlcnJ1bjsKK307CisKKy8qCisgKiBUaGlzIGlzIG91ciBpbnRlcm5hbCBzdHJ1Y3R1cmUgZm9yIGVhY2ggc2VyaWFsIHBvcnQncyBzdGF0ZS4KKyAqIAorICogTWFueSBmaWVsZHMgYXJlIHBhcmFsbGVsZWQgYnkgdGhlIHN0cnVjdHVyZSB1c2VkIGJ5IHRoZSBzZXJpYWxfc3RydWN0CisgKiBzdHJ1Y3R1cmUuCisgKgorICogRm9yIGRlZmluaXRpb25zIG9mIHRoZSBmbGFncyBmaWVsZCwgc2VlIHR0eS5oCisgKi8KKworc3RydWN0IGN5Y2xhZGVzX3BvcnQgeworCWludCAgICAgICAgICAgICAgICAgICAgIG1hZ2ljOworCWludAkJCWNhcmQ7CisJaW50CQkJbGluZTsKKwlpbnQJCQlmbGFnczsgCQkvKiBkZWZpbmVkIGluIHR0eS5oICovCisJaW50ICAgICAgICAgICAgICAgICAgICAgdHlwZTsJCS8qIFVBUlQgdHlwZSAqLworCXN0cnVjdCB0dHlfc3RydWN0IAkqdHR5OworCWludAkJCXJlYWRfc3RhdHVzX21hc2s7CisJaW50CQkJaWdub3JlX3N0YXR1c19tYXNrOworCWludAkJCXRpbWVvdXQ7CisJaW50CQkJeG1pdF9maWZvX3NpemU7CisJaW50ICAgICAgICAgICAgICAgICAgICAgY29yMSxjb3IyLGNvcjMsY29yNCxjb3I1OworCWludCAgICAgICAgICAgICAgICAgICAgIHRicHIsdGNvLHJicHIscmNvOworCWludAkJCWJhdWQ7CisJaW50CQkJcmZsb3c7CisJaW50CQkJcnRzZHRyX2ludjsKKwlpbnQJCQljaGlwX3JldjsKKwlpbnQJCQljdXN0b21fZGl2aXNvcjsKKwlpbnQgICAgICAgICAgICAgICAgICAgICB4X2NoYXI7IC8qIHRvIGJlIHB1c2hlZCBvdXQgQVNBUCAqLworCWludAkJCWNsb3NlX2RlbGF5OworCXVuc2lnbmVkIHNob3J0CQljbG9zaW5nX3dhaXQ7CisJdW5zaWduZWQgbG9uZwkJZXZlbnQ7CisJdW5zaWduZWQgbG9uZwkJbGFzdF9hY3RpdmU7CisJaW50CQkJY291bnQ7CS8qICMgb2YgZmQgb24gZGV2aWNlICovCisJaW50ICAgICAgICAgICAgICAgICAgICAgYnJlYWtvbjsKKwlpbnQgICAgICAgICAgICAgICAgICAgICBicmVha29mZjsKKwlpbnQJCQlibG9ja2VkX29wZW47IC8qICMgb2YgYmxvY2tlZCBvcGVucyAqLworCXVuc2lnbmVkIGNoYXIgCQkqeG1pdF9idWY7CisJaW50CQkJeG1pdF9oZWFkOworCWludAkJCXhtaXRfdGFpbDsKKwlpbnQJCQl4bWl0X2NudDsKKyAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdF90aHJlc2hvbGQ7CisgICAgICAgIGludCAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRfdGltZW91dDsKKwl1bnNpZ25lZCBsb25nCQlqaWZmaWVzWzNdOworCXVuc2lnbmVkIGxvbmcJCXJmbHVzaF9jb3VudDsKKwlzdHJ1Y3QgY3ljbGFkZXNfbW9uaXRvcgltb247CisJc3RydWN0IGN5Y2xhZGVzX2lkbGVfc3RhdHMJaWRsZV9zdGF0czsKKwlzdHJ1Y3QgY3ljbGFkZXNfaWNvdW50CWljb3VudDsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJdHF1ZXVlOworCXdhaXRfcXVldWVfaGVhZF90ICAgICAgIG9wZW5fd2FpdDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCAgICAgICBjbG9zZV93YWl0OworCXdhaXRfcXVldWVfaGVhZF90ICAgICAgIHNodXRkb3duX3dhaXQ7CisJd2FpdF9xdWV1ZV9oZWFkX3QgICAgICAgZGVsdGFfbXNyX3dhaXQ7CisJaW50IHRocm90dGxlOworfTsKKworLyoKKyAqIEV2ZW50cyBhcmUgdXNlZCB0byBzY2hlZHVsZSB0aGluZ3MgdG8gaGFwcGVuIGF0IHRpbWVyLWludGVycnVwdAorICogdGltZSwgaW5zdGVhZCBvZiBhdCBjeSBpbnRlcnJ1cHQgdGltZS4KKyAqLworI2RlZmluZSBDeV9FVkVOVF9SRUFEX1BST0NFU1MJCTAKKyNkZWZpbmUgQ3lfRVZFTlRfV1JJVEVfV0FLRVVQCQkxCisjZGVmaW5lIEN5X0VWRU5UX0hBTkdVUAkJCTIKKyNkZWZpbmUgQ3lfRVZFTlRfQlJFQUsJCQkzCisjZGVmaW5lIEN5X0VWRU5UX09QRU5fV0FLRVVQCQk0CisjZGVmaW5lIEN5X0VWRU5UX1NIVVRET1dOX1dBS0VVUAk1CisjZGVmaW5lCUN5X0VWRU5UX0RFTFRBX1dBS0VVUAkJNgorI2RlZmluZQlDeV9FVkVOVF9aX1JYX0ZVTEwJCTcKKworI2RlZmluZQlDTE9TSU5HX1dBSVRfREVMQVkJMzAqSFoKKyNkZWZpbmUgQ1lfQ0xPU0lOR19XQUlUX05PTkUJNjU1MzUKKyNkZWZpbmUgQ1lfQ0xPU0lOR19XQUlUX0lORgkwCisKKworI2RlZmluZSBDeU1BWF9DSElQU19QRVJfQ0FSRAk4CisjZGVmaW5lIEN5TUFYX0NIQVJfRklGTwkJMTIKKyNkZWZpbmUgQ3lQT1JUU19QRVJfQ0hJUAk0CisjZGVmaW5lCUNEMTQwMF9NQVhfU1BFRUQJMTE1MjAwCisKKyNkZWZpbmUJQ3lJU0FfWXdpbgkweDIwMDAKKworI2RlZmluZSBDeVBDSV9Zd2luIAkweDQwMDAKKyNkZWZpbmUgQ3lQQ0lfWWN0bCAJMHg4MAorI2RlZmluZSBDeVBDSV9aY3RsIAlDVFJMX1dJTkRPV19TSVpFCisjZGVmaW5lIEN5UENJX1p3aW4gCTB4ODAwMDAKKyNkZWZpbmUgQ3lQQ0lfWmVfd2luIAkoMiAqIEN5UENJX1p3aW4pCisKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NQVNLCTB4MDYKKworLyoqKiogQ0QxNDAwIHJlZ2lzdGVycyAqKioqLworCisjZGVmaW5lIENEMTQwMF9SRVZfRwkweDQ2CisjZGVmaW5lIENEMTQwMF9SRVZfSgkweDQ4CisKKyNkZWZpbmUgQ3lSZWdTaXplICAJMHgwNDAwCisjZGVmaW5lIEN5X0h3UmVzZXQgCTB4MTQwMAorI2RlZmluZSBDeV9DbHJJbnRyIAkweDE4MDAKKyNkZWZpbmUgQ3lfRXBsZFJldiAJMHgxZTAwCisKKy8qIEdsb2JhbCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBDeUdGUkNSCQkoMHg0MCoyKQorI2RlZmluZSAgICAgIEN5UmV2RQkJKDQ0KQorI2RlZmluZSBDeUNBUgkJKDB4NjgqMikKKyNkZWZpbmUgICAgICBDeUNIQU5fMAkJKDB4MDApCisjZGVmaW5lICAgICAgQ3lDSEFOXzEJCSgweDAxKQorI2RlZmluZSAgICAgIEN5Q0hBTl8yCQkoMHgwMikKKyNkZWZpbmUgICAgICBDeUNIQU5fMwkJKDB4MDMpCisjZGVmaW5lIEN5R0NSCQkoMHg0QioyKQorI2RlZmluZSAgICAgIEN5Q0gwX1NFUklBTAkoMHgwMCkKKyNkZWZpbmUgICAgICBDeUNIMF9QQVJBTExFTAkoMHg4MCkKKyNkZWZpbmUgQ3lTVlJSCQkoMHg2NyoyKQorI2RlZmluZSAgICAgIEN5U1JNb2RlbQkJKDB4MDQpCisjZGVmaW5lICAgICAgQ3lTUlRyYW5zbWl0CSgweDAyKQorI2RlZmluZSAgICAgIEN5U1JSZWNlaXZlCSgweDAxKQorI2RlZmluZSBDeVJJQ1IJCSgweDQ0KjIpCisjZGVmaW5lIEN5VElDUgkJKDB4NDUqMikKKyNkZWZpbmUgQ3lNSUNSCQkoMHg0NioyKQorI2RlZmluZSAgICAgIEN5SUNSMAkJKDB4MDApCisjZGVmaW5lICAgICAgQ3lJQ1IxCQkoMHgwMSkKKyNkZWZpbmUgICAgICBDeUlDUjIJCSgweDAyKQorI2RlZmluZSAgICAgIEN5SUNSMwkJKDB4MDMpCisjZGVmaW5lIEN5UklSCQkoMHg2QioyKQorI2RlZmluZSBDeVRJUgkJKDB4NkEqMikKKyNkZWZpbmUgQ3lNSVIJCSgweDY5KjIpCisjZGVmaW5lICAgICAgQ3lJUkRpckVxCQkoMHg4MCkKKyNkZWZpbmUgICAgICBDeUlSQnVzeQkJKDB4NDApCisjZGVmaW5lICAgICAgQ3lJUlVuZmFpcgkJKDB4MjApCisjZGVmaW5lICAgICAgQ3lJUkNvbnRleHQJKDB4MUMpCisjZGVmaW5lICAgICAgQ3lJUkNoYW5uZWwJKDB4MDMpCisjZGVmaW5lIEN5UFBSIAkJKDB4N0UqMikKKyNkZWZpbmUgICAgICBDeUNMT0NLXzIwXzFNUwkoMHgyNykKKyNkZWZpbmUgICAgICBDeUNMT0NLXzI1XzFNUwkoMHgzMSkKKyNkZWZpbmUgICAgICBDeUNMT0NLXzI1XzVNUwkoMHhmNCkKKyNkZWZpbmUgICAgICBDeUNMT0NLXzYwXzFNUwkoMHg3NSkKKyNkZWZpbmUgICAgICBDeUNMT0NLXzYwXzJNUwkoMHhlYSkKKworLyogVmlydHVhbCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBDeVJJVlIJCSgweDQzKjIpCisjZGVmaW5lIEN5VElWUgkJKDB4NDIqMikKKyNkZWZpbmUgQ3lNSVZSCQkoMHg0MSoyKQorI2RlZmluZSAgICAgIEN5SVZSTWFzayAoMHgwNykKKyNkZWZpbmUgICAgICBDeUlWUlJ4RXggKDB4MDcpCisjZGVmaW5lICAgICAgQ3lJVlJSeE9LICgweDAzKQorI2RlZmluZSAgICAgIEN5SVZSVHhPSyAoMHgwMikKKyNkZWZpbmUgICAgICBDeUlWUk1kbU9LICgweDAxKQorI2RlZmluZSBDeVREUgkJKDB4NjMqMikKKyNkZWZpbmUgQ3lSRFNSCQkoMHg2MioyKQorI2RlZmluZSAgICAgIEN5VElNRU9VVAkJKDB4ODApCisjZGVmaW5lICAgICAgQ3lTUEVDSEFSCQkoMHg3MCkKKyNkZWZpbmUgICAgICBDeUJSRUFLCQkoMHgwOCkKKyNkZWZpbmUgICAgICBDeVBBUklUWQkJKDB4MDQpCisjZGVmaW5lICAgICAgQ3lGUkFNRQkJKDB4MDIpCisjZGVmaW5lICAgICAgQ3lPVkVSUlVOCQkoMHgwMSkKKyNkZWZpbmUgQ3lNSVNSCQkoMHg0QyoyKQorLyogc2VlIEN5TUNPUl8gYW5kIEN5TVNWUl8gZm9yIGJpdHMqLworI2RlZmluZSBDeUVPU1JSCQkoMHg2MCoyKQorCisvKiBDaGFubmVsIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIEN5TElWUgkJKDB4MTgqMikKKyNkZWZpbmUgICAgICBDeU1zY3NyCQkoMHgwMSkKKyNkZWZpbmUgICAgICBDeVRkc3IJCSgweDAyKQorI2RlZmluZSAgICAgIEN5Umdkc3IJCSgweDAzKQorI2RlZmluZSAgICAgIEN5UmVkc3IJCSgweDA3KQorI2RlZmluZSBDeUNDUgkJKDB4MDUqMikKKy8qIEZvcm1hdCAxICovCisjZGVmaW5lICAgICAgQ3lDSEFOX1JFU0VUCSgweDgwKQorI2RlZmluZSAgICAgIEN5Q0hJUF9SRVNFVAkoMHg4MSkKKyNkZWZpbmUgICAgICBDeUZsdXNoVHJhbnNGSUZPCSgweDgyKQorLyogRm9ybWF0IDIgKi8KKyNkZWZpbmUgICAgICBDeUNPUl9DSEFOR0UJKDB4NDApCisjZGVmaW5lICAgICAgQ3lDT1IxY2gJCSgweDAyKQorI2RlZmluZSAgICAgIEN5Q09SMmNoCQkoMHgwNCkKKyNkZWZpbmUgICAgICBDeUNPUjNjaAkJKDB4MDgpCisvKiBGb3JtYXQgMyAqLworI2RlZmluZSAgICAgIEN5U0VORF9TUEVDXzEJKDB4MjEpCisjZGVmaW5lICAgICAgQ3lTRU5EX1NQRUNfMgkoMHgyMikKKyNkZWZpbmUgICAgICBDeVNFTkRfU1BFQ18zCSgweDIzKQorI2RlZmluZSAgICAgIEN5U0VORF9TUEVDXzQJKDB4MjQpCisvKiBGb3JtYXQgNCAqLworI2RlZmluZSAgICAgIEN5Q0hBTl9DVEwJCSgweDEwKQorI2RlZmluZSAgICAgIEN5RElTX1JDVlIJCSgweDAxKQorI2RlZmluZSAgICAgIEN5RU5CX1JDVlIJCSgweDAyKQorI2RlZmluZSAgICAgIEN5RElTX1hNVFIJCSgweDA0KQorI2RlZmluZSAgICAgIEN5RU5CX1hNVFIJCSgweDA4KQorI2RlZmluZSBDeVNSRVIJCSgweDA2KjIpCisjZGVmaW5lICAgICAgQ3lNZG1DaAkJKDB4ODApCisjZGVmaW5lICAgICAgQ3lSeERhdGEJCSgweDEwKQorI2RlZmluZSAgICAgIEN5VHhSZHkJCSgweDA0KQorI2RlZmluZSAgICAgIEN5VHhNcHR5CQkoMHgwMikKKyNkZWZpbmUgICAgICBDeU5ORFQJCSgweDAxKQorI2RlZmluZSBDeUNPUjEJCSgweDA4KjIpCisjZGVmaW5lICAgICAgQ3lQQVJJVFlfTk9ORQkoMHgwMCkKKyNkZWZpbmUgICAgICBDeVBBUklUWV8wCQkoMHgyMCkKKyNkZWZpbmUgICAgICBDeVBBUklUWV8xCQkoMHhBMCkKKyNkZWZpbmUgICAgICBDeVBBUklUWV9FCQkoMHg0MCkKKyNkZWZpbmUgICAgICBDeVBBUklUWV9PCQkoMHhDMCkKKyNkZWZpbmUgICAgICBDeV8xX1NUT1AJCSgweDAwKQorI2RlZmluZSAgICAgIEN5XzFfNV9TVE9QCSgweDA0KQorI2RlZmluZSAgICAgIEN5XzJfU1RPUAkJKDB4MDgpCisjZGVmaW5lICAgICAgQ3lfNV9CSVRTCQkoMHgwMCkKKyNkZWZpbmUgICAgICBDeV82X0JJVFMJCSgweDAxKQorI2RlZmluZSAgICAgIEN5XzdfQklUUwkJKDB4MDIpCisjZGVmaW5lICAgICAgQ3lfOF9CSVRTCQkoMHgwMykKKyNkZWZpbmUgQ3lDT1IyCQkoMHgwOSoyKQorI2RlZmluZSAgICAgIEN5SVhNCQkoMHg4MCkKKyNkZWZpbmUgICAgICBDeVR4SUJFCQkoMHg0MCkKKyNkZWZpbmUgICAgICBDeUVUQwkJKDB4MjApCisjZGVmaW5lICAgICAgQ3lBVVRPX1RYRkwJKDB4NjApCisjZGVmaW5lICAgICAgQ3lMTE0JCSgweDEwKQorI2RlZmluZSAgICAgIEN5UkxNCQkoMHgwOCkKKyNkZWZpbmUgICAgICBDeVJ0c0FPCQkoMHgwNCkKKyNkZWZpbmUgICAgICBDeUN0c0FFCQkoMHgwMikKKyNkZWZpbmUgICAgICBDeURzckFFCQkoMHgwMSkKKyNkZWZpbmUgQ3lDT1IzCQkoMHgwQSoyKQorI2RlZmluZSAgICAgIEN5U1BMX0NIX0RSQU5HRQkoMHg4MCkgIC8qIHNwZWNpYWwgY2hhcmFjdGVyIGRldGVjdCByYW5nZSAqLworI2RlZmluZSAgICAgIEN5U1BMX0NIX0RFVDEJKDB4NDApICAvKiBlbmFibGUgc3BlY2lhbCBjaGFyYWN0ZXIgZGV0ZWN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiBTQ0hSNC1TQ0hSMyAqLworI2RlZmluZSAgICAgIEN5RkxfQ1RSTF9UUk5TUAkoMHgyMCkgIC8qIEZsb3cgQ29udHJvbCBUcmFuc3BhcmVuY3kgKi8KKyNkZWZpbmUgICAgICBDeVNQTF9DSF9ERVQyCSgweDEwKSAgLyogRW5hYmxlIHNwZWNpYWwgY2hhcmFjdGVyIGRldGVjdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gU0NIUjItU0NIUjEgKi8KKyNkZWZpbmUgICAgICBDeVJFQ19GSUZPCQkoMHgwRikgIC8qIFJlY2VpdmUgRklGTyB0aHJlc2hvbGQgKi8KKyNkZWZpbmUgQ3lDT1I0CQkoMHgxRSoyKQorI2RlZmluZSBDeUNPUjUJCSgweDFGKjIpCisjZGVmaW5lIEN5Q0NTUgkJKDB4MEIqMikKKyNkZWZpbmUgICAgICBDeVJ4RU4JCSgweDgwKQorI2RlZmluZSAgICAgIEN5UnhGbG9mZgkJKDB4NDApCisjZGVmaW5lICAgICAgQ3lSeEZsb24JCSgweDIwKQorI2RlZmluZSAgICAgIEN5VHhFTgkJKDB4MDgpCisjZGVmaW5lICAgICAgQ3lUeEZsb2ZmCQkoMHgwNCkKKyNkZWZpbmUgICAgICBDeVR4RmxvbgkJKDB4MDIpCisjZGVmaW5lIEN5UkRDUgkJKDB4MEUqMikKKyNkZWZpbmUgQ3lTQ0hSMQkJKDB4MUEqMikKKyNkZWZpbmUgQ3lTQ0hSMiAJKDB4MUIqMikKKyNkZWZpbmUgQ3lTQ0hSMwkJKDB4MUMqMikKKyNkZWZpbmUgQ3lTQ0hSNAkJKDB4MUQqMikKKyNkZWZpbmUgQ3lTQ1JMCQkoMHgyMioyKQorI2RlZmluZSBDeVNDUkgJCSgweDIzKjIpCisjZGVmaW5lIEN5TE5DCQkoMHgyNCoyKQorI2RlZmluZSBDeU1DT1IxIAkoMHgxNSoyKQorI2RlZmluZSBDeU1DT1IyCQkoMHgxNioyKQorI2RlZmluZSBDeVJUUFIJCSgweDIxKjIpCisjZGVmaW5lIEN5TVNWUjEJCSgweDZDKjIpCisjZGVmaW5lIEN5TVNWUjIJCSgweDZEKjIpCisjZGVmaW5lICAgICAgQ3lBTllfREVMVEEJKDB4RjApCisjZGVmaW5lICAgICAgQ3lEU1IJCSgweDgwKQorI2RlZmluZSAgICAgIEN5Q1RTCQkoMHg0MCkKKyNkZWZpbmUgICAgICBDeVJJCQkoMHgyMCkKKyNkZWZpbmUgICAgICBDeURDRAkJKDB4MTApCisjZGVmaW5lICAgICAgQ3lEVFIgICAgICAgICAgICAgICgweDAyKQorI2RlZmluZSAgICAgIEN5UlRTICAgICAgICAgICAgICAoMHgwMSkKKyNkZWZpbmUgQ3lQVlNSCQkoMHg2RioyKQorI2RlZmluZSBDeVJCUFIJCSgweDc4KjIpCisjZGVmaW5lIEN5UkNPUgkJKDB4N0MqMikKKyNkZWZpbmUgQ3lUQlBSCQkoMHg3MioyKQorI2RlZmluZSBDeVRDT1IJCSgweDc2KjIpCisKKy8qIEN1c3RvbSBSZWdpc3RlcnMgKi8KKworI2RlZmluZQlDeVBMWF9WRVIJKDB4MzQwMCkKKyNkZWZpbmUJUExYXzkwNTAJMHgwYgorI2RlZmluZQlQTFhfOTA2MAkweDBjCisjZGVmaW5lCVBMWF85MDgwCTB4MGQKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAvKiBfTElOVVhfQ1lDTEFERVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jeWNsb214LmggYi9pbmNsdWRlL2xpbnV4L2N5Y2xvbXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGZhN2RmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9jeWNsb214LmgKQEAgLTAsMCArMSw4MCBAQAorI2lmbmRlZglfQ1lDTE9NWF9ICisjZGVmaW5lCV9DWUNMT01YX0gKKy8qCisqIGN5Y2xvbXguaAlDeWNsb20gMlggV0FOIExpbmsgRHJpdmVyLgorKgkJVXNlci1sZXZlbCBBUEkgZGVmaW5pdGlvbnMuCisqCisqIEF1dGhvcjoJQXJuYWxkbyBDYXJ2YWxobyBkZSBNZWxvIDxhY21lQGNvbmVjdGl2YS5jb20uYnI+CisqCisqIENvcHlyaWdodDoJKGMpIDE5OTgtMjAwMyBBcm5hbGRvIENhcnZhbGhvIGRlIE1lbG8KKyoKKyogQmFzZWQgb24gd2FucGlwZS5oIGJ5IEdlbmUgS296aW4gPGdlbmVrQGNvbXB1c2VydmUuY29tPgorKgorKgkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKgkJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyoJCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorKgkJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKiAyMDAwLzA3LzEzICAgIGFjbWUJCXJlbW92ZSBjcmFwICNpZiBLRVJORUxfVkVSU0lPTiA+IGJsYWgKKyogMjAwMC8wMS8yMSAgICBhY21lICAgICAgICAgICAgcmVuYW1lIGN5Y2xvbXhfb3BlbiB0byBjeWNsb214X21vZF9pbmNfdXNlX2NvdW50CisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBjeWNsb214X2Nsb3NlIHRvIGN5Y2xvbXhfbW9kX2RlY191c2VfY291bnQKKyogMTk5OS8wNS8xOQlhY21lCQl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0X3N0YXRzKHN1cHBvcnQgZm9yIDIuMy4qKQorKiAxOTk5LzAxLzAzCWFjbWUJCWp1ZGljaW91cyB1c2Ugb2YgZGF0YSB0eXBlcworKiAxOTk4LzEyLzI3CWFjbWUJCWNsZWFudXA6IFBBQ0tFRCBub3QgbmVlZGVkCisqIDE5OTgvMDgvMDgJYWNtZQkJVmVyc2lvbiAwLjAuMQorKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3dhbnJvdXRlci5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisKKyNpZmRlZglfX0tFUk5FTF9fCisvKiBLZXJuZWwgSW50ZXJmYWNlICovCisKKyNpbmNsdWRlIDxsaW51eC9jeWN4X2Rydi5oPgkvKiBDeWNsb20gMlggc3VwcG9ydCBtb2R1bGUgQVBJIGRlZmluaXRpb25zICovCisjaW5jbHVkZSA8bGludXgvY3ljeF9jZm0uaD4JLyogQ3ljbG9tIDJYIGZpcm13YXJlIG1vZHVsZSBkZWZpbml0aW9ucyAqLworI2lmZGVmIENPTkZJR19DWUNMT01YX1gyNQorI2luY2x1ZGUgPGxpbnV4L2N5Y3hfeDI1Lmg+CisjZW5kaWYKKworI2RlZmluZQlpc19kaWdpdChjaCkgKCgoY2gpPj0odW5zaWduZWQpJzAnJiYoY2gpPD0odW5zaWduZWQpJzknKT8xOjApCisKKy8qIEFkYXB0ZXIgRGF0YSBTcGFjZS4KKyAqIFRoaXMgc3RydWN0dXJlIGlzIG5lZWRlZCBiZWNhdXNlIHdlIGhhbmRsZSBtdWx0aXBsZSBjYXJkcywgb3RoZXJ3aXNlCisgKiBzdGF0aWMgZGF0YSB3b3VsZCBkbyBpdC4KKyAqLworc3RydWN0IGN5Y3hfZGV2aWNlIHsKKwljaGFyIGRldm5hbWVbV0FOX0RSVk5BTUVfU1ogKyAxXTsvKiBjYXJkIG5hbWUgKi8KKwlzdHJ1Y3QgY3ljeF9odyBodzsJCS8qIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24gKi8KKwlzdHJ1Y3Qgd2FuX2RldmljZSB3YW5kZXY7CS8qIFdBTiBkZXZpY2UgZGF0YSBzcGFjZSAqLworCXUzMiBzdGF0ZV90aWNrOwkJCS8qIGxpbmsgc3RhdGUgdGltZXN0YW1wICovCisJc3BpbmxvY2tfdCBsb2NrOworCWNoYXIgaW5faXNyOwkJCS8qIGludGVycnVwdC1pbi1zZXJ2aWNlIGZsYWcgKi8KKwljaGFyIGJ1ZmZfaW50X21vZGVfdW5idXN5OyAgICAgIC8qIGZsYWcgZm9yIGNhcnJ5aW5nIG91dCBkZXZfdGludCAqLworCXdhaXRfcXVldWVfaGVhZF90IHdhaXRfc3RhdHM7ICAvKiB0byB3YWl0IGZvciB0aGUgU1RBVFMgaW5kaWNhdGlvbiAqLworCXZvaWQgX19pb21lbSAqbWJveDsJCQkvKiAtPiBtYWlsYm94ICovCisJdm9pZCAoKmlzcikoc3RydWN0IGN5Y3hfZGV2aWNlKiBjYXJkKTsJLyogaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSAqLworCWludCAoKmV4ZWMpKHN0cnVjdCBjeWN4X2RldmljZSogY2FyZCwgdm9pZCogdV9jbWQsIHZvaWQqIHVfZGF0YSk7CisJdW5pb24geworI2lmZGVmIENPTkZJR19DWUNMT01YX1gyNQorCQlzdHJ1Y3QgeyAvKiBYLjI1IHNwZWNpZmljIGRhdGEgKi8KKwkJCXUzMiBsb19wdmM7CisJCQl1MzIgaGlfcHZjOworCQkJdTMyIGxvX3N2YzsKKwkJCXUzMiBoaV9zdmM7CisJCQlzdHJ1Y3QgY3ljeF94MjVfc3RhdHMgc3RhdHM7CisJCQlzcGlubG9ja190IGxvY2s7CisJCQl1MzIgY29ubmVjdGlvbl9rZXlzOworCQl9IHg7CisjZW5kaWYKKwl9IHU7Cit9OworCisvKiBQdWJsaWMgRnVuY3Rpb25zICovCit2b2lkIGN5Y3hfc2V0X3N0YXRlKHN0cnVjdCBjeWN4X2RldmljZSAqY2FyZCwgaW50IHN0YXRlKTsKKworI2lmZGVmIENPTkZJR19DWUNMT01YX1gyNQoraW50IGN5Y3hfeDI1X3dhbl9pbml0KHN0cnVjdCBjeWN4X2RldmljZSAqY2FyZCwgd2FuZGV2X2NvbmZfdCAqY29uZik7CisjZW5kaWYKKyNlbmRpZgkvKiBfX0tFUk5FTF9fICovCisjZW5kaWYJLyogX0NZQ0xPTVhfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jeWN4X2NmbS5oIGIvaW5jbHVkZS9saW51eC9jeWN4X2NmbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzMmQyNmUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2N5Y3hfY2ZtLmgKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisqIGN5Y3hfY2ZtLmgJQ3ljbG9tIDJYIFdBTiBMaW5rIERyaXZlci4KKyoJCURlZmluaXRpb25zIGZvciB0aGUgQ3ljbG9tIDJYIEZpcm13YXJlIE1vZHVsZSAoQ0ZNKS4KKyoKKyogQXV0aG9yOglBcm5hbGRvIENhcnZhbGhvIGRlIE1lbG8gPGFjbWVAY29uZWN0aXZhLmNvbS5icj4KKyoKKyogQ29weXJpZ2h0OgkoYykgMTk5OC0yMDAzIEFybmFsZG8gQ2FydmFsaG8gZGUgTWVsbworKgorKiBCYXNlZCBvbiBzZGxhc2ZtLmggYnkgR2VuZSBLb3ppbiA8NzQ2MDQuMTUyQGNvbXB1c2VydmUuY29tPgorKgorKgkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKgkJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyoJCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorKgkJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKiAxOTk4LzA4LzA4CWFjbWUJCUluaXRpYWwgdmVyc2lvbi4KKyovCisjaWZuZGVmCV9DWUNYX0NGTV9ICisjZGVmaW5lCV9DWUNYX0NGTV9ICisKKy8qIERlZmluZXMgKi8KKworI2RlZmluZQlDRk1fVkVSU0lPTgkyCisjZGVmaW5lCUNGTV9TSUdOQVRVUkUJIkNGTSAtIEN5Y2xhZGVzIENZQ1ggRmlybXdhcmUgTW9kdWxlIgorCisvKiBtaW4vbWF4ICovCisjZGVmaW5lCUNGTV9JTUFHRV9TSVpFCTB4MjAwMDAJLyogbWF4IHNpemUgb2YgQ1lDWCBjb2RlIGltYWdlIGZpbGUgKi8KKyNkZWZpbmUJQ0ZNX0RFU0NSX0xFTgkyNTYJLyogbWF4IGxlbmd0aCBvZiBkZXNjcmlwdGlvbiBzdHJpbmcgKi8KKyNkZWZpbmUJQ0ZNX01BWF9DWUNYCTEJLyogbWF4IG51bWJlciBvZiBjb21wYXRpYmxlIGFkYXB0ZXJzICovCisjZGVmaW5lCUNGTV9MT0FEX0JVRlNaCTB4NDAwCS8qIGJ1ZmZlciBzaXplIGZvciByZXNldCBjb2RlIChidWZmZXJfbG9hZCkgKi8KKworLyogRmlybXdhcmUgQ29tbWFuZHMgKi8KKyNkZWZpbmUgR0VOX1BPV0VSX09OCTB4MTI4MAorCisjZGVmaW5lIEdFTl9TRVRfU0VHCTB4MTQwMQkvKiBib290IHNlZ21lbnQgc2V0dGluZy4gKi8KKyNkZWZpbmUgR0VOX0JPT1RfREFUCTB4MTQwMgkvKiBib290IGRhdGEuICovCisjZGVmaW5lIEdFTl9TVEFSVAkweDE0MDMJLyogYm9hcmQgc3RhcnQuICovCisjZGVmaW5lIEdFTl9ERUZQQVIJMHgxNDA0CS8qIGJ1ZmZlciBsZW5ndGggZm9yIGJvb3QuICovCisKKy8qIEFkYXB0ZXIgVHlwZXMgKi8KKyNkZWZpbmUgQ1lDWF8yWAkJMgorLyogZm9yIG5vdyBvbmx5IHRoZSAyWCBpcyBzdXBwb3J0ZWQsIG5vIHBsYW5zIHRvIHN1cHBvcnQgOFggb3IgMTZYICovCisjZGVmaW5lIENZQ1hfOFgJCTgKKyNkZWZpbmUgQ1lDWF8xNlgJMTYKKworI2RlZmluZQlDRklEX1gyNV8yWAk1MjAwCisKKy8qKgorICoJc3RydWN0IGN5Y3hfZndfaW5mbyAtIGZpcm13YXJlIG1vZHVsZSBpbmZvcm1hdGlvbi4KKyAqCUBjb2RlaWQgLSBmaXJtd2FyZSBJRAorICoJQHZlcnNpb24gLSBmaXJtd2FyZSB2ZXJzaW9uIG51bWJlcgorICoJQGFkYXB0ZXIgLSBjb21wYXRpYmxlIGFkYXB0ZXIgdHlwZXMKKyAqCUBtZW1zaXplIC0gbWluaW11bSBtZW1vcnkgc2l6ZQorICoJQHJlc2VydmVkIC0gcmVzZXJ2ZWQKKyAqCUBzdGFydG9mZnMgLSBlbnRyeSBwb2ludCBvZmZzZXQKKyAqCUB3aW5vZmZzIC0gZHVhbC1wb3J0IG1lbW9yeSB3aW5kb3cgb2Zmc2V0CisgKglAY29kZW9mZnMgLSBjb2RlIGxvYWQgb2Zmc2V0CisgKglAY29kZXNpemUgLSBjb2RlIHNpemUKKyAqCUBkYXRhb2ZmcyAtIGNvbmZpZ3VyYXRpb24gZGF0YSBsb2FkIG9mZnNldAorICoJQGRhdGFzaXplIC0gY29uZmlndXJhdGlvbiBkYXRhIHNpemUKKyAqLworc3RydWN0IGN5Y3hfZndfaW5mbyB7CisJdW5zaWduZWQgc2hvcnQJY29kZWlkOworCXVuc2lnbmVkIHNob3J0CXZlcnNpb247CisJdW5zaWduZWQgc2hvcnQJYWRhcHRlcltDRk1fTUFYX0NZQ1hdOworCXVuc2lnbmVkIGxvbmcJbWVtc2l6ZTsKKwl1bnNpZ25lZCBzaG9ydAlyZXNlcnZlZFsyXTsKKwl1bnNpZ25lZCBzaG9ydAlzdGFydG9mZnM7CisJdW5zaWduZWQgc2hvcnQJd2lub2ZmczsKKwl1bnNpZ25lZCBzaG9ydAljb2Rlb2ZmczsKKwl1bnNpZ25lZCBsb25nCWNvZGVzaXplOworCXVuc2lnbmVkIHNob3J0CWRhdGFvZmZzOworCXVuc2lnbmVkIGxvbmcJZGF0YXNpemU7Cit9OworCisvKioKKyAqCXN0cnVjdCBjeWN4X2Zpcm13YXJlIC0gQ1lDWCBmaXJtd2FyZSBmaWxlIHN0cnVjdHVyZQorICoJQHNpZ25hdHVyZSAtIENGTSBmaWxlIHNpZ25hdHVyZQorICoJQHZlcnNpb24gLSBmaWxlIGZvcm1hdCB2ZXJzaW9uCisgKglAY2hlY2tzdW0gLSBpbmZvICsgaW1hZ2UKKyAqCUByZXNlcnZlZCAtIHJlc2VydmVkCisgKglAZGVzY3IgLSBkZXNjcmlwdGlvbiBzdHJpbmcKKyAqCUBpbmZvIC0gZmlybXdhcmUgbW9kdWxlIGluZm8KKyAqCUBpbWFnZSAtIGNvZGUgaW1hZ2UgKHZhcmlhYmxlIHNpemUpCisgKi8KK3N0cnVjdCBjeWN4X2Zpcm13YXJlIHsKKwljaGFyCQkgICAgc2lnbmF0dXJlWzgwXTsKKwl1bnNpZ25lZCBzaG9ydAkgICAgdmVyc2lvbjsKKwl1bnNpZ25lZCBzaG9ydAkgICAgY2hlY2tzdW07CisJdW5zaWduZWQgc2hvcnQJICAgIHJlc2VydmVkWzZdOworCWNoYXIJCSAgICBkZXNjcltDRk1fREVTQ1JfTEVOXTsKKwlzdHJ1Y3QgY3ljeF9md19pbmZvIGluZm87CisJdW5zaWduZWQgY2hhcgkgICAgaW1hZ2VbMF07Cit9OworCitzdHJ1Y3QgY3ljeF9md19oZWFkZXIgeworCXVuc2lnbmVkIGxvbmcgIHJlc2V0X3NpemU7CisJdW5zaWduZWQgbG9uZyAgZGF0YV9zaXplOworCXVuc2lnbmVkIGxvbmcgIGNvZGVfc2l6ZTsKK307CisjZW5kaWYJLyogX0NZQ1hfQ0ZNX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY3ljeF9kcnYuaCBiL2luY2x1ZGUvbGludXgvY3ljeF9kcnYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjIxZGY4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9jeWN4X2Rydi5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisqIGN5Y3hfZHJ2LmgJQ1lDWCBTdXBwb3J0IE1vZHVsZS4gIEtlcm5lbCBBUEkgRGVmaW5pdGlvbnMuCisqCisqIEF1dGhvcjoJQXJuYWxkbyBDYXJ2YWxobyBkZSBNZWxvIDxhY21lQGNvbmVjdGl2YS5jb20uYnI+CisqCisqIENvcHlyaWdodDoJKGMpIDE5OTgtMjAwMyBBcm5hbGRvIENhcnZhbGhvIGRlIE1lbG8KKyoKKyogQmFzZWQgb24gc2RsYWRydi5oIGJ5IEdlbmUgS296aW4gPGdlbmVrQGNvbXB1c2VydmUuY29tPgorKgorKgkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKgkJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyoJCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorKgkJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKiAxOTk5LzEwLzIzCWFjbWUJCWN5Y3hod190IGNsZWFudXAKKyogMTk5OS8wMS8wMwlhY21lCQltb3JlIGp1ZGljaW91cyB1c2Ugb2YgZGF0YSB0eXBlcy4uLgorKgkJCQl1Y2xvbmcsIHVjY2hhciwgZXRjIGRlbGV0ZWQsIHRoZSB1OCwgdTE2LCB1MzIKKyoJCQkJdHlwZXMgYXJlIHRoZSBwb3J0YWJsZSB3YXkgdG8gZ28uCisqIDE5OTkvMDEvMDMJYWNtZQkJanVkaWNpb3VzIHVzZSBvZiBkYXRhIHR5cGVzLi4uIHUxNiwgdTMyLCBldGMKKyogMTk5OC8xMi8yNglhY21lCSAJRklYRURfQlVGRkVSUywgQ09ORl9PRkZTRVQsCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92YWwgb2YgY3lfcmVhZHtid2x9CisqIDE5OTgvMDgvMDgJYWNtZQkgCUluaXRpYWwgdmVyc2lvbi4KKyovCisjaWZuZGVmCV9DWUNYX0RSVl9ICisjZGVmaW5lCV9DWUNYX0RSVl9ICisKKyNkZWZpbmUJQ1lDWF9XSU5ET1dTSVpFCTB4NDAwMAkvKiBkZWZhdWx0IGR1YWwtcG9ydCBtZW1vcnkgd2luZG93IHNpemUgKi8KKyNkZWZpbmUJR0VOX0NZQ1hfSU5UUgkweDAyCisjZGVmaW5lCVJTVF9FTkFCTEUJMHgwNAorI2RlZmluZQlTVEFSVF9DUFUJMHgwNgorI2RlZmluZQlSU1RfRElTQUJMRQkweDA4CisjZGVmaW5lCUZJWEVEX0JVRkZFUlMJMHgwOAorI2RlZmluZQlURVNUX1BBVFRFUk4JMHhhYTU1CisjZGVmaW5lCUNNRF9PRkZTRVQJMHgyMAorI2RlZmluZSBDT05GX09GRlNFVCAgICAgMHgwMzgwCisjZGVmaW5lCVJFU0VUX09GRlNFVAkweDNjMDAJLyogRm9yIHJlc2V0IGZpbGUgbG9hZCAqLworI2RlZmluZQlEQVRBX09GRlNFVAkweDAxMDAJLyogRm9yIGNvZGUgYW5kIGRhdGEgZmlsZXMgbG9hZCAqLworI2RlZmluZQlTVEFSVF9PRkZTRVQJMHgzZmYwCS8qIDgwMTg2IHN0YXJ0cyBoZXJlICovCisKKy8qKgorICoJc3RydWN0IGN5Y3hfaHcgLSBBZGFwdGVyIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24KKyAqCUBmd2lkIC0gZmlybXdhcmUgSUQKKyAqCUBpcnEgLSBpbnRlcnJ1cHQgcmVxdWVzdCBsZXZlbAorICoJQGRwbWJhc2UgLSBkdWFsLXBvcnQgbWVtb3J5IGJhc2UKKyAqCUBkcG1zaXplIC0gZHVhbC1wb3J0IG1lbW9yeSBzaXplCisgKglAcmVzZXJ2ZWQgLSByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZQorICovCitzdHJ1Y3QgY3ljeF9odyB7CisJdTMyIGZ3aWQ7CisJaW50IGlycTsKKwl2b2lkIF9faW9tZW0gKmRwbWJhc2U7CisJdTMyIGRwbXNpemU7CisJdTMyIHJlc2VydmVkWzVdOworfTsKKworLyogRnVuY3Rpb24gUHJvdG90eXBlcyAqLworZXh0ZXJuIGludCBjeWN4X3NldHVwKHN0cnVjdCBjeWN4X2h3ICpodywgdm9pZCAqc2ZtLCB1MzIgbGVuLCB1bnNpZ25lZCBsb25nIGJhc2UpOworZXh0ZXJuIGludCBjeWN4X2Rvd24oc3RydWN0IGN5Y3hfaHcgKmh3KTsKK2V4dGVybiBpbnQgY3ljeF9wZWVrKHN0cnVjdCBjeWN4X2h3ICpodywgdTMyIGFkZHIsIHZvaWQgKmJ1ZiwgdTMyIGxlbik7CitleHRlcm4gaW50IGN5Y3hfcG9rZShzdHJ1Y3QgY3ljeF9odyAqaHcsIHUzMiBhZGRyLCB2b2lkICpidWYsIHUzMiBsZW4pOworZXh0ZXJuIGludCBjeWN4X2V4ZWModm9pZCBfX2lvbWVtICphZGRyKTsKKworZXh0ZXJuIHZvaWQgY3ljeF9pbnRlbihzdHJ1Y3QgY3ljeF9odyAqaHcpOworZXh0ZXJuIHZvaWQgY3ljeF9pbnRyKHN0cnVjdCBjeWN4X2h3ICpodyk7CisjZW5kaWYJLyogX0NZQ1hfRFJWX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY3ljeF94MjUuaCBiL2luY2x1ZGUvbGludXgvY3ljeF94MjUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTBhN2YzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9jeWN4X3gyNS5oCkBAIC0wLDAgKzEsMTI1IEBACisjaWZuZGVmCV9DWUNYX1gyNV9ICisjZGVmaW5lCV9DWUNYX1gyNV9ICisvKgorKiBjeWN4X3gyNS5oCUN5Y2xvbSBYLjI1IGZpcm13YXJlIEFQSSBkZWZpbml0aW9ucy4KKyoKKyogQXV0aG9yOglBcm5hbGRvIENhcnZhbGhvIGRlIE1lbG8gPGFjbWVAY29uZWN0aXZhLmNvbS5icj4KKyoKKyogQ29weXJpZ2h0OgkoYykgMTk5OC0yMDAzIEFybmFsZG8gQ2FydmFsaG8gZGUgTWVsbworKgorKiBCYXNlZCBvbiBzZGxhX3gyNS5oIGJ5IEdlbmUgS296aW4gPDc0NjA0LjE1MkBjb21wdXNlcnZlLmNvbT4KKyoKKyoJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyoJCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisqCQlhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyoJCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyogMjAwMC8wNC8wMglhY21lCQlkcHJpbnRrIGFuZCBjeWN4X2RlYnVnCisqIDE5OTkvMDEvMDMJYWNtZQkJanVkaWNpb3VzIHVzZSBvZiBkYXRhIHR5cGVzCisqIDE5OTkvMDEvMDIJYWNtZQkJI2RlZmluZSBYMjVfQUNLX04zCTB4NDQxMQorKiAxOTk4LzEyLzI4CWFjbWUJCWNsZWFudXA6IGxvdCdvJ3RoaW5ncyByZW1vdmVkCisqCQkJCQkgY29tbWFuZHMgbGlzdGVkLAorKgkJCQkJIFRYMjVDbWQgJiBUWDI1Q29uZmlnIHN0cnVjdHMKKyoJCQkJCSB0eXBlZGVmJ2VkCisqLworI2lmbmRlZiBQQUNLRUQKKyNkZWZpbmUgUEFDS0VEIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpCisjZW5kaWYgCisKKy8qIFguMjUgc2hhcmVkIG1lbW9yeSBsYXlvdXQuICovCisjZGVmaW5lCVgyNV9NQk9YX09GRlMJMHgzMDAJLyogZ2VuZXJhbCBtYWlsYm94IGJsb2NrICovCisjZGVmaW5lCVgyNV9SWE1CT1hfT0ZGUwkweDM0MAkvKiByZWNlaXZlIG1haWxib3ggKi8KKworLyogRGVidWcgKi8KKyNkZWZpbmUgZHByaW50ayhsZXZlbCwgZm9ybWF0LCBhLi4uKSBpZiAoY3ljeF9kZWJ1ZyA+PSBsZXZlbCkgcHJpbnRrKGZvcm1hdCwgIyNhKQorCitleHRlcm4gdW5zaWduZWQgaW50IGN5Y3hfZGVidWc7CisKKy8qIERhdGEgU3RydWN0dXJlcyAqLworLyogWC4yNSBDb21tYW5kIEJsb2NrLiAqLworc3RydWN0IGN5Y3hfeDI1X2NtZCB7CisJdTE2IGNvbW1hbmQgUEFDS0VEOworCXUxNiBsaW5rICAgIFBBQ0tFRDsgLyogdmFsdWVzOiAwIG9yIDEgKi8KKwl1MTYgbGVuICAgICBQQUNLRUQ7IC8qIHZhbHVlczogMCB0aHJ1IDB4MjA1ICg1MTcpICovCisJdTMyIGJ1ZiAgICAgUEFDS0VEOworfTsKKworLyogRGVmaW5lcyBmb3IgdGhlICdjb21tYW5kJyBmaWVsZC4gKi8KKyNkZWZpbmUgWDI1X0NPTk5FQ1RfUkVRVUVTVCAgICAgICAgICAgICAweDQ0MDEKKyNkZWZpbmUgWDI1X0NPTk5FQ1RfUkVTUE9OU0UgICAgICAgICAgICAweDQ0MDIKKyNkZWZpbmUgWDI1X0RJU0NPTk5FQ1RfUkVRVUVTVCAgICAgICAgICAweDQ0MDMKKyNkZWZpbmUgWDI1X0RJU0NPTk5FQ1RfUkVTUE9OU0UgICAgICAgICAweDQ0MDQKKyNkZWZpbmUgWDI1X0RBVEFfUkVRVUVTVCAgICAgICAgICAgICAgICAweDQ0MDUKKyNkZWZpbmUgWDI1X0FDS19UT19WQwkJCTB4NDQwNgorI2RlZmluZSBYMjVfSU5URVJSVVBUX1JFU1BPTlNFICAgICAgICAgIDB4NDQwNworI2RlZmluZSBYMjVfQ09ORklHICAgICAgICAgICAgICAgICAgICAgIDB4NDQwOAorI2RlZmluZSBYMjVfQ09OTkVDVF9JTkRJQ0FUSU9OICAgICAgICAgIDB4NDQwOQorI2RlZmluZSBYMjVfQ09OTkVDVF9DT05GSVJNICAgICAgICAgICAgIDB4NDQwQQorI2RlZmluZSBYMjVfRElTQ09OTkVDVF9JTkRJQ0FUSU9OICAgICAgIDB4NDQwQgorI2RlZmluZSBYMjVfRElTQ09OTkVDVF9DT05GSVJNICAgICAgICAgIDB4NDQwQworI2RlZmluZSBYMjVfREFUQV9JTkRJQ0FUSU9OICAgICAgICAgICAgIDB4NDQwRQorI2RlZmluZSBYMjVfSU5URVJSVVBUX0lORElDQVRJT04gICAgICAgIDB4NDQwRgorI2RlZmluZSBYMjVfQUNLX0ZST01fVkMJCQkweDQ0MTAKKyNkZWZpbmUgWDI1X0FDS19OMwkJCTB4NDQxMQorI2RlZmluZSBYMjVfQ09OTkVDVF9DT0xMSVNJT04gICAgICAgICAgIDB4NDQxMworI2RlZmluZSBYMjVfTjNXSU4gICAgICAgICAgICAgICAgICAgICAgIDB4NDQxNAorI2RlZmluZSBYMjVfTElORV9PTiAgICAgICAgICAgICAgICAgICAgIDB4NDQxNQorI2RlZmluZSBYMjVfTElORV9PRkYgICAgICAgICAgICAgICAgICAgIDB4NDQxNgorI2RlZmluZSBYMjVfUkVTRVRfUkVRVUVTVCAgICAgICAgICAgICAgIDB4NDQxNworI2RlZmluZSBYMjVfTE9HICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDUwMAorI2RlZmluZSBYMjVfU1RBVElTVElDICAgICAgICAgICAgICAgICAgIDB4NDYwMAorI2RlZmluZSBYMjVfVFJBQ0UgICAgICAgICAgICAgICAgICAgICAgIDB4NDcwMAorI2RlZmluZSBYMjVfTjJUUkFDRVhDICAgICAgICAgICAgICAgICAgIDB4NDcwMgorI2RlZmluZSBYMjVfTjNUUkFDRVhDICAgICAgICAgICAgICAgICAgIDB4NDcwMworCisvKioKKyAqCXN0cnVjdCBjeWN4X3gyNV9jb25maWcgLSBjeWNsb20yeCB4MjUgZmlybXdhcmUgY29uZmlndXJhdGlvbgorICoJQGxpbmsgLSBsaW5rIG51bWJlcgorICoJQHNwZWVkIC0gbGluZSBzcGVlZAorICoJQGNsb2NrIC0gaW50ZXJuYWwvZXh0ZXJuYWwKKyAqCUBuMiAtICMgb2YgbGV2ZWwgMiByZXRyYW5zbS4odmFsdWVzOiAxIHRocnUgRkYpCisgKglAbjJ3aW4gLSBsZXZlbCAyIHdpbmRvdyAodmFsdWVzOiAxIHRocnUgNykKKyAqCUBuM3dpbiAtIGxldmVsIDMgd2luZG93ICh2YWx1ZXM6IDEgdGhydSA3KQorICoJQG52YyAtICMgb2YgbG9naWNhbCBjaGFubmVscyAodmFsdWVzOiAxIHRocnUgNjQpCisgKglAcGt0bGVuIC0gbGV2ZWwgMyBwYWNrZXQgbGVuZ2h0IC0gbG9nIGJhc2UgMiBvZiBzaXplCisgKglAbG9jYWRkciAtIG15IGFkZHJlc3MKKyAqCUByZW1hZGRyIC0gcmVtb3RlIGFkZHJlc3MKKyAqCUB0MSAtIHRpbWUsIGluIHNlY29uZHMKKyAqCUB0MiAtIHRpbWUsIGluIHNlY29uZHMKKyAqCUB0MjEgLSB0aW1lLCBpbiBzZWNvbmRzCisgKglAbnB2YyAtICMgb2YgcGVybWFuZW50IHZpcnQuIGNpcmN1aXRzICgxIHRocnUgbnZjKQorICoJQHQyMyAtIHRpbWUsIGluIHNlY29uZHMKKyAqCUBmbGFncyAtIHNlZSBkb3N4MjUuZG9jLCBpbiBwb3J0dWd1ZXNlLCBmb3IgZGV0YWlscworICovCitzdHJ1Y3QgY3ljeF94MjVfY29uZmlnIHsKKwl1OCAgbGluawlQQUNLRUQ7CisJdTggIHNwZWVkCVBBQ0tFRDsKKwl1OCAgY2xvY2sJUEFDS0VEOworCXU4ICBuMgkJUEFDS0VEOworCXU4ICBuMndpbglQQUNLRUQ7CisJdTggIG4zd2luCVBBQ0tFRDsKKwl1OCAgbnZjCQlQQUNLRUQ7CisJdTggIHBrdGxlbglQQUNLRUQ7CisJdTggIGxvY2FkZHIJUEFDS0VEOworCXU4ICByZW1hZGRyCVBBQ0tFRDsKKwl1MTYgdDEJCVBBQ0tFRDsKKwl1MTYgdDIJCVBBQ0tFRDsKKwl1OCAgdDIxCQlQQUNLRUQ7CisJdTggIG5wdmMJUEFDS0VEOworCXU4ICB0MjMJCVBBQ0tFRDsKKwl1OCAgZmxhZ3MJUEFDS0VEOworfTsKKworc3RydWN0IGN5Y3hfeDI1X3N0YXRzIHsKKwl1MTYgcnhfY3JjX2Vycm9ycwlQQUNLRUQ7CisJdTE2IHJ4X292ZXJfZXJyb3JzCVBBQ0tFRDsKKwl1MTYgbjJfdHhfZnJhbWVzIAlQQUNLRUQ7CisJdTE2IG4yX3J4X2ZyYW1lcyAJUEFDS0VEOworCXUxNiB0eF90aW1lb3V0cyAJUEFDS0VEOworCXUxNiByeF90aW1lb3V0cyAJUEFDS0VEOworCXUxNiBuM190eF9wYWNrZXRzIAlQQUNLRUQ7CisJdTE2IG4zX3J4X3BhY2tldHMgCVBBQ0tFRDsKKwl1MTYgdHhfYWJvcnRzCSAJUEFDS0VEOworCXUxNiByeF9hYm9ydHMJIAlQQUNLRUQ7Cit9OworI2VuZGlmCS8qIF9DWUNYX1gyNV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RjYWNoZS5oIGIvaW5jbHVkZS9saW51eC9kY2FjaGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGJlMjkwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9kY2FjaGUuaApAQCAtMCwwICsxLDMzOCBAQAorI2lmbmRlZiBfX0xJTlVYX0RDQUNIRV9ICisjZGVmaW5lIF9fTElOVVhfRENBQ0hFX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CisjaW5jbHVkZSA8YXNtL2J1Zy5oPgorCitzdHJ1Y3QgbmFtZWlkYXRhOworc3RydWN0IHZmc21vdW50OworCisvKgorICogbGludXgvaW5jbHVkZS9saW51eC9kY2FjaGUuaAorICoKKyAqIERpcmVudCBjYWNoZSBkYXRhIHN0cnVjdHVyZXMKKyAqCisgKiAoQykgQ29weXJpZ2h0IDE5OTcgVGhvbWFzIFNjaG9lYmVsLVRoZXVlciwKKyAqIHdpdGggaGVhdnkgY2hhbmdlcyBieSBMaW51cyBUb3J2YWxkcworICovCisKKyNkZWZpbmUgSVNfUk9PVCh4KSAoKHgpID09ICh4KS0+ZF9wYXJlbnQpCisKKy8qCisgKiAicXVpY2sgc3RyaW5nIiAtLSBlYXNlcyBwYXJhbWV0ZXIgcGFzc2luZywgYnV0IG1vcmUgaW1wb3J0YW50bHkKKyAqIHNhdmVzICJtZXRhZGF0YSIgYWJvdXQgdGhlIHN0cmluZyAoaWUgbGVuZ3RoIGFuZCB0aGUgaGFzaCkuCisgKgorICogaGFzaCBjb21lcyBmaXJzdCBzbyBpdCBzbnVnZ2xlcyBhZ2FpbnN0IGRfcGFyZW50IGluIHRoZQorICogZGVudHJ5LgorICovCitzdHJ1Y3QgcXN0ciB7CisJdW5zaWduZWQgaW50IGhhc2g7CisJdW5zaWduZWQgaW50IGxlbjsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lOworfTsKKworc3RydWN0IGRlbnRyeV9zdGF0X3QgeworCWludCBucl9kZW50cnk7CisJaW50IG5yX3VudXNlZDsKKwlpbnQgYWdlX2xpbWl0OyAgICAgICAgICAvKiBhZ2UgaW4gc2Vjb25kcyAqLworCWludCB3YW50X3BhZ2VzOyAgICAgICAgIC8qIHBhZ2VzIHJlcXVlc3RlZCBieSBzeXN0ZW0gKi8KKwlpbnQgZHVtbXlbMl07Cit9OworZXh0ZXJuIHN0cnVjdCBkZW50cnlfc3RhdF90IGRlbnRyeV9zdGF0OworCisvKiBOYW1lIGhhc2hpbmcgcm91dGluZXMuIEluaXRpYWwgaGFzaCB2YWx1ZSAqLworLyogSGFzaCBjb3VydGVzeSBvZiB0aGUgUjUgaGFzaCBpbiByZWlzZXJmcyBtb2R1bG8gc2lnbiBiaXRzICovCisjZGVmaW5lIGluaXRfbmFtZV9oYXNoKCkJCTAKKworLyogcGFydGlhbCBoYXNoIHVwZGF0ZSBmdW5jdGlvbi4gQXNzdW1lIHJvdWdobHkgNCBiaXRzIHBlciBjaGFyYWN0ZXIgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZworcGFydGlhbF9uYW1lX2hhc2godW5zaWduZWQgbG9uZyBjLCB1bnNpZ25lZCBsb25nIHByZXZoYXNoKQoreworCXJldHVybiAocHJldmhhc2ggKyAoYyA8PCA0KSArIChjID4+IDQpKSAqIDExOworfQorCisvKgorICogRmluYWxseTogY3V0IGRvd24gdGhlIG51bWJlciBvZiBiaXRzIHRvIGEgaW50IHZhbHVlIChhbmQgdHJ5IHRvIGF2b2lkCisgKiBsb3NpbmcgYml0cykKKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGVuZF9uYW1lX2hhc2godW5zaWduZWQgbG9uZyBoYXNoKQoreworCXJldHVybiAodW5zaWduZWQgaW50KSBoYXNoOworfQorCisvKiBDb21wdXRlIHRoZSBoYXNoIGZvciBhIG5hbWUgc3RyaW5nLiAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKK2Z1bGxfbmFtZV9oYXNoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBsZW4pCit7CisJdW5zaWduZWQgbG9uZyBoYXNoID0gaW5pdF9uYW1lX2hhc2goKTsKKwl3aGlsZSAobGVuLS0pCisJCWhhc2ggPSBwYXJ0aWFsX25hbWVfaGFzaCgqbmFtZSsrLCBoYXNoKTsKKwlyZXR1cm4gZW5kX25hbWVfaGFzaChoYXNoKTsKK30KKworc3RydWN0IGRjb29raWVfc3RydWN0OworCisjZGVmaW5lIEROQU1FX0lOTElORV9MRU5fTUlOIDM2CisKK3N0cnVjdCBkZW50cnkgeworCWF0b21pY190IGRfY291bnQ7CisJdW5zaWduZWQgaW50IGRfZmxhZ3M7CQkvKiBwcm90ZWN0ZWQgYnkgZF9sb2NrICovCisJc3BpbmxvY2tfdCBkX2xvY2s7CQkvKiBwZXIgZGVudHJ5IGxvY2sgKi8KKwlzdHJ1Y3QgaW5vZGUgKmRfaW5vZGU7CQkvKiBXaGVyZSB0aGUgbmFtZSBiZWxvbmdzIHRvIC0gTlVMTCBpcworCQkJCQkgKiBuZWdhdGl2ZSAqLworCS8qCisJICogVGhlIG5leHQgdGhyZWUgZmllbGRzIGFyZSB0b3VjaGVkIGJ5IF9fZF9sb29rdXAuICBQbGFjZSB0aGVtIGhlcmUKKwkgKiBzbyB0aGV5IGFsbCBmaXQgaW4gYSAxNi1ieXRlIHJhbmdlLCB3aXRoIDE2LWJ5dGUgYWxpZ25tZW50LgorCSAqLworCXN0cnVjdCBkZW50cnkgKmRfcGFyZW50OwkvKiBwYXJlbnQgZGlyZWN0b3J5ICovCisJc3RydWN0IHFzdHIgZF9uYW1lOworCisJc3RydWN0IGxpc3RfaGVhZCBkX2xydTsJCS8qIExSVSBsaXN0ICovCisJc3RydWN0IGxpc3RfaGVhZCBkX2NoaWxkOwkvKiBjaGlsZCBvZiBwYXJlbnQgbGlzdCAqLworCXN0cnVjdCBsaXN0X2hlYWQgZF9zdWJkaXJzOwkvKiBvdXIgY2hpbGRyZW4gKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGRfYWxpYXM7CS8qIGlub2RlIGFsaWFzIGxpc3QgKi8KKwl1bnNpZ25lZCBsb25nIGRfdGltZTsJCS8qIHVzZWQgYnkgZF9yZXZhbGlkYXRlICovCisJc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zICpkX29wOworCXN0cnVjdCBzdXBlcl9ibG9jayAqZF9zYjsJLyogVGhlIHJvb3Qgb2YgdGhlIGRlbnRyeSB0cmVlICovCisJdm9pZCAqZF9mc2RhdGE7CQkJLyogZnMtc3BlY2lmaWMgZGF0YSAqLworIAlzdHJ1Y3QgcmN1X2hlYWQgZF9yY3U7CisJc3RydWN0IGRjb29raWVfc3RydWN0ICpkX2Nvb2tpZTsgLyogY29va2llLCBpZiBhbnkgKi8KKwlzdHJ1Y3QgaGxpc3Rfbm9kZSBkX2hhc2g7CS8qIGxvb2t1cCBoYXNoIGxpc3QgKi8JCisJaW50IGRfbW91bnRlZDsKKwl1bnNpZ25lZCBjaGFyIGRfaW5hbWVbRE5BTUVfSU5MSU5FX0xFTl9NSU5dOwkvKiBzbWFsbCBuYW1lcyAqLworfTsKKworc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIHsKKwlpbnQgKCpkX3JldmFsaWRhdGUpKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IG5hbWVpZGF0YSAqKTsKKwlpbnQgKCpkX2hhc2gpIChzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBxc3RyICopOworCWludCAoKmRfY29tcGFyZSkgKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IHFzdHIgKiwgc3RydWN0IHFzdHIgKik7CisJaW50ICgqZF9kZWxldGUpKHN0cnVjdCBkZW50cnkgKik7CisJdm9pZCAoKmRfcmVsZWFzZSkoc3RydWN0IGRlbnRyeSAqKTsKKwl2b2lkICgqZF9pcHV0KShzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBpbm9kZSAqKTsKK307CisKKy8qIHRoZSBkZW50cnkgcGFyYW1ldGVyIHBhc3NlZCB0byBkX2hhc2ggYW5kIGRfY29tcGFyZSBpcyB0aGUgcGFyZW50CisgKiBkaXJlY3Rvcnkgb2YgdGhlIGVudHJpZXMgdG8gYmUgY29tcGFyZWQuIEl0IGlzIHVzZWQgaW4gY2FzZSB0aGVzZQorICogZnVuY3Rpb25zIG5lZWQgYW55IGRpcmVjdG9yeSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBmb3IgZGV0ZXJtaW5pbmcKKyAqIGVxdWl2YWxlbmN5IGNsYXNzZXMuICBVc2luZyB0aGUgZGVudHJ5IGl0c2VsZiBtaWdodCBub3Qgd29yaywgYXMgaXQKKyAqIG1pZ2h0IGJlIGEgbmVnYXRpdmUgZGVudHJ5IHdoaWNoIGhhcyBubyBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGgKKyAqIGl0ICovCisKKy8qCitsb2NraW5nIHJ1bGVzOgorCQliaWcgbG9jawlkY2FjaGVfbG9jawlkX2xvY2sgICBtYXkgYmxvY2sKK2RfcmV2YWxpZGF0ZToJbm8JCW5vCQlubyAgICAgICB5ZXMKK2RfaGFzaAkJbm8JCW5vCQlubyAgICAgICB5ZXMKK2RfY29tcGFyZToJbm8JCXllcwkJeWVzICAgICAgbm8KK2RfZGVsZXRlOglubwkJeWVzCQlubyAgICAgICBubworZF9yZWxlYXNlOglubwkJbm8JCW5vICAgICAgIHllcworZF9pcHV0OgkJbm8JCW5vCQlubyAgICAgICB5ZXMKKyAqLworCisvKiBkX2ZsYWdzIGVudHJpZXMgKi8KKyNkZWZpbmUgRENBQ0hFX0FVVE9GU19QRU5ESU5HIDB4MDAwMSAgICAvKiBhdXRvZnM6ICJ1bmRlciBjb25zdHJ1Y3Rpb24iICovCisjZGVmaW5lIERDQUNIRV9ORlNGU19SRU5BTUVEICAweDAwMDIgICAgLyogdGhpcyBkZW50cnkgaGFzIGJlZW4gInNpbGx5CisJCQkJCSAqIHJlbmFtZWQiIGFuZCBoYXMgdG8gYmUKKwkJCQkJICogZGVsZXRlZCBvbiB0aGUgbGFzdCBkcHV0KCkKKwkJCQkJICovCisjZGVmaW5lCURDQUNIRV9ESVNDT05ORUNURUQgMHgwMDA0CisgICAgIC8qIFRoaXMgZGVudHJ5IGlzIHBvc3NpYmx5IG5vdCBjdXJyZW50bHkgY29ubmVjdGVkIHRvIHRoZSBkY2FjaGUgdHJlZSwKKyAgICAgICogaW4gd2hpY2ggY2FzZSBpdHMgcGFyZW50IHdpbGwgZWl0aGVyIGJlIGl0c2VsZiwgb3Igd2lsbCBoYXZlIHRoaXMKKyAgICAgICogZmxhZyBhcyB3ZWxsLiAgbmZzZCB3aWxsIG5vdCB1c2UgYSBkZW50cnkgd2l0aCB0aGlzIGJpdCBzZXQsIGJ1dCB3aWxsCisgICAgICAqIGZpcnN0IGVuZGVhdm91ciB0byBjbGVhciB0aGUgYml0IGVpdGhlciBieSBkaXNjb3ZlcmluZyB0aGF0IGl0IGlzCisgICAgICAqIGNvbm5lY3RlZCwgb3IgYnkgcGVyZm9ybWluZyBsb29rdXAgb3BlcmF0aW9ucy4gICBBbnkgZmlsZXN5c3RlbSB3aGljaAorICAgICAgKiBzdXBwb3J0cyBuZnNkX29wZXJhdGlvbnMgTVVTVCBoYXZlIGEgbG9va3VwIGZ1bmN0aW9uIHdoaWNoLCBpZiBpdCBmaW5kcworICAgICAgKiBhIGRpcmVjdG9yeSBpbm9kZSB3aXRoIGEgRENBQ0hFX0RJU0NPTk5FQ1RFRCBkZW50cnksIHdpbGwgZF9tb3ZlCisgICAgICAqIHRoYXQgZGVudHJ5IGludG8gcGxhY2UgYW5kIHJldHVybiB0aGF0IGRlbnRyeSByYXRoZXIgdGhhbiB0aGUgcGFzc2VkIG9uZSwKKyAgICAgICogdHlwaWNhbGx5IHVzaW5nIGRfc3BsaWNlX2FsaWFzLgorICAgICAgKi8KKworI2RlZmluZSBEQ0FDSEVfUkVGRVJFTkNFRAkweDAwMDggIC8qIFJlY2VudGx5IHVzZWQsIGRvbid0IGRpc2NhcmQuICovCisjZGVmaW5lIERDQUNIRV9VTkhBU0hFRAkJMHgwMDEwCQorCitleHRlcm4gc3BpbmxvY2tfdCBkY2FjaGVfbG9jazsKKworLyoqCisgKiBkX2Ryb3AgLSBkcm9wIGEgZGVudHJ5CisgKiBAZGVudHJ5OiBkZW50cnkgdG8gZHJvcAorICoKKyAqIGRfZHJvcCgpIHVuaGFzaGVzIHRoZSBlbnRyeSBmcm9tIHRoZSBwYXJlbnQgZGVudHJ5IGhhc2hlcywgc28gdGhhdCBpdCB3b24ndAorICogYmUgZm91bmQgdGhyb3VnaCBhIFZGUyBsb29rdXAgYW55IG1vcmUuIE5vdGUgdGhhdCB0aGlzIGlzIGRpZmZlcmVudCBmcm9tCisgKiBkZWxldGluZyB0aGUgZGVudHJ5IC0gZF9kZWxldGUgd2lsbCB0cnkgdG8gbWFyayB0aGUgZGVudHJ5IG5lZ2F0aXZlIGlmCisgKiBwb3NzaWJsZSwgZ2l2aW5nIGEgc3VjY2Vzc2Z1bCBfbmVnYXRpdmVfIGxvb2t1cCwgd2hpbGUgZF9kcm9wIHdpbGwKKyAqIGp1c3QgbWFrZSB0aGUgY2FjaGUgbG9va3VwIGZhaWwuCisgKgorICogZF9kcm9wKCkgaXMgdXNlZCBtYWlubHkgZm9yIHN0dWZmIHRoYXQgd2FudHMgdG8gaW52YWxpZGF0ZSBhIGRlbnRyeSBmb3Igc29tZQorICogcmVhc29uIChORlMgdGltZW91dHMgb3IgYXV0b2ZzIGRlbGV0ZXMpLgorICoKKyAqIF9fZF9kcm9wIHJlcXVpcmVzIGRlbnRyeS0+ZF9sb2NrLgorICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2RfZHJvcChzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJaWYgKCEoZGVudHJ5LT5kX2ZsYWdzICYgRENBQ0hFX1VOSEFTSEVEKSkgeworCQlkZW50cnktPmRfZmxhZ3MgfD0gRENBQ0hFX1VOSEFTSEVEOworCQlobGlzdF9kZWxfcmN1KCZkZW50cnktPmRfaGFzaCk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZF9kcm9wKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwlzcGluX2xvY2soJmRjYWNoZV9sb2NrKTsKKwlzcGluX2xvY2soJmRlbnRyeS0+ZF9sb2NrKTsKKyAJX19kX2Ryb3AoZGVudHJ5KTsKKwlzcGluX3VubG9jaygmZGVudHJ5LT5kX2xvY2spOworCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGRuYW1lX2V4dGVybmFsKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwlyZXR1cm4gZGVudHJ5LT5kX25hbWUubmFtZSAhPSBkZW50cnktPmRfaW5hbWU7Cit9CisKKy8qCisgKiBUaGVzZSBhcmUgdGhlIGxvdy1sZXZlbCBGUyBpbnRlcmZhY2VzIHRvIHRoZSBkY2FjaGUuLgorICovCitleHRlcm4gdm9pZCBkX2luc3RhbnRpYXRlKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGlub2RlICopOworZXh0ZXJuIHN0cnVjdCBkZW50cnkgKiBkX2luc3RhbnRpYXRlX3VuaXF1ZShzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBpbm9kZSAqKTsKK2V4dGVybiB2b2lkIGRfZGVsZXRlKHN0cnVjdCBkZW50cnkgKik7CisKKy8qIGFsbG9jYXRlL2RlLWFsbG9jYXRlICovCitleHRlcm4gc3RydWN0IGRlbnRyeSAqIGRfYWxsb2Moc3RydWN0IGRlbnRyeSAqLCBjb25zdCBzdHJ1Y3QgcXN0ciAqKTsKK2V4dGVybiBzdHJ1Y3QgZGVudHJ5ICogZF9hbGxvY19hbm9uKHN0cnVjdCBpbm9kZSAqKTsKK2V4dGVybiBzdHJ1Y3QgZGVudHJ5ICogZF9zcGxpY2VfYWxpYXMoc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKik7CitleHRlcm4gdm9pZCBzaHJpbmtfZGNhY2hlX3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKK2V4dGVybiB2b2lkIHNocmlua19kY2FjaGVfcGFyZW50KHN0cnVjdCBkZW50cnkgKik7CitleHRlcm4gdm9pZCBzaHJpbmtfZGNhY2hlX2Fub24oc3RydWN0IGhsaXN0X2hlYWQgKik7CitleHRlcm4gaW50IGRfaW52YWxpZGF0ZShzdHJ1Y3QgZGVudHJ5ICopOworCisvKiBvbmx5IHVzZWQgYXQgbW91bnQtdGltZSAqLworZXh0ZXJuIHN0cnVjdCBkZW50cnkgKiBkX2FsbG9jX3Jvb3Qoc3RydWN0IGlub2RlICopOworCisvKiA8Y2xpY2tldHk+LTxjbGljaz4gdGhlIHJhbWZzLXR5cGUgdHJlZSAqLworZXh0ZXJuIHZvaWQgZF9nZW5vY2lkZShzdHJ1Y3QgZGVudHJ5ICopOworCitleHRlcm4gc3RydWN0IGRlbnRyeSAqZF9maW5kX2FsaWFzKHN0cnVjdCBpbm9kZSAqKTsKK2V4dGVybiB2b2lkIGRfcHJ1bmVfYWxpYXNlcyhzdHJ1Y3QgaW5vZGUgKik7CisKKy8qIHRlc3Qgd2hldGhlciB3ZSBoYXZlIGFueSBzdWJtb3VudHMgaW4gYSBzdWJkaXIgdHJlZSAqLworZXh0ZXJuIGludCBoYXZlX3N1Ym1vdW50cyhzdHJ1Y3QgZGVudHJ5ICopOworCisvKgorICogVGhpcyBhZGRzIHRoZSBlbnRyeSB0byB0aGUgaGFzaCBxdWV1ZXMuCisgKi8KK2V4dGVybiB2b2lkIGRfcmVoYXNoKHN0cnVjdCBkZW50cnkgKik7CisKKy8qKgorICogZF9hZGQgLSBhZGQgZGVudHJ5IHRvIGhhc2ggcXVldWVzCisgKiBAZW50cnk6IGRlbnRyeSB0byBhZGQKKyAqIEBpbm9kZTogVGhlIGlub2RlIHRvIGF0dGFjaCB0byB0aGlzIGRlbnRyeQorICoKKyAqIFRoaXMgYWRkcyB0aGUgZW50cnkgdG8gdGhlIGhhc2ggcXVldWVzIGFuZCBpbml0aWFsaXplcyBAaW5vZGUuCisgKiBUaGUgZW50cnkgd2FzIGFjdHVhbGx5IGZpbGxlZCBpbiBlYXJsaWVyIGR1cmluZyBkX2FsbG9jKCkuCisgKi8KKyAKK3N0YXRpYyBpbmxpbmUgdm9pZCBkX2FkZChzdHJ1Y3QgZGVudHJ5ICplbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlkX2luc3RhbnRpYXRlKGVudHJ5LCBpbm9kZSk7CisJZF9yZWhhc2goZW50cnkpOworfQorCisvKioKKyAqIGRfYWRkX3VuaXF1ZSAtIGFkZCBkZW50cnkgdG8gaGFzaCBxdWV1ZXMgd2l0aG91dCBhbGlhc2luZworICogQGVudHJ5OiBkZW50cnkgdG8gYWRkCisgKiBAaW5vZGU6IFRoZSBpbm9kZSB0byBhdHRhY2ggdG8gdGhpcyBkZW50cnkKKyAqCisgKiBUaGlzIGFkZHMgdGhlIGVudHJ5IHRvIHRoZSBoYXNoIHF1ZXVlcyBhbmQgaW5pdGlhbGl6ZXMgQGlub2RlLgorICogVGhlIGVudHJ5IHdhcyBhY3R1YWxseSBmaWxsZWQgaW4gZWFybGllciBkdXJpbmcgZF9hbGxvYygpLgorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkZW50cnkgKmRfYWRkX3VuaXF1ZShzdHJ1Y3QgZGVudHJ5ICplbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpyZXM7CisKKwlyZXMgPSBkX2luc3RhbnRpYXRlX3VuaXF1ZShlbnRyeSwgaW5vZGUpOworCWRfcmVoYXNoKHJlcyAhPSBOVUxMID8gcmVzIDogZW50cnkpOworCXJldHVybiByZXM7Cit9CisKKy8qIHVzZWQgZm9yIHJlbmFtZSgpIGFuZCBiYXNrZXRzICovCitleHRlcm4gdm9pZCBkX21vdmUoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgZGVudHJ5ICopOworCisvKiBhcHBlbmRpeCBtYXkgZWl0aGVyIGJlIE5VTEwgb3IgYmUgdXNlZCBmb3IgdHJhbnNuYW1lIHN1ZmZpeGVzICovCitleHRlcm4gc3RydWN0IGRlbnRyeSAqIGRfbG9va3VwKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IHFzdHIgKik7CitleHRlcm4gc3RydWN0IGRlbnRyeSAqIF9fZF9sb29rdXAoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgcXN0ciAqKTsKKworLyogdmFsaWRhdGUgImluc2VjdXJlIiBkZW50cnkgcG9pbnRlciAqLworZXh0ZXJuIGludCBkX3ZhbGlkYXRlKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGRlbnRyeSAqKTsKKworZXh0ZXJuIGNoYXIgKiBkX3BhdGgoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgdmZzbW91bnQgKiwgY2hhciAqLCBpbnQpOworICAKKy8qIEFsbG9jYXRpb24gY291bnRzLi4gKi8KKworLyoqCisgKglkZ2V0LCBkZ2V0X2xvY2tlZAktCWdldCBhIHJlZmVyZW5jZSB0byBhIGRlbnRyeQorICoJQGRlbnRyeTogZGVudHJ5IHRvIGdldCBhIHJlZmVyZW5jZSB0bworICoKKyAqCUdpdmVuIGEgZGVudHJ5IG9yICVOVUxMIHBvaW50ZXIgaW5jcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQKKyAqCWlmIGFwcHJvcHJpYXRlIGFuZCByZXR1cm4gdGhlIGRlbnRyeS4gQSBkZW50cnkgd2lsbCBub3QgYmUgCisgKglkZXN0cm95ZWQgd2hlbiBpdCBoYXMgcmVmZXJlbmNlcy4gZGdldCgpIHNob3VsZCBuZXZlciBiZQorICoJY2FsbGVkIGZvciBkZW50cmllcyB3aXRoIHplcm8gcmVmZXJlbmNlIGNvdW50ZXIuIEZvciB0aGVzZSBjYXNlcworICoJKHByZWZlcmFibHkgbm9uZSwgZnVuY3Rpb25zIGluIGRjYWNoZS5jIGFyZSBzdWZmaWNpZW50IGZvciBub3JtYWwKKyAqCW5lZWRzIGFuZCB0aGV5IHRha2UgbmVjZXNzYXJ5IHByZWNhdXRpb25zKSB5b3Ugc2hvdWxkIGhvbGQgZGNhY2hlX2xvY2sKKyAqCWFuZCBjYWxsIGRnZXRfbG9ja2VkKCkgaW5zdGVhZCBvZiBkZ2V0KCkuCisgKi8KKyAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGRlbnRyeSAqZGdldChzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJaWYgKGRlbnRyeSkgeworCQlCVUdfT04oIWF0b21pY19yZWFkKCZkZW50cnktPmRfY291bnQpKTsKKwkJYXRvbWljX2luYygmZGVudHJ5LT5kX2NvdW50KTsKKwl9CisJcmV0dXJuIGRlbnRyeTsKK30KKworZXh0ZXJuIHN0cnVjdCBkZW50cnkgKiBkZ2V0X2xvY2tlZChzdHJ1Y3QgZGVudHJ5ICopOworCisvKioKKyAqCWRfdW5oYXNoZWQgLQlpcyBkZW50cnkgaGFzaGVkCisgKglAZGVudHJ5OiBlbnRyeSB0byBjaGVjaworICoKKyAqCVJldHVybnMgdHJ1ZSBpZiB0aGUgZGVudHJ5IHBhc3NlZCBpcyBub3QgY3VycmVudGx5IGhhc2hlZC4KKyAqLworIAorc3RhdGljIGlubGluZSBpbnQgZF91bmhhc2hlZChzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJcmV0dXJuIChkZW50cnktPmRfZmxhZ3MgJiBEQ0FDSEVfVU5IQVNIRUQpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkZW50cnkgKmRnZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpyZXQ7CisKKwlzcGluX2xvY2soJmRlbnRyeS0+ZF9sb2NrKTsKKwlyZXQgPSBkZ2V0KGRlbnRyeS0+ZF9wYXJlbnQpOworCXNwaW5fdW5sb2NrKCZkZW50cnktPmRfbG9jayk7CisJcmV0dXJuIHJldDsKK30KKworZXh0ZXJuIHZvaWQgZHB1dChzdHJ1Y3QgZGVudHJ5ICopOworCitzdGF0aWMgaW5saW5lIGludCBkX21vdW50cG9pbnQoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworCXJldHVybiBkZW50cnktPmRfbW91bnRlZDsKK30KKworZXh0ZXJuIHN0cnVjdCB2ZnNtb3VudCAqbG9va3VwX21udChzdHJ1Y3QgdmZzbW91bnQgKiwgc3RydWN0IGRlbnRyeSAqKTsKK2V4dGVybiBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfY3JlYXRlKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBpbnQgaXNfZGlyKTsKKworZXh0ZXJuIGludCBzeXNjdGxfdmZzX2NhY2hlX3ByZXNzdXJlOworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYJLyogX19MSU5VWF9EQ0FDSEVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kY29va2llcy5oIGIvaW5jbHVkZS9saW51eC9kY29va2llcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyODA1MDEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2Rjb29raWVzLmgKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIGRjb29raWVzLmgKKyAqCisgKiBQZXJzaXN0ZW50IGNvb2tpZS1wYXRoIG1hcHBpbmdzCisgKgorICogQ29weXJpZ2h0IDIwMDIgSm9obiBMZXZvbiA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisgKi8KKworI2lmbmRlZiBEQ09PS0lFU19ICisjZGVmaW5lIERDT09LSUVTX0gKKyAKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2lmZGVmIENPTkZJR19QUk9GSUxJTkcKKyAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorIAorc3RydWN0IGRjb29raWVfdXNlcjsKKyAKKy8qKgorICogZGNvb2tpZV9yZWdpc3RlciAtIHJlZ2lzdGVyIGEgdXNlciBvZiBkY29va2llcworICoKKyAqIFJlZ2lzdGVyIGFzIGEgZGNvb2tpZSB1c2VyLiBSZXR1cm5zICVOVUxMIG9uIGZhaWx1cmUuCisgKi8KK3N0cnVjdCBkY29va2llX3VzZXIgKiBkY29va2llX3JlZ2lzdGVyKHZvaWQpOworCisvKioKKyAqIGRjb29raWVfdW5yZWdpc3RlciAtIHVucmVnaXN0ZXIgYSB1c2VyIG9mIGRjb29raWVzCisgKgorICogVW5yZWdpc3RlciBhcyBhIGRjb29raWUgdXNlci4gVGhpcyBtYXkgaW52YWxpZGF0ZQorICogYW55IGRjb29raWUgdmFsdWVzIHJldHVybmVkIGZyb20gZ2V0X2Rjb29raWUoKS4KKyAqLwordm9pZCBkY29va2llX3VucmVnaXN0ZXIoc3RydWN0IGRjb29raWVfdXNlciAqIHVzZXIpOworICAKKy8qKgorICogZ2V0X2Rjb29raWUgLSBhY3F1aXJlIGEgZGNvb2tpZQorICoKKyAqIENvbnZlcnQgdGhlIGdpdmVuIGRlbnRyeS92ZnNtb3VudCBwYWlyIGludG8KKyAqIGEgY29va2llIHZhbHVlLgorICoKKyAqIFJldHVybnMgLUVJTlZBTCBpZiBubyBsaXZpbmcgdGFzayBoYXMgcmVnaXN0ZXJlZCBhcyBhCisgKiBkY29va2llIHVzZXIuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIHdpdGggKmNvb2tpZSBmaWxsZWQgaW4KKyAqLworaW50IGdldF9kY29va2llKHN0cnVjdCBkZW50cnkgKiBkZW50cnksIHN0cnVjdCB2ZnNtb3VudCAqIHZmc21udCwKKwl1bnNpZ25lZCBsb25nICogY29va2llKTsKKworI2Vsc2UKKworc3RydWN0IGRjb29raWVfdXNlciAqIGRjb29raWVfcmVnaXN0ZXIodm9pZCkKK3sKKwlyZXR1cm4gTlVMTDsKK30KKwordm9pZCBkY29va2llX3VucmVnaXN0ZXIoc3RydWN0IGRjb29raWVfdXNlciAqIHVzZXIpCit7CisJcmV0dXJuOworfQorIAorc3RhdGljIGlubGluZSBpbnQgZ2V0X2Rjb29raWUoc3RydWN0IGRlbnRyeSAqIGRlbnRyeSwKKwlzdHJ1Y3QgdmZzbW91bnQgKiB2ZnNtbnQsIHVuc2lnbmVkIGxvbmcgKiBjb29raWUpCit7CisJcmV0dXJuIC1FTk9TWVM7Cit9IAorIAorI2VuZGlmIC8qIENPTkZJR19QUk9GSUxJTkcgKi8KKyAKKyNlbmRpZiAvKiBEQ09PS0lFU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RlYnVnZnMuaCBiL2luY2x1ZGUvbGludXgvZGVidWdmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3YTdiODYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2RlYnVnZnMuaApAQCAtMCwwICsxLDkyIEBACisvKgorICogIGRlYnVnZnMuaCAtIGEgdGlueSBsaXR0bGUgZGVidWcgZmlsZSBzeXN0ZW0KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0IEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ0Brcm9haC5jb20+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA0IElCTSBJbmMuCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbgorICoJMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgZGVidWdmcyBpcyBmb3IgcGVvcGxlIHRvIHVzZSBpbnN0ZWFkIG9mIC9wcm9jIG9yIC9zeXMuCisgKiAgU2VlIERvY3VtZW50YXRpb24vRG9jQm9vay9rZXJuZWwtYXBpIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfREVCVUdGU19IXworI2RlZmluZSBfREVCVUdGU19IXworCisjaW5jbHVkZSA8bGludXgvZnMuaD4KKworI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKQorc3RydWN0IGRlbnRyeSAqZGVidWdmc19jcmVhdGVfZmlsZShjb25zdCBjaGFyICpuYW1lLCBtb2RlX3QgbW9kZSwKKwkJCQkgICBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsIHZvaWQgKmRhdGEsCisJCQkJICAgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZm9wcyk7CisKK3N0cnVjdCBkZW50cnkgKmRlYnVnZnNfY3JlYXRlX2Rpcihjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQpOworCit2b2lkIGRlYnVnZnNfcmVtb3ZlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7CisKK3N0cnVjdCBkZW50cnkgKmRlYnVnZnNfY3JlYXRlX3U4KGNvbnN0IGNoYXIgKm5hbWUsIG1vZGVfdCBtb2RlLAorCQkJCSBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsIHU4ICp2YWx1ZSk7CitzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2NyZWF0ZV91MTYoY29uc3QgY2hhciAqbmFtZSwgbW9kZV90IG1vZGUsCisJCQkJICBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsIHUxNiAqdmFsdWUpOworc3RydWN0IGRlbnRyeSAqZGVidWdmc19jcmVhdGVfdTMyKGNvbnN0IGNoYXIgKm5hbWUsIG1vZGVfdCBtb2RlLAorCQkJCSAgc3RydWN0IGRlbnRyeSAqcGFyZW50LCB1MzIgKnZhbHVlKTsKK3N0cnVjdCBkZW50cnkgKmRlYnVnZnNfY3JlYXRlX2Jvb2woY29uc3QgY2hhciAqbmFtZSwgbW9kZV90IG1vZGUsCisJCQkJICBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsIHUzMiAqdmFsdWUpOworCisjZWxzZQorLyogCisgKiBXZSBkbyBub3QgcmV0dXJuIE5VTEwgZnJvbSB0aGVzZSBmdW5jdGlvbnMgaWYgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBlbmFibGVkCisgKiBzbyB1c2VycyBoYXZlIGEgY2hhbmNlIHRvIGRldGVjdCBpZiB0aGVyZSB3YXMgYSByZWFsIGVycm9yIG9yIG5vdC4gIFdlIGRvbid0CisgKiB3YW50IHRvIGR1cGxpY2F0ZSB0aGUgZGVzaWduIGRlY2lzaW9uIG1pc3Rha2VzIG9mIHByb2NmcyBhbmQgZGV2ZnMgYWdhaW4uCisgKi8KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2NyZWF0ZV9maWxlKGNvbnN0IGNoYXIgKm5hbWUsIG1vZGVfdCBtb2RlLAorCQkJCQkJIHN0cnVjdCBkZW50cnkgKnBhcmVudCwKKwkJCQkJCSB2b2lkICpkYXRhLAorCQkJCQkJIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmZvcHMpCit7CisJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGRlbnRyeSAqZGVidWdmc19jcmVhdGVfZGlyKGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJCQlzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQpCit7CisJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZWJ1Z2ZzX3JlbW92ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7IH0KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2NyZWF0ZV91OChjb25zdCBjaGFyICpuYW1lLCBtb2RlX3QgbW9kZSwKKwkJCQkJICAgICAgIHN0cnVjdCBkZW50cnkgKnBhcmVudCwKKwkJCQkJICAgICAgIHU4ICp2YWx1ZSkKK3sKKwlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2NyZWF0ZV91MTYoY29uc3QgY2hhciAqbmFtZSwgbW9kZV90IG1vZGUsCisJCQkJCQlzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsCisJCQkJCQl1OCAqdmFsdWUpCit7CisJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGRlbnRyeSAqZGVidWdmc19jcmVhdGVfdTMyKGNvbnN0IGNoYXIgKm5hbWUsIG1vZGVfdCBtb2RlLAorCQkJCQkJc3RydWN0IGRlbnRyeSAqcGFyZW50LAorCQkJCQkJdTggKnZhbHVlKQoreworCXJldHVybiBFUlJfUFRSKC1FTk9ERVYpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkZW50cnkgKmRlYnVnZnNfY3JlYXRlX2Jvb2woY29uc3QgY2hhciAqbmFtZSwgbW9kZV90IG1vZGUsCisJCQkJCQkgc3RydWN0IGRlbnRyeSAqcGFyZW50LAorCQkJCQkJIHU4ICp2YWx1ZSkKK3sKKwlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKK30KKworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kZWxheS5oIGIvaW5jbHVkZS9saW51eC9kZWxheS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjYjc0ODYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2RlbGF5LmgKQEAgLTAsMCArMSw1MCBAQAorI2lmbmRlZiBfTElOVVhfREVMQVlfSAorI2RlZmluZSBfTElOVVhfREVMQVlfSAorCisvKgorICogQ29weXJpZ2h0IChDKSAxOTkzIExpbnVzIFRvcnZhbGRzCisgKgorICogRGVsYXkgcm91dGluZXMsIHVzaW5nIGEgcHJlLWNvbXB1dGVkICJsb29wc19wZXJfamlmZnkiIHZhbHVlLgorICovCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIGxvb3BzX3Blcl9qaWZmeTsKKworI2luY2x1ZGUgPGFzbS9kZWxheS5oPgorCisvKgorICogVXNpbmcgdWRlbGF5KCkgZm9yIGludGVydmFscyBncmVhdGVyIHRoYW4gYSBmZXcgbWlsbGlzZWNvbmRzIGNhbgorICogcmlzayBvdmVyZmxvdyBmb3IgaGlnaCBsb29wc19wZXJfamlmZnkgKGhpZ2ggYm9nb21pcHMpIG1hY2hpbmVzLiBUaGUKKyAqIG1kZWxheSgpIHByb3ZpZGVzIGEgd3JhcHBlciB0byBwcmV2ZW50IHRoaXMuICBGb3IgZGVsYXlzIGdyZWF0ZXIKKyAqIHRoYW4gTUFYX1VERUxBWV9NUyBtaWxsaXNlY29uZHMsIHRoZSB3cmFwcGVyIGlzIHVzZWQuICBBcmNoaXRlY3R1cmUKKyAqIHNwZWNpZmljIHZhbHVlcyBjYW4gYmUgZGVmaW5lZCBpbiBhc20tPz8/L2RlbGF5LmggYXMgYW4gb3ZlcnJpZGUuCisgKiBUaGUgMm5kIG1kZWxheSgpIGRlZmluaXRpb24gZW5zdXJlcyBHQ0Mgd2lsbCBvcHRpbWl6ZSBhd2F5IHRoZSAKKyAqIHdoaWxlIGxvb3AgZm9yIHRoZSBjb21tb24gY2FzZXMgd2hlcmUgbiA8PSBNQVhfVURFTEFZX01TICAtLSAgUGF1bCBHLgorICovCisKKyNpZm5kZWYgTUFYX1VERUxBWV9NUworI2RlZmluZSBNQVhfVURFTEFZX01TCTUKKyNlbmRpZgorCisjaWZkZWYgbm90ZGVmCisjZGVmaW5lIG1kZWxheShuKSAoXAorCXt1bnNpZ25lZCBsb25nIF9fbXM9KG4pOyB3aGlsZSAoX19tcy0tKSB1ZGVsYXkoMTAwMCk7fSkKKyNlbHNlCisjZGVmaW5lIG1kZWxheShuKSAoXAorCShfX2J1aWx0aW5fY29uc3RhbnRfcChuKSAmJiAobik8PU1BWF9VREVMQVlfTVMpID8gdWRlbGF5KChuKSoxMDAwKSA6IFwKKwkoe3Vuc2lnbmVkIGxvbmcgX19tcz0obik7IHdoaWxlIChfX21zLS0pIHVkZWxheSgxMDAwKTt9KSkKKyNlbmRpZgorCisjaWZuZGVmIG5kZWxheQorI2RlZmluZSBuZGVsYXkoeCkJdWRlbGF5KCgoeCkrOTk5KS8xMDAwKQorI2VuZGlmCisKK3ZvaWQgY2FsaWJyYXRlX2RlbGF5KHZvaWQpOwordm9pZCBtc2xlZXAodW5zaWduZWQgaW50IG1zZWNzKTsKK3Vuc2lnbmVkIGxvbmcgbXNsZWVwX2ludGVycnVwdGlibGUodW5zaWduZWQgaW50IG1zZWNzKTsKKworc3RhdGljIGlubGluZSB2b2lkIHNzbGVlcCh1bnNpZ25lZCBpbnQgc2Vjb25kcykKK3sKKwltc2xlZXAoc2Vjb25kcyAqIDEwMDApOworfQorCisjZW5kaWYgLyogZGVmaW5lZChfTElOVVhfREVMQVlfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGV2ZnNfZnMuaCBiL2luY2x1ZGUvbGludXgvZGV2ZnNfZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTIzNmY0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9kZXZmc19mcy5oCkBAIC0wLDAgKzEsNDEgQEAKKyNpZm5kZWYgX0xJTlVYX0RFVkZTX0ZTX0gKKyNkZWZpbmUgX0xJTlVYX0RFVkZTX0ZTX0gKKworI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisKKyNkZWZpbmUgREVWRlNEX1BST1RPQ09MX1JFVklTSU9OX0tFUk5FTCAgNQorCisjZGVmaW5lCURFVkZTRF9JT0NUTF9CQVNFCSdkJworCisvKiAgVGhlc2UgYXJlIHRoZSB2YXJpb3VzIGlvY3RscyAgKi8KKyNkZWZpbmUgREVWRlNESU9DX0dFVF9QUk9UT19SRVYgICAgICAgICBfSU9SKERFVkZTRF9JT0NUTF9CQVNFLCAwLCBpbnQpCisjZGVmaW5lIERFVkZTRElPQ19TRVRfRVZFTlRfTUFTSyAgICAgICAgX0lPVyhERVZGU0RfSU9DVExfQkFTRSwgMiwgaW50KQorI2RlZmluZSBERVZGU0RJT0NfUkVMRUFTRV9FVkVOVF9RVUVVRSAgIF9JT1coREVWRlNEX0lPQ1RMX0JBU0UsIDMsIGludCkKKyNkZWZpbmUgREVWRlNESU9DX1NFVF9ERUJVR19NQVNLICAgICAgICBfSU9XKERFVkZTRF9JT0NUTF9CQVNFLCA0LCBpbnQpCisKKyNkZWZpbmUgREVWRlNEX05PVElGWV9SRUdJU1RFUkVEICAgIDAKKyNkZWZpbmUgREVWRlNEX05PVElGWV9VTlJFR0lTVEVSRUQgIDEKKyNkZWZpbmUgREVWRlNEX05PVElGWV9BU1lOQ19PUEVOICAgIDIKKyNkZWZpbmUgREVWRlNEX05PVElGWV9DTE9TRSAgICAgICAgIDMKKyNkZWZpbmUgREVWRlNEX05PVElGWV9MT09LVVAgICAgICAgIDQKKyNkZWZpbmUgREVWRlNEX05PVElGWV9DSEFOR0UgICAgICAgIDUKKyNkZWZpbmUgREVWRlNEX05PVElGWV9DUkVBVEUgICAgICAgIDYKKyNkZWZpbmUgREVWRlNEX05PVElGWV9ERUxFVEUgICAgICAgIDcKKworI2RlZmluZSBERVZGU19QQVRITEVOICAgICAgICAgICAgICAgMTAyNAkvKiAgTmV2ZXIgY2hhbmdlIHRoaXMgb3RoZXJ3aXNlIHRoZQorCQkJCQkJICAgYmluYXJ5IGludGVyZmFjZSB3aWxsIGNoYW5nZSAgICovCisKK3N0cnVjdCBkZXZmc2Rfbm90aWZ5X3N0cnVjdCB7CS8qICBVc2UgbmF0aXZlIEMgdHlwZXMgdG8gZW5zdXJlIHNhbWUgdHlwZXMgaW4ga2VybmVsIGFuZCB1c2VyIHNwYWNlICAgICAqLworCXVuc2lnbmVkIGludCB0eXBlOwkvKiAgREVWRlNEX05PVElGWV8qIHZhbHVlICAgICAgICAgICAgICAgICAgICovCisJdW5zaWduZWQgaW50IG1vZGU7CS8qICBNb2RlIG9mIHRoZSBpbm9kZSBvciBkZXZpY2UgZW50cnkgICAgICAgKi8KKwl1bnNpZ25lZCBpbnQgbWFqb3I7CS8qICBNYWpvciBudW1iZXIgb2YgZGV2aWNlIGVudHJ5ICAgICAgICAgICAgKi8KKwl1bnNpZ25lZCBpbnQgbWlub3I7CS8qICBNaW5vciBudW1iZXIgb2YgZGV2aWNlIGVudHJ5ICAgICAgICAgICAgKi8KKwl1bnNpZ25lZCBpbnQgdWlkOwkvKiAgVWlkIG9mIHByb2Nlc3MsIGlub2RlIG9yIGRldmljZSBlbnRyeSAgICovCisJdW5zaWduZWQgaW50IGdpZDsJLyogIEdpZCBvZiBwcm9jZXNzLCBpbm9kZSBvciBkZXZpY2UgZW50cnkgICAqLworCXVuc2lnbmVkIGludCBvdmVycnVuX2NvdW50OwkvKiAgTnVtYmVyIG9mIGxvc3QgZXZlbnRzICAgICAgICAgICAgICAgICAgICovCisJdW5zaWduZWQgaW50IG5hbWVsZW47CS8qICBOdW1iZXIgb2YgY2hhcmFjdGVycyBub3QgaW5jbHVkaW5nICdcMCcgKi8KKwkvKiAgVGhlIGRldmljZSBuYW1lIE1VU1QgY29tZSBsYXN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwljaGFyIGRldm5hbWVbREVWRlNfUEFUSExFTl07CS8qICBUaGlzIHdpbGwgYmUgJ1wwJyB0ZXJtaW5hdGVkICAgICAgICAgICAgKi8KK307CisKKyNlbmRpZgkJCQkvKiAgX0xJTlVYX0RFVkZTX0ZTX0ggICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RldmZzX2ZzX2tlcm5lbC5oIGIvaW5jbHVkZS9saW51eC9kZXZmc19mc19rZXJuZWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTgxMGU3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9kZXZmc19mc19rZXJuZWwuaApAQCAtMCwwICsxLDU4IEBACisjaWZuZGVmIF9MSU5VWF9ERVZGU19GU19LRVJORUxfSAorI2RlZmluZSBfTElOVVhfREVWRlNfRlNfS0VSTkVMX0gKKworI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgorCisjZGVmaW5lIERFVkZTX1NVUEVSX01BR0lDICAgICAgICAgICAgICAgIDB4MTM3MworCisjaWZkZWYgQ09ORklHX0RFVkZTX0ZTCitleHRlcm4gaW50IGRldmZzX21rX2JkZXYoZGV2X3QgZGV2LCB1bW9kZV90IG1vZGUsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorICAgIF9fYXR0cmlidXRlX18gKChmb3JtYXQocHJpbnRmLCAzLCA0KSkpOworZXh0ZXJuIGludCBkZXZmc19ta19jZGV2KGRldl90IGRldiwgdW1vZGVfdCBtb2RlLCBjb25zdCBjaGFyICpmbXQsIC4uLikKKyAgICBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0KHByaW50ZiwgMywgNCkpKTsKK2V4dGVybiBpbnQgZGV2ZnNfbWtfc3ltbGluayhjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpsaW5rKTsKK2V4dGVybiBpbnQgZGV2ZnNfbWtfZGlyKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorICAgIF9fYXR0cmlidXRlX18gKChmb3JtYXQocHJpbnRmLCAxLCAyKSkpOworZXh0ZXJuIHZvaWQgZGV2ZnNfcmVtb3ZlKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorICAgIF9fYXR0cmlidXRlX18gKChmb3JtYXQocHJpbnRmLCAxLCAyKSkpOworZXh0ZXJuIGludCBkZXZmc19yZWdpc3Rlcl90YXBlKGNvbnN0IGNoYXIgKm5hbWUpOworZXh0ZXJuIHZvaWQgZGV2ZnNfdW5yZWdpc3Rlcl90YXBlKGludCBudW0pOworZXh0ZXJuIHZvaWQgbW91bnRfZGV2ZnNfZnModm9pZCk7CisjZWxzZQkJCQkvKiAgQ09ORklHX0RFVkZTX0ZTICAqLworc3RhdGljIGlubGluZSBpbnQgZGV2ZnNfbWtfYmRldihkZXZfdCBkZXYsIHVtb2RlX3QgbW9kZSwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW5saW5lIGludCBkZXZmc19ta19jZGV2KGRldl90IGRldiwgdW1vZGVfdCBtb2RlLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbmxpbmUgaW50IGRldmZzX21rX3N5bWxpbmsoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqbGluaykKK3sKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbmxpbmUgaW50IGRldmZzX21rX2Rpcihjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBkZXZmc19yZW1vdmUoY29uc3QgY2hhciAqZm10LCAuLi4pCit7Cit9CitzdGF0aWMgaW5saW5lIGludCBkZXZmc19yZWdpc3Rlcl90YXBlKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJcmV0dXJuIC0xOworfQorc3RhdGljIGlubGluZSB2b2lkIGRldmZzX3VucmVnaXN0ZXJfdGFwZShpbnQgbnVtKQoreworfQorc3RhdGljIGlubGluZSB2b2lkIG1vdW50X2RldmZzX2ZzKHZvaWQpCit7CisJcmV0dXJuOworfQorI2VuZGlmCQkJCS8qICBDT05GSUdfREVWRlNfRlMgICovCisjZW5kaWYJCQkJLyogIF9MSU5VWF9ERVZGU19GU19LRVJORUxfSCAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGV2aWNlLW1hcHBlci5oIGIvaW5jbHVkZS9saW51eC9kZXZpY2UtbWFwcGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNjN2QyMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvZGV2aWNlLW1hcHBlci5oCkBAIC0wLDAgKzEsMTMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAxIFNpc3RpbmEgU29mdHdhcmUgKFVLKSBMaW1pdGVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0IFJlZCBIYXQsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIExHUEwuCisgKi8KKworI2lmbmRlZiBfTElOVVhfREVWSUNFX01BUFBFUl9ICisjZGVmaW5lIF9MSU5VWF9ERVZJQ0VfTUFQUEVSX0gKKworc3RydWN0IGRtX3RhcmdldDsKK3N0cnVjdCBkbV90YWJsZTsKK3N0cnVjdCBkbV9kZXY7CisKK3R5cGVkZWYgZW51bSB7IFNUQVRVU1RZUEVfSU5GTywgU1RBVFVTVFlQRV9UQUJMRSB9IHN0YXR1c190eXBlX3Q7CisKK3VuaW9uIG1hcF9pbmZvIHsKKwl2b2lkICpwdHI7CisJdW5zaWduZWQgbG9uZyBsb25nIGxsOworfTsKKworLyoKKyAqIEluIHRoZSBjb25zdHJ1Y3RvciB0aGUgdGFyZ2V0IHBhcmFtZXRlciB3aWxsIGFscmVhZHkgaGF2ZSB0aGUKKyAqIHRhYmxlLCB0eXBlLCBiZWdpbiBhbmQgbGVuIGZpZWxkcyBmaWxsZWQgaW4uCisgKi8KK3R5cGVkZWYgaW50ICgqZG1fY3RyX2ZuKSAoc3RydWN0IGRtX3RhcmdldCAqdGFyZ2V0LAorCQkJICB1bnNpZ25lZCBpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworCisvKgorICogVGhlIGRlc3RydWN0b3IgZG9lc24ndCBuZWVkIHRvIGZyZWUgdGhlIGRtX3RhcmdldCwganVzdAorICogYW55dGhpbmcgaGlkZGVuIHRpLT5wcml2YXRlLgorICovCit0eXBlZGVmIHZvaWQgKCpkbV9kdHJfZm4pIChzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSk7CisKKy8qCisgKiBUaGUgbWFwIGZ1bmN0aW9uIG11c3QgcmV0dXJuOgorICogPCAwOiBlcnJvcgorICogPSAwOiBUaGUgdGFyZ2V0IHdpbGwgaGFuZGxlIHRoZSBpbyBieSByZXN1Ym1pdHRpbmcgaXQgbGF0ZXIKKyAqID4gMDogc2ltcGxlIHJlbWFwIGNvbXBsZXRlCisgKi8KK3R5cGVkZWYgaW50ICgqZG1fbWFwX2ZuKSAoc3RydWN0IGRtX3RhcmdldCAqdGksIHN0cnVjdCBiaW8gKmJpbywKKwkJCSAgdW5pb24gbWFwX2luZm8gKm1hcF9jb250ZXh0KTsKKworLyoKKyAqIFJldHVybnM6CisgKiA8IDAgOiBlcnJvciAoY3VycmVudGx5IGlnbm9yZWQpCisgKiAwICAgOiBlbmRlZCBzdWNjZXNzZnVsbHkKKyAqIDEgICA6IGZvciBzb21lIHJlYXNvbiB0aGUgaW8gaGFzIHN0aWxsIG5vdCBjb21wbGV0ZWQgKGVnLAorICogICAgICAgbXVsdGlwYXRoIHRhcmdldCBtaWdodCB3YW50IHRvIHJlcXVldWUgYSBmYWlsZWQgaW8pLgorICovCit0eXBlZGVmIGludCAoKmRtX2VuZGlvX2ZuKSAoc3RydWN0IGRtX3RhcmdldCAqdGksCisJCQkgICAgc3RydWN0IGJpbyAqYmlvLCBpbnQgZXJyb3IsCisJCQkgICAgdW5pb24gbWFwX2luZm8gKm1hcF9jb250ZXh0KTsKKwordHlwZWRlZiB2b2lkICgqZG1fcHJlc3VzcGVuZF9mbikgKHN0cnVjdCBkbV90YXJnZXQgKnRpKTsKK3R5cGVkZWYgdm9pZCAoKmRtX3Bvc3RzdXNwZW5kX2ZuKSAoc3RydWN0IGRtX3RhcmdldCAqdGkpOwordHlwZWRlZiB2b2lkICgqZG1fcmVzdW1lX2ZuKSAoc3RydWN0IGRtX3RhcmdldCAqdGkpOworCit0eXBlZGVmIGludCAoKmRtX3N0YXR1c19mbikgKHN0cnVjdCBkbV90YXJnZXQgKnRpLCBzdGF0dXNfdHlwZV90IHN0YXR1c190eXBlLAorCQkJICAgICBjaGFyICpyZXN1bHQsIHVuc2lnbmVkIGludCBtYXhsZW4pOworCit0eXBlZGVmIGludCAoKmRtX21lc3NhZ2VfZm4pIChzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSwgdW5zaWduZWQgYXJnYywgY2hhciAqKmFyZ3YpOworCit2b2lkIGRtX2Vycm9yKGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworCisvKgorICogQ29uc3RydWN0b3JzIHNob3VsZCBjYWxsIHRoZXNlIGZ1bmN0aW9ucyB0byBlbnN1cmUgZGVzdGluYXRpb24gZGV2aWNlcworICogYXJlIG9wZW5lZC9jbG9zZWQgY29ycmVjdGx5LgorICogRklYTUU6IHRvbyBtYW55IGFyZ3VtZW50cy4KKyAqLworaW50IGRtX2dldF9kZXZpY2Uoc3RydWN0IGRtX3RhcmdldCAqdGksIGNvbnN0IGNoYXIgKnBhdGgsIHNlY3Rvcl90IHN0YXJ0LAorCQkgIHNlY3Rvcl90IGxlbiwgaW50IG1vZGUsIHN0cnVjdCBkbV9kZXYgKipyZXN1bHQpOwordm9pZCBkbV9wdXRfZGV2aWNlKHN0cnVjdCBkbV90YXJnZXQgKnRpLCBzdHJ1Y3QgZG1fZGV2ICpkKTsKKworLyoKKyAqIEluZm9ybWF0aW9uIGFib3V0IGEgdGFyZ2V0IHR5cGUKKyAqLworc3RydWN0IHRhcmdldF90eXBlIHsKKwljb25zdCBjaGFyICpuYW1lOworCXN0cnVjdCBtb2R1bGUgKm1vZHVsZTsKKyAgICAgICAgdW5zaWduZWQgdmVyc2lvblszXTsKKwlkbV9jdHJfZm4gY3RyOworCWRtX2R0cl9mbiBkdHI7CisJZG1fbWFwX2ZuIG1hcDsKKwlkbV9lbmRpb19mbiBlbmRfaW87CisJZG1fcHJlc3VzcGVuZF9mbiBwcmVzdXNwZW5kOworCWRtX3Bvc3RzdXNwZW5kX2ZuIHBvc3RzdXNwZW5kOworCWRtX3Jlc3VtZV9mbiByZXN1bWU7CisJZG1fc3RhdHVzX2ZuIHN0YXR1czsKKwlkbV9tZXNzYWdlX2ZuIG1lc3NhZ2U7Cit9OworCitzdHJ1Y3QgaW9fcmVzdHJpY3Rpb25zIHsKKwl1bnNpZ25lZCBzaG9ydAkJbWF4X3NlY3RvcnM7CisJdW5zaWduZWQgc2hvcnQJCW1heF9waHlzX3NlZ21lbnRzOworCXVuc2lnbmVkIHNob3J0CQltYXhfaHdfc2VnbWVudHM7CisJdW5zaWduZWQgc2hvcnQJCWhhcmRzZWN0X3NpemU7CisJdW5zaWduZWQgaW50CQltYXhfc2VnbWVudF9zaXplOworCXVuc2lnbmVkIGxvbmcJCXNlZ19ib3VuZGFyeV9tYXNrOworfTsKKworc3RydWN0IGRtX3RhcmdldCB7CisJc3RydWN0IGRtX3RhYmxlICp0YWJsZTsKKwlzdHJ1Y3QgdGFyZ2V0X3R5cGUgKnR5cGU7CisKKwkvKiB0YXJnZXQgbGltaXRzICovCisJc2VjdG9yX3QgYmVnaW47CisJc2VjdG9yX3QgbGVuOworCisJLyogRklYTUU6IHR1cm4gdGhpcyBpbnRvIGEgbWFzaywgYW5kIG1lcmdlIHdpdGggaW9fcmVzdHJpY3Rpb25zICovCisJLyogQWx3YXlzIGEgcG93ZXIgb2YgMiAqLworCXNlY3Rvcl90IHNwbGl0X2lvOworCisJLyoKKwkgKiBUaGVzZSBhcmUgYXV0b21hdGljYWxseSBmaWxsZWQgaW4gYnkKKwkgKiBkbV90YWJsZV9nZXRfZGV2aWNlLgorCSAqLworCXN0cnVjdCBpb19yZXN0cmljdGlvbnMgbGltaXRzOworCisJLyogdGFyZ2V0IHNwZWNpZmljIGRhdGEgKi8KKwl2b2lkICpwcml2YXRlOworCisJLyogVXNlZCB0byBwcm92aWRlIGFuIGVycm9yIHN0cmluZyBmcm9tIHRoZSBjdHIgKi8KKwljaGFyICplcnJvcjsKK307CisKK2ludCBkbV9yZWdpc3Rlcl90YXJnZXQoc3RydWN0IHRhcmdldF90eXBlICp0KTsKK2ludCBkbV91bnJlZ2lzdGVyX3RhcmdldChzdHJ1Y3QgdGFyZ2V0X3R5cGUgKnQpOworCisjZW5kaWYJCQkJLyogX0xJTlVYX0RFVklDRV9NQVBQRVJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvZGV2aWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y0NzA0NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvZGV2aWNlLmgKQEAgLTAsMCArMSw0MjYgQEAKKy8qCisgKiBkZXZpY2UuaCAtIGdlbmVyaWMsIGNlbnRyYWxpemVkIGRyaXZlciBtb2RlbAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDAzIFBhdHJpY2sgTW9jaGVsIDxtb2NoZWxAb3NkbC5vcmc+CisgKgorICogVGhpcyBmaWxlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBHUEx2MgorICoKKyAqIFNlZSBEb2N1bWVudGF0aW9uL2RyaXZlci1tb2RlbC8gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgKi8KKworI2lmbmRlZiBfREVWSUNFX0hfCisjZGVmaW5lIF9ERVZJQ0VfSF8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2tvYmplY3QuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisKKyNkZWZpbmUgREVWSUNFX05BTUVfU0laRQk1MAorI2RlZmluZSBERVZJQ0VfTkFNRV9IQUxGCV9fc3RyaW5naWZ5KDIwKQkvKiBMZXNzIHRoYW4gaGFsZiB0byBhY2NvbW1vZGF0ZSBzbG9wICovCisjZGVmaW5lIERFVklDRV9JRF9TSVpFCQkzMgorI2RlZmluZSBCVVNfSURfU0laRQkJS09CSl9OQU1FX0xFTgorCisKK2VudW0geworCVNVU1BFTkRfTk9USUZZLAorCVNVU1BFTkRfU0FWRV9TVEFURSwKKwlTVVNQRU5EX0RJU0FCTEUsCisJU1VTUEVORF9QT1dFUl9ET1dOLAorfTsKKworZW51bSB7CisJUkVTVU1FX1BPV0VSX09OLAorCVJFU1VNRV9SRVNUT1JFX1NUQVRFLAorCVJFU1VNRV9FTkFCTEUsCit9OworCitzdHJ1Y3QgZGV2aWNlOworc3RydWN0IGRldmljZV9kcml2ZXI7CitzdHJ1Y3QgY2xhc3M7CitzdHJ1Y3QgY2xhc3NfZGV2aWNlOworc3RydWN0IGNsYXNzX3NpbXBsZTsKKworc3RydWN0IGJ1c190eXBlIHsKKwljaGFyCQkJKiBuYW1lOworCisJc3RydWN0IHN1YnN5c3RlbQlzdWJzeXM7CisJc3RydWN0IGtzZXQJCWRyaXZlcnM7CisJc3RydWN0IGtzZXQJCWRldmljZXM7CisKKwlzdHJ1Y3QgYnVzX2F0dHJpYnV0ZQkqIGJ1c19hdHRyczsKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZQkqIGRldl9hdHRyczsKKwlzdHJ1Y3QgZHJpdmVyX2F0dHJpYnV0ZQkqIGRydl9hdHRyczsKKworCWludAkJKCptYXRjaCkoc3RydWN0IGRldmljZSAqIGRldiwgc3RydWN0IGRldmljZV9kcml2ZXIgKiBkcnYpOworCWludAkJKCpob3RwbHVnKSAoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICoqZW52cCwgCisJCQkJICAgIGludCBudW1fZW52cCwgY2hhciAqYnVmZmVyLCBpbnQgYnVmZmVyX3NpemUpOworCWludAkJKCpzdXNwZW5kKShzdHJ1Y3QgZGV2aWNlICogZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpOworCWludAkJKCpyZXN1bWUpKHN0cnVjdCBkZXZpY2UgKiBkZXYpOworfTsKKworZXh0ZXJuIGludCBidXNfcmVnaXN0ZXIoc3RydWN0IGJ1c190eXBlICogYnVzKTsKK2V4dGVybiB2b2lkIGJ1c191bnJlZ2lzdGVyKHN0cnVjdCBidXNfdHlwZSAqIGJ1cyk7CisKK2V4dGVybiBpbnQgYnVzX3Jlc2Nhbl9kZXZpY2VzKHN0cnVjdCBidXNfdHlwZSAqIGJ1cyk7CisKK2V4dGVybiBzdHJ1Y3QgYnVzX3R5cGUgKiBnZXRfYnVzKHN0cnVjdCBidXNfdHlwZSAqIGJ1cyk7CitleHRlcm4gdm9pZCBwdXRfYnVzKHN0cnVjdCBidXNfdHlwZSAqIGJ1cyk7CisKK2V4dGVybiBzdHJ1Y3QgYnVzX3R5cGUgKiBmaW5kX2J1cyhjaGFyICogbmFtZSk7CisKKy8qIGl0ZXJhdG9yIGhlbHBlcnMgZm9yIGJ1c2VzICovCisKK2ludCBidXNfZm9yX2VhY2hfZGV2KHN0cnVjdCBidXNfdHlwZSAqIGJ1cywgc3RydWN0IGRldmljZSAqIHN0YXJ0LCB2b2lkICogZGF0YSwKKwkJICAgICBpbnQgKCpmbikoc3RydWN0IGRldmljZSAqLCB2b2lkICopKTsKKworaW50IGJ1c19mb3JfZWFjaF9kcnYoc3RydWN0IGJ1c190eXBlICogYnVzLCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqIHN0YXJ0LCAKKwkJICAgICB2b2lkICogZGF0YSwgaW50ICgqZm4pKHN0cnVjdCBkZXZpY2VfZHJpdmVyICosIHZvaWQgKikpOworCisKKy8qIGRyaXZlcmZzIGludGVyZmFjZSBmb3IgZXhwb3J0aW5nIGJ1cyBhdHRyaWJ1dGVzICovCisKK3N0cnVjdCBidXNfYXR0cmlidXRlIHsKKwlzdHJ1Y3QgYXR0cmlidXRlCWF0dHI7CisJc3NpemVfdCAoKnNob3cpKHN0cnVjdCBidXNfdHlwZSAqLCBjaGFyICogYnVmKTsKKwlzc2l6ZV90ICgqc3RvcmUpKHN0cnVjdCBidXNfdHlwZSAqLCBjb25zdCBjaGFyICogYnVmLCBzaXplX3QgY291bnQpOworfTsKKworI2RlZmluZSBCVVNfQVRUUihfbmFtZSxfbW9kZSxfc2hvdyxfc3RvcmUpCVwKK3N0cnVjdCBidXNfYXR0cmlidXRlIGJ1c19hdHRyXyMjX25hbWUgPSBfX0FUVFIoX25hbWUsX21vZGUsX3Nob3csX3N0b3JlKQorCitleHRlcm4gaW50IGJ1c19jcmVhdGVfZmlsZShzdHJ1Y3QgYnVzX3R5cGUgKiwgc3RydWN0IGJ1c19hdHRyaWJ1dGUgKik7CitleHRlcm4gdm9pZCBidXNfcmVtb3ZlX2ZpbGUoc3RydWN0IGJ1c190eXBlICosIHN0cnVjdCBidXNfYXR0cmlidXRlICopOworCitzdHJ1Y3QgZGV2aWNlX2RyaXZlciB7CisJY2hhcgkJCSogbmFtZTsKKwlzdHJ1Y3QgYnVzX3R5cGUJCSogYnVzOworCisJc3RydWN0IGNvbXBsZXRpb24JdW5sb2FkZWQ7CisJc3RydWN0IGtvYmplY3QJCWtvYmo7CisJc3RydWN0IGxpc3RfaGVhZAlkZXZpY2VzOworCisJc3RydWN0IG1vZHVsZSAJCSogb3duZXI7CisKKwlpbnQJKCpwcm9iZSkJKHN0cnVjdCBkZXZpY2UgKiBkZXYpOworCWludCAJKCpyZW1vdmUpCShzdHJ1Y3QgZGV2aWNlICogZGV2KTsKKwl2b2lkCSgqc2h1dGRvd24pCShzdHJ1Y3QgZGV2aWNlICogZGV2KTsKKwlpbnQJKCpzdXNwZW5kKQkoc3RydWN0IGRldmljZSAqIGRldiwgcG1fbWVzc2FnZV90IHN0YXRlLCB1MzIgbGV2ZWwpOworCWludAkoKnJlc3VtZSkJKHN0cnVjdCBkZXZpY2UgKiBkZXYsIHUzMiBsZXZlbCk7Cit9OworCisKK2V4dGVybiBpbnQgZHJpdmVyX3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2VfZHJpdmVyICogZHJ2KTsKK2V4dGVybiB2b2lkIGRyaXZlcl91bnJlZ2lzdGVyKHN0cnVjdCBkZXZpY2VfZHJpdmVyICogZHJ2KTsKKworZXh0ZXJuIHN0cnVjdCBkZXZpY2VfZHJpdmVyICogZ2V0X2RyaXZlcihzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqIGRydik7CitleHRlcm4gdm9pZCBwdXRfZHJpdmVyKHN0cnVjdCBkZXZpY2VfZHJpdmVyICogZHJ2KTsKK2V4dGVybiBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJpdmVyX2ZpbmQoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IGJ1c190eXBlICpidXMpOworCisKKy8qIGRyaXZlcmZzIGludGVyZmFjZSBmb3IgZXhwb3J0aW5nIGRyaXZlciBhdHRyaWJ1dGVzICovCisKK3N0cnVjdCBkcml2ZXJfYXR0cmlidXRlIHsKKwlzdHJ1Y3QgYXR0cmlidXRlCWF0dHI7CisJc3NpemVfdCAoKnNob3cpKHN0cnVjdCBkZXZpY2VfZHJpdmVyICosIGNoYXIgKiBidWYpOworCXNzaXplX3QgKCpzdG9yZSkoc3RydWN0IGRldmljZV9kcml2ZXIgKiwgY29uc3QgY2hhciAqIGJ1Ziwgc2l6ZV90IGNvdW50KTsKK307CisKKyNkZWZpbmUgRFJJVkVSX0FUVFIoX25hbWUsX21vZGUsX3Nob3csX3N0b3JlKQlcCitzdHJ1Y3QgZHJpdmVyX2F0dHJpYnV0ZSBkcml2ZXJfYXR0cl8jI19uYW1lID0gX19BVFRSKF9uYW1lLF9tb2RlLF9zaG93LF9zdG9yZSkKKworZXh0ZXJuIGludCBkcml2ZXJfY3JlYXRlX2ZpbGUoc3RydWN0IGRldmljZV9kcml2ZXIgKiwgc3RydWN0IGRyaXZlcl9hdHRyaWJ1dGUgKik7CitleHRlcm4gdm9pZCBkcml2ZXJfcmVtb3ZlX2ZpbGUoc3RydWN0IGRldmljZV9kcml2ZXIgKiwgc3RydWN0IGRyaXZlcl9hdHRyaWJ1dGUgKik7CisKKworLyoKKyAqIGRldmljZSBjbGFzc2VzCisgKi8KK3N0cnVjdCBjbGFzcyB7CisJY2hhcgkJCSogbmFtZTsKKworCXN0cnVjdCBzdWJzeXN0ZW0Jc3Vic3lzOworCXN0cnVjdCBsaXN0X2hlYWQJY2hpbGRyZW47CisJc3RydWN0IGxpc3RfaGVhZAlpbnRlcmZhY2VzOworCXN0cnVjdCBzZW1hcGhvcmUJc2VtOwkvKiBsb2NrcyBib3RoIHRoZSBjaGlsZHJlbiBhbmQgaW50ZXJmYWNlcyBsaXN0cyAqLworCisJc3RydWN0IGNsYXNzX2F0dHJpYnV0ZQkJKiBjbGFzc19hdHRyczsKKwlzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZQkqIGNsYXNzX2Rldl9hdHRyczsKKworCWludAkoKmhvdHBsdWcpKHN0cnVjdCBjbGFzc19kZXZpY2UgKmRldiwgY2hhciAqKmVudnAsIAorCQkJICAgaW50IG51bV9lbnZwLCBjaGFyICpidWZmZXIsIGludCBidWZmZXJfc2l6ZSk7CisKKwl2b2lkCSgqcmVsZWFzZSkoc3RydWN0IGNsYXNzX2RldmljZSAqZGV2KTsKKwl2b2lkCSgqY2xhc3NfcmVsZWFzZSkoc3RydWN0IGNsYXNzICpjbGFzcyk7Cit9OworCitleHRlcm4gaW50IGNsYXNzX3JlZ2lzdGVyKHN0cnVjdCBjbGFzcyAqKTsKK2V4dGVybiB2b2lkIGNsYXNzX3VucmVnaXN0ZXIoc3RydWN0IGNsYXNzICopOworCitleHRlcm4gc3RydWN0IGNsYXNzICogY2xhc3NfZ2V0KHN0cnVjdCBjbGFzcyAqKTsKK2V4dGVybiB2b2lkIGNsYXNzX3B1dChzdHJ1Y3QgY2xhc3MgKik7CisKKworc3RydWN0IGNsYXNzX2F0dHJpYnV0ZSB7CisJc3RydWN0IGF0dHJpYnV0ZQlhdHRyOworCXNzaXplX3QgKCpzaG93KShzdHJ1Y3QgY2xhc3MgKiwgY2hhciAqIGJ1Zik7CisJc3NpemVfdCAoKnN0b3JlKShzdHJ1Y3QgY2xhc3MgKiwgY29uc3QgY2hhciAqIGJ1Ziwgc2l6ZV90IGNvdW50KTsKK307CisKKyNkZWZpbmUgQ0xBU1NfQVRUUihfbmFtZSxfbW9kZSxfc2hvdyxfc3RvcmUpCQkJXAorc3RydWN0IGNsYXNzX2F0dHJpYnV0ZSBjbGFzc19hdHRyXyMjX25hbWUgPSBfX0FUVFIoX25hbWUsX21vZGUsX3Nob3csX3N0b3JlKSAKKworZXh0ZXJuIGludCBjbGFzc19jcmVhdGVfZmlsZShzdHJ1Y3QgY2xhc3MgKiwgY29uc3Qgc3RydWN0IGNsYXNzX2F0dHJpYnV0ZSAqKTsKK2V4dGVybiB2b2lkIGNsYXNzX3JlbW92ZV9maWxlKHN0cnVjdCBjbGFzcyAqLCBjb25zdCBzdHJ1Y3QgY2xhc3NfYXR0cmlidXRlICopOworCisKK3N0cnVjdCBjbGFzc19kZXZpY2UgeworCXN0cnVjdCBsaXN0X2hlYWQJbm9kZTsKKworCXN0cnVjdCBrb2JqZWN0CQlrb2JqOworCXN0cnVjdCBjbGFzcwkJKiBjbGFzczsJLyogcmVxdWlyZWQgKi8KKwlkZXZfdAkJCWRldnQ7CQkvKiBkZXZfdCwgY3JlYXRlcyB0aGUgc3lzZnMgImRldiIgKi8KKwlzdHJ1Y3QgZGV2aWNlCQkqIGRldjsJCS8qIG5vdCBuZWNlc3NhcnksIGJ1dCBuaWNlIHRvIGhhdmUgKi8KKwl2b2lkCQkJKiBjbGFzc19kYXRhOwkvKiBjbGFzcy1zcGVjaWZpYyBkYXRhICovCisKKwljaGFyCWNsYXNzX2lkW0JVU19JRF9TSVpFXTsJLyogdW5pcXVlIHRvIHRoaXMgY2xhc3MgKi8KK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqCitjbGFzc19nZXRfZGV2ZGF0YSAoc3RydWN0IGNsYXNzX2RldmljZSAqZGV2KQoreworCXJldHVybiBkZXYtPmNsYXNzX2RhdGE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorY2xhc3Nfc2V0X2RldmRhdGEgKHN0cnVjdCBjbGFzc19kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKK3sKKwlkZXYtPmNsYXNzX2RhdGEgPSBkYXRhOworfQorCisKK2V4dGVybiBpbnQgY2xhc3NfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBjbGFzc19kZXZpY2UgKik7CitleHRlcm4gdm9pZCBjbGFzc19kZXZpY2VfdW5yZWdpc3RlcihzdHJ1Y3QgY2xhc3NfZGV2aWNlICopOworZXh0ZXJuIHZvaWQgY2xhc3NfZGV2aWNlX2luaXRpYWxpemUoc3RydWN0IGNsYXNzX2RldmljZSAqKTsKK2V4dGVybiBpbnQgY2xhc3NfZGV2aWNlX2FkZChzdHJ1Y3QgY2xhc3NfZGV2aWNlICopOworZXh0ZXJuIHZvaWQgY2xhc3NfZGV2aWNlX2RlbChzdHJ1Y3QgY2xhc3NfZGV2aWNlICopOworCitleHRlcm4gaW50IGNsYXNzX2RldmljZV9yZW5hbWUoc3RydWN0IGNsYXNzX2RldmljZSAqLCBjaGFyICopOworCitleHRlcm4gc3RydWN0IGNsYXNzX2RldmljZSAqIGNsYXNzX2RldmljZV9nZXQoc3RydWN0IGNsYXNzX2RldmljZSAqKTsKK2V4dGVybiB2b2lkIGNsYXNzX2RldmljZV9wdXQoc3RydWN0IGNsYXNzX2RldmljZSAqKTsKKworc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgeworCXN0cnVjdCBhdHRyaWJ1dGUJYXR0cjsKKwlzc2l6ZV90ICgqc2hvdykoc3RydWN0IGNsYXNzX2RldmljZSAqLCBjaGFyICogYnVmKTsKKwlzc2l6ZV90ICgqc3RvcmUpKHN0cnVjdCBjbGFzc19kZXZpY2UgKiwgY29uc3QgY2hhciAqIGJ1Ziwgc2l6ZV90IGNvdW50KTsKK307CisKKyNkZWZpbmUgQ0xBU1NfREVWSUNFX0FUVFIoX25hbWUsX21vZGUsX3Nob3csX3N0b3JlKQkJXAorc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgY2xhc3NfZGV2aWNlX2F0dHJfIyNfbmFtZSA9IAlcCisJX19BVFRSKF9uYW1lLF9tb2RlLF9zaG93LF9zdG9yZSkKKworZXh0ZXJuIGludCBjbGFzc19kZXZpY2VfY3JlYXRlX2ZpbGUoc3RydWN0IGNsYXNzX2RldmljZSAqLCAKKwkJCQkgICAgY29uc3Qgc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgKik7CitleHRlcm4gdm9pZCBjbGFzc19kZXZpY2VfcmVtb3ZlX2ZpbGUoc3RydWN0IGNsYXNzX2RldmljZSAqLCAKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlICopOworZXh0ZXJuIGludCBjbGFzc19kZXZpY2VfY3JlYXRlX2Jpbl9maWxlKHN0cnVjdCBjbGFzc19kZXZpY2UgKiwKKwkJCQkJc3RydWN0IGJpbl9hdHRyaWJ1dGUgKik7CitleHRlcm4gdm9pZCBjbGFzc19kZXZpY2VfcmVtb3ZlX2Jpbl9maWxlKHN0cnVjdCBjbGFzc19kZXZpY2UgKiwKKwkJCQkJIHN0cnVjdCBiaW5fYXR0cmlidXRlICopOworCitzdHJ1Y3QgY2xhc3NfaW50ZXJmYWNlIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCW5vZGU7CisJc3RydWN0IGNsYXNzCQkqY2xhc3M7CisKKwlpbnQgKCphZGQpCShzdHJ1Y3QgY2xhc3NfZGV2aWNlICopOworCXZvaWQgKCpyZW1vdmUpCShzdHJ1Y3QgY2xhc3NfZGV2aWNlICopOworfTsKKworZXh0ZXJuIGludCBjbGFzc19pbnRlcmZhY2VfcmVnaXN0ZXIoc3RydWN0IGNsYXNzX2ludGVyZmFjZSAqKTsKK2V4dGVybiB2b2lkIGNsYXNzX2ludGVyZmFjZV91bnJlZ2lzdGVyKHN0cnVjdCBjbGFzc19pbnRlcmZhY2UgKik7CisKKy8qIGludGVyZmFjZSBmb3IgY2xhc3Mgc2ltcGxlIHN0dWZmICovCitleHRlcm4gc3RydWN0IGNsYXNzX3NpbXBsZSAqY2xhc3Nfc2ltcGxlX2NyZWF0ZShzdHJ1Y3QgbW9kdWxlICpvd25lciwgY2hhciAqbmFtZSk7CitleHRlcm4gdm9pZCBjbGFzc19zaW1wbGVfZGVzdHJveShzdHJ1Y3QgY2xhc3Nfc2ltcGxlICpjcyk7CitleHRlcm4gc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3Nfc2ltcGxlX2RldmljZV9hZGQoc3RydWN0IGNsYXNzX3NpbXBsZSAqY3MsIGRldl90IGRldiwgc3RydWN0IGRldmljZSAqZGV2aWNlLCBjb25zdCBjaGFyICpmbXQsIC4uLikKKwlfX2F0dHJpYnV0ZV9fKChmb3JtYXQocHJpbnRmLDQsNSkpKTsKK2V4dGVybiBpbnQgY2xhc3Nfc2ltcGxlX3NldF9ob3RwbHVnKHN0cnVjdCBjbGFzc19zaW1wbGUgKiwgCisJaW50ICgqaG90cGx1Zykoc3RydWN0IGNsYXNzX2RldmljZSAqZGV2LCBjaGFyICoqZW52cCwgaW50IG51bV9lbnZwLCBjaGFyICpidWZmZXIsIGludCBidWZmZXJfc2l6ZSkpOworZXh0ZXJuIHZvaWQgY2xhc3Nfc2ltcGxlX2RldmljZV9yZW1vdmUoZGV2X3QgZGV2KTsKKworCitzdHJ1Y3QgZGV2aWNlIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CQkvKiBub2RlIGluIHNpYmxpbmcgbGlzdCAqLworCXN0cnVjdCBsaXN0X2hlYWQgYnVzX2xpc3Q7CS8qIG5vZGUgaW4gYnVzJ3MgbGlzdCAqLworCXN0cnVjdCBsaXN0X2hlYWQgZHJpdmVyX2xpc3Q7CisJc3RydWN0IGxpc3RfaGVhZCBjaGlsZHJlbjsKKwlzdHJ1Y3QgZGV2aWNlIAkqIHBhcmVudDsKKworCXN0cnVjdCBrb2JqZWN0IGtvYmo7CisJY2hhcglidXNfaWRbQlVTX0lEX1NJWkVdOwkvKiBwb3NpdGlvbiBvbiBwYXJlbnQgYnVzICovCisKKwlzdHJ1Y3QgYnVzX3R5cGUJKiBidXM7CQkvKiB0eXBlIG9mIGJ1cyBkZXZpY2UgaXMgb24gKi8KKwlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJpdmVyOwkvKiB3aGljaCBkcml2ZXIgaGFzIGFsbG9jYXRlZCB0aGlzCisJCQkJCSAgIGRldmljZSAqLworCXZvaWQJCSpkcml2ZXJfZGF0YTsJLyogZGF0YSBwcml2YXRlIHRvIHRoZSBkcml2ZXIgKi8KKwl2b2lkCQkqcGxhdGZvcm1fZGF0YTsJLyogUGxhdGZvcm0gc3BlY2lmaWMgZGF0YSAoZS5nLiBBQ1BJLAorCQkJCQkgICBCSU9TIGRhdGEgcmVsZXZhbnQgdG8gZGV2aWNlKSAqLworCXN0cnVjdCBkZXZfcG1faW5mbwlwb3dlcjsKKworCXUzMgkJZGV0YWNoX3N0YXRlOwkvKiBTdGF0ZSB0byBlbnRlciB3aGVuIGRldmljZSBpcworCQkJCQkgICBkZXRhY2hlZCBmcm9tIGl0cyBkcml2ZXIuICovCisKKwl1NjQJCSpkbWFfbWFzazsJLyogZG1hIG1hc2sgKGlmIGRtYSdhYmxlIGRldmljZSkgKi8KKwl1NjQJCWNvaGVyZW50X2RtYV9tYXNrOy8qIExpa2UgZG1hX21hc2ssIGJ1dCBmb3IKKwkJCQkJICAgICBhbGxvY19jb2hlcmVudCBtYXBwaW5ncyBhcworCQkJCQkgICAgIG5vdCBhbGwgaGFyZHdhcmUgc3VwcG9ydHMKKwkJCQkJICAgICA2NCBiaXQgYWRkcmVzc2VzIGZvciBjb25zaXN0ZW50CisJCQkJCSAgICAgYWxsb2NhdGlvbnMgc3VjaCBkZXNjcmlwdG9ycy4gKi8KKworCXN0cnVjdCBsaXN0X2hlYWQJZG1hX3Bvb2xzOwkvKiBkbWEgcG9vbHMgKGlmIGRtYSdibGUpICovCisKKwlzdHJ1Y3QgZG1hX2NvaGVyZW50X21lbQkqZG1hX21lbTsgLyogaW50ZXJuYWwgZm9yIGNvaGVyZW50IG1lbQorCQkJCQkgICAgIG92ZXJyaWRlICovCisKKwl2b2lkCSgqcmVsZWFzZSkoc3RydWN0IGRldmljZSAqIGRldik7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkZXZpY2UgKgorbGlzdF90b19kZXYoc3RydWN0IGxpc3RfaGVhZCAqbm9kZSkKK3sKKwlyZXR1cm4gbGlzdF9lbnRyeShub2RlLCBzdHJ1Y3QgZGV2aWNlLCBub2RlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkICoKK2Rldl9nZXRfZHJ2ZGF0YSAoc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiBkZXYtPmRyaXZlcl9kYXRhOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2Rldl9zZXRfZHJ2ZGF0YSAoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQoreworCWRldi0+ZHJpdmVyX2RhdGEgPSBkYXRhOworfQorCisvKgorICogSGlnaCBsZXZlbCByb3V0aW5lcyBmb3IgdXNlIGJ5IHRoZSBidXMgZHJpdmVycworICovCitleHRlcm4gaW50IGRldmljZV9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICogZGV2KTsKK2V4dGVybiB2b2lkIGRldmljZV91bnJlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKiBkZXYpOworZXh0ZXJuIHZvaWQgZGV2aWNlX2luaXRpYWxpemUoc3RydWN0IGRldmljZSAqIGRldik7CitleHRlcm4gaW50IGRldmljZV9hZGQoc3RydWN0IGRldmljZSAqIGRldik7CitleHRlcm4gdm9pZCBkZXZpY2VfZGVsKHN0cnVjdCBkZXZpY2UgKiBkZXYpOworZXh0ZXJuIGludCBkZXZpY2VfZm9yX2VhY2hfY2hpbGQoc3RydWN0IGRldmljZSAqLCB2b2lkICosCisJCSAgICAgaW50ICgqZm4pKHN0cnVjdCBkZXZpY2UgKiwgdm9pZCAqKSk7CisKKy8qCisgKiBNYW51YWwgYmluZGluZyBvZiBhIGRldmljZSB0byBkcml2ZXIuIFNlZSBkcml2ZXJzL2Jhc2UvYnVzLmMKKyAqIGZvciBpbmZvcm1hdGlvbiBvbiB1c2UuCisgKi8KK2V4dGVybiBpbnQgIGRyaXZlcl9wcm9iZV9kZXZpY2Uoc3RydWN0IGRldmljZV9kcml2ZXIgKiBkcnYsIHN0cnVjdCBkZXZpY2UgKiBkZXYpOworZXh0ZXJuIHZvaWQgZGV2aWNlX2JpbmRfZHJpdmVyKHN0cnVjdCBkZXZpY2UgKiBkZXYpOworZXh0ZXJuIHZvaWQgZGV2aWNlX3JlbGVhc2VfZHJpdmVyKHN0cnVjdCBkZXZpY2UgKiBkZXYpOworZXh0ZXJuIGludCAgZGV2aWNlX2F0dGFjaChzdHJ1Y3QgZGV2aWNlICogZGV2KTsKK2V4dGVybiB2b2lkIGRyaXZlcl9hdHRhY2goc3RydWN0IGRldmljZV9kcml2ZXIgKiBkcnYpOworCisKKy8qIGRyaXZlcmZzIGludGVyZmFjZSBmb3IgZXhwb3J0aW5nIGRldmljZSBhdHRyaWJ1dGVzICovCisKK3N0cnVjdCBkZXZpY2VfYXR0cmlidXRlIHsKKwlzdHJ1Y3QgYXR0cmlidXRlCWF0dHI7CisJc3NpemVfdCAoKnNob3cpKHN0cnVjdCBkZXZpY2UgKiBkZXYsIGNoYXIgKiBidWYpOworCXNzaXplX3QgKCpzdG9yZSkoc3RydWN0IGRldmljZSAqIGRldiwgY29uc3QgY2hhciAqIGJ1Ziwgc2l6ZV90IGNvdW50KTsKK307CisKKyNkZWZpbmUgREVWSUNFX0FUVFIoX25hbWUsX21vZGUsX3Nob3csX3N0b3JlKSBcCitzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkZXZfYXR0cl8jI19uYW1lID0gX19BVFRSKF9uYW1lLF9tb2RlLF9zaG93LF9zdG9yZSkKKworCitleHRlcm4gaW50IGRldmljZV9jcmVhdGVfZmlsZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICogZW50cnkpOworZXh0ZXJuIHZvaWQgZGV2aWNlX3JlbW92ZV9maWxlKHN0cnVjdCBkZXZpY2UgKiBkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICogYXR0cik7CisKKy8qCisgKiBQbGF0Zm9ybSAiZml4dXAiIGZ1bmN0aW9ucyAtIGFsbG93IHRoZSBwbGF0Zm9ybSB0byBoYXZlIHRoZWlyIHNheQorICogYWJvdXQgZGV2aWNlcyBhbmQgYWN0aW9ucyB0aGF0IHRoZSBnZW5lcmFsIGRldmljZSBsYXllciBkb2Vzbid0CisgKiBrbm93IGFib3V0LgorICovCisvKiBOb3RpZnkgcGxhdGZvcm0gb2YgZGV2aWNlIGRpc2NvdmVyeSAqLworZXh0ZXJuIGludCAoKnBsYXRmb3JtX25vdGlmeSkoc3RydWN0IGRldmljZSAqIGRldik7CisKK2V4dGVybiBpbnQgKCpwbGF0Zm9ybV9ub3RpZnlfcmVtb3ZlKShzdHJ1Y3QgZGV2aWNlICogZGV2KTsKKworCisvKioKKyAqIGdldF9kZXZpY2UgLSBhdG9taWNhbGx5IGluY3JlbWVudCB0aGUgcmVmZXJlbmNlIGNvdW50IGZvciB0aGUgZGV2aWNlLgorICoKKyAqLworZXh0ZXJuIHN0cnVjdCBkZXZpY2UgKiBnZXRfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKiBkZXYpOworZXh0ZXJuIHZvaWQgcHV0X2RldmljZShzdHJ1Y3QgZGV2aWNlICogZGV2KTsKK2V4dGVybiBzdHJ1Y3QgZGV2aWNlICpkZXZpY2VfZmluZChjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgYnVzX3R5cGUgKmJ1cyk7CisKKworLyogZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMgKi8KKworc3RydWN0IHBsYXRmb3JtX2RldmljZSB7CisJY2hhcgkJKiBuYW1lOworCXUzMgkJaWQ7CisJc3RydWN0IGRldmljZQlkZXY7CisJdTMyCQludW1fcmVzb3VyY2VzOworCXN0cnVjdCByZXNvdXJjZQkqIHJlc291cmNlOworfTsKKworI2RlZmluZSB0b19wbGF0Zm9ybV9kZXZpY2UoeCkgY29udGFpbmVyX29mKCh4KSwgc3RydWN0IHBsYXRmb3JtX2RldmljZSwgZGV2KQorCitleHRlcm4gaW50IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICopOworZXh0ZXJuIHZvaWQgcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqKTsKKworZXh0ZXJuIHN0cnVjdCBidXNfdHlwZSBwbGF0Zm9ybV9idXNfdHlwZTsKK2V4dGVybiBzdHJ1Y3QgZGV2aWNlIHBsYXRmb3JtX2J1czsKKworZXh0ZXJuIHN0cnVjdCByZXNvdXJjZSAqcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOworZXh0ZXJuIGludCBwbGF0Zm9ybV9nZXRfaXJxKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKiwgdW5zaWduZWQgaW50KTsKK2V4dGVybiBzdHJ1Y3QgcmVzb3VyY2UgKnBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqLCB1bnNpZ25lZCBpbnQsIGNoYXIgKik7CitleHRlcm4gaW50IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKiwgY2hhciAqKTsKK2V4dGVybiBpbnQgcGxhdGZvcm1fYWRkX2RldmljZXMoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqKiwgaW50KTsKKworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoY2hhciAqLCB1bnNpZ25lZCBpbnQsIHN0cnVjdCByZXNvdXJjZSAqLCB1bnNpZ25lZCBpbnQpOworCisvKiBkcml2ZXJzL2Jhc2UvcG93ZXIuYyAqLworZXh0ZXJuIHZvaWQgZGV2aWNlX3NodXRkb3duKHZvaWQpOworCisKKy8qIGRyaXZlcnMvYmFzZS9maXJtd2FyZS5jICovCitleHRlcm4gaW50IGZpcm13YXJlX3JlZ2lzdGVyKHN0cnVjdCBzdWJzeXN0ZW0gKik7CitleHRlcm4gdm9pZCBmaXJtd2FyZV91bnJlZ2lzdGVyKHN0cnVjdCBzdWJzeXN0ZW0gKik7CisKKy8qIGRlYnVnZ2luZyBhbmQgdHJvdWJsZXNob290aW5nL2RpYWdub3N0aWMgaGVscGVycy4gKi8KKyNkZWZpbmUgZGV2X3ByaW50ayhsZXZlbCwgZGV2LCBmb3JtYXQsIGFyZy4uLikJXAorCXByaW50ayhsZXZlbCAiJXMgJXM6ICIgZm9ybWF0ICwgKGRldiktPmRyaXZlciA/IChkZXYpLT5kcml2ZXItPm5hbWUgOiAiIiAsIChkZXYpLT5idXNfaWQgLCAjIyBhcmcpCisKKyNpZmRlZiBERUJVRworI2RlZmluZSBkZXZfZGJnKGRldiwgZm9ybWF0LCBhcmcuLi4pCQlcCisJZGV2X3ByaW50ayhLRVJOX0RFQlVHICwgZGV2ICwgZm9ybWF0ICwgIyMgYXJnKQorI2Vsc2UKKyNkZWZpbmUgZGV2X2RiZyhkZXYsIGZvcm1hdCwgYXJnLi4uKSBkbyB7ICh2b2lkKShkZXYpOyB9IHdoaWxlICgwKQorI2VuZGlmCisKKyNkZWZpbmUgZGV2X2VycihkZXYsIGZvcm1hdCwgYXJnLi4uKQkJXAorCWRldl9wcmludGsoS0VSTl9FUlIgLCBkZXYgLCBmb3JtYXQgLCAjIyBhcmcpCisjZGVmaW5lIGRldl9pbmZvKGRldiwgZm9ybWF0LCBhcmcuLi4pCQlcCisJZGV2X3ByaW50ayhLRVJOX0lORk8gLCBkZXYgLCBmb3JtYXQgLCAjIyBhcmcpCisjZGVmaW5lIGRldl93YXJuKGRldiwgZm9ybWF0LCBhcmcuLi4pCQlcCisJZGV2X3ByaW50ayhLRVJOX1dBUk5JTkcgLCBkZXYgLCBmb3JtYXQgLCAjIyBhcmcpCisKKy8qIENyZWF0ZSBhbGlhcywgc28gSSBjYW4gYmUgYXV0b2xvYWRlZC4gKi8KKyNkZWZpbmUgTU9EVUxFX0FMSUFTX0NIQVJERVYobWFqb3IsbWlub3IpIFwKKwlNT0RVTEVfQUxJQVMoImNoYXItbWFqb3ItIiBfX3N0cmluZ2lmeShtYWpvcikgIi0iIF9fc3RyaW5naWZ5KG1pbm9yKSkKKyNkZWZpbmUgTU9EVUxFX0FMSUFTX0NIQVJERVZfTUFKT1IobWFqb3IpIFwKKwlNT0RVTEVfQUxJQVMoImNoYXItbWFqb3ItIiBfX3N0cmluZ2lmeShtYWpvcikgIi0qIikKKyNlbmRpZiAvKiBfREVWSUNFX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RldnB0c19mcy5oIGIvaW5jbHVkZS9saW51eC9kZXZwdHNfZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjcyZGRjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9kZXZwdHNfZnMuaApAQCAtMCwwICsxLDM0IEBACisvKiAtKi0gbGludXgtYyAtKi0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICoKKyAqCisgKiBsaW51eC9pbmNsdWRlL2xpbnV4L2RldnB0c19mcy5oCisgKgorICogIENvcHlyaWdodCAxOTk4LTIwMDQgSC4gUGV0ZXIgQW52aW4gLS0gQWxsIFJpZ2h0cyBSZXNlcnZlZAorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMaW51eCBrZXJuZWwgYW5kIGlzIG1hZGUgYXZhaWxhYmxlIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIsIG9yIGF0IHlvdXIKKyAqIG9wdGlvbiwgYW55IGxhdGVyIHZlcnNpb24sIGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgorICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmbmRlZiBfTElOVVhfREVWUFRTX0ZTX0gKKyNkZWZpbmUgX0xJTlVYX0RFVlBUU19GU19ICisKKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorCisjaWZkZWYgQ09ORklHX1VOSVg5OF9QVFlTCisKK2ludCBkZXZwdHNfcHR5X25ldyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsgICAgICAvKiBta25vZCBpbiBkZXZwdHMgKi8KK3N0cnVjdCB0dHlfc3RydWN0ICpkZXZwdHNfZ2V0X3R0eShpbnQgbnVtYmVyKTsJIC8qIGdldCB0dHkgc3RydWN0dXJlICovCit2b2lkIGRldnB0c19wdHlfa2lsbChpbnQgbnVtYmVyKTsJCSAvKiB1bmxpbmsgKi8KKworI2Vsc2UKKworLyogRHVtbXkgc3R1YnMgaW4gdGhlIG5vLXB0eSBjYXNlICovCitzdGF0aWMgaW5saW5lIGludCBkZXZwdHNfcHR5X25ldyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KSB7IHJldHVybiAtRUlOVkFMOyB9CitzdGF0aWMgaW5saW5lIHN0cnVjdCB0dHlfc3RydWN0ICpkZXZwdHNfZ2V0X3R0eShpbnQgbnVtYmVyKSB7IHJldHVybiBOVUxMOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgZGV2cHRzX3B0eV9raWxsKGludCBudW1iZXIpIHsgfQorCisjZW5kaWYKKworCisjZW5kaWYgLyogX0xJTlVYX0RFVlBUU19GU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Rpby5oIGIvaW5jbHVkZS9saW51eC9kaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWU5Mzk1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9kaW8uaApAQCAtMCwwICsxLDMxMiBAQAorLyogaGVhZGVyIGZpbGUgZm9yIERJTyBib2FyZHMgZm9yIHRoZSBIUDMwMCBhcmNoaXRlY3R1cmUuCisgKiBNYXliZSB0aGlzIHNob3VsZCBoYW5kbGUgRElPLUlJIGxhdGVyPworICogVGhlIGdlbmVyYWwgc3RydWN0dXJlIG9mIHRoaXMgaXMgdmFndWVseSBiYXNlZCBvbiBob3cKKyAqIHRoZSBBbWlnYSBwb3J0IGhhbmRsZXMgWm9ycm8gYm9hcmRzLgorICogQ29weXJpZ2h0IChDKSBQZXRlciBNYXlkZWxsIDA1LzE5OTggPHBtYXlkZWxsQGNoaWFyay5ncmVlbmVuZC5vcmcudWs+CisgKiBDb252ZXJ0ZWQgdG8gZHJpdmVyIG1vZGVsIEpvY2hlbiBGcmllZHJpY2ggPGpvY2hlbkBzY3JhbS5kZT4KKyAqCisgKiBUaGUgYm9hcmQgSURzIGFyZSBmcm9tIHRoZSBOZXRCU0Qga2VybmVsLCB3aGljaCBmb3Igb25jZSBwcm92aWRlZAorICogaGVscGZ1bCBjb21tZW50cy4uLgorICoKKyAqIFRoaXMgZ29lcyB3aXRoIGRyaXZlcnMvZGlvL2Rpby5jCisgKi8KKworI2lmbmRlZiBfTElOVVhfRElPX0gKKyNkZWZpbmUgX0xJTlVYX0RJT19ICisKKy8qIFRoZSBESU8gYm9hcmRzIGluIGEgc3lzdGVtIGFyZSBkaXN0aW5ndWlzaGVkIGJ5ICdzZWxlY3QgY29kZXMnIHdoaWNoIAorICogcmFuZ2UgZnJvbSAwLTYzIChESU8pIGFuZCAxMzItMjU1IChESU8tSUkpLiAKKyAqIFRoZSBESU8gYm9hcmQgd2l0aCBzZWxlY3QgY29kZSBzYyBpcyBsb2NhdGVkIGF0IHBoeXNpY2FsIGFkZHJlc3MgCisgKiAgICAgMHg2MDAwMDAgKyBzYyAqIDB4MTAwMDAKKyAqIFNvIERJTyBjYXJkcyBjb3ZlciBbMHg2MDAwMDAtMHg4MDAwMDApOyB0aGUgYXJlYXMgWzB4MjAwMDAwLTB4NDAwMDAwKSBhbmQKKyAqIFsweDgwMDAwMC0weDEwMDAwMDApIGFyZSBmb3IgYWRkaXRpb25hbCBzcGFjZSByZXF1aXJlZCBieSB0aGluZ3MKKyAqIGxpa2UgZnJhbWVidWZmZXJzLiBbMHg0MDAwMDAtMHg2MDAwMDApIGlzIGZvciBtaXNjZWxsYW5lb3VzIGludGVybmFsIEkvTy4KKyAqIE9uIExpbnV4LCB0aGlzIGlzIGN1cnJlbnRseSBhbGwgbWFwcGVkIGludG8gdGhlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZQorICogYXQgMHhmMDAwMDAwMCBvbiBib290dXAuCisgKiBESU8tSUkgYm9hcmRzIGFyZSBhdCAweDEwMDAwMDAgKyAoc2MgLSAxMzIpICogMHg0MDAwMDAKKyAqIHdoaWNoIGlzIGFkZHJlc3MgcmFuZ2UgWzB4MTAwMDAwMC0weDIwMDAwMDAwKSAtLSB0b28gYmlnIHRvIG1hcCBjb21wbGV0ZWx5LAorICogc28gY3VycmVudGx5IHdlIGp1c3QgZG9uJ3QgaGFuZGxlIERJTy1JSSBib2FyZHMuICBJdCB3b3VsZG4ndCBiZSBoYXJkIHRvIAorICogZG8gd2l0aCBpb3JlbWFwKCkgdGhvdWdoLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGFzbS9ocDMwMGh3Lmg+CisKK3R5cGVkZWYgX191MTYgZGlvX2lkOworCisgICAgLyoKKyAgICAgKiAgRElPIGRldmljZXMKKyAgICAgKi8KKworc3RydWN0IGRpb19kZXYgeworCXN0cnVjdCBkaW9fYnVzICpidXM7CisJZGlvX2lkIGlkOworCWludCBzY29kZTsKKwlzdHJ1Y3QgZGlvX2RyaXZlciAqZHJpdmVyOwkvKiB3aGljaCBkcml2ZXIgaGFzIGFsbG9jYXRlZCB0aGlzIGRldmljZSAqLworCXN0cnVjdCBkZXZpY2UgZGV2OwkJLyogR2VuZXJpYyBkZXZpY2UgaW50ZXJmYWNlICovCisJdTggaXBsOworCWNoYXIgbmFtZVs2NF07CisJc3RydWN0IHJlc291cmNlIHJlc291cmNlOworfTsKKworI2RlZmluZSB0b19kaW9fZGV2KG4pIGNvbnRhaW5lcl9vZihuLCBzdHJ1Y3QgZGlvX2RldiwgZGV2KQorCisgICAgLyoKKyAgICAgKiAgRElPIGJ1cworICAgICAqLworCitzdHJ1Y3QgZGlvX2J1cyB7CisJc3RydWN0IGxpc3RfaGVhZCBkZXZpY2VzOyAgICAgICAgICAgLyogbGlzdCBvZiBkZXZpY2VzIG9uIHRoaXMgYnVzICovCisJdW5zaWduZWQgaW50IG51bV9yZXNvdXJjZXM7ICAgICAgICAgLyogbnVtYmVyIG9mIHJlc291cmNlcyAqLworCXN0cnVjdCByZXNvdXJjZSByZXNvdXJjZXNbMl07ICAgICAgIC8qIGFkZHJlc3Mgc3BhY2Ugcm91dGVkIHRvIHRoaXMgYnVzICovCisJc3RydWN0IGRldmljZSBkZXY7CisJY2hhciBuYW1lWzEwXTsKK307CisKK2V4dGVybiBzdHJ1Y3QgZGlvX2J1cyBkaW9fYnVzOyAgICAgIC8qIFNpbmdsZSBESU8gYnVzICovCitleHRlcm4gc3RydWN0IGJ1c190eXBlIGRpb19idXNfdHlwZTsKKworICAgIC8qCisgICAgICogIERJTyBkZXZpY2UgSURzCisgICAgICovCisKK3N0cnVjdCBkaW9fZGV2aWNlX2lkIHsKKwlkaW9faWQgaWQ7ICAgICAgICAgICAgICAgICAgICAvKiBEZXZpY2UgSUQgb3IgRElPX1dJTERDQVJEICovCisJdW5zaWduZWQgbG9uZyBkcml2ZXJfZGF0YTsgICAgLyogRGF0YSBwcml2YXRlIHRvIHRoZSBkcml2ZXIgKi8KK307CisKKyAgICAvKgorICAgICAqICBESU8gZGV2aWNlIGRyaXZlcnMKKyAgICAgKi8KKworc3RydWN0IGRpb19kcml2ZXIgeworCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKKwljaGFyICpuYW1lOworCWNvbnN0IHN0cnVjdCBkaW9fZGV2aWNlX2lkICppZF90YWJsZTsgICAgIC8qIE5VTEwgaWYgd2FudHMgYWxsIGRldmljZXMgKi8KKwlpbnQgKCpwcm9iZSkoc3RydWN0IGRpb19kZXYgKnosIGNvbnN0IHN0cnVjdCBkaW9fZGV2aWNlX2lkICppZCk7CisvKiBOZXcgZGV2aWNlIGluc2VydGVkICovCisJdm9pZCAoKnJlbW92ZSkoc3RydWN0IGRpb19kZXYgKnopOyAgICAgICAgLyogRGV2aWNlIHJlbW92ZWQgKE5VTEwgaWYgbm90IGEgaG90LXBsdWcgY2FwYWJsZSBkcml2ZXIpICovCisJc3RydWN0IGRldmljZV9kcml2ZXIgZHJpdmVyOworfTsKKworI2RlZmluZSB0b19kaW9fZHJpdmVyKGRydikgICAgY29udGFpbmVyX29mKGRydiwgc3RydWN0IGRpb19kcml2ZXIsIGRyaXZlcikKKworLyogRElPL0RJTy1JSSBib2FyZHMgYWxsIGhhdmUgdGhlIGZvbGxvd2luZyA4Yml0IHJlZ2lzdGVycy4KKyAqIFRoZXNlIGFyZSBvZmZzZXRzIGZyb20gdGhlIGJhc2Ugb2YgdGhlIGRldmljZS4KKyAqLworI2RlZmluZSBESU9fSURPRkYgICAgIDB4MDEgICAgICAgICAgICAgLyogcHJpbWFyeSBkZXZpY2UgSUQgKi8KKyNkZWZpbmUgRElPX0lQTE9GRiAgICAweDAzICAgICAgICAgICAgIC8qIGludGVycnVwdCBwcmlvcml0eSBsZXZlbCAqLworI2RlZmluZSBESU9fU0VDSURPRkYgIDB4MTUgICAgICAgICAgICAgLyogc2Vjb25kYXJ5IGRldmljZSBJRCAqLworI2RlZmluZSBESU9JSV9TSVpFT0ZGIDB4MTAxICAgICAgICAgICAgLyogZGV2aWNlIHNpemUsIERJTy1JSSBvbmx5ICovCisjZGVmaW5lIERJT19WSVJBRERSQkFTRSAweGYwMDAwMDAwVUwgICAvKiB2aXIgYWRkciB3aGVyZSBJT3NwYWNlIGlzIG1hcHBlZCAqLworCisjZGVmaW5lIERJT19CQVNFICAgICAgICAgICAgICAgIDB4NjAwMDAwICAgICAgICAvKiBzdGFydCBvZiBESU8gc3BhY2UgKi8KKyNkZWZpbmUgRElPX0VORCAgICAgICAgICAgICAgICAgMHgxMDAwMDAwICAgICAgIC8qIGVuZCBvZiBESU8gc3BhY2UgKi8KKyNkZWZpbmUgRElPX0RFVlNJWkUgICAgICAgICAgICAgMHgxMDAwMCAgICAgICAgIC8qIHNpemUgb2YgYSBESU8gZGV2aWNlICovCisKKyNkZWZpbmUgRElPSUlfQkFTRSAgICAgICAgICAgICAgMHgwMTAwMDAwMCAgICAgIC8qIHN0YXJ0IG9mIERJTy1JSSBzcGFjZSAqLworI2RlZmluZSBESU9JSV9FTkQgICAgICAgICAgICAgICAweDIwMDAwMDAwICAgICAgLyogZW5kIG9mIERJTy1JSSBzcGFjZSAqLworI2RlZmluZSBESU9JSV9ERVZTSVpFICAgICAgICAgICAweDAwNDAwMDAwICAgICAgLyogc2l6ZSBvZiBhIERJTy1JSSBkZXZpY2UgKi8KKworLyogSGlnaGVzdCB2YWxpZCBzZWxlY3QgY29kZS4gSWYgd2UgYWRkIERJTy1JSSBzdXBwb3J0IHRoaXMgc2hvdWxkIGJlY29tZQorICogMjU2IGZvciBldmVyeXRoaW5nIGV4Y2VwdCBIUDMyMCwgd2hpY2ggb25seSBoYXMgRElPLgorICovCisjZGVmaW5lIERJT19TQ01BWCAoaHAzMDBfbW9kZWwgPT0gSFBfMzIwID8gMzIgOiAyNTYpCisjZGVmaW5lIERJT0lJX1NDQkFTRSAxMzIgLyogbG93ZXN0IERJTy1JSSBzZWxlY3QgY29kZSAqLworI2RlZmluZSBESU9fU0NJTkhPTEUoc2NvZGUpICgoKHNjb2RlKSA+PSAzMikgJiYgKChzY29kZSkgPCBESU9JSV9TQ0JBU0UpKQorI2RlZmluZSBESU9fSVNESU9JSShzY29kZSkgKChzY29kZSkgPj0gMTMyICYmIChzY29kZSkgPCAyNTYpCisKKy8qIG1hY3JvcyB0byByZWFkIGRldmljZSBJRHMsIGdpdmVuIGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBESU9fSUQoYmFzZWFkZHIpIGluXzgoKGJhc2VhZGRyKSArIERJT19JRE9GRikKKyNkZWZpbmUgRElPX1NFQ0lEKGJhc2VhZGRyKSBpbl84KChiYXNlYWRkcikgKyBESU9fU0VDSURPRkYpCisKKy8qIGV4dHJhY3QgdGhlIGludGVycnVwdCBsZXZlbCAqLworI2RlZmluZSBESU9fSVBMKGJhc2VhZGRyKSAoKChpbl84KChiYXNlYWRkcikgKyBESU9fSVBMT0ZGKSA+PiA0KSAmIDB4MDMpICsgMykKKworLyogZmluZCB0aGUgc2l6ZSBvZiBhIERJTy1JSSBib2FyZCdzIGFkZHJlc3Mgc3BhY2UuCisgKiBESU8gYm9hcmRzIGFyZSBhbGwgZml4ZWQgbGVuZ3RoLgorICovCisjZGVmaW5lIERJT0lJX1NJWkUoYmFzZWFkZHIpICgoaW5fOCgoYmFzZWFkZHIpICsgRElPSUlfU0laRU9GRikgKyAxKSAqIDB4MTAwMDAwKQorCisvKiBnZW5lcmFsIHB1cnBvc2UgbWFjcm8gZm9yIGJvdGggRElPIGFuZCBESU8tSUkgKi8KKyNkZWZpbmUgRElPX1NJWkUoc2NvZGUsIGJhc2UpIChESU9fSVNESU9JSSgoc2NvZGUpKSA/IERJT0lJX1NJWkUoKGJhc2UpKSA6IERJT19ERVZTSVpFKQorCisvKiBUaGUgaGFyZHdhcmUgaGFzIHByaW1hcnkgYW5kIHNlY29uZGFyeSBJRHM7IHdlIGVuY29kZSB0aGVzZSBpbiBhIHNpbmdsZQorICogaW50IGFzIFBSSU1BUlkgSUQgJiAoU0VDT05EQVJZIElEIDw8IDgpLgorICogSW4gcHJhY3RpY2UgdGhpcyBpcyBvbmx5IGltcG9ydGFudCBmb3IgZnJhbWVidWZmZXJzLAorICogYW5kIGV2ZXJ5Ym9keSBlbHNlIGp1c3Qgc2V0cyBJRCBmaWVsZHMgZXF1YWwgdG8gdGhlIERJT19JRF9GT08gdmFsdWUuCisgKi8KKyNkZWZpbmUgRElPX0VOQ09ERV9JRChwcixzZWMpICgoKChpbnQpc2VjICYgMHhmZikgPDwgOCkgfCAoKGludClwciAmIDB4ZmYpKQorLyogbWFjcm8gdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBnaXZlbiBwcmltYXJ5IElEIHJlcXVpcmVzIGEgc2Vjb25kYXJ5IElEIGJ5dGUgKi8KKyNkZWZpbmUgRElPX05FRURTU0VDSUQoaWQpICgoaWQpID09IERJT19JRF9GQlVGRkVSKQorI2RlZmluZSBESU9fV0lMRENBUkQgMHhmZgorCisvKiBOb3cgYSB3aG9sZSBzbGV3IG9mIG1hY3JvcyBnaXZpbmcgZGV2aWNlIElEcyBhbmQgZGVzY3JpcHRpdmUgc3RyaW5nczogKi8KKyNkZWZpbmUgRElPX0lEX0RDQTAgICAgIDB4MDIgLyogOTg2NDRBIHNlcmlhbCAqLworI2RlZmluZSBESU9fREVTQ19EQ0EwICI5ODY0NEEgRENBMCBzZXJpYWwiCisjZGVmaW5lIERJT19JRF9EQ0EwUkVNICAweDgyIC8qIDk4NjQ0QSBzZXJpYWwgKi8KKyNkZWZpbmUgRElPX0RFU0NfRENBMFJFTSAiOTg2NDRBIERDQTBSRU0gc2VyaWFsIgorI2RlZmluZSBESU9fSURfRENBMSAgICAgMHg0MiAvKiA5ODY0NEEgc2VyaWFsICovCisjZGVmaW5lIERJT19ERVNDX0RDQTEgIjk4NjQ0QSBEQ0ExIHNlcmlhbCIKKyNkZWZpbmUgRElPX0lEX0RDQTFSRU0gIDB4YzIgLyogOTg2NDRBIHNlcmlhbCAqLworI2RlZmluZSBESU9fREVTQ19EQ0ExUkVNICI5ODY0NEEgRENBMVJFTSBzZXJpYWwiCisjZGVmaW5lIERJT19JRF9EQ00gICAgICAweDA1IC8qIDk4NjQyQSBzZXJpYWwgTVVYICovCisjZGVmaW5lIERJT19ERVNDX0RDTSAiOTg2NDJBIERDTSBzZXJpYWwgTVVYIgorI2RlZmluZSBESU9fSURfRENNUkVNICAgMHg4NSAvKiA5ODY0MkEgc2VyaWFsIE1VWCAqLworI2RlZmluZSBESU9fREVTQ19EQ01SRU0gIjk4NjQyQSBEQ01SRU0gc2VyaWFsIE1VWCIKKyNkZWZpbmUgRElPX0lEX0xBTiAgICAgIDB4MTUgLyogOTg2NDNBIExBTiAqLworI2RlZmluZSBESU9fREVTQ19MQU4gIjk4NjQzQSBMQU5DRSBldGhlcm5ldCIKKyNkZWZpbmUgRElPX0lEX0ZIUElCICAgIDB4MDggLyogOTg2MjVBLzk4NjI1QiBmYXN0IEhQLUlCICovCisjZGVmaW5lIERJT19ERVNDX0ZIUElCICI5ODYyNUEvOTg2MjVCIGZhc3QgSFBJQiIKKyNkZWZpbmUgRElPX0lEX05IUElCICAgIDB4MDEgLyogOTg2MjRBIEhQLUlCIChub3JtYWwgaWUgc2xvdykgKi8KKyNkZWZpbmUgRElPX0RFU0NfTkhQSUIgIjk4NjI0QSBIUElCIgorI2RlZmluZSBESU9fSURfU0NTSTAgICAgMHgwNyAvKiA5ODI2NUEgU0NTSSAqLworI2RlZmluZSBESU9fREVTQ19TQ1NJMCAiOTgyNjVBIFNDU0kwIgorI2RlZmluZSBESU9fSURfU0NTSTEgICAgMHgyNyAvKiBkaXR0byAqLworI2RlZmluZSBESU9fREVTQ19TQ1NJMSAiOTgyNjVBIFNDU0kxIgorI2RlZmluZSBESU9fSURfU0NTSTIgICAgMHg0NyAvKiBkaXR0byAqLworI2RlZmluZSBESU9fREVTQ19TQ1NJMiAiOTgyNjVBIFNDU0kyIgorI2RlZmluZSBESU9fSURfU0NTSTMgICAgMHg2NyAvKiBkaXR0byAqLworI2RlZmluZSBESU9fREVTQ19TQ1NJMyAiOTgyNjVBIFNDU0kzIgorI2RlZmluZSBESU9fSURfRkJVRkZFUiAgMHgzOSAvKiBmcmFtZWJ1ZmZlcjogZmxhdm91ciBpcyBkaXN0aW5ndWlzaGVkIGJ5IHNlY29uZGFyeSBJRCAqLworI2RlZmluZSBESU9fREVTQ19GQlVGRkVSICJiaXRtYXBwZWQgZGlzcGxheSIKKy8qIHRoZSBOZXRCU0Qga2VybmVsIHNvdXJjZSBpcyBhIGJpdCB1bnN1cmUgYXMgdG8gd2hhdCB0aGVzZSBuZXh0IElEcyBhY3R1YWxseSBkbyA6LT4gKi8KKyNkZWZpbmUgRElPX0lEX01JU0MwICAgIDB4MDMgLyogOTg2MjJBICovCisjZGVmaW5lIERJT19ERVNDX01JU0MwICI5ODYyMkEiCisjZGVmaW5lIERJT19JRF9NSVNDMSAgICAweDA0IC8qIDk4NjIzQSAqLworI2RlZmluZSBESU9fREVTQ19NSVNDMSAiOTg2MjNBIgorI2RlZmluZSBESU9fSURfUEFSQUxMRUwgMHgwNiAvKiBpbnRlcm5hbCBwYXJhbGxlbCAqLworI2RlZmluZSBESU9fREVTQ19QQVJBTExFTCAiaW50ZXJuYWwgcGFyYWxsZWwiCisjZGVmaW5lIERJT19JRF9NSVNDMiAgICAweDA5IC8qIDk4Mjg3QSBrZXlib2FyZCAqLworI2RlZmluZSBESU9fREVTQ19NSVNDMiAiOTgyODdBIGtleWJvYXJkIgorI2RlZmluZSBESU9fSURfTUlTQzMgICAgMHgwYSAvKiBIUDk4NjM1QSBGUCBhY2NlbGVyYXRvciAqLworI2RlZmluZSBESU9fREVTQ19NSVNDMyAiSFA5ODYzNUEgRlAgYWNjZWxlcmF0b3IiCisjZGVmaW5lIERJT19JRF9NSVNDNCAgICAweDBiIC8qIHRpbWVyICovCisjZGVmaW5lIERJT19ERVNDX01JU0M0ICJ0aW1lciIKKyNkZWZpbmUgRElPX0lEX01JU0M1ICAgIDB4MTIgLyogOTg2NDBBICovCisjZGVmaW5lIERJT19ERVNDX01JU0M1ICI5ODY0MEEiCisjZGVmaW5lIERJT19JRF9NSVNDNiAgICAweDE2IC8qIDk4NjU5QSAqLworI2RlZmluZSBESU9fREVTQ19NSVNDNiAiOTg2NTlBIgorI2RlZmluZSBESU9fSURfTUlTQzcgICAgMHgxOSAvKiAyMzcgZGlzcGxheSAqLworI2RlZmluZSBESU9fREVTQ19NSVNDNyAiMjM3IGRpc3BsYXkiCisjZGVmaW5lIERJT19JRF9NSVNDOCAgICAweDFhIC8qIHF1YWQtd2lkZSBjYXJkICovCisjZGVmaW5lIERJT19ERVNDX01JU0M4ICJxdWFkLXdpZGUgY2FyZCIKKyNkZWZpbmUgRElPX0lEX01JU0M5ICAgIDB4MWIgLyogOTgyNTNBICovCisjZGVmaW5lIERJT19ERVNDX01JU0M5ICI5ODI1M0EiCisjZGVmaW5lIERJT19JRF9NSVNDMTAgICAweDFjIC8qIDk4NjI3QSAqLworI2RlZmluZSBESU9fREVTQ19NSVNDMTAgIjk4MjUzQSIKKyNkZWZpbmUgRElPX0lEX01JU0MxMSAgIDB4MWQgLyogOTg2MzNBICovCisjZGVmaW5lIERJT19ERVNDX01JU0MxMSAiOTg2MzNBIgorI2RlZmluZSBESU9fSURfTUlTQzEyICAgMHgxZSAvKiA5ODI1OUEgKi8KKyNkZWZpbmUgRElPX0RFU0NfTUlTQzEyICI5ODI1OUEiCisjZGVmaW5lIERJT19JRF9NSVNDMTMgICAweDFmIC8qIDg3NDEgKi8KKyNkZWZpbmUgRElPX0RFU0NfTUlTQzEzICI4NzQxIgorI2RlZmluZSBESU9fSURfVk1FICAgICAgMHgzMSAvKiA5ODU3N0EgVk1FIGFkYXB0ZXIgKi8KKyNkZWZpbmUgRElPX0RFU0NfVk1FICI5ODU3N0EgVk1FIGFkYXB0ZXIiCisjZGVmaW5lIERJT19JRF9EQ0wgICAgICAweDM0IC8qIDk4NjI4QSBzZXJpYWwgKi8KKyNkZWZpbmUgRElPX0RFU0NfRENMICI5ODYyOEEgRENMIHNlcmlhbCIKKyNkZWZpbmUgRElPX0lEX0RDTFJFTSAgIDB4YjQgLyogOTg2MjhBIHNlcmlhbCAqLworI2RlZmluZSBESU9fREVTQ19EQ0xSRU0gIjk4NjI4QSBEQ0xSRU0gc2VyaWFsIgorLyogVGhlc2UgYXJlIHRoZSBzZWNvbmRhcnkgSURzIGZvciB0aGUgZnJhbWVidWZmZXJzICovCisjZGVmaW5lIERJT19JRDJfR0FUT1JCT1ggICAgMHgwMSAvKiA5ODcwMC85ODcxMCAiZ2F0b3Jib3giICovCisjZGVmaW5lIERJT19ERVNDMl9HQVRPUkJPWCAgICAgICAiOTg3MDAvOTg3MTAgXCJnYXRvcmJveFwiIGRpc3BsYXkiCisjZGVmaW5lIERJT19JRDJfVE9QQ0FUICAgICAgMHgwMiAvKiA5ODU0NC85ODU0NS85ODU0NyAidG9wY2F0IiAqLworI2RlZmluZSBESU9fREVTQzJfVE9QQ0FUICAgICAgICAgIjk4NTQ0Lzk4NTQ1Lzk4NTQ3IFwidG9wY2F0XCIgZGlzcGxheSIKKyNkZWZpbmUgRElPX0lEMl9SRU5BSVNTQU5DRSAweDA0IC8qIDk4NzIwLzk4NzIxICJyZW5haXNzYW5jZSIgKi8KKyNkZWZpbmUgRElPX0RFU0MyX1JFTkFJU1NBTkNFICAgICI5ODcyMC85ODcyMSBcInJlbmFpc3NhbmNlXCIgZGlzcGxheSIKKyNkZWZpbmUgRElPX0lEMl9MUkNBVFNFWUUgICAweDA1IC8qIGxvd3JlcyAiY2F0c2V5ZSIgKi8KKyNkZWZpbmUgRElPX0RFU0MyX0xSQ0FUU0VZRSAgICAgICJsb3ctcmVzIGNhdHNleWUgZGlzcGxheSIKKyNkZWZpbmUgRElPX0lEMl9IUkNDQVRTRVlFICAweDA2IC8qIGhpZ2hyZXMgY29sb3VyICJjYXRzZXllIiAqLworI2RlZmluZSBESU9fREVTQzJfSFJDQ0FUU0VZRSAgICAgImhpZ2gtcmVzIGNvbG9yIGNhdHNleWUgZGlzcGxheSIKKyNkZWZpbmUgRElPX0lEMl9IUk1DQVRTRVlFICAweDA3IC8qIGhpZ2hyZXMgbW9ubyAiY2F0c2V5ZSIgKi8KKyNkZWZpbmUgRElPX0RFU0MyX0hSTUNBVFNFWUUgICAgICJoaWdoLXJlcyBtb25vIGNhdHNleWUgZGlzcGxheSIKKyNkZWZpbmUgRElPX0lEMl9EQVZJTkNJICAgICAweDA4IC8qIDk4NzMwLzk4NzMxICJkYXZpbmNpIiAqLworI2RlZmluZSBESU9fREVTQzJfREFWSU5DSSAgICAgICAgIjk4NzMwLzk4NzMxIFwiZGF2aW5jaVwiIGRpc3BsYXkiCisjZGVmaW5lIERJT19JRDJfWFhYQ0FUU0VZRSAgMHgwOSAvKiAiY2F0c2V5ZSIgKi8KKyNkZWZpbmUgRElPX0RFU0MyX1hYWENBVFNFWUUgICAgICJjYXRzZXllIGRpc3BsYXkiCisjZGVmaW5lIERJT19JRDJfSFlQRVJJT04gICAgMHgwZSAvKiBBMTA5NkEgImh5cGVyaW9uIiAqLworI2RlZmluZSBESU9fREVTQzJfSFlQRVJJT04gICAgICAgIkExMDk2QSBcImh5cGVyaW9uXCIgZGlzcGxheSIKKyNkZWZpbmUgRElPX0lEMl9YR0VORVNJUyAgICAweDBiIC8qICJ4LWdlbmVzaXMiOyBubyBOZXRCU0Qgc3VwcG9ydCAqLworI2RlZmluZSBESU9fREVTQzJfWEdFTkVTSVMgICAgICAgIlwieC1nZW5lc2lzXCIgZGlzcGxheSIKKyNkZWZpbmUgRElPX0lEMl9USUdFUiAgICAgICAweDBjIC8qICJ0aWdlciI7IG5vIE5ldEJTRCBzdXBwb3J0ICovCisjZGVmaW5lIERJT19ERVNDMl9USUdFUiAgICAgICAgICAiXCJ0aWdlclwiIGRpc3BsYXkiCisjZGVmaW5lIERJT19JRDJfWUdFTkVTSVMgICAgMHgwZCAvKiAieS1nZW5lc2lzIjsgbm8gTmV0QlNEIHN1cHBvcnQgKi8KKyNkZWZpbmUgRElPX0RFU0MyX1lHRU5FU0lTICAgICAgICJcInktZ2VuZXNpc1wiIGRpc3BsYXkiCisvKiBpZiB5b3UgYWRkIG5ldyBJRHMgdGhlbiB5b3Ugc2hvdWxkIHRlbGwgZGlvLmMgYWJvdXQgdGhlbSBzbyBpdCBjYW4KKyAqIGlkZW50aWZ5IHRoZW0uLi4KKyAqLworCitleHRlcm4gaW50IGRpb19maW5kKGludCBkZXZpY2VpZCk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBkaW9fc2NvZGV0b3BoeXNhZGRyKGludCBzY29kZSk7CitleHRlcm4gdm9pZCBkaW9fY3JlYXRlX3N5c2ZzX2Rldl9maWxlcyhzdHJ1Y3QgZGlvX2RldiAqKTsKKworLyogTmV3LXN0eWxlIHByb2JpbmcgKi8KK2V4dGVybiBpbnQgZGlvX3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgZGlvX2RyaXZlciAqKTsKK2V4dGVybiB2b2lkIGRpb191bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgZGlvX2RyaXZlciAqKTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZGlvX2RldmljZV9pZCAqZGlvX21hdGNoX2RldmljZShjb25zdCBzdHJ1Y3QgZGlvX2RldmljZV9pZCAqaWRzLCBjb25zdCBzdHJ1Y3QgZGlvX2RldiAqeik7CitzdGF0aWMgaW5saW5lIHN0cnVjdCBkaW9fZHJpdmVyICpkaW9fZGV2X2RyaXZlcihjb25zdCBzdHJ1Y3QgZGlvX2RldiAqZCkKK3sKKyAgICByZXR1cm4gZC0+ZHJpdmVyOworfQorCisjZGVmaW5lIGRpb19yZXNvdXJjZV9zdGFydChkKSAoKGQpLT5yZXNvdXJjZS5zdGFydCkKKyNkZWZpbmUgZGlvX3Jlc291cmNlX2VuZChkKSAgICgoZCktPnJlc291cmNlLmVuZCkKKyNkZWZpbmUgZGlvX3Jlc291cmNlX2xlbihkKSAgICgoZCktPnJlc291cmNlLmVuZC0oZCktPnJlc291cmNlLnN0YXJ0KzEpCisjZGVmaW5lIGRpb19yZXNvdXJjZV9mbGFncyhkKSAoKGQpLT5yZXNvdXJjZS5mbGFncykKKworI2RlZmluZSBkaW9fcmVxdWVzdF9kZXZpY2UoZCwgbmFtZSkgXAorICAgIHJlcXVlc3RfbWVtX3JlZ2lvbihkaW9fcmVzb3VyY2Vfc3RhcnQoZCksIGRpb19yZXNvdXJjZV9sZW4oZCksIG5hbWUpCisjZGVmaW5lIGRpb19yZWxlYXNlX2RldmljZShkKSBcCisgICAgcmVsZWFzZV9tZW1fcmVnaW9uKGRpb19yZXNvdXJjZV9zdGFydChkKSwgZGlvX3Jlc291cmNlX2xlbihkKSkKKworLyogU2ltaWxhciB0byB0aGUgaGVscGVycyBhYm92ZSwgdGhlc2UgbWFuaXB1bGF0ZSBwZXItZGlvX2RldgorICogZHJpdmVyLXNwZWNpZmljIGRhdGEuICBUaGV5IGFyZSByZWFsbHkganVzdCBhIHdyYXBwZXIgYXJvdW5kCisgKiB0aGUgZ2VuZXJpYyBkZXZpY2Ugc3RydWN0dXJlIGZ1bmN0aW9ucyBvZiB0aGVzZSBjYWxscy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkICpkaW9fZ2V0X2RydmRhdGEgKHN0cnVjdCBkaW9fZGV2ICpkKQoreworCXJldHVybiBkZXZfZ2V0X2RydmRhdGEoJmQtPmRldik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkaW9fc2V0X2RydmRhdGEgKHN0cnVjdCBkaW9fZGV2ICpkLCB2b2lkICpkYXRhKQoreworCWRldl9zZXRfZHJ2ZGF0YSgmZC0+ZGV2LCBkYXRhKTsKK30KKworLyoKKyAqIEEgaGVscGVyIGZ1bmN0aW9uIHdoaWNoIGhlbHBzIGVuc3VyZSBjb3JyZWN0IGRpb19kcml2ZXIKKyAqIHNldHVwIGFuZCBjbGVhbnVwIGZvciBjb21tb25seS1lbmNvdW50ZXJlZCBob3RwbHVnL21vZHVsYXIgY2FzZXMKKyAqCisgKiBUaGlzIE1VU1Qgc3RheSBpbiBhIGhlYWRlciwgYXMgaXQgY2hlY2tzIGZvciAtRE1PRFVMRQorICovCitzdGF0aWMgaW5saW5lIGludCBkaW9fbW9kdWxlX2luaXQoc3RydWN0IGRpb19kcml2ZXIgKmRydikKK3sKKwlpbnQgcmMgPSBkaW9fcmVnaXN0ZXJfZHJpdmVyKGRydik7CisKKwlpZiAocmMgPiAwKQorCQlyZXR1cm4gMDsKKworCS8qIGlmZiBDT05GSUdfSE9UUExVRyBhbmQgYnVpbHQgaW50byBrZXJuZWwsIHdlIHNob3VsZAorCSAqIGxlYXZlIHRoZSBkcml2ZXIgYXJvdW5kIGZvciBmdXR1cmUgaG90cGx1ZyBldmVudHMuCisJICogRm9yIHRoZSBtb2R1bGUgY2FzZSwgYSBob3RwbHVnIGRhZW1vbiBvZiBzb21lIHNvcnQKKwkgKiBzaG91bGQgbG9hZCBhIG1vZHVsZSBpbiByZXNwb25zZSB0byBhbiBpbnNlcnQgZXZlbnQuICovCisjaWYgZGVmaW5lZChDT05GSUdfSE9UUExVRykgJiYgIWRlZmluZWQoTU9EVUxFKQorCWlmIChyYyA9PSAwKQorCQlyZXR1cm4gMDsKKyNlbHNlCisJaWYgKHJjID09IDApCisJCXJjID0gLUVOT0RFVjsKKyNlbmRpZgorCisJLyogaWYgd2UgZ2V0IGhlcmUsIHdlIG5lZWQgdG8gY2xlYW4gdXAgRElPIGRyaXZlciBpbnN0YW5jZQorCSAqIGFuZCByZXR1cm4gc29tZSBzb3J0IG9mIGVycm9yICovCisJZGlvX3VucmVnaXN0ZXJfZHJpdmVyKGRydik7CisKKwlyZXR1cm4gcmM7Cit9CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYgLyogbmRlZiBfTElOVVhfRElPX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGlyZW50LmggYi9pbmNsdWRlL2xpbnV4L2RpcmVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkNjAyM2IKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2RpcmVudC5oCkBAIC0wLDAgKzEsMzIgQEAKKyNpZm5kZWYgX0xJTlVYX0RJUkVOVF9ICisjZGVmaW5lIF9MSU5VWF9ESVJFTlRfSAorCitzdHJ1Y3QgZGlyZW50IHsKKwlsb25nCQlkX2lubzsKKwlfX2tlcm5lbF9vZmZfdAlkX29mZjsKKwl1bnNpZ25lZCBzaG9ydAlkX3JlY2xlbjsKKwljaGFyCQlkX25hbWVbMjU2XTsgLyogV2UgbXVzdCBub3QgaW5jbHVkZSBsaW1pdHMuaCEgKi8KK307CisKK3N0cnVjdCBkaXJlbnQ2NCB7CisJX191NjQJCWRfaW5vOworCV9fczY0CQlkX29mZjsKKwl1bnNpZ25lZCBzaG9ydAlkX3JlY2xlbjsKKwl1bnNpZ25lZCBjaGFyCWRfdHlwZTsKKwljaGFyCQlkX25hbWVbMjU2XTsKK307CisKKyNpZmRlZiBfX0tFUk5FTF9fCisKK3N0cnVjdCBsaW51eF9kaXJlbnQ2NCB7CisJdTY0CQlkX2lubzsKKwlzNjQJCWRfb2ZmOworCXVuc2lnbmVkIHNob3J0CWRfcmVjbGVuOworCXVuc2lnbmVkIGNoYXIJZF90eXBlOworCWNoYXIJCWRfbmFtZVswXTsKK307CisKKyNlbmRpZgkvKiBfX0tFUk5FTF9fICovCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RpdmVydC5oIGIvaW5jbHVkZS9saW51eC9kaXZlcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTE5YjA5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9kaXZlcnQuaApAQCAtMCwwICsxLDEzMiBAQAorLyoKKyAqIEZyYW1lIERpdmVyc2lvbiwgQmVub2l0IExvY2hlciA8QmVub2l0LkxvY2hlckBza2YuY29tPgorICoKKyAqIENoYW5nZXM6CisgKiAJCTA2LzA5LzIwMDAJQkw6CWluaXRpYWwgdmVyc2lvbgorICogCisgKi8KKyAKKyNpZm5kZWYgX0xJTlVYX0RJVkVSVF9ICisjZGVmaW5lIF9MSU5VWF9ESVZFUlRfSAorCisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisKKyNkZWZpbmUJTUFYX0RJVkVSVF9QT1JUUwk4CS8qIE1heCBudW1iZXIgb2YgcG9ydHMgdG8gZGl2ZXJ0ICh0Y3AsIHVkcCkgKi8KKworLyogRGl2ZXJ0YWJsZSBwcm90b2NvbHMgKi8KKyNkZWZpbmUJRElWRVJUX1BST1RPX05PTkUJMHgwMDAwCisjZGVmaW5lCURJVkVSVF9QUk9UT19JUAkJMHgwMDAxCisjZGVmaW5lCURJVkVSVF9QUk9UT19JQ01QCTB4MDAwMgorI2RlZmluZQlESVZFUlRfUFJPVE9fVENQCTB4MDAwNAorI2RlZmluZQlESVZFUlRfUFJPVE9fVURQCTB4MDAwOAorCisvKgorICoJVGhpcyBpcyBhbiBFdGhlcm5ldCBGcmFtZSBEaXZlcnRlciBvcHRpb24gYmxvY2sKKyAqLworc3RydWN0IGRpdmVydF9ibGsKK3sKKwlpbnQJCWRpdmVydDsgIC8qIGFyZSB3ZSBhY3RpdmUgKi8KKwl1bnNpZ25lZCBpbnQgcHJvdG9zOwkvKiBwcm90b2NvbHMgKi8KKwl1MTYJCXRjcF9kc3RbTUFYX0RJVkVSVF9QT1JUU107IC8qIHNwZWNpZmljIHRjcCBkc3QgcG9ydHMgdG8gZGl2ZXJ0ICovCisJdTE2CQl0Y3Bfc3JjW01BWF9ESVZFUlRfUE9SVFNdOyAvKiBzcGVjaWZpYyB0Y3Agc3JjIHBvcnRzIHRvIGRpdmVydCAqLworCXUxNgkJdWRwX2RzdFtNQVhfRElWRVJUX1BPUlRTXTsgLyogc3BlY2lmaWMgdWRwIGRzdCBwb3J0cyB0byBkaXZlcnQgKi8KKwl1MTYJCXVkcF9zcmNbTUFYX0RJVkVSVF9QT1JUU107IC8qIHNwZWNpZmljIHVkcCBzcmMgcG9ydHMgdG8gZGl2ZXJ0ICovCit9OworCisvKgorICogRGl2ZXJzaW9uIGNvbnRyb2wgYmxvY2ssIGZvciBjb25maWd1cmF0aW9uIHdpdGggdGhlIHVzZXJzcGFjZSB0b29sCisgKiBkaXZlcnQKKyAqLworCit0eXBlZGVmIHVuaW9uIF9kaXZlcnRfY2ZfYXJnCit7CisJczE2CQlpbnQxNjsKKwl1MTYJCXVpbnQxNjsKKwlzMzIJCWludDMyOworCXUzMgkJdWludDMyOworCXM2NAkJaW50NjQ7CisJdTY0CQl1aW50NjQ7CisJdm9pZAlfX3VzZXIgKnB0cjsKK30gZGl2ZXJ0X2NmX2FyZzsKKworCitzdHJ1Y3QgZGl2ZXJ0X2NmCit7CisJaW50CWNtZDsJCQkJLyogQ29tbWFuZCAqLworCWRpdmVydF9jZl9hcmcgCWFyZzEsCisJCQkJCWFyZzIsCisJCQkJCWFyZzM7CisJaW50CWRldl9pbmRleDsJLyogZGV2aWNlIGluZGV4IChldGgwPTAsIGV0Yy4uLikgKi8KK307CisKKworLyogRGl2ZXJzaW9uIGNvbW1hbmRzICovCisjZGVmaW5lCURJVkNNRF9ESVZFUlQJCQkxIC8qIEVOQUJMRS9ESVNBQkxFIGRpdmVyc2lvbiAqLworI2RlZmluZQlESVZDTURfSVAJCQkJMiAvKiBFTkFCTEUvRElTQUJMRSB3aG9sZCBJUCBkaXZlcnNpb24gKi8KKyNkZWZpbmUJRElWQ01EX1RDUAkJCQkzIC8qIEVOQUJMRS9ESVNBQkxFIHdob2xkIFRDUCBkaXZlcnNpb24gKi8KKyNkZWZpbmUJRElWQ01EX1RDUERTVAkJCTQgLyogQUREL1JFTU9WRSBUQ1AgRFNUIHBvcnQgZm9yIGRpdmVyc2lvbiAqLworI2RlZmluZQlESVZDTURfVENQU1JDCQkJNSAvKiBBREQvUkVNT1ZFIFRDUCBTUkMgcG9ydCBmb3IgZGl2ZXJzaW9uICovCisjZGVmaW5lCURJVkNNRF9VRFAJCQkJNiAvKiBFTkFCTEUvRElTQUJMRSB3aG9sZSBVRFAgZGl2ZXJzaW9uICovCisjZGVmaW5lCURJVkNNRF9VRFBEU1QJCQk3IC8qIEFERC9SRU1PVkUgVURQIERTVCBwb3J0IGZvciBkaXZlcnNpb24gKi8KKyNkZWZpbmUJRElWQ01EX1VEUFNSQwkJCTggLyogQUREL1JFTU9WRSBVRFAgU1JDIHBvcnQgZm9yIGRpdmVyc2lvbiAqLworI2RlZmluZQlESVZDTURfSUNNUAkJCQk5IC8qIEVOQUJMRS9ESVNBQkxFIHdob2xlIElDTVAgZGl2ZXJzaW9uICovCisjZGVmaW5lCURJVkNNRF9HRVRTVEFUVVMJCTEwIC8qIEdFVCB0aGUgc3RhdHVzIG9mIHRoZSBkaXZlcnRlciAqLworI2RlZmluZQlESVZDTURfUkVTRVQJCQkxMSAvKiBSZXNldCB0aGUgZGl2ZXJ0ZXIgb24gdGhlIHNwZWNpZmllZCBkZXYgKi8KKyNkZWZpbmUgRElWQ01EX0dFVFZFUlNJT04JCTEyIC8qIFJldHJpZXZlIHRoZSBkaXZlcnRlciBjb2RlIHZlcnNpb24gKGNoYXJbMzJdKSAqLworCisvKiBHZW5lcmFsIHN5bnRheCBvZiB0aGUgY29tbWFuZHM6CisgKiAKKyAqIERJVkNNRF94eHh4eHgoYXJnMSwgYXJnMiwgYXJnMywgZGV2X2luZGV4KQorICogCisgKiBTSU9DU0lGRElWRVJUOgorICogICBESVZDTURfRElWRVJUKERJVkFSRzFfRU5BQkxFfERJVkFSRzFfRElTQUJMRSwgLCAsaWZpbmRleCkKKyAqICAgRElWQ01EX0lQKERJVkFSRzFfRU5BQkxFfERJVkFSRzFfRElTQUJMRSwgLCAsIGlmaW5kZXgpCisgKiAgIERJVkNNRF9UQ1AoRElWQVJHMV9FTkFCTEV8RElWQVJHMV9ESVNBQkxFLCAsICwgaWZpbmRleCkKKyAqICAgRElWQ01EX1RDUERTVChESVZBUkcxX0FERHxESVZBUkcxX1JFTU9WRSwgcG9ydCwgLCBpZmluZGV4KQorICogICBESVZDTURfVENQU1JDKERJVkFSRzFfQUREfERJVkFSRzFfUkVNT1ZFLCBwb3J0LCAsIGlmaW5kZXgpCisgKiAgIERJVkNNRF9VRFAoRElWQVJHMV9FTkFCTEV8RElWQVJHMV9ESVNBQkxFLCAsICwgaWZpbmRleCkKKyAqICAgRElWQ01EX1VEUERTVChESVZBUkcxX0FERHxESVZBUkcxX1JFTU9WRSwgcG9ydCwgLCBpZmluZGV4KQorICogICBESVZDTURfVURQU1JDKERJVkFSRzFfQUREfERJVkFSRzFfUkVNT1ZFLCBwb3J0LCAsIGlmaW5kZXgpCisgKiAgIERJVkNNRF9JQ01QKERJVkFSRzFfRU5BQkxFfERJVkFSRzFfRElTQUJMRSwgLCAsIGlmaW5kZXgpCisgKiAgIERJVkNNRF9SRVNFVCgsICwgLCBpZmluZGV4KQorICogICAKKyAqIFNJT0dJRkRJVkVSVDoKKyAqICAgRElWQ01EX0dFVFNUQVRVUyhkaXZlcnRfYmxrLCAsICwgaWZpbmRleCkKKyAqICAgRElWQ01EX0dFVFZFUlNJT04oc3RyaW5nWzNdKQorICovCisKKworLyogUG9zc2libGUgdmFsdWVzIGZvciBhcmcxICovCisjZGVmaW5lCURJVkFSRzFfRU5BQkxFCQkJMCAvKiBFTkFCTEUgc29tZXRoaW5nICovCisjZGVmaW5lCURJVkFSRzFfRElTQUJMRQkJCTEgLyogRElTQUJMRSBzb21ldGhpbmcgKi8KKyNkZWZpbmUgRElWQVJHMV9BREQJCQkJMiAvKiBBREQgc29tZXRoaW5nICovCisjZGVmaW5lIERJVkFSRzFfUkVNT1ZFCQkJMyAvKiBSRU1PVkUgc29tZXRoaW5nICovCisKKworI2lmZGVmIF9fS0VSTkVMX18KKworLyogZGl2ZXJ0ZXIgZnVuY3Rpb25zICovCisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisKKyNpZmRlZiBDT05GSUdfTkVUX0RJVkVSVAorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorCitpbnQgYWxsb2NfZGl2ZXJ0X2JsayhzdHJ1Y3QgbmV0X2RldmljZSAqKTsKK3ZvaWQgZnJlZV9kaXZlcnRfYmxrKHN0cnVjdCBuZXRfZGV2aWNlICopOworaW50IGRpdmVydF9pb2N0bCh1bnNpZ25lZCBpbnQgY21kLCBzdHJ1Y3QgZGl2ZXJ0X2NmIF9fdXNlciAqYXJnKTsKK3ZvaWQgZGl2ZXJ0X2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IpOworc3RhdGljIGlubGluZSB2b2lkIGhhbmRsZV9kaXZlcnRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCS8qIGlmIGRpdmVyc2lvbiBpcyBzdXBwb3J0ZWQgb24gZGV2aWNlLCB0aGVuIGRpdmVydCAqLworCWlmIChza2ItPmRldi0+ZGl2ZXJ0ICYmIHNrYi0+ZGV2LT5kaXZlcnQtPmRpdmVydCkKKwkJZGl2ZXJ0X2ZyYW1lKHNrYik7Cit9CisKKyNlbHNlCisjIGRlZmluZSBhbGxvY19kaXZlcnRfYmxrKGRldikJCSgwKQorIyBkZWZpbmUgZnJlZV9kaXZlcnRfYmxrKGRldikJCWRvIHt9IHdoaWxlICgwKQorIyBkZWZpbmUgZGl2ZXJ0X2lvY3RsKGNtZCwgYXJnKQkJKC1FTk9QS0cpCisjIGRlZmluZSBoYW5kbGVfZGl2ZXJ0ZXIoc2tiKQkJZG8ge30gd2hpbGUgKDApCisjZW5kaWYKKyNlbmRpZiAKKyNlbmRpZgkvKiBfTElOVVhfRElWRVJUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZG0taW9jdGwuaCBiL2luY2x1ZGUvbGludXgvZG0taW9jdGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWViNmI2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9kbS1pb2N0bC5oCkBAIC0wLDAgKzEsMzA4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAxIC0gMjAwMyBTaXN0aW5hIFNvZnR3YXJlIChVSykgTGltaXRlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCAtIDIwMDUgUmVkIEhhdCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgZmlsZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgTEdQTC4KKyAqLworCisjaWZuZGVmIF9MSU5VWF9ETV9JT0NUTF9WNF9ICisjZGVmaW5lIF9MSU5VWF9ETV9JT0NUTF9WNF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjZGVmaW5lIERNX0RJUiAibWFwcGVyIgkJLyogU2xhc2hlcyBub3Qgc3VwcG9ydGVkICovCisjZGVmaW5lIERNX01BWF9UWVBFX05BTUUgMTYKKyNkZWZpbmUgRE1fTkFNRV9MRU4gMTI4CisjZGVmaW5lIERNX1VVSURfTEVOIDEyOQorCisvKgorICogQSB0cmFkaXRpb25hbCBpb2N0bCBpbnRlcmZhY2UgZm9yIHRoZSBkZXZpY2UgbWFwcGVyLgorICoKKyAqIEVhY2ggZGV2aWNlIGNhbiBoYXZlIHR3byB0YWJsZXMgYXNzb2NpYXRlZCB3aXRoIGl0LCBhbgorICogJ2FjdGl2ZScgdGFibGUgd2hpY2ggaXMgdGhlIG9uZSBjdXJyZW50bHkgdXNlZCBieSBpbyBwYXNzaW5nCisgKiB0aHJvdWdoIHRoZSBkZXZpY2UsIGFuZCBhbiAnaW5hY3RpdmUnIG9uZSB3aGljaCBpcyBhIHRhYmxlCisgKiB0aGF0IGlzIGJlaW5nIHByZXBhcmVkIGFzIGEgcmVwbGFjZW1lbnQgZm9yIHRoZSAnYWN0aXZlJyBvbmUuCisgKgorICogRE1fVkVSU0lPTjoKKyAqIEp1c3QgZ2V0IHRoZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGZvciB0aGUgaW9jdGwgaW50ZXJmYWNlLgorICoKKyAqIERNX1JFTU9WRV9BTEw6CisgKiBSZW1vdmUgYWxsIGRtIGRldmljZXMsIGRlc3Ryb3kgYWxsIHRhYmxlcy4gIE9ubHkgcmVhbGx5IHVzZWQKKyAqIGZvciBkZWJ1Zy4KKyAqCisgKiBETV9MSVNUX0RFVklDRVM6CisgKiBHZXQgYSBsaXN0IG9mIGFsbCB0aGUgZG0gZGV2aWNlIG5hbWVzLgorICoKKyAqIERNX0RFVl9DUkVBVEU6CisgKiBDcmVhdGUgYSBuZXcgZGV2aWNlLCBuZWl0aGVyIHRoZSAnYWN0aXZlJyBvciAnaW5hY3RpdmUnIHRhYmxlCisgKiBzbG90cyB3aWxsIGJlIGZpbGxlZC4gIFRoZSBkZXZpY2Ugd2lsbCBiZSBpbiBzdXNwZW5kZWQgc3RhdGUKKyAqIGFmdGVyIGNyZWF0aW9uLCBob3dldmVyIGFueSBpbyB0byB0aGUgZGV2aWNlIHdpbGwgZ2V0IGVycm9yZWQKKyAqIHNpbmNlIGl0IHdpbGwgYmUgb3V0LW9mLWJvdW5kcy4KKyAqCisgKiBETV9ERVZfUkVNT1ZFOgorICogUmVtb3ZlIGEgZGV2aWNlLCBkZXN0cm95IGFueSB0YWJsZXMuCisgKgorICogRE1fREVWX1JFTkFNRToKKyAqIFJlbmFtZSBhIGRldmljZS4KKyAqCisgKiBETV9TVVNQRU5EOgorICogVGhpcyBwZXJmb3JtcyBib3RoIHN1c3BlbmQgYW5kIHJlc3VtZSwgZGVwZW5kaW5nIHdoaWNoIGZsYWcgaXMKKyAqIHBhc3NlZCBpbi4KKyAqIFN1c3BlbmQ6IFRoaXMgY29tbWFuZCB3aWxsIG5vdCByZXR1cm4gdW50aWwgYWxsIHBlbmRpbmcgaW8gdG8KKyAqIHRoZSBkZXZpY2UgaGFzIGNvbXBsZXRlZC4gIEZ1cnRoZXIgaW8gd2lsbCBiZSBkZWZlcnJlZCB1bnRpbAorICogdGhlIGRldmljZSBpcyByZXN1bWVkLgorICogUmVzdW1lOiBJdCBpcyBubyBsb25nZXIgYW4gZXJyb3IgdG8gaXNzdWUgdGhpcyBjb21tYW5kIG9uIGFuCisgKiB1bnN1c3BlbmRlZCBkZXZpY2UuICBJZiBhIHRhYmxlIGlzIHByZXNlbnQgaW4gdGhlICdpbmFjdGl2ZScKKyAqIHNsb3QsIGl0IHdpbGwgYmUgbW92ZWQgdG8gdGhlIGFjdGl2ZSBzbG90LCB0aGVuIHRoZSBvbGQgdGFibGUKKyAqIGZyb20gdGhlIGFjdGl2ZSBzbG90IHdpbGwgYmUgX2Rlc3Ryb3llZF8uICBGaW5hbGx5IHRoZSBkZXZpY2UKKyAqIGlzIHJlc3VtZWQuCisgKgorICogRE1fREVWX1NUQVRVUzoKKyAqIFJldHJpZXZlcyB0aGUgc3RhdHVzIGZvciB0aGUgdGFibGUgaW4gdGhlICdhY3RpdmUnIHNsb3QuCisgKgorICogRE1fREVWX1dBSVQ6CisgKiBXYWl0IGZvciBhIHNpZ25pZmljYW50IGV2ZW50IHRvIG9jY3VyIHRvIHRoZSBkZXZpY2UuICBUaGlzCisgKiBjb3VsZCBlaXRoZXIgYmUgY2F1c2VkIGJ5IGFuIGV2ZW50IHRyaWdnZXJlZCBieSBvbmUgb2YgdGhlCisgKiB0YXJnZXRzIG9mIHRoZSB0YWJsZSBpbiB0aGUgJ2FjdGl2ZScgc2xvdCwgb3IgYSB0YWJsZSBjaGFuZ2UuCisgKgorICogRE1fVEFCTEVfTE9BRDoKKyAqIExvYWQgYSB0YWJsZSBpbnRvIHRoZSAnaW5hY3RpdmUnIHNsb3QgZm9yIHRoZSBkZXZpY2UuICBUaGUKKyAqIGRldmljZSBkb2VzIF9ub3RfIG5lZWQgdG8gYmUgc3VzcGVuZGVkIHByaW9yIHRvIHRoaXMgY29tbWFuZC4KKyAqCisgKiBETV9UQUJMRV9DTEVBUjoKKyAqIERlc3Ryb3kgYW55IHRhYmxlIGluIHRoZSAnaW5hY3RpdmUnIHNsb3QgKGllLiBhYm9ydCkuCisgKgorICogRE1fVEFCTEVfREVQUzoKKyAqIFJldHVybiBhIHNldCBvZiBkZXZpY2UgZGVwZW5kZW5jaWVzIGZvciB0aGUgJ2FjdGl2ZScgdGFibGUuCisgKgorICogRE1fVEFCTEVfU1RBVFVTOgorICogUmV0dXJuIHRoZSB0YXJnZXRzIHN0YXR1cyBmb3IgdGhlICdhY3RpdmUnIHRhYmxlLgorICoKKyAqIERNX1RBUkdFVF9NU0c6CisgKiBQYXNzIGEgbWVzc2FnZSBzdHJpbmcgdG8gdGhlIHRhcmdldCBhdCBhIHNwZWNpZmljIG9mZnNldCBvZiBhIGRldmljZS4KKyAqLworCisvKgorICogQWxsIGlvY3RsIGFyZ3VtZW50cyBjb25zaXN0IG9mIGEgc2luZ2xlIGNodW5rIG9mIG1lbW9yeSwgd2l0aAorICogdGhpcyBzdHJ1Y3R1cmUgYXQgdGhlIHN0YXJ0LiAgSWYgYSB1dWlkIGlzIHNwZWNpZmllZCBhbnkKKyAqIGxvb2t1cCAoZWcuIGZvciBhIERNX0lORk8pIHdpbGwgYmUgZG9uZSBvbiB0aGF0LCAqbm90KiB0aGUKKyAqIG5hbWUuCisgKi8KK3N0cnVjdCBkbV9pb2N0bCB7CisJLyoKKwkgKiBUaGUgdmVyc2lvbiBudW1iZXIgaXMgbWFkZSB1cCBvZiB0aHJlZSBwYXJ0czoKKwkgKiBtYWpvciAtIG5vIGJhY2t3YXJkIG9yIGZvcndhcmQgY29tcGF0aWJpbGl0eSwKKwkgKiBtaW5vciAtIG9ubHkgYmFja3dhcmRzIGNvbXBhdGlibGUsCisJICogcGF0Y2ggLSBib3RoIGJhY2t3YXJkcyBhbmQgZm9yd2FyZHMgY29tcGF0aWJsZS4KKwkgKgorCSAqIEFsbCBjbGllbnRzIG9mIHRoZSBpb2N0bCBpbnRlcmZhY2Ugc2hvdWxkIGZpbGwgaW4gdGhlCisJICogdmVyc2lvbiBudW1iZXIgb2YgdGhlIGludGVyZmFjZSB0aGF0IHRoZXkgd2VyZQorCSAqIGNvbXBpbGVkIHdpdGguCisJICoKKwkgKiBBbGwgcmVjb2duaXNlZCBpb2N0bCBjb21tYW5kcyAoaWUuIHRob3NlIHRoYXQgZG9uJ3QKKwkgKiByZXR1cm4gLUVOT1RUWSkgZmlsbCBvdXQgdGhpcyBmaWVsZCwgZXZlbiBpZiB0aGUKKwkgKiBjb21tYW5kIGZhaWxlZC4KKwkgKi8KKwl1aW50MzJfdCB2ZXJzaW9uWzNdOwkvKiBpbi9vdXQgKi8KKwl1aW50MzJfdCBkYXRhX3NpemU7CS8qIHRvdGFsIHNpemUgb2YgZGF0YSBwYXNzZWQgaW4KKwkJCQkgKiBpbmNsdWRpbmcgdGhpcyBzdHJ1Y3QgKi8KKworCXVpbnQzMl90IGRhdGFfc3RhcnQ7CS8qIG9mZnNldCB0byBzdGFydCBvZiBkYXRhCisJCQkJICogcmVsYXRpdmUgdG8gc3RhcnQgb2YgdGhpcyBzdHJ1Y3QgKi8KKworCXVpbnQzMl90IHRhcmdldF9jb3VudDsJLyogaW4vb3V0ICovCisJaW50MzJfdCBvcGVuX2NvdW50OwkvKiBvdXQgKi8KKwl1aW50MzJfdCBmbGFnczsJCS8qIGluL291dCAqLworCXVpbnQzMl90IGV2ZW50X25yOyAgICAgIAkvKiBpbi9vdXQgKi8KKwl1aW50MzJfdCBwYWRkaW5nOworCisJdWludDY0X3QgZGV2OwkJLyogaW4vb3V0ICovCisKKwljaGFyIG5hbWVbRE1fTkFNRV9MRU5dOwkvKiBkZXZpY2UgbmFtZSAqLworCWNoYXIgdXVpZFtETV9VVUlEX0xFTl07CS8qIHVuaXF1ZSBpZGVudGlmaWVyIGZvcgorCQkJCSAqIHRoZSBibG9jayBkZXZpY2UgKi8KK307CisKKy8qCisgKiBVc2VkIHRvIHNwZWNpZnkgdGFibGVzLiAgVGhlc2Ugc3RydWN0dXJlcyBhcHBlYXIgYWZ0ZXIgdGhlCisgKiBkbV9pb2N0bC4KKyAqLworc3RydWN0IGRtX3RhcmdldF9zcGVjIHsKKwl1aW50NjRfdCBzZWN0b3Jfc3RhcnQ7CisJdWludDY0X3QgbGVuZ3RoOworCWludDMyX3Qgc3RhdHVzOwkJLyogdXNlZCB3aGVuIHJlYWRpbmcgZnJvbSBrZXJuZWwgb25seSAqLworCisJLyoKKwkgKiBMb2NhdGlvbiBvZiB0aGUgbmV4dCBkbV90YXJnZXRfc3BlYy4KKwkgKiAtIFdoZW4gc3BlY2lmeWluZyB0YXJnZXRzIG9uIGEgRE1fVEFCTEVfTE9BRCBjb21tYW5kLCB0aGlzIHZhbHVlIGlzCisJICogICB0aGUgbnVtYmVyIG9mIGJ5dGVzIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSAiY3VycmVudCIgZG1fdGFyZ2V0X3NwZWMKKwkgKiAgIHRvIHRoZSBzdGFydCBvZiB0aGUgIm5leHQiIGRtX3RhcmdldF9zcGVjLgorCSAqIC0gV2hlbiByZXRyaWV2aW5nIHRhcmdldHMgb24gYSBETV9UQUJMRV9TVEFUVVMgY29tbWFuZCwgdGhpcyB2YWx1ZQorCSAqICAgaXMgdGhlIG51bWJlciBvZiBieXRlcyBmcm9tIHRoZSBzdGFydCBvZiB0aGUgZmlyc3QgZG1fdGFyZ2V0X3NwZWMKKwkgKiAgICh0aGF0IGZvbGxvd3MgdGhlIGRtX2lvY3RsIHN0cnVjdCkgdG8gdGhlIHN0YXJ0IG9mIHRoZSAibmV4dCIKKwkgKiAgIGRtX3RhcmdldF9zcGVjLgorCSAqLworCXVpbnQzMl90IG5leHQ7CisKKwljaGFyIHRhcmdldF90eXBlW0RNX01BWF9UWVBFX05BTUVdOworCisJLyoKKwkgKiBQYXJhbWV0ZXIgc3RyaW5nIHN0YXJ0cyBpbW1lZGlhdGVseSBhZnRlciB0aGlzIG9iamVjdC4KKwkgKiBCZSBjYXJlZnVsIHRvIGFkZCBwYWRkaW5nIGFmdGVyIHN0cmluZyB0byBlbnN1cmUgY29ycmVjdAorCSAqIGFsaWdubWVudCBvZiBzdWJzZXF1ZW50IGRtX3RhcmdldF9zcGVjLgorCSAqLworfTsKKworLyoKKyAqIFVzZWQgdG8gcmV0cmlldmUgdGhlIHRhcmdldCBkZXBlbmRlbmNpZXMuCisgKi8KK3N0cnVjdCBkbV90YXJnZXRfZGVwcyB7CisJdWludDMyX3QgY291bnQ7CS8qIEFycmF5IHNpemUgKi8KKwl1aW50MzJfdCBwYWRkaW5nOwkvKiB1bnVzZWQgKi8KKwl1aW50NjRfdCBkZXZbMF07CS8qIG91dCAqLworfTsKKworLyoKKyAqIFVzZWQgdG8gZ2V0IGEgbGlzdCBvZiBhbGwgZG0gZGV2aWNlcy4KKyAqLworc3RydWN0IGRtX25hbWVfbGlzdCB7CisJdWludDY0X3QgZGV2OworCXVpbnQzMl90IG5leHQ7CQkvKiBvZmZzZXQgdG8gdGhlIG5leHQgcmVjb3JkIGZyb20KKwkJCQkgICB0aGUgX3N0YXJ0XyBvZiB0aGlzICovCisJY2hhciBuYW1lWzBdOworfTsKKworLyoKKyAqIFVzZWQgdG8gcmV0cmlldmUgdGhlIHRhcmdldCB2ZXJzaW9ucworICovCitzdHJ1Y3QgZG1fdGFyZ2V0X3ZlcnNpb25zIHsKKyAgICAgICAgdWludDMyX3QgbmV4dDsKKyAgICAgICAgdWludDMyX3QgdmVyc2lvblszXTsKKworICAgICAgICBjaGFyIG5hbWVbMF07Cit9OworCisvKgorICogVXNlZCB0byBwYXNzIG1lc3NhZ2UgdG8gYSB0YXJnZXQKKyAqLworc3RydWN0IGRtX3RhcmdldF9tc2cgeworCXVpbnQ2NF90IHNlY3RvcjsJLyogRGV2aWNlIHNlY3RvciAqLworCisJY2hhciBtZXNzYWdlWzBdOworfTsKKworLyoKKyAqIElmIHlvdSBjaGFuZ2UgdGhpcyBtYWtlIHN1cmUgeW91IG1ha2UgdGhlIGNvcnJlc3BvbmRpbmcgY2hhbmdlCisgKiB0byBkbS1pb2N0bC5jOmxvb2t1cF9pb2N0bCgpCisgKi8KK2VudW0geworCS8qIFRvcCBsZXZlbCBjbWRzICovCisJRE1fVkVSU0lPTl9DTUQgPSAwLAorCURNX1JFTU9WRV9BTExfQ01ELAorCURNX0xJU1RfREVWSUNFU19DTUQsCisKKwkvKiBkZXZpY2UgbGV2ZWwgY21kcyAqLworCURNX0RFVl9DUkVBVEVfQ01ELAorCURNX0RFVl9SRU1PVkVfQ01ELAorCURNX0RFVl9SRU5BTUVfQ01ELAorCURNX0RFVl9TVVNQRU5EX0NNRCwKKwlETV9ERVZfU1RBVFVTX0NNRCwKKwlETV9ERVZfV0FJVF9DTUQsCisKKwkvKiBUYWJsZSBsZXZlbCBjbWRzICovCisJRE1fVEFCTEVfTE9BRF9DTUQsCisJRE1fVEFCTEVfQ0xFQVJfQ01ELAorCURNX1RBQkxFX0RFUFNfQ01ELAorCURNX1RBQkxFX1NUQVRVU19DTUQsCisKKwkvKiBBZGRlZCBsYXRlciAqLworCURNX0xJU1RfVkVSU0lPTlNfQ01ELAorCURNX1RBUkdFVF9NU0dfQ01ELAorfTsKKworLyoKKyAqIFRoZSBkbV9pb2N0bCBzdHJ1Y3QgcGFzc2VkIGludG8gdGhlIGlvY3RsIGlzIGp1c3QgdGhlIGhlYWRlcgorICogb24gYSBsYXJnZXIgY2h1bmsgb2YgbWVtb3J5LiAgT24geDg2LTY0IGFuZCBvdGhlcgorICogYXJjaGl0ZWN0dXJlcyB0aGUgZG0taW9jdGwgc3RydWN0IHdpbGwgYmUgcGFkZGVkIHRvIGFuIDggYnl0ZQorICogYm91bmRhcnkgc28gdGhlIHNpemUgd2lsbCBiZSBkaWZmZXJlbnQsIHdoaWNoIHdvdWxkIGNoYW5nZSB0aGUKKyAqIGlvY3RsIGNvZGUgLSB5ZXMgSSByZWFsbHkgbWVzc2VkIHVwLiAgVGhpcyBoYWNrIGZvcmNlcyB0aGVzZQorICogYXJjaGl0ZWN0dXJlcyB0byBoYXZlIHRoZSBjb3JyZWN0IGlvY3RsIGNvZGUuCisgKi8KKyNpZmRlZiBDT05GSUdfQ09NUEFUCit0eXBlZGVmIGNoYXIgaW9jdGxfc3RydWN0WzMwOF07CisjZGVmaW5lIERNX1ZFUlNJT05fMzIgICAgICAgX0lPV1IoRE1fSU9DVEwsIERNX1ZFUlNJT05fQ01ELCBpb2N0bF9zdHJ1Y3QpCisjZGVmaW5lIERNX1JFTU9WRV9BTExfMzIgICAgX0lPV1IoRE1fSU9DVEwsIERNX1JFTU9WRV9BTExfQ01ELCBpb2N0bF9zdHJ1Y3QpCisjZGVmaW5lIERNX0xJU1RfREVWSUNFU18zMiAgX0lPV1IoRE1fSU9DVEwsIERNX0xJU1RfREVWSUNFU19DTUQsIGlvY3RsX3N0cnVjdCkKKworI2RlZmluZSBETV9ERVZfQ1JFQVRFXzMyICAgIF9JT1dSKERNX0lPQ1RMLCBETV9ERVZfQ1JFQVRFX0NNRCwgaW9jdGxfc3RydWN0KQorI2RlZmluZSBETV9ERVZfUkVNT1ZFXzMyICAgIF9JT1dSKERNX0lPQ1RMLCBETV9ERVZfUkVNT1ZFX0NNRCwgaW9jdGxfc3RydWN0KQorI2RlZmluZSBETV9ERVZfUkVOQU1FXzMyICAgIF9JT1dSKERNX0lPQ1RMLCBETV9ERVZfUkVOQU1FX0NNRCwgaW9jdGxfc3RydWN0KQorI2RlZmluZSBETV9ERVZfU1VTUEVORF8zMiAgIF9JT1dSKERNX0lPQ1RMLCBETV9ERVZfU1VTUEVORF9DTUQsIGlvY3RsX3N0cnVjdCkKKyNkZWZpbmUgRE1fREVWX1NUQVRVU18zMiAgICBfSU9XUihETV9JT0NUTCwgRE1fREVWX1NUQVRVU19DTUQsIGlvY3RsX3N0cnVjdCkKKyNkZWZpbmUgRE1fREVWX1dBSVRfMzIgICAgICBfSU9XUihETV9JT0NUTCwgRE1fREVWX1dBSVRfQ01ELCBpb2N0bF9zdHJ1Y3QpCisKKyNkZWZpbmUgRE1fVEFCTEVfTE9BRF8zMiAgICBfSU9XUihETV9JT0NUTCwgRE1fVEFCTEVfTE9BRF9DTUQsIGlvY3RsX3N0cnVjdCkKKyNkZWZpbmUgRE1fVEFCTEVfQ0xFQVJfMzIgICBfSU9XUihETV9JT0NUTCwgRE1fVEFCTEVfQ0xFQVJfQ01ELCBpb2N0bF9zdHJ1Y3QpCisjZGVmaW5lIERNX1RBQkxFX0RFUFNfMzIgICAgX0lPV1IoRE1fSU9DVEwsIERNX1RBQkxFX0RFUFNfQ01ELCBpb2N0bF9zdHJ1Y3QpCisjZGVmaW5lIERNX1RBQkxFX1NUQVRVU18zMiAgX0lPV1IoRE1fSU9DVEwsIERNX1RBQkxFX1NUQVRVU19DTUQsIGlvY3RsX3N0cnVjdCkKKyNkZWZpbmUgRE1fTElTVF9WRVJTSU9OU18zMiBfSU9XUihETV9JT0NUTCwgRE1fTElTVF9WRVJTSU9OU19DTUQsIGlvY3RsX3N0cnVjdCkKKyNkZWZpbmUgRE1fVEFSR0VUX01TR18zMiAgICBfSU9XUihETV9JT0NUTCwgRE1fVEFSR0VUX01TR19DTUQsIGlvY3RsX3N0cnVjdCkKKyNlbmRpZgorCisjZGVmaW5lIERNX0lPQ1RMIDB4ZmQKKworI2RlZmluZSBETV9WRVJTSU9OICAgICAgIF9JT1dSKERNX0lPQ1RMLCBETV9WRVJTSU9OX0NNRCwgc3RydWN0IGRtX2lvY3RsKQorI2RlZmluZSBETV9SRU1PVkVfQUxMICAgIF9JT1dSKERNX0lPQ1RMLCBETV9SRU1PVkVfQUxMX0NNRCwgc3RydWN0IGRtX2lvY3RsKQorI2RlZmluZSBETV9MSVNUX0RFVklDRVMgIF9JT1dSKERNX0lPQ1RMLCBETV9MSVNUX0RFVklDRVNfQ01ELCBzdHJ1Y3QgZG1faW9jdGwpCisKKyNkZWZpbmUgRE1fREVWX0NSRUFURSAgICBfSU9XUihETV9JT0NUTCwgRE1fREVWX0NSRUFURV9DTUQsIHN0cnVjdCBkbV9pb2N0bCkKKyNkZWZpbmUgRE1fREVWX1JFTU9WRSAgICBfSU9XUihETV9JT0NUTCwgRE1fREVWX1JFTU9WRV9DTUQsIHN0cnVjdCBkbV9pb2N0bCkKKyNkZWZpbmUgRE1fREVWX1JFTkFNRSAgICBfSU9XUihETV9JT0NUTCwgRE1fREVWX1JFTkFNRV9DTUQsIHN0cnVjdCBkbV9pb2N0bCkKKyNkZWZpbmUgRE1fREVWX1NVU1BFTkQgICBfSU9XUihETV9JT0NUTCwgRE1fREVWX1NVU1BFTkRfQ01ELCBzdHJ1Y3QgZG1faW9jdGwpCisjZGVmaW5lIERNX0RFVl9TVEFUVVMgICAgX0lPV1IoRE1fSU9DVEwsIERNX0RFVl9TVEFUVVNfQ01ELCBzdHJ1Y3QgZG1faW9jdGwpCisjZGVmaW5lIERNX0RFVl9XQUlUICAgICAgX0lPV1IoRE1fSU9DVEwsIERNX0RFVl9XQUlUX0NNRCwgc3RydWN0IGRtX2lvY3RsKQorCisjZGVmaW5lIERNX1RBQkxFX0xPQUQgICAgX0lPV1IoRE1fSU9DVEwsIERNX1RBQkxFX0xPQURfQ01ELCBzdHJ1Y3QgZG1faW9jdGwpCisjZGVmaW5lIERNX1RBQkxFX0NMRUFSICAgX0lPV1IoRE1fSU9DVEwsIERNX1RBQkxFX0NMRUFSX0NNRCwgc3RydWN0IGRtX2lvY3RsKQorI2RlZmluZSBETV9UQUJMRV9ERVBTICAgIF9JT1dSKERNX0lPQ1RMLCBETV9UQUJMRV9ERVBTX0NNRCwgc3RydWN0IGRtX2lvY3RsKQorI2RlZmluZSBETV9UQUJMRV9TVEFUVVMgIF9JT1dSKERNX0lPQ1RMLCBETV9UQUJMRV9TVEFUVVNfQ01ELCBzdHJ1Y3QgZG1faW9jdGwpCisKKyNkZWZpbmUgRE1fTElTVF9WRVJTSU9OUyBfSU9XUihETV9JT0NUTCwgRE1fTElTVF9WRVJTSU9OU19DTUQsIHN0cnVjdCBkbV9pb2N0bCkKKworI2RlZmluZSBETV9UQVJHRVRfTVNHCSBfSU9XUihETV9JT0NUTCwgRE1fVEFSR0VUX01TR19DTUQsIHN0cnVjdCBkbV9pb2N0bCkKKworI2RlZmluZSBETV9WRVJTSU9OX01BSk9SCTQKKyNkZWZpbmUgRE1fVkVSU0lPTl9NSU5PUgk0CisjZGVmaW5lIERNX1ZFUlNJT05fUEFUQ0hMRVZFTAkwCisjZGVmaW5lIERNX1ZFUlNJT05fRVhUUkEJIi1pb2N0bCAoMjAwNS0wMS0xMikiCisKKy8qIFN0YXR1cyBiaXRzICovCisjZGVmaW5lIERNX1JFQURPTkxZX0ZMQUcJKDEgPDwgMCkgLyogSW4vT3V0ICovCisjZGVmaW5lIERNX1NVU1BFTkRfRkxBRwkJKDEgPDwgMSkgLyogSW4vT3V0ICovCisjZGVmaW5lIERNX1BFUlNJU1RFTlRfREVWX0ZMQUcJKDEgPDwgMykgLyogSW4gKi8KKworLyoKKyAqIEZsYWcgcGFzc2VkIGludG8gaW9jdGwgU1RBVFVTIGNvbW1hbmQgdG8gZ2V0IHRhYmxlIGluZm9ybWF0aW9uCisgKiByYXRoZXIgdGhhbiBjdXJyZW50IHN0YXR1cy4KKyAqLworI2RlZmluZSBETV9TVEFUVVNfVEFCTEVfRkxBRwkoMSA8PCA0KSAvKiBJbiAqLworCisvKgorICogRmxhZ3MgdGhhdCBpbmRpY2F0ZSB3aGV0aGVyIGEgdGFibGUgaXMgcHJlc2VudCBpbiBlaXRoZXIgb2YKKyAqIHRoZSB0d28gdGFibGUgc2xvdHMgdGhhdCBhIGRldmljZSBoYXMuCisgKi8KKyNkZWZpbmUgRE1fQUNUSVZFX1BSRVNFTlRfRkxBRyAgICgxIDw8IDUpIC8qIE91dCAqLworI2RlZmluZSBETV9JTkFDVElWRV9QUkVTRU5UX0ZMQUcgKDEgPDwgNikgLyogT3V0ICovCisKKy8qCisgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgYnVmZmVyIHBhc3NlZCBpbiB3YXNuJ3QgYmlnIGVub3VnaCBmb3IgdGhlCisgKiByZXN1bHRzLgorICovCisjZGVmaW5lIERNX0JVRkZFUl9GVUxMX0ZMQUcJKDEgPDwgOCkgLyogT3V0ICovCisKKy8qCisgKiBTZXQgdGhpcyB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIHdoZW4geW91IGFyZW4ndCBnb2luZyB0byB1c2Ugb3Blbl9jb3VudAorICovCisjZGVmaW5lIERNX1NLSVBfQkRHRVRfRkxBRwkoMSA8PCA5KSAvKiBJbiAqLworCisjZW5kaWYJCQkJLyogX0xJTlVYX0RNX0lPQ1RMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaCBiL2luY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDZjMzA1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oCkBAIC0wLDAgKzEsNTYgQEAKKyNpZm5kZWYgX0FTTV9MSU5VWF9ETUFfTUFQUElOR19ICisjZGVmaW5lIF9BU01fTElOVVhfRE1BX01BUFBJTkdfSAorCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisKKy8qIFRoZXNlIGRlZmluaXRpb25zIG1pcnJvciB0aG9zZSBpbiBwY2kuaCwgc28gdGhleSBjYW4gYmUgdXNlZAorICogaW50ZXJjaGFuZ2VhYmx5IHdpdGggdGhlaXIgUENJXyBjb3VudGVycGFydHMgKi8KK2VudW0gZG1hX2RhdGFfZGlyZWN0aW9uIHsKKwlETUFfQklESVJFQ1RJT05BTCA9IDAsCisJRE1BX1RPX0RFVklDRSA9IDEsCisJRE1BX0ZST01fREVWSUNFID0gMiwKKwlETUFfTk9ORSA9IDMsCit9OworCisjZGVmaW5lIERNQV82NEJJVF9NQVNLCTB4ZmZmZmZmZmZmZmZmZmZmZlVMTAorI2RlZmluZSBETUFfMzJCSVRfTUFTSwkweDAwMDAwMDAwZmZmZmZmZmZVTEwKKworI2luY2x1ZGUgPGFzbS9kbWEtbWFwcGluZy5oPgorCisvKiBCYWNrd2FyZHMgY29tcGF0LCByZW1vdmUgaW4gMi43LnggKi8KKyNkZWZpbmUgZG1hX3N5bmNfc2luZ2xlCQlkbWFfc3luY19zaW5nbGVfZm9yX2NwdQorI2RlZmluZSBkbWFfc3luY19zZwkJZG1hX3N5bmNfc2dfZm9yX2NwdQorCitleHRlcm4gdTY0IGRtYV9nZXRfcmVxdWlyZWRfbWFzayhzdHJ1Y3QgZGV2aWNlICpkZXYpOworCisvKiBmbGFncyBmb3IgdGhlIGNvaGVyZW50IG1lbW9yeSBhcGkgKi8KKyNkZWZpbmUJRE1BX01FTU9SWV9NQVAJCQkweDAxCisjZGVmaW5lIERNQV9NRU1PUllfSU8JCQkweDAyCisjZGVmaW5lIERNQV9NRU1PUllfSU5DTFVERVNfQ0hJTERSRU4JMHgwNAorI2RlZmluZSBETUFfTUVNT1JZX0VYQ0xVU0lWRQkJMHgwOAorCisjaWZuZGVmIEFSQ0hfSEFTX0RNQV9ERUNMQVJFX0NPSEVSRU5UX01FTU9SWQorc3RhdGljIGlubGluZSBpbnQKK2RtYV9kZWNsYXJlX2NvaGVyZW50X21lbW9yeShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgYnVzX2FkZHIsCisJCQkgICAgZG1hX2FkZHJfdCBkZXZpY2VfYWRkciwgc2l6ZV90IHNpemUsIGludCBmbGFncykKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitkbWFfcmVsZWFzZV9kZWNsYXJlZF9tZW1vcnkoc3RydWN0IGRldmljZSAqZGV2KQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKgorZG1hX21hcmtfZGVjbGFyZWRfbWVtb3J5X29jY3VwaWVkKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgIGRtYV9hZGRyX3QgZGV2aWNlX2FkZHIsIHNpemVfdCBzaXplKQoreworCXJldHVybiBFUlJfUFRSKC1FQlVTWSk7Cit9CisjZW5kaWYKKworI2VuZGlmCisKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWFwb29sLmggYi9pbmNsdWRlL2xpbnV4L2RtYXBvb2wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjBiZmRhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9kbWFwb29sLmgKQEAgLTAsMCArMSwyNyBAQAorLyoKKyAqIGluY2x1ZGUvbGludXgvZG1hcG9vbC5oCisgKgorICogQWxsb2NhdGlvbiBwb29scyBmb3IgRE1BYWJsZSAoY29oZXJlbnQpIG1lbW9yeS4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIAorICogTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IAorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpZm5kZWYgTElOVVhfRE1BUE9PTF9ICisjZGVmaW5lCUxJTlVYX0RNQVBPT0xfSAorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+CisKK3N0cnVjdCBkbWFfcG9vbCAqZG1hX3Bvb2xfY3JlYXRlKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBkZXZpY2UgKmRldiwgCisJCQlzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWduLCBzaXplX3QgYWxsb2NhdGlvbik7CisKK3ZvaWQgZG1hX3Bvb2xfZGVzdHJveShzdHJ1Y3QgZG1hX3Bvb2wgKnBvb2wpOworCit2b2lkICpkbWFfcG9vbF9hbGxvYyhzdHJ1Y3QgZG1hX3Bvb2wgKnBvb2wsIGludCBtZW1fZmxhZ3MsIGRtYV9hZGRyX3QgKmhhbmRsZSk7CisKK3ZvaWQgZG1hX3Bvb2xfZnJlZShzdHJ1Y3QgZG1hX3Bvb2wgKnBvb2wsIHZvaWQgKnZhZGRyLCBkbWFfYWRkcl90IGFkZHIpOworCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWkuaCBiL2luY2x1ZGUvbGludXgvZG1pLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJiY2Y1NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvZG1pLmgKQEAgLTAsMCArMSw0NyBAQAorI2lmbmRlZiBfX0RNSV9IX18KKyNkZWZpbmUgX19ETUlfSF9fCisKK2VudW0gZG1pX2ZpZWxkIHsKKwlETUlfTk9ORSwKKwlETUlfQklPU19WRU5ET1IsCisJRE1JX0JJT1NfVkVSU0lPTiwKKwlETUlfQklPU19EQVRFLAorCURNSV9TWVNfVkVORE9SLAorCURNSV9QUk9EVUNUX05BTUUsCisJRE1JX1BST0RVQ1RfVkVSU0lPTiwKKwlETUlfQk9BUkRfVkVORE9SLAorCURNSV9CT0FSRF9OQU1FLAorCURNSV9CT0FSRF9WRVJTSU9OLAorCURNSV9TVFJJTkdfTUFYLAorfTsKKworLyoKKyAqCURNSSBjYWxsYmFja3MgZm9yIHByb2JsZW0gYm9hcmRzCisgKi8KK3N0cnVjdCBkbWlfc3RybWF0Y2ggeworCXU4IHNsb3Q7CisJY2hhciAqc3Vic3RyOworfTsKKworc3RydWN0IGRtaV9zeXN0ZW1faWQgeworCWludCAoKmNhbGxiYWNrKShzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqKTsKKwljaGFyICppZGVudDsKKwlzdHJ1Y3QgZG1pX3N0cm1hdGNoIG1hdGNoZXNbNF07CisJdm9pZCAqZHJpdmVyX2RhdGE7Cit9OworCisjZGVmaW5lIERNSV9NQVRDSChhLGIpCXsgYSwgYiB9CisKKyNpZiBkZWZpbmVkKENPTkZJR19YODYpICYmICFkZWZpbmVkKENPTkZJR19YODZfNjQpCisKK2V4dGVybiBpbnQgZG1pX2NoZWNrX3N5c3RlbShzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqbGlzdCk7CitleHRlcm4gY2hhciAqIGRtaV9nZXRfc3lzdGVtX2luZm8oaW50IGZpZWxkKTsKKworI2Vsc2UKKworc3RhdGljIGlubGluZSBpbnQgZG1pX2NoZWNrX3N5c3RlbShzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqbGlzdCkgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSBjaGFyICogZG1pX2dldF9zeXN0ZW1faW5mbyhpbnQgZmllbGQpIHsgcmV0dXJuIE5VTEw7IH0KKworI2VuZGlmCisKKyNlbmRpZgkvKiBfX0RNSV9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZG4uaCBiL2luY2x1ZGUvbGludXgvZG4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODJjYWU0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9kbi5oCkBAIC0wLDAgKzEsMTQ3IEBACisjaWZuZGVmIF9MSU5VWF9ETl9ICisjZGVmaW5lIF9MSU5VWF9ETl9ICisKKy8qCisKKwlERUNuZXQgRGF0YSBTdHJ1Y3R1cmVzIGFuZCBDb25zdGFudHMKKworKi8KKworLyogCisgKiBETlBST1RPX05TUCBjYW4ndCBiZSB0aGUgc2FtZSBhcyBTT0xfU09DS0VULCAKKyAqIHNvIGluY3JlbWVudCBlYWNoIGJ5IG9uZSAoY29tcGFyZWQgdG8gVUxUUklYKQorICovCisjZGVmaW5lIEROUFJPVE9fTlNQICAgICAyICAgICAgICAgICAgICAgICAgICAgICAvKiBOU1AgcHJvdG9jb2wgbnVtYmVyICAgICAgICovCisjZGVmaW5lIEROUFJPVE9fUk9VICAgICAzICAgICAgICAgICAgICAgICAgICAgICAvKiBSb3V0aW5nIHByb3RvY29sIG51bWJlciAgICovCisjZGVmaW5lIEROUFJPVE9fTk1MICAgICA0ICAgICAgICAgICAgICAgICAgICAgICAvKiBOZXQgbWd0IHByb3RvY29sIG51bWJlciAgICovCisjZGVmaW5lIEROUFJPVE9fRVZMICAgICA1ICAgICAgICAgICAgICAgICAgICAgICAvKiBFdmwgcHJvdG9jb2wgbnVtYmVyICh1c3IpICovCisjZGVmaW5lIEROUFJPVE9fRVZSICAgICA2ICAgICAgICAgICAgICAgICAgICAgICAvKiBFdmwgcHJvdG9jb2wgbnVtYmVyIChldmwpICovCisjZGVmaW5lIEROUFJPVE9fTlNQVCAgICA3ICAgICAgICAgICAgICAgICAgICAgICAvKiBOU1AgdHJhY2UgcHJvdG9jb2wgbnVtYmVyICovCisKKworI2RlZmluZSBETl9BRERMCQkyCisjZGVmaW5lIEROX01BWEFEREwJMiAvKiBVTFRSSVggaGVhZGVycyBoYXZlIDIwIGhlcmUsIGJ1dCBwYXRod29ya3MgaGFzIDIgKi8KKyNkZWZpbmUgRE5fTUFYT1BUTAkxNgorI2RlZmluZSBETl9NQVhPQkpMCTE2CisjZGVmaW5lIEROX01BWEFDQ0wJNDAKKyNkZWZpbmUgRE5fTUFYQUxJQVNMCTEyOAorI2RlZmluZSBETl9NQVhOT0RFTAkyNTYKKyNkZWZpbmUgRE5CVUZTSVpFCTY1MDIzCisKKy8qIAorICogU0VUL0dFVCBTb2NrZXQgb3B0aW9ucyAgLSBtdXN0IG1hdGNoIHRoZSBEU09fIG51bWJlcnMgYmVsb3cKKyAqLworI2RlZmluZSBTT19DT05EQVRBICAgICAgMQorI2RlZmluZSBTT19DT05BQ0NFU1MgICAgMgorI2RlZmluZSBTT19QUk9YWVVTUiAgICAgMworI2RlZmluZSBTT19MSU5LSU5GTyAgICAgNworCisjZGVmaW5lIERTT19DT05EQVRBICAgICAxICAgICAgICAvKiBTZXQvR2V0IGNvbm5lY3QgZGF0YSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBEU09fRElTREFUQSAgICAgMTAgICAgICAgLyogU2V0L0dldCBkaXNjb25uZWN0IGRhdGEgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRFNPX0NPTkFDQ0VTUyAgIDIgICAgICAgIC8qIFNldC9HZXQgY29ubmVjdCBhY2Nlc3MgZGF0YSAgICAgICAgICovCisjZGVmaW5lIERTT19BQ0NFUFRNT0RFICA0ICAgICAgICAvKiBTZXQvR2V0IGFjY2VwdCBtb2RlICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBEU09fQ09OQUNDRVBUICAgNSAgICAgICAgLyogQWNjZXB0IGRlZmVycmVkIGNvbm5lY3Rpb24gICAgICAgICAgKi8KKyNkZWZpbmUgRFNPX0NPTlJFSkVDVCAgIDYgICAgICAgIC8qIFJlamVjdCBkZWZlcnJlZCBjb25uZWN0aW9uICAgICAgICAgICovCisjZGVmaW5lIERTT19MSU5LSU5GTyAgICA3ICAgICAgICAvKiBTZXQvR2V0IGxpbmsgaW5mb3JtYXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBEU09fU1RSRUFNICAgICAgOCAgICAgICAgLyogU2V0IHNvY2tldCB0eXBlIHRvIHN0cmVhbSAgICAgICAgICAgKi8KKyNkZWZpbmUgRFNPX1NFUVBBQ0tFVCAgIDkgICAgICAgIC8qIFNldCBzb2NrZXQgdHlwZSB0byBzZXF1ZW5jZWQgcGFja2V0ICovCisjZGVmaW5lIERTT19NQVhXSU5ET1cgICAxMSAgICAgICAvKiBNYXhpbXVtIHdpbmRvdyBzaXplIGFsbG93ZWQgICAgICAgICAqLworI2RlZmluZSBEU09fTk9ERUxBWQkxMiAgICAgICAvKiBUdXJuIG9mZiBuYWdsZSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBEU09fQ09SSyAgICAgICAgMTMgICAgICAgLyogV2FpdCBmb3IgbW9yZSBkYXRhISAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRFNPX1NFUlZJQ0VTCTE0ICAgICAgIC8qIE5TUCBTZXJ2aWNlcyBmaWVsZCAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERTT19JTkZPCTE1ICAgICAgIC8qIE5TUCBJbmZvIGZpZWxkICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERTT19NQVggICAgICAgICAxNSAgICAgICAvKiBNYXhpbXVtIG9wdGlvbiBudW1iZXIgICAgICAgICAgICAgICAqLworCisKKy8qIExJTksgU3RhdGVzICovCisjZGVmaW5lIExMX0lOQUNUSVZFCTAKKyNkZWZpbmUgTExfQ09OTkVDVElORwkxCisjZGVmaW5lIExMX1JVTk5JTkcJMgorI2RlZmluZSBMTF9ESVNDT05ORUNUSU5HIDMKKworI2RlZmluZSBBQ0NfSU1NRUQgMAorI2RlZmluZSBBQ0NfREVGRVIgMQorCisjZGVmaW5lIFNERl9XSUxEICAgICAgICAxICAgICAgICAgICAgICAgICAgLyogV2lsZCBjYXJkIG9iamVjdCAgICAgICAgICAqLworI2RlZmluZSBTREZfUFJPWFkgICAgICAgMiAgICAgICAgICAgICAgICAgIC8qIEFkZHIgZWxpZ2libGUgZm9yIHByb3h5ICAgKi8KKyNkZWZpbmUgU0RGX1VJQ1BST1hZICAgIDQgICAgICAgICAgICAgICAgICAvKiBVc2UgdWljLWJhc2VkIHByb3h5ICAgICAgICovCisKKy8qIFN0cnVjdHVyZXMgKi8KKworCitzdHJ1Y3QgZG5fbmFkZHIgCit7CisJdW5zaWduZWQgc2hvcnQJCWFfbGVuOworCXVuc2lnbmVkIGNoYXIgYV9hZGRyW0ROX01BWEFERExdOworfTsKKworc3RydWN0IHNvY2thZGRyX2RuCit7CisJdW5zaWduZWQgc2hvcnQJCXNkbl9mYW1pbHk7CisJdW5zaWduZWQgY2hhcgkJc2RuX2ZsYWdzOworCXVuc2lnbmVkIGNoYXIJCXNkbl9vYmpudW07CisJdW5zaWduZWQgc2hvcnQJCXNkbl9vYmpuYW1lbDsKKwl1bnNpZ25lZCBjaGFyCQlzZG5fb2JqbmFtZVtETl9NQVhPQkpMXTsKKwlzdHJ1Y3QgICBkbl9uYWRkcglzZG5fYWRkOworfTsKKyNkZWZpbmUgc2RuX25vZGVhZGRybCAgIHNkbl9hZGQuYV9sZW4gICAvKiBOb2RlIGFkZHJlc3MgbGVuZ3RoICAqLworI2RlZmluZSBzZG5fbm9kZWFkZHIgICAgc2RuX2FkZC5hX2FkZHIgIC8qIE5vZGUgYWRkcmVzcyAgICAgICAgICovCisKKworCisvKgorICogREVDbmV0IHNldC9nZXQgRFNPX0NPTkRBVEEsIERTT19ESVNEQVRBIChvcHRpb25hbCBkYXRhKSBzdHJ1Y3R1cmUKKyAqLworc3RydWN0IG9wdGRhdGFfZG4geworICAgICAgICB1bnNpZ25lZCBzaG9ydCAgb3B0X3N0YXR1czsgICAgIC8qIEV4dGVuZGVkIHN0YXR1cyByZXR1cm4gKi8KKyNkZWZpbmUgb3B0X3N0cyBvcHRfc3RhdHVzCisgICAgICAgIHVuc2lnbmVkIHNob3J0ICBvcHRfb3B0bDsgICAgICAgLyogTGVuZ3RoIG9mIHVzZXIgZGF0YSAgICAqLworICAgICAgICB1bnNpZ25lZCBjaGFyICAgb3B0X2RhdGFbMTZdOyAgIC8qIFVzZXIgZGF0YSAgICAgICAgICAgICAgKi8KK307CisKK3N0cnVjdCBhY2Nlc3NkYXRhX2RuCit7CisJdW5zaWduZWQgY2hhcgkJYWNjX2FjY2w7CisJdW5zaWduZWQgY2hhcgkJYWNjX2FjY1tETl9NQVhBQ0NMXTsKKwl1bnNpZ25lZCBjaGFyIAkJYWNjX3Bhc3NsOworCXVuc2lnbmVkIGNoYXIJCWFjY19wYXNzW0ROX01BWEFDQ0xdOworCXVuc2lnbmVkIGNoYXIgCQlhY2NfdXNlcmw7CisJdW5zaWduZWQgY2hhcgkJYWNjX3VzZXJbRE5fTUFYQUNDTF07Cit9OworCisvKgorICogREVDbmV0IGxvZ2ljYWwgbGluayBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUKKyAqLworc3RydWN0IGxpbmtpbmZvX2RuIHsKKyAgICAgICAgdW5zaWduZWQgc2hvcnQgIGlkbl9zZWdzaXplOyAgICAvKiBTZWdtZW50IHNpemUgZm9yIGxpbmsgKi8KKyAgICAgICAgdW5zaWduZWQgY2hhciAgIGlkbl9saW5rc3RhdGU7ICAvKiBMb2dpY2FsIGxpbmsgc3RhdGUgICAgKi8KK307CisKKy8qCisgKiBFdGhlcm5ldCBhZGRyZXNzIGZvcm1hdCAoZm9yIERFQ25ldCkKKyAqLwordW5pb24gZXRoZXJhZGRyZXNzIHsKKyAgICAgICAgdW5zaWduZWQgY2hhciBkbmVfYWRkcls2XTsgICAgICAgICAgICAgLyogRnVsbCBldGhlcm5ldCBhZGRyZXNzICovCisgIHN0cnVjdCB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBkbmVfaGlvcmRbNF07ICAgIC8qIERFQ25ldCBISU9SRCBwcmVmaXggICAqLworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgZG5lX25vZGVhZGRyWzJdOyAvKiBERUNuZXQgbm9kZSBhZGRyZXNzICAgKi8KKyAgfSBkbmVfcmVtb3RlOworfTsKKworCisvKgorICogREVDbmV0IHBoeXNpY2FsIHNvY2tldCBhZGRyZXNzIGZvcm1hdAorICovCitzdHJ1Y3QgZG5fYWRkciB7CisgICAgICAgIHVuc2lnbmVkIHNob3J0IGRuYV9mYW1pbHk7ICAgICAgLyogQUZfREVDbmV0ICAgICAgICAgICAgICAgKi8KKyAgICAgICAgdW5pb24gZXRoZXJhZGRyZXNzIGRuYV9uZXRhZGRyOyAvKiBERUNuZXQgZXRoZXJuZXQgYWRkcmVzcyAqLworfTsKKworI2RlZmluZSBERUNORVRfSU9DVExfQkFTRSAweDg5IC8qIFBST1RPUFJJVkFURSByYW5nZSAqLworCisjZGVmaW5lIFNJT0NTTkVUQUREUiAgX0lPVyhERUNORVRfSU9DVExfQkFTRSwgMHhlMCwgc3RydWN0IGRuX25hZGRyKQorI2RlZmluZSBTSU9DR05FVEFERFIgIF9JT1IoREVDTkVUX0lPQ1RMX0JBU0UsIDB4ZTEsIHN0cnVjdCBkbl9uYWRkcikKKyNkZWZpbmUgT1NJT0NTTkVUQUREUiBfSU9XKERFQ05FVF9JT0NUTF9CQVNFLCAweGUwLCBpbnQpCisjZGVmaW5lIE9TSU9DR05FVEFERFIgX0lPUihERUNORVRfSU9DVExfQkFTRSwgMHhlMSwgaW50KQorCisjZW5kaWYgLyogX0xJTlVYX0ROX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZG5vdGlmeS5oIGIvaW5jbHVkZS9saW51eC9kbm90aWZ5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjEzNGEwMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvZG5vdGlmeS5oCkBAIC0wLDAgKzEsNjMgQEAKKyNpZm5kZWYgX0xJTlVYX0ROT1RJRllfSAorI2RlZmluZSBfTElOVVhfRE5PVElGWV9ICisvKgorICogRGlyZWN0b3J5IG5vdGlmaWNhdGlvbiBmb3IgTGludXgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAsMjAwMiBTdGVwaGVuIFJvdGh3ZWxsCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisKK3N0cnVjdCBkbm90aWZ5X3N0cnVjdCB7CisJc3RydWN0IGRub3RpZnlfc3RydWN0ICoJZG5fbmV4dDsKKwl1bnNpZ25lZCBsb25nCQlkbl9tYXNrOworCWludAkJCWRuX2ZkOworCXN0cnVjdCBmaWxlICoJCWRuX2ZpbHA7CisJZmxfb3duZXJfdAkJZG5fb3duZXI7Cit9OworCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpZmRlZiBDT05GSUdfRE5PVElGWQorCitleHRlcm4gdm9pZCBfX2lub2RlX2Rpcl9ub3RpZnkoc3RydWN0IGlub2RlICosIHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuIHZvaWQgZG5vdGlmeV9mbHVzaChzdHJ1Y3QgZmlsZSAqLCBmbF9vd25lcl90KTsKK2V4dGVybiBpbnQgZmNudGxfZGlybm90aWZ5KGludCwgc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgbG9uZyk7CitleHRlcm4gdm9pZCBkbm90aWZ5X3BhcmVudChzdHJ1Y3QgZGVudHJ5ICosIHVuc2lnbmVkIGxvbmcpOworCitzdGF0aWMgaW5saW5lIHZvaWQgaW5vZGVfZGlyX25vdGlmeShzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBsb25nIGV2ZW50KQoreworCWlmIChpbm9kZS0+aV9kbm90aWZ5X21hc2sgJiAoZXZlbnQpKQorCQlfX2lub2RlX2Rpcl9ub3RpZnkoaW5vZGUsIGV2ZW50KTsKK30KKworI2Vsc2UKKworc3RhdGljIGlubGluZSB2b2lkIF9faW5vZGVfZGlyX25vdGlmeShzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBsb25nIGV2ZW50KQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZG5vdGlmeV9mbHVzaChzdHJ1Y3QgZmlsZSAqZmlscCwgZmxfb3duZXJfdCBpZCkKK3sKK30KKworc3RhdGljIGlubGluZSBpbnQgZmNudGxfZGlybm90aWZ5KGludCBmZCwgc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZG5vdGlmeV9wYXJlbnQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bnNpZ25lZCBsb25nIGV2ZW50KQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW5vZGVfZGlyX25vdGlmeShzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBsb25nIGV2ZW50KQoreworfQorCisjZW5kaWYgLyogQ09ORklHX0ROT1RJRlkgKi8KKworI2VuZGlmIC8qIF9fS0VSTkVMIF9fICovCisKKyNlbmRpZiAvKiBfTElOVVhfRE5PVElGWV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RxYmxrX3YxLmggYi9pbmNsdWRlL2xpbnV4L2RxYmxrX3YxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJmYmY0NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvZHFibGtfdjEuaApAQCAtMCwwICsxLDE4IEBACisvKgorICoJRmlsZSB3aXRoIGluLW1lbW9yeSBzdHJ1Y3R1cmVzIG9mIG9sZCBxdW90YSBmb3JtYXQKKyAqLworCisjaWZuZGVmIF9MSU5VWF9EUUJMS19WMV9ICisjZGVmaW5lIF9MSU5VWF9EUUJMS19WMV9ICisKKy8qIElkIG9mIHF1b3RhIGZvcm1hdCAqLworI2RlZmluZSBRRk1UX1ZGU19PTEQgMQorCisvKiBSb290IHNxdWFzaCB0dXJuZWQgb24gKi8KKyNkZWZpbmUgVjFfRFFGX1JTUVVBU0ggMQorCisvKiBTcGVjaWFsIGluZm9ybWF0aW9uIGFib3V0IHF1b3RhZmlsZSAqLworc3RydWN0IHYxX21lbV9kcWluZm8geworfTsKKworI2VuZGlmCS8qIF9MSU5VWF9EUUJMS19WMV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RxYmxrX3YyLmggYi9pbmNsdWRlL2xpbnV4L2RxYmxrX3YyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE2YzVmNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvZHFibGtfdjIuaApAQCAtMCwwICsxLDIwIEBACisvKgorICoJRGVmaW5pdGlvbnMgb2Ygc3RydWN0dXJlcyBmb3IgdmZzdjAgcXVvdGEgZm9ybWF0CisgKi8KKworI2lmbmRlZiBfTElOVVhfRFFCTEtfVjJfSAorI2RlZmluZSBfTElOVVhfRFFCTEtfVjJfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyogaWQgbnVtYmVycyBvZiBxdW90YSBmb3JtYXQgKi8KKyNkZWZpbmUgUUZNVF9WRlNfVjAgMgorCisvKiBJbm1lbW9yeSBjb3B5IG9mIHZlcnNpb24gc3BlY2lmaWMgaW5mb3JtYXRpb24gKi8KK3N0cnVjdCB2Ml9tZW1fZHFpbmZvIHsKKwl1bnNpZ25lZCBpbnQgZHFpX2Jsb2NrczsKKwl1bnNpZ25lZCBpbnQgZHFpX2ZyZWVfYmxrOworCXVuc2lnbmVkIGludCBkcWlfZnJlZV9lbnRyeTsKK307CisKKyNlbmRpZiAvKiBfTElOVVhfRFFCTEtfVjJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kcWJsa194ZnMuaCBiL2luY2x1ZGUvbGludXgvZHFibGtfeGZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2IzMTcxOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvZHFibGtfeGZzLmgKQEAgLTAsMCArMSwxNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTUtMjAwMSwyMDA0IFNpbGljb24gR3JhcGhpY3MsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIuMSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcKKyAqIFVTQQorICoKKyAqIENvbnRhY3QgaW5mb3JtYXRpb246IFNpbGljb24gR3JhcGhpY3MsIEluYy4sIDE1MDAgQ3JpdHRlbmRlbiBMYW5lLAorICogTW91bnRhaW4gVmlldywgQ0EgOTQwNDMsIFVTQSwgb3I6IGh0dHA6Ly93d3cuc2dpLmNvbQorICovCisjaWZuZGVmIF9MSU5VWF9EUUJMS19YRlNfSAorI2RlZmluZSBfTElOVVhfRFFCTEtfWEZTX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qCisgKiBEaXNrIHF1b3RhIC0gcXVvdGFjdGwoMikgY29tbWFuZHMgZm9yIHRoZSBYRlMgUXVvdGEgTWFuYWdlciAoWFFNKS4KKyAqLworCisjZGVmaW5lIFhRTV9DTUQoeCkJKCgnWCc8PDgpKyh4KSkJLyogbm90ZTogZm9ybXMgZmlyc3QgUUNNRCBhcmd1bWVudCAqLworI2RlZmluZSBYUU1fQ09NTUFORCh4KQkoKCh4KSAmICgweGZmPDw4KSkgPT0gKCdYJzw8OCkpCS8qIHRlc3QgaWYgZm9yIFhGUyAqLworCisjZGVmaW5lIFhRTV9VU1JRVU9UQQkwCS8qIHN5c3RlbSBjYWxsIHVzZXIgcXVvdGEgdHlwZSAqLworI2RlZmluZSBYUU1fR1JQUVVPVEEJMQkvKiBzeXN0ZW0gY2FsbCBncm91cCBxdW90YSB0eXBlICovCisjZGVmaW5lIFhRTV9NQVhRVU9UQVMJMgorCisjZGVmaW5lIFFfWFFVT1RBT04JWFFNX0NNRCgxKQkvKiBlbmFibGUgYWNjb3VudGluZy9lbmZvcmNlbWVudCAqLworI2RlZmluZSBRX1hRVU9UQU9GRglYUU1fQ01EKDIpCS8qIGRpc2FibGUgYWNjb3VudGluZy9lbmZvcmNlbWVudCAqLworI2RlZmluZSBRX1hHRVRRVU9UQQlYUU1fQ01EKDMpCS8qIGdldCBkaXNrIGxpbWl0cyBhbmQgdXNhZ2UgKi8KKyNkZWZpbmUgUV9YU0VUUUxJTQlYUU1fQ01EKDQpCS8qIHNldCBkaXNrIGxpbWl0cyAqLworI2RlZmluZSBRX1hHRVRRU1RBVAlYUU1fQ01EKDUpCS8qIGdldCBxdW90YSBzdWJzeXN0ZW0gc3RhdHVzICovCisjZGVmaW5lIFFfWFFVT1RBUk0JWFFNX0NNRCg2KQkvKiBmcmVlIGRpc2sgc3BhY2UgdXNlZCBieSBkcXVvdHMgKi8KKworLyoKKyAqIGZzX2Rpc2tfcXVvdGEgc3RydWN0dXJlOgorICoKKyAqIFRoaXMgY29udGFpbnMgdGhlIGN1cnJlbnQgcXVvdGEgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGEgdXNlci9wcm9qL2dyb3VwLgorICogSXQgaXMgNjQtYml0IGFsaWduZWQsIGFuZCBhbGwgdGhlIGJsayB1bml0cyBhcmUgaW4gQkJzIChCYXNpYyBCbG9ja3MpIG9mCisgKiA1MTIgYnl0ZXMuCisgKi8KKyNkZWZpbmUgRlNfRFFVT1RfVkVSU0lPTgkxCS8qIGZzX2Rpc2tfcXVvdGEuZF92ZXJzaW9uICovCit0eXBlZGVmIHN0cnVjdCBmc19kaXNrX3F1b3RhIHsKKwlfX3M4CQlkX3ZlcnNpb247CS8qIHZlcnNpb24gb2YgdGhpcyBzdHJ1Y3R1cmUgKi8KKwlfX3M4CQlkX2ZsYWdzOwkvKiBYRlNfe1VTRVIsUFJPSixHUk9VUH1fUVVPVEEgKi8KKwlfX3UxNgkJZF9maWVsZG1hc2s7CS8qIGZpZWxkIHNwZWNpZmllciAqLworCV9fdTMyCQlkX2lkOwkJLyogdXNlciwgcHJvamVjdCwgb3IgZ3JvdXAgSUQgKi8KKwlfX3U2NAkJZF9ibGtfaGFyZGxpbWl0Oy8qIGFic29sdXRlIGxpbWl0IG9uIGRpc2sgYmxrcyAqLworCV9fdTY0CQlkX2Jsa19zb2Z0bGltaXQ7LyogcHJlZmVycmVkIGxpbWl0IG9uIGRpc2sgYmxrcyAqLworCV9fdTY0CQlkX2lub19oYXJkbGltaXQ7LyogbWF4aW11bSAjIGFsbG9jYXRlZCBpbm9kZXMgKi8KKwlfX3U2NAkJZF9pbm9fc29mdGxpbWl0Oy8qIHByZWZlcnJlZCBpbm9kZSBsaW1pdCAqLworCV9fdTY0CQlkX2Jjb3VudDsJLyogIyBkaXNrIGJsb2NrcyBvd25lZCBieSB0aGUgdXNlciAqLworCV9fdTY0CQlkX2ljb3VudDsJLyogIyBpbm9kZXMgb3duZWQgYnkgdGhlIHVzZXIgKi8KKwlfX3MzMgkJZF9pdGltZXI7CS8qIHplcm8gaWYgd2l0aGluIGlub2RlIGxpbWl0cyAqLworCQkJCQkvKiBpZiBub3QsIHdlIHJlZnVzZSBzZXJ2aWNlICovCisJX19zMzIJCWRfYnRpbWVyOwkvKiBzaW1pbGFyIHRvIGFib3ZlOyBmb3IgZGlzayBibG9ja3MgKi8KKwlfX3UxNgkgIAlkX2l3YXJuczsgICAgICAgLyogIyB3YXJuaW5ncyBpc3N1ZWQgd3J0IG51bSBpbm9kZXMgKi8KKwlfX3UxNgkgIAlkX2J3YXJuczsgICAgICAgLyogIyB3YXJuaW5ncyBpc3N1ZWQgd3J0IGRpc2sgYmxvY2tzICovCisJX19zMzIJCWRfcGFkZGluZzI7CS8qIHBhZGRpbmcyIC0gZm9yIGZ1dHVyZSB1c2UgKi8KKwlfX3U2NAkJZF9ydGJfaGFyZGxpbWl0Oy8qIGFic29sdXRlIGxpbWl0IG9uIHJlYWx0aW1lIGJsa3MgKi8KKwlfX3U2NAkJZF9ydGJfc29mdGxpbWl0Oy8qIHByZWZlcnJlZCBsaW1pdCBvbiBSVCBkaXNrIGJsa3MgKi8KKwlfX3U2NAkJZF9ydGJjb3VudDsJLyogIyByZWFsdGltZSBibG9ja3Mgb3duZWQgKi8KKwlfX3MzMgkJZF9ydGJ0aW1lcjsJLyogc2ltaWxhciB0byBhYm92ZTsgZm9yIFJUIGRpc2sgYmxrcyAqLworCV9fdTE2CSAgCWRfcnRid2FybnM7ICAgICAvKiAjIHdhcm5pbmdzIGlzc3VlZCB3cnQgUlQgZGlzayBibGtzICovCisJX19zMTYJCWRfcGFkZGluZzM7CS8qIHBhZGRpbmczIC0gZm9yIGZ1dHVyZSB1c2UgKi8JCisJY2hhcgkJZF9wYWRkaW5nNFs4XTsJLyogeWV0IG1vcmUgcGFkZGluZyAqLworfSBmc19kaXNrX3F1b3RhX3Q7CisKKy8qCisgKiBUaGVzZSBmaWVsZHMgYXJlIHNlbnQgdG8gUV9YU0VUUUxJTSB0byBzcGVjaWZ5IGZpZWxkcyB0aGF0IG5lZWQgdG8gY2hhbmdlLgorICovCisjZGVmaW5lIEZTX0RRX0lTT0ZUCSgxPDwwKQorI2RlZmluZSBGU19EUV9JSEFSRAkoMTw8MSkKKyNkZWZpbmUgRlNfRFFfQlNPRlQJKDE8PDIpCisjZGVmaW5lIEZTX0RRX0JIQVJEIAkoMTw8MykKKyNkZWZpbmUgRlNfRFFfUlRCU09GVAkoMTw8NCkKKyNkZWZpbmUgRlNfRFFfUlRCSEFSRAkoMTw8NSkKKyNkZWZpbmUgRlNfRFFfTElNSVRfTUFTSwkoRlNfRFFfSVNPRlQgfCBGU19EUV9JSEFSRCB8IEZTX0RRX0JTT0ZUIHwgXAorCQkJCSBGU19EUV9CSEFSRCB8IEZTX0RRX1JUQlNPRlQgfCBGU19EUV9SVEJIQVJEKQorLyoKKyAqIFRoZXNlIHRpbWVycyBjYW4gb25seSBiZSBzZXQgaW4gc3VwZXIgdXNlcidzIGRxdW90LiBGb3Igb3RoZXJzLCB0aW1lcnMgYXJlCisgKiBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgYW5kIHN0b3BwZWQuIFN1cGVydXNlcnMgdGltZXIgdmFsdWVzIHNldCB0aGUgbGltaXRzCisgKiBmb3IgdGhlIHJlc3QuICBJbiBjYXNlIHRoZXNlIHZhbHVlcyBhcmUgemVybywgdGhlIERRX3tGLEJ9VElNRUxJTUlUIHZhbHVlcworICogZGVmaW5lZCBiZWxvdyBhcmUgdXNlZC4gCisgKiBUaGVzZSB2YWx1ZXMgYWxzbyBhcHBseSBvbmx5IHRvIHRoZSBkX2ZpZWxkbWFzayBmaWVsZCBmb3IgUV9YU0VUUUxJTS4KKyAqLworI2RlZmluZSBGU19EUV9CVElNRVIJKDE8PDYpCisjZGVmaW5lIEZTX0RRX0lUSU1FUgkoMTw8NykKKyNkZWZpbmUgRlNfRFFfUlRCVElNRVIgCSgxPDw4KQorI2RlZmluZSBGU19EUV9USU1FUl9NQVNLCShGU19EUV9CVElNRVIgfCBGU19EUV9JVElNRVIgfCBGU19EUV9SVEJUSU1FUikKKworLyoKKyAqIFdhcm5pbmcgY291bnRzIGFyZSBzZXQgaW4gYm90aCBzdXBlciB1c2VyJ3MgZHF1b3QgYW5kIG90aGVycy4gRm9yIG90aGVycywKKyAqIHdhcm5pbmdzIGFyZSBzZXQvY2xlYXJlZCBieSB0aGUgYWRtaW5pc3RyYXRvcnMgKG9yIGF1dG9tYXRpY2FsbHkgYnkgZ29pbmcKKyAqIGJlbG93IHRoZSBzb2Z0IGxpbWl0KS4gIFN1cGVydXNlcnMgd2FybmluZyB2YWx1ZXMgc2V0IHRoZSB3YXJuaW5nIGxpbWl0cworICogZm9yIHRoZSByZXN0LiAgSW4gY2FzZSB0aGVzZSB2YWx1ZXMgYXJlIHplcm8sIHRoZSBEUV97RixCfVdBUk5MSU1JVCB2YWx1ZXMKKyAqIGRlZmluZWQgYmVsb3cgYXJlIHVzZWQuIAorICogVGhlc2UgdmFsdWVzIGFsc28gYXBwbHkgb25seSB0byB0aGUgZF9maWVsZG1hc2sgZmllbGQgZm9yIFFfWFNFVFFMSU0uCisgKi8KKyNkZWZpbmUgRlNfRFFfQldBUk5TCSgxPDw5KQorI2RlZmluZSBGU19EUV9JV0FSTlMJKDE8PDEwKQorI2RlZmluZSBGU19EUV9SVEJXQVJOUwkoMTw8MTEpCisjZGVmaW5lIEZTX0RRX1dBUk5TX01BU0sJKEZTX0RRX0JXQVJOUyB8IEZTX0RRX0lXQVJOUyB8IEZTX0RRX1JUQldBUk5TKQorCisvKgorICogVmFyaW91cyBmbGFncyByZWxhdGVkIHRvIHF1b3RhY3RsKDIpLiAgT25seSByZWxldmFudCB0byBYRlMgZmlsZXN5c3RlbXMuCisgKi8KKyNkZWZpbmUgWEZTX1FVT1RBX1VEUV9BQ0NUCSgxPDwwKSAgLyogdXNlciBxdW90YSBhY2NvdW50aW5nICovCisjZGVmaW5lIFhGU19RVU9UQV9VRFFfRU5GRAkoMTw8MSkgIC8qIHVzZXIgcXVvdGEgbGltaXRzIGVuZm9yY2VtZW50ICovCisjZGVmaW5lIFhGU19RVU9UQV9HRFFfQUNDVAkoMTw8MikgIC8qIGdyb3VwIHF1b3RhIGFjY291bnRpbmcgKi8KKyNkZWZpbmUgWEZTX1FVT1RBX0dEUV9FTkZECSgxPDwzKSAgLyogZ3JvdXAgcXVvdGEgbGltaXRzIGVuZm9yY2VtZW50ICovCisjZGVmaW5lIFhGU19RVU9UQV9QRFFfQUNDVAkoMTw8NCkgIC8qIHByb2plY3QgcXVvdGEgYWNjb3VudGluZyAqLworI2RlZmluZSBYRlNfUVVPVEFfUERRX0VORkQJKDE8PDUpICAvKiBwcm9qZWN0IHF1b3RhIGxpbWl0cyBlbmZvcmNlbWVudCAqLworCisjZGVmaW5lIFhGU19VU0VSX1FVT1RBCQkoMTw8MCkJLyogdXNlciBxdW90YSB0eXBlICovCisjZGVmaW5lIFhGU19QUk9KX1FVT1RBCQkoMTw8MSkJLyogcHJvamVjdCBxdW90YSB0eXBlICovCisjZGVmaW5lIFhGU19HUk9VUF9RVU9UQQkJKDE8PDIpCS8qIGdyb3VwIHF1b3RhIHR5cGUgKi8KKworLyoKKyAqIGZzX3F1b3RhX3N0YXQgaXMgdGhlIHN0cnVjdCByZXR1cm5lZCBpbiBRX1hHRVRRU1RBVCBmb3IgYSBnaXZlbiBmaWxlIHN5c3RlbS4KKyAqIFByb3ZpZGVzIGEgY2VudHJhbGl6ZWQgd2F5IHRvIGdldCBtZXRhIGluZm9tYXRpb24gYWJvdXQgdGhlIHF1b3RhIHN1YnN5c3RlbS4KKyAqIGVnLiBzcGFjZSB0YWtlbiB1cCBmb3IgdXNlciBhbmQgZ3JvdXAgcXVvdGFzLCBudW1iZXIgb2YgZHF1b3RzIGN1cnJlbnRseQorICogaW5jb3JlLgorICovCisjZGVmaW5lIEZTX1FTVEFUX1ZFUlNJT04JMQkvKiBmc19xdW90YV9zdGF0LnFzX3ZlcnNpb24gKi8KKworLyoKKyAqIFNvbWUgYmFzaWMgaW5mb21hdGlvbiBhYm91dCAncXVvdGEgZmlsZXMnLgorICovCit0eXBlZGVmIHN0cnVjdCBmc19xZmlsZXN0YXQgeworCV9fdTY0CQlxZnNfaW5vOwkvKiBpbm9kZSBudW1iZXIgKi8KKwlfX3U2NAkJcWZzX25ibGtzOwkvKiBudW1iZXIgb2YgQkJzIDUxMi1ieXRlLWJsa3MgKi8KKwlfX3UzMgkJcWZzX25leHRlbnRzOwkvKiBudW1iZXIgb2YgZXh0ZW50cyAqLworfSBmc19xZmlsZXN0YXRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgZnNfcXVvdGFfc3RhdCB7CisJX19zOAkJcXNfdmVyc2lvbjsJLyogdmVyc2lvbiBudW1iZXIgZm9yIGZ1dHVyZSBjaGFuZ2VzICovCisJX191MTYJCXFzX2ZsYWdzOwkvKiBYRlNfUVVPVEFfe1UsUCxHfURRX3tBQ0NULEVORkR9ICovCisJX19zOAkJcXNfcGFkOwkJLyogdW51c2VkICovCisJZnNfcWZpbGVzdGF0X3QJcXNfdXF1b3RhOwkvKiB1c2VyIHF1b3RhIHN0b3JhZ2UgaW5mb3JtYXRpb24gKi8KKwlmc19xZmlsZXN0YXRfdAlxc19ncXVvdGE7CS8qIGdyb3VwIHF1b3RhIHN0b3JhZ2UgaW5mb3JtYXRpb24gKi8KKwlfX3UzMgkJcXNfaW5jb3JlZHFzOwkvKiBudW1iZXIgb2YgZHF1b3RzIGluY29yZSAqLworCV9fczMyCQlxc19idGltZWxpbWl0OyAgLyogbGltaXQgZm9yIGJsa3MgdGltZXIgKi8JCisJX19zMzIJCXFzX2l0aW1lbGltaXQ7ICAvKiBsaW1pdCBmb3IgaW5vZGVzIHRpbWVyICovCQorCV9fczMyCQlxc19ydGJ0aW1lbGltaXQ7LyogbGltaXQgZm9yIHJ0IGJsa3MgdGltZXIgKi8JCisJX191MTYJCXFzX2J3YXJubGltaXQ7CS8qIGxpbWl0IGZvciBudW0gd2FybmluZ3MgKi8KKwlfX3UxNgkJcXNfaXdhcm5saW1pdDsJLyogbGltaXQgZm9yIG51bSB3YXJuaW5ncyAqLworfSBmc19xdW90YV9zdGF0X3Q7CisKKyNlbmRpZgkvKiBfTElOVVhfRFFCTEtfWEZTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZHMxMjg2LmggYi9pbmNsdWRlL2xpbnV4L2RzMTI4Ni5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4OTg5ODYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2RzMTI4Ni5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTksIDIwMDMgUmFsZiBCYWVjaGxlCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX19MSU5VWF9EUzEyODZfSAorI2RlZmluZSBfX0xJTlVYX0RTMTI4Nl9ICisKKyNpbmNsdWRlIDxhc20vZHMxMjg2Lmg+CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiByZWdpc3RlciBzdW1tYXJ5CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgUlRDX0hVTkRSRURUSF9TRUNPTkQJMAorI2RlZmluZSBSVENfU0VDT05EUwkJMQorI2RlZmluZSBSVENfTUlOVVRFUwkJMgorI2RlZmluZSBSVENfTUlOVVRFU19BTEFSTQkzCisjZGVmaW5lIFJUQ19IT1VSUwkJNAorI2RlZmluZSBSVENfSE9VUlNfQUxBUk0JCTUKKyNkZWZpbmUgUlRDX0RBWQkJCTYKKyNkZWZpbmUgUlRDX0RBWV9BTEFSTQkJNworI2RlZmluZSBSVENfREFURQkJOAorI2RlZmluZSBSVENfTU9OVEgJCTkKKyNkZWZpbmUgUlRDX1lFQVIJCTEwCisjZGVmaW5lIFJUQ19DTUQJCQkxMQorI2RlZmluZSBSVENfV0hTRUMJCTEyCisjZGVmaW5lIFJUQ19XU0VDCQkxMworI2RlZmluZSBSVENfVU5VU0VECQkxNAorCisvKiBSVENfKl9hbGFybSBpcyBhbHdheXMgdHJ1ZSBpZiAyIE1TQnMgYXJlIHNldCAqLworIyBkZWZpbmUgUlRDX0FMQVJNX0RPTlRfQ0FSRSAJMHhDMAorCisKKy8qCisgKiBCaXRzIGluIHRoZSBtb250aCByZWdpc3RlcgorICovCisjZGVmaW5lIFJUQ19FT1NDCQkweDgwCisjZGVmaW5lIFJUQ19FU1FXCQkweDQwCisKKy8qCisgKiBCaXRzIGluIHRoZSBDb21tYW5kIHJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgUlRDX1RERgkJCTB4MDEKKyNkZWZpbmUgUlRDX1dBRgkJCTB4MDIKKyNkZWZpbmUgUlRDX1RETQkJCTB4MDQKKyNkZWZpbmUgUlRDX1dBTQkJCTB4MDgKKyNkZWZpbmUgUlRDX1BVX0xWTAkJMHgxMAorI2RlZmluZSBSVENfSUJIX0xPCQkweDIwCisjZGVmaW5lIFJUQ19JUFNXCQkweDQwCisjZGVmaW5lIFJUQ19URQkJCTB4ODAKKworI2VuZGlmIC8qIF9fTElOVVhfRFMxMjg2X0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZHRsay5oIGIvaW5jbHVkZS9saW51eC9kdGxrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg5NmQ5MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvZHRsay5oCkBAIC0wLDAgKzEsMTA0IEBACisjaWYgMAorCisjZGVmaW5lIFRSQUNFX1RYVCh0ZXh0KSBcCisJeyBcCisJICBpZihkdGxrX3RyYWNlKSBcCisJICB7IFwKKwkgICAgY29uc29sZV9wcmludCh0ZXh0KTsgXAorCSAgICBjb25zb2xlX3ByaW50KCJcbiIpOyBcCisJICB9IFwKKwl9CisKKyNkZWZpbmUgVFJBQ0VfQ0hSKGNocikgXAorCXsgXAorCSAgaWYoZHRsa190cmFjZSkgXAorCSAgICBjb25zb2xlX3ByaW50KGNocik7IFwKKwl9IFwKKworI2VuZGlmCisKKyNkZWZpbmUgRFRMS19NSU5PUgkwCisjZGVmaW5lIERUTEtfSU9fRVhURU5UCTB4MDIKKworCS8qIGlvY3RsJ3MgdXNlIG1hZ2ljIG51bWJlciBvZiAweGEzICovCisjZGVmaW5lIERUTEtfSU5URVJST0dBVEUgMHhhMzkwCS8qIGdldCBzZXR0aW5ncyBmcm9tIHRoZSBEb3VibGVUYWxrICovCisjZGVmaW5lIERUTEtfU1RBVFVTIDB4YTM5MQkvKiBnZXQgc3RhdHVzIGZyb20gdGhlIERvdWJsZVRhbGsgKi8KKworCisjZGVmaW5lIERUTEtfQ0xFQVIgMHgxOAkJLyogc3RvcHMgc3BlZWNoICovCisKKyNkZWZpbmUgRFRMS19NQVhfUkVUUklFUyAobG9vcHNfcGVyX2ppZmZ5LygxMDAwMC9IWikpCisKKwkvKiBUVFMgUG9ydCBTdGF0dXMgRmxhZ3MgKi8KKyNkZWZpbmUgVFRTX1JFQURBQkxFICAgICAweDgwCS8qIG1hc2sgZm9yIGJpdCB3aGljaCBpcyBub256ZXJvIGlmIGEKKwkJCQkgICBieXRlIGNhbiBiZSByZWFkIGZyb20gdGhlIFRUUyBwb3J0ICovCisjZGVmaW5lIFRUU19TUEVBS0lORyAgICAgMHg0MAkvKiBtYXNrIGZvciBTWU5DIGJpdCwgd2hpY2ggaXMgbm9uemVybworCQkJCSAgIHdoaWxlIERvdWJsZVRhbGsgaXMgcHJvZHVjaW5nCisJCQkJICAgb3V0cHV0IHdpdGggVFRTLCBQQ00gb3IgQ1ZTRAorCQkJCSAgIHN5bnRoZXNpemVycyBvciB0b25lIGdlbmVyYXRvcnMKKwkJCQkgICAodGhhdCBpcywgYWxsIGJ1dCBMUEMpICovCisjZGVmaW5lIFRUU19TUEVBS0lORzIgICAgMHgyMAkvKiBtYXNrIGZvciBTWU5DMiBiaXQsCisJCQkJICAgd2hpY2ggZmFsbHMgdG8gemVybyB1cCB0byAwLjQgc2VjCisJCQkJICAgYmVmb3JlIHNwZWVjaCBzdG9wcyAqLworI2RlZmluZSBUVFNfV1JJVEFCTEUgICAgIDB4MTAJLyogbWFzayBmb3IgUkRZIGJpdCwgd2hpY2ggd2hlbiBzZXQgdG8KKyAgICAgICAgICAgICAJCQkgICAxLCBpbmRpY2F0ZXMgdGhlIFRUUyBwb3J0IGlzIHJlYWR5CisgICAgICAgICAgICAgCQkJICAgdG8gYWNjZXB0IGEgYnl0ZSBvZiBkYXRhLiAgVGhlIFJEWQorICAgICAgICAgICAgIAkJCSAgIGJpdCBnb2VzIHplcm8gMi0zIHVzZWMgYWZ0ZXIKKyAgICAgICAgICAgICAJCQkgICB3cml0aW5nLCBhbmQgZ29lcyAxIGFnYWluIDE4MC0xOTAKKyAgICAgICAgICAgICAJCQkgICB1c2VjIGxhdGVyLiAqLworI2RlZmluZSBUVFNfQUxNT1NUX0ZVTEwgIDB4MDgJLyogbWFzayBmb3IgQUYgYml0OiBXaGVuIHNldCB0byAxLAorCQkJCSAgIGluZGljYXRlcyB0aGF0IGxlc3MgdGhhbiAzMDAgZnJlZQorCQkJCSAgIGJ5dGVzIGFyZSBhdmFpbGFibGUgaW4gdGhlIFRUUworCQkJCSAgIGlucHV0IGJ1ZmZlci4gQUYgaXMgYWx3YXlzIDAgaW4gdGhlCisJCQkJICAgUENNLCBUR04gYW5kIENWU0QgbW9kZXMuICovCisjZGVmaW5lIFRUU19BTE1PU1RfRU1QVFkgMHgwNAkvKiBtYXNrIGZvciBBRSBiaXQ6IFdoZW4gc2V0IHRvIDEsCisJCQkJICAgaW5kaWNhdGVzIHRoYXQgbGVzcyB0aGFuIDMwMCBieXRlcworCQkJCSAgIG9mIGRhdGEgcmVtYWluIGluIERvdWJsZVRhbGsncworCQkJCSAgIGlucHV0IChUVFMgb3IgUENNKSBidWZmZXIuIEFFIGlzCisJCQkJICAgYWx3YXlzIDEgaW4gdGhlIFRHTiBhbmQgQ1ZTRAorCQkJCSAgIG1vZGVzLiAqLworCisJLyogTFBDIHNwZWFrIGNvbW1hbmRzICovCisjZGVmaW5lIExQQ181MjIwX05PUk1BTCAweDYwCS8qIDUyMjAgZm9ybWF0IGRlY29kaW5nIHRhYmxlLCBub3JtYWwgcmF0ZSAqLworI2RlZmluZSBMUENfNTIyMF9GQVNUIDB4NjQJLyogNTIyMCBmb3JtYXQgZGVjb2RpbmcgdGFibGUsIGZhc3QgcmF0ZSAqLworI2RlZmluZSBMUENfRDZfTk9STUFMIDB4MjAJLyogRDYgZm9ybWF0IGRlY29kaW5nIHRhYmxlLCBub3JtYWwgcmF0ZSAqLworI2RlZmluZSBMUENfRDZfRkFTVCAweDI0CS8qIEQ2IGZvcm1hdCBkZWNvZGluZyB0YWJsZSwgZmFzdCByYXRlICovCisKKwkvKiBMUEMgUG9ydCBTdGF0dXMgRmxhZ3MgKHZhbGlkIG9ubHkgYWZ0ZXIgb25lIG9mIHRoZSBMUEMKKyAgICAgICAgICAgc3BlYWsgY29tbWFuZHMpICovCisjZGVmaW5lIExQQ19TUEVBS0lORyAgICAgMHg4MAkvKiBtYXNrIGZvciBUUyBiaXQ6IFdoZW4gc2V0IHRvIDEsCisJCQkJICAgaW5kaWNhdGVzIHRoZSBMUEMgc3ludGhlc2l6ZXIgaXMKKwkJCQkgICBwcm9kdWNpbmcgc3BlZWNoLiovCisjZGVmaW5lIExQQ19CVUZGRVJfTE9XICAgMHg0MAkvKiBtYXNrIGZvciBCTCBiaXQ6IFdoZW4gc2V0IHRvIDEsCisJCQkJICAgaW5kaWNhdGVzIHRoYXQgdGhlIGhhcmR3YXJlIExQQworCQkJCSAgIGRhdGEgYnVmZmVyIGhhcyBsZXNzIHRoYW4gMzAgYnl0ZXMKKwkJCQkgICByZW1haW5pbmcuIChUb3RhbCBpbnRlcm5hbCBidWZmZXIKKwkJCQkgICBzaXplID0gNDA5NiBieXRlcy4pICovCisjZGVmaW5lIExQQ19CVUZGRVJfRU1QVFkgMHgyMAkvKiBtYXNrIGZvciBCRSBiaXQ6IFdoZW4gc2V0IHRvIDEsCisJCQkJICAgaW5kaWNhdGVzIHRoYXQgdGhlIExQQyBkYXRhIGJ1ZmZlcgorCQkJCSAgIHJhbiBvdXQgb2YgZGF0YSAoZXJyb3IgY29uZGl0aW9uIGlmCisJCQkJICAgVFMgaXMgYWxzbyAxKS4gICovCisKKwkJCQkvKiBkYXRhIHJldHVybmVkIGJ5IEludGVycm9nYXRlIGNvbW1hbmQgKi8KK3N0cnVjdCBkdGxrX3NldHRpbmdzCit7CisgIHVuc2lnbmVkIHNob3J0IHNlcmlhbF9udW1iZXI7CS8qIDAtN0ZoOjAtN0ZoICovCisgIHVuc2lnbmVkIGNoYXIgcm9tX3ZlcnNpb25bMjRdOyAvKiBudWxsIHRlcm1pbmF0ZWQgc3RyaW5nICovCisgIHVuc2lnbmVkIGNoYXIgbW9kZTsJCS8qIDA9Q2hhcmFjdGVyOyAxPVBob25lbWU7IDI9VGV4dCAqLworICB1bnNpZ25lZCBjaGFyIHB1bmNfbGV2ZWw7CS8qIG5COyAwLTcgKi8KKyAgdW5zaWduZWQgY2hhciBmb3JtYW50X2ZyZXE7CS8qIG5GOyAwLTkgKi8KKyAgdW5zaWduZWQgY2hhciBwaXRjaDsJCS8qIG5QOyAwLTk5ICovCisgIHVuc2lnbmVkIGNoYXIgc3BlZWQ7CQkvKiBuUzsgMC05ICovCisgIHVuc2lnbmVkIGNoYXIgdm9sdW1lOwkJLyogblY7IDAtOSAqLworICB1bnNpZ25lZCBjaGFyIHRvbmU7CQkvKiBuWDsgMC0yICovCisgIHVuc2lnbmVkIGNoYXIgZXhwcmVzc2lvbjsJLyogbkU7IDAtOSAqLworICB1bnNpZ25lZCBjaGFyIGV4dF9kaWN0X2xvYWRlZDsgLyogMT1leGNlcHRpb24gZGljdGlvbmFyeSBsb2FkZWQgKi8KKyAgdW5zaWduZWQgY2hhciBleHRfZGljdF9zdGF0dXM7IC8qIDE9ZXhjZXB0aW9uIGRpY3Rpb25hcnkgZW5hYmxlZCAqLworICB1bnNpZ25lZCBjaGFyIGZyZWVfcmFtOwkvKiAjIHBhZ2VzICh0cnVuY2F0ZWQpIHJlbWFpbmluZyBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCBidWZmZXIgKi8KKyAgdW5zaWduZWQgY2hhciBhcnRpY3VsYXRpb247CS8qIG5BOyAwLTkgKi8KKyAgdW5zaWduZWQgY2hhciByZXZlcmI7CQkvKiBuUjsgMC05ICovCisgIHVuc2lnbmVkIGNoYXIgZW9iOwkJLyogN0ZoIHZhbHVlIGluZGljYXRpbmcgZW5kIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlciBibG9jayAqLworICB1bnNpZ25lZCBjaGFyIGhhc19pbmRleGluZzsJLyogbm9uemVybyBpZiBpbmRleGluZyBpcyBpbXBsZW1lbnRlZCAqLworfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZHZiL2F1ZGlvLmggYi9pbmNsdWRlL2xpbnV4L2R2Yi9hdWRpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjMzE0NDQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2R2Yi9hdWRpby5oCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICogYXVkaW8uaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBSYWxwaCAgTWV0emxlciA8cmFscGhAY29udmVyZ2VuY2UuZGU+CisgKiAgICAgICAgICAgICAgICAgICYgTWFyY3VzIE1ldHpsZXIgPG1hcmN1c0Bjb252ZXJnZW5jZS5kZT4KKyAqICAgICAgICAgICAgICAgICAgICBmb3IgY29udmVyZ2VuY2UgaW50ZWdyYXRlZCBtZWRpYSBHbWJICisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgTGVzc2VyIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqLworCisjaWZuZGVmIF9EVkJBVURJT19IXworI2RlZmluZSBfRFZCQVVESU9fSF8KKworI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNlbmRpZgorCisKK3R5cGVkZWYgZW51bSB7CisgICAgICAgIEFVRElPX1NPVVJDRV9ERU1VWCwgLyogU2VsZWN0IHRoZSBkZW11eCBhcyB0aGUgbWFpbiBzb3VyY2UgKi8KKwlBVURJT19TT1VSQ0VfTUVNT1JZIC8qIFNlbGVjdCBpbnRlcm5hbCBtZW1vcnkgYXMgdGhlIG1haW4gc291cmNlICovCit9IGF1ZGlvX3N0cmVhbV9zb3VyY2VfdDsKKworCit0eXBlZGVmIGVudW0geworCUFVRElPX1NUT1BQRUQsICAgICAgLyogRGV2aWNlIGlzIHN0b3BwZWQgKi8KKyAgICAgICAgQVVESU9fUExBWUlORywgICAgICAvKiBEZXZpY2UgaXMgY3VycmVudGx5IHBsYXlpbmcgKi8KKwlBVURJT19QQVVTRUQgICAgICAgIC8qIERldmljZSBpcyBwYXVzZWQgKi8KK30gYXVkaW9fcGxheV9zdGF0ZV90OworCisKK3R5cGVkZWYgZW51bSB7CisgICAgICAgIEFVRElPX1NURVJFTywKKyAgICAgICAgQVVESU9fTU9OT19MRUZULAorCUFVRElPX01PTk9fUklHSFQKK30gYXVkaW9fY2hhbm5lbF9zZWxlY3RfdDsKKworCit0eXBlZGVmIHN0cnVjdCBhdWRpb19taXhlciB7CisgICAgICAgIHVuc2lnbmVkIGludCB2b2x1bWVfbGVmdDsKKyAgICAgICAgdW5zaWduZWQgaW50IHZvbHVtZV9yaWdodDsKKyAgLy8gd2hhdCBlbHNlIGRvIHdlIG5lZWQ/IGJhc3MsIHBhc3MtdGhyb3VnaCwgLi4uCit9IGF1ZGlvX21peGVyX3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QgYXVkaW9fc3RhdHVzIHsKKyAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICBBVl9zeW5jX3N0YXRlOyAgLyogc3luYyBhdWRpbyBhbmQgdmlkZW8/ICovCisgICAgICAgIGludCAgICAgICAgICAgICAgICAgICAgbXV0ZV9zdGF0ZTsgICAgIC8qIGF1ZGlvIGlzIG11dGVkICovCisgICAgICAgIGF1ZGlvX3BsYXlfc3RhdGVfdCAgICAgcGxheV9zdGF0ZTsgICAgIC8qIGN1cnJlbnQgcGxheWJhY2sgc3RhdGUgKi8KKyAgICAgICAgYXVkaW9fc3RyZWFtX3NvdXJjZV90ICBzdHJlYW1fc291cmNlOyAgLyogY3VycmVudCBzdHJlYW0gc291cmNlICovCisgICAgICAgIGF1ZGlvX2NoYW5uZWxfc2VsZWN0X3QgY2hhbm5lbF9zZWxlY3Q7IC8qIGN1cnJlbnRseSBzZWxlY3RlZCBjaGFubmVsICovCisgICAgICAgIGludCAgICAgICAgICAgICAgICAgICAgYnlwYXNzX21vZGU7ICAgIC8qIHBhc3Mgb24gYXVkaW8gZGF0YSB0byAqLworCWF1ZGlvX21peGVyX3QJICAgICAgIG1peGVyX3N0YXRlOyAgICAvKiBjdXJyZW50IG1peGVyIHN0YXRlICovCit9IGF1ZGlvX3N0YXR1c190OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNlcGFyYXRlIGRlY29kZXIgaGFyZHdhcmUgKi8KKworCit0eXBlZGVmCitzdHJ1Y3QgYXVkaW9fa2FyYW9rZXsgIC8qIGlmIFZvY2FsMSBvciBWb2NhbDIgYXJlIG5vbi16ZXJvLCB0aGV5IGdldCBtaXhlZCAgKi8KKwlpbnQgdm9jYWwxOyAgICAvKiBpbnRvIGxlZnQgYW5kIHJpZ2h0IHQgYXQgNzAlIGVhY2ggKi8KKwlpbnQgdm9jYWwyOyAgICAvKiBpZiBib3RoLCBWb2NhbDEgYW5kIFZvY2FsMiBhcmUgbm9uLXplcm8sIFZvY2FsMSBnZXRzKi8KKwlpbnQgbWVsb2R5OyAgICAvKiBtaXhlZCBpbnRvIHRoZSBsZWZ0IGNoYW5uZWwgYW5kICovCisgICAgICAgICAgICAgICAgICAgICAgIC8qIFZvY2FsMiBpbnRvIHRoZSByaWdodCBjaGFubmVsIGF0IDEwMCUgZWFjaC4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgLyogaWYgTWVsb2R5IGlzIG5vbi16ZXJvLCB0aGUgbWVsb2R5IGNoYW5uZWwgZ2V0cyBtaXhlZCovCit9IGF1ZGlvX2thcmFva2VfdDsgICAgIC8qIGludG8gbGVmdCBhbmQgcmlnaHQgICovCisKKwordHlwZWRlZiB1aW50MTZfdCBhdWRpb19hdHRyaWJ1dGVzX3Q7CisvKiAgIGJpdHM6IGRlc2NyLiAqLworLyogICAxNS0xMyBhdWRpbyBjb2RpbmcgbW9kZSAoMD1hYzMsIDI9bXBlZzEsIDM9bXBlZzJleHQsIDQ9TFBDTSwgNj1EVFMsICovCisvKiAgIDEyICAgIG11bHRpY2hhbm5lbCBleHRlbnNpb24gKi8KKy8qICAgMTEtMTAgYXVkaW8gdHlwZSAoMD1ub3Qgc3BlYywgMT1sYW5ndWFnZSBpbmNsdWRlZCkgKi8KKy8qICAgIDktIDggYXVkaW8gYXBwbGljYXRpb24gbW9kZSAoMD1ub3Qgc3BlYywgMT1rYXJhb2tlLCAyPXN1cnJvdW5kKSAqLworLyogICAgNy0gNiBRdWFudGl6YXRpb24gLyBEUkMgKG1wZWcgYXVkaW86IDE9RFJDIGV4aXN0cykobHBjbTogMD0xNmJpdCwgICovCisvKiAgICA1LSA0IFNhbXBsZSBmcmVxdWVuY3kgZnMgKDA9NDhrSHosIDE9OTZrSHopICovCisvKiAgICAyLSAwIG51bWJlciBvZiBhdWRpbyBjaGFubmVscyAobisxIGNoYW5uZWxzKSAqLworCisKKy8qIGZvciBHRVRfQ0FQQUJJTElUSUVTIGFuZCBTRVRfRk9STUFULCB0aGUgbGF0dGVyIHNob3VsZCBvbmx5IHNldCBvbmUgYml0ICovCisjZGVmaW5lIEFVRElPX0NBUF9EVFMgICAgMQorI2RlZmluZSBBVURJT19DQVBfTFBDTSAgIDIKKyNkZWZpbmUgQVVESU9fQ0FQX01QMSAgICA0CisjZGVmaW5lIEFVRElPX0NBUF9NUDIgICAgOAorI2RlZmluZSBBVURJT19DQVBfTVAzICAgMTYKKyNkZWZpbmUgQVVESU9fQ0FQX0FBQyAgIDMyCisjZGVmaW5lIEFVRElPX0NBUF9PR0cgICA2NAorI2RlZmluZSBBVURJT19DQVBfU0REUyAxMjgKKyNkZWZpbmUgQVVESU9fQ0FQX0FDMyAgMjU2CisKKyNkZWZpbmUgQVVESU9fU1RPUCAgICAgICAgICAgICAgICAgX0lPKCdvJywgMSkKKyNkZWZpbmUgQVVESU9fUExBWSAgICAgICAgICAgICAgICAgX0lPKCdvJywgMikKKyNkZWZpbmUgQVVESU9fUEFVU0UgICAgICAgICAgICAgICAgX0lPKCdvJywgMykKKyNkZWZpbmUgQVVESU9fQ09OVElOVUUgICAgICAgICAgICAgX0lPKCdvJywgNCkKKyNkZWZpbmUgQVVESU9fU0VMRUNUX1NPVVJDRSAgICAgICAgX0lPKCdvJywgNSkKKyNkZWZpbmUgQVVESU9fU0VUX01VVEUgICAgICAgICAgICAgX0lPKCdvJywgNikKKyNkZWZpbmUgQVVESU9fU0VUX0FWX1NZTkMgICAgICAgICAgX0lPKCdvJywgNykKKyNkZWZpbmUgQVVESU9fU0VUX0JZUEFTU19NT0RFICAgICAgX0lPKCdvJywgOCkKKyNkZWZpbmUgQVVESU9fQ0hBTk5FTF9TRUxFQ1QgICAgICAgX0lPKCdvJywgOSkKKyNkZWZpbmUgQVVESU9fR0VUX1NUQVRVUyAgICAgICAgICAgX0lPUignbycsIDEwLCBhdWRpb19zdGF0dXNfdCkKKworI2RlZmluZSBBVURJT19HRVRfQ0FQQUJJTElUSUVTICAgICBfSU9SKCdvJywgMTEsIHVuc2lnbmVkIGludCkKKyNkZWZpbmUgQVVESU9fQ0xFQVJfQlVGRkVSICAgICAgICAgX0lPKCdvJywgIDEyKQorI2RlZmluZSBBVURJT19TRVRfSUQgICAgICAgICAgICAgICBfSU8oJ28nLCAxMykKKyNkZWZpbmUgQVVESU9fU0VUX01JWEVSICAgICAgICAgICAgX0lPVygnbycsIDE0LCBhdWRpb19taXhlcl90KQorI2RlZmluZSBBVURJT19TRVRfU1RSRUFNVFlQRSAgICAgICBfSU8oJ28nLCAxNSkKKyNkZWZpbmUgQVVESU9fU0VUX0VYVF9JRCAgICAgICAgICAgX0lPKCdvJywgMTYpCisjZGVmaW5lIEFVRElPX1NFVF9BVFRSSUJVVEVTICAgICAgIF9JT1coJ28nLCAxNywgYXVkaW9fYXR0cmlidXRlc190KQorI2RlZmluZSBBVURJT19TRVRfS0FSQU9LRSAgICAgICAgICBfSU9XKCdvJywgMTgsIGF1ZGlvX2thcmFva2VfdCkKKworI2VuZGlmIC8qIF9EVkJBVURJT19IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kdmIvY2EuaCBiL2luY2x1ZGUvbGludXgvZHZiL2NhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU4YWYwYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvZHZiL2NhLmgKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIGNhLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgUmFscGggIE1ldHpsZXIgPHJhbHBoQGNvbnZlcmdlbmNlLmRlPgorICogICAgICAgICAgICAgICAgICAmIE1hcmN1cyBNZXR6bGVyIDxtYXJjdXNAY29udmVyZ2VuY2UuZGU+CisgKiAgICAgICAgICAgICAgICAgICAgZm9yIGNvbnZlcmdlbmNlIGludGVncmF0ZWQgbWVkaWEgR21iSAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIExlc3NlciBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMQorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBfRFZCQ0FfSF8KKyNkZWZpbmUgX0RWQkNBX0hfCisKKy8qIHNsb3QgaW50ZXJmYWNlIHR5cGVzIGFuZCBpbmZvICovCisKK3R5cGVkZWYgc3RydWN0IGNhX3Nsb3RfaW5mbyB7CisgICAgICAgIGludCBudW07ICAgICAgICAgICAgICAgLyogc2xvdCBudW1iZXIgKi8KKworICAgICAgICBpbnQgdHlwZTsgICAgICAgICAgICAgIC8qIENBIGludGVyZmFjZSB0aGlzIHNsb3Qgc3VwcG9ydHMgKi8KKyNkZWZpbmUgQ0FfQ0kgICAgICAgICAgICAxICAgICAvKiBDSSBoaWdoIGxldmVsIGludGVyZmFjZSAqLworI2RlZmluZSBDQV9DSV9MSU5LICAgICAgIDIgICAgIC8qIENJIGxpbmsgbGF5ZXIgbGV2ZWwgaW50ZXJmYWNlICovCisjZGVmaW5lIENBX0NJX1BIWVMgICAgICAgNCAgICAgLyogQ0kgcGh5c2ljYWwgbGF5ZXIgbGV2ZWwgaW50ZXJmYWNlICovCisjZGVmaW5lIENBX0RFU0NSICAgICAgICAgOCAgICAgLyogYnVpbHQtaW4gZGVzY3JhbWJsZXIgKi8KKyNkZWZpbmUgQ0FfU0MgICAgICAgICAgMTI4ICAgICAvKiBzaW1wbGUgc21hcnQgY2FyZCBpbnRlcmZhY2UgKi8KKworICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3M7CisjZGVmaW5lIENBX0NJX01PRFVMRV9QUkVTRU5UIDEgLyogbW9kdWxlIChvciBjYXJkKSBpbnNlcnRlZCAqLworI2RlZmluZSBDQV9DSV9NT0RVTEVfUkVBRFkgICAyCit9IGNhX3Nsb3RfaW5mb190OworCisKKy8qIGRlc2NyYW1ibGVyIHR5cGVzIGFuZCBpbmZvICovCisKK3R5cGVkZWYgc3RydWN0IGNhX2Rlc2NyX2luZm8geworICAgICAgICB1bnNpZ25lZCBpbnQgbnVtOyAgICAgICAgICAvKiBudW1iZXIgb2YgYXZhaWxhYmxlIGRlc2NyYW1ibGVycyAoa2V5cykgKi8KKyAgICAgICAgdW5zaWduZWQgaW50IHR5cGU7ICAgICAgICAgLyogdHlwZSBvZiBzdXBwb3J0ZWQgc2NyYW1ibGluZyBzeXN0ZW0gKi8KKyNkZWZpbmUgQ0FfRUNEICAgICAgICAgICAxCisjZGVmaW5lIENBX05EUyAgICAgICAgICAgMgorI2RlZmluZSBDQV9EU1MgICAgICAgICAgIDQKK30gY2FfZGVzY3JfaW5mb190OworCit0eXBlZGVmIHN0cnVjdCBjYV9jYXBzIHsKKyAgICAgICAgdW5zaWduZWQgaW50IHNsb3RfbnVtOyAgICAgLyogdG90YWwgbnVtYmVyIG9mIENBIGNhcmQgYW5kIG1vZHVsZSBzbG90cyAqLworICAgICAgICB1bnNpZ25lZCBpbnQgc2xvdF90eXBlOyAgICAvKiBPUiBvZiBhbGwgc3VwcG9ydGVkIHR5cGVzICovCisgICAgICAgIHVuc2lnbmVkIGludCBkZXNjcl9udW07ICAgIC8qIHRvdGFsIG51bWJlciBvZiBkZXNjcmFtYmxlciBzbG90cyAoa2V5cykgKi8KKyAgICAgICAgdW5zaWduZWQgaW50IGRlc2NyX3R5cGU7ICAgLyogT1Igb2YgYWxsIHN1cHBvcnRlZCB0eXBlcyAqLworfSBjYV9jYXBzX3Q7CisKKy8qIGEgbWVzc2FnZSB0by9mcm9tIGEgQ0ktQ0FNICovCit0eXBlZGVmIHN0cnVjdCBjYV9tc2cgeworICAgICAgICB1bnNpZ25lZCBpbnQgaW5kZXg7CisgICAgICAgIHVuc2lnbmVkIGludCB0eXBlOworICAgICAgICB1bnNpZ25lZCBpbnQgbGVuZ3RoOworICAgICAgICB1bnNpZ25lZCBjaGFyIG1zZ1syNTZdOworfSBjYV9tc2dfdDsKKwordHlwZWRlZiBzdHJ1Y3QgY2FfZGVzY3IgeworICAgICAgICB1bnNpZ25lZCBpbnQgaW5kZXg7CisgICAgICAgIHVuc2lnbmVkIGludCBwYXJpdHk7CS8qIDAgPT0gZXZlbiwgMSA9PSBvZGQgKi8KKyAgICAgICAgdW5zaWduZWQgY2hhciBjd1s4XTsKK30gY2FfZGVzY3JfdDsKKwordHlwZWRlZiBzdHJ1Y3QgY2FfcGlkIHsKKyAgICAgICAgdW5zaWduZWQgaW50IHBpZDsKKyAgICAgICAgaW50IGluZGV4OwkJLyogLTEgPT0gZGlzYWJsZSovCit9IGNhX3BpZF90OworCisjZGVmaW5lIENBX1JFU0VUICAgICAgICAgIF9JTygnbycsIDEyOCkKKyNkZWZpbmUgQ0FfR0VUX0NBUCAgICAgICAgX0lPUignbycsIDEyOSwgY2FfY2Fwc190KQorI2RlZmluZSBDQV9HRVRfU0xPVF9JTkZPICBfSU9SKCdvJywgMTMwLCBjYV9zbG90X2luZm9fdCkKKyNkZWZpbmUgQ0FfR0VUX0RFU0NSX0lORk8gX0lPUignbycsIDEzMSwgY2FfZGVzY3JfaW5mb190KQorI2RlZmluZSBDQV9HRVRfTVNHICAgICAgICBfSU9SKCdvJywgMTMyLCBjYV9tc2dfdCkKKyNkZWZpbmUgQ0FfU0VORF9NU0cgICAgICAgX0lPVygnbycsIDEzMywgY2FfbXNnX3QpCisjZGVmaW5lIENBX1NFVF9ERVNDUiAgICAgIF9JT1coJ28nLCAxMzQsIGNhX2Rlc2NyX3QpCisjZGVmaW5lIENBX1NFVF9QSUQgICAgICAgIF9JT1coJ28nLCAxMzUsIGNhX3BpZF90KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZHZiL2RteC5oIGIvaW5jbHVkZS9saW51eC9kdmIvZG14LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2UzZjgyOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvZHZiL2RteC5oCkBAIC0wLDAgKzEsMTgwIEBACisvKiAKKyAqIGRteC5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwIE1hcmN1cyBNZXR6bGVyIDxtYXJjdXNAY29udmVyZ2VuY2UuZGU+CisgKiAgICAgICAgICAgICAgICAgICYgUmFscGggIE1ldHpsZXIgPHJhbHBoQGNvbnZlcmdlbmNlLmRlPgorICogICAgICAgICAgICAgICAgICAgIGZvciBjb252ZXJnZW5jZSBpbnRlZ3JhdGVkIG1lZGlhIEdtYkgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgX0RWQkRNWF9IXworI2RlZmluZSBfRFZCRE1YX0hfCisKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2Vsc2UKKyNpbmNsdWRlIDx0aW1lLmg+CisjZW5kaWYKKworCisjZGVmaW5lIERNWF9GSUxURVJfU0laRSAxNgorCit0eXBlZGVmIGVudW0KK3sKKwlETVhfT1VUX0RFQ09ERVIsIC8qIFN0cmVhbWluZyBkaXJlY3RseSB0byBkZWNvZGVyLiAqLworCURNWF9PVVRfVEFQLCAgICAgLyogT3V0cHV0IGdvaW5nIHRvIGEgbWVtb3J5IGJ1ZmZlciAqLworCSAgICAgICAgICAgICAgICAgLyogKHRvIGJlIHJldHJpZXZlZCB2aWEgdGhlIHJlYWQgY29tbWFuZCkuKi8KKwlETVhfT1VUX1RTX1RBUCAgIC8qIE91dHB1dCBtdWx0aXBsZXhlZCBpbnRvIGEgbmV3IFRTICAqLworCSAgICAgICAgICAgICAgICAgLyogKHRvIGJlIHJldHJpZXZlZCBieSByZWFkaW5nIGZyb20gdGhlICovCisJICAgICAgICAgICAgICAgICAvKiBsb2dpY2FsIERWUiBkZXZpY2UpLiAgICAgICAgICAgICAgICAgKi8KK30gZG14X291dHB1dF90OworCisKK3R5cGVkZWYgZW51bQoreworCURNWF9JTl9GUk9OVEVORCwgLyogSW5wdXQgZnJvbSBhIGZyb250LWVuZCBkZXZpY2UuICAqLworCURNWF9JTl9EVlIgICAgICAgLyogSW5wdXQgZnJvbSB0aGUgbG9naWNhbCBEVlIgZGV2aWNlLiAgKi8KK30gZG14X2lucHV0X3Q7CisKKwordHlwZWRlZiBlbnVtCit7CisgICAgICAgIERNWF9QRVNfQVVESU8wLAorCURNWF9QRVNfVklERU8wLAorCURNWF9QRVNfVEVMRVRFWFQwLAorCURNWF9QRVNfU1VCVElUTEUwLAorCURNWF9QRVNfUENSMCwKKworICAgICAgICBETVhfUEVTX0FVRElPMSwKKwlETVhfUEVTX1ZJREVPMSwKKwlETVhfUEVTX1RFTEVURVhUMSwKKwlETVhfUEVTX1NVQlRJVExFMSwKKwlETVhfUEVTX1BDUjEsCisKKyAgICAgICAgRE1YX1BFU19BVURJTzIsCisJRE1YX1BFU19WSURFTzIsCisJRE1YX1BFU19URUxFVEVYVDIsCisJRE1YX1BFU19TVUJUSVRMRTIsCisJRE1YX1BFU19QQ1IyLAorCisgICAgICAgIERNWF9QRVNfQVVESU8zLAorCURNWF9QRVNfVklERU8zLAorCURNWF9QRVNfVEVMRVRFWFQzLAorCURNWF9QRVNfU1VCVElUTEUzLAorCURNWF9QRVNfUENSMywKKworCURNWF9QRVNfT1RIRVIKK30gZG14X3Blc190eXBlX3Q7CisKKyNkZWZpbmUgRE1YX1BFU19BVURJTyAgICBETVhfUEVTX0FVRElPMAorI2RlZmluZSBETVhfUEVTX1ZJREVPICAgIERNWF9QRVNfVklERU8wCisjZGVmaW5lIERNWF9QRVNfVEVMRVRFWFQgRE1YX1BFU19URUxFVEVYVDAKKyNkZWZpbmUgRE1YX1BFU19TVUJUSVRMRSBETVhfUEVTX1NVQlRJVExFMAorI2RlZmluZSBETVhfUEVTX1BDUiAgICAgIERNWF9QRVNfUENSMAorCisKK3R5cGVkZWYgZW51bQoreworICAgICAgICBETVhfU0NSQU1CTElOR19FViwKKyAgICAgICAgRE1YX0ZST05URU5EX0VWCit9IGRteF9ldmVudF90OworCisKK3R5cGVkZWYgZW51bQoreworCURNWF9TQ1JBTUJMSU5HX09GRiwKKwlETVhfU0NSQU1CTElOR19PTgorfSBkbXhfc2NyYW1ibGluZ19zdGF0dXNfdDsKKworCit0eXBlZGVmIHN0cnVjdCBkbXhfZmlsdGVyCit7CisJX191OCAgZmlsdGVyW0RNWF9GSUxURVJfU0laRV07CisJX191OCAgbWFza1tETVhfRklMVEVSX1NJWkVdOworCV9fdTggIG1vZGVbRE1YX0ZJTFRFUl9TSVpFXTsKK30gZG14X2ZpbHRlcl90OworCisKK3N0cnVjdCBkbXhfc2N0X2ZpbHRlcl9wYXJhbXMKK3sKKwlfX3UxNiAgICAgICAgICBwaWQ7CisJZG14X2ZpbHRlcl90ICAgZmlsdGVyOworCV9fdTMyICAgICAgICAgIHRpbWVvdXQ7CisJX191MzIgICAgICAgICAgZmxhZ3M7CisjZGVmaW5lIERNWF9DSEVDS19DUkMgICAgICAgMQorI2RlZmluZSBETVhfT05FU0hPVCAgICAgICAgIDIKKyNkZWZpbmUgRE1YX0lNTUVESUFURV9TVEFSVCA0CisjZGVmaW5lIERNWF9LRVJORUxfQ0xJRU5UICAgMHg4MDAwCit9OworCisKK3N0cnVjdCBkbXhfcGVzX2ZpbHRlcl9wYXJhbXMKK3sKKwlfX3UxNiAgICAgICAgICBwaWQ7CisJZG14X2lucHV0X3QgICAgaW5wdXQ7CisJZG14X291dHB1dF90ICAgb3V0cHV0OworCWRteF9wZXNfdHlwZV90IHBlc190eXBlOworCV9fdTMyICAgICAgICAgIGZsYWdzOworfTsKKworCitzdHJ1Y3QgZG14X2V2ZW50Cit7CisJZG14X2V2ZW50X3QgICAgICAgICBldmVudDsKKwl0aW1lX3QgICAgICAgICAgICAgIHRpbWVTdGFtcDsKKwl1bmlvbgorCXsKKwkJZG14X3NjcmFtYmxpbmdfc3RhdHVzX3Qgc2NyYW1ibGluZzsKKwl9IHU7Cit9OworCit0eXBlZGVmIHN0cnVjdCBkbXhfY2FwcyB7CisJX191MzIgY2FwczsKKwlpbnQgbnVtX2RlY29kZXJzOworfSBkbXhfY2Fwc190OworCit0eXBlZGVmIGVudW0geworCURNWF9TT1VSQ0VfRlJPTlQwID0gMCwKKwlETVhfU09VUkNFX0ZST05UMSwKKwlETVhfU09VUkNFX0ZST05UMiwKKwlETVhfU09VUkNFX0ZST05UMywKKwlETVhfU09VUkNFX0RWUjAgICA9IDE2LAorCURNWF9TT1VSQ0VfRFZSMSwKKwlETVhfU09VUkNFX0RWUjIsCisJRE1YX1NPVVJDRV9EVlIzCit9IGRteF9zb3VyY2VfdDsKKworc3RydWN0IGRteF9zdGMgeworCXVuc2lnbmVkIGludCBudW07CS8qIGlucHV0IDogd2hpY2ggU1RDPyAwLi5OICovCisJdW5zaWduZWQgaW50IGJhc2U7CS8qIG91dHB1dDogZGl2aXNvciBmb3Igc3RjIHRvIGdldCA5MCBrSHogY2xvY2sgKi8KKwlfX3U2NCBzdGM7CQkvKiBvdXRwdXQ6IHN0YyBpbiAnYmFzZScqOTAga0h6IHVuaXRzICovCit9OworCisKKyNkZWZpbmUgRE1YX1NUQVJUICAgICAgICAgICAgICAgIF9JTygnbycsIDQxKQorI2RlZmluZSBETVhfU1RPUCAgICAgICAgICAgICAgICAgX0lPKCdvJywgNDIpCisjZGVmaW5lIERNWF9TRVRfRklMVEVSICAgICAgICAgICBfSU9XKCdvJywgNDMsIHN0cnVjdCBkbXhfc2N0X2ZpbHRlcl9wYXJhbXMpCisjZGVmaW5lIERNWF9TRVRfUEVTX0ZJTFRFUiAgICAgICBfSU9XKCdvJywgNDQsIHN0cnVjdCBkbXhfcGVzX2ZpbHRlcl9wYXJhbXMpCisjZGVmaW5lIERNWF9TRVRfQlVGRkVSX1NJWkUgICAgICBfSU8oJ28nLCA0NSkKKyNkZWZpbmUgRE1YX0dFVF9FVkVOVCAgICAgICAgICAgIF9JT1IoJ28nLCA0Niwgc3RydWN0IGRteF9ldmVudCkKKyNkZWZpbmUgRE1YX0dFVF9QRVNfUElEUyAgICAgICAgIF9JT1IoJ28nLCA0NywgX191MTZbNV0pCisjZGVmaW5lIERNWF9HRVRfQ0FQUyAgICAgICAgICAgICBfSU9SKCdvJywgNDgsIGRteF9jYXBzX3QpCisjZGVmaW5lIERNWF9TRVRfU09VUkNFICAgICAgICAgICBfSU9XKCdvJywgNDksIGRteF9zb3VyY2VfdCkKKyNkZWZpbmUgRE1YX0dFVF9TVEMgICAgICAgICAgICAgIF9JT1dSKCdvJywgNTAsIHN0cnVjdCBkbXhfc3RjKQorCisjZW5kaWYgLypfRFZCRE1YX0hfKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZHZiL2Zyb250ZW5kLmggYi9pbmNsdWRlL2xpbnV4L2R2Yi9mcm9udGVuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0MWRmNzAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2R2Yi9mcm9udGVuZC5oCkBAIC0wLDAgKzEsMjY3IEBACisvKgorICogZnJvbnRlbmQuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBNYXJjdXMgTWV0emxlciA8bWFyY3VzQGNvbnZlcmdlbmNlLmRlPgorICoJCSAgICBSYWxwaCAgTWV0emxlciA8cmFscGhAY29udmVyZ2VuY2UuZGU+CisgKgkJICAgIEhvbGdlciBXYWVjaHRsZXIgPGhvbGdlckBjb252ZXJnZW5jZS5kZT4KKyAqCQkgICAgQW5kcmUgRHJhc3ppayA8YWRAY29udmVyZ2VuY2UuZGU+CisgKgkJICAgIGZvciBjb252ZXJnZW5jZSBpbnRlZ3JhdGVkIG1lZGlhIEdtYkgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgX0RWQkZST05URU5EX0hfCisjZGVmaW5lIF9EVkJGUk9OVEVORF9IXworCisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisKKwordHlwZWRlZiBlbnVtIGZlX3R5cGUgeworCUZFX1FQU0ssCisJRkVfUUFNLAorCUZFX09GRE0sCisJRkVfQVRTQworfSBmZV90eXBlX3Q7CisKKwordHlwZWRlZiBlbnVtIGZlX2NhcHMgeworCUZFX0lTX1NUVVBJRAkJCT0gMCwKKwlGRV9DQU5fSU5WRVJTSU9OX0FVVE8JCT0gMHgxLAorCUZFX0NBTl9GRUNfMV8yCQkJPSAweDIsCisJRkVfQ0FOX0ZFQ18yXzMJCQk9IDB4NCwKKwlGRV9DQU5fRkVDXzNfNAkJCT0gMHg4LAorCUZFX0NBTl9GRUNfNF81CQkJPSAweDEwLAorCUZFX0NBTl9GRUNfNV82CQkJPSAweDIwLAorCUZFX0NBTl9GRUNfNl83CQkJPSAweDQwLAorCUZFX0NBTl9GRUNfN184CQkJPSAweDgwLAorCUZFX0NBTl9GRUNfOF85CQkJPSAweDEwMCwKKwlGRV9DQU5fRkVDX0FVVE8JCQk9IDB4MjAwLAorCUZFX0NBTl9RUFNLCQkJPSAweDQwMCwKKwlGRV9DQU5fUUFNXzE2CQkJPSAweDgwMCwKKwlGRV9DQU5fUUFNXzMyCQkJPSAweDEwMDAsCisJRkVfQ0FOX1FBTV82NAkJCT0gMHgyMDAwLAorCUZFX0NBTl9RQU1fMTI4CQkJPSAweDQwMDAsCisJRkVfQ0FOX1FBTV8yNTYJCQk9IDB4ODAwMCwKKwlGRV9DQU5fUUFNX0FVVE8JCQk9IDB4MTAwMDAsCisJRkVfQ0FOX1RSQU5TTUlTU0lPTl9NT0RFX0FVVE8JPSAweDIwMDAwLAorCUZFX0NBTl9CQU5EV0lEVEhfQVVUTwkJPSAweDQwMDAwLAorCUZFX0NBTl9HVUFSRF9JTlRFUlZBTF9BVVRPCT0gMHg4MDAwMCwKKwlGRV9DQU5fSElFUkFSQ0hZX0FVVE8JCT0gMHgxMDAwMDAsCisJRkVfQ0FOXzhWU0IJCQk9IDB4MjAwMDAwLAorCUZFX0NBTl8xNlZTQgkJCT0gMHg0MDAwMDAsCisJRkVfTkVFRFNfQkVORElORwkJPSAweDIwMDAwMDAwLCAvLyBub3Qgc3VwcG9ydGVkIGFueW1vcmUsIGRvbid0IHVzZSAoZnJvbnRlbmQgcmVxdWlyZXMgZnJlcXVlbmN5IGJlbmRpbmcpCisJRkVfQ0FOX1JFQ09WRVIJCQk9IDB4NDAwMDAwMDAsIC8vIGZyb250ZW5kIGNhbiByZWNvdmVyIGZyb20gYSBjYWJsZSB1bnBsdWcgYXV0b21hdGljYWxseQorCUZFX0NBTl9NVVRFX1RTCQkJPSAweDgwMDAwMDAwICAvLyBmcm9udGVuZCBjYW4gc3RvcCBzcHVyaW91cyBUUyBkYXRhIG91dHB1dAorfSBmZV9jYXBzX3Q7CisKKworc3RydWN0IGR2Yl9mcm9udGVuZF9pbmZvIHsKKwljaGFyICAgICAgIG5hbWVbMTI4XTsKKwlmZV90eXBlX3QgIHR5cGU7CisJX191MzIgICAgICBmcmVxdWVuY3lfbWluOworCV9fdTMyICAgICAgZnJlcXVlbmN5X21heDsKKwlfX3UzMiAgICAgIGZyZXF1ZW5jeV9zdGVwc2l6ZTsKKwlfX3UzMiAgICAgIGZyZXF1ZW5jeV90b2xlcmFuY2U7CisJX191MzIgICAgICBzeW1ib2xfcmF0ZV9taW47CisJX191MzIgICAgICBzeW1ib2xfcmF0ZV9tYXg7CisJX191MzIgICAgICBzeW1ib2xfcmF0ZV90b2xlcmFuY2U7CS8qIHBwbSAqLworCV9fdTMyICAgICAgbm90aWZpZXJfZGVsYXk7CQkvKiBERVBSRUNBVEVEICovCisJZmVfY2Fwc190ICBjYXBzOworfTsKKworCisvKioKKyAqICBDaGVjayBvdXQgdGhlIERpU0VxQyBidXMgc3BlYyBhdmFpbGFibGUgb24gaHR0cDovL3d3dy5ldXRlbHNhdC5vcmcvIGZvcgorICogIHRoZSBtZWFuaW5nIG9mIHRoaXMgc3RydWN0Li4uCisgKi8KK3N0cnVjdCBkdmJfZGlzZXFjX21hc3Rlcl9jbWQgeworCV9fdTggbXNnIFs2XTsJLyogIHsgZnJhbWluZywgYWRkcmVzcywgY29tbWFuZCwgZGF0YSBbM10gfSAqLworCV9fdTggbXNnX2xlbjsJLyogIHZhbGlkIHZhbHVlcyBhcmUgMy4uLjYgICovCit9OworCisKK3N0cnVjdCBkdmJfZGlzZXFjX3NsYXZlX3JlcGx5IHsKKwlfX3U4IG1zZyBbNF07CS8qICB7IGZyYW1pbmcsIGRhdGEgWzNdIH0gKi8KKwlfX3U4IG1zZ19sZW47CS8qICB2YWxpZCB2YWx1ZXMgYXJlIDAuLi40LCAwIG1lYW5zIG5vIG1zZyAgKi8KKwlpbnQgIHRpbWVvdXQ7CS8qICByZXR1cm4gZnJvbSBpb2N0bCBhZnRlciB0aW1lb3V0IG1zIHdpdGggKi8KK307CQkJLyogIGVycm9yY29kZSB3aGVuIG5vIG1lc3NhZ2Ugd2FzIHJlY2VpdmVkICAqLworCisKK3R5cGVkZWYgZW51bSBmZV9zZWNfdm9sdGFnZSB7CisJU0VDX1ZPTFRBR0VfMTMsCisJU0VDX1ZPTFRBR0VfMTgsCisJU0VDX1ZPTFRBR0VfT0ZGCit9IGZlX3NlY192b2x0YWdlX3Q7CisKKwordHlwZWRlZiBlbnVtIGZlX3NlY190b25lX21vZGUgeworCVNFQ19UT05FX09OLAorCVNFQ19UT05FX09GRgorfSBmZV9zZWNfdG9uZV9tb2RlX3Q7CisKKwordHlwZWRlZiBlbnVtIGZlX3NlY19taW5pX2NtZCB7CisJU0VDX01JTklfQSwKKwlTRUNfTUlOSV9CCit9IGZlX3NlY19taW5pX2NtZF90OworCisKK3R5cGVkZWYgZW51bSBmZV9zdGF0dXMgeworCUZFX0hBU19TSUdOQUwJPSAweDAxLCAgIC8qICBmb3VuZCBzb21ldGhpbmcgYWJvdmUgdGhlIG5vaXNlIGxldmVsICovCisJRkVfSEFTX0NBUlJJRVIJPSAweDAyLCAgIC8qICBmb3VuZCBhIERWQiBzaWduYWwgICovCisJRkVfSEFTX1ZJVEVSQkkJPSAweDA0LCAgIC8qICBGRUMgaXMgc3RhYmxlICAqLworCUZFX0hBU19TWU5DCT0gMHgwOCwgICAvKiAgZm91bmQgc3luYyBieXRlcyAgKi8KKwlGRV9IQVNfTE9DSwk9IDB4MTAsICAgLyogIGV2ZXJ5dGhpbmcncyB3b3JraW5nLi4uICovCisJRkVfVElNRURPVVQJPSAweDIwLCAgIC8qICBubyBsb2NrIHdpdGhpbiB0aGUgbGFzdCB+MiBzZWNvbmRzICovCisJRkVfUkVJTklUCT0gMHg0MCAgICAvKiAgZnJvbnRlbmQgd2FzIHJlaW5pdGlhbGl6ZWQsICAqLworfSBmZV9zdGF0dXNfdDsJCQkgIC8qICBhcHBsaWNhdGlvbiBpcyByZWNvbW1lbmRlZCB0byByZXNldCAqLworCQkJCSAgLyogIERpU0VxQywgdG9uZSBhbmQgcGFyYW1ldGVycyAqLworCit0eXBlZGVmIGVudW0gZmVfc3BlY3RyYWxfaW52ZXJzaW9uIHsKKwlJTlZFUlNJT05fT0ZGLAorCUlOVkVSU0lPTl9PTiwKKwlJTlZFUlNJT05fQVVUTworfSBmZV9zcGVjdHJhbF9pbnZlcnNpb25fdDsKKworCit0eXBlZGVmIGVudW0gZmVfY29kZV9yYXRlIHsKKwlGRUNfTk9ORSA9IDAsCisJRkVDXzFfMiwKKwlGRUNfMl8zLAorCUZFQ18zXzQsCisJRkVDXzRfNSwKKwlGRUNfNV82LAorCUZFQ182XzcsCisJRkVDXzdfOCwKKwlGRUNfOF85LAorCUZFQ19BVVRPCit9IGZlX2NvZGVfcmF0ZV90OworCisKK3R5cGVkZWYgZW51bSBmZV9tb2R1bGF0aW9uIHsKKwlRUFNLLAorCVFBTV8xNiwKKwlRQU1fMzIsCisJUUFNXzY0LAorCVFBTV8xMjgsCisJUUFNXzI1NiwKKwlRQU1fQVVUTywKKwlWU0JfOCwKKwlWU0JfMTYKK30gZmVfbW9kdWxhdGlvbl90OworCit0eXBlZGVmIGVudW0gZmVfdHJhbnNtaXRfbW9kZSB7CisJVFJBTlNNSVNTSU9OX01PREVfMkssCisJVFJBTlNNSVNTSU9OX01PREVfOEssCisJVFJBTlNNSVNTSU9OX01PREVfQVVUTworfSBmZV90cmFuc21pdF9tb2RlX3Q7CisKK3R5cGVkZWYgZW51bSBmZV9iYW5kd2lkdGggeworCUJBTkRXSURUSF84X01IWiwKKwlCQU5EV0lEVEhfN19NSFosCisJQkFORFdJRFRIXzZfTUhaLAorCUJBTkRXSURUSF9BVVRPCit9IGZlX2JhbmR3aWR0aF90OworCisKK3R5cGVkZWYgZW51bSBmZV9ndWFyZF9pbnRlcnZhbCB7CisJR1VBUkRfSU5URVJWQUxfMV8zMiwKKwlHVUFSRF9JTlRFUlZBTF8xXzE2LAorCUdVQVJEX0lOVEVSVkFMXzFfOCwKKwlHVUFSRF9JTlRFUlZBTF8xXzQsCisJR1VBUkRfSU5URVJWQUxfQVVUTworfSBmZV9ndWFyZF9pbnRlcnZhbF90OworCisKK3R5cGVkZWYgZW51bSBmZV9oaWVyYXJjaHkgeworCUhJRVJBUkNIWV9OT05FLAorCUhJRVJBUkNIWV8xLAorCUhJRVJBUkNIWV8yLAorCUhJRVJBUkNIWV80LAorCUhJRVJBUkNIWV9BVVRPCit9IGZlX2hpZXJhcmNoeV90OworCisKK3N0cnVjdCBkdmJfcXBza19wYXJhbWV0ZXJzIHsKKwlfX3UzMgkJc3ltYm9sX3JhdGU7ICAvKiBzeW1ib2wgcmF0ZSBpbiBTeW1ib2xzIHBlciBzZWNvbmQgKi8KKwlmZV9jb2RlX3JhdGVfdAlmZWNfaW5uZXI7ICAgIC8qIGZvcndhcmQgZXJyb3IgY29ycmVjdGlvbiAoc2VlIGFib3ZlKSAqLworfTsKKworc3RydWN0IGR2Yl9xYW1fcGFyYW1ldGVycyB7CisJX191MzIJCXN5bWJvbF9yYXRlOyAvKiBzeW1ib2wgcmF0ZSBpbiBTeW1ib2xzIHBlciBzZWNvbmQgKi8KKwlmZV9jb2RlX3JhdGVfdAlmZWNfaW5uZXI7ICAgLyogZm9yd2FyZCBlcnJvciBjb3JyZWN0aW9uIChzZWUgYWJvdmUpICovCisJZmVfbW9kdWxhdGlvbl90CW1vZHVsYXRpb247ICAvKiBtb2R1bGF0aW9uIHR5cGUgKHNlZSBhYm92ZSkgKi8KK307CisKK3N0cnVjdCBkdmJfdnNiX3BhcmFtZXRlcnMgeworCWZlX21vZHVsYXRpb25fdAltb2R1bGF0aW9uOyAgLyogbW9kdWxhdGlvbiB0eXBlIChzZWUgYWJvdmUpICovCit9OworCitzdHJ1Y3QgZHZiX29mZG1fcGFyYW1ldGVycyB7CisJZmVfYmFuZHdpZHRoX3QgICAgICBiYW5kd2lkdGg7CisJZmVfY29kZV9yYXRlX3QgICAgICBjb2RlX3JhdGVfSFA7ICAvKiBoaWdoIHByaW9yaXR5IHN0cmVhbSBjb2RlIHJhdGUgKi8KKwlmZV9jb2RlX3JhdGVfdCAgICAgIGNvZGVfcmF0ZV9MUDsgIC8qIGxvdyBwcmlvcml0eSBzdHJlYW0gY29kZSByYXRlICovCisJZmVfbW9kdWxhdGlvbl90ICAgICBjb25zdGVsbGF0aW9uOyAvKiBtb2R1bGF0aW9uIHR5cGUgKHNlZSBhYm92ZSkgKi8KKwlmZV90cmFuc21pdF9tb2RlX3QgIHRyYW5zbWlzc2lvbl9tb2RlOworCWZlX2d1YXJkX2ludGVydmFsX3QgZ3VhcmRfaW50ZXJ2YWw7CisJZmVfaGllcmFyY2h5X3QgICAgICBoaWVyYXJjaHlfaW5mb3JtYXRpb247Cit9OworCisKK3N0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyB7CisJX191MzIgZnJlcXVlbmN5OyAgICAgLyogKGFic29sdXRlKSBmcmVxdWVuY3kgaW4gSHogZm9yIFFBTS9PRkRNL0FUU0MgKi8KKwkJCSAgICAgLyogaW50ZXJtZWRpYXRlIGZyZXF1ZW5jeSBpbiBrSHogZm9yIFFQU0sgKi8KKwlmZV9zcGVjdHJhbF9pbnZlcnNpb25fdCBpbnZlcnNpb247CisJdW5pb24geworCQlzdHJ1Y3QgZHZiX3Fwc2tfcGFyYW1ldGVycyBxcHNrOworCQlzdHJ1Y3QgZHZiX3FhbV9wYXJhbWV0ZXJzICBxYW07CisJCXN0cnVjdCBkdmJfb2ZkbV9wYXJhbWV0ZXJzIG9mZG07CisJCXN0cnVjdCBkdmJfdnNiX3BhcmFtZXRlcnMgdnNiOworCX0gdTsKK307CisKKworc3RydWN0IGR2Yl9mcm9udGVuZF9ldmVudCB7CisJZmVfc3RhdHVzX3Qgc3RhdHVzOworCXN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyBwYXJhbWV0ZXJzOworfTsKKworCisKKyNkZWZpbmUgRkVfR0VUX0lORk8JCSAgIF9JT1IoJ28nLCA2MSwgc3RydWN0IGR2Yl9mcm9udGVuZF9pbmZvKQorCisjZGVmaW5lIEZFX0RJU0VRQ19SRVNFVF9PVkVSTE9BRCAgIF9JTygnbycsIDYyKQorI2RlZmluZSBGRV9ESVNFUUNfU0VORF9NQVNURVJfQ01EICBfSU9XKCdvJywgNjMsIHN0cnVjdCBkdmJfZGlzZXFjX21hc3Rlcl9jbWQpCisjZGVmaW5lIEZFX0RJU0VRQ19SRUNWX1NMQVZFX1JFUExZIF9JT1IoJ28nLCA2NCwgc3RydWN0IGR2Yl9kaXNlcWNfc2xhdmVfcmVwbHkpCisjZGVmaW5lIEZFX0RJU0VRQ19TRU5EX0JVUlNUICAgICAgIF9JTygnbycsIDY1KSAgLyogZmVfc2VjX21pbmlfY21kX3QgKi8KKworI2RlZmluZSBGRV9TRVRfVE9ORQkJICAgX0lPKCdvJywgNjYpICAvKiBmZV9zZWNfdG9uZV9tb2RlX3QgKi8KKyNkZWZpbmUgRkVfU0VUX1ZPTFRBR0UJCSAgIF9JTygnbycsIDY3KSAgLyogZmVfc2VjX3ZvbHRhZ2VfdCAqLworI2RlZmluZSBGRV9FTkFCTEVfSElHSF9MTkJfVk9MVEFHRSBfSU8oJ28nLCA2OCkgIC8qIGludCAqLworCisjZGVmaW5lIEZFX1JFQURfU1RBVFVTCQkgICBfSU9SKCdvJywgNjksIGZlX3N0YXR1c190KQorI2RlZmluZSBGRV9SRUFEX0JFUgkJICAgX0lPUignbycsIDcwLCBfX3UzMikKKyNkZWZpbmUgRkVfUkVBRF9TSUdOQUxfU1RSRU5HVEggICAgX0lPUignbycsIDcxLCBfX3UxNikKKyNkZWZpbmUgRkVfUkVBRF9TTlIJCSAgIF9JT1IoJ28nLCA3MiwgX191MTYpCisjZGVmaW5lIEZFX1JFQURfVU5DT1JSRUNURURfQkxPQ0tTIF9JT1IoJ28nLCA3MywgX191MzIpCisKKyNkZWZpbmUgRkVfU0VUX0ZST05URU5ECQkgICBfSU9XKCdvJywgNzYsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycykKKyNkZWZpbmUgRkVfR0VUX0ZST05URU5ECQkgICBfSU9SKCdvJywgNzcsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycykKKyNkZWZpbmUgRkVfR0VUX0VWRU5UCQkgICBfSU9SKCdvJywgNzgsIHN0cnVjdCBkdmJfZnJvbnRlbmRfZXZlbnQpCisKKyNkZWZpbmUgRkVfRElTSE5FVFdPUktfU0VORF9MRUdBQ1lfQ01EIF9JTygnbycsIDgwKSAvKiB1bnNpZ25lZCBpbnQgKi8KKworI2VuZGlmIC8qX0RWQkZST05URU5EX0hfKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZHZiL25ldC5oIGIvaW5jbHVkZS9saW51eC9kdmIvbmV0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJlNDc0YgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvZHZiL25ldC5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBuZXQuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBNYXJjdXMgTWV0emxlciA8bWFyY3VzQGNvbnZlcmdlbmNlLmRlPgorICogICAgICAgICAgICAgICAgICAmIFJhbHBoICBNZXR6bGVyIDxyYWxwaEBjb252ZXJnZW5jZS5kZT4KKyAqICAgICAgICAgICAgICAgICAgICBmb3IgY29udmVyZ2VuY2UgaW50ZWdyYXRlZCBtZWRpYSBHbWJICisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqLworCisjaWZuZGVmIF9EVkJORVRfSF8KKyNkZWZpbmUgX0RWQk5FVF9IXworCisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisKKworc3RydWN0IGR2Yl9uZXRfaWYgeworCV9fdTE2IHBpZDsKKwlfX3UxNiBpZl9udW07CisJX191OCAgZmVlZHR5cGU7CisjZGVmaW5lIERWQl9ORVRfRkVFRFRZUEVfTVBFIDAJLyogbXVsdGkgcHJvdG9jb2wgZW5jYXBzdWxhdGlvbiAqLworI2RlZmluZSBEVkJfTkVUX0ZFRURUWVBFX1VMRSAxCS8qIHVsdHJhIGxpZ2h0d2VpZ2h0IGVuY2Fwc3VsYXRpb24gKi8KK307CisKKworI2RlZmluZSBORVRfQUREX0lGICAgIF9JT1dSKCdvJywgNTIsIHN0cnVjdCBkdmJfbmV0X2lmKQorI2RlZmluZSBORVRfUkVNT1ZFX0lGIF9JTygnbycsIDUzKQorI2RlZmluZSBORVRfR0VUX0lGICAgIF9JT1dSKCdvJywgNTQsIHN0cnVjdCBkdmJfbmV0X2lmKQorCisKKy8qIGJpbmFyeSBjb21wYXRpYmlsaXR5IGNydWZ0OiAqLworc3RydWN0IF9fZHZiX25ldF9pZl9vbGQgeworCV9fdTE2IHBpZDsKKwlfX3UxNiBpZl9udW07Cit9OworI2RlZmluZSBfX05FVF9BRERfSUZfT0xEIF9JT1dSKCdvJywgNTIsIHN0cnVjdCBfX2R2Yl9uZXRfaWZfb2xkKQorI2RlZmluZSBfX05FVF9HRVRfSUZfT0xEIF9JT1dSKCdvJywgNTQsIHN0cnVjdCBfX2R2Yl9uZXRfaWZfb2xkKQorCisKKyNlbmRpZiAvKl9EVkJORVRfSF8qLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kdmIvb3NkLmggYi9pbmNsdWRlL2xpbnV4L2R2Yi9vc2QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTE5NzNkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9kdmIvb3NkLmgKQEAgLTAsMCArMSwxNDQgQEAKKy8qCisgKiBvc2QuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMSBSYWxwaCAgTWV0emxlciA8cmFscGhAY29udmVyZ2VuY2UuZGU+CisgKiAgICAgICAgICAgICAgICAgICYgTWFyY3VzIE1ldHpsZXIgPG1hcmN1c0Bjb252ZXJnZW5jZS5kZT4KKyAqICAgICAgICAgICAgICAgICAgICBmb3IgY29udmVyZ2VuY2UgaW50ZWdyYXRlZCBtZWRpYSBHbWJICisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgTGVzc2VyIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqLworCisjaWZuZGVmIF9EVkJPU0RfSF8KKyNkZWZpbmUgX0RWQk9TRF9IXworCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKwordHlwZWRlZiBlbnVtIHsKKyAgLy8gQWxsIGZ1bmN0aW9ucyByZXR1cm4gLTIgb24gIm5vdCBvcGVuIgorICBPU0RfQ2xvc2U9MSwgICAgLy8gKCkKKyAgLy8gRGlzYWJsZXMgT1NEIGFuZCByZWxlYXNlcyB0aGUgYnVmZmVycworICAvLyByZXR1cm5zIDAgb24gc3VjY2VzcworICBPU0RfT3BlbiwgICAgICAgLy8gKHgwLHkwLHgxLHkxLEJpdFBlclBpeGVsWzIvNC84XShjb2xvciYweDBGKSxtaXhbMC4uMTVdKGNvbG9yJjB4RjApKQorICAvLyBPcGVucyBPU0Qgd2l0aCB0aGlzIHNpemUgYW5kIGJpdCBkZXB0aAorICAvLyByZXR1cm5zIDAgb24gc3VjY2VzcywgLTEgb24gRFJBTSBhbGxvY2F0aW9uIGVycm9yLCAtMiBvbiAiYWxyZWFkeSBvcGVuIgorICBPU0RfU2hvdywgICAgICAgLy8gKCkKKyAgLy8gZW5hYmxlcyBPU0QgbW9kZQorICAvLyByZXR1cm5zIDAgb24gc3VjY2VzcworICBPU0RfSGlkZSwgICAgICAgLy8gKCkKKyAgLy8gZGlzYWJsZXMgT1NEIG1vZGUKKyAgLy8gcmV0dXJucyAwIG9uIHN1Y2Nlc3MKKyAgT1NEX0NsZWFyLCAgICAgIC8vICgpCisgIC8vIFNldHMgYWxsIHBpeGVsIHRvIGNvbG9yIDAKKyAgLy8gcmV0dXJucyAwIG9uIHN1Y2Nlc3MKKyAgT1NEX0ZpbGwsICAgICAgIC8vIChjb2xvcikKKyAgLy8gU2V0cyBhbGwgcGl4ZWwgdG8gY29sb3IgPGNvbD4KKyAgLy8gcmV0dXJucyAwIG9uIHN1Y2Nlc3MKKyAgT1NEX1NldENvbG9yLCAgIC8vIChjb2xvcixSe3gwfSxHe3kwfSxCe3gxfSxvcGFjaXR5e3kxfSkKKyAgLy8gc2V0IHBhbGV0dGUgZW50cnkgPG51bT4gdG8gPHIsZyxiPiwgPG1peD4gYW5kIDx0cmFucz4gYXBwbHkKKyAgLy8gUixHLEI6IDAuLjI1NQorICAvLyBSPVJlZCwgRz1HcmVlbiwgQj1CbHVlCisgIC8vIG9wYWNpdHk9MDogICAgICBwaXhlbCBvcGFjaXR5IDAlIChvbmx5IHZpZGVvIHBpeGVsIHNob3dzKQorICAvLyBvcGFjaXR5PTEuLjI1NDogcGl4ZWwgb3BhY2l0eSBhcyBzcGVjaWZpZWQgaW4gaGVhZGVyCisgIC8vIG9wYWNpdHk9MjU1OiAgICBwaXhlbCBvcGFjaXR5IDEwMCUgKG9ubHkgT1NEIHBpeGVsIHNob3dzKQorICAvLyByZXR1cm5zIDAgb24gc3VjY2VzcywgLTEgb24gZXJyb3IKKyAgT1NEX1NldFBhbGV0dGUsIC8vIChmaXJzdGNvbG9ye2NvbG9yfSxsYXN0Y29sb3J7eDB9LGRhdGEpCisgIC8vIFNldCBhIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBwYWxldHRlCisgIC8vIHNldHMgdGhlIGVudHJpZXMgImZpcnN0Y29sb3IiIHRocm91Z2ggImxhc3Rjb2xvciIgZnJvbSB0aGUgYXJyYXkgImRhdGEiCisgIC8vIGRhdGEgaGFzIDQgYnl0ZSBmb3IgZWFjaCBjb2xvcjoKKyAgLy8gUixHLEIsIGFuZCBhIG9wYWNpdHkgdmFsdWU6IDAtPnRyYW5zcGFyZW50LCAxLi4yNTQtPm1peCwgMjU1LT5waXhlbAorICBPU0RfU2V0VHJhbnMsICAgLy8gKHRyYW5zcGFyZW5jeXtjb2xvcn0pCisgIC8vIFNldHMgdHJhbnNwYXJlbmN5IG9mIG1peGVkIHBpeGVsICgwLi4xNSkKKyAgLy8gcmV0dXJucyAwIG9uIHN1Y2Nlc3MKKyAgT1NEX1NldFBpeGVsLCAgIC8vICh4MCx5MCxjb2xvcikKKyAgLy8gc2V0cyBwaXhlbCA8eD4sPHk+IHRvIGNvbG9yIG51bWJlciA8Y29sPgorICAvLyByZXR1cm5zIDAgb24gc3VjY2VzcywgLTEgb24gZXJyb3IKKyAgT1NEX0dldFBpeGVsLCAgIC8vICh4MCx5MCkKKyAgLy8gcmV0dXJucyBjb2xvciBudW1iZXIgb2YgcGl4ZWwgPHg+LDx5PiwgIG9yIC0xCisgIE9TRF9TZXRSb3csICAgICAvLyAoeDAseTAseDEsZGF0YSkKKyAgLy8gZmlsbHMgcGl4ZWxzIHgwLHkgdGhyb3VnaCAgeDEseSB3aXRoIHRoZSBjb250ZW50IG9mIGRhdGFbXQorICAvLyByZXR1cm5zIDAgb24gc3VjY2VzcywgLTEgb24gY2xpcHBpbmcgYWxsIHBpeGVsIChubyBwaXhlbCBkcmF3bikKKyAgT1NEX1NldEJsb2NrLCAgIC8vICh4MCx5MCx4MSx5MSxpbmNyZW1lbnR7Y29sb3J9LGRhdGEpCisgIC8vIGZpbGxzIHBpeGVscyB4MCx5MCB0aHJvdWdoICB4MSx5MSB3aXRoIHRoZSBjb250ZW50IG9mIGRhdGFbXQorICAvLyBpbmMgY29udGFpbnMgdGhlIHdpZHRoIG9mIG9uZSBsaW5lIGluIHRoZSBkYXRhIGJsb2NrLAorICAvLyBpbmM8PTAgdXNlcyBibG9ja3dpZHRoIGFzIGxpbmV3aWR0aAorICAvLyByZXR1cm5zIDAgb24gc3VjY2VzcywgLTEgb24gY2xpcHBpbmcgYWxsIHBpeGVsCisgIE9TRF9GaWxsUm93LCAgICAvLyAoeDAseTAseDEsY29sb3IpCisgIC8vIGZpbGxzIHBpeGVscyB4MCx5IHRocm91Z2ggIHgxLHkgd2l0aCB0aGUgY29sb3IgPGNvbD4KKyAgLy8gcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGNsaXBwaW5nIGFsbCBwaXhlbAorICBPU0RfRmlsbEJsb2NrLCAgLy8gKHgwLHkwLHgxLHkxLGNvbG9yKQorICAvLyBmaWxscyBwaXhlbHMgeDAseTAgdGhyb3VnaCAgeDEseTEgd2l0aCB0aGUgY29sb3IgPGNvbD4KKyAgLy8gcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGNsaXBwaW5nIGFsbCBwaXhlbAorICBPU0RfTGluZSwgICAgICAgLy8gKHgwLHkwLHgxLHkxLGNvbG9yKQorICAvLyBkcmF3IGEgbGluZSBmcm9tIHgwLHkwIHRvIHgxLHkxIHdpdGggdGhlIGNvbG9yIDxjb2w+CisgIC8vIHJldHVybnMgMCBvbiBzdWNjZXNzCisgIE9TRF9RdWVyeSwgICAgICAvLyAoeDAseTAseDEseTEseGFzcHtjb2xvcn19KSwgeWFzcD0xMQorICAvLyBmaWxscyBwYXJhbWV0ZXJzIHdpdGggdGhlIHBpY3R1cmUgZGltZW5zaW9ucyBhbmQgdGhlIHBpeGVsIGFzcGVjdCByYXRpbworICAvLyByZXR1cm5zIDAgb24gc3VjY2VzcworICBPU0RfVGVzdCwgICAgICAgLy8gKCkKKyAgLy8gZHJhd3MgYSB0ZXN0IHBpY3R1cmUuIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgb25seQorICAvLyByZXR1cm5zIDAgb24gc3VjY2VzcworLy8gVE9ETzogcmVtb3ZlICJ0ZXN0IiBpbiBmaW5hbCB2ZXJzaW9uCisgIE9TRF9UZXh0LCAgICAgICAvLyAoeDAseTAsc2l6ZSxjb2xvcix0ZXh0KQorICBPU0RfU2V0V2luZG93LCAvLyAgKHgwKSBzZXQgd2luZG93IHdpdGggbnVtYmVyIDA8eDA8OCBhcyBjdXJyZW50CisgIE9TRF9Nb3ZlV2luZG93LCAvLyAgbW92ZSBjdXJyZW50IHdpbmRvdyB0byAoeDAsIHkwKQorICBPU0RfT3BlblJhdywJLy8gT3BlbiBvdGhlciB0eXBlcyBvZiBPU0Qgd2luZG93cworfSBPU0RfQ29tbWFuZDsKKwordHlwZWRlZiBzdHJ1Y3Qgb3NkX2NtZF9zIHsKKyAgICAgICAgT1NEX0NvbW1hbmQgY21kOworICAgICAgICBpbnQgeDA7CisgICAgICAgIGludCB5MDsKKyAgICAgICAgaW50IHgxOworICAgICAgICBpbnQgeTE7CisgICAgICAgIGludCBjb2xvcjsKKyAgICAgICAgdm9pZCBfX3VzZXIgKmRhdGE7Cit9IG9zZF9jbWRfdDsKKworLyogT1NEX09wZW5SYXc6IHNldCAnY29sb3InIHRvIGRlc2lyZWQgd2luZG93IHR5cGUgKi8KK3R5cGVkZWYgZW51bSB7CisgICAgICAgIE9TRF9CSVRNQVAxLCAgICAgICAgICAgLyogMSBiaXQgYml0bWFwICovCisgICAgICAgIE9TRF9CSVRNQVAyLCAgICAgICAgICAgLyogMiBiaXQgYml0bWFwICovCisgICAgICAgIE9TRF9CSVRNQVA0LCAgICAgICAgICAgLyogNCBiaXQgYml0bWFwICovCisgICAgICAgIE9TRF9CSVRNQVA4LCAgICAgICAgICAgLyogOCBiaXQgYml0bWFwICovCisgICAgICAgIE9TRF9CSVRNQVAxSFIsICAgICAgICAgLyogMSBCaXQgYml0bWFwIGhhbGYgcmVzb2x1dGlvbiAqLworICAgICAgICBPU0RfQklUTUFQMkhSLCAgICAgICAgIC8qIDIgYml0IGJpdG1hcCBoYWxmIHJlc29sdXRpb24gKi8KKyAgICAgICAgT1NEX0JJVE1BUDRIUiwgICAgICAgICAvKiA0IGJpdCBiaXRtYXAgaGFsZiByZXNvbHV0aW9uICovCisgICAgICAgIE9TRF9CSVRNQVA4SFIsICAgICAgICAgLyogOCBiaXQgYml0bWFwIGhhbGYgcmVzb2x1dGlvbiAqLworICAgICAgICBPU0RfWUNSQ0I0MjIsICAgICAgICAgIC8qIDQ6MjoyIFlDUkNCIEdyYXBoaWMgRGlzcGxheSAqLworICAgICAgICBPU0RfWUNSQ0I0NDQsICAgICAgICAgIC8qIDQ6NDo0IFlDUkNCIEdyYXBoaWMgRGlzcGxheSAqLworICAgICAgICBPU0RfWUNSQ0I0NDRIUiwgICAgICAgIC8qIDQ6NDo0IFlDUkNCIGdyYXBoaWMgaGFsZiByZXNvbHV0aW9uICovCisgICAgICAgIE9TRF9WSURFT1RTSVpFLCAgICAgICAgLyogVHJ1ZSBTaXplIE5vcm1hbCBNUEVHIFZpZGVvIERpc3BsYXkgKi8KKyAgICAgICAgT1NEX1ZJREVPSFNJWkUsICAgICAgICAvKiBNUEVHIFZpZGVvIERpc3BsYXkgSGFsZiBSZXNvbHV0aW9uICovCisgICAgICAgIE9TRF9WSURFT1FTSVpFLCAgICAgICAgLyogTVBFRyBWaWRlbyBEaXNwbGF5IFF1YXJ0ZXIgUmVzb2x1dGlvbiAqLworICAgICAgICBPU0RfVklERU9EU0laRSwgICAgICAgIC8qIE1QRUcgVmlkZW8gRGlzcGxheSBEb3VibGUgUmVzb2x1dGlvbiAqLworICAgICAgICBPU0RfVklERU9USFNJWkUsICAgICAgIC8qIFRydWUgU2l6ZSBNUEVHIFZpZGVvIERpc3BsYXkgSGFsZiBSZXNvbHV0aW9uICovCisgICAgICAgIE9TRF9WSURFT1RRU0laRSwgICAgICAgLyogVHJ1ZSBTaXplIE1QRUcgVmlkZW8gRGlzcGxheSBRdWFydGVyIFJlc29sdXRpb24qLworICAgICAgICBPU0RfVklERU9URFNJWkUsICAgICAgIC8qIFRydWUgU2l6ZSBNUEVHIFZpZGVvIERpc3BsYXkgRG91YmxlIFJlc29sdXRpb24gKi8KKyAgICAgICAgT1NEX1ZJREVPTlNJWkUsICAgICAgICAvKiBGdWxsIFNpemUgTVBFRyBWaWRlbyBEaXNwbGF5ICovCisgICAgICAgIE9TRF9DVVJTT1IgICAgICAgICAgICAgLyogQ3Vyc29yICovCit9IG9zZF9yYXdfd2luZG93X3Q7CisKK3R5cGVkZWYgc3RydWN0IG9zZF9jYXBfcyB7CisgICAgICAgIGludCAgY21kOworI2RlZmluZSBPU0RfQ0FQX01FTVNJWkUgICAgICAgICAxICAvKiBtZW1vcnkgc2l6ZSAqLworICAgICAgICBsb25nIHZhbDsKK30gb3NkX2NhcF90OworCisKKyNkZWZpbmUgT1NEX1NFTkRfQ01EICAgICAgICAgICAgX0lPVygnbycsIDE2MCwgb3NkX2NtZF90KQorI2RlZmluZSBPU0RfR0VUX0NBUEFCSUxJVFkgICAgICBfSU9SKCdvJywgMTYxLCBvc2RfY2FwX3QpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kdmIvdmVyc2lvbi5oIGIvaW5jbHVkZS9saW51eC9kdmIvdmVyc2lvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxODNjOWMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2R2Yi92ZXJzaW9uLmgKQEAgLTAsMCArMSwyOSBAQAorLyoKKyAqIHZlcnNpb24uaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBIb2xnZXIgV2FlY2h0bGVyIDxob2xnZXJAY29udmVyZ2VuY2UuZGU+CisgKiAgICAgICAgICAgICAgICAgICAgZm9yIGNvbnZlcmdlbmNlIGludGVncmF0ZWQgbWVkaWEgR21iSAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMQorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBfRFZCVkVSU0lPTl9IXworI2RlZmluZSBfRFZCVkVSU0lPTl9IXworCisjZGVmaW5lIERWQl9BUElfVkVSU0lPTiAzCisjZGVmaW5lIERWQl9BUElfVkVSU0lPTl9NSU5PUiAxCisKKyNlbmRpZiAvKl9EVkJWRVJTSU9OX0hfKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZHZiL3ZpZGVvLmggYi9pbmNsdWRlL2xpbnV4L2R2Yi92aWRlby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0MTA0NWUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2R2Yi92aWRlby5oCkBAIC0wLDAgKzEsMjAzIEBACisvKgorICogdmlkZW8uaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBNYXJjdXMgTWV0emxlciA8bWFyY3VzQGNvbnZlcmdlbmNlLmRlPgorICogICAgICAgICAgICAgICAgICAmIFJhbHBoICBNZXR6bGVyIDxyYWxwaEBjb252ZXJnZW5jZS5kZT4KKyAqICAgICAgICAgICAgICAgICAgICBmb3IgY29udmVyZ2VuY2UgaW50ZWdyYXRlZCBtZWRpYSBHbWJICisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqLworCisjaWZuZGVmIF9EVkJWSURFT19IXworI2RlZmluZSBfRFZCVklERU9fSF8KKworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNlbHNlCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2VuZGlmCisKKwordHlwZWRlZiBlbnVtIHsKKwlWSURFT19GT1JNQVRfNF8zLCAgICAgLyogU2VsZWN0IDQ6MyBmb3JtYXQgKi8KKyAgICAgICAgVklERU9fRk9STUFUXzE2XzksICAgIC8qIFNlbGVjdCAxNjo5IGZvcm1hdC4gKi8KKwlWSURFT19GT1JNQVRfMjIxXzEgICAgLyogMi4yMToxICovCit9IHZpZGVvX2Zvcm1hdF90OworCisKK3R5cGVkZWYgZW51bSB7CisJIFZJREVPX1NZU1RFTV9QQUwsCisJIFZJREVPX1NZU1RFTV9OVFNDLAorCSBWSURFT19TWVNURU1fUEFMTiwKKwkgVklERU9fU1lTVEVNX1BBTE5jLAorCSBWSURFT19TWVNURU1fUEFMTSwKKwkgVklERU9fU1lTVEVNX05UU0M2MCwKKwkgVklERU9fU1lTVEVNX1BBTDYwLAorCSBWSURFT19TWVNURU1fUEFMTTYwCit9IHZpZGVvX3N5c3RlbV90OworCisKK3R5cGVkZWYgZW51bSB7CisgICAgICAgIFZJREVPX1BBTl9TQ0FOLCAgICAgICAvKiB1c2UgcGFuIGFuZCBzY2FuIGZvcm1hdCAqLworCVZJREVPX0xFVFRFUl9CT1gsICAgICAvKiB1c2UgbGV0dGVyYm94IGZvcm1hdCAqLworCVZJREVPX0NFTlRFUl9DVVRfT1VUICAvKiB1c2UgY2VudGVyIGN1dCBvdXQgZm9ybWF0ICovCit9IHZpZGVvX2Rpc3BsYXlmb3JtYXRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCWludCB3OworCWludCBoOworCXZpZGVvX2Zvcm1hdF90IGFzcGVjdF9yYXRpbzsKK30gdmlkZW9fc2l6ZV90OworCit0eXBlZGVmIGVudW0geworICAgICAgICBWSURFT19TT1VSQ0VfREVNVVgsIC8qIFNlbGVjdCB0aGUgZGVtdXggYXMgdGhlIG1haW4gc291cmNlICovCisJVklERU9fU09VUkNFX01FTU9SWSAvKiBJZiB0aGlzIHNvdXJjZSBpcyBzZWxlY3RlZCwgdGhlIHN0cmVhbQorCQkJICAgICAgIGNvbWVzIGZyb20gdGhlIHVzZXIgdGhyb3VnaCB0aGUgd3JpdGUKKwkJCSAgICAgICBzeXN0ZW0gY2FsbCAqLworfSB2aWRlb19zdHJlYW1fc291cmNlX3Q7CisKKwordHlwZWRlZiBlbnVtIHsKKwlWSURFT19TVE9QUEVELCAvKiBWaWRlbyBpcyBzdG9wcGVkICovCisgICAgICAgIFZJREVPX1BMQVlJTkcsIC8qIFZpZGVvIGlzIGN1cnJlbnRseSBwbGF5aW5nICovCisJVklERU9fRlJFRVpFRCAgLyogVmlkZW8gaXMgZnJlZXplZCAqLworfSB2aWRlb19wbGF5X3N0YXRlX3Q7CisKKworc3RydWN0IHZpZGVvX2V2ZW50IHsKKyAgICAgICAgaW50MzJfdCB0eXBlOworI2RlZmluZSBWSURFT19FVkVOVF9TSVpFX0NIQU5HRUQJMQorI2RlZmluZSBWSURFT19FVkVOVF9GUkFNRV9SQVRFX0NIQU5HRUQJMgorICAgICAgICB0aW1lX3QgdGltZXN0YW1wOworCXVuaW9uIHsKKwkgICAgICAgIHZpZGVvX3NpemVfdCBzaXplOworCQl1bnNpZ25lZCBpbnQgZnJhbWVfcmF0ZTsJLyogaW4gZnJhbWVzIHBlciAxMDAwc2VjICovCisJfSB1OworfTsKKworCitzdHJ1Y3QgdmlkZW9fc3RhdHVzIHsKKyAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgIHZpZGVvX2JsYW5rOyAgIC8qIGJsYW5rIHZpZGVvIG9uIGZyZWV6ZT8gKi8KKyAgICAgICAgdmlkZW9fcGxheV9zdGF0ZV90ICAgIHBsYXlfc3RhdGU7ICAgIC8qIGN1cnJlbnQgc3RhdGUgb2YgcGxheWJhY2sgKi8KKyAgICAgICAgdmlkZW9fc3RyZWFtX3NvdXJjZV90IHN0cmVhbV9zb3VyY2U7IC8qIGN1cnJlbnQgc291cmNlIChkZW11eC9tZW1vcnkpICovCisgICAgICAgIHZpZGVvX2Zvcm1hdF90ICAgICAgICB2aWRlb19mb3JtYXQ7ICAvKiBjdXJyZW50IGFzcGVjdCByYXRpbyBvZiBzdHJlYW0qLworICAgICAgICB2aWRlb19kaXNwbGF5Zm9ybWF0X3QgZGlzcGxheV9mb3JtYXQ7Lyogc2VsZWN0ZWQgY3JvcHBpbmcgbW9kZSAqLworfTsKKworCitzdHJ1Y3QgdmlkZW9fc3RpbGxfcGljdHVyZSB7CisgICAgICAgIGNoYXIgX191c2VyICppRnJhbWU7ICAgICAgICAvKiBwb2ludGVyIHRvIGEgc2luZ2xlIGlmcmFtZSBpbiBtZW1vcnkgKi8KKyAgICAgICAgaW50MzJfdCBzaXplOworfTsKKworCit0eXBlZGVmCitzdHJ1Y3QgdmlkZW9faGlnaGxpZ2h0IHsKKwlpbnQgICAgIGFjdGl2ZTsgICAgICAvKiAgICAxPXNob3cgaGlnaGxpZ2h0LCAwPWhpZGUgaGlnaGxpZ2h0ICovCisJdWludDhfdCBjb250cmFzdDE7ICAgLyogICAgNy0gNCAgUGF0dGVybiBwaXhlbCBjb250cmFzdCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAzLSAwICBCYWNrZ3JvdW5kIHBpeGVsIGNvbnRyYXN0ICovCisJdWludDhfdCBjb250cmFzdDI7ICAgLyogICAgNy0gNCAgRW1waGFzaXMgcGl4ZWwtMiBjb250cmFzdCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAzLSAwICBFbXBoYXNpcyBwaXhlbC0xIGNvbnRyYXN0ICovCisJdWludDhfdCBjb2xvcjE7ICAgICAgLyogICAgNy0gNCAgUGF0dGVybiBwaXhlbCBjb2xvciAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAzLSAwICBCYWNrZ3JvdW5kIHBpeGVsIGNvbG9yICovCisJdWludDhfdCBjb2xvcjI7ICAgICAgLyogICAgNy0gNCAgRW1waGFzaXMgcGl4ZWwtMiBjb2xvciAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAzLSAwICBFbXBoYXNpcyBwaXhlbC0xIGNvbG9yICovCisJdWludDMyX3QgeXBvczsgICAgICAgLyogICAyMy0yMiAgYXV0byBhY3Rpb24gbW9kZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgIDIxLTEyICBzdGFydCB5ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgIDktIDAgIGVuZCB5ICovCisJdWludDMyX3QgeHBvczsgICAgICAgLyogICAyMy0yMiAgYnV0dG9uIGNvbG9yIG51bWJlciAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgIDIxLTEyICBzdGFydCB4ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgIDktIDAgIGVuZCB4ICovCit9IHZpZGVvX2hpZ2hsaWdodF90OworCisKK3R5cGVkZWYgc3RydWN0IHZpZGVvX3NwdSB7CisJaW50IGFjdGl2ZTsKKwlpbnQgc3RyZWFtX2lkOworfSB2aWRlb19zcHVfdDsKKworCit0eXBlZGVmIHN0cnVjdCB2aWRlb19zcHVfcGFsZXR0ZSB7ICAgICAgLyogU1BVIFBhbGV0dGUgaW5mb3JtYXRpb24gKi8KKwlpbnQgbGVuZ3RoOworCXVpbnQ4X3QgKnBhbGV0dGU7Cit9IHZpZGVvX3NwdV9wYWxldHRlX3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QgdmlkZW9fbmF2aV9wYWNrIHsKKwlpbnQgbGVuZ3RoOyAgICAgICAgICAvKiAwIC4uLiAxMDI0ICovCisJdWludDhfdCBkYXRhWzEwMjRdOworfSB2aWRlb19uYXZpX3BhY2tfdDsKKworCit0eXBlZGVmIHVpbnQxNl90IHZpZGVvX2F0dHJpYnV0ZXNfdDsKKy8qICAgYml0czogZGVzY3IuICovCisvKiAgIDE1LTE0IFZpZGVvIGNvbXByZXNzaW9uIG1vZGUgKDA9TVBFRy0xLCAxPU1QRUctMikgKi8KKy8qICAgMTMtMTIgVFYgc3lzdGVtICgwPTUyNS82MCwgMT02MjUvNTApICovCisvKiAgIDExLTEwIEFzcGVjdCByYXRpbyAoMD00OjMsIDM9MTY6OSkgKi8KKy8qICAgIDktIDggcGVybWl0dGVkIGRpc3BsYXkgbW9kZSBvbiA0OjMgbW9uaXRvciAoMD1ib3RoLCAxPW9ubHkgcGFuLXNjYSAqLworLyogICAgNyAgICBsaW5lIDIxLTEgZGF0YSBwcmVzZW50IGluIEdPUCAoMT15ZXMsIDA9bm8pICovCisvKiAgICA2ICAgIGxpbmUgMjEtMiBkYXRhIHByZXNlbnQgaW4gR09QICgxPXllcywgMD1ubykgKi8KKy8qICAgIDUtIDMgc291cmNlIHJlc29sdXRpb24gKDA9NzIweDQ4MC81NzYsIDE9NzA0eDQ4MC81NzYsIDI9MzUyeDQ4MC81NyAqLworLyogICAgMiAgICBzb3VyY2UgbGV0dGVyYm94ZWQgKDE9eWVzLCAwPW5vKSAqLworLyogICAgMCAgICBmaWxtL2NhbWVyYSBtb2RlICgwPWNhbWVyYSwgMT1maWxtICg2MjUvNTAgb25seSkpICovCisKKworLyogYml0IGRlZmluaXRpb25zIGZvciBjYXBhYmlsaXRpZXM6ICovCisvKiBjYW4gdGhlIGhhcmR3YXJlIGRlY29kZSBNUEVHMSBhbmQvb3IgTVBFRzI/ICovCisjZGVmaW5lIFZJREVPX0NBUF9NUEVHMSAgIDEKKyNkZWZpbmUgVklERU9fQ0FQX01QRUcyICAgMgorLyogY2FuIHlvdSBzZW5kIGEgc3lzdGVtIGFuZC9vciBwcm9ncmFtIHN0cmVhbSB0byB2aWRlbyBkZXZpY2U/CisgICAoeW91IHN0aWxsIGhhdmUgdG8gb3BlbiB0aGUgdmlkZW8gYW5kIHRoZSBhdWRpbyBkZXZpY2UgYnV0IG9ubHkKKyAgICBzZW5kIHRoZSBzdHJlYW0gdG8gdGhlIHZpZGVvIGRldmljZSkgKi8KKyNkZWZpbmUgVklERU9fQ0FQX1NZUyAgICAgNAorI2RlZmluZSBWSURFT19DQVBfUFJPRyAgICA4CisvKiBjYW4gdGhlIGRyaXZlciBhbHNvIGhhbmRsZSBTUFUsIE5BVkkgYW5kIENTUyBlbmNvZGVkIGRhdGE/CisgICAoQ1NTIEFQSSBpcyBub3QgcHJlc2VudCB5ZXQpICovCisjZGVmaW5lIFZJREVPX0NBUF9TUFUgICAgMTYKKyNkZWZpbmUgVklERU9fQ0FQX05BVkkgICAzMgorI2RlZmluZSBWSURFT19DQVBfQ1NTICAgIDY0CisKKworI2RlZmluZSBWSURFT19TVE9QICAgICAgICAgICAgICAgICBfSU8oJ28nLCAyMSkKKyNkZWZpbmUgVklERU9fUExBWSAgICAgICAgICAgICAgICAgX0lPKCdvJywgMjIpCisjZGVmaW5lIFZJREVPX0ZSRUVaRSAgICAgICAgICAgICAgIF9JTygnbycsIDIzKQorI2RlZmluZSBWSURFT19DT05USU5VRSAgICAgICAgICAgICBfSU8oJ28nLCAyNCkKKyNkZWZpbmUgVklERU9fU0VMRUNUX1NPVVJDRSAgICAgICAgX0lPKCdvJywgMjUpCisjZGVmaW5lIFZJREVPX1NFVF9CTEFOSyAgICAgICAgICAgIF9JTygnbycsIDI2KQorI2RlZmluZSBWSURFT19HRVRfU1RBVFVTICAgICAgICAgICBfSU9SKCdvJywgMjcsIHN0cnVjdCB2aWRlb19zdGF0dXMpCisjZGVmaW5lIFZJREVPX0dFVF9FVkVOVCAgICAgICAgICAgIF9JT1IoJ28nLCAyOCwgc3RydWN0IHZpZGVvX2V2ZW50KQorI2RlZmluZSBWSURFT19TRVRfRElTUExBWV9GT1JNQVQgICBfSU8oJ28nLCAyOSkKKyNkZWZpbmUgVklERU9fU1RJTExQSUNUVVJFICAgICAgICAgX0lPVygnbycsIDMwLCBzdHJ1Y3QgdmlkZW9fc3RpbGxfcGljdHVyZSkKKyNkZWZpbmUgVklERU9fRkFTVF9GT1JXQVJEICAgICAgICAgX0lPKCdvJywgMzEpCisjZGVmaW5lIFZJREVPX1NMT1dNT1RJT04gICAgICAgICAgIF9JTygnbycsIDMyKQorI2RlZmluZSBWSURFT19HRVRfQ0FQQUJJTElUSUVTICAgICBfSU9SKCdvJywgMzMsIHVuc2lnbmVkIGludCkKKyNkZWZpbmUgVklERU9fQ0xFQVJfQlVGRkVSICAgICAgICAgX0lPKCdvJywgIDM0KQorI2RlZmluZSBWSURFT19TRVRfSUQgICAgICAgICAgICAgICBfSU8oJ28nLCAzNSkKKyNkZWZpbmUgVklERU9fU0VUX1NUUkVBTVRZUEUgICAgICAgX0lPKCdvJywgMzYpCisjZGVmaW5lIFZJREVPX1NFVF9GT1JNQVQgICAgICAgICAgIF9JTygnbycsIDM3KQorI2RlZmluZSBWSURFT19TRVRfU1lTVEVNICAgICAgICAgICBfSU8oJ28nLCAzOCkKKyNkZWZpbmUgVklERU9fU0VUX0hJR0hMSUdIVCAgICAgICAgX0lPVygnbycsIDM5LCB2aWRlb19oaWdobGlnaHRfdCkKKyNkZWZpbmUgVklERU9fU0VUX1NQVSAgICAgICAgICAgICAgX0lPVygnbycsIDUwLCB2aWRlb19zcHVfdCkKKyNkZWZpbmUgVklERU9fU0VUX1NQVV9QQUxFVFRFICAgICAgX0lPVygnbycsIDUxLCB2aWRlb19zcHVfcGFsZXR0ZV90KQorI2RlZmluZSBWSURFT19HRVRfTkFWSSAgICAgICAgICAgICBfSU9SKCdvJywgNTIsIHZpZGVvX25hdmlfcGFja190KQorI2RlZmluZSBWSURFT19TRVRfQVRUUklCVVRFUyAgICAgICBfSU8oJ28nLCA1MykKKyNkZWZpbmUgVklERU9fR0VUX1NJWkUgICAgICAgICAgICAgX0lPUignbycsIDU1LCB2aWRlb19zaXplX3QpCisjZGVmaW5lIFZJREVPX0dFVF9GUkFNRV9SQVRFICAgICAgIF9JT1IoJ28nLCA1NiwgdW5zaWduZWQgaW50KQorCisjZW5kaWYgLypfRFZCVklERU9fSF8qLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9lZGQuaCBiL2luY2x1ZGUvbGludXgvZWRkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZlNjc0NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvZWRkLmgKQEAgLTAsMCArMSwxOTQgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2xpbnV4L2VkZC5oCisgKiAgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzLCAyMDA0IERlbGwgSW5jLgorICogIGJ5IE1hdHQgRG9tc2NoIDxNYXR0X0RvbXNjaEBkZWxsLmNvbT4KKyAqCisgKiBzdHJ1Y3R1cmVzIGFuZCBkZWZpbml0aW9ucyBmb3IgdGhlIGludCAxM2gsIGF4PXs0MSw0OH1oCisgKiBCSU9TIEVuaGFuY2VkIERpc2sgRHJpdmUgU2VydmljZXMKKyAqIFRoaXMgaXMgYmFzZWQgb24gdGhlIFQxMyBncm91cCBkb2N1bWVudCBEMTU3MiBSZXZpc2lvbiAwIChBdWd1c3QgMTQgMjAwMikKKyAqIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LnQxMy5vcmcvZG9jczIwMDIvZDE1NzJyMC5wZGYuICBJdCBpcworICogdmVyeSBzaW1pbGFyIHRvIEQxNDg0IFJldmlzaW9uIDMgaHR0cDovL3d3dy50MTMub3JnL2RvY3MyMDAyL2QxNDg0cjMucGRmCisgKgorICogSW4gYSBudXRzaGVsbCwgYXJjaC97aTM4Nix4ODZfNjR9L2Jvb3Qvc2V0dXAuUyBwb3B1bGF0ZXMgYSBzY3JhdGNoCisgKiB0YWJsZSBpbiB0aGUgYm9vdF9wYXJhbXMgdGhhdCBjb250YWlucyBhIGxpc3Qgb2YgQklPUy1lbnVtZXJhdGVkCisgKiBib290IGRldmljZXMuCisgKiBJbiBhcmNoL3tpMzg2LHg4Nl82NH0va2VybmVsL3NldHVwLmMsIHRoaXMgaW5mb3JtYXRpb24gaXMKKyAqIHRyYW5zZmVycmVkIGludG8gdGhlIGVkZCBzdHJ1Y3R1cmUsIGFuZCBpbiBkcml2ZXJzL2Zpcm13YXJlL2VkZC5jLCB0aGF0CisgKiBpbmZvcm1hdGlvbiBpcyB1c2VkIHRvIGlkZW50aWZ5IEJJT1MgYm9vdCBkaXNrLiAgVGhlIGNvZGUgaW4gc2V0dXAuUworICogaXMgdmVyeSBzZW5zaXRpdmUgdG8gdGhlIHNpemUgb2YgdGhlc2Ugc3RydWN0dXJlcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2Mi4wIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisjaWZuZGVmIF9MSU5VWF9FRERfSAorI2RlZmluZSBfTElOVVhfRUREX0gKKworI2RlZmluZSBFREROUiAweDFlOQkJLyogYWRkciBvZiBudW1iZXIgb2YgZWRkX2luZm8gc3RydWN0cyBhdCBFRERCVUYKKwkJCQkgICBpbiBib290X3BhcmFtcyAtIHRyZWF0IHRoaXMgYXMgMSBieXRlICAqLworI2RlZmluZSBFRERCVUYJMHg2MDAJCS8qIGFkZHIgb2YgZWRkX2luZm8gc3RydWN0cyBpbiBib290X3BhcmFtcyAqLworI2RlZmluZSBFRERNQVhOUiA2CQkvKiBudW1iZXIgb2YgZWRkX2luZm8gc3RydWN0cyBzdGFydGluZyBhdCBFRERCVUYgICovCisjZGVmaW5lIEVEREVYVFNJWkUgOAkJLyogY2hhbmdlIHRoZXNlIGlmIHlvdSBtdWNrIHdpdGggdGhlIHN0cnVjdHVyZXMgKi8KKyNkZWZpbmUgRUREUEFSTVNJWkUgNzQKKyNkZWZpbmUgQ0hFQ0tFWFRFTlNJT05TUFJFU0VOVCAweDQxCisjZGVmaW5lIEdFVERFVklDRVBBUkFNRVRFUlMgMHg0OAorI2RlZmluZSBMRUdBQ1lHRVRERVZJQ0VQQVJBTUVURVJTIDB4MDgKKyNkZWZpbmUgRURETUFHSUMxIDB4NTVBQQorI2RlZmluZSBFRERNQUdJQzIgMHhBQTU1CisKKworI2RlZmluZSBSRUFEX1NFQ1RPUlMgMHgwMiAgICAgICAgIC8qIGludDEzIEFIPTB4MDIgaXMgUkVBRF9TRUNUT1JTIGNvbW1hbmQgKi8KKyNkZWZpbmUgRUREX01CUl9TSUdfT0ZGU0VUIDB4MUI4ICAvKiBvZmZzZXQgb2Ygc2lnbmF0dXJlIGluIHRoZSBNQlIgKi8KKyNkZWZpbmUgRUREX01CUl9TSUdfQlVGICAgIDB4MjkwICAvKiBhZGRyIGluIGJvb3QgcGFyYW1zICovCisjZGVmaW5lIEVERF9NQlJfU0lHX01BWCAxNiAgICAgICAgLyogbWF4IG51bWJlciBvZiBzaWduYXR1cmVzIHRvIHN0b3JlICovCisjZGVmaW5lIEVERF9NQlJfU0lHX05SX0JVRiAweDFlYSAgLyogYWRkciBvZiBudW1iZXIgb2YgTUJSIHNpZ250YXVyZXMgYXQgRUREX01CUl9TSUdfQlVGCisJCQkJICAgICBpbiBib290X3BhcmFtcyAtIHRyZWF0IHRoaXMgYXMgMSBieXRlICAqLworI2RlZmluZSBFRERfQ0xfRVFVQUxTICAgMHgzZDY0NjQ2NSAgICAgLyogImVkZD0iICovCisjZGVmaW5lIEVERF9DTF9PRkYgICAgICAweDY2NmYgICAgICAgICAvKiAib2YiIGZvciBvZmYgICovCisjZGVmaW5lIEVERF9DTF9TS0lQICAgICAweDZiNzMgICAgICAgICAvKiAic2siIGZvciBza2lwbWJyICovCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNkZWZpbmUgRUREX0VYVF9GSVhFRF9ESVNLX0FDQ0VTUyAgICAgICAgICAgKDEgPDwgMCkKKyNkZWZpbmUgRUREX0VYVF9ERVZJQ0VfTE9DS0lOR19BTkRfRUpFQ1RJTkcgKDEgPDwgMSkKKyNkZWZpbmUgRUREX0VYVF9FTkhBTkNFRF9ESVNLX0RSSVZFX1NVUFBPUlQgKDEgPDwgMikKKyNkZWZpbmUgRUREX0VYVF82NEJJVF9FWFRFTlNJT05TICAgICAgICAgICAgKDEgPDwgMykKKworI2RlZmluZSBFRERfSU5GT19ETUFfQk9VTkRBUllfRVJST1JfVFJBTlNQQVJFTlQgKDEgPDwgMCkKKyNkZWZpbmUgRUREX0lORk9fR0VPTUVUUllfVkFMSUQgICAgICAgICAgICAgICAgKDEgPDwgMSkKKyNkZWZpbmUgRUREX0lORk9fUkVNT1ZBQkxFICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMikKKyNkZWZpbmUgRUREX0lORk9fV1JJVEVfVkVSSUZZICAgICAgICAgICAgICAgICAgKDEgPDwgMykKKyNkZWZpbmUgRUREX0lORk9fTUVESUFfQ0hBTkdFX05PVElGSUNBVElPTiAgICAgKDEgPDwgNCkKKyNkZWZpbmUgRUREX0lORk9fTE9DS0FCTEUgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNSkKKyNkZWZpbmUgRUREX0lORk9fTk9fTUVESUFfUFJFU0VOVCAgICAgICAgICAgICAgKDEgPDwgNikKKyNkZWZpbmUgRUREX0lORk9fVVNFX0lOVDEzX0ZONTAgICAgICAgICAgICAgICAgKDEgPDwgNykKKworc3RydWN0IGVkZF9kZXZpY2VfcGFyYW1zIHsKKwl1MTYgbGVuZ3RoOworCXUxNiBpbmZvX2ZsYWdzOworCXUzMiBudW1fZGVmYXVsdF9jeWxpbmRlcnM7CisJdTMyIG51bV9kZWZhdWx0X2hlYWRzOworCXUzMiBzZWN0b3JzX3Blcl90cmFjazsKKwl1NjQgbnVtYmVyX29mX3NlY3RvcnM7CisJdTE2IGJ5dGVzX3Blcl9zZWN0b3I7CisJdTMyIGRwdGVfcHRyOwkJLyogMHhGRkZGRkZGRiBmb3Igb3VyIHB1cnBvc2VzICovCisJdTE2IGtleTsJCS8qID0gMHhCRUREICovCisJdTggZGV2aWNlX3BhdGhfaW5mb19sZW5ndGg7CS8qID0gNDQgKi8KKwl1OCByZXNlcnZlZDI7CisJdTE2IHJlc2VydmVkMzsKKwl1OCBob3N0X2J1c190eXBlWzRdOworCXU4IGludGVyZmFjZV90eXBlWzhdOworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXUxNiBiYXNlX2FkZHJlc3M7CisJCQl1MTYgcmVzZXJ2ZWQxOworCQkJdTMyIHJlc2VydmVkMjsKKwkJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgaXNhOworCQlzdHJ1Y3QgeworCQkJdTggYnVzOworCQkJdTggc2xvdDsKKwkJCXU4IGZ1bmN0aW9uOworCQkJdTggY2hhbm5lbDsKKwkJCXUzMiByZXNlcnZlZDsKKwkJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgcGNpOworCQkvKiBwY2l4IGlzIHNhbWUgYXMgcGNpICovCisJCXN0cnVjdCB7CisJCQl1NjQgcmVzZXJ2ZWQ7CisJCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGlibmQ7CisJCXN0cnVjdCB7CisJCQl1NjQgcmVzZXJ2ZWQ7CisJCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHhwcnM7CisJCXN0cnVjdCB7CisJCQl1NjQgcmVzZXJ2ZWQ7CisJCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGh0cHQ7CisJCXN0cnVjdCB7CisJCQl1NjQgcmVzZXJ2ZWQ7CisJCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHVua25vd247CisJfSBpbnRlcmZhY2VfcGF0aDsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQl1OCBkZXZpY2U7CisJCQl1OCByZXNlcnZlZDE7CisJCQl1MTYgcmVzZXJ2ZWQyOworCQkJdTMyIHJlc2VydmVkMzsKKwkJCXU2NCByZXNlcnZlZDQ7CisJCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGF0YTsKKwkJc3RydWN0IHsKKwkJCXU4IGRldmljZTsKKwkJCXU4IGx1bjsKKwkJCXU4IHJlc2VydmVkMTsKKwkJCXU4IHJlc2VydmVkMjsKKwkJCXUzMiByZXNlcnZlZDM7CisJCQl1NjQgcmVzZXJ2ZWQ0OworCQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBhdGFwaTsKKwkJc3RydWN0IHsKKwkJCXUxNiBpZDsKKwkJCXU2NCBsdW47CisJCQl1MTYgcmVzZXJ2ZWQxOworCQkJdTMyIHJlc2VydmVkMjsKKwkJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgc2NzaTsKKwkJc3RydWN0IHsKKwkJCXU2NCBzZXJpYWxfbnVtYmVyOworCQkJdTY0IHJlc2VydmVkOworCQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSB1c2I7CisJCXN0cnVjdCB7CisJCQl1NjQgZXVpOworCQkJdTY0IHJlc2VydmVkOworCQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBpMTM5NDsKKwkJc3RydWN0IHsKKwkJCXU2NCB3d2lkOworCQkJdTY0IGx1bjsKKwkJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgZmlicmU7CisJCXN0cnVjdCB7CisJCQl1NjQgaWRlbnRpdHlfdGFnOworCQkJdTY0IHJlc2VydmVkOworCQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBpMm87CisJCXN0cnVjdCB7CisJCQl1MzIgYXJyYXlfbnVtYmVyOworCQkJdTMyIHJlc2VydmVkMTsKKwkJCXU2NCByZXNlcnZlZDI7CisJCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHJhaWQ7CisJCXN0cnVjdCB7CisJCQl1OCBkZXZpY2U7CisJCQl1OCByZXNlcnZlZDE7CisJCQl1MTYgcmVzZXJ2ZWQyOworCQkJdTMyIHJlc2VydmVkMzsKKwkJCXU2NCByZXNlcnZlZDQ7CisJCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHNhdGE7CisJCXN0cnVjdCB7CisJCQl1NjQgcmVzZXJ2ZWQxOworCQkJdTY0IHJlc2VydmVkMjsKKwkJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgdW5rbm93bjsKKwl9IGRldmljZV9wYXRoOworCXU4IHJlc2VydmVkNDsKKwl1OCBjaGVja3N1bTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgZWRkX2luZm8geworCXU4IGRldmljZTsKKwl1OCB2ZXJzaW9uOworCXUxNiBpbnRlcmZhY2Vfc3VwcG9ydDsKKwl1MTYgbGVnYWN5X21heF9jeWxpbmRlcjsKKwl1OCBsZWdhY3lfbWF4X2hlYWQ7CisJdTggbGVnYWN5X3NlY3RvcnNfcGVyX3RyYWNrOworCXN0cnVjdCBlZGRfZGV2aWNlX3BhcmFtcyBwYXJhbXM7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGVkZCB7CisJdW5zaWduZWQgaW50IG1icl9zaWduYXR1cmVbRUREX01CUl9TSUdfTUFYXTsKKwlzdHJ1Y3QgZWRkX2luZm8gZWRkX2luZm9bRURETUFYTlJdOworCXVuc2lnbmVkIGNoYXIgbWJyX3NpZ25hdHVyZV9ucjsKKwl1bnNpZ25lZCBjaGFyIGVkZF9pbmZvX25yOworfTsKKworZXh0ZXJuIHN0cnVjdCBlZGQgZWRkOworCisjZW5kaWYJCQkJLyohX19BU1NFTUJMWV9fICovCisKKyNlbmRpZgkJCQkvKiBfTElOVVhfRUREX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZWVwcm9tLmggYi9pbmNsdWRlL2xpbnV4L2VlcHJvbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4YWZkOWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2VlcHJvbS5oCkBAIC0wLDAgKzEsMTM2IEBACisvKiBjcmVkaXQgd2luYm9uZC04NDAuYworICovCisjaW5jbHVkZSA8YXNtL2lvLmg+CitzdHJ1Y3QgZWVwcm9tX29wcyB7CisJdm9pZAkoKnNldF9jcykodm9pZCAqZWUpOworCXZvaWQJKCpjbGVhcl9jcykodm9pZCAqZWUpOworfTsKKworI2RlZmluZSBFRVBPTF9FRURJCTB4MDEKKyNkZWZpbmUgRUVQT0xfRUVETwkweDAyCisjZGVmaW5lIEVFUE9MX0VFQ0xLCTB4MDQKKyNkZWZpbmUgRUVQT0xfRUVTRUwJMHgwOAorCitzdHJ1Y3QgZWVwcm9tIHsKKwl2b2lkICpkZXY7CisJc3RydWN0IGVlcHJvbV9vcHMgKm9wczsKKworCXZvaWQgX19pb21lbSAqCWFkZHI7CisKKwl1bnNpZ25lZAllZV9hZGRyX2JpdHM7CisKKwl1bnNpZ25lZAllZXNlbDsKKwl1bnNpZ25lZAllZWNsazsKKwl1bnNpZ25lZAllZWRvOworCXVuc2lnbmVkCWVlZGk7CisJdW5zaWduZWQJcG9sYXJpdHk7CisJdW5zaWduZWQJZWVfc3RhdGU7CisKKwlzcGlubG9ja190CSpsb2NrOworCXUzMgkJKmNhY2hlOworfTsKKworCit1OCAgIGVlcHJvbV9yZWFkYihzdHJ1Y3QgZWVwcm9tICplZSwgdW5zaWduZWQgYWRkcmVzcyk7Cit2b2lkIGVlcHJvbV9yZWFkKHN0cnVjdCBlZXByb20gKmVlLCB1bnNpZ25lZCBhZGRyZXNzLCB1OCAqYnl0ZXMsCisJCXVuc2lnbmVkIGNvdW50KTsKK3ZvaWQgZWVwcm9tX3dyaXRlYihzdHJ1Y3QgZWVwcm9tICplZSwgdW5zaWduZWQgYWRkcmVzcywgdTggZGF0YSk7Cit2b2lkIGVlcHJvbV93cml0ZShzdHJ1Y3QgZWVwcm9tICplZSwgdW5zaWduZWQgYWRkcmVzcywgdTggKmJ5dGVzLAorCQl1bnNpZ25lZCBjb3VudCk7CisKKy8qIFRoZSBFRVBST00gY29tbWFuZHMgaW5jbHVkZSB0aGUgYWx3YXktc2V0IGxlYWRpbmcgYml0LiAqLworZW51bSBFRVBST01fQ21kcyB7CisgICAgICAgIEVFX1dyaXRlQ21kPSg1IDw8IDYpLCBFRV9SZWFkQ21kPSg2IDw8IDYpLCBFRV9FcmFzZUNtZD0oNyA8PCA2KSwKK307CisKK3ZvaWQgc2V0dXBfZWVfbWVtX2JpdGJhbmdlcihzdHJ1Y3QgZWVwcm9tICplZSwgdm9pZCBfX2lvbWVtICptZW1hZGRyLCBpbnQgZWVzZWxfYml0LCBpbnQgZWVjbGtfYml0LCBpbnQgZWVkb19iaXQsIGludCBlZWRpX2JpdCwgdW5zaWduZWQgcG9sYXJpdHkpCit7CisJZWUtPmFkZHIgPSBtZW1hZGRyOworCWVlLT5lZXNlbCA9IDEgPDwgZWVzZWxfYml0OworCWVlLT5lZWNsayA9IDEgPDwgZWVjbGtfYml0OworCWVlLT5lZWRvID0gMSA8PCBlZWRvX2JpdDsKKwllZS0+ZWVkaSA9IDEgPDwgZWVkaV9iaXQ7CisKKwllZS0+cG9sYXJpdHkgPSBwb2xhcml0eTsKKworCSplZS0+Y2FjaGUgPSByZWFkbChlZS0+YWRkcik7Cit9CisKKy8qIGZvby4gcHV0IHRoaXMgaW4gYSAuYyBmaWxlICovCitzdGF0aWMgaW5saW5lIHZvaWQgZWVwcm9tX3VwZGF0ZShzdHJ1Y3QgZWVwcm9tICplZSwgdTMyIG1hc2ssIGludCBwb2wpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgZGF0YTsKKworCXNwaW5fbG9ja19pcnFzYXZlKGVlLT5sb2NrLCBmbGFncyk7CisJZGF0YSA9ICplZS0+Y2FjaGU7CisKKwlkYXRhICY9IH5tYXNrOworCWlmIChwb2wpCisJCWRhdGEgfD0gbWFzazsKKworCSplZS0+Y2FjaGUgPSBkYXRhOworLy9wcmludGsoInVwZGF0ZTogJTA4eFxuIiwgZGF0YSk7CisJd3JpdGVsKGRhdGEsIGVlLT5hZGRyKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKGVlLT5sb2NrLCBmbGFncyk7Cit9CisKK3ZvaWQgZWVwcm9tX2Nsa19sbyhzdHJ1Y3QgZWVwcm9tICplZSkKK3sKKwlpbnQgcG9sID0gISEoZWUtPnBvbGFyaXR5ICYgRUVQT0xfRUVDTEspOworCisJZWVwcm9tX3VwZGF0ZShlZSwgZWUtPmVlY2xrLCBwb2wpOworCXVkZWxheSgyKTsKK30KKwordm9pZCBlZXByb21fY2xrX2hpKHN0cnVjdCBlZXByb20gKmVlKQoreworCWludCBwb2wgPSAhIShlZS0+cG9sYXJpdHkgJiBFRVBPTF9FRUNMSyk7CisKKwllZXByb21fdXBkYXRlKGVlLCBlZS0+ZWVjbGssICFwb2wpOworCXVkZWxheSgyKTsKK30KKwordm9pZCBlZXByb21fc2VuZF9hZGRyKHN0cnVjdCBlZXByb20gKmVlLCB1bnNpZ25lZCBhZGRyZXNzKQoreworCWludCBwb2wgPSAhIShlZS0+cG9sYXJpdHkgJiBFRVBPTF9FRURJKTsKKwl1bnNpZ25lZCBpOworCWFkZHJlc3MgfD0gNiA8PCA2OworCisgICAgICAgIC8qIFNoaWZ0IHRoZSByZWFkIGNvbW1hbmQgYml0cyBvdXQuICovCisgICAgICAgIGZvciAoaT0wOyBpPDExOyBpKyspIHsKKwkJZWVwcm9tX3VwZGF0ZShlZSwgZWUtPmVlZGksICgoYWRkcmVzcyA+PiAxMCkgJiAxKSBeIHBvbCk7CisJCWFkZHJlc3MgPDw9IDE7CisJCWVlcHJvbV9jbGtfaGkoZWUpOworCQllZXByb21fY2xrX2xvKGVlKTsKKyAgICAgICAgfQorCWVlcHJvbV91cGRhdGUoZWUsIGVlLT5lZWRpLCBwb2wpOworfQorCit1MTYgICBlZXByb21fcmVhZHcoc3RydWN0IGVlcHJvbSAqZWUsIHVuc2lnbmVkIGFkZHJlc3MpCit7CisJdW5zaWduZWQgaTsKKwl1MTYJcmVzID0gMDsKKworCWVlcHJvbV9jbGtfbG8oZWUpOworCWVlcHJvbV91cGRhdGUoZWUsIGVlLT5lZXNlbCwgMSBeICEhKGVlLT5wb2xhcml0eSAmIEVFUE9MX0VFU0VMKSk7CisJZWVwcm9tX3NlbmRfYWRkcihlZSwgYWRkcmVzcyk7CisKKwlmb3IgKGk9MDsgaTwxNjsgaSsrKSB7CisJCXUzMiBkYXRhOworCQllZXByb21fY2xrX2hpKGVlKTsKKwkJcmVzIDw8PSAxOworCQlkYXRhID0gcmVhZGwoZWUtPmFkZHIpOworLy9wcmludGsoImVlcHJvbV9yZWFkdzogJTA4eFxuIiwgZGF0YSk7CisJCXJlcyB8PSAhIShkYXRhICYgZWUtPmVlZG8pIF4gISEoZWUtPnBvbGFyaXR5ICYgRUVQT0xfRUVETyk7CisJCWVlcHJvbV9jbGtfbG8oZWUpOworCX0KKwllZXByb21fdXBkYXRlKGVlLCBlZS0+ZWVzZWwsIDAgXiAhIShlZS0+cG9sYXJpdHkgJiBFRVBPTF9FRVNFTCkpOworCisJcmV0dXJuIHJlczsKK30KKworCit2b2lkIGVlcHJvbV93cml0ZWIoc3RydWN0IGVlcHJvbSAqZWUsIHVuc2lnbmVkIGFkZHJlc3MsIHU4IGRhdGEpCit7Cit9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2VmaS5oIGIvaW5jbHVkZS9saW51eC9lZmkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDdlNzIyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9lZmkuaApAQCAtMCwwICsxLDM5OCBAQAorI2lmbmRlZiBfTElOVVhfRUZJX0gKKyNkZWZpbmUgX0xJTlVYX0VGSV9ICisKKy8qCisgKiBFeHRlbnNpYmxlIEZpcm13YXJlIEludGVyZmFjZQorICogQmFzZWQgb24gJ0V4dGVuc2libGUgRmlybXdhcmUgSW50ZXJmYWNlIFNwZWNpZmljYXRpb24nIHZlcnNpb24gMC45LCBBcHJpbCAzMCwgMTk5OQorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBWQSBMaW51eCBTeXN0ZW1zCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgV2FsdCBEcnVtbW9uZCA8ZHJ1bW1vbmRAdmFsaW51eC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDItMjAwMyBIZXdsZXR0LVBhY2thcmQgQ28uCisgKglEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+CisgKglTdGVwaGFuZSBFcmFuaWFuIDxlcmFuaWFuQGhwbC5ocC5jb20+CisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorCisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisKKyNkZWZpbmUgRUZJX1NVQ0NFU1MJCTAKKyNkZWZpbmUgRUZJX0xPQURfRVJST1IgICAgICAgICAgKCAxIHwgKDFVTCA8PCAoQklUU19QRVJfTE9ORy0xKSkpCisjZGVmaW5lIEVGSV9JTlZBTElEX1BBUkFNRVRFUgkoIDIgfCAoMVVMIDw8IChCSVRTX1BFUl9MT05HLTEpKSkKKyNkZWZpbmUgRUZJX1VOU1VQUE9SVEVECQkoIDMgfCAoMVVMIDw8IChCSVRTX1BFUl9MT05HLTEpKSkKKyNkZWZpbmUgRUZJX0JBRF9CVUZGRVJfU0laRSAgICAgKCA0IHwgKDFVTCA8PCAoQklUU19QRVJfTE9ORy0xKSkpCisjZGVmaW5lIEVGSV9CVUZGRVJfVE9PX1NNQUxMCSggNSB8ICgxVUwgPDwgKEJJVFNfUEVSX0xPTkctMSkpKQorI2RlZmluZSBFRklfTk9UX0ZPVU5ECQkoMTQgfCAoMVVMIDw8IChCSVRTX1BFUl9MT05HLTEpKSkKKwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGVmaV9zdGF0dXNfdDsKK3R5cGVkZWYgdTggZWZpX2Jvb2xfdDsKK3R5cGVkZWYgdTE2IGVmaV9jaGFyMTZfdDsJCS8qIFVOSUNPREUgY2hhcmFjdGVyICovCisKKwordHlwZWRlZiBzdHJ1Y3QgeworCXU4IGJbMTZdOworfSBlZmlfZ3VpZF90OworCisjZGVmaW5lIEVGSV9HVUlEKGEsYixjLGQwLGQxLGQyLGQzLGQ0LGQ1LGQ2LGQ3KSBcCisoKGVmaV9ndWlkX3QpIFwKK3t7IChhKSAmIDB4ZmYsICgoYSkgPj4gOCkgJiAweGZmLCAoKGEpID4+IDE2KSAmIDB4ZmYsICgoYSkgPj4gMjQpICYgMHhmZiwgXAorICAoYikgJiAweGZmLCAoKGIpID4+IDgpICYgMHhmZiwgXAorICAoYykgJiAweGZmLCAoKGMpID4+IDgpICYgMHhmZiwgXAorICAoZDApLCAoZDEpLCAoZDIpLCAoZDMpLCAoZDQpLCAoZDUpLCAoZDYpLCAoZDcpIH19KQorCisvKgorICogR2VuZXJpYyBFRkkgdGFibGUgaGVhZGVyCisgKi8KK3R5cGVkZWYJc3RydWN0IHsKKwl1NjQgc2lnbmF0dXJlOworCXUzMiByZXZpc2lvbjsKKwl1MzIgaGVhZGVyc2l6ZTsKKwl1MzIgY3JjMzI7CisJdTMyIHJlc2VydmVkOworfSBlZmlfdGFibGVfaGRyX3Q7CisKKy8qCisgKiBNZW1vcnkgbWFwIGRlc2NyaXB0b3I6CisgKi8KKworLyogTWVtb3J5IHR5cGVzOiAqLworI2RlZmluZSBFRklfUkVTRVJWRURfVFlQRQkJIDAKKyNkZWZpbmUgRUZJX0xPQURFUl9DT0RFCQkJIDEKKyNkZWZpbmUgRUZJX0xPQURFUl9EQVRBCQkJIDIKKyNkZWZpbmUgRUZJX0JPT1RfU0VSVklDRVNfQ09ERQkJIDMKKyNkZWZpbmUgRUZJX0JPT1RfU0VSVklDRVNfREFUQQkJIDQKKyNkZWZpbmUgRUZJX1JVTlRJTUVfU0VSVklDRVNfQ09ERQkgNQorI2RlZmluZSBFRklfUlVOVElNRV9TRVJWSUNFU19EQVRBCSA2CisjZGVmaW5lIEVGSV9DT05WRU5USU9OQUxfTUVNT1JZCQkgNworI2RlZmluZSBFRklfVU5VU0FCTEVfTUVNT1JZCQkgOAorI2RlZmluZSBFRklfQUNQSV9SRUNMQUlNX01FTU9SWQkJIDkKKyNkZWZpbmUgRUZJX0FDUElfTUVNT1JZX05WUwkJMTAKKyNkZWZpbmUgRUZJX01FTU9SWV9NQVBQRURfSU8JCTExCisjZGVmaW5lIEVGSV9NRU1PUllfTUFQUEVEX0lPX1BPUlRfU1BBQ0UJMTIKKyNkZWZpbmUgRUZJX1BBTF9DT0RFCQkJMTMKKyNkZWZpbmUgRUZJX01BWF9NRU1PUllfVFlQRQkJMTQKKworLyogQXR0cmlidXRlIHZhbHVlczogKi8KKyNkZWZpbmUgRUZJX01FTU9SWV9VQwkJKCh1NjQpMHgwMDAwMDAwMDAwMDAwMDAxVUxMKQkvKiB1bmNhY2hlZCAqLworI2RlZmluZSBFRklfTUVNT1JZX1dDCQkoKHU2NCkweDAwMDAwMDAwMDAwMDAwMDJVTEwpCS8qIHdyaXRlLWNvYWxlc2NpbmcgKi8KKyNkZWZpbmUgRUZJX01FTU9SWV9XVAkJKCh1NjQpMHgwMDAwMDAwMDAwMDAwMDA0VUxMKQkvKiB3cml0ZS10aHJvdWdoICovCisjZGVmaW5lIEVGSV9NRU1PUllfV0IJCSgodTY0KTB4MDAwMDAwMDAwMDAwMDAwOFVMTCkJLyogd3JpdGUtYmFjayAqLworI2RlZmluZSBFRklfTUVNT1JZX1dQCQkoKHU2NCkweDAwMDAwMDAwMDAwMDEwMDBVTEwpCS8qIHdyaXRlLXByb3RlY3QgKi8KKyNkZWZpbmUgRUZJX01FTU9SWV9SUAkJKCh1NjQpMHgwMDAwMDAwMDAwMDAyMDAwVUxMKQkvKiByZWFkLXByb3RlY3QgKi8KKyNkZWZpbmUgRUZJX01FTU9SWV9YUAkJKCh1NjQpMHgwMDAwMDAwMDAwMDA0MDAwVUxMKQkvKiBleGVjdXRlLXByb3RlY3QgKi8KKyNkZWZpbmUgRUZJX01FTU9SWV9SVU5USU1FCSgodTY0KTB4ODAwMDAwMDAwMDAwMDAwMFVMTCkJLyogcmFuZ2UgcmVxdWlyZXMgcnVudGltZSBtYXBwaW5nICovCisjZGVmaW5lIEVGSV9NRU1PUllfREVTQ1JJUFRPUl9WRVJTSU9OCTEKKworI2RlZmluZSBFRklfUEFHRV9TSElGVAkJMTIKKworLyoKKyAqIEZvciBjdXJyZW50IHg4NiBpbXBsZW1lbnRhdGlvbnMgb2YgRUZJLCB0aGVyZSBpcworICogYWRkaXRpb25hbCBwYWRkaW5nIGluIHRoZSBtZW0gZGVzY3JpcHRvcnMuICBUaGlzIGlzIG5vdAorICogdGhlIGNhc2UgaW4gaWE2NC4gIE5lZWQgdG8gaGF2ZSB0aGlzIGZpeGVkIGluIHRoZSBmL3cuCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwl1MzIgdHlwZTsKKwl1MzIgcGFkOworCXU2NCBwaHlzX2FkZHI7CisJdTY0IHZpcnRfYWRkcjsKKwl1NjQgbnVtX3BhZ2VzOworCXU2NCBhdHRyaWJ1dGU7CisjaWYgZGVmaW5lZCAoX19pMzg2X18pCisJdTY0IHBhZDE7CisjZW5kaWYKK30gZWZpX21lbW9yeV9kZXNjX3Q7CisKK3R5cGVkZWYgaW50ICgqZWZpX2ZyZWVtZW1fY2FsbGJhY2tfdCkgKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCB2b2lkICphcmcpOworCisvKgorICogVHlwZXMgYW5kIGRlZmluZXMgZm9yIFRpbWUgU2VydmljZXMKKyAqLworI2RlZmluZSBFRklfVElNRV9BREpVU1RfREFZTElHSFQgMHgxCisjZGVmaW5lIEVGSV9USU1FX0lOX0RBWUxJR0hUICAgICAweDIKKyNkZWZpbmUgRUZJX1VOU1BFQ0lGSUVEX1RJTUVaT05FIDB4MDdmZgorCit0eXBlZGVmIHN0cnVjdCB7CisJdTE2IHllYXI7CisJdTggbW9udGg7CisJdTggZGF5OworCXU4IGhvdXI7CisJdTggbWludXRlOworCXU4IHNlY29uZDsKKwl1OCBwYWQxOworCXUzMiBuYW5vc2Vjb25kOworCXMxNiB0aW1lem9uZTsKKwl1OCBkYXlsaWdodDsKKwl1OCBwYWQyOworfSBlZmlfdGltZV90OworCit0eXBlZGVmIHN0cnVjdCB7CisJdTMyIHJlc29sdXRpb247CisJdTMyIGFjY3VyYWN5OworCXU4IHNldHNfdG9femVybzsKK30gZWZpX3RpbWVfY2FwX3Q7CisKKy8qCisgKiBUeXBlcyBhbmQgZGVmaW5lcyBmb3IgRUZJIFJlc2V0U3lzdGVtCisgKi8KKyNkZWZpbmUgRUZJX1JFU0VUX0NPTEQgMAorI2RlZmluZSBFRklfUkVTRVRfV0FSTSAxCisjZGVmaW5lIEVGSV9SRVNFVF9TSFVURE9XTiAyCisKKy8qCisgKiBFRkkgUnVudGltZSBTZXJ2aWNlcyB0YWJsZQorICovCisjZGVmaW5lIEVGSV9SVU5USU1FX1NFUlZJQ0VTX1NJR05BVFVSRSAoKHU2NCkweDU2NTI0NTM1NDRlNTU1MlVMTCkKKyNkZWZpbmUgRUZJX1JVTlRJTUVfU0VSVklDRVNfUkVWSVNJT04gIDB4MDAwMTAwMDAKKwordHlwZWRlZiBzdHJ1Y3QgeworCWVmaV90YWJsZV9oZHJfdCBoZHI7CisJdW5zaWduZWQgbG9uZyBnZXRfdGltZTsKKwl1bnNpZ25lZCBsb25nIHNldF90aW1lOworCXVuc2lnbmVkIGxvbmcgZ2V0X3dha2V1cF90aW1lOworCXVuc2lnbmVkIGxvbmcgc2V0X3dha2V1cF90aW1lOworCXVuc2lnbmVkIGxvbmcgc2V0X3ZpcnR1YWxfYWRkcmVzc19tYXA7CisJdW5zaWduZWQgbG9uZyBjb252ZXJ0X3BvaW50ZXI7CisJdW5zaWduZWQgbG9uZyBnZXRfdmFyaWFibGU7CisJdW5zaWduZWQgbG9uZyBnZXRfbmV4dF92YXJpYWJsZTsKKwl1bnNpZ25lZCBsb25nIHNldF92YXJpYWJsZTsKKwl1bnNpZ25lZCBsb25nIGdldF9uZXh0X2hpZ2hfbW9ub19jb3VudDsKKwl1bnNpZ25lZCBsb25nIHJlc2V0X3N5c3RlbTsKK30gZWZpX3J1bnRpbWVfc2VydmljZXNfdDsKKwordHlwZWRlZiBlZmlfc3RhdHVzX3QgZWZpX2dldF90aW1lX3QgKGVmaV90aW1lX3QgKnRtLCBlZmlfdGltZV9jYXBfdCAqdGMpOwordHlwZWRlZiBlZmlfc3RhdHVzX3QgZWZpX3NldF90aW1lX3QgKGVmaV90aW1lX3QgKnRtKTsKK3R5cGVkZWYgZWZpX3N0YXR1c190IGVmaV9nZXRfd2FrZXVwX3RpbWVfdCAoZWZpX2Jvb2xfdCAqZW5hYmxlZCwgZWZpX2Jvb2xfdCAqcGVuZGluZywKKwkJCQkJICAgIGVmaV90aW1lX3QgKnRtKTsKK3R5cGVkZWYgZWZpX3N0YXR1c190IGVmaV9zZXRfd2FrZXVwX3RpbWVfdCAoZWZpX2Jvb2xfdCBlbmFibGVkLCBlZmlfdGltZV90ICp0bSk7Cit0eXBlZGVmIGVmaV9zdGF0dXNfdCBlZmlfZ2V0X3ZhcmlhYmxlX3QgKGVmaV9jaGFyMTZfdCAqbmFtZSwgZWZpX2d1aWRfdCAqdmVuZG9yLCB1MzIgKmF0dHIsCisJCQkJCSB1bnNpZ25lZCBsb25nICpkYXRhX3NpemUsIHZvaWQgKmRhdGEpOwordHlwZWRlZiBlZmlfc3RhdHVzX3QgZWZpX2dldF9uZXh0X3ZhcmlhYmxlX3QgKHVuc2lnbmVkIGxvbmcgKm5hbWVfc2l6ZSwgZWZpX2NoYXIxNl90ICpuYW1lLAorCQkJCQkgICAgICBlZmlfZ3VpZF90ICp2ZW5kb3IpOwordHlwZWRlZiBlZmlfc3RhdHVzX3QgZWZpX3NldF92YXJpYWJsZV90IChlZmlfY2hhcjE2X3QgKm5hbWUsIGVmaV9ndWlkX3QgKnZlbmRvciwgCisJCQkJCSB1bnNpZ25lZCBsb25nIGF0dHIsIHVuc2lnbmVkIGxvbmcgZGF0YV9zaXplLCAKKwkJCQkJIHZvaWQgKmRhdGEpOwordHlwZWRlZiBlZmlfc3RhdHVzX3QgZWZpX2dldF9uZXh0X2hpZ2hfbW9ub19jb3VudF90ICh1MzIgKmNvdW50KTsKK3R5cGVkZWYgdm9pZCBlZmlfcmVzZXRfc3lzdGVtX3QgKGludCByZXNldF90eXBlLCBlZmlfc3RhdHVzX3Qgc3RhdHVzLAorCQkJCSB1bnNpZ25lZCBsb25nIGRhdGFfc2l6ZSwgZWZpX2NoYXIxNl90ICpkYXRhKTsKK3R5cGVkZWYgZWZpX3N0YXR1c190IGVmaV9zZXRfdmlydHVhbF9hZGRyZXNzX21hcF90ICh1bnNpZ25lZCBsb25nIG1lbW9yeV9tYXBfc2l6ZSwKKwkJCQkJCXVuc2lnbmVkIGxvbmcgZGVzY3JpcHRvcl9zaXplLAorCQkJCQkJdTMyIGRlc2NyaXB0b3JfdmVyc2lvbiwKKwkJCQkJCWVmaV9tZW1vcnlfZGVzY190ICp2aXJ0dWFsX21hcCk7CisKKy8qCisgKiAgRUZJIENvbmZpZ3VyYXRpb24gVGFibGUgYW5kIEdVSUQgZGVmaW5pdGlvbnMKKyAqLworI2RlZmluZSBOVUxMX0dVSUQgXAorICAgIEVGSV9HVUlEKCAgMHgwMDAwMDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgKQorCisjZGVmaW5lIE1QU19UQUJMRV9HVUlEICAgIFwKKyAgICBFRklfR1VJRCggIDB4ZWI5ZDJkMmYsIDB4MmQ4OCwgMHgxMWQzLCAweDlhLCAweDE2LCAweDAsIDB4OTAsIDB4MjcsIDB4M2YsIDB4YzEsIDB4NGQgKQorCisjZGVmaW5lIEFDUElfVEFCTEVfR1VJRCAgICBcCisgICAgRUZJX0dVSUQoICAweGViOWQyZDMwLCAweDJkODgsIDB4MTFkMywgMHg5YSwgMHgxNiwgMHgwLCAweDkwLCAweDI3LCAweDNmLCAweGMxLCAweDRkICkKKworI2RlZmluZSBBQ1BJXzIwX1RBQkxFX0dVSUQgICAgXAorICAgIEVGSV9HVUlEKCAgMHg4ODY4ZTg3MSwgMHhlNGYxLCAweDExZDMsIDB4YmMsIDB4MjIsIDB4MCwgMHg4MCwgMHhjNywgMHgzYywgMHg4OCwgMHg4MSApCisKKyNkZWZpbmUgU01CSU9TX1RBQkxFX0dVSUQgICAgXAorICAgIEVGSV9HVUlEKCAgMHhlYjlkMmQzMSwgMHgyZDg4LCAweDExZDMsIDB4OWEsIDB4MTYsIDB4MCwgMHg5MCwgMHgyNywgMHgzZiwgMHhjMSwgMHg0ZCApCisKKyNkZWZpbmUgU0FMX1NZU1RFTV9UQUJMRV9HVUlEICAgIFwKKyAgICBFRklfR1VJRCggIDB4ZWI5ZDJkMzIsIDB4MmQ4OCwgMHgxMWQzLCAweDlhLCAweDE2LCAweDAsIDB4OTAsIDB4MjcsIDB4M2YsIDB4YzEsIDB4NGQgKQorCisjZGVmaW5lIEhDRFBfVEFCTEVfR1VJRAlcCisgICAgRUZJX0dVSUQoICAweGY5NTE5MzhkLCAweDYyMGIsIDB4NDJlZiwgMHg4MiwgMHg3OSwgMHhhOCwgMHg0YiwgMHg3OSwgMHg2MSwgMHg3OCwgMHg5OCApCisKKyNkZWZpbmUgVUdBX0lPX1BST1RPQ09MX0dVSUQgXAorICAgIEVGSV9HVUlEKCAgMHg2MWE0ZDQ5ZSwgMHg2ZjY4LCAweDRmMWIsIDB4YjksIDB4MjIsIDB4YTgsIDB4NmUsIDB4ZWQsIDB4YiwgMHg3LCAweGEyICkKKworI2RlZmluZSBFRklfR0xPQkFMX1ZBUklBQkxFX0dVSUQgXAorICAgIEVGSV9HVUlEKCAgMHg4YmU0ZGY2MSwgMHg5M2NhLCAweDExZDIsIDB4YWEsIDB4MGQsIDB4MDAsIDB4ZTAsIDB4OTgsIDB4MDMsIDB4MmIsIDB4OGMgKQorCit0eXBlZGVmIHN0cnVjdCB7CisJZWZpX2d1aWRfdCBndWlkOworCXVuc2lnbmVkIGxvbmcgdGFibGU7Cit9IGVmaV9jb25maWdfdGFibGVfdDsKKworI2RlZmluZSBFRklfU1lTVEVNX1RBQkxFX1NJR05BVFVSRSAoKHU2NCkweDU0NTM1OTUzMjA0OTQyNDlVTEwpCisjZGVmaW5lIEVGSV9TWVNURU1fVEFCTEVfUkVWSVNJT04gICgoMSA8PCAxNikgfCAwMCkKKwordHlwZWRlZiBzdHJ1Y3QgeworCWVmaV90YWJsZV9oZHJfdCBoZHI7CisJdW5zaWduZWQgbG9uZyBmd192ZW5kb3I7CS8qIHBoeXNpY2FsIGFkZHIgb2YgQ0hBUjE2IHZlbmRvciBzdHJpbmcgKi8KKwl1MzIgZndfcmV2aXNpb247CisJdW5zaWduZWQgbG9uZyBjb25faW5faGFuZGxlOworCXVuc2lnbmVkIGxvbmcgY29uX2luOworCXVuc2lnbmVkIGxvbmcgY29uX291dF9oYW5kbGU7CisJdW5zaWduZWQgbG9uZyBjb25fb3V0OworCXVuc2lnbmVkIGxvbmcgc3RkZXJyX2hhbmRsZTsKKwl1bnNpZ25lZCBsb25nIHN0ZGVycjsKKwllZmlfcnVudGltZV9zZXJ2aWNlc190ICpydW50aW1lOworCXVuc2lnbmVkIGxvbmcgYm9vdHRpbWU7CisJdW5zaWduZWQgbG9uZyBucl90YWJsZXM7CisJdW5zaWduZWQgbG9uZyB0YWJsZXM7Cit9IGVmaV9zeXN0ZW1fdGFibGVfdDsKKworc3RydWN0IGVmaV9tZW1vcnlfbWFwIHsKKwllZmlfbWVtb3J5X2Rlc2NfdCAqcGh5c19tYXA7CisJZWZpX21lbW9yeV9kZXNjX3QgKm1hcDsKKwlpbnQgbnJfbWFwOworCXVuc2lnbmVkIGxvbmcgZGVzY192ZXJzaW9uOworfTsKKworLyoKKyAqIEFsbCBydW50aW1lIGFjY2VzcyB0byBFRkkgZ29lcyB0aHJvdWdoIHRoaXMgc3RydWN0dXJlOgorICovCitleHRlcm4gc3RydWN0IGVmaSB7CisJZWZpX3N5c3RlbV90YWJsZV90ICpzeXN0YWI7CS8qIEVGSSBzeXN0ZW0gdGFibGUgKi8KKwl2b2lkICptcHM7CQkJLyogTVBTIHRhYmxlICovCisJdm9pZCAqYWNwaTsJCQkvKiBBQ1BJIHRhYmxlICAoSUE2NCBleHQgMC43MSkgKi8KKwl2b2lkICphY3BpMjA7CQkJLyogQUNQSSB0YWJsZSAgKEFDUEkgMi4wKSAqLworCXZvaWQgKnNtYmlvczsJCQkvKiBTTSBCSU9TIHRhYmxlICovCisJdm9pZCAqc2FsX3N5c3RhYjsJCS8qIFNBTCBzeXN0ZW0gdGFibGUgKi8KKwl2b2lkICpib290X2luZm87CQkvKiBib290IGluZm8gdGFibGUgKi8KKwl2b2lkICpoY2RwOwkJCS8qIEhDRFAgdGFibGUgKi8KKwl2b2lkICp1Z2E7CQkJLyogVUdBIHRhYmxlICovCisJZWZpX2dldF90aW1lX3QgKmdldF90aW1lOworCWVmaV9zZXRfdGltZV90ICpzZXRfdGltZTsKKwllZmlfZ2V0X3dha2V1cF90aW1lX3QgKmdldF93YWtldXBfdGltZTsKKwllZmlfc2V0X3dha2V1cF90aW1lX3QgKnNldF93YWtldXBfdGltZTsKKwllZmlfZ2V0X3ZhcmlhYmxlX3QgKmdldF92YXJpYWJsZTsKKwllZmlfZ2V0X25leHRfdmFyaWFibGVfdCAqZ2V0X25leHRfdmFyaWFibGU7CisJZWZpX3NldF92YXJpYWJsZV90ICpzZXRfdmFyaWFibGU7CisJZWZpX2dldF9uZXh0X2hpZ2hfbW9ub19jb3VudF90ICpnZXRfbmV4dF9oaWdoX21vbm9fY291bnQ7CisJZWZpX3Jlc2V0X3N5c3RlbV90ICpyZXNldF9zeXN0ZW07CisJZWZpX3NldF92aXJ0dWFsX2FkZHJlc3NfbWFwX3QgKnNldF92aXJ0dWFsX2FkZHJlc3NfbWFwOworfSBlZmk7CisKK3N0YXRpYyBpbmxpbmUgaW50CitlZmlfZ3VpZGNtcCAoZWZpX2d1aWRfdCBsZWZ0LCBlZmlfZ3VpZF90IHJpZ2h0KQoreworCXJldHVybiBtZW1jbXAoJmxlZnQsICZyaWdodCwgc2l6ZW9mIChlZmlfZ3VpZF90KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgY2hhciAqCitlZmlfZ3VpZF91bnBhcnNlKGVmaV9ndWlkX3QgKmd1aWQsIGNoYXIgKm91dCkKK3sKKwlzcHJpbnRmKG91dCwgIiUwMnglMDJ4JTAyeCUwMngtJTAyeCUwMngtJTAyeCUwMngtJTAyeCUwMngtJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4IiwKKwkJZ3VpZC0+YlszXSwgZ3VpZC0+YlsyXSwgZ3VpZC0+YlsxXSwgZ3VpZC0+YlswXSwKKwkJZ3VpZC0+Yls1XSwgZ3VpZC0+Yls0XSwgZ3VpZC0+Yls3XSwgZ3VpZC0+Yls2XSwKKwkJZ3VpZC0+Yls4XSwgZ3VpZC0+Yls5XSwgZ3VpZC0+YlsxMF0sIGd1aWQtPmJbMTFdLAorCQlndWlkLT5iWzEyXSwgZ3VpZC0+YlsxM10sIGd1aWQtPmJbMTRdLCBndWlkLT5iWzE1XSk7CisgICAgICAgIHJldHVybiBvdXQ7Cit9CisKK2V4dGVybiB2b2lkIGVmaV9pbml0ICh2b2lkKTsKK2V4dGVybiB2b2lkICplZmlfZ2V0X3BhbF9hZGRyICh2b2lkKTsKK2V4dGVybiB2b2lkIGVmaV9tYXBfcGFsX2NvZGUgKHZvaWQpOworZXh0ZXJuIHZvaWQgZWZpX21hcF9tZW1tYXAodm9pZCk7CitleHRlcm4gdm9pZCBlZmlfbWVtbWFwX3dhbGsgKGVmaV9mcmVlbWVtX2NhbGxiYWNrX3QgY2FsbGJhY2ssIHZvaWQgKmFyZyk7CitleHRlcm4gdm9pZCBlZmlfZ2V0dGltZW9mZGF5IChzdHJ1Y3QgdGltZXNwZWMgKnRzKTsKK2V4dGVybiB2b2lkIGVmaV9lbnRlcl92aXJ0dWFsX21vZGUgKHZvaWQpOwkvKiBzd2l0Y2ggRUZJIHRvIHZpcnR1YWwgbW9kZSwgaWYgcG9zc2libGUgKi8KK2V4dGVybiB1NjQgZWZpX2dldF9pb2Jhc2UgKHZvaWQpOworZXh0ZXJuIHUzMiBlZmlfbWVtX3R5cGUgKHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyKTsKK2V4dGVybiB1NjQgZWZpX21lbV9hdHRyaWJ1dGVzICh1bnNpZ25lZCBsb25nIHBoeXNfYWRkcik7CitleHRlcm4gaW50IF9faW5pdCBlZmlfdWFydF9jb25zb2xlX29ubHkgKHZvaWQpOworZXh0ZXJuIHZvaWQgZWZpX2luaXRpYWxpemVfaW9tZW1fcmVzb3VyY2VzKHN0cnVjdCByZXNvdXJjZSAqY29kZV9yZXNvdXJjZSwKKwkJCQkJc3RydWN0IHJlc291cmNlICpkYXRhX3Jlc291cmNlKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9faW5pdCBlZmlfZ2V0X3RpbWUodm9pZCk7CitleHRlcm4gaW50IF9faW5pdCBlZmlfc2V0X3J0Y19tbXNzKHVuc2lnbmVkIGxvbmcgbm93dGltZSk7CitleHRlcm4gc3RydWN0IGVmaV9tZW1vcnlfbWFwIG1lbW1hcDsKKworLyoqCisgKiBlZmlfcmFuZ2VfaXNfd2MgLSBjaGVjayB0aGUgV0MgYml0IG9uIGFuIGFkZHJlc3MgcmFuZ2UKKyAqIEBzdGFydDogc3RhcnRpbmcga3ZpcnQgYWRkcmVzcworICogQGxlbjogbGVuZ3RoIG9mIHJhbmdlCisgKgorICogQ29uc3VsdCB0aGUgRUZJIG1lbW9yeSBtYXAgYW5kIG1ha2Ugc3VyZSBpdCdzIG9rIHRvIHNldCB0aGlzIHJhbmdlIFdDLgorICogUmV0dXJucyB0cnVlIG9yIGZhbHNlLgorICovCitzdGF0aWMgaW5saW5lIGludCBlZmlfcmFuZ2VfaXNfd2ModW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBsZW4pCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpICs9ICgxVUwgPDwgRUZJX1BBR0VfU0hJRlQpKSB7CisJCXVuc2lnbmVkIGxvbmcgcGFkZHIgPSBfX3BhKHN0YXJ0ICsgaSk7CisJCWlmICghKGVmaV9tZW1fYXR0cmlidXRlcyhwYWRkcikgJiBFRklfTUVNT1JZX1dDKSkKKwkJCXJldHVybiAwOworCX0KKwkvKiBUaGUgcmFuZ2UgY2hlY2tlZCBvdXQgKi8KKwlyZXR1cm4gMTsKK30KKworI2lmZGVmIENPTkZJR19FRklfUENEUAorZXh0ZXJuIGludCBfX2luaXQgZWZpX3NldHVwX3BjZHBfY29uc29sZShjaGFyICopOworI2VuZGlmCisKKy8qCisgKiBXZSBwbGF5IGdhbWVzIHdpdGggZWZpX2VuYWJsZWQgc28gdGhhdCB0aGUgY29tcGlsZXIgd2lsbCwgaWYgcG9zc2libGUsIHJlbW92ZQorICogRUZJLXJlbGF0ZWQgY29kZSBhbHRvZ2V0aGVyLgorICovCisjaWZkZWYgQ09ORklHX0VGSQorIyBpZmRlZiBDT05GSUdfWDg2CisgICBleHRlcm4gaW50IGVmaV9lbmFibGVkOworIyBlbHNlCisjICBkZWZpbmUgZWZpX2VuYWJsZWQgMQorIyBlbmRpZgorI2Vsc2UKKyMgZGVmaW5lIGVmaV9lbmFibGVkIDAKKyNlbmRpZgorCisvKgorICogVmFyaWFibGUgQXR0cmlidXRlcworICovCisjZGVmaW5lIEVGSV9WQVJJQUJMRV9OT05fVk9MQVRJTEUgICAgICAgMHgwMDAwMDAwMDAwMDAwMDAxCisjZGVmaW5lIEVGSV9WQVJJQUJMRV9CT09UU0VSVklDRV9BQ0NFU1MgMHgwMDAwMDAwMDAwMDAwMDAyCisjZGVmaW5lIEVGSV9WQVJJQUJMRV9SVU5USU1FX0FDQ0VTUyAgICAgMHgwMDAwMDAwMDAwMDAwMDA0CisKKy8qCisgKiBFRkkgRGV2aWNlIFBhdGggaW5mb3JtYXRpb24KKyAqLworI2RlZmluZSBFRklfREVWX0hXCQkJMHgwMQorI2RlZmluZSAgRUZJX0RFVl9QQ0kJCQkJIDEKKyNkZWZpbmUgIEVGSV9ERVZfUENDQVJECQkJCSAyCisjZGVmaW5lICBFRklfREVWX01FTV9NQVBQRUQJCQkgMworI2RlZmluZSAgRUZJX0RFVl9WRU5ET1IJCQkJIDQKKyNkZWZpbmUgIEVGSV9ERVZfQ09OVFJPTExFUgkJCSA1CisjZGVmaW5lIEVGSV9ERVZfQUNQSQkJCTB4MDIKKyNkZWZpbmUgICBFRklfREVWX0JBU0lDX0FDUEkJCQkgMQorI2RlZmluZSAgIEVGSV9ERVZfRVhQQU5ERURfQUNQSQkJCSAyCisjZGVmaW5lIEVGSV9ERVZfTVNHCQkJMHgwMworI2RlZmluZSAgIEVGSV9ERVZfTVNHX0FUQVBJCQkJIDEKKyNkZWZpbmUgICBFRklfREVWX01TR19TQ1NJCQkJIDIKKyNkZWZpbmUgICBFRklfREVWX01TR19GQwkJCSAzCisjZGVmaW5lICAgRUZJX0RFVl9NU0dfMTM5NAkJCSA0CisjZGVmaW5lICAgRUZJX0RFVl9NU0dfVVNCCQkJIDUKKyNkZWZpbmUgICBFRklfREVWX01TR19VU0JfQ0xBU1MJCQkxNQorI2RlZmluZSAgIEVGSV9ERVZfTVNHX0kyMAkJCSA2CisjZGVmaW5lICAgRUZJX0RFVl9NU0dfTUFDCQkJMTEKKyNkZWZpbmUgICBFRklfREVWX01TR19JUFY0CQkJMTIKKyNkZWZpbmUgICBFRklfREVWX01TR19JUFY2CQkJMTMKKyNkZWZpbmUgICBFRklfREVWX01TR19JTkZJTklCQU5ECQkgOQorI2RlZmluZSAgIEVGSV9ERVZfTVNHX1VBUlQJCQkxNAorI2RlZmluZSAgIEVGSV9ERVZfTVNHX1ZFTkRPUgkJCTEwCisjZGVmaW5lIEVGSV9ERVZfTUVESUEJCQkweDA0CisjZGVmaW5lICAgRUZJX0RFVl9NRURJQV9IQVJEX0RSSVZFCQkgMQorI2RlZmluZSAgIEVGSV9ERVZfTUVESUFfQ0RST00JCQkgMgorI2RlZmluZSAgIEVGSV9ERVZfTUVESUFfVkVORE9SCQkJIDMKKyNkZWZpbmUgICBFRklfREVWX01FRElBX0ZJTEUJCQkgNAorI2RlZmluZSAgIEVGSV9ERVZfTUVESUFfUFJPVE9DT0wJCSA1CisjZGVmaW5lIEVGSV9ERVZfQklPU19CT09UCQkweDA1CisjZGVmaW5lIEVGSV9ERVZfRU5EX1BBVEgJCTB4N0YKKyNkZWZpbmUgRUZJX0RFVl9FTkRfUEFUSDIJCTB4RkYKKyNkZWZpbmUgICBFRklfREVWX0VORF9JTlNUQU5DRQkJCTB4MDEKKyNkZWZpbmUgICBFRklfREVWX0VORF9FTlRJUkUJCQkweEZGCisKK3N0cnVjdCBlZmlfZ2VuZXJpY19kZXZfcGF0aCB7CisJdTggdHlwZTsKKwl1OCBzdWJfdHlwZTsKKwl1MTYgbGVuZ3RoOworfSBfX2F0dHJpYnV0ZSAoKHBhY2tlZCkpOworCisjZW5kaWYgLyogX0xJTlVYX0VGSV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Vmc19kaXIuaCBiL2luY2x1ZGUvbGludXgvZWZzX2Rpci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwOWVjMDEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2Vmc19kaXIuaApAQCAtMCwwICsxLDQyIEBACisvKgorICogZWZzX2Rpci5oCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk5IEFsIFNtaXRoCisgKi8KKworI2lmbmRlZiBfX0VGU19ESVJfSF9fCisjZGVmaW5lIF9fRUZTX0RJUl9IX18KKworI2RlZmluZSBFRlNfRElSQlNJWkVfQklUUwlFRlNfQkxPQ0tTSVpFX0JJVFMKKyNkZWZpbmUgRUZTX0RJUkJTSVpFCQkoMSA8PCBFRlNfRElSQlNJWkVfQklUUykKKworc3RydWN0IGVmc19kZW50cnkgeworCV9fYmUzMgkJaW5vZGU7CisJdW5zaWduZWQgY2hhcgluYW1lbGVuOworCWNoYXIJCW5hbWVbM107Cit9OworCisjZGVmaW5lIEVGU19ERU5UU0laRQkoc2l6ZW9mKHN0cnVjdCBlZnNfZGVudHJ5KSAtIDMgKyAxKQorI2RlZmluZSBFRlNfTUFYTkFNRUxFTiAgKCgxIDw8IChzaXplb2YoY2hhcikgKiA4KSkgLSAxKQorCisjZGVmaW5lIEVGU19ESVJCTEtfSEVBREVSU0laRQk0CisjZGVmaW5lIEVGU19ESVJCTEtfTUFHSUMJMHhiZWVmCS8qIG1vbyAqLworCitzdHJ1Y3QgZWZzX2RpciB7CisJX19iZTE2CW1hZ2ljOworCXVuc2lnbmVkIGNoYXIJZmlyc3R1c2VkOworCXVuc2lnbmVkIGNoYXIJc2xvdHM7CisKKwl1bnNpZ25lZCBjaGFyCXNwYWNlW0VGU19ESVJCU0laRSAtIEVGU19ESVJCTEtfSEVBREVSU0laRV07Cit9OworCisjZGVmaW5lIEVGU19NQVhFTlRTIFwKKwkoKEVGU19ESVJCU0laRSAtIEVGU19ESVJCTEtfSEVBREVSU0laRSkgLyBcCisJIChFRlNfREVOVFNJWkUgKyBzaXplb2YoY2hhcikpKQorCisjZGVmaW5lIEVGU19TTE9UQVQoZGlyLCBzbG90KSBFRlNfUkVBTE9GRigoZGlyKS0+c3BhY2Vbc2xvdF0pCisKKyNkZWZpbmUgRUZTX1JFQUxPRkYob2Zmc2V0KSAoKG9mZnNldCA8PCAxKSkKKworI2VuZGlmIC8qIF9fRUZTX0RJUl9IX18gKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9lZnNfZnMuaCBiL2luY2x1ZGUvbGludXgvZWZzX2ZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhmMzY4YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvZWZzX2ZzLmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIGVmc19mcy5oCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk5IEFsIFNtaXRoCisgKgorICogUG9ydGlvbnMgZGVyaXZlZCBmcm9tIHdvcmsgKGMpIDE5OTUsMTk5NiBDaHJpc3RpYW4gVm9nZWxnc2FuZy4KKyAqLworCisjaWZuZGVmIF9fRUZTX0ZTX0hfXworI2RlZmluZSBfX0VGU19GU19IX18KKworI2RlZmluZSBFRlNfVkVSU0lPTiAiMS4wYSIKKworc3RhdGljIGNvbnN0IGNoYXIgY3BydFtdID0gIkVGUzogIkVGU19WRVJTSU9OIiAtIChjKSAxOTk5IEFsIFNtaXRoIDxBbC5TbWl0aEBhZXNjaGkuY2guZXUub3JnPiI7CisKKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorCisvKiAxIGJsb2NrIGlzIDUxMiBieXRlcyAqLworI2RlZmluZQlFRlNfQkxPQ0tTSVpFX0JJVFMJOQorI2RlZmluZQlFRlNfQkxPQ0tTSVpFCQkoMSA8PCBFRlNfQkxPQ0tTSVpFX0JJVFMpCisKKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vmc19mc19pLmg+CisjaW5jbHVkZSA8bGludXgvZWZzX2ZzX3NiLmg+CisjaW5jbHVkZSA8bGludXgvZWZzX2Rpci5oPgorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBlZnNfaW5vZGVfaW5mbyAqSU5PREVfSU5GTyhzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXJldHVybiBjb250YWluZXJfb2YoaW5vZGUsIHN0cnVjdCBlZnNfaW5vZGVfaW5mbywgdmZzX2lub2RlKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZWZzX3NiX2luZm8gKlNVUEVSX0lORk8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlyZXR1cm4gc2ItPnNfZnNfaW5mbzsKK30KKworc3RydWN0IHN0YXRmczsKKworZXh0ZXJuIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGVmc19kaXJfaW5vZGVfb3BlcmF0aW9uczsKK2V4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGVmc19kaXJfb3BlcmF0aW9uczsKK2V4dGVybiBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGVmc19zeW1saW5rX2FvcHM7CisKK2V4dGVybiB2b2lkIGVmc19yZWFkX2lub2RlKHN0cnVjdCBpbm9kZSAqKTsKK2V4dGVybiBlZnNfYmxvY2tfdCBlZnNfbWFwX2Jsb2NrKHN0cnVjdCBpbm9kZSAqLCBlZnNfYmxvY2tfdCk7CitleHRlcm4gaW50IGVmc19nZXRfYmxvY2soc3RydWN0IGlub2RlICosIHNlY3Rvcl90LCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwgaW50KTsKKworZXh0ZXJuIHN0cnVjdCBkZW50cnkgKmVmc19sb29rdXAoc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IG5hbWVpZGF0YSAqKTsKK2V4dGVybiBzdHJ1Y3QgZGVudHJ5ICplZnNfZ2V0X3BhcmVudChzdHJ1Y3QgZGVudHJ5ICopOworZXh0ZXJuIGludCBlZnNfYm1hcChzdHJ1Y3QgaW5vZGUgKiwgaW50KTsKKworI2VuZGlmIC8qIF9fRUZTX0ZTX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9lZnNfZnNfaS5oIGIvaW5jbHVkZS9saW51eC9lZnNfZnNfaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxN2M0NzQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2Vmc19mc19pLmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIGVmc19mc19pLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTkgQWwgU21pdGgKKyAqCisgKiBQb3J0aW9ucyBkZXJpdmVkIGZyb20gSVJJWCBoZWFkZXIgZmlsZXMgKGMpIDE5ODggU2lsaWNvbiBHcmFwaGljcworICovCisKKyNpZm5kZWYJX19FRlNfRlNfSV9IX18KKyNkZWZpbmUJX19FRlNfRlNfSV9IX18KKwordHlwZWRlZglpbnQzMl90CQllZnNfYmxvY2tfdDsKK3R5cGVkZWYgdWludDMyX3QJZWZzX2lub190OworCisjZGVmaW5lCUVGU19ESVJFQ1RFWFRFTlRTCTEyCisKKy8qCisgKiBsYXlvdXQgb2YgYW4gZXh0ZW50LCBpbiBtZW1vcnkgYW5kIG9uIGRpc2suIDggYnl0ZXMgZXhhY3RseS4KKyAqLwordHlwZWRlZiB1bmlvbiBleHRlbnRfdSB7CisJdW5zaWduZWQgY2hhciByYXdbOF07CisJc3RydWN0IGV4dGVudF9zIHsKKwkJdW5zaWduZWQgaW50CWV4X21hZ2ljOjg7CS8qIG1hZ2ljICMgKHplcm8pICovCisJCXVuc2lnbmVkIGludAlleF9ibjoyNDsJLyogYmFzaWMgYmxvY2sgKi8KKwkJdW5zaWduZWQgaW50CWV4X2xlbmd0aDo4OwkvKiBudW1ibG9ja3MgaW4gdGhpcyBleHRlbnQgKi8KKwkJdW5zaWduZWQgaW50CWV4X29mZnNldDoyNDsJLyogbG9naWNhbCBvZmZzZXQgaW50byBmaWxlICovCisJfSBjb29rZWQ7Cit9IGVmc19leHRlbnQ7CisKK3R5cGVkZWYgc3RydWN0IGVkZXZzIHsKKwlfX2JlMTYJCW9kZXY7CisJX19iZTMyCQluZGV2OworfSBlZnNfZGV2czsKKworLyoKKyAqIGV4dGVudCBiYXNlZCBmaWxlc3lzdGVtIGlub2RlIGFzIGl0IGFwcGVhcnMgb24gZGlzay4gIFRoZSBlZnMgaW5vZGUKKyAqIGlzIGV4YWN0bHkgMTI4IGJ5dGVzIGxvbmcuCisgKi8KK3N0cnVjdAllZnNfZGlub2RlIHsKKwlfX2JlMTYJCWRpX21vZGU7CS8qIG1vZGUgYW5kIHR5cGUgb2YgZmlsZSAqLworCV9fYmUxNgkJZGlfbmxpbms7CS8qIG51bWJlciBvZiBsaW5rcyB0byBmaWxlICovCisJX19iZTE2CQlkaV91aWQ7CQkvKiBvd25lcidzIHVzZXIgaWQgKi8KKwlfX2JlMTYJCWRpX2dpZDsJCS8qIG93bmVyJ3MgZ3JvdXAgaWQgKi8KKwlfX2JlMzIJCWRpX3NpemU7CS8qIG51bWJlciBvZiBieXRlcyBpbiBmaWxlICovCisJX19iZTMyCQlkaV9hdGltZTsJLyogdGltZSBsYXN0IGFjY2Vzc2VkICovCisJX19iZTMyCQlkaV9tdGltZTsJLyogdGltZSBsYXN0IG1vZGlmaWVkICovCisJX19iZTMyCQlkaV9jdGltZTsJLyogdGltZSBjcmVhdGVkICovCisJX19iZTMyCQlkaV9nZW47CQkvKiBnZW5lcmF0aW9uIG51bWJlciAqLworCV9fYmUxNgkJZGlfbnVtZXh0ZW50czsJLyogIyBvZiBleHRlbnRzICovCisJdV9jaGFyCQlkaV92ZXJzaW9uOwkvKiB2ZXJzaW9uIG9mIGlub2RlICovCisJdV9jaGFyCQlkaV9zcGFyZTsJLyogc3BhcmUgLSB1c2VkIGJ5IEFGUyAqLworCXVuaW9uIGRpX2FkZHIgeworCQllZnNfZXh0ZW50CWRpX2V4dGVudHNbRUZTX0RJUkVDVEVYVEVOVFNdOworCQllZnNfZGV2cwlkaV9kZXY7CS8qIGRldmljZSBmb3IgSUZDSFIvSUZCTEsgKi8KKwl9IGRpX3U7Cit9OworCisvKiBlZnMgaW5vZGUgc3RvcmFnZSBpbiBtZW1vcnkgKi8KK3N0cnVjdCBlZnNfaW5vZGVfaW5mbyB7CisJaW50CQludW1leHRlbnRzOworCWludAkJbGFzdGV4dGVudDsKKworCWVmc19leHRlbnQJZXh0ZW50c1tFRlNfRElSRUNURVhURU5UU107CisJc3RydWN0IGlub2RlCXZmc19pbm9kZTsKK307CisKKyNlbmRpZgkvKiBfX0VGU19GU19JX0hfXyAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Vmc19mc19zYi5oIGIvaW5jbHVkZS9saW51eC9lZnNfZnNfc2IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzYwODhiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9lZnNfZnNfc2IuaApAQCAtMCwwICsxLDYyIEBACisvKgorICogZWZzX2ZzX3NiLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTkgQWwgU21pdGgKKyAqCisgKiBQb3J0aW9ucyBkZXJpdmVkIGZyb20gSVJJWCBoZWFkZXIgZmlsZXMgKGMpIDE5ODggU2lsaWNvbiBHcmFwaGljcworICovCisKKyNpZm5kZWYgX19FRlNfRlNfU0JfSF9fCisjZGVmaW5lIF9fRUZTX0ZTX1NCX0hfXworCisvKiBzdGF0ZnMoKSBtYWdpYyBudW1iZXIgZm9yIEVGUyAqLworI2RlZmluZSBFRlNfU1VQRVJfTUFHSUMJMHg0MTRBNTMKKworLyogRUZTIHN1cGVyYmxvY2sgbWFnaWMgbnVtYmVycyAqLworI2RlZmluZSBFRlNfTUFHSUMJMHgwNzI5NTkKKyNkZWZpbmUgRUZTX05FV01BR0lDCTB4MDcyOTVhCisKKyNkZWZpbmUgSVNfRUZTX01BR0lDKHgpCSgoeCA9PSBFRlNfTUFHSUMpIHx8ICh4ID09IEVGU19ORVdNQUdJQykpCisKKyNkZWZpbmUgRUZTX1NVUEVSCQkxCisjZGVmaW5lIEVGU19ST09USU5PREUJCTIKKworLyogZWZzIHN1cGVyYmxvY2sgb24gZGlzayAqLworc3RydWN0IGVmc19zdXBlciB7CisJX19iZTMyCQlmc19zaXplOyAgICAgICAgLyogc2l6ZSBvZiBmaWxlc3lzdGVtLCBpbiBzZWN0b3JzICovCisJX19iZTMyCQlmc19maXJzdGNnOyAgICAgLyogYmIgb2Zmc2V0IHRvIGZpcnN0IGNnICovCisJX19iZTMyCQlmc19jZ2ZzaXplOyAgICAgLyogc2l6ZSBvZiBjeWxpbmRlciBncm91cCBpbiBiYidzICovCisJX19iZTE2CQlmc19jZ2lzaXplOyAgICAgLyogYmIncyBvZiBpbm9kZXMgcGVyIGN5bGluZGVyIGdyb3VwICovCisJX19iZTE2CQlmc19zZWN0b3JzOyAgICAgLyogc2VjdG9ycyBwZXIgdHJhY2sgKi8KKwlfX2JlMTYJCWZzX2hlYWRzOyAgICAgICAvKiBoZWFkcyBwZXIgY3lsaW5kZXIgKi8KKwlfX2JlMTYJCWZzX25jZzsgICAgICAgICAvKiAjIG9mIGN5bGluZGVyIGdyb3VwcyBpbiBmaWxlc3lzdGVtICovCisJX19iZTE2CQlmc19kaXJ0eTsgICAgICAgLyogZnMgbmVlZHMgdG8gYmUgZnNjaydkICovCisJX19iZTMyCQlmc190aW1lOyAgICAgICAgLyogbGFzdCBzdXBlci1ibG9jayB1cGRhdGUgKi8KKwlfX2JlMzIJCWZzX21hZ2ljOyAgICAgICAvKiBtYWdpYyBudW1iZXIgKi8KKwljaGFyCQlmc19mbmFtZVs2XTsgICAgLyogZmlsZSBzeXN0ZW0gbmFtZSAqLworCWNoYXIJCWZzX2ZwYWNrWzZdOyAgICAvKiBmaWxlIHN5c3RlbSBwYWNrIG5hbWUgKi8KKwlfX2JlMzIJCWZzX2Jtc2l6ZTsgICAgICAvKiBzaXplIG9mIGJpdG1hcCBpbiBieXRlcyAqLworCV9fYmUzMgkJZnNfdGZyZWU7ICAgICAgIC8qIHRvdGFsIGZyZWUgZGF0YSBibG9ja3MgKi8KKwlfX2JlMzIJCWZzX3Rpbm9kZTsgICAgICAvKiB0b3RhbCBmcmVlIGlub2RlcyAqLworCV9fYmUzMgkJZnNfYm1ibG9jazsgICAgIC8qIGJpdG1hcCBsb2NhdGlvbi4gKi8KKwlfX2JlMzIJCWZzX3JlcGxzYjsgICAgICAvKiBMb2NhdGlvbiBvZiByZXBsaWNhdGVkIHN1cGVyYmxvY2suICovCisJX19iZTMyCQlmc19sYXN0aWFsbG9jOyAgLyogbGFzdCBhbGxvY2F0ZWQgaW5vZGUgKi8KKwljaGFyCQlmc19zcGFyZVsyMF07ICAgLyogc3BhY2UgZm9yIGV4cGFuc2lvbiAtIE1VU1QgQkUgWkVSTyAqLworCV9fYmUzMgkJZnNfY2hlY2tzdW07ICAgIC8qIGNoZWNrc3VtIG9mIHZvbHVtZSBwb3J0aW9uIG9mIGZzICovCit9OworCisvKiBlZnMgc3VwZXJibG9jayBpbmZvcm1hdGlvbiBpbiBtZW1vcnkgKi8KK3N0cnVjdCBlZnNfc2JfaW5mbyB7CisJX191MzIJZnNfbWFnaWM7CS8qIHN1cGVyYmxvY2sgbWFnaWMgbnVtYmVyICovCisJX191MzIJZnNfc3RhcnQ7CS8qIGZpcnN0IGJsb2NrIG9mIGZpbGVzeXN0ZW0gKi8KKwlfX3UzMglmaXJzdF9ibG9jazsJLyogZmlyc3QgZGF0YSBibG9jayBpbiBmaWxlc3lzdGVtICovCisJX191MzIJdG90YWxfYmxvY2tzOwkvKiB0b3RhbCBudW1iZXIgb2YgYmxvY2tzIGluIGZpbGVzeXN0ZW0gKi8KKwlfX3UzMglncm91cF9zaXplOwkvKiAjIG9mIGJsb2NrcyBhIGdyb3VwIGNvbnNpc3RzIG9mICovIAorCV9fdTMyCWRhdGFfZnJlZTsJLyogIyBvZiBmcmVlIGRhdGEgYmxvY2tzICovCisJX191MzIJaW5vZGVfZnJlZTsJLyogIyBvZiBmcmVlIGlub2RlcyAqLworCV9fdTE2CWlub2RlX2Jsb2NrczsJLyogIyBvZiBibG9ja3MgdXNlZCBmb3IgaW5vZGVzIGluIGV2ZXJ5IGdycCAqLworCV9fdTE2CXRvdGFsX2dyb3VwczsJLyogIyBvZiBncm91cHMgKi8KK307CisKKyNlbmRpZiAvKiBfX0VGU19GU19TQl9IX18gKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9lZnNfdmguaCBiL2luY2x1ZGUvbGludXgvZWZzX3ZoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGExMTE1MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvZWZzX3ZoLmgKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIGVmc192aC5oCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk5IEFsIFNtaXRoCisgKgorICogUG9ydGlvbnMgZGVyaXZlZCBmcm9tIElSSVggaGVhZGVyIGZpbGVzIChjKSAxOTg1IE1JUFMgQ29tcHV0ZXIgU3lzdGVtcywgSW5jLgorICovCisKKyNpZm5kZWYgX19FRlNfVkhfSF9fCisjZGVmaW5lIF9fRUZTX1ZIX0hfXworCisjZGVmaW5lIFZITUFHSUMJCTB4YmU1YTk0MQkvKiB2b2x1bWUgaGVhZGVyIG1hZ2ljIG51bWJlciAqLworI2RlZmluZSBOUEFSVEFCCQkxNgkJLyogMTYgdW5peCBwYXJ0aXRpb25zICovCisjZGVmaW5lIE5WRElSCQkxNQkJLyogbWF4IG9mIDE1IGRpcmVjdG9yeSBlbnRyaWVzICovCisjZGVmaW5lIEJGTkFNRVNJWkUJMTYJCS8qIG1heCAxNiBjaGFycyBpbiBib290IGZpbGUgbmFtZSAqLworI2RlZmluZSBWRE5BTUVTSVpFCTgKKworc3RydWN0IHZvbHVtZV9kaXJlY3RvcnkgeworCWNoYXIJdmRfbmFtZVtWRE5BTUVTSVpFXTsJLyogbmFtZSAqLworCV9fYmUzMgl2ZF9sYm47CQkJLyogbG9naWNhbCBibG9jayBudW1iZXIgKi8KKwlfX2JlMzIJdmRfbmJ5dGVzOwkJLyogZmlsZSBsZW5ndGggaW4gYnl0ZXMgKi8KK307CisKK3N0cnVjdCBwYXJ0aXRpb25fdGFibGUgewkvKiBvbmUgcGVyIGxvZ2ljYWwgcGFydGl0aW9uICovCisJX19iZTMyCXB0X25ibGtzOwkvKiAjIG9mIGxvZ2ljYWwgYmxrcyBpbiBwYXJ0aXRpb24gKi8KKwlfX2JlMzIJcHRfZmlyc3RsYm47CS8qIGZpcnN0IGxibiBvZiBwYXJ0aXRpb24gKi8KKwlfX2JlMzIJcHRfdHlwZTsJLyogdXNlIG9mIHBhcnRpdGlvbiAqLworfTsKKworc3RydWN0IHZvbHVtZV9oZWFkZXIgeworCV9fYmUzMgl2aF9tYWdpYzsJCQkvKiBpZGVudGlmaWVzIHZvbHVtZSBoZWFkZXIgKi8KKwlfX2JlMTYJdmhfcm9vdHB0OwkJCS8qIHJvb3QgcGFydGl0aW9uIG51bWJlciAqLworCV9fYmUxNgl2aF9zd2FwcHQ7CQkJLyogc3dhcCBwYXJ0aXRpb24gbnVtYmVyICovCisJY2hhcgl2aF9ib290ZmlsZVtCRk5BTUVTSVpFXTsJLyogbmFtZSBvZiBmaWxlIHRvIGJvb3QgKi8KKwljaGFyCXBhZFs0OF07CQkJLyogZGV2aWNlIHBhcmFtIHNwYWNlICovCisJc3RydWN0IHZvbHVtZV9kaXJlY3RvcnkgdmhfdmRbTlZESVJdOwkvKiBvdGhlciB2b2wgaGRyIGNvbnRlbnRzICovCisJc3RydWN0IHBhcnRpdGlvbl90YWJsZSAgdmhfcHRbTlBBUlRBQl07CS8qIGRldmljZSBwYXJ0aXRpb24gbGF5b3V0ICovCisJX19iZTMyCXZoX2NzdW07CQkJLyogdm9sdW1lIGhlYWRlciBjaGVja3N1bSAqLworCV9fYmUzMgl2aF9maWxsOwkJCS8qIGZpbGwgb3V0IHRvIDUxMiBieXRlcyAqLworfTsKKworLyogcGFydGl0aW9uIHR5cGUgc3lzdiBpcyB1c2VkIGZvciBFRlMgZm9ybWF0IENELVJPTSBwYXJ0aXRpb25zICovCisjZGVmaW5lIFNHSV9TWVNWCTB4MDUKKyNkZWZpbmUgU0dJX0VGUwkJMHgwNworI2RlZmluZSBJU19FRlMoeCkJKCgoeCkgPT0gU0dJX0VGUykgfHwgKCh4KSA9PSBTR0lfU1lTVikpCisKK3N0cnVjdCBwdF90eXBlcyB7CisJaW50CXB0X3R5cGU7CisJY2hhcgkqcHRfbmFtZTsKK307CisKKyNlbmRpZiAvKiBfX0VGU19WSF9IX18gKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9laXNhLmggYi9pbmNsdWRlL2xpbnV4L2Vpc2EuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDc5MjQyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9laXNhLmgKQEAgLTAsMCArMSwxMDcgQEAKKyNpZm5kZWYgX0xJTlVYX0VJU0FfSAorI2RlZmluZSBfTElOVVhfRUlTQV9ICisKKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKworI2RlZmluZSBFSVNBX1NJR19MRU4gICA4CisjZGVmaW5lIEVJU0FfTUFYX1NMT1RTIDgKKworI2RlZmluZSBFSVNBX01BWF9SRVNPVVJDRVMgNAorCisvKiBBIGZldyBFSVNBIGNvbnN0YW50cy9vZmZzZXRzLi4uICovCisKKyNkZWZpbmUgRUlTQV9ETUExX1NUQVRVUyAgICAgICAgICAgIDgKKyNkZWZpbmUgRUlTQV9JTlQxX0NUUkwgICAgICAgICAgIDB4MjAKKyNkZWZpbmUgRUlTQV9JTlQxX01BU0sgICAgICAgICAgIDB4MjEKKyNkZWZpbmUgRUlTQV9JTlQyX0NUUkwgICAgICAgICAgIDB4QTAKKyNkZWZpbmUgRUlTQV9JTlQyX01BU0sgICAgICAgICAgIDB4QTEKKyNkZWZpbmUgRUlTQV9ETUEyX1NUQVRVUyAgICAgICAgIDB4RDAKKyNkZWZpbmUgRUlTQV9ETUEyX1dSSVRFX1NJTkdMRSAgIDB4RDQKKyNkZWZpbmUgRUlTQV9FWFRfTk1JX1JFU0VUX0NUUkwgMHg0NjEKKyNkZWZpbmUgRUlTQV9JTlQxX0VER0VfTEVWRUwgICAgMHg0RDAKKyNkZWZpbmUgRUlTQV9JTlQyX0VER0VfTEVWRUwgICAgMHg0RDEKKyNkZWZpbmUgRUlTQV9WRU5ET1JfSURfT0ZGU0VUICAgMHhDODAKKyNkZWZpbmUgRUlTQV9DT05GSUdfT0ZGU0VUICAgICAgMHhDODQKKworI2RlZmluZSBFSVNBX0NPTkZJR19FTkFCTEVEICAgICAgICAgMQorI2RlZmluZSBFSVNBX0NPTkZJR19GT1JDRUQgICAgICAgICAgMgorCisvKiBUaGUgRUlTQSBzaWduYXR1cmUsIGluIEFTQ0lJIGZvcm0sIG51bGwgdGVybWluYXRlZCAqLworc3RydWN0IGVpc2FfZGV2aWNlX2lkIHsKKwljaGFyICAgICAgICAgIHNpZ1tFSVNBX1NJR19MRU5dOworCXVuc2lnbmVkIGxvbmcgZHJpdmVyX2RhdGE7Cit9OworCisvKiBUaGVyZSBpcyBub3QgbXVjaCB3ZSBjYW4gc2F5IGFib3V0IGFuIEVJU0EgZGV2aWNlLCBhcGFydCBmcm9tCisgKiBzaWduYXR1cmUsIHNsb3QgbnVtYmVyLCBhbmQgYmFzZSBhZGRyZXNzLiBkbWFfbWFzayBpcyBzZXQgYnkKKyAqIGRlZmF1bHQgdG8gcGFyZW50IGRldmljZSBtYXNrLi4qLworCitzdHJ1Y3QgZWlzYV9kZXZpY2UgeworCXN0cnVjdCBlaXNhX2RldmljZV9pZCBpZDsKKwlpbnQgICAgICAgICAgICAgICAgICAgc2xvdDsKKwlpbnQgICAgICAgICAgICAgICAgICAgc3RhdGU7CisJdW5zaWduZWQgbG9uZyAgICAgICAgIGJhc2VfYWRkcjsKKwlzdHJ1Y3QgcmVzb3VyY2UgICAgICAgcmVzW0VJU0FfTUFYX1JFU09VUkNFU107CisJdTY0ICAgICAgICAgICAgICAgICAgIGRtYV9tYXNrOworCXN0cnVjdCBkZXZpY2UgICAgICAgICBkZXY7IC8qIGdlbmVyaWMgZGV2aWNlICovCisjaWZkZWYgQ09ORklHX0VJU0FfTkFNRVMKKwljaGFyCQkgICAgICBwcmV0dHlfbmFtZVtERVZJQ0VfTkFNRV9TSVpFXTsKKyNlbmRpZgorfTsKKworI2RlZmluZSB0b19laXNhX2RldmljZShuKSBjb250YWluZXJfb2Yobiwgc3RydWN0IGVpc2FfZGV2aWNlLCBkZXYpCisKK3N0YXRpYyBpbmxpbmUgaW50IGVpc2FfZ2V0X3JlZ2lvbl9pbmRleCAodm9pZCAqYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIHggPSAodW5zaWduZWQgbG9uZykgYWRkcjsKKworCXggJj0gMHhjMDA7CisJcmV0dXJuICh4ID4+IDEyKTsKK30KKworc3RydWN0IGVpc2FfZHJpdmVyIHsKKwljb25zdCBzdHJ1Y3QgZWlzYV9kZXZpY2VfaWQgKmlkX3RhYmxlOworCXN0cnVjdCBkZXZpY2VfZHJpdmVyICAgICAgICAgZHJpdmVyOworfTsKKworI2RlZmluZSB0b19laXNhX2RyaXZlcihkcnYpIGNvbnRhaW5lcl9vZihkcnYsc3RydWN0IGVpc2FfZHJpdmVyLCBkcml2ZXIpCisKK2V4dGVybiBzdHJ1Y3QgYnVzX3R5cGUgZWlzYV9idXNfdHlwZTsKK2ludCBlaXNhX2RyaXZlcl9yZWdpc3RlciAoc3RydWN0IGVpc2FfZHJpdmVyICplZHJ2KTsKK3ZvaWQgZWlzYV9kcml2ZXJfdW5yZWdpc3RlciAoc3RydWN0IGVpc2FfZHJpdmVyICplZHJ2KTsKKworLyogTWltaWNzIHBjaS5oLi4uICovCitzdGF0aWMgaW5saW5lIHZvaWQgKmVpc2FfZ2V0X2RydmRhdGEgKHN0cnVjdCBlaXNhX2RldmljZSAqZWRldikKK3sKKyAgICAgICAgcmV0dXJuIGVkZXYtPmRldi5kcml2ZXJfZGF0YTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGVpc2Ffc2V0X2RydmRhdGEgKHN0cnVjdCBlaXNhX2RldmljZSAqZWRldiwgdm9pZCAqZGF0YSkKK3sKKyAgICAgICAgZWRldi0+ZGV2LmRyaXZlcl9kYXRhID0gZGF0YTsKK30KKworLyogVGhlIEVJU0Egcm9vdCBkZXZpY2UuIFRoZXJlJ3MgcnVtb3VycyBhYm91dCBtYWNoaW5lcyB3aXRoIG11bHRpcGxlCisgKiBidXNzZXMgKFBBLVJJU0MgPyksIHNvIHdlIHRyeSB0byBoYW5kbGUgdGhhdC4gKi8KKworc3RydWN0IGVpc2Ffcm9vdF9kZXZpY2UgeworCXN0cnVjdCBkZXZpY2UgICAqZGV2OwkgLyogUG9pbnRlciB0byBicmlkZ2UgZGV2aWNlICovCisJc3RydWN0IHJlc291cmNlICpyZXM7CisJdW5zaWduZWQgbG9uZyAgICBidXNfYmFzZV9hZGRyOworCWludAkJIHNsb3RzOyAgLyogTWF4IHNsb3QgbnVtYmVyICovCisJaW50CQkgZm9yY2VfcHJvYmU7IC8qIFByb2JlIGV2ZW4gd2hlbiBubyBzbG90IDAgKi8KKwl1NjQJCSBkbWFfbWFzazsgLyogZnJvbSBicmlkZ2UgZGV2aWNlICovCisJaW50ICAgICAgICAgICAgICBidXNfbnI7IC8qIFNldCBieSBlaXNhX3Jvb3RfcmVnaXN0ZXIgKi8KKwlzdHJ1Y3QgcmVzb3VyY2UgIGVpc2Ffcm9vdF9yZXM7CS8qIGRpdHRvICovCit9OworCitpbnQgZWlzYV9yb290X3JlZ2lzdGVyIChzdHJ1Y3QgZWlzYV9yb290X2RldmljZSAqcm9vdCk7CisKKyNpZmRlZiBDT05GSUdfRUlTQQorZXh0ZXJuIGludCBFSVNBX2J1czsKKyNlbHNlCisjIGRlZmluZSBFSVNBX2J1cyAwCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2VsZXZhdG9yLmggYi9pbmNsdWRlL2xpbnV4L2VsZXZhdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU1NGY4MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvZWxldmF0b3IuaApAQCAtMCwwICsxLDE0NSBAQAorI2lmbmRlZiBfTElOVVhfRUxFVkFUT1JfSAorI2RlZmluZSBfTElOVVhfRUxFVkFUT1JfSAorCit0eXBlZGVmIGludCAoZWxldmF0b3JfbWVyZ2VfZm4pIChyZXF1ZXN0X3F1ZXVlX3QgKiwgc3RydWN0IHJlcXVlc3QgKiosCisJCQkJIHN0cnVjdCBiaW8gKik7CisKK3R5cGVkZWYgdm9pZCAoZWxldmF0b3JfbWVyZ2VfcmVxX2ZuKSAocmVxdWVzdF9xdWV1ZV90ICosIHN0cnVjdCByZXF1ZXN0ICosIHN0cnVjdCByZXF1ZXN0ICopOworCit0eXBlZGVmIHZvaWQgKGVsZXZhdG9yX21lcmdlZF9mbikgKHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKKwordHlwZWRlZiBzdHJ1Y3QgcmVxdWVzdCAqKGVsZXZhdG9yX25leHRfcmVxX2ZuKSAocmVxdWVzdF9xdWV1ZV90ICopOworCit0eXBlZGVmIHZvaWQgKGVsZXZhdG9yX2FkZF9yZXFfZm4pIChyZXF1ZXN0X3F1ZXVlX3QgKiwgc3RydWN0IHJlcXVlc3QgKiwgaW50KTsKK3R5cGVkZWYgaW50IChlbGV2YXRvcl9xdWV1ZV9lbXB0eV9mbikgKHJlcXVlc3RfcXVldWVfdCAqKTsKK3R5cGVkZWYgdm9pZCAoZWxldmF0b3JfcmVtb3ZlX3JlcV9mbikgKHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKK3R5cGVkZWYgdm9pZCAoZWxldmF0b3JfcmVxdWV1ZV9yZXFfZm4pIChyZXF1ZXN0X3F1ZXVlX3QgKiwgc3RydWN0IHJlcXVlc3QgKik7Cit0eXBlZGVmIHN0cnVjdCByZXF1ZXN0ICooZWxldmF0b3JfcmVxdWVzdF9saXN0X2ZuKSAocmVxdWVzdF9xdWV1ZV90ICosIHN0cnVjdCByZXF1ZXN0ICopOwordHlwZWRlZiB2b2lkIChlbGV2YXRvcl9jb21wbGV0ZWRfcmVxX2ZuKSAocmVxdWVzdF9xdWV1ZV90ICosIHN0cnVjdCByZXF1ZXN0ICopOwordHlwZWRlZiBpbnQgKGVsZXZhdG9yX21heV9xdWV1ZV9mbikgKHJlcXVlc3RfcXVldWVfdCAqLCBpbnQpOworCit0eXBlZGVmIGludCAoZWxldmF0b3Jfc2V0X3JlcV9mbikgKHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqLCBpbnQpOwordHlwZWRlZiB2b2lkIChlbGV2YXRvcl9wdXRfcmVxX2ZuKSAocmVxdWVzdF9xdWV1ZV90ICosIHN0cnVjdCByZXF1ZXN0ICopOwordHlwZWRlZiB2b2lkIChlbGV2YXRvcl9kZWFjdGl2YXRlX3JlcV9mbikgKHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKKwordHlwZWRlZiBpbnQgKGVsZXZhdG9yX2luaXRfZm4pIChyZXF1ZXN0X3F1ZXVlX3QgKiwgZWxldmF0b3JfdCAqKTsKK3R5cGVkZWYgdm9pZCAoZWxldmF0b3JfZXhpdF9mbikgKGVsZXZhdG9yX3QgKik7CisKK3N0cnVjdCBlbGV2YXRvcl9vcHMKK3sKKwllbGV2YXRvcl9tZXJnZV9mbiAqZWxldmF0b3JfbWVyZ2VfZm47CisJZWxldmF0b3JfbWVyZ2VkX2ZuICplbGV2YXRvcl9tZXJnZWRfZm47CisJZWxldmF0b3JfbWVyZ2VfcmVxX2ZuICplbGV2YXRvcl9tZXJnZV9yZXFfZm47CisKKwllbGV2YXRvcl9uZXh0X3JlcV9mbiAqZWxldmF0b3JfbmV4dF9yZXFfZm47CisJZWxldmF0b3JfYWRkX3JlcV9mbiAqZWxldmF0b3JfYWRkX3JlcV9mbjsKKwllbGV2YXRvcl9yZW1vdmVfcmVxX2ZuICplbGV2YXRvcl9yZW1vdmVfcmVxX2ZuOworCWVsZXZhdG9yX3JlcXVldWVfcmVxX2ZuICplbGV2YXRvcl9yZXF1ZXVlX3JlcV9mbjsKKwllbGV2YXRvcl9kZWFjdGl2YXRlX3JlcV9mbiAqZWxldmF0b3JfZGVhY3RpdmF0ZV9yZXFfZm47CisKKwllbGV2YXRvcl9xdWV1ZV9lbXB0eV9mbiAqZWxldmF0b3JfcXVldWVfZW1wdHlfZm47CisJZWxldmF0b3JfY29tcGxldGVkX3JlcV9mbiAqZWxldmF0b3JfY29tcGxldGVkX3JlcV9mbjsKKworCWVsZXZhdG9yX3JlcXVlc3RfbGlzdF9mbiAqZWxldmF0b3JfZm9ybWVyX3JlcV9mbjsKKwllbGV2YXRvcl9yZXF1ZXN0X2xpc3RfZm4gKmVsZXZhdG9yX2xhdHRlcl9yZXFfZm47CisKKwllbGV2YXRvcl9zZXRfcmVxX2ZuICplbGV2YXRvcl9zZXRfcmVxX2ZuOworCWVsZXZhdG9yX3B1dF9yZXFfZm4gKmVsZXZhdG9yX3B1dF9yZXFfZm47CisKKwllbGV2YXRvcl9tYXlfcXVldWVfZm4gKmVsZXZhdG9yX21heV9xdWV1ZV9mbjsKKworCWVsZXZhdG9yX2luaXRfZm4gKmVsZXZhdG9yX2luaXRfZm47CisJZWxldmF0b3JfZXhpdF9mbiAqZWxldmF0b3JfZXhpdF9mbjsKK307CisKKyNkZWZpbmUgRUxWX05BTUVfTUFYCSgxNikKKworLyoKKyAqIGlkZW50aWZpZXMgYW4gZWxldmF0b3IgdHlwZSwgc3VjaCBhcyBBUyBvciBkZWFkbGluZQorICovCitzdHJ1Y3QgZWxldmF0b3JfdHlwZQoreworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3QgZWxldmF0b3Jfb3BzIG9wczsKKwlzdHJ1Y3QgZWxldmF0b3JfdHlwZSAqZWxldmF0b3JfdHlwZTsKKwlzdHJ1Y3Qga29ial90eXBlICplbGV2YXRvcl9rdHlwZTsKKwljaGFyIGVsZXZhdG9yX25hbWVbRUxWX05BTUVfTUFYXTsKKwlzdHJ1Y3QgbW9kdWxlICplbGV2YXRvcl9vd25lcjsKK307CisKKy8qCisgKiBlYWNoIHF1ZXVlIGhhcyBhbiBlbGV2YXRvcl9xdWV1ZSBhc3NvaWNhdGVkIHdpdGggaXQKKyAqLworc3RydWN0IGVsZXZhdG9yX3F1ZXVlCit7CisJc3RydWN0IGVsZXZhdG9yX29wcyAqb3BzOworCXZvaWQgKmVsZXZhdG9yX2RhdGE7CisJc3RydWN0IGtvYmplY3Qga29iajsKKwlzdHJ1Y3QgZWxldmF0b3JfdHlwZSAqZWxldmF0b3JfdHlwZTsKK307CisKKy8qCisgKiBibG9jayBlbGV2YXRvciBpbnRlcmZhY2UKKyAqLworZXh0ZXJuIHZvaWQgZWx2X2FkZF9yZXF1ZXN0KHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqLCBpbnQsIGludCk7CitleHRlcm4gdm9pZCBfX2Vsdl9hZGRfcmVxdWVzdChyZXF1ZXN0X3F1ZXVlX3QgKiwgc3RydWN0IHJlcXVlc3QgKiwgaW50LCBpbnQpOworZXh0ZXJuIGludCBlbHZfbWVyZ2UocmVxdWVzdF9xdWV1ZV90ICosIHN0cnVjdCByZXF1ZXN0ICoqLCBzdHJ1Y3QgYmlvICopOworZXh0ZXJuIHZvaWQgZWx2X21lcmdlX3JlcXVlc3RzKHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqLAorCQkJICAgICAgIHN0cnVjdCByZXF1ZXN0ICopOworZXh0ZXJuIHZvaWQgZWx2X21lcmdlZF9yZXF1ZXN0KHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKK2V4dGVybiB2b2lkIGVsdl9yZW1vdmVfcmVxdWVzdChyZXF1ZXN0X3F1ZXVlX3QgKiwgc3RydWN0IHJlcXVlc3QgKik7CitleHRlcm4gdm9pZCBlbHZfcmVxdWV1ZV9yZXF1ZXN0KHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKK2V4dGVybiB2b2lkIGVsdl9kZWFjdGl2YXRlX3JlcXVlc3QocmVxdWVzdF9xdWV1ZV90ICosIHN0cnVjdCByZXF1ZXN0ICopOworZXh0ZXJuIGludCBlbHZfcXVldWVfZW1wdHkocmVxdWVzdF9xdWV1ZV90ICopOworZXh0ZXJuIHN0cnVjdCByZXF1ZXN0ICplbHZfbmV4dF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKTsKK2V4dGVybiBzdHJ1Y3QgcmVxdWVzdCAqZWx2X2Zvcm1lcl9yZXF1ZXN0KHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKK2V4dGVybiBzdHJ1Y3QgcmVxdWVzdCAqZWx2X2xhdHRlcl9yZXF1ZXN0KHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKK2V4dGVybiBpbnQgZWx2X3JlZ2lzdGVyX3F1ZXVlKHJlcXVlc3RfcXVldWVfdCAqcSk7CitleHRlcm4gdm9pZCBlbHZfdW5yZWdpc3Rlcl9xdWV1ZShyZXF1ZXN0X3F1ZXVlX3QgKnEpOworZXh0ZXJuIGludCBlbHZfbWF5X3F1ZXVlKHJlcXVlc3RfcXVldWVfdCAqLCBpbnQpOworZXh0ZXJuIHZvaWQgZWx2X2NvbXBsZXRlZF9yZXF1ZXN0KHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKK2V4dGVybiBpbnQgZWx2X3NldF9yZXF1ZXN0KHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqLCBpbnQpOworZXh0ZXJuIHZvaWQgZWx2X3B1dF9yZXF1ZXN0KHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKKworLyoKKyAqIGlvIHNjaGVkdWxlciByZWdpc3RyYXRpb24KKyAqLworZXh0ZXJuIGludCBlbHZfcmVnaXN0ZXIoc3RydWN0IGVsZXZhdG9yX3R5cGUgKik7CitleHRlcm4gdm9pZCBlbHZfdW5yZWdpc3RlcihzdHJ1Y3QgZWxldmF0b3JfdHlwZSAqKTsKKworLyoKKyAqIGlvIHNjaGVkdWxlciBzeXNmcyBzd2l0Y2hpbmcKKyAqLworZXh0ZXJuIHNzaXplX3QgZWx2X2lvc2NoZWRfc2hvdyhyZXF1ZXN0X3F1ZXVlX3QgKiwgY2hhciAqKTsKK2V4dGVybiBzc2l6ZV90IGVsdl9pb3NjaGVkX3N0b3JlKHJlcXVlc3RfcXVldWVfdCAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CisKK2V4dGVybiBpbnQgZWxldmF0b3JfaW5pdChyZXF1ZXN0X3F1ZXVlX3QgKiwgY2hhciAqKTsKK2V4dGVybiB2b2lkIGVsZXZhdG9yX2V4aXQoZWxldmF0b3JfdCAqKTsKK2V4dGVybiBpbnQgZWx2X3JxX21lcmdlX29rKHN0cnVjdCByZXF1ZXN0ICosIHN0cnVjdCBiaW8gKik7CitleHRlcm4gaW50IGVsdl90cnlfbWVyZ2Uoc3RydWN0IHJlcXVlc3QgKiwgc3RydWN0IGJpbyAqKTsKK2V4dGVybiBpbnQgZWx2X3RyeV9sYXN0X21lcmdlKHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1Y3QgYmlvICopOworCisvKgorICogUmV0dXJuIHZhbHVlcyBmcm9tIGVsZXZhdG9yIG1lcmdlcgorICovCisjZGVmaW5lIEVMRVZBVE9SX05PX01FUkdFCTAKKyNkZWZpbmUgRUxFVkFUT1JfRlJPTlRfTUVSR0UJMQorI2RlZmluZSBFTEVWQVRPUl9CQUNLX01FUkdFCTIKKworLyoKKyAqIEluc2VydGlvbiBzZWxlY3Rpb24KKyAqLworI2RlZmluZSBFTEVWQVRPUl9JTlNFUlRfRlJPTlQJMQorI2RlZmluZSBFTEVWQVRPUl9JTlNFUlRfQkFDSwkyCisjZGVmaW5lIEVMRVZBVE9SX0lOU0VSVF9TT1JUCTMKKworLyoKKyAqIHJldHVybiB2YWx1ZXMgZnJvbSBlbGV2YXRvcl9tYXlfcXVldWVfZm4KKyAqLworZW51bSB7CisJRUxWX01RVUVVRV9NQVksCisJRUxWX01RVUVVRV9OTywKKwlFTFZfTVFVRVVFX01VU1QsCit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZWxmLWZkcGljLmggYi9pbmNsdWRlL2xpbnV4L2VsZi1mZHBpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmNWI3NDUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2VsZi1mZHBpYy5oCkBAIC0wLDAgKzEsNjggQEAKKy8qIGVsZi1mZHBpYy5oOiBGRFBJQyBFTEYgbG9hZCBtYXAKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfTElOVVhfRUxGX0ZEUElDX0gKKyNkZWZpbmUgX0xJTlVYX0VMRl9GRFBJQ19ICisKKyNpbmNsdWRlIDxsaW51eC9lbGYuaD4KKworI2RlZmluZSBQVF9HTlVfU1RBQ0sgICAgKFBUX0xPT1MgKyAweDQ3NGU1NTEpCisKKy8qIHNlZ21lbnQgbWFwcGluZ3MgZm9yIEVMRiBGRFBJQyBsaWJyYXJpZXMvZXhlY3V0YWJsZXMvaW50ZXJwcmV0ZXJzICovCitzdHJ1Y3QgZWxmMzJfZmRwaWNfbG9hZHNlZyB7CisJRWxmMzJfQWRkcglhZGRyOwkJLyogY29yZSBhZGRyZXNzIHRvIHdoaWNoIG1hcHBlZCAqLworCUVsZjMyX0FkZHIJcF92YWRkcjsJLyogVk1BIHJlY29yZGVkIGluIGZpbGUgKi8KKwlFbGYzMl9Xb3JkCXBfbWVtc3o7CS8qIGFsbG9jYXRpb24gc2l6ZSByZWNvcmRlZCBpbiBmaWxlICovCit9OworCitzdHJ1Y3QgZWxmMzJfZmRwaWNfbG9hZG1hcCB7CisJRWxmMzJfSGFsZgl2ZXJzaW9uOwkvKiB2ZXJzaW9uIG9mIHRoZXNlIHN0cnVjdHVyZXMsIGp1c3QgaW4gY2FzZS4uLiAqLworCUVsZjMyX0hhbGYJbnNlZ3M7CQkvKiBudW1iZXIgb2Ygc2VnbWVudHMgKi8KKwlzdHJ1Y3QgZWxmMzJfZmRwaWNfbG9hZHNlZyBzZWdzW107Cit9OworCisjZGVmaW5lIEVMRjMyX0ZEUElDX0xPQURNQVBfVkVSU0lPTgkweDAwMDAKKworLyoKKyAqIGJpbmZtdCBiaW5hcnkgcGFyYW1ldGVycyBzdHJ1Y3R1cmUKKyAqLworc3RydWN0IGVsZl9mZHBpY19wYXJhbXMgeworCXN0cnVjdCBlbGZoZHIJCQloZHI7CQkvKiByZWYgY29weSBvZiBFTEYgaGVhZGVyICovCisJc3RydWN0IGVsZl9waGRyCQkJKnBoZHJzOwkJLyogcmVmIGNvcHkgb2YgUFRfUEhEUiB0YWJsZSAqLworCXN0cnVjdCBlbGYzMl9mZHBpY19sb2FkbWFwCSpsb2FkbWFwOwkvKiBsb2FkbWFwIHRvIGJlIHBhc3NlZCB0byB1c2Vyc3BhY2UgKi8KKwl1bnNpZ25lZCBsb25nCQkJZWxmaGRyX2FkZHI7CS8qIG1hcHBlZCBFTEYgaGVhZGVyIHVzZXIgYWRkcmVzcyAqLworCXVuc2lnbmVkIGxvbmcJCQlwaF9hZGRyOwkvKiBtYXBwZWQgUFRfUEhEUiB1c2VyIGFkZHJlc3MgKi8KKwl1bnNpZ25lZCBsb25nCQkJbWFwX2FkZHI7CS8qIG1hcHBlZCBsb2FkbWFwIHVzZXIgYWRkcmVzcyAqLworCXVuc2lnbmVkIGxvbmcJCQllbnRyeV9hZGRyOwkvKiBtYXBwZWQgZW50cnkgdXNlciBhZGRyZXNzICovCisJdW5zaWduZWQgbG9uZwkJCXN0YWNrX3NpemU7CS8qIHN0YWNrIHNpemUgcmVxdWVzdGVkIChQVF9HTlVfU1RBQ0spICovCisJdW5zaWduZWQgbG9uZwkJCWR5bmFtaWNfYWRkcjsJLyogbWFwcGVkIFBUX0RZTkFNSUMgdXNlciBhZGRyZXNzICovCisJdW5zaWduZWQgbG9uZwkJCWxvYWRfYWRkcjsJLyogdXNlciBhZGRyZXNzIGF0IHdoaWNoIHRvIG1hcCBiaW5hcnkgKi8KKwl1bnNpZ25lZCBsb25nCQkJZmxhZ3M7CisjZGVmaW5lIEVMRl9GRFBJQ19GTEFHX0FSUkFOR0VNRU5UCTB4MDAwMDAwMGYJLyogUFRfTE9BRCBhcnJhbmdlbWVudCBmbGFncyAqLworI2RlZmluZSBFTEZfRkRQSUNfRkxBR19JTkRFUEVOREVOVAkweDAwMDAwMDAwCS8qIFBUX0xPQURzIGNhbiBiZSBwdXQgYW55d2hlcmUgKi8KKyNkZWZpbmUgRUxGX0ZEUElDX0ZMQUdfSE9OT1VSVkFERFIJMHgwMDAwMDAwMQkvKiBQVF9MT0FELnZhZGRyIG11c3QgYmUgaG9ub3VyZWQgKi8KKyNkZWZpbmUgRUxGX0ZEUElDX0ZMQUdfQ09OU1RESVNQCTB4MDAwMDAwMDIJLyogUFRfTE9BRHMgcmVxdWlyZSBjb25zdGFudAorCQkJCQkJCSAqIGRpc3BsYWNlbWVudCAqLworI2RlZmluZSBFTEZfRkRQSUNfRkxBR19DT05USUdVT1VTCTB4MDAwMDAwMDMJLyogUFRfTE9BRHMgc2hvdWxkIGJlIGNvbnRpZ3VvdXMgKi8KKyNkZWZpbmUgRUxGX0ZEUElDX0ZMQUdfRVhFQ19TVEFDSwkweDAwMDAwMDEwCS8qIFQgaWYgc3RhY2sgdG8gYmUgZXhlY3V0YWJsZSAqLworI2RlZmluZSBFTEZfRkRQSUNfRkxBR19OT0VYRUNfU1RBQ0sJMHgwMDAwMDAyMAkvKiBUIGlmIHN0YWNrIG5vdCB0byBiZSBleGVjdXRhYmxlICovCisjZGVmaW5lIEVMRl9GRFBJQ19GTEFHX0VYRUNVVEFCTEUJMHgwMDAwMDA0MAkvKiBUIGlmIHRoaXMgb2JqZWN0IGlzIHRoZSBleGVjdXRhYmxlICovCisjZGVmaW5lIEVMRl9GRFBJQ19GTEFHX1BSRVNFTlQJCTB4ODAwMDAwMDAJLyogVCBpZiB0aGlzIG9iamVjdCBpcyBwcmVzZW50ICovCit9OworCisjaWZkZWYgQ09ORklHX01NVQorZXh0ZXJuIHZvaWQgZWxmX2ZkcGljX2FyY2hfbGF5X291dF9tbShzdHJ1Y3QgZWxmX2ZkcGljX3BhcmFtcyAqZXhlY19wYXJhbXMsCisJCQkJICAgICAgc3RydWN0IGVsZl9mZHBpY19wYXJhbXMgKmludGVycF9wYXJhbXMsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyAqc3RhcnRfc3RhY2ssCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyAqc3RhcnRfYnJrKTsKKyNlbmRpZgorCisjZW5kaWYgLyogX0xJTlVYX0VMRl9GRFBJQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2VsZi5oIGIvaW5jbHVkZS9saW51eC9lbGYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWIzYmE1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9lbGYuaApAQCAtMCwwICsxLDQ0OSBAQAorI2lmbmRlZiBfTElOVVhfRUxGX0gKKyNkZWZpbmUgX0xJTlVYX0VMRl9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9lbGYuaD4KKworI2lmbmRlZiBlbGZfcmVhZF9pbXBsaWVzX2V4ZWMKKyAgLyogRXhlY3V0YWJsZXMgZm9yIHdoaWNoIGVsZl9yZWFkX2ltcGxpZXNfZXhlYygpIHJldHVybnMgVFJVRSB3aWxsCisgICAgIGhhdmUgdGhlIFJFQURfSU1QTElFU19FWEVDIHBlcnNvbmFsaXR5IGZsYWcgc2V0IGF1dG9tYXRpY2FsbHkuCisgICAgIE92ZXJyaWRlIGluIGFzbS9lbGYuaCBhcyBuZWVkZWQuICAqLworIyBkZWZpbmUgZWxmX3JlYWRfaW1wbGllc19leGVjKGV4LCBoYXZlX3B0X2dudV9zdGFjaykJMAorI2VuZGlmCisKKy8qIDMyLWJpdCBFTEYgYmFzZSB0eXBlcy4gKi8KK3R5cGVkZWYgX191MzIJRWxmMzJfQWRkcjsKK3R5cGVkZWYgX191MTYJRWxmMzJfSGFsZjsKK3R5cGVkZWYgX191MzIJRWxmMzJfT2ZmOwordHlwZWRlZiBfX3MzMglFbGYzMl9Td29yZDsKK3R5cGVkZWYgX191MzIJRWxmMzJfV29yZDsKKworLyogNjQtYml0IEVMRiBiYXNlIHR5cGVzLiAqLwordHlwZWRlZiBfX3U2NAlFbGY2NF9BZGRyOwordHlwZWRlZiBfX3UxNglFbGY2NF9IYWxmOwordHlwZWRlZiBfX3MxNglFbGY2NF9TSGFsZjsKK3R5cGVkZWYgX191NjQJRWxmNjRfT2ZmOwordHlwZWRlZiBfX3MzMglFbGY2NF9Td29yZDsKK3R5cGVkZWYgX191MzIJRWxmNjRfV29yZDsKK3R5cGVkZWYgX191NjQJRWxmNjRfWHdvcmQ7Cit0eXBlZGVmIF9fczY0CUVsZjY0X1N4d29yZDsKKworLyogVGhlc2UgY29uc3RhbnRzIGFyZSBmb3IgdGhlIHNlZ21lbnQgdHlwZXMgc3RvcmVkIGluIHRoZSBpbWFnZSBoZWFkZXJzICovCisjZGVmaW5lIFBUX05VTEwgICAgMAorI2RlZmluZSBQVF9MT0FEICAgIDEKKyNkZWZpbmUgUFRfRFlOQU1JQyAyCisjZGVmaW5lIFBUX0lOVEVSUCAgMworI2RlZmluZSBQVF9OT1RFICAgIDQKKyNkZWZpbmUgUFRfU0hMSUIgICA1CisjZGVmaW5lIFBUX1BIRFIgICAgNgorI2RlZmluZSBQVF9UTFMgICAgIDcgICAgICAgICAgICAgICAvKiBUaHJlYWQgbG9jYWwgc3RvcmFnZSBzZWdtZW50ICovCisjZGVmaW5lIFBUX0xPT1MgICAgMHg2MDAwMDAwMCAgICAgIC8qIE9TLXNwZWNpZmljICovCisjZGVmaW5lIFBUX0hJT1MgICAgMHg2ZmZmZmZmZiAgICAgIC8qIE9TLXNwZWNpZmljICovCisjZGVmaW5lIFBUX0xPUFJPQyAgMHg3MDAwMDAwMAorI2RlZmluZSBQVF9ISVBST0MgIDB4N2ZmZmZmZmYKKyNkZWZpbmUgUFRfR05VX0VIX0ZSQU1FCQkweDY0NzRlNTUwCisKKyNkZWZpbmUgUFRfR05VX1NUQUNLCShQVF9MT09TICsgMHg0NzRlNTUxKQorCisvKiBUaGVzZSBjb25zdGFudHMgZGVmaW5lIHRoZSBkaWZmZXJlbnQgZWxmIGZpbGUgdHlwZXMgKi8KKyNkZWZpbmUgRVRfTk9ORSAgIDAKKyNkZWZpbmUgRVRfUkVMICAgIDEKKyNkZWZpbmUgRVRfRVhFQyAgIDIKKyNkZWZpbmUgRVRfRFlOICAgIDMKKyNkZWZpbmUgRVRfQ09SRSAgIDQKKyNkZWZpbmUgRVRfTE9QUk9DIDB4ZmYwMAorI2RlZmluZSBFVF9ISVBST0MgMHhmZmZmCisKKy8qIFRoZXNlIGNvbnN0YW50cyBkZWZpbmUgdGhlIHZhcmlvdXMgRUxGIHRhcmdldCBtYWNoaW5lcyAqLworI2RlZmluZSBFTV9OT05FICAwCisjZGVmaW5lIEVNX00zMiAgIDEKKyNkZWZpbmUgRU1fU1BBUkMgMgorI2RlZmluZSBFTV8zODYgICAzCisjZGVmaW5lIEVNXzY4SyAgIDQKKyNkZWZpbmUgRU1fODhLICAgNQorI2RlZmluZSBFTV80ODYgICA2ICAgLyogUGVyaGFwcyBkaXN1c2VkICovCisjZGVmaW5lIEVNXzg2MCAgIDcKKworI2RlZmluZSBFTV9NSVBTCQk4CS8qIE1JUFMgUjMwMDAgKG9mZmljaWFsbHksIGJpZy1lbmRpYW4gb25seSkgKi8KKworI2RlZmluZSBFTV9NSVBTX1JTNF9CRSAxMAkvKiBNSVBTIFI0MDAwIGJpZy1lbmRpYW4gKi8KKworI2RlZmluZSBFTV9QQVJJU0MgICAgICAxNQkvKiBIUFBBICovCisKKyNkZWZpbmUgRU1fU1BBUkMzMlBMVVMgMTgJLyogU3VuJ3MgInY4cGx1cyIgKi8KKworI2RlZmluZSBFTV9QUEMJICAgICAgIDIwCS8qIFBvd2VyUEMgKi8KKyNkZWZpbmUgRU1fUFBDNjQgICAgICAgMjEgICAgICAgLyogUG93ZXJQQzY0ICovCisKKyNkZWZpbmUgRU1fU0gJICAgICAgIDQyCS8qIFN1cGVySCAqLworCisjZGVmaW5lIEVNX1NQQVJDVjkgICAgIDQzCS8qIFNQQVJDIHY5IDY0LWJpdCAqLworCisjZGVmaW5lIEVNX0lBXzY0CTUwCS8qIEhQL0ludGVsIElBLTY0ICovCisKKyNkZWZpbmUgRU1fWDg2XzY0CTYyCS8qIEFNRCB4ODYtNjQgKi8KKworI2RlZmluZSBFTV9TMzkwCQkyMgkvKiBJQk0gUy8zOTAgKi8KKworI2RlZmluZSBFTV9DUklTICAgICAgICAgNzYgICAgICAvKiBBeGlzIENvbW11bmljYXRpb25zIDMyLWJpdCBlbWJlZGRlZCBwcm9jZXNzb3IgKi8KKworI2RlZmluZSBFTV9WODUwCQk4NwkvKiBORUMgdjg1MCAqLworCisjZGVmaW5lIEVNX00zMlIJCTg4CS8qIFJlbmVzYXMgTTMyUiAqLworCisjZGVmaW5lIEVNX0g4XzMwMCAgICAgICA0NiAgICAgIC8qIFJlbmVzYXMgSDgvMzAwLDMwMEgsSDhTICovCisKKy8qCisgKiBUaGlzIGlzIGFuIGludGVyaW0gdmFsdWUgdGhhdCB3ZSB3aWxsIHVzZSB1bnRpbCB0aGUgY29tbWl0dGVlIGNvbWVzCisgKiB1cCB3aXRoIGEgZmluYWwgbnVtYmVyLgorICovCisjZGVmaW5lIEVNX0FMUEhBCTB4OTAyNgorCisvKiBCb2d1cyBvbGQgdjg1MCBtYWdpYyBudW1iZXIsIHVzZWQgYnkgb2xkIHRvb2xzLiAgKi8KKyNkZWZpbmUgRU1fQ1lHTlVTX1Y4NTAJMHg5MDgwCisKKy8qIEJvZ3VzIG9sZCBtMzJyIG1hZ2ljIG51bWJlciwgdXNlZCBieSBvbGQgdG9vbHMuICAqLworI2RlZmluZSBFTV9DWUdOVVNfTTMyUgkweDkwNDEKKworLyoKKyAqIFRoaXMgaXMgdGhlIG9sZCBpbnRlcmltIHZhbHVlIGZvciBTLzM5MCBhcmNoaXRlY3R1cmUKKyAqLworI2RlZmluZSBFTV9TMzkwX09MRCAgICAgMHhBMzkwCisKKyNkZWZpbmUgRU1fRlJWCQkweDU0NDEJCS8qIEZ1aml0c3UgRlItViAqLworCisvKiBUaGlzIGlzIHRoZSBpbmZvIHRoYXQgaXMgbmVlZGVkIHRvIHBhcnNlIHRoZSBkeW5hbWljIHNlY3Rpb24gb2YgdGhlIGZpbGUgKi8KKyNkZWZpbmUgRFRfTlVMTAkJMAorI2RlZmluZSBEVF9ORUVERUQJMQorI2RlZmluZSBEVF9QTFRSRUxTWgkyCisjZGVmaW5lIERUX1BMVEdPVAkzCisjZGVmaW5lIERUX0hBU0gJCTQKKyNkZWZpbmUgRFRfU1RSVEFCCTUKKyNkZWZpbmUgRFRfU1lNVEFCCTYKKyNkZWZpbmUgRFRfUkVMQQkJNworI2RlZmluZSBEVF9SRUxBU1oJOAorI2RlZmluZSBEVF9SRUxBRU5UCTkKKyNkZWZpbmUgRFRfU1RSU1oJMTAKKyNkZWZpbmUgRFRfU1lNRU5UCTExCisjZGVmaW5lIERUX0lOSVQJCTEyCisjZGVmaW5lIERUX0ZJTkkJCTEzCisjZGVmaW5lIERUX1NPTkFNRQkxNAorI2RlZmluZSBEVF9SUEFUSCAJMTUKKyNkZWZpbmUgRFRfU1lNQk9MSUMJMTYKKyNkZWZpbmUgRFRfUkVMCSAgICAgICAgMTcKKyNkZWZpbmUgRFRfUkVMU1oJMTgKKyNkZWZpbmUgRFRfUkVMRU5UCTE5CisjZGVmaW5lIERUX1BMVFJFTAkyMAorI2RlZmluZSBEVF9ERUJVRwkyMQorI2RlZmluZSBEVF9URVhUUkVMCTIyCisjZGVmaW5lIERUX0pNUFJFTAkyMworI2RlZmluZSBEVF9MT1BST0MJMHg3MDAwMDAwMAorI2RlZmluZSBEVF9ISVBST0MJMHg3ZmZmZmZmZgorCisvKiBUaGlzIGluZm8gaXMgbmVlZGVkIHdoZW4gcGFyc2luZyB0aGUgc3ltYm9sIHRhYmxlICovCisjZGVmaW5lIFNUQl9MT0NBTCAgMAorI2RlZmluZSBTVEJfR0xPQkFMIDEKKyNkZWZpbmUgU1RCX1dFQUsgICAyCisKKyNkZWZpbmUgU1RUX05PVFlQRSAgMAorI2RlZmluZSBTVFRfT0JKRUNUICAxCisjZGVmaW5lIFNUVF9GVU5DICAgIDIKKyNkZWZpbmUgU1RUX1NFQ1RJT04gMworI2RlZmluZSBTVFRfRklMRSAgICA0CisKKyNkZWZpbmUgRUxGX1NUX0JJTkQoeCkJCSgoeCkgPj4gNCkKKyNkZWZpbmUgRUxGX1NUX1RZUEUoeCkJCSgoKHVuc2lnbmVkIGludCkgeCkgJiAweGYpCisjZGVmaW5lIEVMRjMyX1NUX0JJTkQoeCkJRUxGX1NUX0JJTkQoeCkKKyNkZWZpbmUgRUxGMzJfU1RfVFlQRSh4KQlFTEZfU1RfVFlQRSh4KQorI2RlZmluZSBFTEY2NF9TVF9CSU5EKHgpCUVMRl9TVF9CSU5EKHgpCisjZGVmaW5lIEVMRjY0X1NUX1RZUEUoeCkJRUxGX1NUX1RZUEUoeCkKKworLyogU3ltYm9saWMgdmFsdWVzIGZvciB0aGUgZW50cmllcyBpbiB0aGUgYXV4aWxpYXJ5IHRhYmxlCisgICBwdXQgb24gdGhlIGluaXRpYWwgc3RhY2sgKi8KKyNkZWZpbmUgQVRfTlVMTCAgIDAJLyogZW5kIG9mIHZlY3RvciAqLworI2RlZmluZSBBVF9JR05PUkUgMQkvKiBlbnRyeSBzaG91bGQgYmUgaWdub3JlZCAqLworI2RlZmluZSBBVF9FWEVDRkQgMgkvKiBmaWxlIGRlc2NyaXB0b3Igb2YgcHJvZ3JhbSAqLworI2RlZmluZSBBVF9QSERSICAgMwkvKiBwcm9ncmFtIGhlYWRlcnMgZm9yIHByb2dyYW0gKi8KKyNkZWZpbmUgQVRfUEhFTlQgIDQJLyogc2l6ZSBvZiBwcm9ncmFtIGhlYWRlciBlbnRyeSAqLworI2RlZmluZSBBVF9QSE5VTSAgNQkvKiBudW1iZXIgb2YgcHJvZ3JhbSBoZWFkZXJzICovCisjZGVmaW5lIEFUX1BBR0VTWiA2CS8qIHN5c3RlbSBwYWdlIHNpemUgKi8KKyNkZWZpbmUgQVRfQkFTRSAgIDcJLyogYmFzZSBhZGRyZXNzIG9mIGludGVycHJldGVyICovCisjZGVmaW5lIEFUX0ZMQUdTICA4CS8qIGZsYWdzICovCisjZGVmaW5lIEFUX0VOVFJZICA5CS8qIGVudHJ5IHBvaW50IG9mIHByb2dyYW0gKi8KKyNkZWZpbmUgQVRfTk9URUxGIDEwCS8qIHByb2dyYW0gaXMgbm90IEVMRiAqLworI2RlZmluZSBBVF9VSUQgICAgMTEJLyogcmVhbCB1aWQgKi8KKyNkZWZpbmUgQVRfRVVJRCAgIDEyCS8qIGVmZmVjdGl2ZSB1aWQgKi8KKyNkZWZpbmUgQVRfR0lEICAgIDEzCS8qIHJlYWwgZ2lkICovCisjZGVmaW5lIEFUX0VHSUQgICAxNAkvKiBlZmZlY3RpdmUgZ2lkICovCisjZGVmaW5lIEFUX1BMQVRGT1JNIDE1ICAvKiBzdHJpbmcgaWRlbnRpZnlpbmcgQ1BVIGZvciBvcHRpbWl6YXRpb25zICovCisjZGVmaW5lIEFUX0hXQ0FQICAxNiAgICAvKiBhcmNoIGRlcGVuZGVudCBoaW50cyBhdCBDUFUgY2FwYWJpbGl0aWVzICovCisjZGVmaW5lIEFUX0NMS1RDSyAxNwkvKiBmcmVxdWVuY3kgYXQgd2hpY2ggdGltZXMoKSBpbmNyZW1lbnRzICovCisKKyNkZWZpbmUgQVRfU0VDVVJFIDIzICAgLyogc2VjdXJlIG1vZGUgYm9vbGVhbiAqLworCit0eXBlZGVmIHN0cnVjdCBkeW5hbWljeworICBFbGYzMl9Td29yZCBkX3RhZzsKKyAgdW5pb257CisgICAgRWxmMzJfU3dvcmQJZF92YWw7CisgICAgRWxmMzJfQWRkcglkX3B0cjsKKyAgfSBkX3VuOworfSBFbGYzMl9EeW47CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgRWxmNjRfU3h3b3JkIGRfdGFnOwkJLyogZW50cnkgdGFnIHZhbHVlICovCisgIHVuaW9uIHsKKyAgICBFbGY2NF9Yd29yZCBkX3ZhbDsKKyAgICBFbGY2NF9BZGRyIGRfcHRyOworICB9IGRfdW47Cit9IEVsZjY0X0R5bjsKKworLyogVGhlIGZvbGxvd2luZyBhcmUgdXNlZCB3aXRoIHJlbG9jYXRpb25zICovCisjZGVmaW5lIEVMRjMyX1JfU1lNKHgpICgoeCkgPj4gOCkKKyNkZWZpbmUgRUxGMzJfUl9UWVBFKHgpICgoeCkgJiAweGZmKQorCisjZGVmaW5lIEVMRjY0X1JfU1lNKGkpCQkJKChpKSA+PiAzMikKKyNkZWZpbmUgRUxGNjRfUl9UWVBFKGkpCQkJKChpKSAmIDB4ZmZmZmZmZmYpCisKK3R5cGVkZWYgc3RydWN0IGVsZjMyX3JlbCB7CisgIEVsZjMyX0FkZHIJcl9vZmZzZXQ7CisgIEVsZjMyX1dvcmQJcl9pbmZvOworfSBFbGYzMl9SZWw7CisKK3R5cGVkZWYgc3RydWN0IGVsZjY0X3JlbCB7CisgIEVsZjY0X0FkZHIgcl9vZmZzZXQ7CS8qIExvY2F0aW9uIGF0IHdoaWNoIHRvIGFwcGx5IHRoZSBhY3Rpb24gKi8KKyAgRWxmNjRfWHdvcmQgcl9pbmZvOwkvKiBpbmRleCBhbmQgdHlwZSBvZiByZWxvY2F0aW9uICovCit9IEVsZjY0X1JlbDsKKwordHlwZWRlZiBzdHJ1Y3QgZWxmMzJfcmVsYXsKKyAgRWxmMzJfQWRkcglyX29mZnNldDsKKyAgRWxmMzJfV29yZAlyX2luZm87CisgIEVsZjMyX1N3b3JkCXJfYWRkZW5kOworfSBFbGYzMl9SZWxhOworCit0eXBlZGVmIHN0cnVjdCBlbGY2NF9yZWxhIHsKKyAgRWxmNjRfQWRkciByX29mZnNldDsJLyogTG9jYXRpb24gYXQgd2hpY2ggdG8gYXBwbHkgdGhlIGFjdGlvbiAqLworICBFbGY2NF9Yd29yZCByX2luZm87CS8qIGluZGV4IGFuZCB0eXBlIG9mIHJlbG9jYXRpb24gKi8KKyAgRWxmNjRfU3h3b3JkIHJfYWRkZW5kOwkvKiBDb25zdGFudCBhZGRlbmQgdXNlZCB0byBjb21wdXRlIHZhbHVlICovCit9IEVsZjY0X1JlbGE7CisKK3R5cGVkZWYgc3RydWN0IGVsZjMyX3N5bXsKKyAgRWxmMzJfV29yZAlzdF9uYW1lOworICBFbGYzMl9BZGRyCXN0X3ZhbHVlOworICBFbGYzMl9Xb3JkCXN0X3NpemU7CisgIHVuc2lnbmVkIGNoYXIJc3RfaW5mbzsKKyAgdW5zaWduZWQgY2hhcglzdF9vdGhlcjsKKyAgRWxmMzJfSGFsZglzdF9zaG5keDsKK30gRWxmMzJfU3ltOworCit0eXBlZGVmIHN0cnVjdCBlbGY2NF9zeW0geworICBFbGY2NF9Xb3JkIHN0X25hbWU7CQkvKiBTeW1ib2wgbmFtZSwgaW5kZXggaW4gc3RyaW5nIHRibCAqLworICB1bnNpZ25lZCBjaGFyCXN0X2luZm87CS8qIFR5cGUgYW5kIGJpbmRpbmcgYXR0cmlidXRlcyAqLworICB1bnNpZ25lZCBjaGFyCXN0X290aGVyOwkvKiBObyBkZWZpbmVkIG1lYW5pbmcsIDAgKi8KKyAgRWxmNjRfSGFsZiBzdF9zaG5keDsJCS8qIEFzc29jaWF0ZWQgc2VjdGlvbiBpbmRleCAqLworICBFbGY2NF9BZGRyIHN0X3ZhbHVlOwkJLyogVmFsdWUgb2YgdGhlIHN5bWJvbCAqLworICBFbGY2NF9Yd29yZCBzdF9zaXplOwkJLyogQXNzb2NpYXRlZCBzeW1ib2wgc2l6ZSAqLworfSBFbGY2NF9TeW07CisKKworI2RlZmluZSBFSV9OSURFTlQJMTYKKwordHlwZWRlZiBzdHJ1Y3QgZWxmMzJfaGRyeworICB1bnNpZ25lZCBjaGFyCWVfaWRlbnRbRUlfTklERU5UXTsKKyAgRWxmMzJfSGFsZgllX3R5cGU7CisgIEVsZjMyX0hhbGYJZV9tYWNoaW5lOworICBFbGYzMl9Xb3JkCWVfdmVyc2lvbjsKKyAgRWxmMzJfQWRkcgllX2VudHJ5OyAgLyogRW50cnkgcG9pbnQgKi8KKyAgRWxmMzJfT2ZmCWVfcGhvZmY7CisgIEVsZjMyX09mZgllX3Nob2ZmOworICBFbGYzMl9Xb3JkCWVfZmxhZ3M7CisgIEVsZjMyX0hhbGYJZV9laHNpemU7CisgIEVsZjMyX0hhbGYJZV9waGVudHNpemU7CisgIEVsZjMyX0hhbGYJZV9waG51bTsKKyAgRWxmMzJfSGFsZgllX3NoZW50c2l6ZTsKKyAgRWxmMzJfSGFsZgllX3NobnVtOworICBFbGYzMl9IYWxmCWVfc2hzdHJuZHg7Cit9IEVsZjMyX0VoZHI7CisKK3R5cGVkZWYgc3RydWN0IGVsZjY0X2hkciB7CisgIHVuc2lnbmVkIGNoYXIJZV9pZGVudFsxNl07CQkvKiBFTEYgIm1hZ2ljIG51bWJlciIgKi8KKyAgRWxmNjRfSGFsZiBlX3R5cGU7CisgIEVsZjY0X0hhbGYgZV9tYWNoaW5lOworICBFbGY2NF9Xb3JkIGVfdmVyc2lvbjsKKyAgRWxmNjRfQWRkciBlX2VudHJ5OwkJLyogRW50cnkgcG9pbnQgdmlydHVhbCBhZGRyZXNzICovCisgIEVsZjY0X09mZiBlX3Bob2ZmOwkJLyogUHJvZ3JhbSBoZWFkZXIgdGFibGUgZmlsZSBvZmZzZXQgKi8KKyAgRWxmNjRfT2ZmIGVfc2hvZmY7CQkvKiBTZWN0aW9uIGhlYWRlciB0YWJsZSBmaWxlIG9mZnNldCAqLworICBFbGY2NF9Xb3JkIGVfZmxhZ3M7CisgIEVsZjY0X0hhbGYgZV9laHNpemU7CisgIEVsZjY0X0hhbGYgZV9waGVudHNpemU7CisgIEVsZjY0X0hhbGYgZV9waG51bTsKKyAgRWxmNjRfSGFsZiBlX3NoZW50c2l6ZTsKKyAgRWxmNjRfSGFsZiBlX3NobnVtOworICBFbGY2NF9IYWxmIGVfc2hzdHJuZHg7Cit9IEVsZjY0X0VoZHI7CisKKy8qIFRoZXNlIGNvbnN0YW50cyBkZWZpbmUgdGhlIHBlcm1pc3Npb25zIG9uIHNlY3Rpb25zIGluIHRoZSBwcm9ncmFtCisgICBoZWFkZXIsIHBfZmxhZ3MuICovCisjZGVmaW5lIFBGX1IJCTB4NAorI2RlZmluZSBQRl9XCQkweDIKKyNkZWZpbmUgUEZfWAkJMHgxCisKK3R5cGVkZWYgc3RydWN0IGVsZjMyX3BoZHJ7CisgIEVsZjMyX1dvcmQJcF90eXBlOworICBFbGYzMl9PZmYJcF9vZmZzZXQ7CisgIEVsZjMyX0FkZHIJcF92YWRkcjsKKyAgRWxmMzJfQWRkcglwX3BhZGRyOworICBFbGYzMl9Xb3JkCXBfZmlsZXN6OworICBFbGYzMl9Xb3JkCXBfbWVtc3o7CisgIEVsZjMyX1dvcmQJcF9mbGFnczsKKyAgRWxmMzJfV29yZAlwX2FsaWduOworfSBFbGYzMl9QaGRyOworCit0eXBlZGVmIHN0cnVjdCBlbGY2NF9waGRyIHsKKyAgRWxmNjRfV29yZCBwX3R5cGU7CisgIEVsZjY0X1dvcmQgcF9mbGFnczsKKyAgRWxmNjRfT2ZmIHBfb2Zmc2V0OwkJLyogU2VnbWVudCBmaWxlIG9mZnNldCAqLworICBFbGY2NF9BZGRyIHBfdmFkZHI7CQkvKiBTZWdtZW50IHZpcnR1YWwgYWRkcmVzcyAqLworICBFbGY2NF9BZGRyIHBfcGFkZHI7CQkvKiBTZWdtZW50IHBoeXNpY2FsIGFkZHJlc3MgKi8KKyAgRWxmNjRfWHdvcmQgcF9maWxlc3o7CQkvKiBTZWdtZW50IHNpemUgaW4gZmlsZSAqLworICBFbGY2NF9Yd29yZCBwX21lbXN6OwkJLyogU2VnbWVudCBzaXplIGluIG1lbW9yeSAqLworICBFbGY2NF9Yd29yZCBwX2FsaWduOwkJLyogU2VnbWVudCBhbGlnbm1lbnQsIGZpbGUgJiBtZW1vcnkgKi8KK30gRWxmNjRfUGhkcjsKKworLyogc2hfdHlwZSAqLworI2RlZmluZSBTSFRfTlVMTAkwCisjZGVmaW5lIFNIVF9QUk9HQklUUwkxCisjZGVmaW5lIFNIVF9TWU1UQUIJMgorI2RlZmluZSBTSFRfU1RSVEFCCTMKKyNkZWZpbmUgU0hUX1JFTEEJNAorI2RlZmluZSBTSFRfSEFTSAk1CisjZGVmaW5lIFNIVF9EWU5BTUlDCTYKKyNkZWZpbmUgU0hUX05PVEUJNworI2RlZmluZSBTSFRfTk9CSVRTCTgKKyNkZWZpbmUgU0hUX1JFTAkJOQorI2RlZmluZSBTSFRfU0hMSUIJMTAKKyNkZWZpbmUgU0hUX0RZTlNZTQkxMQorI2RlZmluZSBTSFRfTlVNCQkxMgorI2RlZmluZSBTSFRfTE9QUk9DCTB4NzAwMDAwMDAKKyNkZWZpbmUgU0hUX0hJUFJPQwkweDdmZmZmZmZmCisjZGVmaW5lIFNIVF9MT1VTRVIJMHg4MDAwMDAwMAorI2RlZmluZSBTSFRfSElVU0VSCTB4ZmZmZmZmZmYKKworLyogc2hfZmxhZ3MgKi8KKyNkZWZpbmUgU0hGX1dSSVRFCTB4MQorI2RlZmluZSBTSEZfQUxMT0MJMHgyCisjZGVmaW5lIFNIRl9FWEVDSU5TVFIJMHg0CisjZGVmaW5lIFNIRl9NQVNLUFJPQwkweGYwMDAwMDAwCisKKy8qIHNwZWNpYWwgc2VjdGlvbiBpbmRleGVzICovCisjZGVmaW5lIFNITl9VTkRFRgkwCisjZGVmaW5lIFNITl9MT1JFU0VSVkUJMHhmZjAwCisjZGVmaW5lIFNITl9MT1BST0MJMHhmZjAwCisjZGVmaW5lIFNITl9ISVBST0MJMHhmZjFmCisjZGVmaW5lIFNITl9BQlMJCTB4ZmZmMQorI2RlZmluZSBTSE5fQ09NTU9OCTB4ZmZmMgorI2RlZmluZSBTSE5fSElSRVNFUlZFCTB4ZmZmZgorIAordHlwZWRlZiBzdHJ1Y3QgeworICBFbGYzMl9Xb3JkCXNoX25hbWU7CisgIEVsZjMyX1dvcmQJc2hfdHlwZTsKKyAgRWxmMzJfV29yZAlzaF9mbGFnczsKKyAgRWxmMzJfQWRkcglzaF9hZGRyOworICBFbGYzMl9PZmYJc2hfb2Zmc2V0OworICBFbGYzMl9Xb3JkCXNoX3NpemU7CisgIEVsZjMyX1dvcmQJc2hfbGluazsKKyAgRWxmMzJfV29yZAlzaF9pbmZvOworICBFbGYzMl9Xb3JkCXNoX2FkZHJhbGlnbjsKKyAgRWxmMzJfV29yZAlzaF9lbnRzaXplOworfSBFbGYzMl9TaGRyOworCit0eXBlZGVmIHN0cnVjdCBlbGY2NF9zaGRyIHsKKyAgRWxmNjRfV29yZCBzaF9uYW1lOwkJLyogU2VjdGlvbiBuYW1lLCBpbmRleCBpbiBzdHJpbmcgdGJsICovCisgIEVsZjY0X1dvcmQgc2hfdHlwZTsJCS8qIFR5cGUgb2Ygc2VjdGlvbiAqLworICBFbGY2NF9Yd29yZCBzaF9mbGFnczsJCS8qIE1pc2NlbGxhbmVvdXMgc2VjdGlvbiBhdHRyaWJ1dGVzICovCisgIEVsZjY0X0FkZHIgc2hfYWRkcjsJCS8qIFNlY3Rpb24gdmlydHVhbCBhZGRyIGF0IGV4ZWN1dGlvbiAqLworICBFbGY2NF9PZmYgc2hfb2Zmc2V0OwkJLyogU2VjdGlvbiBmaWxlIG9mZnNldCAqLworICBFbGY2NF9Yd29yZCBzaF9zaXplOwkJLyogU2l6ZSBvZiBzZWN0aW9uIGluIGJ5dGVzICovCisgIEVsZjY0X1dvcmQgc2hfbGluazsJCS8qIEluZGV4IG9mIGFub3RoZXIgc2VjdGlvbiAqLworICBFbGY2NF9Xb3JkIHNoX2luZm87CQkvKiBBZGRpdGlvbmFsIHNlY3Rpb24gaW5mb3JtYXRpb24gKi8KKyAgRWxmNjRfWHdvcmQgc2hfYWRkcmFsaWduOwkvKiBTZWN0aW9uIGFsaWdubWVudCAqLworICBFbGY2NF9Yd29yZCBzaF9lbnRzaXplOwkvKiBFbnRyeSBzaXplIGlmIHNlY3Rpb24gaG9sZHMgdGFibGUgKi8KK30gRWxmNjRfU2hkcjsKKworI2RlZmluZQlFSV9NQUcwCQkwCQkvKiBlX2lkZW50W10gaW5kZXhlcyAqLworI2RlZmluZQlFSV9NQUcxCQkxCisjZGVmaW5lCUVJX01BRzIJCTIKKyNkZWZpbmUJRUlfTUFHMwkJMworI2RlZmluZQlFSV9DTEFTUwk0CisjZGVmaW5lCUVJX0RBVEEJCTUKKyNkZWZpbmUJRUlfVkVSU0lPTgk2CisjZGVmaW5lCUVJX09TQUJJCTcKKyNkZWZpbmUJRUlfUEFECQk4CisKKyNkZWZpbmUJRUxGTUFHMAkJMHg3ZgkJLyogRUlfTUFHICovCisjZGVmaW5lCUVMRk1BRzEJCSdFJworI2RlZmluZQlFTEZNQUcyCQknTCcKKyNkZWZpbmUJRUxGTUFHMwkJJ0YnCisjZGVmaW5lCUVMRk1BRwkJIlwxNzdFTEYiCisjZGVmaW5lCVNFTEZNQUcJCTQKKworI2RlZmluZQlFTEZDTEFTU05PTkUJMAkJLyogRUlfQ0xBU1MgKi8KKyNkZWZpbmUJRUxGQ0xBU1MzMgkxCisjZGVmaW5lCUVMRkNMQVNTNjQJMgorI2RlZmluZQlFTEZDTEFTU05VTQkzCisKKyNkZWZpbmUgRUxGREFUQU5PTkUJMAkJLyogZV9pZGVudFtFSV9EQVRBXSAqLworI2RlZmluZSBFTEZEQVRBMkxTQgkxCisjZGVmaW5lIEVMRkRBVEEyTVNCCTIKKworI2RlZmluZSBFVl9OT05FCQkwCQkvKiBlX3ZlcnNpb24sIEVJX1ZFUlNJT04gKi8KKyNkZWZpbmUgRVZfQ1VSUkVOVAkxCisjZGVmaW5lIEVWX05VTQkJMgorCisjZGVmaW5lIEVMRk9TQUJJX05PTkUJMAorI2RlZmluZSBFTEZPU0FCSV9MSU5VWAkzCisKKyNpZm5kZWYgRUxGX09TQUJJCisjZGVmaW5lIEVMRl9PU0FCSSBFTEZPU0FCSV9OT05FCisjZW5kaWYKKworLyogTm90ZXMgdXNlZCBpbiBFVF9DT1JFICovCisjZGVmaW5lIE5UX1BSU1RBVFVTCTEKKyNkZWZpbmUgTlRfUFJGUFJFRwkyCisjZGVmaW5lIE5UX1BSUFNJTkZPCTMKKyNkZWZpbmUgTlRfVEFTS1NUUlVDVAk0CisjZGVmaW5lIE5UX0FVWFYJCTYKKyNkZWZpbmUgTlRfUFJYRlBSRUcgICAgIDB4NDZlNjJiN2YgICAgICAvKiBjb3BpZWQgZnJvbSBnZGI1LjEvaW5jbHVkZS9lbGYvY29tbW9uLmggKi8KKworCisvKiBOb3RlIGhlYWRlciBpbiBhIFBUX05PVEUgc2VjdGlvbiAqLwordHlwZWRlZiBzdHJ1Y3QgZWxmMzJfbm90ZSB7CisgIEVsZjMyX1dvcmQJbl9uYW1lc3o7CS8qIE5hbWUgc2l6ZSAqLworICBFbGYzMl9Xb3JkCW5fZGVzY3N6OwkvKiBDb250ZW50IHNpemUgKi8KKyAgRWxmMzJfV29yZAluX3R5cGU7CQkvKiBDb250ZW50IHR5cGUgKi8KK30gRWxmMzJfTmhkcjsKKworLyogTm90ZSBoZWFkZXIgaW4gYSBQVF9OT1RFIHNlY3Rpb24gKi8KK3R5cGVkZWYgc3RydWN0IGVsZjY0X25vdGUgeworICBFbGY2NF9Xb3JkIG5fbmFtZXN6OwkvKiBOYW1lIHNpemUgKi8KKyAgRWxmNjRfV29yZCBuX2Rlc2NzejsJLyogQ29udGVudCBzaXplICovCisgIEVsZjY0X1dvcmQgbl90eXBlOwkvKiBDb250ZW50IHR5cGUgKi8KK30gRWxmNjRfTmhkcjsKKworI2lmIEVMRl9DTEFTUyA9PSBFTEZDTEFTUzMyCisKK2V4dGVybiBFbGYzMl9EeW4gX0RZTkFNSUMgW107CisjZGVmaW5lIGVsZmhkcgkJZWxmMzJfaGRyCisjZGVmaW5lIGVsZl9waGRyCWVsZjMyX3BoZHIKKyNkZWZpbmUgZWxmX25vdGUJZWxmMzJfbm90ZQorCisjZWxzZQorCitleHRlcm4gRWxmNjRfRHluIF9EWU5BTUlDIFtdOworI2RlZmluZSBlbGZoZHIJCWVsZjY0X2hkcgorI2RlZmluZSBlbGZfcGhkcgllbGY2NF9waGRyCisjZGVmaW5lIGVsZl9ub3RlCWVsZjY0X25vdGUKKworI2VuZGlmCisKKworI2VuZGlmIC8qIF9MSU5VWF9FTEZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9lbGZjb3JlLmggYi9pbmNsdWRlL2xpbnV4L2VsZmNvcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmQ3YmI0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9lbGZjb3JlLmgKQEAgLTAsMCArMSwxMjkgQEAKKyNpZm5kZWYgX0xJTlVYX0VMRkNPUkVfSAorI2RlZmluZSBfTElOVVhfRUxGQ09SRV9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC91c2VyLmg+CisKK3N0cnVjdCBlbGZfc2lnaW5mbworeworCWludAlzaV9zaWdubzsJCQkvKiBzaWduYWwgbnVtYmVyICovCisJaW50CXNpX2NvZGU7CQkJLyogZXh0cmEgY29kZSAqLworCWludAlzaV9lcnJubzsJCQkvKiBlcnJubyAqLworfTsKKworI2luY2x1ZGUgPGFzbS9lbGYuaD4KKworI2lmbmRlZiBfX0tFUk5FTF9fCit0eXBlZGVmIGVsZl9ncmVnX3QgZ3JlZ190OwordHlwZWRlZiBlbGZfZ3JlZ3NldF90IGdyZWdzZXRfdDsKK3R5cGVkZWYgZWxmX2ZwcmVnc2V0X3QgZnByZWdzZXRfdDsKK3R5cGVkZWYgZWxmX2ZweHJlZ3NldF90IGZweHJlZ3NldF90OworI2RlZmluZSBOR1JFRyBFTEZfTkdSRUcKKyNlbmRpZgorCisvKgorICogRGVmaW5pdGlvbnMgdG8gZ2VuZXJhdGUgSW50ZWwgU1ZSNC1saWtlIGNvcmUgZmlsZXMuCisgKiBUaGVzZSBtb3N0bHkgaGF2ZSB0aGUgc2FtZSBuYW1lcyBhcyB0aGUgU1ZSNCB0eXBlcyB3aXRoICJlbGZfIgorICogdGFja2VkIG9uIHRoZSBmcm9udCB0byBwcmV2ZW50IGNsYXNoZXMgd2l0aCBsaW51eCBkZWZpbml0aW9ucywKKyAqIGFuZCB0aGUgdHlwZWRlZiBmb3JtcyBoYXZlIGJlZW4gYXZvaWRlZC4gIFRoaXMgaXMgbW9zdGx5IGxpa2UKKyAqIHRoZSBTVlI0IHN0cnVjdHVyZSwgYnV0IG1vcmUgTGludXh5LCB3aXRoIHRoaW5ncyB0aGF0IExpbnV4IGRvZXMKKyAqIG5vdCBzdXBwb3J0IGFuZCB3aGljaCBnZGIgZG9lc24ndCByZWFsbHkgdXNlIGV4Y2x1ZGVkLgorICogRmllbGRzIHByZXNlbnQgYnV0IG5vdCB1c2VkIGFyZSBtYXJrZWQgd2l0aCAiWFhYIi4KKyAqLworc3RydWN0IGVsZl9wcnN0YXR1cworeworI2lmIDAKKwlsb25nCXByX2ZsYWdzOwkvKiBYWFggUHJvY2VzcyBmbGFncyAqLworCXNob3J0CXByX3doeTsJCS8qIFhYWCBSZWFzb24gZm9yIHByb2Nlc3MgaGFsdCAqLworCXNob3J0CXByX3doYXQ7CS8qIFhYWCBNb3JlIGRldGFpbGVkIHJlYXNvbiAqLworI2VuZGlmCisJc3RydWN0IGVsZl9zaWdpbmZvIHByX2luZm87CS8qIEluZm8gYXNzb2NpYXRlZCB3aXRoIHNpZ25hbCAqLworCXNob3J0CXByX2N1cnNpZzsJCS8qIEN1cnJlbnQgc2lnbmFsICovCisJdW5zaWduZWQgbG9uZyBwcl9zaWdwZW5kOwkvKiBTZXQgb2YgcGVuZGluZyBzaWduYWxzICovCisJdW5zaWduZWQgbG9uZyBwcl9zaWdob2xkOwkvKiBTZXQgb2YgaGVsZCBzaWduYWxzICovCisjaWYgMAorCXN0cnVjdCBzaWdhbHRzdGFjayBwcl9hbHRzdGFjazsJLyogQWx0ZXJuYXRlIHN0YWNrIGluZm8gKi8KKwlzdHJ1Y3Qgc2lnYWN0aW9uIHByX2FjdGlvbjsJLyogU2lnbmFsIGFjdGlvbiBmb3IgY3VycmVudCBzaWcgKi8KKyNlbmRpZgorCXBpZF90CXByX3BpZDsKKwlwaWRfdAlwcl9wcGlkOworCXBpZF90CXByX3BncnA7CisJcGlkX3QJcHJfc2lkOworCXN0cnVjdCB0aW1ldmFsIHByX3V0aW1lOwkvKiBVc2VyIHRpbWUgKi8KKwlzdHJ1Y3QgdGltZXZhbCBwcl9zdGltZTsJLyogU3lzdGVtIHRpbWUgKi8KKwlzdHJ1Y3QgdGltZXZhbCBwcl9jdXRpbWU7CS8qIEN1bXVsYXRpdmUgdXNlciB0aW1lICovCisJc3RydWN0IHRpbWV2YWwgcHJfY3N0aW1lOwkvKiBDdW11bGF0aXZlIHN5c3RlbSB0aW1lICovCisjaWYgMAorCWxvbmcJcHJfaW5zdHI7CQkvKiBDdXJyZW50IGluc3RydWN0aW9uICovCisjZW5kaWYKKwllbGZfZ3JlZ3NldF90IHByX3JlZzsJLyogR1AgcmVnaXN0ZXJzICovCisJaW50IHByX2ZwdmFsaWQ7CQkvKiBUcnVlIGlmIG1hdGggY28tcHJvY2Vzc29yIGJlaW5nIHVzZWQuICAqLworfTsKKworI2RlZmluZSBFTEZfUFJBUkdTWgkoODApCS8qIE51bWJlciBvZiBjaGFycyBmb3IgYXJncyAqLworCitzdHJ1Y3QgZWxmX3BycHNpbmZvCit7CisJY2hhcglwcl9zdGF0ZTsJLyogbnVtZXJpYyBwcm9jZXNzIHN0YXRlICovCisJY2hhcglwcl9zbmFtZTsJLyogY2hhciBmb3IgcHJfc3RhdGUgKi8KKwljaGFyCXByX3pvbWI7CS8qIHpvbWJpZSAqLworCWNoYXIJcHJfbmljZTsJLyogbmljZSB2YWwgKi8KKwl1bnNpZ25lZCBsb25nIHByX2ZsYWc7CS8qIGZsYWdzICovCisJX19rZXJuZWxfdWlkX3QJcHJfdWlkOworCV9fa2VybmVsX2dpZF90CXByX2dpZDsKKwlwaWRfdAlwcl9waWQsIHByX3BwaWQsIHByX3BncnAsIHByX3NpZDsKKwkvKiBMb3RzIG1pc3NpbmcgKi8KKwljaGFyCXByX2ZuYW1lWzE2XTsJLyogZmlsZW5hbWUgb2YgZXhlY3V0YWJsZSAqLworCWNoYXIJcHJfcHNhcmdzW0VMRl9QUkFSR1NaXTsJLyogaW5pdGlhbCBwYXJ0IG9mIGFyZyBsaXN0ICovCit9OworCisjaWZuZGVmIF9fS0VSTkVMX18KK3R5cGVkZWYgc3RydWN0IGVsZl9wcnN0YXR1cyBwcnN0YXR1c190OwordHlwZWRlZiBzdHJ1Y3QgZWxmX3BycHNpbmZvIHBycHNpbmZvX3Q7CisjZGVmaW5lIFBSQVJHU1ogRUxGX1BSQVJHU1ogCisjZW5kaWYKKworI2lmZGVmIF9fS0VSTkVMX18KK3N0YXRpYyBpbmxpbmUgdm9pZCBlbGZfY29yZV9jb3B5X3JlZ3MoZWxmX2dyZWdzZXRfdCAqZWxmcmVncywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisjaWZkZWYgRUxGX0NPUkVfQ09QWV9SRUdTCisJRUxGX0NPUkVfQ09QWV9SRUdTKCgqZWxmcmVncyksIHJlZ3MpCisjZWxzZQorCUJVR19PTihzaXplb2YoKmVsZnJlZ3MpICE9IHNpemVvZigqcmVncykpOworCSooc3RydWN0IHB0X3JlZ3MgKillbGZyZWdzID0gKnJlZ3M7CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSBpbnQgZWxmX2NvcmVfY29weV90YXNrX3JlZ3Moc3RydWN0IHRhc2tfc3RydWN0ICp0LCBlbGZfZ3JlZ3NldF90KiBlbGZyZWdzKQoreworI2lmZGVmIEVMRl9DT1JFX0NPUFlfVEFTS19SRUdTCisJCisJcmV0dXJuIEVMRl9DT1JFX0NPUFlfVEFTS19SRUdTKHQsIGVsZnJlZ3MpOworI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKK2V4dGVybiBpbnQgZHVtcF9mcHUgKHN0cnVjdCBwdF9yZWdzICosIGVsZl9mcHJlZ3NldF90ICopOworCitzdGF0aWMgaW5saW5lIGludCBlbGZfY29yZV9jb3B5X3Rhc2tfZnByZWdzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGVsZl9mcHJlZ3NldF90ICpmcHUpCit7CisjaWZkZWYgRUxGX0NPUkVfQ09QWV9GUFJFR1MKKwlyZXR1cm4gRUxGX0NPUkVfQ09QWV9GUFJFR1ModCwgZnB1KTsKKyNlbHNlCisJcmV0dXJuIGR1bXBfZnB1KHJlZ3MsIGZwdSk7CisjZW5kaWYKK30KKworI2lmZGVmIEVMRl9DT1JFX0NPUFlfWEZQUkVHUworc3RhdGljIGlubGluZSBpbnQgZWxmX2NvcmVfY29weV90YXNrX3hmcHJlZ3Moc3RydWN0IHRhc2tfc3RydWN0ICp0LCBlbGZfZnB4cmVnc2V0X3QgKnhmcHUpCit7CisJcmV0dXJuIEVMRl9DT1JFX0NPUFlfWEZQUkVHUyh0LCB4ZnB1KTsKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisKKyNlbmRpZiAvKiBfTElOVVhfRUxGQ09SRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Vyci5oIGIvaW5jbHVkZS9saW51eC9lcnIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2M1NWRmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9lcnIuaApAQCAtMCwwICsxLDMxIEBACisjaWZuZGVmIF9MSU5VWF9FUlJfSAorI2RlZmluZSBfTElOVVhfRVJSX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisKKyNpbmNsdWRlIDxhc20vZXJybm8uaD4KKworLyoKKyAqIEtlcm5lbCBwb2ludGVycyBoYXZlIHJlZHVuZGFudCBpbmZvcm1hdGlvbiwgc28gd2UgY2FuIHVzZSBhCisgKiBzY2hlbWUgd2hlcmUgd2UgY2FuIHJldHVybiBlaXRoZXIgYW4gZXJyb3IgY29kZSBvciBhIGRlbnRyeQorICogcG9pbnRlciB3aXRoIHRoZSBzYW1lIHJldHVybiB2YWx1ZS4KKyAqCisgKiBUaGlzIHNob3VsZCBiZSBhIHBlci1hcmNoaXRlY3R1cmUgdGhpbmcsIHRvIGFsbG93IGRpZmZlcmVudAorICogZXJyb3IgYW5kIHBvaW50ZXIgZGVjaXNpb25zLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgKkVSUl9QVFIobG9uZyBlcnJvcikKK3sKKwlyZXR1cm4gKHZvaWQgKikgZXJyb3I7Cit9CisKK3N0YXRpYyBpbmxpbmUgbG9uZyBQVFJfRVJSKGNvbnN0IHZvaWQgKnB0cikKK3sKKwlyZXR1cm4gKGxvbmcpIHB0cjsKK30KKworc3RhdGljIGlubGluZSBsb25nIElTX0VSUihjb25zdCB2b2lkICpwdHIpCit7CisJcmV0dXJuIHVubGlrZWx5KCh1bnNpZ25lZCBsb25nKXB0ciA+ICh1bnNpZ25lZCBsb25nKS0xMDAwTCk7Cit9CisKKyNlbmRpZiAvKiBfTElOVVhfRVJSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXJybm8uaCBiL2luY2x1ZGUvbGludXgvZXJybm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTBiODBmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9lcnJuby5oCkBAIC0wLDAgKzEsMjkgQEAKKyNpZm5kZWYgX0xJTlVYX0VSUk5PX0gKKyNkZWZpbmUgX0xJTlVYX0VSUk5PX0gKKworI2luY2x1ZGUgPGFzbS9lcnJuby5oPgorCisjaWZkZWYgX19LRVJORUxfXworCisvKiBTaG91bGQgbmV2ZXIgYmUgc2VlbiBieSB1c2VyIHByb2dyYW1zICovCisjZGVmaW5lIEVSRVNUQVJUU1lTCTUxMgorI2RlZmluZSBFUkVTVEFSVE5PSU5UUgk1MTMKKyNkZWZpbmUgRVJFU1RBUlROT0hBTkQJNTE0CS8qIHJlc3RhcnQgaWYgbm8gaGFuZGxlci4uICovCisjZGVmaW5lIEVOT0lPQ1RMQ01ECTUxNQkvKiBObyBpb2N0bCBjb21tYW5kICovCisjZGVmaW5lIEVSRVNUQVJUX1JFU1RBUlRCTE9DSyA1MTYgLyogcmVzdGFydCBieSBjYWxsaW5nIHN5c19yZXN0YXJ0X3N5c2NhbGwgKi8KKworLyogRGVmaW5lZCBmb3IgdGhlIE5GU3YzIHByb3RvY29sICovCisjZGVmaW5lIEVCQURIQU5ETEUJNTIxCS8qIElsbGVnYWwgTkZTIGZpbGUgaGFuZGxlICovCisjZGVmaW5lIEVOT1RTWU5DCTUyMgkvKiBVcGRhdGUgc3luY2hyb25pemF0aW9uIG1pc21hdGNoICovCisjZGVmaW5lIEVCQURDT09LSUUJNTIzCS8qIENvb2tpZSBpcyBzdGFsZSAqLworI2RlZmluZSBFTk9UU1VQUAk1MjQJLyogT3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUgRVRPT1NNQUxMCTUyNQkvKiBCdWZmZXIgb3IgcmVxdWVzdCBpcyB0b28gc21hbGwgKi8KKyNkZWZpbmUgRVNFUlZFUkZBVUxUCTUyNgkvKiBBbiB1bnRyYW5zbGF0YWJsZSBlcnJvciBvY2N1cnJlZCAqLworI2RlZmluZSBFQkFEVFlQRQk1MjcJLyogVHlwZSBub3Qgc3VwcG9ydGVkIGJ5IHNlcnZlciAqLworI2RlZmluZSBFSlVLRUJPWAk1MjgJLyogUmVxdWVzdCBpbml0aWF0ZWQsIGJ1dCB3aWxsIG5vdCBjb21wbGV0ZSBiZWZvcmUgdGltZW91dCAqLworI2RlZmluZSBFSU9DQlFVRVVFRAk1MjkJLyogaW9jYiBxdWV1ZWQsIHdpbGwgZ2V0IGNvbXBsZXRpb24gZXZlbnQgKi8KKyNkZWZpbmUgRUlPQ0JSRVRSWQk1MzAJLyogaW9jYiBxdWV1ZWQsIHdpbGwgdHJpZ2dlciBhIHJldHJ5ICovCisKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXJycXVldWUuaCBiL2luY2x1ZGUvbGludXgvZXJycXVldWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzQ1ODJmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9lcnJxdWV1ZS5oCkBAIC0wLDAgKzEsNDcgQEAKKyNpZm5kZWYgX0xJTlVYX0VSUlFVRVVFX0gKKyNkZWZpbmUgX0xJTlVYX0VSUlFVRVVFX0ggMQorCitzdHJ1Y3Qgc29ja19leHRlbmRlZF9lcnIKK3sKKwlfX3UzMgllZV9lcnJubzsJCisJX191OAllZV9vcmlnaW47CisJX191OAllZV90eXBlOworCV9fdTgJZWVfY29kZTsKKwlfX3U4CWVlX3BhZDsKKwlfX3UzMiAgIGVlX2luZm87CisJX191MzIgICBlZV9kYXRhOworfTsKKworI2RlZmluZSBTT19FRV9PUklHSU5fTk9ORQkwCisjZGVmaW5lIFNPX0VFX09SSUdJTl9MT0NBTAkxCisjZGVmaW5lIFNPX0VFX09SSUdJTl9JQ01QCTIKKyNkZWZpbmUgU09fRUVfT1JJR0lOX0lDTVA2CTMKKworI2RlZmluZSBTT19FRV9PRkZFTkRFUihlZSkJKChzdHJ1Y3Qgc29ja2FkZHIqKSgoZWUpKzEpKQorCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0L2lwLmg+CisjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZCAoQ09ORklHX0lQVjZfTU9EVUxFKQorI2luY2x1ZGUgPGxpbnV4L2lwdjYuaD4KKyNlbmRpZgorCisjZGVmaW5lIFNLQl9FWFRfRVJSKHNrYikgKChzdHJ1Y3Qgc29ja19leHRlcnJfc2tiICopICgoc2tiKS0+Y2IpKQorCitzdHJ1Y3Qgc29ja19leHRlcnJfc2tiCit7CisJdW5pb24geworCQlzdHJ1Y3QgaW5ldF9za2JfcGFybQloNDsKKyNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkIChDT05GSUdfSVBWNl9NT0RVTEUpCisJCXN0cnVjdCBpbmV0Nl9za2JfcGFybQloNjsKKyNlbmRpZgorCX0gaGVhZGVyOworCXN0cnVjdCBzb2NrX2V4dGVuZGVkX2VycgllZTsKKwl1MTYJCQkJYWRkcl9vZmZzZXQ7CisJdTE2CQkJCXBvcnQ7Cit9OworCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk2YzQ4YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaApAQCAtMCwwICsxLDg4IEBACisvKgorICogSU5FVAkJQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIFRDUC9JUCBwcm90b2NvbCBzdWl0ZSBmb3IgdGhlIExJTlVYCisgKgkJb3BlcmF0aW5nIHN5c3RlbS4gIE5FVCAgaXMgaW1wbGVtZW50ZWQgdXNpbmcgdGhlICBCU0QgU29ja2V0CisgKgkJaW50ZXJmYWNlIGFzIHRoZSBtZWFucyBvZiBjb21tdW5pY2F0aW9uIHdpdGggdGhlIHVzZXIgbGV2ZWwuCisgKgorICoJCURlZmluaXRpb25zIGZvciB0aGUgRXRoZXJuZXQgaGFuZGxlcnMuCisgKgorICogVmVyc2lvbjoJQCgjKWV0aC5oCTEuMC40CTA1LzEzLzkzCisgKgorICogQXV0aG9yczoJUm9zcyBCaXJvLCA8YmlyN0BsZWxhbmQuU3RhbmZvcmQuRWR1PgorICoJCUZyZWQgTi4gdmFuIEtlbXBlbiwgPHdhbHRqZUB1V2FsdC5OTC5NdWduZXQuT1JHPgorICoKKyAqCQlSZWxvY2F0ZWQgdG8gaW5jbHVkZS9saW51eCB3aGVyZSBpdCBiZWxvbmdzIGJ5IEFsYW4gQ294IAorICoJCQkJCQkJPGd3NHB0c0BndzRwdHMuYW1wci5vcmc+CisgKgorICoJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCQltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICoJCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICoJCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICoJV0FSTklORzogVGhpcyBtb3ZlIG1heSB3ZWxsIGJlIHRlbXBvcmFyeS4gVGhpcyBmaWxlIHdpbGwgZ2V0IG1lcmdlZCB3aXRoIG90aGVycyBSU04uCisgKgorICovCisjaWZuZGVmIF9MSU5VWF9FVEhFUkRFVklDRV9ICisjZGVmaW5lIF9MSU5VWF9FVEhFUkRFVklDRV9ICisKKyNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgorI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgorCisjaWZkZWYgX19LRVJORUxfXworZXh0ZXJuIGludAkJZXRoX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgIHVuc2lnbmVkIHNob3J0IHR5cGUsIHZvaWQgKmRhZGRyLAorCQkJCSAgIHZvaWQgKnNhZGRyLCB1bnNpZ25lZCBsZW4pOworZXh0ZXJuIGludAkJZXRoX3JlYnVpbGRfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIHVuc2lnbmVkIHNob3J0CWV0aF90eXBlX3RyYW5zKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQJCWV0aF9oZWFkZXJfY2FjaGVfdXBkYXRlKHN0cnVjdCBoaF9jYWNoZSAqaGgsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCQl1bnNpZ25lZCBjaGFyICogaGFkZHIpOworZXh0ZXJuIGludAkJZXRoX2hlYWRlcl9jYWNoZShzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaCwKKwkJCQkJIHN0cnVjdCBoaF9jYWNoZSAqaGgpOworCitleHRlcm4gc3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX2V0aGVyZGV2KGludCBzaXplb2ZfcHJpdik7CitzdGF0aWMgaW5saW5lIHZvaWQgZXRoX2NvcHlfYW5kX3N1bSAoc3RydWN0IHNrX2J1ZmYgKmRlc3QsIAorCQkJCSAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc3JjLCAKKwkJCQkgICAgIGludCBsZW4sIGludCBiYXNlKQoreworCW1lbWNweSAoZGVzdC0+ZGF0YSwgc3JjLCBsZW4pOworfQorCisvKioKKyAqIGlzX3plcm9fZXRoZXJfYWRkciAtIERldGVybWluZSBpZiBnaXZlIEV0aGVybmV0IGFkZHJlc3MgaXMgYWxsCisgKiB6ZXJvcy4KKyAqLworc3RhdGljIGlubGluZSBpbnQgaXNfemVyb19ldGhlcl9hZGRyKGNvbnN0IHU4ICphZGRyKQoreworCXJldHVybiAhKGFkZHJbMF0gfCBhZGRyWzFdIHwgYWRkclsyXSB8IGFkZHJbM10gfCBhZGRyWzRdIHwgYWRkcls1XSk7Cit9CisKKy8qKgorICogaXNfdmFsaWRfZXRoZXJfYWRkciAtIERldGVybWluZSBpZiB0aGUgZ2l2ZW4gRXRoZXJuZXQgYWRkcmVzcyBpcyB2YWxpZAorICogQGFkZHI6IFBvaW50ZXIgdG8gYSBzaXgtYnl0ZSBhcnJheSBjb250YWluaW5nIHRoZSBFdGhlcm5ldCBhZGRyZXNzCisgKgorICogQ2hlY2sgdGhhdCB0aGUgRXRoZXJuZXQgYWRkcmVzcyAoTUFDKSBpcyBub3QgMDA6MDA6MDA6MDA6MDA6MDAsIGlzIG5vdAorICogYSBtdWx0aWNhc3QgYWRkcmVzcywgYW5kIGlzIG5vdCBGRjpGRjpGRjpGRjpGRjpGRi4gIFRoZSBtdWx0aWNhc3QKKyAqIGFuZCBGRjpGRjouLi4gdGVzdHMgYXJlIGNvbWJpbmVkIGludG8gdGhlIHNpbmdsZSB0ZXN0ICIhKGFkZHJbMF0mMSkiLgorICoKKyAqIFJldHVybiB0cnVlIGlmIHRoZSBhZGRyZXNzIGlzIHZhbGlkLgorICovCitzdGF0aWMgaW5saW5lIGludCBpc192YWxpZF9ldGhlcl9hZGRyKGNvbnN0IHU4ICphZGRyKQoreworCXJldHVybiAhKGFkZHJbMF0mMSkgJiYgIWlzX3plcm9fZXRoZXJfYWRkcihhZGRyKTsKK30KKworLyoqCisgKiByYW5kb21fZXRoZXJfYWRkciAtIEdlbmVyYXRlIHNvZnR3YXJlIGFzc2lnbmVkIHJhbmRvbSBFdGhlcm5ldCBhZGRyZXNzCisgKiBAYWRkcjogUG9pbnRlciB0byBhIHNpeC1ieXRlIGFycmF5IGNvbnRhaW5pbmcgdGhlIEV0aGVybmV0IGFkZHJlc3MKKyAqCisgKiBHZW5lcmF0ZSBhIHJhbmRvbSBFdGhlcm5ldCBhZGRyZXNzIChNQUMpIHRoYXQgaXMgbm90IG11bHRpY2FzdAorICogYW5kIGhhcyB0aGUgbG9jYWwgYXNzaWduZWQgYml0IHNldC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHJhbmRvbV9ldGhlcl9hZGRyKHU4ICphZGRyKQoreworCWdldF9yYW5kb21fYnl0ZXMgKGFkZHIsIEVUSF9BTEVOKTsKKwlhZGRyIFswXSAmPSAweGZlOwkvKiBjbGVhciBtdWx0aWNhc3QgYml0ICovCisJYWRkciBbMF0gfD0gMHgwMjsJLyogc2V0IGxvY2FsIGFzc2lnbm1lbnQgYml0IChJRUVFODAyKSAqLworfQorI2VuZGlmCisKKyNlbmRpZgkvKiBfTElOVVhfRVRIRVJERVZJQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ldGh0b29sLmggYi9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODViMjEwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9ldGh0b29sLmgKQEAgLTAsMCArMSw0NzEgQEAKKy8qCisgKiBldGh0b29sLmg6IERlZmluZXMgZm9yIExpbnV4IGV0aHRvb2wuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AcmVkaGF0LmNvbSkKKyAqIENvcHlyaWdodCAyMDAxIEplZmYgR2FyemlrIDxqZ2FyemlrQHBvYm94LmNvbT4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAyMDAxIFN1biBNaWNyb3N5c3RlbXMgKHRob2NraW5Ac3VuLmNvbSkKKyAqIFBvcnRpb25zIENvcHlyaWdodCAyMDAyIEludGVsIChlbGkua3VwZXJtYW5uQGludGVsLmNvbSwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHJpc3RvcGhlci5sZWVjaEBpbnRlbC5jb20sCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvdHQuZmVsZG1hbkBpbnRlbC5jb20pCisgKi8KKworI2lmbmRlZiBfTElOVVhfRVRIVE9PTF9ICisjZGVmaW5lIF9MSU5VWF9FVEhUT09MX0gKKworCisvKiBUaGlzIHNob3VsZCB3b3JrIGZvciBib3RoIDMyIGFuZCA2NCBiaXQgdXNlcmxhbmQuICovCitzdHJ1Y3QgZXRodG9vbF9jbWQgeworCXUzMgljbWQ7CisJdTMyCXN1cHBvcnRlZDsJLyogRmVhdHVyZXMgdGhpcyBpbnRlcmZhY2Ugc3VwcG9ydHMgKi8KKwl1MzIJYWR2ZXJ0aXNpbmc7CS8qIEZlYXR1cmVzIHRoaXMgaW50ZXJmYWNlIGFkdmVydGlzZXMgKi8KKwl1MTYJc3BlZWQ7CQkvKiBUaGUgZm9yY2VkIHNwZWVkLCAxME1iLCAxMDBNYiwgZ2lnYWJpdCAqLworCXU4CWR1cGxleDsJCS8qIER1cGxleCwgaGFsZiBvciBmdWxsICovCisJdTgJcG9ydDsJCS8qIFdoaWNoIGNvbm5lY3RvciBwb3J0ICovCisJdTgJcGh5X2FkZHJlc3M7CisJdTgJdHJhbnNjZWl2ZXI7CS8qIFdoaWNoIHRyYW5zY2VpdmVyIHRvIHVzZSAqLworCXU4CWF1dG9uZWc7CS8qIEVuYWJsZSBvciBkaXNhYmxlIGF1dG9uZWdvdGlhdGlvbiAqLworCXUzMgltYXh0eHBrdDsJLyogVHggcGt0cyBiZWZvcmUgZ2VuZXJhdGluZyB0eCBpbnQgKi8KKwl1MzIJbWF4cnhwa3Q7CS8qIFJ4IHBrdHMgYmVmb3JlIGdlbmVyYXRpbmcgcnggaW50ICovCisJdTMyCXJlc2VydmVkWzRdOworfTsKKworI2RlZmluZSBFVEhUT09MX0JVU0lORk9fTEVOCTMyCisvKiB0aGVzZSBzdHJpbmdzIGFyZSBzZXQgdG8gd2hhdGV2ZXIgdGhlIGRyaXZlciBhdXRob3IgZGVjaWRlcy4uLiAqLworc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyB7CisJdTMyCWNtZDsKKwljaGFyCWRyaXZlclszMl07CS8qIGRyaXZlciBzaG9ydCBuYW1lLCAidHVsaXAiLCAiZWVwcm8xMDAiICovCisJY2hhcgl2ZXJzaW9uWzMyXTsJLyogZHJpdmVyIHZlcnNpb24gc3RyaW5nICovCisJY2hhcglmd192ZXJzaW9uWzMyXTsJLyogZmlybXdhcmUgdmVyc2lvbiBzdHJpbmcsIGlmIGFwcGxpY2FibGUgKi8KKwljaGFyCWJ1c19pbmZvW0VUSFRPT0xfQlVTSU5GT19MRU5dOwkvKiBCdXMgaW5mbyBmb3IgdGhpcyBJRi4gKi8KKwkJCQkvKiBGb3IgUENJIGRldmljZXMsIHVzZSBwY2lfbmFtZShwY2lfZGV2KS4gKi8KKwljaGFyCXJlc2VydmVkMVszMl07CisJY2hhcglyZXNlcnZlZDJbMTZdOworCXUzMgluX3N0YXRzOwkvKiBudW1iZXIgb2YgdTY0J3MgZnJvbSBFVEhUT09MX0dTVEFUUyAqLworCXUzMgl0ZXN0aW5mb19sZW47CisJdTMyCWVlZHVtcF9sZW47CS8qIFNpemUgb2YgZGF0YSBmcm9tIEVUSFRPT0xfR0VFUFJPTSAoYnl0ZXMpICovCisJdTMyCXJlZ2R1bXBfbGVuOwkvKiBTaXplIG9mIGRhdGEgZnJvbSBFVEhUT09MX0dSRUdTIChieXRlcykgKi8KK307CisKKyNkZWZpbmUgU09QQVNTX01BWAk2CisvKiB3YWtlLW9uLWxhbiBzZXR0aW5ncyAqLworc3RydWN0IGV0aHRvb2xfd29saW5mbyB7CisJdTMyCWNtZDsKKwl1MzIJc3VwcG9ydGVkOworCXUzMgl3b2xvcHRzOworCXU4CXNvcGFzc1tTT1BBU1NfTUFYXTsgLyogU2VjdXJlT24odG0pIHBhc3N3b3JkICovCit9OworCisvKiBmb3IgcGFzc2luZyBzaW5nbGUgdmFsdWVzICovCitzdHJ1Y3QgZXRodG9vbF92YWx1ZSB7CisJdTMyCWNtZDsKKwl1MzIJZGF0YTsKK307CisKKy8qIGZvciBwYXNzaW5nIGJpZyBjaHVua3Mgb2YgZGF0YSAqLworc3RydWN0IGV0aHRvb2xfcmVncyB7CisJdTMyCWNtZDsKKwl1MzIJdmVyc2lvbjsgLyogZHJpdmVyLXNwZWNpZmljLCBpbmRpY2F0ZXMgZGlmZmVyZW50IGNoaXBzL3JldnMgKi8KKwl1MzIJbGVuOyAvKiBieXRlcyAqLworCXU4CWRhdGFbMF07Cit9OworCisvKiBmb3IgcGFzc2luZyBFRVBST00gY2h1bmtzICovCitzdHJ1Y3QgZXRodG9vbF9lZXByb20geworCXUzMgljbWQ7CisJdTMyCW1hZ2ljOworCXUzMglvZmZzZXQ7IC8qIGluIGJ5dGVzICovCisJdTMyCWxlbjsgLyogaW4gYnl0ZXMgKi8KKwl1OAlkYXRhWzBdOworfTsKKworLyogZm9yIGNvbmZpZ3VyaW5nIGNvYWxlc2NpbmcgcGFyYW1ldGVycyBvZiBjaGlwICovCitzdHJ1Y3QgZXRodG9vbF9jb2FsZXNjZSB7CisJdTMyCWNtZDsJLyogRVRIVE9PTF97RyxTfUNPQUxFU0NFICovCisKKwkvKiBIb3cgbWFueSB1c2VjcyB0byBkZWxheSBhbiBSWCBpbnRlcnJ1cHQgYWZ0ZXIKKwkgKiBhIHBhY2tldCBhcnJpdmVzLiAgSWYgMCwgb25seSByeF9tYXhfY29hbGVzY2VkX2ZyYW1lcworCSAqIGlzIHVzZWQuCisJICovCisJdTMyCXJ4X2NvYWxlc2NlX3VzZWNzOworCisJLyogSG93IG1hbnkgcGFja2V0cyB0byBkZWxheSBhbiBSWCBpbnRlcnJ1cHQgYWZ0ZXIKKwkgKiBhIHBhY2tldCBhcnJpdmVzLiAgSWYgMCwgb25seSByeF9jb2FsZXNjZV91c2VjcyBpcworCSAqIHVzZWQuICBJdCBpcyBpbGxlZ2FsIHRvIHNldCBib3RoIHVzZWNzIGFuZCBtYXggZnJhbWVzCisJICogdG8gemVybyBhcyB0aGlzIHdvdWxkIGNhdXNlIFJYIGludGVycnVwdHMgdG8gbmV2ZXIgYmUKKwkgKiBnZW5lcmF0ZWQuCisJICovCisJdTMyCXJ4X21heF9jb2FsZXNjZWRfZnJhbWVzOworCisJLyogU2FtZSBhcyBhYm92ZSB0d28gcGFyYW1ldGVycywgZXhjZXB0IHRoYXQgdGhlc2UgdmFsdWVzCisJICogYXBwbHkgd2hpbGUgYW4gSVJRIGlzIGJlaW5nIHNlcnZpY2VkIGJ5IHRoZSBob3N0LiAgTm90CisJICogYWxsIGNhcmRzIHN1cHBvcnQgdGhpcyBmZWF0dXJlIGFuZCB0aGUgdmFsdWVzIGFyZSBpZ25vcmVkCisJICogaW4gdGhhdCBjYXNlLgorCSAqLworCXUzMglyeF9jb2FsZXNjZV91c2Vjc19pcnE7CisJdTMyCXJ4X21heF9jb2FsZXNjZWRfZnJhbWVzX2lycTsKKworCS8qIEhvdyBtYW55IHVzZWNzIHRvIGRlbGF5IGEgVFggaW50ZXJydXB0IGFmdGVyCisJICogYSBwYWNrZXQgaXMgc2VudC4gIElmIDAsIG9ubHkgdHhfbWF4X2NvYWxlc2NlZF9mcmFtZXMKKwkgKiBpcyB1c2VkLgorCSAqLworCXUzMgl0eF9jb2FsZXNjZV91c2VjczsKKworCS8qIEhvdyBtYW55IHBhY2tldHMgdG8gZGVsYXkgYSBUWCBpbnRlcnJ1cHQgYWZ0ZXIKKwkgKiBhIHBhY2tldCBpcyBzZW50LiAgSWYgMCwgb25seSB0eF9jb2FsZXNjZV91c2VjcyBpcworCSAqIHVzZWQuICBJdCBpcyBpbGxlZ2FsIHRvIHNldCBib3RoIHVzZWNzIGFuZCBtYXggZnJhbWVzCisJICogdG8gemVybyBhcyB0aGlzIHdvdWxkIGNhdXNlIFRYIGludGVycnVwdHMgdG8gbmV2ZXIgYmUKKwkgKiBnZW5lcmF0ZWQuCisJICovCisJdTMyCXR4X21heF9jb2FsZXNjZWRfZnJhbWVzOworCisJLyogU2FtZSBhcyBhYm92ZSB0d28gcGFyYW1ldGVycywgZXhjZXB0IHRoYXQgdGhlc2UgdmFsdWVzCisJICogYXBwbHkgd2hpbGUgYW4gSVJRIGlzIGJlaW5nIHNlcnZpY2VkIGJ5IHRoZSBob3N0LiAgTm90CisJICogYWxsIGNhcmRzIHN1cHBvcnQgdGhpcyBmZWF0dXJlIGFuZCB0aGUgdmFsdWVzIGFyZSBpZ25vcmVkCisJICogaW4gdGhhdCBjYXNlLgorCSAqLworCXUzMgl0eF9jb2FsZXNjZV91c2Vjc19pcnE7CisJdTMyCXR4X21heF9jb2FsZXNjZWRfZnJhbWVzX2lycTsKKworCS8qIEhvdyBtYW55IHVzZWNzIHRvIGRlbGF5IGluLW1lbW9yeSBzdGF0aXN0aWNzCisJICogYmxvY2sgdXBkYXRlcy4gIFNvbWUgZHJpdmVycyBkbyBub3QgaGF2ZSBhbiBpbi1tZW1vcnkKKwkgKiBzdGF0aXN0aWMgYmxvY2ssIGFuZCBpbiBzdWNoIGNhc2VzIHRoaXMgdmFsdWUgaXMgaWdub3JlZC4KKwkgKiBUaGlzIHZhbHVlIG11c3Qgbm90IGJlIHplcm8uCisJICovCisJdTMyCXN0YXRzX2Jsb2NrX2NvYWxlc2NlX3VzZWNzOworCisJLyogQWRhcHRpdmUgUlgvVFggY29hbGVzY2luZyBpcyBhbiBhbGdvcml0aG0gaW1wbGVtZW50ZWQgYnkKKwkgKiBzb21lIGRyaXZlcnMgdG8gaW1wcm92ZSBsYXRlbmN5IHVuZGVyIGxvdyBwYWNrZXQgcmF0ZXMgYW5kCisJICogaW1wcm92ZSB0aHJvdWdocHV0IHVuZGVyIGhpZ2ggcGFja2V0IHJhdGVzLiAgU29tZSBkcml2ZXJzCisJICogb25seSBpbXBsZW1lbnQgb25lIG9mIFJYIG9yIFRYIGFkYXB0aXZlIGNvYWxlc2NpbmcuICBBbnl0aGluZworCSAqIG5vdCBpbXBsZW1lbnRlZCBieSB0aGUgZHJpdmVyIGNhdXNlcyB0aGVzZSB2YWx1ZXMgdG8gYmUKKwkgKiBzaWxlbnRseSBpZ25vcmVkLgorCSAqLworCXUzMgl1c2VfYWRhcHRpdmVfcnhfY29hbGVzY2U7CisJdTMyCXVzZV9hZGFwdGl2ZV90eF9jb2FsZXNjZTsKKworCS8qIFdoZW4gdGhlIHBhY2tldCByYXRlIChtZWFzdXJlZCBpbiBwYWNrZXRzIHBlciBzZWNvbmQpCisJICogaXMgYmVsb3cgcGt0X3JhdGVfbG93LCB0aGUge3J4LHR4fV8qX2xvdyBwYXJhbWV0ZXJzIGFyZQorCSAqIHVzZWQuCisJICovCisJdTMyCXBrdF9yYXRlX2xvdzsKKwl1MzIJcnhfY29hbGVzY2VfdXNlY3NfbG93OworCXUzMglyeF9tYXhfY29hbGVzY2VkX2ZyYW1lc19sb3c7CisJdTMyCXR4X2NvYWxlc2NlX3VzZWNzX2xvdzsKKwl1MzIJdHhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfbG93OworCisJLyogV2hlbiB0aGUgcGFja2V0IHJhdGUgaXMgYmVsb3cgcGt0X3JhdGVfaGlnaCBidXQgYWJvdmUKKwkgKiBwa3RfcmF0ZV9sb3cgKGJvdGggbWVhc3VyZWQgaW4gcGFja2V0cyBwZXIgc2Vjb25kKSB0aGUKKwkgKiBub3JtYWwge3J4LHR4fV8qIGNvYWxlc2NpbmcgcGFyYW1ldGVycyBhcmUgdXNlZC4KKwkgKi8KKworCS8qIFdoZW4gdGhlIHBhY2tldCByYXRlIGlzIChtZWFzdXJlZCBpbiBwYWNrZXRzIHBlciBzZWNvbmQpCisJICogaXMgYWJvdmUgcGt0X3JhdGVfaGlnaCwgdGhlIHtyeCx0eH1fKl9oaWdoIHBhcmFtZXRlcnMgYXJlCisJICogdXNlZC4KKwkgKi8KKwl1MzIJcGt0X3JhdGVfaGlnaDsKKwl1MzIJcnhfY29hbGVzY2VfdXNlY3NfaGlnaDsKKwl1MzIJcnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfaGlnaDsKKwl1MzIJdHhfY29hbGVzY2VfdXNlY3NfaGlnaDsKKwl1MzIJdHhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfaGlnaDsKKworCS8qIEhvdyBvZnRlbiB0byBkbyBhZGFwdGl2ZSBjb2FsZXNjaW5nIHBhY2tldCByYXRlIHNhbXBsaW5nLAorCSAqIG1lYXN1cmVkIGluIHNlY29uZHMuICBNdXN0IG5vdCBiZSB6ZXJvLgorCSAqLworCXUzMglyYXRlX3NhbXBsZV9pbnRlcnZhbDsKK307CisKKy8qIGZvciBjb25maWd1cmluZyBSWC9UWCByaW5nIHBhcmFtZXRlcnMgKi8KK3N0cnVjdCBldGh0b29sX3JpbmdwYXJhbSB7CisJdTMyCWNtZDsJLyogRVRIVE9PTF97RyxTfVJJTkdQQVJBTSAqLworCisJLyogUmVhZCBvbmx5IGF0dHJpYnV0ZXMuICBUaGVzZSBpbmRpY2F0ZSB0aGUgbWF4aW11bSBudW1iZXIKKwkgKiBvZiBwZW5kaW5nIFJYL1RYIHJpbmcgZW50cmllcyB0aGUgZHJpdmVyIHdpbGwgYWxsb3cgdGhlCisJICogdXNlciB0byBzZXQuCisJICovCisJdTMyCXJ4X21heF9wZW5kaW5nOworCXUzMglyeF9taW5pX21heF9wZW5kaW5nOworCXUzMglyeF9qdW1ib19tYXhfcGVuZGluZzsKKwl1MzIJdHhfbWF4X3BlbmRpbmc7CisKKwkvKiBWYWx1ZXMgY2hhbmdlYWJsZSBieSB0aGUgdXNlci4gIFRoZSB2YWxpZCB2YWx1ZXMgYXJlCisJICogaW4gdGhlIHJhbmdlIDEgdG8gdGhlICIqX21heF9wZW5kaW5nIiBjb3VudGVycGFydCBhYm92ZS4KKwkgKi8KKwl1MzIJcnhfcGVuZGluZzsKKwl1MzIJcnhfbWluaV9wZW5kaW5nOworCXUzMglyeF9qdW1ib19wZW5kaW5nOworCXUzMgl0eF9wZW5kaW5nOworfTsKKworLyogZm9yIGNvbmZpZ3VyaW5nIGxpbmsgZmxvdyBjb250cm9sIHBhcmFtZXRlcnMgKi8KK3N0cnVjdCBldGh0b29sX3BhdXNlcGFyYW0geworCXUzMgljbWQ7CS8qIEVUSFRPT0xfe0csU31QQVVTRVBBUkFNICovCisKKwkvKiBJZiB0aGUgbGluayBpcyBiZWluZyBhdXRvLW5lZ290aWF0ZWQgKHZpYSBldGh0b29sX2NtZC5hdXRvbmVnCisJICogYmVpbmcgdHJ1ZSkgdGhlIHVzZXIgbWF5IHNldCAnYXV0b25ldCcgaGVyZSBub24temVybyB0byBoYXZlIHRoZQorCSAqIHBhdXNlIHBhcmFtZXRlcnMgYmUgYXV0by1uZWdvdGlhdGVkIHRvby4gIEluIHN1Y2ggYSBjYXNlLCB0aGUKKwkgKiB7cngsdHh9X3BhdXNlIHZhbHVlcyBiZWxvdyBkZXRlcm1pbmUgd2hhdCBjYXBhYmlsaXRpZXMgYXJlCisJICogYWR2ZXJ0aXNlZC4KKwkgKgorCSAqIElmICdhdXRvbmVnJyBpcyB6ZXJvIG9yIHRoZSBsaW5rIGlzIG5vdCBiZWluZyBhdXRvLW5lZ290aWF0ZWQsCisJICogdGhlbiB7cngsdHh9X3BhdXNlIGZvcmNlIHRoZSBkcml2ZXIgdG8gdXNlL25vdC11c2UgcGF1c2UKKwkgKiBmbG93IGNvbnRyb2wuCisJICovCisJdTMyCWF1dG9uZWc7CisJdTMyCXJ4X3BhdXNlOworCXUzMgl0eF9wYXVzZTsKK307CisKKyNkZWZpbmUgRVRIX0dTVFJJTkdfTEVOCQkzMgorZW51bSBldGh0b29sX3N0cmluZ3NldCB7CisJRVRIX1NTX1RFU1QJCT0gMCwKKwlFVEhfU1NfU1RBVFMsCit9OworCisvKiBmb3IgcGFzc2luZyBzdHJpbmcgc2V0cyBmb3IgZGF0YSB0YWdnaW5nICovCitzdHJ1Y3QgZXRodG9vbF9nc3RyaW5ncyB7CisJdTMyCWNtZDsJCS8qIEVUSFRPT0xfR1NUUklOR1MgKi8KKwl1MzIJc3RyaW5nX3NldDsJLyogc3RyaW5nIHNldCBpZCBlLmMuIEVUSF9TU19URVNULCBldGMqLworCXUzMglsZW47CQkvKiBudW1iZXIgb2Ygc3RyaW5ncyBpbiB0aGUgc3RyaW5nIHNldCAqLworCXU4CWRhdGFbMF07Cit9OworCitlbnVtIGV0aHRvb2xfdGVzdF9mbGFncyB7CisJRVRIX1RFU1RfRkxfT0ZGTElORQk9ICgxIDw8IDApLAkvKiBvbmxpbmUgLyBvZmZsaW5lICovCisJRVRIX1RFU1RfRkxfRkFJTEVECT0gKDEgPDwgMSksCS8qIHRlc3QgcGFzc2VkIC8gZmFpbGVkICovCit9OworCisvKiBmb3IgcmVxdWVzdGluZyBOSUMgdGVzdCBhbmQgZ2V0dGluZyByZXN1bHRzKi8KK3N0cnVjdCBldGh0b29sX3Rlc3QgeworCXUzMgljbWQ7CQkvKiBFVEhUT09MX1RFU1QgKi8KKwl1MzIJZmxhZ3M7CQkvKiBFVEhfVEVTVF9GTF94eHggKi8KKwl1MzIJcmVzZXJ2ZWQ7CisJdTMyCWxlbjsJCS8qIHJlc3VsdCBsZW5ndGgsIGluIG51bWJlciBvZiB1NjQgZWxlbWVudHMgKi8KKwl1NjQJZGF0YVswXTsKK307CisKKy8qIGZvciBkdW1waW5nIE5JQy1zcGVjaWZpYyBzdGF0aXN0aWNzICovCitzdHJ1Y3QgZXRodG9vbF9zdGF0cyB7CisJdTMyCWNtZDsJCS8qIEVUSFRPT0xfR1NUQVRTICovCisJdTMyCW5fc3RhdHM7CS8qIG51bWJlciBvZiB1NjQncyBiZWluZyByZXR1cm5lZCAqLworCXU2NAlkYXRhWzBdOworfTsKKworc3RydWN0IG5ldF9kZXZpY2U7CisKKy8qIFNvbWUgZ2VuZXJpYyBtZXRob2RzIGRyaXZlcnMgbWF5IHVzZSBpbiB0aGVpciBldGh0b29sX29wcyAqLwordTMyIGV0aHRvb2xfb3BfZ2V0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Cit1MzIgZXRodG9vbF9vcF9nZXRfdHhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK2ludCBldGh0b29sX29wX3NldF90eF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKTsKK3UzMiBldGh0b29sX29wX2dldF9zZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK2ludCBldGh0b29sX29wX3NldF9zZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSk7Cit1MzIgZXRodG9vbF9vcF9nZXRfdHNvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworaW50IGV0aHRvb2xfb3Bfc2V0X3RzbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSk7CisKKy8qKgorICogJmV0aHRvb2xfb3BzIC0gQWx0ZXIgYW5kIHJlcG9ydCBuZXR3b3JrIGRldmljZSBzZXR0aW5ncworICogZ2V0X3NldHRpbmdzOiBHZXQgZGV2aWNlLXNwZWNpZmljIHNldHRpbmdzCisgKiBzZXRfc2V0dGluZ3M6IFNldCBkZXZpY2Utc3BlY2lmaWMgc2V0dGluZ3MKKyAqIGdldF9kcnZpbmZvOiBSZXBvcnQgZHJpdmVyIGluZm9ybWF0aW9uCisgKiBnZXRfcmVnczogR2V0IGRldmljZSByZWdpc3RlcnMKKyAqIGdldF93b2w6IFJlcG9ydCB3aGV0aGVyIFdha2Utb24tTGFuIGlzIGVuYWJsZWQKKyAqIHNldF93b2w6IFR1cm4gV2FrZS1vbi1MYW4gb24gb3Igb2ZmCisgKiBnZXRfbXNnbGV2ZWw6IFJlcG9ydCBkcml2ZXIgbWVzc2FnZSBsZXZlbAorICogc2V0X21zZ2xldmVsOiBTZXQgZHJpdmVyIG1lc3NhZ2UgbGV2ZWwKKyAqIG53YXlfcmVzZXQ6IFJlc3RhcnQgYXV0b25lZ290aWF0aW9uCisgKiBnZXRfbGluazogR2V0IGxpbmsgc3RhdHVzCisgKiBnZXRfZWVwcm9tOiBSZWFkIGRhdGEgZnJvbSB0aGUgZGV2aWNlIEVFUFJPTQorICogc2V0X2VlcHJvbTogV3JpdGUgZGF0YSB0byB0aGUgZGV2aWNlIEVFUFJPTQorICogZ2V0X2NvYWxlc2NlOiBHZXQgaW50ZXJydXB0IGNvYWxlc2NpbmcgcGFyYW1ldGVycworICogc2V0X2NvYWxlc2NlOiBTZXQgaW50ZXJydXB0IGNvYWxlc2NpbmcgcGFyYW1ldGVycworICogZ2V0X3JpbmdwYXJhbTogUmVwb3J0IHJpbmcgc2l6ZXMKKyAqIHNldF9yaW5ncGFyYW06IFNldCByaW5nIHNpemVzCisgKiBnZXRfcGF1c2VwYXJhbTogUmVwb3J0IHBhdXNlIHBhcmFtZXRlcnMKKyAqIHNldF9wYXVzZXBhcmFtOiBTZXQgcGF1c2UgcGFyYW10ZXJzCisgKiBnZXRfcnhfY3N1bTogUmVwb3J0IHdoZXRoZXIgcmVjZWl2ZSBjaGVja3N1bXMgYXJlIHR1cm5lZCBvbiBvciBvZmYKKyAqIHNldF9yeF9jc3VtOiBUdXJuIHJlY2VpdmUgY2hlY2tzdW0gb24gb3Igb2ZmCisgKiBnZXRfdHhfY3N1bTogUmVwb3J0IHdoZXRoZXIgdHJhbnNtaXQgY2hlY2tzdW1zIGFyZSB0dXJuZWQgb24gb3Igb2ZmCisgKiBzZXRfdHhfY3N1bTogVHVybiB0cmFuc21pdCBjaGVja3N1bXMgb24gb3Igb2ZmCisgKiBnZXRfc2c6IFJlcG9ydCB3aGV0aGVyIHNjYXR0ZXItZ2F0aGVyIGlzIGVuYWJsZWQKKyAqIHNldF9zZzogVHVybiBzY2F0dGVyLWdhdGhlciBvbiBvciBvZmYKKyAqIGdldF90c286IFJlcG9ydCB3aGV0aGVyIFRDUCBzZWdtZW50YXRpb24gb2ZmbG9hZCBpcyBlbmFibGVkCisgKiBzZXRfdHNvOiBUdXJuIFRDUCBzZWdtZW50YXRpb24gb2ZmbG9hZCBvbiBvciBvZmYKKyAqIHNlbGZfdGVzdDogUnVuIHNwZWNpZmllZCBzZWxmLXRlc3RzCisgKiBnZXRfc3RyaW5nczogUmV0dXJuIGEgc2V0IG9mIHN0cmluZ3MgdGhhdCBkZXNjcmliZSB0aGUgcmVxdWVzdGVkIG9iamVjdHMgCisgKiBwaHlzX2lkOiBJZGVudGlmeSB0aGUgZGV2aWNlCisgKiBnZXRfc3RhdHM6IFJldHVybiBzdGF0aXN0aWNzIGFib3V0IHRoZSBkZXZpY2UKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqCisgKiBnZXRfc2V0dGluZ3M6CisgKglAZ2V0X3NldHRpbmdzIGlzIHBhc3NlZCBhbiAmZXRodG9vbF9jbWQgdG8gZmlsbCBpbi4gIEl0IHJldHVybnMKKyAqCWFuIG5lZ2F0aXZlIGVycm5vIG9yIHplcm8uCisgKgorICogc2V0X3NldHRpbmdzOgorICoJQHNldF9zZXR0aW5ncyBpcyBwYXNzZWQgYW4gJmV0aHRvb2xfY21kIGFuZCBzaG91bGQgYXR0ZW1wdCB0byBzZXQKKyAqCWFsbCB0aGUgc2V0dGluZ3MgdGhpcyBkZXZpY2Ugc3VwcG9ydHMuICBJdCBtYXkgcmV0dXJuIGFuIGVycm9yIHZhbHVlCisgKglpZiBzb21ldGhpbmcgZ29lcyB3cm9uZyAob3RoZXJ3aXNlIDApLgorICoKKyAqIGdldF9lZXByb206CisgKglTaG91bGQgZmlsbCBpbiB0aGUgbWFnaWMgZmllbGQuICBEb24ndCBuZWVkIHRvIGNoZWNrIGxlbiBmb3IgemVybworICoJb3Igd3JhcGFyb3VuZC4gIEZpbGwgaW4gdGhlIGRhdGEgYXJndW1lbnQgd2l0aCB0aGUgZWVwcm9tIHZhbHVlcworICoJZnJvbSBvZmZzZXQgdG8gb2Zmc2V0ICsgbGVuLiAgVXBkYXRlIGxlbiB0byB0aGUgYW1vdW50IHJlYWQuCisgKglSZXR1cm5zIGFuIGVycm9yIG9yIHplcm8uCisgKgorICogc2V0X2VlcHJvbToKKyAqCVNob3VsZCB2YWxpZGF0ZSB0aGUgbWFnaWMgZmllbGQuICBEb24ndCBuZWVkIHRvIGNoZWNrIGxlbiBmb3IgemVybworICoJb3Igd3JhcGFyb3VuZC4gIFVwZGF0ZSBsZW4gdG8gdGhlIGFtb3VudCB3cml0dGVuLiAgUmV0dXJucyBhbiBlcnJvcgorICoJb3IgemVyby4KKyAqLworc3RydWN0IGV0aHRvb2xfb3BzIHsKKwlpbnQJKCpnZXRfc2V0dGluZ3MpKHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBldGh0b29sX2NtZCAqKTsKKwlpbnQJKCpzZXRfc2V0dGluZ3MpKHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBldGh0b29sX2NtZCAqKTsKKwl2b2lkCSgqZ2V0X2RydmluZm8pKHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBldGh0b29sX2RydmluZm8gKik7CisJaW50CSgqZ2V0X3JlZ3NfbGVuKShzdHJ1Y3QgbmV0X2RldmljZSAqKTsKKwl2b2lkCSgqZ2V0X3JlZ3MpKHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBldGh0b29sX3JlZ3MgKiwgdm9pZCAqKTsKKwl2b2lkCSgqZ2V0X3dvbCkoc3RydWN0IG5ldF9kZXZpY2UgKiwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqKTsKKwlpbnQJKCpzZXRfd29sKShzdHJ1Y3QgbmV0X2RldmljZSAqLCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICopOworCXUzMgkoKmdldF9tc2dsZXZlbCkoc3RydWN0IG5ldF9kZXZpY2UgKik7CisJdm9pZAkoKnNldF9tc2dsZXZlbCkoc3RydWN0IG5ldF9kZXZpY2UgKiwgdTMyKTsKKwlpbnQJKCpud2F5X3Jlc2V0KShzdHJ1Y3QgbmV0X2RldmljZSAqKTsKKwl1MzIJKCpnZXRfbGluaykoc3RydWN0IG5ldF9kZXZpY2UgKik7CisJaW50CSgqZ2V0X2VlcHJvbV9sZW4pKHN0cnVjdCBuZXRfZGV2aWNlICopOworCWludAkoKmdldF9lZXByb20pKHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBldGh0b29sX2VlcHJvbSAqLCB1OCAqKTsKKwlpbnQJKCpzZXRfZWVwcm9tKShzdHJ1Y3QgbmV0X2RldmljZSAqLCBzdHJ1Y3QgZXRodG9vbF9lZXByb20gKiwgdTggKik7CisJaW50CSgqZ2V0X2NvYWxlc2NlKShzdHJ1Y3QgbmV0X2RldmljZSAqLCBzdHJ1Y3QgZXRodG9vbF9jb2FsZXNjZSAqKTsKKwlpbnQJKCpzZXRfY29hbGVzY2UpKHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBldGh0b29sX2NvYWxlc2NlICopOworCXZvaWQJKCpnZXRfcmluZ3BhcmFtKShzdHJ1Y3QgbmV0X2RldmljZSAqLCBzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gKik7CisJaW50CSgqc2V0X3JpbmdwYXJhbSkoc3RydWN0IG5ldF9kZXZpY2UgKiwgc3RydWN0IGV0aHRvb2xfcmluZ3BhcmFtICopOworCXZvaWQJKCpnZXRfcGF1c2VwYXJhbSkoc3RydWN0IG5ldF9kZXZpY2UgKiwgc3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbSopOworCWludAkoKnNldF9wYXVzZXBhcmFtKShzdHJ1Y3QgbmV0X2RldmljZSAqLCBzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtKik7CisJdTMyCSgqZ2V0X3J4X2NzdW0pKHN0cnVjdCBuZXRfZGV2aWNlICopOworCWludAkoKnNldF9yeF9jc3VtKShzdHJ1Y3QgbmV0X2RldmljZSAqLCB1MzIpOworCXUzMgkoKmdldF90eF9jc3VtKShzdHJ1Y3QgbmV0X2RldmljZSAqKTsKKwlpbnQJKCpzZXRfdHhfY3N1bSkoc3RydWN0IG5ldF9kZXZpY2UgKiwgdTMyKTsKKwl1MzIJKCpnZXRfc2cpKHN0cnVjdCBuZXRfZGV2aWNlICopOworCWludAkoKnNldF9zZykoc3RydWN0IG5ldF9kZXZpY2UgKiwgdTMyKTsKKwl1MzIJKCpnZXRfdHNvKShzdHJ1Y3QgbmV0X2RldmljZSAqKTsKKwlpbnQJKCpzZXRfdHNvKShzdHJ1Y3QgbmV0X2RldmljZSAqLCB1MzIpOworCWludAkoKnNlbGZfdGVzdF9jb3VudCkoc3RydWN0IG5ldF9kZXZpY2UgKik7CisJdm9pZAkoKnNlbGZfdGVzdCkoc3RydWN0IG5ldF9kZXZpY2UgKiwgc3RydWN0IGV0aHRvb2xfdGVzdCAqLCB1NjQgKik7CisJdm9pZAkoKmdldF9zdHJpbmdzKShzdHJ1Y3QgbmV0X2RldmljZSAqLCB1MzIgc3RyaW5nc2V0LCB1OCAqKTsKKwlpbnQJKCpwaHlzX2lkKShzdHJ1Y3QgbmV0X2RldmljZSAqLCB1MzIpOworCWludAkoKmdldF9zdGF0c19jb3VudCkoc3RydWN0IG5ldF9kZXZpY2UgKik7CisJdm9pZAkoKmdldF9ldGh0b29sX3N0YXRzKShzdHJ1Y3QgbmV0X2RldmljZSAqLCBzdHJ1Y3QgZXRodG9vbF9zdGF0cyAqLCB1NjQgKik7CisJaW50CSgqYmVnaW4pKHN0cnVjdCBuZXRfZGV2aWNlICopOworCXZvaWQJKCpjb21wbGV0ZSkoc3RydWN0IG5ldF9kZXZpY2UgKik7Cit9OworCisvKiBDTURzIGN1cnJlbnRseSBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUgRVRIVE9PTF9HU0VUCQkweDAwMDAwMDAxIC8qIEdldCBzZXR0aW5ncy4gKi8KKyNkZWZpbmUgRVRIVE9PTF9TU0VUCQkweDAwMDAwMDAyIC8qIFNldCBzZXR0aW5ncy4gKi8KKyNkZWZpbmUgRVRIVE9PTF9HRFJWSU5GTwkweDAwMDAwMDAzIC8qIEdldCBkcml2ZXIgaW5mby4gKi8KKyNkZWZpbmUgRVRIVE9PTF9HUkVHUwkJMHgwMDAwMDAwNCAvKiBHZXQgTklDIHJlZ2lzdGVycy4gKi8KKyNkZWZpbmUgRVRIVE9PTF9HV09MCQkweDAwMDAwMDA1IC8qIEdldCB3YWtlLW9uLWxhbiBvcHRpb25zLiAqLworI2RlZmluZSBFVEhUT09MX1NXT0wJCTB4MDAwMDAwMDYgLyogU2V0IHdha2Utb24tbGFuIG9wdGlvbnMuICovCisjZGVmaW5lIEVUSFRPT0xfR01TR0xWTAkJMHgwMDAwMDAwNyAvKiBHZXQgZHJpdmVyIG1lc3NhZ2UgbGV2ZWwgKi8KKyNkZWZpbmUgRVRIVE9PTF9TTVNHTFZMCQkweDAwMDAwMDA4IC8qIFNldCBkcml2ZXIgbXNnIGxldmVsLiAqLworI2RlZmluZSBFVEhUT09MX05XQVlfUlNUCTB4MDAwMDAwMDkgLyogUmVzdGFydCBhdXRvbmVnb3RpYXRpb24uICovCisjZGVmaW5lIEVUSFRPT0xfR0xJTksJCTB4MDAwMDAwMGEgLyogR2V0IGxpbmsgc3RhdHVzIChldGh0b29sX3ZhbHVlKSAqLworI2RlZmluZSBFVEhUT09MX0dFRVBST00JCTB4MDAwMDAwMGIgLyogR2V0IEVFUFJPTSBkYXRhICovCisjZGVmaW5lIEVUSFRPT0xfU0VFUFJPTQkJMHgwMDAwMDAwYyAvKiBTZXQgRUVQUk9NIGRhdGEuICovCisjZGVmaW5lIEVUSFRPT0xfR0NPQUxFU0NFCTB4MDAwMDAwMGUgLyogR2V0IGNvYWxlc2NlIGNvbmZpZyAqLworI2RlZmluZSBFVEhUT09MX1NDT0FMRVNDRQkweDAwMDAwMDBmIC8qIFNldCBjb2FsZXNjZSBjb25maWcuICovCisjZGVmaW5lIEVUSFRPT0xfR1JJTkdQQVJBTQkweDAwMDAwMDEwIC8qIEdldCByaW5nIHBhcmFtZXRlcnMgKi8KKyNkZWZpbmUgRVRIVE9PTF9TUklOR1BBUkFNCTB4MDAwMDAwMTEgLyogU2V0IHJpbmcgcGFyYW1ldGVycy4gKi8KKyNkZWZpbmUgRVRIVE9PTF9HUEFVU0VQQVJBTQkweDAwMDAwMDEyIC8qIEdldCBwYXVzZSBwYXJhbWV0ZXJzICovCisjZGVmaW5lIEVUSFRPT0xfU1BBVVNFUEFSQU0JMHgwMDAwMDAxMyAvKiBTZXQgcGF1c2UgcGFyYW1ldGVycy4gKi8KKyNkZWZpbmUgRVRIVE9PTF9HUlhDU1VNCQkweDAwMDAwMDE0IC8qIEdldCBSWCBodyBjc3VtIGVuYWJsZSAoZXRodG9vbF92YWx1ZSkgKi8KKyNkZWZpbmUgRVRIVE9PTF9TUlhDU1VNCQkweDAwMDAwMDE1IC8qIFNldCBSWCBodyBjc3VtIGVuYWJsZSAoZXRodG9vbF92YWx1ZSkgKi8KKyNkZWZpbmUgRVRIVE9PTF9HVFhDU1VNCQkweDAwMDAwMDE2IC8qIEdldCBUWCBodyBjc3VtIGVuYWJsZSAoZXRodG9vbF92YWx1ZSkgKi8KKyNkZWZpbmUgRVRIVE9PTF9TVFhDU1VNCQkweDAwMDAwMDE3IC8qIFNldCBUWCBodyBjc3VtIGVuYWJsZSAoZXRodG9vbF92YWx1ZSkgKi8KKyNkZWZpbmUgRVRIVE9PTF9HU0cJCTB4MDAwMDAwMTggLyogR2V0IHNjYXR0ZXItZ2F0aGVyIGVuYWJsZQorCQkJCQkgICAgKiAoZXRodG9vbF92YWx1ZSkgKi8KKyNkZWZpbmUgRVRIVE9PTF9TU0cJCTB4MDAwMDAwMTkgLyogU2V0IHNjYXR0ZXItZ2F0aGVyIGVuYWJsZQorCQkJCQkgICAgKiAoZXRodG9vbF92YWx1ZSkuICovCisjZGVmaW5lIEVUSFRPT0xfVEVTVAkJMHgwMDAwMDAxYSAvKiBleGVjdXRlIE5JQyBzZWxmLXRlc3QuICovCisjZGVmaW5lIEVUSFRPT0xfR1NUUklOR1MJMHgwMDAwMDAxYiAvKiBnZXQgc3BlY2lmaWVkIHN0cmluZyBzZXQgKi8KKyNkZWZpbmUgRVRIVE9PTF9QSFlTX0lECQkweDAwMDAwMDFjIC8qIGlkZW50aWZ5IHRoZSBOSUMgKi8KKyNkZWZpbmUgRVRIVE9PTF9HU1RBVFMJCTB4MDAwMDAwMWQgLyogZ2V0IE5JQy1zcGVjaWZpYyBzdGF0aXN0aWNzICovCisjZGVmaW5lIEVUSFRPT0xfR1RTTwkJMHgwMDAwMDAxZSAvKiBHZXQgVFNPIGVuYWJsZSAoZXRodG9vbF92YWx1ZSkgKi8KKyNkZWZpbmUgRVRIVE9PTF9TVFNPCQkweDAwMDAwMDFmIC8qIFNldCBUU08gZW5hYmxlIChldGh0b29sX3ZhbHVlKSAqLworCisvKiBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgY29kZSAqLworI2RlZmluZSBTUEFSQ19FVEhfR1NFVAkJRVRIVE9PTF9HU0VUCisjZGVmaW5lIFNQQVJDX0VUSF9TU0VUCQlFVEhUT09MX1NTRVQKKworLyogSW5kaWNhdGVzIHdoYXQgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZCBieSB0aGUgaW50ZXJmYWNlLiAqLworI2RlZmluZSBTVVBQT1JURURfMTBiYXNlVF9IYWxmCQkoMSA8PCAwKQorI2RlZmluZSBTVVBQT1JURURfMTBiYXNlVF9GdWxsCQkoMSA8PCAxKQorI2RlZmluZSBTVVBQT1JURURfMTAwYmFzZVRfSGFsZgkJKDEgPDwgMikKKyNkZWZpbmUgU1VQUE9SVEVEXzEwMGJhc2VUX0Z1bGwJCSgxIDw8IDMpCisjZGVmaW5lIFNVUFBPUlRFRF8xMDAwYmFzZVRfSGFsZgkoMSA8PCA0KQorI2RlZmluZSBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwJKDEgPDwgNSkKKyNkZWZpbmUgU1VQUE9SVEVEX0F1dG9uZWcJCSgxIDw8IDYpCisjZGVmaW5lIFNVUFBPUlRFRF9UUAkJCSgxIDw8IDcpCisjZGVmaW5lIFNVUFBPUlRFRF9BVUkJCQkoMSA8PCA4KQorI2RlZmluZSBTVVBQT1JURURfTUlJCQkJKDEgPDwgOSkKKyNkZWZpbmUgU1VQUE9SVEVEX0ZJQlJFCQkJKDEgPDwgMTApCisjZGVmaW5lIFNVUFBPUlRFRF9CTkMJCQkoMSA8PCAxMSkKKyNkZWZpbmUgU1VQUE9SVEVEXzEwMDAwYmFzZVRfRnVsbAkoMSA8PCAxMikKKworLyogSW5kaWNhdGVzIHdoYXQgZmVhdHVyZXMgYXJlIGFkdmVydGlzZWQgYnkgdGhlIGludGVyZmFjZS4gKi8KKyNkZWZpbmUgQURWRVJUSVNFRF8xMGJhc2VUX0hhbGYJCSgxIDw8IDApCisjZGVmaW5lIEFEVkVSVElTRURfMTBiYXNlVF9GdWxsCQkoMSA8PCAxKQorI2RlZmluZSBBRFZFUlRJU0VEXzEwMGJhc2VUX0hhbGYJKDEgPDwgMikKKyNkZWZpbmUgQURWRVJUSVNFRF8xMDBiYXNlVF9GdWxsCSgxIDw8IDMpCisjZGVmaW5lIEFEVkVSVElTRURfMTAwMGJhc2VUX0hhbGYJKDEgPDwgNCkKKyNkZWZpbmUgQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbAkoMSA8PCA1KQorI2RlZmluZSBBRFZFUlRJU0VEX0F1dG9uZWcJCSgxIDw8IDYpCisjZGVmaW5lIEFEVkVSVElTRURfVFAJCQkoMSA8PCA3KQorI2RlZmluZSBBRFZFUlRJU0VEX0FVSQkJCSgxIDw8IDgpCisjZGVmaW5lIEFEVkVSVElTRURfTUlJCQkJKDEgPDwgOSkKKyNkZWZpbmUgQURWRVJUSVNFRF9GSUJSRQkJKDEgPDwgMTApCisjZGVmaW5lIEFEVkVSVElTRURfQk5DCQkJKDEgPDwgMTEpCisjZGVmaW5lIEFEVkVSVElTRURfMTAwMDBiYXNlVF9GdWxsCSgxIDw8IDEyKQorCisvKiBUaGUgZm9sbG93aW5nIGFyZSBhbGwgaW52b2x2ZWQgaW4gZm9yY2luZyBhIHBhcnRpY3VsYXIgbGluaworICogbW9kZSBmb3IgdGhlIGRldmljZSBmb3Igc2V0dGluZyB0aGluZ3MuICBXaGVuIGdldHRpbmcgdGhlCisgKiBkZXZpY2VzIHNldHRpbmdzLCB0aGVzZSBpbmRpY2F0ZSB0aGUgY3VycmVudCBtb2RlIGFuZCB3aGV0aGVyCisgKiBpdCB3YXMgZm9jZWQgdXAgaW50byB0aGlzIG1vZGUgb3IgYXV0b25lZ290aWF0ZWQuCisgKi8KKworLyogVGhlIGZvcmNlZCBzcGVlZCwgMTBNYiwgMTAwTWIsIGdpZ2FiaXQsIDEwR2JFLiAqLworI2RlZmluZSBTUEVFRF8xMAkJMTAKKyNkZWZpbmUgU1BFRURfMTAwCQkxMDAKKyNkZWZpbmUgU1BFRURfMTAwMAkJMTAwMAorI2RlZmluZSBTUEVFRF8xMDAwMAkJMTAwMDAKKworLyogRHVwbGV4LCBoYWxmIG9yIGZ1bGwuICovCisjZGVmaW5lIERVUExFWF9IQUxGCQkweDAwCisjZGVmaW5lIERVUExFWF9GVUxMCQkweDAxCisKKy8qIFdoaWNoIGNvbm5lY3RvciBwb3J0LiAqLworI2RlZmluZSBQT1JUX1RQCQkJMHgwMAorI2RlZmluZSBQT1JUX0FVSQkJMHgwMQorI2RlZmluZSBQT1JUX01JSQkJMHgwMgorI2RlZmluZSBQT1JUX0ZJQlJFCQkweDAzCisjZGVmaW5lIFBPUlRfQk5DCQkweDA0CisKKy8qIFdoaWNoIHRyYW5zY2VpdmVyIHRvIHVzZS4gKi8KKyNkZWZpbmUgWENWUl9JTlRFUk5BTAkJMHgwMAorI2RlZmluZSBYQ1ZSX0VYVEVSTkFMCQkweDAxCisjZGVmaW5lIFhDVlJfRFVNTVkxCQkweDAyCisjZGVmaW5lIFhDVlJfRFVNTVkyCQkweDAzCisjZGVmaW5lIFhDVlJfRFVNTVkzCQkweDA0CisKKy8qIEVuYWJsZSBvciBkaXNhYmxlIGF1dG9uZWdvdGlhdGlvbi4gIElmIHRoaXMgaXMgc2V0IHRvIGVuYWJsZSwKKyAqIHRoZSBmb3JjZWQgbGluayBtb2RlcyBhYm92ZSBhcmUgY29tcGxldGVseSBpZ25vcmVkLgorICovCisjZGVmaW5lIEFVVE9ORUdfRElTQUJMRQkJMHgwMAorI2RlZmluZSBBVVRPTkVHX0VOQUJMRQkJMHgwMQorCisvKiBXYWtlLU9uLUxhbiBvcHRpb25zLiAqLworI2RlZmluZSBXQUtFX1BIWQkJKDEgPDwgMCkKKyNkZWZpbmUgV0FLRV9VQ0FTVAkJKDEgPDwgMSkKKyNkZWZpbmUgV0FLRV9NQ0FTVAkJKDEgPDwgMikKKyNkZWZpbmUgV0FLRV9CQ0FTVAkJKDEgPDwgMykKKyNkZWZpbmUgV0FLRV9BUlAJCSgxIDw8IDQpCisjZGVmaW5lIFdBS0VfTUFHSUMJCSgxIDw8IDUpCisjZGVmaW5lIFdBS0VfTUFHSUNTRUNVUkUJKDEgPDwgNikgLyogb25seSBtZWFuaW5nZnVsIGlmIFdBS0VfTUFHSUMgKi8KKworI2VuZGlmIC8qIF9MSU5VWF9FVEhUT09MX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXZlbnRwb2xsLmggYi9pbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyODlmMGUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiAgaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaCAoIEVmZmljZW50IGV2ZW50IHBvbGxpbmcgaW1wbGVtZW50YXRpb24gKQorICogIENvcHlyaWdodCAoQykgMjAwMSwuLi4sMjAwMwkgRGF2aWRlIExpYmVuemkKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgRGF2aWRlIExpYmVuemkgPGRhdmlkZWxAeG1haWxzZXJ2ZXIub3JnPgorICoKKyAqLworCisjaWZuZGVmIF9MSU5VWF9FVkVOVFBPTExfSAorI2RlZmluZSBfTElOVVhfRVZFTlRQT0xMX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKworLyogVmFsaWQgb3Bjb2RlcyB0byBpc3N1ZSB0byBzeXNfZXBvbGxfY3RsKCkgKi8KKyNkZWZpbmUgRVBPTExfQ1RMX0FERCAxCisjZGVmaW5lIEVQT0xMX0NUTF9ERUwgMgorI2RlZmluZSBFUE9MTF9DVExfTU9EIDMKKworLyogU2V0IHRoZSBPbmUgU2hvdCBiZWhhdmlvdXIgZm9yIHRoZSB0YXJnZXQgZmlsZSBkZXNjcmlwdG9yICovCisjZGVmaW5lIEVQT0xMT05FU0hPVCAoMSA8PCAzMCkKKworLyogU2V0IHRoZSBFZGdlIFRyaWdnZXJlZCBiZWhhdmlvdXIgZm9yIHRoZSB0YXJnZXQgZmlsZSBkZXNjcmlwdG9yICovCisjZGVmaW5lIEVQT0xMRVQgKDEgPDwgMzEpCisKKy8qIAorICogT24geDg2LTY0IG1ha2UgdGhlIDY0Yml0IHN0cnVjdHVyZSBoYXZlIHRoZSBzYW1lIGFsaWdubWVudCBhcyB0aGUKKyAqIDMyYml0IHN0cnVjdHVyZS4gVGhpcyBtYWtlcyAzMmJpdCBlbXVsYXRpb24gZWFzaWVyLgorICovCisjaWZkZWYgX194ODZfNjRfXworI2RlZmluZSBFUE9MTF9QQUNLRUQgX19hdHRyaWJ1dGVfXygocGFja2VkKSkKKyNlbHNlCisjZGVmaW5lIEVQT0xMX1BBQ0tFRAorI2VuZGlmCisKK3N0cnVjdCBlcG9sbF9ldmVudCB7CisJX191MzIgZXZlbnRzOworCV9fdTY0IGRhdGE7Cit9IEVQT0xMX1BBQ0tFRDsKKworI2lmZGVmIF9fS0VSTkVMX18KKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgdG8gYXZvaWQgY29tcGlsZXIgZXJyb3JzICovCitzdHJ1Y3QgZmlsZTsKKworCisjaWZkZWYgQ09ORklHX0VQT0xMCisKKy8qIFVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgZXBvbGwgYml0cyBpbnNpZGUgdGhlICJzdHJ1Y3QgZmlsZSIgKi8KK3ZvaWQgZXZlbnRwb2xsX2luaXRfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSk7CisKKy8qIFVzZWQgdG8gcmVsZWFzZSB0aGUgZXBvbGwgYml0cyBpbnNpZGUgdGhlICJzdHJ1Y3QgZmlsZSIgKi8KK3ZvaWQgZXZlbnRwb2xsX3JlbGVhc2VfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSk7CisKKy8qCisgKiBUaGlzIGlzIGNhbGxlZCBmcm9tIGluc2lkZSBmcy9maWxlX3RhYmxlLmM6X19mcHV0KCkgdG8gdW5saW5rIGZpbGVzCisgKiBmcm9tIHRoZSBldmVudHBvbGwgaW50ZXJmYWNlLiBXZSBuZWVkIHRvIGhhdmUgdGhpcyBmYWNpbGl0eSB0byBjbGVhbnVwCisgKiBjb3JyZWN0bHkgZmlsZXMgdGhhdCBhcmUgY2xvc2VkIHdpdGhvdXQgYmVpbmcgcmVtb3ZlZCBmcm9tIHRoZSBldmVudHBvbGwKKyAqIGludGVyZmFjZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGV2ZW50cG9sbF9yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQoreworCisJLyoKKwkgKiBGYXN0IGNoZWNrIHRvIGF2b2lkIHRoZSBnZXQvcmVsZWFzZSBvZiB0aGUgc2VtYXBob3JlLiBTaW5jZQorCSAqIHdlJ3JlIGRvaW5nIHRoaXMgb3V0c2lkZSB0aGUgc2VtYXBob3JlIGxvY2ssIGl0IG1pZ2h0IHJldHVybgorCSAqIGZhbHNlIG5lZ2F0aXZlcywgYnV0IHdlIGRvbid0IGNhcmUuIEl0J2xsIGhlbHAgaW4gOTkuOTklIG9mIGNhc2VzCisJICogdG8gYXZvaWQgdGhlIHNlbWFwaG9yZSBsb2NrLiBGYWxzZSBwb3NpdGl2ZXMgc2ltcGx5IGNhbm5vdCBoYXBwZW4KKwkgKiBiZWNhdXNlIHRoZSBmaWxlIGluIG9uIHRoZSB3YXkgdG8gYmUgcmVtb3ZlZCBhbmQgbm9ib2R5ICggYnV0CisJICogZXZlbnRwb2xsICkgaGFzIHN0aWxsIGEgcmVmZXJlbmNlIHRvIHRoaXMgZmlsZS4KKwkgKi8KKwlpZiAobGlrZWx5KGxpc3RfZW1wdHkoJmZpbGUtPmZfZXBfbGlua3MpKSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBUaGUgZmlsZSBpcyBiZWluZyBjbG9zZWQgd2hpbGUgaXQgaXMgc3RpbGwgbGlua2VkIHRvIGFuIGVwb2xsCisJICogZGVzY3JpcHRvci4gV2UgbmVlZCB0byBoYW5kbGUgdGhpcyBieSBjb3JyZWN0bHkgdW5saW5raW5nIGl0CisJICogZnJvbSBpdHMgY29udGFpbmVycy4KKwkgKi8KKwlldmVudHBvbGxfcmVsZWFzZV9maWxlKGZpbGUpOworfQorCisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBldmVudHBvbGxfaW5pdF9maWxlKHN0cnVjdCBmaWxlICpmaWxlKSB7fQorc3RhdGljIGlubGluZSB2b2lkIGV2ZW50cG9sbF9yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKSB7fQorCisjZW5kaWYKKworI2VuZGlmIC8qICNpZmRlZiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiAjaWZuZGVmIF9MSU5VWF9FVkVOVFBPTExfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2V4dDJfZnMuaCBiL2luY2x1ZGUvbGludXgvZXh0Ml9mcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhYjQzNTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2V4dDJfZnMuaApAQCAtMCwwICsxLDU1MyBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2xpbnV4L2V4dDJfZnMuaAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NQorICogUmVteSBDYXJkIChjYXJkQG1hc2kuaWJwLmZyKQorICogTGFib3JhdG9pcmUgTUFTSSAtIEluc3RpdHV0IEJsYWlzZSBQYXNjYWwKKyAqIFVuaXZlcnNpdGUgUGllcnJlIGV0IE1hcmllIEN1cmllIChQYXJpcyBWSSkKKyAqCisgKiAgZnJvbQorICoKKyAqICBsaW51eC9pbmNsdWRlL2xpbnV4L21pbml4X2ZzLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyICBMaW51cyBUb3J2YWxkcworICovCisKKyNpZm5kZWYgX0xJTlVYX0VYVDJfRlNfSAorI2RlZmluZSBfTElOVVhfRVhUMl9GU19ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2V4dDJfZnNfc2IuaD4KKworLyoKKyAqIFRoZSBzZWNvbmQgZXh0ZW5kZWQgZmlsZXN5c3RlbSBjb25zdGFudHMvc3RydWN0dXJlcworICovCisKKy8qCisgKiBEZWZpbmUgRVhUMkZTX0RFQlVHIHRvIHByb2R1Y2UgZGVidWcgbWVzc2FnZXMKKyAqLworI3VuZGVmIEVYVDJGU19ERUJVRworCisvKgorICogRGVmaW5lIEVYVDJfUFJFQUxMT0NBVEUgdG8gcHJlYWxsb2NhdGUgZGF0YSBibG9ja3MgZm9yIGV4cGFuZGluZyBmaWxlcworICovCisjZGVmaW5lIEVYVDJfUFJFQUxMT0NBVEUKKyNkZWZpbmUgRVhUMl9ERUZBVUxUX1BSRUFMTE9DX0JMT0NLUwk4CisKKy8qCisgKiBUaGUgc2Vjb25kIGV4dGVuZGVkIGZpbGUgc3lzdGVtIHZlcnNpb24KKyAqLworI2RlZmluZSBFWFQyRlNfREFURQkJIjk1LzA4LzA5IgorI2RlZmluZSBFWFQyRlNfVkVSU0lPTgkJIjAuNWIiCisKKy8qCisgKiBEZWJ1ZyBjb2RlCisgKi8KKyNpZmRlZiBFWFQyRlNfREVCVUcKKyMJZGVmaW5lIGV4dDJfZGVidWcoZiwgYS4uLikJeyBcCisJCQkJCXByaW50ayAoIkVYVDItZnMgREVCVUcgKCVzLCAlZCk6ICVzOiIsIFwKKwkJCQkJCV9fRklMRV9fLCBfX0xJTkVfXywgX19GVU5DVElPTl9fKTsgXAorCQkJCSAgCXByaW50ayAoZiwgIyMgYSk7IFwKKwkJCQkJfQorI2Vsc2UKKyMJZGVmaW5lIGV4dDJfZGVidWcoZiwgYS4uLikJLyoqLworI2VuZGlmCisKKy8qCisgKiBTcGVjaWFsIGlub2RlIG51bWJlcnMKKyAqLworI2RlZmluZQlFWFQyX0JBRF9JTk8JCSAxCS8qIEJhZCBibG9ja3MgaW5vZGUgKi8KKyNkZWZpbmUgRVhUMl9ST09UX0lOTwkJIDIJLyogUm9vdCBpbm9kZSAqLworI2RlZmluZSBFWFQyX0JPT1RfTE9BREVSX0lOTwkgNQkvKiBCb290IGxvYWRlciBpbm9kZSAqLworI2RlZmluZSBFWFQyX1VOREVMX0RJUl9JTk8JIDYJLyogVW5kZWxldGUgZGlyZWN0b3J5IGlub2RlICovCisKKy8qIEZpcnN0IG5vbi1yZXNlcnZlZCBpbm9kZSBmb3Igb2xkIGV4dDIgZmlsZXN5c3RlbXMgKi8KKyNkZWZpbmUgRVhUMl9HT09EX09MRF9GSVJTVF9JTk8JMTEKKworLyoKKyAqIFRoZSBzZWNvbmQgZXh0ZW5kZWQgZmlsZSBzeXN0ZW0gbWFnaWMgbnVtYmVyCisgKi8KKyNkZWZpbmUgRVhUMl9TVVBFUl9NQUdJQwkweEVGNTMKKworI2lmZGVmIF9fS0VSTkVMX18KK3N0YXRpYyBpbmxpbmUgc3RydWN0IGV4dDJfc2JfaW5mbyAqRVhUMl9TQihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCXJldHVybiBzYi0+c19mc19pbmZvOworfQorI2Vsc2UKKy8qIEFzc3VtZSB0aGF0IHVzZXIgbW9kZSBwcm9ncmFtcyBhcmUgcGFzc2luZyBpbiBhbiBleHQyZnMgc3VwZXJibG9jaywgbm90CisgKiBhIGtlcm5lbCBzdHJ1Y3Qgc3VwZXJfYmxvY2suICBUaGlzIHdpbGwgYWxsb3cgdXMgdG8gY2FsbCB0aGUgZmVhdHVyZS10ZXN0CisgKiBtYWNyb3MgZnJvbSB1c2VyIGxhbmQuICovCisjZGVmaW5lIEVYVDJfU0Ioc2IpCShzYikKKyNlbmRpZgorCisvKgorICogTWF4aW1hbCBjb3VudCBvZiBsaW5rcyB0byBhIGZpbGUKKyAqLworI2RlZmluZSBFWFQyX0xJTktfTUFYCQkzMjAwMAorCisvKgorICogTWFjcm8taW5zdHJ1Y3Rpb25zIHVzZWQgdG8gbWFuYWdlIHNldmVyYWwgYmxvY2sgc2l6ZXMKKyAqLworI2RlZmluZSBFWFQyX01JTl9CTE9DS19TSVpFCQkxMDI0CisjZGVmaW5lCUVYVDJfTUFYX0JMT0NLX1NJWkUJCTQwOTYKKyNkZWZpbmUgRVhUMl9NSU5fQkxPQ0tfTE9HX1NJWkUJCSAgMTAKKyNpZmRlZiBfX0tFUk5FTF9fCisjIGRlZmluZSBFWFQyX0JMT0NLX1NJWkUocykJCSgocyktPnNfYmxvY2tzaXplKQorI2Vsc2UKKyMgZGVmaW5lIEVYVDJfQkxPQ0tfU0laRShzKQkJKEVYVDJfTUlOX0JMT0NLX1NJWkUgPDwgKHMpLT5zX2xvZ19ibG9ja19zaXplKQorI2VuZGlmCisjZGVmaW5lCUVYVDJfQUREUl9QRVJfQkxPQ0socykJCShFWFQyX0JMT0NLX1NJWkUocykgLyBzaXplb2YgKF9fdTMyKSkKKyNpZmRlZiBfX0tFUk5FTF9fCisjIGRlZmluZSBFWFQyX0JMT0NLX1NJWkVfQklUUyhzKQkoKHMpLT5zX2Jsb2Nrc2l6ZV9iaXRzKQorI2Vsc2UKKyMgZGVmaW5lIEVYVDJfQkxPQ0tfU0laRV9CSVRTKHMpCSgocyktPnNfbG9nX2Jsb2NrX3NpemUgKyAxMCkKKyNlbmRpZgorI2lmZGVmIF9fS0VSTkVMX18KKyNkZWZpbmUJRVhUMl9BRERSX1BFUl9CTE9DS19CSVRTKHMpCShFWFQyX1NCKHMpLT5zX2FkZHJfcGVyX2Jsb2NrX2JpdHMpCisjZGVmaW5lIEVYVDJfSU5PREVfU0laRShzKQkJKEVYVDJfU0IocyktPnNfaW5vZGVfc2l6ZSkKKyNkZWZpbmUgRVhUMl9GSVJTVF9JTk8ocykJCShFWFQyX1NCKHMpLT5zX2ZpcnN0X2lubykKKyNlbHNlCisjZGVmaW5lIEVYVDJfSU5PREVfU0laRShzKQkoKChzKS0+c19yZXZfbGV2ZWwgPT0gRVhUMl9HT09EX09MRF9SRVYpID8gXAorCQkJCSBFWFQyX0dPT0RfT0xEX0lOT0RFX1NJWkUgOiBcCisJCQkJIChzKS0+c19pbm9kZV9zaXplKQorI2RlZmluZSBFWFQyX0ZJUlNUX0lOTyhzKQkoKChzKS0+c19yZXZfbGV2ZWwgPT0gRVhUMl9HT09EX09MRF9SRVYpID8gXAorCQkJCSBFWFQyX0dPT0RfT0xEX0ZJUlNUX0lOTyA6IFwKKwkJCQkgKHMpLT5zX2ZpcnN0X2lubykKKyNlbmRpZgorCisvKgorICogTWFjcm8taW5zdHJ1Y3Rpb25zIHVzZWQgdG8gbWFuYWdlIGZyYWdtZW50cworICovCisjZGVmaW5lIEVYVDJfTUlOX0ZSQUdfU0laRQkJMTAyNAorI2RlZmluZQlFWFQyX01BWF9GUkFHX1NJWkUJCTQwOTYKKyNkZWZpbmUgRVhUMl9NSU5fRlJBR19MT0dfU0laRQkJICAxMAorI2lmZGVmIF9fS0VSTkVMX18KKyMgZGVmaW5lIEVYVDJfRlJBR19TSVpFKHMpCQkoRVhUMl9TQihzKS0+c19mcmFnX3NpemUpCisjIGRlZmluZSBFWFQyX0ZSQUdTX1BFUl9CTE9DSyhzKQkoRVhUMl9TQihzKS0+c19mcmFnc19wZXJfYmxvY2spCisjZWxzZQorIyBkZWZpbmUgRVhUMl9GUkFHX1NJWkUocykJCShFWFQyX01JTl9GUkFHX1NJWkUgPDwgKHMpLT5zX2xvZ19mcmFnX3NpemUpCisjIGRlZmluZSBFWFQyX0ZSQUdTX1BFUl9CTE9DSyhzKQkoRVhUMl9CTE9DS19TSVpFKHMpIC8gRVhUMl9GUkFHX1NJWkUocykpCisjZW5kaWYKKworLyoKKyAqIFN0cnVjdHVyZSBvZiBhIGJsb2NrcyBncm91cCBkZXNjcmlwdG9yCisgKi8KK3N0cnVjdCBleHQyX2dyb3VwX2Rlc2MKK3sKKwlfX2xlMzIJYmdfYmxvY2tfYml0bWFwOwkJLyogQmxvY2tzIGJpdG1hcCBibG9jayAqLworCV9fbGUzMgliZ19pbm9kZV9iaXRtYXA7CQkvKiBJbm9kZXMgYml0bWFwIGJsb2NrICovCisJX19sZTMyCWJnX2lub2RlX3RhYmxlOwkJLyogSW5vZGVzIHRhYmxlIGJsb2NrICovCisJX19sZTE2CWJnX2ZyZWVfYmxvY2tzX2NvdW50OwkvKiBGcmVlIGJsb2NrcyBjb3VudCAqLworCV9fbGUxNgliZ19mcmVlX2lub2Rlc19jb3VudDsJLyogRnJlZSBpbm9kZXMgY291bnQgKi8KKwlfX2xlMTYJYmdfdXNlZF9kaXJzX2NvdW50OwkvKiBEaXJlY3RvcmllcyBjb3VudCAqLworCV9fbGUxNgliZ19wYWQ7CisJX19sZTMyCWJnX3Jlc2VydmVkWzNdOworfTsKKworLyoKKyAqIE1hY3JvLWluc3RydWN0aW9ucyB1c2VkIHRvIG1hbmFnZSBncm91cCBkZXNjcmlwdG9ycworICovCisjaWZkZWYgX19LRVJORUxfXworIyBkZWZpbmUgRVhUMl9CTE9DS1NfUEVSX0dST1VQKHMpCShFWFQyX1NCKHMpLT5zX2Jsb2Nrc19wZXJfZ3JvdXApCisjIGRlZmluZSBFWFQyX0RFU0NfUEVSX0JMT0NLKHMpCQkoRVhUMl9TQihzKS0+c19kZXNjX3Blcl9ibG9jaykKKyMgZGVmaW5lIEVYVDJfSU5PREVTX1BFUl9HUk9VUChzKQkoRVhUMl9TQihzKS0+c19pbm9kZXNfcGVyX2dyb3VwKQorIyBkZWZpbmUgRVhUMl9ERVNDX1BFUl9CTE9DS19CSVRTKHMpCShFWFQyX1NCKHMpLT5zX2Rlc2NfcGVyX2Jsb2NrX2JpdHMpCisjZWxzZQorIyBkZWZpbmUgRVhUMl9CTE9DS1NfUEVSX0dST1VQKHMpCSgocyktPnNfYmxvY2tzX3Blcl9ncm91cCkKKyMgZGVmaW5lIEVYVDJfREVTQ19QRVJfQkxPQ0socykJCShFWFQyX0JMT0NLX1NJWkUocykgLyBzaXplb2YgKHN0cnVjdCBleHQyX2dyb3VwX2Rlc2MpKQorIyBkZWZpbmUgRVhUMl9JTk9ERVNfUEVSX0dST1VQKHMpCSgocyktPnNfaW5vZGVzX3Blcl9ncm91cCkKKyNlbmRpZgorCisvKgorICogQ29uc3RhbnRzIHJlbGF0aXZlIHRvIHRoZSBkYXRhIGJsb2NrcworICovCisjZGVmaW5lCUVYVDJfTkRJUl9CTE9DS1MJCTEyCisjZGVmaW5lCUVYVDJfSU5EX0JMT0NLCQkJRVhUMl9ORElSX0JMT0NLUworI2RlZmluZQlFWFQyX0RJTkRfQkxPQ0sJCQkoRVhUMl9JTkRfQkxPQ0sgKyAxKQorI2RlZmluZQlFWFQyX1RJTkRfQkxPQ0sJCQkoRVhUMl9ESU5EX0JMT0NLICsgMSkKKyNkZWZpbmUJRVhUMl9OX0JMT0NLUwkJCShFWFQyX1RJTkRfQkxPQ0sgKyAxKQorCisvKgorICogSW5vZGUgZmxhZ3MKKyAqLworI2RlZmluZQlFWFQyX1NFQ1JNX0ZMCQkJMHgwMDAwMDAwMSAvKiBTZWN1cmUgZGVsZXRpb24gKi8KKyNkZWZpbmUJRVhUMl9VTlJNX0ZMCQkJMHgwMDAwMDAwMiAvKiBVbmRlbGV0ZSAqLworI2RlZmluZQlFWFQyX0NPTVBSX0ZMCQkJMHgwMDAwMDAwNCAvKiBDb21wcmVzcyBmaWxlICovCisjZGVmaW5lIEVYVDJfU1lOQ19GTAkJCTB4MDAwMDAwMDggLyogU3luY2hyb25vdXMgdXBkYXRlcyAqLworI2RlZmluZSBFWFQyX0lNTVVUQUJMRV9GTAkJMHgwMDAwMDAxMCAvKiBJbW11dGFibGUgZmlsZSAqLworI2RlZmluZSBFWFQyX0FQUEVORF9GTAkJCTB4MDAwMDAwMjAgLyogd3JpdGVzIHRvIGZpbGUgbWF5IG9ubHkgYXBwZW5kICovCisjZGVmaW5lIEVYVDJfTk9EVU1QX0ZMCQkJMHgwMDAwMDA0MCAvKiBkbyBub3QgZHVtcCBmaWxlICovCisjZGVmaW5lIEVYVDJfTk9BVElNRV9GTAkJCTB4MDAwMDAwODAgLyogZG8gbm90IHVwZGF0ZSBhdGltZSAqLworLyogUmVzZXJ2ZWQgZm9yIGNvbXByZXNzaW9uIHVzYWdlLi4uICovCisjZGVmaW5lIEVYVDJfRElSVFlfRkwJCQkweDAwMDAwMTAwCisjZGVmaW5lIEVYVDJfQ09NUFJCTEtfRkwJCTB4MDAwMDAyMDAgLyogT25lIG9yIG1vcmUgY29tcHJlc3NlZCBjbHVzdGVycyAqLworI2RlZmluZSBFWFQyX05PQ09NUF9GTAkJCTB4MDAwMDA0MDAgLyogRG9uJ3QgY29tcHJlc3MgKi8KKyNkZWZpbmUgRVhUMl9FQ09NUFJfRkwJCQkweDAwMDAwODAwIC8qIENvbXByZXNzaW9uIGVycm9yICovCisvKiBFbmQgY29tcHJlc3Npb24gZmxhZ3MgLS0tIG1heWJlIG5vdCBhbGwgdXNlZCAqLwkKKyNkZWZpbmUgRVhUMl9CVFJFRV9GTAkJCTB4MDAwMDEwMDAgLyogYnRyZWUgZm9ybWF0IGRpciAqLworI2RlZmluZSBFWFQyX0lOREVYX0ZMCQkJMHgwMDAwMTAwMCAvKiBoYXNoLWluZGV4ZWQgZGlyZWN0b3J5ICovCisjZGVmaW5lIEVYVDJfSU1BR0lDX0ZMCQkJMHgwMDAwMjAwMCAvKiBBRlMgZGlyZWN0b3J5ICovCisjZGVmaW5lIEVYVDJfSk9VUk5BTF9EQVRBX0ZMCQkweDAwMDA0MDAwIC8qIFJlc2VydmVkIGZvciBleHQzICovCisjZGVmaW5lIEVYVDJfTk9UQUlMX0ZMCQkJMHgwMDAwODAwMCAvKiBmaWxlIHRhaWwgc2hvdWxkIG5vdCBiZSBtZXJnZWQgKi8KKyNkZWZpbmUgRVhUMl9ESVJTWU5DX0ZMCQkJMHgwMDAxMDAwMCAvKiBkaXJzeW5jIGJlaGF2aW91ciAoZGlyZWN0b3JpZXMgb25seSkgKi8KKyNkZWZpbmUgRVhUMl9UT1BESVJfRkwJCQkweDAwMDIwMDAwIC8qIFRvcCBvZiBkaXJlY3RvcnkgaGllcmFyY2hpZXMqLworI2RlZmluZSBFWFQyX1JFU0VSVkVEX0ZMCQkweDgwMDAwMDAwIC8qIHJlc2VydmVkIGZvciBleHQyIGxpYiAqLworCisjZGVmaW5lIEVYVDJfRkxfVVNFUl9WSVNJQkxFCQkweDAwMDNERkZGIC8qIFVzZXIgdmlzaWJsZSBmbGFncyAqLworI2RlZmluZSBFWFQyX0ZMX1VTRVJfTU9ESUZJQUJMRQkJMHgwMDAzODBGRiAvKiBVc2VyIG1vZGlmaWFibGUgZmxhZ3MgKi8KKworLyoKKyAqIGlvY3RsIGNvbW1hbmRzCisgKi8KKyNkZWZpbmUJRVhUMl9JT0NfR0VURkxBR1MJCV9JT1IoJ2YnLCAxLCBsb25nKQorI2RlZmluZQlFWFQyX0lPQ19TRVRGTEFHUwkJX0lPVygnZicsIDIsIGxvbmcpCisjZGVmaW5lCUVYVDJfSU9DX0dFVFZFUlNJT04JCV9JT1IoJ3YnLCAxLCBsb25nKQorI2RlZmluZQlFWFQyX0lPQ19TRVRWRVJTSU9OCQlfSU9XKCd2JywgMiwgbG9uZykKKworLyoKKyAqIFN0cnVjdHVyZSBvZiBhbiBpbm9kZSBvbiB0aGUgZGlzaworICovCitzdHJ1Y3QgZXh0Ml9pbm9kZSB7CisJX19sZTE2CWlfbW9kZTsJCS8qIEZpbGUgbW9kZSAqLworCV9fbGUxNglpX3VpZDsJCS8qIExvdyAxNiBiaXRzIG9mIE93bmVyIFVpZCAqLworCV9fbGUzMglpX3NpemU7CQkvKiBTaXplIGluIGJ5dGVzICovCisJX19sZTMyCWlfYXRpbWU7CS8qIEFjY2VzcyB0aW1lICovCisJX19sZTMyCWlfY3RpbWU7CS8qIENyZWF0aW9uIHRpbWUgKi8KKwlfX2xlMzIJaV9tdGltZTsJLyogTW9kaWZpY2F0aW9uIHRpbWUgKi8KKwlfX2xlMzIJaV9kdGltZTsJLyogRGVsZXRpb24gVGltZSAqLworCV9fbGUxNglpX2dpZDsJCS8qIExvdyAxNiBiaXRzIG9mIEdyb3VwIElkICovCisJX19sZTE2CWlfbGlua3NfY291bnQ7CS8qIExpbmtzIGNvdW50ICovCisJX19sZTMyCWlfYmxvY2tzOwkvKiBCbG9ja3MgY291bnQgKi8KKwlfX2xlMzIJaV9mbGFnczsJLyogRmlsZSBmbGFncyAqLworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCV9fbGUzMiAgbF9pX3Jlc2VydmVkMTsKKwkJfSBsaW51eDE7CisJCXN0cnVjdCB7CisJCQlfX2xlMzIgIGhfaV90cmFuc2xhdG9yOworCQl9IGh1cmQxOworCQlzdHJ1Y3QgeworCQkJX19sZTMyICBtX2lfcmVzZXJ2ZWQxOworCQl9IG1hc2l4MTsKKwl9IG9zZDE7CQkJCS8qIE9TIGRlcGVuZGVudCAxICovCisJX19sZTMyCWlfYmxvY2tbRVhUMl9OX0JMT0NLU107LyogUG9pbnRlcnMgdG8gYmxvY2tzICovCisJX19sZTMyCWlfZ2VuZXJhdGlvbjsJLyogRmlsZSB2ZXJzaW9uIChmb3IgTkZTKSAqLworCV9fbGUzMglpX2ZpbGVfYWNsOwkvKiBGaWxlIEFDTCAqLworCV9fbGUzMglpX2Rpcl9hY2w7CS8qIERpcmVjdG9yeSBBQ0wgKi8KKwlfX2xlMzIJaV9mYWRkcjsJLyogRnJhZ21lbnQgYWRkcmVzcyAqLworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCV9fdTgJbF9pX2ZyYWc7CS8qIEZyYWdtZW50IG51bWJlciAqLworCQkJX191OAlsX2lfZnNpemU7CS8qIEZyYWdtZW50IHNpemUgKi8KKwkJCV9fdTE2CWlfcGFkMTsKKwkJCV9fbGUxNglsX2lfdWlkX2hpZ2g7CS8qIHRoZXNlIDIgZmllbGRzICAgICovCisJCQlfX2xlMTYJbF9pX2dpZF9oaWdoOwkvKiB3ZXJlIHJlc2VydmVkMlswXSAqLworCQkJX191MzIJbF9pX3Jlc2VydmVkMjsKKwkJfSBsaW51eDI7CisJCXN0cnVjdCB7CisJCQlfX3U4CWhfaV9mcmFnOwkvKiBGcmFnbWVudCBudW1iZXIgKi8KKwkJCV9fdTgJaF9pX2ZzaXplOwkvKiBGcmFnbWVudCBzaXplICovCisJCQlfX2xlMTYJaF9pX21vZGVfaGlnaDsKKwkJCV9fbGUxNgloX2lfdWlkX2hpZ2g7CisJCQlfX2xlMTYJaF9pX2dpZF9oaWdoOworCQkJX19sZTMyCWhfaV9hdXRob3I7CisJCX0gaHVyZDI7CisJCXN0cnVjdCB7CisJCQlfX3U4CW1faV9mcmFnOwkvKiBGcmFnbWVudCBudW1iZXIgKi8KKwkJCV9fdTgJbV9pX2ZzaXplOwkvKiBGcmFnbWVudCBzaXplICovCisJCQlfX3UxNgltX3BhZDE7CisJCQlfX3UzMgltX2lfcmVzZXJ2ZWQyWzJdOworCQl9IG1hc2l4MjsKKwl9IG9zZDI7CQkJCS8qIE9TIGRlcGVuZGVudCAyICovCit9OworCisjZGVmaW5lIGlfc2l6ZV9oaWdoCWlfZGlyX2FjbAorCisjaWYgZGVmaW5lZChfX0tFUk5FTF9fKSB8fCBkZWZpbmVkKF9fbGludXhfXykKKyNkZWZpbmUgaV9yZXNlcnZlZDEJb3NkMS5saW51eDEubF9pX3Jlc2VydmVkMQorI2RlZmluZSBpX2ZyYWcJCW9zZDIubGludXgyLmxfaV9mcmFnCisjZGVmaW5lIGlfZnNpemUJCW9zZDIubGludXgyLmxfaV9mc2l6ZQorI2RlZmluZSBpX3VpZF9sb3cJaV91aWQKKyNkZWZpbmUgaV9naWRfbG93CWlfZ2lkCisjZGVmaW5lIGlfdWlkX2hpZ2gJb3NkMi5saW51eDIubF9pX3VpZF9oaWdoCisjZGVmaW5lIGlfZ2lkX2hpZ2gJb3NkMi5saW51eDIubF9pX2dpZF9oaWdoCisjZGVmaW5lIGlfcmVzZXJ2ZWQyCW9zZDIubGludXgyLmxfaV9yZXNlcnZlZDIKKyNlbmRpZgorCisjaWZkZWYJX19odXJkX18KKyNkZWZpbmUgaV90cmFuc2xhdG9yCW9zZDEuaHVyZDEuaF9pX3RyYW5zbGF0b3IKKyNkZWZpbmUgaV9mcmFnCQlvc2QyLmh1cmQyLmhfaV9mcmFnOworI2RlZmluZSBpX2ZzaXplCQlvc2QyLmh1cmQyLmhfaV9mc2l6ZTsKKyNkZWZpbmUgaV91aWRfaGlnaAlvc2QyLmh1cmQyLmhfaV91aWRfaGlnaAorI2RlZmluZSBpX2dpZF9oaWdoCW9zZDIuaHVyZDIuaF9pX2dpZF9oaWdoCisjZGVmaW5lIGlfYXV0aG9yCW9zZDIuaHVyZDIuaF9pX2F1dGhvcgorI2VuZGlmCisKKyNpZmRlZglfX21hc2l4X18KKyNkZWZpbmUgaV9yZXNlcnZlZDEJb3NkMS5tYXNpeDEubV9pX3Jlc2VydmVkMQorI2RlZmluZSBpX2ZyYWcJCW9zZDIubWFzaXgyLm1faV9mcmFnCisjZGVmaW5lIGlfZnNpemUJCW9zZDIubWFzaXgyLm1faV9mc2l6ZQorI2RlZmluZSBpX3Jlc2VydmVkMglvc2QyLm1hc2l4Mi5tX2lfcmVzZXJ2ZWQyCisjZW5kaWYKKworLyoKKyAqIEZpbGUgc3lzdGVtIHN0YXRlcworICovCisjZGVmaW5lCUVYVDJfVkFMSURfRlMJCQkweDAwMDEJLyogVW5tb3VudGVkIGNsZWFubHkgKi8KKyNkZWZpbmUJRVhUMl9FUlJPUl9GUwkJCTB4MDAwMgkvKiBFcnJvcnMgZGV0ZWN0ZWQgKi8KKworLyoKKyAqIE1vdW50IGZsYWdzCisgKi8KKyNkZWZpbmUgRVhUMl9NT1VOVF9DSEVDSwkJMHgwMDAxCS8qIERvIG1vdW50LXRpbWUgY2hlY2tzICovCisjZGVmaW5lIEVYVDJfTU9VTlRfT0xEQUxMT0MJCTB4MDAwMiAgLyogRG9uJ3QgdXNlIHRoZSBuZXcgT3Jsb3YgYWxsb2NhdG9yICovCisjZGVmaW5lIEVYVDJfTU9VTlRfR1JQSUQJCTB4MDAwNAkvKiBDcmVhdGUgZmlsZXMgd2l0aCBkaXJlY3RvcnkncyBncm91cCAqLworI2RlZmluZSBFWFQyX01PVU5UX0RFQlVHCQkweDAwMDgJLyogU29tZSBkZWJ1Z2dpbmcgbWVzc2FnZXMgKi8KKyNkZWZpbmUgRVhUMl9NT1VOVF9FUlJPUlNfQ09OVAkJMHgwMDEwCS8qIENvbnRpbnVlIG9uIGVycm9ycyAqLworI2RlZmluZSBFWFQyX01PVU5UX0VSUk9SU19STwkJMHgwMDIwCS8qIFJlbW91bnQgZnMgcm8gb24gZXJyb3JzICovCisjZGVmaW5lIEVYVDJfTU9VTlRfRVJST1JTX1BBTklDCQkweDAwNDAJLyogUGFuaWMgb24gZXJyb3JzICovCisjZGVmaW5lIEVYVDJfTU9VTlRfTUlOSVhfREYJCTB4MDA4MAkvKiBNaW1pY3MgdGhlIE1pbml4IHN0YXRmcyAqLworI2RlZmluZSBFWFQyX01PVU5UX05PQkgJCQkweDAxMDAJLyogTm8gYnVmZmVyX2hlYWRzICovCisjZGVmaW5lIEVYVDJfTU9VTlRfTk9fVUlEMzIJCTB4MDIwMCAgLyogRGlzYWJsZSAzMi1iaXQgVUlEcyAqLworI2RlZmluZSBFWFQyX01PVU5UX1hBVFRSX1VTRVIJCTB4NDAwMAkvKiBFeHRlbmRlZCB1c2VyIGF0dHJpYnV0ZXMgKi8KKyNkZWZpbmUgRVhUMl9NT1VOVF9QT1NJWF9BQ0wJCTB4ODAwMAkvKiBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0cyAqLworCisjZGVmaW5lIGNsZWFyX29wdChvLCBvcHQpCQlvICY9IH5FWFQyX01PVU5UXyMjb3B0CisjZGVmaW5lIHNldF9vcHQobywgb3B0KQkJCW8gfD0gRVhUMl9NT1VOVF8jI29wdAorI2RlZmluZSB0ZXN0X29wdChzYiwgb3B0KQkJKEVYVDJfU0Ioc2IpLT5zX21vdW50X29wdCAmIFwKKwkJCQkJIEVYVDJfTU9VTlRfIyNvcHQpCisvKgorICogTWF4aW1hbCBtb3VudCBjb3VudHMgYmV0d2VlbiB0d28gZmlsZXN5c3RlbSBjaGVja3MKKyAqLworI2RlZmluZSBFWFQyX0RGTF9NQVhfTU5UX0NPVU5UCQkyMAkvKiBBbGxvdyAyMCBtb3VudHMgKi8KKyNkZWZpbmUgRVhUMl9ERkxfQ0hFQ0tJTlRFUlZBTAkJMAkvKiBEb24ndCB1c2UgaW50ZXJ2YWwgY2hlY2sgKi8KKworLyoKKyAqIEJlaGF2aW91ciB3aGVuIGRldGVjdGluZyBlcnJvcnMKKyAqLworI2RlZmluZSBFWFQyX0VSUk9SU19DT05USU5VRQkJMQkvKiBDb250aW51ZSBleGVjdXRpb24gKi8KKyNkZWZpbmUgRVhUMl9FUlJPUlNfUk8JCQkyCS8qIFJlbW91bnQgZnMgcmVhZC1vbmx5ICovCisjZGVmaW5lIEVYVDJfRVJST1JTX1BBTklDCQkzCS8qIFBhbmljICovCisjZGVmaW5lIEVYVDJfRVJST1JTX0RFRkFVTFQJCUVYVDJfRVJST1JTX0NPTlRJTlVFCisKKy8qCisgKiBTdHJ1Y3R1cmUgb2YgdGhlIHN1cGVyIGJsb2NrCisgKi8KK3N0cnVjdCBleHQyX3N1cGVyX2Jsb2NrIHsKKwlfX2xlMzIJc19pbm9kZXNfY291bnQ7CQkvKiBJbm9kZXMgY291bnQgKi8KKwlfX2xlMzIJc19ibG9ja3NfY291bnQ7CQkvKiBCbG9ja3MgY291bnQgKi8KKwlfX2xlMzIJc19yX2Jsb2Nrc19jb3VudDsJLyogUmVzZXJ2ZWQgYmxvY2tzIGNvdW50ICovCisJX19sZTMyCXNfZnJlZV9ibG9ja3NfY291bnQ7CS8qIEZyZWUgYmxvY2tzIGNvdW50ICovCisJX19sZTMyCXNfZnJlZV9pbm9kZXNfY291bnQ7CS8qIEZyZWUgaW5vZGVzIGNvdW50ICovCisJX19sZTMyCXNfZmlyc3RfZGF0YV9ibG9jazsJLyogRmlyc3QgRGF0YSBCbG9jayAqLworCV9fbGUzMglzX2xvZ19ibG9ja19zaXplOwkvKiBCbG9jayBzaXplICovCisJX19sZTMyCXNfbG9nX2ZyYWdfc2l6ZTsJLyogRnJhZ21lbnQgc2l6ZSAqLworCV9fbGUzMglzX2Jsb2Nrc19wZXJfZ3JvdXA7CS8qICMgQmxvY2tzIHBlciBncm91cCAqLworCV9fbGUzMglzX2ZyYWdzX3Blcl9ncm91cDsJLyogIyBGcmFnbWVudHMgcGVyIGdyb3VwICovCisJX19sZTMyCXNfaW5vZGVzX3Blcl9ncm91cDsJLyogIyBJbm9kZXMgcGVyIGdyb3VwICovCisJX19sZTMyCXNfbXRpbWU7CQkvKiBNb3VudCB0aW1lICovCisJX19sZTMyCXNfd3RpbWU7CQkvKiBXcml0ZSB0aW1lICovCisJX19sZTE2CXNfbW50X2NvdW50OwkJLyogTW91bnQgY291bnQgKi8KKwlfX2xlMTYJc19tYXhfbW50X2NvdW50OwkvKiBNYXhpbWFsIG1vdW50IGNvdW50ICovCisJX19sZTE2CXNfbWFnaWM7CQkvKiBNYWdpYyBzaWduYXR1cmUgKi8KKwlfX2xlMTYJc19zdGF0ZTsJCS8qIEZpbGUgc3lzdGVtIHN0YXRlICovCisJX19sZTE2CXNfZXJyb3JzOwkJLyogQmVoYXZpb3VyIHdoZW4gZGV0ZWN0aW5nIGVycm9ycyAqLworCV9fbGUxNglzX21pbm9yX3Jldl9sZXZlbDsgCS8qIG1pbm9yIHJldmlzaW9uIGxldmVsICovCisJX19sZTMyCXNfbGFzdGNoZWNrOwkJLyogdGltZSBvZiBsYXN0IGNoZWNrICovCisJX19sZTMyCXNfY2hlY2tpbnRlcnZhbDsJLyogbWF4LiB0aW1lIGJldHdlZW4gY2hlY2tzICovCisJX19sZTMyCXNfY3JlYXRvcl9vczsJCS8qIE9TICovCisJX19sZTMyCXNfcmV2X2xldmVsOwkJLyogUmV2aXNpb24gbGV2ZWwgKi8KKwlfX2xlMTYJc19kZWZfcmVzdWlkOwkJLyogRGVmYXVsdCB1aWQgZm9yIHJlc2VydmVkIGJsb2NrcyAqLworCV9fbGUxNglzX2RlZl9yZXNnaWQ7CQkvKiBEZWZhdWx0IGdpZCBmb3IgcmVzZXJ2ZWQgYmxvY2tzICovCisJLyoKKwkgKiBUaGVzZSBmaWVsZHMgYXJlIGZvciBFWFQyX0RZTkFNSUNfUkVWIHN1cGVyYmxvY2tzIG9ubHkuCisJICoKKwkgKiBOb3RlOiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBjb21wYXRpYmxlIGZlYXR1cmUgc2V0IGFuZAorCSAqIHRoZSBpbmNvbXBhdGlibGUgZmVhdHVyZSBzZXQgaXMgdGhhdCBpZiB0aGVyZSBpcyBhIGJpdCBzZXQKKwkgKiBpbiB0aGUgaW5jb21wYXRpYmxlIGZlYXR1cmUgc2V0IHRoYXQgdGhlIGtlcm5lbCBkb2Vzbid0CisJICoga25vdyBhYm91dCwgaXQgc2hvdWxkIHJlZnVzZSB0byBtb3VudCB0aGUgZmlsZXN5c3RlbS4KKwkgKiAKKwkgKiBlMmZzY2sncyByZXF1aXJlbWVudHMgYXJlIG1vcmUgc3RyaWN0OyBpZiBpdCBkb2Vzbid0IGtub3cKKwkgKiBhYm91dCBhIGZlYXR1cmUgaW4gZWl0aGVyIHRoZSBjb21wYXRpYmxlIG9yIGluY29tcGF0aWJsZQorCSAqIGZlYXR1cmUgc2V0LCBpdCBtdXN0IGFib3J0IGFuZCBub3QgdHJ5IHRvIG1lZGRsZSB3aXRoCisJICogdGhpbmdzIGl0IGRvZXNuJ3QgdW5kZXJzdGFuZC4uLgorCSAqLworCV9fbGUzMglzX2ZpcnN0X2lubzsgCQkvKiBGaXJzdCBub24tcmVzZXJ2ZWQgaW5vZGUgKi8KKwlfX2xlMTYgICBzX2lub2RlX3NpemU7IAkJLyogc2l6ZSBvZiBpbm9kZSBzdHJ1Y3R1cmUgKi8KKwlfX2xlMTYJc19ibG9ja19ncm91cF9ucjsgCS8qIGJsb2NrIGdyb3VwICMgb2YgdGhpcyBzdXBlcmJsb2NrICovCisJX19sZTMyCXNfZmVhdHVyZV9jb21wYXQ7IAkvKiBjb21wYXRpYmxlIGZlYXR1cmUgc2V0ICovCisJX19sZTMyCXNfZmVhdHVyZV9pbmNvbXBhdDsgCS8qIGluY29tcGF0aWJsZSBmZWF0dXJlIHNldCAqLworCV9fbGUzMglzX2ZlYXR1cmVfcm9fY29tcGF0OyAJLyogcmVhZG9ubHktY29tcGF0aWJsZSBmZWF0dXJlIHNldCAqLworCV9fdTgJc191dWlkWzE2XTsJCS8qIDEyOC1iaXQgdXVpZCBmb3Igdm9sdW1lICovCisJY2hhcglzX3ZvbHVtZV9uYW1lWzE2XTsgCS8qIHZvbHVtZSBuYW1lICovCisJY2hhcglzX2xhc3RfbW91bnRlZFs2NF07IAkvKiBkaXJlY3Rvcnkgd2hlcmUgbGFzdCBtb3VudGVkICovCisJX19sZTMyCXNfYWxnb3JpdGhtX3VzYWdlX2JpdG1hcDsgLyogRm9yIGNvbXByZXNzaW9uICovCisJLyoKKwkgKiBQZXJmb3JtYW5jZSBoaW50cy4gIERpcmVjdG9yeSBwcmVhbGxvY2F0aW9uIHNob3VsZCBvbmx5CisJICogaGFwcGVuIGlmIHRoZSBFWFQyX0NPTVBBVF9QUkVBTExPQyBmbGFnIGlzIG9uLgorCSAqLworCV9fdTgJc19wcmVhbGxvY19ibG9ja3M7CS8qIE5yIG9mIGJsb2NrcyB0byB0cnkgdG8gcHJlYWxsb2NhdGUqLworCV9fdTgJc19wcmVhbGxvY19kaXJfYmxvY2tzOwkvKiBOciB0byBwcmVhbGxvY2F0ZSBmb3IgZGlycyAqLworCV9fdTE2CXNfcGFkZGluZzE7CisJLyoKKwkgKiBKb3VybmFsaW5nIHN1cHBvcnQgdmFsaWQgaWYgRVhUM19GRUFUVVJFX0NPTVBBVF9IQVNfSk9VUk5BTCBzZXQuCisJICovCisJX191OAlzX2pvdXJuYWxfdXVpZFsxNl07CS8qIHV1aWQgb2Ygam91cm5hbCBzdXBlcmJsb2NrICovCisJX191MzIJc19qb3VybmFsX2ludW07CQkvKiBpbm9kZSBudW1iZXIgb2Ygam91cm5hbCBmaWxlICovCisJX191MzIJc19qb3VybmFsX2RldjsJCS8qIGRldmljZSBudW1iZXIgb2Ygam91cm5hbCBmaWxlICovCisJX191MzIJc19sYXN0X29ycGhhbjsJCS8qIHN0YXJ0IG9mIGxpc3Qgb2YgaW5vZGVzIHRvIGRlbGV0ZSAqLworCV9fdTMyCXNfaGFzaF9zZWVkWzRdOwkJLyogSFRSRUUgaGFzaCBzZWVkICovCisJX191OAlzX2RlZl9oYXNoX3ZlcnNpb247CS8qIERlZmF1bHQgaGFzaCB2ZXJzaW9uIHRvIHVzZSAqLworCV9fdTgJc19yZXNlcnZlZF9jaGFyX3BhZDsKKwlfX3UxNglzX3Jlc2VydmVkX3dvcmRfcGFkOworCV9fbGUzMglzX2RlZmF1bHRfbW91bnRfb3B0czsKKyAJX19sZTMyCXNfZmlyc3RfbWV0YV9iZzsgCS8qIEZpcnN0IG1ldGFibG9jayBibG9jayBncm91cCAqLworCV9fdTMyCXNfcmVzZXJ2ZWRbMTkwXTsJLyogUGFkZGluZyB0byB0aGUgZW5kIG9mIHRoZSBibG9jayAqLworfTsKKworLyoKKyAqIENvZGVzIGZvciBvcGVyYXRpbmcgc3lzdGVtcworICovCisjZGVmaW5lIEVYVDJfT1NfTElOVVgJCTAKKyNkZWZpbmUgRVhUMl9PU19IVVJECQkxCisjZGVmaW5lIEVYVDJfT1NfTUFTSVgJCTIKKyNkZWZpbmUgRVhUMl9PU19GUkVFQlNECQkzCisjZGVmaW5lIEVYVDJfT1NfTElURVMJCTQKKworLyoKKyAqIFJldmlzaW9uIGxldmVscworICovCisjZGVmaW5lIEVYVDJfR09PRF9PTERfUkVWCTAJLyogVGhlIGdvb2Qgb2xkIChvcmlnaW5hbCkgZm9ybWF0ICovCisjZGVmaW5lIEVYVDJfRFlOQU1JQ19SRVYJMSAJLyogVjIgZm9ybWF0IHcvIGR5bmFtaWMgaW5vZGUgc2l6ZXMgKi8KKworI2RlZmluZSBFWFQyX0NVUlJFTlRfUkVWCUVYVDJfR09PRF9PTERfUkVWCisjZGVmaW5lIEVYVDJfTUFYX1NVUFBfUkVWCUVYVDJfRFlOQU1JQ19SRVYKKworI2RlZmluZSBFWFQyX0dPT0RfT0xEX0lOT0RFX1NJWkUgMTI4CisKKy8qCisgKiBGZWF0dXJlIHNldCBkZWZpbml0aW9ucworICovCisKKyNkZWZpbmUgRVhUMl9IQVNfQ09NUEFUX0ZFQVRVUkUoc2IsbWFzaykJCQlcCisJKCBFWFQyX1NCKHNiKS0+c19lcy0+c19mZWF0dXJlX2NvbXBhdCAmIGNwdV90b19sZTMyKG1hc2spICkKKyNkZWZpbmUgRVhUMl9IQVNfUk9fQ09NUEFUX0ZFQVRVUkUoc2IsbWFzaykJCQlcCisJKCBFWFQyX1NCKHNiKS0+c19lcy0+c19mZWF0dXJlX3JvX2NvbXBhdCAmIGNwdV90b19sZTMyKG1hc2spICkKKyNkZWZpbmUgRVhUMl9IQVNfSU5DT01QQVRfRkVBVFVSRShzYixtYXNrKQkJCVwKKwkoIEVYVDJfU0Ioc2IpLT5zX2VzLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBjcHVfdG9fbGUzMihtYXNrKSApCisjZGVmaW5lIEVYVDJfU0VUX0NPTVBBVF9GRUFUVVJFKHNiLG1hc2spCQkJXAorCUVYVDJfU0Ioc2IpLT5zX2VzLT5zX2ZlYXR1cmVfY29tcGF0IHw9IGNwdV90b19sZTMyKG1hc2spCisjZGVmaW5lIEVYVDJfU0VUX1JPX0NPTVBBVF9GRUFUVVJFKHNiLG1hc2spCQkJXAorCUVYVDJfU0Ioc2IpLT5zX2VzLT5zX2ZlYXR1cmVfcm9fY29tcGF0IHw9IGNwdV90b19sZTMyKG1hc2spCisjZGVmaW5lIEVYVDJfU0VUX0lOQ09NUEFUX0ZFQVRVUkUoc2IsbWFzaykJCQlcCisJRVhUMl9TQihzYiktPnNfZXMtPnNfZmVhdHVyZV9pbmNvbXBhdCB8PSBjcHVfdG9fbGUzMihtYXNrKQorI2RlZmluZSBFWFQyX0NMRUFSX0NPTVBBVF9GRUFUVVJFKHNiLG1hc2spCQkJXAorCUVYVDJfU0Ioc2IpLT5zX2VzLT5zX2ZlYXR1cmVfY29tcGF0ICY9IH5jcHVfdG9fbGUzMihtYXNrKQorI2RlZmluZSBFWFQyX0NMRUFSX1JPX0NPTVBBVF9GRUFUVVJFKHNiLG1hc2spCQkJXAorCUVYVDJfU0Ioc2IpLT5zX2VzLT5zX2ZlYXR1cmVfcm9fY29tcGF0ICY9IH5jcHVfdG9fbGUzMihtYXNrKQorI2RlZmluZSBFWFQyX0NMRUFSX0lOQ09NUEFUX0ZFQVRVUkUoc2IsbWFzaykJCQlcCisJRVhUMl9TQihzYiktPnNfZXMtPnNfZmVhdHVyZV9pbmNvbXBhdCAmPSB+Y3B1X3RvX2xlMzIobWFzaykKKworI2RlZmluZSBFWFQyX0ZFQVRVUkVfQ09NUEFUX0RJUl9QUkVBTExPQwkweDAwMDEKKyNkZWZpbmUgRVhUMl9GRUFUVVJFX0NPTVBBVF9JTUFHSUNfSU5PREVTCTB4MDAwMgorI2RlZmluZSBFWFQzX0ZFQVRVUkVfQ09NUEFUX0hBU19KT1VSTkFMCQkweDAwMDQKKyNkZWZpbmUgRVhUMl9GRUFUVVJFX0NPTVBBVF9FWFRfQVRUUgkJMHgwMDA4CisjZGVmaW5lIEVYVDJfRkVBVFVSRV9DT01QQVRfUkVTSVpFX0lOTwkJMHgwMDEwCisjZGVmaW5lIEVYVDJfRkVBVFVSRV9DT01QQVRfRElSX0lOREVYCQkweDAwMjAKKyNkZWZpbmUgRVhUMl9GRUFUVVJFX0NPTVBBVF9BTlkJCQkweGZmZmZmZmZmCisKKyNkZWZpbmUgRVhUMl9GRUFUVVJFX1JPX0NPTVBBVF9TUEFSU0VfU1VQRVIJMHgwMDAxCisjZGVmaW5lIEVYVDJfRkVBVFVSRV9ST19DT01QQVRfTEFSR0VfRklMRQkweDAwMDIKKyNkZWZpbmUgRVhUMl9GRUFUVVJFX1JPX0NPTVBBVF9CVFJFRV9ESVIJMHgwMDA0CisjZGVmaW5lIEVYVDJfRkVBVFVSRV9ST19DT01QQVRfQU5ZCQkweGZmZmZmZmZmCisKKyNkZWZpbmUgRVhUMl9GRUFUVVJFX0lOQ09NUEFUX0NPTVBSRVNTSU9OCTB4MDAwMQorI2RlZmluZSBFWFQyX0ZFQVRVUkVfSU5DT01QQVRfRklMRVRZUEUJCTB4MDAwMgorI2RlZmluZSBFWFQzX0ZFQVRVUkVfSU5DT01QQVRfUkVDT1ZFUgkJMHgwMDA0CisjZGVmaW5lIEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9KT1VSTkFMX0RFVgkweDAwMDgKKyNkZWZpbmUgRVhUMl9GRUFUVVJFX0lOQ09NUEFUX01FVEFfQkcJCTB4MDAxMAorI2RlZmluZSBFWFQyX0ZFQVRVUkVfSU5DT01QQVRfQU5ZCQkweGZmZmZmZmZmCisKKyNkZWZpbmUgRVhUMl9GRUFUVVJFX0NPTVBBVF9TVVBQCUVYVDJfRkVBVFVSRV9DT01QQVRfRVhUX0FUVFIKKyNkZWZpbmUgRVhUMl9GRUFUVVJFX0lOQ09NUEFUX1NVUFAJKEVYVDJfRkVBVFVSRV9JTkNPTVBBVF9GSUxFVFlQRXwgXAorCQkJCQkgRVhUMl9GRUFUVVJFX0lOQ09NUEFUX01FVEFfQkcpCisjZGVmaW5lIEVYVDJfRkVBVFVSRV9ST19DT01QQVRfU1VQUAkoRVhUMl9GRUFUVVJFX1JPX0NPTVBBVF9TUEFSU0VfU1VQRVJ8IFwKKwkJCQkJIEVYVDJfRkVBVFVSRV9ST19DT01QQVRfTEFSR0VfRklMRXwgXAorCQkJCQkgRVhUMl9GRUFUVVJFX1JPX0NPTVBBVF9CVFJFRV9ESVIpCisjZGVmaW5lIEVYVDJfRkVBVFVSRV9ST19DT01QQVRfVU5TVVBQT1JURUQJfkVYVDJfRkVBVFVSRV9ST19DT01QQVRfU1VQUAorI2RlZmluZSBFWFQyX0ZFQVRVUkVfSU5DT01QQVRfVU5TVVBQT1JURUQJfkVYVDJfRkVBVFVSRV9JTkNPTVBBVF9TVVBQCisKKy8qCisgKiBEZWZhdWx0IHZhbHVlcyBmb3IgdXNlciBhbmQvb3IgZ3JvdXAgdXNpbmcgcmVzZXJ2ZWQgYmxvY2tzCisgKi8KKyNkZWZpbmUJRVhUMl9ERUZfUkVTVUlECQkwCisjZGVmaW5lCUVYVDJfREVGX1JFU0dJRAkJMAorCisvKgorICogRGVmYXVsdCBtb3VudCBvcHRpb25zCisgKi8KKyNkZWZpbmUgRVhUMl9ERUZNX0RFQlVHCQkweDAwMDEKKyNkZWZpbmUgRVhUMl9ERUZNX0JTREdST1VQUwkweDAwMDIKKyNkZWZpbmUgRVhUMl9ERUZNX1hBVFRSX1VTRVIJMHgwMDA0CisjZGVmaW5lIEVYVDJfREVGTV9BQ0wJCTB4MDAwOAorI2RlZmluZSBFWFQyX0RFRk1fVUlEMTYJCTB4MDAxMAorICAgIC8qIE5vdCB1c2VkIGJ5IGV4dDIsIGJ1dCByZXNlcnZlZCBmb3IgdXNlIGJ5IGV4dDMgKi8KKyNkZWZpbmUgRVhUM19ERUZNX0pNT0RFCQkweDAwNjAgCisjZGVmaW5lIEVYVDNfREVGTV9KTU9ERV9EQVRBCTB4MDAyMAorI2RlZmluZSBFWFQzX0RFRk1fSk1PREVfT1JERVJFRAkweDAwNDAKKyNkZWZpbmUgRVhUM19ERUZNX0pNT0RFX1dCQUNLCTB4MDA2MAorCisvKgorICogU3RydWN0dXJlIG9mIGEgZGlyZWN0b3J5IGVudHJ5CisgKi8KKyNkZWZpbmUgRVhUMl9OQU1FX0xFTiAyNTUKKworc3RydWN0IGV4dDJfZGlyX2VudHJ5IHsKKwlfX2xlMzIJaW5vZGU7CQkJLyogSW5vZGUgbnVtYmVyICovCisJX19sZTE2CXJlY19sZW47CQkvKiBEaXJlY3RvcnkgZW50cnkgbGVuZ3RoICovCisJX19sZTE2CW5hbWVfbGVuOwkJLyogTmFtZSBsZW5ndGggKi8KKwljaGFyCW5hbWVbRVhUMl9OQU1FX0xFTl07CS8qIEZpbGUgbmFtZSAqLworfTsKKworLyoKKyAqIFRoZSBuZXcgdmVyc2lvbiBvZiB0aGUgZGlyZWN0b3J5IGVudHJ5LiAgU2luY2UgRVhUMiBzdHJ1Y3R1cmVzIGFyZQorICogc3RvcmVkIGluIGludGVsIGJ5dGUgb3JkZXIsIGFuZCB0aGUgbmFtZV9sZW4gZmllbGQgY291bGQgbmV2ZXIgYmUKKyAqIGJpZ2dlciB0aGFuIDI1NSBjaGFycywgaXQncyBzYWZlIHRvIHJlY2xhaW0gdGhlIGV4dHJhIGJ5dGUgZm9yIHRoZQorICogZmlsZV90eXBlIGZpZWxkLgorICovCitzdHJ1Y3QgZXh0Ml9kaXJfZW50cnlfMiB7CisJX19sZTMyCWlub2RlOwkJCS8qIElub2RlIG51bWJlciAqLworCV9fbGUxNglyZWNfbGVuOwkJLyogRGlyZWN0b3J5IGVudHJ5IGxlbmd0aCAqLworCV9fdTgJbmFtZV9sZW47CQkvKiBOYW1lIGxlbmd0aCAqLworCV9fdTgJZmlsZV90eXBlOworCWNoYXIJbmFtZVtFWFQyX05BTUVfTEVOXTsJLyogRmlsZSBuYW1lICovCit9OworCisvKgorICogRXh0MiBkaXJlY3RvcnkgZmlsZSB0eXBlcy4gIE9ubHkgdGhlIGxvdyAzIGJpdHMgYXJlIHVzZWQuICBUaGUKKyAqIG90aGVyIGJpdHMgYXJlIHJlc2VydmVkIGZvciBub3cuCisgKi8KK2VudW0geworCUVYVDJfRlRfVU5LTk9XTiwKKwlFWFQyX0ZUX1JFR19GSUxFLAorCUVYVDJfRlRfRElSLAorCUVYVDJfRlRfQ0hSREVWLAorCUVYVDJfRlRfQkxLREVWLAorCUVYVDJfRlRfRklGTywKKwlFWFQyX0ZUX1NPQ0ssCisJRVhUMl9GVF9TWU1MSU5LLAorCUVYVDJfRlRfTUFYCit9OworCisvKgorICogRVhUMl9ESVJfUEFEIGRlZmluZXMgdGhlIGRpcmVjdG9yeSBlbnRyaWVzIGJvdW5kYXJpZXMKKyAqCisgKiBOT1RFOiBJdCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNAorICovCisjZGVmaW5lIEVYVDJfRElSX1BBRAkJIAk0CisjZGVmaW5lIEVYVDJfRElSX1JPVU5EIAkJCShFWFQyX0RJUl9QQUQgLSAxKQorI2RlZmluZSBFWFQyX0RJUl9SRUNfTEVOKG5hbWVfbGVuKQkoKChuYW1lX2xlbikgKyA4ICsgRVhUMl9ESVJfUk9VTkQpICYgXAorCQkJCQkgfkVYVDJfRElSX1JPVU5EKQorCisjZW5kaWYJLyogX0xJTlVYX0VYVDJfRlNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9leHQyX2ZzX3NiLmggYi9pbmNsdWRlL2xpbnV4L2V4dDJfZnNfc2IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWRhMGVkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9leHQyX2ZzX3NiLmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2xpbnV4L2V4dDJfZnNfc2IuaAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NQorICogUmVteSBDYXJkIChjYXJkQG1hc2kuaWJwLmZyKQorICogTGFib3JhdG9pcmUgTUFTSSAtIEluc3RpdHV0IEJsYWlzZSBQYXNjYWwKKyAqIFVuaXZlcnNpdGUgUGllcnJlIGV0IE1hcmllIEN1cmllIChQYXJpcyBWSSkKKyAqCisgKiAgZnJvbQorICoKKyAqICBsaW51eC9pbmNsdWRlL2xpbnV4L21pbml4X2ZzX3NiLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyICBMaW51cyBUb3J2YWxkcworICovCisKKyNpZm5kZWYgX0xJTlVYX0VYVDJfRlNfU0IKKyNkZWZpbmUgX0xJTlVYX0VYVDJfRlNfU0IKKworI2luY2x1ZGUgPGxpbnV4L2Jsb2NrZ3JvdXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmNwdV9jb3VudGVyLmg+CisKKy8qCisgKiBzZWNvbmQgZXh0ZW5kZWQtZnMgc3VwZXItYmxvY2sgZGF0YSBpbiBtZW1vcnkKKyAqLworc3RydWN0IGV4dDJfc2JfaW5mbyB7CisJdW5zaWduZWQgbG9uZyBzX2ZyYWdfc2l6ZTsJLyogU2l6ZSBvZiBhIGZyYWdtZW50IGluIGJ5dGVzICovCisJdW5zaWduZWQgbG9uZyBzX2ZyYWdzX3Blcl9ibG9jazsvKiBOdW1iZXIgb2YgZnJhZ21lbnRzIHBlciBibG9jayAqLworCXVuc2lnbmVkIGxvbmcgc19pbm9kZXNfcGVyX2Jsb2NrOy8qIE51bWJlciBvZiBpbm9kZXMgcGVyIGJsb2NrICovCisJdW5zaWduZWQgbG9uZyBzX2ZyYWdzX3Blcl9ncm91cDsvKiBOdW1iZXIgb2YgZnJhZ21lbnRzIGluIGEgZ3JvdXAgKi8KKwl1bnNpZ25lZCBsb25nIHNfYmxvY2tzX3Blcl9ncm91cDsvKiBOdW1iZXIgb2YgYmxvY2tzIGluIGEgZ3JvdXAgKi8KKwl1bnNpZ25lZCBsb25nIHNfaW5vZGVzX3Blcl9ncm91cDsvKiBOdW1iZXIgb2YgaW5vZGVzIGluIGEgZ3JvdXAgKi8KKwl1bnNpZ25lZCBsb25nIHNfaXRiX3Blcl9ncm91cDsJLyogTnVtYmVyIG9mIGlub2RlIHRhYmxlIGJsb2NrcyBwZXIgZ3JvdXAgKi8KKwl1bnNpZ25lZCBsb25nIHNfZ2RiX2NvdW50OwkvKiBOdW1iZXIgb2YgZ3JvdXAgZGVzY3JpcHRvciBibG9ja3MgKi8KKwl1bnNpZ25lZCBsb25nIHNfZGVzY19wZXJfYmxvY2s7CS8qIE51bWJlciBvZiBncm91cCBkZXNjcmlwdG9ycyBwZXIgYmxvY2sgKi8KKwl1bnNpZ25lZCBsb25nIHNfZ3JvdXBzX2NvdW50OwkvKiBOdW1iZXIgb2YgZ3JvdXBzIGluIHRoZSBmcyAqLworCXN0cnVjdCBidWZmZXJfaGVhZCAqIHNfc2JoOwkvKiBCdWZmZXIgY29udGFpbmluZyB0aGUgc3VwZXIgYmxvY2sgKi8KKwlzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqIHNfZXM7CS8qIFBvaW50ZXIgdG8gdGhlIHN1cGVyIGJsb2NrIGluIHRoZSBidWZmZXIgKi8KKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKiogc19ncm91cF9kZXNjOworCXVuc2lnbmVkIGxvbmcgIHNfbW91bnRfb3B0OworCXVpZF90IHNfcmVzdWlkOworCWdpZF90IHNfcmVzZ2lkOworCXVuc2lnbmVkIHNob3J0IHNfbW91bnRfc3RhdGU7CisJdW5zaWduZWQgc2hvcnQgc19wYWQ7CisJaW50IHNfYWRkcl9wZXJfYmxvY2tfYml0czsKKwlpbnQgc19kZXNjX3Blcl9ibG9ja19iaXRzOworCWludCBzX2lub2RlX3NpemU7CisJaW50IHNfZmlyc3RfaW5vOworCXNwaW5sb2NrX3Qgc19uZXh0X2dlbl9sb2NrOworCXUzMiBzX25leHRfZ2VuZXJhdGlvbjsKKwl1bnNpZ25lZCBsb25nIHNfZGlyX2NvdW50OworCXU4ICpzX2RlYnRzOworCXN0cnVjdCBwZXJjcHVfY291bnRlciBzX2ZyZWVibG9ja3NfY291bnRlcjsKKwlzdHJ1Y3QgcGVyY3B1X2NvdW50ZXIgc19mcmVlaW5vZGVzX2NvdW50ZXI7CisJc3RydWN0IHBlcmNwdV9jb3VudGVyIHNfZGlyc19jb3VudGVyOworCXN0cnVjdCBibG9ja2dyb3VwX2xvY2sgc19ibG9ja2dyb3VwX2xvY2s7Cit9OworCisjZW5kaWYJLyogX0xJTlVYX0VYVDJfRlNfU0IgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXh0M19mcy5oIGIvaW5jbHVkZS9saW51eC9leHQzX2ZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRhZDMxNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvZXh0M19mcy5oCkBAIC0wLDAgKzEsODMwIEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvbGludXgvZXh0M19mcy5oCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1CisgKiBSZW15IENhcmQgKGNhcmRAbWFzaS5pYnAuZnIpCisgKiBMYWJvcmF0b2lyZSBNQVNJIC0gSW5zdGl0dXQgQmxhaXNlIFBhc2NhbAorICogVW5pdmVyc2l0ZSBQaWVycmUgZXQgTWFyaWUgQ3VyaWUgKFBhcmlzIFZJKQorICoKKyAqICBmcm9tCisgKgorICogIGxpbnV4L2luY2x1ZGUvbGludXgvbWluaXhfZnMuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIgIExpbnVzIFRvcnZhbGRzCisgKi8KKworI2lmbmRlZiBfTElOVVhfRVhUM19GU19ICisjZGVmaW5lIF9MSU5VWF9FWFQzX0ZTX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvZXh0M19mc19pLmg+CisjaW5jbHVkZSA8bGludXgvZXh0M19mc19zYi5oPgorCisKK3N0cnVjdCBzdGF0ZnM7CisKKy8qCisgKiBUaGUgc2Vjb25kIGV4dGVuZGVkIGZpbGVzeXN0ZW0gY29uc3RhbnRzL3N0cnVjdHVyZXMKKyAqLworCisvKgorICogRGVmaW5lIEVYVDNGU19ERUJVRyB0byBwcm9kdWNlIGRlYnVnIG1lc3NhZ2VzCisgKi8KKyN1bmRlZiBFWFQzRlNfREVCVUcKKworLyoKKyAqIERlZmluZSBFWFQzX1JFU0VSVkFUSU9OIHRvIHJlc2VydmUgZGF0YSBibG9ja3MgZm9yIGV4cGFuZGluZyBmaWxlcworICovCisjZGVmaW5lIEVYVDNfREVGQVVMVF9SRVNFUlZFX0JMT0NLUyAgICAgOAorI2RlZmluZSBFWFQzX01BWF9SRVNFUlZFX0JMT0NLUyAgICAgICAgIDEwMjQKKyNkZWZpbmUgRVhUM19SRVNFUlZFX1dJTkRPV19OT1RfQUxMT0NBVEVEIDAKKy8qCisgKiBBbHdheXMgZW5hYmxlIGhhc2hlZCBkaXJlY3RvcmllcworICovCisjZGVmaW5lIENPTkZJR19FWFQzX0lOREVYCisKKy8qCisgKiBEZWJ1ZyBjb2RlCisgKi8KKyNpZmRlZiBFWFQzRlNfREVCVUcKKyNkZWZpbmUgZXh0M19kZWJ1ZyhmLCBhLi4uKQkJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCXByaW50ayAoS0VSTl9ERUJVRyAiRVhUMy1mcyBERUJVRyAoJXMsICVkKTogJXM6IiwJXAorCQkJX19GSUxFX18sIF9fTElORV9fLCBfX0ZVTkNUSU9OX18pOwkJXAorCQlwcmludGsgKEtFUk5fREVCVUcgZiwgIyMgYSk7CQkJCVwKKwl9IHdoaWxlICgwKQorI2Vsc2UKKyNkZWZpbmUgZXh0M19kZWJ1ZyhmLCBhLi4uKQlkbyB7fSB3aGlsZSAoMCkKKyNlbmRpZgorCisvKgorICogU3BlY2lhbCBpbm9kZXMgbnVtYmVycworICovCisjZGVmaW5lCUVYVDNfQkFEX0lOTwkJIDEJLyogQmFkIGJsb2NrcyBpbm9kZSAqLworI2RlZmluZSBFWFQzX1JPT1RfSU5PCQkgMgkvKiBSb290IGlub2RlICovCisjZGVmaW5lIEVYVDNfQk9PVF9MT0FERVJfSU5PCSA1CS8qIEJvb3QgbG9hZGVyIGlub2RlICovCisjZGVmaW5lIEVYVDNfVU5ERUxfRElSX0lOTwkgNgkvKiBVbmRlbGV0ZSBkaXJlY3RvcnkgaW5vZGUgKi8KKyNkZWZpbmUgRVhUM19SRVNJWkVfSU5PCQkgNwkvKiBSZXNlcnZlZCBncm91cCBkZXNjcmlwdG9ycyBpbm9kZSAqLworI2RlZmluZSBFWFQzX0pPVVJOQUxfSU5PCSA4CS8qIEpvdXJuYWwgaW5vZGUgKi8KKworLyogRmlyc3Qgbm9uLXJlc2VydmVkIGlub2RlIGZvciBvbGQgZXh0MyBmaWxlc3lzdGVtcyAqLworI2RlZmluZSBFWFQzX0dPT0RfT0xEX0ZJUlNUX0lOTwkxMQorCisvKgorICogVGhlIHNlY29uZCBleHRlbmRlZCBmaWxlIHN5c3RlbSBtYWdpYyBudW1iZXIKKyAqLworI2RlZmluZSBFWFQzX1NVUEVSX01BR0lDCTB4RUY1MworCisvKgorICogTWF4aW1hbCBjb3VudCBvZiBsaW5rcyB0byBhIGZpbGUKKyAqLworI2RlZmluZSBFWFQzX0xJTktfTUFYCQkzMjAwMAorCisvKgorICogTWFjcm8taW5zdHJ1Y3Rpb25zIHVzZWQgdG8gbWFuYWdlIHNldmVyYWwgYmxvY2sgc2l6ZXMKKyAqLworI2RlZmluZSBFWFQzX01JTl9CTE9DS19TSVpFCQkxMDI0CisjZGVmaW5lCUVYVDNfTUFYX0JMT0NLX1NJWkUJCTQwOTYKKyNkZWZpbmUgRVhUM19NSU5fQkxPQ0tfTE9HX1NJWkUJCSAgMTAKKyNpZmRlZiBfX0tFUk5FTF9fCisjIGRlZmluZSBFWFQzX0JMT0NLX1NJWkUocykJCSgocyktPnNfYmxvY2tzaXplKQorI2Vsc2UKKyMgZGVmaW5lIEVYVDNfQkxPQ0tfU0laRShzKQkJKEVYVDNfTUlOX0JMT0NLX1NJWkUgPDwgKHMpLT5zX2xvZ19ibG9ja19zaXplKQorI2VuZGlmCisjZGVmaW5lCUVYVDNfQUREUl9QRVJfQkxPQ0socykJCShFWFQzX0JMT0NLX1NJWkUocykgLyBzaXplb2YgKF9fdTMyKSkKKyNpZmRlZiBfX0tFUk5FTF9fCisjIGRlZmluZSBFWFQzX0JMT0NLX1NJWkVfQklUUyhzKQkoKHMpLT5zX2Jsb2Nrc2l6ZV9iaXRzKQorI2Vsc2UKKyMgZGVmaW5lIEVYVDNfQkxPQ0tfU0laRV9CSVRTKHMpCSgocyktPnNfbG9nX2Jsb2NrX3NpemUgKyAxMCkKKyNlbmRpZgorI2lmZGVmIF9fS0VSTkVMX18KKyNkZWZpbmUJRVhUM19BRERSX1BFUl9CTE9DS19CSVRTKHMpCShFWFQzX1NCKHMpLT5zX2FkZHJfcGVyX2Jsb2NrX2JpdHMpCisjZGVmaW5lIEVYVDNfSU5PREVfU0laRShzKQkJKEVYVDNfU0IocyktPnNfaW5vZGVfc2l6ZSkKKyNkZWZpbmUgRVhUM19GSVJTVF9JTk8ocykJCShFWFQzX1NCKHMpLT5zX2ZpcnN0X2lubykKKyNlbHNlCisjZGVmaW5lIEVYVDNfSU5PREVfU0laRShzKQkoKChzKS0+c19yZXZfbGV2ZWwgPT0gRVhUM19HT09EX09MRF9SRVYpID8gXAorCQkJCSBFWFQzX0dPT0RfT0xEX0lOT0RFX1NJWkUgOiBcCisJCQkJIChzKS0+c19pbm9kZV9zaXplKQorI2RlZmluZSBFWFQzX0ZJUlNUX0lOTyhzKQkoKChzKS0+c19yZXZfbGV2ZWwgPT0gRVhUM19HT09EX09MRF9SRVYpID8gXAorCQkJCSBFWFQzX0dPT0RfT0xEX0ZJUlNUX0lOTyA6IFwKKwkJCQkgKHMpLT5zX2ZpcnN0X2lubykKKyNlbmRpZgorCisvKgorICogTWFjcm8taW5zdHJ1Y3Rpb25zIHVzZWQgdG8gbWFuYWdlIGZyYWdtZW50cworICovCisjZGVmaW5lIEVYVDNfTUlOX0ZSQUdfU0laRQkJMTAyNAorI2RlZmluZQlFWFQzX01BWF9GUkFHX1NJWkUJCTQwOTYKKyNkZWZpbmUgRVhUM19NSU5fRlJBR19MT0dfU0laRQkJICAxMAorI2lmZGVmIF9fS0VSTkVMX18KKyMgZGVmaW5lIEVYVDNfRlJBR19TSVpFKHMpCQkoRVhUM19TQihzKS0+c19mcmFnX3NpemUpCisjIGRlZmluZSBFWFQzX0ZSQUdTX1BFUl9CTE9DSyhzKQkoRVhUM19TQihzKS0+c19mcmFnc19wZXJfYmxvY2spCisjZWxzZQorIyBkZWZpbmUgRVhUM19GUkFHX1NJWkUocykJCShFWFQzX01JTl9GUkFHX1NJWkUgPDwgKHMpLT5zX2xvZ19mcmFnX3NpemUpCisjIGRlZmluZSBFWFQzX0ZSQUdTX1BFUl9CTE9DSyhzKQkoRVhUM19CTE9DS19TSVpFKHMpIC8gRVhUM19GUkFHX1NJWkUocykpCisjZW5kaWYKKworLyoKKyAqIFN0cnVjdHVyZSBvZiBhIGJsb2NrcyBncm91cCBkZXNjcmlwdG9yCisgKi8KK3N0cnVjdCBleHQzX2dyb3VwX2Rlc2MKK3sKKwlfX2xlMzIJYmdfYmxvY2tfYml0bWFwOwkJLyogQmxvY2tzIGJpdG1hcCBibG9jayAqLworCV9fbGUzMgliZ19pbm9kZV9iaXRtYXA7CQkvKiBJbm9kZXMgYml0bWFwIGJsb2NrICovCisJX19sZTMyCWJnX2lub2RlX3RhYmxlOwkJLyogSW5vZGVzIHRhYmxlIGJsb2NrICovCisJX19sZTE2CWJnX2ZyZWVfYmxvY2tzX2NvdW50OwkvKiBGcmVlIGJsb2NrcyBjb3VudCAqLworCV9fbGUxNgliZ19mcmVlX2lub2Rlc19jb3VudDsJLyogRnJlZSBpbm9kZXMgY291bnQgKi8KKwlfX2xlMTYJYmdfdXNlZF9kaXJzX2NvdW50OwkvKiBEaXJlY3RvcmllcyBjb3VudCAqLworCV9fdTE2CWJnX3BhZDsKKwlfX2xlMzIJYmdfcmVzZXJ2ZWRbM107Cit9OworCisvKgorICogTWFjcm8taW5zdHJ1Y3Rpb25zIHVzZWQgdG8gbWFuYWdlIGdyb3VwIGRlc2NyaXB0b3JzCisgKi8KKyNpZmRlZiBfX0tFUk5FTF9fCisjIGRlZmluZSBFWFQzX0JMT0NLU19QRVJfR1JPVVAocykJKEVYVDNfU0IocyktPnNfYmxvY2tzX3Blcl9ncm91cCkKKyMgZGVmaW5lIEVYVDNfREVTQ19QRVJfQkxPQ0socykJCShFWFQzX1NCKHMpLT5zX2Rlc2NfcGVyX2Jsb2NrKQorIyBkZWZpbmUgRVhUM19JTk9ERVNfUEVSX0dST1VQKHMpCShFWFQzX1NCKHMpLT5zX2lub2Rlc19wZXJfZ3JvdXApCisjIGRlZmluZSBFWFQzX0RFU0NfUEVSX0JMT0NLX0JJVFMocykJKEVYVDNfU0IocyktPnNfZGVzY19wZXJfYmxvY2tfYml0cykKKyNlbHNlCisjIGRlZmluZSBFWFQzX0JMT0NLU19QRVJfR1JPVVAocykJKChzKS0+c19ibG9ja3NfcGVyX2dyb3VwKQorIyBkZWZpbmUgRVhUM19ERVNDX1BFUl9CTE9DSyhzKQkJKEVYVDNfQkxPQ0tfU0laRShzKSAvIHNpemVvZiAoc3RydWN0IGV4dDNfZ3JvdXBfZGVzYykpCisjIGRlZmluZSBFWFQzX0lOT0RFU19QRVJfR1JPVVAocykJKChzKS0+c19pbm9kZXNfcGVyX2dyb3VwKQorI2VuZGlmCisKKy8qCisgKiBDb25zdGFudHMgcmVsYXRpdmUgdG8gdGhlIGRhdGEgYmxvY2tzCisgKi8KKyNkZWZpbmUJRVhUM19ORElSX0JMT0NLUwkJMTIKKyNkZWZpbmUJRVhUM19JTkRfQkxPQ0sJCQlFWFQzX05ESVJfQkxPQ0tTCisjZGVmaW5lCUVYVDNfRElORF9CTE9DSwkJCShFWFQzX0lORF9CTE9DSyArIDEpCisjZGVmaW5lCUVYVDNfVElORF9CTE9DSwkJCShFWFQzX0RJTkRfQkxPQ0sgKyAxKQorI2RlZmluZQlFWFQzX05fQkxPQ0tTCQkJKEVYVDNfVElORF9CTE9DSyArIDEpCisKKy8qCisgKiBJbm9kZSBmbGFncworICovCisjZGVmaW5lCUVYVDNfU0VDUk1fRkwJCQkweDAwMDAwMDAxIC8qIFNlY3VyZSBkZWxldGlvbiAqLworI2RlZmluZQlFWFQzX1VOUk1fRkwJCQkweDAwMDAwMDAyIC8qIFVuZGVsZXRlICovCisjZGVmaW5lCUVYVDNfQ09NUFJfRkwJCQkweDAwMDAwMDA0IC8qIENvbXByZXNzIGZpbGUgKi8KKyNkZWZpbmUgRVhUM19TWU5DX0ZMCQkJMHgwMDAwMDAwOCAvKiBTeW5jaHJvbm91cyB1cGRhdGVzICovCisjZGVmaW5lIEVYVDNfSU1NVVRBQkxFX0ZMCQkweDAwMDAwMDEwIC8qIEltbXV0YWJsZSBmaWxlICovCisjZGVmaW5lIEVYVDNfQVBQRU5EX0ZMCQkJMHgwMDAwMDAyMCAvKiB3cml0ZXMgdG8gZmlsZSBtYXkgb25seSBhcHBlbmQgKi8KKyNkZWZpbmUgRVhUM19OT0RVTVBfRkwJCQkweDAwMDAwMDQwIC8qIGRvIG5vdCBkdW1wIGZpbGUgKi8KKyNkZWZpbmUgRVhUM19OT0FUSU1FX0ZMCQkJMHgwMDAwMDA4MCAvKiBkbyBub3QgdXBkYXRlIGF0aW1lICovCisvKiBSZXNlcnZlZCBmb3IgY29tcHJlc3Npb24gdXNhZ2UuLi4gKi8KKyNkZWZpbmUgRVhUM19ESVJUWV9GTAkJCTB4MDAwMDAxMDAKKyNkZWZpbmUgRVhUM19DT01QUkJMS19GTAkJMHgwMDAwMDIwMCAvKiBPbmUgb3IgbW9yZSBjb21wcmVzc2VkIGNsdXN0ZXJzICovCisjZGVmaW5lIEVYVDNfTk9DT01QUl9GTAkJCTB4MDAwMDA0MDAgLyogRG9uJ3QgY29tcHJlc3MgKi8KKyNkZWZpbmUgRVhUM19FQ09NUFJfRkwJCQkweDAwMDAwODAwIC8qIENvbXByZXNzaW9uIGVycm9yICovCisvKiBFbmQgY29tcHJlc3Npb24gZmxhZ3MgLS0tIG1heWJlIG5vdCBhbGwgdXNlZCAqLworI2RlZmluZSBFWFQzX0lOREVYX0ZMCQkJMHgwMDAwMTAwMCAvKiBoYXNoLWluZGV4ZWQgZGlyZWN0b3J5ICovCisjZGVmaW5lIEVYVDNfSU1BR0lDX0ZMCQkJMHgwMDAwMjAwMCAvKiBBRlMgZGlyZWN0b3J5ICovCisjZGVmaW5lIEVYVDNfSk9VUk5BTF9EQVRBX0ZMCQkweDAwMDA0MDAwIC8qIGZpbGUgZGF0YSBzaG91bGQgYmUgam91cm5hbGVkICovCisjZGVmaW5lIEVYVDNfTk9UQUlMX0ZMCQkJMHgwMDAwODAwMCAvKiBmaWxlIHRhaWwgc2hvdWxkIG5vdCBiZSBtZXJnZWQgKi8KKyNkZWZpbmUgRVhUM19ESVJTWU5DX0ZMCQkJMHgwMDAxMDAwMCAvKiBkaXJzeW5jIGJlaGF2aW91ciAoZGlyZWN0b3JpZXMgb25seSkgKi8KKyNkZWZpbmUgRVhUM19UT1BESVJfRkwJCQkweDAwMDIwMDAwIC8qIFRvcCBvZiBkaXJlY3RvcnkgaGllcmFyY2hpZXMqLworI2RlZmluZSBFWFQzX1JFU0VSVkVEX0ZMCQkweDgwMDAwMDAwIC8qIHJlc2VydmVkIGZvciBleHQzIGxpYiAqLworCisjZGVmaW5lIEVYVDNfRkxfVVNFUl9WSVNJQkxFCQkweDAwMDNERkZGIC8qIFVzZXIgdmlzaWJsZSBmbGFncyAqLworI2RlZmluZSBFWFQzX0ZMX1VTRVJfTU9ESUZJQUJMRQkJMHgwMDAzODBGRiAvKiBVc2VyIG1vZGlmaWFibGUgZmxhZ3MgKi8KKworLyoKKyAqIElub2RlIGR5bmFtaWMgc3RhdGUgZmxhZ3MKKyAqLworI2RlZmluZSBFWFQzX1NUQVRFX0pEQVRBCQkweDAwMDAwMDAxIC8qIGpvdXJuYWxlZCBkYXRhIGV4aXN0cyAqLworI2RlZmluZSBFWFQzX1NUQVRFX05FVwkJCTB4MDAwMDAwMDIgLyogaW5vZGUgaXMgbmV3bHkgY3JlYXRlZCAqLworI2RlZmluZSBFWFQzX1NUQVRFX1hBVFRSCQkweDAwMDAwMDA0IC8qIGhhcyBpbi1pbm9kZSB4YXR0cnMgKi8KKworLyogVXNlZCB0byBwYXNzIGdyb3VwIGRlc2NyaXB0b3IgZGF0YSB3aGVuIG9ubGluZSByZXNpemUgaXMgZG9uZSAqLworc3RydWN0IGV4dDNfbmV3X2dyb3VwX2lucHV0IHsKKwlfX3UzMiBncm91cDsgICAgICAgICAgICAvKiBHcm91cCBudW1iZXIgZm9yIHRoaXMgZGF0YSAqLworCV9fdTMyIGJsb2NrX2JpdG1hcDsgICAgIC8qIEFic29sdXRlIGJsb2NrIG51bWJlciBvZiBibG9jayBiaXRtYXAgKi8KKwlfX3UzMiBpbm9kZV9iaXRtYXA7ICAgICAvKiBBYnNvbHV0ZSBibG9jayBudW1iZXIgb2YgaW5vZGUgYml0bWFwICovCisJX191MzIgaW5vZGVfdGFibGU7ICAgICAgLyogQWJzb2x1dGUgYmxvY2sgbnVtYmVyIG9mIGlub2RlIHRhYmxlIHN0YXJ0ICovCisJX191MzIgYmxvY2tzX2NvdW50OyAgICAgLyogVG90YWwgbnVtYmVyIG9mIGJsb2NrcyBpbiB0aGlzIGdyb3VwICovCisJX191MTYgcmVzZXJ2ZWRfYmxvY2tzOyAgLyogTnVtYmVyIG9mIHJlc2VydmVkIGJsb2NrcyBpbiB0aGlzIGdyb3VwICovCisJX191MTYgdW51c2VkOworfTsKKworLyogVGhlIHN0cnVjdCBleHQzX25ld19ncm91cF9pbnB1dCBpbiBrZXJuZWwgc3BhY2UsIHdpdGggZnJlZV9ibG9ja3NfY291bnQgKi8KK3N0cnVjdCBleHQzX25ld19ncm91cF9kYXRhIHsKKwlfX3UzMiBncm91cDsKKwlfX3UzMiBibG9ja19iaXRtYXA7CisJX191MzIgaW5vZGVfYml0bWFwOworCV9fdTMyIGlub2RlX3RhYmxlOworCV9fdTMyIGJsb2Nrc19jb3VudDsKKwlfX3UxNiByZXNlcnZlZF9ibG9ja3M7CisJX191MTYgdW51c2VkOworCV9fdTMyIGZyZWVfYmxvY2tzX2NvdW50OworfTsKKworCisvKgorICogaW9jdGwgY29tbWFuZHMKKyAqLworI2RlZmluZQlFWFQzX0lPQ19HRVRGTEFHUwkJX0lPUignZicsIDEsIGxvbmcpCisjZGVmaW5lCUVYVDNfSU9DX1NFVEZMQUdTCQlfSU9XKCdmJywgMiwgbG9uZykKKyNkZWZpbmUJRVhUM19JT0NfR0VUVkVSU0lPTgkJX0lPUignZicsIDMsIGxvbmcpCisjZGVmaW5lCUVYVDNfSU9DX1NFVFZFUlNJT04JCV9JT1coJ2YnLCA0LCBsb25nKQorI2RlZmluZSBFWFQzX0lPQ19HUk9VUF9FWFRFTkQJCV9JT1coJ2YnLCA3LCB1bnNpZ25lZCBsb25nKQorI2RlZmluZSBFWFQzX0lPQ19HUk9VUF9BREQJCV9JT1coJ2YnLCA4LHN0cnVjdCBleHQzX25ld19ncm91cF9pbnB1dCkKKyNkZWZpbmUJRVhUM19JT0NfR0VUVkVSU0lPTl9PTEQJCV9JT1IoJ3YnLCAxLCBsb25nKQorI2RlZmluZQlFWFQzX0lPQ19TRVRWRVJTSU9OX09MRAkJX0lPVygndicsIDIsIGxvbmcpCisjaWZkZWYgQ09ORklHX0pCRF9ERUJVRworI2RlZmluZSBFWFQzX0lPQ19XQUlUX0ZPUl9SRUFET05MWQlfSU9SKCdmJywgOTksIGxvbmcpCisjZW5kaWYKKyNkZWZpbmUgRVhUM19JT0NfR0VUUlNWU1oJCV9JT1IoJ2YnLCA1LCBsb25nKQorI2RlZmluZSBFWFQzX0lPQ19TRVRSU1ZTWgkJX0lPVygnZicsIDYsIGxvbmcpCisKKy8qCisgKiBTdHJ1Y3R1cmUgb2YgYW4gaW5vZGUgb24gdGhlIGRpc2sKKyAqLworc3RydWN0IGV4dDNfaW5vZGUgeworCV9fbGUxNglpX21vZGU7CQkvKiBGaWxlIG1vZGUgKi8KKwlfX2xlMTYJaV91aWQ7CQkvKiBMb3cgMTYgYml0cyBvZiBPd25lciBVaWQgKi8KKwlfX2xlMzIJaV9zaXplOwkJLyogU2l6ZSBpbiBieXRlcyAqLworCV9fbGUzMglpX2F0aW1lOwkvKiBBY2Nlc3MgdGltZSAqLworCV9fbGUzMglpX2N0aW1lOwkvKiBDcmVhdGlvbiB0aW1lICovCisJX19sZTMyCWlfbXRpbWU7CS8qIE1vZGlmaWNhdGlvbiB0aW1lICovCisJX19sZTMyCWlfZHRpbWU7CS8qIERlbGV0aW9uIFRpbWUgKi8KKwlfX2xlMTYJaV9naWQ7CQkvKiBMb3cgMTYgYml0cyBvZiBHcm91cCBJZCAqLworCV9fbGUxNglpX2xpbmtzX2NvdW50OwkvKiBMaW5rcyBjb3VudCAqLworCV9fbGUzMglpX2Jsb2NrczsJLyogQmxvY2tzIGNvdW50ICovCisJX19sZTMyCWlfZmxhZ3M7CS8qIEZpbGUgZmxhZ3MgKi8KKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQlfX3UzMiAgbF9pX3Jlc2VydmVkMTsKKwkJfSBsaW51eDE7CisJCXN0cnVjdCB7CisJCQlfX3UzMiAgaF9pX3RyYW5zbGF0b3I7CisJCX0gaHVyZDE7CisJCXN0cnVjdCB7CisJCQlfX3UzMiAgbV9pX3Jlc2VydmVkMTsKKwkJfSBtYXNpeDE7CisJfSBvc2QxOwkJCQkvKiBPUyBkZXBlbmRlbnQgMSAqLworCV9fbGUzMglpX2Jsb2NrW0VYVDNfTl9CTE9DS1NdOy8qIFBvaW50ZXJzIHRvIGJsb2NrcyAqLworCV9fbGUzMglpX2dlbmVyYXRpb247CS8qIEZpbGUgdmVyc2lvbiAoZm9yIE5GUykgKi8KKwlfX2xlMzIJaV9maWxlX2FjbDsJLyogRmlsZSBBQ0wgKi8KKwlfX2xlMzIJaV9kaXJfYWNsOwkvKiBEaXJlY3RvcnkgQUNMICovCisJX19sZTMyCWlfZmFkZHI7CS8qIEZyYWdtZW50IGFkZHJlc3MgKi8KKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQlfX3U4CWxfaV9mcmFnOwkvKiBGcmFnbWVudCBudW1iZXIgKi8KKwkJCV9fdTgJbF9pX2ZzaXplOwkvKiBGcmFnbWVudCBzaXplICovCisJCQlfX3UxNglpX3BhZDE7CisJCQlfX2xlMTYJbF9pX3VpZF9oaWdoOwkvKiB0aGVzZSAyIGZpZWxkcyAgICAqLworCQkJX19sZTE2CWxfaV9naWRfaGlnaDsJLyogd2VyZSByZXNlcnZlZDJbMF0gKi8KKwkJCV9fdTMyCWxfaV9yZXNlcnZlZDI7CisJCX0gbGludXgyOworCQlzdHJ1Y3QgeworCQkJX191OAloX2lfZnJhZzsJLyogRnJhZ21lbnQgbnVtYmVyICovCisJCQlfX3U4CWhfaV9mc2l6ZTsJLyogRnJhZ21lbnQgc2l6ZSAqLworCQkJX191MTYJaF9pX21vZGVfaGlnaDsKKwkJCV9fdTE2CWhfaV91aWRfaGlnaDsKKwkJCV9fdTE2CWhfaV9naWRfaGlnaDsKKwkJCV9fdTMyCWhfaV9hdXRob3I7CisJCX0gaHVyZDI7CisJCXN0cnVjdCB7CisJCQlfX3U4CW1faV9mcmFnOwkvKiBGcmFnbWVudCBudW1iZXIgKi8KKwkJCV9fdTgJbV9pX2ZzaXplOwkvKiBGcmFnbWVudCBzaXplICovCisJCQlfX3UxNgltX3BhZDE7CisJCQlfX3UzMgltX2lfcmVzZXJ2ZWQyWzJdOworCQl9IG1hc2l4MjsKKwl9IG9zZDI7CQkJCS8qIE9TIGRlcGVuZGVudCAyICovCisJX19sZTE2CWlfZXh0cmFfaXNpemU7CisJX19sZTE2CWlfcGFkMTsKK307CisKKyNkZWZpbmUgaV9zaXplX2hpZ2gJaV9kaXJfYWNsCisKKyNpZiBkZWZpbmVkKF9fS0VSTkVMX18pIHx8IGRlZmluZWQoX19saW51eF9fKQorI2RlZmluZSBpX3Jlc2VydmVkMQlvc2QxLmxpbnV4MS5sX2lfcmVzZXJ2ZWQxCisjZGVmaW5lIGlfZnJhZwkJb3NkMi5saW51eDIubF9pX2ZyYWcKKyNkZWZpbmUgaV9mc2l6ZQkJb3NkMi5saW51eDIubF9pX2ZzaXplCisjZGVmaW5lIGlfdWlkX2xvdwlpX3VpZAorI2RlZmluZSBpX2dpZF9sb3cJaV9naWQKKyNkZWZpbmUgaV91aWRfaGlnaAlvc2QyLmxpbnV4Mi5sX2lfdWlkX2hpZ2gKKyNkZWZpbmUgaV9naWRfaGlnaAlvc2QyLmxpbnV4Mi5sX2lfZ2lkX2hpZ2gKKyNkZWZpbmUgaV9yZXNlcnZlZDIJb3NkMi5saW51eDIubF9pX3Jlc2VydmVkMgorCisjZWxpZiBkZWZpbmVkKF9fR05VX18pCisKKyNkZWZpbmUgaV90cmFuc2xhdG9yCW9zZDEuaHVyZDEuaF9pX3RyYW5zbGF0b3IKKyNkZWZpbmUgaV9mcmFnCQlvc2QyLmh1cmQyLmhfaV9mcmFnOworI2RlZmluZSBpX2ZzaXplCQlvc2QyLmh1cmQyLmhfaV9mc2l6ZTsKKyNkZWZpbmUgaV91aWRfaGlnaAlvc2QyLmh1cmQyLmhfaV91aWRfaGlnaAorI2RlZmluZSBpX2dpZF9oaWdoCW9zZDIuaHVyZDIuaF9pX2dpZF9oaWdoCisjZGVmaW5lIGlfYXV0aG9yCW9zZDIuaHVyZDIuaF9pX2F1dGhvcgorCisjZWxpZiBkZWZpbmVkKF9fbWFzaXhfXykKKworI2RlZmluZSBpX3Jlc2VydmVkMQlvc2QxLm1hc2l4MS5tX2lfcmVzZXJ2ZWQxCisjZGVmaW5lIGlfZnJhZwkJb3NkMi5tYXNpeDIubV9pX2ZyYWcKKyNkZWZpbmUgaV9mc2l6ZQkJb3NkMi5tYXNpeDIubV9pX2ZzaXplCisjZGVmaW5lIGlfcmVzZXJ2ZWQyCW9zZDIubWFzaXgyLm1faV9yZXNlcnZlZDIKKworI2VuZGlmIC8qIGRlZmluZWQoX19LRVJORUxfXykgfHwgZGVmaW5lZChfX2xpbnV4X18pICovCisKKy8qCisgKiBGaWxlIHN5c3RlbSBzdGF0ZXMKKyAqLworI2RlZmluZQlFWFQzX1ZBTElEX0ZTCQkJMHgwMDAxCS8qIFVubW91bnRlZCBjbGVhbmx5ICovCisjZGVmaW5lCUVYVDNfRVJST1JfRlMJCQkweDAwMDIJLyogRXJyb3JzIGRldGVjdGVkICovCisjZGVmaW5lCUVYVDNfT1JQSEFOX0ZTCQkJMHgwMDA0CS8qIE9ycGhhbnMgYmVpbmcgcmVjb3ZlcmVkICovCisKKy8qCisgKiBNb3VudCBmbGFncworICovCisjZGVmaW5lIEVYVDNfTU9VTlRfQ0hFQ0sJCTB4MDAwMDEJLyogRG8gbW91bnQtdGltZSBjaGVja3MgKi8KKyNkZWZpbmUgRVhUM19NT1VOVF9PTERBTExPQwkJMHgwMDAwMiAgLyogRG9uJ3QgdXNlIHRoZSBuZXcgT3Jsb3YgYWxsb2NhdG9yICovCisjZGVmaW5lIEVYVDNfTU9VTlRfR1JQSUQJCTB4MDAwMDQJLyogQ3JlYXRlIGZpbGVzIHdpdGggZGlyZWN0b3J5J3MgZ3JvdXAgKi8KKyNkZWZpbmUgRVhUM19NT1VOVF9ERUJVRwkJMHgwMDAwOAkvKiBTb21lIGRlYnVnZ2luZyBtZXNzYWdlcyAqLworI2RlZmluZSBFWFQzX01PVU5UX0VSUk9SU19DT05UCQkweDAwMDEwCS8qIENvbnRpbnVlIG9uIGVycm9ycyAqLworI2RlZmluZSBFWFQzX01PVU5UX0VSUk9SU19STwkJMHgwMDAyMAkvKiBSZW1vdW50IGZzIHJvIG9uIGVycm9ycyAqLworI2RlZmluZSBFWFQzX01PVU5UX0VSUk9SU19QQU5JQwkJMHgwMDA0MAkvKiBQYW5pYyBvbiBlcnJvcnMgKi8KKyNkZWZpbmUgRVhUM19NT1VOVF9NSU5JWF9ERgkJMHgwMDA4MAkvKiBNaW1pY3MgdGhlIE1pbml4IHN0YXRmcyAqLworI2RlZmluZSBFWFQzX01PVU5UX05PTE9BRAkJMHgwMDEwMAkvKiBEb24ndCB1c2UgZXhpc3Rpbmcgam91cm5hbCovCisjZGVmaW5lIEVYVDNfTU9VTlRfQUJPUlQJCTB4MDAyMDAJLyogRmF0YWwgZXJyb3IgZGV0ZWN0ZWQgKi8KKyNkZWZpbmUgRVhUM19NT1VOVF9EQVRBX0ZMQUdTCQkweDAwQzAwCS8qIE1vZGUgZm9yIGRhdGEgd3JpdGVzOiAqLworI2RlZmluZSBFWFQzX01PVU5UX0pPVVJOQUxfREFUQQkJMHgwMDQwMAkvKiBXcml0ZSBkYXRhIHRvIGpvdXJuYWwgKi8KKyNkZWZpbmUgRVhUM19NT1VOVF9PUkRFUkVEX0RBVEEJCTB4MDA4MDAJLyogRmx1c2ggZGF0YSBiZWZvcmUgY29tbWl0ICovCisjZGVmaW5lIEVYVDNfTU9VTlRfV1JJVEVCQUNLX0RBVEEJMHgwMEMwMAkvKiBObyBkYXRhIG9yZGVyaW5nICovCisjZGVmaW5lIEVYVDNfTU9VTlRfVVBEQVRFX0pPVVJOQUwJMHgwMTAwMAkvKiBVcGRhdGUgdGhlIGpvdXJuYWwgZm9ybWF0ICovCisjZGVmaW5lIEVYVDNfTU9VTlRfTk9fVUlEMzIJCTB4MDIwMDAgIC8qIERpc2FibGUgMzItYml0IFVJRHMgKi8KKyNkZWZpbmUgRVhUM19NT1VOVF9YQVRUUl9VU0VSCQkweDA0MDAwCS8qIEV4dGVuZGVkIHVzZXIgYXR0cmlidXRlcyAqLworI2RlZmluZSBFWFQzX01PVU5UX1BPU0lYX0FDTAkJMHgwODAwMAkvKiBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0cyAqLworI2RlZmluZSBFWFQzX01PVU5UX1JFU0VSVkFUSU9OCQkweDEwMDAwCS8qIFByZWFsbG9jYXRpb24gKi8KKyNkZWZpbmUgRVhUM19NT1VOVF9CQVJSSUVSCQkweDIwMDAwIC8qIFVzZSBibG9jayBiYXJyaWVycyAqLworI2RlZmluZSBFWFQzX01PVU5UX05PQkgJCQkweDQwMDAwIC8qIE5vIGJ1ZmZlcmhlYWRzICovCisKKy8qIENvbXBhdGliaWxpdHksIGZvciBoYXZpbmcgYm90aCBleHQyX2ZzLmggYW5kIGV4dDNfZnMuaCBpbmNsdWRlZCBhdCBvbmNlICovCisjaWZuZGVmIF9MSU5VWF9FWFQyX0ZTX0gKKyNkZWZpbmUgY2xlYXJfb3B0KG8sIG9wdCkJCW8gJj0gfkVYVDNfTU9VTlRfIyNvcHQKKyNkZWZpbmUgc2V0X29wdChvLCBvcHQpCQkJbyB8PSBFWFQzX01PVU5UXyMjb3B0CisjZGVmaW5lIHRlc3Rfb3B0KHNiLCBvcHQpCQkoRVhUM19TQihzYiktPnNfbW91bnRfb3B0ICYgXAorCQkJCQkgRVhUM19NT1VOVF8jI29wdCkKKyNlbHNlCisjZGVmaW5lIEVYVDJfTU9VTlRfTk9MT0FECQlFWFQzX01PVU5UX05PTE9BRAorI2RlZmluZSBFWFQyX01PVU5UX0FCT1JUCQlFWFQzX01PVU5UX0FCT1JUCisjZGVmaW5lIEVYVDJfTU9VTlRfREFUQV9GTEFHUwkJRVhUM19NT1VOVF9EQVRBX0ZMQUdTCisjZW5kaWYKKworI2RlZmluZSBleHQzX3NldF9iaXQJCQlleHQyX3NldF9iaXQKKyNkZWZpbmUgZXh0M19zZXRfYml0X2F0b21pYwkJZXh0Ml9zZXRfYml0X2F0b21pYworI2RlZmluZSBleHQzX2NsZWFyX2JpdAkJCWV4dDJfY2xlYXJfYml0CisjZGVmaW5lIGV4dDNfY2xlYXJfYml0X2F0b21pYwkJZXh0Ml9jbGVhcl9iaXRfYXRvbWljCisjZGVmaW5lIGV4dDNfdGVzdF9iaXQJCQlleHQyX3Rlc3RfYml0CisjZGVmaW5lIGV4dDNfZmluZF9maXJzdF96ZXJvX2JpdAlleHQyX2ZpbmRfZmlyc3RfemVyb19iaXQKKyNkZWZpbmUgZXh0M19maW5kX25leHRfemVyb19iaXQJCWV4dDJfZmluZF9uZXh0X3plcm9fYml0CisKKy8qCisgKiBNYXhpbWFsIG1vdW50IGNvdW50cyBiZXR3ZWVuIHR3byBmaWxlc3lzdGVtIGNoZWNrcworICovCisjZGVmaW5lIEVYVDNfREZMX01BWF9NTlRfQ09VTlQJCTIwCS8qIEFsbG93IDIwIG1vdW50cyAqLworI2RlZmluZSBFWFQzX0RGTF9DSEVDS0lOVEVSVkFMCQkwCS8qIERvbid0IHVzZSBpbnRlcnZhbCBjaGVjayAqLworCisvKgorICogQmVoYXZpb3VyIHdoZW4gZGV0ZWN0aW5nIGVycm9ycworICovCisjZGVmaW5lIEVYVDNfRVJST1JTX0NPTlRJTlVFCQkxCS8qIENvbnRpbnVlIGV4ZWN1dGlvbiAqLworI2RlZmluZSBFWFQzX0VSUk9SU19STwkJCTIJLyogUmVtb3VudCBmcyByZWFkLW9ubHkgKi8KKyNkZWZpbmUgRVhUM19FUlJPUlNfUEFOSUMJCTMJLyogUGFuaWMgKi8KKyNkZWZpbmUgRVhUM19FUlJPUlNfREVGQVVMVAkJRVhUM19FUlJPUlNfQ09OVElOVUUKKworLyoKKyAqIFN0cnVjdHVyZSBvZiB0aGUgc3VwZXIgYmxvY2sKKyAqLworc3RydWN0IGV4dDNfc3VwZXJfYmxvY2sgeworLyowMCovCV9fbGUzMglzX2lub2Rlc19jb3VudDsJCS8qIElub2RlcyBjb3VudCAqLworCV9fbGUzMglzX2Jsb2Nrc19jb3VudDsJCS8qIEJsb2NrcyBjb3VudCAqLworCV9fbGUzMglzX3JfYmxvY2tzX2NvdW50OwkvKiBSZXNlcnZlZCBibG9ja3MgY291bnQgKi8KKwlfX2xlMzIJc19mcmVlX2Jsb2Nrc19jb3VudDsJLyogRnJlZSBibG9ja3MgY291bnQgKi8KKy8qMTAqLwlfX2xlMzIJc19mcmVlX2lub2Rlc19jb3VudDsJLyogRnJlZSBpbm9kZXMgY291bnQgKi8KKwlfX2xlMzIJc19maXJzdF9kYXRhX2Jsb2NrOwkvKiBGaXJzdCBEYXRhIEJsb2NrICovCisJX19sZTMyCXNfbG9nX2Jsb2NrX3NpemU7CS8qIEJsb2NrIHNpemUgKi8KKwlfX2xlMzIJc19sb2dfZnJhZ19zaXplOwkvKiBGcmFnbWVudCBzaXplICovCisvKjIwKi8JX19sZTMyCXNfYmxvY2tzX3Blcl9ncm91cDsJLyogIyBCbG9ja3MgcGVyIGdyb3VwICovCisJX19sZTMyCXNfZnJhZ3NfcGVyX2dyb3VwOwkvKiAjIEZyYWdtZW50cyBwZXIgZ3JvdXAgKi8KKwlfX2xlMzIJc19pbm9kZXNfcGVyX2dyb3VwOwkvKiAjIElub2RlcyBwZXIgZ3JvdXAgKi8KKwlfX2xlMzIJc19tdGltZTsJCS8qIE1vdW50IHRpbWUgKi8KKy8qMzAqLwlfX2xlMzIJc193dGltZTsJCS8qIFdyaXRlIHRpbWUgKi8KKwlfX2xlMTYJc19tbnRfY291bnQ7CQkvKiBNb3VudCBjb3VudCAqLworCV9fbGUxNglzX21heF9tbnRfY291bnQ7CS8qIE1heGltYWwgbW91bnQgY291bnQgKi8KKwlfX2xlMTYJc19tYWdpYzsJCS8qIE1hZ2ljIHNpZ25hdHVyZSAqLworCV9fbGUxNglzX3N0YXRlOwkJLyogRmlsZSBzeXN0ZW0gc3RhdGUgKi8KKwlfX2xlMTYJc19lcnJvcnM7CQkvKiBCZWhhdmlvdXIgd2hlbiBkZXRlY3RpbmcgZXJyb3JzICovCisJX19sZTE2CXNfbWlub3JfcmV2X2xldmVsOwkvKiBtaW5vciByZXZpc2lvbiBsZXZlbCAqLworLyo0MCovCV9fbGUzMglzX2xhc3RjaGVjazsJCS8qIHRpbWUgb2YgbGFzdCBjaGVjayAqLworCV9fbGUzMglzX2NoZWNraW50ZXJ2YWw7CS8qIG1heC4gdGltZSBiZXR3ZWVuIGNoZWNrcyAqLworCV9fbGUzMglzX2NyZWF0b3Jfb3M7CQkvKiBPUyAqLworCV9fbGUzMglzX3Jldl9sZXZlbDsJCS8qIFJldmlzaW9uIGxldmVsICovCisvKjUwKi8JX19sZTE2CXNfZGVmX3Jlc3VpZDsJCS8qIERlZmF1bHQgdWlkIGZvciByZXNlcnZlZCBibG9ja3MgKi8KKwlfX2xlMTYJc19kZWZfcmVzZ2lkOwkJLyogRGVmYXVsdCBnaWQgZm9yIHJlc2VydmVkIGJsb2NrcyAqLworCS8qCisJICogVGhlc2UgZmllbGRzIGFyZSBmb3IgRVhUM19EWU5BTUlDX1JFViBzdXBlcmJsb2NrcyBvbmx5LgorCSAqCisJICogTm90ZTogdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgY29tcGF0aWJsZSBmZWF0dXJlIHNldCBhbmQKKwkgKiB0aGUgaW5jb21wYXRpYmxlIGZlYXR1cmUgc2V0IGlzIHRoYXQgaWYgdGhlcmUgaXMgYSBiaXQgc2V0CisJICogaW4gdGhlIGluY29tcGF0aWJsZSBmZWF0dXJlIHNldCB0aGF0IHRoZSBrZXJuZWwgZG9lc24ndAorCSAqIGtub3cgYWJvdXQsIGl0IHNob3VsZCByZWZ1c2UgdG8gbW91bnQgdGhlIGZpbGVzeXN0ZW0uCisJICoKKwkgKiBlMmZzY2sncyByZXF1aXJlbWVudHMgYXJlIG1vcmUgc3RyaWN0OyBpZiBpdCBkb2Vzbid0IGtub3cKKwkgKiBhYm91dCBhIGZlYXR1cmUgaW4gZWl0aGVyIHRoZSBjb21wYXRpYmxlIG9yIGluY29tcGF0aWJsZQorCSAqIGZlYXR1cmUgc2V0LCBpdCBtdXN0IGFib3J0IGFuZCBub3QgdHJ5IHRvIG1lZGRsZSB3aXRoCisJICogdGhpbmdzIGl0IGRvZXNuJ3QgdW5kZXJzdGFuZC4uLgorCSAqLworCV9fbGUzMglzX2ZpcnN0X2lubzsJCS8qIEZpcnN0IG5vbi1yZXNlcnZlZCBpbm9kZSAqLworCV9fbGUxNiAgIHNfaW5vZGVfc2l6ZTsJCS8qIHNpemUgb2YgaW5vZGUgc3RydWN0dXJlICovCisJX19sZTE2CXNfYmxvY2tfZ3JvdXBfbnI7CS8qIGJsb2NrIGdyb3VwICMgb2YgdGhpcyBzdXBlcmJsb2NrICovCisJX19sZTMyCXNfZmVhdHVyZV9jb21wYXQ7CS8qIGNvbXBhdGlibGUgZmVhdHVyZSBzZXQgKi8KKy8qNjAqLwlfX2xlMzIJc19mZWF0dXJlX2luY29tcGF0OwkvKiBpbmNvbXBhdGlibGUgZmVhdHVyZSBzZXQgKi8KKwlfX2xlMzIJc19mZWF0dXJlX3JvX2NvbXBhdDsJLyogcmVhZG9ubHktY29tcGF0aWJsZSBmZWF0dXJlIHNldCAqLworLyo2OCovCV9fdTgJc191dWlkWzE2XTsJCS8qIDEyOC1iaXQgdXVpZCBmb3Igdm9sdW1lICovCisvKjc4Ki8JY2hhcglzX3ZvbHVtZV9uYW1lWzE2XTsJLyogdm9sdW1lIG5hbWUgKi8KKy8qODgqLwljaGFyCXNfbGFzdF9tb3VudGVkWzY0XTsJLyogZGlyZWN0b3J5IHdoZXJlIGxhc3QgbW91bnRlZCAqLworLypDOCovCV9fbGUzMglzX2FsZ29yaXRobV91c2FnZV9iaXRtYXA7IC8qIEZvciBjb21wcmVzc2lvbiAqLworCS8qCisJICogUGVyZm9ybWFuY2UgaGludHMuICBEaXJlY3RvcnkgcHJlYWxsb2NhdGlvbiBzaG91bGQgb25seQorCSAqIGhhcHBlbiBpZiB0aGUgRVhUM19GRUFUVVJFX0NPTVBBVF9ESVJfUFJFQUxMT0MgZmxhZyBpcyBvbi4KKwkgKi8KKwlfX3U4CXNfcHJlYWxsb2NfYmxvY2tzOwkvKiBOciBvZiBibG9ja3MgdG8gdHJ5IHRvIHByZWFsbG9jYXRlKi8KKwlfX3U4CXNfcHJlYWxsb2NfZGlyX2Jsb2NrczsJLyogTnIgdG8gcHJlYWxsb2NhdGUgZm9yIGRpcnMgKi8KKwlfX3UxNglzX3Jlc2VydmVkX2dkdF9ibG9ja3M7CS8qIFBlciBncm91cCBkZXNjIGZvciBvbmxpbmUgZ3Jvd3RoICovCisJLyoKKwkgKiBKb3VybmFsaW5nIHN1cHBvcnQgdmFsaWQgaWYgRVhUM19GRUFUVVJFX0NPTVBBVF9IQVNfSk9VUk5BTCBzZXQuCisJICovCisvKkQwKi8JX191OAlzX2pvdXJuYWxfdXVpZFsxNl07CS8qIHV1aWQgb2Ygam91cm5hbCBzdXBlcmJsb2NrICovCisvKkUwKi8JX19sZTMyCXNfam91cm5hbF9pbnVtOwkJLyogaW5vZGUgbnVtYmVyIG9mIGpvdXJuYWwgZmlsZSAqLworCV9fbGUzMglzX2pvdXJuYWxfZGV2OwkJLyogZGV2aWNlIG51bWJlciBvZiBqb3VybmFsIGZpbGUgKi8KKwlfX2xlMzIJc19sYXN0X29ycGhhbjsJCS8qIHN0YXJ0IG9mIGxpc3Qgb2YgaW5vZGVzIHRvIGRlbGV0ZSAqLworCV9fbGUzMglzX2hhc2hfc2VlZFs0XTsJCS8qIEhUUkVFIGhhc2ggc2VlZCAqLworCV9fdTgJc19kZWZfaGFzaF92ZXJzaW9uOwkvKiBEZWZhdWx0IGhhc2ggdmVyc2lvbiB0byB1c2UgKi8KKwlfX3U4CXNfcmVzZXJ2ZWRfY2hhcl9wYWQ7CisJX191MTYJc19yZXNlcnZlZF93b3JkX3BhZDsKKwlfX2xlMzIJc19kZWZhdWx0X21vdW50X29wdHM7CisJX19sZTMyCXNfZmlyc3RfbWV0YV9iZzsgCS8qIEZpcnN0IG1ldGFibG9jayBibG9jayBncm91cCAqLworCV9fdTMyCXNfcmVzZXJ2ZWRbMTkwXTsJLyogUGFkZGluZyB0byB0aGUgZW5kIG9mIHRoZSBibG9jayAqLworfTsKKworI2lmZGVmIF9fS0VSTkVMX18KK3N0YXRpYyBpbmxpbmUgc3RydWN0IGV4dDNfc2JfaW5mbyAqIEVYVDNfU0Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlyZXR1cm4gc2ItPnNfZnNfaW5mbzsKK30KK3N0YXRpYyBpbmxpbmUgc3RydWN0IGV4dDNfaW5vZGVfaW5mbyAqRVhUM19JKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihpbm9kZSwgc3RydWN0IGV4dDNfaW5vZGVfaW5mbywgdmZzX2lub2RlKTsKK30KKyNlbHNlCisvKiBBc3N1bWUgdGhhdCB1c2VyIG1vZGUgcHJvZ3JhbXMgYXJlIHBhc3NpbmcgaW4gYW4gZXh0M2ZzIHN1cGVyYmxvY2ssIG5vdAorICogYSBrZXJuZWwgc3RydWN0IHN1cGVyX2Jsb2NrLiAgVGhpcyB3aWxsIGFsbG93IHVzIHRvIGNhbGwgdGhlIGZlYXR1cmUtdGVzdAorICogbWFjcm9zIGZyb20gdXNlciBsYW5kLiAqLworI2RlZmluZSBFWFQzX1NCKHNiKQkoc2IpCisjZW5kaWYKKworI2RlZmluZSBORVhUX09SUEhBTihpbm9kZSkgRVhUM19JKGlub2RlKS0+aV9kdGltZQorCisvKgorICogQ29kZXMgZm9yIG9wZXJhdGluZyBzeXN0ZW1zCisgKi8KKyNkZWZpbmUgRVhUM19PU19MSU5VWAkJMAorI2RlZmluZSBFWFQzX09TX0hVUkQJCTEKKyNkZWZpbmUgRVhUM19PU19NQVNJWAkJMgorI2RlZmluZSBFWFQzX09TX0ZSRUVCU0QJCTMKKyNkZWZpbmUgRVhUM19PU19MSVRFUwkJNAorCisvKgorICogUmV2aXNpb24gbGV2ZWxzCisgKi8KKyNkZWZpbmUgRVhUM19HT09EX09MRF9SRVYJMAkvKiBUaGUgZ29vZCBvbGQgKG9yaWdpbmFsKSBmb3JtYXQgKi8KKyNkZWZpbmUgRVhUM19EWU5BTUlDX1JFVgkxCS8qIFYyIGZvcm1hdCB3LyBkeW5hbWljIGlub2RlIHNpemVzICovCisKKyNkZWZpbmUgRVhUM19DVVJSRU5UX1JFVglFWFQzX0dPT0RfT0xEX1JFVgorI2RlZmluZSBFWFQzX01BWF9TVVBQX1JFVglFWFQzX0RZTkFNSUNfUkVWCisKKyNkZWZpbmUgRVhUM19HT09EX09MRF9JTk9ERV9TSVpFIDEyOAorCisvKgorICogRmVhdHVyZSBzZXQgZGVmaW5pdGlvbnMKKyAqLworCisjZGVmaW5lIEVYVDNfSEFTX0NPTVBBVF9GRUFUVVJFKHNiLG1hc2spCQkJXAorCSggRVhUM19TQihzYiktPnNfZXMtPnNfZmVhdHVyZV9jb21wYXQgJiBjcHVfdG9fbGUzMihtYXNrKSApCisjZGVmaW5lIEVYVDNfSEFTX1JPX0NPTVBBVF9GRUFUVVJFKHNiLG1hc2spCQkJXAorCSggRVhUM19TQihzYiktPnNfZXMtPnNfZmVhdHVyZV9yb19jb21wYXQgJiBjcHVfdG9fbGUzMihtYXNrKSApCisjZGVmaW5lIEVYVDNfSEFTX0lOQ09NUEFUX0ZFQVRVUkUoc2IsbWFzaykJCQlcCisJKCBFWFQzX1NCKHNiKS0+c19lcy0+c19mZWF0dXJlX2luY29tcGF0ICYgY3B1X3RvX2xlMzIobWFzaykgKQorI2RlZmluZSBFWFQzX1NFVF9DT01QQVRfRkVBVFVSRShzYixtYXNrKQkJCVwKKwlFWFQzX1NCKHNiKS0+c19lcy0+c19mZWF0dXJlX2NvbXBhdCB8PSBjcHVfdG9fbGUzMihtYXNrKQorI2RlZmluZSBFWFQzX1NFVF9ST19DT01QQVRfRkVBVFVSRShzYixtYXNrKQkJCVwKKwlFWFQzX1NCKHNiKS0+c19lcy0+c19mZWF0dXJlX3JvX2NvbXBhdCB8PSBjcHVfdG9fbGUzMihtYXNrKQorI2RlZmluZSBFWFQzX1NFVF9JTkNPTVBBVF9GRUFUVVJFKHNiLG1hc2spCQkJXAorCUVYVDNfU0Ioc2IpLT5zX2VzLT5zX2ZlYXR1cmVfaW5jb21wYXQgfD0gY3B1X3RvX2xlMzIobWFzaykKKyNkZWZpbmUgRVhUM19DTEVBUl9DT01QQVRfRkVBVFVSRShzYixtYXNrKQkJCVwKKwlFWFQzX1NCKHNiKS0+c19lcy0+c19mZWF0dXJlX2NvbXBhdCAmPSB+Y3B1X3RvX2xlMzIobWFzaykKKyNkZWZpbmUgRVhUM19DTEVBUl9ST19DT01QQVRfRkVBVFVSRShzYixtYXNrKQkJCVwKKwlFWFQzX1NCKHNiKS0+c19lcy0+c19mZWF0dXJlX3JvX2NvbXBhdCAmPSB+Y3B1X3RvX2xlMzIobWFzaykKKyNkZWZpbmUgRVhUM19DTEVBUl9JTkNPTVBBVF9GRUFUVVJFKHNiLG1hc2spCQkJXAorCUVYVDNfU0Ioc2IpLT5zX2VzLT5zX2ZlYXR1cmVfaW5jb21wYXQgJj0gfmNwdV90b19sZTMyKG1hc2spCisKKyNkZWZpbmUgRVhUM19GRUFUVVJFX0NPTVBBVF9ESVJfUFJFQUxMT0MJMHgwMDAxCisjZGVmaW5lIEVYVDNfRkVBVFVSRV9DT01QQVRfSU1BR0lDX0lOT0RFUwkweDAwMDIKKyNkZWZpbmUgRVhUM19GRUFUVVJFX0NPTVBBVF9IQVNfSk9VUk5BTAkJMHgwMDA0CisjZGVmaW5lIEVYVDNfRkVBVFVSRV9DT01QQVRfRVhUX0FUVFIJCTB4MDAwOAorI2RlZmluZSBFWFQzX0ZFQVRVUkVfQ09NUEFUX1JFU0laRV9JTk9ERQkweDAwMTAKKyNkZWZpbmUgRVhUM19GRUFUVVJFX0NPTVBBVF9ESVJfSU5ERVgJCTB4MDAyMAorCisjZGVmaW5lIEVYVDNfRkVBVFVSRV9ST19DT01QQVRfU1BBUlNFX1NVUEVSCTB4MDAwMQorI2RlZmluZSBFWFQzX0ZFQVRVUkVfUk9fQ09NUEFUX0xBUkdFX0ZJTEUJMHgwMDAyCisjZGVmaW5lIEVYVDNfRkVBVFVSRV9ST19DT01QQVRfQlRSRUVfRElSCTB4MDAwNAorCisjZGVmaW5lIEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9DT01QUkVTU0lPTgkweDAwMDEKKyNkZWZpbmUgRVhUM19GRUFUVVJFX0lOQ09NUEFUX0ZJTEVUWVBFCQkweDAwMDIKKyNkZWZpbmUgRVhUM19GRUFUVVJFX0lOQ09NUEFUX1JFQ09WRVIJCTB4MDAwNCAvKiBOZWVkcyByZWNvdmVyeSAqLworI2RlZmluZSBFWFQzX0ZFQVRVUkVfSU5DT01QQVRfSk9VUk5BTF9ERVYJMHgwMDA4IC8qIEpvdXJuYWwgZGV2aWNlICovCisjZGVmaW5lIEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9NRVRBX0JHCQkweDAwMTAKKworI2RlZmluZSBFWFQzX0ZFQVRVUkVfQ09NUEFUX1NVUFAJRVhUMl9GRUFUVVJFX0NPTVBBVF9FWFRfQVRUUgorI2RlZmluZSBFWFQzX0ZFQVRVUkVfSU5DT01QQVRfU1VQUAkoRVhUM19GRUFUVVJFX0lOQ09NUEFUX0ZJTEVUWVBFfCBcCisJCQkJCSBFWFQzX0ZFQVRVUkVfSU5DT01QQVRfUkVDT1ZFUnwgXAorCQkJCQkgRVhUM19GRUFUVVJFX0lOQ09NUEFUX01FVEFfQkcpCisjZGVmaW5lIEVYVDNfRkVBVFVSRV9ST19DT01QQVRfU1VQUAkoRVhUM19GRUFUVVJFX1JPX0NPTVBBVF9TUEFSU0VfU1VQRVJ8IFwKKwkJCQkJIEVYVDNfRkVBVFVSRV9ST19DT01QQVRfTEFSR0VfRklMRXwgXAorCQkJCQkgRVhUM19GRUFUVVJFX1JPX0NPTVBBVF9CVFJFRV9ESVIpCisKKy8qCisgKiBEZWZhdWx0IHZhbHVlcyBmb3IgdXNlciBhbmQvb3IgZ3JvdXAgdXNpbmcgcmVzZXJ2ZWQgYmxvY2tzCisgKi8KKyNkZWZpbmUJRVhUM19ERUZfUkVTVUlECQkwCisjZGVmaW5lCUVYVDNfREVGX1JFU0dJRAkJMAorCisvKgorICogRGVmYXVsdCBtb3VudCBvcHRpb25zCisgKi8KKyNkZWZpbmUgRVhUM19ERUZNX0RFQlVHCQkweDAwMDEKKyNkZWZpbmUgRVhUM19ERUZNX0JTREdST1VQUwkweDAwMDIKKyNkZWZpbmUgRVhUM19ERUZNX1hBVFRSX1VTRVIJMHgwMDA0CisjZGVmaW5lIEVYVDNfREVGTV9BQ0wJCTB4MDAwOAorI2RlZmluZSBFWFQzX0RFRk1fVUlEMTYJCTB4MDAxMAorI2RlZmluZSBFWFQzX0RFRk1fSk1PREUJCTB4MDA2MAorI2RlZmluZSBFWFQzX0RFRk1fSk1PREVfREFUQQkweDAwMjAKKyNkZWZpbmUgRVhUM19ERUZNX0pNT0RFX09SREVSRUQJMHgwMDQwCisjZGVmaW5lIEVYVDNfREVGTV9KTU9ERV9XQkFDSwkweDAwNjAKKworLyoKKyAqIFN0cnVjdHVyZSBvZiBhIGRpcmVjdG9yeSBlbnRyeQorICovCisjZGVmaW5lIEVYVDNfTkFNRV9MRU4gMjU1CisKK3N0cnVjdCBleHQzX2Rpcl9lbnRyeSB7CisJX19sZTMyCWlub2RlOwkJCS8qIElub2RlIG51bWJlciAqLworCV9fbGUxNglyZWNfbGVuOwkJLyogRGlyZWN0b3J5IGVudHJ5IGxlbmd0aCAqLworCV9fbGUxNgluYW1lX2xlbjsJCS8qIE5hbWUgbGVuZ3RoICovCisJY2hhcgluYW1lW0VYVDNfTkFNRV9MRU5dOwkvKiBGaWxlIG5hbWUgKi8KK307CisKKy8qCisgKiBUaGUgbmV3IHZlcnNpb24gb2YgdGhlIGRpcmVjdG9yeSBlbnRyeS4gIFNpbmNlIEVYVDMgc3RydWN0dXJlcyBhcmUKKyAqIHN0b3JlZCBpbiBpbnRlbCBieXRlIG9yZGVyLCBhbmQgdGhlIG5hbWVfbGVuIGZpZWxkIGNvdWxkIG5ldmVyIGJlCisgKiBiaWdnZXIgdGhhbiAyNTUgY2hhcnMsIGl0J3Mgc2FmZSB0byByZWNsYWltIHRoZSBleHRyYSBieXRlIGZvciB0aGUKKyAqIGZpbGVfdHlwZSBmaWVsZC4KKyAqLworc3RydWN0IGV4dDNfZGlyX2VudHJ5XzIgeworCV9fbGUzMglpbm9kZTsJCQkvKiBJbm9kZSBudW1iZXIgKi8KKwlfX2xlMTYJcmVjX2xlbjsJCS8qIERpcmVjdG9yeSBlbnRyeSBsZW5ndGggKi8KKwlfX3U4CW5hbWVfbGVuOwkJLyogTmFtZSBsZW5ndGggKi8KKwlfX3U4CWZpbGVfdHlwZTsKKwljaGFyCW5hbWVbRVhUM19OQU1FX0xFTl07CS8qIEZpbGUgbmFtZSAqLworfTsKKworLyoKKyAqIEV4dDMgZGlyZWN0b3J5IGZpbGUgdHlwZXMuICBPbmx5IHRoZSBsb3cgMyBiaXRzIGFyZSB1c2VkLiAgVGhlCisgKiBvdGhlciBiaXRzIGFyZSByZXNlcnZlZCBmb3Igbm93LgorICovCisjZGVmaW5lIEVYVDNfRlRfVU5LTk9XTgkJMAorI2RlZmluZSBFWFQzX0ZUX1JFR19GSUxFCTEKKyNkZWZpbmUgRVhUM19GVF9ESVIJCTIKKyNkZWZpbmUgRVhUM19GVF9DSFJERVYJCTMKKyNkZWZpbmUgRVhUM19GVF9CTEtERVYJCTQKKyNkZWZpbmUgRVhUM19GVF9GSUZPCQk1CisjZGVmaW5lIEVYVDNfRlRfU09DSwkJNgorI2RlZmluZSBFWFQzX0ZUX1NZTUxJTksJCTcKKworI2RlZmluZSBFWFQzX0ZUX01BWAkJOAorCisvKgorICogRVhUM19ESVJfUEFEIGRlZmluZXMgdGhlIGRpcmVjdG9yeSBlbnRyaWVzIGJvdW5kYXJpZXMKKyAqCisgKiBOT1RFOiBJdCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNAorICovCisjZGVmaW5lIEVYVDNfRElSX1BBRAkJCTQKKyNkZWZpbmUgRVhUM19ESVJfUk9VTkQJCQkoRVhUM19ESVJfUEFEIC0gMSkKKyNkZWZpbmUgRVhUM19ESVJfUkVDX0xFTihuYW1lX2xlbikJKCgobmFtZV9sZW4pICsgOCArIEVYVDNfRElSX1JPVU5EKSAmIFwKKwkJCQkJIH5FWFQzX0RJUl9ST1VORCkKKy8qCisgKiBIYXNoIFRyZWUgRGlyZWN0b3J5IGluZGV4aW5nCisgKiAoYykgRGFuaWVsIFBoaWxsaXBzLCAyMDAxCisgKi8KKworI2lmZGVmIENPTkZJR19FWFQzX0lOREVYCisgICNkZWZpbmUgaXNfZHgoZGlyKSAoRVhUM19IQVNfQ09NUEFUX0ZFQVRVUkUoZGlyLT5pX3NiLCBcCisJCQkJCSAgICAgIEVYVDNfRkVBVFVSRV9DT01QQVRfRElSX0lOREVYKSAmJiBcCisJCSAgICAgIChFWFQzX0koZGlyKS0+aV9mbGFncyAmIEVYVDNfSU5ERVhfRkwpKQorI2RlZmluZSBFWFQzX0RJUl9MSU5LX01BWChkaXIpICghaXNfZHgoZGlyKSAmJiAoZGlyKS0+aV9ubGluayA+PSBFWFQzX0xJTktfTUFYKQorI2RlZmluZSBFWFQzX0RJUl9MSU5LX0VNUFRZKGRpcikgKChkaXIpLT5pX25saW5rID09IDIgfHwgKGRpciktPmlfbmxpbmsgPT0gMSkKKyNlbHNlCisgICNkZWZpbmUgaXNfZHgoZGlyKSAwCisjZGVmaW5lIEVYVDNfRElSX0xJTktfTUFYKGRpcikgKChkaXIpLT5pX25saW5rID49IEVYVDNfTElOS19NQVgpCisjZGVmaW5lIEVYVDNfRElSX0xJTktfRU1QVFkoZGlyKSAoKGRpciktPmlfbmxpbmsgPT0gMikKKyNlbmRpZgorCisvKiBMZWdhbCB2YWx1ZXMgZm9yIHRoZSBkeF9yb290IGhhc2hfdmVyc2lvbiBmaWVsZDogKi8KKworI2RlZmluZSBEWF9IQVNIX0xFR0FDWQkJMAorI2RlZmluZSBEWF9IQVNIX0hBTEZfTUQ0CTEKKyNkZWZpbmUgRFhfSEFTSF9URUEJCTIKKworLyogaGFzaCBpbmZvIHN0cnVjdHVyZSB1c2VkIGJ5IHRoZSBkaXJlY3RvcnkgaGFzaCAqLworc3RydWN0IGR4X2hhc2hfaW5mbworeworCXUzMgkJaGFzaDsKKwl1MzIJCW1pbm9yX2hhc2g7CisJaW50CQloYXNoX3ZlcnNpb247CisJdTMyCQkqc2VlZDsKK307CisKKyNkZWZpbmUgRVhUM19IVFJFRV9FT0YJMHg3ZmZmZmZmZgorCisjaWZkZWYgX19LRVJORUxfXworLyoKKyAqIENvbnRyb2wgcGFyYW1ldGVycyB1c2VkIGJ5IGV4dDNfaHRyZWVfbmV4dF9ibG9jaworICovCisjZGVmaW5lIEhBU0hfTkJfQUxXQVlTCQkxCisKKworLyoKKyAqIERlc2NyaWJlIGFuIGlub2RlJ3MgZXhhY3QgbG9jYXRpb24gb24gZGlzayBhbmQgaW4gbWVtb3J5CisgKi8KK3N0cnVjdCBleHQzX2lsb2MKK3sKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OworCXVuc2lnbmVkIGxvbmcgYmxvY2tfZ3JvdXA7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBleHQzX2lub2RlICpleHQzX3Jhd19pbm9kZShzdHJ1Y3QgZXh0M19pbG9jICppbG9jKQoreworCXJldHVybiAoc3RydWN0IGV4dDNfaW5vZGUgKikgKGlsb2MtPmJoLT5iX2RhdGEgKyBpbG9jLT5vZmZzZXQpOworfQorCisvKgorICogVGhpcyBzdHJ1Y3R1cmUgaXMgc3R1ZmZlZCBpbnRvIHRoZSBzdHJ1Y3QgZmlsZSdzIHByaXZhdGVfZGF0YSBmaWVsZAorICogZm9yIGRpcmVjdG9yaWVzLiAgSXQgaXMgd2hlcmUgd2UgcHV0IGluZm9ybWF0aW9uIHNvIHRoYXQgd2UgY2FuIGRvCisgKiByZWFkZGlyIG9wZXJhdGlvbnMgaW4gaGFzaCB0cmVlIG9yZGVyLgorICovCitzdHJ1Y3QgZGlyX3ByaXZhdGVfaW5mbyB7CisJc3RydWN0IHJiX3Jvb3QJcm9vdDsKKwlzdHJ1Y3QgcmJfbm9kZQkqY3Vycl9ub2RlOworCXN0cnVjdCBmbmFtZQkqZXh0cmFfZm5hbWU7CisJbG9mZl90CQlsYXN0X3BvczsKKwlfX3UzMgkJY3Vycl9oYXNoOworCV9fdTMyCQljdXJyX21pbm9yX2hhc2g7CisJX191MzIJCW5leHRfaGFzaDsKK307CisKKy8qCisgKiBTcGVjaWFsIGVycm9yIHJldHVybiBjb2RlIG9ubHkgdXNlZCBieSBkeF9wcm9iZSgpIGFuZCBpdHMgY2FsbGVycy4KKyAqLworI2RlZmluZSBFUlJfQkFEX0RYX0RJUgktNzUwMDAKKworLyoKKyAqIEZ1bmN0aW9uIHByb3RvdHlwZXMKKyAqLworCisvKgorICogT2ssIHRoZXNlIGRlY2xhcmF0aW9ucyBhcmUgYWxzbyBpbiA8bGludXgva2VybmVsLmg+IGJ1dCBub25lIG9mIHRoZQorICogZXh0MyBzb3VyY2UgcHJvZ3JhbXMgbmVlZHMgdG8gaW5jbHVkZSBpdCBzbyB0aGV5IGFyZSBkdXBsaWNhdGVkIGhlcmUuCisgKi8KKyMgZGVmaW5lIE5PUkVUX1RZUEUgICAgLyoqLworIyBkZWZpbmUgQVRUUklCX05PUkVUICBfX2F0dHJpYnV0ZV9fKChub3JldHVybikpCisjIGRlZmluZSBOT1JFVF9BTkQgICAgIG5vcmV0dXJuLAorCisvKiBiYWxsb2MuYyAqLworZXh0ZXJuIGludCBleHQzX2JnX2hhc19zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgZ3JvdXApOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZXh0M19iZ19udW1fZ2RiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBncm91cCk7CitleHRlcm4gaW50IGV4dDNfbmV3X2Jsb2NrIChoYW5kbGVfdCAqLCBzdHJ1Y3QgaW5vZGUgKiwgdW5zaWduZWQgbG9uZywgaW50ICopOworZXh0ZXJuIHZvaWQgZXh0M19mcmVlX2Jsb2NrcyAoaGFuZGxlX3QgKiwgc3RydWN0IGlub2RlICosIHVuc2lnbmVkIGxvbmcsCisJCQkgICAgICB1bnNpZ25lZCBsb25nKTsKK2V4dGVybiB2b2lkIGV4dDNfZnJlZV9ibG9ja3Nfc2IgKGhhbmRsZV90ICosIHN0cnVjdCBzdXBlcl9ibG9jayAqLAorCQkJCSB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBpbnQgKik7CitleHRlcm4gdW5zaWduZWQgbG9uZyBleHQzX2NvdW50X2ZyZWVfYmxvY2tzIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CitleHRlcm4gdm9pZCBleHQzX2NoZWNrX2Jsb2Nrc19iaXRtYXAgKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKK2V4dGVybiBzdHJ1Y3QgZXh0M19ncm91cF9kZXNjICogZXh0M19nZXRfZ3JvdXBfZGVzYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzYiwKKwkJCQkJCSAgICB1bnNpZ25lZCBpbnQgYmxvY2tfZ3JvdXAsCisJCQkJCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqIGJoKTsKK2V4dGVybiBpbnQgZXh0M19zaG91bGRfcmV0cnlfYWxsb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50ICpyZXRyaWVzKTsKK2V4dGVybiB2b2lkIGV4dDNfaW5pdF9ibG9ja19hbGxvY19pbmZvKHN0cnVjdCBpbm9kZSAqKTsKK2V4dGVybiB2b2lkIGV4dDNfcnN2X3dpbmRvd19hZGQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGV4dDNfcmVzZXJ2ZV93aW5kb3dfbm9kZSAqcnN2KTsKKworLyogZGlyLmMgKi8KK2V4dGVybiBpbnQgZXh0M19jaGVja19kaXJfZW50cnkoY29uc3QgY2hhciAqLCBzdHJ1Y3QgaW5vZGUgKiwKKwkJCQlzdHJ1Y3QgZXh0M19kaXJfZW50cnlfMiAqLAorCQkJCXN0cnVjdCBidWZmZXJfaGVhZCAqLCB1bnNpZ25lZCBsb25nKTsKK2V4dGVybiBpbnQgZXh0M19odHJlZV9zdG9yZV9kaXJlbnQoc3RydWN0IGZpbGUgKmRpcl9maWxlLCBfX3UzMiBoYXNoLAorCQkJCSAgICBfX3UzMiBtaW5vcl9oYXNoLAorCQkJCSAgICBzdHJ1Y3QgZXh0M19kaXJfZW50cnlfMiAqZGlyZW50KTsKK2V4dGVybiB2b2lkIGV4dDNfaHRyZWVfZnJlZV9kaXJfaW5mbyhzdHJ1Y3QgZGlyX3ByaXZhdGVfaW5mbyAqcCk7CisKKy8qIGZzeW5jLmMgKi8KK2V4dGVybiBpbnQgZXh0M19zeW5jX2ZpbGUgKHN0cnVjdCBmaWxlICosIHN0cnVjdCBkZW50cnkgKiwgaW50KTsKKworLyogaGFzaC5jICovCitleHRlcm4gaW50IGV4dDNmc19kaXJoYXNoKGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4sIHN0cnVjdAorCQkJICBkeF9oYXNoX2luZm8gKmhpbmZvKTsKKworLyogaWFsbG9jLmMgKi8KK2V4dGVybiBzdHJ1Y3QgaW5vZGUgKiBleHQzX25ld19pbm9kZSAoaGFuZGxlX3QgKiwgc3RydWN0IGlub2RlICosIGludCk7CitleHRlcm4gdm9pZCBleHQzX2ZyZWVfaW5vZGUgKGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqKTsKK2V4dGVybiBzdHJ1Y3QgaW5vZGUgKiBleHQzX29ycGhhbl9nZXQgKHN0cnVjdCBzdXBlcl9ibG9jayAqLCB1bnNpZ25lZCBsb25nKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGV4dDNfY291bnRfZnJlZV9pbm9kZXMgKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGV4dDNfY291bnRfZGlycyAoc3RydWN0IHN1cGVyX2Jsb2NrICopOworZXh0ZXJuIHZvaWQgZXh0M19jaGVja19pbm9kZXNfYml0bWFwIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CitleHRlcm4gdW5zaWduZWQgbG9uZyBleHQzX2NvdW50X2ZyZWUgKHN0cnVjdCBidWZmZXJfaGVhZCAqLCB1bnNpZ25lZCk7CisKKworLyogaW5vZGUuYyAqLworZXh0ZXJuIGludCBleHQzX2ZvcmdldChoYW5kbGVfdCAqLCBpbnQsIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwgaW50KTsKK2V4dGVybiBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBleHQzX2dldGJsayAoaGFuZGxlX3QgKiwgc3RydWN0IGlub2RlICosIGxvbmcsIGludCwgaW50ICopOworZXh0ZXJuIHN0cnVjdCBidWZmZXJfaGVhZCAqIGV4dDNfYnJlYWQgKGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqLCBpbnQsIGludCwgaW50ICopOworCitleHRlcm4gdm9pZCBleHQzX3JlYWRfaW5vZGUgKHN0cnVjdCBpbm9kZSAqKTsKK2V4dGVybiBpbnQgIGV4dDNfd3JpdGVfaW5vZGUgKHN0cnVjdCBpbm9kZSAqLCBpbnQpOworZXh0ZXJuIGludCAgZXh0M19zZXRhdHRyIChzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBpYXR0ciAqKTsKK2V4dGVybiB2b2lkIGV4dDNfZGVsZXRlX2lub2RlIChzdHJ1Y3QgaW5vZGUgKik7CitleHRlcm4gaW50ICBleHQzX3N5bmNfaW5vZGUgKGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqKTsKK2V4dGVybiB2b2lkIGV4dDNfZGlzY2FyZF9yZXNlcnZhdGlvbiAoc3RydWN0IGlub2RlICopOworZXh0ZXJuIHZvaWQgZXh0M19kaXJ0eV9pbm9kZShzdHJ1Y3QgaW5vZGUgKik7CitleHRlcm4gaW50IGV4dDNfY2hhbmdlX2lub2RlX2pvdXJuYWxfZmxhZyhzdHJ1Y3QgaW5vZGUgKiwgaW50KTsKK2V4dGVybiBpbnQgZXh0M19nZXRfaW5vZGVfbG9jKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZXh0M19pbG9jICopOworZXh0ZXJuIHZvaWQgZXh0M190cnVuY2F0ZSAoc3RydWN0IGlub2RlICopOworZXh0ZXJuIHZvaWQgZXh0M19zZXRfaW5vZGVfZmxhZ3Moc3RydWN0IGlub2RlICopOworZXh0ZXJuIHZvaWQgZXh0M19zZXRfYW9wcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKKworLyogaW9jdGwuYyAqLworZXh0ZXJuIGludCBleHQzX2lvY3RsIChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgaW50LAorCQkgICAgICAgdW5zaWduZWQgbG9uZyk7CisKKy8qIG5hbWVpLmMgKi8KK2V4dGVybiBpbnQgZXh0M19vcnBoYW5fYWRkKGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqKTsKK2V4dGVybiBpbnQgZXh0M19vcnBoYW5fZGVsKGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqKTsKK2V4dGVybiBpbnQgZXh0M19odHJlZV9maWxsX3RyZWUoc3RydWN0IGZpbGUgKmRpcl9maWxlLCBfX3UzMiBzdGFydF9oYXNoLAorCQkJCV9fdTMyIHN0YXJ0X21pbm9yX2hhc2gsIF9fdTMyICpuZXh0X2hhc2gpOworCisvKiByZXNpemUuYyAqLworZXh0ZXJuIGludCBleHQzX2dyb3VwX2FkZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQkJCXN0cnVjdCBleHQzX25ld19ncm91cF9kYXRhICppbnB1dCk7CitleHRlcm4gaW50IGV4dDNfZ3JvdXBfZXh0ZW5kKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCQkJc3RydWN0IGV4dDNfc3VwZXJfYmxvY2sgKmVzLAorCQkJCXVuc2lnbmVkIGxvbmcgbl9ibG9ja3NfY291bnQpOworCisvKiBzdXBlci5jICovCitleHRlcm4gdm9pZCBleHQzX2Vycm9yIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIC4uLikKKwlfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDMsIDQpKSk7CitleHRlcm4gdm9pZCBfX2V4dDNfc3RkX2Vycm9yIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgY29uc3QgY2hhciAqLCBpbnQpOworZXh0ZXJuIHZvaWQgZXh0M19hYm9ydCAoc3RydWN0IHN1cGVyX2Jsb2NrICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCAuLi4pCisJX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAzLCA0KSkpOworZXh0ZXJuIHZvaWQgZXh0M193YXJuaW5nIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIC4uLikKKwlfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDMsIDQpKSk7CitleHRlcm4gdm9pZCBleHQzX3VwZGF0ZV9keW5hbWljX3JldiAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CisKKyNkZWZpbmUgZXh0M19zdGRfZXJyb3Ioc2IsIGVycm5vKQkJCQlcCitkbyB7CQkJCQkJCQlcCisJaWYgKChlcnJubykpCQkJCQkJXAorCQlfX2V4dDNfc3RkX2Vycm9yKChzYiksIF9fRlVOQ1RJT05fXywgKGVycm5vKSk7CVwKK30gd2hpbGUgKDApCisKKy8qCisgKiBJbm9kZXMgYW5kIGZpbGVzIG9wZXJhdGlvbnMKKyAqLworCisvKiBkaXIuYyAqLworZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXh0M19kaXJfb3BlcmF0aW9uczsKKworLyogZmlsZS5jICovCitleHRlcm4gc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZXh0M19maWxlX2lub2RlX29wZXJhdGlvbnM7CitleHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBleHQzX2ZpbGVfb3BlcmF0aW9uczsKKworLyogbmFtZWkuYyAqLworZXh0ZXJuIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGV4dDNfZGlyX2lub2RlX29wZXJhdGlvbnM7CitleHRlcm4gc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZXh0M19zcGVjaWFsX2lub2RlX29wZXJhdGlvbnM7CisKKy8qIHN5bWxpbmsuYyAqLworZXh0ZXJuIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGV4dDNfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zOworZXh0ZXJuIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGV4dDNfZmFzdF9zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7CisKKworI2VuZGlmCS8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmCS8qIF9MSU5VWF9FWFQzX0ZTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXh0M19mc19pLmggYi9pbmNsdWRlL2xpbnV4L2V4dDNfZnNfaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5MTRmN2IKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2V4dDNfZnNfaS5oCkBAIC0wLDAgKzEsMTM4IEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvbGludXgvZXh0M19mc19pLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUKKyAqIFJlbXkgQ2FyZCAoY2FyZEBtYXNpLmlicC5mcikKKyAqIExhYm9yYXRvaXJlIE1BU0kgLSBJbnN0aXR1dCBCbGFpc2UgUGFzY2FsCisgKiBVbml2ZXJzaXRlIFBpZXJyZSBldCBNYXJpZSBDdXJpZSAoUGFyaXMgVkkpCisgKgorICogIGZyb20KKyAqCisgKiAgbGludXgvaW5jbHVkZS9saW51eC9taW5peF9mc19pLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyICBMaW51cyBUb3J2YWxkcworICovCisKKyNpZm5kZWYgX0xJTlVYX0VYVDNfRlNfSQorI2RlZmluZSBfTElOVVhfRVhUM19GU19JCisKKyNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgorI2luY2x1ZGUgPGxpbnV4L3JidHJlZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcWxvY2suaD4KKworc3RydWN0IGV4dDNfcmVzZXJ2ZV93aW5kb3cgeworCV9fdTMyCQkJX3Jzdl9zdGFydDsJLyogRmlyc3QgYnl0ZSByZXNlcnZlZCAqLworCV9fdTMyCQkJX3Jzdl9lbmQ7CS8qIExhc3QgYnl0ZSByZXNlcnZlZCBvciAwICovCit9OworCitzdHJ1Y3QgZXh0M19yZXNlcnZlX3dpbmRvd19ub2RlIHsKKwlzdHJ1Y3QgcmJfbm9kZQkgCXJzdl9ub2RlOworCV9fdTMyCQkJcnN2X2dvYWxfc2l6ZTsKKwlfX3UzMgkJCXJzdl9hbGxvY19oaXQ7CisJc3RydWN0IGV4dDNfcmVzZXJ2ZV93aW5kb3cJcnN2X3dpbmRvdzsKK307CisKK3N0cnVjdCBleHQzX2Jsb2NrX2FsbG9jX2luZm8geworCS8qIGluZm9ybWF0aW9uIGFib3V0IHJlc2VydmF0aW9uIHdpbmRvdyAqLworCXN0cnVjdCBleHQzX3Jlc2VydmVfd2luZG93X25vZGUJcnN2X3dpbmRvd19ub2RlOworCS8qCisJICogd2FzIGlfbmV4dF9hbGxvY19ibG9jayBpbiBleHQzX2lub2RlX2luZm8KKwkgKiBpcyB0aGUgbG9naWNhbCAoZmlsZS1yZWxhdGl2ZSkgbnVtYmVyIG9mIHRoZQorCSAqIG1vc3QtcmVjZW50bHktYWxsb2NhdGVkIGJsb2NrIGluIHRoaXMgZmlsZS4KKwkgKiBXZSB1c2UgdGhpcyBmb3IgZGV0ZWN0aW5nIGxpbmVhcmx5IGFzY2VuZGluZyBhbGxvY2F0aW9uIHJlcXVlc3RzLgorCSAqLworCV9fdTMyICAgICAgICAgICAgICAgICAgIGxhc3RfYWxsb2NfbG9naWNhbF9ibG9jazsKKwkvKgorCSAqIFdhcyBpX25leHRfYWxsb2NfZ29hbCBpbiBleHQzX2lub2RlX2luZm8KKwkgKiBpcyB0aGUgKnBoeXNpY2FsKiBjb21wYW5pb24gdG8gaV9uZXh0X2FsbG9jX2Jsb2NrLgorCSAqIGl0IHRoZSB0aGUgcGh5c2ljYWwgYmxvY2sgbnVtYmVyIG9mIHRoZSBibG9jayB3aGljaCB3YXMgbW9zdC1yZWNlbnRsCisJICogYWxsb2NhdGVkIHRvIHRoaXMgZmlsZS4gIFRoaXMgZ2l2ZSB1cyB0aGUgZ29hbCAodGFyZ2V0KSBmb3IgdGhlIG5leHQKKwkgKiBhbGxvY2F0aW9uIHdoZW4gd2UgZGV0ZWN0IGxpbmVhcmx5IGFzY2VuZGluZyByZXF1ZXN0cy4KKwkgKi8KKwlfX3UzMiAgICAgICAgICAgICAgICAgICBsYXN0X2FsbG9jX3BoeXNpY2FsX2Jsb2NrOworfTsKKworI2RlZmluZSByc3Zfc3RhcnQgcnN2X3dpbmRvdy5fcnN2X3N0YXJ0CisjZGVmaW5lIHJzdl9lbmQgcnN2X3dpbmRvdy5fcnN2X2VuZAorCisvKgorICogdGhpcmQgZXh0ZW5kZWQgZmlsZSBzeXN0ZW0gaW5vZGUgZGF0YSBpbiBtZW1vcnkKKyAqLworc3RydWN0IGV4dDNfaW5vZGVfaW5mbyB7CisJX19sZTMyCWlfZGF0YVsxNV07CS8qIHVuY29udmVydGVkICovCisJX191MzIJaV9mbGFnczsKKyNpZmRlZiBFWFQzX0ZSQUdNRU5UUworCV9fdTMyCWlfZmFkZHI7CisJX191OAlpX2ZyYWdfbm87CisJX191OAlpX2ZyYWdfc2l6ZTsKKyNlbmRpZgorCV9fdTMyCWlfZmlsZV9hY2w7CisJX191MzIJaV9kaXJfYWNsOworCV9fdTMyCWlfZHRpbWU7CisKKwkvKgorCSAqIGlfYmxvY2tfZ3JvdXAgaXMgdGhlIG51bWJlciBvZiB0aGUgYmxvY2sgZ3JvdXAgd2hpY2ggY29udGFpbnMKKwkgKiB0aGlzIGZpbGUncyBpbm9kZS4gIENvbnN0YW50IGFjcm9zcyB0aGUgbGlmZXRpbWUgb2YgdGhlIGlub2RlLAorCSAqIGl0IGlzIHVlZCBmb3IgbWFraW5nIGJsb2NrIGFsbG9jYXRpb24gZGVjaXNpb25zIC0gd2UgdHJ5IHRvCisJICogcGxhY2UgYSBmaWxlJ3MgZGF0YSBibG9ja3MgbmVhciBpdHMgaW5vZGUgYmxvY2ssIGFuZCBuZXcgaW5vZGVzCisJICogbmVhciB0byB0aGVpciBwYXJlbnQgZGlyZWN0b3J5J3MgaW5vZGUuCisJICovCisJX191MzIJaV9ibG9ja19ncm91cDsKKwlfX3UzMglpX3N0YXRlOwkJLyogRHluYW1pYyBzdGF0ZSBmbGFncyBmb3IgZXh0MyAqLworCisJLyogYmxvY2sgcmVzZXJ2YXRpb24gaW5mbyAqLworCXN0cnVjdCBleHQzX2Jsb2NrX2FsbG9jX2luZm8gKmlfYmxvY2tfYWxsb2NfaW5mbzsKKworCV9fdTMyCWlfZGlyX3N0YXJ0X2xvb2t1cDsKKyNpZmRlZiBDT05GSUdfRVhUM19GU19YQVRUUgorCS8qCisJICogRXh0ZW5kZWQgYXR0cmlidXRlcyBjYW4gYmUgcmVhZCBpbmRlcGVuZGVudGx5IG9mIHRoZSBtYWluIGZpbGUKKwkgKiBkYXRhLiBUYWtpbmcgaV9zZW0gZXZlbiB3aGVuIHJlYWRpbmcgd291bGQgY2F1c2UgY29udGVudGlvbgorCSAqIGJldHdlZW4gcmVhZGVycyBvZiBFQXMgYW5kIHdyaXRlcnMgb2YgcmVndWxhciBmaWxlIGRhdGEsIHNvCisJICogaW5zdGVhZCB3ZSBzeW5jaHJvbml6ZSBvbiB4YXR0cl9zZW0gd2hlbiByZWFkaW5nIG9yIGNoYW5naW5nCisJICogRUFzLgorCSAqLworCXN0cnVjdCByd19zZW1hcGhvcmUgeGF0dHJfc2VtOworI2VuZGlmCisjaWZkZWYgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMCisJc3RydWN0IHBvc2l4X2FjbAkqaV9hY2w7CisJc3RydWN0IHBvc2l4X2FjbAkqaV9kZWZhdWx0X2FjbDsKKyNlbmRpZgorCisJc3RydWN0IGxpc3RfaGVhZCBpX29ycGhhbjsJLyogdW5saW5rZWQgYnV0IG9wZW4gaW5vZGVzICovCisKKwkvKgorCSAqIGlfZGlza3NpemUga2VlcHMgdHJhY2sgb2Ygd2hhdCB0aGUgaW5vZGUgc2l6ZSBpcyBPTiBESVNLLCBub3QKKwkgKiBpbiBtZW1vcnkuICBEdXJpbmcgdHJ1bmNhdGUsIGlfc2l6ZSBpcyBzZXQgdG8gdGhlIG5ldyBzaXplIGJ5CisJICogdGhlIFZGUyBwcmlvciB0byBjYWxsaW5nIGV4dDNfdHJ1bmNhdGUoKSwgYnV0IHRoZSBmaWxlc3lzdGVtIHdvbid0CisJICogc2V0IGlfZGlza3NpemUgdG8gMCB1bnRpbCB0aGUgdHJ1bmNhdGUgaXMgYWN0dWFsbHkgdW5kZXIgd2F5LgorCSAqCisJICogVGhlIGludGVudCBpcyB0aGF0IGlfZGlza3NpemUgYWx3YXlzIHJlcHJlc2VudHMgdGhlIGJsb2NrcyB3aGljaAorCSAqIGFyZSB1c2VkIGJ5IHRoaXMgZmlsZS4gIFRoaXMgYWxsb3dzIHJlY292ZXJ5IHRvIHJlc3RhcnQgdHJ1bmNhdGUKKwkgKiBvbiBvcnBoYW5zIGlmIHdlIGNyYXNoIGR1cmluZyB0cnVuY2F0ZS4gIFdlIGFjdHVhbGx5IHdyaXRlIGlfZGlza3NpemUKKwkgKiBpbnRvIHRoZSBvbi1kaXNrIGlub2RlIHdoZW4gd3JpdGluZyBpbm9kZXMgb3V0LCBpbnN0ZWFkIG9mIGlfc2l6ZS4KKwkgKgorCSAqIFRoZSBvbmx5IHRpbWUgd2hlbiBpX2Rpc2tzaXplIGFuZCBpX3NpemUgbWF5IGJlIGRpZmZlcmVudCBpcyB3aGVuCisJICogYSB0cnVuY2F0ZSBpcyBpbiBwcm9ncmVzcy4gIFRoZSBvbmx5IHRoaW5ncyB3aGljaCBjaGFuZ2UgaV9kaXNrc2l6ZQorCSAqIGFyZSBleHQzX2dldF9ibG9jayAoZ3Jvd3RoKSBhbmQgZXh0M190cnVuY2F0ZSAoc2hyaW5rdGgpLgorCSAqLworCWxvZmZfdAlpX2Rpc2tzaXplOworCisJLyogb24tZGlzayBhZGRpdGlvbmFsIGxlbmd0aCAqLworCV9fdTE2IGlfZXh0cmFfaXNpemU7CisKKwkvKgorCSAqIHRydW5jYXRlX3NlbSBpcyBmb3Igc2VyaWFsaXNpbmcgZXh0M190cnVuY2F0ZSgpIGFnYWluc3QKKwkgKiBleHQzX2dldGJsb2NrKCkuICBJbiB0aGUgMi40IGV4dDIgZGVzaWduLCBncmVhdCBjaHVua3Mgb2YgaW5vZGUncworCSAqIGRhdGEgdHJlZSBhcmUgY2hvcHBlZCBvZmYgZHVyaW5nIHRydW5jYXRlLiBXZSBjYW4ndCBkbyB0aGF0IGluCisJICogZXh0MyBiZWNhdXNlIHdoZW5ldmVyIHdlIHBlcmZvcm0gaW50ZXJtZWRpYXRlIGNvbW1pdHMgZHVyaW5nCisJICogdHJ1bmNhdGUsIHRoZSBpbm9kZSBhbmQgYWxsIHRoZSBtZXRhZGF0YSBibG9ja3MgKm11c3QqIGJlIGluIGEKKwkgKiBjb25zaXN0ZW50IHN0YXRlIHdoaWNoIGFsbG93cyB0cnVuY2F0aW9uIG9mIHRoZSBvcnBoYW5zIHRvIHJlc3RhcnQKKwkgKiBkdXJpbmcgcmVjb3ZlcnkuICBIZW5jZSB3ZSBtdXN0IGZpeCB0aGUgZ2V0X2Jsb2NrLXZzLXRydW5jYXRlIHJhY2UKKwkgKiBieSBvdGhlciBtZWFucywgc28gd2UgaGF2ZSB0cnVuY2F0ZV9zZW0uCisJICovCisJc3RydWN0IHNlbWFwaG9yZSB0cnVuY2F0ZV9zZW07CisJc3RydWN0IGlub2RlIHZmc19pbm9kZTsKK307CisKKyNlbmRpZgkvKiBfTElOVVhfRVhUM19GU19JICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2V4dDNfZnNfc2IuaCBiL2luY2x1ZGUvbGludXgvZXh0M19mc19zYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2MTMwOWMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2V4dDNfZnNfc2IuaApAQCAtMCwwICsxLDgzIEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvbGludXgvZXh0M19mc19zYi5oCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1CisgKiBSZW15IENhcmQgKGNhcmRAbWFzaS5pYnAuZnIpCisgKiBMYWJvcmF0b2lyZSBNQVNJIC0gSW5zdGl0dXQgQmxhaXNlIFBhc2NhbAorICogVW5pdmVyc2l0ZSBQaWVycmUgZXQgTWFyaWUgQ3VyaWUgKFBhcmlzIFZJKQorICoKKyAqICBmcm9tCisgKgorICogIGxpbnV4L2luY2x1ZGUvbGludXgvbWluaXhfZnNfc2IuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIgIExpbnVzIFRvcnZhbGRzCisgKi8KKworI2lmbmRlZiBfTElOVVhfRVhUM19GU19TQgorI2RlZmluZSBfTElOVVhfRVhUM19GU19TQgorCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Jsb2NrZ3JvdXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmNwdV9jb3VudGVyLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KKworLyoKKyAqIHRoaXJkIGV4dGVuZGVkLWZzIHN1cGVyLWJsb2NrIGRhdGEgaW4gbWVtb3J5CisgKi8KK3N0cnVjdCBleHQzX3NiX2luZm8geworCXVuc2lnbmVkIGxvbmcgc19mcmFnX3NpemU7CS8qIFNpemUgb2YgYSBmcmFnbWVudCBpbiBieXRlcyAqLworCXVuc2lnbmVkIGxvbmcgc19mcmFnc19wZXJfYmxvY2s7LyogTnVtYmVyIG9mIGZyYWdtZW50cyBwZXIgYmxvY2sgKi8KKwl1bnNpZ25lZCBsb25nIHNfaW5vZGVzX3Blcl9ibG9jazsvKiBOdW1iZXIgb2YgaW5vZGVzIHBlciBibG9jayAqLworCXVuc2lnbmVkIGxvbmcgc19mcmFnc19wZXJfZ3JvdXA7LyogTnVtYmVyIG9mIGZyYWdtZW50cyBpbiBhIGdyb3VwICovCisJdW5zaWduZWQgbG9uZyBzX2Jsb2Nrc19wZXJfZ3JvdXA7LyogTnVtYmVyIG9mIGJsb2NrcyBpbiBhIGdyb3VwICovCisJdW5zaWduZWQgbG9uZyBzX2lub2Rlc19wZXJfZ3JvdXA7LyogTnVtYmVyIG9mIGlub2RlcyBpbiBhIGdyb3VwICovCisJdW5zaWduZWQgbG9uZyBzX2l0Yl9wZXJfZ3JvdXA7CS8qIE51bWJlciBvZiBpbm9kZSB0YWJsZSBibG9ja3MgcGVyIGdyb3VwICovCisJdW5zaWduZWQgbG9uZyBzX2dkYl9jb3VudDsJLyogTnVtYmVyIG9mIGdyb3VwIGRlc2NyaXB0b3IgYmxvY2tzICovCisJdW5zaWduZWQgbG9uZyBzX2Rlc2NfcGVyX2Jsb2NrOwkvKiBOdW1iZXIgb2YgZ3JvdXAgZGVzY3JpcHRvcnMgcGVyIGJsb2NrICovCisJdW5zaWduZWQgbG9uZyBzX2dyb3Vwc19jb3VudDsJLyogTnVtYmVyIG9mIGdyb3VwcyBpbiB0aGUgZnMgKi8KKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBzX3NiaDsJLyogQnVmZmVyIGNvbnRhaW5pbmcgdGhlIHN1cGVyIGJsb2NrICovCisJc3RydWN0IGV4dDNfc3VwZXJfYmxvY2sgKiBzX2VzOwkvKiBQb2ludGVyIHRvIHRoZSBzdXBlciBibG9jayBpbiB0aGUgYnVmZmVyICovCisJc3RydWN0IGJ1ZmZlcl9oZWFkICoqIHNfZ3JvdXBfZGVzYzsKKwl1bnNpZ25lZCBsb25nICBzX21vdW50X29wdDsKKwl1aWRfdCBzX3Jlc3VpZDsKKwlnaWRfdCBzX3Jlc2dpZDsKKwl1bnNpZ25lZCBzaG9ydCBzX21vdW50X3N0YXRlOworCXVuc2lnbmVkIHNob3J0IHNfcGFkOworCWludCBzX2FkZHJfcGVyX2Jsb2NrX2JpdHM7CisJaW50IHNfZGVzY19wZXJfYmxvY2tfYml0czsKKwlpbnQgc19pbm9kZV9zaXplOworCWludCBzX2ZpcnN0X2lubzsKKwlzcGlubG9ja190IHNfbmV4dF9nZW5fbG9jazsKKwl1MzIgc19uZXh0X2dlbmVyYXRpb247CisJdTMyIHNfaGFzaF9zZWVkWzRdOworCWludCBzX2RlZl9oYXNoX3ZlcnNpb247CisJc3RydWN0IHBlcmNwdV9jb3VudGVyIHNfZnJlZWJsb2Nrc19jb3VudGVyOworCXN0cnVjdCBwZXJjcHVfY291bnRlciBzX2ZyZWVpbm9kZXNfY291bnRlcjsKKwlzdHJ1Y3QgcGVyY3B1X2NvdW50ZXIgc19kaXJzX2NvdW50ZXI7CisJc3RydWN0IGJsb2NrZ3JvdXBfbG9jayBzX2Jsb2NrZ3JvdXBfbG9jazsKKworCS8qIHJvb3Qgb2YgdGhlIHBlciBmcyByZXNlcnZhdGlvbiB3aW5kb3cgdHJlZSAqLworCXNwaW5sb2NrX3Qgc19yc3Zfd2luZG93X2xvY2s7CisJc3RydWN0IHJiX3Jvb3Qgc19yc3Zfd2luZG93X3Jvb3Q7CisJc3RydWN0IGV4dDNfcmVzZXJ2ZV93aW5kb3dfbm9kZSBzX3Jzdl93aW5kb3dfaGVhZDsKKworCS8qIEpvdXJuYWxpbmcgKi8KKwlzdHJ1Y3QgaW5vZGUgKiBzX2pvdXJuYWxfaW5vZGU7CisJc3RydWN0IGpvdXJuYWxfcyAqIHNfam91cm5hbDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHNfb3JwaGFuOworCXVuc2lnbmVkIGxvbmcgc19jb21taXRfaW50ZXJ2YWw7CisJc3RydWN0IGJsb2NrX2RldmljZSAqam91cm5hbF9iZGV2OworI2lmZGVmIENPTkZJR19KQkRfREVCVUcKKwlzdHJ1Y3QgdGltZXJfbGlzdCB0dXJuX3JvX3RpbWVyOwkvKiBGb3IgdHVybmluZyByZWFkLW9ubHkgKGNyYXNoIHNpbXVsYXRpb24pICovCisJd2FpdF9xdWV1ZV9oZWFkX3Qgcm9fd2FpdF9xdWV1ZTsJLyogRm9yIHBlb3BsZSB3YWl0aW5nIGZvciB0aGUgZnMgdG8gZ28gcmVhZC1vbmx5ICovCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfUVVPVEEKKwljaGFyICpzX3FmX25hbWVzW01BWFFVT1RBU107CQkvKiBOYW1lcyBvZiBxdW90YSBmaWxlcyB3aXRoIGpvdXJuYWxsZWQgcXVvdGEgKi8KKwlpbnQgc19qcXVvdGFfZm10OwkJCS8qIEZvcm1hdCBvZiBxdW90YSB0byB1c2UgKi8KKyNlbmRpZgorfTsKKworI2VuZGlmCS8qIF9MSU5VWF9FWFQzX0ZTX1NCICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2V4dDNfamJkLmggYi9pbmNsdWRlL2xpbnV4L2V4dDNfamJkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgyOTJhZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvZXh0M19qYmQuaApAQCAtMCwwICsxLDI2NSBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvbGludXgvZXh0M19qYmQuaAorICoKKyAqIFdyaXR0ZW4gYnkgU3RlcGhlbiBDLiBUd2VlZGllIDxzY3RAcmVkaGF0LmNvbT4sIDE5OTkKKyAqCisgKiBDb3B5cmlnaHQgMTk5OC0tMTk5OSBSZWQgSGF0IGNvcnAgLS0tIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTGludXgga2VybmVsIGFuZCBpcyBtYWRlIGF2YWlsYWJsZSB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLCBvciBhdCB5b3VyCisgKiBvcHRpb24sIGFueSBsYXRlciB2ZXJzaW9uLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KKyAqCisgKiBFeHQzLXNwZWNpZmljIGpvdXJuYWxpbmcgZXh0ZW5zaW9ucy4KKyAqLworCisjaWZuZGVmIF9MSU5VWF9FWFQzX0pCRF9ICisjZGVmaW5lIF9MSU5VWF9FWFQzX0pCRF9ICisKKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2piZC5oPgorI2luY2x1ZGUgPGxpbnV4L2V4dDNfZnMuaD4KKworI2RlZmluZSBFWFQzX0pPVVJOQUwoaW5vZGUpCShFWFQzX1NCKChpbm9kZSktPmlfc2IpLT5zX2pvdXJuYWwpCisKKy8qIERlZmluZSB0aGUgbnVtYmVyIG9mIGJsb2NrcyB3ZSBuZWVkIHRvIGFjY291bnQgdG8gYSB0cmFuc2FjdGlvbiB0bworICogbW9kaWZ5IG9uZSBibG9jayBvZiBkYXRhLgorICogCisgKiBXZSBtYXkgaGF2ZSB0byB0b3VjaCBvbmUgaW5vZGUsIG9uZSBiaXRtYXAgYnVmZmVyLCB1cCB0byB0aHJlZQorICogaW5kaXJlY3Rpb24gYmxvY2tzLCB0aGUgZ3JvdXAgYW5kIHN1cGVyYmxvY2sgc3VtbWFyaWVzLCBhbmQgdGhlIGRhdGEKKyAqIGJsb2NrIHRvIGNvbXBsZXRlIHRoZSB0cmFuc2FjdGlvbi4gICovCisKKyNkZWZpbmUgRVhUM19TSU5HTEVEQVRBX1RSQU5TX0JMT0NLUwk4VQorCisvKiBFeHRlbmRlZCBhdHRyaWJ1dGUgb3BlcmF0aW9ucyB0b3VjaCBhdCBtb3N0IHR3byBkYXRhIGJ1ZmZlcnMsCisgKiB0d28gYml0bWFwIGJ1ZmZlcnMsIGFuZCB0d28gZ3JvdXAgc3VtbWFyaWVzLCBpbiBhZGRpdGlvbiB0byB0aGUgaW5vZGUKKyAqIGFuZCB0aGUgc3VwZXJibG9jaywgd2hpY2ggYXJlIGFscmVhZHkgYWNjb3VudGVkIGZvci4gKi8KKworI2RlZmluZSBFWFQzX1hBVFRSX1RSQU5TX0JMT0NLUwkJNlUKKworLyogRGVmaW5lIHRoZSBtaW5pbXVtIHNpemUgZm9yIGEgdHJhbnNhY3Rpb24gd2hpY2ggbW9kaWZpZXMgZGF0YS4gIFRoaXMKKyAqIG5lZWRzIHRvIHRha2UgaW50byBhY2NvdW50IHRoZSBmYWN0IHRoYXQgd2UgbWF5IGVuZCB1cCBtb2RpZnlpbmcgdHdvCisgKiBxdW90YSBmaWxlcyB0b28gKG9uZSBmb3IgdGhlIGdyb3VwLCBvbmUgZm9yIHRoZSB1c2VyIHF1b3RhKS4gIFRoZQorICogc3VwZXJibG9jayBvbmx5IGdldHMgdXBkYXRlZCBvbmNlLCBvZiBjb3Vyc2UsIHNvIGRvbid0IGJvdGhlcgorICogY291bnRpbmcgdGhhdCBhZ2FpbiBmb3IgdGhlIHF1b3RhIHVwZGF0ZXMuICovCisKKyNkZWZpbmUgRVhUM19EQVRBX1RSQU5TX0JMT0NLUwkJKEVYVDNfU0lOR0xFREFUQV9UUkFOU19CTE9DS1MgKyBcCisJCQkJCSBFWFQzX1hBVFRSX1RSQU5TX0JMT0NLUyAtIDIgKyBcCisJCQkJCSAyKkVYVDNfUVVPVEFfVFJBTlNfQkxPQ0tTKQorCisvKiBEZWxldGUgb3BlcmF0aW9ucyBwb3RlbnRpYWxseSBoaXQgb25lIGRpcmVjdG9yeSdzIG5hbWVzcGFjZSBwbHVzIGFuCisgKiBlbnRpcmUgaW5vZGUsIHBsdXMgYXJiaXRyYXJ5IGFtb3VudHMgb2YgYml0bWFwL2luZGlyZWN0aW9uIGRhdGEuICBCZQorICogZ2VuZXJvdXMuICBXZSBjYW4gZ3JvdyB0aGUgZGVsZXRlIHRyYW5zYWN0aW9uIGxhdGVyIGlmIG5lY2Vzc2FyeS4gKi8KKworI2RlZmluZSBFWFQzX0RFTEVURV9UUkFOU19CTE9DS1MJKDIgKiBFWFQzX0RBVEFfVFJBTlNfQkxPQ0tTICsgNjQpCisKKy8qIERlZmluZSBhbiBhcmJpdHJhcnkgbGltaXQgZm9yIHRoZSBhbW91bnQgb2YgZGF0YSB3ZSB3aWxsIGFudGljaXBhdGUKKyAqIHdyaXRpbmcgdG8gYW55IGdpdmVuIHRyYW5zYWN0aW9uLiAgRm9yIHVuYm91bmRlZCB0cmFuc2FjdGlvbnMgc3VjaCBhcworICogd3JpdGUoMikgYW5kIHRydW5jYXRlKDIpIHdlIGNhbiB3cml0ZSBtb3JlIHRoYW4gdGhpcywgYnV0IHdlIGFsd2F5cworICogc3RhcnQgb2ZmIGF0IHRoZSBtYXhpbXVtIHRyYW5zYWN0aW9uIHNpemUgYW5kIGdyb3cgdGhlIHRyYW5zYWN0aW9uCisgKiBvcHRpbWlzdGljYWxseSBhcyB3ZSBnby4gKi8KKworI2RlZmluZSBFWFQzX01BWF9UUkFOU19EQVRBCQk2NFUKKworLyogV2UgYnJlYWsgdXAgYSBsYXJnZSB0cnVuY2F0ZSBvciB3cml0ZSB0cmFuc2FjdGlvbiBvbmNlIHRoZSBoYW5kbGUncworICogYnVmZmVyIGNyZWRpdHMgZ2V0cyB0aGlzIGxvdywgd2UgbmVlZCBlaXRoZXIgdG8gZXh0ZW5kIHRoZQorICogdHJhbnNhY3Rpb24gb3IgdG8gc3RhcnQgYSBuZXcgb25lLiAgUmVzZXJ2ZSBlbm91Z2ggc3BhY2UgaGVyZSBmb3IKKyAqIGlub2RlLCBiaXRtYXAsIHN1cGVyYmxvY2ssIGdyb3VwIGFuZCBpbmRpcmVjdGlvbiB1cGRhdGVzIGZvciBhdCBsZWFzdAorICogb25lIGJsb2NrLCBwbHVzIHR3byBxdW90YSB1cGRhdGVzLiAgUXVvdGEgYWxsb2NhdGlvbnMgYXJlIG5vdAorICogbmVlZGVkLiAqLworCisjZGVmaW5lIEVYVDNfUkVTRVJWRV9UUkFOU19CTE9DS1MJMTJVCisKKyNkZWZpbmUgRVhUM19JTkRFWF9FWFRSQV9UUkFOU19CTE9DS1MJOAorCisjaWZkZWYgQ09ORklHX1FVT1RBCisvKiBBbW91bnQgb2YgYmxvY2tzIG5lZWRlZCBmb3IgcXVvdGEgdXBkYXRlIC0gd2Uga25vdyB0aGF0IHRoZSBzdHJ1Y3R1cmUgd2FzCisgKiBhbGxvY2F0ZWQgc28gd2UgbmVlZCB0byB1cGRhdGUgb25seSBpbm9kZStkYXRhICovCisjZGVmaW5lIEVYVDNfUVVPVEFfVFJBTlNfQkxPQ0tTIDIKKy8qIEFtb3VudCBvZiBibG9ja3MgbmVlZGVkIGZvciBxdW90YSBpbnNlcnQvZGVsZXRlIC0gd2UgZG8gc29tZSBibG9jayB3cml0ZXMKKyAqIGJ1dCBpbm9kZSwgc2IgYW5kIGdyb3VwIHVwZGF0ZXMgYXJlIGRvbmUgb25seSBvbmNlICovCisjZGVmaW5lIEVYVDNfUVVPVEFfSU5JVF9CTE9DS1MgKERRVU9UX01BWF9XUklURVMqXAorCQkJCShFWFQzX1NJTkdMRURBVEFfVFJBTlNfQkxPQ0tTLTMpKzMpCisjZWxzZQorI2RlZmluZSBFWFQzX1FVT1RBX1RSQU5TX0JMT0NLUyAwCisjZGVmaW5lIEVYVDNfUVVPVEFfSU5JVF9CTE9DS1MgMAorI2VuZGlmCisKK2ludAorZXh0M19tYXJrX2lsb2NfZGlydHkoaGFuZGxlX3QgKmhhbmRsZSwgCisJCSAgICAgc3RydWN0IGlub2RlICppbm9kZSwKKwkJICAgICBzdHJ1Y3QgZXh0M19pbG9jICppbG9jKTsKKworLyogCisgKiBPbiBzdWNjZXNzLCBXZSBlbmQgdXAgd2l0aCBhbiBvdXRzdGFuZGluZyByZWZlcmVuY2UgY291bnQgYWdhaW5zdAorICogaWxvYy0+YmguICBUaGlzIF9tdXN0XyBiZSBjbGVhbmVkIHVwIGxhdGVyLiAKKyAqLworCitpbnQgZXh0M19yZXNlcnZlX2lub2RlX3dyaXRlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIAorCQkJc3RydWN0IGV4dDNfaWxvYyAqaWxvYyk7CisKK2ludCBleHQzX21hcmtfaW5vZGVfZGlydHkoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSk7CisKKy8qCisgKiBXcmFwcGVyIGZ1bmN0aW9ucyB3aXRoIHdoaWNoIGV4dDMgY2FsbHMgaW50byBKQkQuICBUaGUgaW50ZW50IGhlcmUgaXMKKyAqIHRvIGFsbG93IHRoZXNlIHRvIGJlIHR1cm5lZCBpbnRvIGFwcHJvcHJpYXRlIHN0dWJzIHNvIGV4dDMgY2FuIGNvbnRyb2wKKyAqIGV4dDIgZmlsZXN5c3RlbXMsIHNvIGV4dDIrZXh0MyBzeXN0ZW1zIG9ubHkgbmVlIG9uZSBmcy4gIFRoaXMgd29yayBoYXNuJ3QKKyAqIGJlZW4gZG9uZSB5ZXQuCisgKi8KKwordm9pZCBleHQzX2pvdXJuYWxfYWJvcnRfaGFuZGxlKGNvbnN0IGNoYXIgKmNhbGxlciwgY29uc3QgY2hhciAqZXJyX2ZuLAorCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBoYW5kbGVfdCAqaGFuZGxlLCBpbnQgZXJyKTsKKworc3RhdGljIGlubGluZSBpbnQKK19fZXh0M19qb3VybmFsX2dldF91bmRvX2FjY2Vzcyhjb25zdCBjaGFyICp3aGVyZSwgaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQoreworCWludCBlcnIgPSBqb3VybmFsX2dldF91bmRvX2FjY2VzcyhoYW5kbGUsIGJoKTsKKwlpZiAoZXJyKQorCQlleHQzX2pvdXJuYWxfYWJvcnRfaGFuZGxlKHdoZXJlLCBfX0ZVTkNUSU9OX18sIGJoLCBoYW5kbGUsZXJyKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW5saW5lIGludAorX19leHQzX2pvdXJuYWxfZ2V0X3dyaXRlX2FjY2Vzcyhjb25zdCBjaGFyICp3aGVyZSwgaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQoreworCWludCBlcnIgPSBqb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoaGFuZGxlLCBiaCk7CisJaWYgKGVycikKKwkJZXh0M19qb3VybmFsX2Fib3J0X2hhbmRsZSh3aGVyZSwgX19GVU5DVElPTl9fLCBiaCwgaGFuZGxlLGVycik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitleHQzX2pvdXJuYWxfcmVsZWFzZV9idWZmZXIoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKK3sKKwlqb3VybmFsX3JlbGVhc2VfYnVmZmVyKGhhbmRsZSwgYmgpOworfQorCitzdGF0aWMgaW5saW5lIGludAorX19leHQzX2pvdXJuYWxfZm9yZ2V0KGNvbnN0IGNoYXIgKndoZXJlLCBoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQoreworCWludCBlcnIgPSBqb3VybmFsX2ZvcmdldChoYW5kbGUsIGJoKTsKKwlpZiAoZXJyKQorCQlleHQzX2pvdXJuYWxfYWJvcnRfaGFuZGxlKHdoZXJlLCBfX0ZVTkNUSU9OX18sIGJoLCBoYW5kbGUsZXJyKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW5saW5lIGludAorX19leHQzX2pvdXJuYWxfcmV2b2tlKGNvbnN0IGNoYXIgKndoZXJlLCBoYW5kbGVfdCAqaGFuZGxlLAorCQkgICAgICB1bnNpZ25lZCBsb25nIGJsb2NrbnIsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCit7CisJaW50IGVyciA9IGpvdXJuYWxfcmV2b2tlKGhhbmRsZSwgYmxvY2tuciwgYmgpOworCWlmIChlcnIpCisJCWV4dDNfam91cm5hbF9hYm9ydF9oYW5kbGUod2hlcmUsIF9fRlVOQ1RJT05fXywgYmgsIGhhbmRsZSxlcnIpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitfX2V4dDNfam91cm5hbF9nZXRfY3JlYXRlX2FjY2Vzcyhjb25zdCBjaGFyICp3aGVyZSwKKwkJCQkgaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKK3sKKwlpbnQgZXJyID0gam91cm5hbF9nZXRfY3JlYXRlX2FjY2VzcyhoYW5kbGUsIGJoKTsKKwlpZiAoZXJyKQorCQlleHQzX2pvdXJuYWxfYWJvcnRfaGFuZGxlKHdoZXJlLCBfX0ZVTkNUSU9OX18sIGJoLCBoYW5kbGUsZXJyKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW5saW5lIGludAorX19leHQzX2pvdXJuYWxfZGlydHlfbWV0YWRhdGEoY29uc3QgY2hhciAqd2hlcmUsCisJCQkgICAgICBoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQoreworCWludCBlcnIgPSBqb3VybmFsX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwgYmgpOworCWlmIChlcnIpCisJCWV4dDNfam91cm5hbF9hYm9ydF9oYW5kbGUod2hlcmUsIF9fRlVOQ1RJT05fXywgYmgsIGhhbmRsZSxlcnIpOworCXJldHVybiBlcnI7Cit9CisKKworI2RlZmluZSBleHQzX2pvdXJuYWxfZ2V0X3VuZG9fYWNjZXNzKGhhbmRsZSwgYmgpIFwKKwlfX2V4dDNfam91cm5hbF9nZXRfdW5kb19hY2Nlc3MoX19GVU5DVElPTl9fLCAoaGFuZGxlKSwgKGJoKSkKKyNkZWZpbmUgZXh0M19qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoaGFuZGxlLCBiaCkgXAorCV9fZXh0M19qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoX19GVU5DVElPTl9fLCAoaGFuZGxlKSwgKGJoKSkKKyNkZWZpbmUgZXh0M19qb3VybmFsX3Jldm9rZShoYW5kbGUsIGJsb2NrbnIsIGJoKSBcCisJX19leHQzX2pvdXJuYWxfcmV2b2tlKF9fRlVOQ1RJT05fXywgKGhhbmRsZSksIChibG9ja25yKSwgKGJoKSkKKyNkZWZpbmUgZXh0M19qb3VybmFsX2dldF9jcmVhdGVfYWNjZXNzKGhhbmRsZSwgYmgpIFwKKwlfX2V4dDNfam91cm5hbF9nZXRfY3JlYXRlX2FjY2VzcyhfX0ZVTkNUSU9OX18sIChoYW5kbGUpLCAoYmgpKQorI2RlZmluZSBleHQzX2pvdXJuYWxfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBiaCkgXAorCV9fZXh0M19qb3VybmFsX2RpcnR5X21ldGFkYXRhKF9fRlVOQ1RJT05fXywgKGhhbmRsZSksIChiaCkpCisjZGVmaW5lIGV4dDNfam91cm5hbF9mb3JnZXQoaGFuZGxlLCBiaCkgXAorCV9fZXh0M19qb3VybmFsX2ZvcmdldChfX0ZVTkNUSU9OX18sIChoYW5kbGUpLCAoYmgpKQorCitpbnQgZXh0M19qb3VybmFsX2RpcnR5X2RhdGEoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCk7CisKK2hhbmRsZV90ICpleHQzX2pvdXJuYWxfc3RhcnRfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IG5ibG9ja3MpOworaW50IF9fZXh0M19qb3VybmFsX3N0b3AoY29uc3QgY2hhciAqd2hlcmUsIGhhbmRsZV90ICpoYW5kbGUpOworCitzdGF0aWMgaW5saW5lIGhhbmRsZV90ICpleHQzX2pvdXJuYWxfc3RhcnQoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ibG9ja3MpCit7CisJcmV0dXJuIGV4dDNfam91cm5hbF9zdGFydF9zYihpbm9kZS0+aV9zYiwgbmJsb2Nrcyk7Cit9CisKKyNkZWZpbmUgZXh0M19qb3VybmFsX3N0b3AoaGFuZGxlKSBcCisJX19leHQzX2pvdXJuYWxfc3RvcChfX0ZVTkNUSU9OX18sIChoYW5kbGUpKQorCitzdGF0aWMgaW5saW5lIGhhbmRsZV90ICpleHQzX2pvdXJuYWxfY3VycmVudF9oYW5kbGUodm9pZCkKK3sKKwlyZXR1cm4gam91cm5hbF9jdXJyZW50X2hhbmRsZSgpOworfQorCitzdGF0aWMgaW5saW5lIGludCBleHQzX2pvdXJuYWxfZXh0ZW5kKGhhbmRsZV90ICpoYW5kbGUsIGludCBuYmxvY2tzKQoreworCXJldHVybiBqb3VybmFsX2V4dGVuZChoYW5kbGUsIG5ibG9ja3MpOworfQorCitzdGF0aWMgaW5saW5lIGludCBleHQzX2pvdXJuYWxfcmVzdGFydChoYW5kbGVfdCAqaGFuZGxlLCBpbnQgbmJsb2NrcykKK3sKKwlyZXR1cm4gam91cm5hbF9yZXN0YXJ0KGhhbmRsZSwgbmJsb2Nrcyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGV4dDNfam91cm5hbF9ibG9ja3NfcGVyX3BhZ2Uoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlyZXR1cm4gam91cm5hbF9ibG9ja3NfcGVyX3BhZ2UoaW5vZGUpOworfQorCitzdGF0aWMgaW5saW5lIGludCBleHQzX2pvdXJuYWxfZm9yY2VfY29tbWl0KGpvdXJuYWxfdCAqam91cm5hbCkKK3sKKwlyZXR1cm4gam91cm5hbF9mb3JjZV9jb21taXQoam91cm5hbCk7Cit9CisKKy8qIHN1cGVyLmMgKi8KK2ludCBleHQzX2ZvcmNlX2NvbW1pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKKworc3RhdGljIGlubGluZSBpbnQgZXh0M19zaG91bGRfam91cm5hbF9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJaWYgKCFTX0lTUkVHKGlub2RlLT5pX21vZGUpKQorCQlyZXR1cm4gMTsKKwlpZiAodGVzdF9vcHQoaW5vZGUtPmlfc2IsIERBVEFfRkxBR1MpID09IEVYVDNfTU9VTlRfSk9VUk5BTF9EQVRBKQorCQlyZXR1cm4gMTsKKwlpZiAoRVhUM19JKGlub2RlKS0+aV9mbGFncyAmIEVYVDNfSk9VUk5BTF9EQVRBX0ZMKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgZXh0M19zaG91bGRfb3JkZXJfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCWlmICghU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkKKwkJcmV0dXJuIDA7CisJaWYgKEVYVDNfSShpbm9kZSktPmlfZmxhZ3MgJiBFWFQzX0pPVVJOQUxfREFUQV9GTCkKKwkJcmV0dXJuIDA7CisJaWYgKHRlc3Rfb3B0KGlub2RlLT5pX3NiLCBEQVRBX0ZMQUdTKSA9PSBFWFQzX01PVU5UX09SREVSRURfREFUQSkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGV4dDNfc2hvdWxkX3dyaXRlYmFja19kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJaWYgKCFTX0lTUkVHKGlub2RlLT5pX21vZGUpKQorCQlyZXR1cm4gMDsKKwlpZiAoRVhUM19JKGlub2RlKS0+aV9mbGFncyAmIEVYVDNfSk9VUk5BTF9EQVRBX0ZMKQorCQlyZXR1cm4gMDsKKwlpZiAodGVzdF9vcHQoaW5vZGUtPmlfc2IsIERBVEFfRkxBR1MpID09IEVYVDNfTU9VTlRfV1JJVEVCQUNLX0RBVEEpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCisjZW5kaWYJLyogX0xJTlVYX0VYVDNfSkJEX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmFkdmlzZS5oIGIvaW5jbHVkZS9saW51eC9mYWR2aXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZjNjU2ZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvZmFkdmlzZS5oCkBAIC0wLDAgKzEsMTEgQEAKKyNpZm5kZWYgRkFEVklTRV9IX0lOQ0xVREVECisjZGVmaW5lIEZBRFZJU0VfSF9JTkNMVURFRAorCisjZGVmaW5lIFBPU0lYX0ZBRFZfTk9STUFMCTAgLyogTm8gZnVydGhlciBzcGVjaWFsIHRyZWF0bWVudC4gICovCisjZGVmaW5lIFBPU0lYX0ZBRFZfUkFORE9NCTEgLyogRXhwZWN0IHJhbmRvbSBwYWdlIHJlZmVyZW5jZXMuICAqLworI2RlZmluZSBQT1NJWF9GQURWX1NFUVVFTlRJQUwJMiAvKiBFeHBlY3Qgc2VxdWVudGlhbCBwYWdlIHJlZmVyZW5jZXMuICAqLworI2RlZmluZSBQT1NJWF9GQURWX1dJTExORUVECTMgLyogV2lsbCBuZWVkIHRoZXNlIHBhZ2VzLiAgKi8KKyNkZWZpbmUgUE9TSVhfRkFEVl9ET05UTkVFRAk0IC8qIERvbid0IG5lZWQgdGhlc2UgcGFnZXMuICAqLworI2RlZmluZSBQT1NJWF9GQURWX05PUkVVU0UJNSAvKiBEYXRhIHdpbGwgYmUgYWNjZXNzZWQgb25jZS4gICovCisKKyNlbmRpZgkvKiBGQURWSVNFX0hfSU5DTFVERUQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmIuaCBiL2luY2x1ZGUvbGludXgvZmIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDVkM2UyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9mYi5oCkBAIC0wLDAgKzEsOTMyIEBACisjaWZuZGVmIF9MSU5VWF9GQl9ICisjZGVmaW5lIF9MSU5VWF9GQl9ICisKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKworLyogRGVmaW5pdGlvbnMgb2YgZnJhbWUgYnVmZmVycwkJCQkJCSovCisKKyNkZWZpbmUgRkJfTUFKT1IJCTI5CisjZGVmaW5lIEZCX01BWAkJCTMyCS8qIHN1ZmZpY2llbnQgZm9yIG5vdyAqLworCisvKiBpb2N0bHMKKyAgIDB4NDYgaXMgJ0YnCQkJCQkJCQkqLworI2RlZmluZSBGQklPR0VUX1ZTQ1JFRU5JTkZPCTB4NDYwMAorI2RlZmluZSBGQklPUFVUX1ZTQ1JFRU5JTkZPCTB4NDYwMQorI2RlZmluZSBGQklPR0VUX0ZTQ1JFRU5JTkZPCTB4NDYwMgorI2RlZmluZSBGQklPR0VUQ01BUAkJMHg0NjA0CisjZGVmaW5lIEZCSU9QVVRDTUFQCQkweDQ2MDUKKyNkZWZpbmUgRkJJT1BBTl9ESVNQTEFZCQkweDQ2MDYKKyNpZmRlZiBfX0tFUk5FTF9fCisjZGVmaW5lIEZCSU9fQ1VSU09SICAgICAgICAgICAgX0lPV1IoJ0YnLCAweDA4LCBzdHJ1Y3QgZmJfY3Vyc29yX3VzZXIpCisjZWxzZQorI2RlZmluZSBGQklPX0NVUlNPUiAgICAgICAgICAgIF9JT1dSKCdGJywgMHgwOCwgc3RydWN0IGZiX2N1cnNvcikKKyNlbmRpZgorLyogMHg0NjA3LTB4NDYwQiBhcmUgZGVmaW5lZCBiZWxvdyAqLworLyogI2RlZmluZSBGQklPR0VUX01PTklUT1JTUEVDCTB4NDYwQyAqLworLyogI2RlZmluZSBGQklPUFVUX01PTklUT1JTUEVDCTB4NDYwRCAqLworLyogI2RlZmluZSBGQklPU1dJVENIX01PTklCSVQJMHg0NjBFICovCisjZGVmaW5lIEZCSU9HRVRfQ09OMkZCTUFQCTB4NDYwRgorI2RlZmluZSBGQklPUFVUX0NPTjJGQk1BUAkweDQ2MTAKKyNkZWZpbmUgRkJJT0JMQU5LCQkweDQ2MTEJCS8qIGFyZzogMCBvciB2ZXNhIGxldmVsICsgMSAqLworI2RlZmluZSBGQklPR0VUX1ZCTEFOSwkJX0lPUignRicsIDB4MTIsIHN0cnVjdCBmYl92YmxhbmspCisjZGVmaW5lIEZCSU9fQUxMT0MgICAgICAgICAgICAgIDB4NDYxMworI2RlZmluZSBGQklPX0ZSRUUgICAgICAgICAgICAgICAweDQ2MTQKKyNkZWZpbmUgRkJJT0dFVF9HTFlQSCAgICAgICAgICAgMHg0NjE1CisjZGVmaW5lIEZCSU9HRVRfSFdDSU5GTyAgICAgICAgIDB4NDYxNgorI2RlZmluZSBGQklPUFVUX01PREVJTkZPICAgICAgICAweDQ2MTcKKyNkZWZpbmUgRkJJT0dFVF9ESVNQSU5GTyAgICAgICAgMHg0NjE4CisKKworI2RlZmluZSBGQl9UWVBFX1BBQ0tFRF9QSVhFTFMJCTAJLyogUGFja2VkIFBpeGVscwkqLworI2RlZmluZSBGQl9UWVBFX1BMQU5FUwkJCTEJLyogTm9uIGludGVybGVhdmVkIHBsYW5lcyAqLworI2RlZmluZSBGQl9UWVBFX0lOVEVSTEVBVkVEX1BMQU5FUwkyCS8qIEludGVybGVhdmVkIHBsYW5lcwkqLworI2RlZmluZSBGQl9UWVBFX1RFWFQJCQkzCS8qIFRleHQvYXR0cmlidXRlcwkqLworI2RlZmluZSBGQl9UWVBFX1ZHQV9QTEFORVMJCTQJLyogRUdBL1ZHQSBwbGFuZXMJKi8KKworI2RlZmluZSBGQl9BVVhfVEVYVF9NREEJCTAJLyogTW9ub2Nocm9tZSB0ZXh0ICovCisjZGVmaW5lIEZCX0FVWF9URVhUX0NHQQkJMQkvKiBDR0EvRUdBL1ZHQSBDb2xvciB0ZXh0ICovCisjZGVmaW5lIEZCX0FVWF9URVhUX1MzX01NSU8JMgkvKiBTMyBNTUlPIGZhc3R0ZXh0ICovCisjZGVmaW5lIEZCX0FVWF9URVhUX01HQV9TVEVQMTYJMwkvKiBNR0EgTWlsbGVuaXVtIEk6IHRleHQsIGF0dHIsIDE0IHJlc2VydmVkIGJ5dGVzICovCisjZGVmaW5lIEZCX0FVWF9URVhUX01HQV9TVEVQOAk0CS8qIG90aGVyIE1HQXM6ICAgICAgdGV4dCwgYXR0ciwgIDYgcmVzZXJ2ZWQgYnl0ZXMgKi8KKworI2RlZmluZSBGQl9BVVhfVkdBX1BMQU5FU19WR0E0CQkwCS8qIDE2IGNvbG9yIHBsYW5lcyAoRUdBL1ZHQSkgKi8KKyNkZWZpbmUgRkJfQVVYX1ZHQV9QTEFORVNfQ0ZCNAkJMQkvKiBDRkI0IGluIHBsYW5lcyAoVkdBKSAqLworI2RlZmluZSBGQl9BVVhfVkdBX1BMQU5FU19DRkI4CQkyCS8qIENGQjggaW4gcGxhbmVzIChWR0EpICovCisKKyNkZWZpbmUgRkJfVklTVUFMX01PTk8wMQkJMAkvKiBNb25vY2hyLiAxPUJsYWNrIDA9V2hpdGUgKi8KKyNkZWZpbmUgRkJfVklTVUFMX01PTk8xMAkJMQkvKiBNb25vY2hyLiAxPVdoaXRlIDA9QmxhY2sgKi8KKyNkZWZpbmUgRkJfVklTVUFMX1RSVUVDT0xPUgkJMgkvKiBUcnVlIGNvbG9yCSovCisjZGVmaW5lIEZCX1ZJU1VBTF9QU0VVRE9DT0xPUgkJMwkvKiBQc2V1ZG8gY29sb3IgKGxpa2UgYXRhcmkpICovCisjZGVmaW5lIEZCX1ZJU1VBTF9ESVJFQ1RDT0xPUgkJNAkvKiBEaXJlY3QgY29sb3IgKi8KKyNkZWZpbmUgRkJfVklTVUFMX1NUQVRJQ19QU0VVRE9DT0xPUgk1CS8qIFBzZXVkbyBjb2xvciByZWFkb25seSAqLworCisjZGVmaW5lIEZCX0FDQ0VMX05PTkUJCTAJLyogbm8gaGFyZHdhcmUgYWNjZWxlcmF0b3IJKi8KKyNkZWZpbmUgRkJfQUNDRUxfQVRBUklCTElUVAkxCS8qIEF0YXJpIEJsaXR0ZXIJCSovCisjZGVmaW5lIEZCX0FDQ0VMX0FNSUdBQkxJVFQJMgkvKiBBbWlnYSBCbGl0dGVyICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZCX0FDQ0VMX1MzX1RSSU82NAkzCS8qIEN5YmVydmlzaW9uNjQgKFMzIFRyaW82NCkgICAgKi8KKyNkZWZpbmUgRkJfQUNDRUxfTkNSXzc3QzMyQkxUCTQJLyogUmV0aW5hWjMgKE5DUiA3N0MzMkJMVCkgICAgICAqLworI2RlZmluZSBGQl9BQ0NFTF9TM19WSVJHRQk1CS8qIEN5YmVydmlzaW9uNjQvM0QgKFMzIFZpUkdFKQkqLworI2RlZmluZSBGQl9BQ0NFTF9BVElfTUFDSDY0R1gJNgkvKiBBVEkgTWFjaCA2NEdYIGZhbWlseQkJKi8KKyNkZWZpbmUgRkJfQUNDRUxfREVDX1RHQQk3CS8qIERFQyAyMTAzMCBUR0EJCSovCisjZGVmaW5lIEZCX0FDQ0VMX0FUSV9NQUNINjRDVAk4CS8qIEFUSSBNYWNoIDY0Q1QgZmFtaWx5CQkqLworI2RlZmluZSBGQl9BQ0NFTF9BVElfTUFDSDY0VlQJOQkvKiBBVEkgTWFjaCA2NENUIGZhbWlseSBWVCBjbGFzcyAqLworI2RlZmluZSBGQl9BQ0NFTF9BVElfTUFDSDY0R1QJMTAJLyogQVRJIE1hY2ggNjRDVCBmYW1pbHkgR1QgY2xhc3MgKi8KKyNkZWZpbmUgRkJfQUNDRUxfU1VOX0NSRUFUT1IJMTEJLyogU3VuIENyZWF0b3IvQ3JlYXRvcjNECSovCisjZGVmaW5lIEZCX0FDQ0VMX1NVTl9DR1NJWAkxMgkvKiBTdW4gY2c2CQkJKi8KKyNkZWZpbmUgRkJfQUNDRUxfU1VOX0xFTwkxMwkvKiBTdW4gbGVvL3p4CQkJKi8KKyNkZWZpbmUgRkJfQUNDRUxfSU1TX1RXSU5UVVJCTwkxNAkvKiBJTVMgVHdpbiBUdXJibwkJKi8KKyNkZWZpbmUgRkJfQUNDRUxfM0RMQUJTX1BFUk1FRElBMiAxNQkvKiAzRGxhYnMgUGVybWVkaWEgMgkJKi8KKyNkZWZpbmUgRkJfQUNDRUxfTUFUUk9YX01HQTIwNjRXIDE2CS8qIE1hdHJveCBNR0EyMDY0VyAoTWlsbGVuaXVtKQkqLworI2RlZmluZSBGQl9BQ0NFTF9NQVRST1hfTUdBMTA2NFNHIDE3CS8qIE1hdHJveCBNR0ExMDY0U0cgKE15c3RpcXVlKQkqLworI2RlZmluZSBGQl9BQ0NFTF9NQVRST1hfTUdBMjE2NFcgMTgJLyogTWF0cm94IE1HQTIxNjRXIChNaWxsZW5pdW0gSUkpICovCisjZGVmaW5lIEZCX0FDQ0VMX01BVFJPWF9NR0EyMTY0V19BR1AgMTkJLyogTWF0cm94IE1HQTIxNjRXIChNaWxsZW5pdW0gSUkpICovCisjZGVmaW5lIEZCX0FDQ0VMX01BVFJPWF9NR0FHMTAwCTIwCS8qIE1hdHJveCBHMTAwIChQcm9kdWN0aXZhIEcxMDApICovCisjZGVmaW5lIEZCX0FDQ0VMX01BVFJPWF9NR0FHMjAwCTIxCS8qIE1hdHJveCBHMjAwIChNeXN0LCBNaWxsLCAuLi4pICovCisjZGVmaW5lIEZCX0FDQ0VMX1NVTl9DRzE0CTIyCS8qIFN1biBjZ2ZvdXJ0ZWVuCQkgKi8KKyNkZWZpbmUgRkJfQUNDRUxfU1VOX0JXVFdPCTIzCS8qIFN1biBid3R3bwkJCSovCisjZGVmaW5lIEZCX0FDQ0VMX1NVTl9DR1RIUkVFCTI0CS8qIFN1biBjZ3RocmVlCQkJKi8KKyNkZWZpbmUgRkJfQUNDRUxfU1VOX1RDWAkyNQkvKiBTdW4gdGN4CQkJKi8KKyNkZWZpbmUgRkJfQUNDRUxfTUFUUk9YX01HQUc0MDAJMjYJLyogTWF0cm94IEc0MDAJCQkqLworI2RlZmluZSBGQl9BQ0NFTF9OVjMJCTI3CS8qIG5WaWRpYSBSSVZBIDEyOCAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRkJfQUNDRUxfTlY0CQkyOAkvKiBuVmlkaWEgUklWQSBUTlQJCSovCisjZGVmaW5lIEZCX0FDQ0VMX05WNQkJMjkJLyogblZpZGlhIFJJVkEgVE5UMgkJKi8KKyNkZWZpbmUgRkJfQUNDRUxfQ1RfNjU1NXgJMzAJLyogQyZUIDY1NTV4CQkJKi8KKyNkZWZpbmUgRkJfQUNDRUxfM0RGWF9CQU5TSEVFCTMxCS8qIDNEZnggQmFuc2hlZQkJCSovCisjZGVmaW5lIEZCX0FDQ0VMX0FUSV9SQUdFMTI4CTMyCS8qIEFUSSBSYWdlMTI4IGZhbWlseQkJKi8KKyNkZWZpbmUgRkJfQUNDRUxfSUdTX0NZQkVSMjAwMAkzMwkvKiBDeWJlclBybyAyMDAwCQkqLworI2RlZmluZSBGQl9BQ0NFTF9JR1NfQ1lCRVIyMDEwCTM0CS8qIEN5YmVyUHJvIDIwMTAJCSovCisjZGVmaW5lIEZCX0FDQ0VMX0lHU19DWUJFUjUwMDAJMzUJLyogQ3liZXJQcm8gNTAwMAkJKi8KKyNkZWZpbmUgRkJfQUNDRUxfU0lTX0dMQU1PVVIgICAgMzYJLyogU2lTIDMwMC82MzAvNTQwICAgICAgICAgICAgICAqLworI2RlZmluZSBGQl9BQ0NFTF8zRExBQlNfUEVSTUVESUEzIDM3CS8qIDNEbGFicyBQZXJtZWRpYSAzCQkqLworI2RlZmluZSBGQl9BQ0NFTF9BVElfUkFERU9OCTM4CS8qIEFUSSBSYWRlb24gZmFtaWx5CQkqLworI2RlZmluZSBGQl9BQ0NFTF9JODEwICAgICAgICAgICAzOSAgICAgIC8qIEludGVsIDgxMC84MTUgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRkJfQUNDRUxfU0lTX0dMQU1PVVJfMiAgNDAJLyogU2lTIDMxNSwgNjUwLCA3NDAJCSovCisjZGVmaW5lIEZCX0FDQ0VMX1NJU19YQUJSRSAgICAgIDQxCS8qIFNpUyAzMzAgKCJYYWJyZSIpCQkqLworI2RlZmluZSBGQl9BQ0NFTF9JODMwICAgICAgICAgICA0MiAgICAgIC8qIEludGVsIDgzME0vODQ1Ry84NXgvODY1RyAgICAgKi8KKyNkZWZpbmUgRkJfQUNDRUxfTlZfMTAgICAgICAgICAgNDMgICAgICAvKiBuVmlkaWEgQXJjaCAxMCAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZCX0FDQ0VMX05WXzIwICAgICAgICAgIDQ0ICAgICAgLyogblZpZGlhIEFyY2ggMjAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGQl9BQ0NFTF9OVl8zMCAgICAgICAgICA0NSAgICAgIC8qIG5WaWRpYSBBcmNoIDMwICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRkJfQUNDRUxfTlZfNDAgICAgICAgICAgNDYgICAgICAvKiBuVmlkaWEgQXJjaCA0MCAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZCX0FDQ0VMX05FT01BR0lDX05NMjA3MCA5MAkvKiBOZW9NYWdpYyBOTTIwNzAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZCX0FDQ0VMX05FT01BR0lDX05NMjA5MCA5MQkvKiBOZW9NYWdpYyBOTTIwOTAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZCX0FDQ0VMX05FT01BR0lDX05NMjA5MyA5MgkvKiBOZW9NYWdpYyBOTTIwOTMgICAgICAgICAgICAgICovCisjZGVmaW5lIEZCX0FDQ0VMX05FT01BR0lDX05NMjA5NyA5MwkvKiBOZW9NYWdpYyBOTTIwOTcgICAgICAgICAgICAgICovCisjZGVmaW5lIEZCX0FDQ0VMX05FT01BR0lDX05NMjE2MCA5NAkvKiBOZW9NYWdpYyBOTTIxNjAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZCX0FDQ0VMX05FT01BR0lDX05NMjIwMCA5NQkvKiBOZW9NYWdpYyBOTTIyMDAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZCX0FDQ0VMX05FT01BR0lDX05NMjIzMCA5NgkvKiBOZW9NYWdpYyBOTTIyMzAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZCX0FDQ0VMX05FT01BR0lDX05NMjM2MCA5NwkvKiBOZW9NYWdpYyBOTTIzNjAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZCX0FDQ0VMX05FT01BR0lDX05NMjM4MCA5OAkvKiBOZW9NYWdpYyBOTTIzODAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRkJfQUNDRUxfU0FWQUdFNCAgICAgICAgMHg4MAkvKiBTMyBTYXZhZ2U0ICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZCX0FDQ0VMX1NBVkFHRTNEICAgICAgIDB4ODEJLyogUzMgU2F2YWdlM0QgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGQl9BQ0NFTF9TQVZBR0UzRF9NViAgICAweDgyCS8qIFMzIFNhdmFnZTNELU1WICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRkJfQUNDRUxfU0FWQUdFMjAwMCAgICAgMHg4MwkvKiBTMyBTYXZhZ2UyMDAwICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZCX0FDQ0VMX1NBVkFHRV9NWF9NViAgIDB4ODQJLyogUzMgU2F2YWdlL01YLU1WICAgICAgICAgICAgICAqLworI2RlZmluZSBGQl9BQ0NFTF9TQVZBR0VfTVggICAgICAweDg1CS8qIFMzIFNhdmFnZS9NWCAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRkJfQUNDRUxfU0FWQUdFX0lYX01WICAgMHg4NgkvKiBTMyBTYXZhZ2UvSVgtTVYgICAgICAgICAgICAgICovCisjZGVmaW5lIEZCX0FDQ0VMX1NBVkFHRV9JWCAgICAgIDB4ODcJLyogUzMgU2F2YWdlL0lYICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGQl9BQ0NFTF9QUk9TQVZBR0VfUE0gICAweDg4CS8qIFMzIFByb1NhdmFnZSBQTTEzMyAgICAgICAgICAgKi8KKyNkZWZpbmUgRkJfQUNDRUxfUFJPU0FWQUdFX0tNICAgMHg4OQkvKiBTMyBQcm9TYXZhZ2UgS00xMzMgICAgICAgICAgICovCisjZGVmaW5lIEZCX0FDQ0VMX1MzVFdJU1RFUl9QICAgIDB4OGEJLyogUzMgVHdpc3RlciAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGQl9BQ0NFTF9TM1RXSVNURVJfSyAgICAweDhiCS8qIFMzIFR3aXN0ZXJLICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRkJfQUNDRUxfU1VQRVJTQVZBR0UgICAgMHg4YyAgICAvKiBTMyBTdXBlcnNhdmFnZSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZCX0FDQ0VMX1BST1NBVkFHRV9ERFIgIDB4OGQJLyogUzMgUHJvU2F2YWdlIEREUiAgICAgICAgICAgICAqLworI2RlZmluZSBGQl9BQ0NFTF9QUk9TQVZBR0VfRERSSyAweDhlCS8qIFMzIFByb1NhdmFnZSBERFItSyAgICAgICAgICAgKi8KKworc3RydWN0IGZiX2ZpeF9zY3JlZW5pbmZvIHsKKwljaGFyIGlkWzE2XTsJCQkvKiBpZGVudGlmaWNhdGlvbiBzdHJpbmcgZWcgIlRUIEJ1aWx0aW4iICovCisJdW5zaWduZWQgbG9uZyBzbWVtX3N0YXJ0OwkvKiBTdGFydCBvZiBmcmFtZSBidWZmZXIgbWVtICovCisJCQkJCS8qIChwaHlzaWNhbCBhZGRyZXNzKSAqLworCV9fdTMyIHNtZW1fbGVuOwkJCS8qIExlbmd0aCBvZiBmcmFtZSBidWZmZXIgbWVtICovCisJX191MzIgdHlwZTsJCQkvKiBzZWUgRkJfVFlQRV8qCQkqLworCV9fdTMyIHR5cGVfYXV4OwkJCS8qIEludGVybGVhdmUgZm9yIGludGVybGVhdmVkIFBsYW5lcyAqLworCV9fdTMyIHZpc3VhbDsJCQkvKiBzZWUgRkJfVklTVUFMXyoJCSovIAorCV9fdTE2IHhwYW5zdGVwOwkJCS8qIHplcm8gaWYgbm8gaGFyZHdhcmUgcGFubmluZyAgKi8KKwlfX3UxNiB5cGFuc3RlcDsJCQkvKiB6ZXJvIGlmIG5vIGhhcmR3YXJlIHBhbm5pbmcgICovCisJX191MTYgeXdyYXBzdGVwOwkJLyogemVybyBpZiBubyBoYXJkd2FyZSB5d3JhcCAgICAqLworCV9fdTMyIGxpbmVfbGVuZ3RoOwkJLyogbGVuZ3RoIG9mIGEgbGluZSBpbiBieXRlcyAgICAqLworCXVuc2lnbmVkIGxvbmcgbW1pb19zdGFydDsJLyogU3RhcnQgb2YgTWVtb3J5IE1hcHBlZCBJL08gICAqLworCQkJCQkvKiAocGh5c2ljYWwgYWRkcmVzcykgKi8KKwlfX3UzMiBtbWlvX2xlbjsJCQkvKiBMZW5ndGggb2YgTWVtb3J5IE1hcHBlZCBJL08gICovCisJX191MzIgYWNjZWw7CQkJLyogSW5kaWNhdGUgdG8gZHJpdmVyIHdoaWNoCSovCisJCQkJCS8qICBzcGVjaWZpYyBjaGlwL2NhcmQgd2UgaGF2ZQkqLworCV9fdTE2IHJlc2VydmVkWzNdOwkJLyogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSBjb21wYXRpYmlsaXR5ICovCit9OworCisvKiBJbnRlcnByZXRhdGlvbiBvZiBvZmZzZXQgZm9yIGNvbG9yIGZpZWxkczogQWxsIG9mZnNldHMgYXJlIGZyb20gdGhlIHJpZ2h0LAorICogaW5zaWRlIGEgInBpeGVsIiB2YWx1ZSwgd2hpY2ggaXMgZXhhY3RseSAnYml0c19wZXJfcGl4ZWwnIHdpZGUgKG1lYW5zOiB5b3UKKyAqIGNhbiB1c2UgdGhlIG9mZnNldCBhcyByaWdodCBhcmd1bWVudCB0byA8PCkuIEEgcGl4ZWwgYWZ0ZXJ3YXJkcyBpcyBhIGJpdAorICogc3RyZWFtIGFuZCBpcyB3cml0dGVuIHRvIHZpZGVvIG1lbW9yeSBhcyB0aGF0IHVubW9kaWZpZWQuIFRoaXMgaW1wbGllcworICogYmlnLWVuZGlhbiBieXRlIG9yZGVyIGlmIGJpdHNfcGVyX3BpeGVsIGlzIGdyZWF0ZXIgdGhhbiA4LgorICovCitzdHJ1Y3QgZmJfYml0ZmllbGQgeworCV9fdTMyIG9mZnNldDsJCQkvKiBiZWdpbm5pbmcgb2YgYml0ZmllbGQJKi8KKwlfX3UzMiBsZW5ndGg7CQkJLyogbGVuZ3RoIG9mIGJpdGZpZWxkCQkqLworCV9fdTMyIG1zYl9yaWdodDsJCS8qICE9IDAgOiBNb3N0IHNpZ25pZmljYW50IGJpdCBpcyAqLyAKKwkJCQkJLyogcmlnaHQgKi8gCit9OworCisjZGVmaW5lIEZCX05PTlNURF9IQU0JCTEJLyogSG9sZC1BbmQtTW9kaWZ5IChIQU0pICAgICAgICAqLworCisjZGVmaW5lIEZCX0FDVElWQVRFX05PVwkJMAkvKiBzZXQgdmFsdWVzIGltbWVkaWF0ZWx5IChvciB2YmwpKi8KKyNkZWZpbmUgRkJfQUNUSVZBVEVfTlhUT1BFTgkxCS8qIGFjdGl2YXRlIG9uIG5leHQgb3BlbgkqLworI2RlZmluZSBGQl9BQ1RJVkFURV9URVNUCTIJLyogZG9uJ3Qgc2V0LCByb3VuZCB1cCBpbXBvc3NpYmxlICovCisjZGVmaW5lIEZCX0FDVElWQVRFX01BU0sgICAgICAgMTUKKwkJCQkJLyogdmFsdWVzCQkJKi8KKyNkZWZpbmUgRkJfQUNUSVZBVEVfVkJMCSAgICAgICAxNgkvKiBhY3RpdmF0ZSB2YWx1ZXMgb24gbmV4dCB2YmwgICovCisjZGVmaW5lIEZCX0NIQU5HRV9DTUFQX1ZCTCAgICAgMzIJLyogY2hhbmdlIGNvbG9ybWFwIG9uIHZibAkqLworI2RlZmluZSBGQl9BQ1RJVkFURV9BTEwJICAgICAgIDY0CS8qIGNoYW5nZSBhbGwgVkNzIG9uIHRoaXMgZmIJKi8KKyNkZWZpbmUgRkJfQUNUSVZBVEVfRk9SQ0UgICAgIDEyOAkvKiBmb3JjZSBhcHBseSBldmVuIHdoZW4gbm8gY2hhbmdlKi8KKyNkZWZpbmUgRkJfQUNUSVZBVEVfSU5WX01PREUgIDI1NiAgICAgICAvKiBpbnZhbGlkYXRlIHZpZGVvbW9kZSAqLworCisjZGVmaW5lIEZCX0FDQ0VMRl9URVhUCQkxCS8qIChPQlNPTEVURSkgc2VlIGZiX2luZm8uZmxhZ3MgYW5kIHZjX21vZGUgKi8KKworI2RlZmluZSBGQl9TWU5DX0hPUl9ISUdIX0FDVAkxCS8qIGhvcml6b250YWwgc3luYyBoaWdoIGFjdGl2ZQkqLworI2RlZmluZSBGQl9TWU5DX1ZFUlRfSElHSF9BQ1QJMgkvKiB2ZXJ0aWNhbCBzeW5jIGhpZ2ggYWN0aXZlCSovCisjZGVmaW5lIEZCX1NZTkNfRVhUCQk0CS8qIGV4dGVybmFsIHN5bmMJCSovCisjZGVmaW5lIEZCX1NZTkNfQ09NUF9ISUdIX0FDVAk4CS8qIGNvbXBvc2l0ZSBzeW5jIGhpZ2ggYWN0aXZlICAgKi8KKyNkZWZpbmUgRkJfU1lOQ19CUk9BRENBU1QJMTYJLyogYnJvYWRjYXN0IHZpZGVvIHRpbWluZ3MgICAgICAqLworCQkJCQkvKiB2dG90YWwgPSAxNDRkLzI4OG4vNTc2aSA9PiBQQUwgICovCisJCQkJCS8qIHZ0b3RhbCA9IDEyMWQvMjQybi80ODRpID0+IE5UU0MgKi8KKyNkZWZpbmUgRkJfU1lOQ19PTl9HUkVFTgkzMgkvKiBzeW5jIG9uIGdyZWVuICovCisKKyNkZWZpbmUgRkJfVk1PREVfTk9OSU5URVJMQUNFRCAgMAkvKiBub24gaW50ZXJsYWNlZCAqLworI2RlZmluZSBGQl9WTU9ERV9JTlRFUkxBQ0VECTEJLyogaW50ZXJsYWNlZAkqLworI2RlZmluZSBGQl9WTU9ERV9ET1VCTEUJCTIJLyogZG91YmxlIHNjYW4gKi8KKyNkZWZpbmUgRkJfVk1PREVfTUFTSwkJMjU1CisKKyNkZWZpbmUgRkJfVk1PREVfWVdSQVAJCTI1NgkvKiB5d3JhcCBpbnN0ZWFkIG9mIHBhbm5pbmcgICAgICovCisjZGVmaW5lIEZCX1ZNT0RFX1NNT09USF9YUEFOCTUxMgkvKiBzbW9vdGggeHBhbiBwb3NzaWJsZSAoaW50ZXJuYWxseSB1c2VkKSAqLworI2RlZmluZSBGQl9WTU9ERV9DT05VUERBVEUJNTEyCS8qIGRvbid0IHVwZGF0ZSB4L3lvZmZzZXQJKi8KKworI2RlZmluZSBQSUNPUzJLSFooYSkgKDEwMDAwMDAwMDBVTC8oYSkpCisjZGVmaW5lIEtIWjJQSUNPUyhhKSAoMTAwMDAwMDAwMFVMLyhhKSkKKworc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvIHsKKwlfX3UzMiB4cmVzOwkJCS8qIHZpc2libGUgcmVzb2x1dGlvbgkJKi8KKwlfX3UzMiB5cmVzOworCV9fdTMyIHhyZXNfdmlydHVhbDsJCS8qIHZpcnR1YWwgcmVzb2x1dGlvbgkJKi8KKwlfX3UzMiB5cmVzX3ZpcnR1YWw7CisJX191MzIgeG9mZnNldDsJCQkvKiBvZmZzZXQgZnJvbSB2aXJ0dWFsIHRvIHZpc2libGUgKi8KKwlfX3UzMiB5b2Zmc2V0OwkJCS8qIHJlc29sdXRpb24JCQkqLworCisJX191MzIgYml0c19wZXJfcGl4ZWw7CQkvKiBndWVzcyB3aGF0CQkJKi8KKwlfX3UzMiBncmF5c2NhbGU7CQkvKiAhPSAwIEdyYXlsZXZlbHMgaW5zdGVhZCBvZiBjb2xvcnMgKi8KKworCXN0cnVjdCBmYl9iaXRmaWVsZCByZWQ7CQkvKiBiaXRmaWVsZCBpbiBmYiBtZW0gaWYgdHJ1ZSBjb2xvciwgKi8KKwlzdHJ1Y3QgZmJfYml0ZmllbGQgZ3JlZW47CS8qIGVsc2Ugb25seSBsZW5ndGggaXMgc2lnbmlmaWNhbnQgKi8KKwlzdHJ1Y3QgZmJfYml0ZmllbGQgYmx1ZTsKKwlzdHJ1Y3QgZmJfYml0ZmllbGQgdHJhbnNwOwkvKiB0cmFuc3BhcmVuY3kJCQkqLwkKKworCV9fdTMyIG5vbnN0ZDsJCQkvKiAhPSAwIE5vbiBzdGFuZGFyZCBwaXhlbCBmb3JtYXQgKi8KKworCV9fdTMyIGFjdGl2YXRlOwkJCS8qIHNlZSBGQl9BQ1RJVkFURV8qCQkqLworCisJX191MzIgaGVpZ2h0OwkJCS8qIGhlaWdodCBvZiBwaWN0dXJlIGluIG1tICAgICovCisJX191MzIgd2lkdGg7CQkJLyogd2lkdGggb2YgcGljdHVyZSBpbiBtbSAgICAgKi8KKworCV9fdTMyIGFjY2VsX2ZsYWdzOwkJLyogKE9CU09MRVRFKSBzZWUgZmJfaW5mby5mbGFncyAqLworCisJLyogVGltaW5nOiBBbGwgdmFsdWVzIGluIHBpeGNsb2NrcywgZXhjZXB0IHBpeGNsb2NrIChvZiBjb3Vyc2UpICovCisJX191MzIgcGl4Y2xvY2s7CQkJLyogcGl4ZWwgY2xvY2sgaW4gcHMgKHBpY28gc2Vjb25kcykgKi8KKwlfX3UzMiBsZWZ0X21hcmdpbjsJCS8qIHRpbWUgZnJvbSBzeW5jIHRvIHBpY3R1cmUJKi8KKwlfX3UzMiByaWdodF9tYXJnaW47CQkvKiB0aW1lIGZyb20gcGljdHVyZSB0byBzeW5jCSovCisJX191MzIgdXBwZXJfbWFyZ2luOwkJLyogdGltZSBmcm9tIHN5bmMgdG8gcGljdHVyZQkqLworCV9fdTMyIGxvd2VyX21hcmdpbjsKKwlfX3UzMiBoc3luY19sZW47CQkvKiBsZW5ndGggb2YgaG9yaXpvbnRhbCBzeW5jCSovCisJX191MzIgdnN5bmNfbGVuOwkJLyogbGVuZ3RoIG9mIHZlcnRpY2FsIHN5bmMJKi8KKwlfX3UzMiBzeW5jOwkJCS8qIHNlZSBGQl9TWU5DXyoJCSovCisJX191MzIgdm1vZGU7CQkJLyogc2VlIEZCX1ZNT0RFXyoJCSovCisJX191MzIgcm90YXRlOwkJCS8qIGFuZ2xlIHdlIHJvdGF0ZSBjb3VudGVyIGNsb2Nrd2lzZSAqLworCV9fdTMyIHJlc2VydmVkWzVdOwkJLyogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSBjb21wYXRpYmlsaXR5ICovCit9OworCitzdHJ1Y3QgZmJfY21hcCB7CisJX191MzIgc3RhcnQ7CQkJLyogRmlyc3QgZW50cnkJKi8KKwlfX3UzMiBsZW47CQkJLyogTnVtYmVyIG9mIGVudHJpZXMgKi8KKwlfX3UxNiAqcmVkOwkJCS8qIFJlZCB2YWx1ZXMJKi8KKwlfX3UxNiAqZ3JlZW47CisJX191MTYgKmJsdWU7CisJX191MTYgKnRyYW5zcDsJCQkvKiB0cmFuc3BhcmVuY3ksIGNhbiBiZSBOVUxMICovCit9OworCitzdHJ1Y3QgZmJfY29uMmZibWFwIHsKKwlfX3UzMiBjb25zb2xlOworCV9fdTMyIGZyYW1lYnVmZmVyOworfTsKKworLyogVkVTQSBCbGFua2luZyBMZXZlbHMgKi8KKyNkZWZpbmUgVkVTQV9OT19CTEFOS0lORyAgICAgICAgMAorI2RlZmluZSBWRVNBX1ZTWU5DX1NVU1BFTkQgICAgICAxCisjZGVmaW5lIFZFU0FfSFNZTkNfU1VTUEVORCAgICAgIDIKKyNkZWZpbmUgVkVTQV9QT1dFUkRPV04gICAgICAgICAgMworCisKK2VudW0geworCS8qIHNjcmVlbjogdW5ibGFua2VkLCBoc3luYzogb24sICB2c3luYzogb24gKi8KKwlGQl9CTEFOS19VTkJMQU5LICAgICAgID0gVkVTQV9OT19CTEFOS0lORywKKworCS8qIHNjcmVlbjogYmxhbmtlZCwgICBoc3luYzogb24sICB2c3luYzogb24gKi8KKwlGQl9CTEFOS19OT1JNQUwgICAgICAgID0gVkVTQV9OT19CTEFOS0lORyArIDEsCisKKwkvKiBzY3JlZW46IGJsYW5rZWQsICAgaHN5bmM6IG9uLCAgdnN5bmM6IG9mZiAqLworCUZCX0JMQU5LX1ZTWU5DX1NVU1BFTkQgPSBWRVNBX1ZTWU5DX1NVU1BFTkQgKyAxLAorCisJLyogc2NyZWVuOiBibGFua2VkLCAgIGhzeW5jOiBvZmYsIHZzeW5jOiBvbiAqLworCUZCX0JMQU5LX0hTWU5DX1NVU1BFTkQgPSBWRVNBX0hTWU5DX1NVU1BFTkQgKyAxLAorCisJLyogc2NyZWVuOiBibGFua2VkLCAgIGhzeW5jOiBvZmYsIHZzeW5jOiBvZmYgKi8KKwlGQl9CTEFOS19QT1dFUkRPV04gICAgID0gVkVTQV9QT1dFUkRPV04gKyAxCit9OworCisjZGVmaW5lIEZCX1ZCTEFOS19WQkxBTktJTkcJMHgwMDEJLyogY3VycmVudGx5IGluIGEgdmVydGljYWwgYmxhbmsgKi8KKyNkZWZpbmUgRkJfVkJMQU5LX0hCTEFOS0lORwkweDAwMgkvKiBjdXJyZW50bHkgaW4gYSBob3Jpem9udGFsIGJsYW5rICovCisjZGVmaW5lIEZCX1ZCTEFOS19IQVZFX1ZCTEFOSwkweDAwNAkvKiB2ZXJ0aWNhbCBibGFua3MgY2FuIGJlIGRldGVjdGVkICovCisjZGVmaW5lIEZCX1ZCTEFOS19IQVZFX0hCTEFOSwkweDAwOAkvKiBob3Jpem9udGFsIGJsYW5rcyBjYW4gYmUgZGV0ZWN0ZWQgKi8KKyNkZWZpbmUgRkJfVkJMQU5LX0hBVkVfQ09VTlQJMHgwMTAJLyogZ2xvYmFsIHJldHJhY2UgY291bnRlciBpcyBhdmFpbGFibGUgKi8KKyNkZWZpbmUgRkJfVkJMQU5LX0hBVkVfVkNPVU5UCTB4MDIwCS8qIHRoZSB2Y291bnQgZmllbGQgaXMgdmFsaWQgKi8KKyNkZWZpbmUgRkJfVkJMQU5LX0hBVkVfSENPVU5UCTB4MDQwCS8qIHRoZSBoY291bnQgZmllbGQgaXMgdmFsaWQgKi8KKyNkZWZpbmUgRkJfVkJMQU5LX1ZTWU5DSU5HCTB4MDgwCS8qIGN1cnJlbnRseSBpbiBhIHZzeW5jICovCisjZGVmaW5lIEZCX1ZCTEFOS19IQVZFX1ZTWU5DCTB4MTAwCS8qIHZlcmljYWwgc3luY3MgY2FuIGJlIGRldGVjdGVkICovCisKK3N0cnVjdCBmYl92YmxhbmsgeworCV9fdTMyIGZsYWdzOwkJCS8qIEZCX1ZCTEFOSyBmbGFncyAqLworCV9fdTMyIGNvdW50OwkJCS8qIGNvdW50ZXIgb2YgcmV0cmFjZXMgc2luY2UgYm9vdCAqLworCV9fdTMyIHZjb3VudDsJCQkvKiBjdXJyZW50IHNjYW5saW5lIHBvc2l0aW9uICovCisJX191MzIgaGNvdW50OwkJCS8qIGN1cnJlbnQgc2NhbmRvdCBwb3NpdGlvbiAqLworCV9fdTMyIHJlc2VydmVkWzRdOwkJLyogcmVzZXJ2ZWQgZm9yIGZ1dHVyZSBjb21wYXRpYmlsaXR5ICovCit9OworCisvKiBJbnRlcm5hbCBIVyBhY2NlbCAqLworI2RlZmluZSBST1BfQ09QWSAwCisjZGVmaW5lIFJPUF9YT1IgIDEKKworc3RydWN0IGZiX2NvcHlhcmVhIHsKKwlfX3UzMiBkeDsKKwlfX3UzMiBkeTsKKwlfX3UzMiB3aWR0aDsKKwlfX3UzMiBoZWlnaHQ7CisJX191MzIgc3g7CisJX191MzIgc3k7Cit9OworCitzdHJ1Y3QgZmJfZmlsbHJlY3QgeworCV9fdTMyIGR4OwkvKiBzY3JlZW4tcmVsYXRpdmUgKi8KKwlfX3UzMiBkeTsKKwlfX3UzMiB3aWR0aDsKKwlfX3UzMiBoZWlnaHQ7CisJX191MzIgY29sb3I7CisJX191MzIgcm9wOworfTsKKworc3RydWN0IGZiX2ltYWdlIHsKKwlfX3UzMiBkeDsJCS8qIFdoZXJlIHRvIHBsYWNlIGltYWdlICovCisJX191MzIgZHk7CisJX191MzIgd2lkdGg7CQkvKiBTaXplIG9mIGltYWdlICovCisJX191MzIgaGVpZ2h0OworCV9fdTMyIGZnX2NvbG9yOwkJLyogT25seSB1c2VkIHdoZW4gYSBtb25vIGJpdG1hcCAqLworCV9fdTMyIGJnX2NvbG9yOworCV9fdTggIGRlcHRoOwkJLyogRGVwdGggb2YgdGhlIGltYWdlICovCisJY29uc3QgY2hhciAqZGF0YTsJLyogUG9pbnRlciB0byBpbWFnZSBkYXRhICovCisJc3RydWN0IGZiX2NtYXAgY21hcDsJLyogY29sb3IgbWFwIGluZm8gKi8KK307CisKKy8qCisgKiBoYXJkd2FyZSBjdXJzb3IgY29udHJvbAorICovCisKKyNkZWZpbmUgRkJfQ1VSX1NFVElNQUdFIDB4MDEKKyNkZWZpbmUgRkJfQ1VSX1NFVFBPUyAgIDB4MDIKKyNkZWZpbmUgRkJfQ1VSX1NFVEhPVCAgIDB4MDQKKyNkZWZpbmUgRkJfQ1VSX1NFVENNQVAgIDB4MDgKKyNkZWZpbmUgRkJfQ1VSX1NFVFNIQVBFIDB4MTAKKyNkZWZpbmUgRkJfQ1VSX1NFVFNJWkUJMHgyMAorI2RlZmluZSBGQl9DVVJfU0VUQUxMICAgMHhGRgorCitzdHJ1Y3QgZmJjdXJwb3MgeworCV9fdTE2IHgsIHk7Cit9OworCitzdHJ1Y3QgZmJfY3Vyc29yIHsKKwlfX3UxNiBzZXQ7CQkvKiB3aGF0IHRvIHNldCAqLworCV9fdTE2IGVuYWJsZTsJCS8qIGN1cnNvciBvbi9vZmYgKi8KKwlfX3UxNiByb3A7CQkvKiBiaXRvcCBvcGVyYXRpb24gKi8KKwljb25zdCBjaGFyICptYXNrOwkvKiBjdXJzb3IgbWFzayBiaXRzICovCisJc3RydWN0IGZiY3VycG9zIGhvdDsJLyogY3Vyc29yIGhvdCBzcG90ICovCisJc3RydWN0IGZiX2ltYWdlCWltYWdlOwkvKiBDdXJzb3IgaW1hZ2UgKi8KK307CisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZmc19mc19rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworc3RydWN0IHZtX2FyZWFfc3RydWN0Oworc3RydWN0IGZiX2luZm87CitzdHJ1Y3QgZGV2aWNlOworc3RydWN0IGZpbGU7CisKKy8qIERlZmluaXRpb25zIGJlbG93IGFyZSB1c2VkIGluIHRoZSBwYXJzZWQgbW9uaXRvciBzcGVjcyAqLworI2RlZmluZSBGQl9EUE1TX0FDVElWRV9PRkYJMQorI2RlZmluZSBGQl9EUE1TX1NVU1BFTkQJCTIKKyNkZWZpbmUgRkJfRFBNU19TVEFOREJZCQk0CisKKyNkZWZpbmUgRkJfRElTUF9EREkJCTEKKyNkZWZpbmUgRkJfRElTUF9BTkFfNzAwXzMwMAkyCisjZGVmaW5lIEZCX0RJU1BfQU5BXzcxNF8yODYJNAorI2RlZmluZSBGQl9ESVNQX0FOQV8xMDAwXzQwMAk4CisjZGVmaW5lIEZCX0RJU1BfQU5BXzcwMF8wMDAJMTYKKworI2RlZmluZSBGQl9ESVNQX01PTk8JCTMyCisjZGVmaW5lIEZCX0RJU1BfUkdCCQk2NAorI2RlZmluZSBGQl9ESVNQX01VTFRJCQkxMjgKKyNkZWZpbmUgRkJfRElTUF9VTktOT1dOCQkyNTYKKworI2RlZmluZSBGQl9TSUdOQUxfTk9ORQkJMAorI2RlZmluZSBGQl9TSUdOQUxfQkxBTktfQkxBTksJMQorI2RlZmluZSBGQl9TSUdOQUxfU0VQQVJBVEUJMgorI2RlZmluZSBGQl9TSUdOQUxfQ09NUE9TSVRFCTQKKyNkZWZpbmUgRkJfU0lHTkFMX1NZTkNfT05fR1JFRU4JOAorI2RlZmluZSBGQl9TSUdOQUxfU0VSUkFUSU9OX09OCTE2CisKKyNkZWZpbmUgRkJfTUlTQ19QUklNX0NPTE9SCTEKKyNkZWZpbmUgRkJfTUlTQ18xU1RfREVUQUlMCTIJLyogRmlyc3QgRGV0YWlsZWQgVGltaW5nIGlzIHByZWZlcnJlZCAqLworc3RydWN0IGZiX2Nocm9tYSB7CisJX191MzIgcmVkeDsJLyogaW4gZnJhY3Rpb24gb2YgMTAyNCAqLworCV9fdTMyIGdyZWVueDsKKwlfX3UzMiBibHVleDsKKwlfX3UzMiB3aGl0ZXg7CisJX191MzIgcmVkeTsKKwlfX3UzMiBncmVlbnk7CisJX191MzIgYmx1ZXk7CisJX191MzIgd2hpdGV5OworfTsKKworc3RydWN0IGZiX21vbnNwZWNzIHsKKwlzdHJ1Y3QgZmJfY2hyb21hIGNocm9tYTsKKwlzdHJ1Y3QgZmJfdmlkZW9tb2RlICptb2RlZGI7CS8qIG1vZGUgZGF0YWJhc2UgKi8KKwlfX3U4ICBtYW51ZmFjdHVyZXJbNF07CQkvKiBNYW51ZmFjdHVyZXIgKi8KKwlfX3U4ICBtb25pdG9yWzE0XTsJCS8qIE1vbml0b3IgU3RyaW5nICovCisJX191OCAgc2VyaWFsX25vWzE0XTsJCS8qIFNlcmlhbCBOdW1iZXIgKi8KKwlfX3U4ICBhc2NpaVsxNF07CQkvKiA/ICovCisJX191MzIgbW9kZWRiX2xlbjsJCS8qIG1vZGUgZGF0YWJhc2UgbGVuZ3RoICovCisJX191MzIgbW9kZWw7CQkJLyogTW9uaXRvciBNb2RlbCAqLworCV9fdTMyIHNlcmlhbDsJCQkvKiBTZXJpYWwgTnVtYmVyIC0gSW50ZWdlciAqLworCV9fdTMyIHllYXI7CQkJLyogWWVhciBtYW51ZmFjdHVyZWQgKi8KKwlfX3UzMiB3ZWVrOwkJCS8qIFdlZWsgTWFudWZhY3R1cmVkICovCisJX191MzIgaGZtaW47CQkJLyogaGZyZXEgbG93ZXIgbGltaXQgKEh6KSAqLworCV9fdTMyIGhmbWF4OwkJCS8qIGhmcmVxIHVwcGVyIGxpbWl0IChIeikgKi8KKwlfX3UzMiBkY2xrbWluOwkJCS8qIHBpeGVsY2xvY2sgbG93ZXIgbGltaXQgKEh6KSAqLworCV9fdTMyIGRjbGttYXg7CQkJLyogcGl4ZWxjbG9jayB1cHBlciBsaW1pdCAoSHopICovCisJX191MTYgaW5wdXQ7CQkJLyogZGlzcGxheSB0eXBlIC0gc2VlIEZCX0RJU1BfKiAqLworCV9fdTE2IGRwbXM7CQkJLyogRFBNUyBzdXBwb3J0IC0gc2VlIEZCX0RQTVNfICovCisJX191MTYgc2lnbmFsOwkJCS8qIFNpZ25hbCBUeXBlIC0gc2VlIEZCX1NJR05BTF8qICovCisJX191MTYgdmZtaW47CQkJLyogdmZyZXEgbG93ZXIgbGltaXQgKEh6KSAqLworCV9fdTE2IHZmbWF4OwkJCS8qIHZmcmVxIHVwcGVyIGxpbWl0IChIeikgKi8KKwlfX3UxNiBnYW1tYTsJCQkvKiBHYW1tYSAtIGluIGZyYWN0aW9ucyBvZiAxMDAgKi8KKwlfX3UxNiBndGYJOiAxOwkJLyogc3VwcG9ydHMgR1RGICovCisJX191MTYgbWlzYzsJCQkvKiBNaXNjIGZsYWdzIC0gc2VlIEZCX01JU0NfKiAqLworCV9fdTggIHZlcnNpb247CQkJLyogRURJRCB2ZXJzaW9uLi4uICovCisJX191OCAgcmV2aXNpb247CQkJLyogLi4uYW5kIHJldmlzaW9uICovCisJX191OCAgbWF4X3g7CQkJLyogTWF4aW11bSBob3Jpem9udGFsIHNpemUgKGNtKSAqLworCV9fdTggIG1heF95OwkJCS8qIE1heGltdW0gdmVydGljYWwgc2l6ZSAoY20pICovCit9OworCitzdHJ1Y3QgZmJfY21hcF91c2VyIHsKKwlfX3UzMiBzdGFydDsJCQkvKiBGaXJzdCBlbnRyeQkqLworCV9fdTMyIGxlbjsJCQkvKiBOdW1iZXIgb2YgZW50cmllcyAqLworCV9fdTE2IF9fdXNlciAqcmVkOwkJLyogUmVkIHZhbHVlcwkqLworCV9fdTE2IF9fdXNlciAqZ3JlZW47CisJX191MTYgX191c2VyICpibHVlOworCV9fdTE2IF9fdXNlciAqdHJhbnNwOwkJLyogdHJhbnNwYXJlbmN5LCBjYW4gYmUgTlVMTCAqLworfTsKKworc3RydWN0IGZiX2ltYWdlX3VzZXIgeworCV9fdTMyIGR4OwkJCS8qIFdoZXJlIHRvIHBsYWNlIGltYWdlICovCisJX191MzIgZHk7CisJX191MzIgd2lkdGg7CQkJLyogU2l6ZSBvZiBpbWFnZSAqLworCV9fdTMyIGhlaWdodDsKKwlfX3UzMiBmZ19jb2xvcjsJCQkvKiBPbmx5IHVzZWQgd2hlbiBhIG1vbm8gYml0bWFwICovCisJX191MzIgYmdfY29sb3I7CisJX191OCAgZGVwdGg7CQkJLyogRGVwdGggb2YgdGhlIGltYWdlICovCisJY29uc3QgY2hhciBfX3VzZXIgKmRhdGE7CS8qIFBvaW50ZXIgdG8gaW1hZ2UgZGF0YSAqLworCXN0cnVjdCBmYl9jbWFwX3VzZXIgY21hcDsJLyogY29sb3IgbWFwIGluZm8gKi8KK307CisKK3N0cnVjdCBmYl9jdXJzb3JfdXNlciB7CisJX191MTYgc2V0OwkJCS8qIHdoYXQgdG8gc2V0ICovCisJX191MTYgZW5hYmxlOwkJCS8qIGN1cnNvciBvbi9vZmYgKi8KKwlfX3UxNiByb3A7CQkJLyogYml0b3Agb3BlcmF0aW9uICovCisJY29uc3QgY2hhciBfX3VzZXIgKm1hc2s7CS8qIGN1cnNvciBtYXNrIGJpdHMgKi8KKwlzdHJ1Y3QgZmJjdXJwb3MgaG90OwkJLyogY3Vyc29yIGhvdCBzcG90ICovCisJc3RydWN0IGZiX2ltYWdlX3VzZXIgaW1hZ2U7CS8qIEN1cnNvciBpbWFnZSAqLworfTsKKworLyoKKyAqIFJlZ2lzdGVyL3VucmVnaXN0ZXIgZm9yIGZyYW1lYnVmZmVyIGV2ZW50cworICovCisKKy8qCVRoZSByZXNvbHV0aW9uIG9mIHRoZSBwYXNzZWQgaW4gZmJfaW5mbyBhYm91dCB0byBjaGFuZ2UgKi8gCisjZGVmaW5lIEZCX0VWRU5UX01PREVfQ0hBTkdFCQkweDAxCisvKglUaGUgZGlzcGxheSBvbiB0aGlzIGZiX2luZm8gaXMgYmVlaW5nIHN1c3BlbmRlZCwgbm8gYWNjZXNzIHRvIHRoZQorICoJZnJhbWVidWZmZXIgaXMgYWxsb3dlZCBhbnkgbW9yZSBhZnRlciB0aGF0IGNhbGwgcmV0dXJucworICovCisjZGVmaW5lIEZCX0VWRU5UX1NVU1BFTkQJCTB4MDIKKy8qCVRoZSBkaXNwbGF5IG9uIHRoaXMgZmJfaW5mbyB3YXMgcmVzdW1lZCwgeW91IGNhbiByZXN0b3JlIHRoZSBkaXNwbGF5CisgKglpZiB5b3Ugb3duIGl0CisgKi8KKyNkZWZpbmUgRkJfRVZFTlRfUkVTVU1FCQkJMHgwMworLyogICAgICBBbiBlbnRyeSBmcm9tIHRoZSBtb2RlbGlzdCB3YXMgcmVtb3ZlZCAqLworI2RlZmluZSBGQl9FVkVOVF9NT0RFX0RFTEVURSAgICAgICAgICAgIDB4MDQKKy8qICAgICAgQSBkcml2ZXIgcmVnaXN0ZXJlZCBpdHNlbGYgKi8KKyNkZWZpbmUgRkJfRVZFTlRfRkJfUkVHSVNURVJFRCAgICAgICAgICAweDA1CisvKiAgICAgIGdldCBjb25zb2xlIHRvIGZyYW1lYnVmZmVyIG1hcHBpbmcgKi8KKyNkZWZpbmUgRkJfRVZFTlRfR0VUX0NPTlNPTEVfTUFQICAgICAgICAweDA2CisvKiAgICAgIHNldCBjb25zb2xlIHRvIGZyYW1lYnVmZmVyIG1hcHBpbmcgKi8KKyNkZWZpbmUgRkJfRVZFTlRfU0VUX0NPTlNPTEVfTUFQICAgICAgICAweDA3CisvKiAgICAgIEEgZGlzcGxheSBibGFuayBpcyByZXF1ZXN0ZWQgICAgICAgKi8KKyNkZWZpbmUgRkJfRVZFTlRfQkxBTksgICAgICAgICAgICAgICAgICAweDA4CisvKiAgICAgIFByaXZhdGUgbW9kZWxpc3QgaXMgdG8gYmUgcmVwbGFjZWQgKi8KKyNkZWZpbmUgRkJfRVZFTlRfTkVXX01PREVMSVNUICAgICAgICAgICAweDA5CisKK3N0cnVjdCBmYl9ldmVudCB7CisJc3RydWN0IGZiX2luZm8gKmluZm87CisJdm9pZCAqZGF0YTsKK307CisKKworZXh0ZXJuIGludCBmYl9yZWdpc3Rlcl9jbGllbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7CitleHRlcm4gaW50IGZiX3VucmVnaXN0ZXJfY2xpZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpOworCisvKgorICogUGl4bWFwIHN0cnVjdHVyZSBkZWZpbml0aW9uCisgKgorICogVGhlIHB1cnBvc2Ugb2YgdGhpcyBzdHJ1Y3R1cmUgaXMgdG8gdHJhbnNsYXRlIGRhdGEKKyAqIGZyb20gdGhlIGhhcmR3YXJlIGluZGVwZW5kZW50IGZvcm1hdCBvZiBmYmRldiB0byB3aGF0CisgKiBmb3JtYXQgdGhlIGhhcmR3YXJlIG5lZWRzLgorICovCisKKyNkZWZpbmUgRkJfUElYTUFQX0RFRkFVTFQgMSAgICAgLyogdXNlZCBpbnRlcm5hbGx5IGJ5IGZiY29uICovCisjZGVmaW5lIEZCX1BJWE1BUF9TWVNURU0gIDIgICAgIC8qIG1lbW9yeSBpcyBpbiBzeXN0ZW0gUkFNICAqLworI2RlZmluZSBGQl9QSVhNQVBfSU8gICAgICA0ICAgICAvKiBtZW1vcnkgaXMgaW9tYXBwZWQgICAgICAgKi8KKyNkZWZpbmUgRkJfUElYTUFQX1NZTkMgICAgMjU2ICAgLyogc2V0IGlmIEdQVSBjYW4gRE1BICAgICAgICovCisKK3N0cnVjdCBmYl9waXhtYXAgeworCXU4ICAqYWRkcjsJCS8qIHBvaW50ZXIgdG8gbWVtb3J5CQkJKi8KKwl1MzIgc2l6ZTsJCS8qIHNpemUgb2YgYnVmZmVyIGluIGJ5dGVzCQkqLworCXUzMiBvZmZzZXQ7CQkvKiBjdXJyZW50IG9mZnNldCB0byBidWZmZXIJCSovCisJdTMyIGJ1Zl9hbGlnbjsJCS8qIGJ5dGUgYWxpZ25tZW50IG9mIGVhY2ggYml0bWFwCSovCisJdTMyIHNjYW5fYWxpZ247CQkvKiBhbGlnbm1lbnQgcGVyIHNjYW5saW5lCQkqLworCXUzMiBhY2Nlc3NfYWxpZ247CS8qIGFsaWdubWVudCBwZXIgcmVhZC93cml0ZQkJKi8KKwl1MzIgZmxhZ3M7CQkvKiBzZWUgRkJfUElYTUFQXyoJCQkqLworCS8qIGFjY2VzcyBtZXRob2RzICovCisJdm9pZCAoKm91dGJ1Zikoc3RydWN0IGZiX2luZm8gKmluZm8sIHU4ICphZGRyLCB1OCAqc3JjLCB1bnNpZ25lZCBpbnQgc2l6ZSk7CisJdTggICAoKmluYnVmKSAoc3RydWN0IGZiX2luZm8gKmluZm8sIHU4ICphZGRyKTsKK307CisKKworLyoKKyAqIEZyYW1lIGJ1ZmZlciBvcGVyYXRpb25zCisgKgorICogTE9DS0lORyBOT1RFOiB0aG9zZSBmdW5jdGlvbnMgbXVzdCBfQUxMXyBiZSBjYWxsZWQgd2l0aCB0aGUgY29uc29sZQorICogc2VtYXBob3JlIGhlbGQsIHRoaXMgaXMgdGhlIG9ubHkgc3VpdGFibGUgbG9ja2luZyBtZWNhbmlzbSB3ZSBoYXZlCisgKiBpbiAyLjYuIFNvbWUgbWF5IGJlIGNhbGxlZCBhdCBpbnRlcnJ1cHQgdGltZSBhdCB0aGlzIHBvaW50IHRob3VnaC4KKyAqLworCitzdHJ1Y3QgZmJfb3BzIHsKKwkvKiBvcGVuL3JlbGVhc2UgYW5kIHVzYWdlIG1hcmtpbmcgKi8KKwlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKKwlpbnQgKCpmYl9vcGVuKShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgaW50IHVzZXIpOworCWludCAoKmZiX3JlbGVhc2UpKHN0cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgdXNlcik7CisKKwkvKiBGb3IgZnJhbWVidWZmZXJzIHdpdGggc3RyYW5nZSBub24gbGluZWFyIGxheW91dHMgb3IgdGhhdCBkbyBub3QKKwkgKiB3b3JrIHdpdGggbm9ybWFsIG1lbW9yeSBtYXBwZWQgYWNjZXNzCisJICovCisJc3NpemVfdCAoKmZiX3JlYWQpKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcyk7CisJc3NpemVfdCAoKmZiX3dyaXRlKShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpOworCisJLyogY2hlY2tzIHZhciBhbmQgZXZlbnR1YWxseSB0d2Vha3MgaXQgdG8gc29tZXRoaW5nIHN1cHBvcnRlZCwKKwkgKiBETyBOT1QgTU9ESUZZIFBBUiAqLworCWludCAoKmZiX2NoZWNrX3Zhcikoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsIHN0cnVjdCBmYl9pbmZvICppbmZvKTsKKworCS8qIHNldCB0aGUgdmlkZW8gbW9kZSBhY2NvcmRpbmcgdG8gaW5mby0+dmFyICovCisJaW50ICgqZmJfc2V0X3Bhcikoc3RydWN0IGZiX2luZm8gKmluZm8pOworCisJLyogc2V0IGNvbG9yIHJlZ2lzdGVyICovCisJaW50ICgqZmJfc2V0Y29scmVnKSh1bnNpZ25lZCByZWdubywgdW5zaWduZWQgcmVkLCB1bnNpZ25lZCBncmVlbiwKKwkJCSAgICB1bnNpZ25lZCBibHVlLCB1bnNpZ25lZCB0cmFuc3AsIHN0cnVjdCBmYl9pbmZvICppbmZvKTsKKworCS8qIGJsYW5rIGRpc3BsYXkgKi8KKwlpbnQgKCpmYl9ibGFuaykoaW50IGJsYW5rLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7CisKKwkvKiBwYW4gZGlzcGxheSAqLworCWludCAoKmZiX3Bhbl9kaXNwbGF5KShzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwgc3RydWN0IGZiX2luZm8gKmluZm8pOworCisJLyogRHJhd3MgYSByZWN0YW5nbGUgKi8KKwl2b2lkICgqZmJfZmlsbHJlY3QpIChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgY29uc3Qgc3RydWN0IGZiX2ZpbGxyZWN0ICpyZWN0KTsKKwkvKiBDb3B5IGRhdGEgZnJvbSBhcmVhIHRvIGFub3RoZXIgKi8KKwl2b2lkICgqZmJfY29weWFyZWEpIChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgY29uc3Qgc3RydWN0IGZiX2NvcHlhcmVhICpyZWdpb24pOworCS8qIERyYXdzIGEgaW1hZ2UgdG8gdGhlIGRpc3BsYXkgKi8KKwl2b2lkICgqZmJfaW1hZ2VibGl0KSAoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBmYl9pbWFnZSAqaW1hZ2UpOworCisJLyogRHJhd3MgY3Vyc29yICovCisJaW50ICgqZmJfY3Vyc29yKSAoc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCBmYl9jdXJzb3IgKmN1cnNvcik7CisKKwkvKiBSb3RhdGVzIHRoZSBkaXNwbGF5ICovCisJdm9pZCAoKmZiX3JvdGF0ZSkoc3RydWN0IGZiX2luZm8gKmluZm8sIGludCBhbmdsZSk7CisKKwkvKiB3YWl0IGZvciBibGl0IGlkbGUsIG9wdGlvbmFsICovCisJaW50ICgqZmJfc3luYykoc3RydWN0IGZiX2luZm8gKmluZm8pOworCisJLyogcGVyZm9ybSBmYiBzcGVjaWZpYyBpb2N0bCAob3B0aW9uYWwpICovCisJaW50ICgqZmJfaW9jdGwpKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAorCQkJdW5zaWduZWQgbG9uZyBhcmcsIHN0cnVjdCBmYl9pbmZvICppbmZvKTsKKworCS8qIEhhbmRsZSAzMmJpdCBjb21wYXQgaW9jdGwgKG9wdGlvbmFsKSAqLworCWxvbmcgKCpmYl9jb21wYXRfaW9jdGwpKHN0cnVjdCBmaWxlICpmLCB1bnNpZ25lZCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnLAorCQkJICAgICAgIHN0cnVjdCBmYl9pbmZvICppbmZvKTsKKworCS8qIHBlcmZvcm0gZmIgc3BlY2lmaWMgbW1hcCAqLworCWludCAoKmZiX21tYXApKHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOworfTsKKworI2lmZGVmIENPTkZJR19GQl9USUxFQkxJVFRJTkcKKworI2RlZmluZSBGQl9USUxFX0NVUlNPUl9OT05FICAgICAgICAwCisjZGVmaW5lIEZCX1RJTEVfQ1VSU09SX1VOREVSTElORSAgIDEKKyNkZWZpbmUgRkJfVElMRV9DVVJTT1JfTE9XRVJfVEhJUkQgMgorI2RlZmluZSBGQl9USUxFX0NVUlNPUl9MT1dFUl9IQUxGICAzCisjZGVmaW5lIEZCX1RJTEVfQ1VSU09SX1RXT19USElSRFMgIDQKKyNkZWZpbmUgRkJfVElMRV9DVVJTT1JfQkxPQ0sgICAgICAgNQorCitzdHJ1Y3QgZmJfdGlsZW1hcCB7CisJX191MzIgd2lkdGg7ICAgICAgICAgICAgICAgIC8qIHdpZHRoIG9mIGVhY2ggdGlsZSBpbiBwaXhlbHMgKi8KKwlfX3UzMiBoZWlnaHQ7ICAgICAgICAgICAgICAgLyogaGVpZ2h0IG9mIGVhY2ggdGlsZSBpbiBzY2FubGluZXMgKi8KKwlfX3UzMiBkZXB0aDsgICAgICAgICAgICAgICAgLyogY29sb3IgZGVwdGggb2YgZWFjaCB0aWxlICovCisJX191MzIgbGVuZ3RoOyAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiB0aWxlcyBpbiB0aGUgbWFwICovCisJX191OCAgKmRhdGE7ICAgICAgICAgICAgICAgIC8qIGFjdHVhbCB0aWxlIG1hcDogYSBiaXRtYXAgYXJyYXksIHBhY2tlZAorCQkJCSAgICAgICB0byB0aGUgbmVhcmVzdCBieXRlICovCit9OworCitzdHJ1Y3QgZmJfdGlsZXJlY3QgeworCV9fdTMyIHN4OyAgICAgICAgICAgICAgICAgICAvKiBvcmlnaW4gaW4gdGhlIHgtYXhpcyAqLworCV9fdTMyIHN5OyAgICAgICAgICAgICAgICAgICAvKiBvcmlnaW4gaW4gdGhlIHktYXhpcyAqLworCV9fdTMyIHdpZHRoOyAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgdGlsZXMgaW4gdGhlIHgtYXhpcyAqLworCV9fdTMyIGhlaWdodDsgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgdGlsZXMgaW4gdGhlIHktYXhpcyAqLworCV9fdTMyIGluZGV4OyAgICAgICAgICAgICAgICAvKiB3aGF0IHRpbGUgdG8gdXNlOiBpbmRleCB0byB0aWxlIG1hcCAqLworCV9fdTMyIGZnOyAgICAgICAgICAgICAgICAgICAvKiBmb3JlZ3JvdW5kIGNvbG9yICovCisJX191MzIgYmc7ICAgICAgICAgICAgICAgICAgIC8qIGJhY2tncm91bmQgY29sb3IgKi8KKwlfX3UzMiByb3A7ICAgICAgICAgICAgICAgICAgLyogcmFzdGVyIG9wZXJhdGlvbiAqLworfTsKKworc3RydWN0IGZiX3RpbGVhcmVhIHsKKwlfX3UzMiBzeDsgICAgICAgICAgICAgICAgICAgLyogc291cmNlIG9yaWdpbiBpbiB0aGUgeC1heGlzICovCisJX191MzIgc3k7ICAgICAgICAgICAgICAgICAgIC8qIHNvdXJjZSBvcmlnaW4gaW4gdGhlIHktYXhpcyAqLworCV9fdTMyIGR4OyAgICAgICAgICAgICAgICAgICAvKiBkZXN0aW5hdGlvbiBvcmlnaW4gaW4gdGhlIHgtYXhpcyAqLworCV9fdTMyIGR5OyAgICAgICAgICAgICAgICAgICAvKiBkZXN0aW5hdGlvbiBvcmlnaW4gaW4gdGhlIHktYXhpcyAqLworCV9fdTMyIHdpZHRoOyAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgdGlsZXMgaW4gdGhlIHgtYXhpcyAqLworCV9fdTMyIGhlaWdodDsgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgdGlsZXMgaW4gdGhlIHktYXhpcyAqLworfTsKKworc3RydWN0IGZiX3RpbGVibGl0IHsKKwlfX3UzMiBzeDsgICAgICAgICAgICAgICAgICAgLyogb3JpZ2luIGluIHRoZSB4LWF4aXMgKi8KKwlfX3UzMiBzeTsgICAgICAgICAgICAgICAgICAgLyogb3JpZ2luIGluIHRoZSB5LWF4aXMgKi8KKwlfX3UzMiB3aWR0aDsgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIHRpbGVzIGluIHRoZSB4LWF4aXMgKi8KKwlfX3UzMiBoZWlnaHQ7ICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIHRpbGVzIGluIHRoZSB5LWF4aXMgKi8KKwlfX3UzMiBmZzsgICAgICAgICAgICAgICAgICAgLyogZm9yZWdyb3VuZCBjb2xvciAqLworCV9fdTMyIGJnOyAgICAgICAgICAgICAgICAgICAvKiBiYWNrZ3JvdW5kIGNvbG9yICovCisJX191MzIgbGVuZ3RoOyAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiB0aWxlcyB0byBkcmF3ICovCisJX191MzIgKmluZGljZXM7ICAgICAgICAgICAgIC8qIGFycmF5IG9mIGluZGljZXMgdG8gdGlsZSBtYXAgKi8KK307CisKK3N0cnVjdCBmYl90aWxlY3Vyc29yIHsKKwlfX3UzMiBzeDsgICAgICAgICAgICAgICAgICAgLyogY3Vyc29yIHBvc2l0aW9uIGluIHRoZSB4LWF4aXMgKi8KKwlfX3UzMiBzeTsgICAgICAgICAgICAgICAgICAgLyogY3Vyc29yIHBvc2l0aW9uIGluIHRoZSB5LWF4aXMgKi8KKwlfX3UzMiBtb2RlOyAgICAgICAgICAgICAgICAgLyogMCA9IGVyYXNlLCAxID0gZHJhdyAqLworCV9fdTMyIHNoYXBlOyAgICAgICAgICAgICAgICAvKiBzZWUgRkJfVElMRV9DVVJTT1JfKiAqLworCV9fdTMyIGZnOyAgICAgICAgICAgICAgICAgICAvKiBmb3JlZ3JvdW5kIGNvbG9yICovCisJX191MzIgYmc7ICAgICAgICAgICAgICAgICAgIC8qIGJhY2tncm91bmQgY29sb3IgKi8KK307CisKK3N0cnVjdCBmYl90aWxlX29wcyB7CisJLyogc2V0IHRpbGUgY2hhcmFjdGVyaXN0aWNzICovCisJdm9pZCAoKmZiX3NldHRpbGUpKHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3QgZmJfdGlsZW1hcCAqbWFwKTsKKworCS8qIGFsbCBkaW1lbnNpb25zIGZyb20gaGVyZW9uIGFyZSBpbiB0ZXJtcyBvZiB0aWxlcyAqLworCisJLyogbW92ZSBhIHJlY3Rhbmd1bGFyIHJlZ2lvbiBvZiB0aWxlcyBmcm9tIG9uZSBhcmVhIHRvIGFub3RoZXIqLworCXZvaWQgKCpmYl90aWxlY29weSkoc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCBmYl90aWxlYXJlYSAqYXJlYSk7CisJLyogZmlsbCBhIHJlY3Rhbmd1bGFyIHJlZ2lvbiB3aXRoIGEgdGlsZSAqLworCXZvaWQgKCpmYl90aWxlZmlsbCkoc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCBmYl90aWxlcmVjdCAqcmVjdCk7CisJLyogY29weSBhbiBhcnJheSBvZiB0aWxlcyAqLworCXZvaWQgKCpmYl90aWxlYmxpdCkoc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCBmYl90aWxlYmxpdCAqYmxpdCk7CisJLyogY3Vyc29yICovCisJdm9pZCAoKmZiX3RpbGVjdXJzb3IpKHN0cnVjdCBmYl9pbmZvICppbmZvLAorCQkJICAgICAgc3RydWN0IGZiX3RpbGVjdXJzb3IgKmN1cnNvcik7Cit9OworI2VuZGlmIC8qIENPTkZJR19GQl9USUxFQkxJVFRJTkcgKi8KKworLyogRkJJTkZPXyogPSBmYl9pbmZvLmZsYWdzIGJpdCBmbGFncyAqLworI2RlZmluZSBGQklORk9fTU9EVUxFCQkweDAwMDEJLyogTG93LWxldmVsIGRyaXZlciBpcyBhIG1vZHVsZSAqLworI2RlZmluZSBGQklORk9fSFdBQ0NFTF9ESVNBQkxFRAkweDAwMDIKKwkvKiBXaGVuIEZCSU5GT19IV0FDQ0VMX0RJU0FCTEVEIGlzIHNldDoKKwkgKiAgSGFyZHdhcmUgYWNjZWxlcmF0aW9uIGlzIHR1cm5lZCBvZmYuICBTb2Z0d2FyZSBpbXBsZW1lbnRhdGlvbnMKKwkgKiAgb2YgcmVxdWlyZWQgZnVuY3Rpb25zIChjb3B5YXJlYSgpLCBmaWxscmVjdCgpLCBhbmQgaW1hZ2VibGl0KCkpCisJICogIHRha2VzIG92ZXI7IGFjY2VsZXJhdGlvbiBlbmdpbmUgc2hvdWxkIGJlIGluIGEgcXVpZXNjZW50IHN0YXRlICovCisKKy8qIGhpbnRzICovCisjZGVmaW5lIEZCSU5GT19QQVJUSUFMX1BBTl9PSwkweDAwNDAgLyogb3R3IHVzZSBwYW4gb25seSBmb3IgZG91YmxlLWJ1ZmZlcmluZyAqLworI2RlZmluZSBGQklORk9fUkVBRFNfRkFTVAkweDAwODAgLyogc29mdC1jb3B5IGZhc3RlciB0aGFuIHJlbmRlcmluZyAqLworCisvKiBoYXJkd2FyZSBzdXBwb3J0ZWQgb3BzICovCisvKiAgc2VtYW50aWNzOiB3aGVuIGEgYml0IGlzIHNldCwgaXQgaW5kaWNhdGVzIHRoYXQgdGhlIG9wZXJhdGlvbiBpcworICogICBhY2NlbGVyYXRlZCBieSBoYXJkd2FyZS4KKyAqICByZXF1aXJlZCBmdW5jdGlvbnMgd2lsbCBzdGlsbCB3b3JrIGV2ZW4gaWYgdGhlIGJpdCBpcyBub3Qgc2V0LgorICogIG9wdGlvbmFsIGZ1bmN0aW9ucyBtYXkgbm90IGV2ZW4gZXhpc3QgaWYgdGhlIGZsYWcgYml0IGlzIG5vdCBzZXQuCisgKi8KKyNkZWZpbmUgRkJJTkZPX0hXQUNDRUxfTk9ORQkJMHgwMDAwCisjZGVmaW5lIEZCSU5GT19IV0FDQ0VMX0NPUFlBUkVBCQkweDAxMDAgLyogcmVxdWlyZWQgKi8KKyNkZWZpbmUgRkJJTkZPX0hXQUNDRUxfRklMTFJFQ1QJCTB4MDIwMCAvKiByZXF1aXJlZCAqLworI2RlZmluZSBGQklORk9fSFdBQ0NFTF9JTUFHRUJMSVQJMHgwNDAwIC8qIHJlcXVpcmVkICovCisjZGVmaW5lIEZCSU5GT19IV0FDQ0VMX1JPVEFURQkJMHgwODAwIC8qIG9wdGlvbmFsICovCisjZGVmaW5lIEZCSU5GT19IV0FDQ0VMX1hQQU4JCTB4MTAwMCAvKiBvcHRpb25hbCAqLworI2RlZmluZSBGQklORk9fSFdBQ0NFTF9ZUEFOCQkweDIwMDAgLyogb3B0aW9uYWwgKi8KKyNkZWZpbmUgRkJJTkZPX0hXQUNDRUxfWVdSQVAJCTB4NDAwMCAvKiBvcHRpb25hbCAqLworCisjZGVmaW5lIEZCSU5GT19NSVNDX1VTRVJFVkVOVCAgICAgICAgICAweDEwMDAwIC8qIGV2ZW50IHJlcXVlc3QKKwkJCQkJCSAgZnJvbSB1c2Vyc3BhY2UgKi8KKyNkZWZpbmUgRkJJTkZPX01JU0NfVElMRUJMSVRUSU5HICAgICAgIDB4MjAwMDAgLyogdXNlIHRpbGUgYmxpdHRpbmcgKi8KKworc3RydWN0IGZiX2luZm8geworCWludCBub2RlOworCWludCBmbGFnczsKKwlzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gdmFyOwkvKiBDdXJyZW50IHZhciAqLworCXN0cnVjdCBmYl9maXhfc2NyZWVuaW5mbyBmaXg7CS8qIEN1cnJlbnQgZml4ICovCisJc3RydWN0IGZiX21vbnNwZWNzIG1vbnNwZWNzOwkvKiBDdXJyZW50IE1vbml0b3Igc3BlY3MgKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcXVldWU7CS8qIEZyYW1lYnVmZmVyIGV2ZW50IHF1ZXVlICovCisJc3RydWN0IGZiX3BpeG1hcCBwaXhtYXA7CS8qIEltYWdlIGhhcmR3YXJlIG1hcHBlciAqLworCXN0cnVjdCBmYl9waXhtYXAgc3ByaXRlOwkvKiBDdXJzb3IgaGFyZHdhcmUgbWFwcGVyICovCisJc3RydWN0IGZiX2NtYXAgY21hcDsJCS8qIEN1cnJlbnQgY21hcCAqLworCXN0cnVjdCBsaXN0X2hlYWQgbW9kZWxpc3Q7ICAgICAgLyogbW9kZSBsaXN0ICovCisJc3RydWN0IGZiX3ZpZGVvbW9kZSAqbW9kZTsJLyogY3VycmVudCBtb2RlICovCisJc3RydWN0IGZiX29wcyAqZmJvcHM7CisJc3RydWN0IGRldmljZSAqZGV2aWNlOworCXN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldmljZTsgLyogc3lzZnMgcGVyIGRldmljZSBhdHRycyAqLworI2lmZGVmIENPTkZJR19GQl9USUxFQkxJVFRJTkcKKwlzdHJ1Y3QgZmJfdGlsZV9vcHMgKnRpbGVvcHM7ICAgIC8qIFRpbGUgQmxpdHRpbmcgKi8KKyNlbmRpZgorCWNoYXIgX19pb21lbSAqc2NyZWVuX2Jhc2U7CS8qIFZpcnR1YWwgYWRkcmVzcyAqLworCXVuc2lnbmVkIGxvbmcgc2NyZWVuX3NpemU7CS8qIEFtb3VudCBvZiBpb3JlbWFwcGVkIFZSQU0gb3IgMCAqLyAKKwl2b2lkICpwc2V1ZG9fcGFsZXR0ZTsJCS8qIEZha2UgcGFsZXR0ZSBvZiAxNiBjb2xvcnMgKi8gCisjZGVmaW5lIEZCSU5GT19TVEFURV9SVU5OSU5HCTAKKyNkZWZpbmUgRkJJTkZPX1NUQVRFX1NVU1BFTkRFRAkxCisJdTMyIHN0YXRlOwkJCS8qIEhhcmR3YXJlIHN0YXRlIGkuZSBzdXNwZW5kICovCisJdm9pZCAqZmJjb25fcGFyOyAgICAgICAgICAgICAgICAvKiBmYmNvbiB1c2Utb25seSBwcml2YXRlIGFyZWEgKi8KKwkvKiBGcm9tIGhlcmUgb24gZXZlcnl0aGluZyBpcyBkZXZpY2UgZGVwZW5kZW50ICovCisJdm9pZCAqcGFyOwkKK307CisKKyNpZmRlZiBNT0RVTEUKKyNkZWZpbmUgRkJJTkZPX0RFRkFVTFQJRkJJTkZPX01PRFVMRQorI2Vsc2UKKyNkZWZpbmUgRkJJTkZPX0RFRkFVTFQJMAorI2VuZGlmCisKKy8vIFRoaXMgd2lsbCBnbyBhd2F5CisjZGVmaW5lIEZCSU5GT19GTEFHX01PRFVMRQlGQklORk9fTU9EVUxFCisjZGVmaW5lIEZCSU5GT19GTEFHX0RFRkFVTFQJRkJJTkZPX0RFRkFVTFQKKworLyogVGhpcyB3aWxsIGdvIGF3YXkKKyAqIGZic2V0IGN1cnJlbnRseSBoYWNrcyBpbiBGQl9BQ0NFTEZfVEVYVCBpbnRvIHZhci5hY2NlbF9mbGFncworICogd2hlbiBpdCB3YW50cyB0byB0dXJuIHRoZSBhY2NlbGVyYXRpb24gZW5naW5lIG9uLiAgVGhpcyBpcworICogcmVhbGx5IGEgc2VwYXJhdGUgb3BlcmF0aW9uLCBhbmQgc2hvdWxkIGJlIG1vZGlmaWVkIHZpYSBzeXNmcy4KKyAqICBCdXQgZm9yIG5vdywgd2UgbGVhdmUgaXQgYnJva2VuIHdpdGggdGhlIGZvbGxvd2luZyBkZWZpbmUKKyAqLworI2RlZmluZSBTVFVQSURfQUNDRUxGX1RFWFRfU0hJVAorCisvLyBUaGlzIHdpbGwgZ28gYXdheQorI2lmIGRlZmluZWQoX19zcGFyY19fKQorCisvKiBXZSBtYXAgYWxsIG9mIG91ciBmcmFtZWJ1ZmZlcnMgc3VjaCB0aGF0IGJpZy1lbmRpYW4gYWNjZXNzZXMKKyAqIGFyZSB3aGF0IHdlIHdhbnQsIHNvIHRoZSBmb2xsb3dpbmcgaXMgc3VmZmljaWVudC4KKyAqLworCisvLyBUaGlzIHdpbGwgZ28gYXdheQorI2RlZmluZSBmYl9yZWFkYiBzYnVzX3JlYWRiCisjZGVmaW5lIGZiX3JlYWR3IHNidXNfcmVhZHcKKyNkZWZpbmUgZmJfcmVhZGwgc2J1c19yZWFkbAorI2RlZmluZSBmYl9yZWFkcSBzYnVzX3JlYWRxCisjZGVmaW5lIGZiX3dyaXRlYiBzYnVzX3dyaXRlYgorI2RlZmluZSBmYl93cml0ZXcgc2J1c193cml0ZXcKKyNkZWZpbmUgZmJfd3JpdGVsIHNidXNfd3JpdGVsCisjZGVmaW5lIGZiX3dyaXRlcSBzYnVzX3dyaXRlcQorI2RlZmluZSBmYl9tZW1zZXQgc2J1c19tZW1zZXRfaW8KKworI2VsaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX2FscGhhX18pIHx8IGRlZmluZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZChfX2hwcGFfXykgfHwgKGRlZmluZWQoX19zaF9fKSAmJiAhZGVmaW5lZChfX1NINV9fKSkgfHwgZGVmaW5lZChfX3Bvd2VycGNfXykKKworI2RlZmluZSBmYl9yZWFkYiBfX3Jhd19yZWFkYgorI2RlZmluZSBmYl9yZWFkdyBfX3Jhd19yZWFkdworI2RlZmluZSBmYl9yZWFkbCBfX3Jhd19yZWFkbAorI2RlZmluZSBmYl9yZWFkcSBfX3Jhd19yZWFkcQorI2RlZmluZSBmYl93cml0ZWIgX19yYXdfd3JpdGViCisjZGVmaW5lIGZiX3dyaXRldyBfX3Jhd193cml0ZXcKKyNkZWZpbmUgZmJfd3JpdGVsIF9fcmF3X3dyaXRlbAorI2RlZmluZSBmYl93cml0ZXEgX19yYXdfd3JpdGVxCisjZGVmaW5lIGZiX21lbXNldCBtZW1zZXRfaW8KKworI2Vsc2UKKworI2RlZmluZSBmYl9yZWFkYihhZGRyKSAoKih2b2xhdGlsZSB1OCAqKSAoYWRkcikpCisjZGVmaW5lIGZiX3JlYWR3KGFkZHIpICgqKHZvbGF0aWxlIHUxNiAqKSAoYWRkcikpCisjZGVmaW5lIGZiX3JlYWRsKGFkZHIpICgqKHZvbGF0aWxlIHUzMiAqKSAoYWRkcikpCisjZGVmaW5lIGZiX3JlYWRxKGFkZHIpICgqKHZvbGF0aWxlIHU2NCAqKSAoYWRkcikpCisjZGVmaW5lIGZiX3dyaXRlYihiLGFkZHIpICgqKHZvbGF0aWxlIHU4ICopIChhZGRyKSA9IChiKSkKKyNkZWZpbmUgZmJfd3JpdGV3KGIsYWRkcikgKCoodm9sYXRpbGUgdTE2ICopIChhZGRyKSA9IChiKSkKKyNkZWZpbmUgZmJfd3JpdGVsKGIsYWRkcikgKCoodm9sYXRpbGUgdTMyICopIChhZGRyKSA9IChiKSkKKyNkZWZpbmUgZmJfd3JpdGVxKGIsYWRkcikgKCoodm9sYXRpbGUgdTY0ICopIChhZGRyKSA9IChiKSkKKyNkZWZpbmUgZmJfbWVtc2V0IG1lbXNldAorCisjZW5kaWYKKworICAgIC8qCisgICAgICogIGBHZW5lcmljJyB2ZXJzaW9ucyBvZiB0aGUgZnJhbWUgYnVmZmVyIGRldmljZSBvcGVyYXRpb25zCisgICAgICovCisKK2V4dGVybiBpbnQgZmJfc2V0X3ZhcihzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIpOyAKK2V4dGVybiBpbnQgZmJfcGFuX2Rpc3BsYXkoc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyKTsgCitleHRlcm4gaW50IGZiX2JsYW5rKHN0cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgYmxhbmspOworZXh0ZXJuIGludCBzb2Z0X2N1cnNvcihzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IGZiX2N1cnNvciAqY3Vyc29yKTsKK2V4dGVybiB2b2lkIGNmYl9maWxscmVjdChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgY29uc3Qgc3RydWN0IGZiX2ZpbGxyZWN0ICpyZWN0KTsgCitleHRlcm4gdm9pZCBjZmJfY29weWFyZWEoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBmYl9jb3B5YXJlYSAqYXJlYSk7IAorZXh0ZXJuIHZvaWQgY2ZiX2ltYWdlYmxpdChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgY29uc3Qgc3RydWN0IGZiX2ltYWdlICppbWFnZSk7CisKKy8qIGRyaXZlcnMvdmlkZW8vZmJtZW0uYyAqLworZXh0ZXJuIGludCByZWdpc3Rlcl9mcmFtZWJ1ZmZlcihzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbyk7CitleHRlcm4gaW50IHVucmVnaXN0ZXJfZnJhbWVidWZmZXIoc3RydWN0IGZiX2luZm8gKmZiX2luZm8pOworZXh0ZXJuIGludCBmYl9wcmVwYXJlX2xvZ28oc3RydWN0IGZiX2luZm8gKmZiX2luZm8pOworZXh0ZXJuIGludCBmYl9zaG93X2xvZ28oc3RydWN0IGZiX2luZm8gKmZiX2luZm8pOworZXh0ZXJuIGNoYXIqIGZiX2dldF9idWZmZXJfb2Zmc2V0KHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3QgZmJfcGl4bWFwICpidWYsIHUzMiBzaXplKTsKK2V4dGVybiB2b2lkIGZiX2lvbW92ZV9idWZfdW5hbGlnbmVkKHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3QgZmJfcGl4bWFwICpidWYsCisJCQkJdTggKmRzdCwgdTMyIGRfcGl0Y2gsIHU4ICpzcmMsIHUzMiBpZHgsCisJCQkJdTMyIGhlaWdodCwgdTMyIHNoaWZ0X2hpZ2gsIHUzMiBzaGlmdF9sb3csIHUzMiBtb2QpOworZXh0ZXJuIHZvaWQgZmJfaW9tb3ZlX2J1Zl9hbGlnbmVkKHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3QgZmJfcGl4bWFwICpidWYsCisJCQkJdTggKmRzdCwgdTMyIGRfcGl0Y2gsIHU4ICpzcmMsIHUzMiBzX3BpdGNoLAorCQkJCXUzMiBoZWlnaHQpOworZXh0ZXJuIHZvaWQgZmJfc3lzbW92ZV9idWZfdW5hbGlnbmVkKHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3QgZmJfcGl4bWFwICpidWYsCisJCQkJdTggKmRzdCwgdTMyIGRfcGl0Y2gsIHU4ICpzcmMsIHUzMiBpZHgsCisJCQkJdTMyIGhlaWdodCwgdTMyIHNoaWZ0X2hpZ2gsIHUzMiBzaGlmdF9sb3csIHUzMiBtb2QpOworZXh0ZXJuIHZvaWQgZmJfc3lzbW92ZV9idWZfYWxpZ25lZChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IGZiX3BpeG1hcCAqYnVmLAorCQkJCXU4ICpkc3QsIHUzMiBkX3BpdGNoLCB1OCAqc3JjLCB1MzIgc19waXRjaCwKKwkJCQl1MzIgaGVpZ2h0KTsKK2V4dGVybiB2b2lkIGZiX3NldF9zdXNwZW5kKHN0cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgc3RhdGUpOworZXh0ZXJuIGludCBmYl9nZXRfY29sb3JfZGVwdGgoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIpOworZXh0ZXJuIGludCBmYl9nZXRfb3B0aW9ucyhjaGFyICpuYW1lLCBjaGFyICoqb3B0aW9uKTsKK2V4dGVybiBpbnQgZmJfbmV3X21vZGVsaXN0KHN0cnVjdCBmYl9pbmZvICppbmZvKTsKKworZXh0ZXJuIHN0cnVjdCBmYl9pbmZvICpyZWdpc3RlcmVkX2ZiW0ZCX01BWF07CitleHRlcm4gaW50IG51bV9yZWdpc3RlcmVkX2ZiOworCisvKiBkcml2ZXJzL3ZpZGVvL2Zic3lzZnMuYyAqLworZXh0ZXJuIHN0cnVjdCBmYl9pbmZvICpmcmFtZWJ1ZmZlcl9hbGxvYyhzaXplX3Qgc2l6ZSwgc3RydWN0IGRldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIGZyYW1lYnVmZmVyX3JlbGVhc2Uoc3RydWN0IGZiX2luZm8gKmluZm8pOworZXh0ZXJuIGludCBmYl9pbml0X2NsYXNzX2RldmljZShzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbyk7CitleHRlcm4gdm9pZCBmYl9jbGVhbnVwX2NsYXNzX2RldmljZShzdHJ1Y3QgZmJfaW5mbyAqaGVhZCk7CisKKy8qIGRyaXZlcnMvdmlkZW8vZmJtb24uYyAqLworI2RlZmluZSBGQl9NQVhUSU1JTkdTCQkwCisjZGVmaW5lIEZCX1ZTWU5DVElNSU5HUwkJMQorI2RlZmluZSBGQl9IU1lOQ1RJTUlOR1MJCTIKKyNkZWZpbmUgRkJfRENMS1RJTUlOR1MJCTMKKyNkZWZpbmUgRkJfSUdOT1JFTU9OCQkweDEwMAorCisjZGVmaW5lIEZCX01PREVfSVNfVU5LTk9XTgkwCisjZGVmaW5lIEZCX01PREVfSVNfREVUQUlMRUQJMQorI2RlZmluZSBGQl9NT0RFX0lTX1NUQU5EQVJECTIKKyNkZWZpbmUgRkJfTU9ERV9JU19WRVNBCQk0CisjZGVmaW5lIEZCX01PREVfSVNfQ0FMQ1VMQVRFRAk4CisjZGVmaW5lIEZCX01PREVfSVNfRklSU1QJMTYKKyNkZWZpbmUgRkJfTU9ERV9JU19GUk9NX1ZBUiAgICAgMzIKKworZXh0ZXJuIGludCBmYm1vbl92YWxpZF90aW1pbmdzKHVfaW50IHBpeGNsb2NrLCB1X2ludCBodG90YWwsIHVfaW50IHZ0b3RhbCwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbyk7CitleHRlcm4gaW50IGZibW9uX2RwbXMoY29uc3Qgc3RydWN0IGZiX2luZm8gKmZiX2luZm8pOworZXh0ZXJuIGludCBmYl9nZXRfbW9kZShpbnQgZmxhZ3MsIHUzMiB2YWwsIHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAorCQkgICAgICAgc3RydWN0IGZiX2luZm8gKmluZm8pOworZXh0ZXJuIGludCBmYl92YWxpZGF0ZV9tb2RlKGNvbnN0IHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAorCQkJICAgIHN0cnVjdCBmYl9pbmZvICppbmZvKTsKK2V4dGVybiBpbnQgZmJfcGFyc2VfZWRpZCh1bnNpZ25lZCBjaGFyICplZGlkLCBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhcik7CitleHRlcm4gdm9pZCBmYl9lZGlkX3RvX21vbnNwZWNzKHVuc2lnbmVkIGNoYXIgKmVkaWQsIHN0cnVjdCBmYl9tb25zcGVjcyAqc3BlY3MpOworZXh0ZXJuIHZvaWQgZmJfZGVzdHJveV9tb2RlZGIoc3RydWN0IGZiX3ZpZGVvbW9kZSAqbW9kZWRiKTsKKworLyogZHJpdmVycy92aWRlby9tb2RlZGIuYyAqLworI2RlZmluZSBWRVNBX01PREVEQl9TSVpFIDM0CitleHRlcm4gdm9pZCBmYl92YXJfdG9fdmlkZW9tb2RlKHN0cnVjdCBmYl92aWRlb21vZGUgKm1vZGUsCisJCQkJc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIpOworZXh0ZXJuIHZvaWQgZmJfdmlkZW9tb2RlX3RvX3ZhcihzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKKwkJCQlzdHJ1Y3QgZmJfdmlkZW9tb2RlICptb2RlKTsKK2V4dGVybiBpbnQgZmJfbW9kZV9pc19lcXVhbChzdHJ1Y3QgZmJfdmlkZW9tb2RlICptb2RlMSwKKwkJCSAgICBzdHJ1Y3QgZmJfdmlkZW9tb2RlICptb2RlMik7CitleHRlcm4gaW50IGZiX2FkZF92aWRlb21vZGUoc3RydWN0IGZiX3ZpZGVvbW9kZSAqbW9kZSwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCk7CitleHRlcm4gdm9pZCBmYl9kZWxldGVfdmlkZW9tb2RlKHN0cnVjdCBmYl92aWRlb21vZGUgKm1vZGUsCisJCQkJc3RydWN0IGxpc3RfaGVhZCAqaGVhZCk7CitleHRlcm4gc3RydWN0IGZiX3ZpZGVvbW9kZSAqZmJfbWF0Y2hfbW9kZShzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKKwkJCQkJICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKTsKK2V4dGVybiBzdHJ1Y3QgZmJfdmlkZW9tb2RlICpmYl9maW5kX2Jlc3RfbW9kZShzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKKwkJCQkJICAgICAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCk7CitleHRlcm4gc3RydWN0IGZiX3ZpZGVvbW9kZSAqZmJfZmluZF9uZWFyZXN0X21vZGUoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsCisJCQkJCQkgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCk7CitleHRlcm4gdm9pZCBmYl9kZXN0cm95X21vZGVsaXN0KHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpOworZXh0ZXJuIHZvaWQgZmJfdmlkZW9tb2RlX3RvX21vZGVsaXN0KHN0cnVjdCBmYl92aWRlb21vZGUgKm1vZGVkYiwgaW50IG51bSwKKwkJCQkgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpOworCisvKiBkcml2ZXJzL3ZpZGVvL2ZiY21hcC5jICovCitleHRlcm4gaW50IGZiX2FsbG9jX2NtYXAoc3RydWN0IGZiX2NtYXAgKmNtYXAsIGludCBsZW4sIGludCB0cmFuc3ApOworZXh0ZXJuIHZvaWQgZmJfZGVhbGxvY19jbWFwKHN0cnVjdCBmYl9jbWFwICpjbWFwKTsKK2V4dGVybiBpbnQgZmJfY29weV9jbWFwKHN0cnVjdCBmYl9jbWFwICpmcm9tLCBzdHJ1Y3QgZmJfY21hcCAqdG8pOworZXh0ZXJuIGludCBmYl9jbWFwX3RvX3VzZXIoc3RydWN0IGZiX2NtYXAgKmZyb20sIHN0cnVjdCBmYl9jbWFwX3VzZXIgKnRvKTsKK2V4dGVybiBpbnQgZmJfc2V0X2NtYXAoc3RydWN0IGZiX2NtYXAgKmNtYXAsIHN0cnVjdCBmYl9pbmZvICpmYl9pbmZvKTsKK2V4dGVybiBpbnQgZmJfc2V0X3VzZXJfY21hcChzdHJ1Y3QgZmJfY21hcF91c2VyICpjbWFwLCBzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbyk7CitleHRlcm4gc3RydWN0IGZiX2NtYXAgKmZiX2RlZmF1bHRfY21hcChpbnQgbGVuKTsKK2V4dGVybiB2b2lkIGZiX2ludmVydF9jbWFwcyh2b2lkKTsKKworc3RydWN0IGZiX3ZpZGVvbW9kZSB7CisJY29uc3QgY2hhciAqbmFtZTsJLyogb3B0aW9uYWwgKi8KKwl1MzIgcmVmcmVzaDsJCS8qIG9wdGlvbmFsICovCisJdTMyIHhyZXM7CisJdTMyIHlyZXM7CisJdTMyIHBpeGNsb2NrOworCXUzMiBsZWZ0X21hcmdpbjsKKwl1MzIgcmlnaHRfbWFyZ2luOworCXUzMiB1cHBlcl9tYXJnaW47CisJdTMyIGxvd2VyX21hcmdpbjsKKwl1MzIgaHN5bmNfbGVuOworCXUzMiB2c3luY19sZW47CisJdTMyIHN5bmM7CisJdTMyIHZtb2RlOworCXUzMiBmbGFnOworfTsKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBmYl92aWRlb21vZGUgdmVzYV9tb2Rlc1tdOworCitzdHJ1Y3QgZmJfbW9kZWxpc3QgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3QgZmJfdmlkZW9tb2RlIG1vZGU7Cit9OworCitleHRlcm4gaW50IGZiX2ZpbmRfbW9kZShzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKKwkJCXN0cnVjdCBmYl9pbmZvICppbmZvLCBjb25zdCBjaGFyICptb2RlX29wdGlvbiwKKwkJCWNvbnN0IHN0cnVjdCBmYl92aWRlb21vZGUgKmRiLAorCQkJdW5zaWduZWQgaW50IGRic2l6ZSwKKwkJCWNvbnN0IHN0cnVjdCBmYl92aWRlb21vZGUgKmRlZmF1bHRfbW9kZSwKKwkJCXVuc2lnbmVkIGludCBkZWZhdWx0X2JwcCk7CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfTElOVVhfRkJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mY2RldmljZS5oIGIvaW5jbHVkZS9saW51eC9mY2RldmljZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0NjBlZjgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2ZjZGV2aWNlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIElORVQJCUFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBUQ1AvSVAgcHJvdG9jb2wgc3VpdGUgZm9yIHRoZSBMSU5VWAorICoJCW9wZXJhdGluZyBzeXN0ZW0uICBORVQgIGlzIGltcGxlbWVudGVkIHVzaW5nIHRoZSAgQlNEIFNvY2tldAorICoJCWludGVyZmFjZSBhcyB0aGUgbWVhbnMgb2YgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSB1c2VyIGxldmVsLgorICoKKyAqCQlEZWZpbml0aW9ucyBmb3IgdGhlIEZpYnJlIENoYW5uZWwgaGFuZGxlcnMuCisgKgorICogVmVyc2lvbjoJQCgjKWZjZGV2aWNlLmgJMS4wLjAJMDkvMjYvOTgKKyAqCisgKiBBdXRob3JzOglWaW5lZXQgQWJyYWhhbSA8dm1hQGlvbC51bmguZWR1PgorICoKKyAqCQlSZWxvY2F0ZWQgdG8gaW5jbHVkZS9saW51eCB3aGVyZSBpdCBiZWxvbmdzIGJ5IEFsYW4gQ294IAorICoJCQkJCQkJPGd3NHB0c0BndzRwdHMuYW1wci5vcmc+CisgKgorICoJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCQltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICoJCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICoJCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICoJV0FSTklORzogVGhpcyBtb3ZlIG1heSB3ZWxsIGJlIHRlbXBvcmFyeS4gVGhpcyBmaWxlIHdpbGwgZ2V0IG1lcmdlZCB3aXRoIG90aGVycyBSU04uCisgKgorICovCisjaWZuZGVmIF9MSU5VWF9GQ0RFVklDRV9ICisjZGVmaW5lIF9MSU5VWF9GQ0RFVklDRV9ICisKKworI2luY2x1ZGUgPGxpbnV4L2lmX2ZjLmg+CisKKyNpZmRlZiBfX0tFUk5FTF9fCitleHRlcm4gc3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX2ZjZGV2KGludCBzaXplb2ZfcHJpdik7CisjZW5kaWYKKworI2VuZGlmCS8qIF9MSU5VWF9GQ0RFVklDRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZjbnRsLmggYi9pbmNsdWRlL2xpbnV4L2ZjbnRsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA0ZmI3NgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvZmNudGwuaApAQCAtMCwwICsxLDUwIEBACisjaWZuZGVmIF9MSU5VWF9GQ05UTF9ICisjZGVmaW5lIF9MSU5VWF9GQ05UTF9ICisKKyNpbmNsdWRlIDxhc20vZmNudGwuaD4KKworI2RlZmluZSBGX1NFVExFQVNFCShGX0xJTlVYX1NQRUNJRklDX0JBU0UrMCkKKyNkZWZpbmUgRl9HRVRMRUFTRQkoRl9MSU5VWF9TUEVDSUZJQ19CQVNFKzEpCisKKy8qCisgKiBSZXF1ZXN0IG5vZmljYXRpb25zIG9uIGEgZGlyZWN0b3J5LgorICogU2VlIGJlbG93IGZvciBldmVudHMgdGhhdCBtYXkgYmUgbm90aWZpZWQuCisgKi8KKyNkZWZpbmUgRl9OT1RJRlkJKEZfTElOVVhfU1BFQ0lGSUNfQkFTRSsyKQorCisvKgorICogVHlwZXMgb2YgZGlyZWN0b3J5IG5vdGlmaWNhdGlvbnMgdGhhdCBtYXkgYmUgcmVxdWVzdGVkLgorICovCisjZGVmaW5lIEROX0FDQ0VTUwkweDAwMDAwMDAxCS8qIEZpbGUgYWNjZXNzZWQgKi8KKyNkZWZpbmUgRE5fTU9ESUZZCTB4MDAwMDAwMDIJLyogRmlsZSBtb2RpZmllZCAqLworI2RlZmluZSBETl9DUkVBVEUJMHgwMDAwMDAwNAkvKiBGaWxlIGNyZWF0ZWQgKi8KKyNkZWZpbmUgRE5fREVMRVRFCTB4MDAwMDAwMDgJLyogRmlsZSByZW1vdmVkICovCisjZGVmaW5lIEROX1JFTkFNRQkweDAwMDAwMDEwCS8qIEZpbGUgcmVuYW1lZCAqLworI2RlZmluZSBETl9BVFRSSUIJMHgwMDAwMDAyMAkvKiBGaWxlIGNoYW5nZWQgYXR0aWJ1dGVzICovCisjZGVmaW5lIEROX01VTFRJU0hPVAkweDgwMDAwMDAwCS8qIERvbid0IHJlbW92ZSBub3RpZmllciAqLworCisjaWZkZWYgX19LRVJORUxfXworCisjaWYgQklUU19QRVJfTE9ORyA9PSAzMgorI2RlZmluZSBJU19HRVRMSzMyKGNtZCkJCSgoY21kKSA9PSBGX0dFVExLKQorI2RlZmluZSBJU19TRVRMSzMyKGNtZCkJCSgoY21kKSA9PSBGX1NFVExLKQorI2RlZmluZSBJU19TRVRMS1czMihjbWQpCSgoY21kKSA9PSBGX1NFVExLVykKKyNkZWZpbmUgSVNfR0VUTEs2NChjbWQpCQkoKGNtZCkgPT0gRl9HRVRMSzY0KQorI2RlZmluZSBJU19TRVRMSzY0KGNtZCkJCSgoY21kKSA9PSBGX1NFVExLNjQpCisjZGVmaW5lIElTX1NFVExLVzY0KGNtZCkJKChjbWQpID09IEZfU0VUTEtXNjQpCisjZWxzZQorI2RlZmluZSBJU19HRVRMSzMyKGNtZCkJCSgwKQorI2RlZmluZSBJU19TRVRMSzMyKGNtZCkJCSgwKQorI2RlZmluZSBJU19TRVRMS1czMihjbWQpCSgwKQorI2RlZmluZSBJU19HRVRMSzY0KGNtZCkJCSgoY21kKSA9PSBGX0dFVExLKQorI2RlZmluZSBJU19TRVRMSzY0KGNtZCkJCSgoY21kKSA9PSBGX1NFVExLKQorI2RlZmluZSBJU19TRVRMS1c2NChjbWQpCSgoY21kKSA9PSBGX1NFVExLVykKKyNlbmRpZiAvKiBCSVRTX1BFUl9MT05HID09IDMyICovCisKKyNkZWZpbmUgSVNfR0VUTEsoY21kKQkoSVNfR0VUTEszMihjbWQpICB8fCBJU19HRVRMSzY0KGNtZCkpCisjZGVmaW5lIElTX1NFVExLKGNtZCkJKElTX1NFVExLMzIoY21kKSAgfHwgSVNfU0VUTEs2NChjbWQpKQorI2RlZmluZSBJU19TRVRMS1coY21kKQkoSVNfU0VUTEtXMzIoY21kKSB8fCBJU19TRVRMS1c2NChjbWQpKQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmQuaCBiL2luY2x1ZGUvbGludXgvZmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmJkNDFkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9mZC5oCkBAIC0wLDAgKzEsMzc0IEBACisjaWZuZGVmIF9MSU5VWF9GRF9ICisjZGVmaW5lIF9MSU5VWF9GRF9ICisKKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisKKy8qIE5ldyBmaWxlIGxheW91dDogTm93IHRoZSBpb2N0bCBkZWZpbml0aW9ucyBpbW1lZGlhdGVseSBmb2xsb3cgdGhlCisgKiBkZWZpbml0aW9ucyBvZiB0aGUgc3RydWN0dXJlcyB0aGF0IHRoZXkgdXNlICovCisKKy8qCisgKiBHZW9tZXRyeQorICovCitzdHJ1Y3QgZmxvcHB5X3N0cnVjdCB7CisJdW5zaWduZWQgaW50CXNpemUsCQkvKiBuciBvZiBzZWN0b3JzIHRvdGFsICovCisJCQlzZWN0LAkJLyogc2VjdG9ycyBwZXIgdHJhY2sgKi8KKwkJCWhlYWQsCQkvKiBuciBvZiBoZWFkcyAqLworCQkJdHJhY2ssCQkvKiBuciBvZiB0cmFja3MgKi8KKwkJCXN0cmV0Y2g7CS8qICE9MCBtZWFucyBkb3VibGUgdHJhY2sgc3RlcHMgKi8KKyNkZWZpbmUgRkRfU1RSRVRDSCAxCisjZGVmaW5lIEZEX1NXQVBTSURFUyAyCisjZGVmaW5lIEZEX1pFUk9CQVNFRCA0CisKKwl1bnNpZ25lZCBjaGFyCWdhcCwJCS8qIGdhcDEgc2l6ZSAqLworCisJCQlyYXRlLAkJLyogZGF0YSByYXRlLiB8PSAweDQwIGZvciBwZXJwZW5kaWN1bGFyICovCisjZGVmaW5lIEZEXzJNIDB4NAorI2RlZmluZSBGRF9TSVpFQ09ERU1BU0sgMHgzOAorI2RlZmluZSBGRF9TSVpFQ09ERShmbG9wcHkpICgoKCgoZmxvcHB5KS0+cmF0ZSZGRF9TSVpFQ09ERU1BU0spPj4gMykrIDIpICU4KQorI2RlZmluZSBGRF9TRUNUU0laRShmbG9wcHkpICggKGZsb3BweSktPnJhdGUgJiBGRF8yTSA/IFwKKwkJCSAgICAgNTEyIDogMTI4IDw8IEZEX1NJWkVDT0RFKGZsb3BweSkgKQorI2RlZmluZSBGRF9QRVJQIDB4NDAKKworCQkJc3BlYzEsCQkvKiBzdGVwcGluZyByYXRlLCBoZWFkIHVubG9hZCB0aW1lICovCisJCQlmbXRfZ2FwOwkvKiBnYXAyIHNpemUgKi8KKwljb25zdCBjaGFyCSogbmFtZTsgLyogdXNlZCBvbmx5IGZvciBwcmVkZWZpbmVkIGZvcm1hdHMgKi8KK307CisKKworLyogY29tbWFuZHMgbmVlZGluZyB3cml0ZSBhY2Nlc3MgaGF2ZSAweDQwIHNldCAqLworLyogY29tbWFuZHMgbmVlZGluZyBzdXBlciB1c2VyIGFjY2VzcyBoYXZlIDB4ODAgc2V0ICovCisKKyNkZWZpbmUgRkRDTFJQUk0gX0lPKDIsIDB4NDEpCisvKiBjbGVhciB1c2VyLWRlZmluZWQgcGFyYW1ldGVycyAqLworCisjZGVmaW5lIEZEU0VUUFJNIF9JT1coMiwgMHg0Miwgc3RydWN0IGZsb3BweV9zdHJ1Y3QpIAorI2RlZmluZSBGRFNFVE1FRElBUFJNIEZEU0VUUFJNCisvKiBzZXQgdXNlci1kZWZpbmVkIHBhcmFtZXRlcnMgZm9yIGN1cnJlbnQgbWVkaWEgKi8KKworI2RlZmluZSBGRERFRlBSTSBfSU9XKDIsIDB4NDMsIHN0cnVjdCBmbG9wcHlfc3RydWN0KSAKKyNkZWZpbmUgRkRHRVRQUk0gX0lPUigyLCAweDA0LCBzdHJ1Y3QgZmxvcHB5X3N0cnVjdCkKKyNkZWZpbmUgRkRERUZNRURJQVBSTSBGRERFRlBSTQorI2RlZmluZSBGREdFVE1FRElBUFJNIEZER0VUUFJNCisvKiBzZXQvZ2V0IGRpc2sgcGFyYW1ldGVycyAqLworCisKKyNkZWZpbmUJRkRNU0dPTiAgX0lPKDIsMHg0NSkKKyNkZWZpbmUJRkRNU0dPRkYgX0lPKDIsMHg0NikKKy8qIGlzc3VlL2Rvbid0IGlzc3VlIGtlcm5lbCBtZXNzYWdlcyBvbiBtZWRpYSB0eXBlIGNoYW5nZSAqLworCisKKy8qIAorICogRm9ybWF0dGluZyAob2Jzb2xldGUpCisgKi8KKyNkZWZpbmUgRkRfRklMTF9CWVRFIDB4RjYgLyogZm9ybWF0IGZpbGwgYnl0ZS4gKi8KKworc3RydWN0IGZvcm1hdF9kZXNjciB7CisJdW5zaWduZWQgaW50IGRldmljZSxoZWFkLHRyYWNrOworfTsKKworI2RlZmluZSBGREZNVEJFRyBfSU8oMiwweDQ3KQorLyogYmVnaW4gZm9ybWF0dGluZyBhIGRpc2sgKi8KKyNkZWZpbmUJRkRGTVRUUksgX0lPVygyLDB4NDgsIHN0cnVjdCBmb3JtYXRfZGVzY3IpCisvKiBmb3JtYXQgdGhlIHNwZWNpZmllZCB0cmFjayAqLworI2RlZmluZSBGREZNVEVORCBfSU8oMiwweDQ5KQorLyogZW5kIGZvcm1hdHRpbmcgYSBkaXNrICovCisKKworLyoKKyAqIEVycm9yIHRocmVzaG9sZHMKKyAqLworc3RydWN0IGZsb3BweV9tYXhfZXJyb3JzIHsKKwl1bnNpZ25lZCBpbnQKKwkgIGFib3J0LCAgICAgIC8qIG51bWJlciBvZiBlcnJvcnMgdG8gYmUgcmVhY2hlZCBiZWZvcmUgYWJvcnRpbmcgKi8KKwkgIHJlYWRfdHJhY2ssIC8qIG1heGltYWwgbnVtYmVyIG9mIGVycm9ycyBwZXJtaXR0ZWQgdG8gcmVhZCBhbgorCQkgICAgICAgKiBlbnRpcmUgdHJhY2sgYXQgb25jZSAqLworCSAgcmVzZXQsICAgICAgLyogbWF4aW1hbCBudW1iZXIgb2YgZXJyb3JzIGJlZm9yZSBhIHJlc2V0IGlzIHRyaWVkICovCisJICByZWNhbCwgICAgICAvKiBtYXhpbWFsIG51bWJlciBvZiBlcnJvcnMgYmVmb3JlIGEgcmVjYWxpYnJhdGUgaXMKKwkJICAgICAgICogdHJpZWQgKi8KKworCSAgLyoKKwkgICAqIFRocmVzaG9sZCBmb3IgcmVwb3J0aW5nIEZEQyBlcnJvcnMgdG8gdGhlIGNvbnNvbGUuCisJICAgKiBTZXR0aW5nIHRoaXMgdG8gemVybyBtYXkgZmxvb2QgeW91ciBzY3JlZW4gd2hlbiB1c2luZworCSAgICogdWx0cmEgY2hlYXAgZmxvcHBpZXMgOy0pCisJICAgKi8KKwkgIHJlcG9ydGluZzsKKworfTsKKworI2RlZmluZSBGRFNFVEVNU0dUUkVTSAlfSU8oMiwweDRhKQorLyogc2V0IGZkYyBlcnJvciByZXBvcnRpbmcgdGhyZXNob2xkICovCisKKyNkZWZpbmUgRkRGTFVTSCAgX0lPKDIsMHg0YikKKy8qIGZsdXNoIGJ1ZmZlcnMgZm9yIG1lZGlhOyBlaXRoZXIgZm9yIHZlcmlmeWluZyBtZWRpYSwgb3IgZm9yCisgKiBoYW5kbGluZyBhIG1lZGlhIGNoYW5nZSB3aXRob3V0IGNsb3NpbmcgdGhlIGZpbGUgZGVzY3JpcHRvciAqLworCisjZGVmaW5lIEZEU0VUTUFYRVJSUyBfSU9XKDIsIDB4NGMsIHN0cnVjdCBmbG9wcHlfbWF4X2Vycm9ycykKKyNkZWZpbmUgRkRHRVRNQVhFUlJTIF9JT1IoMiwgMHgwZSwgc3RydWN0IGZsb3BweV9tYXhfZXJyb3JzKQorLyogc2V0L2dldCBhYm9ydGlvbiBhbmQgcmVhZF90cmFjayB0aHJlc2hvbGQuIFNlZSBhbHNvIGZsb3BweV9kcml2ZV9wYXJhbXMKKyAqIHN0cnVjdHVyZSAqLworCisKK3R5cGVkZWYgY2hhciBmbG9wcHlfZHJpdmVfbmFtZVsxNl07CisjZGVmaW5lIEZER0VURFJWVFlQIF9JT1IoMiwgMHgwZiwgZmxvcHB5X2RyaXZlX25hbWUpCisvKiBnZXQgZHJpdmUgdHlwZTogNSAxLzQgb3IgMyAxLzIgKi8KKworCisvKgorICogRHJpdmUgcGFyYW1ldGVycyAodXNlciBtb2RpZmlhYmxlKQorICovCitzdHJ1Y3QgZmxvcHB5X2RyaXZlX3BhcmFtcyB7CisJc2lnbmVkIGNoYXIgY21vczsJCS8qIENNT1MgdHlwZSAqLworCQorCS8qIFNwZWMyIGlzIChITEQ8PDEgfCBORCksIHdoZXJlIEhMRCBpcyBoZWFkIGxvYWQgdGltZSAoMT0ybXMsIDI9NCBtcyAKKwkgKiBldGMpIGFuZCBORCBpcyBzZXQgbWVhbnMgbm8gRE1BLiBIYXJkY29kZWQgdG8gNiAoSExEPTZtcywgdXNlIERNQSkuCisJICovCisJdW5zaWduZWQgbG9uZyBtYXhfZHRyOwkJLyogU3RlcCByYXRlLCB1c2VjICovCisJdW5zaWduZWQgbG9uZyBobHQ7ICAgICAJCS8qIEhlYWQgbG9hZC9zZXR0bGUgdGltZSwgbXNlYyAqLworCXVuc2lnbmVkIGxvbmcgaHV0OyAgICAgCQkvKiBIZWFkIHVubG9hZCB0aW1lIChyZW1uYW50IG9mIAorCQkJCQkgKiA4IiBkcml2ZXMpICovCisJdW5zaWduZWQgbG9uZyBzcnQ7ICAgICAJCS8qIFN0ZXAgcmF0ZSwgdXNlYyAqLworCisJdW5zaWduZWQgbG9uZyBzcGludXA7CQkvKiB0aW1lIG5lZWRlZCBmb3Igc3BpbnVwIChleHByZXNzZWQKKwkJCQkJICogaW4gamlmZmllcykgKi8KKwl1bnNpZ25lZCBsb25nIHNwaW5kb3duOwkJLyogdGltZW91dCBuZWVkZWQgZm9yIHNwaW5kb3duICovCisJdW5zaWduZWQgY2hhciBzcGluZG93bl9vZmZzZXQ7CS8qIGRlY2lkZXMgaW4gd2hpY2ggcG9zaXRpb24gdGhlIGRpc2sKKwkJCQkJICogd2lsbCBzdG9wICovCisJdW5zaWduZWQgY2hhciBzZWxlY3RfZGVsYXk7CS8qIGRlbGF5IHRvIHdhaXQgYWZ0ZXIgc2VsZWN0ICovCisJdW5zaWduZWQgY2hhciBycHM7CQkvKiByb3RhdGlvbnMgcGVyIHNlY29uZCAqLworCXVuc2lnbmVkIGNoYXIgdHJhY2tzOwkJLyogbWF4aW11bSBudW1iZXIgb2YgdHJhY2tzICovCisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OwkJLyogdGltZW91dCBmb3IgaW50ZXJydXB0IHJlcXVlc3RzICovCisJCisJdW5zaWduZWQgY2hhciBpbnRlcmxlYXZlX3NlY3Q7CS8qIGlmIHRoZXJlIGFyZSBtb3JlIHNlY3RvcnMsIHVzZSAKKwkJCQkJICogaW50ZXJsZWF2ZSAqLworCQorCXN0cnVjdCBmbG9wcHlfbWF4X2Vycm9ycyBtYXhfZXJyb3JzOworCQorCWNoYXIgZmxhZ3M7CQkJLyogdmFyaW91cyBmbGFncywgaW5jbHVkaW5nIGZ0ZF9tc2cgKi8KKy8qCisgKiBBbm5vdW5jZSBzdWNjZXNzZnVsIG1lZGlhIHR5cGUgZGV0ZWN0aW9uIGFuZCBtZWRpYSBpbmZvcm1hdGlvbiBsb3NzIGFmdGVyCisgKiBkaXNrIGNoYW5nZXMuCisgKiBBbHNvIHVzZWQgdG8gZW5hYmxlL2Rpc2FibGUgcHJpbnRpbmcgb2Ygb3ZlcnJ1biB3YXJuaW5ncy4KKyAqLworCisjZGVmaW5lIEZURF9NU0cgMHgxMAorI2RlZmluZSBGRF9CUk9LRU5fRENMIDB4MjAKKyNkZWZpbmUgRkRfREVCVUcgMHgwMgorI2RlZmluZSBGRF9TSUxFTlRfRENMX0NMRUFSIDB4NAorI2RlZmluZSBGRF9JTlZFUlRFRF9EQ0wgMHg4MCAvKiBtdXN0IGJlIDB4ODAsIGJlY2F1c2Ugb2YgaGFyZHdhcmUgCisJCQkJY29uc2lkZXJhdGlvbnMgKi8KKworCWNoYXIgcmVhZF90cmFjazsJCS8qIHVzZSByZWFkdHJhY2sgZHVyaW5nIHByb2Jpbmc/ICovCisKKy8qCisgKiBBdXRvLWRldGVjdGlvbi4gRWFjaCBkcml2ZSB0eXBlIGhhcyBlaWdodCBmb3JtYXRzIHdoaWNoIGFyZQorICogdXNlZCBpbiBzdWNjZXNzaW9uIHRvIHRyeSB0byByZWFkIHRoZSBkaXNrLiBJZiB0aGUgRkRDIGNhbm5vdCBsb2NrIG9udG8KKyAqIHRoZSBkaXNrLCB0aGUgbmV4dCBmb3JtYXQgaXMgdHJpZWQuIFRoaXMgdXNlcyB0aGUgdmFyaWFibGUgJ3Byb2JpbmcnLgorICovCisJc2hvcnQgYXV0b2RldGVjdFs4XTsJCS8qIGF1dG9kZXRlY3RlZCBmb3JtYXRzICovCisJCisJaW50IGNoZWNrZnJlcTsgLyogaG93IG9mdGVuIHNob3VsZCB0aGUgZHJpdmUgYmUgY2hlY2tlZCBmb3IgZGlzayAKKwkJCSogY2hhbmdlcyAqLworCWludCBuYXRpdmVfZm9ybWF0OyAvKiBuYXRpdmUgZm9ybWF0IG9mIHRoaXMgZHJpdmUgKi8KK307CisKK2VudW0geworCUZEX05FRURfVFdBRERMRV9CSVQsCS8qIG1vcmUgbWFnaWMgKi8KKwlGRF9WRVJJRllfQklULAkJLyogaW5xdWlyZSBmb3Igd3JpdGUgcHJvdGVjdGlvbiAqLworCUZEX0RJU0tfTkVXQ0hBTkdFX0JJVCwJLyogY2hhbmdlIGRldGVjdGVkLCBhbmQgbm8gYWN0aW9uIHVuZGVydGFrZW4geWV0CisJCQkJICogdG8gY2xlYXIgbWVkaWEgY2hhbmdlIHN0YXR1cyAqLworCUZEX1VOVVNFRF9CSVQsCisJRkRfRElTS19DSEFOR0VEX0JJVCwJLyogZGlzayBoYXMgYmVlbiBjaGFuZ2VkIHNpbmNlIGxhc3QgaS9vICovCisJRkRfRElTS19XUklUQUJMRV9CSVQJLyogZGlzayBpcyB3cml0YWJsZSAqLworfTsKKworI2RlZmluZSBGRFNFVERSVlBSTSBfSU9XKDIsIDB4OTAsIHN0cnVjdCBmbG9wcHlfZHJpdmVfcGFyYW1zKQorI2RlZmluZSBGREdFVERSVlBSTSBfSU9SKDIsIDB4MTEsIHN0cnVjdCBmbG9wcHlfZHJpdmVfcGFyYW1zKQorLyogc2V0L2dldCBkcml2ZSBwYXJhbWV0ZXJzICovCisKKworLyoKKyAqIEN1cnJlbnQgZHJpdmUgc3RhdGUgKG5vdCBkaXJlY3RseSBtb2RpZmlhYmxlIGJ5IHVzZXIsIHJlYWRvbmx5KQorICovCitzdHJ1Y3QgZmxvcHB5X2RyaXZlX3N0cnVjdCB7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKy8qIHZhbHVlcyBmb3IgdGhlc2UgZmxhZ3MgKi8KKyNkZWZpbmUgRkRfTkVFRF9UV0FERExFICgxIDw8IEZEX05FRURfVFdBRERMRV9CSVQpCisjZGVmaW5lIEZEX1ZFUklGWSAoMSA8PCBGRF9WRVJJRllfQklUKQorI2RlZmluZSBGRF9ESVNLX05FV0NIQU5HRSAoMSA8PCBGRF9ESVNLX05FV0NIQU5HRV9CSVQpCisjZGVmaW5lIEZEX0RJU0tfQ0hBTkdFRCAoMSA8PCBGRF9ESVNLX0NIQU5HRURfQklUKQorI2RlZmluZSBGRF9ESVNLX1dSSVRBQkxFICgxIDw8IEZEX0RJU0tfV1JJVEFCTEVfQklUKQorCisJdW5zaWduZWQgbG9uZyBzcGludXBfZGF0ZTsKKwl1bnNpZ25lZCBsb25nIHNlbGVjdF9kYXRlOworCXVuc2lnbmVkIGxvbmcgZmlyc3RfcmVhZF9kYXRlOworCXNob3J0IHByb2JlZF9mb3JtYXQ7CisJc2hvcnQgdHJhY2s7IC8qIGN1cnJlbnQgdHJhY2sgKi8KKwlzaG9ydCBtYXhibG9jazsgLyogaWQgb2YgaGlnaGVzdCBibG9jayByZWFkICovCisJc2hvcnQgbWF4dHJhY2s7IC8qIGlkIG9mIGhpZ2hlc3QgaGFsZiB0cmFjayByZWFkICovCisJaW50IGdlbmVyYXRpb247IC8qIGhvdyBtYW55IGRpc2tjaGFuZ2VzPyAqLworCisvKgorICogKFVzZXItcHJvdmlkZWQpIG1lZGlhIGluZm9ybWF0aW9uIGlzIF9ub3RfIGRpc2NhcmRlZCBhZnRlciBhIG1lZGlhIGNoYW5nZQorICogaWYgdGhlIGNvcnJlc3BvbmRpbmcga2VlcF9kYXRhIGZsYWcgaXMgbm9uLXplcm8uIFBvc2l0aXZlIHZhbHVlcyBhcmUKKyAqIGRlY3JlbWVudGVkIGFmdGVyIGVhY2ggcHJvYmUuCisgKi8KKwlpbnQga2VlcF9kYXRhOworCQorCS8qIFByZXZlbnQgImFsaWFzZWQiIGFjY2Vzc2VzLiAqLworCWludCBmZF9yZWY7CisJaW50IGZkX2RldmljZTsKKwl1bnNpZ25lZCBsb25nIGxhc3RfY2hlY2tlZDsgLyogd2hlbiB3YXMgdGhlIGRyaXZlIGxhc3QgY2hlY2tlZCBmb3IgYSBkaXNrIAorCQkJICAgKiBjaGFuZ2U/ICovCisJCisJY2hhciAqZG1hYnVmOworCWludCBidWZibG9ja3M7Cit9OworCisjZGVmaW5lIEZER0VURFJWU1RBVCBfSU9SKDIsIDB4MTIsIHN0cnVjdCBmbG9wcHlfZHJpdmVfc3RydWN0KQorI2RlZmluZSBGRFBPTExEUlZTVEFUIF9JT1IoMiwgMHgxMywgc3RydWN0IGZsb3BweV9kcml2ZV9zdHJ1Y3QpCisvKiBnZXQgZHJpdmUgc3RhdGU6IEdFVCByZXR1cm5zIHRoZSBjYWNoZWQgc3RhdGUsIFBPTEwgcG9sbHMgZm9yIG5ldyBzdGF0ZSAqLworCisKKy8qCisgKiByZXNldCBGREMKKyAqLworZW51bSByZXNldF9tb2RlIHsKKwlGRF9SRVNFVF9JRl9ORUVERUQsCS8qIHJlc2V0IG9ubHkgaWYgdGhlIHJlc2V0IGZsYWdzIGlzIHNldCAqLworCUZEX1JFU0VUX0lGX1JBV0NNRCwJLyogb2Jzb2xldGUgKi8KKwlGRF9SRVNFVF9BTFdBWVMJCS8qIHJlc2V0IGFsd2F5cyAqLworfTsKKyNkZWZpbmUgRkRSRVNFVCBfSU8oMiwgMHg1NCkKKworCisvKgorICogRkRDIHN0YXRlCisgKi8KK3N0cnVjdCBmbG9wcHlfZmRjX3N0YXRlIHsJCisJaW50IHNwZWMxOwkJLyogc3BlYzEgdmFsdWUgbGFzdCB1c2VkICovCisJaW50IHNwZWMyOwkJLyogc3BlYzIgdmFsdWUgbGFzdCB1c2VkICovCisJaW50IGR0cjsKKwl1bnNpZ25lZCBjaGFyIHZlcnNpb247CS8qIEZEQyB2ZXJzaW9uIGNvZGUgKi8KKwl1bnNpZ25lZCBjaGFyIGRvcjsKKwl1bnNpZ25lZCBsb25nIGFkZHJlc3M7CS8qIGlvIGFkZHJlc3MgKi8KKwl1bnNpZ25lZCBpbnQgcmF3Y21kOjI7CisJdW5zaWduZWQgaW50IHJlc2V0OjE7CisJdW5zaWduZWQgaW50IG5lZWRfY29uZmlndXJlOjE7CisJdW5zaWduZWQgaW50IHBlcnBfbW9kZToyOworCXVuc2lnbmVkIGludCBoYXNfZmlmbzoxOworCXVuc2lnbmVkIGludCBkcml2ZXJfdmVyc2lvbjsJLyogdmVyc2lvbiBjb2RlIGZvciBmbG9wcHkgZHJpdmVyICovCisjZGVmaW5lIEZEX0RSSVZFUl9WRVJTSU9OIDB4MTAwCisvKiB1c2VyIHByb2dyYW1zIHVzaW5nIHRoZSBmbG9wcHkgQVBJIHNob3VsZCB1c2UgZmxvcHB5X2ZkY19zdGF0ZSB0bworICogZ2V0IHRoZSB2ZXJzaW9uIG51bWJlciBvZiB0aGUgZmxvcHB5IGRyaXZlciB0aGF0IHRoZXkgYXJlIHJ1bm5pbmcKKyAqIG9uLiBJZiB0aGlzIHZlcnNpb24gbnVtYmVyIGlzIGJpZ2dlciB0aGFuIHRoZSBvbmUgY29tcGlsZWQgaW50byB0aGUKKyAqIHVzZXIgcHJvZ3JhbSAodGhlIEZEX0RSSVZFUl9WRVJTSU9OIGRlZmluZSksIGl0IHNob3VsZCBiZSBwcmVwYXJlZAorICogdG8gYmlnZ2VyIHN0cnVjdHVyZXMKKyAqLworCisJdW5zaWduZWQgY2hhciB0cmFja1s0XTsKKwkvKiBQb3NpdGlvbiBvZiB0aGUgaGVhZHMgb2YgdGhlIDQgdW5pdHMgYXR0YWNoZWQgdG8gdGhpcyBGREMsCisJICogYXMgc3RvcmVkIG9uIHRoZSBGREMuIEluIHRoZSBmdXR1cmUsIHRoZSBwb3NpdGlvbiBhcyBzdG9yZWQKKwkgKiBvbiB0aGUgRkRDIG1pZ2h0IG5vdCBhZ3JlZSB3aXRoIHRoZSBhY3R1YWwgcGh5c2ljYWwKKwkgKiBwb3NpdGlvbiBvZiB0aGVzZSBkcml2ZSBoZWFkcy4gQnkgYWxsb3dpbmcgc3VjaAorCSAqIGRpc2FncmVlbWVudCwgaXQgd2lsbCBiZSBwb3NzaWJsZSB0byByZXNldCB0aGUgRkRDIHdpdGhvdXQKKwkgKiBpbmN1cnJpbmcgdGhlIGV4cGVuc2l2ZSBjb3N0IG9mIHJlcG9zaXRpb25pbmcgYWxsIGhlYWRzLgorCSAqIFJpZ2h0IG5vdywgdGhlc2UgcG9zaXRpb25zIGFyZSBoYXJkIHdpcmVkIHRvIDAuICovCisKK307CisKKyNkZWZpbmUgRkRHRVRGRENTVEFUIF9JT1IoMiwgMHgxNSwgc3RydWN0IGZsb3BweV9mZGNfc3RhdGUpCisKKworLyoKKyAqIEFzeW5jaHJvbm91cyBXcml0ZSBlcnJvciB0cmFja2luZworICovCitzdHJ1Y3QgZmxvcHB5X3dyaXRlX2Vycm9ycyB7CisJLyogV3JpdGUgZXJyb3IgbG9nZ2luZy4KKwkgKgorCSAqIFRoZXNlIGZpZWxkcyBjYW4gYmUgY2xlYXJlZCB3aXRoIHRoZSBGRFdFUlJPUkNMUiBpb2N0bC4KKwkgKiBPbmx5IHdyaXRlcyB0aGF0IHdlcmUgYXR0ZW1wdGVkIGJ1dCBmYWlsZWQgZHVlIHRvIGEgcGh5c2ljYWwgbWVkaWEKKwkgKiBlcnJvciBhcmUgbG9nZ2VkLiAgd3JpdGUoMikgY2FsbHMgdGhhdCBmYWlsIGFuZCByZXR1cm4gYW4gZXJyb3IgY29kZQorCSAqIHRvIHRoZSB1c2VyIHByb2Nlc3MgYXJlIG5vdCBjb3VudGVkLgorCSAqLworCisJdW5zaWduZWQgaW50IHdyaXRlX2Vycm9yczsgIC8qIG51bWJlciBvZiBwaHlzaWNhbCB3cml0ZSBlcnJvcnMgCisJCQkJICAgICAqIGVuY291bnRlcmVkICovCisJCisJLyogcG9zaXRpb24gb2YgZmlyc3QgYW5kIGxhc3Qgd3JpdGUgZXJyb3JzICovCisJdW5zaWduZWQgbG9uZyBmaXJzdF9lcnJvcl9zZWN0b3I7CisJaW50ICAgICAgICAgICBmaXJzdF9lcnJvcl9nZW5lcmF0aW9uOworCXVuc2lnbmVkIGxvbmcgbGFzdF9lcnJvcl9zZWN0b3I7CisJaW50ICAgICAgICAgICBsYXN0X2Vycm9yX2dlbmVyYXRpb247CisJCisJdW5zaWduZWQgaW50IGJhZG5lc3M7IC8qIGhpZ2hlc3QgcmV0cnkgY291bnQgZm9yIGEgcmVhZCBvciB3cml0ZSAKKwkJCSAgICAgICAqIG9wZXJhdGlvbiAqLworfTsKKworI2RlZmluZSBGRFdFUlJPUkNMUiAgX0lPKDIsIDB4NTYpCisvKiBjbGVhciB3cml0ZSBlcnJvciBhbmQgYmFkbmVzcyBpbmZvcm1hdGlvbiAqLworI2RlZmluZSBGRFdFUlJPUkdFVCAgX0lPUigyLCAweDE3LCBzdHJ1Y3QgZmxvcHB5X3dyaXRlX2Vycm9ycykKKy8qIGdldCB3cml0ZSBlcnJvciBhbmQgYmFkbmVzcyBpbmZvcm1hdGlvbiAqLworCisKKy8qCisgKiBSYXcgY29tbWFuZHMKKyAqLworLyogbmV3IGludGVyZmFjZSBmbGFnOiBub3cgd2UgY2FuIGRvIHRoZW0gaW4gYmF0Y2hlcyAqLworI2RlZmluZSBGREhBVkVCQVRDSEVEUkFXQ01ECisKK3N0cnVjdCBmbG9wcHlfcmF3X2NtZCB7CisJdW5zaWduZWQgaW50IGZsYWdzOworI2RlZmluZSBGRF9SQVdfUkVBRCAxCisjZGVmaW5lIEZEX1JBV19XUklURSAyCisjZGVmaW5lIEZEX1JBV19OT19NT1RPUiA0CisjZGVmaW5lIEZEX1JBV19ESVNLX0NIQU5HRSA0IC8qIG91dDogZGlzayBjaGFuZ2UgZmxhZyB3YXMgc2V0ICovCisjZGVmaW5lIEZEX1JBV19JTlRSIDggICAgLyogd2FpdCBmb3IgYW4gaW50ZXJydXB0ICovCisjZGVmaW5lIEZEX1JBV19TUElOIDB4MTAgLyogc3BpbiB1cCB0aGUgZGlzayBmb3IgdGhpcyBjb21tYW5kICovCisjZGVmaW5lIEZEX1JBV19OT19NT1RPUl9BRlRFUiAweDIwIC8qIHN3aXRjaCB0aGUgbW90b3Igb2ZmIGFmdGVyIGNvbW1hbmQgCisJCQkJICAgICogY29tcGxldGlvbiAqLworI2RlZmluZSBGRF9SQVdfTkVFRF9ESVNLIDB4NDAgIC8qIHRoaXMgY29tbWFuZCBuZWVkcyBhIGRpc2sgdG8gYmUgcHJlc2VudCAqLworI2RlZmluZSBGRF9SQVdfTkVFRF9TRUVLIDB4ODAgIC8qIHRoaXMgY29tbWFuZCB1c2VzIGFuIGltcGxpZWQgc2VlayAoc29mdCkgKi8KKworLyogbW9yZSAiaW4iIGZsYWdzICovCisjZGVmaW5lIEZEX1JBV19NT1JFIDB4MTAwICAvKiBtb3JlIHJlY29yZHMgZm9sbG93ICovCisjZGVmaW5lIEZEX1JBV19TVE9QX0lGX0ZBSUxVUkUgMHgyMDAgLyogc3RvcCBpZiB3ZSBlbmNvdW50ZXIgYSBmYWlsdXJlICovCisjZGVmaW5lIEZEX1JBV19TVE9QX0lGX1NVQ0NFU1MgMHg0MDAgLyogc3RvcCBpZiBjb21tYW5kIHN1Y2Nlc3NmdWwgKi8KKyNkZWZpbmUgRkRfUkFXX1NPRlRGQUlMVVJFIDB4ODAwIC8qIGNvbnNpZGVyIHRoZSByZXR1cm4gdmFsdWUgZm9yIGZhaWx1cmUKKwkJCQkgICogZGV0ZWN0aW9uIHRvbyAqLworCisvKiBtb3JlICJvdXQiIGZsYWdzICovCisjZGVmaW5lIEZEX1JBV19GQUlMVVJFIDB4MTAwMDAgLyogY29tbWFuZCBzZW50IHRvIGZkYywgZmRjIHJldHVybmVkIGVycm9yICovCisjZGVmaW5lIEZEX1JBV19IQVJERkFJTFVSRSAweDIwMDAwIC8qIGZkYyBoYWQgdG8gYmUgcmVzZXQsIG9yIHRpbWVkIG91dCAqLworCisJdm9pZCBfX3VzZXIgKmRhdGE7CisJY2hhciAqa2VybmVsX2RhdGE7IC8qIGxvY2F0aW9uIG9mIGRhdGEgYnVmZmVyIGluIHRoZSBrZXJuZWwgKi8KKwlzdHJ1Y3QgZmxvcHB5X3Jhd19jbWQgKm5leHQ7IC8qIHVzZWQgZm9yIGNoYWluaW5nIG9mIHJhdyBjbWQncyAKKwkJCQkgICAgICAqIHdpdGhpbiB0aGUga2VybmVsICovCisJbG9uZyBsZW5ndGg7IC8qIGluOiBsZW5ndGggb2YgZG1hIHRyYW5zZmVyLiBvdXQ6IHJlbWFpbmluZyBieXRlcyAqLworCWxvbmcgcGh5c19sZW5ndGg7IC8qIHBoeXNpY2FsIGxlbmd0aCwgaWYgZGlmZmVyZW50IGZyb20gZG1hIGxlbmd0aCAqLworCWludCBidWZmZXJfbGVuZ3RoOyAvKiBsZW5ndGggb2YgYWxsb2NhdGVkIGJ1ZmZlciAqLworCisJdW5zaWduZWQgY2hhciByYXRlOworCXVuc2lnbmVkIGNoYXIgY21kX2NvdW50OworCXVuc2lnbmVkIGNoYXIgY21kWzE2XTsKKwl1bnNpZ25lZCBjaGFyIHJlcGx5X2NvdW50OworCXVuc2lnbmVkIGNoYXIgcmVwbHlbMTZdOworCWludCB0cmFjazsKKwlpbnQgcmVzdWx0Y29kZTsKKworCWludCByZXNlcnZlZDE7CisJaW50IHJlc2VydmVkMjsKK307CisKKyNkZWZpbmUgRkRSQVdDTUQgX0lPKDIsIDB4NTgpCisvKiBzZW5kIGEgcmF3IGNvbW1hbmQgdG8gdGhlIGZkYy4gU3RydWN0dXJlIHNpemUgbm90IGluY2x1ZGVkLCBiZWNhdXNlIG9mCisgKiBiYXRjaGVzICovCisKKyNkZWZpbmUgRkRUV0FERExFIF9JTygyLCAweDU5KQorLyogZmxpY2tlciBtb3Rvci1vbiBiaXQgYmVmb3JlIHJlYWRpbmcgYSBzZWN0b3IuIEV4cGVyaW1lbnRhbCAqLworCisKKyNkZWZpbmUgRkRFSkVDVCBfSU8oMiwgMHg1YSkKKy8qIGVqZWN0IHRoZSBkaXNrICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mZDE3NzIuaCBiL2luY2x1ZGUvbGludXgvZmQxNzcyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODcxZDZlNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvZmQxNzcyLmgKQEAgLTAsMCArMSw4MCBAQAorI2lmbmRlZiBfTElOVVhfRkQxNzcyUkVHX0gKKyNkZWZpbmUgX0xJTlVYX0ZEMTc3MlJFR19ICisKKy8qCisqKiBXRDE3NzIgc3R1ZmYgLSBvcmlnaW5hbGx5IGZyb20gdGhlIE02OEsgTGludXgKKyAqIE1vZGlmaWVkIGZvciBBcmNoaW1lZGVzIGJ5IERhdmUgR2lsYmVydCAoZ2lsYmVydGRAY3MubWFuLmFjLnVrKQorICovCisKKy8qIHJlZ2lzdGVyIGNvZGVzICovCisKKyNkZWZpbmUgRkRDMTc3MlNFTFJFR19TVFAgICAoMHg4MCkgICAvKiBjb21tYW5kL3N0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBGREMxNzcyU0VMUkVHX1RSQSAgICgweDgyKSAgIC8qIHRyYWNrIHJlZ2lzdGVyICovCisjZGVmaW5lIEZEQzE3NzJTRUxSRUdfU0VDICAgKDB4ODQpICAgLyogc2VjdG9yIHJlZ2lzdGVyICovCisjZGVmaW5lIEZEQzE3NzJTRUxSRUdfRFRBICAgKDB4ODYpICAgLyogZGF0YSByZWdpc3RlciAqLworCisvKiByZWdpc3RlciBuYW1lcyBmb3IgRkRDMTc3Ml9SRUFEL1dSSVRFIG1hY3JvcyAqLworCisjZGVmaW5lIEZEQzE3NzJSRUdfQ01EICAgICAgICAgMAorI2RlZmluZSBGREMxNzcyUkVHX1NUQVRVUyAgICAgIDAKKyNkZWZpbmUgRkRDMTc3MlJFR19UUkFDSyAgICAgICAyCisjZGVmaW5lIEZEQzE3NzJSRUdfU0VDVE9SICAgICAgNAorI2RlZmluZSBGREMxNzcyUkVHX0RBVEEgICAgICAgICAgICAgICAgNgorCisvKiBjb21tYW5kIG9wY29kZXMgKi8KKworI2RlZmluZSBGREMxNzcyQ01EX1JFU1RPUkUgICgweDAwKSAgIC8qICAtICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZEQzE3NzJDTURfU0VFSyAgICAgKDB4MTApICAgLyogICB8ICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRkRDMTc3MkNNRF9TVEVQICAgICAoMHgyMCkgICAvKiAgIHwgIFRZUCAxIENvbW1hbmRzICAqLworI2RlZmluZSBGREMxNzcyQ01EX1NUSU4gICAgICgweDQwKSAgIC8qICAgfCAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZEQzE3NzJDTURfU1RPVCAgICAgKDB4NjApICAgLyogIC0gICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRkRDMTc3MkNNRF9SRFNFQyAgICAoMHg4MCkgICAvKiAgLSAgIFRZUCAyIENvbW1hbmRzICAqLworI2RlZmluZSBGREMxNzcyQ01EX1dSU0VDICAgICgweGEwKSAgIC8qICAtICAgICAgICAgICIgICAgICAgICovCisjZGVmaW5lIEZEQzE3NzJDTURfUkRBRFIgICAgKDB4YzApICAgLyogIC0gICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRkRDMTc3MkNNRF9SRFRSQSAgICAoMHhlMCkgICAvKiAgIHwgIFRZUCAzIENvbW1hbmRzICAqLworI2RlZmluZSBGREMxNzcyQ01EX1dSVFJBICAgICgweGYwKSAgIC8qICAtICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZEQzE3NzJDTURfRk9SQ0kgICAgKDB4ZDApICAgLyogIC0gICBUWVAgNCBDb21tYW5kICAgKi8KKworLyogY29tbWFuZCBtb2RpZmllciBiaXRzICovCisKKyNkZWZpbmUgRkRDMTc3MkNNREFERF9TUjYgICAoMHgwMCkgICAvKiBzdGVwIHJhdGUgc2V0dGluZ3MgKi8KKyNkZWZpbmUgRkRDMTc3MkNNREFERF9TUjEyICAoMHgwMSkKKyNkZWZpbmUgRkRDMTc3MkNNREFERF9TUjIgICAoMHgwMikKKyNkZWZpbmUgRkRDMTc3MkNNREFERF9TUjMgICAoMHgwMykKKyNkZWZpbmUgRkRDMTc3MkNNREFERF9WICAgICAoMHgwNCkgICAvKiB2ZXJpZnkgKi8KKyNkZWZpbmUgRkRDMTc3MkNNREFERF9IICAgICAoMHgwOCkgICAvKiB3YWl0IGZvciBzcGluLXVwICovCisjZGVmaW5lIEZEQzE3NzJDTURBRERfVSAgICAgKDB4MTApICAgLyogdXBkYXRlIHRyYWNrIHJlZ2lzdGVyICovCisjZGVmaW5lIEZEQzE3NzJDTURBRERfTSAgICAgKDB4MTApICAgLyogbXVsdGlwbGUgc2VjdG9yIGFjY2VzcyAqLworI2RlZmluZSBGREMxNzcyQ01EQUREX0UgICAgICgweDA0KSAgIC8qIGhlYWQgc2V0dGxpbmcgZmxhZyAqLworI2RlZmluZSBGREMxNzcyQ01EQUREX1AgICAgICgweDAyKSAgIC8qIHByZWNvbXBlbnNhdGlvbiAqLworI2RlZmluZSBGREMxNzcyQ01EQUREX0EwICAgICgweDAxKSAgIC8qIERBTSBmbGFnICovCisKKy8qIHN0YXR1cyByZWdpc3RlciBiaXRzICovCisKKyNkZWZpbmUgICAgICAgIEZEQzE3NzJTVEFUX01PVE9ST04gICAgICgweDgwKSAgIC8qIG1vdG9yIG9uICovCisjZGVmaW5lICAgICAgICBGREMxNzcyU1RBVF9XUFJPVCAgICAgICAoMHg0MCkgICAvKiB3cml0ZSBwcm90ZWN0ZWQgKEZEQzE3NzJDTURfV1IqKSAqLworI2RlZmluZSAgICAgICAgRkRDMTc3MlNUQVRfU1BJTlVQICAgICAgKDB4MjApICAgLyogbW90b3Igc3BlZWQgc3RhYmxlIChUeXBlIEkpICovCisjZGVmaW5lICAgICAgICBGREMxNzcyU1RBVF9ERUxEQU0gICAgICAoMHgyMCkgICAvKiBzZWN0b3IgaGFzIGRlbGV0ZWQgREFNIChUeXBlIElJK0lJSSkgKi8KKyNkZWZpbmUgICAgICAgIEZEQzE3NzJTVEFUX1JFQ05GICAgICAgICgweDEwKSAgIC8qIHJlY29yZCBub3QgZm91bmQgKi8KKyNkZWZpbmUgICAgICAgIEZEQzE3NzJTVEFUX0NSQyAgICAgICAgICgweDA4KSAgIC8qIENSQyBlcnJvciAqLworI2RlZmluZSAgICAgICAgRkRDMTc3MlNUQVRfVFIwMCAgICAgICAgKDB4MDQpICAgLyogVHJhY2sgMDAgZmxhZyAoVHlwZSBJKSAqLworI2RlZmluZSAgICAgICAgRkRDMTc3MlNUQVRfTE9TVCAgICAgICAgKDB4MDQpICAgLyogTG9zdCBEYXRhIChUeXBlIElJK0lJSSkgKi8KKyNkZWZpbmUgICAgICAgIEZEQzE3NzJTVEFUX0lEWCAgICAgICAgICgweDAyKSAgIC8qIEluZGV4IHN0YXR1cyAoVHlwZSBJKSAqLworI2RlZmluZSAgICAgICAgRkRDMTc3MlNUQVRfRFJRICAgICAgICAgKDB4MDIpICAgLyogRFJRIHN0YXR1cyAoVHlwZSBJSStJSUkpICovCisjZGVmaW5lICAgICAgICBGREMxNzcyU1RBVF9CVVNZICAgICAgICAoMHgwMSkgICAvKiBGREMxNzcyIGlzIGJ1c3kgKi8KKworCisvKiBQU0cgUG9ydCBBIEJpdCBOciAwIC4uIFNpZGUgU2VsIC4uIDAgLT4gU2lkZSAxICAxIC0+IFNpZGUgMiAqLworI2RlZmluZSBEU0tTSURFICAgICAoMHgwMSkKKyAgICAgICAgCisjZGVmaW5lIERTS0RSVk5PTkUgICgweDA2KQorI2RlZmluZSBEU0tEUlYwICAgICAoMHgwMikKKyNkZWZpbmUgRFNLRFJWMSAgICAgKDB4MDQpCisKKy8qIHN0ZXAgcmF0ZXMgKi8KKyNkZWZpbmUgICAgICAgIEZEQzE3NzJTVEVQXzYgICAweDAwCisjZGVmaW5lICAgICAgICBGREMxNzcyU1RFUF8xMiAgMHgwMQorI2RlZmluZSAgICAgICAgRkRDMTc3MlNURVBfMiAgIDB4MDIKKyNkZWZpbmUgICAgICAgIEZEQzE3NzJTVEVQXzMgICAweDAzCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mZGRpZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L2ZkZGlkZXZpY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTVlZTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9mZGRpZGV2aWNlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIElORVQJCUFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBUQ1AvSVAgcHJvdG9jb2wgc3VpdGUgZm9yIHRoZSBMSU5VWAorICoJCW9wZXJhdGluZyBzeXN0ZW0uICBJTkVUIGlzIGltcGxlbWVudGVkIHVzaW5nIHRoZSBCU0QgU29ja2V0CisgKgkJaW50ZXJmYWNlIGFzIHRoZSBtZWFucyBvZiBjb21tdW5pY2F0aW9uIHdpdGggdGhlIHVzZXIgbGV2ZWwuCisgKgorICoJCURlZmluaXRpb25zIGZvciB0aGUgRkRESSBoYW5kbGVycy4KKyAqCisgKiBWZXJzaW9uOglAKCMpZmRkaWRldmljZS5oCTEuMC4wCTA4LzEyLzk2CisgKgorICogQXV0aG9yOglMYXdyZW5jZSBWLiBTdGVmYW5pLCA8c3RlZmFuaUBsa2cuZGVjLmNvbT4KKyAqCisgKgkJZmRkaWRldmljZS5oIGlzIGJhc2VkIG9uIHByZXZpb3VzIHRyZGV2aWNlLmggd29yayBieQorICoJCQlSb3NzIEJpcm8sIDxiaXI3QGxlbGFuZC5TdGFuZm9yZC5FZHU+CisgKgkJCUZyZWQgTi4gdmFuIEtlbXBlbiwgPHdhbHRqZUB1V2FsdC5OTC5NdWduZXQuT1JHPgorICoJCQlBbGFuIENveCwgPGd3NHB0c0BndzRwdHMuYW1wci5vcmc+CisgKgorICoJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCQltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICoJCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICoJCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpZm5kZWYgX0xJTlVYX0ZERElERVZJQ0VfSAorI2RlZmluZSBfTElOVVhfRkRESURFVklDRV9ICisKKyNpbmNsdWRlIDxsaW51eC9pZl9mZGRpLmg+CisKKyNpZmRlZiBfX0tFUk5FTF9fCitleHRlcm4gdW5zaWduZWQgc2hvcnQJZmRkaV90eXBlX3RyYW5zKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitleHRlcm4gc3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX2ZkZGlkZXYoaW50IHNpemVvZl9wcml2KTsKKyNlbmRpZgorCisjZW5kaWYJLyogX0xJTlVYX0ZERElERVZJQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mZHJlZy5oIGIvaW5jbHVkZS9saW51eC9mZHJlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyZWViNjMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2ZkcmVnLmgKQEAgLTAsMCArMSwxMzcgQEAKKyNpZm5kZWYgX0xJTlVYX0ZEUkVHX0gKKyNkZWZpbmUgX0xJTlVYX0ZEUkVHX0gKKy8qCisgKiBUaGlzIGZpbGUgY29udGFpbnMgc29tZSBkZWZpbmVzIGZvciB0aGUgZmxvcHB5IGRpc2sgY29udHJvbGxlci4KKyAqIFZhcmlvdXMgc291cmNlcy4gTW9zdGx5ICJJQk0gTWljcm9jb21wdXRlcnM6IEEgUHJvZ3JhbW1lcnMKKyAqIEhhbmRib29rIiwgU2FuY2hlcyBhbmQgQ2FudG9uLgorICovCisKKyNpZmRlZiBGRFBBVENIRVMKKyNkZWZpbmUgRkRfSU9QT1JUIGZkY19zdGF0ZVtmZGNdLmFkZHJlc3MKKyNlbHNlCisvKiBJdCB3b3VsZCBiZSBhIGxvdCBzYW5lciBqdXN0IHRvIGZvcmNlIGZkY19zdGF0ZVtmZGNdLmFkZHJlc3MgdG8gYWx3YXlzCisgICBiZSBzZXQgISBGSVhNRSAqLworI2RlZmluZSBGRF9JT1BPUlQgMHgzZjAKKyNlbmRpZgorCisvKiBGZCBjb250cm9sbGVyIHJlZ3MuIFMmQywgYWJvdXQgcGFnZSAzNDAgKi8KKyNkZWZpbmUgRkRfU1RBVFVTCSg0ICsgRkRfSU9QT1JUICkKKyNkZWZpbmUgRkRfREFUQQkJKDUgKyBGRF9JT1BPUlQgKQorCisvKiBEaWdpdGFsIE91dHB1dCBSZWdpc3RlciAqLworI2RlZmluZSBGRF9ET1IJCSgyICsgRkRfSU9QT1JUICkKKworLyogRGlnaXRhbCBJbnB1dCBSZWdpc3RlciAocmVhZCkgKi8KKyNkZWZpbmUgRkRfRElSCQkoNyArIEZEX0lPUE9SVCApCisKKy8qIERpc2tldHRlIENvbnRyb2wgUmVnaXN0ZXIgKHdyaXRlKSovCisjZGVmaW5lIEZEX0RDUgkJKDcgKyBGRF9JT1BPUlQgKQorCisvKiBCaXRzIG9mIG1haW4gc3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIFNUQVRVU19CVVNZTUFTSwkweDBGCQkvKiBkcml2ZSBidXN5IG1hc2sgKi8KKyNkZWZpbmUgU1RBVFVTX0JVU1kJMHgxMAkJLyogRkRDIGJ1c3kgKi8KKyNkZWZpbmUgU1RBVFVTX0RNQQkweDIwCQkvKiAwLSBETUEgbW9kZSAqLworI2RlZmluZSBTVEFUVVNfRElSCTB4NDAJCS8qIDAtIGNwdS0+ZmRjICovCisjZGVmaW5lIFNUQVRVU19SRUFEWQkweDgwCQkvKiBEYXRhIHJlZyByZWFkeSAqLworCisvKiBCaXRzIG9mIEZEX1NUMCAqLworI2RlZmluZSBTVDBfRFMJCTB4MDMJCS8qIGRyaXZlIHNlbGVjdCBtYXNrICovCisjZGVmaW5lIFNUMF9IQQkJMHgwNAkJLyogSGVhZCAoQWRkcmVzcykgKi8KKyNkZWZpbmUgU1QwX05SCQkweDA4CQkvKiBOb3QgUmVhZHkgKi8KKyNkZWZpbmUgU1QwX0VDRQkJMHgxMAkJLyogRXF1aXBtZW50IGNoZWNrIGVycm9yICovCisjZGVmaW5lIFNUMF9TRQkJMHgyMAkJLyogU2VlayBlbmQgKi8KKyNkZWZpbmUgU1QwX0lOVFIJMHhDMAkJLyogSW50ZXJydXB0IGNvZGUgbWFzayAqLworCisvKiBCaXRzIG9mIEZEX1NUMSAqLworI2RlZmluZSBTVDFfTUFNCQkweDAxCQkvKiBNaXNzaW5nIEFkZHJlc3MgTWFyayAqLworI2RlZmluZSBTVDFfV1AJCTB4MDIJCS8qIFdyaXRlIFByb3RlY3QgKi8KKyNkZWZpbmUgU1QxX05ECQkweDA0CQkvKiBObyBEYXRhIC0gdW5yZWFkYWJsZSAqLworI2RlZmluZSBTVDFfT1IJCTB4MTAJCS8qIE92ZXJSdW4gKi8KKyNkZWZpbmUgU1QxX0NSQwkJMHgyMAkJLyogQ1JDIGVycm9yIGluIGRhdGEgb3IgYWRkciAqLworI2RlZmluZSBTVDFfRU9DCQkweDgwCQkvKiBFbmQgT2YgQ3lsaW5kZXIgKi8KKworLyogQml0cyBvZiBGRF9TVDIgKi8KKyNkZWZpbmUgU1QyX01BTQkJMHgwMQkJLyogTWlzc2luZyBBZGRyZXNzIE1hcmsgKGFnYWluKSAqLworI2RlZmluZSBTVDJfQkMJCTB4MDIJCS8qIEJhZCBDeWxpbmRlciAqLworI2RlZmluZSBTVDJfU05TCQkweDA0CQkvKiBTY2FuIE5vdCBTYXRpc2ZpZWQgKi8KKyNkZWZpbmUgU1QyX1NFSAkJMHgwOAkJLyogU2NhbiBFcXVhbCBIaXQgKi8KKyNkZWZpbmUgU1QyX1dDCQkweDEwCQkvKiBXcm9uZyBDeWxpbmRlciAqLworI2RlZmluZSBTVDJfQ1JDCQkweDIwCQkvKiBDUkMgZXJyb3IgaW4gZGF0YSBmaWVsZCAqLworI2RlZmluZSBTVDJfQ00JCTB4NDAJCS8qIENvbnRyb2wgTWFyayA9IGRlbGV0ZWQgKi8KKworLyogQml0cyBvZiBGRF9TVDMgKi8KKyNkZWZpbmUgU1QzX0hBCQkweDA0CQkvKiBIZWFkIChBZGRyZXNzKSAqLworI2RlZmluZSBTVDNfRFMJCTB4MDgJCS8qIGRyaXZlIGlzIGRvdWJsZS1zaWRlZCAqLworI2RlZmluZSBTVDNfVFoJCTB4MTAJCS8qIFRyYWNrIFplcm8gc2lnbmFsICgxPXRyYWNrIDApICovCisjZGVmaW5lIFNUM19SWQkJMHgyMAkJLyogZHJpdmUgaXMgcmVhZHkgKi8KKyNkZWZpbmUgU1QzX1dQCQkweDQwCQkvKiBXcml0ZSBQcm90ZWN0ICovCisjZGVmaW5lIFNUM19GVAkJMHg4MAkJLyogRHJpdmUgRmF1bHQgKi8KKworLyogVmFsdWVzIGZvciBGRF9DT01NQU5EICovCisjZGVmaW5lIEZEX1JFQ0FMSUJSQVRFCQkweDA3CS8qIG1vdmUgdG8gdHJhY2sgMCAqLworI2RlZmluZSBGRF9TRUVLCQkJMHgwRgkvKiBzZWVrIHRyYWNrICovCisjZGVmaW5lIEZEX1JFQUQJCQkweEU2CS8qIHJlYWQgd2l0aCBNVCwgTUZNLCBTS2lwIGRlbGV0ZWQgKi8KKyNkZWZpbmUgRkRfV1JJVEUJCTB4QzUJLyogd3JpdGUgd2l0aCBNVCwgTUZNICovCisjZGVmaW5lIEZEX1NFTlNFSQkJMHgwOAkvKiBTZW5zZSBJbnRlcnJ1cHQgU3RhdHVzICovCisjZGVmaW5lIEZEX1NQRUNJRlkJCTB4MDMJLyogc3BlY2lmeSBIVVQgZXRjICovCisjZGVmaW5lIEZEX0ZPUk1BVAkJMHg0RAkvKiBmb3JtYXQgb25lIHRyYWNrICovCisjZGVmaW5lIEZEX1ZFUlNJT04JCTB4MTAJLyogZ2V0IHZlcnNpb24gY29kZSAqLworI2RlZmluZSBGRF9DT05GSUdVUkUJCTB4MTMJLyogY29uZmlndXJlIEZJRk8gb3BlcmF0aW9uICovCisjZGVmaW5lIEZEX1BFUlBFTkRJQ1VMQVIJMHgxMgkvKiBwZXJwZW5kaWN1bGFyIHIvdyBtb2RlICovCisjZGVmaW5lIEZEX0dFVFNUQVRVUwkJMHgwNAkvKiByZWFkIFNUMyAqLworI2RlZmluZSBGRF9EVU1QUkVHUwkJMHgwRQkvKiBkdW1wIHRoZSBjb250ZW50cyBvZiB0aGUgZmRjIHJlZ3MgKi8KKyNkZWZpbmUgRkRfUkVBRElECQkweEVBCS8qIHByaW50cyB0aGUgaGVhZGVyIG9mIGEgc2VjdG9yICovCisjZGVmaW5lIEZEX1VOTE9DSwkJMHgxNAkvKiBGaWZvIGNvbmZpZyB1bmxvY2sgKi8KKyNkZWZpbmUgRkRfTE9DSwkJCTB4OTQJLyogRmlmbyBjb25maWcgbG9jayAqLworI2RlZmluZSBGRF9SU0VFS19PVVQJCTB4OGYJLyogc2VlayBvdXQgKGkuZS4gdG8gbG93ZXIgdHJhY2tzKSAqLworI2RlZmluZSBGRF9SU0VFS19JTgkJMHhjZgkvKiBzZWVrIGluIChpLmUuIHRvIGhpZ2hlciB0cmFja3MpICovCisKKy8qIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgYXJlIG5ldyBpbiB0aGUgODIwNzguIFRoZXkgYXJlIG5vdCB1c2VkIGluIHRoZQorICogZmxvcHB5IGRyaXZlciwgZXhjZXB0IHRoZSBmaXJzdCB0aHJlZS4gVGhlc2UgY29tbWFuZHMgbWF5IGJlIHVzZWZ1bCBmb3IgYXBwcworICogd2hpY2ggdXNlIHRoZSBGRFJBV0NNRCBpbnRlcmZhY2UuIEZvciBkb2MsIGdldCB0aGUgODIwNzggc3BlYyBzaGVldHMgYXQKKyAqIGh0dHA6Ly93d3ctdGVjaGRvYy5pbnRlbC5jb20vZG9jcy9wZXJpcGgvZmRfY29udHIvZGF0YXNoZWV0cy8gKi8KKworI2RlZmluZSBGRF9QQVJUSUQJCTB4MTgJLyogcGFydCBpZCAoImV4dGVuZGVkIiB2ZXJzaW9uIGNtZCkgKi8KKyNkZWZpbmUgRkRfU0FWRQkJCTB4MmUJLyogc2F2ZSBmZGMgcmVncyBmb3IgbGF0ZXIgcmVzdG9yZSAqLworI2RlZmluZSBGRF9EUklWRVNQRUMJCTB4OGUJLyogZHJpdmUgc3BlY2lmaWNhdGlvbjogQWNjZXNzIHRvIHRoZQorCQkJCQkgKiAyIE1icHMgZGF0YSB0cmFuc2ZlciByYXRlIGZvciB0YXBlCisJCQkJCSAqIGRyaXZlcyAqLworCisjZGVmaW5lIEZEX1JFU1RPUkUJCTB4NGUgICAgLyogbGF0ZXIgcmVzdG9yZSAqLworI2RlZmluZSBGRF9QT1dFUkRPV04JCTB4MjcJLyogY29uZmlndXJlIEZEQydzIHBvd2Vyc2F2ZSBmZWF0dXJlcyAqLworI2RlZmluZSBGRF9GT1JNQVRfTl9XUklURQkweGVmICAgIC8qIGZvcm1hdCBhbmQgd3JpdGUgaW4gb25lIGdvLiAqLworI2RlZmluZSBGRF9PUFRJT04JCTB4MzMJLyogSVNPIGZvcm1hdCAod2hpY2ggaXMgYSBjbGVhbiB3YXkgdG8KKwkJCQkJICogcGFjayBtb3JlIHNlY3RvcnMgb24gYSB0cmFjaykgKi8KKworLyogRE1BIGNvbW1hbmRzICovCisjZGVmaW5lIERNQV9SRUFECTB4NDYKKyNkZWZpbmUgRE1BX1dSSVRFCTB4NEEKKworLyogRkRDIHZlcnNpb24gcmV0dXJuIHR5cGVzICovCisjZGVmaW5lIEZEQ19OT05FCTB4MDAKKyNkZWZpbmUgRkRDX1VOS05PV04JMHgxMAkvKiBETyBOT1QgVVNFIFRISVMgVFlQRSBFWENFUFQgSUYgSURFTlRJRklDQVRJT04KKwkJCQkgICBGQUlMUyBFQVJMWSAqLworI2RlZmluZSBGRENfODI3MkEJMHgyMAkvKiBJbnRlbCA4MjcyYSwgTkVDIDc2NSAqLworI2RlZmluZSBGRENfNzY1RUQJMHgzMAkvKiBOb24tSW50ZWwgMU1CLWNvbXBhdGlibGUgRkRDLCBjYW4ndCBkZXRlY3QgKi8KKyNkZWZpbmUgRkRDXzgyMDcyCTB4NDAJLyogSW50ZWwgODIwNzI7IDgyNzJhICsgRklGTyArIERVTVBSRUdTICovCisjZGVmaW5lIEZEQ184MjA3MkEJMHg0NQkvKiA4MjA3MkEgKG9uIFNwYXJjcykgKi8KKyNkZWZpbmUgRkRDXzgyMDc3X09SSUcJMHg1MQkvKiBPcmlnaW5hbCB2ZXJzaW9uIG9mIDgyMDc3QUEsIHNhbnMgTE9DSyAqLworI2RlZmluZSBGRENfODIwNzcJMHg1MgkvKiA4MjA3N0FBLTEgKi8KKyNkZWZpbmUgRkRDXzgyMDc4X1VOS04JMHg1ZgkvKiBVbmtub3duIDgyMDc4IHZhcmlhbnQgKi8KKyNkZWZpbmUgRkRDXzgyMDc4CTB4NjAJLyogNDRwaW4gODIwNzggb3IgNjRwaW4gODIwNzhTTCAqLworI2RlZmluZSBGRENfODIwNzhfMQkweDYxCS8qIDgyMDc4LTEgKDJNYnBzIGZkYykgKi8KKyNkZWZpbmUgRkRDX1M4MjA3OEIJMHg2MgkvKiBTODIwNzhCIChmaXJzdCBzZWVuIG9uIEFkYXB0ZWMgQVZBLTI4MjUgVkxCCisJCQkJICogU0NTSS9FSURFL0Zsb3BweSBjb250cm9sbGVyKSAqLworI2RlZmluZSBGRENfODczMDYJMHg2MwkvKiBOYXRpb25hbCBTZW1pY29uZHVjdG9yIFBDIDg3MzA2ICovCisKKy8qCisgKiBCZXdhcmU6IHRoZSBmZGMgdHlwZSBsaXN0IGlzIHJvdWdobHkgc29ydGVkIGJ5IGluY3JlYXNpbmcgZmVhdHVyZXMuCisgKiBQcmVzZW5jZSBvZiBmZWF0dXJlcyBpcyB0ZXN0ZWQgYnkgY29tcGFyaW5nIHRoZSBGREMgdmVyc2lvbiBpZCB3aXRoIHRoZQorICogIm9sZGVzdCIgdmVyc2lvbiB0aGF0IGhhcyB0aGUgbmVlZGVkIGZlYXR1cmUuCisgKiBJZiBkdXJpbmcgRkRDIGRldGVjdGlvbiwgYW4gb2JzY3VyZSB0ZXN0IGZhaWxzIGxhdGUgaW4gdGhlIHNlcXVlbmNlLCBkb24ndAorICogYXNzaWduIEZEQ19VTktOT1dOLiBFbHNlIHRoZSBGREMgd2lsbCBiZSB0cmVhdGVkIGFzIGEgZHVtYiA4MjcyYSwgb3Igd29yc2UuCisgKiBUaGlzIGlzIGVzcGVjaWFsbHkgdHJ1ZSBpZiB0aGUgdGVzdHMgYXJlIHVubmVlZGVkLgorICovCisKKyNkZWZpbmUgRkRfUkVTRVRfREVMQVkgMjAKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9maWxlLmggYi9pbmNsdWRlL2xpbnV4L2ZpbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjA2YmViCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9maWxlLmgKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIFdyYXBwZXIgZnVuY3Rpb25zIGZvciBhY2Nlc3NpbmcgdGhlIGZpbGVfc3RydWN0IGZkIGFycmF5LgorICovCisKKyNpZm5kZWYgX19MSU5VWF9GSUxFX0gKKyNkZWZpbmUgX19MSU5VWF9GSUxFX0gKKworI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlIDxsaW51eC9wb3NpeF90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKworLyoKKyAqIFRoZSBkZWZhdWx0IGZkIGFycmF5IG5lZWRzIHRvIGJlIGF0IGxlYXN0IEJJVFNfUEVSX0xPTkcsCisgKiBhcyB0aGlzIGlzIHRoZSBncmFudWxhcml0eSByZXR1cm5lZCBieSBjb3B5X2Zkc2V0KCkuCisgKi8KKyNkZWZpbmUgTlJfT1BFTl9ERUZBVUxUIEJJVFNfUEVSX0xPTkcKKworLyoKKyAqIE9wZW4gZmlsZSB0YWJsZSBzdHJ1Y3R1cmUKKyAqLworc3RydWN0IGZpbGVzX3N0cnVjdCB7CisgICAgICAgIGF0b21pY190IGNvdW50OworICAgICAgICBzcGlubG9ja190IGZpbGVfbG9jazsgICAgIC8qIFByb3RlY3RzIGFsbCB0aGUgYmVsb3cgbWVtYmVycy4gIE5lc3RzIGluc2lkZSB0c2stPmFsbG9jX2xvY2sgKi8KKyAgICAgICAgaW50IG1heF9mZHM7CisgICAgICAgIGludCBtYXhfZmRzZXQ7CisgICAgICAgIGludCBuZXh0X2ZkOworICAgICAgICBzdHJ1Y3QgZmlsZSAqKiBmZDsgICAgICAvKiBjdXJyZW50IGZkIGFycmF5ICovCisgICAgICAgIGZkX3NldCAqY2xvc2Vfb25fZXhlYzsKKyAgICAgICAgZmRfc2V0ICpvcGVuX2ZkczsKKyAgICAgICAgZmRfc2V0IGNsb3NlX29uX2V4ZWNfaW5pdDsKKyAgICAgICAgZmRfc2V0IG9wZW5fZmRzX2luaXQ7CisgICAgICAgIHN0cnVjdCBmaWxlICogZmRfYXJyYXlbTlJfT1BFTl9ERUZBVUxUXTsKK307CisKK2V4dGVybiB2b2lkIEZBU1RDQUxMKF9fZnB1dChzdHJ1Y3QgZmlsZSAqKSk7CitleHRlcm4gdm9pZCBGQVNUQ0FMTChmcHV0KHN0cnVjdCBmaWxlICopKTsKKworc3RhdGljIGlubGluZSB2b2lkIGZwdXRfbGlnaHQoc3RydWN0IGZpbGUgKmZpbGUsIGludCBmcHV0X25lZWRlZCkKK3sKKwlpZiAodW5saWtlbHkoZnB1dF9uZWVkZWQpKQorCQlmcHV0KGZpbGUpOworfQorCitleHRlcm4gc3RydWN0IGZpbGUgKiBGQVNUQ0FMTChmZ2V0KHVuc2lnbmVkIGludCBmZCkpOworZXh0ZXJuIHN0cnVjdCBmaWxlICogRkFTVENBTEwoZmdldF9saWdodCh1bnNpZ25lZCBpbnQgZmQsIGludCAqZnB1dF9uZWVkZWQpKTsKK2V4dGVybiB2b2lkIEZBU1RDQUxMKHNldF9jbG9zZV9vbl9leGVjKHVuc2lnbmVkIGludCBmZCwgaW50IGZsYWcpKTsKK2V4dGVybiB2b2lkIHB1dF9maWxwKHN0cnVjdCBmaWxlICopOworZXh0ZXJuIGludCBnZXRfdW51c2VkX2ZkKHZvaWQpOworZXh0ZXJuIHZvaWQgRkFTVENBTEwocHV0X3VudXNlZF9mZCh1bnNpZ25lZCBpbnQgZmQpKTsKK3N0cnVjdCBrbWVtX2NhY2hlX3M7CitleHRlcm4gdm9pZCBmaWxwX2N0b3Iodm9pZCAqIG9ianAsIHN0cnVjdCBrbWVtX2NhY2hlX3MgKmNhY2hlcCwgdW5zaWduZWQgbG9uZyBjZmxhZ3MpOworZXh0ZXJuIHZvaWQgZmlscF9kdG9yKHZvaWQgKiBvYmpwLCBzdHJ1Y3Qga21lbV9jYWNoZV9zICpjYWNoZXAsIHVuc2lnbmVkIGxvbmcgZGZsYWdzKTsKKworZXh0ZXJuIHN0cnVjdCBmaWxlICoqIGFsbG9jX2ZkX2FycmF5KGludCk7CitleHRlcm4gdm9pZCBmcmVlX2ZkX2FycmF5KHN0cnVjdCBmaWxlICoqLCBpbnQpOworCitleHRlcm4gZmRfc2V0ICphbGxvY19mZHNldChpbnQpOworZXh0ZXJuIHZvaWQgZnJlZV9mZHNldChmZF9zZXQgKiwgaW50KTsKKworZXh0ZXJuIGludCBleHBhbmRfZmlsZXMoc3RydWN0IGZpbGVzX3N0cnVjdCAqLCBpbnQgbnIpOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBmaWxlICogZmNoZWNrX2ZpbGVzKHN0cnVjdCBmaWxlc19zdHJ1Y3QgKmZpbGVzLCB1bnNpZ25lZCBpbnQgZmQpCit7CisJc3RydWN0IGZpbGUgKiBmaWxlID0gTlVMTDsKKworCWlmIChmZCA8IGZpbGVzLT5tYXhfZmRzKQorCQlmaWxlID0gZmlsZXMtPmZkW2ZkXTsKKwlyZXR1cm4gZmlsZTsKK30KKworLyoKKyAqIENoZWNrIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBmZCBoYXMgYW4gb3BlbiBmaWxlLgorICovCisjZGVmaW5lIGZjaGVjayhmZCkJZmNoZWNrX2ZpbGVzKGN1cnJlbnQtPmZpbGVzLCBmZCkKKworZXh0ZXJuIHZvaWQgRkFTVENBTEwoZmRfaW5zdGFsbCh1bnNpZ25lZCBpbnQgZmQsIHN0cnVjdCBmaWxlICogZmlsZSkpOworCitzdHJ1Y3QgdGFza19zdHJ1Y3Q7CisKK3N0cnVjdCBmaWxlc19zdHJ1Y3QgKmdldF9maWxlc19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICopOwordm9pZCBGQVNUQ0FMTChwdXRfZmlsZXNfc3RydWN0KHN0cnVjdCBmaWxlc19zdHJ1Y3QgKmZzKSk7CisKKyNlbmRpZiAvKiBfX0xJTlVYX0ZJTEVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaCBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JhODQzYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmgKQEAgLTAsMCArMSwxNTEgQEAKKy8qCisgKiBMaW51eCBTb2NrZXQgRmlsdGVyIERhdGEgU3RydWN0dXJlcworICovCisKKyNpZm5kZWYgX19MSU5VWF9GSUxURVJfSF9fCisjZGVmaW5lIF9fTElOVVhfRklMVEVSX0hfXworCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNlbmRpZgorCisvKgorICogQ3VycmVudCB2ZXJzaW9uIG9mIHRoZSBmaWx0ZXIgY29kZSBhcmNoaXRlY3R1cmUuCisgKi8KKyNkZWZpbmUgQlBGX01BSk9SX1ZFUlNJT04gMQorI2RlZmluZSBCUEZfTUlOT1JfVkVSU0lPTiAxCisKKy8qCisgKglUcnkgYW5kIGtlZXAgdGhlc2UgdmFsdWVzIGFuZCBzdHJ1Y3R1cmVzIHNpbWlsYXIgdG8gQlNELCBlc3BlY2lhbGx5CisgKgl0aGUgQlBGIGNvZGUgZGVmaW5pdGlvbnMgd2hpY2ggbmVlZCB0byBtYXRjaCBzbyB5b3UgY2FuIHNoYXJlIGZpbHRlcnMKKyAqLworIAorc3RydWN0IHNvY2tfZmlsdGVyCS8qIEZpbHRlciBibG9jayAqLworeworICAgICAgICBfX3UxNgljb2RlOyAgIC8qIEFjdHVhbCBmaWx0ZXIgY29kZSAqLworICAgICAgICBfX3U4CWp0OwkvKiBKdW1wIHRydWUgKi8KKyAgICAgICAgX191OAlqZjsJLyogSnVtcCBmYWxzZSAqLworICAgICAgICBfX3UzMglrOyAgICAgIC8qIEdlbmVyaWMgbXVsdGl1c2UgZmllbGQgKi8KK307CisKK3N0cnVjdCBzb2NrX2Zwcm9nCS8qIFJlcXVpcmVkIGZvciBTT19BVFRBQ0hfRklMVEVSLiAqLworeworCXVuc2lnbmVkIHNob3J0CQlsZW47CS8qIE51bWJlciBvZiBmaWx0ZXIgYmxvY2tzICovCisJc3RydWN0IHNvY2tfZmlsdGVyIF9fdXNlciAqZmlsdGVyOworfTsKKworI2lmZGVmIF9fS0VSTkVMX18KK3N0cnVjdCBza19maWx0ZXIKK3sKKwlhdG9taWNfdAkJcmVmY250OworICAgICAgICB1bnNpZ25lZCBpbnQgICAgICAgICAJbGVuOwkvKiBOdW1iZXIgb2YgZmlsdGVyIGJsb2NrcyAqLworICAgICAgICBzdHJ1Y3Qgc29ja19maWx0ZXIgICAgIAlpbnNuc1swXTsKK307CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHNrX2ZpbHRlcl9sZW4oc3RydWN0IHNrX2ZpbHRlciAqZnApCit7CisJcmV0dXJuIGZwLT5sZW4qc2l6ZW9mKHN0cnVjdCBzb2NrX2ZpbHRlcikgKyBzaXplb2YoKmZwKTsKK30KKyNlbmRpZgorCisvKgorICogSW5zdHJ1Y3Rpb24gY2xhc3NlcworICovCisKKyNkZWZpbmUgQlBGX0NMQVNTKGNvZGUpICgoY29kZSkgJiAweDA3KQorI2RlZmluZSAgICAgICAgIEJQRl9MRCAgICAgICAgICAweDAwCisjZGVmaW5lICAgICAgICAgQlBGX0xEWCAgICAgICAgIDB4MDEKKyNkZWZpbmUgICAgICAgICBCUEZfU1QgICAgICAgICAgMHgwMgorI2RlZmluZSAgICAgICAgIEJQRl9TVFggICAgICAgICAweDAzCisjZGVmaW5lICAgICAgICAgQlBGX0FMVSAgICAgICAgIDB4MDQKKyNkZWZpbmUgICAgICAgICBCUEZfSk1QICAgICAgICAgMHgwNQorI2RlZmluZSAgICAgICAgIEJQRl9SRVQgICAgICAgICAweDA2CisjZGVmaW5lICAgICAgICAgQlBGX01JU0MgICAgICAgIDB4MDcKKworLyogbGQvbGR4IGZpZWxkcyAqLworI2RlZmluZSBCUEZfU0laRShjb2RlKSAgKChjb2RlKSAmIDB4MTgpCisjZGVmaW5lICAgICAgICAgQlBGX1cgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgICAgICAgICBCUEZfSCAgICAgICAgICAgMHgwOAorI2RlZmluZSAgICAgICAgIEJQRl9CICAgICAgICAgICAweDEwCisjZGVmaW5lIEJQRl9NT0RFKGNvZGUpICAoKGNvZGUpICYgMHhlMCkKKyNkZWZpbmUgICAgICAgICBCUEZfSU1NICAgICAgICAgMHgwMAorI2RlZmluZSAgICAgICAgIEJQRl9BQlMgICAgICAgICAweDIwCisjZGVmaW5lICAgICAgICAgQlBGX0lORCAgICAgICAgIDB4NDAKKyNkZWZpbmUgICAgICAgICBCUEZfTUVNICAgICAgICAgMHg2MAorI2RlZmluZSAgICAgICAgIEJQRl9MRU4gICAgICAgICAweDgwCisjZGVmaW5lICAgICAgICAgQlBGX01TSCAgICAgICAgIDB4YTAKKworLyogYWx1L2ptcCBmaWVsZHMgKi8KKyNkZWZpbmUgQlBGX09QKGNvZGUpICAgICgoY29kZSkgJiAweGYwKQorI2RlZmluZSAgICAgICAgIEJQRl9BREQgICAgICAgICAweDAwCisjZGVmaW5lICAgICAgICAgQlBGX1NVQiAgICAgICAgIDB4MTAKKyNkZWZpbmUgICAgICAgICBCUEZfTVVMICAgICAgICAgMHgyMAorI2RlZmluZSAgICAgICAgIEJQRl9ESVYgICAgICAgICAweDMwCisjZGVmaW5lICAgICAgICAgQlBGX09SICAgICAgICAgIDB4NDAKKyNkZWZpbmUgICAgICAgICBCUEZfQU5EICAgICAgICAgMHg1MAorI2RlZmluZSAgICAgICAgIEJQRl9MU0ggICAgICAgICAweDYwCisjZGVmaW5lICAgICAgICAgQlBGX1JTSCAgICAgICAgIDB4NzAKKyNkZWZpbmUgICAgICAgICBCUEZfTkVHICAgICAgICAgMHg4MAorI2RlZmluZSAgICAgICAgIEJQRl9KQSAgICAgICAgICAweDAwCisjZGVmaW5lICAgICAgICAgQlBGX0pFUSAgICAgICAgIDB4MTAKKyNkZWZpbmUgICAgICAgICBCUEZfSkdUICAgICAgICAgMHgyMAorI2RlZmluZSAgICAgICAgIEJQRl9KR0UgICAgICAgICAweDMwCisjZGVmaW5lICAgICAgICAgQlBGX0pTRVQgICAgICAgIDB4NDAKKyNkZWZpbmUgQlBGX1NSQyhjb2RlKSAgICgoY29kZSkgJiAweDA4KQorI2RlZmluZSAgICAgICAgIEJQRl9LICAgICAgICAgICAweDAwCisjZGVmaW5lICAgICAgICAgQlBGX1ggICAgICAgICAgIDB4MDgKKworLyogcmV0IC0gQlBGX0sgYW5kIEJQRl9YIGFsc28gYXBwbHkgKi8KKyNkZWZpbmUgQlBGX1JWQUwoY29kZSkgICgoY29kZSkgJiAweDE4KQorI2RlZmluZSAgICAgICAgIEJQRl9BICAgICAgICAgICAweDEwCisKKy8qIG1pc2MgKi8KKyNkZWZpbmUgQlBGX01JU0NPUChjb2RlKSAoKGNvZGUpICYgMHhmOCkKKyNkZWZpbmUgICAgICAgICBCUEZfVEFYICAgICAgICAgMHgwMAorI2RlZmluZSAgICAgICAgIEJQRl9UWEEgICAgICAgICAweDgwCisKKyNpZm5kZWYgQlBGX01BWElOU05TCisjZGVmaW5lIEJQRl9NQVhJTlNOUyA0MDk2CisjZW5kaWYKKworLyoKKyAqIE1hY3JvcyBmb3IgZmlsdGVyIGJsb2NrIGFycmF5IGluaXRpYWxpemVycy4KKyAqLworI2lmbmRlZiBCUEZfU1RNVAorI2RlZmluZSBCUEZfU1RNVChjb2RlLCBrKSB7ICh1bnNpZ25lZCBzaG9ydCkoY29kZSksIDAsIDAsIGsgfQorI2VuZGlmCisjaWZuZGVmIEJQRl9KVU1QCisjZGVmaW5lIEJQRl9KVU1QKGNvZGUsIGssIGp0LCBqZikgeyAodW5zaWduZWQgc2hvcnQpKGNvZGUpLCBqdCwgamYsIGsgfQorI2VuZGlmCisKKy8qCisgKiBOdW1iZXIgb2Ygc2NyYXRjaCBtZW1vcnkgd29yZHMgZm9yOiBCUEZfU1QgYW5kIEJQRl9TVFgKKyAqLworI2RlZmluZSBCUEZfTUVNV09SRFMgMTYKKworLyogUkFUSU9OQUxFLiBOZWdhdGl2ZSBvZmZzZXRzIGFyZSBpbnZhbGlkIGluIEJQRi4KKyAgIFdlIHVzZSB0aGVtIHRvIHJlZmVyZW5jZSBhbmNpbGxhcnkgZGF0YS4KKyAgIFVubGlrZSBpbnRyb2R1Y3Rpb24gbmV3IGluc3RydWN0aW9ucywgaXQgZG9lcyBub3QgYnJlYWsKKyAgIGV4aXN0aW5nIGNvbXBpbGVycy9vcHRpbWl6ZXJzLgorICovCisjZGVmaW5lIFNLRl9BRF9PRkYgICAgKC0weDEwMDApCisjZGVmaW5lIFNLRl9BRF9QUk9UT0NPTCAwCisjZGVmaW5lIFNLRl9BRF9QS1RUWVBFIAk0CisjZGVmaW5lIFNLRl9BRF9JRklOREVYIAk4CisjZGVmaW5lIFNLRl9BRF9NQVggCTEyCisjZGVmaW5lIFNLRl9ORVRfT0ZGICAgKC0weDEwMDAwMCkKKyNkZWZpbmUgU0tGX0xMX09GRiAgICAoLTB4MjAwMDAwKQorCisjaWZkZWYgX19LRVJORUxfXworc3RydWN0IHNrX2J1ZmY7CitzdHJ1Y3Qgc29jazsKKworZXh0ZXJuIGludCBza19ydW5fZmlsdGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrX2ZpbHRlciAqZmlsdGVyLCBpbnQgZmxlbik7CitleHRlcm4gaW50IHNrX2F0dGFjaF9maWx0ZXIoc3RydWN0IHNvY2tfZnByb2cgKmZwcm9nLCBzdHJ1Y3Qgc29jayAqc2spOworZXh0ZXJuIGludCBza19jaGtfZmlsdGVyKHN0cnVjdCBzb2NrX2ZpbHRlciAqZmlsdGVyLCBpbnQgZmxlbik7CisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX19MSU5VWF9GSUxURVJfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Zpcm13YXJlLmggYi9pbmNsdWRlL2xpbnV4L2Zpcm13YXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg2MjU1YgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvZmlybXdhcmUuaApAQCAtMCwwICsxLDIwIEBACisjaWZuZGVmIF9MSU5VWF9GSVJNV0FSRV9ICisjZGVmaW5lIF9MSU5VWF9GSVJNV0FSRV9ICisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNkZWZpbmUgRklSTVdBUkVfTkFNRV9NQVggMzAgCitzdHJ1Y3QgZmlybXdhcmUgeworCXNpemVfdCBzaXplOworCXU4ICpkYXRhOworfTsKK3N0cnVjdCBkZXZpY2U7CitpbnQgcmVxdWVzdF9maXJtd2FyZShjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKipmdywgY29uc3QgY2hhciAqbmFtZSwKKwkJICAgICBzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpOworaW50IHJlcXVlc3RfZmlybXdhcmVfbm93YWl0KAorCXN0cnVjdCBtb2R1bGUgKm1vZHVsZSwKKwljb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsIHZvaWQgKmNvbnRleHQsCisJdm9pZCAoKmNvbnQpKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsIHZvaWQgKmNvbnRleHQpKTsKKwordm9pZCByZWxlYXNlX2Zpcm13YXJlKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpOwordm9pZCByZWdpc3Rlcl9maXJtd2FyZShjb25zdCBjaGFyICpuYW1lLCBjb25zdCB1OCAqZGF0YSwgc2l6ZV90IHNpemUpOworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZsYXQuaCBiL2luY2x1ZGUvbGludXgvZmxhdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjNTY4NTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2ZsYXQuaApAQCAtMCwwICsxLDEwMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMi0yMDAzICBEYXZpZCBNY0N1bGxvdWdoIDxkYXZpZG1Ac25hcGdlYXIuY29tPgorICogQ29weXJpZ2h0IChDKSAxOTk4ICAgICAgIEtlbm5ldGggQWxiYW5vd3NraSA8a2phaGRzQGtqYWhkcy5jb20+CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIFNpbHZlciBIYW1tZXIgR3JvdXAsIEx0ZC4KKyAqCisgKiBUaGlzIGZpbGUgcHJvdmlkZXMgdGhlIGRlZmluaXRpb25zIGFuZCBzdHJ1Y3R1cmVzIG5lZWRlZCB0bworICogc3VwcG9ydCB1Q2xpbnV4IGZsYXQtZm9ybWF0IGV4ZWN1dGFibGVzLgorICovCisKKyNpZm5kZWYgX0xJTlVYX0ZMQVRfSAorI2RlZmluZSBfTElOVVhfRkxBVF9ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8YXNtL2ZsYXQuaD4KKyNlbmRpZgorCisjZGVmaW5lCUZMQVRfVkVSU0lPTgkJCTB4MDAwMDAwMDRMCisKKyNpZmRlZiBDT05GSUdfQklORk1UX1NIQVJFRF9GTEFUCisjZGVmaW5lCU1BWF9TSEFSRURfTElCUwkJCSg0KQorI2Vsc2UKKyNkZWZpbmUJTUFYX1NIQVJFRF9MSUJTCQkJKDEpCisjZW5kaWYKKworLyoKKyAqIFRvIG1ha2UgZXZlcnl0aGluZyBlYXNpZXIgdG8gcG9ydCBhbmQgbWFuYWdlIGNyb3NzIHBsYXRmb3JtCisgKiBkZXZlbG9wbWVudCwgIGFsbCBmaWVsZHMgYXJlIGluIG5ldHdvcmsgYnl0ZSBvcmRlci4KKyAqLworCitzdHJ1Y3QgZmxhdF9oZHIgeworCWNoYXIgbWFnaWNbNF07CisJdW5zaWduZWQgbG9uZyByZXY7ICAgICAgICAgIC8qIHZlcnNpb24gKGFzIGFib3ZlKSAqLworCXVuc2lnbmVkIGxvbmcgZW50cnk7ICAgICAgICAvKiBPZmZzZXQgb2YgZmlyc3QgZXhlY3V0YWJsZSBpbnN0cnVjdGlvbgorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHRleHQgc2VnbWVudCBmcm9tIGJlZ2lubmluZyBvZiBmaWxlICovCisJdW5zaWduZWQgbG9uZyBkYXRhX3N0YXJ0OyAgIC8qIE9mZnNldCBvZiBkYXRhIHNlZ21lbnQgZnJvbSBiZWdpbm5pbmcgb2YKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSAqLworCXVuc2lnbmVkIGxvbmcgZGF0YV9lbmQ7ICAgICAvKiBPZmZzZXQgb2YgZW5kIG9mIGRhdGEgc2VnbWVudAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIGJlZ2lubmluZyBvZiBmaWxlICovCisJdW5zaWduZWQgbG9uZyBic3NfZW5kOyAgICAgIC8qIE9mZnNldCBvZiBlbmQgb2YgYnNzIHNlZ21lbnQgZnJvbSBiZWdpbm5pbmcKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgZmlsZSAqLworCisJLyogKEl0IGlzIGFzc3VtZWQgdGhhdCBkYXRhX2VuZCB0aHJvdWdoIGJzc19lbmQgZm9ybXMgdGhlIGJzcyBzZWdtZW50LikgKi8KKworCXVuc2lnbmVkIGxvbmcgc3RhY2tfc2l6ZTsgICAvKiBTaXplIG9mIHN0YWNrLCBpbiBieXRlcyAqLworCXVuc2lnbmVkIGxvbmcgcmVsb2Nfc3RhcnQ7ICAvKiBPZmZzZXQgb2YgcmVsb2NhdGlvbiByZWNvcmRzIGZyb20KKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW5uaW5nIG9mIGZpbGUgKi8KKwl1bnNpZ25lZCBsb25nIHJlbG9jX2NvdW50OyAgLyogTnVtYmVyIG9mIHJlbG9jYXRpb24gcmVjb3JkcyAqLworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7ICAgICAgIAorCXVuc2lnbmVkIGxvbmcgYnVpbGRfZGF0ZTsgICAvKiBXaGVuIHRoZSBwcm9ncmFtL2xpYnJhcnkgd2FzIGJ1aWx0ICovCisJdW5zaWduZWQgbG9uZyBmaWxsZXJbNV07ICAgIC8qIFJlc2VydmVyZWQsIHNldCB0byB6ZXJvICovCit9OworCisjZGVmaW5lIEZMQVRfRkxBR19SQU0gICAgMHgwMDAxIC8qIGxvYWQgcHJvZ3JhbSBlbnRpcmVseSBpbnRvIFJBTSAqLworI2RlZmluZSBGTEFUX0ZMQUdfR09UUElDIDB4MDAwMiAvKiBwcm9ncmFtIGlzIFBJQyB3aXRoIEdPVCAqLworI2RlZmluZSBGTEFUX0ZMQUdfR1pJUCAgIDB4MDAwNCAvKiBhbGwgYnV0IHRoZSBoZWFkZXIgaXMgY29tcHJlc3NlZCAqLworI2RlZmluZSBGTEFUX0ZMQUdfR1pEQVRBIDB4MDAwOCAvKiBvbmx5IGRhdGEvcmVsb2NzIGFyZSBjb21wcmVzc2VkIChmb3IgWElQKSAqLworI2RlZmluZSBGTEFUX0ZMQUdfS1RSQUNFIDB4MDAxMCAvKiBvdXRwdXQgdXNlZnVsIGtlcm5lbCB0cmFjZSBmb3IgZGVidWdnaW5nICovCisKKworI2lmZGVmIF9fS0VSTkVMX18gLyogc28gc3lzdGVtcyB3aXRob3V0IGxpbnV4IGhlYWRlcnMgY2FuIGNvbXBpbGUgdGhlIGFwcHMgKi8KKy8qCisgKiBXaGlsZSBpdCB3b3VsZCBiZSBuaWNlIHRvIGtlZXAgdGhpcyBoZWFkZXIgY2xlYW4sICB1c2VycyBvZiBvbGRlcgorICogdG9vbHMgc3RpbGwgbmVlZCB0aGlzIHN1cHBvcnQgaW4gdGhlIGtlcm5lbC4gIFNvIHRoaXMgc2VjdGlvbiBpcworICogcHVyZWx5IGZvciBjb21wYXRpYmlsaXR5IHdpdGggb2xkIHRvb2wgY2hhaW5zLgorICoKKyAqIERPIE5PVCBtYWtlIGNoYW5nZXMgb3IgZW5oYW5jZW1lbnRzIHRvIHRoZSBvbGQgZm9ybWF0IHBsZWFzZSwgIGp1c3Qgd29yaworICogICAgICAgIHdpdGggdGhlIGZvcm1hdCBhYm92ZSwgIGV4Y2VwdCB0byBmaXggYnVncyB3aXRoIG9sZCBmb3JtYXQgc3VwcG9ydC4KKyAqLworCisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorCisjZGVmaW5lCU9MRF9GTEFUX1ZFUlNJT04JCQkweDAwMDAwMDAyTAorI2RlZmluZSBPTERfRkxBVF9SRUxPQ19UWVBFX1RFWFQJMAorI2RlZmluZSBPTERfRkxBVF9SRUxPQ19UWVBFX0RBVEEJMQorI2RlZmluZSBPTERfRkxBVF9SRUxPQ19UWVBFX0JTUwkJMgorCit0eXBlZGVmIHVuaW9uIHsKKwl1bnNpZ25lZCBsb25nCXZhbHVlOworCXN0cnVjdCB7CisjIGlmIGRlZmluZWQobWM2ODAwMCkgJiYgIWRlZmluZWQoQ09ORklHX0NPTERGSVJFKQorCQlzaWduZWQgbG9uZyBvZmZzZXQgOiAzMDsKKwkJdW5zaWduZWQgbG9uZyB0eXBlIDogMjsKKyMgICAJZGVmaW5lIE9MRF9GTEFUX0ZMQUdfUkFNICAgIDB4MSAvKiBsb2FkIHByb2dyYW0gZW50aXJlbHkgaW50byBSQU0gKi8KKyMgZWxpZiBkZWZpbmVkKF9fQklHX0VORElBTl9CSVRGSUVMRCkKKwkJdW5zaWduZWQgbG9uZyB0eXBlIDogMjsKKwkJc2lnbmVkIGxvbmcgb2Zmc2V0IDogMzA7CisjICAgCWRlZmluZSBPTERfRkxBVF9GTEFHX1JBTSAgICAweDEgLyogbG9hZCBwcm9ncmFtIGVudGlyZWx5IGludG8gUkFNICovCisjIGVsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fQklURklFTEQpCisJCXNpZ25lZCBsb25nIG9mZnNldCA6IDMwOworCQl1bnNpZ25lZCBsb25nIHR5cGUgOiAyOworIyAgIAlkZWZpbmUgT0xEX0ZMQVRfRkxBR19SQU0gICAgMHgxIC8qIGxvYWQgcHJvZ3JhbSBlbnRpcmVseSBpbnRvIFJBTSAqLworIyBlbHNlCisjICAgCWVycm9yICJVbmtub3duIGJpdGZpZWxkIG9yZGVyIGZvciBmbGF0IGZpbGVzLiIKKyMgZW5kaWYKKwl9IHJlbG9jOworfSBmbGF0X3YyX3JlbG9jX3Q7CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfTElOVVhfRkxBVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZvbnQuaCBiL2luY2x1ZGUvbGludXgvZm9udC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjMmQ2OTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2ZvbnQuaApAQCAtMCwwICsxLDUzIEBACisvKgorICogIGZvbnQuaCAtLSBgU29mdCcgZm9udCBkZWZpbml0aW9ucworICoKKyAqICBDcmVhdGVkIDE5OTUgYnkgR2VlcnQgVXl0dGVyaG9ldmVuCisgKgorICogIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqICBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX1ZJREVPX0ZPTlRfSAorI2RlZmluZSBfVklERU9fRk9OVF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3QgZm9udF9kZXNjIHsKKyAgICBpbnQgaWR4OworICAgIGNoYXIgKm5hbWU7CisgICAgaW50IHdpZHRoLCBoZWlnaHQ7CisgICAgdm9pZCAqZGF0YTsKKyAgICBpbnQgcHJlZjsKK307CisKKyNkZWZpbmUgVkdBOHg4X0lEWAkwCisjZGVmaW5lIFZHQTh4MTZfSURYCTEKKyNkZWZpbmUgUEVBUkw4eDhfSURYCTIKKyNkZWZpbmUgVkdBNngxMV9JRFgJMworI2RlZmluZSBTVU44eDE2X0lEWAk0CisjZGVmaW5lIFNVTjEyeDIyX0lEWAk1CisjZGVmaW5lIEFDT1JOOHg4X0lEWAk2CisjZGVmaW5lCU1JTkk0eDZfSURYCTcKKworZXh0ZXJuIHN0cnVjdCBmb250X2Rlc2MJZm9udF92Z2FfOHg4LAorCQkJCWZvbnRfdmdhXzh4MTYsCisJCQkJZm9udF9wZWFybF84eDgsCisJCQkJZm9udF92Z2FfNngxMSwKKwkJCQlmb250X3N1bl84eDE2LAorCQkJCWZvbnRfc3VuXzEyeDIyLAorCQkJCWZvbnRfYWNvcm5fOHg4LAorCQkJCWZvbnRfbWluaV80eDY7CisKKy8qIEZpbmQgYSBmb250IHdpdGggYSBzcGVjaWZpYyBuYW1lICovCisKK2V4dGVybiBzdHJ1Y3QgZm9udF9kZXNjICpmaW5kX2ZvbnQoY2hhciAqbmFtZSk7CisKKy8qIEdldCB0aGUgZGVmYXVsdCBmb250IGZvciBhIHNwZWNpZmljIHNjcmVlbiBzaXplICovCisKK2V4dGVybiBzdHJ1Y3QgZm9udF9kZXNjICpnZXRfZGVmYXVsdF9mb250KGludCB4cmVzLCBpbnQgeXJlcyk7CisKKy8qIE1heC4gbGVuZ3RoIGZvciB0aGUgbmFtZSBvZiBhIHByZWRlZmluZWQgZm9udCAqLworI2RlZmluZSBNQVhfRk9OVF9OQU1FCTMyCisKKyNlbmRpZiAvKiBfVklERU9fRk9OVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzLmggYi9pbmNsdWRlL2xpbnV4L2ZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRmNjg3ZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvZnMuaApAQCAtMCwwICsxLDE2NzcgQEAKKyNpZm5kZWYgX0xJTlVYX0ZTX0gKKyNkZWZpbmUgX0xJTlVYX0ZTX0gKKworLyoKKyAqIFRoaXMgZmlsZSBoYXMgZGVmaW5pdGlvbnMgZm9yIHNvbWUgaW1wb3J0YW50IGZpbGUgdGFibGUKKyAqIHN0cnVjdHVyZXMgZXRjLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9saW1pdHMuaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorCisvKgorICogSXQncyBzaWxseSB0byBoYXZlIE5SX09QRU4gYmlnZ2VyIHRoYW4gTlJfRklMRSwgYnV0IHlvdSBjYW4gY2hhbmdlCisgKiB0aGUgZmlsZSBsaW1pdCBhdCBydW50aW1lIGFuZCBvbmx5IHJvb3QgY2FuIGluY3JlYXNlIHRoZSBwZXItcHJvY2VzcworICogbnJfZmlsZSBybGltaXQsIHNvIGl0J3Mgc2FmZSB0byBzZXQgdXAgYSByaWRpY3Vsb3VzbHkgaGlnaCBhYnNvbHV0ZQorICogdXBwZXIgbGltaXQgb24gZmlsZXMtcGVyLXByb2Nlc3MuCisgKgorICogU29tZSBwcm9ncmFtcyAobm90YWJseSB0aG9zZSB1c2luZyBzZWxlY3QoKSkgbWF5IGhhdmUgdG8gYmUgCisgKiByZWNvbXBpbGVkIHRvIHRha2UgZnVsbCBhZHZhbnRhZ2Ugb2YgdGhlIG5ldyBsaW1pdHMuLiAgCisgKi8KKworLyogRml4ZWQgY29uc3RhbnRzIGZpcnN0OiAqLworI3VuZGVmIE5SX09QRU4KKyNkZWZpbmUgTlJfT1BFTiAoMTAyNCoxMDI0KQkvKiBBYnNvbHV0ZSB1cHBlciBsaW1pdCBvbiBmZCBudW0gKi8KKyNkZWZpbmUgSU5SX09QRU4gMTAyNAkJLyogSW5pdGlhbCBzZXR0aW5nIGZvciBuZmlsZSBybGltaXRzICovCisKKyNkZWZpbmUgQkxPQ0tfU0laRV9CSVRTIDEwCisjZGVmaW5lIEJMT0NLX1NJWkUgKDE8PEJMT0NLX1NJWkVfQklUUykKKworLyogQW5kIGR5bmFtaWNhbGx5LXR1bmFibGUgbGltaXRzIGFuZCBkZWZhdWx0czogKi8KK3N0cnVjdCBmaWxlc19zdGF0X3N0cnVjdCB7CisJaW50IG5yX2ZpbGVzOwkJLyogcmVhZCBvbmx5ICovCisJaW50IG5yX2ZyZWVfZmlsZXM7CS8qIHJlYWQgb25seSAqLworCWludCBtYXhfZmlsZXM7CQkvKiB0dW5hYmxlICovCit9OworZXh0ZXJuIHN0cnVjdCBmaWxlc19zdGF0X3N0cnVjdCBmaWxlc19zdGF0OworCitzdHJ1Y3QgaW5vZGVzX3N0YXRfdCB7CisJaW50IG5yX2lub2RlczsKKwlpbnQgbnJfdW51c2VkOworCWludCBkdW1teVs1XTsKK307CitleHRlcm4gc3RydWN0IGlub2Rlc19zdGF0X3QgaW5vZGVzX3N0YXQ7CisKK2V4dGVybiBpbnQgbGVhc2VzX2VuYWJsZSwgbGVhc2VfYnJlYWtfdGltZTsKKworI2lmZGVmIENPTkZJR19ETk9USUZZCitleHRlcm4gaW50IGRpcl9ub3RpZnlfZW5hYmxlOworI2VuZGlmCisKKyNkZWZpbmUgTlJfRklMRSAgODE5MgkvKiB0aGlzIGNhbiB3ZWxsIGJlIGxhcmdlciBvbiBhIGxhcmdlciBzeXN0ZW0gKi8KKworI2RlZmluZSBNQVlfRVhFQyAxCisjZGVmaW5lIE1BWV9XUklURSAyCisjZGVmaW5lIE1BWV9SRUFEIDQKKyNkZWZpbmUgTUFZX0FQUEVORCA4CisKKyNkZWZpbmUgRk1PREVfUkVBRCAxCisjZGVmaW5lIEZNT0RFX1dSSVRFIDIKKworLyogSW50ZXJuYWwga2VybmVsIGV4dGVuc2lvbnMgKi8KKyNkZWZpbmUgRk1PREVfTFNFRUsJNAorI2RlZmluZSBGTU9ERV9QUkVBRAk4CisjZGVmaW5lIEZNT0RFX1BXUklURQlGTU9ERV9QUkVBRAkvKiBUaGVzZSBnbyBoYW5kIGluIGhhbmQgKi8KKworI2RlZmluZSBSV19NQVNLCQkxCisjZGVmaW5lIFJXQV9NQVNLCTIKKyNkZWZpbmUgUkVBRCAwCisjZGVmaW5lIFdSSVRFIDEKKyNkZWZpbmUgUkVBREEgMgkJLyogcmVhZC1haGVhZCAgLSBkb24ndCBibG9jayBpZiBubyByZXNvdXJjZXMgKi8KKyNkZWZpbmUgU1BFQ0lBTCA0CS8qIEZvciBub24tYmxvY2tkZXZpY2UgcmVxdWVzdHMgaW4gcmVxdWVzdCBxdWV1ZSAqLworI2RlZmluZSBSRUFEX1NZTkMJKFJFQUQgfCAoMSA8PCBCSU9fUldfU1lOQykpCisjZGVmaW5lIFdSSVRFX1NZTkMJKFdSSVRFIHwgKDEgPDwgQklPX1JXX1NZTkMpKQorI2RlZmluZSBXUklURV9CQVJSSUVSCSgoMSA8PCBCSU9fUlcpIHwgKDEgPDwgQklPX1JXX0JBUlJJRVIpKQorCisjZGVmaW5lIFNFTF9JTgkJMQorI2RlZmluZSBTRUxfT1VUCQkyCisjZGVmaW5lIFNFTF9FWAkJNAorCisvKiBwdWJsaWMgZmxhZ3MgZm9yIGZpbGVfc3lzdGVtX3R5cGUgKi8KKyNkZWZpbmUgRlNfUkVRVUlSRVNfREVWIDEgCisjZGVmaW5lIEZTX0JJTkFSWV9NT1VOVERBVEEgMgorI2RlZmluZSBGU19SRVZBTF9ET1QJMTYzODQJLyogQ2hlY2sgdGhlIHBhdGhzICIuIiwgIi4uIiBmb3Igc3RhbGVuZXNzICovCisjZGVmaW5lIEZTX09ERF9SRU5BTUUJMzI3NjgJLyogVGVtcG9yYXJ5IHN0dWZmOyB3aWxsIGdvIGF3YXkgYXMgc29vbgorCQkJCSAgKiBhcyBuZnNfcmVuYW1lKCkgd2lsbCBiZSBjbGVhbmVkIHVwCisJCQkJICAqLworLyoKKyAqIFRoZXNlIGFyZSB0aGUgZnMtaW5kZXBlbmRlbnQgbW91bnQtZmxhZ3M6IHVwIHRvIDMyIGZsYWdzIGFyZSBzdXBwb3J0ZWQKKyAqLworI2RlZmluZSBNU19SRE9OTFkJIDEJLyogTW91bnQgcmVhZC1vbmx5ICovCisjZGVmaW5lIE1TX05PU1VJRAkgMgkvKiBJZ25vcmUgc3VpZCBhbmQgc2dpZCBiaXRzICovCisjZGVmaW5lIE1TX05PREVWCSA0CS8qIERpc2FsbG93IGFjY2VzcyB0byBkZXZpY2Ugc3BlY2lhbCBmaWxlcyAqLworI2RlZmluZSBNU19OT0VYRUMJIDgJLyogRGlzYWxsb3cgcHJvZ3JhbSBleGVjdXRpb24gKi8KKyNkZWZpbmUgTVNfU1lOQ0hST05PVVMJMTYJLyogV3JpdGVzIGFyZSBzeW5jZWQgYXQgb25jZSAqLworI2RlZmluZSBNU19SRU1PVU5UCTMyCS8qIEFsdGVyIGZsYWdzIG9mIGEgbW91bnRlZCBGUyAqLworI2RlZmluZSBNU19NQU5ETE9DSwk2NAkvKiBBbGxvdyBtYW5kYXRvcnkgbG9ja3Mgb24gYW4gRlMgKi8KKyNkZWZpbmUgTVNfRElSU1lOQwkxMjgJLyogRGlyZWN0b3J5IG1vZGlmaWNhdGlvbnMgYXJlIHN5bmNocm9ub3VzICovCisjZGVmaW5lIE1TX05PQVRJTUUJMTAyNAkvKiBEbyBub3QgdXBkYXRlIGFjY2VzcyB0aW1lcy4gKi8KKyNkZWZpbmUgTVNfTk9ESVJBVElNRQkyMDQ4CS8qIERvIG5vdCB1cGRhdGUgZGlyZWN0b3J5IGFjY2VzcyB0aW1lcyAqLworI2RlZmluZSBNU19CSU5ECQk0MDk2CisjZGVmaW5lIE1TX01PVkUJCTgxOTIKKyNkZWZpbmUgTVNfUkVDCQkxNjM4NAorI2RlZmluZSBNU19WRVJCT1NFCTMyNzY4CisjZGVmaW5lIE1TX1BPU0lYQUNMCSgxPDwxNikJLyogVkZTIGRvZXMgbm90IGFwcGx5IHRoZSB1bWFzayAqLworI2RlZmluZSBNU19BQ1RJVkUJKDE8PDMwKQorI2RlZmluZSBNU19OT1VTRVIJKDE8PDMxKQorCisvKgorICogU3VwZXJibG9jayBmbGFncyB0aGF0IGNhbiBiZSBhbHRlcmVkIGJ5IE1TX1JFTU9VTlQKKyAqLworI2RlZmluZSBNU19STVRfTUFTSwkoTVNfUkRPTkxZfE1TX1NZTkNIUk9OT1VTfE1TX01BTkRMT0NLfE1TX05PQVRJTUV8XAorCQkJIE1TX05PRElSQVRJTUUpCisKKy8qCisgKiBPbGQgbWFnaWMgbW91bnQgZmxhZyBhbmQgbWFzaworICovCisjZGVmaW5lIE1TX01HQ19WQUwgMHhDMEVEMDAwMAorI2RlZmluZSBNU19NR0NfTVNLIDB4ZmZmZjAwMDAKKworLyogSW5vZGUgZmxhZ3MgLSB0aGV5IGhhdmUgbm90aGluZyB0byBzdXBlcmJsb2NrIGZsYWdzIG5vdyAqLworCisjZGVmaW5lIFNfU1lOQwkJMQkvKiBXcml0ZXMgYXJlIHN5bmNlZCBhdCBvbmNlICovCisjZGVmaW5lIFNfTk9BVElNRQkyCS8qIERvIG5vdCB1cGRhdGUgYWNjZXNzIHRpbWVzICovCisjZGVmaW5lIFNfQVBQRU5ECTQJLyogQXBwZW5kLW9ubHkgZmlsZSAqLworI2RlZmluZSBTX0lNTVVUQUJMRQk4CS8qIEltbXV0YWJsZSBmaWxlICovCisjZGVmaW5lIFNfREVBRAkJMTYJLyogcmVtb3ZlZCwgYnV0IHN0aWxsIG9wZW4gZGlyZWN0b3J5ICovCisjZGVmaW5lIFNfTk9RVU9UQQkzMgkvKiBJbm9kZSBpcyBub3QgY291bnRlZCB0byBxdW90YSAqLworI2RlZmluZSBTX0RJUlNZTkMJNjQJLyogRGlyZWN0b3J5IG1vZGlmaWNhdGlvbnMgYXJlIHN5bmNocm9ub3VzICovCisjZGVmaW5lIFNfTk9DTVRJTUUJMTI4CS8qIERvIG5vdCB1cGRhdGUgZmlsZSBjL210aW1lICovCisjZGVmaW5lIFNfU1dBUEZJTEUJMjU2CS8qIERvIG5vdCB0cnVuY2F0ZTogc3dhcG9uIGdvdCBpdHMgYm1hcHMgKi8KKyNkZWZpbmUgU19QUklWQVRFCTUxMgkvKiBJbm9kZSBpcyBmcy1pbnRlcm5hbCAqLworCisvKgorICogTm90ZSB0aGF0IG5vc3VpZCBldGMgZmxhZ3MgYXJlIGlub2RlLXNwZWNpZmljOiBzZXR0aW5nIHNvbWUgZmlsZS1zeXN0ZW0KKyAqIGZsYWdzIGp1c3QgbWVhbnMgYWxsIHRoZSBpbm9kZXMgaW5oZXJpdCB0aG9zZSBmbGFncyBieSBkZWZhdWx0LiBJdCBtaWdodCBiZQorICogcG9zc2libGUgdG8gb3ZlcnJpZGUgaXQgc2VsZWN0aXZlbHkgaWYgeW91IHJlYWxseSB3YW50ZWQgdG8gd2l0aCBzb21lCisgKiBpb2N0bCgpIHRoYXQgaXMgbm90IGN1cnJlbnRseSBpbXBsZW1lbnRlZC4KKyAqCisgKiBFeGNlcHRpb246IE1TX1JET05MWSBpcyBhbHdheXMgYXBwbGllZCB0byB0aGUgZW50aXJlIGZpbGUgc3lzdGVtLgorICoKKyAqIFVuZm9ydHVuYXRlbHksIGl0IGlzIHBvc3NpYmxlIHRvIGNoYW5nZSBhIGZpbGVzeXN0ZW1zIGZsYWdzIHdpdGggaXQgbW91bnRlZAorICogd2l0aCBmaWxlcyBpbiB1c2UuICBUaGlzIG1lYW5zIHRoYXQgYWxsIG9mIHRoZSBpbm9kZXMgd2lsbCBub3QgaGF2ZSB0aGVpcgorICogaV9mbGFncyB1cGRhdGVkLiAgSGVuY2UsIGlfZmxhZ3Mgbm8gbG9uZ2VyIGluaGVyaXQgdGhlIHN1cGVyYmxvY2sgbW91bnQKKyAqIGZsYWdzLCBzbyB0aGVzZSBoYXZlIHRvIGJlIGNoZWNrZWQgc2VwYXJhdGVseS4gLS0gcm1rQGFybS51ay5saW51eC5vcmcKKyAqLworI2RlZmluZSBfX0lTX0ZMRyhpbm9kZSxmbGcpICgoaW5vZGUpLT5pX3NiLT5zX2ZsYWdzICYgKGZsZykpCisKKyNkZWZpbmUgSVNfUkRPTkxZKGlub2RlKSAoKGlub2RlKS0+aV9zYi0+c19mbGFncyAmIE1TX1JET05MWSkKKyNkZWZpbmUgSVNfU1lOQyhpbm9kZSkJCShfX0lTX0ZMRyhpbm9kZSwgTVNfU1lOQ0hST05PVVMpIHx8IFwKKwkJCQkJKChpbm9kZSktPmlfZmxhZ3MgJiBTX1NZTkMpKQorI2RlZmluZSBJU19ESVJTWU5DKGlub2RlKQkoX19JU19GTEcoaW5vZGUsIE1TX1NZTkNIUk9OT1VTfE1TX0RJUlNZTkMpIHx8IFwKKwkJCQkJKChpbm9kZSktPmlfZmxhZ3MgJiAoU19TWU5DfFNfRElSU1lOQykpKQorI2RlZmluZSBJU19NQU5ETE9DSyhpbm9kZSkJX19JU19GTEcoaW5vZGUsIE1TX01BTkRMT0NLKQorCisjZGVmaW5lIElTX05PUVVPVEEoaW5vZGUpCSgoaW5vZGUpLT5pX2ZsYWdzICYgU19OT1FVT1RBKQorI2RlZmluZSBJU19BUFBFTkQoaW5vZGUpCSgoaW5vZGUpLT5pX2ZsYWdzICYgU19BUFBFTkQpCisjZGVmaW5lIElTX0lNTVVUQUJMRShpbm9kZSkJKChpbm9kZSktPmlfZmxhZ3MgJiBTX0lNTVVUQUJMRSkKKyNkZWZpbmUgSVNfTk9BVElNRShpbm9kZSkJKF9fSVNfRkxHKGlub2RlLCBNU19OT0FUSU1FKSB8fCAoKGlub2RlKS0+aV9mbGFncyAmIFNfTk9BVElNRSkpCisjZGVmaW5lIElTX05PRElSQVRJTUUoaW5vZGUpCV9fSVNfRkxHKGlub2RlLCBNU19OT0RJUkFUSU1FKQorI2RlZmluZSBJU19QT1NJWEFDTChpbm9kZSkJX19JU19GTEcoaW5vZGUsIE1TX1BPU0lYQUNMKQorCisjZGVmaW5lIElTX0RFQURESVIoaW5vZGUpCSgoaW5vZGUpLT5pX2ZsYWdzICYgU19ERUFEKQorI2RlZmluZSBJU19OT0NNVElNRShpbm9kZSkJKChpbm9kZSktPmlfZmxhZ3MgJiBTX05PQ01USU1FKQorI2RlZmluZSBJU19TV0FQRklMRShpbm9kZSkJKChpbm9kZSktPmlfZmxhZ3MgJiBTX1NXQVBGSUxFKQorI2RlZmluZSBJU19QUklWQVRFKGlub2RlKQkoKGlub2RlKS0+aV9mbGFncyAmIFNfUFJJVkFURSkKKworLyogdGhlIHJlYWQtb25seSBzdHVmZiBkb2Vzbid0IHJlYWxseSBiZWxvbmcgaGVyZSwgYnV0IGFueSBvdGhlciBwbGFjZSBpcworICAgcHJvYmFibHkgYXMgYmFkIGFuZCBJIGRvbid0IHdhbnQgdG8gY3JlYXRlIHlldCBhbm90aGVyIGluY2x1ZGUgZmlsZS4gKi8KKworI2RlZmluZSBCTEtST1NFVCAgIF9JTygweDEyLDkzKQkvKiBzZXQgZGV2aWNlIHJlYWQtb25seSAoMCA9IHJlYWQtd3JpdGUpICovCisjZGVmaW5lIEJMS1JPR0VUICAgX0lPKDB4MTIsOTQpCS8qIGdldCByZWFkLW9ubHkgc3RhdHVzICgwID0gcmVhZF93cml0ZSkgKi8KKyNkZWZpbmUgQkxLUlJQQVJUICBfSU8oMHgxMiw5NSkJLyogcmUtcmVhZCBwYXJ0aXRpb24gdGFibGUgKi8KKyNkZWZpbmUgQkxLR0VUU0laRSBfSU8oMHgxMiw5NikJLyogcmV0dXJuIGRldmljZSBzaXplIC81MTIgKGxvbmcgKmFyZykgKi8KKyNkZWZpbmUgQkxLRkxTQlVGICBfSU8oMHgxMiw5NykJLyogZmx1c2ggYnVmZmVyIGNhY2hlICovCisjZGVmaW5lIEJMS1JBU0VUICAgX0lPKDB4MTIsOTgpCS8qIHNldCByZWFkIGFoZWFkIGZvciBibG9jayBkZXZpY2UgKi8KKyNkZWZpbmUgQkxLUkFHRVQgICBfSU8oMHgxMiw5OSkJLyogZ2V0IGN1cnJlbnQgcmVhZCBhaGVhZCBzZXR0aW5nICovCisjZGVmaW5lIEJMS0ZSQVNFVCAgX0lPKDB4MTIsMTAwKS8qIHNldCBmaWxlc3lzdGVtIChtbS9maWxlbWFwLmMpIHJlYWQtYWhlYWQgKi8KKyNkZWZpbmUgQkxLRlJBR0VUICBfSU8oMHgxMiwxMDEpLyogZ2V0IGZpbGVzeXN0ZW0gKG1tL2ZpbGVtYXAuYykgcmVhZC1haGVhZCAqLworI2RlZmluZSBCTEtTRUNUU0VUIF9JTygweDEyLDEwMikvKiBzZXQgbWF4IHNlY3RvcnMgcGVyIHJlcXVlc3QgKGxsX3J3X2Jsay5jKSAqLworI2RlZmluZSBCTEtTRUNUR0VUIF9JTygweDEyLDEwMykvKiBnZXQgbWF4IHNlY3RvcnMgcGVyIHJlcXVlc3QgKGxsX3J3X2Jsay5jKSAqLworI2RlZmluZSBCTEtTU1pHRVQgIF9JTygweDEyLDEwNCkvKiBnZXQgYmxvY2sgZGV2aWNlIHNlY3RvciBzaXplICovCisjaWYgMAorI2RlZmluZSBCTEtQRyAgICAgIF9JTygweDEyLDEwNSkvKiBTZWUgYmxrcGcuaCAqLworCisvKiBTb21lIHBlb3BsZSBhcmUgbW9yb25zLiAgRG8gbm90IHVzZSBzaXplb2YhICovCisKKyNkZWZpbmUgQkxLRUxWR0VUICBfSU9SKDB4MTIsMTA2LHNpemVfdCkvKiBlbGV2YXRvciBnZXQgKi8KKyNkZWZpbmUgQkxLRUxWU0VUICBfSU9XKDB4MTIsMTA3LHNpemVfdCkvKiBlbGV2YXRvciBzZXQgKi8KKy8qIFRoaXMgd2FzIGhlcmUganVzdCB0byBzaG93IHRoYXQgdGhlIG51bWJlciBpcyB0YWtlbiAtCisgICBwcm9iYWJseSBhbGwgdGhlc2UgX0lPKDB4MTIsKikgaW9jdGxzIHNob3VsZCBiZSBtb3ZlZCB0byBibGtwZy5oLiAqLworI2VuZGlmCisvKiBBIGp1bXAgaGVyZTogMTA4LTExMSBoYXZlIGJlZW4gdXNlZCBmb3IgdmFyaW91cyBwcml2YXRlIHB1cnBvc2VzLiAqLworI2RlZmluZSBCTEtCU1pHRVQgIF9JT1IoMHgxMiwxMTIsc2l6ZV90KQorI2RlZmluZSBCTEtCU1pTRVQgIF9JT1coMHgxMiwxMTMsc2l6ZV90KQorI2RlZmluZSBCTEtHRVRTSVpFNjQgX0lPUigweDEyLDExNCxzaXplX3QpCS8qIHJldHVybiBkZXZpY2Ugc2l6ZSBpbiBieXRlcyAodTY0ICphcmcpICovCisKKyNkZWZpbmUgQk1BUF9JT0NUTCAxCQkvKiBvYnNvbGV0ZSAtIGtlcHQgZm9yIGNvbXBhdGliaWxpdHkgKi8KKyNkZWZpbmUgRklCTUFQCSAgIF9JTygweDAwLDEpCS8qIGJtYXAgYWNjZXNzICovCisjZGVmaW5lIEZJR0VUQlNaICAgX0lPKDB4MDAsMikJLyogZ2V0IHRoZSBibG9jayBzaXplIHVzZWQgZm9yIGJtYXAgKi8KKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZGV2X3QuaD4KKyNpbmNsdWRlIDxsaW51eC9kY2FjaGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+CisjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rb2JqZWN0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3JhZGl4LXRyZWUuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmlvX3RyZWUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKworc3RydWN0IGlvdmVjOworc3RydWN0IG5hbWVpZGF0YTsKK3N0cnVjdCBwaXBlX2lub2RlX2luZm87CitzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3Q7CitzdHJ1Y3Qga3N0YXRmczsKK3N0cnVjdCB2bV9hcmVhX3N0cnVjdDsKK3N0cnVjdCB2ZnNtb3VudDsKKworLyogVXNlZCB0byBiZSBhIG1hY3JvIHdoaWNoIGp1c3QgY2FsbGVkIHRoZSBmdW5jdGlvbiwgbm93IGp1c3QgYSBmdW5jdGlvbiAqLworZXh0ZXJuIHZvaWQgdXBkYXRlX2F0aW1lIChzdHJ1Y3QgaW5vZGUgKik7CisKK2V4dGVybiB2b2lkIF9faW5pdCBpbm9kZV9pbml0KHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuIHZvaWQgX19pbml0IGlub2RlX2luaXRfZWFybHkodm9pZCk7CitleHRlcm4gdm9pZCBfX2luaXQgbW50X2luaXQodW5zaWduZWQgbG9uZyk7CitleHRlcm4gdm9pZCBfX2luaXQgZmlsZXNfaW5pdCh1bnNpZ25lZCBsb25nKTsKKworc3RydWN0IGJ1ZmZlcl9oZWFkOwordHlwZWRlZiBpbnQgKGdldF9ibG9ja190KShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBpYmxvY2ssCisJCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSk7Cit0eXBlZGVmIGludCAoZ2V0X2Jsb2Nrc190KShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBpYmxvY2ssCisJCQl1bnNpZ25lZCBsb25nIG1heF9ibG9ja3MsCisJCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSk7Cit0eXBlZGVmIHZvaWQgKGRpb19pb2RvbmVfdCkoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwKKwkJCXNzaXplX3QgYnl0ZXMsIHZvaWQgKnByaXZhdGUpOworCisvKgorICogQXR0cmlidXRlIGZsYWdzLiAgVGhlc2Ugc2hvdWxkIGJlIG9yLWVkIHRvZ2V0aGVyIHRvIGZpZ3VyZSBvdXQgd2hhdAorICogaGFzIGJlZW4gY2hhbmdlZCEKKyAqLworI2RlZmluZSBBVFRSX01PREUJMQorI2RlZmluZSBBVFRSX1VJRAkyCisjZGVmaW5lIEFUVFJfR0lECTQKKyNkZWZpbmUgQVRUUl9TSVpFCTgKKyNkZWZpbmUgQVRUUl9BVElNRQkxNgorI2RlZmluZSBBVFRSX01USU1FCTMyCisjZGVmaW5lIEFUVFJfQ1RJTUUJNjQKKyNkZWZpbmUgQVRUUl9BVElNRV9TRVQJMTI4CisjZGVmaW5lIEFUVFJfTVRJTUVfU0VUCTI1NgorI2RlZmluZSBBVFRSX0ZPUkNFCTUxMgkvKiBOb3QgYSBjaGFuZ2UsIGJ1dCBhIGNoYW5nZSBpdCAqLworI2RlZmluZSBBVFRSX0FUVFJfRkxBRwkxMDI0CisjZGVmaW5lIEFUVFJfS0lMTF9TVUlECTIwNDgKKyNkZWZpbmUgQVRUUl9LSUxMX1NHSUQJNDA5NgorCisvKgorICogVGhpcyBpcyB0aGUgSW5vZGUgQXR0cmlidXRlcyBzdHJ1Y3R1cmUsIHVzZWQgZm9yIG5vdGlmeV9jaGFuZ2UoKS4gIEl0CisgKiB1c2VzIHRoZSBhYm92ZSBkZWZpbml0aW9ucyBhcyBmbGFncywgdG8ga25vdyB3aGljaCB2YWx1ZXMgaGF2ZSBjaGFuZ2VkLgorICogQWxzbywgaW4gdGhpcyBtYW5uZXIsIGEgRmlsZXN5c3RlbSBjYW4gbG9vayBhdCBvbmx5IHRoZSB2YWx1ZXMgaXQgY2FyZXMKKyAqIGFib3V0LiAgQmFzaWNhbGx5LCB0aGVzZSBhcmUgdGhlIGF0dHJpYnV0ZXMgdGhhdCB0aGUgVkZTIGxheWVyIGNhbgorICogcmVxdWVzdCB0byBjaGFuZ2UgZnJvbSB0aGUgRlMgbGF5ZXIuCisgKgorICogRGVyZWsgQXRraW5zIDx3YXJsb3JkQE1JVC5FRFU+IDk0LTEwLTIwCisgKi8KK3N0cnVjdCBpYXR0ciB7CisJdW5zaWduZWQgaW50CWlhX3ZhbGlkOworCXVtb2RlX3QJCWlhX21vZGU7CisJdWlkX3QJCWlhX3VpZDsKKwlnaWRfdAkJaWFfZ2lkOworCWxvZmZfdAkJaWFfc2l6ZTsKKwlzdHJ1Y3QgdGltZXNwZWMJaWFfYXRpbWU7CisJc3RydWN0IHRpbWVzcGVjCWlhX210aW1lOworCXN0cnVjdCB0aW1lc3BlYwlpYV9jdGltZTsKKwl1bnNpZ25lZCBpbnQJaWFfYXR0cl9mbGFnczsKK307CisKKy8qCisgKiBUaGlzIGlzIHRoZSBpbm9kZSBhdHRyaWJ1dGVzIGZsYWcgZGVmaW5pdGlvbnMKKyAqLworI2RlZmluZSBBVFRSX0ZMQUdfU1lOQ1JPTk9VUwkxIAkvKiBTeW5jcm9ub3VzIHdyaXRlICovCisjZGVmaW5lIEFUVFJfRkxBR19OT0FUSU1FCTIgCS8qIERvbid0IHVwZGF0ZSBhdGltZSAqLworI2RlZmluZSBBVFRSX0ZMQUdfQVBQRU5ECTQgCS8qIEFwcGVuZC1vbmx5IGZpbGUgKi8KKyNkZWZpbmUgQVRUUl9GTEFHX0lNTVVUQUJMRQk4IAkvKiBJbW11dGFibGUgZmlsZSAqLworI2RlZmluZSBBVFRSX0ZMQUdfTk9ESVJBVElNRQkxNiAJLyogRG9uJ3QgdXBkYXRlIGF0aW1lIGZvciBkaXJlY3RvcnkgKi8KKworLyoKKyAqIEluY2x1ZGVzIGZvciBkaXNrcXVvdGFzLgorICovCisjaW5jbHVkZSA8bGludXgvcXVvdGEuaD4KKworLyoKKyAqIG9oIHRoZSBiZWF1dGllcyBvZiBDIHR5cGUgZGVjbGFyYXRpb25zLgorICovCitzdHJ1Y3QgcGFnZTsKK3N0cnVjdCBhZGRyZXNzX3NwYWNlOworc3RydWN0IHdyaXRlYmFja19jb250cm9sOworc3RydWN0IGtpb2NiOworCitzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHsKKwlpbnQgKCp3cml0ZXBhZ2UpKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyk7CisJaW50ICgqcmVhZHBhZ2UpKHN0cnVjdCBmaWxlICosIHN0cnVjdCBwYWdlICopOworCWludCAoKnN5bmNfcGFnZSkoc3RydWN0IHBhZ2UgKik7CisKKwkvKiBXcml0ZSBiYWNrIHNvbWUgZGlydHkgcGFnZXMgZnJvbSB0aGlzIG1hcHBpbmcuICovCisJaW50ICgqd3JpdGVwYWdlcykoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKiwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICopOworCisJLyogU2V0IGEgcGFnZSBkaXJ0eSAqLworCWludCAoKnNldF9wYWdlX2RpcnR5KShzdHJ1Y3QgcGFnZSAqcGFnZSk7CisKKwlpbnQgKCpyZWFkcGFnZXMpKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKKwkJCXN0cnVjdCBsaXN0X2hlYWQgKnBhZ2VzLCB1bnNpZ25lZCBucl9wYWdlcyk7CisKKwkvKgorCSAqIGV4dDMgcmVxdWlyZXMgdGhhdCBhIHN1Y2Nlc3NmdWwgcHJlcGFyZV93cml0ZSgpIGNhbGwgYmUgZm9sbG93ZWQKKwkgKiBieSBhIGNvbW1pdF93cml0ZSgpIGNhbGwgLSB0aGV5IG11c3QgYmUgYmFsYW5jZWQKKwkgKi8KKwlpbnQgKCpwcmVwYXJlX3dyaXRlKShzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgcGFnZSAqLCB1bnNpZ25lZCwgdW5zaWduZWQpOworCWludCAoKmNvbW1pdF93cml0ZSkoc3RydWN0IGZpbGUgKiwgc3RydWN0IHBhZ2UgKiwgdW5zaWduZWQsIHVuc2lnbmVkKTsKKwkvKiBVbmZvcnR1bmF0ZWx5IHRoaXMga2x1ZGdlIGlzIG5lZWRlZCBmb3IgRklCTUFQLiBEb24ndCB1c2UgaXQgKi8KKwlzZWN0b3JfdCAoKmJtYXApKHN0cnVjdCBhZGRyZXNzX3NwYWNlICosIHNlY3Rvcl90KTsKKwlpbnQgKCppbnZhbGlkYXRlcGFnZSkgKHN0cnVjdCBwYWdlICosIHVuc2lnbmVkIGxvbmcpOworCWludCAoKnJlbGVhc2VwYWdlKSAoc3RydWN0IHBhZ2UgKiwgaW50KTsKKwlzc2l6ZV90ICgqZGlyZWN0X0lPKShpbnQsIHN0cnVjdCBraW9jYiAqLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwkJCWxvZmZfdCBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgbnJfc2Vncyk7Cit9OworCitzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbzsKK3N0cnVjdCBhZGRyZXNzX3NwYWNlIHsKKwlzdHJ1Y3QgaW5vZGUJCSpob3N0OwkJLyogb3duZXI6IGlub2RlLCBibG9ja19kZXZpY2UgKi8KKwlzdHJ1Y3QgcmFkaXhfdHJlZV9yb290CXBhZ2VfdHJlZTsJLyogcmFkaXggdHJlZSBvZiBhbGwgcGFnZXMgKi8KKwlyd2xvY2tfdAkJdHJlZV9sb2NrOwkvKiBhbmQgcndsb2NrIHByb3RlY3RpbmcgaXQgKi8KKwl1bnNpZ25lZCBpbnQJCWlfbW1hcF93cml0YWJsZTsvKiBjb3VudCBWTV9TSEFSRUQgbWFwcGluZ3MgKi8KKwlzdHJ1Y3QgcHJpb190cmVlX3Jvb3QJaV9tbWFwOwkJLyogdHJlZSBvZiBwcml2YXRlIGFuZCBzaGFyZWQgbWFwcGluZ3MgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCWlfbW1hcF9ub25saW5lYXI7LypsaXN0IFZNX05PTkxJTkVBUiBtYXBwaW5ncyAqLworCXNwaW5sb2NrX3QJCWlfbW1hcF9sb2NrOwkvKiBwcm90ZWN0IHRyZWUsIGNvdW50LCBsaXN0ICovCisJdW5zaWduZWQgaW50CQl0cnVuY2F0ZV9jb3VudDsJLyogQ292ZXIgcmFjZSBjb25kaXRpb24gd2l0aCB0cnVuY2F0ZSAqLworCXVuc2lnbmVkIGxvbmcJCW5ycGFnZXM7CS8qIG51bWJlciBvZiB0b3RhbCBwYWdlcyAqLworCXBnb2ZmX3QJCQl3cml0ZWJhY2tfaW5kZXg7Lyogd3JpdGViYWNrIHN0YXJ0cyBoZXJlICovCisJc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyAqYV9vcHM7CS8qIG1ldGhvZHMgKi8KKwl1bnNpZ25lZCBsb25nCQlmbGFnczsJCS8qIGVycm9yIGJpdHMvZ2ZwIG1hc2sgKi8KKwlzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmFja2luZ19kZXZfaW5mbzsgLyogZGV2aWNlIHJlYWRhaGVhZCwgZXRjICovCisJc3BpbmxvY2tfdAkJcHJpdmF0ZV9sb2NrOwkvKiBmb3IgdXNlIGJ5IHRoZSBhZGRyZXNzX3NwYWNlICovCisJc3RydWN0IGxpc3RfaGVhZAlwcml2YXRlX2xpc3Q7CS8qIGRpdHRvICovCisJc3RydWN0IGFkZHJlc3Nfc3BhY2UJKmFzc29jX21hcHBpbmc7CS8qIGRpdHRvICovCit9IF9fYXR0cmlidXRlX18oKGFsaWduZWQoc2l6ZW9mKGxvbmcpKSkpOworCS8qCisJICogT24gbW9zdCBhcmNoaXRlY3R1cmVzIHRoYXQgYWxpZ25tZW50IGlzIGFscmVhZHkgdGhlIGNhc2U7IGJ1dAorCSAqIG11c3QgYmUgZW5mb3JjZWQgaGVyZSBmb3IgQ1JJUywgdG8gbGV0IHRoZSBsZWFzdCBzaWduZmljYW50IGJpdAorCSAqIG9mIHN0cnVjdCBwYWdlJ3MgIm1hcHBpbmciIHBvaW50ZXIgYmUgdXNlZCBmb3IgUEFHRV9NQVBQSU5HX0FOT04uCisJICovCisKK3N0cnVjdCBibG9ja19kZXZpY2UgeworCWRldl90CQkJYmRfZGV2OyAgLyogbm90IGEga2Rldl90IC0gaXQncyBhIHNlYXJjaCBrZXkgKi8KKwlzdHJ1Y3QgaW5vZGUgKgkJYmRfaW5vZGU7CS8qIHdpbGwgZGllICovCisJaW50CQkJYmRfb3BlbmVyczsKKwlzdHJ1Y3Qgc2VtYXBob3JlCWJkX3NlbTsJLyogb3Blbi9jbG9zZSBtdXRleCAqLworCXN0cnVjdCBzZW1hcGhvcmUJYmRfbW91bnRfc2VtOwkvKiBtb3VudCBtdXRleCAqLworCXN0cnVjdCBsaXN0X2hlYWQJYmRfaW5vZGVzOworCXZvaWQgKgkJCWJkX2hvbGRlcjsKKwlpbnQJCQliZF9ob2xkZXJzOworCXN0cnVjdCBibG9ja19kZXZpY2UgKgliZF9jb250YWluczsKKwl1bnNpZ25lZAkJYmRfYmxvY2tfc2l6ZTsKKwlzdHJ1Y3QgaGRfc3RydWN0ICoJYmRfcGFydDsKKwkvKiBudW1iZXIgb2YgdGltZXMgcGFydGl0aW9ucyB3aXRoaW4gdGhpcyBkZXZpY2UgaGF2ZSBiZWVuIG9wZW5lZC4gKi8KKwl1bnNpZ25lZAkJYmRfcGFydF9jb3VudDsKKwlpbnQJCQliZF9pbnZhbGlkYXRlZDsKKwlzdHJ1Y3QgZ2VuZGlzayAqCWJkX2Rpc2s7CisJc3RydWN0IGxpc3RfaGVhZAliZF9saXN0OworCXN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZF9pbm9kZV9iYWNraW5nX2Rldl9pbmZvOworCS8qCisJICogUHJpdmF0ZSBkYXRhLiAgWW91IG11c3QgaGF2ZSBiZF9jbGFpbSdlZCB0aGUgYmxvY2tfZGV2aWNlCisJICogdG8gdXNlIHRoaXMuICBOT1RFOiAgYmRfY2xhaW0gYWxsb3dzIGFuIG93bmVyIHRvIGNsYWltCisJICogdGhlIHNhbWUgZGV2aWNlIG11bHRpcGxlIHRpbWVzLCB0aGUgb3duZXIgbXVzdCB0YWtlIHNwZWNpYWwKKwkgKiBjYXJlIHRvIG5vdCBtZXNzIHVwIGJkX3ByaXZhdGUgZm9yIHRoYXQgY2FzZS4KKwkgKi8KKwl1bnNpZ25lZCBsb25nCQliZF9wcml2YXRlOworfTsKKworLyoKKyAqIFJhZGl4LXRyZWUgdGFncywgZm9yIHRhZ2dpbmcgZGlydHkgYW5kIHdyaXRlYmFjayBwYWdlcyB3aXRoaW4gdGhlIHBhZ2VjYWNoZQorICogcmFkaXggdHJlZXMKKyAqLworI2RlZmluZSBQQUdFQ0FDSEVfVEFHX0RJUlRZCTAKKyNkZWZpbmUgUEFHRUNBQ0hFX1RBR19XUklURUJBQ0sJMQorCitpbnQgbWFwcGluZ190YWdnZWQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIGludCB0YWcpOworCisvKgorICogTWlnaHQgcGFnZXMgb2YgdGhpcyBmaWxlIGJlIG1hcHBlZCBpbnRvIHVzZXJzcGFjZT8KKyAqLworc3RhdGljIGlubGluZSBpbnQgbWFwcGluZ19tYXBwZWQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpCit7CisJcmV0dXJuCSFwcmlvX3RyZWVfZW1wdHkoJm1hcHBpbmctPmlfbW1hcCkgfHwKKwkJIWxpc3RfZW1wdHkoJm1hcHBpbmctPmlfbW1hcF9ub25saW5lYXIpOworfQorCisvKgorICogTWlnaHQgcGFnZXMgb2YgdGhpcyBmaWxlIGhhdmUgYmVlbiBtb2RpZmllZCBpbiB1c2Vyc3BhY2U/CisgKiBOb3RlIHRoYXQgaV9tbWFwX3dyaXRhYmxlIGNvdW50cyBhbGwgVk1fU0hBUkVEIHZtYXM6IGRvX21tYXBfcGdvZmYKKyAqIG1hcmtzIHZtYSBhcyBWTV9TSEFSRUQgaWYgaXQgaXMgc2hhcmVkLCBhbmQgdGhlIGZpbGUgd2FzIG9wZW5lZCBmb3IKKyAqIHdyaXRpbmcgaS5lLiB2bWEgbWF5IGJlIG1wcm90ZWN0ZWQgd3JpdGFibGUgZXZlbiBpZiBub3cgcmVhZG9ubHkuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IG1hcHBpbmdfd3JpdGFibHlfbWFwcGVkKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKQoreworCXJldHVybiBtYXBwaW5nLT5pX21tYXBfd3JpdGFibGUgIT0gMDsKK30KKworLyoKKyAqIFVzZSBzZXF1ZW5jZSBjb3VudGVyIHRvIGdldCBjb25zaXN0ZW50IGlfc2l6ZSBvbiAzMi1iaXQgcHJvY2Vzc29ycy4KKyAqLworI2lmIEJJVFNfUEVSX0xPTkc9PTMyICYmIGRlZmluZWQoQ09ORklHX1NNUCkKKyNpbmNsdWRlIDxsaW51eC9zZXFsb2NrLmg+CisjZGVmaW5lIF9fTkVFRF9JX1NJWkVfT1JERVJFRAorI2RlZmluZSBpX3NpemVfb3JkZXJlZF9pbml0KGlub2RlKSBzZXFjb3VudF9pbml0KCZpbm9kZS0+aV9zaXplX3NlcWNvdW50KQorI2Vsc2UKKyNkZWZpbmUgaV9zaXplX29yZGVyZWRfaW5pdChpbm9kZSkgZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKK3N0cnVjdCBpbm9kZSB7CisJc3RydWN0IGhsaXN0X25vZGUJaV9oYXNoOworCXN0cnVjdCBsaXN0X2hlYWQJaV9saXN0OworCXN0cnVjdCBsaXN0X2hlYWQJaV9zYl9saXN0OworCXN0cnVjdCBsaXN0X2hlYWQJaV9kZW50cnk7CisJdW5zaWduZWQgbG9uZwkJaV9pbm87CisJYXRvbWljX3QJCWlfY291bnQ7CisJdW1vZGVfdAkJCWlfbW9kZTsKKwl1bnNpZ25lZCBpbnQJCWlfbmxpbms7CisJdWlkX3QJCQlpX3VpZDsKKwlnaWRfdAkJCWlfZ2lkOworCWRldl90CQkJaV9yZGV2OworCWxvZmZfdAkJCWlfc2l6ZTsKKwlzdHJ1Y3QgdGltZXNwZWMJCWlfYXRpbWU7CisJc3RydWN0IHRpbWVzcGVjCQlpX210aW1lOworCXN0cnVjdCB0aW1lc3BlYwkJaV9jdGltZTsKKwl1bnNpZ25lZCBpbnQJCWlfYmxrYml0czsKKwl1bnNpZ25lZCBsb25nCQlpX2Jsa3NpemU7CisJdW5zaWduZWQgbG9uZwkJaV92ZXJzaW9uOworCXVuc2lnbmVkIGxvbmcJCWlfYmxvY2tzOworCXVuc2lnbmVkIHNob3J0ICAgICAgICAgIGlfYnl0ZXM7CisJc3BpbmxvY2tfdAkJaV9sb2NrOwkvKiBpX2Jsb2NrcywgaV9ieXRlcywgbWF5YmUgaV9zaXplICovCisJc3RydWN0IHNlbWFwaG9yZQlpX3NlbTsKKwlzdHJ1Y3Qgcndfc2VtYXBob3JlCWlfYWxsb2Nfc2VtOworCXN0cnVjdCBpbm9kZV9vcGVyYXRpb25zCSppX29wOworCXN0cnVjdCBmaWxlX29wZXJhdGlvbnMJKmlfZm9wOwkvKiBmb3JtZXIgLT5pX29wLT5kZWZhdWx0X2ZpbGVfb3BzICovCisJc3RydWN0IHN1cGVyX2Jsb2NrCSppX3NiOworCXN0cnVjdCBmaWxlX2xvY2sJKmlfZmxvY2s7CisJc3RydWN0IGFkZHJlc3Nfc3BhY2UJKmlfbWFwcGluZzsKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZQlpX2RhdGE7CisjaWZkZWYgQ09ORklHX1FVT1RBCisJc3RydWN0IGRxdW90CQkqaV9kcXVvdFtNQVhRVU9UQVNdOworI2VuZGlmCisJLyogVGhlc2UgdGhyZWUgc2hvdWxkIHByb2JhYmx5IGJlIGEgdW5pb24gKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCWlfZGV2aWNlczsKKwlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvCSppX3BpcGU7CisJc3RydWN0IGJsb2NrX2RldmljZQkqaV9iZGV2OworCXN0cnVjdCBjZGV2CQkqaV9jZGV2OworCWludAkJCWlfY2luZGV4OworCisJX191MzIJCQlpX2dlbmVyYXRpb247CisKKyNpZmRlZiBDT05GSUdfRE5PVElGWQorCXVuc2lnbmVkIGxvbmcJCWlfZG5vdGlmeV9tYXNrOyAvKiBEaXJlY3Rvcnkgbm90aWZ5IGV2ZW50cyAqLworCXN0cnVjdCBkbm90aWZ5X3N0cnVjdAkqaV9kbm90aWZ5OyAvKiBmb3IgZGlyZWN0b3J5IG5vdGlmaWNhdGlvbnMgKi8KKyNlbmRpZgorCisJdW5zaWduZWQgbG9uZwkJaV9zdGF0ZTsKKwl1bnNpZ25lZCBsb25nCQlkaXJ0aWVkX3doZW47CS8qIGppZmZpZXMgb2YgZmlyc3QgZGlydHlpbmcgKi8KKworCXVuc2lnbmVkIGludAkJaV9mbGFnczsKKworCWF0b21pY190CQlpX3dyaXRlY291bnQ7CisJdm9pZAkJCSppX3NlY3VyaXR5OworCXVuaW9uIHsKKwkJdm9pZAkJKmdlbmVyaWNfaXA7CisJfSB1OworI2lmZGVmIF9fTkVFRF9JX1NJWkVfT1JERVJFRAorCXNlcWNvdW50X3QJCWlfc2l6ZV9zZXFjb3VudDsKKyNlbmRpZgorfTsKKworLyoKKyAqIE5PVEU6IGluIGEgMzJiaXQgYXJjaCB3aXRoIGEgcHJlZW1wdGFibGUga2VybmVsIGFuZAorICogYW4gVVAgY29tcGlsZSB0aGUgaV9zaXplX3JlYWQvd3JpdGUgbXVzdCBiZSBhdG9taWMKKyAqIHdpdGggcmVzcGVjdCB0byB0aGUgbG9jYWwgY3B1ICh1bmxpa2Ugd2l0aCBwcmVlbXB0IGRpc2FibGVkKSwKKyAqIGJ1dCB0aGV5IGRvbid0IG5lZWQgdG8gYmUgYXRvbWljIHdpdGggcmVzcGVjdCB0byBvdGhlciBjcHVzIGxpa2UgaW4KKyAqIHRydWUgU01QIChzbyB0aGV5IG5lZWQgZWl0aGVyIHRvIGVpdGhlciBsb2NhbGx5IGRpc2FibGUgaXJxIGFyb3VuZAorICogdGhlIHJlYWQgb3IgZm9yIGV4YW1wbGUgb24geDg2IHRoZXkgY2FuIGJlIHN0aWxsIGltcGxlbWVudGVkIGFzIGEKKyAqIGNtcHhjaGc4YiB3aXRob3V0IHRoZSBuZWVkIG9mIHRoZSBsb2NrIHByZWZpeCkuIEZvciBTTVAgY29tcGlsZXMKKyAqIGFuZCA2NGJpdCBhcmNocyBpdCBtYWtlcyBubyBkaWZmZXJlbmNlIGlmIHByZWVtcHQgaXMgZW5hYmxlZCBvciBub3QuCisgKi8KK3N0YXRpYyBpbmxpbmUgbG9mZl90IGlfc2l6ZV9yZWFkKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisjaWYgQklUU19QRVJfTE9ORz09MzIgJiYgZGVmaW5lZChDT05GSUdfU01QKQorCWxvZmZfdCBpX3NpemU7CisJdW5zaWduZWQgaW50IHNlcTsKKworCWRvIHsKKwkJc2VxID0gcmVhZF9zZXFjb3VudF9iZWdpbigmaW5vZGUtPmlfc2l6ZV9zZXFjb3VudCk7CisJCWlfc2l6ZSA9IGlub2RlLT5pX3NpemU7CisJfSB3aGlsZSAocmVhZF9zZXFjb3VudF9yZXRyeSgmaW5vZGUtPmlfc2l6ZV9zZXFjb3VudCwgc2VxKSk7CisJcmV0dXJuIGlfc2l6ZTsKKyNlbGlmIEJJVFNfUEVSX0xPTkc9PTMyICYmIGRlZmluZWQoQ09ORklHX1BSRUVNUFQpCisJbG9mZl90IGlfc2l6ZTsKKworCXByZWVtcHRfZGlzYWJsZSgpOworCWlfc2l6ZSA9IGlub2RlLT5pX3NpemU7CisJcHJlZW1wdF9lbmFibGUoKTsKKwlyZXR1cm4gaV9zaXplOworI2Vsc2UKKwlyZXR1cm4gaW5vZGUtPmlfc2l6ZTsKKyNlbmRpZgorfQorCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpX3NpemVfd3JpdGUoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IGlfc2l6ZSkKK3sKKyNpZiBCSVRTX1BFUl9MT05HPT0zMiAmJiBkZWZpbmVkKENPTkZJR19TTVApCisJd3JpdGVfc2VxY291bnRfYmVnaW4oJmlub2RlLT5pX3NpemVfc2VxY291bnQpOworCWlub2RlLT5pX3NpemUgPSBpX3NpemU7CisJd3JpdGVfc2VxY291bnRfZW5kKCZpbm9kZS0+aV9zaXplX3NlcWNvdW50KTsKKyNlbGlmIEJJVFNfUEVSX0xPTkc9PTMyICYmIGRlZmluZWQoQ09ORklHX1BSRUVNUFQpCisJcHJlZW1wdF9kaXNhYmxlKCk7CisJaW5vZGUtPmlfc2l6ZSA9IGlfc2l6ZTsKKwlwcmVlbXB0X2VuYWJsZSgpOworI2Vsc2UKKwlpbm9kZS0+aV9zaXplID0gaV9zaXplOworI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW1pbm9yKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJcmV0dXJuIE1JTk9SKGlub2RlLT5pX3JkZXYpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGltYWpvcihzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXJldHVybiBNQUpPUihpbm9kZS0+aV9yZGV2KTsKK30KKworZXh0ZXJuIHN0cnVjdCBibG9ja19kZXZpY2UgKklfQkRFVihzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKKworc3RydWN0IGZvd25fc3RydWN0IHsKKwlyd2xvY2tfdCBsb2NrOyAgICAgICAgICAvKiBwcm90ZWN0cyBwaWQsIHVpZCwgZXVpZCBmaWVsZHMgKi8KKwlpbnQgcGlkOwkJLyogcGlkIG9yIC1wZ3JwIHdoZXJlIFNJR0lPIHNob3VsZCBiZSBzZW50ICovCisJdWlkX3QgdWlkLCBldWlkOwkvKiB1aWQvZXVpZCBvZiBwcm9jZXNzIHNldHRpbmcgdGhlIG93bmVyICovCisJdm9pZCAqc2VjdXJpdHk7CisJaW50IHNpZ251bTsJCS8qIHBvc2l4LjFiIHJ0IHNpZ25hbCB0byBiZSBkZWxpdmVyZWQgb24gSU8gKi8KK307CisKKy8qCisgKiBUcmFjayBhIHNpbmdsZSBmaWxlJ3MgcmVhZGFoZWFkIHN0YXRlCisgKi8KK3N0cnVjdCBmaWxlX3JhX3N0YXRlIHsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0OwkJLyogQ3VycmVudCB3aW5kb3cgKi8KKwl1bnNpZ25lZCBsb25nIHNpemU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsJCS8qIHJhIGZsYWdzIFJBX0ZMQUdfeHh4Ki8KKwl1bnNpZ25lZCBsb25nIGNhY2hlX2hpdDsJLyogY2FjaGUgaGl0IGNvdW50Ki8KKwl1bnNpZ25lZCBsb25nIHByZXZfcGFnZTsJLyogQ2FjaGUgbGFzdCByZWFkKCkgcG9zaXRpb24gKi8KKwl1bnNpZ25lZCBsb25nIGFoZWFkX3N0YXJ0OwkvKiBBaGVhZCB3aW5kb3cgKi8KKwl1bnNpZ25lZCBsb25nIGFoZWFkX3NpemU7CisJdW5zaWduZWQgbG9uZyByYV9wYWdlczsJCS8qIE1heGltdW0gcmVhZGFoZWFkIHdpbmRvdyAqLworCXVuc2lnbmVkIGxvbmcgbW1hcF9oaXQ7CQkvKiBDYWNoZSBoaXQgc3RhdCBmb3IgbW1hcCBhY2Nlc3NlcyAqLworCXVuc2lnbmVkIGxvbmcgbW1hcF9taXNzOwkvKiBDYWNoZSBtaXNzIHN0YXQgZm9yIG1tYXAgYWNjZXNzZXMgKi8KK307CisjZGVmaW5lIFJBX0ZMQUdfTUlTUyAweDAxCS8qIGEgY2FjaGUgbWlzcyBvY2N1cmVkIGFnYWluc3QgdGhpcyBmaWxlICovCisjZGVmaW5lIFJBX0ZMQUdfSU5DQUNIRSAweDAyCS8qIGZpbGUgaXMgYWxyZWFkeSBpbiBjYWNoZSAqLworCitzdHJ1Y3QgZmlsZSB7CisJc3RydWN0IGxpc3RfaGVhZAlmX2xpc3Q7CisJc3RydWN0IGRlbnRyeQkJKmZfZGVudHJ5OworCXN0cnVjdCB2ZnNtb3VudCAgICAgICAgICpmX3Zmc21udDsKKwlzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zCSpmX29wOworCWF0b21pY190CQlmX2NvdW50OworCXVuc2lnbmVkIGludCAJCWZfZmxhZ3M7CisJbW9kZV90CQkJZl9tb2RlOworCWludAkJCWZfZXJyb3I7CisJbG9mZl90CQkJZl9wb3M7CisJc3RydWN0IGZvd25fc3RydWN0CWZfb3duZXI7CisJdW5zaWduZWQgaW50CQlmX3VpZCwgZl9naWQ7CisJc3RydWN0IGZpbGVfcmFfc3RhdGUJZl9yYTsKKworCXNpemVfdAkJCWZfbWF4Y291bnQ7CisJdW5zaWduZWQgbG9uZwkJZl92ZXJzaW9uOworCXZvaWQJCQkqZl9zZWN1cml0eTsKKworCS8qIG5lZWRlZCBmb3IgdHR5IGRyaXZlciwgYW5kIG1heWJlIG90aGVycyAqLworCXZvaWQJCQkqcHJpdmF0ZV9kYXRhOworCisjaWZkZWYgQ09ORklHX0VQT0xMCisJLyogVXNlZCBieSBmcy9ldmVudHBvbGwuYyB0byBsaW5rIGFsbCB0aGUgaG9va3MgdG8gdGhpcyBmaWxlICovCisJc3RydWN0IGxpc3RfaGVhZAlmX2VwX2xpbmtzOworCXNwaW5sb2NrX3QJCWZfZXBfbG9jazsKKyNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX0VQT0xMICovCisJc3RydWN0IGFkZHJlc3Nfc3BhY2UJKmZfbWFwcGluZzsKK307CitleHRlcm4gc3BpbmxvY2tfdCBmaWxlc19sb2NrOworI2RlZmluZSBmaWxlX2xpc3RfbG9jaygpIHNwaW5fbG9jaygmZmlsZXNfbG9jayk7CisjZGVmaW5lIGZpbGVfbGlzdF91bmxvY2soKSBzcGluX3VubG9jaygmZmlsZXNfbG9jayk7CisKKyNkZWZpbmUgZ2V0X2ZpbGUoeCkJYXRvbWljX2luYygmKHgpLT5mX2NvdW50KQorI2RlZmluZSBmaWxlX2NvdW50KHgpCWF0b21pY19yZWFkKCYoeCktPmZfY291bnQpCisKKyNkZWZpbmUJTUFYX05PTl9MRlMJKCgxVUw8PDMxKSAtIDEpCisKKy8qIFBhZ2UgY2FjaGUgbGltaXQuIFRoZSBmaWxlc3lzdGVtcyBzaG91bGQgcHV0IHRoYXQgaW50byB0aGVpciBzX21heGJ5dGVzIAorICAgbGltaXRzLCBvdGhlcndpc2UgYmFkIHRoaW5ncyBjYW4gaGFwcGVuIGluIFZNLiAqLyAKKyNpZiBCSVRTX1BFUl9MT05HPT0zMgorI2RlZmluZSBNQVhfTEZTX0ZJTEVTSVpFCSgoKHU2NClQQUdFX0NBQ0hFX1NJWkUgPDwgKEJJVFNfUEVSX0xPTkctMSkpLTEpIAorI2VsaWYgQklUU19QRVJfTE9ORz09NjQKKyNkZWZpbmUgTUFYX0xGU19GSUxFU0laRSAJMHg3ZmZmZmZmZmZmZmZmZmZmVUwKKyNlbmRpZgorCisjZGVmaW5lIEZMX1BPU0lYCTEKKyNkZWZpbmUgRkxfRkxPQ0sJMgorI2RlZmluZSBGTF9BQ0NFU1MJOAkvKiBub3QgdHJ5aW5nIHRvIGxvY2ssIGp1c3QgbG9va2luZyAqLworI2RlZmluZSBGTF9MT0NLRAkxNgkvKiBsb2NrIGhlbGQgYnkgcnBjLmxvY2tkICovCisjZGVmaW5lIEZMX0xFQVNFCTMyCS8qIGxlYXNlIGhlbGQgb24gdGhpcyBmaWxlICovCisjZGVmaW5lIEZMX1NMRUVQCTEyOAkvKiBBIGJsb2NraW5nIGxvY2sgKi8KKworLyoKKyAqIFRoZSBQT1NJWCBmaWxlIGxvY2sgb3duZXIgaXMgZGV0ZXJtaW5lZCBieQorICogdGhlICJzdHJ1Y3QgZmlsZXNfc3RydWN0IiBpbiB0aGUgdGhyZWFkIGdyb3VwCisgKiAob3IgTlVMTCBmb3Igbm8gb3duZXIgLSBCU0QgbG9ja3MpLgorICoKKyAqIExvY2tkIHN0dWZmcyBhICJob3N0IiBwb2ludGVyIGludG8gdGhpcy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgZmlsZXNfc3RydWN0ICpmbF9vd25lcl90OworCitzdHJ1Y3QgZmlsZV9sb2NrX29wZXJhdGlvbnMgeworCXZvaWQgKCpmbF9pbnNlcnQpKHN0cnVjdCBmaWxlX2xvY2sgKik7CS8qIGxvY2sgaW5zZXJ0aW9uIGNhbGxiYWNrICovCisJdm9pZCAoKmZsX3JlbW92ZSkoc3RydWN0IGZpbGVfbG9jayAqKTsJLyogbG9jayByZW1vdmFsIGNhbGxiYWNrICovCisJdm9pZCAoKmZsX2NvcHlfbG9jaykoc3RydWN0IGZpbGVfbG9jayAqLCBzdHJ1Y3QgZmlsZV9sb2NrICopOworCXZvaWQgKCpmbF9yZWxlYXNlX3ByaXZhdGUpKHN0cnVjdCBmaWxlX2xvY2sgKik7Cit9OworCitzdHJ1Y3QgbG9ja19tYW5hZ2VyX29wZXJhdGlvbnMgeworCWludCAoKmZsX2NvbXBhcmVfb3duZXIpKHN0cnVjdCBmaWxlX2xvY2sgKiwgc3RydWN0IGZpbGVfbG9jayAqKTsKKwl2b2lkICgqZmxfbm90aWZ5KShzdHJ1Y3QgZmlsZV9sb2NrICopOwkvKiB1bmJsb2NrIGNhbGxiYWNrICovCisJdm9pZCAoKmZsX2NvcHlfbG9jaykoc3RydWN0IGZpbGVfbG9jayAqLCBzdHJ1Y3QgZmlsZV9sb2NrICopOworCXZvaWQgKCpmbF9yZWxlYXNlX3ByaXZhdGUpKHN0cnVjdCBmaWxlX2xvY2sgKik7CisJdm9pZCAoKmZsX2JyZWFrKShzdHJ1Y3QgZmlsZV9sb2NrICopOworCWludCAoKmZsX215bGVhc2UpKHN0cnVjdCBmaWxlX2xvY2sgKiwgc3RydWN0IGZpbGVfbG9jayAqKTsKKwlpbnQgKCpmbF9jaGFuZ2UpKHN0cnVjdCBmaWxlX2xvY2sgKiosIGludCk7Cit9OworCisvKiB0aGF0IHdpbGwgZGllIC0gd2UgbmVlZCBpdCBmb3IgbmZzX2xvY2tfaW5mbyAqLworI2luY2x1ZGUgPGxpbnV4L25mc19mc19pLmg+CisKK3N0cnVjdCBmaWxlX2xvY2sgeworCXN0cnVjdCBmaWxlX2xvY2sgKmZsX25leHQ7CS8qIHNpbmdseSBsaW5rZWQgbGlzdCBmb3IgdGhpcyBpbm9kZSAgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGZsX2xpbms7CS8qIGRvdWJseSBsaW5rZWQgbGlzdCBvZiBhbGwgbG9ja3MgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGZsX2Jsb2NrOwkvKiBjaXJjdWxhciBsaXN0IG9mIGJsb2NrZWQgcHJvY2Vzc2VzICovCisJZmxfb3duZXJfdCBmbF9vd25lcjsKKwl1bnNpZ25lZCBpbnQgZmxfcGlkOworCXdhaXRfcXVldWVfaGVhZF90IGZsX3dhaXQ7CisJc3RydWN0IGZpbGUgKmZsX2ZpbGU7CisJdW5zaWduZWQgY2hhciBmbF9mbGFnczsKKwl1bnNpZ25lZCBjaGFyIGZsX3R5cGU7CisJbG9mZl90IGZsX3N0YXJ0OworCWxvZmZfdCBmbF9lbmQ7CisKKwlzdHJ1Y3QgZmFzeW5jX3N0cnVjdCAqCWZsX2Zhc3luYzsgLyogZm9yIGxlYXNlIGJyZWFrIG5vdGlmaWNhdGlvbnMgKi8KKwl1bnNpZ25lZCBsb25nIGZsX2JyZWFrX3RpbWU7CS8qIGZvciBub25ibG9ja2luZyBsZWFzZSBicmVha3MgKi8KKworCXN0cnVjdCBmaWxlX2xvY2tfb3BlcmF0aW9ucyAqZmxfb3BzOwkvKiBDYWxsYmFja3MgZm9yIGZpbGVzeXN0ZW1zICovCisJc3RydWN0IGxvY2tfbWFuYWdlcl9vcGVyYXRpb25zICpmbF9sbW9wczsJLyogQ2FsbGJhY2tzIGZvciBsb2NrbWFuYWdlcnMgKi8KKwl1bmlvbiB7CisJCXN0cnVjdCBuZnNfbG9ja19pbmZvCW5mc19mbDsKKwl9IGZsX3U7Cit9OworCisvKiBUaGUgZm9sbG93aW5nIGNvbnN0YW50IHJlZmxlY3RzIHRoZSB1cHBlciBib3VuZCBvZiB0aGUgZmlsZS9sb2NraW5nIHNwYWNlICovCisjaWZuZGVmIE9GRlNFVF9NQVgKKyNkZWZpbmUgSU5UX0xJTUlUKHgpCSh+KCh4KTEgPDwgKHNpemVvZih4KSo4IC0gMSkpKQorI2RlZmluZSBPRkZTRVRfTUFYCUlOVF9MSU1JVChsb2ZmX3QpCisjZGVmaW5lIE9GRlRfT0ZGU0VUX01BWAlJTlRfTElNSVQob2ZmX3QpCisjZW5kaWYKKworZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgZmlsZV9sb2NrX2xpc3Q7CisKKyNpbmNsdWRlIDxsaW51eC9mY250bC5oPgorCitleHRlcm4gaW50IGZjbnRsX2dldGxrKHN0cnVjdCBmaWxlICosIHN0cnVjdCBmbG9jayBfX3VzZXIgKik7CitleHRlcm4gaW50IGZjbnRsX3NldGxrKHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwgc3RydWN0IGZsb2NrIF9fdXNlciAqKTsKKworI2lmIEJJVFNfUEVSX0xPTkcgPT0gMzIKK2V4dGVybiBpbnQgZmNudGxfZ2V0bGs2NChzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgZmxvY2s2NCBfX3VzZXIgKik7CitleHRlcm4gaW50IGZjbnRsX3NldGxrNjQoc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgaW50LCBzdHJ1Y3QgZmxvY2s2NCBfX3VzZXIgKik7CisjZW5kaWYKKworZXh0ZXJuIHZvaWQgc2VuZF9zaWdpbyhzdHJ1Y3QgZm93bl9zdHJ1Y3QgKmZvd24sIGludCBmZCwgaW50IGJhbmQpOworZXh0ZXJuIGludCBmY250bF9zZXRsZWFzZSh1bnNpZ25lZCBpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxwLCBsb25nIGFyZyk7CitleHRlcm4gaW50IGZjbnRsX2dldGxlYXNlKHN0cnVjdCBmaWxlICpmaWxwKTsKKworLyogZnMvbG9ja3MuYyAqLworZXh0ZXJuIHZvaWQgbG9ja3NfaW5pdF9sb2NrKHN0cnVjdCBmaWxlX2xvY2sgKik7CitleHRlcm4gdm9pZCBsb2Nrc19jb3B5X2xvY2soc3RydWN0IGZpbGVfbG9jayAqLCBzdHJ1Y3QgZmlsZV9sb2NrICopOworZXh0ZXJuIHZvaWQgbG9ja3NfcmVtb3ZlX3Bvc2l4KHN0cnVjdCBmaWxlICosIGZsX293bmVyX3QpOworZXh0ZXJuIHZvaWQgbG9ja3NfcmVtb3ZlX2Zsb2NrKHN0cnVjdCBmaWxlICopOworZXh0ZXJuIHN0cnVjdCBmaWxlX2xvY2sgKnBvc2l4X3Rlc3RfbG9jayhzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgZmlsZV9sb2NrICopOworZXh0ZXJuIGludCBwb3NpeF9sb2NrX2ZpbGUoc3RydWN0IGZpbGUgKiwgc3RydWN0IGZpbGVfbG9jayAqKTsKK2V4dGVybiBpbnQgcG9zaXhfbG9ja19maWxlX3dhaXQoc3RydWN0IGZpbGUgKiwgc3RydWN0IGZpbGVfbG9jayAqKTsKK2V4dGVybiB2b2lkIHBvc2l4X2Jsb2NrX2xvY2soc3RydWN0IGZpbGVfbG9jayAqLCBzdHJ1Y3QgZmlsZV9sb2NrICopOworZXh0ZXJuIHZvaWQgcG9zaXhfdW5ibG9ja19sb2NrKHN0cnVjdCBmaWxlICosIHN0cnVjdCBmaWxlX2xvY2sgKik7CitleHRlcm4gaW50IHBvc2l4X2xvY2tzX2RlYWRsb2NrKHN0cnVjdCBmaWxlX2xvY2sgKiwgc3RydWN0IGZpbGVfbG9jayAqKTsKK2V4dGVybiBpbnQgZmxvY2tfbG9ja19maWxlX3dhaXQoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBmaWxlX2xvY2sgKmZsKTsKK2V4dGVybiBpbnQgX19icmVha19sZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOworZXh0ZXJuIHZvaWQgbGVhc2VfZ2V0X210aW1lKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgdGltZXNwZWMgKnRpbWUpOworZXh0ZXJuIGludCBzZXRsZWFzZShzdHJ1Y3QgZmlsZSAqLCBsb25nLCBzdHJ1Y3QgZmlsZV9sb2NrICoqKTsKK2V4dGVybiBpbnQgbGVhc2VfbW9kaWZ5KHN0cnVjdCBmaWxlX2xvY2sgKiosIGludCk7CitleHRlcm4gaW50IGxvY2tfbWF5X3JlYWQoc3RydWN0IGlub2RlICosIGxvZmZfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBjb3VudCk7CitleHRlcm4gaW50IGxvY2tfbWF5X3dyaXRlKHN0cnVjdCBpbm9kZSAqLCBsb2ZmX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgY291bnQpOworZXh0ZXJuIHZvaWQgc3RlYWxfbG9ja3MoZmxfb3duZXJfdCBmcm9tKTsKKworc3RydWN0IGZhc3luY19zdHJ1Y3QgeworCWludAltYWdpYzsKKwlpbnQJZmFfZmQ7CisJc3RydWN0CWZhc3luY19zdHJ1Y3QJKmZhX25leHQ7IC8qIHNpbmdseSBsaW5rZWQgbGlzdCAqLworCXN0cnVjdAlmaWxlIAkJKmZhX2ZpbGU7Cit9OworCisjZGVmaW5lIEZBU1lOQ19NQUdJQyAweDQ2MDEKKworLyogU01QIHNhZmUgZmFzeW5jIGhlbHBlcnM6ICovCitleHRlcm4gaW50IGZhc3luY19oZWxwZXIoaW50LCBzdHJ1Y3QgZmlsZSAqLCBpbnQsIHN0cnVjdCBmYXN5bmNfc3RydWN0ICoqKTsKKy8qIGNhbiBiZSBjYWxsZWQgZnJvbSBpbnRlcnJ1cHRzICovCitleHRlcm4gdm9pZCBraWxsX2Zhc3luYyhzdHJ1Y3QgZmFzeW5jX3N0cnVjdCAqKiwgaW50LCBpbnQpOworLyogb25seSBmb3IgbmV0OiBubyBpbnRlcm5hbCBzeW5jaHJvbml6YXRpb24gKi8KK2V4dGVybiB2b2lkIF9fa2lsbF9mYXN5bmMoc3RydWN0IGZhc3luY19zdHJ1Y3QgKiwgaW50LCBpbnQpOworCitleHRlcm4gaW50IGZfc2V0b3duKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFyZywgaW50IGZvcmNlKTsKK2V4dGVybiB2b2lkIGZfZGVsb3duKHN0cnVjdCBmaWxlICpmaWxwKTsKK2V4dGVybiBpbnQgc2VuZF9zaWd1cmcoc3RydWN0IGZvd25fc3RydWN0ICpmb3duKTsKKworLyoKKyAqCVVtb3VudCBvcHRpb25zCisgKi8KKworI2RlZmluZSBNTlRfRk9SQ0UJMHgwMDAwMDAwMQkvKiBBdHRlbXB0IHRvIGZvcmNpYmlseSB1bW91bnQgKi8KKyNkZWZpbmUgTU5UX0RFVEFDSAkweDAwMDAwMDAyCS8qIEp1c3QgZGV0YWNoIGZyb20gdGhlIHRyZWUgKi8KKyNkZWZpbmUgTU5UX0VYUElSRQkweDAwMDAwMDA0CS8qIE1hcmsgZm9yIGV4cGlyeSAqLworCitleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBzdXBlcl9ibG9ja3M7CitleHRlcm4gc3BpbmxvY2tfdCBzYl9sb2NrOworCisjZGVmaW5lIHNiX2VudHJ5KGxpc3QpCWxpc3RfZW50cnkoKGxpc3QpLCBzdHJ1Y3Qgc3VwZXJfYmxvY2ssIHNfbGlzdCkKKyNkZWZpbmUgU19CSUFTICgxPDwzMCkKK3N0cnVjdCBzdXBlcl9ibG9jayB7CisJc3RydWN0IGxpc3RfaGVhZAlzX2xpc3Q7CQkvKiBLZWVwIHRoaXMgZmlyc3QgKi8KKwlkZXZfdAkJCXNfZGV2OwkJLyogc2VhcmNoIGluZGV4OyBfbm90XyBrZGV2X3QgKi8KKwl1bnNpZ25lZCBsb25nCQlzX2Jsb2Nrc2l6ZTsKKwl1bnNpZ25lZCBsb25nCQlzX29sZF9ibG9ja3NpemU7CisJdW5zaWduZWQgY2hhcgkJc19ibG9ja3NpemVfYml0czsKKwl1bnNpZ25lZCBjaGFyCQlzX2RpcnQ7CisJdW5zaWduZWQgbG9uZyBsb25nCXNfbWF4Ynl0ZXM7CS8qIE1heCBmaWxlIHNpemUgKi8KKwlzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZQkqc190eXBlOworCXN0cnVjdCBzdXBlcl9vcGVyYXRpb25zCSpzX29wOworCXN0cnVjdCBkcXVvdF9vcGVyYXRpb25zCSpkcV9vcDsKKyAJc3RydWN0IHF1b3RhY3RsX29wcwkqc19xY29wOworCXN0cnVjdCBleHBvcnRfb3BlcmF0aW9ucyAqc19leHBvcnRfb3A7CisJdW5zaWduZWQgbG9uZwkJc19mbGFnczsKKwl1bnNpZ25lZCBsb25nCQlzX21hZ2ljOworCXN0cnVjdCBkZW50cnkJCSpzX3Jvb3Q7CisJc3RydWN0IHJ3X3NlbWFwaG9yZQlzX3Vtb3VudDsKKwlzdHJ1Y3Qgc2VtYXBob3JlCXNfbG9jazsKKwlpbnQJCQlzX2NvdW50OworCWludAkJCXNfc3luY2luZzsKKwlpbnQJCQlzX25lZWRfc3luY19mczsKKwlhdG9taWNfdAkJc19hY3RpdmU7CisJdm9pZCAgICAgICAgICAgICAgICAgICAgKnNfc2VjdXJpdHk7CisJc3RydWN0IHhhdHRyX2hhbmRsZXIJKipzX3hhdHRyOworCisJc3RydWN0IGxpc3RfaGVhZAlzX2lub2RlczsJLyogYWxsIGlub2RlcyAqLworCXN0cnVjdCBsaXN0X2hlYWQJc19kaXJ0eTsJLyogZGlydHkgaW5vZGVzICovCisJc3RydWN0IGxpc3RfaGVhZAlzX2lvOwkJLyogcGFya2VkIGZvciB3cml0ZWJhY2sgKi8KKwlzdHJ1Y3QgaGxpc3RfaGVhZAlzX2Fub247CQkvKiBhbm9ueW1vdXMgZGVudHJpZXMgZm9yIChuZnMpIGV4cG9ydGluZyAqLworCXN0cnVjdCBsaXN0X2hlYWQJc19maWxlczsKKworCXN0cnVjdCBibG9ja19kZXZpY2UJKnNfYmRldjsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXNfaW5zdGFuY2VzOworCXN0cnVjdCBxdW90YV9pbmZvCXNfZHF1b3Q7CS8qIERpc2txdW90YSBzcGVjaWZpYyBvcHRpb25zICovCisKKwlpbnQJCQlzX2Zyb3plbjsKKwl3YWl0X3F1ZXVlX2hlYWRfdAlzX3dhaXRfdW5mcm96ZW47CisKKwljaGFyIHNfaWRbMzJdOwkJCQkvKiBJbmZvcm1hdGlvbmFsIG5hbWUgKi8KKworCXZvaWQgCQkJKnNfZnNfaW5mbzsJLyogRmlsZXN5c3RlbSBwcml2YXRlIGluZm8gKi8KKworCS8qCisJICogVGhlIG5leHQgZmllbGQgaXMgZm9yIFZGUyAqb25seSouIE5vIGZpbGVzeXN0ZW1zIGhhdmUgYW55IGJ1c2luZXNzCisJICogZXZlbiBsb29raW5nIGF0IGl0LiBZb3UgaGFkIGJlZW4gd2FybmVkLgorCSAqLworCXN0cnVjdCBzZW1hcGhvcmUgc192ZnNfcmVuYW1lX3NlbTsJLyogS2x1ZGdlICovCisKKwkvKiBHcmFudWFsaXR5IG9mIGMvbS9hdGltZSBpbiBucy4KKwkgICBDYW5ub3QgYmUgd29yc2UgdGhhbiBhIHNlY29uZCAqLworCXUzMgkJICAgc190aW1lX2dyYW47Cit9OworCitleHRlcm4gc3RydWN0IHRpbWVzcGVjIGN1cnJlbnRfZnNfdGltZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKKworLyoKKyAqIFNuYXBzaG90dGluZyBzdXBwb3J0LgorICovCitlbnVtIHsKKwlTQl9VTkZST1pFTiA9IDAsCisJU0JfRlJFRVpFX1dSSVRFCT0gMSwKKwlTQl9GUkVFWkVfVFJBTlMgPSAyLAorfTsKKworI2RlZmluZSB2ZnNfY2hlY2tfZnJvemVuKHNiLCBsZXZlbCkgXAorCXdhaXRfZXZlbnQoKHNiKS0+c193YWl0X3VuZnJvemVuLCAoKHNiKS0+c19mcm96ZW4gPCAobGV2ZWwpKSkKKworLyoKKyAqIFN1cGVyYmxvY2sgbG9ja2luZy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGxvY2tfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICogc2IpCit7CisJZG93bigmc2ItPnNfbG9jayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICogc2IpCit7CisJdXAoJnNiLT5zX2xvY2spOworfQorCisvKgorICogVkZTIGhlbHBlciBmdW5jdGlvbnMuLgorICovCitleHRlcm4gaW50IHZmc19jcmVhdGUoc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKiwgaW50LCBzdHJ1Y3QgbmFtZWlkYXRhICopOworZXh0ZXJuIGludCB2ZnNfbWtkaXIoc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKiwgaW50KTsKK2V4dGVybiBpbnQgdmZzX21rbm9kKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosIGludCwgZGV2X3QpOworZXh0ZXJuIGludCB2ZnNfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqLCBjb25zdCBjaGFyICosIGludCk7CitleHRlcm4gaW50IHZmc19saW5rKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKik7CitleHRlcm4gaW50IHZmc19ybWRpcihzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqKTsKK2V4dGVybiBpbnQgdmZzX3VubGluayhzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqKTsKK2V4dGVybiBpbnQgdmZzX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqKTsKKworLyoKKyAqIFZGUyBkZW50cnkgaGVscGVyIGZ1bmN0aW9ucy4KKyAqLworZXh0ZXJuIHZvaWQgZGVudHJ5X3VuaGFzaChzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOworCisvKgorICogRmlsZSB0eXBlcworICoKKyAqIE5PVEUhIFRoZXNlIG1hdGNoIGJpdHMgMTIuLjE1IG9mIHN0YXQuc3RfbW9kZQorICogKGllICIoaV9tb2RlID4+IDEyKSAmIDE1IikuCisgKi8KKyNkZWZpbmUgRFRfVU5LTk9XTgkwCisjZGVmaW5lIERUX0ZJRk8JCTEKKyNkZWZpbmUgRFRfQ0hSCQkyCisjZGVmaW5lIERUX0RJUgkJNAorI2RlZmluZSBEVF9CTEsJCTYKKyNkZWZpbmUgRFRfUkVHCQk4CisjZGVmaW5lIERUX0xOSwkJMTAKKyNkZWZpbmUgRFRfU09DSwkJMTIKKyNkZWZpbmUgRFRfV0hUCQkxNAorCisjZGVmaW5lIE9TWU5DX01FVEFEQVRBCSgxPDwwKQorI2RlZmluZSBPU1lOQ19EQVRBCSgxPDwxKQorI2RlZmluZSBPU1lOQ19JTk9ERQkoMTw8MikKK2ludCBnZW5lcmljX29zeW5jX2lub2RlKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqLCBpbnQpOworCisvKgorICogVGhpcyBpcyB0aGUgImZpbGxkaXIiIGZ1bmN0aW9uIHR5cGUsIHVzZWQgYnkgcmVhZGRpcigpIHRvIGxldAorICogdGhlIGtlcm5lbCBzcGVjaWZ5IHdoYXQga2luZCBvZiBkaXJlbnQgbGF5b3V0IGl0IHdhbnRzIHRvIGhhdmUuCisgKiBUaGlzIGFsbG93cyB0aGUga2VybmVsIHRvIHJlYWQgZGlyZWN0b3JpZXMgaW50byBrZXJuZWwgc3BhY2Ugb3IKKyAqIHRvIGhhdmUgZGlmZmVyZW50IGRpcmVudCBsYXlvdXRzIGRlcGVuZGluZyBvbiB0aGUgYmluYXJ5IHR5cGUuCisgKi8KK3R5cGVkZWYgaW50ICgqZmlsbGRpcl90KSh2b2lkICosIGNvbnN0IGNoYXIgKiwgaW50LCBsb2ZmX3QsIGlub190LCB1bnNpZ25lZCk7CisKK3N0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyB7CisJaW50ICgqb3BlbikgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKKwlpbnQgKCpyZWxlYXNlKSAoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopOworCWludCAoKmlvY3RsKSAoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICosIHVuc2lnbmVkLCB1bnNpZ25lZCBsb25nKTsKKwlsb25nICgqY29tcGF0X2lvY3RsKSAoc3RydWN0IGZpbGUgKiwgdW5zaWduZWQsIHVuc2lnbmVkIGxvbmcpOworCWludCAoKm1lZGlhX2NoYW5nZWQpIChzdHJ1Y3QgZ2VuZGlzayAqKTsKKwlpbnQgKCpyZXZhbGlkYXRlX2Rpc2spIChzdHJ1Y3QgZ2VuZGlzayAqKTsKKwlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKK307CisKKy8qCisgKiAiZGVzY3JpcHRvciIgZm9yIHdoYXQgd2UncmUgdXAgdG8gd2l0aCBhIHJlYWQgZm9yIHNlbmRmaWxlKCkuCisgKiBUaGlzIGFsbG93cyB1cyB0byB1c2UgdGhlIHNhbWUgcmVhZCBjb2RlIHlldAorICogaGF2ZSBtdWx0aXBsZSBkaWZmZXJlbnQgdXNlcnMgb2YgdGhlIGRhdGEgdGhhdAorICogd2UgcmVhZCBmcm9tIGEgZmlsZS4KKyAqCisgKiBUaGUgc2ltcGxlc3QgY2FzZSBqdXN0IGNvcGllcyB0aGUgZGF0YSB0byB1c2VyCisgKiBtb2RlLgorICovCit0eXBlZGVmIHN0cnVjdCB7CisJc2l6ZV90IHdyaXR0ZW47CisJc2l6ZV90IGNvdW50OworCXVuaW9uIHsKKwkJY2hhciBfX3VzZXIgKiBidWY7CisJCXZvaWQgKmRhdGE7CisJfSBhcmc7CisJaW50IGVycm9yOworfSByZWFkX2Rlc2NyaXB0b3JfdDsKKwordHlwZWRlZiBpbnQgKCpyZWFkX2FjdG9yX3QpKHJlYWRfZGVzY3JpcHRvcl90ICosIHN0cnVjdCBwYWdlICosIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOworCisvKiBUaGVzZSBtYWNyb3MgYXJlIGZvciBvdXQgb2Yga2VybmVsIG1vZHVsZXMgdG8gdGVzdCB0aGF0CisgKiB0aGUga2VybmVsIHN1cHBvcnRzIHRoZSB1bmxvY2tlZF9pb2N0bCBhbmQgY29tcGF0X2lvY3RsCisgKiBmaWVsZHMgaW4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucy4gKi8KKyNkZWZpbmUgSEFWRV9DT01QQVRfSU9DVEwgMQorI2RlZmluZSBIQVZFX1VOTE9DS0VEX0lPQ1RMIDEKKworLyoKKyAqIE5PVEU6CisgKiByZWFkLCB3cml0ZSwgcG9sbCwgZnN5bmMsIHJlYWR2LCB3cml0ZXYsIHVubG9ja2VkX2lvY3RsIGFuZCBjb21wYXRfaW9jdGwKKyAqIGNhbiBiZSBjYWxsZWQgd2l0aG91dCB0aGUgYmlnIGtlcm5lbCBsb2NrIGhlbGQgaW4gYWxsIGZpbGVzeXN0ZW1zLgorICovCitzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHsKKwlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKKwlsb2ZmX3QgKCpsbHNlZWspIChzdHJ1Y3QgZmlsZSAqLCBsb2ZmX3QsIGludCk7CisJc3NpemVfdCAoKnJlYWQpIChzdHJ1Y3QgZmlsZSAqLCBjaGFyIF9fdXNlciAqLCBzaXplX3QsIGxvZmZfdCAqKTsKKwlzc2l6ZV90ICgqYWlvX3JlYWQpIChzdHJ1Y3Qga2lvY2IgKiwgY2hhciBfX3VzZXIgKiwgc2l6ZV90LCBsb2ZmX3QpOworCXNzaXplX3QgKCp3cml0ZSkgKHN0cnVjdCBmaWxlICosIGNvbnN0IGNoYXIgX191c2VyICosIHNpemVfdCwgbG9mZl90ICopOworCXNzaXplX3QgKCphaW9fd3JpdGUpIChzdHJ1Y3Qga2lvY2IgKiwgY29uc3QgY2hhciBfX3VzZXIgKiwgc2l6ZV90LCBsb2ZmX3QpOworCWludCAoKnJlYWRkaXIpIChzdHJ1Y3QgZmlsZSAqLCB2b2lkICosIGZpbGxkaXJfdCk7CisJdW5zaWduZWQgaW50ICgqcG9sbCkgKHN0cnVjdCBmaWxlICosIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqKTsKKwlpbnQgKCppb2N0bCkgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpOworCWxvbmcgKCp1bmxvY2tlZF9pb2N0bCkgKHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7CisJbG9uZyAoKmNvbXBhdF9pb2N0bCkgKHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7CisJaW50ICgqbW1hcCkgKHN0cnVjdCBmaWxlICosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKTsKKwlpbnQgKCpvcGVuKSAoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopOworCWludCAoKmZsdXNoKSAoc3RydWN0IGZpbGUgKik7CisJaW50ICgqcmVsZWFzZSkgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKKwlpbnQgKCpmc3luYykgKHN0cnVjdCBmaWxlICosIHN0cnVjdCBkZW50cnkgKiwgaW50IGRhdGFzeW5jKTsKKwlpbnQgKCphaW9fZnN5bmMpIChzdHJ1Y3Qga2lvY2IgKiwgaW50IGRhdGFzeW5jKTsKKwlpbnQgKCpmYXN5bmMpIChpbnQsIHN0cnVjdCBmaWxlICosIGludCk7CisJaW50ICgqbG9jaykgKHN0cnVjdCBmaWxlICosIGludCwgc3RydWN0IGZpbGVfbG9jayAqKTsKKwlzc2l6ZV90ICgqcmVhZHYpIChzdHJ1Y3QgZmlsZSAqLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKiwgdW5zaWduZWQgbG9uZywgbG9mZl90ICopOworCXNzaXplX3QgKCp3cml0ZXYpIChzdHJ1Y3QgZmlsZSAqLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKiwgdW5zaWduZWQgbG9uZywgbG9mZl90ICopOworCXNzaXplX3QgKCpzZW5kZmlsZSkgKHN0cnVjdCBmaWxlICosIGxvZmZfdCAqLCBzaXplX3QsIHJlYWRfYWN0b3JfdCwgdm9pZCAqKTsKKwlzc2l6ZV90ICgqc2VuZHBhZ2UpIChzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgcGFnZSAqLCBpbnQsIHNpemVfdCwgbG9mZl90ICosIGludCk7CisJdW5zaWduZWQgbG9uZyAoKmdldF91bm1hcHBlZF9hcmVhKShzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKKwlpbnQgKCpjaGVja19mbGFncykoaW50KTsKKwlpbnQgKCpkaXJfbm90aWZ5KShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhcmcpOworCWludCAoKmZsb2NrKSAoc3RydWN0IGZpbGUgKiwgaW50LCBzdHJ1Y3QgZmlsZV9sb2NrICopOworfTsKKworc3RydWN0IGlub2RlX29wZXJhdGlvbnMgeworCWludCAoKmNyZWF0ZSkgKHN0cnVjdCBpbm9kZSAqLHN0cnVjdCBkZW50cnkgKixpbnQsIHN0cnVjdCBuYW1laWRhdGEgKik7CisJc3RydWN0IGRlbnRyeSAqICgqbG9va3VwKSAoc3RydWN0IGlub2RlICosc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgbmFtZWlkYXRhICopOworCWludCAoKmxpbmspIChzdHJ1Y3QgZGVudHJ5ICosc3RydWN0IGlub2RlICosc3RydWN0IGRlbnRyeSAqKTsKKwlpbnQgKCp1bmxpbmspIChzdHJ1Y3QgaW5vZGUgKixzdHJ1Y3QgZGVudHJ5ICopOworCWludCAoKnN5bWxpbmspIChzdHJ1Y3QgaW5vZGUgKixzdHJ1Y3QgZGVudHJ5ICosY29uc3QgY2hhciAqKTsKKwlpbnQgKCpta2RpcikgKHN0cnVjdCBpbm9kZSAqLHN0cnVjdCBkZW50cnkgKixpbnQpOworCWludCAoKnJtZGlyKSAoc3RydWN0IGlub2RlICosc3RydWN0IGRlbnRyeSAqKTsKKwlpbnQgKCpta25vZCkgKHN0cnVjdCBpbm9kZSAqLHN0cnVjdCBkZW50cnkgKixpbnQsZGV2X3QpOworCWludCAoKnJlbmFtZSkgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosCisJCQlzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqKTsKKwlpbnQgKCpyZWFkbGluaykgKHN0cnVjdCBkZW50cnkgKiwgY2hhciBfX3VzZXIgKixpbnQpOworCWludCAoKmZvbGxvd19saW5rKSAoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgbmFtZWlkYXRhICopOworCXZvaWQgKCpwdXRfbGluaykgKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IG5hbWVpZGF0YSAqKTsKKwl2b2lkICgqdHJ1bmNhdGUpIChzdHJ1Y3QgaW5vZGUgKik7CisJaW50ICgqcGVybWlzc2lvbikgKHN0cnVjdCBpbm9kZSAqLCBpbnQsIHN0cnVjdCBuYW1laWRhdGEgKik7CisJaW50ICgqc2V0YXR0cikgKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGlhdHRyICopOworCWludCAoKmdldGF0dHIpIChzdHJ1Y3QgdmZzbW91bnQgKm1udCwgc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3Qga3N0YXQgKik7CisJaW50ICgqc2V0eGF0dHIpIChzdHJ1Y3QgZGVudHJ5ICosIGNvbnN0IGNoYXIgKixjb25zdCB2b2lkICosc2l6ZV90LGludCk7CisJc3NpemVfdCAoKmdldHhhdHRyKSAoc3RydWN0IGRlbnRyeSAqLCBjb25zdCBjaGFyICosIHZvaWQgKiwgc2l6ZV90KTsKKwlzc2l6ZV90ICgqbGlzdHhhdHRyKSAoc3RydWN0IGRlbnRyeSAqLCBjaGFyICosIHNpemVfdCk7CisJaW50ICgqcmVtb3ZleGF0dHIpIChzdHJ1Y3QgZGVudHJ5ICosIGNvbnN0IGNoYXIgKik7Cit9OworCitzdHJ1Y3Qgc2VxX2ZpbGU7CisKK2V4dGVybiBzc2l6ZV90IHZmc19yZWFkKHN0cnVjdCBmaWxlICosIGNoYXIgX191c2VyICosIHNpemVfdCwgbG9mZl90ICopOworZXh0ZXJuIHNzaXplX3QgdmZzX3dyaXRlKHN0cnVjdCBmaWxlICosIGNvbnN0IGNoYXIgX191c2VyICosIHNpemVfdCwgbG9mZl90ICopOworZXh0ZXJuIHNzaXplX3QgdmZzX3JlYWR2KHN0cnVjdCBmaWxlICosIGNvbnN0IHN0cnVjdCBpb3ZlYyBfX3VzZXIgKiwKKwkJdW5zaWduZWQgbG9uZywgbG9mZl90ICopOworZXh0ZXJuIHNzaXplX3QgdmZzX3dyaXRldihzdHJ1Y3QgZmlsZSAqLCBjb25zdCBzdHJ1Y3QgaW92ZWMgX191c2VyICosCisJCXVuc2lnbmVkIGxvbmcsIGxvZmZfdCAqKTsKKworLyoKKyAqIE5PVEU6IHdyaXRlX2lub2RlLCBkZWxldGVfaW5vZGUsIGNsZWFyX2lub2RlLCBwdXRfaW5vZGUgY2FuIGJlIGNhbGxlZAorICogd2l0aG91dCB0aGUgYmlnIGtlcm5lbCBsb2NrIGhlbGQgaW4gYWxsIGZpbGVzeXN0ZW1zLgorICovCitzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyB7CisgICAJc3RydWN0IGlub2RlICooKmFsbG9jX2lub2RlKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKKwl2b2lkICgqZGVzdHJveV9pbm9kZSkoc3RydWN0IGlub2RlICopOworCisJdm9pZCAoKnJlYWRfaW5vZGUpIChzdHJ1Y3QgaW5vZGUgKik7CisgIAorICAgCXZvaWQgKCpkaXJ0eV9pbm9kZSkgKHN0cnVjdCBpbm9kZSAqKTsKKwlpbnQgKCp3cml0ZV9pbm9kZSkgKHN0cnVjdCBpbm9kZSAqLCBpbnQpOworCXZvaWQgKCpwdXRfaW5vZGUpIChzdHJ1Y3QgaW5vZGUgKik7CisJdm9pZCAoKmRyb3BfaW5vZGUpIChzdHJ1Y3QgaW5vZGUgKik7CisJdm9pZCAoKmRlbGV0ZV9pbm9kZSkgKHN0cnVjdCBpbm9kZSAqKTsKKwl2b2lkICgqcHV0X3N1cGVyKSAoc3RydWN0IHN1cGVyX2Jsb2NrICopOworCXZvaWQgKCp3cml0ZV9zdXBlcikgKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKKwlpbnQgKCpzeW5jX2ZzKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgd2FpdCk7CisJdm9pZCAoKndyaXRlX3N1cGVyX2xvY2tmcykgKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKKwl2b2lkICgqdW5sb2NrZnMpIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CisJaW50ICgqc3RhdGZzKSAoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBrc3RhdGZzICopOworCWludCAoKnJlbW91bnRfZnMpIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgaW50ICosIGNoYXIgKik7CisJdm9pZCAoKmNsZWFyX2lub2RlKSAoc3RydWN0IGlub2RlICopOworCXZvaWQgKCp1bW91bnRfYmVnaW4pIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CisKKwlpbnQgKCpzaG93X29wdGlvbnMpKHN0cnVjdCBzZXFfZmlsZSAqLCBzdHJ1Y3QgdmZzbW91bnQgKik7CisKKwlzc2l6ZV90ICgqcXVvdGFfcmVhZCkoc3RydWN0IHN1cGVyX2Jsb2NrICosIGludCwgY2hhciAqLCBzaXplX3QsIGxvZmZfdCk7CisJc3NpemVfdCAoKnF1b3RhX3dyaXRlKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgaW50LCBjb25zdCBjaGFyICosIHNpemVfdCwgbG9mZl90KTsKK307CisKKy8qIElub2RlIHN0YXRlIGJpdHMuICBQcm90ZWN0ZWQgYnkgaW5vZGVfbG9jay4gKi8KKyNkZWZpbmUgSV9ESVJUWV9TWU5DCQkxIC8qIE5vdCBkaXJ0eSBlbm91Z2ggZm9yIE9fREFUQVNZTkMgKi8KKyNkZWZpbmUgSV9ESVJUWV9EQVRBU1lOQwkyIC8qIERhdGEtcmVsYXRlZCBpbm9kZSBjaGFuZ2VzIHBlbmRpbmcgKi8KKyNkZWZpbmUgSV9ESVJUWV9QQUdFUwkJNCAvKiBEYXRhLXJlbGF0ZWQgaW5vZGUgY2hhbmdlcyBwZW5kaW5nICovCisjZGVmaW5lIF9fSV9MT0NLCQkzCisjZGVmaW5lIElfTE9DSwkJCSgxIDw8IF9fSV9MT0NLKQorI2RlZmluZSBJX0ZSRUVJTkcJCTE2CisjZGVmaW5lIElfQ0xFQVIJCQkzMgorI2RlZmluZSBJX05FVwkJCTY0CisKKyNkZWZpbmUgSV9ESVJUWSAoSV9ESVJUWV9TWU5DIHwgSV9ESVJUWV9EQVRBU1lOQyB8IElfRElSVFlfUEFHRVMpCisKK2V4dGVybiB2b2lkIF9fbWFya19pbm9kZV9kaXJ0eShzdHJ1Y3QgaW5vZGUgKiwgaW50KTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBtYXJrX2lub2RlX2RpcnR5KHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJX19tYXJrX2lub2RlX2RpcnR5KGlub2RlLCBJX0RJUlRZKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG1hcmtfaW5vZGVfZGlydHlfc3luYyhzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCV9fbWFya19pbm9kZV9kaXJ0eShpbm9kZSwgSV9ESVJUWV9TWU5DKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHRvdWNoX2F0aW1lKHN0cnVjdCB2ZnNtb3VudCAqbW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJLyogcGVyLW1vdW50cG9pbnQgY2hlY2tzIHdpbGwgZ28gaGVyZSAqLworCXVwZGF0ZV9hdGltZShkZW50cnktPmRfaW5vZGUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmlsZV9hY2Nlc3NlZChzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpZiAoIShmaWxlLT5mX2ZsYWdzICYgT19OT0FUSU1FKSkKKwkJdG91Y2hfYXRpbWUoZmlsZS0+Zl92ZnNtbnQsIGZpbGUtPmZfZGVudHJ5KTsKK30KKworaW50IHN5bmNfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpOworCisvKioKKyAqICZleHBvcnRfb3BlcmF0aW9ucyAtIGZvciBuZnNkIHRvIGNvbW11bmljYXRlIHdpdGggZmlsZSBzeXN0ZW1zCisgKiBkZWNvZGVfZmg6ICAgICAgZGVjb2RlIGEgZmlsZSBoYW5kbGUgZnJhZ21lbnQgYW5kIHJldHVybiBhICZzdHJ1Y3QgZGVudHJ5CisgKiBlbmNvZGVfZmg6ICAgICAgZW5jb2RlIGEgZmlsZSBoYW5kbGUgZnJhZ21lbnQgZnJvbSBhIGRlbnRyeQorICogZ2V0X25hbWU6ICAgICAgIGZpbmQgdGhlIG5hbWUgZm9yIGEgZ2l2ZW4gaW5vZGUgaW4gYSBnaXZlbiBkaXJlY3RvcnkKKyAqIGdldF9wYXJlbnQ6ICAgICBmaW5kIHRoZSBwYXJlbnQgb2YgYSBnaXZlbiBkaXJlY3RvcnkKKyAqIGdldF9kZW50cnk6ICAgICBmaW5kIGEgZGVudHJ5IGZvciB0aGUgaW5vZGUgZ2l2ZW4gYSBmaWxlIGhhbmRsZSBzdWItZnJhZ21lbnQKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgIFRoZSBleHBvcnRfb3BlcmF0aW9ucyBzdHJ1Y3R1cmUgcHJvdmlkZXMgYSBtZWFucyBmb3IgbmZzZCB0byBjb21tdW5pY2F0ZQorICogICAgd2l0aCBhIHBhcnRpY3VsYXIgZXhwb3J0ZWQgZmlsZSBzeXN0ZW0gIC0gcGFydGljdWxhcmx5IGVuYWJsaW5nIG5mc2QgYW5kCisgKiAgICB0aGUgZmlsZXN5c3RlbSB0byBjby1vcGVyYXRlIHdoZW4gZGVhbGluZyB3aXRoIGZpbGUgaGFuZGxlcy4KKyAqCisgKiAgICBleHBvcnRfb3BlcmF0aW9ucyBjb250YWlucyB0d28gYmFzaWMgb3BlcmF0aW9uIGZvciBkZWFsaW5nIHdpdGggZmlsZSBoYW5kbGVzLAorICogICAgZGVjb2RlX2ZoKCkgYW5kIGVuY29kZV9maCgpLCBhbmQgYWxsb3dzIGZvciBzb21lIG90aGVyIG9wZXJhdGlvbnMgdG8gYmUgZGVmaW5lZAorICogICAgd2hpY2ggc3RhbmRhcmQgaGVscGVyIHJvdXRpbmVzIHVzZSB0byBnZXQgc3BlY2lmaWMgaW5mb3JtYXRpb24gZnJvbSB0aGUKKyAqICAgIGZpbGVzeXN0ZW0uCisgKgorICogICAgbmZzZCBlbmNvZGVzIGluZm9ybWF0aW9uIHVzZSB0byBkZXRlcm1pbmUgd2hpY2ggZmlsZXN5c3RlbSBhIGZpbGVoYW5kbGUKKyAqICAgIGFwcGxpZXMgdG8gaW4gdGhlIGluaXRpYWwgcGFydCBvZiB0aGUgZmlsZSBoYW5kbGUuICBUaGUgcmVtYWluZGVyLCB0ZXJtZWQgYQorICogICAgZmlsZSBoYW5kbGUgZnJhZ21lbnQsIGlzIGNvbnRyb2xsZWQgY29tcGxldGVseSBieSB0aGUgZmlsZXN5c3RlbS4KKyAqICAgIFRoZSBzdGFuZGFyZCBoZWxwZXIgcm91dGluZXMgYXNzdW1lIHRoYXQgdGhpcyBmcmFnbWVudCB3aWxsIGNvbnRhaW4gb25lIG9yIHR3bworICogICAgc3ViLWZyYWdtZW50cywgb25lIHdoaWNoIGlkZW50aWZpZXMgdGhlIGZpbGUsIGFuZCBvbmUgd2hpY2ggbWF5IGJlIHVzZWQgdG8KKyAqICAgIGlkZW50aWZ5IHRoZSAoYSkgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGZpbGUuCisgKgorICogICAgSW4gc29tZSBzaXR1YXRpb25zLCBuZnNkIG5lZWRzIHRvIGdldCBhIGRlbnRyeSB3aGljaCBpcyBjb25uZWN0ZWQgaW50byBhCisgKiAgICBzcGVjaWZpYyBwYXJ0IG9mIHRoZSBmaWxlIHRyZWUuICBUbyBhbGxvdyBmb3IgdGhpcywgaXQgcGFzc2VzIHRoZSBmdW5jdGlvbgorICogICAgYWNjZXB0YWJsZSgpIHRvZ2V0aGVyIHdpdGggYSBAY29udGV4dCB3aGljaCBjYW4gYmUgdXNlZCB0byBzZWUgaWYgdGhlIGRlbnRyeQorICogICAgaXMgYWNjZXB0YWJsZS4gIEFzIHRoZXJlIGNhbiBiZSBtdWx0aXBsZSBkZW50cnlzIGZvciBhIGdpdmVuIGZpbGUsIHRoZSBmaWxlc3lzdGVtCisgKiAgICBzaG91bGQgY2hlY2sgZWFjaCBvbmUgZm9yIGFjY2VwdGFiaWxpdHkgYmVmb3JlIGxvb2tpbmcgZm9yIHRoZSBuZXh0LiAgQXMgc29vbgorICogICAgYXMgYW4gYWNjZXB0YWJsZSBvbmUgaXMgZm91bmQsIGl0IHNob3VsZCBiZSByZXR1cm5lZC4KKyAqCisgKiBkZWNvZGVfZmg6CisgKiAgICBAZGVjb2RlX2ZoIGlzIGdpdmVuIGEgJnN0cnVjdCBzdXBlcl9ibG9jayAoQHNiKSwgYSBmaWxlIGhhbmRsZSBmcmFnbWVudCAoQGZoLCBAZmhfbGVuKQorICogICAgYW5kIGFuIGFjY2VwdGFiaWxpdHkgdGVzdGluZyBmdW5jdGlvbiAoQGFjY2VwdGFibGUsIEBjb250ZXh0KS4gIEl0IHNob3VsZCByZXR1cm4KKyAqICAgIGEgJnN0cnVjdCBkZW50cnkgd2hpY2ggcmVmZXJzIHRvIHRoZSBzYW1lIGZpbGUgdGhhdCB0aGUgZmlsZSBoYW5kbGUgZnJhZ21lbnQgcmVmZXJzCisgKiAgICB0bywgIGFuZCB3aGljaCBwYXNzZXMgdGhlIGFjY2VwdGFiaWxpdHkgdGVzdC4gIElmIGl0IGNhbm5vdCwgaXQgc2hvdWxkIHJldHVybgorICogICAgYSAlTlVMTCBwb2ludGVyIGlmIHRoZSBmaWxlIHdhcyBmb3VuZCBidXQgbm8gYWNjZXB0YWJsZSAmZGVudHJpZXMgd2VyZSBhdmFpbGFibGUsIG9yCisgKiAgICBhICVFUlJfUFRSIGVycm9yIGNvZGUgaW5kaWNhdGluZyB3aHkgaXQgY291bGRuJ3QgYmUgZm91bmQgKGUuZy4gJUVOT0VOVCBvciAlRU5PTUVNKS4KKyAqCisgKiBlbmNvZGVfZmg6CisgKiAgICBAZW5jb2RlX2ZoIHNob3VsZCBzdG9yZSBpbiB0aGUgZmlsZSBoYW5kbGUgZnJhZ21lbnQgQGZoICh1c2luZyBhdCBtb3N0IEBtYXhfbGVuIGJ5dGVzKQorICogICAgaW5mb3JtYXRpb24gdGhhdCBjYW4gYmUgdXNlZCBieSBAZGVjb2RlX2ZoIHRvIHJlY292ZXIgdGhlIGZpbGUgcmVmZXJlZCB0byBieSB0aGUKKyAqICAgICZzdHJ1Y3QgZGVudHJ5IEBkZS4gIElmIHRoZSBAY29ubmVjdGFibGUgZmxhZyBpcyBzZXQsIHRoZSBlbmNvZGVfZmgoKSBzaG91bGQgc3RvcmUKKyAqICAgIHN1ZmZpY2llbnQgaW5mb3JtYXRpb24gc28gdGhhdCBhIGdvb2QgYXR0ZW1wdCBjYW4gYmUgbWFkZSB0byBmaW5kIG5vdCBvbmx5CisgKiAgICB0aGUgZmlsZSBidXQgYWxzbyBpdCdzIHBsYWNlIGluIHRoZSBmaWxlc3lzdGVtLiAgIFRoaXMgdHlwaWNhbGx5IG1lYW5zIHN0b3JpbmcKKyAqICAgIGEgcmVmZXJlbmNlIHRvIGRlLT5kX3BhcmVudCBpbiB0aGUgZmlsZWhhbmRsZSBmcmFnbWVudC4KKyAqICAgIGVuY29kZV9maCgpIHNob3VsZCByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBzdG9yZWQgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlCisgKiAgICBzdWNoIGFzICUtRU5PU1BDCisgKgorICogZ2V0X25hbWU6CisgKiAgICBAZ2V0X25hbWUgc2hvdWxkIGZpbmQgYSBuYW1lIGZvciB0aGUgZ2l2ZW4gQGNoaWxkIGluIHRoZSBnaXZlbiBAcGFyZW50IGRpcmVjdG9yeS4KKyAqICAgIFRoZSBuYW1lIHNob3VsZCBiZSBzdG9yZWQgaW4gdGhlIEBuYW1lICh3aXRoIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgaXQgaXMgYWxyZWFkeQorICogICAgcG9pbnRpbmcgdG8gYSBhICVOQU1FX01BWCsxIHNpemVkIGJ1ZmZlci4gICBnZXRfbmFtZSgpIHNob3VsZCByZXR1cm4gJTAgb24gc3VjY2VzcywKKyAqICAgIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvciBlcnJvci4KKyAqICAgIEBnZXRfbmFtZSB3aWxsIGJlIGNhbGxlZCB3aXRob3V0IEBwYXJlbnQtPmlfc2VtIGhlbGQuCisgKgorICogZ2V0X3BhcmVudDoKKyAqICAgIEBnZXRfcGFyZW50IHNob3VsZCBmaW5kIHRoZSBwYXJlbnQgZGlyZWN0b3J5IGZvciB0aGUgZ2l2ZW4gQGNoaWxkIHdoaWNoIGlzIGFsc28KKyAqICAgIGEgZGlyZWN0b3J5LiAgSW4gdGhlIGV2ZW50IHRoYXQgaXQgY2Fubm90IGJlIGZvdW5kLCBvciBzdG9yYWdlIHNwYWNlIGNhbm5vdCBiZQorICogICAgYWxsb2NhdGVkLCBhICVFUlJfUFRSIHNob3VsZCBiZSByZXR1cm5lZC4KKyAqCisgKiBnZXRfZGVudHJ5OgorICogICAgR2l2ZW4gYSAmc3VwZXJfYmxvY2sgKEBzYikgYW5kIGEgcG9pbnRlciB0byBhIGZpbGUtc3lzdGVtIHNwZWNpZmljIGlub2RlIGlkZW50aWZpZXIsCisgKiAgICBwb3NzaWJseSBhbiBpbm9kZSBudW1iZXIsIChAaW51bXApIGdldF9kZW50cnkoKSBzaG91bGQgZmluZCB0aGUgaWRlbnRpZmllZCBpbm9kZSBhbmQKKyAqICAgIHJldHVybiBhIGRlbnRyeSBmb3IgdGhhdCBpbm9kZS4KKyAqICAgIEFueSBzdWl0YWJsZSBkZW50cnkgY2FuIGJlIHJldHVybmVkIGluY2x1ZGluZywgaWYgbmVjZXNzYXJ5LCBhIG5ldyBkZW50cnkgY3JlYXRlZAorICogICAgd2l0aCBkX2FsbG9jX3Jvb3QuICBUaGUgY2FsbGVyIGNhbiB0aGVuIGZpbmQgYW55IG90aGVyIGV4dGFudCBkZW50cnlzIGJ5IGZvbGxvd2luZyB0aGUKKyAqICAgIGRfYWxpYXMgbGlua3MuICBJZiBhIG5ldyBkZW50cnkgd2FzIGNyZWF0ZWQgdXNpbmcgZF9hbGxvY19yb290LCBEQ0FDSEVfTkZTRF9ESVNDT05ORUNURUQKKyAqICAgIHNob3VsZCBiZSBzZXQsIGFuZCB0aGUgZGVudHJ5IHNob3VsZCBiZSBkX3JlaGFzaCgpZWQuCisgKgorICogICAgSWYgdGhlIGlub2RlIGNhbm5vdCBiZSBmb3VuZCwgZWl0aGVyIGEgJU5VTEwgcG9pbnRlciBvciBhbiAlRVJSX1BUUiBjb2RlIGNhbiBiZSByZXR1cm5lZC4KKyAqICAgIFRoZSBAaW51bXAgd2lsbCBiZSB3aGF0ZXZlciB3YXMgcGFzc2VkIHRvIG5mc2RfZmluZF9maF9kZW50cnkoKSBpbiBlaXRoZXIgdGhlCisgKiAgICBAb2JqIG9yIEBwYXJlbnQgcGFyYW1ldGVycy4KKyAqCisgKiBMb2NraW5nIHJ1bGVzOgorICogIGdldF9wYXJlbnQgaXMgY2FsbGVkIHdpdGggY2hpbGQtPmRfaW5vZGUtPmlfc2VtIGRvd24KKyAqICBnZXRfbmFtZSBpcyBub3QgKHdoaWNoIGlzIHBvc3NpYmx5IGluY29uc2lzdGVudCkKKyAqLworCitzdHJ1Y3QgZXhwb3J0X29wZXJhdGlvbnMgeworCXN0cnVjdCBkZW50cnkgKigqZGVjb2RlX2ZoKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBfX3UzMiAqZmgsIGludCBmaF9sZW4sIGludCBmaF90eXBlLAorCQkJIGludCAoKmFjY2VwdGFibGUpKHZvaWQgKmNvbnRleHQsIHN0cnVjdCBkZW50cnkgKmRlKSwKKwkJCSB2b2lkICpjb250ZXh0KTsKKwlpbnQgKCplbmNvZGVfZmgpKHN0cnVjdCBkZW50cnkgKmRlLCBfX3UzMiAqZmgsIGludCAqbWF4X2xlbiwKKwkJCSBpbnQgY29ubmVjdGFibGUpOworCisJLyogdGhlIGZvbGxvd2luZyBhcmUgb25seSBjYWxsZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBpdHNlbGYgKi8KKwlpbnQgKCpnZXRfbmFtZSkoc3RydWN0IGRlbnRyeSAqcGFyZW50LCBjaGFyICpuYW1lLAorCQkJc3RydWN0IGRlbnRyeSAqY2hpbGQpOworCXN0cnVjdCBkZW50cnkgKiAoKmdldF9wYXJlbnQpKHN0cnVjdCBkZW50cnkgKmNoaWxkKTsKKwlzdHJ1Y3QgZGVudHJ5ICogKCpnZXRfZGVudHJ5KShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB2b2lkICppbnVtcCk7CisKKwkvKiBUaGlzIGlzIHNldCBieSB0aGUgZXhwb3J0aW5nIG1vZHVsZSB0byBhIHN0YW5kYXJkIGhlbHBlciAqLworCXN0cnVjdCBkZW50cnkgKiAoKmZpbmRfZXhwb3J0ZWRfZGVudHJ5KSgKKwkJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdm9pZCAqb2JqLCB2b2lkICpwYXJlbnQsCisJCWludCAoKmFjY2VwdGFibGUpKHZvaWQgKmNvbnRleHQsIHN0cnVjdCBkZW50cnkgKmRlKSwKKwkJdm9pZCAqY29udGV4dCk7CisKKworfTsKKworZXh0ZXJuIHN0cnVjdCBkZW50cnkgKgorZmluZF9leHBvcnRlZF9kZW50cnkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdm9pZCAqb2JqLCB2b2lkICpwYXJlbnQsCisJCSAgICAgaW50ICgqYWNjZXB0YWJsZSkodm9pZCAqY29udGV4dCwgc3RydWN0IGRlbnRyeSAqZGUpLAorCQkgICAgIHZvaWQgKmNvbnRleHQpOworCitzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSB7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgZnNfZmxhZ3M7CisJc3RydWN0IHN1cGVyX2Jsb2NrICooKmdldF9zYikgKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICosIGludCwKKwkJCQkgICAgICAgY29uc3QgY2hhciAqLCB2b2lkICopOworCXZvaWQgKCpraWxsX3NiKSAoc3RydWN0IHN1cGVyX2Jsb2NrICopOworCXN0cnVjdCBtb2R1bGUgKm93bmVyOworCXN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICogbmV4dDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGZzX3N1cGVyczsKK307CisKK3N0cnVjdCBzdXBlcl9ibG9jayAqZ2V0X3NiX2JkZXYoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKmZzX3R5cGUsCisJaW50IGZsYWdzLCBjb25zdCBjaGFyICpkZXZfbmFtZSwgdm9pZCAqZGF0YSwKKwlpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdm9pZCAqLCBpbnQpKTsKK3N0cnVjdCBzdXBlcl9ibG9jayAqZ2V0X3NiX3NpbmdsZShzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqZnNfdHlwZSwKKwlpbnQgZmxhZ3MsIHZvaWQgKmRhdGEsCisJaW50ICgqZmlsbF9zdXBlcikoc3RydWN0IHN1cGVyX2Jsb2NrICosIHZvaWQgKiwgaW50KSk7CitzdHJ1Y3Qgc3VwZXJfYmxvY2sgKmdldF9zYl9ub2RldihzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqZnNfdHlwZSwKKwlpbnQgZmxhZ3MsIHZvaWQgKmRhdGEsCisJaW50ICgqZmlsbF9zdXBlcikoc3RydWN0IHN1cGVyX2Jsb2NrICosIHZvaWQgKiwgaW50KSk7Cit2b2lkIGdlbmVyaWNfc2h1dGRvd25fc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7Cit2b2lkIGtpbGxfYmxvY2tfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7Cit2b2lkIGtpbGxfYW5vbl9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKK3ZvaWQga2lsbF9saXR0ZXJfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7Cit2b2lkIGRlYWN0aXZhdGVfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CitpbnQgc2V0X2Fub25fc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCB2b2lkICpkYXRhKTsKK3N0cnVjdCBzdXBlcl9ibG9jayAqc2dldChzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqdHlwZSwKKwkJCWludCAoKnRlc3QpKHN0cnVjdCBzdXBlcl9ibG9jayAqLHZvaWQgKiksCisJCQlpbnQgKCpzZXQpKHN0cnVjdCBzdXBlcl9ibG9jayAqLHZvaWQgKiksCisJCQl2b2lkICpkYXRhKTsKK3N0cnVjdCBzdXBlcl9ibG9jayAqZ2V0X3NiX3BzZXVkbyhzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqLCBjaGFyICosCisJCQlzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyAqb3BzLCB1bnNpZ25lZCBsb25nKTsKK2ludCBfX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKK2ludCBfX3B1dF9zdXBlcl9hbmRfbmVlZF9yZXN0YXJ0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwordm9pZCB1bm5hbWVkX2Rldl9pbml0KHZvaWQpOworCisvKiBBbGFzLCBubyBhbGlhc2VzLiBUb28gbXVjaCBoYXNzbGUgd2l0aCBicmluZ2luZyBtb2R1bGUuaCBldmVyeXdoZXJlICovCisjZGVmaW5lIGZvcHNfZ2V0KGZvcHMpIFwKKwkoKChmb3BzKSAmJiB0cnlfbW9kdWxlX2dldCgoZm9wcyktPm93bmVyKSA/IChmb3BzKSA6IE5VTEwpKQorI2RlZmluZSBmb3BzX3B1dChmb3BzKSBcCisJZG8geyBpZiAoZm9wcykgbW9kdWxlX3B1dCgoZm9wcyktPm93bmVyKTsgfSB3aGlsZSgwKQorCitleHRlcm4gaW50IHJlZ2lzdGVyX2ZpbGVzeXN0ZW0oc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKik7CitleHRlcm4gaW50IHVucmVnaXN0ZXJfZmlsZXN5c3RlbShzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqKTsKK2V4dGVybiBzdHJ1Y3QgdmZzbW91bnQgKmtlcm5fbW91bnQoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKik7CitleHRlcm4gaW50IG1heV91bW91bnRfdHJlZShzdHJ1Y3QgdmZzbW91bnQgKik7CitleHRlcm4gaW50IG1heV91bW91bnQoc3RydWN0IHZmc21vdW50ICopOworZXh0ZXJuIGxvbmcgZG9fbW91bnQoY2hhciAqLCBjaGFyICosIGNoYXIgKiwgdW5zaWduZWQgbG9uZywgdm9pZCAqKTsKKworZXh0ZXJuIGludCB2ZnNfc3RhdGZzKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3Qga3N0YXRmcyAqKTsKKworI2RlZmluZSBGTE9DS19WRVJJRllfUkVBRCAgMQorI2RlZmluZSBGTE9DS19WRVJJRllfV1JJVEUgMgorCitleHRlcm4gaW50IGxvY2tzX21hbmRhdG9yeV9sb2NrZWQoc3RydWN0IGlub2RlICopOworZXh0ZXJuIGludCBsb2Nrc19tYW5kYXRvcnlfYXJlYShpbnQsIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqLCBsb2ZmX3QsIHNpemVfdCk7CisKKy8qCisgKiBDYW5kaWRhdGVzIGZvciBtYW5kYXRvcnkgbG9ja2luZyBoYXZlIHRoZSBzZXRnaWQgYml0IHNldAorICogYnV0IG5vIGdyb3VwIGV4ZWN1dGUgYml0IC0gIGFuIG90aGVyd2lzZSBtZWFuaW5nbGVzcyBjb21iaW5hdGlvbi4KKyAqLworI2RlZmluZSBNQU5EQVRPUllfTE9DSyhpbm9kZSkgXAorCShJU19NQU5ETE9DSyhpbm9kZSkgJiYgKChpbm9kZSktPmlfbW9kZSAmIChTX0lTR0lEIHwgU19JWEdSUCkpID09IFNfSVNHSUQpCisKK3N0YXRpYyBpbmxpbmUgaW50IGxvY2tzX3ZlcmlmeV9sb2NrZWQoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlpZiAoTUFOREFUT1JZX0xPQ0soaW5vZGUpKQorCQlyZXR1cm4gbG9ja3NfbWFuZGF0b3J5X2xvY2tlZChpbm9kZSk7CisJcmV0dXJuIDA7Cit9CisKK2V4dGVybiBpbnQgcndfdmVyaWZ5X2FyZWEoaW50LCBzdHJ1Y3QgZmlsZSAqLCBsb2ZmX3QgKiwgc2l6ZV90KTsKKworc3RhdGljIGlubGluZSBpbnQgbG9ja3NfdmVyaWZ5X3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICAgIHN0cnVjdCBmaWxlICpmaWxwLAorCQkJCSAgICBsb2ZmX3Qgc2l6ZSkKK3sKKwlpZiAoaW5vZGUtPmlfZmxvY2sgJiYgTUFOREFUT1JZX0xPQ0soaW5vZGUpKQorCQlyZXR1cm4gbG9ja3NfbWFuZGF0b3J5X2FyZWEoCisJCQlGTE9DS19WRVJJRllfV1JJVEUsIGlub2RlLCBmaWxwLAorCQkJc2l6ZSA8IGlub2RlLT5pX3NpemUgPyBzaXplIDogaW5vZGUtPmlfc2l6ZSwKKwkJCShzaXplIDwgaW5vZGUtPmlfc2l6ZSA/IGlub2RlLT5pX3NpemUgLSBzaXplCisJCQkgOiBzaXplIC0gaW5vZGUtPmlfc2l6ZSkKKwkJKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgYnJlYWtfbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgaW50IG1vZGUpCit7CisJaWYgKGlub2RlLT5pX2Zsb2NrKQorCQlyZXR1cm4gX19icmVha19sZWFzZShpbm9kZSwgbW9kZSk7CisJcmV0dXJuIDA7Cit9CisKKy8qIGZzL29wZW4uYyAqLworCitleHRlcm4gaW50IGRvX3RydW5jYXRlKHN0cnVjdCBkZW50cnkgKiwgbG9mZl90IHN0YXJ0KTsKK2V4dGVybiBzdHJ1Y3QgZmlsZSAqZmlscF9vcGVuKGNvbnN0IGNoYXIgKiwgaW50LCBpbnQpOworZXh0ZXJuIHN0cnVjdCBmaWxlICogZGVudHJ5X29wZW4oc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgdmZzbW91bnQgKiwgaW50KTsKK2V4dGVybiBpbnQgZmlscF9jbG9zZShzdHJ1Y3QgZmlsZSAqLCBmbF9vd25lcl90IGlkKTsKK2V4dGVybiBjaGFyICogZ2V0bmFtZShjb25zdCBjaGFyIF9fdXNlciAqKTsKKworLyogZnMvZGNhY2hlLmMgKi8KK2V4dGVybiB2b2lkIF9faW5pdCB2ZnNfY2FjaGVzX2luaXRfZWFybHkodm9pZCk7CitleHRlcm4gdm9pZCBfX2luaXQgdmZzX2NhY2hlc19pbml0KHVuc2lnbmVkIGxvbmcpOworCisjZGVmaW5lIF9fZ2V0bmFtZSgpCWttZW1fY2FjaGVfYWxsb2MobmFtZXNfY2FjaGVwLCBTTEFCX0tFUk5FTCkKKyNkZWZpbmUgX19wdXRuYW1lKG5hbWUpIGttZW1fY2FjaGVfZnJlZShuYW1lc19jYWNoZXAsICh2b2lkICopKG5hbWUpKQorI2lmbmRlZiBDT05GSUdfQVVESVRTWVNDQUxMCisjZGVmaW5lIHB1dG5hbWUobmFtZSkgICBfX3B1dG5hbWUobmFtZSkKKyNlbHNlCitleHRlcm4gdm9pZCBwdXRuYW1lKGNvbnN0IGNoYXIgKm5hbWUpOworI2VuZGlmCisKK2V4dGVybiBpbnQgcmVnaXN0ZXJfYmxrZGV2KHVuc2lnbmVkIGludCwgY29uc3QgY2hhciAqKTsKK2V4dGVybiBpbnQgdW5yZWdpc3Rlcl9ibGtkZXYodW5zaWduZWQgaW50LCBjb25zdCBjaGFyICopOworZXh0ZXJuIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZ2V0KGRldl90KTsKK2V4dGVybiB2b2lkIGJkX3NldF9zaXplKHN0cnVjdCBibG9ja19kZXZpY2UgKiwgbG9mZl90IHNpemUpOworZXh0ZXJuIHZvaWQgYmRfZm9yZ2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUpOworZXh0ZXJuIHZvaWQgYmRwdXQoc3RydWN0IGJsb2NrX2RldmljZSAqKTsKK2V4dGVybiBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpvcGVuX2J5X2Rldm51bShkZXZfdCwgdW5zaWduZWQpOworZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVmX2Jsa19mb3BzOworZXh0ZXJuIHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZGVmX2Jsa19hb3BzOworZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVmX2Nocl9mb3BzOworZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYmFkX3NvY2tfZm9wczsKK2V4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlZl9maWZvX2ZvcHM7CitleHRlcm4gaW50IGlvY3RsX2J5X2JkZXYoc3RydWN0IGJsb2NrX2RldmljZSAqLCB1bnNpZ25lZCwgdW5zaWduZWQgbG9uZyk7CitleHRlcm4gaW50IGJsa2Rldl9pb2N0bChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKiwgdW5zaWduZWQsIHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuIGxvbmcgY29tcGF0X2Jsa2Rldl9pb2N0bChzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCwgdW5zaWduZWQgbG9uZyk7CitleHRlcm4gaW50IGJsa2Rldl9nZXQoc3RydWN0IGJsb2NrX2RldmljZSAqLCBtb2RlX3QsIHVuc2lnbmVkKTsKK2V4dGVybiBpbnQgYmxrZGV2X3B1dChzdHJ1Y3QgYmxvY2tfZGV2aWNlICopOworZXh0ZXJuIGludCBiZF9jbGFpbShzdHJ1Y3QgYmxvY2tfZGV2aWNlICosIHZvaWQgKik7CitleHRlcm4gdm9pZCBiZF9yZWxlYXNlKHN0cnVjdCBibG9ja19kZXZpY2UgKik7CisKKy8qIGZzL2NoYXJfZGV2LmMgKi8KK2V4dGVybiBpbnQgYWxsb2NfY2hyZGV2X3JlZ2lvbihkZXZfdCAqLCB1bnNpZ25lZCwgdW5zaWduZWQsIGNvbnN0IGNoYXIgKik7CitleHRlcm4gaW50IHJlZ2lzdGVyX2NocmRldl9yZWdpb24oZGV2X3QsIHVuc2lnbmVkLCBjb25zdCBjaGFyICopOworZXh0ZXJuIGludCByZWdpc3Rlcl9jaHJkZXYodW5zaWduZWQgaW50LCBjb25zdCBjaGFyICosCisJCQkgICBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICopOworZXh0ZXJuIGludCB1bnJlZ2lzdGVyX2NocmRldih1bnNpZ25lZCBpbnQsIGNvbnN0IGNoYXIgKik7CitleHRlcm4gdm9pZCB1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24oZGV2X3QsIHVuc2lnbmVkKTsKK2V4dGVybiBpbnQgY2hyZGV2X29wZW4oc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopOworCisvKiBmcy9ibG9ja19kZXYuYyAqLworI2RlZmluZSBCREVWTkFNRV9TSVpFCTMyCS8qIExhcmdlc3Qgc3RyaW5nIGZvciBhIGJsb2NrZGV2IGlkZW50aWZpZXIgKi8KK2V4dGVybiBjb25zdCBjaGFyICpfX2JkZXZuYW1lKGRldl90LCBjaGFyICpidWZmZXIpOworZXh0ZXJuIGNvbnN0IGNoYXIgKmJkZXZuYW1lKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGNoYXIgKmJ1ZmZlcik7CitleHRlcm4gc3RydWN0IGJsb2NrX2RldmljZSAqbG9va3VwX2JkZXYoY29uc3QgY2hhciAqKTsKK2V4dGVybiBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpvcGVuX2JkZXZfZXhjbChjb25zdCBjaGFyICosIGludCwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGNsb3NlX2JkZXZfZXhjbChzdHJ1Y3QgYmxvY2tfZGV2aWNlICopOworCitleHRlcm4gdm9pZCBpbml0X3NwZWNpYWxfaW5vZGUoc3RydWN0IGlub2RlICosIHVtb2RlX3QsIGRldl90KTsKKworLyogSW52YWxpZCBpbm9kZSBvcGVyYXRpb25zIC0tIGZzL2JhZF9pbm9kZS5jICovCitleHRlcm4gdm9pZCBtYWtlX2JhZF9pbm9kZShzdHJ1Y3QgaW5vZGUgKik7CitleHRlcm4gaW50IGlzX2JhZF9pbm9kZShzdHJ1Y3QgaW5vZGUgKik7CisKK2V4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJlYWRfZmlmb19mb3BzOworZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgd3JpdGVfZmlmb19mb3BzOworZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmR3cl9maWZvX2ZvcHM7CitleHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByZWFkX3BpcGVfZm9wczsKK2V4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHdyaXRlX3BpcGVfZm9wczsKK2V4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJkd3JfcGlwZV9mb3BzOworCitleHRlcm4gaW50IGZzX21heV9yZW1vdW50X3JvKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKKworLyoKKyAqIHJldHVybiBSRUFELCBSRUFEQSwgb3IgV1JJVEUKKyAqLworI2RlZmluZSBiaW9fcncoYmlvKQkJKChiaW8pLT5iaV9ydyAmIChSV19NQVNLIHwgUldBX01BU0spKQorCisvKgorICogcmV0dXJuIGRhdGEgZGlyZWN0aW9uLCBSRUFEIG9yIFdSSVRFCisgKi8KKyNkZWZpbmUgYmlvX2RhdGFfZGlyKGJpbykJKChiaW8pLT5iaV9ydyAmIDEpCisKK2V4dGVybiBpbnQgY2hlY2tfZGlza19jaGFuZ2Uoc3RydWN0IGJsb2NrX2RldmljZSAqKTsKK2V4dGVybiBpbnQgaW52YWxpZGF0ZV9pbm9kZXMoc3RydWN0IHN1cGVyX2Jsb2NrICopOworZXh0ZXJuIGludCBfX2ludmFsaWRhdGVfZGV2aWNlKHN0cnVjdCBibG9ja19kZXZpY2UgKiwgaW50KTsKK2V4dGVybiBpbnQgaW52YWxpZGF0ZV9wYXJ0aXRpb24oc3RydWN0IGdlbmRpc2sgKiwgaW50KTsKK3Vuc2lnbmVkIGxvbmcgaW52YWxpZGF0ZV9tYXBwaW5nX3BhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAorCQkJCQlwZ29mZl90IHN0YXJ0LCBwZ29mZl90IGVuZCk7Cit1bnNpZ25lZCBsb25nIGludmFsaWRhdGVfaW5vZGVfcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpOworc3RhdGljIGlubGluZSB2b2lkIGludmFsaWRhdGVfcmVtb3RlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJaWYgKFNfSVNSRUcoaW5vZGUtPmlfbW9kZSkgfHwgU19JU0RJUihpbm9kZS0+aV9tb2RlKSB8fAorCSAgICBTX0lTTE5LKGlub2RlLT5pX21vZGUpKQorCQlpbnZhbGlkYXRlX2lub2RlX3BhZ2VzKGlub2RlLT5pX21hcHBpbmcpOworfQorZXh0ZXJuIGludCBpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMihzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyk7CitleHRlcm4gaW50IGludmFsaWRhdGVfaW5vZGVfcGFnZXMyX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAorCQkJCQkgcGdvZmZfdCBzdGFydCwgcGdvZmZfdCBlbmQpOworZXh0ZXJuIGludCB3cml0ZV9pbm9kZV9ub3coc3RydWN0IGlub2RlICosIGludCk7CitleHRlcm4gaW50IGZpbGVtYXBfZmRhdGF3cml0ZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqKTsKK2V4dGVybiBpbnQgZmlsZW1hcF9mbHVzaChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqKTsKK2V4dGVybiBpbnQgZmlsZW1hcF9mZGF0YXdhaXQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKik7CitleHRlcm4gaW50IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpOworZXh0ZXJuIGludCBmaWxlbWFwX3dyaXRlX2FuZF93YWl0X3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAorCQkJCSAgICAgICAgbG9mZl90IGxzdGFydCwgbG9mZl90IGxlbmQpOworZXh0ZXJuIHZvaWQgc3luY19zdXBlcnModm9pZCk7CitleHRlcm4gdm9pZCBzeW5jX2ZpbGVzeXN0ZW1zKGludCB3YWl0KTsKK2V4dGVybiB2b2lkIGVtZXJnZW5jeV9zeW5jKHZvaWQpOworZXh0ZXJuIHZvaWQgZW1lcmdlbmN5X3JlbW91bnQodm9pZCk7CitleHRlcm4gaW50IGRvX3JlbW91bnRfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGZsYWdzLAorCQkJIHZvaWQgKmRhdGEsIGludCBmb3JjZSk7CitleHRlcm4gc2VjdG9yX3QgYm1hcChzdHJ1Y3QgaW5vZGUgKiwgc2VjdG9yX3QpOworZXh0ZXJuIGludCBzZXRhdHRyX21hc2sodW5zaWduZWQgaW50KTsKK2V4dGVybiBpbnQgbm90aWZ5X2NoYW5nZShzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBpYXR0ciAqKTsKK2V4dGVybiBpbnQgcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKiwgaW50LCBzdHJ1Y3QgbmFtZWlkYXRhICopOworZXh0ZXJuIGludCBnZW5lcmljX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICosIGludCwKKwkJaW50ICgqY2hlY2tfYWNsKShzdHJ1Y3QgaW5vZGUgKiwgaW50KSk7CisKK2V4dGVybiBpbnQgZ2V0X3dyaXRlX2FjY2VzcyhzdHJ1Y3QgaW5vZGUgKik7CitleHRlcm4gaW50IGRlbnlfd3JpdGVfYWNjZXNzKHN0cnVjdCBmaWxlICopOworc3RhdGljIGlubGluZSB2b2lkIHB1dF93cml0ZV9hY2Nlc3Moc3RydWN0IGlub2RlICogaW5vZGUpCit7CisJYXRvbWljX2RlYygmaW5vZGUtPmlfd3JpdGVjb3VudCk7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgYWxsb3dfd3JpdGVfYWNjZXNzKHN0cnVjdCBmaWxlICpmaWxlKQoreworCWlmIChmaWxlKQorCQlhdG9taWNfaW5jKCZmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV93cml0ZWNvdW50KTsKK30KK2V4dGVybiBpbnQgZG9fcGlwZShpbnQgKik7CisKK2V4dGVybiBpbnQgb3Blbl9uYW1laShjb25zdCBjaGFyICosIGludCwgaW50LCBzdHJ1Y3QgbmFtZWlkYXRhICopOworZXh0ZXJuIGludCBtYXlfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICosIGludCwgaW50KTsKKworZXh0ZXJuIGludCBrZXJuZWxfcmVhZChzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBsb25nLCBjaGFyICosIHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuIHN0cnVjdCBmaWxlICogb3Blbl9leGVjKGNvbnN0IGNoYXIgKik7CisgCisvKiBmcy9kY2FjaGUuYyAtLSBnZW5lcmljIGZzIHN1cHBvcnQgZnVuY3Rpb25zICovCitleHRlcm4gaW50IGlzX3N1YmRpcihzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBkZW50cnkgKik7CitleHRlcm4gaW5vX3QgZmluZF9pbm9kZV9udW1iZXIoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgcXN0ciAqKTsKKworI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorCisvKiBuZWVkZWQgZm9yIHN0YWNrYWJsZSBmaWxlIHN5c3RlbSBzdXBwb3J0ICovCitleHRlcm4gbG9mZl90IGRlZmF1bHRfbGxzZWVrKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBpbnQgb3JpZ2luKTsKKworZXh0ZXJuIGxvZmZfdCB2ZnNfbGxzZWVrKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBpbnQgb3JpZ2luKTsKKworZXh0ZXJuIHZvaWQgaW5vZGVfaW5pdF9vbmNlKHN0cnVjdCBpbm9kZSAqKTsKK2V4dGVybiB2b2lkIGlwdXQoc3RydWN0IGlub2RlICopOworZXh0ZXJuIHN0cnVjdCBpbm9kZSAqIGlncmFiKHN0cnVjdCBpbm9kZSAqKTsKK2V4dGVybiBpbm9fdCBpdW5pcXVlKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBpbm9fdCk7CitleHRlcm4gaW50IGlub2RlX25lZWRzX3N5bmMoc3RydWN0IGlub2RlICppbm9kZSk7CitleHRlcm4gdm9pZCBnZW5lcmljX2RlbGV0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKKworZXh0ZXJuIHN0cnVjdCBpbm9kZSAqaWxvb2t1cDUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBoYXNodmFsLAorCQlpbnQgKCp0ZXN0KShzdHJ1Y3QgaW5vZGUgKiwgdm9pZCAqKSwgdm9pZCAqZGF0YSk7CitleHRlcm4gc3RydWN0IGlub2RlICppbG9va3VwKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vKTsKKworZXh0ZXJuIHN0cnVjdCBpbm9kZSAqIGlnZXQ1X2xvY2tlZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdW5zaWduZWQgbG9uZywgaW50ICgqdGVzdCkoc3RydWN0IGlub2RlICosIHZvaWQgKiksIGludCAoKnNldCkoc3RydWN0IGlub2RlICosIHZvaWQgKiksIHZvaWQgKik7CitleHRlcm4gc3RydWN0IGlub2RlICogaWdldF9sb2NrZWQoc3RydWN0IHN1cGVyX2Jsb2NrICosIHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuIHZvaWQgdW5sb2NrX25ld19pbm9kZShzdHJ1Y3QgaW5vZGUgKik7CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGlub2RlICppZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBpZ2V0X2xvY2tlZChzYiwgaW5vKTsKKwkKKwlpZiAoaW5vZGUgJiYgKGlub2RlLT5pX3N0YXRlICYgSV9ORVcpKSB7CisJCXNiLT5zX29wLT5yZWFkX2lub2RlKGlub2RlKTsKKwkJdW5sb2NrX25ld19pbm9kZShpbm9kZSk7CisJfQorCisJcmV0dXJuIGlub2RlOworfQorCitleHRlcm4gdm9pZCBfX2lnZXQoc3RydWN0IGlub2RlICogaW5vZGUpOworZXh0ZXJuIHZvaWQgY2xlYXJfaW5vZGUoc3RydWN0IGlub2RlICopOworZXh0ZXJuIHZvaWQgZGVzdHJveV9pbm9kZShzdHJ1Y3QgaW5vZGUgKik7CitleHRlcm4gc3RydWN0IGlub2RlICpuZXdfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICopOworZXh0ZXJuIGludCByZW1vdmVfc3VpZChzdHJ1Y3QgZGVudHJ5ICopOworZXh0ZXJuIHZvaWQgcmVtb3ZlX2RxdW90X3JlZihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgaW50LCBzdHJ1Y3QgbGlzdF9oZWFkICopOworZXh0ZXJuIHN0cnVjdCBzZW1hcGhvcmUgaXBydW5lX3NlbTsKKworZXh0ZXJuIHZvaWQgX19pbnNlcnRfaW5vZGVfaGFzaChzdHJ1Y3QgaW5vZGUgKiwgdW5zaWduZWQgbG9uZyBoYXNodmFsKTsKK2V4dGVybiB2b2lkIHJlbW92ZV9pbm9kZV9oYXNoKHN0cnVjdCBpbm9kZSAqKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbnNlcnRfaW5vZGVfaGFzaChzdHJ1Y3QgaW5vZGUgKmlub2RlKSB7CisJX19pbnNlcnRfaW5vZGVfaGFzaChpbm9kZSwgaW5vZGUtPmlfaW5vKTsKK30KKworZXh0ZXJuIHN0cnVjdCBmaWxlICogZ2V0X2VtcHR5X2ZpbHAodm9pZCk7CitleHRlcm4gdm9pZCBmaWxlX21vdmUoc3RydWN0IGZpbGUgKmYsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpOworZXh0ZXJuIHZvaWQgZmlsZV9raWxsKHN0cnVjdCBmaWxlICpmKTsKK3N0cnVjdCBiaW87CitleHRlcm4gdm9pZCBzdWJtaXRfYmlvKGludCwgc3RydWN0IGJpbyAqKTsKK2V4dGVybiBpbnQgYmRldl9yZWFkX29ubHkoc3RydWN0IGJsb2NrX2RldmljZSAqKTsKK2V4dGVybiBpbnQgc2V0X2Jsb2Nrc2l6ZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICosIGludCk7CitleHRlcm4gaW50IHNiX3NldF9ibG9ja3NpemUoc3RydWN0IHN1cGVyX2Jsb2NrICosIGludCk7CitleHRlcm4gaW50IHNiX21pbl9ibG9ja3NpemUoc3RydWN0IHN1cGVyX2Jsb2NrICosIGludCk7CisKK2V4dGVybiBpbnQgZ2VuZXJpY19maWxlX21tYXAoc3RydWN0IGZpbGUgKiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICopOworZXh0ZXJuIGludCBnZW5lcmljX2ZpbGVfcmVhZG9ubHlfbW1hcChzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7CitleHRlcm4gaW50IGZpbGVfcmVhZF9hY3RvcihyZWFkX2Rlc2NyaXB0b3JfdCAqIGRlc2MsIHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKTsKK2V4dGVybiBpbnQgZmlsZV9zZW5kX2FjdG9yKHJlYWRfZGVzY3JpcHRvcl90ICogZGVzYywgc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUpOworZXh0ZXJuIHNzaXplX3QgZ2VuZXJpY19maWxlX3JlYWQoc3RydWN0IGZpbGUgKiwgY2hhciBfX3VzZXIgKiwgc2l6ZV90LCBsb2ZmX3QgKik7CitpbnQgZ2VuZXJpY193cml0ZV9jaGVja3Moc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCAqcG9zLCBzaXplX3QgKmNvdW50LCBpbnQgaXNibGspOworZXh0ZXJuIHNzaXplX3QgZ2VuZXJpY19maWxlX3dyaXRlKHN0cnVjdCBmaWxlICosIGNvbnN0IGNoYXIgX191c2VyICosIHNpemVfdCwgbG9mZl90ICopOworZXh0ZXJuIHNzaXplX3QgZ2VuZXJpY19maWxlX2Fpb19yZWFkKHN0cnVjdCBraW9jYiAqLCBjaGFyIF9fdXNlciAqLCBzaXplX3QsIGxvZmZfdCk7CitleHRlcm4gc3NpemVfdCBfX2dlbmVyaWNfZmlsZV9haW9fcmVhZChzdHJ1Y3Qga2lvY2IgKiwgY29uc3Qgc3RydWN0IGlvdmVjICosIHVuc2lnbmVkIGxvbmcsIGxvZmZfdCAqKTsKK2V4dGVybiBzc2l6ZV90IGdlbmVyaWNfZmlsZV9haW9fd3JpdGUoc3RydWN0IGtpb2NiICosIGNvbnN0IGNoYXIgX191c2VyICosIHNpemVfdCwgbG9mZl90KTsKK2V4dGVybiBzc2l6ZV90IGdlbmVyaWNfZmlsZV9haW9fd3JpdGVfbm9sb2NrKHN0cnVjdCBraW9jYiAqLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKiwKKwkJdW5zaWduZWQgbG9uZywgbG9mZl90ICopOworZXh0ZXJuIHNzaXplX3QgZ2VuZXJpY19maWxlX2RpcmVjdF93cml0ZShzdHJ1Y3Qga2lvY2IgKiwgY29uc3Qgc3RydWN0IGlvdmVjICosCisJCXVuc2lnbmVkIGxvbmcgKiwgbG9mZl90LCBsb2ZmX3QgKiwgc2l6ZV90LCBzaXplX3QpOworZXh0ZXJuIHNzaXplX3QgZ2VuZXJpY19maWxlX2J1ZmZlcmVkX3dyaXRlKHN0cnVjdCBraW9jYiAqLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKiwKKwkJdW5zaWduZWQgbG9uZywgbG9mZl90LCBsb2ZmX3QgKiwgc2l6ZV90LCBzc2l6ZV90KTsKK2V4dGVybiBzc2l6ZV90IGRvX3N5bmNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGxlbiwgbG9mZl90ICpwcG9zKTsKK2V4dGVybiBzc2l6ZV90IGRvX3N5bmNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IGNoYXIgX191c2VyICpidWYsIHNpemVfdCBsZW4sIGxvZmZfdCAqcHBvcyk7Citzc2l6ZV90IGdlbmVyaWNfZmlsZV93cml0ZV9ub2xvY2soc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAorCQkJCXVuc2lnbmVkIGxvbmcgbnJfc2VncywgbG9mZl90ICpwcG9zKTsKK2V4dGVybiBzc2l6ZV90IGdlbmVyaWNfZmlsZV9zZW5kZmlsZShzdHJ1Y3QgZmlsZSAqLCBsb2ZmX3QgKiwgc2l6ZV90LCByZWFkX2FjdG9yX3QsIHZvaWQgKik7CitleHRlcm4gdm9pZCBkb19nZW5lcmljX21hcHBpbmdfcmVhZChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKKwkJCQkgICAgc3RydWN0IGZpbGVfcmFfc3RhdGUgKiwgc3RydWN0IGZpbGUgKiwKKwkJCQkgICAgbG9mZl90ICosIHJlYWRfZGVzY3JpcHRvcl90ICosIHJlYWRfYWN0b3JfdCk7CitleHRlcm4gdm9pZAorZmlsZV9yYV9zdGF0ZV9pbml0KHN0cnVjdCBmaWxlX3JhX3N0YXRlICpyYSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpOworZXh0ZXJuIHNzaXplX3QgZ2VuZXJpY19maWxlX2RpcmVjdF9JTyhpbnQgcncsIHN0cnVjdCBraW9jYiAqaW9jYiwKKwljb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwgbG9mZl90IG9mZnNldCwgdW5zaWduZWQgbG9uZyBucl9zZWdzKTsKK2V4dGVybiBzc2l6ZV90IGdlbmVyaWNfZmlsZV9yZWFkdihzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsIAorCXVuc2lnbmVkIGxvbmcgbnJfc2VncywgbG9mZl90ICpwcG9zKTsKK3NzaXplX3QgZ2VuZXJpY19maWxlX3dyaXRldihzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsIAorCQkJdW5zaWduZWQgbG9uZyBucl9zZWdzLCBsb2ZmX3QgKnBwb3MpOworZXh0ZXJuIGxvZmZfdCBub19sbHNlZWsoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGludCBvcmlnaW4pOworZXh0ZXJuIGxvZmZfdCBnZW5lcmljX2ZpbGVfbGxzZWVrKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBpbnQgb3JpZ2luKTsKK2V4dGVybiBsb2ZmX3QgcmVtb3RlX2xsc2VlayhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgaW50IG9yaWdpbik7CitleHRlcm4gaW50IGdlbmVyaWNfZmlsZV9vcGVuKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZpbHApOworZXh0ZXJuIGludCBub25zZWVrYWJsZV9vcGVuKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZpbHApOworCitzdGF0aWMgaW5saW5lIHZvaWQgZG9fZ2VuZXJpY19maWxlX3JlYWQoc3RydWN0IGZpbGUgKiBmaWxwLCBsb2ZmX3QgKnBwb3MsCisJCQkJCXJlYWRfZGVzY3JpcHRvcl90ICogZGVzYywKKwkJCQkJcmVhZF9hY3Rvcl90IGFjdG9yKQoreworCWRvX2dlbmVyaWNfbWFwcGluZ19yZWFkKGZpbHAtPmZfbWFwcGluZywKKwkJCQkmZmlscC0+Zl9yYSwKKwkJCQlmaWxwLAorCQkJCXBwb3MsCisJCQkJZGVzYywKKwkJCQlhY3Rvcik7Cit9CisKK3NzaXplX3QgX19ibG9ja2Rldl9kaXJlY3RfSU8oaW50IHJ3LCBzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsIGxvZmZfdCBvZmZzZXQsCisJdW5zaWduZWQgbG9uZyBucl9zZWdzLCBnZXRfYmxvY2tzX3QgZ2V0X2Jsb2NrcywgZGlvX2lvZG9uZV90IGVuZF9pbywKKwlpbnQgbG9ja190eXBlKTsKKworZW51bSB7CisJRElPX0xPQ0tJTkcgPSAxLCAvKiBuZWVkIGxvY2tpbmcgYmV0d2VlbiBidWZmZXJlZCBhbmQgZGlyZWN0IGFjY2VzcyAqLworCURJT19OT19MT0NLSU5HLCAgLyogYmRldjsgbm8gbG9ja2luZyBhdCBhbGwgYmV0d2VlbiBidWZmZXJlZC9kaXJlY3QgKi8KKwlESU9fT1dOX0xPQ0tJTkcsIC8qIGZpbGVzeXN0ZW0gbG9ja3MgYnVmZmVyZWQgYW5kIGRpcmVjdCBpbnRlcm5hbGx5ICovCit9OworCitzdGF0aWMgaW5saW5lIHNzaXplX3QgYmxvY2tkZXZfZGlyZWN0X0lPKGludCBydywgc3RydWN0IGtpb2NiICppb2NiLAorCXN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAorCWxvZmZfdCBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgbnJfc2VncywgZ2V0X2Jsb2Nrc190IGdldF9ibG9ja3MsCisJZGlvX2lvZG9uZV90IGVuZF9pbykKK3sKKwlyZXR1cm4gX19ibG9ja2Rldl9kaXJlY3RfSU8ocncsIGlvY2IsIGlub2RlLCBiZGV2LCBpb3YsIG9mZnNldCwKKwkJCQlucl9zZWdzLCBnZXRfYmxvY2tzLCBlbmRfaW8sIERJT19MT0NLSU5HKTsKK30KKworc3RhdGljIGlubGluZSBzc2l6ZV90IGJsb2NrZGV2X2RpcmVjdF9JT19ub19sb2NraW5nKGludCBydywgc3RydWN0IGtpb2NiICppb2NiLAorCXN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAorCWxvZmZfdCBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgbnJfc2VncywgZ2V0X2Jsb2Nrc190IGdldF9ibG9ja3MsCisJZGlvX2lvZG9uZV90IGVuZF9pbykKK3sKKwlyZXR1cm4gX19ibG9ja2Rldl9kaXJlY3RfSU8ocncsIGlvY2IsIGlub2RlLCBiZGV2LCBpb3YsIG9mZnNldCwKKwkJCQlucl9zZWdzLCBnZXRfYmxvY2tzLCBlbmRfaW8sIERJT19OT19MT0NLSU5HKTsKK30KKworc3RhdGljIGlubGluZSBzc2l6ZV90IGJsb2NrZGV2X2RpcmVjdF9JT19vd25fbG9ja2luZyhpbnQgcncsIHN0cnVjdCBraW9jYiAqaW9jYiwKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwlsb2ZmX3Qgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGdldF9ibG9ja3NfdCBnZXRfYmxvY2tzLAorCWRpb19pb2RvbmVfdCBlbmRfaW8pCit7CisJcmV0dXJuIF9fYmxvY2tkZXZfZGlyZWN0X0lPKHJ3LCBpb2NiLCBpbm9kZSwgYmRldiwgaW92LCBvZmZzZXQsCisJCQkJbnJfc2VncywgZ2V0X2Jsb2NrcywgZW5kX2lvLCBESU9fT1dOX0xPQ0tJTkcpOworfQorCitleHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBnZW5lcmljX3JvX2ZvcHM7CisKKyNkZWZpbmUgc3BlY2lhbF9maWxlKG0pIChTX0lTQ0hSKG0pfHxTX0lTQkxLKG0pfHxTX0lTRklGTyhtKXx8U19JU1NPQ0sobSkpCisKK2V4dGVybiBpbnQgdmZzX3JlYWRsaW5rKHN0cnVjdCBkZW50cnkgKiwgY2hhciBfX3VzZXIgKiwgaW50LCBjb25zdCBjaGFyICopOworZXh0ZXJuIGludCB2ZnNfZm9sbG93X2xpbmsoc3RydWN0IG5hbWVpZGF0YSAqLCBjb25zdCBjaGFyICopOworZXh0ZXJuIGludCBwYWdlX3JlYWRsaW5rKHN0cnVjdCBkZW50cnkgKiwgY2hhciBfX3VzZXIgKiwgaW50KTsKK2V4dGVybiBpbnQgcGFnZV9mb2xsb3dfbGlua19saWdodChzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBuYW1laWRhdGEgKik7CitleHRlcm4gdm9pZCBwYWdlX3B1dF9saW5rKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IG5hbWVpZGF0YSAqKTsKK2V4dGVybiBpbnQgcGFnZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKnN5bW5hbWUsIGludCBsZW4pOworZXh0ZXJuIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHBhZ2Vfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zOworZXh0ZXJuIGludCBnZW5lcmljX3JlYWRsaW5rKHN0cnVjdCBkZW50cnkgKiwgY2hhciBfX3VzZXIgKiwgaW50KTsKK2V4dGVybiB2b2lkIGdlbmVyaWNfZmlsbGF0dHIoc3RydWN0IGlub2RlICosIHN0cnVjdCBrc3RhdCAqKTsKK2V4dGVybiBpbnQgdmZzX2dldGF0dHIoc3RydWN0IHZmc21vdW50ICosIHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGtzdGF0ICopOwordm9pZCBpbm9kZV9hZGRfYnl0ZXMoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IGJ5dGVzKTsKK3ZvaWQgaW5vZGVfc3ViX2J5dGVzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBieXRlcyk7Citsb2ZmX3QgaW5vZGVfZ2V0X2J5dGVzKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwordm9pZCBpbm9kZV9zZXRfYnl0ZXMoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IGJ5dGVzKTsKKworZXh0ZXJuIGludCB2ZnNfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqLCBmaWxsZGlyX3QsIHZvaWQgKik7CisKK2V4dGVybiBpbnQgdmZzX3N0YXQoY2hhciBfX3VzZXIgKiwgc3RydWN0IGtzdGF0ICopOworZXh0ZXJuIGludCB2ZnNfbHN0YXQoY2hhciBfX3VzZXIgKiwgc3RydWN0IGtzdGF0ICopOworZXh0ZXJuIGludCB2ZnNfZnN0YXQodW5zaWduZWQgaW50LCBzdHJ1Y3Qga3N0YXQgKik7CisKK2V4dGVybiBpbnQgdmZzX2lvY3RsKHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTsKKworZXh0ZXJuIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICpnZXRfZnNfdHlwZShjb25zdCBjaGFyICpuYW1lKTsKK2V4dGVybiBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKmdldF9zdXBlcihzdHJ1Y3QgYmxvY2tfZGV2aWNlICopOworZXh0ZXJuIHN0cnVjdCBzdXBlcl9ibG9jayAqdXNlcl9nZXRfc3VwZXIoZGV2X3QpOworZXh0ZXJuIHZvaWQgZHJvcF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKKworZXh0ZXJuIGludCBkY2FjaGVfZGlyX29wZW4oc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopOworZXh0ZXJuIGludCBkY2FjaGVfZGlyX2Nsb3NlKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKK2V4dGVybiBsb2ZmX3QgZGNhY2hlX2Rpcl9sc2VlayhzdHJ1Y3QgZmlsZSAqLCBsb2ZmX3QsIGludCk7CitleHRlcm4gaW50IGRjYWNoZV9yZWFkZGlyKHN0cnVjdCBmaWxlICosIHZvaWQgKiwgZmlsbGRpcl90KTsKK2V4dGVybiBpbnQgc2ltcGxlX2dldGF0dHIoc3RydWN0IHZmc21vdW50ICosIHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGtzdGF0ICopOworZXh0ZXJuIGludCBzaW1wbGVfc3RhdGZzKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3Qga3N0YXRmcyAqKTsKK2V4dGVybiBpbnQgc2ltcGxlX2xpbmsoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqKTsKK2V4dGVybiBpbnQgc2ltcGxlX3VubGluayhzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqKTsKK2V4dGVybiBpbnQgc2ltcGxlX3JtZGlyKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICopOworZXh0ZXJuIGludCBzaW1wbGVfcmVuYW1lKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICopOworZXh0ZXJuIGludCBzaW1wbGVfc3luY19maWxlKHN0cnVjdCBmaWxlICosIHN0cnVjdCBkZW50cnkgKiwgaW50KTsKK2V4dGVybiBpbnQgc2ltcGxlX2VtcHR5KHN0cnVjdCBkZW50cnkgKik7CitleHRlcm4gaW50IHNpbXBsZV9yZWFkcGFnZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHBhZ2UgKnBhZ2UpOworZXh0ZXJuIGludCBzaW1wbGVfcHJlcGFyZV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQl1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIHRvKTsKK2V4dGVybiBpbnQgc2ltcGxlX2NvbW1pdF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkJdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCB0byk7CisKK2V4dGVybiBzdHJ1Y3QgZGVudHJ5ICpzaW1wbGVfbG9va3VwKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBuYW1laWRhdGEgKik7CitleHRlcm4gc3NpemVfdCBnZW5lcmljX3JlYWRfZGlyKHN0cnVjdCBmaWxlICosIGNoYXIgX191c2VyICosIHNpemVfdCwgbG9mZl90ICopOworZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2ltcGxlX2Rpcl9vcGVyYXRpb25zOworZXh0ZXJuIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHNpbXBsZV9kaXJfaW5vZGVfb3BlcmF0aW9uczsKK3N0cnVjdCB0cmVlX2Rlc2NyIHsgY2hhciAqbmFtZTsgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqb3BzOyBpbnQgbW9kZTsgfTsKK3N0cnVjdCBkZW50cnkgKmRfYWxsb2NfbmFtZShzdHJ1Y3QgZGVudHJ5ICosIGNvbnN0IGNoYXIgKik7CitleHRlcm4gaW50IHNpbXBsZV9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBpbnQsIHN0cnVjdCB0cmVlX2Rlc2NyICopOworZXh0ZXJuIGludCBzaW1wbGVfcGluX2ZzKGNoYXIgKm5hbWUsIHN0cnVjdCB2ZnNtb3VudCAqKm1vdW50LCBpbnQgKmNvdW50KTsKK2V4dGVybiB2b2lkIHNpbXBsZV9yZWxlYXNlX2ZzKHN0cnVjdCB2ZnNtb3VudCAqKm1vdW50LCBpbnQgKmNvdW50KTsKKworZXh0ZXJuIHNzaXplX3Qgc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodm9pZCBfX3VzZXIgKiwgc2l6ZV90LCBsb2ZmX3QgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOworCitleHRlcm4gaW50IGlub2RlX2NoYW5nZV9vayhzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGlhdHRyICopOworZXh0ZXJuIGludCBfX211c3RfY2hlY2sgaW5vZGVfc2V0YXR0cihzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGlhdHRyICopOworCitleHRlcm4gdm9pZCBpbm9kZV91cGRhdGVfdGltZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgY3RpbWVfdG9vKTsKKworc3RhdGljIGlubGluZSBpbm9fdCBwYXJlbnRfaW5vKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwlpbm9fdCByZXM7CisKKwlzcGluX2xvY2soJmRlbnRyeS0+ZF9sb2NrKTsKKwlyZXMgPSBkZW50cnktPmRfcGFyZW50LT5kX2lub2RlLT5pX2lubzsKKwlzcGluX3VubG9jaygmZGVudHJ5LT5kX2xvY2spOworCXJldHVybiByZXM7Cit9CisKKy8qIGtlcm5lbC9mb3JrLmMgKi8KK2V4dGVybiBpbnQgdW5zaGFyZV9maWxlcyh2b2lkKTsKKworLyogVHJhbnNhY3Rpb24gYmFzZWQgSU8gaGVscGVycyAqLworCisvKgorICogQW4gYXJncmVzcCBpcyBzdG9yZWQgaW4gYW4gYWxsb2NhdGVkIHBhZ2UgYW5kIGhvbGRzIHRoZQorICogc2l6ZSBvZiB0aGUgYXJndW1lbnQgb3IgcmVzcG9uc2UsIGFsb25nIHdpdGggaXRzIGNvbnRlbnQKKyAqLworc3RydWN0IHNpbXBsZV90cmFuc2FjdGlvbl9hcmdyZXNwIHsKKwlzc2l6ZV90IHNpemU7CisJY2hhciBkYXRhWzBdOworfTsKKworI2RlZmluZSBTSU1QTEVfVFJBTlNBQ1RJT05fTElNSVQgKFBBR0VfU0laRSAtIHNpemVvZihzdHJ1Y3Qgc2ltcGxlX3RyYW5zYWN0aW9uX2FyZ3Jlc3ApKQorCitjaGFyICpzaW1wbGVfdHJhbnNhY3Rpb25fZ2V0KHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAorCQkJCXNpemVfdCBzaXplKTsKK3NzaXplX3Qgc2ltcGxlX3RyYW5zYWN0aW9uX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCisJCQkJc2l6ZV90IHNpemUsIGxvZmZfdCAqcG9zKTsKK2ludCBzaW1wbGVfdHJhbnNhY3Rpb25fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzaW1wbGVfdHJhbnNhY3Rpb25fc2V0KHN0cnVjdCBmaWxlICpmaWxlLCBzaXplX3QgbikKK3sKKwlzdHJ1Y3Qgc2ltcGxlX3RyYW5zYWN0aW9uX2FyZ3Jlc3AgKmFyID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJQlVHX09OKG4gPiBTSU1QTEVfVFJBTlNBQ1RJT05fTElNSVQpOworCisJLyoKKwkgKiBUaGUgYmFycmllciBlbnN1cmVzIHRoYXQgYXItPnNpemUgd2lsbCByZWFsbHkgcmVtYWluIHplcm8gdW50aWwKKwkgKiBhci0+ZGF0YSBpcyByZWFkeSBmb3IgcmVhZGluZy4KKwkgKi8KKwlzbXBfbWIoKTsKKwlhci0+c2l6ZSA9IG47Cit9CisKKyNpZmRlZiBDT05GSUdfU0VDVVJJVFkKK3N0YXRpYyBpbmxpbmUgY2hhciAqYWxsb2Nfc2VjZGF0YSh2b2lkKQoreworCXJldHVybiAoY2hhciAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZyZWVfc2VjZGF0YSh2b2lkICpzZWNkYXRhKQoreworCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzZWNkYXRhKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIGNoYXIgKmFsbG9jX3NlY2RhdGEodm9pZCkKK3sKKwlyZXR1cm4gKGNoYXIgKikxOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9zZWNkYXRhKHZvaWQgKnNlY2RhdGEpCit7IH0KKyNlbmRpZgkvKiBDT05GSUdfU0VDVVJJVFkgKi8KKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAvKiBfTElOVVhfRlNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mc19zdHJ1Y3QuaCBiL2luY2x1ZGUvbGludXgvZnNfc3RydWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYyM2QxMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvZnNfc3RydWN0LmgKQEAgLTAsMCArMSwyOCBAQAorI2lmbmRlZiBfTElOVVhfRlNfU1RSVUNUX0gKKyNkZWZpbmUgX0xJTlVYX0ZTX1NUUlVDVF9ICisKK3N0cnVjdCBkZW50cnk7CitzdHJ1Y3QgdmZzbW91bnQ7CisKK3N0cnVjdCBmc19zdHJ1Y3QgeworCWF0b21pY190IGNvdW50OworCXJ3bG9ja190IGxvY2s7CisJaW50IHVtYXNrOworCXN0cnVjdCBkZW50cnkgKiByb290LCAqIHB3ZCwgKiBhbHRyb290OworCXN0cnVjdCB2ZnNtb3VudCAqIHJvb3RtbnQsICogcHdkbW50LCAqIGFsdHJvb3RtbnQ7Cit9OworCisjZGVmaW5lIElOSVRfRlMgewkJCQlcCisJLmNvdW50CQk9IEFUT01JQ19JTklUKDEpLAlcCisJLmxvY2sJCT0gUldfTE9DS19VTkxPQ0tFRCwJXAorCS51bWFzawkJPSAwMDIyLCBcCit9CisKK2V4dGVybiB2b2lkIGV4aXRfZnMoc3RydWN0IHRhc2tfc3RydWN0ICopOworZXh0ZXJuIHZvaWQgc2V0X2ZzX2FsdHJvb3Qodm9pZCk7CitleHRlcm4gdm9pZCBzZXRfZnNfcm9vdChzdHJ1Y3QgZnNfc3RydWN0ICosIHN0cnVjdCB2ZnNtb3VudCAqLCBzdHJ1Y3QgZGVudHJ5ICopOworZXh0ZXJuIHZvaWQgc2V0X2ZzX3B3ZChzdHJ1Y3QgZnNfc3RydWN0ICosIHN0cnVjdCB2ZnNtb3VudCAqLCBzdHJ1Y3QgZGVudHJ5ICopOworZXh0ZXJuIHN0cnVjdCBmc19zdHJ1Y3QgKmNvcHlfZnNfc3RydWN0KHN0cnVjdCBmc19zdHJ1Y3QgKik7CitleHRlcm4gdm9pZCBwdXRfZnNfc3RydWN0KHN0cnVjdCBmc19zdHJ1Y3QgKik7CisKKyNlbmRpZiAvKiBfTElOVVhfRlNfU1RSVUNUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnNsX2RldmljZXMuaCBiL2luY2x1ZGUvbGludXgvZnNsX2RldmljZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWFmZjRjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9mc2xfZGV2aWNlcy5oCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBpbmNsdWRlL2xpbnV4L2ZzbF9kZXZpY2VzLmgKKyAqCisgKiBEZWZpbml0aW9ucyBmb3IgYW55IHBsYXRmb3JtIGRldmljZSByZWxhdGVkIGZsYWdzIG9yIHN0cnVjdHVyZXMgZm9yCisgKiBGcmVlc2NhbGUgcHJvY2Vzc29yIGRldmljZXMKKyAqCisgKiBNYWludGFpbmVyOiBLdW1hciBHYWxhIChrdW1hci5nYWxhQGZyZWVzY2FsZS5jb20pCisgKgorICogQ29weXJpZ2h0IDIwMDQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmZGVmIF9fS0VSTkVMX18KKyNpZm5kZWYgX0ZTTF9ERVZJQ0VfSF8KKyNkZWZpbmUgX0ZTTF9ERVZJQ0VfSF8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qCisgKiBTb21lIGNvbnZlbnRpb25zIG9uIGhvdyB3ZSBoYW5kbGUgcGVyaXBoZXJhbHMgb24gRnJlZXNjYWxlIGNoaXBzCisgKgorICogdW5pcXVlIGRldmljZTogYSBwbGF0Zm9ybV9kZXZpY2UgZW50cnkgaW4gZnNsX3BsYXRfZGV2c1tdIHBsdXMKKyAqIGFzc29jaWF0ZWQgZGV2aWNlIGluZm9ybWF0aW9uIGluIGl0cyBwbGF0Zm9ybV9kYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBBIGNoaXAgaXMgZGVzY3JpYmVkIGJ5IGEgc2V0IG9mIHVuaXF1ZSBkZXZpY2VzLgorICoKKyAqIEVhY2ggc3ViLWFyY2ggaGFzIGl0cyBvd24gbWFzdGVyIGxpc3Qgb2YgdW5pcXVlIGRldmljZXMgYW5kCisgKiBlbnVtZXJhdGVzIHRoZW0gYnkgZW51bSBmc2xfZGV2aWNlcyBpbiBhIHN1Yi1hcmNoIHNwZWNpZmljIGhlYWRlcgorICoKKyAqIFRoZSBwbGF0Zm9ybSBkYXRhIHN0cnVjdHVyZSBpcyBicm9rZW4gaW50byB0d28gcGFydHMuICBUaGUKKyAqIGZpcnN0IGlzIGRldmljZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiB0aGF0IGhlbHAgaWRlbnRpZnkgYW55CisgKiB1bmlxdWUgZmVhdHVyZXMgb2YgYSBwZXJpcGhlcmFsLiAgVGhlIHNlY29uZCBpcyBhbnkKKyAqIGluZm9ybWF0aW9uIHRoYXQgbWF5IGJlIGRlZmluZWQgYnkgdGhlIGJvYXJkIG9yIGhvdyB0aGUgZGV2aWNlCisgKiBpcyBjb25uZWN0ZWQgZXh0ZXJuYWxseSBvZiB0aGUgY2hpcC4KKyAqCisgKiBuYW1pbmcgY29udmVudGlvbnM6CisgKiAtIHBsYXRmb3JtIGRhdGEgc3RydWN0dXJlczogPGRyaXZlcj5fcGxhdGZvcm1fZGF0YQorICogLSBwbGF0Zm9ybSBkYXRhIGRldmljZSBmbGFnczogRlNMXzxkcml2ZXI+X0RFVl88RkxBRz4KKyAqIC0gcGxhdGZvcm0gZGF0YSBib2FyZCBmbGFnczogRlNMXzxkcml2ZXI+X0JSRF88RkxBRz4KKyAqCisgKi8KKworc3RydWN0IGdpYW5mYXJfcGxhdGZvcm1fZGF0YSB7CisJLyogZGV2aWNlIHNwZWNpZmljIGluZm9ybWF0aW9uICovCisJdTMyIGRldmljZV9mbGFnczsKKwl1MzIgcGh5X3JlZ19hZGRyOworCisJLyogYm9hcmQgc3BlY2lmaWMgaW5mb3JtYXRpb24gKi8KKwl1MzIgYm9hcmRfZmxhZ3M7CisJdTMyIHBoeWlkOworCXUzMiBpbnRlcnJ1cHRQSFk7CisJdTggbWFjX2FkZHJbNl07Cit9OworCisvKiBGbGFncyByZWxhdGVkIHRvIGdpYW5mYXIgZGV2aWNlIGZlYXR1cmVzICovCisjZGVmaW5lIEZTTF9HSUFORkFSX0RFVl9IQVNfR0lHQUJJVAkJMHgwMDAwMDAwMQorI2RlZmluZSBGU0xfR0lBTkZBUl9ERVZfSEFTX0NPQUxFU0NFCQkweDAwMDAwMDAyCisjZGVmaW5lIEZTTF9HSUFORkFSX0RFVl9IQVNfUk1PTgkJMHgwMDAwMDAwNAorI2RlZmluZSBGU0xfR0lBTkZBUl9ERVZfSEFTX01VTFRJX0lOVFIJCTB4MDAwMDAwMDgKKworLyogRmxhZ3MgaW4gZ2lhbmZhcl9wbGF0Zm9ybV9kYXRhICovCisjZGVmaW5lIEZTTF9HSUFORkFSX0JSRF9IQVNfUEhZX0lOVFIJMHgwMDAwMDAwMQkvKiBpZiBub3Qgc2V0IHVzZSBhIHRpbWVyICovCisKK3N0cnVjdCBmc2xfaTJjX3BsYXRmb3JtX2RhdGEgeworCS8qIGRldmljZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiAqLworCXUzMiBkZXZpY2VfZmxhZ3M7Cit9OworCisvKiBGbGFncyByZWxhdGVkIHRvIEkyQyBkZXZpY2UgZmVhdHVyZXMgKi8KKyNkZWZpbmUgRlNMX0kyQ19ERVZfU0VQQVJBVEVfREZTUlIJMHgwMDAwMDAwMQorI2RlZmluZSBGU0xfSTJDX0RFVl9DTE9DS181MjAwCQkweDAwMDAwMDAyCisKKyNlbmRpZgkJCQkvKiBfRlNMX0RFVklDRV9IXyAqLworI2VuZGlmCQkJCS8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnRhcGUtaGVhZGVyLXNlZ21lbnQuaCBiL2luY2x1ZGUvbGludXgvZnRhcGUtaGVhZGVyLXNlZ21lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzMyMjE4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9mdGFwZS1oZWFkZXItc2VnbWVudC5oCkBAIC0wLDAgKzEsMTIyIEBACisjaWZuZGVmIF9GVEFQRV9IRUFERVJfU0VHTUVOVF9ICisjZGVmaW5lIF9GVEFQRV9IRUFERVJfU0VHTUVOVF9ICisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMTk5NyBDbGF1cy1KdXN0dXMgSGVpbmUuCisKKyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorIGFueSBsYXRlciB2ZXJzaW9uLgorCisgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisgKgorICogJFNvdXJjZTogL2hvbWVzL2N2cy9mdGFwZS1zdGFja2VkL2luY2x1ZGUvbGludXgvZnRhcGUtaGVhZGVyLXNlZ21lbnQuaCx2ICQKKyAqICRSZXZpc2lvbjogMS4yICQKKyAqICREYXRlOiAxOTk3LzEwLzA1IDE5OjE5OjI4ICQKKyAqCisgKiAgICAgIFRoaXMgZmlsZSBkZWZpbmVzIHNvbWUgb2Zmc2V0cyBpbnRvIHRoZSBoZWFkZXIgc2VnbWVudCBvZiBhCisgKiAgICAgIGZsb3BweSB0YXBlIGNhcnRyaWRnZS4gIEZvciB1c2Ugd2l0aCB0aGUgUUlDLTQwLzgwLzMwMTAvMzAyMAorICogICAgICBmbG9wcHktdGFwZSBkcml2ZXIgImZ0YXBlIiBmb3IgTGludXguCisgKi8KKworI2RlZmluZSBGVF9TSUdOQVRVUkUgICAwICAvKiBtdXN0IGJlIDB4YWE1NWFhNTUgKi8KKyNkZWZpbmUgRlRfRk1UX0NPREUgICAgNAorI2RlZmluZSBGVF9SRVZfTEVWRUwgICA1ICAvKiBvbmx5IGZvciBRSUMtODAgc2luY2UuIFJldi4gTCAoPT0gMHgwYykgICAgICAgICAqLworI2RlZmluZSBGVF9IU0VHXzEgICAgICA2ICAvKiBmaXJzdCBoZWFkZXIgc2VnbWVudCwgZXhjZXB0IGZvciBmb3JtYXQgY29kZSAgNiAqLworI2RlZmluZSBGVF9IU0VHXzIgICAgICA4ICAvKiBzZWNvbmQgaGVhZGVyIHNlZ21lbnQsIGV4Y2VwdCBmb3IgZm9ybWF0IGNvZGUgNiAqLworI2RlZmluZSBGVF9GUlNUX1NFRyAgIDEwICAvKiBmaXJzdCBkYXRhIHNlZ21lbnQsIGV4Y2VwdCBmb3IgZm9ybWF0IGNvZGUgNiAgICAqLworI2RlZmluZSBGVF9MQVNUX1NFRyAgIDEyICAvKiBsYXN0IGRhdGEgc2VnbWVudCwgZXhjZXB0IGZvciBmb3JtYXQgY29kZSA2ICAgICAqLworI2RlZmluZSBGVF9GTVRfREFURSAgIDE0ICAvKiBkYXRlIGFuZCB0aW1lIG9mIG1vc3QgcmVjZW50IGZvcm1hdCwgc2VlIGJlbG93ICAqLworI2RlZmluZSBGVF9XUl9EQVRFICAgIDE4ICAvKiBkYXRlIGFuZCB0aW1lIG9mIG1vc3QgcmVjZW50IHdyaXRlIG9yIGZvcm1hdCAgICAqLworI2RlZmluZSBGVF9TUFQgICAgICAgIDI0ICAvKiBzZWdtZW50cyBwZXIgdHJhY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGVF9UUEMgICAgICAgIDI2ICAvKiB0cmFja3MgcGVyIGNhcnRyaWRnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGVF9GSE0gICAgICAgIDI3ICAvKiBmbG9wcHkgZHJpdmUgaGVhZCAobWF4aW11bSBvZiBpdCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBGVF9GVE0gICAgICAgIDI4ICAvKiBmbG9wcHkgdHJhY2sgbWF4LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGVF9GU00gICAgICAgIDI5ICAvKiBmbG9wcHkgc2VjdG9yIG1heC4gKDEyOCkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGVF9MQUJFTCAgICAgIDMwICAvKiBmbG9wcHkgdGFwZSBsYWJlbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGVF9MQUJFTF9EQVRFIDc0ICAvKiBkYXRlIGFuZCB0aW1lIHRoZSB0YXBlIGxhYmVsIHdhcyB3cml0dGVuICAgICAgICAqLworI2RlZmluZSBGVF9MQUJFTF9TWiAgIChGVF9MQUJFTF9EQVRFIC0gRlRfTEFCRUwpCisjZGVmaW5lIEZUX0NNQVBfU1RBUlQgNzggIC8qIHN0YXJ0aW5nIHNlZ21lbnQgb2YgY29tcHJlc3Npb24gbWFwICAgICAgICAgICAgICovCisjZGVmaW5lIEZUX0ZNVF9FUlJPUiAxMjggIC8qIG11c3QgYmUgc2V0IHRvIDB4ZmYgaWYgcmVtYWluZGVyIGdldHMgbG9zdCBkdXJpbmcKKwkJCSAgICogdGFwZSBmb3JtYXQKKwkJCSAgICovCisjZGVmaW5lIEZUX1NFR19DTlQgICAxMzAgIC8qIG51bWJlciBvZiBzZWcuIHdyaXR0ZW4sIGZvcm1hdHRlZCBvciB2ZXJpZmllZAorCQkJICAgKiB0aHJvdWdoIGxpZmV0aW1lIG9mIHRhcGUgKHdoeSBub3QgcmVhZD8pCisJCQkgICAqLworI2RlZmluZSBGVF9JTklUX0RBVEUgMTM4ICAvKiBkYXRlIGFuZCB0aW1lIG9mIGluaXRpYWwgdGFwZSBmb3JtYXQgICAgKi8KKyNkZWZpbmUgRlRfRk1UX0NOVCAgIDE0MiAgLyogbnVtYmVyIG9mIHRpbWVzIHRhcGUgaGFzIGJlZW4gZm9ybWF0dGVkICovCisjZGVmaW5lIEZUX0ZTTF9DTlQgICAxNDQgIC8qIG51bWJlciBvZiBzZWdtZW50cyBpbiBmYWlsZWQgc2VjdG9yIGxvZyAqLworI2RlZmluZSBGVF9NS19DT0RFICAgMTQ2ICAvKiBpZCBzdHJpbmcgb2YgdGFwZSBtYW51ZmFjdHVyZXIgICAgICAgICAgKi8KKyNkZWZpbmUgRlRfTE9UX0NPREUgIDE5MCAgLyogdGFwZSBtYW51ZmFjdHVyZXIgbG90IGNvZGUgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUXzZfSFNFR18xICAyMzQgIC8qIGZpcnN0IGhlYWRlciBzZWdtZW50IGZvciBmb3JtYXQgY29kZSAgNiAqLworI2RlZmluZSBGVF82X0hTRUdfMiAgMjM4ICAvKiBzZWNvbmQgaGVhZGVyIHNlZ21lbnQgZm9yIGZvcm1hdCBjb2RlIDYgKi8KKyNkZWZpbmUgRlRfNl9GUlNUX1NFRyAyNDIgLyogZmlyc3QgZGF0YSBzZWdtZW50IGZvciBmb3JtYXQgY29kZSA2ICAgICovCisjZGVmaW5lIEZUXzZfTEFTVF9TRUcgMjQ2IC8qIGxhc3QgZGF0YSBzZWdtZW50IGZvciBmb3JtYXQgY29kZSA2ICAgICAqLworCisjZGVmaW5lIEZUX0ZTTCAgICAgICAgMjU2CisjZGVmaW5lIEZUX0hFQURFUl9FTkQgMjU2IC8qIHNwYWNlIGJleW9uZCB0aGlzIHBvaW50OgorCQkJICAgKiBmb3JtYXQgY29kZXMgMiwgMyBhbmQgNTogCisJCQkgICAqIC0gIGZhaWxlZCBzZWN0b3IgbG9nIHVudGlsIGJ5dGUgMjA0NworCQkJICAgKiAtICBiYWQgc2VjdG9yIG1hcCBpbiB0aGUgcmVhbWluaW5nIHBhcnQgb2Ygc2VnbWVudAorCQkJICAgKiBmb3JtYXQgY29kZXMgNCBhbmQgNjoKKwkJCSAgICogLSAgYmFkIHNlY3RvciBtYXAgIHN0YXJ0cyBoZWFyCisJCQkgICAqLworCisKKy8qICB2YWx1ZSB0byBiZSBzdG9yZWQgYXQgdGhlIEZUX1NJR05BVFVSRSBvZmZzZXQgCisgKi8KKyNkZWZpbmUgRlRfSFNFR19NQUdJQyAweGFhNTVhYTU1CisjZGVmaW5lIEZUX0QyR19NQUdJQyAgMHg4MjI4ODIyOCAvKiBEaXR0byAyR0IgKi8KKworLyogZGF0YSBhbmQgdGltZSBlbmNvZGluZzogKi8KKyNkZWZpbmUgRlRfWUVBUl9TSElGVCAyNQorI2RlZmluZSBGVF9ZRUFSX01BU0sgIDB4ZmUwMDAwMDAKKyNkZWZpbmUgRlRfWUVBUl8wICAgICAxOTcwCisjZGVmaW5lIEZUX1lFQVJfTUFYICAgMTI3CisjZGVmaW5lIEZUX1lFQVIoeWVhcikgKCgoKHllYXIpLUZUX1lFQVJfMCk8PEZUX1lFQVJfU0hJRlQpJkZUX1lFQVJfTUFTSykKKworI2RlZmluZSBGVF9USU1FX1NISUZUICAgMAorI2RlZmluZSBGVF9USU1FX01BU0sgICAgMHgwMUZGRkZGRgorI2RlZmluZSBGVF9USU1FX01BWCAgICAgMHgwMWVhNmRmZiAvKiBsYXN0IHNlY29uZCBvZiBhIHllYXIgKi8KKyNkZWZpbmUgRlRfVElNRShtbyxkLGgsbSxzKSBcCisJKCgoKHMpKzYwKigobSkrNjAqKChoKSsyNCooKGQpKzMxKihtbykpKSkpICYgRlRfVElNRV9NQVNLKSkKKworI2RlZmluZSBGVF9USU1FX1NUQU1QKHksbW8sZCxoLG0scykgKEZUX1lFQVIoeSkgfCBGVF9USU1FKG1vLGQsaCxtLHMpKQorCisvKiB2YWx1ZXMgZm9yIHRoZSBmb3JtYXQgY29kZSBmaWVsZCAqLwordHlwZWRlZiBlbnVtIHsKKwlmbXRfbm9ybWFsID0gMiwgLyogIFFJQy04MCBwb3N0IFJldi4gQiAyMDVGdCBvciAzMDdGdCB0YXBlICAgICovCisJZm10XzExMDBmdCA9IDMsIC8qICBRSUMtODAgcG9zdCBSZXYuIEIgMTEwMEZ0IHRhcGUgICAgICAgICAgICAqLworCWZtdF92YXIgICAgPSA0LCAvKiAgUUlDLTgwIHBvc3QgUmV2LiBCIHZhcmlhYmVsIGxlbmd0aCBmb3JtYXQgKi8KKwlmbXRfNDI1ZnQgID0gNSwgLyogIFFJQy04MCBwb3N0IFJldi4gQiA0MjVGdCB0YXBlICAgICAgICAgICAgICovCisJZm10X2JpZyAgICA9IDYgIC8qICBRSUMtMzAxMC8zMDIwIHZhcmlhYmxlIGxlbmd0aCB0YXBlIHdpdGggbW9yZSAKKwkJCSAqICB0aGFuIDJeMTYgc2VnbWVudHMgcGVyIHRhcGUKKwkJCSAqLworfSBmdF9mb3JtYXRfdHlwZTsKKworLyogZGVmaW5pdGlvbnMgZm9yIHRoZSBmYWlsZWQgc2VjdG9yIGxvZyAqLworI2RlZmluZSBGVF9GU0xfU0laRSAgICAgICAgKDIgKiBGVF9TRUNUT1JfU0laRSAtIEZUX0hFQURFUl9FTkQpCisjZGVmaW5lIEZUX0ZTTF9NQVhfRU5UUklFUyAoRlRfRlNMX1NJWkUvc2l6ZW9mKF9fdTMyKSkKKwordHlwZWRlZiBzdHJ1Y3QgZnRfZnNsX2VudHJ5IHsKKwlfX3UxNiBzZWdtZW50OworCV9fdTE2IGRhdGU7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBmdF9mc2xfZW50cnk7CisKKworLyogIGRhdGUgZW5jb2RpbmcgZm9yIHRoZSBmYWlsZWQgc2VjdG9yIGxvZyAKKyAqICBtb250aDogMS4uMTIsIGRheTogMS4uMzEsIHllYXI6IDE5NzAuLjIwOTcKKyAqLworI2RlZmluZSBGVF9GU0xfVElNRV9TVEFNUCh5LG0sZCkgXAorCSgoKCgoeSkgLSBGVF9ZRUFSXzApPDw5KSYweGZlMDApIHwgKCgobSk8PDUpJjB4MDFlMCkgfCAoKGQpJjB4MDAxZikpCisKKyNlbmRpZiAvKiBfRlRBUEVfSEVBREVSX1NFR01FTlRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mdGFwZS12ZW5kb3JzLmggYi9pbmNsdWRlL2xpbnV4L2Z0YXBlLXZlbmRvcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzFhODFmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9mdGFwZS12ZW5kb3JzLmgKQEAgLTAsMCArMSwxMzcgQEAKKyNpZm5kZWYgX0ZUQVBFX1ZFTkRPUlNfSAorI2RlZmluZSBfRlRBUEVfVkVORE9SU19ICisKKy8qCisgKiAgICAgIENvcHlyaWdodCAoQykgMTk5My0xOTk2IEJhcyBMYWFyaG92ZW4sCisgKiAgICAgICAgICAgICAgICAoQykgMTk5Ni0xOTk3IENsYXVzLUp1c3R1cyBIZWluZS4KKworIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgYW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyAqCisgKiAkU291cmNlOiAvaG9tZXMvY3ZzL2Z0YXBlLXN0YWNrZWQvaW5jbHVkZS9saW51eC9mdGFwZS12ZW5kb3JzLmgsdiAkCisgKiAkUmV2aXNpb246IDEuNiAkCisgKiAkRGF0ZTogMTk5Ny8xMC8wOSAxNTozODoxMSAkCisgKgorICogICAgICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHN1cHBvcnRlZCBkcml2ZSB0eXBlcyB3aXRoIHRoZWlyCisgKiAgICAgIFFJQy0xMTcgc3BlYy4gdmVuZG9yIGNvZGUgYW5kIGRyaXZlIGRlcGVuZGVudCBjb25maWd1cmF0aW9uCisgKiAgICAgIGluZm9ybWF0aW9uLgorICovCisKK3R5cGVkZWYgZW51bSB7CisJdW5rbm93bl93YWtlX3VwID0gMCwKKwlub193YWtlX3VwLAorCXdha2VfdXBfY29sb3JhZG8sCisJd2FrZV91cF9tb3VudGFpbiwKKwl3YWtlX3VwX2luc2lnaHQsCit9IHdha2VfdXBfdHlwZXM7CisKK3R5cGVkZWYgc3RydWN0IHsKKwl3YWtlX3VwX3R5cGVzIHdha2VfdXA7CS8qIHNlZSB3YWtlX3VwX3R5cGVzICovCisJY2hhciAqbmFtZTsJCS8qIFRleHQgZGVzY3JpYmluZyB0aGUgZHJpdmUgKi8KK30gd2FrZXVwX21ldGhvZDsKKworLyogIE5vdGU6IG9yZGVyIG9mIGVudHJpZXMgaW4gV0FLRVVQX01FVEhPRFMgbXVzdCBiZSBzbyB0aGF0IGEgdmFyaWFibGUKKyAqICAgICAgICBvZiB0eXBlIHdha2VfdXBfdHlwZXMgY2FuIGJlIHVzZWQgYXMgYW4gaW5kZXggaW4gdGhlIGFycmF5LgorICovCisjZGVmaW5lIFdBS0VVUF9NRVRIT0RTIHsgXAorICB7IHVua25vd25fd2FrZV91cCwgICAgIlVua25vd24iIH0sIFwKKyAgeyBub193YWtlX3VwLCAgICAgICAgICJOb25lIiB9LCBcCisgIHsgd2FrZV91cF9jb2xvcmFkbywgICAiQ29sb3JhZG8iIH0sIFwKKyAgeyB3YWtlX3VwX21vdW50YWluLCAgICJNb3VudGFpbiIgfSwgXAorICB7IHdha2VfdXBfaW5zaWdodCwgICAgIk1vdG9yLW9uIiB9LCBcCit9CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQgdmVuZG9yX2lkOwkvKiB2ZW5kb3IgaWQgZnJvbSBkcml2ZSAqLworCWludCBzcGVlZDsJCS8qIG1heGltdW0gdGFwZSB0cmFuc3BvcnQgc3BlZWQgKGlwcykgKi8KKwl3YWtlX3VwX3R5cGVzIHdha2VfdXA7CS8qIHNlZSB3YWtlX3VwX3R5cGVzICovCisJY2hhciAqbmFtZTsJCS8qIFRleHQgZGVzY3JpYmluZyB0aGUgZHJpdmUgKi8KK30gdmVuZG9yX3N0cnVjdDsKKworI2RlZmluZSBVTktOT1dOX1ZFTkRPUiAoLTEpCisKKyNkZWZpbmUgUUlDMTE3X1ZFTkRPUlMgewkJCQkJCSAgICBcCisvKiBzZWUgX3ZlbmRvcl9zdHJ1Y3QgKi8JCQkJCQkgICAgXAorICB7IDB4MDAwMDAsICA4Miwgd2FrZV91cF9jb2xvcmFkbywgICJDb2xvcmFkbyBESi0xMCAob2xkKSIgfSwJCSAgICBcCisgIHsgMHgwMDA0NywgIDkwLCB3YWtlX3VwX2NvbG9yYWRvLCAgIkNvbG9yYWRvIERKLTEwL0RKLTIwIiB9LAkJICAgIFwKKyAgeyAweDAxMWMyLCAgODQsIHdha2VfdXBfY29sb3JhZG8sICAiQ29sb3JhZG8gNzAwIiB9LAkJCSAgICBcCisgIHsgMHgwMTFjMywgIDkwLCB3YWtlX3VwX2NvbG9yYWRvLCAgIkNvbG9yYWRvIDE0MDAiIH0sCQkJICAgIFwKKyAgeyAweDAxMWM0LCAgODQsIHdha2VfdXBfY29sb3JhZG8sICAiQ29sb3JhZG8gREotMTAvREotMjAgKG5ldykiIH0sCSAgICBcCisgIHsgMHgwMTFjNSwgIDg0LCB3YWtlX3VwX2NvbG9yYWRvLCAgIkhQIENvbG9yYWRvIFQxMDAwIiB9LAkJICAgIFwKKyAgeyAweDAxMWM2LCAgOTAsIHdha2VfdXBfY29sb3JhZG8sICAiSFAgQ29sb3JhZG8gVDMwMDAiIH0sCQkgICAgXAorICB7IDB4MDAwMDUsICA0NSwgd2FrZV91cF9tb3VudGFpbiwgICJBcmNoaXZlIDU1ODBpIiB9LAkJCSAgICBcCisgIHsgMHgxMDAwNSwgIDUwLCB3YWtlX3VwX2luc2lnaHQsICAgIkluc2lnaHQgODBNYiwgSXJ3aW4gODBTWCIgfSwJICAgIFwKKyAgeyAweDAwMTQwLCAgNzQsIHdha2VfdXBfbW91bnRhaW4sICAiQXJjaGl2ZSBTLkhvcm5ldCBbSWRlbnRpdHkvRXNjb21dIiB9LCBcCisgIHsgMHgwMDE0NiwgIDcyLCB3YWtlX3VwX21vdW50YWluLCAgIkFyY2hpdmUgMzEyNTBRIFtFc2NvbV0iIH0sCSAgICBcCisgIHsgMHgwMDE0YSwgMTAwLCB3YWtlX3VwX21vdW50YWluLCAgIkFyY2hpdmUgWEw5MjUwaSBbQ29ubmVyL0VzY29tXSIgfSwgICAgXAorICB7IDB4MDAxNGMsICA5OCwgd2FrZV91cF9tb3VudGFpbiwgICJDb25uZXIgQzI1ME1RVCIgfSwJCSAgICBcCisgIHsgMHgwMDE0ZSwgIDgwLCB3YWtlX3VwX21vdW50YWluLCAgIkNvbm5lciBDMjUwTVEiIH0sCQkJICAgIFwKKyAgeyAweDAwMTUwLCAgODAsIHdha2VfdXBfbW91bnRhaW4sICAiQ29ubmVyIFRTTTQyMFIvVFNUODAwUiIgfSwJICAgIFwKKyAgeyAweDAwMTUyLCAgODAsIHdha2VfdXBfbW91bnRhaW4sICAiQ29ubmVyIFRTTTg1MFIiIH0sCQkgICAgXAorICB7IDB4MDAxNTYsICA4MCwgd2FrZV91cF9tb3VudGFpbiwgICJDb25uZXIgVFNNODUwUi8xNzAwUi9UU1QzMjAwUiIgfSwJICAgIFwKKyAgeyAweDAwMTgwLCAgIDAsIHdha2VfdXBfbW91bnRhaW4sICAiU3VtbWl0IFNFIDE1MCIgfSwJCQkgICAgXAorICB7IDB4MDAxODEsICA4NSwgd2FrZV91cF9tb3VudGFpbiwgICJTdW1taXQgU0UgMjUwLCBNb3VudGFpbiBGUzgwMDAiIH0sICAgIFwKKyAgeyAweDAwMWMxLCAgODIsIG5vX3dha2VfdXAsICAgICAgICAiV2FuZ3RlayAzMDQwRiIgfSwJCQkgICAgXAorICB7IDB4MDAxYzgsICA2NCwgbm9fd2FrZV91cCwgICAgICAgICJXYW5ndGVrIDMwODBGIiB9LAkJCSAgICBcCisgIHsgMHgwMDFjOCwgIDY0LCB3YWtlX3VwX2NvbG9yYWRvLCAgIldhbmd0ZWsgMzA4MEYiIH0sCQkJICAgIFwKKyAgeyAweDAwMWNhLCAgNjcsIG5vX3dha2VfdXAsICAgICAgICAiV2FuZ3RlayAzMDgwRiAobmV3KSIgfSwJCSAgICBcCisgIHsgMHgwMDFjYywgIDc3LCB3YWtlX3VwX2NvbG9yYWRvLCAgIldhbmd0ZWsgMzIwMCAvIFRlYWMgNzAwIiB9LAkgICAgXAorICB7IDB4MDAxY2QsICA3NSwgd2FrZV91cF9jb2xvcmFkbywgICJSZXZlYWwgVEIxNDAwIiB9LAkJCSAgICBcCisgIHsgMHgwMDM4MCwgIDg1LCB3YWtlX3VwX2NvbG9yYWRvLCAgIkV4YWJ5dGUgRWFnbGUtOTYiIH0sCQkgICAgXAorICB7IDB4MDAzODEsICA4NSwgd2FrZV91cF9jb2xvcmFkbywgICJFeGFieXRlIEVhZ2xlIFRSLTMiIH0sCQkgICAgXAorICB7IDB4MDAzODIsICA4NSwgd2FrZV91cF9jb2xvcmFkbywgICJFeGFieXRlIEVhZ2xlIFRSLTMiIH0sCQkgICAgXAorICB7IDB4MDAzY2UsICA3Nywgd2FrZV91cF9jb2xvcmFkbywgICJUZWFjIDgwMCIgfSwJCQkgICAgXAorICB7IDB4MDAzY2YsICAgMCwgd2FrZV91cF9jb2xvcmFkbywgICJUZWFjIEZUMzAxMFRSIiB9LAkJCSAgICBcCisgIHsgMHgwODg4MCwgIDY0LCBub193YWtlX3VwLCAgICAgICAgIklvbWVnYSAyNTAsIERpdHRvIDgwMCIgfSwJCSAgICBcCisgIHsgMHgwODg4MCwgIDY0LCB3YWtlX3VwX2NvbG9yYWRvLCAgIklvbWVnYSAyNTAsIERpdHRvIDgwMCIgfSwJCSAgICBcCisgIHsgMHgwODg4MCwgIDY0LCB3YWtlX3VwX2luc2lnaHQsICAgIklvbWVnYSAyNTAsIERpdHRvIDgwMCIgfSwJCSAgICBcCisgIHsgMHgwODg4MSwgIDgwLCB3YWtlX3VwX2NvbG9yYWRvLCAgIklvbWVnYSA3MDAiIH0sCQkJICAgIFwKKyAgeyAweDA4ODgyLCAgODAsIHdha2VfdXBfY29sb3JhZG8sICAiSW9tZWdhIDMyMDAiIH0sCQkJICAgIFwKKyAgeyAweDA4ODgzLCAgODAsIHdha2VfdXBfY29sb3JhZG8sICAiSW9tZWdhIERJVFRPIDJHQiIgfSwJCSAgICBcCisgIHsgMHgwMDAyMSwgIDcwLCBub193YWtlX3VwLCAgICAgICAgIkFJV0EgQ1QtODAzIiB9LAkJCSAgICBcCisgIHsgMHgwMDRjMCwgIDgwLCBub193YWtlX3VwLCAgICAgICAgIkFJV0EgVEQtUzE2MDAiIH0sCQkJICAgIFwKKyAgeyAweDAwMDIxLCAgIDAsIHdha2VfdXBfbW91bnRhaW4sICAiQ09SRXRhcGUgUUlDODAiIH0sCQkgICAgXAorICB7IDB4MDA0NDEsICAgMCwgd2FrZV91cF9tb3VudGFpbiwgICJDb21CeXRlIERvdWJsZVBsYXkiIH0sCQkgICAgXAorICB7IDB4MDA0ODEsIDEyNywgd2FrZV91cF9tb3VudGFpbiwgICJQRVJURUMgTXlUYXBlIDgwMCIgfSwJCSAgICBcCisgIHsgMHgwMDQ4MywgMTMwLCB3YWtlX3VwX21vdW50YWluLCAgIlBFUlRFQyBNeVRhcGUgMzIwMCIgfSwJCSAgICBcCisgIHsgVU5LTk9XTl9WRU5ET1IsIDAsIG5vX3dha2VfdXAsICJ1bmtub3duIiB9CQkJCSAgICBcCit9CisKKyNkZWZpbmUgUUlDMTE3X01BS0VfQ09ERVMgewkJCVwKKyAgeyAwLCAiVW5hc3NpZ25lZCIgfSwJCQkJXAorICB7IDEsICJBbGxveSBDb21wdXRlciBQcm9kdWN0cyIgfSwJCVwKKyAgeyAyLCAiM00iIH0sCQkJCQlcCisgIHsgMywgIlRhbmRiZXJnIERhdGEiIH0sCQkJXAorICB7IDQsICJDb2xvcmFkbyIgfSwJCQkJXAorICB7IDUsICJBcmNoaXZlL0Nvbm5lciIgfSwJCQlcCisgIHsgNiwgIk1vdW50YWluL1N1bW1pdCBNZW1vcnkgU3lzdGVtcyIgfSwJXAorICB7IDcsICJXYW5ndGVrL1JleG9uL1RlY21hciIgfSwJCVwKKyAgeyA4LCAiU29ueSIgfSwJCQkJXAorICB7IDksICJDaXBoZXIgRGF0YSBQcm9kdWN0cyIgfSwJCVwKKyAgeyAxMCwgIklyd2luIE1hZ25ldGljIFN5c3RlbXMiIH0sCQlcCisgIHsgMTEsICJCcmFlbWFyIiB9LAkJCQlcCisgIHsgMTIsICJWZXJiYXRpbSIgfSwJCQkJXAorICB7IDEzLCAiQ29yZSBJbnRlcm5hdGlvbmFsIiB9LAkJCVwKKyAgeyAxNCwgIkV4YWJ5dGUiIH0sCQkJCVwKKyAgeyAxNSwgIlRlYWMiIH0sCQkJCVwKKyAgeyAxNiwgIkdpZ2F0ZWsiIH0sCQkJCVwKKyAgeyAxNywgIkNvbUJ5dGUiIH0sCQkJCVwKKyAgeyAxOCwgIlBFUlRFQyBNZW1vcmllcyIgfSwJCQlcCisgIHsgMTksICJBaXdhIiB9LAkJCQlcCisgIHsgNzEsICJDb2xvcmFkbyIgfSwJCQkJXAorICB7IDU0NiwgIklvbWVnYSBJbmMiIH0sCQkJXAorfQorCisjZW5kaWYgLyogX0ZUQVBFX1ZFTkRPUlNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mdGFwZS5oIGIvaW5jbHVkZS9saW51eC9mdGFwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2YjM4ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2Z0YXBlLmgKQEAgLTAsMCArMSwyMDIgQEAKKyNpZm5kZWYgX0ZUQVBFX0gKKyNkZWZpbmUgX0ZUQVBFX0gKKworLyoKKyAqIENvcHlyaWdodCAoQykgMTk5NC0xOTk2IEJhcyBMYWFyaG92ZW4sCisgKiAgICAgICAgICAgKEMpIDE5OTYtMTk5NyBDbGF1cy1KdXN0dXMgSGVpbmUuCisKKyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorIGFueSBsYXRlciB2ZXJzaW9uLgorCisgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisgKgorICogJFNvdXJjZTogL2hvbWVzL2N2cy9mdGFwZS1zdGFja2VkL2luY2x1ZGUvbGludXgvZnRhcGUuaCx2ICQKKyAqICRSZXZpc2lvbjogMS4xNy42LjQgJAorICogJERhdGU6IDE5OTcvMTEvMjUgMDE6NTI6NTQgJAorICoKKyAqICAgICAgVGhpcyBmaWxlIGNvbnRhaW5zIGdsb2JhbCBkZWZpbml0aW9ucywgdHlwZWRlZnMgYW5kIG1hY3JvJ3MKKyAqICAgICAgZm9yIHRoZSBRSUMtNDAvODAvMzAxMC8zMDIwIGZsb3BweS10YXBlIGRyaXZlciBmb3IgTGludXguCisgKi8KKworI2RlZmluZSBGVEFQRV9WRVJTSU9OICJmdGFwZSB2My4wNGQgMjUvMTEvOTciCisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNlbmRpZgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbXRpby5oPgorCisjZGVmaW5lIEZUX1NFQ1RPUih4KQkJKHgrMSkJLyogc2VjdG9yIG9mZnNldCBpbnRvIHJlYWwgc2VjdG9yICovCisjZGVmaW5lIEZUX1NFQ1RPUl9TSVpFCQkxMDI0CisjZGVmaW5lIEZUX1NFQ1RPUlNfUEVSX1NFR01FTlQJICAzMgorI2RlZmluZSBGVF9FQ0NfU0VDVE9SUwkJICAgMworI2RlZmluZSBGVF9TRUdNRU5UX1NJWkUJCSgoRlRfU0VDVE9SU19QRVJfU0VHTUVOVCAtIEZUX0VDQ19TRUNUT1JTKSAqIEZUX1NFQ1RPUl9TSVpFKQorI2RlZmluZSBGVF9CVUZGX1NJWkUgICAgKEZUX1NFQ1RPUlNfUEVSX1NFR01FTlQgKiBGVF9TRUNUT1JfU0laRSkKKworLyoKKyAqICAgYml0cyBvZiB0aGUgbWlub3IgZGV2aWNlIG51bWJlciB0aGF0IGRlZmluZSBkcml2ZSBzZWxlY3Rpb24KKyAqICAgbWV0aG9kcy4gQ291bGQgYmUgdXNlZCBvbmUgZGF5IHRvIGFjY2VzcyBtdWx0aXBsZSB0YXBlCisgKiAgIGRyaXZlcyBvbiB0aGUgc2FtZSBjb250cm9sbGVyLgorICovCisjZGVmaW5lIEZUQVBFX1NFTF9BICAgICAwCisjZGVmaW5lIEZUQVBFX1NFTF9CICAgICAxCisjZGVmaW5lIEZUQVBFX1NFTF9DICAgICAyCisjZGVmaW5lIEZUQVBFX1NFTF9EICAgICAzCisjZGVmaW5lIEZUQVBFX1NFTF9NQVNLICAgICAzCisjZGVmaW5lIEZUQVBFX1NFTCh1bml0KSAoKHVuaXQpICYgRlRBUEVfU0VMX01BU0spCisjZGVmaW5lIEZUQVBFX05PX1JFV0lORCA0CS8qIG1hc2sgZm9yIG1pbm9yIG5yICovCisKKy8qIHRoZSBmb2xsb3dpbmcgdHdvIG1heSBiZSByZXBvcnRlZCB3aGVuIE1USU9DR0VUIGlzIHJlcXVlc3RlZCAuLi4gKi8KK3R5cGVkZWYgdW5pb24geworCXN0cnVjdCB7CisJCV9fdTggZXJyb3I7CisJCV9fdTggY29tbWFuZDsKKwl9IGVycm9yOworCWxvbmcgc3BhY2U7Cit9IGZ0X2RyaXZlX2Vycm9yOwordHlwZWRlZiB1bmlvbiB7CisJc3RydWN0IHsKKwkJX191OCBkcml2ZV9zdGF0dXM7CisJCV9fdTggZHJpdmVfY29uZmlnOworCQlfX3U4IHRhcGVfc3RhdHVzOworCX0gc3RhdHVzOworCWxvbmcgc3BhY2U7Cit9IGZ0X2RyaXZlX3N0YXR1czsKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2RlZmluZSBGVF9SUU1fREVMQVkgICAgMTIKKyNkZWZpbmUgRlRfTUlMTElTRUNPTkQgIDEKKyNkZWZpbmUgRlRfU0VDT05EICAgICAgIDEwMDAKKyNkZWZpbmUgRlRfRk9SRVZFUiAgICAgIC0xCisjaWZuZGVmIEhaCisjZXJyb3IgIkhaIHVuZGVmaW5lZC4iCisjZW5kaWYKKyNkZWZpbmUgRlRfVVNQVCAgICAgICAgICgxMDAwMDAwL0haKSAvKiBtaWNyb3NlY29uZHMgcGVyIHRpY2sgKi8KKworLyogVGhpcyBkZWZpbmVzIHRoZSBudW1iZXIgb2YgcmV0cmllcyB0aGF0IHRoZSBkcml2ZXIgd2lsbCBhbGxvdworICogYmVmb3JlIGdpdmluZyB1cCAoYW5kIGxldHRpbmcgYSBoaWdoZXIgbGV2ZWwgaGFuZGxlIHRoZSBlcnJvcikuCisgKi8KKyNpZmRlZiBURVNUSU5HCisjZGVmaW5lIEZUX1NPRlRfUkVUUklFUyAxCSAgIC8qIG51bWJlciBvZiBsb3cgbGV2ZWwgcmV0cmllcyAqLworI2RlZmluZSBGVF9SRVRSSUVTX09OX0VDQ19FUlJPUiAzICAvKiBlY2MgZXJyb3Igd2hlbiBjb3JyZWN0aW5nIHNlZ21lbnQgKi8KKyNlbHNlCisjZGVmaW5lIEZUX1NPRlRfUkVUUklFUyA2CSAgIC8qIG51bWJlciBvZiBsb3cgbGV2ZWwgcmV0cmllcyAodHJpcGxlKSAqLworI2RlZmluZSBGVF9SRVRSSUVTX09OX0VDQ19FUlJPUiAzICAvKiBlY2MgZXJyb3Igd2hlbiBjb3JyZWN0aW5nIHNlZ21lbnQgKi8KKyNlbmRpZgorCisjaWZuZGVmIFRIRV9GVEFQRV9NQUlOVEFJTkVSCisjZGVmaW5lIFRIRV9GVEFQRV9NQUlOVEFJTkVSICJ0aGUgZnRhcGUgbWFpbnRhaW5lciIKKyNlbmRpZgorCisvKiBJbml0aWFsaXplIG1pc3NpbmcgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLgorICovCisjaWZuZGVmIENPTkZJR19GVF9OUl9CVUZGRVJTCisjIGRlZmluZSBDT05GSUdfRlRfTlJfQlVGRkVSUyAzCisjZW5kaWYKKyNpZm5kZWYgQ09ORklHX0ZUX0ZEQ19USFIKKyMgZGVmaW5lIENPTkZJR19GVF9GRENfVEhSIDgKKyNlbmRpZgorI2lmbmRlZiBDT05GSUdfRlRfRkRDX01BWF9SQVRFCisjIGRlZmluZSBDT05GSUdfRlRfRkRDX01BWF9SQVRFIDIwMDAKKyNlbmRpZgorI2lmbmRlZiBDT05GSUdfRlRfRkRDX0JBU0UKKyMgZGVmaW5lIENPTkZJR19GVF9GRENfQkFTRSAwCisjZW5kaWYKKyNpZm5kZWYgQ09ORklHX0ZUX0ZEQ19JUlEKKyMgZGVmaW5lIENPTkZJR19GVF9GRENfSVJRICAwCisjZW5kaWYKKyNpZm5kZWYgQ09ORklHX0ZUX0ZEQ19ETUEKKyMgZGVmaW5lIENPTkZJR19GVF9GRENfRE1BICAwCisjZW5kaWYKKworLyogVHVybiBzb21lIGJvb2xlYW5zIGludG8gbnVtYmVycy4KKyAqLworI2lmZGVmIENPTkZJR19GVF9QUk9CRV9GQzEwCisjIHVuZGVmIENPTkZJR19GVF9QUk9CRV9GQzEwCisjIGRlZmluZSBDT05GSUdfRlRfUFJPQkVfRkMxMCAxCisjZWxzZQorIyBkZWZpbmUgQ09ORklHX0ZUX1BST0JFX0ZDMTAgMAorI2VuZGlmCisjaWZkZWYgQ09ORklHX0ZUX01BQ0gyCisjIHVuZGVmIENPTkZJR19GVF9NQUNIMgorIyBkZWZpbmUgQ09ORklHX0ZUX01BQ0gyIDEKKyNlbHNlCisjIGRlZmluZSBDT05GSUdfRlRfTUFDSDIgMAorI2VuZGlmCisKKy8qIEluc2VydCBkZWZhdWx0IHNldHRpbmdzCisgKi8KKyNpZiBDT05GSUdfRlRfUFJPQkVfRkMxMCA9PSAxCisjIGlmIENPTkZJR19GVF9GRENfQkFTRSA9PSAwCisjICB1bmRlZiAgQ09ORklHX0ZUX0ZEQ19CQVNFCisjICBkZWZpbmUgQ09ORklHX0ZUX0ZEQ19CQVNFIDB4MTgwCisjIGVuZGlmCisjIGlmIENPTkZJR19GVF9GRENfSVJRID09IDAKKyMgIHVuZGVmICBDT05GSUdfRlRfRkRDX0lSUQorIyAgZGVmaW5lIENPTkZJR19GVF9GRENfSVJRIDkKKyMgZW5kaWYKKyMgaWYgQ09ORklHX0ZUX0ZEQ19ETUEgPT0gMAorIyAgdW5kZWYgIENPTkZJR19GVF9GRENfRE1BCisjICBkZWZpbmUgQ09ORklHX0ZUX0ZEQ19ETUEgMworIyBlbmRpZgorI2VsaWYgQ09ORklHX0ZUX01BQ0gyID09IDEgICAgLyogQ09ORklHX0ZUX1BST0JFX0ZDMTAgPT0gMSAqLworIyBpZiBDT05GSUdfRlRfRkRDX0JBU0UgPT0gMAorIyAgdW5kZWYgIENPTkZJR19GVF9GRENfQkFTRQorIyAgZGVmaW5lIENPTkZJR19GVF9GRENfQkFTRSAweDFFMAorIyBlbmRpZgorIyBpZiBDT05GSUdfRlRfRkRDX0lSUSA9PSAwCisjICB1bmRlZiAgQ09ORklHX0ZUX0ZEQ19JUlEKKyMgIGRlZmluZSBDT05GSUdfRlRfRkRDX0lSUSA2CisjIGVuZGlmCisjIGlmIENPTkZJR19GVF9GRENfRE1BID09IDAKKyMgIHVuZGVmICBDT05GSUdfRlRfRkRDX0RNQQorIyAgZGVmaW5lIENPTkZJR19GVF9GRENfRE1BIDIKKyMgZW5kaWYKKyNlbGlmIENPTkZJR19GVF9BTFRfRkRDID09IDEgIC8qIENPTkZJR19GVF9NQUNIMiAqLworIyBpZiBDT05GSUdfRlRfRkRDX0JBU0UgPT0gMAorIyAgdW5kZWYgIENPTkZJR19GVF9GRENfQkFTRQorIyAgZGVmaW5lIENPTkZJR19GVF9GRENfQkFTRSAweDM3MAorIyBlbmRpZgorIyBpZiBDT05GSUdfRlRfRkRDX0lSUSA9PSAwCisjICB1bmRlZiAgQ09ORklHX0ZUX0ZEQ19JUlEKKyMgIGRlZmluZSBDT05GSUdfRlRfRkRDX0lSUSA2CisjIGVuZGlmCisjIGlmIENPTkZJR19GVF9GRENfRE1BID09IDAKKyMgIHVuZGVmICBDT05GSUdfRlRfRkRDX0RNQQorIyAgZGVmaW5lIENPTkZJR19GVF9GRENfRE1BIDIKKyMgZW5kaWYKKyNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDT05GSUdfRlRfQUxUX0ZEQyAqLworIyBpZiBDT05GSUdfRlRfRkRDX0JBU0UgPT0gMAorIyAgdW5kZWYgIENPTkZJR19GVF9GRENfQkFTRQorIyAgZGVmaW5lIENPTkZJR19GVF9GRENfQkFTRSAweDNmMAorIyBlbmRpZgorIyBpZiBDT05GSUdfRlRfRkRDX0lSUSA9PSAwCisjICB1bmRlZiAgQ09ORklHX0ZUX0ZEQ19JUlEKKyMgIGRlZmluZSBDT05GSUdfRlRfRkRDX0lSUSA2CisjIGVuZGlmCisjIGlmIENPTkZJR19GVF9GRENfRE1BID09IDAKKyMgIHVuZGVmICBDT05GSUdfRlRfRkRDX0RNQQorIyAgZGVmaW5lIENPTkZJR19GVF9GRENfRE1BIDIKKyMgZW5kaWYKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzdGFuZGFyZCBGREMgKi8KKworLyogICAgICBzb21lIHVzZWZ1bCBtYWNybydzCisgKi8KKyNkZWZpbmUgTlJfSVRFTVMoeCkgICAgIChpbnQpKHNpemVvZih4KS8gc2l6ZW9mKCp4KSkKKworI2VuZGlmICAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mdXRleC5oIGIvaW5jbHVkZS9saW51eC9mdXRleC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1ZDZjZmQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2Z1dGV4LmgKQEAgLTAsMCArMSwxNyBAQAorI2lmbmRlZiBfTElOVVhfRlVURVhfSAorI2RlZmluZSBfTElOVVhfRlVURVhfSAorCisvKiBTZWNvbmQgYXJndW1lbnQgdG8gZnV0ZXggc3lzY2FsbCAqLworCisKKyNkZWZpbmUgRlVURVhfV0FJVCAoMCkKKyNkZWZpbmUgRlVURVhfV0FLRSAoMSkKKyNkZWZpbmUgRlVURVhfRkQgKDIpCisjZGVmaW5lIEZVVEVYX1JFUVVFVUUgKDMpCisjZGVmaW5lIEZVVEVYX0NNUF9SRVFVRVVFICg0KQorCitsb25nIGRvX2Z1dGV4KHVuc2lnbmVkIGxvbmcgdWFkZHIsIGludCBvcCwgaW50IHZhbCwKKwkJdW5zaWduZWQgbG9uZyB0aW1lb3V0LCB1bnNpZ25lZCBsb25nIHVhZGRyMiwgaW50IHZhbDIsCisJCWludCB2YWwzKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2dhbWVwb3J0LmggYi9pbmNsdWRlL2xpbnV4L2dhbWVwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjEyNzJmODIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2dhbWVwb3J0LmgKQEAgLTAsMCArMSwxOTggQEAKKyNpZm5kZWYgX0dBTUVQT1JUX0gKKyNkZWZpbmUgX0dBTUVQT1JUX0gKKworLyoKKyAqICBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMiBWb2p0ZWNoIFBhdmxpaworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKworc3RydWN0IGdhbWVwb3J0IHsKKworCXZvaWQgKnBvcnRfZGF0YTsJLyogUHJpdmF0ZSBwb2ludGVyIGZvciBnYW1lcG9ydCBkcml2ZXJzICovCisJY2hhciBuYW1lWzMyXTsKKwljaGFyIHBoeXNbMzJdOworCisJaW50IGlvOworCWludCBzcGVlZDsKKwlpbnQgZnV6ejsKKworCXZvaWQgKCp0cmlnZ2VyKShzdHJ1Y3QgZ2FtZXBvcnQgKik7CisJdW5zaWduZWQgY2hhciAoKnJlYWQpKHN0cnVjdCBnYW1lcG9ydCAqKTsKKwlpbnQgKCpjb29rZWRfcmVhZCkoc3RydWN0IGdhbWVwb3J0ICosIGludCAqLCBpbnQgKik7CisJaW50ICgqY2FsaWJyYXRlKShzdHJ1Y3QgZ2FtZXBvcnQgKiwgaW50ICosIGludCAqKTsKKwlpbnQgKCpvcGVuKShzdHJ1Y3QgZ2FtZXBvcnQgKiwgaW50KTsKKwl2b2lkICgqY2xvc2UpKHN0cnVjdCBnYW1lcG9ydCAqKTsKKworCXN0cnVjdCB0aW1lcl9saXN0IHBvbGxfdGltZXI7CisJdW5zaWduZWQgaW50IHBvbGxfaW50ZXJ2YWw7CS8qIGluIG1zZWNzICovCisJc3BpbmxvY2tfdCB0aW1lcl9sb2NrOworCXVuc2lnbmVkIGludCBwb2xsX2NudDsKKwl2b2lkICgqcG9sbF9oYW5kbGVyKShzdHJ1Y3QgZ2FtZXBvcnQgKik7CisKKwlzdHJ1Y3QgZ2FtZXBvcnQgKnBhcmVudCwgKmNoaWxkOworCisJc3RydWN0IGdhbWVwb3J0X2RyaXZlciAqZHJ2OworCXN0cnVjdCBzZW1hcGhvcmUgZHJ2X3NlbTsJLyogcHJvdGVjdHMgc2VyaW8tPmRydiBzbyBhdHRyaWJ1dGVzIGNhbiBwaW4gZHJpdmVyICovCisKKwlzdHJ1Y3QgZGV2aWNlIGRldjsKKwl1bnNpZ25lZCBpbnQgcmVnaXN0ZXJlZDsJLyogcG9ydCBoYXMgYmVlbiBmdWxseSByZWdpc3RlcmVkIHdpdGggZHJpdmVyIGNvcmUgKi8KKworCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKK307CisjZGVmaW5lIHRvX2dhbWVwb3J0X3BvcnQoZCkJY29udGFpbmVyX29mKGQsIHN0cnVjdCBnYW1lcG9ydCwgZGV2KQorCitzdHJ1Y3QgZ2FtZXBvcnRfZHJpdmVyIHsKKworCXZvaWQgKnByaXZhdGU7CisJY2hhciAqZGVzY3JpcHRpb247CisKKwlpbnQgKCpjb25uZWN0KShzdHJ1Y3QgZ2FtZXBvcnQgKiwgc3RydWN0IGdhbWVwb3J0X2RyaXZlciAqZHJ2KTsKKwlpbnQgKCpyZWNvbm5lY3QpKHN0cnVjdCBnYW1lcG9ydCAqKTsKKwl2b2lkICgqZGlzY29ubmVjdCkoc3RydWN0IGdhbWVwb3J0ICopOworCisJc3RydWN0IGRldmljZV9kcml2ZXIgZHJpdmVyOworCisJdW5zaWduZWQgaW50IGlnbm9yZTsKK307CisjZGVmaW5lIHRvX2dhbWVwb3J0X2RyaXZlcihkKQljb250YWluZXJfb2YoZCwgc3RydWN0IGdhbWVwb3J0X2RyaXZlciwgZHJpdmVyKQorCitpbnQgZ2FtZXBvcnRfb3BlbihzdHJ1Y3QgZ2FtZXBvcnQgKmdhbWVwb3J0LCBzdHJ1Y3QgZ2FtZXBvcnRfZHJpdmVyICpkcnYsIGludCBtb2RlKTsKK3ZvaWQgZ2FtZXBvcnRfY2xvc2Uoc3RydWN0IGdhbWVwb3J0ICpnYW1lcG9ydCk7Cit2b2lkIGdhbWVwb3J0X3Jlc2NhbihzdHJ1Y3QgZ2FtZXBvcnQgKmdhbWVwb3J0KTsKKwordm9pZCBfX2dhbWVwb3J0X3JlZ2lzdGVyX3BvcnQoc3RydWN0IGdhbWVwb3J0ICpnYW1lcG9ydCwgc3RydWN0IG1vZHVsZSAqb3duZXIpOworc3RhdGljIGlubGluZSB2b2lkIGdhbWVwb3J0X3JlZ2lzdGVyX3BvcnQoc3RydWN0IGdhbWVwb3J0ICpnYW1lcG9ydCkKK3sKKwlfX2dhbWVwb3J0X3JlZ2lzdGVyX3BvcnQoZ2FtZXBvcnQsIFRISVNfTU9EVUxFKTsKK30KKwordm9pZCBnYW1lcG9ydF91bnJlZ2lzdGVyX3BvcnQoc3RydWN0IGdhbWVwb3J0ICpnYW1lcG9ydCk7CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGdhbWVwb3J0ICpnYW1lcG9ydF9hbGxvY2F0ZV9wb3J0KHZvaWQpCit7CisJc3RydWN0IGdhbWVwb3J0ICpnYW1lcG9ydCA9IGtjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBnYW1lcG9ydCksIEdGUF9LRVJORUwpOworCisJcmV0dXJuIGdhbWVwb3J0OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ2FtZXBvcnRfZnJlZV9wb3J0KHN0cnVjdCBnYW1lcG9ydCAqZ2FtZXBvcnQpCit7CisJa2ZyZWUoZ2FtZXBvcnQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ2FtZXBvcnRfc2V0X25hbWUoc3RydWN0IGdhbWVwb3J0ICpnYW1lcG9ydCwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJsY3B5KGdhbWVwb3J0LT5uYW1lLCBuYW1lLCBzaXplb2YoZ2FtZXBvcnQtPm5hbWUpKTsKK30KKwordm9pZCBnYW1lcG9ydF9zZXRfcGh5cyhzdHJ1Y3QgZ2FtZXBvcnQgKmdhbWVwb3J0LCBjb25zdCBjaGFyICpmbXQsIC4uLikKKwlfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDIsIDMpKSk7CisKKy8qCisgKiBVc2UgdGhlIGZvbGxvd2luZyBmdWNudGlvbnMgdG8gbWFuaXB1bGF0ZSBnYW1lcG9ydCdzIHBlci1wb3J0CisgKiBkcml2ZXItc3BlY2lmaWMgZGF0YS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkICpnYW1lcG9ydF9nZXRfZHJ2ZGF0YShzdHJ1Y3QgZ2FtZXBvcnQgKmdhbWVwb3J0KQoreworCXJldHVybiBkZXZfZ2V0X2RydmRhdGEoJmdhbWVwb3J0LT5kZXYpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ2FtZXBvcnRfc2V0X2RydmRhdGEoc3RydWN0IGdhbWVwb3J0ICpnYW1lcG9ydCwgdm9pZCAqZGF0YSkKK3sKKwlkZXZfc2V0X2RydmRhdGEoJmdhbWVwb3J0LT5kZXYsIGRhdGEpOworfQorCisvKgorICogVXNlIHRoZSBmb2xsb3dpbmcgZnVjbnRpb25zIHRvIHBpbiBnYW1lcG9ydCdzIGRyaXZlciBpbiBwcm9jZXNzIGNvbnRleHQKKyAqLworc3RhdGljIGlubGluZSBpbnQgZ2FtZXBvcnRfcGluX2RyaXZlcihzdHJ1Y3QgZ2FtZXBvcnQgKmdhbWVwb3J0KQoreworCXJldHVybiBkb3duX2ludGVycnVwdGlibGUoJmdhbWVwb3J0LT5kcnZfc2VtKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGdhbWVwb3J0X3VucGluX2RyaXZlcihzdHJ1Y3QgZ2FtZXBvcnQgKmdhbWVwb3J0KQoreworCXVwKCZnYW1lcG9ydC0+ZHJ2X3NlbSk7Cit9CisKK3ZvaWQgX19nYW1lcG9ydF9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IGdhbWVwb3J0X2RyaXZlciAqZHJ2LCBzdHJ1Y3QgbW9kdWxlICpvd25lcik7CitzdGF0aWMgaW5saW5lIHZvaWQgZ2FtZXBvcnRfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBnYW1lcG9ydF9kcml2ZXIgKmRydikKK3sKKwlfX2dhbWVwb3J0X3JlZ2lzdGVyX2RyaXZlcihkcnYsIFRISVNfTU9EVUxFKTsKK30KKwordm9pZCBnYW1lcG9ydF91bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgZ2FtZXBvcnRfZHJpdmVyICpkcnYpOworCisjZGVmaW5lIEdBTUVQT1JUX01PREVfRElTQUJMRUQJCTAKKyNkZWZpbmUgR0FNRVBPUlRfTU9ERV9SQVcJCTEKKyNkZWZpbmUgR0FNRVBPUlRfTU9ERV9DT09LRUQJCTIKKworI2RlZmluZSBHQU1FUE9SVF9JRF9WRU5ET1JfQU5BTE9HCTB4MDAwMQorI2RlZmluZSBHQU1FUE9SVF9JRF9WRU5ET1JfTUFEQ0FUWgkweDAwMDIKKyNkZWZpbmUgR0FNRVBPUlRfSURfVkVORE9SX0xPR0lURUNICTB4MDAwMworI2RlZmluZSBHQU1FUE9SVF9JRF9WRU5ET1JfQ1JFQVRJVkUJMHgwMDA0CisjZGVmaW5lIEdBTUVQT1JUX0lEX1ZFTkRPUl9HRU5JVVMJMHgwMDA1CisjZGVmaW5lIEdBTUVQT1JUX0lEX1ZFTkRPUl9JTlRFUkFDVAkweDAwMDYKKyNkZWZpbmUgR0FNRVBPUlRfSURfVkVORE9SX01JQ1JPU09GVAkweDAwMDcKKyNkZWZpbmUgR0FNRVBPUlRfSURfVkVORE9SX1RIUlVTVE1BU1RFUgkweDAwMDgKKyNkZWZpbmUgR0FNRVBPUlRfSURfVkVORE9SX0dSQVZJUwkweDAwMDkKKyNkZWZpbmUgR0FNRVBPUlRfSURfVkVORE9SX0dVSUxMRU1PVAkweDAwMGEKKworc3RhdGljIGlubGluZSB2b2lkIGdhbWVwb3J0X3RyaWdnZXIoc3RydWN0IGdhbWVwb3J0ICpnYW1lcG9ydCkKK3sKKwlpZiAoZ2FtZXBvcnQtPnRyaWdnZXIpCisJCWdhbWVwb3J0LT50cmlnZ2VyKGdhbWVwb3J0KTsKKwllbHNlCisJCW91dGIoMHhmZiwgZ2FtZXBvcnQtPmlvKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIGdhbWVwb3J0X3JlYWQoc3RydWN0IGdhbWVwb3J0ICpnYW1lcG9ydCkKK3sKKwlpZiAoZ2FtZXBvcnQtPnJlYWQpCisJCXJldHVybiBnYW1lcG9ydC0+cmVhZChnYW1lcG9ydCk7CisJZWxzZQorCQlyZXR1cm4gaW5iKGdhbWVwb3J0LT5pbyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGdhbWVwb3J0X2Nvb2tlZF9yZWFkKHN0cnVjdCBnYW1lcG9ydCAqZ2FtZXBvcnQsIGludCAqYXhlcywgaW50ICpidXR0b25zKQoreworCWlmIChnYW1lcG9ydC0+Y29va2VkX3JlYWQpCisJCXJldHVybiBnYW1lcG9ydC0+Y29va2VkX3JlYWQoZ2FtZXBvcnQsIGF4ZXMsIGJ1dHRvbnMpOworCWVsc2UKKwkJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW5saW5lIGludCBnYW1lcG9ydF9jYWxpYnJhdGUoc3RydWN0IGdhbWVwb3J0ICpnYW1lcG9ydCwgaW50ICpheGVzLCBpbnQgKm1heCkKK3sKKwlpZiAoZ2FtZXBvcnQtPmNhbGlicmF0ZSkKKwkJcmV0dXJuIGdhbWVwb3J0LT5jYWxpYnJhdGUoZ2FtZXBvcnQsIGF4ZXMsIG1heCk7CisJZWxzZQorCQlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGdhbWVwb3J0X3RpbWUoc3RydWN0IGdhbWVwb3J0ICpnYW1lcG9ydCwgaW50IHRpbWUpCit7CisJcmV0dXJuICh0aW1lICogZ2FtZXBvcnQtPnNwZWVkKSAvIDEwMDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBnYW1lcG9ydF9zZXRfcG9sbF9oYW5kbGVyKHN0cnVjdCBnYW1lcG9ydCAqZ2FtZXBvcnQsIHZvaWQgKCpoYW5kbGVyKShzdHJ1Y3QgZ2FtZXBvcnQgKikpCit7CisJZ2FtZXBvcnQtPnBvbGxfaGFuZGxlciA9IGhhbmRsZXI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBnYW1lcG9ydF9zZXRfcG9sbF9pbnRlcnZhbChzdHJ1Y3QgZ2FtZXBvcnQgKmdhbWVwb3J0LCB1bnNpZ25lZCBpbnQgbXNlY3MpCit7CisJZ2FtZXBvcnQtPnBvbGxfaW50ZXJ2YWwgPSBtc2VjczsKK30KKwordm9pZCBnYW1lcG9ydF9zdGFydF9wb2xsaW5nKHN0cnVjdCBnYW1lcG9ydCAqZ2FtZXBvcnQpOwordm9pZCBnYW1lcG9ydF9zdG9wX3BvbGxpbmcoc3RydWN0IGdhbWVwb3J0ICpnYW1lcG9ydCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9nZW5fc3RhdHMuaCBiL2luY2x1ZGUvbGludXgvZ2VuX3N0YXRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNmNGU3NAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvZ2VuX3N0YXRzLmgKQEAgLTAsMCArMSw2NyBAQAorI2lmbmRlZiBfX0xJTlVYX0dFTl9TVEFUU19ICisjZGVmaW5lIF9fTElOVVhfR0VOX1NUQVRTX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK2VudW0geworCVRDQV9TVEFUU19VTlNQRUMsCisJVENBX1NUQVRTX0JBU0lDLAorCVRDQV9TVEFUU19SQVRFX0VTVCwKKwlUQ0FfU1RBVFNfUVVFVUUsCisJVENBX1NUQVRTX0FQUCwKKwlfX1RDQV9TVEFUU19NQVgsCit9OworI2RlZmluZSBUQ0FfU1RBVFNfTUFYIChfX1RDQV9TVEFUU19NQVggLSAxKQorCisvKioKKyAqIHN0cnVjdCBnbmV0X3N0YXRzX2Jhc2ljIC0gYnl0ZS9wYWNrZXQgdGhyb3VnaHB1dCBzdGF0aXN0aWNzCisgKiBAYnl0ZXM6IG51bWJlciBvZiBzZWVuIGJ5dGVzCisgKiBAcGFja2V0czogbnVtYmVyIG9mIHNlZW4gcGFja2V0cworICovCitzdHJ1Y3QgZ25ldF9zdGF0c19iYXNpYworeworCV9fdTY0CWJ5dGVzOworCV9fdTMyCXBhY2tldHM7Cit9OworCisvKioKKyAqIHN0cnVjdCBnbmV0X3N0YXRzX3JhdGVfZXN0IC0gcmF0ZSBlc3RpbWF0b3IKKyAqIEBicHM6IGN1cnJlbnQgYnl0ZSByYXRlCisgKiBAcHBzOiBjdXJyZW50IHBhY2tldCByYXRlCisgKi8KK3N0cnVjdCBnbmV0X3N0YXRzX3JhdGVfZXN0Cit7CisJX191MzIJYnBzOworCV9fdTMyCXBwczsKK307CisKKy8qKgorICogc3RydWN0IGduZXRfc3RhdHNfcXVldWUgLSBxdWV1aW5nIHN0YXRpc3RpY3MKKyAqIEBxbGVuOiBxdWV1ZSBsZW5ndGgKKyAqIEBiYWNrbG9nOiBiYWNrbG9nIHNpemUgb2YgcXVldWUKKyAqIEBkcm9wczogbnVtYmVyIG9mIGRyb3BwZWQgcGFja2V0cworICogQHJlcXVldWVzOiBudW1iZXIgb2YgcmVxdWV1ZXMKKyAqIEBvdmVybGltaXRzOiBudW1iZXIgb2YgZW5xdWV1ZXMgb3ZlciB0aGUgbGltaXQKKyAqLworc3RydWN0IGduZXRfc3RhdHNfcXVldWUKK3sKKwlfX3UzMglxbGVuOworCV9fdTMyCWJhY2tsb2c7CisJX191MzIJZHJvcHM7CisJX191MzIJcmVxdWV1ZXM7CisJX191MzIJb3ZlcmxpbWl0czsKK307CisKKy8qKgorICogc3RydWN0IGduZXRfZXN0aW1hdG9yIC0gcmF0ZSBlc3RpbWF0b3IgY29uZmlndXJhdGlvbgorICogQGludGVydmFsOiBzYW1wbGluZyBwZXJpb2QKKyAqIEBld21hX2xvZzogdGhlIGxvZyBvZiBtZWFzdXJlbWVudCB3aW5kb3cgd2VpZ2h0CisgKi8KK3N0cnVjdCBnbmV0X2VzdGltYXRvcgoreworCXNpZ25lZCBjaGFyCWludGVydmFsOworCXVuc2lnbmVkIGNoYXIJZXdtYV9sb2c7Cit9OworCisKKyNlbmRpZiAvKiBfX0xJTlVYX0dFTl9TVEFUU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2dlbmVyaWNfc2VyaWFsLmggYi9pbmNsdWRlL2xpbnV4L2dlbmVyaWNfc2VyaWFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFiZTlkOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvZ2VuZXJpY19zZXJpYWwuaApAQCAtMCwwICsxLDk2IEBACisvKgorICogIGdlbmVyaWNfc2VyaWFsLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk4IFIuRS5Xb2xmZkBCaXRXaXphcmQubmwKKyAqCisgKiAgd3JpdHRlbiBmb3IgdGhlIFNYIHNlcmlhbCBkcml2ZXIuCisgKiAgICAgQ29udGFpbnMgdGhlIGNvZGUgdGhhdCBzaG91bGQgYmUgc2hhcmVkIG92ZXIgYWxsIHRoZSBzZXJpYWwgZHJpdmVycy4KKyAqCisgKiAgVmVyc2lvbiAwLjEgLS0gRGVjZW1iZXIsIDE5OTguCisgKi8KKworI2lmbmRlZiBHRU5FUklDX1NFUklBTF9ICisjZGVmaW5lIEdFTkVSSUNfU0VSSUFMX0gKKworc3RydWN0IHJlYWxfZHJpdmVyIHsKKyAgdm9pZCAgICAgICAgICAgICAgICAgICAgKCpkaXNhYmxlX3R4X2ludGVycnVwdHMpICh2b2lkICopOworICB2b2lkICAgICAgICAgICAgICAgICAgICAoKmVuYWJsZV90eF9pbnRlcnJ1cHRzKSAodm9pZCAqKTsKKyAgdm9pZCAgICAgICAgICAgICAgICAgICAgKCpkaXNhYmxlX3J4X2ludGVycnVwdHMpICh2b2lkICopOworICB2b2lkICAgICAgICAgICAgICAgICAgICAoKmVuYWJsZV9yeF9pbnRlcnJ1cHRzKSAodm9pZCAqKTsKKyAgaW50ICAgICAgICAgICAgICAgICAgICAgKCpnZXRfQ0QpICh2b2lkICopOworICB2b2lkICAgICAgICAgICAgICAgICAgICAoKnNodXRkb3duX3BvcnQpICh2b2lkKik7CisgIGludCAgICAgICAgICAgICAgICAgICAgICgqc2V0X3JlYWxfdGVybWlvcykgKHZvaWQqKTsKKyAgaW50ICAgICAgICAgICAgICAgICAgICAgKCpjaGFyc19pbl9idWZmZXIpICh2b2lkKik7CisgIHZvaWQgICAgICAgICAgICAgICAgICAgICgqY2xvc2UpICh2b2lkKik7CisgIHZvaWQgICAgICAgICAgICAgICAgICAgICgqaHVuZ3VwKSAodm9pZCopOworICB2b2lkICAgICAgICAgICAgICAgICAgICAoKmdldHNlcmlhbCkgKHZvaWQqLCBzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCAqc3ApOworfTsKKworCisKK3N0cnVjdCBnc19wb3J0IHsKKyAgaW50ICAgICAgICAgICAgICAgICAgICAgbWFnaWM7CisgIHVuc2lnbmVkIGNoYXIgICAgICAgICAgICp4bWl0X2J1ZjsgCisgIGludCAgICAgICAgICAgICAgICAgICAgIHhtaXRfaGVhZDsKKyAgaW50ICAgICAgICAgICAgICAgICAgICAgeG1pdF90YWlsOworICBpbnQgICAgICAgICAgICAgICAgICAgICB4bWl0X2NudDsKKyAgc3RydWN0IHNlbWFwaG9yZSAgICAgICAgcG9ydF93cml0ZV9zZW07CisgIGludCAgICAgICAgICAgICAgICAgICAgIGZsYWdzOworICB3YWl0X3F1ZXVlX2hlYWRfdCAgICAgICBvcGVuX3dhaXQ7CisgIHdhaXRfcXVldWVfaGVhZF90ICAgICAgIGNsb3NlX3dhaXQ7CisgIGludCAgICAgICAgICAgICAgICAgICAgIGNvdW50OworICBpbnQgICAgICAgICAgICAgICAgICAgICBibG9ja2VkX29wZW47CisgIHN0cnVjdCB0dHlfc3RydWN0ICAgICAgICp0dHk7CisgIHVuc2lnbmVkIGxvbmcgICAgICAgICAgIGV2ZW50OworICB1bnNpZ25lZCBzaG9ydCAgICAgICAgICBjbG9zaW5nX3dhaXQ7CisgIGludCAgICAgICAgICAgICAgICAgICAgIGNsb3NlX2RlbGF5OworICBzdHJ1Y3QgcmVhbF9kcml2ZXIgICAgICAqcmQ7CisgIGludCAgICAgICAgICAgICAgICAgICAgIHdha2V1cF9jaGFyczsKKyAgaW50ICAgICAgICAgICAgICAgICAgICAgYmF1ZF9iYXNlOworICBpbnQgICAgICAgICAgICAgICAgICAgICBiYXVkOworICBpbnQgICAgICAgICAgICAgICAgICAgICBjdXN0b21fZGl2aXNvcjsKKyAgc3BpbmxvY2tfdCAgICAgICAgICAgICAgZHJpdmVyX2xvY2s7Cit9OworCisKKy8qIEZsYWdzICovCisvKiBXYXJuaW5nOiBzZXJpYWwuaCBkZWZpbmVzIHNvbWUgQVNZTkNfIGZsYWdzLCB0aGV5IHNheSB0aGV5IGFyZSAib25seSIKKyAgIHVzZWQgaW4gc2VyaWFsLmMsIGJ1dCB0aGV5IGFyZSBhbHNvIHVzZWQgaW4gYWxsIG90aGVyIHNlcmlhbCBkcml2ZXJzLiAKKyAgIE1ha2Ugc3VyZSB0aGV5IGRvbid0IGNsYXNoIHdpdGggdGhlc2UgaGVyZS4uLiAqLworI2RlZmluZSBHU19UWF9JTlRFTiAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgR1NfUlhfSU5URU4gICAgICAweDAwNDAwMDAwCisjZGVmaW5lIEdTX0FDVElWRSAgICAgICAgMHgwMDIwMDAwMAorCisKKworI2RlZmluZSBHU19UWVBFX05PUk1BTCAgIDEKKworI2RlZmluZSBHU19ERUJVR19GTFVTSCAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgR1NfREVCVUdfQlRSICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEdTX0RFQlVHX1RFUk1JT1MgMHgwMDAwMDAwNAorI2RlZmluZSBHU19ERUJVR19TVFVGRiAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgR1NfREVCVUdfQ0xPU0UgICAweDAwMDAwMDEwCisjZGVmaW5lIEdTX0RFQlVHX0ZMT1cgICAgMHgwMDAwMDAyMAorI2RlZmluZSBHU19ERUJVR19XUklURSAgIDB4MDAwMDAwNDAKKworCit2b2lkIGdzX3B1dF9jaGFyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHVuc2lnbmVkIGNoYXIgY2gpOworaW50ICBnc193cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCAKKyAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCk7CitpbnQgIGdzX3dyaXRlX3Jvb20oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CitpbnQgIGdzX2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKK3ZvaWQgZ3NfZmx1c2hfYnVmZmVyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwordm9pZCBnc19mbHVzaF9jaGFycyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKK3ZvaWQgZ3Nfc3RvcChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKK3ZvaWQgZ3Nfc3RhcnQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7Cit2b2lkIGdzX2hhbmd1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKK2ludCAgZ3NfYmxvY2tfdGlsX3JlYWR5KHZvaWQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKTsKK3ZvaWQgZ3NfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHApOwordm9pZCBnc19zZXRfdGVybWlvcyAoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHksIAorICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRlcm1pb3MgKiBvbGRfdGVybWlvcyk7CitpbnQgIGdzX2luaXRfcG9ydChzdHJ1Y3QgZ3NfcG9ydCAqcG9ydCk7CitpbnQgIGdzX3NldHNlcmlhbChzdHJ1Y3QgZ3NfcG9ydCAqcG9ydCwgc3RydWN0IHNlcmlhbF9zdHJ1Y3QgX191c2VyICpzcCk7CitpbnQgIGdzX2dldHNlcmlhbChzdHJ1Y3QgZ3NfcG9ydCAqcG9ydCwgc3RydWN0IHNlcmlhbF9zdHJ1Y3QgX191c2VyICpzcCk7Cit2b2lkIGdzX2dvdF9icmVhayhzdHJ1Y3QgZ3NfcG9ydCAqcG9ydCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9nZW5oZC5oIGIvaW5jbHVkZS9saW51eC9nZW5oZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3ZGVkYWYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2dlbmhkLmgKQEAgLTAsMCArMSw0MjQgQEAKKyNpZm5kZWYgX0xJTlVYX0dFTkhEX0gKKyNkZWZpbmUgX0xJTlVYX0dFTkhEX0gKKworLyoKKyAqIAlnZW5oZC5oIENvcHlyaWdodCAoQykgMTk5MiBEcmV3IEVja2hhcmR0CisgKglHZW5lcmljIGhhcmQgZGlzayBoZWFkZXIgZmlsZSBieSAgCisgKiAJCURyZXcgRWNraGFyZHQKKyAqCisgKgkJPGRyZXdAY29sb3JhZG8uZWR1PgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKworZW51bSB7CisvKiBUaGVzZSB0aHJlZSBoYXZlIGlkZW50aWNhbCBiZWhhdmlvdXI7IHVzZSB0aGUgc2Vjb25kIG9uZSBpZiBET1MgRkRJU0sgZ2V0cworICAgY29uZnVzZWQgYWJvdXQgZXh0ZW5kZWQvbG9naWNhbCBwYXJ0aXRpb25zIHN0YXJ0aW5nIHBhc3QgY3lsaW5kZXIgMTAyMy4gKi8KKwlET1NfRVhURU5ERURfUEFSVElUSU9OID0gNSwKKwlMSU5VWF9FWFRFTkRFRF9QQVJUSVRJT04gPSAweDg1LAorCVdJTjk4X0VYVEVOREVEX1BBUlRJVElPTiA9IDB4MGYsCisKKwlMSU5VWF9TV0FQX1BBUlRJVElPTiA9IDB4ODIsCisJTElOVVhfUkFJRF9QQVJUSVRJT04gPSAweGZkLAkvKiBhdXRvZGV0ZWN0IFJBSUQgcGFydGl0aW9uICovCisKKwlTT0xBUklTX1g4Nl9QQVJUSVRJT04gPQlMSU5VWF9TV0FQX1BBUlRJVElPTiwKKwlORVdfU09MQVJJU19YODZfUEFSVElUSU9OID0gMHhiZiwKKworCURNNl9BVVgxUEFSVElUSU9OID0gMHg1MSwJLyogbm8gRERPOiAgdXNlIHhsYXRlZCBnZW9tICovCisJRE02X0FVWDNQQVJUSVRJT04gPSAweDUzLAkvKiBubyBERE86ICB1c2UgeGxhdGVkIGdlb20gKi8KKwlETTZfUEFSVElUSU9OID0JMHg1NCwJCS8qIGhhcyBERE86IHVzZSB4bGF0ZWQgZ2VvbSAmIG9mZnNldCAqLworCUVaRF9QQVJUSVRJT04gPQkweDU1LAkJLyogRVotRFJJVkUgKi8KKworCUZSRUVCU0RfUEFSVElUSU9OID0gMHhhNSwJLyogRnJlZUJTRCBQYXJ0aXRpb24gSUQgKi8KKwlPUEVOQlNEX1BBUlRJVElPTiA9IDB4YTYsCS8qIE9wZW5CU0QgUGFydGl0aW9uIElEICovCisJTkVUQlNEX1BBUlRJVElPTiA9IDB4YTksCS8qIE5ldEJTRCBQYXJ0aXRpb24gSUQgKi8KKwlCU0RJX1BBUlRJVElPTiA9IDB4YjcsCQkvKiBCU0RJIFBhcnRpdGlvbiBJRCAqLworCU1JTklYX1BBUlRJVElPTiA9IDB4ODEsCQkvKiBNaW5peCBQYXJ0aXRpb24gSUQgKi8KKwlVTklYV0FSRV9QQVJUSVRJT04gPSAweDYzLAkvKiBTYW1lIGFzIEdOVV9IVVJEIGFuZCBTQ08gVW5peCAqLworfTsKKworI2lmbmRlZiBfX0tFUk5FTF9fCisKK3N0cnVjdCBwYXJ0aXRpb24geworCXVuc2lnbmVkIGNoYXIgYm9vdF9pbmQ7CQkvKiAweDgwIC0gYWN0aXZlICovCisJdW5zaWduZWQgY2hhciBoZWFkOwkJLyogc3RhcnRpbmcgaGVhZCAqLworCXVuc2lnbmVkIGNoYXIgc2VjdG9yOwkJLyogc3RhcnRpbmcgc2VjdG9yICovCisJdW5zaWduZWQgY2hhciBjeWw7CQkvKiBzdGFydGluZyBjeWxpbmRlciAqLworCXVuc2lnbmVkIGNoYXIgc3lzX2luZDsJCS8qIFdoYXQgcGFydGl0aW9uIHR5cGUgKi8KKwl1bnNpZ25lZCBjaGFyIGVuZF9oZWFkOwkJLyogZW5kIGhlYWQgKi8KKwl1bnNpZ25lZCBjaGFyIGVuZF9zZWN0b3I7CS8qIGVuZCBzZWN0b3IgKi8KKwl1bnNpZ25lZCBjaGFyIGVuZF9jeWw7CQkvKiBlbmQgY3lsaW5kZXIgKi8KKwl1bnNpZ25lZCBpbnQgc3RhcnRfc2VjdDsJLyogc3RhcnRpbmcgc2VjdG9yIGNvdW50aW5nIGZyb20gMCAqLworCXVuc2lnbmVkIGludCBucl9zZWN0czsJCS8qIG5yIG9mIHNlY3RvcnMgaW4gcGFydGl0aW9uICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZW5kaWYKKworI2lmZGVmIF9fS0VSTkVMX18KK3N0cnVjdCBwYXJ0aXRpb24geworCXVuc2lnbmVkIGNoYXIgYm9vdF9pbmQ7CQkvKiAweDgwIC0gYWN0aXZlICovCisJdW5zaWduZWQgY2hhciBoZWFkOwkJLyogc3RhcnRpbmcgaGVhZCAqLworCXVuc2lnbmVkIGNoYXIgc2VjdG9yOwkJLyogc3RhcnRpbmcgc2VjdG9yICovCisJdW5zaWduZWQgY2hhciBjeWw7CQkvKiBzdGFydGluZyBjeWxpbmRlciAqLworCXVuc2lnbmVkIGNoYXIgc3lzX2luZDsJCS8qIFdoYXQgcGFydGl0aW9uIHR5cGUgKi8KKwl1bnNpZ25lZCBjaGFyIGVuZF9oZWFkOwkJLyogZW5kIGhlYWQgKi8KKwl1bnNpZ25lZCBjaGFyIGVuZF9zZWN0b3I7CS8qIGVuZCBzZWN0b3IgKi8KKwl1bnNpZ25lZCBjaGFyIGVuZF9jeWw7CQkvKiBlbmQgY3lsaW5kZXIgKi8KKwlfX2xlMzIgc3RhcnRfc2VjdDsJLyogc3RhcnRpbmcgc2VjdG9yIGNvdW50aW5nIGZyb20gMCAqLworCV9fbGUzMiBucl9zZWN0czsJCS8qIG5yIG9mIHNlY3RvcnMgaW4gcGFydGl0aW9uICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgaGRfc3RydWN0IHsKKwlzZWN0b3JfdCBzdGFydF9zZWN0OworCXNlY3Rvcl90IG5yX3NlY3RzOworCXN0cnVjdCBrb2JqZWN0IGtvYmo7CisJdW5zaWduZWQgcmVhZHMsIHJlYWRfc2VjdG9ycywgd3JpdGVzLCB3cml0ZV9zZWN0b3JzOworCWludCBwb2xpY3ksIHBhcnRubzsKK307CisKKyNkZWZpbmUgR0VOSERfRkxfUkVNT1ZBQkxFCQkJMQorI2RlZmluZSBHRU5IRF9GTF9EUklWRVJGUwkJCTIKKyNkZWZpbmUgR0VOSERfRkxfQ0QJCQkJOAorI2RlZmluZSBHRU5IRF9GTF9VUAkJCQkxNgorI2RlZmluZSBHRU5IRF9GTF9TVVBQUkVTU19QQVJUSVRJT05fSU5GTwkzMgorCitzdHJ1Y3QgZGlza19zdGF0cyB7CisJdW5zaWduZWQgcmVhZF9zZWN0b3JzLCB3cml0ZV9zZWN0b3JzOworCXVuc2lnbmVkIHJlYWRzLCB3cml0ZXM7CisJdW5zaWduZWQgcmVhZF9tZXJnZXMsIHdyaXRlX21lcmdlczsKKwl1bnNpZ25lZCByZWFkX3RpY2tzLCB3cml0ZV90aWNrczsKKwl1bnNpZ25lZCBpb190aWNrczsKKwl1bnNpZ25lZCB0aW1lX2luX3F1ZXVlOworfTsKKwkKK3N0cnVjdCBnZW5kaXNrIHsKKwlpbnQgbWFqb3I7CQkJLyogbWFqb3IgbnVtYmVyIG9mIGRyaXZlciAqLworCWludCBmaXJzdF9taW5vcjsKKwlpbnQgbWlub3JzOyAgICAgICAgICAgICAgICAgICAgIC8qIG1heGltdW0gbnVtYmVyIG9mIG1pbm9ycywgPTEgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogZGlza3MgdGhhdCBjYW4ndCBiZSBwYXJ0aXRpb25lZC4gKi8KKwljaGFyIGRpc2tfbmFtZVszMl07CQkvKiBuYW1lIG9mIG1ham9yIGRyaXZlciAqLworCXN0cnVjdCBoZF9zdHJ1Y3QgKipwYXJ0OwkvKiBbaW5kZXhlZCBieSBtaW5vcl0gKi8KKwlzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgKmZvcHM7CisJc3RydWN0IHJlcXVlc3RfcXVldWUgKnF1ZXVlOworCXZvaWQgKnByaXZhdGVfZGF0YTsKKwlzZWN0b3JfdCBjYXBhY2l0eTsKKworCWludCBmbGFnczsKKwljaGFyIGRldmZzX25hbWVbNjRdOwkJLyogZGV2ZnMgY3JhcCAqLworCWludCBudW1iZXI7CQkJLyogbW9yZSBvZiB0aGUgc2FtZSAqLworCXN0cnVjdCBkZXZpY2UgKmRyaXZlcmZzX2RldjsKKwlzdHJ1Y3Qga29iamVjdCBrb2JqOworCisJc3RydWN0IHRpbWVyX3JhbmRfc3RhdGUgKnJhbmRvbTsKKwlpbnQgcG9saWN5OworCisJYXRvbWljX3Qgc3luY19pbzsJCS8qIFJBSUQgKi8KKwl1bnNpZ25lZCBsb25nIHN0YW1wLCBzdGFtcF9pZGxlOworCWludCBpbl9mbGlnaHQ7CisjaWZkZWYJQ09ORklHX1NNUAorCXN0cnVjdCBkaXNrX3N0YXRzICpka3N0YXRzOworI2Vsc2UKKwlzdHJ1Y3QgZGlza19zdGF0cyBka3N0YXRzOworI2VuZGlmCit9OworCisvKiBTdHJ1Y3R1cmUgZm9yIHN5c2ZzIGF0dHJpYnV0ZXMgb24gYmxvY2sgZGV2aWNlcyAqLworc3RydWN0IGRpc2tfYXR0cmlidXRlIHsKKwlzdHJ1Y3QgYXR0cmlidXRlIGF0dHI7CisJc3NpemVfdCAoKnNob3cpKHN0cnVjdCBnZW5kaXNrICosIGNoYXIgKik7Cit9OworCisvKiAKKyAqIE1hY3JvcyB0byBvcGVyYXRlIG9uIHBlcmNwdSBkaXNrIHN0YXRpc3RpY3M6CisgKgorICogVGhlIF9fIHZhcmlhbnRzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBpbiBjcml0aWNhbCBzZWN0aW9ucy4gVGhlIGZ1bGwKKyAqIHZhcmlhbnRzIGRpc2FibGUvZW5hYmxlIHByZWVtcHRpb24uCisgKi8KKyNpZmRlZglDT05GSUdfU01QCisjZGVmaW5lIF9fZGlza19zdGF0X2FkZChnZW5kaXNrcCwgZmllbGQsIGFkZG5kKSAJXAorCShwZXJfY3B1X3B0cihnZW5kaXNrcC0+ZGtzdGF0cywgc21wX3Byb2Nlc3Nvcl9pZCgpKS0+ZmllbGQgKz0gYWRkbmQpCisKKyNkZWZpbmUgZGlza19zdGF0X3JlYWQoZ2VuZGlza3AsIGZpZWxkKQkJCQkJXAorKHsJCQkJCQkJCQlcCisJdHlwZW9mKGdlbmRpc2twLT5ka3N0YXRzLT5maWVsZCkgcmVzID0gMDsJCQlcCisJaW50IGk7CQkJCQkJCQlcCisJZm9yIChpPTA7IGkgPCBOUl9DUFVTOyBpKyspIHsJCQkJCVwKKwkJaWYgKCFjcHVfcG9zc2libGUoaSkpCQkJCQlcCisJCQljb250aW51ZTsJCQkJCVwKKwkJcmVzICs9IHBlcl9jcHVfcHRyKGdlbmRpc2twLT5ka3N0YXRzLCBpKS0+ZmllbGQ7CVwKKwl9CQkJCQkJCQlcCisJcmVzOwkJCQkJCQkJXAorfSkKKworc3RhdGljIGlubGluZSB2b2lkIGRpc2tfc3RhdF9zZXRfYWxsKHN0cnVjdCBnZW5kaXNrICpnZW5kaXNrcCwgaW50IHZhbHVlKQl7CisJaW50IGk7CisJZm9yIChpPTA7IGkgPCBOUl9DUFVTOyBpKyspIHsKKwkJaWYgKGNwdV9wb3NzaWJsZShpKSkgeworCQkJbWVtc2V0KHBlcl9jcHVfcHRyKGdlbmRpc2twLT5ka3N0YXRzLCBpKSwgdmFsdWUsCQorCQkJCQlzaXplb2YgKHN0cnVjdCBkaXNrX3N0YXRzKSk7CisJCX0KKwl9Cit9CQkKKwkJCQkKKyNlbHNlCisjZGVmaW5lIF9fZGlza19zdGF0X2FkZChnZW5kaXNrcCwgZmllbGQsIGFkZG5kKSBcCisJCQkJKGdlbmRpc2twLT5ka3N0YXRzLmZpZWxkICs9IGFkZG5kKQorI2RlZmluZSBkaXNrX3N0YXRfcmVhZChnZW5kaXNrcCwgZmllbGQpCShnZW5kaXNrcC0+ZGtzdGF0cy5maWVsZCkKKworc3RhdGljIGlubGluZSB2b2lkIGRpc2tfc3RhdF9zZXRfYWxsKHN0cnVjdCBnZW5kaXNrICpnZW5kaXNrcCwgaW50IHZhbHVlKQl7CisJbWVtc2V0KCZnZW5kaXNrcC0+ZGtzdGF0cywgdmFsdWUsIHNpemVvZiAoc3RydWN0IGRpc2tfc3RhdHMpKTsKK30KKyNlbmRpZgorCisjZGVmaW5lIGRpc2tfc3RhdF9hZGQoZ2VuZGlza3AsIGZpZWxkLCBhZGRuZCkJCQlcCisJZG8gewkJCQkJCQlcCisJCXByZWVtcHRfZGlzYWJsZSgpOwkJCQlcCisJCV9fZGlza19zdGF0X2FkZChnZW5kaXNrcCwgZmllbGQsIGFkZG5kKTsJXAorCQlwcmVlbXB0X2VuYWJsZSgpOwkJCQlcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBfX2Rpc2tfc3RhdF9kZWMoZ2VuZGlza3AsIGZpZWxkKSBfX2Rpc2tfc3RhdF9hZGQoZ2VuZGlza3AsIGZpZWxkLCAtMSkKKyNkZWZpbmUgZGlza19zdGF0X2RlYyhnZW5kaXNrcCwgZmllbGQpIGRpc2tfc3RhdF9hZGQoZ2VuZGlza3AsIGZpZWxkLCAtMSkKKworI2RlZmluZSBfX2Rpc2tfc3RhdF9pbmMoZ2VuZGlza3AsIGZpZWxkKSBfX2Rpc2tfc3RhdF9hZGQoZ2VuZGlza3AsIGZpZWxkLCAxKQorI2RlZmluZSBkaXNrX3N0YXRfaW5jKGdlbmRpc2twLCBmaWVsZCkgZGlza19zdGF0X2FkZChnZW5kaXNrcCwgZmllbGQsIDEpCisKKyNkZWZpbmUgX19kaXNrX3N0YXRfc3ViKGdlbmRpc2twLCBmaWVsZCwgc3VibmQpIFwKKwkJX19kaXNrX3N0YXRfYWRkKGdlbmRpc2twLCBmaWVsZCwgLXN1Ym5kKQorI2RlZmluZSBkaXNrX3N0YXRfc3ViKGdlbmRpc2twLCBmaWVsZCwgc3VibmQpIFwKKwkJZGlza19zdGF0X2FkZChnZW5kaXNrcCwgZmllbGQsIC1zdWJuZCkKKworCisvKiBJbmxpbmVzIHRvIGFsbG9jIGFuZCBmcmVlIGRpc2sgc3RhdHMgaW4gc3RydWN0IGdlbmRpc2sgKi8KKyNpZmRlZiAgQ09ORklHX1NNUAorc3RhdGljIGlubGluZSBpbnQgaW5pdF9kaXNrX3N0YXRzKHN0cnVjdCBnZW5kaXNrICpkaXNrKQoreworCWRpc2stPmRrc3RhdHMgPSBhbGxvY19wZXJjcHUoc3RydWN0IGRpc2tfc3RhdHMpOworCWlmICghZGlzay0+ZGtzdGF0cykKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX2Rpc2tfc3RhdHMoc3RydWN0IGdlbmRpc2sgKmRpc2spCit7CisJZnJlZV9wZXJjcHUoZGlzay0+ZGtzdGF0cyk7Cit9CisjZWxzZQkvKiBDT05GSUdfU01QICovCitzdGF0aWMgaW5saW5lIGludCBpbml0X2Rpc2tfc3RhdHMoc3RydWN0IGdlbmRpc2sgKmRpc2spCit7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX2Rpc2tfc3RhdHMoc3RydWN0IGdlbmRpc2sgKmRpc2spCit7Cit9CisjZW5kaWYJLyogQ09ORklHX1NNUCAqLworCisvKiBkcml2ZXJzL2Jsb2NrL2xsX3J3X2Jsay5jICovCitleHRlcm4gdm9pZCBkaXNrX3JvdW5kX3N0YXRzKHN0cnVjdCBnZW5kaXNrICpkaXNrKTsKKworLyogZHJpdmVycy9ibG9jay9nZW5oZC5jICovCitleHRlcm4gaW50IGdldF9ibGtkZXZfbGlzdChjaGFyICopOworZXh0ZXJuIHZvaWQgYWRkX2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spOworZXh0ZXJuIHZvaWQgZGVsX2dlbmRpc2soc3RydWN0IGdlbmRpc2sgKmdwKTsKK2V4dGVybiB2b2lkIHVubGlua19nZW5kaXNrKHN0cnVjdCBnZW5kaXNrICpncCk7CitleHRlcm4gc3RydWN0IGdlbmRpc2sgKmdldF9nZW5kaXNrKGRldl90IGRldiwgaW50ICpwYXJ0KTsKKworZXh0ZXJuIHZvaWQgc2V0X2RldmljZV9ybyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBpbnQgZmxhZyk7CitleHRlcm4gdm9pZCBzZXRfZGlza19ybyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgaW50IGZsYWcpOworCisvKiBkcml2ZXJzL2NoYXIvcmFuZG9tLmMgKi8KK2V4dGVybiB2b2lkIGFkZF9kaXNrX3JhbmRvbW5lc3Moc3RydWN0IGdlbmRpc2sgKmRpc2spOworZXh0ZXJuIHZvaWQgcmFuZF9pbml0aWFsaXplX2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spOworCitzdGF0aWMgaW5saW5lIHNlY3Rvcl90IGdldF9zdGFydF9zZWN0KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpCit7CisJcmV0dXJuIGJkZXYtPmJkX2NvbnRhaW5zID09IGJkZXYgPyAwIDogYmRldi0+YmRfcGFydC0+c3RhcnRfc2VjdDsKK30KK3N0YXRpYyBpbmxpbmUgc2VjdG9yX3QgZ2V0X2NhcGFjaXR5KHN0cnVjdCBnZW5kaXNrICpkaXNrKQoreworCXJldHVybiBkaXNrLT5jYXBhY2l0eTsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfY2FwYWNpdHkoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHNlY3Rvcl90IHNpemUpCit7CisJZGlzay0+Y2FwYWNpdHkgPSBzaXplOworfQorCisjZW5kaWYgIC8qICBfX0tFUk5FTF9fICAqLworCisjaWZkZWYgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTgorCisjZGVmaW5lIFNPTEFSSVNfWDg2X05VTVNMSUNFCTgKKyNkZWZpbmUgU09MQVJJU19YODZfVlRPQ19TQU5FCSgweDYwMERERUVFVUwpCisKK3N0cnVjdCBzb2xhcmlzX3g4Nl9zbGljZSB7CisJX19sZTE2IHNfdGFnOwkJLyogSUQgdGFnIG9mIHBhcnRpdGlvbiAqLworCV9fbGUxNiBzX2ZsYWc7CQkvKiBwZXJtaXNzaW9uIGZsYWdzICovCisJX19sZTMyIHNfc3RhcnQ7CQkvKiBzdGFydCBzZWN0b3Igbm8gb2YgcGFydGl0aW9uICovCisJX19sZTMyIHNfc2l6ZTsJCS8qICMgb2YgYmxvY2tzIGluIHBhcnRpdGlvbiAqLworfTsKKworc3RydWN0IHNvbGFyaXNfeDg2X3Z0b2MgeworCXVuc2lnbmVkIGludCB2X2Jvb3RpbmZvWzNdOwkvKiBpbmZvIG5lZWRlZCBieSBtYm9vdCAodW5zdXBwb3J0ZWQpICovCisJX19sZTMyIHZfc2FuaXR5OwkJLyogdG8gdmVyaWZ5IHZ0b2Mgc2FuaXR5ICovCisJX19sZTMyIHZfdmVyc2lvbjsJCS8qIGxheW91dCB2ZXJzaW9uICovCisJY2hhcgl2X3ZvbHVtZVs4XTsJCS8qIHZvbHVtZSBuYW1lICovCisJX19sZTE2CXZfc2VjdG9yc3o7CQkvKiBzZWN0b3Igc2l6ZSBpbiBieXRlcyAqLworCV9fbGUxNgl2X25wYXJ0czsJCS8qIG51bWJlciBvZiBwYXJ0aXRpb25zICovCisJdW5zaWduZWQgaW50IHZfcmVzZXJ2ZWRbMTBdOwkvKiBmcmVlIHNwYWNlICovCisJc3RydWN0IHNvbGFyaXNfeDg2X3NsaWNlCisJCXZfc2xpY2VbU09MQVJJU19YODZfTlVNU0xJQ0VdOyAvKiBzbGljZSBoZWFkZXJzICovCisJdW5zaWduZWQgaW50IHRpbWVzdGFtcFtTT0xBUklTX1g4Nl9OVU1TTElDRV07IC8qIHRpbWVzdGFtcCAodW5zdXBwb3J0ZWQpICovCisJY2hhcgl2X2FzY2lpbGFiZWxbMTI4XTsJLyogZm9yIGNvbXBhdGliaWxpdHkgKi8KK307CisKKyNlbmRpZiAvKiBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OICovCisKKyNpZmRlZiBDT05GSUdfQlNEX0RJU0tMQUJFTAorLyoKKyAqIEJTRCBkaXNrbGFiZWwgc3VwcG9ydCBieSBZb3NzaSBHb3R0bGllYiA8eW9nb0BtYXRoLnRhdS5hYy5pbD4KKyAqIHVwZGF0ZWQgYnkgTWFyYyBFc3BpZSA8TWFyYy5Fc3BpZUBvcGVuYnNkLm9yZz4KKyAqLworCisvKiBjaGVjayBhZ2FpbnN0IEJTRCBzcmMvc3lzL3N5cy9kaXNrbGFiZWwuaCBmb3IgY29uc2lzdGVuY3kgKi8KKworI2RlZmluZSBCU0RfRElTS01BR0lDCSgweDgyNTY0NTU3VUwpCS8qIFRoZSBkaXNrIG1hZ2ljIG51bWJlciAqLworI2RlZmluZSBCU0RfTUFYUEFSVElUSU9OUwkxNgorI2RlZmluZSBPUEVOQlNEX01BWFBBUlRJVElPTlMJMTYKKyNkZWZpbmUgQlNEX0ZTX1VOVVNFRAkJMAkvKiBkaXNrbGFiZWwgdW51c2VkIHBhcnRpdGlvbiBlbnRyeSBJRCAqLworc3RydWN0IGJzZF9kaXNrbGFiZWwgeworCV9fbGUzMglkX21hZ2ljOwkJLyogdGhlIG1hZ2ljIG51bWJlciAqLworCV9fczE2CWRfdHlwZTsJCQkvKiBkcml2ZSB0eXBlICovCisJX19zMTYJZF9zdWJ0eXBlOwkJLyogY29udHJvbGxlci9kX3R5cGUgc3BlY2lmaWMgKi8KKwljaGFyCWRfdHlwZW5hbWVbMTZdOwkJLyogdHlwZSBuYW1lLCBlLmcuICJlYWdsZSIgKi8KKwljaGFyCWRfcGFja25hbWVbMTZdOwkJCS8qIHBhY2sgaWRlbnRpZmllciAqLyAKKwlfX3UzMglkX3NlY3NpemU7CQkvKiAjIG9mIGJ5dGVzIHBlciBzZWN0b3IgKi8KKwlfX3UzMglkX25zZWN0b3JzOwkJLyogIyBvZiBkYXRhIHNlY3RvcnMgcGVyIHRyYWNrICovCisJX191MzIJZF9udHJhY2tzOwkJLyogIyBvZiB0cmFja3MgcGVyIGN5bGluZGVyICovCisJX191MzIJZF9uY3lsaW5kZXJzOwkJLyogIyBvZiBkYXRhIGN5bGluZGVycyBwZXIgdW5pdCAqLworCV9fdTMyCWRfc2VjcGVyY3lsOwkJLyogIyBvZiBkYXRhIHNlY3RvcnMgcGVyIGN5bGluZGVyICovCisJX191MzIJZF9zZWNwZXJ1bml0OwkJLyogIyBvZiBkYXRhIHNlY3RvcnMgcGVyIHVuaXQgKi8KKwlfX3UxNglkX3NwYXJlc3BlcnRyYWNrOwkvKiAjIG9mIHNwYXJlIHNlY3RvcnMgcGVyIHRyYWNrICovCisJX191MTYJZF9zcGFyZXNwZXJjeWw7CQkvKiAjIG9mIHNwYXJlIHNlY3RvcnMgcGVyIGN5bGluZGVyICovCisJX191MzIJZF9hY3lsaW5kZXJzOwkJLyogIyBvZiBhbHQuIGN5bGluZGVycyBwZXIgdW5pdCAqLworCV9fdTE2CWRfcnBtOwkJCS8qIHJvdGF0aW9uYWwgc3BlZWQgKi8KKwlfX3UxNglkX2ludGVybGVhdmU7CQkvKiBoYXJkd2FyZSBzZWN0b3IgaW50ZXJsZWF2ZSAqLworCV9fdTE2CWRfdHJhY2tza2V3OwkJLyogc2VjdG9yIDAgc2tldywgcGVyIHRyYWNrICovCisJX191MTYJZF9jeWxza2V3OwkJLyogc2VjdG9yIDAgc2tldywgcGVyIGN5bGluZGVyICovCisJX191MzIJZF9oZWFkc3dpdGNoOwkJLyogaGVhZCBzd2l0Y2ggdGltZSwgdXNlYyAqLworCV9fdTMyCWRfdHJrc2VlazsJCS8qIHRyYWNrLXRvLXRyYWNrIHNlZWssIHVzZWMgKi8KKwlfX3UzMglkX2ZsYWdzOwkJLyogZ2VuZXJpYyBmbGFncyAqLworI2RlZmluZSBORERBVEEgNQorCV9fdTMyCWRfZHJpdmVkYXRhW05EREFUQV07CS8qIGRyaXZlLXR5cGUgc3BlY2lmaWMgaW5mb3JtYXRpb24gKi8KKyNkZWZpbmUgTlNQQVJFIDUKKwlfX3UzMglkX3NwYXJlW05TUEFSRV07CS8qIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovCisJX19sZTMyCWRfbWFnaWMyOwkJLyogdGhlIG1hZ2ljIG51bWJlciAoYWdhaW4pICovCisJX19sZTE2CWRfY2hlY2tzdW07CQkvKiB4b3Igb2YgZGF0YSBpbmNsLiBwYXJ0aXRpb25zICovCisKKwkJCS8qIGZpbGVzeXN0ZW0gYW5kIHBhcnRpdGlvbiBpbmZvcm1hdGlvbjogKi8KKwlfX2xlMTYJZF9ucGFydGl0aW9uczsJCS8qIG51bWJlciBvZiBwYXJ0aXRpb25zIGluIGZvbGxvd2luZyAqLworCV9fbGUzMglkX2Jic2l6ZTsJCS8qIHNpemUgb2YgYm9vdCBhcmVhIGF0IHNuMCwgYnl0ZXMgKi8KKwlfX2xlMzIJZF9zYnNpemU7CQkvKiBtYXggc2l6ZSBvZiBmcyBzdXBlcmJsb2NrLCBieXRlcyAqLworCXN0cnVjdAlic2RfcGFydGl0aW9uIHsJCS8qIHRoZSBwYXJ0aXRpb24gdGFibGUgKi8KKwkJX19sZTMyCXBfc2l6ZTsJCS8qIG51bWJlciBvZiBzZWN0b3JzIGluIHBhcnRpdGlvbiAqLworCQlfX2xlMzIJcF9vZmZzZXQ7CS8qIHN0YXJ0aW5nIHNlY3RvciAqLworCQlfX2xlMzIJcF9mc2l6ZTsJLyogZmlsZXN5c3RlbSBiYXNpYyBmcmFnbWVudCBzaXplICovCisJCV9fdTgJcF9mc3R5cGU7CS8qIGZpbGVzeXN0ZW0gdHlwZSwgc2VlIGJlbG93ICovCisJCV9fdTgJcF9mcmFnOwkJLyogZmlsZXN5c3RlbSBmcmFnbWVudHMgcGVyIGJsb2NrICovCisJCV9fbGUxNglwX2NwZzsJCS8qIGZpbGVzeXN0ZW0gY3lsaW5kZXJzIHBlciBncm91cCAqLworCX0gZF9wYXJ0aXRpb25zW0JTRF9NQVhQQVJUSVRJT05TXTsJLyogYWN0dWFsbHkgbWF5IGJlIG1vcmUgKi8KK307CisKKyNlbmRpZgkvKiBDT05GSUdfQlNEX0RJU0tMQUJFTCAqLworCisjaWZkZWYgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTAorLyoKKyAqIFVuaXh3YXJlIHNsaWNlcyBzdXBwb3J0IGJ5IEFuZHJ6ZWogS3J6eXN6dG9mb3dpY3ogPGFua3J5QG1pZi5wZy5nZGEucGw+CisgKiBhbmQgS3J6eXN6dG9mIEcuIEJhcmFub3dza2kgPGtnYkBrbm0ub3JnLnBsPgorICovCisKKyNkZWZpbmUgVU5JWFdBUkVfRElTS01BR0lDICAgICAoMHhDQTVFNjAwRFVMKQkvKiBUaGUgZGlzayBtYWdpYyBudW1iZXIgKi8KKyNkZWZpbmUgVU5JWFdBUkVfRElTS01BR0lDMiAgICAoMHg2MDBEREVFRVVMKQkvKiBUaGUgc2xpY2UgdGFibGUgbWFnaWMgbnIgKi8KKyNkZWZpbmUgVU5JWFdBUkVfTlVNU0xJQ0UgICAgICAxNgorI2RlZmluZSBVTklYV0FSRV9GU19VTlVTRUQgICAgIDAJCS8qIFVudXNlZCBzbGljZSBlbnRyeSBJRCAqLworCitzdHJ1Y3QgdW5peHdhcmVfc2xpY2UgeworCV9fbGUxNiAgIHNfbGFiZWw7CS8qIGxhYmVsICovCisJX19sZTE2ICAgc19mbGFnczsJLyogcGVybWlzc2lvbiBmbGFncyAqLworCV9fbGUzMiAgIHN0YXJ0X3NlY3Q7CS8qIHN0YXJ0aW5nIHNlY3RvciAqLworCV9fbGUzMiAgIG5yX3NlY3RzOwkvKiBudW1iZXIgb2Ygc2VjdG9ycyBpbiBzbGljZSAqLworfTsKKworc3RydWN0IHVuaXh3YXJlX2Rpc2tsYWJlbCB7CisJX19sZTMyICAgZF90eXBlOyAgICAgICAgICAgICAgIAkvKiBkcml2ZSB0eXBlICovCisJX19sZTMyICAgZF9tYWdpYzsgICAgICAgICAgICAgICAgLyogdGhlIG1hZ2ljIG51bWJlciAqLworCV9fbGUzMiAgIGRfdmVyc2lvbjsgICAgICAgICAgICAgIC8qIHZlcnNpb24gbnVtYmVyICovCisJY2hhciAgICBkX3NlcmlhbFsxMl07ICAgICAgICAgICAvKiBzZXJpYWwgbnVtYmVyIG9mIHRoZSBkZXZpY2UgKi8KKwlfX2xlMzIgICBkX25jeWxpbmRlcnM7ICAgICAgICAgICAvKiAjIG9mIGRhdGEgY3lsaW5kZXJzIHBlciBkZXZpY2UgKi8KKwlfX2xlMzIgICBkX250cmFja3M7ICAgICAgICAgICAgICAvKiAjIG9mIHRyYWNrcyBwZXIgY3lsaW5kZXIgKi8KKwlfX2xlMzIgICBkX25zZWN0b3JzOyAgICAgICAgICAgICAvKiAjIG9mIGRhdGEgc2VjdG9ycyBwZXIgdHJhY2sgKi8KKwlfX2xlMzIgICBkX3NlY3NpemU7ICAgICAgICAgICAgICAvKiAjIG9mIGJ5dGVzIHBlciBzZWN0b3IgKi8KKwlfX2xlMzIgICBkX3BhcnRfc3RhcnQ7ICAgICAgICAgICAvKiAjIG9mIGZpcnN0IHNlY3RvciBvZiB0aGlzIHBhcnRpdGlvbiAqLworCV9fbGUzMiAgIGRfdW5rbm93bjFbMTJdOyAgICAgICAgIC8qID8gKi8KKyAJX19sZTMyCWRfYWx0X3RibDsgICAgICAgICAgICAgIC8qIGJ5dGUgb2Zmc2V0IG9mIGFsdGVybmF0ZSB0YWJsZSAqLworIAlfX2xlMzIJZF9hbHRfbGVuOyAgICAgICAgICAgICAgLyogYnl0ZSBsZW5ndGggb2YgYWx0ZXJuYXRlIHRhYmxlICovCisgCV9fbGUzMglkX3BoeXNfY3lsOyAgICAgICAgICAgICAvKiAjIG9mIHBoeXNpY2FsIGN5bGluZGVycyBwZXIgZGV2aWNlICovCisgCV9fbGUzMglkX3BoeXNfdHJrOyAgICAgICAgICAgICAvKiAjIG9mIHBoeXNpY2FsIHRyYWNrcyBwZXIgY3lsaW5kZXIgKi8KKyAJX19sZTMyCWRfcGh5c19zZWM7ICAgICAgICAgICAgIC8qICMgb2YgcGh5c2ljYWwgc2VjdG9ycyBwZXIgdHJhY2sgKi8KKyAJX19sZTMyCWRfcGh5c19ieXRlczsgICAgICAgICAgIC8qICMgb2YgcGh5c2ljYWwgYnl0ZXMgcGVyIHNlY3RvciAqLworIAlfX2xlMzIJZF91bmtub3duMjsgICAgICAgICAgICAgLyogPyAqLworCV9fbGUzMiAgIGRfdW5rbm93bjM7ICAgICAgICAgICAgIC8qID8gKi8KKwlfX2xlMzIJZF9wYWRbOF07ICAgICAgICAgICAgICAgLyogcGFkICovCisKKwlzdHJ1Y3QgdW5peHdhcmVfdnRvYyB7CisJCV9fbGUzMgl2X21hZ2ljOwkJLyogdGhlIG1hZ2ljIG51bWJlciAqLworCQlfX2xlMzIJdl92ZXJzaW9uOwkJLyogdmVyc2lvbiBudW1iZXIgKi8KKwkJY2hhcgl2X25hbWVbOF07CQkvKiB2b2x1bWUgbmFtZSAqLworCQlfX2xlMTYJdl9uc2xpY2VzOwkJLyogIyBvZiBzbGljZXMgKi8KKwkJX19sZTE2CXZfdW5rbm93bjE7CQkvKiA/ICovCisJCV9fbGUzMgl2X3Jlc2VydmVkWzEwXTsJCS8qIHJlc2VydmVkICovCisJCXN0cnVjdCB1bml4d2FyZV9zbGljZQorCQkJdl9zbGljZVtVTklYV0FSRV9OVU1TTElDRV07CS8qIHNsaWNlIGhlYWRlcnMgKi8KKwl9IHZ0b2M7CisKK307ICAvKiA0MDggKi8KKworI2VuZGlmIC8qIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgKi8KKworI2lmZGVmIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04KKyMgICBkZWZpbmUgTUlOSVhfTlJfU1VCUEFSVElUSU9OUyAgNAorI2VuZGlmIC8qIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gKi8KKworI2lmZGVmIF9fS0VSTkVMX18KKworY2hhciAqZGlza19uYW1lIChzdHJ1Y3QgZ2VuZGlzayAqaGQsIGludCBwYXJ0LCBjaGFyICpidWYpOworCitleHRlcm4gaW50IHJlc2Nhbl9wYXJ0aXRpb25zKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KTsKK2V4dGVybiB2b2lkIGFkZF9wYXJ0aXRpb24oc3RydWN0IGdlbmRpc2sgKiwgaW50LCBzZWN0b3JfdCwgc2VjdG9yX3QpOworZXh0ZXJuIHZvaWQgZGVsZXRlX3BhcnRpdGlvbihzdHJ1Y3QgZ2VuZGlzayAqLCBpbnQpOworCitleHRlcm4gc3RydWN0IGdlbmRpc2sgKmFsbG9jX2Rpc2soaW50IG1pbm9ycyk7CitleHRlcm4gc3RydWN0IGtvYmplY3QgKmdldF9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKTsKK2V4dGVybiB2b2lkIHB1dF9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKTsKKworZXh0ZXJuIHZvaWQgYmxrX3JlZ2lzdGVyX3JlZ2lvbihkZXZfdCBkZXYsIHVuc2lnbmVkIGxvbmcgcmFuZ2UsCisJCQlzdHJ1Y3QgbW9kdWxlICptb2R1bGUsCisJCQlzdHJ1Y3Qga29iamVjdCAqKCpwcm9iZSkoZGV2X3QsIGludCAqLCB2b2lkICopLAorCQkJaW50ICgqbG9jaykoZGV2X3QsIHZvaWQgKiksCisJCQl2b2lkICpkYXRhKTsKK2V4dGVybiB2b2lkIGJsa191bnJlZ2lzdGVyX3JlZ2lvbihkZXZfdCBkZXYsIHVuc2lnbmVkIGxvbmcgcmFuZ2UpOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZ2V0X2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2ssIGludCBpbmRleCkKK3sKKwlyZXR1cm4gYmRnZXQoTUtERVYoZGlzay0+bWFqb3IsIGRpc2stPmZpcnN0X21pbm9yKSArIGluZGV4KTsKK30KKworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9nZnAuaCBiL2luY2x1ZGUvbGludXgvZ2ZwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ4YTFiYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvZ2ZwLmgKQEAgLTAsMCArMSwxMzQgQEAKKyNpZm5kZWYgX19MSU5VWF9HRlBfSAorI2RlZmluZSBfX0xJTlVYX0dGUF9ICisKKyNpbmNsdWRlIDxsaW51eC9tbXpvbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKK3N0cnVjdCB2bV9hcmVhX3N0cnVjdDsKKworLyoKKyAqIEdGUCBiaXRtYXNrcy4uCisgKi8KKy8qIFpvbmUgbW9kaWZpZXJzIGluIEdGUF9aT05FTUFTSyAoc2VlIGxpbnV4L21tem9uZS5oIC0gbG93IHR3byBiaXRzKSAqLworI2RlZmluZSBfX0dGUF9ETUEJMHgwMQorI2RlZmluZSBfX0dGUF9ISUdITUVNCTB4MDIKKworLyoKKyAqIEFjdGlvbiBtb2RpZmllcnMgLSBkb2Vzbid0IGNoYW5nZSB0aGUgem9uaW5nCisgKgorICogX19HRlBfUkVQRUFUOiBUcnkgaGFyZCB0byBhbGxvY2F0ZSB0aGUgbWVtb3J5LCBidXQgdGhlIGFsbG9jYXRpb24gYXR0ZW1wdAorICogX21pZ2h0XyBmYWlsLiAgVGhpcyBkZXBlbmRzIHVwb24gdGhlIHBhcnRpY3VsYXIgVk0gaW1wbGVtZW50YXRpb24uCisgKgorICogX19HRlBfTk9GQUlMOiBUaGUgVk0gaW1wbGVtZW50YXRpb24gX211c3RfIHJldHJ5IGluZmluaXRlbHk6IHRoZSBjYWxsZXIKKyAqIGNhbm5vdCBoYW5kbGUgYWxsb2NhdGlvbiBmYWlsdXJlcy4KKyAqCisgKiBfX0dGUF9OT1JFVFJZOiBUaGUgVk0gaW1wbGVtZW50YXRpb24gbXVzdCBub3QgcmV0cnkgaW5kZWZpbml0ZWx5LgorICovCisjZGVmaW5lIF9fR0ZQX1dBSVQJMHgxMHUJLyogQ2FuIHdhaXQgYW5kIHJlc2NoZWR1bGU/ICovCisjZGVmaW5lIF9fR0ZQX0hJR0gJMHgyMHUJLyogU2hvdWxkIGFjY2VzcyBlbWVyZ2VuY3kgcG9vbHM/ICovCisjZGVmaW5lIF9fR0ZQX0lPCTB4NDB1CS8qIENhbiBzdGFydCBwaHlzaWNhbCBJTz8gKi8KKyNkZWZpbmUgX19HRlBfRlMJMHg4MHUJLyogQ2FuIGNhbGwgZG93biB0byBsb3ctbGV2ZWwgRlM/ICovCisjZGVmaW5lIF9fR0ZQX0NPTEQJMHgxMDB1CS8qIENhY2hlLWNvbGQgcGFnZSByZXF1aXJlZCAqLworI2RlZmluZSBfX0dGUF9OT1dBUk4JMHgyMDB1CS8qIFN1cHByZXNzIHBhZ2UgYWxsb2NhdGlvbiBmYWlsdXJlIHdhcm5pbmcgKi8KKyNkZWZpbmUgX19HRlBfUkVQRUFUCTB4NDAwdQkvKiBSZXRyeSB0aGUgYWxsb2NhdGlvbi4gIE1pZ2h0IGZhaWwgKi8KKyNkZWZpbmUgX19HRlBfTk9GQUlMCTB4ODAwdQkvKiBSZXRyeSBmb3IgZXZlci4gIENhbm5vdCBmYWlsICovCisjZGVmaW5lIF9fR0ZQX05PUkVUUlkJMHgxMDAwdQkvKiBEbyBub3QgcmV0cnkuICBNaWdodCBmYWlsICovCisjZGVmaW5lIF9fR0ZQX05PX0dST1cJMHgyMDAwdQkvKiBTbGFiIGludGVybmFsIHVzYWdlICovCisjZGVmaW5lIF9fR0ZQX0NPTVAJMHg0MDAwdQkvKiBBZGQgY29tcG91bmQgcGFnZSBtZXRhZGF0YSAqLworI2RlZmluZSBfX0dGUF9aRVJPCTB4ODAwMHUJLyogUmV0dXJuIHplcm9lZCBwYWdlIG9uIHN1Y2Nlc3MgKi8KKworI2RlZmluZSBfX0dGUF9CSVRTX1NISUZUIDE2CS8qIFJvb20gZm9yIDE2IF9fR0ZQX0ZPTyBiaXRzICovCisjZGVmaW5lIF9fR0ZQX0JJVFNfTUFTSyAoKDEgPDwgX19HRlBfQklUU19TSElGVCkgLSAxKQorCisvKiBpZiB5b3UgZm9yZ2V0IHRvIGFkZCB0aGUgYml0bWFzayBoZXJlIGtlcm5lbCB3aWxsIGNyYXNoLCBwZXJpb2QgKi8KKyNkZWZpbmUgR0ZQX0xFVkVMX01BU0sgKF9fR0ZQX1dBSVR8X19HRlBfSElHSHxfX0dGUF9JT3xfX0dGUF9GU3wgXAorCQkJX19HRlBfQ09MRHxfX0dGUF9OT1dBUk58X19HRlBfUkVQRUFUfCBcCisJCQlfX0dGUF9OT0ZBSUx8X19HRlBfTk9SRVRSWXxfX0dGUF9OT19HUk9XfF9fR0ZQX0NPTVApCisKKyNkZWZpbmUgR0ZQX0FUT01JQwkoX19HRlBfSElHSCkKKyNkZWZpbmUgR0ZQX05PSU8JKF9fR0ZQX1dBSVQpCisjZGVmaW5lIEdGUF9OT0ZTCShfX0dGUF9XQUlUIHwgX19HRlBfSU8pCisjZGVmaW5lIEdGUF9LRVJORUwJKF9fR0ZQX1dBSVQgfCBfX0dGUF9JTyB8IF9fR0ZQX0ZTKQorI2RlZmluZSBHRlBfVVNFUgkoX19HRlBfV0FJVCB8IF9fR0ZQX0lPIHwgX19HRlBfRlMpCisjZGVmaW5lIEdGUF9ISUdIVVNFUgkoX19HRlBfV0FJVCB8IF9fR0ZQX0lPIHwgX19HRlBfRlMgfCBfX0dGUF9ISUdITUVNKQorCisvKiBGbGFnIC0gaW5kaWNhdGVzIHRoYXQgdGhlIGJ1ZmZlciB3aWxsIGJlIHN1aXRhYmxlIGZvciBETUEuICBJZ25vcmVkIG9uIHNvbWUKKyAgIHBsYXRmb3JtcywgdXNlZCBhcyBhcHByb3ByaWF0ZSBvbiBvdGhlcnMgKi8KKworI2RlZmluZSBHRlBfRE1BCQlfX0dGUF9ETUEKKworCisvKgorICogVGhlcmUgaXMgb25seSBvbmUgcGFnZS1hbGxvY2F0b3IgZnVuY3Rpb24sIGFuZCB0d28gbWFpbiBuYW1lc3BhY2VzIHRvCisgKiBpdC4gVGhlIGFsbG9jX3BhZ2UqKCkgdmFyaWFudHMgcmV0dXJuICdzdHJ1Y3QgcGFnZSAqJyBhbmQgYXMgc3VjaAorICogY2FuIGFsbG9jYXRlIGhpZ2htZW0gcGFnZXMsIHRoZSAqZ2V0KnBhZ2UqKCkgdmFyaWFudHMgcmV0dXJuCisgKiB2aXJ0dWFsIGtlcm5lbCBhZGRyZXNzZXMgdG8gdGhlIGFsbG9jYXRlZCBwYWdlKHMpLgorICovCisKKy8qCisgKiBXZSBnZXQgdGhlIHpvbmUgbGlzdCBmcm9tIHRoZSBjdXJyZW50IG5vZGUgYW5kIHRoZSBnZnBfbWFzay4KKyAqIFRoaXMgem9uZSBsaXN0IGNvbnRhaW5zIGEgbWF4aW11bSBvZiBNQVhOT0RFUypNQVhfTlJfWk9ORVMgem9uZXMuCisgKgorICogRm9yIHRoZSBub3JtYWwgY2FzZSBvZiBub24tRElTQ09OVElHTUVNIHN5c3RlbXMgdGhlIE5PREVfREFUQSgpIGdldHMKKyAqIG9wdGltaXplZCB0byAmY29udGlnX3BhZ2VfZGF0YSBhdCBjb21waWxlLXRpbWUuCisgKi8KKworI2lmbmRlZiBIQVZFX0FSQ0hfRlJFRV9QQUdFCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9mcmVlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvcmRlcikgeyB9CisjZW5kaWYKKworZXh0ZXJuIHN0cnVjdCBwYWdlICoKK0ZBU1RDQUxMKF9fYWxsb2NfcGFnZXModW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQsIHN0cnVjdCB6b25lbGlzdCAqKSk7CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKmFsbG9jX3BhZ2VzX25vZGUoaW50IG5pZCwgdW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcF9tYXNrLAorCQkJCQkJdW5zaWduZWQgaW50IG9yZGVyKQoreworCWlmICh1bmxpa2VseShvcmRlciA+PSBNQVhfT1JERVIpKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBfX2FsbG9jX3BhZ2VzKGdmcF9tYXNrLCBvcmRlciwKKwkJTk9ERV9EQVRBKG5pZCktPm5vZGVfem9uZWxpc3RzICsgKGdmcF9tYXNrICYgR0ZQX1pPTkVNQVNLKSk7Cit9CisKKyNpZmRlZiBDT05GSUdfTlVNQQorZXh0ZXJuIHN0cnVjdCBwYWdlICphbGxvY19wYWdlc19jdXJyZW50KHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnBfbWFzaywgdW5zaWduZWQgb3JkZXIpOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICoKK2FsbG9jX3BhZ2VzKHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKQoreworCWlmICh1bmxpa2VseShvcmRlciA+PSBNQVhfT1JERVIpKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBhbGxvY19wYWdlc19jdXJyZW50KGdmcF9tYXNrLCBvcmRlcik7Cit9CitleHRlcm4gc3RydWN0IHBhZ2UgKmFsbG9jX3BhZ2Vfdm1hKHVuc2lnbmVkIF9fbm9jYXN0IGdmcF9tYXNrLAorCQkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcik7CisjZWxzZQorI2RlZmluZSBhbGxvY19wYWdlcyhnZnBfbWFzaywgb3JkZXIpIFwKKwkJYWxsb2NfcGFnZXNfbm9kZShudW1hX25vZGVfaWQoKSwgZ2ZwX21hc2ssIG9yZGVyKQorI2RlZmluZSBhbGxvY19wYWdlX3ZtYShnZnBfbWFzaywgdm1hLCBhZGRyKSBhbGxvY19wYWdlcyhnZnBfbWFzaywgMCkKKyNlbmRpZgorI2RlZmluZSBhbGxvY19wYWdlKGdmcF9tYXNrKSBhbGxvY19wYWdlcyhnZnBfbWFzaywgMCkKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgRkFTVENBTEwoX19nZXRfZnJlZV9wYWdlcyh1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcikpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgRkFTVENBTEwoZ2V0X3plcm9lZF9wYWdlKHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnBfbWFzaykpOworCisjZGVmaW5lIF9fZ2V0X2ZyZWVfcGFnZShnZnBfbWFzaykgXAorCQlfX2dldF9mcmVlX3BhZ2VzKChnZnBfbWFzayksMCkKKworI2RlZmluZSBfX2dldF9kbWFfcGFnZXMoZ2ZwX21hc2ssIG9yZGVyKSBcCisJCV9fZ2V0X2ZyZWVfcGFnZXMoKGdmcF9tYXNrKSB8IEdGUF9ETUEsKG9yZGVyKSkKKworZXh0ZXJuIHZvaWQgRkFTVENBTEwoX19mcmVlX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpKTsKK2V4dGVybiB2b2lkIEZBU1RDQUxMKGZyZWVfcGFnZXModW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBpbnQgb3JkZXIpKTsKK2V4dGVybiB2b2lkIEZBU1RDQUxMKGZyZWVfaG90X3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpKTsKK2V4dGVybiB2b2lkIEZBU1RDQUxMKGZyZWVfY29sZF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKSk7CisKKyNkZWZpbmUgX19mcmVlX3BhZ2UocGFnZSkgX19mcmVlX3BhZ2VzKChwYWdlKSwgMCkKKyNkZWZpbmUgZnJlZV9wYWdlKGFkZHIpIGZyZWVfcGFnZXMoKGFkZHIpLDApCisKK3ZvaWQgcGFnZV9hbGxvY19pbml0KHZvaWQpOworCisjZW5kaWYgLyogX19MSU5VWF9HRlBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9oYXJkaXJxLmggYi9pbmNsdWRlL2xpbnV4L2hhcmRpcnEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYmM3MTJlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9oYXJkaXJxLmgKQEAgLTAsMCArMSwxMDYgQEAKKyNpZm5kZWYgTElOVVhfSEFSRElSUV9ICisjZGVmaW5lIExJTlVYX0hBUkRJUlFfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKyNpbmNsdWRlIDxhc20vaGFyZGlycS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKworLyoKKyAqIFdlIHB1dCB0aGUgaGFyZGlycSBhbmQgc29mdGlycSBjb3VudGVyIGludG8gdGhlIHByZWVtcHRpb24KKyAqIGNvdW50ZXIuIFRoZSBiaXRtYXNrIGhhcyB0aGUgZm9sbG93aW5nIG1lYW5pbmc6CisgKgorICogLSBiaXRzIDAtNyBhcmUgdGhlIHByZWVtcHRpb24gY291bnQgKG1heCBwcmVlbXB0aW9uIGRlcHRoOiAyNTYpCisgKiAtIGJpdHMgOC0xNSBhcmUgdGhlIHNvZnRpcnEgY291bnQgKG1heCAjIG9mIHNvZnRpcnFzOiAyNTYpCisgKgorICogVGhlIGhhcmRpcnEgY291bnQgY2FuIGJlIG92ZXJyaWRkZW4gcGVyIGFyY2hpdGVjdHVyZSwgdGhlIGRlZmF1bHQgaXM6CisgKgorICogLSBiaXRzIDE2LTI3IGFyZSB0aGUgaGFyZGlycSBjb3VudCAobWF4ICMgb2YgaGFyZGlycXM6IDQwOTYpCisgKiAtICggYml0IDI4IGlzIHRoZSBQUkVFTVBUX0FDVElWRSBmbGFnLiApCisgKgorICogUFJFRU1QVF9NQVNLOiAweDAwMDAwMGZmCisgKiBTT0ZUSVJRX01BU0s6IDB4MDAwMGZmMDAKKyAqIEhBUkRJUlFfTUFTSzogMHgwZmZmMDAwMAorICovCisjZGVmaW5lIFBSRUVNUFRfQklUUwk4CisjZGVmaW5lIFNPRlRJUlFfQklUUwk4CisKKyNpZm5kZWYgSEFSRElSUV9CSVRTCisjZGVmaW5lIEhBUkRJUlFfQklUUwkxMgorLyoKKyAqIFRoZSBoYXJkaXJxIG1hc2sgaGFzIHRvIGJlIGxhcmdlIGVub3VnaCB0byBoYXZlIHNwYWNlIGZvciBwb3RlbnRpYWxseQorICogYWxsIElSUSBzb3VyY2VzIGluIHRoZSBzeXN0ZW0gbmVzdGluZyBvbiBhIHNpbmdsZSBDUFUuCisgKi8KKyNpZiAoMSA8PCBIQVJESVJRX0JJVFMpIDwgTlJfSVJRUworIyBlcnJvciBIQVJESVJRX0JJVFMgaXMgdG9vIGxvdyEKKyNlbmRpZgorI2VuZGlmCisKKyNkZWZpbmUgUFJFRU1QVF9TSElGVAkwCisjZGVmaW5lIFNPRlRJUlFfU0hJRlQJKFBSRUVNUFRfU0hJRlQgKyBQUkVFTVBUX0JJVFMpCisjZGVmaW5lIEhBUkRJUlFfU0hJRlQJKFNPRlRJUlFfU0hJRlQgKyBTT0ZUSVJRX0JJVFMpCisKKyNkZWZpbmUgX19JUlFfTUFTSyh4KQkoKDFVTCA8PCAoeCkpLTEpCisKKyNkZWZpbmUgUFJFRU1QVF9NQVNLCShfX0lSUV9NQVNLKFBSRUVNUFRfQklUUykgPDwgUFJFRU1QVF9TSElGVCkKKyNkZWZpbmUgSEFSRElSUV9NQVNLCShfX0lSUV9NQVNLKEhBUkRJUlFfQklUUykgPDwgSEFSRElSUV9TSElGVCkKKyNkZWZpbmUgU09GVElSUV9NQVNLCShfX0lSUV9NQVNLKFNPRlRJUlFfQklUUykgPDwgU09GVElSUV9TSElGVCkKKworI2RlZmluZSBQUkVFTVBUX09GRlNFVAkoMVVMIDw8IFBSRUVNUFRfU0hJRlQpCisjZGVmaW5lIFNPRlRJUlFfT0ZGU0VUCSgxVUwgPDwgU09GVElSUV9TSElGVCkKKyNkZWZpbmUgSEFSRElSUV9PRkZTRVQJKDFVTCA8PCBIQVJESVJRX1NISUZUKQorCisjZGVmaW5lIGhhcmRpcnFfY291bnQoKQkocHJlZW1wdF9jb3VudCgpICYgSEFSRElSUV9NQVNLKQorI2RlZmluZSBzb2Z0aXJxX2NvdW50KCkJKHByZWVtcHRfY291bnQoKSAmIFNPRlRJUlFfTUFTSykKKyNkZWZpbmUgaXJxX2NvdW50KCkJKHByZWVtcHRfY291bnQoKSAmIChIQVJESVJRX01BU0sgfCBTT0ZUSVJRX01BU0spKQorCisvKgorICogQXJlIHdlIGRvaW5nIGJvdHRvbSBoYWxmIG9yIGhhcmR3YXJlIGludGVycnVwdCBwcm9jZXNzaW5nPworICogQXJlIHdlIGluIGEgc29mdGlycSBjb250ZXh0PyBJbnRlcnJ1cHQgY29udGV4dD8KKyAqLworI2RlZmluZSBpbl9pcnEoKQkJKGhhcmRpcnFfY291bnQoKSkKKyNkZWZpbmUgaW5fc29mdGlycSgpCQkoc29mdGlycV9jb3VudCgpKQorI2RlZmluZSBpbl9pbnRlcnJ1cHQoKQkJKGlycV9jb3VudCgpKQorCisjaWYgZGVmaW5lZChDT05GSUdfUFJFRU1QVCkgJiYgIWRlZmluZWQoQ09ORklHX1BSRUVNUFRfQktMKQorIyBkZWZpbmUgaW5fYXRvbWljKCkJKChwcmVlbXB0X2NvdW50KCkgJiB+UFJFRU1QVF9BQ1RJVkUpICE9IGtlcm5lbF9sb2NrZWQoKSkKKyNlbHNlCisjIGRlZmluZSBpbl9hdG9taWMoKQkoKHByZWVtcHRfY291bnQoKSAmIH5QUkVFTVBUX0FDVElWRSkgIT0gMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1BSRUVNUFQKKyMgZGVmaW5lIHByZWVtcHRpYmxlKCkJKHByZWVtcHRfY291bnQoKSA9PSAwICYmICFpcnFzX2Rpc2FibGVkKCkpCisjIGRlZmluZSBJUlFfRVhJVF9PRkZTRVQgKEhBUkRJUlFfT0ZGU0VULTEpCisjZWxzZQorIyBkZWZpbmUgcHJlZW1wdGlibGUoKQkwCisjIGRlZmluZSBJUlFfRVhJVF9PRkZTRVQgSEFSRElSUV9PRkZTRVQKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1NNUAorZXh0ZXJuIHZvaWQgc3luY2hyb25pemVfaXJxKHVuc2lnbmVkIGludCBpcnEpOworI2Vsc2UKKyMgZGVmaW5lIHN5bmNocm9uaXplX2lycShpcnEpCWJhcnJpZXIoKQorI2VuZGlmCisKKyNkZWZpbmUgbm1pX2VudGVyKCkJCWlycV9lbnRlcigpCisjZGVmaW5lIG5taV9leGl0KCkJCXN1Yl9wcmVlbXB0X2NvdW50KEhBUkRJUlFfT0ZGU0VUKQorCisjaWZuZGVmIENPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HCitzdGF0aWMgaW5saW5lIHZvaWQgYWNjb3VudF91c2VyX3Z0aW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYWNjb3VudF9zeXN0ZW1fdnRpbWUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7Cit9CisjZW5kaWYKKworI2RlZmluZSBpcnFfZW50ZXIoKQkJCQkJXAorCWRvIHsJCQkJCQlcCisJCWFjY291bnRfc3lzdGVtX3Z0aW1lKGN1cnJlbnQpOwkJXAorCQlhZGRfcHJlZW1wdF9jb3VudChIQVJESVJRX09GRlNFVCk7CVwKKwl9IHdoaWxlICgwKQorCitleHRlcm4gdm9pZCBpcnFfZXhpdCh2b2lkKTsKKworI2VuZGlmIC8qIExJTlVYX0hBUkRJUlFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9oYXJyaWVyX2RlZnMuaCBiL2luY2x1ZGUvbGludXgvaGFycmllcl9kZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg1YjI1MgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvaGFycmllcl9kZWZzLmgKQEAgLTAsMCArMSwyMTIgQEAKKy8qCisgKiBhc20tcHBjL2hhcnJpZXJfZGVmcy5oCisgKgorICogRGVmaW5pdGlvbnMgZm9yIE1vdG9yb2xhIE1DRyBIYXJyaWVyIE5vcnRoIEJyaWRnZSAmIE1lbW9yeSBjb250cm9sbGVyCisgKgorICogQXV0aG9yOiBEYWxlIEZhcm5zd29ydGgKKyAqICAgICAgICAgZGFsZS5mYXJuc3dvcnRoQG12aXN0YS5jb20KKyAqCisgKiBFeHRyYWN0ZWQgZnJvbSBhc20tcHBjL2hhcnJpZXIuaCBieToKKyAqIAkgICBSYW5keSBWaW5zb24KKyAqIAkgICBydmluc29uQG12aXN0YS5jb20KKyAqCisgKiBDb3B5cmlnaHQgMjAwMS0yMDAyIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfX0FTTVBQQ19IQVJSSUVSX0RFRlNfSAorI2RlZmluZSBfX0FTTVBQQ19IQVJSSUVSX0RFRlNfSAorCisjZGVmaW5lIEhBUlJJRVJfREVGQVVMVF9YQ1NSX0JBU0UJMHhmZWZmMDAwMAorCisjZGVmaW5lIEhBUlJJRVJfVkVORF9ERVZfSUQJCTB4MTA1NzQ4MGIKKworI2RlZmluZSBIQVJSSUVSX1ZFTklfT0ZGCQkweDAwCisKKyNkZWZpbmUgSEFSUklFUl9SRVZJX09GRgkJMHgwNQorI2RlZmluZSBIQVJSSUVSX1VDVExfT0ZGCQkweGQwCisjZGVmaW5lIEhBUlJJRVJfWFRBTDY0X01BU0sJCTB4MDIKKworI2RlZmluZSBIQVJSSUVSX01JU0NfQ1NSX09GRgkJMHgxYworI2RlZmluZSBIQVJSSUVSX1JTVE9VVAkJCTB4MDEwMDAwMDAKKyNkZWZpbmUgSEFSUklFUl9TWVNDT04JCQkweDA4MDAwMDAwCisjZGVmaW5lIEhBUlJJRVJfRVJFQURZCQkJMHgxMDAwMDAwMAorI2RlZmluZSBIQVJSSUVSX0VSRFlTCQkJMHgyMDAwMDAwMAorCisvKiBGdW5jdGlvbiBleGNlcHRpb24gcmVnaXN0ZXJzICovCisjZGVmaW5lIEhBUlJJRVJfRkVFTl9PRkYJCTB4NDAJLyogZW5hYmxlICovCisjZGVmaW5lIEhBUlJJRVJfRkVTVF9PRkYJCTB4NDQJLyogc3RhdHVzICovCisjZGVmaW5lIEhBUlJJRVJfRkVNQV9PRkYJCTB4NDgJLyogbWFzayAqLworI2RlZmluZSBIQVJSSUVSX0ZFQ0xfT0ZGCQkweDRjCS8qIGNsZWFyICovCisKKyNkZWZpbmUgSEFSUklFUl9GRV9ETUEJCQkweDgwCisjZGVmaW5lIEhBUlJJRVJfRkVfTUlEQgkJCTB4NDAKKyNkZWZpbmUgSEFSUklFUl9GRV9NSU0wCQkJMHgyMAorI2RlZmluZSBIQVJSSUVSX0ZFX01JTTEJCQkweDEwCisjZGVmaW5lIEhBUlJJRVJfRkVfTUlQCQkJMHgwOAorI2RlZmluZSBIQVJSSUVSX0ZFX1VBMAkJCTB4MDQKKyNkZWZpbmUgSEFSUklFUl9GRV9VQTEJCQkweDAyCisjZGVmaW5lIEhBUlJJRVJfRkVfQUJUCQkJMHgwMQorCisjZGVmaW5lIEhBUlJJRVJfU0VSSUFMXzBfT0ZGCQkweGMwCisKKyNkZWZpbmUgSEFSUklFUl9NQkFSX09GRgkJMHhlMAorI2RlZmluZSBIQVJSSUVSX01CQVJfTVNLCQkweGZmZmMwMDAwCisjZGVmaW5lIEhBUlJJRVJfTVBJQ19DU1JfT0ZGCQkweGU0CisjZGVmaW5lIEhBUlJJRVJfTVBJQ19PUElfRU5BQkxFCQkweDQwCisjZGVmaW5lIEhBUlJJRVJfTVBJQ19JRkVWUF9PRkYJCTB4MTAyMDAKKyNkZWZpbmUgSEFSUklFUl9NUElDX0lGRVZQX1ZFQ1RfTVNLCTB4ZmYKKyNkZWZpbmUgSEFSUklFUl9NUElDX0lGRURFX09GRgkJMHgxMDIxMAorCisvKgorICogRGVmaW5lIHRoZSBNZW1vcnkgQ29udHJvbGxlciByZWdpc3RlciBvZmZzZXRzLgorICovCisjZGVmaW5lIEhBUlJJRVJfU0RCQV9PRkYJCTB4MTEwCisjZGVmaW5lIEhBUlJJRVJfU0RCQl9PRkYJCTB4MTE0CisjZGVmaW5lIEhBUlJJRVJfU0RCQ19PRkYJCTB4MTE4CisjZGVmaW5lIEhBUlJJRVJfU0RCRF9PRkYJCTB4MTFjCisjZGVmaW5lIEhBUlJJRVJfU0RCRV9PRkYJCTB4MTIwCisjZGVmaW5lIEhBUlJJRVJfU0RCRl9PRkYJCTB4MTI0CisjZGVmaW5lIEhBUlJJRVJfU0RCR19PRkYJCTB4MTI4CisjZGVmaW5lIEhBUlJJRVJfU0RCSF9PRkYJCTB4MTJjCisKKyNkZWZpbmUgSEFSUklFUl9TREJfRU5BQkxFCQkweDAwMDAwMTAwCisjZGVmaW5lIEhBUlJJRVJfU0RCX1NJWkVfTUFTSwkJMHhmCisjZGVmaW5lIEhBUlJJRVJfU0RCX1NJWkVfU0hJRlQJCTE2CisjZGVmaW5lIEhBUlJJRVJfU0RCX0JBU0VfTUFTSwkJMHhmZgorI2RlZmluZSBIQVJSSUVSX1NEQl9CQVNFX1NISUZUCQkyNAorCisvKgorICogRGVmaW5lIG91dGJvdW5kIHJlZ2lzdGVyIG9mZnNldHMuCisgKi8KKyNkZWZpbmUgSEFSUklFUl9PVEFEMF9PRkYJCTB4MjIwCisjZGVmaW5lIEhBUlJJRVJfT1RPRjBfT0ZGCQkweDIyNAorI2RlZmluZSBIQVJSSUVSX09UQUQxX09GRgkJMHgyMjgKKyNkZWZpbmUgSEFSUklFUl9PVE9GMV9PRkYJCTB4MjJjCisjZGVmaW5lIEhBUlJJRVJfT1RBRDJfT0ZGCQkweDIzMAorI2RlZmluZSBIQVJSSUVSX09UT0YyX09GRgkJMHgyMzQKKyNkZWZpbmUgSEFSUklFUl9PVEFEM19PRkYJCTB4MjM4CisjZGVmaW5lIEhBUlJJRVJfT1RPRjNfT0ZGCQkweDIzYworCisjZGVmaW5lIEhBUlJJRVJfT1RBRFhfU1RBUlRfTVNLCQkweGZmZmYwMDAwVUwKKyNkZWZpbmUgSEFSUklFUl9PVEFEWF9FTkRfTVNLCQkweDAwMDBmZmZmVUwKKworI2RlZmluZSBIQVJSSUVSX09UT0ZYX09GRl9NU0sJCTB4ZmZmZjAwMDBVTAorI2RlZmluZSBIQVJSSUVSX09UT0ZYX0VOQQkJMHg4MFVMCisjZGVmaW5lIEhBUlJJRVJfT1RPRlhfV1BFCQkweDEwVUwKKyNkZWZpbmUgSEFSUklFUl9PVE9GWF9TR0UJCTB4MDhVTAorI2RlZmluZSBIQVJSSUVSX09UT0ZYX1JBRQkJMHgwNFVMCisjZGVmaW5lIEhBUlJJRVJfT1RPRlhfTUVNCQkweDAyVUwKKyNkZWZpbmUgSEFSUklFUl9PVE9GWF9JT00JCTB4MDFVTAorCisvKgorICogRGVmaW5lIGdlbmVyaWMgbWVzc2FnZSBwYXNzaW5nIHJlZ2lzdGVyIG9mZnNldHMKKyAqLworLyogTWlycm9yZWQgcmVnaXN0ZXJzICh2aXNpYmxlIGZyb20gYm90aCBQb3dlclBDIGFuZCBQQ0kgc3BhY2UpICovCisjZGVmaW5lIEhBUlJJRVJfWENTUl9NUF9CQVNFX09GRgkweDI5MAkvKiBiYXNlIG9mZnNldCBpbiBYQ1NSIHNwYWNlICovCisjZGVmaW5lIEhBUlJJRVJfUE1FUF9NUF9CQVNFX09GRgkweDEwMAkvKiBiYXNlIG9mZnNldCBpbiBQTUVNIHNwYWNlICovCisjZGVmaW5lIEhBUlJJRVJfTUdPTTBfT0ZGCQkweDAwCS8qIG91dGJvdW5kIG1zZyAwICovCisjZGVmaW5lIEhBUlJJRVJfTUdPTTFfT0ZGCQkweDA0CS8qIG91dGJvdW5kIG1zZyAxICovCisjZGVmaW5lIEhBUlJJRVJfTUdPRF9PRkYJCTB4MDgJLyogb3V0Ym91bmQgZG9vcmJlbGxzICovCisKKyNkZWZpbmUgSEFSUklFUl9NR0lNMF9PRkYJCTB4MTAJLyogaW5ib3VuZCBtc2cgMCAqLworI2RlZmluZSBIQVJSSUVSX01HSU0xX09GRgkJMHgxNAkvKiBpbmJvdW5kIG1zZyAxICovCisjZGVmaW5lIEhBUlJJRVJfTUdJRF9PRkYJCTB4MTgJLyogaW5ib3VuZCBkb29yYmVsbHMgKi8KKworLyogUG93ZXJQQy1vbmx5IHJlZ2lzdGVycyAqLworI2RlZmluZSBIQVJSSUVSX01HSURNX09GRgkJMHgyMAkvKiBpbmJvdW5kIGRvb3JiZWxsIG1hc2sgKi8KKworLyogUENJLW9ubHkgcmVnaXN0ZXJzICovCisjZGVmaW5lIEhBUlJJRVJfUE1FUF9NR1NUX09GRgkJMHgyMAkvKiAob3V0Ym91bmQpIGludGVycnVwdCBzdGF0dXMgKi8KKyNkZWZpbmUgSEFSUklFUl9QTUVQX01HTVNfT0ZGCQkweDI0CS8qIChvdXRib3VuZCkgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgSEFSUklFUl9NR19PTUkwCQkJKDE8PDQpCisjZGVmaW5lIEhBUlJJRVJfTUdfT01JMQkJCSgxPDw1KQorCisjZGVmaW5lIEhBUlJJRVJfUE1FUF9NR09ETV9PRkYJCTB4MjgJLyogb3V0Ym91bmQgZG9vcmJlbGwgbWFzayAqLworCisvKgorICogRGVmaW5lIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlIHJlZ2lzdGVyIG9mZnNldHMKKyAqLworI2RlZmluZSBIQVJSSUVSX1hDU1JfVE9fUENGU19PRkYJMHgzMDAKKworLyoKKyAqIERlZmluZSBtZXNzYWdlIHBhc3NpbmcgYXR0cmlidXRlIHJlZ2lzdGVyIG9mZnNldAorICovCisjZGVmaW5lIEhBUlJJRVJfTVBBVF9PRkYJCTB4NDQKKworLyoKKyAqIERlZmluZSBpbmJvdW5kIGF0dHJpYnV0ZSByZWdpc3RlciBvZmZzZXRzLgorICovCisjZGVmaW5lIEhBUlJJRVJfSVRTWjBfT0ZGCQkweDQ4CisjZGVmaW5lIEhBUlJJRVJfSVRBVDBfT0ZGCQkweDRjCisKKyNkZWZpbmUgSEFSUklFUl9JVFNaMV9PRkYJCTB4NTAKKyNkZWZpbmUgSEFSUklFUl9JVEFUMV9PRkYJCTB4NTQKKworI2RlZmluZSBIQVJSSUVSX0lUU1oyX09GRgkJMHg1OAorI2RlZmluZSBIQVJSSUVSX0lUQVQyX09GRgkJMHg1YworCisjZGVmaW5lIEhBUlJJRVJfSVRTWjNfT0ZGCQkweDYwCisjZGVmaW5lIEhBUlJJRVJfSVRBVDNfT0ZGCQkweDY0CisKKy8qIGluYm91bmQgdHJhbnNsYXRpb24gc2l6ZSBjb25zdGFudHMgKi8KKyNkZWZpbmUgSEFSUklFUl9JVFNaX01TSwkJMHhmZgorI2RlZmluZSBIQVJSSUVSX0lUU1pfNEtCCQkweDAwCisjZGVmaW5lIEhBUlJJRVJfSVRTWl84S0IJCTB4MDEKKyNkZWZpbmUgSEFSUklFUl9JVFNaXzE2S0IJCTB4MDIKKyNkZWZpbmUgSEFSUklFUl9JVFNaXzMyS0IJCTB4MDMKKyNkZWZpbmUgSEFSUklFUl9JVFNaXzY0S0IJCTB4MDQKKyNkZWZpbmUgSEFSUklFUl9JVFNaXzEyOEtCCQkweDA1CisjZGVmaW5lIEhBUlJJRVJfSVRTWl8yNTZLQgkJMHgwNgorI2RlZmluZSBIQVJSSUVSX0lUU1pfNTEyS0IJCTB4MDcKKyNkZWZpbmUgSEFSUklFUl9JVFNaXzFNQgkJMHgwOAorI2RlZmluZSBIQVJSSUVSX0lUU1pfMk1CCQkweDA5CisjZGVmaW5lIEhBUlJJRVJfSVRTWl80TUIJCTB4MEEKKyNkZWZpbmUgSEFSUklFUl9JVFNaXzhNQgkJMHgwQgorI2RlZmluZSBIQVJSSUVSX0lUU1pfMTZNQgkJMHgwQworI2RlZmluZSBIQVJSSUVSX0lUU1pfMzJNQgkJMHgwRAorI2RlZmluZSBIQVJSSUVSX0lUU1pfNjRNQgkJMHgwRQorI2RlZmluZSBIQVJSSUVSX0lUU1pfMTI4TUIJCTB4MEYKKyNkZWZpbmUgSEFSUklFUl9JVFNaXzI1Nk1CCQkweDEwCisjZGVmaW5lIEhBUlJJRVJfSVRTWl81MTJNQgkJMHgxMQorI2RlZmluZSBIQVJSSUVSX0lUU1pfMUdCCQkweDEyCisjZGVmaW5lIEhBUlJJRVJfSVRTWl8yR0IJCTB4MTMKKworLyogaW5ib3VuZCB0cmFuc2xhdGlvbiBvZmZzZXQgKi8KKyNkZWZpbmUgSEFSUklFUl9JVE9GX1NISUZUCQkweDEwCisjZGVmaW5lIEhBUlJJRVJfSVRPRl9NU0sJCTB4ZmZmZgorCisvKiBpbmJvdW5kIHRyYW5zbGF0aW9uIGF0dHRyaWJ1dGVzICovCisjZGVmaW5lIEhBUlJJRVJfSVRBVF9QUkUJCSgxPDwzKQorI2RlZmluZSBIQVJSSUVSX0lUQVRfUkFFCQkoMTw8NCkKKyNkZWZpbmUgSEFSUklFUl9JVEFUX1dQRQkJKDE8PDUpCisjZGVmaW5lIEhBUlJJRVJfSVRBVF9NRU0JCSgxPDw2KQorI2RlZmluZSBIQVJSSUVSX0lUQVRfRU5BCQkoMTw8NykKKyNkZWZpbmUgSEFSUklFUl9JVEFUX0dCTAkJKDE8PDE2KQorCisjZGVmaW5lIEhBUlJJRVJfTEJBX09GRgkJCTB4ODAKKyNkZWZpbmUgSEFSUklFUl9MQkFfTVNLCQkJKDE8PDMxKQorCisjZGVmaW5lIEhBUlJJRVJfWENTUl9TSVpFCQkxMDI0CisKKy8qIG1hY3JvcyB0byBjYWxjdWxhdGUgbWVzc2FnZSBwYXNzaW5nIHJlZ2lzdGVyIG9mZnNldHMgKi8KKyNkZWZpbmUgSEFSUklFUl9NUF9YQ1NSKHgpICgodTMyKUhBUlJJRVJfWENTUl9NUF9CQVNFX09GRiArICh1MzIpeCkKKworI2RlZmluZSBIQVJSSUVSX01QX1BNRVAoeCkgKCh1MzIpSEFSUklFUl9QTUVQX01QX0JBU0VfT0ZGICsgKHUzMil4KQorCisvKgorICogRGVmaW5lIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlIHJlZ2lzdGVyIG9mZnNldHMKKyAqLworI2RlZmluZSBIQVJSSUVSX01QQkFSX09GRgkJUENJX0JBU0VfQUREUkVTU18wCisjZGVmaW5lIEhBUlJJRVJfSVRCQVIwX09GRgkJUENJX0JBU0VfQUREUkVTU18xCisjZGVmaW5lIEhBUlJJRVJfSVRCQVIxX09GRgkJUENJX0JBU0VfQUREUkVTU18yCisjZGVmaW5lIEhBUlJJRVJfSVRCQVIyX09GRgkJUENJX0JBU0VfQUREUkVTU18zCisjZGVmaW5lIEhBUlJJRVJfSVRCQVIzX09GRgkJUENJX0JBU0VfQUREUkVTU180CisKKyNkZWZpbmUgSEFSUklFUl9YQ1NSX0NPTkZJRyh4KSAoKHUzMilIQVJSSUVSX1hDU1JfVE9fUENGU19PRkYgKyAodTMyKXgpCisKKyNlbmRpZgkJCQkvKiBfX0FTTVBQQ19IQVJSSUVSX0RFRlNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9oYXNoLmggYi9pbmNsdWRlL2xpbnV4L2hhc2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2YxN2JiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9oYXNoLmgKQEAgLTAsMCArMSw1OCBAQAorI2lmbmRlZiBfTElOVVhfSEFTSF9ICisjZGVmaW5lIF9MSU5VWF9IQVNIX0gKKy8qIEZhc3QgaGFzaGluZyByb3V0aW5lIGZvciBhIGxvbmcuCisgICAoQykgMjAwMiBXaWxsaWFtIExlZSBJcndpbiBJSUksIElCTSAqLworCisvKgorICogS251dGggcmVjb21tZW5kcyBwcmltZXMgaW4gYXBwcm94aW1hdGVseSBnb2xkZW4gcmF0aW8gdG8gdGhlIG1heGltdW0KKyAqIGludGVnZXIgcmVwcmVzZW50YWJsZSBieSBhIG1hY2hpbmUgd29yZCBmb3IgbXVsdGlwbGljYXRpdmUgaGFzaGluZy4KKyAqIENodWNrIExldmVyIHZlcmlmaWVkIHRoZSBlZmZlY3RpdmVuZXNzIG9mIHRoaXMgdGVjaG5pcXVlOgorICogaHR0cDovL3d3dy5jaXRpLnVtaWNoLmVkdS90ZWNocmVwb3J0cy9yZXBvcnRzL2NpdGktdHItMDAtMS5wZGYKKyAqCisgKiBUaGVzZSBwcmltZXMgYXJlIGNob3NlbiB0byBiZSBiaXQtc3BhcnNlLCB0aGF0IGlzIG9wZXJhdGlvbnMgb24KKyAqIHRoZW0gY2FuIHVzZSBzaGlmdHMgYW5kIGFkZGl0aW9ucyBpbnN0ZWFkIG9mIG11bHRpcGxpY2F0aW9ucyBmb3IKKyAqIG1hY2hpbmVzIHdoZXJlIG11bHRpcGxpY2F0aW9ucyBhcmUgc2xvdy4KKyAqLworI2lmIEJJVFNfUEVSX0xPTkcgPT0gMzIKKy8qIDJeMzEgKyAyXjI5IC0gMl4yNSArIDJeMjIgLSAyXjE5IC0gMl4xNiArIDEgKi8KKyNkZWZpbmUgR09MREVOX1JBVElPX1BSSU1FIDB4OWUzNzAwMDFVTAorI2VsaWYgQklUU19QRVJfTE9ORyA9PSA2NAorLyogIDJeNjMgKyAyXjYxIC0gMl41NyArIDJeNTQgLSAyXjUxIC0gMl4xOCArIDEgKi8KKyNkZWZpbmUgR09MREVOX1JBVElPX1BSSU1FIDB4OWUzN2ZmZmZmZmZjMDAwMVVMCisjZWxzZQorI2Vycm9yIERlZmluZSBHT0xERU5fUkFUSU9fUFJJTUUgZm9yIHlvdXIgd29yZHNpemUuCisjZW5kaWYKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGhhc2hfbG9uZyh1bnNpZ25lZCBsb25nIHZhbCwgdW5zaWduZWQgaW50IGJpdHMpCit7CisJdW5zaWduZWQgbG9uZyBoYXNoID0gdmFsOworCisjaWYgQklUU19QRVJfTE9ORyA9PSA2NAorCS8qICBTaWdoLCBnY2MgY2FuJ3Qgb3B0aW1pc2UgdGhpcyBhbG9uZSBsaWtlIGl0IGRvZXMgZm9yIDMyIGJpdHMuICovCisJdW5zaWduZWQgbG9uZyBuID0gaGFzaDsKKwluIDw8PSAxODsKKwloYXNoIC09IG47CisJbiA8PD0gMzM7CisJaGFzaCAtPSBuOworCW4gPDw9IDM7CisJaGFzaCArPSBuOworCW4gPDw9IDM7CisJaGFzaCAtPSBuOworCW4gPDw9IDQ7CisJaGFzaCArPSBuOworCW4gPDw9IDI7CisJaGFzaCArPSBuOworI2Vsc2UKKwkvKiBPbiBzb21lIGNwdXMgbXVsdGlwbHkgaXMgZmFzdGVyLCBvbiBvdGhlcnMgZ2NjIHdpbGwgZG8gc2hpZnRzICovCisJaGFzaCAqPSBHT0xERU5fUkFUSU9fUFJJTUU7CisjZW5kaWYKKworCS8qIEhpZ2ggYml0cyBhcmUgbW9yZSByYW5kb20sIHNvIHVzZSB0aGVtLiAqLworCXJldHVybiBoYXNoID4+IChCSVRTX1BFUl9MT05HIC0gYml0cyk7Cit9CisJCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaGFzaF9wdHIodm9pZCAqcHRyLCB1bnNpZ25lZCBpbnQgYml0cykKK3sKKwlyZXR1cm4gaGFzaF9sb25nKCh1bnNpZ25lZCBsb25nKXB0ciwgYml0cyk7Cit9CisjZW5kaWYgLyogX0xJTlVYX0hBU0hfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9oYXllc2VzcC5oIGIvaW5jbHVkZS9saW51eC9oYXllc2VzcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0MzZiZTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2hheWVzZXNwLmgKQEAgLTAsMCArMSwxMjQgQEAKKyNpZm5kZWYgSEFZRVNFU1BfSAorI2RlZmluZSBIQVlFU0VTUF9ICisKK3N0cnVjdCBoYXllc19lc3BfY29uZmlnIHsKKwlzaG9ydCBmbG93X29uOworCXNob3J0IGZsb3dfb2ZmOworCXNob3J0IHJ4X3RyaWdnZXI7CisJc2hvcnQgdHhfdHJpZ2dlcjsKKwlzaG9ydCBwaW9fdGhyZXNob2xkOworCXVuc2lnbmVkIGNoYXIgcnhfdGltZW91dDsKKwljaGFyIGRtYV9jaGFubmVsOworfTsKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2RlZmluZSBFU1BfRE1BX0NIQU5ORUwgICAwCisjZGVmaW5lIEVTUF9SWF9UUklHR0VSICAgIDc2OAorI2RlZmluZSBFU1BfVFhfVFJJR0dFUiAgICA3NjgKKyNkZWZpbmUgRVNQX0ZMT1dfT0ZGICAgICAgMTAxNgorI2RlZmluZSBFU1BfRkxPV19PTiAgICAgICA5NDQKKyNkZWZpbmUgRVNQX1JYX1RNT1VUICAgICAgMTI4CisjZGVmaW5lIEVTUF9QSU9fVEhSRVNIT0xEIDMyCisKKyNkZWZpbmUgRVNQX0lOX01BSk9SCTU3CS8qIG1ham9yIGRldiAjIGZvciBkaWFsIGluICovCisjZGVmaW5lIEVTUF9PVVRfTUFKT1IJNTgJLyogbWFqb3IgZGV2ICMgZm9yIGRpYWwgb3V0ICovCisjZGVmaW5lIEVTUENfU0NBTEUgCTMKKyNkZWZpbmUgVUFSVF9FU0lfQkFTRQkweDAwCisjZGVmaW5lIFVBUlRfRVNJX1NJRAkweDAxCisjZGVmaW5lIFVBUlRfRVNJX1JYCTB4MDIKKyNkZWZpbmUgVUFSVF9FU0lfVFgJMHgwMgorI2RlZmluZSBVQVJUX0VTSV9DTUQxCTB4MDQKKyNkZWZpbmUgVUFSVF9FU0lfQ01EMgkweDA1CisjZGVmaW5lIFVBUlRfRVNJX1NUQVQxCTB4MDQKKyNkZWZpbmUgVUFSVF9FU0lfU1RBVDIJMHgwNQorI2RlZmluZSBVQVJUX0VTSV9SV1MJMHgwNworCisjZGVmaW5lIFVBUlRfSUVSX0RNQV9UTU9VVAkweDgwCisjZGVmaW5lIFVBUlRfSUVSX0RNQV9UQwkJMHgwOAorCisjZGVmaW5lIEVTSV9TRVRfSVJRCQkweDA0CisjZGVmaW5lIEVTSV9TRVRfRE1BX1RNT1VUCTB4MDUKKyNkZWZpbmUgRVNJX1NFVF9TUlZfTUFTSwkweDA2CisjZGVmaW5lIEVTSV9TRVRfRVJSX01BU0sJMHgwNworI2RlZmluZSBFU0lfU0VUX0ZMT1dfQ05UTAkweDA4CisjZGVmaW5lIEVTSV9TRVRfRkxPV19DSEFSUwkweDA5CisjZGVmaW5lIEVTSV9TRVRfRkxPV19MVkwJMHgwYQorI2RlZmluZSBFU0lfU0VUX1RSSUdHRVIJCTB4MGIKKyNkZWZpbmUgRVNJX1NFVF9SWF9USU1FT1VUCTB4MGMKKyNkZWZpbmUgRVNJX1NFVF9GTE9XX1RNT1VUCTB4MGQKKyNkZWZpbmUgRVNJX1dSSVRFX1VBUlQJCTB4MGUKKyNkZWZpbmUgRVNJX1JFQURfVUFSVAkJMHgwZgorI2RlZmluZSBFU0lfU0VUX01PREUJCTB4MTAKKyNkZWZpbmUgRVNJX0dFVF9FUlJfU1RBVAkweDEyCisjZGVmaW5lIEVTSV9HRVRfVUFSVF9TVEFUCTB4MTMKKyNkZWZpbmUgRVNJX0dFVF9SWF9BVkFJTAkweDE0CisjZGVmaW5lIEVTSV9HRVRfVFhfQVZBSUwJMHgxNQorI2RlZmluZSBFU0lfU1RBUlRfRE1BX1JYCTB4MTYKKyNkZWZpbmUgRVNJX1NUQVJUX0RNQV9UWAkweDE3CisjZGVmaW5lIEVTSV9JU1NVRV9CUkVBSwkJMHgxYQorI2RlZmluZSBFU0lfRkxVU0hfUlgJCTB4MWIKKyNkZWZpbmUgRVNJX0ZMVVNIX1RYCQkweDFjCisjZGVmaW5lIEVTSV9TRVRfQkFVRAkJMHgxZAorI2RlZmluZSBFU0lfU0VUX0VOSF9JUlEJCTB4MWYKKyNkZWZpbmUgRVNJX1NFVF9SRUlOVFIJCTB4MjAKKyNkZWZpbmUgRVNJX1NFVF9QUkVTQ0FMQVIJMHgyMworI2RlZmluZSBFU0lfTk9fQ09NTUFORAkJMHhmZgorCisjZGVmaW5lIEVTUF9TVEFUX1JYX1RJTUVPVVQJMHgwMQorI2RlZmluZSBFU1BfU1RBVF9ETUFfUlgJCTB4MDIKKyNkZWZpbmUgRVNQX1NUQVRfRE1BX1RYCQkweDA0CisjZGVmaW5lIEVTUF9TVEFUX05FVkVSX0RNQSAgICAgIDB4MDgKKyNkZWZpbmUgRVNQX1NUQVRfVVNFX1BJTyAgICAgICAgMHgxMAorCisjZGVmaW5lIEVTUF9FVkVOVF9XUklURV9XQUtFVVAJMAorI2RlZmluZSBFU1BfTUFHSUMJCTB4NTNlZQorI2RlZmluZSBFU1BfWE1JVF9TSVpFCQk0MDk2CisKK3N0cnVjdCBlc3Bfc3RydWN0IHsKKwlpbnQJCQltYWdpYzsKKwlzcGlubG9ja190CQlsb2NrOworCWludAkJCXBvcnQ7CisJaW50CQkJaXJxOworCWludAkJCWZsYWdzOyAJCS8qIGRlZmluZWQgaW4gdHR5LmggKi8KKwlzdHJ1Y3QgdHR5X3N0cnVjdCAJKnR0eTsKKwlpbnQJCQlyZWFkX3N0YXR1c19tYXNrOworCWludAkJCWlnbm9yZV9zdGF0dXNfbWFzazsKKwlpbnQJCQl0aW1lb3V0OworCWludAkJCXN0YXRfZmxhZ3M7CisJaW50CQkJY3VzdG9tX2Rpdmlzb3I7CisJaW50CQkJY2xvc2VfZGVsYXk7CisJdW5zaWduZWQgc2hvcnQJCWNsb3Npbmdfd2FpdDsKKwl1bnNpZ25lZCBzaG9ydAkJY2xvc2luZ193YWl0MjsKKwlpbnQJCQlJRVI7IAkvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovCisJaW50CQkJTUNSOyAJLyogTW9kZW0gY29udHJvbCByZWdpc3RlciAqLworCXVuc2lnbmVkIGxvbmcJCWV2ZW50OworCXVuc2lnbmVkIGxvbmcJCWxhc3RfYWN0aXZlOworCWludAkJCWxpbmU7CisJaW50CQkJY291bnQ7CSAgICAvKiAjIG9mIGZkIG9uIGRldmljZSAqLworCWludAkJCWJsb2NrZWRfb3BlbjsgLyogIyBvZiBibG9ja2VkIG9wZW5zICovCisJdW5zaWduZWQgY2hhciAJCSp4bWl0X2J1ZjsKKwlpbnQJCQl4bWl0X2hlYWQ7CisJaW50CQkJeG1pdF90YWlsOworCWludAkJCXhtaXRfY250OworCXN0cnVjdCB3b3JrX3N0cnVjdAl0cXVldWU7CisJc3RydWN0IHdvcmtfc3RydWN0CXRxdWV1ZV9oYW5ndXA7CisJd2FpdF9xdWV1ZV9oZWFkX3QJb3Blbl93YWl0OworCXdhaXRfcXVldWVfaGVhZF90CWNsb3NlX3dhaXQ7CisJd2FpdF9xdWV1ZV9oZWFkX3QJZGVsdGFfbXNyX3dhaXQ7CisJd2FpdF9xdWV1ZV9oZWFkX3QJYnJlYWtfd2FpdDsKKwlzdHJ1Y3QgYXN5bmNfaWNvdW50CWljb3VudDsJLyoga2VybmVsIGNvdW50ZXJzIGZvciB0aGUgNCBpbnB1dCBpbnRlcnJ1cHRzICovCisJc3RydWN0IGhheWVzX2VzcF9jb25maWcgY29uZmlnOyAvKiBwb3J0IGNvbmZpZ3VyYXRpb24gKi8KKwlzdHJ1Y3QgZXNwX3N0cnVjdAkqbmV4dF9wb3J0OyAvKiBGb3IgdGhlIGxpbmtlZCBsaXN0ICovCit9OworCitzdHJ1Y3QgZXNwX3Bpb19idWZmZXIgeworCXVuc2lnbmVkIGNoYXIgZGF0YVsxMDI0XTsKKwlzdHJ1Y3QgZXNwX3Bpb19idWZmZXIgKm5leHQ7Cit9OworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisKKyNlbmRpZiAvKiBFU1BfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2hkbGMuaCBiL2luY2x1ZGUvbGludXgvaGRsYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwMzE5NGUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2hkbGMuaApAQCAtMCwwICsxLDI1OCBAQAorLyoKKyAqIEdlbmVyaWMgSERMQyBzdXBwb3J0IHJvdXRpbmVzIGZvciBMaW51eAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OS0yMDAzIEtyenlzenRvZiBIYWxhc2EgPGtoY0BwbS53YXcucGw+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fSERMQ19ICisjZGVmaW5lIF9fSERMQ19ICisKKyNkZWZpbmUgR0VORVJJQ19IRExDX1ZFUlNJT04gNAkvKiBGb3Igc3luY2hyb25pemF0aW9uIHdpdGggc2V0aGRsYyB1dGlsaXR5ICovCisKKyNkZWZpbmUgQ0xPQ0tfREVGQVVMVCAgIDAJLyogRGVmYXVsdCBzZXR0aW5nICovCisjZGVmaW5lIENMT0NLX0VYVAkxCS8qIEV4dGVybmFsIFRYIGFuZCBSWCBjbG9jayAtIERURSAqLworI2RlZmluZSBDTE9DS19JTlQJMgkvKiBJbnRlcm5hbCBUWCBhbmQgUlggY2xvY2sgLSBEQ0UgKi8KKyNkZWZpbmUgQ0xPQ0tfVFhJTlQJMwkvKiBJbnRlcm5hbCBUWCBhbmQgZXh0ZXJuYWwgUlggY2xvY2sgKi8KKyNkZWZpbmUgQ0xPQ0tfVFhGUk9NUlgJNAkvKiBUWCBjbG9jayBkZXJpdmVkIGZyb20gZXh0ZXJuYWwgUlggY2xvY2sgKi8KKworCisjZGVmaW5lIEVOQ09ESU5HX0RFRkFVTFQJMCAvKiBEZWZhdWx0IHNldHRpbmcgKi8KKyNkZWZpbmUgRU5DT0RJTkdfTlJaCQkxCisjZGVmaW5lIEVOQ09ESU5HX05SWkkJCTIKKyNkZWZpbmUgRU5DT0RJTkdfRk1fTUFSSwkzCisjZGVmaW5lIEVOQ09ESU5HX0ZNX1NQQUNFCTQKKyNkZWZpbmUgRU5DT0RJTkdfTUFOQ0hFU1RFUgk1CisKKworI2RlZmluZSBQQVJJVFlfREVGQVVMVAkJMCAvKiBEZWZhdWx0IHNldHRpbmcgKi8KKyNkZWZpbmUgUEFSSVRZX05PTkUJCTEgLyogTm8gcGFyaXR5ICovCisjZGVmaW5lIFBBUklUWV9DUkMxNl9QUjAJMiAvKiBDUkMxNiwgaW5pdGlhbCB2YWx1ZSAweDAwMDAgKi8KKyNkZWZpbmUgUEFSSVRZX0NSQzE2X1BSMQkzIC8qIENSQzE2LCBpbml0aWFsIHZhbHVlIDB4RkZGRiAqLworI2RlZmluZSBQQVJJVFlfQ1JDMTZfUFIwX0NDSVRUCTQgLyogQ1JDMTYsIGluaXRpYWwgMHgwMDAwLCBJVFUtVCB2ZXJzaW9uICovCisjZGVmaW5lIFBBUklUWV9DUkMxNl9QUjFfQ0NJVFQJNSAvKiBDUkMxNiwgaW5pdGlhbCAweEZGRkYsIElUVS1UIHZlcnNpb24gKi8KKyNkZWZpbmUgUEFSSVRZX0NSQzMyX1BSMF9DQ0lUVAk2IC8qIENSQzMyLCBpbml0aWFsIHZhbHVlIDB4MDAwMDAwMDAgKi8KKyNkZWZpbmUgUEFSSVRZX0NSQzMyX1BSMV9DQ0lUVAk3IC8qIENSQzMyLCBpbml0aWFsIHZhbHVlIDB4RkZGRkZGRkYgKi8KKworI2RlZmluZSBMTUlfREVGQVVMVAkJMCAvKiBEZWZhdWx0IHNldHRpbmcgKi8KKyNkZWZpbmUgTE1JX05PTkUJCTEgLyogTm8gTE1JLCBhbGwgUFZDcyBhcmUgc3RhdGljICovCisjZGVmaW5lIExNSV9BTlNJCQkyIC8qIEFOU0kgQW5uZXggRCAqLworI2RlZmluZSBMTUlfQ0NJVFQJCTMgLyogSVRVLVQgQW5uZXggQSAqLworCisjZGVmaW5lIEhETENfTUFYX01UVSAxNTAwCS8qIEV0aGVybmV0IDE1MDAgYnl0ZXMgKi8KKyNkZWZpbmUgSERMQ19NQVhfTVJVIChIRExDX01BWF9NVFUgKyAxMCArIDE0ICsgNCkgLyogZm9yIEVUSCtWTEFOIG92ZXIgRlIgKi8KKworCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bmV0L3N5bmNwcHAuaD4KKyNpbmNsdWRlIDxsaW51eC9oZGxjL2lvY3RsLmg+CisKKwordHlwZWRlZiBzdHJ1Y3QgewkJLyogVXNlZCBpbiBDaXNjbyBhbmQgUFBQIG1vZGUgKi8KKwl1OCBhZGRyZXNzOworCXU4IGNvbnRyb2w7CisJdTE2IHByb3RvY29sOworfV9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBoZGxjX2hlYWRlcjsKKworCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1MzIgdHlwZTsJCS8qIGNvZGUgKi8KKwl1MzIgcGFyMTsKKwl1MzIgcGFyMjsKKwl1MTYgcmVsOwkJLyogcmVsaWFiaWxpdHkgKi8KKwl1MzIgdGltZTsKK31fX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgY2lzY29fcGFja2V0OworI2RlZmluZQlDSVNDT19QQUNLRVRfTEVOCTE4CisjZGVmaW5lCUNJU0NPX0JJR19QQUNLRVRfTEVOCTIwCisKKworCit0eXBlZGVmIHN0cnVjdCBwdmNfZGV2aWNlX3N0cnVjdCB7CisJc3RydWN0IG5ldF9kZXZpY2UgKm1hc3RlcjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbWFpbjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZXRoZXI7IC8qIGJyaWRnZWQgRXRoZXJuZXQgaW50ZXJmYWNlICovCisJc3RydWN0IHB2Y19kZXZpY2Vfc3RydWN0ICpuZXh0OwkvKiBTb3J0ZWQgaW4gYXNjZW5kaW5nIERMQ0kgb3JkZXIgKi8KKwlpbnQgZGxjaTsKKwlpbnQgb3Blbl9jb3VudDsKKworCXN0cnVjdCB7CisJCXVuc2lnbmVkIGludCBuZXc6IDE7CisJCXVuc2lnbmVkIGludCBhY3RpdmU6IDE7CisJCXVuc2lnbmVkIGludCBleGlzdDogMTsKKwkJdW5zaWduZWQgaW50IGRlbGV0ZWQ6IDE7CisJCXVuc2lnbmVkIGludCBmZWNuOiAxOworCQl1bnNpZ25lZCBpbnQgYmVjbjogMTsKKwl9c3RhdGU7Cit9cHZjX2RldmljZTsKKworCisKK3R5cGVkZWYgc3RydWN0IGhkbGNfZGV2aWNlX3N0cnVjdCB7CisJLyogVG8gYmUgaW5pdGlhbGl6ZWQgYnkgaGFyZHdhcmUgZHJpdmVyICovCisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CisKKwkvKiB1c2VkIGJ5IEhETEMgbGF5ZXIgdG8gdGFrZSBjb250cm9sIG92ZXIgSERMQyBkZXZpY2UgZnJvbSBodyBkcml2ZXIqLworCWludCAoKmF0dGFjaCkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJICAgICAgdW5zaWduZWQgc2hvcnQgZW5jb2RpbmcsIHVuc2lnbmVkIHNob3J0IHBhcml0eSk7CisKKwkvKiBoYXJkd2FyZSBkcml2ZXIgbXVzdCBoYW5kbGUgdGhpcyBpbnN0ZWFkIG9mIGRldi0+aGFyZF9zdGFydF94bWl0ICovCisJaW50ICgqeG1pdCkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisKKworCS8qIFRoaW5ncyBiZWxvdyBhcmUgZm9yIEhETEMgbGF5ZXIgaW50ZXJuYWwgdXNlIG9ubHkgKi8KKwlzdHJ1Y3QgeworCQlpbnQgKCpvcGVuKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKwkJdm9pZCAoKmNsb3NlKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKworCQkvKiBpZiBvcGVuICYgRENEICovCisJCXZvaWQgKCpzdGFydCkoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisJCS8qIGlmIG9wZW4gJiAhRENEICovCisJCXZvaWQgKCpzdG9wKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKworCQl2b2lkICgqZGV0YWNoKShzdHJ1Y3QgaGRsY19kZXZpY2Vfc3RydWN0ICpoZGxjKTsKKwkJaW50ICgqbmV0aWZfcngpKHN0cnVjdCBza19idWZmICpza2IpOworCQl1bnNpZ25lZCBzaG9ydCAoKnR5cGVfdHJhbnMpKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisJCWludCBpZDsJCS8qIElGX1BST1RPX0hETEMvQ0lTQ08vRlIvZXRjLiAqLworCX1wcm90bzsKKworCWludCBjYXJyaWVyOworCWludCBvcGVuOworCXNwaW5sb2NrX3Qgc3RhdGVfbG9jazsKKworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCWZyX3Byb3RvIHNldHRpbmdzOworCQkJcHZjX2RldmljZSAqZmlyc3RfcHZjOworCQkJaW50IGRjZV9wdmNfY291bnQ7CisKKwkJCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOworCQkJdW5zaWduZWQgbG9uZyBsYXN0X3BvbGw7CisJCQlpbnQgcmVsaWFibGU7CisJCQlpbnQgZGNlX2NoYW5nZWQ7CisJCQlpbnQgcmVxdWVzdDsKKwkJCWludCBmdWxscmVwX3NlbnQ7CisJCQl1MzIgbGFzdF9lcnJvcnM7IC8qIGxhc3QgZXJyb3JzIGJpdCBsaXN0ICovCisJCQl1OCBuMzkxY250OworCQkJdTggdHhzZXE7IC8qIFRYIHNlcXVlbmNlIG51bWJlciAqLworCQkJdTggcnhzZXE7IC8qIFJYIHNlcXVlbmNlIG51bWJlciAqLworCQl9ZnI7CisKKwkJc3RydWN0IHsKKwkJCWNpc2NvX3Byb3RvIHNldHRpbmdzOworCisJCQlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKKwkJCXVuc2lnbmVkIGxvbmcgbGFzdF9wb2xsOworCQkJaW50IHVwOworCQkJaW50IHJlcXVlc3Rfc2VudDsKKwkJCXUzMiB0eHNlcTsgLyogVFggc2VxdWVuY2UgbnVtYmVyICovCisJCQl1MzIgcnhzZXE7IC8qIFJYIHNlcXVlbmNlIG51bWJlciAqLworCQl9Y2lzY287CisKKwkJc3RydWN0IHsKKwkJCXJhd19oZGxjX3Byb3RvIHNldHRpbmdzOworCQl9cmF3X2hkbGM7CisKKwkJc3RydWN0IHsKKwkJCXN0cnVjdCBwcHBfZGV2aWNlIHBwcGRldjsKKwkJCXN0cnVjdCBwcHBfZGV2aWNlICpzeW5jcHBwX3B0cjsKKwkJCWludCAoKm9sZF9jaGFuZ2VfbXR1KShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQkgICAgICBpbnQgbmV3X210dSk7CisJCX1wcHA7CisJfXN0YXRlOworCXZvaWQgKnByaXY7Cit9aGRsY19kZXZpY2U7CisKKworCitpbnQgaGRsY19yYXdfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIpOworaW50IGhkbGNfcmF3X2V0aF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmcik7CitpbnQgaGRsY19jaXNjb19pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmcik7CitpbnQgaGRsY19wcHBfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIpOworaW50IGhkbGNfZnJfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIpOworaW50IGhkbGNfeDI1X2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyKTsKKworCisvKiBFeHBvcnRlZCBmcm9tIGhkbGMubyAqLworCisvKiBDYWxsZWQgYnkgaGFyZHdhcmUgZHJpdmVyIHdoZW4gYSB1c2VyIHJlcXVlc3RzIEhETEMgc2VydmljZSAqLworaW50IGhkbGNfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIsIGludCBjbWQpOworCisvKiBNdXN0IGJlIHVzZWQgYnkgaGFyZHdhcmUgZHJpdmVyIG9uIG1vZHVsZSBzdGFydHVwL2V4aXQgKi8KK2ludCByZWdpc3Rlcl9oZGxjX2RldmljZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3ZvaWQgdW5yZWdpc3Rlcl9oZGxjX2RldmljZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKworc3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX2hkbGNkZXYodm9pZCAqcHJpdik7CisKK3N0YXRpYyBfX2lubGluZV9fIGhkbGNfZGV2aWNlKiBkZXZfdG9faGRsYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXJldHVybiBuZXRkZXZfcHJpdihkZXYpOworfQorCisKK3N0YXRpYyBfX2lubGluZV9fIHB2Y19kZXZpY2UqIGRldl90b19wdmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gKHB2Y19kZXZpY2UqKWRldi0+cHJpdjsKK30KKworCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGRlYnVnX2ZyYW1lKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCit7CisJaW50IGk7CisKKwlmb3IgKGk9MDsgaSA8IHNrYi0+bGVuOyBpKyspIHsKKwkJaWYgKGkgPT0gMTAwKSB7CisJCQlwcmludGsoIi4uLlxuIik7CisJCQlyZXR1cm47CisJCX0KKwkJcHJpbnRrKCIgJTAyWCIsIHNrYi0+ZGF0YVtpXSk7CisJfQorCXByaW50aygiXG4iKTsKK30KKworCisvKiBNdXN0IGJlIGNhbGxlZCBieSBoYXJkd2FyZSBkcml2ZXIgd2hlbiBIRExDIGRldmljZSBpcyBiZWluZyBvcGVuZWQgKi8KK2ludCBoZGxjX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisvKiBNdXN0IGJlIGNhbGxlZCBieSBoYXJkd2FyZSBkcml2ZXIgd2hlbiBIRExDIGRldmljZSBpcyBiZWluZyBjbG9zZWQgKi8KK3ZvaWQgaGRsY19jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKy8qIENhbGxlZCBieSBoYXJkd2FyZSBkcml2ZXIgd2hlbiBEQ0QgbGluZSBsZXZlbCBjaGFuZ2VzICovCit2b2lkIGhkbGNfc2V0X2NhcnJpZXIoaW50IG9uLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKworLyogTWF5IGJlIHVzZWQgYnkgaGFyZHdhcmUgZHJpdmVyIHRvIGdhaW4gY29udHJvbCBvdmVyIEhETEMgZGV2aWNlICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGhkbGNfcHJvdG9fZGV0YWNoKGhkbGNfZGV2aWNlICpoZGxjKQoreworCWlmIChoZGxjLT5wcm90by5kZXRhY2gpCisJCWhkbGMtPnByb3RvLmRldGFjaChoZGxjKTsKKwloZGxjLT5wcm90by5kZXRhY2ggPSBOVUxMOworfQorCisKK3N0YXRpYyBfX2lubGluZV9fIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpoZGxjX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuICZkZXZfdG9faGRsYyhkZXYpLT5zdGF0czsKK30KKworCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBzaG9ydCBoZGxjX3R5cGVfdHJhbnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCWhkbGNfZGV2aWNlICpoZGxjID0gZGV2X3RvX2hkbGMoZGV2KTsKKworCXNrYi0+bWFjLnJhdyAgPSBza2ItPmRhdGE7CisJc2tiLT5kZXYgICAgICA9IGRldjsKKworCWlmIChoZGxjLT5wcm90by50eXBlX3RyYW5zKQorCQlyZXR1cm4gaGRsYy0+cHJvdG8udHlwZV90cmFucyhza2IsIGRldik7CisJZWxzZQorCQlyZXR1cm4gaHRvbnMoRVRIX1BfSERMQyk7Cit9CisKKyNlbmRpZiAvKiBfX0tFUk5FTCAqLworI2VuZGlmIC8qIF9fSERMQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2hkbGMvaW9jdGwuaCBiL2luY2x1ZGUvbGludXgvaGRsYy9pb2N0bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4NDMwYmEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2hkbGMvaW9jdGwuaApAQCAtMCwwICsxLDQ4IEBACisjaWZuZGVmIF9fSERMQ19JT0NUTF9IX18KKyNkZWZpbmUgX19IRExDX0lPQ1RMX0hfXworCit0eXBlZGVmIHN0cnVjdCB7IAorCXVuc2lnbmVkIGludCBjbG9ja19yYXRlOyAvKiBiaXRzIHBlciBzZWNvbmQgKi8KKwl1bnNpZ25lZCBpbnQgY2xvY2tfdHlwZTsgLyogaW50ZXJuYWwsIGV4dGVybmFsLCBUWC1pbnRlcm5hbCBldGMuICovCisJdW5zaWduZWQgc2hvcnQgbG9vcGJhY2s7Cit9IHN5bmNfc2VyaWFsX3NldHRpbmdzOyAgICAgICAgICAvKiBWLjM1LCBWLjI0LCBYLjIxICovCisKK3R5cGVkZWYgc3RydWN0IHsgCisJdW5zaWduZWQgaW50IGNsb2NrX3JhdGU7IC8qIGJpdHMgcGVyIHNlY29uZCAqLworCXVuc2lnbmVkIGludCBjbG9ja190eXBlOyAvKiBpbnRlcm5hbCwgZXh0ZXJuYWwsIFRYLWludGVybmFsIGV0Yy4gKi8KKwl1bnNpZ25lZCBzaG9ydCBsb29wYmFjazsKKwl1bnNpZ25lZCBpbnQgc2xvdF9tYXA7Cit9IHRlMV9zZXR0aW5nczsgICAgICAgICAgICAgICAgICAvKiBUMSwgRTEgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIHNob3J0IGVuY29kaW5nOworCXVuc2lnbmVkIHNob3J0IHBhcml0eTsKK30gcmF3X2hkbGNfcHJvdG87CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQgdDM5MTsKKwl1bnNpZ25lZCBpbnQgdDM5MjsKKwl1bnNpZ25lZCBpbnQgbjM5MTsKKwl1bnNpZ25lZCBpbnQgbjM5MjsKKwl1bnNpZ25lZCBpbnQgbjM5MzsKKwl1bnNpZ25lZCBzaG9ydCBsbWk7CisJdW5zaWduZWQgc2hvcnQgZGNlOyAvKiAxIGZvciBEQ0UgKG5ldHdvcmsgc2lkZSkgb3BlcmF0aW9uICovCit9IGZyX3Byb3RvOworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgaW50IGRsY2k7Cit9IGZyX3Byb3RvX3B2YzsgICAgICAgICAgLyogZm9yIGNyZWF0aW5nL2RlbGV0aW5nIEZSIFBWQ3MgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludCBkbGNpOworCWNoYXIgbWFzdGVyW0lGTkFNU0laXTsJLyogTmFtZSBvZiBtYXN0ZXIgRlJBRCBkZXZpY2UgKi8KK31mcl9wcm90b19wdmNfaW5mbzsJCS8qIGZvciByZXR1cm5pbmcgUFZDIGluZm9ybWF0aW9uIG9ubHkgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIHVuc2lnbmVkIGludCBpbnRlcnZhbDsKKyAgICB1bnNpZ25lZCBpbnQgdGltZW91dDsKK30gY2lzY29fcHJvdG87CisKKy8qIFBQUCBkb2Vzbid0IG5lZWQgYW55IGluZm8gbm93IC0gc3VwcGx5IGxlbmd0aCA9IDAgdG8gaW9jdGwgKi8KKworI2VuZGlmIC8qIF9fSERMQ19JT0NUTF9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaGRsY2Rydi5oIGIvaW5jbHVkZS9saW51eC9oZGxjZHJ2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY2ZWUzYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvaGRsY2Rydi5oCkBAIC0wLDAgKzEsMzc4IEBACisvKgorICogaGRsY2Rydi5oICAtLSBIRExDIHBhY2tldCByYWRpbyBuZXR3b3JrIGRyaXZlci4KKyAqIFRoZSBMaW51eCBzb3VuZGNhcmQgZHJpdmVyIGZvciAxMjAwIGJhdWQgYW5kIDk2MDAgYmF1ZCBwYWNrZXQgcmFkaW8KKyAqIChDKSAxOTk2LTE5OTggYnkgVGhvbWFzIFNhaWxlciwgSEI5Sk5YL0FFNFdBCisgKi8KKworI2lmbmRlZiBfSERMQ0RSVl9ICisjZGVmaW5lIF9IRExDRFJWX0gKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qCisgKiBzdHJ1Y3RzIGZvciB0aGUgSU9DVEwgY29tbWFuZHMKKyAqLworCitzdHJ1Y3QgaGRsY2Rydl9wYXJhbXMgeworCWludCBpb2Jhc2U7CisJaW50IGlycTsKKwlpbnQgZG1hOworCWludCBkbWEyOworCWludCBzZXJpb2Jhc2U7CisJaW50IHBhcmlvYmFzZTsKKwlpbnQgbWlkaWlvYmFzZTsKK307CQorCitzdHJ1Y3QgaGRsY2Rydl9jaGFubmVsX3BhcmFtcyB7CisJaW50IHR4X2RlbGF5OyAgLyogdGhlIHRyYW5zbWl0dGVyIGtleXVwIGRlbGF5IGluIDEwbXMgdW5pdHMgKi8KKwlpbnQgdHhfdGFpbDsgICAvKiB0aGUgdHJhbnNtaXR0ZXIga2V5b2ZmIGRlbGF5IGluIDEwbXMgdW5pdHMgKi8KKwlpbnQgc2xvdHRpbWU7ICAvKiB0aGUgc2xvdHRpbWUgaW4gMTBtczsgdXN1YWxseSAxMCA9IDEwMG1zICovCisJaW50IHBwZXJzaXN0OyAgLyogdGhlIHAtcGVyc2lzdGVuY2UgMC4uMjU1ICovCisJaW50IGZ1bGxkdXA7ICAgLyogc29tZSBkcml2ZXIgZG8gbm90IHN1cHBvcnQgZnVsbCBkdXBsZXgsIHNldHRpbmcgKi8KKwkgICAgICAgICAgICAgICAvKiB0aGlzIGp1c3QgbWFrZXMgdGhlbSBzZW5kIGV2ZW4gaWYgRENEIGlzIG9uICovCit9OwkKKworc3RydWN0IGhkbGNkcnZfb2xkX2NoYW5uZWxfc3RhdGUgeworICAJaW50IHB0dDsKKyAgCWludCBkY2Q7CisgIAlpbnQgcHR0X2tleWVkOworfTsKKworc3RydWN0IGhkbGNkcnZfY2hhbm5lbF9zdGF0ZSB7CisgCWludCBwdHQ7CisgCWludCBkY2Q7CisgCWludCBwdHRfa2V5ZWQ7CisgCXVuc2lnbmVkIGxvbmcgdHhfcGFja2V0czsKKyAJdW5zaWduZWQgbG9uZyB0eF9lcnJvcnM7CisgCXVuc2lnbmVkIGxvbmcgcnhfcGFja2V0czsKKyAJdW5zaWduZWQgbG9uZyByeF9lcnJvcnM7Cit9OworCitzdHJ1Y3QgaGRsY2Rydl9pb2N0bCB7CisJaW50IGNtZDsKKwl1bmlvbiB7CisJCXN0cnVjdCBoZGxjZHJ2X3BhcmFtcyBtcDsKKwkJc3RydWN0IGhkbGNkcnZfY2hhbm5lbF9wYXJhbXMgY3A7CisJCXN0cnVjdCBoZGxjZHJ2X2NoYW5uZWxfc3RhdGUgY3M7CisJCXN0cnVjdCBoZGxjZHJ2X29sZF9jaGFubmVsX3N0YXRlIG9jczsKKwkJdW5zaWduZWQgaW50IGNhbGlicmF0ZTsKKwkJdW5zaWduZWQgY2hhciBiaXRzOworCQljaGFyIG1vZGVuYW1lWzEyOF07CisJCWNoYXIgZHJpdmVybmFtZVszMl07CisJfSBkYXRhOworfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAqIGlvY3RsIHZhbHVlcworICovCisjZGVmaW5lIEhETENEUlZDVExfR0VUTU9ERU1QQVIgICAgICAgMAorI2RlZmluZSBIRExDRFJWQ1RMX1NFVE1PREVNUEFSICAgICAgIDEKKyNkZWZpbmUgSERMQ0RSVkNUTF9NT0RFTVBBUk1BU0sgICAgICAyICAvKiBub3QgaGFuZGxlZCBieSBoZGxjZHJ2ICovCisjZGVmaW5lIEhETENEUlZDVExfR0VUQ0hBTk5FTFBBUiAgICAxMAorI2RlZmluZSBIRExDRFJWQ1RMX1NFVENIQU5ORUxQQVIgICAgMTEKKyNkZWZpbmUgSERMQ0RSVkNUTF9PTERHRVRTVEFUICAgICAgIDIwCisjZGVmaW5lIEhETENEUlZDVExfQ0FMSUJSQVRFICAgICAgICAyMQorI2RlZmluZSBIRExDRFJWQ1RMX0dFVFNUQVQgICAgICAgICAgMjIKKworLyoKKyAqIHRoZXNlIGFyZSBtYWlubHkgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcworICovCisjZGVmaW5lIEhETENEUlZDVExfR0VUU0FNUExFUyAgICAgICAzMAorI2RlZmluZSBIRExDRFJWQ1RMX0dFVEJJVFMgICAgICAgICAgMzEKKworLyoKKyAqIG5vdCBoYW5kbGVkIGJ5IGhkbGNkcnYsIGJ1dCBieSBpdHMgZGVwZW5kaW5nIGRyaXZlcnMKKyAqLworI2RlZmluZSBIRExDRFJWQ1RMX0dFVE1PREUgICAgICAgICAgNDAKKyNkZWZpbmUgSERMQ0RSVkNUTF9TRVRNT0RFICAgICAgICAgIDQxCisjZGVmaW5lIEhETENEUlZDVExfTU9ERUxJU1QgICAgICAgICA0MgorI2RlZmluZSBIRExDRFJWQ1RMX0RSSVZFUk5BTUUgICAgICAgNDMKKworLyoKKyAqIG1hc2sgb2YgbmVlZGVkIG1vZGVtIHBhcmFtZXRlcnMsIHJldHVybmVkIGJ5IEhETENEUlZDVExfTU9ERU1QQVJNQVNLCisgKi8KKyNkZWZpbmUgSERMQ0RSVl9QQVJNQVNLX0lPQkFTRSAgICAgICgxPDwwKQorI2RlZmluZSBIRExDRFJWX1BBUk1BU0tfSVJRICAgICAgICAgKDE8PDEpCisjZGVmaW5lIEhETENEUlZfUEFSTUFTS19ETUEgICAgICAgICAoMTw8MikKKyNkZWZpbmUgSERMQ0RSVl9QQVJNQVNLX0RNQTIgICAgICAgICgxPDwzKQorI2RlZmluZSBIRExDRFJWX1BBUk1BU0tfU0VSSU9CQVNFICAgKDE8PDQpCisjZGVmaW5lIEhETENEUlZfUEFSTUFTS19QQVJJT0JBU0UgICAoMTw8NSkKKyNkZWZpbmUgSERMQ0RSVl9QQVJNQVNLX01JRElJT0JBU0UgICgxPDw2KQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaWYuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorCisjZGVmaW5lIEhETENEUlZfTUFHSUMgICAgICAweDVhYzZlNzc4CisjZGVmaW5lIEhETENEUlZfSERMQ0JVRkZFUiAgMzIgLyogc2hvdWxkIGJlIGEgcG93ZXIgb2YgMiBmb3Igc3BlZWQgcmVhc29ucyAqLworI2RlZmluZSBIRExDRFJWX0JJVEJVRkZFUiAgMjU2IC8qIHNob3VsZCBiZSBhIHBvd2VyIG9mIDIgZm9yIHNwZWVkIHJlYXNvbnMgKi8KKyN1bmRlZiBIRExDRFJWX0xPT1BCQUNLICAvKiBkZWZpbmUgZm9yIEhETEMgZGVidWdnaW5nIHB1cnBvc2VzICovCisjZGVmaW5lIEhETENEUlZfREVCVUcKKworLyogbWF4aW11bSBwYWNrZXQgbGVuZ3RoLCBleGNsdWRpbmcgQ1JDICovCisjZGVmaW5lIEhETENEUlZfTUFYRkxFTiAgICAgICAgICAgICA0MDAJCisKKworc3RydWN0IGhkbGNkcnZfaGRsY2J1ZmZlciB7CisJc3BpbmxvY2tfdCBsb2NrOworCXVuc2lnbmVkIHJkLCB3cjsKKwl1bnNpZ25lZCBzaG9ydCBidWZbSERMQ0RSVl9IRExDQlVGRkVSXTsKK307CisKKyNpZmRlZiBIRExDRFJWX0RFQlVHCitzdHJ1Y3QgaGRsY2Rydl9iaXRidWZmZXIgeworCXVuc2lnbmVkIGludCByZDsKKwl1bnNpZ25lZCBpbnQgd3I7CisJdW5zaWduZWQgaW50IHNocmVnOworCXVuc2lnbmVkIGNoYXIgYnVmZmVyW0hETENEUlZfQklUQlVGRkVSXTsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBoZGxjZHJ2X2FkZF9iaXRidWZmZXIoc3RydWN0IGhkbGNkcnZfYml0YnVmZmVyICpidWYsIAorCQkJCQkgdW5zaWduZWQgaW50IGJpdCkKK3sKKwl1bnNpZ25lZCBjaGFyIG5ldzsKKworCW5ldyA9IGJ1Zi0+c2hyZWcgJiAxOworCWJ1Zi0+c2hyZWcgPj49IDE7CisJYnVmLT5zaHJlZyB8PSAoISFiaXQpIDw8IDc7CisJaWYgKG5ldykgeworCQlidWYtPmJ1ZmZlcltidWYtPndyXSA9IGJ1Zi0+c2hyZWc7CisJCWJ1Zi0+d3IgPSAoYnVmLT53cisxKSAlIHNpemVvZihidWYtPmJ1ZmZlcik7CisJCWJ1Zi0+c2hyZWcgPSAweDgwOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIGhkbGNkcnZfYWRkX2JpdGJ1ZmZlcl93b3JkKHN0cnVjdCBoZGxjZHJ2X2JpdGJ1ZmZlciAqYnVmLCAKKwkJCQkJICAgICAgdW5zaWduZWQgaW50IGJpdHMpCit7CisJYnVmLT5idWZmZXJbYnVmLT53cl0gPSBiaXRzICYgMHhmZjsKKwlidWYtPndyID0gKGJ1Zi0+d3IrMSkgJSBzaXplb2YoYnVmLT5idWZmZXIpOworCWJ1Zi0+YnVmZmVyW2J1Zi0+d3JdID0gKGJpdHMgPj4gOCkgJiAweGZmOworCWJ1Zi0+d3IgPSAoYnVmLT53cisxKSAlIHNpemVvZihidWYtPmJ1ZmZlcik7CisKK30KKyNlbmRpZiAvKiBIRExDRFJWX0RFQlVHICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKgorICogSW5mb3JtYXRpb24gdGhhdCBuZWVkIHRvIGJlIGtlcHQgZm9yIGVhY2ggZHJpdmVyLiAKKyAqLworCitzdHJ1Y3QgaGRsY2Rydl9vcHMgeworCS8qCisJICogZmlyc3Qgc29tZSBpbmZvcm1hdGlvbnMgbmVlZGVkIGJ5IHRoZSBoZGxjZHJ2IHJvdXRpbmVzCisJICovCisJY29uc3QgY2hhciAqZHJ2bmFtZTsKKwljb25zdCBjaGFyICpkcnZpbmZvOworCS8qCisJICogdGhlIHJvdXRpbmVzIGNhbGxlZCBieSB0aGUgaGRsY2RydiByb3V0aW5lcworCSAqLworCWludCAoKm9wZW4pKHN0cnVjdCBuZXRfZGV2aWNlICopOworCWludCAoKmNsb3NlKShzdHJ1Y3QgbmV0X2RldmljZSAqKTsKKwlpbnQgKCppb2N0bCkoc3RydWN0IG5ldF9kZXZpY2UgKiwgc3RydWN0IGlmcmVxICosIAorCQkgICAgIHN0cnVjdCBoZGxjZHJ2X2lvY3RsICosIGludCk7Cit9OworCitzdHJ1Y3QgaGRsY2Rydl9zdGF0ZSB7CisJaW50IG1hZ2ljOworCWludCBvcGVuZWQ7CisKKwljb25zdCBzdHJ1Y3QgaGRsY2Rydl9vcHMgKm9wczsKKworCXN0cnVjdCB7CisJCWludCBiaXRyYXRlOworCX0gcGFyOworCisJc3RydWN0IGhkbGNkcnZfcHR0b3V0cHV0IHsKKwkJaW50IGRtYTI7CisJCWludCBzZXJpb2Jhc2U7CisJCWludCBwYXJpb2Jhc2U7CisJCWludCBtaWRpaW9iYXNlOworCQl1bnNpZ25lZCBpbnQgZmxhZ3M7CisJfSBwdHRfb3V0OworCisJc3RydWN0IGhkbGNkcnZfY2hhbm5lbF9wYXJhbXMgY2hfcGFyYW1zOworCisJc3RydWN0IGhkbGNkcnZfaGRsY3J4IHsKKwkJc3RydWN0IGhkbGNkcnZfaGRsY2J1ZmZlciBoYnVmOworCQlsb25nIGluX2hkbGNfcng7CisJCS8qIDAgPSBzeW5jIGh1bnQsICE9IDAgcmVjZWl2aW5nICovCisJCWludCByeF9zdGF0ZTsJCisJCXVuc2lnbmVkIGludCBiaXRzdHJlYW07CisJCXVuc2lnbmVkIGludCBiaXRidWY7CisJCWludCBudW1iaXRzOworCQl1bnNpZ25lZCBjaGFyIGRjZDsKKwkJCisJCWludCBsZW47CisJCXVuc2lnbmVkIGNoYXIgKmJwOworCQl1bnNpZ25lZCBjaGFyIGJ1ZmZlcltIRExDRFJWX01BWEZMRU4rMl07CisJfSBoZGxjcng7CisKKwlzdHJ1Y3QgaGRsY2Rydl9oZGxjdHggeworCQlzdHJ1Y3QgaGRsY2Rydl9oZGxjYnVmZmVyIGhidWY7CisJCWxvbmcgaW5faGRsY190eDsKKwkJLyoKKwkJICogMCA9IHNlbmQgZmxhZ3MKKwkJICogMSA9IHNlbmQgdHh0YWlsIChmbGFncykKKwkJICogMiA9IHNlbmQgcGFja2V0CisJCSAqLworCQlpbnQgdHhfc3RhdGU7CQorCQlpbnQgbnVtZmxhZ3M7CisJCXVuc2lnbmVkIGludCBiaXRzdHJlYW07CisJCXVuc2lnbmVkIGNoYXIgcHR0OworCQlpbnQgY2FsaWJyYXRlOworCQlpbnQgc2xvdGNudDsKKworCQl1bnNpZ25lZCBpbnQgYml0YnVmOworCQlpbnQgbnVtYml0czsKKwkJCisJCWludCBsZW47CisJCXVuc2lnbmVkIGNoYXIgKmJwOworCQl1bnNpZ25lZCBjaGFyIGJ1ZmZlcltIRExDRFJWX01BWEZMRU4rMl07CisJfSBoZGxjdHg7CisKKyNpZmRlZiBIRExDRFJWX0RFQlVHCisJc3RydWN0IGhkbGNkcnZfYml0YnVmZmVyIGJpdGJ1Zl9jaGFubmVsOworCXN0cnVjdCBoZGxjZHJ2X2JpdGJ1ZmZlciBiaXRidWZfaGRsYzsKKyNlbmRpZiAvKiBIRExDRFJWX0RFQlVHICovCisKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKKwlpbnQgcHR0X2tleWVkOworCisJLyogcXVldWVkIHNrYiBmb3IgdHJhbnNtaXNzaW9uICovCisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKK307CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGlubGluZSBpbnQgaGRsY2Rydl9oYnVmX2Z1bGwoc3RydWN0IGhkbGNkcnZfaGRsY2J1ZmZlciAqaGIpIAoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldDsKKwkKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaGItPmxvY2ssIGZsYWdzKTsKKwlyZXQgPSAhKChIRExDRFJWX0hETENCVUZGRVIgLSAxICsgaGItPnJkIC0gaGItPndyKSAlIEhETENEUlZfSERMQ0JVRkZFUik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGItPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmV0OworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW5saW5lIGludCBoZGxjZHJ2X2hidWZfZW1wdHkoc3RydWN0IGhkbGNkcnZfaGRsY2J1ZmZlciAqaGIpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0OworCQorCXNwaW5fbG9ja19pcnFzYXZlKCZoYi0+bG9jaywgZmxhZ3MpOworCXJldCA9IChoYi0+cmQgPT0gaGItPndyKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoYi0+bG9jaywgZmxhZ3MpOworCXJldHVybiByZXQ7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgaGRsY2Rydl9oYnVmX2dldChzdHJ1Y3QgaGRsY2Rydl9oZGxjYnVmZmVyICpoYikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIHNob3J0IHZhbDsKKwl1bnNpZ25lZCBuZXdyOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmhiLT5sb2NrLCBmbGFncyk7CisJaWYgKGhiLT5yZCA9PSBoYi0+d3IpCisJCXZhbCA9IDA7CisJZWxzZSB7CisJCW5ld3IgPSAoaGItPnJkKzEpICUgSERMQ0RSVl9IRExDQlVGRkVSOworCQl2YWwgPSBoYi0+YnVmW2hiLT5yZF07CisJCWhiLT5yZCA9IG5ld3I7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhiLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIHZhbDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGlubGluZSB2b2lkIGhkbGNkcnZfaGJ1Zl9wdXQoc3RydWN0IGhkbGNkcnZfaGRsY2J1ZmZlciAqaGIsIAorCQkJCSAgICB1bnNpZ25lZCBzaG9ydCB2YWwpCit7CisJdW5zaWduZWQgbmV3cDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCQorCXNwaW5fbG9ja19pcnFzYXZlKCZoYi0+bG9jaywgZmxhZ3MpOworCW5ld3AgPSAoaGItPndyKzEpICUgSERMQ0RSVl9IRExDQlVGRkVSOworCWlmIChuZXdwICE9IGhiLT5yZCkgeyAKKwkJaGItPmJ1ZltoYi0+d3JdID0gdmFsICYgMHhmZmZmOworCQloYi0+d3IgPSBuZXdwOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoYi0+bG9jaywgZmxhZ3MpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgaGRsY2Rydl9wdXRiaXRzKHN0cnVjdCBoZGxjZHJ2X3N0YXRlICpzLCB1bnNpZ25lZCBpbnQgYml0cykKK3sKKwloZGxjZHJ2X2hidWZfcHV0KCZzLT5oZGxjcnguaGJ1ZiwgYml0cyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGhkbGNkcnZfZ2V0Yml0cyhzdHJ1Y3QgaGRsY2Rydl9zdGF0ZSAqcykKK3sKKwl1bnNpZ25lZCBpbnQgcmV0OworCisJaWYgKGhkbGNkcnZfaGJ1Zl9lbXB0eSgmcy0+aGRsY3R4LmhidWYpKSB7CisJCWlmIChzLT5oZGxjdHguY2FsaWJyYXRlID4gMCkKKwkJCXMtPmhkbGN0eC5jYWxpYnJhdGUtLTsKKwkJZWxzZQorCQkJcy0+aGRsY3R4LnB0dCA9IDA7CisJCXJldCA9IDA7CisJfSBlbHNlIAorCQlyZXQgPSBoZGxjZHJ2X2hidWZfZ2V0KCZzLT5oZGxjdHguaGJ1Zik7CisjaWZkZWYgSERMQ0RSVl9MT09QQkFDSworCWhkbGNkcnZfaGJ1Zl9wdXQoJnMtPmhkbGNyeC5oYnVmLCByZXQpOworI2VuZGlmIC8qIEhETENEUlZfTE9PUEJBQ0sgKi8KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaGRsY2Rydl9jaGFubmVsYml0KHN0cnVjdCBoZGxjZHJ2X3N0YXRlICpzLCB1bnNpZ25lZCBpbnQgYml0KQoreworI2lmZGVmIEhETENEUlZfREVCVUcKKwloZGxjZHJ2X2FkZF9iaXRidWZmZXIoJnMtPmJpdGJ1Zl9jaGFubmVsLCBiaXQpOworI2VuZGlmIC8qIEhETENEUlZfREVCVUcgKi8KK30KKworc3RhdGljIGlubGluZSB2b2lkIGhkbGNkcnZfc2V0ZGNkKHN0cnVjdCBoZGxjZHJ2X3N0YXRlICpzLCBpbnQgZGNkKQoreworCXMtPmhkbGNyeC5kY2QgPSAhIWRjZDsKK30KKworc3RhdGljIGlubGluZSBpbnQgaGRsY2Rydl9wdHQoc3RydWN0IGhkbGNkcnZfc3RhdGUgKnMpCit7CisJcmV0dXJuIHMtPmhkbGN0eC5wdHQgfHwgKHMtPmhkbGN0eC5jYWxpYnJhdGUgPiAwKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwordm9pZCBoZGxjZHJ2X3JlY2VpdmVyKHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBoZGxjZHJ2X3N0YXRlICopOwordm9pZCBoZGxjZHJ2X3RyYW5zbWl0dGVyKHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBoZGxjZHJ2X3N0YXRlICopOwordm9pZCBoZGxjZHJ2X2FyYml0cmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqLCBzdHJ1Y3QgaGRsY2Rydl9zdGF0ZSAqKTsKK3N0cnVjdCBuZXRfZGV2aWNlICpoZGxjZHJ2X3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCBoZGxjZHJ2X29wcyAqb3BzLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgcHJpdnNpemUsIGNvbnN0IGNoYXIgKmlmbmFtZSwKKwkJCQkgICAgdW5zaWduZWQgaW50IGJhc2VhZGRyLCB1bnNpZ25lZCBpbnQgaXJxLCAKKwkJCQkgICAgdW5zaWduZWQgaW50IGRtYSk7Cit2b2lkIGhkbGNkcnZfdW5yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNlbmRpZiAvKiBfSERMQ0RSVl9IICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2hkcHVfZmVhdHVyZXMuaCBiL2luY2x1ZGUvbGludXgvaGRwdV9mZWF0dXJlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhODcxNTQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2hkcHVfZmVhdHVyZXMuaApAQCAtMCwwICsxLDI2IEBACisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKworc3RydWN0IGNwdXN0YXRlX3QgeworCXNwaW5sb2NrX3QgbG9jazsKKwlpbnQgZXhjbDsKKyAgICAgICAgaW50IG9wZW5fY291bnQ7CisJdW5zaWduZWQgY2hhciBjYWNoZWRfdmFsOworCWludCBpbml0ZWQ7CisJdW5zaWduZWQgbG9uZyAqc2V0X2FkZHI7CisJdW5zaWduZWQgbG9uZyAqY2xyX2FkZHI7Cit9OworCisKKyNkZWZpbmUgSERQVV9DUFVTVEFURV9OQU1FICJoZHB1IGNwdXN0YXRlIgorI2RlZmluZSBIRFBVX05FWFVTX05BTUUgImhkcHUgbmV4dXMiCisKKyNkZWZpbmUgQ1BVU1RBVEVfS0VSTkVMX01BSk9SICAweDEwCisKKyNkZWZpbmUgQ1BVU1RBVEVfS0VSTkVMX0lOSVRfRFJWICAgMCAvKiBDUFUgU3RhdGUgRHJpdmVyIEluaXRpYWxpemVkICovCisjZGVmaW5lIENQVVNUQVRFX0tFUk5FTF9JTklUX1BDSSAgIDEgLyogNjQzNjAgUENJIEJ1c3NlcyBJbml0ICovCisjZGVmaW5lIENQVVNUQVRFX0tFUk5FTF9JTklUX1JFRyAgIDIgLyogNjQzNjAgQnJpZGdlIEluaXQgKi8KKyNkZWZpbmUgQ1BVU1RBVEVfS0VSTkVMX0NQVTFfS0lDSyAgMyAvKiBCb290IGNwdSAxICovCisjZGVmaW5lIENQVVNUQVRFX0tFUk5FTF9DUFUxX09LICAgIDQgIC8qIENwdSAxIGhhcyBjaGVja2VkIGluICovCisjZGVmaW5lIENQVVNUQVRFX0tFUk5FTF9PSyAgICAgICAgIDUgLyogVGVybWluYWwgc3RhdGUgKi8KKyNkZWZpbmUgQ1BVU1RBVEVfS0VSTkVMX1JFU0VUICAgMTQgLyogQm9hcmQgcmVzZXQgdmlhIFNXKi8KKyNkZWZpbmUgQ1BVU1RBVEVfS0VSTkVMX0hBTFQgICAxNSAvKiBCb2FyZCBoYWx0ZWQgdmlhIFNXKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaGRyZWcuaCBiL2luY2x1ZGUvbGludXgvaGRyZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWQ2NjAwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9oZHJlZy5oCkBAIC0wLDAgKzEsNzAzIEBACisjaWZuZGVmIF9MSU5VWF9IRFJFR19ICisjZGVmaW5lIF9MSU5VWF9IRFJFR19ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8bGludXgvYXRhLmg+CisKKy8qCisgKiBUaGlzIGZpbGUgY29udGFpbnMgc29tZSBkZWZpbmVzIGZvciB0aGUgQVQtaGQtY29udHJvbGxlci4KKyAqIFZhcmlvdXMgc291cmNlcy4KKyAqLworCisvKiBpZGUuYyBoYXMgaXRzIG93biBwb3J0IGRlZmluaXRpb25zIGluICJpZGUuaCIgKi8KKworI2RlZmluZSBIRF9JUlEJCTE0CisKKy8qIEhkIGNvbnRyb2xsZXIgcmVncy4gUmVmOiBJQk0gQVQgQmlvcy1saXN0aW5nICovCisjZGVmaW5lIEhEX0RBVEEJCTB4MWYwCQkvKiBfQ1RMIHdoZW4gd3JpdGluZyAqLworI2RlZmluZSBIRF9FUlJPUgkweDFmMQkJLyogc2VlIGVyci1iaXRzICovCisjZGVmaW5lIEhEX05TRUNUT1IJMHgxZjIJCS8qIG5yIG9mIHNlY3RvcnMgdG8gcmVhZC93cml0ZSAqLworI2RlZmluZSBIRF9TRUNUT1IJMHgxZjMJCS8qIHN0YXJ0aW5nIHNlY3RvciAqLworI2RlZmluZSBIRF9MQ1lMCQkweDFmNAkJLyogc3RhcnRpbmcgY3lsaW5kZXIgKi8KKyNkZWZpbmUgSERfSENZTAkJMHgxZjUJCS8qIGhpZ2ggYnl0ZSBvZiBzdGFydGluZyBjeWwgKi8KKyNkZWZpbmUgSERfQ1VSUkVOVAkweDFmNgkJLyogMTAxZGhoaGggLCBkPWRyaXZlLCBoaGhoPWhlYWQgKi8KKyNkZWZpbmUgSERfU1RBVFVTCTB4MWY3CQkvKiBzZWUgc3RhdHVzLWJpdHMgKi8KKyNkZWZpbmUgSERfRkVBVFVSRQlIRF9FUlJPUgkvKiBzYW1lIGlvIGFkZHJlc3MsIHJlYWQ9ZXJyb3IsIHdyaXRlPWZlYXR1cmUgKi8KKyNkZWZpbmUgSERfUFJFQ09NUAlIRF9GRUFUVVJFCS8qIG9ic29sZXRlIHVzZSBvZiB0aGlzIHBvcnQgLSBwcmVkYXRlcyBJREUgKi8KKyNkZWZpbmUgSERfQ09NTUFORAlIRF9TVEFUVVMJLyogc2FtZSBpbyBhZGRyZXNzLCByZWFkPXN0YXR1cywgd3JpdGU9Y21kICovCisKKyNkZWZpbmUgSERfQ01ECQkweDNmNgkJLyogdXNlZCBmb3IgcmVzZXRzICovCisjZGVmaW5lIEhEX0FMVFNUQVRVUwkweDNmNgkJLyogc2FtZSBhcyBIRF9TVEFUVVMgYnV0IGRvZXNuJ3QgY2xlYXIgaXJxICovCisKKy8qIHJlbWFpbmRlciBpcyBzaGFyZWQgYmV0d2VlbiBoZC5jLCBpZGUuYywgaWRlLWNkLmMsIGFuZCB0aGUgaGRwYXJtIHV0aWxpdHkgKi8KKworLyogQml0cyBvZiBIRF9TVEFUVVMgKi8KKyNkZWZpbmUgRVJSX1NUQVQJCTB4MDEKKyNkZWZpbmUgSU5ERVhfU1RBVAkJMHgwMgorI2RlZmluZSBFQ0NfU1RBVAkJMHgwNAkvKiBDb3JyZWN0ZWQgZXJyb3IgKi8KKyNkZWZpbmUgRFJRX1NUQVQJCTB4MDgKKyNkZWZpbmUgU0VFS19TVEFUCQkweDEwCisjZGVmaW5lIFNSVl9TVEFUCQkweDEwCisjZGVmaW5lIFdSRVJSX1NUQVQJCTB4MjAKKyNkZWZpbmUgUkVBRFlfU1RBVAkJMHg0MAorI2RlZmluZSBCVVNZX1NUQVQJCTB4ODAKKworLyogQml0cyBmb3IgSERfRVJST1IgKi8KKyNkZWZpbmUgTUFSS19FUlIJCTB4MDEJLyogQmFkIGFkZHJlc3MgbWFyayAqLworI2RlZmluZSBUUkswX0VSUgkJMHgwMgkvKiBjb3VsZG4ndCBmaW5kIHRyYWNrIDAgKi8KKyNkZWZpbmUgQUJSVF9FUlIJCTB4MDQJLyogQ29tbWFuZCBhYm9ydGVkICovCisjZGVmaW5lIE1DUl9FUlIJCQkweDA4CS8qIG1lZGlhIGNoYW5nZSByZXF1ZXN0ICovCisjZGVmaW5lIElEX0VSUgkJCTB4MTAJLyogSUQgZmllbGQgbm90IGZvdW5kICovCisjZGVmaW5lIE1DX0VSUgkJCTB4MjAJLyogbWVkaWEgY2hhbmdlZCAqLworI2RlZmluZSBFQ0NfRVJSCQkJMHg0MAkvKiBVbmNvcnJlY3RhYmxlIEVDQyBlcnJvciAqLworI2RlZmluZSBCQkRfRVJSCQkJMHg4MAkvKiBwcmUtRUlERSBtZWFuaW5nOiAgYmxvY2sgbWFya2VkIGJhZCAqLworI2RlZmluZSBJQ1JDX0VSUgkJMHg4MAkvKiBuZXcgbWVhbmluZzogIENSQyBlcnJvciBkdXJpbmcgdHJhbnNmZXIgKi8KKworLyogQml0cyBvZiBIRF9OU0VDVE9SICovCisjZGVmaW5lIENECQkJMHgwMQorI2RlZmluZSBJTwkJCTB4MDIKKyNkZWZpbmUgUkVMCQkJMHgwNAorI2RlZmluZSBUQUdfTUFTSwkJMHhmOAorI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworLyoKKyAqIENvbW1hbmQgSGVhZGVyIHNpemVzIGZvciBJT0NUTCBjb21tYW5kcworICovCisKKyNkZWZpbmUgSERJT19EUklWRV9DTURfSERSX1NJWkUJCSg0ICogc2l6ZW9mKHU4KSkKKyNkZWZpbmUgSERJT19EUklWRV9IT0JfSERSX1NJWkUJCSg4ICogc2l6ZW9mKHU4KSkKKyNkZWZpbmUgSERJT19EUklWRV9UQVNLX0hEUl9TSVpFCSg4ICogc2l6ZW9mKHU4KSkKKworI2RlZmluZSBJREVfRFJJVkVfVEFTS19JTlZBTElECQktMQorI2RlZmluZSBJREVfRFJJVkVfVEFTS19OT19EQVRBCQkwCisjZGVmaW5lIElERV9EUklWRV9UQVNLX1NFVF9YRkVSCQkxCisKKyNkZWZpbmUgSURFX0RSSVZFX1RBU0tfSU4JCTIKKworI2RlZmluZSBJREVfRFJJVkVfVEFTS19PVVQJCTMKKyNkZWZpbmUgSURFX0RSSVZFX1RBU0tfUkFXX1dSSVRFCTQKKworLyoKKyAqIERlZmluZSBzdGFuZGFyZCB0YXNrZmlsZSBpbi9vdXQgcmVnaXN0ZXIKKyAqLworI2RlZmluZSBJREVfVEFTS0ZJTEVfU1REX09VVF9GTEFHUwkweEZFCisjZGVmaW5lIElERV9UQVNLRklMRV9TVERfSU5fRkxBR1MJMHhGRQorI2RlZmluZSBJREVfSE9CX1NURF9PVVRfRkxBR1MJCTB4M0MKKyNkZWZpbmUgSURFX0hPQl9TVERfSU5fRkxBR1MJCTB4M0MKKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIHRhc2tfaW9yZWdfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBzYXRhX2lvcmVnX3Q7CisKK3R5cGVkZWYgdW5pb24gaWRlX3JlZ192YWxpZF9zIHsKKwl1bnNpZ25lZCBhbGwJCQkJOiAxNjsKKwlzdHJ1Y3QgeworCQl1bnNpZ25lZCBkYXRhCQkJOiAxOworCQl1bnNpZ25lZCBlcnJvcl9mZWF0dXJlCQk6IDE7CisJCXVuc2lnbmVkIHNlY3RvcgkJCTogMTsKKwkJdW5zaWduZWQgbnNlY3RvcgkJOiAxOworCQl1bnNpZ25lZCBsY3lsCQkJOiAxOworCQl1bnNpZ25lZCBoY3lsCQkJOiAxOworCQl1bnNpZ25lZCBzZWxlY3QJCQk6IDE7CisJCXVuc2lnbmVkIHN0YXR1c19jb21tYW5kCQk6IDE7CisKKwkJdW5zaWduZWQgZGF0YV9ob2IJCTogMTsKKwkJdW5zaWduZWQgZXJyb3JfZmVhdHVyZV9ob2IJOiAxOworCQl1bnNpZ25lZCBzZWN0b3JfaG9iCQk6IDE7CisJCXVuc2lnbmVkIG5zZWN0b3JfaG9iCQk6IDE7CisJCXVuc2lnbmVkIGxjeWxfaG9iCQk6IDE7CisJCXVuc2lnbmVkIGhjeWxfaG9iCQk6IDE7CisJCXVuc2lnbmVkIHNlbGVjdF9ob2IJCTogMTsKKwkJdW5zaWduZWQgY29udHJvbF9ob2IJCTogMTsKKwl9IGI7Cit9IGlkZV9yZWdfdmFsaWRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaWRlX3Rhc2tfcmVxdWVzdF9zIHsKKwl0YXNrX2lvcmVnX3QJaW9fcG9ydHNbOF07CisJdGFza19pb3JlZ190CWhvYl9wb3J0c1s4XTsKKwlpZGVfcmVnX3ZhbGlkX3QJb3V0X2ZsYWdzOworCWlkZV9yZWdfdmFsaWRfdAlpbl9mbGFnczsKKwlpbnQJCWRhdGFfcGhhc2U7CisJaW50CQlyZXFfY21kOworCXVuc2lnbmVkIGxvbmcJb3V0X3NpemU7CisJdW5zaWduZWQgbG9uZwlpbl9zaXplOworfSBpZGVfdGFza19yZXF1ZXN0X3Q7CisKK3R5cGVkZWYgc3RydWN0IGlkZV9pb2N0bF9yZXF1ZXN0X3MgeworCWlkZV90YXNrX3JlcXVlc3RfdAkqdGFza19yZXF1ZXN0OworCXVuc2lnbmVkIGNoYXIJCSpvdXRfYnVmZmVyOworCXVuc2lnbmVkIGNoYXIJCSppbl9idWZmZXI7Cit9IGlkZV9pb2N0bF9yZXF1ZXN0X3Q7CisKK3N0cnVjdCBoZF9kcml2ZV9jbWRfaGRyIHsKKwl0YXNrX2lvcmVnX3QgY29tbWFuZDsKKwl0YXNrX2lvcmVnX3Qgc2VjdG9yX251bWJlcjsKKwl0YXNrX2lvcmVnX3QgZmVhdHVyZTsKKwl0YXNrX2lvcmVnX3Qgc2VjdG9yX2NvdW50OworfTsKKwordHlwZWRlZiBzdHJ1Y3QgaGRfZHJpdmVfdGFza19oZHIgeworCXRhc2tfaW9yZWdfdCBkYXRhOworCXRhc2tfaW9yZWdfdCBmZWF0dXJlOworCXRhc2tfaW9yZWdfdCBzZWN0b3JfY291bnQ7CisJdGFza19pb3JlZ190IHNlY3Rvcl9udW1iZXI7CisJdGFza19pb3JlZ190IGxvd19jeWxpbmRlcjsKKwl0YXNrX2lvcmVnX3QgaGlnaF9jeWxpbmRlcjsKKwl0YXNrX2lvcmVnX3QgZGV2aWNlX2hlYWQ7CisJdGFza19pb3JlZ190IGNvbW1hbmQ7Cit9IHRhc2tfc3RydWN0X3Q7CisKK3R5cGVkZWYgc3RydWN0IGhkX2RyaXZlX2hvYl9oZHIgeworCXRhc2tfaW9yZWdfdCBkYXRhOworCXRhc2tfaW9yZWdfdCBmZWF0dXJlOworCXRhc2tfaW9yZWdfdCBzZWN0b3JfY291bnQ7CisJdGFza19pb3JlZ190IHNlY3Rvcl9udW1iZXI7CisJdGFza19pb3JlZ190IGxvd19jeWxpbmRlcjsKKwl0YXNrX2lvcmVnX3QgaGlnaF9jeWxpbmRlcjsKKwl0YXNrX2lvcmVnX3QgZGV2aWNlX2hlYWQ7CisJdGFza19pb3JlZ190IGNvbnRyb2w7Cit9IGhvYl9zdHJ1Y3RfdDsKKworI2RlZmluZSBUQVNLRklMRV9JTlZBTElECQkweDdmZmYKKyNkZWZpbmUgVEFTS0ZJTEVfNDgJCQkweDgwMDAKKworI2RlZmluZSBUQVNLRklMRV9OT19EQVRBCQkweDAwMDAKKworI2RlZmluZSBUQVNLRklMRV9JTgkJCTB4MDAwMQorI2RlZmluZSBUQVNLRklMRV9NVUxUSV9JTgkJMHgwMDAyCisKKyNkZWZpbmUgVEFTS0ZJTEVfT1VUCQkJMHgwMDA0CisjZGVmaW5lIFRBU0tGSUxFX01VTFRJX09VVAkJMHgwMDA4CisjZGVmaW5lIFRBU0tGSUxFX0lOX09VVAkJCTB4MDAxMAorCisjZGVmaW5lIFRBU0tGSUxFX0lOX0RNQQkJCTB4MDAyMAorI2RlZmluZSBUQVNLRklMRV9PVVRfRE1BCQkweDAwNDAKKyNkZWZpbmUgVEFTS0ZJTEVfSU5fRE1BUQkJMHgwMDgwCisjZGVmaW5lIFRBU0tGSUxFX09VVF9ETUFRCQkweDAxMDAKKworI2RlZmluZSBUQVNLRklMRV9QX0lOCQkJMHgwMjAwCisjZGVmaW5lIFRBU0tGSUxFX1BfT1VUCQkJMHgwNDAwCisjZGVmaW5lIFRBU0tGSUxFX1BfSU5fRE1BCQkweDA4MDAKKyNkZWZpbmUgVEFTS0ZJTEVfUF9PVVRfRE1BCQkweDEwMDAKKyNkZWZpbmUgVEFTS0ZJTEVfUF9JTl9ETUFRCQkweDIwMDAKKyNkZWZpbmUgVEFTS0ZJTEVfUF9PVVRfRE1BUQkJMHg0MDAwCisKKy8qIEFUQS9BVEFQSSBDb21tYW5kcyBwcmUgVDEzIFNwZWMgKi8KKyNkZWZpbmUgV0lOX05PUAkJCQkweDAwCisvKgorICoJMHgwMS0+MHgwMiBSZXNlcnZlZAorICovCisjZGVmaW5lIENGQV9SRVFfRVhUX0VSUk9SX0NPREUJCTB4MDMgLyogQ0ZBIFJlcXVlc3QgRXh0ZW5kZWQgRXJyb3IgQ29kZSAqLworLyoKKyAqCTB4MDQtPjB4MDcgUmVzZXJ2ZWQKKyAqLworI2RlZmluZSBXSU5fU1JTVAkJCTB4MDggLyogQVRBUEkgc29mdCByZXNldCBjb21tYW5kICovCisjZGVmaW5lIFdJTl9ERVZJQ0VfUkVTRVQJCTB4MDgKKy8qCisgKgkweDA5LT4weDBGIFJlc2VydmVkCisgKi8KKyNkZWZpbmUgV0lOX1JFQ0FMCQkJMHgxMAorI2RlZmluZSBXSU5fUkVTVE9SRQkJCVdJTl9SRUNBTAorLyoKKyAqCTB4MTAtPjB4MUYgUmVzZXJ2ZWQKKyAqLworI2RlZmluZSBXSU5fUkVBRAkJCTB4MjAgLyogMjgtQml0ICovCisjZGVmaW5lIFdJTl9SRUFEX09OQ0UJCQkweDIxIC8qIDI4LUJpdCB3aXRob3V0IHJldHJpZXMgKi8KKyNkZWZpbmUgV0lOX1JFQURfTE9ORwkJCTB4MjIgLyogMjgtQml0ICovCisjZGVmaW5lIFdJTl9SRUFEX0xPTkdfT05DRQkJMHgyMyAvKiAyOC1CaXQgd2l0aG91dCByZXRyaWVzICovCisjZGVmaW5lIFdJTl9SRUFEX0VYVAkJCTB4MjQgLyogNDgtQml0ICovCisjZGVmaW5lIFdJTl9SRUFERE1BX0VYVAkJCTB4MjUgLyogNDgtQml0ICovCisjZGVmaW5lIFdJTl9SRUFERE1BX1FVRVVFRF9FWFQJCTB4MjYgLyogNDgtQml0ICovCisjZGVmaW5lIFdJTl9SRUFEX05BVElWRV9NQVhfRVhUCQkweDI3IC8qIDQ4LUJpdCAqLworLyoKKyAqCTB4MjgKKyAqLworI2RlZmluZSBXSU5fTVVMVFJFQURfRVhUCQkweDI5IC8qIDQ4LUJpdCAqLworLyoKKyAqCTB4MkEtPjB4MkYgUmVzZXJ2ZWQKKyAqLworI2RlZmluZSBXSU5fV1JJVEUJCQkweDMwIC8qIDI4LUJpdCAqLworI2RlZmluZSBXSU5fV1JJVEVfT05DRQkJCTB4MzEgLyogMjgtQml0IHdpdGhvdXQgcmV0cmllcyAqLworI2RlZmluZSBXSU5fV1JJVEVfTE9ORwkJCTB4MzIgLyogMjgtQml0ICovCisjZGVmaW5lIFdJTl9XUklURV9MT05HX09OQ0UJCTB4MzMgLyogMjgtQml0IHdpdGhvdXQgcmV0cmllcyAqLworI2RlZmluZSBXSU5fV1JJVEVfRVhUCQkJMHgzNCAvKiA0OC1CaXQgKi8KKyNkZWZpbmUgV0lOX1dSSVRFRE1BX0VYVAkJMHgzNSAvKiA0OC1CaXQgKi8KKyNkZWZpbmUgV0lOX1dSSVRFRE1BX1FVRVVFRF9FWFQJCTB4MzYgLyogNDgtQml0ICovCisjZGVmaW5lIFdJTl9TRVRfTUFYX0VYVAkJCTB4MzcgLyogNDgtQml0ICovCisjZGVmaW5lIENGQV9XUklURV9TRUNUX1dPX0VSQVNFCQkweDM4IC8qIENGQSBXcml0ZSBTZWN0b3JzIHdpdGhvdXQgZXJhc2UgKi8KKyNkZWZpbmUgV0lOX01VTFRXUklURV9FWFQJCTB4MzkgLyogNDgtQml0ICovCisvKgorICoJMHgzQS0+MHgzQiBSZXNlcnZlZAorICovCisjZGVmaW5lIFdJTl9XUklURV9WRVJJRlkJCTB4M0MgLyogMjgtQml0ICovCisvKgorICoJMHgzRC0+MHgzRiBSZXNlcnZlZAorICovCisjZGVmaW5lIFdJTl9WRVJJRlkJCQkweDQwIC8qIDI4LUJpdCAtIFJlYWQgVmVyaWZ5IFNlY3RvcnMgKi8KKyNkZWZpbmUgV0lOX1ZFUklGWV9PTkNFCQkJMHg0MSAvKiAyOC1CaXQgLSB3aXRob3V0IHJldHJpZXMgKi8KKyNkZWZpbmUgV0lOX1ZFUklGWV9FWFQJCQkweDQyIC8qIDQ4LUJpdCAqLworLyoKKyAqCTB4NDMtPjB4NEYgUmVzZXJ2ZWQKKyAqLworI2RlZmluZSBXSU5fRk9STUFUCQkJMHg1MAorLyoKKyAqCTB4NTEtPjB4NUYgUmVzZXJ2ZWQKKyAqLworI2RlZmluZSBXSU5fSU5JVAkJCTB4NjAKKy8qCisgKgkweDYxLT4weDVGIFJlc2VydmVkCisgKi8KKyNkZWZpbmUgV0lOX1NFRUsJCQkweDcwIC8qIDB4NzAtMHg3RiBSZXNlcnZlZCAqLworCisjZGVmaW5lIENGQV9UUkFOU0xBVEVfU0VDVE9SCQkweDg3IC8qIENGQSBUcmFuc2xhdGUgU2VjdG9yICovCisjZGVmaW5lIFdJTl9ESUFHTk9TRQkJCTB4OTAKKyNkZWZpbmUgV0lOX1NQRUNJRlkJCQkweDkxIC8qIHNldCBkcml2ZSBnZW9tZXRyeSB0cmFuc2xhdGlvbiAqLworI2RlZmluZSBXSU5fRE9XTkxPQURfTUlDUk9DT0RFCQkweDkyCisjZGVmaW5lIFdJTl9TVEFOREJZTk9XMgkJCTB4OTQKKyNkZWZpbmUgV0lOX1NUQU5EQlkyCQkJMHg5NgorI2RlZmluZSBXSU5fU0VUSURMRTIJCQkweDk3CisjZGVmaW5lIFdJTl9DSEVDS1BPV0VSTU9ERTIJCTB4OTgKKyNkZWZpbmUgV0lOX1NMRUVQTk9XMgkJCTB4OTkKKy8qCisgKgkweDlBIFZFTkRPUgorICovCisjZGVmaW5lIFdJTl9QQUNLRVRDTUQJCQkweEEwIC8qIFNlbmQgYSBwYWNrZXQgY29tbWFuZC4gKi8KKyNkZWZpbmUgV0lOX1BJREVOVElGWQkJCTB4QTEgLyogaWRlbnRpZnkgQVRBUEkgZGV2aWNlCSovCisjZGVmaW5lIFdJTl9RVUVVRURfU0VSVklDRQkJMHhBMgorI2RlZmluZSBXSU5fU01BUlQJCQkweEIwIC8qIHNlbGYtbW9uaXRvcmluZyBhbmQgcmVwb3J0aW5nICovCisjZGVmaW5lIENGQV9FUkFTRV9TRUNUT1JTCQkweEMwCisjZGVmaW5lIFdJTl9NVUxUUkVBRAkJCTB4QzQgLyogcmVhZCBzZWN0b3JzIHVzaW5nIG11bHRpcGxlIG1vZGUqLworI2RlZmluZSBXSU5fTVVMVFdSSVRFCQkJMHhDNSAvKiB3cml0ZSBzZWN0b3JzIHVzaW5nIG11bHRpcGxlIG1vZGUgKi8KKyNkZWZpbmUgV0lOX1NFVE1VTFQJCQkweEM2IC8qIGVuYWJsZS9kaXNhYmxlIG11bHRpcGxlIG1vZGUgKi8KKyNkZWZpbmUgV0lOX1JFQURETUFfUVVFVUVECQkweEM3IC8qIHJlYWQgc2VjdG9ycyB1c2luZyBRdWV1ZWQgRE1BIHRyYW5zZmVycyAqLworI2RlZmluZSBXSU5fUkVBRERNQQkJCTB4QzggLyogcmVhZCBzZWN0b3JzIHVzaW5nIERNQSB0cmFuc2ZlcnMgKi8KKyNkZWZpbmUgV0lOX1JFQURETUFfT05DRQkJMHhDOSAvKiAyOC1CaXQgLSB3aXRob3V0IHJldHJpZXMgKi8KKyNkZWZpbmUgV0lOX1dSSVRFRE1BCQkJMHhDQSAvKiB3cml0ZSBzZWN0b3JzIHVzaW5nIERNQSB0cmFuc2ZlcnMgKi8KKyNkZWZpbmUgV0lOX1dSSVRFRE1BX09OQ0UJCTB4Q0IgLyogMjgtQml0IC0gd2l0aG91dCByZXRyaWVzICovCisjZGVmaW5lIFdJTl9XUklURURNQV9RVUVVRUQJCTB4Q0MgLyogd3JpdGUgc2VjdG9ycyB1c2luZyBRdWV1ZWQgRE1BIHRyYW5zZmVycyAqLworI2RlZmluZSBDRkFfV1JJVEVfTVVMVElfV09fRVJBU0UJMHhDRCAvKiBDRkEgV3JpdGUgbXVsdGlwbGUgd2l0aG91dCBlcmFzZSAqLworI2RlZmluZSBXSU5fR0VUTUVESUFTVEFUVVMJCTB4REEKKyNkZWZpbmUgV0lOX0FDS01FRElBQ0hBTkdFCQkweERCIC8qIEFUQS0xLCBBVEEtMiB2ZW5kb3IgKi8KKyNkZWZpbmUgV0lOX1BPU1RCT09UCQkJMHhEQworI2RlZmluZSBXSU5fUFJFQk9PVCAJCQkweERECisjZGVmaW5lIFdJTl9ET09STE9DSwkJCTB4REUgLyogbG9jayBkb29yIG9uIHJlbW92YWJsZSBkcml2ZXMgKi8KKyNkZWZpbmUgV0lOX0RPT1JVTkxPQ0sJCQkweERGIC8qIHVubG9jayBkb29yIG9uIHJlbW92YWJsZSBkcml2ZXMgKi8KKyNkZWZpbmUgV0lOX1NUQU5EQllOT1cxCQkJMHhFMAorI2RlZmluZSBXSU5fSURMRUlNTUVESUFURQkJMHhFMSAvKiBmb3JjZSBkcml2ZSB0byBiZWNvbWUgInJlYWR5IiAqLworI2RlZmluZSBXSU5fU1RBTkRCWQkJCTB4RTIgLyogU2V0IGRldmljZSBpbiBTdGFuZGJ5IE1vZGUgKi8KKyNkZWZpbmUgV0lOX1NFVElETEUxCQkJMHhFMworI2RlZmluZSBXSU5fUkVBRF9CVUZGRVIJCQkweEU0IC8qIGZvcmNlIHJlYWQgb25seSAxIHNlY3RvciAqLworI2RlZmluZSBXSU5fQ0hFQ0tQT1dFUk1PREUxCQkweEU1CisjZGVmaW5lIFdJTl9TTEVFUE5PVzEJCQkweEU2CisjZGVmaW5lIFdJTl9GTFVTSF9DQUNIRQkJCTB4RTcKKyNkZWZpbmUgV0lOX1dSSVRFX0JVRkZFUgkJMHhFOCAvKiBmb3JjZSB3cml0ZSBvbmx5IDEgc2VjdG9yICovCisjZGVmaW5lIFdJTl9XUklURV9TQU1FCQkJMHhFOSAvKiByZWFkIGF0YS0yIHRvIHVzZSAqLworCS8qIFNFVF9GRUFUVVJFUyAweDIyIG9yIDB4REQgKi8KKyNkZWZpbmUgV0lOX0ZMVVNIX0NBQ0hFX0VYVAkJMHhFQSAvKiA0OC1CaXQgKi8KKyNkZWZpbmUgV0lOX0lERU5USUZZCQkJMHhFQyAvKiBhc2sgZHJpdmUgdG8gaWRlbnRpZnkgaXRzZWxmCSovCisjZGVmaW5lIFdJTl9NRURJQUVKRUNUCQkJMHhFRAorI2RlZmluZSBXSU5fSURFTlRJRllfRE1BCQkweEVFIC8qIHNhbWUgYXMgV0lOX0lERU5USUZZLCBidXQgRE1BICovCisjZGVmaW5lIFdJTl9TRVRGRUFUVVJFUwkJCTB4RUYgLyogc2V0IHNwZWNpYWwgZHJpdmUgZmVhdHVyZXMgKi8KKyNkZWZpbmUgRVhBQllURV9FTkFCTEVfTkVTVAkJMHhGMAorI2RlZmluZSBXSU5fU0VDVVJJVFlfU0VUX1BBU1MJCTB4RjEKKyNkZWZpbmUgV0lOX1NFQ1VSSVRZX1VOTE9DSwkJMHhGMgorI2RlZmluZSBXSU5fU0VDVVJJVFlfRVJBU0VfUFJFUEFSRQkweEYzCisjZGVmaW5lIFdJTl9TRUNVUklUWV9FUkFTRV9VTklUCQkweEY0CisjZGVmaW5lIFdJTl9TRUNVUklUWV9GUkVFWkVfTE9DSwkweEY1CisjZGVmaW5lIFdJTl9TRUNVUklUWV9ESVNBQkxFCQkweEY2CisjZGVmaW5lIFdJTl9SRUFEX05BVElWRV9NQVgJCTB4RjggLyogcmV0dXJuIHRoZSBuYXRpdmUgbWF4aW11bSBhZGRyZXNzICovCisjZGVmaW5lIFdJTl9TRVRfTUFYCQkJMHhGOQorI2RlZmluZSBESVNBQkxFX1NFQUdBVEUJCQkweEZCCisKKy8qIFdJTl9TTUFSVCBzdWItY29tbWFuZHMgKi8KKworI2RlZmluZSBTTUFSVF9SRUFEX1ZBTFVFUwkJMHhEMAorI2RlZmluZSBTTUFSVF9SRUFEX1RIUkVTSE9MRFMJCTB4RDEKKyNkZWZpbmUgU01BUlRfQVVUT1NBVkUJCQkweEQyCisjZGVmaW5lIFNNQVJUX1NBVkUJCQkweEQzCisjZGVmaW5lIFNNQVJUX0lNTUVESUFURV9PRkZMSU5FCQkweEQ0CisjZGVmaW5lIFNNQVJUX1JFQURfTE9HX1NFQ1RPUgkJMHhENQorI2RlZmluZSBTTUFSVF9XUklURV9MT0dfU0VDVE9SCQkweEQ2CisjZGVmaW5lIFNNQVJUX1dSSVRFX1RIUkVTSE9MRFMJCTB4RDcKKyNkZWZpbmUgU01BUlRfRU5BQkxFCQkJMHhEOAorI2RlZmluZSBTTUFSVF9ESVNBQkxFCQkJMHhEOQorI2RlZmluZSBTTUFSVF9TVEFUVVMJCQkweERBCisjZGVmaW5lIFNNQVJUX0FVVE9fT0ZGTElORQkJMHhEQgorCisvKiBQYXNzd29yZCB1c2VkIGluIFRGNCAmIFRGNSBleGVjdXRpbmcgU01BUlQgY29tbWFuZHMgKi8KKworI2RlZmluZSBTTUFSVF9MQ1lMX1BBU1MJCQkweDRGCisjZGVmaW5lIFNNQVJUX0hDWUxfUEFTUwkJCTB4QzIKKworLyogV0lOX1NFVEZFQVRVUkVTIHN1Yi1jb21tYW5kcyAqLworI2RlZmluZSBTRVRGRUFUVVJFU19FTl84QklUCTB4MDEJLyogRW5hYmxlIDgtQml0IFRyYW5zZmVycyAqLworI2RlZmluZSBTRVRGRUFUVVJFU19FTl9XQ0FDSEUJMHgwMgkvKiBFbmFibGUgd3JpdGUgY2FjaGUgKi8KKyNkZWZpbmUgU0VURkVBVFVSRVNfRElTX0RFRkVDVAkweDA0CS8qIERpc2FibGUgRGVmZWN0IE1hbmFnZW1lbnQgKi8KKyNkZWZpbmUgU0VURkVBVFVSRVNfRU5fQVBNCTB4MDUJLyogRW5hYmxlIGFkdmFuY2VkIHBvd2VyIG1hbmFnZW1lbnQgKi8KKyNkZWZpbmUgU0VURkVBVFVSRVNfRU5fU0FNRV9SCTB4MjIJLyogZm9yIGEgcmVnaW9uIEFUQS0xICovCisjZGVmaW5lIFNFVEZFQVRVUkVTX0RJU19NU04JMHgzMQkvKiBEaXNhYmxlIE1lZGlhIFN0YXR1cyBOb3RpZmljYXRpb24gKi8KKyNkZWZpbmUgU0VURkVBVFVSRVNfRElTX1JFVFJZCTB4MzMJLyogRGlzYWJsZSBSZXRyeSAqLworI2RlZmluZSBTRVRGRUFUVVJFU19FTl9BQU0JMHg0MgkvKiBFbmFibGUgQXV0b21hdGljIEFjb3VzdGljIE1hbmFnZW1lbnQgKi8KKyNkZWZpbmUgU0VURkVBVFVSRVNfUldfTE9ORwkweDQ0CS8qIFNldCBMZW5ndGggb2YgVlMgYnl0ZXMgKi8KKyNkZWZpbmUgU0VURkVBVFVSRVNfU0VUX0NBQ0hFCTB4NTQJLyogU2V0IENhY2hlIHNlZ21lbnRzIHRvIFNDIFJlZy4gVmFsICovCisjZGVmaW5lIFNFVEZFQVRVUkVTX0RJU19STEEJMHg1NQkvKiBEaXNhYmxlIHJlYWQgbG9vay1haGVhZCBmZWF0dXJlICovCisjZGVmaW5lIFNFVEZFQVRVUkVTX0VOX1JJCTB4NUQJLyogRW5hYmxlIHJlbGVhc2UgaW50ZXJydXB0ICovCisjZGVmaW5lIFNFVEZFQVRVUkVTX0VOX1NJCTB4NUUJLyogRW5hYmxlIFNFUlZJQ0UgaW50ZXJydXB0ICovCisjZGVmaW5lIFNFVEZFQVRVUkVTX0RJU19SUE9ECTB4NjYJLyogRGlzYWJsZSByZXZlcnRpbmcgdG8gcG93ZXIgb24gZGVmYXVsdHMgKi8KKyNkZWZpbmUgU0VURkVBVFVSRVNfRElTX0VDQwkweDc3CS8qIERpc2FibGUgRUNDIGJ5dGUgY291bnQgKi8KKyNkZWZpbmUgU0VURkVBVFVSRVNfRElTXzhCSVQJMHg4MQkvKiBEaXNhYmxlIDgtQml0IFRyYW5zZmVycyAqLworI2RlZmluZSBTRVRGRUFUVVJFU19ESVNfV0NBQ0hFCTB4ODIJLyogRGlzYWJsZSB3cml0ZSBjYWNoZSAqLworI2RlZmluZSBTRVRGRUFUVVJFU19FTl9ERUZFQ1QJMHg4NAkvKiBFbmFibGUgRGVmZWN0IE1hbmFnZW1lbnQgKi8KKyNkZWZpbmUgU0VURkVBVFVSRVNfRElTX0FQTQkweDg1CS8qIERpc2FibGUgYWR2YW5jZWQgcG93ZXIgbWFuYWdlbWVudCAqLworI2RlZmluZSBTRVRGRUFUVVJFU19FTl9FQ0MJMHg4OAkvKiBFbmFibGUgRUNDIGJ5dGUgY291bnQgKi8KKyNkZWZpbmUgU0VURkVBVFVSRVNfRU5fTVNOCTB4OTUJLyogRW5hYmxlIE1lZGlhIFN0YXR1cyBOb3RpZmljYXRpb24gKi8KKyNkZWZpbmUgU0VURkVBVFVSRVNfRU5fUkVUUlkJMHg5OQkvKiBFbmFibGUgUmV0cnkgKi8KKyNkZWZpbmUgU0VURkVBVFVSRVNfRU5fUkxBCTB4QUEJLyogRW5hYmxlIHJlYWQgbG9vay1haGVhZCBmZWF0dXJlICovCisjZGVmaW5lIFNFVEZFQVRVUkVTX1BSRUZFVENICTB4QUIJLyogU2V0cyBkcml2ZSBwcmVmZXRjaCB2YWx1ZSAqLworI2RlZmluZSBTRVRGRUFUVVJFU19FTl9SRVNUCTB4QUMJLyogQVRBLTEgKi8KKyNkZWZpbmUgU0VURkVBVFVSRVNfNEJfUldfTE9ORwkweEJCCS8qIFNldCBMZW5naHQgb2YgNCBieXRlcyAqLworI2RlZmluZSBTRVRGRUFUVVJFU19ESVNfQUFNCTB4QzIJLyogRGlzYWJsZSBBdXRvbWF0aWMgQWNvdXN0aWMgTWFuYWdlbWVudCAqLworI2RlZmluZSBTRVRGRUFUVVJFU19FTl9SUE9ECTB4Q0MJLyogRW5hYmxlIHJldmVydGluZyB0byBwb3dlciBvbiBkZWZhdWx0cyAqLworI2RlZmluZSBTRVRGRUFUVVJFU19ESVNfUkkJMHhERAkvKiBEaXNhYmxlIHJlbGVhc2UgaW50ZXJydXB0IEFUQVBJICovCisjZGVmaW5lIFNFVEZFQVRVUkVTX0VOX1NBTUVfTQkweERECS8qIGZvciBhIGVudGlyZSBkZXZpY2UgQVRBLTEgKi8KKyNkZWZpbmUgU0VURkVBVFVSRVNfRElTX1NJCTB4REUJLyogRGlzYWJsZSBTRVJWSUNFIGludGVycnVwdCBBVEFQSSAqLworCisvKiBXSU5fU0VDVVJJVFkgc3ViLWNvbW1hbmRzICovCisKKyNkZWZpbmUgU0VDVVJJVFlfU0VUX1BBU1NXT1JECQkweEJBCisjZGVmaW5lIFNFQ1VSSVRZX1VOTE9DSwkJCTB4QkIKKyNkZWZpbmUgU0VDVVJJVFlfRVJBU0VfUFJFUEFSRQkJMHhCQworI2RlZmluZSBTRUNVUklUWV9FUkFTRV9VTklUCQkweEJECisjZGVmaW5lIFNFQ1VSSVRZX0ZSRUVaRV9MT0NLCQkweEJFCisjZGVmaW5lIFNFQ1VSSVRZX0RJU0FCTEVfUEFTU1dPUkQJMHhCRgorCitzdHJ1Y3QgaGRfZ2VvbWV0cnkgeworICAgICAgdW5zaWduZWQgY2hhciBoZWFkczsKKyAgICAgIHVuc2lnbmVkIGNoYXIgc2VjdG9yczsKKyAgICAgIHVuc2lnbmVkIHNob3J0IGN5bGluZGVyczsKKyAgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQ7Cit9OworCisvKiBoZC9pZGUgY3RsJ3MgdGhhdCBwYXNzIChhcmcpIHB0cnMgdG8gdXNlciBzcGFjZSBhcmUgbnVtYmVyZWQgMHgwMzBuLzB4MDMxbiAqLworI2RlZmluZSBIRElPX0dFVEdFTwkJMHgwMzAxCS8qIGdldCBkZXZpY2UgZ2VvbWV0cnkgKi8KKyNkZWZpbmUgSERJT19HRVRfVU5NQVNLSU5UUgkweDAzMDIJLyogZ2V0IGN1cnJlbnQgdW5tYXNrIHNldHRpbmcgKi8KKyNkZWZpbmUgSERJT19HRVRfTVVMVENPVU5UCTB4MDMwNAkvKiBnZXQgY3VycmVudCBJREUgYmxvY2ttb2RlIHNldHRpbmcgKi8KKyNkZWZpbmUgSERJT19HRVRfUURNQQkJMHgwMzA1CS8qIGdldCB1c2UtcWRtYSBmbGFnICovCisKKyNkZWZpbmUgSERJT19TRVRfWEZFUgkJMHgwMzA2ICAvKiBzZXQgdHJhbnNmZXIgcmF0ZSB2aWEgcHJvYyAqLworCisjZGVmaW5lIEhESU9fT0JTT0xFVEVfSURFTlRJVFkJMHgwMzA3CS8qIE9CU09MRVRFLCBETyBOT1QgVVNFOiByZXR1cm5zIDE0MiBieXRlcyAqLworI2RlZmluZSBIRElPX0dFVF9LRUVQU0VUVElOR1MJMHgwMzA4CS8qIGdldCBrZWVwLXNldHRpbmdzLW9uLXJlc2V0IGZsYWcgKi8KKyNkZWZpbmUgSERJT19HRVRfMzJCSVQJCTB4MDMwOQkvKiBnZXQgY3VycmVudCBpb18zMmJpdCBzZXR0aW5nICovCisjZGVmaW5lIEhESU9fR0VUX05PV0VSUgkJMHgwMzBhCS8qIGdldCBpZ25vcmUtd3JpdGUtZXJyb3IgZmxhZyAqLworI2RlZmluZSBIRElPX0dFVF9ETUEJCTB4MDMwYgkvKiBnZXQgdXNlLWRtYSBmbGFnICovCisjZGVmaW5lIEhESU9fR0VUX05JQ0UJCTB4MDMwYwkvKiBnZXQgbmljZSBmbGFncyAqLworI2RlZmluZSBIRElPX0dFVF9JREVOVElUWQkweDAzMGQJLyogZ2V0IElERSBpZGVudGlmaWNhdGlvbiBpbmZvICovCisjZGVmaW5lIEhESU9fR0VUX1dDQUNIRQkJMHgwMzBlCS8qIGdldCB3cml0ZSBjYWNoZSBtb2RlIG9ufG9mZiAqLworI2RlZmluZSBIRElPX0dFVF9BQ09VU1RJQwkweDAzMGYJLyogZ2V0IGFjb3VzdGljIHZhbHVlICovCisjZGVmaW5lCUhESU9fR0VUX0FERFJFU1MJMHgwMzEwCS8qICovCisKKyNkZWZpbmUgSERJT19HRVRfQlVTU1RBVEUJMHgwMzFhCS8qIGdldCB0aGUgYnVzIHN0YXRlIG9mIHRoZSBod2lmICovCisjZGVmaW5lIEhESU9fVFJJU1RBVEVfSFdJRgkweDAzMWIJLyogZXhlY3V0ZSBhIGNoYW5uZWwgdHJpc3RhdGUgKi8KKyNkZWZpbmUgSERJT19EUklWRV9SRVNFVAkweDAzMWMJLyogZXhlY3V0ZSBhIGRldmljZSByZXNldCAqLworI2RlZmluZSBIRElPX0RSSVZFX1RBU0tGSUxFCTB4MDMxZAkvKiBleGVjdXRlIHJhdyB0YXNrZmlsZSAqLworI2RlZmluZSBIRElPX0RSSVZFX1RBU0sJCTB4MDMxZQkvKiBleGVjdXRlIHRhc2sgYW5kIHNwZWNpYWwgZHJpdmUgY29tbWFuZCAqLworI2RlZmluZSBIRElPX0RSSVZFX0NNRAkJMHgwMzFmCS8qIGV4ZWN1dGUgYSBzcGVjaWFsIGRyaXZlIGNvbW1hbmQgKi8KKyNkZWZpbmUgSERJT19EUklWRV9DTURfQUVCCUhESU9fRFJJVkVfVEFTSworCisvKiBoZC9pZGUgY3RsJ3MgdGhhdCBwYXNzIChhcmcpIG5vbi1wdHIgdmFsdWVzIGFyZSBudW1iZXJlZCAweDAzMm4vMHgwMzNuICovCisjZGVmaW5lIEhESU9fU0VUX01VTFRDT1VOVAkweDAzMjEJLyogY2hhbmdlIElERSBibG9ja21vZGUgKi8KKyNkZWZpbmUgSERJT19TRVRfVU5NQVNLSU5UUgkweDAzMjIJLyogcGVybWl0IG90aGVyIGlycXMgZHVyaW5nIEkvTyAqLworI2RlZmluZSBIRElPX1NFVF9LRUVQU0VUVElOR1MJMHgwMzIzCS8qIGtlZXAgaW9jdGwgc2V0dGluZ3Mgb24gcmVzZXQgKi8KKyNkZWZpbmUgSERJT19TRVRfMzJCSVQJCTB4MDMyNAkvKiBjaGFuZ2UgaW9fMzJiaXQgZmxhZ3MgKi8KKyNkZWZpbmUgSERJT19TRVRfTk9XRVJSCQkweDAzMjUJLyogY2hhbmdlIGlnbm9yZS13cml0ZS1lcnJvciBmbGFnICovCisjZGVmaW5lIEhESU9fU0VUX0RNQQkJMHgwMzI2CS8qIGNoYW5nZSB1c2UtZG1hIGZsYWcgKi8KKyNkZWZpbmUgSERJT19TRVRfUElPX01PREUJMHgwMzI3CS8qIHJlY29uZmlnIGludGVyZmFjZSB0byBuZXcgc3BlZWQgKi8KKyNkZWZpbmUgSERJT19TQ0FOX0hXSUYJCTB4MDMyOAkvKiByZWdpc3RlciBhbmQgKHJlKXNjYW4gaW50ZXJmYWNlICovCisjZGVmaW5lIEhESU9fU0VUX05JQ0UJCTB4MDMyOQkvKiBzZXQgbmljZSBmbGFncyAqLworI2RlZmluZSBIRElPX1VOUkVHSVNURVJfSFdJRgkweDAzMmEgIC8qIHVucmVnaXN0ZXIgaW50ZXJmYWNlICovCisjZGVmaW5lIEhESU9fU0VUX1dDQUNIRQkJMHgwMzJiCS8qIGNoYW5nZSB3cml0ZSBjYWNoZSBlbmFibGUtZGlzYWJsZSAqLworI2RlZmluZSBIRElPX1NFVF9BQ09VU1RJQwkweDAzMmMJLyogY2hhbmdlIGFjb3VzdGljIGJlaGF2aW9yICovCisjZGVmaW5lIEhESU9fU0VUX0JVU1NUQVRFCTB4MDMyZAkvKiBzZXQgdGhlIGJ1cyBzdGF0ZSBvZiB0aGUgaHdpZiAqLworI2RlZmluZSBIRElPX1NFVF9RRE1BCQkweDAzMmUJLyogY2hhbmdlIHVzZS1xZG1hIGZsYWcgKi8KKyNkZWZpbmUgSERJT19TRVRfQUREUkVTUwkweDAzMmYJLyogY2hhbmdlIGxiYSBhZGRyZXNzaW5nIG1vZGVzICovCisKKy8qIGJ1cyBzdGF0ZXMgKi8KK2VudW0geworCUJVU1NUQVRFX09GRiA9IDAsCisJQlVTU1RBVEVfT04sCisJQlVTU1RBVEVfVFJJU1RBVEUKK307CisKKy8qIGhkL2lkZSBjdGwncyB0aGF0IHBhc3MgKGFyZykgcHRycyB0byB1c2VyIHNwYWNlIGFyZSBudW1iZXJlZCAweDAzM24vMHgwMzNuICovCisvKiAweDMzMCBpcyByZXNlcnZlZCAtIHVzZWQgdG8gYmUgSERJT19HRVRHRU9fQklHICovCisvKiAweDMzMSBpcyByZXNlcnZlZCAtIHVzZWQgdG8gYmUgSERJT19HRVRHRU9fQklHX1JBVyAqLworLyogMHgzMzggaXMgcmVzZXJ2ZWQgLSB1c2VkIHRvIGJlIEhESU9fU0VUX0lERV9TQ1NJICovCisvKiAweDMzOSBpcyByZXNlcnZlZCAtIHVzZWQgdG8gYmUgSERJT19TRVRfU0NTSV9JREUgKi8KKworI2RlZmluZSBfX05FV19IRF9EUklWRV9JRAorCisvKgorICogU3RydWN0dXJlIHJldHVybmVkIGJ5IEhESU9fR0VUX0lERU5USVRZLCBhcyBwZXIgQU5TSSBOQ0lUUyBBVEE2IHJldi4xYiBzcGVjLgorICoKKyAqIElmIHlvdSBjaGFuZ2Ugc29tZXRoaW5nIGhlcmUsIHBsZWFzZSByZW1lbWJlciB0byB1cGRhdGUgZml4X2RyaXZlaWQoKSBpbgorICogaWRlL3Byb2JlLmMuCisgKi8KK3N0cnVjdCBoZF9kcml2ZWlkIHsKKwl1bnNpZ25lZCBzaG9ydAljb25maWc7CQkvKiBsb3RzIG9mIG9ic29sZXRlIGJpdCBmbGFncyAqLworCXVuc2lnbmVkIHNob3J0CWN5bHM7CQkvKiBPYnNvbGV0ZSwgInBoeXNpY2FsIiBjeWxzICovCisJdW5zaWduZWQgc2hvcnQJcmVzZXJ2ZWQyOwkvKiByZXNlcnZlZCAod29yZCAyKSAqLworCXVuc2lnbmVkIHNob3J0CWhlYWRzOwkJLyogT2Jzb2xldGUsICJwaHlzaWNhbCIgaGVhZHMgKi8KKwl1bnNpZ25lZCBzaG9ydAl0cmFja19ieXRlczsJLyogdW5mb3JtYXR0ZWQgYnl0ZXMgcGVyIHRyYWNrICovCisJdW5zaWduZWQgc2hvcnQJc2VjdG9yX2J5dGVzOwkvKiB1bmZvcm1hdHRlZCBieXRlcyBwZXIgc2VjdG9yICovCisJdW5zaWduZWQgc2hvcnQJc2VjdG9yczsJLyogT2Jzb2xldGUsICJwaHlzaWNhbCIgc2VjdG9ycyBwZXIgdHJhY2sgKi8KKwl1bnNpZ25lZCBzaG9ydAl2ZW5kb3IwOwkvKiB2ZW5kb3IgdW5pcXVlICovCisJdW5zaWduZWQgc2hvcnQJdmVuZG9yMTsJLyogdmVuZG9yIHVuaXF1ZSAqLworCXVuc2lnbmVkIHNob3J0CXZlbmRvcjI7CS8qIFJldGlyZWQgdmVuZG9yIHVuaXF1ZSAqLworCXVuc2lnbmVkIGNoYXIJc2VyaWFsX25vWzIwXTsJLyogMCA9IG5vdF9zcGVjaWZpZWQgKi8KKwl1bnNpZ25lZCBzaG9ydAlidWZfdHlwZTsJLyogUmV0aXJlZCAqLworCXVuc2lnbmVkIHNob3J0CWJ1Zl9zaXplOwkvKiBSZXRpcmVkLCA1MTIgYnl0ZSBpbmNyZW1lbnRzCisJCQkJCSAqIDAgPSBub3Rfc3BlY2lmaWVkCisJCQkJCSAqLworCXVuc2lnbmVkIHNob3J0CWVjY19ieXRlczsJLyogZm9yIHIvdyBsb25nIGNtZHM7IDAgPSBub3Rfc3BlY2lmaWVkICovCisJdW5zaWduZWQgY2hhcglmd19yZXZbOF07CS8qIDAgPSBub3Rfc3BlY2lmaWVkICovCisJdW5zaWduZWQgY2hhcgltb2RlbFs0MF07CS8qIDAgPSBub3Rfc3BlY2lmaWVkICovCisJdW5zaWduZWQgY2hhcgltYXhfbXVsdHNlY3Q7CS8qIDA9bm90X2ltcGxlbWVudGVkICovCisJdW5zaWduZWQgY2hhcgl2ZW5kb3IzOwkvKiB2ZW5kb3IgdW5pcXVlICovCisJdW5zaWduZWQgc2hvcnQJZHdvcmRfaW87CS8qIDA9bm90X2ltcGxlbWVudGVkOyAxPWltcGxlbWVudGVkICovCisJdW5zaWduZWQgY2hhcgl2ZW5kb3I0OwkvKiB2ZW5kb3IgdW5pcXVlICovCisJdW5zaWduZWQgY2hhcgljYXBhYmlsaXR5OwkvKiAodXBwZXIgYnl0ZSBvZiB3b3JkIDQ5KQorCQkJCQkgKiAgMzoJSU9SRFlzdXAKKwkJCQkJICogIDI6CUlPUkRZc3cKKwkJCQkJICogIDE6CUxCQQorCQkJCQkgKiAgMDoJRE1BCisJCQkJCSAqLworCXVuc2lnbmVkIHNob3J0CXJlc2VydmVkNTA7CS8qIHJlc2VydmVkICh3b3JkIDUwKSAqLworCXVuc2lnbmVkIGNoYXIJdmVuZG9yNTsJLyogT2Jzb2xldGUsIHZlbmRvciB1bmlxdWUgKi8KKwl1bnNpZ25lZCBjaGFyCXRQSU87CQkvKiBPYnNvbGV0ZSwgMD1zbG93LCAxPW1lZGl1bSwgMj1mYXN0ICovCisJdW5zaWduZWQgY2hhcgl2ZW5kb3I2OwkvKiBPYnNvbGV0ZSwgdmVuZG9yIHVuaXF1ZSAqLworCXVuc2lnbmVkIGNoYXIJdERNQTsJCS8qIE9ic29sZXRlLCAwPXNsb3csIDE9bWVkaXVtLCAyPWZhc3QgKi8KKwl1bnNpZ25lZCBzaG9ydAlmaWVsZF92YWxpZDsJLyogKHdvcmQgNTMpCisJCQkJCSAqICAyOgl1bHRyYV9vawl3b3JkICA4OAorCQkJCQkgKiAgMToJZWlkZV9vawkJd29yZHMgNjQtNzAKKwkJCQkJICogIDA6CWN1cl9vawkJd29yZHMgNTQtNTgKKwkJCQkJICovCisJdW5zaWduZWQgc2hvcnQJY3VyX2N5bHM7CS8qIE9ic29sZXRlLCBsb2dpY2FsIGN5bGluZGVycyAqLworCXVuc2lnbmVkIHNob3J0CWN1cl9oZWFkczsJLyogT2Jzb2xldGUsIGwgaGVhZHMgKi8KKwl1bnNpZ25lZCBzaG9ydAljdXJfc2VjdG9yczsJLyogT2Jzb2xldGUsIGwgc2VjdG9ycyBwZXIgdHJhY2sgKi8KKwl1bnNpZ25lZCBzaG9ydAljdXJfY2FwYWNpdHkwOwkvKiBPYnNvbGV0ZSwgbCB0b3RhbCBzZWN0b3JzIG9uIGRyaXZlICovCisJdW5zaWduZWQgc2hvcnQJY3VyX2NhcGFjaXR5MTsJLyogT2Jzb2xldGUsICgyIHdvcmRzLCBtaXNhbGlnbmVkIGludCkgICAgICovCisJdW5zaWduZWQgY2hhcgltdWx0c2VjdDsJLyogY3VycmVudCBtdWx0aXBsZSBzZWN0b3IgY291bnQgKi8KKwl1bnNpZ25lZCBjaGFyCW11bHRzZWN0X3ZhbGlkOwkvKiB3aGVuIChiaXQwPT0xKSBtdWx0c2VjdCBpcyBvayAqLworCXVuc2lnbmVkIGludAlsYmFfY2FwYWNpdHk7CS8qIE9ic29sZXRlLCB0b3RhbCBudW1iZXIgb2Ygc2VjdG9ycyAqLworCXVuc2lnbmVkIHNob3J0CWRtYV8xd29yZDsJLyogT2Jzb2xldGUsIHNpbmdsZS13b3JkIGRtYSBpbmZvICovCisJdW5zaWduZWQgc2hvcnQJZG1hX213b3JkOwkvKiBtdWx0aXBsZS13b3JkIGRtYSBpbmZvICovCisJdW5zaWduZWQgc2hvcnQgIGVpZGVfcGlvX21vZGVzOyAvKiBiaXRzIDA6bW9kZTMgMTptb2RlNCAqLworCXVuc2lnbmVkIHNob3J0ICBlaWRlX2RtYV9taW47CS8qIG1pbiBtd29yZCBkbWEgY3ljbGUgdGltZSAobnMpICovCisJdW5zaWduZWQgc2hvcnQgIGVpZGVfZG1hX3RpbWU7CS8qIHJlY29tbWVuZGVkIG13b3JkIGRtYSBjeWNsZSB0aW1lIChucykgKi8KKwl1bnNpZ25lZCBzaG9ydCAgZWlkZV9waW87ICAgICAgIC8qIG1pbiBjeWNsZSB0aW1lIChucyksIG5vIElPUkRZICAqLworCXVuc2lnbmVkIHNob3J0ICBlaWRlX3Bpb19pb3JkeTsgLyogbWluIGN5Y2xlIHRpbWUgKG5zKSwgd2l0aCBJT1JEWSAqLworCXVuc2lnbmVkIHNob3J0CXdvcmRzNjlfNzBbMl07CS8qIHJlc2VydmVkIHdvcmRzIDY5LTcwCisJCQkJCSAqIGZ1dHVyZSBjb21tYW5kIG92ZXJsYXAgYW5kIHF1ZXVpbmcKKwkJCQkJICovCisJLyogSERJT19HRVRfSURFTlRJVFkgY3VycmVudGx5IHJldHVybnMgb25seSB3b3JkcyAwIHRocm91Z2ggNzAgKi8KKwl1bnNpZ25lZCBzaG9ydAl3b3JkczcxXzc0WzRdOwkvKiByZXNlcnZlZCB3b3JkcyA3MS03NAorCQkJCQkgKiBmb3IgSURFTlRJRlkgUEFDS0VUIERFVklDRSBjb21tYW5kCisJCQkJCSAqLworCXVuc2lnbmVkIHNob3J0ICBxdWV1ZV9kZXB0aDsJLyogKHdvcmQgNzUpCisJCQkJCSAqIDE1OjUJcmVzZXJ2ZWQKKwkJCQkJICogIDQ6MAlNYXhpbXVtIHF1ZXVlIGRlcHRoIC0xCisJCQkJCSAqLworCXVuc2lnbmVkIHNob3J0ICB3b3Jkczc2Xzc5WzRdOwkvKiByZXNlcnZlZCB3b3JkcyA3Ni03OSAqLworCXVuc2lnbmVkIHNob3J0ICBtYWpvcl9yZXZfbnVtOwkvKiAod29yZCA4MCkgKi8KKwl1bnNpZ25lZCBzaG9ydCAgbWlub3JfcmV2X251bTsJLyogKHdvcmQgODEpICovCisJdW5zaWduZWQgc2hvcnQgIGNvbW1hbmRfc2V0XzE7CS8qICh3b3JkIDgyKSBzdXBwb3J0ZWQKKwkJCQkJICogMTU6CU9ic29sZXRlCisJCQkJCSAqIDE0OglOT1AgY29tbWFuZAorCQkJCQkgKiAxMzoJUkVBRF9CVUZGRVIKKwkJCQkJICogMTI6CVdSSVRFX0JVRkZFUgorCQkJCQkgKiAxMToJT2Jzb2xldGUKKwkJCQkJICogMTA6CUhvc3QgUHJvdGVjdGVkIEFyZWEKKwkJCQkJICogIDk6CURFVklDRSBSZXNldAorCQkJCQkgKiAgODoJU0VSVklDRSBJbnRlcnJ1cHQKKwkJCQkJICogIDc6CVJlbGVhc2UgSW50ZXJydXB0CisJCQkJCSAqICA2Oglsb29rLWFoZWFkCisJCQkJCSAqICA1Ogl3cml0ZSBjYWNoZQorCQkJCQkgKiAgNDoJUEFDS0VUIENvbW1hbmQKKwkJCQkJICogIDM6CVBvd2VyIE1hbmFnZW1lbnQgRmVhdHVyZSBTZXQKKwkJCQkJICogIDI6CVJlbW92YWJsZSBGZWF0dXJlIFNldAorCQkJCQkgKiAgMToJU2VjdXJpdHkgRmVhdHVyZSBTZXQKKwkJCQkJICogIDA6CVNNQVJUIEZlYXR1cmUgU2V0CisJCQkJCSAqLworCXVuc2lnbmVkIHNob3J0ICBjb21tYW5kX3NldF8yOwkvKiAod29yZCA4MykKKwkJCQkJICogMTU6CVNoYWxsIGJlIFpFUk8KKwkJCQkJICogMTQ6CVNoYWxsIGJlIE9ORQorCQkJCQkgKiAxMzoJRkxVU0ggQ0FDSEUgRVhUCisJCQkJCSAqIDEyOglGTFVTSCBDQUNIRQorCQkJCQkgKiAxMToJRGV2aWNlIENvbmZpZ3VyYXRpb24gT3ZlcmxheQorCQkJCQkgKiAxMDoJNDgtYml0IEFkZHJlc3MgRmVhdHVyZSBTZXQKKwkJCQkJICogIDk6CUF1dG9tYXRpYyBBY291c3RpYyBNYW5hZ2VtZW50CisJCQkJCSAqICA4OglTRVQgTUFYIHNlY3VyaXR5CisJCQkJCSAqICA3OglyZXNlcnZlZCAxNDA3RFQgUEFSVElFUworCQkJCQkgKiAgNjoJU2V0RiBzdWItY29tbWFuZCBQb3dlci1VcAorCQkJCQkgKiAgNToJUG93ZXItVXAgaW4gU3RhbmRieSBGZWF0dXJlIFNldAorCQkJCQkgKiAgNDoJUmVtb3ZhYmxlIE1lZGlhIE5vdGlmaWNhdGlvbgorCQkJCQkgKiAgMzoJQVBNIEZlYXR1cmUgU2V0CisJCQkJCSAqICAyOglDRkEgRmVhdHVyZSBTZXQKKwkJCQkJICogIDE6CVJFQUQvV1JJVEUgRE1BIFFVRVVFRAorCQkJCQkgKiAgMDoJRG93bmxvYWQgTWljcm9Db2RlCisJCQkJCSAqLworCXVuc2lnbmVkIHNob3J0ICBjZnNzZTsJCS8qICh3b3JkIDg0KQorCQkJCQkgKiBjbWQgc2V0LWZlYXR1cmUgc3VwcG9ydGVkIGV4dGVuc2lvbnMKKwkJCQkJICogMTU6CVNoYWxsIGJlIFpFUk8KKwkJCQkJICogMTQ6CVNoYWxsIGJlIE9ORQorCQkJCQkgKiAxMzo2CXJlc2VydmVkCisJCQkJCSAqICA1OglHZW5lcmFsIFB1cnBvc2UgTG9nZ2luZworCQkJCQkgKiAgNDoJU3RyZWFtaW5nIEZlYXR1cmUgU2V0CisJCQkJCSAqICAzOglNZWRpYSBDYXJkIFBhc3MgVGhyb3VnaAorCQkJCQkgKiAgMjoJTWVkaWEgU2VyaWFsIE51bWJlciBWYWxpZAorCQkJCQkgKiAgMToJU01BUlQgc2VsdC10ZXN0IHN1cHBvcnRlZAorCQkJCQkgKiAgMDoJU01BUlQgZXJyb3IgbG9nZ2luZworCQkJCQkgKi8KKwl1bnNpZ25lZCBzaG9ydCAgY2ZzX2VuYWJsZV8xOwkvKiAod29yZCA4NSkKKwkJCQkJICogY29tbWFuZCBzZXQtZmVhdHVyZSBlbmFibGVkCisJCQkJCSAqIDE1OglPYnNvbGV0ZQorCQkJCQkgKiAxNDoJTk9QIGNvbW1hbmQKKwkJCQkJICogMTM6CVJFQURfQlVGRkVSCisJCQkJCSAqIDEyOglXUklURV9CVUZGRVIKKwkJCQkJICogMTE6CU9ic29sZXRlCisJCQkJCSAqIDEwOglIb3N0IFByb3RlY3RlZCBBcmVhCisJCQkJCSAqICA5OglERVZJQ0UgUmVzZXQKKwkJCQkJICogIDg6CVNFUlZJQ0UgSW50ZXJydXB0CisJCQkJCSAqICA3OglSZWxlYXNlIEludGVycnVwdAorCQkJCQkgKiAgNjoJbG9vay1haGVhZAorCQkJCQkgKiAgNToJd3JpdGUgY2FjaGUKKwkJCQkJICogIDQ6CVBBQ0tFVCBDb21tYW5kCisJCQkJCSAqICAzOglQb3dlciBNYW5hZ2VtZW50IEZlYXR1cmUgU2V0CisJCQkJCSAqICAyOglSZW1vdmFibGUgRmVhdHVyZSBTZXQKKwkJCQkJICogIDE6CVNlY3VyaXR5IEZlYXR1cmUgU2V0CisJCQkJCSAqICAwOglTTUFSVCBGZWF0dXJlIFNldAorCQkJCQkgKi8KKwl1bnNpZ25lZCBzaG9ydCAgY2ZzX2VuYWJsZV8yOwkvKiAod29yZCA4NikKKwkJCQkJICogY29tbWFuZCBzZXQtZmVhdHVyZSBlbmFibGVkCisJCQkJCSAqIDE1OglTaGFsbCBiZSBaRVJPCisJCQkJCSAqIDE0OglTaGFsbCBiZSBPTkUKKwkJCQkJICogMTM6CUZMVVNIIENBQ0hFIEVYVAorCQkJCQkgKiAxMjoJRkxVU0ggQ0FDSEUKKwkJCQkJICogMTE6CURldmljZSBDb25maWd1cmF0aW9uIE92ZXJsYXkKKwkJCQkJICogMTA6CTQ4LWJpdCBBZGRyZXNzIEZlYXR1cmUgU2V0CisJCQkJCSAqICA5OglBdXRvbWF0aWMgQWNvdXN0aWMgTWFuYWdlbWVudAorCQkJCQkgKiAgODoJU0VUIE1BWCBzZWN1cml0eQorCQkJCQkgKiAgNzoJcmVzZXJ2ZWQgMTQwN0RUIFBBUlRJRVMKKwkJCQkJICogIDY6CVNldEYgc3ViLWNvbW1hbmQgUG93ZXItVXAKKwkJCQkJICogIDU6CVBvd2VyLVVwIGluIFN0YW5kYnkgRmVhdHVyZSBTZXQKKwkJCQkJICogIDQ6CVJlbW92YWJsZSBNZWRpYSBOb3RpZmljYXRpb24KKwkJCQkJICogIDM6CUFQTSBGZWF0dXJlIFNldAorCQkJCQkgKiAgMjoJQ0ZBIEZlYXR1cmUgU2V0CisJCQkJCSAqICAxOglSRUFEL1dSSVRFIERNQSBRVUVVRUQKKwkJCQkJICogIDA6CURvd25sb2FkIE1pY3JvQ29kZQorCQkJCQkgKi8KKwl1bnNpZ25lZCBzaG9ydCAgY3NmX2RlZmF1bHQ7CS8qICh3b3JkIDg3KQorCQkJCQkgKiBjb21tYW5kIHNldC1mZWF0dXJlIGRlZmF1bHQKKwkJCQkJICogMTU6CVNoYWxsIGJlIFpFUk8KKwkJCQkJICogMTQ6CVNoYWxsIGJlIE9ORQorCQkJCQkgKiAxMzo2CXJlc2VydmVkCisJCQkJCSAqICA1OglHZW5lcmFsIFB1cnBvc2UgTG9nZ2luZyBlbmFibGVkCisJCQkJCSAqICA0OglWYWxpZCBDT05GSUdVUkUgU1RSRUFNIGV4ZWN1dGVkCisJCQkJCSAqICAzOglNZWRpYSBDYXJkIFBhc3MgVGhyb3VnaCBlbmFibGVkCisJCQkJCSAqICAyOglNZWRpYSBTZXJpYWwgTnVtYmVyIFZhbGlkCisJCQkJCSAqICAxOglTTUFSVCBzZWx0LXRlc3Qgc3VwcG9ydGVkCisJCQkJCSAqICAwOglTTUFSVCBlcnJvciBsb2dnaW5nCisJCQkJCSAqLworCXVuc2lnbmVkIHNob3J0ICBkbWFfdWx0cmE7CS8qICh3b3JkIDg4KSAqLworCXVuc2lnbmVkIHNob3J0CXRyc2V1YzsJCS8qIHRpbWUgcmVxdWlyZWQgZm9yIHNlY3VyaXR5IGVyYXNlICovCisJdW5zaWduZWQgc2hvcnQJdHJzRXVjOwkJLyogdGltZSByZXF1aXJlZCBmb3IgZW5oYW5jZWQgZXJhc2UgKi8KKwl1bnNpZ25lZCBzaG9ydAlDdXJBUE12YWx1ZXM7CS8qIGN1cnJlbnQgQVBNIHZhbHVlcyAqLworCXVuc2lnbmVkIHNob3J0CW1wcmM7CQkvKiBtYXN0ZXIgcGFzc3dvcmQgcmV2aXNpb24gY29kZSAqLworCXVuc2lnbmVkIHNob3J0CWh3X2NvbmZpZzsJLyogaGFyZHdhcmUgY29uZmlnICh3b3JkIDkzKQorCQkJCQkgKiAxNToJU2hhbGwgYmUgWkVSTworCQkJCQkgKiAxNDoJU2hhbGwgYmUgT05FCisJCQkJCSAqIDEzOgorCQkJCQkgKiAxMjoKKwkJCQkJICogMTE6CisJCQkJCSAqIDEwOgorCQkJCQkgKiAgOToKKwkJCQkJICogIDg6CisJCQkJCSAqICA3OgorCQkJCQkgKiAgNjoKKwkJCQkJICogIDU6CisJCQkJCSAqICA0OgorCQkJCQkgKiAgMzoKKwkJCQkJICogIDI6CisJCQkJCSAqICAxOgorCQkJCQkgKiAgMDoJU2hhbGwgYmUgT05FCisJCQkJCSAqLworCXVuc2lnbmVkIHNob3J0CWFjb3VzdGljOwkvKiAod29yZCA5NCkKKwkJCQkJICogMTU6OAlWZW5kb3IncyByZWNvbW1lbmRlZCB2YWx1ZQorCQkJCQkgKiAgNzowCWN1cnJlbnQgdmFsdWUKKwkJCQkJICovCisJdW5zaWduZWQgc2hvcnQJbXNycXM7CQkvKiBtaW4gc3RyZWFtIHJlcXVlc3Qgc2l6ZSAqLworCXVuc2lnbmVkIHNob3J0CXN4ZmVydDsJCS8qIHN0cmVhbSB0cmFuc2ZlciB0aW1lICovCisJdW5zaWduZWQgc2hvcnQJc2FsOwkJLyogc3RyZWFtIGFjY2VzcyBsYXRlbmN5ICovCisJdW5zaWduZWQgaW50CXNwZzsJCS8qIHN0cmVhbSBwZXJmb3JtYW5jZSBncmFudWxhcml0eSAqLworCXVuc2lnbmVkIGxvbmcgbG9uZyBsYmFfY2FwYWNpdHlfMjsvKiA0OC1iaXQgdG90YWwgbnVtYmVyIG9mIHNlY3RvcnMgKi8KKwl1bnNpZ25lZCBzaG9ydAl3b3JkczEwNF8xMjVbMjJdOy8qIHJlc2VydmVkIHdvcmRzIDEwNC0xMjUgKi8KKwl1bnNpZ25lZCBzaG9ydAlsYXN0X2x1bjsJLyogKHdvcmQgMTI2KSAqLworCXVuc2lnbmVkIHNob3J0CXdvcmQxMjc7CS8qICh3b3JkIDEyNykgRmVhdHVyZSBTZXQKKwkJCQkJICogUmVtb3ZhYmxlIE1lZGlhIE5vdGlmaWNhdGlvbgorCQkJCQkgKiAxNToyCXJlc2VydmVkCisJCQkJCSAqICAxOjAJMDAgPSBub3Qgc3VwcG9ydGVkCisJCQkJCSAqCTAxID0gc3VwcG9ydGVkCisJCQkJCSAqCTEwID0gcmVzZXJ2ZWQKKwkJCQkJICoJMTEgPSByZXNlcnZlZAorCQkJCQkgKi8KKwl1bnNpZ25lZCBzaG9ydAlkbGY7CQkvKiAod29yZCAxMjgpCisJCQkJCSAqIGRldmljZSBsb2NrIGZ1bmN0aW9uCisJCQkJCSAqIDE1OjkJcmVzZXJ2ZWQKKwkJCQkJICogIDgJc2VjdXJpdHkgbGV2ZWwgMTptYXggMDpoaWdoCisJCQkJCSAqICA3OjYJcmVzZXJ2ZWQKKwkJCQkJICogIDUJZW5oYW5jZWQgZXJhc2UKKwkJCQkJICogIDQJZXhwaXJlCisJCQkJCSAqICAzCWZyb3plbgorCQkJCQkgKiAgMglsb2NrZWQKKwkJCQkJICogIDEJZW4vZGlzYWJsZWQKKwkJCQkJICogIDAJY2FwYWJpbGl0eQorCQkJCQkgKi8KKwl1bnNpZ25lZCBzaG9ydCAgY3NmbzsJCS8qICAod29yZCAxMjkpCisJCQkJCSAqIGN1cnJlbnQgc2V0IGZlYXR1cmVzIG9wdGlvbnMKKwkJCQkJICogMTU6NAlyZXNlcnZlZAorCQkJCQkgKiAgMzoJYXV0byByZWFzc2lnbgorCQkJCQkgKiAgMjoJcmV2ZXJ0aW5nCisJCQkJCSAqICAxOglyZWFkLWxvb2stYWhlYWQKKwkJCQkJICogIDA6CXdyaXRlIGNhY2hlCisJCQkJCSAqLworCXVuc2lnbmVkIHNob3J0CXdvcmRzMTMwXzE1NVsyNl07LyogcmVzZXJ2ZWQgdmVuZG9yIHdvcmRzIDEzMC0xNTUgKi8KKwl1bnNpZ25lZCBzaG9ydAl3b3JkMTU2OwkvKiByZXNlcnZlZCB2ZW5kb3Igd29yZCAxNTYgKi8KKwl1bnNpZ25lZCBzaG9ydAl3b3JkczE1N18xNTlbM107LyogcmVzZXJ2ZWQgdmVuZG9yIHdvcmRzIDE1Ny0xNTkgKi8KKwl1bnNpZ25lZCBzaG9ydAljZmFfcG93ZXI7CS8qICh3b3JkIDE2MCkgQ0ZBIFBvd2VyIE1vZGUKKwkJCQkJICogMTUgd29yZCAxNjAgc3VwcG9ydGVkCisJCQkJCSAqIDE0IHJlc2VydmVkCisJCQkJCSAqIDEzCisJCQkJCSAqIDEyCisJCQkJCSAqIDExOjAKKwkJCQkJICovCisJdW5zaWduZWQgc2hvcnQJd29yZHMxNjFfMTc1WzE1XTsvKiBSZXNlcnZlZCBmb3IgQ0ZBICovCisJdW5zaWduZWQgc2hvcnQJd29yZHMxNzZfMjA1WzMwXTsvKiBDdXJyZW50IE1lZGlhIFNlcmlhbCBOdW1iZXIgKi8KKwl1bnNpZ25lZCBzaG9ydAl3b3JkczIwNl8yNTRbNDldOy8qIHJlc2VydmVkIHdvcmRzIDIwNi0yNTQgKi8KKwl1bnNpZ25lZCBzaG9ydAlpbnRlZ3JpdHlfd29yZDsJLyogKHdvcmQgMjU1KQorCQkJCQkgKiAxNTo4IENoZWNrc3VtCisJCQkJCSAqICA3OjAgU2lnbmF0dXJlCisJCQkJCSAqLworfTsKKworLyoKKyAqIElERSAibmljZSIgZmxhZ3MuIFRoZXNlIGFyZSB1c2VkIG9uIGEgcGVyIGRyaXZlIGJhc2lzIHRvIGRldGVybWluZQorICogd2hlbiB0byBiZSBuaWNlIGFuZCBnaXZlIG1vcmUgYmFuZHdpZHRoIHRvIHRoZSBvdGhlciBkZXZpY2VzIHdoaWNoCisgKiBzaGFyZSB0aGUgc2FtZSBJREUgYnVzLgorICovCisjZGVmaW5lIElERV9OSUNFX0RTQ19PVkVSTEFQCSgwKQkvKiBwZXIgdGhlIERTQyBvdmVybGFwIHByb3RvY29sICovCisjZGVmaW5lIElERV9OSUNFX0FUQVBJX09WRVJMQVAJKDEpCS8qIG5vdCBzdXBwb3J0ZWQgeWV0ICovCisjZGVmaW5lIElERV9OSUNFXzAJCSgyKQkvKiB3aGVuIHN1cmUgdGhhdCBpdCB3b24ndCBhZmZlY3QgdXMgKi8KKyNkZWZpbmUgSURFX05JQ0VfMQkJKDMpCS8qIHdoZW4gcHJvYmFibHkgd29uJ3QgYWZmZWN0IHVzIG11Y2ggKi8KKyNkZWZpbmUgSURFX05JQ0VfMgkJKDQpCS8qIHdoZW4gd2Uga25vdyBpdCdzIG9uIG91ciBleHBlbnNlICovCisKKyNlbmRpZgkvKiBfTElOVVhfSERSRUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9oZHNtYXJ0LmggYi9pbmNsdWRlL2xpbnV4L2hkc21hcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTc0YTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9oZHNtYXJ0LmgKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2xpbnV4L2hkc21hcnQuaAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OS0yMDAwCU1pY2hhZWwgQ29ybndlbGwgPGNvcm53ZWxsQGFjbS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDAJCUFuZHJlIEhlZHJpY2sgPGFuZHJlQGxpbnV4LWlkZS5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogKGZvciBleGFtcGxlIC91c3Ivc3JjL2xpbnV4L0NPUFlJTkcpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmIF9MSU5VWF9IRFNNQVJUX0gKKyNkZWZpbmUgX0xJTlVYX0hEU01BUlRfSAorCisjZGVmaW5lIE9GRkxJTkVfRlVMTF9TQ0FOCQkwCisjZGVmaW5lIFNIT1JUX1NFTEZfVEVTVAkJCTEKKyNkZWZpbmUgRVhURU5EX1NFTEZfVEVTVAkJMgorI2RlZmluZSBTSE9SVF9DQVBUSVZFX1NFTEZfVEVTVAkJMTI5CisjZGVmaW5lIEVYVEVORF9DQVBUSVZFX1NFTEZfVEVTVAkxMzAKKworLyogc21hcnRfYXR0cmlidXRlIGlzIHRoZSB2ZW5kb3Igc3BlY2lmaWMgaW4gU0ZGLTgwMzUgc3BlYyAqLwordHlwZWRlZiBzdHJ1Y3QgYXRhX3NtYXJ0X2F0dHJpYnV0ZV9zIHsKKwl1bnNpZ25lZCBjaGFyCQkJaWQ7CisJdW5zaWduZWQgc2hvcnQJCQlzdGF0dXNfZmxhZzsKKwl1bnNpZ25lZCBjaGFyCQkJbm9ybWFsaXplZDsKKwl1bnNpZ25lZCBjaGFyCQkJd29yc2Vfbm9ybWFsOworCXVuc2lnbmVkIGNoYXIJCQlyYXdbNl07CisJdW5zaWduZWQgY2hhcgkJCXJlc2VydjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGF0YV9zbWFydF9hdHRyaWJ1dGVfdDsKKworLyogc21hcnRfdmFsdWVzIGlzIGZvcm1hdCBvZiB0aGUgcmVhZCBkcml2ZSBBdHJyaWJ1dGUgY29tbWFuZCAqLwordHlwZWRlZiBzdHJ1Y3QgYXRhX3NtYXJ0X3ZhbHVlc19zIHsKKwl1bnNpZ25lZCBzaG9ydAkJCXJldm51bWJlcjsKKwlhdGFfc21hcnRfYXR0cmlidXRlX3QJCXZlbmRvcl9hdHRyaWJ1dGVzIFszMF07CisgICAgICAgIHVuc2lnbmVkIGNoYXIJCQlvZmZsaW5lX2RhdGFfY29sbGVjdGlvbl9zdGF0dXM7CisgICAgICAgIHVuc2lnbmVkIGNoYXIJCQlzZWxmX3Rlc3RfZXhlY19zdGF0dXM7CisJdW5zaWduZWQgc2hvcnQJCQl0b3RhbF90aW1lX3RvX2NvbXBsZXRlX29mZl9saW5lOworCXVuc2lnbmVkIGNoYXIJCQl2ZW5kb3Jfc3BlY2lmaWNfMzY2OworCXVuc2lnbmVkIGNoYXIJCQlvZmZsaW5lX2RhdGFfY29sbGVjdGlvbl9jYXBhYmlsaXR5OworCXVuc2lnbmVkIHNob3J0CQkJc21hcnRfY2FwYWJpbGl0eTsKKwl1bnNpZ25lZCBjaGFyCQkJZXJyb3Jsb2dfY2FwYWJpbGl0eTsKKwl1bnNpZ25lZCBjaGFyCQkJdmVuZG9yX3NwZWNpZmljXzM3MTsKKwl1bnNpZ25lZCBjaGFyCQkJc2hvcnRfdGVzdF9jb21wbGV0aW9uX3RpbWU7CisJdW5zaWduZWQgY2hhcgkJCWV4dGVuZF90ZXN0X2NvbXBsZXRpb25fdGltZTsKKwl1bnNpZ25lZCBjaGFyCQkJcmVzZXJ2ZWRfMzc0XzM4NSBbMTJdOworCXVuc2lnbmVkIGNoYXIJCQl2ZW5kb3Jfc3BlY2lmaWNfMzg2XzUwOSBbMTI1XTsKKwl1bnNpZ25lZCBjaGFyCQkJY2hrc3VtOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgYXRhX3NtYXJ0X3ZhbHVlc190OworCisvKiBTbWFydCBUaHJlc2hvbGQgZGF0YSBzdHJ1Y3R1cmVzICovCisvKiBWZW5kb3IgYXR0cmlidXRlIG9mIFNNQVJUIFRocmVzaG9sZCAqLwordHlwZWRlZiBzdHJ1Y3QgYXRhX3NtYXJ0X3RocmVzaG9sZF9lbnRyeV9zIHsKKwl1bnNpZ25lZCBjaGFyCQkJaWQ7CisJdW5zaWduZWQgY2hhcgkJCW5vcm1hbGl6ZWRfdGhyZXNob2xkOworCXVuc2lnbmVkIGNoYXIJCQlyZXNlcnZlZFsxMF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBhdGFfc21hcnRfdGhyZXNob2xkX2VudHJ5X3Q7CisKKy8qIEZvcm1hdCBvZiBSZWFkIFNNQVJUIFRIcmVzaG9sZCBDb21tYW5kICovCit0eXBlZGVmIHN0cnVjdCBhdGFfc21hcnRfdGhyZXNob2xkc19zIHsKKwl1bnNpZ25lZCBzaG9ydAkJCXJldm51bWJlcjsKKwlhdGFfc21hcnRfdGhyZXNob2xkX2VudHJ5X3QJdGhyZXNfZW50cmllc1szMF07CisJdW5zaWduZWQgY2hhcgkJCXJlc2VydmVkWzE0OV07CisJdW5zaWduZWQgY2hhcgkJCWNoa3N1bTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGF0YV9zbWFydF90aHJlc2hvbGRzX3Q7CisKK3R5cGVkZWYgc3RydWN0IGF0YV9zbWFydF9lcnJvcmxvZ19jb21tYW5kX3N0cnVjdF9zIHsKKwl1bnNpZ25lZCBjaGFyCQkJZGV2aWNlY29udHJvbHJlZzsKKwl1bnNpZ25lZCBjaGFyCQkJZmVhdHVyZXNyZWc7CisJdW5zaWduZWQgY2hhcgkJCXNlY3Rvcl9jb3VudDsKKwl1bnNpZ25lZCBjaGFyCQkJc2VjdG9yX251bWJlcjsKKwl1bnNpZ25lZCBjaGFyCQkJY3lsaW5kZXJfbG93OworCXVuc2lnbmVkIGNoYXIJCQljeWxpbmRlcl9oaWdoOworCXVuc2lnbmVkIGNoYXIJCQlkcml2ZV9oZWFkOworCXVuc2lnbmVkIGNoYXIJCQljb21tYW5kcmVnOworCXVuc2lnbmVkIGludAkJCXRpbWVzdGFtcDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGF0YV9zbWFydF9lcnJvcmxvZ19jb21tYW5kX3N0cnVjdF90OworCit0eXBlZGVmIHN0cnVjdCBhdGFfc21hcnRfZXJyb3Jsb2dfZXJyb3Jfc3RydWN0X3MgeworCXVuc2lnbmVkIGNoYXIJCQllcnJvcl9jb25kaXRpb247CisJdW5zaWduZWQgY2hhcgkJCWV4dGVuZGVkX2Vycm9yWzE0XTsKKwl1bnNpZ25lZCBjaGFyCQkJc3RhdGU7CisJdW5zaWduZWQgc2hvcnQJCQl0aW1lc3RhbXA7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBhdGFfc21hcnRfZXJyb3Jsb2dfZXJyb3Jfc3RydWN0X3Q7CisKK3R5cGVkZWYgc3RydWN0IGF0YV9zbWFydF9lcnJvcmxvZ19zdHJ1Y3RfcyB7CisJYXRhX3NtYXJ0X2Vycm9ybG9nX2NvbW1hbmRfc3RydWN0X3QJY29tbWFuZHNbNl07CisJYXRhX3NtYXJ0X2Vycm9ybG9nX2Vycm9yX3N0cnVjdF90CWVycm9yX3N0cnVjdDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGF0YV9zbWFydF9lcnJvcmxvZ19zdHJ1Y3RfdDsKKwordHlwZWRlZiBzdHJ1Y3QgYXRhX3NtYXJ0X2Vycm9ybG9nX3MgeworCXVuc2lnbmVkIGNoYXIJCQlyZXZudW1iZXI7CisJdW5zaWduZWQgY2hhcgkJCWVycm9yX2xvZ19wb2ludGVyOworCWF0YV9zbWFydF9lcnJvcmxvZ19zdHJ1Y3RfdAllcnJvcmxvZ19zdHJ1Y3RbNV07CisJdW5zaWduZWQgc2hvcnQJCQlhdGFfZXJyb3JfY291bnQ7CisJdW5zaWduZWQgc2hvcnQJCQlub25fZmF0YWxfY291bnQ7CisJdW5zaWduZWQgc2hvcnQJCQlkcml2ZV90aW1lb3V0X2NvdW50OworCXVuc2lnbmVkIGNoYXIJCQlyZXNlcnZlZFs1M107CisJdW5zaWduZWQgY2hhcgkJCWNoa3N1bTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGF0YV9zbWFydF9lcnJvcmxvZ190OworCit0eXBlZGVmIHN0cnVjdCBhdGFfc21hcnRfc2VsZnRlc3Rsb2dfc3RydWN0X3MgeworCXVuc2lnbmVkIGNoYXIJCQlzZWxmdGVzdG51bWJlcjsKKwl1bnNpZ25lZCBjaGFyCQkJc2VsZnRlc3RzdGF0dXM7CisJdW5zaWduZWQgc2hvcnQJCQl0aW1lc3RhbXA7CisJdW5zaWduZWQgY2hhcgkJCXNlbGZ0ZXN0ZmFpbHVyZWNoZWNrcG9pbnQ7CisJdW5zaWduZWQgaW50CQkJbGJhZmlyc3RmYWlsdXJlOworCXVuc2lnbmVkIGNoYXIJCQl2ZW5kb3JzcGVjaWZpY1sxNV07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBhdGFfc21hcnRfc2VsZnRlc3Rsb2dfc3RydWN0X3Q7CisKK3R5cGVkZWYgc3RydWN0IGF0YV9zbWFydF9zZWxmdGVzdGxvZ19zIHsKKwl1bnNpZ25lZCBzaG9ydAkJCXJldm51bWJlcjsKKwlhdGFfc21hcnRfc2VsZnRlc3Rsb2dfc3RydWN0X3QJc2VsZnRlc3Rfc3RydWN0WzIxXTsKKwl1bnNpZ25lZCBjaGFyCQkJdmVuZG9yc3BlY2lmaWNbMl07CisJdW5zaWduZWQgY2hhcgkJCW1vc3RyZWNlbnR0ZXN0OworCXVuc2lnbmVkIGNoYXIJCQlyZXNldmVyZWRbMl07CisJdW5zaWduZWQgY2hhcgkJCWNoa3N1bTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGF0YV9zbWFydF9zZWxmdGVzdGxvZ190OworCisjZW5kaWYJLyogX0xJTlVYX0hEU01BUlRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9oaWRkZXYuaCBiL2luY2x1ZGUvbGludXgvaGlkZGV2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ1YmExYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvaGlkZGV2LmgKQEAgLTAsMCArMSwyNDAgQEAKKyNpZm5kZWYgX0hJRERFVl9ICisjZGVmaW5lIF9ISURERVZfSAorCisvKgorICogJElkOiBoaWRkZXYuaCx2IDEuMiAyMDAxLzA0LzI2IDExOjI2OjA5IHZvanRlY2ggRXhwICQKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDAgVm9qdGVjaCBQYXZsaWsKKyAqCisgKiAgU3BvbnNvcmVkIGJ5IFN1U0UKKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiAKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKiAKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqIAorICogU2hvdWxkIHlvdSBuZWVkIHRvIGNvbnRhY3QgbWUsIHRoZSBhdXRob3IsIHlvdSBjYW4gZG8gc28gZWl0aGVyIGJ5CisgKiBlLW1haWwgLSBtYWlsIHlvdXIgbWVzc2FnZSB0byA8dm9qdGVjaEBzdXNlLmN6Piwgb3IgYnkgcGFwZXIgbWFpbDoKKyAqIFZvanRlY2ggUGF2bGlrLCBVY2l0ZWxza2EgMTU3NiwgUHJhZ3VlIDgsIDE4MiAwMCBDemVjaCBSZXB1YmxpYworICovCisKKy8qCisgKiBUaGUgZXZlbnQgc3RydWN0dXJlIGl0c2VsZgorICovCisKK3N0cnVjdCBoaWRkZXZfZXZlbnQgeworCXVuc2lnbmVkIGhpZDsKKwlzaWduZWQgaW50IHZhbHVlOworfTsKKworc3RydWN0IGhpZGRldl9kZXZpbmZvIHsKKwlfX3UzMiBidXN0eXBlOworCV9fdTMyIGJ1c251bTsKKwlfX3UzMiBkZXZudW07CisJX191MzIgaWZudW07CisJX19zMTYgdmVuZG9yOworCV9fczE2IHByb2R1Y3Q7CisJX19zMTYgdmVyc2lvbjsKKwlfX3UzMiBudW1fYXBwbGljYXRpb25zOworfTsKKworc3RydWN0IGhpZGRldl9jb2xsZWN0aW9uX2luZm8geworCV9fdTMyIGluZGV4OworCV9fdTMyIHR5cGU7CisJX191MzIgdXNhZ2U7CisJX191MzIgbGV2ZWw7Cit9OworCisjZGVmaW5lIEhJRF9TVFJJTkdfU0laRSAyNTYKK3N0cnVjdCBoaWRkZXZfc3RyaW5nX2Rlc2NyaXB0b3IgeworCV9fczMyIGluZGV4OworCWNoYXIgdmFsdWVbSElEX1NUUklOR19TSVpFXTsKK307CisKK3N0cnVjdCBoaWRkZXZfcmVwb3J0X2luZm8geworCV9fdTMyIHJlcG9ydF90eXBlOworCV9fdTMyIHJlcG9ydF9pZDsKKwlfX3UzMiBudW1fZmllbGRzOworfTsKKworLyogVG8gZG8gYSBHVVNBR0UvU1VTQUdFLCBmaWxsIGluIGF0IGxlYXN0IHVzYWdlX2NvZGUsICByZXBvcnRfdHlwZSBhbmQgCisgKiByZXBvcnRfaWQuICBTZXQgcmVwb3J0X2lkIHRvIFJFUE9SVF9JRF9VTktOT1dOIGlmIHRoZSByZXN0IG9mIHRoZSBmaWVsZHMgCisgKiBhcmUgdW5rbm93bi4gIE90aGVyd2lzZSB1c2UgYSB1c2FnZV9yZWYgc3RydWN0IGZpbGxlZCBpbiBmcm9tIGEgcHJldmlvdXMgCisgKiBzdWNjZXNzZnVsIEdVU0FHRSBjYWxsIHRvIHNhdmUgdGltZS4gIFRvIGFjdHVhbGx5IHNlbmQgYSB2YWx1ZSB0byB0aGUKKyAqIGRldmljZSwgcGVyZm9ybSBhIFNVU0FHRSBmaXJzdCwgZm9sbG93ZWQgYnkgYSBTUkVQT1JULiAgQW4gSU5JVFJFUE9SVCBvciBhCisgKiBHUkVQT1JUIGlzbid0IG5lY2Vzc2FyeSBmb3IgYSBHVVNBR0UgdG8gcmV0dXJuIHZhbGlkIGRhdGEuCisgKi8KKyNkZWZpbmUgSElEX1JFUE9SVF9JRF9VTktOT1dOIDB4ZmZmZmZmZmYKKyNkZWZpbmUgSElEX1JFUE9SVF9JRF9GSVJTVCAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgSElEX1JFUE9SVF9JRF9ORVhUICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgSElEX1JFUE9SVF9JRF9NQVNLICAgIDB4MDAwMDAwZmYKKyNkZWZpbmUgSElEX1JFUE9SVF9JRF9NQVggICAgIDB4MDAwMDAwZmYKKworI2RlZmluZSBISURfUkVQT1JUX1RZUEVfSU5QVVQJMQorI2RlZmluZSBISURfUkVQT1JUX1RZUEVfT1VUUFVUCTIKKyNkZWZpbmUgSElEX1JFUE9SVF9UWVBFX0ZFQVRVUkUJMworI2RlZmluZSBISURfUkVQT1JUX1RZUEVfTUlOICAgICAxCisjZGVmaW5lIEhJRF9SRVBPUlRfVFlQRV9NQVggICAgIDMKKworc3RydWN0IGhpZGRldl9maWVsZF9pbmZvIHsKKwlfX3UzMiByZXBvcnRfdHlwZTsKKwlfX3UzMiByZXBvcnRfaWQ7CisJX191MzIgZmllbGRfaW5kZXg7CisJX191MzIgbWF4dXNhZ2U7CisJX191MzIgZmxhZ3M7CisJX191MzIgcGh5c2ljYWw7CQkvKiBwaHlzaWNhbCB1c2FnZSBmb3IgdGhpcyBmaWVsZCAqLworCV9fdTMyIGxvZ2ljYWw7CQkvKiBsb2dpY2FsIHVzYWdlIGZvciB0aGlzIGZpZWxkICovCisJX191MzIgYXBwbGljYXRpb247CQkvKiBhcHBsaWNhdGlvbiB1c2FnZSBmb3IgdGhpcyBmaWVsZCAqLworCV9fczMyIGxvZ2ljYWxfbWluaW11bTsKKwlfX3MzMiBsb2dpY2FsX21heGltdW07CisJX19zMzIgcGh5c2ljYWxfbWluaW11bTsKKwlfX3MzMiBwaHlzaWNhbF9tYXhpbXVtOworCV9fdTMyIHVuaXRfZXhwb25lbnQ7CisJX191MzIgdW5pdDsKK307CisKKy8qIEZpbGwgaW4gcmVwb3J0X3R5cGUsIHJlcG9ydF9pZCBhbmQgZmllbGRfaW5kZXggdG8gZ2V0IHRoZSBpbmZvcm1hdGlvbiBvbiBhCisgKiBmaWVsZC4KKyAqLworI2RlZmluZSBISURfRklFTERfQ09OU1RBTlQJCTB4MDAxCisjZGVmaW5lIEhJRF9GSUVMRF9WQVJJQUJMRQkJMHgwMDIKKyNkZWZpbmUgSElEX0ZJRUxEX1JFTEFUSVZFCQkweDAwNAorI2RlZmluZSBISURfRklFTERfV1JBUAkJCTB4MDA4CQorI2RlZmluZSBISURfRklFTERfTk9OTElORUFSCQkweDAxMAorI2RlZmluZSBISURfRklFTERfTk9fUFJFRkVSUkVECQkweDAyMAorI2RlZmluZSBISURfRklFTERfTlVMTF9TVEFURQkJMHgwNDAKKyNkZWZpbmUgSElEX0ZJRUxEX1ZPTEFUSUxFCQkweDA4MAorI2RlZmluZSBISURfRklFTERfQlVGRkVSRURfQllURQkJMHgxMDAKKworc3RydWN0IGhpZGRldl91c2FnZV9yZWYgeworCV9fdTMyIHJlcG9ydF90eXBlOworCV9fdTMyIHJlcG9ydF9pZDsKKwlfX3UzMiBmaWVsZF9pbmRleDsKKwlfX3UzMiB1c2FnZV9pbmRleDsKKwlfX3UzMiB1c2FnZV9jb2RlOworCV9fczMyIHZhbHVlOworfTsKKworLyogaGlkZGV2X3VzYWdlX3JlZl9tdWx0aSBpcyB1c2VkIGZvciBzZW5kaW5nIG11bHRpcGxlIGJ5dGVzIHRvIGEgY29udHJvbC4KKyAqIEl0IHJlYWxseSBtYW5pZmVzdHMgaXRzZWxmIGFzIHNldHRpbmcgdGhlIHZhbHVlIG9mIGNvbnNlY3V0aXZlIHVzYWdlcyAqLworI2RlZmluZSBISURfTUFYX01VTFRJX1VTQUdFUyAxMDI0CitzdHJ1Y3QgaGlkZGV2X3VzYWdlX3JlZl9tdWx0aSB7CisJc3RydWN0IGhpZGRldl91c2FnZV9yZWYgdXJlZjsKKwlfX3UzMiBudW1fdmFsdWVzOworCV9fczMyIHZhbHVlc1tISURfTUFYX01VTFRJX1VTQUdFU107Cit9OworCisvKiBGSUVMRF9JTkRFWF9OT05FIGlzIHJldHVybmVkIGluIHJlYWQoKSBkYXRhIGZyb20gdGhlIGtlcm5lbCB3aGVuIGZsYWdzCisgKiBpcyBzZXQgdG8gKEhJRERFVl9GTEFHX1VSRUYgfCBISURERVZfRkxBR19SRVBPUlQpIGFuZCBhIG5ldyByZXBvcnQgaGFzCisgKiBiZWVuIHNlbnQgYnkgdGhlIGRldmljZSAKKyAqLworI2RlZmluZSBISURfRklFTERfSU5ERVhfTk9ORSAweGZmZmZmZmZmCisKKy8qCisgKiBQcm90b2NvbCB2ZXJzaW9uLgorICovCisKKyNkZWZpbmUgSElEX1ZFUlNJT04JCTB4MDEwMDA0CisKKy8qCisgKiBJT0NUTHMgKDB4MDAgLSAweDdmKQorICovCisKKyNkZWZpbmUgSElESU9DR1ZFUlNJT04JCV9JT1IoJ0gnLCAweDAxLCBpbnQpCisjZGVmaW5lIEhJRElPQ0FQUExJQ0FUSU9OCV9JTygnSCcsIDB4MDIpCisjZGVmaW5lIEhJRElPQ0dERVZJTkZPCQlfSU9SKCdIJywgMHgwMywgc3RydWN0IGhpZGRldl9kZXZpbmZvKQorI2RlZmluZSBISURJT0NHU1RSSU5HCQlfSU9SKCdIJywgMHgwNCwgc3RydWN0IGhpZGRldl9zdHJpbmdfZGVzY3JpcHRvcikKKyNkZWZpbmUgSElESU9DSU5JVFJFUE9SVAlfSU8oJ0gnLCAweDA1KQorI2RlZmluZSBISURJT0NHTkFNRShsZW4pCV9JT0MoX0lPQ19SRUFELCAnSCcsIDB4MDYsIGxlbikKKyNkZWZpbmUgSElESU9DR1JFUE9SVAkJX0lPVygnSCcsIDB4MDcsIHN0cnVjdCBoaWRkZXZfcmVwb3J0X2luZm8pCisjZGVmaW5lIEhJRElPQ1NSRVBPUlQJCV9JT1coJ0gnLCAweDA4LCBzdHJ1Y3QgaGlkZGV2X3JlcG9ydF9pbmZvKQorI2RlZmluZSBISURJT0NHUkVQT1JUSU5GTwlfSU9XUignSCcsIDB4MDksIHN0cnVjdCBoaWRkZXZfcmVwb3J0X2luZm8pCisjZGVmaW5lIEhJRElPQ0dGSUVMRElORk8JX0lPV1IoJ0gnLCAweDBBLCBzdHJ1Y3QgaGlkZGV2X2ZpZWxkX2luZm8pCisjZGVmaW5lIEhJRElPQ0dVU0FHRQkJX0lPV1IoJ0gnLCAweDBCLCBzdHJ1Y3QgaGlkZGV2X3VzYWdlX3JlZikKKyNkZWZpbmUgSElESU9DU1VTQUdFCQlfSU9XKCdIJywgMHgwQywgc3RydWN0IGhpZGRldl91c2FnZV9yZWYpCisjZGVmaW5lIEhJRElPQ0dVQ09ERQkJX0lPV1IoJ0gnLCAweDBELCBzdHJ1Y3QgaGlkZGV2X3VzYWdlX3JlZikKKyNkZWZpbmUgSElESU9DR0ZMQUcJCV9JT1IoJ0gnLCAweDBFLCBpbnQpCisjZGVmaW5lIEhJRElPQ1NGTEFHCQlfSU9XKCdIJywgMHgwRiwgaW50KQorI2RlZmluZSBISURJT0NHQ09MTEVDVElPTklOREVYCV9JT1coJ0gnLCAweDEwLCBzdHJ1Y3QgaGlkZGV2X3VzYWdlX3JlZikKKyNkZWZpbmUgSElESU9DR0NPTExFQ1RJT05JTkZPCV9JT1dSKCdIJywgMHgxMSwgc3RydWN0IGhpZGRldl9jb2xsZWN0aW9uX2luZm8pCisjZGVmaW5lIEhJRElPQ0dQSFlTKGxlbikJX0lPQyhfSU9DX1JFQUQsICdIJywgMHgxMiwgbGVuKQorCisvKiBGb3Igd3JpdGluZy9yZWFkaW5nIHRvIG11bHRpcGxlL2NvbnNlY3V0aXZlIHVzYWdlcyAqLworI2RlZmluZSBISURJT0NHVVNBR0VTCQlfSU9XUignSCcsIDB4MTMsIHN0cnVjdCBoaWRkZXZfdXNhZ2VfcmVmX211bHRpKQorI2RlZmluZSBISURJT0NTVVNBR0VTCQlfSU9XKCdIJywgMHgxNCwgc3RydWN0IGhpZGRldl91c2FnZV9yZWZfbXVsdGkpCisKKy8qIAorICogRmxhZ3MgdG8gYmUgdXNlZCBpbiBISURJT0NTRkxBRworICovCisjZGVmaW5lIEhJRERFVl9GTEFHX1VSRUYJMHgxCisjZGVmaW5lIEhJRERFVl9GTEFHX1JFUE9SVAkweDIKKyNkZWZpbmUgSElEREVWX0ZMQUdTCQkweDMKKworLyogVG8gdHJhdmVyc2UgdGhlIGlucHV0IHJlcG9ydCBkZXNjcmlwdG9yIGluZm8gZm9yIGEgSElEIGRldmljZSwgcGVyZm9ybSB0aGUgCisgKiBmb2xsb3dpbmc6CisgKgorICogIHJpbmZvLnJlcG9ydF90eXBlID0gSElEX1JFUE9SVF9UWVBFX0lOUFVUOworICogIHJpbmZvLnJlcG9ydF9pZCA9IEhJRF9SRVBPUlRfSURfRklSU1Q7CisgKiAgcmV0ID0gaW9jdGwoZmQsIEhJRElPQ0dSRVBPUlRJTkZPLCAmcmluZm8pOworICoKKyAqICB3aGlsZSAocmV0ID49IDApIHsKKyAqICAgICAgZm9yIChpID0gMDsgaSA8IHJpbmZvLm51bV9maWVsZHM7IGkrKykgeyAKKyAqCSAgICBmaW5mby5yZXBvcnRfdHlwZSA9IHJpbmZvLnJlcG9ydF90eXBlOworICogICAgICAgICAgZmluZm8ucmVwb3J0X2lkID0gcmluZm8ucmVwb3J0X2lkOworICogICAgICAgICAgZmluZm8uZmllbGRfaW5kZXggPSBpOworICogICAgICAgICAgaW9jdGwoZmQsIEhJRElPQ0dGSUVMRElORk8sICZmaW5mbyk7CisgKiAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgZmluZm8ubWF4dXNhZ2U7IGorKykgeworICogICAgICAgICAgICAgIHVyZWYuZmllbGRfaW5kZXggPSBpOworICoJCXVyZWYudXNhZ2VfaW5kZXggPSBqOworICoJCWlvY3RsKGZkLCBISURJT0NHVUNPREUsICZ1cmVmKTsKKyAqCQlpb2N0bChmZCwgSElESU9DR1VTQUdFLCAmdXJlZik7CisgKiAgICAgICAgICB9CisgKgl9CisgKglyaW5mby5yZXBvcnRfaWQgfD0gSElEX1JFUE9SVF9JRF9ORVhUOworICoJcmV0ID0gaW9jdGwoZmQsIEhJRElPQ0dSRVBPUlRJTkZPLCAmcmluZm8pOworICogIH0KKyAqLworCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKy8qCisgKiBJbi1rZXJuZWwgZGVmaW5pdGlvbnMuCisgKi8KKworc3RydWN0IGhpZF9kZXZpY2U7CitzdHJ1Y3QgaGlkX3VzYWdlOworc3RydWN0IGhpZF9maWVsZDsKK3N0cnVjdCBoaWRfcmVwb3J0OworCisjaWZkZWYgQ09ORklHX1VTQl9ISURERVYKK2ludCBoaWRkZXZfY29ubmVjdChzdHJ1Y3QgaGlkX2RldmljZSAqKTsKK3ZvaWQgaGlkZGV2X2Rpc2Nvbm5lY3Qoc3RydWN0IGhpZF9kZXZpY2UgKik7Cit2b2lkIGhpZGRldl9oaWRfZXZlbnQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgc3RydWN0IGhpZF9maWVsZCAqZmllbGQsCisJCSAgICAgIHN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLCBfX3MzMiB2YWx1ZSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwordm9pZCBoaWRkZXZfcmVwb3J0X2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQpOworaW50IF9faW5pdCBoaWRkZXZfaW5pdCh2b2lkKTsKK3ZvaWQgaGlkZGV2X2V4aXQodm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgaGlkZGV2X2Nvbm5lY3Qoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCkgeyByZXR1cm4gLTE7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBoaWRkZXZfZGlzY29ubmVjdChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBoaWRkZXZfaGlkX2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLAorCQkgICAgICBzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwgX19zMzIgdmFsdWUsIHN0cnVjdCBwdF9yZWdzICpyZWdzKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBoaWRkZXZfcmVwb3J0X2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQpIHsgfQorc3RhdGljIGlubGluZSBpbnQgaGlkZGV2X2luaXQodm9pZCkgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSB2b2lkIGhpZGRldl9leGl0KHZvaWQpIHsgfQorI2VuZGlmCisKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2hpZ2htZW0uaCBiL2luY2x1ZGUvbGludXgvaGlnaG1lbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhN2U2YzYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2hpZ2htZW0uaApAQCAtMCwwICsxLDEwNCBAQAorI2lmbmRlZiBfTElOVVhfSElHSE1FTV9ICisjZGVmaW5lIF9MSU5VWF9ISUdITUVNX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKworI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisKKyNpZmRlZiBDT05GSUdfSElHSE1FTQorCisjaW5jbHVkZSA8YXNtL2hpZ2htZW0uaD4KKworLyogZGVjbGFyYXRpb25zIGZvciBsaW51eC9tbS9oaWdobWVtLmMgKi8KK3Vuc2lnbmVkIGludCBucl9mcmVlX2hpZ2hwYWdlcyh2b2lkKTsKKworI2Vsc2UgLyogQ09ORklHX0hJR0hNRU0gKi8KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbnJfZnJlZV9oaWdocGFnZXModm9pZCkgeyByZXR1cm4gMDsgfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKmttYXAoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJbWlnaHRfc2xlZXAoKTsKKwlyZXR1cm4gcGFnZV9hZGRyZXNzKHBhZ2UpOworfQorCisjZGVmaW5lIGt1bm1hcChwYWdlKSBkbyB7ICh2b2lkKSAocGFnZSk7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUga21hcF9hdG9taWMocGFnZSwgaWR4KQkJcGFnZV9hZGRyZXNzKHBhZ2UpCisjZGVmaW5lIGt1bm1hcF9hdG9taWMoYWRkciwgaWR4KQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGttYXBfYXRvbWljX3RvX3BhZ2UocHRyKQl2aXJ0X3RvX3BhZ2UocHRyKQorCisjZW5kaWYgLyogQ09ORklHX0hJR0hNRU0gKi8KKworLyogd2hlbiBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0IHRoZXNlIHdpbGwgYmUgcGxhaW4gY2xlYXIvY29weV9wYWdlICovCitzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfdXNlcl9oaWdocGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyB2YWRkcikKK3sKKwl2b2lkICphZGRyID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOworCWNsZWFyX3VzZXJfcGFnZShhZGRyLCB2YWRkciwgcGFnZSk7CisJa3VubWFwX2F0b21pYyhhZGRyLCBLTV9VU0VSMCk7CisJLyogTWFrZSBzdXJlIHRoaXMgcGFnZSBpcyBjbGVhcmVkIG9uIG90aGVyIENQVSdzIHRvbyBiZWZvcmUgdXNpbmcgaXQgKi8KKwlzbXBfd21iKCk7Cit9CisKKyNpZm5kZWYgX19IQVZFX0FSQ0hfQUxMT0NfWkVST0VEX1VTRVJfSElHSFBBR0UKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKgorYWxsb2NfemVyb2VkX3VzZXJfaGlnaHBhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgdmFkZHIpCit7CisJc3RydWN0IHBhZ2UgKnBhZ2UgPSBhbGxvY19wYWdlX3ZtYShHRlBfSElHSFVTRVIsIHZtYSwgdmFkZHIpOworCisJaWYgKHBhZ2UpCisJCWNsZWFyX3VzZXJfaGlnaHBhZ2UocGFnZSwgdmFkZHIpOworCisJcmV0dXJuIHBhZ2U7Cit9CisjZW5kaWYKKworc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX2hpZ2hwYWdlKHN0cnVjdCBwYWdlICpwYWdlKQoreworCXZvaWQgKmthZGRyID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOworCWNsZWFyX3BhZ2Uoa2FkZHIpOworCWt1bm1hcF9hdG9taWMoa2FkZHIsIEtNX1VTRVIwKTsKK30KKworLyoKKyAqIFNhbWUgYnV0IGFsc28gZmx1c2hlcyBhbGlhc2VkIGNhY2hlIGNvbnRlbnRzIHRvIFJBTS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIG1lbWNsZWFyX2hpZ2hwYWdlX2ZsdXNoKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgc2l6ZSkKK3sKKwl2b2lkICprYWRkcjsKKworCUJVR19PTihvZmZzZXQgKyBzaXplID4gUEFHRV9TSVpFKTsKKworCWthZGRyID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOworCW1lbXNldCgoY2hhciAqKWthZGRyICsgb2Zmc2V0LCAwLCBzaXplKTsKKwlmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTsKKwlrdW5tYXBfYXRvbWljKGthZGRyLCBLTV9VU0VSMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5X3VzZXJfaGlnaHBhZ2Uoc3RydWN0IHBhZ2UgKnRvLCBzdHJ1Y3QgcGFnZSAqZnJvbSwgdW5zaWduZWQgbG9uZyB2YWRkcikKK3sKKwljaGFyICp2ZnJvbSwgKnZ0bzsKKworCXZmcm9tID0ga21hcF9hdG9taWMoZnJvbSwgS01fVVNFUjApOworCXZ0byA9IGttYXBfYXRvbWljKHRvLCBLTV9VU0VSMSk7CisJY29weV91c2VyX3BhZ2UodnRvLCB2ZnJvbSwgdmFkZHIsIHRvKTsKKwlrdW5tYXBfYXRvbWljKHZmcm9tLCBLTV9VU0VSMCk7CisJa3VubWFwX2F0b21pYyh2dG8sIEtNX1VTRVIxKTsKKwkvKiBNYWtlIHN1cmUgdGhpcyBwYWdlIGlzIGNsZWFyZWQgb24gb3RoZXIgQ1BVJ3MgdG9vIGJlZm9yZSB1c2luZyBpdCAqLworCXNtcF93bWIoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNvcHlfaGlnaHBhZ2Uoc3RydWN0IHBhZ2UgKnRvLCBzdHJ1Y3QgcGFnZSAqZnJvbSkKK3sKKwljaGFyICp2ZnJvbSwgKnZ0bzsKKworCXZmcm9tID0ga21hcF9hdG9taWMoZnJvbSwgS01fVVNFUjApOworCXZ0byA9IGttYXBfYXRvbWljKHRvLCBLTV9VU0VSMSk7CisJY29weV9wYWdlKHZ0bywgdmZyb20pOworCWt1bm1hcF9hdG9taWModmZyb20sIEtNX1VTRVIwKTsKKwlrdW5tYXBfYXRvbWljKHZ0bywgS01fVVNFUjEpOworfQorCisjZW5kaWYgLyogX0xJTlVYX0hJR0hNRU1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9oaWdodWlkLmggYi9pbmNsdWRlL2xpbnV4L2hpZ2h1aWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2VjYWMzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9oaWdodWlkLmgKQEAgLTAsMCArMSw5OCBAQAorI2lmbmRlZiBfTElOVVhfSElHSFVJRF9ICisjZGVmaW5lIF9MSU5VWF9ISUdIVUlEX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qCisgKiBnZW5lcmFsIG5vdGVzOgorICoKKyAqIENPTkZJR19VSUQxNiBpcyBkZWZpbmVkIGlmIHRoZSBnaXZlbiBhcmNoaXRlY3R1cmUgbmVlZHMgdG8KKyAqIHN1cHBvcnQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgZm9yIG9sZCBzeXN0ZW0gY2FsbHMuCisgKgorICoga2VybmVsIGNvZGUgc2hvdWxkIHVzZSB1aWRfdCBhbmQgZ2lkX3QgYXQgYWxsIHRpbWVzIHdoZW4gZGVhbGluZyB3aXRoCisgKiBrZXJuZWwtcHJpdmF0ZSBkYXRhLgorICoKKyAqIG9sZF91aWRfdCBhbmQgb2xkX2dpZF90IHNob3VsZCBvbmx5IGJlIGRpZmZlcmVudCBpZiBDT05GSUdfVUlEMTYgaXMKKyAqIGRlZmluZWQsIGVsc2UgdGhlIHBsYXRmb3JtIHNob3VsZCBwcm92aWRlIGR1bW15IHR5cGVkZWZzIGZvciB0aGVtCisgKiBzdWNoIHRoYXQgdGhleSBhcmUgZXF1aXZhbGVudCB0byBfX2tlcm5lbF97dSxnfWlkX3QuCisgKgorICogdWlkMTZfdCBhbmQgZ2lkMTZfdCBhcmUgdXNlZCBvbiBhbGwgYXJjaGl0ZWN0dXJlcy4gKHdoZW4gZGVhbGluZworICogd2l0aCBzdHJ1Y3R1cmVzIGhhcmQgY29kZWQgdG8gMTYgYml0cywgc3VjaCBhcyBpbiBmaWxlc3lzdGVtcykKKyAqLworCisKKy8qCisgKiBUaGlzIGlzIHRoZSAib3ZlcmZsb3ciIFVJRCBhbmQgR0lELiBUaGV5IGFyZSB1c2VkIHRvIHNpZ25pZnkgdWlkL2dpZAorICogb3ZlcmZsb3cgdG8gb2xkIHByb2dyYW1zIHdoZW4gdGhleSByZXF1ZXN0IHVpZC9naWQgaW5mb3JtYXRpb24gYnV0IGFyZQorICogdXNpbmcgdGhlIG9sZCAxNiBiaXQgaW50ZXJmYWNlcy4KKyAqIFdoZW4geW91IHJ1biBhIGxpYmM1IHByb2dyYW0sIGl0IHdpbGwgdGhpbmsgdGhhdCBhbGwgaGlnaHVpZCBmaWxlcyBvcgorICogcHJvY2Vzc2VzIGFyZSBvd25lZCBieSB0aGlzIHVpZC9naWQuCisgKiBUaGUgaWRlYSBpcyB0aGF0IGl0J3MgYmV0dGVyIHRvIGRvIHNvIHRoYW4gcG9zc2libHkgcmV0dXJuIDAgaW4gbGlldSBvZgorICogNjU1MzYsIGV0Yy4KKyAqLworCitleHRlcm4gaW50IG92ZXJmbG93dWlkOworZXh0ZXJuIGludCBvdmVyZmxvd2dpZDsKKworZXh0ZXJuIHZvaWQgX19iYWRfdWlkKHZvaWQpOworZXh0ZXJuIHZvaWQgX19iYWRfZ2lkKHZvaWQpOworCisjZGVmaW5lIERFRkFVTFRfT1ZFUkZMT1dVSUQJNjU1MzQKKyNkZWZpbmUgREVGQVVMVF9PVkVSRkxPV0dJRAk2NTUzNAorCisjaWZkZWYgQ09ORklHX1VJRDE2CisKKy8qIHByZXZlbnQgdWlkIG1vZCA2NTUzNiBlZmZlY3QgYnkgcmV0dXJuaW5nIGEgZGVmYXVsdCB2YWx1ZSBmb3IgaGlnaCBVSURzICovCisjZGVmaW5lIGhpZ2gybG93dWlkKHVpZCkgKCh1aWQpICYgfjB4RkZGRiA/IChvbGRfdWlkX3Qpb3ZlcmZsb3d1aWQgOiAob2xkX3VpZF90KSh1aWQpKQorI2RlZmluZSBoaWdoMmxvd2dpZChnaWQpICgoZ2lkKSAmIH4weEZGRkYgPyAob2xkX2dpZF90KW92ZXJmbG93Z2lkIDogKG9sZF9naWRfdCkoZ2lkKSkKKy8qCisgKiAtMSBpcyBkaWZmZXJlbnQgaW4gMTYgYml0cyB0aGFuIGl0IGlzIGluIDMyIGJpdHMKKyAqIHRoZXNlIG1hY3JvcyBhcmUgdXNlZCBieSBjaG93bigpLCBzZXRyZXVpZCgpLCAuLi4sCisgKi8KKyNkZWZpbmUgbG93MmhpZ2h1aWQodWlkKSAoKHVpZCkgPT0gKG9sZF91aWRfdCktMSA/ICh1aWRfdCktMSA6ICh1aWRfdCkodWlkKSkKKyNkZWZpbmUgbG93MmhpZ2hnaWQoZ2lkKSAoKGdpZCkgPT0gKG9sZF9naWRfdCktMSA/IChnaWRfdCktMSA6IChnaWRfdCkoZ2lkKSkKKworI2RlZmluZSBfX2NvbnZlcnRfdWlkKHNpemUsIHVpZCkgXAorCShzaXplID49IHNpemVvZih1aWQpID8gKHVpZCkgOiBoaWdoMmxvd3VpZCh1aWQpKQorI2RlZmluZSBfX2NvbnZlcnRfZ2lkKHNpemUsIGdpZCkgXAorCShzaXplID49IHNpemVvZihnaWQpID8gKGdpZCkgOiBoaWdoMmxvd2dpZChnaWQpKQorCQorCisjZWxzZQorCisjZGVmaW5lIF9fY29udmVydF91aWQoc2l6ZSwgdWlkKSAodWlkKQorI2RlZmluZSBfX2NvbnZlcnRfZ2lkKHNpemUsIGdpZCkgKGdpZCkKKworI2VuZGlmIC8qICFDT05GSUdfVUlEMTYgKi8KKworLyogdWlkL2dpZCBpbnB1dCBzaG91bGQgYmUgYWx3YXlzIDMyYml0IHVpZF90ICovCisjZGVmaW5lIFNFVF9VSUQodmFyLCB1aWQpIGRvIHsgKHZhcikgPSBfX2NvbnZlcnRfdWlkKHNpemVvZih2YXIpLCAodWlkKSk7IH0gd2hpbGUgKDApCisjZGVmaW5lIFNFVF9HSUQodmFyLCBnaWQpIGRvIHsgKHZhcikgPSBfX2NvbnZlcnRfZ2lkKHNpemVvZih2YXIpLCAoZ2lkKSk7IH0gd2hpbGUgKDApCisKKy8qCisgKiBFdmVyeXRoaW5nIGJlbG93IHRoaXMgbGluZSBpcyBuZWVkZWQgb24gYWxsIGFyY2hpdGVjdHVyZXMsIHRvIGRlYWwgd2l0aAorICogZmlsZXN5c3RlbXMgdGhhdCBvbmx5IHN0b3JlIDE2IGJpdHMgb2YgdGhlIFVJRC9HSUQsIGV0Yy4KKyAqLworCisvKgorICogVGhpcyBpcyB0aGUgVUlEIGFuZCBHSUQgdGhhdCB3aWxsIGdldCB3cml0dGVuIHRvIGRpc2sgaWYgYSBmaWxlc3lzdGVtCisgKiBvbmx5IHN1cHBvcnRzIDE2LWJpdCBVSURzIGFuZCB0aGUga2VybmVsIGhhcyBhIGhpZ2ggVUlEL0dJRCB0byB3cml0ZQorICovCitleHRlcm4gaW50IGZzX292ZXJmbG93dWlkOworZXh0ZXJuIGludCBmc19vdmVyZmxvd2dpZDsKKworI2RlZmluZSBERUZBVUxUX0ZTX09WRVJGTE9XVUlECTY1NTM0CisjZGVmaW5lIERFRkFVTFRfRlNfT1ZFUkZMT1dHSUQJNjU1MzQKKworLyoKKyAqIFNpbmNlIHRoZXNlIG1hY3JvcyBhcmUgdXNlZCBpbiBhcmNoaXRlY3R1cmVzIHRoYXQgb25seSBuZWVkIGxpbWl0ZWQKKyAqIDE2LWJpdCBVSUQgYmFjayBjb21wYXRpYmlsaXR5LCB3ZSB3b24ndCB1c2Ugb2xkX3VpZF90IGFuZCBvbGRfZ2lkX3QKKyAqLworI2RlZmluZSBmc19oaWdoMmxvd3VpZCh1aWQpICgodWlkKSAmIH4weEZGRkYgPyAodWlkMTZfdClmc19vdmVyZmxvd3VpZCA6ICh1aWQxNl90KSh1aWQpKQorI2RlZmluZSBmc19oaWdoMmxvd2dpZChnaWQpICgoZ2lkKSAmIH4weEZGRkYgPyAoZ2lkMTZfdClmc19vdmVyZmxvd2dpZCA6IChnaWQxNl90KShnaWQpKQorCisjZGVmaW5lIGxvd18xNl9iaXRzKHgpCSgoeCkgJiAweEZGRkYpCisjZGVmaW5lIGhpZ2hfMTZfYml0cyh4KQkoKCh4KSAmIDB4RkZGRjAwMDApID4+IDE2KQorCisjZW5kaWYgLyogX0xJTlVYX0hJR0hVSURfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9oaXBwaWRldmljZS5oIGIvaW5jbHVkZS9saW51eC9oaXBwaWRldmljZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5YjNhNGEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2hpcHBpZGV2aWNlLmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIElORVQJCUFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBUQ1AvSVAgcHJvdG9jb2wgc3VpdGUgZm9yIHRoZSBMSU5VWAorICoJCW9wZXJhdGluZyBzeXN0ZW0uICBJTkVUIGlzIGltcGxlbWVudGVkIHVzaW5nIHRoZSBCU0QgU29ja2V0CisgKgkJaW50ZXJmYWNlIGFzIHRoZSBtZWFucyBvZiBjb21tdW5pY2F0aW9uIHdpdGggdGhlIHVzZXIgbGV2ZWwuCisgKgorICoJCURlZmluaXRpb25zIGZvciB0aGUgSElQUEkgaGFuZGxlcnMuCisgKgorICogVmVyc2lvbjoJQCgjKWhpcHBpZGV2aWNlLmgJMS4wLjAJMDUvMjYvOTcKKyAqCisgKiBBdXRob3I6CUplcyBTb3JlbnNlbiwgPEplcy5Tb3JlbnNlbkBjZXJuLmNoPgorICoKKyAqCQloaXBwaWRldmljZS5oIGlzIGJhc2VkIG9uIHByZXZpb3VzIGZkZGlkZXZpY2UuaCB3b3JrIGJ5CisgKgkJCVJvc3MgQmlybywgPGJpcjdAbGVsYW5kLlN0YW5mb3JkLkVkdT4KKyAqCQkJRnJlZCBOLiB2YW4gS2VtcGVuLCA8d2FsdGplQHVXYWx0Lk5MLk11Z25ldC5PUkc+CisgKgkJCUFsYW4gQ294LCA8Z3c0cHRzQGd3NHB0cy5hbXByLm9yZz4KKyAqCQkJTGF3cmVuY2UgVi4gU3RlZmFuaSwgPHN0ZWZhbmlAbGtnLmRlYy5jb20+CisgKgorICoJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCQltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICoJCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICoJCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpZm5kZWYgX0xJTlVYX0hJUFBJREVWSUNFX0gKKyNkZWZpbmUgX0xJTlVYX0hJUFBJREVWSUNFX0gKKworI2luY2x1ZGUgPGxpbnV4L2lmX2hpcHBpLmg+CisKKyNpZmRlZiBfX0tFUk5FTF9fCitleHRlcm4gdW5zaWduZWQgc2hvcnQgaGlwcGlfdHlwZV90cmFucyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKworZXh0ZXJuIHN0cnVjdCBuZXRfZGV2aWNlICphbGxvY19oaXBwaV9kZXYoaW50IHNpemVvZl9wcml2KTsKKyNlbmRpZgorCisjZW5kaWYJLyogX0xJTlVYX0hJUFBJREVWSUNFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHBldC5oIGIvaW5jbHVkZS9saW51eC9ocGV0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjcyMzgxOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvaHBldC5oCkBAIC0wLDAgKzEsMTM2IEBACisjaWZuZGVmCV9fSFBFVF9fCisjZGVmaW5lCV9fSFBFVF9fIDEKKworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisKKy8qCisgKiBPZmZzZXRzIGludG8gSFBFVCBSZWdpc3RlcnMKKyAqLworCitzdHJ1Y3QgaHBldCB7CisJdTY0IGhwZXRfY2FwOwkJLyogY2FwYWJpbGl0aWVzICovCisJdTY0IHJlczA7CQkvKiByZXNlcnZlZCAqLworCXU2NCBocGV0X2NvbmZpZzsJLyogY29uZmlndXJhdGlvbiAqLworCXU2NCByZXMxOwkJLyogcmVzZXJ2ZWQgKi8KKwl1NjQgaHBldF9pc3I7CQkvKiBpbnRlcnJ1cHQgc3RhdHVzIHJlZyAqLworCXU2NCByZXMyWzI1XTsJCS8qIHJlc2VydmVkICovCisJdW5pb24gewkJCS8qIG1haW4gY291bnRlciAqLworCQl1NjQgX2hwZXRfbWM2NDsKKwkJdTMyIF9ocGV0X21jMzI7CisJCXVuc2lnbmVkIGxvbmcgX2hwZXRfbWM7CisJfSBfdTA7CisJdTY0IHJlczM7CQkvKiByZXNlcnZlZCAqLworCXN0cnVjdCBocGV0X3RpbWVyIHsKKwkJdTY0IGhwZXRfY29uZmlnOwkvKiBjb25maWd1cmF0aW9uL2NhcCAqLworCQl1bmlvbiB7CQkvKiB0aW1lciBjb21wYXJlIHJlZ2lzdGVyICovCisJCQl1NjQgX2hwZXRfaGM2NDsKKwkJCXUzMiBfaHBldF9oYzMyOworCQkJdW5zaWduZWQgbG9uZyBfaHBldF9jb21wYXJlOworCQl9IF91MTsKKwkJdTY0IGhwZXRfZnNiWzJdOwkvKiBGU0Igcm91dGUgKi8KKwl9IGhwZXRfdGltZXJzWzFdOworfTsKKworI2RlZmluZQlocGV0X21jCQlfdTAuX2hwZXRfbWMKKyNkZWZpbmUJaHBldF9jb21wYXJlCV91MS5faHBldF9jb21wYXJlCisKKyNkZWZpbmUJSFBFVF9NQVhfVElNRVJTCSgzMikKKworLyoKKyAqIEhQRVQgZ2VuZXJhbCBjYXBhYmlsaXRpZXMgcmVnaXN0ZXIKKyAqLworCisjZGVmaW5lCUhQRVRfQ09VTlRFUl9DTEtfUEVSSU9EX01BU0sJKDB4ZmZmZmZmZmYwMDAwMDAwMFVMTCkKKyNkZWZpbmUJSFBFVF9DT1VOVEVSX0NMS19QRVJJT0RfU0hJRlQJKDMyVUwpCisjZGVmaW5lCUhQRVRfVkVORE9SX0lEX01BU0sJCSgweDAwMDAwMDAwZmZmZjAwMDBVTEwpCisjZGVmaW5lCUhQRVRfVkVORE9SX0lEX1NISUZUCQkoMTZVTEwpCisjZGVmaW5lCUhQRVRfTEVHX1JUX0NBUF9NQVNLCQkoMHg4MDAwKQorI2RlZmluZQlIUEVUX0NPVU5URVJfU0laRV9NQVNLCQkoMHgyMDAwKQorI2RlZmluZQlIUEVUX05VTV9USU1fQ0FQX01BU0sJCSgweDFmMDApCisjZGVmaW5lCUhQRVRfTlVNX1RJTV9DQVBfU0hJRlQJCSg4VUxMKQorCisvKgorICogSFBFVCBnZW5lcmFsIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIKKyAqLworCisjZGVmaW5lCUhQRVRfTEVHX1JUX0NORl9NQVNLCQkoMlVMKQorI2RlZmluZQlIUEVUX0VOQUJMRV9DTkZfTUFTSwkJKDFVTCkKKworCisvKgorICogVGltZXIgY29uZmlndXJhdGlvbiByZWdpc3RlcgorICovCisKKyNkZWZpbmUJVG5fSU5UX1JPVVRFX0NBUF9NQVNLCQkoMHhmZmZmZmZmZjAwMDAwMDAwVUxMKQorI2RlZmluZQlUbl9JTklfUk9VVEVfQ0FQX1NISUZUCQkoMzJVTCkKKyNkZWZpbmUJVG5fRlNCX0lOVF9ERUxDQVBfTUFTSwkJKDB4ODAwMFVMKQorI2RlZmluZQlUbl9GU0JfSU5UX0RFTENBUF9TSElGVAkJKDE1KQorI2RlZmluZQlUbl9GU0JfRU5fQ05GX01BU0sJCSgweDQwMDBVTCkKKyNkZWZpbmUJVG5fRlNCX0VOX0NORl9TSElGVAkJKDE0KQorI2RlZmluZQlUbl9JTlRfUk9VVEVfQ05GX01BU0sJCSgweDNlMDBVTCkKKyNkZWZpbmUJVG5fSU5UX1JPVVRFX0NORl9TSElGVAkJKDkpCisjZGVmaW5lCVRuXzMyTU9ERV9DTkZfTUFTSwkJKDB4MDEwMFVMKQorI2RlZmluZQlUbl9WQUxfU0VUX0NORl9NQVNLCQkoMHgwMDQwVUwpCisjZGVmaW5lCVRuX1NJWkVfQ0FQX01BU0sJCSgweDAwMjBVTCkKKyNkZWZpbmUJVG5fUEVSX0lOVF9DQVBfTUFTSwkJKDB4MDAxMFVMKQorI2RlZmluZQlUbl9UWVBFX0NORl9NQVNLCQkoMHgwMDA4VUwpCisjZGVmaW5lCVRuX0lOVF9FTkJfQ05GX01BU0sJCSgweDAwMDRVTCkKKyNkZWZpbmUJVG5fSU5UX1RZUEVfQ05GX01BU0sJCSgweDAwMDJVTCkKKworLyoKKyAqIFRpbWVyIEZTQiBJbnRlcnJ1cHQgUm91dGUgUmVnaXN0ZXIKKyAqLworCisjZGVmaW5lCVRuX0ZTQl9JTlRfQUREUl9NQVNLCQkoMHhmZmZmZmZmZjAwMDAwMDAwVUxMKQorI2RlZmluZQlUbl9GU0JfSU5UX0FERFJfU0hJRlQJCSgzMlVMKQorI2RlZmluZQlUbl9GU0JfSU5UX1ZBTF9NQVNLCQkoMHgwMDAwMDAwMGZmZmZmZmZmVUxMKQorCitzdHJ1Y3QgaHBldF9pbmZvIHsKKwl1bnNpZ25lZCBsb25nIGhpX2lyZXFmcmVxOwkvKiBIeiAqLworCXVuc2lnbmVkIGxvbmcgaGlfZmxhZ3M7CS8qIGluZm9ybWF0aW9uICovCisJdW5zaWduZWQgc2hvcnQgaGlfaHBldDsKKwl1bnNpZ25lZCBzaG9ydCBoaV90aW1lcjsKK307CisKKyNkZWZpbmUJSFBFVF9JTkZPX1BFUklPRElDCTB4MDAwMQkvKiB0aW1lciBpcyBwZXJpb2RpYyAqLworCisjZGVmaW5lCUhQRVRfSUVfT04JX0lPKCdoJywgMHgwMSkJLyogaW50ZXJydXB0IG9uICovCisjZGVmaW5lCUhQRVRfSUVfT0ZGCV9JTygnaCcsIDB4MDIpCS8qIGludGVycnVwdCBvZmYgKi8KKyNkZWZpbmUJSFBFVF9JTkZPCV9JT1IoJ2gnLCAweDAzLCBzdHJ1Y3QgaHBldF9pbmZvKQorI2RlZmluZQlIUEVUX0VQSQlfSU8oJ2gnLCAweDA0KQkvKiBlbmFibGUgcGVyaW9kaWMgKi8KKyNkZWZpbmUJSFBFVF9EUEkJX0lPKCdoJywgMHgwNSkJLyogZGlzYWJsZSBwZXJpb2RpYyAqLworI2RlZmluZQlIUEVUX0lSUUZSRVEJX0lPVygnaCcsIDB4NiwgdW5zaWduZWQgbG9uZykJLyogSVJRRlJFUSB1c2VjICovCisKKy8qCisgKiBleHBvcnRlZCBpbnRlcmZhY2VzCisgKi8KKworc3RydWN0IGhwZXRfdGFzayB7CisJdm9pZCAoKmh0X2Z1bmMpICh2b2lkICopOworCXZvaWQgKmh0X2RhdGE7CisJdm9pZCAqaHRfb3BhcXVlOworfTsKKworc3RydWN0IGhwZXRfZGF0YSB7CisJdW5zaWduZWQgbG9uZyBoZF9waHlzX2FkZHJlc3M7CisJdm9pZCBfX2lvbWVtICpoZF9hZGRyZXNzOworCXVuc2lnbmVkIHNob3J0IGhkX25pcnFzOworCXVuc2lnbmVkIHNob3J0IGhkX2ZsYWdzOworCXVuc2lnbmVkIGludCBoZF9zdGF0ZTsJLyogdGltZXIgYWxsb2NhdGVkICovCisJdW5zaWduZWQgaW50IGhkX2lycVtIUEVUX01BWF9USU1FUlNdOworfTsKKworI2RlZmluZQlIUEVUX0RBVEFfUExBVEZPUk0JMHgwMDAxCS8qIHBsYXRmb3JtIGNhbGwgdG8gaHBldF9hbGxvYyAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgaHBldF9yZXNlcnZlX3RpbWVyKHN0cnVjdCBocGV0X2RhdGEgKmhkLCBpbnQgdGltZXIpCit7CisJaGQtPmhkX3N0YXRlIHw9ICgxIDw8IHRpbWVyKTsKKwlyZXR1cm47Cit9CisKK2ludCBocGV0X2FsbG9jKHN0cnVjdCBocGV0X2RhdGEgKik7CitpbnQgaHBldF9yZWdpc3RlcihzdHJ1Y3QgaHBldF90YXNrICosIGludCk7CitpbnQgaHBldF91bnJlZ2lzdGVyKHN0cnVjdCBocGV0X3Rhc2sgKik7CitpbnQgaHBldF9jb250cm9sKHN0cnVjdCBocGV0X3Rhc2sgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTsKKworI2VuZGlmCQkJCS8qICFfX0hQRVRfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ocGZzX2ZzLmggYi9pbmNsdWRlL2xpbnV4L2hwZnNfZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTAyOGRkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9ocGZzX2ZzLmgKQEAgLTAsMCArMSw4IEBACisjaWZuZGVmIF9MSU5VWF9IUEZTX0ZTX0gKKyNkZWZpbmUgX0xJTlVYX0hQRlNfRlNfSAorCisvKiBIUEZTIG1hZ2ljIG51bWJlciAod29yZCAwIG9mIGJsb2NrIDE2KSAqLworCisjZGVmaW5lIEhQRlNfU1VQRVJfTUFHSUMgMHhmOTk1ZTg0OQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU0NTY3NgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oCkBAIC0wLDAgKzEsMTQyIEBACisjaWZuZGVmIF9MSU5VWF9IVUdFVExCX0gKKyNkZWZpbmUgX0xJTlVYX0hVR0VUTEJfSAorCisjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQorCisjaW5jbHVkZSA8bGludXgvbWVtcG9saWN5Lmg+CisKK3N0cnVjdCBjdGxfdGFibGU7CisKK3N0YXRpYyBpbmxpbmUgaW50IGlzX3ZtX2h1Z2V0bGJfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlyZXR1cm4gdm1hLT52bV9mbGFncyAmIFZNX0hVR0VUTEI7Cit9CisKK2ludCBodWdldGxiX3N5c2N0bF9oYW5kbGVyKHN0cnVjdCBjdGxfdGFibGUgKiwgaW50LCBzdHJ1Y3QgZmlsZSAqLCB2b2lkIF9fdXNlciAqLCBzaXplX3QgKiwgbG9mZl90ICopOworaW50IGNvcHlfaHVnZXRsYl9wYWdlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKiwgc3RydWN0IG1tX3N0cnVjdCAqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7CitpbnQgZm9sbG93X2h1Z2V0bGJfcGFnZShzdHJ1Y3QgbW1fc3RydWN0ICosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCBzdHJ1Y3QgcGFnZSAqKiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqLCB1bnNpZ25lZCBsb25nICosIGludCAqLCBpbnQpOwordm9pZCB6YXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwordm9pZCB1bm1hcF9odWdlcGFnZV9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CitpbnQgaHVnZXRsYl9wcmVmYXVsdChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7CitpbnQgaHVnZXRsYl9yZXBvcnRfbWVtaW5mbyhjaGFyICopOworaW50IGh1Z2V0bGJfcmVwb3J0X25vZGVfbWVtaW5mbyhpbnQsIGNoYXIgKik7CitpbnQgaXNfaHVnZXBhZ2VfbWVtX2Vub3VnaChzaXplX3QpOwordW5zaWduZWQgbG9uZyBodWdldGxiX3RvdGFsX3BhZ2VzKHZvaWQpOworc3RydWN0IHBhZ2UgKmZvbGxvd19odWdlX2FkZHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKKwkJCSAgICAgIGludCB3cml0ZSk7CitzdHJ1Y3QgcGFnZSAqZm9sbG93X2h1Z2VfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCisJCQkJcG1kX3QgKnBtZCwgaW50IHdyaXRlKTsKK2ludCBpc19hbGlnbmVkX2h1Z2VwYWdlX3JhbmdlKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4pOworaW50IHBtZF9odWdlKHBtZF90IHBtZCk7CitzdHJ1Y3QgcGFnZSAqYWxsb2NfaHVnZV9wYWdlKHZvaWQpOwordm9pZCBmcmVlX2h1Z2VfcGFnZShzdHJ1Y3QgcGFnZSAqKTsKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWF4X2h1Z2VfcGFnZXM7CitleHRlcm4gY29uc3QgdW5zaWduZWQgbG9uZyBodWdldGxiX3plcm8sIGh1Z2V0bGJfaW5maW5pdHk7CitleHRlcm4gaW50IHN5c2N0bF9odWdldGxiX3NobV9ncm91cDsKKworI2lmbmRlZiBBUkNIX0hBU19IVUdFUEFHRV9PTkxZX1JBTkdFCisjZGVmaW5lIGlzX2h1Z2VwYWdlX29ubHlfcmFuZ2UobW0sIGFkZHIsIGxlbikJMAorI2RlZmluZSBodWdldGxiX2ZyZWVfcGd0YWJsZXModGxiLCBwcmV2LCBzdGFydCwgZW5kKSBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKworI2lmbmRlZiBBUkNIX0hBU19QUkVQQVJFX0hVR0VQQUdFX1JBTkdFCisjZGVmaW5lIHByZXBhcmVfaHVnZXBhZ2VfcmFuZ2UoYWRkciwgbGVuKQlcCisJaXNfYWxpZ25lZF9odWdlcGFnZV9yYW5nZShhZGRyLCBsZW4pCisjZWxzZQoraW50IHByZXBhcmVfaHVnZXBhZ2VfcmFuZ2UodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbik7CisjZW5kaWYKKworI2Vsc2UgLyogIUNPTkZJR19IVUdFVExCX1BBR0UgKi8KKworc3RhdGljIGlubGluZSBpbnQgaXNfdm1faHVnZXRsYl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXJldHVybiAwOworfQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfdG90YWxfcGFnZXModm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBmb2xsb3dfaHVnZXRsYl9wYWdlKG0sdixwLHZzLGEsYixpKQkoeyBCVUcoKTsgMDsgfSkKKyNkZWZpbmUgZm9sbG93X2h1Z2VfYWRkcihtbSwgYWRkciwgd3JpdGUpCUVSUl9QVFIoLUVJTlZBTCkKKyNkZWZpbmUgY29weV9odWdldGxiX3BhZ2VfcmFuZ2Uoc3JjLCBkc3QsIHZtYSkJKHsgQlVHKCk7IDA7IH0pCisjZGVmaW5lIGh1Z2V0bGJfcHJlZmF1bHQobWFwcGluZywgdm1hKQkJKHsgQlVHKCk7IDA7IH0pCisjZGVmaW5lIHphcF9odWdlcGFnZV9yYW5nZSh2bWEsIHN0YXJ0LCBsZW4pCUJVRygpCisjZGVmaW5lIHVubWFwX2h1Z2VwYWdlX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCkJQlVHKCkKKyNkZWZpbmUgaXNfaHVnZXBhZ2VfbWVtX2Vub3VnaChzaXplKQkJMAorI2RlZmluZSBodWdldGxiX3JlcG9ydF9tZW1pbmZvKGJ1ZikJCTAKKyNkZWZpbmUgaHVnZXRsYl9yZXBvcnRfbm9kZV9tZW1pbmZvKG4sIGJ1ZikJMAorI2RlZmluZSBmb2xsb3dfaHVnZV9wbWQobW0sIGFkZHIsIHBtZCwgd3JpdGUpCU5VTEwKKyNkZWZpbmUgaXNfYWxpZ25lZF9odWdlcGFnZV9yYW5nZShhZGRyLCBsZW4pCTAKKyNkZWZpbmUgcHJlcGFyZV9odWdlcGFnZV9yYW5nZShhZGRyLCBsZW4pCSgtRUlOVkFMKQorI2RlZmluZSBwbWRfaHVnZSh4KQkwCisjZGVmaW5lIGlzX2h1Z2VwYWdlX29ubHlfcmFuZ2UobW0sIGFkZHIsIGxlbikJMAorI2RlZmluZSBodWdldGxiX2ZyZWVfcGd0YWJsZXModGxiLCBwcmV2LCBzdGFydCwgZW5kKSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGFsbG9jX2h1Z2VfcGFnZSgpCQkJKHsgTlVMTDsgfSkKKyNkZWZpbmUgZnJlZV9odWdlX3BhZ2UocCkJCQkoeyAodm9pZCkocCk7IEJVRygpOyB9KQorCisjaWZuZGVmIEhQQUdFX01BU0sKKyNkZWZpbmUgSFBBR0VfTUFTSwkwCQkvKiBLZWVwIHRoZSBjb21waWxlciBoYXBweSAqLworI2RlZmluZSBIUEFHRV9TSVpFCTAKKyNlbmRpZgorCisjZW5kaWYgLyogIUNPTkZJR19IVUdFVExCX1BBR0UgKi8KKworI2lmZGVmIENPTkZJR19IVUdFVExCRlMKK3N0cnVjdCBodWdldGxiZnNfY29uZmlnIHsKKwl1aWRfdCAgIHVpZDsKKwlnaWRfdCAgIGdpZDsKKwl1bW9kZV90IG1vZGU7CisJbG9uZwlucl9ibG9ja3M7CisJbG9uZwlucl9pbm9kZXM7Cit9OworCitzdHJ1Y3QgaHVnZXRsYmZzX3NiX2luZm8geworCWxvbmcJbWF4X2Jsb2NrczsgICAvKiBibG9ja3MgYWxsb3dlZCAqLworCWxvbmcJZnJlZV9ibG9ja3M7ICAvKiBibG9ja3MgZnJlZSAqLworCWxvbmcJbWF4X2lub2RlczsgICAvKiBpbm9kZXMgYWxsb3dlZCAqLworCWxvbmcJZnJlZV9pbm9kZXM7ICAvKiBpbm9kZXMgZnJlZSAqLworCXNwaW5sb2NrX3QJc3RhdF9sb2NrOworfTsKKworCitzdHJ1Y3QgaHVnZXRsYmZzX2lub2RlX2luZm8geworCXN0cnVjdCBzaGFyZWRfcG9saWN5IHBvbGljeTsKKwlzdHJ1Y3QgaW5vZGUgdmZzX2lub2RlOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgaHVnZXRsYmZzX2lub2RlX2luZm8gKkhVR0VUTEJGU19JKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihpbm9kZSwgc3RydWN0IGh1Z2V0bGJmc19pbm9kZV9pbmZvLCB2ZnNfaW5vZGUpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBodWdldGxiZnNfc2JfaW5mbyAqSFVHRVRMQkZTX1NCKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJcmV0dXJuIHNiLT5zX2ZzX2luZm87Cit9CisKK2V4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGh1Z2V0bGJmc19maWxlX29wZXJhdGlvbnM7CitleHRlcm4gc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGh1Z2V0bGJfdm1fb3BzOworc3RydWN0IGZpbGUgKmh1Z2V0bGJfemVyb19zZXR1cChzaXplX3QpOworaW50IGh1Z2V0bGJfZ2V0X3F1b3RhKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKTsKK3ZvaWQgaHVnZXRsYl9wdXRfcXVvdGEoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpOworCitzdGF0aWMgaW5saW5lIGludCBpc19maWxlX2h1Z2VwYWdlcyhzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gZmlsZS0+Zl9vcCA9PSAmaHVnZXRsYmZzX2ZpbGVfb3BlcmF0aW9uczsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldF9maWxlX2h1Z2VwYWdlcyhzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlmaWxlLT5mX29wID0gJmh1Z2V0bGJmc19maWxlX29wZXJhdGlvbnM7Cit9CisjZWxzZSAvKiAhQ09ORklHX0hVR0VUTEJGUyAqLworCisjZGVmaW5lIGlzX2ZpbGVfaHVnZXBhZ2VzKGZpbGUpCQkwCisjZGVmaW5lIHNldF9maWxlX2h1Z2VwYWdlcyhmaWxlKQlCVUcoKQorI2RlZmluZSBodWdldGxiX3plcm9fc2V0dXAoc2l6ZSkJRVJSX1BUUigtRU5PU1lTKQorCisjZW5kaWYgLyogIUNPTkZJR19IVUdFVExCRlMgKi8KKworI2VuZGlmIC8qIF9MSU5VWF9IVUdFVExCX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHlzZG5faWYuaCBiL2luY2x1ZGUvbGludXgvaHlzZG5faWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDIzNmFlMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvaHlzZG5faWYuaApAQCAtMCwwICsxLDMzIEBACisvKiAkSWQ6IGh5c2RuX2lmLmgsdiAxLjEuOC4zIDIwMDEvMDkvMjMgMjI6MjU6MDUga2FpIEV4cCAkCisgKgorICogTGludXggZHJpdmVyIGZvciBIWVNETiBjYXJkcworICogaW9jdGwgZGVmaW5pdGlvbnMgc2hhcmVkIGJ5IGh5bmV0bWdyIGFuZCBkcml2ZXIuCisgKgorICogQXV0aG9yICAgIFdlcm5lciBDb3JuZWxpdXMgKHdlcm5lckB0aXRyby5kZSkgZm9yIEh5cGVyY29wZSBHbWJICisgKiBDb3B5cmlnaHQgMTk5OSBieSBXZXJuZXIgQ29ybmVsaXVzICh3ZXJuZXJAdGl0cm8uZGUpCisgKgorICogVGhpcyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSB0ZXJtcworICogb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KKyAqCisgKi8KKworLyoqKioqKioqKioqKioqKiovCisvKiBlcnJvciB2YWx1ZXMgKi8KKy8qKioqKioqKioqKioqKioqLworI2RlZmluZSBFUlJfTk9ORSAgICAgICAgICAgICAwIC8qIG5vIGVycm9yIG9jY3VycmVkICovCisjZGVmaW5lIEVSUl9BTFJFQURZX0JPT1QgIDEwMDAgLyogd2UgYXJlIGFscmVhZHkgYm9vdGluZyAqLworI2RlZmluZSBFUE9GX0JBRF9NQUdJQyAgICAxMDAxIC8qIGJhZCBtYWdpYyBpbiBQT0YgaGVhZGVyICovCisjZGVmaW5lIEVSUl9CT0FSRF9EUFJBTSAgIDEwMDIgLyogYm9hcmQgRFBSQU0gZmFpbGVkICovCisjZGVmaW5lIEVQT0ZfSU5URVJOQUwgICAgIDEwMDMgLyogaW50ZXJuYWwgUE9GIGhhbmRsZXIgZXJyb3IgKi8KKyNkZWZpbmUgRVBPRl9CQURfSU1HX1NJWkUgMTAwNCAvKiBQT0YgYm9vdCBpbWFnZSBzaXplIGludmFsaWQgKi8KKyNkZWZpbmUgRVJSX0JPT1RJTUdfRkFJTCAgMTAwNSAvKiAxLiBzdGFnZSBib290IGltYWdlIGRpZCBub3Qgc3RhcnQgKi8KKyNkZWZpbmUgRVJSX0JPT1RTRVFfRkFJTCAgMTAwNiAvKiAyLiBzdGFnZSBib290IHNlcSBoYW5kc2hha2UgdGltZW91dCAqLworI2RlZmluZSBFUlJfUE9GX1RJTUVPVVQgICAxMDA3IC8qIHRpbWVvdXQgd2FpdGluZyBmb3IgY2FyZCBwb2YgcmVhZHkgKi8KKyNkZWZpbmUgRVJSX05PVF9CT09URUQgICAgMTAwOCAvKiBvcGVyYXRpb24gb25seSBhbGxvd2VkIHdoZW4gYm9vdGVkICovCisjZGVmaW5lIEVSUl9DT05GX0xPTkcgICAgIDEwMDkgLyogY29uZiBsaW5lIGlzIHRvbyBsb25nICovIAorI2RlZmluZSBFUlJfSU5WX0NIQU4gICAgICAxMDEwIC8qIGludmFsaWQgY2hhbm5lbCBudW1iZXIgKi8gCisjZGVmaW5lIEVSUl9BU1lOQ19USU1FICAgIDEwMTEgLyogdGltZW91dCBzZW5kaW5nIGFzeW5jIGRhdGEgKi8gCisKKworCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaTJjLWFsZ28tYml0LmggYi9pbmNsdWRlL2xpbnV4L2kyYy1hbGdvLWJpdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMDkwNDQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2kyYy1hbGdvLWJpdC5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIGkyYy1hbGdvLWJpdC5oIGkyYyBkcml2ZXIgYWxnb3JpdGhtcyBmb3IgYml0LXNoaWZ0IGFkYXB0ZXJzICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICAgQ29weXJpZ2h0IChDKSAxOTk1LTk5IFNpbW9uIEcuIFZvZ2wKKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLiAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBXaXRoIHNvbWUgY2hhbmdlcyBmcm9tIEt59nN0aSBN5Gxra2kgPGttYWxra2lAY2MuaHV0LmZpPiBhbmQgZXZlbgorICAgRnJvZG8gTG9vaWphYXJkIDxmcm9kb2xAZGRzLm5sPiAqLworCisvKiAkSWQ6IGkyYy1hbGdvLWJpdC5oLHYgMS4xMCAyMDAzLzAxLzIxIDA4OjA4OjE2IGttYWxra2kgRXhwICQgKi8KKworI2lmbmRlZiBfTElOVVhfSTJDX0FMR09fQklUX0gKKyNkZWZpbmUgX0xJTlVYX0kyQ19BTEdPX0JJVF9ICisKKy8qIC0tLSBEZWZpbmVzIGZvciBiaXQtYWRhcHRlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCSovCisvKgorICogVGhpcyBzdHJ1Y3QgY29udGFpbnMgdGhlIGh3LWRlcGVuZGVudCBmdW5jdGlvbnMgb2YgYml0LXN0eWxlIGFkYXB0ZXJzIHRvIAorICogbWFuaXB1bGF0ZSB0aGUgbGluZSBzdGF0ZXMsIGFuZCB0byBpbml0IGFueSBody1zcGVjaWZpYyBmZWF0dXJlcy4gVGhpcyBpcworICogb25seSB1c2VkIGlmIHlvdSBoYXZlIG1vcmUgdGhhbiBvbmUgaHctdHlwZSBvZiBhZGFwdGVyIHJ1bm5pbmcuIAorICovCitzdHJ1Y3QgaTJjX2FsZ29fYml0X2RhdGEgeworCXZvaWQgKmRhdGE7CQkvKiBwcml2YXRlIGRhdGEgZm9yIGxvd2xldmVsIHJvdXRpbmVzICovCisJdm9pZCAoKnNldHNkYSkgKHZvaWQgKmRhdGEsIGludCBzdGF0ZSk7CisJdm9pZCAoKnNldHNjbCkgKHZvaWQgKmRhdGEsIGludCBzdGF0ZSk7CisJaW50ICAoKmdldHNkYSkgKHZvaWQgKmRhdGEpOworCWludCAgKCpnZXRzY2wpICh2b2lkICpkYXRhKTsKKworCS8qIGxvY2FsIHNldHRpbmdzICovCisJaW50IHVkZWxheTsJCS8qIGhhbGYtY2xvY2stY3ljbGUgdGltZSBpbiBtaWNyb3NlY3MgKi8KKwkJCQkvKiBpLmUuIGNsb2NrIGlzICg1MDAgLyB1ZGVsYXkpIEtIeiAqLworCWludCBtZGVsYXk7CQkvKiBpbiBtaWxsaXNlY3MsIHVudXNlZCAqLworCWludCB0aW1lb3V0OwkJLyogaW4gamlmZmllcyAqLworfTsKKworI2RlZmluZSBJMkNfQklUX0FEQVBfTUFYCTE2CisKK2ludCBpMmNfYml0X2FkZF9idXMoc3RydWN0IGkyY19hZGFwdGVyICopOworaW50IGkyY19iaXRfZGVsX2J1cyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKik7CisKKyNlbmRpZiAvKiBfTElOVVhfSTJDX0FMR09fQklUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaTJjLWFsZ28taXRlLmggYi9pbmNsdWRlL2xpbnV4L2kyYy1hbGdvLWl0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2YThiODkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2kyYy1hbGdvLWl0ZS5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIGkyYy1hbGdvLWl0ZS5oIGkyYyBkcml2ZXIgYWxnb3JpdGhtcyBmb3IgSVRFIElJQyBhZGFwdGVycyAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICAgQ29weXJpZ2h0IChDKSAxOTk1LTk3IFNpbW9uIEcuIFZvZ2wKKyAgICAgICAgICAgICAgICAgICAxOTk4LTk5IEhhbnMgQmVyZ2x1bmQKKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLiAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBXaXRoIHNvbWUgY2hhbmdlcyBmcm9tIEt59nN0aSBN5Gxra2kgPGttYWxra2lAY2MuaHV0LmZpPiBhbmQgZXZlbgorICAgRnJvZG8gTG9vaWphYXJkIDxmcm9kb2xAZGRzLm5sPiAqLworCisvKiBNb2RpZmljYXRpb25zIGJ5IE1vbnRhVmlzdGEgU29mdHdhcmUsIDIwMDEKKyAgIENoYW5nZXMgbWFkZSB0byBzdXBwb3J0IHRoZSBJVEUgSUlDIHBlcmlwaGVyYWwgKi8KKworCisjaWZuZGVmIEkyQ19BTEdPX0lURV9ICisjZGVmaW5lIEkyQ19BTEdPX0lURV9IIDEKKworI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorCisvKiBFeGFtcGxlIG9mIGEgc2VxdWVudGlhbCByZWFkIHJlcXVlc3Q6CisJc3RydWN0IGkyY19paWNfbXNnIHNfbXNnOyAKKworCXNfbXNnLmFkZHI9ZGV2aWNlX2FkZHJlc3M7CisJc19tc2cubGVuPWxlbmd0aDsKKwlzX21zZy5idWY9YnVmZmVyOworCXNfbXNnLndhZGRyPXdvcmRfYWRkcmVzczsKKwlpb2N0bChmaWxlLEkyQ19TUkVBRCwgJnNfbXNnKTsKKyAqLworI2RlZmluZSBJMkNfU1JFQUQJMHg3ODAJLyogU1JFQUQgaW9jdGwgY29tbWFuZCAqLworCitzdHJ1Y3QgaTJjX2lpY19tc2cgeworCV9fdTE2IGFkZHI7CS8qIGRldmljZSBhZGRyZXNzICovCisJX191MTYgd2FkZHI7CS8qIHdvcmQgYWRkcmVzcyAqLworCXNob3J0IGxlbjsJLyogbXNnIGxlbmd0aCAqLworCWNoYXIgKmJ1ZjsJLyogcG9pbnRlciB0byBtc2cgZGF0YSAqLworfTsKKworc3RydWN0IGkyY19hbGdvX2lpY19kYXRhIHsKKwl2b2lkICpkYXRhOwkJLyogcHJpdmF0ZSBkYXRhIGZvciBsb2xldmVsIHJvdXRpbmVzCSovCisJdm9pZCAoKnNldGlpYykgKHZvaWQgKmRhdGEsIGludCBjdGwsIGludCB2YWwpOworCWludCAgKCpnZXRpaWMpICh2b2lkICpkYXRhLCBpbnQgY3RsKTsKKwlpbnQgICgqZ2V0b3duKSAodm9pZCAqZGF0YSk7CisJaW50ICAoKmdldGNsb2NrKSAodm9pZCAqZGF0YSk7CisJdm9pZCAoKndhaXRmb3JwaW4pICh2b2lkKTsgICAgIAorCisJLyogbG9jYWwgc2V0dGluZ3MgKi8KKwlpbnQgdWRlbGF5OworCWludCBtZGVsYXk7CisJaW50IHRpbWVvdXQ7Cit9OworCitpbnQgaTJjX2lpY19hZGRfYnVzKHN0cnVjdCBpMmNfYWRhcHRlciAqKTsKK2ludCBpMmNfaWljX2RlbF9idXMoc3RydWN0IGkyY19hZGFwdGVyICopOworCisjZW5kaWYgLyogSTJDX0FMR09fSVRFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaTJjLWFsZ28tcGNhLmggYi9pbmNsdWRlL2xpbnV4L2kyYy1hbGdvLXBjYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0MWI3ODYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2kyYy1hbGdvLXBjYS5oCkBAIC0wLDAgKzEsMTcgQEAKKyNpZm5kZWYgX0xJTlVYX0kyQ19BTEdPX1BDQV9ICisjZGVmaW5lIF9MSU5VWF9JMkNfQUxHT19QQ0FfSAorCitzdHJ1Y3QgaTJjX2FsZ29fcGNhX2RhdGEgeworCWludCAgKCpnZXRfb3duKQkJCShzdHJ1Y3QgaTJjX2FsZ29fcGNhX2RhdGEgKmFkYXApOyAvKiBPYnRhaW4gb3duIGFkZHJlc3MgKi8KKwlpbnQgICgqZ2V0X2Nsb2NrKQkJKHN0cnVjdCBpMmNfYWxnb19wY2FfZGF0YSAqYWRhcCk7CisJdm9pZCAoKndyaXRlX2J5dGUpCQkoc3RydWN0IGkyY19hbGdvX3BjYV9kYXRhICphZGFwLCBpbnQgcmVnLCBpbnQgdmFsKTsKKwlpbnQgICgqcmVhZF9ieXRlKQkJKHN0cnVjdCBpMmNfYWxnb19wY2FfZGF0YSAqYWRhcCwgaW50IHJlZyk7CisJaW50ICAoKndhaXRfZm9yX2ludGVycnVwdCkJKHN0cnVjdCBpMmNfYWxnb19wY2FfZGF0YSAqYWRhcCk7Cit9OworCisjZGVmaW5lIEkyQ19QQ0FfQURBUF9NQVgJMTYKKworaW50IGkyY19wY2FfYWRkX2J1cyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKik7CitpbnQgaTJjX3BjYV9kZWxfYnVzKHN0cnVjdCBpMmNfYWRhcHRlciAqKTsKKworI2VuZGlmIC8qIF9MSU5VWF9JMkNfQUxHT19QQ0FfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pMmMtYWxnby1wY2YuaCBiL2luY2x1ZGUvbGludXgvaTJjLWFsZ28tcGNmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE1MDg1NgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvaTJjLWFsZ28tcGNmLmgKQEAgLTAsMCArMSw0OSBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogYWRhcC1wY2YuaCBpMmMgZHJpdmVyIGFsZ29yaXRobXMgZm9yIFBDRjg1ODQgYWRhcHRlcnMgICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogICBDb3B5cmlnaHQgKEMpIDE5OTUtOTcgU2ltb24gRy4gVm9nbAorICAgICAgICAgICAgICAgICAgIDE5OTgtOTkgSGFucyBCZXJnbHVuZAorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIFdpdGggc29tZSBjaGFuZ2VzIGZyb20gS3n2c3RpIE3kbGtraSA8a21hbGtraUBjYy5odXQuZmk+IGFuZCBldmVuCisgICBGcm9kbyBMb29pamFhcmQgPGZyb2RvbEBkZHMubmw+ICovCisKKy8qICRJZDogaTJjLWFsZ28tcGNmLmgsdiAxLjggMjAwMy8wMS8yMSAwODowODoxNiBrbWFsa2tpIEV4cCAkICovCisKKyNpZm5kZWYgX0xJTlVYX0kyQ19BTEdPX1BDRl9ICisjZGVmaW5lIF9MSU5VWF9JMkNfQUxHT19QQ0ZfSAorCitzdHJ1Y3QgaTJjX2FsZ29fcGNmX2RhdGEgeworCXZvaWQgKmRhdGE7CQkvKiBwcml2YXRlIGRhdGEgZm9yIGxvbGV2ZWwgcm91dGluZXMJKi8KKwl2b2lkICgqc2V0cGNmKSAodm9pZCAqZGF0YSwgaW50IGN0bCwgaW50IHZhbCk7CisJaW50ICAoKmdldHBjZikgKHZvaWQgKmRhdGEsIGludCBjdGwpOworCWludCAgKCpnZXRvd24pICh2b2lkICpkYXRhKTsKKwlpbnQgICgqZ2V0Y2xvY2spICh2b2lkICpkYXRhKTsKKwl2b2lkICgqd2FpdGZvcnBpbikgKHZvaWQpOyAgICAgCisKKwkvKiBsb2NhbCBzZXR0aW5ncyAqLworCWludCB1ZGVsYXk7CisJaW50IG1kZWxheTsKKwlpbnQgdGltZW91dDsKK307CisKKyNkZWZpbmUgSTJDX1BDRl9BREFQX01BWAkxNgorCitpbnQgaTJjX3BjZl9hZGRfYnVzKHN0cnVjdCBpMmNfYWRhcHRlciAqKTsKK2ludCBpMmNfcGNmX2RlbF9idXMoc3RydWN0IGkyY19hZGFwdGVyICopOworCisjZW5kaWYgLyogX0xJTlVYX0kyQ19BTEdPX1BDRl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2kyYy1hbGdvLXNnaS5oIGIvaW5jbHVkZS9saW51eC9pMmMtYWxnby1zZ2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTAxMTNkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9pMmMtYWxnby1zZ2kuaApAQCAtMCwwICsxLDI3IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMyBMYWRpc2xhdiBNaWNobCA8bGFkaXNAbGludXgtbWlwcy5vcmc+CisgKi8KKworI2lmbmRlZiBJMkNfQUxHT19TR0lfSAorI2RlZmluZSBJMkNfQUxHT19TR0lfSCAxCisKKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKworc3RydWN0IGkyY19hbGdvX3NnaV9kYXRhIHsKKwl2b2lkICpkYXRhOwkvKiBwcml2YXRlIGRhdGEgZm9yIGxvd2xldmVsIHJvdXRpbmVzICovCisJdW5zaWduZWQgKCpnZXRjdHJsKSh2b2lkICpkYXRhKTsKKwl2b2lkICgqc2V0Y3RybCkodm9pZCAqZGF0YSwgdW5zaWduZWQgdmFsKTsKKwl1bnNpZ25lZCAoKnJkYXRhKSh2b2lkICpkYXRhKTsKKwl2b2lkICgqd2RhdGEpKHZvaWQgKmRhdGEsIHVuc2lnbmVkIHZhbCk7CisKKwlpbnQgeGZlcl90aW1lb3V0OworCWludCBhY2tfdGltZW91dDsKK307CisKK2ludCBpMmNfc2dpX2FkZF9idXMoc3RydWN0IGkyY19hZGFwdGVyICopOworaW50IGkyY19zZ2lfZGVsX2J1cyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKik7CisKKyNlbmRpZiAvKiBJMkNfQUxHT19TR0lfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pMmMtYWxnby1zaWJ5dGUuaCBiL2luY2x1ZGUvbGludXgvaTJjLWFsZ28tc2lieXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM5MTRkZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvaTJjLWFsZ28tc2lieXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMSwyMDAyLDIwMDMgQnJvYWRjb20gQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIEkyQ19BTEdPX1NJQllURV9ICisjZGVmaW5lIEkyQ19BTEdPX1NJQllURV9IIDEKKworI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorCitzdHJ1Y3QgaTJjX2FsZ29fc2lieXRlX2RhdGEgeworCXZvaWQgKmRhdGE7CQkvKiBwcml2YXRlIGRhdGEgKi8KKyAgICAgICAgaW50ICAgYnVzOwkJLyogd2hpY2ggYnVzICovCisgICAgICAgIHZvaWQgKnJlZ19iYXNlOwkJLyogQ1NSIGJhc2UgKi8KK307CisKK2ludCBpMmNfc2lieXRlX2FkZF9idXMoc3RydWN0IGkyY19hZGFwdGVyICosIGludCBzcGVlZCk7CitpbnQgaTJjX3NpYnl0ZV9kZWxfYnVzKHN0cnVjdCBpMmNfYWRhcHRlciAqKTsKKworI2VuZGlmIC8qIEkyQ19BTEdPX1NJQllURV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2kyYy1kZXYuaCBiL2luY2x1ZGUvbGludXgvaTJjLWRldi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyMjgyMzAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2kyYy1kZXYuaApAQCAtMCwwICsxLDQ4IEBACisvKgorICAgIGkyYy1kZXYuaCAtIGkyYy1idXMgZHJpdmVyLCBjaGFyIGRldmljZSBpbnRlcmZhY2UKKworICAgIENvcHlyaWdodCAoQykgMTk5NS05NyBTaW1vbiBHLiBWb2dsCisgICAgQ29weXJpZ2h0IChDKSAxOTk4LTk5IEZyb2RvIExvb2lqYWFyZCA8ZnJvZG9sQGRkcy5ubD4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorKi8KKworLyogJElkOiBpMmMtZGV2LmgsdiAxLjEzIDIwMDMvMDEvMjEgMDg6MDg6MTYga21hbGtraSBFeHAgJCAqLworCisjaWZuZGVmIF9MSU5VWF9JMkNfREVWX0gKKyNkZWZpbmUgX0xJTlVYX0kyQ19ERVZfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyogU29tZSBJT0NUTCBjb21tYW5kcyBhcmUgZGVmaW5lZCBpbiA8bGludXgvaTJjLmg+ICovCisvKiBOb3RlOiAxMC1iaXQgYWRkcmVzc2VzIGFyZSBOT1Qgc3VwcG9ydGVkISAqLworCisvKiBUaGlzIGlzIHRoZSBzdHJ1Y3R1cmUgYXMgdXNlZCBpbiB0aGUgSTJDX1NNQlVTIGlvY3RsIGNhbGwgKi8KK3N0cnVjdCBpMmNfc21idXNfaW9jdGxfZGF0YSB7CisJX191OCByZWFkX3dyaXRlOworCV9fdTggY29tbWFuZDsKKwlfX3UzMiBzaXplOworCXVuaW9uIGkyY19zbWJ1c19kYXRhIF9fdXNlciAqZGF0YTsKK307CisKKy8qIFRoaXMgaXMgdGhlIHN0cnVjdHVyZSBhcyB1c2VkIGluIHRoZSBJMkNfUkRXUiBpb2N0bCBjYWxsICovCitzdHJ1Y3QgaTJjX3Jkd3JfaW9jdGxfZGF0YSB7CisJc3RydWN0IGkyY19tc2cgX191c2VyICptc2dzOwkvKiBwb2ludGVycyB0byBpMmNfbXNncyAqLworCV9fdTMyIG5tc2dzOwkJCS8qIG51bWJlciBvZiBpMmNfbXNncyAqLworfTsKKworI2RlZmluZSAgSTJDX1JEUldfSU9DVExfTUFYX01TR1MJNDIKKworI2VuZGlmIC8qIF9MSU5VWF9JMkNfREVWX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaTJjLWlkLmggYi9pbmNsdWRlL2xpbnV4L2kyYy1pZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5MjcwY2UKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2kyYy1pZC5oCkBAIC0wLDAgKzEsMzE5IEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAJCQkJCQkJCQkgICAgICovCisvKiBpMmMuaCAtIGRlZmluaXRpb25zIGZvciB0aGUgaTJjLWJ1cyBpbnRlcmZhY2UJCQkgICAgICovCisvKiAJCQkJCQkJCQkgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgIENvcHlyaWdodCAoQykgMTk5NS0xOTk5IFNpbW9uIEcuIFZvZ2wKKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgkJICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWZuZGVmIExJTlVYX0kyQ19JRF9ICisjZGVmaW5lIExJTlVYX0kyQ19JRF9ICisKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgaTJjLWJ1cyBwYWNrYWdlIGFuZCBjb250YWlucyB0aGUgaWRlbnRpZmllcgorICogdmFsdWVzIGZvciBkcml2ZXJzLCBhZGFwdGVycyBhbmQgb3RoZXIgZm9sayBwb3B1bGF0aW5nIHRoZXNlIHNlcmlhbAorICogd29ybGRzLiAKKyAqCisgKiBUaGVzZSB3aWxsIGNoYW5nZSBvZnRlbiAoaS5lLiBhZGRpdGlvbnMpICwgdGhlcmVmb3JlIHRoaXMgaGFzIGJlZW4gCisgKiBzZXBhcmF0ZWQgZnJvbSB0aGUgZnVuY3Rpb25hbCBpbnRlcmZhY2UgZGVmaW5pdGlvbnMgb2YgdGhlIGkyYyBhcGkuCisgKgorICovCisKKy8qCisgKiAtLS0tIERyaXZlciB0eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogICAgICAgZGV2aWNlIGlkIG5hbWUgKyBudW1iZXIgICAgICAgIGZ1bmN0aW9uIGRlc2NyaXB0aW9uLCBpMmMgYWRkcmVzcyhlcykKKyAqCisgKiAgUmFuZ2UgMTAwMC0xOTk5IHJhbmdlIGlzIGRlZmluZWQgaW4gc2Vuc29ycy9zZW5zb3JzLmggCisgKiAgUmFuZ2UgMHgxMDAgLSAweDFmZiBpcyBmb3IgVjRMMiBDb21tb24gQ29tcG9uZW50cyAKKyAqICBSYW5nZSAweGYwMDAgLSAweGZmZmYgaXMgcmVzZXJ2ZWQgZm9yIGxvY2FsIGV4cGVyaW1lbnRhdGlvbiwgYW5kIHNob3VsZAorICogICAgICAgIG5ldmVyIGJlIHVzZWQgaW4gb2ZmaWNpYWwgZHJpdmVycyAKKyAqLworCisjZGVmaW5lIEkyQ19EUklWRVJJRF9NU1AzNDAwCSAxCisjZGVmaW5lIEkyQ19EUklWRVJJRF9UVU5FUgkgMgorI2RlZmluZSBJMkNfRFJJVkVSSURfVklERU9URVgJIDMJLyogcGxlYXNlIHJlbmFtZQkJKi8KKyNkZWZpbmUgSTJDX0RSSVZFUklEX1REQTg0MjUJIDQJLyogc3RlcmVvIHNvdW5kIHByb2Nlc3NvcgkqLworI2RlZmluZSBJMkNfRFJJVkVSSURfVEVBNjQyMAkgNQkvKiBhdWRpbyBtYXRyaXggc3dpdGNoCQkqLworI2RlZmluZSBJMkNfRFJJVkVSSURfVEVBNjQxNUMJIDYJLyogdmlkZW8gbWF0cml4IHN3aXRjaAkJKi8KKyNkZWZpbmUgSTJDX0RSSVZFUklEX1REQTk4NDAJIDcJLyogc3RlcmVvIHNvdW5kIHByb2Nlc3NvcgkqLworI2RlZmluZSBJMkNfRFJJVkVSSURfU0FBNzExMUEJIDgJLyogdmlkZW8gaW5wdXQgcHJvY2Vzc29yCSovCisjZGVmaW5lIEkyQ19EUklWRVJJRF9TQUE1MjgxCSA5CS8qIHZpZGVvdGV4dCBkZWNvZGVyCQkqLworI2RlZmluZSBJMkNfRFJJVkVSSURfU0FBNzExMgkxMAkvKiB2aWRlbyBkZWNvZGVyLCBpbWFnZSBzY2FsZXIJKi8KKyNkZWZpbmUgSTJDX0RSSVZFUklEX1NBQTcxMjAJMTEJLyogdmlkZW8gZW5jb2RlcgkJKi8KKyNkZWZpbmUgSTJDX0RSSVZFUklEX1NBQTcxMjEJMTIJLyogdmlkZW8gZW5jb2RlcgkJKi8KKyNkZWZpbmUgSTJDX0RSSVZFUklEX1NBQTcxODVCCTEzCS8qIHZpZGVvIGVuY29kZXIJCSovCisjZGVmaW5lIEkyQ19EUklWRVJJRF9DSDcwMDMJMTQJLyogZGlnaXRhbCBwYyB0byB0diBlbmNvZGVyIAkqLworI2RlZmluZSBJMkNfRFJJVkVSSURfUENGODU3NEEJMTUJLyogaTJjIGV4cGFuZGVyIC0gOCBiaXQgaW4vb3V0CSovCisjZGVmaW5lIEkyQ19EUklWRVJJRF9QQ0Y4NTgyQwkxNgkvKiBlZXByb20JCQkqLworI2RlZmluZSBJMkNfRFJJVkVSSURfQVQyNEN4eAkxNwkvKiBlZXByb20gMS8yLzQvOC8xNiBLIAkJKi8KKyNkZWZpbmUgSTJDX0RSSVZFUklEX1RFQTYzMDAJMTgJLyogYXVkaW8gbWl4ZXIJCQkqLworI2RlZmluZSBJMkNfRFJJVkVSSURfQlQ4MjkJMTkJLyogcGMgdG8gdHYgZW5jb2RlcgkJKi8KKyNkZWZpbmUgSTJDX0RSSVZFUklEX1REQTk4NTAJMjAJLyogYXVkaW8gbWl4ZXIJCQkqLworI2RlZmluZSBJMkNfRFJJVkVSSURfVERBOTg1NQkyMQkvKiBhdWRpbyBtaXhlcgkJCSovCisjZGVmaW5lIEkyQ19EUklWRVJJRF9TQUE3MTEwCTIyCS8qIHZpZGVvIGRlY29kZXIJCSovCisjZGVmaW5lIEkyQ19EUklWRVJJRF9NR0FUVk8JMjMJLyogTWF0cm94IFRWT3V0CQkJKi8KKyNkZWZpbmUgSTJDX0RSSVZFUklEX1NBQTUyNDkJMjQJLyogU0FBNTI0OSBhbmQgY29tcGF0aWJsZXMJKi8KKyNkZWZpbmUgSTJDX0RSSVZFUklEX1BDRjg1ODMJMjUJLyogcmVhbCB0aW1lIGNsb2NrCQkqLworI2RlZmluZSBJMkNfRFJJVkVSSURfU0FCMzAzNgkyNgkvKiBTQUIzMDM2IHR1bmVyCQkqLworI2RlZmluZSBJMkNfRFJJVkVSSURfVERBNzQzMgkyNwkvKiBTdGVyZW8gc291bmQgcHJvY2Vzc29yCSovCisjZGVmaW5lIEkyQ19EUklWRVJJRF9UVk1JWEVSICAgIDI4ICAgICAgLyogTWl4ZXIgZHJpdmVyIGZvciB0diBjYXJkcyAgICAqLworI2RlZmluZSBJMkNfRFJJVkVSSURfVFZBVURJTyAgICAyOSAgICAgIC8qIEdlbmVyaWMgVFYgc291bmQgZHJpdmVyICAgICAgKi8KKyNkZWZpbmUgSTJDX0RSSVZFUklEX0RQTDM1MTggICAgMzAgICAgICAvKiBEb2xieSBkZWNvZGVyIGNoaXAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19EUklWRVJJRF9UREE5ODczICAgIDMxICAgICAgLyogVFYgc291bmQgZGVjb2RlciBjaGlwICAgICAgICAqLworI2RlZmluZSBJMkNfRFJJVkVSSURfVERBOTg3NSAgICAzMiAgICAgIC8qIFRWIHNvdW5kIGRlY29kZXIgY2hpcCAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0RSSVZFUklEX1BJQzE2QzU0X1BWOSAzMyAgICAvKiBBdWRpbyBtdXgvaXIgcmVjZWl2ZXIgICAgICAgICovCisKKyNkZWZpbmUgSTJDX0RSSVZFUklEX1NCQVRUICAgICAgMzQgICAgIC8qIFNtYXJ0IEJhdHRlcnkgRGV2aWNlCQkqLworI2RlZmluZSBJMkNfRFJJVkVSSURfU0JTICAgICAgICAzNSAgICAgLyogU0IgU3lzdGVtIE1hbmFnZXIJCSovCisjZGVmaW5lIEkyQ19EUklWRVJJRF9WRVMxODkzCTM2ICAgICAvKiBWTFNJIERWQi1TIGRlY29kZXIJCSovCisjZGVmaW5lIEkyQ19EUklWRVJJRF9WRVMxODIwCTM3ICAgICAvKiBWTFNJIERWQi1DIGRlY29kZXIJCSovCisjZGVmaW5lIEkyQ19EUklWRVJJRF9TQUE3MTEzCTM4ICAgICAvKiB2aWRlbyBkZWNvZGVyCQkJKi8KKyNkZWZpbmUgSTJDX0RSSVZFUklEX1REQTg0NDQJMzkgICAgIC8qIG9jdHVwbGUgNi1iaXQgREFDICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19EUklWRVJJRF9CVDgxOQk0MCAgICAgLyogdmlkZW8gZGVjb2RlcgkJCSovCisjZGVmaW5lIEkyQ19EUklWRVJJRF9CVDg1Ngk0MSAgICAgLyogdmlkZW8gZW5jb2RlcgkJCSovCisjZGVmaW5lIEkyQ19EUklWRVJJRF9WUFgzMjIwCTQyICAgICAvKiB2aWRlbyBkZWNvZGVyK3ZiaS92dHh0CSovCisjZGVmaW5lIEkyQ19EUklWRVJJRF9EUlAzNTEwCTQzICAgICAvKiBBRFIgZGVjb2RlciAoQXN0cmEgUmFkaW8pCSovCisjZGVmaW5lIEkyQ19EUklWRVJJRF9TUDUwNTUJNDQgICAgIC8qIFNhdGVsbGl0ZSB0dW5lcgkJKi8KKyNkZWZpbmUgSTJDX0RSSVZFUklEX1NUVjAwMzAJNDUgICAgIC8qIE11bHRpcHVycG9zZSBzd2l0Y2gJCSovCisjZGVmaW5lIEkyQ19EUklWRVJJRF9TQUE3MTA4CTQ2ICAgICAvKiB2aWRlbyBkZWNvZGVyLCBpbWFnZSBzY2FsZXIgICAqLworI2RlZmluZSBJMkNfRFJJVkVSSURfRFMxMzA3CTQ3ICAgICAvKiBEUzEzMDcgcmVhbCB0aW1lIGNsb2NrCSovCisjZGVmaW5lIEkyQ19EUklWRVJJRF9BRFY3MTc1CTQ4ICAgICAvKiBBRFYgNzE3NS83MTc2IHZpZGVvIGVuY29kZXIJKi8KKyNkZWZpbmUgSTJDX0RSSVZFUklEX1NBQTcxMTQJNDkJLyogdmlkZW8gZGVjb2RlcgkJKi8KKyNkZWZpbmUgSTJDX0RSSVZFUklEX1pSMzYxMjAJNTAgICAgIC8qIFpvcmFuIDM2MTIwIHZpZGVvIGVuY29kZXIJKi8KKyNkZWZpbmUgSTJDX0RSSVZFUklEXzI0TEMzMkEJNTEJLyogTWljcm9jaGlwIDI0TEMzMkEgMzJrIEVFUFJPTQkqLworI2RlZmluZSBJMkNfRFJJVkVSSURfU1RNNDFUMDAJNTIJLyogcmVhbCB0aW1lIGNsb2NrCQkqLworI2RlZmluZSBJMkNfRFJJVkVSSURfVURBMTM0Mgk1MwkvKiBVREExMzQyIGF1ZGlvIGNvZGVjCQkqLworI2RlZmluZSBJMkNfRFJJVkVSSURfQURWNzE3MAk1NAkvKiB2aWRlbyBlbmNvZGVyCQkqLworI2RlZmluZSBJMkNfRFJJVkVSSURfUkFERU9OCTU1CS8qIEkyQyBidXMgb24gUmFkZW9uIGJvYXJkcwkqLworI2RlZmluZSBJMkNfRFJJVkVSSURfTUFYMTYxNwk1NgkvKiB0ZW1wIHNlbnNvcgkJCSovCisjZGVmaW5lIEkyQ19EUklWRVJJRF9TQUE3MTkxCTU3CS8qIHZpZGVvIGVuY29kZXIJCSovCisjZGVmaW5lIEkyQ19EUklWRVJJRF9JTkRZQ0FNCTU4CS8qIFNHSSBJbmR5Q2FtCQkJKi8KKyNkZWZpbmUgSTJDX0RSSVZFUklEX0JUODMyCTU5CS8qIENNT1MgY2FtZXJhIHZpZGVvIHByb2Nlc3NvcgkqLworI2RlZmluZSBJMkNfRFJJVkVSSURfVERBOTg4Nwk2MAkvKiBUREE5ODh4IElGLVBMTCBkZW1vZHVsYXRvcgkqLworI2RlZmluZSBJMkNfRFJJVkVSSURfT1ZDQU1DSElQCTYxCS8qIE9tbmlWaXNpb24gQ01PUyBpbWFnZSBzZW5zLgkqLworI2RlZmluZSBJMkNfRFJJVkVSSURfVERBNzMxMwk2MgkvKiBUREE3MzEzIGF1ZGlvIHByb2Nlc3NvcgkqLworI2RlZmluZSBJMkNfRFJJVkVSSURfTUFYNjkwMAk2MwkvKiBNQVg2OTAwIHJlYWwtdGltZSBjbG9jawkqLworI2RlZmluZSBJMkNfRFJJVkVSSURfU0FBNzExNEgJNjQJLyogdmlkZW8gZGVjb2RlcgkJKi8KKworCisjZGVmaW5lIEkyQ19EUklWRVJJRF9FWFAwCTB4RjAJLyogZXhwZXJpbWVudGFsIHVzZSBpZCdzCSovCisjZGVmaW5lIEkyQ19EUklWRVJJRF9FWFAxCTB4RjEKKyNkZWZpbmUgSTJDX0RSSVZFUklEX0VYUDIJMHhGMgorI2RlZmluZSBJMkNfRFJJVkVSSURfRVhQMwkweEYzCisKKyNkZWZpbmUgSTJDX0RSSVZFUklEX0kyQ0RFVgk5MDAKKyNkZWZpbmUgSTJDX0RSSVZFUklEX0kyQ1BST0MJOTAxCisjZGVmaW5lIEkyQ19EUklWRVJJRF9BUlAgICAgICAgIDkwMiAgICAvKiBTTUJ1cyBBUlAgQ2xpZW50ICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfRFJJVkVSSURfQUxFUlQgICAgICA5MDMgICAgLyogU01CdXMgQWxlcnQgUmVzcG9uZGVyIENsaWVudCAgKi8KKworLyogSURzIC0tICAgVXNlIERSSVZFUklEcyAxMDAwLTE5OTkgZm9yIHNlbnNvcnMuIAorICAgVGhlc2Ugd2VyZSBvcmlnaW5hbGx5IGluIHNlbnNvcnMuaCBpbiB0aGUgbG1fc2Vuc29ycyBwYWNrYWdlICovCisjZGVmaW5lIEkyQ19EUklWRVJJRF9MTTc4IDEwMDIKKyNkZWZpbmUgSTJDX0RSSVZFUklEX0xNNzUgMTAwMworI2RlZmluZSBJMkNfRFJJVkVSSURfR0w1MTggMTAwNAorI2RlZmluZSBJMkNfRFJJVkVSSURfRUVQUk9NIDEwMDUKKyNkZWZpbmUgSTJDX0RSSVZFUklEX1c4Mzc4MUQgMTAwNgorI2RlZmluZSBJMkNfRFJJVkVSSURfTE04MCAxMDA3CisjZGVmaW5lIEkyQ19EUklWRVJJRF9BRE0xMDIxIDEwMDgKKyNkZWZpbmUgSTJDX0RSSVZFUklEX0FETTkyNDAgMTAwOQorI2RlZmluZSBJMkNfRFJJVkVSSURfTFRDMTcxMCAxMDEwCisjZGVmaW5lIEkyQ19EUklWRVJJRF9TSVM1NTk1IDEwMTEKKyNkZWZpbmUgSTJDX0RSSVZFUklEX0lDU1BMTCAxMDEyCisjZGVmaW5lIEkyQ19EUklWRVJJRF9CVDg2OSAxMDEzCisjZGVmaW5lIEkyQ19EUklWRVJJRF9NQVhJTElGRSAxMDE0CisjZGVmaW5lIEkyQ19EUklWRVJJRF9NQVRPUkIgMTAxNQorI2RlZmluZSBJMkNfRFJJVkVSSURfR0w1MjAgMTAxNgorI2RlZmluZSBJMkNfRFJJVkVSSURfVEhNQzUwIDEwMTcKKyNkZWZpbmUgSTJDX0RSSVZFUklEX0REQ01PTiAxMDE4CisjZGVmaW5lIEkyQ19EUklWRVJJRF9WSUE2ODZBIDEwMTkKKyNkZWZpbmUgSTJDX0RSSVZFUklEX0FETTEwMjUgMTAyMAorI2RlZmluZSBJMkNfRFJJVkVSSURfTE04NyAxMDIxCisjZGVmaW5lIEkyQ19EUklWRVJJRF9QQ0Y4NTc0IDEwMjIKKyNkZWZpbmUgSTJDX0RSSVZFUklEX01UUDAwOCAxMDIzCisjZGVmaW5lIEkyQ19EUklWRVJJRF9EUzE2MjEgMTAyNAorI2RlZmluZSBJMkNfRFJJVkVSSURfQURNMTAyNCAxMDI1CisjZGVmaW5lIEkyQ19EUklWRVJJRF9JVDg3IDEwMjYKKyNkZWZpbmUgSTJDX0RSSVZFUklEX0NINzAwWCAxMDI3IC8qIHNpbmdsZSBkcml2ZXIgZm9yIENINzAwMy03MDA5IGRpZ2l0YWwgcGMgdG8gdHYgZW5jb2RlcnMgKi8KKyNkZWZpbmUgSTJDX0RSSVZFUklEX0ZTQ1BPUyAxMDI4CisjZGVmaW5lIEkyQ19EUklWRVJJRF9GU0NTQ1kgMTAyOQorI2RlZmluZSBJMkNfRFJJVkVSSURfUENGODU5MSAxMDMwCisjZGVmaW5lIEkyQ19EUklWRVJJRF9TTVNDNDdNMSAxMDMxCisjZGVmaW5lIEkyQ19EUklWRVJJRF9WVDEyMTEgMTAzMgorI2RlZmluZSBJMkNfRFJJVkVSSURfTE05MiAxMDMzCisjZGVmaW5lIEkyQ19EUklWRVJJRF9WVDgyMzEgMTAzNAorI2RlZmluZSBJMkNfRFJJVkVSSURfU01BUlRCQVRUIDEwMzUKKyNkZWZpbmUgSTJDX0RSSVZFUklEX0JNQ1NFTlNPUlMgMTAzNgorI2RlZmluZSBJMkNfRFJJVkVSSURfRlM0NTEgMTAzNworI2RlZmluZSBJMkNfRFJJVkVSSURfVzgzNjI3SEYgMTAzOAorI2RlZmluZSBJMkNfRFJJVkVSSURfTE04NSAxMDM5CisjZGVmaW5lIEkyQ19EUklWRVJJRF9MTTgzIDEwNDAKKyNkZWZpbmUgSTJDX0RSSVZFUklEX0xNOTAgMTA0MgorI2RlZmluZSBJMkNfRFJJVkVSSURfQVNCMTAwIDEwNDMKKyNkZWZpbmUgSTJDX0RSSVZFUklEX0ZTQ0hFUiAxMDQ2CisjZGVmaW5lIEkyQ19EUklWRVJJRF9XODNMNzg1VFMgMTA0NworI2RlZmluZSBJMkNfRFJJVkVSSURfU01TQzQ3QjM5NyAxMDUwCisKKy8qCisgKiAtLS0tIEFkYXB0ZXIgdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIEZpcnN0LCB3ZSBkaXN0aW5ndWlzaCBiZXR3ZWVuIHNldmVyYWwgYWxnb3JpdGhtcyB0byBhY2Nlc3MgdGhlIGhhcmR3YXJlCisgKiBpbnRlcmZhY2UgdHlwZXMsIGFzIGEgUENGIDg1ODQgbmVlZHMgb3RoZXIgY2FyZSB0aGFuIGEgYml0IGFkYXB0ZXIuCisgKi8KKworI2RlZmluZSBJMkNfQUxHT19OT05FCTB4MDAwMDAwCisjZGVmaW5lIEkyQ19BTEdPX0JJVAkweDAxMDAwMAkvKiBiaXQgc3R5bGUgYWRhcHRlcnMJCSovCisjZGVmaW5lIEkyQ19BTEdPX1BDRgkweDAyMDAwMAkvKiBQQ0YgODU4NCBzdHlsZSBhZGFwdGVycwkqLworI2RlZmluZSBJMkNfQUxHT19BVEkJMHgwMzAwMDAJLyogQVRJIHZpZGVvIGNhcmQJCSovCisjZGVmaW5lIEkyQ19BTEdPX1NNQlVTCTB4MDQwMDAwCisjZGVmaW5lIEkyQ19BTEdPX0lTQSAJMHgwNTAwMDAJLyogbG1fc2Vuc29ycyBJU0EgcHNldWRvLWFkYXB0ZXIgKi8KKyNkZWZpbmUgSTJDX0FMR09fU0FBNzE0NiAweDA2MDAwMAkvKiBTQUEgNzE0NiB2aWRlbyBkZWNvZGVyIGJ1cwkqLworI2RlZmluZSBJMkNfQUxHT19BQ0IgCTB4MDcwMDAwCS8qIEFDQ0VTUy5idXMgYWxnb3JpdGhtICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0FMR09fSUlDICAgIDB4MDgwMDAwIAkvKiBJVEUgSUlDIGJ1cyAqLworI2RlZmluZSBJMkNfQUxHT19TQUE3MTM0IDB4MDkwMDAwCisjZGVmaW5lIEkyQ19BTEdPX01QQzgyNFggMHgwYTAwMDAJLyogTW90b3JvbGEgODI0MCAvIDgyNDUgICAgICAgICAqLworI2RlZmluZSBJMkNfQUxHT19JUE1JIAkweDBiMDAwMAkvKiBJUE1JIGR1bW15IGFkYXB0ZXIgKi8KKyNkZWZpbmUgSTJDX0FMR09fSVBNQiAJMHgwYzAwMDAJLyogSVBNQiBhZGFwdGVyICovCisjZGVmaW5lIEkyQ19BTEdPX01QQzEwNyAweDBkMDAwMAorI2RlZmluZSBJMkNfQUxHT19FQyAgICAgMHgxMDAwMDAgICAgICAgIC8qIEFDUEkgZW1iZWRkZWQgY29udHJvbGxlciAgICAgKi8KKworI2RlZmluZSBJMkNfQUxHT19NUEM4WFggMHgxMTAwMDAJLyogTVBDOHh4IFBvd2VyUEMgSTJDIGFsZ29yaXRobSAqLworI2RlZmluZSBJMkNfQUxHT19PQ1AgICAgMHgxMjAwMDAJLyogSUJNIG9yIG90aGVyd2lzZSBPbi1jaGlwIEkyQyBhbGdvcml0aG0gKi8KKyNkZWZpbmUgSTJDX0FMR09fQklUSFMJMHgxMzAwMDAJLyogZW5oYW5jZWQgYml0IHN0eWxlIGFkYXB0ZXJzCSovCisjZGVmaW5lIEkyQ19BTEdPX0lPUDNYWAkweDE0MDAwMAkvKiBYU0NBTEUgSU9QM1hYIE9uLWNoaXAgSTJDIGFsZyAqLworI2RlZmluZSBJMkNfQUxHT19TSUJZVEUgMHgxNTAwMDAJLyogQnJvYWRjb20gU2lCeXRlIFNPQ3MJCSovCisjZGVmaW5lIEkyQ19BTEdPX1NHSQkweDE2MDAwMAkvKiBTR0kgYWxnb3JpdGhtCQkqLworCisjZGVmaW5lIEkyQ19BTEdPX1VTQgkweDE3MDAwMAkvKiBVU0IgYWxnb3JpdGhtCQkqLworI2RlZmluZSBJMkNfQUxHT19WSVJUCTB4MTgwMDAwCS8qIFZpcnR1YWwgYnVzIGFkYXB0ZXIJCSovCisKKyNkZWZpbmUgSTJDX0FMR09fTVY2NFhYWCAweDE5MDAwMAkvKiBNYXJ2ZWxsIG12NjR4eHggaTJjIGN0bHIJKi8KKyNkZWZpbmUgSTJDX0FMR09fUENBCTB4MWEwMDAwCS8qIFBDQSA5NTY0IHN0eWxlIGFkYXB0ZXJzCSovCisjZGVmaW5lIEkyQ19BTEdPX0FVMTU1MAkweDFiMDAwMCAgICAgICAgLyogQXUxNTUwIFBTQyBhbGdvcml0aG0JCSovCisKKyNkZWZpbmUgSTJDX0FMR09fRVhQCTB4ODAwMDAwCS8qIGV4cGVyaW1lbnRhbAkJCSovCisKKyNkZWZpbmUgSTJDX0FMR09fTUFTSwkweGZmMDAwMAkvKiBNYXNrIGZvciBhbGdvcml0aG1zCQkqLworI2RlZmluZSBJMkNfQUxHT19TSElGVAkweDEwCS8qIHJpZ2h0IHNoaWZ0IHRvIGdldCBpbmRleCB2YWx1ZXMgCSovCisKKyNkZWZpbmUgSTJDX0hXX0FEQVBTCTB4MTAwMDAJCS8qICMgYWRhcHRlciB0eXBlcwkJKi8KKyNkZWZpbmUgSTJDX0hXX01BU0sJMHhmZmZmCQkKKworCisvKiBodyBzcGVjaWZpYyBtb2R1bGVzIHRoYXQgYXJlIGRlZmluZWQgcGVyIGFsZ29yaXRobSBsYXllcgorICovCisKKy8qIC0tLSBCaXQgYWxnb3JpdGhtIGFkYXB0ZXJzIAkJCQkJCSovCisjZGVmaW5lIEkyQ19IV19CX0xQCTB4MDAJLyogUGFyYWxsZWwgcG9ydCBQaGlsaXBzIHN0eWxlIGFkYXB0ZXIJKi8KKyNkZWZpbmUgSTJDX0hXX0JfTFBDCTB4MDEJLyogUGFyYWxsZWwgcG9ydCwgb3ZlciBjb250cm9sIHJlZy4JKi8KKyNkZWZpbmUgSTJDX0hXX0JfU0VSCTB4MDIJLyogU2VyaWFsIGxpbmUgaW50ZXJmYWNlCQkqLworI2RlZmluZSBJMkNfSFdfQl9FTFYJMHgwMwkvKiBFTFYgQ2FyZAkJCQkqLworI2RlZmluZSBJMkNfSFdfQl9WRUxMRQkweDA0CS8qIFZlbGxlbWFubiBLODAwMAkJCSovCisjZGVmaW5lIEkyQ19IV19CX0JUODQ4CTB4MDUJLyogQlQ4NDggdmlkZW8gYm9hcmRzCQkJKi8KKyNkZWZpbmUgSTJDX0hXX0JfV05WCTB4MDYJLyogV2lubm92IFZpZGV1bXMJCQkqLworI2RlZmluZSBJMkNfSFdfQl9WSUEJMHgwNwkvKiBWaWEgdnQ4MmM1ODZiCQkJKi8KKyNkZWZpbmUgSTJDX0hXX0JfSFlEUkEJMHgwOAkvKiBBcHBsZSBIeWRyYSBNYWMgSS9PCQkJKi8KKyNkZWZpbmUgSTJDX0hXX0JfRzQwMAkweDA5CS8qIE1hdHJveCBHNDAwCQkJCSovCisjZGVmaW5lIEkyQ19IV19CX0k4MTAJMHgwYQkvKiBJbnRlbCBJODEwIAkJCQkqLworI2RlZmluZSBJMkNfSFdfQl9WT08JMHgwYgkvKiAzZGZ4IFZvb2RvbyAzIC8gQmFuc2hlZSAgICAgIAkqLworI2RlZmluZSBJMkNfSFdfQl9QUE9SVCAgMHgwYwkvKiBQcmltaXRpdmUgcGFyYWxsZWwgcG9ydCBhZGFwdGVyCSovCisjZGVmaW5lIEkyQ19IV19CX1NBVkcJMHgwZAkvKiBTYXZhZ2UgNCAgICAgICAgICAgICAgICAgICAgIAkqLworI2RlZmluZSBJMkNfSFdfQl9TQ1gyMDAJMHgwZQkvKiBOYXQnbCBTZW1pIFNDeDIwMCBJMkMgICAgICAgIAkqLworI2RlZmluZSBJMkNfSFdfQl9SSVZBCTB4MTAJLyogUml2YSBiYXNlZCBncmFwaGljcyBjYXJkcwkJKi8KKyNkZWZpbmUgSTJDX0hXX0JfSU9DCTB4MTEJLyogSU9DIGJpdC13aWdnbGluZwkJCSovCisjZGVmaW5lIEkyQ19IV19CX1RTVU5BICAweDEyCS8qIERFQyBUc3VuYW1pIGNoaXBzZXQJCQkqLworI2RlZmluZSBJMkNfSFdfQl9GUk9ETyAgMHgxMyAgICAvKiAyZDNELCBJbmMuIFNBLTExMTAgRGV2ZWxvcG1lbnQgQm9hcmQgKi8KKyNkZWZpbmUgSTJDX0hXX0JfT01BSEEgIDB4MTQgICAgLyogT21haGEgSTJDIGludGVyZmFjZSAoQVJNKQkJKi8KKyNkZWZpbmUgSTJDX0hXX0JfR1VJREUgIDB4MTUgICAgLyogR3VpZGUgYml0LWJhc2hlcgkJCSovCisjZGVmaW5lIEkyQ19IV19CX0lYUDIwMDAgMHgxNgkvKiBHUElPIG9uIElYUDIwMDAgc3lzdGVtcyAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0hXX0JfSVhQNFhYIDB4MTcJLyogR1BJTyBvbiBJWFA0WFggc3lzdGVtcwkJKi8KKyNkZWZpbmUgSTJDX0hXX0JfUzNWSUEJMHgxOAkvKiBTM1ZpYSBQcm9TYXZhZ2UgYWRhcHRlcgkJKi8KKyNkZWZpbmUgSTJDX0hXX0JfWlIzNjA2NyAweDE5CS8qIFpvcmFuLTM2MDU3LzM2MDY3IGJhc2VkIGJvYXJkcwkqLworI2RlZmluZSBJMkNfSFdfQl9QQ0lMWU5YIDB4MWEJLyogVEkgUENJTHlueCBJMkMgYWRhcHRlcgkJKi8KKyNkZWZpbmUgSTJDX0hXX0JfQ1gyMzg4eCAweDFiCS8qIGNvbm5leGFudCAyMzg4eCBiYXNlZCB0diBjYXJkcwkqLworCisvKiAtLS0gUENGIDg1ODQgYmFzZWQgYWxnb3JpdGhtcwkJCQkJKi8KKyNkZWZpbmUgSTJDX0hXX1BfTFAJMHgwMAkvKiBQYXJhbGxlbCBwb3J0IGludGVyZmFjZQkJKi8KKyNkZWZpbmUgSTJDX0hXX1BfSVNBCTB4MDEJLyogZ2VuZXJpYyBJU0EgQnVzIGludGVmYWNlIGNhcmQJKi8KKyNkZWZpbmUgSTJDX0hXX1BfRUxFSwkweDAyCS8qIEVsZWt0b3IgSVNBIEJ1cyBpbnRlZmFjZSBjYXJkCSovCisKKy8qIC0tLSBQQ0EgOTU2NCBiYXNlZCBhbGdvcml0aG1zICovCisjZGVmaW5lIEkyQ19IV19BX0lTQQkweDAwCS8qIGdlbmVyaWMgSVNBIEJ1cyBpbnRlcmZhY2UgY2FyZAkqLworCisvKiAtLS0gQUNQSSBFbWJlZGRlZCBjb250cm9sbGVyIGFsZ29yaXRobXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSFdfQUNQSV9FQyAgICAgICAgICAweDAwCisKKy8qIC0tLSBNUEM4MjR4IFBvd2VyUEMgYWRhcHRlcnMJCQkJCQkqLworI2RlZmluZSBJMkNfSFdfTVBDODI0WCAweDAwCS8qIE1vdG9yb2xhIDgyNDAgLyA4MjQ1ICAgICAgICAgICAgICAgICAqLworCisvKiAtLS0gTVBDOHh4IFBvd2VyUEMgYWRhcHRlcnMJCQkJCQkqLworI2RlZmluZSBJMkNfSFdfTVBDOFhYX0VQT04gMHgwMAkvKiBFcG9ueW1vdXMgTVBDOHh4IEkyQyBhZGFwdGVyIAkqLworCisvKiAtLS0gSVRFIGJhc2VkIGFsZ29yaXRobXMJCQkJCQkqLworI2RlZmluZSBJMkNfSFdfSV9JSUMJMHgwMAkvKiBjb250cm9sbGVyIG9uIHRoZSBJVEUgKi8KKworLyogLS0tIFBvd2VyUEMgb24tY2hpcCBhZGFwdGVycwkJCQkJCSovCisjZGVmaW5lIEkyQ19IV19PQ1AgMHgwMAkvKiBJQk0gb24tY2hpcCBJMkMgYWRhcHRlciAJKi8KKworLyogLS0tIEJyb2FkY29tIFNpQnl0ZSBhZGFwdGVycwkJCQkJCSovCisjZGVmaW5lIEkyQ19IV19TSUJZVEUJMHgwMAorCisvKiAtLS0gU0dJIGFkYXB0ZXJzCQkJCQkJCSovCisjZGVmaW5lIEkyQ19IV19TR0lfVklOTwkweDAwCisjZGVmaW5lIEkyQ19IV19TR0lfTUFDRQkweDAxCisKKy8qIC0tLSBYU0NBTEUgb24tY2hpcCBhZGFwdGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0hXX0lPUDNYWCAweDAwCisKKy8qIC0tLSBBdTE1NTAgUFNDIGFkYXB0ZXJzIGFkYXB0ZXJzCQkJCQkqLworI2RlZmluZSBJMkNfSFdfQVUxNTUwX1BTQwkweDAwCisKKy8qIC0tLSBTTUJ1cyBvbmx5IGFkYXB0ZXJzCQkJCQkJKi8KKyNkZWZpbmUgSTJDX0hXX1NNQlVTX1BJSVg0CTB4MDAKKyNkZWZpbmUgSTJDX0hXX1NNQlVTX0FMSTE1WDMJMHgwMQorI2RlZmluZSBJMkNfSFdfU01CVVNfVklBMgkweDAyCisjZGVmaW5lIEkyQ19IV19TTUJVU19WT09ET08zCTB4MDMKKyNkZWZpbmUgSTJDX0hXX1NNQlVTX0k4MDEJMHgwNAorI2RlZmluZSBJMkNfSFdfU01CVVNfQU1ENzU2CTB4MDUKKyNkZWZpbmUgSTJDX0hXX1NNQlVTX1NJUzU1OTUJMHgwNgorI2RlZmluZSBJMkNfSFdfU01CVVNfQUxJMTUzNQkweDA3CisjZGVmaW5lIEkyQ19IV19TTUJVU19TSVM2MzAJMHgwOAorI2RlZmluZSBJMkNfSFdfU01CVVNfU0lTOTZYCTB4MDkKKyNkZWZpbmUgSTJDX0hXX1NNQlVTX0FNRDgxMTEJMHgwYQorI2RlZmluZSBJMkNfSFdfU01CVVNfU0NYMjAwCTB4MGIKKyNkZWZpbmUgSTJDX0hXX1NNQlVTX05GT1JDRTIJMHgwYworI2RlZmluZSBJMkNfSFdfU01CVVNfVzk5NjhDRgkweDBkCisjZGVmaW5lIEkyQ19IV19TTUJVU19PVjUxMQkweDBlCS8qIE9WNTExKCspIFVTQiAxLjEgd2ViY2FtIElDcwkqLworI2RlZmluZSBJMkNfSFdfU01CVVNfT1Y1MTgJMHgwZgkvKiBPVjUxOCgrKSBVU0IgMS4xIHdlYmNhbSBJQ3MJKi8KKyNkZWZpbmUgSTJDX0hXX1NNQlVTX09WNTE5CTB4MTAJLyogT1Y1MTkgVVNCIDEuMSB3ZWJjYW0gSUMJKi8KKyNkZWZpbmUgSTJDX0hXX1NNQlVTX09WRlgyCTB4MTEJLyogQ3lwcmVzcy9PbW5pVmlzaW9uIEZYMiB3ZWJjYW0gKi8KKworLyogLS0tIElTQSBwc2V1ZG8tYWRhcHRlcgkJCQkJCSovCisjZGVmaW5lIEkyQ19IV19JU0EgMHgwMAorCisvKiAtLS0gSVBNSSBwc2V1ZG8tYWRhcHRlcgkJCQkJCSovCisjZGVmaW5lIEkyQ19IV19JUE1JIDB4MDAKKworLyogLS0tIElQTUIgYWRhcHRlcgkJCQkJCSovCisjZGVmaW5lIEkyQ19IV19JUE1CIDB4MDAKKworLyogLS0tIE1DUDEwNyBhZGFwdGVyICovCisjZGVmaW5lIEkyQ19IV19NUEMxMDcgMHgwMAorCisvKiAtLS0gTWFydmVsbCBtdjY0eHh4IGkyYyBhZGFwdGVyICovCisjZGVmaW5lIEkyQ19IV19NVjY0WFhYIDB4MDAKKworI2VuZGlmIC8qIExJTlVYX0kyQ19JRF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2kyYy1zZW5zb3IuaCBiL2luY2x1ZGUvbGludXgvaTJjLXNlbnNvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxYjYyNTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2kyYy1zZW5zb3IuaApAQCAtMCwwICsxLDI2MyBAQAorLyoKKyAgICBpMmMtc2Vuc29yLmggLSBQYXJ0IG9mIHRoZSBpMmMgcGFja2FnZQorICAgIHdhcyBvcmlnaW5hbGx5IHNlbnNvcnMuaCAtIFBhcnQgb2YgbG1fc2Vuc29ycywgTGludXgga2VybmVsIG1vZHVsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaGFyZHdhcmUgbW9uaXRvcmluZworICAgIENvcHlyaWdodCAoYykgMTk5OCwgMTk5OSAgRnJvZG8gTG9vaWphYXJkIDxmcm9kb2xAZGRzLm5sPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisqLworCisjaWZuZGVmIF9MSU5VWF9JMkNfU0VOU09SX0gKKyNkZWZpbmUgX0xJTlVYX0kyQ19TRU5TT1JfSAorCisvKiBBIHN0cnVjdHVyZSBjb250YWluaW5nIGRldGVjdCBpbmZvcm1hdGlvbi4KKyAgIEZvcmNlIHZhcmlhYmxlcyBvdmVycnVsZSBhbGwgb3RoZXIgdmFyaWFibGVzOyB0aGV5IGZvcmNlIGEgZGV0ZWN0aW9uIG9uCisgICB0aGF0IHBsYWNlLiBJZiBhIHNwZWNpZmljIGNoaXAgaXMgZ2l2ZW4sIHRoZSBtb2R1bGUgYmxpbmRseSBhc3N1bWVzIHRoaXMKKyAgIGNoaXAgdHlwZSBpcyBwcmVzZW50OyBpZiBhIGdlbmVyYWwgZm9yY2UgKGtpbmQgPT0gMCkgaXMgZ2l2ZW4sIHRoZSBtb2R1bGUKKyAgIHdpbGwgc3RpbGwgdHJ5IHRvIGZpZ3VyZSBvdXQgd2hhdCB0eXBlIG9mIGNoaXAgaXMgcHJlc2VudC4gVGhpcyBpcyB1c2VmdWwKKyAgIGlmIGZvciBzb21lIHJlYXNvbnMgdGhlIGRldGVjdCBmb3IgU01CdXMgb3IgSVNBIGFkZHJlc3Mgc3BhY2UgZmlsbGVkCisgICBmYWlscy4KKyAgIHByb2JlOiBpbnNtb2QgcGFyYW1ldGVyLiBJbml0aWFsaXplIHRoaXMgbGlzdCB3aXRoIEkyQ19DTElFTlRfSVNBX0VORCB2YWx1ZXMuCisgICAgIEEgbGlzdCBvZiBwYWlycy4gVGhlIGZpcnN0IHZhbHVlIGlzIGEgYnVzIG51bWJlciAoQU5ZX0kyQ19JU0FfQlVTIGZvcgorICAgICB0aGUgSVNBIGJ1cywgLTEgZm9yIGFueSBJMkMgYnVzKSwgdGhlIHNlY29uZCBpcyB0aGUgYWRkcmVzcy4gCisgICBraW5kOiBUaGUga2luZCBvZiBjaGlwLiAwIGVxdWFscyBhbnkgY2hpcC4KKyovCitzdHJ1Y3QgaTJjX2ZvcmNlX2RhdGEgeworCXVuc2lnbmVkIHNob3J0ICpmb3JjZTsKKwl1bnNpZ25lZCBzaG9ydCBraW5kOworfTsKKworLyogQSBzdHJ1Y3R1cmUgY29udGFpbmluZyB0aGUgZGV0ZWN0IGluZm9ybWF0aW9uLgorICAgbm9ybWFsX2kyYzogZmlsbGVkIGluIGJ5IHRoZSBtb2R1bGUgd3JpdGVyLiBUZXJtaW5hdGVkIGJ5IEkyQ19DTElFTlRfSVNBX0VORC4KKyAgICAgQSBsaXN0IG9mIEkyQyBhZGRyZXNzZXMgd2hpY2ggc2hvdWxkIG5vcm1hbGx5IGJlIGV4YW1pbmVkLgorICAgbm9ybWFsX2lzYTogZmlsbGVkIGluIGJ5IHRoZSBtb2R1bGUgd3JpdGVyLiBUZXJtaW5hdGVkIGJ5IFNFTlNPUlNfSVNBX0VORC4KKyAgICAgQSBsaXN0IG9mIElTQSBhZGRyZXNzZXMgd2hpY2ggc2hvdWxkIG5vcm1hbGx5IGJlIGV4YW1pbmVkLgorICAgcHJvYmU6IGluc21vZCBwYXJhbWV0ZXIuIEluaXRpYWxpemUgdGhpcyBsaXN0IHdpdGggSTJDX0NMSUVOVF9JU0FfRU5EIHZhbHVlcy4KKyAgICAgQSBsaXN0IG9mIHBhaXJzLiBUaGUgZmlyc3QgdmFsdWUgaXMgYSBidXMgbnVtYmVyIChBTllfSTJDX0lTQV9CVVMgZm9yCisgICAgIHRoZSBJU0EgYnVzLCAtMSBmb3IgYW55IEkyQyBidXMpLCB0aGUgc2Vjb25kIGlzIHRoZSBhZGRyZXNzLiBUaGVzZQorICAgICBhZGRyZXNzZXMgYXJlIGFsc28gcHJvYmVkLCBhcyBpZiB0aGV5IHdlcmUgaW4gdGhlICdub3JtYWwnIGxpc3QuCisgICBpZ25vcmU6IGluc21vZCBwYXJhbWV0ZXIuIEluaXRpYWxpemUgdGhpcyBsaXN0IHdpdGggSTJDX0NMSUVOVF9JU0FfRU5EIHZhbHVlcy4KKyAgICAgQSBsaXN0IG9mIHBhaXJzLiBUaGUgZmlyc3QgdmFsdWUgaXMgYSBidXMgbnVtYmVyIChBTllfSTJDX0lTQV9CVVMgZm9yCisgICAgIHRoZSBJU0EgYnVzLCAtMSBmb3IgYW55IEkyQyBidXMpLCB0aGUgc2Vjb25kIGlzIHRoZSBJMkMgYWRkcmVzcy4gVGhlc2UKKyAgICAgYWRkcmVzc2VzIGFyZSBuZXZlciBwcm9iZWQuIFRoaXMgcGFyYW1ldGVyIG92ZXJydWxlcyAnbm9ybWFsJyBhbmQgCisgICAgICdwcm9iZScsIGJ1dCBub3QgdGhlICdmb3JjZScgbGlzdHMuCisgICBmb3JjZV9kYXRhOiBpbnNtb2QgcGFyYW1ldGVycy4gQSBsaXN0LCBlbmRpbmcgd2l0aCBhbiBlbGVtZW50IG9mIHdoaWNoCisgICAgIHRoZSBmb3JjZSBmaWVsZCBpcyBOVUxMLgorKi8KK3N0cnVjdCBpMmNfYWRkcmVzc19kYXRhIHsKKwl1bnNpZ25lZCBzaG9ydCAqbm9ybWFsX2kyYzsKKwl1bnNpZ25lZCBpbnQgKm5vcm1hbF9pc2E7CisJdW5zaWduZWQgc2hvcnQgKnByb2JlOworCXVuc2lnbmVkIHNob3J0ICppZ25vcmU7CisJc3RydWN0IGkyY19mb3JjZV9kYXRhICpmb3JjZXM7Cit9OworCisjZGVmaW5lIFNFTlNPUlNfTU9EVUxFX1BBUk1fRk9SQ0UobmFtZSkgXAorICBJMkNfQ0xJRU5UX01PRFVMRV9QQVJNKGZvcmNlXyAjIyBuYW1lLCBcCisgICAgICAgICAgICAgICAgICAgICAgIkxpc3Qgb2YgYWRhcHRlcixhZGRyZXNzIHBhaXJzIHdoaWNoIGFyZSB1bnF1ZXN0aW9uYWJseSIgXAorICAgICAgICAgICAgICAgICAgICAgICIgYXNzdW1lZCB0byBjb250YWluIGEgYCIgIyBuYW1lICInIGNoaXAiKQorCisKKy8qIFRoaXMgZGVmaW5lcyBzZXZlcmFsIGluc21vZCB2YXJpYWJsZXMsIGFuZCB0aGUgYWRkcl9kYXRhIHN0cnVjdHVyZSAqLworI2RlZmluZSBTRU5TT1JTX0lOU01PRCBcCisgIEkyQ19DTElFTlRfTU9EVUxFX1BBUk0ocHJvYmUsIFwKKyAgICAgICAgICAgICAgICAgICAgICAiTGlzdCBvZiBhZGFwdGVyLGFkZHJlc3MgcGFpcnMgdG8gc2NhbiBhZGRpdGlvbmFsbHkiKTsgXAorICBJMkNfQ0xJRU5UX01PRFVMRV9QQVJNKGlnbm9yZSwgXAorICAgICAgICAgICAgICAgICAgICAgICJMaXN0IG9mIGFkYXB0ZXIsYWRkcmVzcyBwYWlycyBub3QgdG8gc2NhbiIpOyBcCisJc3RhdGljIHN0cnVjdCBpMmNfYWRkcmVzc19kYXRhIGFkZHJfZGF0YSA9IHsJCQlcCisJCQkubm9ybWFsX2kyYyA9CQlub3JtYWxfaTJjLAkJXAorCQkJLm5vcm1hbF9pc2EgPQkJbm9ybWFsX2lzYSwJCVwKKwkJCS5wcm9iZSA9CQlwcm9iZSwJCQlcCisJCQkuaWdub3JlID0JCWlnbm9yZSwJCQlcCisJCQkuZm9yY2VzID0JCWZvcmNlcywJCQlcCisJCX0KKworLyogVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgY3JlYXRlIGFuIGVudW0gd2l0aCB0aGUgY2hpcCBuYW1lcyBhcyBlbGVtZW50cy4gCisgICBUaGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgZW51bSBpcyBhbnlfY2hpcC4gVGhlc2UgYXJlIHRoZSBvbmx5IG1hY3JvcworICAgYSBtb2R1bGUgd2lsbCB3YW50IHRvIHVzZS4gKi8KKworI2RlZmluZSBTRU5TT1JTX0lOU01PRF8wIFwKKyAgZW51bSBjaGlwcyB7IGFueV9jaGlwIH07IFwKKyAgSTJDX0NMSUVOVF9NT0RVTEVfUEFSTShmb3JjZSwgXAorICAgICAgICAgICAgICAgICAgICAgICJMaXN0IG9mIGFkYXB0ZXIsYWRkcmVzcyBwYWlycyB0byBib2xkbHkgYXNzdW1lICIgXAorICAgICAgICAgICAgICAgICAgICAgICJ0byBiZSBwcmVzZW50Iik7IFwKKyAgc3RhdGljIHN0cnVjdCBpMmNfZm9yY2VfZGF0YSBmb3JjZXNbXSA9IHt7Zm9yY2UsYW55X2NoaXB9LHtOVUxMfX07IFwKKyAgU0VOU09SU19JTlNNT0QKKworI2RlZmluZSBTRU5TT1JTX0lOU01PRF8xKGNoaXAxKSBcCisgIGVudW0gY2hpcHMgeyBhbnlfY2hpcCwgY2hpcDEgfTsgXAorICBJMkNfQ0xJRU5UX01PRFVMRV9QQVJNKGZvcmNlLCBcCisgICAgICAgICAgICAgICAgICAgICAgIkxpc3Qgb2YgYWRhcHRlcixhZGRyZXNzIHBhaXJzIHRvIGJvbGRseSBhc3N1bWUgIiBcCisgICAgICAgICAgICAgICAgICAgICAgInRvIGJlIHByZXNlbnQiKTsgXAorICBTRU5TT1JTX01PRFVMRV9QQVJNX0ZPUkNFKGNoaXAxKTsgXAorICBzdGF0aWMgc3RydWN0IGkyY19mb3JjZV9kYXRhIGZvcmNlc1tdID0ge3tmb3JjZSxhbnlfY2hpcH0sXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtmb3JjZV8gIyMgY2hpcDEsY2hpcDF9LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge05VTEx9fTsgXAorICBTRU5TT1JTX0lOU01PRAorCisjZGVmaW5lIFNFTlNPUlNfSU5TTU9EXzIoY2hpcDEsY2hpcDIpIFwKKyAgZW51bSBjaGlwcyB7IGFueV9jaGlwLCBjaGlwMSwgY2hpcDIgfTsgXAorICBJMkNfQ0xJRU5UX01PRFVMRV9QQVJNKGZvcmNlLCBcCisgICAgICAgICAgICAgICAgICAgICAgIkxpc3Qgb2YgYWRhcHRlcixhZGRyZXNzIHBhaXJzIHRvIGJvbGRseSBhc3N1bWUgIiBcCisgICAgICAgICAgICAgICAgICAgICAgInRvIGJlIHByZXNlbnQiKTsgXAorICBTRU5TT1JTX01PRFVMRV9QQVJNX0ZPUkNFKGNoaXAxKTsgXAorICBTRU5TT1JTX01PRFVMRV9QQVJNX0ZPUkNFKGNoaXAyKTsgXAorICBzdGF0aWMgc3RydWN0IGkyY19mb3JjZV9kYXRhIGZvcmNlc1tdID0ge3tmb3JjZSxhbnlfY2hpcH0sIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Zm9yY2VfICMjIGNoaXAxLGNoaXAxfSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtmb3JjZV8gIyMgY2hpcDIsY2hpcDJ9LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge05VTEx9fTsgXAorICBTRU5TT1JTX0lOU01PRAorCisjZGVmaW5lIFNFTlNPUlNfSU5TTU9EXzMoY2hpcDEsY2hpcDIsY2hpcDMpIFwKKyAgZW51bSBjaGlwcyB7IGFueV9jaGlwLCBjaGlwMSwgY2hpcDIsIGNoaXAzIH07IFwKKyAgSTJDX0NMSUVOVF9NT0RVTEVfUEFSTShmb3JjZSwgXAorICAgICAgICAgICAgICAgICAgICAgICJMaXN0IG9mIGFkYXB0ZXIsYWRkcmVzcyBwYWlycyB0byBib2xkbHkgYXNzdW1lICIgXAorICAgICAgICAgICAgICAgICAgICAgICJ0byBiZSBwcmVzZW50Iik7IFwKKyAgU0VOU09SU19NT0RVTEVfUEFSTV9GT1JDRShjaGlwMSk7IFwKKyAgU0VOU09SU19NT0RVTEVfUEFSTV9GT1JDRShjaGlwMik7IFwKKyAgU0VOU09SU19NT0RVTEVfUEFSTV9GT1JDRShjaGlwMyk7IFwKKyAgc3RhdGljIHN0cnVjdCBpMmNfZm9yY2VfZGF0YSBmb3JjZXNbXSA9IHt7Zm9yY2UsYW55X2NoaXB9LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2ZvcmNlXyAjIyBjaGlwMSxjaGlwMX0sIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Zm9yY2VfICMjIGNoaXAyLGNoaXAyfSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtmb3JjZV8gIyMgY2hpcDMsY2hpcDN9LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge05VTEx9fTsgXAorICBTRU5TT1JTX0lOU01PRAorCisjZGVmaW5lIFNFTlNPUlNfSU5TTU9EXzQoY2hpcDEsY2hpcDIsY2hpcDMsY2hpcDQpIFwKKyAgZW51bSBjaGlwcyB7IGFueV9jaGlwLCBjaGlwMSwgY2hpcDIsIGNoaXAzLCBjaGlwNCB9OyBcCisgIEkyQ19DTElFTlRfTU9EVUxFX1BBUk0oZm9yY2UsIFwKKyAgICAgICAgICAgICAgICAgICAgICAiTGlzdCBvZiBhZGFwdGVyLGFkZHJlc3MgcGFpcnMgdG8gYm9sZGx5IGFzc3VtZSAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAidG8gYmUgcHJlc2VudCIpOyBcCisgIFNFTlNPUlNfTU9EVUxFX1BBUk1fRk9SQ0UoY2hpcDEpOyBcCisgIFNFTlNPUlNfTU9EVUxFX1BBUk1fRk9SQ0UoY2hpcDIpOyBcCisgIFNFTlNPUlNfTU9EVUxFX1BBUk1fRk9SQ0UoY2hpcDMpOyBcCisgIFNFTlNPUlNfTU9EVUxFX1BBUk1fRk9SQ0UoY2hpcDQpOyBcCisgIHN0YXRpYyBzdHJ1Y3QgaTJjX2ZvcmNlX2RhdGEgZm9yY2VzW10gPSB7e2ZvcmNlLGFueV9jaGlwfSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtmb3JjZV8gIyMgY2hpcDEsY2hpcDF9LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2ZvcmNlXyAjIyBjaGlwMixjaGlwMn0sIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Zm9yY2VfICMjIGNoaXAzLGNoaXAzfSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtmb3JjZV8gIyMgY2hpcDQsY2hpcDR9LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge05VTEx9fTsgXAorICBTRU5TT1JTX0lOU01PRAorCisjZGVmaW5lIFNFTlNPUlNfSU5TTU9EXzUoY2hpcDEsY2hpcDIsY2hpcDMsY2hpcDQsY2hpcDUpIFwKKyAgZW51bSBjaGlwcyB7IGFueV9jaGlwLCBjaGlwMSwgY2hpcDIsIGNoaXAzLCBjaGlwNCwgY2hpcDUgfTsgXAorICBJMkNfQ0xJRU5UX01PRFVMRV9QQVJNKGZvcmNlLCBcCisgICAgICAgICAgICAgICAgICAgICAgIkxpc3Qgb2YgYWRhcHRlcixhZGRyZXNzIHBhaXJzIHRvIGJvbGRseSBhc3N1bWUgIiBcCisgICAgICAgICAgICAgICAgICAgICAgInRvIGJlIHByZXNlbnQiKTsgXAorICBTRU5TT1JTX01PRFVMRV9QQVJNX0ZPUkNFKGNoaXAxKTsgXAorICBTRU5TT1JTX01PRFVMRV9QQVJNX0ZPUkNFKGNoaXAyKTsgXAorICBTRU5TT1JTX01PRFVMRV9QQVJNX0ZPUkNFKGNoaXAzKTsgXAorICBTRU5TT1JTX01PRFVMRV9QQVJNX0ZPUkNFKGNoaXA0KTsgXAorICBTRU5TT1JTX01PRFVMRV9QQVJNX0ZPUkNFKGNoaXA1KTsgXAorICBzdGF0aWMgc3RydWN0IGkyY19mb3JjZV9kYXRhIGZvcmNlc1tdID0ge3tmb3JjZSxhbnlfY2hpcH0sIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Zm9yY2VfICMjIGNoaXAxLGNoaXAxfSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtmb3JjZV8gIyMgY2hpcDIsY2hpcDJ9LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2ZvcmNlXyAjIyBjaGlwMyxjaGlwM30sIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Zm9yY2VfICMjIGNoaXA0LGNoaXA0fSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtmb3JjZV8gIyMgY2hpcDUsY2hpcDV9LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge05VTEx9fTsgXAorICBTRU5TT1JTX0lOU01PRAorCisjZGVmaW5lIFNFTlNPUlNfSU5TTU9EXzYoY2hpcDEsY2hpcDIsY2hpcDMsY2hpcDQsY2hpcDUsY2hpcDYpIFwKKyAgZW51bSBjaGlwcyB7IGFueV9jaGlwLCBjaGlwMSwgY2hpcDIsIGNoaXAzLCBjaGlwNCwgY2hpcDUsIGNoaXA2IH07IFwKKyAgSTJDX0NMSUVOVF9NT0RVTEVfUEFSTShmb3JjZSwgXAorICAgICAgICAgICAgICAgICAgICAgICJMaXN0IG9mIGFkYXB0ZXIsYWRkcmVzcyBwYWlycyB0byBib2xkbHkgYXNzdW1lICIgXAorICAgICAgICAgICAgICAgICAgICAgICJ0byBiZSBwcmVzZW50Iik7IFwKKyAgU0VOU09SU19NT0RVTEVfUEFSTV9GT1JDRShjaGlwMSk7IFwKKyAgU0VOU09SU19NT0RVTEVfUEFSTV9GT1JDRShjaGlwMik7IFwKKyAgU0VOU09SU19NT0RVTEVfUEFSTV9GT1JDRShjaGlwMyk7IFwKKyAgU0VOU09SU19NT0RVTEVfUEFSTV9GT1JDRShjaGlwNCk7IFwKKyAgU0VOU09SU19NT0RVTEVfUEFSTV9GT1JDRShjaGlwNSk7IFwKKyAgU0VOU09SU19NT0RVTEVfUEFSTV9GT1JDRShjaGlwNik7IFwKKyAgc3RhdGljIHN0cnVjdCBpMmNfZm9yY2VfZGF0YSBmb3JjZXNbXSA9IHt7Zm9yY2UsYW55X2NoaXB9LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2ZvcmNlXyAjIyBjaGlwMSxjaGlwMX0sIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Zm9yY2VfICMjIGNoaXAyLGNoaXAyfSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtmb3JjZV8gIyMgY2hpcDMsY2hpcDN9LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2ZvcmNlXyAjIyBjaGlwNCxjaGlwNH0sIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Zm9yY2VfICMjIGNoaXA1LGNoaXA1fSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtmb3JjZV8gIyMgY2hpcDYsY2hpcDZ9LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge05VTEx9fTsgXAorICBTRU5TT1JTX0lOU01PRAorCisjZGVmaW5lIFNFTlNPUlNfSU5TTU9EXzcoY2hpcDEsY2hpcDIsY2hpcDMsY2hpcDQsY2hpcDUsY2hpcDYsY2hpcDcpIFwKKyAgZW51bSBjaGlwcyB7IGFueV9jaGlwLCBjaGlwMSwgY2hpcDIsIGNoaXAzLCBjaGlwNCwgY2hpcDUsIGNoaXA2LCBjaGlwNyB9OyBcCisgIEkyQ19DTElFTlRfTU9EVUxFX1BBUk0oZm9yY2UsIFwKKyAgICAgICAgICAgICAgICAgICAgICAiTGlzdCBvZiBhZGFwdGVyLGFkZHJlc3MgcGFpcnMgdG8gYm9sZGx5IGFzc3VtZSAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAidG8gYmUgcHJlc2VudCIpOyBcCisgIFNFTlNPUlNfTU9EVUxFX1BBUk1fRk9SQ0UoY2hpcDEpOyBcCisgIFNFTlNPUlNfTU9EVUxFX1BBUk1fRk9SQ0UoY2hpcDIpOyBcCisgIFNFTlNPUlNfTU9EVUxFX1BBUk1fRk9SQ0UoY2hpcDMpOyBcCisgIFNFTlNPUlNfTU9EVUxFX1BBUk1fRk9SQ0UoY2hpcDQpOyBcCisgIFNFTlNPUlNfTU9EVUxFX1BBUk1fRk9SQ0UoY2hpcDUpOyBcCisgIFNFTlNPUlNfTU9EVUxFX1BBUk1fRk9SQ0UoY2hpcDYpOyBcCisgIFNFTlNPUlNfTU9EVUxFX1BBUk1fRk9SQ0UoY2hpcDcpOyBcCisgIHN0YXRpYyBzdHJ1Y3QgaTJjX2ZvcmNlX2RhdGEgZm9yY2VzW10gPSB7e2ZvcmNlLGFueV9jaGlwfSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtmb3JjZV8gIyMgY2hpcDEsY2hpcDF9LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2ZvcmNlXyAjIyBjaGlwMixjaGlwMn0sIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Zm9yY2VfICMjIGNoaXAzLGNoaXAzfSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtmb3JjZV8gIyMgY2hpcDQsY2hpcDR9LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2ZvcmNlXyAjIyBjaGlwNSxjaGlwNX0sIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Zm9yY2VfICMjIGNoaXA2LGNoaXA2fSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtmb3JjZV8gIyMgY2hpcDcsY2hpcDd9LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge05VTEx9fTsgXAorICBTRU5TT1JTX0lOU01PRAorCisjZGVmaW5lIFNFTlNPUlNfSU5TTU9EXzgoY2hpcDEsY2hpcDIsY2hpcDMsY2hpcDQsY2hpcDUsY2hpcDYsY2hpcDcsY2hpcDgpIFwKKyAgZW51bSBjaGlwcyB7IGFueV9jaGlwLCBjaGlwMSwgY2hpcDIsIGNoaXAzLCBjaGlwNCwgY2hpcDUsIGNoaXA2LCBjaGlwNywgY2hpcDggfTsgXAorICBJMkNfQ0xJRU5UX01PRFVMRV9QQVJNKGZvcmNlLCBcCisgICAgICAgICAgICAgICAgICAgICAgIkxpc3Qgb2YgYWRhcHRlcixhZGRyZXNzIHBhaXJzIHRvIGJvbGRseSBhc3N1bWUgIiBcCisgICAgICAgICAgICAgICAgICAgICAgInRvIGJlIHByZXNlbnQiKTsgXAorICBTRU5TT1JTX01PRFVMRV9QQVJNX0ZPUkNFKGNoaXAxKTsgXAorICBTRU5TT1JTX01PRFVMRV9QQVJNX0ZPUkNFKGNoaXAyKTsgXAorICBTRU5TT1JTX01PRFVMRV9QQVJNX0ZPUkNFKGNoaXAzKTsgXAorICBTRU5TT1JTX01PRFVMRV9QQVJNX0ZPUkNFKGNoaXA0KTsgXAorICBTRU5TT1JTX01PRFVMRV9QQVJNX0ZPUkNFKGNoaXA1KTsgXAorICBTRU5TT1JTX01PRFVMRV9QQVJNX0ZPUkNFKGNoaXA2KTsgXAorICBTRU5TT1JTX01PRFVMRV9QQVJNX0ZPUkNFKGNoaXA3KTsgXAorICBTRU5TT1JTX01PRFVMRV9QQVJNX0ZPUkNFKGNoaXA4KTsgXAorICBzdGF0aWMgc3RydWN0IGkyY19mb3JjZV9kYXRhIGZvcmNlc1tdID0ge3tmb3JjZSxhbnlfY2hpcH0sIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Zm9yY2VfICMjIGNoaXAxLGNoaXAxfSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtmb3JjZV8gIyMgY2hpcDIsY2hpcDJ9LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2ZvcmNlXyAjIyBjaGlwMyxjaGlwM30sIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Zm9yY2VfICMjIGNoaXA0LGNoaXA0fSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtmb3JjZV8gIyMgY2hpcDUsY2hpcDV9LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2ZvcmNlXyAjIyBjaGlwNixjaGlwNn0sIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Zm9yY2VfICMjIGNoaXA3LGNoaXA3fSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtmb3JjZV8gIyMgY2hpcDgsY2hpcDh9LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge05VTEx9fTsgXAorICBTRU5TT1JTX0lOU01PRAorCisvKiBEZXRlY3QgZnVuY3Rpb24uIEl0IGl0ZXJhdGVzIG92ZXIgYWxsIHBvc3NpYmxlIGFkZHJlc3NlcyBpdHNlbGYuIEZvcgorICAgU01CdXMgYWRkcmVzc2VzLCBpdCB3aWxsIG9ubHkgY2FsbCBmb3VuZF9wcm9jIGlmIHNvbWUgY2xpZW50IGlzIGNvbm5lY3RlZAorICAgdG8gdGhlIFNNQnVzICh1bmxlc3MgYSAnZm9yY2UnIG1hdGNoZWQpOyBmb3IgSVNBIGRldGVjdGlvbnMsIHRoaXMgaXMgbm90CisgICBkb25lLiAqLworZXh0ZXJuIGludCBpMmNfZGV0ZWN0KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwKKwkJICAgICAgc3RydWN0IGkyY19hZGRyZXNzX2RhdGEgKmFkZHJlc3NfZGF0YSwKKwkJICAgICAgaW50ICgqZm91bmRfcHJvYykgKHN0cnVjdCBpMmNfYWRhcHRlciAqLCBpbnQsIGludCkpOworCisKKy8qIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBzY2FsZSB1c2VyLWlucHV0IHRvIHNlbnNpYmxlIHZhbHVlcyBpbiBhbG1vc3QgYWxsCisgICBjaGlwIGRyaXZlcnMuICovCitzdGF0aWMgaW5saW5lIGludCBTRU5TT1JTX0xJTUlUKGxvbmcgdmFsdWUsIGxvbmcgbG93LCBsb25nIGhpZ2gpCit7CisJaWYgKHZhbHVlIDwgbG93KQorCQlyZXR1cm4gbG93OworCWVsc2UgaWYgKHZhbHVlID4gaGlnaCkKKwkJcmV0dXJuIGhpZ2g7CisJZWxzZQorCQlyZXR1cm4gdmFsdWU7Cit9CisjZW5kaWYJCQkJLyogZGVmIF9MSU5VWF9JMkNfU0VOU09SX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaTJjLXZpZC5oIGIvaW5jbHVkZS9saW51eC9pMmMtdmlkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc0ODM1ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2kyYy12aWQuaApAQCAtMCwwICsxLDk5IEBACisvKgorICAgIGkyYy12aWQuaCAtIFBhcnQgb2YgbG1fc2Vuc29ycywgTGludXgga2VybmVsIG1vZHVsZXMgZm9yIGhhcmR3YXJlCisgICAgICAgICAgICAgICAgbW9uaXRvcmluZworICAgIENvcHlyaWdodCAoYykgMjAwMiBNYXJrIEQuIFN0dWRlYmFrZXIgPG1kc3h5ejEyM0B5YWhvby5jb20+CisgICAgV2l0aCBhc3Npc3RhbmNlIGZyb20gVHJlbnQgUGllcGhvIDx4eXp6eUBzcGVha2Vhc3kub3JnPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisqLworCisvKgorICAgIFRoaXMgZmlsZSBjb250YWlucyBjb21tb24gY29kZSBmb3IgZGVjb2RpbmcgVklEIHBpbnMuCisgICAgVGhpcyBmaWxlIGlzICNpbmNsdWRlZCBpbiB2YXJpb3VzIGNoaXAgZHJpdmVycyBpbiB0aGlzIGRpcmVjdG9yeS4KKyAgICBBcyB0aGUgdXNlciBpcyB1bmxpa2VseSB0byBsb2FkIG1vcmUgdGhhbiBvbmUgZHJpdmVyIHdoaWNoCisgICAgaW5jbHVkZXMgdGhpcyBjb2RlIHdlIGRvbid0IHdvcnJ5IGFib3V0IHRoZSB3YXN0ZWQgc3BhY2UuCisgICAgUmVmZXJlbmNlOiBWUk0geC55IERDLURDIENvbnZlcnRlciBEZXNpZ24gR3VpZGVsaW5lcywKKyAgICBhdmFpbGFibGUgYXQgaHR0cDovL2RldmVsb3Blci5pbnRlbC5jb20KKyovCisKKy8qCisgICAgQU1EIE9wdGVyb24gcHJvY2Vzc29ycyBkb24ndCBmb2xsb3cgdGhlIEludGVsIFZSTSBzcGVjLgorICAgIEknbSBnb2luZyB0byAibWFrZSB1cCIgMi40IGFzIHRoZSBWUk0gc3BlYyBmb3IgdGhlIE9wdGVyb25zLgorICAgIE5vIGdvb2QgcmVhc29uIGp1c3QgYSBtbmVtb25pYyBmb3IgdGhlIDI0eCBPcHRlcm9uIHByb2Nlc3NvcgorICAgIHNlcmllcworCisgICAgT3B0ZXJvbiBWSUQgZW5jb2RpbmcgaXM6CisKKyAgICAgICAwMDAwMCAgPSAgMS41NTAgVgorICAgICAgIDAwMDAxICA9ICAxLjUyNSBWCisgICAgICAgIC4gLiAuIC4KKyAgICAgICAxMTExMCAgPSAgMC44MDAgVgorICAgICAgIDExMTExICA9ICAwLjAwMCBWIChvZmYpCisgKi8KKworLyoKKyAgICBMZWdhbCB2YWwgdmFsdWVzIDB4MDAgLSAweDFmOyBleGNlcHQgZm9yIFZSRCAxMC4wLCAweDAwIC0gMHgzZi4KKyAgICB2cm0gaXMgdGhlIEludGVsIFZSTSBkb2N1bWVudCB2ZXJzaW9uLgorICAgIE5vdGU6IHZybSB2ZXJzaW9uIGlzIHNjYWxlZCBieSAxMCBhbmQgdGhlIHJldHVybiB2YWx1ZSBpcyBzY2FsZWQgYnkgMTAwMAorICAgIHRvIGF2b2lkIGZsb2F0aW5nIHBvaW50IGluIHRoZSBrZXJuZWwuCisqLworCitpbnQgaTJjX3doaWNoX3ZybSh2b2lkKTsKKworI2RlZmluZSBERUZBVUxUX1ZSTQk4MgorCitzdGF0aWMgaW5saW5lIGludCB2aWRfZnJvbV9yZWcoaW50IHZhbCwgaW50IHZybSkKK3sKKwlpbnQgdmlkOworCisJc3dpdGNoKHZybSkgeworCisJY2FzZSAgMDoKKwkJcmV0dXJuIDA7CisKKwljYXNlIDEwMDogICAgICAgICAgICAgICAvKiBWUkQgMTAuMCAqLworCQlpZigodmFsICYgMHgxZikgPT0gMHgxZikKKwkJCXJldHVybiAwOworCQlpZigodmFsICYgMHgxZikgPD0gMHgwOSB8fCB2YWwgPT0gMHgwYSkKKwkJCXZpZCA9IDEwODc1IC0gKHZhbCAmIDB4MWYpICogMjUwOworCQllbHNlCisJCQl2aWQgPSAxODYyNSAtICh2YWwgJiAweDFmKSAqIDI1MDsKKwkJaWYodmFsICYgMHgyMCkKKwkJCXZpZCAtPSAxMjU7CisJCXZpZCAvPSAxMDsgICAgICAvKiBvbmx5IHJldHVybiAzIGRlYy4gcGxhY2VzIGZvciBub3cgKi8KKwkJcmV0dXJuIHZpZDsKKworCWNhc2UgMjQ6ICAgICAgICAgICAgICAgIC8qIE9wdGVyb24gcHJvY2Vzc29yICovCisJCXJldHVybih2YWwgPT0gMHgxZiA/IDAgOiAxNTUwIC0gdmFsICogMjUpOworCisJY2FzZSA5MToJCS8qIFZSTSA5LjEgKi8KKwljYXNlIDkwOgkJLyogVlJNIDkuMCAqLworCQlyZXR1cm4odmFsID09IDB4MWYgPyAwIDoKKwkJICAgICAgICAgICAgICAgICAgICAgICAxODUwIC0gdmFsICogMjUpOworCisJY2FzZSA4NToJCS8qIFZSTSA4LjUgKi8KKwkJcmV0dXJuKCh2YWwgJiAweDEwICA/IDI1IDogMCkgKworCQkgICAgICAgKCh2YWwgJiAweDBmKSA+IDB4MDQgPyAyMDUwIDogMTI1MCkgLQorCQkgICAgICAgKCh2YWwgJiAweDBmKSAqIDUwKSk7CisKKwljYXNlIDg0OgkJLyogVlJNIDguNCAqLworCQl2YWwgJj0gMHgwZjsKKwkJCQkvKiBmYWxsIHRocm91Z2ggKi8KKwlkZWZhdWx0OgkJLyogVlJNIDguMiAqLworCQlyZXR1cm4odmFsID09IDB4MWYgPyAwIDoKKwkJICAgICAgIHZhbCAmIDB4MTAgID8gNTEwMCAtICh2YWwpICogMTAwIDoKKwkJICAgICAgICAgICAgICAgICAgICAgMjA1MCAtICh2YWwpICogNTApOworCX0KK30KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaTJjLmggYi9pbmNsdWRlL2xpbnV4L2kyYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViY2Q3NDUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2kyYy5oCkBAIC0wLDAgKzEsNTk0IEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAJCQkJCQkJCQkgICAgICovCisvKiBpMmMuaCAtIGRlZmluaXRpb25zIGZvciB0aGUgaTJjLWJ1cyBpbnRlcmZhY2UJCQkgICAgICovCisvKiAJCQkJCQkJCQkgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgIENvcHlyaWdodCAoQykgMTk5NS0yMDAwIFNpbW9uIEcuIFZvZ2wKKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgkJICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBXaXRoIHNvbWUgY2hhbmdlcyBmcm9tIEt59nN0aSBN5Gxra2kgPGttYWxra2lAY2MuaHV0LmZpPiBhbmQKKyAgIEZyb2RvIExvb2lqYWFyZCA8ZnJvZG9sQGRkcy5ubD4gKi8KKworLyogJElkOiBpMmMuaCx2IDEuNjggMjAwMy8wMS8yMSAwODowODoxNiBrbWFsa2tpIEV4cCAkICovCisKKyNpZm5kZWYgX0xJTlVYX0kyQ19ICisjZGVmaW5lIF9MSU5VWF9JMkNfSAorCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMtaWQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4JLyogZm9yIHN0cnVjdCBkZXZpY2UgKi8KKyNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CisKKy8qIC0tLSBHZW5lcmFsIG9wdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCSovCisKK3N0cnVjdCBpMmNfbXNnOworc3RydWN0IGkyY19hbGdvcml0aG07CitzdHJ1Y3QgaTJjX2FkYXB0ZXI7CitzdHJ1Y3QgaTJjX2NsaWVudDsKK3N0cnVjdCBpMmNfZHJpdmVyOworc3RydWN0IGkyY19jbGllbnRfYWRkcmVzc19kYXRhOwordW5pb24gaTJjX3NtYnVzX2RhdGE7CisKKy8qCisgKiBUaGUgbWFzdGVyIHJvdXRpbmVzIGFyZSB0aGUgb25lcyBub3JtYWxseSB1c2VkIHRvIHRyYW5zbWl0IGRhdGEgdG8gZGV2aWNlcworICogb24gYSBidXMgKG9yIHJlYWQgZnJvbSB0aGVtKS4gQXBhcnQgZnJvbSB0d28gYmFzaWMgdHJhbnNmZXIgZnVuY3Rpb25zIHRvIAorICogdHJhbnNtaXQgb25lIG1lc3NhZ2UgYXQgYSB0aW1lLCBhIG1vcmUgY29tcGxleCB2ZXJzaW9uIGNhbiBiZSB1c2VkIHRvIAorICogdHJhbnNtaXQgYW4gYXJiaXRyYXJ5IG51bWJlciBvZiBtZXNzYWdlcyB3aXRob3V0IGludGVycnVwdGlvbi4KKyAqLworZXh0ZXJuIGludCBpMmNfbWFzdGVyX3NlbmQoc3RydWN0IGkyY19jbGllbnQgKixjb25zdCBjaGFyKiAsaW50KTsKK2V4dGVybiBpbnQgaTJjX21hc3Rlcl9yZWN2KHN0cnVjdCBpMmNfY2xpZW50ICosY2hhciogLGludCk7CisKKy8qIFRyYW5zZmVyIG51bSBtZXNzYWdlcy4KKyAqLworZXh0ZXJuIGludCBpMmNfdHJhbnNmZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwLCBzdHJ1Y3QgaTJjX21zZyAqbXNncywgaW50IG51bSk7CisKKy8qCisgKiBTb21lIGFkYXB0ZXIgdHlwZXMgKGkuZS4gUENGIDg1ODQgYmFzZWQgb25lcykgbWF5IHN1cHBvcnQgc2xhdmUgYmVoYXZpdW9yLiAKKyAqIFRoaXMgaXMgbm90IHRlc3RlZC9pbXBsZW1lbnRlZCB5ZXQgYW5kIHdpbGwgY2hhbmdlIGluIHRoZSBmdXR1cmUuCisgKi8KK2V4dGVybiBpbnQgaTJjX3NsYXZlX3NlbmQoc3RydWN0IGkyY19jbGllbnQgKixjaGFyKixpbnQpOworZXh0ZXJuIGludCBpMmNfc2xhdmVfcmVjdihzdHJ1Y3QgaTJjX2NsaWVudCAqLGNoYXIqLGludCk7CisKKworCisvKiBUaGlzIGlzIHRoZSB2ZXJ5IGdlbmVyYWxpemVkIFNNQnVzIGFjY2VzcyByb3V0aW5lLiBZb3UgcHJvYmFibHkgZG8gbm90CisgICB3YW50IHRvIHVzZSB0aGlzLCB0aG91Z2g7IG9uZSBvZiB0aGUgZnVuY3Rpb25zIGJlbG93IG1heSBiZSBtdWNoIGVhc2llciwKKyAgIGFuZCBwcm9iYWJseSBqdXN0IGFzIGZhc3QuIAorICAgTm90ZSB0aGF0IHdlIHVzZSBpMmNfYWRhcHRlciBoZXJlLCBiZWNhdXNlIHlvdSBkbyBub3QgbmVlZCBhIHNwZWNpZmljCisgICBzbWJ1cyBhZGFwdGVyIHRvIGNhbGwgdGhpcyBmdW5jdGlvbi4gKi8KK2V4dGVybiBzMzIgaTJjX3NtYnVzX3hmZXIgKHN0cnVjdCBpMmNfYWRhcHRlciAqIGFkYXB0ZXIsIHUxNiBhZGRyLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciByZWFkX3dyaXRlLCB1OCBjb21tYW5kLCBpbnQgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaW9uIGkyY19zbWJ1c19kYXRhICogZGF0YSk7CisKKy8qIE5vdyBmb2xsb3cgdGhlICduaWNlJyBhY2Nlc3Mgcm91dGluZXMuIFRoZXNlIGFsc28gZG9jdW1lbnQgdGhlIGNhbGxpbmcKKyAgIGNvbnZlbnRpb25zIG9mIHNtYnVzX2FjY2Vzcy4gKi8KKworZXh0ZXJuIHMzMiBpMmNfc21idXNfd3JpdGVfcXVpY2soc3RydWN0IGkyY19jbGllbnQgKiBjbGllbnQsIHU4IHZhbHVlKTsKK2V4dGVybiBzMzIgaTJjX3NtYnVzX3JlYWRfYnl0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqIGNsaWVudCk7CitleHRlcm4gczMyIGkyY19zbWJ1c193cml0ZV9ieXRlKHN0cnVjdCBpMmNfY2xpZW50ICogY2xpZW50LCB1OCB2YWx1ZSk7CitleHRlcm4gczMyIGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShzdHJ1Y3QgaTJjX2NsaWVudCAqIGNsaWVudCwgdTggY29tbWFuZCk7CitleHRlcm4gczMyIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoc3RydWN0IGkyY19jbGllbnQgKiBjbGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggY29tbWFuZCwgdTggdmFsdWUpOworZXh0ZXJuIHMzMiBpMmNfc21idXNfcmVhZF93b3JkX2RhdGEoc3RydWN0IGkyY19jbGllbnQgKiBjbGllbnQsIHU4IGNvbW1hbmQpOworZXh0ZXJuIHMzMiBpMmNfc21idXNfd3JpdGVfd29yZF9kYXRhKHN0cnVjdCBpMmNfY2xpZW50ICogY2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IGNvbW1hbmQsIHUxNiB2YWx1ZSk7CisvKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQgKi8KK2V4dGVybiBzMzIgaTJjX3NtYnVzX3dyaXRlX2Jsb2NrX2RhdGEoc3RydWN0IGkyY19jbGllbnQgKiBjbGllbnQsCisJCQkJICAgICAgdTggY29tbWFuZCwgdTggbGVuZ3RoLAorCQkJCSAgICAgIHU4ICp2YWx1ZXMpOworZXh0ZXJuIHMzMiBpMmNfc21idXNfcmVhZF9pMmNfYmxvY2tfZGF0YShzdHJ1Y3QgaTJjX2NsaWVudCAqIGNsaWVudCwKKwkJCQkJIHU4IGNvbW1hbmQsIHU4ICp2YWx1ZXMpOworCisvKgorICogQSBkcml2ZXIgaXMgY2FwYWJsZSBvZiBoYW5kbGluZyBvbmUgb3IgbW9yZSBwaHlzaWNhbCBkZXZpY2VzIHByZXNlbnQgb24KKyAqIEkyQyBhZGFwdGVycy4gVGhpcyBpbmZvcm1hdGlvbiBpcyB1c2VkIHRvIGluZm9ybSB0aGUgZHJpdmVyIG9mIGFkYXB0ZXIKKyAqIGV2ZW50cy4KKyAqLworCitzdHJ1Y3QgaTJjX2RyaXZlciB7CisJc3RydWN0IG1vZHVsZSAqb3duZXI7CisJY2hhciBuYW1lWzMyXTsKKwlpbnQgaWQ7CisJdW5zaWduZWQgaW50IGNsYXNzOworCXVuc2lnbmVkIGludCBmbGFnczsJCS8qIGRpdi4sIHNlZSBiZWxvdwkJKi8KKworCS8qIE5vdGlmaWVzIHRoZSBkcml2ZXIgdGhhdCBhIG5ldyBidXMgaGFzIGFwcGVhcmVkLiBUaGlzIHJvdXRpbmUKKwkgKiBjYW4gYmUgdXNlZCBieSB0aGUgZHJpdmVyIHRvIHRlc3QgaWYgdGhlIGJ1cyBtZWV0cyBpdHMgY29uZGl0aW9ucworCSAqICYgc2VlayBmb3IgdGhlIHByZXNlbmNlIG9mIHRoZSBjaGlwKHMpIGl0IHN1cHBvcnRzLiBJZiBmb3VuZCwgaXQgCisJICogcmVnaXN0ZXJzIHRoZSBjbGllbnQocykgdGhhdCBhcmUgb24gdGhlIGJ1cyB0byB0aGUgaTJjIGFkbWluLiB2aWEKKwkgKiBpMmNfYXR0YWNoX2NsaWVudC4KKwkgKi8KKwlpbnQgKCphdHRhY2hfYWRhcHRlcikoc3RydWN0IGkyY19hZGFwdGVyICopOworCWludCAoKmRldGFjaF9hZGFwdGVyKShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKik7CisKKwkvKiB0ZWxscyB0aGUgZHJpdmVyIHRoYXQgYSBjbGllbnQgaXMgYWJvdXQgdG8gYmUgZGVsZXRlZCAmIGdpdmVzIGl0IAorCSAqIHRoZSBjaGFuY2UgdG8gcmVtb3ZlIGl0cyBwcml2YXRlIGRhdGEuIEFsc28sIGlmIHRoZSBjbGllbnQgc3RydWN0CisJICogaGFzIGJlZW4gZHluYW1pY2FsbHkgYWxsb2NhdGVkIGJ5IHRoZSBkcml2ZXIgaW4gdGhlIGZ1bmN0aW9uIGFib3ZlLAorCSAqIGl0IG11c3QgYmUgZnJlZWQgaGVyZS4KKwkgKi8KKwlpbnQgKCpkZXRhY2hfY2xpZW50KShzdHJ1Y3QgaTJjX2NsaWVudCAqKTsKKwkKKwkvKiBhIGlvY3RsIGxpa2UgY29tbWFuZCB0aGF0IGNhbiBiZSB1c2VkIHRvIHBlcmZvcm0gc3BlY2lmaWMgZnVuY3Rpb25zCisJICogd2l0aCB0aGUgZGV2aWNlLgorCSAqLworCWludCAoKmNvbW1hbmQpKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKTsKKworCXN0cnVjdCBkZXZpY2VfZHJpdmVyIGRyaXZlcjsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Cit9OworI2RlZmluZSB0b19pMmNfZHJpdmVyKGQpIGNvbnRhaW5lcl9vZihkLCBzdHJ1Y3QgaTJjX2RyaXZlciwgZHJpdmVyKQorCisjZGVmaW5lIEkyQ19OQU1FX1NJWkUJNTAKKworLyoKKyAqIGkyY19jbGllbnQgaWRlbnRpZmllcyBhIHNpbmdsZSBkZXZpY2UgKGkuZS4gY2hpcCkgdGhhdCBpcyBjb25uZWN0ZWQgdG8gYW4gCisgKiBpMmMgYnVzLiBUaGUgYmVoYXZpb3VyIGlzIGRlZmluZWQgYnkgdGhlIHJvdXRpbmVzIG9mIHRoZSBkcml2ZXIuIFRoaXMKKyAqIGZ1bmN0aW9uIGlzIG1haW5seSB1c2VkIGZvciBsb29rdXAgJiBvdGhlciBhZG1pbi4gZnVuY3Rpb25zLgorICovCitzdHJ1Y3QgaTJjX2NsaWVudCB7CisJdW5zaWduZWQgaW50IGZsYWdzOwkJLyogZGl2Liwgc2VlIGJlbG93CQkqLworCXVuc2lnbmVkIGludCBhZGRyOwkJLyogY2hpcCBhZGRyZXNzIC0gTk9URTogN2JpdCAJKi8KKwkJCQkJLyogYWRkcmVzc2VzIGFyZSBzdG9yZWQgaW4gdGhlCSovCisJCQkJCS8qIF9MT1dFUl8gNyBiaXRzIG9mIHRoaXMgY2hhcgkqLworCS8qIGFkZHI6IHVuc2lnbmVkIGludCB0byBtYWtlIGxtX3NlbnNvcnMgaTJjLWlzYSBhZGFwdGVyIHdvcmsKKwkgIG1vcmUgY2xlYW5seS4gSXQgZG9lcyBub3QgdGFrZSBhbnkgbW9yZSBtZW1vcnkgc3BhY2UsIGR1ZSB0bworCSAgYWxpZ25tZW50IGNvbnNpZGVyYXRpb25zICovCisJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyOwkvKiB0aGUgYWRhcHRlciB3ZSBzaXQgb24JKi8KKwlzdHJ1Y3QgaTJjX2RyaXZlciAqZHJpdmVyOwkvKiBhbmQgb3VyIGFjY2VzcyByb3V0aW5lcwkqLworCWludCB1c2FnZV9jb3VudDsJCS8qIEhvdyBtYW55IGFjY2Vzc2VzIGN1cnJlbnRseSAgKi8KKwkJCQkJLyogdG8gdGhlIGNsaWVudAkJKi8KKwlzdHJ1Y3QgZGV2aWNlIGRldjsJCS8qIHRoZSBkZXZpY2Ugc3RydWN0dXJlCQkqLworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwljaGFyIG5hbWVbSTJDX05BTUVfU0laRV07CisJc3RydWN0IGNvbXBsZXRpb24gcmVsZWFzZWQ7Cit9OworI2RlZmluZSB0b19pMmNfY2xpZW50KGQpIGNvbnRhaW5lcl9vZihkLCBzdHJ1Y3QgaTJjX2NsaWVudCwgZGV2KQorCitzdGF0aWMgaW5saW5lIHZvaWQgKmkyY19nZXRfY2xpZW50ZGF0YSAoc3RydWN0IGkyY19jbGllbnQgKmRldikKK3sKKwlyZXR1cm4gZGV2X2dldF9kcnZkYXRhICgmZGV2LT5kZXYpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaTJjX3NldF9jbGllbnRkYXRhIChzdHJ1Y3QgaTJjX2NsaWVudCAqZGV2LCB2b2lkICpkYXRhKQoreworCWRldl9zZXRfZHJ2ZGF0YSAoJmRldi0+ZGV2LCBkYXRhKTsKK30KKworI2RlZmluZSBJMkNfREVWTkFNRShzdHIpCS5uYW1lID0gc3RyCisKK3N0YXRpYyBpbmxpbmUgY2hhciAqaTJjX2NsaWVudG5hbWUoc3RydWN0IGkyY19jbGllbnQgKmMpCit7CisJcmV0dXJuICZjLT5uYW1lWzBdOworfQorCisvKgorICogVGhlIGZvbGxvd2luZyBzdHJ1Y3RzIGFyZSBmb3IgdGhvc2Ugd2hvIGxpa2UgdG8gaW1wbGVtZW50IG5ldyBidXMgZHJpdmVyczoKKyAqIGkyY19hbGdvcml0aG0gaXMgdGhlIGludGVyZmFjZSB0byBhIGNsYXNzIG9mIGhhcmR3YXJlIHNvbHV0aW9ucyB3aGljaCBjYW4KKyAqIGJlIGFkZHJlc3NlZCB1c2luZyB0aGUgc2FtZSBidXMgYWxnb3JpdGhtcyAtIGkuZS4gYml0LWJhbmdpbmcgb3IgdGhlIFBDRjg1ODQKKyAqIHRvIG5hbWUgdHdvIG9mIHRoZSBtb3N0IGNvbW1vbi4KKyAqLworc3RydWN0IGkyY19hbGdvcml0aG0geworCWNoYXIgbmFtZVszMl07CQkJCS8qIHRleHR1YWwgZGVzY3JpcHRpb24gCSovCisJdW5zaWduZWQgaW50IGlkOworCisJLyogSWYgYW4gYWRhcHRlciBhbGdvcml0aG0gY2FuJ3QgZG8gSTJDLWxldmVsIGFjY2Vzcywgc2V0IG1hc3Rlcl94ZmVyCisJICAgdG8gTlVMTC4gSWYgYW4gYWRhcHRlciBhbGdvcml0aG0gY2FuIGRvIFNNQnVzIGFjY2Vzcywgc2V0IAorCSAgIHNtYnVzX3hmZXIuIElmIHNldCB0byBOVUxMLCB0aGUgU01CdXMgcHJvdG9jb2wgaXMgc2ltdWxhdGVkCisJICAgdXNpbmcgY29tbW9uIEkyQyBtZXNzYWdlcyAqLworCWludCAoKm1hc3Rlcl94ZmVyKShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsc3RydWN0IGkyY19tc2cgKm1zZ3MsIAorCSAgICAgICAgICAgICAgICAgICBpbnQgbnVtKTsKKwlpbnQgKCpzbWJ1c194ZmVyKSAoc3RydWN0IGkyY19hZGFwdGVyICphZGFwLCB1MTYgYWRkciwgCisJICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGZsYWdzLCBjaGFyIHJlYWRfd3JpdGUsCisJICAgICAgICAgICAgICAgICAgIHU4IGNvbW1hbmQsIGludCBzaXplLCB1bmlvbiBpMmNfc21idXNfZGF0YSAqIGRhdGEpOworCisJLyogLS0tIHRoZXNlIG9wdGlvbmFsL2Z1dHVyZSB1c2UgZm9yIHNvbWUgYWRhcHRlciB0eXBlcy4qLworCWludCAoKnNsYXZlX3NlbmQpKHN0cnVjdCBpMmNfYWRhcHRlciAqLGNoYXIqLGludCk7CisJaW50ICgqc2xhdmVfcmVjdikoc3RydWN0IGkyY19hZGFwdGVyICosY2hhciosaW50KTsKKworCS8qIC0tLSBpb2N0bCBsaWtlIGNhbGwgdG8gc2V0IGRpdi4gcGFyYW1ldGVycy4gKi8KKwlpbnQgKCphbGdvX2NvbnRyb2wpKHN0cnVjdCBpMmNfYWRhcHRlciAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpOworCisJLyogVG8gZGV0ZXJtaW5lIHdoYXQgdGhlIGFkYXB0ZXIgc3VwcG9ydHMgKi8KKwl1MzIgKCpmdW5jdGlvbmFsaXR5KSAoc3RydWN0IGkyY19hZGFwdGVyICopOworfTsKKworLyoKKyAqIGkyY19hZGFwdGVyIGlzIHRoZSBzdHJ1Y3R1cmUgdXNlZCB0byBpZGVudGlmeSBhIHBoeXNpY2FsIGkyYyBidXMgYWxvbmcKKyAqIHdpdGggdGhlIGFjY2VzcyBhbGdvcml0aG1zIG5lY2Vzc2FyeSB0byBhY2Nlc3MgaXQuCisgKi8KK3N0cnVjdCBpMmNfYWRhcHRlciB7CisJc3RydWN0IG1vZHVsZSAqb3duZXI7CisJdW5zaWduZWQgaW50IGlkOy8qID09IGlzIGFsZ28tPmlkIHwgaHdkZXAuc3RydWN0LT5pZCwgCQkqLworCQkJLyogZm9yIHJlZ2lzdGVyZWQgdmFsdWVzIHNlZSBiZWxvdwkJKi8KKwl1bnNpZ25lZCBpbnQgY2xhc3M7CisJc3RydWN0IGkyY19hbGdvcml0aG0gKmFsZ287LyogdGhlIGFsZ29yaXRobSB0byBhY2Nlc3MgdGhlIGJ1cwkqLworCXZvaWQgKmFsZ29fZGF0YTsKKworCS8qIC0tLSBhZG1pbmlzdHJhdGlvbiBzdHVmZi4gKi8KKwlpbnQgKCpjbGllbnRfcmVnaXN0ZXIpKHN0cnVjdCBpMmNfY2xpZW50ICopOworCWludCAoKmNsaWVudF91bnJlZ2lzdGVyKShzdHJ1Y3QgaTJjX2NsaWVudCAqKTsKKworCS8qIGRhdGEgZmllbGRzIHRoYXQgYXJlIHZhbGlkIGZvciBhbGwgZGV2aWNlcwkqLworCXN0cnVjdCBzZW1hcGhvcmUgYnVzX2xvY2s7CisJc3RydWN0IHNlbWFwaG9yZSBjbGlzdF9sb2NrOworCisJaW50IHRpbWVvdXQ7CisJaW50IHJldHJpZXM7CisJc3RydWN0IGRldmljZSBkZXY7CQkvKiB0aGUgYWRhcHRlciBkZXZpY2UgKi8KKwlzdHJ1Y3QgY2xhc3NfZGV2aWNlIGNsYXNzX2RldjsJLyogdGhlIGNsYXNzIGRldmljZSAqLworCisjaWZkZWYgQ09ORklHX1BST0NfRlMgCisJLyogTm8gbmVlZCB0byBzZXQgdGhpcyB3aGVuIHlvdSBpbml0aWFsaXplIHRoZSBhZGFwdGVyICAgICAgICAgICovCisJaW50IGlub2RlOworI2VuZGlmIC8qIGRlZiBDT05GSUdfUFJPQ19GUyAqLworCisJaW50IG5yOworCXN0cnVjdCBsaXN0X2hlYWQgY2xpZW50czsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJY2hhciBuYW1lW0kyQ19OQU1FX1NJWkVdOworCXN0cnVjdCBjb21wbGV0aW9uIGRldl9yZWxlYXNlZDsKKwlzdHJ1Y3QgY29tcGxldGlvbiBjbGFzc19kZXZfcmVsZWFzZWQ7Cit9OworI2RlZmluZSBkZXZfdG9faTJjX2FkYXB0ZXIoZCkgY29udGFpbmVyX29mKGQsIHN0cnVjdCBpMmNfYWRhcHRlciwgZGV2KQorI2RlZmluZSBjbGFzc19kZXZfdG9faTJjX2FkYXB0ZXIoZCkgY29udGFpbmVyX29mKGQsIHN0cnVjdCBpMmNfYWRhcHRlciwgY2xhc3NfZGV2KQorCitzdGF0aWMgaW5saW5lIHZvaWQgKmkyY19nZXRfYWRhcGRhdGEgKHN0cnVjdCBpMmNfYWRhcHRlciAqZGV2KQoreworCXJldHVybiBkZXZfZ2V0X2RydmRhdGEgKCZkZXYtPmRldik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpMmNfc2V0X2FkYXBkYXRhIChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmRldiwgdm9pZCAqZGF0YSkKK3sKKwlkZXZfc2V0X2RydmRhdGEgKCZkZXYtPmRldiwgZGF0YSk7Cit9CisKKy8qZmxhZ3MgZm9yIHRoZSBkcml2ZXIgc3RydWN0OiAqLworI2RlZmluZSBJMkNfREZfTk9USUZZCTB4MDEJCS8qIG5vdGlmeSBvbiBidXMgKGRlL2EpdHRhY2hlcyAJKi8KKyNpZiAwCisvKiB0aGlzIGZsYWcgaXMgZ29uZSAtLSB0aGVyZSBpcyBhIChvcHRpb25hbCkgZHJpdmVyLT5kZXRhY2hfYWRhcHRlcgorICogY2FsbGJhY2sgbm93IHdoaWNoIGNhbiBiZSB1c2VkIGluc3RlYWQgKi8KKyMgZGVmaW5lIEkyQ19ERl9EVU1NWQkweDAyCisjZW5kaWYKKworLypmbGFncyBmb3IgdGhlIGNsaWVudCBzdHJ1Y3Q6ICovCisjZGVmaW5lIEkyQ19DTElFTlRfQUxMT1dfVVNFCQkweDAxCS8qIENsaWVudCBhbGxvd3MgYWNjZXNzICovCisjZGVmaW5lIEkyQ19DTElFTlRfQUxMT1dfTVVMVElQTEVfVVNFIAkweDAyICAJLyogQWxsb3cgbXVsdGlwbGUgYWNjZXNzLWxvY2tzICovCisJCQkJCQkvKiBvbiBhbiBpMmNfY2xpZW50ICovCisjZGVmaW5lIEkyQ19DTElFTlRfUEVDICAweDA0CQkJLyogVXNlIFBhY2tldCBFcnJvciBDaGVja2luZyAqLworI2RlZmluZSBJMkNfQ0xJRU5UX1RFTgkweDEwCQkJLyogd2UgaGF2ZSBhIHRlbiBiaXQgY2hpcCBhZGRyZXNzCSovCisJCQkJCQkvKiBNdXN0IGVxdWFsIEkyQ19NX1RFTiBiZWxvdyAqLworCisvKiBpMmMgYWRhcHRlciBjbGFzc2VzIChiaXRtYXNrKSAqLworI2RlZmluZSBJMkNfQ0xBU1NfSFdNT04JCSgxPDwwKQkvKiBsbV9zZW5zb3JzLCAuLi4gKi8KKyNkZWZpbmUgSTJDX0NMQVNTX1RWX0FOQUxPRwkoMTw8MSkJLyogYnR0diArIGZyaWVuZHMgKi8KKyNkZWZpbmUgSTJDX0NMQVNTX1RWX0RJR0lUQUwJKDE8PDIpCS8qIGR2YiBjYXJkcyAqLworI2RlZmluZSBJMkNfQ0xBU1NfRERDCQkoMTw8MykJLyogaTJjLW1hdHJveGZiID8gKi8KKyNkZWZpbmUgSTJDX0NMQVNTX0NBTV9BTkFMT0cJKDE8PDQpCS8qIGNhbWVyYSB3aXRoIGFuYWxvZyBDQ0QgKi8KKyNkZWZpbmUgSTJDX0NMQVNTX0NBTV9ESUdJVEFMCSgxPDw1KQkvKiBtb3N0IHdlYmNhbXMgKi8KKyNkZWZpbmUgSTJDX0NMQVNTX1NPVU5ECQkoMTw8NikJLyogc291bmQgZGV2aWNlcyAqLworI2RlZmluZSBJMkNfQ0xBU1NfQUxMCQkoVUlOVF9NQVgpIC8qIGFsbCBvZiB0aGUgYWJvdmUgKi8KKworLyogaTJjX2NsaWVudF9hZGRyZXNzX2RhdGEgaXMgdGhlIHN0cnVjdCBmb3IgaG9sZGluZyBkZWZhdWx0IGNsaWVudAorICogYWRkcmVzc2VzIGZvciBhIGRyaXZlciBhbmQgZm9yIHRoZSBwYXJhbWV0ZXJzIHN1cHBsaWVkIG9uIHRoZQorICogY29tbWFuZCBsaW5lCisgKi8KK3N0cnVjdCBpMmNfY2xpZW50X2FkZHJlc3NfZGF0YSB7CisJdW5zaWduZWQgc2hvcnQgKm5vcm1hbF9pMmM7CisJdW5zaWduZWQgc2hvcnQgKm5vcm1hbF9pMmNfcmFuZ2U7CisJdW5zaWduZWQgc2hvcnQgKnByb2JlOworCXVuc2lnbmVkIHNob3J0ICpwcm9iZV9yYW5nZTsKKwl1bnNpZ25lZCBzaG9ydCAqaWdub3JlOworCXVuc2lnbmVkIHNob3J0ICppZ25vcmVfcmFuZ2U7CisJdW5zaWduZWQgc2hvcnQgKmZvcmNlOworfTsKKworLyogSW50ZXJuYWwgbnVtYmVycyB0byB0ZXJtaW5hdGUgbGlzdHMgKi8KKyNkZWZpbmUgSTJDX0NMSUVOVF9FTkQJCTB4ZmZmZVUKKyNkZWZpbmUgSTJDX0NMSUVOVF9JU0FfRU5ECTB4ZmZmZWZmZmVVCisKKy8qIFRoZSBudW1iZXJzIHRvIHVzZSB0byBzZXQgSTJDIGJ1cyBhZGRyZXNzICovCisjZGVmaW5lIEFOWV9JMkNfQlVTCQkweGZmZmYKKyNkZWZpbmUgQU5ZX0kyQ19JU0FfQlVTCQk5MTkxCisKKworLyogLS0tLS0gZnVuY3Rpb25zIGV4cG9ydGVkIGJ5IGkyYy5vICovCisKKy8qIGFkbWluaXN0cmF0aW9uLi4uCisgKi8KK2V4dGVybiBpbnQgaTJjX2FkZF9hZGFwdGVyKHN0cnVjdCBpMmNfYWRhcHRlciAqKTsKK2V4dGVybiBpbnQgaTJjX2RlbF9hZGFwdGVyKHN0cnVjdCBpMmNfYWRhcHRlciAqKTsKKworZXh0ZXJuIGludCBpMmNfYWRkX2RyaXZlcihzdHJ1Y3QgaTJjX2RyaXZlciAqKTsKK2V4dGVybiBpbnQgaTJjX2RlbF9kcml2ZXIoc3RydWN0IGkyY19kcml2ZXIgKik7CisKK2V4dGVybiBpbnQgaTJjX2F0dGFjaF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKik7CitleHRlcm4gaW50IGkyY19kZXRhY2hfY2xpZW50KHN0cnVjdCBpMmNfY2xpZW50ICopOworCisvKiBOZXcgZnVuY3Rpb246IFRoaXMgaXMgdG8gZ2V0IGFuIGkyY19jbGllbnQtc3RydWN0IGZvciBjb250cm9sbGluZyB0aGUgCisgICBjbGllbnQgZWl0aGVyIGJ5IHVzaW5nIGkyY19jb250cm9sLWZ1bmN0aW9uIG9yIGhhdmluZyB0aGUgCisgICBjbGllbnQtbW9kdWxlIGV4cG9ydCBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgdXNlZCB3aXRoIHRoZSBpMmNfY2xpZW50CisgICAtc3RydWN0LiAqLworZXh0ZXJuIHN0cnVjdCBpMmNfY2xpZW50ICppMmNfZ2V0X2NsaWVudChpbnQgZHJpdmVyX2lkLCBpbnQgYWRhcHRlcl9pZCwgCisJCQkJCXN0cnVjdCBpMmNfY2xpZW50ICpwcmV2KTsKKworLyogU2hvdWxkIGJlIHVzZWQgd2l0aCBuZXcgZnVuY3Rpb24KKyAgIGV4dGVybiBzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjX2dldF9jbGllbnQoaW50LGludCxzdHJ1Y3QgaTJjX2NsaWVudCAqKTsKKyAgIHRvIG1ha2Ugc3VyZSB0aGF0IGNsaWVudC1zdHJ1Y3QgaXMgdmFsaWQgYW5kIHRoYXQgaXQgaXMgb2theSB0byBhY2Nlc3MKKyAgIHRoZSBpMmMtY2xpZW50LiAKKyAgIHJldHVybnMgLUVBQ0NFUyBpZiBjbGllbnQgZG9lc24ndCBhbGxvdyB1c2UgKGRlZmF1bHQpCisgICByZXR1cm5zIC1FQlVTWSBpZiBjbGllbnQgZG9lc24ndCBhbGxvdyBtdWx0aXBsZSB1c2UgKGRlZmF1bHQpIGFuZCAKKyAgIHVzYWdlX2NvdW50ID4wICovCitleHRlcm4gaW50IGkyY191c2VfY2xpZW50KHN0cnVjdCBpMmNfY2xpZW50ICopOworZXh0ZXJuIGludCBpMmNfcmVsZWFzZV9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKik7CisKKy8qIGNhbGwgdGhlIGkyY19jbGllbnQtPmNvbW1hbmQoKSBvZiBhbGwgYXR0YWNoZWQgY2xpZW50cyB3aXRoCisgKiB0aGUgZ2l2ZW4gYXJndW1lbnRzICovCitleHRlcm4gdm9pZCBpMmNfY2xpZW50c19jb21tYW5kKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCwKKwkJCQl1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpOworCisvKiByZXR1cm5zIC1FQlVTWSBpZiBhZGRyZXNzIGhhcyBiZWVuIHRha2VuLCAwIGlmIG5vdC4gTm90ZSB0aGF0IHRoZSBvbmx5CisgICBvdGhlciBwbGFjZSBhdCB3aGljaCB0aGlzIGlzIGNhbGxlZCBpcyB3aXRoaW4gaTJjX2F0dGFjaF9jbGllbnQ7IHNvCisgICB5b3UgY2FuIGNoZWF0IGJ5IHNpbXBseSBub3QgcmVnaXN0ZXJpbmcuIE5vdCByZWNvbW1lbmRlZCwgb2YgY291cnNlISAqLworZXh0ZXJuIGludCBpMmNfY2hlY2tfYWRkciAoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkcik7CisKKy8qIERldGVjdCBmdW5jdGlvbi4gSXQgaXRlcmF0ZXMgb3ZlciBhbGwgcG9zc2libGUgYWRkcmVzc2VzIGl0c2VsZi4KKyAqIEl0IHdpbGwgb25seSBjYWxsIGZvdW5kX3Byb2MgaWYgc29tZSBjbGllbnQgaXMgY29ubmVjdGVkIGF0IHRoZQorICogc3BlY2lmaWMgYWRkcmVzcyAodW5sZXNzIGEgJ2ZvcmNlJyBtYXRjaGVkKTsKKyAqLworZXh0ZXJuIGludCBpMmNfcHJvYmUoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCAKKwkJc3RydWN0IGkyY19jbGllbnRfYWRkcmVzc19kYXRhICphZGRyZXNzX2RhdGEsCisJCWludCAoKmZvdW5kX3Byb2MpIChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKiwgaW50LCBpbnQpKTsKKworLyogQW4gaW9jdGwgbGlrZSBjYWxsIHRvIHNldCBkaXYuIHBhcmFtZXRlcnMgb2YgdGhlIGFkYXB0ZXIuCisgKi8KK2V4dGVybiBpbnQgaTJjX2NvbnRyb2woc3RydWN0IGkyY19jbGllbnQgKix1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpOworCisvKiBUaGlzIGNhbGwgcmV0dXJucyBhIHVuaXF1ZSBsb3cgaWRlbnRpZmllciBmb3IgZWFjaCByZWdpc3RlcmVkIGFkYXB0ZXIsCisgKiBvciAtMSBpZiB0aGUgYWRhcHRlciB3YXMgbm90IHJlZ2lzdGVyZWQuIAorICovCitleHRlcm4gaW50IGkyY19hZGFwdGVyX2lkKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCk7CitleHRlcm4gc3RydWN0IGkyY19hZGFwdGVyKiBpMmNfZ2V0X2FkYXB0ZXIoaW50IGlkKTsKK2V4dGVybiB2b2lkIGkyY19wdXRfYWRhcHRlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXApOworCisKKy8qIFJldHVybiB0aGUgZnVuY3Rpb25hbGl0eSBtYXNrICovCitzdGF0aWMgaW5saW5lIHUzMiBpMmNfZ2V0X2Z1bmN0aW9uYWxpdHkoc3RydWN0IGkyY19hZGFwdGVyICphZGFwKQoreworCXJldHVybiBhZGFwLT5hbGdvLT5mdW5jdGlvbmFsaXR5KGFkYXApOworfQorCisvKiBSZXR1cm4gMSBpZiBhZGFwdGVyIHN1cHBvcnRzIGV2ZXJ5dGhpbmcgd2UgbmVlZCwgMCBpZiBub3QuICovCitzdGF0aWMgaW5saW5lIGludCBpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsIHUzMiBmdW5jKQoreworCXJldHVybiAoZnVuYyAmIGkyY19nZXRfZnVuY3Rpb25hbGl0eShhZGFwKSkgPT0gZnVuYzsKK30KKworLyoKKyAqIEkyQyBNZXNzYWdlIC0gdXNlZCBmb3IgcHVyZSBpMmMgdHJhbnNhY3Rpb24sIGFsc28gZnJvbSAvZGV2IGludGVyZmFjZQorICovCitzdHJ1Y3QgaTJjX21zZyB7CisJX191MTYgYWRkcjsJLyogc2xhdmUgYWRkcmVzcwkJCSovCisgCV9fdTE2IGZsYWdzOwkJCisjZGVmaW5lIEkyQ19NX1RFTgkweDEwCS8qIHdlIGhhdmUgYSB0ZW4gYml0IGNoaXAgYWRkcmVzcwkqLworI2RlZmluZSBJMkNfTV9SRAkweDAxCisjZGVmaW5lIEkyQ19NX05PU1RBUlQJMHg0MDAwCisjZGVmaW5lIEkyQ19NX1JFVl9ESVJfQUREUgkweDIwMDAKKyNkZWZpbmUgSTJDX01fSUdOT1JFX05BSwkweDEwMDAKKyNkZWZpbmUgSTJDX01fTk9fUkRfQUNLCQkweDA4MDAKKyAJX191MTYgbGVuOwkJLyogbXNnIGxlbmd0aAkJCQkqLworIAlfX3U4ICpidWY7CQkvKiBwb2ludGVyIHRvIG1zZyBkYXRhCQkJKi8KK307CisKKy8qIFRvIGRldGVybWluZSB3aGF0IGZ1bmN0aW9uYWxpdHkgaXMgcHJlc2VudCAqLworCisjZGVmaW5lIEkyQ19GVU5DX0kyQwkJCTB4MDAwMDAwMDEKKyNkZWZpbmUgSTJDX0ZVTkNfMTBCSVRfQUREUgkJMHgwMDAwMDAwMgorI2RlZmluZSBJMkNfRlVOQ19QUk9UT0NPTF9NQU5HTElORwkweDAwMDAwMDA0IC8qIEkyQ19NX3tSRVZfRElSX0FERFIsTk9TVEFSVCwuLn0gKi8KKyNkZWZpbmUgSTJDX0ZVTkNfU01CVVNfSFdQRUNfQ0FMQwkweDAwMDAwMDA4IC8qIFNNQnVzIDIuMCAqLworI2RlZmluZSBJMkNfRlVOQ19TTUJVU19SRUFEX1dPUkRfREFUQV9QRUMgIDB4MDAwMDA4MDAgLyogU01CdXMgMi4wICovIAorI2RlZmluZSBJMkNfRlVOQ19TTUJVU19XUklURV9XT1JEX0RBVEFfUEVDIDB4MDAwMDEwMDAgLyogU01CdXMgMi4wICovIAorI2RlZmluZSBJMkNfRlVOQ19TTUJVU19QUk9DX0NBTExfUEVDCTB4MDAwMDIwMDAgLyogU01CdXMgMi4wICovCisjZGVmaW5lIEkyQ19GVU5DX1NNQlVTX0JMT0NLX1BST0NfQ0FMTF9QRUMgMHgwMDAwNDAwMCAvKiBTTUJ1cyAyLjAgKi8KKyNkZWZpbmUgSTJDX0ZVTkNfU01CVVNfQkxPQ0tfUFJPQ19DQUxMCTB4MDAwMDgwMDAgLyogU01CdXMgMi4wICovCisjZGVmaW5lIEkyQ19GVU5DX1NNQlVTX1FVSUNLCQkweDAwMDEwMDAwIAorI2RlZmluZSBJMkNfRlVOQ19TTUJVU19SRUFEX0JZVEUJMHgwMDAyMDAwMCAKKyNkZWZpbmUgSTJDX0ZVTkNfU01CVVNfV1JJVEVfQllURQkweDAwMDQwMDAwIAorI2RlZmluZSBJMkNfRlVOQ19TTUJVU19SRUFEX0JZVEVfREFUQQkweDAwMDgwMDAwIAorI2RlZmluZSBJMkNfRlVOQ19TTUJVU19XUklURV9CWVRFX0RBVEEJMHgwMDEwMDAwMCAKKyNkZWZpbmUgSTJDX0ZVTkNfU01CVVNfUkVBRF9XT1JEX0RBVEEJMHgwMDIwMDAwMCAKKyNkZWZpbmUgSTJDX0ZVTkNfU01CVVNfV1JJVEVfV09SRF9EQVRBCTB4MDA0MDAwMDAgCisjZGVmaW5lIEkyQ19GVU5DX1NNQlVTX1BST0NfQ0FMTAkweDAwODAwMDAwIAorI2RlZmluZSBJMkNfRlVOQ19TTUJVU19SRUFEX0JMT0NLX0RBVEEJMHgwMTAwMDAwMCAKKyNkZWZpbmUgSTJDX0ZVTkNfU01CVVNfV1JJVEVfQkxPQ0tfREFUQSAweDAyMDAwMDAwIAorI2RlZmluZSBJMkNfRlVOQ19TTUJVU19SRUFEX0kyQ19CTE9DSwkweDA0MDAwMDAwIC8qIEkyQy1saWtlIGJsb2NrIHhmZXIgICovCisjZGVmaW5lIEkyQ19GVU5DX1NNQlVTX1dSSVRFX0kyQ19CTE9DSwkweDA4MDAwMDAwIC8qIHcvIDEtYnl0ZSByZWcuIGFkZHIuICovCisjZGVmaW5lIEkyQ19GVU5DX1NNQlVTX1JFQURfSTJDX0JMT0NLXzIJIDB4MTAwMDAwMDAgLyogSTJDLWxpa2UgYmxvY2sgeGZlciAgKi8KKyNkZWZpbmUgSTJDX0ZVTkNfU01CVVNfV1JJVEVfSTJDX0JMT0NLXzIgMHgyMDAwMDAwMCAvKiB3LyAyLWJ5dGUgcmVnLiBhZGRyLiAqLworI2RlZmluZSBJMkNfRlVOQ19TTUJVU19SRUFEX0JMT0NLX0RBVEFfUEVDICAweDQwMDAwMDAwIC8qIFNNQnVzIDIuMCAqLworI2RlZmluZSBJMkNfRlVOQ19TTUJVU19XUklURV9CTE9DS19EQVRBX1BFQyAweDgwMDAwMDAwIC8qIFNNQnVzIDIuMCAqLworCisjZGVmaW5lIEkyQ19GVU5DX1NNQlVTX0JZVEUgKEkyQ19GVU5DX1NNQlVTX1JFQURfQllURSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDX0ZVTkNfU01CVVNfV1JJVEVfQllURSkKKyNkZWZpbmUgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBIChJMkNfRlVOQ19TTUJVU19SRUFEX0JZVEVfREFUQSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJMkNfRlVOQ19TTUJVU19XUklURV9CWVRFX0RBVEEpCisjZGVmaW5lIEkyQ19GVU5DX1NNQlVTX1dPUkRfREFUQSAoSTJDX0ZVTkNfU01CVVNfUkVBRF9XT1JEX0RBVEEgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDX0ZVTkNfU01CVVNfV1JJVEVfV09SRF9EQVRBKQorI2RlZmluZSBJMkNfRlVOQ19TTUJVU19CTE9DS19EQVRBIChJMkNfRlVOQ19TTUJVU19SRUFEX0JMT0NLX0RBVEEgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQ19GVU5DX1NNQlVTX1dSSVRFX0JMT0NLX0RBVEEpCisjZGVmaW5lIEkyQ19GVU5DX1NNQlVTX0kyQ19CTE9DSyAoSTJDX0ZVTkNfU01CVVNfUkVBRF9JMkNfQkxPQ0sgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDX0ZVTkNfU01CVVNfV1JJVEVfSTJDX0JMT0NLKQorI2RlZmluZSBJMkNfRlVOQ19TTUJVU19JMkNfQkxPQ0tfMiAoSTJDX0ZVTkNfU01CVVNfUkVBRF9JMkNfQkxPQ0tfMiB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQ19GVU5DX1NNQlVTX1dSSVRFX0kyQ19CTE9DS18yKQorI2RlZmluZSBJMkNfRlVOQ19TTUJVU19CTE9DS19EQVRBX1BFQyAoSTJDX0ZVTkNfU01CVVNfUkVBRF9CTE9DS19EQVRBX1BFQyB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQ19GVU5DX1NNQlVTX1dSSVRFX0JMT0NLX0RBVEFfUEVDKQorI2RlZmluZSBJMkNfRlVOQ19TTUJVU19XT1JEX0RBVEFfUEVDICAoSTJDX0ZVTkNfU01CVVNfUkVBRF9XT1JEX0RBVEFfUEVDIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDX0ZVTkNfU01CVVNfV1JJVEVfV09SRF9EQVRBX1BFQykKKworI2RlZmluZSBJMkNfRlVOQ19TTUJVU19SRUFEX0JZVEVfUEVDCQlJMkNfRlVOQ19TTUJVU19SRUFEX0JZVEVfREFUQQorI2RlZmluZSBJMkNfRlVOQ19TTUJVU19XUklURV9CWVRFX1BFQwkJSTJDX0ZVTkNfU01CVVNfV1JJVEVfQllURV9EQVRBCisjZGVmaW5lIEkyQ19GVU5DX1NNQlVTX1JFQURfQllURV9EQVRBX1BFQwlJMkNfRlVOQ19TTUJVU19SRUFEX1dPUkRfREFUQQorI2RlZmluZSBJMkNfRlVOQ19TTUJVU19XUklURV9CWVRFX0RBVEFfUEVDCUkyQ19GVU5DX1NNQlVTX1dSSVRFX1dPUkRfREFUQQorI2RlZmluZSBJMkNfRlVOQ19TTUJVU19CWVRFX1BFQwkJCUkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQQorI2RlZmluZSBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEFfUEVDCQlJMkNfRlVOQ19TTUJVU19XT1JEX0RBVEEKKworI2RlZmluZSBJMkNfRlVOQ19TTUJVU19FTVVMIChJMkNfRlVOQ19TTUJVU19RVUlDSyB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDX0ZVTkNfU01CVVNfQllURSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJMkNfRlVOQ19TTUJVU19XT1JEX0RBVEEgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQ19GVU5DX1NNQlVTX1BST0NfQ0FMTCB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDX0ZVTkNfU01CVVNfV1JJVEVfQkxPQ0tfREFUQSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDX0ZVTkNfU01CVVNfV1JJVEVfQkxPQ0tfREFUQV9QRUMgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQ19GVU5DX1NNQlVTX0kyQ19CTE9DSykKKworLyogCisgKiBEYXRhIGZvciBTTUJ1cyBNZXNzYWdlcyAKKyAqLworI2RlZmluZSBJMkNfU01CVVNfQkxPQ0tfTUFYCTMyCS8qIEFzIHNwZWNpZmllZCBpbiBTTUJ1cyBzdGFuZGFyZCAqLwkKKyNkZWZpbmUgSTJDX1NNQlVTX0kyQ19CTE9DS19NQVgJMzIJLyogTm90IHNwZWNpZmllZCBidXQgd2UgdXNlIHNhbWUgc3RydWN0dXJlICovCit1bmlvbiBpMmNfc21idXNfZGF0YSB7CisJX191OCBieXRlOworCV9fdTE2IHdvcmQ7CisJX191OCBibG9ja1tJMkNfU01CVVNfQkxPQ0tfTUFYICsgM107IC8qIGJsb2NrWzBdIGlzIHVzZWQgZm9yIGxlbmd0aCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvbmUgbW9yZSBmb3IgcmVhZCBsZW5ndGggaW4gYmxvY2sgcHJvY2VzcyBjYWxsICovCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhbmQgb25lIG1vcmUgZm9yIFBFQyAqLworfTsKKworLyogc21idXNfYWNjZXNzIHJlYWQgb3Igd3JpdGUgbWFya2VycyAqLworI2RlZmluZSBJMkNfU01CVVNfUkVBRAkxCisjZGVmaW5lIEkyQ19TTUJVU19XUklURQkwCisKKy8qIFNNQnVzIHRyYW5zYWN0aW9uIHR5cGVzIChzaXplIHBhcmFtZXRlciBpbiB0aGUgYWJvdmUgZnVuY3Rpb25zKSAKKyAgIE5vdGU6IHRoZXNlIG5vIGxvbmdlciBjb3JyZXNwb25kIHRvIHRoZSAoYXJiaXRyYXJ5KSBQSUlYNCBpbnRlcm5hbCBjb2RlcyEgKi8KKyNkZWZpbmUgSTJDX1NNQlVTX1FVSUNLCQkgICAgMAorI2RlZmluZSBJMkNfU01CVVNfQllURQkJICAgIDEKKyNkZWZpbmUgSTJDX1NNQlVTX0JZVEVfREFUQQkgICAgMiAKKyNkZWZpbmUgSTJDX1NNQlVTX1dPUkRfREFUQQkgICAgMworI2RlZmluZSBJMkNfU01CVVNfUFJPQ19DQUxMCSAgICA0CisjZGVmaW5lIEkyQ19TTUJVU19CTE9DS19EQVRBCSAgICA1CisjZGVmaW5lIEkyQ19TTUJVU19JMkNfQkxPQ0tfREFUQSAgICA2CisjZGVmaW5lIEkyQ19TTUJVU19CTE9DS19QUk9DX0NBTEwgICA3CQkvKiBTTUJ1cyAyLjAgKi8KKyNkZWZpbmUgSTJDX1NNQlVTX0JMT0NLX0RBVEFfUEVDICAgIDgJCS8qIFNNQnVzIDIuMCAqLworI2RlZmluZSBJMkNfU01CVVNfUFJPQ19DQUxMX1BFQyAgICAgOQkJLyogU01CdXMgMi4wICovCisjZGVmaW5lIEkyQ19TTUJVU19CTE9DS19QUk9DX0NBTExfUEVDICAxMAkvKiBTTUJ1cyAyLjAgKi8KKyNkZWZpbmUgSTJDX1NNQlVTX1dPUkRfREFUQV9QRUMJICAgMTEJCS8qIFNNQnVzIDIuMCAqLworCisKKy8qIC0tLS0tIGNvbW1hbmRzIGZvciB0aGUgaW9jdGwgbGlrZSBpMmNfY29tbWFuZCBjYWxsOgorICogbm90ZSB0aGF0IGFkZGl0aW9uYWwgY2FsbHMgYXJlIGRlZmluZWQgaW4gdGhlIGFsZ29yaXRobSBhbmQgaHcgCisgKglkZXBlbmRlbnQgbGF5ZXJzIC0gdGhlc2UgY2FuIGJlIGxpc3RlZCBoZXJlLCBvciBzZWUgdGhlIAorICoJY29ycmVzcG9uZGluZyBoZWFkZXIgZmlsZXMuCisgKi8KKwkJCQkvKiAtPiBiaXQtYWRhcHRlciBzcGVjaWZpYyBpb2N0bHMJKi8KKyNkZWZpbmUgSTJDX1JFVFJJRVMJMHgwNzAxCS8qIG51bWJlciBvZiB0aW1lcyBhIGRldmljZSBhZGRyZXNzICAgICAgKi8KKwkJCQkvKiBzaG91bGQgYmUgcG9sbGVkIHdoZW4gbm90ICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWNrbm93bGVkZ2luZyAJCQkqLworI2RlZmluZSBJMkNfVElNRU9VVAkweDA3MDIJLyogc2V0IHRpbWVvdXQgLSBjYWxsIHdpdGggaW50IAkJKi8KKworCisvKiB0aGlzIGlzIGZvciBpMmMtZGV2LmMJKi8KKyNkZWZpbmUgSTJDX1NMQVZFCTB4MDcwMwkvKiBDaGFuZ2Ugc2xhdmUgYWRkcmVzcwkJCSovCisJCQkJLyogQXR0bi46IFNsYXZlIGFkZHJlc3MgaXMgNyBvciAxMCBiaXRzICovCisjZGVmaW5lIEkyQ19TTEFWRV9GT1JDRQkweDA3MDYJLyogQ2hhbmdlIHNsYXZlIGFkZHJlc3MJCQkqLworCQkJCS8qIEF0dG4uOiBTbGF2ZSBhZGRyZXNzIGlzIDcgb3IgMTAgYml0cyAqLworCQkJCS8qIFRoaXMgY2hhbmdlcyB0aGUgYWRkcmVzcywgZXZlbiBpZiBpdCAqLworCQkJCS8qIGlzIGFscmVhZHkgdGFrZW4hCQkJKi8KKyNkZWZpbmUgSTJDX1RFTkJJVAkweDA3MDQJLyogMCBmb3IgNyBiaXQgYWRkcnMsICE9IDAgZm9yIDEwIGJpdAkqLworCisjZGVmaW5lIEkyQ19GVU5DUwkweDA3MDUJLyogR2V0IHRoZSBhZGFwdGVyIGZ1bmN0aW9uYWxpdHkgKi8KKyNkZWZpbmUgSTJDX1JEV1IJMHgwNzA3CS8qIENvbWJpbmVkIFIvVyB0cmFuc2ZlciAob25lIHN0b3Agb25seSkqLworI2RlZmluZSBJMkNfUEVDCQkweDA3MDgJLyogIT0gMCBmb3IgU01CdXMgUEVDICAgICAgICAgICAgICAgICAgICovCisjaWYgMAorI2RlZmluZSBJMkNfQUNLX1RFU1QJMHgwNzEwCS8qIFNlZSBpZiBhIHNsYXZlIGlzIGF0IGEgc3BlY2lmaWMgYWRkcmVzcyAqLworI2VuZGlmCisKKyNkZWZpbmUgSTJDX1NNQlVTCTB4MDcyMAkvKiBTTUJ1cy1sZXZlbCBhY2Nlc3MgKi8KKworLyogLi4uIGFsZ28tYml0LmMgcmVjb2duaXplcyAqLworI2RlZmluZSBJMkNfVURFTEFZCTB4MDcwNQkvKiBzZXQgZGVsYXkgaW4gbWljcm9zZWNzIGJldHdlZW4gZWFjaAkqLworCQkJCS8qIHdyaXR0ZW4gYnl0ZSAoZXhjZXB0IGFkZHJlc3MpCSovCisjZGVmaW5lIEkyQ19NREVMQVkJMHgwNzA2CS8qIG1pbGxpc2VjIGRlbGF5IGJldHdlZW4gd3JpdHRlbiBieXRlcyAqLworCisvKiAtLS0tLSBJMkMtREVWOiBjaGFyIGRldmljZSBpbnRlcmZhY2Ugc3R1ZmYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEkyQ19NQUpPUgk4OQkJLyogRGV2aWNlIG1ham9yIG51bWJlcgkJKi8KKworLyogVGhlc2UgZGVmaW5lcyBhcmUgdXNlZCBmb3IgcHJvYmluZyBpMmMgY2xpZW50IGFkZHJlc3NlcyAqLworLyogVGhlIGxlbmd0aCBvZiB0aGUgb3B0aW9uIGxpc3RzICovCisjZGVmaW5lIEkyQ19DTElFTlRfTUFYX09QVFMgNDgKKworLyogRGVmYXVsdCBmaWxsIG9mIG1hbnkgdmFyaWFibGVzICovCisjZGVmaW5lIEkyQ19DTElFTlRfREVGQVVMVFMge0kyQ19DTElFTlRfRU5ELCBJMkNfQ0xJRU5UX0VORCwgSTJDX0NMSUVOVF9FTkQsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDX0NMSUVOVF9FTkQsIEkyQ19DTElFTlRfRU5ELCBJMkNfQ0xJRU5UX0VORCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICBJMkNfQ0xJRU5UX0VORCwgSTJDX0NMSUVOVF9FTkQsIEkyQ19DTElFTlRfRU5ELCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQ19DTElFTlRfRU5ELCBJMkNfQ0xJRU5UX0VORCwgSTJDX0NMSUVOVF9FTkQsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDX0NMSUVOVF9FTkQsIEkyQ19DTElFTlRfRU5ELCBJMkNfQ0xJRU5UX0VORCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICBJMkNfQ0xJRU5UX0VORCwgSTJDX0NMSUVOVF9FTkQsIEkyQ19DTElFTlRfRU5ELCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQ19DTElFTlRfRU5ELCBJMkNfQ0xJRU5UX0VORCwgSTJDX0NMSUVOVF9FTkQsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDX0NMSUVOVF9FTkQsIEkyQ19DTElFTlRfRU5ELCBJMkNfQ0xJRU5UX0VORCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICBJMkNfQ0xJRU5UX0VORCwgSTJDX0NMSUVOVF9FTkQsIEkyQ19DTElFTlRfRU5ELCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQ19DTElFTlRfRU5ELCBJMkNfQ0xJRU5UX0VORCwgSTJDX0NMSUVOVF9FTkQsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDX0NMSUVOVF9FTkQsIEkyQ19DTElFTlRfRU5ELCBJMkNfQ0xJRU5UX0VORCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICBJMkNfQ0xJRU5UX0VORCwgSTJDX0NMSUVOVF9FTkQsIEkyQ19DTElFTlRfRU5ELCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQ19DTElFTlRfRU5ELCBJMkNfQ0xJRU5UX0VORCwgSTJDX0NMSUVOVF9FTkQsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDX0NMSUVOVF9FTkQsIEkyQ19DTElFTlRfRU5ELCBJMkNfQ0xJRU5UX0VORCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICBJMkNfQ0xJRU5UX0VORCwgSTJDX0NMSUVOVF9FTkQsIEkyQ19DTElFTlRfRU5ELCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQ19DTElFTlRfRU5ELCBJMkNfQ0xJRU5UX0VORCwgSTJDX0NMSUVOVF9FTkR9CisKKy8qIEkyQ19DTElFTlRfTU9EVUxFX1BBUk0gY3JlYXRlcyBhIG1vZHVsZSBwYXJhbWV0ZXIsIGFuZCBwdXRzIGl0IGluIHRoZQorICAgbW9kdWxlIGhlYWRlciAqLworCisjZGVmaW5lIEkyQ19DTElFTlRfTU9EVUxFX1BBUk0odmFyLGRlc2MpIFwKKyAgc3RhdGljIHVuc2lnbmVkIHNob3J0IHZhcltJMkNfQ0xJRU5UX01BWF9PUFRTXSA9IEkyQ19DTElFTlRfREVGQVVMVFM7IFwKKyAgc3RhdGljIHVuc2lnbmVkIGludCB2YXIjI19udW07IFwKKyAgbW9kdWxlX3BhcmFtX2FycmF5KHZhciwgc2hvcnQsICZ2YXIjI19udW0sIDApOyBcCisgIE1PRFVMRV9QQVJNX0RFU0ModmFyLGRlc2MpCisKKy8qIFRoaXMgaXMgdGhlIG9uZSB5b3Ugd2FudCB0byB1c2UgaW4geW91ciBvd24gbW9kdWxlcyAqLworI2RlZmluZSBJMkNfQ0xJRU5UX0lOU01PRCBcCisgIEkyQ19DTElFTlRfTU9EVUxFX1BBUk0ocHJvYmUsIFwKKyAgICAgICAgICAgICAgICAgICAgICAiTGlzdCBvZiBhZGFwdGVyLGFkZHJlc3MgcGFpcnMgdG8gc2NhbiBhZGRpdGlvbmFsbHkiKTsgXAorICBJMkNfQ0xJRU5UX01PRFVMRV9QQVJNKHByb2JlX3JhbmdlLCBcCisgICAgICAgICAgICAgICAgICAgICAgIkxpc3Qgb2YgYWRhcHRlcixzdGFydC1hZGRyLGVuZC1hZGRyIHRyaXBsZXMgdG8gc2NhbiAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAiYWRkaXRpb25hbGx5Iik7IFwKKyAgSTJDX0NMSUVOVF9NT0RVTEVfUEFSTShpZ25vcmUsIFwKKyAgICAgICAgICAgICAgICAgICAgICAiTGlzdCBvZiBhZGFwdGVyLGFkZHJlc3MgcGFpcnMgbm90IHRvIHNjYW4iKTsgXAorICBJMkNfQ0xJRU5UX01PRFVMRV9QQVJNKGlnbm9yZV9yYW5nZSwgXAorICAgICAgICAgICAgICAgICAgICAgICJMaXN0IG9mIGFkYXB0ZXIsc3RhcnQtYWRkcixlbmQtYWRkciB0cmlwbGVzIG5vdCB0byAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAic2NhbiIpOyBcCisgIEkyQ19DTElFTlRfTU9EVUxFX1BBUk0oZm9yY2UsIFwKKyAgICAgICAgICAgICAgICAgICAgICAiTGlzdCBvZiBhZGFwdGVyLGFkZHJlc3MgcGFpcnMgdG8gYm9sZGx5IGFzc3VtZSAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAidG8gYmUgcHJlc2VudCIpOyBcCisJc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50X2FkZHJlc3NfZGF0YSBhZGRyX2RhdGEgPSB7CQlcCisJCQkubm9ybWFsX2kyYyA9IAkJbm9ybWFsX2kyYywJCVwKKwkJCS5ub3JtYWxfaTJjX3JhbmdlID0Jbm9ybWFsX2kyY19yYW5nZSwJXAorCQkJLnByb2JlID0JCXByb2JlLAkJCVwKKwkJCS5wcm9iZV9yYW5nZSA9CQlwcm9iZV9yYW5nZSwJCVwKKwkJCS5pZ25vcmUgPQkJaWdub3JlLAkJCVwKKwkJCS5pZ25vcmVfcmFuZ2UgPQkJaWdub3JlX3JhbmdlLAkJXAorCQkJLmZvcmNlID0JCWZvcmNlLAkJCVwKKwkJfQorCisvKiBEZXRlY3Qgd2hldGhlciB3ZSBhcmUgb24gdGhlIGlzYSBidXMuIElmIHRoaXMgcmV0dXJucyB0cnVlLCBhbGwgaTJjCisgICBhY2Nlc3Mgd2lsbCBmYWlsISAqLworI2RlZmluZSBpMmNfaXNfaXNhX2NsaWVudChjbGllbnRwdHIpIFwKKyAgICAgICAgKChjbGllbnRwdHIpLT5hZGFwdGVyLT5hbGdvLT5pZCA9PSBJMkNfQUxHT19JU0EpCisjZGVmaW5lIGkyY19pc19pc2FfYWRhcHRlcihhZGFwcHRyKSBcCisgICAgICAgICgoYWRhcHB0ciktPmFsZ28tPmlkID09IEkyQ19BTEdPX0lTQSkKKworI2VuZGlmIC8qIF9MSU5VWF9JMkNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pMm8tZGV2LmggYi9pbmNsdWRlL2xpbnV4L2kyby1kZXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjdmNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9pMm8tZGV2LmgKQEAgLTAsMCArMSw0MDIgQEAKKy8qCisgKiBJMk8gdXNlciBzcGFjZSBhY2Nlc3NpYmxlIHN0cnVjdHVyZXMvQVBJcworICoKKyAqIChjKSBDb3B5cmlnaHQgMTk5OSwgMjAwMCBSZWQgSGF0IFNvZnR3YXJlCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFRoaXMgaGVhZGVyIGZpbGUgZGVmaW5lcyB0aGUgSTJPIEFQSXMgdGhhdCBhcmUgYXZhaWxhYmxlIHRvIGJvdGgKKyAqIHRoZSBrZXJuZWwgYW5kIHVzZXIgbGV2ZWwgYXBwbGljYXRpb25zLiAgS2VybmVsIHNwZWNpZmljIHN0cnVjdHVyZXMKKyAqIGFyZSBkZWZpbmVkIGluIGkyb19vc20uIE9TTXMgc2hvdWxkIGluY2x1ZGUgX29ubHlfIGkyb19vc20uaCB3aGljaAorICogYXV0b21hdGljYWxseSBpbmNsdWRzIHRoaXMgZmlsZS4KKyAqCisgKi8KKworI2lmbmRlZiBfSTJPX0RFVl9ICisjZGVmaW5lIF9JMk9fREVWX0gKKworLyogSG93IG1hbnkgY29udHJvbGxlcnMgYXJlIHdlIGFsbG93aW5nICovCisjZGVmaW5lIE1BWF9JMk9fQ09OVFJPTExFUlMJMzIKKworLy8jaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKworLyoKKyAqIEkyTyBDb250cm9sIElPQ1RMcyBhbmQgc3RydWN0dXJlcworICovCisjZGVmaW5lIEkyT19NQUdJQ19OVU1CRVIJJ2knCisjZGVmaW5lIEkyT0dFVElPUFMJCV9JT1IoSTJPX01BR0lDX05VTUJFUiwwLHU4W01BWF9JMk9fQ09OVFJPTExFUlNdKQorI2RlZmluZSBJMk9IUlRHRVQJCV9JT1dSKEkyT19NQUdJQ19OVU1CRVIsMSxzdHJ1Y3QgaTJvX2NtZF9ocnRsY3QpCisjZGVmaW5lIEkyT0xDVEdFVAkJX0lPV1IoSTJPX01BR0lDX05VTUJFUiwyLHN0cnVjdCBpMm9fY21kX2hydGxjdCkKKyNkZWZpbmUgSTJPUEFSTVNFVAkJX0lPV1IoSTJPX01BR0lDX05VTUJFUiwzLHN0cnVjdCBpMm9fY21kX3BzZXRnZXQpCisjZGVmaW5lIEkyT1BBUk1HRVQJCV9JT1dSKEkyT19NQUdJQ19OVU1CRVIsNCxzdHJ1Y3QgaTJvX2NtZF9wc2V0Z2V0KQorI2RlZmluZSBJMk9TV0RMIAkJX0lPV1IoSTJPX01BR0lDX05VTUJFUiw1LHN0cnVjdCBpMm9fc3dfeGZlcikKKyNkZWZpbmUgSTJPU1dVTCAJCV9JT1dSKEkyT19NQUdJQ19OVU1CRVIsNixzdHJ1Y3QgaTJvX3N3X3hmZXIpCisjZGVmaW5lIEkyT1NXREVMCQlfSU9XUihJMk9fTUFHSUNfTlVNQkVSLDcsc3RydWN0IGkyb19zd194ZmVyKQorI2RlZmluZSBJMk9WQUxJREFURQkJX0lPUihJMk9fTUFHSUNfTlVNQkVSLDgsdTMyKQorI2RlZmluZSBJMk9IVE1MIAkJX0lPV1IoSTJPX01BR0lDX05VTUJFUiw5LHN0cnVjdCBpMm9faHRtbCkKKyNkZWZpbmUgSTJPRVZUUkVHCQlfSU9XKEkyT19NQUdJQ19OVU1CRVIsMTAsc3RydWN0IGkyb19ldnRfaWQpCisjZGVmaW5lIEkyT0VWVEdFVAkJX0lPUihJMk9fTUFHSUNfTlVNQkVSLDExLHN0cnVjdCBpMm9fZXZ0X2luZm8pCisjZGVmaW5lIEkyT1BBU1NUSFJVCQlfSU9SKEkyT19NQUdJQ19OVU1CRVIsMTIsc3RydWN0IGkyb19jbWRfcGFzc3RocnUpCisjZGVmaW5lIEkyT1BBU1NUSFJVMzIJCV9JT1IoSTJPX01BR0lDX05VTUJFUiwxMixzdHJ1Y3QgaTJvX2NtZF9wYXNzdGhydTMyKQorCitzdHJ1Y3QgaTJvX2NtZF9wYXNzdGhydTMyIHsKKwl1bnNpZ25lZCBpbnQgaW9wOwkvKiBJT1AgdW5pdCBudW1iZXIgKi8KKwl1MzIgbXNnOwkJLyogbWVzc2FnZSAqLworfTsKKworc3RydWN0IGkyb19jbWRfcGFzc3RocnUgeworCXVuc2lnbmVkIGludCBpb3A7CS8qIElPUCB1bml0IG51bWJlciAqLworCXZvaWQgX191c2VyICptc2c7CS8qIG1lc3NhZ2UgKi8KK307CisKK3N0cnVjdCBpMm9fY21kX2hydGxjdCB7CisJdW5zaWduZWQgaW50IGlvcDsJLyogSU9QIHVuaXQgbnVtYmVyICovCisJdm9pZCBfX3VzZXIgKnJlc2J1ZjsJLyogQnVmZmVyIGZvciByZXN1bHQgKi8KKwl1bnNpZ25lZCBpbnQgX191c2VyICpyZXNsZW47CS8qIEJ1ZmZlciBsZW5ndGggaW4gYnl0ZXMgKi8KK307CisKK3N0cnVjdCBpMm9fY21kX3BzZXRnZXQgeworCXVuc2lnbmVkIGludCBpb3A7CS8qIElPUCB1bml0IG51bWJlciAqLworCXVuc2lnbmVkIGludCB0aWQ7CS8qIFRhcmdldCBkZXZpY2UgVElEICovCisJdm9pZCBfX3VzZXIgKm9wYnVmOwkvKiBPcGVyYXRpb24gTGlzdCBidWZmZXIgKi8KKwl1bnNpZ25lZCBpbnQgb3BsZW47CS8qIE9wZXJhdGlvbiBMaXN0IGJ1ZmZlciBsZW5ndGggaW4gYnl0ZXMgKi8KKwl2b2lkIF9fdXNlciAqcmVzYnVmOwkvKiBSZXN1bHQgTGlzdCBidWZmZXIgKi8KKwl1bnNpZ25lZCBpbnQgX191c2VyICpyZXNsZW47CS8qIFJlc3VsdCBMaXN0IGJ1ZmZlciBsZW5ndGggaW4gYnl0ZXMgKi8KK307CisKK3N0cnVjdCBpMm9fc3dfeGZlciB7CisJdW5zaWduZWQgaW50IGlvcDsJLyogSU9QIHVuaXQgbnVtYmVyICovCisJdW5zaWduZWQgY2hhciBmbGFnczsJLyogRmxhZ3MgZmllbGQgKi8KKwl1bnNpZ25lZCBjaGFyIHN3X3R5cGU7CS8qIFNvZnR3YXJlIHR5cGUgKi8KKwl1bnNpZ25lZCBpbnQgc3dfaWQ7CS8qIFNvZnR3YXJlIElEICovCisJdm9pZCBfX3VzZXIgKmJ1ZjsJLyogUG9pbnRlciB0byBzb2Z0d2FyZSBidWZmZXIgKi8KKwl1bnNpZ25lZCBpbnQgX191c2VyICpzd2xlbjsJLyogTGVuZ3RoIG9mIHNvZnR3YXJlIGRhdGEgKi8KKwl1bnNpZ25lZCBpbnQgX191c2VyICptYXhmcmFnOwkvKiBNYXhpbXVtIGZyYWdtZW50IGNvdW50ICovCisJdW5zaWduZWQgaW50IF9fdXNlciAqY3VyZnJhZzsJLyogQ3VycmVudCBmcmFnbWVudCBjb3VudCAqLworfTsKKworc3RydWN0IGkyb19odG1sIHsKKwl1bnNpZ25lZCBpbnQgaW9wOwkvKiBJT1AgdW5pdCBudW1iZXIgKi8KKwl1bnNpZ25lZCBpbnQgdGlkOwkvKiBUYXJnZXQgZGV2aWNlIElEICovCisJdW5zaWduZWQgaW50IHBhZ2U7CS8qIEhUTUwgcGFnZSAqLworCXZvaWQgX191c2VyICpyZXNidWY7CS8qIEJ1ZmZlciBmb3IgcmVwbHkgSFRNTCBwYWdlICovCisJdW5zaWduZWQgaW50IF9fdXNlciAqcmVzbGVuOwkvKiBMZW5ndGggaW4gYnl0ZXMgb2YgcmVwbHkgYnVmZmVyICovCisJdm9pZCBfX3VzZXIgKnFidWY7CS8qIFBvaW50ZXIgdG8gSFRUUCBxdWVyeSBzdHJpbmcgKi8KKwl1bnNpZ25lZCBpbnQgcWxlbjsJLyogTGVuZ3RoIGluIGJ5dGVzIG9mIHF1ZXJ5IHN0cmluZyBidWZmZXIgKi8KK307CisKKyNkZWZpbmUgSTJPX0VWVF9RX0xFTiAzMgorCitzdHJ1Y3QgaTJvX2V2dF9pZCB7CisJdW5zaWduZWQgaW50IGlvcDsKKwl1bnNpZ25lZCBpbnQgdGlkOworCXVuc2lnbmVkIGludCBldnRfbWFzazsKK307CisKKy8qIEV2ZW50IGRhdGEgc2l6ZSA9IGZyYW1lIHNpemUgLSBtZXNzYWdlIGhlYWRlciArIGV2dCBpbmRpY2F0b3IgKi8KKyNkZWZpbmUgSTJPX0VWVF9EQVRBX1NJWkUgODgKKworc3RydWN0IGkyb19ldnRfaW5mbyB7CisJc3RydWN0IGkyb19ldnRfaWQgaWQ7CisJdW5zaWduZWQgY2hhciBldnRfZGF0YVtJMk9fRVZUX0RBVEFfU0laRV07CisJdW5zaWduZWQgaW50IGRhdGFfc2l6ZTsKK307CisKK3N0cnVjdCBpMm9fZXZ0X2dldCB7CisJc3RydWN0IGkyb19ldnRfaW5mbyBpbmZvOworCWludCBwZW5kaW5nOworCWludCBsb3N0OworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBIUlQgcmVsYXRlZCBjb25zdGFudHMgYW5kIHN0cnVjdHVyZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgSTJPX0JVU19MT0NBTAkwCisjZGVmaW5lIEkyT19CVVNfSVNBCTEKKyNkZWZpbmUgSTJPX0JVU19FSVNBCTIKKyNkZWZpbmUgSTJPX0JVU19NQ0EJMworI2RlZmluZSBJMk9fQlVTX1BDSQk0CisjZGVmaW5lIEkyT19CVVNfUENNQ0lBCTUKKyNkZWZpbmUgSTJPX0JVU19OVUJVUwk2CisjZGVmaW5lIEkyT19CVVNfQ0FSREJVUyA3CisjZGVmaW5lIEkyT19CVVNfVU5LTk9XTiAweDgwCisKKyNpZm5kZWYgX19LRVJORUxfXworCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdTg7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHUxNjsKK3R5cGVkZWYgdW5zaWduZWQgaW50IHUzMjsKKworI2VuZGlmCQkJCS8qIF9fS0VSTkVMX18gKi8KKwordHlwZWRlZiBzdHJ1Y3QgX2kyb19wY2lfYnVzIHsKKwl1OCBQY2lGdW5jdGlvbk51bWJlcjsKKwl1OCBQY2lEZXZpY2VOdW1iZXI7CisJdTggUGNpQnVzTnVtYmVyOworCXU4IHJlc2VydmVkOworCXUxNiBQY2lWZW5kb3JJRDsKKwl1MTYgUGNpRGV2aWNlSUQ7Cit9IGkyb19wY2lfYnVzOworCit0eXBlZGVmIHN0cnVjdCBfaTJvX2xvY2FsX2J1cyB7CisJdTE2IExiQmFzZUlPUG9ydDsKKwl1MTYgcmVzZXJ2ZWQ7CisJdTMyIExiQmFzZU1lbW9yeUFkZHJlc3M7Cit9IGkyb19sb2NhbF9idXM7CisKK3R5cGVkZWYgc3RydWN0IF9pMm9faXNhX2J1cyB7CisJdTE2IElzYUJhc2VJT1BvcnQ7CisJdTggQ1NOOworCXU4IHJlc2VydmVkOworCXUzMiBJc2FCYXNlTWVtb3J5QWRkcmVzczsKK30gaTJvX2lzYV9idXM7CisKK3R5cGVkZWYgc3RydWN0IF9pMm9fZWlzYV9idXNfaW5mbyB7CisJdTE2IEVpc2FCYXNlSU9Qb3J0OworCXU4IHJlc2VydmVkOworCXU4IEVpc2FTbG90TnVtYmVyOworCXUzMiBFaXNhQmFzZU1lbW9yeUFkZHJlc3M7Cit9IGkyb19laXNhX2J1czsKKwordHlwZWRlZiBzdHJ1Y3QgX2kyb19tY2FfYnVzIHsKKwl1MTYgTWNhQmFzZUlPUG9ydDsKKwl1OCByZXNlcnZlZDsKKwl1OCBNY2FTbG90TnVtYmVyOworCXUzMiBNY2FCYXNlTWVtb3J5QWRkcmVzczsKK30gaTJvX21jYV9idXM7CisKK3R5cGVkZWYgc3RydWN0IF9pMm9fb3RoZXJfYnVzIHsKKwl1MTYgQmFzZUlPUG9ydDsKKwl1MTYgcmVzZXJ2ZWQ7CisJdTMyIEJhc2VNZW1vcnlBZGRyZXNzOworfSBpMm9fb3RoZXJfYnVzOworCit0eXBlZGVmIHN0cnVjdCBfaTJvX2hydF9lbnRyeSB7CisJdTMyIGFkYXB0ZXJfaWQ7CisJdTMyIHBhcmVudF90aWQ6MTI7CisJdTMyIHN0YXRlOjQ7CisJdTMyIGJ1c19udW06ODsKKwl1MzIgYnVzX3R5cGU6ODsKKwl1bmlvbiB7CisJCWkyb19wY2lfYnVzIHBjaV9idXM7CisJCWkyb19sb2NhbF9idXMgbG9jYWxfYnVzOworCQlpMm9faXNhX2J1cyBpc2FfYnVzOworCQlpMm9fZWlzYV9idXMgZWlzYV9idXM7CisJCWkyb19tY2FfYnVzIG1jYV9idXM7CisJCWkyb19vdGhlcl9idXMgb3RoZXJfYnVzOworCX0gYnVzOworfSBpMm9faHJ0X2VudHJ5OworCit0eXBlZGVmIHN0cnVjdCBfaTJvX2hydCB7CisJdTE2IG51bV9lbnRyaWVzOworCXU4IGVudHJ5X2xlbjsKKwl1OCBocnRfdmVyc2lvbjsKKwl1MzIgY2hhbmdlX2luZDsKKwlpMm9faHJ0X2VudHJ5IGhydF9lbnRyeVsxXTsKK30gaTJvX2hydDsKKwordHlwZWRlZiBzdHJ1Y3QgX2kyb19sY3RfZW50cnkgeworCXUzMiBlbnRyeV9zaXplOjE2OworCXUzMiB0aWQ6MTI7CisJdTMyIHJlc2VydmVkOjQ7CisJdTMyIGNoYW5nZV9pbmQ7CisJdTMyIGRldmljZV9mbGFnczsKKwl1MzIgY2xhc3NfaWQ6MTI7CisJdTMyIHZlcnNpb246NDsKKwl1MzIgdmVuZG9yX2lkOjE2OworCXUzMiBzdWJfY2xhc3M7CisJdTMyIHVzZXJfdGlkOjEyOworCXUzMiBwYXJlbnRfdGlkOjEyOworCXUzMiBiaW9zX2luZm86ODsKKwl1OCBpZGVudGl0eV90YWdbOF07CisJdTMyIGV2ZW50X2NhcGFiaWxpdGllczsKK30gaTJvX2xjdF9lbnRyeTsKKwordHlwZWRlZiBzdHJ1Y3QgX2kyb19sY3QgeworCXUzMiB0YWJsZV9zaXplOjE2OworCXUzMiBib290X3RpZDoxMjsKKwl1MzIgbGN0X3Zlcjo0OworCXUzMiBpb3BfZmxhZ3M7CisJdTMyIGNoYW5nZV9pbmQ7CisJaTJvX2xjdF9lbnRyeSBsY3RfZW50cnlbMV07Cit9IGkyb19sY3Q7CisKK3R5cGVkZWYgc3RydWN0IF9pMm9fc3RhdHVzX2Jsb2NrIHsKKwl1MTYgb3JnX2lkOworCXUxNiByZXNlcnZlZDsKKwl1MTYgaW9wX2lkOjEyOworCXUxNiByZXNlcnZlZDE6NDsKKwl1MTYgaG9zdF91bml0X2lkOworCXUxNiBzZWdtZW50X251bWJlcjoxMjsKKwl1MTYgaTJvX3ZlcnNpb246NDsKKwl1OCBpb3Bfc3RhdGU7CisJdTggbXNnX3R5cGU7CisJdTE2IGluYm91bmRfZnJhbWVfc2l6ZTsKKwl1OCBpbml0X2NvZGU7CisJdTggcmVzZXJ2ZWQyOworCXUzMiBtYXhfaW5ib3VuZF9mcmFtZXM7CisJdTMyIGN1cl9pbmJvdW5kX2ZyYW1lczsKKwl1MzIgbWF4X291dGJvdW5kX2ZyYW1lczsKKwljaGFyIHByb2R1Y3RfaWRbMjRdOworCXUzMiBleHBlY3RlZF9sY3Rfc2l6ZTsKKwl1MzIgaW9wX2NhcGFiaWxpdGllczsKKwl1MzIgZGVzaXJlZF9tZW1fc2l6ZTsKKwl1MzIgY3VycmVudF9tZW1fc2l6ZTsKKwl1MzIgY3VycmVudF9tZW1fYmFzZTsKKwl1MzIgZGVzaXJlZF9pb19zaXplOworCXUzMiBjdXJyZW50X2lvX3NpemU7CisJdTMyIGN1cnJlbnRfaW9fYmFzZTsKKwl1MzIgcmVzZXJ2ZWQzOjI0OworCXUzMiBjbWRfc3RhdHVzOjg7Cit9IGkyb19zdGF0dXNfYmxvY2s7CisKKy8qIEV2ZW50IGluZGljYXRvciBtYXNrIGZsYWdzICovCisjZGVmaW5lIEkyT19FVlRfSU5EX1NUQVRFX0NIQU5HRQkJMHg4MDAwMDAwMAorI2RlZmluZSBJMk9fRVZUX0lORF9HRU5FUkFMX1dBUk5JTkcJCTB4NDAwMDAwMDAKKyNkZWZpbmUgSTJPX0VWVF9JTkRfQ09ORklHVVJBVElPTl9GTEFHCQkweDIwMDAwMDAwCisjZGVmaW5lIEkyT19FVlRfSU5EX0xPQ0tfUkVMRUFTRQkJMHgxMDAwMDAwMAorI2RlZmluZSBJMk9fRVZUX0lORF9DQVBBQklMSVRZX0NIQU5HRQkJMHgwODAwMDAwMAorI2RlZmluZSBJMk9fRVZUX0lORF9ERVZJQ0VfUkVTRVQJCTB4MDQwMDAwMDAKKyNkZWZpbmUgSTJPX0VWVF9JTkRfRVZUX01BU0tfTU9ESUZJRUQJCTB4MDIwMDAwMDAKKyNkZWZpbmUgSTJPX0VWVF9JTkRfRklFTERfTU9ESUZJRUQJCTB4MDEwMDAwMDAKKyNkZWZpbmUgSTJPX0VWVF9JTkRfVkVORE9SX0VWVAkJCTB4MDA4MDAwMDAKKyNkZWZpbmUgSTJPX0VWVF9JTkRfREVWSUNFX1NUQVRFCQkweDAwNDAwMDAwCisKKy8qIEV4ZWN1dGl2ZSBldmVudCBpbmRpY2l0b3JzICovCisjZGVmaW5lIEkyT19FVlRfSU5EX0VYRUNfUkVTT1VSQ0VfTElNSVRTCTB4MDAwMDAwMDEKKyNkZWZpbmUgSTJPX0VWVF9JTkRfRVhFQ19DT05ORUNUSU9OX0ZBSUwJMHgwMDAwMDAwMgorI2RlZmluZSBJMk9fRVZUX0lORF9FWEVDX0FEQVBURVJfRkFVTFQJCTB4MDAwMDAwMDQKKyNkZWZpbmUgSTJPX0VWVF9JTkRfRVhFQ19QT1dFUl9GQUlMCQkweDAwMDAwMDA4CisjZGVmaW5lIEkyT19FVlRfSU5EX0VYRUNfUkVTRVRfUEVORElORwkJMHgwMDAwMDAxMAorI2RlZmluZSBJMk9fRVZUX0lORF9FWEVDX1JFU0VUX0lNTUlORU5UIAkweDAwMDAwMDIwCisjZGVmaW5lIEkyT19FVlRfSU5EX0VYRUNfSFdfRkFJTAkJMHgwMDAwMDA0MAorI2RlZmluZSBJMk9fRVZUX0lORF9FWEVDX1hDVF9DSEFOR0UJCTB4MDAwMDAwODAKKyNkZWZpbmUgSTJPX0VWVF9JTkRfRVhFQ19ORVdfTENUX0VOVFJZCQkweDAwMDAwMTAwCisjZGVmaW5lIEkyT19FVlRfSU5EX0VYRUNfTU9ESUZJRURfTENUCQkweDAwMDAwMjAwCisjZGVmaW5lIEkyT19FVlRfSU5EX0VYRUNfRERNX0FWQUlMQUJJTElUWQkweDAwMDAwNDAwCisKKy8qIFJhbmRvbSBCbG9jayBTdG9yYWdlIEV2ZW50IEluZGljYXRvcnMgKi8KKyNkZWZpbmUgSTJPX0VWVF9JTkRfQlNBX1ZPTFVNRV9MT0FECQkweDAwMDAwMDAxCisjZGVmaW5lIEkyT19FVlRfSU5EX0JTQV9WT0xVTUVfVU5MT0FECQkweDAwMDAwMDAyCisjZGVmaW5lIEkyT19FVlRfSU5EX0JTQV9WT0xVTUVfVU5MT0FEX1JFUQkweDAwMDAwMDA0CisjZGVmaW5lIEkyT19FVlRfSU5EX0JTQV9DQVBBQ0lUWV9DSEFOR0UgCTB4MDAwMDAwMDgKKyNkZWZpbmUgSTJPX0VWVF9JTkRfQlNBX1NDU0lfU01BUlQJCTB4MDAwMDAwMTAKKworLyogRXZlbnQgZGF0YSBmb3IgZ2VuZXJpYyBldmVudHMgKi8KKyNkZWZpbmUgSTJPX0VWVF9TVEFURV9DSEFOR0VfTk9STUFMCQkweDAwCisjZGVmaW5lIEkyT19FVlRfU1RBVEVfQ0hBTkdFX1NVU1BFTkRFRAkJMHgwMQorI2RlZmluZSBJMk9fRVZUX1NUQVRFX0NIQU5HRV9SRVNUQVJUCQkweDAyCisjZGVmaW5lIEkyT19FVlRfU1RBVEVfQ0hBTkdFX05BX1JFQ09WRVIgCTB4MDMKKyNkZWZpbmUgSTJPX0VWVF9TVEFURV9DSEFOR0VfTkFfTk9fUkVDT1ZFUgkweDA0CisjZGVmaW5lIEkyT19FVlRfU1RBVEVfQ0hBTkdFX1FVSUVTQ0VfUkVRVUVTVAkweDA1CisjZGVmaW5lIEkyT19FVlRfU1RBVEVfQ0hBTkdFX0ZBSUxFRAkJMHgxMAorI2RlZmluZSBJMk9fRVZUX1NUQVRFX0NIQU5HRV9GQVVMVEVECQkweDExCisKKyNkZWZpbmUgSTJPX0VWVF9HRU5fV0FSTklOR19OT1JNQUwJCTB4MDAKKyNkZWZpbmUgSTJPX0VWVF9HRU5fV0FSTklOR19FUlJPUl9USFJFU0hPTEQJMHgwMQorI2RlZmluZSBJMk9fRVZUX0dFTl9XQVJOSU5HX01FRElBX0ZBVUxUIAkweDAyCisKKyNkZWZpbmUgSTJPX0VWVF9DQVBBQklMSVRZX09USEVSCQkweDAxCisjZGVmaW5lIEkyT19FVlRfQ0FQQUJJTElUWV9DSEFOR0VECQkweDAyCisKKyNkZWZpbmUgSTJPX0VWVF9TRU5TT1JfU1RBVEVfQ0hBTkdFRAkJMHgwMQorCisvKgorICoJSTJPIGNsYXNzZXMgLyBzdWJjbGFzc2VzCisgKi8KKworLyogIENsYXNzIElEIGFuZCBDb2RlIEFzc2lnbm1lbnRzCisgKiAgKExDVC5DbGFzc0lELlZlcnNpb24gZmllbGQpCisgKi8KKyNkZWZpbmUgSTJPX0NMQVNTX1ZFUlNJT05fMTAJCQkweDAwCisjZGVmaW5lIEkyT19DTEFTU19WRVJTSU9OXzExCQkJMHgwMQorCisvKiAgQ2xhc3MgY29kZSBuYW1lcworICogIChmcm9tIHYxLjUgVGFibGUgNi0xIENsYXNzIENvZGUgQXNzaWdubWVudHMuKQorICovCisKKyNkZWZpbmUgSTJPX0NMQVNTX0VYRUNVVElWRQkJCTB4MDAwCisjZGVmaW5lIEkyT19DTEFTU19ERE0JCQkJMHgwMDEKKyNkZWZpbmUgSTJPX0NMQVNTX1JBTkRPTV9CTE9DS19TVE9SQUdFCQkweDAxMAorI2RlZmluZSBJMk9fQ0xBU1NfU0VRVUVOVElBTF9TVE9SQUdFCQkweDAxMQorI2RlZmluZSBJMk9fQ0xBU1NfTEFOCQkJCTB4MDIwCisjZGVmaW5lIEkyT19DTEFTU19XQU4JCQkJMHgwMzAKKyNkZWZpbmUgSTJPX0NMQVNTX0ZJQlJFX0NIQU5ORUxfUE9SVAkJMHgwNDAKKyNkZWZpbmUgSTJPX0NMQVNTX0ZJQlJFX0NIQU5ORUxfUEVSSVBIRVJBTAkweDA0MQorI2RlZmluZSBJMk9fQ0xBU1NfU0NTSV9QRVJJUEhFUkFMCQkweDA1MQorI2RlZmluZSBJMk9fQ0xBU1NfQVRFX1BPUlQJCQkweDA2MAorI2RlZmluZSBJMk9fQ0xBU1NfQVRFX1BFUklQSEVSQUwJCTB4MDYxCisjZGVmaW5lIEkyT19DTEFTU19GTE9QUFlfQ09OVFJPTExFUgkJMHgwNzAKKyNkZWZpbmUgSTJPX0NMQVNTX0ZMT1BQWV9ERVZJQ0UgCQkweDA3MQorI2RlZmluZSBJMk9fQ0xBU1NfQlVTX0FEQVBURVJfUE9SVAkJMHgwODAKKyNkZWZpbmUgSTJPX0NMQVNTX1BFRVJfVFJBTlNQT1JUX0FHRU5UCQkweDA5MAorI2RlZmluZSBJMk9fQ0xBU1NfUEVFUl9UUkFOU1BPUlQJCTB4MDkxCisjZGVmaW5lCUkyT19DTEFTU19FTkQJCQkJMHhmZmYKKworLyoKKyAqICBSZXN0IG9mIDB4MDkyIC0gMHgwOWYgcmVzZXJ2ZWQgZm9yIHBlZXItdG8tcGVlciBjbGFzc2VzCisgKi8KKworI2RlZmluZSBJMk9fQ0xBU1NfTUFUQ0hfQU5ZQ0xBU1MJCTB4ZmZmZmZmZmYKKworLyoKKyAqICBTdWJjbGFzc2VzCisgKi8KKworI2RlZmluZSBJMk9fU1VCQ0xBU1NfaTk2MAkJCTB4MDAxCisjZGVmaW5lIEkyT19TVUJDTEFTU19IRE0JCQkweDAyMAorI2RlZmluZSBJMk9fU1VCQ0xBU1NfSVNNCQkJMHgwMjEKKworLyogT3BlcmF0aW9uIGZ1bmN0aW9ucyAqLworCisjZGVmaW5lIEkyT19QQVJBTVNfRklFTERfR0VUCQkJMHgwMDAxCisjZGVmaW5lIEkyT19QQVJBTVNfTElTVF9HRVQJCQkweDAwMDIKKyNkZWZpbmUgSTJPX1BBUkFNU19NT1JFX0dFVAkJCTB4MDAwMworI2RlZmluZSBJMk9fUEFSQU1TX1NJWkVfR0VUCQkJMHgwMDA0CisjZGVmaW5lIEkyT19QQVJBTVNfVEFCTEVfR0VUCQkJMHgwMDA1CisjZGVmaW5lIEkyT19QQVJBTVNfRklFTERfU0VUCQkJMHgwMDA2CisjZGVmaW5lIEkyT19QQVJBTVNfTElTVF9TRVQJCQkweDAwMDcKKyNkZWZpbmUgSTJPX1BBUkFNU19ST1dfQURECQkJMHgwMDA4CisjZGVmaW5lIEkyT19QQVJBTVNfUk9XX0RFTEVURQkJCTB4MDAwOQorI2RlZmluZSBJMk9fUEFSQU1TX1RBQkxFX0NMRUFSCQkJMHgwMDBBCisKKy8qCisgKiBJMk8gc2VyaWFsIG51bWJlciBjb252ZW50aW9ucyAvIGZvcm1hdHMKKyAqIChjaXJjYSB2MS41KQorICovCisKKyNkZWZpbmUgSTJPX1NORk9STUFUX1VOS05PV04JCQkwCisjZGVmaW5lIEkyT19TTkZPUk1BVF9CSU5BUlkJCQkxCisjZGVmaW5lIEkyT19TTkZPUk1BVF9BU0NJSQkJCTIKKyNkZWZpbmUgSTJPX1NORk9STUFUX1VOSUNPREUJCQkzCisjZGVmaW5lIEkyT19TTkZPUk1BVF9MQU40OF9NQUMJCQk0CisjZGVmaW5lIEkyT19TTkZPUk1BVF9XQU4JCQk1CisKKy8qCisgKiBQbHVzIG5ldyBpbiB2Mi4wIChZZWxsb3dzdG9uZSBwZGYgZG9jKQorICovCisKKyNkZWZpbmUgSTJPX1NORk9STUFUX0xBTjY0X01BQwkJCTYKKyNkZWZpbmUgSTJPX1NORk9STUFUX0RETQkJCTcKKyNkZWZpbmUgSTJPX1NORk9STUFUX0lFRUVfUkVHNjQgCQk4CisjZGVmaW5lIEkyT19TTkZPUk1BVF9JRUVFX1JFRzEyOAkJOQorI2RlZmluZSBJMk9fU05GT1JNQVRfVU5LTk9XTjIJCQkweGZmCisKKy8qCisgKglJMk8gR2V0IFN0YXR1cyBTdGF0ZSB2YWx1ZXMKKyAqLworCisjZGVmaW5lIEFEQVBURVJfU1RBVEVfSU5JVElBTElaSU5HCQkweDAxCisjZGVmaW5lIEFEQVBURVJfU1RBVEVfUkVTRVQJCQkweDAyCisjZGVmaW5lIEFEQVBURVJfU1RBVEVfSE9MRAkJCTB4MDQKKyNkZWZpbmUgQURBUFRFUl9TVEFURV9SRUFEWQkJCTB4MDUKKyNkZWZpbmUgQURBUFRFUl9TVEFURV9PUEVSQVRJT05BTAkJMHgwOAorI2RlZmluZSBBREFQVEVSX1NUQVRFX0ZBSUxFRAkJCTB4MTAKKyNkZWZpbmUgQURBUFRFUl9TVEFURV9GQVVMVEVECQkJMHgxMQorCisjZW5kaWYJCQkJLyogX0kyT19ERVZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pMm8uaCBiL2luY2x1ZGUvbGludXgvaTJvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE5YTNhZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvaTJvLmgKQEAgLTAsMCArMSwxMDAzIEBACisvKgorICogSTJPIGtlcm5lbCBzcGFjZSBhY2Nlc3NpYmxlIHN0cnVjdHVyZXMvQVBJcworICoKKyAqIChjKSBDb3B5cmlnaHQgMTk5OSwgMjAwMCBSZWQgSGF0IFNvZnR3YXJlCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFRoaXMgaGVhZGVyIGZpbGUgZGVmaW5lZCB0aGUgSTJPIEFQSXMvc3RydWN0dXJlcyBmb3IgdXNlIGJ5CisgKiB0aGUgSTJPIGtlcm5lbCBtb2R1bGVzLgorICoKKyAqLworCisjaWZuZGVmIF9JMk9fSAorI2RlZmluZSBfSTJPX0gKKworI2lmZGVmIF9fS0VSTkVMX18JCS8qIFRoaXMgZmlsZSB0byBiZSBpbmNsdWRlZCBieSBrZXJuZWwgb25seSAqLworCisjaW5jbHVkZSA8bGludXgvaTJvLWRldi5oPgorCisvKiBIb3cgbWFueSBkaWZmZXJlbnQgT1NNJ3MgYXJlIHdlIGFsbG93aW5nICovCisjZGVmaW5lIEkyT19NQVhfRFJJVkVSUwkJOAorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgkvKiBOZWVkZWQgZm9yIE1VVEVYIGluaXQgbWFjcm9zICovCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKworLyogbWVzc2FnZSBxdWV1ZSBlbXB0eSAqLworI2RlZmluZSBJMk9fUVVFVUVfRU1QVFkJCTB4ZmZmZmZmZmYKKworLyoKKyAqCU1lc3NhZ2Ugc3RydWN0dXJlcworICovCitzdHJ1Y3QgaTJvX21lc3NhZ2UgeworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXU4IHZlcnNpb25fb2Zmc2V0OworCQkJdTggZmxhZ3M7CisJCQl1MTYgc2l6ZTsKKwkJCXUzMiB0YXJnZXRfdGlkOjEyOworCQkJdTMyIGluaXRfdGlkOjEyOworCQkJdTMyIGZ1bmN0aW9uOjg7CisJCQl1MzIgaWNudHh0OwkvKiBpbml0aWF0b3IgY29udGV4dCAqLworCQkJdTMyIHRjbnR4dDsJLyogdHJhbnNhY3Rpb24gY29udGV4dCAqLworCQl9IHM7CisJCXUzMiBoZWFkWzRdOworCX0gdTsKKwkvKiBMaXN0IGZvbGxvd3MgKi8KKwl1MzIgYm9keVswXTsKK307CisKKy8qCisgKglFYWNoIEkyTyBkZXZpY2UgZW50aXR5IGhhcyBvbmUgb2YgdGhlc2UuIFRoZXJlIGlzIG9uZSBwZXIgZGV2aWNlLgorICovCitzdHJ1Y3QgaTJvX2RldmljZSB7CisJaTJvX2xjdF9lbnRyeSBsY3RfZGF0YTsJLyogRGV2aWNlIExDVCBpbmZvcm1hdGlvbiAqLworCisJc3RydWN0IGkyb19jb250cm9sbGVyICppb3A7CS8qIENvbnRyb2xsaW5nIElPUCAqLworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsJLyogbm9kZSBpbiBJT1AgZGV2aWNlcyBsaXN0ICovCisKKwlzdHJ1Y3QgZGV2aWNlIGRldmljZTsKKworCXN0cnVjdCBzZW1hcGhvcmUgbG9jazsJLyogZGV2aWNlIGxvY2sgKi8KKworCXN0cnVjdCBjbGFzc19kZXZpY2UgY2xhc3NkZXY7CS8qIGkybyBkZXZpY2UgY2xhc3MgKi8KK307CisKKy8qCisgKglFdmVudCBzdHJ1Y3R1cmUgcHJvdmlkZWQgdG8gdGhlIGV2ZW50IGhhbmRsaW5nIGZ1bmN0aW9uCisgKi8KK3N0cnVjdCBpMm9fZXZlbnQgeworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworCXN0cnVjdCBpMm9fZGV2aWNlICppMm9fZGV2OwkvKiBJMk8gZGV2aWNlIHBvaW50ZXIgZnJvbSB3aGljaCB0aGUKKwkJCQkJICAgZXZlbnQgcmVwbHkgd2FzIGluaXRpYXRlZCAqLworCXUxNiBzaXplOwkJLyogU2l6ZSBvZiBkYXRhIGluIDMyLWJpdCB3b3JkcyAqLworCXUzMiB0Y250eHQ7CQkvKiBUcmFuc2FjdGlvbiBjb250ZXh0IHVzZWQgYXQKKwkJCQkgICByZWdpc3RyYXRpb24gKi8KKwl1MzIgZXZlbnRfaW5kaWNhdG9yOwkvKiBFdmVudCBpbmRpY2F0b3IgZnJvbSByZXBseSAqLworCXUzMiBkYXRhWzBdOwkJLyogRXZlbnQgZGF0YSBmcm9tIHJlcGx5ICovCit9OworCisvKgorICoJSTJPIGNsYXNzZXMgd2hpY2ggY291bGQgYmUgaGFuZGxlZCBieSB0aGUgT1NNCisgKi8KK3N0cnVjdCBpMm9fY2xhc3NfaWQgeworCXUxNiBjbGFzc19pZDoxMjsKK307CisKKy8qCisgKglJMk8gZHJpdmVyIHN0cnVjdHVyZSBmb3IgT1NNcworICovCitzdHJ1Y3QgaTJvX2RyaXZlciB7CisJY2hhciAqbmFtZTsJCS8qIE9TTSBuYW1lICovCisJaW50IGNvbnRleHQ7CQkvKiBMb3cgOCBiaXRzIG9mIHRoZSB0cmFuc2FjdGlvbiBpbmZvICovCisJc3RydWN0IGkyb19jbGFzc19pZCAqY2xhc3NlczsJLyogSTJPIGNsYXNzZXMgdGhhdCB0aGlzIE9TTSBoYW5kbGVzICovCisKKwkvKiBNZXNzYWdlIHJlcGx5IGhhbmRsZXIgKi8KKwlpbnQgKCpyZXBseSkgKHN0cnVjdCBpMm9fY29udHJvbGxlciAqLCB1MzIsIHN0cnVjdCBpMm9fbWVzc2FnZSAqKTsKKworCS8qIEV2ZW50IGhhbmRsZXIgKi8KKwl2b2lkICgqZXZlbnQpIChzdHJ1Y3QgaTJvX2V2ZW50ICopOworCisJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmV2ZW50X3F1ZXVlOwkvKiBFdmVudCBxdWV1ZSAqLworCisJc3RydWN0IGRldmljZV9kcml2ZXIgZHJpdmVyOworCisJLyogbm90aWZpY2F0aW9uIG9mIGNoYW5nZXMgKi8KKwl2b2lkICgqbm90aWZ5X2NvbnRyb2xsZXJfYWRkKSAoc3RydWN0IGkyb19jb250cm9sbGVyICopOworCXZvaWQgKCpub3RpZnlfY29udHJvbGxlcl9yZW1vdmUpIChzdHJ1Y3QgaTJvX2NvbnRyb2xsZXIgKik7CisJdm9pZCAoKm5vdGlmeV9kZXZpY2VfYWRkKSAoc3RydWN0IGkyb19kZXZpY2UgKik7CisJdm9pZCAoKm5vdGlmeV9kZXZpY2VfcmVtb3ZlKSAoc3RydWN0IGkyb19kZXZpY2UgKik7CisKKwlzdHJ1Y3Qgc2VtYXBob3JlIGxvY2s7Cit9OworCisvKgorICoJQ29udGFpbnMgYWxsIGluZm9ybWF0aW9uIHdoaWNoIGFyZSBuZWNlc3NhcnkgZm9yIERNQSBvcGVyYXRpb25zCisgKi8KK3N0cnVjdCBpMm9fZG1hIHsKKwl2b2lkICp2aXJ0OworCWRtYV9hZGRyX3QgcGh5czsKKwl1MzIgbGVuOworfTsKKworLyoKKyAqCUNvbnRleHQgcXVldWUgZW50cnksIHVzZWQgZm9yIDMyLWJpdCBjb250ZXh0IG9uIDY0LWJpdCBzeXN0ZW1zCisgKi8KK3N0cnVjdCBpMm9fY29udGV4dF9saXN0X2VsZW1lbnQgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwl1MzIgY29udGV4dDsKKwl2b2lkICpwdHI7CisJdW5zaWduZWQgbG9uZyB0aW1lc3RhbXA7Cit9OworCisvKgorICogRWFjaCBJMk8gY29udHJvbGxlciBoYXMgb25lIG9mIHRoZXNlIG9iamVjdHMKKyAqLworc3RydWN0IGkyb19jb250cm9sbGVyIHsKKwljaGFyIG5hbWVbMTZdOworCWludCB1bml0OworCWludCB0eXBlOworCisJc3RydWN0IHBjaV9kZXYgKnBkZXY7CS8qIFBDSSBkZXZpY2UgKi8KKworCXVuc2lnbmVkIGludCBzaG9ydF9yZXE6MTsJLyogdXNlIHNtYWxsIGJsb2NrIHNpemVzICovCisJdW5zaWduZWQgaW50IG5vX3F1aWVzY2U6MTsJLyogZG9udCBxdWllc2NlIGJlZm9yZSByZXNldCAqLworCXVuc2lnbmVkIGludCByYXB0b3I6MTsJCS8qIHNwbGl0IGJhciAqLworCXVuc2lnbmVkIGludCBwcm9taXNlOjE7CQkvKiBQcm9taXNlIGNvbnRyb2xsZXIgKi8KKworI2lmZGVmIENPTkZJR19NVFJSCisJaW50IG10cnJfcmVnMDsKKwlpbnQgbXRycl9yZWcxOworI2VuZGlmCisKKwlzdHJ1Y3QgbGlzdF9oZWFkIGRldmljZXM7CS8qIGxpc3Qgb2YgSTJPIGRldmljZXMgKi8KKworCXN0cnVjdCBub3RpZmllcl9ibG9jayAqZXZlbnRfbm90aWZlcjsJLyogRXZlbnRzICovCisJYXRvbWljX3QgdXNlcnM7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwkvKiBDb250cm9sbGVyIGxpc3QgKi8KKwl2b2lkIF9faW9tZW0gKnBvc3RfcG9ydDsJLyogSW5ib3V0IHBvcnQgYWRkcmVzcyAqLworCXZvaWQgX19pb21lbSAqcmVwbHlfcG9ydDsJLyogT3V0Ym91bmQgcG9ydCBhZGRyZXNzICovCisJdm9pZCBfX2lvbWVtICppcnFfbWFzazsJCS8qIEludGVycnVwdCByZWdpc3RlciBhZGRyZXNzICovCisKKwkvKiBEeW5hbWljIExDVCByZWxhdGVkIGRhdGEgKi8KKworCXN0cnVjdCBpMm9fZG1hIHN0YXR1czsJLyogc3RhdHVzIG9mIElPUCAqLworCisJc3RydWN0IGkyb19kbWEgaHJ0OwkvKiBIVyBSZXNvdXJjZSBUYWJsZSAqLworCWkyb19sY3QgKmxjdDsJCS8qIExvZ2ljYWwgQ29uZmlnIFRhYmxlICovCisJc3RydWN0IGkyb19kbWEgZGxjdDsJLyogVGVtcCBMQ1QgKi8KKwlzdHJ1Y3Qgc2VtYXBob3JlIGxjdF9sb2NrOwkvKiBMb2NrIGZvciBMQ1QgdXBkYXRlcyAqLworCXN0cnVjdCBpMm9fZG1hIHN0YXR1c19ibG9jazsJLyogSU9QIHN0YXR1cyBibG9jayAqLworCisJc3RydWN0IGkyb19kbWEgYmFzZTsJLyogY29udHJvbGxlciBtZXNzYWdpbmcgdW5pdCAqLworCXN0cnVjdCBpMm9fZG1hIGluX3F1ZXVlOwkvKiBpbmJvdW5kIG1lc3NhZ2UgcXVldWUgSG9zdC0+SU9QICovCisJc3RydWN0IGkyb19kbWEgb3V0X3F1ZXVlOwkvKiBvdXRib3VuZCBtZXNzYWdlIHF1ZXVlIElPUC0+SG9zdCAqLworCisJdW5zaWduZWQgaW50IGJhdHRlcnk6MTsJCS8qIEhhcyBhIGJhdHRlcnkgYmFja3VwICovCisJdW5zaWduZWQgaW50IGlvX2FsbG9jOjE7CS8qIEFuIEkvTyByZXNvdXJjZSB3YXMgYWxsb2NhdGVkICovCisJdW5zaWduZWQgaW50IG1lbV9hbGxvYzoxOwkvKiBBIG1lbW9yeSByZXNvdXJjZSB3YXMgYWxsb2NhdGVkICovCisKKwlzdHJ1Y3QgcmVzb3VyY2UgaW9fcmVzb3VyY2U7CS8qIEkvTyByZXNvdXJjZSBhbGxvY2F0ZWQgdG8gdGhlIElPUCAqLworCXN0cnVjdCByZXNvdXJjZSBtZW1fcmVzb3VyY2U7CS8qIE1lbSByZXNvdXJjZSBhbGxvY2F0ZWQgdG8gdGhlIElPUCAqLworCisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX2VudHJ5OwkvKiAvcHJvYyBkaXIgKi8KKworCXN0cnVjdCBsaXN0X2hlYWQgYnVzX2xpc3Q7CS8qIGxpc3Qgb2YgYnVzc2VzIG9uIElPUCAqLworCXN0cnVjdCBkZXZpY2UgZGV2aWNlOworCXN0cnVjdCBpMm9fZGV2aWNlICpleGVjOwkvKiBFeGVjdXRpdmUgKi8KKyNpZiBCSVRTX1BFUl9MT05HID09IDY0CisJc3BpbmxvY2tfdCBjb250ZXh0X2xpc3RfbG9jazsJLyogbG9jayBmb3IgY29udGV4dF9saXN0ICovCisJYXRvbWljX3QgY29udGV4dF9saXN0X2NvdW50ZXI7CS8qIG5lZWRlZCBmb3IgdW5pcXVlIGNvbnRleHRzICovCisJc3RydWN0IGxpc3RfaGVhZCBjb250ZXh0X2xpc3Q7CS8qIGxpc3Qgb2YgY29udGV4dCBpZCdzCisJCQkJCSAgIGFuZCBwb2ludGVycyAqLworI2VuZGlmCisJc3BpbmxvY2tfdCBsb2NrOwkvKiBsb2NrIGZvciBjb250cm9sbGVyCisJCQkJICAgY29uZmlndXJhdGlvbiAqLworCisJdm9pZCAqZHJpdmVyX2RhdGFbSTJPX01BWF9EUklWRVJTXTsJLyogc3RvcmFnZSBmb3IgZHJpdmVycyAqLworfTsKKworLyoKKyAqIEkyTyBTeXN0ZW0gdGFibGUgZW50cnkKKyAqCisgKiBUaGUgc3lzdGVtIHRhYmxlIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IGFsbCB0aGUgSU9QcyBpbiB0aGUKKyAqIHN5c3RlbS4gIEl0IGlzIHNlbnQgdG8gYWxsIElPUHMgc28gdGhhdCB0aGV5IGNhbiBjcmVhdGUgcGVlcjJwZWVyCisgKiBjb25uZWN0aW9ucyBiZXR3ZWVuIHRoZW0uCisgKi8KK3N0cnVjdCBpMm9fc3lzX3RibF9lbnRyeSB7CisJdTE2IG9yZ19pZDsKKwl1MTYgcmVzZXJ2ZWQxOworCXUzMiBpb3BfaWQ6MTI7CisJdTMyIHJlc2VydmVkMjoyMDsKKwl1MTYgc2VnX251bToxMjsKKwl1MTYgaTJvX3ZlcnNpb246NDsKKwl1OCBpb3Bfc3RhdGU7CisJdTggbXNnX3R5cGU7CisJdTE2IGZyYW1lX3NpemU7CisJdTE2IHJlc2VydmVkMzsKKwl1MzIgbGFzdF9jaGFuZ2VkOworCXUzMiBpb3BfY2FwYWJpbGl0aWVzOworCXUzMiBpbmJvdW5kX2xvdzsKKwl1MzIgaW5ib3VuZF9oaWdoOworfTsKKworc3RydWN0IGkyb19zeXNfdGJsIHsKKwl1OCBudW1fZW50cmllczsKKwl1OCB2ZXJzaW9uOworCXUxNiByZXNlcnZlZDE7CisJdTMyIGNoYW5nZV9pbmQ7CisJdTMyIHJlc2VydmVkMjsKKwl1MzIgcmVzZXJ2ZWQzOworCXN0cnVjdCBpMm9fc3lzX3RibF9lbnRyeSBpb3BzWzBdOworfTsKKworZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgaTJvX2NvbnRyb2xsZXJzOworCisvKiBNZXNzYWdlIGZ1bmN0aW9ucyAqLworc3RhdGljIGlubGluZSB1MzIgaTJvX21zZ19nZXQoc3RydWN0IGkyb19jb250cm9sbGVyICosIHN0cnVjdCBpMm9fbWVzc2FnZSBfX2lvbWVtICoqKTsKK2V4dGVybiB1MzIgaTJvX21zZ19nZXRfd2FpdChzdHJ1Y3QgaTJvX2NvbnRyb2xsZXIgKiwgc3RydWN0IGkyb19tZXNzYWdlIF9faW9tZW0gKiosCisJCQkgICAgaW50KTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBpMm9fbXNnX3Bvc3Qoc3RydWN0IGkyb19jb250cm9sbGVyICosIHUzMik7CitzdGF0aWMgaW5saW5lIGludCBpMm9fbXNnX3Bvc3Rfd2FpdChzdHJ1Y3QgaTJvX2NvbnRyb2xsZXIgKiwgdTMyLAorCQkJCSAgICB1bnNpZ25lZCBsb25nKTsKK2V4dGVybiBpbnQgaTJvX21zZ19wb3N0X3dhaXRfbWVtKHN0cnVjdCBpMm9fY29udHJvbGxlciAqLCB1MzIsIHVuc2lnbmVkIGxvbmcsCisJCQkJIHN0cnVjdCBpMm9fZG1hICopOworZXh0ZXJuIHZvaWQgaTJvX21zZ19ub3Aoc3RydWN0IGkyb19jb250cm9sbGVyICosIHUzMik7CitzdGF0aWMgaW5saW5lIHZvaWQgaTJvX2ZsdXNoX3JlcGx5KHN0cnVjdCBpMm9fY29udHJvbGxlciAqLCB1MzIpOworCisvKiBETUEgaGFuZGxpbmcgZnVuY3Rpb25zICovCitzdGF0aWMgaW5saW5lIGludCBpMm9fZG1hX2FsbG9jKHN0cnVjdCBkZXZpY2UgKiwgc3RydWN0IGkyb19kbWEgKiwgc2l6ZV90LAorCQkJCXVuc2lnbmVkIGludCk7CitzdGF0aWMgaW5saW5lIHZvaWQgaTJvX2RtYV9mcmVlKHN0cnVjdCBkZXZpY2UgKiwgc3RydWN0IGkyb19kbWEgKik7CitpbnQgaTJvX2RtYV9yZWFsbG9jKHN0cnVjdCBkZXZpY2UgKiwgc3RydWN0IGkyb19kbWEgKiwgc2l6ZV90LCB1bnNpZ25lZCBpbnQpOworCitzdGF0aWMgaW5saW5lIGludCBpMm9fZG1hX21hcChzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCBpMm9fZG1hICopOworc3RhdGljIGlubGluZSB2b2lkIGkyb19kbWFfdW5tYXAoc3RydWN0IGRldmljZSAqLCBzdHJ1Y3QgaTJvX2RtYSAqKTsKKworLyogSU9QIGZ1bmN0aW9ucyAqLworZXh0ZXJuIGludCBpMm9fc3RhdHVzX2dldChzdHJ1Y3QgaTJvX2NvbnRyb2xsZXIgKik7CisKK2V4dGVybiBpbnQgaTJvX2V2ZW50X3JlZ2lzdGVyKHN0cnVjdCBpMm9fZGV2aWNlICosIHN0cnVjdCBpMm9fZHJpdmVyICosIGludCwKKwkJCSAgICAgIHUzMik7CitleHRlcm4gc3RydWN0IGkyb19kZXZpY2UgKmkyb19pb3BfZmluZF9kZXZpY2Uoc3RydWN0IGkyb19jb250cm9sbGVyICosIHUxNik7CitleHRlcm4gc3RydWN0IGkyb19jb250cm9sbGVyICppMm9fZmluZF9pb3AoaW50KTsKKworLyogRnVuY3Rpb25zIG5lZWRlZCBmb3IgaGFuZGxpbmcgNjQtYml0IHBvaW50ZXJzIGluIDMyLWJpdCBjb250ZXh0ICovCisjaWYgQklUU19QRVJfTE9ORyA9PSA2NAorZXh0ZXJuIHUzMiBpMm9fY250eHRfbGlzdF9hZGQoc3RydWN0IGkyb19jb250cm9sbGVyICosIHZvaWQgKik7CitleHRlcm4gdm9pZCAqaTJvX2NudHh0X2xpc3RfZ2V0KHN0cnVjdCBpMm9fY29udHJvbGxlciAqLCB1MzIpOworZXh0ZXJuIHUzMiBpMm9fY250eHRfbGlzdF9yZW1vdmUoc3RydWN0IGkyb19jb250cm9sbGVyICosIHZvaWQgKik7CitleHRlcm4gdTMyIGkyb19jbnR4dF9saXN0X2dldF9wdHIoc3RydWN0IGkyb19jb250cm9sbGVyICosIHZvaWQgKik7CisKK3N0YXRpYyBpbmxpbmUgdTMyIGkyb19wdHJfbG93KHZvaWQgKnB0cikKK3sKKwlyZXR1cm4gKHUzMikgKHU2NCkgcHRyOworfTsKKworc3RhdGljIGlubGluZSB1MzIgaTJvX3B0cl9oaWdoKHZvaWQgKnB0cikKK3sKKwlyZXR1cm4gKHUzMikgKCh1NjQpIHB0ciA+PiAzMik7Cit9OworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdTMyIGkyb19jbnR4dF9saXN0X2FkZChzdHJ1Y3QgaTJvX2NvbnRyb2xsZXIgKmMsIHZvaWQgKnB0cikKK3sKKwlyZXR1cm4gKHUzMikgcHRyOworfTsKKworc3RhdGljIGlubGluZSB2b2lkICppMm9fY250eHRfbGlzdF9nZXQoc3RydWN0IGkyb19jb250cm9sbGVyICpjLCB1MzIgY29udGV4dCkKK3sKKwlyZXR1cm4gKHZvaWQgKiljb250ZXh0OworfTsKKworc3RhdGljIGlubGluZSB1MzIgaTJvX2NudHh0X2xpc3RfcmVtb3ZlKHN0cnVjdCBpMm9fY29udHJvbGxlciAqYywgdm9pZCAqcHRyKQoreworCXJldHVybiAodTMyKSBwdHI7Cit9OworCitzdGF0aWMgaW5saW5lIHUzMiBpMm9fY250eHRfbGlzdF9nZXRfcHRyKHN0cnVjdCBpMm9fY29udHJvbGxlciAqYywgdm9pZCAqcHRyKQoreworCXJldHVybiAodTMyKSBwdHI7Cit9OworCitzdGF0aWMgaW5saW5lIHUzMiBpMm9fcHRyX2xvdyh2b2lkICpwdHIpCit7CisJcmV0dXJuICh1MzIpIHB0cjsKK307CisKK3N0YXRpYyBpbmxpbmUgdTMyIGkyb19wdHJfaGlnaCh2b2lkICpwdHIpCit7CisJcmV0dXJuIDA7Cit9OworI2VuZGlmCisKKy8qIEkyTyBkcml2ZXIgKE9TTSkgZnVuY3Rpb25zICovCitleHRlcm4gaW50IGkyb19kcml2ZXJfcmVnaXN0ZXIoc3RydWN0IGkyb19kcml2ZXIgKik7CitleHRlcm4gdm9pZCBpMm9fZHJpdmVyX3VucmVnaXN0ZXIoc3RydWN0IGkyb19kcml2ZXIgKik7CisKKy8qKgorICoJaTJvX2RyaXZlcl9ub3RpZnlfY29udHJvbGxlcl9hZGQgLSBTZW5kIG5vdGlmaWNhdGlvbiBvZiBhZGRlZCBjb250cm9sbGVyCisgKgkJCQkJICAgdG8gYSBzaW5nbGUgSTJPIGRyaXZlcgorICoKKyAqCVNlbmQgbm90aWZpY2F0aW9uIG9mIGFkZGVkIGNvbnRyb2xsZXIgdG8gYSBzaW5nbGUgcmVnaXN0ZXJlZCBkcml2ZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpMm9fZHJpdmVyX25vdGlmeV9jb250cm9sbGVyX2FkZChzdHJ1Y3QgaTJvX2RyaXZlciAqZHJ2LAorCQkJCQkJICAgIHN0cnVjdCBpMm9fY29udHJvbGxlciAqYykKK3sKKwlpZiAoZHJ2LT5ub3RpZnlfY29udHJvbGxlcl9hZGQpCisJCWRydi0+bm90aWZ5X2NvbnRyb2xsZXJfYWRkKGMpOworfTsKKworLyoqCisgKglpMm9fZHJpdmVyX25vdGlmeV9jb250cm9sbGVyX3JlbW92ZSAtIFNlbmQgbm90aWZpY2F0aW9uIG9mIHJlbW92ZWQKKyAqCQkJCQkgICAgICBjb250cm9sbGVyIHRvIGEgc2luZ2xlIEkyTyBkcml2ZXIKKyAqCisgKglTZW5kIG5vdGlmaWNhdGlvbiBvZiByZW1vdmVkIGNvbnRyb2xsZXIgdG8gYSBzaW5nbGUgcmVnaXN0ZXJlZCBkcml2ZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpMm9fZHJpdmVyX25vdGlmeV9jb250cm9sbGVyX3JlbW92ZShzdHJ1Y3QgaTJvX2RyaXZlciAqZHJ2LAorCQkJCQkJICAgICAgIHN0cnVjdCBpMm9fY29udHJvbGxlciAqYykKK3sKKwlpZiAoZHJ2LT5ub3RpZnlfY29udHJvbGxlcl9yZW1vdmUpCisJCWRydi0+bm90aWZ5X2NvbnRyb2xsZXJfcmVtb3ZlKGMpOworfTsKKworLyoqCisgKglpMm9fZHJpdmVyX25vdGlmeV9kZXZpY2VfYWRkIC0gU2VuZCBub3RpZmljYXRpb24gb2YgYWRkZWQgZGV2aWNlIHRvIGEKKyAqCQkJCSAgICAgICBzaW5nbGUgSTJPIGRyaXZlcgorICoKKyAqCVNlbmQgbm90aWZpY2F0aW9uIG9mIGFkZGVkIGRldmljZSB0byBhIHNpbmdsZSByZWdpc3RlcmVkIGRyaXZlci4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGkyb19kcml2ZXJfbm90aWZ5X2RldmljZV9hZGQoc3RydWN0IGkyb19kcml2ZXIgKmRydiwKKwkJCQkJCXN0cnVjdCBpMm9fZGV2aWNlICppMm9fZGV2KQoreworCWlmIChkcnYtPm5vdGlmeV9kZXZpY2VfYWRkKQorCQlkcnYtPm5vdGlmeV9kZXZpY2VfYWRkKGkyb19kZXYpOworfTsKKworLyoqCisgKglpMm9fZHJpdmVyX25vdGlmeV9kZXZpY2VfcmVtb3ZlIC0gU2VuZCBub3RpZmljYXRpb24gb2YgcmVtb3ZlZCBkZXZpY2UKKyAqCQkJCQkgIHRvIGEgc2luZ2xlIEkyTyBkcml2ZXIKKyAqCisgKglTZW5kIG5vdGlmaWNhdGlvbiBvZiByZW1vdmVkIGRldmljZSB0byBhIHNpbmdsZSByZWdpc3RlcmVkIGRyaXZlci4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGkyb19kcml2ZXJfbm90aWZ5X2RldmljZV9yZW1vdmUoc3RydWN0IGkyb19kcml2ZXIgKmRydiwKKwkJCQkJCSAgIHN0cnVjdCBpMm9fZGV2aWNlICppMm9fZGV2KQoreworCWlmIChkcnYtPm5vdGlmeV9kZXZpY2VfcmVtb3ZlKQorCQlkcnYtPm5vdGlmeV9kZXZpY2VfcmVtb3ZlKGkyb19kZXYpOworfTsKKworZXh0ZXJuIHZvaWQgaTJvX2RyaXZlcl9ub3RpZnlfY29udHJvbGxlcl9hZGRfYWxsKHN0cnVjdCBpMm9fY29udHJvbGxlciAqKTsKK2V4dGVybiB2b2lkIGkyb19kcml2ZXJfbm90aWZ5X2NvbnRyb2xsZXJfcmVtb3ZlX2FsbChzdHJ1Y3QgaTJvX2NvbnRyb2xsZXIgKik7CitleHRlcm4gdm9pZCBpMm9fZHJpdmVyX25vdGlmeV9kZXZpY2VfYWRkX2FsbChzdHJ1Y3QgaTJvX2RldmljZSAqKTsKK2V4dGVybiB2b2lkIGkyb19kcml2ZXJfbm90aWZ5X2RldmljZV9yZW1vdmVfYWxsKHN0cnVjdCBpMm9fZGV2aWNlICopOworCisvKiBJMk8gZGV2aWNlIGZ1bmN0aW9ucyAqLworZXh0ZXJuIGludCBpMm9fZGV2aWNlX2NsYWltKHN0cnVjdCBpMm9fZGV2aWNlICopOworZXh0ZXJuIGludCBpMm9fZGV2aWNlX2NsYWltX3JlbGVhc2Uoc3RydWN0IGkyb19kZXZpY2UgKik7CisKKy8qIEV4ZWMgT1NNIGZ1bmN0aW9ucyAqLworZXh0ZXJuIGludCBpMm9fZXhlY19sY3RfZ2V0KHN0cnVjdCBpMm9fY29udHJvbGxlciAqKTsKKworLyogZGV2aWNlIHRvIGkyb19kZXZpY2UgYW5kIGRyaXZlciB0byBpMm9fZHJpdmVyIGNvbnZlcnRpb24gZnVuY3Rpb25zICovCisjZGVmaW5lIHRvX2kyb19kcml2ZXIoZHJ2KSBjb250YWluZXJfb2YoZHJ2LHN0cnVjdCBpMm9fZHJpdmVyLCBkcml2ZXIpCisjZGVmaW5lIHRvX2kyb19kZXZpY2UoZGV2KSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgaTJvX2RldmljZSwgZGV2aWNlKQorCisvKgorICoJTWVzc2VuZ2VyIGlubGluZXMKKyAqLworc3RhdGljIGlubGluZSB1MzIgSTJPX1BPU1RfUkVBRDMyKHN0cnVjdCBpMm9fY29udHJvbGxlciAqYykKK3sKKwlybWIoKTsKKwlyZXR1cm4gcmVhZGwoYy0+cG9zdF9wb3J0KTsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBJMk9fUE9TVF9XUklURTMyKHN0cnVjdCBpMm9fY29udHJvbGxlciAqYywgdTMyIHZhbCkKK3sKKwl3bWIoKTsKKwl3cml0ZWwodmFsLCBjLT5wb3N0X3BvcnQpOworfTsKKworc3RhdGljIGlubGluZSB1MzIgSTJPX1JFUExZX1JFQUQzMihzdHJ1Y3QgaTJvX2NvbnRyb2xsZXIgKmMpCit7CisJcm1iKCk7CisJcmV0dXJuIHJlYWRsKGMtPnJlcGx5X3BvcnQpOworfTsKKworc3RhdGljIGlubGluZSB2b2lkIEkyT19SRVBMWV9XUklURTMyKHN0cnVjdCBpMm9fY29udHJvbGxlciAqYywgdTMyIHZhbCkKK3sKKwl3bWIoKTsKKwl3cml0ZWwodmFsLCBjLT5yZXBseV9wb3J0KTsKK307CisKK3N0YXRpYyBpbmxpbmUgdTMyIEkyT19JUlFfUkVBRDMyKHN0cnVjdCBpMm9fY29udHJvbGxlciAqYykKK3sKKwlybWIoKTsKKwlyZXR1cm4gcmVhZGwoYy0+aXJxX21hc2spOworfTsKKworc3RhdGljIGlubGluZSB2b2lkIEkyT19JUlFfV1JJVEUzMihzdHJ1Y3QgaTJvX2NvbnRyb2xsZXIgKmMsIHUzMiB2YWwpCit7CisJd21iKCk7CisJd3JpdGVsKHZhbCwgYy0+aXJxX21hc2spOworCXdtYigpOworfTsKKworLyoqCisgKglpMm9fbXNnX2dldCAtIG9idGFpbiBhbiBJMk8gbWVzc2FnZSBmcm9tIHRoZSBJT1AKKyAqCUBjOiBJMk8gY29udHJvbGxlcgorICoJQG1zZzogcG9pbnRlciB0byBhIEkyTyBtZXNzYWdlIHBvaW50ZXIKKyAqCisgKglUaGlzIGZ1bmN0aW9uIHRyaWVzIHRvIGdldCBhIG1lc3NhZ2Ugc2xvdC4gSWYgbm8gbWVzc2FnZSBzbG90IGlzCisgKglhdmFpbGFibGUgZG8gbm90IHdhaXQgdW50aWwgb25lIGlzIGF2YWlsYWJlIChzZWUgYWxzbyBpMm9fbXNnX2dldF93YWl0KS4KKyAqCisgKglPbiBhIHN1Y2Nlc3MgdGhlIG1lc3NhZ2UgaXMgcmV0dXJuZWQgYW5kIHRoZSBwb2ludGVyIHRvIHRoZSBtZXNzYWdlIGlzCisgKglzZXQgaW4gbXNnLiBUaGUgcmV0dXJuZWQgbWVzc2FnZSBpcyB0aGUgcGh5c2ljYWwgcGFnZSBmcmFtZSBvZmZzZXQKKyAqCWFkZHJlc3MgZnJvbSB0aGUgcmVhZCBwb3J0IChzZWUgdGhlIGkybyBzcGVjKS4gSWYgbm8gbWVzc2FnZSBpcworICoJYXZhaWxhYmxlIHJldHVybnMgSTJPX1FVRVVFX0VNUFRZIGFuZCBtc2cgaXMgbGVhdmVkIHVudG91Y2hlZC4KKyAqLworc3RhdGljIGlubGluZSB1MzIgaTJvX21zZ19nZXQoc3RydWN0IGkyb19jb250cm9sbGVyICpjLAorCQkJICAgICAgc3RydWN0IGkyb19tZXNzYWdlIF9faW9tZW0gKiptc2cpCit7CisJdTMyIG07CisKKwlpZiAoKG0gPSBJMk9fUE9TVF9SRUFEMzIoYykpICE9IEkyT19RVUVVRV9FTVBUWSkKKwkJKm1zZyA9IGMtPmluX3F1ZXVlLnZpcnQgKyBtOworCisJcmV0dXJuIG07Cit9OworCisvKioKKyAqCWkyb19tc2dfcG9zdCAtIFBvc3QgSTJPIG1lc3NhZ2UgdG8gSTJPIGNvbnRyb2xsZXIKKyAqCUBjOiBJMk8gY29udHJvbGxlciB0byB3aGljaCB0aGUgbWVzc2FnZSBzaG91bGQgYmUgc2VuZAorICoJQG06IHRoZSBtZXNzYWdlIGlkZW50aWZpZXIKKyAqCisgKglQb3N0IHRoZSBtZXNzYWdlIHRvIHRoZSBJMk8gY29udHJvbGxlci4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGkyb19tc2dfcG9zdChzdHJ1Y3QgaTJvX2NvbnRyb2xsZXIgKmMsIHUzMiBtKQoreworCUkyT19QT1NUX1dSSVRFMzIoYywgbSk7Cit9OworCisvKioKKyAqIAlpMm9fbXNnX3Bvc3Rfd2FpdCAtIFBvc3QgYW5kIHdhaXQgYSBtZXNzYWdlIGFuZCB3YWl0IHVudGlsIHJldHVybgorICoJQGM6IGNvbnRyb2xsZXIKKyAqCUBtOiBtZXNzYWdlIHRvIHBvc3QKKyAqCUB0aW1lb3V0OiB0aW1lIGluIHNlY29uZHMgdG8gd2FpdAorICoKKyAqIAlUaGlzIEFQSSBhbGxvd3MgYW4gT1NNIHRvIHBvc3QgYSBtZXNzYWdlIGFuZCB0aGVuIGJlIHRvbGQgd2hldGhlciBvcgorICoJbm90IHRoZSBzeXN0ZW0gcmVjZWl2ZWQgYSBzdWNjZXNzZnVsIHJlcGx5LiBJZiB0aGUgbWVzc2FnZSB0aW1lcyBvdXQKKyAqCXRoZW4gdGhlIHZhbHVlICctRVRJTUVET1VUJyBpcyByZXR1cm5lZC4KKyAqCisgKglSZXR1cm5zIDAgb24gc3VjY2VzcyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGkyb19tc2dfcG9zdF93YWl0KHN0cnVjdCBpMm9fY29udHJvbGxlciAqYywgdTMyIG0sCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgdGltZW91dCkKK3sKKwlyZXR1cm4gaTJvX21zZ19wb3N0X3dhaXRfbWVtKGMsIG0sIHRpbWVvdXQsIE5VTEwpOworfTsKKworLyoqCisgKglpMm9fZmx1c2hfcmVwbHkgLSBGbHVzaCByZXBseSBmcm9tIEkyTyBjb250cm9sbGVyCisgKglAYzogSTJPIGNvbnRyb2xsZXIKKyAqCUBtOiB0aGUgbWVzc2FnZSBpZGVudGlmaWVyCisgKgorICoJVGhlIEkyTyBjb250cm9sbGVyIG11c3QgYmUgaW5mb3JtZWQgdGhhdCB0aGUgcmVwbHkgbWVzc2FnZSBpcyBub3QgbmVlZGVkCisgKglhbnltb3JlLiBJZiB5b3UgZm9yZ2V0IHRvIGZsdXNoIHRoZSByZXBseSwgdGhlIG1lc3NhZ2UgZnJhbWUgY2FuJ3QgYmUKKyAqCXVzZWQgYnkgdGhlIGNvbnRyb2xsZXIgYW55bW9yZSBhbmQgaXMgdGhlcmVmb3JlIGxvc3QuCisgKgorICoJRklYTUU6IGlzIHRoZXJlIGEgdGltZW91dCBhZnRlciB3aGljaCB0aGUgY29udHJvbGxlciByZXVzZSB0aGUgbWVzc2FnZT8KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGkyb19mbHVzaF9yZXBseShzdHJ1Y3QgaTJvX2NvbnRyb2xsZXIgKmMsIHUzMiBtKQoreworCUkyT19SRVBMWV9XUklURTMyKGMsIG0pOworfTsKKworLyoqCisgKglpMm9fb3V0X3RvX3ZpcnQgLSBUdXJuIGFuIEkyTyBtZXNzYWdlIHRvIGEgdmlydHVhbCBhZGRyZXNzCisgKglAYzogY29udHJvbGxlcgorICoJQG06IG1lc3NhZ2UgZW5naW5lIHZhbHVlCisgKgorICoJVHVybiBhIHJlY2VpdmUgbWVzc2FnZSBmcm9tIGFuIEkyTyBjb250cm9sbGVyIGJ1cyBhZGRyZXNzIGludG8KKyAqCWEgTGludXggdmlydHVhbCBhZGRyZXNzLiBUaGUgc2hhcmVkIHBhZ2UgZnJhbWUgaXMgYSBsaW5lYXIgYmxvY2sKKyAqCXNvIHdlIHNpbXBseSBoYXZlIHRvIHNoaWZ0IHRoZSBvZmZzZXQuIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QKKyAqCXdvcmsgZm9yIHNlbmRlciBzaWRlIG1lc3NhZ2VzIGFzIHRoZXkgYXJlIGlvcmVtYXAgb2JqZWN0cworICoJcHJvdmlkZWQgYnkgdGhlIEkyTyBjb250cm9sbGVyLgorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpMm9fbWVzc2FnZSAqaTJvX21zZ19vdXRfdG9fdmlydChzdHJ1Y3QgaTJvX2NvbnRyb2xsZXIgKmMsCisJCQkJCQkgICAgICB1MzIgbSkKK3sKKwlCVUdfT04obSA8IGMtPm91dF9xdWV1ZS5waHlzCisJICAgICAgIHx8IG0gPj0gYy0+b3V0X3F1ZXVlLnBoeXMgKyBjLT5vdXRfcXVldWUubGVuKTsKKworCXJldHVybiBjLT5vdXRfcXVldWUudmlydCArIChtIC0gYy0+b3V0X3F1ZXVlLnBoeXMpOworfTsKKworLyoqCisgKglpMm9fbXNnX2luX3RvX3ZpcnQgLSBUdXJuIGFuIEkyTyBtZXNzYWdlIHRvIGEgdmlydHVhbCBhZGRyZXNzCisgKglAYzogY29udHJvbGxlcgorICoJQG06IG1lc3NhZ2UgZW5naW5lIHZhbHVlCisgKgorICoJVHVybiBhIHNlbmQgbWVzc2FnZSBmcm9tIGFuIEkyTyBjb250cm9sbGVyIGJ1cyBhZGRyZXNzIGludG8KKyAqCWEgTGludXggdmlydHVhbCBhZGRyZXNzLiBUaGUgc2hhcmVkIHBhZ2UgZnJhbWUgaXMgYSBsaW5lYXIgYmxvY2sKKyAqCXNvIHdlIHNpbXBseSBoYXZlIHRvIHNoaWZ0IHRoZSBvZmZzZXQuIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QKKyAqCXdvcmsgZm9yIHJlY2VpdmUgc2lkZSBtZXNzYWdlcyBhcyB0aGV5IGFyZSBrbWFsbG9jIG9iamVjdHMKKyAqCWluIGEgZGlmZmVyZW50IHBvb2wuCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IGkyb19tZXNzYWdlIF9faW9tZW0gKmkyb19tc2dfaW5fdG9fdmlydChzdHJ1Y3QgaTJvX2NvbnRyb2xsZXIgKmMsCisJCQkJCQkgICAgIHUzMiBtKQoreworCXJldHVybiBjLT5pbl9xdWV1ZS52aXJ0ICsgbTsKK307CisKKy8qKgorICoJaTJvX2RtYV9hbGxvYyAtIEFsbG9jYXRlIERNQSBtZW1vcnkKKyAqCUBkZXY6IHN0cnVjdCBkZXZpY2UgcG9pbnRlciB0byB0aGUgUENJIGRldmljZSBvZiB0aGUgSTJPIGNvbnRyb2xsZXIKKyAqCUBhZGRyOiBpMm9fZG1hIHN0cnVjdCB3aGljaCBzaG91bGQgZ2V0IHRoZSBETUEgYnVmZmVyCisgKglAbGVuOiBsZW5ndGggb2YgdGhlIG5ldyBETUEgbWVtb3J5CisgKglAZ2ZwX21hc2s6IEdGUCBtYXNrCisgKgorICoJQWxsb2NhdGUgYSBjb2hlcmVudCBETUEgbWVtb3J5IGFuZCB3cml0ZSB0aGUgcG9pbnRlcnMgaW50byBhZGRyLgorICoKKyAqCVJldHVybnMgMCBvbiBzdWNjZXNzIG9yIC1FTk9NRU0gb24gZmFpbHVyZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgaTJvX2RtYV9hbGxvYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBpMm9fZG1hICphZGRyLAorCQkJCXNpemVfdCBsZW4sIHVuc2lnbmVkIGludCBnZnBfbWFzaykKK3sKKwlhZGRyLT52aXJ0ID0gZG1hX2FsbG9jX2NvaGVyZW50KGRldiwgbGVuLCAmYWRkci0+cGh5cywgZ2ZwX21hc2spOworCWlmICghYWRkci0+dmlydCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZW1zZXQoYWRkci0+dmlydCwgMCwgbGVuKTsKKwlhZGRyLT5sZW4gPSBsZW47CisKKwlyZXR1cm4gMDsKK307CisKKy8qKgorICoJaTJvX2RtYV9mcmVlIC0gRnJlZSBETUEgbWVtb3J5CisgKglAZGV2OiBzdHJ1Y3QgZGV2aWNlIHBvaW50ZXIgdG8gdGhlIFBDSSBkZXZpY2Ugb2YgdGhlIEkyTyBjb250cm9sbGVyCisgKglAYWRkcjogaTJvX2RtYSBzdHJ1Y3Qgd2hpY2ggY29udGFpbnMgdGhlIERNQSBidWZmZXIKKyAqCisgKglGcmVlIGEgY29oZXJlbnQgRE1BIG1lbW9yeSBhbmQgc2V0IHZpcnR1YWwgYWRkcmVzcyBvZiBhZGRyIHRvIE5VTEwuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpMm9fZG1hX2ZyZWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgaTJvX2RtYSAqYWRkcikKK3sKKwlpZiAoYWRkci0+dmlydCkgeworCQlpZiAoYWRkci0+cGh5cykKKwkJCWRtYV9mcmVlX2NvaGVyZW50KGRldiwgYWRkci0+bGVuLCBhZGRyLT52aXJ0LAorCQkJCQkgIGFkZHItPnBoeXMpOworCQllbHNlCisJCQlrZnJlZShhZGRyLT52aXJ0KTsKKwkJYWRkci0+dmlydCA9IE5VTEw7CisJfQorfTsKKworLyoqCisgKglpMm9fZG1hX21hcCAtIE1hcCB0aGUgbWVtb3J5IHRvIERNQQorICoJQGRldjogc3RydWN0IGRldmljZSBwb2ludGVyIHRvIHRoZSBQQ0kgZGV2aWNlIG9mIHRoZSBJMk8gY29udHJvbGxlcgorICoJQGFkZHI6IGkyb19kbWEgc3RydWN0IHdoaWNoIHNob3VsZCBiZSBtYXBwZWQKKyAqCisgKglNYXAgdGhlIG1lbW9yeSBpbiBhZGRyLT52aXJ0IHRvIGNvaGVyZW50IERNQSBtZW1vcnkgYW5kIHdyaXRlIHRoZQorICoJcGh5c2ljYWwgYWRkcmVzcyBpbnRvIGFkZHItPnBoeXMuCisgKgorICoJUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgLUVOT01FTSBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgaW5saW5lIGludCBpMm9fZG1hX21hcChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBpMm9fZG1hICphZGRyKQoreworCWlmICghYWRkci0+dmlydCkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpZiAoIWFkZHItPnBoeXMpCisJCWFkZHItPnBoeXMgPSBkbWFfbWFwX3NpbmdsZShkZXYsIGFkZHItPnZpcnQsIGFkZHItPmxlbiwKKwkJCQkJICAgIERNQV9CSURJUkVDVElPTkFMKTsKKwlpZiAoIWFkZHItPnBoeXMpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0dXJuIDA7Cit9OworCisvKioKKyAqCWkyb19kbWFfdW5tYXAgLSBVbm1hcCB0aGUgRE1BIG1lbW9yeQorICoJQGRldjogc3RydWN0IGRldmljZSBwb2ludGVyIHRvIHRoZSBQQ0kgZGV2aWNlIG9mIHRoZSBJMk8gY29udHJvbGxlcgorICoJQGFkZHI6IGkyb19kbWEgc3RydWN0IHdoaWNoIHNob3VsZCBiZSB1bm1hcHBlZAorICoKKyAqCVVubWFwIHRoZSBtZW1vcnkgaW4gYWRkci0+dmlydCBmcm9tIERNQSBtZW1vcnkuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpMm9fZG1hX3VubWFwKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGkyb19kbWEgKmFkZHIpCit7CisJaWYgKCFhZGRyLT52aXJ0KQorCQlyZXR1cm47CisKKwlpZiAoYWRkci0+cGh5cykgeworCQlkbWFfdW5tYXBfc2luZ2xlKGRldiwgYWRkci0+cGh5cywgYWRkci0+bGVuLCBETUFfQklESVJFQ1RJT05BTCk7CisJCWFkZHItPnBoeXMgPSAwOworCX0KK307CisKKy8qCisgKglFbmRpYW4gaGFuZGxpbmcgd3JhcHBlZCBpbnRvIHRoZSBtYWNybyAtIGtlZXBzIHRoZSBjb3JlIGNvZGUKKyAqCWNsZWFuZXIuCisgKi8KKworI2RlZmluZSBpMm9fcmF3X3dyaXRlbCh2YWwsIG1lbSkJX19yYXdfd3JpdGVsKGNwdV90b19sZTMyKHZhbCksIG1lbSkKKworZXh0ZXJuIGludCBpMm9fcGFybV9maWVsZF9nZXQoc3RydWN0IGkyb19kZXZpY2UgKiwgaW50LCBpbnQsIHZvaWQgKiwgaW50KTsKK2V4dGVybiBpbnQgaTJvX3Bhcm1fdGFibGVfZ2V0KHN0cnVjdCBpMm9fZGV2aWNlICosIGludCwgaW50LCBpbnQsIHZvaWQgKiwgaW50LAorCQkJICAgICAgdm9pZCAqLCBpbnQpOworCisvKiBkZWJ1Z2dpbmcgYW5kIHRyb3VibGVzaG9vdGluZy9kaWFnbm9zdGljIGhlbHBlcnMuICovCisjZGVmaW5lIG9zbV9wcmludGsobGV2ZWwsIGZvcm1hdCwgYXJnLi4uKSAgXAorCXByaW50ayhsZXZlbCAiJXM6ICIgZm9ybWF0LCBPU01fTkFNRSAsICMjIGFyZykKKworI2lmZGVmIERFQlVHCisjZGVmaW5lIG9zbV9kZWJ1Zyhmb3JtYXQsIGFyZy4uLikgXAorCW9zbV9wcmludGsoS0VSTl9ERUJVRywgZm9ybWF0ICwgIyMgYXJnKQorI2Vsc2UKKyNkZWZpbmUgb3NtX2RlYnVnKGZvcm1hdCwgYXJnLi4uKSBcCisgICAgICAgIGRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisjZGVmaW5lIG9zbV9lcnIoZm9ybWF0LCBhcmcuLi4pCQlcCisJb3NtX3ByaW50ayhLRVJOX0VSUiwgZm9ybWF0ICwgIyMgYXJnKQorI2RlZmluZSBvc21faW5mbyhmb3JtYXQsIGFyZy4uLikJCVwKKwlvc21fcHJpbnRrKEtFUk5fSU5GTywgZm9ybWF0ICwgIyMgYXJnKQorI2RlZmluZSBvc21fd2Fybihmb3JtYXQsIGFyZy4uLikJCVwKKwlvc21fcHJpbnRrKEtFUk5fV0FSTklORywgZm9ybWF0ICwgIyMgYXJnKQorCisvKiBkZWJ1Z2dpbmcgZnVuY3Rpb25zICovCitleHRlcm4gdm9pZCBpMm9fcmVwb3J0X3N0YXR1cyhjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgc3RydWN0IGkyb19tZXNzYWdlICopOworZXh0ZXJuIHZvaWQgaTJvX2R1bXBfbWVzc2FnZShzdHJ1Y3QgaTJvX21lc3NhZ2UgKik7CitleHRlcm4gdm9pZCBpMm9fZHVtcF9ocnQoc3RydWN0IGkyb19jb250cm9sbGVyICpjKTsKK2V4dGVybiB2b2lkIGkyb19kZWJ1Z19zdGF0ZShzdHJ1Y3QgaTJvX2NvbnRyb2xsZXIgKmMpOworCisvKgorICoJQ2FjaGUgc3RyYXRlZ2llcworICovCisKKy8qCVRoZSBOVUxMIHN0cmF0ZWd5IGxlYXZlcyBldmVyeXRoaW5nIHVwIHRvIHRoZSBjb250cm9sbGVyLiBUaGlzIHRlbmRzIHRvIGJlIGEKKyAqCXBlc3NpbWFsIGJ1dCBmdW5jdGlvbmFsIGNob2ljZS4KKyAqLworI2RlZmluZSBDQUNIRV9OVUxMCQkwCisvKglQcmVmZXRjaCBkYXRhIHdoZW4gcmVhZGluZy4gV2UgY29udGludWFsbHkgYXR0ZW1wdCB0byBsb2FkIHRoZSBuZXh0IDMyIHNlY3RvcnMKKyAqCWludG8gdGhlIGNvbnRyb2xsZXIgY2FjaGUuCisgKi8KKyNkZWZpbmUgQ0FDSEVfUFJFRkVUQ0gJCTEKKy8qCVByZWZldGNoIGRhdGEgd2hlbiByZWFkaW5nLiBXZSBzb21ldGltZXMgYXR0ZW1wdCB0byBsb2FkIHRoZSBuZXh0IDMyIHNlY3RvcnMKKyAqCWludG8gdGhlIGNvbnRyb2xsZXIgY2FjaGUuIFdoZW4gYW4gSS9PIGlzIGxlc3MgPD0gOEsgd2UgYXNzdW1lIGl0cyBwcm9iYWJseQorICoJbm90IHNlcXVlbnRpYWwgYW5kIGRvbid0IHByZWZldGNoIChkZWZhdWx0KQorICovCisjZGVmaW5lIENBQ0hFX1NNQVJURkVUQ0gJMgorLyoJRGF0YSBpcyB3cml0dGVuIHRvIHRoZSBjYWNoZSBhbmQgdGhlbiBvdXQgb24gdG8gdGhlIGRpc2suIFRoZSBJL08gbXVzdCBiZQorICoJcGh5c2ljYWxseSBvbiB0aGUgbWVkaXVtIGJlZm9yZSB0aGUgd3JpdGUgaXMgYWNrbm93bGVkZ2VkIChkZWZhdWx0IHdpdGhvdXQKKyAqCU5WUkFNKQorICovCisjZGVmaW5lIENBQ0hFX1dSSVRFVEhST1VHSAkxNworLyoJRGF0YSBpcyB3cml0dGVuIHRvIHRoZSBjYWNoZSBhbmQgdGhlbiBvdXQgb24gdG8gdGhlIGRpc2suIFRoZSBjb250cm9sbGVyCisgKglpcyBwZXJtaXR0ZWQgdG8gd3JpdGUgYmFjayB0aGUgY2FjaGUgYW55IHdheSBpdCB3YW50cy4gKGRlZmF1bHQgaWYgYmF0dGVyeQorICoJYmFja2VkIE5WUkFNIGlzIHByZXNlbnQpLiBJdCBjYW4gYmUgdXNlZnVsIHRvIHNldCB0aGlzIGZvciBzd2FwIHJlZ2FyZGxlc3Mgb2YKKyAqCWJhdHRlcnkgc3RhdGUuCisgKi8KKyNkZWZpbmUgQ0FDSEVfV1JJVEVCQUNLCQkxOAorLyoJT3B0aW1pc2UgZm9yIHVuZGVyIHBvd2VyZWQgY29udHJvbGxlcnMsIGVzcGVjaWFsbHkgb24gUkFJRDEgYW5kIFJBSUQwLiBXZQorICoJd3JpdGUgbGFyZ2UgSS9PJ3MgZGlyZWN0bHkgdG8gZGlzayBieXBhc3NpbmcgdGhlIGNhY2hlIHRvIGF2b2lkIHRoZSBleHRyYQorICoJbWVtb3J5IGNvcHkgaGl0cy4gU21hbGwgd3JpdGVzIGFyZSB3cml0ZWJhY2sgY2FjaGVkCisgKi8KKyNkZWZpbmUgQ0FDSEVfU01BUlRCQUNLCQkxOQorLyoJT3B0aW1pc2UgZm9yIHVuZGVyIHBvd2VyZWQgY29udHJvbGxlcnMsIGVzcGVjaWFsbHkgb24gUkFJRDEgYW5kIFJBSUQwLiBXZQorICoJd3JpdGUgbGFyZ2UgSS9PJ3MgZGlyZWN0bHkgdG8gZGlzayBieXBhc3NpbmcgdGhlIGNhY2hlIHRvIGF2b2lkIHRoZSBleHRyYQorICoJbWVtb3J5IGNvcHkgaGl0cy4gU21hbGwgd3JpdGVzIGFyZSB3cml0ZXRocm91Z2ggY2FjaGVkLiBTdWl0YWJsZSBmb3IgZGV2aWNlcworICoJbGFja2luZyBiYXR0ZXJ5IGJhY2t1cAorICovCisjZGVmaW5lIENBQ0hFX1NNQVJUVEhST1VHSAkyMAorCisvKgorICoJSW9jdGwgc3RydWN0dXJlcworICovCisKKyNkZWZpbmUgCUJMS0kyT0dSU1RSQVQJX0lPUignMicsIDEsIGludCkKKyNkZWZpbmUgCUJMS0kyT0dXU1RSQVQJX0lPUignMicsIDIsIGludCkKKyNkZWZpbmUgCUJMS0kyT1NSU1RSQVQJX0lPVygnMicsIDMsIGludCkKKyNkZWZpbmUgCUJMS0kyT1NXU1RSQVQJX0lPVygnMicsIDQsIGludCkKKworLyoKKyAqCUkyTyBGdW5jdGlvbiBjb2RlcworICovCisKKy8qCisgKglFeGVjdXRpdmUgQ2xhc3MKKyAqLworI2RlZmluZQlJMk9fQ01EX0FEQVBURVJfQVNTSUdOCQkweEIzCisjZGVmaW5lCUkyT19DTURfQURBUFRFUl9SRUFECQkweEIyCisjZGVmaW5lCUkyT19DTURfQURBUFRFUl9SRUxFQVNFCQkweEI1CisjZGVmaW5lCUkyT19DTURfQklPU19JTkZPX1NFVAkJMHhBNQorI2RlZmluZQlJMk9fQ01EX0JPT1RfREVWSUNFX1NFVAkJMHhBNworI2RlZmluZQlJMk9fQ01EX0NPTkZJR19WQUxJREFURQkJMHhCQgorI2RlZmluZQlJMk9fQ01EX0NPTk5fU0VUVVAJCTB4Q0EKKyNkZWZpbmUJSTJPX0NNRF9ERE1fREVTVFJPWQkJMHhCMQorI2RlZmluZQlJMk9fQ01EX0RETV9FTkFCTEUJCTB4RDUKKyNkZWZpbmUJSTJPX0NNRF9ERE1fUVVJRVNDRQkJMHhDNworI2RlZmluZQlJMk9fQ01EX0RETV9SRVNFVAkJMHhEOQorI2RlZmluZQlJMk9fQ01EX0RETV9TVVNQRU5ECQkweEFGCisjZGVmaW5lCUkyT19DTURfREVWSUNFX0FTU0lHTgkJMHhCNworI2RlZmluZQlJMk9fQ01EX0RFVklDRV9SRUxFQVNFCQkweEI5CisjZGVmaW5lCUkyT19DTURfSFJUX0dFVAkJCTB4QTgKKyNkZWZpbmUJSTJPX0NNRF9BREFQVEVSX0NMRUFSCQkweEJFCisjZGVmaW5lCUkyT19DTURfQURBUFRFUl9DT05ORUNUCQkweEM5CisjZGVmaW5lCUkyT19DTURfQURBUFRFUl9SRVNFVAkJMHhCRAorI2RlZmluZQlJMk9fQ01EX0xDVF9OT1RJRlkJCTB4QTIKKyNkZWZpbmUJSTJPX0NNRF9PVVRCT1VORF9JTklUCQkweEExCisjZGVmaW5lCUkyT19DTURfUEFUSF9FTkFCTEUJCTB4RDMKKyNkZWZpbmUJSTJPX0NNRF9QQVRIX1FVSUVTQ0UJCTB4QzUKKyNkZWZpbmUJSTJPX0NNRF9QQVRIX1JFU0VUCQkweEQ3CisjZGVmaW5lCUkyT19DTURfU1RBVElDX01GX0NSRUFURQkweERECisjZGVmaW5lCUkyT19DTURfU1RBVElDX01GX1JFTEVBU0UJMHhERgorI2RlZmluZQlJMk9fQ01EX1NUQVRVU19HRVQJCTB4QTAKKyNkZWZpbmUJSTJPX0NNRF9TV19ET1dOTE9BRAkJMHhBOQorI2RlZmluZQlJMk9fQ01EX1NXX1VQTE9BRAkJMHhBQgorI2RlZmluZQlJMk9fQ01EX1NXX1JFTU9WRQkJMHhBRAorI2RlZmluZQlJMk9fQ01EX1NZU19FTkFCTEUJCTB4RDEKKyNkZWZpbmUJSTJPX0NNRF9TWVNfTU9ESUZZCQkweEMxCisjZGVmaW5lCUkyT19DTURfU1lTX1FVSUVTQ0UJCTB4QzMKKyNkZWZpbmUJSTJPX0NNRF9TWVNfVEFCX1NFVAkJMHhBMworCisvKgorICogVXRpbGl0eSBDbGFzcworICovCisjZGVmaW5lIEkyT19DTURfVVRJTF9OT1AJCTB4MDAKKyNkZWZpbmUgSTJPX0NNRF9VVElMX0FCT1JUCQkweDAxCisjZGVmaW5lIEkyT19DTURfVVRJTF9DTEFJTQkJMHgwOQorI2RlZmluZSBJMk9fQ01EX1VUSUxfUkVMRUFTRQkJMHgwQgorI2RlZmluZSBJMk9fQ01EX1VUSUxfUEFSQU1TX0dFVAkJMHgwNgorI2RlZmluZSBJMk9fQ01EX1VUSUxfUEFSQU1TX1NFVAkJMHgwNQorI2RlZmluZSBJMk9fQ01EX1VUSUxfRVZUX1JFR0lTVEVSCTB4MTMKKyNkZWZpbmUgSTJPX0NNRF9VVElMX0VWVF9BQ0sJCTB4MTQKKyNkZWZpbmUgSTJPX0NNRF9VVElMX0NPTkZJR19ESUFMT0cJMHgxMAorI2RlZmluZSBJMk9fQ01EX1VUSUxfREVWSUNFX1JFU0VSVkUJMHgwRAorI2RlZmluZSBJMk9fQ01EX1VUSUxfREVWSUNFX1JFTEVBU0UJMHgwRgorI2RlZmluZSBJMk9fQ01EX1VUSUxfTE9DSwkJMHgxNworI2RlZmluZSBJMk9fQ01EX1VUSUxfTE9DS19SRUxFQVNFCTB4MTkKKyNkZWZpbmUgSTJPX0NNRF9VVElMX1JFUExZX0ZBVUxUX05PVElGWQkweDE1CisKKy8qCisgKiBTQ1NJIEhvc3QgQnVzIEFkYXB0ZXIgQ2xhc3MKKyAqLworI2RlZmluZSBJMk9fQ01EX1NDU0lfRVhFQwkJMHg4MQorI2RlZmluZSBJMk9fQ01EX1NDU0lfQUJPUlQJCTB4ODMKKyNkZWZpbmUgSTJPX0NNRF9TQ1NJX0JVU1JFU0VUCQkweDI3CisKKy8qCisgKiBSYW5kb20gQmxvY2sgU3RvcmFnZSBDbGFzcworICovCisjZGVmaW5lIEkyT19DTURfQkxPQ0tfUkVBRAkJMHgzMAorI2RlZmluZSBJMk9fQ01EX0JMT0NLX1dSSVRFCQkweDMxCisjZGVmaW5lIEkyT19DTURfQkxPQ0tfQ0ZMVVNICQkweDM3CisjZGVmaW5lIEkyT19DTURfQkxPQ0tfTUxPQ0sJCTB4NDkKKyNkZWZpbmUgSTJPX0NNRF9CTE9DS19NVU5MT0NLCQkweDRCCisjZGVmaW5lIEkyT19DTURfQkxPQ0tfTU1PVU5UCQkweDQxCisjZGVmaW5lIEkyT19DTURfQkxPQ0tfTUVKRUNUCQkweDQzCisjZGVmaW5lIEkyT19DTURfQkxPQ0tfUE9XRVIJCTB4NzAKKworI2RlZmluZSBJMk9fUFJJVkFURV9NU0cJCQkweEZGCisKKy8qIENvbW1hbmQgc3RhdHVzIHZhbHVlcyAgKi8KKworI2RlZmluZSBJMk9fQ01EX0lOX1BST0dSRVNTCTB4MDEKKyNkZWZpbmUgSTJPX0NNRF9SRUpFQ1RFRAkweDAyCisjZGVmaW5lIEkyT19DTURfRkFJTEVECQkweDAzCisjZGVmaW5lIEkyT19DTURfQ09NUExFVEVECTB4MDQKKworLyogSTJPIEFQSSBmdW5jdGlvbiByZXR1cm4gdmFsdWVzICovCisKKyNkZWZpbmUgSTJPX1JUTl9OT19FUlJPUgkJCTAKKyNkZWZpbmUgSTJPX1JUTl9OT1RfSU5JVAkJCTEKKyNkZWZpbmUgSTJPX1JUTl9GUkVFX1FfRU1QVFkJCQkyCisjZGVmaW5lIEkyT19SVE5fVENCX0VSUk9SCQkJMworI2RlZmluZSBJMk9fUlROX1RSQU5TQUNUSU9OX0VSUk9SCQk0CisjZGVmaW5lIEkyT19SVE5fQURBUFRFUl9BTFJFQURZX0lOSVQJCTUKKyNkZWZpbmUgSTJPX1JUTl9NQUxMT0NfRVJST1IJCQk2CisjZGVmaW5lIEkyT19SVE5fQURQVFJfTk9UX1JFR0lTVEVSRUQJCTcKKyNkZWZpbmUgSTJPX1JUTl9NU0dfUkVQTFlfVElNRU9VVAkJOAorI2RlZmluZSBJMk9fUlROX05PX1NUQVRVUwkJCTkKKyNkZWZpbmUgSTJPX1JUTl9OT19GSVJNX1ZFUgkJCTEwCisjZGVmaW5lCUkyT19SVE5fTk9fTElOS19TUEVFRAkJCTExCisKKy8qIFJlcGx5IG1lc3NhZ2Ugc3RhdHVzIGRlZmluZXMgZm9yIGFsbCBtZXNzYWdlcyAqLworCisjZGVmaW5lIEkyT19SRVBMWV9TVEFUVVNfU1VDQ0VTUyAgICAgICAgICAgICAgICAgICAgCTB4MDAKKyNkZWZpbmUgSTJPX1JFUExZX1NUQVRVU19BQk9SVF9ESVJUWSAgICAgICAgICAgICAgICAJMHgwMQorI2RlZmluZSBJMk9fUkVQTFlfU1RBVFVTX0FCT1JUX05PX0RBVEFfVFJBTlNGRVIgICAgIAkweDAyCisjZGVmaW5lCUkyT19SRVBMWV9TVEFUVVNfQUJPUlRfUEFSVElBTF9UUkFOU0ZFUgkJMHgwMworI2RlZmluZQlJMk9fUkVQTFlfU1RBVFVTX0VSUk9SX0RJUlRZCQkJMHgwNAorI2RlZmluZQlJMk9fUkVQTFlfU1RBVFVTX0VSUk9SX05PX0RBVEFfVFJBTlNGRVIJCTB4MDUKKyNkZWZpbmUJSTJPX1JFUExZX1NUQVRVU19FUlJPUl9QQVJUSUFMX1RSQU5TRkVSCQkweDA2CisjZGVmaW5lCUkyT19SRVBMWV9TVEFUVVNfUFJPQ0VTU19BQk9SVF9ESVJUWQkJMHgwOAorI2RlZmluZQlJMk9fUkVQTFlfU1RBVFVTX1BST0NFU1NfQUJPUlRfTk9fREFUQV9UUkFOU0ZFUgkweDA5CisjZGVmaW5lCUkyT19SRVBMWV9TVEFUVVNfUFJPQ0VTU19BQk9SVF9QQVJUSUFMX1RSQU5TRkVSCTB4MEEKKyNkZWZpbmUJSTJPX1JFUExZX1NUQVRVU19UUkFOU0FDVElPTl9FUlJPUgkJMHgwQgorI2RlZmluZQlJMk9fUkVQTFlfU1RBVFVTX1BST0dSRVNTX1JFUE9SVAkJMHg4MAorCisvKiBTdGF0dXMgY29kZXMgYW5kIEVycm9yIEluZm9ybWF0aW9uIGZvciBQYXJhbWV0ZXIgZnVuY3Rpb25zICovCisKKyNkZWZpbmUgSTJPX1BBUkFNU19TVEFUVVNfU1VDQ0VTUwkJMHgwMAorI2RlZmluZSBJMk9fUEFSQU1TX1NUQVRVU19CQURfS0VZX0FCT1JUCQkweDAxCisjZGVmaW5lIEkyT19QQVJBTVNfU1RBVFVTX0JBRF9LRVlfQ09OVElOVUUgICAJMHgwMgorI2RlZmluZSBJMk9fUEFSQU1TX1NUQVRVU19CVUZGRVJfRlVMTAkJMHgwMworI2RlZmluZSBJMk9fUEFSQU1TX1NUQVRVU19CVUZGRVJfVE9PX1NNQUxMCTB4MDQKKyNkZWZpbmUgSTJPX1BBUkFNU19TVEFUVVNfRklFTERfVU5SRUFEQUJMRQkweDA1CisjZGVmaW5lIEkyT19QQVJBTVNfU1RBVFVTX0ZJRUxEX1VOV1JJVEVBQkxFCTB4MDYKKyNkZWZpbmUgSTJPX1BBUkFNU19TVEFUVVNfSU5TVUZGSUNJRU5UX0ZJRUxEUwkweDA3CisjZGVmaW5lIEkyT19QQVJBTVNfU1RBVFVTX0lOVkFMSURfR1JPVVBfSUQJMHgwOAorI2RlZmluZSBJMk9fUEFSQU1TX1NUQVRVU19JTlZBTElEX09QRVJBVElPTgkweDA5CisjZGVmaW5lIEkyT19QQVJBTVNfU1RBVFVTX05PX0tFWV9GSUVMRAkJMHgwQQorI2RlZmluZSBJMk9fUEFSQU1TX1NUQVRVU19OT19TVUNIX0ZJRUxECQkweDBCCisjZGVmaW5lIEkyT19QQVJBTVNfU1RBVFVTX05PTl9EWU5BTUlDX0dST1VQCTB4MEMKKyNkZWZpbmUgSTJPX1BBUkFNU19TVEFUVVNfT1BFUkFUSU9OX0VSUk9SCTB4MEQKKyNkZWZpbmUgSTJPX1BBUkFNU19TVEFUVVNfU0NBTEFSX0VSUk9SCQkweDBFCisjZGVmaW5lIEkyT19QQVJBTVNfU1RBVFVTX1RBQkxFX0VSUk9SCQkweDBGCisjZGVmaW5lIEkyT19QQVJBTVNfU1RBVFVTX1dST05HX0dST1VQX1RZUEUJMHgxMAorCisvKiBEZXRhaWxlZFN0YXR1c0NvZGUgZGVmaW5lcyBmb3IgRXhlY3V0aXZlLCBERE0sIFV0aWwgYW5kIFRyYW5zYWN0aW9uIGVycm9yCisgKiBtZXNzYWdlczogVGFibGUgMy0yIERldGFpbGVkIFN0YXR1cyBDb2Rlcy4qLworCisjZGVmaW5lIEkyT19EU0NfU1VDQ0VTUyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMAorI2RlZmluZSBJMk9fRFNDX0JBRF9LRVkgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgSTJPX0RTQ19UQ0xfRVJST1IgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzCisjZGVmaW5lIEkyT19EU0NfUkVQTFlfQlVGRkVSX0ZVTEwgICAgICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBJMk9fRFNDX05PX1NVQ0hfUEFHRSAgICAgICAgICAgICAgICAgICAweDAwMDUKKyNkZWZpbmUgSTJPX0RTQ19JTlNVRkZJQ0lFTlRfUkVTT1VSQ0VfU09GVCAgICAgMHgwMDA2CisjZGVmaW5lIEkyT19EU0NfSU5TVUZGSUNJRU5UX1JFU09VUkNFX0hBUkQgICAgIDB4MDAwNworI2RlZmluZSBJMk9fRFNDX0NIQUlOX0JVRkZFUl9UT09fTEFSR0UgICAgICAgICAweDAwMDkKKyNkZWZpbmUgSTJPX0RTQ19VTlNVUFBPUlRFRF9GVU5DVElPTiAgICAgICAgICAgMHgwMDBBCisjZGVmaW5lIEkyT19EU0NfREVWSUNFX0xPQ0tFRCAgICAgICAgICAgICAgICAgIDB4MDAwQgorI2RlZmluZSBJMk9fRFNDX0RFVklDRV9SRVNFVCAgICAgICAgICAgICAgICAgICAweDAwMEMKKyNkZWZpbmUgSTJPX0RTQ19JTkFQUFJPUFJJQVRFX0ZVTkNUSU9OICAgICAgICAgMHgwMDBECisjZGVmaW5lIEkyT19EU0NfSU5WQUxJRF9JTklUSUFUT1JfQUREUkVTUyAgICAgIDB4MDAwRQorI2RlZmluZSBJMk9fRFNDX0lOVkFMSURfTUVTU0FHRV9GTEFHUyAgICAgICAgICAweDAwMEYKKyNkZWZpbmUgSTJPX0RTQ19JTlZBTElEX09GRlNFVCAgICAgICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIEkyT19EU0NfSU5WQUxJRF9QQVJBTUVURVIgICAgICAgICAgICAgIDB4MDAxMQorI2RlZmluZSBJMk9fRFNDX0lOVkFMSURfUkVRVUVTVCAgICAgICAgICAgICAgICAweDAwMTIKKyNkZWZpbmUgSTJPX0RTQ19JTlZBTElEX1RBUkdFVF9BRERSRVNTICAgICAgICAgMHgwMDEzCisjZGVmaW5lIEkyT19EU0NfTUVTU0FHRV9UT09fTEFSR0UgICAgICAgICAgICAgIDB4MDAxNAorI2RlZmluZSBJMk9fRFNDX01FU1NBR0VfVE9PX1NNQUxMICAgICAgICAgICAgICAweDAwMTUKKyNkZWZpbmUgSTJPX0RTQ19NSVNTSU5HX1BBUkFNRVRFUiAgICAgICAgICAgICAgMHgwMDE2CisjZGVmaW5lIEkyT19EU0NfVElNRU9VVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxNworI2RlZmluZSBJMk9fRFNDX1VOS05PV05fRVJST1IgICAgICAgICAgICAgICAgICAweDAwMTgKKyNkZWZpbmUgSTJPX0RTQ19VTktOT1dOX0ZVTkNUSU9OICAgICAgICAgICAgICAgMHgwMDE5CisjZGVmaW5lIEkyT19EU0NfVU5TVVBQT1JURURfVkVSU0lPTiAgICAgICAgICAgIDB4MDAxQQorI2RlZmluZSBJMk9fRFNDX0RFVklDRV9CVVNZICAgICAgICAgICAgICAgICAgICAweDAwMUIKKyNkZWZpbmUgSTJPX0RTQ19ERVZJQ0VfTk9UX0FWQUlMQUJMRSAgICAgICAgICAgMHgwMDFDCisKKy8qIERldGFpbGVkU3RhdHVzQ29kZSBkZWZpbmVzIGZvciBCbG9jayBTdG9yYWdlIE9wZXJhdGlvbjogVGFibGUgNi03IERldGFpbGVkCisgICBTdGF0dXMgQ29kZXMuKi8KKworI2RlZmluZSBJMk9fQlNBX0RTQ19TVUNDRVNTICAgICAgICAgICAgICAgMHgwMDAwCisjZGVmaW5lIEkyT19CU0FfRFNDX01FRElBX0VSUk9SICAgICAgICAgICAweDAwMDEKKyNkZWZpbmUgSTJPX0JTQV9EU0NfQUNDRVNTX0VSUk9SICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBJMk9fQlNBX0RTQ19ERVZJQ0VfRkFJTFVSRSAgICAgICAgMHgwMDAzCisjZGVmaW5lIEkyT19CU0FfRFNDX0RFVklDRV9OT1RfUkVBRFkgICAgICAweDAwMDQKKyNkZWZpbmUgSTJPX0JTQV9EU0NfTUVESUFfTk9UX1BSRVNFTlQgICAgIDB4MDAwNQorI2RlZmluZSBJMk9fQlNBX0RTQ19NRURJQV9MT0NLRUQgICAgICAgICAgMHgwMDA2CisjZGVmaW5lIEkyT19CU0FfRFNDX01FRElBX0ZBSUxVUkUgICAgICAgICAweDAwMDcKKyNkZWZpbmUgSTJPX0JTQV9EU0NfUFJPVE9DT0xfRkFJTFVSRSAgICAgIDB4MDAwOAorI2RlZmluZSBJMk9fQlNBX0RTQ19CVVNfRkFJTFVSRSAgICAgICAgICAgMHgwMDA5CisjZGVmaW5lIEkyT19CU0FfRFNDX0FDQ0VTU19WSU9MQVRJT04gICAgICAweDAwMEEKKyNkZWZpbmUgSTJPX0JTQV9EU0NfV1JJVEVfUFJPVEVDVEVEICAgICAgIDB4MDAwQgorI2RlZmluZSBJMk9fQlNBX0RTQ19ERVZJQ0VfUkVTRVQgICAgICAgICAgMHgwMDBDCisjZGVmaW5lIEkyT19CU0FfRFNDX1ZPTFVNRV9DSEFOR0VEICAgICAgICAweDAwMEQKKyNkZWZpbmUgSTJPX0JTQV9EU0NfVElNRU9VVCAgICAgICAgICAgICAgIDB4MDAwRQorCisvKiBGYWlsdXJlU3RhdHVzQ29kZXMsIFRhYmxlIDMtMyBNZXNzYWdlIEZhaWx1cmUgQ29kZXMgKi8KKworI2RlZmluZSBJMk9fRlNDX1RSQU5TUE9SVF9TRVJWSUNFX1NVU1BFTkRFRCAgICAgICAgICAgICAweDgxCisjZGVmaW5lIEkyT19GU0NfVFJBTlNQT1JUX1NFUlZJQ0VfVEVSTUlOQVRFRCAgICAgICAgICAgIDB4ODIKKyNkZWZpbmUgSTJPX0ZTQ19UUkFOU1BPUlRfQ09OR0VTVElPTiAgICAgICAgICAgICAgICAgICAgMHg4MworI2RlZmluZSBJMk9fRlNDX1RSQU5TUE9SVF9GQUlMVVJFICAgICAgICAgICAgICAgICAgICAgICAweDg0CisjZGVmaW5lIEkyT19GU0NfVFJBTlNQT1JUX1NUQVRFX0VSUk9SICAgICAgICAgICAgICAgICAgIDB4ODUKKyNkZWZpbmUgSTJPX0ZTQ19UUkFOU1BPUlRfVElNRV9PVVQgICAgICAgICAgICAgICAgICAgICAgMHg4NgorI2RlZmluZSBJMk9fRlNDX1RSQU5TUE9SVF9ST1VUSU5HX0ZBSUxVUkUgICAgICAgICAgICAgICAweDg3CisjZGVmaW5lIEkyT19GU0NfVFJBTlNQT1JUX0lOVkFMSURfVkVSU0lPTiAgICAgICAgICAgICAgIDB4ODgKKyNkZWZpbmUgSTJPX0ZTQ19UUkFOU1BPUlRfSU5WQUxJRF9PRkZTRVQgICAgICAgICAgICAgICAgMHg4OQorI2RlZmluZSBJMk9fRlNDX1RSQU5TUE9SVF9JTlZBTElEX01TR19GTEFHUyAgICAgICAgICAgICAweDhBCisjZGVmaW5lIEkyT19GU0NfVFJBTlNQT1JUX0ZSQU1FX1RPT19TTUFMTCAgICAgICAgICAgICAgIDB4OEIKKyNkZWZpbmUgSTJPX0ZTQ19UUkFOU1BPUlRfRlJBTUVfVE9PX0xBUkdFICAgICAgICAgICAgICAgMHg4QworI2RlZmluZSBJMk9fRlNDX1RSQU5TUE9SVF9JTlZBTElEX1RBUkdFVF9JRCAgICAgICAgICAgICAweDhECisjZGVmaW5lIEkyT19GU0NfVFJBTlNQT1JUX0lOVkFMSURfSU5JVElBVE9SX0lEICAgICAgICAgIDB4OEUKKyNkZWZpbmUgSTJPX0ZTQ19UUkFOU1BPUlRfSU5WQUxJRF9JTklUSUFUT1JfQ09OVEVYVCAgICAgMHg4RgorI2RlZmluZSBJMk9fRlNDX1RSQU5TUE9SVF9VTktOT1dOX0ZBSUxVUkUgICAgICAgICAgICAgICAweEZGCisKKy8qIERldmljZSBDbGFpbSBUeXBlcyAqLworI2RlZmluZQlJMk9fQ0xBSU1fUFJJTUFSWQkJCQkJMHgwMTAwMDAwMAorI2RlZmluZQlJMk9fQ0xBSU1fTUFOQUdFTUVOVAkJCQkJMHgwMjAwMDAwMAorI2RlZmluZQlJMk9fQ0xBSU1fQVVUSE9SSVpFRAkJCQkJMHgwMzAwMDAwMAorI2RlZmluZQlJMk9fQ0xBSU1fU0VDT05EQVJZCQkJCQkweDA0MDAwMDAwCisKKy8qIE1lc3NhZ2UgaGVhZGVyIGRlZmluZXMgZm9yIFZlcnNpb25PZmZzZXQgKi8KKyNkZWZpbmUgSTJPVkVSMTUJMHgwMDAxCisjZGVmaW5lIEkyT1ZFUjIwCTB4MDAwMgorCisvKiBEZWZhdWx0IGlzIDEuNSwgRklYTUU6IE5lZWQgc3VwcG9ydCBmb3IgYm90aCAxLjUgYW5kIDIuMCAqLworI2RlZmluZSBJMk9WRVJTSU9OCUkyT1ZFUjE1CisKKyNkZWZpbmUgU0dMX09GRlNFVF8wICAgIEkyT1ZFUlNJT04KKyNkZWZpbmUgU0dMX09GRlNFVF80ICAgICgweDAwNDAgfCBJMk9WRVJTSU9OKQorI2RlZmluZSBTR0xfT0ZGU0VUXzUgICAgKDB4MDA1MCB8IEkyT1ZFUlNJT04pCisjZGVmaW5lIFNHTF9PRkZTRVRfNiAgICAoMHgwMDYwIHwgSTJPVkVSU0lPTikKKyNkZWZpbmUgU0dMX09GRlNFVF83ICAgICgweDAwNzAgfCBJMk9WRVJTSU9OKQorI2RlZmluZSBTR0xfT0ZGU0VUXzggICAgKDB4MDA4MCB8IEkyT1ZFUlNJT04pCisjZGVmaW5lIFNHTF9PRkZTRVRfOSAgICAoMHgwMDkwIHwgSTJPVkVSU0lPTikKKyNkZWZpbmUgU0dMX09GRlNFVF8xMCAgICgweDAwQTAgfCBJMk9WRVJTSU9OKQorCisjZGVmaW5lIFRSTF9PRkZTRVRfNSAgICAoMHgwMDUwIHwgSTJPVkVSU0lPTikKKyNkZWZpbmUgVFJMX09GRlNFVF82ICAgICgweDAwNjAgfCBJMk9WRVJTSU9OKQorCisvKiBUcmFuc2FjdGlvbiBSZXBseSBMaXN0cyAoVFJMKSBDb250cm9sIFdvcmQgc3RydWN0dXJlICovCisjZGVmaW5lIFRSTF9TSU5HTEVfRklYRURfTEVOR1RICQkweDAwCisjZGVmaW5lIFRSTF9TSU5HTEVfVkFSSUFCTEVfTEVOR1RICTB4NDAKKyNkZWZpbmUgVFJMX01VTFRJUExFX0ZJWEVEX0xFTkdUSAkweDgwCisKKyAvKiBtc2cgaGVhZGVyIGRlZmluZXMgZm9yIE1zZ0ZsYWdzICovCisjZGVmaW5lIE1TR19TVEFUSUMJMHgwMTAwCisjZGVmaW5lIE1TR182NEJJVF9DTlRYVAkweDAyMDAKKyNkZWZpbmUgTVNHX01VTFRJX1RSQU5TCTB4MTAwMAorI2RlZmluZSBNU0dfRkFJTAkweDIwMDAKKyNkZWZpbmUgTVNHX0ZJTkFMCTB4NDAwMAorI2RlZmluZSBNU0dfUkVQTFkJMHg4MDAwCisKKyAvKiBtaW5pbXVtIHNpemUgbXNnICovCisjZGVmaW5lIFRIUkVFX1dPUkRfTVNHX1NJWkUJMHgwMDAzMDAwMAorI2RlZmluZSBGT1VSX1dPUkRfTVNHX1NJWkUJMHgwMDA0MDAwMAorI2RlZmluZSBGSVZFX1dPUkRfTVNHX1NJWkUJMHgwMDA1MDAwMAorI2RlZmluZSBTSVhfV09SRF9NU0dfU0laRQkweDAwMDYwMDAwCisjZGVmaW5lIFNFVkVOX1dPUkRfTVNHX1NJWkUJMHgwMDA3MDAwMAorI2RlZmluZSBFSUdIVF9XT1JEX01TR19TSVpFCTB4MDAwODAwMDAKKyNkZWZpbmUgTklORV9XT1JEX01TR19TSVpFCTB4MDAwOTAwMDAKKyNkZWZpbmUgVEVOX1dPUkRfTVNHX1NJWkUJMHgwMDBBMDAwMAorI2RlZmluZSBFTEVWRU5fV09SRF9NU0dfU0laRQkweDAwMEIwMDAwCisjZGVmaW5lIEkyT19NRVNTQUdFX1NJWkUoeCkJKCh4KTw8MTYpCisKKy8qIFNwZWNpYWwgVElEIEFzc2lnbm1lbnRzICovCisKKyNkZWZpbmUgQURBUFRFUl9USUQJCTAKKyNkZWZpbmUgSE9TVF9USUQJCTEKKworI2RlZmluZSBNU0dfRlJBTUVfU0laRQkJMTI4CS8qIGkyb19zY3NpIGFzc3VtZXMgPj0gMzIgKi8KKyNkZWZpbmUgUkVQTFlfRlJBTUVfU0laRQkxNworI2RlZmluZSBTR19UQUJMRVNJWkUJCTMwCisjZGVmaW5lIE5NQlJfTVNHX0ZSQU1FUwkJMTI4CisKKyNkZWZpbmUgTVNHX1BPT0xfU0laRQkJKE1TR19GUkFNRV9TSVpFKk5NQlJfTVNHX0ZSQU1FUypzaXplb2YodTMyKSkKKworI2RlZmluZSBJMk9fUE9TVF9XQUlUX09LCTAKKyNkZWZpbmUgSTJPX1BPU1RfV0FJVF9USU1FT1VUCS1FVElNRURPVVQKKworI2RlZmluZSBJMk9fQ09OVEVYVF9MSVNUX01JTl9MRU5HVEgJMTUKKyNkZWZpbmUgSTJPX0NPTlRFWFRfTElTVF9VU0VECQkweDAxCisjZGVmaW5lIEkyT19DT05URVhUX0xJU1RfREVMRVRFRAkweDAyCisKKy8qIHRpbWVvdXRzICovCisjZGVmaW5lIEkyT19USU1FT1VUX0lOSVRfT1VUQk9VTkRfUVVFVUUJMTUKKyNkZWZpbmUgSTJPX1RJTUVPVVRfTUVTU0FHRV9HRVQJCTUKKyNkZWZpbmUgSTJPX1RJTUVPVVRfUkVTRVQJCTMwCisjZGVmaW5lIEkyT19USU1FT1VUX1NUQVRVU19HRVQJCTUKKyNkZWZpbmUgSTJPX1RJTUVPVVRfTENUX0dFVAkJMzYwCisjZGVmaW5lIEkyT19USU1FT1VUX1NDU0lfU0NCX0FCT1JUCTI0MAorCisvKiByZXRyaWVzICovCisjZGVmaW5lIEkyT19IUlRfR0VUX1RSSUVTCQkzCisjZGVmaW5lIEkyT19MQ1RfR0VUX1RSSUVTCQkzCisKKy8qIHJlcXVlc3QgcXVldWUgc2l6ZXMgKi8KKyNkZWZpbmUgSTJPX01BWF9TRUNUT1JTCQkJMTAyNAorI2RlZmluZSBJMk9fTUFYX1NFR01FTlRTCQkxMjgKKworI2RlZmluZSBJMk9fUkVRX01FTVBPT0xfU0laRQkJMzIKKworI2VuZGlmCQkJCS8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZgkJCQkvKiBfSTJPX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaThrLmggYi9pbmNsdWRlL2xpbnV4L2k4ay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjNDViYTUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2k4ay5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBpOGsuaCAtLSBMaW51eCBkcml2ZXIgZm9yIGFjY2Vzc2luZyB0aGUgU01NIEJJT1Mgb24gRGVsbCBsYXB0b3BzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAxICBNYXNzaW1vIERhbCBab3R0byA8ZHpAZGViaWFuLm9yZz4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfTElOVVhfSThLX0gKKyNkZWZpbmUgX0xJTlVYX0k4S19ICisKKyNkZWZpbmUgSThLX1BST0MJCSIvcHJvYy9pOGsiCisjZGVmaW5lIEk4S19QUk9DX0ZNVAkJIjEuMCIKKworI2RlZmluZSBJOEtfQklPU19WRVJTSU9OCV9JT1IgKCdpJywgMHg4MCwgaW50KQkvKiBicm9rZW46IG1lYW50IDQgYnl0ZXMgKi8KKyNkZWZpbmUgSThLX01BQ0hJTkVfSUQJCV9JT1IgKCdpJywgMHg4MSwgaW50KQkvKiBicm9rZW46IG1lYW50IDE2IGJ5dGVzICovCisjZGVmaW5lIEk4S19QT1dFUl9TVEFUVVMJX0lPUiAoJ2knLCAweDgyLCBzaXplX3QpCisjZGVmaW5lIEk4S19GTl9TVEFUVVMJCV9JT1IgKCdpJywgMHg4Mywgc2l6ZV90KQorI2RlZmluZSBJOEtfR0VUX1RFTVAJCV9JT1IgKCdpJywgMHg4NCwgc2l6ZV90KQorI2RlZmluZSBJOEtfR0VUX1NQRUVECQlfSU9XUignaScsIDB4ODUsIHNpemVfdCkKKyNkZWZpbmUgSThLX0dFVF9GQU4JCV9JT1dSKCdpJywgMHg4Niwgc2l6ZV90KQorI2RlZmluZSBJOEtfU0VUX0ZBTgkJX0lPV1IoJ2knLCAweDg3LCBzaXplX3QpCisKKyNkZWZpbmUgSThLX0ZBTl9MRUZUCQkxCisjZGVmaW5lIEk4S19GQU5fUklHSFQJCTAKKyNkZWZpbmUgSThLX0ZBTl9PRkYJCTAKKyNkZWZpbmUgSThLX0ZBTl9MT1cJCTEKKyNkZWZpbmUgSThLX0ZBTl9ISUdICQkyCisjZGVmaW5lIEk4S19GQU5fTUFYCQlJOEtfRkFOX0hJR0gKKworI2RlZmluZSBJOEtfVk9MX1VQCQkxCisjZGVmaW5lIEk4S19WT0xfRE9XTgkJMgorI2RlZmluZSBJOEtfVk9MX01VVEUJCTQKKworI2RlZmluZSBJOEtfQUMJCQkxCisjZGVmaW5lIEk4S19CQVRURVJZCQkwCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pYm10ci5oIGIvaW5jbHVkZS9saW51eC9pYm10ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlZjBiMjEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2libXRyLmgKQEAgLTAsMCArMSwzNzMgQEAKKyNpZm5kZWYgX19MSU5VWF9JQk1UUl9IX18KKyNkZWZpbmUgX19MSU5VWF9JQk1UUl9IX18KKworLyogRGVmaW5pdGlvbnMgZm9yIGFuIElCTSBUb2tlbiBSaW5nIGNhcmQuICovCisvKiBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEdOVSBHUEwgICAqLworCisvKiBwb3J0ZWQgdG8gdGhlIEFscGhhIGFyY2hpdGVjdHVyZSAwMi8yMC85NiAoanVzdCB1c2VkIHRoZSBIWiBtYWNybykgKi8KKworI2RlZmluZSBUUl9SRVRSWV9JTlRFUlZBTAkoMzAqSFopCS8qIDUwMCBvbiBQQyA9IDUgcyAqLworI2RlZmluZSBUUl9SU1RfVElNRQkJKEhaLzIwKSAvKiA1IG9uIFBDID0gNTAgbXMgKi8KKyNkZWZpbmUgVFJfQlVTWV9JTlRFUlZBTAkoSFovNSkJLyogNSBvbiBQQyA9IDIwMCBtcyAqLworI2RlZmluZSBUUl9TUElOX0lOVEVSVkFMCSgzKkhaKQkvKiAzIHNlY29uZHMgYmVmb3JlIGluaXQgdGltZW91dCAqLworCisjZGVmaW5lIFRSX0lTQSAxCisjZGVmaW5lIFRSX01DQSAyCisjZGVmaW5lIFRSX0lTQVBOUCAzCisjZGVmaW5lIE5PVE9LIDAKKworI2RlZmluZSBJQk1UUl9TSEFSRURfUkFNX1NJWkUgMHgxMDAwMAorI2RlZmluZSBJQk1UUl9JT19FWFRFTlQgNAorI2RlZmluZSBJQk1UUl9NQVhfQURBUFRFUlMgNAorCisjZGVmaW5lIENIQU5ORUxfSUQgICAgICAwWDFGMzAKKyNkZWZpbmUgQUlQICAgICAgICAgICAgIDBYMUYwMAorI2RlZmluZSBBSVBBREFQVFlQRSAgICAgMFgxRkEwCisjZGVmaW5lIEFJUERBVEFSQVRFICAgICAwWDFGQTIKKyNkZWZpbmUgQUlQRUFSTFlUT0tFTiAgIDBYMUZBNAorI2RlZmluZSBBSVBBVkFJTFNIUkFNICAgMFgxRkE2CisjZGVmaW5lIEFJUFNIUkFNUEFHRSAgICAwWDFGQTgKKyNkZWZpbmUgQUlQNE1CREhCICAgICAgIDBYMUZBQQorI2RlZmluZSBBSVAxNk1CREhCICAgICAgMFgxRkFDCisjZGVmaW5lIEFJUEZJRAkJMFgxRkJBCisKKyNkZWZpbmUgQURBUFRSRVNFVCAgICAgIDB4MSAgICAgLyogQ29udHJvbCBBZGFwdGVyIHJlc2V0IChhZGQgdG8gYmFzZSkgKi8KKyNkZWZpbmUgQURBUFRSRVNFVFJFTCAgIDB4MiAgICAgLyogUmVsZWFzZSBBZGFwdGVyIGZyb20gcmVzZXQgKCAiIiIpICAqLworI2RlZmluZSBBREFQVElOVFJFTAkweDMgCS8qIEFkYXB0ZXIgaW50ZXJydXB0IHJlbGVhc2UgKi8KKworI2RlZmluZSBHTE9CQUxfSU5UX0VOQUJMRSAweDAyZjAKKworLyogTU1JTyBiaXRzIDAtNCBzZWxlY3QgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUlJSX0VWRU4gICAgICAgMHgwMCAvKiBTaGFyZWQgUkFNIHJlbG9jYXRpb24gcmVnaXN0ZXJzIC0gZXZlbiBhbmQgb2RkICovCisvKiBVc2VkIHRvIHNldCB0aGUgc3RhcnRpbmcgYWRkcmVzcyBvZiBzaGFyZWQgUkFNICAqLworLyogQml0cyAxIHRocm91Z2ggNyBvZiB0aGlzIHJlZ2lzdGVyIG1hcCB0byBiaXRzIDEzIHRocm91Z2ggMTkgb2YgdGhlIHNoYXJlZAorICAgUkFNIGFkZHJlc3MuKi8KKy8qIGllOiAweDAyIHNldHMgUkFNIGFkZHJlc3MgdG8gLi4uYXRvISAgaXNzeSBzdSB3YXp6b28gISEgR09EWklMTEEhISEgKi8KKyNkZWZpbmUgUlJSX09ERCAgICAgICAgIDB4MDEKKy8qIEJpdHMgMiBhbmQgMyBvZiB0aGlzIHJlZ2lzdGVyIGNhbiBiZSByZWFkIHRvIGRldGVybWluZSBzaGFyZWQgUkFNIHNpemUgKi8KKy8qIDAwIGZvciA4aywgMDEgZm9yIDE2aywgMTAgZm9yIDMyaywgMTEgZm9yIDY0ayAgKi8KKyNkZWZpbmUgV1JCUl9FVkVOICAgICAgIDB4MDIgICAgLyogV3JpdGUgcmVnaW9uIGJhc2UgcmVnaXN0ZXJzIC0gZXZlbiBhbmQgb2RkICovCisjZGVmaW5lIFdSQlJfT0REICAgICAgICAweDAzCisjZGVmaW5lIFdXT1JfRVZFTiAgICAgICAweDA0ICAgIC8qIFdyaXRlIHdpbmRvdyBvcGVuIHJlZ2lzdGVycyAtIGV2ZW4gYW5kIG9kZCAqLworI2RlZmluZSBXV09SX09ERCAgICAgICAgMHgwNQorI2RlZmluZSBXV0NSX0VWRU4gICAgICAgMHgwNiAgIC8qIFdyaXRlIHdpbmRvdyBjbG9zZSByZWdpc3RlcnMgLSBldmVuIGFuZCBvZGQgKi8KKyNkZWZpbmUgV1dDUl9PREQgICAgICAgIDB4MDcKKworLyogSW50ZXJydXB0IHN0YXR1cyByZWdpc3RlcnMgLSBQQyBzeXN0ZW0gIC0gZXZlbiBhbmQgb2RkICovCisjZGVmaW5lIElTUlBfRVZFTiAgICAgICAweDA4CisKKyNkZWZpbmUgVENSX0lOVCAgICAweDEwICAgIC8qIEJpdCA0IC0gVGltZXIgaW50ZXJydXB0LiAgVGhlIFRWUl9FVkVOIHRpbWVyIGhhcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGlyZWQuICovCisjZGVmaW5lIEVSUl9JTlQJICAgMHgwOCAgICAvKiBCaXQgMyAtIEVycm9yIGludGVycnVwdC4gIFRoZSBhZGFwdGVyIGhhcyBoYWQgYW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsIGVycm9yLiAqLworI2RlZmluZSBBQ0NFU1NfSU5UIDB4MDQgICAgLyogQml0IDIgLSBBY2Nlc3MgaW50ZXJydXB0LiAgWW91IGhhdmUgYXR0ZW1wdGVkIHRvCisJCQkJICAgICAgd3JpdGUgdG8gYW4gaW52YWxpZCBhcmVhIG9mIHNoYXJlZCBSQU0KKwkJCQkgICAgICBvciBhbiBpbnZhbGlkIHJlZ2lzdGVyIHdpdGhpbiB0aGUgTU1JTy4gKi8KKy8qIEluIGFkZGl0aW9uLCB0aGUgZm9sbG93aW5nIGJpdHMgd2l0aGluIElTUlBfRVZFTiBjYW4gYmUgdHVybmVkIG9uIG9yIG9mZiAgICovCisvKiBieSB5b3UgdG8gY29udHJvbCB0aGUgaW50ZXJydXB0IHByb2Nlc3Npbmc6ICAgKi8KKyNkZWZpbmUgSU5UX0VOQUJMRSAweDQwIC8qIEJpdCA2IC0gSW50ZXJydXB0IGVuYWJsZS4gIElmIDAsIG5vIGludGVycnVwdHMgd2lsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvY2N1ci4gIElmIDEsIGludGVycnVwdHMgd2lsbCBvY2N1ciBub3JtYWxseS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1hbGx5IHNldCB0byAxLiAgKi8KKy8qIEJpdCAwIC0gUHJpbWFyeSBvciBhbHRlcm5hdGUgYWRhcHRlci4gIFNldCB0byB6ZXJvIGlmIHRoaXMgYWRhcHRlciBpcyB0aGUKKwkJcHJpbWFyeSBhZGFwdGVyLCAxIGlmIHRoaXMgYWRhcHRlciBpcyB0aGUgYWx0ZXJuYXRlIGFkYXB0ZXIuICovCisKKworI2RlZmluZSBJU1JQX09ERCAgICAgICAgMHgwOQorCisjZGVmaW5lIEFEQVBfQ0hLX0lOVCAweDQwIC8qIEJpdCA2IC0gQWRhcHRlciBjaGVjay4gIHRoZSBhZGFwdGVyIGhhcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvdW50ZXJlZCBhIHNlcmlvdXMgcHJvYmxlbSBhbmQgaGFzIGNsb3NlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdHNlbGYuICBXaG9hLiAgKi8KKyNkZWZpbmUgU1JCX1JFU1BfSU5UIDB4MjAgLyogQml0IDUgLSBTUkIgcmVzcG9uc2UuICBUaGUgYWRhcHRlciBoYXMgYWNjZXB0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW4gU1JCIHJlcXVlc3QgYW5kIHNldCB0aGUgcmV0dXJuIGNvZGUgd2l0aGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBTUkIuICovCisjZGVmaW5lIEFTQl9GUkVFX0lOVCAweDEwIC8qIEJpdCA0IC0gQVNCIGZyZWUuICBUaGUgYWRhcHRlciBoYXMgcmVhZCB0aGUgQVNCCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB0aGlzIGFyZWEgY2FuIGJlIHNhZmVseSByZXVzZWQuIFRoaXMgaW50ZXJydXB0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIG9ubHkgdXNlZCBpZiB5b3VyIGFwcGxpY2F0aW9uIGhhcyBzZXQgdGhlIEFTQgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlIHJlcXVlc3QgYml0IGluIElTUkFfT0REIG9yIGlmIGFuIGVycm9yIHdhcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRlY3RlZCBpbiB5b3VyIHJlc3BvbnNlLiAqLworI2RlZmluZSBBUkJfQ01EX0lOVCAgMHgwOCAvKiBCaXQgMyAtIEFSQiBjb21tYW5kLiAgVGhlIGFkYXB0ZXIgaGFzIGdpdmVuIHlvdSBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgZm9yIGFjdGlvbi4gIFRoZSBjb21tYW5kIGlzIGxvY2F0ZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFSQiBhcmVhIG9mIHNoYXJlZCBtZW1vcnkuICovCisjZGVmaW5lIFNTQl9SRVNQX0lOVCAweDA0IC8qIEJpdCAyIC0gU1NCIHJlc3BvbnNlLiAgVGhlIGFkYXB0ZXIgaGFzIHBvc3RlZCBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlIHRvIHlvdXIgU1JCICh0aGUgcmVzcG9uc2UgaXMgbG9jYXRlZCBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgU1NCIGFyZWEgb2Ygc2hhcmVkIG1lbW9yeSkuICovCisvKiBCaXQgMSAtIEJyaWRnZSBmcmFtZSBmb3J3YXJkIGNvbXBsZXRlLiAqLworCisKKworI2RlZmluZSBJU1JBX0VWRU4gMHgwQSAvKkludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXJzIC0gYWRhcHRlciAgLSBldmVuIGFuZCBvZGQgKi8KKy8qIEJpdCA3IC0gSW50ZXJuYWwgcGFyaXR5IGVycm9yIChvbiBhZGFwdGVyJ3MgaW50ZXJuYWwgYnVzKSAqLworLyogQml0IDYgLSBUaW1lciBpbnRlcnJ1cHQgcGVuZGluZyAqLworLyogQml0IDUgLSBBY2Nlc3MgaW50ZXJydXB0IChhdHRlbXB0IGJ5IGFkYXB0ZXIgdG8gYWNjZXNzIGlsbGVnYWwgYWRkcmVzcykgKi8KKy8qIEJpdCA0IC0gQWRhcHRlciBtaWNyb2NvZGUgcHJvYmxlbSAobWljcm9jb2RlIGRlYWQtbWFuIHRpbWVyIGV4cGlyZWQpICovCisvKiBCaXQgMyAtIEFkYXB0ZXIgcHJvY2Vzc29yIGNoZWNrIHN0YXR1cyAqLworLyogQml0IDIgLSBSZXNlcnZlZCAqLworLyogQml0IDEgLSBBZGFwdGVyIGhhcmR3YXJlIGludGVycnVwdCBtYXNrIChwcmV2ZW50cyBpbnRlcm5hbCBpbnRlcnJ1cHRzKSAqLworLyogQml0IDAgLSBBZGFwdGVyIHNvZnR3YXJlIGludGVycnVwdCBtYXNrIChwcmV2ZW50cyBpbnRlcm5hbCBzb2Z0d2FyZSBpbnRzKSAqLworCisjZGVmaW5lIElTUkFfT0REICAgICAgICAweDBCCisjZGVmaW5lIENNRF9JTl9TUkIgIDB4MjAgLyogQml0IDUgIC0gSW5kaWNhdGVzIHRoYXQgeW91IGhhdmUgcGxhY2VkIGEgbmV3CisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kIGluIHRoZSBTUkIgYW5kIGFyZSByZWFkeSBmb3IgdGhlIGFkYXB0ZXIgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MgdGhlIGNvbW1hbmQuICovCisjZGVmaW5lIFJFU1BfSU5fQVNCIDB4MTAgLyogQml0IDQgLSBJbmRpY2F0ZXMgdGhhdCB5b3UgaGF2ZSBwbGFjZWQgYSByZXNwb25zZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhbiBBU0IpIGluIHRoZSBzaGFyZWQgUkFNIHdoaWNoIGlzIGF2YWlsYWJsZSBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYWRhcHRlcidzIHVzZS4gKi8KKy8qIEJpdCAzIC0gSW5kaWNhdGVzIHRoYXQgeW91IGFyZSByZWFkeSB0byBwdXQgYW4gU1JCIGluIHRoZSBzaGFyZWQgUkFNLCBidXQKKwl0aGF0IGEgcHJldmlvdXMgY29tbWFuZCBpcyBzdGlsbCBwZW5kaW5nLiAgVGhlIGFkYXB0ZXIgd2lsbCB0aGVuCisJaW50ZXJydXB0IHlvdSB3aGVuIHRoZSBwcmV2aW91cyBjb21tYW5kIGlzIGNvbXBsZXRlZCAqLworLyogQml0IDIgLSBJbmRpY2F0ZXMgdGhhdCB5b3UgYXJlIHJlYWR5IHRvIHB1dCBhbiBBU0IgaW4gdGhlIHNoYXJlZCBSQU0sIGJ1dAorCXRoYXQgYSBwcmV2aW91cyBBU0IgaXMgc3RpbGwgcGVuZGluZy4gIFRoZSBhZGFwdGVyIHdpbGwgdGhlbiBpbnRlcnJ1cHQKKwl5b3Ugd2hlbiB0aGUgcHJldmlvdXMgQVNCIGlzIGNvcGllZC4gICovCisjZGVmaW5lIEFSQl9GUkVFIDB4MgorI2RlZmluZSBTU0JfRlJFRSAweDEKKworI2RlZmluZSBUQ1JfRVZFTiAgICAgICAgMHgwQyAgICAvKiBUaW1lciBjb250cm9sIHJlZ2lzdGVycyAtIGV2ZW4gYW5kIG9kZCAqLworI2RlZmluZSBUQ1JfT0REICAgICAgICAgMHgwRAorI2RlZmluZSBUVlJfRVZFTiAgICAgICAgMHgwRSAgICAvKiBUaW1lciB2YWx1ZSByZWdpc3RlcnMgLSBldmVuIGFuZCBvZGQgKi8KKyNkZWZpbmUgVFZSX09ERCAgICAgICAgIDB4MEYKKyNkZWZpbmUgU1JQUl9FVkVOICAgICAgIDB4MTggICAgLyogU2hhcmVkIFJBTSBwYWdpbmcgcmVnaXN0ZXJzIC0gZXZlbiBhbmQgb2RkICovCisjZGVmaW5lIFNSUFJfRU5BQkxFX1BBR0lORyAweGMwCisjZGVmaW5lIFNSUFJfT0REICAgICAgICAweDE5CS8qIE5vdCB1c2VkLiAqLworI2RlZmluZSBUT0tSRUFEICAgICAgICAgMHg2MAorI2RlZmluZSBUT0tPUiAgICAgICAgICAgMHg0MAorI2RlZmluZSBUT0tBTkQgICAgICAgICAgMHgyMAorI2RlZmluZSBUT0tXUklURSAgICAgICAgMHgwMAorCisvKiBNTUlPIGJpdHMgNS02IHNlbGVjdCBvcGVyYXRpb24gKi8KKy8qIDAwIGlzIHVzZWQgdG8gd3JpdGUgdG8gYSByZWdpc3RlciAqLworLyogMDEgaXMgdXNlZCB0byBiaXR3aXNlIEFORCBhIGJ5dGUgd2l0aCBhIHJlZ2lzdGVyICovCisvKiAxMCBpcyB1c2VkIHRvIGJpdHdpc2UgT1IgYSBieXRlIHdpdGggYSByZWdpc3RlciAgKi8KKy8qIDExIGlzIHVzZWQgdG8gcmVhZCBmcm9tIGEgcmVnaXN0ZXIgKi8KKworLyogTU1JTyBiaXRzIDctOCBzZWxlY3QgYXJlYSBvZiBpbnRlcmVzdC4uIHNlZSBiZWxvdyAqLworLyogMDAgc2VsZWN0cyBhdHRhY2htZW50IGNvbnRyb2wgYXJlYS4gKi8KKy8qIDAxIGlzIHJlc2VydmVkLiAqLworLyogMTAgc2VsZWN0cyBhZGFwdGVyIGlkZW50aWZpY2F0aW9uIGFyZWEgQSBjb250YWluaW5nIHRoZSBhZGFwdGVyIGVuY29kZWQKKwlhZGRyZXNzLiAqLworLyogMTEgc2VsZWN0cyB0aGUgYWRhcHRlciBpZGVudGlmaWNhdGlvbiBhcmVhIEIgY29udGFpbmluZyB0ZXN0IHBhdHRlcm5zLiAqLworCisjZGVmaW5lIFBDQ0hBTk5FTElEIDUwNDk0MzRGMzYzMTMxMzAzOTM5MzAyMAorI2RlZmluZSBNQ0NIQU5ORUxJRCA0RDQxNTI1MzM2MzM1ODM0MzUzMTM4MjAKKworI2RlZmluZSBBQ0FfT0ZGU0VUIDB4MWUwMAorI2RlZmluZSBBQ0FfU0VUIDB4NDAKKyNkZWZpbmUgQUNBX1JFU0VUIDB4MjAKKyNkZWZpbmUgQUNBX1JXIDB4MDAKKworI2lmZGVmIEVOQUJMRV9QQUdJTkcKKyNkZWZpbmUgU0VUX1BBR0UoeCkgKHdyaXRlYigoeCksIHRpLT5tbWlvICsgQUNBX09GRlNFVCsgQUNBX1JXICsgU1JQUl9FVkVOKSkKKyNlbHNlCisjZGVmaW5lIFNFVF9QQUdFKHgpCisjZW5kaWYKKworLyogZG9fdG9rX2ludCBwb3NzaWJsZSB2YWx1ZXMgKi8KKyNkZWZpbmUgRklSU1RfSU5UIDEKKyNkZWZpbmUgTk9UX0ZJUlNUIDIKKwordHlwZWRlZiBlbnVtIHsJQ0xPU0VELAlPUEVOIH0gb3Blbl9zdGF0ZTsKKy8vc3RhaWMgY29uc3QgY2hhciAqcHJpbnRzdGF0ZVtdID0geyAiQ0xPU0VEIiwiT1BFTiJ9OworCitzdHJ1Y3QgdG9rX2luZm8geworCXVuc2lnbmVkIGNoYXIgaXJxOworCXZvaWQgX19pb21lbSAqbW1pbzsKKwl1bnNpZ25lZCBjaGFyIGh3X2FkZHJlc3NbMzJdOworCXVuc2lnbmVkIGNoYXIgYWRhcHRlcl90eXBlOworCXVuc2lnbmVkIGNoYXIgZGF0YV9yYXRlOworCXVuc2lnbmVkIGNoYXIgdG9rZW5fcmVsZWFzZTsKKwl1bnNpZ25lZCBjaGFyIGF2YWlsX3NoYXJlZF9yYW07CisJdW5zaWduZWQgY2hhciBzaGFyZWRfcmFtX3BhZ2luZzsKKyAgICAgICAgdW5zaWduZWQgY2hhciB0dXJibzsKKwl1bnNpZ25lZCBzaG9ydCBkaGJfc2l6ZTRtYjsKKwl1bnNpZ25lZCBzaG9ydCByYnVmX2xlbjQ7CisJdW5zaWduZWQgc2hvcnQgcmJ1Zl9jbnQ0OworCXVuc2lnbmVkIHNob3J0IG1heG10dTQ7CisJdW5zaWduZWQgc2hvcnQgZGhiX3NpemUxNm1iOworCXVuc2lnbmVkIHNob3J0IHJidWZfbGVuMTY7CisJdW5zaWduZWQgc2hvcnQgcmJ1Zl9jbnQxNjsKKwl1bnNpZ25lZCBzaG9ydCBtYXhtdHUxNjsKKwkvKiBBZGRpdGlvbnMgYnkgRGF2aWQgTW9ycmlzICAgICAgICovCisJdW5zaWduZWQgY2hhciBkb190b2tfaW50OworCXdhaXRfcXVldWVfaGVhZF90IHdhaXRfZm9yX3Jlc2V0OworCXVuc2lnbmVkIGNoYXIgc3JhbV9iYXNlOworCS8qIEFkZGl0aW9ucyBieSBQZXRlciBEZSBTY2hyaWp2ZXIgKi8KKwl1bnNpZ25lZCBjaGFyIHBhZ2VfbWFzazsgICAgICAgICAgLyogbWFzayB0byBzZWxlY3QgUkFNIHBhZ2UgdG8gTWFwKi8KKwl1bnNpZ25lZCBjaGFyIG1hcHBlZF9yYW1fc2l6ZTsgICAgLyogc2l6ZSBvZiBSQU0gcGFnZSAqLworCV9fdTMyIHNyYW1fcGh5czsgICAgICAgICAgLyogU2hhcmVkIG1lbW9yeSBiYXNlIGFkZHJlc3MgKi8KKwl2b2lkIF9faW9tZW0gKnNyYW1fdmlydDsgICAgICAgICAgLyogU2hhcmVkIG1lbW9yeSBiYXNlIGFkZHJlc3MgKi8KKwl2b2lkIF9faW9tZW0gKmluaXRfc3JiOyAgIC8qIEluaXRpYWwgU3lzdGVtIFJlcXVlc3QgQmxvY2sgYWRkcmVzcyAqLworCXZvaWQgX19pb21lbSAqc3JiOyAgICAgICAgICAgICAgICAvKiBTeXN0ZW0gUmVxdWVzdCBCbG9jayBhZGRyZXNzICovCisJdm9pZCBfX2lvbWVtICpzc2I7ICAgICAgICAgICAgICAgIC8qIFN5c3RlbSBTdGF0dXMgQmxvY2sgYWRkcmVzcyAqLworCXZvaWQgX19pb21lbSAqYXJiOyAgICAgICAgICAgICAgICAvKiBBZGFwdGVyIFJlcXVlc3QgQmxvY2sgYWRkcmVzcyAqLworCXZvaWQgX19pb21lbSAqYXNiOyAgICAgICAgICAgICAgICAvKiBBZGFwdGVyIFN0YXR1cyBCbG9jayBhZGRyZXNzICovCisgICAgICAgIF9fdTggIGluaXRfc3JiX3BhZ2U7CisgICAgICAgIF9fdTggIHNyYl9wYWdlOworICAgICAgICBfX3U4ICBzc2JfcGFnZTsKKyAgICAgICAgX191OCAgYXJiX3BhZ2U7CisgICAgICAgIF9fdTggIGFzYl9wYWdlOworCXVuc2lnbmVkIHNob3J0IGV4c2FwX3N0YXRpb25faWQ7CisJdW5zaWduZWQgc2hvcnQgZ2xvYmFsX2ludF9lbmFibGU7CisJc3RydWN0IHNrX2J1ZmYgKmN1cnJlbnRfc2tiOworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHRyX3N0YXRzOworCXVuc2lnbmVkIGNoYXIgYXV0b19zcGVlZHNhdmU7CisJb3Blbl9zdGF0ZQkJCW9wZW5fc3RhdHVzLCBzYXBfc3RhdHVzOworCWVudW0ge01BTlVBTCwgQVVUT01BVElDfQlvcGVuX21vZGU7CisJZW51bSB7RkFJTCwgUkVTVEFSVCwgUkVPUEVOfQlvcGVuX2FjdGlvbjsKKwllbnVtIHtOTywgWUVTfQkJCW9wZW5fZmFpbHVyZTsKKwl1bnNpZ25lZCBjaGFyIHJlYWRsb2dfcGVuZGluZzsKKwl1bnNpZ25lZCBzaG9ydCBhZGFwdGVyX2ludF9lbmFibGU7IC8qIEFkYXB0ZXItc3BlY2lmaWMgaW50IGVuYWJsZSAqLworICAgICAgICBzdHJ1Y3QgdGltZXJfbGlzdCB0cl90aW1lcjsKKwl1bnNpZ25lZCBjaGFyIHJpbmdfc3BlZWQ7CisJc3BpbmxvY2tfdCBsb2NrOwkJLyogU01QIHByb3RlY3Rpb24gKi8KK307CisKKy8qIHRva2VuIHJpbmcgYWRhcHRlciBjb21tYW5kcyAqLworI2RlZmluZSBESVJfSU5URVJSVVBUIAkJMHgwMCAvKiBzdHJ1Y3Qgc3JiX2ludGVycnVwdCAqLworI2RlZmluZSBESVJfTU9EX09QRU5fUEFSQU1TIAkweDAxCisjZGVmaW5lIERJUl9PUEVOX0FEQVBURVIgCTB4MDMgLyogc3RydWN0IGRpcl9vcGVuX2FkYXB0ZXIgKi8KKyNkZWZpbmUgRElSX0NMT1NFX0FEQVBURVIgICAJMHgwNAorI2RlZmluZSBESVJfU0VUX0dSUF9BRERSICAgIAkweDA2CisjZGVmaW5lIERJUl9TRVRfRlVOQ19BRERSICAgCTB4MDcgLyogc3RydWN0IHNyYl9zZXRfZnVuY3RfYWRkciAqLworI2RlZmluZSBESVJfUkVBRF9MT0cgCQkweDA4IC8qIHN0cnVjdCBzcmJfcmVhZF9sb2cgKi8KKyNkZWZpbmUgRExDX09QRU5fU0FQIAkJMHgxNSAvKiBzdHJ1Y3QgZGxjX29wZW5fc2FwICovCisjZGVmaW5lIERMQ19DTE9TRV9TQVAgICAgICAgCTB4MTYKKyNkZWZpbmUgREFUQV9MT1NUIAkJMHgyMCAvKiBzdHJ1Y3QgYXNiX3JlYyAqLworI2RlZmluZSBSRUNfREFUQSAJCTB4ODEgLyogc3RydWN0IGFyYl9yZWNfcmVxICovCisjZGVmaW5lIFhNSVRfREFUQV9SRVEgCQkweDgyIC8qIHN0cnVjdCBhcmJfeG1pdF9yZXEgKi8KKyNkZWZpbmUgRExDX1NUQVRVUyAJCTB4ODMgLyogc3RydWN0IGFyYl9kbGNfc3RhdHVzICovCisjZGVmaW5lIFJJTkdfU1RBVF9DSEFOR0UgICAgCTB4ODQgLyogc3RydWN0IGRsY19vcGVuX3NhcCA/Pz8gKi8KKworLyogRElSX09QRU5fQURBUFRFUiBvcHRpb25zICovCisjZGVmaW5lIE9QRU5fUEFTU19CQ09OX01BQyAweDAxMDAKKyNkZWZpbmUgTlVNX1JDVl9CVUYgMgorI2RlZmluZSBSQ1ZfQlVGX0xFTiAxMDI0CisjZGVmaW5lIERIQl9MRU5HVEggMjA0OAorI2RlZmluZSBOVU1fREhCIDIKKyNkZWZpbmUgRExDX01BWF9TQVAgMgorI2RlZmluZSBETENfTUFYX1NUQSAxCisKKy8qIERMQ19PUEVOX1NBUCBvcHRpb25zICovCisjZGVmaW5lIE1BWF9JX0ZJRUxEIDB4MDA4OAorI2RlZmluZSBTQVBfT1BFTl9JTkRfU0FQIDB4MDQKKyNkZWZpbmUgU0FQX09QRU5fUFJJT1JJVFkgMHgyMAorI2RlZmluZSBTQVBfT1BFTl9TVEFUSU9OX0NOVCAweDEKKyNkZWZpbmUgWE1JVF9ESVJfRlJBTUUgMHgwQQorI2RlZmluZSBYTUlUX1VJX0ZSQU1FICAweDBkCisjZGVmaW5lIFhNSVRfWElEX0NNRCAgIDB4MGUKKyNkZWZpbmUgWE1JVF9URVNUX0NNRCAgMHgxMQorCisvKiBzcmIgY2xvc2UgcmV0dXJuIGNvZGUgKi8KKyNkZWZpbmUgU0lHTkFMX0xPU1MgIDB4ODAwMAorI2RlZmluZSBIQVJEX0VSUk9SICAgMHg0MDAwCisjZGVmaW5lIFhNSVRfQkVBQ09OICAweDEwMDAKKyNkZWZpbmUgTE9CRV9GQVVMVCAgIDB4MDgwMAorI2RlZmluZSBBVVRPX1JFTU9WQUwgMHgwNDAwCisjZGVmaW5lIFJFTU9WRV9SRUNWICAweDAxMDAKKyNkZWZpbmUgTE9HX09WRVJGTE9XIDB4MDA4MAorI2RlZmluZSBSSU5HX1JFQ09WRVIgMHgwMDIwCisKK3N0cnVjdCBzcmJfaW5pdF9yZXNwb25zZSB7CisJdW5zaWduZWQgY2hhciBjb21tYW5kOworCXVuc2lnbmVkIGNoYXIgaW5pdF9zdGF0dXM7CisJdW5zaWduZWQgY2hhciBpbml0X3N0YXR1c18yOworCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRbM107CisJX191MTYgYnJpbmdfdXBfY29kZTsKKwlfX3UxNiBlbmNvZGVkX2FkZHJlc3M7CisJX191MTYgbGV2ZWxfYWRkcmVzczsKKwlfX3UxNiBhZGFwdGVyX2FkZHJlc3M7CisJX191MTYgcGFybXNfYWRkcmVzczsKKwlfX3UxNiBtYWNfYWRkcmVzczsKK307CisKK3N0cnVjdCBkaXJfb3Blbl9hZGFwdGVyIHsKKwl1bnNpZ25lZCBjaGFyIGNvbW1hbmQ7CisJY2hhciByZXNlcnZlZFs3XTsKKwlfX3UxNiBvcGVuX29wdGlvbnM7CisJdW5zaWduZWQgY2hhciBub2RlX2FkZHJlc3NbNl07CisJdW5zaWduZWQgY2hhciBncm91cF9hZGRyZXNzWzRdOworCXVuc2lnbmVkIGNoYXIgZnVuY3RfYWRkcmVzc1s0XTsKKwlfX3UxNiBudW1fcmN2X2J1ZjsKKwlfX3UxNiByY3ZfYnVmX2xlbjsKKwlfX3UxNiBkaGJfbGVuZ3RoOworCXVuc2lnbmVkIGNoYXIgbnVtX2RoYjsKKwljaGFyIHJlc2VydmVkMjsKKwl1bnNpZ25lZCBjaGFyIGRsY19tYXhfc2FwOworCXVuc2lnbmVkIGNoYXIgZGxjX21heF9zdGE7CisJdW5zaWduZWQgY2hhciBkbGNfbWF4X2dzYXA7CisJdW5zaWduZWQgY2hhciBkbGNfbWF4X2dtZW07CisJdW5zaWduZWQgY2hhciBkbGNfdDFfdGlja18xOworCXVuc2lnbmVkIGNoYXIgZGxjX3QyX3RpY2tfMTsKKwl1bnNpZ25lZCBjaGFyIGRsY190aV90aWNrXzE7CisJdW5zaWduZWQgY2hhciBkbGNfdDFfdGlja18yOworCXVuc2lnbmVkIGNoYXIgZGxjX3QyX3RpY2tfMjsKKwl1bnNpZ25lZCBjaGFyIGRsY190aV90aWNrXzI7CisJdW5zaWduZWQgY2hhciBwcm9kdWN0X2lkWzE4XTsKK307CisKK3N0cnVjdCBkbGNfb3Blbl9zYXAgeworCXVuc2lnbmVkIGNoYXIgY29tbWFuZDsKKwl1bnNpZ25lZCBjaGFyIHJlc2VydmVkMTsKKwl1bnNpZ25lZCBjaGFyIHJldF9jb2RlOworCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWQyOworCV9fdTE2IHN0YXRpb25faWQ7CisJdW5zaWduZWQgY2hhciB0aW1lcl90MTsKKwl1bnNpZ25lZCBjaGFyIHRpbWVyX3QyOworCXVuc2lnbmVkIGNoYXIgdGltZXJfdGk7CisJdW5zaWduZWQgY2hhciBtYXhvdXQ7CisJdW5zaWduZWQgY2hhciBtYXhpbjsKKwl1bnNpZ25lZCBjaGFyIG1heG91dF9pbmNyOworCXVuc2lnbmVkIGNoYXIgbWF4X3JldHJ5X2NvdW50OworCXVuc2lnbmVkIGNoYXIgZ3NhcF9tYXhfbWVtOworCV9fdTE2IG1heF9pX2ZpZWxkOworCXVuc2lnbmVkIGNoYXIgc2FwX3ZhbHVlOworCXVuc2lnbmVkIGNoYXIgc2FwX29wdGlvbnM7CisJdW5zaWduZWQgY2hhciBzdGF0aW9uX2NvdW50OworCXVuc2lnbmVkIGNoYXIgc2FwX2dzYXBfbWVtOworCXVuc2lnbmVkIGNoYXIgZ3NhcFswXTsKK307CisKK3N0cnVjdCBzcmJfeG1pdCB7CisJdW5zaWduZWQgY2hhciBjb21tYW5kOworCXVuc2lnbmVkIGNoYXIgY21kX2NvcnI7CisJdW5zaWduZWQgY2hhciByZXRfY29kZTsKKwl1bnNpZ25lZCBjaGFyIHJlc2VydmVkMTsKKwlfX3UxNiBzdGF0aW9uX2lkOworfTsKKworc3RydWN0IGFyYl9yZWNfcmVxIHsKKwl1bnNpZ25lZCBjaGFyIGNvbW1hbmQ7CisJdW5zaWduZWQgY2hhciByZXNlcnZlZDFbM107CisJX191MTYgc3RhdGlvbl9pZDsKKwlfX3UxNiByZWNfYnVmX2FkZHI7CisJdW5zaWduZWQgY2hhciBsYW5faGRyX2xlbjsKKwl1bnNpZ25lZCBjaGFyIGRsY19oZHJfbGVuOworCV9fdTE2IGZyYW1lX2xlbjsKKwl1bnNpZ25lZCBjaGFyIG1zZ190eXBlOworfTsKKworc3RydWN0IGFzYl9yZWMgeworCXVuc2lnbmVkIGNoYXIgY29tbWFuZDsKKwl1bnNpZ25lZCBjaGFyIHJlc2VydmVkMTsKKwl1bnNpZ25lZCBjaGFyIHJldF9jb2RlOworCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWQyOworCV9fdTE2IHN0YXRpb25faWQ7CisJX191MTYgcmVjX2J1Zl9hZGRyOworfTsKKworc3RydWN0IHJlY19idWYgeworICAJdW5zaWduZWQgY2hhciByZXNlcnZlZDFbMl07CisJX191MTYgYnVmX3B0cjsKKwl1bnNpZ25lZCBjaGFyIHJlc2VydmVkMjsKKwl1bnNpZ25lZCBjaGFyIHJlY2VpdmVfZnM7CisJX191MTYgYnVmX2xlbjsKKwl1bnNpZ25lZCBjaGFyIGRhdGFbMF07Cit9OworCitzdHJ1Y3Qgc3JiX3NldF9mdW5jdF9hZGRyIHsKKwl1bnNpZ25lZCBjaGFyIGNvbW1hbmQ7CisJdW5zaWduZWQgY2hhciByZXNlcnZlZDE7CisJdW5zaWduZWQgY2hhciByZXRfY29kZTsKKwl1bnNpZ25lZCBjaGFyIHJlc2VydmVkMlszXTsKKwl1bnNpZ25lZCBjaGFyIGZ1bmN0X2FkZHJlc3NbNF07Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWNtcC5oIGIvaW5jbHVkZS9saW51eC9pY21wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBiNTcxZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvaWNtcC5oCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBJTkVUCQlBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgVENQL0lQIHByb3RvY29sIHN1aXRlIGZvciB0aGUgTElOVVgKKyAqCQlvcGVyYXRpbmcgc3lzdGVtLiAgSU5FVCBpcyBpbXBsZW1lbnRlZCB1c2luZyB0aGUgIEJTRCBTb2NrZXQKKyAqCQlpbnRlcmZhY2UgYXMgdGhlIG1lYW5zIG9mIGNvbW11bmljYXRpb24gd2l0aCB0aGUgdXNlciBsZXZlbC4KKyAqCisgKgkJRGVmaW5pdGlvbnMgZm9yIHRoZSBJQ01QIHByb3RvY29sLgorICoKKyAqIFZlcnNpb246CUAoIylpY21wLmgJMS4wLjMJMDQvMjgvOTMKKyAqCisgKiBBdXRob3I6CUZyZWQgTi4gdmFuIEtlbXBlbiwgPHdhbHRqZUB1V2FsdC5OTC5NdWduZXQuT1JHPgorICoKKyAqCQlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgkJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqCQlhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqCQkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisjaWZuZGVmIF9MSU5VWF9JQ01QX0gKKyNkZWZpbmUJX0xJTlVYX0lDTVBfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2RlZmluZSBJQ01QX0VDSE9SRVBMWQkJMAkvKiBFY2hvIFJlcGx5CQkJKi8KKyNkZWZpbmUgSUNNUF9ERVNUX1VOUkVBQ0gJMwkvKiBEZXN0aW5hdGlvbiBVbnJlYWNoYWJsZQkqLworI2RlZmluZSBJQ01QX1NPVVJDRV9RVUVOQ0gJNAkvKiBTb3VyY2UgUXVlbmNoCQkqLworI2RlZmluZSBJQ01QX1JFRElSRUNUCQk1CS8qIFJlZGlyZWN0IChjaGFuZ2Ugcm91dGUpCSovCisjZGVmaW5lIElDTVBfRUNITwkJOAkvKiBFY2hvIFJlcXVlc3QJCQkqLworI2RlZmluZSBJQ01QX1RJTUVfRVhDRUVERUQJMTEJLyogVGltZSBFeGNlZWRlZAkJKi8KKyNkZWZpbmUgSUNNUF9QQVJBTUVURVJQUk9CCTEyCS8qIFBhcmFtZXRlciBQcm9ibGVtCQkqLworI2RlZmluZSBJQ01QX1RJTUVTVEFNUAkJMTMJLyogVGltZXN0YW1wIFJlcXVlc3QJCSovCisjZGVmaW5lIElDTVBfVElNRVNUQU1QUkVQTFkJMTQJLyogVGltZXN0YW1wIFJlcGx5CQkqLworI2RlZmluZSBJQ01QX0lORk9fUkVRVUVTVAkxNQkvKiBJbmZvcm1hdGlvbiBSZXF1ZXN0CQkqLworI2RlZmluZSBJQ01QX0lORk9fUkVQTFkJCTE2CS8qIEluZm9ybWF0aW9uIFJlcGx5CQkqLworI2RlZmluZSBJQ01QX0FERFJFU1MJCTE3CS8qIEFkZHJlc3MgTWFzayBSZXF1ZXN0CQkqLworI2RlZmluZSBJQ01QX0FERFJFU1NSRVBMWQkxOAkvKiBBZGRyZXNzIE1hc2sgUmVwbHkJCSovCisjZGVmaW5lIE5SX0lDTVBfVFlQRVMJCTE4CisKKworLyogQ29kZXMgZm9yIFVOUkVBQ0guICovCisjZGVmaW5lIElDTVBfTkVUX1VOUkVBQ0gJMAkvKiBOZXR3b3JrIFVucmVhY2hhYmxlCQkqLworI2RlZmluZSBJQ01QX0hPU1RfVU5SRUFDSAkxCS8qIEhvc3QgVW5yZWFjaGFibGUJCSovCisjZGVmaW5lIElDTVBfUFJPVF9VTlJFQUNICTIJLyogUHJvdG9jb2wgVW5yZWFjaGFibGUJCSovCisjZGVmaW5lIElDTVBfUE9SVF9VTlJFQUNICTMJLyogUG9ydCBVbnJlYWNoYWJsZQkJKi8KKyNkZWZpbmUgSUNNUF9GUkFHX05FRURFRAk0CS8qIEZyYWdtZW50YXRpb24gTmVlZGVkL0RGIHNldAkqLworI2RlZmluZSBJQ01QX1NSX0ZBSUxFRAkJNQkvKiBTb3VyY2UgUm91dGUgZmFpbGVkCQkqLworI2RlZmluZSBJQ01QX05FVF9VTktOT1dOCTYKKyNkZWZpbmUgSUNNUF9IT1NUX1VOS05PV04JNworI2RlZmluZSBJQ01QX0hPU1RfSVNPTEFURUQJOAorI2RlZmluZSBJQ01QX05FVF9BTk8JCTkKKyNkZWZpbmUgSUNNUF9IT1NUX0FOTwkJMTAKKyNkZWZpbmUgSUNNUF9ORVRfVU5SX1RPUwkxMQorI2RlZmluZSBJQ01QX0hPU1RfVU5SX1RPUwkxMgorI2RlZmluZSBJQ01QX1BLVF9GSUxURVJFRAkxMwkvKiBQYWNrZXQgZmlsdGVyZWQgKi8KKyNkZWZpbmUgSUNNUF9QUkVDX1ZJT0xBVElPTgkxNAkvKiBQcmVjZWRlbmNlIHZpb2xhdGlvbiAqLworI2RlZmluZSBJQ01QX1BSRUNfQ1VUT0ZGCTE1CS8qIFByZWNlZGVuY2UgY3V0IG9mZiAqLworI2RlZmluZSBOUl9JQ01QX1VOUkVBQ0gJCTE1CS8qIGluc3RlYWQgb2YgaGFyZGNvZGluZyBpbW1lZGlhdGUgdmFsdWUgKi8KKworLyogQ29kZXMgZm9yIFJFRElSRUNULiAqLworI2RlZmluZSBJQ01QX1JFRElSX05FVAkJMAkvKiBSZWRpcmVjdCBOZXQJCQkqLworI2RlZmluZSBJQ01QX1JFRElSX0hPU1QJCTEJLyogUmVkaXJlY3QgSG9zdAkJKi8KKyNkZWZpbmUgSUNNUF9SRURJUl9ORVRUT1MJMgkvKiBSZWRpcmVjdCBOZXQgZm9yIFRPUwkJKi8KKyNkZWZpbmUgSUNNUF9SRURJUl9IT1NUVE9TCTMJLyogUmVkaXJlY3QgSG9zdCBmb3IgVE9TCSovCisKKy8qIENvZGVzIGZvciBUSU1FX0VYQ0VFREVELiAqLworI2RlZmluZSBJQ01QX0VYQ19UVEwJCTAJLyogVFRMIGNvdW50IGV4Y2VlZGVkCQkqLworI2RlZmluZSBJQ01QX0VYQ19GUkFHVElNRQkxCS8qIEZyYWdtZW50IFJlYXNzIHRpbWUgZXhjZWVkZWQJKi8KKworCitzdHJ1Y3QgaWNtcGhkciB7CisgIF9fdTgJCXR5cGU7CisgIF9fdTgJCWNvZGU7CisgIF9fdTE2CQljaGVja3N1bTsKKyAgdW5pb24geworCXN0cnVjdCB7CisJCV9fdTE2CWlkOworCQlfX3UxNglzZXF1ZW5jZTsKKwl9IGVjaG87CisJX191MzIJZ2F0ZXdheTsKKwlzdHJ1Y3QgeworCQlfX3UxNglfX3VudXNlZDsKKwkJX191MTYJbXR1OworCX0gZnJhZzsKKyAgfSB1bjsKK307CisKKy8qCisgKgljb25zdGFudHMgZm9yIChzZXR8Z2V0KXNvY2tvcHQKKyAqLworCisjZGVmaW5lIElDTVBfRklMVEVSCQkJMQorCitzdHJ1Y3QgaWNtcF9maWx0ZXIgeworCV9fdTMyCQlkYXRhOworfTsKKworCisjZW5kaWYJLyogX0xJTlVYX0lDTVBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pY21wdjYuaCBiL2luY2x1ZGUvbGludXgvaWNtcHY2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNmNmM4YgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvaWNtcHY2LmgKQEAgLTAsMCArMSwxNzEgQEAKKyNpZm5kZWYgX0xJTlVYX0lDTVBWNl9ICisjZGVmaW5lIF9MSU5VWF9JQ01QVjZfSAorCisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorCitzdHJ1Y3QgaWNtcDZoZHIgeworCisJX191OAkJaWNtcDZfdHlwZTsKKwlfX3U4CQlpY21wNl9jb2RlOworCV9fdTE2CQlpY21wNl9ja3N1bTsKKworCisJdW5pb24geworCQlfX3UzMgkJCXVuX2RhdGEzMlsxXTsKKwkJX191MTYJCQl1bl9kYXRhMTZbMl07CisJCV9fdTgJCQl1bl9kYXRhOFs0XTsKKworCQlzdHJ1Y3QgaWNtcHY2X2VjaG8geworCQkJX191MTYJCWlkZW50aWZpZXI7CisJCQlfX3UxNgkJc2VxdWVuY2U7CisJCX0gdV9lY2hvOworCisgICAgICAgICAgICAgICAgc3RydWN0IGljbXB2Nl9uZF9hZHZ0IHsKKyNpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTl9CSVRGSUVMRCkKKyAgICAgICAgICAgICAgICAgICAgICAgIF9fdTMyCQlyZXNlcnZlZDo1LAorICAgICAgICAgICAgICAgICAgICAgICAgCQlvdmVycmlkZToxLAorICAgICAgICAgICAgICAgICAgICAgICAgCQlzb2xpY2l0ZWQ6MSwKKyAgICAgICAgICAgICAgICAgICAgICAgIAkJcm91dGVyOjEsCisJCQkJCXJlc2VydmVkMjoyNDsKKyNlbGlmIGRlZmluZWQoX19CSUdfRU5ESUFOX0JJVEZJRUxEKQorICAgICAgICAgICAgICAgICAgICAgICAgX191MzIJCXJvdXRlcjoxLAorCQkJCQlzb2xpY2l0ZWQ6MSwKKyAgICAgICAgICAgICAgICAgICAgICAgIAkJb3ZlcnJpZGU6MSwKKyAgICAgICAgICAgICAgICAgICAgICAgIAkJcmVzZXJ2ZWQ6Mjk7CisjZWxzZQorI2Vycm9yCSJQbGVhc2UgZml4IDxhc20vYnl0ZW9yZGVyLmg+IgorI2VuZGlmCQkJCQkJCisgICAgICAgICAgICAgICAgfSB1X25kX2FkdnQ7CisKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgaWNtcHY2X25kX3JhIHsKKwkJCV9fdTgJCWhvcF9saW1pdDsKKyNpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTl9CSVRGSUVMRCkKKwkJCV9fdTgJCXJlc2VydmVkOjYsCisJCQkJCW90aGVyOjEsCisJCQkJCW1hbmFnZWQ6MTsKKworI2VsaWYgZGVmaW5lZChfX0JJR19FTkRJQU5fQklURklFTEQpCisJCQlfX3U4CQltYW5hZ2VkOjEsCisJCQkJCW90aGVyOjEsCisJCQkJCXJlc2VydmVkOjY7CisjZWxzZQorI2Vycm9yCSJQbGVhc2UgZml4IDxhc20vYnl0ZW9yZGVyLmg+IgorI2VuZGlmCisJCQlfX3UxNgkJcnRfbGlmZXRpbWU7CisgICAgICAgICAgICAgICAgfSB1X25kX3JhOworCisJfSBpY21wNl9kYXRhdW47CisKKyNkZWZpbmUgaWNtcDZfaWRlbnRpZmllcglpY21wNl9kYXRhdW4udV9lY2hvLmlkZW50aWZpZXIKKyNkZWZpbmUgaWNtcDZfc2VxdWVuY2UJCWljbXA2X2RhdGF1bi51X2VjaG8uc2VxdWVuY2UKKyNkZWZpbmUgaWNtcDZfcG9pbnRlcgkJaWNtcDZfZGF0YXVuLnVuX2RhdGEzMlswXQorI2RlZmluZSBpY21wNl9tdHUJCWljbXA2X2RhdGF1bi51bl9kYXRhMzJbMF0KKyNkZWZpbmUgaWNtcDZfdW51c2VkCQlpY21wNl9kYXRhdW4udW5fZGF0YTMyWzBdCisjZGVmaW5lIGljbXA2X21heGRlbGF5CQlpY21wNl9kYXRhdW4udW5fZGF0YTE2WzBdCisjZGVmaW5lIGljbXA2X3JvdXRlcgkJaWNtcDZfZGF0YXVuLnVfbmRfYWR2dC5yb3V0ZXIKKyNkZWZpbmUgaWNtcDZfc29saWNpdGVkCQlpY21wNl9kYXRhdW4udV9uZF9hZHZ0LnNvbGljaXRlZAorI2RlZmluZSBpY21wNl9vdmVycmlkZQkJaWNtcDZfZGF0YXVuLnVfbmRfYWR2dC5vdmVycmlkZQorI2RlZmluZSBpY21wNl9uZGlzY3Jlc2VydmVkCWljbXA2X2RhdGF1bi51X25kX2FkdnQucmVzZXJ2ZWQKKyNkZWZpbmUgaWNtcDZfaG9wX2xpbWl0CQlpY21wNl9kYXRhdW4udV9uZF9yYS5ob3BfbGltaXQKKyNkZWZpbmUgaWNtcDZfYWRkcmNvbmZfbWFuYWdlZAlpY21wNl9kYXRhdW4udV9uZF9yYS5tYW5hZ2VkCisjZGVmaW5lIGljbXA2X2FkZHJjb25mX290aGVyCWljbXA2X2RhdGF1bi51X25kX3JhLm90aGVyCisjZGVmaW5lIGljbXA2X3J0X2xpZmV0aW1lCWljbXA2X2RhdGF1bi51X25kX3JhLnJ0X2xpZmV0aW1lCit9OworCisKKyNkZWZpbmUgSUNNUFY2X0RFU1RfVU5SRUFDSAkJMQorI2RlZmluZSBJQ01QVjZfUEtUX1RPT0JJRwkJMgorI2RlZmluZSBJQ01QVjZfVElNRV9FWENFRUQJCTMKKyNkZWZpbmUgSUNNUFY2X1BBUkFNUFJPQgkJNAorCisjZGVmaW5lIElDTVBWNl9JTkZPTVNHX01BU0sJCTB4ODAKKworI2RlZmluZSBJQ01QVjZfRUNIT19SRVFVRVNUCQkxMjgKKyNkZWZpbmUgSUNNUFY2X0VDSE9fUkVQTFkJCTEyOQorI2RlZmluZSBJQ01QVjZfTUdNX1FVRVJZCQkxMzAKKyNkZWZpbmUgSUNNUFY2X01HTV9SRVBPUlQgICAgICAgCTEzMQorI2RlZmluZSBJQ01QVjZfTUdNX1JFRFVDVElPTiAgICAJMTMyCisKKyNkZWZpbmUgSUNNUFY2X05JX1FVRVJZCQkJMTM5CisjZGVmaW5lIElDTVBWNl9OSV9SRVBMWQkJCTE0MAorCisjZGVmaW5lIElDTVBWNl9NTEQyX1JFUE9SVAkJMTQzCisKKyNkZWZpbmUgSUNNUFY2X0RIQUFEX1JFUVVFU1QJCTE0NAorI2RlZmluZSBJQ01QVjZfREhBQURfUkVQTFkJCTE0NQorI2RlZmluZSBJQ01QVjZfTU9CSUxFX1BSRUZJWF9TT0wJMTQ2CisjZGVmaW5lIElDTVBWNl9NT0JJTEVfUFJFRklYX0FEVgkxNDcKKworLyoKKyAqCUNvZGVzIGZvciBEZXN0aW5hdGlvbiBVbnJlYWNoYWJsZQorICovCisjZGVmaW5lIElDTVBWNl9OT1JPVVRFCQkJMAorI2RlZmluZSBJQ01QVjZfQURNX1BST0hJQklURUQJCTEKKyNkZWZpbmUgSUNNUFY2X05PVF9ORUlHSEJPVVIJCTIKKyNkZWZpbmUgSUNNUFY2X0FERFJfVU5SRUFDSAkJMworI2RlZmluZSBJQ01QVjZfUE9SVF9VTlJFQUNICQk0CisKKy8qCisgKglDb2RlcyBmb3IgVGltZSBFeGNlZWRlZAorICovCisjZGVmaW5lIElDTVBWNl9FWENfSE9QTElNSVQJCTAKKyNkZWZpbmUgSUNNUFY2X0VYQ19GUkFHVElNRQkJMQorCisvKgorICoJQ29kZXMgZm9yIFBhcmFtZXRlciBQcm9ibGVtCisgKi8KKyNkZWZpbmUgSUNNUFY2X0hEUl9GSUVMRAkJMAorI2RlZmluZSBJQ01QVjZfVU5LX05FWFRIRFIJCTEKKyNkZWZpbmUgSUNNUFY2X1VOS19PUFRJT04JCTIKKworLyoKKyAqCWNvbnN0YW50cyBmb3IgKHNldHxnZXQpc29ja29wdAorICovCisKKyNkZWZpbmUgSUNNUFY2X0ZJTFRFUgkJCTEKKworLyoKKyAqCUlDTVBWNiBmaWx0ZXIKKyAqLworCisjZGVmaW5lIElDTVBWNl9GSUxURVJfQkxPQ0sJCTEKKyNkZWZpbmUgSUNNUFY2X0ZJTFRFUl9QQVNTCQkyCisjZGVmaW5lIElDTVBWNl9GSUxURVJfQkxPQ0tPVEhFUlMJMworI2RlZmluZSBJQ01QVjZfRklMVEVSX1BBU1NPTkxZCQk0CisKK3N0cnVjdCBpY21wNl9maWx0ZXIgeworCV9fdTMyCQlkYXRhWzhdOworfTsKKworLyoKKyAqCURlZmluaXRpb25zIGZvciBNTER2MgorICovCisjZGVmaW5lIE1MRDJfTU9ERV9JU19JTkNMVURFCTEKKyNkZWZpbmUgTUxEMl9NT0RFX0lTX0VYQ0xVREUJMgorI2RlZmluZSBNTEQyX0NIQU5HRV9UT19JTkNMVURFCTMKKyNkZWZpbmUgTUxEMl9DSEFOR0VfVE9fRVhDTFVERQk0CisjZGVmaW5lIE1MRDJfQUxMT1dfTkVXX1NPVVJDRVMJNQorI2RlZmluZSBNTEQyX0JMT0NLX09MRF9TT1VSQ0VTCTYKKworI2RlZmluZSBNTEQyX0FMTF9NQ1JfSU5JVCB7IHsgeyAweGZmLDB4MDIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwweDE2IH0gfSB9CisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKworCitleHRlcm4gdm9pZAkJCQlpY21wdjZfc2VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkJICAgIGludCB0eXBlLCBpbnQgY29kZSwKKwkJCQkJCSAgICBfX3UzMiBpbmZvLCAKKwkJCQkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKworZXh0ZXJuIGludAkJCQlpY21wdjZfaW5pdChzdHJ1Y3QgbmV0X3Byb3RvX2ZhbWlseSAqb3BzKTsKK2V4dGVybiBpbnQJCQkJaWNtcHY2X2Vycl9jb252ZXJ0KGludCB0eXBlLCBpbnQgY29kZSwKKwkJCQkJCQkgICBpbnQgKmVycik7CitleHRlcm4gdm9pZAkJCQlpY21wdjZfY2xlYW51cCh2b2lkKTsKK2V4dGVybiB2b2lkCQkJCWljbXB2Nl9wYXJhbV9wcm9iKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCQkJICBpbnQgY29kZSwgaW50IHBvcyk7CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lkZS5oIGIvaW5jbHVkZS9saW51eC9pZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2ZjMDk5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9pZGUuaApAQCAtMCwwICsxLDE1MTYgQEAKKyNpZm5kZWYgX0lERV9ICisjZGVmaW5lIF9JREVfSAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2xpbnV4L2lkZS5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NC0yMDAyICBMaW51cyBUb3J2YWxkcyAmIGF1dGhvcnMKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2hkcmVnLmg+CisjaW5jbHVkZSA8bGludXgvaGRzbWFydC5oPgorI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9iaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KKworLyoKKyAqIFRoaXMgaXMgdGhlIG11bHRpcGxlIElERSBpbnRlcmZhY2UgZHJpdmVyLCBhcyBldm9sdmVkIGZyb20gaGQuYy4KKyAqIEl0IHN1cHBvcnRzIHVwIHRvIGZvdXIgSURFIGludGVyZmFjZXMsIG9uIG9uZSBvciBtb3JlIElSUXMgKHVzdWFsbHkgMTQgJiAxNSkuCisgKiBUaGVyZSBjYW4gYmUgdXAgdG8gdHdvIGRyaXZlcyBwZXIgaW50ZXJmYWNlLCBhcyBwZXIgdGhlIEFUQS0yIHNwZWMuCisgKgorICogUHJpbWFyeSBpL2Y6ICAgIGlkZTA6IG1ham9yPTM7ICAoaGRhKSAgICAgICAgIG1pbm9yPTA7IChoZGIpICAgICAgICAgbWlub3I9NjQKKyAqIFNlY29uZGFyeSBpL2Y6ICBpZGUxOiBtYWpvcj0yMjsgKGhkYyBvciBoZDFhKSBtaW5vcj0wOyAoaGRkIG9yIGhkMWIpIG1pbm9yPTY0CisgKiBUZXJ0aWFyeSBpL2Y6ICAgaWRlMjogbWFqb3I9MzM7IChoZGUpICAgICAgICAgbWlub3I9MDsgKGhkZikgICAgICAgICBtaW5vcj02NAorICogUXVhdGVybmFyeSBpL2Y6IGlkZTM6IG1ham9yPTM0OyAoaGRnKSAgICAgICAgIG1pbm9yPTA7IChoZGgpICAgICAgICAgbWlub3I9NjQKKyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBJREUgZHJpdmVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyAocGxheSB3aXRoIHRoZXNlIGFzIGRlc2lyZWQpOgorICoKKyAqIFJFQUxMWV9TTE9XX0lPIGNhbiBiZSBkZWZpbmVkIGluIGlkZS5jIGFuZCBpZGUtY2QuYywgaWYgbmVjZXNzYXJ5CisgKi8KKyNkZWZpbmUgSU5JVElBTF9NVUxUX0NPVU5UCTAJLyogb2ZmPTA7IG9uPTIsNCw4LDE2LDMyLCBldGMuLiAqLworCisjaWZuZGVmIFNVUFBPUlRfU0xPV19EQVRBX1BPUlRTCQkvKiAxIHRvIHN1cHBvcnQgc2xvdyBkYXRhIHBvcnRzICovCisjZGVmaW5lIFNVUFBPUlRfU0xPV19EQVRBX1BPUlRTCTEJLyogMCB0byByZWR1Y2Uga2VybmVsIHNpemUgKi8KKyNlbmRpZgorI2lmbmRlZiBTVVBQT1JUX1ZMQl9TWU5DCQkvKiAxIHRvIHN1cHBvcnQgd2VpcmQgMzItYml0IGNoaXBzICovCisjZGVmaW5lIFNVUFBPUlRfVkxCX1NZTkMJMQkvKiAwIHRvIHJlZHVjZSBrZXJuZWwgc2l6ZSAqLworI2VuZGlmCisjaWZuZGVmIE9LX1RPX1JFU0VUX0NPTlRST0xMRVIJCS8qIDEgbmVlZGVkIGZvciBnb29kIGVycm9yIHJlY292ZXJ5ICovCisjZGVmaW5lIE9LX1RPX1JFU0VUX0NPTlRST0xMRVIJMQkvKiAwIGZvciB1c2Ugd2l0aCBBSDIzNzJBL0IgaW50ZXJmYWNlICovCisjZW5kaWYKKworI2lmbmRlZiBESVNBQkxFX0lSUV9OT1NZTkMKKyNkZWZpbmUgRElTQUJMRV9JUlFfTk9TWU5DCTAKKyNlbmRpZgorCisvKgorICogVXNlZCB0byBpbmRpY2F0ZSAibm8gSVJRIiwgc2hvdWxkIGJlIGEgdmFsdWUgdGhhdCBjYW5ub3QgYmUgYW4gSVJRCisgKiBudW1iZXIuCisgKi8KKyAKKyNkZWZpbmUgSURFX05PX0lSUQkJKC0xKQorCisvKgorICogICJObyB1c2VyLXNlcnZpY2VhYmxlIHBhcnRzIiBiZXlvbmQgdGhpcyBwb2ludCAgOikKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyCWJ5dGU7CS8qIHVzZWQgZXZlcnl3aGVyZSAqLworCisvKgorICogUHJvYmFibHkgbm90IHdpc2UgdG8gZmlkZGxlIHdpdGggdGhlc2UKKyAqLworI2RlZmluZSBFUlJPUl9NQVgJOAkvKiBNYXggcmVhZC93cml0ZSBlcnJvcnMgcGVyIHNlY3RvciAqLworI2RlZmluZSBFUlJPUl9SRVNFVAkzCS8qIFJlc2V0IGNvbnRyb2xsZXIgZXZlcnkgNHRoIHJldHJ5ICovCisjZGVmaW5lIEVSUk9SX1JFQ0FMCTEJLyogUmVjYWxpYnJhdGUgZXZlcnkgMm5kIHJldHJ5ICovCisKKy8qCisgKiBUdW5lIGZsYWdzCisgKi8KKyNkZWZpbmUgSURFX1RVTkVfTk9BVVRPCQkyCisjZGVmaW5lIElERV9UVU5FX0FVVE8JCTEKKyNkZWZpbmUgSURFX1RVTkVfREVGQVVMVAkwCisKKy8qCisgKiBzdGF0ZSBmbGFncworICovCisKKyNkZWZpbmUgRE1BX1BJT19SRVRSWQkxCS8qIHJldHJ5aW5nIGluIFBJTyAqLworCisjZGVmaW5lIEhXSUYoZHJpdmUpCQkoKGlkZV9od2lmX3QgKikoKGRyaXZlKS0+aHdpZikpCisjZGVmaW5lIEhXR1JPVVAoZHJpdmUpCQkoKGlkZV9od2dyb3VwX3QgKikoSFdJRihkcml2ZSktPmh3Z3JvdXApKQorCisvKgorICogRGVmaW5pdGlvbnMgZm9yIGFjY2Vzc2luZyBJREUgY29udHJvbGxlciByZWdpc3RlcnMKKyAqLworI2RlZmluZSBJREVfTlJfUE9SVFMJCSgxMCkKKworI2RlZmluZSBJREVfREFUQV9PRkZTRVQJCSgwKQorI2RlZmluZSBJREVfRVJST1JfT0ZGU0VUCSgxKQorI2RlZmluZSBJREVfTlNFQ1RPUl9PRkZTRVQJKDIpCisjZGVmaW5lIElERV9TRUNUT1JfT0ZGU0VUCSgzKQorI2RlZmluZSBJREVfTENZTF9PRkZTRVQJCSg0KQorI2RlZmluZSBJREVfSENZTF9PRkZTRVQJCSg1KQorI2RlZmluZSBJREVfU0VMRUNUX09GRlNFVAkoNikKKyNkZWZpbmUgSURFX1NUQVRVU19PRkZTRVQJKDcpCisjZGVmaW5lIElERV9DT05UUk9MX09GRlNFVAkoOCkKKyNkZWZpbmUgSURFX0lSUV9PRkZTRVQJCSg5KQorCisjZGVmaW5lIElERV9GRUFUVVJFX09GRlNFVAlJREVfRVJST1JfT0ZGU0VUCisjZGVmaW5lIElERV9DT01NQU5EX09GRlNFVAlJREVfU1RBVFVTX09GRlNFVAorCisjZGVmaW5lIElERV9DT05UUk9MX09GRlNFVF9IT0IJKDcpCisKKyNkZWZpbmUgSURFX0RBVEFfUkVHCQkoSFdJRihkcml2ZSktPmlvX3BvcnRzW0lERV9EQVRBX09GRlNFVF0pCisjZGVmaW5lIElERV9FUlJPUl9SRUcJCShIV0lGKGRyaXZlKS0+aW9fcG9ydHNbSURFX0VSUk9SX09GRlNFVF0pCisjZGVmaW5lIElERV9OU0VDVE9SX1JFRwkJKEhXSUYoZHJpdmUpLT5pb19wb3J0c1tJREVfTlNFQ1RPUl9PRkZTRVRdKQorI2RlZmluZSBJREVfU0VDVE9SX1JFRwkJKEhXSUYoZHJpdmUpLT5pb19wb3J0c1tJREVfU0VDVE9SX09GRlNFVF0pCisjZGVmaW5lIElERV9MQ1lMX1JFRwkJKEhXSUYoZHJpdmUpLT5pb19wb3J0c1tJREVfTENZTF9PRkZTRVRdKQorI2RlZmluZSBJREVfSENZTF9SRUcJCShIV0lGKGRyaXZlKS0+aW9fcG9ydHNbSURFX0hDWUxfT0ZGU0VUXSkKKyNkZWZpbmUgSURFX1NFTEVDVF9SRUcJCShIV0lGKGRyaXZlKS0+aW9fcG9ydHNbSURFX1NFTEVDVF9PRkZTRVRdKQorI2RlZmluZSBJREVfU1RBVFVTX1JFRwkJKEhXSUYoZHJpdmUpLT5pb19wb3J0c1tJREVfU1RBVFVTX09GRlNFVF0pCisjZGVmaW5lIElERV9DT05UUk9MX1JFRwkJKEhXSUYoZHJpdmUpLT5pb19wb3J0c1tJREVfQ09OVFJPTF9PRkZTRVRdKQorI2RlZmluZSBJREVfSVJRX1JFRwkJKEhXSUYoZHJpdmUpLT5pb19wb3J0c1tJREVfSVJRX09GRlNFVF0pCisKKyNkZWZpbmUgSURFX0ZFQVRVUkVfUkVHCQlJREVfRVJST1JfUkVHCisjZGVmaW5lIElERV9DT01NQU5EX1JFRwkJSURFX1NUQVRVU19SRUcKKyNkZWZpbmUgSURFX0FMVFNUQVRVU19SRUcJSURFX0NPTlRST0xfUkVHCisjZGVmaW5lIElERV9JUkVBU09OX1JFRwkJSURFX05TRUNUT1JfUkVHCisjZGVmaW5lIElERV9CQ09VTlRMX1JFRwkJSURFX0xDWUxfUkVHCisjZGVmaW5lIElERV9CQ09VTlRIX1JFRwkJSURFX0hDWUxfUkVHCisKKyNkZWZpbmUgT0tfU1RBVChzdGF0LGdvb2QsYmFkKQkoKChzdGF0KSYoKGdvb2QpfChiYWQpKSk9PShnb29kKSkKKyNkZWZpbmUgQkFEX1JfU1RBVAkJKEJVU1lfU1RBVCAgIHwgRVJSX1NUQVQpCisjZGVmaW5lIEJBRF9XX1NUQVQJCShCQURfUl9TVEFUICB8IFdSRVJSX1NUQVQpCisjZGVmaW5lIEJBRF9TVEFUCQkoQkFEX1JfU1RBVCAgfCBEUlFfU1RBVCkKKyNkZWZpbmUgRFJJVkVfUkVBRFkJCShSRUFEWV9TVEFUICB8IFNFRUtfU1RBVCkKKyNkZWZpbmUgREFUQV9SRUFEWQkJKERSUV9TVEFUKQorCisjZGVmaW5lIEJBRF9DUkMJCQkoQUJSVF9FUlIgICAgfCBJQ1JDX0VSUikKKworI2RlZmluZSBTQVRBX05SX1BPUlRTCQkoMykJLyogMTYgcG9zc2libGUgPz8gKi8KKworI2RlZmluZSBTQVRBX1NUQVRVU19PRkZTRVQJKDApCisjZGVmaW5lIFNBVEFfU1RBVFVTX1JFRwkJKEhXSUYoZHJpdmUpLT5zYXRhX3NjcltTQVRBX1NUQVRVU19PRkZTRVRdKQorI2RlZmluZSBTQVRBX0VSUk9SX09GRlNFVAkoMSkKKyNkZWZpbmUgU0FUQV9FUlJPUl9SRUcJCShIV0lGKGRyaXZlKS0+c2F0YV9zY3JbU0FUQV9FUlJPUl9PRkZTRVRdKQorI2RlZmluZSBTQVRBX0NPTlRST0xfT0ZGU0VUCSgyKQorI2RlZmluZSBTQVRBX0NPTlRST0xfUkVHCShIV0lGKGRyaXZlKS0+c2F0YV9zY3JbU0FUQV9DT05UUk9MX09GRlNFVF0pCisKKyNkZWZpbmUgU0FUQV9NSVNDX09GRlNFVAkoMCkKKyNkZWZpbmUgU0FUQV9NSVNDX1JFRwkJKEhXSUYoZHJpdmUpLT5zYXRhX21pc2NbU0FUQV9NSVNDX09GRlNFVF0pCisjZGVmaW5lIFNBVEFfUEhZX09GRlNFVAkJKDEpCisjZGVmaW5lIFNBVEFfUEhZX1JFRwkJKEhXSUYoZHJpdmUpLT5zYXRhX21pc2NbU0FUQV9QSFlfT0ZGU0VUXSkKKyNkZWZpbmUgU0FUQV9JRU5fT0ZGU0VUCQkoMikKKyNkZWZpbmUgU0FUQV9JRU5fUkVHCQkoSFdJRihkcml2ZSktPnNhdGFfbWlzY1tTQVRBX0lFTl9PRkZTRVRdKQorCisvKgorICogT3VyIFBoeXNpY2FsIFJlZ2lvbiBEZXNjcmlwdG9yIChQUkQpIHRhYmxlIHNob3VsZCBiZSBsYXJnZSBlbm91Z2gKKyAqIHRvIGhhbmRsZSB0aGUgYmlnZ2VzdCBJL08gcmVxdWVzdCB3ZSBhcmUgbGlrZWx5IHRvIHNlZS4gIFNpbmNlIHJlcXVlc3RzCisgKiBjYW4gaGF2ZSBubyBtb3JlIHRoYW4gMjU2IHNlY3RvcnMsIGFuZCBzaW5jZSB0aGUgdHlwaWNhbCBibG9ja3NpemUgaXMKKyAqIHR3byBvciBtb3JlIHNlY3RvcnMsIHdlIGNvdWxkIGdldCBieSB3aXRoIGEgbGltaXQgb2YgMTI4IGVudHJpZXMgaGVyZSBmb3IKKyAqIHRoZSB1c3VhbCB3b3JzdCBjYXNlLiAgTW9zdCByZXF1ZXN0cyBzZWVtIHRvIGluY2x1ZGUgc29tZSBjb250aWd1b3VzIGJsb2NrcywKKyAqIGZ1cnRoZXIgcmVkdWNpbmcgdGhlIG51bWJlciBvZiB0YWJsZSBlbnRyaWVzIHJlcXVpcmVkLgorICoKKyAqIFRoZSBkcml2ZXIgcmV2ZXJ0cyB0byBQSU8gbW9kZSBmb3IgaW5kaXZpZHVhbCByZXF1ZXN0cyB0aGF0IGV4Y2VlZAorICogdGhpcyBsaW1pdCAocG9zc2libGUgd2l0aCA1MTIgYnl0ZSBibG9ja3NpemVzLCBlZy4gTVNET1MgZi9zKSwgc28gaGFuZGxpbmcKKyAqIDEwMCUgb2YgYWxsIGNyYXp5IHNjZW5hcmlvcyBoZXJlIGlzIG5vdCBuZWNlc3NhcnkuCisgKgorICogQXMgaXQgdHVybnMgb3V0IHRob3VnaCwgd2UgbXVzdCBhbGxvY2F0ZSBhIGZ1bGwgNEtCIHBhZ2UgZm9yIHRoaXMsCisgKiBzbyB0aGUgdHdvIFBSRCB0YWJsZXMgKGlkZTAgJiBpZGUxKSB3aWxsIGVhY2ggZ2V0IGhhbGYgb2YgdGhhdCwKKyAqIGFsbG93aW5nIGVhY2ggdG8gaGF2ZSBhYm91dCAyNTYgZW50cmllcyAoOCBieXRlcyBlYWNoKSBmcm9tIHRoaXMuCisgKi8KKyNkZWZpbmUgUFJEX0JZVEVTICAgICAgIDgKKyNkZWZpbmUgUFJEX0VOVFJJRVMJMjU2CisKKy8qCisgKiBTb21lIG1vcmUgdXNlZnVsIGRlZmluaXRpb25zCisgKi8KKyNkZWZpbmUgUEFSVE5fQklUUwk2CS8qIG51bWJlciBvZiBtaW5vciBkZXYgYml0cyBmb3IgcGFydGl0aW9ucyAqLworI2RlZmluZSBNQVhfRFJJVkVTCTIJLyogcGVyIGludGVyZmFjZTsgMiBhc3N1bWVkIGJ5IGxvdHMgb2YgY29kZSAqLworI2RlZmluZSBTRUNUT1JfU0laRQk1MTIKKyNkZWZpbmUgU0VDVE9SX1dPUkRTCShTRUNUT1JfU0laRSAvIDQpCS8qIG51bWJlciBvZiAzMmJpdCB3b3JkcyBwZXIgc2VjdG9yICovCisjZGVmaW5lIElERV9MQVJHRV9TRUVLKGIxLGIyLHQpCSgoKGIxKSA+IChiMikgKyAodCkpIHx8ICgoYjIpID4gKGIxKSArICh0KSkpCisKKy8qCisgKiBUaW1lb3V0cyBmb3IgdmFyaW91cyBvcGVyYXRpb25zOgorICovCisjZGVmaW5lIFdBSVRfRFJRCShIWi8xMCkJCS8qIDEwMG1zZWMgLSBzcGVjIGFsbG93cyB1cCB0byAyMG1zICovCisjZGVmaW5lIFdBSVRfUkVBRFkJKDUqSFopCQkvKiA1c2VjIC0gc29tZSBsYXB0b3BzIGFyZSB2ZXJ5IHNsb3cgKi8KKyNkZWZpbmUgV0FJVF9QSURFTlRJRlkJKDEwKkhaKQkvKiAxMHNlYyAgLSBzaG91bGQgYmUgbGVzcyB0aGFuIDNtcyAoPyksIGlmIGFsbCBBVEFQSSBDRCBpcyBjbG9zZWQgYXQgYm9vdCAqLworI2RlZmluZSBXQUlUX1dPUlNUQ0FTRQkoMzAqSFopCS8qIDMwc2VjICAtIHdvcnN0IGNhc2Ugd2hlbiBzcGlubmluZyB1cCAqLworI2RlZmluZSBXQUlUX0NNRAkoMTAqSFopCS8qIDEwc2VjICAtIG1heGltdW0gd2FpdCBmb3IgYW4gSVJRIHRvIGhhcHBlbiAqLworI2RlZmluZSBXQUlUX01JTl9TTEVFUAkoMipIWi8xMDApCS8qIDIwbXNlYyAtIG1pbmltdW0gc2xlZXAgdGltZSAqLworCisjZGVmaW5lIEhPU1QoaHdpZixjaGlwc2V0KQkJCQkJXAorewkJCQkJCQkJXAorCXJldHVybiAoKGh3aWYpLT5jaGlwc2V0ID09IGNoaXBzZXQpID8gMSA6IDA7CQlcCit9CisKKy8qCisgKiBDaGVjayBmb3IgYW4gaW50ZXJydXB0IGFuZCBhY2tub3dsZWRnZSB0aGUgaW50ZXJydXB0IHN0YXR1cworICovCitzdHJ1Y3QgaHdpZl9zOwordHlwZWRlZiBpbnQgKGlkZV9hY2tfaW50cl90KShzdHJ1Y3QgaHdpZl9zICopOworCisjaWZuZGVmIE5PX0RNQQorI2RlZmluZSBOT19ETUEgIDI1NQorI2VuZGlmCisKKy8qCisgKiBod2lmX2NoaXBzZXRfdCBpcyB1c2VkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIHNwZWNpZmljIGhhcmR3YXJlCisgKiBjaGlwc2V0IHVzZWQgYnkgZWFjaCBJREUgaW50ZXJmYWNlLCBpZiBrbm93bi4KKyAqLwordHlwZWRlZiBlbnVtIHsJaWRlX3Vua25vd24sCWlkZV9nZW5lcmljLAlpZGVfcGNpLAorCQlpZGVfY21kNjQwLAlpZGVfZHRjMjI3OCwJaWRlX2FsaTE0eHgsCisJCWlkZV9xZDY1eHgsCWlkZV91bWM4NjcyLAlpZGVfaHQ2NTYwYiwKKwkJaWRlX3J6MTAwMCwJaWRlX3RybTI5MCwKKwkJaWRlX2NtZDY0NiwJaWRlX2N5ODJjNjkzLAlpZGVfNGRyaXZlcywKKwkJaWRlX3BtYWMsCWlkZV9ldHJheDEwMCwJaWRlX2Fjb3JuLAorCQlpZGVfZm9yY2VkCit9IGh3aWZfY2hpcHNldF90OworCisvKgorICogU3RydWN0dXJlIHRvIGhvbGQgYWxsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBsb2NhdGlvbiBvZiB0aGlzIHBvcnQKKyAqLwordHlwZWRlZiBzdHJ1Y3QgaHdfcmVnc19zIHsKKwl1bnNpZ25lZCBsb25nCWlvX3BvcnRzW0lERV9OUl9QT1JUU107CS8qIHRhc2sgZmlsZSByZWdpc3RlcnMgKi8KKwlpbnQJCWlycTsJCQkvKiBvdXIgaXJxIG51bWJlciAqLworCWludAkJZG1hOwkJCS8qIG91ciBkbWEgZW50cnkgKi8KKwlpZGVfYWNrX2ludHJfdAkqYWNrX2ludHI7CQkvKiBhY2tub3dsZWRnZSBpbnRlcnJ1cHQgKi8KKwlod2lmX2NoaXBzZXRfdCAgY2hpcHNldDsKK30gaHdfcmVnc190OworCisvKgorICogUmVnaXN0ZXIgbmV3IGhhcmR3YXJlIHdpdGggaWRlCisgKi8KK2ludCBpZGVfcmVnaXN0ZXJfaHcoaHdfcmVnc190ICpodywgc3RydWN0IGh3aWZfcyAqKmh3aWZwKTsKK2ludCBpZGVfcmVnaXN0ZXJfaHdfd2l0aF9maXh1cChod19yZWdzX3QgKiwgc3RydWN0IGh3aWZfcyAqKiwgdm9pZCAoKikoc3RydWN0IGh3aWZfcyAqKSk7CisKKy8qCisgKiBTZXQgdXAgaHdfcmVnc190IHN0cnVjdHVyZSBiZWZvcmUgY2FsbGluZyBpZGVfcmVnaXN0ZXJfaHcgKG9wdGlvbmFsKQorICovCit2b2lkIGlkZV9zZXR1cF9wb3J0cygJaHdfcmVnc190ICpodywKKwkJCXVuc2lnbmVkIGxvbmcgYmFzZSwKKwkJCWludCAqb2Zmc2V0cywKKwkJCXVuc2lnbmVkIGxvbmcgY3RybCwKKwkJCXVuc2lnbmVkIGxvbmcgaW50ciwKKwkJCWlkZV9hY2tfaW50cl90ICphY2tfaW50ciwKKyNpZiAwCisJCQlpZGVfaW9fb3BzX3QgKmlvcHMsCisjZW5kaWYKKwkJCWludCBpcnEpOworCitzdGF0aWMgaW5saW5lIHZvaWQgaWRlX3N0ZF9pbml0X3BvcnRzKGh3X3JlZ3NfdCAqaHcsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBpb19hZGRyLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgY3RsX2FkZHIpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSBJREVfREFUQV9PRkZTRVQ7IGkgPD0gSURFX1NUQVRVU19PRkZTRVQ7IGkrKykKKwkJaHctPmlvX3BvcnRzW2ldID0gaW9fYWRkcisrOworCisJaHctPmlvX3BvcnRzW0lERV9DT05UUk9MX09GRlNFVF0gPSBjdGxfYWRkcjsKK30KKworI2luY2x1ZGUgPGFzbS9pZGUuaD4KKworLyogbmVlZGVkIG9uIGFscGhhLCB4ODYveDg2XzY0LCBpYTY0LCBtaXBzLCBwcGMzMiBhbmQgc2ggKi8KKyNpZm5kZWYgSURFX0FSQ0hfT0JTT0xFVEVfREVGQVVMVFMKKyMgZGVmaW5lIGlkZV9kZWZhdWx0X2lvX2Jhc2UoaW5kZXgpCSgwKQorIyBkZWZpbmUgaWRlX2RlZmF1bHRfaXJxKGJhc2UpCQkoMCkKKyMgZGVmaW5lIGlkZV9pbml0X2RlZmF1bHRfaXJxKGJhc2UpCSgwKQorI2VuZGlmCisKKy8qCisgKiBpZGVfaW5pdF9od2lmX3BvcnRzKCkgaXMgT0JTT0xFVEUgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAyLjcgc2VyaWVzLgorICogTmV3IHBvcnRzIHNob3VsZG4ndCBkZWZpbmUgSURFX0FSQ0hfT0JTT0xFVEVfSU5JVCBpbiA8YXNtL2lkZS5oPi4KKyAqLworI2lmZGVmIElERV9BUkNIX09CU09MRVRFX0lOSVQKK3N0YXRpYyBpbmxpbmUgdm9pZCBpZGVfaW5pdF9od2lmX3BvcnRzKGh3X3JlZ3NfdCAqaHcsCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgaW9fYWRkciwKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBjdGxfYWRkciwKKwkJCQkgICAgICAgaW50ICppcnEpCit7CisJaWYgKCFjdGxfYWRkcikKKwkJaWRlX3N0ZF9pbml0X3BvcnRzKGh3LCBpb19hZGRyLCBpZGVfZGVmYXVsdF9pb19jdGwoaW9fYWRkcikpOworCWVsc2UKKwkJaWRlX3N0ZF9pbml0X3BvcnRzKGh3LCBpb19hZGRyLCBjdGxfYWRkcik7CisKKwlpZiAoaXJxKQorCQkqaXJxID0gMDsKKworCWh3LT5pb19wb3J0c1tJREVfSVJRX09GRlNFVF0gPSAwOworCisjaWZkZWYgQ09ORklHX1BQQzMyCisJaWYgKHBwY19pZGVfbWQuaWRlX2luaXRfaHdpZikKKwkJcHBjX2lkZV9tZC5pZGVfaW5pdF9od2lmKGh3LCBpb19hZGRyLCBjdGxfYWRkciwgaXJxKTsKKyNlbmRpZgorfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBpZGVfaW5pdF9od2lmX3BvcnRzKGh3X3JlZ3NfdCAqaHcsCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgaW9fYWRkciwKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBjdGxfYWRkciwKKwkJCQkgICAgICAgaW50ICppcnEpCit7CisJaWYgKGlvX2FkZHIgfHwgY3RsX2FkZHIpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBtdXN0IG5vdCBiZSBjYWxsZWRcbiIsIF9fRlVOQ1RJT05fXyk7Cit9CisjZW5kaWYgLyogSURFX0FSQ0hfT0JTT0xFVEVfSU5JVCAqLworCisvKiBDdXJyZW50bHkgb25seSBtNjhrLCBhcHVzIGFuZCBtOHh4IG5lZWQgaXQgKi8KKyNpZm5kZWYgSURFX0FSQ0hfQUNLX0lOVFIKKyMgZGVmaW5lIGlkZV9hY2tfaW50cihod2lmKSAoMSkKKyNlbmRpZgorCisvKiBDdXJyZW50bHkgb25seSBBdGFyaSBuZWVkcyBpdCAqLworI2lmbmRlZiBJREVfQVJDSF9MT0NLCisjIGRlZmluZSBpZGVfcmVsZWFzZV9sb2NrKCkJCQlkbyB7fSB3aGlsZSAoMCkKKyMgZGVmaW5lIGlkZV9nZXRfbG9jayhoZGxyLCBkYXRhKQkJZG8ge30gd2hpbGUgKDApCisjZW5kaWYgLyogSURFX0FSQ0hfTE9DSyAqLworCisvKgorICogTm93IGZvciB0aGUgZGF0YSB3ZSBuZWVkIHRvIG1haW50YWluIHBlci1kcml2ZTogIGlkZV9kcml2ZV90CisgKi8KKworI2RlZmluZSBpZGVfc2NzaQkweDIxCisjZGVmaW5lIGlkZV9kaXNrCTB4MjAKKyNkZWZpbmUgaWRlX29wdGljYWwJMHg3CisjZGVmaW5lIGlkZV9jZHJvbQkweDUKKyNkZWZpbmUgaWRlX3RhcGUJMHgxCisjZGVmaW5lIGlkZV9mbG9wcHkJMHgwCisKKy8qCisgKiBTcGVjaWFsIERyaXZlciBGbGFncworICoKKyAqIHNldF9nZW9tZXRyeQk6IHJlc3BlY2lmeSBkcml2ZSBnZW9tZXRyeQorICogcmVjYWxpYnJhdGUJOiBzZWVrIHRvIGN5bCAwCisgKiBzZXRfbXVsdG1vZGUJOiBzZXQgbXVsdG1vZGUgY291bnQKKyAqIHNldF90dW5lCTogdHVuZSBpbnRlcmZhY2UgZm9yIGRyaXZlCisgKiBzZXJ2aWNlZAk6IHNlcnZpY2UgY29tbWFuZAorICogcmVzZXJ2ZWQJOiB1bnVzZWQKKyAqLwordHlwZWRlZiB1bmlvbiB7CisJdW5zaWduZWQgYWxsCQkJOiA4OworCXN0cnVjdCB7CisjaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fQklURklFTEQpCisJCXVuc2lnbmVkIHNldF9nZW9tZXRyeQk6IDE7CisJCXVuc2lnbmVkIHJlY2FsaWJyYXRlCTogMTsKKwkJdW5zaWduZWQgc2V0X211bHRtb2RlCTogMTsKKwkJdW5zaWduZWQgc2V0X3R1bmUJOiAxOworCQl1bnNpZ25lZCBzZXJ2aWNlZAk6IDE7CisJCXVuc2lnbmVkIHJlc2VydmVkCTogMzsKKyNlbGlmIGRlZmluZWQoX19CSUdfRU5ESUFOX0JJVEZJRUxEKQorCQl1bnNpZ25lZCByZXNlcnZlZAk6IDM7CisJCXVuc2lnbmVkIHNlcnZpY2VkCTogMTsKKwkJdW5zaWduZWQgc2V0X3R1bmUJOiAxOworCQl1bnNpZ25lZCBzZXRfbXVsdG1vZGUJOiAxOworCQl1bnNpZ25lZCByZWNhbGlicmF0ZQk6IDE7CisJCXVuc2lnbmVkIHNldF9nZW9tZXRyeQk6IDE7CisjZWxzZQorI2Vycm9yICJQbGVhc2UgZml4IDxhc20vYnl0ZW9yZGVyLmg+IgorI2VuZGlmCisJfSBiOworfSBzcGVjaWFsX3Q7CisKKy8qCisgKiBBVEEgREFUQSBSZWdpc3RlciBTcGVjaWFsLgorICogQVRBIE5TRUNUT1IgQ291bnQgUmVnaXN0ZXIoKS4KKyAqIEFUQVBJIEJ5dGUgQ291bnQgUmVnaXN0ZXIuCisgKiBDaGFubmVsIGluZGV4IG9yZGVyaW5nIHBhaXJzLgorICovCit0eXBlZGVmIHVuaW9uIHsKKwl1bnNpZ25lZCBhbGwJCQk6MTY7CisJc3RydWN0IHsKKyNpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTl9CSVRGSUVMRCkKKwkJdW5zaWduZWQgbG93CQk6ODsJLyogTFNCICovCisJCXVuc2lnbmVkIGhpZ2gJCTo4OwkvKiBNU0IgKi8KKyNlbGlmIGRlZmluZWQoX19CSUdfRU5ESUFOX0JJVEZJRUxEKQorCQl1bnNpZ25lZCBoaWdoCQk6ODsJLyogTVNCICovCisJCXVuc2lnbmVkIGxvdwkJOjg7CS8qIExTQiAqLworI2Vsc2UKKyNlcnJvciAiUGxlYXNlIGZpeCA8YXNtL2J5dGVvcmRlci5oPiIKKyNlbmRpZgorCX0gYjsKK30gYXRhX25zZWN0b3JfdCwgYXRhX2RhdGFfdCwgYXRhcGlfYmNvdW50X3QsIGF0YV9pbmRleF90OworCisvKgorICogQVRBLUlERSBFcnJvciBSZWdpc3RlcgorICoKKyAqIG1hcmsJCTogQmFkIGFkZHJlc3MgbWFyaworICogdHplcm8JOiBDb3VsZG4ndCBmaW5kIHRyYWNrIDAKKyAqIGFicnQJCTogQWJvcnRlZCBDb21tYW5kCisgKiBtY3IJCTogTWVkaWEgQ2hhbmdlIFJlcXVlc3QKKyAqIGlkCQk6IElEIGZpZWxkIG5vdCBmb3VuZAorICogbWNlCQk6IE1lZGlhIENoYW5nZSBFdmVudAorICogZWNjCQk6IFVuY29ycmVjdGFibGUgRUNDIGVycm9yCisgKiBiZGQJCTogZHVhbCBtZWFpbmcKKyAqLwordHlwZWRlZiB1bmlvbiB7CisJdW5zaWduZWQgYWxsCQkJOjg7CisJc3RydWN0IHsKKyNpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTl9CSVRGSUVMRCkKKwkJdW5zaWduZWQgbWFyawkJOjE7CisJCXVuc2lnbmVkIHR6ZXJvCQk6MTsKKwkJdW5zaWduZWQgYWJydAkJOjE7CisJCXVuc2lnbmVkIG1jcgkJOjE7CisJCXVuc2lnbmVkIGlkCQk6MTsKKwkJdW5zaWduZWQgbWNlCQk6MTsKKwkJdW5zaWduZWQgZWNjCQk6MTsKKwkJdW5zaWduZWQgYmRkCQk6MTsKKyNlbGlmIGRlZmluZWQoX19CSUdfRU5ESUFOX0JJVEZJRUxEKQorCQl1bnNpZ25lZCBiZGQJCToxOworCQl1bnNpZ25lZCBlY2MJCToxOworCQl1bnNpZ25lZCBtY2UJCToxOworCQl1bnNpZ25lZCBpZAkJOjE7CisJCXVuc2lnbmVkIG1jcgkJOjE7CisJCXVuc2lnbmVkIGFicnQJCToxOworCQl1bnNpZ25lZCB0emVybwkJOjE7CisJCXVuc2lnbmVkIG1hcmsJCToxOworI2Vsc2UKKyNlcnJvciAiUGxlYXNlIGZpeCA8YXNtL2J5dGVvcmRlci5oPiIKKyNlbmRpZgorCX0gYjsKK30gYXRhX2Vycm9yX3Q7CisKKy8qCisgKiBBVEEtSURFIFNlbGVjdCBSZWdpc3RlciwgYWthIERldmljZS1IZWFkCisgKgorICogaGVhZAkJOiBhbHdheXMgemVyb3MgaGVyZQorICogdW5pdAkJOiBkcml2ZSBzZWxlY3QgbnVtYmVyOiAwLzEKKyAqIGJpdDUJCTogYWx3YXlzIDEKKyAqIGxiYQkJOiB1c2luZyBMQkEgaW5zdGVhZCBvZiBDSFMKKyAqIGJpdDcJCTogYWx3YXlzIDEKKyAqLwordHlwZWRlZiB1bmlvbiB7CisJdW5zaWduZWQgYWxsCQkJOiA4OworCXN0cnVjdCB7CisjaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fQklURklFTEQpCisJCXVuc2lnbmVkIGhlYWQJCTogNDsKKwkJdW5zaWduZWQgdW5pdAkJOiAxOworCQl1bnNpZ25lZCBiaXQ1CQk6IDE7CisJCXVuc2lnbmVkIGxiYQkJOiAxOworCQl1bnNpZ25lZCBiaXQ3CQk6IDE7CisjZWxpZiBkZWZpbmVkKF9fQklHX0VORElBTl9CSVRGSUVMRCkKKwkJdW5zaWduZWQgYml0NwkJOiAxOworCQl1bnNpZ25lZCBsYmEJCTogMTsKKwkJdW5zaWduZWQgYml0NQkJOiAxOworCQl1bnNpZ25lZCB1bml0CQk6IDE7CisJCXVuc2lnbmVkIGhlYWQJCTogNDsKKyNlbHNlCisjZXJyb3IgIlBsZWFzZSBmaXggPGFzbS9ieXRlb3JkZXIuaD4iCisjZW5kaWYKKwl9IGI7Cit9IHNlbGVjdF90LCBhdGFfc2VsZWN0X3Q7CisKKy8qCisgKiBUaGUgQVRBLUlERSBTdGF0dXMgUmVnaXN0ZXIuCisgKiBUaGUgQVRBUEkgU3RhdHVzIFJlZ2lzdGVyLgorICoKKyAqIGNoZWNrCTogRXJyb3Igb2NjdXJyZWQKKyAqIGlkeAkJOiBJbmRleCBFcnJvcgorICogY29ycgkJOiBDb3JyZWN0YWJsZSBlcnJvciBvY2N1cnJlZAorICogZHJxCQk6IERhdGEgaXMgcmVxdWVzdCBieSB0aGUgZGV2aWNlCisgKiBkc2MJCTogRGlzayBTZWVrIENvbXBsZXRlCQkJOiBhdGEKKyAqCQk6IE1lZGlhIGFjY2VzcyBjb21tYW5kIGZpbmlzaGVkCQk6IGF0YXBpCisgKiBkZgkJOiBEZXZpY2UgRmF1bHQJCQkJOiBhdGEKKyAqCQk6IFJlc2VydmVkCQkJCTogYXRhcGkKKyAqIGRyZHkJCTogUmVhZHksIENvbW1hbmQgTW9kZSBDYXBhYmxlCQk6IGF0YQorICoJCTogSWdub3JlZCBmb3IgQVRBUEkgY29tbWFuZHMJCTogYXRhcGkKKyAqIGJzeQkJOiBEaXNrIGlzIEJ1c3kKKyAqCQk6IFRoZSBkZXZpY2UgaGFzIGFjY2VzcyB0byB0aGUgY29tbWFuZCBibG9jaworICovCit0eXBlZGVmIHVuaW9uIHsKKwl1bnNpZ25lZCBhbGwJCQk6ODsKKwlzdHJ1Y3QgeworI2lmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEKQorCQl1bnNpZ25lZCBjaGVjawkJOjE7CisJCXVuc2lnbmVkIGlkeAkJOjE7CisJCXVuc2lnbmVkIGNvcnIJCToxOworCQl1bnNpZ25lZCBkcnEJCToxOworCQl1bnNpZ25lZCBkc2MJCToxOworCQl1bnNpZ25lZCBkZgkJOjE7CisJCXVuc2lnbmVkIGRyZHkJCToxOworCQl1bnNpZ25lZCBic3kJCToxOworI2VsaWYgZGVmaW5lZChfX0JJR19FTkRJQU5fQklURklFTEQpCisJCXVuc2lnbmVkIGJzeQkJOjE7CisJCXVuc2lnbmVkIGRyZHkJCToxOworCQl1bnNpZ25lZCBkZgkJOjE7CisJCXVuc2lnbmVkIGRzYwkJOjE7CisJCXVuc2lnbmVkIGRycQkJOjE7CisJCXVuc2lnbmVkIGNvcnIgICAgICAgICAgIDoxOworCQl1bnNpZ25lZCBpZHgJCToxOworCQl1bnNpZ25lZCBjaGVjawkJOjE7CisjZWxzZQorI2Vycm9yICJQbGVhc2UgZml4IDxhc20vYnl0ZW9yZGVyLmg+IgorI2VuZGlmCisJfSBiOworfSBhdGFfc3RhdHVzX3QsIGF0YXBpX3N0YXR1c190OworCisvKgorICogQVRBLUlERSBDb250cm9sIFJlZ2lzdGVyCisgKgorICogYml0MAkJOiBTaG91bGQgYmUgc2V0IHRvIHplcm8KKyAqIG5JRU4JCTogZGV2aWNlIElOVFJRIHRvIGhvc3QKKyAqIFNSU1QJCTogaG9zdCBzb2Z0IHJlc2V0IGJpdAorICogYml0MwkJOiBBVEEtMiB0aGluZ3ksIFNob3VsZCBiZSBzZXQgdG8gMQorICogcmVzZXJ2ZWQ0NTYJOiBSZXNlcnZlZAorICogSE9CCQk6IDQ4LWJpdCBhZGRyZXNzIG9yZGVyaW5nLCBIaWdoIE9yZGVyZWQgQml0CisgKi8KK3R5cGVkZWYgdW5pb24geworCXVuc2lnbmVkIGFsbAkJCTogODsKKwlzdHJ1Y3QgeworI2lmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEKQorCQl1bnNpZ25lZCBiaXQwCQk6IDE7CisJCXVuc2lnbmVkIG5JRU4JCTogMTsKKwkJdW5zaWduZWQgU1JTVAkJOiAxOworCQl1bnNpZ25lZCBiaXQzCQk6IDE7CisJCXVuc2lnbmVkIHJlc2VydmVkNDU2CTogMzsKKwkJdW5zaWduZWQgSE9CCQk6IDE7CisjZWxpZiBkZWZpbmVkKF9fQklHX0VORElBTl9CSVRGSUVMRCkKKwkJdW5zaWduZWQgSE9CCQk6IDE7CisJCXVuc2lnbmVkIHJlc2VydmVkNDU2CTogMzsKKwkJdW5zaWduZWQgYml0MwkJOiAxOworCQl1bnNpZ25lZCBTUlNUCQk6IDE7CisJCXVuc2lnbmVkIG5JRU4JCTogMTsKKwkJdW5zaWduZWQgYml0MAkJOiAxOworI2Vsc2UKKyNlcnJvciAiUGxlYXNlIGZpeCA8YXNtL2J5dGVvcmRlci5oPiIKKyNlbmRpZgorCX0gYjsKK30gYXRhX2NvbnRyb2xfdDsKKworLyoKKyAqIEFUQVBJIEZlYXR1cmUgUmVnaXN0ZXIKKyAqCisgKiBkbWEJCTogVXNpbmcgRE1BIG9yIFBJTworICogcmVzZXJ2ZWQzMjEJOiBSZXNlcnZlZAorICogcmVzZXJ2ZWQ2NTQJOiBSZXNlcnZlZCAoVGFnIFR5cGUpCisgKiByZXNlcnZlZDcJOiBSZXNlcnZlZAorICovCit0eXBlZGVmIHVuaW9uIHsKKwl1bnNpZ25lZCBhbGwJCQk6ODsKKwlzdHJ1Y3QgeworI2lmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEKQorCQl1bnNpZ25lZCBkbWEJCToxOworCQl1bnNpZ25lZCByZXNlcnZlZDMyMQk6MzsKKwkJdW5zaWduZWQgcmVzZXJ2ZWQ2NTQJOjM7CisJCXVuc2lnbmVkIHJlc2VydmVkNwk6MTsKKyNlbGlmIGRlZmluZWQoX19CSUdfRU5ESUFOX0JJVEZJRUxEKQorCQl1bnNpZ25lZCByZXNlcnZlZDcJOjE7CisJCXVuc2lnbmVkIHJlc2VydmVkNjU0CTozOworCQl1bnNpZ25lZCByZXNlcnZlZDMyMQk6MzsKKwkJdW5zaWduZWQgZG1hCQk6MTsKKyNlbHNlCisjZXJyb3IgIlBsZWFzZSBmaXggPGFzbS9ieXRlb3JkZXIuaD4iCisjZW5kaWYKKwl9IGI7Cit9IGF0YXBpX2ZlYXR1cmVfdDsKKworLyoKKyAqIEFUQVBJIEludGVycnVwdCBSZWFzb24gUmVnaXN0ZXIuCisgKgorICogY29kCQk6IEluZm9ybWF0aW9uIHRyYW5zZmVycmVkIGlzIGNvbW1hbmQgKDEpIG9yIGRhdGEgKDApCisgKiBpbwkJOiBUaGUgZGV2aWNlIHJlcXVlc3RzIHVzIHRvIHJlYWQgKDEpIG9yIHdyaXRlICgwKQorICogcmVzZXJ2ZWQJOiBSZXNlcnZlZAorICovCit0eXBlZGVmIHVuaW9uIHsKKwl1bnNpZ25lZCBhbGwJCQk6ODsKKwlzdHJ1Y3QgeworI2lmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEKQorCQl1bnNpZ25lZCBjb2QJCToxOworCQl1bnNpZ25lZCBpbwkJOjE7CisJCXVuc2lnbmVkIHJlc2VydmVkCTo2OworI2VsaWYgZGVmaW5lZChfX0JJR19FTkRJQU5fQklURklFTEQpCisJCXVuc2lnbmVkIHJlc2VydmVkCTo2OworCQl1bnNpZ25lZCBpbwkJOjE7CisJCXVuc2lnbmVkIGNvZAkJOjE7CisjZWxzZQorI2Vycm9yICJQbGVhc2UgZml4IDxhc20vYnl0ZW9yZGVyLmg+IgorI2VuZGlmCisJfSBiOworfSBhdGFwaV9pcmVhc29uX3Q7CisKKy8qCisgKiBUaGUgQVRBUEkgZXJyb3IgcmVnaXN0ZXIuCisgKgorICogaWxpCQk6IElsbGVnYWwgTGVuZ3RoIEluZGljYXRpb24KKyAqIGVvbQkJOiBFbmQgT2YgTWVkaWEgRGV0ZWN0ZWQKKyAqIGFicnQJCTogQWJvcnRlZCBjb21tYW5kIC0gQXMgZGVmaW5lZCBieSBBVEEKKyAqIG1jcgkJOiBNZWRpYSBDaGFuZ2UgUmVxdWVzdGVkIC0gQXMgZGVmaW5lZCBieSBBVEEKKyAqIHNlbnNlX2tleQk6IFNlbnNlIGtleSBvZiB0aGUgbGFzdCBmYWlsZWQgcGFja2V0IGNvbW1hbmQKKyAqLwordHlwZWRlZiB1bmlvbiB7CisJdW5zaWduZWQgYWxsCQkJOjg7CisJc3RydWN0IHsKKyNpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTl9CSVRGSUVMRCkKKwkJdW5zaWduZWQgaWxpCQk6MTsKKwkJdW5zaWduZWQgZW9tCQk6MTsKKwkJdW5zaWduZWQgYWJydAkJOjE7CisJCXVuc2lnbmVkIG1jcgkJOjE7CisJCXVuc2lnbmVkIHNlbnNlX2tleQk6NDsKKyNlbGlmIGRlZmluZWQoX19CSUdfRU5ESUFOX0JJVEZJRUxEKQorCQl1bnNpZ25lZCBzZW5zZV9rZXkJOjQ7CisJCXVuc2lnbmVkIG1jcgkJOjE7CisJCXVuc2lnbmVkIGFicnQJCToxOworCQl1bnNpZ25lZCBlb20JCToxOworCQl1bnNpZ25lZCBpbGkJCToxOworI2Vsc2UKKyNlcnJvciAiUGxlYXNlIGZpeCA8YXNtL2J5dGVvcmRlci5oPiIKKyNlbmRpZgorCX0gYjsKK30gYXRhcGlfZXJyb3JfdDsKKworLyoKKyAqIEFUQVBJIGZsb3BweSBEcml2ZSBTZWxlY3QgUmVnaXN0ZXIKKyAqCisgKiBzYW1fbHVuCTogTG9naWNhbCB1bml0IG51bWJlcgorICogcmVzZXJ2ZWQzCTogUmVzZXJ2ZWQKKyAqIGRydgkJOiBUaGUgcmVzcG9uZGluZyBkcml2ZSB3aWxsIGJlIGRyaXZlIDAgKDApIG9yIGRyaXZlIDEgKDEpCisgKiBvbmU1CQk6IFNob3VsZCBiZSBzZXQgdG8gMQorICogcmVzZXJ2ZWQ2CTogUmVzZXJ2ZWQKKyAqIG9uZTcJCTogU2hvdWxkIGJlIHNldCB0byAxCisgKi8KK3R5cGVkZWYgdW5pb24geworCXVuc2lnbmVkIGFsbAkJCTo4OworCXN0cnVjdCB7CisjaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fQklURklFTEQpCisJCXVuc2lnbmVkIHNhbV9sdW4JOjM7CisJCXVuc2lnbmVkIHJlc2VydmVkMwk6MTsKKwkJdW5zaWduZWQgZHJ2CQk6MTsKKwkJdW5zaWduZWQgb25lNQkJOjE7CisJCXVuc2lnbmVkIHJlc2VydmVkNgk6MTsKKwkJdW5zaWduZWQgb25lNwkJOjE7CisjZWxpZiBkZWZpbmVkKF9fQklHX0VORElBTl9CSVRGSUVMRCkKKwkJdW5zaWduZWQgb25lNwkJOjE7CisJCXVuc2lnbmVkIHJlc2VydmVkNgk6MTsKKwkJdW5zaWduZWQgb25lNQkJOjE7CisJCXVuc2lnbmVkIGRydgkJOjE7CisJCXVuc2lnbmVkIHJlc2VydmVkMwk6MTsKKwkJdW5zaWduZWQgc2FtX2x1bgk6MzsKKyNlbHNlCisjZXJyb3IgIlBsZWFzZSBmaXggPGFzbS9ieXRlb3JkZXIuaD4iCisjZW5kaWYKKwl9IGI7Cit9IGF0YXBpX3NlbGVjdF90OworCisvKgorICogU3RhdHVzIHJldHVybmVkIGZyb20gdmFyaW91cyBpZGVfIGZ1bmN0aW9ucworICovCit0eXBlZGVmIGVudW0geworCWlkZV9zdG9wcGVkLAkvKiBubyBkcml2ZSBvcGVyYXRpb24gd2FzIHN0YXJ0ZWQgKi8KKwlpZGVfc3RhcnRlZCwJLyogYSBkcml2ZSBvcGVyYXRpb24gd2FzIHN0YXJ0ZWQsIGhhbmRsZXIgd2FzIHNldCAqLworfSBpZGVfc3RhcnRzdG9wX3Q7CisKK3N0cnVjdCBpZGVfZHJpdmVyX3M7CitzdHJ1Y3QgaWRlX3NldHRpbmdzX3M7CisKK3R5cGVkZWYgc3RydWN0IGlkZV9kcml2ZV9zIHsKKwljaGFyCQluYW1lWzRdOwkvKiBkcml2ZSBuYW1lLCBzdWNoIGFzICJoZGEiICovCisgICAgICAgIGNoYXIgICAgICAgICAgICBkcml2ZXJfcmVxWzEwXTsJLyogcmVxdWVzdHMgc3BlY2lmaWMgZHJpdmVyICovCisKKwlyZXF1ZXN0X3F1ZXVlX3QJCSpxdWV1ZTsJLyogcmVxdWVzdCBxdWV1ZSAqLworCisJc3RydWN0IHJlcXVlc3QJCSpycTsJLyogY3VycmVudCByZXF1ZXN0ICovCisJc3RydWN0IGlkZV9kcml2ZV9zIAkqbmV4dDsJLyogY2lyY3VsYXIgbGlzdCBvZiBod2dyb3VwIGRyaXZlcyAqLworCXN0cnVjdCBpZGVfZHJpdmVyX3MJKmRyaXZlcjsvKiAoaWRlX2RyaXZlcl90ICopICovCisJdm9pZAkJKmRyaXZlcl9kYXRhOwkvKiBleHRyYSBkcml2ZXIgZGF0YSAqLworCXN0cnVjdCBoZF9kcml2ZWlkCSppZDsJLyogZHJpdmUgbW9kZWwgaWRlbnRpZmljYXRpb24gaW5mbyAqLworCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvYzsJLyogL3Byb2MvaWRlLyBkaXJlY3RvcnkgZW50cnkgKi8KKwlzdHJ1Y3QgaWRlX3NldHRpbmdzX3MgKnNldHRpbmdzOy8qIC9wcm9jL2lkZS8gZHJpdmUgc2V0dGluZ3MgKi8KKwljaGFyCQlkZXZmc19uYW1lWzY0XTsJLyogZGV2ZnMgY3JhcCAqLworCisJc3RydWN0IGh3aWZfcwkJKmh3aWY7CS8qIGFjdHVhbGx5IChpZGVfaHdpZl90ICopICovCisKKwl1bnNpZ25lZCBsb25nIHNsZWVwOwkJLyogc2xlZXAgdW50aWwgdGhpcyB0aW1lICovCisJdW5zaWduZWQgbG9uZyBzZXJ2aWNlX3N0YXJ0OwkvKiB0aW1lIHdlIHN0YXJ0ZWQgbGFzdCByZXF1ZXN0ICovCisJdW5zaWduZWQgbG9uZyBzZXJ2aWNlX3RpbWU7CS8qIHNlcnZpY2UgdGltZSBvZiBsYXN0IHJlcXVlc3QgKi8KKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CQkvKiBtYXggdGltZSB0byB3YWl0IGZvciBpcnEgKi8KKworCXNwZWNpYWxfdAlzcGVjaWFsOwkvKiBzcGVjaWFsIGFjdGlvbiBmbGFncyAqLworCXNlbGVjdF90CXNlbGVjdDsJCS8qIGJhc2ljIGRyaXZlL2hlYWQgc2VsZWN0IHJlZyB2YWx1ZSAqLworCisJdTgJa2VlcF9zZXR0aW5nczsJCS8qIHJlc3RvcmUgc2V0dGluZ3MgYWZ0ZXIgZHJpdmUgcmVzZXQgKi8KKwl1OAlhdXRvZG1hOwkJLyogZGV2aWNlIGNhbiBzYWZlbHkgdXNlIGRtYSBvbiBob3N0ICovCisJdTgJdXNpbmdfZG1hOwkJLyogZGlzayBpcyB1c2luZyBkbWEgZm9yIHJlYWQvd3JpdGUgKi8KKwl1OAlyZXRyeV9waW87CQkvKiByZXRyeWluZyBkbWEgY2FwYWJsZSBob3N0IGluIHBpbyAqLworCXU4CXN0YXRlOwkJCS8qIHJldHJ5IHN0YXRlICovCisJdTgJd2FpdGluZ19mb3JfZG1hOwkvKiBkbWEgY3VycmVudGx5IGluIHByb2dyZXNzICovCisJdTgJdW5tYXNrOwkJCS8qIG9rYXkgdG8gdW5tYXNrIG90aGVyIGlycXMgKi8KKwl1OAlic3dhcDsJCQkvKiBieXRlIHN3YXAgZGF0YSAqLworCXU4CWRzY19vdmVybGFwOwkJLyogRFNDIG92ZXJsYXAgKi8KKwl1OAluaWNlMTsJCQkvKiBnaXZlIHBvdGVudGlhbCBleGNlc3MgYmFuZHdpZHRoICovCisKKwl1bnNpZ25lZCBwcmVzZW50CTogMTsJLyogZHJpdmUgaXMgcGh5c2ljYWxseSBwcmVzZW50ICovCisJdW5zaWduZWQgZGVhZAkJOiAxOwkvKiBkZXZpY2UgZWplY3RlZCBoaW50ICovCisJdW5zaWduZWQgaWRfcmVhZAk6IDE7CS8qIDE9aWQgcmVhZCBmcm9tIGRpc2sgMCA9IHN5bnRoZXRpYyAqLworCXVuc2lnbmVkIG5vcHJvYmUgCTogMTsJLyogZnJvbTogIGhkeD1ub3Byb2JlICovCisJdW5zaWduZWQgcmVtb3ZhYmxlCTogMTsJLyogMSBpZiBuZWVkIHRvIGRvIGNoZWNrX21lZGlhX2NoYW5nZSAqLworCXVuc2lnbmVkIGF0dGFjaAkJOiAxOwkvKiBuZWVkZWQgZm9yIHJlbW92YWJsZSBkZXZpY2VzICovCisJdW5zaWduZWQgaXNfZmxhc2gJOiAxOwkvKiAxIGlmIHByb2JlZCBhcyBmbGFzaCAqLworCXVuc2lnbmVkIGZvcmNlZF9nZW9tCTogMTsJLyogMSBpZiBoZHg9YyxoLHMgd2FzIGdpdmVuIGF0IGJvb3QgKi8KKwl1bnNpZ25lZCBub191bm1hc2sJOiAxOwkvKiBkaXNhbGxvdyBzZXR0aW5nIHVubWFzayBiaXQgKi8KKwl1bnNpZ25lZCBub19pb18zMmJpdAk6IDE7CS8qIGRpc2FsbG93IGVuYWJsaW5nIDMyYml0IEkvTyAqLworCXVuc2lnbmVkIGF0YXBpX292ZXJsYXAJOiAxOwkvKiBBVEFQSSBvdmVybGFwIChub3Qgc3VwcG9ydGVkKSAqLworCXVuc2lnbmVkIG5pY2UwCQk6IDE7CS8qIGdpdmUgb2J2aW91cyBleGNlc3MgYmFuZHdpZHRoICovCisJdW5zaWduZWQgbmljZTIJCTogMTsJLyogZ2l2ZSBhIHNoYXJlIGluIG91ciBvd24gYmFuZHdpZHRoICovCisJdW5zaWduZWQgZG9vcmxvY2tpbmcJOiAxOwkvKiBmb3IgcmVtb3ZhYmxlIG9ubHk6IGRvb3IgbG9jay91bmxvY2sgd29ya3MgKi8KKwl1bnNpZ25lZCBhdXRvdHVuZQk6IDI7CS8qIDA9ZGVmYXVsdCwgMT1hdXRvdHVuZSwgMj1ub2F1dG90dW5lICovCisJdW5zaWduZWQgcmVtYXBfMF90b18xCTogMTsJLyogMD1ub3JlbWFwLCAxPXJlbWFwIDAtPjEgKGZvciBFWkRyaXZlKSAqLworCXVuc2lnbmVkIGJsb2NrZWQgICAgICAgIDogMTsJLyogMT1wb3dlcm1hbmFnbWVudCB0b2xkIHVzIG5vdCB0byBkbyBhbnl0aGluZywgc28gc2xlZXAgbmljZWx5ICovCisJdW5zaWduZWQgdmRtYQkJOiAxOwkvKiAxPWRvaW5nIFBJTyBvdmVyIERNQSAwPWRvaW5nIG5vcm1hbCBETUEgKi8KKwl1bnNpZ25lZCBhZGRyZXNzaW5nOwkJLyogICAgICA6IDM7CisJCQkJCSAqICAwPTI4LWJpdAorCQkJCQkgKiAgMT00OC1iaXQKKwkJCQkJICogIDI9NDgtYml0IGRvaW5nIDI4LWJpdAorCQkJCQkgKiAgMz02NC1iaXQKKwkJCQkJICovCisJdW5zaWduZWQgc2NzaQkJOiAxOwkvKiAwPWRlZmF1bHQsIDE9aWRlLXNjc2kgZW11bGF0aW9uICovCisJdW5zaWduZWQgc2xlZXBpbmcJOiAxOwkvKiAxPXNsZWVwaW5nICYgc2xlZXAgZmllbGQgdmFsaWQgKi8KKwl1bnNpZ25lZCBwb3N0X3Jlc2V0CTogMTsKKworICAgICAgICB1OAlxdWlya19saXN0OwkvKiBjb25zaWRlcmVkIHF1aXJreSwgc2V0IGZvciBhIHNwZWNpZmljIGhvc3QgKi8KKyAgICAgICAgdTgJaW5pdF9zcGVlZDsJLyogdHJhbnNmZXIgcmF0ZSBzZXQgYXQgYm9vdCAqLworICAgICAgICB1OAlwaW9fc3BlZWQ7ICAgICAgLyogdW51c2VkIGJ5IGNvcmUsIHVzZWQgYnkgc29tZSBkcml2ZXJzIGZvciBmYWxsYmFjayBmcm9tIERNQSAqLworICAgICAgICB1OAljdXJyZW50X3NwZWVkOwkvKiBjdXJyZW50IHRyYW5zZmVyIHJhdGUgc2V0ICovCisgICAgICAgIHU4CWRuOwkJLyogbm93IHdpZGUgc3ByZWFkIHVzZSAqLworICAgICAgICB1OAl3Y2FjaGU7CQkvKiBzdGF0dXMgb2Ygd3JpdGUgY2FjaGUgKi8KKwl1OAlhY291c3RpYzsJLyogYWNvdXN0aWMgbWFuYWdlbWVudCAqLworCXU4CW1lZGlhOwkJLyogZGlzaywgY2Ryb20sIHRhcGUsIGZsb3BweSwgLi4uICovCisJdTgJY3RsOwkJLyogIm5vcm1hbCIgdmFsdWUgZm9yIElERV9DT05UUk9MX1JFRyAqLworCXU4CXJlYWR5X3N0YXQ7CS8qIG1pbiBzdGF0dXMgdmFsdWUgZm9yIGRyaXZlIHJlYWR5ICovCisJdTgJbXVsdF9jb3VudDsJLyogY3VycmVudCBtdWx0aXBsZSBzZWN0b3Igc2V0dGluZyAqLworCXU4CW11bHRfcmVxOwkvKiByZXF1ZXN0ZWQgbXVsdGlwbGUgc2VjdG9yIHNldHRpbmcgKi8KKwl1OAl0dW5lX3JlcTsJLyogcmVxdWVzdGVkIGRyaXZlIHR1bmluZyBzZXR0aW5nICovCisJdTgJaW9fMzJiaXQ7CS8qIDA9MTYtYml0LCAxPTMyLWJpdCwgMi8zPTMyYml0K3N5bmMgKi8KKwl1OAliYWRfd3N0YXQ7CS8qIHVzZWQgZm9yIGlnbm9yaW5nIFdSRVJSX1NUQVQgKi8KKwl1OAlub3dlcnI7CQkvKiB1c2VkIGZvciBpZ25vcmluZyBXUkVSUl9TVEFUICovCisJdTgJc2VjdDA7CQkvKiBvZmZzZXQgb2YgZmlyc3Qgc2VjdG9yIGZvciBETTY6RERPICovCisJdTgJaGVhZDsJCS8qICJyZWFsIiBudW1iZXIgb2YgaGVhZHMgKi8KKwl1OAlzZWN0OwkJLyogInJlYWwiIHNlY3RvcnMgcGVyIHRyYWNrICovCisJdTgJYmlvc19oZWFkOwkvKiBCSU9TL2ZkaXNrL0xJTE8gbnVtYmVyIG9mIGhlYWRzICovCisJdTgJYmlvc19zZWN0OwkvKiBCSU9TL2ZkaXNrL0xJTE8gc2VjdG9ycyBwZXIgdHJhY2sgKi8KKworCXVuc2lnbmVkIGludAliaW9zX2N5bDsJLyogQklPUy9mZGlzay9MSUxPIG51bWJlciBvZiBjeWxzICovCisJdW5zaWduZWQgaW50CWN5bDsJCS8qICJyZWFsIiBudW1iZXIgb2YgY3lscyAqLworCXVuc2lnbmVkIGludAlkcml2ZV9kYXRhOwkvKiB1c2UgYnkgdHVuZXByb2Mvc2VsZWN0cHJvYyAqLworCXVuc2lnbmVkIGludAl1c2FnZTsJCS8qIGN1cnJlbnQgIm9wZW4oKSIgY291bnQgZm9yIGRyaXZlICovCisJdW5zaWduZWQgaW50CWZhaWx1cmVzOwkvKiBjdXJyZW50IGZhaWx1cmUgY291bnQgKi8KKwl1bnNpZ25lZCBpbnQJbWF4X2ZhaWx1cmVzOwkvKiBtYXhpbXVtIGFsbG93ZWQgZmFpbHVyZSBjb3VudCAqLworCisJdTY0CQljYXBhY2l0eTY0OwkvKiB0b3RhbCBudW1iZXIgb2Ygc2VjdG9ycyAqLworCisJaW50CQlsdW47CQkvKiBsb2dpY2FsIHVuaXQgKi8KKwlpbnQJCWNyY19jb3VudDsJLyogY3JjIGNvdW50ZXIgdG8gcmVkdWNlIGRyaXZlIHNwZWVkICovCisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCBkZXZpY2UJZ2VuZGV2OworCXN0cnVjdCBzZW1hcGhvcmUgZ2VuZGV2X3JlbF9zZW07CS8qIHRvIGRlYWwgd2l0aCBkZXZpY2UgcmVsZWFzZSgpICovCit9IGlkZV9kcml2ZV90OworCisjZGVmaW5lIElERV9DSElQU0VUX1BDSV9NQVNLCVwKKyAgICAoKDE8PGlkZV9wY2kpfCgxPDxpZGVfY21kNjQ2KXwoMTw8aWRlX2FsaTE0eHgpKQorI2RlZmluZSBJREVfQ0hJUFNFVF9JU19QQ0koYykJKChJREVfQ0hJUFNFVF9QQ0lfTUFTSyA+PiAoYykpICYgMSkKKworc3RydWN0IGlkZV9wY2lfZGV2aWNlX3M7CisKK3R5cGVkZWYgc3RydWN0IGh3aWZfcyB7CisJc3RydWN0IGh3aWZfcyAqbmV4dDsJCS8qIGZvciBsaW5rZWQtbGlzdCBpbiBpZGVfaHdncm91cF90ICovCisJc3RydWN0IGh3aWZfcyAqbWF0ZTsJCS8qIG90aGVyIGh3aWYgZnJvbSBzYW1lIFBDSSBjaGlwICovCisJc3RydWN0IGh3Z3JvdXBfcyAqaHdncm91cDsJLyogYWN0dWFsbHkgKGlkZV9od2dyb3VwX3QgKikgKi8KKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2M7CS8qIC9wcm9jL2lkZS8gZGlyZWN0b3J5IGVudHJ5ICovCisKKwljaGFyIG5hbWVbNl07CQkJLyogbmFtZSBvZiBpbnRlcmZhY2UsIGVnLiAiaWRlMCIgKi8KKworCQkvKiB0YXNrIGZpbGUgcmVnaXN0ZXJzIGZvciBwYXRhIGFuZCBzYXRhICovCisJdW5zaWduZWQgbG9uZwlpb19wb3J0c1tJREVfTlJfUE9SVFNdOworCXVuc2lnbmVkIGxvbmcJc2F0YV9zY3JbU0FUQV9OUl9QT1JUU107CisJdW5zaWduZWQgbG9uZwlzYXRhX21pc2NbU0FUQV9OUl9QT1JUU107CisKKwlod19yZWdzX3QJaHc7CQkvKiBIYXJkd2FyZSBpbmZvICovCisJaWRlX2RyaXZlX3QJZHJpdmVzW01BWF9EUklWRVNdOwkvKiBkcml2ZSBpbmZvICovCisKKwl1OCBtYWpvcjsJLyogb3VyIG1ham9yIG51bWJlciAqLworCXU4IGluZGV4OwkvKiAwIGZvciBpZGUwOyAxIGZvciBpZGUxOyAuLi4gKi8KKwl1OCBjaGFubmVsOwkvKiBmb3IgZHVhbC1wb3J0IGNoaXBzOiAwPXByaW1hcnksIDE9c2Vjb25kYXJ5ICovCisJdTggc3RyYWlnaHQ4OwkvKiBBbGFuJ3Mgc3RyYWlnaHQgOCBjaGVjayAqLworCXU4IGJ1c19zdGF0ZTsJLyogcG93ZXIgc3RhdGUgb2YgdGhlIElERSBidXMgKi8KKworCXU4IGF0YXBpX2RtYTsJLyogaG9zdCBzdXBwb3J0cyBhdGFwaV9kbWEgKi8KKwl1OCB1bHRyYV9tYXNrOworCXU4IG13ZG1hX21hc2s7CisJdTggc3dkbWFfbWFzazsKKworCWh3aWZfY2hpcHNldF90IGNoaXBzZXQ7CS8qIHN1Yi1tb2R1bGUgZm9yIHR1bmluZy4uICovCisKKwlzdHJ1Y3QgcGNpX2RldiAgKnBjaV9kZXY7CS8qIGZvciBwY2kgY2hpcHNldHMgKi8KKwlzdHJ1Y3QgaWRlX3BjaV9kZXZpY2VfcwkqY2RzOwkvKiBjaGlwc2V0IGRldmljZSBzdHJ1Y3QgKi8KKworCXZvaWQgKCpyd19kaXNrKShpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKKworI2lmIDAKKwlpZGVfaHdpZl9vcHNfdAkqaHdpZm9wczsKKyNlbHNlCisJLyogcm91dGluZSB0byB0dW5lIFBJTyBtb2RlIGZvciBkcml2ZXMgKi8KKwl2b2lkCSgqdHVuZXByb2MpKGlkZV9kcml2ZV90ICosIHU4KTsKKwkvKiByb3V0aW5lIHRvIHJldHVuZSBETUEgbW9kZXMgZm9yIGRyaXZlcyAqLworCWludAkoKnNwZWVkcHJvYykoaWRlX2RyaXZlX3QgKiwgdTgpOworCS8qIHR3ZWFrcyBoYXJkd2FyZSB0byBzZWxlY3QgZHJpdmUgKi8KKwl2b2lkCSgqc2VsZWN0cHJvYykoaWRlX2RyaXZlX3QgKik7CisJLyogY2hpcHNldCBwb2xsaW5nIGJhc2VkIG9uIGhiYSBzcGVjaWZpY3MgKi8KKwlpbnQJKCpyZXNldF9wb2xsKShpZGVfZHJpdmVfdCAqKTsKKwkvKiBjaGlwc2V0IHNwZWNpZmljIGNoYW5nZXMgdG8gZGVmYXVsdCBmb3IgZGV2aWNlLWhiYSByZXNldHMgKi8KKwl2b2lkCSgqcHJlX3Jlc2V0KShpZGVfZHJpdmVfdCAqKTsKKwkvKiByb3V0aW5lIHRvIHJlc2V0IGNvbnRyb2xsZXIgYWZ0ZXIgYSBkaXNrIHJlc2V0ICovCisJdm9pZAkoKnJlc2V0cHJvYykoaWRlX2RyaXZlX3QgKik7CisJLyogc3BlY2lhbCBpbnRlcnJ1cHQgaGFuZGxpbmcgZm9yIHNoYXJlZCBwY2kgaW50ZXJydXB0cyAqLworCXZvaWQJKCppbnRycHJvYykoaWRlX2RyaXZlX3QgKik7CisJLyogc3BlY2lhbCBob3N0IG1hc2tpbmcgZm9yIGRyaXZlIHNlbGVjdGlvbiAqLworCXZvaWQJKCptYXNrcHJvYykoaWRlX2RyaXZlX3QgKiwgaW50KTsKKwkvKiBjaGVjayBob3N0J3MgZHJpdmUgcXVpcmsgbGlzdCAqLworCWludAkoKnF1aXJrcHJvYykoaWRlX2RyaXZlX3QgKik7CisJLyogZHJpdmVyIHNvZnQtcG93ZXIgaW50ZXJmYWNlICovCisJaW50CSgqYnVzcHJvYykoaWRlX2RyaXZlX3QgKiwgaW50KTsKKy8vCS8qIGhvc3QgcmF0ZSBsaW1pdGVyICovCisvLwl1OAkoKnJhdGVtYXNrKShpZGVfZHJpdmVfdCAqKTsKKy8vCS8qIGRldmljZSByYXRlIGxpbWl0ZXIgKi8KKy8vCXU4CSgqcmF0ZWZpbHRlcikoaWRlX2RyaXZlX3QgKiwgdTgpOworI2VuZGlmCisKKwl2b2lkICgqYXRhX2lucHV0X2RhdGEpKGlkZV9kcml2ZV90ICosIHZvaWQgKiwgdTMyKTsKKwl2b2lkICgqYXRhX291dHB1dF9kYXRhKShpZGVfZHJpdmVfdCAqLCB2b2lkICosIHUzMik7CisKKwl2b2lkICgqYXRhcGlfaW5wdXRfYnl0ZXMpKGlkZV9kcml2ZV90ICosIHZvaWQgKiwgdTMyKTsKKwl2b2lkICgqYXRhcGlfb3V0cHV0X2J5dGVzKShpZGVfZHJpdmVfdCAqLCB2b2lkICosIHUzMik7CisKKwlpbnQgKCpkbWFfc2V0dXApKGlkZV9kcml2ZV90ICopOworCXZvaWQgKCpkbWFfZXhlY19jbWQpKGlkZV9kcml2ZV90ICosIHU4KTsKKwl2b2lkICgqZG1hX3N0YXJ0KShpZGVfZHJpdmVfdCAqKTsKKwlpbnQgKCppZGVfZG1hX2VuZCkoaWRlX2RyaXZlX3QgKmRyaXZlKTsKKwlpbnQgKCppZGVfZG1hX2NoZWNrKShpZGVfZHJpdmVfdCAqZHJpdmUpOworCWludCAoKmlkZV9kbWFfb24pKGlkZV9kcml2ZV90ICpkcml2ZSk7CisJaW50ICgqaWRlX2RtYV9vZmZfcXVpZXRseSkoaWRlX2RyaXZlX3QgKmRyaXZlKTsKKwlpbnQgKCppZGVfZG1hX3Rlc3RfaXJxKShpZGVfZHJpdmVfdCAqZHJpdmUpOworCWludCAoKmlkZV9kbWFfaG9zdF9vbikoaWRlX2RyaXZlX3QgKmRyaXZlKTsKKwlpbnQgKCppZGVfZG1hX2hvc3Rfb2ZmKShpZGVfZHJpdmVfdCAqZHJpdmUpOworCWludCAoKmlkZV9kbWFfbG9zdGlycSkoaWRlX2RyaXZlX3QgKmRyaXZlKTsKKwlpbnQgKCppZGVfZG1hX3RpbWVvdXQpKGlkZV9kcml2ZV90ICpkcml2ZSk7CisKKwl2b2lkICgqT1VUQikodTggYWRkciwgdW5zaWduZWQgbG9uZyBwb3J0KTsKKwl2b2lkICgqT1VUQlNZTkMpKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggYWRkciwgdW5zaWduZWQgbG9uZyBwb3J0KTsKKwl2b2lkICgqT1VUVykodTE2IGFkZHIsIHVuc2lnbmVkIGxvbmcgcG9ydCk7CisJdm9pZCAoKk9VVEwpKHUzMiBhZGRyLCB1bnNpZ25lZCBsb25nIHBvcnQpOworCXZvaWQgKCpPVVRTVykodW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICphZGRyLCB1MzIgY291bnQpOworCXZvaWQgKCpPVVRTTCkodW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICphZGRyLCB1MzIgY291bnQpOworCisJdTggICgqSU5CKSh1bnNpZ25lZCBsb25nIHBvcnQpOworCXUxNiAoKklOVykodW5zaWduZWQgbG9uZyBwb3J0KTsKKwl1MzIgKCpJTkwpKHVuc2lnbmVkIGxvbmcgcG9ydCk7CisJdm9pZCAoKklOU1cpKHVuc2lnbmVkIGxvbmcgcG9ydCwgdm9pZCAqYWRkciwgdTMyIGNvdW50KTsKKwl2b2lkICgqSU5TTCkodW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICphZGRyLCB1MzIgY291bnQpOworCisJLyogZG1hIHBoeXNpY2FsIHJlZ2lvbiBkZXNjcmlwdG9yIHRhYmxlIChjcHUgdmlldykgKi8KKwl1bnNpZ25lZCBpbnQJKmRtYXRhYmxlX2NwdTsKKwkvKiBkbWEgcGh5c2ljYWwgcmVnaW9uIGRlc2NyaXB0b3IgdGFibGUgKGRtYSB2aWV3KSAqLworCWRtYV9hZGRyX3QJZG1hdGFibGVfZG1hOworCS8qIFNjYXR0ZXItZ2F0aGVyIGxpc3QgdXNlZCB0byBidWlsZCB0aGUgYWJvdmUgKi8KKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnX3RhYmxlOworCWludCBzZ19tYXhfbmVudHM7CQkvKiBNYXhpbXVtIG51bWJlciBvZiBlbnRyaWVzIGluIGl0ICovCisJaW50IHNnX25lbnRzOwkJCS8qIEN1cnJlbnQgbnVtYmVyIG9mIGVudHJpZXMgaW4gaXQgKi8KKwlpbnQgc2dfZG1hX2RpcmVjdGlvbjsJCS8qIGRtYSB0cmFuc2ZlciBkaXJlY3Rpb24gKi8KKworCS8qIGRhdGEgcGhhc2Ugb2YgdGhlIGFjdGl2ZSBjb21tYW5kIChjdXJyZW50bHkgb25seSB2YWxpZCBmb3IgUElPL0RNQSkgKi8KKwlpbnQJCWRhdGFfcGhhc2U7CisKKwl1bnNpZ25lZCBpbnQgbnNlY3Q7CisJdW5zaWduZWQgaW50IG5sZWZ0OworCXVuc2lnbmVkIGludCBjdXJzZzsKKwl1bnNpZ25lZCBpbnQgY3Vyc2dfb2ZzOworCisJaW50CQltbWlvOwkJLyogaG9zdHMgaW9taW8gKDApIG9yIGN1c3RvbSAoMikgc2VsZWN0ICovCisJaW50CQlycXNpemU7CQkvKiBtYXggc2VjdG9ycyBwZXIgcmVxdWVzdCAqLworCWludAkJaXJxOwkJLyogb3VyIGlycSBudW1iZXIgKi8KKworCXVuc2lnbmVkIGxvbmcJZG1hX21hc3RlcjsJLyogcmVmZXJlbmNlIGJhc2UgYWRkciBkbWFiYXNlICovCisJdW5zaWduZWQgbG9uZwlkbWFfYmFzZTsJLyogYmFzZSBhZGRyIGZvciBkbWEgcG9ydHMgKi8KKwl1bnNpZ25lZCBsb25nCWRtYV9jb21tYW5kOwkvKiBkbWEgY29tbWFuZCByZWdpc3RlciAqLworCXVuc2lnbmVkIGxvbmcJZG1hX3ZlbmRvcjE7CS8qIGRtYSB2ZW5kb3IgMSByZWdpc3RlciAqLworCXVuc2lnbmVkIGxvbmcJZG1hX3N0YXR1czsJLyogZG1hIHN0YXR1cyByZWdpc3RlciAqLworCXVuc2lnbmVkIGxvbmcJZG1hX3ZlbmRvcjM7CS8qIGRtYSB2ZW5kb3IgMyByZWdpc3RlciAqLworCXVuc2lnbmVkIGxvbmcJZG1hX3ByZHRhYmxlOwkvKiBhY3R1YWwgcHJkIHRhYmxlIGFkZHJlc3MgKi8KKwl1bnNpZ25lZCBsb25nCWRtYV9iYXNlMjsJLyogZXh0ZW5kZWQgYmFzZSBhZGRyIGZvciBkbWEgcG9ydHMgKi8KKworCXVuc2lnbmVkCWRtYV9leHRyYTsJLyogZXh0cmEgYWRkciBmb3IgZG1hIHBvcnRzICovCisJdW5zaWduZWQgbG9uZwljb25maWdfZGF0YTsJLyogZm9yIHVzZSBieSBjaGlwc2V0LXNwZWNpZmljIGNvZGUgKi8KKwl1bnNpZ25lZCBsb25nCXNlbGVjdF9kYXRhOwkvKiBmb3IgdXNlIGJ5IGNoaXBzZXQtc3BlY2lmaWMgY29kZSAqLworCisJdW5zaWduZWQJbm9wcm9iZSAgICA6IDE7CS8qIGRvbid0IHByb2JlIGZvciB0aGlzIGludGVyZmFjZSAqLworCXVuc2lnbmVkCXByZXNlbnQgICAgOiAxOwkvKiB0aGlzIGludGVyZmFjZSBleGlzdHMgKi8KKwl1bnNpZ25lZAlob2xkICAgICAgIDogMTsgLyogdGhpcyBpbnRlcmZhY2UgaXMgYWx3YXlzIHByZXNlbnQgKi8KKwl1bnNpZ25lZAlzZXJpYWxpemVkIDogMTsJLyogc2VyaWFsaXplZCBhbGwgY2hhbm5lbCBvcGVyYXRpb24gKi8KKwl1bnNpZ25lZAlzaGFyaW5nX2lycTogMTsJLyogMSA9IHNoYXJpbmcgaXJxIHdpdGggYW5vdGhlciBod2lmICovCisJdW5zaWduZWQJcmVzZXQgICAgICA6IDE7CS8qIHJlc2V0IGFmdGVyIHByb2JlICovCisJdW5zaWduZWQJYXV0b2RtYSAgICA6IDE7CS8qIGF1dG8tYXR0ZW1wdCB1c2luZyBETUEgYXQgYm9vdCAqLworCXVuc2lnbmVkCXVkbWFfZm91ciAgOiAxOwkvKiAxPUFUQS02NiBjYXBhYmxlLCAwPWRlZmF1bHQgKi8KKwl1bnNpZ25lZAlub19sYmE0OCAgIDogMTsgLyogMSA9IGNhbm5vdCBkbyBMQkE0OCAqLworCXVuc2lnbmVkCW5vX2xiYTQ4X2RtYSA6IDE7IC8qIDEgPSBjYW5ub3QgZG8gTEJBNDggRE1BICovCisJdW5zaWduZWQJbm9fZHNjICAgICA6IDE7CS8qIDAgZGVmYXVsdCwgMSBkc2Nfb3ZlcmxhcCBkaXNhYmxlZCAqLworCXVuc2lnbmVkCWF1dG9fcG9sbCAgOiAxOyAvKiBzdXBwb3J0cyBub3AgYXV0by1wb2xsICovCisJdW5zaWduZWQJc2dfbWFwcGVkICA6IDE7CS8qIHNnX3RhYmxlIGFuZCBzZ19uZW50cyBhcmUgcmVhZHkgKi8KKworCXN0cnVjdCBkZXZpY2UJZ2VuZGV2OworCXN0cnVjdCBzZW1hcGhvcmUgZ2VuZGV2X3JlbF9zZW07IC8qIFRvIGRlYWwgd2l0aCBkZXZpY2UgcmVsZWFzZSgpICovCisKKwl2b2lkCQkqaHdpZl9kYXRhOwkvKiBleHRyYSBod2lmIGRhdGEgKi8KKworCXVuc2lnbmVkIGRtYTsKKworCXZvaWQgKCpsZWRfYWN0KSh2b2lkICpkYXRhLCBpbnQgcncpOworfSBpZGVfaHdpZl90OworCisvKgorICogIGludGVybmFsIGlkZSBpbnRlcnJ1cHQgaGFuZGxlciB0eXBlCisgKi8KK3R5cGVkZWYgaWRlX3N0YXJ0c3RvcF90IChpZGVfcHJlX2hhbmRsZXJfdCkoaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKik7Cit0eXBlZGVmIGlkZV9zdGFydHN0b3BfdCAoaWRlX2hhbmRsZXJfdCkoaWRlX2RyaXZlX3QgKik7Cit0eXBlZGVmIGludCAoaWRlX2V4cGlyeV90KShpZGVfZHJpdmVfdCAqKTsKKwordHlwZWRlZiBzdHJ1Y3QgaHdncm91cF9zIHsKKwkJLyogaXJxIGhhbmRsZXIsIGlmIGFjdGl2ZSAqLworCWlkZV9zdGFydHN0b3BfdAkoKmhhbmRsZXIpKGlkZV9kcml2ZV90ICopOworCQkvKiBpcnEgaGFuZGxlciwgc3VzcGVuZGVkIGlmIGFjdGl2ZSAqLworCWlkZV9zdGFydHN0b3BfdAkoKmhhbmRsZXJfc2F2ZSkoaWRlX2RyaXZlX3QgKik7CisJCS8qIEJPT0w6IHByb3RlY3RzIGFsbCBmaWVsZHMgYmVsb3cgKi8KKwl2b2xhdGlsZSBpbnQgYnVzeTsKKwkJLyogQk9PTDogd2FrZSB1cyB1cCBvbiB0aW1lciBleHBpcnkgKi8KKwl1bnNpZ25lZCBpbnQgc2xlZXBpbmcJOiAxOworCQkvKiBCT09MOiBwb2xsaW5nIGFjdGl2ZSAmIHBvbGxfdGltZW91dCBmaWVsZCB2YWxpZCAqLworCXVuc2lnbmVkIGludCBwb2xsaW5nCTogMTsKKwkJLyogY3VycmVudCBkcml2ZSAqLworCWlkZV9kcml2ZV90ICpkcml2ZTsKKwkJLyogcHRyIHRvIGN1cnJlbnQgaHdpZiBpbiBsaW5rZWQtbGlzdCAqLworCWlkZV9od2lmX3QgKmh3aWY7CisKKwkJLyogZm9yIHBjaSBjaGlwc2V0cyAqLworCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2OworCQkvKiBjaGlwc2V0IGRldmljZSBzdHJ1Y3QgKi8KKwlzdHJ1Y3QgaWRlX3BjaV9kZXZpY2VfcyAqY2RzOworCisJCS8qIGN1cnJlbnQgcmVxdWVzdCAqLworCXN0cnVjdCByZXF1ZXN0ICpycTsKKwkJLyogZmFpbHNhZmUgdGltZXIgKi8KKwlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKKwkJLyogbG9jYWwgY29weSBvZiBjdXJyZW50IHdyaXRlIHJxICovCisJc3RydWN0IHJlcXVlc3Qgd3JxOworCQkvKiB0aW1lb3V0IHZhbHVlIGR1cmluZyBsb25nIHBvbGxzICovCisJdW5zaWduZWQgbG9uZyBwb2xsX3RpbWVvdXQ7CisJCS8qIHF1ZXJpZWQgdXBvbiB0aW1lb3V0cyAqLworCWludCAoKmV4cGlyeSkoaWRlX2RyaXZlX3QgKik7CisJCS8qIGlkZV9zeXN0ZW1fYnVzX3NwZWVkICovCisJaW50IHBpb19jbG9jazsKKworCXVuc2lnbmVkIGNoYXIgY21kX2J1Zls0XTsKK30gaWRlX2h3Z3JvdXBfdDsKKworLyogc3RydWN0dXJlIGF0dGFjaGVkIHRvIHRoZSByZXF1ZXN0IGZvciBJREVfVEFTS19DTURTICovCisKKy8qCisgKiBjb25maWd1cmFibGUgZHJpdmUgc2V0dGluZ3MKKyAqLworCisjZGVmaW5lIFRZUEVfSU5UCTAKKyNkZWZpbmUgVFlQRV9JTlRBCTEKKyNkZWZpbmUgVFlQRV9CWVRFCTIKKyNkZWZpbmUgVFlQRV9TSE9SVAkzCisKKyNkZWZpbmUgU0VUVElOR19SRUFECSgxIDw8IDApCisjZGVmaW5lIFNFVFRJTkdfV1JJVEUJKDEgPDwgMSkKKyNkZWZpbmUgU0VUVElOR19SVwkoU0VUVElOR19SRUFEIHwgU0VUVElOR19XUklURSkKKwordHlwZWRlZiBpbnQgKGlkZV9wcm9jc2V0X3QpKGlkZV9kcml2ZV90ICosIGludCk7Cit0eXBlZGVmIHN0cnVjdCBpZGVfc2V0dGluZ3NfcyB7CisJY2hhcgkJCSpuYW1lOworCWludAkJCXJ3OworCWludAkJCXJlYWRfaW9jdGw7CisJaW50CQkJd3JpdGVfaW9jdGw7CisJaW50CQkJZGF0YV90eXBlOworCWludAkJCW1pbjsKKwlpbnQJCQltYXg7CisJaW50CQkJbXVsX2ZhY3RvcjsKKwlpbnQJCQlkaXZfZmFjdG9yOworCXZvaWQJCQkqZGF0YTsKKwlpZGVfcHJvY3NldF90CQkqc2V0OworCWludAkJCWF1dG9fcmVtb3ZlOworCXN0cnVjdCBpZGVfc2V0dGluZ3NfcwkqbmV4dDsKK30gaWRlX3NldHRpbmdzX3Q7CisKK2V4dGVybiBzdHJ1Y3Qgc2VtYXBob3JlIGlkZV9zZXR0aW5nX3NlbTsKK2V4dGVybiBpbnQgaWRlX2FkZF9zZXR0aW5nKGlkZV9kcml2ZV90ICpkcml2ZSwgY29uc3QgY2hhciAqbmFtZSwgaW50IHJ3LCBpbnQgcmVhZF9pb2N0bCwgaW50IHdyaXRlX2lvY3RsLCBpbnQgZGF0YV90eXBlLCBpbnQgbWluLCBpbnQgbWF4LCBpbnQgbXVsX2ZhY3RvciwgaW50IGRpdl9mYWN0b3IsIHZvaWQgKmRhdGEsIGlkZV9wcm9jc2V0X3QgKnNldCk7CitleHRlcm4gaWRlX3NldHRpbmdzX3QgKmlkZV9maW5kX3NldHRpbmdfYnlfbmFtZShpZGVfZHJpdmVfdCAqZHJpdmUsIGNoYXIgKm5hbWUpOworZXh0ZXJuIGludCBpZGVfcmVhZF9zZXR0aW5nKGlkZV9kcml2ZV90ICp0LCBpZGVfc2V0dGluZ3NfdCAqc2V0dGluZyk7CitleHRlcm4gaW50IGlkZV93cml0ZV9zZXR0aW5nKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlX3NldHRpbmdzX3QgKnNldHRpbmcsIGludCB2YWwpOworZXh0ZXJuIHZvaWQgaWRlX2FkZF9nZW5lcmljX3NldHRpbmdzKGlkZV9kcml2ZV90ICpkcml2ZSk7CisKKy8qCisgKiAvcHJvYy9pZGUgaW50ZXJmYWNlCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwljb25zdCBjaGFyCSpuYW1lOworCW1vZGVfdAkJbW9kZTsKKwlyZWFkX3Byb2NfdAkqcmVhZF9wcm9jOworCXdyaXRlX3Byb2NfdAkqd3JpdGVfcHJvYzsKK30gaWRlX3Byb2NfZW50cnlfdDsKKworI2lmZGVmIENPTkZJR19QUk9DX0ZTCitleHRlcm4gc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX2lkZV9yb290OworCitleHRlcm4gdm9pZCBwcm9jX2lkZV9jcmVhdGUodm9pZCk7CitleHRlcm4gdm9pZCBwcm9jX2lkZV9kZXN0cm95KHZvaWQpOworZXh0ZXJuIHZvaWQgY3JlYXRlX3Byb2NfaWRlX2ludGVyZmFjZXModm9pZCk7Cit2b2lkIGRlc3Ryb3lfcHJvY19pZGVfaW50ZXJmYWNlKGlkZV9od2lmX3QgKik7CitleHRlcm4gdm9pZCBpZGVfYWRkX3Byb2NfZW50cmllcyhzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKiwgaWRlX3Byb2NfZW50cnlfdCAqLCB2b2lkICopOworZXh0ZXJuIHZvaWQgaWRlX3JlbW92ZV9wcm9jX2VudHJpZXMoc3RydWN0IHByb2NfZGlyX2VudHJ5ICosIGlkZV9wcm9jX2VudHJ5X3QgKik7CityZWFkX3Byb2NfdCBwcm9jX2lkZV9yZWFkX2NhcGFjaXR5OworcmVhZF9wcm9jX3QgcHJvY19pZGVfcmVhZF9nZW9tZXRyeTsKKworI2lmZGVmIENPTkZJR19CTEtfREVWX0lERVBDSQordm9pZCBpZGVfcGNpX2NyZWF0ZV9ob3N0X3Byb2MoY29uc3QgY2hhciAqLCBnZXRfaW5mb190ICopOworI2VuZGlmCisKKy8qCisgKiBTdGFuZGFyZCBleGl0IHN0dWZmOgorICovCisjZGVmaW5lIFBST0NfSURFX1JFQURfUkVUVVJOKHBhZ2Usc3RhcnQsb2ZmLGNvdW50LGVvZixsZW4pIFwKK3sJCQkJCVwKKwlsZW4gLT0gb2ZmOwkJCVwKKwlpZiAobGVuIDwgY291bnQpIHsJCVwKKwkJKmVvZiA9IDE7CQlcCisJCWlmIChsZW4gPD0gMCkJCVwKKwkJCXJldHVybiAwOwlcCisJfSBlbHNlCQkJCVwKKwkJbGVuID0gY291bnQ7CQlcCisJKnN0YXJ0ID0gcGFnZSArIG9mZjsJCVwKKwlyZXR1cm4gbGVuOwkJCVwKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgY3JlYXRlX3Byb2NfaWRlX2ludGVyZmFjZXModm9pZCkgeyA7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBkZXN0cm95X3Byb2NfaWRlX2ludGVyZmFjZShpZGVfaHdpZl90ICpod2lmKSB7IDsgfQorI2RlZmluZSBQUk9DX0lERV9SRUFEX1JFVFVSTihwYWdlLHN0YXJ0LG9mZixjb3VudCxlb2YsbGVuKSByZXR1cm4gMDsKKyNlbmRpZgorCisvKgorICogUG93ZXIgTWFuYWdlbWVudCBzdGVwIHZhbHVlIChycS0+cG0tPnBtX3N0ZXApLgorICoKKyAqIFRoZSBzdGVwIHZhbHVlIHN0YXJ0cyBhdCAwIChpZGVfcG1fc3RhdGVfc3RhcnRfc3VzcGVuZCkgZm9yIGEKKyAqIHN1c3BlbmQgb3BlcmF0aW9uIG9yIDEwMDAgKGlkZV9wbV9zdGF0ZV9zdGFydF9yZXN1bWUpIGZvciBhCisgKiByZXN1bWUgb3BlcmF0aW9uLgorICoKKyAqIEZvciBlYWNoIHN0ZXAsIHRoZSBjb3JlIGNhbGxzIHRoZSBzdWJkcml2ZXIgc3RhcnRfcG93ZXJfc3RlcCgpIGZpcnN0LgorICogVGhpcyBjYW4gcmV0dXJuOgorICoJLSBpZGVfc3RvcHBlZCA6CUluIHRoaXMgY2FzZSwgdGhlIGNvcmUgY2FsbHMgdXMgYmFjayBhZ2FpbiB1bmxlc3MKKyAqCQkJc3RlcCBoYXZlIGJlZW4gc2V0IHRvIGlkZV9wb3dlcl9zdGF0ZV9jb21wbGV0ZWQuCisgKgktIGlkZV9zdGFydGVkIDoJSW4gdGhpcyBjYXNlLCB0aGUgY2hhbm5lbCBpcyBsZWZ0IGJ1c3kgdW50aWwgYW4KKyAqCQkJYXN5bmMgZXZlbnQgKGludGVycnVwdCkgb2NjdXJzLgorICogVHlwaWNhbGx5LCBzdGFydF9wb3dlcl9zdGVwKCkgd2lsbCBpc3N1ZSBhIHRhc2tmaWxlIHJlcXVlc3Qgd2l0aAorICogZG9fcndfdGFza2ZpbGUoKS4KKyAqCisgKiBVcG9uIHJlY2VwdGlvbiBvZiB0aGUgaW50ZXJydXB0LCB0aGUgY29yZSB3aWxsIGNhbGwgY29tcGxldGVfcG93ZXJfc3RlcCgpCisgKiB3aXRoIHRoZSBlcnJvciBjb2RlIGlmIGFueS4gVGhpcyByb3V0aW5lIHNob3VsZCB1cGRhdGUgdGhlIHN0ZXAgdmFsdWUKKyAqIGFuZCByZXR1cm4uIEl0IHNob3VsZCBub3Qgc3RhcnQgYSBuZXcgcmVxdWVzdC4gVGhlIGNvcmUgd2lsbCBjYWxsCisgKiBzdGFydF9wb3dlcl9zdGVwIGZvciB0aGUgbmV3IHN0ZXAgdmFsdWUsIHVubGVzcyBzdGVwIGhhdmUgYmVlbiBzZXQgdG8KKyAqIGlkZV9wb3dlcl9zdGF0ZV9jb21wbGV0ZWQuCisgKgorICogU3ViZHJpdmVycyBhcmUgZXhwZWN0ZWQgdG8gZGVmaW5lIHRoZWlyIG93biBhZGRpdGlvbmFsIHBvd2VyCisgKiBzdGVwcyBmcm9tIDEuLjk5OSBmb3Igc3VzcGVuZCBhbmQgZnJvbSAxMDAxLi4xOTk5IGZvciByZXN1bWUsCisgKiBvdGhlciB2YWx1ZXMgYXJlIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlLgorICovCisKK2VudW0geworCWlkZV9wbV9zdGF0ZV9jb21wbGV0ZWQJCT0gLTEsCisJaWRlX3BtX3N0YXRlX3N0YXJ0X3N1c3BlbmQJPSAwLAorCWlkZV9wbV9zdGF0ZV9zdGFydF9yZXN1bWUJPSAxMDAwLAorfTsKKworLyoKKyAqIFN1YmRyaXZlcnMgc3VwcG9ydC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgaWRlX2RyaXZlcl9zIHsKKwlzdHJ1Y3QgbW9kdWxlCQkJKm93bmVyOworCWNvbnN0IGNoYXIJCQkqbmFtZTsKKwljb25zdCBjaGFyCQkJKnZlcnNpb247CisJdTgJCQkJbWVkaWE7CisJdW5zaWduZWQgYnVzeQkJCTogMTsKKwl1bnNpZ25lZCBzdXBwb3J0c19kc2Nfb3ZlcmxhcAk6IDE7CisJaW50CQkoKmNsZWFudXApKGlkZV9kcml2ZV90ICopOworCWlkZV9zdGFydHN0b3BfdAkoKmRvX3JlcXVlc3QpKGlkZV9kcml2ZV90ICosIHN0cnVjdCByZXF1ZXN0ICosIHNlY3Rvcl90KTsKKwlpbnQJCSgqZW5kX3JlcXVlc3QpKGlkZV9kcml2ZV90ICosIGludCwgaW50KTsKKwlpZGVfc3RhcnRzdG9wX3QJKCplcnJvcikoaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKnJxLCB1OCwgdTgpOworCWlkZV9zdGFydHN0b3BfdAkoKmFib3J0KShpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpOworCWludAkJKCppb2N0bCkoaWRlX2RyaXZlX3QgKiwgc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7CisJaWRlX3Byb2NfZW50cnlfdAkqcHJvYzsKKwlpbnQJCSgqYXR0YWNoKShpZGVfZHJpdmVfdCAqKTsKKwl2b2lkCQkoKmF0YV9wcmVidWlsZGVyKShpZGVfZHJpdmVfdCAqKTsKKwl2b2lkCQkoKmF0YXBpX3ByZWJ1aWxkZXIpKGlkZV9kcml2ZV90ICopOworCXN0cnVjdCBkZXZpY2VfZHJpdmVyCWdlbl9kcml2ZXI7CisJc3RydWN0IGxpc3RfaGVhZCBkcml2ZXM7CisJc3RydWN0IGxpc3RfaGVhZCBkcml2ZXJzOworfSBpZGVfZHJpdmVyX3Q7CisKKyNkZWZpbmUgRFJJVkVSKGRyaXZlKQkJKChkcml2ZSktPmRyaXZlcikKKworaW50IGdlbmVyaWNfaWRlX2lvY3RsKGlkZV9kcml2ZV90ICosIHN0cnVjdCBmaWxlICosIHN0cnVjdCBibG9ja19kZXZpY2UgKiwgdW5zaWduZWQsIHVuc2lnbmVkIGxvbmcpOworCisvKgorICogaWRlX2h3aWZzW10gaXMgdGhlIG1hc3RlciBkYXRhIHN0cnVjdHVyZSB1c2VkIHRvIGtlZXAgdHJhY2sKKyAqIG9mIGp1c3QgYWJvdXQgZXZlcnl0aGluZyBpbiBpZGUuYy4gIFdoZW5ldmVyIHBvc3NpYmxlLCByb3V0aW5lcworICogc2hvdWxkIGJlIHVzaW5nIHBvaW50ZXJzIHRvIGEgZHJpdmUgKGlkZV9kcml2ZV90ICopIG9yCisgKiBwb2ludGVycyB0byBhIGh3aWYgKGlkZV9od2lmX3QgKiksIHJhdGhlciB0aGFuIGluZGV4aW5nIHRoaXMKKyAqIHN0cnVjdHVyZSBkaXJlY3RseSAodGhlIGFsbG9jYXRpb24vbGF5b3V0IG1heSBjaGFuZ2UhKS4KKyAqCisgKi8KKyNpZm5kZWYgX0lERV9DCitleHRlcm4JaWRlX2h3aWZfdAlpZGVfaHdpZnNbXTsJCS8qIG1hc3RlciBkYXRhIHJlcG9zaXRvcnkgKi8KKyNlbmRpZgorZXh0ZXJuIGludCBub2F1dG9kbWE7CisKK2V4dGVybiBpbnQgaWRlX2VuZF9yZXF1ZXN0IChpZGVfZHJpdmVfdCAqZHJpdmUsIGludCB1cHRvZGF0ZSwgaW50IG5yc2Vjcyk7CitleHRlcm4gaW50IF9faWRlX2VuZF9yZXF1ZXN0IChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwgaW50IHVwdG9kYXRlLCBpbnQgbnJzZWNzKTsKKworLyoKKyAqIFRoaXMgaXMgdXNlZCBvbiBleGl0IGZyb20gdGhlIGRyaXZlciB0byBkZXNpZ25hdGUgdGhlIG5leHQgaXJxIGhhbmRsZXIKKyAqIGFuZCBhbHNvIHRvIHN0YXJ0IHRoZSBzYWZldHkgdGltZXIuCisgKi8KK2V4dGVybiB2b2lkIGlkZV9zZXRfaGFuZGxlciAoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfaGFuZGxlcl90ICpoYW5kbGVyLCB1bnNpZ25lZCBpbnQgdGltZW91dCwgaWRlX2V4cGlyeV90ICpleHBpcnkpOworCisvKgorICogVGhpcyBpcyB1c2VkIG9uIGV4aXQgZnJvbSB0aGUgZHJpdmVyIHRvIGRlc2lnbmF0ZSB0aGUgbmV4dCBpcnEgaGFuZGxlcgorICogYW5kIHN0YXJ0IHRoZSBzYWZldHkgdGltZSBzYWZlbHkgYW5kIGF0b21pY2FsbHkgZnJvbSB0aGUgSVJRIGhhbmRsZXIKKyAqIHdpdGggcmVzcGVjdCB0byB0aGUgY29tbWFuZCBpc3N1ZSAod2hpY2ggaXQgYWxzbyBkb2VzKQorICovCitleHRlcm4gdm9pZCBpZGVfZXhlY3V0ZV9jb21tYW5kKGlkZV9kcml2ZV90ICosIHRhc2tfaW9yZWdfdCBjbWQsIGlkZV9oYW5kbGVyX3QgKiwgdW5zaWduZWQgaW50LCBpZGVfZXhwaXJ5X3QgKik7CisKK2lkZV9zdGFydHN0b3BfdCBfX2lkZV9lcnJvcihpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqLCB1OCwgdTgpOworCisvKgorICogaWRlX2Vycm9yKCkgdGFrZXMgYWN0aW9uIGJhc2VkIG9uIHRoZSBlcnJvciByZXR1cm5lZCBieSB0aGUgY29udHJvbGxlci4KKyAqIFRoZSBjYWxsZXIgc2hvdWxkIHJldHVybiBpbW1lZGlhdGVseSBhZnRlciBpbnZva2luZyB0aGlzLgorICoKKyAqIChkcml2ZSwgbXNnLCBzdGF0dXMpCisgKi8KK2lkZV9zdGFydHN0b3BfdCBpZGVfZXJyb3IgKGlkZV9kcml2ZV90ICpkcml2ZSwgY29uc3QgY2hhciAqbXNnLCBieXRlIHN0YXQpOworCitpZGVfc3RhcnRzdG9wX3QgX19pZGVfYWJvcnQoaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKik7CisKKy8qCisgKiBBYm9ydCBhIHJ1bm5pbmcgY29tbWFuZCBvbiB0aGUgY29udHJvbGxlciB0cmlnZ2VyaW5nIHRoZSBhYm9ydAorICogZnJvbSBhIGhvc3Qgc2lkZSwgbm9uIGVycm9yIHNpdHVhdGlvbgorICogKGRyaXZlLCBtc2cpCisgKi8KK2V4dGVybiBpZGVfc3RhcnRzdG9wX3QgaWRlX2Fib3J0KGlkZV9kcml2ZV90ICosIGNvbnN0IGNoYXIgKik7CisKK2V4dGVybiB2b2lkIGlkZV9maXhfZHJpdmVpZChzdHJ1Y3QgaGRfZHJpdmVpZCAqKTsKKy8qCisgKiBpZGVfZml4c3RyaW5nKCkgY2xlYW5zIHVwIGFuZCAob3B0aW9uYWxseSkgYnl0ZS1zd2FwcyBhIHRleHQgc3RyaW5nLAorICogcmVtb3ZpbmcgbGVhZGluZy90cmFpbGluZyBibGFua3MgYW5kIGNvbXByZXNzaW5nIGludGVybmFsIGJsYW5rcy4KKyAqIEl0IGlzIHByaW1hcmlseSB1c2VkIHRvIHRpZHkgdXAgdGhlIG1vZGVsIG5hbWUvbnVtYmVyIGZpZWxkcyBhcworICogcmV0dXJuZWQgYnkgdGhlIFdJTl9bUF1JREVOVElGWSBjb21tYW5kcy4KKyAqCisgKiAocywgYnl0ZWNvdW50LCBieXRlc3dhcCkKKyAqLworZXh0ZXJuIHZvaWQgaWRlX2ZpeHN0cmluZyh1OCAqLCBjb25zdCBpbnQsIGNvbnN0IGludCk7CisKKy8qCisgKiBUaGlzIHJvdXRpbmUgYnVzeS13YWl0cyBmb3IgdGhlIGRyaXZlIHN0YXR1cyB0byBiZSBub3QgImJ1c3kiLgorICogSXQgdGhlbiBjaGVja3MgdGhlIHN0YXR1cyBmb3IgYWxsIG9mIHRoZSAiZ29vZCIgYml0cyBhbmQgbm9uZQorICogb2YgdGhlICJiYWQiIGJpdHMsIGFuZCBpZiBhbGwgaXMgb2theSBpdCByZXR1cm5zIDAuICBBbGwgb3RoZXIKKyAqIGNhc2VzIHJldHVybiAxIGFmdGVyIGRvaW5nICIqc3RhcnRzdG9wID0gaWRlX2Vycm9yKCkiLCBhbmQgdGhlCisgKiBjYWxsZXIgc2hvdWxkIHJldHVybiB0aGUgdXBkYXRlZCB2YWx1ZSBvZiAic3RhcnRzdG9wIiBpbiB0aGlzIGNhc2UuCisgKiAic3RhcnRzdG9wIiBpcyB1bmNoYW5nZWQgd2hlbiB0aGUgZnVuY3Rpb24gcmV0dXJucyAwOworICogKHN0YXJ0c3RvcCwgZHJpdmUsIGdvb2QsIGJhZCwgdGltZW91dCkKKyAqLworZXh0ZXJuIGludCBpZGVfd2FpdF9zdGF0KGlkZV9zdGFydHN0b3BfdCAqLCBpZGVfZHJpdmVfdCAqLCB1OCwgdTgsIHVuc2lnbmVkIGxvbmcpOworCisvKgorICogU3RhcnQgYSByZXNldCBvcGVyYXRpb24gZm9yIGFuIElERSBpbnRlcmZhY2UuCisgKiBUaGUgY2FsbGVyIHNob3VsZCByZXR1cm4gaW1tZWRpYXRlbHkgYWZ0ZXIgaW52b2tpbmcgdGhpcy4KKyAqLworZXh0ZXJuIGlkZV9zdGFydHN0b3BfdCBpZGVfZG9fcmVzZXQgKGlkZV9kcml2ZV90ICopOworCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIHByaW9yIHRvIGludm9raW5nIGlkZV9kb19kcml2ZV9jbWQoKS4KKyAqLworZXh0ZXJuIHZvaWQgaWRlX2luaXRfZHJpdmVfY21kIChzdHJ1Y3QgcmVxdWVzdCAqcnEpOworCisvKgorICogdGhpcyBmdW5jdGlvbiByZXR1cm5zIGVycm9yIGxvY2F0aW9uIHNlY3RvciBvZmZzZXQgaW4gY2FzZSBvZiBhIHdyaXRlIGVycm9yCisgKi8KK2V4dGVybiB1NjQgaWRlX2dldF9lcnJvcl9sb2NhdGlvbihpZGVfZHJpdmVfdCAqLCBjaGFyICopOworCisvKgorICogImFjdGlvbiIgcGFyYW1ldGVyIHR5cGUgZm9yIGlkZV9kb19kcml2ZV9jbWQoKSBiZWxvdy4KKyAqLwordHlwZWRlZiBlbnVtIHsKKwlpZGVfd2FpdCwJLyogaW5zZXJ0IHJxIGF0IGVuZCBvZiBsaXN0LCBhbmQgd2FpdCBmb3IgaXQgKi8KKwlpZGVfbmV4dCwJLyogaW5zZXJ0IHJxIGltbWVkaWF0ZWx5IGFmdGVyIGN1cnJlbnQgcmVxdWVzdCAqLworCWlkZV9wcmVlbXB0LAkvKiBpbnNlcnQgcnEgaW4gZnJvbnQgb2YgY3VycmVudCByZXF1ZXN0ICovCisJaWRlX2hlYWRfd2FpdCwJLyogaW5zZXJ0IHJxIGluIGZyb250IG9mIGN1cnJlbnQgcmVxdWVzdCBhbmQgd2FpdCBmb3IgaXQgKi8KKwlpZGVfZW5kCQkvKiBpbnNlcnQgcnEgYXQgZW5kIG9mIGxpc3QsIGJ1dCBkb24ndCB3YWl0IGZvciBpdCAqLworfSBpZGVfYWN0aW9uX3Q7CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzc3VlcyBhIHNwZWNpYWwgSURFIGRldmljZSByZXF1ZXN0CisgKiBvbnRvIHRoZSByZXF1ZXN0IHF1ZXVlLgorICoKKyAqIElmIGFjdGlvbiBpcyBpZGVfd2FpdCwgdGhlbiB0aGUgcnEgaXMgcXVldWVkIGF0IHRoZSBlbmQgb2YgdGhlCisgKiByZXF1ZXN0IHF1ZXVlLCBhbmQgdGhlIGZ1bmN0aW9uIHNsZWVwcyB1bnRpbCBpdCBoYXMgYmVlbiBwcm9jZXNzZWQuCisgKiBUaGlzIGlzIGZvciB1c2Ugd2hlbiBpbnZva2VkIGZyb20gYW4gaW9jdGwgaGFuZGxlci4KKyAqCisgKiBJZiBhY3Rpb24gaXMgaWRlX3ByZWVtcHQsIHRoZW4gdGhlIHJxIGlzIHF1ZXVlZCBhdCB0aGUgaGVhZCBvZgorICogdGhlIHJlcXVlc3QgcXVldWUsIGRpc3BsYWNpbmcgdGhlIGN1cnJlbnRseS1iZWluZy1wcm9jZXNzZWQKKyAqIHJlcXVlc3QgYW5kIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBpbW1lZGlhdGVseSB3aXRob3V0IHdhaXRpbmcKKyAqIGZvciB0aGUgbmV3IHJxIHRvIGJlIGNvbXBsZXRlZC4gIFRoaXMgaXMgVkVSWSBEQU5HRVJPVVMsIGFuZCBpcworICogaW50ZW5kZWQgZm9yIGNhcmVmdWwgdXNlIGJ5IHRoZSBBVEFQSSB0YXBlL2Nkcm9tIGRyaXZlciBjb2RlLgorICoKKyAqIElmIGFjdGlvbiBpcyBpZGVfbmV4dCwgdGhlbiB0aGUgcnEgaXMgcXVldWVkIGltbWVkaWF0ZWx5IGFmdGVyCisgKiB0aGUgY3VycmVudGx5LWJlaW5nLXByb2Nlc3NlZC1yZXF1ZXN0IChpZiBhbnkpLCBhbmQgdGhlIGZ1bmN0aW9uCisgKiByZXR1cm5zIHdpdGhvdXQgd2FpdGluZyBmb3IgdGhlIG5ldyBycSB0byBiZSBjb21wbGV0ZWQuICBBcyBhYm92ZSwKKyAqIFRoaXMgaXMgVkVSWSBEQU5HRVJPVVMsIGFuZCBpcyBpbnRlbmRlZCBmb3IgY2FyZWZ1bCB1c2UgYnkgdGhlCisgKiBBVEFQSSB0YXBlL2Nkcm9tIGRyaXZlciBjb2RlLgorICoKKyAqIElmIGFjdGlvbiBpcyBpZGVfZW5kLCB0aGVuIHRoZSBycSBpcyBxdWV1ZWQgYXQgdGhlIGVuZCBvZiB0aGUKKyAqIHJlcXVlc3QgcXVldWUsIGFuZCB0aGUgZnVuY3Rpb24gcmV0dXJucyBpbW1lZGlhdGVseSB3aXRob3V0IHdhaXRpbmcKKyAqIGZvciB0aGUgbmV3IHJxIHRvIGJlIGNvbXBsZXRlZC4gVGhpcyBpcyBhZ2FpbiBpbnRlbmRlZCBmb3IgY2FyZWZ1bAorICogdXNlIGJ5IHRoZSBBVEFQSSB0YXBlL2Nkcm9tIGRyaXZlciBjb2RlLgorICovCitleHRlcm4gaW50IGlkZV9kb19kcml2ZV9jbWQoaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKiwgaWRlX2FjdGlvbl90KTsKKworLyoKKyAqIENsZWFuIHVwIGFmdGVyIHN1Y2Nlc3MvZmFpbHVyZSBvZiBhbiBleHBsaWNpdCBkcml2ZSBjbWQuCisgKiBzdGF0L2VyciBhcmUgdXNlZCBvbmx5IHdoZW4gKEhXR1JPVVAoZHJpdmUpLT5ycS0+Y21kID09IElERV9EUklWRV9DTUQpLgorICogc3RhdC9lcnIgYXJlIHVzZWQgb25seSB3aGVuIChIV0dST1VQKGRyaXZlKS0+cnEtPmNtZCA9PSBJREVfRFJJVkVfVEFTS19NQVNLKS4KKyAqCisgKiAoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBzdGF0LCB1OCBlcnIpCisgKi8KK2V4dGVybiB2b2lkIGlkZV9lbmRfZHJpdmVfY21kKGlkZV9kcml2ZV90ICosIHU4LCB1OCk7CisKKy8qCisgKiBJc3N1ZSBBVEEgY29tbWFuZCBhbmQgd2FpdCBmb3IgY29tcGxldGlvbi4KKyAqIFVzZSBmb3IgaW1wbGVtZW50aW5nIGNvbW1hbmRzIGluIGtlcm5lbAorICoKKyAqICAoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBjbWQsIHU4IG5zZWN0LCB1OCBmZWF0dXJlLCB1OCBzZWN0b3JzLCB1OCAqYnVmKQorICovCitleHRlcm4gaW50IGlkZV93YWl0X2NtZChpZGVfZHJpdmVfdCAqLCB1OCwgdTgsIHU4LCB1OCwgdTggKik7CisKK3R5cGVkZWYgc3RydWN0IGlkZV90YXNrX3MgeworLyoKKyAqCXN0cnVjdCBoZF9kcml2ZV90YXNrX2hkcgl0ZjsKKyAqCXRhc2tfc3RydWN0X3QJCXRmOworICoJc3RydWN0IGhkX2RyaXZlX2hvYl9oZHIJCWhvYmY7CisgKglob2Jfc3RydWN0X3QJCWhvYmY7CisgKi8KKwl0YXNrX2lvcmVnX3QJCXRmUmVnaXN0ZXJbOF07CisJdGFza19pb3JlZ190CQlob2JSZWdpc3Rlcls4XTsKKwlpZGVfcmVnX3ZhbGlkX3QJCXRmX291dF9mbGFnczsKKwlpZGVfcmVnX3ZhbGlkX3QJCXRmX2luX2ZsYWdzOworCWludAkJCWRhdGFfcGhhc2U7CisJaW50CQkJY29tbWFuZF90eXBlOworCWlkZV9wcmVfaGFuZGxlcl90CSpwcmVoYW5kbGVyOworCWlkZV9oYW5kbGVyX3QJCSpoYW5kbGVyOworCXN0cnVjdCByZXF1ZXN0CQkqcnE7CQkvKiBjb3B5IG9mIHJlcXVlc3QgKi8KKwl2b2lkCQkJKnNwZWNpYWw7CS8qIHZhbGlkX3QgZ2VuZXJhbGx5ICovCit9IGlkZV90YXNrX3Q7CisKK2V4dGVybiB1MzIgaWRlX3JlYWRfMjQoaWRlX2RyaXZlX3QgKik7CisKK2V4dGVybiB2b2lkIFNFTEVDVF9EUklWRShpZGVfZHJpdmVfdCAqKTsKK2V4dGVybiB2b2lkIFNFTEVDVF9JTlRFUlJVUFQoaWRlX2RyaXZlX3QgKik7CitleHRlcm4gdm9pZCBTRUxFQ1RfTUFTSyhpZGVfZHJpdmVfdCAqLCBpbnQpOworZXh0ZXJuIHZvaWQgUVVJUktfTElTVChpZGVfZHJpdmVfdCAqKTsKKworZXh0ZXJuIGludCBkcml2ZV9pc19yZWFkeShpZGVfZHJpdmVfdCAqKTsKK2V4dGVybiBpbnQgd2FpdF9mb3JfcmVhZHkoaWRlX2RyaXZlX3QgKiwgaW50IC8qIHRpbWVvdXQgKi8pOworCisvKgorICogdGFza2ZpbGUgaW8gZm9yIGRpc2tzIGZvciBub3cuLi5hbmQgYnVpbGRzIHJlcXVlc3QgZnJvbSBpZGVfaW9jdGwKKyAqLworZXh0ZXJuIGlkZV9zdGFydHN0b3BfdCBkb19yd190YXNrZmlsZShpZGVfZHJpdmVfdCAqLCBpZGVfdGFza190ICopOworCisvKgorICogU3BlY2lhbCBGbGFnZ2VkIFJlZ2lzdGVyIFZhbGlkYXRpb24gQ2FsbGVyCisgKi8KK2V4dGVybiBpZGVfc3RhcnRzdG9wX3QgZmxhZ2dlZF90YXNrZmlsZShpZGVfZHJpdmVfdCAqLCBpZGVfdGFza190ICopOworCitleHRlcm4gaWRlX3N0YXJ0c3RvcF90IHNldF9tdWx0bW9kZV9pbnRyKGlkZV9kcml2ZV90ICopOworZXh0ZXJuIGlkZV9zdGFydHN0b3BfdCBzZXRfZ2VvbWV0cnlfaW50cihpZGVfZHJpdmVfdCAqKTsKK2V4dGVybiBpZGVfc3RhcnRzdG9wX3QgcmVjYWxfaW50cihpZGVfZHJpdmVfdCAqKTsKK2V4dGVybiBpZGVfc3RhcnRzdG9wX3QgdGFza19ub19kYXRhX2ludHIoaWRlX2RyaXZlX3QgKik7CitleHRlcm4gaWRlX3N0YXJ0c3RvcF90IHRhc2tfaW5faW50cihpZGVfZHJpdmVfdCAqKTsKK2V4dGVybiBpZGVfc3RhcnRzdG9wX3QgcHJlX3Rhc2tfb3V0X2ludHIoaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKik7CisKK2V4dGVybiBpbnQgaWRlX3Jhd190YXNrZmlsZShpZGVfZHJpdmVfdCAqLCBpZGVfdGFza190ICosIHU4ICopOworCitpbnQgaWRlX3Rhc2tmaWxlX2lvY3RsKGlkZV9kcml2ZV90ICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7CitpbnQgaWRlX2NtZF9pb2N0bChpZGVfZHJpdmVfdCAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpOworaW50IGlkZV90YXNrX2lvY3RsKGlkZV9kcml2ZV90ICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7CisKK2V4dGVybiBpbnQgc3lzdGVtX2J1c19jbG9jayh2b2lkKTsKKworZXh0ZXJuIGludCBpZGVfZHJpdmVpZF91cGRhdGUoaWRlX2RyaXZlX3QgKik7CitleHRlcm4gaW50IGlkZV9hdGE2Nl9jaGVjayhpZGVfZHJpdmVfdCAqLCBpZGVfdGFza190ICopOworZXh0ZXJuIGludCBpZGVfY29uZmlnX2RyaXZlX3NwZWVkKGlkZV9kcml2ZV90ICosIHU4KTsKK2V4dGVybiB1OCBlaWdodHlfbmludHlfdGhyZWUgKGlkZV9kcml2ZV90ICopOworZXh0ZXJuIGludCBzZXRfdHJhbnNmZXIoaWRlX2RyaXZlX3QgKiwgaWRlX3Rhc2tfdCAqKTsKK2V4dGVybiBpbnQgdGFza2ZpbGVfbGliX2dldF9pZGVudGlmeShpZGVfZHJpdmVfdCAqZHJpdmUsIHU4ICopOworCitleHRlcm4gaW50IGlkZV93YWl0X25vdF9idXN5KGlkZV9od2lmX3QgKmh3aWYsIHVuc2lnbmVkIGxvbmcgdGltZW91dCk7CisKKy8qCisgKiBpZGVfc3RhbGxfcXVldWUoKSBjYW4gYmUgdXNlZCBieSBhIGRyaXZlIHRvIGdpdmUgZXhjZXNzIGJhbmR3aWR0aCBiYWNrCisgKiB0byB0aGUgaHdncm91cCBieSBzbGVlcGluZyBmb3IgdGltZW91dCBqaWZmaWVzLgorICovCitleHRlcm4gdm9pZCBpZGVfc3RhbGxfcXVldWUoaWRlX2RyaXZlX3QgKmRyaXZlLCB1bnNpZ25lZCBsb25nIHRpbWVvdXQpOworCitleHRlcm4gaW50IGlkZV9zcGluX3dhaXRfaHdncm91cChpZGVfZHJpdmVfdCAqKTsKK2V4dGVybiB2b2lkIGlkZV90aW1lcl9leHBpcnkodW5zaWduZWQgbG9uZyk7CitleHRlcm4gaXJxcmV0dXJuX3QgaWRlX2ludHIoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitleHRlcm4gdm9pZCBkb19pZGVfcmVxdWVzdChyZXF1ZXN0X3F1ZXVlX3QgKik7CitleHRlcm4gdm9pZCBpZGVfaW5pdF9zdWJkcml2ZXJzKHZvaWQpOworCit2b2lkIGlkZV9pbml0X2Rpc2soc3RydWN0IGdlbmRpc2sgKiwgaWRlX2RyaXZlX3QgKik7CisKK2V4dGVybiBpbnQgYXRhX2F0dGFjaChpZGVfZHJpdmVfdCAqKTsKKworZXh0ZXJuIGludCBpZGVwcm9iZV9pbml0KHZvaWQpOworCitleHRlcm4gdm9pZCBpZGVfc2Nhbl9wY2lidXMoaW50IHNjYW5fZGlyZWN0aW9uKSBfX2luaXQ7CitleHRlcm4gaW50IGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBwY2lfZHJpdmVyICpkcml2ZXIpOworZXh0ZXJuIHZvaWQgaWRlX3BjaV91bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgcGNpX2RyaXZlciAqZHJpdmVyKTsKK3ZvaWQgaWRlX3BjaV9zZXR1cF9wb3J0cyhzdHJ1Y3QgcGNpX2RldiAqLCBzdHJ1Y3QgaWRlX3BjaV9kZXZpY2VfcyAqLCBpbnQsIGF0YV9pbmRleF90ICopOworZXh0ZXJuIHZvaWQgaWRlX3NldHVwX3BjaV9ub2lzZSAoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IGlkZV9wY2lfZGV2aWNlX3MgKmQpOworCitleHRlcm4gdm9pZCBkZWZhdWx0X2h3aWZfaW9wcyhpZGVfaHdpZl90ICopOworZXh0ZXJuIHZvaWQgZGVmYXVsdF9od2lmX21taW9wcyhpZGVfaHdpZl90ICopOworZXh0ZXJuIHZvaWQgZGVmYXVsdF9od2lmX3RyYW5zcG9ydChpZGVfaHdpZl90ICopOworCitpbnQgaWRlX3JlZ2lzdGVyX2RyaXZlcihpZGVfZHJpdmVyX3QgKmRyaXZlcik7Cit2b2lkIGlkZV91bnJlZ2lzdGVyX2RyaXZlcihpZGVfZHJpdmVyX3QgKmRyaXZlcik7CitpbnQgaWRlX3JlZ2lzdGVyX3N1YmRyaXZlcihpZGVfZHJpdmVfdCAqLCBpZGVfZHJpdmVyX3QgKik7CitpbnQgaWRlX3VucmVnaXN0ZXJfc3ViZHJpdmVyIChpZGVfZHJpdmVfdCAqZHJpdmUpOworaW50IGlkZV9yZXBsYWNlX3N1YmRyaXZlcihpZGVfZHJpdmVfdCAqZHJpdmUsIGNvbnN0IGNoYXIgKmRyaXZlcik7CisKKyNkZWZpbmUgT05fQk9BUkQJCTEKKyNkZWZpbmUgTkVWRVJfQk9BUkQJCTAKKworI2lmZGVmIENPTkZJR19CTEtfREVWX09GRkJPQVJECisjICBkZWZpbmUgT0ZGX0JPQVJECQlPTl9CT0FSRAorI2Vsc2UgLyogQ09ORklHX0JMS19ERVZfT0ZGQk9BUkQgKi8KKyMgIGRlZmluZSBPRkZfQk9BUkQJCU5FVkVSX0JPQVJECisjZW5kaWYgLyogQ09ORklHX0JMS19ERVZfT0ZGQk9BUkQgKi8KKworI2RlZmluZSBOT0RNQSAwCisjZGVmaW5lIE5PQVVUT0RNQSAxCisjZGVmaW5lIEFVVE9ETUEgMgorCit0eXBlZGVmIHN0cnVjdCBpZGVfcGNpX2VuYWJsZWJpdF9zIHsKKwl1OAlyZWc7CS8qIGJ5dGUgcGNpIHJlZyBob2xkaW5nIHRoZSBlbmFibGUtYml0ICovCisJdTgJbWFzazsJLyogbWFzayB0byBpc29sYXRlIHRoZSBlbmFibGUtYml0ICovCisJdTgJdmFsOwkvKiB2YWx1ZSBvZiBtYXNrZWQgcmVnIHdoZW4gImVuYWJsZWQiICovCit9IGlkZV9wY2lfZW5hYmxlYml0X3Q7CisKK2VudW0geworCS8qIFVzZXMgSVNBIGNvbnRyb2wgcG9ydHMgbm90IFBDSSBvbmVzLiAqLworCUlERVBDSV9GTEFHX0lTQV9QT1JUUwkJPSAoMSA8PCAwKSwKKwlJREVQQ0lfRkxBR19GT1JDRV9QREMJCT0gKDEgPDwgMSksCit9OworCit0eXBlZGVmIHN0cnVjdCBpZGVfcGNpX2RldmljZV9zIHsKKwljaGFyCQkJKm5hbWU7CisJaW50CQkJKCppbml0X3NldHVwKShzdHJ1Y3QgcGNpX2RldiAqLCBzdHJ1Y3QgaWRlX3BjaV9kZXZpY2VfcyAqKTsKKwl2b2lkCQkJKCppbml0X3NldHVwX2RtYSkoc3RydWN0IHBjaV9kZXYgKiwgc3RydWN0IGlkZV9wY2lfZGV2aWNlX3MgKiwgaWRlX2h3aWZfdCAqKTsKKwl1bnNpZ25lZCBpbnQJCSgqaW5pdF9jaGlwc2V0KShzdHJ1Y3QgcGNpX2RldiAqLCBjb25zdCBjaGFyICopOworCXZvaWQJCQkoKmluaXRfaW9wcykoaWRlX2h3aWZfdCAqKTsKKwl2b2lkICAgICAgICAgICAgICAgICAgICAoKmluaXRfaHdpZikoaWRlX2h3aWZfdCAqKTsKKwl2b2lkCQkJKCppbml0X2RtYSkoaWRlX2h3aWZfdCAqLCB1bnNpZ25lZCBsb25nKTsKKwl2b2lkCQkJKCpmaXh1cCkoaWRlX2h3aWZfdCAqKTsKKwl1OAkJCWNoYW5uZWxzOworCXU4CQkJYXV0b2RtYTsKKwlpZGVfcGNpX2VuYWJsZWJpdF90CWVuYWJsZWJpdHNbMl07CisJdTgJCQlib290YWJsZTsKKwl1bnNpZ25lZCBpbnQJCWV4dHJhOworCXN0cnVjdCBpZGVfcGNpX2RldmljZV9zCSpuZXh0OworCXU4CQkJZmxhZ3M7Cit9IGlkZV9wY2lfZGV2aWNlX3Q7CisKK2V4dGVybiBpbnQgaWRlX3NldHVwX3BjaV9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKiwgaWRlX3BjaV9kZXZpY2VfdCAqKTsKK2V4dGVybiBpbnQgaWRlX3NldHVwX3BjaV9kZXZpY2VzKHN0cnVjdCBwY2lfZGV2ICosIHN0cnVjdCBwY2lfZGV2ICosIGlkZV9wY2lfZGV2aWNlX3QgKik7CisKK3ZvaWQgaWRlX21hcF9zZyhpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKK3ZvaWQgaWRlX2luaXRfc2dfY21kKGlkZV9kcml2ZV90ICosIHN0cnVjdCByZXF1ZXN0ICopOworCisjZGVmaW5lIEJBRF9ETUFfRFJJVkUJCTAKKyNkZWZpbmUgR09PRF9ETUFfRFJJVkUJCTEKKworI2lmZGVmIENPTkZJR19CTEtfREVWX0lERURNQQoraW50IF9faWRlX2RtYV9iYWRfZHJpdmUoaWRlX2RyaXZlX3QgKik7CitpbnQgX19pZGVfZG1hX2dvb2RfZHJpdmUoaWRlX2RyaXZlX3QgKik7CitpbnQgaWRlX3VzZV9kbWEoaWRlX2RyaXZlX3QgKik7CitpbnQgX19pZGVfZG1hX29mZihpZGVfZHJpdmVfdCAqKTsKK3ZvaWQgaWRlX2RtYV92ZXJib3NlKGlkZV9kcml2ZV90ICopOworaWRlX3N0YXJ0c3RvcF90IGlkZV9kbWFfaW50cihpZGVfZHJpdmVfdCAqKTsKKworI2lmZGVmIENPTkZJR19CTEtfREVWX0lERURNQV9QQ0kKK2V4dGVybiBpbnQgaWRlX2J1aWxkX3NnbGlzdChpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKK2V4dGVybiBpbnQgaWRlX2J1aWxkX2RtYXRhYmxlKGlkZV9kcml2ZV90ICosIHN0cnVjdCByZXF1ZXN0ICopOworZXh0ZXJuIHZvaWQgaWRlX2Rlc3Ryb3lfZG1hdGFibGUoaWRlX2RyaXZlX3QgKik7CitleHRlcm4gaW50IGlkZV9yZWxlYXNlX2RtYShpZGVfaHdpZl90ICopOworZXh0ZXJuIHZvaWQgaWRlX3NldHVwX2RtYShpZGVfaHdpZl90ICosIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGludCk7CisKK2V4dGVybiBpbnQgX19pZGVfZG1hX2hvc3Rfb2ZmKGlkZV9kcml2ZV90ICopOworZXh0ZXJuIGludCBfX2lkZV9kbWFfb2ZmX3F1aWV0bHkoaWRlX2RyaXZlX3QgKik7CitleHRlcm4gaW50IF9faWRlX2RtYV9ob3N0X29uKGlkZV9kcml2ZV90ICopOworZXh0ZXJuIGludCBfX2lkZV9kbWFfb24oaWRlX2RyaXZlX3QgKik7CitleHRlcm4gaW50IF9faWRlX2RtYV9jaGVjayhpZGVfZHJpdmVfdCAqKTsKK2V4dGVybiBpbnQgaWRlX2RtYV9zZXR1cChpZGVfZHJpdmVfdCAqKTsKK2V4dGVybiB2b2lkIGlkZV9kbWFfc3RhcnQoaWRlX2RyaXZlX3QgKik7CitleHRlcm4gaW50IF9faWRlX2RtYV9lbmQoaWRlX2RyaXZlX3QgKik7CitleHRlcm4gaW50IF9faWRlX2RtYV9sb3N0aXJxKGlkZV9kcml2ZV90ICopOworZXh0ZXJuIGludCBfX2lkZV9kbWFfdGltZW91dChpZGVfZHJpdmVfdCAqKTsKKyNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9JREVETUFfUENJICovCisKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBpZGVfdXNlX2RtYShpZGVfZHJpdmVfdCAqZHJpdmUpIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgaW50IF9faWRlX2RtYV9vZmYoaWRlX2RyaXZlX3QgKmRyaXZlKSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgaWRlX2RtYV92ZXJib3NlKGlkZV9kcml2ZV90ICpkcml2ZSkgeyA7IH0KKyNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9JREVETUEgKi8KKworI2lmbmRlZiBDT05GSUdfQkxLX0RFVl9JREVETUFfUENJCitzdGF0aWMgaW5saW5lIHZvaWQgaWRlX3JlbGVhc2VfZG1hKGlkZV9od2lmX3QgKmRyaXZlKSB7O30KKyNlbmRpZgorCitleHRlcm4gaW50IGlkZV9od2lmX3JlcXVlc3RfcmVnaW9ucyhpZGVfaHdpZl90ICpod2lmKTsKK2V4dGVybiB2b2lkIGlkZV9od2lmX3JlbGVhc2VfcmVnaW9ucyhpZGVfaHdpZl90KiBod2lmKTsKK2V4dGVybiB2b2lkIGlkZV91bnJlZ2lzdGVyICh1bnNpZ25lZCBpbnQgaW5kZXgpOworCit2b2lkIGlkZV9yZWdpc3Rlcl9yZWdpb24oc3RydWN0IGdlbmRpc2sgKik7Cit2b2lkIGlkZV91bnJlZ2lzdGVyX3JlZ2lvbihzdHJ1Y3QgZ2VuZGlzayAqKTsKKwordm9pZCBpZGVfdW5kZWNvZGVkX3NsYXZlKGlkZV9od2lmX3QgKik7CisKK2ludCBwcm9iZV9od2lmX2luaXRfd2l0aF9maXh1cChpZGVfaHdpZl90ICosIHZvaWQgKCopKGlkZV9od2lmX3QgKikpOworZXh0ZXJuIGludCBwcm9iZV9od2lmX2luaXQoaWRlX2h3aWZfdCAqKTsKKworc3RhdGljIGlubGluZSB2b2lkICppZGVfZ2V0X2h3aWZkYXRhIChpZGVfaHdpZl90ICogaHdpZikKK3sKKwlyZXR1cm4gaHdpZi0+aHdpZl9kYXRhOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaWRlX3NldF9od2lmZGF0YSAoaWRlX2h3aWZfdCAqIGh3aWYsIHZvaWQgKmRhdGEpCit7CisJaHdpZi0+aHdpZl9kYXRhID0gZGF0YTsKK30KKworLyogaWRlLWxpYi5jICovCitleHRlcm4gdTggaWRlX2RtYV9zcGVlZChpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IG1vZGUpOworZXh0ZXJuIHU4IGlkZV9yYXRlX2ZpbHRlcih1OCBtb2RlLCB1OCBzcGVlZCk7IAorZXh0ZXJuIGludCBpZGVfZG1hX2VuYWJsZShpZGVfZHJpdmVfdCAqZHJpdmUpOworZXh0ZXJuIGNoYXIgKmlkZV94ZmVyX3ZlcmJvc2UodTggeGZlcl9yYXRlKTsKK2V4dGVybiB2b2lkIGlkZV90b2dnbGVfYm91bmNlKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IG9uKTsKK2V4dGVybiBpbnQgaWRlX3NldF94ZmVyX3JhdGUoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCByYXRlKTsKKwordTggaWRlX2R1bXBfc3RhdHVzKGlkZV9kcml2ZV90ICosIGNvbnN0IGNoYXIgKiwgdTgpOworCit0eXBlZGVmIHN0cnVjdCBpZGVfcGlvX3RpbWluZ3NfcyB7CisJaW50CXNldHVwX3RpbWU7CS8qIEFkZHJlc3Mgc2V0dXAgKG5zKSBtaW5pbXVtICovCisJaW50CWFjdGl2ZV90aW1lOwkvKiBBY3RpdmUgcHVsc2UgKG5zKSBtaW5pbXVtICovCisJaW50CWN5Y2xlX3RpbWU7CS8qIEN5Y2xlIHRpbWUgKG5zKSBtaW5pbXVtID0gKHNldHVwICsgYWN0aXZlICsgcmVjb3ZlcnkpICovCit9IGlkZV9waW9fdGltaW5nc190OworCit0eXBlZGVmIHN0cnVjdCBpZGVfcGlvX2RhdGFfcyB7CisJdTggcGlvX21vZGU7CisJdTggdXNlX2lvcmR5OworCXU4IG92ZXJyaWRkZW47CisJdTggYmxhY2tsaXN0ZWQ7CisJdW5zaWduZWQgaW50IGN5Y2xlX3RpbWU7Cit9IGlkZV9waW9fZGF0YV90OworCitleHRlcm4gdTggaWRlX2dldF9iZXN0X3Bpb19tb2RlIChpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IG1vZGVfd2FudGVkLCB1OCBtYXhfbW9kZSwgaWRlX3Bpb19kYXRhX3QgKmQpOworZXh0ZXJuIGNvbnN0IGlkZV9waW9fdGltaW5nc190IGlkZV9waW9fdGltaW5nc1s2XTsKKworCitleHRlcm4gc3BpbmxvY2tfdCBpZGVfbG9jazsKK2V4dGVybiBzdHJ1Y3Qgc2VtYXBob3JlIGlkZV9jZmdfc2VtOworLyoKKyAqIFN0cnVjdHVyZSBsb2NraW5nOgorICoKKyAqIGlkZV9jZmdfc2VtIGFuZCBpZGVfbG9jayB0b2dldGhlciBwcm90ZWN0IGNoYW5nZXMgdG8KKyAqIGlkZV9od2lmX3QtPntuZXh0LGh3Z3JvdXB9CisgKiBpZGVfZHJpdmVfdC0+bmV4dAorICoKKyAqIGlkZV9od2dyb3VwX3QtPmJ1c3k6IGlkZV9sb2NrCisgKiBpZGVfaHdncm91cF90LT5od2lmOiBpZGVfbG9jaworICogaWRlX2h3aWZfdC0+bWF0ZTogY29uc3RhbnQsIG5vIGxvY2tpbmcKKyAqIGlkZV9kcml2ZV90LT5od2lmOiBjb25zdGFudCwgbm8gbG9ja2luZworICovCisKKyNkZWZpbmUgbG9jYWxfaXJxX3NldChmbGFncykJZG8geyBsb2NhbF9zYXZlX2ZsYWdzKChmbGFncykpOyBsb2NhbF9pcnFfZW5hYmxlKCk7IH0gd2hpbGUgKDApCisKK2V4dGVybiBzdHJ1Y3QgYnVzX3R5cGUgaWRlX2J1c190eXBlOworCisvKiBjaGVjayBpZiBDQUNIRSBGTFVTSCAoRVhUKSBjb21tYW5kIGlzIHN1cHBvcnRlZCAoYml0cyBkZWZpbmVkIGluIEFUQS02KSAqLworI2RlZmluZSBpZGVfaWRfaGFzX2ZsdXNoX2NhY2hlKGlkKQkoKGlkKS0+Y2ZzX2VuYWJsZV8yICYgMHgzMDAwKQorCisvKiBzb21lIE1heHRvciBkaXNrcyBoYXZlIGJpdCAxMyBkZWZpbmVkIGluY29ycmVjdGx5IHNvIGNoZWNrIGJpdCAxMCB0b28gKi8KKyNkZWZpbmUgaWRlX2lkX2hhc19mbHVzaF9jYWNoZV9leHQoaWQpCVwKKwkoKChpZCktPmNmc19lbmFibGVfMiAmIDB4MjQwMCkgPT0gMHgyNDAwKQorCisjZW5kaWYgLyogX0lERV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lkci5oIGIvaW5jbHVkZS9saW51eC9pZHIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTNiN2U0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9pZHIuaApAQCAtMCwwICsxLDc4IEBACisvKgorICogaW5jbHVkZS9saW51eC9pZHIuaAorICogCisgKiAyMDAyLTEwLTE4ICB3cml0dGVuIGJ5IEppbSBIb3VzdG9uIGppbS5ob3VzdG9uQGNjdXIuY29tCisgKglDb3B5cmlnaHQgKEMpIDIwMDIgYnkgQ29uY3VycmVudCBDb21wdXRlciBDb3Jwb3JhdGlvbgorICoJRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEdOVSBHUEwgbGljZW5zZSB2ZXJzaW9uIDIuCisgKgorICogU21hbGwgaWQgdG8gcG9pbnRlciB0cmFuc2xhdGlvbiBzZXJ2aWNlIGF2b2lkaW5nIGZpeGVkIHNpemVkCisgKiB0YWJsZXMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorCisjaWYgQklUU19QRVJfTE9ORyA9PSAzMgorIyBkZWZpbmUgSURSX0JJVFMgNQorIyBkZWZpbmUgSURSX0ZVTEwgMHhmZmZmZmZmZnVsCisvKiBXZSBjYW4gb25seSB1c2UgdHdvIG9mIHRoZSBiaXRzIGluIHRoZSB0b3AgbGV2ZWwgYmVjYXVzZSB0aGVyZSBpcworICAgb25seSBvbmUgcG9zc2libGUgYml0IGluIHRoZSB0b3AgbGV2ZWwgKDUgYml0cyAqIDcgbGV2ZWxzID0gMzUKKyAgIGJpdHMsIGJ1dCB5b3Ugb25seSB1c2UgMzEgYml0cyBpbiB0aGUgaWQpLiAqLworIyBkZWZpbmUgVE9QX0xFVkVMX0ZVTEwgKElEUl9GVUxMID4+IDMwKQorI2VsaWYgQklUU19QRVJfTE9ORyA9PSA2NAorIyBkZWZpbmUgSURSX0JJVFMgNgorIyBkZWZpbmUgSURSX0ZVTEwgMHhmZmZmZmZmZmZmZmZmZmZmdWwKKy8qIFdlIGNhbiBvbmx5IHVzZSB0d28gb2YgdGhlIGJpdHMgaW4gdGhlIHRvcCBsZXZlbCBiZWNhdXNlIHRoZXJlIGlzCisgICBvbmx5IG9uZSBwb3NzaWJsZSBiaXQgaW4gdGhlIHRvcCBsZXZlbCAoNiBiaXRzICogNiBsZXZlbHMgPSAzNgorICAgYml0cywgYnV0IHlvdSBvbmx5IHVzZSAzMSBiaXRzIGluIHRoZSBpZCkuICovCisjIGRlZmluZSBUT1BfTEVWRUxfRlVMTCAoSURSX0ZVTEwgPj4gNjIpCisjZWxzZQorIyBlcnJvciAiQklUU19QRVJfTE9ORyBpcyBub3QgMzIgb3IgNjQiCisjZW5kaWYKKworI2RlZmluZSBJRFJfU0laRSAoMSA8PCBJRFJfQklUUykKKyNkZWZpbmUgSURSX01BU0sgKCgxIDw8IElEUl9CSVRTKS0xKQorCisjZGVmaW5lIE1BWF9JRF9TSElGVCAoc2l6ZW9mKGludCkqOCAtIDEpCisjZGVmaW5lIE1BWF9JRF9CSVQgKDFVIDw8IE1BWF9JRF9TSElGVCkKKyNkZWZpbmUgTUFYX0lEX01BU0sgKE1BWF9JRF9CSVQgLSAxKQorCisvKiBMZWF2ZSB0aGUgcG9zc2liaWxpdHkgb2YgYW4gaW5jb21wbGV0ZSBmaW5hbCBsYXllciAqLworI2RlZmluZSBNQVhfTEVWRUwgKE1BWF9JRF9TSElGVCArIElEUl9CSVRTIC0gMSkgLyBJRFJfQklUUworCisvKiBOdW1iZXIgb2YgaWRfbGF5ZXIgc3RydWN0cyB0byBsZWF2ZSBpbiBmcmVlIGxpc3QgKi8KKyNkZWZpbmUgSURSX0ZSRUVfTUFYIE1BWF9MRVZFTCArIE1BWF9MRVZFTAorCitzdHJ1Y3QgaWRyX2xheWVyIHsKKwl1bnNpZ25lZCBsb25nCQkgYml0bWFwOyAvKiBBIHplcm8gYml0IG1lYW5zICJzcGFjZSBoZXJlIiAqLworCXN0cnVjdCBpZHJfbGF5ZXIJKmFyeVsxPDxJRFJfQklUU107CisJaW50CQkJIGNvdW50OwkgLyogV2hlbiB6ZXJvLCB3ZSBjYW4gcmVsZWFzZSBpdCAqLworfTsKKworc3RydWN0IGlkciB7CisJc3RydWN0IGlkcl9sYXllciAqdG9wOworCXN0cnVjdCBpZHJfbGF5ZXIgKmlkX2ZyZWU7CisJaW50CQkgIGxheWVyczsKKwlpbnQJCSAgaWRfZnJlZV9jbnQ7CisJc3BpbmxvY2tfdAkgIGxvY2s7Cit9OworCisjZGVmaW5lIElEUl9JTklUKG5hbWUpCQkJCQkJXAorewkJCQkJCQkJXAorCS50b3AJCT0gTlVMTCwJCQkJCVwKKwkuaWRfZnJlZQk9IE5VTEwsCQkJCQlcCisJLmxheWVycyAJPSAwLAkJCQkJXAorCS5pZF9mcmVlX2NudAk9IDAsCQkJCQlcCisJLmxvY2sJCT0gU1BJTl9MT0NLX1VOTE9DS0VELAkJCVwKK30KKyNkZWZpbmUgREVGSU5FX0lEUihuYW1lKQlzdHJ1Y3QgaWRyIG5hbWUgPSBJRFJfSU5JVChuYW1lKQorCisvKgorICogVGhpcyBpcyB3aGF0IHdlIGV4cG9ydC4KKyAqLworCit2b2lkICppZHJfZmluZChzdHJ1Y3QgaWRyICppZHAsIGludCBpZCk7CitpbnQgaWRyX3ByZV9nZXQoc3RydWN0IGlkciAqaWRwLCB1bnNpZ25lZCBnZnBfbWFzayk7CitpbnQgaWRyX2dldF9uZXcoc3RydWN0IGlkciAqaWRwLCB2b2lkICpwdHIsIGludCAqaWQpOworaW50IGlkcl9nZXRfbmV3X2Fib3ZlKHN0cnVjdCBpZHIgKmlkcCwgdm9pZCAqcHRyLCBpbnQgc3RhcnRpbmdfaWQsIGludCAqaWQpOwordm9pZCBpZHJfcmVtb3ZlKHN0cnVjdCBpZHIgKmlkcCwgaW50IGlkKTsKK3ZvaWQgaWRyX2luaXQoc3RydWN0IGlkciAqaWRwKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWYuaCBiL2luY2x1ZGUvbGludXgvaWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTAyODJkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9pZi5oCkBAIC0wLDAgKzEsMTkzIEBACisvKgorICogSU5FVAkJQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIFRDUC9JUCBwcm90b2NvbCBzdWl0ZSBmb3IgdGhlIExJTlVYCisgKgkJb3BlcmF0aW5nIHN5c3RlbS4gIElORVQgaXMgaW1wbGVtZW50ZWQgdXNpbmcgdGhlICBCU0QgU29ja2V0CisgKgkJaW50ZXJmYWNlIGFzIHRoZSBtZWFucyBvZiBjb21tdW5pY2F0aW9uIHdpdGggdGhlIHVzZXIgbGV2ZWwuCisgKgorICoJCUdsb2JhbCBkZWZpbml0aW9ucyBmb3IgdGhlIElORVQgaW50ZXJmYWNlIG1vZHVsZS4KKyAqCisgKiBWZXJzaW9uOglAKCMpaWYuaAkxLjAuMgkwNC8xOC85MworICoKKyAqIEF1dGhvcnM6CU9yaWdpbmFsIHRha2VuIGZyb20gQmVya2VsZXkgVU5JWCA0LjMsIChjKSBVQ0IgMTk4Mi0xOTg4CisgKgkJUm9zcyBCaXJvLCA8YmlyN0BsZWxhbmQuU3RhbmZvcmQuRWR1PgorICoJCUZyZWQgTi4gdmFuIEtlbXBlbiwgPHdhbHRqZUB1V2FsdC5OTC5NdWduZXQuT1JHPgorICoKKyAqCQlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgkJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqCQlhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqCQkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisjaWZuZGVmIF9MSU5VWF9JRl9ICisjZGVmaW5lIF9MSU5VWF9JRl9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgkJLyogZm9yICJfX2tlcm5lbF9jYWRkcl90IiBldCBhbAkqLworI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPgkJLyogZm9yICJzdHJ1Y3Qgc29ja2FkZHIiIGV0IGFsCSovCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4JCS8qIGZvciAiX191c2VyIiBldCBhbCAgICAgICAgICAgKi8KKworI2RlZmluZQlJRk5BTVNJWgkxNgorI2luY2x1ZGUgPGxpbnV4L2hkbGMvaW9jdGwuaD4KKworLyogU3RhbmRhcmQgaW50ZXJmYWNlIGZsYWdzIChuZXRkZXZpY2UtPmZsYWdzKS4gKi8KKyNkZWZpbmUJSUZGX1VQCQkweDEJCS8qIGludGVyZmFjZSBpcyB1cAkJKi8KKyNkZWZpbmUJSUZGX0JST0FEQ0FTVAkweDIJCS8qIGJyb2FkY2FzdCBhZGRyZXNzIHZhbGlkCSovCisjZGVmaW5lCUlGRl9ERUJVRwkweDQJCS8qIHR1cm4gb24gZGVidWdnaW5nCQkqLworI2RlZmluZQlJRkZfTE9PUEJBQ0sJMHg4CQkvKiBpcyBhIGxvb3BiYWNrIG5ldAkJKi8KKyNkZWZpbmUJSUZGX1BPSU5UT1BPSU5UCTB4MTAJCS8qIGludGVyZmFjZSBpcyBoYXMgcC1wIGxpbmsJKi8KKyNkZWZpbmUJSUZGX05PVFJBSUxFUlMJMHgyMAkJLyogYXZvaWQgdXNlIG9mIHRyYWlsZXJzCSovCisjZGVmaW5lCUlGRl9SVU5OSU5HCTB4NDAJCS8qIHJlc291cmNlcyBhbGxvY2F0ZWQJCSovCisjZGVmaW5lCUlGRl9OT0FSUAkweDgwCQkvKiBubyBBUlAgcHJvdG9jb2wJCSovCisjZGVmaW5lCUlGRl9QUk9NSVNDCTB4MTAwCQkvKiByZWNlaXZlIGFsbCBwYWNrZXRzCQkqLworI2RlZmluZQlJRkZfQUxMTVVMVEkJMHgyMDAJCS8qIHJlY2VpdmUgYWxsIG11bHRpY2FzdCBwYWNrZXRzKi8KKworI2RlZmluZSBJRkZfTUFTVEVSCTB4NDAwCQkvKiBtYXN0ZXIgb2YgYSBsb2FkIGJhbGFuY2VyIAkqLworI2RlZmluZSBJRkZfU0xBVkUJMHg4MDAJCS8qIHNsYXZlIG9mIGEgbG9hZCBiYWxhbmNlcgkqLworCisjZGVmaW5lIElGRl9NVUxUSUNBU1QJMHgxMDAwCQkvKiBTdXBwb3J0cyBtdWx0aWNhc3QJCSovCisKKyNkZWZpbmUgSUZGX1ZPTEFUSUxFCShJRkZfTE9PUEJBQ0t8SUZGX1BPSU5UT1BPSU5UfElGRl9CUk9BRENBU1R8SUZGX01BU1RFUnxJRkZfU0xBVkV8SUZGX1JVTk5JTkcpCisKKyNkZWZpbmUgSUZGX1BPUlRTRUwJMHgyMDAwICAgICAgICAgIC8qIGNhbiBzZXQgbWVkaWEgdHlwZQkJKi8KKyNkZWZpbmUgSUZGX0FVVE9NRURJQQkweDQwMDAJCS8qIGF1dG8gbWVkaWEgc2VsZWN0IGFjdGl2ZQkqLworI2RlZmluZSBJRkZfRFlOQU1JQwkweDgwMDAJCS8qIGRpYWx1cCBkZXZpY2Ugd2l0aCBjaGFuZ2luZyBhZGRyZXNzZXMqLworCisvKiBQcml2YXRlIChmcm9tIHVzZXIpIGludGVyZmFjZSBmbGFncyAobmV0ZGV2aWNlLT5wcml2X2ZsYWdzKS4gKi8KKyNkZWZpbmUgSUZGXzgwMl8xUV9WTEFOIDB4MSAgICAgICAgICAgICAvKiA4MDIuMVEgVkxBTiBkZXZpY2UuICAgICAgICAgICovCisjZGVmaW5lIElGRl9FQlJJREdFCTB4MgkJLyogRXRoZXJuZXQgYnJpZGdpbmcgZGV2aWNlLgkqLworCisjZGVmaW5lIElGX0dFVF9JRkFDRQkweDAwMDEJCS8qIGZvciBxdWVyeWluZyBvbmx5ICovCisjZGVmaW5lIElGX0dFVF9QUk9UTwkweDAwMDIKKworLyogRm9yIGRlZmluaXRpb25zIHNlZSBoZGxjLmggKi8KKyNkZWZpbmUgSUZfSUZBQ0VfVjM1CTB4MTAwMAkJLyogVi4zNSBzZXJpYWwgaW50ZXJmYWNlCSovCisjZGVmaW5lIElGX0lGQUNFX1YyNAkweDEwMDEJCS8qIFYuMjQgc2VyaWFsIGludGVyZmFjZQkqLworI2RlZmluZSBJRl9JRkFDRV9YMjEJMHgxMDAyCQkvKiBYLjIxIHNlcmlhbCBpbnRlcmZhY2UJKi8KKyNkZWZpbmUgSUZfSUZBQ0VfVDEJMHgxMDAzCQkvKiBUMSB0ZWxjbyBzZXJpYWwgaW50ZXJmYWNlCSovCisjZGVmaW5lIElGX0lGQUNFX0UxCTB4MTAwNAkJLyogRTEgdGVsY28gc2VyaWFsIGludGVyZmFjZQkqLworI2RlZmluZSBJRl9JRkFDRV9TWU5DX1NFUklBTCAweDEwMDUJLyogY2FuJ3QgYmUgc2V0IGJ5IHNvZnR3YXJlCSovCisjZGVmaW5lIElGX0lGQUNFX1gyMUQgICAweDEwMDYgICAgICAgICAgLyogWC4yMSBEdWFsIENsb2NraW5nIChGYXJTaXRlKSAqLworCisvKiBGb3IgZGVmaW5pdGlvbnMgc2VlIGhkbGMuaCAqLworI2RlZmluZSBJRl9QUk9UT19IRExDCTB4MjAwMAkJLyogcmF3IEhETEMgcHJvdG9jb2wJCSovCisjZGVmaW5lIElGX1BST1RPX1BQUAkweDIwMDEJCS8qIFBQUCBwcm90b2NvbAkJCSovCisjZGVmaW5lIElGX1BST1RPX0NJU0NPCTB4MjAwMgkJLyogQ2lzY28gSERMQyBwcm90b2NvbAkJKi8KKyNkZWZpbmUgSUZfUFJPVE9fRlIJMHgyMDAzCQkvKiBGcmFtZSBSZWxheSBwcm90b2NvbAkJKi8KKyNkZWZpbmUgSUZfUFJPVE9fRlJfQUREX1BWQyAweDIwMDQJLyogICAgQ3JlYXRlIEZSIFBWQwkJKi8KKyNkZWZpbmUgSUZfUFJPVE9fRlJfREVMX1BWQyAweDIwMDUJLyogICAgRGVsZXRlIEZSIFBWQwkJKi8KKyNkZWZpbmUgSUZfUFJPVE9fWDI1CTB4MjAwNgkJLyogWC4yNQkJCQkqLworI2RlZmluZSBJRl9QUk9UT19IRExDX0VUSCAweDIwMDcJLyogcmF3IEhETEMsIEV0aGVybmV0IGVtdWxhdGlvbgkqLworI2RlZmluZSBJRl9QUk9UT19GUl9BRERfRVRIX1BWQyAweDIwMDgJLyogIENyZWF0ZSBGUiBFdGhlcm5ldC1icmlkZ2VkIFBWQyAqLworI2RlZmluZSBJRl9QUk9UT19GUl9ERUxfRVRIX1BWQyAweDIwMDkJLyogIERlbGV0ZSBGUiBFdGhlcm5ldC1icmlkZ2VkIFBWQyAqLworI2RlZmluZSBJRl9QUk9UT19GUl9QVkMJMHgyMDBBCQkvKiBmb3IgcmVhZGluZyBQVkMgc3RhdHVzCSovCisjZGVmaW5lIElGX1BST1RPX0ZSX0VUSF9QVkMgMHgyMDBCCisjZGVmaW5lIElGX1BST1RPX1JBVyAgICAweDIwMEMgICAgICAgICAgLyogUkFXIFNvY2tldCAgICAgICAgICAgICAgICAgICAqLworCisKKy8qCisgKglEZXZpY2UgbWFwcGluZyBzdHJ1Y3R1cmUuIEknZCBqdXN0IGdvbmUgb2ZmIGFuZCBkZXNpZ25lZCBhIAorICoJYmVhdXRpZnVsIHNjaGVtZSB1c2luZyBvbmx5IGxvYWRhYmxlIG1vZHVsZXMgd2l0aCBhcmd1bWVudHMKKyAqCWZvciBkcml2ZXIgb3B0aW9ucyBhbmQgYWxvbmcgY29tZSB0aGUgUENNQ0lBIHBlb3BsZSA4KQorICoKKyAqCUFoIHdlbGwuIFRoZSBnZXQoKSBzaWRlIG9mIHRoaXMgaXMgZ29vZCBmb3IgV0RTRVRVUCwgYW5kIGl0J2xsCisgKgliZSBoYW5keSBmb3IgZGVidWdnaW5nIHRoaW5ncy4gVGhlIHNldCBzaWRlIGlzIGZpbmUgZm9yIG5vdyBhbmQKKyAqCWJlaW5nIHZlcnkgc21hbGwgbWlnaHQgYmUgd29ydGgga2VlcGluZyBmb3IgY2xlYW4gY29uZmlndXJhdGlvbi4KKyAqLworCitzdHJ1Y3QgaWZtYXAgCit7CisJdW5zaWduZWQgbG9uZyBtZW1fc3RhcnQ7CisJdW5zaWduZWQgbG9uZyBtZW1fZW5kOworCXVuc2lnbmVkIHNob3J0IGJhc2VfYWRkcjsgCisJdW5zaWduZWQgY2hhciBpcnE7CisJdW5zaWduZWQgY2hhciBkbWE7CisJdW5zaWduZWQgY2hhciBwb3J0OworCS8qIDMgYnl0ZXMgc3BhcmUgKi8KK307CisKK3N0cnVjdCBpZl9zZXR0aW5ncworeworCXVuc2lnbmVkIGludCB0eXBlOwkvKiBUeXBlIG9mIHBoeXNpY2FsIGRldmljZSBvciBwcm90b2NvbCAqLworCXVuc2lnbmVkIGludCBzaXplOwkvKiBTaXplIG9mIHRoZSBkYXRhIGFsbG9jYXRlZCBieSB0aGUgY2FsbGVyICovCisJdW5pb24geworCQkvKiB7YXRtL2V0aC9kc2x9X3NldHRpbmdzIGFueW9uZSA/ICovCisJCXJhd19oZGxjX3Byb3RvCQlfX3VzZXIgKnJhd19oZGxjOworCQljaXNjb19wcm90bwkJX191c2VyICpjaXNjbzsKKwkJZnJfcHJvdG8JCV9fdXNlciAqZnI7CisJCWZyX3Byb3RvX3B2YwkJX191c2VyICpmcl9wdmM7CisJCWZyX3Byb3RvX3B2Y19pbmZvCV9fdXNlciAqZnJfcHZjX2luZm87CisKKwkJLyogaW50ZXJmYWNlIHNldHRpbmdzICovCisJCXN5bmNfc2VyaWFsX3NldHRpbmdzCV9fdXNlciAqc3luYzsKKwkJdGUxX3NldHRpbmdzCQlfX3VzZXIgKnRlMTsKKwl9IGlmc19pZnN1OworfTsKKworLyoKKyAqIEludGVyZmFjZSByZXF1ZXN0IHN0cnVjdHVyZSB1c2VkIGZvciBzb2NrZXQKKyAqIGlvY3RsJ3MuICBBbGwgaW50ZXJmYWNlIGlvY3RsJ3MgbXVzdCBoYXZlIHBhcmFtZXRlcgorICogZGVmaW5pdGlvbnMgd2hpY2ggYmVnaW4gd2l0aCBpZnJfbmFtZS4gIFRoZQorICogcmVtYWluZGVyIG1heSBiZSBpbnRlcmZhY2Ugc3BlY2lmaWMuCisgKi8KKworc3RydWN0IGlmcmVxIAoreworI2RlZmluZSBJRkhXQUREUkxFTgk2CisJdW5pb24KKwl7CisJCWNoYXIJaWZybl9uYW1lW0lGTkFNU0laXTsJCS8qIGlmIG5hbWUsIGUuZy4gImVuMCIgKi8KKwl9IGlmcl9pZnJuOworCQorCXVuaW9uIHsKKwkJc3RydWN0CXNvY2thZGRyIGlmcnVfYWRkcjsKKwkJc3RydWN0CXNvY2thZGRyIGlmcnVfZHN0YWRkcjsKKwkJc3RydWN0CXNvY2thZGRyIGlmcnVfYnJvYWRhZGRyOworCQlzdHJ1Y3QJc29ja2FkZHIgaWZydV9uZXRtYXNrOworCQlzdHJ1Y3QgIHNvY2thZGRyIGlmcnVfaHdhZGRyOworCQlzaG9ydAlpZnJ1X2ZsYWdzOworCQlpbnQJaWZydV9pdmFsdWU7CisJCWludAlpZnJ1X210dTsKKwkJc3RydWN0ICBpZm1hcCBpZnJ1X21hcDsKKwkJY2hhcglpZnJ1X3NsYXZlW0lGTkFNU0laXTsJLyogSnVzdCBmaXRzIHRoZSBzaXplICovCisJCWNoYXIJaWZydV9uZXduYW1lW0lGTkFNU0laXTsKKwkJdm9pZCBfX3VzZXIgKglpZnJ1X2RhdGE7CisJCXN0cnVjdAlpZl9zZXR0aW5ncyBpZnJ1X3NldHRpbmdzOworCX0gaWZyX2lmcnU7Cit9OworCisjZGVmaW5lIGlmcl9uYW1lCWlmcl9pZnJuLmlmcm5fbmFtZQkvKiBpbnRlcmZhY2UgbmFtZSAJKi8KKyNkZWZpbmUgaWZyX2h3YWRkcglpZnJfaWZydS5pZnJ1X2h3YWRkcgkvKiBNQUMgYWRkcmVzcyAJCSovCisjZGVmaW5lCWlmcl9hZGRyCWlmcl9pZnJ1LmlmcnVfYWRkcgkvKiBhZGRyZXNzCQkqLworI2RlZmluZQlpZnJfZHN0YWRkcglpZnJfaWZydS5pZnJ1X2RzdGFkZHIJLyogb3RoZXIgZW5kIG9mIHAtcCBsbmsJKi8KKyNkZWZpbmUJaWZyX2Jyb2FkYWRkcglpZnJfaWZydS5pZnJ1X2Jyb2FkYWRkcgkvKiBicm9hZGNhc3QgYWRkcmVzcwkqLworI2RlZmluZQlpZnJfbmV0bWFzawlpZnJfaWZydS5pZnJ1X25ldG1hc2sJLyogaW50ZXJmYWNlIG5ldCBtYXNrCSovCisjZGVmaW5lCWlmcl9mbGFncwlpZnJfaWZydS5pZnJ1X2ZsYWdzCS8qIGZsYWdzCQkqLworI2RlZmluZQlpZnJfbWV0cmljCWlmcl9pZnJ1LmlmcnVfaXZhbHVlCS8qIG1ldHJpYwkJKi8KKyNkZWZpbmUJaWZyX210dQkJaWZyX2lmcnUuaWZydV9tdHUJLyogbXR1CQkJKi8KKyNkZWZpbmUgaWZyX21hcAkJaWZyX2lmcnUuaWZydV9tYXAJLyogZGV2aWNlIG1hcAkJKi8KKyNkZWZpbmUgaWZyX3NsYXZlCWlmcl9pZnJ1LmlmcnVfc2xhdmUJLyogc2xhdmUgZGV2aWNlCQkqLworI2RlZmluZQlpZnJfZGF0YQlpZnJfaWZydS5pZnJ1X2RhdGEJLyogZm9yIHVzZSBieSBpbnRlcmZhY2UJKi8KKyNkZWZpbmUgaWZyX2lmaW5kZXgJaWZyX2lmcnUuaWZydV9pdmFsdWUJLyogaW50ZXJmYWNlIGluZGV4CSovCisjZGVmaW5lIGlmcl9iYW5kd2lkdGgJaWZyX2lmcnUuaWZydV9pdmFsdWUgICAgLyogbGluayBiYW5kd2lkdGgJKi8KKyNkZWZpbmUgaWZyX3FsZW4JaWZyX2lmcnUuaWZydV9pdmFsdWUJLyogUXVldWUgbGVuZ3RoIAkqLworI2RlZmluZSBpZnJfbmV3bmFtZQlpZnJfaWZydS5pZnJ1X25ld25hbWUJLyogTmV3IG5hbWUJCSovCisjZGVmaW5lIGlmcl9zZXR0aW5ncwlpZnJfaWZydS5pZnJ1X3NldHRpbmdzCS8qIERldmljZS9wcm90byBzZXR0aW5ncyovCisKKy8qCisgKiBTdHJ1Y3R1cmUgdXNlZCBpbiBTSU9DR0lGQ09ORiByZXF1ZXN0LgorICogVXNlZCB0byByZXRyaWV2ZSBpbnRlcmZhY2UgY29uZmlndXJhdGlvbgorICogZm9yIG1hY2hpbmUgKHVzZWZ1bCBmb3IgcHJvZ3JhbXMgd2hpY2gKKyAqIG11c3Qga25vdyBhbGwgbmV0d29ya3MgYWNjZXNzaWJsZSkuCisgKi8KKworc3RydWN0IGlmY29uZiAKK3sKKwlpbnQJaWZjX2xlbjsJCQkvKiBzaXplIG9mIGJ1ZmZlcgkqLworCXVuaW9uIAorCXsKKwkJY2hhciBfX3VzZXIgKmlmY3VfYnVmOworCQlzdHJ1Y3QgaWZyZXEgX191c2VyICppZmN1X3JlcTsKKwl9IGlmY19pZmN1OworfTsKKyNkZWZpbmUJaWZjX2J1ZglpZmNfaWZjdS5pZmN1X2J1ZgkJLyogYnVmZmVyIGFkZHJlc3MJKi8KKyNkZWZpbmUJaWZjX3JlcQlpZmNfaWZjdS5pZmN1X3JlcQkJLyogYXJyYXkgb2Ygc3RydWN0dXJlcwkqLworCisKKyNlbmRpZiAvKiBfTElOVVhfSUZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl9hcmNuZXQuaCBiL2luY2x1ZGUvbGludXgvaWZfYXJjbmV0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYzODBjYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvaWZfYXJjbmV0LmgKQEAgLTAsMCArMSwxMzcgQEAKKy8qCisgKiBJTkVUICAgICAgICAgQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIFRDUC9JUCBwcm90b2NvbCBzdWl0ZSBmb3IgdGhlIExJTlVYCisgKiAgICAgICAgICAgICAgb3BlcmF0aW5nIHN5c3RlbS4gIElORVQgaXMgaW1wbGVtZW50ZWQgdXNpbmcgdGhlICBCU0QgU29ja2V0CisgKiAgICAgICAgICAgICAgaW50ZXJmYWNlIGFzIHRoZSBtZWFucyBvZiBjb21tdW5pY2F0aW9uIHdpdGggdGhlIHVzZXIgbGV2ZWwuCisgKgorICogICAgICAgICAgICAgIEdsb2JhbCBkZWZpbml0aW9ucyBmb3IgdGhlIEFSQ25ldCBpbnRlcmZhY2UuCisgKgorICogQXV0aG9yczogICAgIERhdmlkIFdvb2Rob3VzZSBhbmQgQXZlcnkgUGVubmFydW4KKyAqCisgKiAgICAgICAgICAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICAgICAgICAgICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgICAgICAgICAgICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAgICAgICAgICAgICAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9MSU5VWF9JRl9BUkNORVRfSAorI2RlZmluZSBfTElOVVhfSUZfQVJDTkVUX0gKKworI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CisKKworLyoKKyAqICAgIFRoZXNlIGFyZSB0aGUgZGVmaW5lZCBBUkNuZXQgUHJvdG9jb2wgSUQncy4KKyAqLworCisvKiBDQVAgbW9kZSAqLworLyogTm8gbWFjcm8gYnV0IHVzZXMgMS04ICovCisKKy8qIFJGQzEyMDEgUHJvdG9jb2wgSUQncyAqLworI2RlZmluZSBBUkNfUF9JUAkJMjEyCS8qIDB4RDQgKi8KKyNkZWZpbmUgQVJDX1BfSVBWNgkJMTk2CS8qIDB4QzQ6IFJGQzI0OTcgKi8KKyNkZWZpbmUgQVJDX1BfQVJQCQkyMTMJLyogMHhENSAqLworI2RlZmluZSBBUkNfUF9SQVJQCQkyMTQJLyogMHhENiAqLworI2RlZmluZSBBUkNfUF9JUFgJCTI1MAkvKiAweEZBICovCisjZGVmaW5lIEFSQ19QX05PVkVMTF9FQwkJMjM2CS8qIDB4RUMgKi8KKworLyogT2xkIFJGQzEwNTEgUHJvdG9jb2wgSUQncyAqLworI2RlZmluZSBBUkNfUF9JUF9SRkMxMDUxCTI0MAkvKiAweEYwICovCisjZGVmaW5lIEFSQ19QX0FSUF9SRkMxMDUxCTI0MQkvKiAweEYxICovCisKKy8qIE1TIExhbk1hbi9XZldnICJORElTIiBlbmNhcHN1bGF0aW9uICovCisjZGVmaW5lIEFSQ19QX0VUSEVSCQkyMzIJLyogMHhFOCAqLworCisvKiBVbnN1cHBvcnRlZC9pbmRpcmVjdGx5IHN1cHBvcnRlZCBwcm90b2NvbHMgKi8KKyNkZWZpbmUgQVJDX1BfREFUQVBPSU5UX0JPT1QJMAkvKiB2ZXJ5IG9sZCBEYXRhcG9pbnQgZXF1aXBtZW50ICovCisjZGVmaW5lIEFSQ19QX0RBVEFQT0lOVF9NT1VOVAkxCisjZGVmaW5lIEFSQ19QX1BPV0VSTEFOX0JFQUNPTgk4CS8qIFByb2JhYmx5IEFUQS1OZXRiaW9zIHJlbGF0ZWQgKi8KKyNkZWZpbmUgQVJDX1BfUE9XRVJMQU5fQkVBQ09OMgkyNDMJLyogMHhGMyAqLworI2RlZmluZSBBUkNfUF9MQU5TT0ZUCQkyNTEJLyogMHhGQiAtIHdoYXQgaXMgdGhpcz8gKi8KKyNkZWZpbmUgQVJDX1BfQVRBTEsJCTB4REQKKworLyogSGFyZHdhcmUgYWRkcmVzcyBsZW5ndGggKi8KKyNkZWZpbmUgQVJDTkVUX0FMRU4JMQorCisvKgorICogVGhlIFJGQzEyMDEtc3BlY2lmaWMgY29tcG9uZW50cyBvZiBhbiBhcmNuZXQgcGFja2V0IGhlYWRlci4KKyAqLworc3RydWN0IGFyY19yZmMxMjAxCit7CisgICAgdWludDhfdCAgcHJvdG87CQkvKiBwcm90b2NvbCBJRCBmaWVsZCAtIHZhcmllcwkJKi8KKyAgICB1aW50OF90ICBzcGxpdF9mbGFnOwkvKiBmb3IgdXNlIHdpdGggc3BsaXQgcGFja2V0cwkJKi8KKyAgICB1aW50MTZfdCBzZXF1ZW5jZTsJCS8qIHNlcXVlbmNlIG51bWJlcgkJCSovCisgICAgdWludDhfdCAgcGF5bG9hZFswXTsJLyogc3BhY2UgcmVtYWluaW5nIGluIHBhY2tldCAoNTA0IGJ5dGVzKSovCit9OworI2RlZmluZSBSRkMxMjAxX0hEUl9TSVpFIDQKKworCisvKgorICogVGhlIFJGQzEwNTEtc3BlY2lmaWMgY29tcG9uZW50cy4KKyAqLworc3RydWN0IGFyY19yZmMxMDUxCit7CisgICAgdWludDhfdCBwcm90bzsJCS8qIEFSQ19QX1JGQzEwNTFfQVJQL1JGQzEwNTFfSVAJKi8KKyAgICB1aW50OF90IHBheWxvYWRbMF07CQkvKiA1MDcgYnl0ZXMJCQkqLworfTsKKyNkZWZpbmUgUkZDMTA1MV9IRFJfU0laRSAxCisKKworLyoKKyAqIFRoZSBldGhlcm5ldC1lbmNhcC1zcGVjaWZpYyBjb21wb25lbnRzLiAgV2UgaGF2ZSBhIHJlYWwgZXRoZXJuZXQgaGVhZGVyCisgKiBhbmQgc29tZSBkYXRhLgorICovCitzdHJ1Y3QgYXJjX2V0aF9lbmNhcAoreworICAgIHVpbnQ4X3QgcHJvdG87CQkvKiBBbHdheXMgQVJDX1BfRVRIRVIJCQkqLworICAgIHN0cnVjdCBldGhoZHIgZXRoOwkJLyogc3RhbmRhcmQgZXRoZXJuZXQgaGVhZGVyICh5dWNrISkJKi8KKyAgICB1aW50OF90IHBheWxvYWRbMF07CQkvKiA0OTMgYnl0ZXMJCQkJKi8KK307CisjZGVmaW5lIEVUSF9FTkNBUF9IRFJfU0laRSAxNAorCisKK3N0cnVjdCBhcmNfY2FwCit7CisJdWludDhfdCBwcm90bzsKKwl1aW50OF90IGNvb2tpZVtzaXplb2YoaW50KV07ICAgLyogQWN0dWFsbHkgTk9UIHNlbnQgb3ZlciB0aGUgbmV0d29yayAqLworCXVuaW9uIHsKKwkJdWludDhfdCBhY2s7CisJCXVpbnQ4X3QgcmF3WzBdOwkJLyogNTA3IGJ5dGVzICovCisJfSBtZXM7Cit9OworCisvKgorICogVGhlIGRhdGEgbmVlZGVkIGJ5IHRoZSBhY3R1YWwgYXJjbmV0IGhhcmR3YXJlLgorICoKKyAqIE5vdywgaW4gdGhlIHJlYWwgYXJjbmV0IGhhcmR3YXJlLCB0aGUgdGhpcmQgYW5kIGZvdXJ0aCBieXRlcyBhcmUgdGhlCisgKiAnb2Zmc2V0JyBzcGVjaWZpY2F0aW9uIGluc3RlYWQgb2YgdGhlIGxlbmd0aCwgYW5kIHRoZSBzb2Z0IGRhdGEgaXMgYXQKKyAqIHRoZSBfZW5kXyBvZiB0aGUgNTEyLWJ5dGUgYnVmZmVyLiAgV2UgaGlkZSB0aGlzIGNvbXBsZXhpdHkgaW5zaWRlIHRoZQorICogZHJpdmVyLgorICovCitzdHJ1Y3QgYXJjX2hhcmR3YXJlCit7CisgICAgdWludDhfdCAgc291cmNlLAkJLyogc291cmNlIEFSQ25ldCAtIGZpbGxlZCBpbiBhdXRvbWFnaWNhbGx5ICovCisgICAgICAgICAgICAgZGVzdCwJCS8qIGRlc3RpbmF0aW9uIEFSQ25ldCAtIDAgZm9yIGJyb2FkY2FzdCAgICAqLworICAgIAkgICAgIG9mZnNldFsyXTsJCS8qIG9mZnNldCBieXRlcyAoc29tZSB3ZWlyZCBzZW1hbnRpY3MpICAgICAqLworfTsKKyNkZWZpbmUgQVJDX0hEUl9TSVpFIDQKKworLyoKKyAqIFRoaXMgaXMgYW4gQVJDbmV0IGZyYW1lIGhlYWRlciwgYXMgc2VlbiBieSB0aGUga2VybmVsIChhbmQgdXNlcnNwYWNlLAorICogd2hlbiB5b3UgZG8gYSByYXcgcGFja2V0IGNhcHR1cmUpLgorICovCitzdHJ1Y3QgYXJjaGRyCit7CisgICAgLyogaGFyZHdhcmUgcmVxdWlyZW1lbnRzICovCisgICAgc3RydWN0IGFyY19oYXJkd2FyZSBoYXJkOworICAgICAKKyAgICAvKiBhcmNuZXQgZW5jYXBzdWxhdGlvbi1zcGVjaWZpYyBiaXRzICovCisgICAgdW5pb24geworCXN0cnVjdCBhcmNfcmZjMTIwMSAgIHJmYzEyMDE7CisJc3RydWN0IGFyY19yZmMxMDUxICAgcmZjMTA1MTsKKwlzdHJ1Y3QgYXJjX2V0aF9lbmNhcCBldGhfZW5jYXA7CisJc3RydWN0IGFyY19jYXAgICAgICAgY2FwOworCXVpbnQ4X3QgcmF3WzBdOwkJLyogNTA4IGJ5dGVzCQkJCSovCisgICAgfSBzb2Z0OworfTsKKworI2VuZGlmCQkJCS8qIF9MSU5VWF9JRl9BUkNORVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl9hcnAuaCBiL2luY2x1ZGUvbGludXgvaWZfYXJwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJmNDliYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvaWZfYXJwLmgKQEAgLTAsMCArMSwxNTAgQEAKKy8qCisgKiBJTkVUCQlBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgVENQL0lQIHByb3RvY29sIHN1aXRlIGZvciB0aGUgTElOVVgKKyAqCQlvcGVyYXRpbmcgc3lzdGVtLiAgSU5FVCBpcyBpbXBsZW1lbnRlZCB1c2luZyB0aGUgIEJTRCBTb2NrZXQKKyAqCQlpbnRlcmZhY2UgYXMgdGhlIG1lYW5zIG9mIGNvbW11bmljYXRpb24gd2l0aCB0aGUgdXNlciBsZXZlbC4KKyAqCisgKgkJR2xvYmFsIGRlZmluaXRpb25zIGZvciB0aGUgQVJQIChSRkMgODI2KSBwcm90b2NvbC4KKyAqCisgKiBWZXJzaW9uOglAKCMpaWZfYXJwLmgJMS4wLjEJMDQvMTYvOTMKKyAqCisgKiBBdXRob3JzOglPcmlnaW5hbCB0YWtlbiBmcm9tIEJlcmtlbGV5IFVOSVggNC4zLCAoYykgVUNCIDE5ODYtMTk4OAorICoJCVBvcnRpb25zIHRha2VuIGZyb20gdGhlIEtBOVEvTk9TICh2Mi4wMG0gUEEwR1JJKSBzb3VyY2UuCisgKgkJUm9zcyBCaXJvLCA8YmlyN0BsZWxhbmQuU3RhbmZvcmQuRWR1PgorICoJCUZyZWQgTi4gdmFuIEtlbXBlbiwgPHdhbHRqZUB1V2FsdC5OTC5NdWduZXQuT1JHPgorICoJCUZsb3JpYW4gTGEgUm9jaGUsCisgKgkJSm9uYXRoYW4gTGF5ZXMgPGxheWVzQGxvcmFuLmNvbT4KKyAqCQlBcm5hbGRvIENhcnZhbGhvIGRlIE1lbG8gPGFjbWVAY29uZWN0aXZhLmNvbS5icj4gQVJQSFJEX0hXWDI1CisgKgorICoJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCQltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICoJCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICoJCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpZm5kZWYgX0xJTlVYX0lGX0FSUF9ICisjZGVmaW5lIF9MSU5VWF9JRl9BUlBfSAorCisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisKKy8qIEFSUCBwcm90b2NvbCBIQVJEV0FSRSBpZGVudGlmaWVycy4gKi8KKyNkZWZpbmUgQVJQSFJEX05FVFJPTQkwCQkvKiBmcm9tIEtBOVE6IE5FVC9ST00gcHNldWRvCSovCisjZGVmaW5lIEFSUEhSRF9FVEhFUiAJMQkJLyogRXRoZXJuZXQgMTBNYnBzCQkqLworI2RlZmluZQlBUlBIUkRfRUVUSEVSCTIJCS8qIEV4cGVyaW1lbnRhbCBFdGhlcm5ldAkqLworI2RlZmluZQlBUlBIUkRfQVgyNQkzCQkvKiBBWC4yNSBMZXZlbCAyCQkqLworI2RlZmluZQlBUlBIUkRfUFJPTkVUCTQJCS8qIFBST25ldCB0b2tlbiByaW5nCQkqLworI2RlZmluZQlBUlBIUkRfQ0hBT1MJNQkJLyogQ2hhb3NuZXQJCQkqLworI2RlZmluZQlBUlBIUkRfSUVFRTgwMgk2CQkvKiBJRUVFIDgwMi4yIEV0aGVybmV0L1RSL1RCCSovCisjZGVmaW5lCUFSUEhSRF9BUkNORVQJNwkJLyogQVJDbmV0CQkJKi8KKyNkZWZpbmUJQVJQSFJEX0FQUExFVExLCTgJCS8qIEFQUExFdGFsawkJCSovCisjZGVmaW5lIEFSUEhSRF9ETENJCTE1CQkvKiBGcmFtZSBSZWxheSBETENJCQkqLworI2RlZmluZSBBUlBIUkRfQVRNCTE5CQkvKiBBVE0gCQkJCSovCisjZGVmaW5lIEFSUEhSRF9NRVRSSUNPTQkyMwkJLyogTWV0cmljb20gU1RSSVAgKG5ldyBJQU5BIGlkKQkqLworI2RlZmluZQlBUlBIUkRfSUVFRTEzOTQJMjQJCS8qIElFRUUgMTM5NCBJUHY0IC0gUkZDIDI3MzQJKi8KKyNkZWZpbmUgQVJQSFJEX0VVSTY0CTI3CQkvKiBFVUktNjQgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFSUEhSRF9JTkZJTklCQU5EIDMyCQkvKiBJbmZpbmlCYW5kCQkJKi8KKworLyogRHVtbXkgdHlwZXMgZm9yIG5vbiBBUlAgaGFyZHdhcmUgKi8KKyNkZWZpbmUgQVJQSFJEX1NMSVAJMjU2CisjZGVmaW5lIEFSUEhSRF9DU0xJUAkyNTcKKyNkZWZpbmUgQVJQSFJEX1NMSVA2CTI1OAorI2RlZmluZSBBUlBIUkRfQ1NMSVA2CTI1OQorI2RlZmluZSBBUlBIUkRfUlNSVkQJMjYwCQkvKiBOb3Rpb25hbCBLSVNTIHR5cGUgCQkqLworI2RlZmluZSBBUlBIUkRfQURBUFQJMjY0CisjZGVmaW5lIEFSUEhSRF9ST1NFCTI3MAorI2RlZmluZSBBUlBIUkRfWDI1CTI3MQkJLyogQ0NJVFQgWC4yNQkJCSovCisjZGVmaW5lIEFSUEhSRF9IV1gyNQkyNzIJCS8qIEJvYXJkcyB3aXRoIFguMjUgaW4gZmlybXdhcmUJKi8KKyNkZWZpbmUgQVJQSFJEX1BQUAk1MTIKKyNkZWZpbmUgQVJQSFJEX0NJU0NPCTUxMwkJLyogQ2lzY28gSERMQwkgCQkqLworI2RlZmluZSBBUlBIUkRfSERMQwlBUlBIUkRfQ0lTQ08KKyNkZWZpbmUgQVJQSFJEX0xBUEIJNTE2CQkvKiBMQVBCCQkJCSovCisjZGVmaW5lIEFSUEhSRF9ERENNUCAgICA1MTcJCS8qIERpZ2l0YWwncyBERENNUCBwcm90b2NvbCAgICAgKi8KKyNkZWZpbmUgQVJQSFJEX1JBV0hETEMJNTE4CQkvKiBSYXcgSERMQwkJCSovCisKKyNkZWZpbmUgQVJQSFJEX1RVTk5FTAk3NjgJCS8qIElQSVAgdHVubmVsCQkJKi8KKyNkZWZpbmUgQVJQSFJEX1RVTk5FTDYJNzY5CQkvKiBJUDZJUDYgdHVubmVsICAgICAgIAkJKi8KKyNkZWZpbmUgQVJQSFJEX0ZSQUQJNzcwICAgICAgICAgICAgIC8qIEZyYW1lIFJlbGF5IEFjY2VzcyBEZXZpY2UgICAgKi8KKyNkZWZpbmUgQVJQSFJEX1NLSVAJNzcxCQkvKiBTS0lQIHZpZgkJCSovCisjZGVmaW5lIEFSUEhSRF9MT09QQkFDSwk3NzIJCS8qIExvb3BiYWNrIGRldmljZQkJKi8KKyNkZWZpbmUgQVJQSFJEX0xPQ0FMVExLIDc3MwkJLyogTG9jYWx0YWxrIGRldmljZQkJKi8KKyNkZWZpbmUgQVJQSFJEX0ZEREkJNzc0CQkvKiBGaWJlciBEaXN0cmlidXRlZCBEYXRhIEludGVyZmFjZSAqLworI2RlZmluZSBBUlBIUkRfQklGICAgICAgNzc1ICAgICAgICAgICAgIC8qIEFQMTAwMCBCSUYgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQVJQSFJEX1NJVAk3NzYJCS8qIHNpdDAgZGV2aWNlIC0gSVB2Ni1pbi1JUHY0CSovCisjZGVmaW5lIEFSUEhSRF9JUEREUAk3NzcJCS8qIElQIG92ZXIgRERQIHR1bm5lbGxlcgkqLworI2RlZmluZSBBUlBIUkRfSVBHUkUJNzc4CQkvKiBHUkUgb3ZlciBJUAkJCSovCisjZGVmaW5lIEFSUEhSRF9QSU1SRUcJNzc5CQkvKiBQSU1TTSByZWdpc3RlciBpbnRlcmZhY2UJKi8KKyNkZWZpbmUgQVJQSFJEX0hJUFBJCTc4MAkJLyogSGlnaCBQZXJmb3JtYW5jZSBQYXJhbGxlbCBJbnRlcmZhY2UgKi8KKyNkZWZpbmUgQVJQSFJEX0FTSAk3ODEJCS8qIE5leHVzIDY0TWJwcyBBc2gJCSovCisjZGVmaW5lIEFSUEhSRF9FQ09ORVQJNzgyCQkvKiBBY29ybiBFY29uZXQJCQkqLworI2RlZmluZSBBUlBIUkRfSVJEQSAJNzgzCQkvKiBMaW51eC1JckRBCQkJKi8KKy8qIEFSUCB3b3JrcyBkaWZmZXJlbnRseSBvbiBkaWZmZXJlbnQgRkMgbWVkaWEgLi4gc28gICovCisjZGVmaW5lIEFSUEhSRF9GQ1BQCTc4NAkJLyogUG9pbnQgdG8gcG9pbnQgZmlicmVjaGFubmVsCSovCisjZGVmaW5lIEFSUEhSRF9GQ0FMCTc4NQkJLyogRmlicmVjaGFubmVsIGFyYml0cmF0ZWQgbG9vcCAqLworI2RlZmluZSBBUlBIUkRfRkNQTAk3ODYJCS8qIEZpYnJlY2hhbm5lbCBwdWJsaWMgbG9vcAkqLworI2RlZmluZSBBUlBIUkRfRkNGQUJSSUMJNzg3CQkvKiBGaWJyZWNoYW5uZWwgZmFicmljCQkqLworCS8qIDc4Ny0+Nzk5IHJlc2VydmVkIGZvciBmaWJyZWNoYW5uZWwgbWVkaWEgdHlwZXMgKi8KKyNkZWZpbmUgQVJQSFJEX0lFRUU4MDJfVFIgODAwCQkvKiBNYWdpYyB0eXBlIGlkZW50IGZvciBUUgkqLworI2RlZmluZSBBUlBIUkRfSUVFRTgwMjExIDgwMQkJLyogSUVFRSA4MDIuMTEJCQkqLworI2RlZmluZSBBUlBIUkRfSUVFRTgwMjExX1BSSVNNIDgwMgkvKiBJRUVFIDgwMi4xMSArIFByaXNtMiBoZWFkZXIgICovCisKKyNkZWZpbmUgQVJQSFJEX1ZPSUQJICAweEZGRkYJLyogVm9pZCB0eXBlLCBub3RoaW5nIGlzIGtub3duICovCisjZGVmaW5lIEFSUEhSRF9OT05FCSAgMHhGRkZFCS8qIHplcm8gaGVhZGVyIGxlbmd0aCAqLworCisvKiBBUlAgcHJvdG9jb2wgb3Bjb2Rlcy4gKi8KKyNkZWZpbmUJQVJQT1BfUkVRVUVTVAkxCQkvKiBBUlAgcmVxdWVzdAkJCSovCisjZGVmaW5lCUFSUE9QX1JFUExZCTIJCS8qIEFSUCByZXBseQkJCSovCisjZGVmaW5lCUFSUE9QX1JSRVFVRVNUCTMJCS8qIFJBUlAgcmVxdWVzdAkJCSovCisjZGVmaW5lCUFSUE9QX1JSRVBMWQk0CQkvKiBSQVJQIHJlcGx5CQkJKi8KKyNkZWZpbmUJQVJQT1BfSW5SRVFVRVNUCTgJCS8qIEluQVJQIHJlcXVlc3QJCSovCisjZGVmaW5lCUFSUE9QX0luUkVQTFkJOQkJLyogSW5BUlAgcmVwbHkJCQkqLworI2RlZmluZQlBUlBPUF9OQUsJMTAJCS8qIChBVE0pQVJQIE5BSwkJCSovCisKKworLyogQVJQIGlvY3RsIHJlcXVlc3QuICovCitzdHJ1Y3QgYXJwcmVxIHsKKyAgc3RydWN0IHNvY2thZGRyCWFycF9wYTsJCS8qIHByb3RvY29sIGFkZHJlc3MJCSovCisgIHN0cnVjdCBzb2NrYWRkcglhcnBfaGE7CQkvKiBoYXJkd2FyZSBhZGRyZXNzCQkqLworICBpbnQJCQlhcnBfZmxhZ3M7CS8qIGZsYWdzCQkJKi8KKyAgc3RydWN0IHNvY2thZGRyICAgICAgIGFycF9uZXRtYXNrOyAgICAvKiBuZXRtYXNrIChvbmx5IGZvciBwcm94eSBhcnBzKSAqLworICBjaGFyCQkJYXJwX2RldlsxNl07Cit9OworCitzdHJ1Y3QgYXJwcmVxX29sZCB7CisgIHN0cnVjdCBzb2NrYWRkcglhcnBfcGE7CQkvKiBwcm90b2NvbCBhZGRyZXNzCQkqLworICBzdHJ1Y3Qgc29ja2FkZHIJYXJwX2hhOwkJLyogaGFyZHdhcmUgYWRkcmVzcwkJKi8KKyAgaW50CQkJYXJwX2ZsYWdzOwkvKiBmbGFncwkJCSovCisgIHN0cnVjdCBzb2NrYWRkciAgICAgICBhcnBfbmV0bWFzazsgICAgLyogbmV0bWFzayAob25seSBmb3IgcHJveHkgYXJwcykgKi8KK307CisKKy8qIEFSUCBGbGFnIHZhbHVlcy4gKi8KKyNkZWZpbmUgQVRGX0NPTQkJMHgwMgkJLyogY29tcGxldGVkIGVudHJ5IChoYSB2YWxpZCkJKi8KKyNkZWZpbmUJQVRGX1BFUk0JMHgwNAkJLyogcGVybWFuZW50IGVudHJ5CQkqLworI2RlZmluZQlBVEZfUFVCTAkweDA4CQkvKiBwdWJsaXNoIGVudHJ5CQkqLworI2RlZmluZQlBVEZfVVNFVFJBSUxFUlMJMHgxMAkJLyogaGFzIHJlcXVlc3RlZCB0cmFpbGVycwkqLworI2RlZmluZSBBVEZfTkVUTUFTSyAgICAgMHgyMCAgICAgICAgICAgIC8qIHdhbnQgdG8gdXNlIGEgbmV0bWFzayAob25seQorCQkJCQkgICBmb3IgcHJveHkgZW50cmllcykgKi8KKyNkZWZpbmUgQVRGX0RPTlRQVUIJMHg0MAkJLyogZG9uJ3QgYW5zd2VyIHRoaXMgYWRkcmVzc2VzCSovCisKKy8qCisgKglUaGlzIHN0cnVjdHVyZSBkZWZpbmVzIGFuIGV0aGVybmV0IGFycCBoZWFkZXIuCisgKi8KKworc3RydWN0IGFycGhkcgoreworCXVuc2lnbmVkIHNob3J0CWFyX2hyZDsJCS8qIGZvcm1hdCBvZiBoYXJkd2FyZSBhZGRyZXNzCSovCisJdW5zaWduZWQgc2hvcnQJYXJfcHJvOwkJLyogZm9ybWF0IG9mIHByb3RvY29sIGFkZHJlc3MJKi8KKwl1bnNpZ25lZCBjaGFyCWFyX2hsbjsJCS8qIGxlbmd0aCBvZiBoYXJkd2FyZSBhZGRyZXNzCSovCisJdW5zaWduZWQgY2hhcglhcl9wbG47CQkvKiBsZW5ndGggb2YgcHJvdG9jb2wgYWRkcmVzcwkqLworCXVuc2lnbmVkIHNob3J0CWFyX29wOwkJLyogQVJQIG9wY29kZSAoY29tbWFuZCkJCSovCisKKyNpZiAwCisJIC8qCisJICAqCSBFdGhlcm5ldCBsb29rcyBsaWtlIHRoaXMgOiBUaGlzIGJpdCBpcyB2YXJpYWJsZSBzaXplZCBob3dldmVyLi4uCisJICAqLworCXVuc2lnbmVkIGNoYXIJCWFyX3NoYVtFVEhfQUxFTl07CS8qIHNlbmRlciBoYXJkd2FyZSBhZGRyZXNzCSovCisJdW5zaWduZWQgY2hhcgkJYXJfc2lwWzRdOwkJLyogc2VuZGVyIElQIGFkZHJlc3MJCSovCisJdW5zaWduZWQgY2hhcgkJYXJfdGhhW0VUSF9BTEVOXTsJLyogdGFyZ2V0IGhhcmR3YXJlIGFkZHJlc3MJKi8KKwl1bnNpZ25lZCBjaGFyCQlhcl90aXBbNF07CQkvKiB0YXJnZXQgSVAgYWRkcmVzcwkJKi8KKyNlbmRpZgorCit9OworCisjZW5kaWYJLyogX0xJTlVYX0lGX0FSUF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lmX2JvbmRpbmcuaCBiL2luY2x1ZGUvbGludXgvaWZfYm9uZGluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3MDI0Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2lmX2JvbmRpbmcuaApAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqIEJvbmQgc2V2ZXJhbCBldGhlcm5ldCBpbnRlcmZhY2VzIGludG8gYSBDaXNjbywgcnVubmluZyAnRXRoZXJjaGFubmVsJy4KKyAqCisgKgorICogUG9ydGlvbnMgYXJlIChjKSBDb3B5cmlnaHQgMTk5NSBTaW1vbiAiR3VydSBBbGVwaC1OdWxsIiBKYW5lcworICogTkNNOiBOZXR3b3JrIGFuZCBDb21tdW5pY2F0aW9ucyBNYW5hZ2VtZW50LCBJbmMuCisgKgorICogQlVULCBJJ20gdGhlIG9uZSB3aG8gbW9kaWZpZWQgaXQgZm9yIGV0aGVybmV0LCBzbzoKKyAqIChjKSBDb3B5cmlnaHQgMTk5OSwgVGhvbWFzIERhdmlzLCB0YWRhdmlzQGxibC5nb3YKKyAqCisgKglUaGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHRlcm1zCisgKglvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KKyAqCisgKiAyMDAzLzAzLzE4IC0gQW1pciBOb2FtIDxhbWlyLm5vYW0gYXQgaW50ZWwgZG90IGNvbT4KKyAqCS0gQWRkZWQgc3VwcG9ydCBmb3IgZ2V0dGluZyBzbGF2ZSdzIHNwZWVkIGFuZCBkdXBsZXggdmlhIGV0aHRvb2wuCisgKgkgIE5lZWRlZCBmb3IgODAyLjNhZCBhbmQgb3RoZXIgZnV0dXJlIG1vZGVzLgorICoKKyAqIDIwMDMvMDMvMTggLSBUc2lwcHkgTWVuZGVsc29uIDx0c2lwcHkubWVuZGVsc29uIGF0IGludGVsIGRvdCBjb20+IGFuZAorICoJCVNobXVsaWsgSGVuIDxzaG11bGlrLmhlbiBhdCBpbnRlbCBkb3QgY29tPgorICoJLSBFbmFibGUgc3VwcG9ydCBvZiBtb2RlcyB0aGF0IG5lZWQgdG8gdXNlIHRoZSB1bmlxdWUgbWFjIGFkZHJlc3Mgb2YKKyAqCSAgZWFjaCBzbGF2ZS4KKyAqCisgKiAyMDAzLzAzLzE4IC0gVHNpcHB5IE1lbmRlbHNvbiA8dHNpcHB5Lm1lbmRlbHNvbiBhdCBpbnRlbCBkb3QgY29tPiBhbmQKKyAqCQlBbWlyIE5vYW0gPGFtaXIubm9hbSBhdCBpbnRlbCBkb3QgY29tPgorICoJLSBNb3ZlZCBkcml2ZXIncyBwcml2YXRlIGRhdGEgdHlwZXMgdG8gYm9uZGluZy5oCisgKgorICogMjAwMy8wMy8xOCAtIEFtaXIgTm9hbSA8YW1pci5ub2FtIGF0IGludGVsIGRvdCBjb20+LAorICoJCVRzaXBweSBNZW5kZWxzb24gPHRzaXBweS5tZW5kZWxzb24gYXQgaW50ZWwgZG90IGNvbT4gYW5kCisgKgkJU2htdWxpayBIZW4gPHNobXVsaWsuaGVuIGF0IGludGVsIGRvdCBjb20+CisgKgktIEFkZGVkIHN1cHBvcnQgZm9yIElFRUUgODAyLjNhZCBEeW5hbWljIGxpbmsgYWdncmVnYXRpb24gbW9kZS4KKyAqCisgKiAyMDAzLzA1LzAxIC0gQW1pciBOb2FtIDxhbWlyLm5vYW0gYXQgaW50ZWwgZG90IGNvbT4KKyAqCS0gQWRkZWQgQUJJIHZlcnNpb24gY29udHJvbCB0byByZXN0b3JlIGNvbXBhdGliaWxpdHkgYmV0d2VlbgorICoJICBuZXcvb2xkIGlmZW5zbGF2ZSBhbmQgbmV3L29sZCBib25kaW5nLgorICoKKyAqIDIwMDMvMTIvMDEgLSBTaG11bGlrIEhlbiA8c2htdWxpay5oZW4gYXQgaW50ZWwgZG90IGNvbT4KKyAqCS0gQ29kZSBjbGVhbnVwIGFuZCBzdHlsZSBjaGFuZ2VzCisgKi8KKworI2lmbmRlZiBfTElOVVhfSUZfQk9ORElOR19ICisjZGVmaW5lIF9MSU5VWF9JRl9CT05ESU5HX0gKKworI2luY2x1ZGUgPGxpbnV4L2lmLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgorCisvKiB1c2VybGFuZCAtIGtlcm5lbCBBQkkgdmVyc2lvbiAoMjAwMy8wNS8wOCkgKi8KKyNkZWZpbmUgQk9ORF9BQklfVkVSU0lPTiAyCisKKy8qCisgKiBXZSBjYW4gcmVtb3ZlIHRoZXNlIGlvY3RsIGRlZmluaXRpb25zIGluIDIuNS4gIFBlb3BsZSBzaG91bGQgdXNlIHRoZQorICogU0lPQyoqKiB2ZXJzaW9ucyBvZiB0aGVtIGluc3RlYWQKKyAqLworI2RlZmluZSBCT05EX0VOU0xBVkVfT0xECQkoU0lPQ0RFVlBSSVZBVEUpCisjZGVmaW5lIEJPTkRfUkVMRUFTRV9PTEQJCShTSU9DREVWUFJJVkFURSArIDEpCisjZGVmaW5lIEJPTkRfU0VUSFdBRERSX09MRAkJKFNJT0NERVZQUklWQVRFICsgMikKKyNkZWZpbmUgQk9ORF9TTEFWRV9JTkZPX1FVRVJZX09MRAkoU0lPQ0RFVlBSSVZBVEUgKyAxMSkKKyNkZWZpbmUgQk9ORF9JTkZPX1FVRVJZX09MRAkJKFNJT0NERVZQUklWQVRFICsgMTIpCisjZGVmaW5lIEJPTkRfQ0hBTkdFX0FDVElWRV9PTEQJCShTSU9DREVWUFJJVkFURSArIDEzKQorCisjZGVmaW5lIEJPTkRfQ0hFQ0tfTUlJX1NUQVRVUwkoU0lPQ0dNSUlQSFkpCisKKyNkZWZpbmUgQk9ORF9NT0RFX1JPVU5EUk9CSU4JMAorI2RlZmluZSBCT05EX01PREVfQUNUSVZFQkFDS1VQCTEKKyNkZWZpbmUgQk9ORF9NT0RFX1hPUgkJMgorI2RlZmluZSBCT05EX01PREVfQlJPQURDQVNUCTMKKyNkZWZpbmUgQk9ORF9NT0RFXzgwMjNBRCAgICAgICAgNAorI2RlZmluZSBCT05EX01PREVfVExCICAgICAgICAgICA1CisjZGVmaW5lIEJPTkRfTU9ERV9BTEIJCTYgLyogVExCICsgUkxCIChyZWNlaXZlIGxvYWQgYmFsYW5jaW5nKSAqLworCisvKiBlYWNoIHNsYXZlJ3MgbGluayBoYXMgNCBzdGF0ZXMgKi8KKyNkZWZpbmUgQk9ORF9MSU5LX1VQICAgIDAgICAgICAgICAgIC8qIGxpbmsgaXMgdXAgYW5kIHJ1bm5pbmcgKi8KKyNkZWZpbmUgQk9ORF9MSU5LX0ZBSUwgIDEgICAgICAgICAgIC8qIGxpbmsgaGFzIGp1c3QgZ29uZSBkb3duICovCisjZGVmaW5lIEJPTkRfTElOS19ET1dOICAyICAgICAgICAgICAvKiBsaW5rIGhhcyBiZWVuIGRvd24gZm9yIHRvbyBsb25nIHRpbWUgKi8KKyNkZWZpbmUgQk9ORF9MSU5LX0JBQ0sgIDMgICAgICAgICAgIC8qIGxpbmsgaXMgZ29pbmcgYmFjayAqLworCisvKiBlYWNoIHNsYXZlIGhhcyBzZXZlcmFsIHN0YXRlcyAqLworI2RlZmluZSBCT05EX1NUQVRFX0FDVElWRSAgICAgICAwICAgLyogbGluayBpcyBhY3RpdmUgKi8KKyNkZWZpbmUgQk9ORF9TVEFURV9CQUNLVVAgICAgICAgMSAgIC8qIGxpbmsgaXMgYmFja3VwICovCisKKyNkZWZpbmUgQk9ORF9ERUZBVUxUX01BWF9CT05EUyAgMSAgIC8qIERlZmF1bHQgbWF4aW11bSBudW1iZXIgb2YgZGV2aWNlcyB0byBzdXBwb3J0ICovCisKK3R5cGVkZWYgc3RydWN0IGlmYm9uZCB7CisJX19zMzIgYm9uZF9tb2RlOworCV9fczMyIG51bV9zbGF2ZXM7CisJX19zMzIgbWlpbW9uOworfSBpZmJvbmQ7CisKK3R5cGVkZWYgc3RydWN0IGlmc2xhdmUKK3sKKwlfX3MzMiBzbGF2ZV9pZDsgLyogVXNlZCBhcyBhbiBJTiBwYXJhbSB0byB0aGUgQk9ORF9TTEFWRV9JTkZPX1FVRVJZIGlvY3RsICovCisJY2hhciBzbGF2ZV9uYW1lW0lGTkFNU0laXTsKKwlfX3M4IGxpbms7CisJX19zOCBzdGF0ZTsKKwlfX3UzMiAgbGlua19mYWlsdXJlX2NvdW50OworfSBpZnNsYXZlOworCitzdHJ1Y3QgYWRfaW5mbyB7CisJX191MTYgYWdncmVnYXRvcl9pZDsKKwlfX3UxNiBwb3J0czsKKwlfX3UxNiBhY3Rvcl9rZXk7CisJX191MTYgcGFydG5lcl9rZXk7CisJX191OCBwYXJ0bmVyX3N5c3RlbVtFVEhfQUxFTl07Cit9OworCisjZW5kaWYgLyogX0xJTlVYX0lGX0JPTkRJTkdfSCAqLworCisvKgorICogTG9jYWwgdmFyaWFibGVzOgorICogIHZlcnNpb24tY29udHJvbDogdAorICogIGtlcHQtbmV3LXZlcnNpb25zOiA1CisgKiAgYy1pbmRlbnQtbGV2ZWw6IDgKKyAqICBjLWJhc2ljLW9mZnNldDogOAorICogIHRhYi13aWR0aDogOAorICogRW5kOgorICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWZfYnJpZGdlLmggYi9pbmNsdWRlL2xpbnV4L2lmX2JyaWRnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkMWI2ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2lmX2JyaWRnZS5oCkBAIC0wLDAgKzEsMTEzIEBACisvKgorICoJTGludXggZXRoZXJuZXQgYnJpZGdlCisgKgorICoJQXV0aG9yczoKKyAqCUxlbm5lcnQgQnV5dGVuaGVrCQk8YnV5dGVuaEBnbnUub3JnPgorICoKKyAqCSRJZDogaWZfYnJpZGdlLmgsdiAxLjEgMjAwMC8wMi8xOCAxNjo0NzowMSBkYXZlbSBFeHAgJAorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKglhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfTElOVVhfSUZfQlJJREdFX0gKKyNkZWZpbmUgX0xJTlVYX0lGX0JSSURHRV9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjZGVmaW5lIFNZU0ZTX0JSSURHRV9BVFRSCSJicmlkZ2UiCisjZGVmaW5lIFNZU0ZTX0JSSURHRV9GREIJImJyZm9yd2FyZCIKKyNkZWZpbmUgU1lTRlNfQlJJREdFX1BPUlRfU1VCRElSICJicmlmIgorI2RlZmluZSBTWVNGU19CUklER0VfUE9SVF9BVFRSCSJicnBvcnQiCisjZGVmaW5lIFNZU0ZTX0JSSURHRV9QT1JUX0xJTksJImJyaWRnZSIKKworI2RlZmluZSBCUkNUTF9WRVJTSU9OIDEKKworI2RlZmluZSBCUkNUTF9HRVRfVkVSU0lPTiAwCisjZGVmaW5lIEJSQ1RMX0dFVF9CUklER0VTIDEKKyNkZWZpbmUgQlJDVExfQUREX0JSSURHRSAyCisjZGVmaW5lIEJSQ1RMX0RFTF9CUklER0UgMworI2RlZmluZSBCUkNUTF9BRERfSUYgNAorI2RlZmluZSBCUkNUTF9ERUxfSUYgNQorI2RlZmluZSBCUkNUTF9HRVRfQlJJREdFX0lORk8gNgorI2RlZmluZSBCUkNUTF9HRVRfUE9SVF9MSVNUIDcKKyNkZWZpbmUgQlJDVExfU0VUX0JSSURHRV9GT1JXQVJEX0RFTEFZIDgKKyNkZWZpbmUgQlJDVExfU0VUX0JSSURHRV9IRUxMT19USU1FIDkKKyNkZWZpbmUgQlJDVExfU0VUX0JSSURHRV9NQVhfQUdFIDEwCisjZGVmaW5lIEJSQ1RMX1NFVF9BR0VJTkdfVElNRSAxMQorI2RlZmluZSBCUkNUTF9TRVRfR0NfSU5URVJWQUwgMTIKKyNkZWZpbmUgQlJDVExfR0VUX1BPUlRfSU5GTyAxMworI2RlZmluZSBCUkNUTF9TRVRfQlJJREdFX1NUUF9TVEFURSAxNAorI2RlZmluZSBCUkNUTF9TRVRfQlJJREdFX1BSSU9SSVRZIDE1CisjZGVmaW5lIEJSQ1RMX1NFVF9QT1JUX1BSSU9SSVRZIDE2CisjZGVmaW5lIEJSQ1RMX1NFVF9QQVRIX0NPU1QgMTcKKyNkZWZpbmUgQlJDVExfR0VUX0ZEQl9FTlRSSUVTIDE4CisKKyNkZWZpbmUgQlJfU1RBVEVfRElTQUJMRUQgMAorI2RlZmluZSBCUl9TVEFURV9MSVNURU5JTkcgMQorI2RlZmluZSBCUl9TVEFURV9MRUFSTklORyAyCisjZGVmaW5lIEJSX1NUQVRFX0ZPUldBUkRJTkcgMworI2RlZmluZSBCUl9TVEFURV9CTE9DS0lORyA0CisKK3N0cnVjdCBfX2JyaWRnZV9pbmZvCit7CisJX191NjQgZGVzaWduYXRlZF9yb290OworCV9fdTY0IGJyaWRnZV9pZDsKKwlfX3UzMiByb290X3BhdGhfY29zdDsKKwlfX3UzMiBtYXhfYWdlOworCV9fdTMyIGhlbGxvX3RpbWU7CisJX191MzIgZm9yd2FyZF9kZWxheTsKKwlfX3UzMiBicmlkZ2VfbWF4X2FnZTsKKwlfX3UzMiBicmlkZ2VfaGVsbG9fdGltZTsKKwlfX3UzMiBicmlkZ2VfZm9yd2FyZF9kZWxheTsKKwlfX3U4IHRvcG9sb2d5X2NoYW5nZTsKKwlfX3U4IHRvcG9sb2d5X2NoYW5nZV9kZXRlY3RlZDsKKwlfX3U4IHJvb3RfcG9ydDsKKwlfX3U4IHN0cF9lbmFibGVkOworCV9fdTMyIGFnZWluZ190aW1lOworCV9fdTMyIGdjX2ludGVydmFsOworCV9fdTMyIGhlbGxvX3RpbWVyX3ZhbHVlOworCV9fdTMyIHRjbl90aW1lcl92YWx1ZTsKKwlfX3UzMiB0b3BvbG9neV9jaGFuZ2VfdGltZXJfdmFsdWU7CisJX191MzIgZ2NfdGltZXJfdmFsdWU7Cit9OworCitzdHJ1Y3QgX19wb3J0X2luZm8KK3sKKwlfX3U2NCBkZXNpZ25hdGVkX3Jvb3Q7CisJX191NjQgZGVzaWduYXRlZF9icmlkZ2U7CisJX191MTYgcG9ydF9pZDsKKwlfX3UxNiBkZXNpZ25hdGVkX3BvcnQ7CisJX191MzIgcGF0aF9jb3N0OworCV9fdTMyIGRlc2lnbmF0ZWRfY29zdDsKKwlfX3U4IHN0YXRlOworCV9fdTggdG9wX2NoYW5nZV9hY2s7CisJX191OCBjb25maWdfcGVuZGluZzsKKwlfX3U4IHVudXNlZDA7CisJX191MzIgbWVzc2FnZV9hZ2VfdGltZXJfdmFsdWU7CisJX191MzIgZm9yd2FyZF9kZWxheV90aW1lcl92YWx1ZTsKKwlfX3UzMiBob2xkX3RpbWVyX3ZhbHVlOworfTsKKworc3RydWN0IF9fZmRiX2VudHJ5Cit7CisJX191OCBtYWNfYWRkcls2XTsKKwlfX3U4IHBvcnRfbm87CisJX191OCBpc19sb2NhbDsKKwlfX3UzMiBhZ2VpbmdfdGltZXJfdmFsdWU7CisJX191MzIgdW51c2VkOworfTsKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorCitleHRlcm4gdm9pZCBicmlvY3RsX3NldChpbnQgKCppb2N0bF9ob29rKSh1bnNpZ25lZCBpbnQsIHZvaWQgX191c2VyICopKTsKK2V4dGVybiBpbnQgKCpicl9oYW5kbGVfZnJhbWVfaG9vaykoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgc3RydWN0IHNrX2J1ZmYgKipwc2tiKTsKK2V4dGVybiBpbnQgKCpicl9zaG91bGRfcm91dGVfaG9vaykoc3RydWN0IHNrX2J1ZmYgKipwc2tiKTsKKworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl9jYWJsZW1vZGVtLmggYi9pbmNsdWRlL2xpbnV4L2lmX2NhYmxlbW9kZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2ExMDA3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9pZl9jYWJsZW1vZGVtLmgKQEAgLTAsMCArMSwyMiBAQAorI2lmbmRlZiBfTElOVVhfQ0FCTEVNT0RFTV9IXworI2RlZmluZSBfTElOVVhfQ0FCTEVNT0RFTV9IXworLyoKKyAqCQlBdXRob3I6IEZyYW5jbyBWZW50dXJpIDxmdmVudHVyaUBtZWRpYW9uZS5uZXQ+CisgKgkJQ29weXJpZ2h0IDE5OTggRnJhbmNvIFZlbnR1cmkKKyAqCisgKgkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0CisgKgkJYW5kL29yICBtb2RpZnkgaXQgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsCisgKgkJUHVibGljICBMaWNlbnNlIGFzICBwdWJsaXNoZWQgIGJ5ICB0aGUgIEZyZWUgIFNvZnR3YXJlCisgKgkJRm91bmRhdGlvbjsgIGVpdGhlciAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgKGF0CisgKgkJeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKy8qIHNvbWUgdXNlZnVsIGRlZmluZXMgZm9yIHNiMTAwMC5jIGUgY21jb25maWcuYyAtIGZ2ICovCisjZGVmaW5lIFNJT0NHQ01TVEFUUwkJU0lPQ0RFVlBSSVZBVEUrMAkvKiBnZXQgY2FibGUgbW9kZW0gc3RhdHMgKi8KKyNkZWZpbmUgU0lPQ0dDTUZJUk1XQVJFCQlTSU9DREVWUFJJVkFURSsxCS8qIGdldCBjbSBmaXJtd2FyZSB2ZXJzaW9uICovCisjZGVmaW5lIFNJT0NHQ01GUkVRVUVOQ1kJU0lPQ0RFVlBSSVZBVEUrMgkvKiBnZXQgY2FibGUgbW9kZW0gZnJlcXVlbmN5ICovCisjZGVmaW5lIFNJT0NTQ01GUkVRVUVOQ1kJU0lPQ0RFVlBSSVZBVEUrMwkvKiBzZXQgY2FibGUgbW9kZW0gZnJlcXVlbmN5ICovCisjZGVmaW5lIFNJT0NHQ01QSURTCQkJU0lPQ0RFVlBSSVZBVEUrNAkvKiBnZXQgY2FibGUgbW9kZW0gUElEcyAqLworI2RlZmluZSBTSU9DU0NNUElEUwkJCVNJT0NERVZQUklWQVRFKzUJLyogc2V0IGNhYmxlIG1vZGVtIFBJRHMgKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lmX2VjLmggYi9pbmNsdWRlL2xpbnV4L2lmX2VjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc0OTlhYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvaWZfZWMuaApAQCAtMCwwICsxLDcyIEBACisvKiBEZWZpbml0aW9ucyBmb3IgRWNvbmV0IHNvY2tldHMuICovCisKKyNpZm5kZWYgX19MSU5VWF9JRl9FQworI2RlZmluZSBfX0xJTlVYX0lGX0VDCisKKy8qIFVzZXIgdmlzaWJsZSBzdHVmZi4gR2xpYmMgcHJvdmlkZXMgaXRzIG93biBidXQgbGliYzUgZm9sayB3aWxsIHVzZSB0aGVzZSAqLworCitzdHJ1Y3QgZWNfYWRkcgoreworICB1bnNpZ25lZCBjaGFyIHN0YXRpb247CQkvKiBTdGF0aW9uIG51bWJlci4gICovCisgIHVuc2lnbmVkIGNoYXIgbmV0OwkJCS8qIE5ldHdvcmsgbnVtYmVyLiAgKi8KK307CisKK3N0cnVjdCBzb2NrYWRkcl9lYworeworICB1bnNpZ25lZCBzaG9ydCBzZWNfZmFtaWx5OworICB1bnNpZ25lZCBjaGFyIHBvcnQ7CQkJLyogUG9ydCBudW1iZXIuICAqLworICB1bnNpZ25lZCBjaGFyIGNiOwkJCS8qIENvbnRyb2wvZmxhZyBieXRlLiAgKi8KKyAgdW5zaWduZWQgY2hhciB0eXBlOwkJCS8qIFR5cGUgb2YgbWVzc2FnZS4gICovCisgIHN0cnVjdCBlY19hZGRyIGFkZHI7CisgIHVuc2lnbmVkIGxvbmcgY29va2llOworfTsKKworI2RlZmluZSBFQ1RZUEVfUEFDS0VUX1JFQ0VJVkVECQkwCS8qIFBhY2tldCByZWNlaXZlZCAqLworI2RlZmluZSBFQ1RZUEVfVFJBTlNNSVRfU1RBVFVTCQkweDEwCS8qIFRyYW5zbWl0IGNvbXBsZXRlZCwgCisJCQkJCQkgICBsb3cgbmliYmxlIGhvbGRzIHN0YXR1cyAqLworCisjZGVmaW5lIEVDVFlQRV9UUkFOU01JVF9PSwkJMQorI2RlZmluZSBFQ1RZUEVfVFJBTlNNSVRfTk9UX0xJU1RFTklORwkyCisjZGVmaW5lIEVDVFlQRV9UUkFOU01JVF9ORVRfRVJST1IJMworI2RlZmluZSBFQ1RZUEVfVFJBTlNNSVRfTk9fQ0xPQ0sJNAorI2RlZmluZSBFQ1RZUEVfVFJBTlNNSVRfTElORV9KQU1NRUQJNQorI2RlZmluZSBFQ1RZUEVfVFJBTlNNSVRfTk9UX1BSRVNFTlQJNgorCisjaWZkZWYgX19LRVJORUxfXworCisjZGVmaW5lIEVDX0hMRU4JCQkJNgorCisvKiBUaGlzIGlzIHdoYXQgYW4gRWNvbmV0IGZyYW1lIGxvb2tzIGxpa2Ugb24gdGhlIHdpcmUuICovCitzdHJ1Y3QgZWNfZnJhbWVoZHIgCit7CisgIHVuc2lnbmVkIGNoYXIgZHN0X3N0bjsKKyAgdW5zaWduZWQgY2hhciBkc3RfbmV0OworICB1bnNpZ25lZCBjaGFyIHNyY19zdG47CisgIHVuc2lnbmVkIGNoYXIgc3JjX25ldDsKKyAgdW5zaWduZWQgY2hhciBjYjsKKyAgdW5zaWduZWQgY2hhciBwb3J0OworfTsKKworc3RydWN0IGVjb25ldF9zb2NrIHsKKyAgLyogc3RydWN0IHNvY2sgaGFzIHRvIGJlIHRoZSBmaXJzdCBtZW1iZXIgb2YgZWNvbmV0X3NvY2sgKi8KKyAgc3RydWN0IHNvY2sJc2s7CisgIHVuc2lnbmVkIGNoYXIgY2I7CisgIHVuc2lnbmVkIGNoYXIgcG9ydDsKKyAgdW5zaWduZWQgY2hhciBzdGF0aW9uOworICB1bnNpZ25lZCBjaGFyIG5ldDsKKyAgdW5zaWduZWQgc2hvcnQgbnVtOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZWNvbmV0X3NvY2sgKmVjX3NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaykKK3sKKwlyZXR1cm4gKHN0cnVjdCBlY29uZXRfc29jayAqKXNrOworfQorCitzdHJ1Y3QgZWNfZGV2aWNlCit7CisgIHVuc2lnbmVkIGNoYXIgc3RhdGlvbiwgbmV0OwkJLyogRWNvbmV0IHByb3RvY29sIGFkZHJlc3MgKi8KK307CisKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWZfZXFsLmggYi9pbmNsdWRlL2xpbnV4L2lmX2VxbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2ODc1MmYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2lmX2VxbC5oCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBFcXVhbGl6ZXIgTG9hZC1iYWxhbmNlciBmb3Igc2VyaWFsIG5ldHdvcmsgaW50ZXJmYWNlcy4KKyAqCisgKiAoYykgQ29weXJpZ2h0IDE5OTUgU2ltb24gIkd1cnUgQWxlcGgtTnVsbCIgSmFuZXMKKyAqIE5DTTogTmV0d29yayBhbmQgQ29tbXVuaWNhdGlvbnMgTWFuYWdlbWVudCwgSW5jLgorICoKKyAqCisgKglUaGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHRlcm1zCisgKglvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgorICogCisgKiBUaGUgYXV0aG9yIG1heSBiZSByZWFjaGVkIGFzIHNpbW9uQG5jbS5jb20sIG9yIEMvTworICogICAgTkNNCisgKiAgICBBdHRuOiBTaW1vbiBKYW5lcworICogICAgNjgwMyBXaGl0dGllciBBdmUKKyAqICAgIE1jTGVhbiBWQSAyMjEwMQorICogICAgUGhvbmU6IDEtNzAzLTg0Ny0wMDQwIGV4dCAxMDMKKyAqLworCisjaWZuZGVmIF9MSU5VWF9JRl9FUUxfSAorI2RlZmluZSBfTElOVVhfSUZfRVFMX0gKKworI2RlZmluZSBFUUxfREVGQVVMVF9TTEFWRV9QUklPUklUWSAyODgwMAorI2RlZmluZSBFUUxfREVGQVVMVF9NQVhfU0xBVkVTICAgICA0CisjZGVmaW5lIEVRTF9ERUZBVUxUX01UVSAgICAgICAgICAgIDU3NgorI2RlZmluZSBFUUxfREVGQVVMVF9SRVNDSEVEX0lWQUwgICAxMDAKKworI2RlZmluZSBFUUxfRU5TTEFWRSAgICAgKFNJT0NERVZQUklWQVRFKQorI2RlZmluZSBFUUxfRU1BTkNJUEFURSAgKFNJT0NERVZQUklWQVRFICsgMSkKKworI2RlZmluZSBFUUxfR0VUU0xBVkVDRkcgKFNJT0NERVZQUklWQVRFICsgMikKKyNkZWZpbmUgRVFMX1NFVFNMQVZFQ0ZHIChTSU9DREVWUFJJVkFURSArIDMpCisKKyNkZWZpbmUgRVFMX0dFVE1BU1RSQ0ZHIChTSU9DREVWUFJJVkFURSArIDQpCisjZGVmaW5lIEVRTF9TRVRNQVNUUkNGRyAoU0lPQ0RFVlBSSVZBVEUgKyA1KQorCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorCit0eXBlZGVmIHN0cnVjdCBzbGF2ZSB7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OworCXN0cnVjdCBuZXRfZGV2aWNlCSpkZXY7CisJbG9uZwkJCXByaW9yaXR5OworCWxvbmcJCQlwcmlvcml0eV9icHM7CisJbG9uZwkJCXByaW9yaXR5X0JwczsKKwlsb25nCQkJYnl0ZXNfcXVldWVkOworfSBzbGF2ZV90OworCit0eXBlZGVmIHN0cnVjdCBzbGF2ZV9xdWV1ZSB7CisJc3BpbmxvY2tfdAkJbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWFsbF9zbGF2ZXM7CisJaW50CQkJbnVtX3NsYXZlczsKKwlzdHJ1Y3QgbmV0X2RldmljZQkqbWFzdGVyX2RldjsKK30gc2xhdmVfcXVldWVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgZXF1YWxpemVyIHsKKwlzbGF2ZV9xdWV1ZV90CQlxdWV1ZTsKKwlpbnQJCQltaW5fc2xhdmVzOworCWludAkJCW1heF9zbGF2ZXM7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMJc3RhdHM7CisJc3RydWN0IHRpbWVyX2xpc3QJdGltZXI7Cit9IGVxdWFsaXplcl90OyAgCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKK3R5cGVkZWYgc3RydWN0IG1hc3Rlcl9jb25maWcgeworCWNoYXIJbWFzdGVyX25hbWVbMTZdOworCWludAltYXhfc2xhdmVzOworCWludAltaW5fc2xhdmVzOworfSBtYXN0ZXJfY29uZmlnX3Q7CisKK3R5cGVkZWYgc3RydWN0IHNsYXZlX2NvbmZpZyB7CisJY2hhcglzbGF2ZV9uYW1lWzE2XTsKKwlsb25nCXByaW9yaXR5OworfSBzbGF2ZV9jb25maWdfdDsKKwordHlwZWRlZiBzdHJ1Y3Qgc2xhdmluZ19yZXF1ZXN0IHsKKwljaGFyCXNsYXZlX25hbWVbMTZdOworCWxvbmcJcHJpb3JpdHk7Cit9IHNsYXZpbmdfcmVxdWVzdF90OworCisKKyNlbmRpZiAvKiBfTElOVVhfRVFMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWZfZXRoZXIuaCBiL2luY2x1ZGUvbGludXgvaWZfZXRoZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWI1OGU5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9pZl9ldGhlci5oCkBAIC0wLDAgKzEsMTE1IEBACisvKgorICogSU5FVAkJQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIFRDUC9JUCBwcm90b2NvbCBzdWl0ZSBmb3IgdGhlIExJTlVYCisgKgkJb3BlcmF0aW5nIHN5c3RlbS4gIElORVQgaXMgaW1wbGVtZW50ZWQgdXNpbmcgdGhlICBCU0QgU29ja2V0CisgKgkJaW50ZXJmYWNlIGFzIHRoZSBtZWFucyBvZiBjb21tdW5pY2F0aW9uIHdpdGggdGhlIHVzZXIgbGV2ZWwuCisgKgorICoJCUdsb2JhbCBkZWZpbml0aW9ucyBmb3IgdGhlIEV0aGVybmV0IElFRUUgODAyLjMgaW50ZXJmYWNlLgorICoKKyAqIFZlcnNpb246CUAoIylpZl9ldGhlci5oCTEuMC4xYQkwMi8wOC85NAorICoKKyAqIEF1dGhvcjoJRnJlZCBOLiB2YW4gS2VtcGVuLCA8d2FsdGplQHVXYWx0Lk5MLk11Z25ldC5PUkc+CisgKgkJRG9uYWxkIEJlY2tlciwgPGJlY2tlckBzdXBlci5vcmc+CisgKgkJQWxhbiBDb3gsIDxhbGFuQHJlZGhhdC5jb20+CisgKgkJU3RldmUgV2hpdGVob3VzZSwgPGd3N3JybUBlZXNoYWNrMy5zd2FuLmFjLnVrPgorICoKKyAqCQlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgkJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqCQlhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqCQkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisgCisjaWZuZGVmIF9MSU5VWF9JRl9FVEhFUl9ICisjZGVmaW5lIF9MSU5VWF9JRl9FVEhFUl9ICisKKy8qCisgKglJRUVFIDgwMi4zIEV0aGVybmV0IG1hZ2ljIGNvbnN0YW50cy4gIFRoZSBmcmFtZSBzaXplcyBvbWl0IHRoZSBwcmVhbWJsZQorICoJYW5kIEZDUy9DUkMgKGZyYW1lIGNoZWNrIHNlcXVlbmNlKS4gCisgKi8KKworI2RlZmluZSBFVEhfQUxFTgk2CQkvKiBPY3RldHMgaW4gb25lIGV0aGVybmV0IGFkZHIJICovCisjZGVmaW5lIEVUSF9ITEVOCTE0CQkvKiBUb3RhbCBvY3RldHMgaW4gaGVhZGVyLgkgKi8KKyNkZWZpbmUgRVRIX1pMRU4JNjAJCS8qIE1pbi4gb2N0ZXRzIGluIGZyYW1lIHNhbnMgRkNTICovCisjZGVmaW5lIEVUSF9EQVRBX0xFTgkxNTAwCQkvKiBNYXguIG9jdGV0cyBpbiBwYXlsb2FkCSAqLworI2RlZmluZSBFVEhfRlJBTUVfTEVOCTE1MTQJCS8qIE1heC4gb2N0ZXRzIGluIGZyYW1lIHNhbnMgRkNTICovCisKKy8qCisgKglUaGVzZSBhcmUgdGhlIGRlZmluZWQgRXRoZXJuZXQgUHJvdG9jb2wgSUQncy4KKyAqLworCisjZGVmaW5lIEVUSF9QX0xPT1AJMHgwMDYwCQkvKiBFdGhlcm5ldCBMb29wYmFjayBwYWNrZXQJKi8KKyNkZWZpbmUgRVRIX1BfUFVQCTB4MDIwMAkJLyogWGVyb3ggUFVQIHBhY2tldAkJKi8KKyNkZWZpbmUgRVRIX1BfUFVQQVQJMHgwMjAxCQkvKiBYZXJveCBQVVAgQWRkciBUcmFucyBwYWNrZXQJKi8KKyNkZWZpbmUgRVRIX1BfSVAJMHgwODAwCQkvKiBJbnRlcm5ldCBQcm90b2NvbCBwYWNrZXQJKi8KKyNkZWZpbmUgRVRIX1BfWDI1CTB4MDgwNQkJLyogQ0NJVFQgWC4yNQkJCSovCisjZGVmaW5lIEVUSF9QX0FSUAkweDA4MDYJCS8qIEFkZHJlc3MgUmVzb2x1dGlvbiBwYWNrZXQJKi8KKyNkZWZpbmUJRVRIX1BfQlBRCTB4MDhGRgkJLyogRzhCUFEgQVguMjUgRXRoZXJuZXQgUGFja2V0CVsgTk9UIEFOIE9GRklDSUFMTFkgUkVHSVNURVJFRCBJRCBdICovCisjZGVmaW5lIEVUSF9QX0lFRUVQVVAJMHgwYTAwCQkvKiBYZXJveCBJRUVFODAyLjMgUFVQIHBhY2tldCAqLworI2RlZmluZSBFVEhfUF9JRUVFUFVQQVQJMHgwYTAxCQkvKiBYZXJveCBJRUVFODAyLjMgUFVQIEFkZHIgVHJhbnMgcGFja2V0ICovCisjZGVmaW5lIEVUSF9QX0RFQyAgICAgICAweDYwMDAgICAgICAgICAgLyogREVDIEFzc2lnbmVkIHByb3RvICAgICAgICAgICAqLworI2RlZmluZSBFVEhfUF9ETkFfREwgICAgMHg2MDAxICAgICAgICAgIC8qIERFQyBETkEgRHVtcC9Mb2FkICAgICAgICAgICAgKi8KKyNkZWZpbmUgRVRIX1BfRE5BX1JDICAgIDB4NjAwMiAgICAgICAgICAvKiBERUMgRE5BIFJlbW90ZSBDb25zb2xlICAgICAgICovCisjZGVmaW5lIEVUSF9QX0ROQV9SVCAgICAweDYwMDMgICAgICAgICAgLyogREVDIEROQSBSb3V0aW5nICAgICAgICAgICAgICAqLworI2RlZmluZSBFVEhfUF9MQVQgICAgICAgMHg2MDA0ICAgICAgICAgIC8qIERFQyBMQVQgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRVRIX1BfRElBRyAgICAgIDB4NjAwNSAgICAgICAgICAvKiBERUMgRGlhZ25vc3RpY3MgICAgICAgICAgICAgICovCisjZGVmaW5lIEVUSF9QX0NVU1QgICAgICAweDYwMDYgICAgICAgICAgLyogREVDIEN1c3RvbWVyIHVzZSAgICAgICAgICAgICAqLworI2RlZmluZSBFVEhfUF9TQ0EgICAgICAgMHg2MDA3ICAgICAgICAgIC8qIERFQyBTeXN0ZW1zIENvbW1zIEFyY2ggICAgICAgKi8KKyNkZWZpbmUgRVRIX1BfUkFSUCAgICAgIDB4ODAzNQkJLyogUmV2ZXJzZSBBZGRyIFJlcyBwYWNrZXQJKi8KKyNkZWZpbmUgRVRIX1BfQVRBTEsJMHg4MDlCCQkvKiBBcHBsZXRhbGsgRERQCQkqLworI2RlZmluZSBFVEhfUF9BQVJQCTB4ODBGMwkJLyogQXBwbGV0YWxrIEFBUlAJCSovCisjZGVmaW5lIEVUSF9QXzgwMjFRCTB4ODEwMCAgICAgICAgICAvKiA4MDIuMVEgVkxBTiBFeHRlbmRlZCBIZWFkZXIgICovCisjZGVmaW5lIEVUSF9QX0lQWAkweDgxMzcJCS8qIElQWCBvdmVyIERJWAkJCSovCisjZGVmaW5lIEVUSF9QX0lQVjYJMHg4NkRECQkvKiBJUHY2IG92ZXIgYmx1ZWJvb2sJCSovCisjZGVmaW5lIEVUSF9QX1dDQ1AJMHg4ODNFCQkvKiBXZWItY2FjaGUgY29vcmRpbmF0aW9uIHByb3RvY29sCisJCQkJCSAqIGRlZmluZWQgaW4gZHJhZnQtd2lsc29uLXdyZWMtd2NjcC12Mi0wMC50eHQgKi8KKyNkZWZpbmUgRVRIX1BfUFBQX0RJU0MJMHg4ODYzCQkvKiBQUFBvRSBkaXNjb3ZlcnkgbWVzc2FnZXMgICAgICovCisjZGVmaW5lIEVUSF9QX1BQUF9TRVMJMHg4ODY0CQkvKiBQUFBvRSBzZXNzaW9uIG1lc3NhZ2VzCSovCisjZGVmaW5lIEVUSF9QX01QTFNfVUMJMHg4ODQ3CQkvKiBNUExTIFVuaWNhc3QgdHJhZmZpYwkJKi8KKyNkZWZpbmUgRVRIX1BfTVBMU19NQwkweDg4NDgJCS8qIE1QTFMgTXVsdGljYXN0IHRyYWZmaWMJKi8KKyNkZWZpbmUgRVRIX1BfQVRNTVBPQQkweDg4NGMJCS8qIE11bHRpUHJvdG9jb2wgT3ZlciBBVE0JKi8KKyNkZWZpbmUgRVRIX1BfQVRNRkFURQkweDg4ODQJCS8qIEZyYW1lLWJhc2VkIEFUTSBUcmFuc3BvcnQKKwkJCQkJICogb3ZlciBFdGhlcm5ldAorCQkJCQkgKi8KKyNkZWZpbmUgRVRIX1BfQU9FCTB4ODhBMgkJLyogQVRBIG92ZXIgRXRoZXJuZXQJCSovCisKKy8qCisgKglOb24gRElYIHR5cGVzLiBXb24ndCBjbGFzaCBmb3IgMTUwMCB0eXBlcy4KKyAqLworIAorI2RlZmluZSBFVEhfUF84MDJfMwkweDAwMDEJCS8qIER1bW15IHR5cGUgZm9yIDgwMi4zIGZyYW1lcyAgKi8KKyNkZWZpbmUgRVRIX1BfQVgyNQkweDAwMDIJCS8qIER1bW15IHByb3RvY29sIGlkIGZvciBBWC4yNSAgKi8KKyNkZWZpbmUgRVRIX1BfQUxMCTB4MDAwMwkJLyogRXZlcnkgcGFja2V0IChiZSBjYXJlZnVsISEhKSAqLworI2RlZmluZSBFVEhfUF84MDJfMgkweDAwMDQJCS8qIDgwMi4yIGZyYW1lcyAJCSovCisjZGVmaW5lIEVUSF9QX1NOQVAJMHgwMDA1CQkvKiBJbnRlcm5hbCBvbmx5CQkqLworI2RlZmluZSBFVEhfUF9ERENNUCAgICAgMHgwMDA2ICAgICAgICAgIC8qIERFQyBERENNUDogSW50ZXJuYWwgb25seSAgICAgKi8KKyNkZWZpbmUgRVRIX1BfV0FOX1BQUCAgIDB4MDAwNyAgICAgICAgICAvKiBEdW1teSB0eXBlIGZvciBXQU4gUFBQIGZyYW1lcyovCisjZGVmaW5lIEVUSF9QX1BQUF9NUCAgICAweDAwMDggICAgICAgICAgLyogRHVtbXkgdHlwZSBmb3IgUFBQIE1QIGZyYW1lcyAqLworI2RlZmluZSBFVEhfUF9MT0NBTFRBTEsgMHgwMDA5CQkvKiBMb2NhbHRhbGsgcHNldWRvIHR5cGUgCSovCisjZGVmaW5lIEVUSF9QX1BQUFRBTEsJMHgwMDEwCQkvKiBEdW1teSB0eXBlIGZvciBBdGFsayBvdmVyIFBQUCovCisjZGVmaW5lIEVUSF9QX1RSXzgwMl8yCTB4MDAxMQkJLyogODAyLjIgZnJhbWVzIAkJKi8KKyNkZWZpbmUgRVRIX1BfTU9CSVRFWAkweDAwMTUJCS8qIE1vYml0ZXggKGthekBjYWZlLm5ldCkJKi8KKyNkZWZpbmUgRVRIX1BfQ09OVFJPTAkweDAwMTYJCS8qIENhcmQgc3BlY2lmaWMgY29udHJvbCBmcmFtZXMgKi8KKyNkZWZpbmUgRVRIX1BfSVJEQQkweDAwMTcJCS8qIExpbnV4LUlyREEJCQkqLworI2RlZmluZSBFVEhfUF9FQ09ORVQJMHgwMDE4CQkvKiBBY29ybiBFY29uZXQJCQkqLworI2RlZmluZSBFVEhfUF9IRExDCTB4MDAxOQkJLyogSERMQyBmcmFtZXMJCQkqLworI2RlZmluZSBFVEhfUF9BUkNORVQJMHgwMDFBCQkvKiAxQSBmb3IgQXJjTmV0IDotKSAgICAgICAgICAgICovCisKKy8qCisgKglUaGlzIGlzIGFuIEV0aGVybmV0IGZyYW1lIGhlYWRlci4KKyAqLworIAorc3RydWN0IGV0aGhkciB7CisJdW5zaWduZWQgY2hhcgloX2Rlc3RbRVRIX0FMRU5dOwkvKiBkZXN0aW5hdGlvbiBldGggYWRkcgkqLworCXVuc2lnbmVkIGNoYXIJaF9zb3VyY2VbRVRIX0FMRU5dOwkvKiBzb3VyY2UgZXRoZXIgYWRkcgkqLworCXVuc2lnbmVkIHNob3J0CWhfcHJvdG87CQkvKiBwYWNrZXQgdHlwZSBJRCBmaWVsZAkqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZXRoaGRyICpldGhfaGRyKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCit7CisJcmV0dXJuIChzdHJ1Y3QgZXRoaGRyICopc2tiLT5tYWMucmF3OworfQorI2VuZGlmCisKKyNlbmRpZgkvKiBfTElOVVhfSUZfRVRIRVJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl9mYy5oIGIvaW5jbHVkZS9saW51eC9pZl9mYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzMzMwYjQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2lmX2ZjLmgKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIElORVQJCUFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBUQ1AvSVAgcHJvdG9jb2wgc3VpdGUgZm9yIHRoZSBMSU5VWAorICoJCW9wZXJhdGluZyBzeXN0ZW0uICBJTkVUIGlzIGltcGxlbWVudGVkIHVzaW5nIHRoZSAgQlNEIFNvY2tldAorICoJCWludGVyZmFjZSBhcyB0aGUgbWVhbnMgb2YgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSB1c2VyIGxldmVsLgorICoKKyAqCQlHbG9iYWwgZGVmaW5pdGlvbnMgZm9yIEZpYnJlIENoYW5uZWwuCisgKgorICogVmVyc2lvbjoJQCgjKWlmX2ZjLmgJMC4wCTExLzIwLzk4CisgKgorICogQXV0aG9yOglGcmVkIE4uIHZhbiBLZW1wZW4sIDx3YWx0amVAdVdhbHQuTkwuTXVnbmV0Lk9SRz4KKyAqCQlEb25hbGQgQmVja2VyLCA8YmVja2VyQHN1cGVyLm9yZz4KKyAqICAgIFBldGVyIERlIFNjaHJpanZlciwgPHN0dWQxMUBjYzQua3VsZXV2ZW4uYWMuYmU+CisgKgkgIFZpbmVldCBBYnJhaGFtLCA8dm1hQGlvbC51bmguZWR1PgorICoKKyAqCQlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgkJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqCQlhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqCQkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisjaWZuZGVmIF9MSU5VWF9JRl9GQ19ICisjZGVmaW5lIF9MSU5VWF9JRl9GQ19ICisKKworI2RlZmluZSBGQ19BTEVOCTYJCS8qIE9jdGV0cyBpbiBvbmUgZXRoZXJuZXQgYWRkcgkgKi8KKyNkZWZpbmUgRkNfSExFTiAgIChzaXplb2Yoc3RydWN0IGZjaF9oZHIpK3NpemVvZihzdHJ1Y3QgZmNsbGMpKQorI2RlZmluZSBGQ19JRF9MRU4gMwkJLyogT2N0ZXRzIGluIGEgRmlicmUgQ2hhbm5lbCBBZGRyZXNzICovCisKKy8qIExMQyBhbmQgU05BUCBjb25zdGFudHMgKi8KKyNkZWZpbmUgRVhURU5ERURfU0FQIDB4QUEKKyNkZWZpbmUgVUlfQ01EICAgICAgIDB4MDMKKworLyogVGhpcyBpcyBOT1QgdGhlIEZpYnJlIENoYW5uZWwgZnJhbWUgaGVhZGVyLiBUaGUgRkMgZnJhbWUgaGVhZGVyIGlzCisgKiAgY29uc3RydWN0ZWQgaW4gdGhlIGRyaXZlciBhcyB0aGUgVGFjaHlvbiBuZWVkcyBjZXJ0YWluIGZpZWxkcyBpbgorICogIGNlcnRhaW5zIHBvc2l0aW9ucy4gU28sIGl0IGNhbid0IGJlIGdlbmVyYWxpemVkIGhlcmUuKi8KKworc3RydWN0IGZjaF9oZHIgeworCV9fdTggIGRhZGRyW0ZDX0FMRU5dOwkJLyogZGVzdGluYXRpb24gYWRkcmVzcyAqLworCV9fdTggIHNhZGRyW0ZDX0FMRU5dOwkJLyogc291cmNlIGFkZHJlc3MgKi8KK307CisKKy8qIFRoaXMgaXMgYSBGaWJyZSBDaGFubmVsIExMQyBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCBmY2xsYyB7CisJX191OCAgZHNhcDsJCQkvKiBkZXN0aW5hdGlvbiBTQVAgKi8KKwlfX3U4ICBzc2FwOwkJCS8qIHNvdXJjZSBTQVAgKi8KKwlfX3U4ICBsbGM7CQkJLyogTExDIGNvbnRyb2wgZmllbGQgKi8KKwlfX3U4ICBwcm90aWRbM107CQkvKiBwcm90b2NvbCBpZCAqLworCV9fdTE2IGV0aGVydHlwZTsJCS8qIGV0aGVyIHR5cGUgZmllbGQgKi8KK307CisKKyNlbmRpZgkvKiBfTElOVVhfSUZfRkNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl9mZGRpLmggYi9pbmNsdWRlL2xpbnV4L2lmX2ZkZGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTEyODE4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9pZl9mZGRpLmgKQEAgLTAsMCArMSwxOTcgQEAKKy8qCisgKiBJTkVUCQlBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgVENQL0lQIHByb3RvY29sIHN1aXRlIGZvciB0aGUgTElOVVgKKyAqCQlvcGVyYXRpbmcgc3lzdGVtLiAgSU5FVCBpcyBpbXBsZW1lbnRlZCB1c2luZyB0aGUgQlNEIFNvY2tldAorICoJCWludGVyZmFjZSBhcyB0aGUgbWVhbnMgb2YgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSB1c2VyIGxldmVsLgorICoKKyAqCQlHbG9iYWwgZGVmaW5pdGlvbnMgZm9yIHRoZSBBTlNJIEZEREkgaW50ZXJmYWNlLgorICoKKyAqIFZlcnNpb246CUAoIylpZl9mZGRpLmgJMS4wLjIJU2VwIDI5IDIwMDQKKyAqCisgKiBBdXRob3I6CUxhd3JlbmNlIFYuIFN0ZWZhbmksIDxzdGVmYW5pQGxrZy5kZWMuY29tPgorICoKKyAqCQlpZl9mZGRpLmggaXMgYmFzZWQgb24gcHJldmlvdXMgaWZfZXRoZXIuaCBhbmQgaWZfdHIuaCB3b3JrIGJ5CisgKgkJCUZyZWQgTi4gdmFuIEtlbXBlbiwgPHdhbHRqZUB1V2FsdC5OTC5NdWduZXQuT1JHPgorICoJCQlEb25hbGQgQmVja2VyLCA8YmVja2VyQHN1cGVyLm9yZz4KKyAqCQkJQWxhbiBDb3gsIDxhbGFuQHJlZGhhdC5jb20+CisgKgkJCVN0ZXZlIFdoaXRlaG91c2UsIDxndzdycm1AZWVzaGFjazMuc3dhbi5hYy51az4KKyAqCQkJUGV0ZXIgRGUgU2NocmlqdmVyLCA8c3R1ZDExQGNjNC5rdWxldXZlbi5hYy5iZT4KKyAqCisgKgkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKgkJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKgkJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2lmbmRlZiBfTElOVVhfSUZfRkRESV9ICisjZGVmaW5lIF9MSU5VWF9JRl9GRERJX0gKKworLyoKKyAqICBEZWZpbmUgbWF4IGFuZCBtaW4gbGVnYWwgc2l6ZXMuICBUaGUgZnJhbWUgc2l6ZXMgZG8gbm90IGluY2x1ZGUKKyAqICA0IGJ5dGUgRkNTL0NSQyAoZnJhbWUgY2hlY2sgc2VxdWVuY2UpLgorICovCisjZGVmaW5lIEZERElfS19BTEVOCQkJNgkJLyogT2N0ZXRzIGluIG9uZSBGRERJIGFkZHJlc3MgKi8KKyNkZWZpbmUgRkRESV9LXzgwMjJfSExFTgkxNgkJLyogVG90YWwgb2N0ZXRzIGluIDgwMi4yIGhlYWRlciAqLworI2RlZmluZSBGRERJX0tfU05BUF9ITEVOCTIxCQkvKiBUb3RhbCBvY3RldHMgaW4gODAyLjIgU05BUCBoZWFkZXIgKi8KKyNkZWZpbmUgRkRESV9LXzgwMjJfWkxFTgkxNgkJLyogTWluIG9jdGV0cyBpbiA4MDIuMiBmcmFtZSBzYW5zIEZDUyAqLworI2RlZmluZSBGRERJX0tfU05BUF9aTEVOCTIxCQkvKiBNaW4gb2N0ZXRzIGluIDgwMi4yIFNOQVAgZnJhbWUgc2FucyBGQ1MgKi8KKyNkZWZpbmUgRkRESV9LXzgwMjJfRExFTgk0NDc1CS8qIE1heCBvY3RldHMgaW4gODAyLjIgcGF5bG9hZCAqLworI2RlZmluZSBGRERJX0tfU05BUF9ETEVOCTQ0NzAJLyogTWF4IG9jdGV0cyBpbiA4MDIuMiBTTkFQIHBheWxvYWQgKi8KKyNkZWZpbmUgRkRESV9LX0xMQ19aTEVOCQkxMwkJLyogTWluIG9jdGV0cyBpbiBMTEMgZnJhbWUgc2FucyBGQ1MgKi8KKyNkZWZpbmUgRkRESV9LX0xMQ19MRU4JCTQ0OTEJLyogTWF4IG9jdGV0cyBpbiBMTEMgZnJhbWUgc2FucyBGQ1MgKi8KKworLyogRGVmaW5lIEZEREkgRnJhbWUgQ29udHJvbCAoRkMpIEJ5dGUgdmFsdWVzICovCisjZGVmaW5lIEZERElfRkNfS19WT0lECQkJCQkweDAwCQorI2RlZmluZSBGRERJX0ZDX0tfTk9OX1JFU1RSSUNURURfVE9LRU4JMHg4MAkKKyNkZWZpbmUgRkRESV9GQ19LX1JFU1RSSUNURURfVE9LRU4JCTB4QzAJCisjZGVmaW5lIEZERElfRkNfS19TTVRfTUlOCQkJCTB4NDEKKyNkZWZpbmUgRkRESV9GQ19LX1NNVF9NQVgJCSAgIAkJMHg0RgorI2RlZmluZSBGRERJX0ZDX0tfTUFDX01JTgkJCQkweEMxCisjZGVmaW5lIEZERElfRkNfS19NQUNfTUFYCQkgIAkJMHhDRgkKKyNkZWZpbmUgRkRESV9GQ19LX0FTWU5DX0xMQ19NSU4JCQkweDUwCisjZGVmaW5lIEZERElfRkNfS19BU1lOQ19MTENfREVGCQkJMHg1NAorI2RlZmluZSBGRERJX0ZDX0tfQVNZTkNfTExDX01BWAkJCTB4NUYKKyNkZWZpbmUgRkRESV9GQ19LX1NZTkNfTExDX01JTgkJCTB4RDAKKyNkZWZpbmUgRkRESV9GQ19LX1NZTkNfTExDX01BWAkJCTB4RDcKKyNkZWZpbmUgRkRESV9GQ19LX0lNUExFTUVOVE9SX01JTgkJMHg2MAorI2RlZmluZSBGRERJX0ZDX0tfSU1QTEVNRU5UT1JfTUFYICAJCTB4NkYKKyNkZWZpbmUgRkRESV9GQ19LX1JFU0VSVkVEX01JTgkJCTB4NzAKKyNkZWZpbmUgRkRESV9GQ19LX1JFU0VSVkVEX01BWAkJCTB4N0YKKworLyogRGVmaW5lIExMQyBhbmQgU05BUCBjb25zdGFudHMgKi8KKyNkZWZpbmUgRkRESV9FWFRFTkRFRF9TQVAJMHhBQQorI2RlZmluZSBGRERJX1VJX0NNRAkJCTB4MDMKKworLyogRGVmaW5lIDgwMi4yIFR5cGUgMSBoZWFkZXIgKi8KK3N0cnVjdCBmZGRpXzgwMjJfMV9oZHIKKwl7CisJX191OAlkc2FwOwkJCQkJLyogZGVzdGluYXRpb24gc2VydmljZSBhY2Nlc3MgcG9pbnQgKi8KKwlfX3U4CXNzYXA7CQkJCQkvKiBzb3VyY2Ugc2VydmljZSBhY2Nlc3MgcG9pbnQgKi8KKwlfX3U4CWN0cmw7CQkJCQkvKiBjb250cm9sIGJ5dGUgIzEgKi8KKwl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyogRGVmaW5lIDgwMi4yIFR5cGUgMiBoZWFkZXIgKi8KK3N0cnVjdCBmZGRpXzgwMjJfMl9oZHIKKwl7CisJX191OAlkc2FwOwkJCQkJLyogZGVzdGluYXRpb24gc2VydmljZSBhY2Nlc3MgcG9pbnQgKi8KKwlfX3U4CXNzYXA7CQkJCQkvKiBzb3VyY2Ugc2VydmljZSBhY2Nlc3MgcG9pbnQgKi8KKwlfX3U4CWN0cmxfMTsJCQkJCS8qIGNvbnRyb2wgYnl0ZSAjMSAqLworCV9fdTgJY3RybF8yOwkJCQkJLyogY29udHJvbCBieXRlICMyICovCisJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qIERlZmluZSA4MDIuMiBTTkFQIGhlYWRlciAqLworI2RlZmluZSBGRERJX0tfT1VJX0xFTgkzCitzdHJ1Y3QgZmRkaV9zbmFwX2hkcgorCXsKKwlfX3U4CWRzYXA7CQkJCQkvKiBhbHdheXMgMHhBQSAqLworCV9fdTgJc3NhcDsJCQkJCS8qIGFsd2F5cyAweEFBICovCisJX191OAljdHJsOwkJCQkJLyogYWx3YXlzIDB4MDMgKi8KKwlfX3U4CW91aVtGRERJX0tfT1VJX0xFTl07CS8qIG9yZ2FuaXphdGlvbmFsIHVuaXZlcnNhbCBpZCAqLworCV9fdTE2CWV0aGVydHlwZTsJCQkJLyogcGFja2V0IHR5cGUgSUQgZmllbGQgKi8KKwl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyogRGVmaW5lIEZEREkgTExDIGZyYW1lIGhlYWRlciAqLworc3RydWN0IGZkZGloZHIKKwl7CisJX191OAlmYzsJCQkJCQkvKiBmcmFtZSBjb250cm9sICovCisJX191OAlkYWRkcltGRERJX0tfQUxFTl07CQkvKiBkZXN0aW5hdGlvbiBhZGRyZXNzICovCisJX191OAlzYWRkcltGRERJX0tfQUxFTl07CQkvKiBzb3VyY2UgYWRkcmVzcyAqLworCXVuaW9uCisJCXsKKwkJc3RydWN0IGZkZGlfODAyMl8xX2hkcgkJbGxjXzgwMjJfMTsKKwkJc3RydWN0IGZkZGlfODAyMl8yX2hkcgkJbGxjXzgwMjJfMjsKKwkJc3RydWN0IGZkZGlfc25hcF9oZHIJCWxsY19zbmFwOworCQl9IGhkcjsKKwl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyogRGVmaW5lIEZEREkgc3RhdGlzdGljcyBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCBmZGRpX3N0YXRpc3RpY3MgeworCisJLyogR2VuZXJpYyBzdGF0aXN0aWNzLiAqLworCisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgZ2VuOworCisJLyogRGV0YWlsZWQgRkRESSBzdGF0aXN0aWNzLiAgQWRvcHRlZCBmcm9tIFJGQyAxNTEyICovCisKKwlfX3U4CXNtdF9zdGF0aW9uX2lkWzhdOworCV9fdTMyCXNtdF9vcF92ZXJzaW9uX2lkOworCV9fdTMyCXNtdF9oaV92ZXJzaW9uX2lkOworCV9fdTMyCXNtdF9sb192ZXJzaW9uX2lkOworCV9fdTgJc210X3VzZXJfZGF0YVszMl07CisJX191MzIJc210X21pYl92ZXJzaW9uX2lkOworCV9fdTMyCXNtdF9tYWNfY3RzOworCV9fdTMyCXNtdF9ub25fbWFzdGVyX2N0czsKKwlfX3UzMglzbXRfbWFzdGVyX2N0czsKKwlfX3UzMglzbXRfYXZhaWxhYmxlX3BhdGhzOworCV9fdTMyCXNtdF9jb25maWdfY2FwYWJpbGl0aWVzOworCV9fdTMyCXNtdF9jb25maWdfcG9saWN5OworCV9fdTMyCXNtdF9jb25uZWN0aW9uX3BvbGljeTsKKwlfX3UzMglzbXRfdF9ub3RpZnk7CisJX191MzIJc210X3N0YXRfcnB0X3BvbGljeTsKKwlfX3UzMglzbXRfdHJhY2VfbWF4X2V4cGlyYXRpb247CisJX191MzIJc210X2J5cGFzc19wcmVzZW50OworCV9fdTMyCXNtdF9lY21fc3RhdGU7CisJX191MzIJc210X2NmX3N0YXRlOworCV9fdTMyCXNtdF9yZW1vdGVfZGlzY29ubmVjdF9mbGFnOworCV9fdTMyCXNtdF9zdGF0aW9uX3N0YXR1czsKKwlfX3UzMglzbXRfcGVlcl93cmFwX2ZsYWc7CisJX191MzIJc210X3RpbWVfc3RhbXA7CisJX191MzIJc210X3RyYW5zaXRpb25fdGltZV9zdGFtcDsKKwlfX3UzMgltYWNfZnJhbWVfc3RhdHVzX2Z1bmN0aW9uczsKKwlfX3UzMgltYWNfdF9tYXhfY2FwYWJpbGl0eTsKKwlfX3UzMgltYWNfdHZ4X2NhcGFiaWxpdHk7CisJX191MzIJbWFjX2F2YWlsYWJsZV9wYXRoczsKKwlfX3UzMgltYWNfY3VycmVudF9wYXRoOworCV9fdTgJbWFjX3Vwc3RyZWFtX25icltGRERJX0tfQUxFTl07CisJX191OAltYWNfZG93bnN0cmVhbV9uYnJbRkRESV9LX0FMRU5dOworCV9fdTgJbWFjX29sZF91cHN0cmVhbV9uYnJbRkRESV9LX0FMRU5dOworCV9fdTgJbWFjX29sZF9kb3duc3RyZWFtX25icltGRERJX0tfQUxFTl07CisJX191MzIJbWFjX2R1cF9hZGRyZXNzX3Rlc3Q7CisJX191MzIJbWFjX3JlcXVlc3RlZF9wYXRoczsKKwlfX3UzMgltYWNfZG93bnN0cmVhbV9wb3J0X3R5cGU7CisJX191OAltYWNfc210X2FkZHJlc3NbRkRESV9LX0FMRU5dOworCV9fdTMyCW1hY190X3JlcTsKKwlfX3UzMgltYWNfdF9uZWc7CisJX191MzIJbWFjX3RfbWF4OworCV9fdTMyCW1hY190dnhfdmFsdWU7CisJX191MzIJbWFjX2ZyYW1lX2N0czsKKwlfX3UzMgltYWNfY29waWVkX2N0czsKKwlfX3UzMgltYWNfdHJhbnNtaXRfY3RzOworCV9fdTMyCW1hY19lcnJvcl9jdHM7CisJX191MzIJbWFjX2xvc3RfY3RzOworCV9fdTMyCW1hY19mcmFtZV9lcnJvcl90aHJlc2hvbGQ7CisJX191MzIJbWFjX2ZyYW1lX2Vycm9yX3JhdGlvOworCV9fdTMyCW1hY19ybXRfc3RhdGU7CisJX191MzIJbWFjX2RhX2ZsYWc7CisJX191MzIJbWFjX3VuYV9kYV9mbGFnOworCV9fdTMyCW1hY19mcmFtZV9lcnJvcl9mbGFnOworCV9fdTMyCW1hY19tYV91bml0ZGF0YV9hdmFpbGFibGU7CisJX191MzIJbWFjX2hhcmR3YXJlX3ByZXNlbnQ7CisJX191MzIJbWFjX21hX3VuaXRkYXRhX2VuYWJsZTsKKwlfX3UzMglwYXRoX3R2eF9sb3dlcl9ib3VuZDsKKwlfX3UzMglwYXRoX3RfbWF4X2xvd2VyX2JvdW5kOworCV9fdTMyCXBhdGhfbWF4X3RfcmVxOworCV9fdTMyCXBhdGhfY29uZmlndXJhdGlvbls4XTsKKwlfX3UzMglwb3J0X215X3R5cGVbMl07CisJX191MzIJcG9ydF9uZWlnaGJvcl90eXBlWzJdOworCV9fdTMyCXBvcnRfY29ubmVjdGlvbl9wb2xpY2llc1syXTsKKwlfX3UzMglwb3J0X21hY19pbmRpY2F0ZWRbMl07CisJX191MzIJcG9ydF9jdXJyZW50X3BhdGhbMl07CisJX191OAlwb3J0X3JlcXVlc3RlZF9wYXRoc1szKjJdOworCV9fdTMyCXBvcnRfbWFjX3BsYWNlbWVudFsyXTsKKwlfX3UzMglwb3J0X2F2YWlsYWJsZV9wYXRoc1syXTsKKwlfX3UzMglwb3J0X3BtZF9jbGFzc1syXTsKKwlfX3UzMglwb3J0X2Nvbm5lY3Rpb25fY2FwYWJpbGl0aWVzWzJdOworCV9fdTMyCXBvcnRfYnNfZmxhZ1syXTsKKwlfX3UzMglwb3J0X2xjdF9mYWlsX2N0c1syXTsKKwlfX3UzMglwb3J0X2xlcl9lc3RpbWF0ZVsyXTsKKwlfX3UzMglwb3J0X2xlbV9yZWplY3RfY3RzWzJdOworCV9fdTMyCXBvcnRfbGVtX2N0c1syXTsKKwlfX3UzMglwb3J0X2xlcl9jdXRvZmZbMl07CisJX191MzIJcG9ydF9sZXJfYWxhcm1bMl07CisJX191MzIJcG9ydF9jb25uZWN0X3N0YXRlWzJdOworCV9fdTMyCXBvcnRfcGNtX3N0YXRlWzJdOworCV9fdTMyCXBvcnRfcGNfd2l0aGhvbGRbMl07CisJX191MzIJcG9ydF9sZXJfZmxhZ1syXTsKKwlfX3UzMglwb3J0X2hhcmR3YXJlX3ByZXNlbnRbMl07CisJfTsKKworI2VuZGlmCS8qIF9MSU5VWF9JRl9GRERJX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWZfZnJhZC5oIGIvaW5jbHVkZS9saW51eC9pZl9mcmFkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M5NGIxNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvaWZfZnJhZC5oCkBAIC0wLDAgKzEsMjAwIEBACisvKgorICogRExDSS9GUkFECURlZmluaXRpb25zIGZvciBGcmFtZSBSZWxheSBBY2Nlc3MgRGV2aWNlcy4gIERMQ0kgZGV2aWNlcyBhcmUKKyAqCQljcmVhdGVkIGZvciBlYWNoIERMQ0kgYXNzb2NpYXRlZCB3aXRoIGEgRlJBRC4gIFRoZSBGUkFEIGRyaXZlcgorICoJCWlzIG5vdCB0cnVseSBhIG5ldHdvcmsgZGV2aWNlLCBidXQgdGhlIGxvd2VyIGxldmVsIGRldmljZQorICoJCWhhbmRsZXIuICBUaGlzIGFsbG93cyBvdGhlciBGUkFEIG1hbnVmYWN0dXJlcnMgdG8gdXNlIHRoZSBETENJCisgKgkJY29kZSwgaW5jbHVkaW5nIGl0cyBSRkMxNDkwIGVuY2Fwc3VsYXRpb24gYWxvbmdzaWRlIHRoZSBjdXJyZW50CisgKgkJaW1wbGVtZW50YXRpb24gZm9yIHRoZSBTYW5nb21hIGNhcmRzLgorICoKKyAqIFZlcnNpb246CUAoIylpZl9pZnJhZC5oCTAuMTUJMzEgTWFyIDk2CisgKgorICogQXV0aG9yOglNaWtlIE1jTGFnYW4gPG1pa2UubWNsYWdhbkBsaW51eC5vcmc+CisgKgorICogQ2hhbmdlczoKKyAqCQkwLjE1CU1pa2UgTWNMYWdhbgljaGFuZ2VkIHN0cnVjdHVyZSBkZWZzIChwYWNrZWQpCisgKgkJCQkJcmUtYXJyYW5nZWQgZmxhZ3MKKyAqCQkJCQlhZGRlZCBETENJX1JFVCB2YXJzCisgKgorICoJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCQltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICoJCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICoJCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfRlJBRF9IXworI2RlZmluZSBfRlJBRF9IXworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvaWYuaD4KKworI2lmIGRlZmluZWQoQ09ORklHX0RMQ0kpIHx8IGRlZmluZWQoQ09ORklHX0RMQ0lfTU9EVUxFKQorCisvKiBTdHJ1Y3R1cmVzIGFuZCBjb25zdGFudHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBETENJIGRldmljZSBkcml2ZXIgKi8KKworc3RydWN0IGRsY2lfYWRkCit7CisgICBjaGFyICBkZXZuYW1lW0lGTkFNU0laXTsKKyAgIHNob3J0IGRsY2k7Cit9OworCisjZGVmaW5lIERMQ0lfR0VUX0NPTkYJKFNJT0NERVZQUklWQVRFICsgMikKKyNkZWZpbmUgRExDSV9TRVRfQ09ORgkoU0lPQ0RFVlBSSVZBVEUgKyAzKQorCisvKiAKKyAqIFRoZXNlIGFyZSByZWxhdGVkIHRvIHRoZSBTYW5nb21hIFNETEEgYW5kIHNob3VsZCByZW1haW4gaW4gb3JkZXIuIAorICogQ29kZSB3aXRoaW4gdGhlIFNETEEgbW9kdWxlIGlzIGJhc2VkIG9uIHRoZSBzcGVjaWZpY3Mgb2YgdGhpcyAKKyAqIHN0cnVjdHVyZS4gIENoYW5nZSBhdCB5b3VyIG93biBwZXJpbC4KKyAqLworc3RydWN0IGRsY2lfY29uZiB7CisgICBzaG9ydCBmbGFnczsKKyAgIHNob3J0IENJUl9md2Q7CisgICBzaG9ydCBCY19md2Q7CisgICBzaG9ydCBCZV9md2Q7CisgICBzaG9ydCBDSVJfYndkOworICAgc2hvcnQgQmNfYndkOworICAgc2hvcnQgQmVfYndkOyAKKworLyogdGhlc2UgYXJlIHBhcnQgb2YgdGhlIHN0YXR1cyByZWFkICovCisgICBzaG9ydCBUY19md2Q7CisgICBzaG9ydCBUY19id2Q7CisgICBzaG9ydCBUZl9tYXg7CisgICBzaG9ydCBUYl9tYXg7CisKKy8qIGFkZCBhbnkgbmV3IGZpZWxkcyBoZXJlIGFib3ZlIGlzIGEgbWlycm9yIG9mIHNkbGFfZGxjaV9jb25mICovCit9OworCisjZGVmaW5lIERMQ0lfR0VUX1NMQVZFCShTSU9DREVWUFJJVkFURSArIDQpCisKKy8qIGNvbmZpZ3VyYXRpb24gZmxhZ3MgZm9yIERMQ0kgKi8KKyNkZWZpbmUgRExDSV9JR05PUkVfQ0lSX09VVAkweDAwMDEKKyNkZWZpbmUgRExDSV9BQ0NPVU5UX0NJUl9JTgkweDAwMDIKKyNkZWZpbmUgRExDSV9CVUZGRVJfSUYJCTB4MDAwOAorCisjZGVmaW5lIERMQ0lfVkFMSURfRkxBR1MJMHgwMDBCCisKKy8qIEZSQUQgZHJpdmVyIHVzZXMgdGhlc2UgdG8gaW5kaWNhdGUgd2hhdCBpdCBkaWQgd2l0aCBwYWNrZXQgKi8KKyNkZWZpbmUgRExDSV9SRVRfT0sJCTB4MDAKKyNkZWZpbmUgRExDSV9SRVRfRVJSCQkweDAxCisjZGVmaW5lIERMQ0lfUkVUX0RST1AJCTB4MDIKKworLyogZGVmaW5lcyBmb3IgdGhlIGFjdHVhbCBGcmFtZSBSZWxheSBoYXJkd2FyZSAqLworI2RlZmluZSBGUkFEX0dFVF9DT05GCShTSU9DREVWUFJJVkFURSkKKyNkZWZpbmUgRlJBRF9TRVRfQ09ORgkoU0lPQ0RFVlBSSVZBVEUgKyAxKQorCisjZGVmaW5lIEZSQURfTEFTVF9JT0NUTAlGUkFEX1NFVF9DT05GCisKKy8qCisgKiBCYXNlZCBvbiB0aGUgc2V0dXAgZm9yIHRoZSBTYW5nb21hIFNETEEuICBJZiBjaGFuZ2VzIGFyZSAKKyAqIG5lY2Vzc2FyeSB0byB0aGlzIHN0cnVjdHVyZSwgYSByb3V0aW5lIHdpbGwgbmVlZCB0byBiZSAKKyAqIGFkZGVkIHRvIHRoYXQgbW9kdWxlIHRvIGNvcHkgZmllbGRzLgorICovCitzdHJ1Y3QgZnJhZF9jb25mIAoreworICAgc2hvcnQgc3RhdGlvbjsKKyAgIHNob3J0IGZsYWdzOworICAgc2hvcnQga2JhdWQ7CisgICBzaG9ydCBjbG9ja2luZzsKKyAgIHNob3J0IG10dTsKKyAgIHNob3J0IFQzOTE7CisgICBzaG9ydCBUMzkyOworICAgc2hvcnQgTjM5MTsKKyAgIHNob3J0IE4zOTI7CisgICBzaG9ydCBOMzkzOworICAgc2hvcnQgQ0lSX2Z3ZDsKKyAgIHNob3J0IEJjX2Z3ZDsKKyAgIHNob3J0IEJlX2Z3ZDsKKyAgIHNob3J0IENJUl9id2Q7CisgICBzaG9ydCBCY19id2Q7CisgICBzaG9ydCBCZV9id2Q7CisKKy8qIEFkZCBuZXcgZmllbGRzIGhlcmUsIGFib3ZlIGlzIGEgbWlycm9yIG9mIHRoZSBzZGxhX2NvbmYgKi8KKworfTsKKworI2RlZmluZSBGUkFEX1NUQVRJT05fQ1BFCTB4MDAwMAorI2RlZmluZSBGUkFEX1NUQVRJT05fTk9ERQkweDAwMDEKKworI2RlZmluZSBGUkFEX1RYX0lHTk9SRV9DSVIJMHgwMDAxCisjZGVmaW5lIEZSQURfUlhfQUNDT1VOVF9DSVIJMHgwMDAyCisjZGVmaW5lIEZSQURfRFJPUF9BQk9SVEVECTB4MDAwNAorI2RlZmluZSBGUkFEX0JVRkZFUklGCQkweDAwMDgKKyNkZWZpbmUgRlJBRF9TVEFUUwkJMHgwMDEwCisjZGVmaW5lIEZSQURfTUNJCQkweDAxMDAKKyNkZWZpbmUgRlJBRF9BVVRPRExDSQkJMHg4MDAwCisjZGVmaW5lIEZSQURfVkFMSURfRkxBR1MJMHg4MTFGCisKKyNkZWZpbmUgRlJBRF9DTE9DS19JTlQJCTB4MDAwMQorI2RlZmluZSBGUkFEX0NMT0NLX0VYVAkJMHgwMDAwCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKy8qIHRoZXNlIGFyZSB0aGUgZmllbGRzIG9mIGFuIFJGQyAxNDkwIGhlYWRlciAqLworc3RydWN0IGZyaGRyCit7CisgICB1bnNpZ25lZCBjaGFyICBjb250cm9sCV9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisgICAvKiBmb3IgSVAgcGFja2V0cywgdGhpcyBjYW4gYmUgdGhlIE5MUElEICovCisgICB1bnNpZ25lZCBjaGFyICBwYWQJCV9fYXR0cmlidXRlX18oKHBhY2tlZCkpOyAKKworICAgdW5zaWduZWQgY2hhciAgTkxQSUQJCV9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworICAgdW5zaWduZWQgY2hhciAgT1VJWzNdCV9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworICAgdW5zaWduZWQgc2hvcnQgUElECQlfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBJUF9OTFBJRCBwYWQgCit9OworCisvKiBzZWUgUkZDIDE0OTAgZm9yIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBmb2xsb3dpbmcgKi8KKyNkZWZpbmUgRlJBRF9JX1VJCQkweDAzCisKKyNkZWZpbmUgRlJBRF9QX1BBRERJTkcJCTB4MDAKKyNkZWZpbmUgRlJBRF9QX1E5MzMJCTB4MDgKKyNkZWZpbmUgRlJBRF9QX1NOQVAJCTB4ODAKKyNkZWZpbmUgRlJBRF9QX0NMTlAJCTB4ODEKKyNkZWZpbmUgRlJBRF9QX0lQCQkweENDCisKK3N0cnVjdCBkbGNpX2xvY2FsCit7CisgICBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKKyAgIHN0cnVjdCBuZXRfZGV2aWNlICAgICAgKm1hc3RlcjsKKyAgIHN0cnVjdCBuZXRfZGV2aWNlICAgICAgKnNsYXZlOworICAgc3RydWN0IGRsY2lfY29uZiAgICAgICBjb25maWc7CisgICBpbnQgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZWQ7CisgICBzdHJ1Y3QgbGlzdF9oZWFkCSAgbGlzdDsKKworICAgLyogY2FsbGJhY2sgZnVuY3Rpb24gKi8KKyAgIHZvaWQgICAgICAgICAgICAgICgqcmVjZWl2ZSkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKik7Cit9OworCitzdHJ1Y3QgZnJhZF9sb2NhbAoreworICAgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CisKKyAgIC8qIGRldmljZXMgd2hpY2ggdGhpcyBGUkFEIGlzIHNsYXZlZCB0byAqLworICAgc3RydWN0IG5ldF9kZXZpY2UgICAgICptYXN0ZXJbQ09ORklHX0RMQ0lfTUFYXTsKKyAgIHNob3J0ICAgICAgICAgICAgIGRsY2lbQ09ORklHX0RMQ0lfTUFYXTsKKworICAgc3RydWN0IGZyYWRfY29uZiAgY29uZmlnOworICAgaW50ICAgICAgICAgICAgICAgY29uZmlndXJlZDsJLyogaGFzIHRoaXMgZGV2aWNlIGJlZW4gY29uZmlndXJlZCAqLworICAgaW50ICAgICAgICAgICAgICAgaW5pdGlhbGl6ZWQ7CS8qIG1lbV9zdGFydCwgcG9ydCwgaXJxIHNldCA/ICovCisKKyAgIC8qIGNhbGxiYWNrIGZ1bmN0aW9ucyAqLworICAgaW50ICAgICAgICAgICAgICAgKCphY3RpdmF0ZSkoc3RydWN0IG5ldF9kZXZpY2UgKiwgc3RydWN0IG5ldF9kZXZpY2UgKik7CisgICBpbnQgICAgICAgICAgICAgICAoKmRlYWN0aXZhdGUpKHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBuZXRfZGV2aWNlICopOworICAgaW50ICAgICAgICAgICAgICAgKCphc3NvYykoc3RydWN0IG5ldF9kZXZpY2UgKiwgc3RydWN0IG5ldF9kZXZpY2UgKik7CisgICBpbnQgICAgICAgICAgICAgICAoKmRlYXNzb2MpKHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBuZXRfZGV2aWNlICopOworICAgaW50ICAgICAgICAgICAgICAgKCpkbGNpX2NvbmYpKHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBuZXRfZGV2aWNlICosIGludCBnZXQpOworCisgICAvKiBmaWVsZHMgdGhhdCBhcmUgdXNlZCBieSB0aGUgU2FuZ29tYSBTRExBIGNhcmRzICovCisgICBzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKKyAgIGludCAgICAgICAgICAgICAgIHR5cGU7CQkvKiBhZGFwdGVyIHR5cGUgKi8KKyAgIGludCAgICAgICAgICAgICAgIHN0YXRlOwkJLyogc3RhdGUgb2YgdGhlIFM1MDIvOCBjb250cm9sIGxhdGNoICovCisgICBpbnQgICAgICAgICAgICAgICBidWZmZXI7CQkvKiBjdXJyZW50IGJ1ZmZlciBmb3IgUzUwOCBmaXJtd2FyZSAqLworfTsKKworZXh0ZXJuIHZvaWQgZGxjaV9pb2N0bF9zZXQoaW50ICgqaG9vaykodW5zaWduZWQgaW50LCB2b2lkIF9fdXNlciAqKSk7CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBDT05GSUdfRExDSSB8fCBDT05GSUdfRExDSV9NT0RVTEUgKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lmX2hpcHBpLmggYi9pbmNsdWRlL2xpbnV4L2lmX2hpcHBpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhjYTcyYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvaWZfaGlwcGkuaApAQCAtMCwwICsxLDE1NyBAQAorLyoKKyAqIElORVQJCUFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBUQ1AvSVAgcHJvdG9jb2wgc3VpdGUgZm9yIHRoZSBMSU5VWAorICoJCW9wZXJhdGluZyBzeXN0ZW0uICBJTkVUIGlzIGltcGxlbWVudGVkIHVzaW5nIHRoZSAgQlNEIFNvY2tldAorICoJCWludGVyZmFjZSBhcyB0aGUgbWVhbnMgb2YgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSB1c2VyIGxldmVsLgorICoKKyAqCQlHbG9iYWwgZGVmaW5pdGlvbnMgZm9yIHRoZSBISVBQSSBpbnRlcmZhY2UuCisgKgorICogVmVyc2lvbjoJQCgjKWlmX2hpcHBpLmgJMS4wLjAJMDUvMjYvOTcKKyAqCisgKiBBdXRob3I6CUZyZWQgTi4gdmFuIEtlbXBlbiwgPHdhbHRqZUB1V2FsdC5OTC5NdWduZXQuT1JHPgorICoJCURvbmFsZCBCZWNrZXIsIDxiZWNrZXJAc3VwZXIub3JnPgorICoJCUFsYW4gQ294LCA8YWxhbkByZWRoYXQuY29tPgorICoJCVN0ZXZlIFdoaXRlaG91c2UsIDxndzdycm1AZWVzaGFjazMuc3dhbi5hYy51az4KKyAqCQlKZXMgU29yZW5zZW4sIDxKZXMuU29yZW5zZW5AY2Vybi5jaD4KKyAqCisgKgkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKgkJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKgkJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworIAorI2lmbmRlZiBfTElOVVhfSUZfSElQUElfSAorI2RlZmluZSBfTElOVVhfSUZfSElQUElfSAorCisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorCisvKgorICoJSElQUEkgbWFnaWMgY29uc3RhbnRzLgorICovCisKKyNkZWZpbmUgSElQUElfQUxFTgk2CQkvKiBCeXRlcyBpbiBvbmUgSElQUEkgaHctYWRkcgkgICAqLworI2RlZmluZSBISVBQSV9ITEVOCXNpemVvZihzdHJ1Y3QgaGlwcGlfaGRyKQorI2RlZmluZSBISVBQSV9aTEVOCTAJCS8qIE1pbi4gYnl0ZXMgaW4gZnJhbWUgd2l0aG91dCBGQ1MgKi8KKyNkZWZpbmUgSElQUElfREFUQV9MRU4JNjUyODAJCS8qIE1heC4gYnl0ZXMgaW4gcGF5bG9hZAkgICAqLworI2RlZmluZSBISVBQSV9GUkFNRV9MRU4JKEhJUFBJX0RBVEFfTEVOICsgSElQUElfSExFTikKKwkJCQkJLyogTWF4LiBieXRlcyBpbiBmcmFtZSB3aXRob3V0IEZDUyAqLworCisvKgorICogRGVmaW5lIExMQyBhbmQgU05BUCBjb25zdGFudHMuCisgKi8KKyNkZWZpbmUgSElQUElfRVhURU5ERURfU0FQCTB4QUEKKyNkZWZpbmUgSElQUElfVUlfQ01ECQkweDAzCisKKworLyoKKyAqCURvIHdlIG5lZWQgdG8gbGlzdCBzb21lIHNvcnQgb2YgSUQncyBoZXJlPworICovCisKKy8qCisgKglISVBQSSBzdGF0aXN0aWNzIGNvbGxlY3Rpb24gZGF0YS4gCisgKi8KKyAKK3N0cnVjdCBoaXBuZXRfc3RhdGlzdGljcworeworCWludAlyeF9wYWNrZXRzOwkJLyogdG90YWwgcGFja2V0cyByZWNlaXZlZAkqLworCWludAl0eF9wYWNrZXRzOwkJLyogdG90YWwgcGFja2V0cyB0cmFuc21pdHRlZAkqLworCWludAlyeF9lcnJvcnM7CQkvKiBiYWQgcGFja2V0cyByZWNlaXZlZAkJKi8KKwlpbnQJdHhfZXJyb3JzOwkJLyogcGFja2V0IHRyYW5zbWl0IHByb2JsZW1zCSovCisJaW50CXJ4X2Ryb3BwZWQ7CQkvKiBubyBzcGFjZSBpbiBsaW51eCBidWZmZXJzCSovCisJaW50CXR4X2Ryb3BwZWQ7CQkvKiBubyBzcGFjZSBhdmFpbGFibGUgaW4gbGludXgJKi8KKworCS8qIGRldGFpbGVkIHJ4X2Vycm9yczogKi8KKwlpbnQJcnhfbGVuZ3RoX2Vycm9yczsKKwlpbnQJcnhfb3Zlcl9lcnJvcnM7CQkvKiByZWNlaXZlciByaW5nIGJ1ZmYgb3ZlcmZsb3cJKi8KKwlpbnQJcnhfY3JjX2Vycm9yczsJCS8qIHJlY3ZlZCBwa3Qgd2l0aCBjcmMgZXJyb3IJKi8KKwlpbnQJcnhfZnJhbWVfZXJyb3JzOwkvKiByZWN2J2QgZnJhbWUgYWxpZ25tZW50IGVycm9yICovCisJaW50CXJ4X2ZpZm9fZXJyb3JzOwkJLyogcmVjdidyIGZpZm8gb3ZlcnJ1bgkJKi8KKwlpbnQJcnhfbWlzc2VkX2Vycm9yczsJLyogcmVjZWl2ZXIgbWlzc2VkIHBhY2tldAkqLworCisJLyogZGV0YWlsZWQgdHhfZXJyb3JzICovCisJaW50CXR4X2Fib3J0ZWRfZXJyb3JzOworCWludAl0eF9jYXJyaWVyX2Vycm9yczsKKwlpbnQJdHhfZmlmb19lcnJvcnM7CisJaW50CXR4X2hlYXJ0YmVhdF9lcnJvcnM7CisJaW50CXR4X3dpbmRvd19lcnJvcnM7Cit9OworCisKK3N0cnVjdCBoaXBwaV9mcF9oZHIKK3sKKyNpZiAwCisJX191OAkJdWxwOwkJCQkvKiBtdXN0IGNvbnRhaW4gNCAqLworI2lmIGRlZmluZWQgKF9fQklHX0VORElBTl9CSVRGSUVMRCkKKwlfX3U4CQlkMV9kYXRhX3ByZXNlbnQ6MTsJCS8qIG11c3QgYmUgMSAqLworCV9fdTgJCXN0YXJ0X2QyX2J1cnN0X2JvdW5kYXJ5OjE7CS8qIG11c3QgYmUgemVybyAqLworCV9fdTgJCXJlc2VydmVkOjY7CQkJLyogbXVzdCBiZSB6ZXJvICovCisjaWYgMAorCV9fdTE2CQlyZXNlcnZlZDE6NTsKKwlfX3UxNgkJZDFfYXJlYV9zaXplOjg7CQkJLyogbXVzdCBiZSAzICovCisJX191MTYJCWQyX29mZnNldDozOwkJCS8qIG11c3QgYmUgemVybyAqLworI2VuZGlmCisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTl9CSVRGSUVMRCkKKwlfX3U4CQlyZXNlcnZlZDo2OwkJCS8qIG11c3QgYmUgemVybyAqLworCV9fdTgJIAlzdGFydF9kMl9idXJzdF9ib3VuZGFyeToxOwkvKiBtdXN0IGJlIHplcm8gKi8KKwlfX3U4CQlkMV9kYXRhX3ByZXNlbnQ6MTsJCS8qIG11c3QgYmUgMSAqLworI2lmIDAKKwlfX3UxNgkJZDJfb2Zmc2V0OjM7CQkJLyogbXVzdCBiZSB6ZXJvICovCisJX191MTYJCWQxX2FyZWFfc2l6ZTo4OwkJCS8qIG11c3QgYmUgMyAqLworCV9fdTE2CQlyZXNlcnZlZDE6NTsJCQkvKiBtdXN0IGJlIHplcm8gKi8KKyNlbmRpZgorI2Vsc2UKKyNlcnJvcgkiUGxlYXNlIGZpeCA8YXNtL2J5dGVvcmRlci5oPiIKKyNlbmRpZgorI2Vsc2UKKwlfX3UzMgkJZml4ZWQ7CisjZW5kaWYKKwlfX3UzMgkJZDJfc2l6ZTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgaGlwcGlfbGVfaGRyCit7CisjaWYgZGVmaW5lZCAoX19CSUdfRU5ESUFOX0JJVEZJRUxEKQorCV9fdTgJCWZjOjM7CisJX191OAkJZG91YmxlX3dpZGU6MTsKKwlfX3U4CQltZXNzYWdlX3R5cGU6NDsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEKQorCV9fdTgJCW1lc3NhZ2VfdHlwZTo0OworCV9fdTgJCWRvdWJsZV93aWRlOjE7CisJX191OAkJZmM6MzsKKyNlbmRpZgorCV9fdTgJCWRlc3Rfc3dpdGNoX2FkZHJbM107CisjaWYgZGVmaW5lZCAoX19CSUdfRU5ESUFOX0JJVEZJRUxEKQorCV9fdTgJCWRlc3RfYWRkcl90eXBlOjQsCisJCQlzcmNfYWRkcl90eXBlOjQ7CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTl9CSVRGSUVMRCkKKwlfX3U4CQlzcmNfYWRkcl90eXBlOjQsCisJCQlkZXN0X2FkZHJfdHlwZTo0OworI2VuZGlmCisJX191OAkJc3JjX3N3aXRjaF9hZGRyWzNdOworCV9fdTE2CQlyZXNlcnZlZDsKKwlfX3U4CQlkYWRkcltISVBQSV9BTEVOXTsKKwlfX3UxNgkJbG9jYWxseV9hZG1pbmlzdGVyZWQ7CisJX191OAkJc2FkZHJbSElQUElfQUxFTl07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2RlZmluZSBISVBQSV9PVUlfTEVOCTMKKy8qCisgKiBMb29rcyBsaWtlIHRoZSBkc2FwIGFuZCBzc2FwIGZpZWxkcyBoYXZlIGJlZW4gc3dhcHBlZCBieSBtaXN0YWtlIGluCisgKiBSRkMgMjA2NyAiSVAgb3ZlciBISVBQSSIuCisgKi8KK3N0cnVjdCBoaXBwaV9zbmFwX2hkcgoreworCV9fdTgJZHNhcDsJCQkvKiBhbHdheXMgMHhBQSAqLworCV9fdTgJc3NhcDsJCQkvKiBhbHdheXMgMHhBQSAqLworCV9fdTgJY3RybDsJCQkvKiBhbHdheXMgMHgwMyAqLworCV9fdTgJb3VpW0hJUFBJX09VSV9MRU5dOwkvKiBvcmdhbml6YXRpb25hbCB1bml2ZXJzYWwgaWQgKHplcm8pKi8KKwlfX3UxNglldGhlcnR5cGU7CQkvKiBwYWNrZXQgdHlwZSBJRCBmaWVsZCAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBoaXBwaV9oZHIKK3sKKwlzdHJ1Y3QgaGlwcGlfZnBfaGRyCWZwOworCXN0cnVjdCBoaXBwaV9sZV9oZHIJbGU7CisJc3RydWN0IGhpcHBpX3NuYXBfaGRyCXNuYXA7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2VuZGlmCS8qIF9MSU5VWF9JRl9ISVBQSV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lmX2luZmluaWJhbmQuaCBiL2luY2x1ZGUvbGludXgvaWZfaW5maW5pYmFuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNjU5ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2lmX2luZmluaWJhbmQuaApAQCAtMCwwICsxLDI5IEBACisvKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgYXQKKyAqIDxodHRwOi8vd3d3LmZzZi5vcmcvY29weWxlZnQvZ3BsLmh0bWw+LCBvciB0aGUgT3BlbklCLm9yZyBCU0QKKyAqIGxpY2Vuc2UsIGF2YWlsYWJsZSBpbiB0aGUgTElDRU5TRS5UWFQgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcworICogc29mdHdhcmUuICBUaGVzZSBkZXRhaWxzIGFyZSBhbHNvIGF2YWlsYWJsZSBhdAorICogPGh0dHA6Ly9vcGVuaWIub3JnL2xpY2Vuc2UuaHRtbD4uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgVG9wc3BpbiBDb21tdW5pY2F0aW9ucy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogJElkJAorICovCisKKyNpZm5kZWYgX0xJTlVYX0lGX0lORklOSUJBTkRfSAorI2RlZmluZSBfTElOVVhfSUZfSU5GSU5JQkFORF9ICisKKyNkZWZpbmUgSU5GSU5JQkFORF9BTEVOCQkyMAkvKiBPY3RldHMgaW4gSVBvSUIgSFcgYWRkcgkqLworCisjZW5kaWYgLyogX0xJTlVYX0lGX0lORklOSUJBTkRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl9sdGFsay5oIGIvaW5jbHVkZS9saW51eC9pZl9sdGFsay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3NWU4MzIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2lmX2x0YWxrLmgKQEAgLTAsMCArMSwxMiBAQAorI2lmbmRlZiBfX0xJTlVYX0xUQUxLX0gKKyNkZWZpbmUgX19MSU5VWF9MVEFMS19ICisKKyNkZWZpbmUgTFRBTEtfSExFTgkJMQorI2RlZmluZSBMVEFMS19NVFUJCTYwMAorI2RlZmluZSBMVEFMS19BTEVOCQkxCisKKyNpZmRlZiBfX0tFUk5FTF9fCitleHRlcm4gdm9pZCBsdGFsa19zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqKTsKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWZfcGFja2V0LmggYi9pbmNsdWRlL2xpbnV4L2lmX3BhY2tldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5MjU1ODU0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9pZl9wYWNrZXQuaApAQCAtMCwwICsxLDEwMiBAQAorI2lmbmRlZiBfX0xJTlVYX0lGX1BBQ0tFVF9ICisjZGVmaW5lIF9fTElOVVhfSUZfUEFDS0VUX0gKKworc3RydWN0IHNvY2thZGRyX3BrdAoreworCXVuc2lnbmVkIHNob3J0IHNwa3RfZmFtaWx5OworCXVuc2lnbmVkIGNoYXIgc3BrdF9kZXZpY2VbMTRdOworCXVuc2lnbmVkIHNob3J0IHNwa3RfcHJvdG9jb2w7Cit9OworCitzdHJ1Y3Qgc29ja2FkZHJfbGwKK3sKKwl1bnNpZ25lZCBzaG9ydAlzbGxfZmFtaWx5OworCXVuc2lnbmVkIHNob3J0CXNsbF9wcm90b2NvbDsKKwlpbnQJCXNsbF9pZmluZGV4OworCXVuc2lnbmVkIHNob3J0CXNsbF9oYXR5cGU7CisJdW5zaWduZWQgY2hhcglzbGxfcGt0dHlwZTsKKwl1bnNpZ25lZCBjaGFyCXNsbF9oYWxlbjsKKwl1bnNpZ25lZCBjaGFyCXNsbF9hZGRyWzhdOworfTsKKworLyogUGFja2V0IHR5cGVzICovCisKKyNkZWZpbmUgUEFDS0VUX0hPU1QJCTAJCS8qIFRvIHVzCQkqLworI2RlZmluZSBQQUNLRVRfQlJPQURDQVNUCTEJCS8qIFRvIGFsbAkJKi8KKyNkZWZpbmUgUEFDS0VUX01VTFRJQ0FTVAkyCQkvKiBUbyBncm91cAkJKi8KKyNkZWZpbmUgUEFDS0VUX09USEVSSE9TVAkzCQkvKiBUbyBzb21lb25lIGVsc2UgCSovCisjZGVmaW5lIFBBQ0tFVF9PVVRHT0lORwkJNAkJLyogT3V0Z29pbmcgb2YgYW55IHR5cGUgKi8KKy8qIFRoZXNlIG9uZXMgYXJlIGludmlzaWJsZSBieSB1c2VyIGxldmVsICovCisjZGVmaW5lIFBBQ0tFVF9MT09QQkFDSwkJNQkJLyogTUMvQlJEIGZyYW1lIGxvb3BlZCBiYWNrICovCisjZGVmaW5lIFBBQ0tFVF9GQVNUUk9VVEUJNgkJLyogRmFzdHJvdXRlZCBmcmFtZQkqLworCisvKiBQYWNrZXQgc29ja2V0IG9wdGlvbnMgKi8KKworI2RlZmluZSBQQUNLRVRfQUREX01FTUJFUlNISVAJCTEKKyNkZWZpbmUgUEFDS0VUX0RST1BfTUVNQkVSU0hJUAkJMgorI2RlZmluZSBQQUNLRVRfUkVDVl9PVVRQVVQJCTMKKy8qIFZhbHVlIDQgaXMgc3RpbGwgdXNlZCBieSBvYnNvbGV0ZSB0dXJiby1wYWNrZXQuICovCisjZGVmaW5lIFBBQ0tFVF9SWF9SSU5HCQkJNQorI2RlZmluZSBQQUNLRVRfU1RBVElTVElDUwkJNgorI2RlZmluZSBQQUNLRVRfQ09QWV9USFJFU0gJCTcKKworc3RydWN0IHRwYWNrZXRfc3RhdHMKK3sKKwl1bnNpZ25lZCBpbnQJdHBfcGFja2V0czsKKwl1bnNpZ25lZCBpbnQJdHBfZHJvcHM7Cit9OworCitzdHJ1Y3QgdHBhY2tldF9oZHIKK3sKKwl1bnNpZ25lZCBsb25nCXRwX3N0YXR1czsKKyNkZWZpbmUgVFBfU1RBVFVTX0tFUk5FTAkwCisjZGVmaW5lIFRQX1NUQVRVU19VU0VSCQkxCisjZGVmaW5lIFRQX1NUQVRVU19DT1BZCQkyCisjZGVmaW5lIFRQX1NUQVRVU19MT1NJTkcJNAorI2RlZmluZSBUUF9TVEFUVVNfQ1NVTU5PVFJFQURZCTgKKwl1bnNpZ25lZCBpbnQJdHBfbGVuOworCXVuc2lnbmVkIGludAl0cF9zbmFwbGVuOworCXVuc2lnbmVkIHNob3J0CXRwX21hYzsKKwl1bnNpZ25lZCBzaG9ydAl0cF9uZXQ7CisJdW5zaWduZWQgaW50CXRwX3NlYzsKKwl1bnNpZ25lZCBpbnQJdHBfdXNlYzsKK307CisKKyNkZWZpbmUgVFBBQ0tFVF9BTElHTk1FTlQJMTYKKyNkZWZpbmUgVFBBQ0tFVF9BTElHTih4KQkoKCh4KStUUEFDS0VUX0FMSUdOTUVOVC0xKSZ+KFRQQUNLRVRfQUxJR05NRU5ULTEpKQorI2RlZmluZSBUUEFDS0VUX0hEUkxFTgkJKFRQQUNLRVRfQUxJR04oc2l6ZW9mKHN0cnVjdCB0cGFja2V0X2hkcikpICsgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9sbCkpCisKKy8qCisgICBGcmFtZSBzdHJ1Y3R1cmU6CisKKyAgIC0gU3RhcnQuIEZyYW1lIG11c3QgYmUgYWxpZ25lZCB0byBUUEFDS0VUX0FMSUdOTUVOVD0xNgorICAgLSBzdHJ1Y3QgdHBhY2tldF9oZHIKKyAgIC0gcGFkIHRvIFRQQUNLRVRfQUxJR05NRU5UPTE2CisgICAtIHN0cnVjdCBzb2NrYWRkcl9sbAorICAgLSBHYXAsIGNob3NlbiBzbyB0aGF0IHBhY2tldCBkYXRhIChTdGFydCt0cF9uZXQpIGFsaWduZXMgdG8gVFBBQ0tFVF9BTElHTk1FTlQ9MTYKKyAgIC0gU3RhcnQrdHBfbWFjOiBbIE9wdGlvbmFsIE1BQyBoZWFkZXIgXQorICAgLSBTdGFydCt0cF9uZXQ6IFBhY2tldCBkYXRhLCBhbGlnbmVkIHRvIFRQQUNLRVRfQUxJR05NRU5UPTE2LgorICAgLSBQYWQgdG8gYWxpZ24gdG8gVFBBQ0tFVF9BTElHTk1FTlQ9MTYKKyAqLworCitzdHJ1Y3QgdHBhY2tldF9yZXEKK3sKKwl1bnNpZ25lZCBpbnQJdHBfYmxvY2tfc2l6ZTsJLyogTWluaW1hbCBzaXplIG9mIGNvbnRpZ3VvdXMgYmxvY2sgKi8KKwl1bnNpZ25lZCBpbnQJdHBfYmxvY2tfbnI7CS8qIE51bWJlciBvZiBibG9ja3MgKi8KKwl1bnNpZ25lZCBpbnQJdHBfZnJhbWVfc2l6ZTsJLyogU2l6ZSBvZiBmcmFtZSAqLworCXVuc2lnbmVkIGludAl0cF9mcmFtZV9ucjsJLyogVG90YWwgbnVtYmVyIG9mIGZyYW1lcyAqLworfTsKKworc3RydWN0IHBhY2tldF9tcmVxCit7CisJaW50CQltcl9pZmluZGV4OworCXVuc2lnbmVkIHNob3J0CW1yX3R5cGU7CisJdW5zaWduZWQgc2hvcnQJbXJfYWxlbjsKKwl1bnNpZ25lZCBjaGFyCW1yX2FkZHJlc3NbOF07Cit9OworCisjZGVmaW5lIFBBQ0tFVF9NUl9NVUxUSUNBU1QJMAorI2RlZmluZSBQQUNLRVRfTVJfUFJPTUlTQwkxCisjZGVmaW5lIFBBQ0tFVF9NUl9BTExNVUxUSQkyCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl9wbGlwLmggYi9pbmNsdWRlL2xpbnV4L2lmX3BsaXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTNhNjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9pZl9wbGlwLmgKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqCU5FVDMJUExJUCB0dW5pbmcgZmFjaWxpdGllcyBmb3IgdGhlIG5ldyBOaWliZSBQTElQLgorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKglhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisgCisjaWZuZGVmIF9MSU5VWF9JRl9QTElQX0gKKyNkZWZpbmUgX0xJTlVYX0lGX1BMSVBfSAorCisjaW5jbHVkZSA8bGludXgvc29ja2lvcy5oPgorCisjZGVmaW5lCVNJT0NERVZQTElQCVNJT0NERVZQUklWQVRFCisKK3N0cnVjdCBwbGlwY29uZgoreworCXVuc2lnbmVkIHNob3J0IHBjbWQ7CisJdW5zaWduZWQgbG9uZyAgbmliYmxlOworCXVuc2lnbmVkIGxvbmcgIHRyaWdnZXI7Cit9OworCisjZGVmaW5lIFBMSVBfR0VUX1RJTUVPVVQJMHgxCisjZGVmaW5lIFBMSVBfU0VUX1RJTUVPVVQJMHgyCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl9wcHAuaCBiL2luY2x1ZGUvbGludXgvaWZfcHBwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTcyYWZmNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvaWZfcHBwLmgKQEAgLTAsMCArMSwxNTUgQEAKKy8qCSRJZDogaWZfcHBwLmgsdiAxLjIxIDIwMDAvMDMvMjcgMDY6MDM6MzYgcGF1bHVzIEV4cCAkCSovCisKKy8qCisgKiBpZl9wcHAuaCAtIFBvaW50LXRvLVBvaW50IFByb3RvY29sIGRlZmluaXRpb25zLgorICoKKyAqIENvcHlyaWdodCAoYykgMTk4OSBDYXJuZWdpZSBNZWxsb24gVW5pdmVyc2l0eS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3JtcyBhcmUgcGVybWl0dGVkCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBhcmFncmFwaCBhcmUKKyAqIGR1cGxpY2F0ZWQgaW4gYWxsIHN1Y2ggZm9ybXMgYW5kIHRoYXQgYW55IGRvY3VtZW50YXRpb24sCisgKiBhZHZlcnRpc2luZyBtYXRlcmlhbHMsIGFuZCBvdGhlciBtYXRlcmlhbHMgcmVsYXRlZCB0byBzdWNoCisgKiBkaXN0cmlidXRpb24gYW5kIHVzZSBhY2tub3dsZWRnZSB0aGF0IHRoZSBzb2Z0d2FyZSB3YXMgZGV2ZWxvcGVkCisgKiBieSBDYXJuZWdpZSBNZWxsb24gVW5pdmVyc2l0eS4gIFRoZSBuYW1lIG9mIHRoZQorICogVW5pdmVyc2l0eSBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICoKKyAqLworCisvKgorICogID09RklMRVZFUlNJT04gMjAwMDA3MjQ9PQorICoKKyAqICBOT1RFIFRPIE1BSU5UQUlORVJTOgorICogICAgIElmIHlvdSBtb2RpZnkgdGhpcyBmaWxlIGF0IGFsbCwgcGxlYXNlIHNldCB0aGUgYWJvdmUgZGF0ZS4KKyAqICAgICBpZl9wcHAuaCBpcyBzaGlwcGVkIHdpdGggYSBQUFAgZGlzdHJpYnV0aW9uIGFzIHdlbGwgYXMgd2l0aCB0aGUga2VybmVsOworICogICAgIGlmIGV2ZXJ5b25lIGluY3JlYXNlcyB0aGUgRklMRVZFUlNJT04gbnVtYmVyIGFib3ZlLCB0aGVuIHNjcmlwdHMKKyAqICAgICBjYW4gZG8gdGhlIHJpZ2h0IHRoaW5nIHdoZW4gZGVjaWRpbmcgd2hldGhlciB0byBpbnN0YWxsIGEgbmV3IGlmX3BwcC5oCisgKiAgICAgZmlsZS4gIERvbid0IGNoYW5nZSB0aGUgZm9ybWF0IG9mIHRoYXQgbGluZSBvdGhlcndpc2UsIHNvIHRoZQorICogICAgIGluc3RhbGxhdGlvbiBzY3JpcHQgY2FuIHJlY29nbml6ZSBpdC4KKyAqLworCisjaWZuZGVmIF9JRl9QUFBfSF8KKyNkZWZpbmUgX0lGX1BQUF9IXworCisvKgorICogUGFja2V0IHNpemVzCisgKi8KKworI2RlZmluZQlQUFBfTVRVCQkxNTAwCS8qIERlZmF1bHQgTVRVIChzaXplIG9mIEluZm8gZmllbGQpICovCisjZGVmaW5lIFBQUF9NQVhNUlUJNjUwMDAJLyogTGFyZ2VzdCBNUlUgd2UgYWxsb3cgKi8KKyNkZWZpbmUgUFJPVE9fSVBYCTB4MDAyYgkvKiBwcm90b2NvbCBudW1iZXJzICovCisjZGVmaW5lIFBST1RPX0ROQV9SVCAgICAweDAwMjcgIC8qIEROQSBSb3V0aW5nICovCisKKworLyoKKyAqIEJpdCBkZWZpbml0aW9ucyBmb3IgZmxhZ3MuCisgKi8KKworI2RlZmluZSBTQ19DT01QX1BST1QJMHgwMDAwMDAwMQkvKiBwcm90b2NvbCBjb21wcmVzc2lvbiAob3V0cHV0KSAqLworI2RlZmluZSBTQ19DT01QX0FDCTB4MDAwMDAwMDIJLyogaGVhZGVyIGNvbXByZXNzaW9uIChvdXRwdXQpICovCisjZGVmaW5lCVNDX0NPTVBfVENQCTB4MDAwMDAwMDQJLyogVENQIChWSikgY29tcHJlc3Npb24gKG91dHB1dCkgKi8KKyNkZWZpbmUgU0NfTk9fVENQX0NDSUQJMHgwMDAwMDAwOAkvKiBkaXNhYmxlIFZKIGNvbm5lY3Rpb24taWQgY29tcC4gKi8KKyNkZWZpbmUgU0NfUkVKX0NPTVBfQUMJMHgwMDAwMDAxMAkvKiByZWplY3QgYWRycy9jdHJsIGNvbXAuIG9uIGlucHV0ICovCisjZGVmaW5lIFNDX1JFSl9DT01QX1RDUAkweDAwMDAwMDIwCS8qIHJlamVjdCBUQ1AgKFZKKSBjb21wLiBvbiBpbnB1dCAqLworI2RlZmluZSBTQ19DQ1BfT1BFTgkweDAwMDAwMDQwCS8qIExvb2sgYXQgQ0NQIHBhY2tldHMgKi8KKyNkZWZpbmUgU0NfQ0NQX1VQCTB4MDAwMDAwODAJLyogTWF5IHNlbmQvcmVjdiBjb21wcmVzc2VkIHBhY2tldHMgKi8KKyNkZWZpbmUgU0NfRU5BQkxFX0lQCTB4MDAwMDAxMDAJLyogSVAgcGFja2V0cyBtYXkgYmUgZXhjaGFuZ2VkICovCisjZGVmaW5lIFNDX0xPT1BfVFJBRkZJQwkweDAwMDAwMjAwCS8qIHNlbmQgdHJhZmZpYyB0byBwcHBkICovCisjZGVmaW5lIFNDX01VTFRJTElOSwkweDAwMDAwNDAwCS8qIGRvIG11bHRpbGluayBlbmNhcHN1bGF0aW9uICovCisjZGVmaW5lIFNDX01QX1NIT1JUU0VRCTB4MDAwMDA4MDAJLyogdXNlIHNob3J0IE1QIHNlcXVlbmNlIG51bWJlcnMgKi8KKyNkZWZpbmUgU0NfQ09NUF9SVU4JMHgwMDAwMTAwMAkvKiBjb21wcmVzc29yIGhhcyBiZWVuIGluaXRlZCAqLworI2RlZmluZSBTQ19ERUNPTVBfUlVOCTB4MDAwMDIwMDAJLyogZGVjb21wcmVzc29yIGhhcyBiZWVuIGluaXRlZCAqLworI2RlZmluZSBTQ19NUF9YU0hPUlRTRVEJMHgwMDAwNDAwMAkvKiB0cmFuc21pdCBzaG9ydCBNUCBzZXEgbnVtYmVycyAqLworI2RlZmluZSBTQ19ERUJVRwkweDAwMDEwMDAwCS8qIGVuYWJsZSBkZWJ1ZyBtZXNzYWdlcyAqLworI2RlZmluZSBTQ19MT0dfSU5QS1QJMHgwMDAyMDAwMAkvKiBsb2cgY29udGVudHMgb2YgZ29vZCBwa3RzIHJlY3ZkICovCisjZGVmaW5lIFNDX0xPR19PVVRQS1QJMHgwMDA0MDAwMAkvKiBsb2cgY29udGVudHMgb2YgcGt0cyBzZW50ICovCisjZGVmaW5lIFNDX0xPR19SQVdJTgkweDAwMDgwMDAwCS8qIGxvZyBhbGwgY2hhcnMgcmVjZWl2ZWQgKi8KKyNkZWZpbmUgU0NfTE9HX0ZMVVNICTB4MDAxMDAwMDAJLyogbG9nIGFsbCBjaGFycyBmbHVzaGVkICovCisjZGVmaW5lCVNDX1NZTkMJCTB4MDAyMDAwMDAJLyogc3luY2hyb25vdXMgc2VyaWFsIG1vZGUgKi8KKyNkZWZpbmUJU0NfTUFTSwkJMHgwZjIwMGZmZgkvKiBiaXRzIHRoYXQgdXNlciBjYW4gY2hhbmdlICovCisKKy8qIHN0YXRlIGJpdHMgKi8KKyNkZWZpbmUgU0NfWE1JVF9CVVNZCTB4MTAwMDAwMDAJLyogKHVzZWQgYnkgaXNkbl9wcHA/KSAqLworI2RlZmluZSBTQ19SQ1ZfT0REUAkweDA4MDAwMDAwCS8qIGhhdmUgcmN2ZCBjaGFyIHdpdGggb2RkIHBhcml0eSAqLworI2RlZmluZSBTQ19SQ1ZfRVZOUAkweDA0MDAwMDAwCS8qIGhhdmUgcmN2ZCBjaGFyIHdpdGggZXZlbiBwYXJpdHkgKi8KKyNkZWZpbmUgU0NfUkNWX0I3XzEJMHgwMjAwMDAwMAkvKiBoYXZlIHJjdmQgY2hhciB3aXRoIGJpdCA3ID0gMSAqLworI2RlZmluZSBTQ19SQ1ZfQjdfMAkweDAxMDAwMDAwCS8qIGhhdmUgcmN2ZCBjaGFyIHdpdGggYml0IDcgPSAwICovCisjZGVmaW5lIFNDX0RDX0ZFUlJPUgkweDAwODAwMDAwCS8qIGZhdGFsIGRlY29tcCBlcnJvciBkZXRlY3RlZCAqLworI2RlZmluZSBTQ19EQ19FUlJPUgkweDAwNDAwMDAwCS8qIG5vbi1mYXRhbCBkZWNvbXAgZXJyb3IgZGV0ZWN0ZWQgKi8KKworLyoKKyAqIElvY3RsIGRlZmluaXRpb25zLgorICovCisKK3N0cnVjdCBucGlvY3RsIHsKKwlpbnQJCXByb3RvY29sOwkvKiBQUFAgcHJvdG9jb2wsIGUuZy4gUFBQX0lQICovCisJZW51bSBOUG1vZGUJbW9kZTsKK307CisKKy8qIFN0cnVjdHVyZSBkZXNjcmliaW5nIGEgQ0NQIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBmb3IgUFBQSU9DU0NPTVBSRVNTICovCitzdHJ1Y3QgcHBwX29wdGlvbl9kYXRhIHsKKwlfX3U4CV9fdXNlciAqcHRyOworCV9fdTMyCWxlbmd0aDsKKwlpbnQJdHJhbnNtaXQ7Cit9OworCitzdHJ1Y3QgaWZwcHBzdGF0c3JlcSB7CisJc3RydWN0IGlmcmVxCSBiOworCXN0cnVjdCBwcHBfc3RhdHMgc3RhdHM7CQkJLyogc3RhdGlzdGljIGluZm9ybWF0aW9uICovCit9OworCitzdHJ1Y3QgaWZwcHBjc3RhdHNyZXEgeworCXN0cnVjdCBpZnJlcQkgICAgICBiOworCXN0cnVjdCBwcHBfY29tcF9zdGF0cyBzdGF0czsKK307CisKKyNkZWZpbmUgaWZyX19uYW1lICAgICAgIGIuaWZyX2lmcm4uaWZybl9uYW1lCisjZGVmaW5lIHN0YXRzX3B0ciAgICAgICBiLmlmcl9pZnJ1LmlmcnVfZGF0YQorCisvKgorICogSW9jdGwgZGVmaW5pdGlvbnMuCisgKi8KKworI2RlZmluZQlQUFBJT0NHRkxBR1MJX0lPUigndCcsIDkwLCBpbnQpCS8qIGdldCBjb25maWd1cmF0aW9uIGZsYWdzICovCisjZGVmaW5lCVBQUElPQ1NGTEFHUwlfSU9XKCd0JywgODksIGludCkJLyogc2V0IGNvbmZpZ3VyYXRpb24gZmxhZ3MgKi8KKyNkZWZpbmUJUFBQSU9DR0FTWU5DTUFQCV9JT1IoJ3QnLCA4OCwgaW50KQkvKiBnZXQgYXN5bmMgbWFwICovCisjZGVmaW5lCVBQUElPQ1NBU1lOQ01BUAlfSU9XKCd0JywgODcsIGludCkJLyogc2V0IGFzeW5jIG1hcCAqLworI2RlZmluZQlQUFBJT0NHVU5JVAlfSU9SKCd0JywgODYsIGludCkJLyogZ2V0IHBwcCB1bml0IG51bWJlciAqLworI2RlZmluZQlQUFBJT0NHUkFTWU5DTUFQIF9JT1IoJ3QnLCA4NSwgaW50KQkvKiBnZXQgcmVjZWl2ZSBhc3luYyBtYXAgKi8KKyNkZWZpbmUJUFBQSU9DU1JBU1lOQ01BUCBfSU9XKCd0JywgODQsIGludCkJLyogc2V0IHJlY2VpdmUgYXN5bmMgbWFwICovCisjZGVmaW5lCVBQUElPQ0dNUlUJX0lPUigndCcsIDgzLCBpbnQpCS8qIGdldCBtYXggcmVjZWl2ZSB1bml0ICovCisjZGVmaW5lCVBQUElPQ1NNUlUJX0lPVygndCcsIDgyLCBpbnQpCS8qIHNldCBtYXggcmVjZWl2ZSB1bml0ICovCisjZGVmaW5lCVBQUElPQ1NNQVhDSUQJX0lPVygndCcsIDgxLCBpbnQpCS8qIHNldCBWSiBtYXggc2xvdCBJRCAqLworI2RlZmluZSBQUFBJT0NHWEFTWU5DTUFQIF9JT1IoJ3QnLCA4MCwgZXh0X2FjY20pIC8qIGdldCBleHRlbmRlZCBBQ0NNICovCisjZGVmaW5lIFBQUElPQ1NYQVNZTkNNQVAgX0lPVygndCcsIDc5LCBleHRfYWNjbSkgLyogc2V0IGV4dGVuZGVkIEFDQ00gKi8KKyNkZWZpbmUgUFBQSU9DWEZFUlVOSVQJX0lPKCd0JywgNzgpCQkvKiB0cmFuc2ZlciBQUFAgdW5pdCAqLworI2RlZmluZSBQUFBJT0NTQ09NUFJFU1MJX0lPVygndCcsIDc3LCBzdHJ1Y3QgcHBwX29wdGlvbl9kYXRhKQorI2RlZmluZSBQUFBJT0NHTlBNT0RFCV9JT1dSKCd0JywgNzYsIHN0cnVjdCBucGlvY3RsKSAvKiBnZXQgTlAgbW9kZSAqLworI2RlZmluZSBQUFBJT0NTTlBNT0RFCV9JT1coJ3QnLCA3NSwgc3RydWN0IG5waW9jdGwpICAvKiBzZXQgTlAgbW9kZSAqLworI2RlZmluZSBQUFBJT0NTUEFTUwlfSU9XKCd0JywgNzEsIHN0cnVjdCBzb2NrX2Zwcm9nKSAvKiBzZXQgcGFzcyBmaWx0ZXIgKi8KKyNkZWZpbmUgUFBQSU9DU0FDVElWRQlfSU9XKCd0JywgNzAsIHN0cnVjdCBzb2NrX2Zwcm9nKSAvKiBzZXQgYWN0aXZlIGZpbHQgKi8KKyNkZWZpbmUgUFBQSU9DR0RFQlVHCV9JT1IoJ3QnLCA2NSwgaW50KQkvKiBSZWFkIGRlYnVnIGxldmVsICovCisjZGVmaW5lIFBQUElPQ1NERUJVRwlfSU9XKCd0JywgNjQsIGludCkJLyogU2V0IGRlYnVnIGxldmVsICovCisjZGVmaW5lIFBQUElPQ0dJRExFCV9JT1IoJ3QnLCA2Mywgc3RydWN0IHBwcF9pZGxlKSAvKiBnZXQgaWRsZSB0aW1lICovCisjZGVmaW5lIFBQUElPQ05FV1VOSVQJX0lPV1IoJ3QnLCA2MiwgaW50KQkvKiBjcmVhdGUgbmV3IHBwcCB1bml0ICovCisjZGVmaW5lIFBQUElPQ0FUVEFDSAlfSU9XKCd0JywgNjEsIGludCkJLyogYXR0YWNoIHRvIHBwcCB1bml0ICovCisjZGVmaW5lIFBQUElPQ0RFVEFDSAlfSU9XKCd0JywgNjAsIGludCkJLyogZGV0YWNoIGZyb20gcHBwIHVuaXQvY2hhbiAqLworI2RlZmluZSBQUFBJT0NTTVJSVQlfSU9XKCd0JywgNTksIGludCkJLyogc2V0IG11bHRpbGluayBNUlUgKi8KKyNkZWZpbmUgUFBQSU9DQ09OTkVDVAlfSU9XKCd0JywgNTgsIGludCkJLyogY29ubmVjdCBjaGFubmVsIHRvIHVuaXQgKi8KKyNkZWZpbmUgUFBQSU9DRElTQ09OTglfSU8oJ3QnLCA1NykJCS8qIGRpc2Nvbm5lY3QgY2hhbm5lbCAqLworI2RlZmluZSBQUFBJT0NBVFRDSEFOCV9JT1coJ3QnLCA1NiwgaW50KQkvKiBhdHRhY2ggdG8gcHBwIGNoYW5uZWwgKi8KKyNkZWZpbmUgUFBQSU9DR0NIQU4JX0lPUigndCcsIDU1LCBpbnQpCS8qIGdldCBwcHAgY2hhbm5lbCBudW1iZXIgKi8KKworI2RlZmluZSBTSU9DR1BQUFNUQVRTICAgKFNJT0NERVZQUklWQVRFICsgMCkKKyNkZWZpbmUgU0lPQ0dQUFBWRVIgICAgIChTSU9DREVWUFJJVkFURSArIDEpCS8qIE5FVkVSIGNoYW5nZSB0aGlzISEgKi8KKyNkZWZpbmUgU0lPQ0dQUFBDU1RBVFMgIChTSU9DREVWUFJJVkFURSArIDIpCisKKyNpZiAhZGVmaW5lZChpZnJfbXR1KQorI2RlZmluZSBpZnJfbXR1CWlmcl9pZnJ1LmlmcnVfbWV0cmljCisjZW5kaWYKKworI2VuZGlmIC8qIF9JRl9QUFBfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWZfcHBwb3guaCBiL2luY2x1ZGUvbGludXgvaWZfcHBwb3guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjc3ZjczCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9pZl9wcHBveC5oCkBAIC0wLDAgKzEsMTc1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBMaW51eCBQUFAgb3ZlciBYIC0gR2VuZXJpYyBQUFAgdHJhbnNwb3J0IGxheWVyIHNvY2tldHMKKyAqIExpbnV4IFBQUCBvdmVyIEV0aGVybmV0IChQUFBvRSkgU29ja2V0IEltcGxlbWVudGF0aW9uIChSRkMgMjUxNikgCisgKgorICogVGhpcyBmaWxlIHN1cHBsaWVzIGRlZmluaXRpb25zIHJlcXVpcmVkIGJ5IHRoZSBQUFAgb3ZlciBFdGhlcm5ldCBkcml2ZXIKKyAqIChwcHBveC5jKS4gIEFsbCB2ZXJzaW9uIGluZm9ybWF0aW9uIHdydCB0aGlzIGZpbGUgaXMgbG9jYXRlZCBpbiBwcHBveC5jCisgKgorICogTGljZW5zZToKKyAqCQlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgkJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqCQlhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqCQkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaWZuZGVmIF9fTElOVVhfSUZfUFBQT1hfSAorI2RlZmluZSBfX0xJTlVYX0lGX1BQUE9YX0gKKworCisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorCisjaWZkZWYgIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgorI2luY2x1ZGUgPGxpbnV4L2lmLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BwcF9jaGFubmVsLmg+CisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisvKiBGb3IgdXNlci1zcGFjZSBwcm9ncmFtcyB0byBwaWNrIHVwIHRoZXNlIGRlZmluaXRpb25zCisgKiB3aGljaCB0aGV5IHdvdWxkbid0IGdldCBvdGhlcndpc2Ugd2l0aG91dCBkZWZpbmluZyBfX0tFUk5FTF9fCisgKi8KKyNpZm5kZWYgQUZfUFBQT1gKKyNkZWZpbmUgQUZfUFBQT1gJMjQKKyNkZWZpbmUgUEZfUFBQT1gJQUZfUFBQT1gKKyNlbmRpZiAvKiAhKEFGX1BQUE9YKSAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogUFBQb0UgYWRkcmVzc2luZyBkZWZpbml0aW9uIAorICovIAordHlwZWRlZiBfX3UxNiBzaWRfdDsgCitzdHJ1Y3QgcHBwb2VfYWRkcnsgCisgICAgICAgc2lkX3QgICAgICAgICAgIHNpZDsgICAgICAgICAgICAgICAgICAgIC8qIFNlc3Npb24gaWRlbnRpZmllciAqLyAKKyAgICAgICB1bnNpZ25lZCBjaGFyICAgcmVtb3RlW0VUSF9BTEVOXTsgICAgICAgLyogUmVtb3RlIGFkZHJlc3MgKi8gCisgICAgICAgY2hhciAgICAgICAgICAgIGRldltJRk5BTVNJWl07ICAgICAgICAgIC8qIExvY2FsIGRldmljZSB0byB1c2UgKi8gCit9OyAKKyAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBQcm90b2NvbHMgc3VwcG9ydGVkIGJ5IEFGX1BQUE9YIAorICovIAorI2RlZmluZSBQWF9QUk9UT19PRSAgICAwIC8qIEN1cnJlbnRseSBqdXN0IFBQUG9FICovCisjZGVmaW5lIFBYX01BWF9QUk9UTyAgIDEJCisgCitzdHJ1Y3Qgc29ja2FkZHJfcHBwb3ggeyAKKyAgICAgICBzYV9mYW1pbHlfdCAgICAgc2FfZmFtaWx5OyAgICAgICAgICAgIC8qIGFkZHJlc3MgZmFtaWx5LCBBRl9QUFBPWCAqLyAKKyAgICAgICB1bnNpZ25lZCBpbnQgICAgc2FfcHJvdG9jb2w7ICAgICAgICAgIC8qIHByb3RvY29sIGlkZW50aWZpZXIgKi8gCisgICAgICAgdW5pb257IAorICAgICAgICAgICAgICAgc3RydWN0IHBwcG9lX2FkZHIgICAgICAgcHBwb2U7IAorICAgICAgIH1zYV9hZGRyOyAKK31fX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7IAorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBpb2N0bCBpbnRlcmZhY2UgZm9yIGRlZmluaW5nIGZvcndhcmRpbmcgb2YgY29ubmVjdGlvbnMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgUFBQT0VJT0NTRldECV9JT1coMHhCMSAsMCwgc2l6ZV90KQorI2RlZmluZSBQUFBPRUlPQ0RGV0QJX0lPKDB4QjEgLDEpCisvKiNkZWZpbmUgUFBQT0VJT0NHRldECV9JT1dSKDB4QjEsMiwgc2l6ZV90KSovCisKKy8qIENvZGVzIHRvIGlkZW50aWZ5IG1lc3NhZ2UgdHlwZXMgKi8KKyNkZWZpbmUgUEFESV9DT0RFCTB4MDkKKyNkZWZpbmUgUEFET19DT0RFCTB4MDcKKyNkZWZpbmUgUEFEUl9DT0RFCTB4MTkKKyNkZWZpbmUgUEFEU19DT0RFCTB4NjUKKyNkZWZpbmUgUEFEVF9DT0RFCTB4YTcKK3N0cnVjdCBwcHBvZV90YWcgeworCV9fdTE2IHRhZ190eXBlOworCV9fdTE2IHRhZ19sZW47CisJY2hhciB0YWdfZGF0YVswXTsKK30gX19hdHRyaWJ1dGUgKChwYWNrZWQpKTsKKworLyogVGFnIGlkZW50aWZpZXJzICovCisjZGVmaW5lIFBUVF9FT0wJCV9fY29uc3RhbnRfaHRvbnMoMHgwMDAwKQorI2RlZmluZSBQVFRfU1JWX05BTUUJX19jb25zdGFudF9odG9ucygweDAxMDEpCisjZGVmaW5lIFBUVF9BQ19OQU1FCV9fY29uc3RhbnRfaHRvbnMoMHgwMTAyKQorI2RlZmluZSBQVFRfSE9TVF9VTklRCV9fY29uc3RhbnRfaHRvbnMoMHgwMTAzKQorI2RlZmluZSBQVFRfQUNfQ09PS0lFCV9fY29uc3RhbnRfaHRvbnMoMHgwMTA0KQorI2RlZmluZSBQVFRfVkVORE9SIAlfX2NvbnN0YW50X2h0b25zKDB4MDEwNSkKKyNkZWZpbmUgUFRUX1JFTEFZX1NJRAlfX2NvbnN0YW50X2h0b25zKDB4MDExMCkKKyNkZWZpbmUgUFRUX1NSVl9FUlIgICAgIF9fY29uc3RhbnRfaHRvbnMoMHgwMjAxKQorI2RlZmluZSBQVFRfU1lTX0VSUiAgCV9fY29uc3RhbnRfaHRvbnMoMHgwMjAyKQorI2RlZmluZSBQVFRfR0VOX0VSUiAgCV9fY29uc3RhbnRfaHRvbnMoMHgwMjAzKQorCitzdHJ1Y3QgcHBwb2VfaGRyIHsKKyNpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTl9CSVRGSUVMRCkKKwlfX3U4IHZlciA6IDQ7CisJX191OCB0eXBlIDogNDsKKyNlbGlmIGRlZmluZWQoX19CSUdfRU5ESUFOX0JJVEZJRUxEKQorCV9fdTggdHlwZSA6IDQ7CisJX191OCB2ZXIgOiA0OworI2Vsc2UKKyNlcnJvcgkiUGxlYXNlIGZpeCA8YXNtL2J5dGVvcmRlci5oPiIKKyNlbmRpZgorCV9fdTggY29kZTsKKwlfX3UxNiBzaWQ7CisJX191MTYgbGVuZ3RoOworCXN0cnVjdCBwcHBvZV90YWcgdGFnWzBdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNpZmRlZiBfX0tFUk5FTF9fCitzdHJ1Y3QgcHBwb2Vfb3B0IHsKKwlzdHJ1Y3QgbmV0X2RldmljZSAgICAgICpkZXY7CSAgLyogZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCBzb2NrZXQqLworCXN0cnVjdCBwcHBvZV9hZGRyCXBhOwkgIC8qIHdoYXQgdGhpcyBzb2NrZXQgaXMgYm91bmQgdG8qLworCXN0cnVjdCBzb2NrYWRkcl9wcHBveAlyZWxheTsJICAvKiB3aGF0IHNvY2tldCBkYXRhIHdpbGwgYmUKKwkJCQkJICAgICByZWxheWVkIHRvIChQUFBvRSByZWxheWluZykgKi8KK307CisKKyNpbmNsdWRlIDxuZXQvc29jay5oPgorCitzdHJ1Y3QgcHBwb3hfc29jayB7CisJLyogc3RydWN0IHNvY2sgbXVzdCBiZSB0aGUgZmlyc3QgbWVtYmVyIG9mIHBwcG94X3NvY2sgKi8KKwlzdHJ1Y3Qgc29jawkJc2s7CisJc3RydWN0IHBwcF9jaGFubmVsCWNoYW47CisJc3RydWN0IHBwcG94X3NvY2sJKm5leHQ7CSAgLyogZm9yIGhhc2ggdGFibGUgKi8KKwl1bmlvbiB7CisJCXN0cnVjdCBwcHBvZV9vcHQgcHBwb2U7CisJfSBwcm90bzsKKwl1bnNpZ25lZCBzaG9ydAkJbnVtOworfTsKKyNkZWZpbmUgcHBwb2VfZGV2CXByb3RvLnBwcG9lLmRldgorI2RlZmluZSBwcHBvZV9wYQlwcm90by5wcHBvZS5wYQorI2RlZmluZSBwcHBvZV9yZWxheQlwcm90by5wcHBvZS5yZWxheQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwcHBveF9zb2NrICpwcHBveF9zayhzdHJ1Y3Qgc29jayAqc2spCit7CisJcmV0dXJuIChzdHJ1Y3QgcHBwb3hfc29jayAqKXNrOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzb2NrICpza19wcHBveChzdHJ1Y3QgcHBwb3hfc29jayAqcG8pCit7CisJcmV0dXJuIChzdHJ1Y3Qgc29jayAqKXBvOworfQorCitzdHJ1Y3QgbW9kdWxlOworCitzdHJ1Y3QgcHBwb3hfcHJvdG8geworCWludAkJKCpjcmVhdGUpKHN0cnVjdCBzb2NrZXQgKnNvY2spOworCWludAkJKCppb2N0bCkoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGNtZCwKKwkJCQkgdW5zaWduZWQgbG9uZyBhcmcpOworCXN0cnVjdCBtb2R1bGUJKm93bmVyOworfTsKKworZXh0ZXJuIGludCByZWdpc3Rlcl9wcHBveF9wcm90byhpbnQgcHJvdG9fbnVtLCBzdHJ1Y3QgcHBwb3hfcHJvdG8gKnBwKTsKK2V4dGVybiB2b2lkIHVucmVnaXN0ZXJfcHBwb3hfcHJvdG8oaW50IHByb3RvX251bSk7CitleHRlcm4gdm9pZCBwcHBveF91bmJpbmRfc29jayhzdHJ1Y3Qgc29jayAqc2spOy8qIGRlbGV0ZSBwcHAtY2hhbm5lbCBiaW5kaW5nICovCitleHRlcm4gaW50IHBwcG94X2NoYW5uZWxfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpwYywgdW5zaWduZWQgaW50IGNtZCwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIGFyZyk7CisKKy8qIFBQUG9YIHNvY2tldCBzdGF0ZXMgKi8KK2VudW0geworICAgIFBQUE9YX05PTkUJCT0gMCwgIC8qIGluaXRpYWwgc3RhdGUgKi8KKyAgICBQUFBPWF9DT05ORUNURUQJPSAxLCAgLyogY29ubmVjdGlvbiBlc3RhYmxpc2hlZCA9PVRDUF9FU1RBQkxJU0hFRCAqLworICAgIFBQUE9YX0JPVU5ECQk9IDIsICAvKiBib3VuZCB0byBwcHAgZGV2aWNlICovCisgICAgUFBQT1hfUkVMQVkJCT0gNCwgIC8qIGZvcndhcmRpbmcgaXMgZW5hYmxlZCAqLworICAgIFBQUE9YX1pPTUJJRQk9IDgsICAvKiBkZWFkLCBidXQgc3RpbGwgYm91bmQgdG8gcHBwIGRldmljZSAqLworICAgIFBQUE9YX0RFQUQJCT0gMTYgIC8qIGRlYWQsIHVzZWxlc3MsIHBsZWFzZSBjbGVhbiBtZSB1cCEqLworfTsKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qICEoX19MSU5VWF9JRl9QUFBPWF9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl9zaGFwZXIuaCBiL2luY2x1ZGUvbGludXgvaWZfc2hhcGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ4NWIyNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvaWZfc2hhcGVyLmgKQEAgLTAsMCArMSw2NCBAQAorI2lmbmRlZiBfX0xJTlVYX1NIQVBFUl9ICisjZGVmaW5lIF9fTElOVVhfU0hBUEVSX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2RlZmluZSBTSEFQRVJfUUxFTgkxMAorLyoKKyAqCVRoaXMgaXMgYSBiaXQgc3BlZWQgZGVwZW5kZW50IChyZWFkIGl0IHNob3VsZG4ndCBiZSBhIGNvbnN0YW50ISkKKyAqCisgKgk1IGlzIGFib3V0IHJpZ2h0IGZvciAyOC44IHVwd2FyZHMuIEJlbG93IHRoYXQgZG91YmxlIGZvciBldmVyeQorICoJaGFsdmluZyBvZiBzcGVlZCBvciBzby4gLSBpZSBhYm91dCAyMCBmb3IgOTYwMCBiYXVkLgorICovCisjZGVmaW5lIFNIQVBFUl9MQVRFTkNZCSg1KkhaKQorI2RlZmluZSBTSEFQRVJfTUFYU0xJUAkyCisjZGVmaW5lIFNIQVBFUl9CVVJTVAkoSFovNTApCQkvKiBHb29kIGZvciA+MTI4SyB0aGVuICovCisKK3N0cnVjdCBzaGFwZXIKK3sKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHNlbmRxOworCV9fdTMyIGJ5dGVzcGVydGljazsKKwlfX3UzMiBiaXRzcGVyc2VjOworCV9fdTMyIHNoYXBlbGF0ZW5jeTsKKwlfX3UzMiBzaGFwZWNsb2NrOworCXVuc2lnbmVkIGxvbmcgcmVjb3Zlcnk7CS8qIFRpbWUgd2UgY2FuIG5leHQgY2xvY2sgYSBwYWNrZXQgb3V0IG9uCisJCQkJICAgYW4gZW1wdHkgcXVldWUgKi8KKyAgICAgICAgdW5zaWduZWQgbG9uZyBsb2NrZWQ7CisgICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJaW50ICAoKmhhcmRfc3RhcnRfeG1pdCkgKHN0cnVjdCBza19idWZmICpza2IsCisJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworCWludCAgKCpoYXJkX2hlYWRlcikgKHN0cnVjdCBza19idWZmICpza2IsCisJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCXVuc2lnbmVkIHNob3J0IHR5cGUsCisJCXZvaWQgKmRhZGRyLAorCQl2b2lkICpzYWRkciwKKwkJdW5zaWduZWQgbGVuKTsKKwlpbnQgICgqcmVidWlsZF9oZWFkZXIpKHN0cnVjdCBza19idWZmICpza2IpOworCWludCAoKmhhcmRfaGVhZGVyX2NhY2hlKShzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaCwgc3RydWN0IGhoX2NhY2hlICpoaCk7CisJdm9pZCAoKmhlYWRlcl9jYWNoZV91cGRhdGUpKHN0cnVjdCBoaF9jYWNoZSAqaGgsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGNoYXIgKiAgaGFkZHIpOworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzKiAoKmdldF9zdGF0cykoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisJd2FpdF9xdWV1ZV9oZWFkX3QgIHdhaXRfcXVldWU7CisJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7Cit9OworCisjZW5kaWYKKworI2RlZmluZSBTSEFQRVJfU0VUX0RFVgkJMHgwMDAxCisjZGVmaW5lIFNIQVBFUl9TRVRfU1BFRUQJMHgwMDAyCisjZGVmaW5lIFNIQVBFUl9HRVRfREVWCQkweDAwMDMKKyNkZWZpbmUgU0hBUEVSX0dFVF9TUEVFRAkweDAwMDQKKworc3RydWN0IHNoYXBlcmNvbmYKK3sKKwlfX3UxNglzc19jbWQ7CisJdW5pb24KKwl7CisJCWNoYXIgCXNzdV9uYW1lWzE0XTsKKwkJX191MzIJc3N1X3NwZWVkOworCX0gc3NfdTsKKyNkZWZpbmUgc3Nfc3BlZWQgc3NfdS5zc3Vfc3BlZWQKKyNkZWZpbmUgc3NfbmFtZSBzc191LnNzdV9uYW1lCit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWZfc2xpcC5oIGIvaW5jbHVkZS9saW51eC9pZl9zbGlwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWViNGUzYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvaWZfc2xpcC5oCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKglTd2Fuc2VhIFVuaXZlcnNpdHkgQ29tcHV0ZXIgU29jaWV0eQlORVQzCisgKgkKKyAqCVRoaXMgZmlsZSBkZWNsYXJlcyB0aGUgY29uc3RhbnRzIG9mIHNwZWNpYWwgdXNlIHdpdGggdGhlIFNMSVAvQ1NMSVAvCisgKglLSVNTIFROQyBkcml2ZXIuCisgKi8KKyAKKyNpZm5kZWYgX19MSU5VWF9TTElQX0gKKyNkZWZpbmUgX19MSU5VWF9TTElQX0gKKworI2RlZmluZQkJU0xfTU9ERV9TTElQCQkwCisjZGVmaW5lCQlTTF9NT0RFX0NTTElQCQkxCisjZGVmaW5lIAlTTF9NT0RFX0tJU1MJCTQKKworI2RlZmluZQkJU0xfT1BUX1NJWEJJVAkJMgorI2RlZmluZQkJU0xfT1BUX0FEQVBUSVZFCQk4CisKKy8qCisgKglWU1YgPSBpb2N0bCBmb3Iga2VlcGFsaXZlICYgb3V0ZmlsbCBpbiBTTElQIGRyaXZlciAKKyAqLworIAorI2RlZmluZSBTSU9DU0tFRVBBTElWRQkoU0lPQ0RFVlBSSVZBVEUpCQkvKiBTZXQga2VlcGFsaXZlIHRpbWVvdXQgaW4gc2VjICovCisjZGVmaW5lIFNJT0NHS0VFUEFMSVZFCShTSU9DREVWUFJJVkFURSsxKQkJLyogR2V0IGtlZXBhbGl2ZSB0aW1lb3V0ICovCisjZGVmaW5lIFNJT0NTT1VURklMTAkoU0lPQ0RFVlBSSVZBVEUrMikJCS8qIFNldCBvdXRmaWxsIHRpbWVvdXQgKi8KKyNkZWZpbmUJU0lPQ0dPVVRGSUxMCShTSU9DREVWUFJJVkFURSszKQkJLyogR2V0IG91dGZpbGwgdGltZW91dCAqLworI2RlZmluZSBTSU9DU0xFQVNFCShTSU9DREVWUFJJVkFURSs0KQkJLyogU2V0ICJsZWFzZWQiIGxpbmUgdHlwZSAqLworI2RlZmluZQlTSU9DR0xFQVNFCShTSU9DREVWUFJJVkFURSs1KQkJLyogR2V0IGxpbmUgdHlwZSAqLworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl9zdHJpcC5oIGIvaW5jbHVkZS9saW51eC9pZl9zdHJpcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiNWM1YzkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2lmX3N0cmlwLmgKQEAgLTAsMCArMSwyNSBAQAorLyoKKyAqIGlmX3N0cmlwLmggLS0KKyAqCisgKiAgICAgIERlZmluaXRpb25zIGZvciB0aGUgU1RSSVAgaW50ZXJmYWNlCisgKgorICogQ29weXJpZ2h0IDE5OTYgVGhlIEJvYXJkIG9mIFRydXN0ZWVzIG9mIFRoZSBMZWxhbmQgU3RhbmZvcmQKKyAqIEp1bmlvciBVbml2ZXJzaXR5LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQKKyAqIGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuICBTdGFuZm9yZCBVbml2ZXJzaXR5CisgKiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMKKyAqIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dAorICogZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKyNpZm5kZWYgX19MSU5VWF9TVFJJUF9ICisjZGVmaW5lIF9fTElOVVhfU1RSSVBfSAorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgX191OCBjWzZdOworfSBNZXRyaWNvbUFkZHJlc3M7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl90ci5oIGIvaW5jbHVkZS9saW51eC9pZl90ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmZDQ1MWYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2lmX3RyLmgKQEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKiBJTkVUCQlBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgVENQL0lQIHByb3RvY29sIHN1aXRlIGZvciB0aGUgTElOVVgKKyAqCQlvcGVyYXRpbmcgc3lzdGVtLiAgSU5FVCBpcyBpbXBsZW1lbnRlZCB1c2luZyB0aGUgIEJTRCBTb2NrZXQKKyAqCQlpbnRlcmZhY2UgYXMgdGhlIG1lYW5zIG9mIGNvbW11bmljYXRpb24gd2l0aCB0aGUgdXNlciBsZXZlbC4KKyAqCisgKgkJR2xvYmFsIGRlZmluaXRpb25zIGZvciB0aGUgVG9rZW4tUmluZyBJRUVFIDgwMi41IGludGVyZmFjZS4KKyAqCisgKiBWZXJzaW9uOglAKCMpaWZfdHIuaAkwLjAJMDcvMTEvOTQKKyAqCisgKiBBdXRob3I6CUZyZWQgTi4gdmFuIEtlbXBlbiwgPHdhbHRqZUB1V2FsdC5OTC5NdWduZXQuT1JHPgorICoJCURvbmFsZCBCZWNrZXIsIDxiZWNrZXJAc3VwZXIub3JnPgorICogICAgUGV0ZXIgRGUgU2NocmlqdmVyLCA8c3R1ZDExQGNjNC5rdWxldXZlbi5hYy5iZT4KKyAqCisgKgkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKgkJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKgkJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2lmbmRlZiBfTElOVVhfSUZfVFJfSAorI2RlZmluZSBfTElOVVhfSUZfVFJfSAorCisKKy8qIElFRUUgODAyLjUgVG9rZW4tUmluZyBtYWdpYyBjb25zdGFudHMuICBUaGUgZnJhbWUgc2l6ZXMgb21pdCB0aGUgcHJlYW1ibGUKKyAgIGFuZCBGQ1MvQ1JDIChmcmFtZSBjaGVjayBzZXF1ZW5jZSkuICovCisjZGVmaW5lIFRSX0FMRU4JNgkJLyogT2N0ZXRzIGluIG9uZSBldGhlcm5ldCBhZGRyCSAqLworI2RlZmluZSBUUl9ITEVOICAgKHNpemVvZihzdHJ1Y3QgdHJoX2hkcikrc2l6ZW9mKHN0cnVjdCB0cmxsYykpCisjZGVmaW5lIEFDCQkJMHgxMAorI2RlZmluZSBMTENfRlJBTUUgMHg0MAorI2lmIDAKKyNkZWZpbmUgRVRIX0hMRU4JMTQJCS8qIFRvdGFsIG9jdGV0cyBpbiBoZWFkZXIuCSAqLworI2RlZmluZSBFVEhfWkxFTgk2MAkJLyogTWluLiBvY3RldHMgaW4gZnJhbWUgc2FucyBGQ1MgKi8KKyNkZWZpbmUgRVRIX0RBVEFfTEVOCTE1MDAJCS8qIE1heC4gb2N0ZXRzIGluIHBheWxvYWQJICovCisjZGVmaW5lIEVUSF9GUkFNRV9MRU4JMTUxNAkJLyogTWF4LiBvY3RldHMgaW4gZnJhbWUgc2FucyBGQ1MgKi8KKyNlbmRpZgorCisKKy8qIExMQyBhbmQgU05BUCBjb25zdGFudHMgKi8KKyNkZWZpbmUgRVhURU5ERURfU0FQIDB4QUEKKyNkZWZpbmUgVUlfQ01EICAgICAgIDB4MDMKKworLyogVGhpcyBpcyBhbiBUb2tlbi1SaW5nIGZyYW1lIGhlYWRlci4gKi8KK3N0cnVjdCB0cmhfaGRyIHsKKwlfX3U4ICBhYzsJCQkvKiBhY2Nlc3MgY29udHJvbCBmaWVsZCAqLworCV9fdTggIGZjOwkJCS8qIGZyYW1lIGNvbnRyb2wgZmllbGQgKi8KKwlfX3U4ICBkYWRkcltUUl9BTEVOXTsJCS8qIGRlc3RpbmF0aW9uIGFkZHJlc3MgKi8KKwlfX3U4ICBzYWRkcltUUl9BTEVOXTsJCS8qIHNvdXJjZSBhZGRyZXNzICovCisJX191MTYgcmNmOwkJCS8qIHJvdXRlIGNvbnRyb2wgZmllbGQgKi8KKwlfX3UxNiByc2VnWzhdOwkJCS8qIHJvdXRpbmcgcmVnaXN0ZXJzICovCit9OworCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorCitzdGF0aWMgaW5saW5lIHN0cnVjdCB0cmhfaGRyICp0cl9oZHIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlyZXR1cm4gKHN0cnVjdCB0cmhfaGRyICopc2tiLT5tYWMucmF3OworfQorI2VuZGlmCisKKy8qIFRoaXMgaXMgYW4gVG9rZW4tUmluZyBMTEMgc3RydWN0dXJlICovCitzdHJ1Y3QgdHJsbGMgeworCV9fdTggIGRzYXA7CQkJLyogZGVzdGluYXRpb24gU0FQICovCisJX191OCAgc3NhcDsJCQkvKiBzb3VyY2UgU0FQICovCisJX191OCAgbGxjOwkJCS8qIExMQyBjb250cm9sIGZpZWxkICovCisJX191OCAgcHJvdGlkWzNdOwkJLyogcHJvdG9jb2wgaWQgKi8KKwlfX3UxNiBldGhlcnR5cGU7CQkvKiBldGhlciB0eXBlIGZpZWxkICovCit9OworCisvKiBUb2tlbi1SaW5nIHN0YXRpc3RpY3MgY29sbGVjdGlvbiBkYXRhLiAqLworc3RydWN0IHRyX3N0YXRpc3RpY3MgeworCXVuc2lnbmVkIGxvbmcgcnhfcGFja2V0czsgICAgICAgLyogdG90YWwgcGFja2V0cyByZWNlaXZlZAkqLworCXVuc2lnbmVkIGxvbmcgdHhfcGFja2V0czsJLyogdG90YWwgcGFja2V0cyB0cmFuc21pdHRlZAkqLworCXVuc2lnbmVkIGxvbmcgcnhfYnl0ZXM7CQkvKiB0b3RhbCBieXRlcyByZWNlaXZlZCAgIAkqLworCXVuc2lnbmVkIGxvbmcgdHhfYnl0ZXM7CQkvKiB0b3RhbCBieXRlcyB0cmFuc21pdHRlZAkqLworCXVuc2lnbmVkIGxvbmcgcnhfZXJyb3JzOwkvKiBiYWQgcGFja2V0cyByZWNlaXZlZAkJKi8KKwl1bnNpZ25lZCBsb25nIHR4X2Vycm9yczsJLyogcGFja2V0IHRyYW5zbWl0IHByb2JsZW1zCSovCisJdW5zaWduZWQgbG9uZyByeF9kcm9wcGVkOwkvKiBubyBzcGFjZSBpbiBsaW51eCBidWZmZXJzCSovCisJdW5zaWduZWQgbG9uZyB0eF9kcm9wcGVkOwkvKiBubyBzcGFjZSBhdmFpbGFibGUgaW4gbGludXgJKi8KKwl1bnNpZ25lZCBsb25nIG11bHRpY2FzdDsJLyogbXVsdGljYXN0IHBhY2tldHMgcmVjZWl2ZWQJKi8KKwl1bnNpZ25lZCBsb25nIHRyYW5zbWl0X2NvbGxpc2lvbjsKKworCS8qIGRldGFpbGVkIFRva2VuLVJpbmcgZXJyb3JzLiBTZWUgSUJNIFRva2VuLVJpbmcgTmV0d29yaworCSAgIEFyY2hpdGVjdHVyZSBmb3IgbW9yZSBpbmZvICovCisKKwl1bnNpZ25lZCBsb25nIGxpbmVfZXJyb3JzOworCXVuc2lnbmVkIGxvbmcgaW50ZXJuYWxfZXJyb3JzOworCXVuc2lnbmVkIGxvbmcgYnVyc3RfZXJyb3JzOworCXVuc2lnbmVkIGxvbmcgQV9DX2Vycm9yczsKKwl1bnNpZ25lZCBsb25nIGFib3J0X2RlbGltaXRlcnM7CisJdW5zaWduZWQgbG9uZyBsb3N0X2ZyYW1lczsKKwl1bnNpZ25lZCBsb25nIHJlY3ZfY29uZ2VzdF9jb3VudDsKKwl1bnNpZ25lZCBsb25nIGZyYW1lX2NvcGllZF9lcnJvcnM7CisJdW5zaWduZWQgbG9uZyBmcmVxdWVuY3lfZXJyb3JzOworCXVuc2lnbmVkIGxvbmcgdG9rZW5fZXJyb3JzOworCXVuc2lnbmVkIGxvbmcgZHVtbXkxOworfTsKKworLyogc291cmNlIHJvdXRpbmcgc3R1ZmYgKi8KKworI2RlZmluZSBUUl9SSUkgMHg4MAorI2RlZmluZSBUUl9SQ0ZfRElSX0JJVCAweDgwCisjZGVmaW5lIFRSX1JDRl9MRU5fTUFTSyAweDFmMDAKKyNkZWZpbmUgVFJfUkNGX0JST0FEQ0FTVCAweDgwMDAgICAgICAgICAvKiBhbGwtcm91dGVzIGJyb2FkY2FzdCAqLworI2RlZmluZSBUUl9SQ0ZfTElNSVRFRF9CUk9BRENBU1QgMHhDMDAwIC8qIHNpbmdsZS1yb3V0ZSBicm9hZGNhc3QgKi8KKyNkZWZpbmUgVFJfUkNGX0ZSQU1FMksgMHgyMAorI2RlZmluZSBUUl9SQ0ZfQlJPQURDQVNUX01BU0sgMHhDMDAwCisjZGVmaW5lIFRSX01BWFJJRkxFTiAxOAorCisjZW5kaWYJLyogX0xJTlVYX0lGX1RSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWZfdHVuLmggYi9pbmNsdWRlL2xpbnV4L2lmX3R1bi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5NmE4NWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2lmX3R1bi5oCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiAgVW5pdmVyc2FsIFRVTi9UQVAgZGV2aWNlIGRyaXZlci4KKyAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBNYXhpbSBLcmFzbnlhbnNreSA8bWF4X21rQHlhaG9vLmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAkSWQ6IGlmX3R1bi5oLHYgMS4yIDIwMDEvMDYvMDEgMTg6Mzk6NDcgZGF2ZW0gRXhwICQKKyAqLworCisjaWZuZGVmIF9fSUZfVFVOX0gKKyNkZWZpbmUgX19JRl9UVU5fSAorCisvKiBVbmNvbW1lbnQgdG8gZW5hYmxlIGRlYnVnZ2luZyAqLworLyogI2RlZmluZSBUVU5fREVCVUcgMSAqLworCisjaWZkZWYgX19LRVJORUxfXworCisjaWZkZWYgVFVOX0RFQlVHCisjZGVmaW5lIERCRyAgaWYodHVuLT5kZWJ1ZylwcmludGsKKyNkZWZpbmUgREJHMSBpZihkZWJ1Zz09MilwcmludGsKKyNlbHNlCisjZGVmaW5lIERCRyggYS4uLiApCisjZGVmaW5lIERCRzEoIGEuLi4gKQorI2VuZGlmCisKK3N0cnVjdCB0dW5fc3RydWN0IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICBsaXN0OworCXVuc2lnbmVkIGxvbmcgCQlmbGFnczsKKwlpbnQJCQlhdHRhY2hlZDsKKwl1aWRfdAkJCW93bmVyOworCisJd2FpdF9xdWV1ZV9oZWFkX3QJcmVhZF93YWl0OworCXN0cnVjdCBza19idWZmX2hlYWQJcmVhZHE7CisKKwlzdHJ1Y3QgbmV0X2RldmljZQkqZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzCXN0YXRzOworCisJc3RydWN0IGZhc3luY19zdHJ1Y3QgICAgKmZhc3luYzsKKworCXVuc2lnbmVkIGxvbmcgaWZfZmxhZ3M7CisJdTggZGV2X2FkZHJbRVRIX0FMRU5dOworCXUzMiBjaHJfZmlsdGVyWzJdOworCXUzMiBuZXRfZmlsdGVyWzJdOworCisjaWZkZWYgVFVOX0RFQlVHCQorCWludCBkZWJ1ZzsKKyNlbmRpZiAgCit9OworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisvKiBSZWFkIHF1ZXVlIHNpemUgKi8KKyNkZWZpbmUgVFVOX1JFQURRX1NJWkUJNTAwCisKKy8qIFRVTiBkZXZpY2UgZmxhZ3MgKi8KKyNkZWZpbmUgVFVOX1RVTl9ERVYgCTB4MDAwMQkKKyNkZWZpbmUgVFVOX1RBUF9ERVYJMHgwMDAyCisjZGVmaW5lIFRVTl9UWVBFX01BU0sgICAweDAwMGYKKworI2RlZmluZSBUVU5fRkFTWU5DCTB4MDAxMAorI2RlZmluZSBUVU5fTk9DSEVDS1NVTQkweDAwMjAKKyNkZWZpbmUgVFVOX05PX1BJCTB4MDA0MAorI2RlZmluZSBUVU5fT05FX1FVRVVFCTB4MDA4MAorI2RlZmluZSBUVU5fUEVSU0lTVCAJMHgwMTAwCQorCisvKiBJb2N0bCBkZWZpbmVzICovCisjZGVmaW5lIFRVTlNFVE5PQ1NVTSAgX0lPVygnVCcsIDIwMCwgaW50KSAKKyNkZWZpbmUgVFVOU0VUREVCVUcgICBfSU9XKCdUJywgMjAxLCBpbnQpIAorI2RlZmluZSBUVU5TRVRJRkYgICAgIF9JT1coJ1QnLCAyMDIsIGludCkgCisjZGVmaW5lIFRVTlNFVFBFUlNJU1QgX0lPVygnVCcsIDIwMywgaW50KSAKKyNkZWZpbmUgVFVOU0VUT1dORVIgICBfSU9XKCdUJywgMjA0LCBpbnQpCisKKy8qIFRVTlNFVElGRiBpZnIgZmxhZ3MgKi8KKyNkZWZpbmUgSUZGX1RVTgkJMHgwMDAxCisjZGVmaW5lIElGRl9UQVAJCTB4MDAwMgorI2RlZmluZSBJRkZfTk9fUEkJMHgxMDAwCisjZGVmaW5lIElGRl9PTkVfUVVFVUUJMHgyMDAwCisKK3N0cnVjdCB0dW5fcGkgeworCXVuc2lnbmVkIHNob3J0IGZsYWdzOworCXVuc2lnbmVkIHNob3J0IHByb3RvOworfTsKKyNkZWZpbmUgVFVOX1BLVF9TVFJJUAkweDAwMDEKKworI2VuZGlmIC8qIF9fSUZfVFVOX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWZfdHVubmVsLmggYi9pbmNsdWRlL2xpbnV4L2lmX3R1bm5lbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlZjlmOGYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2lmX3R1bm5lbC5oCkBAIC0wLDAgKzEsMjkgQEAKKyNpZm5kZWYgX0lGX1RVTk5FTF9IXworI2RlZmluZSBfSUZfVFVOTkVMX0hfCisKKyNkZWZpbmUgU0lPQ0dFVFRVTk5FTCAgIChTSU9DREVWUFJJVkFURSArIDApCisjZGVmaW5lIFNJT0NBRERUVU5ORUwgICAoU0lPQ0RFVlBSSVZBVEUgKyAxKQorI2RlZmluZSBTSU9DREVMVFVOTkVMICAgKFNJT0NERVZQUklWQVRFICsgMikKKyNkZWZpbmUgU0lPQ0NIR1RVTk5FTCAgIChTSU9DREVWUFJJVkFURSArIDMpCisKKyNkZWZpbmUgR1JFX0NTVU0JX19jb25zdGFudF9odG9ucygweDgwMDApCisjZGVmaW5lIEdSRV9ST1VUSU5HCV9fY29uc3RhbnRfaHRvbnMoMHg0MDAwKQorI2RlZmluZSBHUkVfS0VZCQlfX2NvbnN0YW50X2h0b25zKDB4MjAwMCkKKyNkZWZpbmUgR1JFX1NFUQkJX19jb25zdGFudF9odG9ucygweDEwMDApCisjZGVmaW5lIEdSRV9TVFJJQ1QJX19jb25zdGFudF9odG9ucygweDA4MDApCisjZGVmaW5lIEdSRV9SRUMJCV9fY29uc3RhbnRfaHRvbnMoMHgwNzAwKQorI2RlZmluZSBHUkVfRkxBR1MJX19jb25zdGFudF9odG9ucygweDAwRjgpCisjZGVmaW5lIEdSRV9WRVJTSU9OCV9fY29uc3RhbnRfaHRvbnMoMHgwMDA3KQorCitzdHJ1Y3QgaXBfdHVubmVsX3Bhcm0KK3sKKwljaGFyCQkJbmFtZVtJRk5BTVNJWl07CisJaW50CQkJbGluazsKKwlfX3UxNgkJCWlfZmxhZ3M7CisJX191MTYJCQlvX2ZsYWdzOworCV9fdTMyCQkJaV9rZXk7CisJX191MzIJCQlvX2tleTsKKwlzdHJ1Y3QgaXBoZHIJCWlwaDsKK307CisKKyNlbmRpZiAvKiBfSUZfVFVOTkVMX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaCBiL2luY2x1ZGUvbGludXgvaWZfdmxhbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyYTlkODkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaApAQCAtMCwwICsxLDM5OCBAQAorLyoKKyAqIFZMQU4JCUFuIGltcGxlbWVudGF0aW9uIG9mIDgwMi4xUSBWTEFOIHRhZ2dpbmcuCisgKgorICogQXV0aG9yczoJQmVuIEdyZWVhciA8Z3JlZWFyYkBjYW5kZWxhdGVjaC5jb20+CisgKgorICoJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCQltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICoJCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICoJCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpZm5kZWYgX0xJTlVYX0lGX1ZMQU5fSF8KKyNkZWZpbmUgX0xJTlVYX0lGX1ZMQU5fSF8KKworI2lmZGVmIF9fS0VSTkVMX18KKworLyogZXh0ZXJuYWxseSBkZWZpbmVkIHN0cnVjdHMgKi8KK3N0cnVjdCB2bGFuX2dyb3VwOworc3RydWN0IG5ldF9kZXZpY2U7CitzdHJ1Y3QgcGFja2V0X3R5cGU7CitzdHJ1Y3Qgdmxhbl9jb2xsZWN0aW9uOworc3RydWN0IHZsYW5fZGV2X2luZm87CitzdHJ1Y3QgaGxpc3Rfbm9kZTsKKworI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4gLyogZm9yIHByb2NfZGlyX2VudHJ5ICovCisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisKKyNkZWZpbmUgVkxBTl9ITEVOCTQJCS8qIFRoZSBhZGRpdGlvbmFsIGJ5dGVzIChvbiB0b3Agb2YgdGhlIEV0aGVybmV0IGhlYWRlcikKKwkJCQkJICogdGhhdCBWTEFOIHJlcXVpcmVzLgorCQkJCQkgKi8KKyNkZWZpbmUgVkxBTl9FVEhfQUxFTgk2CQkvKiBPY3RldHMgaW4gb25lIGV0aGVybmV0IGFkZHIJICovCisjZGVmaW5lIFZMQU5fRVRIX0hMRU4JMTgJCS8qIFRvdGFsIG9jdGV0cyBpbiBoZWFkZXIuCSAqLworI2RlZmluZSBWTEFOX0VUSF9aTEVOCTY0CQkvKiBNaW4uIG9jdGV0cyBpbiBmcmFtZSBzYW5zIEZDUyAqLworCisvKgorICogQWNjb3JkaW5nIHRvIDgwMi4zYWMsIHRoZSBwYWNrZXQgY2FuIGJlIDQgYnl0ZXMgbG9uZ2VyLiAtLUtsaWthIEphbgorICovCisjZGVmaW5lIFZMQU5fRVRIX0RBVEFfTEVOCTE1MDAJLyogTWF4LiBvY3RldHMgaW4gcGF5bG9hZAkgKi8KKyNkZWZpbmUgVkxBTl9FVEhfRlJBTUVfTEVOCTE1MTgJLyogTWF4LiBvY3RldHMgaW4gZnJhbWUgc2FucyBGQ1MgKi8KKworc3RydWN0IHZsYW5fZXRoaGRyIHsKKyAgIHVuc2lnbmVkIGNoYXIJaF9kZXN0W0VUSF9BTEVOXTsJICAgLyogZGVzdGluYXRpb24gZXRoIGFkZHIJKi8KKyAgIHVuc2lnbmVkIGNoYXIJaF9zb3VyY2VbRVRIX0FMRU5dOwkgICAvKiBzb3VyY2UgZXRoZXIgYWRkcgkqLworICAgdW5zaWduZWQgc2hvcnQgICAgICAgaF92bGFuX3Byb3RvOyAgICAgICAgICAgICAgLyogU2hvdWxkIGFsd2F5cyBiZSAweDgxMDAgKi8KKyAgIHVuc2lnbmVkIHNob3J0ICAgICAgIGhfdmxhbl9UQ0k7ICAgICAgICAgICAgICAgIC8qIEVuY2Fwc3VsYXRlcyBwcmlvcml0eSBhbmQgVkxBTiBJRCAqLworICAgdW5zaWduZWQgc2hvcnQJaF92bGFuX2VuY2Fwc3VsYXRlZF9wcm90bzsgLyogcGFja2V0IHR5cGUgSUQgZmllbGQgKG9yIGxlbikgKi8KK307CisKKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgdmxhbl9ldGhoZHIgKnZsYW5fZXRoX2hkcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXJldHVybiAoc3RydWN0IHZsYW5fZXRoaGRyICopc2tiLT5tYWMucmF3OworfQorCitzdHJ1Y3Qgdmxhbl9oZHIgeworICAgdW5zaWduZWQgc2hvcnQgICAgICAgaF92bGFuX1RDSTsgICAgICAgICAgICAgICAgLyogRW5jYXBzdWxhdGVzIHByaW9yaXR5IGFuZCBWTEFOIElEICovCisgICB1bnNpZ25lZCBzaG9ydCAgICAgICBoX3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvOyAvKiBwYWNrZXQgdHlwZSBJRCBmaWVsZCAob3IgbGVuKSAqLworfTsKKworI2RlZmluZSBWTEFOX1ZJRF9NQVNLCTB4ZmZmCisKKy8qIGZvdW5kIGluIHNvY2tldC5jICovCitleHRlcm4gdm9pZCB2bGFuX2lvY3RsX3NldChpbnQgKCpob29rKSh2b2lkIF9fdXNlciAqKSk7CisKKyNkZWZpbmUgVkxBTl9OQU1FICJ2bGFuIgorCisvKiBpZiB0aGlzIGNoYW5nZXMsIGFsZ29yaXRobSB3aWxsIGhhdmUgdG8gYmUgcmV3b3JrZWQgYmVjYXVzZSB0aGlzCisgKiBkZXBlbmRzIG9uIGNvbXBsZXRlbHkgZXhoYXVzdGluZyB0aGUgVkxBTiBpZGVudGlmaWVyIHNwYWNlLiAgVGh1cworICogaXQgZ2l2ZXMgY29uc3RhbnQgdGltZSBsb29rLXVwLCBidXQgaW4gbWFueSBjYXNlcyBpdCB3YXN0ZXMgbWVtb3J5LgorICovCisjZGVmaW5lIFZMQU5fR1JPVVBfQVJSQVlfTEVOIDQwOTYKKworc3RydWN0IHZsYW5fZ3JvdXAgeworCWludCByZWFsX2Rldl9pZmluZGV4OyAvKiBUaGUgaWZpbmRleCBvZiB0aGUgZXRoZXJuZXQobGlrZSkgZGV2aWNlIHRoZSB2bGFuIGlzIGF0dGFjaGVkIHRvLiAqLworCXN0cnVjdCBobGlzdF9ub2RlCWhsaXN0OwkvKiBsaW5rZWQgbGlzdCAqLworCXN0cnVjdCBuZXRfZGV2aWNlICp2bGFuX2RldmljZXNbVkxBTl9HUk9VUF9BUlJBWV9MRU5dOworCXN0cnVjdCByY3VfaGVhZAkJcmN1OworfTsKKworc3RydWN0IHZsYW5fcHJpb3JpdHlfdGNpX21hcHBpbmcgeworCXVuc2lnbmVkIGxvbmcgcHJpb3JpdHk7CisJdW5zaWduZWQgc2hvcnQgdmxhbl9xb3M7IC8qIFRoaXMgc2hvdWxkIGJlIHNoaWZ0ZWQgd2hlbiBmaXJzdCBzZXQsIHNvIHdlIG9ubHkgZG8gaXQKKwkJCQkgICogYXQgcHJvdmlzaW9uaW5nIHRpbWUuCisJCQkJICAqICgoc2tiLT5wcmlvcml0eSA8PCAxMykgJiAweEUwMDApCisJCQkJICAqLworCXN0cnVjdCB2bGFuX3ByaW9yaXR5X3RjaV9tYXBwaW5nICpuZXh0OworfTsKKworLyogSG9sZHMgaW5mb3JtYXRpb24gdGhhdCBtYWtlcyBzZW5zZSBpZiB0aGlzIGRldmljZSBpcyBhIFZMQU4gZGV2aWNlLiAqLworc3RydWN0IHZsYW5fZGV2X2luZm8geworCS8qKiBUaGlzIHdpbGwgYmUgdGhlIG1hcHBpbmcgdGhhdCBjb3JyZWxhdGVzIHNrYi0+cHJpb3JpdHkgdG8KKwkgKiAzIGJpdHMgb2YgVkxBTiBRT1MgdGFncy4uLgorCSAqLworCXVuc2lnbmVkIGxvbmcgaW5ncmVzc19wcmlvcml0eV9tYXBbOF07CisJc3RydWN0IHZsYW5fcHJpb3JpdHlfdGNpX21hcHBpbmcgKmVncmVzc19wcmlvcml0eV9tYXBbMTZdOyAvKiBoYXNoIHRhYmxlICovCisKKwl1bnNpZ25lZCBzaG9ydCB2bGFuX2lkOyAgICAgICAgLyogIFRoZSBWTEFOIElkZW50aWZpZXIgZm9yIHRoaXMgaW50ZXJmYWNlLiAqLworCXVuc2lnbmVkIHNob3J0IGZsYWdzOyAgICAgICAgICAvKiAoMSA8PCAwKSByZV9vcmRlcl9oZWFkZXIgICBUaGlzIG9wdGlvbiB3aWxsIGNhdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICBWTEFOIGNvZGUgdG8gbW92ZSBhcm91bmQgdGhlIGV0aGVybmV0IGhlYWRlciBvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICBpbmdyZXNzIHRvIG1ha2UgdGhlIHNrYiBsb29rICoqZXhhY3RseSoqIGxpa2UgaXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgY2FtZSBpbiBmcm9tIGFuIGV0aGVybmV0IHBvcnQuICBUaGlzIGRlc3Ryb3lzIHNvbWUgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgdGhlIFZMQU4gaW5mb3JtYXRpb24gaW4gdGhlIHNrYiwgYnV0IGl0IGZpeGVzIHByb2dyYW1zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIGxpa2UgREhDUCB0aGF0IHVzZSBwYWNrZXQtZmlsdGVyaW5nIGFuZCBkb24ndCB1bmRlcnN0YW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIDgwMi4xUQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJc3RydWN0IGRldl9tY19saXN0ICpvbGRfbWNfbGlzdDsgIC8qIG9sZCBtdWx0aS1jYXN0IGxpc3QgZm9yIHRoZSBWTEFOIGludGVyZmFjZS4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB3ZSBzYXZlIHRoaXMgc28gd2UgY2FuIHRlbGwgd2hhdCBjaGFuZ2VzIHdlcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIG1hZGUsIGluIG9yZGVyIHRvIGZlZWQgdGhlIHJpZ2h0IGNoYW5nZXMgZG93bgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdG8gdGhlIHJlYWwgaGFyZHdhcmUuLi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCWludCBvbGRfYWxsbXVsdGk7ICAgICAgICAgICAgICAgLyogc2ltaWxhciB0byBhYm92ZS4gKi8KKwlpbnQgb2xkX3Byb21pc2N1aXR5OyAgICAgICAgICAgIC8qIHNpbWlsYXIgdG8gYWJvdmUuICovCisJc3RydWN0IG5ldF9kZXZpY2UgKnJlYWxfZGV2OyAgICAvKiB0aGUgdW5kZXJseWluZyBkZXZpY2UvaW50ZXJmYWNlICovCisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpkZW50OyAgICAvKiBIb2xkcyB0aGUgcHJvYyBkYXRhICovCisJdW5zaWduZWQgbG9uZyBjbnRfaW5jX2hlYWRyb29tX29uX3R4OyAvKiBIb3cgbWFueSB0aW1lcyBkaWQgd2UgaGF2ZSB0byBncm93IHRoZSBza2Igb24gVFguICovCisJdW5zaWduZWQgbG9uZyBjbnRfZW5jYXBfb25feG1pdDsgICAgICAvKiBIb3cgbWFueSB0aW1lcyBkaWQgd2UgaGF2ZSB0byBlbmNhcHN1bGF0ZSB0aGUgc2tiIG9uIFRYLiAqLworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIGRldl9zdGF0czsgLyogRGV2aWNlIHN0YXRzIChyeC1ieXRlcywgdHgtcGt0cywgZXRjLi4uKSAqLworfTsKKworI2RlZmluZSBWTEFOX0RFVl9JTkZPKHgpICgoc3RydWN0IHZsYW5fZGV2X2luZm8gKikoeC0+cHJpdikpCisKKy8qIGlubGluZSBmdW5jdGlvbnMgKi8KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqdmxhbl9kZXZfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuICYoVkxBTl9ERVZfSU5GTyhkZXYpLT5kZXZfc3RhdHMpOworfQorCitzdGF0aWMgaW5saW5lIF9fdTMyIHZsYW5fZ2V0X2luZ3Jlc3NfcHJpb3JpdHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJICAgICAgdW5zaWduZWQgc2hvcnQgdmxhbl90YWcpCit7CisJc3RydWN0IHZsYW5fZGV2X2luZm8gKnZpcCA9IFZMQU5fREVWX0lORk8oZGV2KTsKKworCXJldHVybiB2aXAtPmluZ3Jlc3NfcHJpb3JpdHlfbWFwWyh2bGFuX3RhZyA+PiAxMykgJiAweDddOworfQorCisvKiBWTEFOIHR4IGh3IGFjY2VsZXJhdGlvbiBoZWxwZXJzLiAqLworc3RydWN0IHZsYW5fc2tiX3R4X2Nvb2tpZSB7CisJdTMyCW1hZ2ljOworCXUzMgl2bGFuX3RhZzsKK307CisKKyNkZWZpbmUgVkxBTl9UWF9DT09LSUVfTUFHSUMJMHg1NjRjNDE0ZQkvKiAiVkxBTiIgaW4gYXNjaWkuICovCisjZGVmaW5lIFZMQU5fVFhfU0tCX0NCKF9fc2tiKQkoKHN0cnVjdCB2bGFuX3NrYl90eF9jb29raWUgKikmKChfX3NrYiktPmNiWzBdKSkKKyNkZWZpbmUgdmxhbl90eF90YWdfcHJlc2VudChfX3NrYikgXAorCShWTEFOX1RYX1NLQl9DQihfX3NrYiktPm1hZ2ljID09IFZMQU5fVFhfQ09PS0lFX01BR0lDKQorI2RlZmluZSB2bGFuX3R4X3RhZ19nZXQoX19za2IpCShWTEFOX1RYX1NLQl9DQihfX3NrYiktPnZsYW5fdGFnKQorCisvKiBWTEFOIHJ4IGh3IGFjY2VsZXJhdGlvbiBoZWxwZXIuICBUaGlzIGFjdHMgbGlrZSBuZXRpZl97cngscmVjZWl2ZV9za2J9KCkuICovCitzdGF0aWMgaW5saW5lIGludCBfX3ZsYW5faHdhY2NlbF9yeChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICBzdHJ1Y3Qgdmxhbl9ncm91cCAqZ3JwLAorCQkJCSAgICB1bnNpZ25lZCBzaG9ydCB2bGFuX3RhZywgaW50IHBvbGxpbmcpCit7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzOworCisJc2tiLT5yZWFsX2RldiA9IHNrYi0+ZGV2OworCXNrYi0+ZGV2ID0gZ3JwLT52bGFuX2RldmljZXNbdmxhbl90YWcgJiBWTEFOX1ZJRF9NQVNLXTsKKwlpZiAoc2tiLT5kZXYgPT0gTlVMTCkgeworCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCisJCS8qIE5vdCBORVRfUlhfRFJPUCwgdGhpcyBpcyBub3QgYmVpbmcgZHJvcHBlZAorCQkgKiBkdWUgdG8gY29uZ2VzdGlvbi4KKwkJICovCisJCXJldHVybiAwOworCX0KKworCXNrYi0+ZGV2LT5sYXN0X3J4ID0gamlmZmllczsKKworCXN0YXRzID0gdmxhbl9kZXZfZ2V0X3N0YXRzKHNrYi0+ZGV2KTsKKwlzdGF0cy0+cnhfcGFja2V0cysrOworCXN0YXRzLT5yeF9ieXRlcyArPSBza2ItPmxlbjsKKworCXNrYi0+cHJpb3JpdHkgPSB2bGFuX2dldF9pbmdyZXNzX3ByaW9yaXR5KHNrYi0+ZGV2LCB2bGFuX3RhZyk7CisJc3dpdGNoIChza2ItPnBrdF90eXBlKSB7CisJY2FzZSBQQUNLRVRfQlJPQURDQVNUOgorCQlicmVhazsKKworCWNhc2UgUEFDS0VUX01VTFRJQ0FTVDoKKwkJc3RhdHMtPm11bHRpY2FzdCsrOworCQlicmVhazsKKworCWNhc2UgUEFDS0VUX09USEVSSE9TVDoKKwkJLyogT3VyIGxvd2VyIGxheWVyIHRoaW5rcyB0aGlzIGlzIG5vdCBsb2NhbCwgbGV0J3MgbWFrZSBzdXJlLgorCQkgKiBUaGlzIGFsbG93cyB0aGUgVkxBTiB0byBoYXZlIGEgZGlmZmVyZW50IE1BQyB0aGFuIHRoZSB1bmRlcmx5aW5nCisJCSAqIGRldmljZSwgYW5kIHN0aWxsIHJvdXRlIGNvcnJlY3RseS4KKwkJICovCisJCWlmICghbWVtY21wKGV0aF9oZHIoc2tiKS0+aF9kZXN0LCBza2ItPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKSkKKwkJCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfSE9TVDsKKwkJYnJlYWs7CisJfTsKKworCXJldHVybiAocG9sbGluZyA/IG5ldGlmX3JlY2VpdmVfc2tiKHNrYikgOiBuZXRpZl9yeChza2IpKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgdmxhbl9od2FjY2VsX3J4KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICBzdHJ1Y3Qgdmxhbl9ncm91cCAqZ3JwLAorCQkJCSAgdW5zaWduZWQgc2hvcnQgdmxhbl90YWcpCit7CisJcmV0dXJuIF9fdmxhbl9od2FjY2VsX3J4KHNrYiwgZ3JwLCB2bGFuX3RhZywgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHZsYW5faHdhY2NlbF9yZWNlaXZlX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgICBzdHJ1Y3Qgdmxhbl9ncm91cCAqZ3JwLAorCQkJCQkgICB1bnNpZ25lZCBzaG9ydCB2bGFuX3RhZykKK3sKKwlyZXR1cm4gX192bGFuX2h3YWNjZWxfcngoc2tiLCBncnAsIHZsYW5fdGFnLCAxKTsKK30KKworLyoqCisgKiBfX3ZsYW5fcHV0X3RhZyAtIHJlZ3VsYXIgVkxBTiB0YWcgaW5zZXJ0aW5nCisgKiBAc2tiOiBza2J1ZmYgdG8gdGFnCisgKiBAdGFnOiBWTEFOIHRhZyB0byBpbnNlcnQKKyAqCisgKiBJbnNlcnRzIHRoZSBWTEFOIHRhZyBpbnRvIEBza2IgYXMgcGFydCBvZiB0aGUgcGF5bG9hZAorICogUmV0dXJucyBhIFZMQU4gdGFnZ2VkIHNrYi4gSWYgYSBuZXcgc2tiIGlzIGNyZWF0ZWQsIEBza2IgaXMgZnJlZWQuCisgKiAKKyAqIEZvbGxvd2luZyB0aGUgc2tiX3Vuc2hhcmUoKSBleGFtcGxlLCBpbiBjYXNlIG9mIGVycm9yLCB0aGUgY2FsbGluZyBmdW5jdGlvbgorICogZG9lc24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IGZyZWVpbmcgdGhlIG9yaWdpbmFsIHNrYi4KKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqX192bGFuX3B1dF90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgc2hvcnQgdGFnKQoreworCXN0cnVjdCB2bGFuX2V0aGhkciAqdmV0aDsKKworCWlmIChza2JfaGVhZHJvb20oc2tiKSA8IFZMQU5fSExFTikgeworCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tfdG1wID0gc2tiOworCQlza2IgPSBza2JfcmVhbGxvY19oZWFkcm9vbShza190bXAsIFZMQU5fSExFTik7CisJCWtmcmVlX3NrYihza190bXApOworCQlpZiAoIXNrYikgeworCQkJcHJpbnRrKEtFUk5fRVJSICJ2bGFuOiBmYWlsZWQgdG8gcmVhbGxvYyBoZWFkcm9vbVxuIik7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCX0gZWxzZSB7CisJCXNrYiA9IHNrYl91bnNoYXJlKHNrYiwgR0ZQX0FUT01JQyk7CisJCWlmICghc2tiKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInZsYW46IGZhaWxlZCB0byB1bnNoYXJlIHNrYnVmZlxuIik7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCX0KKworCXZldGggPSAoc3RydWN0IHZsYW5fZXRoaGRyICopc2tiX3B1c2goc2tiLCBWTEFOX0hMRU4pOworCisJLyogTW92ZSB0aGUgbWFjIGFkZHJlc3NlcyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXcgaGVhZGVyLiAqLworCW1lbW1vdmUoc2tiLT5kYXRhLCBza2ItPmRhdGEgKyBWTEFOX0hMRU4sIDIgKiBWTEFOX0VUSF9BTEVOKTsKKworCS8qIGZpcnN0LCB0aGUgZXRoZXJuZXQgdHlwZSAqLworCXZldGgtPmhfdmxhbl9wcm90byA9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfODAyMVEpOworCisJLyogbm93LCB0aGUgdGFnICovCisJdmV0aC0+aF92bGFuX1RDSSA9IGh0b25zKHRhZyk7CisKKwlza2ItPnByb3RvY29sID0gX19jb25zdGFudF9odG9ucyhFVEhfUF84MDIxUSk7CisJc2tiLT5tYWMucmF3IC09IFZMQU5fSExFTjsKKwlza2ItPm5oLnJhdyAtPSBWTEFOX0hMRU47CisKKwlyZXR1cm4gc2tiOworfQorCisvKioKKyAqIF9fdmxhbl9od2FjY2VsX3B1dF90YWcgLSBoYXJkd2FyZSBhY2NlbGVyYXRlZCBWTEFOIGluc2VydGluZworICogQHNrYjogc2tidWZmIHRvIHRhZworICogQHRhZzogVkxBTiB0YWcgdG8gaW5zZXJ0CisgKgorICogUHV0cyB0aGUgVkxBTiB0YWcgaW4gQHNrYi0+Y2JbXSBhbmQgbGV0cyB0aGUgZGV2aWNlIGRvIHRoZSByZXN0CisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKl9fdmxhbl9od2FjY2VsX3B1dF90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgc2hvcnQgdGFnKQoreworCXN0cnVjdCB2bGFuX3NrYl90eF9jb29raWUgKmNvb2tpZTsKKworCWNvb2tpZSA9IFZMQU5fVFhfU0tCX0NCKHNrYik7CisJY29va2llLT5tYWdpYyA9IFZMQU5fVFhfQ09PS0lFX01BR0lDOworCWNvb2tpZS0+dmxhbl90YWcgPSB0YWc7CisKKwlyZXR1cm4gc2tiOworfQorCisjZGVmaW5lIEhBVkVfVkxBTl9QVVRfVEFHCisKKy8qKgorICogdmxhbl9wdXRfdGFnIC0gaW5zZXJ0cyBWTEFOIHRhZyBhY2NvcmRpbmcgdG8gZGV2aWNlIGZlYXR1cmVzCisgKiBAc2tiOiBza2J1ZmYgdG8gdGFnCisgKiBAdGFnOiBWTEFOIHRhZyB0byBpbnNlcnQKKyAqCisgKiBBc3N1bWVzIHNrYi0+ZGV2IGlzIHRoZSB0YXJnZXQgdGhhdCB3aWxsIHhtaXQgdGhpcyBmcmFtZS4KKyAqIFJldHVybnMgYSBWTEFOIHRhZ2dlZCBza2IuCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKnZsYW5fcHV0X3RhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBzaG9ydCB0YWcpCit7CisJaWYgKHNrYi0+ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfSFdfVkxBTl9UWCkgeworCQlyZXR1cm4gX192bGFuX2h3YWNjZWxfcHV0X3RhZyhza2IsIHRhZyk7CisJfSBlbHNlIHsKKwkJcmV0dXJuIF9fdmxhbl9wdXRfdGFnKHNrYiwgdGFnKTsKKwl9Cit9CisKKy8qKgorICogX192bGFuX2dldF90YWcgLSBnZXQgdGhlIFZMQU4gSUQgdGhhdCBpcyBwYXJ0IG9mIHRoZSBwYXlsb2FkCisgKiBAc2tiOiBza2J1ZmYgdG8gcXVlcnkKKyAqIEB0YWc6IGJ1ZmZlciB0byBzdG9yZSB2bGF1ZQorICogCisgKiBSZXR1cm5zIGVycm9yIGlmIHRoZSBza2IgaXMgbm90IG9mIFZMQU4gdHlwZQorICovCitzdGF0aWMgaW5saW5lIGludCBfX3ZsYW5fZ2V0X3RhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBzaG9ydCAqdGFnKQoreworCXN0cnVjdCB2bGFuX2V0aGhkciAqdmV0aCA9IChzdHJ1Y3Qgdmxhbl9ldGhoZHIgKilza2ItPmRhdGE7CisKKwlpZiAodmV0aC0+aF92bGFuX3Byb3RvICE9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfODAyMVEpKSB7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCSp0YWcgPSBudG9ocyh2ZXRoLT5oX3ZsYW5fVENJKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIF9fdmxhbl9od2FjY2VsX2dldF90YWcgLSBnZXQgdGhlIFZMQU4gSUQgdGhhdCBpcyBpbiBAc2tiLT5jYltdCisgKiBAc2tiOiBza2J1ZmYgdG8gcXVlcnkKKyAqIEB0YWc6IGJ1ZmZlciB0byBzdG9yZSB2bGF1ZQorICogCisgKiBSZXR1cm5zIGVycm9yIGlmIEBza2ItPmNiW10gaXMgbm90IHNldCBjb3JyZWN0bHkKKyAqLworc3RhdGljIGlubGluZSBpbnQgX192bGFuX2h3YWNjZWxfZ2V0X3RhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBzaG9ydCAqdGFnKQoreworCXN0cnVjdCB2bGFuX3NrYl90eF9jb29raWUgKmNvb2tpZTsKKworCWNvb2tpZSA9IFZMQU5fVFhfU0tCX0NCKHNrYik7CisJaWYgKGNvb2tpZS0+bWFnaWMgPT0gVkxBTl9UWF9DT09LSUVfTUFHSUMpIHsKKwkJKnRhZyA9IGNvb2tpZS0+dmxhbl90YWc7CisJCXJldHVybiAwOworCX0gZWxzZSB7CisJCSp0YWcgPSAwOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CisKKyNkZWZpbmUgSEFWRV9WTEFOX0dFVF9UQUcKKworLyoqCisgKiB2bGFuX2dldF90YWcgLSBnZXQgdGhlIFZMQU4gSUQgZnJvbSB0aGUgc2tiCisgKiBAc2tiOiBza2J1ZmYgdG8gcXVlcnkKKyAqIEB0YWc6IGJ1ZmZlciB0byBzdG9yZSB2bGF1ZQorICogCisgKiBSZXR1cm5zIGVycm9yIGlmIHRoZSBza2IgaXMgbm90IFZMQU4gdGFnZ2VkCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHZsYW5fZ2V0X3RhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBzaG9ydCAqdGFnKQoreworCWlmIChza2ItPmRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0hXX1ZMQU5fVFgpIHsKKwkJcmV0dXJuIF9fdmxhbl9od2FjY2VsX2dldF90YWcoc2tiLCB0YWcpOworCX0gZWxzZSB7CisJCXJldHVybiBfX3ZsYW5fZ2V0X3RhZyhza2IsIHRhZyk7CisJfQorfQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisvKiBWTEFOIElPQ1RMcyBhcmUgZm91bmQgaW4gc29ja2lvcy5oICovCisKKy8qIFBhc3NlZCBpbiB2bGFuX2lvY3RsX2FyZ3Mgc3RydWN0dXJlIHRvIGRldGVybWluZSBiZWhhdmlvdXIuICovCitlbnVtIHZsYW5faW9jdGxfY21kcyB7CisJQUREX1ZMQU5fQ01ELAorCURFTF9WTEFOX0NNRCwKKwlTRVRfVkxBTl9JTkdSRVNTX1BSSU9SSVRZX0NNRCwKKwlTRVRfVkxBTl9FR1JFU1NfUFJJT1JJVFlfQ01ELAorCUdFVF9WTEFOX0lOR1JFU1NfUFJJT1JJVFlfQ01ELAorCUdFVF9WTEFOX0VHUkVTU19QUklPUklUWV9DTUQsCisJU0VUX1ZMQU5fTkFNRV9UWVBFX0NNRCwKKwlTRVRfVkxBTl9GTEFHX0NNRCwKKwlHRVRfVkxBTl9SRUFMREVWX05BTUVfQ01ELCAvKiBJZiB0aGlzIHdvcmtzLCB5b3Uga25vdyBpdCdzIGEgVkxBTiBkZXZpY2UsIGJ0dyAqLworCUdFVF9WTEFOX1ZJRF9DTUQgLyogR2V0IHRoZSBWSUQgb2YgdGhpcyBWTEFOIChzcGVjaWZpZWQgYnkgbmFtZSkgKi8KK307CisKK2VudW0gdmxhbl9uYW1lX3R5cGVzIHsKKwlWTEFOX05BTUVfVFlQRV9QTFVTX1ZJRCwgLyogTmFtZSB3aWxsIGxvb2sgbGlrZTogIHZsYW4wMDA1ICovCisJVkxBTl9OQU1FX1RZUEVfUkFXX1BMVVNfVklELCAvKiBuYW1lIHdpbGwgbG9vayBsaWtlOiAgZXRoMS4wMDA1ICovCisJVkxBTl9OQU1FX1RZUEVfUExVU19WSURfTk9fUEFELCAvKiBOYW1lIHdpbGwgbG9vayBsaWtlOiAgdmxhbjUgKi8KKwlWTEFOX05BTUVfVFlQRV9SQVdfUExVU19WSURfTk9fUEFELCAvKiBOYW1lIHdpbGwgbG9vayBsaWtlOiAgZXRoMC41ICovCisJVkxBTl9OQU1FX1RZUEVfSElHSEVTVAorfTsKKworc3RydWN0IHZsYW5faW9jdGxfYXJncyB7CisJaW50IGNtZDsgLyogU2hvdWxkIGJlIG9uZSBvZiB0aGUgdmxhbl9pb2N0bF9jbWRzIGVudW0gYWJvdmUuICovCisJY2hhciBkZXZpY2UxWzI0XTsKKworICAgICAgICB1bmlvbiB7CisJCWNoYXIgZGV2aWNlMlsyNF07CisJCWludCBWSUQ7CisJCXVuc2lnbmVkIGludCBza2JfcHJpb3JpdHk7CisJCXVuc2lnbmVkIGludCBuYW1lX3R5cGU7CisJCXVuc2lnbmVkIGludCBiaW5kX3R5cGU7CisJCXVuc2lnbmVkIGludCBmbGFnOyAvKiBNYXRjaGVzIHZsYW5fZGV2X2luZm8gZmxhZ3MgKi8KKyAgICAgICAgfSB1OworCisJc2hvcnQgdmxhbl9xb3M7ICAgCit9OworCisjZW5kaWYgLyogIShfTElOVVhfSUZfVkxBTl9IXykgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWZfd2FucGlwZS5oIGIvaW5jbHVkZS9saW51eC9pZl93YW5waXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU5NGNhNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvaWZfd2FucGlwZS5oCkBAIC0wLDAgKzEsMTI0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogaWZfd2FucGlwZS5oCUhlYWRlciBmaWxlIGZvciB0aGUgU2FuZ29tYSBBRl9XQU5QSVBFIFNvY2tldCAJCisqCisqIEF1dGhvcjogCU5lbmFkIENvcmJpYyAJCisqCisqIENvcHlyaWdodDoJKGMpIDIwMDAgU2FuZ29tYSBUZWNobm9sb2dpZXMgSW5jLgorKgorKgkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKgkJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyoJCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorKgkJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKgorKiBKYW4gMjgsIDIwMDAJTmVuYWQgQ29yYmljIAlJbml0aWFsIFZlcnNpb24KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fTElOVVhfSUZfV0FOX1BBQ0tFVF9ICisjZGVmaW5lIF9fTElOVVhfSUZfV0FOX1BBQ0tFVF9ICisKK3N0cnVjdCB3YW5fc29ja2FkZHJfbGwKK3sKKwl1bnNpZ25lZCBzaG9ydAlzbGxfZmFtaWx5OworCXVuc2lnbmVkIHNob3J0CXNsbF9wcm90b2NvbDsKKwlpbnQJCXNsbF9pZmluZGV4OworCXVuc2lnbmVkIHNob3J0CXNsbF9oYXR5cGU7CisJdW5zaWduZWQgY2hhcglzbGxfcGt0dHlwZTsKKwl1bnNpZ25lZCBjaGFyCXNsbF9oYWxlbjsKKwl1bnNpZ25lZCBjaGFyCXNsbF9hZGRyWzhdOworCXVuc2lnbmVkIGNoYXIgICBzbGxfZGV2aWNlWzE0XTsKKwl1bnNpZ25lZCBjaGFyIAlzbGxfY2FyZFsxNF07Cit9OworCit0eXBlZGVmIHN0cnVjdCAKK3sKKwl1bnNpZ25lZCBjaGFyIGZyZWU7CisJdW5zaWduZWQgY2hhciBzdGF0ZV9zazsKKwlpbnQgcmN2YnVmOworCWludCBzbmRidWY7CisJaW50IHJtZW07CisJaW50IHdtZW07CisJaW50IHNrX2NvdW50OworCXVuc2lnbmVkIGNoYXIgYm91bmQ7CisJY2hhciBuYW1lWzE0XTsKKwl1bnNpZ25lZCBjaGFyIGRfc3RhdGU7CisJdW5zaWduZWQgY2hhciBzdmM7CisJdW5zaWduZWQgc2hvcnQgbGNuOworCXVuc2lnbmVkIGNoYXIgbWJveDsKKwl1bnNpZ25lZCBjaGFyIGNtZF9idXN5OworCXVuc2lnbmVkIGNoYXIgY29tbWFuZDsKKwl1bnNpZ25lZCBwb2xsOworCXVuc2lnbmVkIHBvbGxfY250OworCWludCByYmxvY2s7CQorfSB3YW5fZGVidWdfaGRyX3Q7CisKKyNkZWZpbmUgTUFYX05VTV9ERUJVRyAgMTAKKyNkZWZpbmUgWDI1X1BST1QgICAgICAgMHgxNgorI2RlZmluZSBQVkNfUFJPVCAgICAgICAweDE3CQorCit0eXBlZGVmIHN0cnVjdAoreworCXdhbl9kZWJ1Z19oZHJfdCBkZWJ1Z1tNQVhfTlVNX0RFQlVHXTsKK313YW5fZGVidWdfdDsKKworI2RlZmluZQlTSU9DX1dBTlBJUEVfR0VUX0NBTExfREFUQQkoU0lPQ1BST1RPUFJJVkFURSArIDApCisjZGVmaW5lCVNJT0NfV0FOUElQRV9TRVRfQ0FMTF9EQVRBCShTSU9DUFJPVE9QUklWQVRFICsgMSkKKyNkZWZpbmUgU0lPQ19XQU5QSVBFX0FDQ0VQVF9DQUxMCShTSU9DUFJPVE9QUklWQVRFICsgMikKKyNkZWZpbmUgU0lPQ19XQU5QSVBFX0NMRUFSX0NBTEwJICAgICAgICAoU0lPQ1BST1RPUFJJVkFURSArIDMpCisjZGVmaW5lIFNJT0NfV0FOUElQRV9SRVNFVF9DQUxMCSAgICAgICAgKFNJT0NQUk9UT1BSSVZBVEUgKyA0KQorI2RlZmluZSBTSU9DX1dBTlBJUEVfREVCVUcJICAgICAgICAoU0lPQ1BST1RPUFJJVkFURSArIDUpCisjZGVmaW5lIFNJT0NfV0FOUElQRV9TRVRfTk9OQkxPQ0sJKFNJT0NQUk9UT1BSSVZBVEUgKyA2KQorI2RlZmluZSBTSU9DX1dBTlBJUEVfQ0hFQ0tfVFgJCShTSU9DUFJPVE9QUklWQVRFICsgNykKKyNkZWZpbmUgU0lPQ19XQU5QSVBFX1NPQ0tfU1RBVEUJCShTSU9DUFJPVE9QUklWQVRFICsgOCkKKworLyogUGFja2V0IHR5cGVzICovCisKKyNkZWZpbmUgV0FOX1BBQ0tFVF9IT1NUCQkwCQkvKiBUbyB1cwkJKi8KKyNkZWZpbmUgV0FOX1BBQ0tFVF9CUk9BRENBU1QJMQkJLyogVG8gYWxsCQkqLworI2RlZmluZSBXQU5fUEFDS0VUX01VTFRJQ0FTVAkyCQkvKiBUbyBncm91cAkJKi8KKyNkZWZpbmUgV0FOX1BBQ0tFVF9PVEhFUkhPU1QJMwkJLyogVG8gc29tZW9uZSBlbHNlIAkqLworI2RlZmluZSBXQU5fUEFDS0VUX09VVEdPSU5HCQk0CQkvKiBPdXRnb2luZyBvZiBhbnkgdHlwZSAqLworLyogVGhlc2Ugb25lcyBhcmUgaW52aXNpYmxlIGJ5IHVzZXIgbGV2ZWwgKi8KKyNkZWZpbmUgV0FOX1BBQ0tFVF9MT09QQkFDSwkJNQkJLyogTUMvQlJEIGZyYW1lIGxvb3BlZCBiYWNrICovCisjZGVmaW5lIFdBTl9QQUNLRVRfRkFTVFJPVVRFCTYJCS8qIEZhc3Ryb3V0ZWQgZnJhbWUJKi8KKworCisvKiBYMjUgc3BlY2lmaWMgKi8KKyNkZWZpbmUgV0FOX1BBQ0tFVF9EQVRBIAk3CisjZGVmaW5lIFdBTl9QQUNLRVRfQ01EIAkJOAorI2RlZmluZSBXQU5fUEFDS0VUX0FTWU5DCTkKKyNkZWZpbmUgV0FOX1BBQ0tFVF9FUlIJICAgICAgIDEwCisKKy8qIFBhY2tldCBzb2NrZXQgb3B0aW9ucyAqLworCisjZGVmaW5lIFdBTl9QQUNLRVRfQUREX01FTUJFUlNISVAJCTEKKyNkZWZpbmUgV0FOX1BBQ0tFVF9EUk9QX01FTUJFUlNISVAJCTIKKworI2RlZmluZSBXQU5fUEFDS0VUX01SX01VTFRJQ0FTVAkwCisjZGVmaW5lIFdBTl9QQUNLRVRfTVJfUFJPTUlTQwkxCisjZGVmaW5lIFdBTl9QQUNLRVRfTVJfQUxMTVVMVEkJMgorCisjaWZkZWYgX19LRVJORUxfXworCisvKiBQcml2YXRlIHdhbnBpcGUgc29ja2V0IHN0cnVjdHVyZXMuICovCitzdHJ1Y3Qgd2FucGlwZV9vcHQKK3sKKwl2b2lkICAgKm1ib3g7CQkvKiBNYWlsIGJveCAgKi8KKwl2b2lkICAgKmNhcmQ7IAkJLyogQ2FyZCBib3VkZWQgdG8gKi8KKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwkvKiBCb3VuZGVkIGRldmljZSAqLworCXVuc2lnbmVkIHNob3J0IGxjbjsJLyogQmluZGVkIExDTiAqLworCXVuc2lnbmVkIGNoYXIgIHN2YzsJLyogMD1wdmMsIDE9c3ZjICovCisJdW5zaWduZWQgY2hhciAgdGltZXI7ICAgLyogZmxhZyBmb3IgZGVsYXllZCB0cmFuc21pdCovCQorCXN0cnVjdCB0aW1lcl9saXN0IHR4X3RpbWVyOworCXVuc2lnbmVkIHBvbGxfY250OworCXVuc2lnbmVkIGNoYXIgZm9yY2U7CS8qIFVzZWQgdG8gZm9yY2Ugc29jayByZWxlYXNlICovCisJYXRvbWljX3QgcGFja2V0X3NlbnQ7ICAgCisJdW5zaWduZWQgc2hvcnQgbnVtOyAKK307CisKKyNkZWZpbmUgd3Bfc2soX19zaykgKChzdHJ1Y3Qgd2FucGlwZV9vcHQgKikoX19zayktPnNrX3Byb3RpbmZvKQorCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lmX3dhbnBpcGVfY29tbW9uLmggYi9pbmNsdWRlL2xpbnV4L2lmX3dhbnBpcGVfY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI1ZmVjOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvaWZfd2FucGlwZV9jb21tb24uaApAQCAtMCwwICsxLDYwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogaWZfd2FuaXBlX2NvbW1vbi5oICAgU2FuZ29tYSBEcml2ZXIvU29ja2V0IGNvbW1vbiBhcmVhIGRlZmluaXRpb25zLgorKgorKiBBdXRob3I6ICAgICAgIE5lbmFkIENvcmJpYyA8bmNvcmJpY0BzYW5nb21hLmNvbT4KKyoKKyogQ29weXJpZ2h0OiAgICAoYykgMjAwMCBTYW5nb21hIFRlY2hub2xvZ2llcyBJbmMuCisqCisqICAgICAgICAgICAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKiAgICAgICAgICAgICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisqICAgICAgICAgICAgICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisqICAgICAgICAgICAgICAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKiBKYW4gMTMsIDIwMDAgIE5lbmFkIENvcmJpYyAgICAgIEluaXRpYWwgdmVyc2lvbgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfV0FOUElQRV9TT0NLX0RSSVZFUl9DT01NT05fSAorI2RlZmluZSBfV0FOUElQRV9TT0NLX0RSSVZFUl9DT01NT05fSAorCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorCit0eXBlZGVmIHN0cnVjdCB7CisJc3RydWN0IG5ldF9kZXZpY2UgKnNsYXZlOworCWF0b21pY190IHBhY2tldF9zZW50OworCWF0b21pY190IHJlY2VpdmVfYmxvY2s7CisJYXRvbWljX3QgY29tbWFuZDsKKwlhdG9taWNfdCBkaXNjb25uZWN0OworCWF0b21pY190IGRyaXZlcl9idXN5OworCWxvbmcgY29tbW9uX2NyaXRpY2FsOworCXN0cnVjdCB0aW1lcl9saXN0ICp0eF90aW1lcjsKKwlzdHJ1Y3Qgc29jayAqc2s7CQkvKiBXYW5waXBlIFNvY2sgYmluZCdzIGhlcmUgKi8gCisJaW50ICgqZnVuYykoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgCisJCSAgICBzdHJ1Y3Qgc29jayAqc2spOworCisJc3RydWN0IHdvcmtfc3RydWN0IHdhbnBpcGVfd29yazsgICAgLyogZGVmZXJyZWQga2V2ZW50ZCB3b3JrICovCisJdW5zaWduZWQgY2hhciByd19iaW5kOwkJCSAgLyogU29jayBiaW5kIHN0YXRlICovCisJdW5zaWduZWQgY2hhciB1c2VkYnk7CisJdW5zaWduZWQgY2hhciBzdGF0ZTsKKwl1bnNpZ25lZCBjaGFyIHN2YzsKKwl1bnNpZ25lZCBzaG9ydCBsY247CisJdm9pZCAqbWJveDsKK30gd2FucGlwZV9jb21tb25fdDsKKworCitlbnVtIHsKKwlXQU5TT0NLX1VOQ09ORklHVVJFRCwJLyogbGluay9jaGFubmVsIGlzIG5vdCBjb25maWd1cmVkICovCisJV0FOU09DS19ESVNDT05ORUNURUQsCS8qIGxpbmsvY2hhbm5lbCBpcyBkaXNjb25uZWN0ZWQgKi8KKwlXQU5TT0NLX0NPTk5FQ1RJTkcsCQkvKiBjb25uZWN0aW9uIGlzIGluIHByb2dyZXNzICovCisJV0FOU09DS19DT05ORUNURUQsCQkvKiBsaW5rL2NoYW5uZWwgaXMgb3BlcmF0aW9uYWwgKi8KKwlXQU5TT0NLX0xJTUlULAkJLyogZm9yIHZlcmlmaWNhdGlvbiBvbmx5ICovCisJV0FOU09DS19EVUFMUE9SVCwJCS8qIGZvciBEdWFsIFBvcnQgY2FyZHMgKi8KKwlXQU5TT0NLX0RJU0NPTk5FQ1RJTkcsCisJV0FOU09DS19CSU5ERUQsCisJV0FOU09DS19CSU5EX0xJU1RFTiwKKwlXQU5TT0NLX0xJU1RFTgorfTsKKworI2VuZGlmCisKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZ21wLmggYi9pbmNsdWRlL2xpbnV4L2lnbXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTBlNzYwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9pZ21wLmgKQEAgLTAsMCArMSwyMTkgQEAKKy8qCisgKglMaW51eCBORVQzOglJbnRlcm5ldCBHcm91cCBNYW5hZ2VtZW50IFByb3RvY29sICBbSUdNUF0KKyAqCisgKglBdXRob3JzOgorICoJCUFsYW4gQ294IDxBbGFuLkNveEBsaW51eC5vcmc+CisgKgorICoJRXh0ZW5kZWQgdG8gdGFsayB0aGUgQlNEIGV4dGVuZGVkIElHTVAgcHJvdG9jb2wgb2YgbXJvdXRlZCAzLjYKKyAqCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICoJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9MSU5VWF9JR01QX0gKKyNkZWZpbmUgX0xJTlVYX0lHTVBfSAorCisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorCisvKgorICoJSUdNUCBwcm90b2NvbCBzdHJ1Y3R1cmVzCisgKi8KKworLyoKKyAqCUhlYWRlciBpbiBvbiBjYWJsZSBmb3JtYXQKKyAqLworCitzdHJ1Y3QgaWdtcGhkcgoreworCV9fdTggdHlwZTsKKwlfX3U4IGNvZGU7CQkvKiBGb3IgbmV3ZXIgSUdNUCAqLworCV9fdTE2IGNzdW07CisJX191MzIgZ3JvdXA7Cit9OworCisvKiBWMyBncm91cCByZWNvcmQgdHlwZXMgW2dyZWNfdHlwZV0gKi8KKyNkZWZpbmUgSUdNUFYzX01PREVfSVNfSU5DTFVERQkJMQorI2RlZmluZSBJR01QVjNfTU9ERV9JU19FWENMVURFCQkyCisjZGVmaW5lIElHTVBWM19DSEFOR0VfVE9fSU5DTFVERQkzCisjZGVmaW5lIElHTVBWM19DSEFOR0VfVE9fRVhDTFVERQk0CisjZGVmaW5lIElHTVBWM19BTExPV19ORVdfU09VUkNFUwk1CisjZGVmaW5lIElHTVBWM19CTE9DS19PTERfU09VUkNFUwk2CisKK3N0cnVjdCBpZ21wdjNfZ3JlYyB7CisJX191OAlncmVjX3R5cGU7CisJX191OAlncmVjX2F1eHdvcmRzOworCV9fdTE2CWdyZWNfbnNyY3M7CisJX191MzIJZ3JlY19tY2E7CisJX191MzIJZ3JlY19zcmNbMF07Cit9OworCitzdHJ1Y3QgaWdtcHYzX3JlcG9ydCB7CisJX191OCB0eXBlOworCV9fdTggcmVzdjE7CisJX191MTYgY3N1bTsKKwlfX3UxNiByZXN2MjsKKwlfX3UxNiBuZ3JlYzsKKwlzdHJ1Y3QgaWdtcHYzX2dyZWMgZ3JlY1swXTsKK307CisKK3N0cnVjdCBpZ21wdjNfcXVlcnkgeworCV9fdTggdHlwZTsKKwlfX3U4IGNvZGU7CisJX191MTYgY3N1bTsKKwlfX3UzMiBncm91cDsKKyNpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTl9CSVRGSUVMRCkKKwlfX3U4IHFydjozLAorCSAgICAgc3VwcHJlc3M6MSwKKwkgICAgIHJlc3Y6NDsKKyNlbGlmIGRlZmluZWQoX19CSUdfRU5ESUFOX0JJVEZJRUxEKQorCV9fdTggcmVzdjo0LAorCSAgICAgc3VwcHJlc3M6MSwKKwkgICAgIHFydjozOworI2Vsc2UKKyNlcnJvciAiUGxlYXNlIGZpeCA8YXNtL2J5dGVvcmRlci5oPiIKKyNlbmRpZgorCV9fdTggcXFpYzsKKwlfX3UxNiBuc3JjczsKKwlfX3UzMiBzcmNzWzBdOworfTsKKworI2RlZmluZSBJR01QX0hPU1RfTUVNQkVSU0hJUF9RVUVSWQkweDExCS8qIEZyb20gUkZDMTExMiAqLworI2RlZmluZSBJR01QX0hPU1RfTUVNQkVSU0hJUF9SRVBPUlQJMHgxMgkvKiBEaXR0byAqLworI2RlZmluZSBJR01QX0RWTVJQCQkJMHgxMwkvKiBEVk1SUCByb3V0aW5nICovCisjZGVmaW5lIElHTVBfUElNCQkJMHgxNAkvKiBQSU0gcm91dGluZyAqLworI2RlZmluZSBJR01QX1RSQUNFCQkJMHgxNQorI2RlZmluZSBJR01QVjJfSE9TVF9NRU1CRVJTSElQX1JFUE9SVAkweDE2CS8qIFYyIHZlcnNpb24gb2YgMHgxMSAqLworI2RlZmluZSBJR01QX0hPU1RfTEVBVkVfTUVTU0FHRSAJMHgxNworI2RlZmluZSBJR01QVjNfSE9TVF9NRU1CRVJTSElQX1JFUE9SVAkweDIyCS8qIFYzIHZlcnNpb24gb2YgMHgxMSAqLworCisjZGVmaW5lIElHTVBfTVRSQUNFX1JFU1AJCTB4MWUKKyNkZWZpbmUgSUdNUF9NVFJBQ0UJCQkweDFmCisKKworLyoKKyAqCVVzZSB0aGUgQlNEIG5hbWVzIGZvciB0aGVzZSBmb3IgY29tcGF0aWJpbGl0eQorICovCisKKyNkZWZpbmUgSUdNUF9ERUxBWUlOR19NRU1CRVIJCTB4MDEKKyNkZWZpbmUgSUdNUF9JRExFX01FTUJFUgkJMHgwMgorI2RlZmluZSBJR01QX0xBWllfTUVNQkVSCQkweDAzCisjZGVmaW5lIElHTVBfU0xFRVBJTkdfTUVNQkVSCQkweDA0CisjZGVmaW5lIElHTVBfQVdBS0VOSU5HX01FTUJFUgkJMHgwNQorCisjZGVmaW5lIElHTVBfTUlOTEVOCQkJOAorCisjZGVmaW5lIElHTVBfTUFYX0hPU1RfUkVQT1JUX0RFTEFZCTEwCS8qIG1heCBkZWxheSBmb3IgcmVzcG9uc2UgdG8gKi8KKwkJCQkJCS8qIHF1ZXJ5IChpbiBzZWNvbmRzKQkqLworCisjZGVmaW5lIElHTVBfVElNRVJfU0NBTEUJCTEwCS8qIGRlbm90ZXMgdGhhdCB0aGUgaWdtcGhkci0+dGltZXIgZmllbGQgKi8KKwkJCQkJCS8qIHNwZWNpZmllcyB0aW1lIGluIDEwdGggb2Ygc2Vjb25kcwkgKi8KKworI2RlZmluZSBJR01QX0FHRV9USFJFU0hPTEQJCTQwMAkvKiBJZiB0aGlzIGhvc3QgZG9uJ3QgaGVhciBhbnkgSUdNUCBWMQkqLworCQkJCQkJLyogbWVzc2FnZSBpbiB0aGlzIHBlcmlvZCBvZiB0aW1lLAkqLworCQkJCQkJLyogcmV2ZXJ0IHRvIElHTVAgdjIgcm91dGVyLgkJKi8KKworI2RlZmluZSBJR01QX0FMTF9IT1NUUwkJaHRvbmwoMHhFMDAwMDAwMUwpCisjZGVmaW5lIElHTVBfQUxMX1JPVVRFUiAJaHRvbmwoMHhFMDAwMDAwMkwpCisjZGVmaW5lIElHTVBWM19BTExfTUNSCSAJaHRvbmwoMHhFMDAwMDAxNkwpCisjZGVmaW5lIElHTVBfTE9DQUxfR1JPVVAJaHRvbmwoMHhFMDAwMDAwMEwpCisjZGVmaW5lIElHTVBfTE9DQUxfR1JPVVBfTUFTSwlodG9ubCgweEZGRkZGRjAwTCkKKworLyoKKyAqIHN0cnVjdCBmb3Iga2VlcGluZyB0aGUgbXVsdGljYXN0IGxpc3QgaW4KKyAqLworCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisKK3N0cnVjdCBpcF9zZl9zb2NrbGlzdAoreworCXVuc2lnbmVkIGludAkJc2xfbWF4OworCXVuc2lnbmVkIGludAkJc2xfY291bnQ7CisJX191MzIJCQlzbF9hZGRyWzBdOworfTsKKworI2RlZmluZSBJUF9TRkxTSVpFKGNvdW50KQkoc2l6ZW9mKHN0cnVjdCBpcF9zZl9zb2NrbGlzdCkgKyBcCisJKGNvdW50KSAqIHNpemVvZihfX3UzMikpCisKKyNkZWZpbmUgSVBfU0ZCTE9DSwkxMAkvKiBhbGxvY2F0ZSB0aGlzIG1hbnkgYXQgb25jZSAqLworCisvKiBpcF9tY19zb2NrbGlzdCBpcyByZWFsIGxpc3Qgbm93LiBTcGVlZCBpcyBub3QgYXJndW1lbnQ7CisgICB0aGlzIGxpc3QgbmV2ZXIgdXNlZCBpbiBmYXN0IHBhdGggY29kZQorICovCisKK3N0cnVjdCBpcF9tY19zb2NrbGlzdAoreworCXN0cnVjdCBpcF9tY19zb2NrbGlzdAkqbmV4dDsKKwlpbnQJCQljb3VudDsKKwlzdHJ1Y3QgaXBfbXJlcW4JCW11bHRpOworCXVuc2lnbmVkIGludAkJc2Ztb2RlOwkJLyogTUNBU1Rfe0lOQ0xVREUsRVhDTFVERX0gKi8KKwlzdHJ1Y3QgaXBfc2Zfc29ja2xpc3QJKnNmbGlzdDsKK307CisKK3N0cnVjdCBpcF9zZl9saXN0Cit7CisJc3RydWN0IGlwX3NmX2xpc3QJKnNmX25leHQ7CisJX191MzIJCQlzZl9pbmFkZHI7CisJdW5zaWduZWQgbG9uZwkJc2ZfY291bnRbMl07CS8qIGluY2x1ZGUvZXhjbHVkZSBjb3VudHMgKi8KKwl1bnNpZ25lZCBjaGFyCQlzZl9nc3Jlc3A7CS8qIGluY2x1ZGUgaW4gZyAmIHMgcmVzcG9uc2U/ICovCisJdW5zaWduZWQgY2hhcgkJc2Zfb2xkaW47CS8qIGNoYW5nZSBzdGF0ZSAqLworCXVuc2lnbmVkIGNoYXIJCXNmX2NyY291bnQ7CS8qIHJldHJhbnMuIGxlZnQgdG8gc2VuZCAqLworfTsKKworc3RydWN0IGlwX21jX2xpc3QKK3sKKwlzdHJ1Y3QgaW5fZGV2aWNlCSppbnRlcmZhY2U7CisJdW5zaWduZWQgbG9uZwkJbXVsdGlhZGRyOworCXN0cnVjdCBpcF9zZl9saXN0CSpzb3VyY2VzOworCXN0cnVjdCBpcF9zZl9saXN0CSp0b21iOworCXVuc2lnbmVkIGludAkJc2Ztb2RlOworCXVuc2lnbmVkIGxvbmcJCXNmY291bnRbMl07CisJc3RydWN0IGlwX21jX2xpc3QJKm5leHQ7CisJc3RydWN0IHRpbWVyX2xpc3QJdGltZXI7CisJaW50CQkJdXNlcnM7CisJYXRvbWljX3QJCXJlZmNudDsKKwlzcGlubG9ja190CQlsb2NrOworCWNoYXIJCQl0bV9ydW5uaW5nOworCWNoYXIJCQlyZXBvcnRlcjsKKwljaGFyCQkJdW5zb2xpY2l0X2NvdW50OworCWNoYXIJCQlsb2FkZWQ7CisJdW5zaWduZWQgY2hhcgkJZ3NxdWVyeTsJLyogY2hlY2sgc291cmNlIG1hcmtzPyAqLworCXVuc2lnbmVkIGNoYXIJCWNyY291bnQ7Cit9OworCisvKiBWMyBleHBvbmVudGlhbCBmaWVsZCBkZWNvZGluZyAqLworI2RlZmluZSBJR01QVjNfTUFTSyh2YWx1ZSwgbmIpICgobmIpPj0zMiA/ICh2YWx1ZSkgOiAoKDE8PChuYikpLTEpICYgKHZhbHVlKSkKKyNkZWZpbmUgSUdNUFYzX0VYUCh0aHJlc2gsIG5ibWFudCwgbmJleHAsIHZhbHVlKSBcCisJKCh2YWx1ZSkgPCAodGhyZXNoKSA/ICh2YWx1ZSkgOiBcCisgICAgICAgICgoSUdNUFYzX01BU0sodmFsdWUsIG5ibWFudCkgfCAoMTw8KG5ibWFudCtuYmV4cCkpKSA8PCBcCisgICAgICAgICAoSUdNUFYzX01BU0soKHZhbHVlKSA+PiAobmJtYW50KSwgbmJleHApICsgKG5iZXhwKSkpKQorCisjZGVmaW5lIElHTVBWM19RUUlDKHZhbHVlKSBJR01QVjNfRVhQKDB4ODAsIDQsIDMsIHZhbHVlKQorI2RlZmluZSBJR01QVjNfTVJDKHZhbHVlKSBJR01QVjNfRVhQKDB4ODAsIDQsIDMsIHZhbHVlKQorCitleHRlcm4gaW50IGlwX2NoZWNrX21jKHN0cnVjdCBpbl9kZXZpY2UgKmRldiwgdTMyIG1jX2FkZHIsIHUzMiBzcmNfYWRkciwgdTE2IHByb3RvKTsKK2V4dGVybiBpbnQgaWdtcF9yY3Yoc3RydWN0IHNrX2J1ZmYgKik7CitleHRlcm4gaW50IGlwX21jX2pvaW5fZ3JvdXAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXBfbXJlcW4gKmltcik7CitleHRlcm4gaW50IGlwX21jX2xlYXZlX2dyb3VwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21yZXFuICppbXIpOworZXh0ZXJuIHZvaWQgaXBfbWNfZHJvcF9zb2NrZXQoc3RydWN0IHNvY2sgKnNrKTsKK2V4dGVybiBpbnQgaXBfbWNfc291cmNlKGludCBhZGQsIGludCBvbW9kZSwgc3RydWN0IHNvY2sgKnNrLAorCQlzdHJ1Y3QgaXBfbXJlcV9zb3VyY2UgKm1yZXFzLCBpbnQgaWZpbmRleCk7CitleHRlcm4gaW50IGlwX21jX21zZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21zZmlsdGVyICptc2YsaW50IGlmaW5kZXgpOworZXh0ZXJuIGludCBpcF9tY19tc2ZnZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXBfbXNmaWx0ZXIgKm1zZiwKKwkJc3RydWN0IGlwX21zZmlsdGVyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pOworZXh0ZXJuIGludCBpcF9tY19nc2ZnZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZ3JvdXBfZmlsdGVyICpnc2YsCisJCXN0cnVjdCBncm91cF9maWx0ZXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbik7CitleHRlcm4gaW50IGlwX21jX3NmX2FsbG93KHN0cnVjdCBzb2NrICpzaywgdTMyIGxvY2FsLCB1MzIgcm10LCBpbnQgZGlmKTsKK2V4dGVybiB2b2lkIGlwX21yX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBpcF9tY19pbml0X2RldihzdHJ1Y3QgaW5fZGV2aWNlICopOworZXh0ZXJuIHZvaWQgaXBfbWNfZGVzdHJveV9kZXYoc3RydWN0IGluX2RldmljZSAqKTsKK2V4dGVybiB2b2lkIGlwX21jX3VwKHN0cnVjdCBpbl9kZXZpY2UgKik7CitleHRlcm4gdm9pZCBpcF9tY19kb3duKHN0cnVjdCBpbl9kZXZpY2UgKik7CitleHRlcm4gdm9pZCBpcF9tY19kZWNfZ3JvdXAoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LCB1MzIgYWRkcik7CitleHRlcm4gdm9pZCBpcF9tY19pbmNfZ3JvdXAoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LCB1MzIgYWRkcik7CisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbi5oIGIvaW5jbHVkZS9saW51eC9pbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiODhjNjYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2luLmgKQEAgLTAsMCArMSwyNTMgQEAKKy8qCisgKiBJTkVUCQlBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgVENQL0lQIHByb3RvY29sIHN1aXRlIGZvciB0aGUgTElOVVgKKyAqCQlvcGVyYXRpbmcgc3lzdGVtLiAgSU5FVCBpcyBpbXBsZW1lbnRlZCB1c2luZyB0aGUgIEJTRCBTb2NrZXQKKyAqCQlpbnRlcmZhY2UgYXMgdGhlIG1lYW5zIG9mIGNvbW11bmljYXRpb24gd2l0aCB0aGUgdXNlciBsZXZlbC4KKyAqCisgKgkJRGVmaW5pdGlvbnMgb2YgdGhlIEludGVybmV0IFByb3RvY29sLgorICoKKyAqIFZlcnNpb246CUAoIylpbi5oCTEuMC4xCTA0LzIxLzkzCisgKgorICogQXV0aG9yczoJT3JpZ2luYWwgdGFrZW4gZnJvbSB0aGUgR05VIFByb2plY3QgPG5ldGluZXQvaW4uaD4gZmlsZS4KKyAqCQlGcmVkIE4uIHZhbiBLZW1wZW4sIDx3YWx0amVAdVdhbHQuTkwuTXVnbmV0Lk9SRz4KKyAqCisgKgkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKgkJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKgkJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2lmbmRlZiBfTElOVVhfSU5fSAorI2RlZmluZSBfTElOVVhfSU5fSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KKworLyogU3RhbmRhcmQgd2VsbC1kZWZpbmVkIElQIHByb3RvY29scy4gICovCitlbnVtIHsKKyAgSVBQUk9UT19JUCA9IDAsCQkvKiBEdW1teSBwcm90b2NvbCBmb3IgVENQCQkqLworICBJUFBST1RPX0lDTVAgPSAxLAkJLyogSW50ZXJuZXQgQ29udHJvbCBNZXNzYWdlIFByb3RvY29sCSovCisgIElQUFJPVE9fSUdNUCA9IDIsCQkvKiBJbnRlcm5ldCBHcm91cCBNYW5hZ2VtZW50IFByb3RvY29sCSovCisgIElQUFJPVE9fSVBJUCA9IDQsCQkvKiBJUElQIHR1bm5lbHMgKG9sZGVyIEtBOVEgdHVubmVscyB1c2UgOTQpICovCisgIElQUFJPVE9fVENQID0gNiwJCS8qIFRyYW5zbWlzc2lvbiBDb250cm9sIFByb3RvY29sCSovCisgIElQUFJPVE9fRUdQID0gOCwJCS8qIEV4dGVyaW9yIEdhdGV3YXkgUHJvdG9jb2wJCSovCisgIElQUFJPVE9fUFVQID0gMTIsCQkvKiBQVVAgcHJvdG9jb2wJCQkJKi8KKyAgSVBQUk9UT19VRFAgPSAxNywJCS8qIFVzZXIgRGF0YWdyYW0gUHJvdG9jb2wJCSovCisgIElQUFJPVE9fSURQID0gMjIsCQkvKiBYTlMgSURQIHByb3RvY29sCQkJKi8KKyAgSVBQUk9UT19SU1ZQID0gNDYsCQkvKiBSU1ZQIHByb3RvY29sCQkJKi8KKyAgSVBQUk9UT19HUkUgPSA0NywJCS8qIENpc2NvIEdSRSB0dW5uZWxzIChyZmMgMTcwMSwxNzAyKQkqLworCisgIElQUFJPVE9fSVBWNgkgPSA0MSwJCS8qIElQdjYtaW4tSVB2NCB0dW5uZWxsaW5nCQkqLworCisgIElQUFJPVE9fRVNQID0gNTAsICAgICAgICAgICAgLyogRW5jYXBzdWxhdGlvbiBTZWN1cml0eSBQYXlsb2FkIHByb3RvY29sICovCisgIElQUFJPVE9fQUggPSA1MSwgICAgICAgICAgICAgLyogQXV0aGVudGljYXRpb24gSGVhZGVyIHByb3RvY29sICAgICAgICovCisgIElQUFJPVE9fUElNICAgID0gMTAzLAkJLyogUHJvdG9jb2wgSW5kZXBlbmRlbnQgTXVsdGljYXN0CSovCisKKyAgSVBQUk9UT19DT01QICAgPSAxMDgsICAgICAgICAgICAgICAgIC8qIENvbXByZXNzaW9uIEhlYWRlciBwcm90b2NvbCAqLworICBJUFBST1RPX1NDVFAgICA9IDEzMiwJCS8qIFN0cmVhbSBDb250cm9sIFRyYW5zcG9ydCBQcm90b2NvbAkqLworCisgIElQUFJPVE9fUkFXCSA9IDI1NSwJCS8qIFJhdyBJUCBwYWNrZXRzCQkJKi8KKyAgSVBQUk9UT19NQVgKK307CisKKworLyogSW50ZXJuZXQgYWRkcmVzcy4gKi8KK3N0cnVjdCBpbl9hZGRyIHsKKwlfX3UzMglzX2FkZHI7Cit9OworCisjZGVmaW5lIElQX1RPUwkJMQorI2RlZmluZSBJUF9UVEwJCTIKKyNkZWZpbmUgSVBfSERSSU5DTAkzCisjZGVmaW5lIElQX09QVElPTlMJNAorI2RlZmluZSBJUF9ST1VURVJfQUxFUlQJNQorI2RlZmluZSBJUF9SRUNWT1BUUwk2CisjZGVmaW5lIElQX1JFVE9QVFMJNworI2RlZmluZSBJUF9QS1RJTkZPCTgKKyNkZWZpbmUgSVBfUEtUT1BUSU9OUwk5CisjZGVmaW5lIElQX01UVV9ESVNDT1ZFUgkxMAorI2RlZmluZSBJUF9SRUNWRVJSCTExCisjZGVmaW5lIElQX1JFQ1ZUVEwJMTIKKyNkZWZpbmUJSVBfUkVDVlRPUwkxMworI2RlZmluZSBJUF9NVFUJCTE0CisjZGVmaW5lIElQX0ZSRUVCSU5ECTE1CisjZGVmaW5lIElQX0lQU0VDX1BPTElDWQkxNgorI2RlZmluZSBJUF9YRlJNX1BPTElDWQkxNworCisvKiBCU0QgY29tcGF0aWJpbGl0eSAqLworI2RlZmluZSBJUF9SRUNWUkVUT1BUUwlJUF9SRVRPUFRTCisKKy8qIElQX01UVV9ESVNDT1ZFUiB2YWx1ZXMgKi8KKyNkZWZpbmUgSVBfUE1UVURJU0NfRE9OVAkJMAkvKiBOZXZlciBzZW5kIERGIGZyYW1lcyAqLworI2RlZmluZSBJUF9QTVRVRElTQ19XQU5UCQkxCS8qIFVzZSBwZXIgcm91dGUgaGludHMJKi8KKyNkZWZpbmUgSVBfUE1UVURJU0NfRE8JCQkyCS8qIEFsd2F5cyBERgkJKi8KKworI2RlZmluZSBJUF9NVUxUSUNBU1RfSUYJCQkzMgorI2RlZmluZSBJUF9NVUxUSUNBU1RfVFRMIAkJMzMKKyNkZWZpbmUgSVBfTVVMVElDQVNUX0xPT1AgCQkzNAorI2RlZmluZSBJUF9BRERfTUVNQkVSU0hJUAkJMzUKKyNkZWZpbmUgSVBfRFJPUF9NRU1CRVJTSElQCQkzNgorI2RlZmluZSBJUF9VTkJMT0NLX1NPVVJDRQkJMzcKKyNkZWZpbmUgSVBfQkxPQ0tfU09VUkNFCQkJMzgKKyNkZWZpbmUgSVBfQUREX1NPVVJDRV9NRU1CRVJTSElQCTM5CisjZGVmaW5lIElQX0RST1BfU09VUkNFX01FTUJFUlNISVAJNDAKKyNkZWZpbmUgSVBfTVNGSUxURVIJCQk0MQorI2RlZmluZSBNQ0FTVF9KT0lOX0dST1VQCQk0MgorI2RlZmluZSBNQ0FTVF9CTE9DS19TT1VSQ0UJCTQzCisjZGVmaW5lIE1DQVNUX1VOQkxPQ0tfU09VUkNFCQk0NAorI2RlZmluZSBNQ0FTVF9MRUFWRV9HUk9VUAkJNDUKKyNkZWZpbmUgTUNBU1RfSk9JTl9TT1VSQ0VfR1JPVVAJCTQ2CisjZGVmaW5lIE1DQVNUX0xFQVZFX1NPVVJDRV9HUk9VUAk0NworI2RlZmluZSBNQ0FTVF9NU0ZJTFRFUgkJCTQ4CisKKyNkZWZpbmUgTUNBU1RfRVhDTFVERQkwCisjZGVmaW5lIE1DQVNUX0lOQ0xVREUJMQorCisvKiBUaGVzZSBuZWVkIHRvIGFwcGVhciBzb21ld2hlcmUgYXJvdW5kIGhlcmUgKi8KKyNkZWZpbmUgSVBfREVGQVVMVF9NVUxUSUNBU1RfVFRMICAgICAgICAxCisjZGVmaW5lIElQX0RFRkFVTFRfTVVMVElDQVNUX0xPT1AgICAgICAgMQorCisvKiBSZXF1ZXN0IHN0cnVjdCBmb3IgbXVsdGljYXN0IHNvY2tldCBvcHMgKi8KKworc3RydWN0IGlwX21yZXEgCit7CisJc3RydWN0IGluX2FkZHIgaW1yX211bHRpYWRkcjsJLyogSVAgbXVsdGljYXN0IGFkZHJlc3Mgb2YgZ3JvdXAgKi8KKwlzdHJ1Y3QgaW5fYWRkciBpbXJfaW50ZXJmYWNlOwkvKiBsb2NhbCBJUCBhZGRyZXNzIG9mIGludGVyZmFjZSAqLworfTsKKworc3RydWN0IGlwX21yZXFuCit7CisJc3RydWN0IGluX2FkZHIJaW1yX211bHRpYWRkcjsJCS8qIElQIG11bHRpY2FzdCBhZGRyZXNzIG9mIGdyb3VwICovCisJc3RydWN0IGluX2FkZHIJaW1yX2FkZHJlc3M7CQkvKiBsb2NhbCBJUCBhZGRyZXNzIG9mIGludGVyZmFjZSAqLworCWludAkJaW1yX2lmaW5kZXg7CQkvKiBJbnRlcmZhY2UgaW5kZXggKi8KK307CisKK3N0cnVjdCBpcF9tcmVxX3NvdXJjZSB7CisJX191MzIJCWltcl9tdWx0aWFkZHI7CisJX191MzIJCWltcl9pbnRlcmZhY2U7CisJX191MzIJCWltcl9zb3VyY2VhZGRyOworfTsKKworc3RydWN0IGlwX21zZmlsdGVyIHsKKwlfX3UzMgkJaW1zZl9tdWx0aWFkZHI7CisJX191MzIJCWltc2ZfaW50ZXJmYWNlOworCV9fdTMyCQlpbXNmX2Ztb2RlOworCV9fdTMyCQlpbXNmX251bXNyYzsKKwlfX3UzMgkJaW1zZl9zbGlzdFsxXTsKK307CisKKyNkZWZpbmUgSVBfTVNGSUxURVJfU0laRShudW1zcmMpIFwKKwkoc2l6ZW9mKHN0cnVjdCBpcF9tc2ZpbHRlcikgLSBzaXplb2YoX191MzIpIFwKKwkrIChudW1zcmMpICogc2l6ZW9mKF9fdTMyKSkKKworc3RydWN0IGdyb3VwX3JlcQoreworCV9fdTMyCQkJCSBncl9pbnRlcmZhY2U7CS8qIGludGVyZmFjZSBpbmRleCAqLworCXN0cnVjdCBfX2tlcm5lbF9zb2NrYWRkcl9zdG9yYWdlIGdyX2dyb3VwOwkvKiBncm91cCBhZGRyZXNzICovCit9OworCitzdHJ1Y3QgZ3JvdXBfc291cmNlX3JlcQoreworCV9fdTMyCQkJCSBnc3JfaW50ZXJmYWNlOwkvKiBpbnRlcmZhY2UgaW5kZXggKi8KKwlzdHJ1Y3QgX19rZXJuZWxfc29ja2FkZHJfc3RvcmFnZSBnc3JfZ3JvdXA7CS8qIGdyb3VwIGFkZHJlc3MgKi8KKwlzdHJ1Y3QgX19rZXJuZWxfc29ja2FkZHJfc3RvcmFnZSBnc3Jfc291cmNlOwkvKiBzb3VyY2UgYWRkcmVzcyAqLworfTsKKworc3RydWN0IGdyb3VwX2ZpbHRlcgoreworCV9fdTMyCQkJCSBnZl9pbnRlcmZhY2U7CS8qIGludGVyZmFjZSBpbmRleCAqLworCXN0cnVjdCBfX2tlcm5lbF9zb2NrYWRkcl9zdG9yYWdlIGdmX2dyb3VwOwkvKiBtdWx0aWNhc3QgYWRkcmVzcyAqLworCV9fdTMyCQkJCSBnZl9mbW9kZTsJLyogZmlsdGVyIG1vZGUgKi8KKwlfX3UzMgkJCQkgZ2ZfbnVtc3JjOwkvKiBudW1iZXIgb2Ygc291cmNlcyAqLworCXN0cnVjdCBfX2tlcm5lbF9zb2NrYWRkcl9zdG9yYWdlIGdmX3NsaXN0WzFdOwkvKiBpbnRlcmZhY2UgaW5kZXggKi8KK307CisKKyNkZWZpbmUgR1JPVVBfRklMVEVSX1NJWkUobnVtc3JjKSBcCisJKHNpemVvZihzdHJ1Y3QgZ3JvdXBfZmlsdGVyKSAtIHNpemVvZihzdHJ1Y3QgX19rZXJuZWxfc29ja2FkZHJfc3RvcmFnZSkgXAorCSsgKG51bXNyYykgKiBzaXplb2Yoc3RydWN0IF9fa2VybmVsX3NvY2thZGRyX3N0b3JhZ2UpKQorCitzdHJ1Y3QgaW5fcGt0aW5mbworeworCWludAkJaXBpX2lmaW5kZXg7CisJc3RydWN0IGluX2FkZHIJaXBpX3NwZWNfZHN0OworCXN0cnVjdCBpbl9hZGRyCWlwaV9hZGRyOworfTsKKworLyogU3RydWN0dXJlIGRlc2NyaWJpbmcgYW4gSW50ZXJuZXQgKElQKSBzb2NrZXQgYWRkcmVzcy4gKi8KKyNkZWZpbmUgX19TT0NLX1NJWkVfXwkxNgkJLyogc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikJKi8KK3N0cnVjdCBzb2NrYWRkcl9pbiB7CisgIHNhX2ZhbWlseV90CQlzaW5fZmFtaWx5OwkvKiBBZGRyZXNzIGZhbWlseQkJKi8KKyAgdW5zaWduZWQgc2hvcnQgaW50CXNpbl9wb3J0OwkvKiBQb3J0IG51bWJlcgkJCSovCisgIHN0cnVjdCBpbl9hZGRyCXNpbl9hZGRyOwkvKiBJbnRlcm5ldCBhZGRyZXNzCQkqLworCisgIC8qIFBhZCB0byBzaXplIG9mIGBzdHJ1Y3Qgc29ja2FkZHInLiAqLworICB1bnNpZ25lZCBjaGFyCQlfX3BhZFtfX1NPQ0tfU0laRV9fIC0gc2l6ZW9mKHNob3J0IGludCkgLQorCQkJc2l6ZW9mKHVuc2lnbmVkIHNob3J0IGludCkgLSBzaXplb2Yoc3RydWN0IGluX2FkZHIpXTsKK307CisjZGVmaW5lIHNpbl96ZXJvCV9fcGFkCQkvKiBmb3IgQlNEIFVOSVggY29tcC4gLUZ2SwkqLworCisKKy8qCisgKiBEZWZpbml0aW9ucyBvZiB0aGUgYml0cyBpbiBhbiBJbnRlcm5ldCBhZGRyZXNzIGludGVnZXIuCisgKiBPbiBzdWJuZXRzLCBob3N0IGFuZCBuZXR3b3JrIHBhcnRzIGFyZSBmb3VuZCBhY2NvcmRpbmcKKyAqIHRvIHRoZSBzdWJuZXQgbWFzaywgbm90IHRoZXNlIG1hc2tzLgorICovCisjZGVmaW5lCUlOX0NMQVNTQShhKQkJKCgoKGxvbmcgaW50KSAoYSkpICYgMHg4MDAwMDAwMCkgPT0gMCkKKyNkZWZpbmUJSU5fQ0xBU1NBX05FVAkJMHhmZjAwMDAwMAorI2RlZmluZQlJTl9DTEFTU0FfTlNISUZUCTI0CisjZGVmaW5lCUlOX0NMQVNTQV9IT1NUCQkoMHhmZmZmZmZmZiAmIH5JTl9DTEFTU0FfTkVUKQorI2RlZmluZQlJTl9DTEFTU0FfTUFYCQkxMjgKKworI2RlZmluZQlJTl9DTEFTU0IoYSkJCSgoKChsb25nIGludCkgKGEpKSAmIDB4YzAwMDAwMDApID09IDB4ODAwMDAwMDApCisjZGVmaW5lCUlOX0NMQVNTQl9ORVQJCTB4ZmZmZjAwMDAKKyNkZWZpbmUJSU5fQ0xBU1NCX05TSElGVAkxNgorI2RlZmluZQlJTl9DTEFTU0JfSE9TVAkJKDB4ZmZmZmZmZmYgJiB+SU5fQ0xBU1NCX05FVCkKKyNkZWZpbmUJSU5fQ0xBU1NCX01BWAkJNjU1MzYKKworI2RlZmluZQlJTl9DTEFTU0MoYSkJCSgoKChsb25nIGludCkgKGEpKSAmIDB4ZTAwMDAwMDApID09IDB4YzAwMDAwMDApCisjZGVmaW5lCUlOX0NMQVNTQ19ORVQJCTB4ZmZmZmZmMDAKKyNkZWZpbmUJSU5fQ0xBU1NDX05TSElGVAk4CisjZGVmaW5lCUlOX0NMQVNTQ19IT1NUCQkoMHhmZmZmZmZmZiAmIH5JTl9DTEFTU0NfTkVUKQorCisjZGVmaW5lCUlOX0NMQVNTRChhKQkJKCgoKGxvbmcgaW50KSAoYSkpICYgMHhmMDAwMDAwMCkgPT0gMHhlMDAwMDAwMCkKKyNkZWZpbmUJSU5fTVVMVElDQVNUKGEpCQlJTl9DTEFTU0QoYSkKKyNkZWZpbmUgSU5fTVVMVElDQVNUX05FVAkweEYwMDAwMDAwCisKKyNkZWZpbmUJSU5fRVhQRVJJTUVOVEFMKGEpCSgoKChsb25nIGludCkgKGEpKSAmIDB4ZjAwMDAwMDApID09IDB4ZjAwMDAwMDApCisjZGVmaW5lCUlOX0JBRENMQVNTKGEpCQlJTl9FWFBFUklNRU5UQUwoKGEpKQorCisvKiBBZGRyZXNzIHRvIGFjY2VwdCBhbnkgaW5jb21pbmcgbWVzc2FnZXMuICovCisjZGVmaW5lCUlOQUREUl9BTlkJCSgodW5zaWduZWQgbG9uZyBpbnQpIDB4MDAwMDAwMDApCisKKy8qIEFkZHJlc3MgdG8gc2VuZCB0byBhbGwgaG9zdHMuICovCisjZGVmaW5lCUlOQUREUl9CUk9BRENBU1QJKCh1bnNpZ25lZCBsb25nIGludCkgMHhmZmZmZmZmZikKKworLyogQWRkcmVzcyBpbmRpY2F0aW5nIGFuIGVycm9yIHJldHVybi4gKi8KKyNkZWZpbmUJSU5BRERSX05PTkUJCSgodW5zaWduZWQgbG9uZyBpbnQpIDB4ZmZmZmZmZmYpCisKKy8qIE5ldHdvcmsgbnVtYmVyIGZvciBsb2NhbCBob3N0IGxvb3BiYWNrLiAqLworI2RlZmluZQlJTl9MT09QQkFDS05FVAkJMTI3CisKKy8qIEFkZHJlc3MgdG8gbG9vcGJhY2sgaW4gc29mdHdhcmUgdG8gbG9jYWwgaG9zdC4gICovCisjZGVmaW5lCUlOQUREUl9MT09QQkFDSwkJMHg3ZjAwMDAwMQkvKiAxMjcuMC4wLjEgICAqLworI2RlZmluZQlJTl9MT09QQkFDSyhhKQkJKCgoKGxvbmcgaW50KSAoYSkpICYgMHhmZjAwMDAwMCkgPT0gMHg3ZjAwMDAwMCkKKworLyogRGVmaW5lcyBmb3IgTXVsdGljYXN0IElOQUREUiAqLworI2RlZmluZSBJTkFERFJfVU5TUEVDX0dST1VQICAgCTB4ZTAwMDAwMDBVCS8qIDIyNC4wLjAuMCAgICovCisjZGVmaW5lIElOQUREUl9BTExIT1NUU19HUk9VUCAJMHhlMDAwMDAwMVUJLyogMjI0LjAuMC4xICAgKi8KKyNkZWZpbmUgSU5BRERSX0FMTFJUUlNfR1JPVVAgICAgMHhlMDAwMDAwMlUJLyogMjI0LjAuMC4yICovCisjZGVmaW5lIElOQUREUl9NQVhfTE9DQUxfR1JPVVAgIDB4ZTAwMDAwZmZVCS8qIDIyNC4wLjAuMjU1ICovCisKKworLyogPGFzbS9ieXRlb3JkZXIuaD4gY29udGFpbnMgdGhlIGh0b25sIHR5cGUgc3R1ZmYuLiAqLworI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4gCisKKyNpZmRlZiBfX0tFUk5FTF9fCisvKiBTb21lIHJhbmRvbSBkZWZpbmVzIHRvIG1ha2UgaXQgZWFzaWVyIGluIHRoZSBrZXJuZWwuLiAqLworI2RlZmluZSBMT09QQkFDSyh4KQkoKCh4KSAmIGh0b25sKDB4ZmYwMDAwMDApKSA9PSBodG9ubCgweDdmMDAwMDAwKSkKKyNkZWZpbmUgTVVMVElDQVNUKHgpCSgoKHgpICYgaHRvbmwoMHhmMDAwMDAwMCkpID09IGh0b25sKDB4ZTAwMDAwMDApKQorI2RlZmluZSBCQURDTEFTUyh4KQkoKCh4KSAmIGh0b25sKDB4ZjAwMDAwMDApKSA9PSBodG9ubCgweGYwMDAwMDAwKSkKKyNkZWZpbmUgWkVST05FVCh4KQkoKCh4KSAmIGh0b25sKDB4ZmYwMDAwMDApKSA9PSBodG9ubCgweDAwMDAwMDAwKSkKKyNkZWZpbmUgTE9DQUxfTUNBU1QoeCkJKCgoeCkgJiBodG9ubCgweEZGRkZGRjAwKSkgPT0gaHRvbmwoMHhFMDAwMDAwMCkpCisKKyNlbmRpZgorCisjZW5kaWYJLyogX0xJTlVYX0lOX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW42LmggYi9pbmNsdWRlL2xpbnV4L2luNi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4MjU2YzUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2luNi5oCkBAIC0wLDAgKzEsMjAxIEBACisvKgorICoJVHlwZXMgYW5kIGRlZmluaXRpb25zIGZvciBBRl9JTkVUNiAKKyAqCUxpbnV4IElORVQ2IGltcGxlbWVudGF0aW9uIAorICoKKyAqCUF1dGhvcnM6CisgKglQZWRybyBSb3F1ZQkJPHJvcXVlQGRpLmZjLnVsLnB0PgkKKyAqCisgKglTb3VyY2VzOgorICoJSVB2NiBQcm9ncmFtIEludGVyZmFjZXMgZm9yIEJTRCBTeXN0ZW1zCisgKiAgICAgIDxkcmFmdC1pZXRmLWlwbmd3Zy1ic2QtYXBpLTA1LnR4dD4KKyAqCisgKglBZHZhbmNlZCBTb2NrZXRzIEFQSSBmb3IgSVB2NgorICoJPGRyYWZ0LXN0ZXZlbnMtYWR2YW5jZWQtYXBpLTAwLnR4dD4KKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgICAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogICAgICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgX0xJTlVYX0lONl9ICisjZGVmaW5lIF9MSU5VWF9JTjZfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyoKKyAqCUlQdjYgYWRkcmVzcyBzdHJ1Y3R1cmUKKyAqLworCitzdHJ1Y3QgaW42X2FkZHIKK3sKKwl1bmlvbiAKKwl7CisJCV9fdTgJCXU2X2FkZHI4WzE2XTsKKwkJX191MTYJCXU2X2FkZHIxNls4XTsKKwkJX191MzIJCXU2X2FkZHIzMls0XTsKKwl9IGluNl91OworI2RlZmluZSBzNl9hZGRyCQkJaW42X3UudTZfYWRkcjgKKyNkZWZpbmUgczZfYWRkcjE2CQlpbjZfdS51Nl9hZGRyMTYKKyNkZWZpbmUgczZfYWRkcjMyCQlpbjZfdS51Nl9hZGRyMzIKK307CisKKy8qIElQdjYgV2lsZGNhcmQgQWRkcmVzcyAoOjopIGFuZCBMb29wYmFjayBBZGRyZXNzICg6OjEpIGRlZmluZWQgaW4gUkZDMjU1MworICogTk9URTogQmUgYXdhcmUgdGhlIElONkFERFJfKiBjb25zdGFudHMgYW5kIGluNmFkZHJfKiBleHRlcm5hbHMgYXJlIGRlZmluZWQKKyAqIGluIG5ldHdvcmsgYnl0ZSBvcmRlciwgbm90IGluIGhvc3QgYnl0ZSBvcmRlciBhcyBhcmUgdGhlIElQdjQgZXF1aXZhbGVudHMKKyAqLworI2lmIDAKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgaW42YWRkcl9hbnk7CisjZGVmaW5lIElONkFERFJfQU5ZX0lOSVQgeyB7IHsgMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCB9IH0gfQorI2VuZGlmCitleHRlcm4gY29uc3Qgc3RydWN0IGluNl9hZGRyIGluNmFkZHJfbG9vcGJhY2s7CisjZGVmaW5lIElONkFERFJfTE9PUEJBQ0tfSU5JVCB7IHsgeyAwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxIH0gfSB9CisKK3N0cnVjdCBzb2NrYWRkcl9pbjYgeworCXVuc2lnbmVkIHNob3J0IGludAlzaW42X2ZhbWlseTsgICAgLyogQUZfSU5FVDYgKi8KKwlfX3UxNgkJCXNpbjZfcG9ydDsgICAgICAvKiBUcmFuc3BvcnQgbGF5ZXIgcG9ydCAjICovCisJX191MzIJCQlzaW42X2Zsb3dpbmZvOyAgLyogSVB2NiBmbG93IGluZm9ybWF0aW9uICovCisJc3RydWN0IGluNl9hZGRyCQlzaW42X2FkZHI7ICAgICAgLyogSVB2NiBhZGRyZXNzICovCisJX191MzIJCQlzaW42X3Njb3BlX2lkOyAgLyogc2NvcGUgaWQgKG5ldyBpbiBSRkMyNTUzKSAqLworfTsKKworc3RydWN0IGlwdjZfbXJlcSB7CisJLyogSVB2NiBtdWx0aWNhc3QgYWRkcmVzcyBvZiBncm91cCAqLworCXN0cnVjdCBpbjZfYWRkciBpcHY2bXJfbXVsdGlhZGRyOworCisJLyogbG9jYWwgSVB2NiBhZGRyZXNzIG9mIGludGVyZmFjZSAqLworCWludAkJaXB2Nm1yX2lmaW5kZXg7Cit9OworCisjZGVmaW5lIGlwdjZtcl9hY2FkZHIJaXB2Nm1yX211bHRpYWRkcgorCitzdHJ1Y3QgaW42X2Zsb3dsYWJlbF9yZXEKK3sKKwlzdHJ1Y3QgaW42X2FkZHIJZmxyX2RzdDsKKwlfX3UzMglmbHJfbGFiZWw7CisJX191OAlmbHJfYWN0aW9uOworCV9fdTgJZmxyX3NoYXJlOworCV9fdTE2CWZscl9mbGFnczsKKwlfX3UxNiAJZmxyX2V4cGlyZXM7CisJX191MTYJZmxyX2xpbmdlcjsKKwlfX3UzMglfX2Zscl9wYWQ7CisJLyogT3B0aW9ucyBpbiBmb3JtYXQgb2YgSVBWNl9QS1RPUFRJT05TICovCit9OworCisjZGVmaW5lIElQVjZfRkxfQV9HRVQJMAorI2RlZmluZSBJUFY2X0ZMX0FfUFVUCTEKKyNkZWZpbmUgSVBWNl9GTF9BX1JFTkVXCTIKKworI2RlZmluZSBJUFY2X0ZMX0ZfQ1JFQVRFCTEKKyNkZWZpbmUgSVBWNl9GTF9GX0VYQ0wJCTIKKworI2RlZmluZSBJUFY2X0ZMX1NfTk9ORQkJMAorI2RlZmluZSBJUFY2X0ZMX1NfRVhDTAkJMQorI2RlZmluZSBJUFY2X0ZMX1NfUFJPQ0VTUwkyCisjZGVmaW5lIElQVjZfRkxfU19VU0VSCQkzCisjZGVmaW5lIElQVjZfRkxfU19BTlkJCTI1NQorCisKKy8qCisgKglCaXRtYXNrIGNvbnN0YW50IGRlY2xhcmF0aW9ucyB0byBoZWxwIGFwcGxpY2F0aW9ucyBzZWxlY3Qgb3V0IHRoZSAKKyAqCWZsb3cgbGFiZWwgYW5kIHByaW9yaXR5IGZpZWxkcy4KKyAqCisgKglOb3RlIHRoYXQgdGhpcyBhcmUgaW4gaG9zdCBieXRlIG9yZGVyIHdoaWxlIHRoZSBmbG93aW5mbyBmaWVsZCBvZgorICoJc29ja2FkZHJfaW42IGlzIGluIG5ldHdvcmsgYnl0ZSBvcmRlci4KKyAqLworCisjZGVmaW5lIElQVjZfRkxPV0lORk9fRkxPV0xBQkVMCQkweDAwMGZmZmZmCisjZGVmaW5lIElQVjZfRkxPV0lORk9fUFJJT1JJVFkJCTB4MGZmMDAwMDAKKworLyogVGhlc2UgZGVmaW50aW9ucyBhcmUgb2Jzb2xldGUgKi8KKyNkZWZpbmUgSVBWNl9QUklPUklUWV9VTkNIQVJBQ1RFUklaRUQJMHgwMDAwCisjZGVmaW5lIElQVjZfUFJJT1JJVFlfRklMTEVSCQkweDAxMDAKKyNkZWZpbmUgSVBWNl9QUklPUklUWV9VTkFUVEVOREVECTB4MDIwMAorI2RlZmluZSBJUFY2X1BSSU9SSVRZX1JFU0VSVkVEMQkJMHgwMzAwCisjZGVmaW5lIElQVjZfUFJJT1JJVFlfQlVMSwkJMHgwNDAwCisjZGVmaW5lIElQVjZfUFJJT1JJVFlfUkVTRVJWRUQyCQkweDA1MDAKKyNkZWZpbmUgSVBWNl9QUklPUklUWV9JTlRFUkFDVElWRQkweDA2MDAKKyNkZWZpbmUgSVBWNl9QUklPUklUWV9DT05UUk9MCQkweDA3MDAKKyNkZWZpbmUgSVBWNl9QUklPUklUWV84CQkJMHgwODAwCisjZGVmaW5lIElQVjZfUFJJT1JJVFlfOQkJCTB4MDkwMAorI2RlZmluZSBJUFY2X1BSSU9SSVRZXzEwCQkweDBhMDAKKyNkZWZpbmUgSVBWNl9QUklPUklUWV8xMQkJMHgwYjAwCisjZGVmaW5lIElQVjZfUFJJT1JJVFlfMTIJCTB4MGMwMAorI2RlZmluZSBJUFY2X1BSSU9SSVRZXzEzCQkweDBkMDAKKyNkZWZpbmUgSVBWNl9QUklPUklUWV8xNAkJMHgwZTAwCisjZGVmaW5lIElQVjZfUFJJT1JJVFlfMTUJCTB4MGYwMAorCisvKgorICoJSVBWNiBleHRlbnNpb24gaGVhZGVycworICovCisjZGVmaW5lIElQUFJPVE9fSE9QT1BUUwkJMAkvKiBJUHY2IGhvcC1ieS1ob3Agb3B0aW9ucwkqLworI2RlZmluZSBJUFBST1RPX1JPVVRJTkcJCTQzCS8qIElQdjYgcm91dGluZyBoZWFkZXIJCSovCisjZGVmaW5lIElQUFJPVE9fRlJBR01FTlQJNDQJLyogSVB2NiBmcmFnbWVudGF0aW9uIGhlYWRlcgkqLworI2RlZmluZSBJUFBST1RPX0lDTVBWNgkJNTgJLyogSUNNUHY2CQkJKi8KKyNkZWZpbmUgSVBQUk9UT19OT05FCQk1OQkvKiBJUHY2IG5vIG5leHQgaGVhZGVyCQkqLworI2RlZmluZSBJUFBST1RPX0RTVE9QVFMJCTYwCS8qIElQdjYgZGVzdGluYXRpb24gb3B0aW9ucwkqLworCisvKgorICoJSVB2NiBUTFYgb3B0aW9ucy4KKyAqLworI2RlZmluZSBJUFY2X1RMVl9QQUQwCQkwCisjZGVmaW5lIElQVjZfVExWX1BBRE4JCTEKKyNkZWZpbmUgSVBWNl9UTFZfUk9VVEVSQUxFUlQJNQorI2RlZmluZSBJUFY2X1RMVl9KVU1CTwkJMTk0CisKKy8qCisgKglJUFY2IHNvY2tldCBvcHRpb25zCisgKi8KKworI2RlZmluZSBJUFY2X0FERFJGT1JNCQkxCisjZGVmaW5lIElQVjZfUEtUSU5GTwkJMgorI2RlZmluZSBJUFY2X0hPUE9QVFMJCTMKKyNkZWZpbmUgSVBWNl9EU1RPUFRTCQk0CisjZGVmaW5lIElQVjZfUlRIRFIJCTUKKyNkZWZpbmUgSVBWNl9QS1RPUFRJT05TCQk2CisjZGVmaW5lIElQVjZfQ0hFQ0tTVU0JCTcKKyNkZWZpbmUgSVBWNl9IT1BMSU1JVAkJOAorI2RlZmluZSBJUFY2X05FWFRIT1AJCTkKKyNkZWZpbmUgSVBWNl9BVVRISERSCQkxMAorI2RlZmluZSBJUFY2X0ZMT1dJTkZPCQkxMQorCisjZGVmaW5lIElQVjZfVU5JQ0FTVF9IT1BTCTE2CisjZGVmaW5lIElQVjZfTVVMVElDQVNUX0lGCTE3CisjZGVmaW5lIElQVjZfTVVMVElDQVNUX0hPUFMJMTgKKyNkZWZpbmUgSVBWNl9NVUxUSUNBU1RfTE9PUAkxOQorI2RlZmluZSBJUFY2X0FERF9NRU1CRVJTSElQCTIwCisjZGVmaW5lIElQVjZfRFJPUF9NRU1CRVJTSElQCTIxCisjZGVmaW5lIElQVjZfUk9VVEVSX0FMRVJUCTIyCisjZGVmaW5lIElQVjZfTVRVX0RJU0NPVkVSCTIzCisjZGVmaW5lIElQVjZfTVRVCQkyNAorI2RlZmluZSBJUFY2X1JFQ1ZFUlIJCTI1CisjZGVmaW5lIElQVjZfVjZPTkxZCQkyNgorI2RlZmluZSBJUFY2X0pPSU5fQU5ZQ0FTVAkyNworI2RlZmluZSBJUFY2X0xFQVZFX0FOWUNBU1QJMjgKKworLyogSVBWNl9NVFVfRElTQ09WRVIgdmFsdWVzICovCisjZGVmaW5lIElQVjZfUE1UVURJU0NfRE9OVAkJMAorI2RlZmluZSBJUFY2X1BNVFVESVNDX1dBTlQJCTEKKyNkZWZpbmUgSVBWNl9QTVRVRElTQ19ETwkJMgorCisvKiBGbG93bGFiZWwgKi8KKyNkZWZpbmUgSVBWNl9GTE9XTEFCRUxfTUdSCTMyCisjZGVmaW5lIElQVjZfRkxPV0lORk9fU0VORAkzMworCisjZGVmaW5lIElQVjZfSVBTRUNfUE9MSUNZCTM0CisjZGVmaW5lIElQVjZfWEZSTV9QT0xJQ1kJMzUKKworLyoKKyAqIE11bHRpY2FzdDoKKyAqIEZvbGxvd2luZyBzb2NrZXQgb3B0aW9ucyBhcmUgc2hhcmVkIGJldHdlZW4gSVB2NCBhbmQgSVB2Ni4KKyAqCisgKiBNQ0FTVF9KT0lOX0dST1VQCQk0MgorICogTUNBU1RfQkxPQ0tfU09VUkNFCQk0MworICogTUNBU1RfVU5CTE9DS19TT1VSQ0UJCTQ0CisgKiBNQ0FTVF9MRUFWRV9HUk9VUAkJNDUKKyAqIE1DQVNUX0pPSU5fU09VUkNFX0dST1VQCTQ2CisgKiBNQ0FTVF9MRUFWRV9TT1VSQ0VfR1JPVVAJNDcKKyAqIE1DQVNUX01TRklMVEVSCQk0OAorICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbl9yb3V0ZS5oIGIvaW5jbHVkZS9saW51eC9pbl9yb3V0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxZjI1YzMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2luX3JvdXRlLmgKQEAgLTAsMCArMSwzMiBAQAorI2lmbmRlZiBfTElOVVhfSU5fUk9VVEVfSAorI2RlZmluZSBfTElOVVhfSU5fUk9VVEVfSAorCisvKiBJUHY0IHJvdXRpbmcgY2FjaGUgZmxhZ3MgKi8KKworI2RlZmluZSBSVENGX0RFQUQJUlROSF9GX0RFQUQKKyNkZWZpbmUgUlRDRl9PTkxJTksJUlROSF9GX09OTElOSworCisvKiBPYnNvbGV0ZSBmbGFnLiBBYm91dCB0byBiZSBkZWxldGVkICovCisjZGVmaW5lIFJUQ0ZfTk9QTVRVRElTQyBSVE1fRl9OT1BNVFVESVNDCisKKyNkZWZpbmUgUlRDRl9OT1RJRlkJMHgwMDAxMDAwMAorI2RlZmluZSBSVENGX0RJUkVDVERTVAkweDAwMDIwMDAwCisjZGVmaW5lIFJUQ0ZfUkVESVJFQ1RFRAkweDAwMDQwMDAwCisjZGVmaW5lIFJUQ0ZfVFBST1hZCTB4MDAwODAwMDAKKworI2RlZmluZSBSVENGX0ZBU1QJMHgwMDIwMDAwMAorI2RlZmluZSBSVENGX01BU1EJMHgwMDQwMDAwMAorI2RlZmluZSBSVENGX1NOQVQJMHgwMDgwMDAwMAorI2RlZmluZSBSVENGX0RPUkVESVJFQ1QgMHgwMTAwMDAwMAorI2RlZmluZSBSVENGX0RJUkVDVFNSQwkweDA0MDAwMDAwCisjZGVmaW5lIFJUQ0ZfRE5BVAkweDA4MDAwMDAwCisjZGVmaW5lIFJUQ0ZfQlJPQURDQVNUCTB4MTAwMDAwMDAKKyNkZWZpbmUgUlRDRl9NVUxUSUNBU1QJMHgyMDAwMDAwMAorI2RlZmluZSBSVENGX1JFSkVDVAkweDQwMDAwMDAwCisjZGVmaW5lIFJUQ0ZfTE9DQUwJMHg4MDAwMDAwMAorCisjZGVmaW5lIFJUQ0ZfTkFUCShSVENGX0ROQVR8UlRDRl9TTkFUKQorCisjZGVmaW5lIFJUX1RPUyh0b3MpCSgodG9zKSZJUFRPU19UT1NfTUFTSykKKworI2VuZGlmIC8qIF9MSU5VWF9JTl9ST1VURV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2luZXQuaCBiL2luY2x1ZGUvbGludXgvaW5ldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiNWU5ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2luZXQuaApAQCAtMCwwICsxLDUwIEBACisvKgorICoJCVN3YW5zZWEgVW5pdmVyc2l0eSBDb21wdXRlciBTb2NpZXR5IE5FVDMKKyAqCisgKglUaGlzIHdvcmsgaXMgZGVyaXZlZCBmcm9tIE5FVDJEZWJ1Z2dlZCwgd2hpY2ggaXMgaW4gdHVybiBkZXJpdmVkCisgKglmcm9tIE5FVDJEIHdoaWNoIHdhcyB3cml0dGVuIGJ5OgorICogCQlGcmVkIE4uIHZhbiBLZW1wZW4sIDx3YWx0amVAdVdhbHQuTkwuTXVnbmV0Lk9SRz4KKyAqCisgKgkJVGhpcyB3b3JrIHdhcyBkZXJpdmVkIGZyb20gUm9zcyBCaXJvJ3MgaW5zcGlyYXRpb25hbCB3b3JrCisgKgkJZm9yIHRoZSBMSU5VWCBvcGVyYXRpbmcgc3lzdGVtLiAgSGlzIHZlcnNpb24gbnVtYmVycyB3ZXJlOgorICoKKyAqCQkkSWQ6IFNwYWNlLmMsdiAgICAgMC44LjQuNSAgMTk5Mi8xMi8xMiAxOToyNTowNCBiaXI3IEV4cCAkCisgKgkJJElkOiBhcnAuYyx2ICAgICAgIDAuOC40LjYgIDE5OTMvMDEvMjggMjI6MzA6MDAgYmlyNyBFeHAgJAorICoJCSRJZDogYXJwLmgsdiAgICAgICAwLjguNC42ICAxOTkzLzAxLzI4IDIyOjMwOjAwIGJpcjcgRXhwICQKKyAqCQkkSWQ6IGRldi5jLHYgICAgICAgMC44LjQuMTMgMTk5My8wMS8yMyAxODowMDoxMSBiaXI3IEV4cCAkCisgKgkJJElkOiBkZXYuaCx2ICAgICAgIDAuOC40LjcgIDE5OTMvMDEvMjMgMTg6MDA6MTEgYmlyNyBFeHAgJAorICoJCSRJZDogZXRoLmMsdiAgICAgICAwLjguNC40ICAxOTkzLzAxLzIyIDIzOjIxOjM4IGJpcjcgRXhwICQKKyAqCQkkSWQ6IGV0aC5oLHYgICAgICAgMC44LjQuMSAgMTk5Mi8xMS8xMCAwMDoxNzoxOCBiaXI3IEV4cCAkCisgKgkJJElkOiBpY21wLmMsdiAgICAgIDAuOC40LjkgIDE5OTMvMDEvMjMgMTg6MDA6MTEgYmlyNyBFeHAgJAorICoJCSRJZDogaWNtcC5oLHYgICAgICAwLjguNC4yICAxOTkyLzExLzE1IDE0OjU1OjMwIGJpcjcgRXhwICQKKyAqIAkJJElkOiBpcC5jLHYgICAgICAgIDAuOC40LjggIDE5OTIvMTIvMTIgMTk6MjU6MDQgYmlyNyBFeHAgJAorICogCQkkSWQ6IGlwLmgsdiAgICAgICAgMC44LjQuMiAgMTk5My8wMS8yMyAxODowMDoxMSBiaXI3IEV4cCAkCisgKiAJCSRJZDogbG9vcGJhY2suYyx2ICAwLjguNC44ICAxOTkzLzAxLzIzIDE4OjAwOjExIGJpcjcgRXhwICQKKyAqIAkJJElkOiBwYWNrZXQuYyx2ICAgIDAuOC40LjcgIDE5OTMvMDEvMjYgMjI6MDQ6MDAgYmlyNyBFeHAgJAorICoJCSRJZDogcHJvdG9jb2xzLmMsdiAwLjguNC4zICAxOTkyLzExLzE1IDE0OjU1OjMwIGJpcjcgRXhwICQKKyAqCQkkSWQ6IHJhdy5jLHYgICAgICAgMC44LjQuMTIgMTk5My8wMS8yNiAyMjowNDowMCBiaXI3IEV4cCAkCisgKgkJJElkOiBzb2NrLmMsdiAgICAgIDAuOC40LjYgIDE5OTMvMDEvMjggMjI6MzA6MDAgYmlyNyBFeHAgJAorICoJCSRJZDogc29jay5oLHYgICAgICAwLjguNC43ICAxOTkzLzAxLzI2IDIyOjA0OjAwIGJpcjcgRXhwICQKKyAqCQkkSWQ6IHRjcC5jLHYgICAgICAgMC44LjQuMTYgMTk5My8wMS8yNiAyMjowNDowMCBiaXI3IEV4cCAkCisgKgkJJElkOiB0Y3AuaCx2ICAgICAgIDAuOC40LjcgIDE5OTMvMDEvMjIgMjI6NTg6MDggYmlyNyBFeHAgJAorICoJCSRJZDogdGltZXIuYyx2ICAgICAwLjguNC44ICAxOTkzLzAxLzIzIDE4OjAwOjExIGJpcjcgRXhwICQKKyAqCQkkSWQ6IHRpbWVyLmgsdiAgICAgMC44LjQuMiAgMTk5My8wMS8yMyAxODowMDoxMSBiaXI3IEV4cCAkCisgKgkJJElkOiB1ZHAuYyx2ICAgICAgIDAuOC40LjEyIDE5OTMvMDEvMjYgMjI6MDQ6MDAgYmlyNyBFeHAgJAorICoJCSRJZDogdWRwLmgsdiAgICAgICAwLjguNC4xICAxOTkyLzExLzEwIDAwOjE3OjE4IGJpcjcgRXhwICQKKyAqCQkkSWQ6IHdlLmMsdiAgICAgICAgMC44LjQuMTAgMTk5My8wMS8yMyAxODowMDoxMSBiaXI3IEV4cCAkCisgKgkJJElkOiB3ZXJlZy5oLHYgICAgIDAuOC40LjEgIDE5OTIvMTEvMTAgMDA6MTc6MTggYmlyNyBFeHAgJAorICoKKyAqCQlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgkJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqCQlhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqCQkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisjaWZuZGVmIF9MSU5VWF9JTkVUX0gKKyNkZWZpbmUgX0xJTlVYX0lORVRfSAorCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK2V4dGVybiBfX3UzMiBpbl9hdG9uKGNvbnN0IGNoYXIgKnN0cik7CisjZW5kaWYKKyNlbmRpZgkvKiBfTElOVVhfSU5FVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvaW5ldGRldmljZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmYWZiMjcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaApAQCAtMCwwICsxLDE5MCBAQAorI2lmbmRlZiBfTElOVVhfSU5FVERFVklDRV9ICisjZGVmaW5lIF9MSU5VWF9JTkVUREVWSUNFX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L2lmLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorCitzdHJ1Y3QgaXB2NF9kZXZjb25mCit7CisJaW50CWFjY2VwdF9yZWRpcmVjdHM7CisJaW50CXNlbmRfcmVkaXJlY3RzOworCWludAlzZWN1cmVfcmVkaXJlY3RzOworCWludAlzaGFyZWRfbWVkaWE7CisJaW50CWFjY2VwdF9zb3VyY2Vfcm91dGU7CisJaW50CXJwX2ZpbHRlcjsKKwlpbnQJcHJveHlfYXJwOworCWludAlib290cF9yZWxheTsKKwlpbnQJbG9nX21hcnRpYW5zOworCWludAlmb3J3YXJkaW5nOworCWludAltY19mb3J3YXJkaW5nOworCWludAl0YWc7CisJaW50ICAgICBhcnBfZmlsdGVyOworCWludAlhcnBfYW5ub3VuY2U7CisJaW50CWFycF9pZ25vcmU7CisJaW50CW1lZGl1bV9pZDsKKwlpbnQJbm9feGZybTsKKwlpbnQJbm9fcG9saWN5OworCWludAlmb3JjZV9pZ21wX3ZlcnNpb247CisJdm9pZAkqc3lzY3RsOworfTsKKworZXh0ZXJuIHN0cnVjdCBpcHY0X2RldmNvbmYgaXB2NF9kZXZjb25mOworCitzdHJ1Y3QgaW5fZGV2aWNlCit7CisJc3RydWN0IG5ldF9kZXZpY2UJKmRldjsKKwlhdG9taWNfdAkJcmVmY250OworCWludAkJCWRlYWQ7CisJc3RydWN0IGluX2lmYWRkcgkqaWZhX2xpc3Q7CS8qIElQIGlmYWRkciBjaGFpbgkJKi8KKwlyd2xvY2tfdAkJbWNfbGlzdF9sb2NrOworCXN0cnVjdCBpcF9tY19saXN0CSptY19saXN0OwkvKiBJUCBtdWx0aWNhc3QgZmlsdGVyIGNoYWluICAgICovCisJc3BpbmxvY2tfdAkJbWNfdG9tYl9sb2NrOworCXN0cnVjdCBpcF9tY19saXN0CSptY190b21iOworCXVuc2lnbmVkIGxvbmcJCW1yX3YxX3NlZW47CisJdW5zaWduZWQgbG9uZwkJbXJfdjJfc2VlbjsKKwl1bnNpZ25lZCBsb25nCQltcl9tYXhkZWxheTsKKwl1bnNpZ25lZCBjaGFyCQltcl9xcnY7CisJdW5zaWduZWQgY2hhcgkJbXJfZ3FfcnVubmluZzsKKwl1bnNpZ25lZCBjaGFyCQltcl9pZmNfY291bnQ7CisJc3RydWN0IHRpbWVyX2xpc3QJbXJfZ3FfdGltZXI7CS8qIGdlbmVyYWwgcXVlcnkgdGltZXIgKi8KKwlzdHJ1Y3QgdGltZXJfbGlzdAltcl9pZmNfdGltZXI7CS8qIGludGVyZmFjZSBjaGFuZ2UgdGltZXIgKi8KKworCXN0cnVjdCBuZWlnaF9wYXJtcwkqYXJwX3Bhcm1zOworCXN0cnVjdCBpcHY0X2RldmNvbmYJY25mOworCXN0cnVjdCByY3VfaGVhZAkJcmN1X2hlYWQ7Cit9OworCisjZGVmaW5lIElOX0RFVl9GT1JXQVJEKGluX2RldikJCSgoaW5fZGV2KS0+Y25mLmZvcndhcmRpbmcpCisjZGVmaW5lIElOX0RFVl9NRk9SV0FSRChpbl9kZXYpCQkoaXB2NF9kZXZjb25mLm1jX2ZvcndhcmRpbmcgJiYgKGluX2RldiktPmNuZi5tY19mb3J3YXJkaW5nKQorI2RlZmluZSBJTl9ERVZfUlBGSUxURVIoaW5fZGV2KQkJKGlwdjRfZGV2Y29uZi5ycF9maWx0ZXIgJiYgKGluX2RldiktPmNuZi5ycF9maWx0ZXIpCisjZGVmaW5lIElOX0RFVl9TT1VSQ0VfUk9VVEUoaW5fZGV2KQkoaXB2NF9kZXZjb25mLmFjY2VwdF9zb3VyY2Vfcm91dGUgJiYgKGluX2RldiktPmNuZi5hY2NlcHRfc291cmNlX3JvdXRlKQorI2RlZmluZSBJTl9ERVZfQk9PVFBfUkVMQVkoaW5fZGV2KQkoaXB2NF9kZXZjb25mLmJvb3RwX3JlbGF5ICYmIChpbl9kZXYpLT5jbmYuYm9vdHBfcmVsYXkpCisKKyNkZWZpbmUgSU5fREVWX0xPR19NQVJUSUFOUyhpbl9kZXYpCShpcHY0X2RldmNvbmYubG9nX21hcnRpYW5zIHx8IChpbl9kZXYpLT5jbmYubG9nX21hcnRpYW5zKQorI2RlZmluZSBJTl9ERVZfUFJPWFlfQVJQKGluX2RldikJKGlwdjRfZGV2Y29uZi5wcm94eV9hcnAgfHwgKGluX2RldiktPmNuZi5wcm94eV9hcnApCisjZGVmaW5lIElOX0RFVl9TSEFSRURfTUVESUEoaW5fZGV2KQkoaXB2NF9kZXZjb25mLnNoYXJlZF9tZWRpYSB8fCAoaW5fZGV2KS0+Y25mLnNoYXJlZF9tZWRpYSkKKyNkZWZpbmUgSU5fREVWX1RYX1JFRElSRUNUUyhpbl9kZXYpCShpcHY0X2RldmNvbmYuc2VuZF9yZWRpcmVjdHMgfHwgKGluX2RldiktPmNuZi5zZW5kX3JlZGlyZWN0cykKKyNkZWZpbmUgSU5fREVWX1NFQ19SRURJUkVDVFMoaW5fZGV2KQkoaXB2NF9kZXZjb25mLnNlY3VyZV9yZWRpcmVjdHMgfHwgKGluX2RldiktPmNuZi5zZWN1cmVfcmVkaXJlY3RzKQorI2RlZmluZSBJTl9ERVZfSURUQUcoaW5fZGV2KQkJKChpbl9kZXYpLT5jbmYudGFnKQorI2RlZmluZSBJTl9ERVZfTUVESVVNX0lEKGluX2RldikJKChpbl9kZXYpLT5jbmYubWVkaXVtX2lkKQorCisjZGVmaW5lIElOX0RFVl9SWF9SRURJUkVDVFMoaW5fZGV2KSBcCisJKChJTl9ERVZfRk9SV0FSRChpbl9kZXYpICYmIFwKKwkgIChpcHY0X2RldmNvbmYuYWNjZXB0X3JlZGlyZWN0cyAmJiAoaW5fZGV2KS0+Y25mLmFjY2VwdF9yZWRpcmVjdHMpKSBcCisJIHx8ICghSU5fREVWX0ZPUldBUkQoaW5fZGV2KSAmJiBcCisJICAoaXB2NF9kZXZjb25mLmFjY2VwdF9yZWRpcmVjdHMgfHwgKGluX2RldiktPmNuZi5hY2NlcHRfcmVkaXJlY3RzKSkpCisKKyNkZWZpbmUgSU5fREVWX0FSUEZJTFRFUihpbl9kZXYpCShpcHY0X2RldmNvbmYuYXJwX2ZpbHRlciB8fCAoaW5fZGV2KS0+Y25mLmFycF9maWx0ZXIpCisjZGVmaW5lIElOX0RFVl9BUlBfQU5OT1VOQ0UoaW5fZGV2KQkobWF4KGlwdjRfZGV2Y29uZi5hcnBfYW5ub3VuY2UsIChpbl9kZXYpLT5jbmYuYXJwX2Fubm91bmNlKSkKKyNkZWZpbmUgSU5fREVWX0FSUF9JR05PUkUoaW5fZGV2KQkobWF4KGlwdjRfZGV2Y29uZi5hcnBfaWdub3JlLCAoaW5fZGV2KS0+Y25mLmFycF9pZ25vcmUpKQorCitzdHJ1Y3QgaW5faWZhZGRyCit7CisJc3RydWN0IGluX2lmYWRkcgkqaWZhX25leHQ7CisJc3RydWN0IGluX2RldmljZQkqaWZhX2RldjsKKwlzdHJ1Y3QgcmN1X2hlYWQJCXJjdV9oZWFkOworCXUzMgkJCWlmYV9sb2NhbDsKKwl1MzIJCQlpZmFfYWRkcmVzczsKKwl1MzIJCQlpZmFfbWFzazsKKwl1MzIJCQlpZmFfYnJvYWRjYXN0OworCXUzMgkJCWlmYV9hbnljYXN0OworCXVuc2lnbmVkIGNoYXIJCWlmYV9zY29wZTsKKwl1bnNpZ25lZCBjaGFyCQlpZmFfZmxhZ3M7CisJdW5zaWduZWQgY2hhcgkJaWZhX3ByZWZpeGxlbjsKKwljaGFyCQkJaWZhX2xhYmVsW0lGTkFNU0laXTsKK307CisKK2V4dGVybiBpbnQgcmVnaXN0ZXJfaW5ldGFkZHJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7CitleHRlcm4gaW50IHVucmVnaXN0ZXJfaW5ldGFkZHJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7CisKK2V4dGVybiBzdHJ1Y3QgbmV0X2RldmljZSAJKmlwX2Rldl9maW5kKHUzMiBhZGRyKTsKK2V4dGVybiBpbnQJCWluZXRfYWRkcl9vbmxpbmsoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LCB1MzIgYSwgdTMyIGIpOworZXh0ZXJuIGludAkJZGV2aW5ldF9pb2N0bCh1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqKTsKK2V4dGVybiB2b2lkCQlkZXZpbmV0X2luaXQodm9pZCk7CitleHRlcm4gc3RydWN0IGluX2RldmljZSAqaW5ldGRldl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworZXh0ZXJuIHN0cnVjdCBpbl9kZXZpY2UJKmluZXRkZXZfYnlfaW5kZXgoaW50KTsKK2V4dGVybiB1MzIJCWluZXRfc2VsZWN0X2FkZHIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRzdCwgaW50IHNjb3BlKTsKK2V4dGVybiB1MzIJCWluZXRfY29uZmlybV9hZGRyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkc3QsIHUzMiBsb2NhbCwgaW50IHNjb3BlKTsKK2V4dGVybiBzdHJ1Y3QgaW5faWZhZGRyICppbmV0X2lmYV9ieXByZWZpeChzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsIHUzMiBwcmVmaXgsIHUzMiBtYXNrKTsKK2V4dGVybiB2b2lkCQlpbmV0X2ZvcndhcmRfY2hhbmdlKHZvaWQpOworCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgaW5ldF9pZmFfbWF0Y2godTMyIGFkZHIsIHN0cnVjdCBpbl9pZmFkZHIgKmlmYSkKK3sKKwlyZXR1cm4gISgoYWRkcl5pZmEtPmlmYV9hZGRyZXNzKSZpZmEtPmlmYV9tYXNrKTsKK30KKworLyoKKyAqCUNoZWNrIGlmIGEgbWFzayBpcyBhY2NlcHRhYmxlLgorICovCisgCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgYmFkX21hc2sodTMyIG1hc2ssIHUzMiBhZGRyKQoreworCWlmIChhZGRyICYgKG1hc2sgPSB+bWFzaykpCisJCXJldHVybiAxOworCW1hc2sgPSBudG9obChtYXNrKTsKKwlpZiAobWFzayAmIChtYXNrKzEpKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBmb3JfcHJpbWFyeV9pZmEoaW5fZGV2KQl7IHN0cnVjdCBpbl9pZmFkZHIgKmlmYTsgXAorICBmb3IgKGlmYSA9IChpbl9kZXYpLT5pZmFfbGlzdDsgaWZhICYmICEoaWZhLT5pZmFfZmxhZ3MmSUZBX0ZfU0VDT05EQVJZKTsgaWZhID0gaWZhLT5pZmFfbmV4dCkKKworI2RlZmluZSBmb3JfaWZhKGluX2RldikJeyBzdHJ1Y3QgaW5faWZhZGRyICppZmE7IFwKKyAgZm9yIChpZmEgPSAoaW5fZGV2KS0+aWZhX2xpc3Q7IGlmYTsgaWZhID0gaWZhLT5pZmFfbmV4dCkKKworCisjZGVmaW5lIGVuZGZvcl9pZmEoaW5fZGV2KSB9CisKK3N0YXRpYyBfX2lubGluZV9fIHN0cnVjdCBpbl9kZXZpY2UgKgoraW5fZGV2X2dldChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBpbl9kZXZpY2UgKmluX2RldjsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlpbl9kZXYgPSBkZXYtPmlwX3B0cjsKKwlpZiAoaW5fZGV2KQorCQlhdG9taWNfaW5jKCZpbl9kZXYtPnJlZmNudCk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CisJcmV0dXJuIGluX2RldjsKK30KKworc3RhdGljIF9faW5saW5lX18gc3RydWN0IGluX2RldmljZSAqCitfX2luX2Rldl9nZXQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gKHN0cnVjdCBpbl9kZXZpY2UqKWRldi0+aXBfcHRyOworfQorCitleHRlcm4gdm9pZCBpbl9kZXZfZmluaXNoX2Rlc3Ryb3koc3RydWN0IGluX2RldmljZSAqaWRldik7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbl9kZXZfcHV0KHN0cnVjdCBpbl9kZXZpY2UgKmlkZXYpCit7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmlkZXYtPnJlZmNudCkpCisJCWluX2Rldl9maW5pc2hfZGVzdHJveShpZGV2KTsKK30KKworI2RlZmluZSBfX2luX2Rldl9wdXQoaWRldikgIGF0b21pY19kZWMoJihpZGV2KS0+cmVmY250KQorI2RlZmluZSBpbl9kZXZfaG9sZChpZGV2KSAgIGF0b21pY19pbmMoJihpZGV2KS0+cmVmY250KQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCitzdGF0aWMgX19pbmxpbmVfXyBfX3UzMiBpbmV0X21ha2VfbWFzayhpbnQgbG9nbWFzaykKK3sKKwlpZiAobG9nbWFzaykKKwkJcmV0dXJuIGh0b25sKH4oKDE8PCgzMi1sb2dtYXNrKSktMSkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgaW5ldF9tYXNrX2xlbihfX3UzMiBtYXNrKQoreworCWlmICghKG1hc2sgPSBudG9obChtYXNrKSkpCisJCXJldHVybiAwOworCXJldHVybiAzMiAtIGZmeih+bWFzayk7Cit9CisKKworI2VuZGlmIC8qIF9MSU5VWF9JTkVUREVWSUNFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW5pdC5oIGIvaW5jbHVkZS9saW51eC9pbml0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVjODNlMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvaW5pdC5oCkBAIC0wLDAgKzEsMjUwIEBACisjaWZuZGVmIF9MSU5VWF9JTklUX0gKKyNkZWZpbmUgX0xJTlVYX0lOSVRfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKworLyogVGhlc2UgbWFjcm9zIGFyZSB1c2VkIHRvIG1hcmsgc29tZSBmdW5jdGlvbnMgb3IgCisgKiBpbml0aWFsaXplZCBkYXRhIChkb2Vzbid0IGFwcGx5IHRvIHVuaW5pdGlhbGl6ZWQgZGF0YSkKKyAqIGFzIGBpbml0aWFsaXphdGlvbicgZnVuY3Rpb25zLiBUaGUga2VybmVsIGNhbiB0YWtlIHRoaXMKKyAqIGFzIGhpbnQgdGhhdCB0aGUgZnVuY3Rpb24gaXMgdXNlZCBvbmx5IGR1cmluZyB0aGUgaW5pdGlhbGl6YXRpb24KKyAqIHBoYXNlIGFuZCBmcmVlIHVwIHVzZWQgbWVtb3J5IHJlc291cmNlcyBhZnRlcgorICoKKyAqIFVzYWdlOgorICogRm9yIGZ1bmN0aW9uczoKKyAqIAorICogWW91IHNob3VsZCBhZGQgX19pbml0IGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgZnVuY3Rpb24gbmFtZSwgbGlrZToKKyAqCisgKiBzdGF0aWMgdm9pZCBfX2luaXQgaW5pdG1lKGludCB4LCBpbnQgeSkKKyAqIHsKKyAqICAgIGV4dGVybiBpbnQgejsgeiA9IHggKiB5OworICogfQorICoKKyAqIElmIHRoZSBmdW5jdGlvbiBoYXMgYSBwcm90b3R5cGUgc29tZXdoZXJlLCB5b3UgY2FuIGFsc28gYWRkCisgKiBfX2luaXQgYmV0d2VlbiBjbG9zaW5nIGJyYWNlIG9mIHRoZSBwcm90b3R5cGUgYW5kIHNlbWljb2xvbjoKKyAqCisgKiBleHRlcm4gaW50IGluaXRpYWxpemVfZm9vYmFyX2RldmljZShpbnQsIGludCwgaW50KSBfX2luaXQ7CisgKgorICogRm9yIGluaXRpYWxpemVkIGRhdGE6CisgKiBZb3Ugc2hvdWxkIGluc2VydCBfX2luaXRkYXRhIGJldHdlZW4gdGhlIHZhcmlhYmxlIG5hbWUgYW5kIGVxdWFsCisgKiBzaWduIGZvbGxvd2VkIGJ5IHZhbHVlLCBlLmcuOgorICoKKyAqIHN0YXRpYyBpbnQgaW5pdF92YXJpYWJsZSBfX2luaXRkYXRhID0gMDsKKyAqIHN0YXRpYyBjaGFyIGxpbnV4X2xvZ29bXSBfX2luaXRkYXRhID0geyAweDMyLCAweDM2LCAuLi4gfTsKKyAqCisgKiBEb24ndCBmb3JnZXQgdG8gaW5pdGlhbGl6ZSBkYXRhIG5vdCBhdCBmaWxlIHNjb3BlLCBpLmUuIHdpdGhpbiBhIGZ1bmN0aW9uLAorICogYXMgZ2NjIG90aGVyd2lzZSBwdXRzIHRoZSBkYXRhIGludG8gdGhlIGJzcyBzZWN0aW9uIGFuZCBub3QgaW50byB0aGUgaW5pdAorICogc2VjdGlvbi4KKyAqIAorICogQWxzbyBub3RlLCB0aGF0IHRoaXMgZGF0YSBjYW5ub3QgYmUgImNvbnN0Ii4KKyAqLworCisvKiBUaGVzZSBhcmUgZm9yIGV2ZXJ5Ym9keSAoYWx0aG91Z2ggbm90IGFsbCBhcmNocyB3aWxsIGFjdHVhbGx5CisgICBkaXNjYXJkIGl0IGluIG1vZHVsZXMpICovCisjZGVmaW5lIF9faW5pdAkJX19hdHRyaWJ1dGVfXyAoKF9fc2VjdGlvbl9fICgiLmluaXQudGV4dCIpKSkKKyNkZWZpbmUgX19pbml0ZGF0YQlfX2F0dHJpYnV0ZV9fICgoX19zZWN0aW9uX18gKCIuaW5pdC5kYXRhIikpKQorI2RlZmluZSBfX2V4aXRkYXRhCV9fYXR0cmlidXRlX18gKChfX3NlY3Rpb25fXygiLmV4aXQuZGF0YSIpKSkKKyNkZWZpbmUgX19leGl0X2NhbGwJX19hdHRyaWJ1dGVfdXNlZF9fIF9fYXR0cmlidXRlX18gKChfX3NlY3Rpb25fXyAoIi5leGl0Y2FsbC5leGl0IikpKQorCisjaWZkZWYgTU9EVUxFCisjZGVmaW5lIF9fZXhpdAkJX19hdHRyaWJ1dGVfXyAoKF9fc2VjdGlvbl9fKCIuZXhpdC50ZXh0IikpKQorI2Vsc2UKKyNkZWZpbmUgX19leGl0CQlfX2F0dHJpYnV0ZV91c2VkX18gX19hdHRyaWJ1dGVfXyAoKF9fc2VjdGlvbl9fKCIuZXhpdC50ZXh0IikpKQorI2VuZGlmCisKKy8qIEZvciBhc3NlbWJseSByb3V0aW5lcyAqLworI2RlZmluZSBfX0lOSVQJCS5zZWN0aW9uCSIuaW5pdC50ZXh0IiwiYXgiCisjZGVmaW5lIF9fRklOSVQJCS5wcmV2aW91cworI2RlZmluZSBfX0lOSVREQVRBCS5zZWN0aW9uCSIuaW5pdC5kYXRhIiwiYXciCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisvKgorICogVXNlZCBmb3IgaW5pdGlhbGl6YXRpb24gY2FsbHMuLgorICovCit0eXBlZGVmIGludCAoKmluaXRjYWxsX3QpKHZvaWQpOwordHlwZWRlZiB2b2lkICgqZXhpdGNhbGxfdCkodm9pZCk7CisKK2V4dGVybiBpbml0Y2FsbF90IF9fY29uX2luaXRjYWxsX3N0YXJ0W10sIF9fY29uX2luaXRjYWxsX2VuZFtdOworZXh0ZXJuIGluaXRjYWxsX3QgX19zZWN1cml0eV9pbml0Y2FsbF9zdGFydFtdLCBfX3NlY3VyaXR5X2luaXRjYWxsX2VuZFtdOworCisvKiBEZWZpbmVkIGluIGluaXQvbWFpbi5jICovCitleHRlcm4gY2hhciBzYXZlZF9jb21tYW5kX2xpbmVbXTsKKyNlbmRpZgorICAKKyNpZm5kZWYgTU9EVUxFCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKy8qIGluaXRjYWxscyBhcmUgbm93IGdyb3VwZWQgYnkgZnVuY3Rpb25hbGl0eSBpbnRvIHNlcGFyYXRlIAorICogc3Vic2VjdGlvbnMuIE9yZGVyaW5nIGluc2lkZSB0aGUgc3Vic2VjdGlvbnMgaXMgZGV0ZXJtaW5lZAorICogYnkgbGluayBvcmRlci4gCisgKiBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIGluaXRjYWxsKCkgcHV0cyB0aGUgY2FsbCBpbiAKKyAqIHRoZSBkZXZpY2UgaW5pdCBzdWJzZWN0aW9uLgorICovCisKKyNkZWZpbmUgX19kZWZpbmVfaW5pdGNhbGwobGV2ZWwsZm4pIFwKKwlzdGF0aWMgaW5pdGNhbGxfdCBfX2luaXRjYWxsXyMjZm4gX19hdHRyaWJ1dGVfdXNlZF9fIFwKKwlfX2F0dHJpYnV0ZV9fKChfX3NlY3Rpb25fXygiLmluaXRjYWxsIiBsZXZlbCAiLmluaXQiKSkpID0gZm4KKworI2RlZmluZSBjb3JlX2luaXRjYWxsKGZuKQkJX19kZWZpbmVfaW5pdGNhbGwoIjEiLGZuKQorI2RlZmluZSBwb3N0Y29yZV9pbml0Y2FsbChmbikJCV9fZGVmaW5lX2luaXRjYWxsKCIyIixmbikKKyNkZWZpbmUgYXJjaF9pbml0Y2FsbChmbikJCV9fZGVmaW5lX2luaXRjYWxsKCIzIixmbikKKyNkZWZpbmUgc3Vic3lzX2luaXRjYWxsKGZuKQkJX19kZWZpbmVfaW5pdGNhbGwoIjQiLGZuKQorI2RlZmluZSBmc19pbml0Y2FsbChmbikJCQlfX2RlZmluZV9pbml0Y2FsbCgiNSIsZm4pCisjZGVmaW5lIGRldmljZV9pbml0Y2FsbChmbikJCV9fZGVmaW5lX2luaXRjYWxsKCI2IixmbikKKyNkZWZpbmUgbGF0ZV9pbml0Y2FsbChmbikJCV9fZGVmaW5lX2luaXRjYWxsKCI3IixmbikKKworI2RlZmluZSBfX2luaXRjYWxsKGZuKSBkZXZpY2VfaW5pdGNhbGwoZm4pCisKKyNkZWZpbmUgX19leGl0Y2FsbChmbikgXAorCXN0YXRpYyBleGl0Y2FsbF90IF9fZXhpdGNhbGxfIyNmbiBfX2V4aXRfY2FsbCA9IGZuCisKKyNkZWZpbmUgY29uc29sZV9pbml0Y2FsbChmbikgXAorCXN0YXRpYyBpbml0Y2FsbF90IF9faW5pdGNhbGxfIyNmbiBcCisJX19hdHRyaWJ1dGVfdXNlZF9fIF9fYXR0cmlidXRlX18oKF9fc2VjdGlvbl9fKCIuY29uX2luaXRjYWxsLmluaXQiKSkpPWZuCisKKyNkZWZpbmUgc2VjdXJpdHlfaW5pdGNhbGwoZm4pIFwKKwlzdGF0aWMgaW5pdGNhbGxfdCBfX2luaXRjYWxsXyMjZm4gXAorCV9fYXR0cmlidXRlX3VzZWRfXyBfX2F0dHJpYnV0ZV9fKChfX3NlY3Rpb25fXygiLnNlY3VyaXR5X2luaXRjYWxsLmluaXQiKSkpID0gZm4KKworc3RydWN0IG9ic19rZXJuZWxfcGFyYW0geworCWNvbnN0IGNoYXIgKnN0cjsKKwlpbnQgKCpzZXR1cF9mdW5jKShjaGFyICopOworCWludCBlYXJseTsKK307CisKKy8qCisgKiBPbmx5IGZvciByZWFsbHkgY29yZSBjb2RlLiAgU2VlIG1vZHVsZXBhcmFtLmggZm9yIHRoZSBub3JtYWwgd2F5LgorICoKKyAqIEZvcmNlIHRoZSBhbGlnbm1lbnQgc28gdGhlIGNvbXBpbGVyIGRvZXNuJ3Qgc3BhY2UgZWxlbWVudHMgb2YgdGhlCisgKiBvYnNfa2VybmVsX3BhcmFtICJhcnJheSIgdG9vIGZhciBhcGFydCBpbiAuaW5pdC5zZXR1cC4KKyAqLworI2RlZmluZSBfX3NldHVwX3BhcmFtKHN0ciwgdW5pcXVlX2lkLCBmbiwgZWFybHkpCQkJXAorCXN0YXRpYyBjaGFyIF9fc2V0dXBfc3RyXyMjdW5pcXVlX2lkW10gX19pbml0ZGF0YSA9IHN0cjsJXAorCXN0YXRpYyBzdHJ1Y3Qgb2JzX2tlcm5lbF9wYXJhbSBfX3NldHVwXyMjdW5pcXVlX2lkCVwKKwkJX19hdHRyaWJ1dGVfdXNlZF9fCQkJCVwKKwkJX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIi5pbml0LnNldHVwIikpKQlcCisJCV9fYXR0cmlidXRlX18oKGFsaWduZWQoKHNpemVvZihsb25nKSkpKSkJXAorCQk9IHsgX19zZXR1cF9zdHJfIyN1bmlxdWVfaWQsIGZuLCBlYXJseSB9CisKKyNkZWZpbmUgX19zZXR1cF9udWxsX3BhcmFtKHN0ciwgdW5pcXVlX2lkKQkJCVwKKwlfX3NldHVwX3BhcmFtKHN0ciwgdW5pcXVlX2lkLCBOVUxMLCAwKQorCisjZGVmaW5lIF9fc2V0dXAoc3RyLCBmbikJCQkJCVwKKwlfX3NldHVwX3BhcmFtKHN0ciwgZm4sIGZuLCAwKQorCisjZGVmaW5lIF9fb2Jzb2xldGVfc2V0dXAoc3RyKQkJCQkJXAorCV9fc2V0dXBfbnVsbF9wYXJhbShzdHIsIF9fTElORV9fKQorCisvKiBOT1RFOiBmbiBpcyBhcyBwZXIgbW9kdWxlX3BhcmFtLCBub3QgX19zZXR1cCEgIEVtaXRzIHdhcm5pbmcgaWYgZm4KKyAqIHJldHVybnMgbm9uLXplcm8uICovCisjZGVmaW5lIGVhcmx5X3BhcmFtKHN0ciwgZm4pCQkJCQlcCisJX19zZXR1cF9wYXJhbShzdHIsIGZuLCBmbiwgMSkKKworLyogUmVsaWVzIG9uIHNhdmVkX2NvbW1hbmRfbGluZSBiZWluZyBzZXQgKi8KK3ZvaWQgX19pbml0IHBhcnNlX2Vhcmx5X3BhcmFtKHZvaWQpOworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisvKioKKyAqIG1vZHVsZV9pbml0KCkgLSBkcml2ZXIgaW5pdGlhbGl6YXRpb24gZW50cnkgcG9pbnQKKyAqIEB4OiBmdW5jdGlvbiB0byBiZSBydW4gYXQga2VybmVsIGJvb3QgdGltZSBvciBtb2R1bGUgaW5zZXJ0aW9uCisgKiAKKyAqIG1vZHVsZV9pbml0KCkgd2lsbCBlaXRoZXIgYmUgY2FsbGVkIGR1cmluZyBkb19pbml0Y2FsbHMgKGlmCisgKiBidWlsdGluKSBvciBhdCBtb2R1bGUgaW5zZXJ0aW9uIHRpbWUgKGlmIGEgbW9kdWxlKS4gIFRoZXJlIGNhbiBvbmx5CisgKiBiZSBvbmUgcGVyIG1vZHVsZS4KKyAqLworI2RlZmluZSBtb2R1bGVfaW5pdCh4KQlfX2luaXRjYWxsKHgpOworCisvKioKKyAqIG1vZHVsZV9leGl0KCkgLSBkcml2ZXIgZXhpdCBlbnRyeSBwb2ludAorICogQHg6IGZ1bmN0aW9uIHRvIGJlIHJ1biB3aGVuIGRyaXZlciBpcyByZW1vdmVkCisgKiAKKyAqIG1vZHVsZV9leGl0KCkgd2lsbCB3cmFwIHRoZSBkcml2ZXIgY2xlYW4tdXAgY29kZQorICogd2l0aCBjbGVhbnVwX21vZHVsZSgpIHdoZW4gdXNlZCB3aXRoIHJtbW9kIHdoZW4KKyAqIHRoZSBkcml2ZXIgaXMgYSBtb2R1bGUuICBJZiB0aGUgZHJpdmVyIGlzIHN0YXRpY2FsbHkKKyAqIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCwgbW9kdWxlX2V4aXQoKSBoYXMgbm8gZWZmZWN0LgorICogVGhlcmUgY2FuIG9ubHkgYmUgb25lIHBlciBtb2R1bGUuCisgKi8KKyNkZWZpbmUgbW9kdWxlX2V4aXQoeCkJX19leGl0Y2FsbCh4KTsKKworI2Vsc2UgLyogTU9EVUxFICovCisKKy8qIERvbid0IHVzZSB0aGVzZSBpbiBtb2R1bGVzLCBidXQgc29tZSBwZW9wbGUgZG8uLi4gKi8KKyNkZWZpbmUgY29yZV9pbml0Y2FsbChmbikJCW1vZHVsZV9pbml0KGZuKQorI2RlZmluZSBwb3N0Y29yZV9pbml0Y2FsbChmbikJCW1vZHVsZV9pbml0KGZuKQorI2RlZmluZSBhcmNoX2luaXRjYWxsKGZuKQkJbW9kdWxlX2luaXQoZm4pCisjZGVmaW5lIHN1YnN5c19pbml0Y2FsbChmbikJCW1vZHVsZV9pbml0KGZuKQorI2RlZmluZSBmc19pbml0Y2FsbChmbikJCQltb2R1bGVfaW5pdChmbikKKyNkZWZpbmUgZGV2aWNlX2luaXRjYWxsKGZuKQkJbW9kdWxlX2luaXQoZm4pCisjZGVmaW5lIGxhdGVfaW5pdGNhbGwoZm4pCQltb2R1bGVfaW5pdChmbikKKworI2RlZmluZSBzZWN1cml0eV9pbml0Y2FsbChmbikJCW1vZHVsZV9pbml0KGZuKQorCisvKiBUaGVzZSBtYWNyb3MgY3JlYXRlIGEgZHVtbXkgaW5saW5lOiBnY2MgMi45eCBkb2VzIG5vdCBjb3VudCBhbGlhcworIGFzIHVzYWdlLCBoZW5jZSB0aGUgYHVudXNlZCBmdW5jdGlvbicgd2FybmluZyB3aGVuIF9faW5pdCBmdW5jdGlvbnMKKyBhcmUgZGVjbGFyZWQgc3RhdGljLiBXZSB1c2UgdGhlIGR1bW15IF9fKl9tb2R1bGVfaW5saW5lIGZ1bmN0aW9ucworIGJvdGggdG8ga2lsbCB0aGUgd2FybmluZyBhbmQgY2hlY2sgdGhlIHR5cGUgb2YgdGhlIGluaXQvY2xlYW51cAorIGZ1bmN0aW9uLiAqLworCisvKiBFYWNoIG1vZHVsZSBtdXN0IHVzZSBvbmUgbW9kdWxlX2luaXQoKSwgb3Igb25lIG5vX21vZHVsZV9pbml0ICovCisjZGVmaW5lIG1vZHVsZV9pbml0KGluaXRmbikJCQkJCVwKKwlzdGF0aWMgaW5saW5lIGluaXRjYWxsX3QgX19pbml0dGVzdCh2b2lkKQkJXAorCXsgcmV0dXJuIGluaXRmbjsgfQkJCQkJXAorCWludCBpbml0X21vZHVsZSh2b2lkKSBfX2F0dHJpYnV0ZV9fKChhbGlhcygjaW5pdGZuKSkpOworCisvKiBUaGlzIGlzIG9ubHkgcmVxdWlyZWQgaWYgeW91IHdhbnQgdG8gYmUgdW5sb2FkYWJsZS4gKi8KKyNkZWZpbmUgbW9kdWxlX2V4aXQoZXhpdGZuKQkJCQkJXAorCXN0YXRpYyBpbmxpbmUgZXhpdGNhbGxfdCBfX2V4aXR0ZXN0KHZvaWQpCQlcCisJeyByZXR1cm4gZXhpdGZuOyB9CQkJCQlcCisJdm9pZCBjbGVhbnVwX21vZHVsZSh2b2lkKSBfX2F0dHJpYnV0ZV9fKChhbGlhcygjZXhpdGZuKSkpOworCisjZGVmaW5lIF9fc2V0dXBfcGFyYW0oc3RyLCB1bmlxdWVfaWQsIGZuKQkvKiBub3RoaW5nICovCisjZGVmaW5lIF9fc2V0dXBfbnVsbF9wYXJhbShzdHIsIHVuaXF1ZV9pZCkgCS8qIG5vdGhpbmcgKi8KKyNkZWZpbmUgX19zZXR1cChzdHIsIGZ1bmMpIAkJCS8qIG5vdGhpbmcgKi8KKyNkZWZpbmUgX19vYnNvbGV0ZV9zZXR1cChzdHIpIAkJCS8qIG5vdGhpbmcgKi8KKyNlbmRpZgorCisvKiBEYXRhIG1hcmtlZCBub3QgdG8gYmUgc2F2ZWQgYnkgc29mdHdhcmVfc3VzcGVuZCgpICovCisjZGVmaW5lIF9fbm9zYXZlZGF0YSBfX2F0dHJpYnV0ZV9fICgoX19zZWN0aW9uX18gKCIuZGF0YS5ub3NhdmUiKSkpCisKKy8qIFRoaXMgbWVhbnMgImNhbiBiZSBpbml0IGlmIG5vIG1vZHVsZSBzdXBwb3J0LCBvdGhlcndpc2UgbW9kdWxlIGxvYWQKKyAgIG1heSBjYWxsIGl0LiIgKi8KKyNpZmRlZiBDT05GSUdfTU9EVUxFUworI2RlZmluZSBfX2luaXRfb3JfbW9kdWxlCisjZGVmaW5lIF9faW5pdGRhdGFfb3JfbW9kdWxlCisjZWxzZQorI2RlZmluZSBfX2luaXRfb3JfbW9kdWxlIF9faW5pdAorI2RlZmluZSBfX2luaXRkYXRhX29yX21vZHVsZSBfX2luaXRkYXRhCisjZW5kaWYgLypDT05GSUdfTU9EVUxFUyovCisKKyNpZmRlZiBDT05GSUdfSE9UUExVRworI2RlZmluZSBfX2RldmluaXQKKyNkZWZpbmUgX19kZXZpbml0ZGF0YQorI2RlZmluZSBfX2RldmV4aXQKKyNkZWZpbmUgX19kZXZleGl0ZGF0YQorI2Vsc2UKKyNkZWZpbmUgX19kZXZpbml0IF9faW5pdAorI2RlZmluZSBfX2RldmluaXRkYXRhIF9faW5pdGRhdGEKKyNkZWZpbmUgX19kZXZleGl0IF9fZXhpdAorI2RlZmluZSBfX2RldmV4aXRkYXRhIF9fZXhpdGRhdGEKKyNlbmRpZgorCisvKiBGdW5jdGlvbnMgbWFya2VkIGFzIF9fZGV2ZXhpdCBtYXkgYmUgZGlzY2FyZGVkIGF0IGtlcm5lbCBsaW5rIHRpbWUsIGRlcGVuZGluZworICAgb24gY29uZmlnIG9wdGlvbnMuICBOZXdlciB2ZXJzaW9ucyBvZiBiaW51dGlscyBkZXRlY3QgcmVmZXJlbmNlcyBmcm9tCisgICByZXRhaW5lZCBzZWN0aW9ucyB0byBkaXNjYXJkZWQgc2VjdGlvbnMgYW5kIGZsYWcgYW4gZXJyb3IuICBQb2ludGVycyB0bworICAgX19kZXZleGl0IGZ1bmN0aW9ucyBtdXN0IHVzZSBfX2RldmV4aXRfcChmdW5jdGlvbl9uYW1lKSwgdGhlIHdyYXBwZXIgd2lsbAorICAgaW5zZXJ0IGVpdGhlciB0aGUgZnVuY3Rpb25fbmFtZSBvciBOVUxMLCBkZXBlbmRpbmcgb24gdGhlIGNvbmZpZyBvcHRpb25zLgorICovCisjaWYgZGVmaW5lZChNT0RVTEUpIHx8IGRlZmluZWQoQ09ORklHX0hPVFBMVUcpCisjZGVmaW5lIF9fZGV2ZXhpdF9wKHgpIHgKKyNlbHNlCisjZGVmaW5lIF9fZGV2ZXhpdF9wKHgpIE5VTEwKKyNlbmRpZgorCisjaWZkZWYgTU9EVUxFCisjZGVmaW5lIF9fZXhpdF9wKHgpIHgKKyNlbHNlCisjZGVmaW5lIF9fZXhpdF9wKHgpIE5VTEwKKyNlbmRpZgorCisjZW5kaWYgLyogX0xJTlVYX0lOSVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbml0X3Rhc2suaCBiL2luY2x1ZGUvbGludXgvaW5pdF90YXNrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZhOGMxYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvaW5pdF90YXNrLmgKQEAgLTAsMCArMSwxMjUgQEAKKyNpZm5kZWYgX0xJTlVYX19JTklUX1RBU0tfSAorI2RlZmluZSBfTElOVVhfX0lOSVRfVEFTS19ICisKKyNpbmNsdWRlIDxsaW51eC9maWxlLmg+CisKKyNkZWZpbmUgSU5JVF9GSUxFUyBcCit7IAkJCQkJCQlcCisJLmNvdW50CQk9IEFUT01JQ19JTklUKDEpLCAJCVwKKwkuZmlsZV9sb2NrCT0gU1BJTl9MT0NLX1VOTE9DS0VELCAJCVwKKwkubWF4X2Zkcwk9IE5SX09QRU5fREVGQVVMVCwgCQlcCisJLm1heF9mZHNldAk9IF9fRkRfU0VUU0laRSwgCQlcCisJLm5leHRfZmQJPSAwLCAJCQkJXAorCS5mZAkJPSAmaW5pdF9maWxlcy5mZF9hcnJheVswXSwgCVwKKwkuY2xvc2Vfb25fZXhlYwk9ICZpbml0X2ZpbGVzLmNsb3NlX29uX2V4ZWNfaW5pdCwgXAorCS5vcGVuX2Zkcwk9ICZpbml0X2ZpbGVzLm9wZW5fZmRzX2luaXQsIAlcCisJLmNsb3NlX29uX2V4ZWNfaW5pdCA9IHsgeyAwLCB9IH0sIAkJXAorCS5vcGVuX2Zkc19pbml0CT0geyB7IDAsIH0gfSwgCQkJXAorCS5mZF9hcnJheQk9IHsgTlVMTCwgfSAJCQlcCit9CisKKyNkZWZpbmUgSU5JVF9LSU9DVFgobmFtZSwgd2hpY2hfbW0pIFwKK3sJCQkJCQkJXAorCS51c2VycwkJPSBBVE9NSUNfSU5JVCgxKSwJCVwKKwkuZGVhZAkJPSAwLAkJCQlcCisJLm1tCQk9ICZ3aGljaF9tbSwJCQlcCisJLnVzZXJfaWQJPSAwLAkJCQlcCisJLm5leHQJCT0gTlVMTCwJCQkJXAorCS53YWl0CQk9IF9fV0FJVF9RVUVVRV9IRUFEX0lOSVRJQUxJWkVSKG5hbWUud2FpdCksIFwKKwkuY3R4X2xvY2sJPSBTUElOX0xPQ0tfVU5MT0NLRUQsCQlcCisJLnJlcXNfYWN0aXZlCT0gMFUsCQkJCVwKKwkubWF4X3JlcXMJPSB+MFUsCQkJCVwKK30KKworI2RlZmluZSBJTklUX01NKG5hbWUpIFwKK3sJCQkgCQkJCQlcCisJLm1tX3JiCQk9IFJCX1JPT1QsCQkJCVwKKwkucGdkCQk9IHN3YXBwZXJfcGdfZGlyLCAJCQlcCisJLm1tX3VzZXJzCT0gQVRPTUlDX0lOSVQoMiksIAkJCVwKKwkubW1fY291bnQJPSBBVE9NSUNfSU5JVCgxKSwgCQkJXAorCS5tbWFwX3NlbQk9IF9fUldTRU1fSU5JVElBTElaRVIobmFtZS5tbWFwX3NlbSksCVwKKwkucGFnZV90YWJsZV9sb2NrID0gIFNQSU5fTE9DS19VTkxPQ0tFRCwgCQlcCisJLm1tbGlzdAkJPSBMSVNUX0hFQURfSU5JVChuYW1lLm1tbGlzdCksCQlcCisJLmNwdV92bV9tYXNrCT0gQ1BVX01BU0tfQUxMLAkJCQlcCisJLmRlZmF1bHRfa2lvY3R4ID0gSU5JVF9LSU9DVFgobmFtZS5kZWZhdWx0X2tpb2N0eCwgbmFtZSksCVwKK30KKworI2RlZmluZSBJTklUX1NJR05BTFMoc2lnKSB7CVwKKwkuY291bnQJCT0gQVRPTUlDX0lOSVQoMSksIAkJXAorCS53YWl0X2NobGRleGl0CT0gX19XQUlUX1FVRVVFX0hFQURfSU5JVElBTElaRVIoc2lnLndhaXRfY2hsZGV4aXQpLFwKKwkuc2hhcmVkX3BlbmRpbmcJPSB7IAkJCQlcCisJCS5saXN0ID0gTElTVF9IRUFEX0lOSVQoc2lnLnNoYXJlZF9wZW5kaW5nLmxpc3QpLAlcCisJCS5zaWduYWwgPSAge3swfX19LCBcCisJLnBvc2l4X3RpbWVycwkgPSBMSVNUX0hFQURfSU5JVChzaWcucG9zaXhfdGltZXJzKSwJCVwKKwkuY3B1X3RpbWVycwk9IElOSVRfQ1BVX1RJTUVSUyhzaWcuY3B1X3RpbWVycyksCQlcCisJLnJsaW0JCT0gSU5JVF9STElNSVRTLAkJCQkJXAorfQorCisjZGVmaW5lIElOSVRfU0lHSEFORChzaWdoYW5kKSB7CQkJCQkJXAorCS5jb3VudAkJPSBBVE9NSUNfSU5JVCgxKSwgCQkJCVwKKwkuYWN0aW9uCQk9IHsgeyB7IC5zYV9oYW5kbGVyID0gTlVMTCwgfSB9LCB9LAkJXAorCS5zaWdsb2NrCT0gU1BJTl9MT0NLX1VOTE9DS0VELCAJCQkJXAorfQorCitleHRlcm4gc3RydWN0IGdyb3VwX2luZm8gaW5pdF9ncm91cHM7CisKKy8qCisgKiAgSU5JVF9UQVNLIGlzIHVzZWQgdG8gc2V0IHVwIHRoZSBmaXJzdCB0YXNrIHRhYmxlLCB0b3VjaCBhdAorICogeW91ciBvd24gcmlzayEuIEJhc2U9MCwgbGltaXQ9MHgxZmZmZmYgKD0yTUIpCisgKi8KKyNkZWZpbmUgSU5JVF9UQVNLKHRzaykJXAorewkJCQkJCQkJCVwKKwkuc3RhdGUJCT0gMCwJCQkJCQlcCisJLnRocmVhZF9pbmZvCT0gJmluaXRfdGhyZWFkX2luZm8sCQkJCVwKKwkudXNhZ2UJCT0gQVRPTUlDX0lOSVQoMiksCQkJCVwKKwkuZmxhZ3MJCT0gMCwJCQkJCQlcCisJLmxvY2tfZGVwdGgJPSAtMSwJCQkJCQlcCisJLnByaW8JCT0gTUFYX1BSSU8tMjAsCQkJCQlcCisJLnN0YXRpY19wcmlvCT0gTUFYX1BSSU8tMjAsCQkJCQlcCisJLnBvbGljeQkJPSBTQ0hFRF9OT1JNQUwsCQkJCQlcCisJLmNwdXNfYWxsb3dlZAk9IENQVV9NQVNLX0FMTCwJCQkJCVwKKwkubW0JCT0gTlVMTCwJCQkJCQlcCisJLmFjdGl2ZV9tbQk9ICZpbml0X21tLAkJCQkJXAorCS5ydW5fbGlzdAk9IExJU1RfSEVBRF9JTklUKHRzay5ydW5fbGlzdCksCQkJXAorCS50aW1lX3NsaWNlCT0gSFosCQkJCQkJXAorCS50YXNrcwkJPSBMSVNUX0hFQURfSU5JVCh0c2sudGFza3MpLAkJCVwKKwkucHRyYWNlX2NoaWxkcmVuPSBMSVNUX0hFQURfSU5JVCh0c2sucHRyYWNlX2NoaWxkcmVuKSwJCVwKKwkucHRyYWNlX2xpc3QJPSBMSVNUX0hFQURfSU5JVCh0c2sucHRyYWNlX2xpc3QpLAkJXAorCS5yZWFsX3BhcmVudAk9ICZ0c2ssCQkJCQkJXAorCS5wYXJlbnQJCT0gJnRzaywJCQkJCQlcCisJLmNoaWxkcmVuCT0gTElTVF9IRUFEX0lOSVQodHNrLmNoaWxkcmVuKSwJCQlcCisJLnNpYmxpbmcJPSBMSVNUX0hFQURfSU5JVCh0c2suc2libGluZyksCQkJXAorCS5ncm91cF9sZWFkZXIJPSAmdHNrLAkJCQkJCVwKKwkuZ3JvdXBfaW5mbwk9ICZpbml0X2dyb3VwcywJCQkJCVwKKwkuY2FwX2VmZmVjdGl2ZQk9IENBUF9JTklUX0VGRl9TRVQsCQkJCVwKKwkuY2FwX2luaGVyaXRhYmxlID0gQ0FQX0lOSVRfSU5IX1NFVCwJCQkJXAorCS5jYXBfcGVybWl0dGVkCT0gQ0FQX0ZVTExfU0VULAkJCQkJXAorCS5rZWVwX2NhcGFiaWxpdGllcyA9IDAsCQkJCQkJXAorCS51c2VyCQk9IElOSVRfVVNFUiwJCQkJCVwKKwkuY29tbQkJPSAic3dhcHBlciIsCQkJCQlcCisJLnRocmVhZAkJPSBJTklUX1RIUkVBRCwJCQkJCVwKKwkuZnMJCT0gJmluaXRfZnMsCQkJCQlcCisJLmZpbGVzCQk9ICZpbml0X2ZpbGVzLAkJCQkJXAorCS5zaWduYWwJCT0gJmluaXRfc2lnbmFscywJCQkJXAorCS5zaWdoYW5kCT0gJmluaXRfc2lnaGFuZCwJCQkJXAorCS5wZW5kaW5nCT0gewkJCQkJCVwKKwkJLmxpc3QgPSBMSVNUX0hFQURfSU5JVCh0c2sucGVuZGluZy5saXN0KSwJCVwKKwkJLnNpZ25hbCA9IHt7MH19fSwJCQkJCVwKKwkuYmxvY2tlZAk9IHt7MH19LAkJCQkJXAorCS5hbGxvY19sb2NrCT0gU1BJTl9MT0NLX1VOTE9DS0VELAkJCQlcCisJLnByb2NfbG9jawk9IFNQSU5fTE9DS19VTkxPQ0tFRCwJCQkJXAorCS5zd2l0Y2hfbG9jawk9IFNQSU5fTE9DS19VTkxPQ0tFRCwJCQkJXAorCS5qb3VybmFsX2luZm8JPSBOVUxMLAkJCQkJCVwKKwkuY3B1X3RpbWVycwk9IElOSVRfQ1BVX1RJTUVSUyh0c2suY3B1X3RpbWVycyksCQlcCit9CisKKworI2RlZmluZSBJTklUX0NQVV9USU1FUlMoY3B1X3RpbWVycykJCQkJCVwKK3sJCQkJCQkJCQlcCisJTElTVF9IRUFEX0lOSVQoY3B1X3RpbWVyc1swXSksCQkJCQlcCisJTElTVF9IRUFEX0lOSVQoY3B1X3RpbWVyc1sxXSksCQkJCQlcCisJTElTVF9IRUFEX0lOSVQoY3B1X3RpbWVyc1syXSksCQkJCQlcCit9CisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2luaXRyZC5oIGIvaW5jbHVkZS9saW51eC9pbml0cmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTI4OWQyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9pbml0cmQuaApAQCAtMCwwICsxLDIwIEBACisKKyNkZWZpbmUgSU5JVFJEX01JTk9SIDI1MCAvKiBzaG91bGRuJ3QgY29sbGlkZSB3aXRoIC9kZXYvcmFtKiB0b28gc29vbiAuLi4gKi8KKworLyogMSA9IGxvYWQgcmFtZGlzaywgMCA9IGRvbid0IGxvYWQgKi8KK2V4dGVybiBpbnQgcmRfZG9sb2FkOworCisvKiAxID0gcHJvbXB0IGZvciByYW1kaXNrLCAwID0gZG9uJ3QgcHJvbXB0ICovCitleHRlcm4gaW50IHJkX3Byb21wdDsKKworLyogc3RhcnRpbmcgYmxvY2sgIyBvZiBpbWFnZSAqLworZXh0ZXJuIGludCByZF9pbWFnZV9zdGFydDsKKworLyogMSBpZiBpdCBpcyBub3QgYW4gZXJyb3IgaWYgaW5pdHJkX3N0YXJ0IDwgbWVtb3J5X3N0YXJ0ICovCitleHRlcm4gaW50IGluaXRyZF9iZWxvd19zdGFydF9vazsKKworLyogZnJlZV9pbml0cmRfbWVtIGFsd2F5cyBnZXRzIGNhbGxlZCB3aXRoIHRoZSBuZXh0IHR3byBhcyBhcmd1bWVudHMuLiAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW5pdHJkX3N0YXJ0LCBpbml0cmRfZW5kOworZXh0ZXJuIHZvaWQgZnJlZV9pbml0cmRfbWVtKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOworCitleHRlcm4gdW5zaWduZWQgaW50IHJlYWxfcm9vdF9kZXY7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lucHV0LmggYi9pbmNsdWRlL2xpbnV4L2lucHV0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjcwZGY4ZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvaW5wdXQuaApAQCAtMCwwICsxLDEwMTYgQEAKKyNpZm5kZWYgX0lOUFVUX0gKKyNkZWZpbmUgX0lOUFVUX0gKKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk5OS0yMDAyIFZvanRlY2ggUGF2bGlrCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjZWxzZQorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjZW5kaWYKKworLyoKKyAqIFRoZSBldmVudCBzdHJ1Y3R1cmUgaXRzZWxmCisgKi8KKworc3RydWN0IGlucHV0X2V2ZW50IHsKKwlzdHJ1Y3QgdGltZXZhbCB0aW1lOworCV9fdTE2IHR5cGU7CisJX191MTYgY29kZTsKKwlfX3MzMiB2YWx1ZTsKK307CisKKy8qCisgKiBQcm90b2NvbCB2ZXJzaW9uLgorICovCisKKyNkZWZpbmUgRVZfVkVSU0lPTgkJMHgwMTAwMDAKKworLyoKKyAqIElPQ1RMcyAoMHgwMCAtIDB4N2YpCisgKi8KKworc3RydWN0IGlucHV0X2lkIHsKKwlfX3UxNiBidXN0eXBlOworCV9fdTE2IHZlbmRvcjsKKwlfX3UxNiBwcm9kdWN0OworCV9fdTE2IHZlcnNpb247Cit9OworCitzdHJ1Y3QgaW5wdXRfYWJzaW5mbyB7CisJX19zMzIgdmFsdWU7CisJX19zMzIgbWluaW11bTsKKwlfX3MzMiBtYXhpbXVtOworCV9fczMyIGZ1eno7CisJX19zMzIgZmxhdDsKK307CisKKyNkZWZpbmUgRVZJT0NHVkVSU0lPTgkJX0lPUignRScsIDB4MDEsIGludCkJCQkvKiBnZXQgZHJpdmVyIHZlcnNpb24gKi8KKyNkZWZpbmUgRVZJT0NHSUQJCV9JT1IoJ0UnLCAweDAyLCBzdHJ1Y3QgaW5wdXRfaWQpCS8qIGdldCBkZXZpY2UgSUQgKi8KKyNkZWZpbmUgRVZJT0NHS0VZQ09ERQkJX0lPUignRScsIDB4MDQsIGludFsyXSkJCQkvKiBnZXQga2V5Y29kZSAqLworI2RlZmluZSBFVklPQ1NLRVlDT0RFCQlfSU9XKCdFJywgMHgwNCwgaW50WzJdKQkJCS8qIHNldCBrZXljb2RlICovCisKKyNkZWZpbmUgRVZJT0NHTkFNRShsZW4pCQlfSU9DKF9JT0NfUkVBRCwgJ0UnLCAweDA2LCBsZW4pCQkvKiBnZXQgZGV2aWNlIG5hbWUgKi8KKyNkZWZpbmUgRVZJT0NHUEhZUyhsZW4pCQlfSU9DKF9JT0NfUkVBRCwgJ0UnLCAweDA3LCBsZW4pCQkvKiBnZXQgcGh5c2ljYWwgbG9jYXRpb24gKi8KKyNkZWZpbmUgRVZJT0NHVU5JUShsZW4pCQlfSU9DKF9JT0NfUkVBRCwgJ0UnLCAweDA4LCBsZW4pCQkvKiBnZXQgdW5pcXVlIGlkZW50aWZpZXIgKi8KKworI2RlZmluZSBFVklPQ0dLRVkobGVuKQkJX0lPQyhfSU9DX1JFQUQsICdFJywgMHgxOCwgbGVuKQkJLyogZ2V0IGdsb2JhbCBrZXlzdGF0ZSAqLworI2RlZmluZSBFVklPQ0dMRUQobGVuKQkJX0lPQyhfSU9DX1JFQUQsICdFJywgMHgxOSwgbGVuKQkJLyogZ2V0IGFsbCBMRURzICovCisjZGVmaW5lIEVWSU9DR1NORChsZW4pCQlfSU9DKF9JT0NfUkVBRCwgJ0UnLCAweDFhLCBsZW4pCQkvKiBnZXQgYWxsIHNvdW5kcyBzdGF0dXMgKi8KKworI2RlZmluZSBFVklPQ0dCSVQoZXYsbGVuKQlfSU9DKF9JT0NfUkVBRCwgJ0UnLCAweDIwICsgZXYsIGxlbikJLyogZ2V0IGV2ZW50IGJpdHMgKi8KKyNkZWZpbmUgRVZJT0NHQUJTKGFicykJCV9JT1IoJ0UnLCAweDQwICsgYWJzLCBzdHJ1Y3QgaW5wdXRfYWJzaW5mbykJCS8qIGdldCBhYnMgdmFsdWUvbGltaXRzICovCisjZGVmaW5lIEVWSU9DU0FCUyhhYnMpCQlfSU9XKCdFJywgMHhjMCArIGFicywgc3RydWN0IGlucHV0X2Fic2luZm8pCQkvKiBzZXQgYWJzIHZhbHVlL2xpbWl0cyAqLworCisjZGVmaW5lIEVWSU9DU0ZGCQlfSU9DKF9JT0NfV1JJVEUsICdFJywgMHg4MCwgc2l6ZW9mKHN0cnVjdCBmZl9lZmZlY3QpKQkvKiBzZW5kIGEgZm9yY2UgZWZmZWN0IHRvIGEgZm9yY2UgZmVlZGJhY2sgZGV2aWNlICovCisjZGVmaW5lIEVWSU9DUk1GRgkJX0lPVygnRScsIDB4ODEsIGludCkJCQkvKiBFcmFzZSBhIGZvcmNlIGVmZmVjdCAqLworI2RlZmluZSBFVklPQ0dFRkZFQ1RTCQlfSU9SKCdFJywgMHg4NCwgaW50KQkJCS8qIFJlcG9ydCBudW1iZXIgb2YgZWZmZWN0cyBwbGF5YWJsZSBhdCB0aGUgc2FtZSB0aW1lICovCisKKyNkZWZpbmUgRVZJT0NHUkFCCQlfSU9XKCdFJywgMHg5MCwgaW50KQkJCS8qIEdyYWIvUmVsZWFzZSBkZXZpY2UgKi8KKworLyoKKyAqIEV2ZW50IHR5cGVzCisgKi8KKworI2RlZmluZSBFVl9TWU4JCQkweDAwCisjZGVmaW5lIEVWX0tFWQkJCTB4MDEKKyNkZWZpbmUgRVZfUkVMCQkJMHgwMgorI2RlZmluZSBFVl9BQlMJCQkweDAzCisjZGVmaW5lIEVWX01TQwkJCTB4MDQKKyNkZWZpbmUgRVZfTEVECQkJMHgxMQorI2RlZmluZSBFVl9TTkQJCQkweDEyCisjZGVmaW5lIEVWX1JFUAkJCTB4MTQKKyNkZWZpbmUgRVZfRkYJCQkweDE1CisjZGVmaW5lIEVWX1BXUgkJCTB4MTYKKyNkZWZpbmUgRVZfRkZfU1RBVFVTCQkweDE3CisjZGVmaW5lIEVWX01BWAkJCTB4MWYKKworLyoKKyAqIFN5bmNocm9uaXphdGlvbiBldmVudHMuCisgKi8KKworI2RlZmluZSBTWU5fUkVQT1JUCQkwCisjZGVmaW5lIFNZTl9DT05GSUcJCTEKKworLyoKKyAqIEtleXMgYW5kIGJ1dHRvbnMKKyAqLworCisjZGVmaW5lIEtFWV9SRVNFUlZFRAkJMAorI2RlZmluZSBLRVlfRVNDCQkJMQorI2RlZmluZSBLRVlfMQkJCTIKKyNkZWZpbmUgS0VZXzIJCQkzCisjZGVmaW5lIEtFWV8zCQkJNAorI2RlZmluZSBLRVlfNAkJCTUKKyNkZWZpbmUgS0VZXzUJCQk2CisjZGVmaW5lIEtFWV82CQkJNworI2RlZmluZSBLRVlfNwkJCTgKKyNkZWZpbmUgS0VZXzgJCQk5CisjZGVmaW5lIEtFWV85CQkJMTAKKyNkZWZpbmUgS0VZXzAJCQkxMQorI2RlZmluZSBLRVlfTUlOVVMJCTEyCisjZGVmaW5lIEtFWV9FUVVBTAkJMTMKKyNkZWZpbmUgS0VZX0JBQ0tTUEFDRQkJMTQKKyNkZWZpbmUgS0VZX1RBQgkJCTE1CisjZGVmaW5lIEtFWV9RCQkJMTYKKyNkZWZpbmUgS0VZX1cJCQkxNworI2RlZmluZSBLRVlfRQkJCTE4CisjZGVmaW5lIEtFWV9SCQkJMTkKKyNkZWZpbmUgS0VZX1QJCQkyMAorI2RlZmluZSBLRVlfWQkJCTIxCisjZGVmaW5lIEtFWV9VCQkJMjIKKyNkZWZpbmUgS0VZX0kJCQkyMworI2RlZmluZSBLRVlfTwkJCTI0CisjZGVmaW5lIEtFWV9QCQkJMjUKKyNkZWZpbmUgS0VZX0xFRlRCUkFDRQkJMjYKKyNkZWZpbmUgS0VZX1JJR0hUQlJBQ0UJCTI3CisjZGVmaW5lIEtFWV9FTlRFUgkJMjgKKyNkZWZpbmUgS0VZX0xFRlRDVFJMCQkyOQorI2RlZmluZSBLRVlfQQkJCTMwCisjZGVmaW5lIEtFWV9TCQkJMzEKKyNkZWZpbmUgS0VZX0QJCQkzMgorI2RlZmluZSBLRVlfRgkJCTMzCisjZGVmaW5lIEtFWV9HCQkJMzQKKyNkZWZpbmUgS0VZX0gJCQkzNQorI2RlZmluZSBLRVlfSgkJCTM2CisjZGVmaW5lIEtFWV9LCQkJMzcKKyNkZWZpbmUgS0VZX0wJCQkzOAorI2RlZmluZSBLRVlfU0VNSUNPTE9OCQkzOQorI2RlZmluZSBLRVlfQVBPU1RST1BIRQkJNDAKKyNkZWZpbmUgS0VZX0dSQVZFCQk0MQorI2RlZmluZSBLRVlfTEVGVFNISUZUCQk0MgorI2RlZmluZSBLRVlfQkFDS1NMQVNICQk0MworI2RlZmluZSBLRVlfWgkJCTQ0CisjZGVmaW5lIEtFWV9YCQkJNDUKKyNkZWZpbmUgS0VZX0MJCQk0NgorI2RlZmluZSBLRVlfVgkJCTQ3CisjZGVmaW5lIEtFWV9CCQkJNDgKKyNkZWZpbmUgS0VZX04JCQk0OQorI2RlZmluZSBLRVlfTQkJCTUwCisjZGVmaW5lIEtFWV9DT01NQQkJNTEKKyNkZWZpbmUgS0VZX0RPVAkJCTUyCisjZGVmaW5lIEtFWV9TTEFTSAkJNTMKKyNkZWZpbmUgS0VZX1JJR0hUU0hJRlQJCTU0CisjZGVmaW5lIEtFWV9LUEFTVEVSSVNLCQk1NQorI2RlZmluZSBLRVlfTEVGVEFMVAkJNTYKKyNkZWZpbmUgS0VZX1NQQUNFCQk1NworI2RlZmluZSBLRVlfQ0FQU0xPQ0sJCTU4CisjZGVmaW5lIEtFWV9GMQkJCTU5CisjZGVmaW5lIEtFWV9GMgkJCTYwCisjZGVmaW5lIEtFWV9GMwkJCTYxCisjZGVmaW5lIEtFWV9GNAkJCTYyCisjZGVmaW5lIEtFWV9GNQkJCTYzCisjZGVmaW5lIEtFWV9GNgkJCTY0CisjZGVmaW5lIEtFWV9GNwkJCTY1CisjZGVmaW5lIEtFWV9GOAkJCTY2CisjZGVmaW5lIEtFWV9GOQkJCTY3CisjZGVmaW5lIEtFWV9GMTAJCQk2OAorI2RlZmluZSBLRVlfTlVNTE9DSwkJNjkKKyNkZWZpbmUgS0VZX1NDUk9MTExPQ0sJCTcwCisjZGVmaW5lIEtFWV9LUDcJCQk3MQorI2RlZmluZSBLRVlfS1A4CQkJNzIKKyNkZWZpbmUgS0VZX0tQOQkJCTczCisjZGVmaW5lIEtFWV9LUE1JTlVTCQk3NAorI2RlZmluZSBLRVlfS1A0CQkJNzUKKyNkZWZpbmUgS0VZX0tQNQkJCTc2CisjZGVmaW5lIEtFWV9LUDYJCQk3NworI2RlZmluZSBLRVlfS1BQTFVTCQk3OAorI2RlZmluZSBLRVlfS1AxCQkJNzkKKyNkZWZpbmUgS0VZX0tQMgkJCTgwCisjZGVmaW5lIEtFWV9LUDMJCQk4MQorI2RlZmluZSBLRVlfS1AwCQkJODIKKyNkZWZpbmUgS0VZX0tQRE9UCQk4MworCisjZGVmaW5lIEtFWV9aRU5LQUtVSEFOS0FLVQk4NQorI2RlZmluZSBLRVlfMTAyTkQJCTg2CisjZGVmaW5lIEtFWV9GMTEJCQk4NworI2RlZmluZSBLRVlfRjEyCQkJODgKKyNkZWZpbmUgS0VZX1JPCQkJODkKKyNkZWZpbmUgS0VZX0tBVEFLQU5BCQk5MAorI2RlZmluZSBLRVlfSElSQUdBTkEJCTkxCisjZGVmaW5lIEtFWV9IRU5LQU4JCTkyCisjZGVmaW5lIEtFWV9LQVRBS0FOQUhJUkFHQU5BCTkzCisjZGVmaW5lIEtFWV9NVUhFTktBTgkJOTQKKyNkZWZpbmUgS0VZX0tQSlBDT01NQQkJOTUKKyNkZWZpbmUgS0VZX0tQRU5URVIJCTk2CisjZGVmaW5lIEtFWV9SSUdIVENUUkwJCTk3CisjZGVmaW5lIEtFWV9LUFNMQVNICQk5OAorI2RlZmluZSBLRVlfU1lTUlEJCTk5CisjZGVmaW5lIEtFWV9SSUdIVEFMVAkJMTAwCisjZGVmaW5lIEtFWV9MSU5FRkVFRAkJMTAxCisjZGVmaW5lIEtFWV9IT01FCQkxMDIKKyNkZWZpbmUgS0VZX1VQCQkJMTAzCisjZGVmaW5lIEtFWV9QQUdFVVAJCTEwNAorI2RlZmluZSBLRVlfTEVGVAkJMTA1CisjZGVmaW5lIEtFWV9SSUdIVAkJMTA2CisjZGVmaW5lIEtFWV9FTkQJCQkxMDcKKyNkZWZpbmUgS0VZX0RPV04JCTEwOAorI2RlZmluZSBLRVlfUEFHRURPV04JCTEwOQorI2RlZmluZSBLRVlfSU5TRVJUCQkxMTAKKyNkZWZpbmUgS0VZX0RFTEVURQkJMTExCisjZGVmaW5lIEtFWV9NQUNSTwkJMTEyCisjZGVmaW5lIEtFWV9NVVRFCQkxMTMKKyNkZWZpbmUgS0VZX1ZPTFVNRURPV04JCTExNAorI2RlZmluZSBLRVlfVk9MVU1FVVAJCTExNQorI2RlZmluZSBLRVlfUE9XRVIJCTExNgorI2RlZmluZSBLRVlfS1BFUVVBTAkJMTE3CisjZGVmaW5lIEtFWV9LUFBMVVNNSU5VUwkJMTE4CisjZGVmaW5lIEtFWV9QQVVTRQkJMTE5CisKKyNkZWZpbmUgS0VZX0tQQ09NTUEJCTEyMQorI2RlZmluZSBLRVlfSEFOR1VFTAkJMTIyCisjZGVmaW5lIEtFWV9IQU5KQQkJMTIzCisjZGVmaW5lIEtFWV9ZRU4JCQkxMjQKKyNkZWZpbmUgS0VZX0xFRlRNRVRBCQkxMjUKKyNkZWZpbmUgS0VZX1JJR0hUTUVUQQkJMTI2CisjZGVmaW5lIEtFWV9DT01QT1NFCQkxMjcKKworI2RlZmluZSBLRVlfU1RPUAkJMTI4CisjZGVmaW5lIEtFWV9BR0FJTgkJMTI5CisjZGVmaW5lIEtFWV9QUk9QUwkJMTMwCisjZGVmaW5lIEtFWV9VTkRPCQkxMzEKKyNkZWZpbmUgS0VZX0ZST05UCQkxMzIKKyNkZWZpbmUgS0VZX0NPUFkJCTEzMworI2RlZmluZSBLRVlfT1BFTgkJMTM0CisjZGVmaW5lIEtFWV9QQVNURQkJMTM1CisjZGVmaW5lIEtFWV9GSU5ECQkxMzYKKyNkZWZpbmUgS0VZX0NVVAkJCTEzNworI2RlZmluZSBLRVlfSEVMUAkJMTM4CisjZGVmaW5lIEtFWV9NRU5VCQkxMzkKKyNkZWZpbmUgS0VZX0NBTEMJCTE0MAorI2RlZmluZSBLRVlfU0VUVVAJCTE0MQorI2RlZmluZSBLRVlfU0xFRVAJCTE0MgorI2RlZmluZSBLRVlfV0FLRVVQCQkxNDMKKyNkZWZpbmUgS0VZX0ZJTEUJCTE0NAorI2RlZmluZSBLRVlfU0VOREZJTEUJCTE0NQorI2RlZmluZSBLRVlfREVMRVRFRklMRQkJMTQ2CisjZGVmaW5lIEtFWV9YRkVSCQkxNDcKKyNkZWZpbmUgS0VZX1BST0cxCQkxNDgKKyNkZWZpbmUgS0VZX1BST0cyCQkxNDkKKyNkZWZpbmUgS0VZX1dXVwkJCTE1MAorI2RlZmluZSBLRVlfTVNET1MJCTE1MQorI2RlZmluZSBLRVlfQ09GRkVFCQkxNTIKKyNkZWZpbmUgS0VZX0RJUkVDVElPTgkJMTUzCisjZGVmaW5lIEtFWV9DWUNMRVdJTkRPV1MJMTU0CisjZGVmaW5lIEtFWV9NQUlMCQkxNTUKKyNkZWZpbmUgS0VZX0JPT0tNQVJLUwkJMTU2CisjZGVmaW5lIEtFWV9DT01QVVRFUgkJMTU3CisjZGVmaW5lIEtFWV9CQUNLCQkxNTgKKyNkZWZpbmUgS0VZX0ZPUldBUkQJCTE1OQorI2RlZmluZSBLRVlfQ0xPU0VDRAkJMTYwCisjZGVmaW5lIEtFWV9FSkVDVENECQkxNjEKKyNkZWZpbmUgS0VZX0VKRUNUQ0xPU0VDRAkxNjIKKyNkZWZpbmUgS0VZX05FWFRTT05HCQkxNjMKKyNkZWZpbmUgS0VZX1BMQVlQQVVTRQkJMTY0CisjZGVmaW5lIEtFWV9QUkVWSU9VU1NPTkcJMTY1CisjZGVmaW5lIEtFWV9TVE9QQ0QJCTE2NgorI2RlZmluZSBLRVlfUkVDT1JECQkxNjcKKyNkZWZpbmUgS0VZX1JFV0lORAkJMTY4CisjZGVmaW5lIEtFWV9QSE9ORQkJMTY5CisjZGVmaW5lIEtFWV9JU08JCQkxNzAKKyNkZWZpbmUgS0VZX0NPTkZJRwkJMTcxCisjZGVmaW5lIEtFWV9IT01FUEFHRQkJMTcyCisjZGVmaW5lIEtFWV9SRUZSRVNICQkxNzMKKyNkZWZpbmUgS0VZX0VYSVQJCTE3NAorI2RlZmluZSBLRVlfTU9WRQkJMTc1CisjZGVmaW5lIEtFWV9FRElUCQkxNzYKKyNkZWZpbmUgS0VZX1NDUk9MTFVQCQkxNzcKKyNkZWZpbmUgS0VZX1NDUk9MTERPV04JCTE3OAorI2RlZmluZSBLRVlfS1BMRUZUUEFSRU4JCTE3OQorI2RlZmluZSBLRVlfS1BSSUdIVFBBUkVOCTE4MAorCisjZGVmaW5lIEtFWV9GMTMJCQkxODMKKyNkZWZpbmUgS0VZX0YxNAkJCTE4NAorI2RlZmluZSBLRVlfRjE1CQkJMTg1CisjZGVmaW5lIEtFWV9GMTYJCQkxODYKKyNkZWZpbmUgS0VZX0YxNwkJCTE4NworI2RlZmluZSBLRVlfRjE4CQkJMTg4CisjZGVmaW5lIEtFWV9GMTkJCQkxODkKKyNkZWZpbmUgS0VZX0YyMAkJCTE5MAorI2RlZmluZSBLRVlfRjIxCQkJMTkxCisjZGVmaW5lIEtFWV9GMjIJCQkxOTIKKyNkZWZpbmUgS0VZX0YyMwkJCTE5MworI2RlZmluZSBLRVlfRjI0CQkJMTk0CisKKyNkZWZpbmUgS0VZX1BMQVlDRAkJMjAwCisjZGVmaW5lIEtFWV9QQVVTRUNECQkyMDEKKyNkZWZpbmUgS0VZX1BST0czCQkyMDIKKyNkZWZpbmUgS0VZX1BST0c0CQkyMDMKKyNkZWZpbmUgS0VZX1NVU1BFTkQJCTIwNQorI2RlZmluZSBLRVlfQ0xPU0UJCTIwNgorI2RlZmluZSBLRVlfUExBWQkJMjA3CisjZGVmaW5lIEtFWV9GQVNURk9SV0FSRAkJMjA4CisjZGVmaW5lIEtFWV9CQVNTQk9PU1QJCTIwOQorI2RlZmluZSBLRVlfUFJJTlQJCTIxMAorI2RlZmluZSBLRVlfSFAJCQkyMTEKKyNkZWZpbmUgS0VZX0NBTUVSQQkJMjEyCisjZGVmaW5lIEtFWV9TT1VORAkJMjEzCisjZGVmaW5lIEtFWV9RVUVTVElPTgkJMjE0CisjZGVmaW5lIEtFWV9FTUFJTAkJMjE1CisjZGVmaW5lIEtFWV9DSEFUCQkyMTYKKyNkZWZpbmUgS0VZX1NFQVJDSAkJMjE3CisjZGVmaW5lIEtFWV9DT05ORUNUCQkyMTgKKyNkZWZpbmUgS0VZX0ZJTkFOQ0UJCTIxOQorI2RlZmluZSBLRVlfU1BPUlQJCTIyMAorI2RlZmluZSBLRVlfU0hPUAkJMjIxCisjZGVmaW5lIEtFWV9BTFRFUkFTRQkJMjIyCisjZGVmaW5lIEtFWV9DQU5DRUwJCTIyMworI2RlZmluZSBLRVlfQlJJR0hUTkVTU0RPV04JMjI0CisjZGVmaW5lIEtFWV9CUklHSFRORVNTVVAJMjI1CisjZGVmaW5lIEtFWV9NRURJQQkJMjI2CisKKyNkZWZpbmUgS0VZX1VOS05PV04JCTI0MAorCisjZGVmaW5lIEJUTl9NSVNDCQkweDEwMAorI2RlZmluZSBCVE5fMAkJCTB4MTAwCisjZGVmaW5lIEJUTl8xCQkJMHgxMDEKKyNkZWZpbmUgQlROXzIJCQkweDEwMgorI2RlZmluZSBCVE5fMwkJCTB4MTAzCisjZGVmaW5lIEJUTl80CQkJMHgxMDQKKyNkZWZpbmUgQlROXzUJCQkweDEwNQorI2RlZmluZSBCVE5fNgkJCTB4MTA2CisjZGVmaW5lIEJUTl83CQkJMHgxMDcKKyNkZWZpbmUgQlROXzgJCQkweDEwOAorI2RlZmluZSBCVE5fOQkJCTB4MTA5CisKKyNkZWZpbmUgQlROX01PVVNFCQkweDExMAorI2RlZmluZSBCVE5fTEVGVAkJMHgxMTAKKyNkZWZpbmUgQlROX1JJR0hUCQkweDExMQorI2RlZmluZSBCVE5fTUlERExFCQkweDExMgorI2RlZmluZSBCVE5fU0lERQkJMHgxMTMKKyNkZWZpbmUgQlROX0VYVFJBCQkweDExNAorI2RlZmluZSBCVE5fRk9SV0FSRAkJMHgxMTUKKyNkZWZpbmUgQlROX0JBQ0sJCTB4MTE2CisjZGVmaW5lIEJUTl9UQVNLCQkweDExNworCisjZGVmaW5lIEJUTl9KT1lTVElDSwkJMHgxMjAKKyNkZWZpbmUgQlROX1RSSUdHRVIJCTB4MTIwCisjZGVmaW5lIEJUTl9USFVNQgkJMHgxMjEKKyNkZWZpbmUgQlROX1RIVU1CMgkJMHgxMjIKKyNkZWZpbmUgQlROX1RPUAkJCTB4MTIzCisjZGVmaW5lIEJUTl9UT1AyCQkweDEyNAorI2RlZmluZSBCVE5fUElOS0lFCQkweDEyNQorI2RlZmluZSBCVE5fQkFTRQkJMHgxMjYKKyNkZWZpbmUgQlROX0JBU0UyCQkweDEyNworI2RlZmluZSBCVE5fQkFTRTMJCTB4MTI4CisjZGVmaW5lIEJUTl9CQVNFNAkJMHgxMjkKKyNkZWZpbmUgQlROX0JBU0U1CQkweDEyYQorI2RlZmluZSBCVE5fQkFTRTYJCTB4MTJiCisjZGVmaW5lIEJUTl9ERUFECQkweDEyZgorCisjZGVmaW5lIEJUTl9HQU1FUEFECQkweDEzMAorI2RlZmluZSBCVE5fQQkJCTB4MTMwCisjZGVmaW5lIEJUTl9CCQkJMHgxMzEKKyNkZWZpbmUgQlROX0MJCQkweDEzMgorI2RlZmluZSBCVE5fWAkJCTB4MTMzCisjZGVmaW5lIEJUTl9ZCQkJMHgxMzQKKyNkZWZpbmUgQlROX1oJCQkweDEzNQorI2RlZmluZSBCVE5fVEwJCQkweDEzNgorI2RlZmluZSBCVE5fVFIJCQkweDEzNworI2RlZmluZSBCVE5fVEwyCQkJMHgxMzgKKyNkZWZpbmUgQlROX1RSMgkJCTB4MTM5CisjZGVmaW5lIEJUTl9TRUxFQ1QJCTB4MTNhCisjZGVmaW5lIEJUTl9TVEFSVAkJMHgxM2IKKyNkZWZpbmUgQlROX01PREUJCTB4MTNjCisjZGVmaW5lIEJUTl9USFVNQkwJCTB4MTNkCisjZGVmaW5lIEJUTl9USFVNQlIJCTB4MTNlCisKKyNkZWZpbmUgQlROX0RJR0kJCTB4MTQwCisjZGVmaW5lIEJUTl9UT09MX1BFTgkJMHgxNDAKKyNkZWZpbmUgQlROX1RPT0xfUlVCQkVSCQkweDE0MQorI2RlZmluZSBCVE5fVE9PTF9CUlVTSAkJMHgxNDIKKyNkZWZpbmUgQlROX1RPT0xfUEVOQ0lMCQkweDE0MworI2RlZmluZSBCVE5fVE9PTF9BSVJCUlVTSAkweDE0NAorI2RlZmluZSBCVE5fVE9PTF9GSU5HRVIJCTB4MTQ1CisjZGVmaW5lIEJUTl9UT09MX01PVVNFCQkweDE0NgorI2RlZmluZSBCVE5fVE9PTF9MRU5TCQkweDE0NworI2RlZmluZSBCVE5fVE9VQ0gJCTB4MTRhCisjZGVmaW5lIEJUTl9TVFlMVVMJCTB4MTRiCisjZGVmaW5lIEJUTl9TVFlMVVMyCQkweDE0YworI2RlZmluZSBCVE5fVE9PTF9ET1VCTEVUQVAJMHgxNGQKKyNkZWZpbmUgQlROX1RPT0xfVFJJUExFVEFQCTB4MTRlCisKKyNkZWZpbmUgQlROX1dIRUVMCQkweDE1MAorI2RlZmluZSBCVE5fR0VBUl9ET1dOCQkweDE1MAorI2RlZmluZSBCVE5fR0VBUl9VUAkJMHgxNTEKKworI2RlZmluZSBLRVlfT0sJCQkweDE2MAorI2RlZmluZSBLRVlfU0VMRUNUIAkJMHgxNjEKKyNkZWZpbmUgS0VZX0dPVE8JCTB4MTYyCisjZGVmaW5lIEtFWV9DTEVBUgkJMHgxNjMKKyNkZWZpbmUgS0VZX1BPV0VSMgkJMHgxNjQKKyNkZWZpbmUgS0VZX09QVElPTgkJMHgxNjUKKyNkZWZpbmUgS0VZX0lORk8JCTB4MTY2CisjZGVmaW5lIEtFWV9USU1FCQkweDE2NworI2RlZmluZSBLRVlfVkVORE9SCQkweDE2OAorI2RlZmluZSBLRVlfQVJDSElWRQkJMHgxNjkKKyNkZWZpbmUgS0VZX1BST0dSQU0JCTB4MTZhCisjZGVmaW5lIEtFWV9DSEFOTkVMCQkweDE2YgorI2RlZmluZSBLRVlfRkFWT1JJVEVTCQkweDE2YworI2RlZmluZSBLRVlfRVBHCQkJMHgxNmQKKyNkZWZpbmUgS0VZX1BWUgkJCTB4MTZlCisjZGVmaW5lIEtFWV9NSFAJCQkweDE2ZgorI2RlZmluZSBLRVlfTEFOR1VBR0UJCTB4MTcwCisjZGVmaW5lIEtFWV9USVRMRQkJMHgxNzEKKyNkZWZpbmUgS0VZX1NVQlRJVExFCQkweDE3MgorI2RlZmluZSBLRVlfQU5HTEUJCTB4MTczCisjZGVmaW5lIEtFWV9aT09NCQkweDE3NAorI2RlZmluZSBLRVlfTU9ERQkJMHgxNzUKKyNkZWZpbmUgS0VZX0tFWUJPQVJECQkweDE3NgorI2RlZmluZSBLRVlfU0NSRUVOCQkweDE3NworI2RlZmluZSBLRVlfUEMJCQkweDE3OAorI2RlZmluZSBLRVlfVFYJCQkweDE3OQorI2RlZmluZSBLRVlfVFYyCQkJMHgxN2EKKyNkZWZpbmUgS0VZX1ZDUgkJCTB4MTdiCisjZGVmaW5lIEtFWV9WQ1IyCQkweDE3YworI2RlZmluZSBLRVlfU0FUCQkJMHgxN2QKKyNkZWZpbmUgS0VZX1NBVDIJCTB4MTdlCisjZGVmaW5lIEtFWV9DRAkJCTB4MTdmCisjZGVmaW5lIEtFWV9UQVBFCQkweDE4MAorI2RlZmluZSBLRVlfUkFESU8JCTB4MTgxCisjZGVmaW5lIEtFWV9UVU5FUgkJMHgxODIKKyNkZWZpbmUgS0VZX1BMQVlFUgkJMHgxODMKKyNkZWZpbmUgS0VZX1RFWFQJCTB4MTg0CisjZGVmaW5lIEtFWV9EVkQJCQkweDE4NQorI2RlZmluZSBLRVlfQVVYCQkJMHgxODYKKyNkZWZpbmUgS0VZX01QMwkJCTB4MTg3CisjZGVmaW5lIEtFWV9BVURJTwkJMHgxODgKKyNkZWZpbmUgS0VZX1ZJREVPCQkweDE4OQorI2RlZmluZSBLRVlfRElSRUNUT1JZCQkweDE4YQorI2RlZmluZSBLRVlfTElTVAkJMHgxOGIKKyNkZWZpbmUgS0VZX01FTU8JCTB4MThjCisjZGVmaW5lIEtFWV9DQUxFTkRBUgkJMHgxOGQKKyNkZWZpbmUgS0VZX1JFRAkJCTB4MThlCisjZGVmaW5lIEtFWV9HUkVFTgkJMHgxOGYKKyNkZWZpbmUgS0VZX1lFTExPVwkJMHgxOTAKKyNkZWZpbmUgS0VZX0JMVUUJCTB4MTkxCisjZGVmaW5lIEtFWV9DSEFOTkVMVVAJCTB4MTkyCisjZGVmaW5lIEtFWV9DSEFOTkVMRE9XTgkJMHgxOTMKKyNkZWZpbmUgS0VZX0ZJUlNUCQkweDE5NAorI2RlZmluZSBLRVlfTEFTVAkJMHgxOTUKKyNkZWZpbmUgS0VZX0FCCQkJMHgxOTYKKyNkZWZpbmUgS0VZX05FWFQJCTB4MTk3CisjZGVmaW5lIEtFWV9SRVNUQVJUCQkweDE5OAorI2RlZmluZSBLRVlfU0xPVwkJMHgxOTkKKyNkZWZpbmUgS0VZX1NIVUZGTEUJCTB4MTlhCisjZGVmaW5lIEtFWV9CUkVBSwkJMHgxOWIKKyNkZWZpbmUgS0VZX1BSRVZJT1VTCQkweDE5YworI2RlZmluZSBLRVlfRElHSVRTCQkweDE5ZAorI2RlZmluZSBLRVlfVEVFTgkJMHgxOWUKKyNkZWZpbmUgS0VZX1RXRU4JCTB4MTlmCisKKyNkZWZpbmUgS0VZX0RFTF9FT0wJCTB4MWMwCisjZGVmaW5lIEtFWV9ERUxfRU9TCQkweDFjMQorI2RlZmluZSBLRVlfSU5TX0xJTkUJCTB4MWMyCisjZGVmaW5lIEtFWV9ERUxfTElORQkJMHgxYzMKKworI2RlZmluZSBLRVlfRk4JCQkweDFkMAorI2RlZmluZSBLRVlfRk5fRVNDCQkweDFkMQorI2RlZmluZSBLRVlfRk5fRjEJCTB4MWQyCisjZGVmaW5lIEtFWV9GTl9GMgkJMHgxZDMKKyNkZWZpbmUgS0VZX0ZOX0YzCQkweDFkNAorI2RlZmluZSBLRVlfRk5fRjQJCTB4MWQ1CisjZGVmaW5lIEtFWV9GTl9GNQkJMHgxZDYKKyNkZWZpbmUgS0VZX0ZOX0Y2CQkweDFkNworI2RlZmluZSBLRVlfRk5fRjcJCTB4MWQ4CisjZGVmaW5lIEtFWV9GTl9GOAkJMHgxZDkKKyNkZWZpbmUgS0VZX0ZOX0Y5CQkweDFkYQorI2RlZmluZSBLRVlfRk5fRjEwCQkweDFkYgorI2RlZmluZSBLRVlfRk5fRjExCQkweDFkYworI2RlZmluZSBLRVlfRk5fRjEyCQkweDFkZAorI2RlZmluZSBLRVlfRk5fMQkJMHgxZGUKKyNkZWZpbmUgS0VZX0ZOXzIJCTB4MWRmCisjZGVmaW5lIEtFWV9GTl9ECQkweDFlMAorI2RlZmluZSBLRVlfRk5fRQkJMHgxZTEKKyNkZWZpbmUgS0VZX0ZOX0YJCTB4MWUyCisjZGVmaW5lIEtFWV9GTl9TCQkweDFlMworI2RlZmluZSBLRVlfRk5fQgkJMHgxZTQKKworI2RlZmluZSBLRVlfTUFYCQkJMHgxZmYKKworLyoKKyAqIFJlbGF0aXZlIGF4ZXMKKyAqLworCisjZGVmaW5lIFJFTF9YCQkJMHgwMAorI2RlZmluZSBSRUxfWQkJCTB4MDEKKyNkZWZpbmUgUkVMX1oJCQkweDAyCisjZGVmaW5lIFJFTF9SWAkJCTB4MDMKKyNkZWZpbmUgUkVMX1JZCQkJMHgwNAorI2RlZmluZSBSRUxfUloJCQkweDA1CisjZGVmaW5lIFJFTF9IV0hFRUwJCTB4MDYKKyNkZWZpbmUgUkVMX0RJQUwJCTB4MDcKKyNkZWZpbmUgUkVMX1dIRUVMCQkweDA4CisjZGVmaW5lIFJFTF9NSVNDCQkweDA5CisjZGVmaW5lIFJFTF9NQVgJCQkweDBmCisKKy8qCisgKiBBYnNvbHV0ZSBheGVzCisgKi8KKworI2RlZmluZSBBQlNfWAkJCTB4MDAKKyNkZWZpbmUgQUJTX1kJCQkweDAxCisjZGVmaW5lIEFCU19aCQkJMHgwMgorI2RlZmluZSBBQlNfUlgJCQkweDAzCisjZGVmaW5lIEFCU19SWQkJCTB4MDQKKyNkZWZpbmUgQUJTX1JaCQkJMHgwNQorI2RlZmluZSBBQlNfVEhST1RUTEUJCTB4MDYKKyNkZWZpbmUgQUJTX1JVRERFUgkJMHgwNworI2RlZmluZSBBQlNfV0hFRUwJCTB4MDgKKyNkZWZpbmUgQUJTX0dBUwkJCTB4MDkKKyNkZWZpbmUgQUJTX0JSQUtFCQkweDBhCisjZGVmaW5lIEFCU19IQVQwWAkJMHgxMAorI2RlZmluZSBBQlNfSEFUMFkJCTB4MTEKKyNkZWZpbmUgQUJTX0hBVDFYCQkweDEyCisjZGVmaW5lIEFCU19IQVQxWQkJMHgxMworI2RlZmluZSBBQlNfSEFUMlgJCTB4MTQKKyNkZWZpbmUgQUJTX0hBVDJZCQkweDE1CisjZGVmaW5lIEFCU19IQVQzWAkJMHgxNgorI2RlZmluZSBBQlNfSEFUM1kJCTB4MTcKKyNkZWZpbmUgQUJTX1BSRVNTVVJFCQkweDE4CisjZGVmaW5lIEFCU19ESVNUQU5DRQkJMHgxOQorI2RlZmluZSBBQlNfVElMVF9YCQkweDFhCisjZGVmaW5lIEFCU19USUxUX1kJCTB4MWIKKyNkZWZpbmUgQUJTX1RPT0xfV0lEVEgJCTB4MWMKKyNkZWZpbmUgQUJTX1ZPTFVNRQkJMHgyMAorI2RlZmluZSBBQlNfTUlTQwkJMHgyOAorI2RlZmluZSBBQlNfTUFYCQkJMHgzZgorCisvKgorICogTWlzYyBldmVudHMKKyAqLworCisjZGVmaW5lIE1TQ19TRVJJQUwJCTB4MDAKKyNkZWZpbmUgTVNDX1BVTFNFTEVECQkweDAxCisjZGVmaW5lIE1TQ19HRVNUVVJFCQkweDAyCisjZGVmaW5lIE1TQ19SQVcJCQkweDAzCisjZGVmaW5lIE1TQ19TQ0FOCQkweDA0CisjZGVmaW5lIE1TQ19NQVgJCQkweDA3CisKKy8qCisgKiBMRURzCisgKi8KKworI2RlZmluZSBMRURfTlVNTAkJMHgwMAorI2RlZmluZSBMRURfQ0FQU0wJCTB4MDEKKyNkZWZpbmUgTEVEX1NDUk9MTEwJCTB4MDIKKyNkZWZpbmUgTEVEX0NPTVBPU0UJCTB4MDMKKyNkZWZpbmUgTEVEX0tBTkEJCTB4MDQKKyNkZWZpbmUgTEVEX1NMRUVQCQkweDA1CisjZGVmaW5lIExFRF9TVVNQRU5ECQkweDA2CisjZGVmaW5lIExFRF9NVVRFCQkweDA3CisjZGVmaW5lIExFRF9NSVNDCQkweDA4CisjZGVmaW5lIExFRF9NQUlMCQkweDA5CisjZGVmaW5lIExFRF9DSEFSR0lORwkJMHgwYQorI2RlZmluZSBMRURfTUFYCQkJMHgwZgorCisvKgorICogQXV0b3JlcGVhdCB2YWx1ZXMKKyAqLworCisjZGVmaW5lIFJFUF9ERUxBWQkJMHgwMAorI2RlZmluZSBSRVBfUEVSSU9ECQkweDAxCisjZGVmaW5lIFJFUF9NQVgJCQkweDAxCisKKy8qCisgKiBTb3VuZHMKKyAqLworCisjZGVmaW5lIFNORF9DTElDSwkJMHgwMAorI2RlZmluZSBTTkRfQkVMTAkJMHgwMQorI2RlZmluZSBTTkRfVE9ORQkJMHgwMgorI2RlZmluZSBTTkRfTUFYCQkJMHgwNworCisvKgorICogSURzLgorICovCisKKyNkZWZpbmUgSURfQlVTCQkJMAorI2RlZmluZSBJRF9WRU5ET1IJCTEKKyNkZWZpbmUgSURfUFJPRFVDVAkJMgorI2RlZmluZSBJRF9WRVJTSU9OCQkzCisKKyNkZWZpbmUgQlVTX1BDSQkJCTB4MDEKKyNkZWZpbmUgQlVTX0lTQVBOUAkJMHgwMgorI2RlZmluZSBCVVNfVVNCCQkJMHgwMworI2RlZmluZSBCVVNfSElMCQkJMHgwNAorI2RlZmluZSBCVVNfQkxVRVRPT1RICQkweDA1CisKKyNkZWZpbmUgQlVTX0lTQQkJCTB4MTAKKyNkZWZpbmUgQlVTX0k4MDQyCQkweDExCisjZGVmaW5lIEJVU19YVEtCRAkJMHgxMgorI2RlZmluZSBCVVNfUlMyMzIJCTB4MTMKKyNkZWZpbmUgQlVTX0dBTUVQT1JUCQkweDE0CisjZGVmaW5lIEJVU19QQVJQT1JUCQkweDE1CisjZGVmaW5lIEJVU19BTUlHQQkJMHgxNgorI2RlZmluZSBCVVNfQURCCQkJMHgxNworI2RlZmluZSBCVVNfSTJDCQkJMHgxOAorI2RlZmluZSBCVVNfSE9TVAkJMHgxOQorCisvKgorICogVmFsdWVzIGRlc2NyaWJpbmcgdGhlIHN0YXR1cyBvZiBhbiBlZmZlY3QKKyAqLworI2RlZmluZSBGRl9TVEFUVVNfU1RPUFBFRAkweDAwCisjZGVmaW5lIEZGX1NUQVRVU19QTEFZSU5HCTB4MDEKKyNkZWZpbmUgRkZfU1RBVFVTX01BWAkJMHgwMQorCisvKgorICogU3RydWN0dXJlcyB1c2VkIGluIGlvY3RscyB0byB1cGxvYWQgZWZmZWN0cyB0byBhIGRldmljZQorICogVGhlIGZpcnN0IHN0cnVjdHVyZXMgYXJlIG5vdCBwYXNzZWQgZGlyZWN0bHkgYnkgdXNpbmcgaW9jdGxzLgorICogVGhleSBhcmUgc3ViLXN0cnVjdHVyZXMgb2YgdGhlIGFjdHVhbGx5IHNlbnQgc3RydWN0dXJlIChjYWxsZWQgZmZfZWZmZWN0KQorICovCisKK3N0cnVjdCBmZl9yZXBsYXkgeworCV9fdTE2IGxlbmd0aDsgLyogRHVyYXRpb24gb2YgYW4gZWZmZWN0IGluIG1zLiBBbGwgb3RoZXIgdGltZXMgYXJlIGFsc28gZXhwcmVzc2VkIGluIG1zICovCisJX191MTYgZGVsYXk7ICAvKiBUaW1lIHRvIHdhaXQgYmVmb3JlIHRvIHN0YXJ0IHBsYXlpbmcgYW4gZWZmZWN0ICovCit9OworCitzdHJ1Y3QgZmZfdHJpZ2dlciB7CisJX191MTYgYnV0dG9uOyAgIC8qIE51bWJlciBvZiBidXR0b24gdHJpZ2dlcmluZyBhbiBlZmZlY3QgKi8KKwlfX3UxNiBpbnRlcnZhbDsgLyogVGltZSB0byB3YWl0IGJlZm9yZSBhbiBlZmZlY3QgY2FuIGJlIHJlLXRyaWdnZXJlZCAobXMpICovCit9OworCitzdHJ1Y3QgZmZfZW52ZWxvcGUgeworCV9fdTE2IGF0dGFja19sZW5ndGg7CS8qIER1cmF0aW9uIG9mIGF0dGFjayAobXMpICovCisJX191MTYgYXR0YWNrX2xldmVsOwkvKiBMZXZlbCBhdCBiZWdpbm5pbmcgb2YgYXR0YWNrICovCisJX191MTYgZmFkZV9sZW5ndGg7CS8qIER1cmF0aW9uIG9mIGZhZGUgKG1zKSAqLworCV9fdTE2IGZhZGVfbGV2ZWw7CS8qIExldmVsIGF0IGVuZCBvZiBmYWRlICovCit9OworCisvKiBGRl9DT05TVEFOVCAqLworc3RydWN0IGZmX2NvbnN0YW50X2VmZmVjdCB7CisJX19zMTYgbGV2ZWw7CSAgICAvKiBTdHJlbmd0aCBvZiBlZmZlY3QuIE5lZ2F0aXZlIHZhbHVlcyBhcmUgT0sgKi8KKwlzdHJ1Y3QgZmZfZW52ZWxvcGUgZW52ZWxvcGU7Cit9OworCisvKiBGRl9SQU1QICovCitzdHJ1Y3QgZmZfcmFtcF9lZmZlY3QgeworCV9fczE2IHN0YXJ0X2xldmVsOworCV9fczE2IGVuZF9sZXZlbDsKKwlzdHJ1Y3QgZmZfZW52ZWxvcGUgZW52ZWxvcGU7Cit9OworCisvKiBGRl9TUFJJTkcgb2YgRkZfRlJJQ1RJT04gKi8KK3N0cnVjdCBmZl9jb25kaXRpb25fZWZmZWN0IHsKKwlfX3UxNiByaWdodF9zYXR1cmF0aW9uOyAvKiBNYXggbGV2ZWwgd2hlbiBqb3lzdGljayBpcyBvbiB0aGUgcmlnaHQgKi8KKwlfX3UxNiBsZWZ0X3NhdHVyYXRpb247ICAvKiBNYXggbGV2ZWwgd2hlbiBqb3lzdGljayBpbiBvbiB0aGUgbGVmdCAqLworCisJX19zMTYgcmlnaHRfY29lZmY7CS8qIEluZGljYXRlcyBob3cgZmFzdCB0aGUgZm9yY2UgZ3Jvd3Mgd2hlbiB0aGUKKwkJCQkgICBqb3lzdGljayBtb3ZlcyB0byB0aGUgcmlnaHQgKi8KKwlfX3MxNiBsZWZ0X2NvZWZmOwkvKiBTYW1lIGZvciBsZWZ0IHNpZGUgKi8KKworCV9fdTE2IGRlYWRiYW5kOwkvKiBTaXplIG9mIGFyZWEgd2hlcmUgbm8gZm9yY2UgaXMgcHJvZHVjZWQgKi8KKwlfX3MxNiBjZW50ZXI7CS8qIFBvc2l0aW9uIG9mIGRlYWQgem9uZSAqLworCit9OworCisvKiBGRl9QRVJJT0RJQyAqLworc3RydWN0IGZmX3BlcmlvZGljX2VmZmVjdCB7CisJX191MTYgd2F2ZWZvcm07CS8qIEtpbmQgb2Ygd2F2ZSAoc2luZSwgc3F1YXJlLi4uKSAqLworCV9fdTE2IHBlcmlvZDsJLyogaW4gbXMgKi8KKwlfX3MxNiBtYWduaXR1ZGU7CS8qIFBlYWsgdmFsdWUgKi8KKwlfX3MxNiBvZmZzZXQ7CS8qIE1lYW4gdmFsdWUgb2Ygd2F2ZSAocm91Z2hseSkgKi8KKwlfX3UxNiBwaGFzZTsJCS8qICdIb3Jpem9udGFsJyBzaGlmdCAqLworCisJc3RydWN0IGZmX2VudmVsb3BlIGVudmVsb3BlOworCisvKiBPbmx5IHVzZWQgaWYgd2F2ZWZvcm0gPT0gRkZfQ1VTVE9NICovCisJX191MzIgY3VzdG9tX2xlbjsJLyogTnVtYmVyIG9mIHNhbXBsZXMgKi8KKwlfX3MxNiAqY3VzdG9tX2RhdGE7CS8qIEJ1ZmZlciBvZiBzYW1wbGVzICovCisvKiBOb3RlOiB0aGUgZGF0YSBwb2ludGVkIGJ5IGN1c3RvbV9kYXRhIGlzIGNvcGllZCBieSB0aGUgZHJpdmVyLiBZb3UgY2FuCisgKiB0aGVyZWZvcmUgZGlzcG9zZSBvZiB0aGUgbWVtb3J5IGFmdGVyIHRoZSB1cGxvYWQvdXBkYXRlICovCit9OworCisvKiBGRl9SVU1CTEUgKi8KKy8qIFNvbWUgcnVtYmxlIHBhZHMgaGF2ZSB0d28gbW90b3JzIG9mIGRpZmZlcmVudCB3ZWlnaHQuCisgICBzdHJvbmdfbWFnbml0dWRlIHJlcHJlc2VudHMgdGhlIG1hZ25pdHVkZSBvZiB0aGUgdmlicmF0aW9uIGdlbmVyYXRlZAorICAgYnkgdGhlIGhlYXZ5IG1vdG9yLgorKi8KK3N0cnVjdCBmZl9ydW1ibGVfZWZmZWN0IHsKKwlfX3UxNiBzdHJvbmdfbWFnbml0dWRlOyAgLyogTWFnbml0dWRlIG9mIHRoZSBoZWF2eSBtb3RvciAqLworCV9fdTE2IHdlYWtfbWFnbml0dWRlOyAgICAvKiBNYWduaXR1ZGUgb2YgdGhlIGxpZ2h0IG9uZSAqLworfTsKKworLyoKKyAqIFN0cnVjdHVyZSBzZW50IHRocm91Z2ggaW9jdGwgZnJvbSB0aGUgYXBwbGljYXRpb24gdG8gdGhlIGRyaXZlcgorICovCitzdHJ1Y3QgZmZfZWZmZWN0IHsKKwlfX3UxNiB0eXBlOworLyogRm9sbG93aW5nIGZpZWxkIGRlbm90ZXMgdGhlIHVuaXF1ZSBpZCBhc3NpZ25lZCB0byBhbiBlZmZlY3QuCisgKiBJZiB1c2VyIHNldHMgaWYgdG8gLTEsIGEgbmV3IGVmZmVjdCBpcyBjcmVhdGVkLCBhbmQgaXRzIGlkIGlzIHJldHVybmVkIGluIHRoZSBzYW1lIGZpZWxkCisgKiBFbHNlLCB0aGUgdXNlciBzZXRzIGl0IHRvIHRoZSBlZmZlY3QgaWQgaXQgd2FudHMgdG8gdXBkYXRlLgorICovCisJX19zMTYgaWQ7CisKKwlfX3UxNiBkaXJlY3Rpb247CS8qIERpcmVjdGlvbi4gMCBkZWcgLT4gMHgwMDAwIChkb3duKQorCQkJCQkgICAgIDkwIGRlZyAtPiAweDQwMDAgKGxlZnQpCisJCQkJCSAgICAxODAgZGVnIC0+IDB4ODAwMCAodXApCisJCQkJCSAgICAyNzAgZGVnIC0+IDB4QzAwMCAocmlnaHQpCisJCQkJKi8KKworCXN0cnVjdCBmZl90cmlnZ2VyIHRyaWdnZXI7CisJc3RydWN0IGZmX3JlcGxheSByZXBsYXk7CisKKwl1bmlvbiB7CisJCXN0cnVjdCBmZl9jb25zdGFudF9lZmZlY3QgY29uc3RhbnQ7CisJCXN0cnVjdCBmZl9yYW1wX2VmZmVjdCByYW1wOworCQlzdHJ1Y3QgZmZfcGVyaW9kaWNfZWZmZWN0IHBlcmlvZGljOworCQlzdHJ1Y3QgZmZfY29uZGl0aW9uX2VmZmVjdCBjb25kaXRpb25bMl07IC8qIE9uZSBmb3IgZWFjaCBheGlzICovCisJCXN0cnVjdCBmZl9ydW1ibGVfZWZmZWN0IHJ1bWJsZTsKKwl9IHU7Cit9OworCisvKgorICogRm9yY2UgZmVlZGJhY2sgZWZmZWN0IHR5cGVzCisgKi8KKworI2RlZmluZSBGRl9SVU1CTEUJMHg1MAorI2RlZmluZSBGRl9QRVJJT0RJQwkweDUxCisjZGVmaW5lIEZGX0NPTlNUQU5UCTB4NTIKKyNkZWZpbmUgRkZfU1BSSU5HCTB4NTMKKyNkZWZpbmUgRkZfRlJJQ1RJT04JMHg1NAorI2RlZmluZSBGRl9EQU1QRVIJMHg1NQorI2RlZmluZSBGRl9JTkVSVElBCTB4NTYKKyNkZWZpbmUgRkZfUkFNUAkJMHg1NworCisvKgorICogRm9yY2UgZmVlZGJhY2sgcGVyaW9kaWMgZWZmZWN0IHR5cGVzCisgKi8KKworI2RlZmluZSBGRl9TUVVBUkUJMHg1OAorI2RlZmluZSBGRl9UUklBTkdMRQkweDU5CisjZGVmaW5lIEZGX1NJTkUJCTB4NWEKKyNkZWZpbmUgRkZfU0FXX1VQCTB4NWIKKyNkZWZpbmUgRkZfU0FXX0RPV04JMHg1YworI2RlZmluZSBGRl9DVVNUT00JMHg1ZAorCisvKgorICogU2V0IGZmIGRldmljZSBwcm9wZXJ0aWVzCisgKi8KKworI2RlZmluZSBGRl9HQUlOCQkweDYwCisjZGVmaW5lIEZGX0FVVE9DRU5URVIJMHg2MQorCisjZGVmaW5lIEZGX01BWAkJMHg3ZgorCisjaWZkZWYgX19LRVJORUxfXworCisvKgorICogSW4ta2VybmVsIGRlZmluaXRpb25zLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisKKyNkZWZpbmUgTkJJVFMoeCkgKCgoeCkvQklUU19QRVJfTE9ORykrMSkKKyNkZWZpbmUgQklUKHgpCSgxVUw8PCgoeCklQklUU19QRVJfTE9ORykpCisjZGVmaW5lIExPTkcoeCkgKCh4KS9CSVRTX1BFUl9MT05HKQorCisjZGVmaW5lIElOUFVUX0tFWUNPREUoZGV2LCBzY2FuY29kZSkgKChkZXYtPmtleWNvZGVzaXplID09IDEpID8gKCh1OCopZGV2LT5rZXljb2RlKVtzY2FuY29kZV0gOiBcCisJKChkZXYtPmtleWNvZGVzaXplID09IDIpID8gKCh1MTYqKWRldi0+a2V5Y29kZSlbc2NhbmNvZGVdIDogKCgodTMyKilkZXYtPmtleWNvZGUpW3NjYW5jb2RlXSkpKQorCisjZGVmaW5lIFNFVF9JTlBVVF9LRVlDT0RFKGRldiwgc2NhbmNvZGUsIHZhbCkJCQlcCisJCSh7CXVuc2lnbmVkIF9fb2xkOwkJCQlcCisJCXN3aXRjaCAoZGV2LT5rZXljb2Rlc2l6ZSkgewkJCVwKKwkJCWNhc2UgMTogewkJCQlcCisJCQkJdTggKmsgPSAodTggKilkZXYtPmtleWNvZGU7CVwKKwkJCQlfX29sZCA9IGtbc2NhbmNvZGVdOwkJXAorCQkJCWtbc2NhbmNvZGVdID0gdmFsOwkJXAorCQkJCWJyZWFrOwkJCQlcCisJCQl9CQkJCQlcCisJCQljYXNlIDI6IHsJCQkJXAorCQkJCXUxNiAqayA9ICh1MTYgKilkZXYtPmtleWNvZGU7CVwKKwkJCQlfX29sZCA9IGtbc2NhbmNvZGVdOwkJXAorCQkJCWtbc2NhbmNvZGVdID0gdmFsOwkJXAorCQkJCWJyZWFrOwkJCQlcCisJCQl9CQkJCQlcCisJCQlkZWZhdWx0OiB7CQkJCVwKKwkJCQl1MzIgKmsgPSAodTMyICopZGV2LT5rZXljb2RlOwlcCisJCQkJX19vbGQgPSBrW3NjYW5jb2RlXTsJCVwKKwkJCQlrW3NjYW5jb2RlXSA9IHZhbDsJCVwKKwkJCQlicmVhazsJCQkJXAorCQkJfQkJCQkJXAorCQl9CQkJCQkJXAorCQlfX29sZDsgfSkKKworc3RydWN0IGlucHV0X2RldiB7CisKKwl2b2lkICpwcml2YXRlOworCisJY2hhciAqbmFtZTsKKwljaGFyICpwaHlzOworCWNoYXIgKnVuaXE7CisJc3RydWN0IGlucHV0X2lkIGlkOworCisJdW5zaWduZWQgbG9uZyBldmJpdFtOQklUUyhFVl9NQVgpXTsKKwl1bnNpZ25lZCBsb25nIGtleWJpdFtOQklUUyhLRVlfTUFYKV07CisJdW5zaWduZWQgbG9uZyByZWxiaXRbTkJJVFMoUkVMX01BWCldOworCXVuc2lnbmVkIGxvbmcgYWJzYml0W05CSVRTKEFCU19NQVgpXTsKKwl1bnNpZ25lZCBsb25nIG1zY2JpdFtOQklUUyhNU0NfTUFYKV07CisJdW5zaWduZWQgbG9uZyBsZWRiaXRbTkJJVFMoTEVEX01BWCldOworCXVuc2lnbmVkIGxvbmcgc25kYml0W05CSVRTKFNORF9NQVgpXTsKKwl1bnNpZ25lZCBsb25nIGZmYml0W05CSVRTKEZGX01BWCldOworCWludCBmZl9lZmZlY3RzX21heDsKKworCXVuc2lnbmVkIGludCBrZXljb2RlbWF4OworCXVuc2lnbmVkIGludCBrZXljb2Rlc2l6ZTsKKwl2b2lkICprZXljb2RlOworCisJdW5zaWduZWQgaW50IHJlcGVhdF9rZXk7CisJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CisKKwlzdHJ1Y3QgcHRfcmVncyAqcmVnczsKKwlpbnQgc3RhdGU7CisKKwlpbnQgc3luYzsKKworCWludCBhYnNbQUJTX01BWCArIDFdOworCWludCByZXBbUkVQX01BWCArIDFdOworCisJdW5zaWduZWQgbG9uZyBrZXlbTkJJVFMoS0VZX01BWCldOworCXVuc2lnbmVkIGxvbmcgbGVkW05CSVRTKExFRF9NQVgpXTsKKwl1bnNpZ25lZCBsb25nIHNuZFtOQklUUyhTTkRfTUFYKV07CisKKwlpbnQgYWJzbWF4W0FCU19NQVggKyAxXTsKKwlpbnQgYWJzbWluW0FCU19NQVggKyAxXTsKKwlpbnQgYWJzZnV6eltBQlNfTUFYICsgMV07CisJaW50IGFic2ZsYXRbQUJTX01BWCArIDFdOworCisJaW50ICgqb3Blbikoc3RydWN0IGlucHV0X2RldiAqZGV2KTsKKwl2b2lkICgqY2xvc2UpKHN0cnVjdCBpbnB1dF9kZXYgKmRldik7CisJaW50ICgqYWNjZXB0KShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIHN0cnVjdCBmaWxlICpmaWxlKTsKKwlpbnQgKCpmbHVzaCkoc3RydWN0IGlucHV0X2RldiAqZGV2LCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CisJaW50ICgqZXZlbnQpKHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgdW5zaWduZWQgaW50IHR5cGUsIHVuc2lnbmVkIGludCBjb2RlLCBpbnQgdmFsdWUpOworCWludCAoKnVwbG9hZF9lZmZlY3QpKHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgc3RydWN0IGZmX2VmZmVjdCAqZWZmZWN0KTsKKwlpbnQgKCplcmFzZV9lZmZlY3QpKHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgaW50IGVmZmVjdF9pZCk7CisKKwlzdHJ1Y3QgaW5wdXRfaGFuZGxlICpncmFiOworCXN0cnVjdCBkZXZpY2UgKmRldjsKKworCXN0cnVjdCBsaXN0X2hlYWQJaF9saXN0OworCXN0cnVjdCBsaXN0X2hlYWQJbm9kZTsKK307CisKKy8qCisgKiBTdHJ1Y3R1cmUgZm9yIGhvdHBsdWcgJiBkZXZpY2U8LT5kcml2ZXIgbWF0Y2hpbmcuCisgKi8KKworI2RlZmluZSBJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfQlVTCTEKKyNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX01BVENIX1ZFTkRPUgkyCisjZGVmaW5lIElOUFVUX0RFVklDRV9JRF9NQVRDSF9QUk9EVUNUCTQKKyNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX01BVENIX1ZFUlNJT04JOAorCisjZGVmaW5lIElOUFVUX0RFVklDRV9JRF9NQVRDSF9FVkJJVAkweDAxMAorI2RlZmluZSBJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfS0VZQklUCTB4MDIwCisjZGVmaW5lIElOUFVUX0RFVklDRV9JRF9NQVRDSF9SRUxCSVQJMHgwNDAKKyNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX01BVENIX0FCU0JJVAkweDA4MAorI2RlZmluZSBJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfTVNDSVQJMHgxMDAKKyNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX01BVENIX0xFREJJVAkweDIwMAorI2RlZmluZSBJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfU05EQklUCTB4NDAwCisjZGVmaW5lIElOUFVUX0RFVklDRV9JRF9NQVRDSF9GRkJJVAkweDgwMAorCisjZGVmaW5lIElOUFVUX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0VcCisJKElOUFVUX0RFVklDRV9JRF9NQVRDSF9CVVMgfCBJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfVkVORE9SIHwgSU5QVVRfREVWSUNFX0lEX01BVENIX1BST0RVQ1QpCisjZGVmaW5lIElOUFVUX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0VfQU5EX1ZFUlNJT05cCisJKElOUFVUX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UgfCBJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfVkVSU0lPTikKKworc3RydWN0IGlucHV0X2RldmljZV9pZCB7CisKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3RydWN0IGlucHV0X2lkIGlkOworCisJdW5zaWduZWQgbG9uZyBldmJpdFtOQklUUyhFVl9NQVgpXTsKKwl1bnNpZ25lZCBsb25nIGtleWJpdFtOQklUUyhLRVlfTUFYKV07CisJdW5zaWduZWQgbG9uZyByZWxiaXRbTkJJVFMoUkVMX01BWCldOworCXVuc2lnbmVkIGxvbmcgYWJzYml0W05CSVRTKEFCU19NQVgpXTsKKwl1bnNpZ25lZCBsb25nIG1zY2JpdFtOQklUUyhNU0NfTUFYKV07CisJdW5zaWduZWQgbG9uZyBsZWRiaXRbTkJJVFMoTEVEX01BWCldOworCXVuc2lnbmVkIGxvbmcgc25kYml0W05CSVRTKFNORF9NQVgpXTsKKwl1bnNpZ25lZCBsb25nIGZmYml0W05CSVRTKEZGX01BWCldOworCisJdW5zaWduZWQgbG9uZyBkcml2ZXJfaW5mbzsKK307CisKK3N0cnVjdCBpbnB1dF9oYW5kbGU7CisKK3N0cnVjdCBpbnB1dF9oYW5kbGVyIHsKKworCXZvaWQgKnByaXZhdGU7CisKKwl2b2lkICgqZXZlbnQpKHN0cnVjdCBpbnB1dF9oYW5kbGUgKmhhbmRsZSwgdW5zaWduZWQgaW50IHR5cGUsIHVuc2lnbmVkIGludCBjb2RlLCBpbnQgdmFsdWUpOworCXN0cnVjdCBpbnB1dF9oYW5kbGUqICgqY29ubmVjdCkoc3RydWN0IGlucHV0X2hhbmRsZXIgKmhhbmRsZXIsIHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgc3RydWN0IGlucHV0X2RldmljZV9pZCAqaWQpOworCXZvaWQgKCpkaXNjb25uZWN0KShzdHJ1Y3QgaW5wdXRfaGFuZGxlICpoYW5kbGUpOworCisJc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZm9wczsKKwlpbnQgbWlub3I7CisJY2hhciAqbmFtZTsKKworCXN0cnVjdCBpbnB1dF9kZXZpY2VfaWQgKmlkX3RhYmxlOworCXN0cnVjdCBpbnB1dF9kZXZpY2VfaWQgKmJsYWNrbGlzdDsKKworCXN0cnVjdCBsaXN0X2hlYWQJaF9saXN0OworCXN0cnVjdCBsaXN0X2hlYWQJbm9kZTsKK307CisKK3N0cnVjdCBpbnB1dF9oYW5kbGUgeworCisJdm9pZCAqcHJpdmF0ZTsKKworCWludCBvcGVuOworCWNoYXIgKm5hbWU7CisKKwlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXY7CisJc3RydWN0IGlucHV0X2hhbmRsZXIgKmhhbmRsZXI7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkCWRfbm9kZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWhfbm9kZTsKK307CisKKyNkZWZpbmUgdG9fZGV2KG4pIGNvbnRhaW5lcl9vZihuLHN0cnVjdCBpbnB1dF9kZXYsbm9kZSkKKyNkZWZpbmUgdG9faGFuZGxlcihuKSBjb250YWluZXJfb2YobixzdHJ1Y3QgaW5wdXRfaGFuZGxlcixub2RlKTsKKyNkZWZpbmUgdG9faGFuZGxlKG4pIGNvbnRhaW5lcl9vZihuLHN0cnVjdCBpbnB1dF9oYW5kbGUsZF9ub2RlKQorI2RlZmluZSB0b19oYW5kbGVfaChuKSBjb250YWluZXJfb2YobixzdHJ1Y3QgaW5wdXRfaGFuZGxlLGhfbm9kZSkKKworc3RhdGljIGlubGluZSB2b2lkIGluaXRfaW5wdXRfZGV2KHN0cnVjdCBpbnB1dF9kZXYgKmRldikKK3sKKwlJTklUX0xJU1RfSEVBRCgmZGV2LT5oX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZkZXYtPm5vZGUpOworfQorCit2b2lkIGlucHV0X3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgaW5wdXRfZGV2ICopOwordm9pZCBpbnB1dF91bnJlZ2lzdGVyX2RldmljZShzdHJ1Y3QgaW5wdXRfZGV2ICopOworCit2b2lkIGlucHV0X3JlZ2lzdGVyX2hhbmRsZXIoc3RydWN0IGlucHV0X2hhbmRsZXIgKik7Cit2b2lkIGlucHV0X3VucmVnaXN0ZXJfaGFuZGxlcihzdHJ1Y3QgaW5wdXRfaGFuZGxlciAqKTsKKworaW50IGlucHV0X2dyYWJfZGV2aWNlKHN0cnVjdCBpbnB1dF9oYW5kbGUgKik7Cit2b2lkIGlucHV0X3JlbGVhc2VfZGV2aWNlKHN0cnVjdCBpbnB1dF9oYW5kbGUgKik7CisKK2ludCBpbnB1dF9vcGVuX2RldmljZShzdHJ1Y3QgaW5wdXRfaGFuZGxlICopOwordm9pZCBpbnB1dF9jbG9zZV9kZXZpY2Uoc3RydWN0IGlucHV0X2hhbmRsZSAqKTsKKworaW50IGlucHV0X2FjY2VwdF9wcm9jZXNzKHN0cnVjdCBpbnB1dF9oYW5kbGUgKmhhbmRsZSwgc3RydWN0IGZpbGUgKmZpbGUpOworaW50IGlucHV0X2ZsdXNoX2RldmljZShzdHJ1Y3QgaW5wdXRfaGFuZGxlKiBoYW5kbGUsIHN0cnVjdCBmaWxlKiBmaWxlKTsKKwordm9pZCBpbnB1dF9ldmVudChzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIHVuc2lnbmVkIGludCB0eXBlLCB1bnNpZ25lZCBpbnQgY29kZSwgaW50IHZhbHVlKTsKKworc3RhdGljIGlubGluZSB2b2lkIGlucHV0X3JlcG9ydF9rZXkoc3RydWN0IGlucHV0X2RldiAqZGV2LCB1bnNpZ25lZCBpbnQgY29kZSwgaW50IHZhbHVlKQoreworCWlucHV0X2V2ZW50KGRldiwgRVZfS0VZLCBjb2RlLCAhIXZhbHVlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGlucHV0X3JlcG9ydF9yZWwoc3RydWN0IGlucHV0X2RldiAqZGV2LCB1bnNpZ25lZCBpbnQgY29kZSwgaW50IHZhbHVlKQoreworCWlucHV0X2V2ZW50KGRldiwgRVZfUkVMLCBjb2RlLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbnB1dF9yZXBvcnRfYWJzKHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgdW5zaWduZWQgaW50IGNvZGUsIGludCB2YWx1ZSkKK3sKKwlpbnB1dF9ldmVudChkZXYsIEVWX0FCUywgY29kZSwgdmFsdWUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW5wdXRfcmVwb3J0X2ZmKHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgdW5zaWduZWQgaW50IGNvZGUsIGludCB2YWx1ZSkKK3sKKwlpbnB1dF9ldmVudChkZXYsIEVWX0ZGLCBjb2RlLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbnB1dF9yZXBvcnRfZmZfc3RhdHVzKHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgdW5zaWduZWQgaW50IGNvZGUsIGludCB2YWx1ZSkKK3sKKwlpbnB1dF9ldmVudChkZXYsIEVWX0ZGX1NUQVRVUywgY29kZSwgdmFsdWUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW5wdXRfcmVncyhzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWRldi0+cmVncyA9IHJlZ3M7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbnB1dF9zeW5jKHN0cnVjdCBpbnB1dF9kZXYgKmRldikKK3sKKwlpbnB1dF9ldmVudChkZXYsIEVWX1NZTiwgU1lOX1JFUE9SVCwgMCk7CisJZGV2LT5yZWdzID0gTlVMTDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGlucHV0X3NldF9hYnNfcGFyYW1zKHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgaW50IGF4aXMsIGludCBtaW4sIGludCBtYXgsIGludCBmdXp6LCBpbnQgZmxhdCkKK3sKKwlkZXYtPmFic21pbltheGlzXSA9IG1pbjsKKwlkZXYtPmFic21heFtheGlzXSA9IG1heDsKKwlkZXYtPmFic2Z1enpbYXhpc10gPSBmdXp6OworCWRldi0+YWJzZmxhdFtheGlzXSA9IGZsYXQ7CisKKwlkZXYtPmFic2JpdFtMT05HKGF4aXMpXSB8PSBCSVQoYXhpcyk7Cit9CisKK2V4dGVybiBzdHJ1Y3QgY2xhc3Nfc2ltcGxlICppbnB1dF9jbGFzczsKKworI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmggYi9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5OWU3YWUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oCkBAIC0wLDAgKzEsMjg5IEBACisvKiBpbnRlcnJ1cHQuaCAqLworI2lmbmRlZiBfTElOVVhfSU5URVJSVVBUX0gKKyNkZWZpbmUgX0xJTlVYX0lOVEVSUlVQVF9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvcHJlZW1wdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KKyNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisKKy8qCisgKiBGb3IgMi40LnggY29tcGF0aWJpbGl0eSwgMi40LnggY2FuIHVzZQorICoKKyAqCXR5cGVkZWYgdm9pZCBpcnFyZXR1cm5fdDsKKyAqCSNkZWZpbmUgSVJRX05PTkUKKyAqCSNkZWZpbmUgSVJRX0hBTkRMRUQKKyAqCSNkZWZpbmUgSVJRX1JFVFZBTCh4KQorICoKKyAqIFRvIG1peCBvbGQtc3R5bGUgYW5kIG5ldy1zdHlsZSBpcnEgaGFuZGxlciByZXR1cm5zLgorICoKKyAqIElSUV9OT05FIG1lYW5zIHdlIGRpZG4ndCBoYW5kbGUgaXQuCisgKiBJUlFfSEFORExFRCBtZWFucyB0aGF0IHdlIGRpZCBoYXZlIGEgdmFsaWQgaW50ZXJydXB0IGFuZCBoYW5kbGVkIGl0LgorICogSVJRX1JFVFZBTCh4KSBzZWxlY3RzIG9uIHRoZSB0d28gZGVwZW5kaW5nIG9uIHggYmVpbmcgbm9uLXplcm8gKGZvciBoYW5kbGVkKQorICovCit0eXBlZGVmIGludCBpcnFyZXR1cm5fdDsKKworI2RlZmluZSBJUlFfTk9ORQkoMCkKKyNkZWZpbmUgSVJRX0hBTkRMRUQJKDEpCisjZGVmaW5lIElSUV9SRVRWQUwoeCkJKCh4KSAhPSAwKQorCitzdHJ1Y3QgaXJxYWN0aW9uIHsKKwlpcnFyZXR1cm5fdCAoKmhhbmRsZXIpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWNwdW1hc2tfdCBtYXNrOworCWNvbnN0IGNoYXIgKm5hbWU7CisJdm9pZCAqZGV2X2lkOworCXN0cnVjdCBpcnFhY3Rpb24gKm5leHQ7CisJaW50IGlycTsKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRpcjsKK307CisKK2V4dGVybiBpcnFyZXR1cm5fdCBub19hY3Rpb24oaW50IGNwbCwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitleHRlcm4gaW50IHJlcXVlc3RfaXJxKHVuc2lnbmVkIGludCwKKwkJICAgICAgIGlycXJldHVybl90ICgqaGFuZGxlcikoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopLAorCQkgICAgICAgdW5zaWduZWQgbG9uZywgY29uc3QgY2hhciAqLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZnJlZV9pcnEodW5zaWduZWQgaW50LCB2b2lkICopOworCisKKyNpZmRlZiBDT05GSUdfR0VORVJJQ19IQVJESVJRUworZXh0ZXJuIHZvaWQgZGlzYWJsZV9pcnFfbm9zeW5jKHVuc2lnbmVkIGludCBpcnEpOworZXh0ZXJuIHZvaWQgZGlzYWJsZV9pcnEodW5zaWduZWQgaW50IGlycSk7CitleHRlcm4gdm9pZCBlbmFibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpOworI2VuZGlmCisKKy8qCisgKiBUZW1wb3JhcnkgZGVmaW5lcyBmb3IgVVAga2VybmVscywgdW50aWwgYWxsIGNvZGUgZ2V0cyBmaXhlZC4KKyAqLworI2lmbmRlZiBDT05GSUdfU01QCitzdGF0aWMgaW5saW5lIHZvaWQgX19kZXByZWNhdGVkIGNsaSh2b2lkKQoreworCWxvY2FsX2lycV9kaXNhYmxlKCk7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgX19kZXByZWNhdGVkIHN0aSh2b2lkKQoreworCWxvY2FsX2lycV9lbmFibGUoKTsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2RlcHJlY2F0ZWQgc2F2ZV9mbGFncyh1bnNpZ25lZCBsb25nICp4KQoreworCWxvY2FsX3NhdmVfZmxhZ3MoKngpOworfQorI2RlZmluZSBzYXZlX2ZsYWdzKHgpIHNhdmVfZmxhZ3MoJngpOworc3RhdGljIGlubGluZSB2b2lkIF9fZGVwcmVjYXRlZCByZXN0b3JlX2ZsYWdzKHVuc2lnbmVkIGxvbmcgeCkKK3sKKwlsb2NhbF9pcnFfcmVzdG9yZSh4KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fZGVwcmVjYXRlZCBzYXZlX2FuZF9jbGkodW5zaWduZWQgbG9uZyAqeCkKK3sKKwlsb2NhbF9pcnFfc2F2ZSgqeCk7Cit9CisjZGVmaW5lIHNhdmVfYW5kX2NsaSh4KQlzYXZlX2FuZF9jbGkoJngpCisjZW5kaWYgLyogQ09ORklHX1NNUCAqLworCisvKiBTb2Z0SVJRIHByaW1pdGl2ZXMuICAqLworI2RlZmluZSBsb2NhbF9iaF9kaXNhYmxlKCkgXAorCQlkbyB7IGFkZF9wcmVlbXB0X2NvdW50KFNPRlRJUlFfT0ZGU0VUKTsgYmFycmllcigpOyB9IHdoaWxlICgwKQorI2RlZmluZSBfX2xvY2FsX2JoX2VuYWJsZSgpIFwKKwkJZG8geyBiYXJyaWVyKCk7IHN1Yl9wcmVlbXB0X2NvdW50KFNPRlRJUlFfT0ZGU0VUKTsgfSB3aGlsZSAoMCkKKworZXh0ZXJuIHZvaWQgbG9jYWxfYmhfZW5hYmxlKHZvaWQpOworCisvKiBQTEVBU0UsIGF2b2lkIHRvIGFsbG9jYXRlIG5ldyBzb2Z0aXJxcywgaWYgeW91IG5lZWQgbm90IF9yZWFsbHlfIGhpZ2gKKyAgIGZyZXF1ZW5jeSB0aHJlYWRlZCBqb2Igc2NoZWR1bGluZy4gRm9yIGFsbW9zdCBhbGwgdGhlIHB1cnBvc2VzCisgICB0YXNrbGV0cyBhcmUgbW9yZSB0aGFuIGVub3VnaC4gRi5lLiBhbGwgc2VyaWFsIGRldmljZSBCSHMgZXQKKyAgIGFsLiBzaG91bGQgYmUgY29udmVydGVkIHRvIHRhc2tsZXRzLCBub3QgdG8gc29mdGlycXMuCisgKi8KKworZW51bQoreworCUhJX1NPRlRJUlE9MCwKKwlUSU1FUl9TT0ZUSVJRLAorCU5FVF9UWF9TT0ZUSVJRLAorCU5FVF9SWF9TT0ZUSVJRLAorCVNDU0lfU09GVElSUSwKKwlUQVNLTEVUX1NPRlRJUlEKK307CisKKy8qIHNvZnRpcnEgbWFzayBhbmQgYWN0aXZlIGZpZWxkcyBtb3ZlZCB0byBpcnFfY3B1c3RhdF90IGluCisgKiBhc20vaGFyZGlycS5oIHRvIGdldCBiZXR0ZXIgY2FjaGUgdXNhZ2UuICBLQU8KKyAqLworCitzdHJ1Y3Qgc29mdGlycV9hY3Rpb24KK3sKKwl2b2lkCSgqYWN0aW9uKShzdHJ1Y3Qgc29mdGlycV9hY3Rpb24gKik7CisJdm9pZAkqZGF0YTsKK307CisKK2FzbWxpbmthZ2Ugdm9pZCBkb19zb2Z0aXJxKHZvaWQpOworZXh0ZXJuIHZvaWQgb3Blbl9zb2Z0aXJxKGludCBuciwgdm9pZCAoKmFjdGlvbikoc3RydWN0IHNvZnRpcnFfYWN0aW9uKiksIHZvaWQgKmRhdGEpOworZXh0ZXJuIHZvaWQgc29mdGlycV9pbml0KHZvaWQpOworI2RlZmluZSBfX3JhaXNlX3NvZnRpcnFfaXJxb2ZmKG5yKSBkbyB7IGxvY2FsX3NvZnRpcnFfcGVuZGluZygpIHw9IDFVTCA8PCAobnIpOyB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgRkFTVENBTEwocmFpc2Vfc29mdGlycV9pcnFvZmYodW5zaWduZWQgaW50IG5yKSk7CitleHRlcm4gdm9pZCBGQVNUQ0FMTChyYWlzZV9zb2Z0aXJxKHVuc2lnbmVkIGludCBucikpOworCisKKy8qIFRhc2tsZXRzIC0tLSBtdWx0aXRocmVhZGVkIGFuYWxvZ3VlIG9mIEJIcy4KKworICAgTWFpbiBmZWF0dXJlIGRpZmZlcmluZyB0aGVtIG9mIGdlbmVyaWMgc29mdGlycXM6IHRhc2tsZXQKKyAgIGlzIHJ1bm5pbmcgb25seSBvbiBvbmUgQ1BVIHNpbXVsdGFuZW91c2x5LgorCisgICBNYWluIGZlYXR1cmUgZGlmZmVyaW5nIHRoZW0gb2YgQkhzOiBkaWZmZXJlbnQgdGFza2xldHMKKyAgIG1heSBiZSBydW4gc2ltdWx0YW5lb3VzbHkgb24gZGlmZmVyZW50IENQVXMuCisKKyAgIFByb3BlcnRpZXM6CisgICAqIElmIHRhc2tsZXRfc2NoZWR1bGUoKSBpcyBjYWxsZWQsIHRoZW4gdGFza2xldCBpcyBndWFyYW50ZWVkCisgICAgIHRvIGJlIGV4ZWN1dGVkIG9uIHNvbWUgY3B1IGF0IGxlYXN0IG9uY2UgYWZ0ZXIgdGhpcy4KKyAgICogSWYgdGhlIHRhc2tsZXQgaXMgYWxyZWFkeSBzY2hlZHVsZWQsIGJ1dCBpdHMgZXhjZWN1dGlvbiBpcyBzdGlsbCBub3QKKyAgICAgc3RhcnRlZCwgaXQgd2lsbCBiZSBleGVjdXRlZCBvbmx5IG9uY2UuCisgICAqIElmIHRoaXMgdGFza2xldCBpcyBhbHJlYWR5IHJ1bm5pbmcgb24gYW5vdGhlciBDUFUgKG9yIHNjaGVkdWxlIGlzIGNhbGxlZAorICAgICBmcm9tIHRhc2tsZXQgaXRzZWxmKSwgaXQgaXMgcmVzY2hlZHVsZWQgZm9yIGxhdGVyLgorICAgKiBUYXNrbGV0IGlzIHN0cmljdGx5IHNlcmlhbGl6ZWQgd3J0IGl0c2VsZiwgYnV0IG5vdAorICAgICB3cnQgYW5vdGhlciB0YXNrbGV0cy4gSWYgY2xpZW50IG5lZWRzIHNvbWUgaW50ZXJ0YXNrIHN5bmNocm9uaXphdGlvbiwKKyAgICAgaGUgbWFrZXMgaXQgd2l0aCBzcGlubG9ja3MuCisgKi8KKworc3RydWN0IHRhc2tsZXRfc3RydWN0Cit7CisJc3RydWN0IHRhc2tsZXRfc3RydWN0ICpuZXh0OworCXVuc2lnbmVkIGxvbmcgc3RhdGU7CisJYXRvbWljX3QgY291bnQ7CisJdm9pZCAoKmZ1bmMpKHVuc2lnbmVkIGxvbmcpOworCXVuc2lnbmVkIGxvbmcgZGF0YTsKK307CisKKyNkZWZpbmUgREVDTEFSRV9UQVNLTEVUKG5hbWUsIGZ1bmMsIGRhdGEpIFwKK3N0cnVjdCB0YXNrbGV0X3N0cnVjdCBuYW1lID0geyBOVUxMLCAwLCBBVE9NSUNfSU5JVCgwKSwgZnVuYywgZGF0YSB9CisKKyNkZWZpbmUgREVDTEFSRV9UQVNLTEVUX0RJU0FCTEVEKG5hbWUsIGZ1bmMsIGRhdGEpIFwKK3N0cnVjdCB0YXNrbGV0X3N0cnVjdCBuYW1lID0geyBOVUxMLCAwLCBBVE9NSUNfSU5JVCgxKSwgZnVuYywgZGF0YSB9CisKKworZW51bQoreworCVRBU0tMRVRfU1RBVEVfU0NIRUQsCS8qIFRhc2tsZXQgaXMgc2NoZWR1bGVkIGZvciBleGVjdXRpb24gKi8KKwlUQVNLTEVUX1NUQVRFX1JVTgkvKiBUYXNrbGV0IGlzIHJ1bm5pbmcgKFNNUCBvbmx5KSAqLworfTsKKworI2lmZGVmIENPTkZJR19TTVAKK3N0YXRpYyBpbmxpbmUgaW50IHRhc2tsZXRfdHJ5bG9jayhzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpCit7CisJcmV0dXJuICF0ZXN0X2FuZF9zZXRfYml0KFRBU0tMRVRfU1RBVEVfUlVOLCAmKHQpLT5zdGF0ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0YXNrbGV0X3VubG9jayhzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpCit7CisJc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCk7IAorCWNsZWFyX2JpdChUQVNLTEVUX1NUQVRFX1JVTiwgJih0KS0+c3RhdGUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdGFza2xldF91bmxvY2tfd2FpdChzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpCit7CisJd2hpbGUgKHRlc3RfYml0KFRBU0tMRVRfU1RBVEVfUlVOLCAmKHQpLT5zdGF0ZSkpIHsgYmFycmllcigpOyB9Cit9CisjZWxzZQorI2RlZmluZSB0YXNrbGV0X3RyeWxvY2sodCkgMQorI2RlZmluZSB0YXNrbGV0X3VubG9ja193YWl0KHQpIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgdGFza2xldF91bmxvY2sodCkgZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKK2V4dGVybiB2b2lkIEZBU1RDQUxMKF9fdGFza2xldF9zY2hlZHVsZShzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpKTsKKworc3RhdGljIGlubGluZSB2b2lkIHRhc2tsZXRfc2NoZWR1bGUoc3RydWN0IHRhc2tsZXRfc3RydWN0ICp0KQoreworCWlmICghdGVzdF9hbmRfc2V0X2JpdChUQVNLTEVUX1NUQVRFX1NDSEVELCAmdC0+c3RhdGUpKQorCQlfX3Rhc2tsZXRfc2NoZWR1bGUodCk7Cit9CisKK2V4dGVybiB2b2lkIEZBU1RDQUxMKF9fdGFza2xldF9oaV9zY2hlZHVsZShzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpKTsKKworc3RhdGljIGlubGluZSB2b2lkIHRhc2tsZXRfaGlfc2NoZWR1bGUoc3RydWN0IHRhc2tsZXRfc3RydWN0ICp0KQoreworCWlmICghdGVzdF9hbmRfc2V0X2JpdChUQVNLTEVUX1NUQVRFX1NDSEVELCAmdC0+c3RhdGUpKQorCQlfX3Rhc2tsZXRfaGlfc2NoZWR1bGUodCk7Cit9CisKKworc3RhdGljIGlubGluZSB2b2lkIHRhc2tsZXRfZGlzYWJsZV9ub3N5bmMoc3RydWN0IHRhc2tsZXRfc3RydWN0ICp0KQoreworCWF0b21pY19pbmMoJnQtPmNvdW50KTsKKwlzbXBfbWJfX2FmdGVyX2F0b21pY19pbmMoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHRhc2tsZXRfZGlzYWJsZShzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpCit7CisJdGFza2xldF9kaXNhYmxlX25vc3luYyh0KTsKKwl0YXNrbGV0X3VubG9ja193YWl0KHQpOworCXNtcF9tYigpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdGFza2xldF9lbmFibGUoc3RydWN0IHRhc2tsZXRfc3RydWN0ICp0KQoreworCXNtcF9tYl9fYmVmb3JlX2F0b21pY19kZWMoKTsKKwlhdG9taWNfZGVjKCZ0LT5jb3VudCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0YXNrbGV0X2hpX2VuYWJsZShzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpCit7CisJc21wX21iX19iZWZvcmVfYXRvbWljX2RlYygpOworCWF0b21pY19kZWMoJnQtPmNvdW50KTsKK30KKworZXh0ZXJuIHZvaWQgdGFza2xldF9raWxsKHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdCk7CitleHRlcm4gdm9pZCB0YXNrbGV0X2tpbGxfaW1tZWRpYXRlKHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdCwgdW5zaWduZWQgaW50IGNwdSk7CitleHRlcm4gdm9pZCB0YXNrbGV0X2luaXQoc3RydWN0IHRhc2tsZXRfc3RydWN0ICp0LAorCQkJIHZvaWQgKCpmdW5jKSh1bnNpZ25lZCBsb25nKSwgdW5zaWduZWQgbG9uZyBkYXRhKTsKKworLyoKKyAqIEF1dG9wcm9iaW5nIGZvciBpcnFzOgorICoKKyAqIHByb2JlX2lycV9vbigpIGFuZCBwcm9iZV9pcnFfb2ZmKCkgcHJvdmlkZSByb2J1c3QgcHJpbWl0aXZlcworICogZm9yIGFjY3VyYXRlIElSUSBwcm9iaW5nIGR1cmluZyBrZXJuZWwgaW5pdGlhbGl6YXRpb24uICBUaGV5IGFyZQorICogcmVhc29uYWJseSBzaW1wbGUgdG8gdXNlLCBhcmUgbm90ICJmb29sZWQiIGJ5IHNwdXJpb3VzIGludGVycnVwdHMsCisgKiBhbmQsIHVubGlrZSBvdGhlciBhdHRlbXB0cyBhdCBJUlEgcHJvYmluZywgdGhleSBkbyBub3QgZ2V0IGh1bmcgb24KKyAqIHN0dWNrIGludGVycnVwdHMgKHN1Y2ggYXMgdW51c2VkIFBTMiBtb3VzZSBpbnRlcmZhY2VzIG9uIEFTVVMgYm9hcmRzKS4KKyAqCisgKiBGb3IgcmVhc29uYWJseSBmb29scHJvb2YgcHJvYmluZywgdXNlIHRoZW0gYXMgZm9sbG93czoKKyAqCisgKiAxLiBjbGVhciBhbmQvb3IgbWFzayB0aGUgZGV2aWNlJ3MgaW50ZXJuYWwgaW50ZXJydXB0LgorICogMi4gc3RpKCk7CisgKiAzLiBpcnFzID0gcHJvYmVfaXJxX29uKCk7ICAgICAgLy8gInRha2Ugb3ZlciIgYWxsIHVuYXNzaWduZWQgaWRsZSBJUlFzCisgKiA0LiBlbmFibGUgdGhlIGRldmljZSBhbmQgY2F1c2UgaXQgdG8gdHJpZ2dlciBhbiBpbnRlcnJ1cHQuCisgKiA1LiB3YWl0IGZvciB0aGUgZGV2aWNlIHRvIGludGVycnVwdCwgdXNpbmcgbm9uLWludHJ1c2l2ZSBwb2xsaW5nIG9yIGEgZGVsYXkuCisgKiA2LiBpcnEgPSBwcm9iZV9pcnFfb2ZmKGlycXMpOyAgLy8gZ2V0IElSUSBudW1iZXIsIDA9bm9uZSwgbmVnYXRpdmU9bXVsdGlwbGUKKyAqIDcuIHNlcnZpY2UgdGhlIGRldmljZSB0byBjbGVhciBpdHMgcGVuZGluZyBpbnRlcnJ1cHQuCisgKiA4LiBsb29wIGFnYWluIGlmIHBhcmFub2lhIGlzIHJlcXVpcmVkLgorICoKKyAqIHByb2JlX2lycV9vbigpIHJldHVybnMgYSBtYXNrIG9mIGFsbG9jYXRlZCBpcnEncy4KKyAqCisgKiBwcm9iZV9pcnFfb2ZmKCkgdGFrZXMgdGhlIG1hc2sgYXMgYSBwYXJhbWV0ZXIsCisgKiBhbmQgcmV0dXJucyB0aGUgaXJxIG51bWJlciB3aGljaCBvY2N1cnJlZCwKKyAqIG9yIHplcm8gaWYgbm9uZSBvY2N1cnJlZCwgb3IgYSBuZWdhdGl2ZSBpcnEgbnVtYmVyCisgKiBpZiBtb3JlIHRoYW4gb25lIGlycSBvY2N1cnJlZC4KKyAqLworCisjaWYgZGVmaW5lZChDT05GSUdfR0VORVJJQ19IQVJESVJRUykgJiYgIWRlZmluZWQoQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFKSAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwcm9iZV9pcnFfb24odm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbmxpbmUgaW50IHByb2JlX2lycV9vZmYodW5zaWduZWQgbG9uZyB2YWwpCit7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBwcm9iZV9pcnFfbWFzayh1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwlyZXR1cm4gMDsKK30KKyNlbHNlCitleHRlcm4gdW5zaWduZWQgbG9uZyBwcm9iZV9pcnFfb24odm9pZCk7CS8qIHJldHVybnMgMCBvbiBmYWlsdXJlICovCitleHRlcm4gaW50IHByb2JlX2lycV9vZmYodW5zaWduZWQgbG9uZyk7CS8qIHJldHVybnMgMCBvciBuZWdhdGl2ZSBvbiBmYWlsdXJlICovCitleHRlcm4gdW5zaWduZWQgaW50IHByb2JlX2lycV9tYXNrKHVuc2lnbmVkIGxvbmcpOwkvKiByZXR1cm5zIG1hc2sgb2YgSVNBIGludGVycnVwdHMgKi8KKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW9jNF9jb21tb24uaCBiL2luY2x1ZGUvbGludXgvaW9jNF9jb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDNiY2M0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9pb2M0X2NvbW1vbi5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgU2lsaWNvbiBHcmFwaGljcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqLworCisjaWZuZGVmIF9MSU5VWF9JT0M0X0NPTU1PTl9ICisjZGVmaW5lIF9MSU5VWF9JT0M0X0NPTU1PTl9ICisKKy8qIHByb3RvdHlwZXMgKi8KKworaW50IGlvYzRfc2VyaWFsX2luaXQodm9pZCk7CisKK2ludCBpb2M0X3NlcmlhbF9hdHRhY2hfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QKKwkJCQlwY2lfZGV2aWNlX2lkICpwY2lfaWQpOworaW50IGlvYzRfaWRlX2F0dGFjaF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdAorCQkJCXBjaV9kZXZpY2VfaWQgKnBjaV9pZCk7CisKKyNlbmRpZgkvKiBfTElOVVhfSU9DNF9DT01NT05fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pb2N0bC5oIGIvaW5jbHVkZS9saW51eC9pb2N0bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhOTFlYjMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2lvY3RsLmgKQEAgLTAsMCArMSw3IEBACisjaWZuZGVmIF9MSU5VWF9JT0NUTF9ICisjZGVmaW5lIF9MSU5VWF9JT0NUTF9ICisKKyNpbmNsdWRlIDxhc20vaW9jdGwuaD4KKworI2VuZGlmIC8qIF9MSU5VWF9JT0NUTF9IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW9jdGwzMi5oIGIvaW5jbHVkZS9saW51eC9pb2N0bDMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFhNjQxOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvaW9jdGwzMi5oCkBAIC0wLDAgKzEsMzcgQEAKKyNpZm5kZWYgSU9DVEwzMl9ICisjZGVmaW5lIElPQ1RMMzJfSCAxCisKK3N0cnVjdCBmaWxlOworCit0eXBlZGVmIGludCAoKmlvY3RsX3RyYW5zX2hhbmRsZXJfdCkodW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQsCisJCQkJCXVuc2lnbmVkIGxvbmcsIHN0cnVjdCBmaWxlICopOworCitzdHJ1Y3QgaW9jdGxfdHJhbnMgeworCXVuc2lnbmVkIGxvbmcgY21kOworCWlvY3RsX3RyYW5zX2hhbmRsZXJfdCBoYW5kbGVyOworCXN0cnVjdCBpb2N0bF90cmFucyAqbmV4dDsKK307CisKKy8qIAorICogUmVnaXN0ZXIgYW4gMzJiaXQgaW9jdGwgdHJhbnNsYXRpb24gaGFuZGxlciBmb3IgaW9jdGwgY21kLgorICoKKyAqIGhhbmRsZXIgPT0gTlVMTDogdXNlIDY0Yml0IGlvY3RsIGhhbmRsZXIuCisgKiBhcmd1bWVudHMgdG8gaGFuZGxlcjogIGZkOiBmaWxlIGRlc2NyaXB0b3IKKyAqICAgICAgICAgICAgICAgICAgICAgICAgY21kOiBpb2N0bCBjb21tYW5kLgorICogICAgICAgICAgICAgICAgICAgICAgICBhcmc6IGlvY3RsIGFyZ3VtZW50CisgKiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBmaWxlICpmaWxlOiBmaWxlIGRlc2NyaXB0b3IgcG9pbnRlci4KKyAqLyAKKworI2lmZGVmIENPTkZJR19DT01QQVQKK2V4dGVybiBpbnQgcmVnaXN0ZXJfaW9jdGwzMl9jb252ZXJzaW9uKHVuc2lnbmVkIGludCBjbWQsCisJCQkJaW9jdGxfdHJhbnNfaGFuZGxlcl90IGhhbmRsZXIpOworZXh0ZXJuIGludCB1bnJlZ2lzdGVyX2lvY3RsMzJfY29udmVyc2lvbih1bnNpZ25lZCBpbnQgY21kKTsKKworI2Vsc2UKKworI2RlZmluZSByZWdpc3Rlcl9pb2N0bDMyX2NvbnZlcnNpb24oY21kLCBoYW5kbGVyKQkoeyAwOyB9KQorI2RlZmluZSB1bnJlZ2lzdGVyX2lvY3RsMzJfY29udmVyc2lvbihjbWQpCQkoeyAwOyB9KQorCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lvcG9ydC5oIGIvaW5jbHVkZS9saW51eC9pb3BvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGQwMTBiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9pb3BvcnQuaApAQCAtMCwwICsxLDEyNyBAQAorLyoKKyAqIGlvcG9ydC5oCURlZmluaXRpb25zIG9mIHJvdXRpbmVzIGZvciBkZXRlY3RpbmcsIHJlc2VydmluZyBhbmQKKyAqCQlhbGxvY2F0aW5nIHN5c3RlbSByZXNvdXJjZXMuCisgKgorICogQXV0aG9yczoJTGludXMgVG9ydmFsZHMKKyAqLworCisjaWZuZGVmIF9MSU5VWF9JT1BPUlRfSAorI2RlZmluZSBfTElOVVhfSU9QT1JUX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisvKgorICogUmVzb3VyY2VzIGFyZSB0cmVlLWxpa2UsIGFsbG93aW5nCisgKiBuZXN0aW5nIGV0Yy4uCisgKi8KK3N0cnVjdCByZXNvdXJjZSB7CisJY29uc3QgY2hhciAqbmFtZTsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnBhcmVudCwgKnNpYmxpbmcsICpjaGlsZDsKK307CisKK3N0cnVjdCByZXNvdXJjZV9saXN0IHsKKwlzdHJ1Y3QgcmVzb3VyY2VfbGlzdCAqbmV4dDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2OworfTsKKworLyoKKyAqIElPIHJlc291cmNlcyBoYXZlIHRoZXNlIGRlZmluZWQgZmxhZ3MuCisgKi8KKyNkZWZpbmUgSU9SRVNPVVJDRV9CSVRTCQkweDAwMDAwMGZmCS8qIEJ1cy1zcGVjaWZpYyBiaXRzICovCisKKyNkZWZpbmUgSU9SRVNPVVJDRV9JTwkJMHgwMDAwMDEwMAkvKiBSZXNvdXJjZSB0eXBlICovCisjZGVmaW5lIElPUkVTT1VSQ0VfTUVNCQkweDAwMDAwMjAwCisjZGVmaW5lIElPUkVTT1VSQ0VfSVJRCQkweDAwMDAwNDAwCisjZGVmaW5lIElPUkVTT1VSQ0VfRE1BCQkweDAwMDAwODAwCisKKyNkZWZpbmUgSU9SRVNPVVJDRV9QUkVGRVRDSAkweDAwMDAxMDAwCS8qIE5vIHNpZGUgZWZmZWN0cyAqLworI2RlZmluZSBJT1JFU09VUkNFX1JFQURPTkxZCTB4MDAwMDIwMDAKKyNkZWZpbmUgSU9SRVNPVVJDRV9DQUNIRUFCTEUJMHgwMDAwNDAwMAorI2RlZmluZSBJT1JFU09VUkNFX1JBTkdFTEVOR1RICTB4MDAwMDgwMDAKKyNkZWZpbmUgSU9SRVNPVVJDRV9TSEFET1dBQkxFCTB4MDAwMTAwMDAKKyNkZWZpbmUgSU9SRVNPVVJDRV9CVVNfSEFTX1ZHQQkweDAwMDgwMDAwCisKKyNkZWZpbmUgSU9SRVNPVVJDRV9ESVNBQkxFRAkweDEwMDAwMDAwCisjZGVmaW5lIElPUkVTT1VSQ0VfVU5TRVQJMHgyMDAwMDAwMAorI2RlZmluZSBJT1JFU09VUkNFX0FVVE8JCTB4NDAwMDAwMDAKKyNkZWZpbmUgSU9SRVNPVVJDRV9CVVNZCQkweDgwMDAwMDAwCS8qIERyaXZlciBoYXMgbWFya2VkIHRoaXMgcmVzb3VyY2UgYnVzeSAqLworCisvKiBJU0EgUG5QIElSUSBzcGVjaWZpYyBiaXRzIChJT1JFU09VUkNFX0JJVFMpICovCisjZGVmaW5lIElPUkVTT1VSQ0VfSVJRX0hJR0hFREdFCQkoMTw8MCkKKyNkZWZpbmUgSU9SRVNPVVJDRV9JUlFfTE9XRURHRQkJKDE8PDEpCisjZGVmaW5lIElPUkVTT1VSQ0VfSVJRX0hJR0hMRVZFTAkoMTw8MikKKyNkZWZpbmUgSU9SRVNPVVJDRV9JUlFfTE9XTEVWRUwJCSgxPDwzKQorCisvKiBJU0EgUG5QIERNQSBzcGVjaWZpYyBiaXRzIChJT1JFU09VUkNFX0JJVFMpICovCisjZGVmaW5lIElPUkVTT1VSQ0VfRE1BX1RZUEVfTUFTSwkoMzw8MCkKKyNkZWZpbmUgSU9SRVNPVVJDRV9ETUFfOEJJVAkJKDA8PDApCisjZGVmaW5lIElPUkVTT1VSQ0VfRE1BXzhBTkQxNkJJVAkoMTw8MCkKKyNkZWZpbmUgSU9SRVNPVVJDRV9ETUFfMTZCSVQJCSgyPDwwKQorCisjZGVmaW5lIElPUkVTT1VSQ0VfRE1BX01BU1RFUgkJKDE8PDIpCisjZGVmaW5lIElPUkVTT1VSQ0VfRE1BX0JZVEUJCSgxPDwzKQorI2RlZmluZSBJT1JFU09VUkNFX0RNQV9XT1JECQkoMTw8NCkKKworI2RlZmluZSBJT1JFU09VUkNFX0RNQV9TUEVFRF9NQVNLCSgzPDw2KQorI2RlZmluZSBJT1JFU09VUkNFX0RNQV9DT01QQVRJQkxFCSgwPDw2KQorI2RlZmluZSBJT1JFU09VUkNFX0RNQV9UWVBFQQkJKDE8PDYpCisjZGVmaW5lIElPUkVTT1VSQ0VfRE1BX1RZUEVCCQkoMjw8NikKKyNkZWZpbmUgSU9SRVNPVVJDRV9ETUFfVFlQRUYJCSgzPDw2KQorCisvKiBJU0EgUG5QIG1lbW9yeSBJL08gc3BlY2lmaWMgYml0cyAoSU9SRVNPVVJDRV9CSVRTKSAqLworI2RlZmluZSBJT1JFU09VUkNFX01FTV9XUklURUFCTEUJKDE8PDApCS8qIGR1cDogSU9SRVNPVVJDRV9SRUFET05MWSAqLworI2RlZmluZSBJT1JFU09VUkNFX01FTV9DQUNIRUFCTEUJKDE8PDEpCS8qIGR1cDogSU9SRVNPVVJDRV9DQUNIRUFCTEUgKi8KKyNkZWZpbmUgSU9SRVNPVVJDRV9NRU1fUkFOR0VMRU5HVEgJKDE8PDIpCS8qIGR1cDogSU9SRVNPVVJDRV9SQU5HRUxFTkdUSCAqLworI2RlZmluZSBJT1JFU09VUkNFX01FTV9UWVBFX01BU0sJKDM8PDMpCisjZGVmaW5lIElPUkVTT1VSQ0VfTUVNXzhCSVQJCSgwPDwzKQorI2RlZmluZSBJT1JFU09VUkNFX01FTV8xNkJJVAkJKDE8PDMpCisjZGVmaW5lIElPUkVTT1VSQ0VfTUVNXzhBTkQxNkJJVAkoMjw8MykKKyNkZWZpbmUgSU9SRVNPVVJDRV9NRU1fMzJCSVQJCSgzPDwzKQorI2RlZmluZSBJT1JFU09VUkNFX01FTV9TSEFET1dBQkxFCSgxPDw1KQkvKiBkdXA6IElPUkVTT1VSQ0VfU0hBRE9XQUJMRSAqLworI2RlZmluZSBJT1JFU09VUkNFX01FTV9FWFBBTlNJT05ST00JKDE8PDYpCisKKy8qIFBDSSBST00gY29udHJvbCBiaXRzIChJT1JFU09VUkNFX0JJVFMpICovCisjZGVmaW5lIElPUkVTT1VSQ0VfUk9NX0VOQUJMRQkJKDE8PDApCS8qIFJPTSBpcyBlbmFibGVkLCBzYW1lIGFzIFBDSV9ST01fQUREUkVTU19FTkFCTEUgKi8KKyNkZWZpbmUgSU9SRVNPVVJDRV9ST01fU0hBRE9XCQkoMTw8MSkJLyogUk9NIGlzIGNvcHkgYXQgQzAwMDowICovCisjZGVmaW5lIElPUkVTT1VSQ0VfUk9NX0NPUFkJCSgxPDwyKQkvKiBST00gaXMgYWxsb2MnZCBjb3B5LCByZXNvdXJjZSBmaWVsZCBvdmVybGFpZCAqLworCisvKiBQQy9JU0Evd2hhdGV2ZXIgLSB0aGUgbm9ybWFsIFBDIGFkZHJlc3Mgc3BhY2VzOiBJTyBhbmQgbWVtb3J5ICovCitleHRlcm4gc3RydWN0IHJlc291cmNlIGlvcG9ydF9yZXNvdXJjZTsKK2V4dGVybiBzdHJ1Y3QgcmVzb3VyY2UgaW9tZW1fcmVzb3VyY2U7CisKK2V4dGVybiBpbnQgcmVxdWVzdF9yZXNvdXJjZShzdHJ1Y3QgcmVzb3VyY2UgKnJvb3QsIHN0cnVjdCByZXNvdXJjZSAqbmV3KTsKK2V4dGVybiBzdHJ1Y3QgcmVzb3VyY2UgKiBfX19fcmVxdWVzdF9yZXNvdXJjZShzdHJ1Y3QgcmVzb3VyY2UgKnJvb3QsIHN0cnVjdCByZXNvdXJjZSAqbmV3KTsKK2V4dGVybiBpbnQgcmVsZWFzZV9yZXNvdXJjZShzdHJ1Y3QgcmVzb3VyY2UgKm5ldyk7CitleHRlcm4gaW50IGluc2VydF9yZXNvdXJjZShzdHJ1Y3QgcmVzb3VyY2UgKnBhcmVudCwgc3RydWN0IHJlc291cmNlICpuZXcpOworZXh0ZXJuIGludCBhbGxvY2F0ZV9yZXNvdXJjZShzdHJ1Y3QgcmVzb3VyY2UgKnJvb3QsIHN0cnVjdCByZXNvdXJjZSAqbmV3LAorCQkJICAgICB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgbWluLCB1bnNpZ25lZCBsb25nIG1heCwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBhbGlnbiwKKwkJCSAgICAgdm9pZCAoKmFsaWduZikodm9pZCAqLCBzdHJ1Y3QgcmVzb3VyY2UgKiwKKwkJCQkJICAgIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpLAorCQkJICAgICB2b2lkICphbGlnbmZfZGF0YSk7CitpbnQgYWRqdXN0X3Jlc291cmNlKHN0cnVjdCByZXNvdXJjZSAqcmVzLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQkgICAgdW5zaWduZWQgbG9uZyBzaXplKTsKKworLyogQ29udmVuaWVuY2Ugc2hvcnRoYW5kIHdpdGggYWxsb2NhdGlvbiAqLworI2RlZmluZSByZXF1ZXN0X3JlZ2lvbihzdGFydCxuLG5hbWUpCV9fcmVxdWVzdF9yZWdpb24oJmlvcG9ydF9yZXNvdXJjZSwgKHN0YXJ0KSwgKG4pLCAobmFtZSkpCisjZGVmaW5lIHJlcXVlc3RfbWVtX3JlZ2lvbihzdGFydCxuLG5hbWUpIF9fcmVxdWVzdF9yZWdpb24oJmlvbWVtX3Jlc291cmNlLCAoc3RhcnQpLCAobiksIChuYW1lKSkKKyNkZWZpbmUgcmVuYW1lX3JlZ2lvbihyZWdpb24sIG5ld25hbWUpIGRvIHsgKHJlZ2lvbiktPm5hbWUgPSAobmV3bmFtZSk7IH0gd2hpbGUgKDApCisKK2V4dGVybiBzdHJ1Y3QgcmVzb3VyY2UgKiBfX3JlcXVlc3RfcmVnaW9uKHN0cnVjdCByZXNvdXJjZSAqLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIG4sIGNvbnN0IGNoYXIgKm5hbWUpOworCisvKiBDb21wYXRpYmlsaXR5IGNydWZ0ICovCisjZGVmaW5lIHJlbGVhc2VfcmVnaW9uKHN0YXJ0LG4pCV9fcmVsZWFzZV9yZWdpb24oJmlvcG9ydF9yZXNvdXJjZSwgKHN0YXJ0KSwgKG4pKQorI2RlZmluZSBjaGVja19tZW1fcmVnaW9uKHN0YXJ0LG4pCV9fY2hlY2tfcmVnaW9uKCZpb21lbV9yZXNvdXJjZSwgKHN0YXJ0KSwgKG4pKQorI2RlZmluZSByZWxlYXNlX21lbV9yZWdpb24oc3RhcnQsbikJX19yZWxlYXNlX3JlZ2lvbigmaW9tZW1fcmVzb3VyY2UsIChzdGFydCksIChuKSkKKworZXh0ZXJuIGludCBfX2NoZWNrX3JlZ2lvbihzdHJ1Y3QgcmVzb3VyY2UgKiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CitleHRlcm4gdm9pZCBfX3JlbGVhc2VfcmVnaW9uKHN0cnVjdCByZXNvdXJjZSAqLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKKworc3RhdGljIGlubGluZSBpbnQgX19kZXByZWNhdGVkIGNoZWNrX3JlZ2lvbih1bnNpZ25lZCBsb25nIHMsIHVuc2lnbmVkIGxvbmcgbikKK3sKKwlyZXR1cm4gX19jaGVja19yZWdpb24oJmlvcG9ydF9yZXNvdXJjZSwgcywgbik7Cit9CisjZW5kaWYJLyogX0xJTlVYX0lPUE9SVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lwLmggYi9pbmNsdWRlL2xpbnV4L2lwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQzOGM2OAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvaXAuaApAQCAtMCwwICsxLDIyMSBAQAorLyoKKyAqIElORVQJCUFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBUQ1AvSVAgcHJvdG9jb2wgc3VpdGUgZm9yIHRoZSBMSU5VWAorICoJCW9wZXJhdGluZyBzeXN0ZW0uICBJTkVUIGlzIGltcGxlbWVudGVkIHVzaW5nIHRoZSAgQlNEIFNvY2tldAorICoJCWludGVyZmFjZSBhcyB0aGUgbWVhbnMgb2YgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSB1c2VyIGxldmVsLgorICoKKyAqCQlEZWZpbml0aW9ucyBmb3IgdGhlIElQIHByb3RvY29sLgorICoKKyAqIFZlcnNpb246CUAoIylpcC5oCTEuMC4yCTA0LzI4LzkzCisgKgorICogQXV0aG9yczoJRnJlZCBOLiB2YW4gS2VtcGVuLCA8d2FsdGplQHVXYWx0Lk5MLk11Z25ldC5PUkc+CisgKgorICoJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCQltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICoJCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICoJCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpZm5kZWYgX0xJTlVYX0lQX0gKKyNkZWZpbmUgX0xJTlVYX0lQX0gKKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisKKyNkZWZpbmUgSVBUT1NfVE9TX01BU0sJCTB4MUUKKyNkZWZpbmUgSVBUT1NfVE9TKHRvcykJCSgodG9zKSZJUFRPU19UT1NfTUFTSykKKyNkZWZpbmUJSVBUT1NfTE9XREVMQVkJCTB4MTAKKyNkZWZpbmUJSVBUT1NfVEhST1VHSFBVVAkweDA4CisjZGVmaW5lCUlQVE9TX1JFTElBQklMSVRZCTB4MDQKKyNkZWZpbmUJSVBUT1NfTUlOQ09TVAkJMHgwMgorCisjZGVmaW5lIElQVE9TX1BSRUNfTUFTSwkJMHhFMAorI2RlZmluZSBJUFRPU19QUkVDKHRvcykJCSgodG9zKSZJUFRPU19QUkVDX01BU0spCisjZGVmaW5lIElQVE9TX1BSRUNfTkVUQ09OVFJPTCAgICAgICAgICAgMHhlMAorI2RlZmluZSBJUFRPU19QUkVDX0lOVEVSTkVUQ09OVFJPTCAgICAgIDB4YzAKKyNkZWZpbmUgSVBUT1NfUFJFQ19DUklUSUNfRUNQICAgICAgICAgICAweGEwCisjZGVmaW5lIElQVE9TX1BSRUNfRkxBU0hPVkVSUklERSAgICAgICAgMHg4MAorI2RlZmluZSBJUFRPU19QUkVDX0ZMQVNIICAgICAgICAgICAgICAgIDB4NjAKKyNkZWZpbmUgSVBUT1NfUFJFQ19JTU1FRElBVEUgICAgICAgICAgICAweDQwCisjZGVmaW5lIElQVE9TX1BSRUNfUFJJT1JJVFkgICAgICAgICAgICAgMHgyMAorI2RlZmluZSBJUFRPU19QUkVDX1JPVVRJTkUgICAgICAgICAgICAgIDB4MDAKKworCisvKiBJUCBvcHRpb25zICovCisjZGVmaW5lIElQT1BUX0NPUFkJCTB4ODAKKyNkZWZpbmUgSVBPUFRfQ0xBU1NfTUFTSwkweDYwCisjZGVmaW5lIElQT1BUX05VTUJFUl9NQVNLCTB4MWYKKworI2RlZmluZQlJUE9QVF9DT1BJRUQobykJCSgobykmSVBPUFRfQ09QWSkKKyNkZWZpbmUJSVBPUFRfQ0xBU1MobykJCSgobykmSVBPUFRfQ0xBU1NfTUFTSykKKyNkZWZpbmUJSVBPUFRfTlVNQkVSKG8pCQkoKG8pJklQT1BUX05VTUJFUl9NQVNLKQorCisjZGVmaW5lCUlQT1BUX0NPTlRST0wJCTB4MDAKKyNkZWZpbmUJSVBPUFRfUkVTRVJWRUQxCQkweDIwCisjZGVmaW5lCUlQT1BUX01FQVNVUkVNRU5UCTB4NDAKKyNkZWZpbmUJSVBPUFRfUkVTRVJWRUQyCQkweDYwCisKKyNkZWZpbmUgSVBPUFRfRU5ECSgwIHxJUE9QVF9DT05UUk9MKQorI2RlZmluZSBJUE9QVF9OT09QCSgxIHxJUE9QVF9DT05UUk9MKQorI2RlZmluZSBJUE9QVF9TRUMJKDIgfElQT1BUX0NPTlRST0x8SVBPUFRfQ09QWSkKKyNkZWZpbmUgSVBPUFRfTFNSUgkoMyB8SVBPUFRfQ09OVFJPTHxJUE9QVF9DT1BZKQorI2RlZmluZSBJUE9QVF9USU1FU1RBTVAJKDQgfElQT1BUX01FQVNVUkVNRU5UKQorI2RlZmluZSBJUE9QVF9SUgkoNyB8SVBPUFRfQ09OVFJPTCkKKyNkZWZpbmUgSVBPUFRfU0lECSg4IHxJUE9QVF9DT05UUk9MfElQT1BUX0NPUFkpCisjZGVmaW5lIElQT1BUX1NTUlIJKDkgfElQT1BUX0NPTlRST0x8SVBPUFRfQ09QWSkKKyNkZWZpbmUgSVBPUFRfUkEJKDIwfElQT1BUX0NPTlRST0x8SVBPUFRfQ09QWSkKKworI2RlZmluZSBJUFZFUlNJT04JNAorI2RlZmluZSBNQVhUVEwJCTI1NQorI2RlZmluZSBJUERFRlRUTAk2NAorCisjZGVmaW5lIElQT1BUX09QVFZBTCAwCisjZGVmaW5lIElQT1BUX09MRU4gICAxCisjZGVmaW5lIElQT1BUX09GRlNFVCAyCisjZGVmaW5lIElQT1BUX01JTk9GRiA0CisjZGVmaW5lIE1BWF9JUE9QVExFTiA0MAorI2RlZmluZSBJUE9QVF9OT1AgSVBPUFRfTk9PUAorI2RlZmluZSBJUE9QVF9FT0wgSVBPUFRfRU5ECisjZGVmaW5lIElQT1BUX1RTICBJUE9QVF9USU1FU1RBTVAKKworI2RlZmluZQlJUE9QVF9UU19UU09OTFkJCTAJCS8qIHRpbWVzdGFtcHMgb25seSAqLworI2RlZmluZQlJUE9QVF9UU19UU0FOREFERFIJMQkJLyogdGltZXN0YW1wcyBhbmQgYWRkcmVzc2VzICovCisjZGVmaW5lCUlQT1BUX1RTX1BSRVNQRUMJMwkJLyogc3BlY2lmaWVkIG1vZHVsZXMgb25seSAqLworCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0L3NvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9pZ21wLmg+CisjaW5jbHVkZSA8bmV0L2Zsb3cuaD4KKworc3RydWN0IGlwX29wdGlvbnMgeworICBfX3UzMgkJZmFkZHI7CQkJCS8qIFNhdmVkIGZpcnN0IGhvcCBhZGRyZXNzICovCisgIHVuc2lnbmVkIGNoYXIJb3B0bGVuOworICB1bnNpZ25lZCBjaGFyIHNycjsKKyAgdW5zaWduZWQgY2hhciBycjsKKyAgdW5zaWduZWQgY2hhciB0czsKKyAgdW5zaWduZWQgY2hhciBpc19zZXRieXVzZXI6MSwJCQkvKiBTZXQgYnkgc2V0c29ja29wdD8JCQkqLworICAgICAgICAgICAgICAgIGlzX2RhdGE6MSwJCQkvKiBPcHRpb25zIGluIF9fZGF0YSwgcmF0aGVyIHRoYW4gc2tiCSovCisgICAgICAgICAgICAgICAgaXNfc3RyaWN0cm91dGU6MSwJCS8qIFN0cmljdCBzb3VyY2Ugcm91dGUJCQkqLworICAgICAgICAgICAgICAgIHNycl9pc19oaXQ6MSwJCQkvKiBQYWNrZXQgZGVzdGluYXRpb24gYWRkciB3YXMgb3VyIG9uZQkqLworICAgICAgICAgICAgICAgIGlzX2NoYW5nZWQ6MSwJCQkvKiBJUCBjaGVja3N1bSBtb3JlIG5vdCB2YWxpZAkJKi8JCisgICAgICAgICAgICAgICAgcnJfbmVlZGFkZHI6MSwJCQkvKiBOZWVkIHRvIHJlY29yZCBhZGRyIG9mIG91dGdvaW5nIGRldgkqLworICAgICAgICAgICAgICAgIHRzX25lZWR0aW1lOjEsCQkJLyogTmVlZCB0byByZWNvcmQgdGltZXN0YW1wCQkqLworICAgICAgICAgICAgICAgIHRzX25lZWRhZGRyOjE7CQkJLyogTmVlZCB0byByZWNvcmQgYWRkciBvZiBvdXRnb2luZyBkZXYgICovCisgIHVuc2lnbmVkIGNoYXIgcm91dGVyX2FsZXJ0OworICB1bnNpZ25lZCBjaGFyIF9fcGFkMTsKKyAgdW5zaWduZWQgY2hhciBfX3BhZDI7CisgIHVuc2lnbmVkIGNoYXIgX19kYXRhWzBdOworfTsKKworI2RlZmluZSBvcHRsZW5ndGgob3B0KSAoc2l6ZW9mKHN0cnVjdCBpcF9vcHRpb25zKSArIG9wdC0+b3B0bGVuKQorCitzdHJ1Y3QgaXB2Nl9waW5mbzsKKworc3RydWN0IGluZXRfc29jayB7CisJLyogc2sgYW5kIHBpbmV0NiBoYXMgdG8gYmUgdGhlIGZpcnN0IHR3byBtZW1iZXJzIG9mIGluZXRfc29jayAqLworCXN0cnVjdCBzb2NrCQlzazsKKyNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKKwlzdHJ1Y3QgaXB2Nl9waW5mbwkqcGluZXQ2OworI2VuZGlmCisJLyogU29ja2V0IGRlbXVsdGlwbGV4IGNvbXBhcmlzb25zIG9uIGluY29taW5nIHBhY2tldHMuICovCisJX191MzIJCQlkYWRkcjsJCS8qIEZvcmVpZ24gSVB2NCBhZGRyICovCisJX191MzIJCQlyY3Zfc2FkZHI7CS8qIEJvdW5kIGxvY2FsIElQdjQgYWRkciAqLworCV9fdTE2CQkJZHBvcnQ7CQkvKiBEZXN0aW5hdGlvbiBwb3J0ICovCisJX191MTYJCQludW07CQkvKiBMb2NhbCBwb3J0ICovCisJX191MzIJCQlzYWRkcjsJCS8qIFNlbmRpbmcgc291cmNlICovCisJX19zMTYJCQl1Y190dGw7CQkvKiBVbmljYXN0IFRUTCAqLworCV9fdTE2CQkJY21zZ19mbGFnczsKKwlzdHJ1Y3QgaXBfb3B0aW9ucwkqb3B0OworCV9fdTE2CQkJc3BvcnQ7CQkvKiBTb3VyY2UgcG9ydCAqLworCV9fdTE2CQkJaWQ7CQkvKiBJRCBjb3VudGVyIGZvciBERiBwa3RzICovCisJX191OAkJCXRvczsJCS8qIFRPUyAqLworCV9fdTgJCQltY190dGw7CQkvKiBNdWx0aWNhc3RpbmcgVFRMICovCisJX191OAkJCXBtdHVkaXNjOworCXVuc2lnbmVkCQlyZWN2ZXJyIDogMSwKKwkJCQlmcmVlYmluZCA6IDEsCisJCQkJaGRyaW5jbCA6IDEsCisJCQkJbWNfbG9vcCA6IDE7CisJaW50CQkJbWNfaW5kZXg7CS8qIE11bHRpY2FzdCBkZXZpY2UgaW5kZXggKi8KKwlfX3UzMgkJCW1jX2FkZHI7CisJc3RydWN0IGlwX21jX3NvY2tsaXN0CSptY19saXN0OwkvKiBHcm91cCBhcnJheSAqLworCS8qCisJICogRm9sbG93aW5nIG1lbWJlcnMgYXJlIHVzZWQgdG8gcmV0YWluIHRoZSBpbmZvbWF0aW9uIHRvIGJ1aWxkCisJICogYW4gaXAgaGVhZGVyIG9uIGVhY2ggaXAgZnJhZ21lbnRhdGlvbiB3aGlsZSB0aGUgc29ja2V0IGlzIGNvcmtlZC4KKwkgKi8KKwlzdHJ1Y3QgeworCQl1bnNpZ25lZCBpbnQJCWZsYWdzOworCQl1bnNpZ25lZCBpbnQJCWZyYWdzaXplOworCQlzdHJ1Y3QgaXBfb3B0aW9ucwkqb3B0OworCQlzdHJ1Y3QgcnRhYmxlCQkqcnQ7CisJCWludAkJCWxlbmd0aDsgLyogVG90YWwgbGVuZ3RoIG9mIGFsbCBmcmFtZXMgKi8KKwkJdTMyCQkJYWRkcjsKKwkJc3RydWN0IGZsb3dpCQlmbDsKKwl9IGNvcms7Cit9OworCisjZGVmaW5lIElQQ09SS19PUFQJMQkvKiBpcC1vcHRpb25zIGhhcyBiZWVuIGhlbGQgaW4gaXBjb3JrLm9wdCAqLworI2RlZmluZSBJUENPUktfQUxMRlJBRwkyCS8qIGFsd2F5cyBmcmFnbWVudCAoZm9yIGlwdjYgZm9yIG5vdykgKi8KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgaW5ldF9zb2NrICppbmV0X3NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaykKK3sKKwlyZXR1cm4gKHN0cnVjdCBpbmV0X3NvY2sgKilzazsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9faW5ldF9za19jb3B5X2Rlc2NlbmRhbnQoc3RydWN0IHNvY2sgKnNrX3RvLAorCQkJCQkgICAgIGNvbnN0IHN0cnVjdCBzb2NrICpza19mcm9tLAorCQkJCQkgICAgIGNvbnN0IGludCBhbmNlc3Rvcl9zaXplKQoreworCW1lbWNweShpbmV0X3NrKHNrX3RvKSArIDEsIGluZXRfc2soc2tfZnJvbSkgKyAxLAorCSAgICAgICBza19mcm9tLT5za19wcm90LT5vYmpfc2l6ZSAtIGFuY2VzdG9yX3NpemUpOworfQorI2lmICEoZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpKQorc3RhdGljIGlubGluZSB2b2lkIGluZXRfc2tfY29weV9kZXNjZW5kYW50KHN0cnVjdCBzb2NrICpza190bywKKwkJCQkJICAgY29uc3Qgc3RydWN0IHNvY2sgKnNrX2Zyb20pCit7CisJX19pbmV0X3NrX2NvcHlfZGVzY2VuZGFudChza190bywgc2tfZnJvbSwgc2l6ZW9mKHN0cnVjdCBpbmV0X3NvY2spKTsKK30KKyNlbmRpZgorI2VuZGlmCisKK3N0cnVjdCBpcGhkciB7CisjaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fQklURklFTEQpCisJX191OAlpaGw6NCwKKwkJdmVyc2lvbjo0OworI2VsaWYgZGVmaW5lZCAoX19CSUdfRU5ESUFOX0JJVEZJRUxEKQorCV9fdTgJdmVyc2lvbjo0LAorICAJCWlobDo0OworI2Vsc2UKKyNlcnJvcgkiUGxlYXNlIGZpeCA8YXNtL2J5dGVvcmRlci5oPiIKKyNlbmRpZgorCV9fdTgJdG9zOworCV9fdTE2CXRvdF9sZW47CisJX191MTYJaWQ7CisJX191MTYJZnJhZ19vZmY7CisJX191OAl0dGw7CisJX191OAlwcm90b2NvbDsKKwlfX3UxNgljaGVjazsKKwlfX3UzMglzYWRkcjsKKwlfX3UzMglkYWRkcjsKKwkvKlRoZSBvcHRpb25zIHN0YXJ0IGhlcmUuICovCit9OworCitzdHJ1Y3QgaXBfYXV0aF9oZHIgeworCV9fdTggIG5leHRoZHI7CisJX191OCAgaGRybGVuOwkJLyogVGhpcyBvbmUgaXMgbWVhc3VyZWQgaW4gMzIgYml0IHVuaXRzISAqLworCV9fdTE2IHJlc2VydmVkOworCV9fdTMyIHNwaTsKKwlfX3UzMiBzZXFfbm87CQkvKiBTZXF1ZW5jZSBudW1iZXIgKi8KKwlfX3U4ICBhdXRoX2RhdGFbMF07CS8qIFZhcmlhYmxlIGxlbiBidXQgPj00LiBNaW5kIHRoZSA2NCBiaXQgYWxpZ25tZW50ISAqLworfTsKKworc3RydWN0IGlwX2VzcF9oZHIgeworCV9fdTMyIHNwaTsKKwlfX3UzMiBzZXFfbm87CQkvKiBTZXF1ZW5jZSBudW1iZXIgKi8KKwlfX3U4ICBlbmNfZGF0YVswXTsJLyogVmFyaWFibGUgbGVuIGJ1dCA+PTguIE1pbmQgdGhlIDY0IGJpdCBhbGlnbm1lbnQhICovCit9OworCitzdHJ1Y3QgaXBfY29tcF9oZHIgeworCV9fdTggbmV4dGhkcjsKKwlfX3U4IGZsYWdzOworCV9fdTE2IGNwaTsKK307CisKKyNlbmRpZgkvKiBfTElOVVhfSVBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pcDZfdHVubmVsLmggYi9pbmNsdWRlL2xpbnV4L2lwNl90dW5uZWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzIzYWViCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9pcDZfdHVubmVsLmgKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqICRJZCQKKyAqLworCisjaWZuZGVmIF9JUDZfVFVOTkVMX0gKKyNkZWZpbmUgX0lQNl9UVU5ORUxfSAorCisjZGVmaW5lIElQVjZfVExWX1ROTF9FTkNBUF9MSU1JVCA0CisjZGVmaW5lIElQVjZfREVGQVVMVF9UTkxfRU5DQVBfTElNSVQgNAorCisvKiBkb24ndCBhZGQgZW5jYXBzdWxhdGlvbiBsaW1pdCBpZiBvbmUgaXNuJ3QgcHJlc2VudCBpbiBpbm5lciBwYWNrZXQgKi8KKyNkZWZpbmUgSVA2X1ROTF9GX0lHTl9FTkNBUF9MSU1JVCAweDEKKy8qIGNvcHkgdGhlIHRyYWZmaWMgY2xhc3MgZmllbGQgZnJvbSB0aGUgaW5uZXIgcGFja2V0ICovCisjZGVmaW5lIElQNl9UTkxfRl9VU0VfT1JJR19UQ0xBU1MgMHgyCisvKiBjb3B5IHRoZSBmbG93bGFiZWwgZnJvbSB0aGUgaW5uZXIgcGFja2V0ICovCisjZGVmaW5lIElQNl9UTkxfRl9VU0VfT1JJR19GTE9XTEFCRUwgMHg0CisvKiBiZWluZyB1c2VkIGZvciBNb2JpbGUgSVB2NiAqLworI2RlZmluZSBJUDZfVE5MX0ZfTUlQNl9ERVYgMHg4CisvKiBjb3B5IERTQ1AgZnJvbSB0aGUgb3V0ZXIgcGFja2V0ICovCisjZGVmaW5lIElQNl9UTkxfRl9SQ1ZfRFNDUF9DT1BZIDB4MTAKKworc3RydWN0IGlwNl90bmxfcGFybSB7CisJY2hhciBuYW1lW0lGTkFNU0laXTsJLyogbmFtZSBvZiB0dW5uZWwgZGV2aWNlICovCisJaW50IGxpbms7CQkvKiBpZmluZGV4IG9mIHVuZGVybHlpbmcgTDIgaW50ZXJmYWNlICovCisJX191OCBwcm90bzsJCS8qIHR1bm5lbCBwcm90b2NvbCAqLworCV9fdTggZW5jYXBfbGltaXQ7CS8qIGVuY2Fwc3VsYXRpb24gbGltaXQgZm9yIHR1bm5lbCAqLworCV9fdTggaG9wX2xpbWl0OwkJLyogaG9wIGxpbWl0IGZvciB0dW5uZWwgKi8KKwlfX3UzMiBmbG93aW5mbzsJCS8qIHRyYWZmaWMgY2xhc3MgYW5kIGZsb3dsYWJlbCBmb3IgdHVubmVsICovCisJX191MzIgZmxhZ3M7CQkvKiB0dW5uZWwgZmxhZ3MgKi8KKwlzdHJ1Y3QgaW42X2FkZHIgbGFkZHI7CS8qIGxvY2FsIHR1bm5lbCBlbmQtcG9pbnQgYWRkcmVzcyAqLworCXN0cnVjdCBpbjZfYWRkciByYWRkcjsJLyogcmVtb3RlIHR1bm5lbCBlbmQtcG9pbnQgYWRkcmVzcyAqLworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lwX21wX2FsZy5oIGIvaW5jbHVkZS9saW51eC9pcF9tcF9hbGcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjM0ZTIwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9pcF9tcF9hbGcuaApAQCAtMCwwICsxLDIyIEBACisvKiBpcF9tcF9hbGcuaDogSVBWNCBtdWx0aXBhdGggYWxnb3JpdGhtIHN1cHBvcnQsIHVzZXItdmlzaWJsZSB2YWx1ZXMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IEVpbmFyIEx1ZWNrIDxlbHVlY2tAZGUuaWJtLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQGRhdmVtbG9mdC5uZXQ+CisgKi8KKworI2lmbmRlZiBfTElOVVhfSVBfTVBfQUxHX0gKKyNkZWZpbmUgX0xJTlVYX0lQX01QX0FMR19ICisKK2VudW0gaXBfbXBfYWxnIHsKKwlJUF9NUF9BTEdfTk9ORSwKKwlJUF9NUF9BTEdfUlIsCisJSVBfTVBfQUxHX0RSUiwKKwlJUF9NUF9BTEdfUkFORE9NLAorCUlQX01QX0FMR19XUkFORE9NLAorCV9fSVBfTVBfQUxHX01BWAorfTsKKworI2RlZmluZSBJUF9NUF9BTEdfTUFYIChfX0lQX01QX0FMR19NQVggLSAxKQorCisjZW5kaWYgLyogX0xJTlVYX0lQX01QX0FMR19IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXBjLmggYi9pbmNsdWRlL2xpbnV4L2lwYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyOTExODkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2lwYy5oCkBAIC0wLDAgKzEsNzUgQEAKKyNpZm5kZWYgX0xJTlVYX0lQQ19ICisjZGVmaW5lIF9MSU5VWF9JUENfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2RlZmluZSBJUENfUFJJVkFURSAoKF9fa2VybmVsX2tleV90KSAwKSAgCisKKy8qIE9ic29sZXRlLCB1c2VkIG9ubHkgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGFuZCBsaWJjNSBjb21waWxlcyAqLworc3RydWN0IGlwY19wZXJtCit7CisJX19rZXJuZWxfa2V5X3QJa2V5OworCV9fa2VybmVsX3VpZF90CXVpZDsKKwlfX2tlcm5lbF9naWRfdAlnaWQ7CisJX19rZXJuZWxfdWlkX3QJY3VpZDsKKwlfX2tlcm5lbF9naWRfdAljZ2lkOworCV9fa2VybmVsX21vZGVfdAltb2RlOyAKKwl1bnNpZ25lZCBzaG9ydAlzZXE7Cit9OworCisvKiBJbmNsdWRlIHRoZSBkZWZpbml0aW9uIG9mIGlwYzY0X3Blcm0gKi8KKyNpbmNsdWRlIDxhc20vaXBjYnVmLmg+CisKKy8qIHJlc291cmNlIGdldCByZXF1ZXN0IGZsYWdzICovCisjZGVmaW5lIElQQ19DUkVBVCAgMDAwMDEwMDAgICAvKiBjcmVhdGUgaWYga2V5IGlzIG5vbmV4aXN0ZW50ICovCisjZGVmaW5lIElQQ19FWENMICAgMDAwMDIwMDAgICAvKiBmYWlsIGlmIGtleSBleGlzdHMgKi8KKyNkZWZpbmUgSVBDX05PV0FJVCAwMDAwNDAwMCAgIC8qIHJldHVybiBlcnJvciBvbiB3YWl0ICovCisKKy8qIHRoZXNlIGZpZWxkcyBhcmUgdXNlZCBieSB0aGUgRElQQyBwYWNrYWdlIHNvIHRoZSBrZXJuZWwgYXMgc3RhbmRhcmQKKyAgIHNob3VsZCBhdm9pZCB1c2luZyB0aGVtIGlmIHBvc3NpYmxlICovCisgICAKKyNkZWZpbmUgSVBDX0RJUEMgMDAwMTAwMDAgIC8qIG1ha2UgaXQgZGlzdHJpYnV0ZWQgKi8KKyNkZWZpbmUgSVBDX09XTiAgMDAwMjAwMDAgIC8qIHRoaXMgbWFjaGluZSBpcyB0aGUgRElQQyBvd25lciAqLworCisvKiAKKyAqIENvbnRyb2wgY29tbWFuZHMgdXNlZCB3aXRoIHNlbWN0bCwgbXNnY3RsIGFuZCBzaG1jdGwgCisgKiBzZWUgYWxzbyBzcGVjaWZpYyBjb21tYW5kcyBpbiBzZW0uaCwgbXNnLmggYW5kIHNobS5oCisgKi8KKyNkZWZpbmUgSVBDX1JNSUQgMCAgICAgLyogcmVtb3ZlIHJlc291cmNlICovCisjZGVmaW5lIElQQ19TRVQgIDEgICAgIC8qIHNldCBpcGNfcGVybSBvcHRpb25zICovCisjZGVmaW5lIElQQ19TVEFUIDIgICAgIC8qIGdldCBpcGNfcGVybSBvcHRpb25zICovCisjZGVmaW5lIElQQ19JTkZPIDMgICAgIC8qIHNlZSBpcGNzICovCisKKy8qCisgKiBWZXJzaW9uIGZsYWdzIGZvciBzZW1jdGwsIG1zZ2N0bCwgYW5kIHNobWN0bCBjb21tYW5kcworICogVGhlc2UgYXJlIHBhc3NlZCBhcyBiaXRmbGFncyBvci1lZCB3aXRoIHRoZSBhY3R1YWwgY29tbWFuZAorICovCisjZGVmaW5lIElQQ19PTEQgMAkvKiBPbGQgdmVyc2lvbiAobm8gMzItYml0IFVJRCBzdXBwb3J0IG9uIG1hbnkKKwkJCSAgIGFyY2hpdGVjdHVyZXMpICovCisjZGVmaW5lIElQQ182NCAgMHgwMTAwICAvKiBOZXcgdmVyc2lvbiAoc3VwcG9ydCAzMi1iaXQgVUlEcywgYmlnZ2VyCisJCQkgICBtZXNzYWdlIHNpemVzLCBldGMuICovCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNkZWZpbmUgSVBDTU5JIDMyNzY4ICAvKiA8PSBNQVhfSU5UIGxpbWl0IGZvciBpcGMgYXJyYXlzIChpbmNsdWRpbmcgc3lzY3RsIGNoYW5nZXMpICovCisKKy8qIHVzZWQgYnkgaW4ta2VybmVsIGRhdGEgc3RydWN0dXJlcyAqLworc3RydWN0IGtlcm5faXBjX3Blcm0KK3sKKwlzcGlubG9ja190CWxvY2s7CisJaW50CQlkZWxldGVkOworCWtleV90CQlrZXk7CisJdWlkX3QJCXVpZDsKKwlnaWRfdAkJZ2lkOworCXVpZF90CQljdWlkOworCWdpZF90CQljZ2lkOworCW1vZGVfdAkJbW9kZTsgCisJdW5zaWduZWQgbG9uZwlzZXE7CisJdm9pZAkJKnNlY3VyaXR5OworfTsKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9MSU5VWF9JUENfSCAqLworCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXBtaS5oIGIvaW5jbHVkZS9saW51eC9pcG1pLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVjMjY1ZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvaXBtaS5oCkBAIC0wLDAgKzEsNjAyIEBACisvKgorICogaXBtaS5oCisgKgorICogTW9udGFWaXN0YSBJUE1JIGludGVyZmFjZQorICoKKyAqIEF1dGhvcjogTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICogICAgICAgICBDb3JleSBNaW55YXJkIDxtaW55YXJkQG12aXN0YS5jb20+CisgKiAgICAgICAgIHNvdXJjZUBtdmlzdGEuY29tCisgKgorICogQ29weXJpZ2h0IDIwMDIgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorICogIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiAgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqICBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqICBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCisgKiAgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRQorICogIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX0xJTlVYX0lQTUlfSAorI2RlZmluZSBfX0xJTlVYX0lQTUlfSAorCisjaW5jbHVkZSA8bGludXgvaXBtaV9tc2dkZWZzLmg+CisKKy8qCisgKiBUaGlzIGZpbGUgZGVzY3JpYmVzIGFuIGludGVyZmFjZSB0byBhbiBJUE1JIGRyaXZlci4gIFlvdSBoYXZlIHRvCisgKiBoYXZlIGEgZmFpcmx5IGdvb2QgdW5kZXJzdGFuZGluZyBvZiBJUE1JIHRvIHVzZSB0aGlzLCBzbyBnbyByZWFkCisgKiB0aGUgc3BlY3MgZmlyc3QgYmVmb3JlIGFjdHVhbGx5IHRyeWluZyB0byBkbyBhbnl0aGluZy4KKyAqCisgKiBXaXRoIHRoYXQgc2FpZCwgdGhpcyBkcml2ZXIgcHJvdmlkZXMgYSBtdWx0aS11c2VyIGludGVyZmFjZSB0byB0aGUKKyAqIElQTUkgZHJpdmVyLCBhbmQgaXQgYWxsb3dzIG11bHRpcGxlIElQTUkgcGh5c2ljYWwgaW50ZXJmYWNlcyBiZWxvdworICogdGhlIGRyaXZlci4gIFRoZSBwaHlzaWNhbCBpbnRlcmZhY2VzIGJpbmQgYXMgYSBsb3dlciBsYXllciBvbiB0aGUKKyAqIGRyaXZlci4gIFRoZXkgYXBwZWFyIGFzIGludGVyZmFjZXMgdG8gdGhlIGFwcGxpY2F0aW9uIHVzaW5nIHRoaXMKKyAqIGludGVyZmFjZS4KKyAqCisgKiBNdWx0aS11c2VyIG1lYW5zIHRoYXQgbXVsdGlwbGUgYXBwbGljYXRpb25zIG1heSB1c2UgdGhlIGRyaXZlciwKKyAqIHNlbmQgY29tbWFuZHMsIHJlY2VpdmUgcmVzcG9uc2VzLCBldGMuICBUaGUgZHJpdmVyIGtlZXBzIHRyYWNrIG9mCisgKiBjb21tYW5kcyB0aGUgdXNlciBzZW5kcyBhbmQgdHJhY2tzIHRoZSByZXNwb25zZXMuICBUaGUgcmVzcG9uc2VzCisgKiB3aWxsIGdvIGJhY2sgdG8gdGhlIGFwcGxpY2F0aW9uIHRoYXQgc2VuZCB0aGUgY29tbWFuZC4gIElmIHRoZQorICogcmVzcG9uc2UgZG9lc24ndCBjb21lIGJhY2sgaW4gdGltZSwgdGhlIGRyaXZlciB3aWxsIHJldHVybiBhCisgKiB0aW1lb3V0IGVycm9yIHJlc3BvbnNlIHRvIHRoZSBhcHBsaWNhdGlvbi4gIEFzeW5jaHJvbm91cyBldmVudHMKKyAqIGZyb20gdGhlIEJNQyBldmVudCBxdWV1ZSB3aWxsIGdvIHRvIGFsbCB1c2VycyBib3VuZCB0byB0aGUgZHJpdmVyLgorICogVGhlIGluY29taW5nIGV2ZW50IHF1ZXVlIGluIHRoZSBCTUMgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGZsdXNoZWQKKyAqIGlmIGl0IGJlY29tZXMgZnVsbCBhbmQgaXQgaXMgcXVlcmllZCBvbmNlIGEgc2Vjb25kIHRvIHNlZSBpZgorICogYW55dGhpbmcgaXMgaW4gaXQuICBJbmNvbWluZyBjb21tYW5kcyB0byB0aGUgZHJpdmVyIHdpbGwgZ2V0CisgKiBkZWxpdmVyZWQgYXMgY29tbWFuZHMuCisgKgorICogVGhpcyBkcml2ZXIgcHJvdmlkZXMgdHdvIG1haW4gaW50ZXJmYWNlczogb25lIGZvciBpbi1rZXJuZWwKKyAqIGFwcGxpY2F0aW9ucyBhbmQgYW5vdGhlciBmb3IgdXNlcmxhbmQgYXBwbGljYXRpb25zLiAgVGhlCisgKiBjYXBhYmlsaXRpZXMgYXJlIGJhc2ljYWxseSB0aGUgc2FtZSBmb3IgYm90aCBpbnRlcmZhY2UsIGFsdGhvdWdoCisgKiB0aGUgaW50ZXJmYWNlcyBhcmUgc29tZXdoYXQgZGlmZmVyZW50LiAgVGhlIHN0dWZmIGluIHRoZQorICogI2lmZGVmIEtFUk5FTCBiZWxvdyBpcyB0aGUgaW4ta2VybmVsIGludGVyZmFjZS4gIFRoZSB1c2VybGFuZAorICogaW50ZXJmYWNlIGlzIGRlZmluZWQgbGF0ZXIgaW4gdGhlIGZpbGUuICAqLworCisKKworLyoKKyAqIFRoaXMgaXMgYW4gb3ZlcmxheSBmb3IgYWxsIHRoZSBhZGRyZXNzIHR5cGVzLCBzbyBpdCdzIGVhc3kgdG8KKyAqIGRldGVybWluZSB0aGUgYWN0dWFsIGFkZHJlc3MgdHlwZS4gIFRoaXMgaXMga2luZCBvZiBsaWtlIGFkZHJlc3NlcworICogd29yayBmb3Igc29ja2V0cy4KKyAqLworI2RlZmluZSBJUE1JX01BWF9BRERSX1NJWkUgMzIKK3N0cnVjdCBpcG1pX2FkZHIKK3sKKwkgLyogVHJ5IHRvIHRha2UgdGhlc2UgZnJvbSB0aGUgIkNoYW5uZWwgTWVkaXVtIFR5cGUiIHRhYmxlCisJICAgIGluIHNlY3Rpb24gNi41IG9mIHRoZSBJUE1JIDEuNSBtYW51YWwuICovCisJaW50ICAgYWRkcl90eXBlOworCXNob3J0IGNoYW5uZWw7CisJY2hhciAgZGF0YVtJUE1JX01BWF9BRERSX1NJWkVdOworfTsKKworLyoKKyAqIFdoZW4gdGhlIGFkZHJlc3MgaXMgbm90IHVzZWQsIHRoZSB0eXBlIHdpbGwgYmUgc2V0IHRvIHRoaXMgdmFsdWUuCisgKiBUaGUgY2hhbm5lbCBpcyB0aGUgQk1DJ3MgY2hhbm5lbCBudW1iZXIgZm9yIHRoZSBjaGFubmVsICh1c3VhbGx5CisgKiAwKSwgb3IgSVBNQ19CTUNfQ0hBTk5FTCBpZiBjb21tdW5pY2F0aW5nIGRpcmVjdGx5IHdpdGggdGhlIEJNQy4KKyAqLworI2RlZmluZSBJUE1JX1NZU1RFTV9JTlRFUkZBQ0VfQUREUl9UWVBFCTB4MGMKK3N0cnVjdCBpcG1pX3N5c3RlbV9pbnRlcmZhY2VfYWRkcgoreworCWludCAgICAgICAgICAgYWRkcl90eXBlOworCXNob3J0ICAgICAgICAgY2hhbm5lbDsKKwl1bnNpZ25lZCBjaGFyIGx1bjsKK307CisKKy8qIEFuIElQTUIgQWRkcmVzcy4gKi8KKyNkZWZpbmUgSVBNSV9JUE1CX0FERFJfVFlQRQkJMHgwMQorLyogVXNlZCBmb3IgYnJvYWRjYXN0IGdldCBkZXZpY2UgaWQgYXMgZGVzY3JpYmVkIGluIHNlY3Rpb24gMTcuOSBvZiB0aGUKKyAgIElQTUkgMS41IG1hbnVhbC4gKi8gCisjZGVmaW5lIElQTUlfSVBNQl9CUk9BRENBU1RfQUREUl9UWVBFCTB4NDEKK3N0cnVjdCBpcG1pX2lwbWJfYWRkcgoreworCWludCAgICAgICAgICAgYWRkcl90eXBlOworCXNob3J0ICAgICAgICAgY2hhbm5lbDsKKwl1bnNpZ25lZCBjaGFyIHNsYXZlX2FkZHI7CisJdW5zaWduZWQgY2hhciBsdW47Cit9OworCisvKgorICogQSBMQU4gQWRkcmVzcy4gIFRoaXMgaXMgYW4gYWRkcmVzcyB0by9mcm9tIGEgTEFOIGludGVyZmFjZSBicmlkZ2VkCisgKiBieSB0aGUgQk1DLCBub3QgYW4gYWRkcmVzcyBhY3R1YWxseSBvdXQgb24gdGhlIExBTi4KKyAqCisgKiBBIGNvbmNpb3VzIGRlY2lzaW9uIHdhcyBtYWRlIGhlcmUgdG8gZGV2aWF0ZSBzbGlnaHRseSBmcm9tIHRoZSBJUE1JCisgKiBzcGVjLiAgV2UgZG8gbm90IHVzZSBycVNXSUQgYW5kIHJzU1dJRCBsaWtlIGl0IHNob3dzIGluIHRoZQorICogbWVzc2FnZS4gIEluc3RlYWQsIHdlIHVzZSByZW1vdGVfU1dJRCBhbmQgbG9jYWxfU1dJRC4gIFRoaXMgbWVhbnMKKyAqIHRoYXQgYW55IG1lc3NhZ2UgKGEgcmVxdWVzdCBvciByZXNwb25zZSkgZnJvbSBhbm90aGVyIGRldmljZSB3aWxsCisgKiBhbHdheXMgaGF2ZSBleGFjdGx5IHRoZSBzYW1lIGFkZHJlc3MuICBJZiB5b3UgZGlkbid0IGRvIHRoaXMsCisgKiByZXF1ZXN0cyBhbmQgcmVzcG9uc2VzIGZyb20gdGhlIHNhbWUgZGV2aWNlIHdvdWxkIGhhdmUgZGlmZmVyZW50CisgKiBhZGRyZXNzZXMsIGFuZCB0aGF0J3Mgbm90IHRvbyBjb29sLgorICoKKyAqIEluIHRoaXMgYWRkcmVzcywgdGhlIHJlbW90ZV9TV0lEIGlzIGFsd2F5cyB0aGUgU1dJRCB0aGUgcmVtb3RlCisgKiBtZXNzYWdlIGNhbWUgZnJvbSwgb3IgdGhlIFNXSUQgd2UgYXJlIHNlbmRpbmcgdGhlIG1lc3NhZ2UgdG8uCisgKiBsb2NhbF9TV0lEIGlzIGFsd2F5cyBvdXIgU1dJRC4gIE5vdGUgdGhhdCBoYXZpbmcgb3VyIFNXSUQgaW4gdGhlCisgKiBtZXNzYWdlIGlzIGEgbGl0dGxlIHdlaXJkLCBidXQgdGhpcyBpcyByZXF1aXJlZC4KKyAqLworI2RlZmluZSBJUE1JX0xBTl9BRERSX1RZUEUJCTB4MDQKK3N0cnVjdCBpcG1pX2xhbl9hZGRyCit7CisJaW50ICAgICAgICAgICBhZGRyX3R5cGU7CisJc2hvcnQgICAgICAgICBjaGFubmVsOworCXVuc2lnbmVkIGNoYXIgcHJpdmlsZWdlOworCXVuc2lnbmVkIGNoYXIgc2Vzc2lvbl9oYW5kbGU7CisJdW5zaWduZWQgY2hhciByZW1vdGVfU1dJRDsKKwl1bnNpZ25lZCBjaGFyIGxvY2FsX1NXSUQ7CisJdW5zaWduZWQgY2hhciBsdW47Cit9OworCisKKy8qCisgKiBDaGFubmVsIGZvciB0YWxraW5nIGRpcmVjdGx5IHdpdGggdGhlIEJNQy4gIFdoZW4gdXNpbmcgdGhpcworICogY2hhbm5lbCwgVGhpcyBpcyBmb3IgdGhlIHN5c3RlbSBpbnRlcmZhY2UgYWRkcmVzcyB0eXBlIG9ubHkuICBGSVhNRQorICogLSBpcyB0aGlzIHJpZ2h0LCBvciBzaG91bGQgd2UgdXNlIC0xPworICovCisjZGVmaW5lIElQTUlfQk1DX0NIQU5ORUwgIDB4ZgorI2RlZmluZSBJUE1JX05VTV9DSEFOTkVMUyAweDEwCisKKworLyoKKyAqIEEgcmF3IElQTUkgbWVzc2FnZSB3aXRob3V0IGFueSBhZGRyZXNzaW5nLiAgVGhpcyBjb3ZlcnMgYm90aAorICogY29tbWFuZHMgYW5kIHJlc3BvbnNlcy4gIFRoZSBjb21wbGV0aW9uIGNvZGUgaXMgYWx3YXlzIHRoZSBmaXJzdAorICogYnl0ZSBvZiBkYXRhIGluIHRoZSByZXNwb25zZSAoYXMgdGhlIHNwZWMgc2hvd3MgdGhlIG1lc3NhZ2VzIGxhaWQKKyAqIG91dCkuCisgKi8KK3N0cnVjdCBpcG1pX21zZworeworCXVuc2lnbmVkIGNoYXIgIG5ldGZuOworCXVuc2lnbmVkIGNoYXIgIGNtZDsKKwl1bnNpZ25lZCBzaG9ydCBkYXRhX2xlbjsKKwl1bnNpZ25lZCBjaGFyICBfX3VzZXIgKmRhdGE7Cit9OworCitzdHJ1Y3Qga2VybmVsX2lwbWlfbXNnCit7CisJdW5zaWduZWQgY2hhciAgbmV0Zm47CisJdW5zaWduZWQgY2hhciAgY21kOworCXVuc2lnbmVkIHNob3J0IGRhdGFfbGVuOworCXVuc2lnbmVkIGNoYXIgICpkYXRhOworfTsKKworLyoKKyAqIFZhcmlvdXMgZGVmaW5lcyB0aGF0IGFyZSB1c2VmdWwgZm9yIElQTUkgYXBwbGljYXRpb25zLgorICovCisjZGVmaW5lIElQTUlfSU5WQUxJRF9DTURfQ09NUExFVElPTl9DT0RFCTB4QzEKKyNkZWZpbmUgSVBNSV9USU1FT1VUX0NPTVBMRVRJT05fQ09ERQkJMHhDMworI2RlZmluZSBJUE1JX1VOS05PV05fRVJSX0NPTVBMRVRJT05fQ09ERQkweGZmCisKKworLyoKKyAqIFJlY2VpdmUgdHlwZXMgZm9yIG1lc3NhZ2VzIGNvbWluZyBmcm9tIHRoZSByZWNlaXZlIGludGVyZmFjZS4gIFRoaXMKKyAqIGlzIHVzZWQgZm9yIHRoZSByZWNlaXZlIGluLWtlcm5lbCBpbnRlcmZhY2UgYW5kIGluIHRoZSByZWNlaXZlCisgKiBJT0NUTC4KKyAqCisgKiBUaGUgIklQTUlfUkVTUE9OU0VfUkVTUE5PU0VfVFlQRSIgaXMgYSBsaXR0bGUgc3RyYW5nZSBzb3VuZGluZywgYnV0CisgKiBpdCBhbGxvd3MgeW91IHRvIGdldCB0aGUgbWVzc2FnZSByZXN1bHRzIHdoZW4geW91IHNlbmQgYSByZXNwb25zZQorICogbWVzc2FnZS4KKyAqLworI2RlZmluZSBJUE1JX1JFU1BPTlNFX1JFQ1ZfVFlQRQkJMSAvKiBBIHJlc3BvbnNlIHRvIGEgY29tbWFuZCAqLworI2RlZmluZSBJUE1JX0FTWU5DX0VWRU5UX1JFQ1ZfVFlQRQkyIC8qIFNvbWV0aGluZyBmcm9tIHRoZSBldmVudCBxdWV1ZSAqLworI2RlZmluZSBJUE1JX0NNRF9SRUNWX1RZUEUJCTMgLyogQSBjb21tYW5kIGZyb20gc29tZXdoZXJlIGVsc2UgKi8KKyNkZWZpbmUgSVBNSV9SRVNQT05TRV9SRVNQT05TRV9UWVBFCTQgLyogVGhlIHJlc3BvbnNlIGZvcgorCQkJCQkgICAgICBhIHNlbnQgcmVzcG9uc2UsIGdpdmluZyBhbnkKKwkJCQkJICAgICAgZXJyb3Igc3RhdHVzIGZvciBzZW5kaW5nIHRoZQorCQkJCQkgICAgICByZXNwb25zZS4gIFdoZW4geW91IHNlbmQgYQorCQkJCQkgICAgICByZXNwb25zZSBtZXNzYWdlLCB0aGlzIHdpbGwKKwkJCQkJICAgICAgYmUgcmV0dXJuZWQuICovCisvKiBOb3RlIHRoYXQgYXN5bmMgZXZlbnRzIGFuZCByZWNlaXZlZCBjb21tYW5kcyBkbyBub3QgaGF2ZSBhIGNvbXBsZXRpb24KKyAgIGNvZGUgYXMgdGhlIGZpcnN0IGJ5dGUgb2YgdGhlIGluY29taW5nIGRhdGEsIHVubGlrZSBhIHJlc3BvbnNlLiAqLworCisKKworI2lmZGVmIF9fS0VSTkVMX18KKworLyoKKyAqIFRoZSBpbi1rZXJuZWwgaW50ZXJmYWNlLgorICovCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisvKiBPcGFxdWUgdHlwZSBmb3IgYSBJUE1JIG1lc3NhZ2UgdXNlci4gIE9uZSBvZiB0aGVzZSBpcyBuZWVkZWQgdG8KKyAgIHNlbmQgYW5kIHJlY2VpdmUgbWVzc2FnZXMuICovCit0eXBlZGVmIHN0cnVjdCBpcG1pX3VzZXIgKmlwbWlfdXNlcl90OworCisvKgorICogU3R1ZmYgY29taW5nIGZyb20gdGhlIHJlY2VpdmUgaW50ZXJmYWNlIGNvbWVzIGFzIG9uZSBvZiB0aGVzZS4KKyAqIFRoZXkgYXJlIGFsbG9jYXRlZCwgdGhlIHJlY2VpdmVyIG11c3QgZnJlZSB0aGVtIHdpdGgKKyAqIGlwbWlfZnJlZV9yZWN2X21zZygpIHdoZW4gZG9uZSB3aXRoIHRoZSBtZXNzYWdlLiAgVGhlIGxpbmsgaXMgbm90CisgKiB1c2VkIGFmdGVyIHRoZSBtZXNzYWdlIGlzIGRlbGl2ZXJlZCwgc28gdGhlIHVwcGVyIGxheWVyIG1heSB1c2UgdGhlCisgKiBsaW5rIHRvIGJ1aWxkIGEgbGlua2VkIGxpc3QsIGlmIGl0IGxpa2VzLgorICovCitzdHJ1Y3QgaXBtaV9yZWN2X21zZworeworCXN0cnVjdCBsaXN0X2hlYWQgbGluazsKKworCS8qIFRoZSB0eXBlIG9mIG1lc3NhZ2UgYXMgZGVmaW5lZCBpbiB0aGUgIlJlY2VpdmUgVHlwZXMiCisgICAgICAgICAgIGRlZmluZXMgYWJvdmUuICovCisJaW50ICAgICAgICAgICAgICByZWN2X3R5cGU7CisKKwlpcG1pX3VzZXJfdCAgICAgIHVzZXI7CisJc3RydWN0IGlwbWlfYWRkciBhZGRyOworCWxvbmcgICAgICAgICAgICAgbXNnaWQ7CisJc3RydWN0IGtlcm5lbF9pcG1pX21zZyAgbXNnOworCisJLyogVGhlIHVzZXJfbXNnX2RhdGEgaXMgdGhlIGRhdGEgc3VwcGxpZWQgd2hlbiBhIG1lc3NhZ2Ugd2FzCisJICAgc2VudCwgaWYgdGhpcyBpcyBhIHJlc3BvbnNlIHRvIGEgc2VudCBtZXNzYWdlLiAgSWYgdGhpcyBpcworCSAgIG5vdCBhIHJlc3BvbnNlIHRvIGEgc2VudCBtZXNzYWdlLCB0aGVuIHVzZXJfbXNnX2RhdGEgd2lsbAorCSAgIGJlIE5VTEwuICovCisJdm9pZCAgICAgICAgICAgICAqdXNlcl9tc2dfZGF0YTsKKworCS8qIENhbGwgdGhpcyB3aGVuIGRvbmUgd2l0aCB0aGUgbWVzc2FnZS4gIEl0IHdpbGwgcHJlc3VtYWJseSBmcmVlCisJICAgdGhlIG1lc3NhZ2UgYW5kIGRvIGFueSBvdGhlciBuZWNlc3NhcnkgY2xlYW51cC4gKi8KKwl2b2lkICgqZG9uZSkoc3RydWN0IGlwbWlfcmVjdl9tc2cgKm1zZyk7CisKKwkvKiBQbGFjZS1ob2xkZXIgZm9yIHRoZSBkYXRhLCBkb24ndCBtYWtlIGFueSBhc3N1bXB0aW9ucyBhYm91dAorCSAgIHRoZSBzaXplIG9yIGV4aXN0YW5jZSBvZiB0aGlzLCBzaW5jZSBpdCBtYXkgY2hhbmdlLiAqLworCXVuc2lnbmVkIGNoYXIgICBtc2dfZGF0YVtJUE1JX01BWF9NU0dfTEVOR1RIXTsKK307CisKKy8qIEFsbG9jYXRlIGFuZCBmcmVlIHRoZSByZWNlaXZlIG1lc3NhZ2UuICovCitzdGF0aWMgaW5saW5lIHZvaWQgaXBtaV9mcmVlX3JlY3ZfbXNnKHN0cnVjdCBpcG1pX3JlY3ZfbXNnICptc2cpCit7CisJbXNnLT5kb25lKG1zZyk7Cit9CisKK3N0cnVjdCBpcG1pX3VzZXJfaG5kbAoreworICAgICAgICAvKiBSb3V0aW5lIHR5cGUgdG8gY2FsbCB3aGVuIGEgbWVzc2FnZSBuZWVkcyB0byBiZSByb3V0ZWQgdG8KKwkgICB0aGUgdXBwZXIgbGF5ZXIuICBUaGlzIHdpbGwgYmUgY2FsbGVkIHdpdGggc29tZSBsb2NrcyBoZWxkLAorCSAgIHRoZSBvbmx5IElQTUkgcm91dGluZXMgdGhhdCBjYW4gYmUgY2FsbGVkIGFyZSBpcG1pX3JlcXVlc3QKKwkgICBhbmQgdGhlIGFsbG9jL2ZyZWUgb3BlcmF0aW9ucy4gIFRoZSBoYW5kbGVyX2RhdGEgaXMgdGhlCisJICAgdmFyaWFibGUgc3VwcGxpZWQgd2hlbiB0aGUgcmVjZWl2ZSBoYW5kbGVyIHdhcyByZWdpc3RlcmVkLiAqLworCXZvaWQgKCppcG1pX3JlY3ZfaG5kbCkoc3RydWN0IGlwbWlfcmVjdl9tc2cgKm1zZywKKwkJCSAgICAgICB2b2lkICAgICAgICAgICAgICAgICAqdXNlcl9tc2dfZGF0YSk7CisKKwkvKiBDYWxsZWQgd2hlbiB0aGUgaW50ZXJmYWNlIGRldGVjdHMgYSB3YXRjaGRvZyBwcmUtdGltZW91dC4gIElmCisJICAgdGhpcyBpcyBOVUxMLCBpdCB3aWxsIGJlIGlnbm9yZWQgZm9yIHRoZSB1c2VyLiAqLworCXZvaWQgKCppcG1pX3dhdGNoZG9nX3ByZXRpbWVvdXQpKHZvaWQgKmhhbmRsZXJfZGF0YSk7Cit9OworCisvKiBDcmVhdGUgYSBuZXcgdXNlciBvZiB0aGUgSVBNSSBsYXllciBvbiB0aGUgZ2l2ZW4gaW50ZXJmYWNlIG51bWJlci4gKi8KK2ludCBpcG1pX2NyZWF0ZV91c2VyKHVuc2lnbmVkIGludCAgICAgICAgICBpZl9udW0sCisJCSAgICAgc3RydWN0IGlwbWlfdXNlcl9obmRsICpoYW5kbGVyLAorCQkgICAgIHZvaWQgICAgICAgICAgICAgICAgICAqaGFuZGxlcl9kYXRhLAorCQkgICAgIGlwbWlfdXNlcl90ICAgICAgICAgICAqdXNlcik7CisKKy8qIERlc3Ryb3kgdGhlIGdpdmVuIHVzZXIgb2YgdGhlIElQTUkgbGF5ZXIuICBOb3RlIHRoYXQgYWZ0ZXIgdGhpcworICAgZnVuY3Rpb24gcmV0dXJucywgdGhlIHN5c3RlbSBpcyBndWFyYW50ZWVkIHRvIG5vdCBjYWxsIGFueQorICAgY2FsbGJhY2tzIGZvciB0aGUgdXNlci4gIFRodXMgYXMgbG9uZyBhcyB5b3UgZGVzdHJveSBhbGwgdGhlIHVzZXJzCisgICBiZWZvcmUgeW91IHVubG9hZCBhIG1vZHVsZSwgeW91IHdpbGwgYmUgc2FmZS4gIEFuZCBpZiB5b3UgZGVzdHJveQorICAgdGhlIHVzZXJzIGJlZm9yZSB5b3UgZGVzdHJveSB0aGUgY2FsbGJhY2sgc3RydWN0dXJlcywgaXQgc2hvdWxkIGJlCisgICBzYWZlLCB0b28uICovCitpbnQgaXBtaV9kZXN0cm95X3VzZXIoaXBtaV91c2VyX3QgdXNlcik7CisKKy8qIEdldCB0aGUgSVBNSSB2ZXJzaW9uIG9mIHRoZSBCTUMgd2UgYXJlIHRhbGtpbmcgdG8uICovCit2b2lkIGlwbWlfZ2V0X3ZlcnNpb24oaXBtaV91c2VyX3QgICB1c2VyLAorCQkgICAgICB1bnNpZ25lZCBjaGFyICptYWpvciwKKwkJICAgICAgdW5zaWduZWQgY2hhciAqbWlub3IpOworCisvKiBTZXQgYW5kIGdldCB0aGUgc2xhdmUgYWRkcmVzcyBhbmQgTFVOIHRoYXQgd2Ugd2lsbCB1c2UgZm9yIG91cgorICAgc291cmNlIG1lc3NhZ2VzLiAgTm90ZSB0aGF0IHRoaXMgYWZmZWN0cyB0aGUgaW50ZXJmYWNlLCBub3QganVzdAorICAgdGhpcyB1c2VyLCBzbyBpdCB3aWxsIGFmZmVjdCBhbGwgdXNlcnMgb2YgdGhpcyBpbnRlcmZhY2UuICBUaGlzIGlzCisgICBzbyBzb21lIGluaXRpYWxpemF0aW9uIGNvZGUgY2FuIGNvbWUgaW4gYW5kIGRvIHRoZSBPRU0tc3BlY2lmaWMKKyAgIHRoaW5ncyBpdCB0YWtlcyB0byBkZXRlcm1pbmUgeW91ciBhZGRyZXNzIChpZiBub3QgdGhlIEJNQykgYW5kIHNldAorICAgaXQgZm9yIGV2ZXJ5b25lIGVsc2UuICovCit2b2lkIGlwbWlfc2V0X215X2FkZHJlc3MoaXBtaV91c2VyX3QgICB1c2VyLAorCQkJIHVuc2lnbmVkIGNoYXIgYWRkcmVzcyk7Cit1bnNpZ25lZCBjaGFyIGlwbWlfZ2V0X215X2FkZHJlc3MoaXBtaV91c2VyX3QgdXNlcik7Cit2b2lkIGlwbWlfc2V0X215X0xVTihpcG1pX3VzZXJfdCAgIHVzZXIsCisJCSAgICAgdW5zaWduZWQgY2hhciBMVU4pOwordW5zaWduZWQgY2hhciBpcG1pX2dldF9teV9MVU4oaXBtaV91c2VyX3QgdXNlcik7CisKKy8qCisgKiBMaWtlIGlwbWlfcmVxdWVzdCwgYnV0IGxldHMgeW91IHNwZWNpZnkgdGhlIG51bWJlciBvZiByZXRyaWVzIGFuZAorICogdGhlIHJldHJ5IHRpbWUuICBUaGUgcmV0cmllcyBpcyB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZSBtZXNzYWdlCisgKiB3aWxsIGJlIHJlc2VudCBpZiBubyByZXBseSBpcyByZWNlaXZlZC4gIElmIHNldCB0byAtMSwgdGhlIGRlZmF1bHQKKyAqIHZhbHVlIHdpbGwgYmUgdXNlZC4gIFRoZSByZXRyeSB0aW1lIGlzIHRoZSB0aW1lIGluIG1pbGxpc2Vjb25kcworICogYmV0d2VlbiByZXRyaWVzLiAgSWYgc2V0IHRvIHplcm8sIHRoZSBkZWZhdWx0IHZhbHVlIHdpbGwgYmUKKyAqIHVzZWQuCisgKgorICogRG9uJ3QgdXNlIHRoaXMgdW5sZXNzIHlvdSAqcmVhbGx5KiBoYXZlIHRvLiAgSXQncyBwcmltYXJpbHkgZm9yIHRoZQorICogSVBNSSBvdmVyIExBTiBjb252ZXJ0ZXI7IHNpbmNlIHRoZSBMQU4gc3R1ZmYgZG9lcyBpdHMgb3duIHJldHJpZXMsCisgKiBpdCBtYWtlcyBubyBzZW5zZSB0byBkbyBpdCBoZXJlLiAgSG93ZXZlciwgdGhpcyBjYW4gYmUgdXNlZCBpZiB5b3UKKyAqIGhhdmUgdW51c3VhbCByZXF1aXJlbWVudHMuCisgKi8KK2ludCBpcG1pX3JlcXVlc3Rfc2V0dGltZShpcG1pX3VzZXJfdCAgICAgIHVzZXIsCisJCQkgc3RydWN0IGlwbWlfYWRkciAqYWRkciwKKwkJCSBsb25nICAgICAgICAgICAgIG1zZ2lkLAorCQkJIHN0cnVjdCBrZXJuZWxfaXBtaV9tc2cgICptc2csCisJCQkgdm9pZCAgICAgICAgICAgICAqdXNlcl9tc2dfZGF0YSwKKwkJCSBpbnQgICAgICAgICAgICAgIHByaW9yaXR5LAorCQkJIGludCAgICAgICAgICAgICAgbWF4X3JldHJpZXMsCisJCQkgdW5zaWduZWQgaW50ICAgICByZXRyeV90aW1lX21zKTsKKworLyoKKyAqIExpa2UgaXBtaV9yZXF1ZXN0LCBidXQgd2l0aCBtZXNzYWdlcyBzdXBwbGllZC4gIFRoaXMgd2lsbCBub3QKKyAqIGFsbG9jYXRlIGFueSBtZW1vcnksIGFuZCB0aGUgbWVzc2FnZXMgbWF5IGJlIHN0YXRpY2FsbHkgYWxsb2NhdGVkCisgKiAoanVzdCBtYWtlIHN1cmUgdG8gZG8gdGhlICJkb25lIiBoYW5kbGluZyBvbiB0aGVtKS4gIE5vdGUgdGhhdCB0aGlzCisgKiBpcyBwcmltYXJpbHkgZm9yIHRoZSB3YXRjaGRvZyB0aW1lciwgc2luY2UgaXQgc2hvdWxkIGJlIGFibGUgdG8KKyAqIHNlbmQgbWVzc2FnZXMgZXZlbiBpZiBubyBtZW1vcnkgaXMgYXZhaWxhYmxlLiAgVGhpcyBpcyBzdWJqZWN0IHRvCisgKiBjaGFuZ2UgYXMgdGhlIHN5c3RlbSBjaGFuZ2VzLCBzbyBkb24ndCB1c2UgaXQgdW5sZXNzIHlvdSBSRUFMTFkKKyAqIGhhdmUgdG8uCisgKi8KK2ludCBpcG1pX3JlcXVlc3Rfc3VwcGx5X21zZ3MoaXBtaV91c2VyX3QgICAgICAgICAgdXNlciwKKwkJCSAgICAgc3RydWN0IGlwbWlfYWRkciAgICAgKmFkZHIsCisJCQkgICAgIGxvbmcgICAgICAgICAgICAgICAgIG1zZ2lkLAorCQkJICAgICBzdHJ1Y3Qga2VybmVsX2lwbWlfbXNnICptc2csCisJCQkgICAgIHZvaWQgICAgICAgICAgICAgICAgICp1c2VyX21zZ19kYXRhLAorCQkJICAgICB2b2lkICAgICAgICAgICAgICAgICAqc3VwcGxpZWRfc21pLAorCQkJICAgICBzdHJ1Y3QgaXBtaV9yZWN2X21zZyAqc3VwcGxpZWRfcmVjdiwKKwkJCSAgICAgaW50ICAgICAgICAgICAgICAgICAgcHJpb3JpdHkpOworCisvKgorICogV2hlbiBjb21tYW5kcyBjb21lIGluIHRvIHRoZSBTTVMsIHRoZSB1c2VyIGNhbiByZWdpc3RlciB0byByZWNlaXZlCisgKiB0aGVtLiAgT25seSBvbmUgdXNlciBjYW4gYmUgbGlzdGVuaW5nIG9uIGEgc3BlY2lmaWMgbmV0Zm4vY21kIHBhaXIKKyAqIGF0IGEgdGltZSwgeW91IHdpbGwgZ2V0IGFuIEVCVVNZIGVycm9yIGlmIHRoZSBjb21tYW5kIGlzIGFscmVhZHkKKyAqIHJlZ2lzdGVyZWQuICBJZiBhIGNvbW1hbmQgaXMgcmVjZWl2ZWQgdGhhdCBkb2VzIG5vdCBoYXZlIGEgdXNlcgorICogcmVnaXN0ZXJlZCwgdGhlIGRyaXZlciB3aWxsIGF1dG9tYXRpY2FsbHkgcmV0dXJuIHRoZSBwcm9wZXIKKyAqIGVycm9yLgorICovCitpbnQgaXBtaV9yZWdpc3Rlcl9mb3JfY21kKGlwbWlfdXNlcl90ICAgdXNlciwKKwkJCSAgdW5zaWduZWQgY2hhciBuZXRmbiwKKwkJCSAgdW5zaWduZWQgY2hhciBjbWQpOworaW50IGlwbWlfdW5yZWdpc3Rlcl9mb3JfY21kKGlwbWlfdXNlcl90ICAgdXNlciwKKwkJCSAgICB1bnNpZ25lZCBjaGFyIG5ldGZuLAorCQkJICAgIHVuc2lnbmVkIGNoYXIgY21kKTsKKworLyoKKyAqIEFsbG93IHJ1bi10by1jb21wbGV0aW9uIG1vZGUgdG8gYmUgc2V0IGZvciB0aGUgaW50ZXJmYWNlIG9mCisgKiBhIHNwZWNpZmljIHVzZXIuCisgKi8KK3ZvaWQgaXBtaV91c2VyX3NldF9ydW5fdG9fY29tcGxldGlvbihpcG1pX3VzZXJfdCB1c2VyLCBpbnQgdmFsKTsKKworLyoKKyAqIFdoZW4gdGhlIHVzZXIgaXMgY3JlYXRlZCwgaXQgd2lsbCBub3QgcmVjZWl2ZSBJUE1JIGV2ZW50cyBieQorICogZGVmYXVsdC4gIFRoZSB1c2VyIG11c3Qgc2V0IHRoaXMgdG8gVFJVRSB0byBnZXQgaW5jb21pbmcgZXZlbnRzLgorICogVGhlIGZpcnN0IHVzZXIgdGhhdCBzZXRzIHRoaXMgdG8gVFJVRSB3aWxsIHJlY2VpdmUgYWxsIGV2ZW50cyB0aGF0CisgKiBoYXZlIGJlZW4gcXVldWVkIHdoaWxlIG5vIG9uZSB3YXMgd2FpdGluZyBmb3IgZXZlbnRzLgorICovCitpbnQgaXBtaV9zZXRfZ2V0c19ldmVudHMoaXBtaV91c2VyX3QgdXNlciwgaW50IHZhbCk7CisKKy8qCisgKiBDYWxsZWQgd2hlbiBhIG5ldyBTTUkgaXMgcmVnaXN0ZXJlZC4gIFRoaXMgd2lsbCBhbHNvIGJlIGNhbGxlZCBvbgorICogZXZlcnkgZXhpc3RpbmcgaW50ZXJmYWNlIHdoZW4gYSBuZXcgd2F0Y2hlciBpcyByZWdpc3RlcmVkIHdpdGgKKyAqIGlwbWlfc21pX3dhdGNoZXJfcmVnaXN0ZXIoKS4KKyAqLworc3RydWN0IGlwbWlfc21pX3dhdGNoZXIKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpbms7CisKKwkvKiBZb3UgbXVzdCBzZXQgdGhlIG93bmVyIHRvIHRoZSBjdXJyZW50IG1vZHVsZSwgaWYgeW91IGFyZSBpbgorCSAgIGEgbW9kdWxlIChnZW5lcmFsbHkganVzdCBzZXQgaXQgdG8gIlRISVNfTU9EVUxFIikuICovCisJc3RydWN0IG1vZHVsZSAqb3duZXI7CisKKwkvKiBUaGVzZSB0d28gYXJlIGNhbGxlZCB3aXRoIHJlYWQgbG9ja3MgaGVsZCBmb3IgdGhlIGludGVyZmFjZQorCSAgIHRoZSB3YXRjaGVyIGxpc3QuICBTbyB5b3UgY2FuIGFkZCBhbmQgcmVtb3ZlIHVzZXJzIGZyb20gdGhlCisJICAgSVBNSSBpbnRlcmZhY2UsIHNlbmQgbWVzc2FnZXMsIGV0Yy4sIGJ1dCB5b3UgY2Fubm90IGFkZAorCSAgIG9yIHJlbW92ZSBTTUkgd2F0Y2hlcnMgb3IgU01JIGludGVyZmFjZXMuICovCisJdm9pZCAoKm5ld19zbWkpKGludCBpZl9udW0pOworCXZvaWQgKCpzbWlfZ29uZSkoaW50IGlmX251bSk7Cit9OworCitpbnQgaXBtaV9zbWlfd2F0Y2hlcl9yZWdpc3RlcihzdHJ1Y3QgaXBtaV9zbWlfd2F0Y2hlciAqd2F0Y2hlcik7CitpbnQgaXBtaV9zbWlfd2F0Y2hlcl91bnJlZ2lzdGVyKHN0cnVjdCBpcG1pX3NtaV93YXRjaGVyICp3YXRjaGVyKTsKKworLyogVGhlIGZvbGxvd2luZyBhcmUgdmFyaW91cyBoZWxwZXIgZnVuY3Rpb25zIGZvciBkZWFsaW5nIHdpdGggSVBNSQorICAgYWRkcmVzc2VzLiAqLworCisvKiBSZXR1cm4gdGhlIG1heGltdW0gbGVuZ3RoIG9mIGFuIElQTUkgYWRkcmVzcyBnaXZlbiBpdCdzIHR5cGUuICovCit1bnNpZ25lZCBpbnQgaXBtaV9hZGRyX2xlbmd0aChpbnQgYWRkcl90eXBlKTsKKworLyogVmFsaWRhdGUgdGhhdCB0aGUgZ2l2ZW4gSVBNSSBhZGRyZXNzIGlzIHZhbGlkLiAqLworaW50IGlwbWlfdmFsaWRhdGVfYWRkcihzdHJ1Y3QgaXBtaV9hZGRyICphZGRyLCBpbnQgbGVuKTsKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworCisvKgorICogVGhlIHVzZXJsYW5kIGludGVyZmFjZQorICovCisKKy8qCisgKiBUaGUgdXNlcmxhbmQgaW50ZXJmYWNlIGZvciB0aGUgSVBNSSBkcml2ZXIgaXMgYSBzdGFuZGFyZCBjaGFyYWN0ZXIKKyAqIGRldmljZSwgd2l0aCBlYWNoIGluc3RhbmNlIG9mIGFuIGludGVyZmFjZSByZWdpc3RlcmVkIGFzIGEgbWlub3IKKyAqIG51bWJlciB1bmRlciB0aGUgbWFqb3IgY2hhcmFjdGVyIGRldmljZS4KKyAqCisgKiBUaGUgcmVhZCBhbmQgd3JpdGUgY2FsbHMgZG8gbm90IHdvcmssIHRvIGdldCBtZXNzYWdlcyBpbiBhbmQgb3V0CisgKiByZXF1aXJlcyBpb2N0bCBjYWxscyBiZWNhdXNlIG9mIHRoZSBjb21wbGV4aXR5IG9mIHRoZSBkYXRhLiAgc2VsZWN0CisgKiBhbmQgcG9sbCBkbyB3b3JrLCBzbyB5b3UgY2FuIHdhaXQgZm9yIGlucHV0IHVzaW5nIHRoZSBmaWxlCisgKiBkZXNjcmlwdG9yLCB5b3UganVzdCBjYW4gdXNlIHJlYWQgdG8gZ2V0IGl0LgorICoKKyAqIEluIGdlbmVyYWwsIHlvdSBzZW5kIGEgY29tbWFuZCBkb3duIHRvIHRoZSBpbnRlcmZhY2UgYW5kIHJlY2VpdmUKKyAqIHJlc3BvbnNlcyBiYWNrLiAgWW91IGNhbiB1c2UgdGhlIG1zZ2lkIHZhbHVlIHRvIGNvcnJlbGF0ZSBjb21tYW5kcworICogYW5kIHJlc3BvbnNlcywgdGhlIGRyaXZlciB3aWxsIHRha2UgY2FyZSBvZiBmaWd1cmluZyBvdXQgd2hpY2gKKyAqIGluY29taW5nIG1lc3NhZ2VzIGFyZSBmb3Igd2hpY2ggY29tbWFuZCBhbmQgZmluZCB0aGUgcHJvcGVyIG1zZ2lkCisgKiB2YWx1ZSB0byByZXBvcnQuICBZb3Ugd2lsbCBvbmx5IHJlY2VpdmUgcmVwb25zZXMgZm9yIGNvbW1hbmRzIHlvdQorICogc2VuZC4gIEFzeW5jaHJvbm91cyBldmVudHMsIGhvd2V2ZXIsIGdvIHRvIGFsbCBvcGVuIHVzZXJzLCBzbyB5b3UKKyAqIG11c3QgYmUgcmVhZHkgdG8gaGFuZGxlIHRoZXNlIChvciBpZ25vcmUgdGhlbSBpZiB5b3UgZG9uJ3QgY2FyZSkuCisgKgorICogVGhlIGFkZHJlc3MgdHlwZSBkZXBlbmRzIHVwb24gdGhlIGNoYW5uZWwgdHlwZS4gIFdoZW4gdGFsa2luZworICogZGlyZWN0bHkgdG8gdGhlIEJNQyAoSVBNQ19CTUNfQ0hBTk5FTCksIHRoZSBhZGRyZXNzIGlzIGlnbm9yZWQKKyAqIChJUE1JX1VOVVNFRF9BRERSX1RZUEUpLiAgV2hlbiB0YWxraW5nIHRvIGFuIElQTUIgY2hhbm5lbCwgeW91IG11c3QKKyAqIHN1cHBseSBhIHZhbGlkIElQTUIgYWRkcmVzcyB3aXRoIHRoZSBhZGRyX3R5cGUgc2V0IHByb3Blcmx5LgorICoKKyAqIFdoZW4gdGFsa2luZyB0byBub3JtYWwgY2hhbm5lbHMsIHRoZSBkcml2ZXIgdGFrZXMgY2FyZSBvZiB0aGUKKyAqIGRldGFpbHMgb2YgZm9ybWF0dGluZyBhbmQgc2VuZGluZyBtZXNzYWdlcyBvbiB0aGF0IGNoYW5uZWwuICBZb3UgZG8KKyAqIG5vdCwgZm9yIGluc3RhbmNlLCBoYXZlIHRvIGZvcm1hdCBhIHNlbmQgY29tbWFuZCwgeW91IGp1c3Qgc2VuZAorICogd2hhdGV2ZXIgY29tbWFuZCB5b3Ugd2FudCB0byB0aGUgY2hhbm5lbCwgdGhlIGRyaXZlciB3aWxsIGNyZWF0ZQorICogdGhlIHNlbmQgY29tbWFuZCwgYXV0b21hdGljYWxseSBpc3N1ZSByZWNlaXZlIGNvbW1hbmQgYW5kIGdldCBldmVuCisgKiBjb21tYW5kcywgYW5kIHBhc3MgdGhvc2UgdXAgdG8gdGhlIHByb3BlciB1c2VyLgorICovCisKKworLyogVGhlIG1hZ2ljIElPQ1RMIHZhbHVlIGZvciB0aGlzIGludGVyZmFjZS4gKi8KKyNkZWZpbmUgSVBNSV9JT0NfTUFHSUMgJ2knCisKKworLyogTWVzc2FnZXMgc2VudCB0byB0aGUgaW50ZXJmYWNlIGFyZSB0aGlzIGZvcm1hdC4gKi8KK3N0cnVjdCBpcG1pX3JlcQoreworCXVuc2lnbmVkIGNoYXIgX191c2VyICphZGRyOyAvKiBBZGRyZXNzIHRvIHNlbmQgdGhlIG1lc3NhZ2UgdG8uICovCisJdW5zaWduZWQgaW50ICBhZGRyX2xlbjsKKworCWxvbmcgICAgbXNnaWQ7IC8qIFRoZSBzZXF1ZW5jZSBudW1iZXIgZm9yIHRoZSBtZXNzYWdlLiAgVGhpcworCQkJICBleGFjdCB2YWx1ZSB3aWxsIGJlIHJlcG9ydGVkIGJhY2sgaW4gdGhlCisJCQkgIHJlc3BvbnNlIHRvIHRoaXMgcmVxdWVzdCBpZiBpdCBpcyBhIGNvbW1hbmQuCisJCQkgIElmIGl0IGlzIGEgcmVzcG9uc2UsIHRoaXMgd2lsbCBiZSB1c2VkIGFzCisJCQkgIHRoZSBzZXF1ZW5jZSB2YWx1ZSBmb3IgdGhlIHJlc3BvbnNlLiAgKi8KKworCXN0cnVjdCBpcG1pX21zZyBtc2c7Cit9OworLyoKKyAqIFNlbmQgYSBtZXNzYWdlIHRvIHRoZSBpbnRlcmZhY2VzLiAgZXJyb3IgdmFsdWVzIGFyZToKKyAqICAgLSBFRkFVTFQgLSBhbiBhZGRyZXNzIHN1cHBsaWVkIHdhcyBpbnZhbGlkLgorICogICAtIEVJTlZBTCAtIFRoZSBhZGRyZXNzIHN1cHBsaWVkIHdhcyBub3QgdmFsaWQsIG9yIHRoZSBjb21tYW5kCisgKiAgICAgICAgICAgICAgd2FzIG5vdCBhbGxvd2VkLgorICogICAtIEVNU0dTSVpFIC0gVGhlIG1lc3NhZ2UgdG8gd2FzIHRvbyBsYXJnZS4KKyAqICAgLSBFTk9NRU0gLSBCdWZmZXJzIGNvdWxkIG5vdCBiZSBhbGxvY2F0ZWQgZm9yIHRoZSBjb21tYW5kLgorICovCisjZGVmaW5lIElQTUlDVExfU0VORF9DT01NQU5ECQlfSU9SKElQTUlfSU9DX01BR0lDLCAxMywJXAorCQkJCQkgICAgIHN0cnVjdCBpcG1pX3JlcSkKKworLyogTWVzc2FnZXMgc2VudCB0byB0aGUgaW50ZXJmYWNlIHdpdGggdGltaW5nIHBhcmFtZXRlcnMgYXJlIHRoaXMKKyAgIGZvcm1hdC4gKi8KK3N0cnVjdCBpcG1pX3JlcV9zZXR0aW1lCit7CisJc3RydWN0IGlwbWlfcmVxIHJlcTsKKworCS8qIFNlZSBpcG1pX3JlcXVlc3Rfc2V0dGltZSgpIGFib3ZlIGZvciBkZXRhaWxzIG9uIHRoZXNlCisgICAgICAgICAgIHZhbHVlcy4gKi8KKwlpbnQgICAgICAgICAgcmV0cmllczsKKwl1bnNpZ25lZCBpbnQgcmV0cnlfdGltZV9tczsKK307CisvKgorICogU2VuZCBhIG1lc3NhZ2UgdG8gdGhlIGludGVyZmFjZXMgd2l0aCB0aW1pbmcgcGFyYW1ldGVycy4gIGVycm9yIHZhbHVlcworICogYXJlOgorICogICAtIEVGQVVMVCAtIGFuIGFkZHJlc3Mgc3VwcGxpZWQgd2FzIGludmFsaWQuCisgKiAgIC0gRUlOVkFMIC0gVGhlIGFkZHJlc3Mgc3VwcGxpZWQgd2FzIG5vdCB2YWxpZCwgb3IgdGhlIGNvbW1hbmQKKyAqICAgICAgICAgICAgICB3YXMgbm90IGFsbG93ZWQuCisgKiAgIC0gRU1TR1NJWkUgLSBUaGUgbWVzc2FnZSB0byB3YXMgdG9vIGxhcmdlLgorICogICAtIEVOT01FTSAtIEJ1ZmZlcnMgY291bGQgbm90IGJlIGFsbG9jYXRlZCBmb3IgdGhlIGNvbW1hbmQuCisgKi8KKyNkZWZpbmUgSVBNSUNUTF9TRU5EX0NPTU1BTkRfU0VUVElNRQlfSU9SKElQTUlfSU9DX01BR0lDLCAyMSwJXAorCQkJCQkgICAgIHN0cnVjdCBpcG1pX3JlcV9zZXR0aW1lKQorCisvKiBNZXNzYWdlcyByZWNlaXZlZCBmcm9tIHRoZSBpbnRlcmZhY2UgYXJlIHRoaXMgZm9ybWF0LiAqLworc3RydWN0IGlwbWlfcmVjdgoreworCWludCAgICAgcmVjdl90eXBlOyAvKiBJcyB0aGlzIGEgY29tbWFuZCwgcmVzcG9uc2Ugb3IgYW4KKwkJCSAgICAgIGFzeW5jcm9ub3VzIGV2ZW50LiAqLworCisJdW5zaWduZWQgY2hhciBfX3VzZXIgKmFkZHI7ICAgIC8qIEFkZHJlc3MgdGhlIG1lc3NhZ2Ugd2FzIGZyb20gaXMgcHV0CisJCQkJICAgaGVyZS4gIFRoZSBjYWxsZXIgbXVzdCBzdXBwbHkgdGhlCisJCQkJICAgbWVtb3J5LiAqLworCXVuc2lnbmVkIGludCAgYWRkcl9sZW47IC8qIFRoZSBzaXplIG9mIHRoZSBhZGRyZXNzIGJ1ZmZlci4KKwkJCQkgICBUaGUgY2FsbGVyIHN1cHBsaWVzIHRoZSBmdWxsIGJ1ZmZlcgorCQkJCSAgIGxlbmd0aCwgdGhpcyB2YWx1ZSBpcyB1cGRhdGVkIHRvCisJCQkJICAgdGhlIGFjdHVhbCBtZXNzYWdlIGxlbmd0aCB3aGVuIHRoZQorCQkJCSAgIG1lc3NhZ2UgaXMgcmVjZWl2ZWQuICovCisKKwlsb25nICAgIG1zZ2lkOyAvKiBUaGUgc2VxdWVuY2UgbnVtYmVyIHNwZWNpZmllZCBpbiB0aGUgcmVxdWVzdAorCQkJICBpZiB0aGlzIGlzIGEgcmVzcG9uc2UuICBJZiB0aGlzIGlzIGEgY29tbWFuZCwKKwkJCSAgdGhpcyB3aWxsIGJlIHRoZSBzZXF1ZW5jZSBudW1iZXIgZnJvbSB0aGUKKwkJCSAgY29tbWFuZC4gKi8KKworCXN0cnVjdCBpcG1pX21zZyBtc2c7IC8qIFRoZSBkYXRhIGZpZWxkIG11c3QgcG9pbnQgdG8gYSBidWZmZXIuCisJCQkJVGhlIGRhdGFfc2l6ZSBmaWVsZCBtdXN0IGJlIHNldCB0byB0aGUKKwkJCQlzaXplIG9mIHRoZSBtZXNzYWdlIGJ1ZmZlci4gIFRoZQorCQkJCWNhbGxlciBzdXBwbGllcyB0aGUgZnVsbCBidWZmZXIKKwkJCQlsZW5ndGgsIHRoaXMgdmFsdWUgaXMgdXBkYXRlZCB0byB0aGUKKwkJCQlhY3R1YWwgbWVzc2FnZSBsZW5ndGggd2hlbiB0aGUgbWVzc2FnZQorCQkJCWlzIHJlY2VpdmVkLiAqLworfTsKKworLyoKKyAqIFJlY2VpdmUgYSBtZXNzYWdlLiAgZXJyb3IgdmFsdWVzOgorICogIC0gRUFHQUlOIC0gbm8gbWVzc2FnZXMgaW4gdGhlIHF1ZXVlLgorICogIC0gRUZBVUxUIC0gYW4gYWRkcmVzcyBzdXBwbGllZCB3YXMgaW52YWxpZC4KKyAqICAtIEVJTlZBTCAtIFRoZSBhZGRyZXNzIHN1cHBsaWVkIHdhcyBub3QgdmFsaWQuCisgKiAgLSBFTVNHU0laRSAtIFRoZSBtZXNzYWdlIHRvIHdhcyB0b28gbGFyZ2UgdG8gZml0IGludG8gdGhlIG1lc3NhZ2UgYnVmZmVyLAorICogICAgICAgICAgICAgICB0aGUgbWVzc2FnZSB3aWxsIGJlIGxlZnQgaW4gdGhlIGJ1ZmZlci4gKi8KKyNkZWZpbmUgSVBNSUNUTF9SRUNFSVZFX01TRwkJX0lPV1IoSVBNSV9JT0NfTUFHSUMsIDEyLAlcCisJCQkJCSAgICAgIHN0cnVjdCBpcG1pX3JlY3YpCisKKy8qCisgKiBMaWtlIFJFQ0VJVkVfTVNHLCBidXQgaWYgdGhlIG1lc3NhZ2Ugd29uJ3QgZml0IGluIHRoZSBidWZmZXIsIGl0CisgKiB3aWxsIHRydW5jYXRlIHRoZSBjb250ZW50cyBpbnN0ZWFkIG9mIGxlYXZpbmcgdGhlIGRhdGEgaW4gdGhlCisgKiBidWZmZXIuCisgKi8KKyNkZWZpbmUgSVBNSUNUTF9SRUNFSVZFX01TR19UUlVOQwlfSU9XUihJUE1JX0lPQ19NQUdJQywgMTEsCVwKKwkJCQkJICAgICAgc3RydWN0IGlwbWlfcmVjdikKKworLyogUmVnaXN0ZXIgdG8gZ2V0IGNvbW1hbmRzIGZyb20gb3RoZXIgZW50aXRpZXMgb24gdGhpcyBpbnRlcmZhY2UuICovCitzdHJ1Y3QgaXBtaV9jbWRzcGVjCit7CisJdW5zaWduZWQgY2hhciBuZXRmbjsKKwl1bnNpZ25lZCBjaGFyIGNtZDsKK307CisKKy8qIAorICogUmVnaXN0ZXIgdG8gcmVjZWl2ZSBhIHNwZWNpZmljIGNvbW1hbmQuICBlcnJvciB2YWx1ZXM6CisgKiAgIC0gRUZBVUxUIC0gYW4gYWRkcmVzcyBzdXBwbGllZCB3YXMgaW52YWxpZC4KKyAqICAgLSBFQlVTWSAtIFRoZSBuZXRmbi9jbWQgc3VwcGxpZWQgd2FzIGFscmVhZHkgaW4gdXNlLgorICogICAtIEVOT01FTSAtIGNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBlbnRyeS4KKyAqLworI2RlZmluZSBJUE1JQ1RMX1JFR0lTVEVSX0ZPUl9DTUQJX0lPUihJUE1JX0lPQ19NQUdJQywgMTQsCVwKKwkJCQkJICAgICBzdHJ1Y3QgaXBtaV9jbWRzcGVjKQorLyoKKyAqIFVucmVnaXN0ZXIgYSByZWdzaXRlcmVkIGNvbW1hbmQuICBlcnJvciB2YWx1ZXM6CisgKiAgLSBFRkFVTFQgLSBhbiBhZGRyZXNzIHN1cHBsaWVkIHdhcyBpbnZhbGlkLgorICogIC0gRU5PRU5UIC0gVGhlIG5ldGZuL2NtZCB3YXMgbm90IGZvdW5kIHJlZ2lzdGVyZWQgZm9yIHRoaXMgdXNlci4KKyAqLworI2RlZmluZSBJUE1JQ1RMX1VOUkVHSVNURVJfRk9SX0NNRAlfSU9SKElQTUlfSU9DX01BR0lDLCAxNSwJXAorCQkJCQkgICAgIHN0cnVjdCBpcG1pX2NtZHNwZWMpCisKKy8qIAorICogU2V0IHdoZXRoZXIgdGhpcyBpbnRlcmZhY2UgcmVjZWl2ZXMgZXZlbnRzLiAgTm90ZSB0aGF0IHRoZSBmaXJzdAorICogdXNlciByZWdpc3RlcmVkIGZvciBldmVudHMgd2lsbCBnZXQgYWxsIHBlbmRpbmcgZXZlbnRzIGZvciB0aGUKKyAqIGludGVyZmFjZS4gIGVycm9yIHZhbHVlczoKKyAqICAtIEVGQVVMVCAtIGFuIGFkZHJlc3Mgc3VwcGxpZWQgd2FzIGludmFsaWQuCisgKi8KKyNkZWZpbmUgSVBNSUNUTF9TRVRfR0VUU19FVkVOVFNfQ01ECV9JT1IoSVBNSV9JT0NfTUFHSUMsIDE2LCBpbnQpCisKKy8qCisgKiBTZXQgYW5kIGdldCB0aGUgc2xhdmUgYWRkcmVzcyBhbmQgTFVOIHRoYXQgd2Ugd2lsbCB1c2UgZm9yIG91cgorICogc291cmNlIG1lc3NhZ2VzLiAgTm90ZSB0aGF0IHRoaXMgYWZmZWN0cyB0aGUgaW50ZXJmYWNlLCBub3QganVzdAorICogdGhpcyB1c2VyLCBzbyBpdCB3aWxsIGFmZmVjdCBhbGwgdXNlcnMgb2YgdGhpcyBpbnRlcmZhY2UuICBUaGlzIGlzCisgKiBzbyBzb21lIGluaXRpYWxpemF0aW9uIGNvZGUgY2FuIGNvbWUgaW4gYW5kIGRvIHRoZSBPRU0tc3BlY2lmaWMKKyAqIHRoaW5ncyBpdCB0YWtlcyB0byBkZXRlcm1pbmUgeW91ciBhZGRyZXNzIChpZiBub3QgdGhlIEJNQykgYW5kIHNldAorICogaXQgZm9yIGV2ZXJ5b25lIGVsc2UuICBZb3Ugc2hvdWxkIHByb2JhYmx5IGxlYXZlIHRoZSBMVU4gYWxvbmUuCisgKi8KKyNkZWZpbmUgSVBNSUNUTF9TRVRfTVlfQUREUkVTU19DTUQJX0lPUihJUE1JX0lPQ19NQUdJQywgMTcsIHVuc2lnbmVkIGludCkKKyNkZWZpbmUgSVBNSUNUTF9HRVRfTVlfQUREUkVTU19DTUQJX0lPUihJUE1JX0lPQ19NQUdJQywgMTgsIHVuc2lnbmVkIGludCkKKyNkZWZpbmUgSVBNSUNUTF9TRVRfTVlfTFVOX0NNRAkJX0lPUihJUE1JX0lPQ19NQUdJQywgMTksIHVuc2lnbmVkIGludCkKKyNkZWZpbmUgSVBNSUNUTF9HRVRfTVlfTFVOX0NNRAkJX0lPUihJUE1JX0lPQ19NQUdJQywgMjAsIHVuc2lnbmVkIGludCkKKworLyoKKyAqIEdldC9zZXQgdGhlIGRlZmF1bHQgdGltaW5nIHZhbHVlcyBmb3IgYW4gaW50ZXJmYWNlLiAgWW91IHNob3VsZG4ndAorICogZ2VuZXJhbGx5IG1lc3Mgd2l0aCB0aGVzZS4KKyAqLworc3RydWN0IGlwbWlfdGltaW5nX3Bhcm1zCit7CisJaW50ICAgICAgICAgIHJldHJpZXM7CisJdW5zaWduZWQgaW50IHJldHJ5X3RpbWVfbXM7Cit9OworI2RlZmluZSBJUE1JQ1RMX1NFVF9USU1JTkdfUEFSTVNfQ01ECV9JT1IoSVBNSV9JT0NfTUFHSUMsIDIyLCBcCisJCQkJCSAgICAgc3RydWN0IGlwbWlfdGltaW5nX3Bhcm1zKQorI2RlZmluZSBJUE1JQ1RMX0dFVF9USU1JTkdfUEFSTVNfQ01ECV9JT1IoSVBNSV9JT0NfTUFHSUMsIDIzLCBcCisJCQkJCSAgICAgc3RydWN0IGlwbWlfdGltaW5nX3Bhcm1zKQorCisjZW5kaWYgLyogX19MSU5VWF9JUE1JX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXBtaV9tc2dkZWZzLmggYi9pbmNsdWRlL2xpbnV4L2lwbWlfbXNnZGVmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzYmM2NGQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2lwbWlfbXNnZGVmcy5oCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogaXBtaV9zbWkuaAorICoKKyAqIE1vbnRhVmlzdGEgSVBNSSBzeXN0ZW0gbWFuYWdlbWVudCBpbnRlcmZhY2UKKyAqCisgKiBBdXRob3I6IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqICAgICAgICAgQ29yZXkgTWlueWFyZCA8bWlueWFyZEBtdmlzdGEuY29tPgorICogICAgICAgICBzb3VyY2VAbXZpc3RhLmNvbQorICoKKyAqIENvcHlyaWdodCAyMDAyIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKyAqICBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiAgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiAgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgorICogIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUKKyAqICBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX19MSU5VWF9JUE1JX01TR0RFRlNfSAorI2RlZmluZSBfX0xJTlVYX0lQTUlfTVNHREVGU19ICisKKy8qIFZhcmlvdXMgZGVmaW5pdGlvbnMgZm9yIElQTUkgbWVzc2FnZXMgdXNlZCBieSBhbG1vc3QgZXZlcnl0aGluZyBpbgorICAgdGhlIElQTUkgc3RhY2suICovCisKKy8qIE5ldEZOcyBhbmQgY29tbWFuZHMgdXNlZCBpbnNpZGUgdGhlIElQTUkgc3RhY2suICovCisKKyNkZWZpbmUgSVBNSV9ORVRGTl9TRU5TT1JfRVZFTlRfUkVRVUVTVAkJMHgwNAorI2RlZmluZSBJUE1JX05FVEZOX1NFTlNPUl9FVkVOVF9SRVNQT05TRQkweDA1CisjZGVmaW5lIElQTUlfR0VUX0VWRU5UX1JFQ0VJVkVSX0NNRAkweDAxCisKKyNkZWZpbmUgSVBNSV9ORVRGTl9BUFBfUkVRVUVTVAkJCTB4MDYKKyNkZWZpbmUgSVBNSV9ORVRGTl9BUFBfUkVTUE9OU0UJCQkweDA3CisjZGVmaW5lIElQTUlfR0VUX0RFVklDRV9JRF9DTUQJCTB4MDEKKyNkZWZpbmUgSVBNSV9DTEVBUl9NU0dfRkxBR1NfQ01ECTB4MzAKKyNkZWZpbmUgSVBNSV9HRVRfTVNHX0ZMQUdTX0NNRAkJMHgzMQorI2RlZmluZSBJUE1JX1NFTkRfTVNHX0NNRAkJMHgzNAorI2RlZmluZSBJUE1JX0dFVF9NU0dfQ01ECQkweDMzCisjZGVmaW5lIElQTUlfU0VUX0JNQ19HTE9CQUxfRU5BQkxFU19DTUQJMHgyZQorI2RlZmluZSBJUE1JX0dFVF9CTUNfR0xPQkFMX0VOQUJMRVNfQ01ECTB4MmYKKyNkZWZpbmUgSVBNSV9SRUFEX0VWRU5UX01TR19CVUZGRVJfQ01ECTB4MzUKKyNkZWZpbmUgSVBNSV9HRVRfQ0hBTk5FTF9JTkZPX0NNRAkweDQyCisKKyNkZWZpbmUgSVBNSV9ORVRGTl9TVE9SQUdFX1JFUVVFU1QJCTB4MGEKKyNkZWZpbmUgSVBNSV9ORVRGTl9TVE9SQUdFX1JFU1BPTlNFCQkweDBiCisjZGVmaW5lIElQTUlfQUREX1NFTF9FTlRSWV9DTUQJCTB4NDQKKworLyogVGhlIGRlZmF1bHQgc2xhdmUgYWRkcmVzcyAqLworI2RlZmluZSBJUE1JX0JNQ19TTEFWRV9BRERSCTB4MjAKKworLyogVGhlIEJUIGludGVyZmFjZSBvbiBoaWdoLWVuZCBIUCBzeXN0ZW1zIHN1cHBvcnRzIHVwIHRvIDI1NSBieXRlcyBpbgorICogb25lIHRyYW5zZmVyLiAgSXRzICJ2aXJ0dWFsIiBCTUMgc3VwcG9ydHMgc29tZSBjb21tYW5kcyB0aGF0IGFyZSBsb25nZXIKKyAqIHRoYW4gMTI4IGJ5dGVzLiAgVXNlIHRoZSBmdWxsIDI1NiwgcGx1cyBOZXRGbi9MVU4sIENtZCwgY0NvZGUsIHBsdXMKKyAqIHNvbWUgb3ZlcmhlYWQuICBJdCB3b3VsZCBiZSBuaWNlIHRvIGJhc2UgdGhpcyBvbiB0aGUgIkJUIENhcGFiaWxpdGllcyIKKyAqIGJ1dCB0aGF0J3MgdG9vIGhhcmQgdG8gcHJvcGFnYXRlIHRvIHRoZSByZXN0IG9mIHRoZSBkcml2ZXIuICovCisjZGVmaW5lIElQTUlfTUFYX01TR19MRU5HVEgJMjcyCS8qIG11bHRpcGxlIG9mIDE2ICovCisKKyNkZWZpbmUgSVBNSV9DQ19OT19FUlJPUgkJMHgwMAorI2RlZmluZSBJUE1JX05PREVfQlVTWV9FUlIJCTB4YzAKKyNkZWZpbmUgSVBNSV9JTlZBTElEX0NPTU1BTkRfRVJSCTB4YzEKKyNkZWZpbmUgSVBNSV9FUlJfTVNHX1RSVU5DQVRFRAkJMHhjNgorI2RlZmluZSBJUE1JX0xPU1RfQVJCSVRSQVRJT05fRVJSCTB4ODEKKyNkZWZpbmUgSVBNSV9FUlJfVU5TUEVDSUZJRUQJCTB4ZmYKKworI2RlZmluZSBJUE1JX0NIQU5ORUxfUFJPVE9DT0xfSVBNQgkxCisjZGVmaW5lIElQTUlfQ0hBTk5FTF9QUk9UT0NPTF9JQ01CCTIKKyNkZWZpbmUgSVBNSV9DSEFOTkVMX1BST1RPQ09MX1NNQlVTCTQKKyNkZWZpbmUgSVBNSV9DSEFOTkVMX1BST1RPQ09MX0tDUwk1CisjZGVmaW5lIElQTUlfQ0hBTk5FTF9QUk9UT0NPTF9TTUlDCTYKKyNkZWZpbmUgSVBNSV9DSEFOTkVMX1BST1RPQ09MX0JUMTAJNworI2RlZmluZSBJUE1JX0NIQU5ORUxfUFJPVE9DT0xfQlQxNQk4CisjZGVmaW5lIElQTUlfQ0hBTk5FTF9QUk9UT0NPTF9UTU9ERQk5CisKKyNkZWZpbmUgSVBNSV9DSEFOTkVMX01FRElVTV9JUE1CCTEKKyNkZWZpbmUgSVBNSV9DSEFOTkVMX01FRElVTV9JQ01CMTAJMgorI2RlZmluZSBJUE1JX0NIQU5ORUxfTUVESVVNX0lDTUIwOQkzCisjZGVmaW5lIElQTUlfQ0hBTk5FTF9NRURJVU1fODAyM0xBTgk0CisjZGVmaW5lIElQTUlfQ0hBTk5FTF9NRURJVU1fQVNZTkMJNQorI2RlZmluZSBJUE1JX0NIQU5ORUxfTUVESVVNX09USEVSX0xBTgk2CisjZGVmaW5lIElQTUlfQ0hBTk5FTF9NRURJVU1fUENJX1NNQlVTCTcKKyNkZWZpbmUgSVBNSV9DSEFOTkVMX01FRElVTV9TTUJVUzEJOAorI2RlZmluZSBJUE1JX0NIQU5ORUxfTUVESVVNX1NNQlVTMgk5CisjZGVmaW5lIElQTUlfQ0hBTk5FTF9NRURJVU1fVVNCMQkxMAorI2RlZmluZSBJUE1JX0NIQU5ORUxfTUVESVVNX1VTQjIJMTEKKyNkZWZpbmUgSVBNSV9DSEFOTkVMX01FRElVTV9TWVNJTlRGCTEyCisKKyNlbmRpZiAvKiBfX0xJTlVYX0lQTUlfTVNHREVGU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lwbWlfc21pLmggYi9pbmNsdWRlL2xpbnV4L2lwbWlfc21pLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM2ZWUxNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvaXBtaV9zbWkuaApAQCAtMCwwICsxLDE1NiBAQAorLyoKKyAqIGlwbWlfc21pLmgKKyAqCisgKiBNb250YVZpc3RhIElQTUkgc3lzdGVtIG1hbmFnZW1lbnQgaW50ZXJmYWNlCisgKgorICogQXV0aG9yOiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKiAgICAgICAgIENvcmV5IE1pbnlhcmQgPG1pbnlhcmRAbXZpc3RhLmNvbT4KKyAqICAgICAgICAgc291cmNlQG12aXN0YS5jb20KKyAqCisgKiBDb3B5cmlnaHQgMjAwMiBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisgKiAgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqICBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IKKyAqICBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFCisgKiAgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmIF9fTElOVVhfSVBNSV9TTUlfSAorI2RlZmluZSBfX0xJTlVYX0lQTUlfU01JX0gKKworI2luY2x1ZGUgPGxpbnV4L2lwbWlfbXNnZGVmcy5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworLyogVGhpcyBmaWxlcyBkZXNjcmliZXMgdGhlIGludGVyZmFjZSBmb3IgSVBNSSBzeXN0ZW0gbWFuYWdlbWVudCBpbnRlcmZhY2UKKyAgIGRyaXZlcnMgdG8gYmluZCBpbnRvIHRoZSBJUE1JIG1lc3NhZ2UgaGFuZGxlci4gKi8KKworLyogU3RydWN0dXJlIGZvciB0aGUgbG93LWxldmVsIGRyaXZlcnMuICovCit0eXBlZGVmIHN0cnVjdCBpcG1pX3NtaSAqaXBtaV9zbWlfdDsKKworLyoKKyAqIE1lc3NhZ2VzIHRvL2Zyb20gdGhlIGxvd2VyIGxheWVyLiAgVGhlIHNtaSBpbnRlcmZhY2Ugd2lsbCB0YWtlIG9uZQorICogb2YgdGhlc2UgdG8gc2VuZC4gQWZ0ZXIgdGhlIHNlbmQgaGFzIG9jY3VycmVkIGFuZCBhIHJlc3BvbnNlIGhhcworICogYmVlbiByZWNlaXZlZCwgaXQgd2lsbCByZXBvcnQgdGhpcyBzYW1lIGRhdGEgc3RydWN0dXJlIGJhY2sgdXAgdG8KKyAqIHRoZSB1cHBlciBsYXllci4gIElmIGFuIGVycm9yIG9jY3VycywgaXQgc2hvdWxkIGZpbGwgaW4gdGhlCisgKiByZXNwb25zZSB3aXRoIGFuIGVycm9yIGNvZGUgaW4gdGhlIGNvbXBsZXRpb24gY29kZSBsb2NhdGlvbi4gV2hlbgorICogYXN5bmNocm9ub3VzIGRhdGEgaXMgcmVjZWl2ZWQsIG9uZSBvZiB0aGVzZSBpcyBhbGxvY2F0ZWQsIHRoZQorICogZGF0YV9zaXplIGlzIHNldCB0byB6ZXJvIGFuZCB0aGUgcmVzcG9uc2UgaG9sZHMgdGhlIGRhdGEgZnJvbSB0aGUKKyAqIGdldCBtZXNzYWdlIG9yIGdldCBldmVudCBjb21tYW5kIHRoYXQgdGhlIGludGVyZmFjZSBpbml0aWF0ZWQuCisgKiBOb3RlIHRoYXQgaXQgaXMgdGhlIGludGVyZmFjZXMgcmVzcG9uc2liaWxpdHkgdG8gZGV0ZWN0CisgKiBhc3luY2hyb25vdXMgZGF0YSBhbmQgbWVzc2FnZXMgYW5kIHJlcXVlc3QgdGhlbSBmcm9tIHRoZQorICogaW50ZXJmYWNlLgorICovCitzdHJ1Y3QgaXBtaV9zbWlfbXNnCit7CisJc3RydWN0IGxpc3RfaGVhZCBsaW5rOworCisJbG9uZyAgICBtc2dpZDsKKwl2b2lkICAgICp1c2VyX2RhdGE7CisKKwlpbnQgICAgICAgICAgIGRhdGFfc2l6ZTsKKwl1bnNpZ25lZCBjaGFyIGRhdGFbSVBNSV9NQVhfTVNHX0xFTkdUSF07CisKKwlpbnQgICAgICAgICAgIHJzcF9zaXplOworCXVuc2lnbmVkIGNoYXIgcnNwW0lQTUlfTUFYX01TR19MRU5HVEhdOworCisJLyogV2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgc3lzdGVtIGlzIGRvbmUgd2l0aCB0aGUgbWVzc2FnZQorICAgICAgICAgICAocHJlc3VtYWJseSB0byBmcmVlIGl0KS4gKi8KKwl2b2lkICgqZG9uZSkoc3RydWN0IGlwbWlfc21pX21zZyAqbXNnKTsKK307CisKK3N0cnVjdCBpcG1pX3NtaV9oYW5kbGVycworeworCXN0cnVjdCBtb2R1bGUgKm93bmVyOworCisJLyogQ2FsbGVkIHRvIGVucXVldWUgYW4gU01JIG1lc3NhZ2UgdG8gYmUgc2VudC4gIFRoaXMKKwkgICBvcGVyYXRpb24gaXMgbm90IGFsbG93ZWQgdG8gZmFpbC4gIElmIGFuIGVycm9yIG9jY3VycywgaXQKKwkgICBzaG91bGQgcmVwb3J0IGJhY2sgdGhlIGVycm9yIGluIGEgcmVjZWl2ZWQgbWVzc2FnZS4gIEl0IG1heQorCSAgIGRvIHRoaXMgaW4gdGhlIGN1cnJlbnQgY2FsbCBjb250ZXh0LCBzaW5jZSBubyB3cml0ZSBsb2NrcworCSAgIGFyZSBoZWxkIHdoZW4gdGhpcyBpcyBydW4uICBJZiB0aGUgcHJpb3JpdHkgaXMgPiAwLCB0aGUKKwkgICBtZXNzYWdlIHdpbGwgZ28gaW50byBhIGhpZ2gtcHJpb3JpdHkgcXVldWUgYW5kIGJlIHNlbnQKKwkgICBmaXJzdC4gIE90aGVyd2lzZSwgaXQgZ29lcyBpbnRvIGEgbm9ybWFsLXByaW9yaXR5IHF1ZXVlLiAqLworCXZvaWQgKCpzZW5kZXIpKHZvaWQgICAgICAgICAgICAgICAgKnNlbmRfaW5mbywKKwkJICAgICAgIHN0cnVjdCBpcG1pX3NtaV9tc2cgKm1zZywKKwkJICAgICAgIGludCAgICAgICAgICAgICAgICAgcHJpb3JpdHkpOworCisJLyogQ2FsbGVkIGJ5IHRoZSB1cHBlciBsYXllciB0byByZXF1ZXN0IHRoYXQgd2UgdHJ5IHRvIGdldAorCSAgIGV2ZW50cyBmcm9tIHRoZSBCTUMgd2UgYXJlIGF0dGFjaGVkIHRvLiAqLworCXZvaWQgKCpyZXF1ZXN0X2V2ZW50cykodm9pZCAqc2VuZF9pbmZvKTsKKworCS8qIENhbGxlZCB3aGVuIHRoZSBpbnRlcmZhY2Ugc2hvdWxkIGdvIGludG8gInJ1biB0bworCSAgIGNvbXBsZXRpb24iIG1vZGUuICBJZiB0aGlzIGNhbGwgc2V0cyB0aGUgdmFsdWUgdG8gdHJ1ZSwgdGhlCisJICAgaW50ZXJmYWNlIHNob3VsZCBtYWtlIHN1cmUgdGhhdCBhbGwgbWVzc2FnZXMgYXJlIGZsdXNoZWQKKwkgICBvdXQgYW5kIHRoYXQgbm9uZSBhcmUgcGVuZGluZywgYW5kIGFueSBuZXcgcmVxdWVzdHMgYXJlIHJ1bgorCSAgIHRvIGNvbXBsZXRpb24gaW1tZWRpYXRlbHkuICovCisJdm9pZCAoKnNldF9ydW5fdG9fY29tcGxldGlvbikodm9pZCAqc2VuZF9pbmZvLCBpbnQgcnVuX3RvX2NvbXBsZXRpb24pOworCisJLyogQ2FsbGVkIHRvIHBvbGwgZm9yIHdvcmsgdG8gZG8uICBUaGlzIGlzIHNvIHVwcGVyIGxheWVycyBjYW4KKwkgICBwb2xsIGZvciBvcGVyYXRpb25zIGR1cmluZyB0aGluZ3MgbGlrZSBjcmFzaCBkdW1wcy4gKi8KKwl2b2lkICgqcG9sbCkodm9pZCAqc2VuZF9pbmZvKTsKKworCS8qIFRlbGwgdGhlIGhhbmRsZXIgdGhhdCB3ZSBhcmUgdXNpbmcgaXQvbm90IHVzaW5nIGl0LiAgVGhlCisJICAgbWVzc2FnZSBoYW5kbGVyIGdldCB0aGUgbW9kdWxlcyB0aGF0IHRoaXMgaGFuZGxlciBiZWxvbmdzCisJICAgdG87IHRoaXMgZnVuY3Rpb24gbGV0cyB0aGUgU01JIGNsYWltIGFueSBtb2R1bGVzIHRoYXQgaXQKKwkgICB1c2VzLiAgVGhlc2UgbWF5IGJlIE5VTEwgaWYgdGhpcyBpcyBub3QgcmVxdWlyZWQuICovCisJaW50ICgqaW5jX3VzZWNvdW50KSh2b2lkICpzZW5kX2luZm8pOworCXZvaWQgKCpkZWNfdXNlY291bnQpKHZvaWQgKnNlbmRfaW5mbyk7Cit9OworCisvKiBBZGQgYSBsb3ctbGV2ZWwgaW50ZXJmYWNlIHRvIHRoZSBJUE1JIGRyaXZlci4gIE5vdGUgdGhhdCBpZiB0aGUKKyAgIGludGVyZmFjZSBkb2Vzbid0IGtub3cgaXRzIHNsYXZlIGFkZHJlc3MsIGl0IHNob3VsZCBwYXNzIGluIHplcm8uICovCitpbnQgaXBtaV9yZWdpc3Rlcl9zbWkoc3RydWN0IGlwbWlfc21pX2hhbmRsZXJzICpoYW5kbGVycywKKwkJICAgICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICpzZW5kX2luZm8sCisJCSAgICAgIHVuc2lnbmVkIGNoYXIgICAgICAgICAgICB2ZXJzaW9uX21ham9yLAorCQkgICAgICB1bnNpZ25lZCBjaGFyICAgICAgICAgICAgdmVyc2lvbl9taW5vciwKKwkJICAgICAgdW5zaWduZWQgY2hhciAgICAgICAgICAgIHNsYXZlX2FkZHIsCisJCSAgICAgIGlwbWlfc21pX3QgICAgICAgICAgICAgICAqaW50Zik7CisKKy8qCisgKiBSZW1vdmUgYSBsb3ctbGV2ZWwgaW50ZXJmYWNlIGZyb20gdGhlIElQTUkgZHJpdmVyLiAgVGhpcyB3aWxsCisgKiByZXR1cm4gYW4gZXJyb3IgaWYgdGhlIGludGVyZmFjZSBpcyBzdGlsbCBpbiB1c2UgYnkgYSB1c2VyLgorICovCitpbnQgaXBtaV91bnJlZ2lzdGVyX3NtaShpcG1pX3NtaV90IGludGYpOworCisvKgorICogVGhlIGxvd2VyIGxheWVyIHJlcG9ydHMgcmVjZWl2ZWQgbWVzc2FnZXMgdGhyb3VnaCB0aGlzIGludGVyZmFjZS4KKyAqIFRoZSBkYXRhX3NpemUgc2hvdWxkIGJlIHplcm8gaWYgdGhpcyBpcyBhbiBhc3luY3Jvbm91cyBtZXNzYWdlLiAgSWYKKyAqIHRoZSBsb3dlciBsYXllciBnZXRzIGFuIGVycm9yIHNlbmRpbmcgYSBtZXNzYWdlLCBpdCBzaG91bGQgZm9ybWF0CisgKiBhbiBlcnJvciByZXNwb25zZSBpbiB0aGUgbWVzc2FnZSByZXNwb25zZS4KKyAqLwordm9pZCBpcG1pX3NtaV9tc2dfcmVjZWl2ZWQoaXBtaV9zbWlfdCAgICAgICAgICBpbnRmLAorCQkJICAgc3RydWN0IGlwbWlfc21pX21zZyAqbXNnKTsKKworLyogVGhlIGxvd2VyIGxheWVyIHJlY2VpdmVkIGEgd2F0Y2hkb2cgcHJlLXRpbWVvdXQgb24gaW50ZXJmYWNlLiAqLwordm9pZCBpcG1pX3NtaV93YXRjaGRvZ19wcmV0aW1lb3V0KGlwbWlfc21pX3QgaW50Zik7CisKK3N0cnVjdCBpcG1pX3NtaV9tc2cgKmlwbWlfYWxsb2Nfc21pX21zZyh2b2lkKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBpcG1pX2ZyZWVfc21pX21zZyhzdHJ1Y3QgaXBtaV9zbWlfbXNnICptc2cpCit7CisJbXNnLT5kb25lKG1zZyk7Cit9CisKKy8qIEFsbG93IHRoZSBsb3dlciBsYXllciB0byBhZGQgdGhpbmdzIHRvIHRoZSBwcm9jIGZpbGVzeXN0ZW0KKyAgIGRpcmVjdG9yeSBmb3IgdGhpcyBpbnRlcmZhY2UuICBOb3RlIHRoYXQgdGhlIGVudHJ5IHdpbGwKKyAgIGF1dG9tYXRpY2FsbHkgYmUgZHN0cm95ZWQgd2hlbiB0aGUgaW50ZXJmYWNlIGlzIGRlc3Ryb3llZC4gKi8KK2ludCBpcG1pX3NtaV9hZGRfcHJvY19lbnRyeShpcG1pX3NtaV90IHNtaSwgY2hhciAqbmFtZSwKKwkJCSAgICByZWFkX3Byb2NfdCAqcmVhZF9wcm9jLCB3cml0ZV9wcm9jX3QgKndyaXRlX3Byb2MsCisJCQkgICAgdm9pZCAqZGF0YSwgc3RydWN0IG1vZHVsZSAqb3duZXIpOworCisjZW5kaWYgLyogX19MSU5VWF9JUE1JX1NNSV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lwc2VjLmggYi9pbmNsdWRlL2xpbnV4L2lwc2VjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNjNTI3NgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvaXBzZWMuaApAQCAtMCwwICsxLDQ2IEBACisjaWZuZGVmIF9MSU5VWF9JUFNFQ19ICisjZGVmaW5lIF9MSU5VWF9JUFNFQ19ICisKKy8qIFRoZSBkZWZpbml0aW9ucywgcmVxdWlyZWQgdG8gdGFsayB0byBLQU1FIHJhY29vbiBJS0UuICovCisKKyNpbmNsdWRlIDxsaW51eC9wZmtleXYyLmg+CisKKyNkZWZpbmUgSVBTRUNfUE9SVF9BTlkJCTAKKyNkZWZpbmUgSVBTRUNfVUxQUk9UT19BTlkJMjU1CisjZGVmaW5lIElQU0VDX1BST1RPX0FOWQkJMjU1CisKK2VudW0geworCUlQU0VDX01PREVfQU5ZCQk9IDAsCS8qIFdlIGRvIG5vdCBzdXBwb3J0IHRoaXMgZm9yIFNBICovCisJSVBTRUNfTU9ERV9UUkFOU1BPUlQJPSAxLAorCUlQU0VDX01PREVfVFVOTkVMCT0gMgorfTsKKworZW51bSB7CisJSVBTRUNfRElSX0FOWQkJPSAwLAorCUlQU0VDX0RJUl9JTkJPVU5ECT0gMSwKKwlJUFNFQ19ESVJfT1VUQk9VTkQJPSAyLAorCUlQU0VDX0RJUl9GV0QJCT0gMywJLyogSXQgaXMgb3VyIG93biAqLworCUlQU0VDX0RJUl9NQVgJCT0gNCwKKwlJUFNFQ19ESVJfSU5WQUxJRAk9IDUKK307CisKK2VudW0geworCUlQU0VDX1BPTElDWV9ESVNDQVJECT0gMCwKKwlJUFNFQ19QT0xJQ1lfTk9ORQk9IDEsCisJSVBTRUNfUE9MSUNZX0lQU0VDCT0gMiwKKwlJUFNFQ19QT0xJQ1lfRU5UUlVTVAk9IDMsCisJSVBTRUNfUE9MSUNZX0JZUEFTUwk9IDQKK307CisKK2VudW0geworCUlQU0VDX0xFVkVMX0RFRkFVTFQJPSAwLAorCUlQU0VDX0xFVkVMX1VTRQkJPSAxLAorCUlQU0VDX0xFVkVMX1JFUVVJUkUJPSAyLAorCUlQU0VDX0xFVkVMX1VOSVFVRQk9IDMKK307CisKKyNkZWZpbmUgSVBTRUNfTUFOVUFMX1JFUUlEX01BWAkweDNmZmYKKworI2RlZmluZSBJUFNFQ19SRVBMQVlXU0laRSAgMzIKKworI2VuZGlmCS8qIF9MSU5VWF9JUFNFQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lwdjYuaCBiL2luY2x1ZGUvbGludXgvaXB2Ni5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiMGQwZWYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2lwdjYuaApAQCAtMCwwICsxLDMxNiBAQAorI2lmbmRlZiBfSVBWNl9ICisjZGVmaW5lIF9JUFY2X0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2luNi5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKworLyogVGhlIGxhdGVzdCBkcmFmdHMgZGVjbGFyZWQgaW5jcmVhc2UgaW4gbWluaW1hbCBtdHUgdXAgdG8gMTI4MC4gKi8KKworI2RlZmluZSBJUFY2X01JTl9NVFUJMTI4MAorCisvKgorICoJQWR2YW5jZWQgQVBJCisgKglzb3VyY2UgaW50ZXJmYWNlL2FkZHJlc3Mgc2VsZWN0aW9uLCBzb3VyY2Ugcm91dGluZywgZXRjLi4uCisgKgkqdW5kZXIgY29uc3RydWN0aW9uKgorICovCisKKworc3RydWN0IGluNl9wa3RpbmZvIHsKKwlzdHJ1Y3QgaW42X2FkZHIJaXBpNl9hZGRyOworCWludAkJaXBpNl9pZmluZGV4OworfTsKKworCitzdHJ1Y3QgaW42X2lmcmVxIHsKKwlzdHJ1Y3QgaW42X2FkZHIJaWZyNl9hZGRyOworCV9fdTMyCQlpZnI2X3ByZWZpeGxlbjsKKwlpbnQJCWlmcjZfaWZpbmRleDsgCit9OworCisjZGVmaW5lIElQVjZfU1JDUlRfU1RSSUNUCTB4MDEJLyogdGhpcyBob3AgbXVzdCBiZSBhIG5laWdoYm9yCSovCisjZGVmaW5lIElQVjZfU1JDUlRfVFlQRV8wCTAJLyogSVB2NiB0eXBlIDAgUm91dGluZyBIZWFkZXIJKi8KKworLyoKKyAqCXJvdXRpbmcgaGVhZGVyCisgKi8KK3N0cnVjdCBpcHY2X3J0X2hkciB7CisJX191OAkJbmV4dGhkcjsKKwlfX3U4CQloZHJsZW47CisJX191OAkJdHlwZTsKKwlfX3U4CQlzZWdtZW50c19sZWZ0OworCisJLyoKKwkgKgl0eXBlIHNwZWNpZmljIGRhdGEKKwkgKgl2YXJpYWJsZSBsZW5ndGggZmllbGQKKwkgKi8KK307CisKKworc3RydWN0IGlwdjZfb3B0X2hkciB7CisJX191OCAJCW5leHRoZHI7CisJX191OCAJCWhkcmxlbjsKKwkvKiAKKwkgKiBUTFYgZW5jb2RlZCBvcHRpb24gZGF0YSBmb2xsb3dzLgorCSAqLworfTsKKworI2RlZmluZSBpcHY2X2Rlc3RvcHRfaGRyIGlwdjZfb3B0X2hkcgorI2RlZmluZSBpcHY2X2hvcG9wdF9oZHIgIGlwdjZfb3B0X2hkcgorCisjaWZkZWYgX19LRVJORUxfXworI2RlZmluZSBpcHY2X29wdGxlbihwKSAgKCgocCktPmhkcmxlbisxKSA8PCAzKQorI2VuZGlmCisKKy8qCisgKglyb3V0aW5nIGhlYWRlciB0eXBlIDAgKHVzZWQgaW4gY21zZ2hkciBzdHJ1Y3QpCisgKi8KKworc3RydWN0IHJ0MF9oZHIgeworCXN0cnVjdCBpcHY2X3J0X2hkcglydF9oZHI7CisJX191MzIJCQliaXRtYXA7CQkvKiBzdHJpY3QvbG9vc2UgYml0IG1hcCAqLworCXN0cnVjdCBpbjZfYWRkcgkJYWRkclswXTsKKworI2RlZmluZSBydDBfdHlwZQkJcnRfaGRyLnR5cGUKK307CisKK3N0cnVjdCBpcHY2X2F1dGhfaGRyIHsKKwlfX3U4ICBuZXh0aGRyOworCV9fdTggIGhkcmxlbjsgICAgICAgICAgIC8qIFRoaXMgb25lIGlzIG1lYXN1cmVkIGluIDMyIGJpdCB1bml0cyEgKi8KKwlfX3UxNiByZXNlcnZlZDsKKwlfX3UzMiBzcGk7CisJX191MzIgc2VxX25vOyAgICAgICAgICAgLyogU2VxdWVuY2UgbnVtYmVyICovCisJX191OCAgYXV0aF9kYXRhWzBdOyAgICAgLyogTGVuZ3RoIHZhcmlhYmxlIGJ1dCA+PTQuIE1pbmQgdGhlIDY0IGJpdCBhbGlnbm1lbnQhICovCit9OworCitzdHJ1Y3QgaXB2Nl9lc3BfaGRyIHsKKwlfX3UzMiBzcGk7CisJX191MzIgc2VxX25vOyAgICAgICAgICAgLyogU2VxdWVuY2UgbnVtYmVyICovCisJX191OCAgZW5jX2RhdGFbMF07ICAgICAgLyogTGVuZ3RoIHZhcmlhYmxlIGJ1dCA+PTguIE1pbmQgdGhlIDY0IGJpdCBhbGlnbm1lbnQhICovCit9OworCitzdHJ1Y3QgaXB2Nl9jb21wX2hkciB7CisJX191OCBuZXh0aGRyOworCV9fdTggZmxhZ3M7CisJX191MTYgY3BpOworfTsKKworLyoKKyAqCUlQdjYgZml4ZWQgaGVhZGVyCisgKgorICoJQkVXQVJFLCBpdCBpcyBpbmNvcnJlY3QuIFRoZSBmaXJzdCA0IGJpdHMgb2YgZmxvd19sYmwKKyAqCWFyZSBnbHVlZCB0byBwcmlvcml0eSBub3csIGZvcm1pbmcgImNsYXNzIi4KKyAqLworCitzdHJ1Y3QgaXB2NmhkciB7CisjaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fQklURklFTEQpCisJX191OAkJCXByaW9yaXR5OjQsCisJCQkJdmVyc2lvbjo0OworI2VsaWYgZGVmaW5lZChfX0JJR19FTkRJQU5fQklURklFTEQpCisJX191OAkJCXZlcnNpb246NCwKKwkJCQlwcmlvcml0eTo0OworI2Vsc2UKKyNlcnJvcgkiUGxlYXNlIGZpeCA8YXNtL2J5dGVvcmRlci5oPiIKKyNlbmRpZgorCV9fdTgJCQlmbG93X2xibFszXTsKKworCV9fdTE2CQkJcGF5bG9hZF9sZW47CisJX191OAkJCW5leHRoZHI7CisJX191OAkJCWhvcF9saW1pdDsKKworCXN0cnVjdAlpbjZfYWRkcglzYWRkcjsKKwlzdHJ1Y3QJaW42X2FkZHIJZGFkZHI7Cit9OworCisvKgorICogVGhpcyBzdHJ1Y3R1cmUgY29udGFpbnMgY29uZmlndXJhdGlvbiBvcHRpb25zIHBlciBJUHY2IGxpbmsuCisgKi8KK3N0cnVjdCBpcHY2X2RldmNvbmYgeworCV9fczMyCQlmb3J3YXJkaW5nOworCV9fczMyCQlob3BfbGltaXQ7CisJX19zMzIJCW10dTY7CisJX19zMzIJCWFjY2VwdF9yYTsKKwlfX3MzMgkJYWNjZXB0X3JlZGlyZWN0czsKKwlfX3MzMgkJYXV0b2NvbmY7CisJX19zMzIJCWRhZF90cmFuc21pdHM7CisJX19zMzIJCXJ0cl9zb2xpY2l0czsKKwlfX3MzMgkJcnRyX3NvbGljaXRfaW50ZXJ2YWw7CisJX19zMzIJCXJ0cl9zb2xpY2l0X2RlbGF5OworCV9fczMyCQlmb3JjZV9tbGRfdmVyc2lvbjsKKyNpZmRlZiBDT05GSUdfSVBWNl9QUklWQUNZCisJX19zMzIJCXVzZV90ZW1wYWRkcjsKKwlfX3MzMgkJdGVtcF92YWxpZF9sZnQ7CisJX19zMzIJCXRlbXBfcHJlZmVyZWRfbGZ0OworCV9fczMyCQlyZWdlbl9tYXhfcmV0cnk7CisJX19zMzIJCW1heF9kZXN5bmNfZmFjdG9yOworI2VuZGlmCisJX19zMzIJCW1heF9hZGRyZXNzZXM7CisJdm9pZAkJKnN5c2N0bDsKK307CisKKy8qIGluZGV4IHZhbHVlcyBmb3IgdGhlIHZhcmlhYmxlcyBpbiBpcHY2X2RldmNvbmYgKi8KK2VudW0geworCURFVkNPTkZfRk9SV0FSRElORyA9IDAsCisJREVWQ09ORl9IT1BMSU1JVCwKKwlERVZDT05GX01UVTYsCisJREVWQ09ORl9BQ0NFUFRfUkEsCisJREVWQ09ORl9BQ0NFUFRfUkVESVJFQ1RTLAorCURFVkNPTkZfQVVUT0NPTkYsCisJREVWQ09ORl9EQURfVFJBTlNNSVRTLAorCURFVkNPTkZfUlRSX1NPTElDSVRTLAorCURFVkNPTkZfUlRSX1NPTElDSVRfSU5URVJWQUwsCisJREVWQ09ORl9SVFJfU09MSUNJVF9ERUxBWSwKKwlERVZDT05GX1VTRV9URU1QQUREUiwKKwlERVZDT05GX1RFTVBfVkFMSURfTEZULAorCURFVkNPTkZfVEVNUF9QUkVGRVJFRF9MRlQsCisJREVWQ09ORl9SRUdFTl9NQVhfUkVUUlksCisJREVWQ09ORl9NQVhfREVTWU5DX0ZBQ1RPUiwKKwlERVZDT05GX01BWF9BRERSRVNTRVMsCisJREVWQ09ORl9GT1JDRV9NTERfVkVSU0lPTiwKKwlERVZDT05GX01BWAorfTsKKworI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxsaW51eC9pbjYuaD4gICAgICAgICAgLyogc3RydWN0IHNvY2thZGRyX2luNiAqLworI2luY2x1ZGUgPGxpbnV4L2ljbXB2Ni5oPgorI2luY2x1ZGUgPG5ldC9pZl9pbmV0Ni5oPiAgICAgICAvKiBzdHJ1Y3QgaXB2Nl9tY19zb2NrbGlzdCAqLworI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgorI2luY2x1ZGUgPGxpbnV4L3VkcC5oPgorCisvKiAKKyAgIFRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIHJlc3VsdHMgb2YgZXh0aGRycyBwYXJzaW5nCisgICBhcyBvZmZzZXRzIGZyb20gc2tiLT5uaC4KKyAqLworCitzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0geworCWludAkJCWlpZjsKKwlfX3UxNgkJCXJhOworCV9fdTE2CQkJaG9wOworCV9fdTE2CQkJZHN0MDsKKwlfX3UxNgkJCXNyY3J0OworCV9fdTE2CQkJZHN0MTsKK307CisKKyNkZWZpbmUgSVA2Q0Ioc2tiKQkoKHN0cnVjdCBpbmV0Nl9za2JfcGFybSopKChza2IpLT5jYikpCisKKy8qKgorICogc3RydWN0IGlwdjZfcGluZm8gLSBpcHY2IHByaXZhdGUgYXJlYQorICoKKyAqIEluIHRoZSBzdHJ1Y3Qgc29jayBoaWVyYXJjaHkgKHRjcDZfc29jaywgdXBkNl9zb2NrLCBldGMpCisgKiB0aGlzIF9tdXN0XyBiZSB0aGUgbGFzdCBtZW1iZXIsIHNvIHRoYXQgaW5ldDZfc2tfZ2VuZXJpYworICogaXMgYWJsZSB0byBjYWxjdWxhdGUgaXRzIG9mZnNldCBmcm9tIHRoZSBiYXNlIHN0cnVjdCBzb2NrCisgKiBieSB1c2luZyB0aGUgc3RydWN0IHByb3RvLT5zbGFiX29ial9zaXplIG1lbWJlci4gLWFjbWUKKyAqLworc3RydWN0IGlwdjZfcGluZm8geworCXN0cnVjdCBpbjZfYWRkciAJc2FkZHI7CisJc3RydWN0IGluNl9hZGRyIAlyY3Zfc2FkZHI7CisJc3RydWN0IGluNl9hZGRyCQlkYWRkcjsKKwlzdHJ1Y3QgaW42X2FkZHIJCSpkYWRkcl9jYWNoZTsKKworCV9fdTMyCQkJZmxvd19sYWJlbDsKKwlfX3UzMgkJCWZyYWdfc2l6ZTsKKwlfX3MxNgkJCWhvcF9saW1pdDsKKwlfX3MxNgkJCW1jYXN0X2hvcHM7CisJaW50CQkJbWNhc3Rfb2lmOworCisJLyogcGt0b3B0aW9uIGZsYWdzICovCisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJX191OAlzcmNydDoyLAorCQkJICAgICAgICByeGluZm86MSwKKwkJCQlyeGhsaW06MSwKKwkJCQlob3BvcHRzOjEsCisJCQkJZHN0b3B0czoxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByeGZsb3c6MTsKKwkJfSBiaXRzOworCQlfX3U4CQlhbGw7CisJfSByeG9wdDsKKworCS8qIHNvY2tvcHQgZmxhZ3MgKi8KKwlfX3U4CQkJbWNfbG9vcDoxLAorCSAgICAgICAgICAgICAgICAgICAgICAgIHJlY3ZlcnI6MSwKKwkgICAgICAgICAgICAgICAgICAgICAgICBzbmRmbG93OjEsCisJCQkJcG10dWRpc2M6MiwKKwkJCQlpcHY2b25seToxOworCisJX191MzIJCQlkc3RfY29va2llOworCisJc3RydWN0IGlwdjZfbWNfc29ja2xpc3QJKmlwdjZfbWNfbGlzdDsKKwlzdHJ1Y3QgaXB2Nl9hY19zb2NrbGlzdAkqaXB2Nl9hY19saXN0OworCXN0cnVjdCBpcHY2X2ZsX3NvY2tsaXN0ICppcHY2X2ZsX2xpc3Q7CisKKwlzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMJKm9wdDsKKwlzdHJ1Y3Qgc2tfYnVmZgkJKnBrdG9wdGlvbnM7CisJc3RydWN0IHsKKwkJc3RydWN0IGlwdjZfdHhvcHRpb25zICpvcHQ7CisJCXN0cnVjdCBydDZfaW5mbwkqcnQ7CisJCWludCBob3BfbGltaXQ7CisJfSBjb3JrOworfTsKKworLyogV0FSTklORzogZG9uJ3QgY2hhbmdlIHRoZSBsYXlvdXQgb2YgdGhlIG1lbWJlcnMgaW4ge3Jhdyx1ZHAsdGNwfTZfc29jayEgKi8KK3N0cnVjdCByYXc2X3NvY2sgeworCS8qIGluZXRfc29jayBoYXMgdG8gYmUgdGhlIGZpcnN0IG1lbWJlciBvZiByYXc2X3NvY2sgKi8KKwlzdHJ1Y3QgaW5ldF9zb2NrCWluZXQ7CisJX191MzIJCQljaGVja3N1bTsJLyogcGVyZm9ybSBjaGVja3N1bSAqLworCV9fdTMyCQkJb2Zmc2V0OwkJLyogY2hlY2tzdW0gb2Zmc2V0ICAqLworCXN0cnVjdCBpY21wNl9maWx0ZXIJZmlsdGVyOworCS8qIGlwdjZfcGluZm8gaGFzIHRvIGJlIHRoZSBsYXN0IG1lbWJlciBvZiByYXc2X3NvY2ssIHNlZSBpbmV0Nl9za19nZW5lcmljICovCisJc3RydWN0IGlwdjZfcGluZm8JaW5ldDY7Cit9OworCitzdHJ1Y3QgdWRwNl9zb2NrIHsKKwlzdHJ1Y3QgdWRwX3NvY2sJICB1ZHA7CisJLyogaXB2Nl9waW5mbyBoYXMgdG8gYmUgdGhlIGxhc3QgbWVtYmVyIG9mIHVkcDZfc29jaywgc2VlIGluZXQ2X3NrX2dlbmVyaWMgKi8KKwlzdHJ1Y3QgaXB2Nl9waW5mbyBpbmV0NjsKK307CisKK3N0cnVjdCB0Y3A2X3NvY2sgeworCXN0cnVjdCB0Y3Bfc29jawkgIHRjcDsKKwkvKiBpcHY2X3BpbmZvIGhhcyB0byBiZSB0aGUgbGFzdCBtZW1iZXIgb2YgdGNwNl9zb2NrLCBzZWUgaW5ldDZfc2tfZ2VuZXJpYyAqLworCXN0cnVjdCBpcHY2X3BpbmZvIGluZXQ2OworfTsKKworI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgaXB2Nl9waW5mbyAqIGluZXQ2X3NrKGNvbnN0IHN0cnVjdCBzb2NrICpfX3NrKQoreworCXJldHVybiBpbmV0X3NrKF9fc2spLT5waW5ldDY7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHJhdzZfc29jayAqcmF3Nl9zayhjb25zdCBzdHJ1Y3Qgc29jayAqc2spCit7CisJcmV0dXJuIChzdHJ1Y3QgcmF3Nl9zb2NrICopc2s7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbmV0X3NrX2NvcHlfZGVzY2VuZGFudChzdHJ1Y3Qgc29jayAqc2tfdG8sCisJCQkJCSAgIGNvbnN0IHN0cnVjdCBzb2NrICpza19mcm9tKQoreworCWludCBhbmNlc3Rvcl9zaXplID0gc2l6ZW9mKHN0cnVjdCBpbmV0X3NvY2spOworCisJaWYgKHNrX2Zyb20tPnNrX2ZhbWlseSA9PSBQRl9JTkVUNikKKwkJYW5jZXN0b3Jfc2l6ZSArPSBzaXplb2Yoc3RydWN0IGlwdjZfcGluZm8pOworCisJX19pbmV0X3NrX2NvcHlfZGVzY2VuZGFudChza190bywgc2tfZnJvbSwgYW5jZXN0b3Jfc2l6ZSk7Cit9CisKKyNkZWZpbmUgX19pcHY2X29ubHlfc29jayhzaykJKGluZXQ2X3NrKHNrKS0+aXB2Nm9ubHkpCisjZGVmaW5lIGlwdjZfb25seV9zb2NrKHNrKQkoKHNrKS0+c2tfZmFtaWx5ID09IFBGX0lORVQ2ICYmIF9faXB2Nl9vbmx5X3NvY2soc2spKQorI2Vsc2UKKyNkZWZpbmUgX19pcHY2X29ubHlfc29jayhzaykJMAorI2RlZmluZSBpcHY2X29ubHlfc29jayhzaykJMAorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpcHY2X3BpbmZvICogaW5ldDZfc2soY29uc3Qgc3RydWN0IHNvY2sgKl9fc2spCit7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHJhdzZfc29jayAqcmF3Nl9zayhjb25zdCBzdHJ1Y3Qgc29jayAqc2spCit7CisJcmV0dXJuIE5VTEw7Cit9CisKKyNlbmRpZgorCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lwdjZfcm91dGUuaCBiL2luY2x1ZGUvbGludXgvaXB2Nl9yb3V0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyZjkzNTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2lwdjZfcm91dGUuaApAQCAtMCwwICsxLDQ5IEBACisvKgorICoJTGludXggSU5FVDYgaW1wbGVtZW50YXRpb24gCisgKgorICoJQXV0aG9yczoKKyAqCVBlZHJvIFJvcXVlCQk8cm9xdWVAZGkuZmMudWwucHQ+CQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAgICAgIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfTElOVVhfSVBWNl9ST1VURV9ICisjZGVmaW5lIF9MSU5VWF9JUFY2X1JPVVRFX0gKKworI2RlZmluZSBSVEZfREVGQVVMVAkweDAwMDEwMDAwCS8qIGRlZmF1bHQgLSBsZWFybmVkIHZpYSBORAkqLworI2RlZmluZSBSVEZfQUxMT05MSU5LCTB4MDAwMjAwMDAJLyogKGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCkKKwkJCQkJICAgZmFsbGJhY2ssIG5vIHJvdXRlcnMgb24gbGluayAqLworI2RlZmluZSBSVEZfQUREUkNPTkYJMHgwMDA0MDAwMAkvKiBhZGRyY29uZiByb3V0ZSAtIFJBCQkqLworI2RlZmluZSBSVEZfUFJFRklYX1JUCTB4MDAwODAwMDAJLyogQSBwcmVmaXggb25seSByb3V0ZSAtIFJBCSovCisKKyNkZWZpbmUgUlRGX05PTkVYVEhPUAkweDAwMjAwMDAwCS8qIHJvdXRlIHdpdGggbm8gbmV4dGhvcAkqLworI2RlZmluZSBSVEZfRVhQSVJFUwkweDAwNDAwMDAwCisKKyNkZWZpbmUgUlRGX0NBQ0hFCTB4MDEwMDAwMDAJLyogY2FjaGUgZW50cnkJCQkqLworI2RlZmluZSBSVEZfRkxPVwkweDAyMDAwMDAwCS8qIGZsb3cgc2lnbmlmaWNhbnQgcm91dGUJKi8KKyNkZWZpbmUgUlRGX1BPTElDWQkweDA0MDAwMDAwCS8qIHBvbGljeSByb3V0ZQkJCSovCisKKyNkZWZpbmUgUlRGX0xPQ0FMCTB4ODAwMDAwMDAKKworc3RydWN0IGluNl9ydG1zZyB7CisJc3RydWN0IGluNl9hZGRyCQlydG1zZ19kc3Q7CisJc3RydWN0IGluNl9hZGRyCQlydG1zZ19zcmM7CisJc3RydWN0IGluNl9hZGRyCQlydG1zZ19nYXRld2F5OworCV9fdTMyCQkJcnRtc2dfdHlwZTsKKwlfX3UxNgkJCXJ0bXNnX2RzdF9sZW47CisJX191MTYJCQlydG1zZ19zcmNfbGVuOworCV9fdTMyCQkJcnRtc2dfbWV0cmljOworCXVuc2lnbmVkIGxvbmcJCXJ0bXNnX2luZm87CisgICAgICAgIF9fdTMyCQkJcnRtc2dfZmxhZ3M7CisJaW50CQkJcnRtc2dfaWZpbmRleDsKK307CisKKyNkZWZpbmUgUlRNU0dfTkVXREVWSUNFCQkweDExCisjZGVmaW5lIFJUTVNHX0RFTERFVklDRQkJMHgxMgorI2RlZmluZSBSVE1TR19ORVdST1VURQkJMHgyMQorI2RlZmluZSBSVE1TR19ERUxST1VURQkJMHgyMgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXB4LmggYi9pbmNsdWRlL2xpbnV4L2lweC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmMjljNjAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2lweC5oCkBAIC0wLDAgKzEsNzQgQEAKKyNpZm5kZWYgX0lQWF9IXworI2RlZmluZSBfSVBYX0hfCisjaW5jbHVkZSA8bGludXgvc29ja2lvcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPgorI2RlZmluZSBJUFhfTk9ERV9MRU4JNgorI2RlZmluZSBJUFhfTVRVCQk1NzYKKworc3RydWN0IHNvY2thZGRyX2lweCB7CisJc2FfZmFtaWx5X3QJc2lweF9mYW1pbHk7CisJX191MTYJCXNpcHhfcG9ydDsKKwlfX3UzMgkJc2lweF9uZXR3b3JrOworCXVuc2lnbmVkIGNoYXIgCXNpcHhfbm9kZVtJUFhfTk9ERV9MRU5dOworCV9fdTgJCXNpcHhfdHlwZTsKKwl1bnNpZ25lZCBjaGFyCXNpcHhfemVybzsJLyogMTYgYnl0ZSBmaWxsICovCit9OworCisvKgorICogU28gd2UgY2FuIGZpdCB0aGUgZXh0cmEgaW5mbyBmb3IgU0lPQ1NJRkFERFIgaW50byB0aGUgYWRkcmVzcyBuaWNlbHkKKyAqLworI2RlZmluZSBzaXB4X3NwZWNpYWwJc2lweF9wb3J0CisjZGVmaW5lIHNpcHhfYWN0aW9uCXNpcHhfemVybworI2RlZmluZSBJUFhfRExUSVRGCTAKKyNkZWZpbmUgSVBYX0NSVElURgkxCisKK3N0cnVjdCBpcHhfcm91dGVfZGVmaW5pdGlvbiB7CisJX191MzIgICAgICAgICBpcHhfbmV0d29yazsKKwlfX3UzMiAgICAgICAgIGlweF9yb3V0ZXJfbmV0d29yazsKKwl1bnNpZ25lZCBjaGFyIGlweF9yb3V0ZXJfbm9kZVtJUFhfTk9ERV9MRU5dOworfTsKKworc3RydWN0IGlweF9pbnRlcmZhY2VfZGVmaW5pdGlvbiB7CisJX191MzIgICAgICAgICBpcHhfbmV0d29yazsKKwl1bnNpZ25lZCBjaGFyIGlweF9kZXZpY2VbMTZdOworCXVuc2lnbmVkIGNoYXIgaXB4X2RsaW5rX3R5cGU7CisjZGVmaW5lIElQWF9GUkFNRV9OT05FCQkwCisjZGVmaW5lIElQWF9GUkFNRV9TTkFQCQkxCisjZGVmaW5lIElQWF9GUkFNRV84MDIyCQkyCisjZGVmaW5lIElQWF9GUkFNRV9FVEhFUklJCTMKKyNkZWZpbmUgSVBYX0ZSQU1FXzgwMjMJCTQKKyNkZWZpbmUgSVBYX0ZSQU1FX1RSXzgwMjIgICAgICAgNSAvKiBvYnNvbGV0ZSAqLworCXVuc2lnbmVkIGNoYXIgaXB4X3NwZWNpYWw7CisjZGVmaW5lIElQWF9TUEVDSUFMX05PTkUJMAorI2RlZmluZSBJUFhfUFJJTUFSWQkJMQorI2RlZmluZSBJUFhfSU5URVJOQUwJCTIKKwl1bnNpZ25lZCBjaGFyIGlweF9ub2RlW0lQWF9OT0RFX0xFTl07Cit9OworCQorc3RydWN0IGlweF9jb25maWdfZGF0YSB7CisJdW5zaWduZWQgY2hhcglpcHhjZmdfYXV0b19zZWxlY3RfcHJpbWFyeTsKKwl1bnNpZ25lZCBjaGFyCWlweGNmZ19hdXRvX2NyZWF0ZV9pbnRlcmZhY2VzOworfTsKKworLyoKKyAqIE9MRCBSb3V0ZSBEZWZpbml0aW9uIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgorICovCisKK3N0cnVjdCBpcHhfcm91dGVfZGVmIHsKKwlfX3UzMgkJaXB4X25ldHdvcms7CisJX191MzIJCWlweF9yb3V0ZXJfbmV0d29yazsKKyNkZWZpbmUgSVBYX1JPVVRFX05PX1JPVVRFUgkwCisJdW5zaWduZWQgY2hhcglpcHhfcm91dGVyX25vZGVbSVBYX05PREVfTEVOXTsKKwl1bnNpZ25lZCBjaGFyCWlweF9kZXZpY2VbMTZdOworCXVuc2lnbmVkIHNob3J0CWlweF9mbGFnczsKKyNkZWZpbmUgSVBYX1JUX1NOQVAJCTgKKyNkZWZpbmUgSVBYX1JUXzgwMjIJCTQKKyNkZWZpbmUgSVBYX1JUX0JMVUVCT09LCQkyCisjZGVmaW5lIElQWF9SVF9ST1VURUQJCTEKK307CisKKyNkZWZpbmUgU0lPQ0FJUFhJVEZDUlQJCShTSU9DUFJPVE9QUklWQVRFKQorI2RlZmluZSBTSU9DQUlQWFBSSVNMVAkJKFNJT0NQUk9UT1BSSVZBVEUgKyAxKQorI2RlZmluZSBTSU9DSVBYQ0ZHREFUQQkJKFNJT0NQUk9UT1BSSVZBVEUgKyAyKQorI2RlZmluZSBTSU9DSVBYTkNQQ09OTgkJKFNJT0NQUk9UT1BSSVZBVEUgKyAzKQorI2VuZGlmIC8qIF9JUFhfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXJkYS5oIGIvaW5jbHVkZS9saW51eC9pcmRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTVkZWUxNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvaXJkYS5oCkBAIC0wLDAgKzEsMjIyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAKKyAqIEZpbGVuYW1lOiAgICAgIGlyZGEuaAorICogVmVyc2lvbjogICAgICAgCisgKiBEZXNjcmlwdGlvbjogICAKKyAqIFN0YXR1czogICAgICAgIEV4cGVyaW1lbnRhbC4KKyAqIEF1dGhvcjogICAgICAgIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4KKyAqIENyZWF0ZWQgYXQ6ICAgIE1vbiBNYXIgIDggMTQ6MDY6MTIgMTk5OQorICogTW9kaWZpZWQgYXQ6ICAgU2F0IERlYyAyNSAxNjowNjo0MiAxOTk5CisgKiBNb2RpZmllZCBieTogICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+CisgKiAKKyAqICAgICBDb3B5cmlnaHQgKGMpIDE5OTkgRGFnIEJyYXR0bGksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgICAgIAorICogICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgCisgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgCisgKiAgICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiAgCisgKiAgICAgTmVpdGhlciBEYWcgQnJhdHRsaSBub3IgVW5pdmVyc2l0eSBvZiBUcm9tc/ggYWRtaXQgbGlhYmlsaXR5IG5vcgorICogICAgIHByb3ZpZGUgd2FycmFudHkgZm9yIGFueSBvZiB0aGlzIHNvZnR3YXJlLiBUaGlzIG1hdGVyaWFsIGlzIAorICogICAgIHByb3ZpZGVkICJBUy1JUyIgYW5kIGF0IG5vIGNoYXJnZS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgS0VSTkVMX0lSREFfSAorI2RlZmluZSBLRVJORUxfSVJEQV9ICisKKy8qIFBsZWFzZSBkbyAqbm90KiBhZGQgYW55ICNpbmNsdWRlIGluIHRoaXMgZmlsZSwgdGhpcyBmaWxlIGlzCisgKiBpbmNsdWRlZCBhcy1pcyBpbiB1c2VyIHNwYWNlLgorICogUGxlYXNlIGZpeCB0aGUgY2FsbGluZyBmaWxlIHRvIHByb3Blcmx5IGluY2x1ZGVkIG5lZWRlZCBmaWxlcyBiZWZvcmUKKyAqIHRoaXMgb25lLCBvciBwcmVmZXJhYmx5IHRvIGluY2x1ZGUgPG5ldC9pcmRhL2lyZGEuaD4gaW5zdGVhZC4KKyAqIEplYW4gSUkgKi8KKworLyogSGludCBiaXQgcG9zaXRpb25zIGZvciBmaXJzdCBoaW50IGJ5dGUgKi8KKyNkZWZpbmUgSElOVF9QTlAgICAgICAgICAweDAxCisjZGVmaW5lIEhJTlRfUERBICAgICAgICAgMHgwMgorI2RlZmluZSBISU5UX0NPTVBVVEVSICAgIDB4MDQKKyNkZWZpbmUgSElOVF9QUklOVEVSICAgICAweDA4CisjZGVmaW5lIEhJTlRfTU9ERU0gICAgICAgMHgxMAorI2RlZmluZSBISU5UX0ZBWCAgICAgICAgIDB4MjAKKyNkZWZpbmUgSElOVF9MQU4gICAgICAgICAweDQwCisjZGVmaW5lIEhJTlRfRVhURU5TSU9OICAgMHg4MAorCisvKiBIaW50IGJpdCBwb3NpdGlvbnMgZm9yIHNlY29uZCBoaW50IGJ5dGUgKGZpcnN0IGV4dGVuc2lvbiBieXRlKSAqLworI2RlZmluZSBISU5UX1RFTEVQSE9OWSAgIDB4MDEKKyNkZWZpbmUgSElOVF9GSUxFX1NFUlZFUiAweDAyCisjZGVmaW5lIEhJTlRfQ09NTSAgICAgICAgMHgwNAorI2RlZmluZSBISU5UX01FU1NBR0UgICAgIDB4MDgKKyNkZWZpbmUgSElOVF9IVFRQICAgICAgICAweDEwCisjZGVmaW5lIEhJTlRfT0JFWCAgICAgICAgMHgyMAorCisvKiBJckxNUCBjaGFyYWN0ZXIgY29kZSB2YWx1ZXMgKi8KKyNkZWZpbmUgQ1NfQVNDSUkgICAgICAgICAweDAwCisjZGVmaW5lCUNTX0lTT184ODU5XzEgICAgMHgwMQorI2RlZmluZQlDU19JU09fODg1OV8yICAgIDB4MDIKKyNkZWZpbmUJQ1NfSVNPXzg4NTlfMyAgICAweDAzCisjZGVmaW5lCUNTX0lTT184ODU5XzQgICAgMHgwNAorI2RlZmluZQlDU19JU09fODg1OV81ICAgIDB4MDUKKyNkZWZpbmUJQ1NfSVNPXzg4NTlfNiAgICAweDA2CisjZGVmaW5lCUNTX0lTT184ODU5XzcgICAgMHgwNworI2RlZmluZQlDU19JU09fODg1OV84ICAgIDB4MDgKKyNkZWZpbmUJQ1NfSVNPXzg4NTlfOSAgICAweDA5CisjZGVmaW5lIENTX1VOSUNPREUgICAgICAgMHhmZgorCisvKiBUaGVzZSBhcmUgdGhlIGN1cnJlbnRseSBrbm93biBkb25nbGVzICovCit0eXBlZGVmIGVudW0geworCUlSREFfVEVLUkFNX0RPTkdMRSAgICAgICA9IDAsCisJSVJEQV9FU0lfRE9OR0xFICAgICAgICAgID0gMSwKKwlJUkRBX0FDVElTWVNfRE9OR0xFICAgICAgPSAyLAorCUlSREFfQUNUSVNZU19QTFVTX0RPTkdMRSA9IDMsCisJSVJEQV9HSVJCSUxfRE9OR0xFICAgICAgID0gNCwKKwlJUkRBX0xJVEVMSU5LX0RPTkdMRSAgICAgPSA1LAorCUlSREFfQUlSUE9SVF9ET05HTEUgICAgICA9IDYsCisJSVJEQV9PTERfQkVMS0lOX0RPTkdMRSAgID0gNywKKwlJUkRBX0VQNzIxMV9JUiAgICAgICAgICAgPSA4LAorCUlSREFfTUNQMjEyMF9ET05HTEUgICAgICA9IDksCisJSVJEQV9BQ1QyMDBMX0RPTkdMRSAgICAgID0gMTAsCisJSVJEQV9NQTYwMF9ET05HTEUgICAgICAgID0gMTEsCit9IElSREFfRE9OR0xFOworCisvKiBQcm90b2NvbCB0eXBlcyB0byBiZSB1c2VkIGZvciBTT0NLX0RHUkFNICovCitlbnVtIHsKKwlJUkRBUFJPVE9fVU5JVERBVEEgPSAwLAorCUlSREFQUk9UT19VTFRSQSAgICA9IDEsCisJSVJEQVBST1RPX01BWAorfTsKKworI2RlZmluZSBTT0xfSVJMTVAgICAgICAyNjYgLyogU2FtZSBhcyBTT0xfSVJEQSBmb3Igbm93ICovCisjZGVmaW5lIFNPTF9JUlRUUCAgICAgIDI2NiAvKiBTYW1lIGFzIFNPTF9JUkRBIGZvciBub3cgKi8KKworI2RlZmluZSBJUkxNUF9FTlVNREVWSUNFUyAgICAgICAgMQkvKiBSZXR1cm4gZGlzY292ZXJ5IGxvZyAqLworI2RlZmluZSBJUkxNUF9JQVNfU0VUICAgICAgICAgICAgMgkvKiBTZXQgYW4gYXR0cmlidXRlIGluIGxvY2FsIElBUyAqLworI2RlZmluZSBJUkxNUF9JQVNfUVVFUlkgICAgICAgICAgMwkvKiBRdWVyeSByZW1vdGUgSUFTIGZvciBhdHRyaWJ1dGUgKi8KKyNkZWZpbmUgSVJMTVBfSElOVFNfU0VUICAgICAgICAgIDQJLyogU2V0IGhpbnQgYml0cyBhZHZlcnRpc2VkICovCisjZGVmaW5lIElSTE1QX1FPU19TRVQgICAgICAgICAgICA1CisjZGVmaW5lIElSTE1QX1FPU19HRVQgICAgICAgICAgICA2CisjZGVmaW5lIElSTE1QX01BWF9TRFVfU0laRSAgICAgICA3CisjZGVmaW5lIElSTE1QX0lBU19HRVQgICAgICAgICAgICA4CS8qIEdldCBhbiBhdHRyaWJ1dGUgZnJvbSBsb2NhbCBJQVMgKi8KKyNkZWZpbmUgSVJMTVBfSUFTX0RFTAkJIDkJLyogUmVtb3ZlIGF0dHJpYnV0ZSBmcm9tIGxvY2FsIElBUyAqLworI2RlZmluZSBJUkxNUF9ISU5UX01BU0tfU0VUCTEwCS8qIFNldCBkaXNjb3ZlcnkgZmlsdGVyICovCisjZGVmaW5lIElSTE1QX1dBSVRERVZJQ0UJMTEJLyogV2FpdCBmb3IgYSBuZXcgZGlzY292ZXJ5ICovCisKKyNkZWZpbmUgSVJUVFBfTUFYX1NEVV9TSVpFIElSTE1QX01BWF9TRFVfU0laRSAvKiBDb21wYXRpYmlsaXR5ICovCisKKyNkZWZpbmUgSUFTX01BWF9TVFJJTkcgICAgICAgICAyNTYJLyogU2VlIElyTE1QIDEuMSwgNC4zLjMuMiAqLworI2RlZmluZSBJQVNfTUFYX09DVEVUX1NUUklORyAgMTAyNAkvKiBTZWUgSXJMTVAgMS4xLCA0LjMuMy4yICovCisjZGVmaW5lIElBU19NQVhfQ0xBU1NOQU1FICAgICAgIDYwCS8qIFNlZSBJckxNUCAxLjEsIDQuMy4xICovCisjZGVmaW5lIElBU19NQVhfQVRUUklCTkFNRSAgICAgIDYwCS8qIFNlZSBJckxNUCAxLjEsIDQuMy4zLjEgKi8KKyNkZWZpbmUgSUFTX01BWF9BVFRSSUJOVU1CRVIgICAyNTYJLyogU2VlIElyTE1QIDEuMSwgNC4zLjMuMSAqLworLyogRm9yIHVzZXIgc3BhY2UgYmFja3dhcmQgY29tcGF0aWJpbGl0eSAtIG1heSBiZSBmaXhlZCBpbiBrZXJuZWwgMi41LlgKKyAqIE5vdGUgOiBuZWVkIDYwKzEgKCdcMCcpLCBtYWtlIGl0IDY0IGZvciBhbGlnbmVtZW50IC0gSmVhbiBJSSAqLworI2RlZmluZSBJQVNfRVhQT1JUX0NMQVNTTkFNRSAgICAgICA2NAorI2RlZmluZSBJQVNfRVhQT1JUX0FUVFJJQk5BTUUgICAgIDI1NgorCisvKiBBdHRyaWJ1dGUgdHlwZSBuZWVkZWQgZm9yIHN0cnVjdCBpcmRhX2lhc19zZXQgKi8KKyNkZWZpbmUgSUFTX01JU1NJTkcgMAorI2RlZmluZSBJQVNfSU5URUdFUiAxCisjZGVmaW5lIElBU19PQ1RfU0VRIDIKKyNkZWZpbmUgSUFTX1NUUklORyAgMworCisjZGVmaW5lIExTQVBfQU5ZICAgICAgICAgICAgICAweGZmCisKK3N0cnVjdCBzb2NrYWRkcl9pcmRhIHsKKwlzYV9mYW1pbHlfdCBzaXJfZmFtaWx5OyAgIC8qIEFGX0lSREEgKi8KKwlfX3U4ICAgICAgICBzaXJfbHNhcF9zZWw7IC8qIExTQVAgc2VsZWN0b3IgKi8KKwlfX3UzMiAgICAgICBzaXJfYWRkcjsgICAgIC8qIERldmljZSBhZGRyZXNzICovCisJY2hhciAgICAgICAgc2lyX25hbWVbMjVdOyAvKiBVc3VhbGx5IDxzZXJ2aWNlPjpJckRBOlRpbnlUUCAqLworfTsKKworc3RydWN0IGlyZGFfZGV2aWNlX2luZm8geworCV9fdTMyICAgICAgIHNhZGRyOyAgICAvKiBBZGRyZXNzIG9mIGxvY2FsIGludGVyZmFjZSAqLworCV9fdTMyICAgICAgIGRhZGRyOyAgICAvKiBBZGRyZXNzIG9mIHJlbW90ZSBkZXZpY2UgKi8KKwljaGFyICAgICAgICBpbmZvWzIyXTsgLyogRGVzY3JpcHRpb24gKi8KKwlfX3U4ICAgICAgICBjaGFyc2V0OyAgLyogQ2hhcnNldCB1c2VkIGZvciBkZXNjcmlwdGlvbiAqLworCV9fdTggICAgICAgIGhpbnRzWzJdOyAvKiBIaW50IGJpdHMgKi8KK307CisKK3N0cnVjdCBpcmRhX2RldmljZV9saXN0IHsKKyAgICAgICBfX3UzMiBsZW47CisgICAgICAgc3RydWN0IGlyZGFfZGV2aWNlX2luZm8gZGV2WzFdOworfTsKKworc3RydWN0IGlyZGFfaWFzX3NldCB7CisJY2hhciBpcmRhX2NsYXNzX25hbWVbSUFTX0VYUE9SVF9DTEFTU05BTUVdOworCWNoYXIgaXJkYV9hdHRyaWJfbmFtZVtJQVNfRVhQT1JUX0FUVFJJQk5BTUVdOworCXVuc2lnbmVkIGludCBpcmRhX2F0dHJpYl90eXBlOworCXVuaW9uIHsKKwkJdW5zaWduZWQgaW50IGlyZGFfYXR0cmliX2ludDsKKwkJc3RydWN0IHsKKwkJCXVuc2lnbmVkIHNob3J0IGxlbjsKKwkJCV9fdTggb2N0ZXRfc2VxW0lBU19NQVhfT0NURVRfU1RSSU5HXTsKKwkJfSBpcmRhX2F0dHJpYl9vY3RldF9zZXE7CisJCXN0cnVjdCB7CisJCQlfX3U4IGxlbjsKKwkJCV9fdTggY2hhcnNldDsKKwkJCV9fdTggc3RyaW5nW0lBU19NQVhfU1RSSU5HXTsKKwkJfSBpcmRhX2F0dHJpYl9zdHJpbmc7CisJfSBhdHRyaWJ1dGU7CisJX191MzIgICAgICAgZGFkZHI7ICAgIC8qIEFkZHJlc3Mgb2YgZGV2aWNlIChmb3Igc29tZSBxdWVyaWVzIG9ubHkpICovCit9OworCisvKiBTb21lIHByaXZhdGUgSU9DVEwncyAobWF4IDE2KSAqLworI2RlZmluZSBTSU9DU0RPTkdMRSAgICAoU0lPQ0RFVlBSSVZBVEUgKyAwKQorI2RlZmluZSBTSU9DR0RPTkdMRSAgICAoU0lPQ0RFVlBSSVZBVEUgKyAxKQorI2RlZmluZSBTSU9DU0JBTkRXSURUSCAoU0lPQ0RFVlBSSVZBVEUgKyAyKQorI2RlZmluZSBTSU9DU01FRElBQlVTWSAoU0lPQ0RFVlBSSVZBVEUgKyAzKQorI2RlZmluZSBTSU9DR01FRElBQlVTWSAoU0lPQ0RFVlBSSVZBVEUgKyA0KQorI2RlZmluZSBTSU9DR1JFQ0VJVklORyAoU0lPQ0RFVlBSSVZBVEUgKyA1KQorI2RlZmluZSBTSU9DU01PREUgICAgICAoU0lPQ0RFVlBSSVZBVEUgKyA2KQorI2RlZmluZSBTSU9DR01PREUgICAgICAoU0lPQ0RFVlBSSVZBVEUgKyA3KQorI2RlZmluZSBTSU9DU0RUUlJUUyAgICAoU0lPQ0RFVlBSSVZBVEUgKyA4KQorI2RlZmluZSBTSU9DR1FPUyAgICAgICAoU0lPQ0RFVlBSSVZBVEUgKyA5KQorCisvKiBObyByZWFzb24gdG8gaW5jbHVkZSA8bGludXgvaWYuaD4ganVzdCBiZWNhdXNlIG9mIHRoaXMgb25lIDstKSAqLworI2RlZmluZSBJUk5BTVNJWiAxNiAKKworLyogSXJEQSBxdWFsaXR5IG9mIHNlcnZpY2UgaW5mb3JtYXRpb24gKG11c3Qgbm90IGV4Y2VlZCAxNiBieXRlcykgKi8KK3N0cnVjdCBpZl9pcmRhX3FvcyB7CisJdW5zaWduZWQgbG9uZyAgYmF1ZHJhdGU7CisJdW5zaWduZWQgc2hvcnQgZGF0YV9zaXplOworCXVuc2lnbmVkIHNob3J0IHdpbmRvd19zaXplOworCXVuc2lnbmVkIHNob3J0IG1pbl90dXJuX3RpbWU7CisJdW5zaWduZWQgc2hvcnQgbWF4X3R1cm5fdGltZTsKKwl1bnNpZ25lZCBjaGFyICBhZGRfYm9mczsKKwl1bnNpZ25lZCBjaGFyICBsaW5rX2Rpc2M7Cit9OworCisvKiBGb3Igc2V0dGluZyBSVFMgYW5kIERUUiBsaW5lcyBvZiBhIGRvbmdsZSAqLworc3RydWN0IGlmX2lyZGFfbGluZSB7CisJX191OCBkdHI7CisJX191OCBydHM7Cit9OworCisvKiBJckRBIGludGVyZmFjZSBjb25maWd1cmF0aW9uIChkYXRhIHBhcnQgbXVzdCBub3QgZXhjZWVkIDE2IGJ5dGVzKSAqLworc3RydWN0IGlmX2lyZGFfcmVxIHsKKwl1bmlvbiB7CisJCWNoYXIgaWZybl9uYW1lW0lSTkFNU0laXTsgIC8qIGlmIG5hbWUsIGUuZy4gImlyZGEwIiAqLworCX0gaWZyX2lmcm47CisJCisJLyogRGF0YSBwYXJ0ICovCisJdW5pb24geworCQlzdHJ1Y3QgaWZfaXJkYV9saW5lIGlmcnVfbGluZTsKKwkJc3RydWN0IGlmX2lyZGFfcW9zICBpZnJ1X3FvczsKKwkJdW5zaWduZWQgc2hvcnQgICAgICBpZnJ1X2ZsYWdzOworCQl1bnNpZ25lZCBpbnQgICAgICAgIGlmcnVfcmVjZWl2aW5nOworCQl1bnNpZ25lZCBpbnQgICAgICAgIGlmcnVfbW9kZTsKKwkJdW5zaWduZWQgaW50ICAgICAgICBpZnJ1X2RvbmdsZTsKKwl9IGlmcl9pZnJ1OworfTsKKworI2RlZmluZSBpZnJfYmF1ZHJhdGUgIGlmcl9pZnJ1LmlmcnVfcW9zLmJhdWRyYXRlCisjZGVmaW5lIGlmcl9yZWNlaXZpbmcgaWZyX2lmcnUuaWZydV9yZWNlaXZpbmcgCisjZGVmaW5lIGlmcl9kb25nbGUgICAgaWZyX2lmcnUuaWZydV9kb25nbGUKKyNkZWZpbmUgaWZyX21vZGUgICAgICBpZnJfaWZydS5pZnJ1X21vZGUKKyNkZWZpbmUgaWZyX2R0ciAgICAgICBpZnJfaWZydS5pZnJ1X2xpbmUuZHRyCisjZGVmaW5lIGlmcl9ydHMgICAgICAgaWZyX2lmcnUuaWZydV9saW5lLnJ0cworCisjZW5kaWYgLyogS0VSTkVMX0lSREFfSCAqLworCisKKworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lycS5oIGIvaW5jbHVkZS9saW51eC9pcnEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2ZmNGQxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9pcnEuaApAQCAtMCwwICsxLDk3IEBACisjaWZuZGVmIF9faXJxX2gKKyNkZWZpbmUgX19pcnFfaAorCisvKgorICogUGxlYXNlIGRvIG5vdCBpbmNsdWRlIHRoaXMgZmlsZSBpbiBnZW5lcmljIGNvZGUuICBUaGVyZSBpcyBjdXJyZW50bHkKKyAqIG5vIHJlcXVpcmVtZW50IGZvciBhbnkgYXJjaGl0ZWN0dXJlIHRvIGltcGxlbWVudCBhbnl0aGluZyBoZWxkCisgKiB3aXRoaW4gdGhpcyBmaWxlLgorICoKKyAqIFRoYW5rcy4gLS1ybWsKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpZiAhZGVmaW5lZChDT05GSUdfQVJDSF9TMzkwKQorCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CisKKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorCisvKgorICogSVJRIGxpbmUgc3RhdHVzLgorICovCisjZGVmaW5lIElSUV9JTlBST0dSRVNTCTEJLyogSVJRIGhhbmRsZXIgYWN0aXZlIC0gZG8gbm90IGVudGVyISAqLworI2RlZmluZSBJUlFfRElTQUJMRUQJMgkvKiBJUlEgZGlzYWJsZWQgLSBkbyBub3QgZW50ZXIhICovCisjZGVmaW5lIElSUV9QRU5ESU5HCTQJLyogSVJRIHBlbmRpbmcgLSByZXBsYXkgb24gZW5hYmxlICovCisjZGVmaW5lIElSUV9SRVBMQVkJOAkvKiBJUlEgaGFzIGJlZW4gcmVwbGF5ZWQgYnV0IG5vdCBhY2tlZCB5ZXQgKi8KKyNkZWZpbmUgSVJRX0FVVE9ERVRFQ1QJMTYJLyogSVJRIGlzIGJlaW5nIGF1dG9kZXRlY3RlZCAqLworI2RlZmluZSBJUlFfV0FJVElORwkzMgkvKiBJUlEgbm90IHlldCBzZWVuIC0gZm9yIGF1dG9kZXRlY3Rpb24gKi8KKyNkZWZpbmUgSVJRX0xFVkVMCTY0CS8qIElSUSBsZXZlbCB0cmlnZ2VyZWQgKi8KKyNkZWZpbmUgSVJRX01BU0tFRAkxMjgJLyogSVJRIG1hc2tlZCAtIHNob3VsZG4ndCBiZSBzZWVuIGFnYWluICovCisjZGVmaW5lIElSUV9QRVJfQ1BVCTI1NgkvKiBJUlEgaXMgcGVyIENQVSAqLworCisvKgorICogSW50ZXJydXB0IGNvbnRyb2xsZXIgZGVzY3JpcHRvci4gVGhpcyBpcyBhbGwgd2UgbmVlZAorICogdG8gZGVzY3JpYmUgYWJvdXQgdGhlIGxvdy1sZXZlbCBoYXJkd2FyZS4gCisgKi8KK3N0cnVjdCBod19pbnRlcnJ1cHRfdHlwZSB7CisJY29uc3QgY2hhciAqIHR5cGVuYW1lOworCXVuc2lnbmVkIGludCAoKnN0YXJ0dXApKHVuc2lnbmVkIGludCBpcnEpOworCXZvaWQgKCpzaHV0ZG93bikodW5zaWduZWQgaW50IGlycSk7CisJdm9pZCAoKmVuYWJsZSkodW5zaWduZWQgaW50IGlycSk7CisJdm9pZCAoKmRpc2FibGUpKHVuc2lnbmVkIGludCBpcnEpOworCXZvaWQgKCphY2spKHVuc2lnbmVkIGludCBpcnEpOworCXZvaWQgKCplbmQpKHVuc2lnbmVkIGludCBpcnEpOworCXZvaWQgKCpzZXRfYWZmaW5pdHkpKHVuc2lnbmVkIGludCBpcnEsIGNwdW1hc2tfdCBkZXN0KTsKK307CisKK3R5cGVkZWYgc3RydWN0IGh3X2ludGVycnVwdF90eXBlICBod19pcnFfY29udHJvbGxlcjsKKworLyoKKyAqIFRoaXMgaXMgdGhlICJJUlEgZGVzY3JpcHRvciIsIHdoaWNoIGNvbnRhaW5zIHZhcmlvdXMgaW5mb3JtYXRpb24KKyAqIGFib3V0IHRoZSBpcnEsIGluY2x1ZGluZyB3aGF0IGtpbmQgb2YgaGFyZHdhcmUgaGFuZGxpbmcgaXQgaGFzLAorICogd2hldGhlciBpdCBpcyBkaXNhYmxlZCBldGMgZXRjLgorICoKKyAqIFBhZCB0aGlzIG91dCB0byAzMiBieXRlcyBmb3IgY2FjaGUgYW5kIGluZGV4aW5nIHJlYXNvbnMuCisgKi8KK3R5cGVkZWYgc3RydWN0IGlycV9kZXNjIHsKKwlod19pcnFfY29udHJvbGxlciAqaGFuZGxlcjsKKwl2b2lkICpoYW5kbGVyX2RhdGE7CisJc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uOwkvKiBJUlEgYWN0aW9uIGxpc3QgKi8KKwl1bnNpZ25lZCBpbnQgc3RhdHVzOwkJLyogSVJRIHN0YXR1cyAqLworCXVuc2lnbmVkIGludCBkZXB0aDsJCS8qIG5lc3RlZCBpcnEgZGlzYWJsZXMgKi8KKwl1bnNpZ25lZCBpbnQgaXJxX2NvdW50OwkJLyogRm9yIGRldGVjdGluZyBicm9rZW4gaW50ZXJydXB0cyAqLworCXVuc2lnbmVkIGludCBpcnFzX3VuaGFuZGxlZDsKKwlzcGlubG9ja190IGxvY2s7Cit9IF9fX19jYWNoZWxpbmVfYWxpZ25lZCBpcnFfZGVzY190OworCitleHRlcm4gaXJxX2Rlc2NfdCBpcnFfZGVzYyBbTlJfSVJRU107CisKKyNpbmNsdWRlIDxhc20vaHdfaXJxLmg+IC8qIHRoZSBhcmNoIGRlcGVuZGVudCBzdHVmZiAqLworCitleHRlcm4gaW50IHNldHVwX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxYWN0aW9uICogbmV3KTsKKworI2lmZGVmIENPTkZJR19HRU5FUklDX0hBUkRJUlFTCitleHRlcm4gY3B1bWFza190IGlycV9hZmZpbml0eVtOUl9JUlFTXTsKK2V4dGVybiBpbnQgbm9faXJxX2FmZmluaXR5OworZXh0ZXJuIGludCBub2lycWRlYnVnX3NldHVwKGNoYXIgKnN0cik7CisKK2V4dGVybiBmYXN0Y2FsbCBpbnQgaGFuZGxlX0lSUV9ldmVudCh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwkJCQkgICAgICAgc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uKTsKK2V4dGVybiBmYXN0Y2FsbCB1bnNpZ25lZCBpbnQgX19kb19JUlEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworZXh0ZXJuIHZvaWQgbm90ZV9pbnRlcnJ1cHQodW5zaWduZWQgaW50IGlycSwgaXJxX2Rlc2NfdCAqZGVzYywgaW50IGFjdGlvbl9yZXQpOworZXh0ZXJuIHZvaWQgcmVwb3J0X2JhZF9pcnEodW5zaWduZWQgaW50IGlycSwgaXJxX2Rlc2NfdCAqZGVzYywgaW50IGFjdGlvbl9yZXQpOworZXh0ZXJuIGludCBjYW5fcmVxdWVzdF9pcnEodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgbG9uZyBpcnFmbGFncyk7CisKK2V4dGVybiB2b2lkIGluaXRfaXJxX3Byb2Modm9pZCk7CisjZW5kaWYKKworZXh0ZXJuIGh3X2lycV9jb250cm9sbGVyIG5vX2lycV90eXBlOyAgLyogbmVlZGVkIGluIGV2ZXJ5IGFyY2ggPyAqLworCisjZW5kaWYKKworI2VuZGlmIC8qIF9faXJxX2ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXJxX2NwdXN0YXQuaCBiL2luY2x1ZGUvbGludXgvaXJxX2NwdXN0YXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjkzNTA1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9pcnFfY3B1c3RhdC5oCkBAIC0wLDAgKzEsMzIgQEAKKyNpZm5kZWYgX19pcnFfY3B1c3RhdF9oCisjZGVmaW5lIF9faXJxX2NwdXN0YXRfaAorCisvKgorICogQ29udGFpbnMgZGVmYXVsdCBtYXBwaW5ncyBmb3IgaXJxX2NwdXN0YXRfdCwgdXNlZCBieSBhbG1vc3QgZXZlcnkKKyAqIGFyY2hpdGVjdHVyZS4gIFNvbWUgYXJjaCAobGlrZSBzMzkwKSBoYXZlIHBlciBjcHUgaGFyZHdhcmUgcGFnZXMgYW5kCisgKiB0aGV5IGRlZmluZSB0aGVpciBvd24gbWFwcGluZ3MgZm9yIGlycV9zdGF0LgorICoKKyAqIEtlaXRoIE93ZW5zIDxrYW9zQG9jcy5jb20uYXU+IEp1bHkgMjAwMC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKy8qCisgKiBTaW1wbGUgd3JhcHBlcnMgcmVkdWNpbmcgc291cmNlIGJsb2F0LiAgRGVmaW5lIGFsbCBpcnFfc3RhdCBmaWVsZHMKKyAqIGhlcmUsIGV2ZW4gb25lcyB0aGF0IGFyZSBhcmNoIGRlcGVuZGVudC4gIFRoYXQgd2F5IHdlIGdldCBjb21tb24KKyAqIGRlZmluaXRpb25zIGluc3RlYWQgb2YgZGlmZmVyaW5nIHNldHMgZm9yIGVhY2ggYXJjaC4KKyAqLworCisjaWZuZGVmIF9fQVJDSF9JUlFfU1RBVAorZXh0ZXJuIGlycV9jcHVzdGF0X3QgaXJxX3N0YXRbXTsJCS8qIGRlZmluZWQgaW4gYXNtL2hhcmRpcnEuaCAqLworI2RlZmluZSBfX0lSUV9TVEFUKGNwdSwgbWVtYmVyKQkoaXJxX3N0YXRbY3B1XS5tZW1iZXIpCisjZW5kaWYKKworICAvKiBhcmNoIGluZGVwZW5kZW50IGlycV9zdGF0IGZpZWxkcyAqLworI2RlZmluZSBsb2NhbF9zb2Z0aXJxX3BlbmRpbmcoKSBcCisJX19JUlFfU1RBVChzbXBfcHJvY2Vzc29yX2lkKCksIF9fc29mdGlycV9wZW5kaW5nKQorCisgIC8qIGFyY2ggZGVwZW5kZW50IGlycV9zdGF0IGZpZWxkcyAqLworI2RlZmluZSBubWlfY291bnQoY3B1KQkJX19JUlFfU1RBVCgoY3B1KSwgX19ubWlfY291bnQpCS8qIGkzODYgKi8KKworI2VuZGlmCS8qIF9faXJxX2NwdXN0YXRfaCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pc2FwbnAuaCBiL2luY2x1ZGUvbGludXgvaXNhcG5wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZjNjRjMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvaXNhcG5wLmgKQEAgLTAsMCArMSwxNDIgQEAKKy8qCisgKiAgSVNBIFBsdWcgJiBQbGF5IHN1cHBvcnQKKyAqICBDb3B5cmlnaHQgKGMpIGJ5IEphcm9zbGF2IEt5c2VsYSA8cGVyZXhAc3VzZS5jej4KKyAqCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIExJTlVYX0lTQVBOUF9ICisjZGVmaW5lIExJTlVYX0lTQVBOUF9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3BucC5oPgorCisvKgorICogIENvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzIChUT0RPOiBjaGFuZ2UgYnkgc3BlY2lmaWNhdGlvbikKKyAqLyAKKworI2RlZmluZSBJU0FQTlBfQ0ZHX0FDVElWQVRFCQkweDMwCS8qIGJ5dGUgKi8KKyNkZWZpbmUgSVNBUE5QX0NGR19NRU0JCQkweDQwCS8qIDQgKiBkd29yZCAqLworI2RlZmluZSBJU0FQTlBfQ0ZHX1BPUlQJCQkweDYwCS8qIDggKiB3b3JkICovCisjZGVmaW5lIElTQVBOUF9DRkdfSVJRCQkJMHg3MAkvKiAyICogd29yZCAqLworI2RlZmluZSBJU0FQTlBfQ0ZHX0RNQQkJCTB4NzQJLyogMiAqIGJ5dGUgKi8KKworLyoKKyAqCisgKi8KKworI2RlZmluZSBJU0FQTlBfVkVORE9SKGEsYixjKQkoKCgoKGEpLSdBJysxKSYweDNmKTw8Mil8XAorCQkJCSgoKChiKS0nQScrMSkmMHgxOCk+PjMpfCgoKChiKS0nQScrMSkmNyk8PDEzKXxcCisJCQkJKCgoKGMpLSdBJysxKSYweDFmKTw8OCkpCisjZGVmaW5lIElTQVBOUF9ERVZJQ0UoeCkJKCgoKHgpJjB4ZjAwMCk+PjgpfFwKKwkJCQkgKCgoeCkmMHgwZjAwKT4+OCl8XAorCQkJCSAoKCh4KSYweDAwZjApPDw4KXxcCisJCQkJICgoKHgpJjB4MDAwZik8PDgpKQorI2RlZmluZSBJU0FQTlBfRlVOQ1RJT04oeCkJSVNBUE5QX0RFVklDRSh4KQorCisvKgorICoKKyAqLworCisjaWZkZWYgX19LRVJORUxfXworCisjZGVmaW5lIERFVklDRV9DT1VOVF9DT01QQVRJQkxFIDQKKworI2RlZmluZSBJU0FQTlBfQU5ZX0lECQkweGZmZmYKKyNkZWZpbmUgSVNBUE5QX0NBUkRfREVWUwk4CisKKyNkZWZpbmUgSVNBUE5QX0NBUkRfSUQoX3ZhLCBfdmIsIF92YywgX2RldmljZSkgXAorCQkuY2FyZF92ZW5kb3IgPSBJU0FQTlBfVkVORE9SKF92YSwgX3ZiLCBfdmMpLCAuY2FyZF9kZXZpY2UgPSBJU0FQTlBfREVWSUNFKF9kZXZpY2UpCisjZGVmaW5lIElTQVBOUF9DQVJEX0VORCBcCisJCS5jYXJkX3ZlbmRvciA9IDAsIC5jYXJkX2RldmljZSA9IDAKKyNkZWZpbmUgSVNBUE5QX0RFVklDRV9JRChfdmEsIF92YiwgX3ZjLCBfZnVuY3Rpb24pIFwKKwkJeyAudmVuZG9yID0gSVNBUE5QX1ZFTkRPUihfdmEsIF92YiwgX3ZjKSwgLmZ1bmN0aW9uID0gSVNBUE5QX0ZVTkNUSU9OKF9mdW5jdGlvbikgfQorCisvKiBleHBvcnQgdXNlZCBJRHMgb3V0c2lkZSBtb2R1bGUgKi8KKyNkZWZpbmUgSVNBUE5QX0NBUkRfVEFCTEUobmFtZSkgXAorCQlNT0RVTEVfR0VORVJJQ19UQUJMRShpc2FwbnBfY2FyZCwgbmFtZSkKKworc3RydWN0IGlzYXBucF9jYXJkX2lkIHsKKwl1bnNpZ25lZCBsb25nIGRyaXZlcl9kYXRhOwkvKiBkYXRhIHByaXZhdGUgdG8gdGhlIGRyaXZlciAqLworCXVuc2lnbmVkIHNob3J0IGNhcmRfdmVuZG9yLCBjYXJkX2RldmljZTsKKwlzdHJ1Y3QgeworCQl1bnNpZ25lZCBzaG9ydCB2ZW5kb3IsIGZ1bmN0aW9uOworCX0gZGV2c1tJU0FQTlBfQ0FSRF9ERVZTXTsJLyogbG9naWNhbCBkZXZpY2VzICovCit9OworCisjZGVmaW5lIElTQVBOUF9ERVZJQ0VfU0lOR0xFKF9jdmEsIF9jdmIsIF9jdmMsIF9jZGV2aWNlLCBfZHZhLCBfZHZiLCBfZHZjLCBfZGZ1bmN0aW9uKSBcCisJCS5jYXJkX3ZlbmRvciA9IElTQVBOUF9WRU5ET1IoX2N2YSwgX2N2YiwgX2N2YyksIC5jYXJkX2RldmljZSA9ICBJU0FQTlBfREVWSUNFKF9jZGV2aWNlKSwgXAorCQkudmVuZG9yID0gSVNBUE5QX1ZFTkRPUihfZHZhLCBfZHZiLCBfZHZjKSwgLmZ1bmN0aW9uID0gSVNBUE5QX0ZVTkNUSU9OKF9kZnVuY3Rpb24pCisjZGVmaW5lIElTQVBOUF9ERVZJQ0VfU0lOR0xFX0VORCBcCisJCS5jYXJkX3ZlbmRvciA9IDAsIC5jYXJkX2RldmljZSA9IDAKKworc3RydWN0IGlzYXBucF9kZXZpY2VfaWQgeworCXVuc2lnbmVkIHNob3J0IGNhcmRfdmVuZG9yLCBjYXJkX2RldmljZTsKKwl1bnNpZ25lZCBzaG9ydCB2ZW5kb3IsIGZ1bmN0aW9uOworCXVuc2lnbmVkIGxvbmcgZHJpdmVyX2RhdGE7CS8qIGRhdGEgcHJpdmF0ZSB0byB0aGUgZHJpdmVyICovCit9OworCisjaWYgZGVmaW5lZChDT05GSUdfSVNBUE5QKSB8fCAoZGVmaW5lZChDT05GSUdfSVNBUE5QX01PRFVMRSkgJiYgZGVmaW5lZChNT0RVTEUpKQorCisjZGVmaW5lIF9fSVNBUE5QX18KKworLyogbG93bGV2ZWwgY29uZmlndXJhdGlvbiAqLworaW50IGlzYXBucF9wcmVzZW50KHZvaWQpOworaW50IGlzYXBucF9jZmdfYmVnaW4oaW50IGNzbiwgaW50IGRldmljZSk7CitpbnQgaXNhcG5wX2NmZ19lbmQodm9pZCk7Cit1bnNpZ25lZCBjaGFyIGlzYXBucF9yZWFkX2J5dGUodW5zaWduZWQgY2hhciBpZHgpOwordm9pZCBpc2FwbnBfd3JpdGVfYnl0ZSh1bnNpZ25lZCBjaGFyIGlkeCwgdW5zaWduZWQgY2hhciB2YWwpOworCisjaWZkZWYgQ09ORklHX1BST0NfRlMKK2ludCBpc2FwbnBfcHJvY19pbml0KHZvaWQpOworaW50IGlzYXBucF9wcm9jX2RvbmUodm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgaXNhcG5wX3Byb2NfaW5pdCh2b2lkKSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIGludCBpc2FwbnBfcHJvY19kb25lKHZvaWQpIHsgcmV0dXJuIDA7IH0KKyNlbmRpZgorCisvKiBjb21wYXQgKi8KK3N0cnVjdCBwbnBfY2FyZCAqcG5wX2ZpbmRfY2FyZCh1bnNpZ25lZCBzaG9ydCB2ZW5kb3IsCisJCQkgICAgICAgdW5zaWduZWQgc2hvcnQgZGV2aWNlLAorCQkJICAgICAgIHN0cnVjdCBwbnBfY2FyZCAqZnJvbSk7CitzdHJ1Y3QgcG5wX2RldiAqcG5wX2ZpbmRfZGV2KHN0cnVjdCBwbnBfY2FyZCAqY2FyZCwKKwkJCSAgICAgdW5zaWduZWQgc2hvcnQgdmVuZG9yLAorCQkJICAgICB1bnNpZ25lZCBzaG9ydCBmdW5jdGlvbiwKKwkJCSAgICAgc3RydWN0IHBucF9kZXYgKmZyb20pOworCisjZWxzZSAvKiAhQ09ORklHX0lTQVBOUCAqLworCisvKiBsb3dsZXZlbCBjb25maWd1cmF0aW9uICovCitzdGF0aWMgaW5saW5lIGludCBpc2FwbnBfcHJlc2VudCh2b2lkKSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIGludCBpc2FwbnBfY2ZnX2JlZ2luKGludCBjc24sIGludCBkZXZpY2UpIHsgcmV0dXJuIC1FTk9ERVY7IH0KK3N0YXRpYyBpbmxpbmUgaW50IGlzYXBucF9jZmdfZW5kKHZvaWQpIHsgcmV0dXJuIC1FTk9ERVY7IH0KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciBpc2FwbnBfcmVhZF9ieXRlKHVuc2lnbmVkIGNoYXIgaWR4KSB7IHJldHVybiAweGZmOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgaXNhcG5wX3dyaXRlX2J5dGUodW5zaWduZWQgY2hhciBpZHgsIHVuc2lnbmVkIGNoYXIgdmFsKSB7IDsgfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwbnBfY2FyZCAqcG5wX2ZpbmRfY2FyZCh1bnNpZ25lZCBzaG9ydCB2ZW5kb3IsCisJCQkJCSAgICAgdW5zaWduZWQgc2hvcnQgZGV2aWNlLAorCQkJCQkgICAgIHN0cnVjdCBwbnBfY2FyZCAqZnJvbSkgeyByZXR1cm4gTlVMTDsgfQorc3RhdGljIGlubGluZSBzdHJ1Y3QgcG5wX2RldiAqcG5wX2ZpbmRfZGV2KHN0cnVjdCBwbnBfY2FyZCAqY2FyZCwKKwkJCQkJICAgdW5zaWduZWQgc2hvcnQgdmVuZG9yLAorCQkJCQkgICB1bnNpZ25lZCBzaG9ydCBmdW5jdGlvbiwKKwkJCQkJICAgc3RydWN0IHBucF9kZXYgKmZyb20pIHsgcmV0dXJuIE5VTEw7IH0KKworI2VuZGlmIC8qIENPTkZJR19JU0FQTlAgKi8KKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAvKiBMSU5VWF9JU0FQTlBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pc2RuLmggYi9pbmNsdWRlL2xpbnV4L2lzZG4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjIwODNlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9pc2RuLmgKQEAgLTAsMCArMSw2MzggQEAKKy8qICRJZDogaXNkbi5oLHYgMS4xMjUuMi4zIDIwMDQvMDIvMTAgMDE6MDc6MTQga2VpbCBFeHAgJAorICoKKyAqIE1haW4gaGVhZGVyIGZvciB0aGUgTGludXggSVNETiBzdWJzeXN0ZW0gKGxpbmtsZXZlbCkuCisgKgorICogQ29weXJpZ2h0IDE5OTQsOTUsOTYgYnkgRnJpdHogRWxmZXJ0IChmcml0ekBpc2RuNGxpbnV4LmRlKQorICogQ29weXJpZ2h0IDE5OTUsOTYgICAgYnkgVGhpbmtpbmcgT2JqZWN0cyBTb2Z0d2FyZSBHbWJIIFd1ZXJ6YnVyZworICogQ29weXJpZ2h0IDE5OTUsOTYgICAgYnkgTWljaGFlbCBIaXBwIChNaWNoYWVsLkhpcHBAc3R1ZGVudC51bmktdHVlYmluZ2VuLmRlKQorICogCisgKiBUaGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHRlcm1zCisgKiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgorICoKKyAqLworCisjaWZuZGVmIF9fSVNETl9IX18KKyNkZWZpbmUgX19JU0ROX0hfXworCisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKworI2lmZGVmIENPTkZJR19DT0JBTFRfTUlDUk9fU0VSVkVSCisvKiBTYXZlIG1lbW9yeSAqLworI2RlZmluZSBJU0ROX01BWF9EUklWRVJTICAgIDIKKyNkZWZpbmUgSVNETl9NQVhfQ0hBTk5FTFMgICA4CisjZWxzZQorI2RlZmluZSBJU0ROX01BWF9EUklWRVJTICAgIDMyCisjZGVmaW5lIElTRE5fTUFYX0NIQU5ORUxTICAgNjQKKyNlbmRpZgorCisvKiBOZXcgaW9jdGwtY29kZXMgKi8KKyNkZWZpbmUgSUlPQ05FVEFJRiAgX0lPKCdJJywxKQorI2RlZmluZSBJSU9DTkVURElGICBfSU8oJ0knLDIpCisjZGVmaW5lIElJT0NORVRTQ0YgIF9JTygnSScsMykKKyNkZWZpbmUgSUlPQ05FVEdDRiAgX0lPKCdJJyw0KQorI2RlZmluZSBJSU9DTkVUQU5NICBfSU8oJ0knLDUpCisjZGVmaW5lIElJT0NORVRETk0gIF9JTygnSScsNikKKyNkZWZpbmUgSUlPQ05FVEdOTSAgX0lPKCdJJyw3KQorI2RlZmluZSBJSU9DR0VUU0VUICBfSU8oJ0knLDgpIC8qIG5vIGxvbmdlciBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUgSUlPQ1NFVFNFVCAgX0lPKCdJJyw5KSAvKiBubyBsb25nZXIgc3VwcG9ydGVkICovCisjZGVmaW5lIElJT0NTRVRWRVIgIF9JTygnSScsMTApCisjZGVmaW5lIElJT0NORVRIVVAgIF9JTygnSScsMTEpCisjZGVmaW5lIElJT0NTRVRHU1QgIF9JTygnSScsMTIpCisjZGVmaW5lIElJT0NTRVRCUkogIF9JTygnSScsMTMpCisjZGVmaW5lIElJT0NTSUdQUkYgIF9JTygnSScsMTQpCisjZGVmaW5lIElJT0NHRVRQUkYgIF9JTygnSScsMTUpCisjZGVmaW5lIElJT0NTRVRQUkYgIF9JTygnSScsMTYpCisjZGVmaW5lIElJT0NHRVRNQVAgIF9JTygnSScsMTcpCisjZGVmaW5lIElJT0NTRVRNQVAgIF9JTygnSScsMTgpCisjZGVmaW5lIElJT0NORVRBU0wgIF9JTygnSScsMTkpCisjZGVmaW5lIElJT0NORVRESUwgIF9JTygnSScsMjApCisjZGVmaW5lIElJT0NHRVRDUFMgIF9JTygnSScsMjEpCisjZGVmaW5lIElJT0NHRVREVlIgIF9JTygnSScsMjIpCisjZGVmaW5lIElJT0NORVRMQ1IgIF9JTygnSScsMjMpIC8qIGR3YWJjIGlvY3RsIGZvciBMQ1IgZnJvbSBpc2RubG9nICovCisjZGVmaW5lIElJT0NORVREV1JTRVQgIF9JTygnSScsMjQpIC8qIGR3YWJjIGlvY3RsIHRvIHJlc2V0IGFiYy12YWx1ZXMgdG8gZGVmYXVsdCBvbiBhIG5ldC1pbnRlcmZhY2UgKi8KKworI2RlZmluZSBJSU9DTkVUQUxOICBfSU8oJ0knLDMyKQorI2RlZmluZSBJSU9DTkVURExOICBfSU8oJ0knLDMzKQorCisjZGVmaW5lIElJT0NORVRHUE4gIF9JTygnSScsMzQpCisKKyNkZWZpbmUgSUlPQ0RCR1ZBUiAgX0lPKCdJJywxMjcpCisKKyNkZWZpbmUgSUlPQ0RSVkNUTCAgX0lPKCdJJywxMjgpCisKKy8qIGNpc2NvIGhkbGNrIGRldmljZSBwcml2YXRlIGlvY3RscyAqLworI2RlZmluZSBTSU9DR0tFRVBQRVJJT0QJKFNJT0NERVZQUklWQVRFICsgMCkKKyNkZWZpbmUgU0lPQ1NLRUVQUEVSSU9ECShTSU9DREVWUFJJVkFURSArIDEpCisjZGVmaW5lIFNJT0NHREVCU0VSSU5UCShTSU9DREVWUFJJVkFURSArIDIpCisjZGVmaW5lIFNJT0NTREVCU0VSSU5UCShTSU9DREVWUFJJVkFURSArIDMpCisKKy8qIFBhY2tldCBlbmNhcHN1bGF0aW9ucyBmb3IgbmV0LWludGVyZmFjZXMgKi8KKyNkZWZpbmUgSVNETl9ORVRfRU5DQVBfRVRIRVIgICAgICAwCisjZGVmaW5lIElTRE5fTkVUX0VOQ0FQX1JBV0lQICAgICAgMQorI2RlZmluZSBJU0ROX05FVF9FTkNBUF9JUFRZUCAgICAgIDIKKyNkZWZpbmUgSVNETl9ORVRfRU5DQVBfQ0lTQ09IRExDICAzIC8qIFdpdGhvdXQgU0xBUlAgYW5kIGtlZXBhbGl2ZSAqLworI2RlZmluZSBJU0ROX05FVF9FTkNBUF9TWU5DUFBQICAgIDQKKyNkZWZpbmUgSVNETl9ORVRfRU5DQVBfVUlIRExDICAgICA1CisjZGVmaW5lIElTRE5fTkVUX0VOQ0FQX0NJU0NPSERMQ0sgNiAvKiBXaXRoIFNMQVJQIGFuZCBrZWVwYWxpdmUgICAgKi8KKyNkZWZpbmUgSVNETl9ORVRfRU5DQVBfWDI1SUZBQ0UgICA3IC8qIERvY3VtZW50YXRpb24vbmV0d29ya2luZy94MjUtaWZhY2UudHh0Ki8KKyNkZWZpbmUgSVNETl9ORVRfRU5DQVBfTUFYX0VOQ0FQICBJU0ROX05FVF9FTkNBUF9YMjVJRkFDRQorCisvKiBGYWNpbGl0eSB3aGljaCBjdXJyZW50bHkgdXNlcyBhbiBJU0ROLWNoYW5uZWwgKi8KKyNkZWZpbmUgSVNETl9VU0FHRV9OT05FICAgICAgIDAKKyNkZWZpbmUgSVNETl9VU0FHRV9SQVcgICAgICAgIDEKKyNkZWZpbmUgSVNETl9VU0FHRV9NT0RFTSAgICAgIDIKKyNkZWZpbmUgSVNETl9VU0FHRV9ORVQgICAgICAgIDMKKyNkZWZpbmUgSVNETl9VU0FHRV9WT0lDRSAgICAgIDQKKyNkZWZpbmUgSVNETl9VU0FHRV9GQVggICAgICAgIDUKKyNkZWZpbmUgSVNETl9VU0FHRV9NQVNLICAgICAgIDcgLyogTWFzayB0byBnZXQgcGxhaW4gdXNhZ2UgKi8KKyNkZWZpbmUgSVNETl9VU0FHRV9ESVNBQkxFRCAgMzIgLyogVGhpcyBiaXQgaXMgc2V0LCBpZiBjaGFubmVsIGlzIGRpc2FibGVkICovCisjZGVmaW5lIElTRE5fVVNBR0VfRVhDTFVTSVZFIDY0IC8qIFRoaXMgYml0IGlzIHNldCwgaWYgY2hhbm5lbCBpcyBleGNsdXNpdmUgKi8KKyNkZWZpbmUgSVNETl9VU0FHRV9PVVRHT0lORyAxMjggLyogVGhpcyBiaXQgaXMgc2V0LCBpZiBjaGFubmVsIGlzIG91dGdvaW5nICAqLworCisjZGVmaW5lIElTRE5fTU9ERU1fTlVNUkVHICAgIDI0ICAgICAgICAvKiBOdW1iZXIgb2YgTW9kZW0tUmVnaXN0ZXJzICAgICAgICAqLworI2RlZmluZSBJU0ROX0xNU05MRU4gICAgICAgICAyNTUgLyogTGVuZ3RoIG9mIHR0eSdzIExpc3Rlbi1NU04gc3RyaW5nICovCisjZGVmaW5lIElTRE5fQ01TR0xFTgkgICAgIDUwCSAvKiBMZW5ndGggb2YgQ09OTkVDVC1NZXNzYWdlIHRvIGFkZCBmb3IgTW9kZW0gKi8KKworI2RlZmluZSBJU0ROX01TTkxFTiAgICAgICAgICAzMgorI2RlZmluZSBORVRfRFYgMHgwNiAgLyogRGF0YSB2ZXJzaW9uIGZvciBpc2RuX25ldF9pb2N0bF9jZmcgICAqLworI2RlZmluZSBUVFlfRFYgMHgwNiAgLyogRGF0YSB2ZXJzaW9uIGZvciBpcHJvZmQgZXRjLiAgICAgICAgICAqLworCisjZGVmaW5lIElORl9EViAweDAxICAvKiBEYXRhIHZlcnNpb24gZm9yIC9kZXYvaXNkbmluZm8gICAgICAgICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgY2hhciBkcnZpZFsyNV07CisgIHVuc2lnbmVkIGxvbmcgYXJnOworfSBpc2RuX2lvY3RsX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBjaGFyIG5hbWVbMTBdOworICBjaGFyIHBob25lW0lTRE5fTVNOTEVOXTsKKyAgaW50ICBvdXRnb2luZzsKK30gaXNkbl9uZXRfaW9jdGxfcGhvbmU7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgY2hhciBuYW1lWzEwXTsgICAgIC8qIE5hbWUgb2YgaW50ZXJmYWNlICAgICAgICAgICAgICAgICAgICAgKi8KKyAgY2hhciBtYXN0ZXJbMTBdOyAgIC8qIE5hbWUgb2YgTWFzdGVyIGZvciBCdW5kbGluZyAgICAgICAgICAgKi8KKyAgY2hhciBzbGF2ZVsxMF07ICAgIC8qIE5hbWUgb2YgU2xhdmUgZm9yIEJ1bmRsaW5nICAgICAgICAgICAgKi8KKyAgY2hhciBlYXpbMjU2XTsgICAgIC8qIEVBWi9NU04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgY2hhciBkcnZpZFsyNV07ICAgIC8qIERyaXZlcklkIGZvciBCaW5kaW5ncyAgICAgICAgICAgICAgICAgKi8KKyAgaW50ICBvbmh0aW1lOyAgICAgIC8qIEhhbmd1cC1UaW1lb3V0ICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgaW50ICBjaGFyZ2U7ICAgICAgIC8qIENoYXJnZS1Vbml0cyAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgaW50ICBsMl9wcm90bzsgICAgIC8qIExheWVyLTIgcHJvdG9jb2wgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgaW50ICBsM19wcm90bzsgICAgIC8qIExheWVyLTMgcHJvdG9jb2wgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgaW50ICBwX2VuY2FwOyAgICAgIC8qIEVuY2Fwc3VsYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgaW50ICBleGNsdXNpdmU7ICAgIC8qIENoYW5uZWwsIGlmIGJvdW5kIGV4Y2x1c2l2ZSAgICAgICAgICAgKi8KKyAgaW50ICBkaWFsbWF4OyAgICAgIC8qIERpYWwgUmV0cnktQ291bnRlciAgICAgICAgICAgICAgICAgICAgKi8KKyAgaW50ICBzbGF2ZWRlbGF5OyAgIC8qIERlbGF5IHVudGlsIHNsYXZlIHN0YXJ0cyB1cCAgICAgICAgICAgKi8KKyAgaW50ICBjYmRlbGF5OyAgICAgIC8qIERlbGF5IGJlZm9yZSBDYWxsYmFjayAgICAgICAgICAgICAgICAgKi8KKyAgaW50ICBjaGFyZ2VodXA7ICAgIC8qIEZsYWc6IENoYXJnZS1IYW5ndXAgICAgICAgICAgICAgICAgICAgKi8KKyAgaW50ICBpaHVwOyAgICAgICAgIC8qIEZsYWc6IEhhbmd1cC1UaW1lb3V0IG9uIGluY29taW5nIGxpbmUgKi8KKyAgaW50ICBzZWN1cmU7ICAgICAgIC8qIEZsYWc6IFNlY3VyZSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgaW50ICBjYWxsYmFjazsgICAgIC8qIEZsYWc6IENhbGxiYWNrICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgaW50ICBjYmh1cDsgICAgICAgIC8qIEZsYWc6IFJlamVjdCBDYWxsIGJlZm9yZSBDYWxsYmFjayAgICAgKi8KKyAgaW50ICBwcHBiaW5kOyAgICAgIC8qIGlwcHAgZGV2aWNlIGZvciBiaW5kaW5ncyAgICAgICAgICAgICAgKi8KKyAgaW50ICBjaGFyZ2VpbnQ7ICAgIC8qIFVzZSBmaXhlZCBjaGFyZ2UgaW50ZXJ2YWwgbGVuZ3RoICAgICAgKi8KKyAgaW50ICB0cmlnZ2VyY3BzOyAgIC8qIEJvZ29DUFMgbmVlZGVkIGZvciB0cmlnZ2VyaW5nIHNsYXZlICAgKi8KKyAgaW50ICBkaWFsdGltZW91dDsgIC8qIERpYWwtVGltZW91dCAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgaW50ICBkaWFsd2FpdDsgICAgIC8qIFRpbWUgdG8gd2FpdCBhZnRlciBmYWlsZWQgZGlhbCAgICAgICAgKi8KKyAgaW50ICBkaWFsbW9kZTsgICAgIC8qIEZsYWc6IG9mZiAvIG9uIC8gYXV0byAgICAgICAgICAgICAgICAgKi8KK30gaXNkbl9uZXRfaW9jdGxfY2ZnOworCisjZGVmaW5lIElTRE5fTkVUX0RJQUxNT0RFX01BU0sgIDB4QzAgICAgLyogYml0cyBmb3Igc3RhdHVzICAgICAgICAgICAgICAgICovCisjZGVmaW5lIElTRE5fTkVUX0RNX09GRgkgICAgICAgIDB4MDAgICAgLyogdGhpcyBpbnRlcmZhY2UgaXMgc3RvcHBlZCAgICAgICovCisjZGVmaW5lIElTRE5fTkVUX0RNX01BTlVBTAkweDQwICAgIC8qIHRoaXMgaW50ZXJmYWNlIGlzIG9uIChtYW51YWwpICAqLworI2RlZmluZSBJU0ROX05FVF9ETV9BVVRPCTB4ODAgICAgLyogdGhpcyBpbnRlcmZhY2UgaXMgYXV0b2RpYWwgICAgICovCisjZGVmaW5lIElTRE5fTkVUX0RJQUxNT0RFKHgpICgoJih4KSktPmZsYWdzICYgSVNETl9ORVRfRElBTE1PREVfTUFTSykKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgorI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX3JlZy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZjbnRsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcC5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC90Y3AuaD4KKworI2RlZmluZSBJU0ROX1RUWV9NQUpPUiAgICA0MworI2RlZmluZSBJU0ROX1RUWUFVWF9NQUpPUiA0NAorI2RlZmluZSBJU0ROX01BSk9SICAgICAgICA0NQorCisvKiBUaGUgbWlub3ItZGV2aWNlbnVtYmVycyBmb3IgQ2hhbm5lbCAwIGFuZCAxIGFyZSB1c2VkIGFzIGFyZ3VtZW50cyBmb3IKKyAqIHBoeXNpY2FsIENoYW5uZWwtTWFwcGluZywgc28gdGhleSBNVVNUIE5PVCBiZSBjaGFuZ2VkIHdpdGhvdXQgY2hhbmdpbmcKKyAqIHRoZSBjb3JyZXNwb25kZW50IGNvZGUgaW4gaXNkbi5jCisgKi8KKworI2RlZmluZSBJU0ROX01JTk9SX0IgICAgICAgIDAKKyNkZWZpbmUgSVNETl9NSU5PUl9CTUFYICAgICAoSVNETl9NQVhfQ0hBTk5FTFMtMSkKKyNkZWZpbmUgSVNETl9NSU5PUl9DVFJMICAgICA2NAorI2RlZmluZSBJU0ROX01JTk9SX0NUUkxNQVggICg2NCArIChJU0ROX01BWF9DSEFOTkVMUy0xKSkKKyNkZWZpbmUgSVNETl9NSU5PUl9QUFAgICAgICAxMjgKKyNkZWZpbmUgSVNETl9NSU5PUl9QUFBNQVggICAoMTI4ICsgKElTRE5fTUFYX0NIQU5ORUxTLTEpKQorI2RlZmluZSBJU0ROX01JTk9SX1NUQVRVUyAgIDI1NQorCisjaWZkZWYgQ09ORklHX0lTRE5fUFBQCisKKyNpZmRlZiBDT05GSUdfSVNETl9QUFBfVkoKKyMgIGluY2x1ZGUgPG5ldC9zbGhjX3ZqLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGxpbnV4L3BwcF9kZWZzLmg+CisjaW5jbHVkZSA8bGludXgvaWZfcHBwLmg+CisKKyNpbmNsdWRlIDxsaW51eC9pc2RuX3BwcC5oPgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfSVNETl9YMjUKKyMgIGluY2x1ZGUgPGxpbnV4L2NvbmNhcC5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxsaW51eC9pc2RuaWYuaD4KKworI2RlZmluZSBJU0ROX0RSVklPQ1RMX01BU0sgICAgICAgMHg3ZiAgLyogTWFzayBmb3IgRGV2aWNlLWlvY3RsICovCisKKy8qIFVudGlsIG5vdyB1bnVzZWQgKi8KKyNkZWZpbmUgSVNETl9TRVJWSUNFX1ZPSUNFIDEKKyNkZWZpbmUgSVNETl9TRVJWSUNFX0FCICAgIDE8PDEgCisjZGVmaW5lIElTRE5fU0VSVklDRV9YMjEgICAxPDwyCisjZGVmaW5lIElTRE5fU0VSVklDRV9HNCAgICAxPDwzCisjZGVmaW5lIElTRE5fU0VSVklDRV9CVFggICAxPDw0CisjZGVmaW5lIElTRE5fU0VSVklDRV9ERlVFICAxPDw1CisjZGVmaW5lIElTRE5fU0VSVklDRV9YMjUgICAxPDw2CisjZGVmaW5lIElTRE5fU0VSVklDRV9UVFggICAxPDw3CisjZGVmaW5lIElTRE5fU0VSVklDRV9NSVhFRCAxPDw4CisjZGVmaW5lIElTRE5fU0VSVklDRV9GVyAgICAxPDw5CisjZGVmaW5lIElTRE5fU0VSVklDRV9HVEVMICAxPDwxMAorI2RlZmluZSBJU0ROX1NFUlZJQ0VfQlRYTiAgMTw8MTEKKyNkZWZpbmUgSVNETl9TRVJWSUNFX0JURUwgIDE8PDEyCisKKy8qIE1hY3JvcyBjaGVja2luZyBwbGFpbiB1c2FnZSAqLworI2RlZmluZSBVU0dfTk9ORSh4KSAgICAgICAgICgoeCAmIElTRE5fVVNBR0VfTUFTSyk9PUlTRE5fVVNBR0VfTk9ORSkKKyNkZWZpbmUgVVNHX1JBVyh4KSAgICAgICAgICAoKHggJiBJU0ROX1VTQUdFX01BU0spPT1JU0ROX1VTQUdFX1JBVykKKyNkZWZpbmUgVVNHX01PREVNKHgpICAgICAgICAoKHggJiBJU0ROX1VTQUdFX01BU0spPT1JU0ROX1VTQUdFX01PREVNKQorI2RlZmluZSBVU0dfVk9JQ0UoeCkgICAgICAgICgoeCAmIElTRE5fVVNBR0VfTUFTSyk9PUlTRE5fVVNBR0VfVk9JQ0UpCisjZGVmaW5lIFVTR19ORVQoeCkgICAgICAgICAgKCh4ICYgSVNETl9VU0FHRV9NQVNLKT09SVNETl9VU0FHRV9ORVQpCisjZGVmaW5lIFVTR19GQVgoeCkgICAgICAgICAgKCh4ICYgSVNETl9VU0FHRV9NQVNLKT09SVNETl9VU0FHRV9GQVgpCisjZGVmaW5lIFVTR19PVVRHT0lORyh4KSAgICAgKCh4ICYgSVNETl9VU0FHRV9PVVRHT0lORyk9PUlTRE5fVVNBR0VfT1VUR09JTkcpCisjZGVmaW5lIFVTR19NT0RFTU9SVk9JQ0UoeCkgKCgoeCAmIElTRE5fVVNBR0VfTUFTSyk9PUlTRE5fVVNBR0VfTU9ERU0pIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4ICYgSVNETl9VU0FHRV9NQVNLKT09SVNETl9VU0FHRV9WT0lDRSkgICAgICkKKworLyogVGltZXItZGVsYXlzIGFuZCBzY2hlZHVsaW5nLWZsYWdzICovCisjZGVmaW5lIElTRE5fVElNRVJfUkVTICAgICAgICAgNCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNYWluIFRpbWVyLVJlc29sdXRpb24gICAqLworI2RlZmluZSBJU0ROX1RJTUVSXzAyU0VDICAgICAgIChIWi9JU0ROX1RJTUVSX1JFUy81KSAgICAgLyogU2xvdy1UaW1lcjEgLjIgc2VjICAgICAgKi8KKyNkZWZpbmUgSVNETl9USU1FUl8xU0VDICAgICAgICAoSFovSVNETl9USU1FUl9SRVMpICAgICAgIC8qIFNsb3ctVGltZXIyIDEgc2VjICAgICAgICovCisjZGVmaW5lIElTRE5fVElNRVJfUklOR0lORyAgICAgNSAvKiB0dHkgUklOR3MgPSBJU0ROX1RJTUVSXzFTRUMgKiB0aGlzIGZhY3RvciAgICAgICAqLworI2RlZmluZSBJU0ROX1RJTUVSX0tFRVBJTlQgICAgMTAgLyogQ2lzY28tS2VlcGFsaXZlID0gSVNETl9USU1FUl8xU0VDICogdGhpcyBmYWN0b3IgKi8KKyNkZWZpbmUgSVNETl9USU1FUl9NT0RFTVJFQUQgICAxCisjZGVmaW5lIElTRE5fVElNRVJfTU9ERU1QTFVTICAgMgorI2RlZmluZSBJU0ROX1RJTUVSX01PREVNUklORyAgIDQKKyNkZWZpbmUgSVNETl9USU1FUl9NT0RFTVhNSVQgICA4CisjZGVmaW5lIElTRE5fVElNRVJfTkVURElBTCAgICAxNiAKKyNkZWZpbmUgSVNETl9USU1FUl9ORVRIQU5HVVAgIDMyCisjZGVmaW5lIElTRE5fVElNRVJfQ0FSUklFUiAgIDI1NiAvKiBXYWl0IGZvciBDYXJyaWVyICovCisjZGVmaW5lIElTRE5fVElNRVJfRkFTVCAgICAgIChJU0ROX1RJTUVSX01PREVNUkVBRCB8IElTRE5fVElNRVJfTU9ERU1QTFVTIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVNETl9USU1FUl9NT0RFTVhNSVQpCisjZGVmaW5lIElTRE5fVElNRVJfU0xPVyAgICAgIChJU0ROX1RJTUVSX01PREVNUklORyB8IElTRE5fVElNRVJfTkVUSEFOR1VQIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVNETl9USU1FUl9ORVRESUFMIHwgSVNETl9USU1FUl9DQVJSSUVSKQorCisvKiBUaW1lb3V0LVZhbHVlcyBmb3IgaXNkbl9uZXRfZGlhbCgpICovCisjZGVmaW5lIElTRE5fVElNRVJfRFRJTUVPVVQxMCAoMTAqSFovKElTRE5fVElNRVJfMDJTRUMqKElTRE5fVElNRVJfUkVTKzEpKSkKKyNkZWZpbmUgSVNETl9USU1FUl9EVElNRU9VVDE1ICgxNSpIWi8oSVNETl9USU1FUl8wMlNFQyooSVNETl9USU1FUl9SRVMrMSkpKQorI2RlZmluZSBJU0ROX1RJTUVSX0RUSU1FT1VUNjAgKDYwKkhaLyhJU0ROX1RJTUVSXzAyU0VDKihJU0ROX1RJTUVSX1JFUysxKSkpCisKKy8qIEdMT0JBTF9GTEFHUyAqLworI2RlZmluZSBJU0ROX0dMT0JBTF9TVE9QUEVEIDEKKworLyo9PT09PT09PT09PT09PT09PT09IFN0YXJ0IG9mIGlwLW92ZXItSVNETiBzdHVmZiA9PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworLyogRmVhdHVyZS0gYW5kIHN0YXR1cy1mbGFncyBmb3IgYSBuZXQtaW50ZXJmYWNlICovCisjZGVmaW5lIElTRE5fTkVUX0NPTk5FQ1RFRCAgMHgwMSAgICAgICAvKiBCb3VuZCB0byBJU0ROLUNoYW5uZWwgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSVNETl9ORVRfU0VDVVJFICAgICAweDAyICAgICAgIC8qIEFjY2VwdCBjYWxscyBmcm9tIHBob25lbGlzdCBvbmx5ICAqLworI2RlZmluZSBJU0ROX05FVF9DQUxMQkFDSyAgIDB4MDQgICAgICAgLyogYWN0aXZhdGUgY2FsbGJhY2sgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIElTRE5fTkVUX0NCSFVQICAgICAgMHgwOCAgICAgICAvKiBoYW5ndXAgYmVmb3JlIGNhbGxiYWNrICAgICAgICAgICAgKi8KKyNkZWZpbmUgSVNETl9ORVRfQ0JPVVQgICAgICAweDEwICAgICAgIC8qIHJlbW90ZSBtYWNoaW5lIGRvZXMgY2FsbGJhY2sgICAgICAqLworCisjZGVmaW5lIElTRE5fTkVUX01BR0lDICAgICAgMHg0OTM0NEMwMiAvKiBmb3IgcGFyYW5vaWEtY2hlY2tpbmcgICAgICAgICAgICAgKi8KKworLyogUGhvbmUtbGlzdC1lbGVtZW50ICovCit0eXBlZGVmIHN0cnVjdCB7CisgIHZvaWQgKm5leHQ7CisgIGNoYXIgbnVtW0lTRE5fTVNOTEVOXTsKK30gaXNkbl9uZXRfcGhvbmU7CisKKy8qCisgICBQcmluY2lwbGVzIHdoZW4gZXh0ZW5kaW5nIHN0cnVjdHVyZXMgZm9yIGdlbmVyaWMgZW5jYXBzdWxhdGlvbiBwcm90b2NvbAorICAgKCJjb25jYXAiKSBzdXBwb3J0OgorICAgLSBTdHVmZiB3aGljaCBpcyBoYXJkd2FyZSBzcGVjaWZpYyAoaGVyZSBpNGwtc3BlY2lmaWMpIGdvZXMgaW4gCisgICAgIHRoZSBuZXRkZXYgLT4gbG9jYWwgc3RydWN0dXJlIChoZXJlOiBpc2RuX25ldF9sb2NhbCkKKyAgIC0gU3R1ZmYgd2hpY2ggaXMgZW5jYXBzdWxhdGlvbiBwcm90b2NvbCBzcGVjaWZpYyBnb2VzIGluIHRoZSBzdHJ1Y3R1cmUKKyAgICAgd2hpY2ggaG9sZHMgdGhlIGxpbnV4IGRldmljZSBzdHJ1Y3R1cmUgKGhlcmU6IGlzZG5fbmV0X2RldmljZSkKKyovCisKKy8qIExvY2FsIGludGVyZmFjZS1kYXRhICovCit0eXBlZGVmIHN0cnVjdCBpc2RuX25ldF9sb2NhbF9zIHsKKyAgdWxvbmcgICAgICAgICAgICAgICAgICBtYWdpYzsKKyAgY2hhciAgICAgICAgICAgICAgICAgICBuYW1lWzEwXTsgICAgIC8qIE5hbWUgb2YgZGV2aWNlICAgICAgICAgICAgICAgICAgICovCisgIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOyAgICAgICAvKiBFdGhlcm5ldCBTdGF0aXN0aWNzICAgICAgICAgICAgICAqLworICBpbnQgICAgICAgICAgICAgICAgICAgIGlzZG5fZGV2aWNlOyAgLyogSW5kZXggdG8gaXNkbi1kZXZpY2UgICAgICAgICAgICAgKi8KKyAgaW50ICAgICAgICAgICAgICAgICAgICBpc2RuX2NoYW5uZWw7IC8qIEluZGV4IHRvIGlzZG4tY2hhbm5lbCAgICAgICAgICAgICovCisgIGludAkJCSBwcHBfc2xvdDsgICAgIC8qIFBQUEQgZGV2aWNlIHNsb3QgbnVtYmVyICAgICAgICAgICovCisgIGludCAgICAgICAgICAgICAgICAgICAgcHJlX2RldmljZTsgICAvKiBQcmVzZWxlY3RlZCBpc2RuLWRldmljZSAgICAgICAgICAqLworICBpbnQgICAgICAgICAgICAgICAgICAgIHByZV9jaGFubmVsOyAgLyogUHJlc2VsZWN0ZWQgaXNkbi1jaGFubmVsICAgICAgICAgKi8KKyAgaW50ICAgICAgICAgICAgICAgICAgICBleGNsdXNpdmU7ICAgIC8qIElmIG5vbi16ZXJvIGlkeCB0byByZXNlcnZlZCBjaGFuLiovCisgIGludCAgICAgICAgICAgICAgICAgICAgZmxhZ3M7ICAgICAgICAvKiBDb25uZWN0aW9uLWZsYWdzICAgICAgICAgICAgICAgICAqLworICBpbnQgICAgICAgICAgICAgICAgICAgIGRpYWxyZXRyeTsgICAgLyogQ291bnRlciBmb3IgRGlhbG91dC1yZXRyaWVzICAgICAgKi8KKyAgaW50ICAgICAgICAgICAgICAgICAgICBkaWFsbWF4OyAgICAgIC8qIE1heC4gTnVtYmVyIG9mIERpYWwtcmV0cmllcyAgICAgICovCisgIGludCAgICAgICAgICAgICAgICAgICAgY2JkZWxheTsgICAgICAvKiBEZWxheSBiZWZvcmUgQ2FsbGJhY2sgc3RhcnRzICAgICAqLworICBpbnQgICAgICAgICAgICAgICAgICAgIGR0aW1lcjsgICAgICAgLyogVGltZW91dC1jb3VudGVyIGZvciBkaWFsaW5nICAgICAgKi8KKyAgY2hhciAgICAgICAgICAgICAgICAgICBtc25bSVNETl9NU05MRU5dOyAvKiBNU05zL0VBWnMgZm9yIHRoaXMgaW50ZXJmYWNlICovCisgIHVfY2hhciAgICAgICAgICAgICAgICAgY2JodXA7ICAgICAgICAvKiBGbGFnOiBSZWplY3QgQ2FsbCBiZWZvcmUgQ2FsbGJhY2sqLworICB1X2NoYXIgICAgICAgICAgICAgICAgIGRpYWxzdGF0ZTsgICAgLyogU3RhdGUgZm9yIGRpYWxpbmcgICAgICAgICAgICAgICAgKi8KKyAgdV9jaGFyICAgICAgICAgICAgICAgICBwX2VuY2FwOyAgICAgIC8qIFBhY2tldCBlbmNhcHN1bGF0aW9uICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgIDAgPSBFdGhlcm5ldCBvdmVyIElTRE4gICAgICAgICAqLworCQkJCSAgICAgICAvKiAgIDEgPSBSQVctSVAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogICAyID0gSVAgd2l0aCB0eXBlIGZpZWxkICAgICAgICAgKi8KKyAgdV9jaGFyICAgICAgICAgICAgICAgICBsMl9wcm90bzsgICAgIC8qIExheWVyLTItcHJvdG9jb2wgICAgICAgICAgICAgICAgICovCisJCQkJICAgICAgIC8qIFNlZSBJU0ROX1BST1RPX0wyLi4tY29uc3RhbnRzIGluICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpc2RuaWYuaCAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogICAwID0gWDc1L0xBUEIgd2l0aCBJLUZyYW1lcyAgICAgKi8KKwkJCQkgICAgICAgLyogICAxID0gWDc1L0xBUEIgd2l0aCBVSS1GcmFtZXMgICAgKi8KKwkJCQkgICAgICAgLyogICAyID0gWDc1L0xBUEIgd2l0aCBCVUktRnJhbWVzICAgKi8KKwkJCQkgICAgICAgLyogICAzID0gSERMQyAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdV9jaGFyICAgICAgICAgICAgICAgICBsM19wcm90bzsgICAgIC8qIExheWVyLTMtcHJvdG9jb2wgICAgICAgICAgICAgICAgICovCisJCQkJICAgICAgIC8qIFNlZSBJU0ROX1BST1RPX0wzLi4tY29uc3RhbnRzIGluICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpc2RuaWYuaCAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogICAwID0gVHJhbnNwYXJlbnQgICAgICAgICAgICAgICAgKi8KKyAgaW50ICAgICAgICAgICAgICAgICAgICBodXB0aW1lcjsgICAgIC8qIFRpbWVvdXQtY291bnRlciBmb3IgYXV0by1oYW5ndXAgICovCisgIGludCAgICAgICAgICAgICAgICAgICAgY2hhcmdlOyAgICAgICAvKiBDb3VudGVyIGZvciBjaGFyZ2luZyB1bml0cyAgICAgICAqLworICB1bG9uZyAgICAgICAgICAgICAgICAgIGNoYXJnZXRpbWU7ICAgLyogVGltZXIgZm9yIENoYXJnaW5nIGluZm8gICAgICAgICAgKi8KKyAgaW50ICAgICAgICAgICAgICAgICAgICBodXBmbGFnczsgICAgIC8qIEZsYWdzIGZvciBjaGFyZ2UtdW5pdC1oYW5ndXA6ICAgICovCisJCQkJICAgICAgIC8qIGJpdDA6IGNoYXJnZWludCBpcyBpbnZhbGlkICAgICAgICovCisJCQkJICAgICAgIC8qIGJpdDE6IEdldHRpbmcgY2hhcmdlLWludGVydmFsICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBiaXQyOiBEbyBjaGFyZ2UtdW5pdC1oYW5ndXAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYml0MzogRG8gaGFuZ3VwIGV2ZW4gb24gaW5jb21pbmcgKi8KKyAgaW50ICAgICAgICAgICAgICAgICAgICBvdXRnb2luZzsgICAgIC8qIEZsYWc6IG91dGdvaW5nIGNhbGwgICAgICAgICAgICAgICovCisgIGludCAgICAgICAgICAgICAgICAgICAgb25odGltZTsgICAgICAvKiBUaW1lIHRvIGtlZXAgbGluayB1cCAgICAgICAgICAgICAqLworICBpbnQgICAgICAgICAgICAgICAgICAgIGNoYXJnZWludDsgICAgLyogSW50ZXJ2YWwgYmV0d2VlbiBjaGFyZ2UtaW5mb3MgICAgKi8KKyAgaW50ICAgICAgICAgICAgICAgICAgICBvbnVtOyAgICAgICAgIC8qIEZsYWc6IGF0IGxlYXN0IDEgb3V0Z29pbmcgbnVtYmVyICovCisgIGludCAgICAgICAgICAgICAgICAgICAgY3BzOyAgICAgICAgICAvKiBjdXJyZW50IHNwZWVkIG9mIHRoaXMgaW50ZXJmYWNlICAqLworICBpbnQgICAgICAgICAgICAgICAgICAgIHRyYW5zY291bnQ7ICAgLyogYnl0ZS1jb3VudGVyIGZvciBjcHMtY2FsY3VsYXRpb24gKi8KKyAgaW50ICAgICAgICAgICAgICAgICAgICBzcWZ1bGw7ICAgICAgIC8qIEZsYWc6IG5ldGRldi1xdWV1ZSBvdmVybG9hZGVkICAgICovCisgIHVsb25nICAgICAgICAgICAgICAgICAgc3FmdWxsX3N0YW1wOyAvKiBTdGFydC1UaW1lIG9mIG92ZXJsb2FkICAgICAgICAgICAqLworICB1bG9uZyAgICAgICAgICAgICAgICAgIHNsYXZlZGVsYXk7ICAgLyogRHluYW1pYyBidW5kbGluZyBkZWxheXRpbWUgICAgICAgKi8KKyAgaW50ICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyY3BzOyAgIC8qIEJvZ29DUFMgbmVlZGVkIGZvciB0cmlnZ2VyIHNsYXZlICovCisgIGlzZG5fbmV0X3Bob25lICAgICAgICAgKnBob25lWzJdOyAgICAvKiBMaXN0IG9mIHJlbW90ZS1waG9uZW51bWJlcnMgICAgICAqLworCQkJCSAgICAgICAvKiBwaG9uZVswXSA9IEluY29taW5nIE51bWJlcnMgICAgICAqLworCQkJCSAgICAgICAvKiBwaG9uZVsxXSA9IE91dGdvaW5nIE51bWJlcnMgICAgICAqLworICBpc2RuX25ldF9waG9uZSAgICAgICAgICpkaWFsOyAgICAgICAgLyogUG9pbnRlciB0byBkaWFsZWQgbnVtYmVyICAgICAgICAgKi8KKyAgc3RydWN0IG5ldF9kZXZpY2UgICAgICAqbWFzdGVyOyAgICAgIC8qIFB0ciB0byBNYXN0ZXIgZGV2aWNlIGZvciBzbGF2ZXMgICovCisgIHN0cnVjdCBuZXRfZGV2aWNlICAgICAgKnNsYXZlOyAgICAgICAvKiBQdHIgdG8gU2xhdmUgZGV2aWNlIGZvciBtYXN0ZXJzICAqLworICBzdHJ1Y3QgaXNkbl9uZXRfbG9jYWxfcyAqbmV4dDsgICAgICAgLyogUHRyIHRvIG5leHQgbGluayBpbiBidW5kbGUgICAgICAgKi8KKyAgc3RydWN0IGlzZG5fbmV0X2xvY2FsX3MgKmxhc3Q7ICAgICAgIC8qIFB0ciB0byBsYXN0IGxpbmsgaW4gYnVuZGxlICAgICAgICovCisgIHN0cnVjdCBpc2RuX25ldF9kZXZfcyAgKm5ldGRldjsgICAgICAvKiBQdHIgdG8gbmV0ZGV2ICAgICAgICAgICAgICAgICAgICAqLworICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICAgIHN1cGVyX3R4X3F1ZXVlOyAvKiBMaXN0IG9mIHN1cGVydmlzb3J5IGZyYW1lcyB0byAgKi8KKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYmUgdHJhbnNtaXR0ZWQgYXNhcCAgICAgICAgICAgICAgKi8KKyAgYXRvbWljX3QgZnJhbWVfY250OyAgICAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBmcmFtZXMgY3VycmVudGx5ICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAJICAgICAgIC8qIHF1ZXVlZCBpbiBITCBkcml2ZXIgICAgICAgICAgICAgICovICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUHRyIHRvIG9yaWcuIGhhcmRfaGVhZGVyX2NhY2hlICAgKi8KKyAgc3BpbmxvY2tfdCAgICAgICAgICAgICB4bWl0X2xvY2s7ICAgIC8qIHVzZWQgdG8gcHJvdGVjdCB0aGUgeG1pdCBwYXRoIG9mICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhIHBhcnRpY3VsYXIgY2hhbm5lbCAoaW5jbHVkaW5nICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdGhlIGZyYW1lX2NudCAgICAgICAgICAgICAgICAgICAgKi8KKworICBpbnQgICAgICAgICAgICAgICAgICAgICgqb3JnX2hoYykoCisJCQkJICAgIHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoLAorCQkJCSAgICBzdHJ1Y3QgaGhfY2FjaGUgKmhoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFB0ciB0byBvcmlnLiBoZWFkZXJfY2FjaGVfdXBkYXRlICovCisgIHZvaWQgICAgICAgICAgICAgICAgICAgKCpvcmdfaGN1KShzdHJ1Y3QgaGhfY2FjaGUgKiwKKwkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKik7CisgIGludCAgcHBwYmluZDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcHBwIGRldmljZSBmb3IgYmluZGluZ3MgICAgICAgICAqLworICBpbnQJCQkJCWRpYWx0aW1lb3V0OwkvKiBIb3cgbG9uZyBzaGFsbCB3ZSB0cnkgb24gZGlhbGluZz8gKGppZmZpZXMpICovCisgIGludAkJCQkJZGlhbHdhaXQ7CQkvKiBIb3cgbG9uZyBzaGFsbCB3ZSB3YWl0IGFmdGVyIGZhaWxlZCBhdHRlbXB0PyAoamlmZmllcykgKi8KKyAgdWxvbmcJCQkJCWRpYWxzdGFydGVkOwkvKiBqaWZmaWVzIG9mIGZpcnN0IGRpYWxpbmctYXR0ZW1wdCAqLworICB1bG9uZwkJCQkJZGlhbHdhaXRfdGltZXI7CS8qIGppZmZpZXMgb2YgZWFybGllc3QgbmV4dCBkaWFsaW5nLWF0dGVtcHQgKi8KKyAgaW50CQkJCQlodXB0aW1lb3V0OwkJLyogSG93IGxvbmcgd2lsbCB0aGUgY29ubmVjdGlvbiBiZSB1cD8gKHNlY29uZHMpICovCisjaWZkZWYgQ09ORklHX0lTRE5fWDI1CisgIHN0cnVjdCBjb25jYXBfZGV2aWNlX29wcyAqZG9wczsgICAgICAvKiBjYWxsYmFja3MgdXNlZCBieSBlbmNhcHN1bGF0b3IgICAqLworI2VuZGlmCisgIC8qIHVzZSBhbiBvd24gc3RydWN0IGZvciB0aGF0IGluIGxhdGVyIHZlcnNpb25zICovCisgIHVsb25nIGNpc2NvX215c2VxOyAgICAgICAgICAgICAgICAgICAvKiBMb2NhbCBrZWVwYWxpdmUgc2VxLiBmb3IgQ2lzY28gICAqLworICB1bG9uZyBjaXNjb19taW5lc2VlbjsgICAgICAgICAgICAgICAgLyogcmV0dXJuZWQga2VlcGFsaXZlIHNlcS4gZnJvbSByZW1vdGUgKi8KKyAgdWxvbmcgY2lzY29feW91cnNlcTsgICAgICAgICAgICAgICAgIC8qIFJlbW90ZSBrZWVwYWxpdmUgc2VxLiBmb3IgQ2lzY28gICovCisgIGludCBjaXNjb19rZWVwYWxpdmVfcGVyaW9kOwkJLyoga2VlcGFsaXZlIHBlcmlvZCAqLworICB1bG9uZyBjaXNjb19sYXN0X3NsYXJwX2luOwkJLyogamlmZmllIG9mIGxhc3Qga2VlcGFsaXZlIHBhY2tldCB3ZSByZWNlaXZlZCAqLworICBjaGFyIGNpc2NvX2xpbmVfc3RhdGU7CQkvKiBzdGF0ZSBvZiBsaW5lIGFjY29yZGluZyB0byBrZWVwYWxpdmUgcGFja2V0cyAqLworICBjaGFyIGNpc2NvX2RlYnNlcmludDsJCQkvKiBkZWJ1Z2dpbmcgZmxhZyBvZiBjaXNjbyBoZGxjIHdpdGggc2xhcnAgKi8KKyAgc3RydWN0IHRpbWVyX2xpc3QgY2lzY29fdGltZXI7CisgIHN0cnVjdCB3b3JrX3N0cnVjdCB0cXVldWU7Cit9IGlzZG5fbmV0X2xvY2FsOworCisvKiB0aGUgaW50ZXJmYWNlIGl0c2VsZiAqLwordHlwZWRlZiBzdHJ1Y3QgaXNkbl9uZXRfZGV2X3MgeworICBpc2RuX25ldF9sb2NhbCAqbG9jYWw7CisgIGlzZG5fbmV0X2xvY2FsICpxdWV1ZTsgICAgICAgICAgICAgICAvKiBjaXJjdWxhciBsaXN0IG9mIGFsbCBidW5kbGVkCisJCQkJCSAgY2hhbm5lbHMsIHdoaWNoIGFyZSBjdXJyZW50bHkKKwkJCQkJICBvbmxpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzcGlubG9ja190IHF1ZXVlX2xvY2s7ICAgICAgICAgICAgICAgLyogbG9jayB0byBwcm90ZWN0IHF1ZXVlICAgICAgICAgICAgKi8KKyAgdm9pZCAqbmV4dDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBvaW50ZXIgdG8gbmV4dCBpc2RuLWludGVyZmFjZSAgICovCisgIHN0cnVjdCBuZXRfZGV2aWNlIGRldjsgICAgICAgICAgICAgICAvKiBpbnRlcmZhY2UgdG8gdXBwZXIgbGV2ZWxzICAgICAgICAqLworI2lmZGVmIENPTkZJR19JU0ROX1BQUAorICBpcHBwX2J1bmRsZSAqIHBiOwkJLyogcG9pbnRlciB0byB0aGUgY29tbW9uIGJ1bmRsZSBzdHJ1Y3R1cmUKKyAgIAkJCSAgICAgICAgICogd2l0aCB0aGUgcGVyLWJ1bmRsZSBkYXRhICovCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfSVNETl9YMjUKKyAgc3RydWN0IGNvbmNhcF9wcm90byAgKmNwcm90OyAvKiBjb25uZWN0aW9uIG9yaWVudGVkIGVuY2Fwc3VsYXRpb24gcHJvdG9jb2wgKi8KKyNlbmRpZgorCit9IGlzZG5fbmV0X2RldjsKKworLyo9PT09PT09PT09PT09PT09PT09PT0gRW5kIG9mIGlwLW92ZXItSVNETiBzdHVmZiA9PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisvKj09PT09PT09PT09PT09PT09PT09PT09IFN0YXJ0IG9mIElTRE4tdHR5IHN0dWZmID09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKyNkZWZpbmUgSVNETl9BU1lOQ19NQUdJQyAgICAgICAgICAweDQ5MzQ0QzAxIC8qIGZvciBwYXJhbm9pYS1jaGVja2luZyAgICAgICAgKi8KKyNkZWZpbmUgSVNETl9BU1lOQ19JTklUSUFMSVpFRAkgIDB4ODAwMDAwMDAgLyogcG9ydCB3YXMgaW5pdGlhbGl6ZWQgICAgICAgICAqLworI2RlZmluZSBJU0ROX0FTWU5DX0NBTExPVVRfQUNUSVZFIDB4NDAwMDAwMDAgLyogQ2FsbCBvdXQgZGV2aWNlIGFjdGl2ZSAgICAgICAqLworI2RlZmluZSBJU0ROX0FTWU5DX05PUk1BTF9BQ1RJVkUgIDB4MjAwMDAwMDAgLyogTm9ybWFsIGRldmljZSBhY3RpdmUgICAgICAgICAqLworI2RlZmluZSBJU0ROX0FTWU5DX0NMT1NJTkcJICAweDA4MDAwMDAwIC8qIFNlcmlhbCBwb3J0IGlzIGNsb3NpbmcgICAgICAgKi8KKyNkZWZpbmUgSVNETl9BU1lOQ19DVFNfRkxPVwkgIDB4MDQwMDAwMDAgLyogRG8gQ1RTIGZsb3cgY29udHJvbCAgICAgICAgICAqLworI2RlZmluZSBJU0ROX0FTWU5DX0NIRUNLX0NECSAgMHgwMjAwMDAwMCAvKiBpLmUuLCBDTE9DQUwgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIElTRE5fQVNZTkNfSFVQX05PVElGWSAgICAgICAgIDB4MDAwMSAvKiBOb3RpZnkgdHR5IG9uIGhhbmd1cHMvY2xvc2VzICovCisjZGVmaW5lIElTRE5fQVNZTkNfU0VTU0lPTl9MT0NLT1VUICAgIDB4MDEwMCAvKiBMb2NrIGN1YSBvcGVucyBvbiBzZXNzaW9uICAgICovCisjZGVmaW5lIElTRE5fQVNZTkNfUEdSUF9MT0NLT1VUICAgICAgIDB4MDIwMCAvKiBMb2NrIGN1YSBvcGVucyBvbiBwZ3JwICAgICAgICovCisjZGVmaW5lIElTRE5fQVNZTkNfQ0FMTE9VVF9OT0hVUCAgICAgIDB4MDQwMCAvKiBObyBoYW5ndXAgZm9yIGN1aSAgICAgICAgICAgICovCisjZGVmaW5lIElTRE5fQVNZTkNfU1BMSVRfVEVSTUlPUyAgICAgIDB4MDAwOCAvKiBTZXAuIHRlcm1pb3MgZm9yIGRpYWxpbi9vdXQgICovCisjZGVmaW5lIElTRE5fU0VSSUFMX1hNSVRfU0laRSAgICAgICAgICAgMTAyNCAvKiBEZWZhdWx0IGJ1ZnNpemUgZm9yIHdyaXRlICAgICovCisjZGVmaW5lIElTRE5fU0VSSUFMX1hNSVRfTUFYICAgICAgICAgICAgNDAwMCAvKiBNYXhpbXVtIGJ1ZnNpemUgZm9yIHdyaXRlICAgICovCisjZGVmaW5lIElTRE5fU0VSSUFMX1RZUEVfTk9STUFMICAgICAgICAgICAgMQorI2RlZmluZSBJU0ROX1NFUklBTF9UWVBFX0NBTExPVVQgICAgICAgICAgIDIKKworI2lmZGVmIENPTkZJR19JU0ROX0FVRElPCisvKiBGb3IgdXNpbmcgc2tfYnVmZnMgd2l0aCBhdWRpbyB3ZSBuZWVkIHNvbWUgcHJpdmF0ZSB2YXJpYWJsZXMKKyAqIHdpdGhpbiBlYWNoIHNrX2J1ZmYuIEZvciB0aGlzIHB1cnBvc2UsIHdlIGRlY2xhcmUgYSBzdHJ1Y3QgaGVyZSwKKyAqIGFuZCBwdXQgaXQgYWx3YXlzIGF0IHRoZSBwcml2YXRlIHNrYi0+Y2IgZGF0YSBhcnJheS4gQSBmZXcgbWFjcm9zIGhlbHAKKyAqIGFjY2Vzc2luZyB0aGUgdmFyaWFibGVzLgorICovCit0eXBlZGVmIHN0cnVjdCBfaXNkbl9hdWRpb19kYXRhIHsKKyAgdW5zaWduZWQgc2hvcnQgZGxlX2NvdW50OworICB1bnNpZ25lZCBjaGFyICBsb2NrOworfSBpc2RuX2F1ZGlvX2RhdGFfdDsKKworI2RlZmluZSBJU0ROX0FVRElPX1NLQl9ETEVDT1VOVChza2IpCSgoKGlzZG5fYXVkaW9fZGF0YV90ICopJnNrYi0+Y2JbMF0pLT5kbGVfY291bnQpCisjZGVmaW5lIElTRE5fQVVESU9fU0tCX0xPQ0soc2tiKQkoKChpc2RuX2F1ZGlvX2RhdGFfdCAqKSZza2ItPmNiWzBdKS0+bG9jaykKKyNlbmRpZgorCisvKiBQcml2YXRlIGRhdGEgb2YgQVQtY29tbWFuZC1pbnRlcnByZXRlciAqLwordHlwZWRlZiBzdHJ1Y3QgYXRlbXUgeworCXVfY2hhciAgICAgICBwcm9maWxlW0lTRE5fTU9ERU1fTlVNUkVHXTsgLyogTW9kZW0tUmVncy4gUHJvZmlsZSAwICAgICAgICAgICAgICAqLworCXVfY2hhciAgICAgICBtZG1yZWdbSVNETl9NT0RFTV9OVU1SRUddOyAgLyogTW9kZW0tUmVnaXN0ZXJzICAgICAgICAgICAgICAgICAgICAqLworCWNoYXIgICAgICAgICBwbXNuW0lTRE5fTVNOTEVOXTsgICAgICAgICAgLyogRUFaL01TTnMgUHJvZmlsZSAwICAgICAgICAgICAgICAgICAqLworCWNoYXIgICAgICAgICBtc25bSVNETl9NU05MRU5dOyAgICAgICAgICAgLyogRUFaL01TTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCWNoYXIgICAgICAgICBwbG1zbltJU0ROX0xNU05MRU5dOyAgICAgICAgLyogTGlzdGVuaW5nIE1TTnMgUHJvZmlsZSAwICAgICAgICAgICAqLworCWNoYXIgICAgICAgICBsbXNuW0lTRE5fTE1TTkxFTl07ICAgICAgICAgLyogTGlzdGVuaW5nIE1TTnMgICAgICAgICAgICAgICAgICAgICAqLworCWNoYXIgICAgICAgICBjcG5bSVNETl9NU05MRU5dOyAgICAgICAgICAgLyogQ2FsbGVkUGFydHlOdW1iZXIgb24gaW5jb21pbmcgY2FsbCAqLworCWNoYXIgICAgICAgICBjb25ubXNnW0lTRE5fQ01TR0xFTl07CSAvKiBDT05ORUNULU1zZyBmcm9tIEhMLURyaXZlcgkgICAgICAgKi8KKyNpZmRlZiBDT05GSUdfSVNETl9BVURJTworCXVfY2hhciAgICAgICB2cGFyWzEwXTsgICAgICAgICAgICAgICAgICAgLyogVm9pY2UtcGFyYW1ldGVycyAgICAgICAgICAgICAgICAgICAqLworCWludCAgICAgICAgICBsYXN0RExFOyAgICAgICAgICAgICAgICAgICAgLyogRmxhZyBmb3Igdm9pY2UtY29kaW5nOiBETEUgc2VlbiAgICAqLworI2VuZGlmCisJaW50ICAgICAgICAgIG1kbWNtZGw7ICAgICAgICAgICAgICAgICAgICAvKiBMZW5ndGggb2YgTW9kZW0tQ29tbWFuZGJ1ZmZlciAgICAgICovCisJaW50ICAgICAgICAgIHBsdXNjb3VudDsgICAgICAgICAgICAgICAgICAvKiBDb3VudGVyIGZvciArKysgc2VxdWVuY2UgICAgICAgICAgICovCisJdV9sb25nICAgICAgIGxhc3RwbHVzOyAgICAgICAgICAgICAgICAgICAvKiBUaW1lc3RhbXAgb2YgbGFzdCArICAgICAgICAgICAgICAgICovCisJaW50CSAgICAgY2FycmllcndhaXQ7ICAgICAgICAgICAgICAgIC8qIFNlY29uZHMgb2YgY2FycmllciB3YWl0aW5nICAgICAgICAgKi8KKwljaGFyICAgICAgICAgbWRtY21kWzI1NV07ICAgICAgICAgICAgICAgIC8qIE1vZGVtLUNvbW1hbmRidWZmZXIgICAgICAgICAgICAgICAgKi8KKwl1bnNpZ25lZCBpbnQgY2hhcmdlOyAgICAgICAgICAgICAgICAgICAgIC8qIENoYXJnZSB1bml0cyBvZiBjdXJyZW50IGNvbm5lY3Rpb24gKi8KK30gYXRlbXU7CisKKy8qIFByaXZhdGUgZGF0YSAoc2ltaWxhciB0byBhc3luY19zdHJ1Y3QgaW4gPGxpbnV4L3NlcmlhbC5oPikgKi8KK3R5cGVkZWYgc3RydWN0IG1vZGVtX2luZm8geworICBpbnQJCQltYWdpYzsKKyAgc3RydWN0IG1vZHVsZQkJKm93bmVyOworICBpbnQJCQlmbGFnczsJCSAvKiBkZWZpbmVkIGluIHR0eS5oICAgICAgICAgICAgICAgKi8KKyAgaW50CQkJeF9jaGFyOwkJIC8qIHhvbi94b2ZmIGNoYXJhY3RlciAgICAgICAgICAgICAqLworICBpbnQJCQltY3I7CQkgLyogTW9kZW0gY29udHJvbCByZWdpc3RlciAgICAgICAgICovCisgIGludCAgICAgICAgICAgICAgICAgICBtc3I7ICAgICAgICAgICAgIC8qIE1vZGVtIHN0YXR1cyByZWdpc3RlciAgICAgICAgICAqLworICBpbnQgICAgICAgICAgICAgICAgICAgbHNyOyAgICAgICAgICAgICAvKiBMaW5lIHN0YXR1cyByZWdpc3RlciAgICAgICAgICAgKi8KKyAgaW50CQkJbGluZTsKKyAgaW50CQkJY291bnQ7CQkgLyogIyBvZiBmZCBvbiBkZXZpY2UgICAgICAgICAgICAgICovCisgIGludAkJCWJsb2NrZWRfb3BlbjsJIC8qICMgb2YgYmxvY2tlZCBvcGVucyAgICAgICAgICAgICAqLworICBsb25nCQkJc2Vzc2lvbjsJIC8qIFNlc3Npb24gb2Ygb3BlbmluZyBwcm9jZXNzICAgICAqLworICBsb25nCQkJcGdycDsJCSAvKiBwZ3JwIG9mIG9wZW5pbmcgcHJvY2VzcyAgICAgICAgKi8KKyAgaW50ICAgICAgICAgICAgICAgICAgIG9ubGluZTsgICAgICAgICAgLyogMSA9IEItQ2hhbm5lbCBpcyB1cCwgZHJvcCBkYXRhICovCisJCQkJCSAvKiAyID0gQi1DaGFubmVsIGlzIHVwLCBkZWxpdmVyIGQuKi8KKyAgaW50ICAgICAgICAgICAgICAgICAgIGRpYWxpbmc7ICAgICAgICAgLyogRGlhbCBpbiBwcm9ncmVzcyBvciBBVEEgICAgICAgICovCisgIGludCAgICAgICAgICAgICAgICAgICByY3ZzY2hlZDsgICAgICAgIC8qIFJlY2VpdmUgbmVlZHMgc2NoZWR1bGUgICAgICAgICAqLworICBpbnQgICAgICAgICAgICAgICAgICAgaXNkbl9kcml2ZXI7CSAvKiBJbmRleCB0byBpc2RuLWRyaXZlciAgICAgICAgICAgKi8KKyAgaW50ICAgICAgICAgICAgICAgICAgIGlzZG5fY2hhbm5lbDsgICAgLyogSW5kZXggdG8gaXNkbi1jaGFubmVsICAgICAgICAgICovCisgIGludCAgICAgICAgICAgICAgICAgICBkcnZfaW5kZXg7ICAgICAgIC8qIEluZGV4IHRvIGRldi0+dXNhZ2UgICAgICAgICAgICAqLworICBpbnQgICAgICAgICAgICAgICAgICAgbmNhcnJpZXI7ICAgICAgICAvKiBGbGFnOiBzY2hlZHVsZSBOTyBDQVJSSUVSICAgICAgKi8KKyAgdW5zaWduZWQgY2hhciAgICAgICAgIGxhc3RfY2F1c2VbOF07ICAgLyogTGFzdCBjYXVzZSBtZXNzYWdlICAgICAgICAgICAgICovCisgIHVuc2lnbmVkIGNoYXIgICAgICAgICBsYXN0X251bVtJU0ROX01TTkxFTl07CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTGFzdCBwaG9uZS1udW1iZXIgICAgICAgICAgICAgICovCisgIHVuc2lnbmVkIGNoYXIgICAgICAgICBsYXN0X2wyOyAgICAgICAgIC8qIExhc3QgbGF5ZXItMiBwcm90b2NvbCAgICAgICAgICAqLworICB1bnNpZ25lZCBjaGFyICAgICAgICAgbGFzdF9zaTsgICAgICAgICAvKiBMYXN0IHNlcnZpY2UgICAgICAgICAgICAgICAgICAgKi8KKyAgdW5zaWduZWQgY2hhciAgICAgICAgIGxhc3RfbGh1cDsgICAgICAgLyogTGFzdCBoYW5ndXAgbG9jYWw/ICAgICAgICAgICAgICovCisgIHVuc2lnbmVkIGNoYXIgICAgICAgICBsYXN0X2RpcjsgICAgICAgIC8qIExhc3QgZGlyZWN0aW9uIChpbiBvciBvdXQpICAgICAqLworICBzdHJ1Y3QgdGltZXJfbGlzdCAgICAgbmNfdGltZXI7ICAgICAgICAvKiBUaW1lciBmb3IgZGVsYXllZCBOTyBDQVJSSUVSICAgKi8KKyAgaW50ICAgICAgICAgICAgICAgICAgIHNlbmRfb3V0c3RhbmRpbmc7LyogIyBvZiBvdXRzdGFuZGluZyBzZW5kLXJlcXVlc3RzICovCisgIGludCAgICAgICAgICAgICAgICAgICB4bWl0X3NpemU7ICAgICAgIC8qIG1heC4gIyBvZiBjaGFycyBpbiB4bWl0X2J1ZiAgICAqLworICBpbnQgICAgICAgICAgICAgICAgICAgeG1pdF9jb3VudDsgICAgICAvKiAjIG9mIGNoYXJzIGluIHhtaXRfYnVmICAgICAgICAgKi8KKyAgdW5zaWduZWQgY2hhciAgICAgICAgICp4bWl0X2J1ZjsgICAgICAgLyogdHJhbnNtaXQgYnVmZmVyICAgICAgICAgICAgICAgICovCisgIHN0cnVjdCBza19idWZmX2hlYWQgICB4bWl0X3F1ZXVlOyAgICAgIC8qIHRyYW5zbWl0IHF1ZXVlICAgICAgICAgICAgICAgICAqLworICBhdG9taWNfdCAgICAgICAgICAgICAgeG1pdF9sb2NrOyAgICAgICAvKiBTZW1hcGhvcmUgZm9yIGlzZG5fdHR5X3dyaXRlICAgKi8KKyNpZmRlZiBDT05GSUdfSVNETl9BVURJTworICBpbnQgICAgICAgICAgICAgICAgICAgdm9ubGluZTsgICAgICAgICAvKiBWb2ljZS1jaGFubmVsIHN0YXR1cyAgICAgICAgICAgKi8KKwkJCQkJIC8qIEJpdCAwID0gcmVjb3JkaW5nICAgICAgICAgICAgICAqLworCQkJCQkgLyogQml0IDEgPSBwbGF5YmFjayAgICAgICAgICAgICAgICovCisJCQkJCSAvKiBCaXQgMiA9IHBsYXliYWNrLCBETEUtRVRYIHNlZW4gKi8KKyAgc3RydWN0IHNrX2J1ZmZfaGVhZCAgIGR0bWZfcXVldWU7ICAgICAgLyogcXVldWUgZm9yIGR0bWYgcmVzdWx0cyAgICAgICAgICovCisgIHZvaWQgICAgICAgICAgICAgICAgICAqYWRwY21zOyAgICAgICAgIC8qIHN0YXRlIGZvciBhZHBjbSBkZWNvbXByZXNzaW9uICAqLworICB2b2lkICAgICAgICAgICAgICAgICAgKmFkcGNtcjsgICAgICAgICAvKiBzdGF0ZSBmb3IgYWRwY20gY29tcHJlc3Npb24gICAgKi8KKyAgdm9pZCAgICAgICAgICAgICAgICAgICpkdG1mX3N0YXRlOyAgICAgLyogc3RhdGUgZm9yIGR0bWYgZGVjb2RlciAgICAgICAgICovCisgIHZvaWQgICAgICAgICAgICAgICAgICAqc2lsZW5jZV9zdGF0ZTsgIC8qIHN0YXRlIGZvciBzaWxlbmNlIGRldGVjdGlvbiAgICAqLworI2VuZGlmCisjaWZkZWYgQ09ORklHX0lTRE5fVFRZX0ZBWAorICBzdHJ1Y3QgVDMwX3MJCSpmYXg7CQkgLyogVDMwIEZheCBHcm91cCAzIGRhdGEvaW50ZXJmYWNlICovCisgIGludAkJCWZheG9ubGluZTsJIC8qIEZheC1jaGFubmVsIHN0YXR1cyAgICAgICAgICAgICAqLworI2VuZGlmCisgIHN0cnVjdCB0dHlfc3RydWN0IAkqdHR5OyAgICAgICAgICAgIC8qIFBvaW50ZXIgdG8gY29ycmVzcG9uZGluZyB0dHkgICAqLworICBhdGVtdSAgICAgICAgICAgICAgICAgZW11OyAgICAgICAgICAgICAvKiBBVC1lbXVsYXRvciBkYXRhICAgICAgICAgICAgICAgKi8KKyAgc3RydWN0IHRlcm1pb3MJbm9ybWFsX3Rlcm1pb3M7ICAvKiBGb3Igc2F2aW5nIHRlcm1pb3Mgc3RydWN0cyAgICAgKi8KKyAgc3RydWN0IHRlcm1pb3MJY2FsbG91dF90ZXJtaW9zOworICB3YWl0X3F1ZXVlX2hlYWRfdAlvcGVuX3dhaXQsIGNsb3NlX3dhaXQ7CisgIHN0cnVjdCBzZW1hcGhvcmUgICAgICB3cml0ZV9zZW07CisgIHNwaW5sb2NrX3QJICAgICAgICByZWFkbG9jazsKK30gbW9kZW1faW5mbzsKKworI2RlZmluZSBJU0ROX01PREVNX1dJTlNJWkUgOAorCisvKiBEZXNjcmlwdGlvbiBvZiBvbmUgSVNETi10dHkgKi8KK3R5cGVkZWYgc3RydWN0IF9pc2RuX21vZGVtIHsKKyAgaW50ICAgICAgICAgICAgICAgIHJlZmNvdW50OwkJCQkvKiBOdW1iZXIgb2Ygb3BlbnMgICAgICAgICovCisgIHN0cnVjdCB0dHlfZHJpdmVyICAqdHR5X21vZGVtOwkJCS8qIHR0eS1kZXZpY2UgICAgICAgICAgICAgKi8KKyAgc3RydWN0IHR0eV9zdHJ1Y3QgICptb2RlbV90YWJsZVtJU0ROX01BWF9DSEFOTkVMU107CS8qID8/IGNvcGllZCBmcm9tIE9yaWcgICAgKi8KKyAgc3RydWN0IHRlcm1pb3MgICAgICptb2RlbV90ZXJtaW9zW0lTRE5fTUFYX0NIQU5ORUxTXTsKKyAgc3RydWN0IHRlcm1pb3MgICAgICptb2RlbV90ZXJtaW9zX2xvY2tlZFtJU0ROX01BWF9DSEFOTkVMU107CisgIG1vZGVtX2luZm8gICAgICAgICBpbmZvW0lTRE5fTUFYX0NIQU5ORUxTXTsJICAgLyogUHJpdmF0ZSBkYXRhICAgICAgICAgICAqLworfSBpc2RuX21vZGVtX3Q7CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT0gRW5kIG9mIElTRE4tdHR5IHN0dWZmID09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PSBTdGFydCBvZiBWLjExMCBzdHVmZiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKyNkZWZpbmUgVjExMF9CVUZTSVpFIDEwMjQKKwordHlwZWRlZiBzdHJ1Y3QgeworCWludCBuYnl0ZXM7ICAgICAgICAgICAgICAgICAgICAvKiAxIE1hdHJpeGJ5dGUgLT4gbmJ5dGVzIGluIHN0cmVhbSAgICAgKi8KKwlpbnQgbmJpdHM7ICAgICAgICAgICAgICAgICAgICAgLyogTnVtYmVyIG9mIHVzZWQgYml0cyBpbiBzdHJlYW1ieXRlICAgICovCisJdW5zaWduZWQgY2hhciBrZXk7ICAgICAgICAgICAgIC8qIEJpdG1hc2sgaW4gc3RyZWFtIGVnLiAxMSAobmJpdHM9MikgICAqLworCWludCBkZWNvZGVsZW47ICAgICAgICAgICAgICAgICAvKiBBbW91bnQgb2YgZGF0YSBpbiBkZWNvZGVidWYgICAgICAgICAgKi8KKwlpbnQgU3luY0luaXQ7ICAgICAgICAgICAgICAgICAgLyogTnVtYmVyIG9mIHN5bmMgZnJhbWVzIHRvIHNlbmQgICAgICAgICovCisJdW5zaWduZWQgY2hhciAqT25saW5lRnJhbWU7ICAgIC8qIFByZWNhbGN1bGF0ZWQgVjExMCBpZGxlIGZyYW1lICAgICAgICAqLworCXVuc2lnbmVkIGNoYXIgKk9mZmxpbmVGcmFtZTsgICAvKiBQcmVjYWxjdWxhdGVkIFYxMTAgc3luYyBGcmFtZSAgICAgICAgKi8KKwlpbnQgZnJhbWVsZW47ICAgICAgICAgICAgICAgICAgLyogTGVuZ3RoIG9mIGZyYW1lcyAgICAgICAgICAgICAgICAgICAgICovCisJaW50IHNrYnVzZXI7ICAgICAgICAgICAgICAgICAgIC8qIE51bWJlciBvZiB1bmFja2VkIHVzZXJkYXRhIHNrYnMgICAgICAqLworCWludCBza2JpZGxlOyAgICAgICAgICAgICAgICAgICAvKiBOdW1iZXIgb2YgdW5hY2tlZCBpZGxlL3N5bmMgc2ticyAgICAgKi8KKwlpbnQgaW50cm9kdWNlcjsgICAgICAgICAgICAgICAgLyogTG9jYWwgdmFycyBmb3IgZGVjb2RlciAgICAgICAgICAgICAgICovCisJaW50IGRiaXQ7CisJdW5zaWduZWQgY2hhciBiOworCWludCBza2JyZXM7ICAgICAgICAgICAgICAgICAgICAvKiBzcGFjZSB0byByZXNlcnZlIGluIG91dGdvaW5nIHNrYiAgICAgKi8KKwlpbnQgbWF4c2l6ZTsgICAgICAgICAgICAgICAgICAgLyogbWF4YnVmc2l6ZSBvZiBsb3dsZXZlbCBkcml2ZXIgICAgICAgICovCisJdW5zaWduZWQgY2hhciAqZW5jb2RlYnVmOyAgICAgIC8qIHRlbXBvcmFyeSBidWZmZXIgZm9yIGVuY29kaW5nICAgICAgICAqLworCXVuc2lnbmVkIGNoYXIgZGVjb2RlYnVmW1YxMTBfQlVGU0laRV07IC8qIGluY29tcGxldGUgVjExMCBtYXRyaWNlcyAgICAgKi8KK30gaXNkbl92MTEwX3N0cmVhbTsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09IEVuZCBvZiBWLjExMCBzdHVmZiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT0gU3RhcnQgb2YgZ2VuZXJhbCBzdHVmZiA9PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCit0eXBlZGVmIHN0cnVjdCB7CisJY2hhciAqbmV4dDsKKwljaGFyICpwcml2YXRlOworfSBpbmZvc3RydWN0OworCisjZGVmaW5lIERSVl9GTEFHX1JVTk5JTkcgMQorI2RlZmluZSBEUlZfRkxBR19SRUpCVVMgIDIKKyNkZWZpbmUgRFJWX0ZMQUdfTE9BREVEICA0CisKKy8qIERlc2NyaXB0aW9uIG9mIGhhcmR3YXJlLWxldmVsLWRyaXZlciAqLwordHlwZWRlZiBzdHJ1Y3QgX2lzZG5fZHJpdmVyIHsKKwl1bG9uZyAgICAgICAgICAgICAgIG9ubGluZTsgICAgICAgICAgIC8qIENoYW5uZWwtT25saW5lIGZsYWdzICAgICAgICAgICAgICovCisJdWxvbmcgICAgICAgICAgICAgICBmbGFnczsgICAgICAgICAgICAvKiBNaXNjIGRyaXZlciBGbGFncyAgICAgICAgICAgICAgICAqLworCWludCAgICAgICAgICAgICAgICAgbG9ja3M7ICAgICAgICAgICAgLyogTnVtYmVyIG9mIGxvY2tzIGZvciB0aGlzIGRyaXZlciAgKi8KKwlpbnQgICAgICAgICAgICAgICAgIGNoYW5uZWxzOyAgICAgICAgIC8qIE51bWJlciBvZiBjaGFubmVscyAgICAgICAgICAgICAgICovCisJd2FpdF9xdWV1ZV9oZWFkX3QgICBzdF93YWl0cTsgICAgICAgICAvKiBXYWl0LVF1ZXVlIGZvciBzdGF0dXMtcmVhZCdzICAgICAqLworCWludCAgICAgICAgICAgICAgICAgbWF4YnVmc2l6ZTsgICAgICAgLyogTWF4aW11bSBCdWZmZXJzaXplIHN1cHBvcnRlZCAgICAgKi8KKwl1bnNpZ25lZCBsb25nICAgICAgIHBrdGNvdW50OyAgICAgICAgIC8qIFVudGlsIG5vdzogdW51c2VkICAgICAgICAgICAgICAgICovCisJaW50ICAgICAgICAgICAgICAgICBzdGF2YWlsOyAgICAgICAgICAvKiBDaGFycyBhdmFpbCBvbiBTdGF0dXMtZGV2aWNlICAgICAqLworCWlzZG5faWYgICAgICAgICAgICAqaW50ZXJmYWNlOyAgICAgICAgLyogSW50ZXJmYWNlIHRvIGRyaXZlciAgICAgICAgICAgICAgKi8KKwlpbnQgICAgICAgICAgICAgICAgKnJjdmVycjsgICAgICAgICAgIC8qIEVycm9yLWNvdW50ZXJzIGZvciBCLUNoLi1yZWNlaXZlICovCisJaW50ICAgICAgICAgICAgICAgICpyY3Zjb3VudDsgICAgICAgICAvKiBCeXRlLWNvdW50ZXJzIGZvciBCLUNoLi1yZWNlaXZlICAqLworI2lmZGVmIENPTkZJR19JU0ROX0FVRElPCisJdW5zaWduZWQgbG9uZyAgICAgIERMRWZsYWc7ICAgICAgICAgICAvKiBGbGFnczogSW5zZXJ0IERMRSBhdCBuZXh0IHJlYWQgICAqLworI2VuZGlmCisJc3RydWN0IHNrX2J1ZmZfaGVhZCAqcnBxdWV1ZTsgICAgICAgICAvKiBQb2ludGVycyB0byBzdGFydCBvZiBSY3YtUXVldWUgICAqLworCXdhaXRfcXVldWVfaGVhZF90ICAqcmN2X3dhaXRxOyAgICAgICAvKiBXYWl0LVF1ZXVlcyBmb3IgQi1DaGFubmVsLVJlYWRzICAqLworCXdhaXRfcXVldWVfaGVhZF90ICAqc25kX3dhaXRxOyAgICAgICAvKiBXYWl0LVF1ZXVlIGZvciBCLUNoYW5uZWwtU2VuZCdzICAqLworCWNoYXIgICAgICAgICAgICAgICBtc24yZWF6WzEwXVtJU0ROX01TTkxFTl07ICAvKiBNYXBwaW5nLVRhYmxlIE1TTi0+RUFaICAgKi8KK30gaXNkbl9kcml2ZXJfdDsKKworLyogTWFpbiBkcml2ZXItZGF0YSAqLwordHlwZWRlZiBzdHJ1Y3QgaXNkbl9kZXZ0IHsKKwlzdHJ1Y3QgbW9kdWxlICAgICAqb3duZXI7CisJc3BpbmxvY2tfdAkgIGxvY2s7CisJdW5zaWduZWQgc2hvcnQgICAgZmxhZ3M7CQkgICAgICAvKiBCaXRtYXBwZWQgRmxhZ3M6ICAgICAgICAgICAqLworCWludCAgICAgICAgICAgICAgIGRyaXZlcnM7CQkgICAgICAvKiBDdXJyZW50IG51bWJlciBvZiBkcml2ZXJzICAqLworCWludCAgICAgICAgICAgICAgIGNoYW5uZWxzOwkJICAgICAgLyogQ3VycmVudCBudW1iZXIgb2YgY2hhbm5lbHMgKi8KKwlpbnQgICAgICAgICAgICAgICBuZXRfdmVyYm9zZTsgICAgICAgICAgICAgICAgLyogVmVyYm9zZS1GbGFnICAgICAgICAgICAgICAgKi8KKwlpbnQgICAgICAgICAgICAgICBtb2RlbXBvbGw7CQkgICAgICAvKiBGbGFnOiB0dHktcmVhZCBhY3RpdmUgICAgICAqLworCXNwaW5sb2NrX3QJICB0aW1lcmxvY2s7CisJaW50ICAgICAgICAgICAgICAgdGZsYWdzOyAgICAgICAgICAgICAgICAgICAgIC8qIFRpbWVyLUZsYWdzOiAgICAgICAgICAgICAgICovCisJLyogIHNlZSBJU0ROX1RJTUVSXy4uZGVmaW5lcyAgKi8KKwlpbnQgICAgICAgICAgICAgICBnbG9iYWxfZmxhZ3M7CisJaW5mb3N0cnVjdCAgICAgICAgKmluZm9jaGFpbjsgICAgICAgICAgICAgICAgIC8qIExpc3Qgb2Ygb3BlbiBpbmZvLWRldnMuICAgICovCisJd2FpdF9xdWV1ZV9oZWFkX3QgaW5mb193YWl0cTsgICAgICAgICAgICAgICAgIC8qIFdhaXQtUXVldWUgZm9yIGlzZG5pbmZvICAgICovCisJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CQkgICAgICAvKiBNaXNjLi1mdW5jdGlvbiBUaW1lciAgICAgICAqLworCWludCAgICAgICAgICAgICAgIGNoYW5tYXBbSVNETl9NQVhfQ0hBTk5FTFNdOyAvKiBNYXAgbWlub3ItPmRldmljZS1jaGFubmVsICAqLworCWludCAgICAgICAgICAgICAgIGRydm1hcFtJU0ROX01BWF9DSEFOTkVMU107ICAvKiBNYXAgbWlub3ItPmRyaXZlci1pbmRleCAgICAqLworCWludCAgICAgICAgICAgICAgIHVzYWdlW0lTRE5fTUFYX0NIQU5ORUxTXTsgICAvKiBVc2VkIGJ5IHR0eS9pcC92b2ljZSAgICAgICAqLworCWNoYXIgICAgICAgICAgICAgIG51bVtJU0ROX01BWF9DSEFOTkVMU11bSVNETl9NU05MRU5dOworCS8qIFJlbW90ZSBudW1iZXIgb2YgYWN0aXZlIGNoLiovCisJaW50ICAgICAgICAgICAgICAgbV9pZHhbSVNETl9NQVhfQ0hBTk5FTFNdOyAgIC8qIEluZGV4IGZvciBtZG0uLi4uICAgICAgICAgICovCisJaXNkbl9kcml2ZXJfdCAgICAgKmRydltJU0ROX01BWF9EUklWRVJTXTsgICAgIC8qIEFycmF5IG9mIGRyaXZlcnMgICAgICAgICAgICovCisJaXNkbl9uZXRfZGV2ICAgICAgKm5ldGRldjsJCSAgICAgIC8qIExpbmtlZCBsaXN0IG9mIG5ldC1pZidzICAgICovCisJY2hhciAgICAgICAgICAgICAgZHJ2aWRbSVNETl9NQVhfRFJJVkVSU11bMjBdOy8qIERyaXZlci1JRCAgICAgICAgICAgICAgICAgKi8KKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByb2ZkOyAgICAgICAgICAgICAgICAgICAgLyogRm9yIGlwcm9mZCAgICAgICAgICAgICAgICAgKi8KKwlpc2RuX21vZGVtX3QgICAgICBtZG07CQkJICAgICAgLyogdHR5LWRyaXZlci1kYXRhICAgICAgICAgICAgKi8KKwlpc2RuX25ldF9kZXYgICAgICAqcnhfbmV0ZGV2W0lTRE5fTUFYX0NIQU5ORUxTXTsgLyogcnggbmV0ZGV2LXBvaW50ZXJzICAgICAqLworCWlzZG5fbmV0X2RldiAgICAgICpzdF9uZXRkZXZbSVNETl9NQVhfQ0hBTk5FTFNdOyAvKiBzdGF0IG5ldGRldi1wb2ludGVycyAgICovCisJdWxvbmcgICAgICAgICAgICAgaWJ5dGVzW0lTRE5fTUFYX0NIQU5ORUxTXTsgIC8qIFN0YXRpc3RpY3MgaW5jb21pbmcgYnl0ZXMgICovCisJdWxvbmcgICAgICAgICAgICAgb2J5dGVzW0lTRE5fTUFYX0NIQU5ORUxTXTsgIC8qIFN0YXRpc3RpY3Mgb3V0Z29pbmcgYnl0ZXMgICovCisJaW50ICAgICAgICAgICAgICAgdjExMGVtdVtJU0ROX01BWF9DSEFOTkVMU107IC8qIFYuMTEwIGVtdWxhdG9yLW1vZGUgMD1ub25lICovCisJYXRvbWljX3QgICAgICAgICAgdjExMHVzZVtJU0ROX01BWF9DSEFOTkVMU107IC8qIFVzYWdlLVNlbWFwaG9yZSBmb3Igc3RyZWFtICovCisJaXNkbl92MTEwX3N0cmVhbSAgKnYxMTBbSVNETl9NQVhfQ0hBTk5FTFNdOyAgIC8qIFYuMTEwIHByaXZhdGUgZGF0YSAgICAgICAgICovCisJc3RydWN0IHNlbWFwaG9yZSAgc2VtOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNlcmlhbGl6ZSBsaXN0IGFjY2VzcyovCisJdW5zaWduZWQgbG9uZyAgICAgZ2xvYmFsX2ZlYXR1cmVzOworfSBpc2RuX2RldjsKKworZXh0ZXJuIGlzZG5fZGV2ICpkZXY7CisKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9fSVNETl9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXNkbi9jYXBpY21kLmggYi9pbmNsdWRlL2xpbnV4L2lzZG4vY2FwaWNtZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ODYzNWYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2lzZG4vY2FwaWNtZC5oCkBAIC0wLDAgKzEsMTE1IEBACisvKiAkSWQ6IGNhcGljbWQuaCx2IDEuMi42LjIgMjAwMS8wOS8yMyAyMjoyNDozMyBrYWkgRXhwICQKKyAqIAorICogQ0FQSSAyLjAgSW50ZXJmYWNlIGZvciBMaW51eAorICogCisgKiBDb3B5cmlnaHQgMTk5NyBieSBDYXJzdGVuIFBhZXRoIDxjYWxsZUBjYWxsZS5kZT4KKyAqIAorICogVGhpcyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSB0ZXJtcworICogb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KKyAqCisgKi8KKworI2lmbmRlZiBfX0NBUElDTURfSF9fCisjZGVmaW5lIF9fQ0FQSUNNRF9IX18KKworI2RlZmluZSBDQVBJX01TR19CQVNFTEVOCQk4CisjZGVmaW5lIENBUElfREFUQV9CM19SRVFfTEVOCQkoQ0FQSV9NU0dfQkFTRUxFTis0KzQrMisyKzIpCisjZGVmaW5lIENBUElfREFUQV9CM19SRVNQX0xFTgkJKENBUElfTVNHX0JBU0VMRU4rNCsyKQorCisvKi0tLS0tIENBUEkgY29tbWFuZHMgLS0tLS0qLworI2RlZmluZSBDQVBJX0FMRVJUCQkgICAgMHgwMQorI2RlZmluZSBDQVBJX0NPTk5FQ1QJCSAgICAweDAyCisjZGVmaW5lIENBUElfQ09OTkVDVF9BQ1RJVkUJICAgIDB4MDMKKyNkZWZpbmUgQ0FQSV9DT05ORUNUX0IzX0FDVElWRQkgICAgMHg4MworI2RlZmluZSBDQVBJX0NPTk5FQ1RfQjMgCSAgICAweDgyCisjZGVmaW5lIENBUElfQ09OTkVDVF9CM19UOTBfQUNUSVZFICAweDg4CisjZGVmaW5lIENBUElfREFUQV9CMwkJICAgIDB4ODYKKyNkZWZpbmUgQ0FQSV9ESVNDT05ORUNUX0IzCSAgICAweDg0CisjZGVmaW5lIENBUElfRElTQ09OTkVDVCAJICAgIDB4MDQKKyNkZWZpbmUgQ0FQSV9GQUNJTElUWQkJICAgIDB4ODAKKyNkZWZpbmUgQ0FQSV9JTkZPCQkgICAgMHgwOAorI2RlZmluZSBDQVBJX0xJU1RFTgkJICAgIDB4MDUKKyNkZWZpbmUgQ0FQSV9NQU5VRkFDVFVSRVIJICAgIDB4ZmYKKyNkZWZpbmUgQ0FQSV9SRVNFVF9CMwkJICAgIDB4ODcKKyNkZWZpbmUgQ0FQSV9TRUxFQ1RfQl9QUk9UT0NPTAkgICAgMHg0MQorCisvKi0tLS0tIENBUEkgc3ViY29tbWFuZHMgLS0tLS0qLworCisjZGVmaW5lIENBUElfUkVRICAgIDB4ODAKKyNkZWZpbmUgQ0FQSV9DT05GICAgMHg4MQorI2RlZmluZSBDQVBJX0lORCAgICAweDgyCisjZGVmaW5lIENBUElfUkVTUCAgIDB4ODMKKworLyotLS0tLSBDQVBJIGNvbWJpbmVkIGNvbW1hbmRzIC0tLS0tKi8KKworI2RlZmluZSBDQVBJQ01EKGNtZCxzdWJjbWQpCSgoKGNtZCk8PDgpfChzdWJjbWQpKQorCisjZGVmaW5lIENBUElfRElTQ09OTkVDVF9SRVEJCUNBUElDTUQoQ0FQSV9ESVNDT05ORUNULENBUElfUkVRKQorI2RlZmluZSBDQVBJX0RJU0NPTk5FQ1RfQ09ORgkJQ0FQSUNNRChDQVBJX0RJU0NPTk5FQ1QsQ0FQSV9DT05GKQorI2RlZmluZSBDQVBJX0RJU0NPTk5FQ1RfSU5ECQlDQVBJQ01EKENBUElfRElTQ09OTkVDVCxDQVBJX0lORCkKKyNkZWZpbmUgQ0FQSV9ESVNDT05ORUNUX1JFU1AJCUNBUElDTUQoQ0FQSV9ESVNDT05ORUNULENBUElfUkVTUCkKKworI2RlZmluZSBDQVBJX0FMRVJUX1JFUQkJCUNBUElDTUQoQ0FQSV9BTEVSVCxDQVBJX1JFUSkKKyNkZWZpbmUgQ0FQSV9BTEVSVF9DT05GCQkJQ0FQSUNNRChDQVBJX0FMRVJULENBUElfQ09ORikKKworI2RlZmluZSBDQVBJX0NPTk5FQ1RfUkVRCQlDQVBJQ01EKENBUElfQ09OTkVDVCxDQVBJX1JFUSkKKyNkZWZpbmUgQ0FQSV9DT05ORUNUX0NPTkYJCUNBUElDTUQoQ0FQSV9DT05ORUNULENBUElfQ09ORikKKyNkZWZpbmUgQ0FQSV9DT05ORUNUX0lORAkJQ0FQSUNNRChDQVBJX0NPTk5FQ1QsQ0FQSV9JTkQpCisjZGVmaW5lIENBUElfQ09OTkVDVF9SRVNQCQlDQVBJQ01EKENBUElfQ09OTkVDVCxDQVBJX1JFU1ApCisKKyNkZWZpbmUgQ0FQSV9DT05ORUNUX0FDVElWRV9SRVEJCUNBUElDTUQoQ0FQSV9DT05ORUNUX0FDVElWRSxDQVBJX1JFUSkKKyNkZWZpbmUgQ0FQSV9DT05ORUNUX0FDVElWRV9DT05GCUNBUElDTUQoQ0FQSV9DT05ORUNUX0FDVElWRSxDQVBJX0NPTkYpCisjZGVmaW5lIENBUElfQ09OTkVDVF9BQ1RJVkVfSU5ECQlDQVBJQ01EKENBUElfQ09OTkVDVF9BQ1RJVkUsQ0FQSV9JTkQpCisjZGVmaW5lIENBUElfQ09OTkVDVF9BQ1RJVkVfUkVTUAlDQVBJQ01EKENBUElfQ09OTkVDVF9BQ1RJVkUsQ0FQSV9SRVNQKQorCisjZGVmaW5lIENBUElfU0VMRUNUX0JfUFJPVE9DT0xfUkVRCUNBUElDTUQoQ0FQSV9TRUxFQ1RfQl9QUk9UT0NPTCxDQVBJX1JFUSkKKyNkZWZpbmUgQ0FQSV9TRUxFQ1RfQl9QUk9UT0NPTF9DT05GCUNBUElDTUQoQ0FQSV9TRUxFQ1RfQl9QUk9UT0NPTCxDQVBJX0NPTkYpCisKKyNkZWZpbmUgQ0FQSV9DT05ORUNUX0IzX0FDVElWRV9SRVEJQ0FQSUNNRChDQVBJX0NPTk5FQ1RfQjNfQUNUSVZFLENBUElfUkVRKQorI2RlZmluZSBDQVBJX0NPTk5FQ1RfQjNfQUNUSVZFX0NPTkYJQ0FQSUNNRChDQVBJX0NPTk5FQ1RfQjNfQUNUSVZFLENBUElfQ09ORikKKyNkZWZpbmUgQ0FQSV9DT05ORUNUX0IzX0FDVElWRV9JTkQJQ0FQSUNNRChDQVBJX0NPTk5FQ1RfQjNfQUNUSVZFLENBUElfSU5EKQorI2RlZmluZSBDQVBJX0NPTk5FQ1RfQjNfQUNUSVZFX1JFU1AJQ0FQSUNNRChDQVBJX0NPTk5FQ1RfQjNfQUNUSVZFLENBUElfUkVTUCkKKworI2RlZmluZSBDQVBJX0NPTk5FQ1RfQjNfUkVRCQlDQVBJQ01EKENBUElfQ09OTkVDVF9CMyxDQVBJX1JFUSkKKyNkZWZpbmUgQ0FQSV9DT05ORUNUX0IzX0NPTkYJCUNBUElDTUQoQ0FQSV9DT05ORUNUX0IzLENBUElfQ09ORikKKyNkZWZpbmUgQ0FQSV9DT05ORUNUX0IzX0lORAkJQ0FQSUNNRChDQVBJX0NPTk5FQ1RfQjMsQ0FQSV9JTkQpCisjZGVmaW5lIENBUElfQ09OTkVDVF9CM19SRVNQCQlDQVBJQ01EKENBUElfQ09OTkVDVF9CMyxDQVBJX1JFU1ApCisKKworI2RlZmluZSBDQVBJX0NPTk5FQ1RfQjNfVDkwX0FDVElWRV9JTkQJQ0FQSUNNRChDQVBJX0NPTk5FQ1RfQjNfVDkwX0FDVElWRSxDQVBJX0lORCkKKyNkZWZpbmUgQ0FQSV9DT05ORUNUX0IzX1Q5MF9BQ1RJVkVfUkVTUAlDQVBJQ01EKENBUElfQ09OTkVDVF9CM19UOTBfQUNUSVZFLENBUElfUkVTUCkKKworI2RlZmluZSBDQVBJX0RBVEFfQjNfUkVRCQlDQVBJQ01EKENBUElfREFUQV9CMyxDQVBJX1JFUSkKKyNkZWZpbmUgQ0FQSV9EQVRBX0IzX0NPTkYJCUNBUElDTUQoQ0FQSV9EQVRBX0IzLENBUElfQ09ORikKKyNkZWZpbmUgQ0FQSV9EQVRBX0IzX0lORAkJQ0FQSUNNRChDQVBJX0RBVEFfQjMsQ0FQSV9JTkQpCisjZGVmaW5lIENBUElfREFUQV9CM19SRVNQCQlDQVBJQ01EKENBUElfREFUQV9CMyxDQVBJX1JFU1ApCisKKyNkZWZpbmUgQ0FQSV9ESVNDT05ORUNUX0IzX1JFUQkJQ0FQSUNNRChDQVBJX0RJU0NPTk5FQ1RfQjMsQ0FQSV9SRVEpCisjZGVmaW5lIENBUElfRElTQ09OTkVDVF9CM19DT05GCQlDQVBJQ01EKENBUElfRElTQ09OTkVDVF9CMyxDQVBJX0NPTkYpCisjZGVmaW5lIENBUElfRElTQ09OTkVDVF9CM19JTkQJCUNBUElDTUQoQ0FQSV9ESVNDT05ORUNUX0IzLENBUElfSU5EKQorI2RlZmluZSBDQVBJX0RJU0NPTk5FQ1RfQjNfUkVTUAkJQ0FQSUNNRChDQVBJX0RJU0NPTk5FQ1RfQjMsQ0FQSV9SRVNQKQorCisjZGVmaW5lIENBUElfUkVTRVRfQjNfUkVRCQlDQVBJQ01EKENBUElfUkVTRVRfQjMsQ0FQSV9SRVEpCisjZGVmaW5lIENBUElfUkVTRVRfQjNfQ09ORgkJQ0FQSUNNRChDQVBJX1JFU0VUX0IzLENBUElfQ09ORikKKyNkZWZpbmUgQ0FQSV9SRVNFVF9CM19JTkQJCUNBUElDTUQoQ0FQSV9SRVNFVF9CMyxDQVBJX0lORCkKKyNkZWZpbmUgQ0FQSV9SRVNFVF9CM19SRVNQCQlDQVBJQ01EKENBUElfUkVTRVRfQjMsQ0FQSV9SRVNQKQorCisjZGVmaW5lIENBUElfTElTVEVOX1JFUQkJCUNBUElDTUQoQ0FQSV9MSVNURU4sQ0FQSV9SRVEpCisjZGVmaW5lIENBUElfTElTVEVOX0NPTkYJCUNBUElDTUQoQ0FQSV9MSVNURU4sQ0FQSV9DT05GKQorCisjZGVmaW5lIENBUElfTUFOVUZBQ1RVUkVSX1JFUQkJQ0FQSUNNRChDQVBJX01BTlVGQUNUVVJFUixDQVBJX1JFUSkKKyNkZWZpbmUgQ0FQSV9NQU5VRkFDVFVSRVJfQ09ORgkJQ0FQSUNNRChDQVBJX01BTlVGQUNUVVJFUixDQVBJX0NPTkYpCisjZGVmaW5lIENBUElfTUFOVUZBQ1RVUkVSX0lORAkJQ0FQSUNNRChDQVBJX01BTlVGQUNUVVJFUixDQVBJX0lORCkKKyNkZWZpbmUgQ0FQSV9NQU5VRkFDVFVSRVJfUkVTUAkJQ0FQSUNNRChDQVBJX01BTlVGQUNUVVJFUixDQVBJX1JFU1ApCisKKyNkZWZpbmUgQ0FQSV9GQUNJTElUWV9SRVEJCUNBUElDTUQoQ0FQSV9GQUNJTElUWSxDQVBJX1JFUSkKKyNkZWZpbmUgQ0FQSV9GQUNJTElUWV9DT05GCQlDQVBJQ01EKENBUElfRkFDSUxJVFksQ0FQSV9DT05GKQorI2RlZmluZSBDQVBJX0ZBQ0lMSVRZX0lORAkJQ0FQSUNNRChDQVBJX0ZBQ0lMSVRZLENBUElfSU5EKQorI2RlZmluZSBDQVBJX0ZBQ0lMSVRZX1JFU1AJCUNBUElDTUQoQ0FQSV9GQUNJTElUWSxDQVBJX1JFU1ApCisKKyNkZWZpbmUgQ0FQSV9JTkZPX1JFUQkJCUNBUElDTUQoQ0FQSV9JTkZPLENBUElfUkVRKQorI2RlZmluZSBDQVBJX0lORk9fQ09ORgkJCUNBUElDTUQoQ0FQSV9JTkZPLENBUElfQ09ORikKKyNkZWZpbmUgQ0FQSV9JTkZPX0lORAkJCUNBUElDTUQoQ0FQSV9JTkZPLENBUElfSU5EKQorI2RlZmluZSBDQVBJX0lORk9fUkVTUAkJCUNBUElDTUQoQ0FQSV9JTkZPLENBUElfUkVTUCkKKworI2VuZGlmCQkJCS8qIF9fQ0FQSUNNRF9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXNkbi9jYXBpbGxpLmggYi9pbmNsdWRlL2xpbnV4L2lzZG4vY2FwaWxsaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1ZTliMGYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2lzZG4vY2FwaWxsaS5oCkBAIC0wLDAgKzEsMTEzIEBACisvKiAkSWQ6IGNhcGlsbGkuaCx2IDEuMS4yLjIgMjAwNC8wMS8xNiAyMTowOToyNyBrZWlsIEV4cCAkCisgKiAKKyAqIEtlcm5lbCBDQVBJIDIuMCBEcml2ZXIgSW50ZXJmYWNlIGZvciBMaW51eAorICogCisgKiBDb3B5cmlnaHQgMTk5OSBieSBDYXJzdGVuIFBhZXRoIDxjYWxsZUBjYWxsZS5kZT4KKyAqIAorICogVGhpcyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSB0ZXJtcworICogb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KKyAqCisgKi8KKworI2lmbmRlZiBfX0NBUElMTElfSF9fCisjZGVmaW5lIF9fQ0FQSUxMSV9IX18KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9jYXBpLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsY2FwaS5oPgorCit0eXBlZGVmIHN0cnVjdCBjYXBpbG9hZGRhdGFwYXJ0IHsKKwlpbnQgdXNlcjsJCS8qIGRhdGEgaW4gdXNlcnNwYWNlID8gKi8KKwlpbnQgbGVuOworCXVuc2lnbmVkIGNoYXIgKmRhdGE7Cit9IGNhcGlsb2FkZGF0YXBhcnQ7CisKK3R5cGVkZWYgc3RydWN0IGNhcGlsb2FkZGF0YSB7CisJY2FwaWxvYWRkYXRhcGFydCBmaXJtd2FyZTsKKwljYXBpbG9hZGRhdGFwYXJ0IGNvbmZpZ3VyYXRpb247Cit9IGNhcGlsb2FkZGF0YTsKKwordHlwZWRlZiBzdHJ1Y3QgY2FwaWNhcmRwYXJhbXMgeworCXVuc2lnbmVkIGludCBwb3J0OworCXVuc2lnbmVkIGlycTsKKwlpbnQgY2FyZHR5cGU7CisJaW50IGNhcmRucjsKKwl1bnNpZ25lZCBpbnQgbWVtYmFzZTsKK30gY2FwaWNhcmRwYXJhbXM7CisKK3N0cnVjdCBjYXBpX2N0ciB7CisJLyogZmlsbGVkIGluIGJlZm9yZSBjYWxsaW5nIGF0dGFjaF9jYXBpX2N0ciAqLworCXN0cnVjdCBtb2R1bGUgKm93bmVyOworCXZvaWQgKmRyaXZlcmRhdGE7CQkJLyogZHJpdmVyIHNwZWNpZmljICovCisJY2hhciBuYW1lWzMyXTsJCQkJLyogbmFtZSBvZiBjb250cm9sbGVyICovCisJY2hhciAqZHJpdmVyX25hbWU7CQkJLyogbmFtZSBvZiBkcml2ZXIgKi8KKwlpbnQgKCpsb2FkX2Zpcm13YXJlKShzdHJ1Y3QgY2FwaV9jdHIgKiwgY2FwaWxvYWRkYXRhICopOworCXZvaWQgKCpyZXNldF9jdHIpKHN0cnVjdCBjYXBpX2N0ciAqKTsKKwl2b2lkICgqcmVnaXN0ZXJfYXBwbCkoc3RydWN0IGNhcGlfY3RyICosIHUxNiBhcHBsLAorCQkJICAgICAgY2FwaV9yZWdpc3Rlcl9wYXJhbXMgKik7CisJdm9pZCAoKnJlbGVhc2VfYXBwbCkoc3RydWN0IGNhcGlfY3RyICosIHUxNiBhcHBsKTsKKwl1MTYgICgqc2VuZF9tZXNzYWdlKShzdHJ1Y3QgY2FwaV9jdHIgKiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisJCisJY2hhciAqKCpwcm9jaW5mbykoc3RydWN0IGNhcGlfY3RyICopOworCWludCAoKmN0cl9yZWFkX3Byb2MpKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAorCQkJICAgICBpbnQgY291bnQsIGludCAqZW9mLCBzdHJ1Y3QgY2FwaV9jdHIgKmNhcmQpOworCisJLyogZmlsbGVkIGluIGJlZm9yZSBjYWxsaW5nIHJlYWR5IGNhbGxiYWNrICovCisJdTggbWFudVtDQVBJX01BTlVGQUNUVVJFUl9MRU5dOwkJLyogQ0FQSV9HRVRfTUFOVUZBQ1RVUkVSICovCisJY2FwaV92ZXJzaW9uIHZlcnNpb247CQkJLyogQ0FQSV9HRVRfVkVSU0lPTiAqLworCWNhcGlfcHJvZmlsZSBwcm9maWxlOwkJCS8qIENBUElfR0VUX1BST0ZJTEUgKi8KKwl1OCBzZXJpYWxbQ0FQSV9TRVJJQUxfTEVOXTsJCS8qIENBUElfR0VUX1NFUklBTCAqLworCisJLyogbWFuYWdlbWVudCBpbmZvcm1hdGlvbiBmb3Iga2NhcGkgKi8KKworCXVuc2lnbmVkIGxvbmcgbnJlY3ZjdGxwa3Q7CisJdW5zaWduZWQgbG9uZyBucmVjdmRhdGFwa3Q7CisJdW5zaWduZWQgbG9uZyBuc2VudGN0bHBrdDsKKwl1bnNpZ25lZCBsb25nIG5zZW50ZGF0YXBrdDsKKworCWludCBjbnI7CQkJCS8qIGNvbnRyb2xsZXIgbnVtYmVyICovCisJdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgY2FyZHN0YXRlOwkvKiBjb250cm9sbGVyIHN0YXRlICovCisJdm9sYXRpbGUgaW50IGJsb2NrZWQ7CQkJLyogb3V0cHV0IGJsb2NrZWQgKi8KKwlpbnQgdHJhY2VmbGFnOwkJCQkvKiBjYXBpIHRyYWNlICovCisKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NlbnQ7CisgICAgICAgIGNoYXIgcHJvY2ZuWzEyOF07Cit9OworCitpbnQgYXR0YWNoX2NhcGlfY3RyKHN0cnVjdCBjYXBpX2N0ciAqKTsKK2ludCBkZXRhY2hfY2FwaV9jdHIoc3RydWN0IGNhcGlfY3RyICopOworCit2b2lkIGNhcGlfY3RyX3JlYWR5KHN0cnVjdCBjYXBpX2N0ciAqIGNhcmQpOwordm9pZCBjYXBpX2N0cl9yZXNldGVkKHN0cnVjdCBjYXBpX2N0ciAqIGNhcmQpOwordm9pZCBjYXBpX2N0cl9zdXNwZW5kX291dHB1dChzdHJ1Y3QgY2FwaV9jdHIgKiBjYXJkKTsKK3ZvaWQgY2FwaV9jdHJfcmVzdW1lX291dHB1dChzdHJ1Y3QgY2FwaV9jdHIgKiBjYXJkKTsKK3ZvaWQgY2FwaV9jdHJfaGFuZGxlX21lc3NhZ2Uoc3RydWN0IGNhcGlfY3RyICogY2FyZCwgdTE2IGFwcGwsIHN0cnVjdCBza19idWZmICpza2IpOworCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIG5lZWRlZCBmb3IgQVZNIGNhcGkgZHJpdmVycworCitzdHJ1Y3QgY2FwaV9kcml2ZXIgeworCWNoYXIgbmFtZVszMl07CQkJCS8qIGRyaXZlciBuYW1lICovCisJY2hhciByZXZpc2lvblszMl07CisKKwlpbnQgKCphZGRfY2FyZCkoc3RydWN0IGNhcGlfZHJpdmVyICpkcml2ZXIsIGNhcGljYXJkcGFyYW1zICpkYXRhKTsKKworCS8qIG1hbmFnZW1lbnQgaW5mb3JtYXRpb24gZm9yIGtjYXBpICovCisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OyAKK307CisKK3ZvaWQgcmVnaXN0ZXJfY2FwaV9kcml2ZXIoc3RydWN0IGNhcGlfZHJpdmVyICpkcml2ZXIpOwordm9pZCB1bnJlZ2lzdGVyX2NhcGlfZHJpdmVyKHN0cnVjdCBjYXBpX2RyaXZlciAqZHJpdmVyKTsKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBsaWJyYXJ5IGZ1bmN0aW9ucyBmb3IgdXNlIGJ5IGhhcmR3YXJlIGNvbnRyb2xsZXIgZHJpdmVycworCit2b2lkIGNhcGlsaWJfbmV3X25jY2koc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgdTE2IGFwcGxpZCwgdTMyIG5jY2ksIHUzMiB3aW5zaXplKTsKK3ZvaWQgY2FwaWxpYl9mcmVlX25jY2koc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgdTE2IGFwcGxpZCwgdTMyIG5jY2kpOwordm9pZCBjYXBpbGliX3JlbGVhc2VfYXBwbChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCB1MTYgYXBwbGlkKTsKK3ZvaWQgY2FwaWxpYl9yZWxlYXNlKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpOwordm9pZCBjYXBpbGliX2RhdGFfYjNfY29uZihzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCB1MTYgYXBwbGlkLCB1MzIgbmNjaSwgdTE2IG1zZ2lkKTsKK3UxNiAgY2FwaWxpYl9kYXRhX2IzX3JlcShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCB1MTYgYXBwbGlkLCB1MzIgbmNjaSwgdTE2IG1zZ2lkKTsKKworI2VuZGlmCQkJCS8qIF9fQ0FQSUxMSV9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXNkbi9jYXBpdXRpbC5oIGIvaW5jbHVkZS9saW51eC9pc2RuL2NhcGl1dGlsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU3OWY4MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvaXNkbi9jYXBpdXRpbC5oCkBAIC0wLDAgKzEsNTA1IEBACisvKiAkSWQ6IGNhcGl1dGlsLmgsdiAxLjUuNi4yIDIwMDEvMDkvMjMgMjI6MjQ6MzMga2FpIEV4cCAkCisgKgorICogQ0FQSSAyLjAgZGVmaW5lcyAmIHR5cGVzCisgKgorICogRnJvbSBDQVBJIDIuMCBEZXZlbG9wbWVudCBLaXQgQVZNIDE5OTUgKG1zZy5jKQorICogUmV3cml0dGVuIGZvciBMaW51eCAxOTk2IGJ5IENhcnN0ZW4gUGFldGggPGNhbGxlQGNhbGxlLmRlPgorICoKKyAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgdGVybXMKKyAqIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuCisgKgorICovCisKKyNpZm5kZWYgX19DQVBJVVRJTF9IX18KKyNkZWZpbmUgX19DQVBJVVRJTF9IX18KKworI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCisjZGVmaW5lIENBUElNU0dfQkFTRUxFTgkJOAorI2RlZmluZSBDQVBJTVNHX1U4KG0sIG9mZikJKG1bb2ZmXSkKKyNkZWZpbmUgQ0FQSU1TR19VMTYobSwgb2ZmKQkobVtvZmZdfChtWyhvZmYpKzFdPDw4KSkKKyNkZWZpbmUgQ0FQSU1TR19VMzIobSwgb2ZmKQkobVtvZmZdfChtWyhvZmYpKzFdPDw4KXwobVsob2ZmKSsyXTw8MTYpfChtWyhvZmYpKzNdPDwyNCkpCisjZGVmaW5lCUNBUElNU0dfTEVOKG0pCQlDQVBJTVNHX1UxNihtLDApCisjZGVmaW5lCUNBUElNU0dfQVBQSUQobSkJQ0FQSU1TR19VMTYobSwyKQorI2RlZmluZQlDQVBJTVNHX0NPTU1BTkQobSkJQ0FQSU1TR19VOChtLDQpCisjZGVmaW5lCUNBUElNU0dfU1VCQ09NTUFORChtKQlDQVBJTVNHX1U4KG0sNSkKKyNkZWZpbmUgQ0FQSU1TR19DTUQobSkJCSgoKG1bNF0pPDw4KXwobVs1XSkpCisjZGVmaW5lCUNBUElNU0dfTVNHSUQobSkJQ0FQSU1TR19VMTYobSw2KQorI2RlZmluZSBDQVBJTVNHX0NPTlRST0xMRVIobSkJKG1bOF0gJiAweDdmKQorI2RlZmluZSBDQVBJTVNHX0NPTlRST0wobSkJQ0FQSU1TR19VMzIobSwgOCkKKyNkZWZpbmUgQ0FQSU1TR19OQ0NJKG0pCQlDQVBJTVNHX0NPTlRST0wobSkKKyNkZWZpbmUgQ0FQSU1TR19EQVRBTEVOKG0pCUNBUElNU0dfVTE2KG0sMTYpIC8qIERBVEFfQjNfUkVRICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjYXBpbXNnX3NldHU4KHZvaWQgKm0sIGludCBvZmYsIF9fdTggdmFsKQoreworCSgoX191OCAqKW0pW29mZl0gPSB2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjYXBpbXNnX3NldHUxNih2b2lkICptLCBpbnQgb2ZmLCBfX3UxNiB2YWwpCit7CisJKChfX3U4ICopbSlbb2ZmXSA9IHZhbCAmIDB4ZmY7CisJKChfX3U4ICopbSlbb2ZmKzFdID0gKHZhbCA+PiA4KSAmIDB4ZmY7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjYXBpbXNnX3NldHUzMih2b2lkICptLCBpbnQgb2ZmLCBfX3UzMiB2YWwpCit7CisJKChfX3U4ICopbSlbb2ZmXSA9IHZhbCAmIDB4ZmY7CisJKChfX3U4ICopbSlbb2ZmKzFdID0gKHZhbCA+PiA4KSAmIDB4ZmY7CisJKChfX3U4ICopbSlbb2ZmKzJdID0gKHZhbCA+PiAxNikgJiAweGZmOworCSgoX191OCAqKW0pW29mZiszXSA9ICh2YWwgPj4gMjQpICYgMHhmZjsKK30KKworI2RlZmluZQlDQVBJTVNHX1NFVExFTihtLCBsZW4pCQljYXBpbXNnX3NldHUxNihtLCAwLCBsZW4pCisjZGVmaW5lCUNBUElNU0dfU0VUQVBQSUQobSwgYXBwbGlkKQljYXBpbXNnX3NldHUxNihtLCAyLCBhcHBsaWQpCisjZGVmaW5lCUNBUElNU0dfU0VUQ09NTUFORChtLGNtZCkJY2FwaW1zZ19zZXR1OChtLCA0LCBjbWQpCisjZGVmaW5lCUNBUElNU0dfU0VUU1VCQ09NTUFORChtLCBjbWQpCWNhcGltc2dfc2V0dTgobSwgNSwgY21kKQorI2RlZmluZQlDQVBJTVNHX1NFVE1TR0lEKG0sIG1zZ2lkKQljYXBpbXNnX3NldHUxNihtLCA2LCBtc2dpZCkKKyNkZWZpbmUJQ0FQSU1TR19TRVRDT05UUk9MKG0sIGNvbnRyKQljYXBpbXNnX3NldHUzMihtLCA4LCBjb250cikKKyNkZWZpbmUJQ0FQSU1TR19TRVREQVRBTEVOKG0sIGxlbikJY2FwaW1zZ19zZXR1MTYobSwgMTYsIGxlbikKKworLyotLS0tLSBiYXNpYy10eXBlIGRlZmluaXRpb25zIC0tLS0tKi8KKwordHlwZWRlZiBfX3U4ICpfY3N0cnVjdDsKKwordHlwZWRlZiBlbnVtIHsKKwlDQVBJX0NPTVBPU0UsCisJQ0FQSV9ERUZBVUxUCit9IF9jbXN0cnVjdDsKKworLyoKKyAgIFRoZSBfY21zZyBzdHJ1Y3R1cmUgY29udGFpbnMgYWxsIHBvc3NpYmxlIENBUEkgMi4wIHBhcmFtZXRlci4KKyAgIEFsbCBwYXJhbWV0ZXJzIGFyZSBzdG9yZWQgaGVyZSBmaXJzdC4gVGhlIGZ1bmN0aW9uIENBUElfQ01TR18yX01FU1NBR0UKKyAgIGFzc2VtYmxlcyB0aGUgcGFyYW1ldGVyIGFuZCBidWlsZHMgQ0FQSTIuMCBjb25mb3JtIG1lc3NhZ2VzLgorICAgQ0FQSV9NRVNTQUdFXzJfQ01TRyBkaXNhc3NlbWJsZXMgQ0FQSSAyLjAgbWVzc2FnZXMgYW5kIHN0b3JlcyB0aGUKKyAgIHBhcmFtZXRlciBpbiB0aGUgX2Ntc2cgc3RydWN0dXJlCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworCS8qIEhlYWRlciAqLworCV9fdTE2IEFwcGxJZDsKKwlfX3U4IENvbW1hbmQ7CisJX191OCBTdWJjb21tYW5kOworCV9fdTE2IE1lc3NhZ2VudW1iZXI7CisKKwkvKiBQYXJhbWV0ZXIgKi8KKwl1bmlvbiB7CisJCV9fdTMyIGFkckNvbnRyb2xsZXI7CisJCV9fdTMyIGFkclBMQ0k7CisJCV9fdTMyIGFkck5DQ0k7CisJfSBhZHI7CisKKwlfY21zdHJ1Y3QgQWRkaXRpb25hbEluZm87CisJX2NzdHJ1Y3QgQjFjb25maWd1cmF0aW9uOworCV9fdTE2IEIxcHJvdG9jb2w7CisJX2NzdHJ1Y3QgQjJjb25maWd1cmF0aW9uOworCV9fdTE2IEIycHJvdG9jb2w7CisJX2NzdHJ1Y3QgQjNjb25maWd1cmF0aW9uOworCV9fdTE2IEIzcHJvdG9jb2w7CisJX2NzdHJ1Y3QgQkM7CisJX2NzdHJ1Y3QgQkNoYW5uZWxpbmZvcm1hdGlvbjsKKwlfY21zdHJ1Y3QgQlByb3RvY29sOworCV9jc3RydWN0IENhbGxlZFBhcnR5TnVtYmVyOworCV9jc3RydWN0IENhbGxlZFBhcnR5U3ViYWRkcmVzczsKKwlfY3N0cnVjdCBDYWxsaW5nUGFydHlOdW1iZXI7CisJX2NzdHJ1Y3QgQ2FsbGluZ1BhcnR5U3ViYWRkcmVzczsKKwlfX3UzMiBDSVBtYXNrOworCV9fdTMyIENJUG1hc2syOworCV9fdTE2IENJUFZhbHVlOworCV9fdTMyIENsYXNzOworCV9jc3RydWN0IENvbm5lY3RlZE51bWJlcjsKKwlfY3N0cnVjdCBDb25uZWN0ZWRTdWJhZGRyZXNzOworCV9fdTMyIERhdGE7CisJX191MTYgRGF0YUhhbmRsZTsKKwlfX3UxNiBEYXRhTGVuZ3RoOworCV9jc3RydWN0IEZhY2lsaXR5Q29uZmlybWF0aW9uUGFyYW1ldGVyOworCV9jc3RydWN0IEZhY2lsaXR5ZGF0YWFycmF5OworCV9jc3RydWN0IEZhY2lsaXR5SW5kaWNhdGlvblBhcmFtZXRlcjsKKwlfY3N0cnVjdCBGYWNpbGl0eVJlcXVlc3RQYXJhbWV0ZXI7CisJX191MTYgRmFjaWxpdHlTZWxlY3RvcjsKKwlfX3UxNiBGbGFnczsKKwlfX3UzMiBGdW5jdGlvbjsKKwlfY3N0cnVjdCBITEM7CisJX191MTYgSW5mbzsKKwlfY3N0cnVjdCBJbmZvRWxlbWVudDsKKwlfX3UzMiBJbmZvTWFzazsKKwlfX3UxNiBJbmZvTnVtYmVyOworCV9jc3RydWN0IEtleXBhZGZhY2lsaXR5OworCV9jc3RydWN0IExMQzsKKwlfY3N0cnVjdCBNYW51RGF0YTsKKwlfX3UzMiBNYW51SUQ7CisJX2NzdHJ1Y3QgTkNQSTsKKwlfX3UxNiBSZWFzb247CisJX191MTYgUmVhc29uX0IzOworCV9fdTE2IFJlamVjdDsKKwlfY3N0cnVjdCBVc2VydXNlcmRhdGE7CisKKwkvKiBpbnRlcm4gKi8KKwl1bnNpZ25lZCBsLCBwOworCXVuc2lnbmVkIGNoYXIgKnBhcjsKKwlfX3U4ICptOworCisJLyogYnVmZmVyIHRvIGNvbnN0cnVjdCBtZXNzYWdlICovCisJX191OCBidWZbMTgwXTsKKworfSBfY21zZzsKKworLyoKKyAqIGNhcGlfY21zZzJtZXNzYWdlKCkgYXNzZW1ibGVzIHRoZSBwYXJhbWV0ZXIgZnJvbSBfY21zZyB0byBhIENBUEkgMi4wCisgKiBjb25mb3JtIG1lc3NhZ2UKKyAqLwordW5zaWduZWQgY2FwaV9jbXNnMm1lc3NhZ2UoX2Ntc2cgKiBjbXNnLCBfX3U4ICogbXNnKTsKKworLyoKKyAqICBjYXBpX21lc3NhZ2UyY21zZyBkaXNhc3NlbWJsZXMgYSBDQVBJIG1lc3NhZ2UgYW4gd3JpdGVzIHRoZSBwYXJhbWV0ZXIKKyAqICBpbnRvIF9jbXNnIGZvciBlYXN5IGFjY2VzcworICovCit1bnNpZ25lZCBjYXBpX21lc3NhZ2UyY21zZyhfY21zZyAqIGNtc2csIF9fdTggKiBtc2cpOworCisvKgorICogY2FwaV9jbXNnX2hlYWRlcigpIGZpbGxzIHRoZSBfY21zZyBzdHJ1Y3R1cmUgd2l0aCBkZWZhdWx0IHZhbHVlcywgc28gb25seQorICogcGFyYW1ldGVyIHdpdGggbm9uIGRlZmF1bHQgdmFsdWVzIG11c3QgYmUgY2hhbmdlZCBiZWZvcmUgc2VuZGluZyB0aGUKKyAqIG1lc3NhZ2UuCisgKi8KK3Vuc2lnbmVkIGNhcGlfY21zZ19oZWFkZXIoX2Ntc2cgKiBjbXNnLCBfX3UxNiBfQXBwbElkLAorCQkJICBfX3U4IF9Db21tYW5kLCBfX3U4IF9TdWJjb21tYW5kLAorCQkJICBfX3UxNiBfTWVzc2FnZW51bWJlciwgX191MzIgX0NvbnRyb2xsZXIpOworCisvKgorICogY2FwaV9pbmZvMnN0ciBnZW5lcmF0ZWQgYSByZWFkYWJsZSBzdHJpbmcgZm9yIENhcGkyLjAgcmVhc29ucy4KKyAqLworY2hhciAqY2FwaV9pbmZvMnN0cihfX3UxNiByZWFzb24pOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIERlYnVnZ2luZyAvIFRyYWNpbmcgZnVuY3Rpb25zCisgKi8KK2NoYXIgKmNhcGlfY21kMnN0cihfX3U4IGNtZCwgX191OCBzdWJjbWQpOworY2hhciAqY2FwaV9jbXNnMnN0cihfY21zZyAqIGNtc2cpOworY2hhciAqY2FwaV9tZXNzYWdlMnN0cihfX3U4ICogbXNnKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjYXBpX2Ntc2dfYW5zd2VyKF9jbXNnICogY21zZykKK3sKKwljbXNnLT5TdWJjb21tYW5kIHw9IDB4MDE7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIHZvaWQgY2FwaV9maWxsX0NPTk5FQ1RfQjNfUkVRKF9jbXNnICogY21zZywgX191MTYgQXBwbElkLCBfX3UxNiBNZXNzYWdlbnVtYmVyLAorCQkJCQkgICAgX191MzIgYWRyLAorCQkJCQkgICAgX2NzdHJ1Y3QgTkNQSSkKK3sKKwljYXBpX2Ntc2dfaGVhZGVyKGNtc2csIEFwcGxJZCwgMHg4MiwgMHg4MCwgTWVzc2FnZW51bWJlciwgYWRyKTsKKwljbXNnLT5OQ1BJID0gTkNQSTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNhcGlfZmlsbF9GQUNJTElUWV9SRVEoX2Ntc2cgKiBjbXNnLCBfX3UxNiBBcHBsSWQsIF9fdTE2IE1lc3NhZ2VudW1iZXIsCisJCQkJCSAgX191MzIgYWRyLAorCQkJCQkgIF9fdTE2IEZhY2lsaXR5U2VsZWN0b3IsCisJCQkJICAgICAgIF9jc3RydWN0IEZhY2lsaXR5UmVxdWVzdFBhcmFtZXRlcikKK3sKKwljYXBpX2Ntc2dfaGVhZGVyKGNtc2csIEFwcGxJZCwgMHg4MCwgMHg4MCwgTWVzc2FnZW51bWJlciwgYWRyKTsKKwljbXNnLT5GYWNpbGl0eVNlbGVjdG9yID0gRmFjaWxpdHlTZWxlY3RvcjsKKwljbXNnLT5GYWNpbGl0eVJlcXVlc3RQYXJhbWV0ZXIgPSBGYWNpbGl0eVJlcXVlc3RQYXJhbWV0ZXI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjYXBpX2ZpbGxfSU5GT19SRVEoX2Ntc2cgKiBjbXNnLCBfX3UxNiBBcHBsSWQsIF9fdTE2IE1lc3NhZ2VudW1iZXIsCisJCQkJICAgICAgX191MzIgYWRyLAorCQkJCSAgICAgIF9jc3RydWN0IENhbGxlZFBhcnR5TnVtYmVyLAorCQkJCSAgICAgIF9jc3RydWN0IEJDaGFubmVsaW5mb3JtYXRpb24sCisJCQkJICAgICAgX2NzdHJ1Y3QgS2V5cGFkZmFjaWxpdHksCisJCQkJICAgICAgX2NzdHJ1Y3QgVXNlcnVzZXJkYXRhLAorCQkJCSAgICAgIF9jc3RydWN0IEZhY2lsaXR5ZGF0YWFycmF5KQoreworCWNhcGlfY21zZ19oZWFkZXIoY21zZywgQXBwbElkLCAweDA4LCAweDgwLCBNZXNzYWdlbnVtYmVyLCBhZHIpOworCWNtc2ctPkNhbGxlZFBhcnR5TnVtYmVyID0gQ2FsbGVkUGFydHlOdW1iZXI7CisJY21zZy0+QkNoYW5uZWxpbmZvcm1hdGlvbiA9IEJDaGFubmVsaW5mb3JtYXRpb247CisJY21zZy0+S2V5cGFkZmFjaWxpdHkgPSBLZXlwYWRmYWNpbGl0eTsKKwljbXNnLT5Vc2VydXNlcmRhdGEgPSBVc2VydXNlcmRhdGE7CisJY21zZy0+RmFjaWxpdHlkYXRhYXJyYXkgPSBGYWNpbGl0eWRhdGFhcnJheTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNhcGlfZmlsbF9MSVNURU5fUkVRKF9jbXNnICogY21zZywgX191MTYgQXBwbElkLCBfX3UxNiBNZXNzYWdlbnVtYmVyLAorCQkJCQlfX3UzMiBhZHIsCisJCQkJCV9fdTMyIEluZm9NYXNrLAorCQkJCQlfX3UzMiBDSVBtYXNrLAorCQkJCQlfX3UzMiBDSVBtYXNrMiwKKwkJCQkJX2NzdHJ1Y3QgQ2FsbGluZ1BhcnR5TnVtYmVyLAorCQkJCQlfY3N0cnVjdCBDYWxsaW5nUGFydHlTdWJhZGRyZXNzKQoreworCWNhcGlfY21zZ19oZWFkZXIoY21zZywgQXBwbElkLCAweDA1LCAweDgwLCBNZXNzYWdlbnVtYmVyLCBhZHIpOworCWNtc2ctPkluZm9NYXNrID0gSW5mb01hc2s7CisJY21zZy0+Q0lQbWFzayA9IENJUG1hc2s7CisJY21zZy0+Q0lQbWFzazIgPSBDSVBtYXNrMjsKKwljbXNnLT5DYWxsaW5nUGFydHlOdW1iZXIgPSBDYWxsaW5nUGFydHlOdW1iZXI7CisJY21zZy0+Q2FsbGluZ1BhcnR5U3ViYWRkcmVzcyA9IENhbGxpbmdQYXJ0eVN1YmFkZHJlc3M7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjYXBpX2ZpbGxfQUxFUlRfUkVRKF9jbXNnICogY21zZywgX191MTYgQXBwbElkLCBfX3UxNiBNZXNzYWdlbnVtYmVyLAorCQkJCSAgICAgICBfX3UzMiBhZHIsCisJCQkJICAgICAgIF9jc3RydWN0IEJDaGFubmVsaW5mb3JtYXRpb24sCisJCQkJICAgICAgIF9jc3RydWN0IEtleXBhZGZhY2lsaXR5LAorCQkJCSAgICAgICBfY3N0cnVjdCBVc2VydXNlcmRhdGEsCisJCQkJICAgICAgIF9jc3RydWN0IEZhY2lsaXR5ZGF0YWFycmF5KQoreworCWNhcGlfY21zZ19oZWFkZXIoY21zZywgQXBwbElkLCAweDAxLCAweDgwLCBNZXNzYWdlbnVtYmVyLCBhZHIpOworCWNtc2ctPkJDaGFubmVsaW5mb3JtYXRpb24gPSBCQ2hhbm5lbGluZm9ybWF0aW9uOworCWNtc2ctPktleXBhZGZhY2lsaXR5ID0gS2V5cGFkZmFjaWxpdHk7CisJY21zZy0+VXNlcnVzZXJkYXRhID0gVXNlcnVzZXJkYXRhOworCWNtc2ctPkZhY2lsaXR5ZGF0YWFycmF5ID0gRmFjaWxpdHlkYXRhYXJyYXk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjYXBpX2ZpbGxfQ09OTkVDVF9SRVEoX2Ntc2cgKiBjbXNnLCBfX3UxNiBBcHBsSWQsIF9fdTE2IE1lc3NhZ2VudW1iZXIsCisJCQkJCSBfX3UzMiBhZHIsCisJCQkJCSBfX3UxNiBDSVBWYWx1ZSwKKwkJCQkJIF9jc3RydWN0IENhbGxlZFBhcnR5TnVtYmVyLAorCQkJCQkgX2NzdHJ1Y3QgQ2FsbGluZ1BhcnR5TnVtYmVyLAorCQkJCQkgX2NzdHJ1Y3QgQ2FsbGVkUGFydHlTdWJhZGRyZXNzLAorCQkJCQkgX2NzdHJ1Y3QgQ2FsbGluZ1BhcnR5U3ViYWRkcmVzcywKKwkJCQkJIF9fdTE2IEIxcHJvdG9jb2wsCisJCQkJCSBfX3UxNiBCMnByb3RvY29sLAorCQkJCQkgX191MTYgQjNwcm90b2NvbCwKKwkJCQkJIF9jc3RydWN0IEIxY29uZmlndXJhdGlvbiwKKwkJCQkJIF9jc3RydWN0IEIyY29uZmlndXJhdGlvbiwKKwkJCQkJIF9jc3RydWN0IEIzY29uZmlndXJhdGlvbiwKKwkJCQkJIF9jc3RydWN0IEJDLAorCQkJCQkgX2NzdHJ1Y3QgTExDLAorCQkJCQkgX2NzdHJ1Y3QgSExDLAorCQkJCQkgX2NzdHJ1Y3QgQkNoYW5uZWxpbmZvcm1hdGlvbiwKKwkJCQkJIF9jc3RydWN0IEtleXBhZGZhY2lsaXR5LAorCQkJCQkgX2NzdHJ1Y3QgVXNlcnVzZXJkYXRhLAorCQkJCQkgX2NzdHJ1Y3QgRmFjaWxpdHlkYXRhYXJyYXkpCit7CisKKwljYXBpX2Ntc2dfaGVhZGVyKGNtc2csIEFwcGxJZCwgMHgwMiwgMHg4MCwgTWVzc2FnZW51bWJlciwgYWRyKTsKKwljbXNnLT5DSVBWYWx1ZSA9IENJUFZhbHVlOworCWNtc2ctPkNhbGxlZFBhcnR5TnVtYmVyID0gQ2FsbGVkUGFydHlOdW1iZXI7CisJY21zZy0+Q2FsbGluZ1BhcnR5TnVtYmVyID0gQ2FsbGluZ1BhcnR5TnVtYmVyOworCWNtc2ctPkNhbGxlZFBhcnR5U3ViYWRkcmVzcyA9IENhbGxlZFBhcnR5U3ViYWRkcmVzczsKKwljbXNnLT5DYWxsaW5nUGFydHlTdWJhZGRyZXNzID0gQ2FsbGluZ1BhcnR5U3ViYWRkcmVzczsKKwljbXNnLT5CMXByb3RvY29sID0gQjFwcm90b2NvbDsKKwljbXNnLT5CMnByb3RvY29sID0gQjJwcm90b2NvbDsKKwljbXNnLT5CM3Byb3RvY29sID0gQjNwcm90b2NvbDsKKwljbXNnLT5CMWNvbmZpZ3VyYXRpb24gPSBCMWNvbmZpZ3VyYXRpb247CisJY21zZy0+QjJjb25maWd1cmF0aW9uID0gQjJjb25maWd1cmF0aW9uOworCWNtc2ctPkIzY29uZmlndXJhdGlvbiA9IEIzY29uZmlndXJhdGlvbjsKKwljbXNnLT5CQyA9IEJDOworCWNtc2ctPkxMQyA9IExMQzsKKwljbXNnLT5ITEMgPSBITEM7CisJY21zZy0+QkNoYW5uZWxpbmZvcm1hdGlvbiA9IEJDaGFubmVsaW5mb3JtYXRpb247CisJY21zZy0+S2V5cGFkZmFjaWxpdHkgPSBLZXlwYWRmYWNpbGl0eTsKKwljbXNnLT5Vc2VydXNlcmRhdGEgPSBVc2VydXNlcmRhdGE7CisJY21zZy0+RmFjaWxpdHlkYXRhYXJyYXkgPSBGYWNpbGl0eWRhdGFhcnJheTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNhcGlfZmlsbF9EQVRBX0IzX1JFUShfY21zZyAqIGNtc2csIF9fdTE2IEFwcGxJZCwgX191MTYgTWVzc2FnZW51bWJlciwKKwkJCQkJIF9fdTMyIGFkciwKKwkJCQkJIF9fdTMyIERhdGEsCisJCQkJCSBfX3UxNiBEYXRhTGVuZ3RoLAorCQkJCQkgX191MTYgRGF0YUhhbmRsZSwKKwkJCQkJIF9fdTE2IEZsYWdzKQoreworCisJY2FwaV9jbXNnX2hlYWRlcihjbXNnLCBBcHBsSWQsIDB4ODYsIDB4ODAsIE1lc3NhZ2VudW1iZXIsIGFkcik7CisJY21zZy0+RGF0YSA9IERhdGE7CisJY21zZy0+RGF0YUxlbmd0aCA9IERhdGFMZW5ndGg7CisJY21zZy0+RGF0YUhhbmRsZSA9IERhdGFIYW5kbGU7CisJY21zZy0+RmxhZ3MgPSBGbGFnczsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNhcGlfZmlsbF9ESVNDT05ORUNUX1JFUShfY21zZyAqIGNtc2csIF9fdTE2IEFwcGxJZCwgX191MTYgTWVzc2FnZW51bWJlciwKKwkJCQkJICAgIF9fdTMyIGFkciwKKwkJCQkJICAgIF9jc3RydWN0IEJDaGFubmVsaW5mb3JtYXRpb24sCisJCQkJCSAgICBfY3N0cnVjdCBLZXlwYWRmYWNpbGl0eSwKKwkJCQkJICAgIF9jc3RydWN0IFVzZXJ1c2VyZGF0YSwKKwkJCQkJICAgIF9jc3RydWN0IEZhY2lsaXR5ZGF0YWFycmF5KQoreworCisJY2FwaV9jbXNnX2hlYWRlcihjbXNnLCBBcHBsSWQsIDB4MDQsIDB4ODAsIE1lc3NhZ2VudW1iZXIsIGFkcik7CisJY21zZy0+QkNoYW5uZWxpbmZvcm1hdGlvbiA9IEJDaGFubmVsaW5mb3JtYXRpb247CisJY21zZy0+S2V5cGFkZmFjaWxpdHkgPSBLZXlwYWRmYWNpbGl0eTsKKwljbXNnLT5Vc2VydXNlcmRhdGEgPSBVc2VydXNlcmRhdGE7CisJY21zZy0+RmFjaWxpdHlkYXRhYXJyYXkgPSBGYWNpbGl0eWRhdGFhcnJheTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNhcGlfZmlsbF9ESVNDT05ORUNUX0IzX1JFUShfY21zZyAqIGNtc2csIF9fdTE2IEFwcGxJZCwgX191MTYgTWVzc2FnZW51bWJlciwKKwkJCQkJICAgICAgIF9fdTMyIGFkciwKKwkJCQkJICAgICAgIF9jc3RydWN0IE5DUEkpCit7CisKKwljYXBpX2Ntc2dfaGVhZGVyKGNtc2csIEFwcGxJZCwgMHg4NCwgMHg4MCwgTWVzc2FnZW51bWJlciwgYWRyKTsKKwljbXNnLT5OQ1BJID0gTkNQSTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNhcGlfZmlsbF9NQU5VRkFDVFVSRVJfUkVRKF9jbXNnICogY21zZywgX191MTYgQXBwbElkLCBfX3UxNiBNZXNzYWdlbnVtYmVyLAorCQkJCQkgICAgICBfX3UzMiBhZHIsCisJCQkJCSAgICAgIF9fdTMyIE1hbnVJRCwKKwkJCQkJICAgICAgX191MzIgQ2xhc3MsCisJCQkJCSAgICAgIF9fdTMyIEZ1bmN0aW9uLAorCQkJCQkgICAgICBfY3N0cnVjdCBNYW51RGF0YSkKK3sKKworCWNhcGlfY21zZ19oZWFkZXIoY21zZywgQXBwbElkLCAweGZmLCAweDgwLCBNZXNzYWdlbnVtYmVyLCBhZHIpOworCWNtc2ctPk1hbnVJRCA9IE1hbnVJRDsKKwljbXNnLT5DbGFzcyA9IENsYXNzOworCWNtc2ctPkZ1bmN0aW9uID0gRnVuY3Rpb247CisJY21zZy0+TWFudURhdGEgPSBNYW51RGF0YTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNhcGlfZmlsbF9SRVNFVF9CM19SRVEoX2Ntc2cgKiBjbXNnLCBfX3UxNiBBcHBsSWQsIF9fdTE2IE1lc3NhZ2VudW1iZXIsCisJCQkJCSAgX191MzIgYWRyLAorCQkJCQkgIF9jc3RydWN0IE5DUEkpCit7CisKKwljYXBpX2Ntc2dfaGVhZGVyKGNtc2csIEFwcGxJZCwgMHg4NywgMHg4MCwgTWVzc2FnZW51bWJlciwgYWRyKTsKKwljbXNnLT5OQ1BJID0gTkNQSTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNhcGlfZmlsbF9TRUxFQ1RfQl9QUk9UT0NPTF9SRVEoX2Ntc2cgKiBjbXNnLCBfX3UxNiBBcHBsSWQsIF9fdTE2IE1lc3NhZ2VudW1iZXIsCisJCQkJCQkgICBfX3UzMiBhZHIsCisJCQkJCQkgICBfX3UxNiBCMXByb3RvY29sLAorCQkJCQkJICAgX191MTYgQjJwcm90b2NvbCwKKwkJCQkJCSAgIF9fdTE2IEIzcHJvdG9jb2wsCisJCQkJCQlfY3N0cnVjdCBCMWNvbmZpZ3VyYXRpb24sCisJCQkJCQlfY3N0cnVjdCBCMmNvbmZpZ3VyYXRpb24sCisJCQkJCQlfY3N0cnVjdCBCM2NvbmZpZ3VyYXRpb24pCit7CisKKwljYXBpX2Ntc2dfaGVhZGVyKGNtc2csIEFwcGxJZCwgMHg0MSwgMHg4MCwgTWVzc2FnZW51bWJlciwgYWRyKTsKKwljbXNnLT5CMXByb3RvY29sID0gQjFwcm90b2NvbDsKKwljbXNnLT5CMnByb3RvY29sID0gQjJwcm90b2NvbDsKKwljbXNnLT5CM3Byb3RvY29sID0gQjNwcm90b2NvbDsKKwljbXNnLT5CMWNvbmZpZ3VyYXRpb24gPSBCMWNvbmZpZ3VyYXRpb247CisJY21zZy0+QjJjb25maWd1cmF0aW9uID0gQjJjb25maWd1cmF0aW9uOworCWNtc2ctPkIzY29uZmlndXJhdGlvbiA9IEIzY29uZmlndXJhdGlvbjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNhcGlfZmlsbF9DT05ORUNUX1JFU1AoX2Ntc2cgKiBjbXNnLCBfX3UxNiBBcHBsSWQsIF9fdTE2IE1lc3NhZ2VudW1iZXIsCisJCQkJCSAgX191MzIgYWRyLAorCQkJCQkgIF9fdTE2IFJlamVjdCwKKwkJCQkJICBfX3UxNiBCMXByb3RvY29sLAorCQkJCQkgIF9fdTE2IEIycHJvdG9jb2wsCisJCQkJCSAgX191MTYgQjNwcm90b2NvbCwKKwkJCQkJICBfY3N0cnVjdCBCMWNvbmZpZ3VyYXRpb24sCisJCQkJCSAgX2NzdHJ1Y3QgQjJjb25maWd1cmF0aW9uLAorCQkJCQkgIF9jc3RydWN0IEIzY29uZmlndXJhdGlvbiwKKwkJCQkJICBfY3N0cnVjdCBDb25uZWN0ZWROdW1iZXIsCisJCQkJCSAgX2NzdHJ1Y3QgQ29ubmVjdGVkU3ViYWRkcmVzcywKKwkJCQkJICBfY3N0cnVjdCBMTEMsCisJCQkJCSAgX2NzdHJ1Y3QgQkNoYW5uZWxpbmZvcm1hdGlvbiwKKwkJCQkJICBfY3N0cnVjdCBLZXlwYWRmYWNpbGl0eSwKKwkJCQkJICBfY3N0cnVjdCBVc2VydXNlcmRhdGEsCisJCQkJCSAgX2NzdHJ1Y3QgRmFjaWxpdHlkYXRhYXJyYXkpCit7CisJY2FwaV9jbXNnX2hlYWRlcihjbXNnLCBBcHBsSWQsIDB4MDIsIDB4ODMsIE1lc3NhZ2VudW1iZXIsIGFkcik7CisJY21zZy0+UmVqZWN0ID0gUmVqZWN0OworCWNtc2ctPkIxcHJvdG9jb2wgPSBCMXByb3RvY29sOworCWNtc2ctPkIycHJvdG9jb2wgPSBCMnByb3RvY29sOworCWNtc2ctPkIzcHJvdG9jb2wgPSBCM3Byb3RvY29sOworCWNtc2ctPkIxY29uZmlndXJhdGlvbiA9IEIxY29uZmlndXJhdGlvbjsKKwljbXNnLT5CMmNvbmZpZ3VyYXRpb24gPSBCMmNvbmZpZ3VyYXRpb247CisJY21zZy0+QjNjb25maWd1cmF0aW9uID0gQjNjb25maWd1cmF0aW9uOworCWNtc2ctPkNvbm5lY3RlZE51bWJlciA9IENvbm5lY3RlZE51bWJlcjsKKwljbXNnLT5Db25uZWN0ZWRTdWJhZGRyZXNzID0gQ29ubmVjdGVkU3ViYWRkcmVzczsKKwljbXNnLT5MTEMgPSBMTEM7CisJY21zZy0+QkNoYW5uZWxpbmZvcm1hdGlvbiA9IEJDaGFubmVsaW5mb3JtYXRpb247CisJY21zZy0+S2V5cGFkZmFjaWxpdHkgPSBLZXlwYWRmYWNpbGl0eTsKKwljbXNnLT5Vc2VydXNlcmRhdGEgPSBVc2VydXNlcmRhdGE7CisJY21zZy0+RmFjaWxpdHlkYXRhYXJyYXkgPSBGYWNpbGl0eWRhdGFhcnJheTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNhcGlfZmlsbF9DT05ORUNUX0FDVElWRV9SRVNQKF9jbXNnICogY21zZywgX191MTYgQXBwbElkLCBfX3UxNiBNZXNzYWdlbnVtYmVyLAorCQkJCQkJIF9fdTMyIGFkcikKK3sKKworCWNhcGlfY21zZ19oZWFkZXIoY21zZywgQXBwbElkLCAweDAzLCAweDgzLCBNZXNzYWdlbnVtYmVyLCBhZHIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2FwaV9maWxsX0NPTk5FQ1RfQjNfQUNUSVZFX1JFU1AoX2Ntc2cgKiBjbXNnLCBfX3UxNiBBcHBsSWQsIF9fdTE2IE1lc3NhZ2VudW1iZXIsCisJCQkJCQkgICAgX191MzIgYWRyKQoreworCisJY2FwaV9jbXNnX2hlYWRlcihjbXNnLCBBcHBsSWQsIDB4ODMsIDB4ODMsIE1lc3NhZ2VudW1iZXIsIGFkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjYXBpX2ZpbGxfQ09OTkVDVF9CM19SRVNQKF9jbXNnICogY21zZywgX191MTYgQXBwbElkLCBfX3UxNiBNZXNzYWdlbnVtYmVyLAorCQkJCQkgICAgIF9fdTMyIGFkciwKKwkJCQkJICAgICBfX3UxNiBSZWplY3QsCisJCQkJCSAgICAgX2NzdHJ1Y3QgTkNQSSkKK3sKKwljYXBpX2Ntc2dfaGVhZGVyKGNtc2csIEFwcGxJZCwgMHg4MiwgMHg4MywgTWVzc2FnZW51bWJlciwgYWRyKTsKKwljbXNnLT5SZWplY3QgPSBSZWplY3Q7CisJY21zZy0+TkNQSSA9IE5DUEk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjYXBpX2ZpbGxfQ09OTkVDVF9CM19UOTBfQUNUSVZFX1JFU1AoX2Ntc2cgKiBjbXNnLCBfX3UxNiBBcHBsSWQsIF9fdTE2IE1lc3NhZ2VudW1iZXIsCisJCQkJCQkJX191MzIgYWRyKQoreworCisJY2FwaV9jbXNnX2hlYWRlcihjbXNnLCBBcHBsSWQsIDB4ODgsIDB4ODMsIE1lc3NhZ2VudW1iZXIsIGFkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjYXBpX2ZpbGxfREFUQV9CM19SRVNQKF9jbXNnICogY21zZywgX191MTYgQXBwbElkLCBfX3UxNiBNZXNzYWdlbnVtYmVyLAorCQkJCQkgIF9fdTMyIGFkciwKKwkJCQkJICBfX3UxNiBEYXRhSGFuZGxlKQoreworCisJY2FwaV9jbXNnX2hlYWRlcihjbXNnLCBBcHBsSWQsIDB4ODYsIDB4ODMsIE1lc3NhZ2VudW1iZXIsIGFkcik7CisJY21zZy0+RGF0YUhhbmRsZSA9IERhdGFIYW5kbGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjYXBpX2ZpbGxfRElTQ09OTkVDVF9CM19SRVNQKF9jbXNnICogY21zZywgX191MTYgQXBwbElkLCBfX3UxNiBNZXNzYWdlbnVtYmVyLAorCQkJCQkJX191MzIgYWRyKQoreworCisJY2FwaV9jbXNnX2hlYWRlcihjbXNnLCBBcHBsSWQsIDB4ODQsIDB4ODMsIE1lc3NhZ2VudW1iZXIsIGFkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjYXBpX2ZpbGxfRElTQ09OTkVDVF9SRVNQKF9jbXNnICogY21zZywgX191MTYgQXBwbElkLCBfX3UxNiBNZXNzYWdlbnVtYmVyLAorCQkJCQkgICAgIF9fdTMyIGFkcikKK3sKKworCWNhcGlfY21zZ19oZWFkZXIoY21zZywgQXBwbElkLCAweDA0LCAweDgzLCBNZXNzYWdlbnVtYmVyLCBhZHIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2FwaV9maWxsX0ZBQ0lMSVRZX1JFU1AoX2Ntc2cgKiBjbXNnLCBfX3UxNiBBcHBsSWQsIF9fdTE2IE1lc3NhZ2VudW1iZXIsCisJCQkJCSAgIF9fdTMyIGFkciwKKwkJCQkJICAgX191MTYgRmFjaWxpdHlTZWxlY3RvcikKK3sKKworCWNhcGlfY21zZ19oZWFkZXIoY21zZywgQXBwbElkLCAweDgwLCAweDgzLCBNZXNzYWdlbnVtYmVyLCBhZHIpOworCWNtc2ctPkZhY2lsaXR5U2VsZWN0b3IgPSBGYWNpbGl0eVNlbGVjdG9yOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2FwaV9maWxsX0lORk9fUkVTUChfY21zZyAqIGNtc2csIF9fdTE2IEFwcGxJZCwgX191MTYgTWVzc2FnZW51bWJlciwKKwkJCQkgICAgICAgX191MzIgYWRyKQoreworCisJY2FwaV9jbXNnX2hlYWRlcihjbXNnLCBBcHBsSWQsIDB4MDgsIDB4ODMsIE1lc3NhZ2VudW1iZXIsIGFkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjYXBpX2ZpbGxfTUFOVUZBQ1RVUkVSX1JFU1AoX2Ntc2cgKiBjbXNnLCBfX3UxNiBBcHBsSWQsIF9fdTE2IE1lc3NhZ2VudW1iZXIsCisJCQkJCSAgICAgICBfX3UzMiBhZHIsCisJCQkJCSAgICAgICBfX3UzMiBNYW51SUQsCisJCQkJCSAgICAgICBfX3UzMiBDbGFzcywKKwkJCQkJICAgICAgIF9fdTMyIEZ1bmN0aW9uLAorCQkJCQkgICAgICAgX2NzdHJ1Y3QgTWFudURhdGEpCit7CisKKwljYXBpX2Ntc2dfaGVhZGVyKGNtc2csIEFwcGxJZCwgMHhmZiwgMHg4MywgTWVzc2FnZW51bWJlciwgYWRyKTsKKwljbXNnLT5NYW51SUQgPSBNYW51SUQ7CisJY21zZy0+Q2xhc3MgPSBDbGFzczsKKwljbXNnLT5GdW5jdGlvbiA9IEZ1bmN0aW9uOworCWNtc2ctPk1hbnVEYXRhID0gTWFudURhdGE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjYXBpX2ZpbGxfUkVTRVRfQjNfUkVTUChfY21zZyAqIGNtc2csIF9fdTE2IEFwcGxJZCwgX191MTYgTWVzc2FnZW51bWJlciwKKwkJCQkJICAgX191MzIgYWRyKQoreworCisJY2FwaV9jbXNnX2hlYWRlcihjbXNnLCBBcHBsSWQsIDB4ODcsIDB4ODMsIE1lc3NhZ2VudW1iZXIsIGFkcik7Cit9CisKKyNlbmRpZgkJCQkvKiBfX0NBUElVVElMX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pc2RuL3RwYW0uaCBiL2luY2x1ZGUvbGludXgvaXNkbi90cGFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY2NWJlYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvaXNkbi90cGFtLmgKQEAgLTAsMCArMSw1NiBAQAorLyogJElkOiB0cGFtLmgsdiAxLjEuMi4xIDIwMDEvMDYvMDggMDg6MjM6NDYga2FpIEV4cCAkCisgKgorICogVHVyYm8gUEFNIElTRE4gZHJpdmVyIGZvciBMaW51eC4gKEtlcm5lbCBEcml2ZXIpCisgKgorICogQ29weXJpZ2h0IDIwMDEgU3RlbGlhbiBQb3AgPHN0ZWxpYW4ucG9wQGZyLmFsY292ZS5jb20+LCBBbGP0dmUKKyAqCisgKiBGb3IgYWxsIHN1cHBvcnQgcXVlc3Rpb25zIHBsZWFzZSBjb250YWN0OiA8c3VwcG9ydEBhdXZlcnRlY2guZnI+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgX1RQQU1fSF8KKyNkZWZpbmUgX1RQQU1fSF8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisKKy8qIElPQ1RMIGNvbW1hbmRzICovCisjZGVmaW5lIFRQQU1fQ01EX0RTUExPQUQJMHgwMDAxCisjZGVmaW5lIFRQQU1fQ01EX0RTUFNBVkUJMHgwMDAyCisjZGVmaW5lIFRQQU1fQ01EX0RTUFJVTgkJMHgwMDAzCisjZGVmaW5lIFRQQU1fQ01EX0xPT1BNT0RFT04JMHgwMDA0CisjZGVmaW5lIFRQQU1fQ01EX0xPT1BNT0RFT0ZGCTB4MDAwNQorCisvKiBhZGRyZXNzZXMgb2YgZGVidWcgaW5mb3JtYXRpb24gem9uZXMgb24gYm9hcmQgKi8KKyNkZWZpbmUgVFBBTV9UUkFQQVVESVRfUkVHSVNURVIJCTB4MDA1NDkzZTQKKyNkZWZpbmUgVFBBTV9OQ09BVURJVF9SRUdJU1RFUgkJMHgwMDUwMDAwMAorI2RlZmluZSBUUEFNX01TR0FVRElUX1JFR0lTVEVSCQkweDAwOEUzMEYwCisKKy8qIGxlbmd0aCBvZiBkZWJ1ZyBpbmZvcm1hdGlvbiB6b25lcyBvbiBib2FyZCAqLworI2RlZmluZSBUUEFNX1RSQVBBVURJVF9MRU5HVEgJCTEwMDAwCisjZGVmaW5lIFRQQU1fTkNPQVVESVRfTEVOR1RICQkzMDAwMDAKKyNkZWZpbmUgVFBBTV9OQ09BVURJVF9DT1VOVAkJMzAKKyNkZWZpbmUgVFBBTV9NU0dBVURJVF9MRU5HVEgJCTYwMDAwCisKKy8qIElPQ1RMIGxvYWQvc2F2ZSBwYXJhbWV0ZXIgKi8KK3R5cGVkZWYgc3RydWN0IHRwYW1fZHNwX2lvY3RsIHsKKwlfX3UzMiBhZGRyZXNzOwkvKiBhZGRyZXNzIHRvIGxvYWQvc2F2ZSBkYXRhICovCisJX191MzIgZGF0YV9sZW47CS8qIHNpemUgb2YgZGF0YSB0byBiZSBsb2FkZWQvc2F2ZWQgKi8KKwlfX3U4IGRhdGFbMF07CS8qIGRhdGEgKi8KK30gdHBhbV9kc3BfaW9jdGw7CisKKyNlbmRpZiAvKiBfVFBBTV9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pc2RuX2RpdmVydGlmLmggYi9pbmNsdWRlL2xpbnV4L2lzZG5fZGl2ZXJ0aWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTdlNDRjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9pc2RuX2RpdmVydGlmLmgKQEAgLTAsMCArMSw0MiBAQAorLyogJElkOiBpc2RuX2RpdmVydGlmLmgsdiAxLjQuNi4xIDIwMDEvMDkvMjMgMjI6MjU6MDUga2FpIEV4cCAkCisgKgorICogSGVhZGVyIGZvciB0aGUgZGl2ZXJzaW9uIHN1cHBsZW1lbnRhcnkgaW50ZXJmYWNlIGZvciBpNGwuCisgKgorICogQXV0aG9yICAgIFdlcm5lciBDb3JuZWxpdXMgKHdlcm5lckB0aXRyby5kZSkKKyAqIENvcHlyaWdodCBieSBXZXJuZXIgQ29ybmVsaXVzICh3ZXJuZXJAdGl0cm8uZGUpCisgKgorICogVGhpcyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSB0ZXJtcworICogb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KKyAqCisgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBtYWdpYyB2YWx1ZSBpcyBhbHNvIHVzZWQgdG8gY29udHJvbCB2ZXJzaW9uIGluZm9ybWF0aW9uICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIERJVkVSVF9JRl9NQUdJQyAweDI1ODczNDAxCisjZGVmaW5lIERJVkVSVF9DTURfUkVHICAweDAwICAvKiByZWdpc3RlciBjb21tYW5kICovCisjZGVmaW5lIERJVkVSVF9DTURfUkVMICAweDAxICAvKiByZWxlYXNlIGNvbW1hbmQgKi8KKyNkZWZpbmUgRElWRVJUX05PX0VSUiAgIDB4MDAgIC8qIHJldHVybiB2YWx1ZSBubyBlcnJvciAqLworI2RlZmluZSBESVZFUlRfQ01EX0VSUiAgMHgwMSAgLyogaW52YWxpZCBjbWQgKi8KKyNkZWZpbmUgRElWRVJUX1ZFUl9FUlIgIDB4MDIgIC8qIG1hZ2ljL3ZlcnNpb24gaW52YWxpZCAqLworI2RlZmluZSBESVZFUlRfUkVHX0VSUiAgMHgwMyAgLyogbW9kdWxlIGFscmVhZHkgcmVnaXN0ZXJlZCAqLworI2RlZmluZSBESVZFUlRfUkVMX0VSUiAgMHgwNCAgLyogbW9kdWxlIG5vdCByZWdpc3RlcmVkICovCisjZGVmaW5lIERJVkVSVF9SRUdfTkFNRSBpc2RuX3JlZ2lzdGVyX2RpdmVydAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogc3RydWN0dXJlIGV4Y2hhbmdpbmcgZGF0YSBiZXR3ZWVuIGlzZG4gaGwgYW5kIGRpdmVydCBtb2R1bGUgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIAordHlwZWRlZiBzdHJ1Y3QKKyAgeyB1bG9uZyBpZl9tYWdpYzsgLyogbWFnaWMgaW5mbyBhbmQgdmVyc2lvbiAqLworICAgIGludCBjbWQ7IC8qIGNvbW1hbmQgKi8KKyAgICBpbnQgKCpzdGF0X2NhbGxiYWNrKShpc2RuX2N0cmwgKik7IC8qIHN1cHBsaWVkIGJ5IGRpdmVydCBtb2R1bGUgd2hlbiBjYWxsaW5nICovCisgICAgaW50ICgqbGxfY21kKShpc2RuX2N0cmwgKik7IC8qIHN1cHBsaWVkIGJ5IGhsIG9uIHJldHVybiAqLworICAgIGNoYXIgKiAoKmRydl90b19uYW1lKShpbnQpOyAvKiBtYXAgYSBkcml2ZXIgaWQgdG8gbmFtZSwgc3VwcGxpZWQgYnkgaGwgKi8KKyAgICBpbnQgKCpuYW1lX3RvX2RydikoY2hhciAqKTsgLyogbWFwIGEgZHJpdmVyIGlkIHRvIG5hbWUsIHN1cHBsaWVkIGJ5IGhsICovCisgIH0gaXNkbl9kaXZlcnRfaWY7CisKKy8qKioqKioqKioqKioqKioqKioqKiovCisvKiBmdW5jdGlvbiByZWdpc3RlciAqLworLyoqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiBpbnQgRElWRVJUX1JFR19OQU1FKGlzZG5fZGl2ZXJ0X2lmICopOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pc2RuX3BwcC5oIGIvaW5jbHVkZS9saW51eC9pc2RuX3BwcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2YjAwYTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2lzZG5fcHBwLmgKQEAgLTAsMCArMSwyNDkgQEAKKy8qIExpbnV4IElTRE4gc3Vic3lzdGVtLCBzeW5jIFBQUCwgaW50ZXJmYWNlIHRvIGlwcHBkCisgKgorICogQ29weXJpZ2h0IDE5OTQtMTk5OSAgYnkgRnJpdHogRWxmZXJ0IChmcml0ekBpc2RuNGxpbnV4LmRlKQorICogQ29weXJpZ2h0IDE5OTUsOTYgICAgVGhpbmtpbmcgT2JqZWN0cyBTb2Z0d2FyZSBHbWJIIFd1ZXJ6YnVyZworICogQ29weXJpZ2h0IDE5OTUsOTYgICAgYnkgTWljaGFlbCBIaXBwIChNaWNoYWVsLkhpcHBAc3R1ZGVudC51bmktdHVlYmluZ2VuLmRlKQorICogQ29weXJpZ2h0IDIwMDAtMjAwMiAgYnkgS2FpIEdlcm1hc2NoZXdza2kgKGthaUBnZXJtYXNjaGV3c2tpLm5hbWUpCisgKgorICogVGhpcyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSB0ZXJtcworICogb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KKyAqCisgKi8KKworI2lmbmRlZiBfTElOVVhfSVNETl9QUFBfSAorI2RlZmluZSBfTElOVVhfSVNETl9QUFBfSAorCisjZGVmaW5lIENBTExUWVBFX0lOQ09NSU5HIDB4MQorI2RlZmluZSBDQUxMVFlQRV9PVVRHT0lORyAweDIKKyNkZWZpbmUgQ0FMTFRZUEVfQ0FMTEJBQ0sgMHg0CisKKyNkZWZpbmUgSVBQUF9WRVJTSU9OICAgICIyLjIuMCIKKworc3RydWN0IHBwcGNhbGxpbmZvCit7CisgIGludCBjYWxsdHlwZTsKKyAgdW5zaWduZWQgY2hhciBsb2NhbF9udW1bNjRdOworICB1bnNpZ25lZCBjaGFyIHJlbW90ZV9udW1bNjRdOworICBpbnQgY2hhcmdlX3VuaXRzOworfTsKKworI2RlZmluZSBQUFBJT0NHQ0FMTElORk8gX0lPV1IoJ3QnLDEyOCxzdHJ1Y3QgcHBwY2FsbGluZm8pCisjZGVmaW5lIFBQUElPQ0JVTkRMRSAgIF9JT1coJ3QnLDEyOSxpbnQpCisjZGVmaW5lIFBQUElPQ0dNUEZMQUdTIF9JT1IoJ3QnLDEzMCxpbnQpCisjZGVmaW5lIFBQUElPQ1NNUEZMQUdTIF9JT1coJ3QnLDEzMSxpbnQpCisjZGVmaW5lIFBQUElPQ1NNUE1UVSAgIF9JT1coJ3QnLDEzMixpbnQpCisjZGVmaW5lIFBQUElPQ1NNUE1SVSAgIF9JT1coJ3QnLDEzMyxpbnQpCisjZGVmaW5lIFBQUElPQ0dDT01QUkVTU09SUyBfSU9SKCd0JywxMzQsdW5zaWduZWQgbG9uZyBbOF0pCisjZGVmaW5lIFBQUElPQ1NDT01QUkVTU09SIF9JT1coJ3QnLDEzNSxpbnQpCisjZGVmaW5lIFBQUElPQ0dJRk5BTUUgICAgICBfSU9SKCd0JywxMzYsIGNoYXIgW0lGTkFNU0laXSApCisKKworI2RlZmluZSBTQ19NUF9QUk9UICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgU0NfUkVKX01QX1BST1QgICAweDAwMDAwNDAwCisjZGVmaW5lIFNDX09VVF9TSE9SVF9TRVEgMHgwMDAwMDgwMAorI2RlZmluZSBTQ19JTl9TSE9SVF9TRVEgIDB4MDAwMDQwMDAKKworI2RlZmluZSBTQ19ERUNPTVBfT04JCTB4MDEKKyNkZWZpbmUgU0NfQ09NUF9PTgkJMHgwMgorI2RlZmluZSBTQ19ERUNPTVBfRElTQ0FSRAkweDA0CisjZGVmaW5lIFNDX0NPTVBfRElTQ0FSRAkJMHgwOAorI2RlZmluZSBTQ19MSU5LX0RFQ09NUF9PTgkweDEwCisjZGVmaW5lIFNDX0xJTktfQ09NUF9PTgkJMHgyMAorI2RlZmluZSBTQ19MSU5LX0RFQ09NUF9ESVNDQVJECTB4NDAKKyNkZWZpbmUgU0NfTElOS19DT01QX0RJU0NBUkQJMHg4MAorCisjZGVmaW5lIElTRE5fUFBQX0NPTVBfTUFYX09QVElPTlMgMTYKKworI2RlZmluZSBJUFBQX0NPTVBfRkxBR19YTUlUIDB4MQorI2RlZmluZSBJUFBQX0NPTVBfRkxBR19MSU5LIDB4MgorCitzdHJ1Y3QgaXNkbl9wcHBfY29tcF9kYXRhIHsKKyAgaW50IG51bTsKKyAgdW5zaWduZWQgY2hhciBvcHRpb25zW0lTRE5fUFBQX0NPTVBfTUFYX09QVElPTlNdOworICBpbnQgb3B0bGVuOworICBpbnQgZmxhZ3M7Cit9OworCisjaWZkZWYgX19LRVJORUxfXworCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2lmZGVmIENPTkZJR19JUFBQX0ZJTFRFUgorI2luY2x1ZGUgPGxpbnV4L2ZpbHRlci5oPgorI2VuZGlmCisKKyNkZWZpbmUgREVDT01QX0VSUl9OT01FTQkoLTEwKQorCisjZGVmaW5lIE1QX0VORF9GUkFHICAgIDB4NDAKKyNkZWZpbmUgTVBfQkVHSU5fRlJBRyAgMHg4MAorCisjZGVmaW5lIE1QX01BWF9RVUVVRV9MRU4JMTYKKworLyoKKyAqIFdlIG5lZWQgYSB3YXkgZm9yIHRoZSBkZWNvbXByZXNzb3IgdG8gaW5mbHVlbmNlIHRoZSBnZW5lcmF0aW9uIG9mIENDUAorICogUmVzZXQtUmVxdWVzdHMgaW4gYSB2YXJpZXR5IG9mIHdheXMuIFRoZSBkZWNvbXByZXNzb3IgaXMgYWxyZWFkeSByZXR1cm5pbmcKKyAqIGEgbG90IG9mIGluZm9ybWF0aW9uIChnZW5lcmF0ZWQgc2tiIGxlbmd0aCwgZXJyb3IgY29uZGl0aW9ucykgc28gd2UgdXNlCisgKiBhbm90aGVyIHBhcmFtZXRlci4gVGhpcyBwYXJhbWV0ZXIgaXMgYSBwb2ludGVyIHRvIGEgc3RydWN0dXJlIHdoaWNoIGlzCisgKiB0byBiZSBtYXJrZWQgdmFsaWQgYnkgdGhlIGRlY29tcHJlc3NvciBhbmQgb25seSBpbiB0aGlzIGNhc2UgaXMgZXZlciB1c2VkLgorICogRnVydGhlcm1vcmUsIHRoZSBvbmx5IGNhc2Ugd2hlcmUgdGhpcyBkYXRhIGlzIHVzZWQgaXMgd2hlbiB0aGUgZGVjb20tCisgKiBwcmVzc29yIHJldHVybnMgREVDT01QX0VSUk9SLgorICoKKyAqIFdlIHVzZSB0aGlzIHNhbWUgc3RydWN0IGZvciB0aGUgcmVzZXQgZW50cnkgb2YgdGhlIGNvbXByZXNzb3IgdG8gY29tbXUtCisgKiBuaWNhdGUgdG8gaXRzIGNhbGxlciBob3cgdG8gZGVhbCB3aXRoIHNlbmRpbmcgb2YgYSBSZXNldCBBY2suIEluIHRoaXMKKyAqIGNhc2UsIGV4cHJhIGlzIG5vdCB1c2VkLCBidXQgb3RoZXIgb3B0aW9ucyBzdGlsbCBhcHBseSAoc3VwcHJlc3NpbmcKKyAqIHNlbmRpbmcgd2l0aCByc2VuZCwgYXBwZW5kaW5nIGFyYml0cmFyeSBkYXRhLCBldGMpLgorICovCisKKyNkZWZpbmUgSVBQUF9SRVNFVF9NQVhEQVRBQllURVMJMzIKKworc3RydWN0IGlzZG5fcHBwX3Jlc2V0cGFyYW1zIHsKKyAgdW5zaWduZWQgY2hhciB2YWxpZDoxOwkvKiBydyBJcyB0aGlzIHN0cnVjdHVyZSBmaWxsZWQgYXQgYWxsID8gKi8KKyAgdW5zaWduZWQgY2hhciByc2VuZDoxOwkvKiBydyBTaG91bGQgd2Ugc2VuZCBvbmUgYXQgYWxsID8gKi8KKyAgdW5zaWduZWQgY2hhciBpZHZhbDoxOwkvKiBydyBJcyB0aGUgaWQgZmllbGQgdmFsaWQgPyAqLworICB1bnNpZ25lZCBjaGFyIGR0dmFsOjE7CS8qIHJ3IElzIHRoZSBkYXRhIGZpZWxkIHZhbGlkID8gKi8KKyAgdW5zaWduZWQgY2hhciBleHByYToxOwkvKiBydyBJcyBhbiBBY2sgZXhwZWN0ZWQgZm9yIHRoaXMgUmVxID8gKi8KKyAgdW5zaWduZWQgY2hhciBpZDsJCS8qIHdvIFNlbmQgQ0NQIFJlc2V0UmVxIHdpdGggdGhpcyBpZCAqLworICB1bnNpZ25lZCBzaG9ydCBtYXhkbGVuOwkvKiBybyBNYXggYnl0ZXMgdG8gYmUgc3RvcmVkIGluIGRhdGEgZmllbGQgKi8KKyAgdW5zaWduZWQgc2hvcnQgZGxlbjsJCS8qIHJ3IEJ5dGVzIHN0b3JlZCBpbiBkYXRhIGZpZWxkICovCisgIHVuc2lnbmVkIGNoYXIgKmRhdGE7CQkvKiB3byBEYXRhIGZvciBSZXNldFJlcSBpbmZvIGZpZWxkICovCit9OworCisvKgorICogdGhpcyBpcyBhbiAnb2xkIGZyaWVuZCcgZnJvbSBwcHAtY29tcC5oIHVuZGVyIGEgbmV3IG5hbWUgCisgKiBjaGVjayB0aGUgb3JpZ2luYWwgaW5jbHVkZSBmb3IgbW9yZSBpbmZvcm1hdGlvbgorICovCitzdHJ1Y3QgaXNkbl9wcHBfY29tcHJlc3NvciB7CisgIHN0cnVjdCBpc2RuX3BwcF9jb21wcmVzc29yICpuZXh0LCAqcHJldjsKKyAgc3RydWN0IG1vZHVsZSAqb3duZXI7CisgIGludCBudW07IC8qIENDUCBjb21wcmVzc2lvbiBwcm90b2NvbCBudW1iZXIgKi8KKyAgCisgIHZvaWQgKigqYWxsb2MpIChzdHJ1Y3QgaXNkbl9wcHBfY29tcF9kYXRhICopOworICB2b2lkICgqZnJlZSkgKHZvaWQgKnN0YXRlKTsKKyAgaW50ICAoKmluaXQpICh2b2lkICpzdGF0ZSwgc3RydWN0IGlzZG5fcHBwX2NvbXBfZGF0YSAqLAorCQlpbnQgdW5pdCxpbnQgZGVidWcpOworICAKKyAgLyogVGhlIHJlc2V0IGVudHJ5IG5lZWRzIHRvIGdldCBtb3JlIGV4YWN0IGluZm9ybWF0aW9uIGFib3V0IHRoZQorICAgICBSZXNldFJlcSBvciBSZXNldEFjayBpdCB3YXMgY2FsbGVkIHdpdGguIFRoZSBwYXJhbWV0ZXJzIGFyZQorICAgICBvYnZpb3VzLiBJZiByZXNldCBpcyBjYWxsZWQgd2l0aG91dCBhIFJlcSBvciBBY2sgZnJhbWUgd2hpY2gKKyAgICAgY291bGQgYmUgaGFuZGVkIGludG8gaXQsIGNvZGUgTVVTVCBiZSBzZXQgdG8gMC4gVXNpbmcgcnNwYXJtLAorICAgICB0aGUgcmVzZXQgZW50cnkgY2FuIGNvbnRyb2wgaWYgYW5kIGhvdyBhIFJlc2V0QWNrIGlzIHJldHVybmVkLiAqLworICAKKyAgdm9pZCAoKnJlc2V0KSAodm9pZCAqc3RhdGUsIHVuc2lnbmVkIGNoYXIgY29kZSwgdW5zaWduZWQgY2hhciBpZCwKKwkJIHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGxlbiwKKwkJIHN0cnVjdCBpc2RuX3BwcF9yZXNldHBhcmFtcyAqcnNwYXJtKTsKKyAgCisgIGludCAgKCpjb21wcmVzcykgKHZvaWQgKnN0YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqaW4sCisJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX291dCwgaW50IHByb3RvKTsKKyAgCisJaW50ICAoKmRlY29tcHJlc3MpICh2b2lkICpzdGF0ZSxzdHJ1Y3Qgc2tfYnVmZiAqaW4sCisJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYl9vdXQsCisJCQkgICAgc3RydWN0IGlzZG5fcHBwX3Jlc2V0cGFyYW1zICpyc3Bhcm0pOworICAKKyAgdm9pZCAoKmluY29tcCkgKHZvaWQgKnN0YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqaW4saW50IHByb3RvKTsKKyAgdm9pZCAoKnN0YXQpICh2b2lkICpzdGF0ZSwgc3RydWN0IGNvbXBzdGF0ICpzdGF0cyk7Cit9OworCitleHRlcm4gaW50IGlzZG5fcHBwX3JlZ2lzdGVyX2NvbXByZXNzb3Ioc3RydWN0IGlzZG5fcHBwX2NvbXByZXNzb3IgKik7CitleHRlcm4gaW50IGlzZG5fcHBwX3VucmVnaXN0ZXJfY29tcHJlc3NvcihzdHJ1Y3QgaXNkbl9wcHBfY29tcHJlc3NvciAqKTsKK2V4dGVybiBpbnQgaXNkbl9wcHBfZGlhbF9zbGF2ZShjaGFyICopOworZXh0ZXJuIGludCBpc2RuX3BwcF9oYW5ndXBfc2xhdmUoY2hhciAqKTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICB1bnNpZ25lZCBsb25nIHNlcWVycnM7CisgIHVuc2lnbmVkIGxvbmcgZnJhbWVfZHJvcHM7CisgIHVuc2lnbmVkIGxvbmcgb3ZlcmZsb3dzOworICB1bnNpZ25lZCBsb25nIG1heF9xdWV1ZV9sZW47Cit9IGlzZG5fbXBwcF9zdGF0czsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBpbnQgbXBfbXJydTsgICAgICAgICAgICAgICAgICAgICAgICAvKiB1bnVzZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0cnVjdCBza19idWZmICogZnJhZ3M7CS8qIGZyYWdtZW50cyBzbCBsaXN0IC0tIHVzZSBza2ItPm5leHQgKi8KKyAgbG9uZyBmcmFtZXM7CQkJLyogbnVtYmVyIG9mIGZyYW1lcyBpbiB0aGUgZnJhbWUgbGlzdCAqLworICB1bnNpZ25lZCBpbnQgc2VxOwkJLyogbGFzdCBwcm9jZXNzZWQgcGFja2V0IHNlcSAjOiBhbnkgcGFja2V0cworICAJCQkJICogd2l0aCBzbWFsbGVyIHNlcSAjIHdpbGwgYmUgZHJvcHBlZAorCQkJCSAqIHVuY29uZGl0aW9uYWxseSAqLworICBzcGlubG9ja190IGxvY2s7CisgIGludCByZWZfY3Q7CQkJCSAKKyAgLyogc3RhdGlzdGljcyAqLworICBpc2RuX21wcHBfc3RhdHMgc3RhdHM7Cit9IGlwcHBfYnVuZGxlOworCisjZGVmaW5lIE5VTV9SQ1ZfQlVGRlMgICAgIDY0CisKK3N0cnVjdCBpcHBwX2J1Zl9xdWV1ZSB7CisgIHN0cnVjdCBpcHBwX2J1Zl9xdWV1ZSAqbmV4dDsKKyAgc3RydWN0IGlwcHBfYnVmX3F1ZXVlICpsYXN0OworICBjaGFyICpidWY7ICAgICAgICAgICAgICAgICAvKiBOVUxMIGhlcmUgaW5kaWNhdGVzIGVuZCBvZiBxdWV1ZSAqLworICBpbnQgbGVuOworfTsKKworLyogVGhlIGRhdGEgc3RydWN0dXJlIGZvciBvbmUgQ0NQIHJlc2V0IHRyYW5zYWN0aW9uICovCitlbnVtIGlwcHBfY2NwX3Jlc2V0X3N0YXRlcyB7CisgIENDUFJlc2V0SWRsZSwKKyAgQ0NQUmVzZXRTZW50UmVxLAorICBDQ1BSZXNldFJjdmRSZXEsCisgIENDUFJlc2V0U2VudEFjaywKKyAgQ0NQUmVzZXRSY3ZkQWNrCit9OworCitzdHJ1Y3QgaXBwcF9jY3BfcmVzZXRfc3RhdGUgeworICBlbnVtIGlwcHBfY2NwX3Jlc2V0X3N0YXRlcyBzdGF0ZTsJLyogU3RhdGUgb2YgdGhpcyB0cmFuc2FjdGlvbiAqLworICBzdHJ1Y3QgaXBwcF9zdHJ1Y3QgKmlzOwkJLyogQmFja2xpbmsgdG8gZGV2aWNlIHN0dWZmICovCisgIHVuc2lnbmVkIGNoYXIgaWQ7CQkJLyogQmFja2xpbmsgaWQgaW5kZXggKi8KKyAgdW5zaWduZWQgY2hhciB0YToxOwkJCS8qIFRoZSB0aW1lciBpcyBhY3RpdmUgKGZsYWcpICovCisgIHVuc2lnbmVkIGNoYXIgZXhwcmE6MTsJCS8qIFdlIGV4cGVjdCBhIFJlc2V0QWNrIGF0IGFsbCAqLworICBpbnQgZGxlbjsJCQkJLyogRGF0YWJ5dGVzIHN0b3JlZCBpbiBkYXRhICovCisgIHN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOwkJLyogRm9yIHRpbWVvdXRzL3JldHJpZXMgKi8KKyAgLyogVGhpcyBpcyBhIGhhY2sgYnV0IHNlZW1zIHN1ZmZpY2llbnQgZm9yIHRoZSBtb21lbnQuIFdlIGRvIG5vdCB3YW50CisgICAgIHRvIGhhdmUgdGhpcyBiZSB5ZXQgYW5vdGhlciBhbGxvY2F0aW9uIGZvciBzb21lIGJ5dGVzLCBpdCBpcyBtb3JlCisgICAgIG1lbW9yeSBtYW5hZ2VtZW50IG92ZXJoZWFkIHRoYW4gdGhlIHdob2xlIG1lc3MgaXMgd29ydGguICovCisgIHVuc2lnbmVkIGNoYXIgZGF0YVtJUFBQX1JFU0VUX01BWERBVEFCWVRFU107Cit9OworCisvKiBUaGUgZGF0YSBzdHJ1Y3R1cmUga2VlcGluZyB0cmFjayBvZiB0aGUgY3VycmVudGx5IG91dHN0YW5kaW5nIENDUCBSZXNldAorICAgdHJhbnNhY3Rpb25zLiAqLworc3RydWN0IGlwcHBfY2NwX3Jlc2V0IHsKKyAgc3RydWN0IGlwcHBfY2NwX3Jlc2V0X3N0YXRlICpyc1syNTZdOwkvKiBPbmUgcGVyIHBvc3NpYmxlIGlkICovCisgIHVuc2lnbmVkIGNoYXIgbGFzdGlkOwkJCS8qIExhc3QgaWQgYWxsb2NhdGVkIGJ5IHRoZSBlbmdpbmUgKi8KK307CisKK3N0cnVjdCBpcHBwX3N0cnVjdCB7CisgIHN0cnVjdCBpcHBwX3N0cnVjdCAqbmV4dF9saW5rOworICBpbnQgc3RhdGU7CisgIHNwaW5sb2NrX3QgYnVmbG9jazsKKyAgc3RydWN0IGlwcHBfYnVmX3F1ZXVlIHJxW05VTV9SQ1ZfQlVGRlNdOyAvKiBwYWNrZXQgcXVldWUgZm9yIGlzZG5fcHBwX3JlYWQoKSAqLworICBzdHJ1Y3QgaXBwcF9idWZfcXVldWUgKmZpcnN0OyAgLyogcG9pbnRlciB0byAoY3VycmVudCkgZmlyc3QgcGFja2V0ICovCisgIHN0cnVjdCBpcHBwX2J1Zl9xdWV1ZSAqbGFzdDsgICAvKiBwb2ludGVyIHRvIChjdXJyZW50KSBsYXN0IHVzZWQgcGFja2V0IGluIHF1ZXVlICovCisgIHdhaXRfcXVldWVfaGVhZF90IHdxOworICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRrOworICB1bnNpZ25lZCBpbnQgbXBwcGNmZzsKKyAgdW5zaWduZWQgaW50IHBwcGNmZzsKKyAgdW5zaWduZWQgaW50IG1ydTsKKyAgdW5zaWduZWQgaW50IG1wbXJ1OworICB1bnNpZ25lZCBpbnQgbXBtdHU7CisgIHVuc2lnbmVkIGludCBtYXhjaWQ7CisgIHN0cnVjdCBpc2RuX25ldF9sb2NhbF9zICpscDsKKyAgaW50IHVuaXQ7CisgIGludCBtaW5vcjsKKyAgdW5zaWduZWQgaW50IGxhc3RfbGlua19zZXFubzsKKyAgbG9uZyBtcF9zZXFubzsKKyNpZmRlZiBDT05GSUdfSVNETl9QUFBfVkoKKyAgdW5zaWduZWQgY2hhciAqY2J1ZjsKKyAgc3RydWN0IHNsY29tcHJlc3MgKnNsY29tcDsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19JUFBQX0ZJTFRFUgorICBzdHJ1Y3Qgc29ja19maWx0ZXIgKnBhc3NfZmlsdGVyOwkvKiBmaWx0ZXIgZm9yIHBhY2tldHMgdG8gcGFzcyAqLworICBzdHJ1Y3Qgc29ja19maWx0ZXIgKmFjdGl2ZV9maWx0ZXI7CS8qIGZpbHRlciBmb3IgcGt0cyB0byByZXNldCBpZGxlICovCisgIHVuc2lnbmVkIHBhc3NfbGVuLCBhY3RpdmVfbGVuOworI2VuZGlmCisgIHVuc2lnbmVkIGxvbmcgZGVidWc7CisgIHN0cnVjdCBpc2RuX3BwcF9jb21wcmVzc29yICpjb21wcmVzc29yLCpkZWNvbXByZXNzb3I7CisgIHN0cnVjdCBpc2RuX3BwcF9jb21wcmVzc29yICpsaW5rX2NvbXByZXNzb3IsKmxpbmtfZGVjb21wcmVzc29yOworICB2b2lkICpkZWNvbXBfc3RhdCwqY29tcF9zdGF0LCpsaW5rX2RlY29tcF9zdGF0LCpsaW5rX2NvbXBfc3RhdDsKKyAgc3RydWN0IGlwcHBfY2NwX3Jlc2V0ICpyZXNldDsJLyogQWxsb2NhdGVkIG9uIGRlbWFuZCwgbWF5IG5ldmVyIGJlIG5lZWRlZCAqLworICB1bnNpZ25lZCBsb25nIGNvbXBmbGFnczsKK307CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYgLyogX0xJTlVYX0lTRE5fUFBQX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXNkbmlmLmggYi9pbmNsdWRlL2xpbnV4L2lzZG5pZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhNGVhY2QKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2lzZG5pZi5oCkBAIC0wLDAgKzEsNTQ3IEBACisvKiAkSWQ6IGlzZG5pZi5oLHYgMS40My4yLjIgMjAwNC8wMS8xMiAyMzowODozNSBrZWlsIEV4cCAkCisgKgorICogTGludXggSVNETiBzdWJzeXN0ZW0KKyAqIERlZmluaXRpb24gb2YgdGhlIGludGVyZmFjZSBiZXR3ZWVuIHRoZSBzdWJzeXN0ZW0gYW5kIGl0cyBsb3ctbGV2ZWwgZHJpdmVycy4KKyAqCisgKiBDb3B5cmlnaHQgMTk5NCw5NSw5NiBieSBGcml0eiBFbGZlcnQgKGZyaXR6QGlzZG40bGludXguZGUpCisgKiBDb3B5cmlnaHQgMTk5NSw5NiAgICBUaGlua2luZyBPYmplY3RzIFNvZnR3YXJlIEdtYkggV3VlcnpidXJnCisgKiAKKyAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgdGVybXMKKyAqIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuCisgKgorICovCisKKyNpZm5kZWYgX19JU0ROSUZfSF9fCisjZGVmaW5lIF9fSVNETklGX0hfXworCisKKy8qCisgKiBWYWx1ZXMgZm9yIGdlbmVyYWwgcHJvdG9jb2wtc2VsZWN0aW9uCisgKi8KKyNkZWZpbmUgSVNETl9QVFlQRV9VTktOT1dOICAgMCAgIC8qIFByb3RvY29sIHVuZGVmaW5lZCAgICovCisjZGVmaW5lIElTRE5fUFRZUEVfMVRSNiAgICAgIDEgICAvKiBnZXJtYW4gMVRSNi1wcm90b2NvbCAqLworI2RlZmluZSBJU0ROX1BUWVBFX0VVUk8gICAgICAyICAgLyogRURTUzEtcHJvdG9jb2wgICAgICAgKi8KKyNkZWZpbmUgSVNETl9QVFlQRV9MRUFTRUQgICAgMyAgIC8qIGZvciBsZWFzZWQgbGluZXMgICAgICovCisjZGVmaW5lIElTRE5fUFRZUEVfTkkxICAgICAgIDQgICAvKiBVUyBOSS0xIHByb3RvY29sICAgICAqLworI2RlZmluZSBJU0ROX1BUWVBFX01BWCAgICAgICA3ICAgLyogTWF4LiA4IFByb3RvY29scyAgICAgKi8KKworLyoKKyAqIFZhbHVlcyBmb3IgTGF5ZXItMi1wcm90b2NvbC1zZWxlY3Rpb24KKyAqLworI2RlZmluZSBJU0ROX1BST1RPX0wyX1g3NUkgICAwICAgLyogWDc1L0xBUEIgd2l0aCBJLUZyYW1lcyAgICAgICAgICAgICovCisjZGVmaW5lIElTRE5fUFJPVE9fTDJfWDc1VUkgIDEgICAvKiBYNzUvTEFQQiB3aXRoIFVJLUZyYW1lcyAgICAgICAgICAgKi8KKyNkZWZpbmUgSVNETl9QUk9UT19MMl9YNzVCVUkgMiAgIC8qIFg3NS9MQVBCIHdpdGggVUktRnJhbWVzICAgICAgICAgICAqLworI2RlZmluZSBJU0ROX1BST1RPX0wyX0hETEMgICAzICAgLyogSERMQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIElTRE5fUFJPVE9fTDJfVFJBTlMgIDQgICAvKiBUcmFuc3BhcmVudCAoVm9pY2UpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSVNETl9QUk9UT19MMl9YMjVEVEUgNSAgIC8qIFgyNS9MQVBCIERURSBtb2RlICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJU0ROX1BST1RPX0wyX1gyNURDRSA2ICAgLyogWDI1L0xBUEIgRENFIG1vZGUgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIElTRE5fUFJPVE9fTDJfVjExMDk2IDcgICAvKiBWLjExMCBiaXRyYXRlIGFkYXB0aW9uIDk2MDAgQmF1ZCAgKi8KKyNkZWZpbmUgSVNETl9QUk9UT19MMl9WMTEwMTkgOCAgIC8qIFYuMTEwIGJpdHJhdGUgYWRhcHRpb24gMTkyMDAgQmF1ZCAqLworI2RlZmluZSBJU0ROX1BST1RPX0wyX1YxMTAzOCA5ICAgLyogVi4xMTAgYml0cmF0ZSBhZGFwdGlvbiAzODQwMCBCYXVkICovCisjZGVmaW5lIElTRE5fUFJPVE9fTDJfTU9ERU0gIDEwICAvKiBBbmFsb2cgTW9kZW0gb24gQm9hcmQgKi8KKyNkZWZpbmUgSVNETl9QUk9UT19MMl9GQVggICAgMTEgIC8qIEZheCBHcm91cCAyLzMgICAgICAgICAqLworI2RlZmluZSBJU0ROX1BST1RPX0wyX0hETENfNTZLIDEyICAgLyogSERMQyA1NmsgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIElTRE5fUFJPVE9fTDJfTUFYICAgIDE1ICAvKiBNYXguIDE2IFByb3RvY29scyAgICAgICAgICAgICAgICAgKi8KKworLyoKKyAqIFZhbHVlcyBmb3IgTGF5ZXItMy1wcm90b2NvbC1zZWxlY3Rpb24KKyAqLworI2RlZmluZSBJU0ROX1BST1RPX0wzX1RSQU5TCTAJLyogVHJhbnNwYXJlbnQgKi8KKyNkZWZpbmUgSVNETl9QUk9UT19MM19UUkFOU0RTUAkxCS8qIFRyYW5zcGFyZW50IHdpdGggRFNQICovCisjZGVmaW5lIElTRE5fUFJPVE9fTDNfRkNMQVNTMgkyCS8qIEZheCBHcm91cCAyLzMgQ0xBU1MgMiAqLworI2RlZmluZSBJU0ROX1BST1RPX0wzX0ZDTEFTUzEJMwkvKiBGYXggR3JvdXAgMi8zIENMQVNTIDEgKi8KKyNkZWZpbmUgSVNETl9QUk9UT19MM19NQVgJNwkvKiBNYXguIDggUHJvdG9jb2xzICovCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEV4dGVuc2lvbnMgbWFkZSBieSBXZXJuZXIgQ29ybmVsaXVzICh3ZXJuZXJAaWt0LmRlKSAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAKKy8qIFRoZSBwcm9jZWVkIGNvbW1hbmQgaG9sZHMgYSBpbmNvbWluZyBjYWxsIGluIGEgc3RhdGUgdG8gbGVhdmUgcHJvY2Vzc2VzICovCisvKiBlbm91Z2ggdGltZSB0byBjaGVjayB3aGV0aGVyIGlzdCBzaG91bGQgYmUgYWNjZXB0ZWQuICAgICAgICAgICAgICAgICAgICAqLworLyogVGhlIFBST1RfSU8gQ29tbWFuZCBleHRlbmRzIHRoZSBpbnRlcmZhY2UgdG8gbWFrZSBwcm90b2NvbCBkZXBlbmRlbnQgICAgKi8KKy8qIGZlYXR1cmVzIGF2YWlsYWJsZSAoY2FsbCBkaXZlcnNpb24sIGNhbGwgd2FpdGluZy4uLikuICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAKKy8qIFRoZSBQUk9UX0lPIENvbW1hbmQgaXMgZXhlY3V0ZWQgd2l0aCB0aGUgZGVzaXJlZCBkcml2ZXIgaWQgYW5kIHRoZSBhcmcgICovCisvKiBwYXJhbWV0ZXIgY29kZWQgYXMgZm9sbG93czogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogVGhlIGxvd2VyIDggYml0cyBvZiBhcmcgY29udGFpbiB0aGUgZGVzaXJlZCBwcm90b2NvbCBmcm9tIElTRE5fUFRZUEUgICAgKi8KKy8qIGRlZmluaXRpb25zLiBUaGUgdXBwZXIgMjQgYml0cyByZXByZXNlbnQgdGhlIHByb3RvY29sIHNwZWNpZmljIGNtZC9zdGF0LiovCisvKiBBbnkgYWRkaXRpb25hbCBkYXRhIGlzIHByb3RvY29sIGFuZCBjb21tYW5kIHNwZWNpZmljLiAgICAgICAgICAgICAgICAgICAqLworLyogVGhpcyBtZWNoYW5pc20gYWxzbyBhcHBsaWVzIHRvIHRoZSBzdGF0Y2FsbGIgY2FsbGJhY2sgU1RBVF9QUk9ULiAgICAgICAgKi8gICAgCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogVGhpcyBzdWdnZXN0ZWQgZXh0ZW5zaW9uIHBlcm1pdHMgYW4gZWFzeSBleHBhbnNpb24gb2YgcHJvdG9jb2wgc3BlY2lmaWMgKi8KKy8qIGhhbmRsaW5nLiBFeHRlbnNpb25zIG1heSBiZSBhZGRlZCBhdCBhbnkgdGltZSB3aXRob3V0IGNoYW5naW5nIHRoZSBITCAgICovCisvKiBkcml2ZXIgY29kZSBhbmQgbm90IGdldHRpbmcgY29uZmxpY3RzIHdpdGhvdXQgY2VydGlmaWNhdGlvbnMuICAgICAgICAgICAqLworLyogVGhlIHdlbGwga25vd24gQ0FQSSAyLjAgaW50ZXJmYWNlIGhhbmRsZXMgc3VjaCBleHRlbnNpb25zIGluIGEgc2ltaWxhciAgKi8KKy8qIHdheS4gUGVyaGFwcyBhIHByb3RvY29sIHNwZWNpZmljIG1vZHVsZSBtYXkgYmUgYWRkZWQgYW5kIHNlcGFyYXRlbHkgICAgICovCisvKiBsb2FkZWQgYW5kIGxpbmtlZCB0byB0aGUgYmFzaWMgaXNkbiBtb2R1bGUgZm9yIGhhbmRsaW5nLiAgICAgICAgICAgICAgICAqLyAgICAgICAgICAgICAgICAgICAgCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKiovCisvKiBEU1MxIGNvbW1hbmRzICovIAorLyoqKioqKioqKioqKioqKioqLworI2RlZmluZSBEU1MxX0NNRF9JTlZPS0UgICAgICAgKCgweDAwIDw8IDgpIHwgSVNETl9QVFlQRV9FVVJPKSAgIC8qIGludm9rZSBhIHN1cHBsZW1lbnRhcnkgc2VydmljZSAqLworI2RlZmluZSBEU1MxX0NNRF9JTlZPS0VfQUJPUlQgKCgweDAxIDw8IDgpIHwgSVNETl9QVFlQRV9FVVJPKSAgIC8qIGFib3J0IGEgaW52b2tlIGNtZCAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIERTUzEgU3RhdHVzIGNhbGxiYWNrIHZhbHVlcyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIERTUzFfU1RBVF9JTlZPS0VfUkVTICAoKDB4ODAgPDwgOCkgfCBJU0ROX1BUWVBFX0VVUk8pICAgLyogUmVzdWx0IGZvciBpbnZvY2F0aW9uICovCisjZGVmaW5lIERTUzFfU1RBVF9JTlZPS0VfRVJSICAoKDB4ODEgPDwgOCkgfCBJU0ROX1BUWVBFX0VVUk8pICAgLyogRXJyb3IgUmV0dXJuIGZvciBpbnZvY2F0aW9uICovCisjZGVmaW5lIERTUzFfU1RBVF9JTlZPS0VfQlJEICAoKDB4ODIgPDwgOCkgfCBJU0ROX1BUWVBFX0VVUk8pICAgLyogRGVsaXZlciBpbnZva2UgYnJvYWRjYXN0IGluZm8gKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogc3RydWN0dXJlcyBmb3IgRFNTMSBjb21tYW5kcyBhbmQgY2FsbGJhY2sgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBBbiBhY3Rpb24gaXMgaW52b2tlZCBieSBzZW5kaW5nIGEgRFNTMV9DTURfSU5WT0tFLiBUaGUgbGxfaWQsIHByb2MqLworLyogdGltZW91dCwgZGF0YWxlbiBhbmQgZGF0YSBmaWVsZHMgbXVzdCBiZSBzZXQgYmVmb3JlIGNhbGxpbmcuICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgcG9zaXRpdmUgaGxfaWQgdmFsdWUgYWxzbyBkZWxpdmVyZWQgaW4gdGhlICAqLworLyogaGxfaWQgZmllbGQuIEEgdmFsdWUgb2YgemVybyBzaWduYWxzIG5vIG1vcmUgbGVmdCBobF9pZCBjYXBhY2l0eXMuKi8KKy8qIEEgbmVnYXRpdmUgcmV0dXJuIHZhbHVlIHNpZ25hbHMgZXJyb3JzIGluIExMLiBTbyBpZiB0aGUgcmV0dXJuICAgICovCisvKiB2YWx1ZSBpcyA8PSAwIG5vIGFjdGlvbiBpbiBMTCB3aWxsIGJlIHRha2VuIC0+IHJlcXVlc3QgaWdub3JlZCAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIFRoZSB0aW1lb3V0IGZpZWxkIG11c3QgYmUgZmlsbGVkIHdpdGggYSBwb3NpdGl2ZSB2YWx1ZSBzcGVjaWZ5aW5nICovCisvKiB0aGUgYW1vdW50IG9mIHRpbWUgdGhlIElOVk9LRUQgcHJvY2VzcyB3YWl0cyBmb3IgYSByZWFjdGlvbiBmcm9tICAqLworLyogdGhlIG5ldHdvcmsuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIElmIGEgcmVzcG9uc2UgKGVpdGhlciBlcnJvciBvciByZXN1bHQpIGlzIHJlY2VpdmVkIGR1cmluZyB0aGlzICAgICovCisvKiBpbnRlcnZhbGwsIGEgcmVwb3J0aW5nIGNhbGxiYWNrIGlzIGluaXRpYXRlZCBhbmQgdGhlIHByb2Nlc3Mgd2lsbCAqLworLyogYmUgZGVsZXRlZCwgdGhlIGhsIGlkZW50aWZpZXIgd2lsbCBiZSBmcmVlZC4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIElmIG5vIHJlc3BvbnNlIGlzIHJlY2VpdmVkIGR1cmluZyB0aGUgc3BlY2lmaWVkIGludGVydmFsbCwgYSBlcnJvciovCisvKiBjYWxsYmFjayBpcyBpbml0aWF0ZWQgd2l0aCB0aW1lb3V0IHNldCB0byAtMSBhbmQgYSBkYXRhbGVuIHNldCAgICAqLworLyogdG8gMC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIElmIHRpbWVvdXQgaXMgc2V0IHRvIGEgdmFsdWUgPD0gMCBkdXJpbmcgSU5WT0NBVElPTiB0aGUgcHJvY2VzcyBpcyovCisvKiBpbW1lZGlhdGVseSBkZWxldGVkIGFmdGVyIHNlbmRpbmcgdGhlIGRhdGEuIE5vIGNhbGxiYWNrIG9jY3VycyAhICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIEEgY3VycmVudGx5IHdhaXRpbmcgcHJvY2VzcyBtYXkgYmUgYWJvcnRlZCB3aXRoIElOVk9LRV9BQk9SVC4gTm8gICovCisvKiBjYWxsYmFjayB3aWxsIG9jY3VyIHdoZW4gYSBwcm9jZXNzIGhhcyBiZWVuIGFib3J0ZWQuICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIEJyb2FkY2FzdCBpbnZva2UgZnJhbWVzIGZyb20gdGhlIG5ldHdvcmsgYXJlIHJlcG9ydGVkIHZpYSB0aGUgICAgICovCisvKiBTVEFUX0lOVk9LRV9CUkQgY2FsbGJhY2suIFRoZSBsbF9pZCBpcyBzZXQgdG8gMCwgdGhlIG90aGVyIGZpZWxkcyAqLworLyogYXJlIHN1cHBsaWVkIGJ5IHRoZSBuZXR3b3JrIGFuZCBub3QgYnkgdGhlIEhMLiAgICAgICAgICAgICAgICAgICAgKi8gICAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKi8KKy8qIE5JMSBjb21tYW5kcyAqLyAKKy8qKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgTkkxX0NNRF9JTlZPS0UgICAgICAgKCgweDAwIDw8IDgpIHwgSVNETl9QVFlQRV9OSTEpICAgLyogaW52b2tlIGEgc3VwcGxlbWVudGFyeSBzZXJ2aWNlICovCisjZGVmaW5lIE5JMV9DTURfSU5WT0tFX0FCT1JUICgoMHgwMSA8PCA4KSB8IElTRE5fUFRZUEVfTkkxKSAgIC8qIGFib3J0IGEgaW52b2tlIGNtZCAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIE5JMSBTdGF0dXMgY2FsbGJhY2sgdmFsdWVzICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgTkkxX1NUQVRfSU5WT0tFX1JFUyAgKCgweDgwIDw8IDgpIHwgSVNETl9QVFlQRV9OSTEpICAgLyogUmVzdWx0IGZvciBpbnZvY2F0aW9uICovCisjZGVmaW5lIE5JMV9TVEFUX0lOVk9LRV9FUlIgICgoMHg4MSA8PCA4KSB8IElTRE5fUFRZUEVfTkkxKSAgIC8qIEVycm9yIFJldHVybiBmb3IgaW52b2NhdGlvbiAqLworI2RlZmluZSBOSTFfU1RBVF9JTlZPS0VfQlJEICAoKDB4ODIgPDwgOCkgfCBJU0ROX1BUWVBFX05JMSkgICAvKiBEZWxpdmVyIGludm9rZSBicm9hZGNhc3QgaW5mbyAqLworCit0eXBlZGVmIHN0cnVjdAorICB7IHVsb25nIGxsX2lkOyAvKiBJRCBzdXBwbGllZCBieSBMTCB3aGVuIGV4ZWN1dGluZyAgICAqLworCQkgLyogYSBjb21tYW5kIGFuZCByZXR1cm5lZCBieSBITCBmb3IgICAgKi8KKyAgICAgICAgICAgICAgICAgLyogSU5WT0tFX1JFUyBhbmQgSU5WT0tFX0VSUiAgICAgICAgICAgKi8KKyAgICBpbnQgaGxfaWQ7ICAgLyogSUQgc3VwcGxpZWQgYnkgSEwgd2hlbiBjYWxsZWQgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgLyogZm9yIGV4ZWN1dGluZyBhIGNtZCBhbmQgZGVsaXZlcmVkICAgKi8KKyAgICAgICAgICAgICAgICAgLyogZm9yIHJlc3VsdHMgYW5kIGVycm9ycyAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgLyogbXVzdCBiZSBzdXBwbGllZCBieSBMTCB3aGVuIGFib3J0aW5nKi8gIAorICAgIGludCBwcm9jOyAgICAvKiBpbnZva2UgcHJvY2VkdXJlIHVzZWQgYnkgQ01EX0lOVk9LRSAqLworICAgICAgICAgICAgICAgICAvKiByZXR1cm5lZCBieSBjYWxsYmFjayBhbmQgYnJvYWRjYXN0ICAqLyAKKyAgICBpbnQgdGltZW91dDsgLyogdGltZW91dCBmb3IgSU5WT0tFIENNRCBpbiBtcyAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgLyogLTEgIGluIHN0YXQgY2FsbGJhY2sgd2hlbiB0aW1lZCBvdXQgKi8KKyAgICAgICAgICAgICAgICAgLyogZXJyb3IgdmFsdWUgd2hlbiBlcnJvciBjYWxsYmFjayAgICAgKi8KKyAgICBpbnQgZGF0YWxlbjsgLyogbGVuZ3RoIG9mIGNtZCBvciBzdGF0IGRhdGEgICAgICAgICAgKi8KKyAgICB1X2NoYXIgKmRhdGE7LyogcG9pbnRlciB0byBkYXRhIGRlbGl2ZXJlZCBvciBzZW5kICAgKi8KKyAgfSBpc2RuX2NtZF9zdGF0OworCisvKgorICogQ29tbWFuZHMgZnJvbSBsaW5rbGV2ZWwgdG8gbG93bGV2ZWwKKyAqCisgKi8KKyNkZWZpbmUgSVNETl9DTURfSU9DVEwgICAgMCAgICAgICAvKiBQZXJmb3JtIGlvY3RsICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIElTRE5fQ01EX0RJQUwgICAgIDEgICAgICAgLyogRGlhbCBvdXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJU0ROX0NNRF9BQ0NFUFREICAyICAgICAgIC8qIEFjY2VwdCBhbiBpbmNvbWluZyBjYWxsIG9uIEQtQ2hhbi4gICAgKi8KKyNkZWZpbmUgSVNETl9DTURfQUNDRVBUQiAgMyAgICAgICAvKiBSZXF1ZXN0IEItQ2hhbm5lbCBjb25uZWN0LiAgICAgICAgICAgICovCisjZGVmaW5lIElTRE5fQ01EX0hBTkdVUCAgIDQgICAgICAgLyogSGFuZ3VwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJU0ROX0NNRF9DTFJFQVogICA1ICAgICAgIC8qIENsZWFyIEVBWihzKSBvZiBjaGFubmVsICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSVNETl9DTURfU0VURUFaICAgNiAgICAgICAvKiBTZXQgRUFaKHMpIG9mIGNoYW5uZWwgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIElTRE5fQ01EX0dFVEVBWiAgIDcgICAgICAgLyogR2V0IEVBWihzKSBvZiBjaGFubmVsICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJU0ROX0NNRF9TRVRTSUwgICA4ICAgICAgIC8qIFNldCBTZXJ2aWNlLUluZGljYXRvci1MaXN0IG9mIGNoYW5uZWwgKi8KKyNkZWZpbmUgSVNETl9DTURfR0VUU0lMICAgOSAgICAgICAvKiBHZXQgU2VydmljZS1JbmRpY2F0b3ItTGlzdCBvZiBjaGFubmVsICovCisjZGVmaW5lIElTRE5fQ01EX1NFVEwyICAgMTAgICAgICAgLyogU2V0IEItQ2hhbi4gTGF5ZXIyLVBhcmFtZXRlciAgICAgICAgICAqLworI2RlZmluZSBJU0ROX0NNRF9HRVRMMiAgIDExICAgICAgIC8qIEdldCBCLUNoYW4uIExheWVyMi1QYXJhbWV0ZXIgICAgICAgICAgKi8KKyNkZWZpbmUgSVNETl9DTURfU0VUTDMgICAxMiAgICAgICAvKiBTZXQgQi1DaGFuLiBMYXllcjMtUGFyYW1ldGVyICAgICAgICAgICovCisjZGVmaW5lIElTRE5fQ01EX0dFVEwzICAgMTMgICAgICAgLyogR2V0IEItQ2hhbi4gTGF5ZXIzLVBhcmFtZXRlciAgICAgICAgICAqLworLy8gI2RlZmluZSBJU0ROX0NNRF9MT0NLICAgIDE0ICAgICAgIC8qIFNpZ25hbCB1c2FnZSBieSB1cHBlciBsZXZlbHMgICAgICAgICAgKi8KKy8vICNkZWZpbmUgSVNETl9DTURfVU5MT0NLICAxNSAgICAgICAvKiBSZWxlYXNlIHVzYWdlLWxvY2sgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIElTRE5fQ01EX1NVU1BFTkQgMTYgICAgICAgLyogU3VzcGVuZCBjb25uZWN0aW9uICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJU0ROX0NNRF9SRVNVTUUgIDE3ICAgICAgIC8qIFJlc3VtZSBjb25uZWN0aW9uICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSVNETl9DTURfUFJPQ0VFRCAxOCAgICAgICAvKiBQcm9jZWVkIHdpdGggY2FsbCBlc3RhYmxpc2htZW50ICAgICAgICovCisjZGVmaW5lIElTRE5fQ01EX0FMRVJUICAgMTkgICAgICAgLyogQWxlcnQgYWZ0ZXIgUHJvY2VlZGluZyAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJU0ROX0NNRF9SRURJUiAgIDIwICAgICAgIC8qIFJlZGlyIGEgaW5jb21pbmcgY2FsbCAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSVNETl9DTURfUFJPVF9JTyAyMSAgICAgICAvKiBQcm90b2NvbCBzcGVjaWZpYyBjb21tYW5kcyAgICAgICAgICAgICovCisjZGVmaW5lIENBUElfUFVUX01FU1NBR0UgMjIgICAgICAgLyogQ0FQSSBtZXNzYWdlIHNlbmQgZG93biBvciB1cCAgICAgICAgICAqLworI2RlZmluZSBJU0ROX0NNRF9GQVhDTUQgIDIzICAgICAgIC8qIEZBWCBjb21tYW5kcyB0byBITC1kcml2ZXIgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSVNETl9DTURfQVVESU8gICAyNCAgICAgICAvKiBEU1AsIERUTUYsIC4uLiBzZXR0aW5ncyAgICAgICAgICAgICAgICovCisKKy8qCisgKiBTdGF0dXMtVmFsdWVzIGRlbGl2ZXJlZCBmcm9tIGxvd2xldmVsIHRvIGxpbmtsZXZlbCB2aWEKKyAqIHN0YXRjYWxsYigpLgorICoKKyAqLworI2RlZmluZSBJU0ROX1NUQVRfU1RBVkFJTCAyNTYgICAgLyogUmF3IHN0YXR1cy1kYXRhIGF2YWlsYWJsZSAgICAgICAgICAgICAqLworI2RlZmluZSBJU0ROX1NUQVRfSUNBTEwgICAyNTcgICAgLyogSW5jb21pbmcgY2FsbCBkZXRlY3RlZCAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJU0ROX1NUQVRfUlVOICAgICAyNTggICAgLyogU2lnbmFsIHByb3RvY29sLWNvZGUgaXMgcnVubmluZyAgICAgICAqLworI2RlZmluZSBJU0ROX1NUQVRfU1RPUCAgICAyNTkgICAgLyogU2lnbmFsIGhhbHQgb2YgcHJvdG9jb2wtY29kZSAgICAgICAgICAqLworI2RlZmluZSBJU0ROX1NUQVRfRENPTk4gICAyNjAgICAgLyogU2lnbmFsIEQtQ2hhbm5lbCBjb25uZWN0ICAgICAgICAgICAgICAqLworI2RlZmluZSBJU0ROX1NUQVRfQkNPTk4gICAyNjEgICAgLyogU2lnbmFsIEItQ2hhbm5lbCBjb25uZWN0ICAgICAgICAgICAgICAqLworI2RlZmluZSBJU0ROX1NUQVRfREhVUCAgICAyNjIgICAgLyogU2lnbmFsIEQtQ2hhbm5lbCBkaXNjb25uZWN0ICAgICAgICAgICAqLworI2RlZmluZSBJU0ROX1NUQVRfQkhVUCAgICAyNjMgICAgLyogU2lnbmFsIEItQ2hhbm5lbCBkaXNjb25uZWN0ICAgICAgICAgICAqLworI2RlZmluZSBJU0ROX1NUQVRfQ0lORiAgICAyNjQgICAgLyogQ2hhcmdlLUluZm8gICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJU0ROX1NUQVRfTE9BRCAgICAyNjUgICAgLyogU2lnbmFsIG5ldyBsb3dsZXZlbC1kcml2ZXIgaXMgbG9hZGVkICAqLworI2RlZmluZSBJU0ROX1NUQVRfVU5MT0FEICAyNjYgICAgLyogU2lnbmFsIHVubG9hZCBvZiBsb3dsZXZlbC1kcml2ZXIgICAgICAqLworI2RlZmluZSBJU0ROX1NUQVRfQlNFTlQgICAyNjcgICAgLyogU2lnbmFsIHBhY2tldCBzZW50ICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJU0ROX1NUQVRfTk9EQ0ggICAyNjggICAgLyogU2lnbmFsIG5vIEQtQ2hhbm5lbCAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJU0ROX1NUQVRfQUREQ0ggICAyNjkgICAgLyogQWRkIG1vcmUgQ2hhbm5lbHMgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJU0ROX1NUQVRfQ0FVU0UgICAyNzAgICAgLyogQ2F1c2UtTWVzc2FnZSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJU0ROX1NUQVRfSUNBTExXICAyNzEgICAgLyogSW5jb21pbmcgY2FsbCB3aXRob3V0IEItY2hhbiB3YWl0aW5nICAqLworI2RlZmluZSBJU0ROX1NUQVRfUkVESVIgICAyNzIgICAgLyogUmVkaXIgcmVzdWx0ICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJU0ROX1NUQVRfUFJPVCAgICAyNzMgICAgLyogcHJvdG9jb2wgSU8gc3BlY2lmaWMgY2FsbGJhY2sgICAgICAgICAqLworI2RlZmluZSBJU0ROX1NUQVRfRElTUExBWSAyNzQgICAgLyogZGVsaXZlciBhIHJlY2VpdmVkIGRpc3BsYXkgbWVzc2FnZSAgICAqLworI2RlZmluZSBJU0ROX1NUQVRfTDFFUlIgICAyNzUgICAgLyogU2lnbmFsIExheWVyLTEgRXJyb3IgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJU0ROX1NUQVRfRkFYSU5EICAyNzYgICAgLyogRkFYIGluZGljYXRpb25zIGZyb20gSEwtZHJpdmVyICAgICAgICAqLworI2RlZmluZSBJU0ROX1NUQVRfQVVESU8gICAyNzcgICAgLyogRFRNRiwgRFNQIGluZGljYXRpb25zICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJU0ROX1NUQVRfRElTQ0ggICAyNzggICAgLyogRGlzYWJsZS9FbmFibGUgY2hhbm5lbCB1c2FnZSAgICAgICAgICAqLworCisvKgorICogQXVkaW8gY29tbWFuZHMKKyAqLworI2RlZmluZSBJU0ROX0FVRElPX1NFVERECTAJLyogU2V0IERUTUYgZGV0ZWN0aW9uICAgICAgICAgICAqLworI2RlZmluZSBJU0ROX0FVRElPX0RUTUYJCTEJLyogUngvVHggRFRNRiAgICAgICAgICAgICAgICAgICAqLworCisvKgorICogVmFsdWVzIGZvciBlcnJjb2RlIGZpZWxkCisgKi8KKyNkZWZpbmUgSVNETl9TVEFUX0wxRVJSX1NFTkQgMQorI2RlZmluZSBJU0ROX1NUQVRfTDFFUlJfUkVDViAyCisKKy8qCisgKiBWYWx1ZXMgZm9yIGZlYXR1cmUtZmllbGQgb2YgaW50ZXJmYWNlLXN0cnVjdC4KKyAqLworLyogTGF5ZXIgMiAqLworI2RlZmluZSBJU0ROX0ZFQVRVUkVfTDJfWDc1SSAgICAoMHgwMDAxIDw8IElTRE5fUFJPVE9fTDJfWDc1SSkKKyNkZWZpbmUgSVNETl9GRUFUVVJFX0wyX1g3NVVJICAgKDB4MDAwMSA8PCBJU0ROX1BST1RPX0wyX1g3NVVJKQorI2RlZmluZSBJU0ROX0ZFQVRVUkVfTDJfWDc1QlVJICAoMHgwMDAxIDw8IElTRE5fUFJPVE9fTDJfWDc1QlVJKQorI2RlZmluZSBJU0ROX0ZFQVRVUkVfTDJfSERMQyAgICAoMHgwMDAxIDw8IElTRE5fUFJPVE9fTDJfSERMQykKKyNkZWZpbmUgSVNETl9GRUFUVVJFX0wyX1RSQU5TICAgKDB4MDAwMSA8PCBJU0ROX1BST1RPX0wyX1RSQU5TKQorI2RlZmluZSBJU0ROX0ZFQVRVUkVfTDJfWDI1RFRFICAoMHgwMDAxIDw8IElTRE5fUFJPVE9fTDJfWDI1RFRFKQorI2RlZmluZSBJU0ROX0ZFQVRVUkVfTDJfWDI1RENFICAoMHgwMDAxIDw8IElTRE5fUFJPVE9fTDJfWDI1RENFKQorI2RlZmluZSBJU0ROX0ZFQVRVUkVfTDJfVjExMDk2ICAoMHgwMDAxIDw8IElTRE5fUFJPVE9fTDJfVjExMDk2KQorI2RlZmluZSBJU0ROX0ZFQVRVUkVfTDJfVjExMDE5ICAoMHgwMDAxIDw8IElTRE5fUFJPVE9fTDJfVjExMDE5KQorI2RlZmluZSBJU0ROX0ZFQVRVUkVfTDJfVjExMDM4ICAoMHgwMDAxIDw8IElTRE5fUFJPVE9fTDJfVjExMDM4KQorI2RlZmluZSBJU0ROX0ZFQVRVUkVfTDJfTU9ERU0gICAoMHgwMDAxIDw8IElTRE5fUFJPVE9fTDJfTU9ERU0pCisjZGVmaW5lIElTRE5fRkVBVFVSRV9MMl9GQVgJKDB4MDAwMSA8PCBJU0ROX1BST1RPX0wyX0ZBWCkKKyNkZWZpbmUgSVNETl9GRUFUVVJFX0wyX0hETENfNTZLICgweDAwMDEgPDwgSVNETl9QUk9UT19MMl9IRExDXzU2SykKKworI2RlZmluZSBJU0ROX0ZFQVRVUkVfTDJfTUFTSyAgICAoMHgwRkZGRikgLyogTWF4LiAxNiBwcm90b2NvbHMgKi8KKyNkZWZpbmUgSVNETl9GRUFUVVJFX0wyX1NISUZUICAgKDApCisKKy8qIExheWVyIDMgKi8KKyNkZWZpbmUgSVNETl9GRUFUVVJFX0wzX1RSQU5TICAgKDB4MTAwMDAgPDwgSVNETl9QUk9UT19MM19UUkFOUykKKyNkZWZpbmUgSVNETl9GRUFUVVJFX0wzX1RSQU5TRFNQICgweDEwMDAwIDw8IElTRE5fUFJPVE9fTDNfVFJBTlNEU1ApCisjZGVmaW5lIElTRE5fRkVBVFVSRV9MM19GQ0xBU1MyCSgweDEwMDAwIDw8IElTRE5fUFJPVE9fTDNfRkNMQVNTMikKKyNkZWZpbmUgSVNETl9GRUFUVVJFX0wzX0ZDTEFTUzEJKDB4MTAwMDAgPDwgSVNETl9QUk9UT19MM19GQ0xBU1MxKQorCisjZGVmaW5lIElTRE5fRkVBVFVSRV9MM19NQVNLICAgICgweDBGRjAwMDApIC8qIE1heC4gOCBQcm90b2NvbHMgKi8KKyNkZWZpbmUgSVNETl9GRUFUVVJFX0wzX1NISUZUICAgKDE2KQorCisvKiBTaWduYWxpbmcgKi8KKyNkZWZpbmUgSVNETl9GRUFUVVJFX1BfVU5LTk9XTiAgKDB4MTAwMDAwMCA8PCBJU0ROX1BUWVBFX1VOS05PV04pCisjZGVmaW5lIElTRE5fRkVBVFVSRV9QXzFUUjYgICAgICgweDEwMDAwMDAgPDwgSVNETl9QVFlQRV8xVFI2KQorI2RlZmluZSBJU0ROX0ZFQVRVUkVfUF9FVVJPICAgICAoMHgxMDAwMDAwIDw8IElTRE5fUFRZUEVfRVVSTykKKyNkZWZpbmUgSVNETl9GRUFUVVJFX1BfTkkxICAgICAgKDB4MTAwMDAwMCA8PCBJU0ROX1BUWVBFX05JMSkKKworI2RlZmluZSBJU0ROX0ZFQVRVUkVfUF9NQVNLICAgICAoMHgwRkYwMDAwMDApIC8qIE1heC4gOCBQcm90b2NvbHMgKi8KKyNkZWZpbmUgSVNETl9GRUFUVVJFX1BfU0hJRlQgICAgKDI0KQorCit0eXBlZGVmIHN0cnVjdCBzZXR1cF9wYXJtIHsKKyAgICB1bnNpZ25lZCBjaGFyIHBob25lWzMyXTsJLyogUmVtb3RlIFBob25lLU51bWJlciAqLworICAgIHVuc2lnbmVkIGNoYXIgZWF6bXNuWzMyXTsJLyogTG9jYWwgRUFaIG9yIE1TTiAgICAqLworICAgIHVuc2lnbmVkIGNoYXIgc2kxOyAgICAgIC8qIFNlcnZpY2UgSW5kaWNhdG9yIDEgKi8KKyAgICB1bnNpZ25lZCBjaGFyIHNpMjsgICAgICAvKiBTZXJ2aWNlIEluZGljYXRvciAyICovCisgICAgdW5zaWduZWQgY2hhciBwbGFuOyAgICAgLyogTnVtYmVyaW5nIHBsYW4gICAgICAqLworICAgIHVuc2lnbmVkIGNoYXIgc2NyZWVuOyAgIC8qIFNjcmVlbmluZyBpbmZvICAgICAgKi8KK30gc2V0dXBfcGFybTsKKworCisjaWZkZWYgQ09ORklHX0lTRE5fVFRZX0ZBWAorLyogVC4zMCBGYXggRzMgKi8KKworI2RlZmluZSBGQVhJRExFTiAyMQorCit0eXBlZGVmIHN0cnVjdCBUMzBfcyB7CisJLyogc2Vzc2lvbiBwYXJhbWV0ZXJzICovCisJX191OCByZXNvbHV0aW9uCQlfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisJX191OCByYXRlCQlfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisJX191OCB3aWR0aAkJX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCV9fdTggbGVuZ3RoCQlfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisJX191OCBjb21wcmVzc2lvbglfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisJX191OCBlY20JCV9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwlfX3U4IGJpbmFyeQkJX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCV9fdTggc2NhbnRpbWUJCV9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwlfX3U4IGlkW0ZBWElETEVOXQlfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisJLyogYWRkaXRpb25hbCBwYXJhbWV0ZXJzICovCisJX191OCBwaGFzZQkJX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCV9fdTggZGlyZWN0aW9uCQlfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisJX191OCBjb2RlCQlfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisJX191OCBiYWRsaW4JCV9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwlfX3U4IGJhZG11bAkJX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCV9fdTggYm9yCQlfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisJX191OCBmZXQJCV9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwlfX3U4IHBvbGxpZFtGQVhJRExFTl0JX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCV9fdTggY3EJCQlfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisJX191OCBjcgkJCV9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwlfX3U4IGN0Y3J0eQkJX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCV9fdTggbWluc3AJCV9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwlfX3U4IHBoY3RvCQlfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisJX191OCByZWwJCV9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwlfX3U4IG5iYwkJX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCS8qIHJlbW90ZSBzdGF0aW9uIHBhcmFtZXRlcnMgKi8KKwlfX3U4IHJfcmVzb2x1dGlvbglfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisJX191OCByX3JhdGUJCV9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwlfX3U4IHJfd2lkdGgJCV9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwlfX3U4IHJfbGVuZ3RoCQlfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisJX191OCByX2NvbXByZXNzaW9uCV9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwlfX3U4IHJfZWNtCQlfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisJX191OCByX2JpbmFyeQkJX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCV9fdTggcl9zY2FudGltZQkJX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCV9fdTggcl9pZFtGQVhJRExFTl0JX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCV9fdTggcl9jb2RlCQlfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IFQzMF9zOworCisjZGVmaW5lIElTRE5fVFRZX0ZBWF9DT05OX0lOCTAKKyNkZWZpbmUgSVNETl9UVFlfRkFYX0NPTk5fT1VUCTEKKworI2RlZmluZSBJU0ROX1RUWV9GQVhfRkNPTgkwCisjZGVmaW5lIElTRE5fVFRZX0ZBWF9ESVMgCTEKKyNkZWZpbmUgSVNETl9UVFlfRkFYX0ZUVCAJMgorI2RlZmluZSBJU0ROX1RUWV9GQVhfTUNGIAkzCisjZGVmaW5lIElTRE5fVFRZX0ZBWF9EQ1MgCTQKKyNkZWZpbmUgSVNETl9UVFlfRkFYX1RSQUlOX09LCTUKKyNkZWZpbmUgSVNETl9UVFlfRkFYX0VPUCAJNgorI2RlZmluZSBJU0ROX1RUWV9GQVhfRU9NIAk3CisjZGVmaW5lIElTRE5fVFRZX0ZBWF9NUFMgCTgKKyNkZWZpbmUgSVNETl9UVFlfRkFYX0RUQyAJOQorI2RlZmluZSBJU0ROX1RUWV9GQVhfUklEIAkxMAorI2RlZmluZSBJU0ROX1RUWV9GQVhfSE5HIAkxMQorI2RlZmluZSBJU0ROX1RUWV9GQVhfRFQgIAkxMgorI2RlZmluZSBJU0ROX1RUWV9GQVhfRkNPTl9JCTEzCisjZGVmaW5lIElTRE5fVFRZX0ZBWF9EUiAgCTE0CisjZGVmaW5lIElTRE5fVFRZX0ZBWF9FVCAgCTE1CisjZGVmaW5lIElTRE5fVFRZX0ZBWF9DRlIgCTE2CisjZGVmaW5lIElTRE5fVFRZX0ZBWF9QVFMgCTE3CisjZGVmaW5lIElTRE5fVFRZX0ZBWF9TRU5UCTE4CisKKyNkZWZpbmUgSVNETl9GQVhfUEhBU0VfSURMRQkwCisjZGVmaW5lIElTRE5fRkFYX1BIQVNFX0EJMQorI2RlZmluZSBJU0ROX0ZBWF9QSEFTRV9CICAgCTIKKyNkZWZpbmUgSVNETl9GQVhfUEhBU0VfQyAgIAkzCisjZGVmaW5lIElTRE5fRkFYX1BIQVNFX0QgICAJNAorI2RlZmluZSBJU0ROX0ZBWF9QSEFTRV9FICAgCTUKKworI2VuZGlmIC8qIFRUWV9GQVggKi8KKworI2RlZmluZSBJU0ROX0ZBWF9DTEFTUzFfRkFFCTAKKyNkZWZpbmUgSVNETl9GQVhfQ0xBU1MxX0ZUUwkxCisjZGVmaW5lIElTRE5fRkFYX0NMQVNTMV9GUlMJMgorI2RlZmluZSBJU0ROX0ZBWF9DTEFTUzFfRlRNCTMKKyNkZWZpbmUgSVNETl9GQVhfQ0xBU1MxX0ZSTQk0CisjZGVmaW5lIElTRE5fRkFYX0NMQVNTMV9GVEgJNQorI2RlZmluZSBJU0ROX0ZBWF9DTEFTUzFfRlJICTYKKyNkZWZpbmUgSVNETl9GQVhfQ0xBU1MxX0NUUkwJNworCisjZGVmaW5lIElTRE5fRkFYX0NMQVNTMV9PSwkwCisjZGVmaW5lIElTRE5fRkFYX0NMQVNTMV9DT05ORUNUCTEKKyNkZWZpbmUgSVNETl9GQVhfQ0xBU1MxX05PQ0FSUgkyCisjZGVmaW5lIElTRE5fRkFYX0NMQVNTMV9FUlJPUgkzCisjZGVmaW5lIElTRE5fRkFYX0NMQVNTMV9GQ0VSUk9SCTQKKyNkZWZpbmUgSVNETl9GQVhfQ0xBU1MxX1FVRVJZCTUKKwordHlwZWRlZiBzdHJ1Y3QgeworCV9fdTgJY21kOworCV9fdTgJc3ViY21kOworCV9fdTgJcGFyYVs1MF07Cit9IGF1eF9zOworCisjZGVmaW5lIEFUX0NPTU1BTkQJMAorI2RlZmluZSBBVF9FUV9WQUxVRQkxCisjZGVmaW5lIEFUX1FVRVJZCTIKKyNkZWZpbmUgQVRfRVFfUVVFUlkJMworCisvKiBDQVBJIHN0cnVjdHMgKi8KKworLyogdGhpcyBpcyBjb21wYXRpYmxlIHRvIHRoZSBvbGQgdW5pb24gc2l6ZSAqLworI2RlZmluZSBNQVhfQ0FQSV9QQVJBX0xFTiA1MAorCit0eXBlZGVmIHN0cnVjdCB7CisJLyogSGVhZGVyICovCisJX191MTYgTGVuZ3RoOworCV9fdTE2IEFwcGxJZDsKKwlfX3U4IENvbW1hbmQ7CisJX191OCBTdWJjb21tYW5kOworCV9fdTE2IE1lc3NhZ2VudW1iZXI7CisKKwkvKiBQYXJhbWV0ZXIgKi8KKwl1bmlvbiB7CisJCV9fdTMyIENvbnRyb2xsZXI7CisJCV9fdTMyIFBMQ0k7CisJCV9fdTMyIE5DQ0k7CisJfSBhZHI7CisJX191OCBwYXJhW01BWF9DQVBJX1BBUkFfTEVOXTsKK30gY2FwaV9tc2c7CisKKy8qCisgKiBTdHJ1Y3R1cmUgZm9yIGV4Y2hhbmdpbmcgYWJvdmUgaW5mb3MKKyAqCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwlpbnQgICBkcml2ZXI7CQkvKiBMb3dsZXZlbC1Ecml2ZXItSUQgICAgICAgICAgICAqLworCWludCAgIGNvbW1hbmQ7CQkvKiBDb21tYW5kIG9yIFN0YXR1cyAoc2VlIGFib3ZlKSAqLworCXVsb25nIGFyZzsJCS8qIEFkZGl0aW9uYWwgRGF0YSAgICAgICAgICAgICAgICovCisJdW5pb24geworCQl1bG9uZyBlcnJjb2RlOwkvKiBUeXBlIG9mIGVycm9yIHdpdGggU1RBVF9MMUVSUgkqLworCQlpbnQgbGVuZ3RoOwkvKiBBbW91bnQgb2YgYnl0ZXMgc2VudCB3aXRoIFNUQVRfQlNFTlQJKi8KKwkJdV9jaGFyIG51bVs1MF07CS8qIEFkZGl0aW9uYWwgRGF0YQkJCSovCisJCXNldHVwX3Bhcm0gc2V0dXA7LyogRm9yIFNFVFVQIG1zZwkJCSovCisJCWNhcGlfbXNnIGNtc2c7CS8qIEZvciBDQVBJIGxpa2UgbWVzc2FnZXMJCSovCisJCWNoYXIgZGlzcGxheVs4NV07LyogZGlzcGxheSBtZXNzYWdlIGRhdGEJCSovIAorCQlpc2RuX2NtZF9zdGF0IGlzZG5faW87IC8qIElTRE4gSU8tcGFyYW1ldGVyL3Jlc3VsdAkqLworCQlhdXhfcyBhdXg7CS8qIGZvciBtb2RlbSBjb21tYW5kcy9pbmRpY2F0aW9ucwkqLworI2lmZGVmIENPTkZJR19JU0ROX1RUWV9GQVgKKwkJVDMwX3MJKmZheDsJLyogUG9pbnRlciB0byB0dHlzIGZheCBzdHJ1Y3QJCSovCisjZW5kaWYKKwkJdWxvbmcgdXNlcmRhdGE7CS8qIFVzZXIgRGF0YSAqLworCX0gcGFybTsKK30gaXNkbl9jdHJsOworCisjZGVmaW5lIGRzczFfaW8gICAgaXNkbl9pbworI2RlZmluZSBuaTFfaW8gICAgIGlzZG5faW8KKworLyoKKyAqIFRoZSBpbnRlcmZhY2Utc3RydWN0IGl0c2VsZiAoaW5pdGlhbGl6ZWQgYXQgbG9hZC10aW1lIG9mIGxvd2xldmVsLWRyaXZlcikKKyAqCisgKiBTZWUgRG9jdW1lbnRhdGlvbi9pc2RuL0lOVEVSRkFDRSBmb3IgYSBkZXNjcmlwdGlvbiwgaG93IHRoZSBjb21tdW5pY2F0aW9uCisgKiBiZXR3ZWVuIHRoZSBJU0ROIHN1YnN5c3RlbSBhbmQgaXRzIGRyaXZlcnMgaXMgZG9uZS4KKyAqCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgc3RydWN0IG1vZHVsZSAqb3duZXI7CisKKyAgLyogTnVtYmVyIG9mIGNoYW5uZWxzIHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlcgorICAgKi8KKyAgaW50IGNoYW5uZWxzOworCisgIC8qIAorICAgKiBNYXhpbXVtIFNpemUgb2YgdHJhbnNtaXQvcmVjZWl2ZS1idWZmZXIgdGhpcyBkcml2ZXIgc3VwcG9ydHMuCisgICAqLworICBpbnQgbWF4YnVmc2l6ZTsKKworICAvKiBGZWF0dXJlLUZsYWdzIGZvciB0aGlzIGRyaXZlci4KKyAgICogU2VlIGRlZmluZXMgSVNETl9GRUFUVVJFXy4uLiBmb3IgVmFsdWVzCisgICAqLworICB1bnNpZ25lZCBsb25nIGZlYXR1cmVzOworCisgIC8qCisgICAqIE5lZWRlZCBmb3IgY2FsY3VsYXRpbmcKKyAgICogZGV2LT5oYXJkX2hlYWRlcl9sZW4gPSBsaW5rbGF5ZXIgaGVhZGVyICsgaGxfaGRybGVuOworICAgKiBEcml2ZXJzLCBub3Qgc3VwcG9ydGluZyBza19idWZmJ3Mgc2hvdWxkIHNldCB0aGlzIHRvIDAuCisgICAqLworICB1bnNpZ25lZCBzaG9ydCBobF9oZHJsZW47CisKKyAgLyoKKyAgICogUmVjZWl2ZS1DYWxsYmFjayB1c2luZyBza19idWZmJ3MKKyAgICogUGFyYW1ldGVyczoKKyAgICogICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICBEcml2ZXItSUQKKyAgICogICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICBsb2NhbCBjaGFubmVsLW51bWJlciAoMCAuLi4pCisgICAqICAgICAgICAgICAgIHN0cnVjdCBza19idWZmICpza2IgICAgcmVjZWl2ZWQgRGF0YQorICAgKi8KKyAgdm9pZCAoKnJjdmNhbGxiX3NrYikoaW50LCBpbnQsIHN0cnVjdCBza19idWZmICopOworCisgIC8qIFN0YXR1cy1DYWxsYmFjaworICAgKiBQYXJhbWV0ZXJzOgorICAgKiAgICAgICAgICAgICBpc2RuX2N0cmwqCisgICAqICAgICAgICAgICAgICAgICAgIGRyaXZlciAgPSBEcml2ZXIgSUQuCisgICAqICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgPSBPbmUgb2YgYWJvdmUgSVNETl9TVEFUXy4uLiBjb25zdGFudHMuCisgICAqICAgICAgICAgICAgICAgICAgIGFyZyAgICAgPSBkZXBlbmRpbmcgb24gc3RhdHVzLXR5cGUuCisgICAqICAgICAgICAgICAgICAgICAgIG51bSAgICAgPSBkZXBlbmRpbmcgb24gc3RhdHVzLXR5cGUuCisgICAqLworICBpbnQgKCpzdGF0Y2FsbGIpKGlzZG5fY3RybCopOworCisgIC8qIFNlbmQgY29tbWFuZAorICAgKiBQYXJhbWV0ZXJzOgorICAgKiAgICAgICAgICAgICBpc2RuX2N0cmwqCisgICAqICAgICAgICAgICAgICAgICAgIGRyaXZlciAgPSBEcml2ZXIgSUQuCisgICAqICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgPSBPbmUgb2YgYWJvdmUgSVNETl9DTURfLi4uIGNvbnN0YW50cy4KKyAgICogICAgICAgICAgICAgICAgICAgYXJnICAgICA9IGRlcGVuZGluZyBvbiBjb21tYW5kLgorICAgKiAgICAgICAgICAgICAgICAgICBudW0gICAgID0gZGVwZW5kaW5nIG9uIGNvbW1hbmQuCisgICAqLworICBpbnQgKCpjb21tYW5kKShpc2RuX2N0cmwqKTsKKworICAvKgorICAgKiBTZW5kIGRhdGEgdXNpbmcgc2tfYnVmZidzCisgICAqIFBhcmFtZXRlcnM6CisgICAqICAgICAgICAgICAgIGludCAgICAgICAgICAgICAgICAgICAgZHJpdmVySWQKKyAgICogICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICBsb2NhbCBjaGFubmVsLW51bWJlciAoMC4uLikKKyAgICogICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICBGbGFnOiBOZWVkIEFDSyBmb3IgdGhpcyBwYWNrZXQuCisgICAqICAgICAgICAgICAgIHN0cnVjdCBza19idWZmICpza2IgICAgRGF0YSB0byBzZW5kCisgICAqLworICBpbnQgKCp3cml0ZWJ1Zl9za2IpIChpbnQsIGludCwgaW50LCBzdHJ1Y3Qgc2tfYnVmZiAqKTsKKworICAvKiBTZW5kIHJhdyBELUNoYW5uZWwtQ29tbWFuZHMKKyAgICogUGFyYW1ldGVyczoKKyAgICogICAgICAgICAgICAgdV9jaGFyIHBvaW50ZXIgZGF0YQorICAgKiAgICAgICAgICAgICBpbnQgICAgbGVuZ3RoIG9mIGRhdGEKKyAgICogICAgICAgICAgICAgaW50ICAgIGRyaXZlcklkCisgICAqICAgICAgICAgICAgIGludCAgICBsb2NhbCBjaGFubmVsLW51bWJlciAoMCAuLi4pCisgICAqLworICBpbnQgKCp3cml0ZWNtZCkoY29uc3QgdV9jaGFyIF9fdXNlciAqLCBpbnQsIGludCwgaW50KTsKKworICAvKiBSZWFkIHJhdyBTdGF0dXMgcmVwbGllcworICAgKiAgICAgICAgICAgICB1X2NoYXIgcG9pbnRlciBkYXRhICh2b2xhdGlsZSkKKyAgICogICAgICAgICAgICAgaW50ICAgIGxlbmd0aCBvZiBidWZmZXIKKyAgICogICAgICAgICAgICAgaW50ICAgIGRyaXZlcklkCisgICAqICAgICAgICAgICAgIGludCAgICBsb2NhbCBjaGFubmVsLW51bWJlciAoMCAuLi4pCisgICAqLworICBpbnQgKCpyZWFkc3RhdCkodV9jaGFyIF9fdXNlciAqLCBpbnQsIGludCwgaW50KTsKKworICBjaGFyIGlkWzIwXTsKK30gaXNkbl9pZjsKKworLyoKKyAqIEZ1bmN0aW9uIHdoaWNoIG11c3QgYmUgY2FsbGVkIGJ5IGxvd2xldmVsLWRyaXZlciBhdCBsb2FkdGltZSB3aXRoCisgKiB0aGUgZm9sbG93aW5nIGZpZWxkcyBvZiBhYm92ZSBzdHJ1Y3Qgc2V0OgorICoKKyAqIGNoYW5uZWxzICAgICBOdW1iZXIgb2YgY2hhbm5lbHMgdGhhdCB3aWxsIGJlIHN1cHBvcnRlZC4KKyAqIGhsX2hkcmxlbiAgICBTcGFjZSB0byBwcmVzZXJ2ZSBpbiBza19idWZmJ3Mgd2hlbiBzZW5kaW5nLiBEcml2ZXJzLCBub3QKKyAqICAgICAgICAgICAgICBzdXBwb3J0aW5nIHNrX2J1ZmYncyBzaG91bGQgc2V0IHRoaXMgdG8gMC4KKyAqIGNvbW1hbmQgICAgICBBZGRyZXNzIG9mIENvbW1hbmQtSGFuZGxlci4KKyAqIGZlYXR1cmVzICAgICBCaXR3aXNlIGNvZGVkIEZlYXR1cmVzIG9mIHRoaXMgZHJpdmVyLiAodXNlIElTRE5fRkVBVFVSRV8uLi4pCisgKiB3cml0ZWJ1Zl9za2IgQWRkcmVzcyBvZiBTa2J1ZmYtU2VuZC1IYW5kbGVyLgorICogd3JpdGVjbWQgICAgICAgICIgICAgIiAgRC1DaGFubmVsICAiIHdoaWNoIGFjY2VwdHMgcmF3IEQtQ2gtQ29tbWFuZHMuCisgKiByZWFkc3RhdCAgICAgICAgIiAgICAiICBELUNoYW5uZWwgICIgd2hpY2ggZGVsaXZlcnMgcmF3IFN0YXR1cy1EYXRhLgorICoKKyAqIFRoZSBsaW5rbGV2ZWwtZHJpdmVyIGZpbGxzIHRoZSBmb2xsb3dpbmcgZmllbGRzOgorICoKKyAqIGNoYW5uZWxzICAgICAgRHJpdmVyLUlEIGFzc2lnbmVkIHRvIHRoaXMgZHJpdmVyLiAoTXVzdCBiZSB1c2VkIG9uIGFsbAorICogICAgICAgICAgICAgICBzdWJzZXF1ZW50IGNhbGxiYWNrcy4KKyAqIHJjdmNhbGxiX3NrYiAgQWRkcmVzcyBvZiBoYW5kbGVyIGZvciByZWNlaXZlZCBTa2J1ZmYncy4KKyAqIHN0YXRjYWxsYiAgICAgICAgIiAgICAiICAgICAiICAgIGZvciBzdGF0dXMtY2hhbmdlcy4KKyAqCisgKi8KK2V4dGVybiBpbnQgcmVnaXN0ZXJfaXNkbihpc2RuX2lmKik7CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9fSVNETklGX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pc2ljb20uaCBiL2luY2x1ZGUvbGludXgvaXNpY29tLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M2ZWFlNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvaXNpY29tLmgKQEAgLTAsMCArMSwxMzEgQEAKKyNpZm5kZWYgX0xJTlVYX0lTSUNPTV9ICisjZGVmaW5lIF9MSU5VWF9JU0lDT01fSAorCisvKiNkZWZpbmUJCUlTSUNPTV9ERUJVRyovCisvKiNkZWZpbmUJCUlTSUNPTV9ERUJVR19EVFJfUlRTKi8KKworCisvKgorICoJRmlybXdhcmUgTG9hZGVyIGRlZmluaXRpb25zIC4uLgorICovCisgCisjZGVmaW5lCQlfX011bHRpVGVjaAkJKCdNJzw8OCkKKyNkZWZpbmUJCU1JT0NUTF9MT0FEX0ZJUk1XQVJFCShfX011bHRpVGVjaCB8IDB4MDEpCisjZGVmaW5lICAgICAgICAgTUlPQ1RMX1JFQURfRklSTVdBUkUgICAgKF9fTXVsdGlUZWNoIHwgMHgwMikKKyNkZWZpbmUgICAgICAgICBNSU9DVExfWEZFUl9DVFJMCShfX011bHRpVGVjaCB8IDB4MDMpCisjZGVmaW5lICAgICAgICAgTUlPQ1RMX1JFU0VUX0NBUkQJKF9fTXVsdGlUZWNoIHwgMHgwNCkKKworI2RlZmluZQkJREFUQV9TSVpFCTE2CisKK3R5cGVkZWYJc3RydWN0CXsKKwkJdW5zaWduZWQgc2hvcnQJZXhlY19zZWdtZW50OworCQl1bnNpZ25lZCBzaG9ydAlleGVjX2FkZHI7Cit9CWV4ZWNfcmVjb3JkOworCit0eXBlZGVmCXN0cnVjdAl7CisJCWludAkJYm9hcmQ7CQkvKiBCb2FyZCB0byBsb2FkICovCisJCXVuc2lnbmVkIHNob3J0CWFkZHI7CisJCXVuc2lnbmVkIHNob3J0CWNvdW50OworfQliaW5faGVhZGVyOworCit0eXBlZGVmCXN0cnVjdAl7CisJCWludAkJYm9hcmQ7CQkvKiBCb2FyZCB0byBsb2FkICovCisJCXVuc2lnbmVkIHNob3J0CWFkZHI7CisJCXVuc2lnbmVkIHNob3J0CWNvdW50OworCQl1bnNpZ25lZCBzaG9ydAlzZWdtZW50OworCQl1bnNpZ25lZCBjaGFyCWJpbl9kYXRhW0RBVEFfU0laRV07Cit9CWJpbl9mcmFtZTsKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2RlZmluZQkJWUVTCTEKKyNkZWZpbmUJCU5PCTAKKworI2RlZmluZQkJSVNJTE9BRF9NSVNDX01JTk9SCTE1NQkvKiAvZGV2L2lzY3RsICovCisjZGVmaW5lCQlJU0lMT0FEX05BTUUJCSJJU0lMb2FkIgorCisvKgkKKyAqICBJU0lDT00gRHJpdmVyIGRlZmluaXRpb25zIC4uLgorICoKKyAqLworCisjZGVmaW5lCQlJU0lDT01fTkFNRQkiSVNJQ29tIgorCisvKgorICogICAgICBQQ0kgZGVmaW5pdGlvbnMKKyAqLworCisgI2RlZmluZSAgICAgICAgREVWSURfQ09VTlQgICAgIDkKKyAjZGVmaW5lICAgICAgICBWRU5ET1JfSUQgICAgICAgMHgxMGI1CisKKy8qCisgKglUaGVzZSBhcmUgbm93IG9mZmljaWFsbHkgYWxsb2NhdGVkIG51bWJlcnMKKyAqLworCisjZGVmaW5lCQlJU0lDT01fTk1BSk9SCTExMgkvKiBub3JtYWwgICovCisjZGVmaW5lCQlJU0lDT01fQ01BSk9SCTExMwkvKiBjYWxsb3V0ICovCisjZGVmaW5lCQlJU0lDT01fTUFHSUMJKCgnTScgPDwgOCkgfCAnVCcpCisKKyNkZWZpbmUJCVdBS0VVUF9DSEFSUwkyNTYJLyogaGFyZCBjb2RlZCBmb3Igbm93CSovIAorI2RlZmluZQkJVFhfU0laRQkJMjU0IAorIAorI2RlZmluZQkJQk9BUkRfQ09VTlQJNAorI2RlZmluZQkJUE9SVF9DT1VOVAkoQk9BUkRfQ09VTlQqMTYpCisKKyNkZWZpbmUJCVNFUklBTF9UWVBFX05PUk1BTAkxCisKKy8qICAgY2hhcmFjdGVyIHNpemVzICAqLworCisjZGVmaW5lCQlJU0lDT01fQ1M1CQkweDAwMDAKKyNkZWZpbmUJCUlTSUNPTV9DUzYJCTB4MDAwMQorI2RlZmluZQkJSVNJQ09NX0NTNwkJMHgwMDAyCisjZGVmaW5lCQlJU0lDT01fQ1M4CQkweDAwMDMKKworLyogc3RvcCBiaXRzICovCisKKyNkZWZpbmUJCUlTSUNPTV8xU0IJCTB4MDAwMAorI2RlZmluZQkJSVNJQ09NXzJTQgkJMHgwMDA0CisKKy8qIHBhcml0eSAqLworCisjZGVmaW5lCQlJU0lDT01fTk9QQVIJCTB4MDAwMAorI2RlZmluZQkJSVNJQ09NX09EUEFSCQkweDAwMDgKKyNkZWZpbmUJCUlTSUNPTV9FVlBBUgkJMHgwMDE4CisKKy8qIGZsb3cgY29udHJvbCAqLworCisjZGVmaW5lCQlJU0lDT01fQ1RTUlRTCQkweDAzCisjZGVmaW5lCQlJU0lDT01fSU5JVElBVEVfWE9OWE9GRgkweDA0CisjZGVmaW5lCQlJU0lDT01fUkVTUE9ORF9YT05YT0ZGCTB4MDgKKworI2RlZmluZSBJbnRlcnJ1cHRUaGVDYXJkKGJhc2UpIChvdXR3KDAsKGJhc2UpKzB4YykpIAorI2RlZmluZSBDbGVhckludGVycnVwdChiYXNlKSAoaW53KChiYXNlKSsweDBhKSkJCisKKyNkZWZpbmUJQk9BUkQobGluZSkgICgoKGxpbmUpID4+IDQpICYgMHgzKQorCisJLyoJaXNpIGtpbGwgcXVldWUgYml0bWFwCSovCisJCisjZGVmaW5lCQlJU0lDT01fS0lMTFRYCQkweDAxCisjZGVmaW5lCQlJU0lDT01fS0lMTFJYCQkweDAyCisKKwkvKiBpc2lfYm9hcmQgc3RhdHVzIGJpdG1hcCAqLworCQorI2RlZmluZQkJRklSTVdBUkVfTE9BREVECQkweDAwMDEKKyNkZWZpbmUJCUJPQVJEX0FDVElWRQkJMHgwMDAyCisKKyAJLyogaXNpX3BvcnQgc3RhdHVzIGJpdG1hcCAgKi8KKworI2RlZmluZQkJSVNJX0NUUwkJCTB4MTAwMAorI2RlZmluZQkJSVNJX0RTUgkJCTB4MjAwMAorI2RlZmluZQkJSVNJX1JJCQkJMHg0MDAwCisjZGVmaW5lCQlJU0lfRENECQkJMHg4MDAwCisjZGVmaW5lCQlJU0lfRFRSCQkJMHgwMTAwCisjZGVmaW5lCQlJU0lfUlRTCQkJMHgwMjAwCisKKworI2RlZmluZQkJSVNJX1RYT0sJCTB4MDAwMSAKKyAKKyNlbmRpZgkvKglfX0tFUk5FTF9fCSovCisKKyNlbmRpZgkvKglJU0lDT01fSAkqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lzb19mcy5oIGIvaW5jbHVkZS9saW51eC9pc29fZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTkwMzlkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9pc29fZnMuaApAQCAtMCwwICsxLDMxMiBAQAorCisjaWZuZGVmIF9JU09GU19GU19ICisjZGVmaW5lIF9JU09GU19GU19ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorLyoKKyAqIFRoZSBpc29mcyBmaWxlc3lzdGVtIGNvbnN0YW50cy9zdHJ1Y3R1cmVzCisgKi8KKworLyogVGhpcyBwYXJ0IGJvcnJvd2VkIGZyb20gdGhlIGJzZDM4NiBpc29mcyAqLworI2RlZmluZSBJU09EQ0woZnJvbSwgdG8pICh0byAtIGZyb20gKyAxKQorCitzdHJ1Y3QgaXNvX3ZvbHVtZV9kZXNjcmlwdG9yIHsKKwljaGFyIHR5cGVbSVNPRENMKDEsMSldOyAvKiA3MTEgKi8KKwljaGFyIGlkW0lTT0RDTCgyLDYpXTsKKwljaGFyIHZlcnNpb25bSVNPRENMKDcsNyldOworCWNoYXIgZGF0YVtJU09EQ0woOCwyMDQ4KV07Cit9OworCisvKiB2b2x1bWUgZGVzY3JpcHRvciB0eXBlcyAqLworI2RlZmluZSBJU09fVkRfUFJJTUFSWSAxCisjZGVmaW5lIElTT19WRF9TVVBQTEVNRU5UQVJZIDIKKyNkZWZpbmUgSVNPX1ZEX0VORCAyNTUKKworI2RlZmluZSBJU09fU1RBTkRBUkRfSUQgIkNEMDAxIgorCitzdHJ1Y3QgaXNvX3ByaW1hcnlfZGVzY3JpcHRvciB7CisJY2hhciB0eXBlCQkJW0lTT0RDTCAoICAxLCAgIDEpXTsgLyogNzExICovCisJY2hhciBpZAkJCQlbSVNPRENMICggIDIsICAgNildOworCWNoYXIgdmVyc2lvbgkJCVtJU09EQ0wgKCAgNywgICA3KV07IC8qIDcxMSAqLworCWNoYXIgdW51c2VkMQkJCVtJU09EQ0wgKCAgOCwgICA4KV07CisJY2hhciBzeXN0ZW1faWQJCQlbSVNPRENMICggIDksICA0MCldOyAvKiBhY2hhcnMgKi8KKwljaGFyIHZvbHVtZV9pZAkJCVtJU09EQ0wgKCA0MSwgIDcyKV07IC8qIGRjaGFycyAqLworCWNoYXIgdW51c2VkMgkJCVtJU09EQ0wgKCA3MywgIDgwKV07CisJY2hhciB2b2x1bWVfc3BhY2Vfc2l6ZQkJW0lTT0RDTCAoIDgxLCAgODgpXTsgLyogNzMzICovCisJY2hhciB1bnVzZWQzCQkJW0lTT0RDTCAoIDg5LCAxMjApXTsKKwljaGFyIHZvbHVtZV9zZXRfc2l6ZQkJW0lTT0RDTCAoMTIxLCAxMjQpXTsgLyogNzIzICovCisJY2hhciB2b2x1bWVfc2VxdWVuY2VfbnVtYmVyCVtJU09EQ0wgKDEyNSwgMTI4KV07IC8qIDcyMyAqLworCWNoYXIgbG9naWNhbF9ibG9ja19zaXplCQlbSVNPRENMICgxMjksIDEzMildOyAvKiA3MjMgKi8KKwljaGFyIHBhdGhfdGFibGVfc2l6ZQkJW0lTT0RDTCAoMTMzLCAxNDApXTsgLyogNzMzICovCisJY2hhciB0eXBlX2xfcGF0aF90YWJsZQkJW0lTT0RDTCAoMTQxLCAxNDQpXTsgLyogNzMxICovCisJY2hhciBvcHRfdHlwZV9sX3BhdGhfdGFibGUJW0lTT0RDTCAoMTQ1LCAxNDgpXTsgLyogNzMxICovCisJY2hhciB0eXBlX21fcGF0aF90YWJsZQkJW0lTT0RDTCAoMTQ5LCAxNTIpXTsgLyogNzMyICovCisJY2hhciBvcHRfdHlwZV9tX3BhdGhfdGFibGUJW0lTT0RDTCAoMTUzLCAxNTYpXTsgLyogNzMyICovCisJY2hhciByb290X2RpcmVjdG9yeV9yZWNvcmQJW0lTT0RDTCAoMTU3LCAxOTApXTsgLyogOS4xICovCisJY2hhciB2b2x1bWVfc2V0X2lkCQlbSVNPRENMICgxOTEsIDMxOCldOyAvKiBkY2hhcnMgKi8KKwljaGFyIHB1Ymxpc2hlcl9pZAkJW0lTT0RDTCAoMzE5LCA0NDYpXTsgLyogYWNoYXJzICovCisJY2hhciBwcmVwYXJlcl9pZAkJW0lTT0RDTCAoNDQ3LCA1NzQpXTsgLyogYWNoYXJzICovCisJY2hhciBhcHBsaWNhdGlvbl9pZAkJW0lTT0RDTCAoNTc1LCA3MDIpXTsgLyogYWNoYXJzICovCisJY2hhciBjb3B5cmlnaHRfZmlsZV9pZAkJW0lTT0RDTCAoNzAzLCA3MzkpXTsgLyogNy41IGRjaGFycyAqLworCWNoYXIgYWJzdHJhY3RfZmlsZV9pZAkJW0lTT0RDTCAoNzQwLCA3NzYpXTsgLyogNy41IGRjaGFycyAqLworCWNoYXIgYmlibGlvZ3JhcGhpY19maWxlX2lkCVtJU09EQ0wgKDc3NywgODEzKV07IC8qIDcuNSBkY2hhcnMgKi8KKwljaGFyIGNyZWF0aW9uX2RhdGUJCVtJU09EQ0wgKDgxNCwgODMwKV07IC8qIDguNC4yNi4xICovCisJY2hhciBtb2RpZmljYXRpb25fZGF0ZQkJW0lTT0RDTCAoODMxLCA4NDcpXTsgLyogOC40LjI2LjEgKi8KKwljaGFyIGV4cGlyYXRpb25fZGF0ZQkJW0lTT0RDTCAoODQ4LCA4NjQpXTsgLyogOC40LjI2LjEgKi8KKwljaGFyIGVmZmVjdGl2ZV9kYXRlCQlbSVNPRENMICg4NjUsIDg4MSldOyAvKiA4LjQuMjYuMSAqLworCWNoYXIgZmlsZV9zdHJ1Y3R1cmVfdmVyc2lvbglbSVNPRENMICg4ODIsIDg4MildOyAvKiA3MTEgKi8KKwljaGFyIHVudXNlZDQJCQlbSVNPRENMICg4ODMsIDg4MyldOworCWNoYXIgYXBwbGljYXRpb25fZGF0YQkJW0lTT0RDTCAoODg0LCAxMzk1KV07CisJY2hhciB1bnVzZWQ1CQkJW0lTT0RDTCAoMTM5NiwgMjA0OCldOworfTsKKworLyogQWxtb3N0IHRoZSBzYW1lIGFzIHRoZSBwcmltYXJ5IGRlc2NyaXB0b3IgYnV0IHR3byBmaWVsZHMgYXJlIHNwZWNpZmllZCAqLworc3RydWN0IGlzb19zdXBwbGVtZW50YXJ5X2Rlc2NyaXB0b3IgeworCWNoYXIgdHlwZQkJCVtJU09EQ0wgKCAgMSwgICAxKV07IC8qIDcxMSAqLworCWNoYXIgaWQJCQkJW0lTT0RDTCAoICAyLCAgIDYpXTsKKwljaGFyIHZlcnNpb24JCQlbSVNPRENMICggIDcsICAgNyldOyAvKiA3MTEgKi8KKwljaGFyIGZsYWdzCQkJW0lTT0RDTCAoICA4LCAgIDgpXTsgLyogODUzICovCisJY2hhciBzeXN0ZW1faWQJCQlbSVNPRENMICggIDksICA0MCldOyAvKiBhY2hhcnMgKi8KKwljaGFyIHZvbHVtZV9pZAkJCVtJU09EQ0wgKCA0MSwgIDcyKV07IC8qIGRjaGFycyAqLworCWNoYXIgdW51c2VkMgkJCVtJU09EQ0wgKCA3MywgIDgwKV07CisJY2hhciB2b2x1bWVfc3BhY2Vfc2l6ZQkJW0lTT0RDTCAoIDgxLCAgODgpXTsgLyogNzMzICovCisJY2hhciBlc2NhcGUJCQlbSVNPRENMICggODksIDEyMCldOyAvKiA4NTYgKi8KKwljaGFyIHZvbHVtZV9zZXRfc2l6ZQkJW0lTT0RDTCAoMTIxLCAxMjQpXTsgLyogNzIzICovCisJY2hhciB2b2x1bWVfc2VxdWVuY2VfbnVtYmVyCVtJU09EQ0wgKDEyNSwgMTI4KV07IC8qIDcyMyAqLworCWNoYXIgbG9naWNhbF9ibG9ja19zaXplCQlbSVNPRENMICgxMjksIDEzMildOyAvKiA3MjMgKi8KKwljaGFyIHBhdGhfdGFibGVfc2l6ZQkJW0lTT0RDTCAoMTMzLCAxNDApXTsgLyogNzMzICovCisJY2hhciB0eXBlX2xfcGF0aF90YWJsZQkJW0lTT0RDTCAoMTQxLCAxNDQpXTsgLyogNzMxICovCisJY2hhciBvcHRfdHlwZV9sX3BhdGhfdGFibGUJW0lTT0RDTCAoMTQ1LCAxNDgpXTsgLyogNzMxICovCisJY2hhciB0eXBlX21fcGF0aF90YWJsZQkJW0lTT0RDTCAoMTQ5LCAxNTIpXTsgLyogNzMyICovCisJY2hhciBvcHRfdHlwZV9tX3BhdGhfdGFibGUJW0lTT0RDTCAoMTUzLCAxNTYpXTsgLyogNzMyICovCisJY2hhciByb290X2RpcmVjdG9yeV9yZWNvcmQJW0lTT0RDTCAoMTU3LCAxOTApXTsgLyogOS4xICovCisJY2hhciB2b2x1bWVfc2V0X2lkCQlbSVNPRENMICgxOTEsIDMxOCldOyAvKiBkY2hhcnMgKi8KKwljaGFyIHB1Ymxpc2hlcl9pZAkJW0lTT0RDTCAoMzE5LCA0NDYpXTsgLyogYWNoYXJzICovCisJY2hhciBwcmVwYXJlcl9pZAkJW0lTT0RDTCAoNDQ3LCA1NzQpXTsgLyogYWNoYXJzICovCisJY2hhciBhcHBsaWNhdGlvbl9pZAkJW0lTT0RDTCAoNTc1LCA3MDIpXTsgLyogYWNoYXJzICovCisJY2hhciBjb3B5cmlnaHRfZmlsZV9pZAkJW0lTT0RDTCAoNzAzLCA3MzkpXTsgLyogNy41IGRjaGFycyAqLworCWNoYXIgYWJzdHJhY3RfZmlsZV9pZAkJW0lTT0RDTCAoNzQwLCA3NzYpXTsgLyogNy41IGRjaGFycyAqLworCWNoYXIgYmlibGlvZ3JhcGhpY19maWxlX2lkCVtJU09EQ0wgKDc3NywgODEzKV07IC8qIDcuNSBkY2hhcnMgKi8KKwljaGFyIGNyZWF0aW9uX2RhdGUJCVtJU09EQ0wgKDgxNCwgODMwKV07IC8qIDguNC4yNi4xICovCisJY2hhciBtb2RpZmljYXRpb25fZGF0ZQkJW0lTT0RDTCAoODMxLCA4NDcpXTsgLyogOC40LjI2LjEgKi8KKwljaGFyIGV4cGlyYXRpb25fZGF0ZQkJW0lTT0RDTCAoODQ4LCA4NjQpXTsgLyogOC40LjI2LjEgKi8KKwljaGFyIGVmZmVjdGl2ZV9kYXRlCQlbSVNPRENMICg4NjUsIDg4MSldOyAvKiA4LjQuMjYuMSAqLworCWNoYXIgZmlsZV9zdHJ1Y3R1cmVfdmVyc2lvbglbSVNPRENMICg4ODIsIDg4MildOyAvKiA3MTEgKi8KKwljaGFyIHVudXNlZDQJCQlbSVNPRENMICg4ODMsIDg4MyldOworCWNoYXIgYXBwbGljYXRpb25fZGF0YQkJW0lTT0RDTCAoODg0LCAxMzk1KV07CisJY2hhciB1bnVzZWQ1CQkJW0lTT0RDTCAoMTM5NiwgMjA0OCldOworfTsKKworCisjZGVmaW5lIEhTX1NUQU5EQVJEX0lEICJDRFJPTSIKKworc3RydWN0ICBoc192b2x1bWVfZGVzY3JpcHRvciB7CisJY2hhciBmb28JCQlbSVNPRENMICggIDEsICAgOCldOyAvKiA3MzMgKi8KKwljaGFyIHR5cGUJCQlbSVNPRENMICggIDksICAgOSldOyAvKiA3MTEgKi8KKwljaGFyIGlkCQkJCVtJU09EQ0wgKCAxMCwgIDE0KV07CisJY2hhciB2ZXJzaW9uCQkJW0lTT0RDTCAoIDE1LCAgMTUpXTsgLyogNzExICovCisJY2hhciBkYXRhW0lTT0RDTCgxNiwyMDQ4KV07Cit9OworCisKK3N0cnVjdCBoc19wcmltYXJ5X2Rlc2NyaXB0b3IgeworCWNoYXIgZm9vCQkJW0lTT0RDTCAoICAxLCAgIDgpXTsgLyogNzMzICovCisJY2hhciB0eXBlCQkJW0lTT0RDTCAoICA5LCAgIDkpXTsgLyogNzExICovCisJY2hhciBpZAkJCQlbSVNPRENMICggMTAsICAxNCldOworCWNoYXIgdmVyc2lvbgkJCVtJU09EQ0wgKCAxNSwgIDE1KV07IC8qIDcxMSAqLworCWNoYXIgdW51c2VkMQkJCVtJU09EQ0wgKCAxNiwgIDE2KV07IC8qIDcxMSAqLworCWNoYXIgc3lzdGVtX2lkCQkJW0lTT0RDTCAoIDE3LCAgNDgpXTsgLyogYWNoYXJzICovCisJY2hhciB2b2x1bWVfaWQJCQlbSVNPRENMICggNDksICA4MCldOyAvKiBkY2hhcnMgKi8KKwljaGFyIHVudXNlZDIJCQlbSVNPRENMICggODEsICA4OCldOyAvKiA3MzMgKi8KKwljaGFyIHZvbHVtZV9zcGFjZV9zaXplCQlbSVNPRENMICggODksICA5NildOyAvKiA3MzMgKi8KKwljaGFyIHVudXNlZDMJCQlbSVNPRENMICggOTcsIDEyOCldOyAvKiA3MzMgKi8KKwljaGFyIHZvbHVtZV9zZXRfc2l6ZQkJW0lTT0RDTCAoMTI5LCAxMzIpXTsgLyogNzIzICovCisJY2hhciB2b2x1bWVfc2VxdWVuY2VfbnVtYmVyCVtJU09EQ0wgKDEzMywgMTM2KV07IC8qIDcyMyAqLworCWNoYXIgbG9naWNhbF9ibG9ja19zaXplCQlbSVNPRENMICgxMzcsIDE0MCldOyAvKiA3MjMgKi8KKwljaGFyIHBhdGhfdGFibGVfc2l6ZQkJW0lTT0RDTCAoMTQxLCAxNDgpXTsgLyogNzMzICovCisJY2hhciB0eXBlX2xfcGF0aF90YWJsZQkJW0lTT0RDTCAoMTQ5LCAxNTIpXTsgLyogNzMxICovCisJY2hhciB1bnVzZWQ0CQkJW0lTT0RDTCAoMTUzLCAxODApXTsgLyogNzMzICovCisJY2hhciByb290X2RpcmVjdG9yeV9yZWNvcmQJW0lTT0RDTCAoMTgxLCAyMTQpXTsgLyogOS4xICovCit9OworCisvKiBXZSB1c2UgdGhpcyB0byBoZWxwIHVzIGxvb2sgdXAgdGhlIHBhcmVudCBpbm9kZSBudW1iZXJzLiAqLworCitzdHJ1Y3QgaXNvX3BhdGhfdGFibGV7CisJdW5zaWduZWQgY2hhciAgbmFtZV9sZW5bMl07CS8qIDcyMSAqLworCWNoYXIgZXh0ZW50WzRdOwkJLyogNzMxICovCisJY2hhciAgcGFyZW50WzJdOwkvKiA3MjEgKi8KKwljaGFyIG5hbWVbMF07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKiBoaWdoIHNpZXJyYSBpcyBpZGVudGljYWwgdG8gaXNvLCBleGNlcHQgdGhhdCB0aGUgZGF0ZSBpcyBvbmx5IDYgYnl0ZXMsIGFuZAorICAgdGhlcmUgaXMgYW4gZXh0cmEgcmVzZXJ2ZWQgYnl0ZSBhZnRlciB0aGUgZmxhZ3MgKi8KKworc3RydWN0IGlzb19kaXJlY3RvcnlfcmVjb3JkIHsKKwljaGFyIGxlbmd0aAkJCVtJU09EQ0wgKDEsIDEpXTsgLyogNzExICovCisJY2hhciBleHRfYXR0cl9sZW5ndGgJCVtJU09EQ0wgKDIsIDIpXTsgLyogNzExICovCisJY2hhciBleHRlbnQJCQlbSVNPRENMICgzLCAxMCldOyAvKiA3MzMgKi8KKwljaGFyIHNpemUJCQlbSVNPRENMICgxMSwgMTgpXTsgLyogNzMzICovCisJY2hhciBkYXRlCQkJW0lTT0RDTCAoMTksIDI1KV07IC8qIDcgYnkgNzExICovCisJY2hhciBmbGFncwkJCVtJU09EQ0wgKDI2LCAyNildOworCWNoYXIgZmlsZV91bml0X3NpemUJCVtJU09EQ0wgKDI3LCAyNyldOyAvKiA3MTEgKi8KKwljaGFyIGludGVybGVhdmUJCQlbSVNPRENMICgyOCwgMjgpXTsgLyogNzExICovCisJY2hhciB2b2x1bWVfc2VxdWVuY2VfbnVtYmVyCVtJU09EQ0wgKDI5LCAzMildOyAvKiA3MjMgKi8KKwl1bnNpZ25lZCBjaGFyIG5hbWVfbGVuCQlbSVNPRENMICgzMywgMzMpXTsgLyogNzExICovCisJY2hhciBuYW1lCQkJWzBdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBJU09GU19CTE9DS19CSVRTIDExCisjZGVmaW5lIElTT0ZTX0JMT0NLX1NJWkUgMjA0OAorCisjZGVmaW5lIElTT0ZTX0JVRkZFUl9TSVpFKElOT0RFKSAoKElOT0RFKS0+aV9zYi0+c19ibG9ja3NpemUpCisjZGVmaW5lIElTT0ZTX0JVRkZFUl9CSVRTKElOT0RFKSAoKElOT0RFKS0+aV9zYi0+c19ibG9ja3NpemVfYml0cykKKworI2RlZmluZSBJU09GU19TVVBFUl9NQUdJQyAweDk2NjAKKworI2lmZGVmIF9fS0VSTkVMX18KKy8qIE51bWJlciBjb252ZXJzaW9uIGlubGluZXMsIG5hbWVkIGFmdGVyIHRoZSBzZWN0aW9uIGluIElTTyA5NjYwCisgICB0aGV5IGNvcnJlc3BvbmQgdG8uICovCisKKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorI2luY2x1ZGUgPGxpbnV4L2lzb19mc19pLmg+CisjaW5jbHVkZSA8bGludXgvaXNvX2ZzX3NiLmg+CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGlzb2ZzX3NiX2luZm8gKklTT0ZTX1NCKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJcmV0dXJuIHNiLT5zX2ZzX2luZm87Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGlzb19pbm9kZV9pbmZvICpJU09GU19JKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihpbm9kZSwgc3RydWN0IGlzb19pbm9kZV9pbmZvLCB2ZnNfaW5vZGUpOworfQorCitzdGF0aWMgaW5saW5lIGludCBpc29udW1fNzExKGNoYXIgKnApCit7CisJcmV0dXJuICoodTggKilwOworfQorc3RhdGljIGlubGluZSBpbnQgaXNvbnVtXzcxMihjaGFyICpwKQoreworCXJldHVybiAqKHM4ICopcDsKK30KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlzb251bV83MjEoY2hhciAqcCkKK3sKKwlyZXR1cm4gbGUxNl90b19jcHUoZ2V0X3VuYWxpZ25lZCgoX19sZTE2ICopcCkpOworfQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXNvbnVtXzcyMihjaGFyICpwKQoreworCXJldHVybiBiZTE2X3RvX2NwdShnZXRfdW5hbGlnbmVkKChfX2xlMTYgKilwKSk7Cit9CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpc29udW1fNzIzKGNoYXIgKnApCit7CisJLyogSWdub3JlIGJpZ2VuZGlhbiBkYXR1bSBkdWUgdG8gYnJva2VuIG1hc3RlcmluZyBwcm9ncmFtcyAqLworCXJldHVybiBsZTE2X3RvX2NwdShnZXRfdW5hbGlnbmVkKChfX2xlMTYgKilwKSk7Cit9CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpc29udW1fNzMxKGNoYXIgKnApCit7CisJcmV0dXJuIGxlMzJfdG9fY3B1KGdldF91bmFsaWduZWQoKF9fbGUzMiAqKXApKTsKK30KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlzb251bV83MzIoY2hhciAqcCkKK3sKKwlyZXR1cm4gYmUzMl90b19jcHUoZ2V0X3VuYWxpZ25lZCgoX19sZTMyICopcCkpOworfQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXNvbnVtXzczMyhjaGFyICpwKQoreworCS8qIElnbm9yZSBiaWdlbmRpYW4gZGF0dW0gZHVlIHRvIGJyb2tlbiBtYXN0ZXJpbmcgcHJvZ3JhbXMgKi8KKwlyZXR1cm4gbGUzMl90b19jcHUoZ2V0X3VuYWxpZ25lZCgoX19sZTMyICopcCkpOworfQorZXh0ZXJuIGludCBpc29fZGF0ZShjaGFyICosIGludCk7CisKK3N0cnVjdCBpbm9kZTsJCS8qIFRvIG1ha2UgZ2NjIGhhcHB5ICovCisKK2V4dGVybiBpbnQgcGFyc2Vfcm9ja19yaWRnZV9pbm9kZShzdHJ1Y3QgaXNvX2RpcmVjdG9yeV9yZWNvcmQgKiwgc3RydWN0IGlub2RlICopOworZXh0ZXJuIGludCBnZXRfcm9ja19yaWRnZV9maWxlbmFtZShzdHJ1Y3QgaXNvX2RpcmVjdG9yeV9yZWNvcmQgKiwgY2hhciAqLCBzdHJ1Y3QgaW5vZGUgKik7CitleHRlcm4gaW50IGlzb2ZzX25hbWVfdHJhbnNsYXRlKHN0cnVjdCBpc29fZGlyZWN0b3J5X3JlY29yZCAqLCBjaGFyICosIHN0cnVjdCBpbm9kZSAqKTsKKworaW50IGdldF9qb2xpZXRfZmlsZW5hbWUoc3RydWN0IGlzb19kaXJlY3RvcnlfcmVjb3JkICosIHVuc2lnbmVkIGNoYXIgKiwgc3RydWN0IGlub2RlICopOworaW50IGdldF9hY29ybl9maWxlbmFtZShzdHJ1Y3QgaXNvX2RpcmVjdG9yeV9yZWNvcmQgKiwgY2hhciAqLCBzdHJ1Y3QgaW5vZGUgKik7CisKK2V4dGVybiBzdHJ1Y3QgZGVudHJ5ICppc29mc19sb29rdXAoc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IG5hbWVpZGF0YSAqKTsKK2V4dGVybiBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmlzb2ZzX2JyZWFkKHN0cnVjdCBpbm9kZSAqLCBzZWN0b3JfdCk7CitleHRlcm4gaW50IGlzb2ZzX2dldF9ibG9ja3Moc3RydWN0IGlub2RlICosIHNlY3Rvcl90LCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiosIHVuc2lnbmVkIGxvbmcpOworCitleHRlcm4gc3RydWN0IGlub2RlICppc29mc19pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgYmxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKKworLyogQmVjYXVzZSB0aGUgaW5vZGUgbnVtYmVyIGlzIG5vIGxvbmdlciByZWxldmFudCB0byBmaW5kaW5nIHRoZQorICogdW5kZXJseWluZyBtZXRhLWRhdGEgZm9yIGFuIGlub2RlLCB3ZSBhcmUgZnJlZSB0byBjaG9vc2UgYSBtb3JlCisgKiBjb252ZW5pZW50IDMyLWJpdCBudW1iZXIgYXMgdGhlIGlub2RlIG51bWJlci4gIFRoZSBpbm9kZSBudW1iZXJpbmcKKyAqIHNjaGVtZSB3YXMgcmVjb21tZW5kZWQgYnkgU2VyZ2V5IFZsYXNvdiBhbmQgRXJpYyBMYW1tZXJ0cy4gKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBpc29mc19nZXRfaW5vKHVuc2lnbmVkIGxvbmcgYmxvY2ssCisJCQkJCSAgdW5zaWduZWQgbG9uZyBvZmZzZXQsCisJCQkJCSAgdW5zaWduZWQgbG9uZyBidWZiaXRzKQoreworCXJldHVybiAoYmxvY2sgPDwgKGJ1ZmJpdHMgLSA1KSkgfCAob2Zmc2V0ID4+IDUpOworfQorCisvKiBFdmVyeSBkaXJlY3RvcnkgY2FuIGhhdmUgbWFueSByZWR1bmRhbnQgZGlyZWN0b3J5IGVudHJpZXMgc2NhdHRlcmVkCisgKiB0aHJvdWdob3V0IHRoZSBkaXJlY3RvcnkgdHJlZS4gIEZpcnN0IHRoZXJlIGlzIHRoZSBkaXJlY3RvcnkgZW50cnkKKyAqIHdpdGggdGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSBzdG9yZWQgaW4gdGhlIHBhcmVudCBkaXJlY3RvcnkuCisgKiBUaGVuLCB0aGVyZSBpcyB0aGUgIi4iIGRpcmVjdG9yeSBlbnRyeSBzdG9yZWQgaW4gdGhlIGRpcmVjdG9yeQorICogaXRzZWxmLiAgRmluYWxseSwgdGhlcmUgYXJlIHBvc3NpYmx5IG1hbnkgIi4uIiBkaXJlY3RvcnkgZW50cmllcworICogc3RvcmVkIGluIGFsbCB0aGUgc3ViZGlyZWN0b3JpZXMuCisgKgorICogSW4gb3JkZXIgZm9yIHRoZSBORlMgZ2V0X3BhcmVudCgpIG1ldGhvZCB0byB3b3JrIGFuZCBmb3IgdGhlCisgKiBnZW5lcmFsIGNvbnNpc3RlbmN5IG9mIHRoZSBkY2FjaGUsIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZQorICogImlfaWdldDVfYmxvY2siIGFuZCAiaV9pZ2V0NV9vZmZzZXQiIGFsbCBwb2ludCB0byBleGFjdGx5IG9uZSBvZgorICogdGhlIG1hbnkgcmVkdW5kYW50IGVudHJpZXMgZm9yIGVhY2ggZGlyZWN0b3J5LiAgV2Ugbm9ybWFsaXplIHRoZQorICogYmxvY2sgYW5kIG9mZnNldCBieSBhbHdheXMgbWFraW5nIHRoZW0gcG9pbnQgdG8gdGhlICIuIiAgZGlyZWN0b3J5LgorICoKKyAqIE5vdGljZSB0aGF0IHdlIGRvIG5vdCB1c2UgdGhlIGVudHJ5IGZvciB0aGUgZGlyZWN0b3J5IHdpdGggdGhlIG5hbWUKKyAqIHRoYXQgaXMgbG9jYXRlZCBpbiB0aGUgcGFyZW50IGRpcmVjdG9yeS4gIEV2ZW4gdGhvdWdoIGNob29zaW5nIHRoaXMKKyAqIGZpcnN0IGRpcmVjdG9yeSBpcyBtb3JlIG5hdHVyYWwsIGl0IGlzIG11Y2ggZWFzaWVyIHRvIGZpbmQgdGhlICIuIgorICogZW50cnkgaW4gdGhlIE5GUyBnZXRfcGFyZW50KCkgbWV0aG9kIGJlY2F1c2UgaXQgaXMgaW1wbGljaXRseQorICogZW5jb2RlZCBpbiB0aGUgImV4dGVudCArIGV4dF9hdHRyX2xlbmd0aCIgZmllbGRzIG9mIF9hbGxfIHRoZQorICogcmVkdW5kYW50IGVudHJpZXMgZm9yIHRoZSBkaXJlY3RvcnkuICBUaHVzLCBpdCBjYW4gYWx3YXlzIGJlCisgKiByZWFjaGVkIHJlZ2FyZGxlc3Mgb2Ygd2hpY2ggZGlyZWN0b3J5IGVudHJ5IHlvdSBoYXZlIGluIGhhbmQuCisgKgorICogVGhpcyB3b3JrcyBiZWNhdXNlIHRoZSAiLiIgZW50cnkgaXMgc2ltcGx5IHRoZSBmaXJzdCBkaXJlY3RvcnkKKyAqIHJlY29yZCB3aGVuIHlvdSBzdGFydCByZWFkaW5nIHRoZSBmaWxlIHRoYXQgaG9sZHMgYWxsIHRoZSBkaXJlY3RvcnkKKyAqIHJlY29yZHMsIGFuZCB0aGlzIGZpbGUgc3RhcnRzIGF0ICJleHRlbnQgKyBleHRfYXR0cl9sZW5ndGgiIGJsb2Nrcy4KKyAqIEJlY2F1c2UgdGhlICIuIiBlbnRyeSBpcyBhbHdheXMgdGhlIGZpcnN0IGVudHJ5IGxpc3RlZCBpbiB0aGUKKyAqIGRpcmVjdG9yaWVzIGZpbGUsIHRoZSBub3JtYWxpemVkICJvZmZzZXQiIHZhbHVlIGlzIGFsd2F5cyAwLgorICoKKyAqIFlvdSBzaG91bGQgcGFzcyB0aGUgZGlyZWN0b3J5IGVudHJ5IGluICJkZSIuICBPbiByZXR1cm4sICJibG9jayIKKyAqIGFuZCAib2Zmc2V0IiB3aWxsIGhvbGQgbm9ybWFsaXplZCB2YWx1ZXMuICBPbmx5IGRpcmVjdG9yaWVzIGFyZQorICogYWZmZWN0ZWQgbWFraW5nIGl0IHNhZmUgdG8gY2FsbCBldmVuIGZvciBub24tZGlyZWN0b3J5IGZpbGUKKyAqIHR5cGVzLiAqLworc3RhdGljIGlubGluZSB2b2lkCitpc29mc19ub3JtYWxpemVfYmxvY2tfYW5kX29mZnNldChzdHJ1Y3QgaXNvX2RpcmVjdG9yeV9yZWNvcmQqIGRlLAorCQkJCSB1bnNpZ25lZCBsb25nICpibG9jaywKKwkJCQkgdW5zaWduZWQgbG9uZyAqb2Zmc2V0KQoreworCS8qIE9ubHkgZGlyZWN0b3JpZXMgYXJlIG5vcm1hbGl6ZWQuICovCisJaWYgKGRlLT5mbGFnc1swXSAmIDIpIHsKKwkJKm9mZnNldCA9IDA7CisJCSpibG9jayA9ICh1bnNpZ25lZCBsb25nKWlzb251bV83MzMoZGUtPmV4dGVudCkKKwkJCSsgKHVuc2lnbmVkIGxvbmcpaXNvbnVtXzcxMShkZS0+ZXh0X2F0dHJfbGVuZ3RoKTsKKwl9Cit9CisKK2V4dGVybiBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBpc29mc19kaXJfaW5vZGVfb3BlcmF0aW9uczsKK2V4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGlzb2ZzX2Rpcl9vcGVyYXRpb25zOworZXh0ZXJuIHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaXNvZnNfc3ltbGlua19hb3BzOworZXh0ZXJuIHN0cnVjdCBleHBvcnRfb3BlcmF0aW9ucyBpc29mc19leHBvcnRfb3BzOworCisvKiBUaGUgZm9sbG93aW5nIG1hY3JvcyBhcmUgdXNlZCB0byBjaGVjayBmb3IgbWVtb3J5IGxlYWtzLiAqLworI2lmZGVmIExFQUtfQ0hFQ0sKKyNkZWZpbmUgZnJlZV9zIGxlYWtfY2hlY2tfZnJlZV9zCisjZGVmaW5lIG1hbGxvYyBsZWFrX2NoZWNrX21hbGxvYworI2RlZmluZSBzYl9icmVhZCBsZWFrX2NoZWNrX2JyZWFkCisjZGVmaW5lIGJyZWxzZSBsZWFrX2NoZWNrX2JyZWxzZQorZXh0ZXJuIHZvaWQgKiBsZWFrX2NoZWNrX21hbGxvYyh1bnNpZ25lZCBpbnQgc2l6ZSk7CitleHRlcm4gdm9pZCBsZWFrX2NoZWNrX2ZyZWVfcyh2b2lkICogb2JqLCBpbnQgc2l6ZSk7CitleHRlcm4gc3RydWN0IGJ1ZmZlcl9oZWFkICogbGVha19jaGVja19icmVhZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgYmxvY2spOworZXh0ZXJuIHZvaWQgbGVha19jaGVja19icmVsc2Uoc3RydWN0IGJ1ZmZlcl9oZWFkICogYmgpOworI2VuZGlmIC8qIExFQUtfQ0hFQ0sgKi8KKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lzb19mc19pLmggYi9pbmNsdWRlL2xpbnV4L2lzb19mc19pLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTkwNjVlOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvaXNvX2ZzX2kuaApAQCAtMCwwICsxLDI3IEBACisjaWZuZGVmIF9JU09fRlNfSQorI2RlZmluZSBfSVNPX0ZTX0kKKworI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisKK2VudW0gaXNvZnNfZmlsZV9mb3JtYXQgeworCWlzb2ZzX2ZpbGVfbm9ybWFsID0gMCwKKwlpc29mc19maWxlX3NwYXJzZSA9IDEsCisJaXNvZnNfZmlsZV9jb21wcmVzc2VkID0gMiwKK307CisJCisvKgorICogaXNvIGZzIGlub2RlIGRhdGEgaW4gbWVtb3J5CisgKi8KK3N0cnVjdCBpc29faW5vZGVfaW5mbyB7CisJdW5zaWduZWQgbG9uZyBpX2lnZXQ1X2Jsb2NrOworCXVuc2lnbmVkIGxvbmcgaV9pZ2V0NV9vZmZzZXQ7CisJdW5zaWduZWQgaW50IGlfZmlyc3RfZXh0ZW50OworCXVuc2lnbmVkIGNoYXIgaV9maWxlX2Zvcm1hdDsKKwl1bnNpZ25lZCBjaGFyIGlfZm9ybWF0X3Bhcm1bM107CisJdW5zaWduZWQgbG9uZyBpX25leHRfc2VjdGlvbl9ibG9jazsKKwl1bnNpZ25lZCBsb25nIGlfbmV4dF9zZWN0aW9uX29mZnNldDsKKwlvZmZfdCBpX3NlY3Rpb25fc2l6ZTsKKwlzdHJ1Y3QgaW5vZGUgdmZzX2lub2RlOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lzb19mc19zYi5oIGIvaW5jbHVkZS9saW51eC9pc29fZnNfc2IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDNiOTdiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9pc29fZnNfc2IuaApAQCAtMCwwICsxLDM0IEBACisjaWZuZGVmIF9JU09GU19GU19TQgorI2RlZmluZSBfSVNPRlNfRlNfU0IKKworLyoKKyAqIGlzbzk2NjAgc3VwZXItYmxvY2sgZGF0YSBpbiBtZW1vcnkKKyAqLworc3RydWN0IGlzb2ZzX3NiX2luZm8geworCXVuc2lnbmVkIGxvbmcgc19uaW5vZGVzOworCXVuc2lnbmVkIGxvbmcgc19uem9uZXM7CisJdW5zaWduZWQgbG9uZyBzX2ZpcnN0ZGF0YXpvbmU7CisJdW5zaWduZWQgbG9uZyBzX2xvZ196b25lX3NpemU7CisJdW5zaWduZWQgbG9uZyBzX21heF9zaXplOworCQorCXVuc2lnbmVkIGNoYXIgc19oaWdoX3NpZXJyYTsgLyogQSBzaW1wbGUgZmxhZyAqLworCXVuc2lnbmVkIGNoYXIgc19tYXBwaW5nOworCWludCAgICAgICAgICAgc19yb2NrX29mZnNldDsgLyogb2Zmc2V0IG9mIFNVU1AgZmllbGRzIHdpdGhpbiBTVSBhcmVhICovCisJdW5zaWduZWQgY2hhciBzX3JvY2s7CisJdW5zaWduZWQgY2hhciBzX2pvbGlldF9sZXZlbDsKKwl1bnNpZ25lZCBjaGFyIHNfdXRmODsKKwl1bnNpZ25lZCBjaGFyIHNfY3J1ZnQ7IC8qIEJyb2tlbiBkaXNrcyB3aXRoIGhpZ2gKKwkJCQkgIGJ5dGUgb2YgbGVuZ3RoIGNvbnRhaW5pbmcKKwkJCQkgIGp1bmsgKi8KKwl1bnNpZ25lZCBjaGFyIHNfdW5oaWRlOworCXVuc2lnbmVkIGNoYXIgc19ub3N1aWQ7CisJdW5zaWduZWQgY2hhciBzX25vZGV2OworCXVuc2lnbmVkIGNoYXIgc19ub2NvbXByZXNzOworCisJbW9kZV90IHNfbW9kZTsKKwlnaWRfdCBzX2dpZDsKKwl1aWRfdCBzX3VpZDsKKwlzdHJ1Y3QgbmxzX3RhYmxlICpzX25sc19pb2NoYXJzZXQ7IC8qIE5hdGl2ZSBsYW5ndWFnZSBzdXBwb3J0IHRhYmxlICovCit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXN0YWxsaW9uLmggYi9pbmNsdWRlL2xpbnV4L2lzdGFsbGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmNGVlNjQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2lzdGFsbGlvbi5oCkBAIC0wLDAgKzEsMTMyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKglpc3RhbGxpb24uaCAgLS0gc3RhbGxpb24gaW50ZWxsaWdlbnQgbXVsdGlwb3J0IHNlcmlhbCBkcml2ZXIuCisgKgorICoJQ29weXJpZ2h0IChDKSAxOTk2LTE5OTggIFN0YWxsaW9uIFRlY2hub2xvZ2llcworICoJQ29weXJpZ2h0IChDKSAxOTk0LTE5OTYgIEdyZWcgVW5nZXJlci4KKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKgkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICoJYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqCU1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCUdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICoJWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqCWFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKglGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmCV9JU1RBTExJT05fSAorI2RlZmluZQlfSVNUQUxMSU9OX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCURlZmluZSBpbXBvcnRhbnQgZHJpdmVyIGNvbnN0YW50cyBoZXJlLgorICovCisjZGVmaW5lCVNUTF9NQVhCUkRTCQk0CisjZGVmaW5lCVNUTF9NQVhQQU5FTFMJCTQKKyNkZWZpbmUJU1RMX01BWFBPUlRTCQk2NAorI2RlZmluZQlTVExfTUFYQ0hBTlMJCShTVExfTUFYUE9SVFMgKyAxKQorI2RlZmluZQlTVExfTUFYREVWUwkJKFNUTF9NQVhCUkRTICogU1RMX01BWFBPUlRTKQorCisKKy8qCisgKglEZWZpbmUgYSBzZXQgb2Ygc3RydWN0dXJlcyB0byBob2xkIGFsbCB0aGUgYm9hcmQvcGFuZWwvcG9ydCBpbmZvCisgKglmb3Igb3VyIHBvcnRzLiBUaGVzZSB3aWxsIGJlIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBhcyByZXF1aXJlZCBhdAorICoJZHJpdmVyIGluaXRpYWxpemF0aW9uIHRpbWUuCisgKi8KKworLyoKKyAqCVBvcnQgYW5kIGJvYXJkIHN0cnVjdHVyZXMgdG8gaG9sZCBzdGF0dXMgaW5mbyBhYm91dCBlYWNoIG9iamVjdC4KKyAqCVRoZSBib2FyZCBzdHJ1Y3R1cmUgY29udGFpbnMgcG9pbnRlcnMgdG8gc3RydWN0dXJlcyBmb3IgZWFjaCBwb3J0CisgKgljb25uZWN0ZWQgdG8gaXQuIFBhbmVscyBhcmUgbm90IGRpc3Rpbmd1aXNoZWQgaGVyZSwgc2luY2UKKyAqCWNvbW11bmljYXRpb24gd2l0aCB0aGUgc2xhdmUgYm9hcmQgd2lsbCBhbHdheXMgYmUgb24gYSBwZXIgcG9ydAorICoJYmFzaXMuCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBsb25nCQltYWdpYzsKKwlpbnQJCQlwb3J0bnI7CisJaW50CQkJcGFuZWxucjsKKwlpbnQJCQlicmRucjsKKwl1bnNpZ25lZCBsb25nCQlzdGF0ZTsKKwlpbnQJCQlkZXZucjsKKwlpbnQJCQlmbGFnczsKKwlpbnQJCQliYXVkX2Jhc2U7CisJaW50CQkJY3VzdG9tX2Rpdmlzb3I7CisJaW50CQkJY2xvc2VfZGVsYXk7CisJaW50CQkJY2xvc2luZ193YWl0OworCWludAkJCXJlZmNvdW50OworCWludAkJCW9wZW53YWl0Y250OworCWludAkJCXJjOworCWludAkJCWFyZ3NpemU7CisJdm9pZAkJCSphcmdwOworCXVuc2lnbmVkIGludAkJcnhtYXJrbXNrOworCXN0cnVjdCB0dHlfc3RydWN0CSp0dHk7CisJd2FpdF9xdWV1ZV9oZWFkX3QJb3Blbl93YWl0OworCXdhaXRfcXVldWVfaGVhZF90CWNsb3NlX3dhaXQ7CisJd2FpdF9xdWV1ZV9oZWFkX3QJcmF3X3dhaXQ7CisJc3RydWN0IHdvcmtfc3RydWN0CXRxaGFuZ3VwOworCWFzeXNpZ3NfdAkJYXNpZzsKKwl1bnNpZ25lZCBsb25nCQlhZGRyOworCXVuc2lnbmVkIGxvbmcJCXJ4b2Zmc2V0OworCXVuc2lnbmVkIGxvbmcJCXR4b2Zmc2V0OworCXVuc2lnbmVkIGxvbmcJCXNpZ3M7CisJdW5zaWduZWQgbG9uZwkJcGZsYWc7CisJdW5zaWduZWQgaW50CQlyeHNpemU7CisJdW5zaWduZWQgaW50CQl0eHNpemU7CisJdW5zaWduZWQgY2hhcgkJcmVxYml0OworCXVuc2lnbmVkIGNoYXIJCXBvcnRpZHg7CisJdW5zaWduZWQgY2hhcgkJcG9ydGJpdDsKK30gc3RsaXBvcnRfdDsKKworLyoKKyAqCVVzZSBhIHN0cnVjdHVyZSBvZiBmdW5jdGlvbiBwb2ludGVycyB0byBkbyBib2FyZCBsZXZlbCBvcGVyYXRpb25zLgorICoJVGhlc2UgaW5jbHVkZSwgZW5hYmxlL2Rpc2FibGUsIHBhZ2luZyBzaGFyZWQgbWVtb3J5LCBpbnRlcnJ1cHRpbmcsIGV0Yy4KKyAqLwordHlwZWRlZiBzdHJ1Y3Qgc3RsaWJyZCB7CisJdW5zaWduZWQgbG9uZwltYWdpYzsKKwlpbnQJCWJyZG5yOworCWludAkJYnJkdHlwZTsKKwlpbnQJCXN0YXRlOworCWludAkJbnJwYW5lbHM7CisJaW50CQlucnBvcnRzOworCWludAkJbnJkZXZzOworCXVuc2lnbmVkIGludAlpb2Jhc2U7CisJaW50CQlpb3NpemU7CisJdW5zaWduZWQgbG9uZwltZW1hZGRyOworCXZvaWQJCSptZW1iYXNlOworCWludAkJbWVtc2l6ZTsKKwlpbnQJCXBhZ2VzaXplOworCWludAkJaG9zdG9mZnNldDsKKwlpbnQJCXNsYXZlb2Zmc2V0OworCWludAkJYml0c2l6ZTsKKwlpbnQJCWVuYWJ2YWw7CisJaW50CQlwYW5lbHNbU1RMX01BWFBBTkVMU107CisJaW50CQlwYW5lbGlkc1tTVExfTUFYUEFORUxTXTsKKwl2b2lkCQkoKmluaXQpKHN0cnVjdCBzdGxpYnJkICpicmRwKTsKKwl2b2lkCQkoKmVuYWJsZSkoc3RydWN0IHN0bGlicmQgKmJyZHApOworCXZvaWQJCSgqcmVlbmFibGUpKHN0cnVjdCBzdGxpYnJkICpicmRwKTsKKwl2b2lkCQkoKmRpc2FibGUpKHN0cnVjdCBzdGxpYnJkICpicmRwKTsKKwljaGFyCQkqKCpnZXRtZW1wdHIpKHN0cnVjdCBzdGxpYnJkICpicmRwLCB1bnNpZ25lZCBsb25nIG9mZnNldCwgaW50IGxpbmUpOworCXZvaWQJCSgqaW50cikoc3RydWN0IHN0bGlicmQgKmJyZHApOworCXZvaWQJCSgqcmVzZXQpKHN0cnVjdCBzdGxpYnJkICpicmRwKTsKKwlzdGxpcG9ydF90CSpwb3J0c1tTVExfTUFYUE9SVFNdOworfSBzdGxpYnJkX3Q7CisKKworLyoKKyAqCURlZmluZSBNQUdJQyBudW1iZXJzIHVzZWQgZm9yIGFib3ZlIHN0cnVjdHVyZXMuCisgKi8KKyNkZWZpbmUJU1RMSV9QT1JUTUFHSUMJMHhlNjcxYzdhMQorI2RlZmluZQlTVExJX0JPQVJETUFHSUMJMHg0YmM2YzgyNQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXRlX2dwaW8uaCBiL2luY2x1ZGUvbGludXgvaXRlX2dwaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTIzYTE0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9pdGVfZ3Bpby5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBGSUxFIE5BTUUgaXRlX2dwaW8uaAorICoKKyAqIEJSSUVGIE1PRFVMRSBERVNDUklQVElPTgorICoJR2VuZXJpYyBncGlvLgorICoKKyAqICBBdXRob3I6IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gIDxzb3VyY2VAbXZpc3RhLmNvbT4KKyAqICAgICAgICAgIEhhaS1QYW8gRmFuIDxoYWlwYW9AbXZpc3RhLmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgMjAwMSBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVEhJUyAgU09GVFdBUkUgIElTIFBST1ZJREVEICAgYGBBUyAgSVMnJyBBTkQgICBBTlkgIEVYUFJFU1MgT1IgSU1QTElFRAorICogIFdBUlJBTlRJRVMsICAgSU5DTFVESU5HLCBCVVQgTk9UICBMSU1JVEVEICBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTgorICogIE5PICBFVkVOVCAgU0hBTEwgICBUSEUgQVVUSE9SICBCRSAgICBMSUFCTEUgRk9SIEFOWSAgIERJUkVDVCwgSU5ESVJFQ1QsCisgKiAgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiAgTk9UIExJTUlURUQgICBUTywgUFJPQ1VSRU1FTlQgT0YgIFNVQlNUSVRVVEUgR09PRFMgIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCisgKiAgVVNFLCBEQVRBLCAgT1IgUFJPRklUUzsgT1IgIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiAgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX0lURV9HUElPX0gKKyNkZWZpbmUgX19JVEVfR1BJT19ICisKKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorCitzdHJ1Y3QgaXRlX2dwaW9faW9jdGxfZGF0YSB7CisJX191MzIgZGV2aWNlOworCV9fdTMyIG1hc2s7CisJX191MzIgZGF0YTsKK307CisKKyNkZWZpbmUgSVRFX0dQSU9fSU9DVExfQkFTRQknWicKKworI2RlZmluZSBJVEVfR1BJT19JTgkJX0lPV1IoSVRFX0dQSU9fSU9DVExfQkFTRSwgMCwgc3RydWN0IGl0ZV9ncGlvX2lvY3RsX2RhdGEpCisjZGVmaW5lIElURV9HUElPX09VVAkJX0lPVyAoSVRFX0dQSU9fSU9DVExfQkFTRSwgMSwgc3RydWN0IGl0ZV9ncGlvX2lvY3RsX2RhdGEpCisjZGVmaW5lCUlURV9HUElPX0lOVF9DVFJMCV9JT1cgKElURV9HUElPX0lPQ1RMX0JBU0UsIDIsIHN0cnVjdCBpdGVfZ3Bpb19pb2N0bF9kYXRhKQorI2RlZmluZQlJVEVfR1BJT19JTl9TVEFUVVMJX0lPVyAoSVRFX0dQSU9fSU9DVExfQkFTRSwgMywgc3RydWN0IGl0ZV9ncGlvX2lvY3RsX2RhdGEpCisjZGVmaW5lCUlURV9HUElPX09VVF9TVEFUVVMJX0lPVyAoSVRFX0dQSU9fSU9DVExfQkFTRSwgNCwgc3RydWN0IGl0ZV9ncGlvX2lvY3RsX2RhdGEpCisjZGVmaW5lIElURV9HUElPX0dFTl9DVFJMCV9JT1cgKElURV9HUElPX0lPQ1RMX0JBU0UsIDUsIHN0cnVjdCBpdGVfZ3Bpb19pb2N0bF9kYXRhKQorI2RlZmluZSBJVEVfR1BJT19JTlRfV0FJVAlfSU9XIChJVEVfR1BJT19JT0NUTF9CQVNFLCA2LCBzdHJ1Y3QgaXRlX2dwaW9faW9jdGxfZGF0YSkKKworI2RlZmluZQlJVEVfR1BJT19QT1JUQQkweDAxCisjZGVmaW5lCUlURV9HUElPX1BPUlRCCTB4MDIKKyNkZWZpbmUJSVRFX0dQSU9fUE9SVEMJMHgwNAorCitleHRlcm4gaW50IGl0ZV9ncGlvX2luKF9fdTMyIGRldmljZSwgX191MzIgbWFzaywgdm9sYXRpbGUgX191MzIgKmRhdGEpOworZXh0ZXJuIGludCBpdGVfZ3Bpb19vdXQoX191MzIgZGV2aWNlLCBfX3UzMiBtYXNrLCBfX3UzMiBkYXRhKTsKK2V4dGVybiBpbnQgaXRlX2dwaW9faW50X2N0cmwoX191MzIgZGV2aWNlLCBfX3UzMiBtYXNrLCBfX3UzMiBkYXRhKTsKK2V4dGVybiBpbnQgaXRlX2dwaW9faW5fc3RhdHVzKF9fdTMyIGRldmljZSwgX191MzIgbWFzaywgdm9sYXRpbGUgX191MzIgKmRhdGEpOworZXh0ZXJuIGludCBpdGVfZ3Bpb19vdXRfc3RhdHVzKF9fdTMyIGRldmljZSwgX191MzIgbWFzaywgX191MzIgZGF0YSk7CitleHRlcm4gaW50IGl0ZV9ncGlvX2dlbl9jdHJsKF9fdTMyIGRldmljZSwgX191MzIgbWFzaywgX191MzIgZGF0YSk7CitleHRlcm4gaW50IGl0ZV9ncGlvX2ludF93YWl0KF9fdTMyIGRldmljZSwgX191MzIgbWFzaywgX191MzIgZGF0YSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9peGp1c2VyLmggYi9pbmNsdWRlL2xpbnV4L2l4anVzZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODEyMTE2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9peGp1c2VyLmgKQEAgLTAsMCArMSw3MjIgQEAKKyNpZm5kZWYgX19MSU5VWF9JWEpVU0VSX0gKKyNkZWZpbmUgX19MSU5VWF9JWEpVU0VSX0gKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICAgIGl4anVzZXIuaAorICoKKyAqIERldmljZSBEcml2ZXIgZm9yIFF1aWNrbmV0IFRlY2hub2xvZ2llcywgSW5jLidzIFRlbGVwaG9ueSBjYXJkcworICogaW5jbHVkaW5nIHRoZSBJbnRlcm5ldCBQaG9uZUpBQ0ssIEludGVybmV0IFBob25lSkFDSyBMaXRlLAorICogSW50ZXJuZXQgUGhvbmVKQUNLIFBDSSwgSW50ZXJuZXQgTGluZUpBQ0ssIEludGVybmV0IFBob25lQ0FSRCBhbmQKKyAqIFNtYXJ0Q0FCTEUKKyAqCisgKiAgICAoYykgQ29weXJpZ2h0IDE5OTktMjAwMSAgUXVpY2tuZXQgVGVjaG5vbG9naWVzLCBJbmMuCisgKgorICogICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogICAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBBdXRob3I6ICAgICAgICAgIEVkIE9rZXJzb24sIDxlb2tlcnNvbkBxdWlja25ldC5uZXQ+CisgKiAgICAKKyAqIENvbnRyaWJ1dG9yczogICAgR3JlZyBIZXJsZWluLCA8Z2hlcmxlaW5AcXVpY2tuZXQubmV0PgorICogICAgICAgICAgICAgICAgICBEYXZpZCBXLiBFcmhhcnQsIDxkZXJoYXJ0QHF1aWNrbmV0Lm5ldD4KKyAqICAgICAgICAgICAgICAgICAgSm9obiBTZWxsZXJzLCA8anNlbGxlcnNAcXVpY2tuZXQubmV0PgorICogICAgICAgICAgICAgICAgICBNaWtlIFByZXN0b24sIDxtcHJlc3RvbkBxdWlja25ldC5uZXQ+CisgKgorICogTW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgaGFyZHdhcmUgcmVsYXRlZCB0byB0aGlzIGRyaXZlciBjYW4gYmUgZm91bmQKKyAqIGF0IG91ciB3ZWJzaXRlOiAgICBodHRwOi8vd3d3LnF1aWNrbmV0Lm5ldAorICoKKyAqIEZpeGVzOgorICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFFVSUNLTkVUIFRFQ0hOT0xPR0lFUywgSU5DLiBCRSBMSUFCTEUgVE8gQU5ZIFBBUlRZIEZPUgorICogRElSRUNULCBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OLCBFVkVOIElGIFFVSUNLTkVUCisgKiBURUNITk9MT0dJRVMsIElOQy5IQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiBRVUlDS05FVCBURUNITk9MT0dJRVMsIElOQy4gU1BFQ0lGSUNBTExZIERJU0NMQUlNUyBBTlkgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQorICogQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIFNPRlRXQVJFIFBST1ZJREVEIEhFUkVVTkRFUiBJUworICogT04gQU4gIkFTIElTIiBCQVNJUywgQU5EIFFVSUNLTkVUIFRFQ0hOT0xPR0lFUywgSU5DLiBIQVMgTk8gT0JMSUdBVElPTiAKKyAqIFRPIFBST1ZJREUgTUFJTlRFTkFOQ0UsIFNVUFBPUlQsIFVQREFURVMsIEVOSEFOQ0VNRU5UUywgT1IgTU9ESUZJQ0FUSU9OUy4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBjaGFyIGl4anVzZXJfaF9yY3NpZFtdID0gIiRJZDogaXhqdXNlci5oLHYgNC4xIDIwMDEvMDgvMDUgMDA6MTc6MzcgY3JhaWdzIEV4cCAkIjsKKworI2luY2x1ZGUgPGxpbnV4L3RlbGVwaG9ueS5oPgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogSU9DVEwncyB1c2VkIGZvciB0aGUgUXVpY2tuZXQgVGVsZXBob255IENhcmRzCisqCisqIElmIHlvdSB1c2UgdGhlIElYSkNUTF9URVNUUkFNIGNvbW1hbmQsIHRoZSBjYXJkIG11c3QgYmUgcG93ZXIgY3ljbGVkIHRvCisqIHJlc2V0IHRoZSBTUkFNIHZhbHVlcyBiZWZvcmUgZnV0aGVyIHVzZS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBJWEpDVExfRFNQX1JFU0VUIAkJX0lPICAoJ3EnLCAweEMwKQorCisjZGVmaW5lIElYSkNUTF9SSU5HICAgICAgICAgICAgICAgICAgICAgUEhPTkVfUklORworI2RlZmluZSBJWEpDVExfSE9PS1NUQVRFICAgICAgICAgICAgICAgIFBIT05FX0hPT0tTVEFURQorI2RlZmluZSBJWEpDVExfTUFYUklOR1MJCQlQSE9ORV9NQVhSSU5HUworI2RlZmluZSBJWEpDVExfUklOR19DQURFTkNFCQlQSE9ORV9SSU5HX0NBREVOQ0UKKyNkZWZpbmUgSVhKQ1RMX1JJTkdfU1RBUlQJCVBIT05FX1JJTkdfU1RBUlQKKyNkZWZpbmUgSVhKQ1RMX1JJTkdfU1RPUAkJUEhPTkVfUklOR19TVE9QCisKKyNkZWZpbmUgSVhKQ1RMX0NBUkRUWVBFCQkJX0lPUiAoJ3EnLCAweEMxLCBpbnQpCisjZGVmaW5lIElYSkNUTF9TRVJJQUwJCQlfSU9SICgncScsIDB4QzIsIGludCkKKyNkZWZpbmUgSVhKQ1RMX0RTUF9UWVBFICAgICAgICAgICAgICAgICBfSU9SICgncScsIDB4QzMsIGludCkKKyNkZWZpbmUgSVhKQ1RMX0RTUF9WRVJTSU9OICAgICAgICAgICAgICBfSU9SICgncScsIDB4QzQsIGludCkKKyNkZWZpbmUgSVhKQ1RMX1ZFUlNJT04gICAgICAgICAgICAgIAlfSU9SICgncScsIDB4REEsIGNoYXIgKikKKyNkZWZpbmUgSVhKQ1RMX0RTUF9JRExFCQkJX0lPICAoJ3EnLCAweEM1KQorI2RlZmluZSBJWEpDVExfVEVTVFJBTQkJCV9JTyAgKCdxJywgMHhDNikKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiBUaGlzIGdyb3VwIG9mIElPQ1RMcyBkZWFsIHdpdGggdGhlIHJlY29yZCBzZXR0aW5ncyBvZiB0aGUgRFNQCisqCisqIFRoZSBJWEpDVExfUkVDX0RFUFRIIGNvbW1hbmQgc2V0cyB0aGUgaW50ZXJuYWwgYnVmZmVyIGRlcHRoIG9mIHRoZSBEU1AuCisqIFNldHRpbmcgYSBsb3dlciBkZXB0aCByZWR1Y2VzIGxhdGVuY3ksIGJ1dCBpbmNyZWFzZXMgdGhlIGRlbWFuZCBvZiB0aGUKKyogYXBwbGljYXRpb24gdG8gc2VydmljZSB0aGUgZHJpdmVyIHdpdGhvdXQgZnJhbWUgbG9zcy4gIFRoZSBEU1AgaGFzIDQ4MAorKiBieXRlcyBvZiBwaHlzaWNhbCBidWZmZXIgbWVtb3J5IGZvciB0aGUgcmVjb3JkIGNoYW5uZWwgc28gdGhlIHRydWUKKyogbWF4aW11bSBsaW1pdCBpcyBkZXRlcm1pbmVkIGJ5IGhvdyBtYW55IGZyYW1lcyB3aWxsIGZpdCBpbiB0aGUgYnVmZmVyLgorKgorKiAxIHVuY29tcHJlc3NlZCAoNDgwIGJ5dGUpIDE2LWJpdCBsaW5lYXIgZnJhbWUuCisqIDIgdW5jb21wcmVzc2VkICgyNDAgYnl0ZSkgOC1iaXQgQS1sYXcvbXUtbGF3IGZyYW1lcy4KKyogMTUgVHJ1ZVNwZWVjaCA4LjUgZnJhbWVzLgorKiAyMCBUcnVlU3BlZWNoIDYuMyw1LjMsNC44IG9yIDQuMSBmcmFtZXMuCisqCisqIFRoZSBkZWZhdWx0IGluIHRoZSBkcml2ZXIgaXMgY3VycmVudGx5IHNldCB0byAyIGZyYW1lcy4KKyoKKyogVGhlIElYSkNUTF9SRUNfVk9MVU1FIGFuZCBJWEpDVExfUExBWV9WT0xVTUUgY29tbWFuZHMgYm90aCB1c2UgYSBROAorKiBudW1iZXIgYXMgYSBwYXJhbWV0ZXIsIDB4MTAwIHNjYWxlcyB0aGUgc2lnbmFsIGJ5IDEuMCwgMHgyMDAgc2NhbGVzIHRoZQorKiBzaWduYWwgYnkgMi4wLCAweDgwIHNjYWxlcyB0aGUgc2lnbmFsIGJ5IDAuNS4gIE5vIHByb3RlY3Rpb24gaXMgZ2l2ZW4KKyogYWdhaW5zdCBvdmVyLXNjYWxpbmcsIGlmIHRoZSBtdWx0aXBsaWNhdGlvbiBmYWN0b3IgdGltZXMgdGhlIGlucHV0CisqIHNpZ25hbCBleGNlZWRzIDE2IGJpdHMsIG92ZXJmbG93IGRpc3RvcnRpb24gd2lsbCBvY2N1ci4gIFRoZSBkZWZhdWx0CisqIHNldHRpbmcgaXMgMHgxMDAgKDEuMCkuCisqCisqIFRoZSBJWEpDVExfUkVDX0xFVkVMIHJldHVybnMgdGhlIGF2ZXJhZ2Ugc2lnbmFsIGxldmVsIChub3Qgci5tLnMuKSBvbgorKiB0aGUgbW9zdCByZWNlbnRseSByZWNvcmRlZCBmcmFtZSBhcyBhIDE2IGJpdCB2YWx1ZS4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBJWEpDVExfUkVDX0NPREVDICAgICAgICAgICAgICAgIFBIT05FX1JFQ19DT0RFQworI2RlZmluZSBJWEpDVExfUkVDX1NUQVJUICAgICAgICAgICAgICAgIFBIT05FX1JFQ19TVEFSVAorI2RlZmluZSBJWEpDVExfUkVDX1NUT1AgICAgICAgICAgICAgICAgIFBIT05FX1JFQ19TVE9QCisjZGVmaW5lIElYSkNUTF9SRUNfREVQVEgJCVBIT05FX1JFQ19ERVBUSAorI2RlZmluZSBJWEpDVExfRlJBTUUJCQlQSE9ORV9GUkFNRQorI2RlZmluZSBJWEpDVExfUkVDX1ZPTFVNRQkJUEhPTkVfUkVDX1ZPTFVNRQorI2RlZmluZSBJWEpDVExfUkVDX0xFVkVMCQlQSE9ORV9SRUNfTEVWRUwKKwordHlwZWRlZiBlbnVtIHsKKwlmMzAwXzY0MCA9IDQsIGYzMDBfNTAwLCBmMTEwMCwgZjM1MCwgZjQwMCwgZjQ4MCwgZjQ0MCwgZjYyMCwgZjIwXzUwLAorCWYxMzNfMjAwLCBmMzAwLCBmMzAwXzQyMCwgZjMzMCwgZjMwMF80MjUsIGYzMzBfNDQwLCBmMzQwLCBmMzUwXzQwMCwKKwlmMzUwXzQ0MCwgZjM1MF80NTAsIGYzNjAsIGYzODBfNDIwLCBmMzkyLCBmNDAwXzQyNSwgZjQwMF80NDAsIGY0MDBfNDUwLAorCWY0MjAsIGY0MjUsIGY0MjVfNDUwLCBmNDI1XzQ3NSwgZjQzNSwgZjQ0MF80NTAsIGY0NDBfNDgwLCBmNDQ1LCBmNDUwLAorCWY0NTIsIGY0NzUsIGY0ODBfNjIwLCBmNDk0LCBmNTAwLCBmNTIwLCBmNTIzLCBmNTI1LCBmNTQwXzY2MCwgZjU4NywKKwlmNTkwLCBmNjAwLCBmNjYwLCBmNzAwLCBmNzQwLCBmNzUwLCBmNzUwXzE0NTAsIGY3NzAsIGY4MDAsIGY4MTYsIGY4NTAsCisJZjg1N18xNjQ1LCBmOTAwLCBmOTAwXzEzMDAsIGY5MzVfMTIxNSwgZjk0MV8xNDc3LCBmOTQyLCBmOTUwLCBmOTUwXzE0MDAsCisJZjk3NSwgZjEwMDAsIGYxMDIwLCBmMTA1MCwgZjExMDBfMTc1MCwgZjExNDAsIGYxMjAwLCBmMTIwOSwgZjEzMzAsIGYxMzM2LAorCWxmMTM2NiwgZjEzODAsIGYxNDAwLCBmMTQ3NywgZjE2MDAsIGYxNjMzXzE2MzgsIGYxODAwLCBmMTg2MAorfSBJWEpfRklMVEVSX0ZSRVE7CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQgZmlsdGVyOworCUlYSl9GSUxURVJfRlJFUSBmcmVxOworCWNoYXIgZW5hYmxlOworfSBJWEpfRklMVEVSOworCit0eXBlZGVmIHN0cnVjdCB7CisJY2hhciBlbmFibGU7CisJY2hhciBlbl9maWx0ZXI7CisJdW5zaWduZWQgaW50IGZpbHRlcjsKKwl1bnNpZ25lZCBpbnQgb24xOworCXVuc2lnbmVkIGludCBvZmYxOworCXVuc2lnbmVkIGludCBvbjI7CisJdW5zaWduZWQgaW50IG9mZjI7CisJdW5zaWduZWQgaW50IG9uMzsKKwl1bnNpZ25lZCBpbnQgb2ZmMzsKK30gSVhKX0ZJTFRFUl9DQURFTkNFOworCisjZGVmaW5lIElYSkNUTF9TRVRfRklMVEVSCQlfSU9XICgncScsIDB4QzcsIElYSl9GSUxURVIgKikKKyNkZWZpbmUgSVhKQ1RMX1NFVF9GSUxURVJfUkFXCQlfSU9XICgncScsIDB4REQsIElYSl9GSUxURVJfUkFXICopCisjZGVmaW5lIElYSkNUTF9HRVRfRklMVEVSX0hJU1QJCV9JT1cgKCdxJywgMHhDOCwgaW50KQorI2RlZmluZSBJWEpDVExfRklMVEVSX0NBREVOQ0UJCV9JT1cgKCdxJywgMHhENiwgSVhKX0ZJTFRFUl9DQURFTkNFICopCisjZGVmaW5lIElYSkNUTF9QTEFZX0NJRAkJCV9JTyAgKCdxJywgMHhENykKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogVGhpcyBJT0NUTCBhbGxvd3MgeW91IHRvIHJlYXNzaWduIHZhbHVlcyBpbiB0aGUgdG9uZSBpbmRleCB0YWJsZS4gIFRoZQorKiB0b25lIHRhYmxlIGhhcyAzMiBlbnRyaWVzICgwIC0gMzEpLCBidXQgdGhlIGRyaXZlciBvbmx5IGFsbG93cyBlbnRyaWVzCisqIDEzIC0gMjcgdG8gYmUgbW9kaWZpZWQsIGVudHJ5IDAgaXMgcmVzZXJ2ZWQgZm9yIHNpbGVuY2UgYW5kIDEgLSAxMiBhcmUKKyogdGhlIHN0YW5kYXJkIERUTUYgZGlnaXRzIGFuZCAyOCAtIDMxIGFyZSB0aGUgRFRNRiB0b25lcyBmb3IgQSwgQiwgQyAmIEQuCisqIFRoZSBwb3NpdGlvbnMgdXNlZCBpbnRlcm5hbGx5IGZvciBDYWxsIFByb2dyZXNzIFRvbmVzIGFyZSBhcyBmb2xsb3dzOgorKiAgICBEaWFsIFRvbmUgICAtIDI1CisqICAgIFJpbmcgQmFjayAgIC0gMjYKKyogICAgQnVzeSBTaWduYWwgLSAyNworKgorKiBUaGUgZnJlcSB2YWx1ZXMgYXJlIGNhbGN1bGF0ZWQgYXM6CisqIGZyZXEgPSBjb3MoMiAqIFBJICogZnJlcXVlbmN5IC8gODAwMCkKKyoKKyogVGhlIG1vc3QgY29tbW9ubHkgbmVlZGVkIHZhbHVlcyBhcmUgYWxyZWFkeSBjYWxjdWxhdGVkIGFuZCBsaXN0ZWQgaW4gdGhlCisqIGVudW0gSVhKX1RPTkVfRlJFUS4gIEVhY2ggdG9uZSBpbmRleCBjYW4gaGF2ZSB0d28gZnJlcXVlbmNpZXMgd2l0aAorKiBkaWZmZXJlbnQgZ2FpbnMsIGlmIHlvdSBhcmUgb25seSB1c2luZyBhIHNpbmdsZSBmcmVxdWVuY3kgc2V0IHRoZSB1bnVzZWQKKyogb25lIHRvIDAuCisqCisqIFRoZSBnYWluIHZhbHVlcyByYW5nZSBmcm9tIDAgdG8gMTUgaW5kaWNhdGluZyArNmRCIHRvIC0yNGRCIGluIDJkQgorKiBpbmNyZW1lbnRzLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIGVudW0geworCWh6MjAgPSAweDdmZmEsCisJaHo1MCA9IDB4N2ZlNSwKKwloejEzMyA9IDB4N2Y0YywKKwloejIwMCA9IDB4N2U2YiwKKwloejI2MSA9IDB4N2Q1MCwJCS8qIC42MyBDMSAgKi8KKwloejI3NyA9IDB4N2NmYSwJCS8qIC4xOCBDUzEgKi8KKwloejI5MyA9IDB4N2M5ZiwJCS8qIC42NiBEMSAgKi8KKwloejMwMCA9IDB4N2M3NSwKKwloejMxMSA9IDB4N2MzMiwJCS8qIC4xMyBEUzEgKi8KKwloejMyOSA9IDB4N2JiZiwJCS8qIC42MyBFMSAgKi8KKwloejMzMCA9IDB4N2JiOCwKKwloejM0MCA9IDB4N2I3NSwKKwloejM0OSA9IDB4N2IzNywJCS8qIC4yMyBGMSAgKi8KKwloejM1MCA9IDB4N2IzMCwKKwloejM2MCA9IDB4N2FlOSwKKwloejM2OSA9IDB4N2FhOCwJCS8qIC45OSBGUzEgKi8KKwloejM4MCA9IDB4N2E1NiwKKwloejM5MiA9IDB4NzlmYSwJCS8qIC4wMCBHMSAgKi8KKwloejQwMCA9IDB4NzliYiwKKwloejQxNSA9IDB4Nzk0MSwJCS8qIC4zMCBHUzEgKi8KKwloejQyMCA9IDB4NzkxOCwKKwloejQyNSA9IDB4NzhlZSwKKwloejQzNSA9IDB4Nzg5OSwKKwloejQ0MCA9IDB4Nzg2ZCwJCS8qIC4wMCBBMSAgKi8KKwloejQ0NSA9IDB4Nzg0MiwKKwloejQ1MCA9IDB4NzgxNSwKKwloejQ1MiA9IDB4NzgwMywKKwloejQ2NiA9IDB4Nzc4NCwJCS8qIC4xNiBBUzEgKi8KKwloejQ3NSA9IDB4NzczMSwKKwloejQ4MCA9IDB4NzcwMSwKKwloejQ5MyA9IDB4NzY4NSwJCS8qIC44OCBCMSAgKi8KKwloejQ5NCA9IDB4NzY3YiwKKwloejUwMCA9IDB4NzY0MCwKKwloejUyMCA9IDB4NzU3OCwKKwloejUyMyA9IDB4NzU1OSwJCS8qIC4yNSBDMiAgKi8KKwloejUyNSA9IDB4NzU0NCwKKwloejU0MCA9IDB4NzRhNywKKwloejU1NCA9IDB4NzQxMSwJCS8qIC4zNyBDUzIgKi8KKwloejU4NyA9IDB4NzJhMSwJCS8qIC4zMyBEMiAgKi8KKwloejU5MCA9IDB4NzI3ZiwKKwloejYwMCA9IDB4NzIwYiwKKwloejYyMCA9IDB4NzExZSwKKwloejYyMiA9IDB4NzEwNiwJCS8qIC4yNSBEUzIgKi8KKwloejY1OSA9IDB4NmYzYiwJCS8qIC4yNiBFMiAgKi8KKwloejY2MCA9IDB4NmYyZSwKKwloejY5OCA9IDB4NmQzZCwJCS8qIC40NiBGMiAgKi8KKwloejcwMCA9IDB4NmQyMiwKKwloejczOSA9IDB4NmIwOSwJCS8qIC45OSBGUzIgKi8KKwloejc0MCA9IDB4NmFmYSwKKwloejc1MCA9IDB4NmE2YywKKwloejc3MCA9IDB4Njk0YiwKKwloejc4MyA9IDB4Njg4YiwJCS8qIC45OSBHMiAgKi8KKwloejgwMCA9IDB4Njc4ZCwKKwloejgxNiA9IDB4NjY5OCwKKwloejgzMCA9IDB4NjViZiwJCS8qIC42MSBHUzIgKi8KKwloejg1MCA9IDB4NjQ4NCwKKwloejg1NyA9IDB4NjQxNCwKKwloejg4MCA9IDB4NjI5ZiwJCS8qIC4wMCBBMiAgKi8KKwloejkwMCA9IDB4NjE1NCwKKwloejkzMiA9IDB4NWYzNSwJCS8qIC4zMyBBUzIgKi8KKwloejkzNSA9IDB4NWYwMSwKKwloejk0MSA9IDB4NWU5YSwKKwloejk0MiA9IDB4NWU4OCwKKwloejk1MCA9IDB4NWRmZCwKKwloejk3NSA9IDB4NWM0NCwKKwloejEwMDAgPSAweDVhODEsCisJaHoxMDIwID0gMHg1OTEyLAorCWh6MTA1MCA9IDB4NTZlMiwKKwloejExMDAgPSAweDUzMjAsCisJaHoxMTQwID0gMHg1MDA3LAorCWh6MTIwMCA9IDB4NGIzYiwKKwloejEyMDkgPSAweDRhODAsCisJaHoxMjE1ID0gMHg0YTAyLAorCWh6MTI1MCA9IDB4NDcxYywKKwloejEzMDAgPSAweDQyZTAsCisJaHoxMzMwID0gMHg0MDQ5LAorCWh6MTMzNiA9IDB4M2ZjNCwKKwloejEzNjYgPSAweDNkMjIsCisJaHoxMzgwID0gMHgzYmU0LAorCWh6MTQwMCA9IDB4M2ExYiwKKwloejE0NTAgPSAweDM1OTYsCisJaHoxNDc3ID0gMHgzMzFjLAorCWh6MTUwMCA9IDB4MzBmYiwKKwloejE2MDAgPSAweDI3OGQsCisJaHoxNjMzID0gMHgyNDYyLAorCWh6MTYzOCA9IDB4MjNlNywKKwloejE2NDUgPSAweDIzM2EsCisJaHoxNzUwID0gMHgxOGY4LAorCWh6MTgwMCA9IDB4MTQwNSwKKwloejE4NjAgPSAweGUwYiwKKwloejIxMDAgPSAweGY1ZjYsCisJaHoyMTMwID0gMHhmMmY1LAorCWh6MjQ1MCA9IDB4ZDNiMywKKwloejI3NTAgPSAweGI4ZTQKK30gSVhKX0ZSRVE7CisKK3R5cGVkZWYgZW51bSB7CisJQzEgPSBoejI2MSwKKwlDUzEgPSBoejI3NywKKwlEMSA9IGh6MjkzLAorCURTMSA9IGh6MzExLAorCUUxID0gaHozMjksCisJRjEgPSBoejM0OSwKKwlGUzEgPSBoejM2OSwKKwlHMSA9IGh6MzkyLAorCUdTMSA9IGh6NDE1LAorCUExID0gaHo0NDAsCisJQVMxID0gaHo0NjYsCisJQjEgPSBoejQ5MywKKwlDMiA9IGh6NTIzLAorCUNTMiA9IGh6NTU0LAorCUQyID0gaHo1ODcsCisJRFMyID0gaHo2MjIsCisJRTIgPSBoejY1OSwKKwlGMiA9IGh6Njk4LAorCUZTMiA9IGh6NzM5LAorCUcyID0gaHo3ODMsCisJR1MyID0gaHo4MzAsCisJQTIgPSBoejg4MCwKKwlBUzIgPSBoejkzMiwKK30gSVhKX05PVEU7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlpbnQgdG9uZV9pbmRleDsKKwlpbnQgZnJlcTA7CisJaW50IGdhaW4wOworCWludCBmcmVxMTsKKwlpbnQgZ2FpbjE7Cit9IElYSl9UT05FOworCisjZGVmaW5lIElYSkNUTF9JTklUX1RPTkUJCV9JT1cgKCdxJywgMHhDOSwgSVhKX1RPTkUgKikKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiBUaGUgSVhKQ1RMX1RPTkVfQ0FERU5DRSBpb2N0bCBkZWZpbmVzIHRvbmUgc2VxdWVuY2VzIHVzZWQgZm9yIHZhcmlvdXMKKyogQ2FsbCBQcm9ncmVzcyBUb25lcyAoQ1BUKS4gIFRoaXMgaXMgYWNjb21wbGlzaGVkIGJ5IHNldHRpbmcgdXAgYW4gYXJyYXkgb2YKKyogSVhKX0NBREVOQ0VfRUxFTUVOVCBzdHJ1Y3R1cmVzIHRoYXQgc2VxdWVudGlhbGx5IGRlZmluZSB0aGUgc3RhdGVzIG9mCisqIHRoZSB0b25lIHNlcXVlbmNlLiAgVGhlIHRvbmVfb25fdGltZSBhbmQgdG9uZV9vZmYgdGltZSBhcmUgaW4KKyogMjUwIG1pY3Jvc2Vjb25kIGludGVydmFscy4gIEEgcG9pbnRlciB0byB0aGlzIGFycmF5IGlzIHBhc3NlZCB0byB0aGUKKyogZHJpdmVyIGFzIHRoZSBjZSBlbGVtZW50IG9mIGFuIElYSl9DQURFTkNFIHN0cnVjdHVyZS4gIFRoZSBlbGVtZW50c191c2VkCisqIG11c3QgYmUgc2V0IHRvIHRoZSBudW1iZXIgb2YgSVhKX0NBREVOQ0VfRUxFTUVOVFMgaW4gdGhlIGFycmF5LiAgVGhlCisqIHRlcm1pbmF0aW9uIHZhcmlhYmxlIGRlZmluZXMgd2hhdCB0byBkbyBhdCB0aGUgZW5kIG9mIGEgY2FkZW5jZSwgdGhlCisqIG9wdGlvbnMgYXJlIHRvIHBsYXkgdGhlIGNhZGVuY2Ugb25jZSBhbmQgc3RvcCwgdG8gcmVwZWF0IHRoZSBsYXN0CisqIGVsZW1lbnQgb2YgdGhlIGNhZGVuY2UgaW5kZWZpbml0ZWx5LCBvciB0byByZXBlYXQgdGhlIGVudGlyZSBjYWRlbmNlCisqIGluZGVmaW5pdGVseS4gIFRoZSBjZSB2YXJpYWJsZSBpcyBhIHBvaW50ZXIgdG8gdGhlIGFycmF5IG9mIElYSl9UT05FCisqIHN0cnVjdHVyZXMuICBJZiB0aGUgZnJlcTAgdmFyaWFibGUgaXMgbm9uLXplcm8sIHRoZSB0b25lIHRhYmxlIGNvbnRlbnRzCisqIGZvciB0aGUgdG9uZV9pbmRleCBhcmUgdXBkYXRlZCB0byB0aGUgZnJlcXVlbmNpZXMgYW5kIGdhaW5zIGRlZmluZWQuICBJdAorKiBzaG91bGQgYmUgbm90ZWQgdGhhdCBEVE1GIHRvbmVzIGNhbm5vdCBiZSByZWFzc2lnbmVkLCBzbyBpZiBEVE1GIHRvbmUKKyogdGFibGUgaW5kZXhzIGFyZSB1c2VkIGluIGEgY2FkZW5jZSB0aGUgZnJlcXVlbmN5IGFuZCBnYWluIHZhcmlhYmxlcyB3aWxsCisqIGJlIGlnbm9yZWQuCisqCisqIElmIHRoZSBhcnJheSBlbGVtZW50cyBjb250YWluIGZyZXF1ZW5jeSBwYXJhbWV0ZXJzIHRoZSBkcml2ZXIgd2lsbAorKiBpbml0aWFsaXplIHRoZSBuZWVkZWQgdG9uZSB0YWJsZSBlbGVtZW50cyBhbmQgYmVnaW4gcGxheWluZyB0aGUgdG9uZSwKKyogdGhlcmUgaXMgbm8gcHJlc2V0IGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGNhZGVuY2UuICBJZgorKiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIGZyZXF1ZW5jeSB1c2VkIGluIHRoZSBjYWRlbmNlLCBzZXF1ZW50aWFsIGVsZW1lbnRzCisqIG9mIGRpZmZlcmVudCBmcmVxdWVuY2llcyBNVVNUIHVzZSBkaWZmZXJlbnQgdG9uZSB0YWJsZSBpbmRleGVzLiAgT25seSBvbmUKKyogY2FkZW5jZSBjYW4gYmUgcGxheWVkIGF0IGEgdGltZS4gIEl0IGlzIHBvc3NpYmxlIHRvIGJ1aWxkIGNvbXBsZXgKKyogY2FkZW5jZXMgd2l0aCBtdWx0aXBsZSBmcmVxdWVuY2llcyB1c2luZyAyIHRvbmUgdGFibGUgaW5kZXhlcyBieQorKiBhbHRlcm5hdGluZyBiZXR3ZWVuIHRoZW0uCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgc3RydWN0IHsKKwlpbnQgaW5kZXg7CisJaW50IHRvbmVfb25fdGltZTsKKwlpbnQgdG9uZV9vZmZfdGltZTsKKwlpbnQgZnJlcTA7CisJaW50IGdhaW4wOworCWludCBmcmVxMTsKKwlpbnQgZ2FpbjE7Cit9IElYSl9DQURFTkNFX0VMRU1FTlQ7CisKK3R5cGVkZWYgZW51bSB7CisJUExBWV9PTkNFLAorCVJFUEVBVF9MQVNUX0VMRU1FTlQsCisJUkVQRUFUX0FMTAorfSBJWEpfQ0FERU5DRV9URVJNOworCit0eXBlZGVmIHN0cnVjdCB7CisJaW50IGVsZW1lbnRzX3VzZWQ7CisJSVhKX0NBREVOQ0VfVEVSTSB0ZXJtaW5hdGlvbjsKKwlJWEpfQ0FERU5DRV9FTEVNRU5UIF9fdXNlciAqY2U7Cit9IElYSl9DQURFTkNFOworCisjZGVmaW5lIElYSkNUTF9UT05FX0NBREVOQ0UJCV9JT1cgKCdxJywgMHhDQSwgSVhKX0NBREVOQ0UgKikKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogVGhpcyBncm91cCBvZiBJT0NUTHMgZGVhbCB3aXRoIHRoZSBwbGF5YmFjayBzZXR0aW5ncyBvZiB0aGUgRFNQCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgSVhKQ1RMX1BMQVlfQ09ERUMgICAgICAgICAgICAgICBQSE9ORV9QTEFZX0NPREVDCisjZGVmaW5lIElYSkNUTF9QTEFZX1NUQVJUICAgICAgICAgICAgICAgUEhPTkVfUExBWV9TVEFSVAorI2RlZmluZSBJWEpDVExfUExBWV9TVE9QICAgICAgICAgICAgICAgIFBIT05FX1BMQVlfU1RPUAorI2RlZmluZSBJWEpDVExfUExBWV9ERVBUSAkJUEhPTkVfUExBWV9ERVBUSAorI2RlZmluZSBJWEpDVExfUExBWV9WT0xVTUUJCVBIT05FX1BMQVlfVk9MVU1FCisjZGVmaW5lIElYSkNUTF9QTEFZX0xFVkVMCQlQSE9ORV9QTEFZX0xFVkVMCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogVGhpcyBncm91cCBvZiBJT0NUTHMgZGVhbCB3aXRoIHRoZSBBY291c3RpYyBFY2hvIENhbmNlbGxhdGlvbiBzZXR0aW5ncworKiBvZiB0aGUgRFNQCisqCisqIElzc3VpbmcgdGhlIElYSkNUTF9BRUNfU1RBUlQgY29tbWFuZCB3aXRoIGEgdmFsdWUgb2YgQUVDX09GRiBoYXMgdGhlCisqIHNhbWUgZWZmZWN0IGFzIElYSkNUTF9BRUNfU1RPUC4gIFRoaXMgaXMgdG8gc2ltcGxpZnkgc2xpZGVyIGJhcgorKiBjb250cm9scy4gIElYSkNUTF9BRUNfR0VUX0xFVkVMIHJldHVybnMgdGhlIGN1cnJlbnQgc2V0dGluZyBvZiB0aGUgQUVDLgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBJWEpDVExfQUVDX1NUQVJUCQlfSU9XICgncScsIDB4Q0IsIGludCkKKyNkZWZpbmUgSVhKQ1RMX0FFQ19TVE9QCQkJX0lPICAoJ3EnLCAweENDKQorI2RlZmluZSBJWEpDVExfQUVDX0dFVF9MRVZFTAkJX0lPICAoJ3EnLCAweENEKQorCisjZGVmaW5lIEFFQ19PRkYgICAwCisjZGVmaW5lIEFFQ19MT1cgICAxCisjZGVmaW5lIEFFQ19NRUQgICAyCisjZGVmaW5lIEFFQ19ISUdIICAzCisjZGVmaW5lIEFFQ19BVVRPICA0CisjZGVmaW5lIEFFQ19BR0MgICA1CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqIENhbGwgUHJvZ3Jlc3MgVG9uZXMsIERUTUYsIGV0Yy4KKyogSVhKQ1RMX0RUTUZfT09CIGRldGVybWluZXMgaWYgRFRNRiBzaWduYWxpbmcgaXMgc2VudCBhcyBPdXQtT2YtQmFuZAorKiBvbmx5LiAgSWYgeW91IHBhc3MgYSAxLCBEVE1GIGlzIHN1cHByZXNzZWQgZnJvbSB0aGUgYXVkaW8gc3RyZWFtLgorKiBUb25lIG9uIGFuZCBvZmYgdGltZXMgYXJlIGluIDI1MCBtaWNyb3NlY29uZCBpbnRlcnZhbHMgc28KKyogaW9jdGwoaXhqMSwgSVhKQ1RMX1NFVF9UT05FX09OX1RJTUUsIDM2MCk7CisqIHdpbGwgc2V0IHRoZSB0b25lIG9uIHRpbWUgb2YgYm9hcmQgaXhqMSB0byAzNjAgKiAyNTB1cyA9IDkwbXMKKyogdGhlIGRlZmF1bHQgdmFsdWVzIG9mIHRvbmUgb24gYW5kIG9mZiB0aW1lcyBpcyA4NDAgb3IgMjEwbXMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBJWEpDVExfRFRNRl9SRUFEWQkJUEhPTkVfRFRNRl9SRUFEWQorI2RlZmluZSBJWEpDVExfR0VUX0RUTUYgICAgICAgICAgICAgICAgIFBIT05FX0dFVF9EVE1GCisjZGVmaW5lIElYSkNUTF9HRVRfRFRNRl9BU0NJSSAgICAgICAgICAgUEhPTkVfR0VUX0RUTUZfQVNDSUkKKyNkZWZpbmUgSVhKQ1RMX0RUTUZfT09CCQkJUEhPTkVfRFRNRl9PT0IKKyNkZWZpbmUgSVhKQ1RMX0VYQ0VQVElPTgkJUEhPTkVfRVhDRVBUSU9OCisjZGVmaW5lIElYSkNUTF9QTEFZX1RPTkUJCVBIT05FX1BMQVlfVE9ORQorI2RlZmluZSBJWEpDVExfU0VUX1RPTkVfT05fVElNRQkJUEhPTkVfU0VUX1RPTkVfT05fVElNRQorI2RlZmluZSBJWEpDVExfU0VUX1RPTkVfT0ZGX1RJTUUJUEhPTkVfU0VUX1RPTkVfT0ZGX1RJTUUKKyNkZWZpbmUgSVhKQ1RMX0dFVF9UT05FX09OX1RJTUUJCVBIT05FX0dFVF9UT05FX09OX1RJTUUKKyNkZWZpbmUgSVhKQ1RMX0dFVF9UT05FX09GRl9USU1FCVBIT05FX0dFVF9UT05FX09GRl9USU1FCisjZGVmaW5lIElYSkNUTF9HRVRfVE9ORV9TVEFURQkJUEhPTkVfR0VUX1RPTkVfU1RBVEUKKyNkZWZpbmUgSVhKQ1RMX0JVU1kJCQlQSE9ORV9CVVNZCisjZGVmaW5lIElYSkNUTF9SSU5HQkFDSwkJCVBIT05FX1JJTkdCQUNLCisjZGVmaW5lIElYSkNUTF9ESUFMVE9ORQkJCVBIT05FX0RJQUxUT05FCisjZGVmaW5lIElYSkNUTF9DUFRfU1RPUAkJCVBIT05FX0NQVF9TVE9QCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogTGluZUpBQ0sgc3BlY2lmaWMgSU9DVExzCisqCisqIFRoZSBsc2IgNCBiaXRzIG9mIHRoZSBMRUQgYXJndW1lbnQgcmVwcmVzZW50IHRoZSBzdGF0ZSBvZiBlYWNoIG9mIHRoZSA0CisqIExFRCdzIG9uIHRoZSBMaW5lSkFDSworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIElYSkNUTF9TRVRfTEVECQkJX0lPVyAoJ3EnLCAweENFLCBpbnQpCisjZGVmaW5lIElYSkNUTF9NSVhFUgkJCV9JT1cgKCdxJywgMHhDRiwgaW50KQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIAorKiBUaGUgbWFzdGVyIHZvbHVtZSBjb250cm9scyB1c2UgYXR0ZW51YXRpb24gd2l0aCAzMiBsZXZlbHMgZnJvbSAwIHRvIC02MmRCCisqIHdpdGggc3RlcHMgb2YgMmRCIGVhY2gsIHRoZSBkZWZpbmVzIHNob3VsZCBiZSBPUidlZCB0b2dldGhlciB0aGVuIHNlbnQKKyogYXMgdGhlIHBhcmFtZXRlciB0byB0aGUgbWl4ZXIgY29tbWFuZCB0byBjaGFuZ2UgdGhlIG1peGVyIHNldHRpbmdzLgorKiAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgTUlYRVJfTUFTVEVSX0wJCTB4MDAwMAorI2RlZmluZSBNSVhFUl9NQVNURVJfUgkJMHgwMTAwCisjZGVmaW5lIEFUVDAwREIJCQkweDAwCisjZGVmaW5lIEFUVDAyREIJCQkweDAxCisjZGVmaW5lIEFUVDA0REIJCQkweDAyCisjZGVmaW5lIEFUVDA2REIJCQkweDAzCisjZGVmaW5lIEFUVDA4REIJCQkweDA0CisjZGVmaW5lIEFUVDEwREIJCQkweDA1CisjZGVmaW5lIEFUVDEyREIJCQkweDA2CisjZGVmaW5lIEFUVDE0REIJCQkweDA3CisjZGVmaW5lIEFUVDE2REIJCQkweDA4CisjZGVmaW5lIEFUVDE4REIJCQkweDA5CisjZGVmaW5lIEFUVDIwREIJCQkweDBBCisjZGVmaW5lIEFUVDIyREIJCQkweDBCCisjZGVmaW5lIEFUVDI0REIJCQkweDBDCisjZGVmaW5lIEFUVDI2REIJCQkweDBECisjZGVmaW5lIEFUVDI4REIJCQkweDBFCisjZGVmaW5lIEFUVDMwREIJCQkweDBGCisjZGVmaW5lIEFUVDMyREIJCQkweDEwCisjZGVmaW5lIEFUVDM0REIJCQkweDExCisjZGVmaW5lIEFUVDM2REIJCQkweDEyCisjZGVmaW5lIEFUVDM4REIJCQkweDEzCisjZGVmaW5lIEFUVDQwREIJCQkweDE0CisjZGVmaW5lIEFUVDQyREIJCQkweDE1CisjZGVmaW5lIEFUVDQ0REIJCQkweDE2CisjZGVmaW5lIEFUVDQ2REIJCQkweDE3CisjZGVmaW5lIEFUVDQ4REIJCQkweDE4CisjZGVmaW5lIEFUVDUwREIJCQkweDE5CisjZGVmaW5lIEFUVDUyREIJCQkweDFBCisjZGVmaW5lIEFUVDU0REIJCQkweDFCCisjZGVmaW5lIEFUVDU2REIJCQkweDFDCisjZGVmaW5lIEFUVDU4REIJCQkweDFECisjZGVmaW5lIEFUVDYwREIJCQkweDFFCisjZGVmaW5lIEFUVDYyREIJCQkweDFGCisjZGVmaW5lIE1BU1RFUl9NVVRFCQkweDgwCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogCisqIFRoZSBpbnB1dCB2b2x1bWUgY29udHJvbHMgdXNlIGdhaW4gd2l0aCAzMiBsZXZlbHMgZnJvbSArMTJkQiB0byAtNTBkQgorKiB3aXRoIHN0ZXBzIG9mIDJkQiBlYWNoLCB0aGUgZGVmaW5lcyBzaG91bGQgYmUgT1InZWQgdG9nZXRoZXIgdGhlbiBzZW50CisqIGFzIHRoZSBwYXJhbWV0ZXIgdG8gdGhlIG1peGVyIGNvbW1hbmQgdG8gY2hhbmdlIHRoZSBtaXhlciBzZXR0aW5ncy4KKyogCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIE1JWEVSX1BPUlRfQ0RfTAkJMHgwNjAwCisjZGVmaW5lIE1JWEVSX1BPUlRfQ0RfUgkJMHgwNzAwCisjZGVmaW5lIE1JWEVSX1BPUlRfTElORV9JTl9MCTB4MDgwMAorI2RlZmluZSBNSVhFUl9QT1JUX0xJTkVfSU5fUgkweDA5MDAKKyNkZWZpbmUgTUlYRVJfUE9SVF9QT1RTX1JFQwkweDBDMDAKKyNkZWZpbmUgTUlYRVJfUE9SVF9NSUMJCTB4MEUwMAorCisjZGVmaW5lIEdBSU4xMkRCCQkweDAwCisjZGVmaW5lIEdBSU4xMERCCQkweDAxCisjZGVmaW5lIEdBSU4wOERCCQkweDAyCisjZGVmaW5lIEdBSU4wNkRCCQkweDAzCisjZGVmaW5lIEdBSU4wNERCCQkweDA0CisjZGVmaW5lIEdBSU4wMkRCCQkweDA1CisjZGVmaW5lIEdBSU4wMERCCQkweDA2CisjZGVmaW5lIEdBSU5fMDJEQgkJMHgwNworI2RlZmluZSBHQUlOXzA0REIJCTB4MDgKKyNkZWZpbmUgR0FJTl8wNkRCCQkweDA5CisjZGVmaW5lIEdBSU5fMDhEQgkJMHgwQQorI2RlZmluZSBHQUlOXzEwREIJCTB4MEIKKyNkZWZpbmUgR0FJTl8xMkRCCQkweDBDCisjZGVmaW5lIEdBSU5fMTREQgkJMHgwRAorI2RlZmluZSBHQUlOXzE2REIJCTB4MEUKKyNkZWZpbmUgR0FJTl8xOERCCQkweDBGCisjZGVmaW5lIEdBSU5fMjBEQgkJMHgxMAorI2RlZmluZSBHQUlOXzIyREIJCTB4MTEKKyNkZWZpbmUgR0FJTl8yNERCCQkweDEyCisjZGVmaW5lIEdBSU5fMjZEQgkJMHgxMworI2RlZmluZSBHQUlOXzI4REIJCTB4MTQKKyNkZWZpbmUgR0FJTl8zMERCCQkweDE1CisjZGVmaW5lIEdBSU5fMzJEQgkJMHgxNgorI2RlZmluZSBHQUlOXzM0REIJCTB4MTcKKyNkZWZpbmUgR0FJTl8zNkRCCQkweDE4CisjZGVmaW5lIEdBSU5fMzhEQgkJMHgxOQorI2RlZmluZSBHQUlOXzQwREIJCTB4MUEKKyNkZWZpbmUgR0FJTl80MkRCCQkweDFCCisjZGVmaW5lIEdBSU5fNDREQgkJMHgxQworI2RlZmluZSBHQUlOXzQ2REIJCTB4MUQKKyNkZWZpbmUgR0FJTl80OERCCQkweDFFCisjZGVmaW5lIEdBSU5fNTBEQgkJMHgxRgorI2RlZmluZSBJTlBVVF9NVVRFCQkweDgwCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogCisqIFRoZSBQT1RTIHZvbHVtZSBjb250cm9sIHVzZSBhdHRlbnVhdGlvbiB3aXRoIDggbGV2ZWxzIGZyb20gMGRCIHRvIC0yOGRCCisqIHdpdGggc3RlcHMgb2YgNGRCIGVhY2gsIHRoZSBkZWZpbmVzIHNob3VsZCBiZSBPUidlZCB0b2dldGhlciB0aGVuIHNlbnQKKyogYXMgdGhlIHBhcmFtZXRlciB0byB0aGUgbWl4ZXIgY29tbWFuZCB0byBjaGFuZ2UgdGhlIG1peGVyIHNldHRpbmdzLgorKiAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgTUlYRVJfUE9SVF9QT1RTX1BMQVkJMHgwRjAwCisKKyNkZWZpbmUgUE9UU19BVFRfMDBEQgkJMHgwMAorI2RlZmluZSBQT1RTX0FUVF8wNERCCQkweDAxCisjZGVmaW5lIFBPVFNfQVRUXzA4REIJCTB4MDIKKyNkZWZpbmUgUE9UU19BVFRfMTJEQgkJMHgwMworI2RlZmluZSBQT1RTX0FUVF8xNkRCCQkweDA0CisjZGVmaW5lIFBPVFNfQVRUXzIwREIJCTB4MDUKKyNkZWZpbmUgUE9UU19BVFRfMjREQgkJMHgwNgorI2RlZmluZSBQT1RTX0FUVF8yOERCCQkweDA3CisjZGVmaW5lIFBPVFNfTVVURQkJMHg4MAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIAorKiBUaGUgREFBIGNvbnRyb2xzIHRoZSBpbnRlcmZhY2UgdG8gdGhlIFBTVE4gcG9ydC4gIFRoZSBkcml2ZXIgbG9hZHMgdGhlCisqIFVTIGNvZWZmaWNpZW50cyBieSBkZWZhdWx0LCBzbyBpZiB5b3UgbGl2ZSBpbiBhIGRpZmZlcmVudCBjb3VudHJ5IHlvdQorKiBuZWVkIHRvIGxvYWQgdGhlIHNldCBmb3IgeW91ciBjb3VudHJpZXMgcGhvbmUgc3lzdGVtLgorKiAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgSVhKQ1RMX0RBQV9DT0VGRl9TRVQJCV9JT1cgKCdxJywgMHhEMCwgaW50KQorCisjZGVmaW5lIERBQV9VUyAJCTEJLypQSVRBIDhrSHogKi8KKyNkZWZpbmUgREFBX1VLIAkJMgkvKklTQVIzNCA4a0h6ICovCisjZGVmaW5lIERBQV9GUkFOQ0UgCTMJLyogKi8KKyNkZWZpbmUgREFBX0dFUk1BTlkJNAorI2RlZmluZSBEQUFfQVVTVFJBTElBCTUKKyNkZWZpbmUgREFBX0pBUEFOCTYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAKKyogVXNlIElYSkNUTF9QT1JUIHRvIHNldCBvciBxdWVyeSB0aGUgcG9ydCB0aGUgY2FyZCBpcyBzZXQgdG8uICBJZiB0aGUKKyogYXJndW1lbnQgaXMgc2V0IHRvIFBPUlRfUVVFUlksIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGlvY3RsIHdpbGwKKyogaW5kaWNhdGUgd2hpY2ggcG9ydCBpcyBjdXJyZW50bHkgaW4gdXNlLCBvdGhlcndpc2UgaXQgd2lsbCBjaGFuZ2UgdGhlCisqIHBvcnQuCisqIAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBJWEpDVExfUE9SVAkJCV9JT1cgKCdxJywgMHhEMSwgaW50KQorCisjZGVmaW5lIFBPUlRfUVVFUlkJMAorI2RlZmluZSBQT1JUX1BPVFMJMQorI2RlZmluZSBQT1JUX1BTVE4JMgorI2RlZmluZSBQT1JUX1NQRUFLRVIJMworI2RlZmluZSBQT1JUX0hBTkRTRVQJNAorCisjZGVmaW5lIElYSkNUTF9QU1ROX1NFVF9TVEFURQkJUEhPTkVfUFNUTl9TRVRfU1RBVEUKKyNkZWZpbmUgSVhKQ1RMX1BTVE5fR0VUX1NUQVRFCQlQSE9ORV9QU1ROX0dFVF9TVEFURQorCisjZGVmaW5lIFBTVE5fT05fSE9PSwkwCisjZGVmaW5lIFBTVE5fUklOR0lORwkxCisjZGVmaW5lIFBTVE5fT0ZGX0hPT0sJMgorI2RlZmluZSBQU1ROX1BVTFNFX0RJQUwJMworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIAorKiBUaGUgREFBIEFuYWxvZyBHQUlOIHNldHMgMiBwYXJhbWV0ZXJzIGF0IG9uZSB0aW1lLCB0aGUgcmVjZWl2ZSBnYWluIChBR1JSKSwgCisqIGFuZCB0aGUgdHJhbnNtaXQgZ2FpbiAoQUdYKS4gIE9SIHRvZ2V0aGVyIHRoZSBjb21wb25lbnRzIGFuZCBwYXNzIHRoZW0KKyogYXMgdGhlIHBhcmFtZXRlciB0byBJWEpDVExfREFBX0FHQUlOLiAgVGhlIGRlZmF1bHQgc2V0dGluZyBpcyBib3RoIGF0IDBkQi4KKyogCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIElYSkNUTF9EQUFfQUdBSU4JCV9JT1cgKCdxJywgMHhEMiwgaW50KQorCisjZGVmaW5lIEFHUlIwMERCCTB4MDAJLyogQW5hbG9nIGdhaW4gaW4gcmVjZWl2ZSBkaXJlY3Rpb24gMGRCICovCisjZGVmaW5lIEFHUlIzXzVEQgkweDEwCS8qIEFuYWxvZyBnYWluIGluIHJlY2VpdmUgZGlyZWN0aW9uIDMuNWRCICovCisjZGVmaW5lIEFHUlIwNkRCCTB4MzAJLyogQW5hbG9nIGdhaW4gaW4gcmVjZWl2ZSBkaXJlY3Rpb24gNmRCICovCisKKyNkZWZpbmUgQUdYMDBEQgkJMHgwMAkvKiBBbmFsb2cgZ2FpbiBpbiB0cmFuc21pdCBkaXJlY3Rpb24gMGRCICovCisjZGVmaW5lIEFHWF82REIJCTB4MDQJLyogQW5hbG9nIGdhaW4gaW4gdHJhbnNtaXQgZGlyZWN0aW9uIC02ZEIgKi8KKyNkZWZpbmUgQUdYM181REIJMHgwOAkvKiBBbmFsb2cgZ2FpbiBpbiB0cmFuc21pdCBkaXJlY3Rpb24gMy41ZEIgKi8KKyNkZWZpbmUgQUdYXzJfNUIJMHgwQwkvKiBBbmFsb2cgZ2FpbiBpbiB0cmFuc21pdCBkaXJlY3Rpb24gLTIuNWRCICovCisKKyNkZWZpbmUgSVhKQ1RMX1BTVE5fTElORVRFU1QJCV9JTyAgKCdxJywgMHhEMykKKworI2RlZmluZSBJWEpDVExfQ0lECQkJX0lPUiAoJ3EnLCAweEQ0LCBQSE9ORV9DSUQgKikKKyNkZWZpbmUgSVhKQ1RMX1ZNV0kJCQlfSU9SICgncScsIDB4RDgsIGludCkKKyNkZWZpbmUgSVhKQ1RMX0NJRENXCQkJX0lPVyAoJ3EnLCAweEQ5LCBQSE9ORV9DSUQgKikKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogCisqIFRoZSB3aW5rIGR1cmF0aW9uIGlzIHR1bmFibGUgd2l0aCB0aGlzIGlvY3RsLiAgVGhlIGRlZmF1bHQgd2luayBkdXJhdGlvbiAgCisqIGlzIDMyMG1zLiAgWW91IGRvIG5vdCBuZWVkIHRvIHVzZSB0aGlzIGlvY3RsIGlmIHlvdSBkbyBub3QgcmVxdWlyZSBhCisqIGRpZmZlcmVudCB3aW5rIGR1cmF0aW9uLgorKiAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgSVhKQ1RMX1dJTktfRFVSQVRJT04JCVBIT05FX1dJTktfRFVSQVRJT04KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAKKyogVGhpcyBpb2N0bCB3aWxsIGNvbm5lY3QgdGhlIFBPVFMgcG9ydCB0byB0aGUgUFNUTiBwb3J0IG9uIHRoZSBMaW5lSkFDSworKiBJbiBvcmRlciBmb3IgdGhpcyB0byB3b3JrIHByb3Blcmx5IHRoZSBwb3J0IHNlbGVjdGlvbiBzaG91bGQgYmUgc2V0IHRvCisqIHRoZSBQU1ROIHBvcnQgd2l0aCBJWEpDVExfUE9SVCBwcmlvciB0byBjYWxsaW5nIHRoaXMgaW9jdGwuICBUaGlzIHdpbGwKKyogZW5hYmxlIGNvbmZlcmVuY2UgY2FsbHMgYmV0d2VlbiBQU1ROIGNhbGxlcnMgYW5kIG5ldHdvcmsgY2FsbGVycy4KKyogUGFzc2luZyBhIDEgdG8gdGhpcyBpb2N0bCBlbmFibGVzIHRoZSBQT1RTPC0+UFNUTiBjb25uZWN0aW9uIHdoaWxlCisqIHBhc3NpbmcgYSAwIHR1cm5zIGl0IGJhY2sgb2ZmLgorKiAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgSVhKQ1RMX1BPVFNfUFNUTgkJX0lPVyAoJ3EnLCAweEQ1LCBpbnQpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogSU9DVExzIGFkZGVkIGJ5IHJlcXVlc3QuCisqCisqIElYSkNUTF9IWiBzZXRzIHRoZSB2YWx1ZSB5b3VyIExpbnV4IGtlcm5lbCB1c2VzIGZvciBIWiBhcyBkZWZpbmVkIGluCisqICAgICAgICAgICAvdXNyL2luY2x1ZGUvYXNtL3BhcmFtLmgsIHRoaXMgZGV0ZXJtaW5lcyB0aGUgZnVuZGFtZW50YWwKKyogICAgICAgICAgIGZyZXF1ZW5jeSBvZiB0aGUgY2xvY2sgdGlja3Mgb24geW91ciBMaW51eCBzeXN0ZW0uICBUaGUga2VybmVsCisqICAgICAgICAgICBtdXN0IGJlIHJlYnVpbHQgaWYgeW91IGNoYW5nZSB0aGlzIHZhbHVlLCBhbHNvIGFsbCBtb2R1bGVzIHlvdQorKiAgICAgICAgICAgdXNlIChleGNlcHQgdGhpcyBvbmUpIG11c3QgYmUgcmVjb21waWxlZC4gIFRoZSBkZWZhdWx0IHZhbHVlCisqICAgICAgICAgICBpcyAxMDAsIGFuZCB5b3Ugb25seSBuZWVkIHRvIHVzZSB0aGlzIElPQ1RMIGlmIHlvdSB1c2Ugc29tZQorKiAgICAgICAgICAgb3RoZXIgdmFsdWUuCisqCisqCisqIElYSkNUTF9SQVRFIHNldHMgdGhlIG51bWJlciBvZiB0aW1lcyBwZXIgc2Vjb25kIHRoYXQgdGhlIGRyaXZlciBwb2xscworKiAgICAgICAgICAgICB0aGUgRFNQLiAgVGhpcyB2YWx1ZSBjYW5ub3QgYmUgbGFyZ2VyIHRoYW4gSFouICBCeQorKiAgICAgICAgICAgICBpbmNyZWFzaW5nIGJvdGggb2YgdGhlc2UgdmFsdWVzLCB5b3UgbWF5IGJlIGFibGUgdG8gcmVkdWNlCisqICAgICAgICAgICAgIGxhdGVuY3kgYmVjYXVzZSB0aGUgbWF4IGhhbmcgdGltZSB0aGF0IGNhbiBleGlzdCBiZXR3ZWVuIHRoZQorKiAgICAgICAgICAgICBkcml2ZXIgYW5kIHRoZSBEU1Agd2lsbCBiZSByZWR1Y2VkLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIElYSkNUTF9IWiAgICAgICAgICAgICAgICAgICAgICAgX0lPVyAoJ3EnLCAweEUwLCBpbnQpCisjZGVmaW5lIElYSkNUTF9SQVRFICAgICAgICAgICAgICAgICAgICAgX0lPVyAoJ3EnLCAweEUxLCBpbnQpCisjZGVmaW5lIElYSkNUTF9GUkFNRVNfUkVBRAkJX0lPUiAoJ3EnLCAweEUyLCB1bnNpZ25lZCBsb25nKQorI2RlZmluZSBJWEpDVExfRlJBTUVTX1dSSVRURU4JCV9JT1IgKCdxJywgMHhFMywgdW5zaWduZWQgbG9uZykKKyNkZWZpbmUgSVhKQ1RMX1JFQURfV0FJVAkJX0lPUiAoJ3EnLCAweEU0LCB1bnNpZ25lZCBsb25nKQorI2RlZmluZSBJWEpDVExfV1JJVEVfV0FJVAkJX0lPUiAoJ3EnLCAweEU1LCB1bnNpZ25lZCBsb25nKQorI2RlZmluZSBJWEpDVExfRFJZQlVGRkVSX1JFQUQJCV9JT1IgKCdxJywgMHhFNiwgdW5zaWduZWQgbG9uZykKKyNkZWZpbmUgSVhKQ1RMX0RSWUJVRkZFUl9DTEVBUgkJX0lPICAoJ3EnLCAweEU3KQorI2RlZmluZSBJWEpDVExfRFRNRl9QUkVTQ0FMRQkJX0lPVyAoJ3EnLCAweEU4LCBpbnQpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogVGhpcyBpb2N0bCBhbGxvd3MgdGhlIHVzZXIgYXBwbGljYXRpb24gdG8gY29udHJvbCB3aGF0IGV2ZW50cyB0aGUgZHJpdmVyCisqIHdpbGwgc2VuZCBzaWduYWxzIGZvciwgYW5kIHdoYXQgc2lnbmFscyBpdCB3aWxsIHNlbmQgZm9yIHdoaWNoIGV2ZW50LgorKiBCeSBkZWZhdWx0LCBpZiBzaWduYWxpbmcgaXMgZW5hYmxlZCwgYWxsIGV2ZW50cyB3aWxsIHNlbmQgU0lHSU8gd2hlbgorKiB0aGV5IG9jY3VyLiAgVG8gZGlzYWJsZSBzaWduYWxzIGZvciBhbiBldmVudCBzZXQgdGhlIHNpZ25hbCB0byAwLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBlbnVtIHsKKwlTSUdfRFRNRl9SRUFEWSwKKwlTSUdfSE9PS1NUQVRFLAorCVNJR19GTEFTSCwKKwlTSUdfUFNUTl9SSU5HLAorCVNJR19DQUxMRVJfSUQsCisJU0lHX1BTVE5fV0lOSywKKwlTSUdfRjAsIFNJR19GMSwgU0lHX0YyLCBTSUdfRjMsCisJU0lHX0ZDMCwgU0lHX0ZDMSwgU0lHX0ZDMiwgU0lHX0ZDMywKKwlTSUdfUkVBRF9SRUFEWSA9IDMzLAorCVNJR19XUklURV9SRUFEWSA9IDM0Cit9IElYSl9TSUdFVkVOVDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludCBldmVudDsKKwlpbnQgc2lnbmFsOworfSBJWEpfU0lHREVGOworCisjZGVmaW5lIElYSkNUTF9TSUdDVEwJCQlfSU9XICgncScsIDB4RTksIElYSl9TSUdERUYgKikKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiBUaGVzZSBpb2N0bHMgYWxsb3cgdGhlIHVzZXIgYXBwbGljYXRpb24gdG8gY2hhbmdlIHRoZSBnYWluIGluIHRoZSAKKyogU21hcnQgQ2FibGUgb2YgdGhlIEludGVybmV0IFBob25lIENhcmQuICBTZW5kaW5nIC0xIGFzIGEgdmFsdWUgd2lsbCBjYXVzZQorKiByZXR1cm4gdmFsdWUgdG8gYmUgdGhlIGN1cnJlbnQgc2V0dGluZy4gIFZhbGlkIHZhbHVlcyB0byBzZXQgYXJlIDB4MDAgLSAweDFGCisqCisqIDExMTExID0gKzEyIGRCCisqIDEwMTExID0gICAwIGRCCisqIDAwMDAwID0gLTM0LjUgZEIKKyoKKyogSVhKQ1RMX1NDX1JYRyBzZXRzIHRoZSBSZWNlaXZlIGdhaW4KKyogSVhKQ1RMX1NDX1RYRyBzZXRzIHRoZSBUcmFuc21pdCBnYWluCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIElYSkNUTF9TQ19SWEcJCQlfSU9XICgncScsIDB4RUEsIGludCkKKyNkZWZpbmUgSVhKQ1RMX1NDX1RYRwkJCV9JT1cgKCdxJywgMHhFQiwgaW50KQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqIFRoZSBpbnRlcmNvbSBJT0NUTCdzIHNob3J0IHRoZSBvdXRwdXQgZnJvbSBvbmUgY2FyZCB0byB0aGUgaW5wdXQgb2YgdGhlCisqIG90aGVyIGFuZCB2aWNlIHZlcnNhIChhY3R1YWxseSBkb25lIGluIHRoZSBEU1AgcmVhZCBmdW5jdGlvbikuICBJdCBpcyBvbmx5CisqIG5lY2Vzc2FyeSB0byBleGVjdXRlIHRoZSBJT0NUTCBvbiBvbmUgY2FyZCwgYnV0IGl0IGlzIG5lY2Vzc2FyeSB0byBoYXZlCisqIGJvdGggZGV2aWNlcyBvcGVuIHRvIGJlIGFibGUgdG8gZGV0ZWN0IGhvb2sgc3dpdGNoIGNoYW5nZXMuICBUaGUgcmVjb3JkCisqIGNvZGVjIGFuZCByYXRlIG9mIGVhY2ggY2FyZCBtdXN0IG1hdGNoIHRoZSBwbGF5YmFjayBjb2RlYyBhbmQgcmF0ZSBvZgorKiB0aGUgb3RoZXIgY2FyZCBmb3IgdGhpcyB0byB3b3JrIHByb3Blcmx5LgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIElYSkNUTF9JTlRFUkNPTV9TVEFSVCAJCV9JT1cgKCdxJywgMHhGRCwgaW50KQorI2RlZmluZSBJWEpDVExfSU5URVJDT01fU1RPUCAgCQlfSU9XICgncScsIDB4RkUsIGludCkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIG5ldyBzdHJ1Y3R1cmUgZm9yIGFjY2Vzc2luZyByYXcgZmlsdGVyIGluZm9ybWF0aW9uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludCBmaWx0ZXI7CisJY2hhciBlbmFibGU7CisJdW5zaWduZWQgaW50IGNvZWZmWzE5XTsKK30gSVhKX0ZJTFRFUl9SQVc7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9qYmQuaCBiL2luY2x1ZGUvbGludXgvamJkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTkzNDA3ZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvamJkLmgKQEAgLTAsMCArMSwxMDk4IEBACisvKgorICogbGludXgvaW5jbHVkZS9saW51eC9qYmQuaAorICogCisgKiBXcml0dGVuIGJ5IFN0ZXBoZW4gQy4gVHdlZWRpZSA8c2N0QHJlZGhhdC5jb20+CisgKgorICogQ29weXJpZ2h0IDE5OTgtMjAwMCBSZWQgSGF0LCBJbmMgLS0tIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTGludXgga2VybmVsIGFuZCBpcyBtYWRlIGF2YWlsYWJsZSB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLCBvciBhdCB5b3VyCisgKiBvcHRpb24sIGFueSBsYXRlciB2ZXJzaW9uLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KKyAqCisgKiBEZWZpbml0aW9ucyBmb3IgdHJhbnNhY3Rpb24gZGF0YSBzdHJ1Y3R1cmVzIGZvciB0aGUgYnVmZmVyIGNhY2hlCisgKiBmaWxlc3lzdGVtIGpvdXJuYWxpbmcgc3VwcG9ydC4KKyAqLworCisjaWZuZGVmIF9MSU5VWF9KQkRfSAorI2RlZmluZSBfTElOVVhfSkJEX0gKKworI2lmIGRlZmluZWQoQ09ORklHX0pCRCkgfHwgZGVmaW5lZChDT05GSUdfSkJEX01PRFVMRSkgfHwgIWRlZmluZWQoX19LRVJORUxfXykKKworLyogQWxsb3cgdGhpcyBmaWxlIHRvIGJlIGluY2x1ZGVkIGRpcmVjdGx5IGludG8gZTJmc3Byb2dzICovCisjaWZuZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlICJqZnNfY29tcGF0LmgiCisjZGVmaW5lIEpGU19ERUJVRworI2RlZmluZSBqZnNfZGVidWcgamJkX2RlYnVnCisjZWxzZQorCisjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9qb3VybmFsLWhlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KKyNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CisjZW5kaWYKKworI2RlZmluZSBqb3VybmFsX29vbV9yZXRyeSAxCisKKy8qCisgKiBEZWZpbmUgSkJEX1BBUkFOSU9EX0lPRkFJTCB0byBjYXVzZSBhIGtlcm5lbCBCVUcoKSBpZiBleHQzIGZpbmRzCisgKiBjZXJ0YWluIGNsYXNzZXMgb2YgZXJyb3Igd2hpY2ggY2FuIG9jY3VyIGR1ZSB0byBmYWlsZWQgSU9zLiAgVW5kZXIKKyAqIG5vcm1hbCB1c2Ugd2Ugd2FudCBleHQzIHRvIGNvbnRpbnVlIGFmdGVyIHN1Y2ggZXJyb3JzLCBiZWNhdXNlCisgKiBoYXJkd2FyZSBfY2FuXyBmYWlsLCBidXQgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcyB3aGVuIHJ1bm5pbmcgdGVzdHMgb24KKyAqIGtub3duLWdvb2QgaGFyZHdhcmUgd2UgbWF5IHdhbnQgdG8gdHJhcCB0aGVzZSBlcnJvcnMuCisgKi8KKyN1bmRlZiBKQkRfUEFSQU5PSURfSU9GQUlMCisKKy8qCisgKiBUaGUgZGVmYXVsdCBtYXhpbXVtIGNvbW1pdCBhZ2UsIGluIHNlY29uZHMuCisgKi8KKyNkZWZpbmUgSkJEX0RFRkFVTFRfTUFYX0NPTU1JVF9BR0UgNQorCisjaWZkZWYgQ09ORklHX0pCRF9ERUJVRworLyoKKyAqIERlZmluZSBKQkRfRVhQRU5TSVZFX0NIRUNLSU5HIHRvIGVuYWJsZSBtb3JlIGV4cGVuc2l2ZSBpbnRlcm5hbAorICogY29uc2lzdGVuY3kgY2hlY2tzLiAgQnkgZGVmYXVsdCB3ZSBkb24ndCBkbyB0aGlzIHVubGVzcworICogQ09ORklHX0pCRF9ERUJVRyBpcyBvbi4KKyAqLworI2RlZmluZSBKQkRfRVhQRU5TSVZFX0NIRUNLSU5HCitleHRlcm4gaW50IGpvdXJuYWxfZW5hYmxlX2RlYnVnOworCisjZGVmaW5lIGpiZF9kZWJ1ZyhuLCBmLCBhLi4uKQkJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCWlmICgobikgPD0gam91cm5hbF9lbmFibGVfZGVidWcpIHsJCQlcCisJCQlwcmludGsgKEtFUk5fREVCVUcgIiglcywgJWQpOiAlczogIiwJCVwKKwkJCQlfX0ZJTEVfXywgX19MSU5FX18sIF9fRlVOQ1RJT05fXyk7CVwKKwkJICAJcHJpbnRrIChmLCAjIyBhKTsJCQkJXAorCQl9CQkJCQkJCVwKKwl9IHdoaWxlICgwKQorI2Vsc2UKKyNkZWZpbmUgamJkX2RlYnVnKGYsIGEuLi4pCS8qKi8KKyNlbmRpZgorCitleHRlcm4gdm9pZCAqIF9famJkX2ttYWxsb2MgKGNvbnN0IGNoYXIgKndoZXJlLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzLCBpbnQgcmV0cnkpOworI2RlZmluZSBqYmRfa21hbGxvYyhzaXplLCBmbGFncykgXAorCV9famJkX2ttYWxsb2MoX19GVU5DVElPTl9fLCAoc2l6ZSksIChmbGFncyksIGpvdXJuYWxfb29tX3JldHJ5KQorI2RlZmluZSBqYmRfcmVwX2ttYWxsb2Moc2l6ZSwgZmxhZ3MpIFwKKwlfX2piZF9rbWFsbG9jKF9fRlVOQ1RJT05fXywgKHNpemUpLCAoZmxhZ3MpLCAxKQorCisjZGVmaW5lIEpGU19NSU5fSk9VUk5BTF9CTE9DS1MgMTAyNAorCisjaWZkZWYgX19LRVJORUxfXworCisvKioKKyAqIHR5cGVkZWYgaGFuZGxlX3QgLSBUaGUgaGFuZGxlX3QgdHlwZSByZXByZXNlbnRzIGEgc2luZ2xlIGF0b21pYyB1cGRhdGUgYmVpbmcgcGVyZm9ybWVkIGJ5IHNvbWUgcHJvY2Vzcy4KKyAqCisgKiBBbGwgZmlsZXN5c3RlbSBtb2RpZmljYXRpb25zIG1hZGUgYnkgdGhlIHByb2Nlc3MgZ28KKyAqIHRocm91Z2ggdGhpcyBoYW5kbGUuICBSZWN1cnNpdmUgb3BlcmF0aW9ucyAoc3VjaCBhcyBxdW90YSBvcGVyYXRpb25zKQorICogYXJlIGdhdGhlcmVkIGludG8gYSBzaW5nbGUgdXBkYXRlLgorICoKKyAqIFRoZSBidWZmZXIgY3JlZGl0cyBmaWVsZCBpcyB1c2VkIHRvIGFjY291bnQgZm9yIGpvdXJuYWxlZCBidWZmZXJzCisgKiBiZWluZyBtb2RpZmllZCBieSB0aGUgcnVubmluZyBwcm9jZXNzLiAgVG8gZW5zdXJlIHRoYXQgdGhlcmUgaXMKKyAqIGVub3VnaCBsb2cgc3BhY2UgZm9yIGFsbCBvdXRzdGFuZGluZyBvcGVyYXRpb25zLCB3ZSBuZWVkIHRvIGxpbWl0IHRoZQorICogbnVtYmVyIG9mIG91dHN0YW5kaW5nIGJ1ZmZlcnMgcG9zc2libGUgYXQgYW55IHRpbWUuICBXaGVuIHRoZQorICogb3BlcmF0aW9uIGNvbXBsZXRlcywgYW55IGJ1ZmZlciBjcmVkaXRzIG5vdCB1c2VkIGFyZSBjcmVkaXRlZCBiYWNrIHRvCisgKiB0aGUgdHJhbnNhY3Rpb24sIHNvIHRoYXQgYXQgYWxsIHRpbWVzIHdlIGtub3cgaG93IG1hbnkgYnVmZmVycyB0aGUKKyAqIG91dHN0YW5kaW5nIHVwZGF0ZXMgb24gYSB0cmFuc2FjdGlvbiBtaWdodCBwb3NzaWJseSB0b3VjaC4gCisgKiAKKyAqIFRoaXMgaXMgYW4gb3BhcXVlIGRhdGF0eXBlLgorICoqLwordHlwZWRlZiBzdHJ1Y3QgaGFuZGxlX3MJCWhhbmRsZV90OwkvKiBBdG9taWMgb3BlcmF0aW9uIHR5cGUgKi8KKworCisvKioKKyAqIHR5cGVkZWYgam91cm5hbF90IC0gVGhlIGpvdXJuYWxfdCBtYWludGFpbnMgYWxsIG9mIHRoZSBqb3VybmFsaW5nIHN0YXRlIGluZm9ybWF0aW9uIGZvciBhIHNpbmdsZSBmaWxlc3lzdGVtLgorICoKKyAqIGpvdXJuYWxfdCBpcyBsaW5rZWQgdG8gZnJvbSB0aGUgZnMgc3VwZXJibG9jayBzdHJ1Y3R1cmUuCisgKiAKKyAqIFdlIHVzZSB0aGUgam91cm5hbF90IHRvIGtlZXAgdHJhY2sgb2YgYWxsIG91dHN0YW5kaW5nIHRyYW5zYWN0aW9uCisgKiBhY3Rpdml0eSBvbiB0aGUgZmlsZXN5c3RlbSwgYW5kIHRvIG1hbmFnZSB0aGUgc3RhdGUgb2YgdGhlIGxvZworICogd3JpdGluZyBwcm9jZXNzLgorICoKKyAqIFRoaXMgaXMgYW4gb3BhcXVlIGRhdGF0eXBlLgorICoqLwordHlwZWRlZiBzdHJ1Y3Qgam91cm5hbF9zCWpvdXJuYWxfdDsJLyogSm91cm5hbCBjb250cm9sIHN0cnVjdHVyZSAqLworI2VuZGlmCisKKy8qCisgKiBJbnRlcm5hbCBzdHJ1Y3R1cmVzIHVzZWQgYnkgdGhlIGxvZ2dpbmcgbWVjaGFuaXNtOgorICovCisKKyNkZWZpbmUgSkZTX01BR0lDX05VTUJFUiAweGMwM2IzOTk4VSAvKiBUaGUgZmlyc3QgNCBieXRlcyBvZiAvZGV2L3JhbmRvbSEgKi8KKworLyoKKyAqIE9uLWRpc2sgc3RydWN0dXJlcworICovCisKKy8qIAorICogRGVzY3JpcHRvciBibG9jayB0eXBlczoKKyAqLworCisjZGVmaW5lIEpGU19ERVNDUklQVE9SX0JMT0NLCTEKKyNkZWZpbmUgSkZTX0NPTU1JVF9CTE9DSwkyCisjZGVmaW5lIEpGU19TVVBFUkJMT0NLX1YxCTMKKyNkZWZpbmUgSkZTX1NVUEVSQkxPQ0tfVjIJNAorI2RlZmluZSBKRlNfUkVWT0tFX0JMT0NLCTUKKworLyoKKyAqIFN0YW5kYXJkIGhlYWRlciBmb3IgYWxsIGRlc2NyaXB0b3IgYmxvY2tzOgorICovCit0eXBlZGVmIHN0cnVjdCBqb3VybmFsX2hlYWRlcl9zCit7CisJX19iZTMyCQloX21hZ2ljOworCV9fYmUzMgkJaF9ibG9ja3R5cGU7CisJX19iZTMyCQloX3NlcXVlbmNlOworfSBqb3VybmFsX2hlYWRlcl90OworCisKKy8qIAorICogVGhlIGJsb2NrIHRhZzogdXNlZCB0byBkZXNjcmliZSBhIHNpbmdsZSBidWZmZXIgaW4gdGhlIGpvdXJuYWwgCisgKi8KK3R5cGVkZWYgc3RydWN0IGpvdXJuYWxfYmxvY2tfdGFnX3MKK3sKKwlfX2JlMzIJCXRfYmxvY2tucjsJLyogVGhlIG9uLWRpc2sgYmxvY2sgbnVtYmVyICovCisJX19iZTMyCQl0X2ZsYWdzOwkvKiBTZWUgYmVsb3cgKi8KK30gam91cm5hbF9ibG9ja190YWdfdDsKKworLyogCisgKiBUaGUgcmV2b2tlIGRlc2NyaXB0b3I6IHVzZWQgb24gZGlzayB0byBkZXNjcmliZSBhIHNlcmllcyBvZiBibG9ja3MgdG8KKyAqIGJlIHJldm9rZWQgZnJvbSB0aGUgbG9nIAorICovCit0eXBlZGVmIHN0cnVjdCBqb3VybmFsX3Jldm9rZV9oZWFkZXJfcworeworCWpvdXJuYWxfaGVhZGVyX3Qgcl9oZWFkZXI7CisJX19iZTMyCQkgcl9jb3VudDsJLyogQ291bnQgb2YgYnl0ZXMgdXNlZCBpbiB0aGUgYmxvY2sgKi8KK30gam91cm5hbF9yZXZva2VfaGVhZGVyX3Q7CisKKworLyogRGVmaW5pdGlvbnMgZm9yIHRoZSBqb3VybmFsIHRhZyBmbGFncyB3b3JkOiAqLworI2RlZmluZSBKRlNfRkxBR19FU0NBUEUJCTEJLyogb24tZGlzayBibG9jayBpcyBlc2NhcGVkICovCisjZGVmaW5lIEpGU19GTEFHX1NBTUVfVVVJRAkyCS8qIGJsb2NrIGhhcyBzYW1lIHV1aWQgYXMgcHJldmlvdXMgKi8KKyNkZWZpbmUgSkZTX0ZMQUdfREVMRVRFRAk0CS8qIGJsb2NrIGRlbGV0ZWQgYnkgdGhpcyB0cmFuc2FjdGlvbiAqLworI2RlZmluZSBKRlNfRkxBR19MQVNUX1RBRwk4CS8qIGxhc3QgdGFnIGluIHRoaXMgZGVzY3JpcHRvciBibG9jayAqLworCisKKy8qCisgKiBUaGUgam91cm5hbCBzdXBlcmJsb2NrLiAgQWxsIGZpZWxkcyBhcmUgaW4gYmlnLWVuZGlhbiBieXRlIG9yZGVyLgorICovCit0eXBlZGVmIHN0cnVjdCBqb3VybmFsX3N1cGVyYmxvY2tfcworeworLyogMHgwMDAwICovCisJam91cm5hbF9oZWFkZXJfdCBzX2hlYWRlcjsKKworLyogMHgwMDBDICovCisJLyogU3RhdGljIGluZm9ybWF0aW9uIGRlc2NyaWJpbmcgdGhlIGpvdXJuYWwgKi8KKwlfX2JlMzIJc19ibG9ja3NpemU7CQkvKiBqb3VybmFsIGRldmljZSBibG9ja3NpemUgKi8KKwlfX2JlMzIJc19tYXhsZW47CQkvKiB0b3RhbCBibG9ja3MgaW4gam91cm5hbCBmaWxlICovCisJX19iZTMyCXNfZmlyc3Q7CQkvKiBmaXJzdCBibG9jayBvZiBsb2cgaW5mb3JtYXRpb24gKi8KKworLyogMHgwMDE4ICovCisJLyogRHluYW1pYyBpbmZvcm1hdGlvbiBkZXNjcmliaW5nIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBsb2cgKi8KKwlfX2JlMzIJc19zZXF1ZW5jZTsJCS8qIGZpcnN0IGNvbW1pdCBJRCBleHBlY3RlZCBpbiBsb2cgKi8KKwlfX2JlMzIJc19zdGFydDsJCS8qIGJsb2NrbnIgb2Ygc3RhcnQgb2YgbG9nICovCisKKy8qIDB4MDAyMCAqLworCS8qIEVycm9yIHZhbHVlLCBhcyBzZXQgYnkgam91cm5hbF9hYm9ydCgpLiAqLworCV9fYmUzMglzX2Vycm5vOworCisvKiAweDAwMjQgKi8KKwkvKiBSZW1haW5pbmcgZmllbGRzIGFyZSBvbmx5IHZhbGlkIGluIGEgdmVyc2lvbi0yIHN1cGVyYmxvY2sgKi8KKwlfX2JlMzIJc19mZWF0dXJlX2NvbXBhdDsgCS8qIGNvbXBhdGlibGUgZmVhdHVyZSBzZXQgKi8KKwlfX2JlMzIJc19mZWF0dXJlX2luY29tcGF0OyAJLyogaW5jb21wYXRpYmxlIGZlYXR1cmUgc2V0ICovCisJX19iZTMyCXNfZmVhdHVyZV9yb19jb21wYXQ7IAkvKiByZWFkb25seS1jb21wYXRpYmxlIGZlYXR1cmUgc2V0ICovCisvKiAweDAwMzAgKi8KKwlfX3U4CXNfdXVpZFsxNl07CQkvKiAxMjgtYml0IHV1aWQgZm9yIGpvdXJuYWwgKi8KKworLyogMHgwMDQwICovCisJX19iZTMyCXNfbnJfdXNlcnM7CQkvKiBOciBvZiBmaWxlc3lzdGVtcyBzaGFyaW5nIGxvZyAqLworCisJX19iZTMyCXNfZHluc3VwZXI7CQkvKiBCbG9ja25yIG9mIGR5bmFtaWMgc3VwZXJibG9jayBjb3B5Ki8KKworLyogMHgwMDQ4ICovCisJX19iZTMyCXNfbWF4X3RyYW5zYWN0aW9uOwkvKiBMaW1pdCBvZiBqb3VybmFsIGJsb2NrcyBwZXIgdHJhbnMuKi8KKwlfX2JlMzIJc19tYXhfdHJhbnNfZGF0YTsJLyogTGltaXQgb2YgZGF0YSBibG9ja3MgcGVyIHRyYW5zLiAqLworCisvKiAweDAwNTAgKi8KKwlfX3UzMglzX3BhZGRpbmdbNDRdOworCisvKiAweDAxMDAgKi8KKwlfX3U4CXNfdXNlcnNbMTYqNDhdOwkJLyogaWRzIG9mIGFsbCBmcydlcyBzaGFyaW5nIHRoZSBsb2cgKi8KKy8qIDB4MDQwMCAqLworfSBqb3VybmFsX3N1cGVyYmxvY2tfdDsKKworI2RlZmluZSBKRlNfSEFTX0NPTVBBVF9GRUFUVVJFKGosbWFzaykJCQkJCVwKKwkoKGopLT5qX2Zvcm1hdF92ZXJzaW9uID49IDIgJiYJCQkJCVwKKwkgKChqKS0+al9zdXBlcmJsb2NrLT5zX2ZlYXR1cmVfY29tcGF0ICYgY3B1X3RvX2JlMzIoKG1hc2spKSkpCisjZGVmaW5lIEpGU19IQVNfUk9fQ09NUEFUX0ZFQVRVUkUoaixtYXNrKQkJCQlcCisJKChqKS0+al9mb3JtYXRfdmVyc2lvbiA+PSAyICYmCQkJCQlcCisJICgoaiktPmpfc3VwZXJibG9jay0+c19mZWF0dXJlX3JvX2NvbXBhdCAmIGNwdV90b19iZTMyKChtYXNrKSkpKQorI2RlZmluZSBKRlNfSEFTX0lOQ09NUEFUX0ZFQVRVUkUoaixtYXNrKQkJCQlcCisJKChqKS0+al9mb3JtYXRfdmVyc2lvbiA+PSAyICYmCQkJCQlcCisJICgoaiktPmpfc3VwZXJibG9jay0+c19mZWF0dXJlX2luY29tcGF0ICYgY3B1X3RvX2JlMzIoKG1hc2spKSkpCisKKyNkZWZpbmUgSkZTX0ZFQVRVUkVfSU5DT01QQVRfUkVWT0tFCTB4MDAwMDAwMDEKKworLyogRmVhdHVyZXMga25vd24gdG8gdGhpcyBrZXJuZWwgdmVyc2lvbjogKi8KKyNkZWZpbmUgSkZTX0tOT1dOX0NPTVBBVF9GRUFUVVJFUwkwCisjZGVmaW5lIEpGU19LTk9XTl9ST0NPTVBBVF9GRUFUVVJFUwkwCisjZGVmaW5lIEpGU19LTk9XTl9JTkNPTVBBVF9GRUFUVVJFUwlKRlNfRkVBVFVSRV9JTkNPTVBBVF9SRVZPS0UKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxhc20vYnVnLmg+CisKKyNkZWZpbmUgSkJEX0FTU0VSVElPTlMKKyNpZmRlZiBKQkRfQVNTRVJUSU9OUworI2RlZmluZSBKX0FTU0VSVChhc3NlcnQpCQkJCQkJXAorZG8gewkJCQkJCQkJCVwKKwlpZiAoIShhc3NlcnQpKSB7CQkJCQkJXAorCQlwcmludGsgKEtFUk5fRU1FUkcJCQkJCVwKKwkJCSJBc3NlcnRpb24gZmFpbHVyZSBpbiAlcygpIGF0ICVzOiVkOiBcIiVzXCJcbiIsCVwKKwkJCV9fRlVOQ1RJT05fXywgX19GSUxFX18sIF9fTElORV9fLCAjIGFzc2VydCk7CVwKKwkJQlVHKCk7CQkJCQkJCVwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisjaWYgZGVmaW5lZChDT05GSUdfQlVGRkVSX0RFQlVHKQordm9pZCBidWZmZXJfYXNzZXJ0aW9uX2ZhaWx1cmUoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCk7CisjZGVmaW5lIEpfQVNTRVJUX0JIKGJoLCBleHByKQkJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCWlmICghKGV4cHIpKQkJCQkJCVwKKwkJCWJ1ZmZlcl9hc3NlcnRpb25fZmFpbHVyZShiaCk7CQkJXAorCQlKX0FTU0VSVChleHByKTsJCQkJCQlcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgSl9BU1NFUlRfSkgoamgsIGV4cHIpCUpfQVNTRVJUX0JIKGpoMmJoKGpoKSwgZXhwcikKKyNlbHNlCisjZGVmaW5lIEpfQVNTRVJUX0JIKGJoLCBleHByKQlKX0FTU0VSVChleHByKQorI2RlZmluZSBKX0FTU0VSVF9KSChqaCwgZXhwcikJSl9BU1NFUlQoZXhwcikKKyNlbmRpZgorCisjZWxzZQorI2RlZmluZSBKX0FTU0VSVChhc3NlcnQpCWRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgkJLyogSkJEX0FTU0VSVElPTlMgKi8KKworI2lmIGRlZmluZWQoSkJEX1BBUkFOT0lEX0lPRkFJTCkKKyNkZWZpbmUgSl9FWFBFQ1QoZXhwciwgd2h5Li4uKQkJSl9BU1NFUlQoZXhwcikKKyNkZWZpbmUgSl9FWFBFQ1RfQkgoYmgsIGV4cHIsIHdoeS4uLikJSl9BU1NFUlRfQkgoYmgsIGV4cHIpCisjZGVmaW5lIEpfRVhQRUNUX0pIKGpoLCBleHByLCB3aHkuLi4pCUpfQVNTRVJUX0pIKGpoLCBleHByKQorI2Vsc2UKKyNkZWZpbmUgX19qb3VybmFsX2V4cGVjdChleHByLCB3aHkuLi4pCQkJCQkgICAgIFwKKwkoewkJCQkJCQkJICAgICBcCisJCWludCB2YWwgPSAoZXhwcik7CQkJCQkgICAgIFwKKwkJaWYgKCF2YWwpIHsJCQkJCQkgICAgIFwKKwkJCXByaW50ayhLRVJOX0VSUgkJCQkJICAgICBcCisJCQkJIkVYVDMtZnMgdW5leHBlY3RlZCBmYWlsdXJlOiAlcztcbiIsIyBleHByKTsgXAorCQkJcHJpbnRrKEtFUk5fRVJSIHdoeSAiXG4iKTsJCQkgICAgIFwKKwkJfQkJCQkJCQkgICAgIFwKKwkJdmFsOwkJCQkJCQkgICAgIFwKKwl9KQorI2RlZmluZSBKX0VYUEVDVChleHByLCB3aHkuLi4pCQlfX2pvdXJuYWxfZXhwZWN0KGV4cHIsICMjIHdoeSkKKyNkZWZpbmUgSl9FWFBFQ1RfQkgoYmgsIGV4cHIsIHdoeS4uLikJX19qb3VybmFsX2V4cGVjdChleHByLCAjIyB3aHkpCisjZGVmaW5lIEpfRVhQRUNUX0pIKGpoLCBleHByLCB3aHkuLi4pCV9fam91cm5hbF9leHBlY3QoZXhwciwgIyMgd2h5KQorI2VuZGlmCisKK2VudW0gamJkX3N0YXRlX2JpdHMgeworCUJIX0pCRAkJCS8qIEhhcyBhbiBhdHRhY2hlZCBleHQzIGpvdXJuYWxfaGVhZCAqLworCSAgPSBCSF9Qcml2YXRlU3RhcnQsCisJQkhfSldyaXRlLAkJLyogQmVpbmcgd3JpdHRlbiB0byBsb2cgKEBAQCBERUJVR0dJTkcpICovCisJQkhfRnJlZWQsCQkvKiBIYXMgYmVlbiBmcmVlZCAodHJ1bmNhdGVkKSAqLworCUJIX1Jldm9rZWQsCQkvKiBIYXMgYmVlbiByZXZva2VkIGZyb20gdGhlIGxvZyAqLworCUJIX1Jldm9rZVZhbGlkLAkJLyogUmV2b2tlZCBmbGFnIGlzIHZhbGlkICovCisJQkhfSkJERGlydHksCQkvKiBJcyBkaXJ0eSBidXQgam91cm5hbGVkICovCisJQkhfU3RhdGUsCQkvKiBQaW5zIG1vc3Qgam91cm5hbF9oZWFkIHN0YXRlICovCisJQkhfSm91cm5hbEhlYWQsCQkvKiBQaW5zIGJoLT5iX3ByaXZhdGUgYW5kIGpoLT5iX2JoICovCisJQkhfVW5zaGFkb3csCQkvKiBEdW1teSBiaXQsIGZvciBCSl9TaGFkb3cgd2FrZXVwIGZpbHRlcmluZyAqLworfTsKKworQlVGRkVSX0ZOUyhKQkQsIGpiZCkKK0JVRkZFUl9GTlMoSldyaXRlLCBqd3JpdGUpCitCVUZGRVJfRk5TKEpCRERpcnR5LCBqYmRkaXJ0eSkKK1RBU19CVUZGRVJfRk5TKEpCRERpcnR5LCBqYmRkaXJ0eSkKK0JVRkZFUl9GTlMoUmV2b2tlZCwgcmV2b2tlZCkKK1RBU19CVUZGRVJfRk5TKFJldm9rZWQsIHJldm9rZWQpCitCVUZGRVJfRk5TKFJldm9rZVZhbGlkLCByZXZva2V2YWxpZCkKK1RBU19CVUZGRVJfRk5TKFJldm9rZVZhbGlkLCByZXZva2V2YWxpZCkKK0JVRkZFUl9GTlMoRnJlZWQsIGZyZWVkKQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBidWZmZXJfaGVhZCAqamgyYmgoc3RydWN0IGpvdXJuYWxfaGVhZCAqamgpCit7CisJcmV0dXJuIGpoLT5iX2JoOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBqb3VybmFsX2hlYWQgKmJoMmpoKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCit7CisJcmV0dXJuIGJoLT5iX3ByaXZhdGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBqYmRfbG9ja19iaF9zdGF0ZShzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQoreworCWJpdF9zcGluX2xvY2soQkhfU3RhdGUsICZiaC0+Yl9zdGF0ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGpiZF90cnlsb2NrX2JoX3N0YXRlKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCit7CisJcmV0dXJuIGJpdF9zcGluX3RyeWxvY2soQkhfU3RhdGUsICZiaC0+Yl9zdGF0ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGpiZF9pc19sb2NrZWRfYmhfc3RhdGUoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKK3sKKwlyZXR1cm4gYml0X3NwaW5faXNfbG9ja2VkKEJIX1N0YXRlLCAmYmgtPmJfc3RhdGUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgamJkX3VubG9ja19iaF9zdGF0ZShzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQoreworCWJpdF9zcGluX3VubG9jayhCSF9TdGF0ZSwgJmJoLT5iX3N0YXRlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGpiZF9sb2NrX2JoX2pvdXJuYWxfaGVhZChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQoreworCWJpdF9zcGluX2xvY2soQkhfSm91cm5hbEhlYWQsICZiaC0+Yl9zdGF0ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBqYmRfdW5sb2NrX2JoX2pvdXJuYWxfaGVhZChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQoreworCWJpdF9zcGluX3VubG9jayhCSF9Kb3VybmFsSGVhZCwgJmJoLT5iX3N0YXRlKTsKK30KKworc3RydWN0IGpiZF9yZXZva2VfdGFibGVfczsKKworLyoqCisgKiBzdHJ1Y3QgaGFuZGxlX3MgLSBUaGUgaGFuZGxlX3MgdHlwZSBpcyB0aGUgY29uY3JldGUgdHlwZSBhc3NvY2lhdGVkIHdpdGgKKyAqICAgICBoYW5kbGVfdC4KKyAqIEBoX3RyYW5zYWN0aW9uOiBXaGljaCBjb21wb3VuZCB0cmFuc2FjdGlvbiBpcyB0aGlzIHVwZGF0ZSBhIHBhcnQgb2Y/CisgKiBAaF9idWZmZXJfY3JlZGl0czogTnVtYmVyIG9mIHJlbWFpbmluZyBidWZmZXJzIHdlIGFyZSBhbGxvd2VkIHRvIGRpcnR5LgorICogQGhfcmVmOiBSZWZlcmVuY2UgY291bnQgb24gdGhpcyBoYW5kbGUKKyAqIEBoX2VycjogRmllbGQgZm9yIGNhbGxlcidzIHVzZSB0byB0cmFjayBlcnJvcnMgdGhyb3VnaCBsYXJnZSBmcyBvcGVyYXRpb25zCisgKiBAaF9zeW5jOiBmbGFnIGZvciBzeW5jLW9uLWNsb3NlCisgKiBAaF9qZGF0YTogZmxhZyB0byBmb3JjZSBkYXRhIGpvdXJuYWxpbmcKKyAqIEBoX2Fib3J0ZWQ6IGZsYWcgaW5kaWNhdGluZyBmYXRhbCBlcnJvciBvbiBoYW5kbGUKKyAqKi8KKworLyogRG9jYm9vayBjYW4ndCB5ZXQgY29wZSB3aXRoIHRoZSBiaXQgZmllbGRzLCBidXQgd2lsbCBsZWF2ZSB0aGUgZG9jdW1lbnRhdGlvbgorICogaW4gc28gaXQgY2FuIGJlIGZpeGVkIGxhdGVyLiAKKyAqLworCitzdHJ1Y3QgaGFuZGxlX3MgCit7CisJLyogV2hpY2ggY29tcG91bmQgdHJhbnNhY3Rpb24gaXMgdGhpcyB1cGRhdGUgYSBwYXJ0IG9mPyAqLworCXRyYW5zYWN0aW9uX3QJCSpoX3RyYW5zYWN0aW9uOworCisJLyogTnVtYmVyIG9mIHJlbWFpbmluZyBidWZmZXJzIHdlIGFyZSBhbGxvd2VkIHRvIGRpcnR5OiAqLworCWludAkJCWhfYnVmZmVyX2NyZWRpdHM7CisKKwkvKiBSZWZlcmVuY2UgY291bnQgb24gdGhpcyBoYW5kbGUgKi8KKwlpbnQJCQloX3JlZjsKKworCS8qIEZpZWxkIGZvciBjYWxsZXIncyB1c2UgdG8gdHJhY2sgZXJyb3JzIHRocm91Z2ggbGFyZ2UgZnMgKi8KKwkvKiBvcGVyYXRpb25zICovCisJaW50CQkJaF9lcnI7CisKKwkvKiBGbGFncyBbbm8gbG9ja2luZ10gKi8KKwl1bnNpZ25lZCBpbnQJaF9zeW5jOgkJMTsJLyogc3luYy1vbi1jbG9zZSAqLworCXVuc2lnbmVkIGludAloX2pkYXRhOgkxOwkvKiBmb3JjZSBkYXRhIGpvdXJuYWxpbmcgKi8KKwl1bnNpZ25lZCBpbnQJaF9hYm9ydGVkOgkxOwkvKiBmYXRhbCBlcnJvciBvbiBoYW5kbGUgKi8KK307CisKKworLyogVGhlIHRyYW5zYWN0aW9uX3QgdHlwZSBpcyB0aGUgZ3V0cyBvZiB0aGUgam91cm5hbGluZyBtZWNoYW5pc20uICBJdAorICogdHJhY2tzIGEgY29tcG91bmQgdHJhbnNhY3Rpb24gdGhyb3VnaCBpdHMgdmFyaW91cyBzdGF0ZXM6CisgKgorICogUlVOTklORzoJYWNjZXB0aW5nIG5ldyB1cGRhdGVzCisgKiBMT0NLRUQ6CVVwZGF0ZXMgc3RpbGwgcnVubmluZyBidXQgd2UgZG9uJ3QgYWNjZXB0IG5ldyBvbmVzCisgKiBSVU5ET1dOOglVcGRhdGVzIGFyZSB0aWR5aW5nIHVwIGJ1dCBoYXZlIGZpbmlzaGVkIHJlcXVlc3RpbmcKKyAqCQluZXcgYnVmZmVycyB0byBtb2RpZnkgKHN0YXRlIG5vdCB1c2VkIGZvciBub3cpCisgKiBGTFVTSDogICAgICAgQWxsIHVwZGF0ZXMgY29tcGxldGUsIGJ1dCB3ZSBhcmUgc3RpbGwgd3JpdGluZyB0byBkaXNrCisgKiBDT01NSVQ6ICAgICAgQWxsIGRhdGEgb24gZGlzaywgd3JpdGluZyBjb21taXQgcmVjb3JkCisgKiBGSU5JU0hFRDoJV2Ugc3RpbGwgaGF2ZSB0byBrZWVwIHRoZSB0cmFuc2FjdGlvbiBmb3IgY2hlY2twb2ludGluZy4KKyAqCisgKiBUaGUgdHJhbnNhY3Rpb24ga2VlcHMgdHJhY2sgb2YgYWxsIG9mIHRoZSBidWZmZXJzIG1vZGlmaWVkIGJ5IGEKKyAqIHJ1bm5pbmcgdHJhbnNhY3Rpb24sIGFuZCBhbGwgb2YgdGhlIGJ1ZmZlcnMgY29tbWl0dGVkIGJ1dCBub3QgeWV0CisgKiBmbHVzaGVkIHRvIGhvbWUgZm9yIGZpbmlzaGVkIHRyYW5zYWN0aW9ucy4KKyAqLworCisvKgorICogTG9jayByYW5raW5nOgorICoKKyAqICAgIGpfbGlzdF9sb2NrCisgKiAgICAgIC0+amJkX2xvY2tfYmhfam91cm5hbF9oZWFkKCkJKFRoaXMgaXMgImlubmVybW9zdCIpCisgKgorICogICAgal9zdGF0ZV9sb2NrCisgKiAgICAtPmpiZF9sb2NrX2JoX3N0YXRlKCkKKyAqCisgKiAgICBqYmRfbG9ja19iaF9zdGF0ZSgpCisgKiAgICAtPmpfbGlzdF9sb2NrCisgKgorICogICAgal9zdGF0ZV9sb2NrCisgKiAgICAtPnRfaGFuZGxlX2xvY2sKKyAqCisgKiAgICBqX3N0YXRlX2xvY2sKKyAqICAgIC0+al9saXN0X2xvY2sJCQkoam91cm5hbF91bm1hcF9idWZmZXIpCisgKgorICovCisKK3N0cnVjdCB0cmFuc2FjdGlvbl9zIAoreworCS8qIFBvaW50ZXIgdG8gdGhlIGpvdXJuYWwgZm9yIHRoaXMgdHJhbnNhY3Rpb24uIFtubyBsb2NraW5nXSAqLworCWpvdXJuYWxfdAkJKnRfam91cm5hbDsKKworCS8qIFNlcXVlbmNlIG51bWJlciBmb3IgdGhpcyB0cmFuc2FjdGlvbiBbbm8gbG9ja2luZ10gKi8KKwl0aWRfdAkJCXRfdGlkOworCisJLyoKKwkgKiBUcmFuc2FjdGlvbidzIGN1cnJlbnQgc3RhdGUKKwkgKiBbbm8gbG9ja2luZyAtIG9ubHkga2pvdXJuYWxkIGFsdGVycyB0aGlzXQorCSAqIEZJWE1FOiBuZWVkcyBiYXJyaWVycworCSAqIEtMVURHRTogW3VzZSBqX3N0YXRlX2xvY2tdCisJICovCisJZW51bSB7CisJCVRfUlVOTklORywKKwkJVF9MT0NLRUQsCisJCVRfUlVORE9XTiwKKwkJVF9GTFVTSCwKKwkJVF9DT01NSVQsCisJCVRfRklOSVNIRUQgCisJfQkJCXRfc3RhdGU7CisKKwkvKgorCSAqIFdoZXJlIGluIHRoZSBsb2cgZG9lcyB0aGlzIHRyYW5zYWN0aW9uJ3MgY29tbWl0IHN0YXJ0PyBbbm8gbG9ja2luZ10KKwkgKi8KKwl1bnNpZ25lZCBsb25nCQl0X2xvZ19zdGFydDsKKworCS8qIE51bWJlciBvZiBidWZmZXJzIG9uIHRoZSB0X2J1ZmZlcnMgbGlzdCBbal9saXN0X2xvY2tdICovCisJaW50CQkJdF9ucl9idWZmZXJzOworCisJLyoKKwkgKiBEb3VibHktbGlua2VkIGNpcmN1bGFyIGxpc3Qgb2YgYWxsIGJ1ZmZlcnMgcmVzZXJ2ZWQgYnV0IG5vdCB5ZXQKKwkgKiBtb2RpZmllZCBieSB0aGlzIHRyYW5zYWN0aW9uIFtqX2xpc3RfbG9ja10KKwkgKi8KKwlzdHJ1Y3Qgam91cm5hbF9oZWFkCSp0X3Jlc2VydmVkX2xpc3Q7CisKKwkvKgorCSAqIERvdWJseS1saW5rZWQgY2lyY3VsYXIgbGlzdCBvZiBhbGwgYnVmZmVycyB1bmRlciB3cml0ZW91dCBkdXJpbmcKKwkgKiBjb21taXQgW2pfbGlzdF9sb2NrXQorCSAqLworCXN0cnVjdCBqb3VybmFsX2hlYWQJKnRfbG9ja2VkX2xpc3Q7CisKKwkvKgorCSAqIERvdWJseS1saW5rZWQgY2lyY3VsYXIgbGlzdCBvZiBhbGwgbWV0YWRhdGEgYnVmZmVycyBvd25lZCBieSB0aGlzCisJICogdHJhbnNhY3Rpb24gW2pfbGlzdF9sb2NrXQorCSAqLworCXN0cnVjdCBqb3VybmFsX2hlYWQJKnRfYnVmZmVyczsKKworCS8qCisJICogRG91Ymx5LWxpbmtlZCBjaXJjdWxhciBsaXN0IG9mIGFsbCBkYXRhIGJ1ZmZlcnMgc3RpbGwgdG8gYmUKKwkgKiBmbHVzaGVkIGJlZm9yZSB0aGlzIHRyYW5zYWN0aW9uIGNhbiBiZSBjb21taXR0ZWQgW2pfbGlzdF9sb2NrXQorCSAqLworCXN0cnVjdCBqb3VybmFsX2hlYWQJKnRfc3luY19kYXRhbGlzdDsKKworCS8qCisJICogRG91Ymx5LWxpbmtlZCBjaXJjdWxhciBsaXN0IG9mIGFsbCBmb3JnZXQgYnVmZmVycyAoc3VwZXJzZWRlZAorCSAqIGJ1ZmZlcnMgd2hpY2ggd2UgY2FuIHVuLWNoZWNrcG9pbnQgb25jZSB0aGlzIHRyYW5zYWN0aW9uIGNvbW1pdHMpCisJICogW2pfbGlzdF9sb2NrXQorCSAqLworCXN0cnVjdCBqb3VybmFsX2hlYWQJKnRfZm9yZ2V0OworCisJLyoKKwkgKiBEb3VibHktbGlua2VkIGNpcmN1bGFyIGxpc3Qgb2YgYWxsIGJ1ZmZlcnMgc3RpbGwgdG8gYmUgZmx1c2hlZCBiZWZvcmUKKwkgKiB0aGlzIHRyYW5zYWN0aW9uIGNhbiBiZSBjaGVja3BvaW50ZWQuIFtqX2xpc3RfbG9ja10KKwkgKi8KKwlzdHJ1Y3Qgam91cm5hbF9oZWFkCSp0X2NoZWNrcG9pbnRfbGlzdDsKKworCS8qCisJICogRG91Ymx5LWxpbmtlZCBjaXJjdWxhciBsaXN0IG9mIHRlbXBvcmFyeSBidWZmZXJzIGN1cnJlbnRseSB1bmRlcmdvaW5nCisJICogSU8gaW4gdGhlIGxvZyBbal9saXN0X2xvY2tdCisJICovCisJc3RydWN0IGpvdXJuYWxfaGVhZAkqdF9pb2J1Zl9saXN0OworCisJLyoKKwkgKiBEb3VibHktbGlua2VkIGNpcmN1bGFyIGxpc3Qgb2YgbWV0YWRhdGEgYnVmZmVycyBiZWluZyBzaGFkb3dlZCBieSBsb2cKKwkgKiBJTy4gIFRoZSBJTyBidWZmZXJzIG9uIHRoZSBpb2J1ZiBsaXN0IGFuZCB0aGUgc2hhZG93IGJ1ZmZlcnMgb24gdGhpcworCSAqIGxpc3QgbWF0Y2ggZWFjaCBvdGhlciBvbmUgZm9yIG9uZSBhdCBhbGwgdGltZXMuIFtqX2xpc3RfbG9ja10KKwkgKi8KKwlzdHJ1Y3Qgam91cm5hbF9oZWFkCSp0X3NoYWRvd19saXN0OworCisJLyoKKwkgKiBEb3VibHktbGlua2VkIGNpcmN1bGFyIGxpc3Qgb2YgY29udHJvbCBidWZmZXJzIGJlaW5nIHdyaXR0ZW4gdG8gdGhlCisJICogbG9nLiBbal9saXN0X2xvY2tdCisJICovCisJc3RydWN0IGpvdXJuYWxfaGVhZAkqdF9sb2dfbGlzdDsKKworCS8qCisJICogUHJvdGVjdHMgaW5mbyByZWxhdGVkIHRvIGhhbmRsZXMKKwkgKi8KKwlzcGlubG9ja190CQl0X2hhbmRsZV9sb2NrOworCisJLyoKKwkgKiBOdW1iZXIgb2Ygb3V0c3RhbmRpbmcgdXBkYXRlcyBydW5uaW5nIG9uIHRoaXMgdHJhbnNhY3Rpb24KKwkgKiBbdF9oYW5kbGVfbG9ja10KKwkgKi8KKwlpbnQJCQl0X3VwZGF0ZXM7CisKKwkvKgorCSAqIE51bWJlciBvZiBidWZmZXJzIHJlc2VydmVkIGZvciB1c2UgYnkgYWxsIGhhbmRsZXMgaW4gdGhpcyB0cmFuc2FjdGlvbgorCSAqIGhhbmRsZSBidXQgbm90IHlldCBtb2RpZmllZC4gW3RfaGFuZGxlX2xvY2tdCisJICovCisJaW50CQkJdF9vdXRzdGFuZGluZ19jcmVkaXRzOworCisJLyoKKwkgKiBGb3J3YXJkIGFuZCBiYWNrd2FyZCBsaW5rcyBmb3IgdGhlIGNpcmN1bGFyIGxpc3Qgb2YgYWxsIHRyYW5zYWN0aW9ucworCSAqIGF3YWl0aW5nIGNoZWNrcG9pbnQuIFtqX2xpc3RfbG9ja10KKwkgKi8KKwl0cmFuc2FjdGlvbl90CQkqdF9jcG5leHQsICp0X2NwcHJldjsKKworCS8qCisJICogV2hlbiB3aWxsIHRoZSB0cmFuc2FjdGlvbiBleHBpcmUgKGJlY29tZSBkdWUgZm9yIGNvbW1pdCksIGluIGppZmZpZXM/CisJICogW25vIGxvY2tpbmddCisJICovCisJdW5zaWduZWQgbG9uZwkJdF9leHBpcmVzOworCisJLyoKKwkgKiBIb3cgbWFueSBoYW5kbGVzIHVzZWQgdGhpcyB0cmFuc2FjdGlvbj8gW3RfaGFuZGxlX2xvY2tdCisJICovCisJaW50IHRfaGFuZGxlX2NvdW50OworCit9OworCisvKioKKyAqIHN0cnVjdCBqb3VybmFsX3MgLSBUaGUgam91cm5hbF9zIHR5cGUgaXMgdGhlIGNvbmNyZXRlIHR5cGUgYXNzb2NpYXRlZCB3aXRoCisgKiAgICAgam91cm5hbF90LgorICogQGpfZmxhZ3M6ICBHZW5lcmFsIGpvdXJuYWxpbmcgc3RhdGUgZmxhZ3MKKyAqIEBqX2Vycm5vOiAgSXMgdGhlcmUgYW4gb3V0c3RhbmRpbmcgdW5jbGVhcmVkIGVycm9yIG9uIHRoZSBqb3VybmFsIChmcm9tIGEKKyAqICAgICBwcmlvciBhYm9ydCk/IAorICogQGpfc2JfYnVmZmVyOiBGaXJzdCBwYXJ0IG9mIHN1cGVyYmxvY2sgYnVmZmVyCisgKiBAal9zdXBlcmJsb2NrOiBTZWNvbmQgcGFydCBvZiBzdXBlcmJsb2NrIGJ1ZmZlcgorICogQGpfZm9ybWF0X3ZlcnNpb246IFZlcnNpb24gb2YgdGhlIHN1cGVyYmxvY2sgZm9ybWF0CisgKiBAal9zdGF0ZV9sb2NrOiBQcm90ZWN0IHRoZSB2YXJpb3VzIHNjYWxhcnMgaW4gdGhlIGpvdXJuYWwKKyAqIEBqX2JhcnJpZXJfY291bnQ6ICBOdW1iZXIgb2YgcHJvY2Vzc2VzIHdhaXRpbmcgdG8gY3JlYXRlIGEgYmFycmllciBsb2NrCisgKiBAal9iYXJyaWVyOiBUaGUgYmFycmllciBsb2NrIGl0c2VsZgorICogQGpfcnVubmluZ190cmFuc2FjdGlvbjogVGhlIGN1cnJlbnQgcnVubmluZyB0cmFuc2FjdGlvbi4uCisgKiBAal9jb21taXR0aW5nX3RyYW5zYWN0aW9uOiB0aGUgdHJhbnNhY3Rpb24gd2UgYXJlIHB1c2hpbmcgdG8gZGlzaworICogQGpfY2hlY2twb2ludF90cmFuc2FjdGlvbnM6IGEgbGlua2VkIGNpcmN1bGFyIGxpc3Qgb2YgYWxsIHRyYW5zYWN0aW9ucworICogIHdhaXRpbmcgZm9yIGNoZWNrcG9pbnRpbmcKKyAqIEBqX3dhaXRfdHJhbnNhY3Rpb25fbG9ja2VkOiBXYWl0IHF1ZXVlIGZvciB3YWl0aW5nIGZvciBhIGxvY2tlZCB0cmFuc2FjdGlvbgorICogIHRvIHN0YXJ0IGNvbW1pdHRpbmcsIG9yIGZvciBhIGJhcnJpZXIgbG9jayB0byBiZSByZWxlYXNlZAorICogQGpfd2FpdF9sb2dzcGFjZTogV2FpdCBxdWV1ZSBmb3Igd2FpdGluZyBmb3IgY2hlY2twb2ludGluZyB0byBjb21wbGV0ZQorICogQGpfd2FpdF9kb25lX2NvbW1pdDogV2FpdCBxdWV1ZSBmb3Igd2FpdGluZyBmb3IgY29tbWl0IHRvIGNvbXBsZXRlIAorICogQGpfd2FpdF9jaGVja3BvaW50OiAgV2FpdCBxdWV1ZSB0byB0cmlnZ2VyIGNoZWNrcG9pbnRpbmcKKyAqIEBqX3dhaXRfY29tbWl0OiBXYWl0IHF1ZXVlIHRvIHRyaWdnZXIgY29tbWl0CisgKiBAal93YWl0X3VwZGF0ZXM6IFdhaXQgcXVldWUgdG8gd2FpdCBmb3IgdXBkYXRlcyB0byBjb21wbGV0ZQorICogQGpfY2hlY2twb2ludF9zZW06IFNlbWFwaG9yZSBmb3IgbG9ja2luZyBhZ2FpbnN0IGNvbmN1cnJlbnQgY2hlY2twb2ludHMKKyAqIEBqX2hlYWQ6IEpvdXJuYWwgaGVhZCAtIGlkZW50aWZpZXMgdGhlIGZpcnN0IHVudXNlZCBibG9jayBpbiB0aGUgam91cm5hbAorICogQGpfdGFpbDogSm91cm5hbCB0YWlsIC0gaWRlbnRpZmllcyB0aGUgb2xkZXN0IHN0aWxsLXVzZWQgYmxvY2sgaW4gdGhlCisgKiAgam91cm5hbC4KKyAqIEBqX2ZyZWU6IEpvdXJuYWwgZnJlZSAtIGhvdyBtYW55IGZyZWUgYmxvY2tzIGFyZSB0aGVyZSBpbiB0aGUgam91cm5hbD8KKyAqIEBqX2ZpcnN0OiBUaGUgYmxvY2sgbnVtYmVyIG9mIHRoZSBmaXJzdCB1c2FibGUgYmxvY2sgCisgKiBAal9sYXN0OiBUaGUgYmxvY2sgbnVtYmVyIG9uZSBiZXlvbmQgdGhlIGxhc3QgdXNhYmxlIGJsb2NrCisgKiBAal9kZXY6IERldmljZSB3aGVyZSB3ZSBzdG9yZSB0aGUgam91cm5hbAorICogQGpfYmxvY2tzaXplOiBibG9ja3NpemUgZm9yIHRoZSBsb2NhdGlvbiB3aGVyZSB3ZSBzdG9yZSB0aGUgam91cm5hbC4KKyAqIEBqX2Jsa19vZmZzZXQ6IHN0YXJ0aW5nIGJsb2NrIG9mZnNldCBmb3IgaW50byB0aGUgZGV2aWNlIHdoZXJlIHdlIHN0b3JlIHRoZQorICogICAgIGpvdXJuYWwKKyAqIEBqX2ZzX2RldjogRGV2aWNlIHdoaWNoIGhvbGRzIHRoZSBjbGllbnQgZnMuICBGb3IgaW50ZXJuYWwgam91cm5hbCB0aGlzIHdpbGwKKyAqICAgICBiZSBlcXVhbCB0byBqX2RldgorICogQGpfbWF4bGVuOiBUb3RhbCBtYXhpbXVtIGNhcGFjaXR5IG9mIHRoZSBqb3VybmFsIHJlZ2lvbiBvbiBkaXNrLgorICogQGpfbGlzdF9sb2NrOiBQcm90ZWN0cyB0aGUgYnVmZmVyIGxpc3RzIGFuZCBpbnRlcm5hbCBidWZmZXIgc3RhdGUuCisgKiBAal9pbm9kZTogT3B0aW9uYWwgaW5vZGUgd2hlcmUgd2Ugc3RvcmUgdGhlIGpvdXJuYWwuICBJZiBwcmVzZW50LCBhbGwgam91cm5hbAorICogICAgIGJsb2NrIG51bWJlcnMgYXJlIG1hcHBlZCBpbnRvIHRoaXMgaW5vZGUgdmlhIGJtYXAoKS4KKyAqIEBqX3RhaWxfc2VxdWVuY2U6ICBTZXF1ZW5jZSBudW1iZXIgb2YgdGhlIG9sZGVzdCB0cmFuc2FjdGlvbiBpbiB0aGUgbG9nIAorICogQGpfdHJhbnNhY3Rpb25fc2VxdWVuY2U6IFNlcXVlbmNlIG51bWJlciBvZiB0aGUgbmV4dCB0cmFuc2FjdGlvbiB0byBncmFudAorICogQGpfY29tbWl0X3NlcXVlbmNlOiBTZXF1ZW5jZSBudW1iZXIgb2YgdGhlIG1vc3QgcmVjZW50bHkgY29tbWl0dGVkCisgKiAgdHJhbnNhY3Rpb24KKyAqIEBqX2NvbW1pdF9yZXF1ZXN0OiBTZXF1ZW5jZSBudW1iZXIgb2YgdGhlIG1vc3QgcmVjZW50IHRyYW5zYWN0aW9uIHdhbnRpbmcKKyAqICAgICBjb21taXQgCisgKiBAal91dWlkOiBVdWlkIG9mIGNsaWVudCBvYmplY3QuCisgKiBAal90YXNrOiBQb2ludGVyIHRvIHRoZSBjdXJyZW50IGNvbW1pdCB0aHJlYWQgZm9yIHRoaXMgam91cm5hbAorICogQGpfbWF4X3RyYW5zYWN0aW9uX2J1ZmZlcnM6ICBNYXhpbXVtIG51bWJlciBvZiBtZXRhZGF0YSBidWZmZXJzIHRvIGFsbG93IGluIGEKKyAqICAgICBzaW5nbGUgY29tcG91bmQgY29tbWl0IHRyYW5zYWN0aW9uCisgKiBAal9jb21taXRfaW50ZXJ2YWw6IFdoYXQgaXMgdGhlIG1heGltdW0gdHJhbnNhY3Rpb24gbGlmZXRpbWUgYmVmb3JlIHdlIGJlZ2luCisgKiAgYSBjb21taXQ/CisgKiBAal9jb21taXRfdGltZXI6ICBUaGUgdGltZXIgdXNlZCB0byB3YWtldXAgdGhlIGNvbW1pdCB0aHJlYWQKKyAqIEBqX3Jldm9rZV9sb2NrOiBQcm90ZWN0IHRoZSByZXZva2UgdGFibGUKKyAqIEBqX3Jldm9rZTogVGhlIHJldm9rZSB0YWJsZSAtIG1haW50YWlucyB0aGUgbGlzdCBvZiByZXZva2VkIGJsb2NrcyBpbiB0aGUKKyAqICAgICBjdXJyZW50IHRyYW5zYWN0aW9uLgorICogQGpfcmV2b2tlX3RhYmxlOiBhbHRlcm5hdGUgcmV2b2tlIHRhYmxlcyBmb3Igal9yZXZva2UKKyAqIEBqX3ByaXZhdGU6IEFuIG9wYXF1ZSBwb2ludGVyIHRvIGZzLXByaXZhdGUgaW5mb3JtYXRpb24uCisgKi8KKworc3RydWN0IGpvdXJuYWxfcworeworCS8qIEdlbmVyYWwgam91cm5hbGluZyBzdGF0ZSBmbGFncyBbal9zdGF0ZV9sb2NrXSAqLworCXVuc2lnbmVkIGxvbmcJCWpfZmxhZ3M7CisKKwkvKgorCSAqIElzIHRoZXJlIGFuIG91dHN0YW5kaW5nIHVuY2xlYXJlZCBlcnJvciBvbiB0aGUgam91cm5hbCAoZnJvbSBhIHByaW9yCisJICogYWJvcnQpPyBbal9zdGF0ZV9sb2NrXQorCSAqLworCWludAkJCWpfZXJybm87CisKKwkvKiBUaGUgc3VwZXJibG9jayBidWZmZXIgKi8KKwlzdHJ1Y3QgYnVmZmVyX2hlYWQJKmpfc2JfYnVmZmVyOworCWpvdXJuYWxfc3VwZXJibG9ja190CSpqX3N1cGVyYmxvY2s7CisKKwkvKiBWZXJzaW9uIG9mIHRoZSBzdXBlcmJsb2NrIGZvcm1hdCAqLworCWludAkJCWpfZm9ybWF0X3ZlcnNpb247CisKKwkvKgorCSAqIFByb3RlY3QgdGhlIHZhcmlvdXMgc2NhbGFycyBpbiB0aGUgam91cm5hbAorCSAqLworCXNwaW5sb2NrX3QJCWpfc3RhdGVfbG9jazsKKworCS8qCisJICogTnVtYmVyIG9mIHByb2Nlc3NlcyB3YWl0aW5nIHRvIGNyZWF0ZSBhIGJhcnJpZXIgbG9jayBbal9zdGF0ZV9sb2NrXQorCSAqLworCWludAkJCWpfYmFycmllcl9jb3VudDsKKworCS8qIFRoZSBiYXJyaWVyIGxvY2sgaXRzZWxmICovCisJc3RydWN0IHNlbWFwaG9yZQlqX2JhcnJpZXI7CisKKwkvKgorCSAqIFRyYW5zYWN0aW9uczogVGhlIGN1cnJlbnQgcnVubmluZyB0cmFuc2FjdGlvbi4uLgorCSAqIFtqX3N0YXRlX2xvY2tdIFtjYWxsZXIgaG9sZGluZyBvcGVuIGhhbmRsZV0KKwkgKi8KKwl0cmFuc2FjdGlvbl90CQkqal9ydW5uaW5nX3RyYW5zYWN0aW9uOworCisJLyoKKwkgKiB0aGUgdHJhbnNhY3Rpb24gd2UgYXJlIHB1c2hpbmcgdG8gZGlzaworCSAqIFtqX3N0YXRlX2xvY2tdIFtjYWxsZXIgaG9sZGluZyBvcGVuIGhhbmRsZV0KKwkgKi8KKwl0cmFuc2FjdGlvbl90CQkqal9jb21taXR0aW5nX3RyYW5zYWN0aW9uOworCisJLyoKKwkgKiAuLi4gYW5kIGEgbGlua2VkIGNpcmN1bGFyIGxpc3Qgb2YgYWxsIHRyYW5zYWN0aW9ucyB3YWl0aW5nIGZvcgorCSAqIGNoZWNrcG9pbnRpbmcuIFtqX2xpc3RfbG9ja10KKwkgKi8KKwl0cmFuc2FjdGlvbl90CQkqal9jaGVja3BvaW50X3RyYW5zYWN0aW9uczsKKworCS8qCisJICogV2FpdCBxdWV1ZSBmb3Igd2FpdGluZyBmb3IgYSBsb2NrZWQgdHJhbnNhY3Rpb24gdG8gc3RhcnQgY29tbWl0dGluZywKKwkgKiBvciBmb3IgYSBiYXJyaWVyIGxvY2sgdG8gYmUgcmVsZWFzZWQKKwkgKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdAlqX3dhaXRfdHJhbnNhY3Rpb25fbG9ja2VkOworCisJLyogV2FpdCBxdWV1ZSBmb3Igd2FpdGluZyBmb3IgY2hlY2twb2ludGluZyB0byBjb21wbGV0ZSAqLworCXdhaXRfcXVldWVfaGVhZF90CWpfd2FpdF9sb2dzcGFjZTsKKworCS8qIFdhaXQgcXVldWUgZm9yIHdhaXRpbmcgZm9yIGNvbW1pdCB0byBjb21wbGV0ZSAqLworCXdhaXRfcXVldWVfaGVhZF90CWpfd2FpdF9kb25lX2NvbW1pdDsKKworCS8qIFdhaXQgcXVldWUgdG8gdHJpZ2dlciBjaGVja3BvaW50aW5nICovCisJd2FpdF9xdWV1ZV9oZWFkX3QJal93YWl0X2NoZWNrcG9pbnQ7CisKKwkvKiBXYWl0IHF1ZXVlIHRvIHRyaWdnZXIgY29tbWl0ICovCisJd2FpdF9xdWV1ZV9oZWFkX3QJal93YWl0X2NvbW1pdDsKKworCS8qIFdhaXQgcXVldWUgdG8gd2FpdCBmb3IgdXBkYXRlcyB0byBjb21wbGV0ZSAqLworCXdhaXRfcXVldWVfaGVhZF90CWpfd2FpdF91cGRhdGVzOworCisJLyogU2VtYXBob3JlIGZvciBsb2NraW5nIGFnYWluc3QgY29uY3VycmVudCBjaGVja3BvaW50cyAqLworCXN0cnVjdCBzZW1hcGhvcmUgCWpfY2hlY2twb2ludF9zZW07CisKKwkvKgorCSAqIEpvdXJuYWwgaGVhZDogaWRlbnRpZmllcyB0aGUgZmlyc3QgdW51c2VkIGJsb2NrIGluIHRoZSBqb3VybmFsLgorCSAqIFtqX3N0YXRlX2xvY2tdCisJICovCisJdW5zaWduZWQgbG9uZwkJal9oZWFkOworCisJLyoKKwkgKiBKb3VybmFsIHRhaWw6IGlkZW50aWZpZXMgdGhlIG9sZGVzdCBzdGlsbC11c2VkIGJsb2NrIGluIHRoZSBqb3VybmFsLgorCSAqIFtqX3N0YXRlX2xvY2tdCisJICovCisJdW5zaWduZWQgbG9uZwkJal90YWlsOworCisJLyoKKwkgKiBKb3VybmFsIGZyZWU6IGhvdyBtYW55IGZyZWUgYmxvY2tzIGFyZSB0aGVyZSBpbiB0aGUgam91cm5hbD8KKwkgKiBbal9zdGF0ZV9sb2NrXQorCSAqLworCXVuc2lnbmVkIGxvbmcJCWpfZnJlZTsKKworCS8qCisJICogSm91cm5hbCBzdGFydCBhbmQgZW5kOiB0aGUgYmxvY2sgbnVtYmVycyBvZiB0aGUgZmlyc3QgdXNhYmxlIGJsb2NrCisJICogYW5kIG9uZSBiZXlvbmQgdGhlIGxhc3QgdXNhYmxlIGJsb2NrIGluIHRoZSBqb3VybmFsLiBbal9zdGF0ZV9sb2NrXQorCSAqLworCXVuc2lnbmVkIGxvbmcJCWpfZmlyc3Q7CisJdW5zaWduZWQgbG9uZwkJal9sYXN0OworCisJLyoKKwkgKiBEZXZpY2UsIGJsb2Nrc2l6ZSBhbmQgc3RhcnRpbmcgYmxvY2sgb2Zmc2V0IGZvciB0aGUgbG9jYXRpb24gd2hlcmUgd2UKKwkgKiBzdG9yZSB0aGUgam91cm5hbC4KKwkgKi8KKwlzdHJ1Y3QgYmxvY2tfZGV2aWNlCSpqX2RldjsKKwlpbnQJCQlqX2Jsb2Nrc2l6ZTsKKwl1bnNpZ25lZCBpbnQJCWpfYmxrX29mZnNldDsKKworCS8qCisJICogRGV2aWNlIHdoaWNoIGhvbGRzIHRoZSBjbGllbnQgZnMuICBGb3IgaW50ZXJuYWwgam91cm5hbCB0aGlzIHdpbGwgYmUKKwkgKiBlcXVhbCB0byBqX2Rldi4KKwkgKi8KKwlzdHJ1Y3QgYmxvY2tfZGV2aWNlCSpqX2ZzX2RldjsKKworCS8qIFRvdGFsIG1heGltdW0gY2FwYWNpdHkgb2YgdGhlIGpvdXJuYWwgcmVnaW9uIG9uIGRpc2suICovCisJdW5zaWduZWQgaW50CQlqX21heGxlbjsKKworCS8qCisJICogUHJvdGVjdHMgdGhlIGJ1ZmZlciBsaXN0cyBhbmQgaW50ZXJuYWwgYnVmZmVyIHN0YXRlLgorCSAqLworCXNwaW5sb2NrX3QJCWpfbGlzdF9sb2NrOworCisJLyogT3B0aW9uYWwgaW5vZGUgd2hlcmUgd2Ugc3RvcmUgdGhlIGpvdXJuYWwuICBJZiBwcmVzZW50LCBhbGwgKi8KKwkvKiBqb3VybmFsIGJsb2NrIG51bWJlcnMgYXJlIG1hcHBlZCBpbnRvIHRoaXMgaW5vZGUgdmlhICovCisJLyogYm1hcCgpLiAqLworCXN0cnVjdCBpbm9kZQkJKmpfaW5vZGU7CisKKwkvKgorCSAqIFNlcXVlbmNlIG51bWJlciBvZiB0aGUgb2xkZXN0IHRyYW5zYWN0aW9uIGluIHRoZSBsb2cgW2pfc3RhdGVfbG9ja10KKwkgKi8KKwl0aWRfdAkJCWpfdGFpbF9zZXF1ZW5jZTsKKworCS8qCisJICogU2VxdWVuY2UgbnVtYmVyIG9mIHRoZSBuZXh0IHRyYW5zYWN0aW9uIHRvIGdyYW50IFtqX3N0YXRlX2xvY2tdCisJICovCisJdGlkX3QJCQlqX3RyYW5zYWN0aW9uX3NlcXVlbmNlOworCisJLyoKKwkgKiBTZXF1ZW5jZSBudW1iZXIgb2YgdGhlIG1vc3QgcmVjZW50bHkgY29tbWl0dGVkIHRyYW5zYWN0aW9uCisJICogW2pfc3RhdGVfbG9ja10uCisJICovCisJdGlkX3QJCQlqX2NvbW1pdF9zZXF1ZW5jZTsKKworCS8qCisJICogU2VxdWVuY2UgbnVtYmVyIG9mIHRoZSBtb3N0IHJlY2VudCB0cmFuc2FjdGlvbiB3YW50aW5nIGNvbW1pdAorCSAqIFtqX3N0YXRlX2xvY2tdCisJICovCisJdGlkX3QJCQlqX2NvbW1pdF9yZXF1ZXN0OworCisJLyoKKwkgKiBKb3VybmFsIHV1aWQ6IGlkZW50aWZpZXMgdGhlIG9iamVjdCAoZmlsZXN5c3RlbSwgTFZNIHZvbHVtZSBldGMpCisJICogYmFja2VkIGJ5IHRoaXMgam91cm5hbC4gIFRoaXMgd2lsbCBldmVudHVhbGx5IGJlIHJlcGxhY2VkIGJ5IGFuIGFycmF5CisJICogb2YgdXVpZHMsIGFsbG93aW5nIHVzIHRvIGluZGV4IG11bHRpcGxlIGRldmljZXMgd2l0aGluIGEgc2luZ2xlCisJICogam91cm5hbCBhbmQgdG8gcGVyZm9ybSBhdG9taWMgdXBkYXRlcyBhY3Jvc3MgdGhlbS4KKwkgKi8KKwlfX3U4CQkJal91dWlkWzE2XTsKKworCS8qIFBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgY29tbWl0IHRocmVhZCBmb3IgdGhpcyBqb3VybmFsICovCisJc3RydWN0IHRhc2tfc3RydWN0CSpqX3Rhc2s7CisKKwkvKgorCSAqIE1heGltdW0gbnVtYmVyIG9mIG1ldGFkYXRhIGJ1ZmZlcnMgdG8gYWxsb3cgaW4gYSBzaW5nbGUgY29tcG91bmQKKwkgKiBjb21taXQgdHJhbnNhY3Rpb24KKwkgKi8KKwlpbnQJCQlqX21heF90cmFuc2FjdGlvbl9idWZmZXJzOworCisJLyoKKwkgKiBXaGF0IGlzIHRoZSBtYXhpbXVtIHRyYW5zYWN0aW9uIGxpZmV0aW1lIGJlZm9yZSB3ZSBiZWdpbiBhIGNvbW1pdD8KKwkgKi8KKwl1bnNpZ25lZCBsb25nCQlqX2NvbW1pdF9pbnRlcnZhbDsKKworCS8qIFRoZSB0aW1lciB1c2VkIHRvIHdha2V1cCB0aGUgY29tbWl0IHRocmVhZDogKi8KKwlzdHJ1Y3QgdGltZXJfbGlzdAkqal9jb21taXRfdGltZXI7CisKKwkvKgorCSAqIFRoZSByZXZva2UgdGFibGU6IG1haW50YWlucyB0aGUgbGlzdCBvZiByZXZva2VkIGJsb2NrcyBpbiB0aGUKKwkgKiBjdXJyZW50IHRyYW5zYWN0aW9uLiAgW2pfcmV2b2tlX2xvY2tdCisJICovCisJc3BpbmxvY2tfdAkJal9yZXZva2VfbG9jazsKKwlzdHJ1Y3QgamJkX3Jldm9rZV90YWJsZV9zICpqX3Jldm9rZTsKKwlzdHJ1Y3QgamJkX3Jldm9rZV90YWJsZV9zICpqX3Jldm9rZV90YWJsZVsyXTsKKworCS8qCisJICogYXJyYXkgb2YgYmhzIGZvciBqb3VybmFsX2NvbW1pdF90cmFuc2FjdGlvbgorCSAqLworCXN0cnVjdCBidWZmZXJfaGVhZAkqKmpfd2J1ZjsKKwlpbnQJCQlqX3didWZzaXplOworCisJLyoKKwkgKiBBbiBvcGFxdWUgcG9pbnRlciB0byBmcy1wcml2YXRlIGluZm9ybWF0aW9uLiAgZXh0MyBwdXRzIGl0cworCSAqIHN1cGVyYmxvY2sgcG9pbnRlciBoZXJlCisJICovCisJdm9pZCAqal9wcml2YXRlOworfTsKKworLyogCisgKiBKb3VybmFsIGZsYWcgZGVmaW5pdGlvbnMgCisgKi8KKyNkZWZpbmUgSkZTX1VOTU9VTlQJMHgwMDEJLyogSm91cm5hbCB0aHJlYWQgaXMgYmVpbmcgZGVzdHJveWVkICovCisjZGVmaW5lIEpGU19BQk9SVAkweDAwMgkvKiBKb3VybmFsaW5nIGhhcyBiZWVuIGFib3J0ZWQgZm9yIGVycm9ycy4gKi8KKyNkZWZpbmUgSkZTX0FDS19FUlIJMHgwMDQJLyogVGhlIGVycm5vIGluIHRoZSBzYiBoYXMgYmVlbiBhY2tlZCAqLworI2RlZmluZSBKRlNfRkxVU0hFRAkweDAwOAkvKiBUaGUgam91cm5hbCBzdXBlcmJsb2NrIGhhcyBiZWVuIGZsdXNoZWQgKi8KKyNkZWZpbmUgSkZTX0xPQURFRAkweDAxMAkvKiBUaGUgam91cm5hbCBzdXBlcmJsb2NrIGhhcyBiZWVuIGxvYWRlZCAqLworI2RlZmluZSBKRlNfQkFSUklFUgkweDAyMAkvKiBVc2UgSURFIGJhcnJpZXJzICovCisKKy8qIAorICogRnVuY3Rpb24gZGVjbGFyYXRpb25zIGZvciB0aGUgam91cm5hbGluZyB0cmFuc2FjdGlvbiBhbmQgYnVmZmVyCisgKiBtYW5hZ2VtZW50CisgKi8KKworLyogRmlsaW5nIGJ1ZmZlcnMgKi8KK2V4dGVybiB2b2lkIF9fam91cm5hbF90ZW1wX3VubGlua19idWZmZXIoc3RydWN0IGpvdXJuYWxfaGVhZCAqamgpOworZXh0ZXJuIHZvaWQgam91cm5hbF91bmZpbGVfYnVmZmVyKGpvdXJuYWxfdCAqLCBzdHJ1Y3Qgam91cm5hbF9oZWFkICopOworZXh0ZXJuIHZvaWQgX19qb3VybmFsX3VuZmlsZV9idWZmZXIoc3RydWN0IGpvdXJuYWxfaGVhZCAqKTsKK2V4dGVybiB2b2lkIF9fam91cm5hbF9yZWZpbGVfYnVmZmVyKHN0cnVjdCBqb3VybmFsX2hlYWQgKik7CitleHRlcm4gdm9pZCBqb3VybmFsX3JlZmlsZV9idWZmZXIoam91cm5hbF90ICosIHN0cnVjdCBqb3VybmFsX2hlYWQgKik7CitleHRlcm4gdm9pZCBfX2pvdXJuYWxfZmlsZV9idWZmZXIoc3RydWN0IGpvdXJuYWxfaGVhZCAqLCB0cmFuc2FjdGlvbl90ICosIGludCk7CitleHRlcm4gdm9pZCBfX2pvdXJuYWxfZnJlZV9idWZmZXIoc3RydWN0IGpvdXJuYWxfaGVhZCAqYmgpOworZXh0ZXJuIHZvaWQgam91cm5hbF9maWxlX2J1ZmZlcihzdHJ1Y3Qgam91cm5hbF9oZWFkICosIHRyYW5zYWN0aW9uX3QgKiwgaW50KTsKK2V4dGVybiB2b2lkIF9fam91cm5hbF9jbGVhbl9kYXRhX2xpc3QodHJhbnNhY3Rpb25fdCAqdHJhbnNhY3Rpb24pOworCisvKiBMb2cgYnVmZmVyIGFsbG9jYXRpb24gKi8KK2V4dGVybiBzdHJ1Y3Qgam91cm5hbF9oZWFkICogam91cm5hbF9nZXRfZGVzY3JpcHRvcl9idWZmZXIoam91cm5hbF90ICopOworaW50IGpvdXJuYWxfbmV4dF9sb2dfYmxvY2soam91cm5hbF90ICosIHVuc2lnbmVkIGxvbmcgKik7CisKKy8qIENvbW1pdCBtYW5hZ2VtZW50ICovCitleHRlcm4gdm9pZCBqb3VybmFsX2NvbW1pdF90cmFuc2FjdGlvbihqb3VybmFsX3QgKik7CisKKy8qIENoZWNrcG9pbnQgbGlzdCBtYW5hZ2VtZW50ICovCitpbnQgX19qb3VybmFsX2NsZWFuX2NoZWNrcG9pbnRfbGlzdChqb3VybmFsX3QgKmpvdXJuYWwpOwordm9pZCBfX2pvdXJuYWxfcmVtb3ZlX2NoZWNrcG9pbnQoc3RydWN0IGpvdXJuYWxfaGVhZCAqKTsKK3ZvaWQgX19qb3VybmFsX2luc2VydF9jaGVja3BvaW50KHN0cnVjdCBqb3VybmFsX2hlYWQgKiwgdHJhbnNhY3Rpb25fdCAqKTsKKworLyogQnVmZmVyIElPICovCitleHRlcm4gaW50IAoram91cm5hbF93cml0ZV9tZXRhZGF0YV9idWZmZXIodHJhbnNhY3Rpb25fdAkgICp0cmFuc2FjdGlvbiwKKwkJCSAgICAgIHN0cnVjdCBqb3VybmFsX2hlYWQgICpqaF9pbiwKKwkJCSAgICAgIHN0cnVjdCBqb3VybmFsX2hlYWQgKipqaF9vdXQsCisJCQkgICAgICBpbnQJCSAgIGJsb2NrbnIpOworCisvKiBUcmFuc2FjdGlvbiBsb2NraW5nICovCitleHRlcm4gdm9pZAkJX193YWl0X29uX2pvdXJuYWwgKGpvdXJuYWxfdCAqKTsKKworLyoKKyAqIEpvdXJuYWwgbG9ja2luZy4KKyAqCisgKiBXZSBuZWVkIHRvIGxvY2sgdGhlIGpvdXJuYWwgZHVyaW5nIHRyYW5zYWN0aW9uIHN0YXRlIGNoYW5nZXMgc28gdGhhdCBub2JvZHkKKyAqIGV2ZXIgdHJpZXMgdG8gdGFrZSBhIGhhbmRsZSBvbiB0aGUgcnVubmluZyB0cmFuc2FjdGlvbiB3aGlsZSB3ZSBhcmUgaW4gdGhlCisgKiBtaWRkbGUgb2YgbW92aW5nIGl0IHRvIHRoZSBjb21taXQgcGhhc2UuICBqX3N0YXRlX2xvY2sgZG9lcyB0aGlzLgorICoKKyAqIE5vdGUgdGhhdCB0aGUgbG9ja2luZyBpcyBjb21wbGV0ZWx5IGludGVycnVwdCB1bnNhZmUuICBXZSBuZXZlciB0b3VjaAorICogam91cm5hbCBzdHJ1Y3R1cmVzIGZyb20gaW50ZXJydXB0cy4KKyAqLworCitzdGF0aWMgaW5saW5lIGhhbmRsZV90ICpqb3VybmFsX2N1cnJlbnRfaGFuZGxlKHZvaWQpCit7CisJcmV0dXJuIGN1cnJlbnQtPmpvdXJuYWxfaW5mbzsKK30KKworLyogVGhlIGpvdXJuYWxpbmcgY29kZSB1c2VyIGludGVyZmFjZToKKyAqCisgKiBDcmVhdGUgYW5kIGRlc3Ryb3kgaGFuZGxlcworICogUmVnaXN0ZXIgYnVmZmVyIG1vZGlmaWNhdGlvbnMgYWdhaW5zdCB0aGUgY3VycmVudCB0cmFuc2FjdGlvbi4gCisgKi8KKworZXh0ZXJuIGhhbmRsZV90ICpqb3VybmFsX3N0YXJ0KGpvdXJuYWxfdCAqLCBpbnQgbmJsb2Nrcyk7CitleHRlcm4gaW50CSBqb3VybmFsX3Jlc3RhcnQgKGhhbmRsZV90ICosIGludCBuYmxvY2tzKTsKK2V4dGVybiBpbnQJIGpvdXJuYWxfZXh0ZW5kIChoYW5kbGVfdCAqLCBpbnQgbmJsb2Nrcyk7CitleHRlcm4gaW50CSBqb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoaGFuZGxlX3QgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICopOworZXh0ZXJuIGludAkgam91cm5hbF9nZXRfY3JlYXRlX2FjY2VzcyAoaGFuZGxlX3QgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICopOworZXh0ZXJuIGludAkgam91cm5hbF9nZXRfdW5kb19hY2Nlc3MoaGFuZGxlX3QgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICopOworZXh0ZXJuIGludAkgam91cm5hbF9kaXJ0eV9kYXRhIChoYW5kbGVfdCAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKik7CitleHRlcm4gaW50CSBqb3VybmFsX2RpcnR5X21ldGFkYXRhIChoYW5kbGVfdCAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKik7CitleHRlcm4gdm9pZAkgam91cm5hbF9yZWxlYXNlX2J1ZmZlciAoaGFuZGxlX3QgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICopOworZXh0ZXJuIGludAkgam91cm5hbF9mb3JnZXQgKGhhbmRsZV90ICosIHN0cnVjdCBidWZmZXJfaGVhZCAqKTsKK2V4dGVybiB2b2lkCSBqb3VybmFsX3N5bmNfYnVmZmVyIChzdHJ1Y3QgYnVmZmVyX2hlYWQgKik7CitleHRlcm4gaW50CSBqb3VybmFsX2ludmFsaWRhdGVwYWdlKGpvdXJuYWxfdCAqLAorCQkJCXN0cnVjdCBwYWdlICosIHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuIGludAkgam91cm5hbF90cnlfdG9fZnJlZV9idWZmZXJzKGpvdXJuYWxfdCAqLCBzdHJ1Y3QgcGFnZSAqLCBpbnQpOworZXh0ZXJuIGludAkgam91cm5hbF9zdG9wKGhhbmRsZV90ICopOworZXh0ZXJuIGludAkgam91cm5hbF9mbHVzaCAoam91cm5hbF90ICopOworZXh0ZXJuIHZvaWQJIGpvdXJuYWxfbG9ja191cGRhdGVzIChqb3VybmFsX3QgKik7CitleHRlcm4gdm9pZAkgam91cm5hbF91bmxvY2tfdXBkYXRlcyAoam91cm5hbF90ICopOworCitleHRlcm4gam91cm5hbF90ICogam91cm5hbF9pbml0X2RldihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LAorCQkJCXN0cnVjdCBibG9ja19kZXZpY2UgKmZzX2RldiwKKwkJCQlpbnQgc3RhcnQsIGludCBsZW4sIGludCBic2l6ZSk7CitleHRlcm4gam91cm5hbF90ICogam91cm5hbF9pbml0X2lub2RlIChzdHJ1Y3QgaW5vZGUgKik7CitleHRlcm4gaW50CSAgIGpvdXJuYWxfdXBkYXRlX2Zvcm1hdCAoam91cm5hbF90ICopOworZXh0ZXJuIGludAkgICBqb3VybmFsX2NoZWNrX3VzZWRfZmVhdHVyZXMgCisJCSAgIChqb3VybmFsX3QgKiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CitleHRlcm4gaW50CSAgIGpvdXJuYWxfY2hlY2tfYXZhaWxhYmxlX2ZlYXR1cmVzIAorCQkgICAoam91cm5hbF90ICosIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuIGludAkgICBqb3VybmFsX3NldF9mZWF0dXJlcyAKKwkJICAgKGpvdXJuYWxfdCAqLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKK2V4dGVybiBpbnQJICAgam91cm5hbF9jcmVhdGUgICAgIChqb3VybmFsX3QgKik7CitleHRlcm4gaW50CSAgIGpvdXJuYWxfbG9hZCAgICAgICAoam91cm5hbF90ICpqb3VybmFsKTsKK2V4dGVybiB2b2lkCSAgIGpvdXJuYWxfZGVzdHJveSAgICAoam91cm5hbF90ICopOworZXh0ZXJuIGludAkgICBqb3VybmFsX3JlY292ZXIgICAgKGpvdXJuYWxfdCAqam91cm5hbCk7CitleHRlcm4gaW50CSAgIGpvdXJuYWxfd2lwZSAgICAgICAoam91cm5hbF90ICosIGludCk7CitleHRlcm4gaW50CSAgIGpvdXJuYWxfc2tpcF9yZWNvdmVyeQkoam91cm5hbF90ICopOworZXh0ZXJuIHZvaWQJICAgam91cm5hbF91cGRhdGVfc3VwZXJibG9jawkoam91cm5hbF90ICosIGludCk7CitleHRlcm4gdm9pZAkgICBfX2pvdXJuYWxfYWJvcnRfaGFyZAkoam91cm5hbF90ICopOworZXh0ZXJuIHZvaWQJICAgX19qb3VybmFsX2Fib3J0X3NvZnQJKGpvdXJuYWxfdCAqLCBpbnQpOworZXh0ZXJuIHZvaWQJICAgam91cm5hbF9hYm9ydCAgICAgIChqb3VybmFsX3QgKiwgaW50KTsKK2V4dGVybiBpbnQJICAgam91cm5hbF9lcnJubyAgICAgIChqb3VybmFsX3QgKik7CitleHRlcm4gdm9pZAkgICBqb3VybmFsX2Fja19lcnIgICAgKGpvdXJuYWxfdCAqKTsKK2V4dGVybiBpbnQJICAgam91cm5hbF9jbGVhcl9lcnIgIChqb3VybmFsX3QgKik7CitleHRlcm4gaW50CSAgIGpvdXJuYWxfYm1hcChqb3VybmFsX3QgKiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyAqKTsKK2V4dGVybiBpbnQJICAgam91cm5hbF9mb3JjZV9jb21taXQoam91cm5hbF90ICopOworCisvKgorICogam91cm5hbF9oZWFkIG1hbmFnZW1lbnQKKyAqLworc3RydWN0IGpvdXJuYWxfaGVhZCAqam91cm5hbF9hZGRfam91cm5hbF9oZWFkKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpOworc3RydWN0IGpvdXJuYWxfaGVhZCAqam91cm5hbF9ncmFiX2pvdXJuYWxfaGVhZChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKTsKK3ZvaWQgam91cm5hbF9yZW1vdmVfam91cm5hbF9oZWFkKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpOwordm9pZCBqb3VybmFsX3B1dF9qb3VybmFsX2hlYWQoc3RydWN0IGpvdXJuYWxfaGVhZCAqamgpOworCisvKgorICogaGFuZGxlIG1hbmFnZW1lbnQKKyAqLworZXh0ZXJuIGttZW1fY2FjaGVfdCAqamJkX2hhbmRsZV9jYWNoZTsKKworc3RhdGljIGlubGluZSBoYW5kbGVfdCAqamJkX2FsbG9jX2hhbmRsZSh1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZ2ZwX2ZsYWdzKQoreworCXJldHVybiBrbWVtX2NhY2hlX2FsbG9jKGpiZF9oYW5kbGVfY2FjaGUsIGdmcF9mbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBqYmRfZnJlZV9oYW5kbGUoaGFuZGxlX3QgKmhhbmRsZSkKK3sKKwlrbWVtX2NhY2hlX2ZyZWUoamJkX2hhbmRsZV9jYWNoZSwgaGFuZGxlKTsKK30KKworLyogUHJpbWFyeSByZXZva2Ugc3VwcG9ydCAqLworI2RlZmluZSBKT1VSTkFMX1JFVk9LRV9ERUZBVUxUX0hBU0ggMjU2CitleHRlcm4gaW50CSAgIGpvdXJuYWxfaW5pdF9yZXZva2Uoam91cm5hbF90ICosIGludCk7CitleHRlcm4gdm9pZAkgICBqb3VybmFsX2Rlc3Ryb3lfcmV2b2tlX2NhY2hlcyh2b2lkKTsKK2V4dGVybiBpbnQJICAgam91cm5hbF9pbml0X3Jldm9rZV9jYWNoZXModm9pZCk7CisKK2V4dGVybiB2b2lkCSAgIGpvdXJuYWxfZGVzdHJveV9yZXZva2Uoam91cm5hbF90ICopOworZXh0ZXJuIGludAkgICBqb3VybmFsX3Jldm9rZSAoaGFuZGxlX3QgKiwKKwkJCQl1bnNpZ25lZCBsb25nLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKik7CitleHRlcm4gaW50CSAgIGpvdXJuYWxfY2FuY2VsX3Jldm9rZShoYW5kbGVfdCAqLCBzdHJ1Y3Qgam91cm5hbF9oZWFkICopOworZXh0ZXJuIHZvaWQJICAgam91cm5hbF93cml0ZV9yZXZva2VfcmVjb3Jkcyhqb3VybmFsX3QgKiwgdHJhbnNhY3Rpb25fdCAqKTsKKworLyogUmVjb3ZlcnkgcmV2b2tlIHN1cHBvcnQgKi8KK2V4dGVybiBpbnQJam91cm5hbF9zZXRfcmV2b2tlKGpvdXJuYWxfdCAqLCB1bnNpZ25lZCBsb25nLCB0aWRfdCk7CitleHRlcm4gaW50CWpvdXJuYWxfdGVzdF9yZXZva2Uoam91cm5hbF90ICosIHVuc2lnbmVkIGxvbmcsIHRpZF90KTsKK2V4dGVybiB2b2lkCWpvdXJuYWxfY2xlYXJfcmV2b2tlKGpvdXJuYWxfdCAqKTsKK2V4dGVybiB2b2lkCWpvdXJuYWxfYnJlbHNlX2FycmF5KHN0cnVjdCBidWZmZXJfaGVhZCAqYltdLCBpbnQgbik7CitleHRlcm4gdm9pZAlqb3VybmFsX3N3aXRjaF9yZXZva2VfdGFibGUoam91cm5hbF90ICpqb3VybmFsKTsKKworLyoKKyAqIFRoZSBsb2cgdGhyZWFkIHVzZXIgaW50ZXJmYWNlOgorICoKKyAqIFJlcXVlc3Qgc3BhY2UgaW4gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24sIGFuZCBmb3JjZSB0cmFuc2FjdGlvbiBjb21taXQKKyAqIHRyYW5zaXRpb25zIG9uIGRlbWFuZC4KKyAqLworCitpbnQgX19sb2dfc3BhY2VfbGVmdChqb3VybmFsX3QgKik7IC8qIENhbGxlZCB3aXRoIGpvdXJuYWwgbG9ja2VkICovCitpbnQgbG9nX3N0YXJ0X2NvbW1pdChqb3VybmFsX3QgKmpvdXJuYWwsIHRpZF90IHRpZCk7CitpbnQgX19sb2dfc3RhcnRfY29tbWl0KGpvdXJuYWxfdCAqam91cm5hbCwgdGlkX3QgdGlkKTsKK2ludCBqb3VybmFsX3N0YXJ0X2NvbW1pdChqb3VybmFsX3QgKmpvdXJuYWwsIHRpZF90ICp0aWQpOworaW50IGpvdXJuYWxfZm9yY2VfY29tbWl0X25lc3RlZChqb3VybmFsX3QgKmpvdXJuYWwpOworaW50IGxvZ193YWl0X2NvbW1pdChqb3VybmFsX3QgKmpvdXJuYWwsIHRpZF90IHRpZCk7CitpbnQgbG9nX2RvX2NoZWNrcG9pbnQoam91cm5hbF90ICpqb3VybmFsKTsKKwordm9pZCBfX2xvZ193YWl0X2Zvcl9zcGFjZShqb3VybmFsX3QgKmpvdXJuYWwpOworZXh0ZXJuIHZvaWQJX19qb3VybmFsX2Ryb3BfdHJhbnNhY3Rpb24oam91cm5hbF90ICosIHRyYW5zYWN0aW9uX3QgKik7CitleHRlcm4gaW50CWNsZWFudXBfam91cm5hbF90YWlsKGpvdXJuYWxfdCAqKTsKKworLyogRGVidWdnaW5nIGNvZGUgb25seTogKi8KKworI2RlZmluZSBqYmRfRU5PU1lTKCkgXAorZG8gewkJCQkJCQkJICAgICAgICAgICBcCisJcHJpbnRrIChLRVJOX0VSUiAiSkJEIHVuaW1wbGVtZW50ZWQgZnVuY3Rpb24gJXNcbiIsIF9fRlVOQ1RJT05fXyk7IFwKKwljdXJyZW50LT5zdGF0ZSA9IFRBU0tfVU5JTlRFUlJVUFRJQkxFOwkJCSAgICAgICAgICAgXAorCXNjaGVkdWxlKCk7CQkJCQkJICAgICAgICAgICBcCit9IHdoaWxlICgxKQorCisvKgorICogaXNfam91cm5hbF9hYm9ydAorICoKKyAqIFNpbXBsZSB0ZXN0IHdyYXBwZXIgZnVuY3Rpb24gdG8gdGVzdCB0aGUgSkZTX0FCT1JUIHN0YXRlIGZsYWcuICBUaGlzCisgKiBiaXQsIHdoZW4gc2V0LCBpbmRpY2F0ZXMgdGhhdCB3ZSBoYXZlIGhhZCBhIGZhdGFsIGVycm9yIHNvbWV3aGVyZSwKKyAqIGVpdGhlciBpbnNpZGUgdGhlIGpvdXJuYWxpbmcgbGF5ZXIgb3IgaW5kaWNhdGVkIHRvIHVzIGJ5IHRoZSBjbGllbnQKKyAqIChlZy4gZXh0MyksIGFuZCB0aGF0IHdlIGFuZCBzaG91bGQgbm90IGNvbW1pdCBhbnkgZnVydGhlcgorICogdHJhbnNhY3Rpb25zLiAgCisgKi8KKworc3RhdGljIGlubGluZSBpbnQgaXNfam91cm5hbF9hYm9ydGVkKGpvdXJuYWxfdCAqam91cm5hbCkKK3sKKwlyZXR1cm4gam91cm5hbC0+al9mbGFncyAmIEpGU19BQk9SVDsKK30KKworc3RhdGljIGlubGluZSBpbnQgaXNfaGFuZGxlX2Fib3J0ZWQoaGFuZGxlX3QgKmhhbmRsZSkKK3sKKwlpZiAoaGFuZGxlLT5oX2Fib3J0ZWQpCisJCXJldHVybiAxOworCXJldHVybiBpc19qb3VybmFsX2Fib3J0ZWQoaGFuZGxlLT5oX3RyYW5zYWN0aW9uLT50X2pvdXJuYWwpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgam91cm5hbF9hYm9ydF9oYW5kbGUoaGFuZGxlX3QgKmhhbmRsZSkKK3sKKwloYW5kbGUtPmhfYWJvcnRlZCA9IDE7Cit9CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICAgKi8KKworLyogQ29tcGFyaXNvbiBmdW5jdGlvbnMgZm9yIHRyYW5zYWN0aW9uIElEczogcGVyZm9ybSBjb21wYXJpc29ucyB1c2luZworICogbW9kdWxvIGFyaXRobWV0aWMgc28gdGhhdCB0aGV5IHdvcmsgb3ZlciBzZXF1ZW5jZSBudW1iZXIgd3JhcHMuICovCisKK3N0YXRpYyBpbmxpbmUgaW50IHRpZF9ndCh0aWRfdCB4LCB0aWRfdCB5KQoreworCWludCBkaWZmZXJlbmNlID0gKHggLSB5KTsKKwlyZXR1cm4gKGRpZmZlcmVuY2UgPiAwKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgdGlkX2dlcSh0aWRfdCB4LCB0aWRfdCB5KQoreworCWludCBkaWZmZXJlbmNlID0gKHggLSB5KTsKKwlyZXR1cm4gKGRpZmZlcmVuY2UgPj0gMCk7Cit9CisKK2V4dGVybiBpbnQgam91cm5hbF9ibG9ja3NfcGVyX3BhZ2Uoc3RydWN0IGlub2RlICppbm9kZSk7CisKKy8qCisgKiBSZXR1cm4gdGhlIG1pbmltdW0gbnVtYmVyIG9mIGJsb2NrcyB3aGljaCBtdXN0IGJlIGZyZWUgaW4gdGhlIGpvdXJuYWwKKyAqIGJlZm9yZSBhIG5ldyB0cmFuc2FjdGlvbiBtYXkgYmUgc3RhcnRlZC4gIE11c3QgYmUgY2FsbGVkIHVuZGVyIGpfc3RhdGVfbG9jay4KKyAqLworc3RhdGljIGlubGluZSBpbnQgamJkX3NwYWNlX25lZWRlZChqb3VybmFsX3QgKmpvdXJuYWwpCit7CisJaW50IG5ibG9ja3MgPSBqb3VybmFsLT5qX21heF90cmFuc2FjdGlvbl9idWZmZXJzOworCWlmIChqb3VybmFsLT5qX2NvbW1pdHRpbmdfdHJhbnNhY3Rpb24pCisJCW5ibG9ja3MgKz0gam91cm5hbC0+al9jb21taXR0aW5nX3RyYW5zYWN0aW9uLT4KKwkJCQkJdF9vdXRzdGFuZGluZ19jcmVkaXRzOworCXJldHVybiBuYmxvY2tzOworfQorCisvKgorICogRGVmaW5pdGlvbnMgd2hpY2ggYXVnbWVudCB0aGUgYnVmZmVyX2hlYWQgbGF5ZXIKKyAqLworCisvKiBqb3VybmFsaW5nIGJ1ZmZlciB0eXBlcyAqLworI2RlZmluZSBCSl9Ob25lCQkwCS8qIE5vdCBqb3VybmFsZWQgKi8KKyNkZWZpbmUgQkpfU3luY0RhdGEJMQkvKiBOb3JtYWwgZGF0YTogZmx1c2ggYmVmb3JlIGNvbW1pdCAqLworI2RlZmluZSBCSl9NZXRhZGF0YQkyCS8qIE5vcm1hbCBqb3VybmFsZWQgbWV0YWRhdGEgKi8KKyNkZWZpbmUgQkpfRm9yZ2V0CTMJLyogQnVmZmVyIHN1cGVyc2VkZWQgYnkgdGhpcyB0cmFuc2FjdGlvbiAqLworI2RlZmluZSBCSl9JTwkJNAkvKiBCdWZmZXIgaXMgZm9yIHRlbXBvcmFyeSBJTyB1c2UgKi8KKyNkZWZpbmUgQkpfU2hhZG93CTUJLyogQnVmZmVyIGNvbnRlbnRzIGJlaW5nIHNoYWRvd2VkIHRvIHRoZSBsb2cgKi8KKyNkZWZpbmUgQkpfTG9nQ3RsCTYJLyogQnVmZmVyIGNvbnRhaW5zIGxvZyBkZXNjcmlwdG9ycyAqLworI2RlZmluZSBCSl9SZXNlcnZlZAk3CS8qIEJ1ZmZlciBpcyByZXNlcnZlZCBmb3IgYWNjZXNzIGJ5IGpvdXJuYWwgKi8KKyNkZWZpbmUgQkpfTG9ja2VkCTgJLyogTG9ja2VkIGZvciBJL08gZHVyaW5nIGNvbW1pdCAqLworI2RlZmluZSBCSl9UeXBlcwk5CisgCitleHRlcm4gaW50IGpiZF9ibG9ja3NfcGVyX3BhZ2Uoc3RydWN0IGlub2RlICppbm9kZSk7CisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNkZWZpbmUgYnVmZmVyX3RyYWNlX2luaXQoYmgpCWRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBwcmludF9idWZmZXJfZmllbGRzKGJoKQlkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgcHJpbnRfYnVmZmVyX3RyYWNlKGJoKQlkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgQlVGRkVSX1RSQUNFKGJoLCBpbmZvKQlkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgQlVGRkVSX1RSQUNFMihiaCwgYmgyLCBpbmZvKQlkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgSkJVRkZFUl9UUkFDRShqaCwgaW5mbykJZG8ge30gd2hpbGUgKDApCisKKyNlbmRpZgkvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZgkvKiBDT05GSUdfSkJEIHx8IENPTkZJR19KQkRfTU9EVUxFIHx8ICFfX0tFUk5FTF9fICovCisKKy8qCisgKiBDb21wYXRpYmlsaXR5IG5vLW9wcyB3aGljaCBhbGxvdyB0aGUga2VybmVsIHRvIGNvbXBpbGUgd2l0aG91dCBDT05GSUdfSkJECisgKiBnbyBoZXJlLgorICovCisKKyNpZiBkZWZpbmVkKF9fS0VSTkVMX18pICYmICEoZGVmaW5lZChDT05GSUdfSkJEKSB8fCBkZWZpbmVkKENPTkZJR19KQkRfTU9EVUxFKSkKKworI2RlZmluZSBKX0FTU0VSVChleHByKQkJCWRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBKX0FTU0VSVF9CSChiaCwgZXhwcikJCWRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBidWZmZXJfamJkKGJoKQkJCTAKKyNkZWZpbmUgam91cm5hbF9idWZmZXJfam91cm5hbF9scnUoYmgpCTAKKworI2VuZGlmCS8qIGRlZmluZWQoX19LRVJORUxfXykgJiYgIWRlZmluZWQoQ09ORklHX0pCRCkgKi8KKyNlbmRpZgkvKiBfTElOVVhfSkJEX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvamZmcy5oIGIvaW5jbHVkZS9saW51eC9qZmZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTIyMTMyMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvamZmcy5oCkBAIC0wLDAgKzEsMjI0IEBACisvKgorICogSkZGUyAtLSBKb3VybmFsbGluZyBGbGFzaCBGaWxlIFN5c3RlbSwgTGludXggaW1wbGVtZW50YXRpb24uCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwICBBeGlzIENvbW11bmljYXRpb25zIEFCLgorICoKKyAqIENyZWF0ZWQgYnkgRmlubiBIYWthbnNzb24gPGZpbm5AYXhpcy5jb20+LgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICRJZDogamZmcy5oLHYgMS4yMCAyMDAxLzA5LzE4IDIxOjMzOjM3IGR3bXcyIEV4cCAkCisgKgorICogUG9ydGVkIHRvIExpbnV4IDIuMy54IGFuZCBNVEQ6CisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgIEFsZXhhbmRlciBMYXJzc29uIChhbGV4QGNlbmRpby5zZSksIENlbmRpbyBTeXN0ZW1zIEFCCisgKgorICovCisKKyNpZm5kZWYgX19MSU5VWF9KRkZTX0hfXworI2RlZmluZSBfX0xJTlVYX0pGRlNfSF9fCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKworI2RlZmluZSBKRkZTX1ZFUlNJT05fU1RSSU5HICIxLjAiCisKKy8qIFRoaXMgaXMgYSBtYWdpYyBudW1iZXIgdGhhdCBpcyB1c2VkIGFzIGFuIGlkZW50aWZpY2F0aW9uIG51bWJlciBmb3IKKyAgIHRoaXMgZmlsZSBzeXN0ZW0uICBJdCBpcyB3cml0dGVuIHRvIHRoZSBzdXBlcl9ibG9jayBzdHJ1Y3R1cmUuICAqLworI2RlZmluZSBKRkZTX01BR0lDX1NCX0JJVE1BU0sgMHgwN2MwICAvKiAxOTg0ICovCisKKy8qIFRoaXMgaXMgYSBtYWdpYyBudW1iZXIgdGhhdCBldmVyeSBvbi1mbGFzaCByYXcgaW5vZGUgYmVnaW5zIHdpdGguICAqLworI2RlZmluZSBKRkZTX01BR0lDX0JJVE1BU0sgMHgzNDM4MzkzMSAvKiAiMTk4NCIgKi8KKworLyogVGhlc2UgdHdvIGJpdG1hc2tzIGFyZSB0aGUgdmFsaWQgb25lcyBmb3IgdGhlIGZsYXNoIG1lbW9yaWVzIHdlIGhhdmUKKyAgIGZvciB0aGUgbW9tZW50LiAgKi8KKyNkZWZpbmUgSkZGU19FTVBUWV9CSVRNQVNLIDB4ZmZmZmZmZmYKKyNkZWZpbmUgSkZGU19ESVJUWV9CSVRNQVNLIDB4MDAwMDAwMDAKKworLyogVGhpcyBpcyB0aGUgaW5vZGUgbnVtYmVyIG9mIHRoZSByb290IG5vZGUuICAqLworI2RlZmluZSBKRkZTX01JTl9JTk8gMQorCisvKiBIb3cgbWFueSBzbG90cyBpbiB0aGUgZmlsZSBoYXNoIHRhYmxlIHNob3VsZCB3ZSBoYXZlPyAgKi8KKyNkZWZpbmUgSkZGU19IQVNIX1NJWkUgNDAKKworLyogRG9uJ3QgdXNlIG1vcmUgdGhhbiAyNTQgYnl0ZXMgYXMgdGhlIG1heGltdW0gYWxsb3dlZCBsZW5ndGggb2YgYSBmaWxlJ3MKKyAgIG5hbWUgZHVlIHRvIGVycm9ycyB0aGF0IGNvdWxkIG9jY3VyIGR1cmluZyB0aGUgc2Nhbm5pbmcgb2YgdGhlIGZsYXNoCisgICBtZW1vcnkuIEluIGZhY3QsIGEgbmFtZSBsZW5ndGggb2YgMjU1IG9yIDB4ZmYsIGNvdWxkIGJlIHRoZSByZXN1bHQgb2YKKyAgIGFuIHVuY29tcGxldGVkIHdyaXRlLiAgRm9yIGluc3RhbmNlLCBpZiBhIHJhdyBpbm9kZSBpcyB3cml0dGVuIHRvIHRoZQorICAgZmxhc2ggbWVtb3J5IGFuZCB0aGVyZSBpcyBhIHBvd2VyIGxvc3NhZ2UganVzdCBiZWZvcmUgdGhlIGxlbmd0aCBvZgorICAgdGhlIG5hbWUgaXMgd3JpdHRlbiwgdGhlIGxlbmd0aCAyNTUgd291bGQgYmUgaW50ZXJwcmV0ZWQgYXMgYW4gaWxsZWdhbAorICAgdmFsdWUuICAqLworI2RlZmluZSBKRkZTX01BWF9OQU1FX0xFTiAyNTQKKworLyogQ29tbWFuZHMgZm9yIGlvY3RsKCkuICAqLworI2RlZmluZSBKRkZTX0lPQ1RMX01BR0lDICd0JworI2RlZmluZSBKRkZTX1BSSU5UX0hBU0ggX0lPKEpGRlNfSU9DVExfTUFHSUMsIDkwKQorI2RlZmluZSBKRkZTX1BSSU5UX1RSRUUgX0lPKEpGRlNfSU9DVExfTUFHSUMsIDkxKQorI2RlZmluZSBKRkZTX0dFVF9TVEFUVVMgX0lPKEpGRlNfSU9DVExfTUFHSUMsIDkyKQorCisvKiBYWFg6IFRoaXMgaXMgc29tZXRoaW5nIHRoYXQgd2Ugc2hvdWxkIHRyeSB0byBnZXQgcmlkIG9mIGluIHRoZSBmdXR1cmUuICAqLworI2RlZmluZSBKRkZTX01PRElGWV9JTk9ERSAweDAxCisjZGVmaW5lIEpGRlNfTU9ESUZZX05BTUUgIDB4MDIKKyNkZWZpbmUgSkZGU19NT0RJRllfREFUQSAgMHgwNAorI2RlZmluZSBKRkZTX01PRElGWV9FWElTVCAweDA4CisKK3N0cnVjdCBqZmZzX2NvbnRyb2w7CisKKy8qIFRoZSBKRkZTIHJhdyBpbm9kZSBzdHJ1Y3R1cmU6IFVzZWQgZm9yIHN0b3JhZ2Ugb24gcGh5c2ljYWwgbWVkaWEuICAqLworLyogUGVyaGFwcyB0aGUgdWlkLCBnaWQsIGF0aW1lLCBtdGltZSBhbmQgY3RpbWUgbWVtYmVycyBzaG91bGQgaGF2ZQorICAgbW9yZSBzcGFjZSBkdWUgdG8gZnV0dXJlIGNoYW5nZXMgaW4gdGhlIExpbnV4IGtlcm5lbC4gQW55aG93LCBzaW5jZQorICAgYSB1c2VyIG9mIHRoaXMgZmlsZXN5c3RlbSBwcm9iYWJseSBoYXZlIHRvIGZpeCBhIGxhcmdlIG51bWJlciBvZgorICAgb3RoZXIgdGhpbmdzLCB3ZSBoYXZlIGRlY2lkZWQgdG8gbm90IGJlIGZvcndhcmQgY29tcGF0aWJsZS4gICovCitzdHJ1Y3QgamZmc19yYXdfaW5vZGUKK3sKKwlfX3UzMiBtYWdpYzsgICAgICAvKiBBIGNvbnN0YW50IG1hZ2ljIG51bWJlci4gICovCisJX191MzIgaW5vOyAgICAgICAgLyogSW5vZGUgbnVtYmVyLiAgKi8KKwlfX3UzMiBwaW5vOyAgICAgICAvKiBQYXJlbnQncyBpbm9kZSBudW1iZXIuICAqLworCV9fdTMyIHZlcnNpb247ICAgIC8qIFZlcnNpb24gbnVtYmVyLiAgKi8KKwlfX3UzMiBtb2RlOyAgICAgICAvKiBUaGUgZmlsZSdzIHR5cGUgb3IgbW9kZS4gICovCisJX191MTYgdWlkOyAgICAgICAgLyogVGhlIGZpbGUncyBvd25lci4gICovCisJX191MTYgZ2lkOyAgICAgICAgLyogVGhlIGZpbGUncyBncm91cC4gICovCisJX191MzIgYXRpbWU7ICAgICAgLyogTGFzdCBhY2Nlc3MgdGltZS4gICovCisJX191MzIgbXRpbWU7ICAgICAgLyogTGFzdCBtb2RpZmljYXRpb24gdGltZS4gICovCisJX191MzIgY3RpbWU7ICAgICAgLyogQ3JlYXRpb24gdGltZS4gICovCisJX191MzIgb2Zmc2V0OyAgICAgLyogV2hlcmUgdG8gYmVnaW4gdG8gd3JpdGUuICAqLworCV9fdTMyIGRzaXplOyAgICAgIC8qIFNpemUgb2YgdGhlIG5vZGUncyBkYXRhLiAgKi8KKwlfX3UzMiByc2l6ZTsgICAgICAvKiBIb3cgbXVjaCBhcmUgZ29pbmcgdG8gYmUgcmVwbGFjZWQ/ICAqLworCV9fdTggbnNpemU7ICAgICAgIC8qIE5hbWUgbGVuZ3RoLiAgKi8KKwlfX3U4IG5saW5rOyAgICAgICAvKiBOdW1iZXIgb2YgbGlua3MuICAqLworCV9fdTggc3BhcmUgOiA2OyAgIC8qIEZvciBmdXR1cmUgdXNlLiAgKi8KKwlfX3U4IHJlbmFtZSA6IDE7ICAvKiBSZW5hbWUgdG8gYSBuYW1lIG9mIGFuIGFscmVhZHkgZXhpc3RpbmcgZmlsZT8gICovCisJX191OCBkZWxldGVkIDogMTsgLyogSGFzIHRoaXMgZmlsZSBiZWVuIGRlbGV0ZWQ/ICAqLworCV9fdTggYWNjdXJhdGU7ICAgIC8qIFRoZSBpbm9kZSBpcyBvYnNvbGV0ZSBpZiBhY2N1cmF0ZSA9PSAwLiAgKi8KKwlfX3UzMiBkY2hrc3VtOyAgICAvKiBDaGVja3N1bSBmb3IgdGhlIGRhdGEuICAqLworCV9fdTE2IG5jaGtzdW07ICAgIC8qIENoZWNrc3VtIGZvciB0aGUgbmFtZS4gICovCisJX191MTYgY2hrc3VtOyAgICAgLyogQ2hlY2tzdW0gZm9yIHRoZSByYXcgaW5vZGUuICAqLworfTsKKworLyogRGVmaW5lIHRoZSBvZmZzZXQgb2YgdGhlIGFjY3VyYXRlIGJ5dGUgaW4gc3RydWN0IGpmZnNfcmF3X2lub2RlLiAgKi8KKyNkZWZpbmUgSkZGU19SQVdfSU5PREVfQUNDVVJBVEVfT0ZGU0VUIChzaXplb2Yoc3RydWN0IGpmZnNfcmF3X2lub2RlKSBcCisJCQkJCS0gMiAqIHNpemVvZihfX3UzMikgLSBzaXplb2YoX191OCkpCisKKy8qIERlZmluZSB0aGUgb2Zmc2V0IG9mIHRoZSBjaGtzdW0gbWVtYmVyIGluIHN0cnVjdCBqZmZzX3Jhd19pbm9kZS4gICovCisjZGVmaW5lIEpGRlNfUkFXX0lOT0RFX0NIS1NVTV9PRkZTRVQgKHNpemVvZihzdHJ1Y3QgamZmc19yYXdfaW5vZGUpIFwKKwkJCQkgICAgICAtIHNpemVvZihfX3UxNikpCisKKy8qIERlZmluZSB0aGUgb2Zmc2V0IG9mIHRoZSBkY2hrc3VtIG1lbWJlciBpbiBzdHJ1Y3QgamZmc19yYXdfaW5vZGUuICAqLworI2RlZmluZSBKRkZTX1JBV19JTk9ERV9EQ0hLU1VNX09GRlNFVCAoc2l6ZW9mKHN0cnVjdCBqZmZzX3Jhd19pbm9kZSkgICBcCisJCQkJICAgICAgIC0gc2l6ZW9mKF9fdTE2KSAtIHNpemVvZihfX3UxNikgXAorCQkJCSAgICAgICAtIHNpemVvZihfX3UzMikpCisKKworLyogVGhlIFJBTSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZS4gIFRoZSBuYW1lcyBvZiBwb2ludGVycyB0bworICAgamZmc19ub2RlcyBhcmUgdmVyeSBvZnRlbiBqdXN0IGNhbGxlZCBgbicgaW4gdGhlIHNvdXJjZSBjb2RlLiAgKi8KK3N0cnVjdCBqZmZzX25vZGUKK3sKKwlfX3UzMiBpbm87ICAgICAgICAgIC8qIElub2RlIG51bWJlci4gICovCisJX191MzIgdmVyc2lvbjsgICAgICAvKiBWZXJzaW9uIG51bWJlci4gICovCisJX191MzIgZGF0YV9vZmZzZXQ7ICAvKiBMb2dpYyBsb2NhdGlvbiBvZiB0aGUgZGF0YSB0byBpbnNlcnQuICAqLworCV9fdTMyIGRhdGFfc2l6ZTsgICAgLyogVGhlIGFtb3VudCBvZiBkYXRhIHRoaXMgbm9kZSBpbnNlcnRzLiAgKi8KKwlfX3UzMiByZW1vdmVkX3NpemU7IC8qIFRoZSBhbW91bnQgb2YgZGF0YSB0aGF0IHRoaXMgbm9kZSByZW1vdmVzLiAgKi8KKwlfX3UzMiBmbV9vZmZzZXQ7ICAgIC8qIFBoeXNpY2FsIGxvY2F0aW9uIG9mIHRoZSBkYXRhIGluIHRoZSBhY3R1YWwKKwkJCSAgICAgICBmbGFzaCBtZW1vcnkgZGF0YSBjaHVuay4gICovCisJX191OCBuYW1lX3NpemU7ICAgICAvKiBTaXplIG9mIHRoZSBuYW1lLiAgKi8KKwlzdHJ1Y3QgamZmc19mbSAqZm07IC8qIFBoeXNpY2FsIG1lbW9yeSBpbmZvcm1hdGlvbi4gICovCisJc3RydWN0IGpmZnNfbm9kZSAqdmVyc2lvbl9wcmV2OworCXN0cnVjdCBqZmZzX25vZGUgKnZlcnNpb25fbmV4dDsKKwlzdHJ1Y3QgamZmc19ub2RlICpyYW5nZV9wcmV2OworCXN0cnVjdCBqZmZzX25vZGUgKnJhbmdlX25leHQ7Cit9OworCisKKy8qIFRoZSBSQU0gcmVwcmVzZW50YXRpb24gb2YgYSBmaWxlIChwbGFpbiBmaWxlcywgZGlyZWN0b3JpZXMsCisgICBsaW5rcywgZXRjLikuICBQb2ludGVycyB0byBqZmZzX2ZpbGVzIGFyZSBub3JtYWxseSBuYW1lZCBgZicKKyAgIGluIHRoZSBKRkZTIHNvdXJjZSBjb2RlLiAgKi8KK3N0cnVjdCBqZmZzX2ZpbGUKK3sKKwlfX3UzMiBpbm87ICAgIC8qIElub2RlIG51bWJlci4gICovCisJX191MzIgcGlubzsgICAvKiBQYXJlbnQncyBpbm9kZSBudW1iZXIuICAqLworCV9fdTMyIG1vZGU7ICAgLyogZmlsZV90eXBlLCBtb2RlICAqLworCV9fdTE2IHVpZDsgICAgLyogb3duZXIgICovCisJX191MTYgZ2lkOyAgICAvKiBncm91cCAgKi8KKwlfX3UzMiBhdGltZTsgIC8qIExhc3QgYWNjZXNzIHRpbWUuICAqLworCV9fdTMyIG10aW1lOyAgLyogTGFzdCBtb2RpZmljYXRpb24gdGltZS4gICovCisJX191MzIgY3RpbWU7ICAvKiBDcmVhdGlvbiB0aW1lLiAgKi8KKwlfX3U4IG5zaXplOyAgIC8qIE5hbWUgbGVuZ3RoLiAgKi8KKwlfX3U4IG5saW5rOyAgIC8qIE51bWJlciBvZiBsaW5rcy4gICovCisJX191OCBkZWxldGVkOyAvKiBIYXMgdGhpcyBmaWxlIGJlZW4gZGVsZXRlZD8gICovCisJY2hhciAqbmFtZTsgICAvKiBUaGUgbmFtZSBvZiB0aGlzIGZpbGU7IE5VTEwtdGVybWluYXRlZC4gICovCisJX191MzIgc2l6ZTsgICAvKiBUaGUgdG90YWwgc2l6ZSBvZiB0aGUgZmlsZSdzIGRhdGEuICAqLworCV9fdTMyIGhpZ2hlc3RfdmVyc2lvbjsgLyogVGhlIGhpZ2hlc3QgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBmaWxlLiAgKi8KKwlzdHJ1Y3QgamZmc19jb250cm9sICpjOworCXN0cnVjdCBqZmZzX2ZpbGUgKnBhcmVudDsgICAvKiBSZWZlcmVuY2UgdG8gdGhlIHBhcmVudCBkaXJlY3RvcnkuICAqLworCXN0cnVjdCBqZmZzX2ZpbGUgKmNoaWxkcmVuOyAvKiBBbHdheXMgTlVMTCBmb3IgcGxhaW4gZmlsZXMuICAqLworCXN0cnVjdCBqZmZzX2ZpbGUgKnNpYmxpbmdfcHJldjsgLyogU2libGluZ3MgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LiAgKi8KKwlzdHJ1Y3QgamZmc19maWxlICpzaWJsaW5nX25leHQ7CisJc3RydWN0IGxpc3RfaGVhZCBoYXNoOyAgICAvKiBoYXNoIGxpc3QuICAqLworCXN0cnVjdCBqZmZzX25vZGUgKnJhbmdlX2hlYWQ7ICAgLyogVGhlIGZpbmFsIGRhdGEuICAqLworCXN0cnVjdCBqZmZzX25vZGUgKnJhbmdlX3RhaWw7ICAgLyogVGhlIGZpcnN0IGRhdGEuICAqLworCXN0cnVjdCBqZmZzX25vZGUgKnZlcnNpb25faGVhZDsgLyogVGhlIHlvdW5nZXN0IG5vZGUuICAqLworCXN0cnVjdCBqZmZzX25vZGUgKnZlcnNpb25fdGFpbDsgLyogVGhlIG9sZGVzdCBub2RlLiAgKi8KK307CisKKworLyogVGhpcyBpcyBqdXN0IGEgZGVmaW5pdGlvbiBvZiBhIHNpbXBsZSBsaXN0IHVzZWQgZm9yIGtlZXBpbmcgdHJhY2sgb2YKKyAgIGZpbGVzIGRlbGV0ZWQgZHVlIHRvIGEgcmVuYW1lLiAgVGhpcyBsaXN0IGlzIG9ubHkgdXNlZCBkdXJpbmcgdGhlCisgICBtb3VudGluZyBvZiB0aGUgZmlsZSBzeXN0ZW0gYW5kIG9ubHkgaWYgdGhlcmUgaGF2ZSBiZWVuIHJlbmFtZSBvcGVyYXRpb25zCisgICBlYXJsaWVyLiAgKi8KK3N0cnVjdCBqZmZzX2RlbGV0ZV9saXN0Cit7CisJX191MzIgaW5vOworCXN0cnVjdCBqZmZzX2RlbGV0ZV9saXN0ICpuZXh0OworfTsKKworCisvKiBBIHN0cnVjdCBmb3IgdGhlIG92ZXJhbGwgZmlsZSBzeXN0ZW0gY29udHJvbC4gIFBvaW50ZXJzIHRvCisgICBqZmZzX2NvbnRyb2wgc3RydWN0cyBhcmUgbmFtZWQgYGMnIGluIHRoZSBzb3VyY2UgY29kZS4gICovCitzdHJ1Y3QgamZmc19jb250cm9sCit7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYjsJCS8qIFJlZmVyZW5jZSB0byB0aGUgVkZTIHN1cGVyIGJsb2NrLiAgKi8KKwlzdHJ1Y3QgamZmc19maWxlICpyb290OwkJLyogVGhlIHJvb3QgZGlyZWN0b3J5IGZpbGUuICAqLworCXN0cnVjdCBsaXN0X2hlYWQgKmhhc2g7CQkvKiBIYXNoIHRhYmxlIGZvciBmaW5kaW5nIGZpbGVzIGJ5IGluby4gICovCisJc3RydWN0IGpmZnNfZm1jb250cm9sICpmbWM7CS8qIEZsYXNoIG1lbW9yeSBjb250cm9sIHN0cnVjdHVyZS4gICovCisJX191MzIgaGFzaF9sZW47CQkJLyogVGhlIHNpemUgb2YgdGhlIGhhc2ggdGFibGUuICAqLworCV9fdTMyIG5leHRfaW5vOwkJCS8qIE5leHQgaW5vZGUgbnVtYmVyIHRvIHVzZSBmb3IgbmV3IGZpbGVzLiAgKi8KKwlfX3UxNiBidWlsZGluZ19mczsJCS8qIElzIHRoZSBmaWxlIHN5c3RlbSBiZWluZyBidWlsdCByaWdodCBub3c/ICAqLworCXN0cnVjdCBqZmZzX2RlbGV0ZV9saXN0ICpkZWxldGVfbGlzdDsgLyogVHJhY2sgZGVsZXRlZCBmaWxlcy4gICovCisJcGlkX3QgdGhyZWFkX3BpZDsJCS8qIEdDIHRocmVhZCdzIFBJRCAqLworCXN0cnVjdCB0YXNrX3N0cnVjdCAqZ2NfdGFzazsJLyogR0MgdGFzayBzdHJ1Y3QgKi8KKwlzdHJ1Y3QgY29tcGxldGlvbiBnY190aHJlYWRfY29tcDsgLyogR0MgdGhyZWFkIGV4aXQgbXV0ZXggKi8KKwlfX3UzMiBnY19taW5mcmVlX3RocmVzaG9sZDsJLyogR0MgdHJpZ2dlciB0aHJlc2hvbGRzICovCisJX191MzIgZ2NfbWF4ZGlydHlfdGhyZXNob2xkOworfTsKKworCisvKiBVc2VkIHRvIGluZm9ybSBhYm91dCBmbGFzaCBzdGF0dXMuICAqLworc3RydWN0IGpmZnNfZmxhc2hfc3RhdHVzCit7CisJX191MzIgc2l6ZTsKKwlfX3UzMiB1c2VkOworCV9fdTMyIGRpcnR5OworCV9fdTMyIGJlZ2luOworCV9fdTMyIGVuZDsKK307CisKKy8qIFRoaXMgc3R1ZmYgY291bGQgYmUgdXNlZCBmb3IgZmluZGluZyBtZW1vcnkgbGVha3MuICAqLworI2RlZmluZSBKRkZTX01FTU9SWV9ERUJVRyAwCisKK2V4dGVybiBsb25nIG5vX2pmZnNfbm9kZTsKKyNpZiBkZWZpbmVkKEpGRlNfTUVNT1JZX0RFQlVHKSAmJiBKRkZTX01FTU9SWV9ERUJVRworZXh0ZXJuIGxvbmcgbm9famZmc19jb250cm9sOworZXh0ZXJuIGxvbmcgbm9famZmc19yYXdfaW5vZGU7CitleHRlcm4gbG9uZyBub19qZmZzX25vZGVfcmVmOworZXh0ZXJuIGxvbmcgbm9famZmc19mbTsKK2V4dGVybiBsb25nIG5vX2pmZnNfZm1jb250cm9sOworZXh0ZXJuIGxvbmcgbm9faGFzaDsKK2V4dGVybiBsb25nIG5vX25hbWU7CisjZGVmaW5lIERKTSh4KSB4CisjZWxzZQorI2RlZmluZSBESk0oeCkKKyNlbmRpZgorCisjZW5kaWYgLyogX19MSU5VWF9KRkZTX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9qZmZzMi5oIGIvaW5jbHVkZS9saW51eC9qZmZzMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxOWZjOTUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2pmZnMyLmgKQEAgLTAsMCArMSwxNTcgQEAKKy8qCisgKiBKRkZTMiAtLSBKb3VybmFsbGluZyBGbGFzaCBGaWxlIFN5c3RlbSwgVmVyc2lvbiAyLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMS0yMDAzIFJlZCBIYXQsIEluYy4KKyAqCisgKiBDcmVhdGVkIGJ5IERhdmlkIFdvb2Rob3VzZSA8ZHdtdzJAaW5mcmFkZWFkLm9yZz4KKyAqCisgKiBGb3IgbGljZW5zaW5nIGluZm9ybWF0aW9uLCBzZWUgdGhlIGZpbGUgJ0xJQ0VOQ0UnIGluIHRoZSAKKyAqIGpmZnMyIGRpcmVjdG9yeS4KKyAqCisgKiAkSWQ6IGpmZnMyLmgsdiAxLjM0IDIwMDQvMTEvMTYgMjA6MzY6MTQgZHdtdzIgRXhwICQKKyAqCisgKi8KKworI2lmbmRlZiBfX0xJTlVYX0pGRlMyX0hfXworI2RlZmluZSBfX0xJTlVYX0pGRlMyX0hfXworCisvKiBZb3UgbXVzdCBpbmNsdWRlIHNvbWV0aGluZyB3aGljaCBkZWZpbmVzIHRoZSBDOTkgdWludFhYX3QgdHlwZXMuIAorICAgV2UgZG9uJ3QgZG8gaXQgZnJvbSBoZXJlIGJlY2F1c2UgdGhpcyBmaWxlIGlzIHVzZWQgaW4gdG9vIG1hbnkKKyAgIGRpZmZlcmVudCBlbnZpcm9ubWVudHMuICovCisKKyNkZWZpbmUgSkZGUzJfU1VQRVJfTUFHSUMgMHg3MmI2CisKKy8qIFZhbHVlcyB3ZSBtYXkgZXhwZWN0IHRvIGZpbmQgaW4gdGhlICdtYWdpYycgZmllbGQgKi8KKyNkZWZpbmUgSkZGUzJfT0xEX01BR0lDX0JJVE1BU0sgMHgxOTg0CisjZGVmaW5lIEpGRlMyX01BR0lDX0JJVE1BU0sgMHgxOTg1CisjZGVmaW5lIEtTQU1USUJfQ0lHQU1fMlNGRkogMHg4NTE5IC8qIEZvciBkZXRlY3Rpbmcgd3JvbmctZW5kaWFuIGZzICovCisjZGVmaW5lIEpGRlMyX0VNUFRZX0JJVE1BU0sgMHhmZmZmCisjZGVmaW5lIEpGRlMyX0RJUlRZX0JJVE1BU0sgMHgwMDAwCisKKy8qIFdlIG9ubHkgYWxsb3cgYSBzaW5nbGUgY2hhciBmb3IgbGVuZ3RoLCBhbmQgMHhGRiBpcyBlbXB0eSBmbGFzaCBzbworICAgd2UgZG9uJ3Qgd2FudCBpdCBjb25mdXNlZCB3aXRoIGEgcmVhbCBsZW5ndGguIEhlbmNlIG1heCAyNTQuCisqLworI2RlZmluZSBKRkZTMl9NQVhfTkFNRV9MRU4gMjU0CisKKy8qIEhvdyBzbWFsbCBjYW4gd2Ugc2Vuc2libHkgd3JpdGUgbm9kZXM/ICovCisjZGVmaW5lIEpGRlMyX01JTl9EQVRBX0xFTiAxMjgKKworI2RlZmluZSBKRkZTMl9DT01QUl9OT05FCTB4MDAKKyNkZWZpbmUgSkZGUzJfQ09NUFJfWkVSTwkweDAxCisjZGVmaW5lIEpGRlMyX0NPTVBSX1JUSU1FCTB4MDIKKyNkZWZpbmUgSkZGUzJfQ09NUFJfUlVCSU5NSVBTCTB4MDMKKyNkZWZpbmUgSkZGUzJfQ09NUFJfQ09QWQkweDA0CisjZGVmaW5lIEpGRlMyX0NPTVBSX0RZTlJVQklOCTB4MDUKKyNkZWZpbmUgSkZGUzJfQ09NUFJfWkxJQgkweDA2CisjZGVmaW5lIEpGRlMyX0NPTVBSX0xaTyAgICAgICAgIDB4MDcKKyNkZWZpbmUgSkZGUzJfQ09NUFJfTFpBUkkgICAgICAgMHgwOAorLyogQ29tcGF0aWJpbGl0eSBmbGFncy4gKi8KKyNkZWZpbmUgSkZGUzJfQ09NUEFUX01BU0sgMHhjMDAwICAgICAgLyogV2hhdCBkbyB0byBpZiBhbiB1bmtub3duIG5vZGV0eXBlIGlzIGZvdW5kICovCisjZGVmaW5lIEpGRlMyX05PREVfQUNDVVJBVEUgMHgyMDAwCisvKiBJTkNPTVBBVDogRmFpbCB0byBtb3VudCB0aGUgZmlsZXN5c3RlbSAqLworI2RlZmluZSBKRkZTMl9GRUFUVVJFX0lOQ09NUEFUIDB4YzAwMAorLyogUk9DT01QQVQ6IE1vdW50IHJlYWQtb25seSAqLworI2RlZmluZSBKRkZTMl9GRUFUVVJFX1JPQ09NUEFUIDB4ODAwMAorLyogUldDT01QQVRfQ09QWTogTW91bnQgcmVhZC93cml0ZSwgYW5kIGNvcHkgdGhlIG5vZGUgd2hlbiBpdCdzIEdDJ2QgKi8KKyNkZWZpbmUgSkZGUzJfRkVBVFVSRV9SV0NPTVBBVF9DT1BZIDB4NDAwMAorLyogUldDT01QQVRfREVMRVRFOiBNb3VudCByZWFkL3dyaXRlLCBhbmQgZGVsZXRlIHRoZSBub2RlIHdoZW4gaXQncyBHQydkICovCisjZGVmaW5lIEpGRlMyX0ZFQVRVUkVfUldDT01QQVRfREVMRVRFIDB4MDAwMAorCisjZGVmaW5lIEpGRlMyX05PREVUWVBFX0RJUkVOVCAoSkZGUzJfRkVBVFVSRV9JTkNPTVBBVCB8IEpGRlMyX05PREVfQUNDVVJBVEUgfCAxKQorI2RlZmluZSBKRkZTMl9OT0RFVFlQRV9JTk9ERSAoSkZGUzJfRkVBVFVSRV9JTkNPTVBBVCB8IEpGRlMyX05PREVfQUNDVVJBVEUgfCAyKQorI2RlZmluZSBKRkZTMl9OT0RFVFlQRV9DTEVBTk1BUktFUiAoSkZGUzJfRkVBVFVSRV9SV0NPTVBBVF9ERUxFVEUgfCBKRkZTMl9OT0RFX0FDQ1VSQVRFIHwgMykKKyNkZWZpbmUgSkZGUzJfTk9ERVRZUEVfUEFERElORyAoSkZGUzJfRkVBVFVSRV9SV0NPTVBBVF9ERUxFVEUgfCBKRkZTMl9OT0RFX0FDQ1VSQVRFIHwgNCkKKworLy8gTWF5YmUgbGF0ZXIuLi4KKy8vI2RlZmluZSBKRkZTMl9OT0RFVFlQRV9DSEVDS1BPSU5UIChKRkZTMl9GRUFUVVJFX1JXQ09NUEFUX0RFTEVURSB8IEpGRlMyX05PREVfQUNDVVJBVEUgfCAzKQorLy8jZGVmaW5lIEpGRlMyX05PREVUWVBFX09QVElPTlMgKEpGRlMyX0ZFQVRVUkVfUldDT01QQVRfQ09QWSB8IEpGRlMyX05PREVfQUNDVVJBVEUgfCA0KQorCisKKyNkZWZpbmUgSkZGUzJfSU5PX0ZMQUdfUFJFUkVBRAkgIDEJLyogRG8gcmVhZF9pbm9kZSgpIGZvciB0aGlzIG9uZSBhdCAKKwkJCQkJICAgbW91bnQgdGltZSwgZG9uJ3Qgd2FpdCBmb3IgaXQgdG8gCisJCQkJCSAgIGhhcHBlbiBsYXRlciAqLworI2RlZmluZSBKRkZTMl9JTk9fRkxBR19VU0VSQ09NUFIgIDIJLyogVXNlciBoYXMgcmVxdWVzdGVkIGEgc3BlY2lmaWMgCisJCQkJCSAgIGNvbXByZXNzaW9uIHR5cGUgKi8KKworCisvKiBUaGVzZSBjYW4gZ28gb25jZSB3ZSd2ZSBtYWRlIHN1cmUgd2UndmUgY2F1Z2h0IGFsbCB1c2VzIHdpdGhvdXQKKyAgIGJ5dGVzd2FwcGluZyAqLworCit0eXBlZGVmIHN0cnVjdCB7CisJdWludDMyX3QgdjMyOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSAgamludDMyX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1aW50MzJfdCBtOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSAgam1vZGVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVpbnQxNl90IHYxNjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgamludDE2X3Q7CisKK3N0cnVjdCBqZmZzMl91bmtub3duX25vZGUKK3sKKwkvKiBBbGwgc3RhcnQgbGlrZSB0aGlzICovCisJamludDE2X3QgbWFnaWM7CisJamludDE2X3Qgbm9kZXR5cGU7CisJamludDMyX3QgdG90bGVuOyAvKiBTbyB3ZSBjYW4gc2tpcCBvdmVyIG5vZGVzIHdlIGRvbid0IGdyb2sgKi8KKwlqaW50MzJfdCBoZHJfY3JjOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGpmZnMyX3Jhd19kaXJlbnQKK3sKKwlqaW50MTZfdCBtYWdpYzsKKwlqaW50MTZfdCBub2RldHlwZTsJLyogPT0gSkZGU19OT0RFVFlQRV9ESVJFTlQgKi8KKwlqaW50MzJfdCB0b3RsZW47CisJamludDMyX3QgaGRyX2NyYzsKKwlqaW50MzJfdCBwaW5vOworCWppbnQzMl90IHZlcnNpb247CisJamludDMyX3QgaW5vOyAvKiA9PSB6ZXJvIGZvciB1bmxpbmsgKi8KKwlqaW50MzJfdCBtY3RpbWU7CisJdWludDhfdCBuc2l6ZTsKKwl1aW50OF90IHR5cGU7CisJdWludDhfdCB1bnVzZWRbMl07CisJamludDMyX3Qgbm9kZV9jcmM7CisJamludDMyX3QgbmFtZV9jcmM7CisJdWludDhfdCBuYW1lWzBdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyogVGhlIEpGRlMyIHJhdyBpbm9kZSBzdHJ1Y3R1cmU6IFVzZWQgZm9yIHN0b3JhZ2Ugb24gcGh5c2ljYWwgbWVkaWEuICAqLworLyogVGhlIHVpZCwgZ2lkLCBhdGltZSwgbXRpbWUgYW5kIGN0aW1lIG1lbWJlcnMgY291bGQgYmUgbG9uZ2VyLCBidXQgCisgICBhcmUgbGVmdCBsaWtlIHRoaXMgZm9yIHNwYWNlIGVmZmljaWVuY3kuIElmIGFuZCB3aGVuIHBlb3BsZSBkZWNpZGUKKyAgIHRoZXkgcmVhbGx5IG5lZWQgdGhlbSBleHRlbmRlZCwgaXQncyBzaW1wbGUgZW5vdWdoIHRvIGFkZCBzdXBwb3J0IGZvcgorICAgYSBuZXcgdHlwZSBvZiByYXcgbm9kZS4KKyovCitzdHJ1Y3QgamZmczJfcmF3X2lub2RlCit7CisJamludDE2X3QgbWFnaWM7ICAgICAgLyogQSBjb25zdGFudCBtYWdpYyBudW1iZXIuICAqLworCWppbnQxNl90IG5vZGV0eXBlOyAgIC8qID09IEpGRlNfTk9ERVRZUEVfSU5PREUgKi8KKwlqaW50MzJfdCB0b3RsZW47ICAgICAvKiBUb3RhbCBsZW5ndGggb2YgdGhpcyBub2RlIChpbmMgZGF0YSwgZXRjLikgKi8KKwlqaW50MzJfdCBoZHJfY3JjOworCWppbnQzMl90IGlubzsgICAgICAgIC8qIElub2RlIG51bWJlci4gICovCisJamludDMyX3QgdmVyc2lvbjsgICAgLyogVmVyc2lvbiBudW1iZXIuICAqLworCWptb2RlX3QgbW9kZTsgICAgICAgLyogVGhlIGZpbGUncyB0eXBlIG9yIG1vZGUuICAqLworCWppbnQxNl90IHVpZDsgICAgICAgIC8qIFRoZSBmaWxlJ3Mgb3duZXIuICAqLworCWppbnQxNl90IGdpZDsgICAgICAgIC8qIFRoZSBmaWxlJ3MgZ3JvdXAuICAqLworCWppbnQzMl90IGlzaXplOyAgICAgIC8qIFRvdGFsIHJlc3VsdGFudCBzaXplIG9mIHRoaXMgaW5vZGUgKHVzZWQgZm9yIHRydW5jYXRpb25zKSAgKi8KKwlqaW50MzJfdCBhdGltZTsgICAgICAvKiBMYXN0IGFjY2VzcyB0aW1lLiAgKi8KKwlqaW50MzJfdCBtdGltZTsgICAgICAvKiBMYXN0IG1vZGlmaWNhdGlvbiB0aW1lLiAgKi8KKwlqaW50MzJfdCBjdGltZTsgICAgICAvKiBDaGFuZ2UgdGltZS4gICovCisJamludDMyX3Qgb2Zmc2V0OyAgICAgLyogV2hlcmUgdG8gYmVnaW4gdG8gd3JpdGUuICAqLworCWppbnQzMl90IGNzaXplOyAgICAgIC8qIChDb21wcmVzc2VkKSBkYXRhIHNpemUgKi8KKwlqaW50MzJfdCBkc2l6ZTsJICAgICAvKiBTaXplIG9mIHRoZSBub2RlJ3MgZGF0YS4gKGFmdGVyIGRlY29tcHJlc3Npb24pICovCisJdWludDhfdCBjb21wcjsgICAgICAgLyogQ29tcHJlc3Npb24gYWxnb3JpdGhtIHVzZWQgKi8KKwl1aW50OF90IHVzZXJjb21wcjsgICAvKiBDb21wcmVzc2lvbiBhbGdvcml0aG0gcmVxdWVzdGVkIGJ5IHRoZSB1c2VyICovCisJamludDE2X3QgZmxhZ3M7CSAgICAgLyogU2VlIEpGRlMyX0lOT19GTEFHXyogKi8KKwlqaW50MzJfdCBkYXRhX2NyYzsgICAvKiBDUkMgZm9yIHRoZSAoY29tcHJlc3NlZCkgZGF0YS4gICovCisJamludDMyX3Qgbm9kZV9jcmM7ICAgLyogQ1JDIGZvciB0aGUgcmF3IGlub2RlIChleGNsdWRpbmcgZGF0YSkgICovCisJdWludDhfdCBkYXRhWzBdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwordW5pb24gamZmczJfbm9kZV91bmlvbiB7CisJc3RydWN0IGpmZnMyX3Jhd19pbm9kZSBpOworCXN0cnVjdCBqZmZzMl9yYXdfZGlyZW50IGQ7CisJc3RydWN0IGpmZnMyX3Vua25vd25fbm9kZSB1OworfTsKKworI2VuZGlmIC8qIF9fTElOVVhfSkZGUzJfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2pmZnMyX2ZzX2kuaCBiL2luY2x1ZGUvbGludXgvamZmczJfZnNfaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkYmIxY2MKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2pmZnMyX2ZzX2kuaApAQCAtMCwwICsxLDQ3IEBACisvKiAkSWQ6IGpmZnMyX2ZzX2kuaCx2IDEuMTcgMjAwNC8xMS8xMSAyMzo1MToyNyBkd213MiBFeHAgJCAqLworCisjaWZuZGVmIF9KRkZTMl9GU19JCisjZGVmaW5lIF9KRkZTMl9GU19JCisKKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+CisjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgorCitzdHJ1Y3QgamZmczJfaW5vZGVfaW5mbyB7CisJLyogV2UgbmVlZCBhbiBpbnRlcm5hbCBzZW1hcGhvcmUgc2ltaWxhciB0byBpbm9kZS0+aV9zZW0uCisJICAgVW5mb3J0dW5hdGVseSwgd2UgY2FuJ3QgdXNlZCB0aGUgZXhpc3Rpbmcgb25lLCBiZWNhdXNlCisJICAgZWl0aGVyIHRoZSBHQyB3b3VsZCBkZWFkbG9jaywgb3Igd2UnZCBoYXZlIHRvIHJlbGVhc2UgaXQKKwkgICBiZWZvcmUgbGV0dGluZyBHQyBwcm9jZWVkLiBPciB3ZSdkIGhhdmUgdG8gcHV0IHVnbGluZXNzCisJICAgaW50byB0aGUgR0MgY29kZSBzbyBpdCBkaWRuJ3QgYXR0ZW1wdCB0byBvYnRhaW4gdGhlIGlfc2VtCisJICAgZm9yIHRoZSBpbm9kZShzKSB3aGljaCBhcmUgYWxyZWFkeSBsb2NrZWQgKi8KKwlzdHJ1Y3Qgc2VtYXBob3JlIHNlbTsKKworCS8qIFRoZSBoaWdoZXN0IChkYXRhbm9kZSkgdmVyc2lvbiBudW1iZXIgdXNlZCBmb3IgdGhpcyBpbm8gKi8KKwl1aW50MzJfdCBoaWdoZXN0X3ZlcnNpb247CisKKwkvKiBMaXN0IG9mIGRhdGEgZnJhZ21lbnRzIHdoaWNoIG1ha2UgdXAgdGhlIGZpbGUgKi8KKwlzdHJ1Y3QgcmJfcm9vdCBmcmFndHJlZTsKKworCS8qIFRoZXJlIG1heSBiZSBvbmUgZGF0YW5vZGUgd2hpY2ggaXNuJ3QgcmVmZXJlbmNlZCBieSBhbnkgb2YgdGhlCisJICAgYWJvdmUgZnJhZ21lbnRzLCBpZiBpdCBjb250YWlucyBhIG1ldGFkYXRhIHVwZGF0ZSBidXQgbm8gYWN0dWFsCisJICAgZGF0YSAtIG9yIGlmIHRoaXMgaXMgYSBkaXJlY3RvcnkgaW5vZGUgKi8KKwkvKiBUaGlzIGFsc28gaG9sZHMgdGhlIF9vbmx5XyBkbm9kZSBmb3Igc3ltbGlua3MvZGV2aWNlIG5vZGVzLCAKKwkgICBldGMuICovCisJc3RydWN0IGpmZnMyX2Z1bGxfZG5vZGUgKm1ldGFkYXRhOworCisJLyogRGlyZWN0b3J5IGVudHJpZXMgKi8KKwlzdHJ1Y3QgamZmczJfZnVsbF9kaXJlbnQgKmRlbnRzOworCisJLyogU29tZSBzdHVmZiB3ZSBqdXN0IGhhdmUgdG8ga2VlcCBpbi1jb3JlIGF0IGFsbCB0aW1lcywgZm9yIGVhY2ggaW5vZGUuICovCisJc3RydWN0IGpmZnMyX2lub2RlX2NhY2hlICppbm9jYWNoZTsKKworCXVpbnQxNl90IGZsYWdzOworCXVpbnQ4X3QgdXNlcmNvbXByOworI2lmICFkZWZpbmVkIChfX0VDT1MpCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw1LDIpCisJc3RydWN0IGlub2RlIHZmc19pbm9kZTsKKyNlbmRpZgorI2VuZGlmCit9OworCisjZW5kaWYgLyogX0pGRlMyX0ZTX0kgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvamZmczJfZnNfc2IuaCBiL2luY2x1ZGUvbGludXgvamZmczJfZnNfc2IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWZjOGQ4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9qZmZzMl9mc19zYi5oCkBAIC0wLDAgKzEsMTE4IEBACisvKiAkSWQ6IGpmZnMyX2ZzX3NiLmgsdiAxLjQ4IDIwMDQvMTEvMjAgMTA6NDE6MTIgZHdtdzIgRXhwICQgKi8KKworI2lmbmRlZiBfSkZGUzJfRlNfU0IKKyNkZWZpbmUgX0pGRlMyX0ZTX1NCCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgorI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KKworI2RlZmluZSBKRkZTMl9TQl9GTEFHX1JPIDEKKyNkZWZpbmUgSkZGUzJfU0JfRkxBR19NT1VOVElORyAyCisKK3N0cnVjdCBqZmZzMl9pbm9kaXJ0eTsKKworLyogQSBzdHJ1Y3QgZm9yIHRoZSBvdmVyYWxsIGZpbGUgc3lzdGVtIGNvbnRyb2wuICBQb2ludGVycyB0bworICAgamZmczJfc2JfaW5mbyBzdHJ1Y3RzIGFyZSBuYW1lZCBgYycgaW4gdGhlIHNvdXJjZSBjb2RlLiAgCisgICBOZWUgamZmc19jb250cm9sCisqLworc3RydWN0IGpmZnMyX3NiX2luZm8geworCXN0cnVjdCBtdGRfaW5mbyAqbXRkOworCisJdWludDMyX3QgaGlnaGVzdF9pbm87CisJdWludDMyX3QgY2hlY2tlZF9pbm87CisKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CisKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmdjX3Rhc2s7CS8qIEdDIHRhc2sgc3RydWN0ICovCisJc3RydWN0IHNlbWFwaG9yZSBnY190aHJlYWRfc3RhcnQ7IC8qIEdDIHRocmVhZCBzdGFydCBtdXRleCAqLworCXN0cnVjdCBjb21wbGV0aW9uIGdjX3RocmVhZF9leGl0OyAvKiBHQyB0aHJlYWQgZXhpdCBjb21wbGV0aW9uIHBvcnQgKi8KKworCXN0cnVjdCBzZW1hcGhvcmUgYWxsb2Nfc2VtOwkvKiBVc2VkIHRvIHByb3RlY3QgYWxsIHRoZSBmb2xsb3dpbmcgCisJCQkJCSAgIGZpZWxkcywgYW5kIGFsc28gdG8gcHJvdGVjdCBhZ2FpbnN0CisJCQkJCSAgIG91dC1vZi1vcmRlciB3cml0aW5nIG9mIG5vZGVzLiBBbmQgR0MuICovCisJdWludDMyX3QgY2xlYW5tYXJrZXJfc2l6ZTsJLyogU2l6ZSBvZiBhbiBfaW5saW5lXyBDTEVBTk1BUktFUgorCQkJCQkgKGkuZS4gemVybyBmb3IgT09CIENMRUFOTUFSS0VSICovCisKKwl1aW50MzJfdCBmbGFzaF9zaXplOworCXVpbnQzMl90IHVzZWRfc2l6ZTsKKwl1aW50MzJfdCBkaXJ0eV9zaXplOworCXVpbnQzMl90IHdhc3RlZF9zaXplOworCXVpbnQzMl90IGZyZWVfc2l6ZTsKKwl1aW50MzJfdCBlcmFzaW5nX3NpemU7CisJdWludDMyX3QgYmFkX3NpemU7CisJdWludDMyX3Qgc2VjdG9yX3NpemU7CisJdWludDMyX3QgdW5jaGVja2VkX3NpemU7CisKKwl1aW50MzJfdCBucl9mcmVlX2Jsb2NrczsKKwl1aW50MzJfdCBucl9lcmFzaW5nX2Jsb2NrczsKKworCS8qIE51bWJlciBvZiBmcmVlIGJsb2NrcyB0aGVyZSBtdXN0IGJlIGJlZm9yZSB3ZS4uLiAqLworCXVpbnQ4X3QgcmVzdl9ibG9ja3Nfd3JpdGU7CS8qIC4uLiBhbGxvdyBhIG5vcm1hbCBmaWxlc3lzdGVtIHdyaXRlICovCisJdWludDhfdCByZXN2X2Jsb2Nrc19kZWxldGlvbjsJLyogLi4uIGFsbG93IGEgbm9ybWFsIGZpbGVzeXN0ZW0gZGVsZXRpb24gKi8KKwl1aW50OF90IHJlc3ZfYmxvY2tzX2djdHJpZ2dlcjsJLyogLi4uIHdha2UgdXAgdGhlIEdDIHRocmVhZCAqLworCXVpbnQ4X3QgcmVzdl9ibG9ja3NfZ2NiYWQ7CS8qIC4uLiBwaWNrIGEgYmxvY2sgZnJvbSB0aGUgYmFkX2xpc3QgdG8gR0MgKi8KKwl1aW50OF90IHJlc3ZfYmxvY2tzX2djbWVyZ2U7CS8qIC4uLiBtZXJnZSBwYWdlcyB3aGVuIGdhcmJhZ2UgY29sbGVjdGluZyAqLworCisJdWludDMyX3Qgbm9zcGNfZGlydHlfc2l6ZTsKKworCXVpbnQzMl90IG5yX2Jsb2NrczsKKwlzdHJ1Y3QgamZmczJfZXJhc2VibG9jayAqYmxvY2tzOwkvKiBUaGUgd2hvbGUgYXJyYXkgb2YgYmxvY2tzLiBVc2VkIGZvciBnZXR0aW5nIGJsb2NrcyAKKwkJCQkJCSAqIGZyb20gdGhlIG9mZnNldCAoYmxvY2tzW29mcyAvIHNlY3Rvcl9zaXplXSkgKi8KKwlzdHJ1Y3QgamZmczJfZXJhc2VibG9jayAqbmV4dGJsb2NrOwkvKiBUaGUgYmxvY2sgd2UncmUgY3VycmVudGx5IGZpbGxpbmcgKi8KKworCXN0cnVjdCBqZmZzMl9lcmFzZWJsb2NrICpnY2Jsb2NrOwkvKiBUaGUgYmxvY2sgd2UncmUgY3VycmVudGx5IGdhcmJhZ2UtY29sbGVjdGluZyAqLworCisJc3RydWN0IGxpc3RfaGVhZCBjbGVhbl9saXN0OwkJLyogQmxvY2tzIDEwMCUgZnVsbCBvZiBjbGVhbiBkYXRhICovCisJc3RydWN0IGxpc3RfaGVhZCB2ZXJ5X2RpcnR5X2xpc3Q7CS8qIEJsb2NrcyB3aXRoIGxvdHMgb2YgZGlydHkgc3BhY2UgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGRpcnR5X2xpc3Q7CQkvKiBCbG9ja3Mgd2l0aCBzb21lIGRpcnR5IHNwYWNlICovCisJc3RydWN0IGxpc3RfaGVhZCBlcmFzYWJsZV9saXN0OwkJLyogQmxvY2tzIHdoaWNoIGFyZSBjb21wbGV0ZWx5IGRpcnR5LCBhbmQgbmVlZCBlcmFzaW5nICovCisJc3RydWN0IGxpc3RfaGVhZCBlcmFzYWJsZV9wZW5kaW5nX3didWZfbGlzdDsJLyogQmxvY2tzIHdoaWNoIG5lZWQgZXJhc2luZyBidXQgb25seSBhZnRlciB0aGUgY3VycmVudCB3YnVmIGlzIGZsdXNoZWQgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGVyYXNpbmdfbGlzdDsJCS8qIEJsb2NrcyB3aGljaCBhcmUgY3VycmVudGx5IGVyYXNpbmcgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGVyYXNlX3BlbmRpbmdfbGlzdDsJLyogQmxvY2tzIHdoaWNoIG5lZWQgZXJhc2luZyBub3cgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGVyYXNlX2NvbXBsZXRlX2xpc3Q7CS8qIEJsb2NrcyB3aGljaCBhcmUgZXJhc2VkIGFuZCBuZWVkIHRoZSBjbGVhbiBtYXJrZXIgd3JpdHRlbiB0byB0aGVtICovCisJc3RydWN0IGxpc3RfaGVhZCBmcmVlX2xpc3Q7CQkvKiBCbG9ja3Mgd2hpY2ggYXJlIGZyZWUgYW5kIHJlYWR5IHRvIGJlIHVzZWQgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGJhZF9saXN0OwkJLyogQmFkIGJsb2Nrcy4gKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGJhZF91c2VkX2xpc3Q7CQkvKiBCYWQgYmxvY2tzIHdpdGggdmFsaWQgZGF0YSBpbi4gKi8KKworCXNwaW5sb2NrX3QgZXJhc2VfY29tcGxldGlvbl9sb2NrOwkvKiBQcm90ZWN0IGZyZWVfbGlzdCBhbmQgZXJhc2luZ19saXN0IAorCQkJCQkJICAgYWdhaW5zdCBlcmFzZSBjb21wbGV0aW9uIGhhbmRsZXIgKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdCBlcmFzZV93YWl0OwkJLyogRm9yIHdhaXRpbmcgZm9yIGVyYXNlcyB0byBjb21wbGV0ZSAqLworCisJd2FpdF9xdWV1ZV9oZWFkX3QgaW5vY2FjaGVfd3E7CisJc3RydWN0IGpmZnMyX2lub2RlX2NhY2hlICoqaW5vY2FjaGVfbGlzdDsKKwlzcGlubG9ja190IGlub2NhY2hlX2xvY2s7CisJCisJLyogU2VtIHRvIGFsbG93IGpmZnMyX2dhcmJhZ2VfY29sbGVjdF9kZWxldGlvbl9kaXJlbnQgdG8KKwkgICBkcm9wIHRoZSBlcmFzZV9jb21wbGV0aW9uX2xvY2sgd2hpbGUgaXQncyBob2xkaW5nIGEgcG9pbnRlciAKKwkgICB0byBhbiBvYnNvbGV0ZWQgbm9kZS4gSSBkb24ndCBsaWtlIHRoaXMuIEFsdGVybmF0aXZlcyB3ZWxjb21lZC4gKi8KKwlzdHJ1Y3Qgc2VtYXBob3JlIGVyYXNlX2ZyZWVfc2VtOworCisjaWYgZGVmaW5lZCBDT05GSUdfSkZGUzJfRlNfTkFORCB8fCBkZWZpbmVkIENPTkZJR19KRkZTMl9GU19OT1JfRUNDCisJLyogV3JpdGUtYmVoaW5kIGJ1ZmZlciBmb3IgTkFORCBmbGFzaCAqLworCXVuc2lnbmVkIGNoYXIgKndidWY7CisJdWludDMyX3Qgd2J1Zl9vZnM7CisJdWludDMyX3Qgd2J1Zl9sZW47CisJdWludDMyX3Qgd2J1Zl9wYWdlc2l6ZTsKKwlzdHJ1Y3QgamZmczJfaW5vZGlydHkgKndidWZfaW5vZGVzOworCisJc3RydWN0IHJ3X3NlbWFwaG9yZSB3YnVmX3NlbTsJLyogUHJvdGVjdHMgdGhlIHdyaXRlIGJ1ZmZlciAqLworCisJLyogSW5mb3JtYXRpb24gYWJvdXQgb3V0LW9mLWJhbmQgYXJlYSB1c2FnZS4uLiAqLworCXN0cnVjdCBuYW5kX29vYmluZm8gKm9vYmluZm87CisJdWludDMyX3QgYmFkYmxvY2tfcG9zOworCXVpbnQzMl90IGZzZGF0YV9wb3M7CisJdWludDMyX3QgZnNkYXRhX2xlbjsKKyNlbmRpZgorCisJLyogT1MtcHJpdmF0ZSBwb2ludGVyIGZvciBnZXR0aW5nIGJhY2sgdG8gbWFzdGVyIHN1cGVyYmxvY2sgaW5mbyAqLworCXZvaWQgKm9zX3ByaXY7Cit9OworCisjZW5kaWYgLyogX0pGRlMyX0ZCX1NCICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2poYXNoLmggYi9pbmNsdWRlL2xpbnV4L2poYXNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJjN2FlNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvamhhc2guaApAQCAtMCwwICsxLDE0MyBAQAorI2lmbmRlZiBfTElOVVhfSkhBU0hfSAorI2RlZmluZSBfTElOVVhfSkhBU0hfSAorCisvKiBqaGFzaC5oOiBKZW5raW5zIGhhc2ggc3VwcG9ydC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYgQm9iIEplbmtpbnMgKGJvYl9qZW5raW5zQGJ1cnRsZWJ1cnRsZS5uZXQpCisgKgorICogaHR0cDovL2J1cnRsZWJ1cnRsZS5uZXQvYm9iL2hhc2gvCisgKgorICogVGhlc2UgYXJlIHRoZSBjcmVkaXRzIGZyb20gQm9iJ3Mgc291cmNlczoKKyAqCisgKiBsb29rdXAyLmMsIGJ5IEJvYiBKZW5raW5zLCBEZWNlbWJlciAxOTk2LCBQdWJsaWMgRG9tYWluLgorICogaGFzaCgpLCBoYXNoMigpLCBoYXNoMywgYW5kIG1peCgpIGFyZSBleHRlcm5hbGx5IHVzZWZ1bCBmdW5jdGlvbnMuCisgKiBSb3V0aW5lcyB0byB0ZXN0IHRoZSBoYXNoIGFyZSBpbmNsdWRlZCBpZiBTRUxGX1RFU1QgaXMgZGVmaW5lZC4KKyAqIFlvdSBjYW4gdXNlIHRoaXMgZnJlZSBmb3IgYW55IHB1cnBvc2UuICBJdCBoYXMgbm8gd2FycmFudHkuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzIERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AcmVkaGF0LmNvbSkKKyAqCisgKiBJJ3ZlIG1vZGlmaWVkIEJvYidzIGhhc2ggdG8gYmUgdXNlZnVsIGluIHRoZSBMaW51eCBrZXJuZWwsIGFuZAorICogYW55IGJ1Z3MgcHJlc2VudCBhcmUgc3VyZWx5IG15IGZhdWx0LiAgLURhdmVNCisgKi8KKworLyogTk9URTogQXJndW1lbnRzIGFyZSBtb2RpZmllZC4gKi8KKyNkZWZpbmUgX19qaGFzaF9taXgoYSwgYiwgYykgXAoreyBcCisgIGEgLT0gYjsgYSAtPSBjOyBhIF49IChjPj4xMyk7IFwKKyAgYiAtPSBjOyBiIC09IGE7IGIgXj0gKGE8PDgpOyBcCisgIGMgLT0gYTsgYyAtPSBiOyBjIF49IChiPj4xMyk7IFwKKyAgYSAtPSBiOyBhIC09IGM7IGEgXj0gKGM+PjEyKTsgIFwKKyAgYiAtPSBjOyBiIC09IGE7IGIgXj0gKGE8PDE2KTsgXAorICBjIC09IGE7IGMgLT0gYjsgYyBePSAoYj4+NSk7IFwKKyAgYSAtPSBiOyBhIC09IGM7IGEgXj0gKGM+PjMpOyAgXAorICBiIC09IGM7IGIgLT0gYTsgYiBePSAoYTw8MTApOyBcCisgIGMgLT0gYTsgYyAtPSBiOyBjIF49IChiPj4xNSk7IFwKK30KKworLyogVGhlIGdvbGRlbiByYXRpb246IGFuIGFyYml0cmFyeSB2YWx1ZSAqLworI2RlZmluZSBKSEFTSF9HT0xERU5fUkFUSU8JMHg5ZTM3NzliOQorCisvKiBUaGUgbW9zdCBnZW5lcmljIHZlcnNpb24sIGhhc2hlcyBhbiBhcmJpdHJhcnkgc2VxdWVuY2UKKyAqIG9mIGJ5dGVzLiAgTm8gYWxpZ25tZW50IG9yIGxlbmd0aCBhc3N1bXB0aW9ucyBhcmUgbWFkZSBhYm91dAorICogdGhlIGlucHV0IGtleS4KKyAqLworc3RhdGljIGlubGluZSB1MzIgamhhc2goY29uc3Qgdm9pZCAqa2V5LCB1MzIgbGVuZ3RoLCB1MzIgaW5pdHZhbCkKK3sKKwl1MzIgYSwgYiwgYywgbGVuOworCWNvbnN0IHU4ICprID0ga2V5OworCisJbGVuID0gbGVuZ3RoOworCWEgPSBiID0gSkhBU0hfR09MREVOX1JBVElPOworCWMgPSBpbml0dmFsOworCisJd2hpbGUgKGxlbiA+PSAxMikgeworCQlhICs9IChrWzBdICsoKHUzMilrWzFdPDw4KSArKCh1MzIpa1syXTw8MTYpICsoKHUzMilrWzNdPDwyNCkpOworCQliICs9IChrWzRdICsoKHUzMilrWzVdPDw4KSArKCh1MzIpa1s2XTw8MTYpICsoKHUzMilrWzddPDwyNCkpOworCQljICs9IChrWzhdICsoKHUzMilrWzldPDw4KSArKCh1MzIpa1sxMF08PDE2KSsoKHUzMilrWzExXTw8MjQpKTsKKworCQlfX2poYXNoX21peChhLGIsYyk7CisKKwkJayArPSAxMjsKKwkJbGVuIC09IDEyOworCX0KKworCWMgKz0gbGVuZ3RoOworCXN3aXRjaCAobGVuKSB7CisJY2FzZSAxMTogYyArPSAoKHUzMilrWzEwXTw8MjQpOworCWNhc2UgMTA6IGMgKz0gKCh1MzIpa1s5XTw8MTYpOworCWNhc2UgOSA6IGMgKz0gKCh1MzIpa1s4XTw8OCk7CisJY2FzZSA4IDogYiArPSAoKHUzMilrWzddPDwyNCk7CisJY2FzZSA3IDogYiArPSAoKHUzMilrWzZdPDwxNik7CisJY2FzZSA2IDogYiArPSAoKHUzMilrWzVdPDw4KTsKKwljYXNlIDUgOiBiICs9IGtbNF07CisJY2FzZSA0IDogYSArPSAoKHUzMilrWzNdPDwyNCk7CisJY2FzZSAzIDogYSArPSAoKHUzMilrWzJdPDwxNik7CisJY2FzZSAyIDogYSArPSAoKHUzMilrWzFdPDw4KTsKKwljYXNlIDEgOiBhICs9IGtbMF07CisJfTsKKworCV9famhhc2hfbWl4KGEsYixjKTsKKworCXJldHVybiBjOworfQorCisvKiBBIHNwZWNpYWwgb3B0aW1pemVkIHZlcnNpb24gdGhhdCBoYW5kbGVzIDEgb3IgbW9yZSBvZiB1MzJzLgorICogVGhlIGxlbmd0aCBwYXJhbWV0ZXIgaGVyZSBpcyB0aGUgbnVtYmVyIG9mIHUzMnMgaW4gdGhlIGtleS4KKyAqLworc3RhdGljIGlubGluZSB1MzIgamhhc2gyKHUzMiAqaywgdTMyIGxlbmd0aCwgdTMyIGluaXR2YWwpCit7CisJdTMyIGEsIGIsIGMsIGxlbjsKKworCWEgPSBiID0gSkhBU0hfR09MREVOX1JBVElPOworCWMgPSBpbml0dmFsOworCWxlbiA9IGxlbmd0aDsKKworCXdoaWxlIChsZW4gPj0gMykgeworCQlhICs9IGtbMF07CisJCWIgKz0ga1sxXTsKKwkJYyArPSBrWzJdOworCQlfX2poYXNoX21peChhLCBiLCBjKTsKKwkJayArPSAzOyBsZW4gLT0gMzsKKwl9CisKKwljICs9IGxlbmd0aCAqIDQ7CisKKwlzd2l0Y2ggKGxlbikgeworCWNhc2UgMiA6IGIgKz0ga1sxXTsKKwljYXNlIDEgOiBhICs9IGtbMF07CisJfTsKKworCV9famhhc2hfbWl4KGEsYixjKTsKKworCXJldHVybiBjOworfQorCisKKy8qIEEgc3BlY2lhbCB1bHRyYS1vcHRpbWl6ZWQgdmVyc2lvbnMgdGhhdCBrbm93cyB0aGV5IGFyZSBoYXNoaW5nIGV4YWN0bHkKKyAqIDMsIDIgb3IgMSB3b3JkKHMpLgorICoKKyAqIE5PVEU6IEluIHBhcnRpbGFyIHRoZSAiYyArPSBsZW5ndGg7IF9famhhc2hfbWl4KGEsYixjKTsiIG5vcm1hbGx5CisgKiAgICAgICBkb25lIGF0IHRoZSBlbmQgaXMgbm90IGRvbmUgaGVyZS4KKyAqLworc3RhdGljIGlubGluZSB1MzIgamhhc2hfM3dvcmRzKHUzMiBhLCB1MzIgYiwgdTMyIGMsIHUzMiBpbml0dmFsKQoreworCWEgKz0gSkhBU0hfR09MREVOX1JBVElPOworCWIgKz0gSkhBU0hfR09MREVOX1JBVElPOworCWMgKz0gaW5pdHZhbDsKKworCV9famhhc2hfbWl4KGEsIGIsIGMpOworCisJcmV0dXJuIGM7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGpoYXNoXzJ3b3Jkcyh1MzIgYSwgdTMyIGIsIHUzMiBpbml0dmFsKQoreworCXJldHVybiBqaGFzaF8zd29yZHMoYSwgYiwgMCwgaW5pdHZhbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGpoYXNoXzF3b3JkKHUzMiBhLCB1MzIgaW5pdHZhbCkKK3sKKwlyZXR1cm4gamhhc2hfM3dvcmRzKGEsIDAsIDAsIGluaXR2YWwpOworfQorCisjZW5kaWYgLyogX0xJTlVYX0pIQVNIX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvamlmZmllcy5oIGIvaW5jbHVkZS9saW51eC9qaWZmaWVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdhMjU1NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvamlmZmllcy5oCkBAIC0wLDAgKzEsNDUwIEBACisjaWZuZGVmIF9MSU5VWF9KSUZGSUVTX0gKKyNkZWZpbmUgX0xJTlVYX0pJRkZJRVNfSAorCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXguaD4KKyNpbmNsdWRlIDxhc20vcGFyYW0uaD4JCQkvKiBmb3IgSFogKi8KKyNpbmNsdWRlIDxhc20vZGl2NjQuaD4KKworI2lmbmRlZiBkaXZfbG9uZ19sb25nX3JlbQorI2RlZmluZSBkaXZfbG9uZ19sb25nX3JlbShkaXZpZGVuZCxkaXZpc29yLHJlbWFpbmRlcikgXAorKHsJCQkJCQkJXAorCXU2NCByZXN1bHQgPSBkaXZpZGVuZDsJCQkJXAorCSpyZW1haW5kZXIgPSBkb19kaXYocmVzdWx0LGRpdmlzb3IpOwkJXAorCXJlc3VsdDsJCQkJCQlcCit9KQorI2VuZGlmCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGRlZmluZXMgZXN0YWJsaXNoIHRoZSBlbmdpbmVlcmluZyBwYXJhbWV0ZXJzIG9mIHRoZSBQTEwKKyAqIG1vZGVsLiBUaGUgSFogdmFyaWFibGUgZXN0YWJsaXNoZXMgdGhlIHRpbWVyIGludGVycnVwdCBmcmVxdWVuY3ksIDEwMCBIegorICogZm9yIHRoZSBTdW5PUyBrZXJuZWwsIDI1NiBIeiBmb3IgdGhlIFVsdHJpeCBrZXJuZWwgYW5kIDEwMjQgSHogZm9yIHRoZQorICogT1NGLzEga2VybmVsLiBUaGUgU0hJRlRfSFogZGVmaW5lIGV4cHJlc3NlcyB0aGUgc2FtZSB2YWx1ZSBhcyB0aGUKKyAqIG5lYXJlc3QgcG93ZXIgb2YgdHdvIGluIG9yZGVyIHRvIGF2b2lkIGhhcmR3YXJlIG11bHRpcGx5IG9wZXJhdGlvbnMuCisgKi8KKyNpZiBIWiA+PSAxMiAmJiBIWiA8IDI0CisjIGRlZmluZSBTSElGVF9IWgk0CisjZWxpZiBIWiA+PSAyNCAmJiBIWiA8IDQ4CisjIGRlZmluZSBTSElGVF9IWgk1CisjZWxpZiBIWiA+PSA0OCAmJiBIWiA8IDk2CisjIGRlZmluZSBTSElGVF9IWgk2CisjZWxpZiBIWiA+PSA5NiAmJiBIWiA8IDE5MgorIyBkZWZpbmUgU0hJRlRfSFoJNworI2VsaWYgSFogPj0gMTkyICYmIEhaIDwgMzg0CisjIGRlZmluZSBTSElGVF9IWgk4CisjZWxpZiBIWiA+PSAzODQgJiYgSFogPCA3NjgKKyMgZGVmaW5lIFNISUZUX0haCTkKKyNlbGlmIEhaID49IDc2OCAmJiBIWiA8IDE1MzYKKyMgZGVmaW5lIFNISUZUX0haCTEwCisjZWxzZQorIyBlcnJvciBZb3UgbG9zZS4KKyNlbmRpZgorCisvKiBMQVRDSCBpcyB1c2VkIGluIHRoZSBpbnRlcnZhbCB0aW1lciBhbmQgZnRhcGUgc2V0dXAuICovCisjZGVmaW5lIExBVENIICAoKENMT0NLX1RJQ0tfUkFURSArIEhaLzIpIC8gSFopCS8qIEZvciBkaXZpZGVyICovCisKKy8qIFN1cHBvc2Ugd2Ugd2FudCB0byBkZXZpZGUgdHdvIG51bWJlcnMgTk9NIGFuZCBERU46IE5PTS9ERU4sIHRoZSB3ZSBjYW4KKyAqIGltcHJvdmUgYWNjdXJhY3kgYnkgc2hpZnRpbmcgTFNIIGJpdHMsIGhlbmNlIGNhbGN1bGF0aW5nOgorICogICAgIChOT00gPDwgTFNIKSAvIERFTgorICogVGhpcyBob3dldmVyIG1lYW5zIHRyb3VibGUgZm9yIGxhcmdlIE5PTSwgYmVjYXVzZSAoTk9NIDw8IExTSCkgbWF5IG5vCisgKiBsb25nZXIgZml0IGluIDMyIGJpdHMuIFRoZSBmb2xsb3dpbmcgd2F5IG9mIGNhbGN1bGF0aW5nIHRoaXMgZ2l2ZXMgdXMKKyAqIHNvbWUgc2xhY2ssIHVuZGVyIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqICAgLSAoTk9NIC8gREVOKSBmaXRzIGluICgzMiAtIExTSCkgYml0cy4KKyAqICAgLSAoTk9NICUgREVOKSBmaXRzIGluICgzMiAtIExTSCkgYml0cy4KKyAqLworI2RlZmluZSBTSF9ESVYoTk9NLERFTixMU0gpICggICAoKE5PTSAvIERFTikgPDwgTFNIKSAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICgoKE5PTSAlIERFTikgPDwgTFNIKSArIERFTiAvIDIpIC8gREVOKQorCisvKiBIWiBpcyB0aGUgcmVxdWVzdGVkIHZhbHVlLiBBQ1RIWiBpcyBhY3R1YWwgSFogKCI8PCA4IiBpcyBmb3IgYWNjdXJhY3kpICovCisjZGVmaW5lIEFDVEhaIChTSF9ESVYgKENMT0NLX1RJQ0tfUkFURSwgTEFUQ0gsIDgpKQorCisvKiBUSUNLX05TRUMgaXMgdGhlIHRpbWUgYmV0d2VlbiB0aWNrcyBpbiBuc2VjIGFzc3VtaW5nIHJlYWwgQUNUSFogKi8KKyNkZWZpbmUgVElDS19OU0VDIChTSF9ESVYgKDEwMDAwMDBVTCAqIDEwMDAsIEFDVEhaLCA4KSkKKworLyogVElDS19VU0VDIGlzIHRoZSB0aW1lIGJldHdlZW4gdGlja3MgaW4gdXNlYyBhc3N1bWluZyBmYWtlIFVTRVJfSFogKi8KKyNkZWZpbmUgVElDS19VU0VDICgoMTAwMDAwMFVMICsgVVNFUl9IWi8yKSAvIFVTRVJfSFopCisKKy8qIFRJQ0tfVVNFQ19UT19OU0VDIGlzIHRoZSB0aW1lIGJldHdlZW4gdGlja3MgaW4gbnNlYyBhc3N1bWluZyByZWFsIEFDVEhaIGFuZAkqLworLyogYSB2YWx1ZSBUVVNFQyBmb3IgVElDS19VU0VDIChjYW4gYmUgc2V0IGJpaiBhZGp0aW1leCkJCSovCisjZGVmaW5lIFRJQ0tfVVNFQ19UT19OU0VDKFRVU0VDKSAoU0hfRElWIChUVVNFQyAqIFVTRVJfSFogKiAxMDAwLCBBQ1RIWiwgOCkpCisKKy8qIHNvbWUgYXJjaCdzIGhhdmUgYSBzbWFsbC1kYXRhIHNlY3Rpb24gdGhhdCBjYW4gYmUgYWNjZXNzZWQgcmVnaXN0ZXItcmVsYXRpdmUKKyAqIGJ1dCB0aGF0IGNhbiBvbmx5IHRha2UgdXAgdG8sIHNheSwgNC1ieXRlIHZhcmlhYmxlcy4gamlmZmllcyBiZWluZyBwYXJ0IG9mCisgKiBhbiA4LWJ5dGUgdmFyaWFibGUgbWF5IG5vdCBiZSBjb3JyZWN0bHkgYWNjZXNzZWQgdW5sZXNzIHdlIGZvcmNlIHRoZSBpc3N1ZQorICovCisjZGVmaW5lIF9famlmZnlfZGF0YSAgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiLmRhdGEiKSkpCisKKy8qCisgKiBUaGUgNjQtYml0IHZhbHVlIGlzIG5vdCB2b2xhdGlsZSAtIHlvdSBNVVNUIE5PVCByZWFkIGl0CisgKiB3aXRob3V0IHNhbXBsaW5nIHRoZSBzZXF1ZW5jZSBudW1iZXIgaW4geHRpbWVfbG9jay4KKyAqIGdldF9qaWZmaWVzXzY0KCkgd2lsbCBkbyB0aGlzIGZvciB5b3UgYXMgYXBwcm9wcmlhdGUuCisgKi8KK2V4dGVybiB1NjQgX19qaWZmeV9kYXRhIGppZmZpZXNfNjQ7CitleHRlcm4gdW5zaWduZWQgbG9uZyB2b2xhdGlsZSBfX2ppZmZ5X2RhdGEgamlmZmllczsKKworI2lmIChCSVRTX1BFUl9MT05HIDwgNjQpCit1NjQgZ2V0X2ppZmZpZXNfNjQodm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSB1NjQgZ2V0X2ppZmZpZXNfNjQodm9pZCkKK3sKKwlyZXR1cm4gKHU2NClqaWZmaWVzOworfQorI2VuZGlmCisKKy8qCisgKglUaGVzZSBpbmxpbmVzIGRlYWwgd2l0aCB0aW1lciB3cmFwcGluZyBjb3JyZWN0bHkuIFlvdSBhcmUgCisgKglzdHJvbmdseSBlbmNvdXJhZ2VkIHRvIHVzZSB0aGVtCisgKgkxLiBCZWNhdXNlIHBlb3BsZSBvdGhlcndpc2UgZm9yZ2V0CisgKgkyLiBCZWNhdXNlIGlmIHRoZSB0aW1lciB3cmFwIGNoYW5nZXMgaW4gZnV0dXJlIHlvdSB3b24ndCBoYXZlIHRvCisgKgkgICBhbHRlciB5b3VyIGRyaXZlciBjb2RlLgorICoKKyAqIHRpbWVfYWZ0ZXIoYSxiKSByZXR1cm5zIHRydWUgaWYgdGhlIHRpbWUgYSBpcyBhZnRlciB0aW1lIGIuCisgKgorICogRG8gdGhpcyB3aXRoICI8MCIgYW5kICI+PTAiIHRvIG9ubHkgdGVzdCB0aGUgc2lnbiBvZiB0aGUgcmVzdWx0LiBBCisgKiBnb29kIGNvbXBpbGVyIHdvdWxkIGdlbmVyYXRlIGJldHRlciBjb2RlIChhbmQgYSByZWFsbHkgZ29vZCBjb21waWxlcgorICogd291bGRuJ3QgY2FyZSkuIEdjYyBpcyBjdXJyZW50bHkgbmVpdGhlci4KKyAqLworI2RlZmluZSB0aW1lX2FmdGVyKGEsYikJCVwKKwkodHlwZWNoZWNrKHVuc2lnbmVkIGxvbmcsIGEpICYmIFwKKwkgdHlwZWNoZWNrKHVuc2lnbmVkIGxvbmcsIGIpICYmIFwKKwkgKChsb25nKShiKSAtIChsb25nKShhKSA8IDApKQorI2RlZmluZSB0aW1lX2JlZm9yZShhLGIpCXRpbWVfYWZ0ZXIoYixhKQorCisjZGVmaW5lIHRpbWVfYWZ0ZXJfZXEoYSxiKQlcCisJKHR5cGVjaGVjayh1bnNpZ25lZCBsb25nLCBhKSAmJiBcCisJIHR5cGVjaGVjayh1bnNpZ25lZCBsb25nLCBiKSAmJiBcCisJICgobG9uZykoYSkgLSAobG9uZykoYikgPj0gMCkpCisjZGVmaW5lIHRpbWVfYmVmb3JlX2VxKGEsYikJdGltZV9hZnRlcl9lcShiLGEpCisKKy8qCisgKiBIYXZlIHRoZSAzMiBiaXQgamlmZmllcyB2YWx1ZSB3cmFwIDUgbWludXRlcyBhZnRlciBib290CisgKiBzbyBqaWZmaWVzIHdyYXAgYnVncyBzaG93IHVwIGVhcmxpZXIuCisgKi8KKyNkZWZpbmUgSU5JVElBTF9KSUZGSUVTICgodW5zaWduZWQgbG9uZykodW5zaWduZWQgaW50KSAoLTMwMCpIWikpCisKKy8qCisgKiBDaGFuZ2UgdGltZXZhbCB0byBqaWZmaWVzLCB0cnlpbmcgdG8gYXZvaWQgdGhlCisgKiBtb3N0IG9idmlvdXMgb3ZlcmZsb3dzLi4KKyAqCisgKiBBbmQgc29tZSBub3Qgc28gb2J2aW91cy4KKyAqCisgKiBOb3RlIHRoYXQgd2UgZG9uJ3Qgd2FudCB0byByZXR1cm4gTUFYX0xPTkcsIGJlY2F1c2UKKyAqIGZvciB2YXJpb3VzIHRpbWVvdXQgcmVhc29ucyB3ZSBvZnRlbiBlbmQgdXAgaGF2aW5nCisgKiB0byB3YWl0ICJqaWZmaWVzKzEiIGluIG9yZGVyIHRvIGd1YXJhbnRlZSB0aGF0IHdlIHdhaXQKKyAqIGF0IF9sZWFzdF8gImppZmZpZXMiIC0gc28gImppZmZpZXMrMSIgaGFkIGJldHRlciBzdGlsbAorICogYmUgcG9zaXRpdmUuCisgKi8KKyNkZWZpbmUgTUFYX0pJRkZZX09GRlNFVCAoKH4wVUwgPj4gMSktMSkKKworLyoKKyAqIFdlIHdhbnQgdG8gZG8gcmVhbGlzdGljIGNvbnZlcnNpb25zIG9mIHRpbWUgc28gd2UgbmVlZCB0byB1c2UgdGhlIHNhbWUKKyAqIHZhbHVlcyB0aGUgdXBkYXRlIHdhbGwgY2xvY2sgY29kZSB1c2VzIGFzIHRoZSBqaWZmaWVzIHNpemUuICBUaGlzIHZhbHVlCisgKiBpczogVElDS19OU0VDICh3aGljaCBpcyBkZWZpbmVkIGluIHRpbWV4LmgpLiAgVGhpcworICogaXMgYSBjb25zdGFudCBhbmQgaXMgaW4gbmFub3NlY29uZHMuICBXZSB3aWxsIHVzZWQgc2NhbGVkIG1hdGgKKyAqIHdpdGggYSBzZXQgb2Ygc2NhbGVzIGRlZmluZWQgaGVyZSBhcyBTRUNfSklGRklFX1NDLCAgVVNFQ19KSUZGSUVfU0MgYW5kCisgKiBOU0VDX0pJRkZJRV9TQy4gIE5vdGUgdGhhdCB0aGVzZSBkZWZpbmVzIGNvbnRhaW4gbm90aGluZyBidXQKKyAqIGNvbnN0YW50cyBhbmQgc28gYXJlIGNvbXB1dGVkIGF0IGNvbXBpbGUgdGltZS4gIFNISUZUX0haIChjb21wdXRlZCBpbgorICogdGltZXguaCkgYWRqdXN0cyB0aGUgc2NhbGluZyBmb3IgZGlmZmVyZW50IEhaIHZhbHVlcy4KKworICogU2NhbGVkIG1hdGg/Pz8gIFdoYXQgaXMgdGhhdD8KKyAqCisgKiBTY2FsZWQgbWF0aCBpcyBhIHdheSB0byBkbyBpbnRlZ2VyIG1hdGggb24gdmFsdWVzIHRoYXQgd291bGQsCisgKiBvdGhlcndpc2UsIGVpdGhlciBvdmVyZmxvdywgdW5kZXJmbG93LCBvciBjYXVzZSB1bmRlc2lyZWQgZGl2CisgKiBpbnN0cnVjdGlvbnMgdG8gYXBwZWFyIGluIHRoZSBleGVjdXRpb24gcGF0aC4gIEluIHNob3J0LCB3ZSAic2NhbGUiCisgKiB1cCB0aGUgb3BlcmFuZHMgc28gdGhleSB0YWtlIG1vcmUgYml0cyAobW9yZSBwcmVjaXNpb24sIGxlc3MKKyAqIHVuZGVyZmxvdyksIGRvIHRoZSBkZXNpcmVkIG9wZXJhdGlvbiBhbmQgdGhlbiAic2NhbGUiIHRoZSByZXN1bHQgYmFjaworICogYnkgdGhlIHNhbWUgYW1vdW50LiAgSWYgd2UgZG8gdGhlIHNjYWxpbmcgYnkgc2hpZnRpbmcgd2UgYXZvaWQgdGhlCisgKiBjb3N0bHkgbXB5IGFuZCB0aGUgZGFzdGFyZGx5IGRpdiBpbnN0cnVjdGlvbnMuCisKKyAqIFN1cHBvc2UsIGZvciBleGFtcGxlLCB3ZSB3YW50IHRvIGNvbnZlcnQgZnJvbSBzZWNvbmRzIHRvIGppZmZpZXMKKyAqIHdoZXJlIGppZmZpZXMgaXMgZGVmaW5lZCBpbiBuYW5vc2Vjb25kcyBhcyBOU0VDX1BFUl9KSUZGSUUuICBUaGUKKyAqIHNpbXBsZSBtYXRoIGlzOiBqaWZmID0gKHNlYyAqIE5TRUNfUEVSX1NFQykgLyBOU0VDX1BFUl9KSUZGSUU7IFdlCisgKiBvYnNlcnZlIHRoYXQgKE5TRUNfUEVSX1NFQyAvIE5TRUNfUEVSX0pJRkZJRSkgaXMgYSBjb25zdGFudCB3aGljaCB3ZQorICogbWlnaHQgY2FsY3VsYXRlIGF0IGNvbXBpbGUgdGltZSwgaG93ZXZlciwgdGhlIHJlc3VsdCB3aWxsIG9ubHkgaGF2ZQorICogYWJvdXQgMy00IGJpdHMgb2YgcHJlY2lzaW9uIChsZXNzIGZvciBzbWFsbGVyIHZhbHVlcyBvZiBIWikuCisgKgorICogU28sIHdlIHNjYWxlIGFzIGZvbGxvd3M6CisgKiBqaWZmID0gKHNlYykgKiAoTlNFQ19QRVJfU0VDIC8gTlNFQ19QRVJfSklGRklFKTsKKyAqIGppZmYgPSAoKHNlYykgKiAoKE5TRUNfUEVSX1NFQyAqIFNDQUxFKS8gTlNFQ19QRVJfSklGRklFKSkgLyBTQ0FMRTsKKyAqIFRoZW4gd2UgbWFrZSBTQ0FMRSBhIHBvd2VyIG9mIHR3byBzbzoKKyAqIGppZmYgPSAoKHNlYykgKiAoKE5TRUNfUEVSX1NFQyA8PCBTQ0FMRSkvIE5TRUNfUEVSX0pJRkZJRSkpID4+IFNDQUxFOworICogTm93IHdlIGRlZmluZToKKyAqICNkZWZpbmUgU0VDX0NPTlYgPSAoKE5TRUNfUEVSX1NFQyA8PCBTQ0FMRSkvIE5TRUNfUEVSX0pJRkZJRSkpCisgKiBqaWZmID0gKHNlYyAqIFNFQ19DT05WKSA+PiBTQ0FMRTsKKyAqCisgKiBPZnRlbiB0aGUgbWF0aCB3ZSB1c2Ugd2lsbCBleHBhbmQgYmV5b25kIDMyLWJpdHMgc28gd2UgdGVsbCBDIGhvdyB0bworICogZG8gdGhpcyBhbmQgcGFzcyB0aGUgNjQtYml0IHJlc3VsdCBvZiB0aGUgbXB5IHRocm91Z2ggdGhlICI+PiBTQ0FMRSIKKyAqIHdoaWNoIHNob3VsZCB0YWtlIHRoZSByZXN1bHQgYmFjayB0byAzMi1iaXRzLiAgV2Ugd2FudCB0aGlzIGV4cGFuc2lvbgorICogdG8gY2FwdHVyZSBhcyBtdWNoIHByZWNpc2lvbiBhcyBwb3NzaWJsZS4gIEF0IHRoZSBzYW1lIHRpbWUgd2UgZG9uJ3QKKyAqIHdhbnQgdG8gb3ZlcmZsb3cgc28gd2UgcGljayB0aGUgU0NBTEUgdG8gYXZvaWQgdGhpcy4gIEluIHRoaXMgZmlsZSwKKyAqIHRoYXQgbWVhbnMgdXNpbmcgYSBkaWZmZXJlbnQgc2NhbGUgZm9yIGVhY2ggcmFuZ2Ugb2YgSFogdmFsdWVzIChhcworICogZGVmaW5lZCBpbiB0aW1leC5oKS4KKyAqCisgKiBGb3IgdGhvc2Ugd2hvIHdhbnQgdG8ga25vdywgZ2NjIHdpbGwgZ2l2ZSBhIDY0LWJpdCByZXN1bHQgZnJvbSBhICIqIgorICogb3BlcmF0b3IgaWYgdGhlIHJlc3VsdCBpcyBhIGxvbmcgbG9uZyBBTkQgYXQgbGVhc3Qgb25lIG9mIHRoZQorICogb3BlcmFuZHMgaXMgY2FzdCB0byBsb25nIGxvbmcgKHVzdWFsbHkganVzdCBwcmlvciB0byB0aGUgIioiIHNvIGFzCisgKiBub3QgdG8gY29uZnVzZSBpdCBpbnRvIHRoaW5raW5nIGl0IHJlYWxseSBoYXMgYSA2NC1iaXQgb3BlcmFuZCwKKyAqIHdoaWNoLCBidXkgdGhlIHdheSwgaXQgY2FuIGRvLCBidXQgaXQgdGFrZSBtb3JlIGNvZGUgYW5kIGF0IGxlYXN0IDIKKyAqIG1weXMpLgorCisgKiBXZSBhbHNvIG5lZWQgdG8gYmUgYXdhcmUgdGhhdCBvbmUgc2Vjb25kIGluIG5hbm9zZWNvbmRzIGlzIG9ubHkgYQorICogY291cGxlIG9mIGJpdHMgYXdheSBmcm9tIG92ZXJmbG93aW5nIGEgMzItYml0IHdvcmQsIHNvIHdlIE1VU1QgdXNlCisgKiA2NC1iaXRzIHRvIGdldCB0aGUgZnVsbCByYW5nZSB0aW1lIGluIG5hbm9zZWNvbmRzLgorCisgKi8KKworLyoKKyAqIEhlcmUgYXJlIHRoZSBzY2FsZXMgd2Ugd2lsbCB1c2UuICBPbmUgZm9yIHNlY29uZHMsIG5hbm9zZWNvbmRzIGFuZAorICogbWljcm9zZWNvbmRzLgorICoKKyAqIFdpdGhpbiB0aGUgbGltaXRzIG9mIGNwcCB3ZSBkbyBhIHJvdWdoIGN1dCBhdCB0aGUgU0VDX0pJRkZJRV9TQyBhbmQKKyAqIGNoZWNrIGlmIHRoZSBzaWduIGJpdCBpcyBzZXQuICBJZiBub3QsIHdlIGJ1bXAgdGhlIHNoaWZ0IGNvdW50IGJ5IDEuCisgKiAoR2V0cyBhbiBleHRyYSBiaXQgb2YgcHJlY2lzaW9uIHdoZXJlIHdlIGNhbiB1c2UgaXQuKQorICogV2Uga25vdyBpdCBpcyBzZXQgZm9yIEhaID0gMTAyNCBhbmQgSFogPSAxMDAgbm90IGZvciAxMDAwLgorICogSGF2ZW4ndCB0ZXN0ZWQgb3RoZXJzLgorCisgKiBMaW1pdHMgb2YgY3BwIChmb3IgI2lmIGV4cHJlc3Npb25zKSBvbmx5IGxvbmcgKG5vIGxvbmcgbG9uZyksIGJ1dAorICogdGhlbiB3ZSBvbmx5IG5lZWQgdGhlIG1vc3Qgc2lnbmljYW50IGJpdC4KKyAqLworCisjZGVmaW5lIFNFQ19KSUZGSUVfU0MgKDMxIC0gU0hJRlRfSFopCisjaWYgISgoKChOU0VDX1BFUl9TRUMgPDwgMikgLyBUSUNLX05TRUMpIDw8IChTRUNfSklGRklFX1NDIC0gMikpICYgMHg4MDAwMDAwMCkKKyN1bmRlZiBTRUNfSklGRklFX1NDCisjZGVmaW5lIFNFQ19KSUZGSUVfU0MgKDMyIC0gU0hJRlRfSFopCisjZW5kaWYKKyNkZWZpbmUgTlNFQ19KSUZGSUVfU0MgKFNFQ19KSUZGSUVfU0MgKyAyOSkKKyNkZWZpbmUgVVNFQ19KSUZGSUVfU0MgKFNFQ19KSUZGSUVfU0MgKyAxOSkKKyNkZWZpbmUgU0VDX0NPTlZFUlNJT04gKCh1bnNpZ25lZCBsb25nKSgoKCh1NjQpTlNFQ19QRVJfU0VDIDw8IFNFQ19KSUZGSUVfU0MpICtcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJQ0tfTlNFQyAtMSkgLyAodTY0KVRJQ0tfTlNFQykpCisKKyNkZWZpbmUgTlNFQ19DT05WRVJTSU9OICgodW5zaWduZWQgbG9uZykoKCgodTY0KTEgPDwgTlNFQ19KSUZGSUVfU0MpICtcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVElDS19OU0VDIC0xKSAvICh1NjQpVElDS19OU0VDKSkKKyNkZWZpbmUgVVNFQ19DT05WRVJTSU9OICBcCisgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgbG9uZykoKCgodTY0KU5TRUNfUEVSX1VTRUMgPDwgVVNFQ19KSUZGSUVfU0MpICtcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVElDS19OU0VDIC0xKSAvICh1NjQpVElDS19OU0VDKSkKKy8qCisgKiBVU0VDX1JPVU5EIGlzIHVzZWQgaW4gdGhlIHRpbWV2YWwgdG8gamlmZmllIGNvbnZlcnNpb24uICBTZWUgdGhlcmUKKyAqIGZvciBtb3JlIGRldGFpbHMuICBJdCBpcyB0aGUgc2NhbGVkIHJlc29sdXRpb24gcm91bmRpbmcgdmFsdWUuICBOb3RlCisgKiB0aGF0IGl0IGlzIGEgNjQtYml0IHZhbHVlLiAgU2luY2UsIHdoZW4gaXQgaXMgYXBwbGllZCwgd2UgYXJlIGFscmVhZHkKKyAqIGluIGppZmZpZXMgKGFsYml0IHNjYWxlZCksIGl0IGlzIG5vdGhpbmcgYnV0IHRoZSBiaXRzIHdlIHdpbGwgc2hpZnQKKyAqIG9mZi4KKyAqLworI2RlZmluZSBVU0VDX1JPVU5EICh1NjQpKCgodTY0KTEgPDwgVVNFQ19KSUZGSUVfU0MpIC0gMSkKKy8qCisgKiBUaGUgbWF4aW11bSBqaWZmaWUgdmFsdWUgaXMgKE1BWF9JTlQgPj4gMSkuICBIZXJlIHdlIHRyYW5zbGF0ZSB0aGF0CisgKiBpbnRvIHNlY29uZHMuICBUaGUgNjQtYml0IGNhc2Ugd2lsbCBvdmVyZmxvdyBpZiB3ZSBhcmUgbm90IGNhcmVmdWwsCisgKiBzbyB1c2UgdGhlIG1lc3N5IFNIX0RJViBtYWNybyB0byBkbyBpdC4gIFN0aWxsIGFsbCBjb25zdGFudHMuCisgKi8KKyNpZiBCSVRTX1BFUl9MT05HIDwgNjQKKyMgZGVmaW5lIE1BWF9TRUNfSU5fSklGRklFUyBcCisJKGxvbmcpKCh1NjQpKCh1NjQpTUFYX0pJRkZZX09GRlNFVCAqIFRJQ0tfTlNFQykgLyBOU0VDX1BFUl9TRUMpCisjZWxzZQkvKiB0YWtlIGNhcmUgb2Ygb3ZlcmZsb3cgb24gNjQgYml0cyBtYWNoaW5lcyAqLworIyBkZWZpbmUgTUFYX1NFQ19JTl9KSUZGSUVTIFwKKwkoU0hfRElWKChNQVhfSklGRllfT0ZGU0VUID4+IFNFQ19KSUZGSUVfU0MpICogVElDS19OU0VDLCBOU0VDX1BFUl9TRUMsIDEpIC0gMSkKKworI2VuZGlmCisKKy8qCisgKiBDb252ZXJ0IGppZmZpZXMgdG8gbWlsbGlzZWNvbmRzIGFuZCBiYWNrLgorICoKKyAqIEF2b2lkIHVubmVjZXNzYXJ5IG11bHRpcGxpY2F0aW9ucy9kaXZpc2lvbnMgaW4gdGhlCisgKiB0d28gbW9zdCBjb21tb24gSFogY2FzZXM6CisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGppZmZpZXNfdG9fbXNlY3MoY29uc3QgdW5zaWduZWQgbG9uZyBqKQoreworI2lmIEhaIDw9IDEwMDAgJiYgISgxMDAwICUgSFopCisJcmV0dXJuICgxMDAwIC8gSFopICogajsKKyNlbGlmIEhaID4gMTAwMCAmJiAhKEhaICUgMTAwMCkKKwlyZXR1cm4gKGogKyAoSFogLyAxMDAwKSAtIDEpLyhIWiAvIDEwMDApOworI2Vsc2UKKwlyZXR1cm4gKGogKiAxMDAwKSAvIEhaOworI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGppZmZpZXNfdG9fdXNlY3MoY29uc3QgdW5zaWduZWQgbG9uZyBqKQoreworI2lmIEhaIDw9IDEwMDAwMDAgJiYgISgxMDAwMDAwICUgSFopCisJcmV0dXJuICgxMDAwMDAwIC8gSFopICogajsKKyNlbGlmIEhaID4gMTAwMDAwMCAmJiAhKEhaICUgMTAwMDAwMCkKKwlyZXR1cm4gKGogKyAoSFogLyAxMDAwMDAwKSAtIDEpLyhIWiAvIDEwMDAwMDApOworI2Vsc2UKKwlyZXR1cm4gKGogKiAxMDAwMDAwKSAvIEhaOworI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtc2Vjc190b19qaWZmaWVzKGNvbnN0IHVuc2lnbmVkIGludCBtKQoreworCWlmIChtID4gamlmZmllc190b19tc2VjcyhNQVhfSklGRllfT0ZGU0VUKSkKKwkJcmV0dXJuIE1BWF9KSUZGWV9PRkZTRVQ7CisjaWYgSFogPD0gMTAwMCAmJiAhKDEwMDAgJSBIWikKKwlyZXR1cm4gKG0gKyAoMTAwMCAvIEhaKSAtIDEpIC8gKDEwMDAgLyBIWik7CisjZWxpZiBIWiA+IDEwMDAgJiYgIShIWiAlIDEwMDApCisJcmV0dXJuIG0gKiAoSFogLyAxMDAwKTsKKyNlbHNlCisJcmV0dXJuIChtICogSFogKyA5OTkpIC8gMTAwMDsKKyNlbmRpZgorfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdXNlY3NfdG9famlmZmllcyhjb25zdCB1bnNpZ25lZCBpbnQgdSkKK3sKKwlpZiAodSA+IGppZmZpZXNfdG9fdXNlY3MoTUFYX0pJRkZZX09GRlNFVCkpCisJCXJldHVybiBNQVhfSklGRllfT0ZGU0VUOworI2lmIEhaIDw9IDEwMDAwMDAgJiYgISgxMDAwMDAwICUgSFopCisJcmV0dXJuICh1ICsgKDEwMDAwMDAgLyBIWikgLSAxKSAvICgxMDAwMDAwIC8gSFopOworI2VsaWYgSFogPiAxMDAwMDAwICYmICEoSFogJSAxMDAwMDAwKQorCXJldHVybiB1ICogKEhaIC8gMTAwMDAwMCk7CisjZWxzZQorCXJldHVybiAodSAqIEhaICsgOTk5OTk5KSAvIDEwMDAwMDA7CisjZW5kaWYKK30KKworLyoKKyAqIFRoZSBUSUNLX05TRUMgLSAxIHJvdW5kcyB1cCB0aGUgdmFsdWUgdG8gdGhlIG5leHQgcmVzb2x1dGlvbi4gIE5vdGUKKyAqIHRoYXQgYSByZW1haW5kZXIgc3VidHJhY3QgaGVyZSB3b3VsZCBub3QgZG8gdGhlIHJpZ2h0IHRoaW5nIGFzIHRoZQorICogcmVzb2x1dGlvbiB2YWx1ZXMgZG9uJ3QgZmFsbCBvbiBzZWNvbmQgYm91bmRyaWVzLiAgSS5lLiB0aGUgbGluZToKKyAqIG5zZWMgLT0gbnNlYyAlIFRJQ0tfTlNFQzsgaXMgTk9UIGEgY29ycmVjdCByZXNvbHV0aW9uIHJvdW5kaW5nLgorICoKKyAqIFJhdGhlciwgd2UganVzdCBzaGlmdCB0aGUgYml0cyBvZmYgdGhlIHJpZ2h0LgorICoKKyAqIFRoZSA+PiAoTlNFQ19KSUZGSUVfU0MgLSBTRUNfSklGRklFX1NDKSBjb252ZXJ0cyB0aGUgc2NhbGVkIG5zZWMKKyAqIHZhbHVlIHRvIGEgc2NhbGVkIHNlY29uZCB2YWx1ZS4KKyAqLworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZwordGltZXNwZWNfdG9famlmZmllcyhjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKnZhbHVlKQoreworCXVuc2lnbmVkIGxvbmcgc2VjID0gdmFsdWUtPnR2X3NlYzsKKwlsb25nIG5zZWMgPSB2YWx1ZS0+dHZfbnNlYyArIFRJQ0tfTlNFQyAtIDE7CisKKwlpZiAoc2VjID49IE1BWF9TRUNfSU5fSklGRklFUyl7CisJCXNlYyA9IE1BWF9TRUNfSU5fSklGRklFUzsKKwkJbnNlYyA9IDA7CisJfQorCXJldHVybiAoKCh1NjQpc2VjICogU0VDX0NPTlZFUlNJT04pICsKKwkJKCgodTY0KW5zZWMgKiBOU0VDX0NPTlZFUlNJT04pID4+CisJCSAoTlNFQ19KSUZGSUVfU0MgLSBTRUNfSklGRklFX1NDKSkpID4+IFNFQ19KSUZGSUVfU0M7CisKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZAoramlmZmllc190b190aW1lc3BlYyhjb25zdCB1bnNpZ25lZCBsb25nIGppZmZpZXMsIHN0cnVjdCB0aW1lc3BlYyAqdmFsdWUpCit7CisJLyoKKwkgKiBDb252ZXJ0IGppZmZpZXMgdG8gbmFub3NlY29uZHMgYW5kIHNlcGFyYXRlIHdpdGgKKwkgKiBvbmUgZGl2aWRlLgorCSAqLworCXU2NCBuc2VjID0gKHU2NClqaWZmaWVzICogVElDS19OU0VDOworCXZhbHVlLT50dl9zZWMgPSBkaXZfbG9uZ19sb25nX3JlbShuc2VjLCBOU0VDX1BFUl9TRUMsICZ2YWx1ZS0+dHZfbnNlYyk7Cit9CisKKy8qIFNhbWUgZm9yICJ0aW1ldmFsIgorICoKKyAqIFdlbGwsIGFsbW9zdC4gIFRoZSBwcm9ibGVtIGhlcmUgaXMgdGhhdCB0aGUgcmVhbCBzeXN0ZW0gcmVzb2x1dGlvbiBpcworICogaW4gbmFub3NlY29uZHMgYW5kIHRoZSB2YWx1ZSBiZWluZyBjb252ZXJ0ZWQgaXMgaW4gbWljcm8gc2Vjb25kcy4KKyAqIEFsc28gZm9yIHNvbWUgbWFjaGluZXMgKHRob3NlIHRoYXQgdXNlIEhaID0gMTAyNCwgaW4tcGFydGljdWxhciksCisgKiB0aGVyZSBpcyBhIExBUkdFIGVycm9yIGluIHRoZSB0aWNrIHNpemUgaW4gbWljcm9zZWNvbmRzLgorCisgKiBUaGUgc29sdXRpb24gd2UgdXNlIGlzIHRvIGRvIHRoZSByb3VuZGluZyBBRlRFUiB3ZSBjb252ZXJ0IHRoZQorICogbWljcm9zZWNvbmQgcGFydC4gIFRodXMgdGhlIFVTRUNfUk9VTkQsIHRoZSBiaXRzIHRvIGJlIHNoaWZ0ZWQgb2ZmLgorICogSW5zdHJ1Y3Rpb24gd2lzZSwgdGhpcyBzaG91bGQgY29zdCBvbmx5IGFuIGFkZGl0aW9uYWwgYWRkIHdpdGggY2FycnkKKyAqIGluc3RydWN0aW9uIGFib3ZlIHRoZSB3YXkgaXQgd2FzIGRvbmUgYWJvdmUuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcKK3RpbWV2YWxfdG9famlmZmllcyhjb25zdCBzdHJ1Y3QgdGltZXZhbCAqdmFsdWUpCit7CisJdW5zaWduZWQgbG9uZyBzZWMgPSB2YWx1ZS0+dHZfc2VjOworCWxvbmcgdXNlYyA9IHZhbHVlLT50dl91c2VjOworCisJaWYgKHNlYyA+PSBNQVhfU0VDX0lOX0pJRkZJRVMpeworCQlzZWMgPSBNQVhfU0VDX0lOX0pJRkZJRVM7CisJCXVzZWMgPSAwOworCX0KKwlyZXR1cm4gKCgodTY0KXNlYyAqIFNFQ19DT05WRVJTSU9OKSArCisJCSgoKHU2NCl1c2VjICogVVNFQ19DT05WRVJTSU9OICsgVVNFQ19ST1VORCkgPj4KKwkJIChVU0VDX0pJRkZJRV9TQyAtIFNFQ19KSUZGSUVfU0MpKSkgPj4gU0VDX0pJRkZJRV9TQzsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZAoramlmZmllc190b190aW1ldmFsKGNvbnN0IHVuc2lnbmVkIGxvbmcgamlmZmllcywgc3RydWN0IHRpbWV2YWwgKnZhbHVlKQoreworCS8qCisJICogQ29udmVydCBqaWZmaWVzIHRvIG5hbm9zZWNvbmRzIGFuZCBzZXBhcmF0ZSB3aXRoCisJICogb25lIGRpdmlkZS4KKwkgKi8KKwl1NjQgbnNlYyA9ICh1NjQpamlmZmllcyAqIFRJQ0tfTlNFQzsKKwl2YWx1ZS0+dHZfc2VjID0gZGl2X2xvbmdfbG9uZ19yZW0obnNlYywgTlNFQ19QRVJfU0VDLCAmdmFsdWUtPnR2X3VzZWMpOworCXZhbHVlLT50dl91c2VjIC89IE5TRUNfUEVSX1VTRUM7Cit9CisKKy8qCisgKiBDb252ZXJ0IGppZmZpZXMvamlmZmllc182NCB0byBjbG9ja190IGFuZCBiYWNrLgorICovCitzdGF0aWMgaW5saW5lIGNsb2NrX3QgamlmZmllc190b19jbG9ja190KGxvbmcgeCkKK3sKKyNpZiAoVElDS19OU0VDICUgKE5TRUNfUEVSX1NFQyAvIFVTRVJfSFopKSA9PSAwCisJcmV0dXJuIHggLyAoSFogLyBVU0VSX0haKTsKKyNlbHNlCisJdTY0IHRtcCA9ICh1NjQpeCAqIFRJQ0tfTlNFQzsKKwlkb19kaXYodG1wLCAoTlNFQ19QRVJfU0VDIC8gVVNFUl9IWikpOworCXJldHVybiAobG9uZyl0bXA7CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGNsb2NrX3RfdG9famlmZmllcyh1bnNpZ25lZCBsb25nIHgpCit7CisjaWYgKEhaICUgVVNFUl9IWik9PTAKKwlpZiAoeCA+PSB+MFVMIC8gKEhaIC8gVVNFUl9IWikpCisJCXJldHVybiB+MFVMOworCXJldHVybiB4ICogKEhaIC8gVVNFUl9IWik7CisjZWxzZQorCXU2NCBqaWY7CisKKwkvKiBEb24ndCB3b3JyeSBhYm91dCBsb3NzIG9mIHByZWNpc2lvbiBoZXJlIC4uICovCisJaWYgKHggPj0gfjBVTCAvIEhaICogVVNFUl9IWikKKwkJcmV0dXJuIH4wVUw7CisKKwkvKiAuLiBidXQgZG8gdHJ5IHRvIGNvbnRhaW4gaXQgaGVyZSAqLworCWppZiA9IHggKiAodTY0KSBIWjsKKwlkb19kaXYoamlmLCBVU0VSX0haKTsKKwlyZXR1cm4gamlmOworI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgdTY0IGppZmZpZXNfNjRfdG9fY2xvY2tfdCh1NjQgeCkKK3sKKyNpZiAoVElDS19OU0VDICUgKE5TRUNfUEVSX1NFQyAvIFVTRVJfSFopKSA9PSAwCisJZG9fZGl2KHgsIEhaIC8gVVNFUl9IWik7CisjZWxzZQorCS8qCisJICogVGhlcmUgYXJlIGJldHRlciB3YXlzIHRoYXQgZG9uJ3Qgb3ZlcmZsb3cgZWFybHksCisJICogYnV0IGV2ZW4gdGhpcyBkb2Vzbid0IG92ZXJmbG93IGluIGh1bmRyZWRzIG9mIHllYXJzCisJICogaW4gNjQgYml0cywgc28uLgorCSAqLworCXggKj0gVElDS19OU0VDOworCWRvX2Rpdih4LCAoTlNFQ19QRVJfU0VDIC8gVVNFUl9IWikpOworI2VuZGlmCisJcmV0dXJuIHg7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTY0IG5zZWNfdG9fY2xvY2tfdCh1NjQgeCkKK3sKKyNpZiAoTlNFQ19QRVJfU0VDICUgVVNFUl9IWikgPT0gMAorCWRvX2Rpdih4LCAoTlNFQ19QRVJfU0VDIC8gVVNFUl9IWikpOworI2VsaWYgKFVTRVJfSFogJSA1MTIpID09IDAKKwl4ICo9IFVTRVJfSFovNTEyOworCWRvX2Rpdih4LCAoTlNFQ19QRVJfU0VDIC8gNTEyKSk7CisjZWxzZQorCS8qCisgICAgICAgICAqIG1heCByZWxhdGl2ZSBlcnJvciA1LjdlLTggKDEuOHMgcGVyIHllYXIpIGZvciBVU0VSX0haIDw9IDEwMjQsCisgICAgICAgICAqIG92ZXJmbG93IGFmdGVyIDY0Ljk5IHllYXJzLgorICAgICAgICAgKiBleGFjdCBmb3IgSFo9NjAsIDcyLCA5MCwgMTIwLCAxNDQsIDE4MCwgMzAwLCA2MDAsIDkwMCwgLi4uCisgICAgICAgICAqLworCXggKj0gOTsKKwlkb19kaXYoeCwgKHVuc2lnbmVkIGxvbmcpKCg5dWxsICogTlNFQ19QRVJfU0VDICsgKFVTRVJfSFovMikpCisJICAgICAgICAgICAgICAgICAgICAgICAgICAvIFVTRVJfSFopKTsKKyNlbmRpZgorCXJldHVybiB4OworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvam91cm5hbC1oZWFkLmggYi9pbmNsdWRlL2xpbnV4L2pvdXJuYWwtaGVhZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNjJkMWUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2pvdXJuYWwtaGVhZC5oCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBpbmNsdWRlL2xpbnV4L2pvdXJuYWwtaGVhZC5oCisgKgorICogYnVmZmVyX2hlYWQgZmllbGRzIGZvciBKQkQKKyAqCisgKiAyNyBNYXkgMjAwMSBBbmRyZXcgTW9ydG9uIDxha3BtQGRpZ2VvLmNvbT4KKyAqCUNyZWF0ZWQgLSBwdWxsZWQgb3V0IG9mIGZzLmgKKyAqLworCisjaWZuZGVmIEpPVVJOQUxfSEVBRF9IX0lOQ0xVREVECisjZGVmaW5lIEpPVVJOQUxfSEVBRF9IX0lOQ0xVREVECisKK3R5cGVkZWYgdW5zaWduZWQgaW50CQl0aWRfdDsJCS8qIFVuaXF1ZSB0cmFuc2FjdGlvbiBJRCAqLwordHlwZWRlZiBzdHJ1Y3QgdHJhbnNhY3Rpb25fcwl0cmFuc2FjdGlvbl90OwkvKiBDb21wb3VuZCB0cmFuc2FjdGlvbiB0eXBlICovCitzdHJ1Y3QgYnVmZmVyX2hlYWQ7CisKK3N0cnVjdCBqb3VybmFsX2hlYWQgeworCS8qCisJICogUG9pbnRzIGJhY2sgdG8gb3VyIGJ1ZmZlcl9oZWFkLiBbamJkX2xvY2tfYmhfam91cm5hbF9oZWFkKCldCisJICovCisJc3RydWN0IGJ1ZmZlcl9oZWFkICpiX2JoOworCisJLyoKKwkgKiBSZWZlcmVuY2UgY291bnQgLSBzZWUgZGVzY3JpcHRpb24gaW4gam91cm5hbC5jCisJICogW2piZF9sb2NrX2JoX2pvdXJuYWxfaGVhZCgpXQorCSAqLworCWludCBiX2pjb3VudDsKKworCS8qCisJICogSm91cm5hbGxpbmcgbGlzdCBmb3IgdGhpcyBidWZmZXIgW2piZF9sb2NrX2JoX3N0YXRlKCldCisJICovCisJdW5zaWduZWQgYl9qbGlzdDsKKworCS8qCisJICogVGhpcyBmbGFnIHNpZ25hbHMgdGhlIGJ1ZmZlciBoYXMgYmVlbiBtb2RpZmllZCBieQorCSAqIHRoZSBjdXJyZW50bHkgcnVubmluZyB0cmFuc2FjdGlvbgorCSAqIFtqYmRfbG9ja19iaF9zdGF0ZSgpXQorCSAqLworCXVuc2lnbmVkIGJfbW9kaWZpZWQ7CisKKwkvKgorCSAqIENvcHkgb2YgdGhlIGJ1ZmZlciBkYXRhIGZyb3plbiBmb3Igd3JpdGluZyB0byB0aGUgbG9nLgorCSAqIFtqYmRfbG9ja19iaF9zdGF0ZSgpXQorCSAqLworCWNoYXIgKmJfZnJvemVuX2RhdGE7CisKKwkvKgorCSAqIFBvaW50ZXIgdG8gYSBzYXZlZCBjb3B5IG9mIHRoZSBidWZmZXIgY29udGFpbmluZyBubyB1bmNvbW1pdHRlZAorCSAqIGRlYWxsb2NhdGlvbiByZWZlcmVuY2VzLCBzbyB0aGF0IGFsbG9jYXRpb25zIGNhbiBhdm9pZCBvdmVyd3JpdGluZworCSAqIHVuY29tbWl0dGVkIGRlbGV0ZXMuIFtqYmRfbG9ja19iaF9zdGF0ZSgpXQorCSAqLworCWNoYXIgKmJfY29tbWl0dGVkX2RhdGE7CisKKwkvKgorCSAqIFBvaW50ZXIgdG8gdGhlIGNvbXBvdW5kIHRyYW5zYWN0aW9uIHdoaWNoIG93bnMgdGhpcyBidWZmZXIncworCSAqIG1ldGFkYXRhOiBlaXRoZXIgdGhlIHJ1bm5pbmcgdHJhbnNhY3Rpb24gb3IgdGhlIGNvbW1pdHRpbmcKKwkgKiB0cmFuc2FjdGlvbiAoaWYgdGhlcmUgaXMgb25lKS4gIE9ubHkgYXBwbGllcyB0byBidWZmZXJzIG9uIGEKKwkgKiB0cmFuc2FjdGlvbidzIGRhdGEgb3IgbWV0YWRhdGEgam91cm5hbGluZyBsaXN0LgorCSAqIFtqX2xpc3RfbG9ja10gW2piZF9sb2NrX2JoX3N0YXRlKCldCisJICovCisJdHJhbnNhY3Rpb25fdCAqYl90cmFuc2FjdGlvbjsKKworCS8qCisJICogUG9pbnRlciB0byB0aGUgcnVubmluZyBjb21wb3VuZCB0cmFuc2FjdGlvbiB3aGljaCBpcyBjdXJyZW50bHkKKwkgKiBtb2RpZnlpbmcgdGhlIGJ1ZmZlcidzIG1ldGFkYXRhLCBpZiB0aGVyZSB3YXMgYWxyZWFkeSBhIHRyYW5zYWN0aW9uCisJICogY29tbWl0dGluZyBpdCB3aGVuIHRoZSBuZXcgdHJhbnNhY3Rpb24gdG91Y2hlZCBpdC4KKwkgKiBbdF9saXN0X2xvY2tdIFtqYmRfbG9ja19iaF9zdGF0ZSgpXQorCSAqLworCXRyYW5zYWN0aW9uX3QgKmJfbmV4dF90cmFuc2FjdGlvbjsKKworCS8qCisJICogRG91Ymx5LWxpbmtlZCBsaXN0IG9mIGJ1ZmZlcnMgb24gYSB0cmFuc2FjdGlvbidzIGRhdGEsIG1ldGFkYXRhIG9yCisJICogZm9yZ2V0IHF1ZXVlLiBbdF9saXN0X2xvY2tdIFtqYmRfbG9ja19iaF9zdGF0ZSgpXQorCSAqLworCXN0cnVjdCBqb3VybmFsX2hlYWQgKmJfdG5leHQsICpiX3RwcmV2OworCisJLyoKKwkgKiBQb2ludGVyIHRvIHRoZSBjb21wb3VuZCB0cmFuc2FjdGlvbiBhZ2FpbnN0IHdoaWNoIHRoaXMgYnVmZmVyCisJICogaXMgY2hlY2twb2ludGVkLiAgT25seSBkaXJ0eSBidWZmZXJzIGNhbiBiZSBjaGVja3BvaW50ZWQuCisJICogW2pfbGlzdF9sb2NrXQorCSAqLworCXRyYW5zYWN0aW9uX3QgKmJfY3BfdHJhbnNhY3Rpb247CisKKwkvKgorCSAqIERvdWJseS1saW5rZWQgbGlzdCBvZiBidWZmZXJzIHN0aWxsIHJlbWFpbmluZyB0byBiZSBmbHVzaGVkCisJICogYmVmb3JlIGFuIG9sZCB0cmFuc2FjdGlvbiBjYW4gYmUgY2hlY2twb2ludGVkLgorCSAqIFtqX2xpc3RfbG9ja10KKwkgKi8KKwlzdHJ1Y3Qgam91cm5hbF9oZWFkICpiX2NwbmV4dCwgKmJfY3BwcmV2OworfTsKKworI2VuZGlmCQkvKiBKT1VSTkFMX0hFQURfSF9JTkNMVURFRCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9qb3lzdGljay5oIGIvaW5jbHVkZS9saW51eC9qb3lzdGljay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3ZTBhYjYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2pveXN0aWNrLmgKQEAgLTAsMCArMSwxMjggQEAKKyNpZm5kZWYgX0xJTlVYX0pPWVNUSUNLX0gKKyNkZWZpbmUgX0xJTlVYX0pPWVNUSUNLX0gKKworLyoKKyAqICRJZDogam95c3RpY2suaCx2IDEuMyAyMDAwLzExLzMwIDExOjA3OjA1IHZvanRlY2ggRXhwICQKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAgVm9qdGVjaCBQYXZsaWsKKyAqCisgKiAgU3BvbnNvcmVkIGJ5IFN1U0UKKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiAKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKiAKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqIAorICogU2hvdWxkIHlvdSBuZWVkIHRvIGNvbnRhY3QgbWUsIHRoZSBhdXRob3IsIHlvdSBjYW4gZG8gc28gZWl0aGVyIGJ5CisgKiBlLW1haWwgLSBtYWlsIHlvdXIgbWVzc2FnZSB0byA8dm9qdGVjaEBzdXNlLmN6Piwgb3IgYnkgcGFwZXIgbWFpbDoKKyAqIFZvanRlY2ggUGF2bGlrLCBVY2l0ZWxza2EgMTU3NiwgUHJhZ3VlIDgsIDE4MiAwMCBDemVjaCBSZXB1YmxpYworICovCisKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorCisvKgorICogVmVyc2lvbgorICovCisKKyNkZWZpbmUgSlNfVkVSU0lPTgkJMHgwMjAxMDAKKworLyoKKyAqIFR5cGVzIGFuZCBjb25zdGFudHMgZm9yIHJlYWRpbmcgZnJvbSAvZGV2L2pzCisgKi8KKworI2RlZmluZSBKU19FVkVOVF9CVVRUT04JCTB4MDEJLyogYnV0dG9uIHByZXNzZWQvcmVsZWFzZWQgKi8KKyNkZWZpbmUgSlNfRVZFTlRfQVhJUwkJMHgwMgkvKiBqb3lzdGljayBtb3ZlZCAqLworI2RlZmluZSBKU19FVkVOVF9JTklUCQkweDgwCS8qIGluaXRpYWwgc3RhdGUgb2YgZGV2aWNlICovCisKK3N0cnVjdCBqc19ldmVudCB7CisJX191MzIgdGltZTsJLyogZXZlbnQgdGltZXN0YW1wIGluIG1pbGxpc2Vjb25kcyAqLworCV9fczE2IHZhbHVlOwkvKiB2YWx1ZSAqLworCV9fdTggdHlwZTsJLyogZXZlbnQgdHlwZSAqLworCV9fdTggbnVtYmVyOwkvKiBheGlzL2J1dHRvbiBudW1iZXIgKi8KK307CisKKy8qCisgKiBJT0NUTCBjb21tYW5kcyBmb3Igam95c3RpY2sgZHJpdmVyCisgKi8KKworI2RlZmluZSBKU0lPQ0dWRVJTSU9OCQlfSU9SKCdqJywgMHgwMSwgX191MzIpCQkJCS8qIGdldCBkcml2ZXIgdmVyc2lvbiAqLworCisjZGVmaW5lIEpTSU9DR0FYRVMJCV9JT1IoJ2onLCAweDExLCBfX3U4KQkJCQkvKiBnZXQgbnVtYmVyIG9mIGF4ZXMgKi8KKyNkZWZpbmUgSlNJT0NHQlVUVE9OUwkJX0lPUignaicsIDB4MTIsIF9fdTgpCQkJCS8qIGdldCBudW1iZXIgb2YgYnV0dG9ucyAqLworI2RlZmluZSBKU0lPQ0dOQU1FKGxlbikJCV9JT0MoX0lPQ19SRUFELCAnaicsIDB4MTMsIGxlbikJCQkvKiBnZXQgaWRlbnRpZmllciBzdHJpbmcgKi8KKworI2RlZmluZSBKU0lPQ1NDT1JSCQlfSU9XKCdqJywgMHgyMSwgc3RydWN0IGpzX2NvcnIpCQkJLyogc2V0IGNvcnJlY3Rpb24gdmFsdWVzICovCisjZGVmaW5lIEpTSU9DR0NPUlIJCV9JT1IoJ2onLCAweDIyLCBzdHJ1Y3QganNfY29ycikJCQkvKiBnZXQgY29ycmVjdGlvbiB2YWx1ZXMgKi8KKworI2RlZmluZSBKU0lPQ1NBWE1BUAkJX0lPVygnaicsIDB4MzEsIF9fdThbQUJTX01BWCArIDFdKQkJLyogc2V0IGF4aXMgbWFwcGluZyAqLworI2RlZmluZSBKU0lPQ0dBWE1BUAkJX0lPUignaicsIDB4MzIsIF9fdThbQUJTX01BWCArIDFdKQkJLyogZ2V0IGF4aXMgbWFwcGluZyAqLworI2RlZmluZSBKU0lPQ1NCVE5NQVAJCV9JT1coJ2onLCAweDMzLCBfX3UxNltLRVlfTUFYIC0gQlROX01JU0MgKyAxXSkJLyogc2V0IGJ1dHRvbiBtYXBwaW5nICovCisjZGVmaW5lIEpTSU9DR0JUTk1BUAkJX0lPUignaicsIDB4MzQsIF9fdTE2W0tFWV9NQVggLSBCVE5fTUlTQyArIDFdKQkvKiBnZXQgYnV0dG9uIG1hcHBpbmcgKi8KKworLyoKKyAqIFR5cGVzIGFuZCBjb25zdGFudHMgZm9yIGdldC9zZXQgY29ycmVjdGlvbgorICovCisKKyNkZWZpbmUgSlNfQ09SUl9OT05FCQkweDAwCS8qIHJldHVybnMgcmF3IHZhbHVlcyAqLworI2RlZmluZSBKU19DT1JSX0JST0tFTgkJMHgwMQkvKiBicm9rZW4gbGluZSAqLworCitzdHJ1Y3QganNfY29yciB7CisJX19zMzIgY29lZls4XTsKKwlfX3MxNiBwcmVjOworCV9fdTE2IHR5cGU7Cit9OworCisvKgorICogdjAueCBjb21wYXRpYmlsaXR5IGRlZmluaXRpb25zCisgKi8KKworI2RlZmluZSBKU19SRVRVUk4JCXNpemVvZihzdHJ1Y3QgSlNfREFUQV9UWVBFKQorI2RlZmluZSBKU19UUlVFCQkJMQorI2RlZmluZSBKU19GQUxTRQkJMAorI2RlZmluZSBKU19YXzAJCQkweDAxCisjZGVmaW5lIEpTX1lfMAkJCTB4MDIKKyNkZWZpbmUgSlNfWF8xCQkJMHgwNAorI2RlZmluZSBKU19ZXzEJCQkweDA4CisjZGVmaW5lIEpTX01BWAkJCTIKKworI2RlZmluZSBKU19ERUZfVElNRU9VVAkJMHgxMzAwCisjZGVmaW5lIEpTX0RFRl9DT1JSCQkwCisjZGVmaW5lIEpTX0RFRl9USU1FTElNSVQJMTBMCisKKyNkZWZpbmUgSlNfU0VUX0NBTAkJMQorI2RlZmluZSBKU19HRVRfQ0FMCQkyCisjZGVmaW5lIEpTX1NFVF9USU1FT1VUCQkzCisjZGVmaW5lIEpTX0dFVF9USU1FT1VUCQk0CisjZGVmaW5lIEpTX1NFVF9USU1FTElNSVQJNQorI2RlZmluZSBKU19HRVRfVElNRUxJTUlUCTYKKyNkZWZpbmUgSlNfR0VUX0FMTAkJNworI2RlZmluZSBKU19TRVRfQUxMCQk4CisKK3N0cnVjdCBKU19EQVRBX1RZUEUgeworCWludCBidXR0b25zOworCWludCB4OworCWludCB5OworfTsKKworc3RydWN0IEpTX0RBVEFfU0FWRV9UWVBFIHsKKwlpbnQgSlNfVElNRU9VVDsKKwlpbnQgQlVTWTsKKwlsb25nIEpTX0VYUElSRVRJTUU7CisJbG9uZyBKU19USU1FTElNSVQ7CisJc3RydWN0IEpTX0RBVEFfVFlQRSBKU19TQVZFOworCXN0cnVjdCBKU19EQVRBX1RZUEUgSlNfQ09SUjsKK307CisKKyNlbmRpZiAvKiBfTElOVVhfSk9ZU1RJQ0tfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rYWxsc3ltcy5oIGIvaW5jbHVkZS9saW51eC9rYWxsc3ltcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYmQwNDAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2thbGxzeW1zLmgKQEAgLTAsMCArMSw2NyBAQAorLyogUmV3cml0dGVuIGFuZCB2YXN0bHkgc2ltcGxpZmllZCBieSBSdXN0eSBSdXNzZWxsIGZvciBpbi1rZXJuZWwKKyAqIG1vZHVsZSBsb2FkZXI6CisgKiAgIENvcHlyaWdodCAyMDAyIFJ1c3R5IFJ1c3NlbGwgPHJ1c3R5QHJ1c3Rjb3JwLmNvbS5hdT4gSUJNIENvcnBvcmF0aW9uCisgKi8KKyNpZm5kZWYgX0xJTlVYX0tBTExTWU1TX0gKKyNkZWZpbmUgX0xJTlVYX0tBTExTWU1TX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjZGVmaW5lIEtTWU1fTkFNRV9MRU4gMTI3CisKKyNpZmRlZiBDT05GSUdfS0FMTFNZTVMKKy8qIExvb2t1cCB0aGUgYWRkcmVzcyBmb3IgYSBzeW1ib2wuIFJldHVybnMgMCBpZiBub3QgZm91bmQuICovCit1bnNpZ25lZCBsb25nIGthbGxzeW1zX2xvb2t1cF9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpOworCisvKiBMb29rdXAgYW4gYWRkcmVzcy4gIG1vZG5hbWUgaXMgc2V0IHRvIE5VTEwgaWYgaXQncyBpbiB0aGUga2VybmVsLiAqLworY29uc3QgY2hhciAqa2FsbHN5bXNfbG9va3VwKHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCSAgICB1bnNpZ25lZCBsb25nICpzeW1ib2xzaXplLAorCQkJICAgIHVuc2lnbmVkIGxvbmcgKm9mZnNldCwKKwkJCSAgICBjaGFyICoqbW9kbmFtZSwgY2hhciAqbmFtZWJ1Zik7CisKKy8qIFJlcGxhY2UgIiVzIiBpbiBmb3JtYXQgd2l0aCBhZGRyZXNzLCBpZiBmb3VuZCAqLworZXh0ZXJuIHZvaWQgX19wcmludF9zeW1ib2woY29uc3QgY2hhciAqZm10LCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpOworCisjZWxzZSAvKiAhQ09ORklHX0tBTExTWU1TICovCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBrYWxsc3ltc19sb29rdXBfbmFtZShjb25zdCBjaGFyICpuYW1lKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmthbGxzeW1zX2xvb2t1cCh1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkJCSAgdW5zaWduZWQgbG9uZyAqc3ltYm9sc2l6ZSwKKwkJCQkJICB1bnNpZ25lZCBsb25nICpvZmZzZXQsCisJCQkJCSAgY2hhciAqKm1vZG5hbWUsIGNoYXIgKm5hbWVidWYpCit7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qIFN0dXBpZCB0aGF0IHRoaXMgZG9lcyBub3RoaW5nLCBidXQgSSBkaWRuJ3QgY3JlYXRlIHRoaXMgbWVzcy4gKi8KKyNkZWZpbmUgX19wcmludF9zeW1ib2woZm10LCBhZGRyKQorI2VuZGlmIC8qQ09ORklHX0tBTExTWU1TKi8KKworLyogVGhpcyBtYWNybyBhbGxvd3MgdXMgdG8ga2VlcCBwcmludGsgdHlwZWNoZWNraW5nICovCitzdGF0aWMgdm9pZCBfX2NoZWNrX3ByaW50c3ltX2Zvcm1hdChjb25zdCBjaGFyICpmbXQsIC4uLikKK19fYXR0cmlidXRlX18oKGZvcm1hdChwcmludGYsMSwyKSkpOworc3RhdGljIGlubGluZSB2b2lkIF9fY2hlY2tfcHJpbnRzeW1fZm9ybWF0KGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworfQorLyogaWE2NCBhbmQgcHBjNjQgdXNlIGZ1bmN0aW9uIGRlc2NyaXB0b3JzLCB3aGljaCBjb250YWluIHRoZSByZWFsIGFkZHJlc3MgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19JQTY0KSB8fCBkZWZpbmVkKENPTkZJR19QUEM2NCkKKyNkZWZpbmUgcHJpbnRfZm5fZGVzY3JpcHRvcl9zeW1ib2woZm10LCBhZGRyKQkJXAorZG8gewkJCQkJCVwKKwl1bnNpZ25lZCBsb25nICpfX2ZhZGRyID0gKHVuc2lnbmVkIGxvbmcqKSBhZGRyOwkJXAorCXByaW50X3N5bWJvbChmbXQsIF9fZmFkZHJbMF0pOwkJXAorfSB3aGlsZSAoMCkKKyNlbHNlCisjZGVmaW5lIHByaW50X2ZuX2Rlc2NyaXB0b3Jfc3ltYm9sKGZtdCwgYWRkcikgcHJpbnRfc3ltYm9sKGZtdCwgYWRkcikKKyNlbmRpZgorCisjZGVmaW5lIHByaW50X3N5bWJvbChmbXQsIGFkZHIpCQkJXAorZG8gewkJCQkJCVwKKwlfX2NoZWNrX3ByaW50c3ltX2Zvcm1hdChmbXQsICIiKTsJXAorCV9fcHJpbnRfc3ltYm9sKGZtdCwgYWRkcik7CQlcCit9IHdoaWxlKDApCisKKyNlbmRpZiAvKl9MSU5VWF9LQUxMU1lNU19IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2JkX2RpYWNyLmggYi9pbmNsdWRlL2xpbnV4L2tiZF9kaWFjci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjMWEzZmYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2tiZF9kaWFjci5oCkBAIC0wLDAgKzEsOCBAQAorI2lmbmRlZiBfRElBQ1JfSAorI2RlZmluZSBfRElBQ1JfSAorI2luY2x1ZGUgPGxpbnV4L2tkLmg+CisKK2V4dGVybiBzdHJ1Y3Qga2JkaWFjciBhY2NlbnRfdGFibGVbXTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgYWNjZW50X3RhYmxlX3NpemU7CisKKyNlbmRpZiAvKiBfRElBQ1JfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rYmRfa2Vybi5oIGIvaW5jbHVkZS9saW51eC9rYmRfa2Vybi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0MjgxOTgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2tiZF9rZXJuLmgKQEAgLTAsMCArMSwxNTcgQEAKKyNpZm5kZWYgX0tCRF9LRVJOX0gKKyNkZWZpbmUgX0tCRF9LRVJOX0gKKworI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tleWJvYXJkLmg+CisKK2V4dGVybiBzdHJ1Y3QgdGFza2xldF9zdHJ1Y3Qga2V5Ym9hcmRfdGFza2xldDsKKworZXh0ZXJuIGludCBzaGlmdF9zdGF0ZTsKKworZXh0ZXJuIGNoYXIgKmZ1bmNfdGFibGVbTUFYX05SX0ZVTkNdOworZXh0ZXJuIGNoYXIgZnVuY19idWZbXTsKK2V4dGVybiBjaGFyICpmdW5jYnVmcHRyOworZXh0ZXJuIGludCBmdW5jYnVmc2l6ZSwgZnVuY2J1ZmxlZnQ7CisKKy8qCisgKiBrYmQtPnh4eCBjb250YWlucyB0aGUgVkMtbG9jYWwgdGhpbmdzIChmbGFnIHNldHRpbmdzIGV0Yy4uKQorICoKKyAqIE5vdGU6IGV4dGVybmFsbHkgdmlzaWJsZSBhcmUgTEVEX1NDUiwgTEVEX05VTSwgTEVEX0NBUCBkZWZpbmVkIGluIGtkLmgKKyAqICAgICAgIFRoZSBjb2RlIGluIEtER0VUTEVEIC8gS0RTRVRMRUQgZGVwZW5kcyBvbiB0aGUgaW50ZXJuYWwgYW5kCisgKiAgICAgICBleHRlcm5hbCBvcmRlciBiZWluZyB0aGUgc2FtZS4KKyAqCisgKiBOb3RlOiBsb2Nrc3RhdGUgaXMgdXNlZCBhcyBpbmRleCBpbiB0aGUgYXJyYXkga2V5X21hcC4KKyAqLworc3RydWN0IGtiZF9zdHJ1Y3QgeworCisJdW5zaWduZWQgY2hhciBsb2Nrc3RhdGU7CisvKiA4IG1vZGlmaWVycyAtIHRoZSBuYW1lcyBkbyBub3QgaGF2ZSBhbnkgbWVhbmluZyBhdCBhbGw7CisgICB0aGV5IGNhbiBiZSBhc3NvY2lhdGVkIHRvIGFyYml0cmFyaWx5IGNob3NlbiBrZXlzICovCisjZGVmaW5lIFZDX1NISUZUTE9DSwlLR19TSElGVAkvKiBzaGlmdCBsb2NrIG1vZGUgKi8KKyNkZWZpbmUgVkNfQUxUR1JMT0NLCUtHX0FMVEdSCS8qIGFsdGdyIGxvY2sgbW9kZSAqLworI2RlZmluZSBWQ19DVFJMTE9DSwlLR19DVFJMIAkvKiBjb250cm9sIGxvY2sgbW9kZSAqLworI2RlZmluZSBWQ19BTFRMT0NLCUtHX0FMVCAgCS8qIGFsdCBsb2NrIG1vZGUgKi8KKyNkZWZpbmUgVkNfU0hJRlRMTE9DSwlLR19TSElGVEwJLyogc2hpZnRsIGxvY2sgbW9kZSAqLworI2RlZmluZSBWQ19TSElGVFJMT0NLCUtHX1NISUZUUgkvKiBzaGlmdHIgbG9jayBtb2RlICovCisjZGVmaW5lIFZDX0NUUkxMTE9DSwlLR19DVFJMTCAJLyogY3RybGwgbG9jayBtb2RlICovCisjZGVmaW5lIFZDX0NUUkxSTE9DSwlLR19DVFJMUiAJLyogY3RybHIgbG9jayBtb2RlICovCisJdW5zaWduZWQgY2hhciBzbG9ja3N0YXRlOyAJLyogZm9yIGBzdGlja3knIFNoaWZ0LCBDdHJsLCBldGMuICovCisKKwl1bnNpZ25lZCBjaGFyIGxlZG1vZGU6MjsgCS8qIG9uZSAyLWJpdCB2YWx1ZSAqLworI2RlZmluZSBMRURfU0hPV19GTEFHUyAwICAgICAgICAvKiB0cmFkaXRpb25hbCBzdGF0ZSAqLworI2RlZmluZSBMRURfU0hPV19JT0NUTCAxICAgICAgICAvKiBvbmx5IGNoYW5nZSBsZWRzIHVwb24gaW9jdGwgKi8KKyNkZWZpbmUgTEVEX1NIT1dfTUVNIDIgICAgICAgICAgLyogYGhlYXJ0YmVhdCc6IHBlZWsgaW50byBtZW1vcnkgKi8KKworCXVuc2lnbmVkIGNoYXIgbGVkZmxhZ3N0YXRlOjQ7CS8qIGZsYWdzLCBub3QgbGlnaHRzICovCisJdW5zaWduZWQgY2hhciBkZWZhdWx0X2xlZGZsYWdzdGF0ZTo0OworI2RlZmluZSBWQ19TQ1JPTExPQ0sJMAkvKiBzY3JvbGwtbG9jayBtb2RlICovCisjZGVmaW5lIFZDX05VTUxPQ0sJMQkvKiBudW1lcmljIGxvY2sgbW9kZSAqLworI2RlZmluZSBWQ19DQVBTTE9DSwkyCS8qIGNhcHNsb2NrIG1vZGUgKi8KKyNkZWZpbmUgVkNfS0FOQUxPQ0sJMwkvKiBrYW5hbG9jayBtb2RlICovCisKKwl1bnNpZ25lZCBjaGFyIGtiZG1vZGU6MjsJLyogb25lIDItYml0IHZhbHVlICovCisjZGVmaW5lIFZDX1hMQVRFCTAJLyogdHJhbnNsYXRlIGtleWNvZGVzIHVzaW5nIGtleW1hcCAqLworI2RlZmluZSBWQ19NRURJVU1SQVcJMQkvKiBtZWRpdW0gcmF3IChrZXljb2RlKSBtb2RlICovCisjZGVmaW5lIFZDX1JBVwkJMgkvKiByYXcgKHNjYW5jb2RlKSBtb2RlICovCisjZGVmaW5lIFZDX1VOSUNPREUJMwkvKiBVbmljb2RlIG1vZGUgKi8KKworCXVuc2lnbmVkIGNoYXIgbW9kZWZsYWdzOjU7CisjZGVmaW5lIFZDX0FQUExJQwkwCS8qIGFwcGxpY2F0aW9uIGtleSBtb2RlICovCisjZGVmaW5lIFZDX0NLTU9ERQkxCS8qIGN1cnNvciBrZXkgbW9kZSAqLworI2RlZmluZSBWQ19SRVBFQVQJMgkvKiBrZXlib2FyZCByZXBlYXQgKi8KKyNkZWZpbmUgVkNfQ1JMRgkJMwkvKiAwIC0gZW50ZXIgc2VuZHMgQ1IsIDEgLSBlbnRlciBzZW5kcyBDUkxGICovCisjZGVmaW5lIFZDX01FVEEJCTQJLyogMCAtIG1ldGEsIDEgLSBtZXRhPXByZWZpeCB3aXRoIEVTQyAqLworfTsKKworZXh0ZXJuIHN0cnVjdCBrYmRfc3RydWN0IGtiZF90YWJsZVtdOworCitleHRlcm4gaW50IGtiZF9pbml0KHZvaWQpOworCitleHRlcm4gdW5zaWduZWQgY2hhciBnZXRsZWRzdGF0ZSh2b2lkKTsKK2V4dGVybiB2b2lkIHNldGxlZHN0YXRlKHN0cnVjdCBrYmRfc3RydWN0ICprYmQsIHVuc2lnbmVkIGludCBsZWQpOworCitleHRlcm4gaW50IGRvX3Bva2VfYmxhbmtlZF9jb25zb2xlOworCitleHRlcm4gdm9pZCAoKmtiZF9sZWRmdW5jKSh1bnNpZ25lZCBpbnQgbGVkKTsKKworZXh0ZXJuIHZvaWQgc2V0X2NvbnNvbGUoaW50IG5yKTsKK2V4dGVybiB2b2lkIHNjaGVkdWxlX2NvbnNvbGVfY2FsbGJhY2sodm9pZCk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfbGVkcyh2b2lkKQoreworCXRhc2tsZXRfc2NoZWR1bGUoJmtleWJvYXJkX3Rhc2tsZXQpOworfQorCitzdGF0aWMgaW5saW5lIGludCB2Y19rYmRfbW9kZShzdHJ1Y3Qga2JkX3N0cnVjdCAqIGtiZCwgaW50IGZsYWcpCit7CisJcmV0dXJuICgoa2JkLT5tb2RlZmxhZ3MgPj4gZmxhZykgJiAxKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgdmNfa2JkX2xlZChzdHJ1Y3Qga2JkX3N0cnVjdCAqIGtiZCwgaW50IGZsYWcpCit7CisJcmV0dXJuICgoa2JkLT5sZWRmbGFnc3RhdGUgPj4gZmxhZykgJiAxKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldF92Y19rYmRfbW9kZShzdHJ1Y3Qga2JkX3N0cnVjdCAqIGtiZCwgaW50IGZsYWcpCit7CisJa2JkLT5tb2RlZmxhZ3MgfD0gMSA8PCBmbGFnOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3ZjX2tiZF9sZWQoc3RydWN0IGtiZF9zdHJ1Y3QgKiBrYmQsIGludCBmbGFnKQoreworCWtiZC0+bGVkZmxhZ3N0YXRlIHw9IDEgPDwgZmxhZzsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNscl92Y19rYmRfbW9kZShzdHJ1Y3Qga2JkX3N0cnVjdCAqIGtiZCwgaW50IGZsYWcpCit7CisJa2JkLT5tb2RlZmxhZ3MgJj0gfigxIDw8IGZsYWcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2xyX3ZjX2tiZF9sZWQoc3RydWN0IGtiZF9zdHJ1Y3QgKiBrYmQsIGludCBmbGFnKQoreworCWtiZC0+bGVkZmxhZ3N0YXRlICY9IH4oMSA8PCBmbGFnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNoZ192Y19rYmRfbG9jayhzdHJ1Y3Qga2JkX3N0cnVjdCAqIGtiZCwgaW50IGZsYWcpCit7CisJa2JkLT5sb2Nrc3RhdGUgXj0gMSA8PCBmbGFnOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2hnX3ZjX2tiZF9zbG9jayhzdHJ1Y3Qga2JkX3N0cnVjdCAqIGtiZCwgaW50IGZsYWcpCit7CisJa2JkLT5zbG9ja3N0YXRlIF49IDEgPDwgZmxhZzsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNoZ192Y19rYmRfbW9kZShzdHJ1Y3Qga2JkX3N0cnVjdCAqIGtiZCwgaW50IGZsYWcpCit7CisJa2JkLT5tb2RlZmxhZ3MgXj0gMSA8PCBmbGFnOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2hnX3ZjX2tiZF9sZWQoc3RydWN0IGtiZF9zdHJ1Y3QgKiBrYmQsIGludCBmbGFnKQoreworCWtiZC0+bGVkZmxhZ3N0YXRlIF49IDEgPDwgZmxhZzsKK30KKworI2RlZmluZSBVKHgpICgoeCkgXiAweGYwMDApCisKKy8qIGtleWJvYXJkLmMgKi8KKworc3RydWN0IGNvbnNvbGU7CisKK2ludCBnZXRrZXljb2RlKHVuc2lnbmVkIGludCBzY2FuY29kZSk7CitpbnQgc2V0a2V5Y29kZSh1bnNpZ25lZCBpbnQgc2NhbmNvZGUsIHVuc2lnbmVkIGludCBrZXljb2RlKTsKK3ZvaWQgY29tcHV0ZV9zaGlmdHN0YXRlKHZvaWQpOworCisvKiBkZWZrZXltYXAuYyAqLworCitleHRlcm4gdW5zaWduZWQgaW50IGtleW1hcF9jb3VudDsKKworLyogY29uc29sZS5jICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb25fc2NoZWR1bGVfZmxpcChzdHJ1Y3QgdHR5X3N0cnVjdCAqdCkKK3sKKwlzY2hlZHVsZV93b3JrKCZ0LT5mbGlwLndvcmspOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2QuaCBiL2luY2x1ZGUvbGludXgva2QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGJlNGZiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9rZC5oCkBAIC0wLDAgKzEsMTc1IEBACisjaWZuZGVmIF9MSU5VWF9LRF9ICisjZGVmaW5lIF9MSU5VWF9LRF9ICisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorCisvKiAweDRCIGlzICdLJywgdG8gYXZvaWQgY29sbGlzaW9uIHdpdGggdGVybWlvcyBhbmQgdnQgKi8KKworI2RlZmluZSBHSU9fRk9OVAkweDRCNjAJLyogZ2V0cyBmb250IGluIGV4cGFuZGVkIGZvcm0gKi8KKyNkZWZpbmUgUElPX0ZPTlQJMHg0QjYxCS8qIHVzZSBmb250IGluIGV4cGFuZGVkIGZvcm0gKi8KKworI2RlZmluZSBHSU9fRk9OVFgJMHg0QjZCCS8qIGdldCBmb250IHVzaW5nIHN0cnVjdCBjb25zb2xlZm9udGRlc2MgKi8KKyNkZWZpbmUgUElPX0ZPTlRYCTB4NEI2QwkvKiBzZXQgZm9udCB1c2luZyBzdHJ1Y3QgY29uc29sZWZvbnRkZXNjICovCitzdHJ1Y3QgY29uc29sZWZvbnRkZXNjIHsKKwl1bnNpZ25lZCBzaG9ydCBjaGFyY291bnQ7CS8qIGNoYXJhY3RlcnMgaW4gZm9udCAoMjU2IG9yIDUxMikgKi8KKwl1bnNpZ25lZCBzaG9ydCBjaGFyaGVpZ2h0OwkvKiBzY2FuIGxpbmVzIHBlciBjaGFyYWN0ZXIgKDEtMzIpICovCisJY2hhciBfX3VzZXIgKmNoYXJkYXRhOwkJLyogZm9udCBkYXRhIGluIGV4cGFuZGVkIGZvcm0gKi8KK307CisKKyNkZWZpbmUgUElPX0ZPTlRSRVNFVCAgIDB4NEI2RAkvKiByZXNldCB0byBkZWZhdWx0IGZvbnQgKi8KKworI2RlZmluZSBHSU9fQ01BUAkweDRCNzAJLyogZ2V0cyBjb2xvdXIgcGFsZXR0ZSBvbiBWR0ErICovCisjZGVmaW5lIFBJT19DTUFQCTB4NEI3MQkvKiBzZXRzIGNvbG91ciBwYWxldHRlIG9uIFZHQSsgKi8KKworI2RlZmluZSBLSU9DU09VTkQJMHg0QjJGCS8qIHN0YXJ0IHNvdW5kIGdlbmVyYXRpb24gKDAgZm9yIG9mZikgKi8KKyNkZWZpbmUgS0RNS1RPTkUJMHg0QjMwCS8qIGdlbmVyYXRlIHRvbmUgKi8KKworI2RlZmluZSBLREdFVExFRAkweDRCMzEJLyogcmV0dXJuIGN1cnJlbnQgbGVkIHN0YXRlICovCisjZGVmaW5lIEtEU0VUTEVECTB4NEIzMgkvKiBzZXQgbGVkIHN0YXRlIFtsaWdodHMsIG5vdCBmbGFnc10gKi8KKyNkZWZpbmUgCUxFRF9TQ1IJCTB4MDEJLyogc2Nyb2xsIGxvY2sgbGVkICovCisjZGVmaW5lIAlMRURfTlVNCQkweDAyCS8qIG51bSBsb2NrIGxlZCAqLworI2RlZmluZSAJTEVEX0NBUAkJMHgwNAkvKiBjYXBzIGxvY2sgbGVkICovCisKKyNkZWZpbmUgS0RHS0JUWVBFCTB4NEIzMwkvKiBnZXQga2V5Ym9hcmQgdHlwZSAqLworI2RlZmluZSAJS0JfODQJCTB4MDEKKyNkZWZpbmUgCUtCXzEwMQkJMHgwMiAJLyogdGhpcyBpcyB3aGF0IHdlIGFsd2F5cyBhbnN3ZXIgKi8KKyNkZWZpbmUgCUtCX09USEVSCTB4MDMKKworI2RlZmluZSBLREFERElPCQkweDRCMzQJLyogYWRkIGkvbyBwb3J0IGFzIHZhbGlkICovCisjZGVmaW5lIEtEREVMSU8JCTB4NEIzNQkvKiBkZWwgaS9vIHBvcnQgYXMgdmFsaWQgKi8KKyNkZWZpbmUgS0RFTkFCSU8JMHg0QjM2CS8qIGVuYWJsZSBpL28gdG8gdmlkZW8gYm9hcmQgKi8KKyNkZWZpbmUgS0RESVNBQklPCTB4NEIzNwkvKiBkaXNhYmxlIGkvbyB0byB2aWRlbyBib2FyZCAqLworCisjZGVmaW5lIEtEU0VUTU9ERQkweDRCM0EJLyogc2V0IHRleHQvZ3JhcGhpY3MgbW9kZSAqLworI2RlZmluZQkJS0RfVEVYVAkJMHgwMAorI2RlZmluZQkJS0RfR1JBUEhJQ1MJMHgwMQorI2RlZmluZQkJS0RfVEVYVDAJMHgwMgkvKiBvYnNvbGV0ZSAqLworI2RlZmluZQkJS0RfVEVYVDEJMHgwMwkvKiBvYnNvbGV0ZSAqLworI2RlZmluZSBLREdFVE1PREUJMHg0QjNCCS8qIGdldCBjdXJyZW50IG1vZGUgKi8KKworI2RlZmluZSBLRE1BUERJU1AJMHg0QjNDCS8qIG1hcCBkaXNwbGF5IGludG8gYWRkcmVzcyBzcGFjZSAqLworI2RlZmluZSBLRFVOTUFQRElTUAkweDRCM0QJLyogdW5tYXAgZGlzcGxheSBmcm9tIGFkZHJlc3Mgc3BhY2UgKi8KKwordHlwZWRlZiBjaGFyIHNjcm5tYXBfdDsKKyNkZWZpbmUJCUVfVEFCU1oJCTI1NgorI2RlZmluZSBHSU9fU0NSTk1BUAkweDRCNDAJLyogZ2V0IHNjcmVlbiBtYXBwaW5nIGZyb20ga2VybmVsICovCisjZGVmaW5lIFBJT19TQ1JOTUFQCTB4NEI0MQkvKiBwdXQgc2NyZWVuIG1hcHBpbmcgdGFibGUgaW4ga2VybmVsICovCisjZGVmaW5lIEdJT19VTklTQ1JOTUFQICAweDRCNjkJLyogZ2V0IGZ1bGwgVW5pY29kZSBzY3JlZW4gbWFwcGluZyAqLworI2RlZmluZSBQSU9fVU5JU0NSTk1BUCAgMHg0QjZBICAvKiBzZXQgZnVsbCBVbmljb2RlIHNjcmVlbiBtYXBwaW5nICovCisKKyNkZWZpbmUgR0lPX1VOSU1BUAkweDRCNjYJLyogZ2V0IHVuaWNvZGUtdG8tZm9udCBtYXBwaW5nIGZyb20ga2VybmVsICovCitzdHJ1Y3QgdW5pcGFpciB7CisJdW5zaWduZWQgc2hvcnQgdW5pY29kZTsKKwl1bnNpZ25lZCBzaG9ydCBmb250cG9zOworfTsKK3N0cnVjdCB1bmltYXBkZXNjIHsKKwl1bnNpZ25lZCBzaG9ydCBlbnRyeV9jdDsKKwlzdHJ1Y3QgdW5pcGFpciBfX3VzZXIgKmVudHJpZXM7Cit9OworI2RlZmluZSBQSU9fVU5JTUFQCTB4NEI2NwkvKiBwdXQgdW5pY29kZS10by1mb250IG1hcHBpbmcgaW4ga2VybmVsICovCisjZGVmaW5lIFBJT19VTklNQVBDTFIJMHg0QjY4CS8qIGNsZWFyIHRhYmxlLCBwb3NzaWJseSBhZHZpc2UgaGFzaCBhbGdvcml0aG0gKi8KK3N0cnVjdCB1bmltYXBpbml0IHsKKwl1bnNpZ25lZCBzaG9ydCBhZHZpc2VkX2hhc2hzaXplOyAgLyogMCBpZiBubyBvcGluaW9uICovCisJdW5zaWduZWQgc2hvcnQgYWR2aXNlZF9oYXNoc3RlcDsgIC8qIDAgaWYgbm8gb3BpbmlvbiAqLworCXVuc2lnbmVkIHNob3J0IGFkdmlzZWRfaGFzaGxldmVsOyAvKiAwIGlmIG5vIG9waW5pb24gKi8KK307CisKKyNkZWZpbmUgVU5JX0RJUkVDVF9CQVNFIDB4RjAwMAkvKiBzdGFydCBvZiBEaXJlY3QgRm9udCBSZWdpb24gKi8KKyNkZWZpbmUgVU5JX0RJUkVDVF9NQVNLIDB4MDFGRgkvKiBEaXJlY3QgRm9udCBSZWdpb24gYml0bWFzayAqLworCisjZGVmaW5lCQlLX1JBVwkJMHgwMAorI2RlZmluZQkJS19YTEFURQkJMHgwMQorI2RlZmluZQkJS19NRURJVU1SQVcJMHgwMgorI2RlZmluZQkJS19VTklDT0RFCTB4MDMKKyNkZWZpbmUgS0RHS0JNT0RFCTB4NEI0NAkvKiBnZXRzIGN1cnJlbnQga2V5Ym9hcmQgbW9kZSAqLworI2RlZmluZSBLRFNLQk1PREUJMHg0QjQ1CS8qIHNldHMgY3VycmVudCBrZXlib2FyZCBtb2RlICovCisKKyNkZWZpbmUJCUtfTUVUQUJJVAkweDAzCisjZGVmaW5lCQlLX0VTQ1BSRUZJWAkweDA0CisjZGVmaW5lIEtER0tCTUVUQQkweDRCNjIJLyogZ2V0cyBtZXRhIGtleSBoYW5kbGluZyBtb2RlICovCisjZGVmaW5lIEtEU0tCTUVUQQkweDRCNjMJLyogc2V0cyBtZXRhIGtleSBoYW5kbGluZyBtb2RlICovCisKKyNkZWZpbmUJCUtfU0NST0xMTE9DSwkweDAxCisjZGVmaW5lCQlLX05VTUxPQ0sJMHgwMgorI2RlZmluZQkJS19DQVBTTE9DSwkweDA0CisjZGVmaW5lCUtER0tCTEVECTB4NEI2NAkvKiBnZXQgbGVkIGZsYWdzIChub3QgbGlnaHRzKSAqLworI2RlZmluZQlLRFNLQkxFRAkweDRCNjUJLyogc2V0IGxlZCBmbGFncyAobm90IGxpZ2h0cykgKi8KKworc3RydWN0IGtiZW50cnkgeworCXVuc2lnbmVkIGNoYXIga2JfdGFibGU7CisJdW5zaWduZWQgY2hhciBrYl9pbmRleDsKKwl1bnNpZ25lZCBzaG9ydCBrYl92YWx1ZTsKK307CisjZGVmaW5lCQlLX05PUk1UQUIJMHgwMAorI2RlZmluZQkJS19TSElGVFRBQgkweDAxCisjZGVmaW5lCQlLX0FMVFRBQgkweDAyCisjZGVmaW5lCQlLX0FMVFNISUZUVEFCCTB4MDMKKworI2RlZmluZSBLREdLQkVOVAkweDRCNDYJLyogZ2V0cyBvbmUgZW50cnkgaW4gdHJhbnNsYXRpb24gdGFibGUgKi8KKyNkZWZpbmUgS0RTS0JFTlQJMHg0QjQ3CS8qIHNldHMgb25lIGVudHJ5IGluIHRyYW5zbGF0aW9uIHRhYmxlICovCisKK3N0cnVjdCBrYnNlbnRyeSB7CisJdW5zaWduZWQgY2hhciBrYl9mdW5jOworCXVuc2lnbmVkIGNoYXIga2Jfc3RyaW5nWzUxMl07Cit9OworI2RlZmluZSBLREdLQlNFTlQJMHg0QjQ4CS8qIGdldHMgb25lIGZ1bmN0aW9uIGtleSBzdHJpbmcgZW50cnkgKi8KKyNkZWZpbmUgS0RTS0JTRU5UCTB4NEI0OQkvKiBzZXRzIG9uZSBmdW5jdGlvbiBrZXkgc3RyaW5nIGVudHJ5ICovCisKK3N0cnVjdCBrYmRpYWNyIHsKKyAgICAgICAgdW5zaWduZWQgY2hhciBkaWFjciwgYmFzZSwgcmVzdWx0OworfTsKK3N0cnVjdCBrYmRpYWNycyB7CisgICAgICAgIHVuc2lnbmVkIGludCBrYl9jbnQ7ICAgIC8qIG51bWJlciBvZiBlbnRyaWVzIGluIGZvbGxvd2luZyBhcnJheSAqLworCXN0cnVjdCBrYmRpYWNyIGtiZGlhY3JbMjU2XTsgICAgLyogTUFYX0RJQUNSIGZyb20ga2V5Ym9hcmQuaCAqLworfTsKKyNkZWZpbmUgS0RHS0JESUFDUiAgICAgIDB4NEI0QSAgLyogcmVhZCBrZXJuZWwgYWNjZW50IHRhYmxlICovCisjZGVmaW5lIEtEU0tCRElBQ1IgICAgICAweDRCNEIgIC8qIHdyaXRlIGtlcm5lbCBhY2NlbnQgdGFibGUgKi8KKworc3RydWN0IGtia2V5Y29kZSB7CisJdW5zaWduZWQgaW50IHNjYW5jb2RlLCBrZXljb2RlOworfTsKKyNkZWZpbmUgS0RHRVRLRVlDT0RFCTB4NEI0QwkvKiByZWFkIGtlcm5lbCBrZXljb2RlIHRhYmxlIGVudHJ5ICovCisjZGVmaW5lIEtEU0VUS0VZQ09ERQkweDRCNEQJLyogd3JpdGUga2VybmVsIGtleWNvZGUgdGFibGUgZW50cnkgKi8KKworI2RlZmluZSBLRFNJR0FDQ0VQVAkweDRCNEUJLyogYWNjZXB0IGtiZCBnZW5lcmF0ZWQgc2lnbmFscyAqLworCitzdHJ1Y3Qga2JkX3JlcGVhdCB7CisJaW50IGRlbGF5OwkvKiBpbiBtc2VjOyA8PSAwOiBkb24ndCBjaGFuZ2UgKi8KKwlpbnQgcGVyaW9kOwkvKiBpbiBtc2VjOyA8PSAwOiBkb24ndCBjaGFuZ2UgKi8KKwkJCS8qIGVhcmxpZXIgdGhpcyBmaWVsZCB3YXMgbWlzbmFtZWQgInJhdGUiICovCit9OworCisjZGVmaW5lIEtES0JEUkVQICAgICAgICAweDRCNTIgIC8qIHNldCBrZXlib2FyZCBkZWxheS9yZXBlYXQgcmF0ZTsKKwkJCQkgKiBhY3R1YWxseSB1c2VkIHZhbHVlcyBhcmUgcmV0dXJuZWQgKi8KKworI2RlZmluZSBLREZPTlRPUAkweDRCNzIJLyogZm9udCBvcGVyYXRpb25zICovCisKK3N0cnVjdCBjb25zb2xlX2ZvbnRfb3AgeworCXVuc2lnbmVkIGludCBvcDsJLyogb3BlcmF0aW9uIGNvZGUgS0RfRk9OVF9PUF8qICovCisJdW5zaWduZWQgaW50IGZsYWdzOwkvKiBLRF9GT05UX0ZMQUdfKiAqLworCXVuc2lnbmVkIGludCB3aWR0aCwgaGVpZ2h0OwkvKiBmb250IHNpemUgKi8KKwl1bnNpZ25lZCBpbnQgY2hhcmNvdW50OworCXVuc2lnbmVkIGNoYXIgX191c2VyICpkYXRhOwkvKiBmb250IGRhdGEgd2l0aCBoZWlnaHQgZml4ZWQgdG8gMzIgKi8KK307CisKK3N0cnVjdCBjb25zb2xlX2ZvbnQgeworCXVuc2lnbmVkIGludCB3aWR0aCwgaGVpZ2h0OwkvKiBmb250IHNpemUgKi8KKwl1bnNpZ25lZCBpbnQgY2hhcmNvdW50OworCXVuc2lnbmVkIGNoYXIgKmRhdGE7CS8qIGZvbnQgZGF0YSB3aXRoIGhlaWdodCBmaXhlZCB0byAzMiAqLworfTsKKworI2RlZmluZSBLRF9GT05UX09QX1NFVAkJMAkvKiBTZXQgZm9udCAqLworI2RlZmluZSBLRF9GT05UX09QX0dFVAkJMQkvKiBHZXQgZm9udCAqLworI2RlZmluZSBLRF9GT05UX09QX1NFVF9ERUZBVUxUCTIJLyogU2V0IGZvbnQgdG8gZGVmYXVsdCwgZGF0YSBwb2ludHMgdG8gbmFtZSAvIE5VTEwgKi8KKyNkZWZpbmUgS0RfRk9OVF9PUF9DT1BZCQkzCS8qIENvcHkgZnJvbSBhbm90aGVyIGNvbnNvbGUgKi8KKworI2RlZmluZSBLRF9GT05UX0ZMQUdfRE9OVF9SRUNBTEMgCTEJLyogRG9uJ3QgcmVjYWxjdWxhdGUgaHcgY2hhcmNlbGwgc2l6ZSBbY29tcGF0XSAqLworI2lmZGVmIF9fS0VSTkVMX18KKyNkZWZpbmUgS0RfRk9OVF9GTEFHX09MRAkJMHg4MDAwMDAwMAkvKiBJbnZva2VkIHZpYSBvbGQgaW50ZXJmYWNlIFtjb21wYXRdICovCisjZW5kaWYKKworLyogbm90ZTogMHg0QjAwLTB4NEI0RSBhbGwgaGF2ZSBoYWQgYSB2YWx1ZSBhdCBzb21lIHRpbWU7CisgICBkb24ndCByZXVzZSBmb3IgdGhlIHRpbWUgYmVpbmcgKi8KKy8qIG5vdGU6IDB4NEI2MC0weDRCNkQsIDB4NEI3MC0weDRCNzIgdXNlZCBhYm92ZSAqLworCisjZW5kaWYgLyogX0xJTlVYX0tEX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2Rldl90LmggYi9pbmNsdWRlL2xpbnV4L2tkZXZfdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjZWVhNTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2tkZXZfdC5oCkBAIC0wLDAgKzEsMTAxIEBACisjaWZuZGVmIF9MSU5VWF9LREVWX1RfSAorI2RlZmluZSBfTElOVVhfS0RFVl9UX0gKKyNpZmRlZiBfX0tFUk5FTF9fCisjZGVmaW5lIE1JTk9SQklUUwkyMAorI2RlZmluZSBNSU5PUk1BU0sJKCgxVSA8PCBNSU5PUkJJVFMpIC0gMSkKKworI2RlZmluZSBNQUpPUihkZXYpCSgodW5zaWduZWQgaW50KSAoKGRldikgPj4gTUlOT1JCSVRTKSkKKyNkZWZpbmUgTUlOT1IoZGV2KQkoKHVuc2lnbmVkIGludCkgKChkZXYpICYgTUlOT1JNQVNLKSkKKyNkZWZpbmUgTUtERVYobWEsbWkpCSgoKG1hKSA8PCBNSU5PUkJJVFMpIHwgKG1pKSkKKworI2RlZmluZSBwcmludF9kZXZfdChidWZmZXIsIGRldikJCQkJCVwKKwlzcHJpbnRmKChidWZmZXIpLCAiJXU6JXVcbiIsIE1BSk9SKGRldiksIE1JTk9SKGRldikpCisKKyNkZWZpbmUgZm9ybWF0X2Rldl90KGJ1ZmZlciwgZGV2KQkJCQkJXAorCSh7CQkJCQkJCQlcCisJCXNwcmludGYoYnVmZmVyLCAiJXU6JXUiLCBNQUpPUihkZXYpLCBNSU5PUihkZXYpKTsJXAorCQlidWZmZXI7CQkJCQkJCVwKKwl9KQorCisvKiBhY2NlcHRhYmxlIGZvciBvbGQgZmlsZXN5c3RlbXMgKi8KK3N0YXRpYyBpbmxpbmUgaW50IG9sZF92YWxpZF9kZXYoZGV2X3QgZGV2KQoreworCXJldHVybiBNQUpPUihkZXYpIDwgMjU2ICYmIE1JTk9SKGRldikgPCAyNTY7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTE2IG9sZF9lbmNvZGVfZGV2KGRldl90IGRldikKK3sKKwlyZXR1cm4gKE1BSk9SKGRldikgPDwgOCkgfCBNSU5PUihkZXYpOworfQorCitzdGF0aWMgaW5saW5lIGRldl90IG9sZF9kZWNvZGVfZGV2KHUxNiB2YWwpCit7CisJcmV0dXJuIE1LREVWKCh2YWwgPj4gOCkgJiAyNTUsIHZhbCAmIDI1NSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG5ld192YWxpZF9kZXYoZGV2X3QgZGV2KQoreworCXJldHVybiAxOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBuZXdfZW5jb2RlX2RldihkZXZfdCBkZXYpCit7CisJdW5zaWduZWQgbWFqb3IgPSBNQUpPUihkZXYpOworCXVuc2lnbmVkIG1pbm9yID0gTUlOT1IoZGV2KTsKKwlyZXR1cm4gKG1pbm9yICYgMHhmZikgfCAobWFqb3IgPDwgOCkgfCAoKG1pbm9yICYgfjB4ZmYpIDw8IDEyKTsKK30KKworc3RhdGljIGlubGluZSBkZXZfdCBuZXdfZGVjb2RlX2Rldih1MzIgZGV2KQoreworCXVuc2lnbmVkIG1ham9yID0gKGRldiAmIDB4ZmZmMDApID4+IDg7CisJdW5zaWduZWQgbWlub3IgPSAoZGV2ICYgMHhmZikgfCAoKGRldiA+PiAxMikgJiAweGZmZjAwKTsKKwlyZXR1cm4gTUtERVYobWFqb3IsIG1pbm9yKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgaHVnZV92YWxpZF9kZXYoZGV2X3QgZGV2KQoreworCXJldHVybiAxOworfQorCitzdGF0aWMgaW5saW5lIHU2NCBodWdlX2VuY29kZV9kZXYoZGV2X3QgZGV2KQoreworCXJldHVybiBuZXdfZW5jb2RlX2RldihkZXYpOworfQorCitzdGF0aWMgaW5saW5lIGRldl90IGh1Z2VfZGVjb2RlX2Rldih1NjQgZGV2KQoreworCXJldHVybiBuZXdfZGVjb2RlX2RldihkZXYpOworfQorCitzdGF0aWMgaW5saW5lIGludCBzeXN2X3ZhbGlkX2RldihkZXZfdCBkZXYpCit7CisJcmV0dXJuIE1BSk9SKGRldikgPCAoMTw8MTQpICYmIE1JTk9SKGRldikgPCAoMTw8MTgpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBzeXN2X2VuY29kZV9kZXYoZGV2X3QgZGV2KQoreworCXJldHVybiBNSU5PUihkZXYpIHwgKE1BSk9SKGRldikgPDwgMTgpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHN5c3ZfbWFqb3IodTMyIGRldikKK3sKKwlyZXR1cm4gKGRldiA+PiAxOCkgJiAweDNmZmY7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgc3lzdl9taW5vcih1MzIgZGV2KQoreworCXJldHVybiBkZXYgJiAweDNmZmZmOworfQorCisKKyNlbHNlIC8qIF9fS0VSTkVMX18gKi8KKworLyoKK1NvbWUgcHJvZ3JhbXMgd2FudCB0aGVpciBkZWZpbml0aW9ucyBvZiBNQUpPUiBhbmQgTUlOT1IgYW5kIE1LREVWCitmcm9tIHRoZSBrZXJuZWwgc291cmNlcy4gVGhlc2UgbXVzdCBiZSB0aGUgZXh0ZXJuYWxseSB2aXNpYmxlIG9uZXMuCisqLworI2RlZmluZSBNQUpPUihkZXYpCSgoZGV2KT4+OCkKKyNkZWZpbmUgTUlOT1IoZGV2KQkoKGRldikgJiAweGZmKQorI2RlZmluZSBNS0RFVihtYSxtaSkJKChtYSk8PDggfCAobWkpKQorI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZXJuZWwuaCBiL2luY2x1ZGUvbGludXgva2VybmVsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2MxY2JhNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgva2VybmVsLmgKQEAgLTAsMCArMSwzMDcgQEAKKyNpZm5kZWYgX0xJTlVYX0tFUk5FTF9ICisjZGVmaW5lIF9MSU5VWF9LRVJORUxfSAorCisvKgorICogJ2tlcm5lbC5oJyBjb250YWlucyBzb21lIG9mdGVuLXVzZWQgZnVuY3Rpb24gcHJvdG90eXBlcyBldGMKKyAqLworCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisjaW5jbHVkZSA8YXNtL2J1Zy5oPgorCitleHRlcm4gY29uc3QgY2hhciBsaW51eF9iYW5uZXJbXTsKKworI2RlZmluZSBJTlRfTUFYCQkoKGludCkofjBVPj4xKSkKKyNkZWZpbmUgSU5UX01JTgkJKC1JTlRfTUFYIC0gMSkKKyNkZWZpbmUgVUlOVF9NQVgJKH4wVSkKKyNkZWZpbmUgTE9OR19NQVgJKChsb25nKSh+MFVMPj4xKSkKKyNkZWZpbmUgTE9OR19NSU4JKC1MT05HX01BWCAtIDEpCisjZGVmaW5lIFVMT05HX01BWAkofjBVTCkKKworI2RlZmluZSBTVEFDS19NQUdJQwkweGRlYWRiZWVmCisKKyNkZWZpbmUgQVJSQVlfU0laRSh4KSAoc2l6ZW9mKHgpIC8gc2l6ZW9mKCh4KVswXSkpCisjZGVmaW5lIEFMSUdOKHgsYSkgKCgoeCkrKGEpLTEpJn4oKGEpLTEpKQorCisjZGVmaW5lCUtFUk5fRU1FUkcJIjwwPiIJLyogc3lzdGVtIGlzIHVudXNhYmxlCQkJKi8KKyNkZWZpbmUJS0VSTl9BTEVSVAkiPDE+IgkvKiBhY3Rpb24gbXVzdCBiZSB0YWtlbiBpbW1lZGlhdGVseQkqLworI2RlZmluZQlLRVJOX0NSSVQJIjwyPiIJLyogY3JpdGljYWwgY29uZGl0aW9ucwkJCSovCisjZGVmaW5lCUtFUk5fRVJSCSI8Mz4iCS8qIGVycm9yIGNvbmRpdGlvbnMJCQkqLworI2RlZmluZQlLRVJOX1dBUk5JTkcJIjw0PiIJLyogd2FybmluZyBjb25kaXRpb25zCQkJKi8KKyNkZWZpbmUJS0VSTl9OT1RJQ0UJIjw1PiIJLyogbm9ybWFsIGJ1dCBzaWduaWZpY2FudCBjb25kaXRpb24JKi8KKyNkZWZpbmUJS0VSTl9JTkZPCSI8Nj4iCS8qIGluZm9ybWF0aW9uYWwJCQkqLworI2RlZmluZQlLRVJOX0RFQlVHCSI8Nz4iCS8qIGRlYnVnLWxldmVsIG1lc3NhZ2VzCQkJKi8KKworZXh0ZXJuIGludCBjb25zb2xlX3ByaW50a1tdOworCisjZGVmaW5lIGNvbnNvbGVfbG9nbGV2ZWwgKGNvbnNvbGVfcHJpbnRrWzBdKQorI2RlZmluZSBkZWZhdWx0X21lc3NhZ2VfbG9nbGV2ZWwgKGNvbnNvbGVfcHJpbnRrWzFdKQorI2RlZmluZSBtaW5pbXVtX2NvbnNvbGVfbG9nbGV2ZWwgKGNvbnNvbGVfcHJpbnRrWzJdKQorI2RlZmluZSBkZWZhdWx0X2NvbnNvbGVfbG9nbGV2ZWwgKGNvbnNvbGVfcHJpbnRrWzNdKQorCitzdHJ1Y3QgY29tcGxldGlvbjsKKworLyoqCisgKiBtaWdodF9zbGVlcCAtIGFubm90YXRpb24gZm9yIGZ1bmN0aW9ucyB0aGF0IGNhbiBzbGVlcAorICoKKyAqIHRoaXMgbWFjcm8gd2lsbCBwcmludCBhIHN0YWNrIHRyYWNlIGlmIGl0IGlzIGV4ZWN1dGVkIGluIGFuIGF0b21pYworICogY29udGV4dCAoc3BpbmxvY2ssIGlycS1oYW5kbGVyLCAuLi4pLgorICoKKyAqIFRoaXMgaXMgYSB1c2VmdWwgZGVidWdnaW5nIGhlbHAgdG8gYmUgYWJsZSB0byBjYXRjaCBwcm9ibGVtcyBlYXJseSBhbmQgbm90CisgKiBiZSBiaXRlbiBsYXRlciB3aGVuIHRoZSBjYWxsaW5nIGZ1bmN0aW9uIGhhcHBlbnMgdG8gc2xlZXAgd2hlbiBpdCBpcyBub3QKKyAqIHN1cHBvc2VkIHRvLgorICovCisjaWZkZWYgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQCisjZGVmaW5lIG1pZ2h0X3NsZWVwKCkgX19taWdodF9zbGVlcChfX0ZJTEVfXywgX19MSU5FX18pCisjZGVmaW5lIG1pZ2h0X3NsZWVwX2lmKGNvbmQpIGRvIHsgaWYgKHVubGlrZWx5KGNvbmQpKSBtaWdodF9zbGVlcCgpOyB9IHdoaWxlICgwKQordm9pZCBfX21pZ2h0X3NsZWVwKGNoYXIgKmZpbGUsIGludCBsaW5lKTsKKyNlbHNlCisjZGVmaW5lIG1pZ2h0X3NsZWVwKCkgZG8ge30gd2hpbGUoMCkKKyNkZWZpbmUgbWlnaHRfc2xlZXBfaWYoY29uZCkgZG8ge30gd2hpbGUgKDApCisjZW5kaWYKKworI2RlZmluZSBhYnMoeCkgKHsJCQkJXAorCQlpbnQgX194ID0gKHgpOwkJCVwKKwkJKF9feCA8IDApID8gLV9feCA6IF9feDsJCVwKKwl9KQorCisjZGVmaW5lIGxhYnMoeCkgKHsJCQkJXAorCQlsb25nIF9feCA9ICh4KTsJCQlcCisJCShfX3ggPCAwKSA/IC1fX3ggOiBfX3g7CQlcCisJfSkKKworZXh0ZXJuIHN0cnVjdCBub3RpZmllcl9ibG9jayAqcGFuaWNfbm90aWZpZXJfbGlzdDsKK2V4dGVybiBsb25nICgqcGFuaWNfYmxpbmspKGxvbmcgdGltZSk7CitOT1JFVF9UWVBFIHZvaWQgcGFuaWMoY29uc3QgY2hhciAqIGZtdCwgLi4uKQorCV9fYXR0cmlidXRlX18gKChOT1JFVF9BTkQgZm9ybWF0IChwcmludGYsIDEsIDIpKSk7CitmYXN0Y2FsbCBOT1JFVF9UWVBFIHZvaWQgZG9fZXhpdChsb25nIGVycm9yX2NvZGUpCisJQVRUUklCX05PUkVUOworTk9SRVRfVFlQRSB2b2lkIGNvbXBsZXRlX2FuZF9leGl0KHN0cnVjdCBjb21wbGV0aW9uICosIGxvbmcpCisJQVRUUklCX05PUkVUOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc2ltcGxlX3N0cnRvdWwoY29uc3QgY2hhciAqLGNoYXIgKiosdW5zaWduZWQgaW50KTsKK2V4dGVybiBsb25nIHNpbXBsZV9zdHJ0b2woY29uc3QgY2hhciAqLGNoYXIgKiosdW5zaWduZWQgaW50KTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgc2ltcGxlX3N0cnRvdWxsKGNvbnN0IGNoYXIgKixjaGFyICoqLHVuc2lnbmVkIGludCk7CitleHRlcm4gbG9uZyBsb25nIHNpbXBsZV9zdHJ0b2xsKGNvbnN0IGNoYXIgKixjaGFyICoqLHVuc2lnbmVkIGludCk7CitleHRlcm4gaW50IHNwcmludGYoY2hhciAqIGJ1ZiwgY29uc3QgY2hhciAqIGZtdCwgLi4uKQorCV9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKTsKK2V4dGVybiBpbnQgdnNwcmludGYoY2hhciAqYnVmLCBjb25zdCBjaGFyICosIHZhX2xpc3QpCisJX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAyLCAwKSkpOworZXh0ZXJuIGludCBzbnByaW50ZihjaGFyICogYnVmLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqIGZtdCwgLi4uKQorCV9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMywgNCkpKTsKK2V4dGVybiBpbnQgdnNucHJpbnRmKGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKQorCV9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMywgMCkpKTsKK2V4dGVybiBpbnQgc2NucHJpbnRmKGNoYXIgKiBidWYsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyICogZm10LCAuLi4pCisJX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAzLCA0KSkpOworZXh0ZXJuIGludCB2c2NucHJpbnRmKGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKQorCV9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMywgMCkpKTsKKworZXh0ZXJuIGludCBzc2NhbmYoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIC4uLikKKwlfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChzY2FuZiwgMiwgMykpKTsKK2V4dGVybiBpbnQgdnNzY2FuZihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgdmFfbGlzdCkKKwlfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChzY2FuZiwgMiwgMCkpKTsKKworZXh0ZXJuIGludCBnZXRfb3B0aW9uKGNoYXIgKipzdHIsIGludCAqcGludCk7CitleHRlcm4gY2hhciAqZ2V0X29wdGlvbnMoY29uc3QgY2hhciAqc3RyLCBpbnQgbmludHMsIGludCAqaW50cyk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIG1lbXBhcnNlKGNoYXIgKnB0ciwgY2hhciAqKnJldHB0cik7CisKK2V4dGVybiBpbnQgX19rZXJuZWxfdGV4dF9hZGRyZXNzKHVuc2lnbmVkIGxvbmcgYWRkcik7CitleHRlcm4gaW50IGtlcm5lbF90ZXh0X2FkZHJlc3ModW5zaWduZWQgbG9uZyBhZGRyKTsKK2V4dGVybiBpbnQgc2Vzc2lvbl9vZl9wZ3JwKGludCBwZ3JwKTsKKworYXNtbGlua2FnZSBpbnQgdnByaW50ayhjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXJncykKKwlfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDEsIDApKSk7Cithc21saW5rYWdlIGludCBwcmludGsoY29uc3QgY2hhciAqIGZtdCwgLi4uKQorCV9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKTsKKwordW5zaWduZWQgbG9uZyBpbnRfc3FydCh1bnNpZ25lZCBsb25nKTsKKworc3RhdGljIGlubGluZSBpbnQgX19hdHRyaWJ1dGVfcHVyZV9fIGxvbmdfbG9nMih1bnNpZ25lZCBsb25nIHgpCit7CisJaW50IHIgPSAwOworCWZvciAoeCA+Pj0gMTsgeCA+IDA7IHggPj49IDEpCisJCXIrKzsKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fYXR0cmlidXRlX2NvbnN0X18gcm91bmR1cF9wb3dfb2ZfdHdvKHVuc2lnbmVkIGxvbmcgeCkKK3sKKwlyZXR1cm4gKDFVTCA8PCBmbHMoeCAtIDEpKTsKK30KKworZXh0ZXJuIGludCBwcmludGtfcmF0ZWxpbWl0KHZvaWQpOworZXh0ZXJuIGludCBfX3ByaW50a19yYXRlbGltaXQoaW50IHJhdGVsaW1pdF9qaWZmaWVzLCBpbnQgcmF0ZWxpbWl0X2J1cnN0KTsKKworc3RhdGljIGlubGluZSB2b2lkIGNvbnNvbGVfc2lsZW50KHZvaWQpCit7CisJY29uc29sZV9sb2dsZXZlbCA9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb25zb2xlX3ZlcmJvc2Uodm9pZCkKK3sKKwlpZiAoY29uc29sZV9sb2dsZXZlbCkKKwkJY29uc29sZV9sb2dsZXZlbCA9IDE1OworfQorCitleHRlcm4gdm9pZCBidXN0X3NwaW5sb2NrcyhpbnQgeWVzKTsKK2V4dGVybiBpbnQgb29wc19pbl9wcm9ncmVzczsJCS8qIElmIHNldCwgYW4gb29wcywgcGFuaWMoKSwgQlVHKCkgb3IgZGllKCkgaXMgaW4gcHJvZ3Jlc3MgKi8KK2V4dGVybiBpbnQgcGFuaWNfdGltZW91dDsKK2V4dGVybiBpbnQgcGFuaWNfb25fb29wczsKK2V4dGVybiBpbnQgdGFpbnRlZDsKK2V4dGVybiBjb25zdCBjaGFyICpwcmludF90YWludGVkKHZvaWQpOworZXh0ZXJuIHZvaWQgYWRkX3RhaW50KHVuc2lnbmVkKTsKKworLyogVmFsdWVzIHVzZWQgZm9yIHN5c3RlbV9zdGF0ZSAqLworZXh0ZXJuIGVudW0gc3lzdGVtX3N0YXRlcyB7CisJU1lTVEVNX0JPT1RJTkcsCisJU1lTVEVNX1JVTk5JTkcsCisJU1lTVEVNX0hBTFQsCisJU1lTVEVNX1BPV0VSX09GRiwKKwlTWVNURU1fUkVTVEFSVCwKK30gc3lzdGVtX3N0YXRlOworCisjZGVmaW5lIFRBSU5UX1BST1BSSUVUQVJZX01PRFVMRQkoMTw8MCkKKyNkZWZpbmUgVEFJTlRfRk9SQ0VEX01PRFVMRQkJKDE8PDEpCisjZGVmaW5lIFRBSU5UX1VOU0FGRV9TTVAJCSgxPDwyKQorI2RlZmluZSBUQUlOVF9GT1JDRURfUk1NT0QJCSgxPDwzKQorI2RlZmluZSBUQUlOVF9NQUNISU5FX0NIRUNLCQkoMTw8NCkKKyNkZWZpbmUgVEFJTlRfQkFEX1BBR0UJCQkoMTw8NSkKKworZXh0ZXJuIHZvaWQgZHVtcF9zdGFjayh2b2lkKTsKKworI2lmZGVmIERFQlVHCisjZGVmaW5lIHByX2RlYnVnKGZtdCxhcmcuLi4pIFwKKwlwcmludGsoS0VSTl9ERUJVRyBmbXQsIyNhcmcpCisjZWxzZQorI2RlZmluZSBwcl9kZWJ1ZyhmbXQsYXJnLi4uKSBcCisJZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKKyNkZWZpbmUgcHJfaW5mbyhmbXQsYXJnLi4uKSBcCisJcHJpbnRrKEtFUk5fSU5GTyBmbXQsIyNhcmcpCisKKy8qCisgKiAgICAgIERpc3BsYXkgYW4gSVAgYWRkcmVzcyBpbiByZWFkYWJsZSBmb3JtYXQuCisgKi8KKworI2RlZmluZSBOSVBRVUFEKGFkZHIpIFwKKwkoKHVuc2lnbmVkIGNoYXIgKikmYWRkcilbMF0sIFwKKwkoKHVuc2lnbmVkIGNoYXIgKikmYWRkcilbMV0sIFwKKwkoKHVuc2lnbmVkIGNoYXIgKikmYWRkcilbMl0sIFwKKwkoKHVuc2lnbmVkIGNoYXIgKikmYWRkcilbM10KKworI2RlZmluZSBOSVA2KGFkZHIpIFwKKwludG9ocygoYWRkcikuczZfYWRkcjE2WzBdKSwgXAorCW50b2hzKChhZGRyKS5zNl9hZGRyMTZbMV0pLCBcCisJbnRvaHMoKGFkZHIpLnM2X2FkZHIxNlsyXSksIFwKKwludG9ocygoYWRkcikuczZfYWRkcjE2WzNdKSwgXAorCW50b2hzKChhZGRyKS5zNl9hZGRyMTZbNF0pLCBcCisJbnRvaHMoKGFkZHIpLnM2X2FkZHIxNls1XSksIFwKKwludG9ocygoYWRkcikuczZfYWRkcjE2WzZdKSwgXAorCW50b2hzKChhZGRyKS5zNl9hZGRyMTZbN10pCisKKyNpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKyNkZWZpbmUgSElQUVVBRChhZGRyKSBcCisJKCh1bnNpZ25lZCBjaGFyICopJmFkZHIpWzNdLCBcCisJKCh1bnNpZ25lZCBjaGFyICopJmFkZHIpWzJdLCBcCisJKCh1bnNpZ25lZCBjaGFyICopJmFkZHIpWzFdLCBcCisJKCh1bnNpZ25lZCBjaGFyICopJmFkZHIpWzBdCisjZWxpZiBkZWZpbmVkKF9fQklHX0VORElBTikKKyNkZWZpbmUgSElQUVVBRAlOSVBRVUFECisjZWxzZQorI2Vycm9yICJQbGVhc2UgZml4IGFzbS9ieXRlb3JkZXIuaCIKKyNlbmRpZiAvKiBfX0xJVFRMRV9FTkRJQU4gKi8KKworLyoKKyAqIG1pbigpL21heCgpIG1hY3JvcyB0aGF0IGFsc28gZG8KKyAqIHN0cmljdCB0eXBlLWNoZWNraW5nLi4gU2VlIHRoZQorICogInVubmVjZXNzYXJ5IiBwb2ludGVyIGNvbXBhcmlzb24uCisgKi8KKyNkZWZpbmUgbWluKHgseSkgKHsgXAorCXR5cGVvZih4KSBfeCA9ICh4KTsJXAorCXR5cGVvZih5KSBfeSA9ICh5KTsJXAorCSh2b2lkKSAoJl94ID09ICZfeSk7CQlcCisJX3ggPCBfeSA/IF94IDogX3k7IH0pCisKKyNkZWZpbmUgbWF4KHgseSkgKHsgXAorCXR5cGVvZih4KSBfeCA9ICh4KTsJXAorCXR5cGVvZih5KSBfeSA9ICh5KTsJXAorCSh2b2lkKSAoJl94ID09ICZfeSk7CQlcCisJX3ggPiBfeSA/IF94IDogX3k7IH0pCisKKy8qCisgKiAuLmFuZCBpZiB5b3UgY2FuJ3QgdGFrZSB0aGUgc3RyaWN0CisgKiB0eXBlcywgeW91IGNhbiBzcGVjaWZ5IG9uZSB5b3Vyc2VsZi4KKyAqCisgKiBPciBub3QgdXNlIG1pbi9tYXggYXQgYWxsLCBvZiBjb3Vyc2UuCisgKi8KKyNkZWZpbmUgbWluX3QodHlwZSx4LHkpIFwKKwkoeyB0eXBlIF9feCA9ICh4KTsgdHlwZSBfX3kgPSAoeSk7IF9feCA8IF9feSA/IF9feDogX195OyB9KQorI2RlZmluZSBtYXhfdCh0eXBlLHgseSkgXAorCSh7IHR5cGUgX194ID0gKHgpOyB0eXBlIF9feSA9ICh5KTsgX194ID4gX195ID8gX194OiBfX3k7IH0pCisKKworLyoqCisgKiBjb250YWluZXJfb2YgLSBjYXN0IGEgbWVtYmVyIG9mIGEgc3RydWN0dXJlIG91dCB0byB0aGUgY29udGFpbmluZyBzdHJ1Y3R1cmUKKyAqCisgKiBAcHRyOgl0aGUgcG9pbnRlciB0byB0aGUgbWVtYmVyLgorICogQHR5cGU6CXRoZSB0eXBlIG9mIHRoZSBjb250YWluZXIgc3RydWN0IHRoaXMgaXMgZW1iZWRkZWQgaW4uCisgKiBAbWVtYmVyOgl0aGUgbmFtZSBvZiB0aGUgbWVtYmVyIHdpdGhpbiB0aGUgc3RydWN0LgorICoKKyAqLworI2RlZmluZSBjb250YWluZXJfb2YocHRyLCB0eXBlLCBtZW1iZXIpICh7CQkJXAorICAgICAgICBjb25zdCB0eXBlb2YoICgodHlwZSAqKTApLT5tZW1iZXIgKSAqX19tcHRyID0gKHB0cik7CVwKKyAgICAgICAgKHR5cGUgKikoIChjaGFyICopX19tcHRyIC0gb2Zmc2V0b2YodHlwZSxtZW1iZXIpICk7fSkKKworLyoKKyAqIENoZWNrIGF0IGNvbXBpbGUgdGltZSB0aGF0IHNvbWV0aGluZyBpcyBvZiBhIHBhcnRpY3VsYXIgdHlwZS4KKyAqIEFsd2F5cyBldmFsdWF0ZXMgdG8gMSBzbyB5b3UgbWF5IHVzZSBpdCBlYXNpbHkgaW4gY29tcGFyaXNvbnMuCisgKi8KKyNkZWZpbmUgdHlwZWNoZWNrKHR5cGUseCkgXAorKHsJdHlwZSBfX2R1bW15OyBcCisJdHlwZW9mKHgpIF9fZHVtbXkyOyBcCisJKHZvaWQpKCZfX2R1bW15ID09ICZfX2R1bW15Mik7IFwKKwkxOyBcCit9KQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZGVmaW5lIFNJX0xPQURfU0hJRlQJMTYKK3N0cnVjdCBzeXNpbmZvIHsKKwlsb25nIHVwdGltZTsJCQkvKiBTZWNvbmRzIHNpbmNlIGJvb3QgKi8KKwl1bnNpZ25lZCBsb25nIGxvYWRzWzNdOwkJLyogMSwgNSwgYW5kIDE1IG1pbnV0ZSBsb2FkIGF2ZXJhZ2VzICovCisJdW5zaWduZWQgbG9uZyB0b3RhbHJhbTsJCS8qIFRvdGFsIHVzYWJsZSBtYWluIG1lbW9yeSBzaXplICovCisJdW5zaWduZWQgbG9uZyBmcmVlcmFtOwkJLyogQXZhaWxhYmxlIG1lbW9yeSBzaXplICovCisJdW5zaWduZWQgbG9uZyBzaGFyZWRyYW07CS8qIEFtb3VudCBvZiBzaGFyZWQgbWVtb3J5ICovCisJdW5zaWduZWQgbG9uZyBidWZmZXJyYW07CS8qIE1lbW9yeSB1c2VkIGJ5IGJ1ZmZlcnMgKi8KKwl1bnNpZ25lZCBsb25nIHRvdGFsc3dhcDsJLyogVG90YWwgc3dhcCBzcGFjZSBzaXplICovCisJdW5zaWduZWQgbG9uZyBmcmVlc3dhcDsJCS8qIHN3YXAgc3BhY2Ugc3RpbGwgYXZhaWxhYmxlICovCisJdW5zaWduZWQgc2hvcnQgcHJvY3M7CQkvKiBOdW1iZXIgb2YgY3VycmVudCBwcm9jZXNzZXMgKi8KKwl1bnNpZ25lZCBzaG9ydCBwYWQ7CQkvKiBleHBsaWNpdCBwYWRkaW5nIGZvciBtNjhrICovCisJdW5zaWduZWQgbG9uZyB0b3RhbGhpZ2g7CS8qIFRvdGFsIGhpZ2ggbWVtb3J5IHNpemUgKi8KKwl1bnNpZ25lZCBsb25nIGZyZWVoaWdoOwkJLyogQXZhaWxhYmxlIGhpZ2ggbWVtb3J5IHNpemUgKi8KKwl1bnNpZ25lZCBpbnQgbWVtX3VuaXQ7CQkvKiBNZW1vcnkgdW5pdCBzaXplIGluIGJ5dGVzICovCisJY2hhciBfZlsyMC0yKnNpemVvZihsb25nKS1zaXplb2YoaW50KV07CS8qIFBhZGRpbmc6IGxpYmM1IHVzZXMgdGhpcy4uICovCit9OworCitleHRlcm4gdm9pZCBCVUlMRF9CVUcodm9pZCk7CisjZGVmaW5lIEJVSUxEX0JVR19PTihjb25kaXRpb24pIGRvIHsgaWYgKGNvbmRpdGlvbikgQlVJTERfQlVHKCk7IH0gd2hpbGUoMCkKKworI2lmZGVmIENPTkZJR19TWVNDVEwKK2V4dGVybiBpbnQgcmFuZG9taXplX3ZhX3NwYWNlOworI2Vsc2UKKyNkZWZpbmUgcmFuZG9taXplX3ZhX3NwYWNlIDEKKyNlbmRpZgorCisvKiBUcmFwIHBhc3RlcnMgb2YgX19GVU5DVElPTl9fIGF0IGNvbXBpbGUtdGltZSAqLworI2lmIF9fR05VQ19fID4gMiB8fCBfX0dOVUNfTUlOT1JfXyA+PSA5NQorI2RlZmluZSBfX0ZVTkNUSU9OX18gKF9fZnVuY19fKQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZXJuZWxfc3RhdC5oIGIvaW5jbHVkZS9saW51eC9rZXJuZWxfc3RhdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiYTI3NzQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2tlcm5lbF9zdGF0LmgKQEAgLTAsMCArMSw1OSBAQAorI2lmbmRlZiBfTElOVVhfS0VSTkVMX1NUQVRfSAorI2RlZmluZSBfTElOVVhfS0VSTkVMX1NUQVRfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KKyNpbmNsdWRlIDxhc20vY3B1dGltZS5oPgorCisvKgorICogJ2tlcm5lbF9zdGF0LmgnIGNvbnRhaW5zIHRoZSBkZWZpbml0aW9ucyBuZWVkZWQgZm9yIGRvaW5nCisgKiBzb21lIGtlcm5lbCBzdGF0aXN0aWNzIChDUFUgdXNhZ2UsIGNvbnRleHQgc3dpdGNoZXMgLi4uKSwKKyAqIHVzZWQgYnkgcnN0YXRkL3BlcmZtZXRlcgorICovCisKK3N0cnVjdCBjcHVfdXNhZ2Vfc3RhdCB7CisJY3B1dGltZTY0X3QgdXNlcjsKKwljcHV0aW1lNjRfdCBuaWNlOworCWNwdXRpbWU2NF90IHN5c3RlbTsKKwljcHV0aW1lNjRfdCBzb2Z0aXJxOworCWNwdXRpbWU2NF90IGlycTsKKwljcHV0aW1lNjRfdCBpZGxlOworCWNwdXRpbWU2NF90IGlvd2FpdDsKKwljcHV0aW1lNjRfdCBzdGVhbDsKK307CisKK3N0cnVjdCBrZXJuZWxfc3RhdCB7CisJc3RydWN0IGNwdV91c2FnZV9zdGF0CWNwdXN0YXQ7CisJdW5zaWduZWQgaW50IGlycXNbTlJfSVJRU107Cit9OworCitERUNMQVJFX1BFUl9DUFUoc3RydWN0IGtlcm5lbF9zdGF0LCBrc3RhdCk7CisKKyNkZWZpbmUga3N0YXRfY3B1KGNwdSkJcGVyX2NwdShrc3RhdCwgY3B1KQorLyogTXVzdCBoYXZlIHByZWVtcHRpb24gZGlzYWJsZWQgZm9yIHRoaXMgdG8gYmUgbWVhbmluZ2Z1bC4gKi8KKyNkZWZpbmUga3N0YXRfdGhpc19jcHUJX19nZXRfY3B1X3Zhcihrc3RhdCkKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBucl9jb250ZXh0X3N3aXRjaGVzKHZvaWQpOworCisvKgorICogTnVtYmVyIG9mIGludGVycnVwdHMgcGVyIHNwZWNpZmljIElSUSBzb3VyY2UsIHNpbmNlIGJvb3R1cAorICovCitzdGF0aWMgaW5saW5lIGludCBrc3RhdF9pcnFzKGludCBpcnEpCit7CisJaW50IGksIHN1bT0wOworCisJZm9yIChpID0gMDsgaSA8IE5SX0NQVVM7IGkrKykKKwkJaWYgKGNwdV9wb3NzaWJsZShpKSkKKwkJCXN1bSArPSBrc3RhdF9jcHUoaSkuaXJxc1tpcnFdOworCisJcmV0dXJuIHN1bTsKK30KKworZXh0ZXJuIHZvaWQgYWNjb3VudF91c2VyX3RpbWUoc3RydWN0IHRhc2tfc3RydWN0ICosIGNwdXRpbWVfdCk7CitleHRlcm4gdm9pZCBhY2NvdW50X3N5c3RlbV90aW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqLCBpbnQsIGNwdXRpbWVfdCk7CitleHRlcm4gdm9pZCBhY2NvdW50X3N0ZWFsX3RpbWUoc3RydWN0IHRhc2tfc3RydWN0ICosIGNwdXRpbWVfdCk7CisKKyNlbmRpZiAvKiBfTElOVVhfS0VSTkVMX1NUQVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZXJuZWxjYXBpLmggYi9pbmNsdWRlL2xpbnV4L2tlcm5lbGNhcGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTFiYjJjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9rZXJuZWxjYXBpLmgKQEAgLTAsMCArMSwxNjEgQEAKKy8qCisgKiAkSWQ6IGtlcm5lbGNhcGkuaCx2IDEuOC42LjIgMjAwMS8wMi8wNyAxMTozMTozMSBrYWkgRXhwICQKKyAqIAorICogS2VybmVsIENBUEkgMi4wIEludGVyZmFjZSBmb3IgTGludXgKKyAqIAorICogKGMpIENvcHlyaWdodCAxOTk3IGJ5IENhcnN0ZW4gUGFldGggKGNhbGxlQGNhbGxlLmluLWJlcmxpbi5kZSkKKyAqIAorICovCisKKyNpZm5kZWYgX19LRVJORUxDQVBJX0hfXworI2RlZmluZSBfX0tFUk5FTENBUElfSF9fCisKKyNkZWZpbmUgQ0FQSV9NQVhBUFBMCTI0MAkvKiBtYXhpbXVtIG51bWJlciBvZiBhcHBsaWNhdGlvbnMgICovCisjZGVmaW5lIENBUElfTUFYQ09OVFIJMzIJLyogbWF4aW11bSBudW1iZXIgb2YgY29udHJvbGxlciAgICAqLworI2RlZmluZSBDQVBJX01BWERBVEFXSU5ET1cJOAorCisKK3R5cGVkZWYgc3RydWN0IGtjYXBpX2ZsYWdkZWYgeworCWludCBjb250cjsKKwlpbnQgZmxhZzsKK30ga2NhcGlfZmxhZ2RlZjsKKwordHlwZWRlZiBzdHJ1Y3Qga2NhcGlfY2FyZGRlZiB7CisJY2hhcgkJZHJpdmVyWzMyXTsKKwl1bnNpZ25lZCBpbnQJcG9ydDsKKwl1bnNpZ25lZAlpcnE7CisJdW5zaWduZWQgaW50CW1lbWJhc2U7CisJaW50CQljYXJkbnI7Cit9IGtjYXBpX2NhcmRkZWY7CisKKy8qIG5ldyBpb2N0bHMgPj0gMTAgKi8KKyNkZWZpbmUgS0NBUElfQ01EX1RSQUNFCQkxMAorI2RlZmluZSBLQ0FQSV9DTURfQUREQ0FSRAkxMQkvKiBPQlNPTEVURSAqLworCisvKiAKKyAqIGZsYWcgPiAyID0+IHRyYWNlIGFsc28gZGF0YQorICogZmxhZyAmIDEgPT4gc2hvdyB0cmFjZQorICovCisjZGVmaW5lIEtDQVBJX1RSQUNFX09GRgkJCTAKKyNkZWZpbmUgS0NBUElfVFJBQ0VfU0hPUlRfTk9fREFUQQkxCisjZGVmaW5lIEtDQVBJX1RSQUNFX0ZVTExfTk9fREFUQQkyCisjZGVmaW5lIEtDQVBJX1RSQUNFX1NIT1JUCQkzCisjZGVmaW5lIEtDQVBJX1RSQUNFX0ZVTEwJCTQKKworCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorCisjZGVmaW5lCUtDSV9DT05UUlVQCTAJLyogYXJnOiBzdHJ1Y3QgY2FwaV9wcm9maWxlICovCisjZGVmaW5lCUtDSV9DT05UUkRPV04JMQkvKiBhcmc6IE5VTEwgKi8KKworc3RydWN0IGNhcGkyMF9hcHBsIHsKKwl1MTYgYXBwbGlkOworCWNhcGlfcmVnaXN0ZXJfcGFyYW1zIHJwYXJhbTsKKwl2b2lkICgqcmVjdl9tZXNzYWdlKShzdHJ1Y3QgY2FwaTIwX2FwcGwgKmFwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKwl2b2lkICpwcml2YXRlOworCisJLyogaW50ZXJuYWwgdG8ga2VybmVsY2FwaS5vICovCisJdW5zaWduZWQgbG9uZyBucmVjdmN0bHBrdDsKKwl1bnNpZ25lZCBsb25nIG5yZWN2ZGF0YXBrdDsKKwl1bnNpZ25lZCBsb25nIG5zZW50Y3RscGt0OworCXVuc2lnbmVkIGxvbmcgbnNlbnRkYXRhcGt0OworCXN0cnVjdCBzZW1hcGhvcmUgcmVjdl9zZW07CisJc3RydWN0IHNrX2J1ZmZfaGVhZCByZWN2X3F1ZXVlOworCXN0cnVjdCB3b3JrX3N0cnVjdCByZWN2X3dvcms7CisJaW50IHJlbGVhc2VfaW5fcHJvZ3Jlc3M7CisKKwkvKiB1Z2x5IGhhY2sgdG8gYWxsb3cgZm9yIG5vdGlmaWNhdGlvbiBvZiBhZGRlZC9yZW1vdmVkCisJICogY29udHJvbGxlcnMuIFRoZSBSaWdodCBXYXkgKHRtKSBpcyBrbm93bi4gWFhYCisJICovCisJdm9pZCAoKmNhbGxiYWNrKSAodW5zaWduZWQgaW50IGNtZCwgX191MzIgY29udHIsIHZvaWQgKmRhdGEpOworfTsKKwordTE2IGNhcGkyMF9pc2luc3RhbGxlZCh2b2lkKTsKK3UxNiBjYXBpMjBfcmVnaXN0ZXIoc3RydWN0IGNhcGkyMF9hcHBsICphcCk7Cit1MTYgY2FwaTIwX3JlbGVhc2Uoc3RydWN0IGNhcGkyMF9hcHBsICphcCk7Cit1MTYgY2FwaTIwX3B1dF9tZXNzYWdlKHN0cnVjdCBjYXBpMjBfYXBwbCAqYXAsIHN0cnVjdCBza19idWZmICpza2IpOwordTE2IGNhcGkyMF9nZXRfbWFudWZhY3R1cmVyKHUzMiBjb250ciwgdTggYnVmW0NBUElfTUFOVUZBQ1RVUkVSX0xFTl0pOwordTE2IGNhcGkyMF9nZXRfdmVyc2lvbih1MzIgY29udHIsIHN0cnVjdCBjYXBpX3ZlcnNpb24gKnZlcnApOwordTE2IGNhcGkyMF9nZXRfc2VyaWFsKHUzMiBjb250ciwgdTggc2VyaWFsW0NBUElfU0VSSUFMX0xFTl0pOwordTE2IGNhcGkyMF9nZXRfcHJvZmlsZSh1MzIgY29udHIsIHN0cnVjdCBjYXBpX3Byb2ZpbGUgKnByb2ZwKTsKK2ludCBjYXBpMjBfbWFudWZhY3R1cmVyKHVuc2lnbmVkIGludCBjbWQsIHZvaWQgX191c2VyICpkYXRhKTsKKworLyogdGVtcG9yYXJ5IGhhY2sgWFhYICovCit2b2lkIGNhcGkyMF9zZXRfY2FsbGJhY2soc3RydWN0IGNhcGkyMF9hcHBsICphcCwgCisJCQkgdm9pZCAoKmNhbGxiYWNrKSAodW5zaWduZWQgaW50IGNtZCwgX191MzIgY29udHIsIHZvaWQgKmRhdGEpKTsKKworCisKKyNkZWZpbmUgQ0FQSV9OT0VSUk9SICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMAorCisjZGVmaW5lIENBUElfVE9PTUFOWUFQUExTCQkgIDB4MTAwMQorI2RlZmluZSBDQVBJX0xPR0JMS1NJWkVUT1NNQUxMCSAgICAgICAgICAweDEwMDIKKyNkZWZpbmUgQ0FQSV9CVUZGRVhFQ0VFRFM2NEsgCSAgICAgICAgICAweDEwMDMKKyNkZWZpbmUgQ0FQSV9NU0dCVUZTSVpFVE9PU01BTEwJICAgICAgICAgIDB4MTAwNAorI2RlZmluZSBDQVBJX0FOWkxPR0NPTk5OT1RTVVBQT1JURUQJICAweDEwMDUKKyNkZWZpbmUgQ0FQSV9SRUdSRVNFUlZFRAkJICAweDEwMDYKKyNkZWZpbmUgQ0FQSV9SRUdCVVNZIAkJICAgICAgICAgIDB4MTAwNworI2RlZmluZSBDQVBJX1JFR09TUkVTT1VSQ0VFUlIJICAgICAgICAgIDB4MTAwOAorI2RlZmluZSBDQVBJX1JFR05PVElOU1RBTExFRCAJICAgICAgICAgIDB4MTAwOQorI2RlZmluZSBDQVBJX1JFR0NUUkxFUk5PVFNVUFBPUlRFWFRFUVVJUCAgMHgxMDBhCisjZGVmaW5lIENBUElfUkVHQ1RSTEVST05MWVNVUFBPUlRFWFRFUVVJUCAweDEwMGIKKworI2RlZmluZSBDQVBJX0lMTEFQUE5SCQkgICAgICAgICAgMHgxMTAxCisjZGVmaW5lIENBUElfSUxMQ01ET1JTVUJDTURPUk1TR1RPU01BTEwgICAweDExMDIKKyNkZWZpbmUgQ0FQSV9TRU5EUVVFVUVGVUxMCQkgIDB4MTEwMworI2RlZmluZSBDQVBJX1JFQ0VJVkVRVUVVRUVNUFRZCSAgICAgICAgICAweDExMDQKKyNkZWZpbmUgQ0FQSV9SRUNFSVZFT1ZFUkZMT1cgCSAgICAgICAgICAweDExMDUKKyNkZWZpbmUgQ0FQSV9VTktOT1dOTk9UUEFSCQkgIDB4MTEwNgorI2RlZmluZSBDQVBJX01TR0JVU1kgCQkgICAgICAgICAgMHgxMTA3CisjZGVmaW5lIENBUElfTVNHT1NSRVNPVVJDRUVSUgkgICAgICAgICAgMHgxMTA4CisjZGVmaW5lIENBUElfTVNHTk9USU5TVEFMTEVEIAkgICAgICAgICAgMHgxMTA5CisjZGVmaW5lIENBUElfTVNHQ1RSTEVSTk9UU1VQUE9SVEVYVEVRVUlQICAweDExMGEKKyNkZWZpbmUgQ0FQSV9NU0dDVFJMRVJPTkxZU1VQUE9SVEVYVEVRVUlQIDB4MTEwYgorCit0eXBlZGVmIGVudW0geworICAgICAgICBDYXBpTWVzc2FnZU5vdFN1cHBvcnRlZEluQ3VycmVudFN0YXRlID0gMHgyMDAxLAorICAgICAgICBDYXBpSWxsQ29udHJQbGNpTmNjaSAgICAgICAgICAgICAgICAgID0gMHgyMDAyLAorICAgICAgICBDYXBpTm9QbGNpQXZhaWxhYmxlICAgICAgICAgICAgICAgICAgID0gMHgyMDAzLAorICAgICAgICBDYXBpTm9OY2NpQXZhaWxhYmxlICAgICAgICAgICAgICAgICAgID0gMHgyMDA0LAorICAgICAgICBDYXBpTm9MaXN0ZW5SZXNvdXJjZXNBdmFpbGFibGUgICAgICAgID0gMHgyMDA1LAorICAgICAgICBDYXBpTm9GYXhSZXNvdXJjZXNBdmFpbGFibGUgICAgICAgICAgID0gMHgyMDA2LAorICAgICAgICBDYXBpSWxsTWVzc2FnZVBhcm1Db2RpbmcgICAgICAgICAgICAgID0gMHgyMDA3LAorfSBSRVNPVVJDRV9DT0RJTkdfUFJPQkxFTTsKKwordHlwZWRlZiBlbnVtIHsKKyAgICAgICAgQ2FwaUIxUHJvdG9jb2xOb3RTdXBwb3J0ZWQgICAgICAgICAgICAgICAgICAgICAgPSAweDMwMDEsCisgICAgICAgIENhcGlCMlByb3RvY29sTm90U3VwcG9ydGVkICAgICAgICAgICAgICAgICAgICAgID0gMHgzMDAyLAorICAgICAgICBDYXBpQjNQcm90b2NvbE5vdFN1cHBvcnRlZCAgICAgICAgICAgICAgICAgICAgICA9IDB4MzAwMywKKyAgICAgICAgQ2FwaUIxUHJvdG9jb2xQYXJhbWV0ZXJOb3RTdXBwb3J0ZWQgICAgICAgICAgICAgPSAweDMwMDQsCisgICAgICAgIENhcGlCMlByb3RvY29sUGFyYW1ldGVyTm90U3VwcG9ydGVkICAgICAgICAgICAgID0gMHgzMDA1LAorICAgICAgICBDYXBpQjNQcm90b2NvbFBhcmFtZXRlck5vdFN1cHBvcnRlZCAgICAgICAgICAgICA9IDB4MzAwNiwKKyAgICAgICAgQ2FwaUJQcm90b2NvbENvbWJpbmF0aW9uTm90U3VwcG9ydGVkICAgICAgICAgICAgPSAweDMwMDcsCisgICAgICAgIENhcGlOY3BpTm90U3VwcG9ydGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgzMDA4LAorICAgICAgICBDYXBpQ2lwVmFsdWVVbmtub3duICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MzAwOSwKKyAgICAgICAgQ2FwaUZsYWdzTm90U3VwcG9ydGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDMwMGEsCisgICAgICAgIENhcGlGYWNpbGl0eU5vdFN1cHBvcnRlZCAgICAgICAgICAgICAgICAgICAgICAgID0gMHgzMDBiLAorICAgICAgICBDYXBpRGF0YUxlbmd0aE5vdFN1cHBvcnRlZEJ5Q3VycmVudFByb3RvY29sICAgICA9IDB4MzAwYywKKyAgICAgICAgQ2FwaVJlc2V0UHJvY2VkdXJlTm90U3VwcG9ydGVkQnlDdXJyZW50UHJvdG9jb2wgPSAweDMwMGQsCisgICAgICAgIENhcGlUZWlBc3NpZ25tZW50RmFpbGVkICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgzMDBlLAorfSBSRVFVRVNURURfU0VSVklDRVNfUFJPQkxFTTsKKwordHlwZWRlZiBlbnVtIHsKKwlDYXBpU3VjY2VzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDAwMCwKKwlDYXBpU3VwcGxlbWVudGFyeVNlcnZpY2VOb3RTdXBwb3J0ZWQgICAgICAgICAgICA9IDB4MzAwZSwKKwlDYXBpUmVxdWVzdE5vdEFsbG93ZWRJblRoaXNTdGF0ZSAgICAgICAgICAgICAgICA9IDB4MzAxMCwKK30gU1VQUExFTUVOVEFSWV9TRVJWSUNFX0lORk87CisKK3R5cGVkZWYgZW51bSB7CisJQ2FwaVByb3RvY29sRXJyb3JMYXllcjEgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDMzMDEsCisJQ2FwaVByb3RvY29sRXJyb3JMYXllcjIgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDMzMDIsCisJQ2FwaVByb3RvY29sRXJyb3JMYXllcjMgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDMzMDMsCisJQ2FwaVRpbWVPdXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDMzMDMsIC8vIFN1cHBTZXJ2aWNlUmVhc29uCisJQ2FwaUNhbGxHaXZlblRvT3RoZXJBcHBsaWNhdGlvbiAgICAgICAgICAgICAgICAgPSAweDMzMDQsCit9IENBUElfUkVBU09OOworCisjZW5kaWYJCQkJLyogX19LRVJORUxfXyAqLworCisjZW5kaWYJCQkJLyogX19LRVJORUxDQVBJX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZXktdWkuaCBiL2luY2x1ZGUvbGludXgva2V5LXVpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBjYzdiNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgva2V5LXVpLmgKQEAgLTAsMCArMSw5NyBAQAorLyoga2V5LXVpLmg6IGtleSB1c2Vyc3BhY2UgaW50ZXJmYWNlIHN0dWZmIGZvciB1c2UgYnkga2V5ZnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfTElOVVhfS0VZX1VJX0gKKyNkZWZpbmUgX0xJTlVYX0tFWV9VSV9ICisKKyNpbmNsdWRlIDxsaW51eC9rZXkuaD4KKworLyogdGhlIGtleSB0cmVlICovCitleHRlcm4gc3RydWN0IHJiX3Jvb3Qga2V5X3NlcmlhbF90cmVlOworZXh0ZXJuIHNwaW5sb2NrX3Qga2V5X3NlcmlhbF9sb2NrOworCisvKiByZXF1aXJlZCBwZXJtaXNzaW9ucyAqLworI2RlZmluZQlLRVlfVklFVwkweDAxCS8qIHJlcXVpcmUgcGVybWlzc2lvbiB0byB2aWV3IGF0dHJpYnV0ZXMgKi8KKyNkZWZpbmUJS0VZX1JFQUQJMHgwMgkvKiByZXF1aXJlIHBlcm1pc3Npb24gdG8gcmVhZCBjb250ZW50ICovCisjZGVmaW5lCUtFWV9XUklURQkweDA0CS8qIHJlcXVpcmUgcGVybWlzc2lvbiB0byB1cGRhdGUgLyBtb2RpZnkgKi8KKyNkZWZpbmUJS0VZX1NFQVJDSAkweDA4CS8qIHJlcXVpcmUgcGVybWlzc2lvbiB0byBzZWFyY2ggKGtleXJpbmcpIG9yIGZpbmQgKGtleSkgKi8KKyNkZWZpbmUJS0VZX0xJTksJMHgxMAkvKiByZXF1aXJlIHBlcm1pc3Npb24gdG8gbGluayAqLworI2RlZmluZQlLRVlfQUxMCQkweDFmCS8qIGFsbCB0aGUgYWJvdmUgcGVybWlzc2lvbnMgKi8KKworLyoKKyAqIHRoZSBrZXlyaW5nIHBheWxvYWQgY29udGFpbnMgYSBsaXN0IG9mIHRoZSBrZXlzIHRvIHdoaWNoIHRoZSBrZXlyaW5nIGlzCisgKiBzdWJzY3JpYmVkCisgKi8KK3N0cnVjdCBrZXlyaW5nX2xpc3QgeworCXVuc2lnbmVkCW1heGtleXM7CS8qIG1heCBrZXlzIHRoaXMgbGlzdCBjYW4gaG9sZCAqLworCXVuc2lnbmVkCW5rZXlzOwkJLyogbnVtYmVyIG9mIGtleXMgY3VycmVudGx5IGhlbGQgKi8KKwlzdHJ1Y3Qga2V5CSprZXlzWzBdOworfTsKKworCisvKgorICogY2hlY2sgdG8gc2VlIHdoZXRoZXIgcGVybWlzc2lvbiBpcyBncmFudGVkIHRvIHVzZSBhIGtleSBpbiB0aGUgZGVzaXJlZCB3YXkKKyAqLworc3RhdGljIGlubGluZSBpbnQga2V5X3Blcm1pc3Npb24oY29uc3Qgc3RydWN0IGtleSAqa2V5LCBrZXlfcGVybV90IHBlcm0pCit7CisJa2V5X3Blcm1fdCBrcGVybTsKKworCWlmIChrZXktPnVpZCA9PSBjdXJyZW50LT5mc3VpZCkKKwkJa3Blcm0gPSBrZXktPnBlcm0gPj4gMTY7CisJZWxzZSBpZiAoa2V5LT5naWQgIT0gLTEgJiYKKwkJIGtleS0+cGVybSAmIEtFWV9HUlBfQUxMICYmCisJCSBpbl9ncm91cF9wKGtleS0+Z2lkKQorCQkgKQorCQlrcGVybSA9IGtleS0+cGVybSA+PiA4OworCWVsc2UKKwkJa3Blcm0gPSBrZXktPnBlcm07CisKKwlrcGVybSA9IGtwZXJtICYgcGVybSAmIEtFWV9BTEw7CisKKwlyZXR1cm4ga3Blcm0gPT0gcGVybTsKK30KKworLyoKKyAqIGNoZWNrIHRvIHNlZSB3aGV0aGVyIHBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byB1c2UgYSBrZXkgaW4gYXQgbGVhc3Qgb25lIG9mCisgKiB0aGUgZGVzaXJlZCB3YXlzCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGtleV9hbnlfcGVybWlzc2lvbihjb25zdCBzdHJ1Y3Qga2V5ICprZXksIGtleV9wZXJtX3QgcGVybSkKK3sKKwlrZXlfcGVybV90IGtwZXJtOworCisJaWYgKGtleS0+dWlkID09IGN1cnJlbnQtPmZzdWlkKQorCQlrcGVybSA9IGtleS0+cGVybSA+PiAxNjsKKwllbHNlIGlmIChrZXktPmdpZCAhPSAtMSAmJgorCQkga2V5LT5wZXJtICYgS0VZX0dSUF9BTEwgJiYKKwkJIGluX2dyb3VwX3Aoa2V5LT5naWQpCisJCSApCisJCWtwZXJtID0ga2V5LT5wZXJtID4+IDg7CisJZWxzZQorCQlrcGVybSA9IGtleS0+cGVybTsKKworCWtwZXJtID0ga3Blcm0gJiBwZXJtICYgS0VZX0FMTDsKKworCXJldHVybiBrcGVybSAhPSAwOworfQorCisKK2V4dGVybiBzdHJ1Y3Qga2V5ICpsb29rdXBfdXNlcl9rZXkoa2V5X3NlcmlhbF90IGlkLCBpbnQgY3JlYXRlLCBpbnQgcGFydCwKKwkJCQkgICBrZXlfcGVybV90IHBlcm0pOworCitleHRlcm4gbG9uZyBqb2luX3Nlc3Npb25fa2V5cmluZyhjb25zdCBjaGFyICpuYW1lKTsKKworZXh0ZXJuIHN0cnVjdCBrZXlfdHlwZSAqa2V5X3R5cGVfbG9va3VwKGNvbnN0IGNoYXIgKnR5cGUpOworZXh0ZXJuIHZvaWQga2V5X3R5cGVfcHV0KHN0cnVjdCBrZXlfdHlwZSAqa3R5cGUpOworCisjZGVmaW5lIGtleV9uZWdhdGl2ZV90aW1lb3V0CTYwCS8qIGRlZmF1bHQgdGltZW91dCBvbiBhIG5lZ2F0aXZlIGtleSdzIGV4aXN0ZW5jZSAqLworCisKKyNlbmRpZiAvKiBfTElOVVhfS0VZX1VJX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2V5LmggYi9pbmNsdWRlL2xpbnV4L2tleS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhYTQ2ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2tleS5oCkBAIC0wLDAgKzEsMjkxIEBACisvKiBrZXkuaDogYXV0aGVudGljYXRpb24gdG9rZW4gYW5kIGFjY2VzcyBrZXkgbWFuYWdlbWVudAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKgorICogU2VlIERvY3VtZW50YXRpb24va2V5cy50eHQgZm9yIGluZm9ybWF0aW9uIG9uIGtleXMva2V5cmluZ3MuCisgKi8KKworI2lmbmRlZiBfTElOVVhfS0VZX0gKKyNkZWZpbmUgX0xJTlVYX0tFWV9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKworI2lmZGVmIF9fS0VSTkVMX18KKworLyoga2V5IGhhbmRsZSBzZXJpYWwgbnVtYmVyICovCit0eXBlZGVmIGludDMyX3Qga2V5X3NlcmlhbF90OworCisvKiBrZXkgaGFuZGxlIHBlcm1pc3Npb25zIG1hc2sgKi8KK3R5cGVkZWYgdWludDMyX3Qga2V5X3Blcm1fdDsKKworc3RydWN0IGtleTsKKworI2lmZGVmIENPTkZJR19LRVlTCisKKyN1bmRlZiBLRVlfREVCVUdHSU5HCisKKyNkZWZpbmUgS0VZX1VTUl9WSUVXCTB4MDAwMTAwMDAJLyogdXNlciBjYW4gdmlldyBhIGtleSdzIGF0dHJpYnV0ZXMgKi8KKyNkZWZpbmUgS0VZX1VTUl9SRUFECTB4MDAwMjAwMDAJLyogdXNlciBjYW4gcmVhZCBrZXkgcGF5bG9hZCAvIHZpZXcga2V5cmluZyAqLworI2RlZmluZSBLRVlfVVNSX1dSSVRFCTB4MDAwNDAwMDAJLyogdXNlciBjYW4gdXBkYXRlIGtleSBwYXlsb2FkIC8gYWRkIGxpbmsgdG8ga2V5cmluZyAqLworI2RlZmluZSBLRVlfVVNSX1NFQVJDSAkweDAwMDgwMDAwCS8qIHVzZXIgY2FuIGZpbmQgYSBrZXkgaW4gc2VhcmNoIC8gc2VhcmNoIGEga2V5cmluZyAqLworI2RlZmluZSBLRVlfVVNSX0xJTksJMHgwMDEwMDAwMAkvKiB1c2VyIGNhbiBjcmVhdGUgYSBsaW5rIHRvIGEga2V5L2tleXJpbmcgKi8KKyNkZWZpbmUgS0VZX1VTUl9BTEwJMHgwMDFmMDAwMAorCisjZGVmaW5lIEtFWV9HUlBfVklFVwkweDAwMDAwMTAwCS8qIGdyb3VwIHBlcm1pc3Npb25zLi4uICovCisjZGVmaW5lIEtFWV9HUlBfUkVBRAkweDAwMDAwMjAwCisjZGVmaW5lIEtFWV9HUlBfV1JJVEUJMHgwMDAwMDQwMAorI2RlZmluZSBLRVlfR1JQX1NFQVJDSAkweDAwMDAwODAwCisjZGVmaW5lIEtFWV9HUlBfTElOSwkweDAwMDAxMDAwCisjZGVmaW5lIEtFWV9HUlBfQUxMCTB4MDAwMDFmMDAKKworI2RlZmluZSBLRVlfT1RIX1ZJRVcJMHgwMDAwMDAwMQkvKiB0aGlyZCBwYXJ0eSBwZXJtaXNzaW9ucy4uLiAqLworI2RlZmluZSBLRVlfT1RIX1JFQUQJMHgwMDAwMDAwMgorI2RlZmluZSBLRVlfT1RIX1dSSVRFCTB4MDAwMDAwMDQKKyNkZWZpbmUgS0VZX09USF9TRUFSQ0gJMHgwMDAwMDAwOAorI2RlZmluZSBLRVlfT1RIX0xJTksJMHgwMDAwMDAxMAorI2RlZmluZSBLRVlfT1RIX0FMTAkweDAwMDAwMDFmCisKK3N0cnVjdCBzZXFfZmlsZTsKK3N0cnVjdCB1c2VyX3N0cnVjdDsKK3N0cnVjdCBzaWduYWxfc3RydWN0OworCitzdHJ1Y3Qga2V5X3R5cGU7CitzdHJ1Y3Qga2V5X293bmVyOworc3RydWN0IGtleXJpbmdfbGlzdDsKK3N0cnVjdCBrZXlyaW5nX25hbWU7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBhdXRoZW50aWNhdGlvbiB0b2tlbiAvIGFjY2VzcyBjcmVkZW50aWFsIC8ga2V5cmluZworICogLSB0eXBlcyBvZiBrZXkgaW5jbHVkZToKKyAqICAgLSBrZXlyaW5ncworICogICAtIGRpc2sgZW5jcnlwdGlvbiBJRHMKKyAqICAgLSBLZXJiZXJvcyBUR1RzIGFuZCB0aWNrZXRzCisgKi8KK3N0cnVjdCBrZXkgeworCWF0b21pY190CQl1c2FnZTsJCS8qIG51bWJlciBvZiByZWZlcmVuY2VzICovCisJa2V5X3NlcmlhbF90CQlzZXJpYWw7CQkvKiBrZXkgc2VyaWFsIG51bWJlciAqLworCXN0cnVjdCByYl9ub2RlCQlzZXJpYWxfbm9kZTsKKwlzdHJ1Y3Qga2V5X3R5cGUJCSp0eXBlOwkJLyogdHlwZSBvZiBrZXkgKi8KKwlyd2xvY2tfdAkJbG9jazsJCS8qIGV4YW1pbmF0aW9uIHZzIGNoYW5nZSBsb2NrICovCisJc3RydWN0IHJ3X3NlbWFwaG9yZQlzZW07CQkvKiBjaGFuZ2UgdnMgY2hhbmdlIHNlbSAqLworCXN0cnVjdCBrZXlfdXNlcgkJKnVzZXI7CQkvKiBvd25lciBvZiB0aGlzIGtleSAqLworCXRpbWVfdAkJCWV4cGlyeTsJCS8qIHRpbWUgYXQgd2hpY2gga2V5IGV4cGlyZXMgKG9yIDApICovCisJdWlkX3QJCQl1aWQ7CisJZ2lkX3QJCQlnaWQ7CisJa2V5X3Blcm1fdAkJcGVybTsJCS8qIGFjY2VzcyBwZXJtaXNzaW9ucyAqLworCXVuc2lnbmVkIHNob3J0CQlxdW90YWxlbjsJLyogbGVuZ3RoIGFkZGVkIHRvIHF1b3RhICovCisJdW5zaWduZWQgc2hvcnQJCWRhdGFsZW47CS8qIHBheWxvYWQgZGF0YSBsZW5ndGggKi8KKwl1bnNpZ25lZCBzaG9ydAkJZmxhZ3M7CQkvKiBzdGF0dXMgZmxhZ3MgKGNoYW5nZSB3aXRoIGxvY2sgd3JpdGVsb2NrZWQpICovCisjZGVmaW5lIEtFWV9GTEFHX0lOU1RBTlRJQVRFRAkweDAwMDAwMDAxCS8qIHNldCBpZiBrZXkgaGFzIGJlZW4gaW5zdGFudGlhdGVkICovCisjZGVmaW5lIEtFWV9GTEFHX0RFQUQJCTB4MDAwMDAwMDIJLyogc2V0IGlmIGtleSB0eXBlIGhhcyBiZWVuIGRlbGV0ZWQgKi8KKyNkZWZpbmUgS0VZX0ZMQUdfUkVWT0tFRAkweDAwMDAwMDA0CS8qIHNldCBpZiBrZXkgaGFkIGJlZW4gcmV2b2tlZCAqLworI2RlZmluZSBLRVlfRkxBR19JTl9RVU9UQQkweDAwMDAwMDA4CS8qIHNldCBpZiBrZXkgY29uc3VtZXMgcXVvdGEgKi8KKyNkZWZpbmUgS0VZX0ZMQUdfVVNFUl9DT05TVFJVQ1QJMHgwMDAwMDAxMAkvKiBzZXQgaWYga2V5IGlzIGJlaW5nIGNvbnN0cnVjdGVkIGluIHVzZXJzcGFjZSAqLworI2RlZmluZSBLRVlfRkxBR19ORUdBVElWRQkweDAwMDAwMDIwCS8qIHNldCBpZiBrZXkgaXMgbmVnYXRpdmUgKi8KKworI2lmZGVmIEtFWV9ERUJVR0dJTkcKKwl1bnNpZ25lZAkJbWFnaWM7CisjZGVmaW5lIEtFWV9ERUJVR19NQUdJQwkJMHgxODI3MzY0NXUKKyNkZWZpbmUgS0VZX0RFQlVHX01BR0lDX1gJMHhmOGU5ZGFjYnUKKyNlbmRpZgorCisJLyogdGhlIGRlc2NyaXB0aW9uIHN0cmluZworCSAqIC0gdGhpcyBpcyB1c2VkIHRvIG1hdGNoIGEga2V5IGFnYWluc3Qgc2VhcmNoIGNyaXRlcmlhCisJICogLSB0aGlzIHNob3VsZCBiZSBhIHByaW50YWJsZSBzdHJpbmcKKwkgKiAtIGVnOiBmb3Iga3JiNSBBRlMsIHRoaXMgbWlnaHQgYmUgImFmc0BSRURIQVQuQ09NIgorCSAqLworCWNoYXIJCQkqZGVzY3JpcHRpb247CisKKwkvKiB0eXBlIHNwZWNpZmljIGRhdGEKKwkgKiAtIHRoaXMgaXMgdXNlZCBieSB0aGUga2V5cmluZyB0eXBlIHRvIGluZGV4IHRoZSBuYW1lCisJICovCisJdW5pb24geworCQlzdHJ1Y3QgbGlzdF9oZWFkCWxpbms7CisJfSB0eXBlX2RhdGE7CisKKwkvKiBrZXkgZGF0YQorCSAqIC0gdGhpcyBpcyB1c2VkIHRvIGhvbGQgdGhlIGRhdGEgYWN0dWFsbHkgdXNlZCBpbiBjcnlwdG9ncmFwaHkgb3IKKwkgKiAgIHdoYXRldmVyCisJICovCisJdW5pb24geworCQl1bnNpZ25lZCBsb25nCQl2YWx1ZTsKKwkJdm9pZAkJCSpkYXRhOworCQlzdHJ1Y3Qga2V5cmluZ19saXN0CSpzdWJzY3JpcHRpb25zOworCX0gcGF5bG9hZDsKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBrZXJuZWwgbWFuYWdlZCBrZXkgdHlwZSBkZWZpbml0aW9uCisgKi8KK3N0cnVjdCBrZXlfdHlwZSB7CisJLyogbmFtZSBvZiB0aGUgdHlwZSAqLworCWNvbnN0IGNoYXIgKm5hbWU7CisKKwkvKiBkZWZhdWx0IHBheWxvYWQgbGVuZ3RoIGZvciBxdW90YSBwcmVjYWxjdWxhdGlvbiAob3B0aW9uYWwpCisJICogLSB0aGlzIGNhbiBiZSB1c2VkIGluc3RlYWQgb2YgY2FsbGluZyBrZXlfcGF5bG9hZF9yZXNlcnZlKCksIHRoYXQKKwkgKiAgIGZ1bmN0aW9uIG9ubHkgbmVlZHMgdG8gYmUgY2FsbGVkIGlmIHRoZSByZWFsIGRhdGFsZW4gaXMgZGlmZmVyZW50CisJICovCisJc2l6ZV90IGRlZl9kYXRhbGVuOworCisJLyogaW5zdGFudGlhdGUgYSBrZXkgb2YgdGhpcyB0eXBlCisJICogLSB0aGlzIG1ldGhvZCBzaG91bGQgY2FsbCBrZXlfcGF5bG9hZF9yZXNlcnZlKCkgdG8gZGV0ZXJtaW5lIGlmIHRoZQorCSAqICAgdXNlcidzIHF1b3RhIHdpbGwgaG9sZCB0aGUgcGF5bG9hZAorCSAqLworCWludCAoKmluc3RhbnRpYXRlKShzdHJ1Y3Qga2V5ICprZXksIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkYXRhbGVuKTsKKworCS8qIGR1cGxpY2F0ZSBhIGtleSBvZiB0aGlzIHR5cGUgKG9wdGlvbmFsKQorCSAqIC0gdGhlIHNvdXJjZSBrZXkgd2lsbCBiZSBsb2NrZWQgYWdhaW5zdCBjaGFuZ2UKKwkgKiAtIHRoZSBuZXcgZGVzY3JpcHRpb24gd2lsbCBiZSBhdHRhY2hlZAorCSAqIC0gdGhlIHF1b3RhIHdpbGwgaGF2ZSBiZWVuIGFkanVzdGVkIGF1dG9tYXRpY2FsbHkgZnJvbQorCSAqICAgc291cmNlLT5xdW90YWxlbgorCSAqLworCWludCAoKmR1cGxpY2F0ZSkoc3RydWN0IGtleSAqa2V5LCBjb25zdCBzdHJ1Y3Qga2V5ICpzb3VyY2UpOworCisJLyogdXBkYXRlIGEga2V5IG9mIHRoaXMgdHlwZSAob3B0aW9uYWwpCisJICogLSB0aGlzIG1ldGhvZCBzaG91bGQgY2FsbCBrZXlfcGF5bG9hZF9yZXNlcnZlKCkgdG8gcmVjYWxjdWxhdGUgdGhlCisJICogICBxdW90YSBjb25zdW1wdGlvbgorCSAqIC0gdGhlIGtleSBtdXN0IGJlIGxvY2tlZCBhZ2FpbnN0IHJlYWQgd2hlbiBtb2RpZnlpbmcKKwkgKi8KKwlpbnQgKCp1cGRhdGUpKHN0cnVjdCBrZXkgKmtleSwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFsZW4pOworCisJLyogbWF0Y2ggYSBrZXkgYWdhaW5zdCBhIGRlc2NyaXB0aW9uICovCisJaW50ICgqbWF0Y2gpKGNvbnN0IHN0cnVjdCBrZXkgKmtleSwgY29uc3Qgdm9pZCAqZGVzYyk7CisKKwkvKiBjbGVhciB0aGUgZGF0YSBmcm9tIGEga2V5IChvcHRpb25hbCkgKi8KKwl2b2lkICgqZGVzdHJveSkoc3RydWN0IGtleSAqa2V5KTsKKworCS8qIGRlc2NyaWJlIGEga2V5ICovCisJdm9pZCAoKmRlc2NyaWJlKShjb25zdCBzdHJ1Y3Qga2V5ICprZXksIHN0cnVjdCBzZXFfZmlsZSAqcCk7CisKKwkvKiByZWFkIGEga2V5J3MgZGF0YSAob3B0aW9uYWwpCisJICogLSBwZXJtaXNzaW9uIGNoZWNrcyB3aWxsIGJlIGRvbmUgYnkgdGhlIGNhbGxlcgorCSAqIC0gdGhlIGtleSdzIHNlbWFwaG9yZSB3aWxsIGJlIHJlYWRsb2NrZWQgYnkgdGhlIGNhbGxlcgorCSAqIC0gc2hvdWxkIHJldHVybiB0aGUgYW1vdW50IG9mIGRhdGEgdGhhdCBjb3VsZCBiZSByZWFkLCBubyBtYXR0ZXIgaG93CisJICogICBtdWNoIGlzIGNvcGllZCBpbnRvIHRoZSBidWZmZXIKKwkgKiAtIHNob3VsZG4ndCBkbyB0aGUgY29weSBpZiB0aGUgYnVmZmVyIGlzIE5VTEwKKwkgKi8KKwlsb25nICgqcmVhZCkoY29uc3Qgc3RydWN0IGtleSAqa2V5LCBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgYnVmbGVuKTsKKworCS8qIGludGVybmFsIGZpZWxkcyAqLworCXN0cnVjdCBsaXN0X2hlYWQJbGluazsJCS8qIGxpbmsgaW4gdHlwZXMgbGlzdCAqLworfTsKKworZXh0ZXJuIHN0cnVjdCBrZXlfdHlwZSBrZXlfdHlwZV9rZXlyaW5nOworCitleHRlcm4gaW50IHJlZ2lzdGVyX2tleV90eXBlKHN0cnVjdCBrZXlfdHlwZSAqa3R5cGUpOworZXh0ZXJuIHZvaWQgdW5yZWdpc3Rlcl9rZXlfdHlwZShzdHJ1Y3Qga2V5X3R5cGUgKmt0eXBlKTsKKworZXh0ZXJuIHN0cnVjdCBrZXkgKmtleV9hbGxvYyhzdHJ1Y3Qga2V5X3R5cGUgKnR5cGUsCisJCQkgICAgIGNvbnN0IGNoYXIgKmRlc2MsCisJCQkgICAgIHVpZF90IHVpZCwgZ2lkX3QgZ2lkLCBrZXlfcGVybV90IHBlcm0sCisJCQkgICAgIGludCBub3RfaW5fcXVvdGEpOworZXh0ZXJuIGludCBrZXlfcGF5bG9hZF9yZXNlcnZlKHN0cnVjdCBrZXkgKmtleSwgc2l6ZV90IGRhdGFsZW4pOworZXh0ZXJuIGludCBrZXlfaW5zdGFudGlhdGVfYW5kX2xpbmsoc3RydWN0IGtleSAqa2V5LAorCQkJCSAgICBjb25zdCB2b2lkICpkYXRhLAorCQkJCSAgICBzaXplX3QgZGF0YWxlbiwKKwkJCQkgICAgc3RydWN0IGtleSAqa2V5cmluZyk7CitleHRlcm4gaW50IGtleV9uZWdhdGVfYW5kX2xpbmsoc3RydWN0IGtleSAqa2V5LAorCQkJICAgICAgIHVuc2lnbmVkIHRpbWVvdXQsCisJCQkgICAgICAgc3RydWN0IGtleSAqa2V5cmluZyk7CitleHRlcm4gdm9pZCBrZXlfcmV2b2tlKHN0cnVjdCBrZXkgKmtleSk7CitleHRlcm4gdm9pZCBrZXlfcHV0KHN0cnVjdCBrZXkgKmtleSk7CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGtleSAqa2V5X2dldChzdHJ1Y3Qga2V5ICprZXkpCit7CisJaWYgKGtleSkKKwkJYXRvbWljX2luYygma2V5LT51c2FnZSk7CisJcmV0dXJuIGtleTsKK30KKworZXh0ZXJuIHN0cnVjdCBrZXkgKnJlcXVlc3Rfa2V5KHN0cnVjdCBrZXlfdHlwZSAqdHlwZSwKKwkJCSAgICAgICBjb25zdCBjaGFyICpkZXNjcmlwdGlvbiwKKwkJCSAgICAgICBjb25zdCBjaGFyICpjYWxsb3V0X2luZm8pOworCitleHRlcm4gaW50IGtleV92YWxpZGF0ZShzdHJ1Y3Qga2V5ICprZXkpOworCitleHRlcm4gc3RydWN0IGtleSAqa2V5X2NyZWF0ZV9vcl91cGRhdGUoc3RydWN0IGtleSAqa2V5cmluZywKKwkJCQkJY29uc3QgY2hhciAqdHlwZSwKKwkJCQkJY29uc3QgY2hhciAqZGVzY3JpcHRpb24sCisJCQkJCWNvbnN0IHZvaWQgKnBheWxvYWQsCisJCQkJCXNpemVfdCBwbGVuLAorCQkJCQlpbnQgbm90X2luX3F1b3RhKTsKKworZXh0ZXJuIGludCBrZXlfdXBkYXRlKHN0cnVjdCBrZXkgKmtleSwKKwkJICAgICAgY29uc3Qgdm9pZCAqcGF5bG9hZCwKKwkJICAgICAgc2l6ZV90IHBsZW4pOworCitleHRlcm4gaW50IGtleV9saW5rKHN0cnVjdCBrZXkgKmtleXJpbmcsCisJCSAgICBzdHJ1Y3Qga2V5ICprZXkpOworCitleHRlcm4gaW50IGtleV91bmxpbmsoc3RydWN0IGtleSAqa2V5cmluZywKKwkJICAgICAgc3RydWN0IGtleSAqa2V5KTsKKworZXh0ZXJuIHN0cnVjdCBrZXkgKmtleXJpbmdfYWxsb2MoY29uc3QgY2hhciAqZGVzY3JpcHRpb24sIHVpZF90IHVpZCwgZ2lkX3QgZ2lkLAorCQkJCSBpbnQgbm90X2luX3F1b3RhLCBzdHJ1Y3Qga2V5ICpkZXN0KTsKKworZXh0ZXJuIGludCBrZXlyaW5nX2NsZWFyKHN0cnVjdCBrZXkgKmtleXJpbmcpOworCitleHRlcm4gc3RydWN0IGtleSAqa2V5cmluZ19zZWFyY2goc3RydWN0IGtleSAqa2V5cmluZywKKwkJCQkgIHN0cnVjdCBrZXlfdHlwZSAqdHlwZSwKKwkJCQkgIGNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uKTsKKworZXh0ZXJuIHN0cnVjdCBrZXkgKnNlYXJjaF9wcm9jZXNzX2tleXJpbmdzKHN0cnVjdCBrZXlfdHlwZSAqdHlwZSwKKwkJCQkJICAgY29uc3QgY2hhciAqZGVzY3JpcHRpb24pOworCitleHRlcm4gaW50IGtleXJpbmdfYWRkX2tleShzdHJ1Y3Qga2V5ICprZXlyaW5nLAorCQkJICAgc3RydWN0IGtleSAqa2V5KTsKKworZXh0ZXJuIHN0cnVjdCBrZXkgKmtleV9sb29rdXAoa2V5X3NlcmlhbF90IGlkKTsKKworI2RlZmluZSBrZXlfc2VyaWFsKGtleSkgKChrZXkpID8gKGtleSktPnNlcmlhbCA6IDApCisKKy8qCisgKiB0aGUgdXNlcnNwYWNlIGludGVyZmFjZQorICovCitleHRlcm4gc3RydWN0IGtleSByb290X3VzZXJfa2V5cmluZywgcm9vdF9zZXNzaW9uX2tleXJpbmc7CitleHRlcm4gaW50IGFsbG9jX3VpZF9rZXlyaW5nKHN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlcik7CitleHRlcm4gdm9pZCBzd2l0Y2hfdWlkX2tleXJpbmcoc3RydWN0IHVzZXJfc3RydWN0ICpuZXdfdXNlcik7CitleHRlcm4gaW50IGNvcHlfa2V5cyh1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7CitleHRlcm4gaW50IGNvcHlfdGhyZWFkX2dyb3VwX2tleXMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spOworZXh0ZXJuIHZvaWQgZXhpdF9rZXlzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKK2V4dGVybiB2b2lkIGV4aXRfdGhyZWFkX2dyb3VwX2tleXMoc3RydWN0IHNpZ25hbF9zdHJ1Y3QgKnRnKTsKK2V4dGVybiBpbnQgc3VpZF9rZXlzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKK2V4dGVybiBpbnQgZXhlY19rZXlzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKK2V4dGVybiB2b2lkIGtleV9mc3VpZF9jaGFuZ2VkKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKK2V4dGVybiB2b2lkIGtleV9mc2dpZF9jaGFuZ2VkKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKK2V4dGVybiB2b2lkIGtleV9pbml0KHZvaWQpOworCisjZWxzZSAvKiBDT05GSUdfS0VZUyAqLworCisjZGVmaW5lIGtleV92YWxpZGF0ZShrKQkJCTAKKyNkZWZpbmUga2V5X3NlcmlhbChrKQkJCTAKKyNkZWZpbmUga2V5X2dldChrKSAJCQlOVUxMCisjZGVmaW5lIGtleV9wdXQoaykJCQlkbyB7IH0gd2hpbGUoMCkKKyNkZWZpbmUgYWxsb2NfdWlkX2tleXJpbmcodSkJCTAKKyNkZWZpbmUgc3dpdGNoX3VpZF9rZXlyaW5nKHUpCQlkbyB7IH0gd2hpbGUoMCkKKyNkZWZpbmUgY29weV9rZXlzKGYsdCkJCQkwCisjZGVmaW5lIGNvcHlfdGhyZWFkX2dyb3VwX2tleXModCkJMAorI2RlZmluZSBleGl0X2tleXModCkJCQlkbyB7IH0gd2hpbGUoMCkKKyNkZWZpbmUgZXhpdF90aHJlYWRfZ3JvdXBfa2V5cyh0ZykJZG8geyB9IHdoaWxlKDApCisjZGVmaW5lIHN1aWRfa2V5cyh0KQkJCWRvIHsgfSB3aGlsZSgwKQorI2RlZmluZSBleGVjX2tleXModCkJCQlkbyB7IH0gd2hpbGUoMCkKKyNkZWZpbmUga2V5X2ZzdWlkX2NoYW5nZWQodCkJCWRvIHsgfSB3aGlsZSgwKQorI2RlZmluZSBrZXlfZnNnaWRfY2hhbmdlZCh0KQkJZG8geyB9IHdoaWxlKDApCisjZGVmaW5lIGtleV9pbml0KCkJCQlkbyB7IH0gd2hpbGUoMCkKKworI2VuZGlmIC8qIENPTkZJR19LRVlTICovCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9MSU5VWF9LRVlfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZXlib2FyZC5oIGIvaW5jbHVkZS9saW51eC9rZXlib2FyZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NDg4MDQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2tleWJvYXJkLmgKQEAgLTAsMCArMSw0MzEgQEAKKyNpZm5kZWYgX19MSU5VWF9LRVlCT0FSRF9ICisjZGVmaW5lIF9fTElOVVhfS0VZQk9BUkRfSAorCisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorCisjZGVmaW5lIEtHX1NISUZUCTAKKyNkZWZpbmUgS0dfQ1RSTAkJMgorI2RlZmluZSBLR19BTFQJCTMKKyNkZWZpbmUgS0dfQUxUR1IJMQorI2RlZmluZSBLR19TSElGVEwJNAorI2RlZmluZSBLR19LQU5BU0hJRlQJNAorI2RlZmluZSBLR19TSElGVFIJNQorI2RlZmluZSBLR19DVFJMTAk2CisjZGVmaW5lIEtHX0NUUkxSCTcKKyNkZWZpbmUgS0dfQ0FQU1NISUZUCTgKKworI2RlZmluZSBOUl9TSElGVAk5CisKKyNkZWZpbmUgTlJfS0VZUwkJMjU2CisjZGVmaW5lIE1BWF9OUl9LRVlNQVBTCTI1NgorLyogVGhpcyBtZWFucyAxMjhLYiBpZiBhbGwga2V5bWFwcyBhcmUgYWxsb2NhdGVkLiBPbmx5IHRoZSBzdXBlcnVzZXIKKwltYXkgaW5jcmVhc2UgdGhlIG51bWJlciBvZiBrZXltYXBzIGJleW9uZCBNQVhfTlJfT0ZfVVNFUl9LRVlNQVBTLiAqLworI2RlZmluZSBNQVhfTlJfT0ZfVVNFUl9LRVlNQVBTIDI1NiAJLyogc2hvdWxkIGJlIGF0IGxlYXN0IDcgKi8KKworI2lmZGVmIF9fS0VSTkVMX18KK2V4dGVybiBjb25zdCBpbnQgTlJfVFlQRVM7CitleHRlcm4gY29uc3QgaW50IG1heF92YWxzW107CitleHRlcm4gdW5zaWduZWQgc2hvcnQgKmtleV9tYXBzW01BWF9OUl9LRVlNQVBTXTsKK2V4dGVybiB1bnNpZ25lZCBzaG9ydCBwbGFpbl9tYXBbTlJfS0VZU107CisjZW5kaWYKKworI2RlZmluZSBNQVhfTlJfRlVOQwkyNTYJLyogbWF4IG5yIG9mIHN0cmluZ3MgYXNzaWduZWQgdG8ga2V5cyAqLworCisjZGVmaW5lIEtUX0xBVElOCTAJLyogd2UgZGVwZW5kIG9uIHRoaXMgYmVpbmcgemVybyAqLworI2RlZmluZSBLVF9MRVRURVIJMTEJLyogc3ltYm9sIHRoYXQgY2FuIGJlIGFjdGVkIHVwb24gYnkgQ2Fwc0xvY2sgKi8KKyNkZWZpbmUgS1RfRk4JCTEKKyNkZWZpbmUgS1RfU1BFQwkJMgorI2RlZmluZSBLVF9QQUQJCTMKKyNkZWZpbmUgS1RfREVBRAkJNAorI2RlZmluZSBLVF9DT05TCQk1CisjZGVmaW5lIEtUX0NVUgkJNgorI2RlZmluZSBLVF9TSElGVAk3CisjZGVmaW5lIEtUX01FVEEJCTgKKyNkZWZpbmUgS1RfQVNDSUkJOQorI2RlZmluZSBLVF9MT0NLCQkxMAorI2RlZmluZSBLVF9TTE9DSwkxMgorCisjZGVmaW5lIEsodCx2KQkJKCgodCk8PDgpfCh2KSkKKyNkZWZpbmUgS1RZUCh4KQkJKCh4KSA+PiA4KQorI2RlZmluZSBLVkFMKHgpCQkoKHgpICYgMHhmZikKKworI2RlZmluZSBLX0YxCQlLKEtUX0ZOLDApCisjZGVmaW5lIEtfRjIJCUsoS1RfRk4sMSkKKyNkZWZpbmUgS19GMwkJSyhLVF9GTiwyKQorI2RlZmluZSBLX0Y0CQlLKEtUX0ZOLDMpCisjZGVmaW5lIEtfRjUJCUsoS1RfRk4sNCkKKyNkZWZpbmUgS19GNgkJSyhLVF9GTiw1KQorI2RlZmluZSBLX0Y3CQlLKEtUX0ZOLDYpCisjZGVmaW5lIEtfRjgJCUsoS1RfRk4sNykKKyNkZWZpbmUgS19GOQkJSyhLVF9GTiw4KQorI2RlZmluZSBLX0YxMAkJSyhLVF9GTiw5KQorI2RlZmluZSBLX0YxMQkJSyhLVF9GTiwxMCkKKyNkZWZpbmUgS19GMTIJCUsoS1RfRk4sMTEpCisjZGVmaW5lIEtfRjEzCQlLKEtUX0ZOLDEyKQorI2RlZmluZSBLX0YxNAkJSyhLVF9GTiwxMykKKyNkZWZpbmUgS19GMTUJCUsoS1RfRk4sMTQpCisjZGVmaW5lIEtfRjE2CQlLKEtUX0ZOLDE1KQorI2RlZmluZSBLX0YxNwkJSyhLVF9GTiwxNikKKyNkZWZpbmUgS19GMTgJCUsoS1RfRk4sMTcpCisjZGVmaW5lIEtfRjE5CQlLKEtUX0ZOLDE4KQorI2RlZmluZSBLX0YyMAkJSyhLVF9GTiwxOSkKKyNkZWZpbmUgS19GSU5ECQlLKEtUX0ZOLDIwKQorI2RlZmluZSBLX0lOU0VSVAlLKEtUX0ZOLDIxKQorI2RlZmluZSBLX1JFTU9WRQlLKEtUX0ZOLDIyKQorI2RlZmluZSBLX1NFTEVDVAlLKEtUX0ZOLDIzKQorI2RlZmluZSBLX1BHVVAJCUsoS1RfRk4sMjQpIC8qIFBHVVAgaXMgYSBzeW5vbnltIGZvciBQUklPUiAqLworI2RlZmluZSBLX1BHRE4JCUsoS1RfRk4sMjUpIC8qIFBHRE4gaXMgYSBzeW5vbnltIGZvciBORVhUICovCisjZGVmaW5lIEtfTUFDUk8JIAlLKEtUX0ZOLDI2KQorI2RlZmluZSBLX0hFTFAJCUsoS1RfRk4sMjcpCisjZGVmaW5lIEtfRE8JCUsoS1RfRk4sMjgpCisjZGVmaW5lIEtfUEFVU0UJIAlLKEtUX0ZOLDI5KQorI2RlZmluZSBLX0YyMQkJSyhLVF9GTiwzMCkKKyNkZWZpbmUgS19GMjIJCUsoS1RfRk4sMzEpCisjZGVmaW5lIEtfRjIzCQlLKEtUX0ZOLDMyKQorI2RlZmluZSBLX0YyNAkJSyhLVF9GTiwzMykKKyNkZWZpbmUgS19GMjUJCUsoS1RfRk4sMzQpCisjZGVmaW5lIEtfRjI2CQlLKEtUX0ZOLDM1KQorI2RlZmluZSBLX0YyNwkJSyhLVF9GTiwzNikKKyNkZWZpbmUgS19GMjgJCUsoS1RfRk4sMzcpCisjZGVmaW5lIEtfRjI5CQlLKEtUX0ZOLDM4KQorI2RlZmluZSBLX0YzMAkJSyhLVF9GTiwzOSkKKyNkZWZpbmUgS19GMzEJCUsoS1RfRk4sNDApCisjZGVmaW5lIEtfRjMyCQlLKEtUX0ZOLDQxKQorI2RlZmluZSBLX0YzMwkJSyhLVF9GTiw0MikKKyNkZWZpbmUgS19GMzQJCUsoS1RfRk4sNDMpCisjZGVmaW5lIEtfRjM1CQlLKEtUX0ZOLDQ0KQorI2RlZmluZSBLX0YzNgkJSyhLVF9GTiw0NSkKKyNkZWZpbmUgS19GMzcJCUsoS1RfRk4sNDYpCisjZGVmaW5lIEtfRjM4CQlLKEtUX0ZOLDQ3KQorI2RlZmluZSBLX0YzOQkJSyhLVF9GTiw0OCkKKyNkZWZpbmUgS19GNDAJCUsoS1RfRk4sNDkpCisjZGVmaW5lIEtfRjQxCQlLKEtUX0ZOLDUwKQorI2RlZmluZSBLX0Y0MgkJSyhLVF9GTiw1MSkKKyNkZWZpbmUgS19GNDMJCUsoS1RfRk4sNTIpCisjZGVmaW5lIEtfRjQ0CQlLKEtUX0ZOLDUzKQorI2RlZmluZSBLX0Y0NQkJSyhLVF9GTiw1NCkKKyNkZWZpbmUgS19GNDYJCUsoS1RfRk4sNTUpCisjZGVmaW5lIEtfRjQ3CQlLKEtUX0ZOLDU2KQorI2RlZmluZSBLX0Y0OAkJSyhLVF9GTiw1NykKKyNkZWZpbmUgS19GNDkJCUsoS1RfRk4sNTgpCisjZGVmaW5lIEtfRjUwCQlLKEtUX0ZOLDU5KQorI2RlZmluZSBLX0Y1MQkJSyhLVF9GTiw2MCkKKyNkZWZpbmUgS19GNTIJCUsoS1RfRk4sNjEpCisjZGVmaW5lIEtfRjUzCQlLKEtUX0ZOLDYyKQorI2RlZmluZSBLX0Y1NAkJSyhLVF9GTiw2MykKKyNkZWZpbmUgS19GNTUJCUsoS1RfRk4sNjQpCisjZGVmaW5lIEtfRjU2CQlLKEtUX0ZOLDY1KQorI2RlZmluZSBLX0Y1NwkJSyhLVF9GTiw2NikKKyNkZWZpbmUgS19GNTgJCUsoS1RfRk4sNjcpCisjZGVmaW5lIEtfRjU5CQlLKEtUX0ZOLDY4KQorI2RlZmluZSBLX0Y2MAkJSyhLVF9GTiw2OSkKKyNkZWZpbmUgS19GNjEJCUsoS1RfRk4sNzApCisjZGVmaW5lIEtfRjYyCQlLKEtUX0ZOLDcxKQorI2RlZmluZSBLX0Y2MwkJSyhLVF9GTiw3MikKKyNkZWZpbmUgS19GNjQJCUsoS1RfRk4sNzMpCisjZGVmaW5lIEtfRjY1CQlLKEtUX0ZOLDc0KQorI2RlZmluZSBLX0Y2NgkJSyhLVF9GTiw3NSkKKyNkZWZpbmUgS19GNjcJCUsoS1RfRk4sNzYpCisjZGVmaW5lIEtfRjY4CQlLKEtUX0ZOLDc3KQorI2RlZmluZSBLX0Y2OQkJSyhLVF9GTiw3OCkKKyNkZWZpbmUgS19GNzAJCUsoS1RfRk4sNzkpCisjZGVmaW5lIEtfRjcxCQlLKEtUX0ZOLDgwKQorI2RlZmluZSBLX0Y3MgkJSyhLVF9GTiw4MSkKKyNkZWZpbmUgS19GNzMJCUsoS1RfRk4sODIpCisjZGVmaW5lIEtfRjc0CQlLKEtUX0ZOLDgzKQorI2RlZmluZSBLX0Y3NQkJSyhLVF9GTiw4NCkKKyNkZWZpbmUgS19GNzYJCUsoS1RfRk4sODUpCisjZGVmaW5lIEtfRjc3CQlLKEtUX0ZOLDg2KQorI2RlZmluZSBLX0Y3OAkJSyhLVF9GTiw4NykKKyNkZWZpbmUgS19GNzkJCUsoS1RfRk4sODgpCisjZGVmaW5lIEtfRjgwCQlLKEtUX0ZOLDg5KQorI2RlZmluZSBLX0Y4MQkJSyhLVF9GTiw5MCkKKyNkZWZpbmUgS19GODIJCUsoS1RfRk4sOTEpCisjZGVmaW5lIEtfRjgzCQlLKEtUX0ZOLDkyKQorI2RlZmluZSBLX0Y4NAkJSyhLVF9GTiw5MykKKyNkZWZpbmUgS19GODUJCUsoS1RfRk4sOTQpCisjZGVmaW5lIEtfRjg2CQlLKEtUX0ZOLDk1KQorI2RlZmluZSBLX0Y4NwkJSyhLVF9GTiw5NikKKyNkZWZpbmUgS19GODgJCUsoS1RfRk4sOTcpCisjZGVmaW5lIEtfRjg5CQlLKEtUX0ZOLDk4KQorI2RlZmluZSBLX0Y5MAkJSyhLVF9GTiw5OSkKKyNkZWZpbmUgS19GOTEJCUsoS1RfRk4sMTAwKQorI2RlZmluZSBLX0Y5MgkJSyhLVF9GTiwxMDEpCisjZGVmaW5lIEtfRjkzCQlLKEtUX0ZOLDEwMikKKyNkZWZpbmUgS19GOTQJCUsoS1RfRk4sMTAzKQorI2RlZmluZSBLX0Y5NQkJSyhLVF9GTiwxMDQpCisjZGVmaW5lIEtfRjk2CQlLKEtUX0ZOLDEwNSkKKyNkZWZpbmUgS19GOTcJCUsoS1RfRk4sMTA2KQorI2RlZmluZSBLX0Y5OAkJSyhLVF9GTiwxMDcpCisjZGVmaW5lIEtfRjk5CQlLKEtUX0ZOLDEwOCkKKyNkZWZpbmUgS19GMTAwCQlLKEtUX0ZOLDEwOSkKKyNkZWZpbmUgS19GMTAxCQlLKEtUX0ZOLDExMCkKKyNkZWZpbmUgS19GMTAyCQlLKEtUX0ZOLDExMSkKKyNkZWZpbmUgS19GMTAzCQlLKEtUX0ZOLDExMikKKyNkZWZpbmUgS19GMTA0CQlLKEtUX0ZOLDExMykKKyNkZWZpbmUgS19GMTA1CQlLKEtUX0ZOLDExNCkKKyNkZWZpbmUgS19GMTA2CQlLKEtUX0ZOLDExNSkKKyNkZWZpbmUgS19GMTA3CQlLKEtUX0ZOLDExNikKKyNkZWZpbmUgS19GMTA4CQlLKEtUX0ZOLDExNykKKyNkZWZpbmUgS19GMTA5CQlLKEtUX0ZOLDExOCkKKyNkZWZpbmUgS19GMTEwCQlLKEtUX0ZOLDExOSkKKyNkZWZpbmUgS19GMTExCQlLKEtUX0ZOLDEyMCkKKyNkZWZpbmUgS19GMTEyCQlLKEtUX0ZOLDEyMSkKKyNkZWZpbmUgS19GMTEzCQlLKEtUX0ZOLDEyMikKKyNkZWZpbmUgS19GMTE0CQlLKEtUX0ZOLDEyMykKKyNkZWZpbmUgS19GMTE1CQlLKEtUX0ZOLDEyNCkKKyNkZWZpbmUgS19GMTE2CQlLKEtUX0ZOLDEyNSkKKyNkZWZpbmUgS19GMTE3CQlLKEtUX0ZOLDEyNikKKyNkZWZpbmUgS19GMTE4CQlLKEtUX0ZOLDEyNykKKyNkZWZpbmUgS19GMTE5CQlLKEtUX0ZOLDEyOCkKKyNkZWZpbmUgS19GMTIwCQlLKEtUX0ZOLDEyOSkKKyNkZWZpbmUgS19GMTIxCQlLKEtUX0ZOLDEzMCkKKyNkZWZpbmUgS19GMTIyCQlLKEtUX0ZOLDEzMSkKKyNkZWZpbmUgS19GMTIzCQlLKEtUX0ZOLDEzMikKKyNkZWZpbmUgS19GMTI0CQlLKEtUX0ZOLDEzMykKKyNkZWZpbmUgS19GMTI1CQlLKEtUX0ZOLDEzNCkKKyNkZWZpbmUgS19GMTI2CQlLKEtUX0ZOLDEzNSkKKyNkZWZpbmUgS19GMTI3CQlLKEtUX0ZOLDEzNikKKyNkZWZpbmUgS19GMTI4CQlLKEtUX0ZOLDEzNykKKyNkZWZpbmUgS19GMTI5CQlLKEtUX0ZOLDEzOCkKKyNkZWZpbmUgS19GMTMwCQlLKEtUX0ZOLDEzOSkKKyNkZWZpbmUgS19GMTMxCQlLKEtUX0ZOLDE0MCkKKyNkZWZpbmUgS19GMTMyCQlLKEtUX0ZOLDE0MSkKKyNkZWZpbmUgS19GMTMzCQlLKEtUX0ZOLDE0MikKKyNkZWZpbmUgS19GMTM0CQlLKEtUX0ZOLDE0MykKKyNkZWZpbmUgS19GMTM1CQlLKEtUX0ZOLDE0NCkKKyNkZWZpbmUgS19GMTM2CQlLKEtUX0ZOLDE0NSkKKyNkZWZpbmUgS19GMTM3CQlLKEtUX0ZOLDE0NikKKyNkZWZpbmUgS19GMTM4CQlLKEtUX0ZOLDE0NykKKyNkZWZpbmUgS19GMTM5CQlLKEtUX0ZOLDE0OCkKKyNkZWZpbmUgS19GMTQwCQlLKEtUX0ZOLDE0OSkKKyNkZWZpbmUgS19GMTQxCQlLKEtUX0ZOLDE1MCkKKyNkZWZpbmUgS19GMTQyCQlLKEtUX0ZOLDE1MSkKKyNkZWZpbmUgS19GMTQzCQlLKEtUX0ZOLDE1MikKKyNkZWZpbmUgS19GMTQ0CQlLKEtUX0ZOLDE1MykKKyNkZWZpbmUgS19GMTQ1CQlLKEtUX0ZOLDE1NCkKKyNkZWZpbmUgS19GMTQ2CQlLKEtUX0ZOLDE1NSkKKyNkZWZpbmUgS19GMTQ3CQlLKEtUX0ZOLDE1NikKKyNkZWZpbmUgS19GMTQ4CQlLKEtUX0ZOLDE1NykKKyNkZWZpbmUgS19GMTQ5CQlLKEtUX0ZOLDE1OCkKKyNkZWZpbmUgS19GMTUwCQlLKEtUX0ZOLDE1OSkKKyNkZWZpbmUgS19GMTUxCQlLKEtUX0ZOLDE2MCkKKyNkZWZpbmUgS19GMTUyCQlLKEtUX0ZOLDE2MSkKKyNkZWZpbmUgS19GMTUzCQlLKEtUX0ZOLDE2MikKKyNkZWZpbmUgS19GMTU0CQlLKEtUX0ZOLDE2MykKKyNkZWZpbmUgS19GMTU1CQlLKEtUX0ZOLDE2NCkKKyNkZWZpbmUgS19GMTU2CQlLKEtUX0ZOLDE2NSkKKyNkZWZpbmUgS19GMTU3CQlLKEtUX0ZOLDE2NikKKyNkZWZpbmUgS19GMTU4CQlLKEtUX0ZOLDE2NykKKyNkZWZpbmUgS19GMTU5CQlLKEtUX0ZOLDE2OCkKKyNkZWZpbmUgS19GMTYwCQlLKEtUX0ZOLDE2OSkKKyNkZWZpbmUgS19GMTYxCQlLKEtUX0ZOLDE3MCkKKyNkZWZpbmUgS19GMTYyCQlLKEtUX0ZOLDE3MSkKKyNkZWZpbmUgS19GMTYzCQlLKEtUX0ZOLDE3MikKKyNkZWZpbmUgS19GMTY0CQlLKEtUX0ZOLDE3MykKKyNkZWZpbmUgS19GMTY1CQlLKEtUX0ZOLDE3NCkKKyNkZWZpbmUgS19GMTY2CQlLKEtUX0ZOLDE3NSkKKyNkZWZpbmUgS19GMTY3CQlLKEtUX0ZOLDE3NikKKyNkZWZpbmUgS19GMTY4CQlLKEtUX0ZOLDE3NykKKyNkZWZpbmUgS19GMTY5CQlLKEtUX0ZOLDE3OCkKKyNkZWZpbmUgS19GMTcwCQlLKEtUX0ZOLDE3OSkKKyNkZWZpbmUgS19GMTcxCQlLKEtUX0ZOLDE4MCkKKyNkZWZpbmUgS19GMTcyCQlLKEtUX0ZOLDE4MSkKKyNkZWZpbmUgS19GMTczCQlLKEtUX0ZOLDE4MikKKyNkZWZpbmUgS19GMTc0CQlLKEtUX0ZOLDE4MykKKyNkZWZpbmUgS19GMTc1CQlLKEtUX0ZOLDE4NCkKKyNkZWZpbmUgS19GMTc2CQlLKEtUX0ZOLDE4NSkKKyNkZWZpbmUgS19GMTc3CQlLKEtUX0ZOLDE4NikKKyNkZWZpbmUgS19GMTc4CQlLKEtUX0ZOLDE4NykKKyNkZWZpbmUgS19GMTc5CQlLKEtUX0ZOLDE4OCkKKyNkZWZpbmUgS19GMTgwCQlLKEtUX0ZOLDE4OSkKKyNkZWZpbmUgS19GMTgxCQlLKEtUX0ZOLDE5MCkKKyNkZWZpbmUgS19GMTgyCQlLKEtUX0ZOLDE5MSkKKyNkZWZpbmUgS19GMTgzCQlLKEtUX0ZOLDE5MikKKyNkZWZpbmUgS19GMTg0CQlLKEtUX0ZOLDE5MykKKyNkZWZpbmUgS19GMTg1CQlLKEtUX0ZOLDE5NCkKKyNkZWZpbmUgS19GMTg2CQlLKEtUX0ZOLDE5NSkKKyNkZWZpbmUgS19GMTg3CQlLKEtUX0ZOLDE5NikKKyNkZWZpbmUgS19GMTg4CQlLKEtUX0ZOLDE5NykKKyNkZWZpbmUgS19GMTg5CQlLKEtUX0ZOLDE5OCkKKyNkZWZpbmUgS19GMTkwCQlLKEtUX0ZOLDE5OSkKKyNkZWZpbmUgS19GMTkxCQlLKEtUX0ZOLDIwMCkKKyNkZWZpbmUgS19GMTkyCQlLKEtUX0ZOLDIwMSkKKyNkZWZpbmUgS19GMTkzCQlLKEtUX0ZOLDIwMikKKyNkZWZpbmUgS19GMTk0CQlLKEtUX0ZOLDIwMykKKyNkZWZpbmUgS19GMTk1CQlLKEtUX0ZOLDIwNCkKKyNkZWZpbmUgS19GMTk2CQlLKEtUX0ZOLDIwNSkKKyNkZWZpbmUgS19GMTk3CQlLKEtUX0ZOLDIwNikKKyNkZWZpbmUgS19GMTk4CQlLKEtUX0ZOLDIwNykKKyNkZWZpbmUgS19GMTk5CQlLKEtUX0ZOLDIwOCkKKyNkZWZpbmUgS19GMjAwCQlLKEtUX0ZOLDIwOSkKKyNkZWZpbmUgS19GMjAxCQlLKEtUX0ZOLDIxMCkKKyNkZWZpbmUgS19GMjAyCQlLKEtUX0ZOLDIxMSkKKyNkZWZpbmUgS19GMjAzCQlLKEtUX0ZOLDIxMikKKyNkZWZpbmUgS19GMjA0CQlLKEtUX0ZOLDIxMykKKyNkZWZpbmUgS19GMjA1CQlLKEtUX0ZOLDIxNCkKKyNkZWZpbmUgS19GMjA2CQlLKEtUX0ZOLDIxNSkKKyNkZWZpbmUgS19GMjA3CQlLKEtUX0ZOLDIxNikKKyNkZWZpbmUgS19GMjA4CQlLKEtUX0ZOLDIxNykKKyNkZWZpbmUgS19GMjA5CQlLKEtUX0ZOLDIxOCkKKyNkZWZpbmUgS19GMjEwCQlLKEtUX0ZOLDIxOSkKKyNkZWZpbmUgS19GMjExCQlLKEtUX0ZOLDIyMCkKKyNkZWZpbmUgS19GMjEyCQlLKEtUX0ZOLDIyMSkKKyNkZWZpbmUgS19GMjEzCQlLKEtUX0ZOLDIyMikKKyNkZWZpbmUgS19GMjE0CQlLKEtUX0ZOLDIyMykKKyNkZWZpbmUgS19GMjE1CQlLKEtUX0ZOLDIyNCkKKyNkZWZpbmUgS19GMjE2CQlLKEtUX0ZOLDIyNSkKKyNkZWZpbmUgS19GMjE3CQlLKEtUX0ZOLDIyNikKKyNkZWZpbmUgS19GMjE4CQlLKEtUX0ZOLDIyNykKKyNkZWZpbmUgS19GMjE5CQlLKEtUX0ZOLDIyOCkKKyNkZWZpbmUgS19GMjIwCQlLKEtUX0ZOLDIyOSkKKyNkZWZpbmUgS19GMjIxCQlLKEtUX0ZOLDIzMCkKKyNkZWZpbmUgS19GMjIyCQlLKEtUX0ZOLDIzMSkKKyNkZWZpbmUgS19GMjIzCQlLKEtUX0ZOLDIzMikKKyNkZWZpbmUgS19GMjI0CQlLKEtUX0ZOLDIzMykKKyNkZWZpbmUgS19GMjI1CQlLKEtUX0ZOLDIzNCkKKyNkZWZpbmUgS19GMjI2CQlLKEtUX0ZOLDIzNSkKKyNkZWZpbmUgS19GMjI3CQlLKEtUX0ZOLDIzNikKKyNkZWZpbmUgS19GMjI4CQlLKEtUX0ZOLDIzNykKKyNkZWZpbmUgS19GMjI5CQlLKEtUX0ZOLDIzOCkKKyNkZWZpbmUgS19GMjMwCQlLKEtUX0ZOLDIzOSkKKyNkZWZpbmUgS19GMjMxCQlLKEtUX0ZOLDI0MCkKKyNkZWZpbmUgS19GMjMyCQlLKEtUX0ZOLDI0MSkKKyNkZWZpbmUgS19GMjMzCQlLKEtUX0ZOLDI0MikKKyNkZWZpbmUgS19GMjM0CQlLKEtUX0ZOLDI0MykKKyNkZWZpbmUgS19GMjM1CQlLKEtUX0ZOLDI0NCkKKyNkZWZpbmUgS19GMjM2CQlLKEtUX0ZOLDI0NSkKKyNkZWZpbmUgS19GMjM3CQlLKEtUX0ZOLDI0NikKKyNkZWZpbmUgS19GMjM4CQlLKEtUX0ZOLDI0NykKKyNkZWZpbmUgS19GMjM5CQlLKEtUX0ZOLDI0OCkKKyNkZWZpbmUgS19GMjQwCQlLKEtUX0ZOLDI0OSkKKyNkZWZpbmUgS19GMjQxCQlLKEtUX0ZOLDI1MCkKKyNkZWZpbmUgS19GMjQyCQlLKEtUX0ZOLDI1MSkKKyNkZWZpbmUgS19GMjQzCQlLKEtUX0ZOLDI1MikKKyNkZWZpbmUgS19GMjQ0CQlLKEtUX0ZOLDI1MykKKyNkZWZpbmUgS19GMjQ1CQlLKEtUX0ZOLDI1NCkKKyNkZWZpbmUgS19VTkRPCQlLKEtUX0ZOLDI1NSkKKworCisjZGVmaW5lIEtfSE9MRQkJSyhLVF9TUEVDLDApCisjZGVmaW5lIEtfRU5URVIJCUsoS1RfU1BFQywxKQorI2RlZmluZSBLX1NIX1JFR1MJSyhLVF9TUEVDLDIpCisjZGVmaW5lIEtfU0hfTUVNCUsoS1RfU1BFQywzKQorI2RlZmluZSBLX1NIX1NUQVQJSyhLVF9TUEVDLDQpCisjZGVmaW5lIEtfQlJFQUsJCUsoS1RfU1BFQyw1KQorI2RlZmluZSBLX0NPTlMJCUsoS1RfU1BFQyw2KQorI2RlZmluZSBLX0NBUFMJCUsoS1RfU1BFQyw3KQorI2RlZmluZSBLX05VTQkJSyhLVF9TUEVDLDgpCisjZGVmaW5lIEtfSE9MRAkJSyhLVF9TUEVDLDkpCisjZGVmaW5lIEtfU0NST0xMRk9SVwlLKEtUX1NQRUMsMTApCisjZGVmaW5lIEtfU0NST0xMQkFDSwlLKEtUX1NQRUMsMTEpCisjZGVmaW5lIEtfQk9PVAkJSyhLVF9TUEVDLDEyKQorI2RlZmluZSBLX0NBUFNPTglLKEtUX1NQRUMsMTMpCisjZGVmaW5lIEtfQ09NUE9TRQlLKEtUX1NQRUMsMTQpCisjZGVmaW5lIEtfU0FLCQlLKEtUX1NQRUMsMTUpCisjZGVmaW5lIEtfREVDUkNPTlNPTEUJSyhLVF9TUEVDLDE2KQorI2RlZmluZSBLX0lOQ1JDT05TT0xFCUsoS1RfU1BFQywxNykKKyNkZWZpbmUgS19TUEFXTkNPTlNPTEUJSyhLVF9TUEVDLDE4KQorI2RlZmluZSBLX0JBUkVOVU1MT0NLCUsoS1RfU1BFQywxOSkKKworI2RlZmluZSBLX0FMTE9DQVRFRAlLKEtUX1NQRUMsMTI2KSAvKiBkeW5hbWljYWxseSBhbGxvY2F0ZWQga2V5bWFwICovCisjZGVmaW5lIEtfTk9TVUNITUFQCUsoS1RfU1BFQywxMjcpIC8qIHJldHVybmVkIGJ5IEtER0tCRU5UICovCisKKyNkZWZpbmUgS19QMAkJSyhLVF9QQUQsMCkKKyNkZWZpbmUgS19QMQkJSyhLVF9QQUQsMSkKKyNkZWZpbmUgS19QMgkJSyhLVF9QQUQsMikKKyNkZWZpbmUgS19QMwkJSyhLVF9QQUQsMykKKyNkZWZpbmUgS19QNAkJSyhLVF9QQUQsNCkKKyNkZWZpbmUgS19QNQkJSyhLVF9QQUQsNSkKKyNkZWZpbmUgS19QNgkJSyhLVF9QQUQsNikKKyNkZWZpbmUgS19QNwkJSyhLVF9QQUQsNykKKyNkZWZpbmUgS19QOAkJSyhLVF9QQUQsOCkKKyNkZWZpbmUgS19QOQkJSyhLVF9QQUQsOSkKKyNkZWZpbmUgS19QUExVUwkJSyhLVF9QQUQsMTApCS8qIGtleS1wYWQgcGx1cyAqLworI2RlZmluZSBLX1BNSU5VUwlLKEtUX1BBRCwxMSkJLyoga2V5LXBhZCBtaW51cyAqLworI2RlZmluZSBLX1BTVEFSCQlLKEtUX1BBRCwxMikJLyoga2V5LXBhZCBhc3RlcmlzayAoc3RhcikgKi8KKyNkZWZpbmUgS19QU0xBU0gJSyhLVF9QQUQsMTMpCS8qIGtleS1wYWQgc2xhc2ggKi8KKyNkZWZpbmUgS19QRU5URVIJSyhLVF9QQUQsMTQpCS8qIGtleS1wYWQgZW50ZXIgKi8KKyNkZWZpbmUgS19QQ09NTUEJSyhLVF9QQUQsMTUpCS8qIGtleS1wYWQgY29tbWE6IGtsdWRnZS4uLiAqLworI2RlZmluZSBLX1BET1QJCUsoS1RfUEFELDE2KQkvKiBrZXktcGFkIGRvdCAocGVyaW9kKToga2x1ZGdlLi4uICovCisjZGVmaW5lIEtfUFBMVVNNSU5VUwlLKEtUX1BBRCwxNykJLyoga2V5LXBhZCBwbHVzL21pbnVzICovCisjZGVmaW5lIEtfUFBBUkVOTAlLKEtUX1BBRCwxOCkJLyoga2V5LXBhZCBsZWZ0IHBhcmVudGhlc2lzICovCisjZGVmaW5lIEtfUFBBUkVOUglLKEtUX1BBRCwxOSkJLyoga2V5LXBhZCByaWdodCBwYXJlbnRoZXNpcyAqLworCisjZGVmaW5lIE5SX1BBRAkJMjAKKworI2RlZmluZSBLX0RHUkFWRQlLKEtUX0RFQUQsMCkKKyNkZWZpbmUgS19EQUNVVEUJSyhLVF9ERUFELDEpCisjZGVmaW5lIEtfRENJUkNNCUsoS1RfREVBRCwyKQorI2RlZmluZSBLX0RUSUxERQlLKEtUX0RFQUQsMykKKyNkZWZpbmUgS19ERElFUkUJSyhLVF9ERUFELDQpCisjZGVmaW5lIEtfRENFRElMCUsoS1RfREVBRCw1KQorCisjZGVmaW5lIE5SX0RFQUQJCTYKKworI2RlZmluZSBLX0RPV04JCUsoS1RfQ1VSLDApCisjZGVmaW5lIEtfTEVGVAkJSyhLVF9DVVIsMSkKKyNkZWZpbmUgS19SSUdIVAkJSyhLVF9DVVIsMikKKyNkZWZpbmUgS19VUAkJSyhLVF9DVVIsMykKKworI2RlZmluZSBLX1NISUZUCQlLKEtUX1NISUZULEtHX1NISUZUKQorI2RlZmluZSBLX0NUUkwJCUsoS1RfU0hJRlQsS0dfQ1RSTCkKKyNkZWZpbmUgS19BTFQJCUsoS1RfU0hJRlQsS0dfQUxUKQorI2RlZmluZSBLX0FMVEdSCQlLKEtUX1NISUZULEtHX0FMVEdSKQorI2RlZmluZSBLX1NISUZUTAlLKEtUX1NISUZULEtHX1NISUZUTCkKKyNkZWZpbmUgS19TSElGVFIJSyhLVF9TSElGVCxLR19TSElGVFIpCisjZGVmaW5lIEtfQ1RSTEwJIAlLKEtUX1NISUZULEtHX0NUUkxMKQorI2RlZmluZSBLX0NUUkxSCSAJSyhLVF9TSElGVCxLR19DVFJMUikKKyNkZWZpbmUgS19DQVBTU0hJRlQJSyhLVF9TSElGVCxLR19DQVBTU0hJRlQpCisKKyNkZWZpbmUgS19BU0MwCQlLKEtUX0FTQ0lJLDApCisjZGVmaW5lIEtfQVNDMQkJSyhLVF9BU0NJSSwxKQorI2RlZmluZSBLX0FTQzIJCUsoS1RfQVNDSUksMikKKyNkZWZpbmUgS19BU0MzCQlLKEtUX0FTQ0lJLDMpCisjZGVmaW5lIEtfQVNDNAkJSyhLVF9BU0NJSSw0KQorI2RlZmluZSBLX0FTQzUJCUsoS1RfQVNDSUksNSkKKyNkZWZpbmUgS19BU0M2CQlLKEtUX0FTQ0lJLDYpCisjZGVmaW5lIEtfQVNDNwkJSyhLVF9BU0NJSSw3KQorI2RlZmluZSBLX0FTQzgJCUsoS1RfQVNDSUksOCkKKyNkZWZpbmUgS19BU0M5CQlLKEtUX0FTQ0lJLDkpCisjZGVmaW5lIEtfSEVYMAkJSyhLVF9BU0NJSSwxMCkKKyNkZWZpbmUgS19IRVgxCQlLKEtUX0FTQ0lJLDExKQorI2RlZmluZSBLX0hFWDIJCUsoS1RfQVNDSUksMTIpCisjZGVmaW5lIEtfSEVYMwkJSyhLVF9BU0NJSSwxMykKKyNkZWZpbmUgS19IRVg0CQlLKEtUX0FTQ0lJLDE0KQorI2RlZmluZSBLX0hFWDUJCUsoS1RfQVNDSUksMTUpCisjZGVmaW5lIEtfSEVYNgkJSyhLVF9BU0NJSSwxNikKKyNkZWZpbmUgS19IRVg3CQlLKEtUX0FTQ0lJLDE3KQorI2RlZmluZSBLX0hFWDgJCUsoS1RfQVNDSUksMTgpCisjZGVmaW5lIEtfSEVYOQkJSyhLVF9BU0NJSSwxOSkKKyNkZWZpbmUgS19IRVhhCQlLKEtUX0FTQ0lJLDIwKQorI2RlZmluZSBLX0hFWGIJCUsoS1RfQVNDSUksMjEpCisjZGVmaW5lIEtfSEVYYwkJSyhLVF9BU0NJSSwyMikKKyNkZWZpbmUgS19IRVhkCQlLKEtUX0FTQ0lJLDIzKQorI2RlZmluZSBLX0hFWGUJCUsoS1RfQVNDSUksMjQpCisjZGVmaW5lIEtfSEVYZgkJSyhLVF9BU0NJSSwyNSkKKworI2RlZmluZSBOUl9BU0NJSQkyNgorCisjZGVmaW5lIEtfU0hJRlRMT0NLCUsoS1RfTE9DSyxLR19TSElGVCkKKyNkZWZpbmUgS19DVFJMTE9DSwlLKEtUX0xPQ0ssS0dfQ1RSTCkKKyNkZWZpbmUgS19BTFRMT0NLCUsoS1RfTE9DSyxLR19BTFQpCisjZGVmaW5lIEtfQUxUR1JMT0NLCUsoS1RfTE9DSyxLR19BTFRHUikKKyNkZWZpbmUgS19TSElGVExMT0NLCUsoS1RfTE9DSyxLR19TSElGVEwpCisjZGVmaW5lIEtfU0hJRlRSTE9DSwlLKEtUX0xPQ0ssS0dfU0hJRlRSKQorI2RlZmluZSBLX0NUUkxMTE9DSwlLKEtUX0xPQ0ssS0dfQ1RSTEwpCisjZGVmaW5lIEtfQ1RSTFJMT0NLCUsoS1RfTE9DSyxLR19DVFJMUikKKworI2RlZmluZSBLX1NISUZUX1NMT0NLCUsoS1RfU0xPQ0ssS0dfU0hJRlQpCisjZGVmaW5lIEtfQ1RSTF9TTE9DSwlLKEtUX1NMT0NLLEtHX0NUUkwpCisjZGVmaW5lIEtfQUxUX1NMT0NLCUsoS1RfU0xPQ0ssS0dfQUxUKQorI2RlZmluZSBLX0FMVEdSX1NMT0NLCUsoS1RfU0xPQ0ssS0dfQUxUR1IpCisjZGVmaW5lIEtfU0hJRlRMX1NMT0NLCUsoS1RfU0xPQ0ssS0dfU0hJRlRMKQorI2RlZmluZSBLX1NISUZUUl9TTE9DSwlLKEtUX1NMT0NLLEtHX1NISUZUUikKKyNkZWZpbmUgS19DVFJMTF9TTE9DSwlLKEtUX1NMT0NLLEtHX0NUUkxMKQorI2RlZmluZSBLX0NUUkxSX1NMT0NLCUsoS1RfU0xPQ0ssS0dfQ1RSTFIpCisKKyNkZWZpbmUgTlJfTE9DSwkJOAorCisjZGVmaW5lIE1BWF9ESUFDUgkyNTYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZXljdGwuaCBiL2luY2x1ZGUvbGludXgva2V5Y3RsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzgxZGVkYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgva2V5Y3RsLmgKQEAgLTAsMCArMSwzOSBAQAorLyoga2V5Y3RsLmg6IGtleWN0bCBjb21tYW5kIElEcworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9MSU5VWF9LRVlDVExfSAorI2RlZmluZSBfTElOVVhfS0VZQ1RMX0gKKworLyogc3BlY2lhbCBwcm9jZXNzIGtleXJpbmcgc2hvcnRjdXQgSURzICovCisjZGVmaW5lIEtFWV9TUEVDX1RIUkVBRF9LRVlSSU5HCQktMQkvKiAtIGtleSBJRCBmb3IgdGhyZWFkLXNwZWNpZmljIGtleXJpbmcgKi8KKyNkZWZpbmUgS0VZX1NQRUNfUFJPQ0VTU19LRVlSSU5HCS0yCS8qIC0ga2V5IElEIGZvciBwcm9jZXNzLXNwZWNpZmljIGtleXJpbmcgKi8KKyNkZWZpbmUgS0VZX1NQRUNfU0VTU0lPTl9LRVlSSU5HCS0zCS8qIC0ga2V5IElEIGZvciBzZXNzaW9uLXNwZWNpZmljIGtleXJpbmcgKi8KKyNkZWZpbmUgS0VZX1NQRUNfVVNFUl9LRVlSSU5HCQktNAkvKiAtIGtleSBJRCBmb3IgVUlELXNwZWNpZmljIGtleXJpbmcgKi8KKyNkZWZpbmUgS0VZX1NQRUNfVVNFUl9TRVNTSU9OX0tFWVJJTkcJLTUJLyogLSBrZXkgSUQgZm9yIFVJRC1zZXNzaW9uIGtleXJpbmcgKi8KKyNkZWZpbmUgS0VZX1NQRUNfR1JPVVBfS0VZUklORwkJLTYJLyogLSBrZXkgSUQgZm9yIEdJRC1zcGVjaWZpYyBrZXlyaW5nICovCisKKy8qIGtleWN0bCBjb21tYW5kcyAqLworI2RlZmluZSBLRVlDVExfR0VUX0tFWVJJTkdfSUQJCTAJLyogYXNrIGZvciBhIGtleXJpbmcncyBJRCAqLworI2RlZmluZSBLRVlDVExfSk9JTl9TRVNTSU9OX0tFWVJJTkcJMQkvKiBqb2luIG9yIHN0YXJ0IG5hbWVkIHNlc3Npb24ga2V5cmluZyAqLworI2RlZmluZSBLRVlDVExfVVBEQVRFCQkJMgkvKiB1cGRhdGUgYSBrZXkgKi8KKyNkZWZpbmUgS0VZQ1RMX1JFVk9LRQkJCTMJLyogcmV2b2tlIGEga2V5ICovCisjZGVmaW5lIEtFWUNUTF9DSE9XTgkJCTQJLyogc2V0IG93bmVyc2hpcCBvZiBhIGtleSAqLworI2RlZmluZSBLRVlDVExfU0VUUEVSTQkJCTUJLyogc2V0IHBlcm1zIG9uIGEga2V5ICovCisjZGVmaW5lIEtFWUNUTF9ERVNDUklCRQkJCTYJLyogZGVzY3JpYmUgYSBrZXkgKi8KKyNkZWZpbmUgS0VZQ1RMX0NMRUFSCQkJNwkvKiBjbGVhciBjb250ZW50cyBvZiBhIGtleXJpbmcgKi8KKyNkZWZpbmUgS0VZQ1RMX0xJTksJCQk4CS8qIGxpbmsgYSBrZXkgaW50byBhIGtleXJpbmcgKi8KKyNkZWZpbmUgS0VZQ1RMX1VOTElOSwkJCTkJLyogdW5saW5rIGEga2V5IGZyb20gYSBrZXlyaW5nICovCisjZGVmaW5lIEtFWUNUTF9TRUFSQ0gJCQkxMAkvKiBzZWFyY2ggZm9yIGEga2V5IGluIGEga2V5cmluZyAqLworI2RlZmluZSBLRVlDVExfUkVBRAkJCTExCS8qIHJlYWQgYSBrZXkgb3Iga2V5cmluZydzIGNvbnRlbnRzICovCisjZGVmaW5lIEtFWUNUTF9JTlNUQU5USUFURQkJMTIJLyogaW5zdGFudGlhdGUgYSBwYXJ0aWFsbHkgY29uc3RydWN0ZWQga2V5ICovCisjZGVmaW5lIEtFWUNUTF9ORUdBVEUJCQkxMwkvKiBuZWdhdGUgYSBwYXJ0aWFsbHkgY29uc3RydWN0ZWQga2V5ICovCisKKyNlbmRpZiAvKiAgX0xJTlVYX0tFWUNUTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tmaWZvLmggYi9pbmNsdWRlL2xpbnV4L2tmaWZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI3Y2Q0MgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgva2ZpZm8uaApAQCAtMCwwICsxLDE1NyBAQAorLyoKKyAqIEEgc2ltcGxlIGtlcm5lbCBGSUZPIGltcGxlbWVudGF0aW9uLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBTdGVsaWFuIFBvcCA8c3RlbGlhbkBwb3BpZXMubmV0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqLworI2lmbmRlZiBfTElOVVhfS0ZJRk9fSAorI2RlZmluZSBfTElOVVhfS0ZJRk9fSAorCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKworc3RydWN0IGtmaWZvIHsKKwl1bnNpZ25lZCBjaGFyICpidWZmZXI7CS8qIHRoZSBidWZmZXIgaG9sZGluZyB0aGUgZGF0YSAqLworCXVuc2lnbmVkIGludCBzaXplOwkvKiB0aGUgc2l6ZSBvZiB0aGUgYWxsb2NhdGVkIGJ1ZmZlciAqLworCXVuc2lnbmVkIGludCBpbjsJLyogZGF0YSBpcyBhZGRlZCBhdCBvZmZzZXQgKGluICUgc2l6ZSkgKi8KKwl1bnNpZ25lZCBpbnQgb3V0OwkvKiBkYXRhIGlzIGV4dHJhY3RlZCBmcm9tIG9mZi4gKG91dCAlIHNpemUpICovCisJc3BpbmxvY2tfdCAqbG9jazsJLyogcHJvdGVjdHMgY29uY3VycmVudCBtb2RpZmljYXRpb25zICovCit9OworCitleHRlcm4gc3RydWN0IGtmaWZvICprZmlmb19pbml0KHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgaW50IHNpemUsCisJCQkJdW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcF9tYXNrLCBzcGlubG9ja190ICpsb2NrKTsKK2V4dGVybiBzdHJ1Y3Qga2ZpZm8gKmtmaWZvX2FsbG9jKHVuc2lnbmVkIGludCBzaXplLCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZ2ZwX21hc2ssCisJCQkJIHNwaW5sb2NrX3QgKmxvY2spOworZXh0ZXJuIHZvaWQga2ZpZm9fZnJlZShzdHJ1Y3Qga2ZpZm8gKmZpZm8pOworZXh0ZXJuIHVuc2lnbmVkIGludCBfX2tmaWZvX3B1dChzdHJ1Y3Qga2ZpZm8gKmZpZm8sCisJCQkJdW5zaWduZWQgY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgbGVuKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgX19rZmlmb19nZXQoc3RydWN0IGtmaWZvICpmaWZvLAorCQkJCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgaW50IGxlbik7CisKKy8qKgorICogX19rZmlmb19yZXNldCAtIHJlbW92ZXMgdGhlIGVudGlyZSBGSUZPIGNvbnRlbnRzLCBubyBsb2NraW5nIHZlcnNpb24KKyAqIEBmaWZvOiB0aGUgZmlmbyB0byBiZSBlbXB0aWVkLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19rZmlmb19yZXNldChzdHJ1Y3Qga2ZpZm8gKmZpZm8pCit7CisJZmlmby0+aW4gPSBmaWZvLT5vdXQgPSAwOworfQorCisvKioKKyAqIGtmaWZvX3Jlc2V0IC0gcmVtb3ZlcyB0aGUgZW50aXJlIEZJRk8gY29udGVudHMKKyAqIEBmaWZvOiB0aGUgZmlmbyB0byBiZSBlbXB0aWVkLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQga2ZpZm9fcmVzZXQoc3RydWN0IGtmaWZvICpmaWZvKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZShmaWZvLT5sb2NrLCBmbGFncyk7CisKKwlfX2tmaWZvX3Jlc2V0KGZpZm8pOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShmaWZvLT5sb2NrLCBmbGFncyk7Cit9CisKKy8qKgorICoga2ZpZm9fcHV0IC0gcHV0cyBzb21lIGRhdGEgaW50byB0aGUgRklGTworICogQGZpZm86IHRoZSBmaWZvIHRvIGJlIHVzZWQuCisgKiBAYnVmZmVyOiB0aGUgZGF0YSB0byBiZSBhZGRlZC4KKyAqIEBsZW46IHRoZSBsZW5ndGggb2YgdGhlIGRhdGEgdG8gYmUgYWRkZWQuCisgKgorICogVGhpcyBmdW5jdGlvbiBjb3BpZXMgYXQgbW9zdCAnbGVuJyBieXRlcyBmcm9tIHRoZSAnYnVmZmVyJyBpbnRvCisgKiB0aGUgRklGTyBkZXBlbmRpbmcgb24gdGhlIGZyZWUgc3BhY2UsIGFuZCByZXR1cm5zIHRoZSBudW1iZXIgb2YKKyAqIGJ5dGVzIGNvcGllZC4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQga2ZpZm9fcHV0KHN0cnVjdCBrZmlmbyAqZmlmbywKKwkJCQkgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgaW50IGxlbikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCByZXQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZShmaWZvLT5sb2NrLCBmbGFncyk7CisKKwlyZXQgPSBfX2tmaWZvX3B1dChmaWZvLCBidWZmZXIsIGxlbik7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKGZpZm8tPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICoga2ZpZm9fZ2V0IC0gZ2V0cyBzb21lIGRhdGEgZnJvbSB0aGUgRklGTworICogQGZpZm86IHRoZSBmaWZvIHRvIGJlIHVzZWQuCisgKiBAYnVmZmVyOiB3aGVyZSB0aGUgZGF0YSBtdXN0IGJlIGNvcGllZC4KKyAqIEBsZW46IHRoZSBzaXplIG9mIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiBjb3BpZXMgYXQgbW9zdCAnbGVuJyBieXRlcyBmcm9tIHRoZSBGSUZPIGludG8gdGhlCisgKiAnYnVmZmVyJyBhbmQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGNvcGllZCBieXRlcy4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQga2ZpZm9fZ2V0KHN0cnVjdCBrZmlmbyAqZmlmbywKKwkJCQkgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgaW50IGxlbikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCByZXQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZShmaWZvLT5sb2NrLCBmbGFncyk7CisKKwlyZXQgPSBfX2tmaWZvX2dldChmaWZvLCBidWZmZXIsIGxlbik7CisKKwkvKgorCSAqIG9wdGltaXphdGlvbjogaWYgdGhlIEZJRk8gaXMgZW1wdHksIHNldCB0aGUgaW5kaWNlcyB0byAwCisJICogc28gd2UgZG9uJ3Qgd3JhcCB0aGUgbmV4dCB0aW1lCisJICovCisJaWYgKGZpZm8tPmluID09IGZpZm8tPm91dCkKKwkJZmlmby0+aW4gPSBmaWZvLT5vdXQgPSAwOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShmaWZvLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIF9fa2ZpZm9fbGVuIC0gcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGF2YWlsYWJsZSBpbiB0aGUgRklGTywgbm8gbG9ja2luZyB2ZXJzaW9uCisgKiBAZmlmbzogdGhlIGZpZm8gdG8gYmUgdXNlZC4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgX19rZmlmb19sZW4oc3RydWN0IGtmaWZvICpmaWZvKQoreworCXJldHVybiBmaWZvLT5pbiAtIGZpZm8tPm91dDsKK30KKworLyoqCisgKiBrZmlmb19sZW4gLSByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgYXZhaWxhYmxlIGluIHRoZSBGSUZPCisgKiBAZmlmbzogdGhlIGZpZm8gdG8gYmUgdXNlZC4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQga2ZpZm9fbGVuKHN0cnVjdCBrZmlmbyAqZmlmbykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCByZXQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZShmaWZvLT5sb2NrLCBmbGFncyk7CisKKwlyZXQgPSBfX2tmaWZvX2xlbihmaWZvKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoZmlmby0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KKworI2Vsc2UKKyN3YXJuaW5nICJkb24ndCBpbmNsdWRlIGtlcm5lbCBoZWFkZXJzIGluIHVzZXJzcGFjZSIKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva21hbGxvY19zaXplcy5oIGIvaW5jbHVkZS9saW51eC9rbWFsbG9jX3NpemVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgyZDRjMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgva21hbGxvY19zaXplcy5oCkBAIC0wLDAgKzEsMzMgQEAKKyNpZiAoUEFHRV9TSVpFID09IDQwOTYpCisJQ0FDSEUoMzIpCisjZW5kaWYKKwlDQUNIRSg2NCkKKyNpZiBMMV9DQUNIRV9CWVRFUyA8IDY0CisJQ0FDSEUoOTYpCisjZW5kaWYKKwlDQUNIRSgxMjgpCisjaWYgTDFfQ0FDSEVfQllURVMgPCAxMjgKKwlDQUNIRSgxOTIpCisjZW5kaWYKKwlDQUNIRSgyNTYpCisJQ0FDSEUoNTEyKQorCUNBQ0hFKDEwMjQpCisJQ0FDSEUoMjA0OCkKKwlDQUNIRSg0MDk2KQorCUNBQ0hFKDgxOTIpCisJQ0FDSEUoMTYzODQpCisJQ0FDSEUoMzI3NjgpCisJQ0FDSEUoNjU1MzYpCisJQ0FDSEUoMTMxMDcyKQorI2lmbmRlZiBDT05GSUdfTU1VCisJQ0FDSEUoMjYyMTQ0KQorCUNBQ0hFKDUyNDI4OCkKKwlDQUNIRSgxMDQ4NTc2KQorI2lmZGVmIENPTkZJR19MQVJHRV9BTExPQ1MKKwlDQUNIRSgyMDk3MTUyKQorCUNBQ0hFKDQxOTQzMDQpCisJQ0FDSEUoODM4ODYwOCkKKwlDQUNIRSgxNjc3NzIxNikKKwlDQUNIRSgzMzU1NDQzMikKKyNlbmRpZiAvKiBDT05GSUdfTEFSR0VfQUxMT0NTICovCisjZW5kaWYgLyogQ09ORklHX01NVSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rbW9kLmggYi9pbmNsdWRlL2xpbnV4L2ttb2QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWQwZTRiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9rbW9kLmgKQEAgLTAsMCArMSw0MCBAQAorI2lmbmRlZiBfX0xJTlVYX0tNT0RfSF9fCisjZGVmaW5lIF9fTElOVVhfS01PRF9IX18KKworLyoKKyAqCWluY2x1ZGUvbGludXgva21vZC5oCisgKgorICogICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisKKyNkZWZpbmUgS01PRF9QQVRIX0xFTiAyNTYKKworI2lmZGVmIENPTkZJR19LTU9ECisvKiBtb2Rwcm9iZSBleGl0IHN0YXR1cyBvbiBzdWNjZXNzLCAtdmUgb24gZXJyb3IuICBSZXR1cm4gdmFsdWUKKyAqIHVzdWFsbHkgdXNlbGVzcyB0aG91Z2guICovCitleHRlcm4gaW50IHJlcXVlc3RfbW9kdWxlKGNvbnN0IGNoYXIgKiBuYW1lLCAuLi4pIF9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCByZXF1ZXN0X21vZHVsZShjb25zdCBjaGFyICogbmFtZSwgLi4uKSB7IHJldHVybiAtRU5PU1lTOyB9CisjZW5kaWYKKworI2RlZmluZSB0cnlfdGhlbl9yZXF1ZXN0X21vZHVsZSh4LCBtb2QuLi4pICgoeCkgPzogKHJlcXVlc3RfbW9kdWxlKG1vZCksICh4KSkpCitleHRlcm4gaW50IGNhbGxfdXNlcm1vZGVoZWxwZXIoY2hhciAqcGF0aCwgY2hhciAqYXJndltdLCBjaGFyICplbnZwW10sIGludCB3YWl0KTsKK2V4dGVybiB2b2lkIHVzZXJtb2RlaGVscGVyX2luaXQodm9pZCk7CisKKyNlbmRpZiAvKiBfX0xJTlVYX0tNT0RfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tvYmpfbWFwLmggYi9pbmNsdWRlL2xpbnV4L2tvYmpfbWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZjYzEwYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgva29ial9tYXAuaApAQCAtMCwwICsxLDEyIEBACisjaWZkZWYgX19LRVJORUxfXworCit0eXBlZGVmIHN0cnVjdCBrb2JqZWN0ICprb2JqX3Byb2JlX3QoZGV2X3QsIGludCAqLCB2b2lkICopOworc3RydWN0IGtvYmpfbWFwOworCitpbnQga29ial9tYXAoc3RydWN0IGtvYmpfbWFwICosIGRldl90LCB1bnNpZ25lZCBsb25nLCBzdHJ1Y3QgbW9kdWxlICosCisJICAgICBrb2JqX3Byb2JlX3QgKiwgaW50ICgqKShkZXZfdCwgdm9pZCAqKSwgdm9pZCAqKTsKK3ZvaWQga29ial91bm1hcChzdHJ1Y3Qga29ial9tYXAgKiwgZGV2X3QsIHVuc2lnbmVkIGxvbmcpOworc3RydWN0IGtvYmplY3QgKmtvYmpfbG9va3VwKHN0cnVjdCBrb2JqX21hcCAqLCBkZXZfdCwgaW50ICopOworc3RydWN0IGtvYmpfbWFwICprb2JqX21hcF9pbml0KGtvYmpfcHJvYmVfdCAqLCBzdHJ1Y3Qgc2VtYXBob3JlICopOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva29iamVjdC5oIGIvaW5jbHVkZS9saW51eC9rb2JqZWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY1ZDY2MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgva29iamVjdC5oCkBAIC0wLDAgKzEsMjU5IEBACisvKgorICoga29iamVjdC5oIC0gZ2VuZXJpYyBrZXJuZWwgb2JqZWN0IGluZnJhc3RydWN0dXJlLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMi0yMDAzCVBhdHJpY2sgTW9jaGVsCisgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwMwlPcGVuIFNvdXJjZSBEZXZlbG9wbWVudCBMYWJzCisgKgorICogVGhpcyBmaWxlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBHUEx2Mi4KKyAqCisgKiAKKyAqIFBsZWFzZSByZWFkIERvY3VtZW50YXRpb24va29iamVjdC50eHQgYmVmb3JlIHVzaW5nIHRoZSBrb2JqZWN0CisgKiBpbnRlcmZhY2UsIEVTUEVDSUFMTFkgdGhlIHBhcnRzIGFib3V0IHJlZmVyZW5jZSBjb3VudHMgYW5kIG9iamVjdAorICogZGVzdHJ1Y3RvcnMuIAorICovCisKKyNpZm5kZWYgX0tPQkpFQ1RfSF8KKyNkZWZpbmUgX0tPQkpFQ1RfSF8KKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgorI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KKyNpbmNsdWRlIDxsaW51eC9rb2JqZWN0X3VldmVudC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKworI2RlZmluZSBLT0JKX05BTUVfTEVOCTIwCisKKy8qIGNvdW50ZXIgdG8gdGFnIHRoZSBob3RwbHVnIGV2ZW50LCByZWFkIG9ubHkgZXhjZXB0IGZvciB0aGUga29iamVjdCBjb3JlICovCitleHRlcm4gdTY0IGhvdHBsdWdfc2VxbnVtOworCitzdHJ1Y3Qga29iamVjdCB7CisJY2hhcgkJCSoga19uYW1lOworCWNoYXIJCQluYW1lW0tPQkpfTkFNRV9MRU5dOworCXN0cnVjdCBrcmVmCQlrcmVmOworCXN0cnVjdCBsaXN0X2hlYWQJZW50cnk7CisJc3RydWN0IGtvYmplY3QJCSogcGFyZW50OworCXN0cnVjdCBrc2V0CQkqIGtzZXQ7CisJc3RydWN0IGtvYmpfdHlwZQkqIGt0eXBlOworCXN0cnVjdCBkZW50cnkJCSogZGVudHJ5OworfTsKKworZXh0ZXJuIGludCBrb2JqZWN0X3NldF9uYW1lKHN0cnVjdCBrb2JqZWN0ICosIGNvbnN0IGNoYXIgKiwgLi4uKQorCV9fYXR0cmlidXRlX18oKGZvcm1hdChwcmludGYsMiwzKSkpOworCitzdGF0aWMgaW5saW5lIGNoYXIgKiBrb2JqZWN0X25hbWUoc3RydWN0IGtvYmplY3QgKiBrb2JqKQoreworCXJldHVybiBrb2JqLT5rX25hbWU7Cit9CisKK2V4dGVybiB2b2lkIGtvYmplY3RfaW5pdChzdHJ1Y3Qga29iamVjdCAqKTsKK2V4dGVybiB2b2lkIGtvYmplY3RfY2xlYW51cChzdHJ1Y3Qga29iamVjdCAqKTsKKworZXh0ZXJuIGludCBrb2JqZWN0X2FkZChzdHJ1Y3Qga29iamVjdCAqKTsKK2V4dGVybiB2b2lkIGtvYmplY3RfZGVsKHN0cnVjdCBrb2JqZWN0ICopOworCitleHRlcm4gaW50IGtvYmplY3RfcmVuYW1lKHN0cnVjdCBrb2JqZWN0ICosIGNoYXIgKm5ld19uYW1lKTsKKworZXh0ZXJuIGludCBrb2JqZWN0X3JlZ2lzdGVyKHN0cnVjdCBrb2JqZWN0ICopOworZXh0ZXJuIHZvaWQga29iamVjdF91bnJlZ2lzdGVyKHN0cnVjdCBrb2JqZWN0ICopOworCitleHRlcm4gc3RydWN0IGtvYmplY3QgKiBrb2JqZWN0X2dldChzdHJ1Y3Qga29iamVjdCAqKTsKK2V4dGVybiB2b2lkIGtvYmplY3RfcHV0KHN0cnVjdCBrb2JqZWN0ICopOworCitleHRlcm4gY2hhciAqIGtvYmplY3RfZ2V0X3BhdGgoc3RydWN0IGtvYmplY3QgKiwgaW50KTsKKworc3RydWN0IGtvYmpfdHlwZSB7CisJdm9pZCAoKnJlbGVhc2UpKHN0cnVjdCBrb2JqZWN0ICopOworCXN0cnVjdCBzeXNmc19vcHMJKiBzeXNmc19vcHM7CisJc3RydWN0IGF0dHJpYnV0ZQkqKiBkZWZhdWx0X2F0dHJzOworfTsKKworCisvKioKKyAqCWtzZXQgLSBhIHNldCBvZiBrb2JqZWN0cyBvZiBhIHNwZWNpZmljIHR5cGUsIGJlbG9uZ2luZworICoJdG8gYSBzcGVjaWZpYyBzdWJzeXN0ZW0uCisgKgorICoJQWxsIGtvYmplY3RzIG9mIGEga3NldCBzaG91bGQgYmUgZW1iZWRkZWQgaW4gYW4gaWRlbnRpY2FsIAorICoJdHlwZS4gVGhpcyB0eXBlIG1heSBoYXZlIGEgZGVzY3JpcHRvciwgd2hpY2ggdGhlIGtzZXQgcG9pbnRzCisgKgl0by4gVGhpcyBhbGxvd3MgdGhlcmUgdG8gZXhpc3Qgc2V0cyBvZiBvYmplY3RzIG9mIHRoZSBzYW1lCisgKgl0eXBlIGluIGRpZmZlcmVudCBzdWJzeXN0ZW1zLgorICoKKyAqCUEgc3Vic3lzdGVtIGRvZXMgbm90IGhhdmUgdG8gYmUgYSBsaXN0IG9mIG9ubHkgb25lIHR5cGUgCisgKglvZiBvYmplY3Q7IG11bHRpcGxlIGtzZXRzIGNhbiBiZWxvbmcgdG8gb25lIHN1YnN5c3RlbS4gQWxsIAorICoJa3NldHMgb2YgYSBzdWJzeXN0ZW0gc2hhcmUgdGhlIHN1YnN5c3RlbSdzIGxvY2suCisgKgorICogICAgICBFYWNoIGtzZXQgY2FuIHN1cHBvcnQgaG90cGx1Z2dpbmc7IGlmIGl0IGRvZXMsIGl0IHdpbGwgYmUgZ2l2ZW4KKyAqICAgICAgdGhlIG9wcG9ydHVuaXR5IHRvIGZpbHRlciBvdXQgc3BlY2lmaWMga29iamVjdHMgZnJvbSBiZWluZworICogICAgICByZXBvcnRlZCwgYXMgd2VsbCBhcyB0byBhZGQgaXRzIG93biAiZGF0YSIgZWxlbWVudHMgdG8gdGhlCisgKiAgICAgIGVudmlyb25tZW50IGJlaW5nIHBhc3NlZCB0byB0aGUgaG90cGx1ZyBoZWxwZXIuCisgKi8KK3N0cnVjdCBrc2V0X2hvdHBsdWdfb3BzIHsKKwlpbnQgKCpmaWx0ZXIpKHN0cnVjdCBrc2V0ICprc2V0LCBzdHJ1Y3Qga29iamVjdCAqa29iaik7CisJY2hhciAqKCpuYW1lKShzdHJ1Y3Qga3NldCAqa3NldCwgc3RydWN0IGtvYmplY3QgKmtvYmopOworCWludCAoKmhvdHBsdWcpKHN0cnVjdCBrc2V0ICprc2V0LCBzdHJ1Y3Qga29iamVjdCAqa29iaiwgY2hhciAqKmVudnAsCisJCQlpbnQgbnVtX2VudnAsIGNoYXIgKmJ1ZmZlciwgaW50IGJ1ZmZlcl9zaXplKTsKK307CisKK3N0cnVjdCBrc2V0IHsKKwlzdHJ1Y3Qgc3Vic3lzdGVtCSogc3Vic3lzOworCXN0cnVjdCBrb2JqX3R5cGUJKiBrdHlwZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CisJc3BpbmxvY2tfdAkJbGlzdF9sb2NrOworCXN0cnVjdCBrb2JqZWN0CQlrb2JqOworCXN0cnVjdCBrc2V0X2hvdHBsdWdfb3BzCSogaG90cGx1Z19vcHM7Cit9OworCisKK2V4dGVybiB2b2lkIGtzZXRfaW5pdChzdHJ1Y3Qga3NldCAqIGspOworZXh0ZXJuIGludCBrc2V0X2FkZChzdHJ1Y3Qga3NldCAqIGspOworZXh0ZXJuIGludCBrc2V0X3JlZ2lzdGVyKHN0cnVjdCBrc2V0ICogayk7CitleHRlcm4gdm9pZCBrc2V0X3VucmVnaXN0ZXIoc3RydWN0IGtzZXQgKiBrKTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3Qga3NldCAqIHRvX2tzZXQoc3RydWN0IGtvYmplY3QgKiBrb2JqKQoreworCXJldHVybiBrb2JqID8gY29udGFpbmVyX29mKGtvYmosc3RydWN0IGtzZXQsa29iaikgOiBOVUxMOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBrc2V0ICoga3NldF9nZXQoc3RydWN0IGtzZXQgKiBrKQoreworCXJldHVybiBrID8gdG9fa3NldChrb2JqZWN0X2dldCgmay0+a29iaikpIDogTlVMTDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGtzZXRfcHV0KHN0cnVjdCBrc2V0ICogaykKK3sKKwlrb2JqZWN0X3B1dCgmay0+a29iaik7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGtvYmpfdHlwZSAqIGdldF9rdHlwZShzdHJ1Y3Qga29iamVjdCAqIGspCit7CisJaWYgKGstPmtzZXQgJiYgay0+a3NldC0+a3R5cGUpCisJCXJldHVybiBrLT5rc2V0LT5rdHlwZTsKKwllbHNlIAorCQlyZXR1cm4gay0+a3R5cGU7Cit9CisKK2V4dGVybiBzdHJ1Y3Qga29iamVjdCAqIGtzZXRfZmluZF9vYmooc3RydWN0IGtzZXQgKiwgY29uc3QgY2hhciAqKTsKKworCisvKioKKyAqIFVzZSB0aGlzIHdoZW4gaW5pdGlhbGl6aW5nIGFuIGVtYmVkZGVkIGtzZXQgd2l0aCBubyBvdGhlciAKKyAqIGZpZWxkcyB0byBpbml0aWFsaXplLgorICovCisjZGVmaW5lIHNldF9rc2V0X25hbWUoc3RyKQkua3NldCA9IHsgLmtvYmogPSB7IC5uYW1lID0gc3RyIH0gfQorCisKKworc3RydWN0IHN1YnN5c3RlbSB7CisJc3RydWN0IGtzZXQJCWtzZXQ7CisJc3RydWN0IHJ3X3NlbWFwaG9yZQlyd3NlbTsKK307CisKKyNkZWZpbmUgZGVjbF9zdWJzeXMoX25hbWUsX3R5cGUsX2hvdHBsdWdfb3BzKSBcCitzdHJ1Y3Qgc3Vic3lzdGVtIF9uYW1lIyNfc3Vic3lzID0geyBcCisJLmtzZXQgPSB7IFwKKwkJLmtvYmogPSB7IC5uYW1lID0gX19zdHJpbmdpZnkoX25hbWUpIH0sIFwKKwkJLmt0eXBlID0gX3R5cGUsIFwKKwkJLmhvdHBsdWdfb3BzID1faG90cGx1Z19vcHMsIFwKKwl9IFwKK30KKyNkZWZpbmUgZGVjbF9zdWJzeXNfbmFtZShfdmFybmFtZSxfbmFtZSxfdHlwZSxfaG90cGx1Z19vcHMpIFwKK3N0cnVjdCBzdWJzeXN0ZW0gX3Zhcm5hbWUjI19zdWJzeXMgPSB7IFwKKwkua3NldCA9IHsgXAorCQkua29iaiA9IHsgLm5hbWUgPSBfX3N0cmluZ2lmeShfbmFtZSkgfSwgXAorCQkua3R5cGUgPSBfdHlwZSwgXAorCQkuaG90cGx1Z19vcHMgPV9ob3RwbHVnX29wcywgXAorCX0gXAorfQorCisvKiBUaGUgZ2xvYmFsIC9zeXMva2VybmVsLyBzdWJzeXN0ZW0gZm9yIHBlb3BsZSB0byBjaGFpbiBvZmYgb2YgKi8KK2V4dGVybiBzdHJ1Y3Qgc3Vic3lzdGVtIGtlcm5lbF9zdWJzeXM7CisKKy8qKgorICogSGVscGVycyBmb3Igc2V0dGluZyB0aGUga3NldCBvZiByZWdpc3RlcmVkIG9iamVjdHMuCisgKiBPZnRlbiwgYSByZWdpc3RlcmVkIG9iamVjdCBiZWxvbmdzIHRvIGEga3NldCBlbWJlZGRlZCBpbiBhIAorICogc3Vic3lzdGVtLiBUaGVzZSBkbyBubyBtYWdpYywganVzdCBtYWtlIHRoZSByZXN1bHRpbmcgY29kZQorICogZWFzaWVyIHRvIGZvbGxvdy4gCisgKi8KKworLyoqCisgKglrb2JqX3NldF9rc2V0X3Mob2JqLHN1YnN5cykgLSBzZXQga3NldCBmb3IgZW1iZWRkZWQga29iamVjdC4KKyAqCUBvYmo6CQlwdHIgdG8gc29tZSBvYmplY3QgdHlwZS4KKyAqCUBzdWJzeXM6CWEgc3Vic3lzdGVtIG9iamVjdCAobm90IGEgcHRyKS4KKyAqCisgKglDYW4gYmUgdXNlZCBmb3IgYW55IG9iamVjdCB0eXBlIHdpdGggYW4gZW1iZWRkZWQgLT5rb2JqLgorICovCisKKyNkZWZpbmUga29ial9zZXRfa3NldF9zKG9iaixzdWJzeXMpIFwKKwkob2JqKS0+a29iai5rc2V0ID0gJihzdWJzeXMpLmtzZXQKKworLyoqCisgKglrc2V0X3NldF9rc2V0X3Mob2JqLHN1YnN5cykgLSBzZXQga3NldCBmb3IgZW1iZWRkZWQga3NldC4KKyAqCUBvYmo6CQlwdHIgdG8gc29tZSBvYmplY3QgdHlwZS4KKyAqCUBzdWJzeXM6CWEgc3Vic3lzdGVtIG9iamVjdCAobm90IGEgcHRyKS4KKyAqCisgKglDYW4gYmUgdXNlZCBmb3IgYW55IG9iamVjdCB0eXBlIHdpdGggYW4gZW1iZWRkZWQgLT5rc2V0LgorICoJU2V0cyB0aGUga3NldCBvZiBAb2JqJ3MgIGVtYmVkZGVkIGtvYmplY3QgKHZpYSBpdHMgZW1iZWRkZWQKKyAqCWtzZXQpIHRvIEBzdWJzeXMua3NldC4gVGhpcyBtYWtlcyBAb2JqIGEgbWVtYmVyIG9mIHRoYXQgCisgKglrc2V0LgorICovCisKKyNkZWZpbmUga3NldF9zZXRfa3NldF9zKG9iaixzdWJzeXMpIFwKKwkob2JqKS0+a3NldC5rb2JqLmtzZXQgPSAmKHN1YnN5cykua3NldAorCisvKioKKyAqCXN1YnN5c19zZXRfa3NldChvYmosc3Vic3lzKSAtIHNldCBrc2V0IGZvciBzdWJzeXN0ZW0KKyAqCUBvYmo6CQlwdHIgdG8gc29tZSBvYmplY3QgdHlwZS4KKyAqCUBzdWJzeXM6CWEgc3Vic3lzdGVtIG9iamVjdCAobm90IGEgcHRyKS4KKyAqCisgKglDYW4gYmUgdXNlZCBmb3IgYW55IG9iamVjdCB0eXBlIHdpdGggYW4gZW1iZWRkZWQgLT5zdWJzeXMuCisgKglTZXRzIHRoZSBrc2V0IG9mIEBvYmoncyBrb2JqZWN0IHRvIEBzdWJzeXMua3NldC4gVGhpcyBtYWtlcworICoJdGhlIG9iamVjdCBhIG1lbWJlciBvZiB0aGF0IGtzZXQuCisgKi8KKworI2RlZmluZSBzdWJzeXNfc2V0X2tzZXQob2JqLF9zdWJzeXMpIFwKKwkob2JqKS0+c3Vic3lzLmtzZXQua29iai5rc2V0ID0gJihfc3Vic3lzKS5rc2V0CisKK2V4dGVybiB2b2lkIHN1YnN5c3RlbV9pbml0KHN0cnVjdCBzdWJzeXN0ZW0gKik7CitleHRlcm4gaW50IHN1YnN5c3RlbV9yZWdpc3RlcihzdHJ1Y3Qgc3Vic3lzdGVtICopOworZXh0ZXJuIHZvaWQgc3Vic3lzdGVtX3VucmVnaXN0ZXIoc3RydWN0IHN1YnN5c3RlbSAqKTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc3Vic3lzdGVtICogc3Vic3lzX2dldChzdHJ1Y3Qgc3Vic3lzdGVtICogcykKK3sKKwlyZXR1cm4gcyA/IGNvbnRhaW5lcl9vZihrc2V0X2dldCgmcy0+a3NldCksc3RydWN0IHN1YnN5c3RlbSxrc2V0KSA6IE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzdWJzeXNfcHV0KHN0cnVjdCBzdWJzeXN0ZW0gKiBzKQoreworCWtzZXRfcHV0KCZzLT5rc2V0KTsKK30KKworc3RydWN0IHN1YnN5c19hdHRyaWJ1dGUgeworCXN0cnVjdCBhdHRyaWJ1dGUgYXR0cjsKKwlzc2l6ZV90ICgqc2hvdykoc3RydWN0IHN1YnN5c3RlbSAqLCBjaGFyICopOworCXNzaXplX3QgKCpzdG9yZSkoc3RydWN0IHN1YnN5c3RlbSAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7IAorfTsKKworZXh0ZXJuIGludCBzdWJzeXNfY3JlYXRlX2ZpbGUoc3RydWN0IHN1YnN5c3RlbSAqICwgc3RydWN0IHN1YnN5c19hdHRyaWJ1dGUgKik7CitleHRlcm4gdm9pZCBzdWJzeXNfcmVtb3ZlX2ZpbGUoc3RydWN0IHN1YnN5c3RlbSAqICwgc3RydWN0IHN1YnN5c19hdHRyaWJ1dGUgKik7CisKKyNpZmRlZiBDT05GSUdfSE9UUExVRwordm9pZCBrb2JqZWN0X2hvdHBsdWcoc3RydWN0IGtvYmplY3QgKmtvYmosIGVudW0ga29iamVjdF9hY3Rpb24gYWN0aW9uKTsKK2ludCBhZGRfaG90cGx1Z19lbnZfdmFyKGNoYXIgKiplbnZwLCBpbnQgbnVtX2VudnAsIGludCAqY3VyX2luZGV4LAorCQkJY2hhciAqYnVmZmVyLCBpbnQgYnVmZmVyX3NpemUsIGludCAqY3VyX2xlbiwKKwkJCWNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQorCV9fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCA3LCA4KSkpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBrb2JqZWN0X2hvdHBsdWcoc3RydWN0IGtvYmplY3QgKmtvYmosIGVudW0ga29iamVjdF9hY3Rpb24gYWN0aW9uKSB7IH0KK3N0YXRpYyBpbmxpbmUgaW50IGFkZF9ob3RwbHVnX2Vudl92YXIoY2hhciAqKmVudnAsIGludCBudW1fZW52cCwgaW50ICpjdXJfaW5kZXgsIAorCQkJCSAgICAgIGNoYXIgKmJ1ZmZlciwgaW50IGJ1ZmZlcl9zaXplLCBpbnQgKmN1cl9sZW4sIAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreyByZXR1cm4gMDsgfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYgLyogX0tPQkpFQ1RfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva29iamVjdF91ZXZlbnQuaCBiL2luY2x1ZGUvbGludXgva29iamVjdF91ZXZlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTY2NGZlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9rb2JqZWN0X3VldmVudC5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBrb2JqZWN0X3VldmVudC5oIC0gbGlzdCBvZiBrb2JqZWN0IHVzZXIgZXZlbnRzIHRoYXQgY2FuIGJlIGdlbmVyYXRlZAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBJQk0gQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCBHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdAa3JvYWguY29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgR1BMdjIuCisgKgorICovCisKKyNpZm5kZWYgX0tPQkpFQ1RfRVZFTlRfSF8KKyNkZWZpbmUgX0tPQkpFQ1RfRVZFTlRfSF8KKworI2RlZmluZSBIT1RQTFVHX1BBVEhfTEVOCTI1NgorCisvKiBwYXRoIHRvIHRoZSBob3RwbHVnIHVzZXJzcGFjZSBoZWxwZXIgZXhlY3V0ZWQgb24gYW4gZXZlbnQgKi8KK2V4dGVybiBjaGFyIGhvdHBsdWdfcGF0aFtdOworCisvKgorICogSWYgeW91IGFkZCBhbiBhY3Rpb24gaGVyZSwgeW91IG11c3QgYWxzbyBhZGQgdGhlIHByb3BlciBzdHJpbmcgdG8gdGhlCisgKiBsaWIva29iamVjdF91ZXZlbnQuYyBmaWxlLgorICovCit0eXBlZGVmIGludCBfX2JpdHdpc2Uga29iamVjdF9hY3Rpb25fdDsKK2VudW0ga29iamVjdF9hY3Rpb24geworCUtPQkpfQURECT0gKF9fZm9yY2Uga29iamVjdF9hY3Rpb25fdCkgMHgwMSwJLyogYWRkIGV2ZW50LCBmb3IgaG90cGx1ZyAqLworCUtPQkpfUkVNT1ZFCT0gKF9fZm9yY2Uga29iamVjdF9hY3Rpb25fdCkgMHgwMiwJLyogcmVtb3ZlIGV2ZW50LCBmb3IgaG90cGx1ZyAqLworCUtPQkpfQ0hBTkdFCT0gKF9fZm9yY2Uga29iamVjdF9hY3Rpb25fdCkgMHgwMywJLyogYSBzeXNmcyBhdHRyaWJ1dGUgZmlsZSBoYXMgY2hhbmdlZCAqLworCUtPQkpfTU9VTlQJPSAoX19mb3JjZSBrb2JqZWN0X2FjdGlvbl90KSAweDA0LAkvKiBtb3VudCBldmVudCBmb3IgYmxvY2sgZGV2aWNlcyAqLworCUtPQkpfVU1PVU5UCT0gKF9fZm9yY2Uga29iamVjdF9hY3Rpb25fdCkgMHgwNSwJLyogdW1vdW50IGV2ZW50IGZvciBibG9jayBkZXZpY2VzICovCisJS09CSl9PRkZMSU5FCT0gKF9fZm9yY2Uga29iamVjdF9hY3Rpb25fdCkgMHgwNiwJLyogb2ZmbGluZSBldmVudCBmb3IgaG90cGx1ZyBkZXZpY2VzICovCisJS09CSl9PTkxJTkUJPSAoX19mb3JjZSBrb2JqZWN0X2FjdGlvbl90KSAweDA3LAkvKiBvbmxpbmUgZXZlbnQgZm9yIGhvdHBsdWcgZGV2aWNlcyAqLworfTsKKworCisjaWZkZWYgQ09ORklHX0tPQkpFQ1RfVUVWRU5UCitpbnQga29iamVjdF91ZXZlbnQoc3RydWN0IGtvYmplY3QgKmtvYmosCisJCSAgIGVudW0ga29iamVjdF9hY3Rpb24gYWN0aW9uLAorCQkgICBzdHJ1Y3QgYXR0cmlidXRlICphdHRyKTsKK2ludCBrb2JqZWN0X3VldmVudF9hdG9taWMoc3RydWN0IGtvYmplY3QgKmtvYmosCisJCQkgIGVudW0ga29iamVjdF9hY3Rpb24gYWN0aW9uLAorCQkJICBzdHJ1Y3QgYXR0cmlidXRlICphdHRyKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBrb2JqZWN0X3VldmVudChzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJCQkgZW51bSBrb2JqZWN0X2FjdGlvbiBhY3Rpb24sCisJCQkJIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIpCit7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW5saW5lIGludCBrb2JqZWN0X3VldmVudF9hdG9taWMoc3RydWN0IGtvYmplY3QgKmtvYmosCisJCQkJICAgICAgICBlbnVtIGtvYmplY3RfYWN0aW9uIGFjdGlvbiwKKwkJCQkJc3RydWN0IGF0dHJpYnV0ZSAqYXR0cikKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3Byb2Jlcy5oIGIvaW5jbHVkZS9saW51eC9rcHJvYmVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjIwYzE2MwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgva3Byb2Jlcy5oCkBAIC0wLDAgKzEsMTM2IEBACisjaWZuZGVmIF9MSU5VWF9LUFJPQkVTX0gKKyNkZWZpbmUgX0xJTlVYX0tQUk9CRVNfSAorLyoKKyAqICBLZXJuZWwgUHJvYmVzIChLUHJvYmVzKQorICogIGluY2x1ZGUvbGludXgva3Byb2Jlcy5oCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIElCTSBDb3Jwb3JhdGlvbiwgMjAwMiwgMjAwNAorICoKKyAqIDIwMDItT2N0CUNyZWF0ZWQgYnkgVmFtc2kgS3Jpc2huYSBTIDx2YW1zaV9rcmlzaG5hQGluLmlibS5jb20+IEtlcm5lbAorICoJCVByb2JlcyBpbml0aWFsIGltcGxlbWVudGF0aW9uICggaW5jbHVkZXMgc3VnZ2VzdGlvbnMgZnJvbQorICoJCVJ1c3R5IFJ1c3NlbGwpLgorICogMjAwNC1KdWx5CVN1cGFybmEgQmhhdHRhY2hhcnlhIDxzdXBhcm5hQGluLmlibS5jb20+IGFkZGVkIGp1bXBlciBwcm9iZXMKKyAqCQlpbnRlcmZhY2UgdG8gYWNjZXNzIGZ1bmN0aW9uIGFyZ3VtZW50cy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGFzbS9rcHJvYmVzLmg+CisKK3N0cnVjdCBrcHJvYmU7CitzdHJ1Y3QgcHRfcmVnczsKK3R5cGVkZWYgaW50ICgqa3Byb2JlX3ByZV9oYW5kbGVyX3QpIChzdHJ1Y3Qga3Byb2JlICosIHN0cnVjdCBwdF9yZWdzICopOwordHlwZWRlZiBpbnQgKCprcHJvYmVfYnJlYWtfaGFuZGxlcl90KSAoc3RydWN0IGtwcm9iZSAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKK3R5cGVkZWYgdm9pZCAoKmtwcm9iZV9wb3N0X2hhbmRsZXJfdCkgKHN0cnVjdCBrcHJvYmUgKiwgc3RydWN0IHB0X3JlZ3MgKiwKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncyk7Cit0eXBlZGVmIGludCAoKmtwcm9iZV9mYXVsdF9oYW5kbGVyX3QpIChzdHJ1Y3Qga3Byb2JlICosIHN0cnVjdCBwdF9yZWdzICosCisJCQkJICAgICAgIGludCB0cmFwbnIpOworc3RydWN0IGtwcm9iZSB7CisJc3RydWN0IGhsaXN0X25vZGUgaGxpc3Q7CisKKwkvKiBsb2NhdGlvbiBvZiB0aGUgcHJvYmUgcG9pbnQgKi8KKwlrcHJvYmVfb3Bjb2RlX3QgKmFkZHI7CisKKwkvKiBDYWxsZWQgYmVmb3JlIGFkZHIgaXMgZXhlY3V0ZWQuICovCisJa3Byb2JlX3ByZV9oYW5kbGVyX3QgcHJlX2hhbmRsZXI7CisKKwkvKiBDYWxsZWQgYWZ0ZXIgYWRkciBpcyBleGVjdXRlZCwgdW5sZXNzLi4uICovCisJa3Byb2JlX3Bvc3RfaGFuZGxlcl90IHBvc3RfaGFuZGxlcjsKKworCS8qIC4uLiBjYWxsZWQgaWYgZXhlY3V0aW5nIGFkZHIgY2F1c2VzIGEgZmF1bHQgKGVnLiBwYWdlIGZhdWx0KS4KKwkgKiBSZXR1cm4gMSBpZiBpdCBoYW5kbGVkIGZhdWx0LCBvdGhlcndpc2Uga2VybmVsIHdpbGwgc2VlIGl0LiAqLworCWtwcm9iZV9mYXVsdF9oYW5kbGVyX3QgZmF1bHRfaGFuZGxlcjsKKworCS8qIC4uLiBjYWxsZWQgaWYgYnJlYWtwb2ludCB0cmFwIG9jY3VycyBpbiBwcm9iZSBoYW5kbGVyLgorCSAqIFJldHVybiAxIGlmIGl0IGhhbmRsZWQgYnJlYWssIG90aGVyd2lzZSBrZXJuZWwgd2lsbCBzZWUgaXQuICovCisJa3Byb2JlX2JyZWFrX2hhbmRsZXJfdCBicmVha19oYW5kbGVyOworCisJLyogU2F2ZWQgb3Bjb2RlICh3aGljaCBoYXMgYmVlbiByZXBsYWNlZCB3aXRoIGJyZWFrcG9pbnQpICovCisJa3Byb2JlX29wY29kZV90IG9wY29kZTsKKworCS8qIGNvcHkgb2YgdGhlIG9yaWdpbmFsIGluc3RydWN0aW9uICovCisJc3RydWN0IGFyY2hfc3BlY2lmaWNfaW5zbiBhaW5zbjsKK307CisKKy8qCisgKiBTcGVjaWFsIHByb2JlIHR5cGUgdGhhdCB1c2VzIHNldGptcC1sb25nam1wIHR5cGUgdHJpY2tzIHRvIHJlc3VtZQorICogZXhlY3V0aW9uIGF0IGEgc3BlY2lmaWVkIGVudHJ5IHdpdGggYSBtYXRjaGluZyBwcm90b3R5cGUgY29ycmVzcG9uZGluZworICogdG8gdGhlIHByb2JlZCBmdW5jdGlvbiAtIGEgdHJpY2sgdG8gZW5hYmxlIGFyZ3VtZW50cyB0byBiZWNvbWUKKyAqIGFjY2Vzc2libGUgc2VhbWxlc3NseSBieSBwcm9iZSBoYW5kbGluZyBsb2dpYy4KKyAqIE5vdGU6CisgKiBCZWNhdXNlIG9mIHRoZSB3YXkgY29tcGlsZXJzIGFsbG9jYXRlIHN0YWNrIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKKyAqIGV0YyB1cGZyb250LCByZWdhcmRsZXNzIG9mIHN1Yi1zY29wZXMgd2l0aGluIGEgZnVuY3Rpb24sIHRoaXMgbWlycm9yaW5nCisgKiBwcmluY2lwbGUgY3VycmVudGx5IHdvcmtzIG9ubHkgZm9yIHByb2JlcyBwbGFjZWQgb24gZnVuY3Rpb24gZW50cnkgcG9pbnRzLgorICovCitzdHJ1Y3QganByb2JlIHsKKwlzdHJ1Y3Qga3Byb2JlIGtwOworCWtwcm9iZV9vcGNvZGVfdCAqZW50cnk7CS8qIHByb2JlIGhhbmRsaW5nIGNvZGUgdG8ganVtcCB0byAqLworfTsKKworI2lmZGVmIENPTkZJR19LUFJPQkVTCisvKiBMb2NrcyBrcHJvYmU6IGlycSBtdXN0IGJlIGRpc2FibGVkICovCit2b2lkIGxvY2tfa3Byb2Jlcyh2b2lkKTsKK3ZvaWQgdW5sb2NrX2twcm9iZXModm9pZCk7CisKKy8qIGtwcm9iZSBydW5uaW5nIG5vdyBvbiB0aGlzIENQVT8gKi8KK3N0YXRpYyBpbmxpbmUgaW50IGtwcm9iZV9ydW5uaW5nKHZvaWQpCit7CisJZXh0ZXJuIHVuc2lnbmVkIGludCBrcHJvYmVfY3B1OworCXJldHVybiBrcHJvYmVfY3B1ID09IHNtcF9wcm9jZXNzb3JfaWQoKTsKK30KKworZXh0ZXJuIGludCBhcmNoX3ByZXBhcmVfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnApOworZXh0ZXJuIHZvaWQgYXJjaF9jb3B5X2twcm9iZShzdHJ1Y3Qga3Byb2JlICpwKTsKK2V4dGVybiB2b2lkIGFyY2hfcmVtb3ZlX2twcm9iZShzdHJ1Y3Qga3Byb2JlICpwKTsKK2V4dGVybiB2b2lkIHNob3dfcmVnaXN0ZXJzKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworLyogR2V0IHRoZSBrcHJvYmUgYXQgdGhpcyBhZGRyIChpZiBhbnkpLiAgTXVzdCBoYXZlIGNhbGxlZCBsb2NrX2twcm9iZXMgKi8KK3N0cnVjdCBrcHJvYmUgKmdldF9rcHJvYmUodm9pZCAqYWRkcik7CisKK2ludCByZWdpc3Rlcl9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcCk7Cit2b2lkIHVucmVnaXN0ZXJfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnApOworaW50IHNldGptcF9wcmVfaGFuZGxlcihzdHJ1Y3Qga3Byb2JlICosIHN0cnVjdCBwdF9yZWdzICopOworaW50IGxvbmdqbXBfYnJlYWtfaGFuZGxlcihzdHJ1Y3Qga3Byb2JlICosIHN0cnVjdCBwdF9yZWdzICopOworaW50IHJlZ2lzdGVyX2pwcm9iZShzdHJ1Y3QganByb2JlICpwKTsKK3ZvaWQgdW5yZWdpc3Rlcl9qcHJvYmUoc3RydWN0IGpwcm9iZSAqcCk7Cit2b2lkIGpwcm9iZV9yZXR1cm4odm9pZCk7CisKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBrcHJvYmVfcnVubmluZyh2b2lkKQoreworCXJldHVybiAwOworfQorc3RhdGljIGlubGluZSBpbnQgcmVnaXN0ZXJfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnApCit7CisJcmV0dXJuIC1FTk9TWVM7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgdW5yZWdpc3Rlcl9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcCkKK3sKK30KK3N0YXRpYyBpbmxpbmUgaW50IHJlZ2lzdGVyX2pwcm9iZShzdHJ1Y3QganByb2JlICpwKQoreworCXJldHVybiAtRU5PU1lTOworfQorc3RhdGljIGlubGluZSB2b2lkIHVucmVnaXN0ZXJfanByb2JlKHN0cnVjdCBqcHJvYmUgKnApCit7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQganByb2JlX3JldHVybih2b2lkKQoreworfQorI2VuZGlmCisjZW5kaWYJCQkJLyogX0xJTlVYX0tQUk9CRVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rcmVmLmggYi9pbmNsdWRlL2xpbnV4L2tyZWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmVlMzUzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9rcmVmLmgKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIGtyZWYuYyAtIGxpYnJhcnkgcm91dGluZXMgZm9yIGhhbmRsaW5nIGdlbmVyaWMgcmVmZXJlbmNlIGNvdW50ZWQgb2JqZWN0cworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdAa3JvYWguY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA0IElCTSBDb3JwLgorICoKKyAqIGJhc2VkIG9uIGtvYmplY3QuaCB3aGljaCB3YXM6CisgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAwMyBQYXRyaWNrIE1vY2hlbCA8bW9jaGVsQG9zZGwub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMDMgT3BlbiBTb3VyY2UgRGV2ZWxvcG1lbnQgTGFicworICoKKyAqIFRoaXMgZmlsZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgR1BMdjIuCisgKgorICovCisKKyNpZm5kZWYgX0tSRUZfSF8KKyNkZWZpbmUgX0tSRUZfSF8KKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorCitzdHJ1Y3Qga3JlZiB7CisJYXRvbWljX3QgcmVmY291bnQ7Cit9OworCit2b2lkIGtyZWZfaW5pdChzdHJ1Y3Qga3JlZiAqa3JlZik7Cit2b2lkIGtyZWZfZ2V0KHN0cnVjdCBrcmVmICprcmVmKTsKK2ludCBrcmVmX3B1dChzdHJ1Y3Qga3JlZiAqa3JlZiwgdm9pZCAoKnJlbGVhc2UpIChzdHJ1Y3Qga3JlZiAqa3JlZikpOworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9LUkVGX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t0aHJlYWQuaCBiL2luY2x1ZGUvbGludXgva3RocmVhZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmYTc4NjQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2t0aHJlYWQuaApAQCAtMCwwICsxLDgxIEBACisjaWZuZGVmIF9MSU5VWF9LVEhSRUFEX0gKKyNkZWZpbmUgX0xJTlVYX0tUSFJFQURfSAorLyogU2ltcGxlIGludGVyZmFjZSBmb3IgY3JlYXRpbmcgYW5kIHN0b3BwaW5nIGtlcm5lbCB0aHJlYWRzIHdpdGhvdXQgbWVzcy4gKi8KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorCisvKioKKyAqIGt0aHJlYWRfY3JlYXRlOiBjcmVhdGUgYSBrdGhyZWFkLgorICogQHRocmVhZGZuOiB0aGUgZnVuY3Rpb24gdG8gcnVuIHVudGlsIHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpLgorICogQGRhdGE6IGRhdGEgcHRyIGZvciBAdGhyZWFkZm4uCisgKiBAbmFtZWZtdDogcHJpbnRmLXN0eWxlIG5hbWUgZm9yIHRoZSB0aHJlYWQuCisgKgorICogRGVzY3JpcHRpb246IFRoaXMgaGVscGVyIGZ1bmN0aW9uIGNyZWF0ZXMgYW5kIG5hbWVzIGEga2VybmVsCisgKiB0aHJlYWQuICBUaGUgdGhyZWFkIHdpbGwgYmUgc3RvcHBlZDogdXNlIHdha2VfdXBfcHJvY2VzcygpIHRvIHN0YXJ0CisgKiBpdC4gIFNlZSBhbHNvIGt0aHJlYWRfcnVuKCksIGt0aHJlYWRfY3JlYXRlX29uX2NwdSgpLgorICoKKyAqIFdoZW4gd29rZW4sIHRoZSB0aHJlYWQgd2lsbCBydW4gQHRocmVhZGZuKCkgd2l0aCBAZGF0YSBhcyBpdHMKKyAqIGFyZ3VtZW50LiBAdGhyZWFkZm4gY2FuIGVpdGhlciBjYWxsIGRvX2V4aXQoKSBkaXJlY3RseSBpZiBpdCBpcyBhCisgKiBzdGFuZGFsb25lIHRocmVhZCBmb3Igd2hpY2ggbm9vbmUgd2lsbCBjYWxsIGt0aHJlYWRfc3RvcCgpLCBvcgorICogcmV0dXJuIHdoZW4gJ2t0aHJlYWRfc2hvdWxkX3N0b3AoKScgaXMgdHJ1ZSAod2hpY2ggbWVhbnMKKyAqIGt0aHJlYWRfc3RvcCgpIGhhcyBiZWVuIGNhbGxlZCkuICBUaGUgcmV0dXJuIHZhbHVlIHNob3VsZCBiZSB6ZXJvCisgKiBvciBhIG5lZ2F0aXZlIGVycm9yIG51bWJlcjogaXQgd2lsbCBiZSBwYXNzZWQgdG8ga3RocmVhZF9zdG9wKCkuCisgKgorICogUmV0dXJucyBhIHRhc2tfc3RydWN0IG9yIEVSUl9QVFIoLUVOT01FTSkuCisgKi8KK3N0cnVjdCB0YXNrX3N0cnVjdCAqa3RocmVhZF9jcmVhdGUoaW50ICgqdGhyZWFkZm4pKHZvaWQgKmRhdGEpLAorCQkJCSAgIHZvaWQgKmRhdGEsCisJCQkJICAgY29uc3QgY2hhciBuYW1lZm10W10sIC4uLik7CisKKy8qKgorICoga3RocmVhZF9ydW46IGNyZWF0ZSBhbmQgd2FrZSBhIHRocmVhZC4KKyAqIEB0aHJlYWRmbjogdGhlIGZ1bmN0aW9uIHRvIHJ1biB1bnRpbCBzaWduYWxfcGVuZGluZyhjdXJyZW50KS4KKyAqIEBkYXRhOiBkYXRhIHB0ciBmb3IgQHRocmVhZGZuLgorICogQG5hbWVmbXQ6IHByaW50Zi1zdHlsZSBuYW1lIGZvciB0aGUgdGhyZWFkLgorICoKKyAqIERlc2NyaXB0aW9uOiBDb252ZW5pZW50IHdyYXBwZXIgZm9yIGt0aHJlYWRfY3JlYXRlKCkgZm9sbG93ZWQgYnkKKyAqIHdha2VfdXBfcHJvY2VzcygpLiAgUmV0dXJucyB0aGUga3RocmVhZCwgb3IgRVJSX1BUUigtRU5PTUVNKS4gKi8KKyNkZWZpbmUga3RocmVhZF9ydW4odGhyZWFkZm4sIGRhdGEsIG5hbWVmbXQsIC4uLikJCQkgICBcCisoewkJCQkJCQkJCSAgIFwKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKl9fawkJCQkJCSAgIFwKKwkJPSBrdGhyZWFkX2NyZWF0ZSh0aHJlYWRmbiwgZGF0YSwgbmFtZWZtdCwgIyMgX19WQV9BUkdTX18pOyBcCisJaWYgKCFJU19FUlIoX19rKSkJCQkJCQkgICBcCisJCXdha2VfdXBfcHJvY2VzcyhfX2spOwkJCQkJICAgXAorCV9fazsJCQkJCQkJCSAgIFwKK30pCisKKy8qKgorICoga3RocmVhZF9iaW5kOiBiaW5kIGEganVzdC1jcmVhdGVkIGt0aHJlYWQgdG8gYSBjcHUuCisgKiBAazogdGhyZWFkIGNyZWF0ZWQgYnkga3RocmVhZF9jcmVhdGUoKS4KKyAqIEBjcHU6IGNwdSAobWlnaHQgbm90IGJlIG9ubGluZSwgbXVzdCBiZSBwb3NzaWJsZSkgZm9yIEBrIHRvIHJ1biBvbi4KKyAqCisgKiBEZXNjcmlwdGlvbjogVGhpcyBmdW5jdGlvbiBpcyBlcXVpdmFsZW50IHRvIHNldF9jcHVzX2FsbG93ZWQoKSwKKyAqIGV4Y2VwdCB0aGF0IEBjcHUgZG9lc24ndCBuZWVkIHRvIGJlIG9ubGluZSwgYW5kIHRoZSB0aHJlYWQgbXVzdCBiZQorICogc3RvcHBlZCAoaWUuIGp1c3QgcmV0dXJuZWQgZnJvbSBrdGhyZWFkX2NyZWF0ZSgpLgorICovCit2b2lkIGt0aHJlYWRfYmluZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmssIHVuc2lnbmVkIGludCBjcHUpOworCisvKioKKyAqIGt0aHJlYWRfc3RvcDogc3RvcCBhIHRocmVhZCBjcmVhdGVkIGJ5IGt0aHJlYWRfY3JlYXRlKCkuCisgKiBAazogdGhyZWFkIGNyZWF0ZWQgYnkga3RocmVhZF9jcmVhdGUoKS4KKyAqCisgKiBTZXRzIGt0aHJlYWRfc2hvdWxkX3N0b3AoKSBmb3IgQGsgdG8gcmV0dXJuIHRydWUsIHdha2VzIGl0LCBhbmQKKyAqIHdhaXRzIGZvciBpdCB0byBleGl0LiAgWW91ciB0aHJlYWRmbigpIG11c3Qgbm90IGNhbGwgZG9fZXhpdCgpCisgKiBpdHNlbGYgaWYgeW91IHVzZSB0aGlzIGZ1bmN0aW9uISAgVGhpcyBjYW4gYWxzbyBiZSBjYWxsZWQgYWZ0ZXIKKyAqIGt0aHJlYWRfY3JlYXRlKCkgaW5zdGVhZCBvZiBjYWxsaW5nIHdha2VfdXBfcHJvY2VzcygpOiB0aGUgdGhyZWFkCisgKiB3aWxsIGV4aXQgd2l0aG91dCBjYWxsaW5nIHRocmVhZGZuKCkuCisgKgorICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIHRocmVhZGZuKCksIG9yIC1FSU5UUiBpZiB3YWtlX3VwX3Byb2Nlc3MoKQorICogd2FzIG5ldmVyIGNhbGxlZC4gKi8KK2ludCBrdGhyZWFkX3N0b3Aoc3RydWN0IHRhc2tfc3RydWN0ICprKTsKKworLyoqCisgKiBrdGhyZWFkX3Nob3VsZF9zdG9wOiBzaG91bGQgdGhpcyBrdGhyZWFkIHJldHVybiBub3c/CisgKgorICogV2hlbiBzb21lb25lIGNhbGxzIGt0aHJlYWRfc3RvcCBvbiB5b3VyIGt0aHJlYWQsIGl0IHdpbGwgYmUgd29rZW4KKyAqIGFuZCB0aGlzIHdpbGwgcmV0dXJuIHRydWUuICBZb3Ugc2hvdWxkIHRoZW4gcmV0dXJuLCBhbmQgeW91ciByZXR1cm4KKyAqIHZhbHVlIHdpbGwgYmUgcGFzc2VkIHRocm91Z2ggdG8ga3RocmVhZF9zdG9wKCkuCisgKi8KK2ludCBrdGhyZWFkX3Nob3VsZF9zdG9wKHZvaWQpOworCisjZW5kaWYgLyogX0xJTlVYX0tUSFJFQURfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sYXBiLmggYi9pbmNsdWRlL2xpbnV4L2xhcGIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTcwOWUxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9sYXBiLmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIFRoZXNlIGFyZSB0aGUgcHVibGljIGVsZW1lbnRzIG9mIHRoZSBMaW51eCBMQVBCIG1vZHVsZS4KKyAqLworCisjaWZuZGVmCUxBUEJfS0VSTkVMX0gKKyNkZWZpbmUJTEFQQl9LRVJORUxfSAorCisjZGVmaW5lCUxBUEJfT0sJCQkwCisjZGVmaW5lCUxBUEJfQkFEVE9LRU4JCTEKKyNkZWZpbmUJTEFQQl9JTlZBTFVFCQkyCisjZGVmaW5lCUxBUEJfQ09OTkVDVEVECQkzCisjZGVmaW5lCUxBUEJfTk9UQ09OTkVDVEVECTQKKyNkZWZpbmUJTEFQQl9SRUZVU0VECQk1CisjZGVmaW5lCUxBUEJfVElNRURPVVQJCTYKKyNkZWZpbmUJTEFQQl9OT01FTQkJNworCisjZGVmaW5lCUxBUEJfU1RBTkRBUkQJCTB4MDAKKyNkZWZpbmUJTEFQQl9FWFRFTkRFRAkJMHgwMQorCisjZGVmaW5lCUxBUEJfU0xQCQkweDAwCisjZGVmaW5lCUxBUEJfTUxQCQkweDAyCisKKyNkZWZpbmUJTEFQQl9EVEUJCTB4MDAKKyNkZWZpbmUJTEFQQl9EQ0UJCTB4MDQKKworc3RydWN0IGxhcGJfcmVnaXN0ZXJfc3RydWN0IHsKKwl2b2lkICgqY29ubmVjdF9jb25maXJtYXRpb24pKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCByZWFzb24pOworCXZvaWQgKCpjb25uZWN0X2luZGljYXRpb24pKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCByZWFzb24pOworCXZvaWQgKCpkaXNjb25uZWN0X2NvbmZpcm1hdGlvbikoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHJlYXNvbik7CisJdm9pZCAoKmRpc2Nvbm5lY3RfaW5kaWNhdGlvbikoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHJlYXNvbik7CisJaW50ICAoKmRhdGFfaW5kaWNhdGlvbikoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisJdm9pZCAoKmRhdGFfdHJhbnNtaXQpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpOworfTsKKworc3RydWN0IGxhcGJfcGFybXNfc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQgdDE7CisJdW5zaWduZWQgaW50IHQxdGltZXI7CisJdW5zaWduZWQgaW50IHQyOworCXVuc2lnbmVkIGludCB0MnRpbWVyOworCXVuc2lnbmVkIGludCBuMjsKKwl1bnNpZ25lZCBpbnQgbjJjb3VudDsKKwl1bnNpZ25lZCBpbnQgd2luZG93OworCXVuc2lnbmVkIGludCBzdGF0ZTsKKwl1bnNpZ25lZCBpbnQgbW9kZTsKK307CisKK2V4dGVybiBpbnQgbGFwYl9yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbGFwYl9yZWdpc3Rlcl9zdHJ1Y3QgKmNhbGxiYWNrcyk7CitleHRlcm4gaW50IGxhcGJfdW5yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK2V4dGVybiBpbnQgbGFwYl9nZXRwYXJtcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbGFwYl9wYXJtc19zdHJ1Y3QgKnBhcm1zKTsKK2V4dGVybiBpbnQgbGFwYl9zZXRwYXJtcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbGFwYl9wYXJtc19zdHJ1Y3QgKnBhcm1zKTsKK2V4dGVybiBpbnQgbGFwYl9jb25uZWN0X3JlcXVlc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitleHRlcm4gaW50IGxhcGJfZGlzY29ubmVjdF9yZXF1ZXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworZXh0ZXJuIGludCBsYXBiX2RhdGFfcmVxdWVzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQgbGFwYl9kYXRhX3JlY2VpdmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGNkLmggYi9pbmNsdWRlL2xpbnV4L2xjZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3MzliMmUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2xjZC5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBMQ0QgTG93bGV2ZWwgQ29udHJvbCBBYnN0cmFjdGlvbgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMywyMDA0IEhld2xldHQtUGFja2FyZCBDb21wYW55CisgKgorICovCisKKyNpZm5kZWYgX0xJTlVYX0xDRF9ICisjZGVmaW5lIF9MSU5VWF9MQ0RfSAorCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KKworc3RydWN0IGxjZF9kZXZpY2U7CitzdHJ1Y3QgZmJfaW5mbzsKKworLyogVGhpcyBzdHJ1Y3R1cmUgZGVmaW5lcyBhbGwgdGhlIHByb3BlcnRpZXMgb2YgYSBMQ0QgZmxhdCBwYW5lbC4gKi8KK3N0cnVjdCBsY2RfcHJvcGVydGllcyB7CisJLyogT3duZXIgbW9kdWxlICovCisJc3RydWN0IG1vZHVsZSAqb3duZXI7CisJLyogR2V0IHRoZSBMQ0QgcGFuZWwgcG93ZXIgc3RhdHVzICgwOiBmdWxsIG9uLCAxLi4zOiBjb250cm9sbGVyCisJICAgcG93ZXIgb24sIGZsYXQgcGFuZWwgcG93ZXIgb2ZmLCA0OiBmdWxsIG9mZiksIHNlZSBGQl9CTEFOS19YWFggKi8KKwlpbnQgKCpnZXRfcG93ZXIpKHN0cnVjdCBsY2RfZGV2aWNlICopOworCS8qIEVuYWJsZSBvciBkaXNhYmxlIHBvd2VyIHRvIHRoZSBMQ0QgKDA6IG9uOyA0OiBvZmYsIHNlZSBGQl9CTEFOS19YWFgpICovCisJaW50ICgqc2V0X3Bvd2VyKShzdHJ1Y3QgbGNkX2RldmljZSAqLCBpbnQgcG93ZXIpOworCS8qIFRoZSBtYXhpbXVtIHZhbHVlIGZvciBjb250cmFzdCAocmVhZC1vbmx5KSAqLworCWludCBtYXhfY29udHJhc3Q7CisJLyogR2V0IHRoZSBjdXJyZW50IGNvbnRyYXN0IHNldHRpbmcgKDAtbWF4X2NvbnRyYXN0KSAqLworCWludCAoKmdldF9jb250cmFzdCkoc3RydWN0IGxjZF9kZXZpY2UgKik7CisJLyogU2V0IExDRCBwYW5lbCBjb250cmFzdCAqLworICAgICAgICBpbnQgKCpzZXRfY29udHJhc3QpKHN0cnVjdCBsY2RfZGV2aWNlICosIGludCBjb250cmFzdCk7CisJLyogQ2hlY2sgaWYgZ2l2ZW4gZnJhbWVidWZmZXIgZGV2aWNlIGlzIHRoZSBvbmUgTENEIGlzIGJvdW5kIHRvOworCSAgIHJldHVybiAwIGlmIG5vdCwgIT0wIGlmIGl0IGlzLiBJZiBOVUxMLCBsY2QgYWx3YXlzIG1hdGNoZXMgdGhlIGZiLiAqLworCWludCAoKmNoZWNrX2ZiKShzdHJ1Y3QgZmJfaW5mbyAqKTsKK307CisKK3N0cnVjdCBsY2RfZGV2aWNlIHsKKwkvKiBUaGlzIHByb3RlY3RzIHRoZSAncHJvcHMnIGZpZWxkLiBJZiAncHJvcHMnIGlzIE5VTEwsIHRoZSBkcml2ZXIgdGhhdAorCSAgIHJlZ2lzdGVyZWQgdGhpcyBkZXZpY2UgaGFzIGJlZW4gdW5sb2FkZWQsIGFuZCBpZiBjbGFzc19nZXRfZGV2ZGF0YSgpCisJICAgcG9pbnRzIHRvIHNvbWV0aGluZyBpbiB0aGUgYm9keSBvZiB0aGF0IGRyaXZlciwgaXQgaXMgYWxzbyBpbnZhbGlkLiAqLworCXN0cnVjdCBzZW1hcGhvcmUgc2VtOworCS8qIElmIHRoaXMgaXMgTlVMTCwgdGhlIGJhY2tpbmcgbW9kdWxlIGlzIHVubG9hZGVkICovCisJc3RydWN0IGxjZF9wcm9wZXJ0aWVzICpwcm9wczsKKwkvKiBUaGUgZnJhbWVidWZmZXIgbm90aWZpZXIgYmxvY2sgKi8KKwlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgZmJfbm90aWY7CisJLyogVGhlIGNsYXNzIGRldmljZSBzdHJ1Y3R1cmUgKi8KKwlzdHJ1Y3QgY2xhc3NfZGV2aWNlIGNsYXNzX2RldjsKK307CisKK2V4dGVybiBzdHJ1Y3QgbGNkX2RldmljZSAqbGNkX2RldmljZV9yZWdpc3Rlcihjb25zdCBjaGFyICpuYW1lLAorCXZvaWQgKmRldmRhdGEsIHN0cnVjdCBsY2RfcHJvcGVydGllcyAqbHApOworZXh0ZXJuIHZvaWQgbGNkX2RldmljZV91bnJlZ2lzdGVyKHN0cnVjdCBsY2RfZGV2aWNlICpsZCk7CisKKyNkZWZpbmUgdG9fbGNkX2RldmljZShvYmopIGNvbnRhaW5lcl9vZihvYmosIHN0cnVjdCBsY2RfZGV2aWNlLCBjbGFzc19kZXYpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9saWJhdGEuaCBiL2luY2x1ZGUvbGludXgvbGliYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA1MTYwYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbGliYXRhLmgKQEAgLTAsMCArMSw1OTkgQEAKKy8qCisgICBDb3B5cmlnaHQgMjAwMy0yMDA0IFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICBDb3B5cmlnaHQgMjAwMy0yMDA0IEplZmYgR2FyemlrCisKKyAgIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE9wZW4KKyAgIFNvZnR3YXJlIExpY2Vuc2UgdmVyc2lvbiAxLjEgdGhhdCBjYW4gYmUgZm91bmQgYXQKKyAgIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvb3NsLTEuMS50eHQgYW5kIGlzIGluY2x1ZGVkIGhlcmVpbgorICAgYnkgcmVmZXJlbmNlLgorCisgICBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcworICAgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiAodGhlICJHUEwiKSBhcyBkaXN0cmlidXRlZAorICAgaW4gdGhlIGtlcm5lbCBzb3VyY2UgQ09QWUlORyBmaWxlLCBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mCisgICB0aGUgR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhlIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cKKyAgIHRoZSB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAgIEdQTCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcgorICAgdGhlIE9TTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbiBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQKKyAgIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UgYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTC4KKyAgIElmIHlvdSBkbyBub3QgZGVsZXRlIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIKKyAgIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIGVpdGhlciB0aGUgT1NMIG9yIHRoZSBHUEwuCisKKyAqLworCisjaWZuZGVmIF9fTElOVVhfTElCQVRBX0hfXworI2RlZmluZSBfX0xJTlVYX0xJQkFUQV9IX18KKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvYXRhLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisKKy8qCisgKiBjb21waWxlLXRpbWUgb3B0aW9ucworICovCisjdW5kZWYgQVRBX0RFQlVHCQkvKiBkZWJ1Z2dpbmcgb3V0cHV0ICovCisjdW5kZWYgQVRBX1ZFUkJPU0VfREVCVUcJLyogeWV0IG1vcmUgZGVidWdnaW5nIG91dHB1dCAqLworI3VuZGVmIEFUQV9JUlFfVFJBUAkJLyogZGVmaW5lIHRvIGFjayBzY3JlYW1pbmcgaXJxcyAqLworI3VuZGVmIEFUQV9OREVCVUcJCS8qIGRlZmluZSB0byBkaXNhYmxlIHF1aWNrIHJ1bnRpbWUgY2hlY2tzICovCisjdW5kZWYgQVRBX0VOQUJMRV9BVEFQSQkJLyogZGVmaW5lIHRvIGVuYWJsZSBBVEFQSSBzdXBwb3J0ICovCisjdW5kZWYgQVRBX0VOQUJMRV9QQVRBCQkvKiBkZWZpbmUgdG8gZW5hYmxlIFBBVEEgc3VwcG9ydCBpbiBzb21lCisJCQkJICogbG93LWxldmVsIGRyaXZlcnMgKi8KKyN1bmRlZiBBVEFQSV9FTkFCTEVfRE1BRElSCS8qIGVuYWJsZXMgQVRBUEkgRE1BRElSIGJyaWRnZSBzdXBwb3J0ICovCisKKworLyogbm90ZTogcHJpbnRzIGZ1bmN0aW9uIG5hbWUgZm9yIHlvdSAqLworI2lmZGVmIEFUQV9ERUJVRworI2RlZmluZSBEUFJJTlRLKGZtdCwgYXJncy4uLikgcHJpbnRrKEtFUk5fRVJSICIlczogIiBmbXQsIF9fRlVOQ1RJT05fXywgIyMgYXJncykKKyNpZmRlZiBBVEFfVkVSQk9TRV9ERUJVRworI2RlZmluZSBWUFJJTlRLKGZtdCwgYXJncy4uLikgcHJpbnRrKEtFUk5fRVJSICIlczogIiBmbXQsIF9fRlVOQ1RJT05fXywgIyMgYXJncykKKyNlbHNlCisjZGVmaW5lIFZQUklOVEsoZm10LCBhcmdzLi4uKQorI2VuZGlmCS8qIEFUQV9WRVJCT1NFX0RFQlVHICovCisjZWxzZQorI2RlZmluZSBEUFJJTlRLKGZtdCwgYXJncy4uLikKKyNkZWZpbmUgVlBSSU5USyhmbXQsIGFyZ3MuLi4pCisjZW5kaWYJLyogQVRBX0RFQlVHICovCisKKyNpZmRlZiBBVEFfTkRFQlVHCisjZGVmaW5lIGFzc2VydChleHByKQorI2Vsc2UKKyNkZWZpbmUgYXNzZXJ0KGV4cHIpIFwKKyAgICAgICAgaWYodW5saWtlbHkoIShleHByKSkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJBc3NlcnRpb24gZmFpbGVkISAlcywlcywlcyxsaW5lPSVkXG4iLCBcCisgICAgICAgICNleHByLF9fRklMRV9fLF9fRlVOQ1RJT05fXyxfX0xJTkVfXyk7ICAgICAgICAgIFwKKyAgICAgICAgfQorI2VuZGlmCisKKy8qIGRlZmluZXMgb25seSBmb3IgdGhlIGNvbnN0YW50cyB3aGljaCBkb24ndCB3b3JrIHdlbGwgYXMgZW51bXMgKi8KKyNkZWZpbmUgQVRBX1RBR19QT0lTT04JCTB4ZmFmYmZjZmRVCisKKy8qIG1vdmUgdG8gUENJIGxheWVyPyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgZGV2aWNlICpwY2lfZGV2X3RvX2RldihzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlyZXR1cm4gJnBkZXYtPmRldjsKK30KKworZW51bSB7CisJLyogdmFyaW91cyBnbG9iYWwgY29uc3RhbnRzICovCisJTElCQVRBX01BWF9QUkQJCT0gQVRBX01BWF9QUkQgLyAyLAorCUFUQV9NQVhfUE9SVFMJCT0gOCwKKwlBVEFfREVGX1FVRVVFCQk9IDEsCisJQVRBX01BWF9RVUVVRQkJPSAxLAorCUFUQV9NQVhfU0VDVE9SUwkJPSAyMDAsCS8qIEZJWE1FICovCisJQVRBX01BWF9CVVMJCT0gMiwKKwlBVEFfREVGX0JVU1lfV0FJVAk9IDEwMDAwLAorCUFUQV9TSE9SVF9QQVVTRQkJPSAoSFogPj4gNikgKyAxLAorCisJQVRBX1NIVF9FTVVMQVRFRAk9IDEsCisJQVRBX1NIVF9DTURfUEVSX0xVTgk9IDEsCisJQVRBX1NIVF9USElTX0lECQk9IC0xLAorCUFUQV9TSFRfVVNFX0NMVVNURVJJTkcJPSAwLAorCisJLyogc3RydWN0IGF0YV9kZXZpY2Ugc3R1ZmYgKi8KKwlBVEFfREZMQUdfTEJBNDgJCT0gKDEgPDwgMCksIC8qIGRldmljZSBzdXBwb3J0cyBMQkE0OCAqLworCUFUQV9ERkxBR19QSU8JCT0gKDEgPDwgMSksIC8qIGRldmljZSBjdXJyZW50bHkgaW4gUElPIG1vZGUgKi8KKwlBVEFfREZMQUdfTE9DS19TRUNUT1JTCT0gKDEgPDwgMiksIC8qIGRvbid0IGFkanVzdCBtYXhfc2VjdG9ycyAqLworCisJQVRBX0RFVl9VTktOT1dOCQk9IDAsCS8qIHVua25vd24gZGV2aWNlICovCisJQVRBX0RFVl9BVEEJCT0gMSwJLyogQVRBIGRldmljZSAqLworCUFUQV9ERVZfQVRBX1VOU1VQCT0gMiwJLyogQVRBIGRldmljZSAodW5zdXBwb3J0ZWQpICovCisJQVRBX0RFVl9BVEFQSQkJPSAzLAkvKiBBVEFQSSBkZXZpY2UgKi8KKwlBVEFfREVWX0FUQVBJX1VOU1VQCT0gNCwJLyogQVRBUEkgZGV2aWNlICh1bnN1cHBvcnRlZCkgKi8KKwlBVEFfREVWX05PTkUJCT0gNSwJLyogbm8gZGV2aWNlICovCisKKwkvKiBzdHJ1Y3QgYXRhX3BvcnQgZmxhZ3MgKi8KKwlBVEFfRkxBR19TTEFWRV9QT1NTCT0gKDEgPDwgMSksIC8qIGhvc3Qgc3VwcG9ydHMgc2xhdmUgZGV2ICovCisJCQkJCSAgICAvKiAoZG9lc24ndCBpbXBseSBwcmVzZW5jZSkgKi8KKwlBVEFfRkxBR19QT1JUX0RJU0FCTEVECT0gKDEgPDwgMiksIC8qIHBvcnQgaXMgZGlzYWJsZWQsIGlnbm9yZSBpdCAqLworCUFUQV9GTEFHX1NBVEEJCT0gKDEgPDwgMyksCisJQVRBX0ZMQUdfTk9fTEVHQUNZCT0gKDEgPDwgNCksIC8qIG5vIGxlZ2FjeSBtb2RlIGNoZWNrICovCisJQVRBX0ZMQUdfU1JTVAkJPSAoMSA8PCA1KSwgLyogdXNlIEFUQSBTUlNULCBub3QgRS5ELkQuICovCisJQVRBX0ZMQUdfTU1JTwkJPSAoMSA8PCA2KSwgLyogdXNlIE1NSU8sIG5vdCBQSU8gKi8KKwlBVEFfRkxBR19TQVRBX1JFU0VUCT0gKDEgPDwgNyksIC8qIHVzZSBDT01SRVNFVCAqLworCUFUQV9GTEFHX1BJT19ETUEJPSAoMSA8PCA4KSwgLyogUElPIGNtZHMgdmlhIERNQSAqLworCisJQVRBX1FDRkxBR19BQ1RJVkUJPSAoMSA8PCAxKSwgLyogY21kIG5vdCB5ZXQgYWNrJ2QgdG8gc2NzaSBseWVyICovCisJQVRBX1FDRkxBR19TRwkJPSAoMSA8PCAzKSwgLyogaGF2ZSBzL2cgdGFibGU/ICovCisJQVRBX1FDRkxBR19TSU5HTEUJPSAoMSA8PCA0KSwgLyogbm8gcy9nLCBqdXN0IGEgc2luZ2xlIGJ1ZmZlciAqLworCUFUQV9RQ0ZMQUdfRE1BTUFQCT0gQVRBX1FDRkxBR19TRyB8IEFUQV9RQ0ZMQUdfU0lOR0xFLAorCisJLyogdmFyaW91cyBsZW5ndGhzIG9mIHRpbWUgKi8KKwlBVEFfVE1PVVRfRURECQk9IDUgKiBIWiwJLyogaHVlcmlzdGljICovCisJQVRBX1RNT1VUX1BJTwkJPSAzMCAqIEhaLAorCUFUQV9UTU9VVF9CT09UCQk9IDMwICogSFosCS8qIGh1ZXJpc3RpYyAqLworCUFUQV9UTU9VVF9CT09UX1FVSUNLCT0gNyAqIEhaLAkvKiBodWVyaXN0aWMgKi8KKwlBVEFfVE1PVVRfQ0RCCQk9IDMwICogSFosCisJQVRBX1RNT1VUX0NEQl9RVUlDSwk9IDUgKiBIWiwKKworCS8qIEFUQSBidXMgc3RhdGVzICovCisJQlVTX1VOS05PV04JCT0gMCwKKwlCVVNfRE1BCQkJPSAxLAorCUJVU19JRExFCQk9IDIsCisJQlVTX05PSU5UUgkJPSAzLAorCUJVU19OT0RBVEEJCT0gNCwKKwlCVVNfVElNRVIJCT0gNSwKKwlCVVNfUElPCQkJPSA2LAorCUJVU19FREQJCQk9IDcsCisJQlVTX0lERU5USUZZCQk9IDgsCisJQlVTX1BBQ0tFVAkJPSA5LAorCisJLyogU0FUQSBwb3J0IHN0YXRlcyAqLworCVBPUlRfVU5LTk9XTgkJPSAwLAorCVBPUlRfRU5BQkxFRAkJPSAxLAorCVBPUlRfRElTQUJMRUQJCT0gMiwKKworCS8qIGVuY29kaW5nIHZhcmlvdXMgc21hbGxlciBiaXRtYXBzIGludG8gYSBzaW5nbGUKKwkgKiB1bnNpZ25lZCBsb25nIGJpdG1hcAorCSAqLworCUFUQV9TSElGVF9VRE1BCQk9IDAsCisJQVRBX1NISUZUX01XRE1BCQk9IDgsCisJQVRBX1NISUZUX1BJTwkJPSAxMSwKK307CisKK2VudW0gcGlvX3Rhc2tfc3RhdGVzIHsKKwlQSU9fU1RfVU5LTk9XTiwKKwlQSU9fU1RfSURMRSwKKwlQSU9fU1RfUE9MTCwKKwlQSU9fU1RfVE1PVVQsCisJUElPX1NULAorCVBJT19TVF9MQVNULAorCVBJT19TVF9MQVNUX1BPTEwsCisJUElPX1NUX0VSUiwKK307CisKKy8qIGZvcndhcmQgZGVjbGFyYXRpb25zICovCitzdHJ1Y3Qgc2NzaV9kZXZpY2U7CitzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9uczsKK3N0cnVjdCBhdGFfcG9ydDsKK3N0cnVjdCBhdGFfcXVldWVkX2NtZDsKKworLyogdHlwZWRlZnMgKi8KK3R5cGVkZWYgaW50ICgqYXRhX3FjX2NiX3QpIChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjLCB1OCBkcnZfc3RhdCk7CisKK3N0cnVjdCBhdGFfaW9wb3J0cyB7CisJdW5zaWduZWQgbG9uZwkJY21kX2FkZHI7CisJdW5zaWduZWQgbG9uZwkJZGF0YV9hZGRyOworCXVuc2lnbmVkIGxvbmcJCWVycm9yX2FkZHI7CisJdW5zaWduZWQgbG9uZwkJZmVhdHVyZV9hZGRyOworCXVuc2lnbmVkIGxvbmcJCW5zZWN0X2FkZHI7CisJdW5zaWduZWQgbG9uZwkJbGJhbF9hZGRyOworCXVuc2lnbmVkIGxvbmcJCWxiYW1fYWRkcjsKKwl1bnNpZ25lZCBsb25nCQlsYmFoX2FkZHI7CisJdW5zaWduZWQgbG9uZwkJZGV2aWNlX2FkZHI7CisJdW5zaWduZWQgbG9uZwkJc3RhdHVzX2FkZHI7CisJdW5zaWduZWQgbG9uZwkJY29tbWFuZF9hZGRyOworCXVuc2lnbmVkIGxvbmcJCWFsdHN0YXR1c19hZGRyOworCXVuc2lnbmVkIGxvbmcJCWN0bF9hZGRyOworCXVuc2lnbmVkIGxvbmcJCWJtZG1hX2FkZHI7CisJdW5zaWduZWQgbG9uZwkJc2NyX2FkZHI7Cit9OworCitzdHJ1Y3QgYXRhX3Byb2JlX2VudCB7CisJc3RydWN0IGxpc3RfaGVhZAlub2RlOworCXN0cnVjdCBkZXZpY2UgCQkqZGV2OworCXN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zCSpwb3J0X29wczsKKwlTY3NpX0hvc3RfVGVtcGxhdGUJKnNodDsKKwlzdHJ1Y3QgYXRhX2lvcG9ydHMJcG9ydFtBVEFfTUFYX1BPUlRTXTsKKwl1bnNpZ25lZCBpbnQJCW5fcG9ydHM7CisJdW5zaWduZWQgaW50CQloYXJkX3BvcnRfbm87CisJdW5zaWduZWQgaW50CQlwaW9fbWFzazsKKwl1bnNpZ25lZCBpbnQJCW13ZG1hX21hc2s7CisJdW5zaWduZWQgaW50CQl1ZG1hX21hc2s7CisJdW5zaWduZWQgaW50CQlsZWdhY3lfbW9kZTsKKwl1bnNpZ25lZCBsb25nCQlpcnE7CisJdW5zaWduZWQgaW50CQlpcnFfZmxhZ3M7CisJdW5zaWduZWQgbG9uZwkJaG9zdF9mbGFnczsKKwl2b2lkIF9faW9tZW0JCSptbWlvX2Jhc2U7CisJdm9pZAkJCSpwcml2YXRlX2RhdGE7Cit9OworCitzdHJ1Y3QgYXRhX2hvc3Rfc2V0IHsKKwlzcGlubG9ja190CQlsb2NrOworCXN0cnVjdCBkZXZpY2UgCQkqZGV2OworCXVuc2lnbmVkIGxvbmcJCWlycTsKKwl2b2lkIF9faW9tZW0JCSptbWlvX2Jhc2U7CisJdW5zaWduZWQgaW50CQluX3BvcnRzOworCXZvaWQJCQkqcHJpdmF0ZV9kYXRhOworCXN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zICpvcHM7CisJc3RydWN0IGF0YV9wb3J0ICoJcG9ydHNbMF07Cit9OworCitzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgeworCXN0cnVjdCBhdGFfcG9ydAkJKmFwOworCXN0cnVjdCBhdGFfZGV2aWNlCSpkZXY7CisKKwlzdHJ1Y3Qgc2NzaV9jbW5kCSpzY3NpY21kOworCXZvaWQJCQkoKnNjc2lkb25lKShzdHJ1Y3Qgc2NzaV9jbW5kICopOworCisJc3RydWN0IGF0YV90YXNrZmlsZQl0ZjsKKwl1OAkJCWNkYltBVEFQSV9DREJfTEVOXTsKKworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwkJLyogQVRBX1FDRkxBR194eHggKi8KKwl1bnNpZ25lZCBpbnQJCXRhZzsKKwl1bnNpZ25lZCBpbnQJCW5fZWxlbTsKKworCWludAkJCWRtYV9kaXI7CisKKwl1bnNpZ25lZCBpbnQJCW5zZWN0OworCXVuc2lnbmVkIGludAkJY3Vyc2VjdDsKKworCXVuc2lnbmVkIGludAkJbmJ5dGVzOworCXVuc2lnbmVkIGludAkJY3VyYnl0ZXM7CisKKwl1bnNpZ25lZCBpbnQJCWN1cnNnOworCXVuc2lnbmVkIGludAkJY3Vyc2dfb2ZzOworCisJc3RydWN0IHNjYXR0ZXJsaXN0CXNnZW50OworCXZvaWQJCQkqYnVmX3ZpcnQ7CisKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QJKnNnOworCisJYXRhX3FjX2NiX3QJCWNvbXBsZXRlX2ZuOworCisJc3RydWN0IGNvbXBsZXRpb24JKndhaXRpbmc7CisKKwl2b2lkCQkJKnByaXZhdGVfZGF0YTsKK307CisKK3N0cnVjdCBhdGFfaG9zdF9zdGF0cyB7CisJdW5zaWduZWQgbG9uZwkJdW5oYW5kbGVkX2lycTsKKwl1bnNpZ25lZCBsb25nCQlpZGxlX2lycTsKKwl1bnNpZ25lZCBsb25nCQlyd19yZXFidWY7Cit9OworCitzdHJ1Y3QgYXRhX2RldmljZSB7CisJdTY0CQkJbl9zZWN0b3JzOwkvKiBzaXplIG9mIGRldmljZSwgaWYgQVRBICovCisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CQkvKiBBVEFfREZMQUdfeHh4ICovCisJdW5zaWduZWQgaW50CQljbGFzczsJCS8qIEFUQV9ERVZfeHh4ICovCisJdW5zaWduZWQgaW50CQlkZXZubzsJCS8qIDAgb3IgMSAqLworCXUxNgkJCWlkW0FUQV9JRF9XT1JEU107IC8qIElERU5USUZZIHh4eCBERVZJQ0UgZGF0YSAqLworCXU4CQkJcGlvX21vZGU7CisJdTgJCQlkbWFfbW9kZTsKKwl1OAkJCXhmZXJfbW9kZTsKKwl1bnNpZ25lZCBpbnQJCXhmZXJfc2hpZnQ7CS8qIEFUQV9TSElGVF94eHggKi8KKworCS8qIGNhY2hlIGluZm8gYWJvdXQgY3VycmVudCB0cmFuc2ZlciBtb2RlICovCisJdTgJCQl4ZmVyX3Byb3RvY29sOwkvKiB0YXNrZmlsZSB4ZmVyIHByb3RvY29sICovCisJdTgJCQlyZWFkX2NtZDsJLyogb3Bjb2RlIHRvIHVzZSBvbiByZWFkICovCisJdTgJCQl3cml0ZV9jbWQ7CS8qIG9wY29kZSB0byB1c2Ugb24gd3JpdGUgKi8KK307CisKK3N0cnVjdCBhdGFfcG9ydCB7CisJc3RydWN0IFNjc2lfSG9zdAkqaG9zdDsJLyogb3VyIGNvLWFsbG9jYXRlZCBzY3NpIGhvc3QgKi8KKwlzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucwkqb3BzOworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwkvKiBBVEFfRkxBR194eHggKi8KKwl1bnNpZ25lZCBpbnQJCWlkOwkvKiB1bmlxdWUgaWQgcmVxJ2QgYnkgc2NzaSBtaWRseXIgKi8KKwl1bnNpZ25lZCBpbnQJCXBvcnRfbm87IC8qIHVuaXF1ZSBwb3J0ICM7IGZyb20gemVybyAqLworCXVuc2lnbmVkIGludAkJaGFyZF9wb3J0X25vOwkvKiBoYXJkd2FyZSBwb3J0ICM7IGZyb20gemVybyAqLworCisJc3RydWN0IGF0YV9wcmQJCSpwcmQ7CSAvKiBvdXIgU0cgbGlzdCAqLworCWRtYV9hZGRyX3QJCXByZF9kbWE7IC8qIGFuZCBpdHMgRE1BIG1hcHBpbmcgKi8KKworCXN0cnVjdCBhdGFfaW9wb3J0cwlpb2FkZHI7CS8qIEFUQSBjbWQvY3RsL2RtYSByZWdpc3RlciBibG9ja3MgKi8KKworCXU4CQkJY3RsOwkvKiBjYWNoZSBvZiBBVEEgY29udHJvbCByZWdpc3RlciAqLworCXU4CQkJbGFzdF9jdGw7CS8qIENhY2hlIGxhc3Qgd3JpdHRlbiB2YWx1ZSAqLworCXVuc2lnbmVkIGludAkJYnVzX3N0YXRlOworCXVuc2lnbmVkIGludAkJcG9ydF9zdGF0ZTsKKwl1bnNpZ25lZCBpbnQJCXBpb19tYXNrOworCXVuc2lnbmVkIGludAkJbXdkbWFfbWFzazsKKwl1bnNpZ25lZCBpbnQJCXVkbWFfbWFzazsKKwl1bnNpZ25lZCBpbnQJCWNibDsJLyogY2FibGUgdHlwZTsgQVRBX0NCTF94eHggKi8KKwl1bnNpZ25lZCBpbnQJCWNkYl9sZW47CisKKwlzdHJ1Y3QgYXRhX2RldmljZQlkZXZpY2VbQVRBX01BWF9ERVZJQ0VTXTsKKworCXN0cnVjdCBhdGFfcXVldWVkX2NtZAlxY21kW0FUQV9NQVhfUVVFVUVdOworCXVuc2lnbmVkIGxvbmcJCXFhY3RpdmU7CisJdW5zaWduZWQgaW50CQlhY3RpdmVfdGFnOworCisJc3RydWN0IGF0YV9ob3N0X3N0YXRzCXN0YXRzOworCXN0cnVjdCBhdGFfaG9zdF9zZXQJKmhvc3Rfc2V0OworCisJc3RydWN0IHdvcmtfc3RydWN0CXBhY2tldF90YXNrOworCisJc3RydWN0IHdvcmtfc3RydWN0CXBpb190YXNrOworCXVuc2lnbmVkIGludAkJcGlvX3Rhc2tfc3RhdGU7CisJdW5zaWduZWQgbG9uZwkJcGlvX3Rhc2tfdGltZW91dDsKKworCXZvaWQJCQkqcHJpdmF0ZV9kYXRhOworfTsKKworc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgeworCXZvaWQgKCpwb3J0X2Rpc2FibGUpIChzdHJ1Y3QgYXRhX3BvcnQgKik7CisKKwl2b2lkICgqZGV2X2NvbmZpZykgKHN0cnVjdCBhdGFfcG9ydCAqLCBzdHJ1Y3QgYXRhX2RldmljZSAqKTsKKworCXZvaWQgKCpzZXRfcGlvbW9kZSkgKHN0cnVjdCBhdGFfcG9ydCAqLCBzdHJ1Y3QgYXRhX2RldmljZSAqKTsKKwl2b2lkICgqc2V0X2RtYW1vZGUpIChzdHJ1Y3QgYXRhX3BvcnQgKiwgc3RydWN0IGF0YV9kZXZpY2UgKik7CisKKwl2b2lkICgqdGZfbG9hZCkgKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfdGFza2ZpbGUgKnRmKTsKKwl2b2lkICgqdGZfcmVhZCkgKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfdGFza2ZpbGUgKnRmKTsKKworCXZvaWQgKCpleGVjX2NvbW1hbmQpKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfdGFza2ZpbGUgKnRmKTsKKwl1OCAgICgqY2hlY2tfc3RhdHVzKShzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKKwl1OCAgICgqY2hlY2tfYWx0c3RhdHVzKShzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKKwl1OCAgICgqY2hlY2tfZXJyKShzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKKwl2b2lkICgqZGV2X3NlbGVjdCkoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50IGRldmljZSk7CisKKwl2b2lkICgqcGh5X3Jlc2V0KSAoc3RydWN0IGF0YV9wb3J0ICphcCk7CisJdm9pZCAoKnBvc3Rfc2V0X21vZGUpIChzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKKworCWludCAoKmNoZWNrX2F0YXBpX2RtYSkgKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOworCisJdm9pZCAoKmJtZG1hX3NldHVwKSAoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CisJdm9pZCAoKmJtZG1hX3N0YXJ0KSAoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CisKKwl2b2lkICgqcWNfcHJlcCkgKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOworCWludCAoKnFjX2lzc3VlKSAoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CisKKwl2b2lkICgqZW5nX3RpbWVvdXQpIChzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKKworCWlycXJldHVybl90ICgqaXJxX2hhbmRsZXIpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKKwl2b2lkICgqaXJxX2NsZWFyKSAoc3RydWN0IGF0YV9wb3J0ICopOworCisJdTMyICgqc2NyX3JlYWQpIChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgc2NfcmVnKTsKKwl2b2lkICgqc2NyX3dyaXRlKSAoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50IHNjX3JlZywKKwkJCSAgIHUzMiB2YWwpOworCisJaW50ICgqcG9ydF9zdGFydCkgKHN0cnVjdCBhdGFfcG9ydCAqYXApOworCXZvaWQgKCpwb3J0X3N0b3ApIChzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKKworCXZvaWQgKCpob3N0X3N0b3ApIChzdHJ1Y3QgYXRhX2hvc3Rfc2V0ICpob3N0X3NldCk7CisKKwl2b2lkICgqYm1kbWFfc3RvcCkgKHN0cnVjdCBhdGFfcG9ydCAqYXApOworCXU4ICAgKCpibWRtYV9zdGF0dXMpIChzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKK307CisKK3N0cnVjdCBhdGFfcG9ydF9pbmZvIHsKKwlTY3NpX0hvc3RfVGVtcGxhdGUJKnNodDsKKwl1bnNpZ25lZCBsb25nCQlob3N0X2ZsYWdzOworCXVuc2lnbmVkIGxvbmcJCXBpb19tYXNrOworCXVuc2lnbmVkIGxvbmcJCW13ZG1hX21hc2s7CisJdW5zaWduZWQgbG9uZwkJdWRtYV9tYXNrOworCXN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zCSpwb3J0X29wczsKK307CisKKworZXh0ZXJuIHZvaWQgYXRhX3BvcnRfcHJvYmUoc3RydWN0IGF0YV9wb3J0ICopOworZXh0ZXJuIHZvaWQgX19zYXRhX3BoeV9yZXNldChzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKK2V4dGVybiB2b2lkIHNhdGFfcGh5X3Jlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXApOworZXh0ZXJuIHZvaWQgYXRhX2J1c19yZXNldChzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKK2V4dGVybiB2b2lkIGF0YV9wb3J0X2Rpc2FibGUoc3RydWN0IGF0YV9wb3J0ICopOworZXh0ZXJuIHZvaWQgYXRhX3N0ZF9wb3J0cyhzdHJ1Y3QgYXRhX2lvcG9ydHMgKmlvYWRkcik7CisjaWZkZWYgQ09ORklHX1BDSQorZXh0ZXJuIGludCBhdGFfcGNpX2luaXRfb25lIChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IGF0YV9wb3J0X2luZm8gKipwb3J0X2luZm8sCisJCQkgICAgIHVuc2lnbmVkIGludCBuX3BvcnRzKTsKK2V4dGVybiB2b2lkIGF0YV9wY2lfcmVtb3ZlX29uZSAoc3RydWN0IHBjaV9kZXYgKnBkZXYpOworI2VuZGlmIC8qIENPTkZJR19QQ0kgKi8KK2V4dGVybiBpbnQgYXRhX2RldmljZV9hZGQoc3RydWN0IGF0YV9wcm9iZV9lbnQgKmVudCk7CitleHRlcm4gaW50IGF0YV9zY3NpX2RldGVjdChTY3NpX0hvc3RfVGVtcGxhdGUgKnNodCk7CitleHRlcm4gaW50IGF0YV9zY3NpX2lvY3RsKHN0cnVjdCBzY3NpX2RldmljZSAqZGV2LCBpbnQgY21kLCB2b2lkIF9fdXNlciAqYXJnKTsKK2V4dGVybiBpbnQgYXRhX3Njc2lfcXVldWVjbWQoc3RydWN0IHNjc2lfY21uZCAqY21kLCB2b2lkICgqZG9uZSkoc3RydWN0IHNjc2lfY21uZCAqKSk7CitleHRlcm4gaW50IGF0YV9zY3NpX2Vycm9yKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QpOworZXh0ZXJuIGludCBhdGFfc2NzaV9yZWxlYXNlKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QpOworZXh0ZXJuIHVuc2lnbmVkIGludCBhdGFfaG9zdF9pbnRyKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOworLyoKKyAqIERlZmF1bHQgZHJpdmVyIG9wcyBpbXBsZW1lbnRhdGlvbnMKKyAqLworZXh0ZXJuIHZvaWQgYXRhX3RmX2xvYWQoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV90YXNrZmlsZSAqdGYpOworZXh0ZXJuIHZvaWQgYXRhX3RmX3JlYWQoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV90YXNrZmlsZSAqdGYpOworZXh0ZXJuIHZvaWQgYXRhX3RmX3RvX2ZpcyhzdHJ1Y3QgYXRhX3Rhc2tmaWxlICp0ZiwgdTggKmZpcywgdTggcG1wKTsKK2V4dGVybiB2b2lkIGF0YV90Zl9mcm9tX2Zpcyh1OCAqZmlzLCBzdHJ1Y3QgYXRhX3Rhc2tmaWxlICp0Zik7CitleHRlcm4gdm9pZCBhdGFfbm9vcF9kZXZfc2VsZWN0IChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgZGV2aWNlKTsKK2V4dGVybiB2b2lkIGF0YV9zdGRfZGV2X3NlbGVjdCAoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50IGRldmljZSk7CitleHRlcm4gdTggYXRhX2NoZWNrX3N0YXR1cyhzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKK2V4dGVybiB1OCBhdGFfYWx0c3RhdHVzKHN0cnVjdCBhdGFfcG9ydCAqYXApOworZXh0ZXJuIHU4IGF0YV9jaGtfZXJyKHN0cnVjdCBhdGFfcG9ydCAqYXApOworZXh0ZXJuIHZvaWQgYXRhX2V4ZWNfY29tbWFuZChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX3Rhc2tmaWxlICp0Zik7CitleHRlcm4gaW50IGF0YV9wb3J0X3N0YXJ0IChzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKK2V4dGVybiB2b2lkIGF0YV9wb3J0X3N0b3AgKHN0cnVjdCBhdGFfcG9ydCAqYXApOworZXh0ZXJuIGlycXJldHVybl90IGF0YV9pbnRlcnJ1cHQgKGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworZXh0ZXJuIHZvaWQgYXRhX3FjX3ByZXAoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CitleHRlcm4gaW50IGF0YV9xY19pc3N1ZV9wcm90KHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOworZXh0ZXJuIHZvaWQgYXRhX3NnX2luaXRfb25lKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMsIHZvaWQgKmJ1ZiwKKwkJdW5zaWduZWQgaW50IGJ1Zmxlbik7CitleHRlcm4gdm9pZCBhdGFfc2dfaW5pdChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCQkgdW5zaWduZWQgaW50IG5fZWxlbSk7CitleHRlcm4gdW5zaWduZWQgaW50IGF0YV9kZXZfY2xhc3NpZnkoc3RydWN0IGF0YV90YXNrZmlsZSAqdGYpOworZXh0ZXJuIHZvaWQgYXRhX2Rldl9pZF9zdHJpbmcodTE2ICppZCwgdW5zaWduZWQgY2hhciAqcywKKwkJCSAgICAgIHVuc2lnbmVkIGludCBvZnMsIHVuc2lnbmVkIGludCBsZW4pOworZXh0ZXJuIHZvaWQgYXRhX2JtZG1hX3NldHVwIChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKK2V4dGVybiB2b2lkIGF0YV9ibWRtYV9zdGFydCAoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CitleHRlcm4gdm9pZCBhdGFfYm1kbWFfc3RvcChzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKK2V4dGVybiB1OCAgIGF0YV9ibWRtYV9zdGF0dXMoc3RydWN0IGF0YV9wb3J0ICphcCk7CitleHRlcm4gdm9pZCBhdGFfYm1kbWFfaXJxX2NsZWFyKHN0cnVjdCBhdGFfcG9ydCAqYXApOworZXh0ZXJuIHZvaWQgYXRhX3FjX2NvbXBsZXRlKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMsIHU4IGRydl9zdGF0KTsKK2V4dGVybiB2b2lkIGF0YV9lbmdfdGltZW91dChzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKK2V4dGVybiB2b2lkIGF0YV9zY3NpX3NpbXVsYXRlKHUxNiAqaWQsIHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwKKwkJCSAgICAgIHZvaWQgKCpkb25lKShzdHJ1Y3Qgc2NzaV9jbW5kICopKTsKK2V4dGVybiBpbnQgYXRhX3N0ZF9iaW9zX3BhcmFtKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwKKwkJCSAgICAgIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsCisJCQkgICAgICBzZWN0b3JfdCBjYXBhY2l0eSwgaW50IGdlb21bXSk7CitleHRlcm4gaW50IGF0YV9zY3NpX3NsYXZlX2NvbmZpZyhzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpOworCisKKyNpZmRlZiBDT05GSUdfUENJCitzdHJ1Y3QgcGNpX2JpdHMgeworCXVuc2lnbmVkIGludAkJcmVnOwkvKiBQQ0kgY29uZmlnIHJlZ2lzdGVyIHRvIHJlYWQgKi8KKwl1bnNpZ25lZCBpbnQJCXdpZHRoOwkvKiAxICg4IGJpdCksIDIgKDE2IGJpdCksIDQgKDMyIGJpdCkgKi8KKwl1bnNpZ25lZCBsb25nCQltYXNrOworCXVuc2lnbmVkIGxvbmcJCXZhbDsKK307CisKK2V4dGVybiBzdHJ1Y3QgYXRhX3Byb2JlX2VudCAqCithdGFfcGNpX2luaXRfbmF0aXZlX21vZGUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBhdGFfcG9ydF9pbmZvICoqcG9ydCk7CitleHRlcm4gaW50IHBjaV90ZXN0X2NvbmZpZ19iaXRzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgcGNpX2JpdHMgKmJpdHMpOworCisjZW5kaWYgLyogQ09ORklHX1BDSSAqLworCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGF0YV90YWdfdmFsaWQodW5zaWduZWQgaW50IHRhZykKK3sKKwlyZXR1cm4gKHRhZyA8IEFUQV9NQVhfUVVFVUUpID8gMSA6IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGF0YV9kZXZfcHJlc2VudChzdHJ1Y3QgYXRhX2RldmljZSAqZGV2KQoreworCXJldHVybiAoKGRldi0+Y2xhc3MgPT0gQVRBX0RFVl9BVEEpIHx8CisJCShkZXYtPmNsYXNzID09IEFUQV9ERVZfQVRBUEkpKTsKK30KKworc3RhdGljIGlubGluZSB1OCBhdGFfY2hrX3N0YXR1cyhzdHJ1Y3QgYXRhX3BvcnQgKmFwKQoreworCXJldHVybiBhcC0+b3BzLT5jaGVja19zdGF0dXMoYXApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXRhX3BhdXNlKHN0cnVjdCBhdGFfcG9ydCAqYXApCit7CisJYXRhX2FsdHN0YXR1cyhhcCk7CisJbmRlbGF5KDQwMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTggYXRhX2J1c3lfd2FpdChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgYml0cywKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgbWF4KQoreworCXU4IHN0YXR1czsKKworCWRvIHsKKwkJdWRlbGF5KDEwKTsKKwkJc3RhdHVzID0gYXRhX2Noa19zdGF0dXMoYXApOworCQltYXgtLTsKKwl9IHdoaWxlICgoc3RhdHVzICYgYml0cykgJiYgKG1heCA+IDApKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTggYXRhX3dhaXRfaWRsZShzdHJ1Y3QgYXRhX3BvcnQgKmFwKQoreworCXU4IHN0YXR1cyA9IGF0YV9idXN5X3dhaXQoYXAsIEFUQV9CVVNZIHwgQVRBX0RSUSwgMTAwMCk7CisKKwlpZiAoc3RhdHVzICYgKEFUQV9CVVNZIHwgQVRBX0RSUSkpIHsKKwkJdW5zaWduZWQgbG9uZyBsID0gYXAtPmlvYWRkci5zdGF0dXNfYWRkcjsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgIkFUQTogYWJub3JtYWwgc3RhdHVzIDB4JVggb24gcG9ydCAweCVsWFxuIiwKKwkJICAgICAgIHN0YXR1cywgbCk7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGF0YV9xY19zZXRfcG9sbGluZyhzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQoreworCXFjLT50Zi5jdGwgfD0gQVRBX05JRU47Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGF0YV9xdWV1ZWRfY21kICphdGFfcWNfZnJvbV90YWcgKHN0cnVjdCBhdGFfcG9ydCAqYXAsCisJCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgdGFnKQoreworCWlmIChsaWtlbHkoYXRhX3RhZ192YWxpZCh0YWcpKSkKKwkJcmV0dXJuICZhcC0+cWNtZFt0YWddOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXRhX3RmX2luaXQoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV90YXNrZmlsZSAqdGYsIHVuc2lnbmVkIGludCBkZXZpY2UpCit7CisJbWVtc2V0KHRmLCAwLCBzaXplb2YoKnRmKSk7CisKKwl0Zi0+Y3RsID0gYXAtPmN0bDsKKwlpZiAoZGV2aWNlID09IDApCisJCXRmLT5kZXZpY2UgPSBBVEFfREVWSUNFX09CUzsKKwllbHNlCisJCXRmLT5kZXZpY2UgPSBBVEFfREVWSUNFX09CUyB8IEFUQV9ERVYxOworfQorCitzdGF0aWMgaW5saW5lIHU4IGF0YV9pcnFfb24oc3RydWN0IGF0YV9wb3J0ICphcCkKK3sKKwlzdHJ1Y3QgYXRhX2lvcG9ydHMgKmlvYWRkciA9ICZhcC0+aW9hZGRyOworCXU4IHRtcDsKKworCWFwLT5jdGwgJj0gfkFUQV9OSUVOOworCWFwLT5sYXN0X2N0bCA9IGFwLT5jdGw7CisKKwlpZiAoYXAtPmZsYWdzICYgQVRBX0ZMQUdfTU1JTykKKwkJd3JpdGViKGFwLT5jdGwsICh2b2lkIF9faW9tZW0gKikgaW9hZGRyLT5jdGxfYWRkcik7CisJZWxzZQorCQlvdXRiKGFwLT5jdGwsIGlvYWRkci0+Y3RsX2FkZHIpOworCXRtcCA9IGF0YV93YWl0X2lkbGUoYXApOworCisJYXAtPm9wcy0+aXJxX2NsZWFyKGFwKTsKKworCXJldHVybiB0bXA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTggYXRhX2lycV9hY2soc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50IGNoa19kcnEpCit7CisJdW5zaWduZWQgaW50IGJpdHMgPSBjaGtfZHJxID8gQVRBX0JVU1kgfCBBVEFfRFJRIDogQVRBX0JVU1k7CisJdTggaG9zdF9zdGF0LCBwb3N0X3N0YXQsIHN0YXR1czsKKworCXN0YXR1cyA9IGF0YV9idXN5X3dhaXQoYXAsIGJpdHMsIDEwMDApOworCWlmIChzdGF0dXMgJiBiaXRzKQorCQlEUFJJTlRLKCJhYm5vcm1hbCBzdGF0dXMgMHglWFxuIiwgc3RhdHVzKTsKKworCS8qIGdldCBjb250cm9sbGVyIHN0YXR1czsgY2xlYXIgaW50ciwgZXJyIGJpdHMgKi8KKwlpZiAoYXAtPmZsYWdzICYgQVRBX0ZMQUdfTU1JTykgeworCQl2b2lkIF9faW9tZW0gKm1taW8gPSAodm9pZCBfX2lvbWVtICopIGFwLT5pb2FkZHIuYm1kbWFfYWRkcjsKKwkJaG9zdF9zdGF0ID0gcmVhZGIobW1pbyArIEFUQV9ETUFfU1RBVFVTKTsKKwkJd3JpdGViKGhvc3Rfc3RhdCB8IEFUQV9ETUFfSU5UUiB8IEFUQV9ETUFfRVJSLAorCQkgICAgICAgbW1pbyArIEFUQV9ETUFfU1RBVFVTKTsKKworCQlwb3N0X3N0YXQgPSByZWFkYihtbWlvICsgQVRBX0RNQV9TVEFUVVMpOworCX0gZWxzZSB7CisJCWhvc3Rfc3RhdCA9IGluYihhcC0+aW9hZGRyLmJtZG1hX2FkZHIgKyBBVEFfRE1BX1NUQVRVUyk7CisJCW91dGIoaG9zdF9zdGF0IHwgQVRBX0RNQV9JTlRSIHwgQVRBX0RNQV9FUlIsCisJCSAgICAgYXAtPmlvYWRkci5ibWRtYV9hZGRyICsgQVRBX0RNQV9TVEFUVVMpOworCisJCXBvc3Rfc3RhdCA9IGluYihhcC0+aW9hZGRyLmJtZG1hX2FkZHIgKyBBVEFfRE1BX1NUQVRVUyk7CisJfQorCisJVlBSSU5USygiaXJxIGFjazogaG9zdF9zdGF0IDB4JVgsIG5ldyBob3N0X3N0YXQgMHglWCwgZHJ2X3N0YXQgMHglWFxuIiwKKwkJaG9zdF9zdGF0LCBwb3N0X3N0YXQsIHN0YXR1cyk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBzY3JfcmVhZChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgcmVnKQoreworCXJldHVybiBhcC0+b3BzLT5zY3JfcmVhZChhcCwgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNjcl93cml0ZShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgcmVnLCB1MzIgdmFsKQoreworCWFwLT5vcHMtPnNjcl93cml0ZShhcCwgcmVnLCB2YWwpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBzYXRhX2Rldl9wcmVzZW50KHN0cnVjdCBhdGFfcG9ydCAqYXApCit7CisJcmV0dXJuICgoc2NyX3JlYWQoYXAsIFNDUl9TVEFUVVMpICYgMHhmKSA9PSAweDMpID8gMSA6IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGF0YV90cnlfZmx1c2hfY2FjaGUoc3RydWN0IGF0YV9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gYXRhX2lkX3djYWNoZV9lbmFibGVkKGRldi0+aWQpIHx8CisJICAgICAgIGF0YV9pZF9oYXNfZmx1c2goZGV2LT5pZCkgfHwKKwkgICAgICAgYXRhX2lkX2hhc19mbHVzaF9leHQoZGV2LT5pZCk7Cit9CisKKyNlbmRpZiAvKiBfX0xJTlVYX0xJQkFUQV9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGlicHMyLmggYi9pbmNsdWRlL2xpbnV4L2xpYnBzMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyM2JkYmMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2xpYnBzMi5oCkBAIC0wLDAgKzEsNTAgQEAKKyNpZm5kZWYgX0xJQlBTMl9ICisjZGVmaW5lIF9MSUJQUzJfSAorCisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDIgVm9qdGVjaCBQYXZsaWsKKyAqIENvcHlyaWdodCAoQykgMjAwNCBEbWl0cnkgVG9yb2tob3YKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKworI2RlZmluZSBQUzJfQ01EX0dFVElECQkweDAyZjIKKyNkZWZpbmUgUFMyX0NNRF9SRVNFVF9CQVQJMHgwMmZmCisKKyNkZWZpbmUgUFMyX1JFVF9CQVQJCTB4YWEKKyNkZWZpbmUgUFMyX1JFVF9JRAkJMHgwMAorI2RlZmluZSBQUzJfUkVUX0FDSwkJMHhmYQorI2RlZmluZSBQUzJfUkVUX05BSwkJMHhmZQorCisjZGVmaW5lIFBTMl9GTEFHX0FDSwkJMQkvKiBXYWl0aW5nIGZvciBBQ0svTkFLICovCisjZGVmaW5lIFBTMl9GTEFHX0NNRAkJMgkvKiBXYWl0aW5nIGZvciBjb21tYW5kIHRvIGZpbmlzaCAqLworI2RlZmluZSBQUzJfRkxBR19DTUQxCQk0CS8qIFdhaXRpbmcgZm9yIHRoZSBmaXJzdCBieXRlIG9mIGNvbW1hbmQgcmVzcG9uc2UgKi8KKyNkZWZpbmUgUFMyX0ZMQUdfV0FJVElECQk4CS8qIENvbW1hbmQgZXhlY2l0aW5nIGlzIEdFVCBJRCAqLworCitzdHJ1Y3QgcHMyZGV2IHsKKwlzdHJ1Y3Qgc2VyaW8gKnNlcmlvOworCisJLyogRW5zdXJlcyB0aGF0IG9ubHkgb25lIGNvbW1hbmQgaXMgZXhlY3V0aW5nIGF0IGEgdGltZSAqLworCXN0cnVjdCBzZW1hcGhvcmUgY21kX3NlbTsKKworCS8qIFVzZWQgdG8gc2lnbmFsIGNvbXBsZXRpb24gZnJvbSBpbnRlcnJ1cHQgaGFuZGxlciAqLworCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7CisKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGNoYXIgY21kYnVmWzZdOworCXVuc2lnbmVkIGNoYXIgY21kY250OworCXVuc2lnbmVkIGNoYXIgbmFrOworfTsKKwordm9pZCBwczJfaW5pdChzdHJ1Y3QgcHMyZGV2ICpwczJkZXYsIHN0cnVjdCBzZXJpbyAqc2VyaW8pOworaW50IHBzMl9zZW5kYnl0ZShzdHJ1Y3QgcHMyZGV2ICpwczJkZXYsIHVuc2lnbmVkIGNoYXIgYnl0ZSwgaW50IHRpbWVvdXQpOworaW50IHBzMl9jb21tYW5kKHN0cnVjdCBwczJkZXYgKnBzMmRldiwgdW5zaWduZWQgY2hhciAqcGFyYW0sIGludCBjb21tYW5kKTsKK2ludCBwczJfc2NoZWR1bGVfY29tbWFuZChzdHJ1Y3QgcHMyZGV2ICpwczJkZXYsIHVuc2lnbmVkIGNoYXIgKnBhcmFtLCBpbnQgY29tbWFuZCk7CitpbnQgcHMyX2hhbmRsZV9hY2soc3RydWN0IHBzMmRldiAqcHMyZGV2LCB1bnNpZ25lZCBjaGFyIGRhdGEpOworaW50IHBzMl9oYW5kbGVfcmVzcG9uc2Uoc3RydWN0IHBzMmRldiAqcHMyZGV2LCB1bnNpZ25lZCBjaGFyIGRhdGEpOwordm9pZCBwczJfY21kX2Fib3J0ZWQoc3RydWN0IHBzMmRldiAqcHMyZGV2KTsKKworI2VuZGlmIC8qIF9MSUJQUzJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9saW1pdHMuaCBiL2luY2x1ZGUvbGludXgvbGltaXRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFmMmUwOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbGltaXRzLmgKQEAgLTAsMCArMSwyMiBAQAorI2lmbmRlZiBfTElOVVhfTElNSVRTX0gKKyNkZWZpbmUgX0xJTlVYX0xJTUlUU19ICisKKyNkZWZpbmUgTlJfT1BFTgkgICAgICAgIDEwMjQKKworI2RlZmluZSBOR1JPVVBTX01BWCAgICA2NTUzNgkvKiBzdXBwbGVtZW50YWwgZ3JvdXAgSURzIGFyZSBhdmFpbGFibGUgKi8KKyNkZWZpbmUgQVJHX01BWCAgICAgICAxMzEwNzIJLyogIyBieXRlcyBvZiBhcmdzICsgZW52aXJvbiBmb3IgZXhlYygpICovCisjZGVmaW5lIENISUxEX01BWCAgICAgICAgOTk5ICAgIC8qIG5vIGxpbWl0IDotKSAqLworI2RlZmluZSBPUEVOX01BWCAgICAgICAgIDI1NgkvKiAjIG9wZW4gZmlsZXMgYSBwcm9jZXNzIG1heSBoYXZlICovCisjZGVmaW5lIExJTktfTUFYICAgICAgICAgMTI3CS8qICMgbGlua3MgYSBmaWxlIG1heSBoYXZlICovCisjZGVmaW5lIE1BWF9DQU5PTiAgICAgICAgMjU1CS8qIHNpemUgb2YgdGhlIGNhbm9uaWNhbCBpbnB1dCBxdWV1ZSAqLworI2RlZmluZSBNQVhfSU5QVVQgICAgICAgIDI1NQkvKiBzaXplIG9mIHRoZSB0eXBlLWFoZWFkIGJ1ZmZlciAqLworI2RlZmluZSBOQU1FX01BWCAgICAgICAgIDI1NQkvKiAjIGNoYXJzIGluIGEgZmlsZSBuYW1lICovCisjZGVmaW5lIFBBVEhfTUFYICAgICAgICA0MDk2CS8qICMgY2hhcnMgaW4gYSBwYXRoIG5hbWUgaW5jbHVkaW5nIG51bCAqLworI2RlZmluZSBQSVBFX0JVRiAgICAgICAgNDA5NgkvKiAjIGJ5dGVzIGluIGF0b21pYyB3cml0ZSB0byBhIHBpcGUgKi8KKyNkZWZpbmUgWEFUVFJfTkFNRV9NQVggICAyNTUJLyogIyBjaGFycyBpbiBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgbmFtZSAqLworI2RlZmluZSBYQVRUUl9TSVpFX01BWCA2NTUzNgkvKiBzaXplIG9mIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSB2YWx1ZSAoNjRrKSAqLworI2RlZmluZSBYQVRUUl9MSVNUX01BWCA2NTUzNgkvKiBzaXplIG9mIGV4dGVuZGVkIGF0dHJpYnV0ZSBuYW1lbGlzdCAoNjRrKSAqLworCisjZGVmaW5lIFJUU0lHX01BWAkgIDMyCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9saW5rYWdlLmggYi9pbmNsdWRlL2xpbnV4L2xpbmthZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzhmNzc5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9saW5rYWdlLmgKQEAgLTAsMCArMSw0NyBAQAorI2lmbmRlZiBfTElOVVhfTElOS0FHRV9ICisjZGVmaW5lIF9MSU5VWF9MSU5LQUdFX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS9saW5rYWdlLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworI2RlZmluZSBDUFBfQVNNTElOS0FHRSBleHRlcm4gIkMiCisjZWxzZQorI2RlZmluZSBDUFBfQVNNTElOS0FHRQorI2VuZGlmCisKKyNpZm5kZWYgYXNtbGlua2FnZQorI2RlZmluZSBhc21saW5rYWdlIENQUF9BU01MSU5LQUdFCisjZW5kaWYKKworI2lmbmRlZiBwcmV2ZW50X3RhaWxfY2FsbAorIyBkZWZpbmUgcHJldmVudF90YWlsX2NhbGwocmV0KSBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKworI2lmbmRlZiBfX0FMSUdOCisjZGVmaW5lIF9fQUxJR04JCS5hbGlnbiA0LDB4OTAKKyNkZWZpbmUgX19BTElHTl9TVFIJIi5hbGlnbiA0LDB4OTAiCisjZW5kaWYKKworI2lmZGVmIF9fQVNTRU1CTFlfXworCisjZGVmaW5lIEFMSUdOIF9fQUxJR04KKyNkZWZpbmUgQUxJR05fU1RSIF9fQUxJR05fU1RSCisKKyNkZWZpbmUgRU5UUlkobmFtZSkgXAorICAuZ2xvYmwgbmFtZTsgXAorICBBTElHTjsgXAorICBuYW1lOgorCisjZW5kaWYKKworI2RlZmluZSBOT1JFVF9UWVBFICAgIC8qKi8KKyNkZWZpbmUgQVRUUklCX05PUkVUICBfX2F0dHJpYnV0ZV9fKChub3JldHVybikpCisjZGVmaW5lIE5PUkVUX0FORCAgICAgbm9yZXR1cm4sCisKKyNpZm5kZWYgRkFTVENBTEwKKyNkZWZpbmUgRkFTVENBTEwoeCkJeAorI2RlZmluZSBmYXN0Y2FsbAorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9saW51eF9sb2dvLmggYi9pbmNsdWRlL2xpbnV4L2xpbnV4X2xvZ28uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzAxYmRlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9saW51eF9sb2dvLmgKQEAgLTAsMCArMSwzNyBAQAorI2lmbmRlZiBfTElOVVhfTElOVVhfTE9HT19ICisjZGVmaW5lIF9MSU5VWF9MSU5VWF9MT0dPX0gKKworLyoKKyAqICBMaW51eCBsb2dvIHRvIGJlIGRpc3BsYXllZCBvbiBib290CisgKgorICogIENvcHlyaWdodCAoQykgMTk5NiBMYXJyeSBFd2luZyAobGV3aW5nQGlzYy50YW11LmVkdSkKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTYsMTk5OCBKYWt1YiBKZWxpbmVrIChqakBzdW5zaXRlLm1mZi5jdW5pLmN6KQorICogIENvcHlyaWdodCAoQykgMjAwMSBHcmVnIEJhbmtzIDxnbmJAYWxwaGFsaW5rLmNvbS5hdT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEgSmFuLUJlbmVkaWN0IEdsYXcgPGpiZ2xhd0BsdWctb3dsLmRlPgorICogIENvcHlyaWdodCAoQykgMjAwMyBHZWVydCBVeXR0ZXJob2V2ZW4gPGdlZXJ0QGxpbnV4LW02OGsub3JnPgorICoKKyAqICBTZXJpYWxfY29uc29sZSBhc2NpaSBpbWFnZSBjYW4gYmUgYW55IHNpemUsCisgKiAgYnV0IHNob3VsZCBjb250YWluICVzIHRvIGRpc3BsYXkgdGhlIHZlcnNpb24KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisKKyNkZWZpbmUgTElOVVhfTE9HT19NT05PCQkxCS8qIG1vbm9jaHJvbWUgYmxhY2svd2hpdGUgKi8KKyNkZWZpbmUgTElOVVhfTE9HT19WR0ExNgkyCS8qIDE2IGNvbG9ycyBWR0EgdGV4dCBwYWxldHRlICovCisjZGVmaW5lIExJTlVYX0xPR09fQ0xVVDIyNAkzCS8qIDIyNCBjb2xvcnMgKi8KKyNkZWZpbmUgTElOVVhfTE9HT19HUkFZMjU2CTQJLyogMjU2IGxldmVscyBncmF5c2NhbGUgKi8KKworCitzdHJ1Y3QgbGludXhfbG9nbyB7CisJaW50IHR5cGU7CQkJLyogb25lIG9mIExJTlVYX0xPR09fKiAqLworCXVuc2lnbmVkIGludCB3aWR0aDsKKwl1bnNpZ25lZCBpbnQgaGVpZ2h0OworCXVuc2lnbmVkIGludCBjbHV0c2l6ZTsJCS8qIExJTlVYX0xPR09fQ0xVVDIyNCBvbmx5ICovCisJY29uc3QgdW5zaWduZWQgY2hhciAqY2x1dDsJLyogTElOVVhfTE9HT19DTFVUMjI0IG9ubHkgKi8KKwljb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhOworfTsKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBsaW51eF9sb2dvICpmYl9maW5kX2xvZ28oaW50IGRlcHRoKTsKKworI2VuZGlmIC8qIF9MSU5VWF9MSU5VWF9MT0dPX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGlzdC5oIGIvaW5jbHVkZS9saW51eC9saXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ3Y2Q1NAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbGlzdC5oCkBAIC0wLDAgKzEsNzA3IEBACisjaWZuZGVmIF9MSU5VWF9MSVNUX0gKKyNkZWZpbmUgX0xJTlVYX0xJU1RfSAorCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisKKy8qCisgKiBUaGVzZSBhcmUgbm9uLU5VTEwgcG9pbnRlcnMgdGhhdCB3aWxsIHJlc3VsdCBpbiBwYWdlIGZhdWx0cworICogdW5kZXIgbm9ybWFsIGNpcmN1bXN0YW5jZXMsIHVzZWQgdG8gdmVyaWZ5IHRoYXQgbm9ib2R5IHVzZXMKKyAqIG5vbi1pbml0aWFsaXplZCBsaXN0IGVudHJpZXMuCisgKi8KKyNkZWZpbmUgTElTVF9QT0lTT04xICAoKHZvaWQgKikgMHgwMDEwMDEwMCkKKyNkZWZpbmUgTElTVF9QT0lTT04yICAoKHZvaWQgKikgMHgwMDIwMDIwMCkKKworLyoKKyAqIFNpbXBsZSBkb3VibHkgbGlua2VkIGxpc3QgaW1wbGVtZW50YXRpb24uCisgKgorICogU29tZSBvZiB0aGUgaW50ZXJuYWwgZnVuY3Rpb25zICgiX194eHgiKSBhcmUgdXNlZnVsIHdoZW4KKyAqIG1hbmlwdWxhdGluZyB3aG9sZSBsaXN0cyByYXRoZXIgdGhhbiBzaW5nbGUgZW50cmllcywgYXMKKyAqIHNvbWV0aW1lcyB3ZSBhbHJlYWR5IGtub3cgdGhlIG5leHQvcHJldiBlbnRyaWVzIGFuZCB3ZSBjYW4KKyAqIGdlbmVyYXRlIGJldHRlciBjb2RlIGJ5IHVzaW5nIHRoZW0gZGlyZWN0bHkgcmF0aGVyIHRoYW4KKyAqIHVzaW5nIHRoZSBnZW5lcmljIHNpbmdsZS1lbnRyeSByb3V0aW5lcy4KKyAqLworCitzdHJ1Y3QgbGlzdF9oZWFkIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpuZXh0LCAqcHJldjsKK307CisKKyNkZWZpbmUgTElTVF9IRUFEX0lOSVQobmFtZSkgeyAmKG5hbWUpLCAmKG5hbWUpIH0KKworI2RlZmluZSBMSVNUX0hFQUQobmFtZSkgXAorCXN0cnVjdCBsaXN0X2hlYWQgbmFtZSA9IExJU1RfSEVBRF9JTklUKG5hbWUpCisKKyNkZWZpbmUgSU5JVF9MSVNUX0hFQUQocHRyKSBkbyB7IFwKKwkocHRyKS0+bmV4dCA9IChwdHIpOyAocHRyKS0+cHJldiA9IChwdHIpOyBcCit9IHdoaWxlICgwKQorCisvKgorICogSW5zZXJ0IGEgbmV3IGVudHJ5IGJldHdlZW4gdHdvIGtub3duIGNvbnNlY3V0aXZlIGVudHJpZXMuCisgKgorICogVGhpcyBpcyBvbmx5IGZvciBpbnRlcm5hbCBsaXN0IG1hbmlwdWxhdGlvbiB3aGVyZSB3ZSBrbm93CisgKiB0aGUgcHJldi9uZXh0IGVudHJpZXMgYWxyZWFkeSEKKyAqLworc3RhdGljIGlubGluZSB2b2lkIF9fbGlzdF9hZGQoc3RydWN0IGxpc3RfaGVhZCAqbmV3LAorCQkJICAgICAgc3RydWN0IGxpc3RfaGVhZCAqcHJldiwKKwkJCSAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKm5leHQpCit7CisJbmV4dC0+cHJldiA9IG5ldzsKKwluZXctPm5leHQgPSBuZXh0OworCW5ldy0+cHJldiA9IHByZXY7CisJcHJldi0+bmV4dCA9IG5ldzsKK30KKworLyoqCisgKiBsaXN0X2FkZCAtIGFkZCBhIG5ldyBlbnRyeQorICogQG5ldzogbmV3IGVudHJ5IHRvIGJlIGFkZGVkCisgKiBAaGVhZDogbGlzdCBoZWFkIHRvIGFkZCBpdCBhZnRlcgorICoKKyAqIEluc2VydCBhIG5ldyBlbnRyeSBhZnRlciB0aGUgc3BlY2lmaWVkIGhlYWQuCisgKiBUaGlzIGlzIGdvb2QgZm9yIGltcGxlbWVudGluZyBzdGFja3MuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBsaXN0X2FkZChzdHJ1Y3QgbGlzdF9oZWFkICpuZXcsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJX19saXN0X2FkZChuZXcsIGhlYWQsIGhlYWQtPm5leHQpOworfQorCisvKioKKyAqIGxpc3RfYWRkX3RhaWwgLSBhZGQgYSBuZXcgZW50cnkKKyAqIEBuZXc6IG5ldyBlbnRyeSB0byBiZSBhZGRlZAorICogQGhlYWQ6IGxpc3QgaGVhZCB0byBhZGQgaXQgYmVmb3JlCisgKgorICogSW5zZXJ0IGEgbmV3IGVudHJ5IGJlZm9yZSB0aGUgc3BlY2lmaWVkIGhlYWQuCisgKiBUaGlzIGlzIHVzZWZ1bCBmb3IgaW1wbGVtZW50aW5nIHF1ZXVlcy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGxpc3RfYWRkX3RhaWwoc3RydWN0IGxpc3RfaGVhZCAqbmV3LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQoreworCV9fbGlzdF9hZGQobmV3LCBoZWFkLT5wcmV2LCBoZWFkKTsKK30KKworLyoKKyAqIEluc2VydCBhIG5ldyBlbnRyeSBiZXR3ZWVuIHR3byBrbm93biBjb25zZWN1dGl2ZSBlbnRyaWVzLgorICoKKyAqIFRoaXMgaXMgb25seSBmb3IgaW50ZXJuYWwgbGlzdCBtYW5pcHVsYXRpb24gd2hlcmUgd2Uga25vdworICogdGhlIHByZXYvbmV4dCBlbnRyaWVzIGFscmVhZHkhCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2xpc3RfYWRkX3JjdShzdHJ1Y3QgbGlzdF9oZWFkICogbmV3LAorCQlzdHJ1Y3QgbGlzdF9oZWFkICogcHJldiwgc3RydWN0IGxpc3RfaGVhZCAqIG5leHQpCit7CisJbmV3LT5uZXh0ID0gbmV4dDsKKwluZXctPnByZXYgPSBwcmV2OworCXNtcF93bWIoKTsKKwluZXh0LT5wcmV2ID0gbmV3OworCXByZXYtPm5leHQgPSBuZXc7Cit9CisKKy8qKgorICogbGlzdF9hZGRfcmN1IC0gYWRkIGEgbmV3IGVudHJ5IHRvIHJjdS1wcm90ZWN0ZWQgbGlzdAorICogQG5ldzogbmV3IGVudHJ5IHRvIGJlIGFkZGVkCisgKiBAaGVhZDogbGlzdCBoZWFkIHRvIGFkZCBpdCBhZnRlcgorICoKKyAqIEluc2VydCBhIG5ldyBlbnRyeSBhZnRlciB0aGUgc3BlY2lmaWVkIGhlYWQuCisgKiBUaGlzIGlzIGdvb2QgZm9yIGltcGxlbWVudGluZyBzdGFja3MuCisgKgorICogVGhlIGNhbGxlciBtdXN0IHRha2Ugd2hhdGV2ZXIgcHJlY2F1dGlvbnMgYXJlIG5lY2Vzc2FyeQorICogKHN1Y2ggYXMgaG9sZGluZyBhcHByb3ByaWF0ZSBsb2NrcykgdG8gYXZvaWQgcmFjaW5nCisgKiB3aXRoIGFub3RoZXIgbGlzdC1tdXRhdGlvbiBwcmltaXRpdmUsIHN1Y2ggYXMgbGlzdF9hZGRfcmN1KCkKKyAqIG9yIGxpc3RfZGVsX3JjdSgpLCBydW5uaW5nIG9uIHRoaXMgc2FtZSBsaXN0LgorICogSG93ZXZlciwgaXQgaXMgcGVyZmVjdGx5IGxlZ2FsIHRvIHJ1biBjb25jdXJyZW50bHkgd2l0aAorICogdGhlIF9yY3UgbGlzdC10cmF2ZXJzYWwgcHJpbWl0aXZlcywgc3VjaCBhcworICogbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoKS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGxpc3RfYWRkX3JjdShzdHJ1Y3QgbGlzdF9oZWFkICpuZXcsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJX19saXN0X2FkZF9yY3UobmV3LCBoZWFkLCBoZWFkLT5uZXh0KTsKK30KKworLyoqCisgKiBsaXN0X2FkZF90YWlsX3JjdSAtIGFkZCBhIG5ldyBlbnRyeSB0byByY3UtcHJvdGVjdGVkIGxpc3QKKyAqIEBuZXc6IG5ldyBlbnRyeSB0byBiZSBhZGRlZAorICogQGhlYWQ6IGxpc3QgaGVhZCB0byBhZGQgaXQgYmVmb3JlCisgKgorICogSW5zZXJ0IGEgbmV3IGVudHJ5IGJlZm9yZSB0aGUgc3BlY2lmaWVkIGhlYWQuCisgKiBUaGlzIGlzIHVzZWZ1bCBmb3IgaW1wbGVtZW50aW5nIHF1ZXVlcy4KKyAqCisgKiBUaGUgY2FsbGVyIG11c3QgdGFrZSB3aGF0ZXZlciBwcmVjYXV0aW9ucyBhcmUgbmVjZXNzYXJ5CisgKiAoc3VjaCBhcyBob2xkaW5nIGFwcHJvcHJpYXRlIGxvY2tzKSB0byBhdm9pZCByYWNpbmcKKyAqIHdpdGggYW5vdGhlciBsaXN0LW11dGF0aW9uIHByaW1pdGl2ZSwgc3VjaCBhcyBsaXN0X2FkZF90YWlsX3JjdSgpCisgKiBvciBsaXN0X2RlbF9yY3UoKSwgcnVubmluZyBvbiB0aGlzIHNhbWUgbGlzdC4KKyAqIEhvd2V2ZXIsIGl0IGlzIHBlcmZlY3RseSBsZWdhbCB0byBydW4gY29uY3VycmVudGx5IHdpdGgKKyAqIHRoZSBfcmN1IGxpc3QtdHJhdmVyc2FsIHByaW1pdGl2ZXMsIHN1Y2ggYXMKKyAqIGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KCkuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBsaXN0X2FkZF90YWlsX3JjdShzdHJ1Y3QgbGlzdF9oZWFkICpuZXcsCisJCQkJCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJX19saXN0X2FkZF9yY3UobmV3LCBoZWFkLT5wcmV2LCBoZWFkKTsKK30KKworLyoKKyAqIERlbGV0ZSBhIGxpc3QgZW50cnkgYnkgbWFraW5nIHRoZSBwcmV2L25leHQgZW50cmllcworICogcG9pbnQgdG8gZWFjaCBvdGhlci4KKyAqCisgKiBUaGlzIGlzIG9ubHkgZm9yIGludGVybmFsIGxpc3QgbWFuaXB1bGF0aW9uIHdoZXJlIHdlIGtub3cKKyAqIHRoZSBwcmV2L25leHQgZW50cmllcyBhbHJlYWR5IQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19saXN0X2RlbChzdHJ1Y3QgbGlzdF9oZWFkICogcHJldiwgc3RydWN0IGxpc3RfaGVhZCAqIG5leHQpCit7CisJbmV4dC0+cHJldiA9IHByZXY7CisJcHJldi0+bmV4dCA9IG5leHQ7Cit9CisKKy8qKgorICogbGlzdF9kZWwgLSBkZWxldGVzIGVudHJ5IGZyb20gbGlzdC4KKyAqIEBlbnRyeTogdGhlIGVsZW1lbnQgdG8gZGVsZXRlIGZyb20gdGhlIGxpc3QuCisgKiBOb3RlOiBsaXN0X2VtcHR5IG9uIGVudHJ5IGRvZXMgbm90IHJldHVybiB0cnVlIGFmdGVyIHRoaXMsIHRoZSBlbnRyeSBpcworICogaW4gYW4gdW5kZWZpbmVkIHN0YXRlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgbGlzdF9kZWwoc3RydWN0IGxpc3RfaGVhZCAqZW50cnkpCit7CisJX19saXN0X2RlbChlbnRyeS0+cHJldiwgZW50cnktPm5leHQpOworCWVudHJ5LT5uZXh0ID0gTElTVF9QT0lTT04xOworCWVudHJ5LT5wcmV2ID0gTElTVF9QT0lTT04yOworfQorCisvKioKKyAqIGxpc3RfZGVsX3JjdSAtIGRlbGV0ZXMgZW50cnkgZnJvbSBsaXN0IHdpdGhvdXQgcmUtaW5pdGlhbGl6YXRpb24KKyAqIEBlbnRyeTogdGhlIGVsZW1lbnQgdG8gZGVsZXRlIGZyb20gdGhlIGxpc3QuCisgKgorICogTm90ZTogbGlzdF9lbXB0eSBvbiBlbnRyeSBkb2VzIG5vdCByZXR1cm4gdHJ1ZSBhZnRlciB0aGlzLAorICogdGhlIGVudHJ5IGlzIGluIGFuIHVuZGVmaW5lZCBzdGF0ZS4gSXQgaXMgdXNlZnVsIGZvciBSQ1UgYmFzZWQKKyAqIGxvY2tmcmVlIHRyYXZlcnNhbC4KKyAqCisgKiBJbiBwYXJ0aWN1bGFyLCBpdCBtZWFucyB0aGF0IHdlIGNhbiBub3QgcG9pc29uIHRoZSBmb3J3YXJkCisgKiBwb2ludGVycyB0aGF0IG1heSBzdGlsbCBiZSB1c2VkIGZvciB3YWxraW5nIHRoZSBsaXN0LgorICoKKyAqIFRoZSBjYWxsZXIgbXVzdCB0YWtlIHdoYXRldmVyIHByZWNhdXRpb25zIGFyZSBuZWNlc3NhcnkKKyAqIChzdWNoIGFzIGhvbGRpbmcgYXBwcm9wcmlhdGUgbG9ja3MpIHRvIGF2b2lkIHJhY2luZworICogd2l0aCBhbm90aGVyIGxpc3QtbXV0YXRpb24gcHJpbWl0aXZlLCBzdWNoIGFzIGxpc3RfZGVsX3JjdSgpCisgKiBvciBsaXN0X2FkZF9yY3UoKSwgcnVubmluZyBvbiB0aGlzIHNhbWUgbGlzdC4KKyAqIEhvd2V2ZXIsIGl0IGlzIHBlcmZlY3RseSBsZWdhbCB0byBydW4gY29uY3VycmVudGx5IHdpdGgKKyAqIHRoZSBfcmN1IGxpc3QtdHJhdmVyc2FsIHByaW1pdGl2ZXMsIHN1Y2ggYXMKKyAqIGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KCkuCisgKgorICogTm90ZSB0aGF0IHRoZSBjYWxsZXIgaXMgbm90IHBlcm1pdHRlZCB0byBpbW1lZGlhdGVseSBmcmVlCisgKiB0aGUgbmV3bHkgZGVsZXRlZCBlbnRyeS4gIEluc3RlYWQsIGVpdGhlciBzeW5jaHJvbml6ZV9rZXJuZWwoKQorICogb3IgY2FsbF9yY3UoKSBtdXN0IGJlIHVzZWQgdG8gZGVmZXIgZnJlZWluZyB1bnRpbCBhbiBSQ1UKKyAqIGdyYWNlIHBlcmlvZCBoYXMgZWxhcHNlZC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGxpc3RfZGVsX3JjdShzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeSkKK3sKKwlfX2xpc3RfZGVsKGVudHJ5LT5wcmV2LCBlbnRyeS0+bmV4dCk7CisJZW50cnktPnByZXYgPSBMSVNUX1BPSVNPTjI7Cit9CisKKy8qCisgKiBsaXN0X3JlcGxhY2VfcmN1IC0gcmVwbGFjZSBvbGQgZW50cnkgYnkgbmV3IG9uZQorICogQG9sZCA6IHRoZSBlbGVtZW50IHRvIGJlIHJlcGxhY2VkCisgKiBAbmV3IDogdGhlIG5ldyBlbGVtZW50IHRvIGluc2VydAorICoKKyAqIFRoZSBvbGQgZW50cnkgd2lsbCBiZSByZXBsYWNlZCB3aXRoIHRoZSBuZXcgZW50cnkgYXRvbWljYWxseS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGxpc3RfcmVwbGFjZV9yY3Uoc3RydWN0IGxpc3RfaGVhZCAqb2xkLCBzdHJ1Y3QgbGlzdF9oZWFkICpuZXcpeworCW5ldy0+bmV4dCA9IG9sZC0+bmV4dDsKKwluZXctPnByZXYgPSBvbGQtPnByZXY7CisJc21wX3dtYigpOworCW5ldy0+bmV4dC0+cHJldiA9IG5ldzsKKwluZXctPnByZXYtPm5leHQgPSBuZXc7Cit9CisKKy8qKgorICogbGlzdF9kZWxfaW5pdCAtIGRlbGV0ZXMgZW50cnkgZnJvbSBsaXN0IGFuZCByZWluaXRpYWxpemUgaXQuCisgKiBAZW50cnk6IHRoZSBlbGVtZW50IHRvIGRlbGV0ZSBmcm9tIHRoZSBsaXN0LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgbGlzdF9kZWxfaW5pdChzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeSkKK3sKKwlfX2xpc3RfZGVsKGVudHJ5LT5wcmV2LCBlbnRyeS0+bmV4dCk7CisJSU5JVF9MSVNUX0hFQUQoZW50cnkpOworfQorCisvKioKKyAqIGxpc3RfbW92ZSAtIGRlbGV0ZSBmcm9tIG9uZSBsaXN0IGFuZCBhZGQgYXMgYW5vdGhlcidzIGhlYWQKKyAqIEBsaXN0OiB0aGUgZW50cnkgdG8gbW92ZQorICogQGhlYWQ6IHRoZSBoZWFkIHRoYXQgd2lsbCBwcmVjZWRlIG91ciBlbnRyeQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgbGlzdF9tb3ZlKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisgICAgICAgIF9fbGlzdF9kZWwobGlzdC0+cHJldiwgbGlzdC0+bmV4dCk7CisgICAgICAgIGxpc3RfYWRkKGxpc3QsIGhlYWQpOworfQorCisvKioKKyAqIGxpc3RfbW92ZV90YWlsIC0gZGVsZXRlIGZyb20gb25lIGxpc3QgYW5kIGFkZCBhcyBhbm90aGVyJ3MgdGFpbAorICogQGxpc3Q6IHRoZSBlbnRyeSB0byBtb3ZlCisgKiBAaGVhZDogdGhlIGhlYWQgdGhhdCB3aWxsIGZvbGxvdyBvdXIgZW50cnkKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGxpc3RfbW92ZV90YWlsKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsCisJCQkJICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQoreworICAgICAgICBfX2xpc3RfZGVsKGxpc3QtPnByZXYsIGxpc3QtPm5leHQpOworICAgICAgICBsaXN0X2FkZF90YWlsKGxpc3QsIGhlYWQpOworfQorCisvKioKKyAqIGxpc3RfZW1wdHkgLSB0ZXN0cyB3aGV0aGVyIGEgbGlzdCBpcyBlbXB0eQorICogQGhlYWQ6IHRoZSBsaXN0IHRvIHRlc3QuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGxpc3RfZW1wdHkoY29uc3Qgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKK3sKKwlyZXR1cm4gaGVhZC0+bmV4dCA9PSBoZWFkOworfQorCisvKioKKyAqIGxpc3RfZW1wdHlfY2FyZWZ1bCAtIHRlc3RzIHdoZXRoZXIgYSBsaXN0IGlzCisgKiBlbXB0eSBfYW5kXyBjaGVja3MgdGhhdCBubyBvdGhlciBDUFUgbWlnaHQgYmUKKyAqIGluIHRoZSBwcm9jZXNzIG9mIHN0aWxsIG1vZGlmeWluZyBlaXRoZXIgbWVtYmVyCisgKgorICogTk9URTogdXNpbmcgbGlzdF9lbXB0eV9jYXJlZnVsKCkgd2l0aG91dCBzeW5jaHJvbml6YXRpb24KKyAqIGNhbiBvbmx5IGJlIHNhZmUgaWYgdGhlIG9ubHkgYWN0aXZpdHkgdGhhdCBjYW4gaGFwcGVuCisgKiB0byB0aGUgbGlzdCBlbnRyeSBpcyBsaXN0X2RlbF9pbml0KCkuIEVnLiBpdCBjYW5ub3QgYmUgdXNlZAorICogaWYgYW5vdGhlciBDUFUgY291bGQgcmUtbGlzdF9hZGQoKSBpdC4KKyAqCisgKiBAaGVhZDogdGhlIGxpc3QgdG8gdGVzdC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgbGlzdF9lbXB0eV9jYXJlZnVsKGNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqbmV4dCA9IGhlYWQtPm5leHQ7CisJcmV0dXJuIChuZXh0ID09IGhlYWQpICYmIChuZXh0ID09IGhlYWQtPnByZXYpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19saXN0X3NwbGljZShzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LAorCQkJCSBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmZpcnN0ID0gbGlzdC0+bmV4dDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsYXN0ID0gbGlzdC0+cHJldjsKKwlzdHJ1Y3QgbGlzdF9oZWFkICphdCA9IGhlYWQtPm5leHQ7CisKKwlmaXJzdC0+cHJldiA9IGhlYWQ7CisJaGVhZC0+bmV4dCA9IGZpcnN0OworCisJbGFzdC0+bmV4dCA9IGF0OworCWF0LT5wcmV2ID0gbGFzdDsKK30KKworLyoqCisgKiBsaXN0X3NwbGljZSAtIGpvaW4gdHdvIGxpc3RzCisgKiBAbGlzdDogdGhlIG5ldyBsaXN0IHRvIGFkZC4KKyAqIEBoZWFkOiB0aGUgcGxhY2UgdG8gYWRkIGl0IGluIHRoZSBmaXJzdCBsaXN0LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgbGlzdF9zcGxpY2Uoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKK3sKKwlpZiAoIWxpc3RfZW1wdHkobGlzdCkpCisJCV9fbGlzdF9zcGxpY2UobGlzdCwgaGVhZCk7Cit9CisKKy8qKgorICogbGlzdF9zcGxpY2VfaW5pdCAtIGpvaW4gdHdvIGxpc3RzIGFuZCByZWluaXRpYWxpc2UgdGhlIGVtcHRpZWQgbGlzdC4KKyAqIEBsaXN0OiB0aGUgbmV3IGxpc3QgdG8gYWRkLgorICogQGhlYWQ6IHRoZSBwbGFjZSB0byBhZGQgaXQgaW4gdGhlIGZpcnN0IGxpc3QuCisgKgorICogVGhlIGxpc3QgYXQgQGxpc3QgaXMgcmVpbml0aWFsaXNlZAorICovCitzdGF0aWMgaW5saW5lIHZvaWQgbGlzdF9zcGxpY2VfaW5pdChzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LAorCQkJCSAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQoreworCWlmICghbGlzdF9lbXB0eShsaXN0KSkgeworCQlfX2xpc3Rfc3BsaWNlKGxpc3QsIGhlYWQpOworCQlJTklUX0xJU1RfSEVBRChsaXN0KTsKKwl9Cit9CisKKy8qKgorICogbGlzdF9lbnRyeSAtIGdldCB0aGUgc3RydWN0IGZvciB0aGlzIGVudHJ5CisgKiBAcHRyOgl0aGUgJnN0cnVjdCBsaXN0X2hlYWQgcG9pbnRlci4KKyAqIEB0eXBlOgl0aGUgdHlwZSBvZiB0aGUgc3RydWN0IHRoaXMgaXMgZW1iZWRkZWQgaW4uCisgKiBAbWVtYmVyOgl0aGUgbmFtZSBvZiB0aGUgbGlzdF9zdHJ1Y3Qgd2l0aGluIHRoZSBzdHJ1Y3QuCisgKi8KKyNkZWZpbmUgbGlzdF9lbnRyeShwdHIsIHR5cGUsIG1lbWJlcikgXAorCWNvbnRhaW5lcl9vZihwdHIsIHR5cGUsIG1lbWJlcikKKworLyoqCisgKiBsaXN0X2Zvcl9lYWNoCS0JaXRlcmF0ZSBvdmVyIGEgbGlzdAorICogQHBvczoJdGhlICZzdHJ1Y3QgbGlzdF9oZWFkIHRvIHVzZSBhcyBhIGxvb3AgY291bnRlci4KKyAqIEBoZWFkOgl0aGUgaGVhZCBmb3IgeW91ciBsaXN0LgorICovCisjZGVmaW5lIGxpc3RfZm9yX2VhY2gocG9zLCBoZWFkKSBcCisJZm9yIChwb3MgPSAoaGVhZCktPm5leHQ7IHByZWZldGNoKHBvcy0+bmV4dCksIHBvcyAhPSAoaGVhZCk7IFwKKyAgICAgICAgCXBvcyA9IHBvcy0+bmV4dCkKKworLyoqCisgKiBfX2xpc3RfZm9yX2VhY2gJLQlpdGVyYXRlIG92ZXIgYSBsaXN0CisgKiBAcG9zOgl0aGUgJnN0cnVjdCBsaXN0X2hlYWQgdG8gdXNlIGFzIGEgbG9vcCBjb3VudGVyLgorICogQGhlYWQ6CXRoZSBoZWFkIGZvciB5b3VyIGxpc3QuCisgKgorICogVGhpcyB2YXJpYW50IGRpZmZlcnMgZnJvbSBsaXN0X2Zvcl9lYWNoKCkgaW4gdGhhdCBpdCdzIHRoZQorICogc2ltcGxlc3QgcG9zc2libGUgbGlzdCBpdGVyYXRpb24gY29kZSwgbm8gcHJlZmV0Y2hpbmcgaXMgZG9uZS4KKyAqIFVzZSB0aGlzIGZvciBjb2RlIHRoYXQga25vd3MgdGhlIGxpc3QgdG8gYmUgdmVyeSBzaG9ydCAoZW1wdHkKKyAqIG9yIDEgZW50cnkpIG1vc3Qgb2YgdGhlIHRpbWUuCisgKi8KKyNkZWZpbmUgX19saXN0X2Zvcl9lYWNoKHBvcywgaGVhZCkgXAorCWZvciAocG9zID0gKGhlYWQpLT5uZXh0OyBwb3MgIT0gKGhlYWQpOyBwb3MgPSBwb3MtPm5leHQpCisKKy8qKgorICogbGlzdF9mb3JfZWFjaF9wcmV2CS0JaXRlcmF0ZSBvdmVyIGEgbGlzdCBiYWNrd2FyZHMKKyAqIEBwb3M6CXRoZSAmc3RydWN0IGxpc3RfaGVhZCB0byB1c2UgYXMgYSBsb29wIGNvdW50ZXIuCisgKiBAaGVhZDoJdGhlIGhlYWQgZm9yIHlvdXIgbGlzdC4KKyAqLworI2RlZmluZSBsaXN0X2Zvcl9lYWNoX3ByZXYocG9zLCBoZWFkKSBcCisJZm9yIChwb3MgPSAoaGVhZCktPnByZXY7IHByZWZldGNoKHBvcy0+cHJldiksIHBvcyAhPSAoaGVhZCk7IFwKKyAgICAgICAgCXBvcyA9IHBvcy0+cHJldikKKworLyoqCisgKiBsaXN0X2Zvcl9lYWNoX3NhZmUJLQlpdGVyYXRlIG92ZXIgYSBsaXN0IHNhZmUgYWdhaW5zdCByZW1vdmFsIG9mIGxpc3QgZW50cnkKKyAqIEBwb3M6CXRoZSAmc3RydWN0IGxpc3RfaGVhZCB0byB1c2UgYXMgYSBsb29wIGNvdW50ZXIuCisgKiBAbjoJCWFub3RoZXIgJnN0cnVjdCBsaXN0X2hlYWQgdG8gdXNlIGFzIHRlbXBvcmFyeSBzdG9yYWdlCisgKiBAaGVhZDoJdGhlIGhlYWQgZm9yIHlvdXIgbGlzdC4KKyAqLworI2RlZmluZSBsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCBuLCBoZWFkKSBcCisJZm9yIChwb3MgPSAoaGVhZCktPm5leHQsIG4gPSBwb3MtPm5leHQ7IHBvcyAhPSAoaGVhZCk7IFwKKwkJcG9zID0gbiwgbiA9IHBvcy0+bmV4dCkKKworLyoqCisgKiBsaXN0X2Zvcl9lYWNoX2VudHJ5CS0JaXRlcmF0ZSBvdmVyIGxpc3Qgb2YgZ2l2ZW4gdHlwZQorICogQHBvczoJdGhlIHR5cGUgKiB0byB1c2UgYXMgYSBsb29wIGNvdW50ZXIuCisgKiBAaGVhZDoJdGhlIGhlYWQgZm9yIHlvdXIgbGlzdC4KKyAqIEBtZW1iZXI6CXRoZSBuYW1lIG9mIHRoZSBsaXN0X3N0cnVjdCB3aXRoaW4gdGhlIHN0cnVjdC4KKyAqLworI2RlZmluZSBsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgaGVhZCwgbWVtYmVyKQkJCQlcCisJZm9yIChwb3MgPSBsaXN0X2VudHJ5KChoZWFkKS0+bmV4dCwgdHlwZW9mKCpwb3MpLCBtZW1iZXIpOwlcCisJICAgICBwcmVmZXRjaChwb3MtPm1lbWJlci5uZXh0KSwgJnBvcy0+bWVtYmVyICE9IChoZWFkKTsgCVwKKwkgICAgIHBvcyA9IGxpc3RfZW50cnkocG9zLT5tZW1iZXIubmV4dCwgdHlwZW9mKCpwb3MpLCBtZW1iZXIpKQorCisvKioKKyAqIGxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZSAtIGl0ZXJhdGUgYmFja3dhcmRzIG92ZXIgbGlzdCBvZiBnaXZlbiB0eXBlLgorICogQHBvczoJdGhlIHR5cGUgKiB0byB1c2UgYXMgYSBsb29wIGNvdW50ZXIuCisgKiBAaGVhZDoJdGhlIGhlYWQgZm9yIHlvdXIgbGlzdC4KKyAqIEBtZW1iZXI6CXRoZSBuYW1lIG9mIHRoZSBsaXN0X3N0cnVjdCB3aXRoaW4gdGhlIHN0cnVjdC4KKyAqLworI2RlZmluZSBsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2UocG9zLCBoZWFkLCBtZW1iZXIpCQkJXAorCWZvciAocG9zID0gbGlzdF9lbnRyeSgoaGVhZCktPnByZXYsIHR5cGVvZigqcG9zKSwgbWVtYmVyKTsJXAorCSAgICAgcHJlZmV0Y2gocG9zLT5tZW1iZXIucHJldiksICZwb3MtPm1lbWJlciAhPSAoaGVhZCk7IAlcCisJICAgICBwb3MgPSBsaXN0X2VudHJ5KHBvcy0+bWVtYmVyLnByZXYsIHR5cGVvZigqcG9zKSwgbWVtYmVyKSkKKworLyoqCisgKiBsaXN0X3ByZXBhcmVfZW50cnkgLSBwcmVwYXJlIGEgcG9zIGVudHJ5IGZvciB1c2UgYXMgYSBzdGFydCBwb2ludCBpbgorICoJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlCisgKiBAcG9zOgl0aGUgdHlwZSAqIHRvIHVzZSBhcyBhIHN0YXJ0IHBvaW50CisgKiBAaGVhZDoJdGhlIGhlYWQgb2YgdGhlIGxpc3QKKyAqIEBtZW1iZXI6CXRoZSBuYW1lIG9mIHRoZSBsaXN0X3N0cnVjdCB3aXRoaW4gdGhlIHN0cnVjdC4KKyAqLworI2RlZmluZSBsaXN0X3ByZXBhcmVfZW50cnkocG9zLCBoZWFkLCBtZW1iZXIpIFwKKwkoKHBvcykgPyA6IGxpc3RfZW50cnkoaGVhZCwgdHlwZW9mKCpwb3MpLCBtZW1iZXIpKQorCisvKioKKyAqIGxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWUgLQlpdGVyYXRlIG92ZXIgbGlzdCBvZiBnaXZlbiB0eXBlCisgKgkJCWNvbnRpbnVpbmcgYWZ0ZXIgZXhpc3RpbmcgcG9pbnQKKyAqIEBwb3M6CXRoZSB0eXBlICogdG8gdXNlIGFzIGEgbG9vcCBjb3VudGVyLgorICogQGhlYWQ6CXRoZSBoZWFkIGZvciB5b3VyIGxpc3QuCisgKiBAbWVtYmVyOgl0aGUgbmFtZSBvZiB0aGUgbGlzdF9zdHJ1Y3Qgd2l0aGluIHRoZSBzdHJ1Y3QuCisgKi8KKyNkZWZpbmUgbGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZShwb3MsIGhlYWQsIG1lbWJlcikgCQlcCisJZm9yIChwb3MgPSBsaXN0X2VudHJ5KHBvcy0+bWVtYmVyLm5leHQsIHR5cGVvZigqcG9zKSwgbWVtYmVyKTsJXAorCSAgICAgcHJlZmV0Y2gocG9zLT5tZW1iZXIubmV4dCksICZwb3MtPm1lbWJlciAhPSAoaGVhZCk7CVwKKwkgICAgIHBvcyA9IGxpc3RfZW50cnkocG9zLT5tZW1iZXIubmV4dCwgdHlwZW9mKCpwb3MpLCBtZW1iZXIpKQorCisvKioKKyAqIGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSAtIGl0ZXJhdGUgb3ZlciBsaXN0IG9mIGdpdmVuIHR5cGUgc2FmZSBhZ2FpbnN0IHJlbW92YWwgb2YgbGlzdCBlbnRyeQorICogQHBvczoJdGhlIHR5cGUgKiB0byB1c2UgYXMgYSBsb29wIGNvdW50ZXIuCisgKiBAbjoJCWFub3RoZXIgdHlwZSAqIHRvIHVzZSBhcyB0ZW1wb3Jhcnkgc3RvcmFnZQorICogQGhlYWQ6CXRoZSBoZWFkIGZvciB5b3VyIGxpc3QuCisgKiBAbWVtYmVyOgl0aGUgbmFtZSBvZiB0aGUgbGlzdF9zdHJ1Y3Qgd2l0aGluIHRoZSBzdHJ1Y3QuCisgKi8KKyNkZWZpbmUgbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBvcywgbiwgaGVhZCwgbWVtYmVyKQkJCVwKKwlmb3IgKHBvcyA9IGxpc3RfZW50cnkoKGhlYWQpLT5uZXh0LCB0eXBlb2YoKnBvcyksIG1lbWJlciksCVwKKwkJbiA9IGxpc3RfZW50cnkocG9zLT5tZW1iZXIubmV4dCwgdHlwZW9mKCpwb3MpLCBtZW1iZXIpOwlcCisJICAgICAmcG9zLT5tZW1iZXIgIT0gKGhlYWQpOyAJCQkJCVwKKwkgICAgIHBvcyA9IG4sIG4gPSBsaXN0X2VudHJ5KG4tPm1lbWJlci5uZXh0LCB0eXBlb2YoKm4pLCBtZW1iZXIpKQorCisvKioKKyAqIGxpc3RfZm9yX2VhY2hfcmN1CS0JaXRlcmF0ZSBvdmVyIGFuIHJjdS1wcm90ZWN0ZWQgbGlzdAorICogQHBvczoJdGhlICZzdHJ1Y3QgbGlzdF9oZWFkIHRvIHVzZSBhcyBhIGxvb3AgY291bnRlci4KKyAqIEBoZWFkOgl0aGUgaGVhZCBmb3IgeW91ciBsaXN0LgorICoKKyAqIFRoaXMgbGlzdC10cmF2ZXJzYWwgcHJpbWl0aXZlIG1heSBzYWZlbHkgcnVuIGNvbmN1cnJlbnRseSB3aXRoCisgKiB0aGUgX3JjdSBsaXN0LW11dGF0aW9uIHByaW1pdGl2ZXMgc3VjaCBhcyBsaXN0X2FkZF9yY3UoKQorICogYXMgbG9uZyBhcyB0aGUgdHJhdmVyc2FsIGlzIGd1YXJkZWQgYnkgcmN1X3JlYWRfbG9jaygpLgorICovCisjZGVmaW5lIGxpc3RfZm9yX2VhY2hfcmN1KHBvcywgaGVhZCkgXAorCWZvciAocG9zID0gKGhlYWQpLT5uZXh0OyBwcmVmZXRjaChwb3MtPm5leHQpLCBwb3MgIT0gKGhlYWQpOyBcCisgICAgICAgIAlwb3MgPSByY3VfZGVyZWZlcmVuY2UocG9zLT5uZXh0KSkKKworI2RlZmluZSBfX2xpc3RfZm9yX2VhY2hfcmN1KHBvcywgaGVhZCkgXAorCWZvciAocG9zID0gKGhlYWQpLT5uZXh0OyBwb3MgIT0gKGhlYWQpOyBcCisgICAgICAgIAlwb3MgPSByY3VfZGVyZWZlcmVuY2UocG9zLT5uZXh0KSkKKworLyoqCisgKiBsaXN0X2Zvcl9lYWNoX3NhZmVfcmN1CS0JaXRlcmF0ZSBvdmVyIGFuIHJjdS1wcm90ZWN0ZWQgbGlzdCBzYWZlCisgKgkJCQkJYWdhaW5zdCByZW1vdmFsIG9mIGxpc3QgZW50cnkKKyAqIEBwb3M6CXRoZSAmc3RydWN0IGxpc3RfaGVhZCB0byB1c2UgYXMgYSBsb29wIGNvdW50ZXIuCisgKiBAbjoJCWFub3RoZXIgJnN0cnVjdCBsaXN0X2hlYWQgdG8gdXNlIGFzIHRlbXBvcmFyeSBzdG9yYWdlCisgKiBAaGVhZDoJdGhlIGhlYWQgZm9yIHlvdXIgbGlzdC4KKyAqCisgKiBUaGlzIGxpc3QtdHJhdmVyc2FsIHByaW1pdGl2ZSBtYXkgc2FmZWx5IHJ1biBjb25jdXJyZW50bHkgd2l0aAorICogdGhlIF9yY3UgbGlzdC1tdXRhdGlvbiBwcmltaXRpdmVzIHN1Y2ggYXMgbGlzdF9hZGRfcmN1KCkKKyAqIGFzIGxvbmcgYXMgdGhlIHRyYXZlcnNhbCBpcyBndWFyZGVkIGJ5IHJjdV9yZWFkX2xvY2soKS4KKyAqLworI2RlZmluZSBsaXN0X2Zvcl9lYWNoX3NhZmVfcmN1KHBvcywgbiwgaGVhZCkgXAorCWZvciAocG9zID0gKGhlYWQpLT5uZXh0LCBuID0gcG9zLT5uZXh0OyBwb3MgIT0gKGhlYWQpOyBcCisJCXBvcyA9IHJjdV9kZXJlZmVyZW5jZShuKSwgbiA9IHBvcy0+bmV4dCkKKworLyoqCisgKiBsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdQktCWl0ZXJhdGUgb3ZlciByY3UgbGlzdCBvZiBnaXZlbiB0eXBlCisgKiBAcG9zOgl0aGUgdHlwZSAqIHRvIHVzZSBhcyBhIGxvb3AgY291bnRlci4KKyAqIEBoZWFkOgl0aGUgaGVhZCBmb3IgeW91ciBsaXN0LgorICogQG1lbWJlcjoJdGhlIG5hbWUgb2YgdGhlIGxpc3Rfc3RydWN0IHdpdGhpbiB0aGUgc3RydWN0LgorICoKKyAqIFRoaXMgbGlzdC10cmF2ZXJzYWwgcHJpbWl0aXZlIG1heSBzYWZlbHkgcnVuIGNvbmN1cnJlbnRseSB3aXRoCisgKiB0aGUgX3JjdSBsaXN0LW11dGF0aW9uIHByaW1pdGl2ZXMgc3VjaCBhcyBsaXN0X2FkZF9yY3UoKQorICogYXMgbG9uZyBhcyB0aGUgdHJhdmVyc2FsIGlzIGd1YXJkZWQgYnkgcmN1X3JlYWRfbG9jaygpLgorICovCisjZGVmaW5lIGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBvcywgaGVhZCwgbWVtYmVyKQkJCVwKKwlmb3IgKHBvcyA9IGxpc3RfZW50cnkoKGhlYWQpLT5uZXh0LCB0eXBlb2YoKnBvcyksIG1lbWJlcik7CVwKKwkgICAgIHByZWZldGNoKHBvcy0+bWVtYmVyLm5leHQpLCAmcG9zLT5tZW1iZXIgIT0gKGhlYWQpOyAJXAorCSAgICAgcG9zID0gcmN1X2RlcmVmZXJlbmNlKGxpc3RfZW50cnkocG9zLT5tZW1iZXIubmV4dCwgCVwKKwkJCQkJdHlwZW9mKCpwb3MpLCBtZW1iZXIpKSkKKworCisvKioKKyAqIGxpc3RfZm9yX2VhY2hfY29udGludWVfcmN1CS0JaXRlcmF0ZSBvdmVyIGFuIHJjdS1wcm90ZWN0ZWQgbGlzdAorICoJCQljb250aW51aW5nIGFmdGVyIGV4aXN0aW5nIHBvaW50LgorICogQHBvczoJdGhlICZzdHJ1Y3QgbGlzdF9oZWFkIHRvIHVzZSBhcyBhIGxvb3AgY291bnRlci4KKyAqIEBoZWFkOgl0aGUgaGVhZCBmb3IgeW91ciBsaXN0LgorICoKKyAqIFRoaXMgbGlzdC10cmF2ZXJzYWwgcHJpbWl0aXZlIG1heSBzYWZlbHkgcnVuIGNvbmN1cnJlbnRseSB3aXRoCisgKiB0aGUgX3JjdSBsaXN0LW11dGF0aW9uIHByaW1pdGl2ZXMgc3VjaCBhcyBsaXN0X2FkZF9yY3UoKQorICogYXMgbG9uZyBhcyB0aGUgdHJhdmVyc2FsIGlzIGd1YXJkZWQgYnkgcmN1X3JlYWRfbG9jaygpLgorICovCisjZGVmaW5lIGxpc3RfZm9yX2VhY2hfY29udGludWVfcmN1KHBvcywgaGVhZCkgXAorCWZvciAoKHBvcykgPSAocG9zKS0+bmV4dDsgcHJlZmV0Y2goKHBvcyktPm5leHQpLCAocG9zKSAhPSAoaGVhZCk7IFwKKyAgICAgICAgCShwb3MpID0gcmN1X2RlcmVmZXJlbmNlKChwb3MpLT5uZXh0KSkKKworLyoKKyAqIERvdWJsZSBsaW5rZWQgbGlzdHMgd2l0aCBhIHNpbmdsZSBwb2ludGVyIGxpc3QgaGVhZC4KKyAqIE1vc3RseSB1c2VmdWwgZm9yIGhhc2ggdGFibGVzIHdoZXJlIHRoZSB0d28gcG9pbnRlciBsaXN0IGhlYWQgaXMKKyAqIHRvbyB3YXN0ZWZ1bC4KKyAqIFlvdSBsb3NlIHRoZSBhYmlsaXR5IHRvIGFjY2VzcyB0aGUgdGFpbCBpbiBPKDEpLgorICovCisKK3N0cnVjdCBobGlzdF9oZWFkIHsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqZmlyc3Q7Cit9OworCitzdHJ1Y3QgaGxpc3Rfbm9kZSB7CisJc3RydWN0IGhsaXN0X25vZGUgKm5leHQsICoqcHByZXY7Cit9OworCisjZGVmaW5lIEhMSVNUX0hFQURfSU5JVCB7IC5maXJzdCA9IE5VTEwgfQorI2RlZmluZSBITElTVF9IRUFEKG5hbWUpIHN0cnVjdCBobGlzdF9oZWFkIG5hbWUgPSB7ICAuZmlyc3QgPSBOVUxMIH0KKyNkZWZpbmUgSU5JVF9ITElTVF9IRUFEKHB0cikgKChwdHIpLT5maXJzdCA9IE5VTEwpCisjZGVmaW5lIElOSVRfSExJU1RfTk9ERShwdHIpICgocHRyKS0+bmV4dCA9IE5VTEwsIChwdHIpLT5wcHJldiA9IE5VTEwpCisKK3N0YXRpYyBpbmxpbmUgaW50IGhsaXN0X3VuaGFzaGVkKGNvbnN0IHN0cnVjdCBobGlzdF9ub2RlICpoKQoreworCXJldHVybiAhaC0+cHByZXY7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGhsaXN0X2VtcHR5KGNvbnN0IHN0cnVjdCBobGlzdF9oZWFkICpoKQoreworCXJldHVybiAhaC0+Zmlyc3Q7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2hsaXN0X2RlbChzdHJ1Y3QgaGxpc3Rfbm9kZSAqbikKK3sKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbmV4dCA9IG4tPm5leHQ7CisJc3RydWN0IGhsaXN0X25vZGUgKipwcHJldiA9IG4tPnBwcmV2OworCSpwcHJldiA9IG5leHQ7CisJaWYgKG5leHQpCisJCW5leHQtPnBwcmV2ID0gcHByZXY7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBobGlzdF9kZWwoc3RydWN0IGhsaXN0X25vZGUgKm4pCit7CisJX19obGlzdF9kZWwobik7CisJbi0+bmV4dCA9IExJU1RfUE9JU09OMTsKKwluLT5wcHJldiA9IExJU1RfUE9JU09OMjsKK30KKworLyoqCisgKiBobGlzdF9kZWxfcmN1IC0gZGVsZXRlcyBlbnRyeSBmcm9tIGhhc2ggbGlzdCB3aXRob3V0IHJlLWluaXRpYWxpemF0aW9uCisgKiBAbjogdGhlIGVsZW1lbnQgdG8gZGVsZXRlIGZyb20gdGhlIGhhc2ggbGlzdC4KKyAqCisgKiBOb3RlOiBsaXN0X3VuaGFzaGVkKCkgb24gZW50cnkgZG9lcyBub3QgcmV0dXJuIHRydWUgYWZ0ZXIgdGhpcywKKyAqIHRoZSBlbnRyeSBpcyBpbiBhbiB1bmRlZmluZWQgc3RhdGUuIEl0IGlzIHVzZWZ1bCBmb3IgUkNVIGJhc2VkCisgKiBsb2NrZnJlZSB0cmF2ZXJzYWwuCisgKgorICogSW4gcGFydGljdWxhciwgaXQgbWVhbnMgdGhhdCB3ZSBjYW4gbm90IHBvaXNvbiB0aGUgZm9yd2FyZAorICogcG9pbnRlcnMgdGhhdCBtYXkgc3RpbGwgYmUgdXNlZCBmb3Igd2Fsa2luZyB0aGUgaGFzaCBsaXN0LgorICoKKyAqIFRoZSBjYWxsZXIgbXVzdCB0YWtlIHdoYXRldmVyIHByZWNhdXRpb25zIGFyZSBuZWNlc3NhcnkKKyAqIChzdWNoIGFzIGhvbGRpbmcgYXBwcm9wcmlhdGUgbG9ja3MpIHRvIGF2b2lkIHJhY2luZworICogd2l0aCBhbm90aGVyIGxpc3QtbXV0YXRpb24gcHJpbWl0aXZlLCBzdWNoIGFzIGhsaXN0X2FkZF9oZWFkX3JjdSgpCisgKiBvciBobGlzdF9kZWxfcmN1KCksIHJ1bm5pbmcgb24gdGhpcyBzYW1lIGxpc3QuCisgKiBIb3dldmVyLCBpdCBpcyBwZXJmZWN0bHkgbGVnYWwgdG8gcnVuIGNvbmN1cnJlbnRseSB3aXRoCisgKiB0aGUgX3JjdSBsaXN0LXRyYXZlcnNhbCBwcmltaXRpdmVzLCBzdWNoIGFzCisgKiBobGlzdF9mb3JfZWFjaF9lbnRyeSgpLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaGxpc3RfZGVsX3JjdShzdHJ1Y3QgaGxpc3Rfbm9kZSAqbikKK3sKKwlfX2hsaXN0X2RlbChuKTsKKwluLT5wcHJldiA9IExJU1RfUE9JU09OMjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGhsaXN0X2RlbF9pbml0KHN0cnVjdCBobGlzdF9ub2RlICpuKQoreworCWlmIChuLT5wcHJldikgIHsKKwkJX19obGlzdF9kZWwobik7CisJCUlOSVRfSExJU1RfTk9ERShuKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBobGlzdF9hZGRfaGVhZChzdHJ1Y3QgaGxpc3Rfbm9kZSAqbiwgc3RydWN0IGhsaXN0X2hlYWQgKmgpCit7CisJc3RydWN0IGhsaXN0X25vZGUgKmZpcnN0ID0gaC0+Zmlyc3Q7CisJbi0+bmV4dCA9IGZpcnN0OworCWlmIChmaXJzdCkKKwkJZmlyc3QtPnBwcmV2ID0gJm4tPm5leHQ7CisJaC0+Zmlyc3QgPSBuOworCW4tPnBwcmV2ID0gJmgtPmZpcnN0OworfQorCisKKy8qKgorICogaGxpc3RfYWRkX2hlYWRfcmN1IC0gYWRkcyB0aGUgc3BlY2lmaWVkIGVsZW1lbnQgdG8gdGhlIHNwZWNpZmllZCBobGlzdCwKKyAqIHdoaWxlIHBlcm1pdHRpbmcgcmFjaW5nIHRyYXZlcnNhbHMuCisgKiBAbjogdGhlIGVsZW1lbnQgdG8gYWRkIHRvIHRoZSBoYXNoIGxpc3QuCisgKiBAaDogdGhlIGxpc3QgdG8gYWRkIHRvLgorICoKKyAqIFRoZSBjYWxsZXIgbXVzdCB0YWtlIHdoYXRldmVyIHByZWNhdXRpb25zIGFyZSBuZWNlc3NhcnkKKyAqIChzdWNoIGFzIGhvbGRpbmcgYXBwcm9wcmlhdGUgbG9ja3MpIHRvIGF2b2lkIHJhY2luZworICogd2l0aCBhbm90aGVyIGxpc3QtbXV0YXRpb24gcHJpbWl0aXZlLCBzdWNoIGFzIGhsaXN0X2FkZF9oZWFkX3JjdSgpCisgKiBvciBobGlzdF9kZWxfcmN1KCksIHJ1bm5pbmcgb24gdGhpcyBzYW1lIGxpc3QuCisgKiBIb3dldmVyLCBpdCBpcyBwZXJmZWN0bHkgbGVnYWwgdG8gcnVuIGNvbmN1cnJlbnRseSB3aXRoCisgKiB0aGUgX3JjdSBsaXN0LXRyYXZlcnNhbCBwcmltaXRpdmVzLCBzdWNoIGFzCisgKiBobGlzdF9mb3JfZWFjaF9yY3UoKSwgdXNlZCB0byBwcmV2ZW50IG1lbW9yeS1jb25zaXN0ZW5jeQorICogcHJvYmxlbXMgb24gQWxwaGEgQ1BVcy4gIFJlZ2FyZGxlc3Mgb2YgdGhlIHR5cGUgb2YgQ1BVLCB0aGUKKyAqIGxpc3QtdHJhdmVyc2FsIHByaW1pdGl2ZSBtdXN0IGJlIGd1YXJkZWQgYnkgcmN1X3JlYWRfbG9jaygpLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaGxpc3RfYWRkX2hlYWRfcmN1KHN0cnVjdCBobGlzdF9ub2RlICpuLAorCQkJCQlzdHJ1Y3QgaGxpc3RfaGVhZCAqaCkKK3sKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqZmlyc3QgPSBoLT5maXJzdDsKKwluLT5uZXh0ID0gZmlyc3Q7CisJbi0+cHByZXYgPSAmaC0+Zmlyc3Q7CisJc21wX3dtYigpOworCWlmIChmaXJzdCkKKwkJZmlyc3QtPnBwcmV2ID0gJm4tPm5leHQ7CisJaC0+Zmlyc3QgPSBuOworfQorCisvKiBuZXh0IG11c3QgYmUgIT0gTlVMTCAqLworc3RhdGljIGlubGluZSB2b2lkIGhsaXN0X2FkZF9iZWZvcmUoc3RydWN0IGhsaXN0X25vZGUgKm4sCisJCQkJCXN0cnVjdCBobGlzdF9ub2RlICpuZXh0KQoreworCW4tPnBwcmV2ID0gbmV4dC0+cHByZXY7CisJbi0+bmV4dCA9IG5leHQ7CisJbmV4dC0+cHByZXYgPSAmbi0+bmV4dDsKKwkqKG4tPnBwcmV2KSA9IG47Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBobGlzdF9hZGRfYWZ0ZXIoc3RydWN0IGhsaXN0X25vZGUgKm4sCisJCQkJCXN0cnVjdCBobGlzdF9ub2RlICpuZXh0KQoreworCW5leHQtPm5leHQgPSBuLT5uZXh0OworCW4tPm5leHQgPSBuZXh0OworCW5leHQtPnBwcmV2ID0gJm4tPm5leHQ7CisKKwlpZihuZXh0LT5uZXh0KQorCQluZXh0LT5uZXh0LT5wcHJldiAgPSAmbmV4dC0+bmV4dDsKK30KKworI2RlZmluZSBobGlzdF9lbnRyeShwdHIsIHR5cGUsIG1lbWJlcikgY29udGFpbmVyX29mKHB0cix0eXBlLG1lbWJlcikKKworI2RlZmluZSBobGlzdF9mb3JfZWFjaChwb3MsIGhlYWQpIFwKKwlmb3IgKHBvcyA9IChoZWFkKS0+Zmlyc3Q7IHBvcyAmJiAoeyBwcmVmZXRjaChwb3MtPm5leHQpOyAxOyB9KTsgXAorCSAgICAgcG9zID0gcG9zLT5uZXh0KQorCisjZGVmaW5lIGhsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCBuLCBoZWFkKSBcCisJZm9yIChwb3MgPSAoaGVhZCktPmZpcnN0OyBwb3MgJiYgKHsgbiA9IHBvcy0+bmV4dDsgMTsgfSk7IFwKKwkgICAgIHBvcyA9IG4pCisKKyNkZWZpbmUgaGxpc3RfZm9yX2VhY2hfcmN1KHBvcywgaGVhZCkgXAorCWZvciAoKHBvcykgPSAoaGVhZCktPmZpcnN0OyBwb3MgJiYgKHsgcHJlZmV0Y2goKHBvcyktPm5leHQpOyAxOyB9KTsgXAorCQkocG9zKSA9IHJjdV9kZXJlZmVyZW5jZSgocG9zKS0+bmV4dCkpCisKKy8qKgorICogaGxpc3RfZm9yX2VhY2hfZW50cnkJLSBpdGVyYXRlIG92ZXIgbGlzdCBvZiBnaXZlbiB0eXBlCisgKiBAdHBvczoJdGhlIHR5cGUgKiB0byB1c2UgYXMgYSBsb29wIGNvdW50ZXIuCisgKiBAcG9zOgl0aGUgJnN0cnVjdCBobGlzdF9ub2RlIHRvIHVzZSBhcyBhIGxvb3AgY291bnRlci4KKyAqIEBoZWFkOgl0aGUgaGVhZCBmb3IgeW91ciBsaXN0LgorICogQG1lbWJlcjoJdGhlIG5hbWUgb2YgdGhlIGhsaXN0X25vZGUgd2l0aGluIHRoZSBzdHJ1Y3QuCisgKi8KKyNkZWZpbmUgaGxpc3RfZm9yX2VhY2hfZW50cnkodHBvcywgcG9zLCBoZWFkLCBtZW1iZXIpCQkJIFwKKwlmb3IgKHBvcyA9IChoZWFkKS0+Zmlyc3Q7CQkJCQkgXAorCSAgICAgcG9zICYmICh7IHByZWZldGNoKHBvcy0+bmV4dCk7IDE7fSkgJiYJCQkgXAorCQkoeyB0cG9zID0gaGxpc3RfZW50cnkocG9zLCB0eXBlb2YoKnRwb3MpLCBtZW1iZXIpOyAxO30pOyBcCisJICAgICBwb3MgPSBwb3MtPm5leHQpCisKKy8qKgorICogaGxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWUgLSBpdGVyYXRlIG92ZXIgYSBobGlzdCBjb250aW51aW5nIGFmdGVyIGV4aXN0aW5nIHBvaW50CisgKiBAdHBvczoJdGhlIHR5cGUgKiB0byB1c2UgYXMgYSBsb29wIGNvdW50ZXIuCisgKiBAcG9zOgl0aGUgJnN0cnVjdCBobGlzdF9ub2RlIHRvIHVzZSBhcyBhIGxvb3AgY291bnRlci4KKyAqIEBtZW1iZXI6CXRoZSBuYW1lIG9mIHRoZSBobGlzdF9ub2RlIHdpdGhpbiB0aGUgc3RydWN0LgorICovCisjZGVmaW5lIGhsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlKHRwb3MsIHBvcywgbWVtYmVyKQkJIFwKKwlmb3IgKHBvcyA9IChwb3MpLT5uZXh0OwkJCQkJCSBcCisJICAgICBwb3MgJiYgKHsgcHJlZmV0Y2gocG9zLT5uZXh0KTsgMTt9KSAmJgkJCSBcCisJCSh7IHRwb3MgPSBobGlzdF9lbnRyeShwb3MsIHR5cGVvZigqdHBvcyksIG1lbWJlcik7IDE7fSk7IFwKKwkgICAgIHBvcyA9IHBvcy0+bmV4dCkKKworLyoqCisgKiBobGlzdF9mb3JfZWFjaF9lbnRyeV9mcm9tIC0gaXRlcmF0ZSBvdmVyIGEgaGxpc3QgY29udGludWluZyBmcm9tIGV4aXN0aW5nIHBvaW50CisgKiBAdHBvczoJdGhlIHR5cGUgKiB0byB1c2UgYXMgYSBsb29wIGNvdW50ZXIuCisgKiBAcG9zOgl0aGUgJnN0cnVjdCBobGlzdF9ub2RlIHRvIHVzZSBhcyBhIGxvb3AgY291bnRlci4KKyAqIEBtZW1iZXI6CXRoZSBuYW1lIG9mIHRoZSBobGlzdF9ub2RlIHdpdGhpbiB0aGUgc3RydWN0LgorICovCisjZGVmaW5lIGhsaXN0X2Zvcl9lYWNoX2VudHJ5X2Zyb20odHBvcywgcG9zLCBtZW1iZXIpCQkJIFwKKwlmb3IgKDsgcG9zICYmICh7IHByZWZldGNoKHBvcy0+bmV4dCk7IDE7fSkgJiYJCQkgXAorCQkoeyB0cG9zID0gaGxpc3RfZW50cnkocG9zLCB0eXBlb2YoKnRwb3MpLCBtZW1iZXIpOyAxO30pOyBcCisJICAgICBwb3MgPSBwb3MtPm5leHQpCisKKy8qKgorICogaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSAtIGl0ZXJhdGUgb3ZlciBsaXN0IG9mIGdpdmVuIHR5cGUgc2FmZSBhZ2FpbnN0IHJlbW92YWwgb2YgbGlzdCBlbnRyeQorICogQHRwb3M6CXRoZSB0eXBlICogdG8gdXNlIGFzIGEgbG9vcCBjb3VudGVyLgorICogQHBvczoJdGhlICZzdHJ1Y3QgaGxpc3Rfbm9kZSB0byB1c2UgYXMgYSBsb29wIGNvdW50ZXIuCisgKiBAbjoJCWFub3RoZXIgJnN0cnVjdCBobGlzdF9ub2RlIHRvIHVzZSBhcyB0ZW1wb3Jhcnkgc3RvcmFnZQorICogQGhlYWQ6CXRoZSBoZWFkIGZvciB5b3VyIGxpc3QuCisgKiBAbWVtYmVyOgl0aGUgbmFtZSBvZiB0aGUgaGxpc3Rfbm9kZSB3aXRoaW4gdGhlIHN0cnVjdC4KKyAqLworI2RlZmluZSBobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHRwb3MsIHBvcywgbiwgaGVhZCwgbWVtYmVyKSAJCSBcCisJZm9yIChwb3MgPSAoaGVhZCktPmZpcnN0OwkJCQkJIFwKKwkgICAgIHBvcyAmJiAoeyBuID0gcG9zLT5uZXh0OyAxOyB9KSAmJiAJCQkJIFwKKwkJKHsgdHBvcyA9IGhsaXN0X2VudHJ5KHBvcywgdHlwZW9mKCp0cG9zKSwgbWVtYmVyKTsgMTt9KTsgXAorCSAgICAgcG9zID0gbikKKworLyoqCisgKiBobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UgLSBpdGVyYXRlIG92ZXIgcmN1IGxpc3Qgb2YgZ2l2ZW4gdHlwZQorICogQHBvczoJdGhlIHR5cGUgKiB0byB1c2UgYXMgYSBsb29wIGNvdW50ZXIuCisgKiBAcG9zOgl0aGUgJnN0cnVjdCBobGlzdF9ub2RlIHRvIHVzZSBhcyBhIGxvb3AgY291bnRlci4KKyAqIEBoZWFkOgl0aGUgaGVhZCBmb3IgeW91ciBsaXN0LgorICogQG1lbWJlcjoJdGhlIG5hbWUgb2YgdGhlIGhsaXN0X25vZGUgd2l0aGluIHRoZSBzdHJ1Y3QuCisgKgorICogVGhpcyBsaXN0LXRyYXZlcnNhbCBwcmltaXRpdmUgbWF5IHNhZmVseSBydW4gY29uY3VycmVudGx5IHdpdGgKKyAqIHRoZSBfcmN1IGxpc3QtbXV0YXRpb24gcHJpbWl0aXZlcyBzdWNoIGFzIGhsaXN0X2FkZF9yY3UoKQorICogYXMgbG9uZyBhcyB0aGUgdHJhdmVyc2FsIGlzIGd1YXJkZWQgYnkgcmN1X3JlYWRfbG9jaygpLgorICovCisjZGVmaW5lIGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh0cG9zLCBwb3MsIGhlYWQsIG1lbWJlcikJCSBcCisJZm9yIChwb3MgPSAoaGVhZCktPmZpcnN0OwkJCQkJIFwKKwkgICAgIHBvcyAmJiAoeyBwcmVmZXRjaChwb3MtPm5leHQpOyAxO30pICYmCQkJIFwKKwkJKHsgdHBvcyA9IGhsaXN0X2VudHJ5KHBvcywgdHlwZW9mKCp0cG9zKSwgbWVtYmVyKTsgMTt9KTsgXAorCSAgICAgcG9zID0gcmN1X2RlcmVmZXJlbmNlKHBvcy0+bmV4dCkpCisKKyNlbHNlCisjd2FybmluZyAiZG9uJ3QgaW5jbHVkZSBrZXJuZWwgaGVhZGVycyBpbiB1c2Vyc3BhY2UiCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xsYy5oIGIvaW5jbHVkZS9saW51eC9sbGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWYyZTZkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9sbGMuaApAQCAtMCwwICsxLDgwIEBACisjaWZuZGVmIF9fTElOVVhfTExDX0gKKyNkZWZpbmUgX19MSU5VWF9MTENfSAorLyoKKyAqIElFRUUgODAyLjIgVXNlciBJbnRlcmZhY2UgU0FQcyBmb3IgTGludXgsIGRhdGEgc3RydWN0dXJlcyBhbmQgaW5kaWNhdG9ycy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEgYnkgSmF5IFNjaHVsaXN0IDxqc2NobHN0QHNhbWJhLm9yZz4KKyAqCisgKiBUaGlzIHByb2dyYW0gY2FuIGJlIHJlZGlzdHJpYnV0ZWQgb3IgbW9kaWZpZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgd2l0aG91dCBhbnkgd2FycmFudHkgb3IgaW1wbGllZCB3YXJyYW50eQorICogb2YgbWVyY2hhbnRhYmlsaXR5IG9yIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLgorICoKKyAqIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2RlZmluZSBfX0xMQ19TT0NLX1NJWkVfXyAxNgkvKiBzaXplb2Yoc29ja2FkZHJfbGxjKSwgd29yZCBhbGlnbi4gKi8KK3N0cnVjdCBzb2NrYWRkcl9sbGMgeworCXNhX2ZhbWlseV90ICAgICBzbGxjX2ZhbWlseTsJLyogQUZfTExDICovCisJc2FfZmFtaWx5X3QJc2xsY19hcnBocmQ7CS8qIEFSUEhSRF9FVEhFUiAqLworCXVuc2lnbmVkIGNoYXIgICBzbGxjX3Rlc3Q7CisJdW5zaWduZWQgY2hhciAgIHNsbGNfeGlkOworCXVuc2lnbmVkIGNoYXIJc2xsY191YTsJLyogVUEgZGF0YSwgb25seSBmb3IgU09DS19TVFJFQU0uICovCisJdW5zaWduZWQgY2hhciAgIHNsbGNfc2FwOworCXVuc2lnbmVkIGNoYXIgICBzbGxjX21hY1tJRkhXQUREUkxFTl07CisJdW5zaWduZWQgY2hhciAgIF9fcGFkW19fTExDX1NPQ0tfU0laRV9fIC0gc2l6ZW9mKHNhX2ZhbWlseV90KSAqIDIgLQorCQkJICAgICAgc2l6ZW9mKHVuc2lnbmVkIGNoYXIpICogNCAtIElGSFdBRERSTEVOXTsKK307CisKKy8qIHNvY2tvcHQgZGVmaW5pdGlvbnMuICovCitlbnVtIGxsY19zb2Nrb3B0cyB7CisJTExDX09QVF9VTktOT1dOID0gMCwKKwlMTENfT1BUX1JFVFJZLAkJLyogbWF4IHJldHJhbnMgYXR0ZW1wdHMuICovCisJTExDX09QVF9TSVpFLAkJLyogbWF4IFBEVSBzaXplIChvY3RldHMpLiAqLworCUxMQ19PUFRfQUNLX1RNUl9FWFAsCS8qIGFjayBleHBpcmUgdGltZSAoc2VjcykuICovCisJTExDX09QVF9QX1RNUl9FWFAsCS8qIHBmIGN5Y2xlIGV4cGlyZSB0aW1lIChzZWNzKS4gKi8KKwlMTENfT1BUX1JFSl9UTVJfRVhQLAkvKiByZWogc2VudCBleHBpcmUgdGltZSAoc2VjcykuICovCisJTExDX09QVF9CVVNZX1RNUl9FWFAsCS8qIGJ1c3kgc3RhdGUgZXhwaXJlIHRpbWUgKHNlY3MpLiAqLworCUxMQ19PUFRfVFhfV0lOLAkJLyogdHggd2luZG93IHNpemUuICovCisJTExDX09QVF9SWF9XSU4sCQkvKiByeCB3aW5kb3cgc2l6ZS4gKi8KKwlMTENfT1BUX01BWAorfTsKKworI2RlZmluZSBMTENfT1BUX01BWF9SRVRSWQkgMTAwCisjZGVmaW5lIExMQ19PUFRfTUFYX1NJWkUJNDE5NgorI2RlZmluZSBMTENfT1BUX01BWF9XSU4JCSAxMjcKKyNkZWZpbmUgTExDX09QVF9NQVhfQUNLX1RNUl9FWFAJICA2MAorI2RlZmluZSBMTENfT1BUX01BWF9QX1RNUl9FWFAJICA2MAorI2RlZmluZSBMTENfT1BUX01BWF9SRUpfVE1SX0VYUAkgIDYwCisjZGVmaW5lIExMQ19PUFRfTUFYX0JVU1lfVE1SX0VYUCAgNjAKKworLyogTExDIFNBUCB0eXBlcy4gKi8KKyNkZWZpbmUgTExDX1NBUF9OVUxMCTB4MDAJCS8qIE5VTEwgU0FQLiAJCQkqLworI2RlZmluZSBMTENfU0FQX0xMQwkweDAyCQkvKiBMTEMgU3VibGF5ZXIgTWFuYWdtZW50LiAJKi8KKyNkZWZpbmUgTExDX1NBUF9TTkEJMHgwNAkJLyogU05BIFBhdGggQ29udHJvbC4gCQkqLworI2RlZmluZSBMTENfU0FQX1BOTQkweDBFCQkvKiBQcm93YXkgTmV0d29yayBNYW5hZ21lbnQuCSovCQorI2RlZmluZSBMTENfU0FQX0lQCTB4MDYJCS8qIFRDUC9JUC4gCQkJKi8KKyNkZWZpbmUgTExDX1NBUF9CU1BBTgkweDQyCQkvKiBCcmlkZ2UgU3Bhbm5pbmcgVHJlZSBQcm90bwkqLworI2RlZmluZSBMTENfU0FQX01NUwkweDRFCQkvKiBNYW51ZmFjdHVyaW5nIE1lc3NhZ2UgU3J2LgkqLworI2RlZmluZSBMTENfU0FQXzgyMDgJMHg3RQkJLyogSVNPIDgyMDgJCQkqLworI2RlZmluZSBMTENfU0FQXzNDT00JMHg4MAkJLyogM0NPTS4gCQkJKi8KKyNkZWZpbmUgTExDX1NBUF9QUk8JMHg4RQkJLyogUHJvd2F5IEFjdGl2ZSBTdGF0aW9uIExpc3QJKi8KKyNkZWZpbmUgTExDX1NBUF9TTkFQCTB4QUEJCS8qIFNOQVAuIAkJCSovCisjZGVmaW5lIExMQ19TQVBfQkFOWUFOCTB4QkMJCS8qIEJhbnlhbi4gCQkJKi8KKyNkZWZpbmUgTExDX1NBUF9JUFgJMHhFMAkJLyogSVBYL1NQWC4gCQkJKi8KKyNkZWZpbmUgTExDX1NBUF9ORVRCRVVJCTB4RjAJCS8qIE5ldEJFVUkuIAkJCSovCisjZGVmaW5lIExMQ19TQVBfTEFOTUdSCTB4RjQJCS8qIExhbk1hbmFnZXIuIAkJCSovCisjZGVmaW5lIExMQ19TQVBfSU1QTAkweEY4CQkvKiBJTVBMCQkJCSovCisjZGVmaW5lIExMQ19TQVBfRElTQwkweEZDCQkvKiBEaXNjb3ZlcnkJCQkqLworI2RlZmluZSBMTENfU0FQX09TSQkweEZFCQkvKiBPU0kgTmV0d29yayBMYXllcnMuIAkJKi8KKyNkZWZpbmUgTExDX1NBUF9MQVIJMHhEQwkJLyogTEFOIEFkZHJlc3MgUmVzb2x1dGlvbiAJKi8KKyNkZWZpbmUgTExDX1NBUF9STQkweEQ0CQkvKiBSZXNvdXJjZSBNYW5hZ2VtZW50IAkJKi8KKyNkZWZpbmUgTExDX1NBUF9HTE9CQUwJMHhGRgkJLyogR2xvYmFsIFNBUC4gCQkJKi8KKworI2lmZGVmIF9fS0VSTkVMX18KKyNkZWZpbmUgTExDX1NBUF9EWU5fU1RBUlQJMHhDMAorI2RlZmluZSBMTENfU0FQX0RZTl9TVE9QCTB4REUKKyNkZWZpbmUgTExDX1NBUF9EWU5fVFJJRVMJNAorCisjZGVmaW5lIGxsY191aV9za2JfY2IoX19za2IpICgoc3RydWN0IHNvY2thZGRyX2xsYyAqKSYoKF9fc2tiKS0+Y2JbMF0pKQorI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAvKiBfX0xJTlVYX0xMQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xvY2tkL2JpbmQuaCBiL2luY2x1ZGUvbGludXgvbG9ja2QvYmluZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwNTRkZWIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2xvY2tkL2JpbmQuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogbGludXgvaW5jbHVkZS9saW51eC9sb2NrZC9iaW5kLmgKKyAqCisgKiBUaGlzIGlzIHRoZSBwYXJ0IG9mIGxvY2tkIHZpc2libGUgdG8gbmZzZCBhbmQgdGhlIG5mcyBjbGllbnQuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk2LCBPbGFmIEtpcmNoIDxva2lyQG1vbmFkLnN3Yi5kZT4KKyAqLworCisjaWZuZGVmIExJTlVYX0xPQ0tEX0JJTkRfSAorI2RlZmluZSBMSU5VWF9MT0NLRF9CSU5EX0gKKworI2luY2x1ZGUgPGxpbnV4L2xvY2tkL25sbS5oPgorCisvKiBEdW1teSBkZWNsYXJhdGlvbnMgKi8KK3N0cnVjdCBzdmNfcnFzdDsKKworLyoKKyAqIFRoaXMgaXMgdGhlIHNldCBvZiBmdW5jdGlvbnMgZm9yIGxvY2tkLT5uZnNkIGNvbW11bmljYXRpb24KKyAqLworc3RydWN0IG5sbXN2Y19iaW5kaW5nIHsKKwl1MzIJCQkoKmZvcGVuKShzdHJ1Y3Qgc3ZjX3Jxc3QgKiwKKwkJCQkJCXN0cnVjdCBuZnNfZmggKiwKKwkJCQkJCXN0cnVjdCBmaWxlICoqKTsKKwl2b2lkCQkJKCpmY2xvc2UpKHN0cnVjdCBmaWxlICopOworfTsKKworZXh0ZXJuIHN0cnVjdCBubG1zdmNfYmluZGluZyAqCW5sbXN2Y19vcHM7CisKKy8qCisgKiBGdW5jdGlvbnMgZXhwb3J0ZWQgYnkgdGhlIGxvY2tkIG1vZHVsZQorICovCitleHRlcm4gaW50CW5sbWNsbnRfcHJvYyhzdHJ1Y3QgaW5vZGUgKiwgaW50LCBzdHJ1Y3QgZmlsZV9sb2NrICopOworZXh0ZXJuIGludAlsb2NrZF91cCh2b2lkKTsKK2V4dGVybiB2b2lkCWxvY2tkX2Rvd24odm9pZCk7CisKKyNlbmRpZiAvKiBMSU5VWF9MT0NLRF9CSU5EX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbG9ja2QvZGVidWcuaCBiL2luY2x1ZGUvbGludXgvbG9ja2QvZGVidWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGIyYjdmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9sb2NrZC9kZWJ1Zy5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2xpbnV4L2xvY2tkL2RlYnVnLmgKKyAqCisgKiBEZWJ1Z2dpbmcgc3R1ZmYuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk2IE9sYWYgS2lyY2ggPG9raXJAbW9uYWQuc3diLmRlPgorICovCisKKyNpZm5kZWYgTElOVVhfTE9DS0RfREVCVUdfSAorI2RlZmluZSBMSU5VWF9MT0NLRF9ERUJVR19ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxsaW51eC9zdW5ycGMvZGVidWcuaD4KKworLyoKKyAqIEVuYWJsZSBsb2NrZCBkZWJ1Z2dpbmcuCisgKiBSZXF1aXJlcyBSUENfREVCVUcuCisgKi8KKyNpZmRlZiBSUENfREVCVUcKKyMgZGVmaW5lIExPQ0tEX0RFQlVHCQkxCisjZW5kaWYKKworI3VuZGVmIGlmZGVidWcKKyNpZiBkZWZpbmVkKFJQQ19ERUJVRykgJiYgZGVmaW5lZChMT0NLRF9ERUJVRykKKyMgZGVmaW5lIGlmZGVidWcoZmxhZykJCWlmICh1bmxpa2VseShubG1fZGVidWcgJiBOTE1EQkdfIyNmbGFnKSkKKyNlbHNlCisjIGRlZmluZSBpZmRlYnVnKGZsYWcpCQlpZiAoMCkKKyNlbmRpZgorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisvKgorICogRGVidWcgZmxhZ3MKKyAqLworI2RlZmluZSBOTE1EQkdfU1ZDCQkweDAwMDEKKyNkZWZpbmUgTkxNREJHX0NMSUVOVAkJMHgwMDAyCisjZGVmaW5lIE5MTURCR19DTE5UTE9DSwkJMHgwMDA0CisjZGVmaW5lIE5MTURCR19TVkNMT0NLCQkweDAwMDgKKyNkZWZpbmUgTkxNREJHX01PTklUT1IJCTB4MDAxMAorI2RlZmluZSBOTE1EQkdfQ0xOVFNVQlMJCTB4MDAyMAorI2RlZmluZSBOTE1EQkdfU1ZDU1VCUwkJMHgwMDQwCisjZGVmaW5lIE5MTURCR19IT1NUQ0FDSEUJMHgwMDgwCisjZGVmaW5lIE5MTURCR19YRFIJCTB4MDEwMAorI2RlZmluZSBOTE1EQkdfQUxMCQkweDdmZmYKKworCisvKgorICogU3VwcG9ydCBmb3IgcHJpbnRpbmcgTkxNIGNvb2tpZXMgaW4gZHByaW50aygpCisgKi8KKyNpZmRlZiBSUENfREVCVUcKK3N0cnVjdCBubG1fY29va2llOworLyogQ2FsbCB0aGlzIGZ1bmN0aW9uIHdpdGggdGhlIEJLTCBoZWxkIChpdCB1c2VzIGEgc3RhdGljIGJ1ZmZlcikgKi8KK2V4dGVybiBjb25zdCBjaGFyICpubG1kYmdfY29va2llMmEoY29uc3Qgc3RydWN0IG5sbV9jb29raWUgKik7CisjZW5kaWYKKworI2VuZGlmIC8qIExJTlVYX0xPQ0tEX0RFQlVHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbG9ja2QvbG9ja2QuaCBiL2luY2x1ZGUvbGludXgvbG9ja2QvbG9ja2QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDlkMjI1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9sb2NrZC9sb2NrZC5oCkBAIC0wLDAgKzEsMjI0IEBACisvKgorICogbGludXgvaW5jbHVkZS9saW51eC9sb2NrZC9sb2NrZC5oCisgKgorICogR2VuZXJhbC1wdXJwb3NlIGxvY2tkIGluY2x1ZGUgZmlsZS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYgT2xhZiBLaXJjaCA8b2tpckBtb25hZC5zd2IuZGU+CisgKi8KKworI2lmbmRlZiBMSU5VWF9MT0NLRF9MT0NLRF9ICisjZGVmaW5lIExJTlVYX0xPQ0tEX0xPQ0tEX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC91dHNuYW1lLmg+CisjaW5jbHVkZSA8bGludXgvbmZzZC9uZnNmaC5oPgorI2luY2x1ZGUgPGxpbnV4L2xvY2tkL2JpbmQuaD4KKyNpbmNsdWRlIDxsaW51eC9sb2NrZC94ZHIuaD4KKyNpZmRlZiBDT05GSUdfTE9DS0RfVjQKKyNpbmNsdWRlIDxsaW51eC9sb2NrZC94ZHI0Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDxsaW51eC9sb2NrZC9kZWJ1Zy5oPgorCisvKgorICogVmVyc2lvbiBzdHJpbmcKKyAqLworI2RlZmluZSBMT0NLRF9WRVJTSU9OCQkiMC41IgorCisvKgorICogRGVmYXVsdCB0aW1lb3V0IGZvciBSUEMgY2FsbHMgKHNlY29uZHMpCisgKi8KKyNkZWZpbmUgTE9DS0RfREZMVF9USU1FTwkxMAorCisvKgorICogTG9ja2QgaG9zdCBoYW5kbGUgKHVzZWQgYm90aCBieSB0aGUgY2xpZW50IGFuZCBzZXJ2ZXIgcGVyc29uYWxpdHkpLgorICovCitzdHJ1Y3QgbmxtX2hvc3QgeworCXN0cnVjdCBubG1faG9zdCAqCWhfbmV4dDsJCS8qIGxpbmtlZCBsaXN0IChoYXNoIHRhYmxlKSAqLworCXN0cnVjdCBzb2NrYWRkcl9pbgloX2FkZHI7CQkvKiBwZWVyIGFkZHJlc3MgKi8KKwlzdHJ1Y3QgcnBjX2NsbnQJKgloX3JwY2NsbnQ7CS8qIFJQQyBjbGllbnQgdG8gdGFsayB0byBwZWVyICovCisJY2hhcgkJCWhfbmFtZVsyMF07CS8qIHJlbW90ZSBob3N0bmFtZSAqLworCXUzMgkJCWhfdmVyc2lvbjsJLyogaW50ZXJmYWNlIHZlcnNpb24gKi8KKwl1bnNpZ25lZCBzaG9ydAkJaF9wcm90bzsJLyogdHJhbnNwb3J0IHByb3RvICovCisJdW5zaWduZWQgc2hvcnQJCWhfcmVjbGFpbWluZyA6IDEsCisJCQkJaF9zZXJ2ZXIgICAgIDogMSwgLyogc2VydmVyIHNpZGUsIG5vdCBjbGllbnQgc2lkZSAqLworCQkJCWhfaW51c2UgICAgICA6IDEsCisJCQkJaF9raWxsZWQgICAgIDogMSwKKwkJCQloX21vbml0b3JlZCAgOiAxOworCXdhaXRfcXVldWVfaGVhZF90CWhfZ3JhY2V3YWl0OwkvKiB3YWl0IHdoaWxlIHJlY2xhaW1pbmcgKi8KKwl1MzIJCQloX3N0YXRlOwkvKiBwc2V1ZG8tc3RhdGUgY291bnRlciAqLworCXUzMgkJCWhfbnNtc3RhdGU7CS8qIHRydWUgcmVtb3RlIE5TTSBzdGF0ZSAqLworCXUzMgkJCWhfcGlkY291bnQ7CS8qIFBzZXVkb3BpZHMgKi8KKwlhdG9taWNfdAkJaF9jb3VudDsJLyogcmVmZXJlbmNlIGNvdW50ICovCisJc3RydWN0IHNlbWFwaG9yZQloX3NlbWE7CQkvKiBtdXRleCBmb3IgcG1hcCBiaW5kaW5nICovCisJdW5zaWduZWQgbG9uZwkJaF9uZXh0cmViaW5kOwkvKiBuZXh0IHBvcnRtYXAgY2FsbCAqLworCXVuc2lnbmVkIGxvbmcJCWhfZXhwaXJlczsJLyogZWxpZ2libGUgZm9yIEdDICovCisJc3RydWN0IGxpc3RfaGVhZAloX2xvY2tvd25lcnM7CS8qIExvY2tvd25lcnMgZm9yIHRoZSBjbGllbnQgKi8KKwlzcGlubG9ja190CQloX2xvY2s7Cit9OworCisvKgorICogTWFwIGFuIGZsX293bmVyX3QgaW50byBhIHVuaXF1ZSAzMi1iaXQgInBpZCIKKyAqLworc3RydWN0IG5sbV9sb2Nrb3duZXIgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlhdG9taWNfdCBjb3VudDsKKworCXN0cnVjdCBubG1faG9zdCAqaG9zdDsKKwlmbF9vd25lcl90IG93bmVyOworCXVpbnQzMl90IHBpZDsKK307CisKKy8qCisgKiBNZW1vcnkgY2h1bmsgZm9yIE5MTSBjbGllbnQgUlBDIHJlcXVlc3QuCisgKi8KKyNkZWZpbmUgTkxNQ0xOVF9PSFNJWkUJCShzaXplb2Yoc3lzdGVtX3V0c25hbWUubm9kZW5hbWUpKzEwKQorc3RydWN0IG5sbV9ycXN0IHsKKwl1bnNpZ25lZCBpbnQJCWFfZmxhZ3M7CS8qIGluaXRpYWwgUlBDIHRhc2sgZmxhZ3MgKi8KKwlzdHJ1Y3QgbmxtX2hvc3QgKglhX2hvc3Q7CQkvKiBob3N0IGhhbmRsZSAqLworCXN0cnVjdCBubG1fYXJncwkJYV9hcmdzOwkJLyogYXJndW1lbnRzICovCisJc3RydWN0IG5sbV9yZXMJCWFfcmVzOwkJLyogcmVzdWx0ICovCisJY2hhcgkJCWFfb3duZXJbTkxNQ0xOVF9PSFNJWkVdOworfTsKKworLyoKKyAqIFRoaXMgc3RydWN0IGRlc2NyaWJlcyBhIGZpbGUgaGVsZCBvcGVuIGJ5IGxvY2tkIG9uIGJlaGFsZiBvZgorICogYW4gTkZTIGNsaWVudC4KKyAqLworc3RydWN0IG5sbV9maWxlIHsKKwlzdHJ1Y3QgbmxtX2ZpbGUgKglmX25leHQ7CQkvKiBsaW5rZWQgbGlzdCAqLworCXN0cnVjdCBuZnNfZmgJCWZfaGFuZGxlOwkvKiBORlMgZmlsZSBoYW5kbGUgKi8KKwlzdHJ1Y3QgZmlsZSAqCQlmX2ZpbGU7CQkvKiBWRlMgZmlsZSBwb2ludGVyICovCisJc3RydWN0IG5sbV9zaGFyZSAqCWZfc2hhcmVzOwkvKiBET1Mgc2hhcmVzICovCisJc3RydWN0IG5sbV9ibG9jayAqCWZfYmxvY2tzOwkvKiBibG9ja2VkIGxvY2tzICovCisJdW5zaWduZWQgaW50CQlmX2xvY2tzOwkvKiBndWVzc3RpbWF0ZSAjIG9mIGxvY2tzICovCisJdW5zaWduZWQgaW50CQlmX2NvdW50OwkvKiByZWZlcmVuY2UgY291bnQgKi8KKwlzdHJ1Y3Qgc2VtYXBob3JlCWZfc2VtYTsJCS8qIGF2b2lkIGNvbmN1cnJlbnQgYWNjZXNzICovCisJaW50CQkgICAgICAgCWZfaGFzaDsJCS8qIGhhc2ggb2YgZl9oYW5kbGUgKi8KK307CisKKy8qCisgKiBUaGlzIGlzIGEgc2VydmVyIGJsb2NrIChpLmUuIGEgbG9jayByZXF1ZXN0ZWQgYnkgc29tZSBjbGllbnQgd2hpY2gKKyAqIGNvdWxkbid0IGJlIGdyYW50ZWQgYmVjYXVzZSBvZiBhIGNvbmZsaWN0aW5nIGxvY2spLgorICovCisjZGVmaW5lIE5MTV9ORVZFUgkJKH4odW5zaWduZWQgbG9uZykgMCkKK3N0cnVjdCBubG1fYmxvY2sgeworCXN0cnVjdCBubG1fYmxvY2sgKgliX25leHQ7CQkvKiBsaW5rZWQgbGlzdCAoYWxsIGJsb2NrcykgKi8KKwlzdHJ1Y3QgbmxtX2Jsb2NrICoJYl9mbmV4dDsJLyogbGlua2VkIGxpc3QgKHBlciBmaWxlKSAqLworCXN0cnVjdCBubG1fcnFzdAkJYl9jYWxsOwkJLyogUlBDIGFyZ3MgJiBjYWxsYmFjayBpbmZvICovCisJc3RydWN0IHN2Y19zZXJ2ICoJYl9kYWVtb247CS8qIE5MTSBzZXJ2aWNlICovCisJc3RydWN0IG5sbV9ob3N0ICoJYl9ob3N0OwkJLyogaG9zdCBoYW5kbGUgZm9yIFJQQyBjbG50ICovCisJdW5zaWduZWQgbG9uZwkJYl93aGVuOwkJLyogbmV4dCByZS14bWl0ICovCisJdW5zaWduZWQgaW50CQliX2lkOwkJLyogYmxvY2sgaWQgKi8KKwl1bnNpZ25lZCBjaGFyCQliX3F1ZXVlZDsJLyogcmUtcXVldWVkICovCisJdW5zaWduZWQgY2hhcgkJYl9ncmFudGVkOwkvKiBWRlMgZ3JhbnRlZCBsb2NrICovCisJdW5zaWduZWQgY2hhcgkJYl9pbmNhbGw7CS8qIGRvaW5nIGNhbGxiYWNrICovCisJdW5zaWduZWQgY2hhcgkJYl9kb25lOwkJLyogY2FsbGJhY2sgY29tcGxldGUgKi8KKwlzdHJ1Y3QgbmxtX2ZpbGUgKgliX2ZpbGU7CQkvKiBmaWxlIGluIHF1ZXN0aW9uICovCit9OworCisvKgorICogVmFsaWQgYWN0aW9ucyBmb3Igbmxtc3ZjX3RyYXZlcnNlX2ZpbGVzCisgKi8KKyNkZWZpbmUgTkxNX0FDVF9DSEVDSwkJMAkJLyogY2hlY2sgZm9yIGxvY2tzICovCisjZGVmaW5lIE5MTV9BQ1RfTUFSSwkJMQkJLyogbWFyayAmIHN3ZWVwICovCisjZGVmaW5lIE5MTV9BQ1RfVU5MT0NLCQkyCQkvKiByZWxlYXNlIGFsbCBsb2NrcyAqLworCisvKgorICogR2xvYmFsIHZhcmlhYmxlcworICovCitleHRlcm4gc3RydWN0IHJwY19wcm9ncmFtCW5sbV9wcm9ncmFtOworZXh0ZXJuIHN0cnVjdCBzdmNfcHJvY2VkdXJlCW5sbXN2Y19wcm9jZWR1cmVzW107CisjaWZkZWYgQ09ORklHX0xPQ0tEX1Y0CitleHRlcm4gc3RydWN0IHN2Y19wcm9jZWR1cmUJbmxtc3ZjX3Byb2NlZHVyZXM0W107CisjZW5kaWYKK2V4dGVybiBpbnQJCQlubG1zdmNfZ3JhY2VfcGVyaW9kOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcJCW5sbXN2Y190aW1lb3V0OworCisvKgorICogTG9ja2QgY2xpZW50IGZ1bmN0aW9ucworICovCitzdHJ1Y3QgbmxtX3Jxc3QgKiBubG1jbG50X2FsbG9jX2NhbGwodm9pZCk7CitpbnQJCSAgbmxtY2xudF9ibG9jayhzdHJ1Y3QgbmxtX2hvc3QgKiwgc3RydWN0IGZpbGVfbG9jayAqLCB1MzIgKik7CitpbnQJCSAgbmxtY2xudF9jYW5jZWwoc3RydWN0IG5sbV9ob3N0ICosIHN0cnVjdCBmaWxlX2xvY2sgKik7Cit1MzIJCSAgbmxtY2xudF9ncmFudChzdHJ1Y3QgbmxtX2xvY2sgKik7Cit2b2lkCQkgIG5sbWNsbnRfcmVjb3Zlcnkoc3RydWN0IG5sbV9ob3N0ICosIHUzMik7CitpbnQJCSAgbmxtY2xudF9yZWNsYWltKHN0cnVjdCBubG1faG9zdCAqLCBzdHJ1Y3QgZmlsZV9sb2NrICopOworaW50CQkgIG5sbWNsbnRfc2V0Z3JhbnRhcmdzKHN0cnVjdCBubG1fcnFzdCAqLCBzdHJ1Y3QgbmxtX2xvY2sgKik7Cit2b2lkCQkgIG5sbWNsbnRfZnJlZWdyYW50YXJncyhzdHJ1Y3QgbmxtX3Jxc3QgKik7CisKKy8qCisgKiBIb3N0IGNhY2hlCisgKi8KK3N0cnVjdCBubG1faG9zdCAqIG5sbWNsbnRfbG9va3VwX2hvc3Qoc3RydWN0IHNvY2thZGRyX2luICosIGludCwgaW50KTsKK3N0cnVjdCBubG1faG9zdCAqIG5sbXN2Y19sb29rdXBfaG9zdChzdHJ1Y3Qgc3ZjX3Jxc3QgKik7CitzdHJ1Y3QgbmxtX2hvc3QgKiBubG1fbG9va3VwX2hvc3QoaW50IHNlcnZlciwgc3RydWN0IHNvY2thZGRyX2luICosIGludCwgaW50KTsKK3N0cnVjdCBycGNfY2xudCAqIG5sbV9iaW5kX2hvc3Qoc3RydWN0IG5sbV9ob3N0ICopOwordm9pZAkJICBubG1fcmViaW5kX2hvc3Qoc3RydWN0IG5sbV9ob3N0ICopOworc3RydWN0IG5sbV9ob3N0ICogbmxtX2dldF9ob3N0KHN0cnVjdCBubG1faG9zdCAqKTsKK3ZvaWQJCSAgbmxtX3JlbGVhc2VfaG9zdChzdHJ1Y3QgbmxtX2hvc3QgKik7Cit2b2lkCQkgIG5sbV9zaHV0ZG93bl9ob3N0cyh2b2lkKTsKK2V4dGVybiBzdHJ1Y3QgbmxtX2hvc3QgKm5sbV9maW5kX2NsaWVudCh2b2lkKTsKKworCisvKgorICogU2VydmVyLXNpZGUgbG9jayBoYW5kbGluZworICovCitpbnQJCSAgbmxtc3ZjX2FzeW5jX2NhbGwoc3RydWN0IG5sbV9ycXN0ICosIHUzMiwgcnBjX2FjdGlvbik7Cit1MzIJCSAgbmxtc3ZjX2xvY2soc3RydWN0IHN2Y19ycXN0ICosIHN0cnVjdCBubG1fZmlsZSAqLAorCQkJCQlzdHJ1Y3QgbmxtX2xvY2sgKiwgaW50LCBzdHJ1Y3QgbmxtX2Nvb2tpZSAqKTsKK3UzMgkJICBubG1zdmNfdW5sb2NrKHN0cnVjdCBubG1fZmlsZSAqLCBzdHJ1Y3QgbmxtX2xvY2sgKik7Cit1MzIJCSAgbmxtc3ZjX3Rlc3Rsb2NrKHN0cnVjdCBubG1fZmlsZSAqLCBzdHJ1Y3QgbmxtX2xvY2sgKiwKKwkJCQkJc3RydWN0IG5sbV9sb2NrICopOwordTMyCQkgIG5sbXN2Y19jYW5jZWxfYmxvY2tlZChzdHJ1Y3QgbmxtX2ZpbGUgKiwgc3RydWN0IG5sbV9sb2NrICopOwordW5zaWduZWQgbG9uZwkgIG5sbXN2Y19yZXRyeV9ibG9ja2VkKHZvaWQpOworaW50CQkgIG5sbXN2Y190cmF2ZXJzZV9ibG9ja3Moc3RydWN0IG5sbV9ob3N0ICosIHN0cnVjdCBubG1fZmlsZSAqLAorCQkJCQlpbnQgYWN0aW9uKTsKK3ZvaWQJICBubG1zdmNfZ3JhbnRfcmVwbHkoc3RydWN0IHN2Y19ycXN0ICosIHN0cnVjdCBubG1fY29va2llICosIHUzMik7CisKKy8qCisgKiBGaWxlIGhhbmRsaW5nIGZvciB0aGUgc2VydmVyIHBlcnNvbmFsaXR5CisgKi8KK3UzMgkJICBubG1fbG9va3VwX2ZpbGUoc3RydWN0IHN2Y19ycXN0ICosIHN0cnVjdCBubG1fZmlsZSAqKiwKKwkJCQkJc3RydWN0IG5mc19maCAqKTsKK3ZvaWQJCSAgbmxtX3JlbGVhc2VfZmlsZShzdHJ1Y3QgbmxtX2ZpbGUgKik7Cit2b2lkCQkgIG5sbXN2Y19tYXJrX3Jlc291cmNlcyh2b2lkKTsKK3ZvaWQJCSAgbmxtc3ZjX2ZyZWVfaG9zdF9yZXNvdXJjZXMoc3RydWN0IG5sbV9ob3N0ICopOwordm9pZAkJICBubG1zdmNfaW52YWxpZGF0ZV9hbGwodm9pZCk7CisKK3N0YXRpYyBfX2lubGluZV9fIHN0cnVjdCBpbm9kZSAqCitubG1zdmNfZmlsZV9pbm9kZShzdHJ1Y3QgbmxtX2ZpbGUgKmZpbGUpCit7CisJcmV0dXJuIGZpbGUtPmZfZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7Cit9CisKKy8qCisgKiBDb21wYXJlIHR3byBob3N0IGFkZHJlc3NlcyAobmVlZHMgbW9kaWZ5aW5nIGZvciBpcHY2KQorICovCitzdGF0aWMgX19pbmxpbmVfXyBpbnQKK25sbV9jbXBfYWRkcihzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjEsIHN0cnVjdCBzb2NrYWRkcl9pbiAqc2luMikKK3sKKwlyZXR1cm4gc2luMS0+c2luX2FkZHIuc19hZGRyID09IHNpbjItPnNpbl9hZGRyLnNfYWRkcjsKK30KKworLyoKKyAqIENvbXBhcmUgdHdvIE5MTSBsb2Nrcy4KKyAqIFdoZW4gdGhlIHNlY29uZCBsb2NrIGlzIG9mIHR5cGUgRl9VTkxDSywgdGhpcyBhY3RzIGxpa2UgYSB3aWxkY2FyZC4KKyAqLworc3RhdGljIF9faW5saW5lX18gaW50CitubG1fY29tcGFyZV9sb2NrcyhzdHJ1Y3QgZmlsZV9sb2NrICpmbDEsIHN0cnVjdCBmaWxlX2xvY2sgKmZsMikKK3sKKwlyZXR1cm4JZmwxLT5mbF9waWQgICA9PSBmbDItPmZsX3BpZAorCSAgICAgJiYgZmwxLT5mbF9zdGFydCA9PSBmbDItPmZsX3N0YXJ0CisJICAgICAmJiBmbDEtPmZsX2VuZCAgID09IGZsMi0+ZmxfZW5kCisJICAgICAmJihmbDEtPmZsX3R5cGUgID09IGZsMi0+ZmxfdHlwZSB8fCBmbDItPmZsX3R5cGUgPT0gRl9VTkxDSyk7Cit9CisKK2V4dGVybiBzdHJ1Y3QgbG9ja19tYW5hZ2VyX29wZXJhdGlvbnMgbmxtc3ZjX2xvY2tfb3BlcmF0aW9uczsKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIExJTlVYX0xPQ0tEX0xPQ0tEX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbG9ja2QvbmxtLmggYi9pbmNsdWRlL2xpbnV4L2xvY2tkL25sbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2OWI2MzAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2xvY2tkL25sbS5oCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2xpbnV4L2xvY2tkL25sbS5oCisgKgorICogRGVjbGFyYXRpb25zIGZvciB0aGUgTmV0d29yayBMb2NrIE1hbmFnZXIgcHJvdG9jb2wuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk2LCBPbGFmIEtpcmNoIDxva2lyQG1vbmFkLnN3Yi5kZT4KKyAqLworCisjaWZuZGVmIExJTlVYX0xPQ0tEX05MTV9ICisjZGVmaW5lIExJTlVYX0xPQ0tEX05MTV9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworLyogTWF4aW11bSBmaWxlIG9mZnNldCBpbiBmaWxlX2xvY2suZmxfZW5kICovCisjIGRlZmluZSBOTE1fT0ZGU0VUX01BWAkJKChzMzIpIDB4N2ZmZmZmZmYpCisjIGRlZmluZSBOTE00X09GRlNFVF9NQVgJKChzNjQpICgofih1NjQpMCkgPj4gMSkpCisKKy8qIFJldHVybiBzdGF0ZXMgZm9yIE5MTSAqLworZW51bSB7CisJTkxNX0xDS19HUkFOVEVECQkJPSAwLAorCU5MTV9MQ0tfREVOSUVECQkJPSAxLAorCU5MTV9MQ0tfREVOSUVEX05PTE9DS1MJCT0gMiwKKwlOTE1fTENLX0JMT0NLRUQJCQk9IDMsCisJTkxNX0xDS19ERU5JRURfR1JBQ0VfUEVSSU9ECT0gNCwKKyNpZmRlZiBDT05GSUdfTE9DS0RfVjQKKwlOTE1fREVBRExDSwkJCT0gNSwKKwlOTE1fUk9GUwkJCT0gNiwKKwlOTE1fU1RBTEVfRkgJCQk9IDcsCisJTkxNX0ZCSUcJCQk9IDgsCisJTkxNX0ZBSUxFRAkJCT0gOSwKKyNlbmRpZgorfTsKKworI2RlZmluZSBOTE1fUFJPR1JBTQkJMTAwMDIxCisKKyNkZWZpbmUgTkxNUFJPQ19OVUxMCQkwCisjZGVmaW5lIE5MTVBST0NfVEVTVAkJMQorI2RlZmluZSBOTE1QUk9DX0xPQ0sJCTIKKyNkZWZpbmUgTkxNUFJPQ19DQU5DRUwJCTMKKyNkZWZpbmUgTkxNUFJPQ19VTkxPQ0sJCTQKKyNkZWZpbmUgTkxNUFJPQ19HUkFOVEVECQk1CisjZGVmaW5lIE5MTVBST0NfVEVTVF9NU0cJNgorI2RlZmluZSBOTE1QUk9DX0xPQ0tfTVNHCTcKKyNkZWZpbmUgTkxNUFJPQ19DQU5DRUxfTVNHCTgKKyNkZWZpbmUgTkxNUFJPQ19VTkxPQ0tfTVNHCTkKKyNkZWZpbmUgTkxNUFJPQ19HUkFOVEVEX01TRwkxMAorI2RlZmluZSBOTE1QUk9DX1RFU1RfUkVTCTExCisjZGVmaW5lIE5MTVBST0NfTE9DS19SRVMJMTIKKyNkZWZpbmUgTkxNUFJPQ19DQU5DRUxfUkVTCTEzCisjZGVmaW5lIE5MTVBST0NfVU5MT0NLX1JFUwkxNAorI2RlZmluZSBOTE1QUk9DX0dSQU5URURfUkVTCTE1CisjZGVmaW5lIE5MTVBST0NfTlNNX05PVElGWQkxNgkJLyogc3RhdGQgY2FsbGJhY2sgKi8KKyNkZWZpbmUgTkxNUFJPQ19TSEFSRQkJMjAKKyNkZWZpbmUgTkxNUFJPQ19VTlNIQVJFCQkyMQorI2RlZmluZSBOTE1QUk9DX05NX0xPQ0sJCTIyCisjZGVmaW5lIE5MTVBST0NfRlJFRV9BTEwJMjMKKworI2VuZGlmIC8qIExJTlVYX0xPQ0tEX05MTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xvY2tkL3NoYXJlLmggYi9pbmNsdWRlL2xpbnV4L2xvY2tkL3NoYXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ4YWEzMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbG9ja2Qvc2hhcmUuaApAQCAtMCwwICsxLDMwIEBACisvKgorICogbGludXgvaW5jbHVkZS9saW51eC9sb2NrZC9zaGFyZS5oCisgKgorICogRE9TIHNoYXJlIG1hbmFnZW1lbnQgZm9yIGxvY2tkLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NiwgT2xhZiBLaXJjaCA8b2tpckBtb25hZC5zd2IuZGU+CisgKi8KKworI2lmbmRlZiBMSU5VWF9MT0NLRF9TSEFSRV9ICisjZGVmaW5lIExJTlVYX0xPQ0tEX1NIQVJFX0gKKworLyoKKyAqIERPUyBzaGFyZSBmb3IgYSBzcGVjaWZpYyBmaWxlCisgKi8KK3N0cnVjdCBubG1fc2hhcmUgeworCXN0cnVjdCBubG1fc2hhcmUgKglzX25leHQ7CQkvKiBsaW5rZWQgbGlzdCAqLworCXN0cnVjdCBubG1faG9zdCAqCXNfaG9zdDsJCS8qIGNsaWVudCBob3N0ICovCisJc3RydWN0IG5sbV9maWxlICoJc19maWxlOwkJLyogc2hhcmVkIGZpbGUgKi8KKwlzdHJ1Y3QgeGRyX25ldG9iaglzX293bmVyOwkvKiBvd25lciBoYW5kbGUgKi8KKwl1MzIJCQlzX2FjY2VzczsJLyogYWNjZXNzIG1vZGUgKi8KKwl1MzIJCQlzX21vZGU7CQkvKiBkZW55IG1vZGUgKi8KK307CisKK3UzMglubG1zdmNfc2hhcmVfZmlsZShzdHJ1Y3QgbmxtX2hvc3QgKiwgc3RydWN0IG5sbV9maWxlICosCisJCQkJCSAgICAgICBzdHJ1Y3QgbmxtX2FyZ3MgKik7Cit1MzIJbmxtc3ZjX3Vuc2hhcmVfZmlsZShzdHJ1Y3QgbmxtX2hvc3QgKiwgc3RydWN0IG5sbV9maWxlICosCisJCQkJCSAgICAgICBzdHJ1Y3QgbmxtX2FyZ3MgKik7CitpbnQJbmxtc3ZjX3RyYXZlcnNlX3NoYXJlcyhzdHJ1Y3QgbmxtX2hvc3QgKiwgc3RydWN0IG5sbV9maWxlICosIGludCk7CisKKyNlbmRpZiAvKiBMSU5VWF9MT0NLRF9TSEFSRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xvY2tkL3NtX2ludGVyLmggYi9pbmNsdWRlL2xpbnV4L2xvY2tkL3NtX2ludGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA4MGJiNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbG9ja2Qvc21faW50ZXIuaApAQCAtMCwwICsxLDQ2IEBACisvKgorICogbGludXgvaW5jbHVkZS9saW51eC9sb2NrZC9zbV9pbnRlci5oCisgKgorICogRGVjbGFyYXRpb25zIGZvciB0aGUga2VybmVsIHN0YXRkIGNsaWVudC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYsIE9sYWYgS2lyY2ggPG9raXJAbW9uYWQuc3diLmRlPgorICovCisKKyNpZm5kZWYgTElOVVhfTE9DS0RfU01fSU5URVJfSAorI2RlZmluZSBMSU5VWF9MT0NLRF9TTV9JTlRFUl9ICisKKyNkZWZpbmUgU01fUFJPR1JBTQkxMDAwMjQKKyNkZWZpbmUgU01fVkVSU0lPTgkxCisjZGVmaW5lIFNNX1NUQVQJCTEKKyNkZWZpbmUgU01fTU9OCQkyCisjZGVmaW5lIFNNX1VOTU9OCTMKKyNkZWZpbmUgU01fVU5NT05fQUxMCTQKKyNkZWZpbmUgU01fU0lNVV9DUkFTSAk1CisjZGVmaW5lIFNNX05PVElGWQk2CisKKyNkZWZpbmUgU01fTUFYU1RSTEVOCTEwMjQKKworLyoKKyAqIEFyZ3VtZW50cyBmb3IgYWxsIGNhbGxzIHRvIHN0YXRkCisgKi8KK3N0cnVjdCBuc21fYXJncyB7CisJdTMyCQlhZGRyOwkJLyogcmVtb3RlIGFkZHJlc3MgKi8KKwl1MzIJCXByb2c7CQkvKiBSUEMgY2FsbGJhY2sgaW5mbyAqLworCXUzMgkJdmVyczsKKwl1MzIJCXByb2M7CisJdTMyCQlwcm90bzsJCS8qIHByb3RvY29sICh1ZHAvdGNwKSBwbHVzIHNlcnZlci9jbGllbnQgZmxhZyAqLworfTsKKworLyoKKyAqIFJlc3VsdCByZXR1cm5lZCBieSBzdGF0ZAorICovCitzdHJ1Y3QgbnNtX3JlcyB7CisJdTMyCQlzdGF0dXM7CisJdTMyCQlzdGF0ZTsKK307CisKK2ludAkJbnNtX21vbml0b3Ioc3RydWN0IG5sbV9ob3N0ICopOworaW50CQluc21fdW5tb25pdG9yKHN0cnVjdCBubG1faG9zdCAqKTsKK2V4dGVybiB1MzIJbnNtX2xvY2FsX3N0YXRlOworCisjZW5kaWYgLyogTElOVVhfTE9DS0RfU01fSU5URVJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sb2NrZC94ZHIuaCBiL2luY2x1ZGUvbGludXgvbG9ja2QveGRyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdhNWNjNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbG9ja2QveGRyLmgKQEAgLTAsMCArMSwxMDggQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2xpbnV4L2xvY2tkL3hkci5oCisgKgorICogWERSIHR5cGVzIGZvciB0aGUgTkxNIHByb3RvY29sCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk2IE9sYWYgS2lyY2ggPG9raXJAbW9uYWQuc3diLmRlPgorICovCisKKyNpZm5kZWYgTE9DS0RfWERSX0gKKyNkZWZpbmUgTE9DS0RfWERSX0gKKworI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbmZzLmg+CisjaW5jbHVkZSA8bGludXgvc3VucnBjL3hkci5oPgorCisjZGVmaW5lIE5MTV9NQVhDT09LSUVMRU4gICAgCTMyCisjZGVmaW5lIE5MTV9NQVhTVFJMRU4JCTEwMjQKKworI2RlZmluZQlubG1fZ3JhbnRlZAkJX19jb25zdGFudF9odG9ubChOTE1fTENLX0dSQU5URUQpCisjZGVmaW5lCW5sbV9sY2tfZGVuaWVkCQlfX2NvbnN0YW50X2h0b25sKE5MTV9MQ0tfREVOSUVEKQorI2RlZmluZQlubG1fbGNrX2RlbmllZF9ub2xvY2tzCV9fY29uc3RhbnRfaHRvbmwoTkxNX0xDS19ERU5JRURfTk9MT0NLUykKKyNkZWZpbmUJbmxtX2xja19ibG9ja2VkCQlfX2NvbnN0YW50X2h0b25sKE5MTV9MQ0tfQkxPQ0tFRCkKKyNkZWZpbmUJbmxtX2xja19kZW5pZWRfZ3JhY2VfcGVyaW9kCV9fY29uc3RhbnRfaHRvbmwoTkxNX0xDS19ERU5JRURfR1JBQ0VfUEVSSU9EKQorCisvKiBMb2NrIGluZm8gcGFzc2VkIHZpYSBOTE0gKi8KK3N0cnVjdCBubG1fbG9jayB7CisJY2hhciAqCQkJY2FsbGVyOworCWludAkJCWxlbjsgCS8qIGxlbmd0aCBvZiAiY2FsbGVyIiAqLworCXN0cnVjdCBuZnNfZmgJCWZoOworCXN0cnVjdCB4ZHJfbmV0b2JqCW9oOworCXN0cnVjdCBmaWxlX2xvY2sJZmw7Cit9OworCisvKgorICoJTkxNIGNvb2tpZXMuIFRlY2huaWNhbGx5IHRoZXkgY2FuIGJlIDFLLCBidXQgTGludXggb25seSB1c2VzIDggYnl0ZXMuCisgKglGcmVlQlNEIHVzZXMgMTYsIEFwcGxlIE1hYyBPUyBYIDEwLjMgdXNlcyAyMC4gVGhlcmVmb3JlIHdlIHNldCBpdCB0bworICoJMzIgYnl0ZXMuCisgKi8KKyAKK3N0cnVjdCBubG1fY29va2llCit7CisJdW5zaWduZWQgY2hhciBkYXRhW05MTV9NQVhDT09LSUVMRU5dOworCXVuc2lnbmVkIGludCBsZW47Cit9OworCisvKgorICogR2VuZXJpYyBsb2NrZCBhcmd1bWVudHMgZm9yIGFsbCBidXQgc21fbm90aWZ5CisgKi8KK3N0cnVjdCBubG1fYXJncyB7CisJc3RydWN0IG5sbV9jb29raWUJY29va2llOworCXN0cnVjdCBubG1fbG9jawkJbG9jazsKKwl1MzIJCQlibG9jazsKKwl1MzIJCQlyZWNsYWltOworCXUzMgkJCXN0YXRlOworCXUzMgkJCW1vbml0b3I7CisJdTMyCQkJZnNtX2FjY2VzczsKKwl1MzIJCQlmc21fbW9kZTsKK307CisKK3R5cGVkZWYgc3RydWN0IG5sbV9hcmdzIG5sbV9hcmdzOworCisvKgorICogR2VuZXJpYyBsb2NrZCByZXN1bHQKKyAqLworc3RydWN0IG5sbV9yZXMgeworCXN0cnVjdCBubG1fY29va2llCWNvb2tpZTsKKwl1MzIJCQlzdGF0dXM7CisJc3RydWN0IG5sbV9sb2NrCQlsb2NrOworfTsKKworLyoKKyAqIHN0YXRkIGNhbGxiYWNrIHdoZW4gY2xpZW50IGhhcyByZWJvb3RlZAorICovCitzdHJ1Y3QgbmxtX3JlYm9vdCB7CisJY2hhciAqCQltb247CisJaW50CQlsZW47CisJdTMyCQlzdGF0ZTsKKwl1MzIJCWFkZHI7CisJdTMyCQl2ZXJzOworCXUzMgkJcHJvdG87Cit9OworCisvKgorICogQ29udGVudHMgb2Ygc3RhdGQgY2FsbGJhY2sgd2hlbiBtb25pdG9yZWQgaG9zdCByZWJvb3RlZAorICovCisjZGVmaW5lIE5MTVNWQ19YRFJTSVpFCQlzaXplb2Yoc3RydWN0IG5sbV9hcmdzKQorCitpbnQJbmxtc3ZjX2RlY29kZV90ZXN0YXJncyhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgdTMyICosIHN0cnVjdCBubG1fYXJncyAqKTsKK2ludAlubG1zdmNfZW5jb2RlX3Rlc3RyZXMoc3RydWN0IHN2Y19ycXN0ICosIHUzMiAqLCBzdHJ1Y3QgbmxtX3JlcyAqKTsKK2ludAlubG1zdmNfZGVjb2RlX2xvY2thcmdzKHN0cnVjdCBzdmNfcnFzdCAqLCB1MzIgKiwgc3RydWN0IG5sbV9hcmdzICopOworaW50CW5sbXN2Y19kZWNvZGVfY2FuY2FyZ3Moc3RydWN0IHN2Y19ycXN0ICosIHUzMiAqLCBzdHJ1Y3QgbmxtX2FyZ3MgKik7CitpbnQJbmxtc3ZjX2RlY29kZV91bmxvY2thcmdzKHN0cnVjdCBzdmNfcnFzdCAqLCB1MzIgKiwgc3RydWN0IG5sbV9hcmdzICopOworaW50CW5sbXN2Y19lbmNvZGVfcmVzKHN0cnVjdCBzdmNfcnFzdCAqLCB1MzIgKiwgc3RydWN0IG5sbV9yZXMgKik7CitpbnQJbmxtc3ZjX2RlY29kZV9yZXMoc3RydWN0IHN2Y19ycXN0ICosIHUzMiAqLCBzdHJ1Y3QgbmxtX3JlcyAqKTsKK2ludAlubG1zdmNfZW5jb2RlX3ZvaWQoc3RydWN0IHN2Y19ycXN0ICosIHUzMiAqLCB2b2lkICopOworaW50CW5sbXN2Y19kZWNvZGVfdm9pZChzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgdTMyICosIHZvaWQgKik7CitpbnQJbmxtc3ZjX2RlY29kZV9zaGFyZWFyZ3Moc3RydWN0IHN2Y19ycXN0ICosIHUzMiAqLCBzdHJ1Y3QgbmxtX2FyZ3MgKik7CitpbnQJbmxtc3ZjX2VuY29kZV9zaGFyZXJlcyhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgdTMyICosIHN0cnVjdCBubG1fcmVzICopOworaW50CW5sbXN2Y19kZWNvZGVfbm90aWZ5KHN0cnVjdCBzdmNfcnFzdCAqLCB1MzIgKiwgc3RydWN0IG5sbV9hcmdzICopOworaW50CW5sbXN2Y19kZWNvZGVfcmVib290KHN0cnVjdCBzdmNfcnFzdCAqLCB1MzIgKiwgc3RydWN0IG5sbV9yZWJvb3QgKik7CisvKgoraW50CW5sbWNsdF9lbmNvZGVfdGVzdGFyZ3Moc3RydWN0IHJwY19ycXN0ICosIHUzMiAqLCBzdHJ1Y3QgbmxtX2FyZ3MgKik7CitpbnQJbmxtY2x0X2VuY29kZV9sb2NrYXJncyhzdHJ1Y3QgcnBjX3Jxc3QgKiwgdTMyICosIHN0cnVjdCBubG1fYXJncyAqKTsKK2ludAlubG1jbHRfZW5jb2RlX2NhbmNhcmdzKHN0cnVjdCBycGNfcnFzdCAqLCB1MzIgKiwgc3RydWN0IG5sbV9hcmdzICopOworaW50CW5sbWNsdF9lbmNvZGVfdW5sb2NrYXJncyhzdHJ1Y3QgcnBjX3Jxc3QgKiwgdTMyICosIHN0cnVjdCBubG1fYXJncyAqKTsKKyAqLworCisjZW5kaWYgLyogTE9DS0RfWERSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbG9ja2QveGRyNC5oIGIvaW5jbHVkZS9saW51eC9sb2NrZC94ZHI0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VlMzZlNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbG9ja2QveGRyNC5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2xpbnV4L2xvY2tkL3hkci5oCisgKgorICogWERSIHR5cGVzIGZvciB0aGUgTkxNIHByb3RvY29sCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk2IE9sYWYgS2lyY2ggPG9raXJAbW9uYWQuc3diLmRlPgorICovCisKKyNpZm5kZWYgTE9DS0RfWERSNF9ICisjZGVmaW5lIExPQ0tEX1hEUjRfSAorCisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9uZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zdW5ycGMveGRyLmg+CisjaW5jbHVkZSA8bGludXgvbG9ja2QveGRyLmg+CisKKy8qIGVycm9yIGNvZGVzIG5ldyB0byBOTE12NCAqLworI2RlZmluZQlubG00X2RlYWRsb2NrCQlfX2NvbnN0YW50X2h0b25sKE5MTV9ERUFETENLKQorI2RlZmluZQlubG00X3JvZnMJCV9fY29uc3RhbnRfaHRvbmwoTkxNX1JPRlMpCisjZGVmaW5lCW5sbTRfc3RhbGVfZmgJCV9fY29uc3RhbnRfaHRvbmwoTkxNX1NUQUxFX0ZIKQorI2RlZmluZQlubG00X2ZiaWcJCV9fY29uc3RhbnRfaHRvbmwoTkxNX0ZCSUcpCisjZGVmaW5lCW5sbTRfZmFpbGVkCQlfX2NvbnN0YW50X2h0b25sKE5MTV9GQUlMRUQpCisKKworCitpbnQJbmxtNHN2Y19kZWNvZGVfdGVzdGFyZ3Moc3RydWN0IHN2Y19ycXN0ICosIHUzMiAqLCBzdHJ1Y3QgbmxtX2FyZ3MgKik7CitpbnQJbmxtNHN2Y19lbmNvZGVfdGVzdHJlcyhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgdTMyICosIHN0cnVjdCBubG1fcmVzICopOworaW50CW5sbTRzdmNfZGVjb2RlX2xvY2thcmdzKHN0cnVjdCBzdmNfcnFzdCAqLCB1MzIgKiwgc3RydWN0IG5sbV9hcmdzICopOworaW50CW5sbTRzdmNfZGVjb2RlX2NhbmNhcmdzKHN0cnVjdCBzdmNfcnFzdCAqLCB1MzIgKiwgc3RydWN0IG5sbV9hcmdzICopOworaW50CW5sbTRzdmNfZGVjb2RlX3VubG9ja2FyZ3Moc3RydWN0IHN2Y19ycXN0ICosIHUzMiAqLCBzdHJ1Y3QgbmxtX2FyZ3MgKik7CitpbnQJbmxtNHN2Y19lbmNvZGVfcmVzKHN0cnVjdCBzdmNfcnFzdCAqLCB1MzIgKiwgc3RydWN0IG5sbV9yZXMgKik7CitpbnQJbmxtNHN2Y19kZWNvZGVfcmVzKHN0cnVjdCBzdmNfcnFzdCAqLCB1MzIgKiwgc3RydWN0IG5sbV9yZXMgKik7CitpbnQJbmxtNHN2Y19lbmNvZGVfdm9pZChzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgdTMyICosIHZvaWQgKik7CitpbnQJbmxtNHN2Y19kZWNvZGVfdm9pZChzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgdTMyICosIHZvaWQgKik7CitpbnQJbmxtNHN2Y19kZWNvZGVfc2hhcmVhcmdzKHN0cnVjdCBzdmNfcnFzdCAqLCB1MzIgKiwgc3RydWN0IG5sbV9hcmdzICopOworaW50CW5sbTRzdmNfZW5jb2RlX3NoYXJlcmVzKHN0cnVjdCBzdmNfcnFzdCAqLCB1MzIgKiwgc3RydWN0IG5sbV9yZXMgKik7CitpbnQJbmxtNHN2Y19kZWNvZGVfbm90aWZ5KHN0cnVjdCBzdmNfcnFzdCAqLCB1MzIgKiwgc3RydWN0IG5sbV9hcmdzICopOworaW50CW5sbTRzdmNfZGVjb2RlX3JlYm9vdChzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgdTMyICosIHN0cnVjdCBubG1fcmVib290ICopOworLyoKK2ludAlubG1jbHRfZW5jb2RlX3Rlc3RhcmdzKHN0cnVjdCBycGNfcnFzdCAqLCB1MzIgKiwgc3RydWN0IG5sbV9hcmdzICopOworaW50CW5sbWNsdF9lbmNvZGVfbG9ja2FyZ3Moc3RydWN0IHJwY19ycXN0ICosIHUzMiAqLCBzdHJ1Y3QgbmxtX2FyZ3MgKik7CitpbnQJbmxtY2x0X2VuY29kZV9jYW5jYXJncyhzdHJ1Y3QgcnBjX3Jxc3QgKiwgdTMyICosIHN0cnVjdCBubG1fYXJncyAqKTsKK2ludAlubG1jbHRfZW5jb2RlX3VubG9ja2FyZ3Moc3RydWN0IHJwY19ycXN0ICosIHUzMiAqLCBzdHJ1Y3QgbmxtX2FyZ3MgKik7CisgKi8KKworI2VuZGlmIC8qIExPQ0tEX1hEUjRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sb29wLmggYi9pbmNsdWRlL2xpbnV4L2xvb3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjIwZDljCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9sb29wLmgKQEAgLTAsMCArMSwxNjEgQEAKKyNpZm5kZWYgX0xJTlVYX0xPT1BfSAorI2RlZmluZSBfTElOVVhfTE9PUF9ICisKKy8qCisgKiBpbmNsdWRlL2xpbnV4L2xvb3AuaAorICoKKyAqIFdyaXR0ZW4gYnkgVGhlb2RvcmUgVHMnbywgMy8yOS85My4KKyAqCisgKiBDb3B5cmlnaHQgMTk5MyBieSBUaGVvZG9yZSBUcydvLiAgUmVkaXN0cmlidXRpb24gb2YgdGhpcyBmaWxlIGlzCisgKiBwZXJtaXR0ZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorICovCisKKyNkZWZpbmUgTE9fTkFNRV9TSVpFCTY0CisjZGVmaW5lIExPX0tFWV9TSVpFCTMyCisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8bGludXgvYmlvLmg+CisjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKworLyogUG9zc2libGUgc3RhdGVzIG9mIGRldmljZSAqLworZW51bSB7CisJTG9fdW5ib3VuZCwKKwlMb19ib3VuZCwKKwlMb19ydW5kb3duLAorfTsKKworc3RydWN0IGxvb3BfZnVuY190YWJsZTsKKworc3RydWN0IGxvb3BfZGV2aWNlIHsKKwlpbnQJCWxvX251bWJlcjsKKwlpbnQJCWxvX3JlZmNudDsKKwlsb2ZmX3QJCWxvX29mZnNldDsKKwlsb2ZmX3QJCWxvX3NpemVsaW1pdDsKKwlpbnQJCWxvX2ZsYWdzOworCWludAkJKCp0cmFuc2Zlcikoc3RydWN0IGxvb3BfZGV2aWNlICosIGludCBjbWQsCisJCQkJICAgIHN0cnVjdCBwYWdlICpyYXdfcGFnZSwgdW5zaWduZWQgcmF3X29mZiwKKwkJCQkgICAgc3RydWN0IHBhZ2UgKmxvb3BfcGFnZSwgdW5zaWduZWQgbG9vcF9vZmYsCisJCQkJICAgIGludCBzaXplLCBzZWN0b3JfdCByZWFsX2Jsb2NrKTsKKwljaGFyCQlsb19maWxlX25hbWVbTE9fTkFNRV9TSVpFXTsKKwljaGFyCQlsb19jcnlwdF9uYW1lW0xPX05BTUVfU0laRV07CisJY2hhcgkJbG9fZW5jcnlwdF9rZXlbTE9fS0VZX1NJWkVdOworCWludAkJbG9fZW5jcnlwdF9rZXlfc2l6ZTsKKwlzdHJ1Y3QgbG9vcF9mdW5jX3RhYmxlICpsb19lbmNyeXB0aW9uOworCV9fdTMyICAgICAgICAgICBsb19pbml0WzJdOworCXVpZF90CQlsb19rZXlfb3duZXI7CS8qIFdobyBzZXQgdGhlIGtleSAqLworCWludAkJKCppb2N0bCkoc3RydWN0IGxvb3BfZGV2aWNlICosIGludCBjbWQsIAorCQkJCSB1bnNpZ25lZCBsb25nIGFyZyk7IAorCisJc3RydWN0IGZpbGUgKglsb19iYWNraW5nX2ZpbGU7CisJc3RydWN0IGJsb2NrX2RldmljZSAqbG9fZGV2aWNlOworCXVuc2lnbmVkCWxvX2Jsb2Nrc2l6ZTsKKwl2b2lkCQkqa2V5X2RhdGE7IAorCisJaW50CQlvbGRfZ2ZwX21hc2s7CisKKwlzcGlubG9ja190CQlsb19sb2NrOworCXN0cnVjdCBiaW8gCQkqbG9fYmlvOworCXN0cnVjdCBiaW8JCSpsb19iaW90YWlsOworCWludAkJCWxvX3N0YXRlOworCXN0cnVjdCBzZW1hcGhvcmUJbG9fc2VtOworCXN0cnVjdCBzZW1hcGhvcmUJbG9fY3RsX211dGV4OworCXN0cnVjdCBzZW1hcGhvcmUJbG9fYmhfbXV0ZXg7CisJYXRvbWljX3QJCWxvX3BlbmRpbmc7CisKKwlyZXF1ZXN0X3F1ZXVlX3QJCSpsb19xdWV1ZTsKK307CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKy8qCisgKiBMb29wIGZsYWdzCisgKi8KK2VudW0geworCUxPX0ZMQUdTX1JFQURfT05MWQk9IDEsCisJTE9fRkxBR1NfVVNFX0FPUFMJPSAyLAorfTsKKworI2luY2x1ZGUgPGFzbS9wb3NpeF90eXBlcy5oPgkvKiBmb3IgX19rZXJuZWxfb2xkX2Rldl90ICovCisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CQkvKiBmb3IgX191NjQgKi8KKworLyogQmFja3dhcmRzIGNvbXBhdGliaWxpdHkgdmVyc2lvbiAqLworc3RydWN0IGxvb3BfaW5mbyB7CisJaW50CQkgICBsb19udW1iZXI7CQkvKiBpb2N0bCByL28gKi8KKwlfX2tlcm5lbF9vbGRfZGV2X3QgbG9fZGV2aWNlOyAJCS8qIGlvY3RsIHIvbyAqLworCXVuc2lnbmVkIGxvbmcJICAgbG9faW5vZGU7IAkJLyogaW9jdGwgci9vICovCisJX19rZXJuZWxfb2xkX2Rldl90IGxvX3JkZXZpY2U7IAkJLyogaW9jdGwgci9vICovCisJaW50CQkgICBsb19vZmZzZXQ7CisJaW50CQkgICBsb19lbmNyeXB0X3R5cGU7CisJaW50CQkgICBsb19lbmNyeXB0X2tleV9zaXplOyAJLyogaW9jdGwgdy9vICovCisJaW50CQkgICBsb19mbGFnczsJCQkvKiBpb2N0bCByL28gKi8KKwljaGFyCQkgICBsb19uYW1lW0xPX05BTUVfU0laRV07CisJdW5zaWduZWQgY2hhcgkgICBsb19lbmNyeXB0X2tleVtMT19LRVlfU0laRV07IC8qIGlvY3RsIHcvbyAqLworCXVuc2lnbmVkIGxvbmcJICAgbG9faW5pdFsyXTsKKwljaGFyCQkgICByZXNlcnZlZFs0XTsKK307CisKK3N0cnVjdCBsb29wX2luZm82NCB7CisJX191NjQJCSAgIGxvX2RldmljZTsJCQkvKiBpb2N0bCByL28gKi8KKwlfX3U2NAkJICAgbG9faW5vZGU7CQkJLyogaW9jdGwgci9vICovCisJX191NjQJCSAgIGxvX3JkZXZpY2U7CQkJLyogaW9jdGwgci9vICovCisJX191NjQJCSAgIGxvX29mZnNldDsKKwlfX3U2NAkJICAgbG9fc2l6ZWxpbWl0Oy8qIGJ5dGVzLCAwID09IG1heCBhdmFpbGFibGUgKi8KKwlfX3UzMgkJICAgbG9fbnVtYmVyOwkJCS8qIGlvY3RsIHIvbyAqLworCV9fdTMyCQkgICBsb19lbmNyeXB0X3R5cGU7CisJX191MzIJCSAgIGxvX2VuY3J5cHRfa2V5X3NpemU7CQkvKiBpb2N0bCB3L28gKi8KKwlfX3UzMgkJICAgbG9fZmxhZ3M7CQkJLyogaW9jdGwgci9vICovCisJX191OAkJICAgbG9fZmlsZV9uYW1lW0xPX05BTUVfU0laRV07CisJX191OAkJICAgbG9fY3J5cHRfbmFtZVtMT19OQU1FX1NJWkVdOworCV9fdTgJCSAgIGxvX2VuY3J5cHRfa2V5W0xPX0tFWV9TSVpFXTsgLyogaW9jdGwgdy9vICovCisJX191NjQJCSAgIGxvX2luaXRbMl07Cit9OworCisvKgorICogTG9vcCBmaWx0ZXIgdHlwZXMKKyAqLworCisjZGVmaW5lIExPX0NSWVBUX05PTkUJCTAKKyNkZWZpbmUgTE9fQ1JZUFRfWE9SCQkxCisjZGVmaW5lIExPX0NSWVBUX0RFUwkJMgorI2RlZmluZSBMT19DUllQVF9GSVNIMgkJMyAgICAvKiBUd29maXNoIGVuY3J5cHRpb24gKi8KKyNkZWZpbmUgTE9fQ1JZUFRfQkxPVwkJNAorI2RlZmluZSBMT19DUllQVF9DQVNUMTI4CTUKKyNkZWZpbmUgTE9fQ1JZUFRfSURFQQkJNgorI2RlZmluZSBMT19DUllQVF9EVU1NWQkJOQorI2RlZmluZSBMT19DUllQVF9TS0lQSkFDSwkxMAorI2RlZmluZSBMT19DUllQVF9DUllQVE9BUEkJMTgKKyNkZWZpbmUgTUFYX0xPX0NSWVBUCQkyMAorCisjaWZkZWYgX19LRVJORUxfXworLyogU3VwcG9ydCBmb3IgbG9hZGFibGUgdHJhbnNmZXIgbW9kdWxlcyAqLworc3RydWN0IGxvb3BfZnVuY190YWJsZSB7CisJaW50IG51bWJlcjsJLyogZmlsdGVyIHR5cGUgKi8gCisJaW50ICgqdHJhbnNmZXIpKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGludCBjbWQsCisJCQlzdHJ1Y3QgcGFnZSAqcmF3X3BhZ2UsIHVuc2lnbmVkIHJhd19vZmYsCisJCQlzdHJ1Y3QgcGFnZSAqbG9vcF9wYWdlLCB1bnNpZ25lZCBsb29wX29mZiwKKwkJCWludCBzaXplLCBzZWN0b3JfdCByZWFsX2Jsb2NrKTsKKwlpbnQgKCppbml0KShzdHJ1Y3QgbG9vcF9kZXZpY2UgKiwgY29uc3Qgc3RydWN0IGxvb3BfaW5mbzY0ICopOyAKKwkvKiByZWxlYXNlIGlzIGNhbGxlZCBmcm9tIGxvb3BfdW5yZWdpc3Rlcl90cmFuc2ZlciBvciBjbHJfZmQgKi8KKwlpbnQgKCpyZWxlYXNlKShzdHJ1Y3QgbG9vcF9kZXZpY2UgKik7IAorCWludCAoKmlvY3RsKShzdHJ1Y3QgbG9vcF9kZXZpY2UgKiwgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworCXN0cnVjdCBtb2R1bGUgKm93bmVyOworfTsgCisKK2ludCBsb29wX3JlZ2lzdGVyX3RyYW5zZmVyKHN0cnVjdCBsb29wX2Z1bmNfdGFibGUgKmZ1bmNzKTsKK2ludCBsb29wX3VucmVnaXN0ZXJfdHJhbnNmZXIoaW50IG51bWJlcik7IAorCisjZW5kaWYKKy8qCisgKiBJT0NUTCBjb21tYW5kcyAtLS0gd2Ugd2lsbCBjb21tYW5kZWVyIDB4NEMgKCdMJykKKyAqLworCisjZGVmaW5lIExPT1BfU0VUX0ZECQkweDRDMDAKKyNkZWZpbmUgTE9PUF9DTFJfRkQJCTB4NEMwMQorI2RlZmluZSBMT09QX1NFVF9TVEFUVVMJCTB4NEMwMgorI2RlZmluZSBMT09QX0dFVF9TVEFUVVMJCTB4NEMwMworI2RlZmluZSBMT09QX1NFVF9TVEFUVVM2NAkweDRDMDQKKyNkZWZpbmUgTE9PUF9HRVRfU1RBVFVTNjQJMHg0QzA1CisjZGVmaW5lIExPT1BfQ0hBTkdFX0ZECQkweDRDMDYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xwLmggYi9pbmNsdWRlL2xpbnV4L2xwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA1OWI2YgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbHAuaApAQCAtMCwwICsxLDE5MSBAQAorI2lmbmRlZiBfTElOVVhfTFBfSAorI2RlZmluZSBfTElOVVhfTFBfSAorCisvKgorICogdXNyL2luY2x1ZGUvbGludXgvbHAuaCBjLjE5OTEtMTk5MiBKYW1lcyBXaWVnYW5kCisgKiBtYW55IG1vZGlmaWNhdGlvbnMgY29weXJpZ2h0IChDKSAxOTkyIE1pY2hhZWwgSy4gSm9obnNvbgorICogSW50ZXJydXB0IHN1cHBvcnQgYWRkZWQgMTk5MyBOaWdlbCBHYW1ibGUKKyAqIFJlbW92ZWQgODI1NSBzdGF0dXMgZGVmaW5lcyBmcm9tIGluc2lkZSBfX0tFUk5FTF9fIE1hcmNlbG8gVG9zYXR0aSAKKyAqLworCisvKgorICogUGVyIFBPU0lYIGd1aWRlbGluZXMsIHRoaXMgbW9kdWxlIHJlc2VydmVzIHRoZSBMUCBhbmQgbHAgcHJlZml4ZXMKKyAqIFRoZXNlIGFyZSB0aGUgbHBfdGFibGVbbWlub3JdLmZsYWdzIGZsYWdzLi4uCisgKi8KKyNkZWZpbmUgTFBfRVhJU1QgMHgwMDAxCisjZGVmaW5lIExQX1NFTEVDIDB4MDAwMgorI2RlZmluZSBMUF9CVVNZCSAweDAwMDQKKyNkZWZpbmUgTFBfQlVTWV9CSVRfUE9TIDIKKyNkZWZpbmUgTFBfT0ZGTAkgMHgwMDA4CisjZGVmaW5lIExQX05PUEEgIDB4MDAxMAorI2RlZmluZSBMUF9FUlIgICAweDAwMjAKKyNkZWZpbmUgTFBfQUJPUlQgMHgwMDQwCisjZGVmaW5lIExQX0NBUkVGVUwgMHgwMDgwIC8qIG9ic29sZXRlZCAtYXJjYSAqLworI2RlZmluZSBMUF9BQk9SVE9QRU4gMHgwMTAwCisKKyNkZWZpbmUgTFBfVFJVU1RfSVJRXyAgMHgwMjAwIC8qIG9ic29sZXRlICovCisjZGVmaW5lIExQX05PX1JFVkVSU0UgIDB4MDQwMCAvKiBObyByZXZlcnNlIG1vZGUgYXZhaWxhYmxlLiAqLworI2RlZmluZSBMUF9EQVRBX0FWQUlMICAweDA4MDAgLyogRGF0YSBpcyBhdmFpbGFibGUuICovCisKKy8qIAorICogYml0IGRlZmluZXMgZm9yIDgyNTUgc3RhdHVzIHBvcnQKKyAqIGJhc2UgKyAxCisgKiBhY2Nlc3NlZCB3aXRoIExQX1MobWlub3IpLCB3aGljaCBnZXRzIHRoZSBieXRlLi4uCisgKi8KKyNkZWZpbmUgTFBfUEJVU1kJMHg4MCAgLyogaW52ZXJ0ZWQgaW5wdXQsIGFjdGl2ZSBoaWdoICovCisjZGVmaW5lIExQX1BBQ0sJCTB4NDAgIC8qIHVuY2hhbmdlZCBpbnB1dCwgYWN0aXZlIGxvdyAqLworI2RlZmluZSBMUF9QT1VUUEEJMHgyMCAgLyogdW5jaGFuZ2VkIGlucHV0LCBhY3RpdmUgaGlnaCAqLworI2RlZmluZSBMUF9QU0VMRUNECTB4MTAgIC8qIHVuY2hhbmdlZCBpbnB1dCwgYWN0aXZlIGhpZ2ggKi8KKyNkZWZpbmUgTFBfUEVSUk9SUAkweDA4ICAvKiB1bmNoYW5nZWQgaW5wdXQsIGFjdGl2ZSBsb3cgKi8KKworLyogdGltZW91dCBmb3IgZWFjaCBjaGFyYWN0ZXIuICBUaGlzIGlzIHJlbGF0aXZlIHRvIGJ1cyBjeWNsZXMgLS0gaXQKKyAqIGlzIHRoZSBjb3VudCBpbiBhIGJ1c3kgbG9vcC4gIFRISVMgSVMgVEhFIFZBTFVFIFRPIENIQU5HRSBpZiB5b3UKKyAqIGhhdmUgZXh0cmVtZWx5IHNsb3cgcHJpbnRpbmcsIG9yIGlmIHRoZSBtYWNoaW5lIHNlZW1zIHRvIHNsb3cgZG93bgorICogYSBsb3Qgd2hlbiB5b3UgcHJpbnQuICBJZiB5b3UgaGF2ZSBzbG93IHByaW50aW5nLCBpbmNyZWFzZSB0aGlzCisgKiBudW1iZXIgYW5kIHJlY29tcGlsZSwgYW5kIGlmIHlvdXIgc3lzdGVtIGdldHMgYm9nZ2VkIGRvd24sIGRlY3JlYXNlCisgKiB0aGlzIG51bWJlci4gIFRoaXMgY2FuIGJlIGNoYW5nZWQgd2l0aCB0aGUgdHVuZWxwKDgpIGNvbW1hbmQgYXMgd2VsbC4KKyAqLworCisjZGVmaW5lIExQX0lOSVRfQ0hBUiAxMDAwCisKKy8qIFRoZSBwYXJhbGxlbCBwb3J0IHNwZWNzIGFwcGFyZW50bHkgc2F5IHRoYXQgdGhlcmUgbmVlZHMgdG8gYmUKKyAqIGEgLjV1c2VjIHdhaXQgYmVmb3JlIGFuZCBhZnRlciB0aGUgc3Ryb2JlLgorICovCisKKyNkZWZpbmUgTFBfSU5JVF9XQUlUIDEKKworLyogVGhpcyBpcyB0aGUgYW1vdW50IG9mIHRpbWUgdGhhdCB0aGUgZHJpdmVyIHdhaXRzIGZvciB0aGUgcHJpbnRlciB0bworICogY2F0Y2ggdXAgd2hlbiB0aGUgcHJpbnRlcidzIGJ1ZmZlciBhcHBlYXJzIHRvIGJlIGZpbGxlZC4gIElmIHlvdQorICogd2FudCB0byB0dW5lIHRoaXMgYW5kIGhhdmUgYSBmYXN0IHByaW50ZXIgKGkuZS4gSFBJSUlQKSwgZGVjcmVhc2UKKyAqIHRoaXMgbnVtYmVyLCBhbmQgaWYgeW91IGhhdmUgYSBzbG93IHByaW50ZXIsIGluY3JlYXNlIHRoaXMgbnVtYmVyLgorICogVGhpcyBpcyBpbiBodW5kcmVkdGhzIG9mIGEgc2Vjb25kLCB0aGUgZGVmYXVsdCAyIGJlaW5nIC4wNSBzZWNvbmQuCisgKiBPciB1c2UgdGhlIHR1bmVscCg4KSBjb21tYW5kLCB3aGljaCBpcyBlc3BlY2lhbGx5IG5pY2UgaWYgeW91IHdhbnQKKyAqIGNoYW5nZSBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuIGNoYXJhY3RlciBhbmQgZ3JhcGhpY3MgcHJpbnRpbmcsIHdoaWNoCisgKiBhcmUgd2lsZGx5IGRpZmZlcmVudC4uLgorICovCisKKyNkZWZpbmUgTFBfSU5JVF9USU1FIDIKKworLyogSU9DVEwgbnVtYmVycyAqLworI2RlZmluZSBMUENIQVIgICAweDA2MDEgIC8qIGNvcnJlc3BvbmRzIHRvIExQX0lOSVRfQ0hBUiAqLworI2RlZmluZSBMUFRJTUUgICAweDA2MDIgIC8qIGNvcnJlc3BvbmRzIHRvIExQX0lOSVRfVElNRSAqLworI2RlZmluZSBMUEFCT1JUICAweDA2MDQgIC8qIGNhbGwgd2l0aCBUUlVFIGFyZyB0byBhYm9ydCBvbiBlcnJvciwKKwkJCSAgICBGQUxTRSB0byByZXRyeS4gIERlZmF1bHQgaXMgcmV0cnkuICAqLworI2RlZmluZSBMUFNFVElSUSAweDA2MDUgIC8qIGNhbGwgd2l0aCBuZXcgSVJRIG51bWJlciwKKwkJCSAgICBvciAwIGZvciBwb2xsaW5nIChubyBJUlEpICovCisjZGVmaW5lIExQR0VUSVJRIDB4MDYwNiAgLyogZ2V0IHRoZSBjdXJyZW50IElSUSBudW1iZXIgKi8KKyNkZWZpbmUgTFBXQUlUICAgMHgwNjA4ICAvKiBjb3JyZXNwb25kcyB0byBMUF9JTklUX1dBSVQgKi8KKy8qIE5PVEU6IExQQ0FSRUZVTCBpcyBvYnNvbGV0ZWQgYW5kIGl0JyBzIGFsd2F5cyB0aGUgZGVmYXVsdCByaWdodCBub3cgLWFyY2EgKi8KKyNkZWZpbmUgTFBDQVJFRlVMICAgMHgwNjA5ICAvKiBjYWxsIHdpdGggVFJVRSBhcmcgdG8gcmVxdWlyZSBvdXQtb2YtcGFwZXIsIG9mZi0KKwkJCSAgICBsaW5lLCBhbmQgZXJyb3IgaW5kaWNhdG9ycyBnb29kIG9uIGFsbCB3cml0ZXMsCisJCQkgICAgRkFMU0UgdG8gaWdub3JlIHRoZW0uICBEZWZhdWx0IGlzIGlnbm9yZS4gKi8KKyNkZWZpbmUgTFBBQk9SVE9QRU4gMHgwNjBhICAvKiBjYWxsIHdpdGggVFJVRSBhcmcgdG8gYWJvcnQgb3BlbigpIG9uIGVycm9yLAorCQkJICAgIEZBTFNFIHRvIGlnbm9yZSBlcnJvci4gIERlZmF1bHQgaXMgaWdub3JlLiAgKi8KKyNkZWZpbmUgTFBHRVRTVEFUVVMgMHgwNjBiICAvKiByZXR1cm4gTFBfUyhtaW5vcikgKi8KKyNkZWZpbmUgTFBSRVNFVCAgICAgMHgwNjBjICAvKiByZXNldCBwcmludGVyICovCisjaWZkZWYgTFBfU1RBVFMKKyNkZWZpbmUgTFBHRVRTVEFUUyAgMHgwNjBkICAvKiBnZXQgc3RhdGlzdGljcyAoc3RydWN0IGxwX3N0YXRzKSAqLworI2VuZGlmCisjZGVmaW5lIExQR0VURkxBR1MgIDB4MDYwZSAgLyogZ2V0IHN0YXR1cyBmbGFncyAqLworI2RlZmluZSBMUFNFVFRJTUVPVVQgMHgwNjBmIC8qIHNldCBwYXJwb3J0IHRpbWVvdXQgKi8KKworLyogdGltZW91dCBmb3IgcHJpbnRrJ2luZyBhIHRpbWVvdXQsIGluIGppZmZpZXMgKDEwMHRocyBvZiBhIHNlY29uZCkuCisgICBUaGlzIGlzIGFsc28gdXNlZCBmb3IgcmUtY2hlY2tpbmcgZXJyb3IgY29uZGl0aW9ucyBpZiBMUF9BQk9SVCBpcworICAgbm90IHNldC4gIFRoaXMgaXMgdGhlIGRlZmF1bHQgYmVoYXZpb3IuICovCisKKyNkZWZpbmUgTFBfVElNRU9VVF9JTlRFUlJVUFQJKDYwICogSFopCisjZGVmaW5lIExQX1RJTUVPVVRfUE9MTEVECSgxMCAqIEhaKQorCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KKworLyogTWFnaWMgbnVtYmVycyBmb3IgZGVmaW5pbmcgcG9ydC1kZXZpY2UgbWFwcGluZ3MgKi8KKyNkZWZpbmUgTFBfUEFSUE9SVF9VTlNQRUMgLTQKKyNkZWZpbmUgTFBfUEFSUE9SVF9BVVRPIC0zCisjZGVmaW5lIExQX1BBUlBPUlRfT0ZGIC0yCisjZGVmaW5lIExQX1BBUlBPUlRfTk9ORSAtMQorCisjZGVmaW5lIExQX0YobWlub3IpCWxwX3RhYmxlWyhtaW5vcildLmZsYWdzCQkvKiBmbGFncyBmb3IgYnVzeSwgZXRjLiAqLworI2RlZmluZSBMUF9DSEFSKG1pbm9yKQlscF90YWJsZVsobWlub3IpXS5jaGFycwkJLyogYnVzeSB0aW1lb3V0ICovCisjZGVmaW5lIExQX1RJTUUobWlub3IpCWxwX3RhYmxlWyhtaW5vcildLnRpbWUJCS8qIHdhaXQgdGltZSAqLworI2RlZmluZSBMUF9XQUlUKG1pbm9yKQlscF90YWJsZVsobWlub3IpXS53YWl0CQkvKiBzdHJvYmUgd2FpdCAqLworI2RlZmluZSBMUF9JUlEobWlub3IpCWxwX3RhYmxlWyhtaW5vcildLmRldi0+cG9ydC0+aXJxIC8qIGludGVycnVwdCAjICovCisJCQkJCS8qIFBBUlBPUlRfSVJRX05PTkUgbWVhbnMgcG9sbGVkICovCisjaWZkZWYgTFBfU1RBVFMKKyNkZWZpbmUgTFBfU1RBVChtaW5vcikJbHBfdGFibGVbKG1pbm9yKV0uc3RhdHMJCS8qIHN0YXRpc3RpY3MgYXJlYSAqLworI2VuZGlmCisjZGVmaW5lIExQX0JVRkZFUl9TSVpFIFBBR0VfU0laRQorCisjZGVmaW5lIExQX0JBU0UoeCkJbHBfdGFibGVbKHgpXS5kZXYtPnBvcnQtPmJhc2UKKworI2lmZGVmIExQX1NUQVRTCitzdHJ1Y3QgbHBfc3RhdHMgeworCXVuc2lnbmVkIGxvbmcgY2hhcnM7CisJdW5zaWduZWQgbG9uZyBzbGVlcHM7CisJdW5zaWduZWQgaW50IG1heHJ1bjsKKwl1bnNpZ25lZCBpbnQgbWF4d2FpdDsKKwl1bnNpZ25lZCBpbnQgbWVhbndhaXQ7CisJdW5zaWduZWQgaW50IG1kZXY7Cit9OworI2VuZGlmCisKK3N0cnVjdCBscF9zdHJ1Y3QgeworCXN0cnVjdCBwYXJkZXZpY2UgKmRldjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBjaGFyczsKKwl1bnNpZ25lZCBpbnQgdGltZTsKKwl1bnNpZ25lZCBpbnQgd2FpdDsKKwljaGFyICpscF9idWZmZXI7CisjaWZkZWYgTFBfU1RBVFMKKwl1bnNpZ25lZCBpbnQgbGFzdGNhbGw7CisJdW5zaWduZWQgaW50IHJ1bmNoYXJzOworCXN0cnVjdCBscF9zdGF0cyBzdGF0czsKKyNlbmRpZgorCXdhaXRfcXVldWVfaGVhZF90IHdhaXRxOworCXVuc2lnbmVkIGludCBsYXN0X2Vycm9yOworCXN0cnVjdCBzZW1hcGhvcmUgcG9ydF9tdXRleDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBkYXRhcTsKKwlsb25nIHRpbWVvdXQ7CisJdW5zaWduZWQgaW50IGJlc3RfbW9kZTsKKwl1bnNpZ25lZCBpbnQgY3VycmVudF9tb2RlOworCXVuc2lnbmVkIGxvbmcgYml0czsKK307CisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGNvbnN0YW50cyBkZXNjcmliZSB0aGUgdmFyaW91cyBzaWduYWxzIG9mIHRoZSBwcmludGVyIHBvcnQKKyAqIGhhcmR3YXJlLiAgTm90ZSB0aGF0IHRoZSBoYXJkd2FyZSBpbnZlcnRzIHNvbWUgc2lnbmFscyBhbmQgdGhhdCBzb21lCisgKiBzaWduYWxzIGFyZSBhY3RpdmUgbG93LiAgQW4gZXhhbXBsZSBpcyBMUF9TVFJPQkUsIHdoaWNoIG11c3QgYmUgcHJvZ3JhbW1lZAorICogd2l0aCAxIGZvciBiZWluZyBhY3RpdmUgYW5kIDAgZm9yIGJlaW5nIGluYWN0aXZlLCBiZWNhdXNlIHRoZSBzdHJvYmUgc2lnbmFsCisgKiBnZXRzIGludmVydGVkLCBidXQgaXQgaXMgYWxzbyBhY3RpdmUgbG93LgorICovCisKKworLyogCisgKiBkZWZpbmVzIGZvciA4MjU1IGNvbnRyb2wgcG9ydAorICogYmFzZSArIDIgCisgKiBhY2Nlc3NlZCB3aXRoIExQX0MobWlub3IpCisgKi8KKyNkZWZpbmUgTFBfUElOVEVOCTB4MTAgIC8qIGhpZ2ggdG8gcmVhZCBkYXRhIGluIG9yLWVkIHdpdGggZGF0YSBvdXQgKi8KKyNkZWZpbmUgTFBfUFNFTEVDUAkweDA4ICAvKiBpbnZlcnRlZCBvdXRwdXQsIGFjdGl2ZSBsb3cgKi8KKyNkZWZpbmUgTFBfUElOSVRQCTB4MDQgIC8qIHVuY2hhbmdlZCBvdXRwdXQsIGFjdGl2ZSBsb3cgKi8KKyNkZWZpbmUgTFBfUEFVVE9MRgkweDAyICAvKiBpbnZlcnRlZCBvdXRwdXQsIGFjdGl2ZSBsb3cgKi8KKyNkZWZpbmUgTFBfUFNUUk9CRQkweDAxICAvKiBzaG9ydCBoaWdoIG91dHB1dCBvbiByYWlzaW5nIGVkZ2UgKi8KKworLyogCisgKiB0aGUgdmFsdWUgd3JpdHRlbiB0byBwb3J0cyB0byB0ZXN0IGV4aXN0ZW5jZS4gUEMtc3R5bGUgcG9ydHMgd2lsbCAKKyAqIHJldHVybiB0aGUgdmFsdWUgd3JpdHRlbi4gQVQtc3R5bGUgcG9ydHMgd2lsbCByZXR1cm4gMC4gc28gd2h5IG5vdAorICogbWFrZSB0aGVtIHRoZSBzYW1lID8gCisgKi8KKyNkZWZpbmUgTFBfRFVNTVkJMHgwMAorCisvKgorICogVGhpcyBpcyB0aGUgcG9ydCBkZWxheSB0aW1lLCBpbiBtaWNyb3NlY29uZHMuCisgKiBJdCBpcyB1c2VkIG9ubHkgaW4gdGhlIGxwX2luaXQoKSBhbmQgbHBfcmVzZXQoKSByb3V0aW5lLgorICovCisjZGVmaW5lIExQX0RFTEFZIAk1MAorCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21ham9yLmggYi9pbmNsdWRlL2xpbnV4L21ham9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI2MmM0MgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbWFqb3IuaApAQCAtMCwwICsxLDE2NyBAQAorI2lmbmRlZiBfTElOVVhfTUFKT1JfSAorI2RlZmluZSBfTElOVVhfTUFKT1JfSAorCisvKgorICogVGhpcyBmaWxlIGhhcyBkZWZpbml0aW9ucyBmb3IgbWFqb3IgZGV2aWNlIG51bWJlcnMuCisgKiBGb3IgdGhlIGRldmljZSBudW1iZXIgYXNzaWdubWVudHMsIHNlZSBEb2N1bWVudGF0aW9uL2RldmljZXMudHh0LgorICovCisKKyNkZWZpbmUgVU5OQU1FRF9NQUpPUgkJMAorI2RlZmluZSBNRU1fTUFKT1IJCTEKKyNkZWZpbmUgUkFNRElTS19NQUpPUgkJMQorI2RlZmluZSBGTE9QUFlfTUFKT1IJCTIKKyNkZWZpbmUgUFRZX01BU1RFUl9NQUpPUgkyCisjZGVmaW5lIElERTBfTUFKT1IJCTMKKyNkZWZpbmUgSERfTUFKT1IJCUlERTBfTUFKT1IKKyNkZWZpbmUgUFRZX1NMQVZFX01BSk9SCQkzCisjZGVmaW5lIFRUWV9NQUpPUgkJNAorI2RlZmluZSBUVFlBVVhfTUFKT1IJCTUKKyNkZWZpbmUgTFBfTUFKT1IJCTYKKyNkZWZpbmUgVkNTX01BSk9SCQk3CisjZGVmaW5lIExPT1BfTUFKT1IJCTcKKyNkZWZpbmUgU0NTSV9ESVNLMF9NQUpPUgk4CisjZGVmaW5lIFNDU0lfVEFQRV9NQUpPUgkJOQorI2RlZmluZSBNRF9NQUpPUgkJOQorI2RlZmluZSBNSVNDX01BSk9SCQkxMAorI2RlZmluZSBTQ1NJX0NEUk9NX01BSk9SCTExCisjZGVmaW5lIE1VWF9NQUpPUgkJMTEJLyogUEEtUklTQyBvbmx5ICovCisjZGVmaW5lIFhUX0RJU0tfTUFKT1IJCTEzCisjZGVmaW5lIElOUFVUX01BSk9SCQkxMworI2RlZmluZSBTT1VORF9NQUpPUgkJMTQKKyNkZWZpbmUgQ0RVMzFBX0NEUk9NX01BSk9SCTE1CisjZGVmaW5lIEpPWVNUSUNLX01BSk9SCQkxNQorI2RlZmluZSBHT0xEU1RBUl9DRFJPTV9NQUpPUgkxNgorI2RlZmluZSBPUFRJQ1NfQ0RST01fTUFKT1IJMTcKKyNkZWZpbmUgU0FOWU9fQ0RST01fTUFKT1IJMTgKKyNkZWZpbmUgQ1lDTEFERVNfTUFKT1IJCTE5CisjZGVmaW5lIENZQ0xBREVTQVVYX01BSk9SCTIwCisjZGVmaW5lIE1JVFNVTUlfWF9DRFJPTV9NQUpPUgkyMAorI2RlZmluZSBNRk1fQUNPUk5fTUFKT1IJCTIxCS8qIEFSTSBMaW51eCAvZGV2L21mbSAqLworI2RlZmluZSBTQ1NJX0dFTkVSSUNfTUFKT1IJMjEKKyNkZWZpbmUgSURFMV9NQUpPUgkJMjIKKyNkZWZpbmUgRElHSUNVX01BSk9SCQkyMgorI2RlZmluZSBESUdJX01BSk9SCQkyMworI2RlZmluZSBNSVRTVU1JX0NEUk9NX01BSk9SCTIzCisjZGVmaW5lIENEVTUzNV9DRFJPTV9NQUpPUgkyNAorI2RlZmluZSBTVExfU0VSSUFMTUFKT1IJCTI0CisjZGVmaW5lIE1BVFNVU0hJVEFfQ0RST01fTUFKT1IJMjUKKyNkZWZpbmUgU1RMX0NBTExPVVRNQUpPUgkyNQorI2RlZmluZSBNQVRTVVNISVRBX0NEUk9NMl9NQUpPUgkyNgorI2RlZmluZSBRSUMxMTdfVEFQRV9NQUpPUgkyNworI2RlZmluZSBNQVRTVVNISVRBX0NEUk9NM19NQUpPUgkyNworI2RlZmluZSBNQVRTVVNISVRBX0NEUk9NNF9NQUpPUgkyOAorI2RlZmluZSBTVExfU0lPTUVNTUFKT1IJCTI4CisjZGVmaW5lIEFDU0lfTUFKT1IJCTI4CisjZGVmaW5lIEFaVEVDSF9DRFJPTV9NQUpPUgkyOQorI2RlZmluZSBHUkFQSERFVl9NQUpPUgkJMjkgICAvKiBTcGFyY0xpbnV4ICYgTGludXgvNjhrIC9kZXYvZmIgKi8KKyNkZWZpbmUgQ00yMDZfQ0RST01fTUFKT1IJMzIKKyNkZWZpbmUgSURFMl9NQUpPUgkJMzMKKyNkZWZpbmUgSURFM19NQUpPUgkJMzQKKyNkZWZpbmUgWjg1MzBfTUFKT1IJCTM0CisjZGVmaW5lIFhQUkFNX01BSk9SCQkzNSAgIC8qIEV4cGFuZGVkIHN0b3JhZ2Ugb24gUy8zOTA6ICJzbG93IHJhbSIqLworI2RlZmluZSBORVRMSU5LX01BSk9SCQkzNgorI2RlZmluZSBQUzJFU0RJX01BSk9SCQkzNgorI2RlZmluZSBJREVUQVBFX01BSk9SCQkzNworI2RlZmluZSBaMlJBTV9NQUpPUgkJMzcKKyNkZWZpbmUgQVBCTE9DS19NQUpPUgkJMzggICAvKiBBUDEwMDAgQmxvY2sgZGV2aWNlICovCisjZGVmaW5lIEREVl9NQUpPUgkJMzkgICAvKiBBUDEwMDAgRERWIGJsb2NrIGRldmljZSAqLworI2RlZmluZSBOQkRfTUFKT1IJCTQzICAgLyogTmV0d29yayBibG9jayBkZXZpY2UJKi8KKyNkZWZpbmUgUklTQ09NOF9OT1JNQUxfTUFKT1IJNDgKKyNkZWZpbmUgREFDOTYwX01BSk9SCQk0OCAgIC8qIDQ4Li41NSAqLworI2RlZmluZSBSSVNDT004X0NBTExPVVRfTUFKT1IJNDkKKyNkZWZpbmUgTUtJU1NfTUFKT1IJCTU1CisjZGVmaW5lIERTUDU2S19NQUpPUgkJNTUgICAvKiBEU1A1NjAwMSBwcm9jZXNzb3IgZGV2aWNlICovCisKKyNkZWZpbmUgSURFNF9NQUpPUgkJNTYKKyNkZWZpbmUgSURFNV9NQUpPUgkJNTcKKworI2RlZmluZSBTQ1NJX0RJU0sxX01BSk9SCTY1CisjZGVmaW5lIFNDU0lfRElTSzJfTUFKT1IJNjYKKyNkZWZpbmUgU0NTSV9ESVNLM19NQUpPUgk2NworI2RlZmluZSBTQ1NJX0RJU0s0X01BSk9SCTY4CisjZGVmaW5lIFNDU0lfRElTSzVfTUFKT1IJNjkKKyNkZWZpbmUgU0NTSV9ESVNLNl9NQUpPUgk3MAorI2RlZmluZSBTQ1NJX0RJU0s3X01BSk9SCTcxCisKKyNkZWZpbmUgQ09NUEFRX1NNQVJUMl9NQUpPUgk3MgorI2RlZmluZSBDT01QQVFfU01BUlQyX01BSk9SMQk3MworI2RlZmluZSBDT01QQVFfU01BUlQyX01BSk9SMgk3NAorI2RlZmluZSBDT01QQVFfU01BUlQyX01BSk9SMwk3NQorI2RlZmluZSBDT01QQVFfU01BUlQyX01BSk9SNAk3NgorI2RlZmluZSBDT01QQVFfU01BUlQyX01BSk9SNQk3NworI2RlZmluZSBDT01QQVFfU01BUlQyX01BSk9SNgk3OAorI2RlZmluZSBDT01QQVFfU01BUlQyX01BSk9SNwk3OQorCisjZGVmaW5lIFNQRUNJQUxJWF9OT1JNQUxfTUFKT1IJNzUKKyNkZWZpbmUgU1BFQ0lBTElYX0NBTExPVVRfTUFKT1IJNzYKKworI2RlZmluZSBBVVJPUkFfTUFKT1IJCTc5CisKKyNkZWZpbmUgSTJPX01BSk9SCQk4MAkvKiA4MC0+ODcgKi8KKworI2RlZmluZSBTSE1JUV9NQUpPUgkJODUgICAvKiBMaW51eC9taXBzLCBTR0kgL2Rldi9zaG1pcSAqLworCisjZGVmaW5lIElERTZfTUFKT1IJCTg4CisjZGVmaW5lIElERTdfTUFKT1IJCTg5CisjZGVmaW5lIElERThfTUFKT1IJCTkwCisjZGVmaW5lIElERTlfTUFKT1IJCTkxCisKKyNkZWZpbmUgREFTRF9NQUpPUgkJOTQKKworI2RlZmluZSBNRElTS19NQUpPUgkJOTUKKworI2RlZmluZSBVQkRfTUFKT1IJCTk4CisKKyNkZWZpbmUgSlNGRF9NQUpPUgkJOTkKKworI2RlZmluZSBQSE9ORV9NQUpPUgkJMTAwCisKKyNkZWZpbmUgQ09NUEFRX0NJU1NfTUFKT1IJMTA0CisjZGVmaW5lIENPTVBBUV9DSVNTX01BSk9SMQkxMDUKKyNkZWZpbmUgQ09NUEFRX0NJU1NfTUFKT1IyICAgICAgMTA2CisjZGVmaW5lIENPTVBBUV9DSVNTX01BSk9SMyAgICAgIDEwNworI2RlZmluZSBDT01QQVFfQ0lTU19NQUpPUjQgICAgICAxMDgKKyNkZWZpbmUgQ09NUEFRX0NJU1NfTUFKT1I1ICAgICAgMTA5CisjZGVmaW5lIENPTVBBUV9DSVNTX01BSk9SNiAgICAgIDExMAorI2RlZmluZSBDT01QQVFfQ0lTU19NQUpPUjcgICAgICAxMTEKKworI2RlZmluZSBWSU9EQVNEX01BSk9SCQkxMTIKKyNkZWZpbmUgVklPQ0RfTUFKT1IJCTExMworCisjZGVmaW5lIEFUQVJBSURfTUFKT1IJCTExNAorCisjZGVmaW5lIFNDU0lfRElTSzhfTUFKT1IJMTI4CisjZGVmaW5lIFNDU0lfRElTSzlfTUFKT1IJMTI5CisjZGVmaW5lIFNDU0lfRElTSzEwX01BSk9SCTEzMAorI2RlZmluZSBTQ1NJX0RJU0sxMV9NQUpPUgkxMzEKKyNkZWZpbmUgU0NTSV9ESVNLMTJfTUFKT1IJMTMyCisjZGVmaW5lIFNDU0lfRElTSzEzX01BSk9SCTEzMworI2RlZmluZSBTQ1NJX0RJU0sxNF9NQUpPUgkxMzQKKyNkZWZpbmUgU0NTSV9ESVNLMTVfTUFKT1IJMTM1CisKKyNkZWZpbmUgVU5JWDk4X1BUWV9NQVNURVJfTUFKT1IJMTI4CisjZGVmaW5lIFVOSVg5OF9QVFlfTUFKT1JfQ09VTlQJOAorI2RlZmluZSBVTklYOThfUFRZX1NMQVZFX01BSk9SCShVTklYOThfUFRZX01BU1RFUl9NQUpPUitVTklYOThfUFRZX01BSk9SX0NPVU5UKQorCisjZGVmaW5lIFJURl9NQUpPUgkJMTUwCisjZGVmaW5lIFJBV19NQUpPUgkJMTYyCisKKyNkZWZpbmUgVVNCX0FDTV9NQUpPUgkJMTY2CisjZGVmaW5lIFVTQl9BQ01fQVVYX01BSk9SCTE2NworI2RlZmluZSBVU0JfQ0hBUl9NQUpPUgkJMTgwCisKKyNkZWZpbmUgVlhWTV9NQUpPUgkJMTk5CS8qIFZFUklUQVMgdm9sdW1lIGkvbyBkcml2ZXIgICAgKi8KKyNkZWZpbmUgVlhTUEVDX01BSk9SCQkyMDAJLyogVkVSSVRBUyB2b2x1bWUgY29uZmlnIGRyaXZlciAqLworI2RlZmluZSBWWERNUF9NQUpPUgkJMjAxCS8qIFZFUklUQVMgdm9sdW1lIG11bHRpcGF0aCBkcml2ZXIgKi8KKworI2RlZmluZSBNU1JfTUFKT1IJCTIwMgorI2RlZmluZSBDUFVJRF9NQUpPUgkJMjAzCisKKyNkZWZpbmUgT1NTVF9NQUpPUgkJMjA2CS8qIE9uU3RyZWFtLVNDeDAgU0NTSSB0YXBlICovCisKKyNkZWZpbmUgSUJNX1RUWTMyNzBfTUFKT1IJMjI3CisjZGVmaW5lIElCTV9GUzMyNzBfTUFKT1IJMjI4CisKKyNkZWZpbmUgVklPVEFQRV9NQUpPUgkJMjMwCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tYXRyb3hmYi5oIGIvaW5jbHVkZS9saW51eC9tYXRyb3hmYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlNWIwOTQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L21hdHJveGZiLmgKQEAgLTAsMCArMSw0MyBAQAorI2lmbmRlZiBfX0xJTlVYX01BVFJPWEZCX0hfXworI2RlZmluZSBfX0xJTlVYX01BVFJPWEZCX0hfXworCisjaW5jbHVkZSA8YXNtL2lvY3RsLmg+CisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisKK3N0cnVjdCBtYXRyb3hpb2Nfb3V0cHV0X21vZGUgeworCV9fdTMyCW91dHB1dDsJCS8qIHdoaWNoIG91dHB1dCAqLworI2RlZmluZSBNQVRST1hGQl9PVVRQVVRfUFJJTUFSWQkJMHgwMDAwCisjZGVmaW5lIE1BVFJPWEZCX09VVFBVVF9TRUNPTkRBUlkJMHgwMDAxCisjZGVmaW5lIE1BVFJPWEZCX09VVFBVVF9ERlAJCTB4MDAwMgorCV9fdTMyCW1vZGU7CQkvKiB3aGljaCBtb2RlICovCisjZGVmaW5lIE1BVFJPWEZCX09VVFBVVF9NT0RFX1BBTAkweDAwMDEKKyNkZWZpbmUgTUFUUk9YRkJfT1VUUFVUX01PREVfTlRTQwkweDAwMDIKKyNkZWZpbmUgTUFUUk9YRkJfT1VUUFVUX01PREVfTU9OSVRPUgkweDAwODAKK307CisjZGVmaW5lIE1BVFJPWEZCX1NFVF9PVVRQVVRfTU9ERQlfSU9XKCduJywweEZBLHNpemVfdCkKKyNkZWZpbmUgTUFUUk9YRkJfR0VUX09VVFBVVF9NT0RFCV9JT1dSKCduJywweEZBLHNpemVfdCkKKworLyogYml0ZmllbGQgKi8KKyNkZWZpbmUgTUFUUk9YRkJfT1VUUFVUX0NPTk5fUFJJTUFSWQkoMSA8PCBNQVRST1hGQl9PVVRQVVRfUFJJTUFSWSkKKyNkZWZpbmUgTUFUUk9YRkJfT1VUUFVUX0NPTk5fU0VDT05EQVJZCSgxIDw8IE1BVFJPWEZCX09VVFBVVF9TRUNPTkRBUlkpCisjZGVmaW5lIE1BVFJPWEZCX09VVFBVVF9DT05OX0RGUAkoMSA8PCBNQVRST1hGQl9PVVRQVVRfREZQKQorLyogY29ubmVjdCB0aGVzZSBvdXRwdXRzIHRvIHRoaXMgZnJhbWVidWZmZXIgKi8KKyNkZWZpbmUgTUFUUk9YRkJfU0VUX09VVFBVVF9DT05ORUNUSU9OCV9JT1coJ24nLDB4Rjgsc2l6ZV90KQorLyogd2hpY2ggb3V0cHV0cyBhcmUgY29ubmVjdGVkIHRvIHRoaXMgZnJhbWVidWZmZXIgKi8KKyNkZWZpbmUgTUFUUk9YRkJfR0VUX09VVFBVVF9DT05ORUNUSU9OCV9JT1IoJ24nLDB4Rjgsc2l6ZV90KQorLyogd2hpY2ggb3V0cHV0cyBhcmUgYXZhaWxhYmxlIGZvciB0aGlzIGZyYW1lYnVmZmVyICovCisjZGVmaW5lIE1BVFJPWEZCX0dFVF9BVkFJTEFCTEVfT1VUUFVUUwlfSU9SKCduJywweEY5LHNpemVfdCkKKy8qIHdoaWNoIG91dHB1dHMgZXhpc3Qgb24gdGhpcyBmcmFtZWJ1ZmZlciAqLworI2RlZmluZSBNQVRST1hGQl9HRVRfQUxMX09VVFBVVFMJX0lPUignbicsMHhGQixzaXplX3QpCisKK2VudW0gbWF0cm94ZmJfY3RybF9pZCB7CisgIE1BVFJPWEZCX0NJRF9URVNUT1VUCSA9IFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSwKKyAgTUFUUk9YRkJfQ0lEX0RFRkxJQ0tFUiwKKyAgTUFUUk9YRkJfQ0lEX0xBU1QKK307CisKKyNkZWZpbmUgRkJJT19XQUlURk9SVlNZTkMJX0lPVygnRicsIDB4MjAsIHVfaW50MzJfdCkKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWJjYWNoZS5oIGIvaW5jbHVkZS9saW51eC9tYmNhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU1YTEwNDEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L21iY2FjaGUuaApAQCAtMCwwICsxLDUyIEBACisvKgorICBGaWxlOiBsaW51eC9tYmNhY2hlLmgKKworICAoQykgMjAwMSBieSBBbmRyZWFzIEdydWVuYmFjaGVyLCA8YS5ncnVlbmJhY2hlckBjb21wdXRlci5vcmc+CisqLworCisvKiBIYXJkd2lyZSB0aGUgbnVtYmVyIG9mIGFkZGl0aW9uYWwgaW5kZXhlcyAqLworI2RlZmluZSBNQl9DQUNIRV9JTkRFWEVTX0NPVU5UIDEKKworc3RydWN0IG1iX2NhY2hlX2VudHJ5IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQllX2xydV9saXN0OworCXN0cnVjdCBtYl9jYWNoZQkJCSplX2NhY2hlOworCXVuc2lnbmVkIHNob3J0CQkJZV91c2VkOworCXVuc2lnbmVkIHNob3J0CQkJZV9xdWV1ZWQ7CisJc3RydWN0IGJsb2NrX2RldmljZQkJKmVfYmRldjsKKwlzZWN0b3JfdAkJCWVfYmxvY2s7CisJc3RydWN0IGxpc3RfaGVhZAkJZV9ibG9ja19saXN0OworCXN0cnVjdCB7CisJCXN0cnVjdCBsaXN0X2hlYWQJb19saXN0OworCQl1bnNpZ25lZCBpbnQJCW9fa2V5OworCX0gZV9pbmRleGVzWzBdOworfTsKKworc3RydWN0IG1iX2NhY2hlX29wIHsKKwlpbnQgKCpmcmVlKShzdHJ1Y3QgbWJfY2FjaGVfZW50cnkgKiwgaW50KTsKK307CisKKy8qIEZ1bmN0aW9ucyBvbiBjYWNoZXMgKi8KKworc3RydWN0IG1iX2NhY2hlICogbWJfY2FjaGVfY3JlYXRlKGNvbnN0IGNoYXIgKiwgc3RydWN0IG1iX2NhY2hlX29wICosIHNpemVfdCwKKwkJCQkgIGludCwgaW50KTsKK3ZvaWQgbWJfY2FjaGVfc2hyaW5rKHN0cnVjdCBtYl9jYWNoZSAqLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICopOwordm9pZCBtYl9jYWNoZV9kZXN0cm95KHN0cnVjdCBtYl9jYWNoZSAqKTsKKworLyogRnVuY3Rpb25zIG9uIGNhY2hlIGVudHJpZXMgKi8KKworc3RydWN0IG1iX2NhY2hlX2VudHJ5ICptYl9jYWNoZV9lbnRyeV9hbGxvYyhzdHJ1Y3QgbWJfY2FjaGUgKik7CitpbnQgbWJfY2FjaGVfZW50cnlfaW5zZXJ0KHN0cnVjdCBtYl9jYWNoZV9lbnRyeSAqLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICosCisJCQkgIHNlY3Rvcl90LCB1bnNpZ25lZCBpbnRbXSk7Cit2b2lkIG1iX2NhY2hlX2VudHJ5X3JlbGVhc2Uoc3RydWN0IG1iX2NhY2hlX2VudHJ5ICopOwordm9pZCBtYl9jYWNoZV9lbnRyeV9mcmVlKHN0cnVjdCBtYl9jYWNoZV9lbnRyeSAqKTsKK3N0cnVjdCBtYl9jYWNoZV9lbnRyeSAqbWJfY2FjaGVfZW50cnlfZ2V0KHN0cnVjdCBtYl9jYWNoZSAqLAorCQkJCQkgIHN0cnVjdCBibG9ja19kZXZpY2UgKiwKKwkJCQkJICBzZWN0b3JfdCk7CisjaWYgIWRlZmluZWQoTUJfQ0FDSEVfSU5ERVhFU19DT1VOVCkgfHwgKE1CX0NBQ0hFX0lOREVYRVNfQ09VTlQgPiAwKQorc3RydWN0IG1iX2NhY2hlX2VudHJ5ICptYl9jYWNoZV9lbnRyeV9maW5kX2ZpcnN0KHN0cnVjdCBtYl9jYWNoZSAqY2FjaGUsIGludCwKKwkJCQkJCSBzdHJ1Y3QgYmxvY2tfZGV2aWNlICosIAorCQkJCQkJIHVuc2lnbmVkIGludCk7CitzdHJ1Y3QgbWJfY2FjaGVfZW50cnkgKm1iX2NhY2hlX2VudHJ5X2ZpbmRfbmV4dChzdHJ1Y3QgbWJfY2FjaGVfZW50cnkgKiwgaW50LAorCQkJCQkJc3RydWN0IGJsb2NrX2RldmljZSAqLCAKKwkJCQkJCXVuc2lnbmVkIGludCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWMxNDY4MThydGMuaCBiL2luY2x1ZGUvbGludXgvbWMxNDY4MThydGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmM5M2FlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9tYzE0NjgxOHJ0Yy5oCkBAIC0wLDAgKzEsOTIgQEAKKy8qIG1jMTQ2ODE4cnRjLmggLSByZWdpc3RlciBkZWZpbml0aW9ucyBmb3IgdGhlIFJlYWwtVGltZS1DbG9jayAvIENNT1MgUkFNCisgKiBDb3B5cmlnaHQgVG9yc3RlbiBEdXdlIDxkdXdlQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPiAxOTkzCisgKiBkZXJpdmVkIGZyb20gRGF0YSBTaGVldCwgQ29weXJpZ2h0IE1vdG9yb2xhIDE5ODQgKCEpLgorICogSXQgd2FzIHdyaXR0ZW4gdG8gYmUgcGFydCBvZiB0aGUgTGludXggb3BlcmF0aW5nIHN5c3RlbS4KKyAqLworLyogcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBjb3B5LCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGlzIGNvZGUKKyAqIGluIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBWZXJzaW9uIDIgb3IgbGF0ZXIsCisgKiBhdCB5b3VyIG9wdGlvbi4KKyAqLworCisjaWZuZGVmIF9NQzE0NjgxOFJUQ19ICisjZGVmaW5lIF9NQzE0NjgxOFJUQ19ICisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9ydGMuaD4JCQkvKiBnZXQgdGhlIHVzZXItbGV2ZWwgQVBJICovCisjaW5jbHVkZSA8YXNtL21jMTQ2ODE4cnRjLmg+CQkvKiByZWdpc3RlciBhY2Nlc3MgbWFjcm9zICovCisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4JCS8qIHNwaW5sb2NrX3QgKi8KK2V4dGVybiBzcGlubG9ja190IHJ0Y19sb2NrOwkJLyogc2VyaWFsaXplIENNT1MgUkFNIGFjY2VzcyAqLworI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiByZWdpc3RlciBzdW1tYXJ5CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgUlRDX1NFQ09ORFMJCTAKKyNkZWZpbmUgUlRDX1NFQ09ORFNfQUxBUk0JMQorI2RlZmluZSBSVENfTUlOVVRFUwkJMgorI2RlZmluZSBSVENfTUlOVVRFU19BTEFSTQkzCisjZGVmaW5lIFJUQ19IT1VSUwkJNAorI2RlZmluZSBSVENfSE9VUlNfQUxBUk0JCTUKKy8qIFJUQ18qX2FsYXJtIGlzIGFsd2F5cyB0cnVlIGlmIDIgTVNCcyBhcmUgc2V0ICovCisjIGRlZmluZSBSVENfQUxBUk1fRE9OVF9DQVJFIAkweEMwCisKKyNkZWZpbmUgUlRDX0RBWV9PRl9XRUVLCQk2CisjZGVmaW5lIFJUQ19EQVlfT0ZfTU9OVEgJNworI2RlZmluZSBSVENfTU9OVEgJCTgKKyNkZWZpbmUgUlRDX1lFQVIJCTkKKworLyogY29udHJvbCByZWdpc3RlcnMgLSBNb3RvIG5hbWVzCisgKi8KKyNkZWZpbmUgUlRDX1JFR19BCQkxMAorI2RlZmluZSBSVENfUkVHX0IJCTExCisjZGVmaW5lIFJUQ19SRUdfQwkJMTIKKyNkZWZpbmUgUlRDX1JFR19ECQkxMworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogcmVnaXN0ZXIgZGV0YWlscworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFJUQ19GUkVRX1NFTEVDVAlSVENfUkVHX0EKKworLyogdXBkYXRlLWluLXByb2dyZXNzICAtIHNldCB0byAiMSIgMjQ0IG1pY3Jvc2VjcyBiZWZvcmUgUlRDIGdvZXMgb2ZmIHRoZSBidXMsCisgKiByZXNldCBhZnRlciB1cGRhdGUgKG1heSB0YWtlIDEuOTg0bXMgQCAzMjc2OEh6IFJlZkNsb2NrKSBpcyBjb21wbGV0ZSwKKyAqIHRvdGFsbGluZyB0byBhIG1heCBoaWdoIGludGVydmFsIG9mIDIuMjI4IG1zLgorICovCisjIGRlZmluZSBSVENfVUlQCQkweDgwCisjIGRlZmluZSBSVENfRElWX0NUTAkJMHg3MAorICAgLyogZGl2aWRlciBjb250cm9sOiByZWZjbG9jayB2YWx1ZXMgNC4xOTQgLyAxLjA0OSBNSHogLyAzMi43Njgga0h6ICovCisjICBkZWZpbmUgUlRDX1JFRl9DTENLXzRNSFoJMHgwMAorIyAgZGVmaW5lIFJUQ19SRUZfQ0xDS18xTUhaCTB4MTAKKyMgIGRlZmluZSBSVENfUkVGX0NMQ0tfMzJLSFoJMHgyMAorICAgLyogMiB2YWx1ZXMgZm9yIGRpdmlkZXIgc3RhZ2UgcmVzZXQsIG90aGVycyBmb3IgInRlc3RpbmcgcHVycG9zZXMgb25seSIgKi8KKyMgIGRlZmluZSBSVENfRElWX1JFU0VUMQkweDYwCisjICBkZWZpbmUgUlRDX0RJVl9SRVNFVDIJMHg3MAorICAvKiBQZXJpb2RpYyBpbnRyLiAvIFNxdWFyZSB3YXZlIHJhdGUgc2VsZWN0LiAwPW5vbmUsIDE9MzIuOGtIeiwuLi4gMTU9Mkh6ICovCisjIGRlZmluZSBSVENfUkFURV9TRUxFQ1QgCTB4MEYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFJUQ19DT05UUk9MCVJUQ19SRUdfQgorIyBkZWZpbmUgUlRDX1NFVCAweDgwCQkvKiBkaXNhYmxlIHVwZGF0ZXMgZm9yIGNsb2NrIHNldHRpbmcgKi8KKyMgZGVmaW5lIFJUQ19QSUUgMHg0MAkJLyogcGVyaW9kaWMgaW50ZXJydXB0IGVuYWJsZSAqLworIyBkZWZpbmUgUlRDX0FJRSAweDIwCQkvKiBhbGFybSBpbnRlcnJ1cHQgZW5hYmxlICovCisjIGRlZmluZSBSVENfVUlFIDB4MTAJCS8qIHVwZGF0ZS1maW5pc2hlZCBpbnRlcnJ1cHQgZW5hYmxlICovCisjIGRlZmluZSBSVENfU1FXRSAweDA4CQkvKiBlbmFibGUgc3F1YXJlLXdhdmUgb3V0cHV0ICovCisjIGRlZmluZSBSVENfRE1fQklOQVJZIDB4MDQJLyogYWxsIHRpbWUvZGF0ZSB2YWx1ZXMgYXJlIEJDRCBpZiBjbGVhciAqLworIyBkZWZpbmUgUlRDXzI0SCAweDAyCQkvKiAyNCBob3VyIG1vZGUgLSBlbHNlIGhvdXJzIGJpdCA3IG1lYW5zIHBtICovCisjIGRlZmluZSBSVENfRFNUX0VOIDB4MDEJLyogYXV0byBzd2l0Y2ggRFNUIC0gd29ya3MgZi4gVVNBIG9ubHkgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFJUQ19JTlRSX0ZMQUdTCVJUQ19SRUdfQworLyogY2F1dGlvbiAtIGNsZWFyZWQgYnkgcmVhZCAqLworIyBkZWZpbmUgUlRDX0lSUUYgMHg4MAkJLyogYW55IG9mIHRoZSBmb2xsb3dpbmcgMyBpcyBhY3RpdmUgKi8KKyMgZGVmaW5lIFJUQ19QRiAweDQwCisjIGRlZmluZSBSVENfQUYgMHgyMAorIyBkZWZpbmUgUlRDX1VGIDB4MTAKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFJUQ19WQUxJRAlSVENfUkVHX0QKKyMgZGVmaW5lIFJUQ19WUlQgMHg4MAkJLyogdmFsaWQgUkFNIGFuZCB0aW1lICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2VuZGlmIC8qIF9NQzE0NjgxOFJUQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21jNjgyMS5oIGIvaW5jbHVkZS9saW51eC9tYzY4MjEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGUzMDFlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9tYzY4MjEuaApAQCAtMCwwICsxLDUxIEBACisjaWZuZGVmIF9NQzY4MjFfSF8KKyNkZWZpbmUgX01DNjgyMV9IXworCisvKgorICogVGhpcyBmaWxlIGRlc2NyaWJlcyB0aGUgbWVtZXJ5IG1hcHBpbmcgb2YgdGhlIE1DNjgyMSBQSUEuCisgKiBUaGUgdW5pb25zIGRlc2NyaWJlIG92ZXJsYXllZCByZWdpc3RlcnMuIFdoaWNoIG9mIHRoZW0gaXMgdXNlZCBpcworICogZGV0ZXJtaW5lZCBieSBiaXQgMiBvZiB0aGUgY29ycmVzcG9uZGluZyBjb250cm9sIHJlZ2lzdGVyLgorICogdGhpcyBmaWxlcyBleHBlY3RzIHRoZSBQSUFfUkVHX1BBRFdJRFRIIHRvIGJlIGRlZmluZWQgdGhlIG51bWVyaWMKKyAqIHZhbHVlIG9mIHRoZSByZWdpc3RlciBzcGFjaW5nLgorICoKKyAqIERhdGEgY2FtZSBmcm9tIE1GQy0zMS1EZXZlbG9wZXIgS2l0IChmcm9tIFJhbHBoIFNlaWRlbCwKKyAqIHpvZGlhY0BkYXJrbmVzcy5ndW4uZGUpIGFuZCBNb3Rvcm9sYSBEYXRhIFNoZWV0IChmcm9tIAorICogUmljaGFyZCBIaXJzdCwgc3JoQGdwdC5jby51aykKKyAqCisgKiA2LjExLjk1IGNvcHlyaWdodCBKb2VyZyBEb3JjaGFpbiAoZG9yY2hhaW5AbXBpLXNiLm1wZy5kZSkKKyAqCisgKi8KKworI2lmbmRlZiBQSUFfUkVHX1BBRFdJRFRICisjZGVmaW5lIFBJQV9SRUdfUEFEV0lEVEggMjU1CisjZW5kaWYKKworc3RydWN0IHBpYSB7CisJdW5pb24geworCQl2b2xhdGlsZSB1X2NoYXIgcHJhOworCQl2b2xhdGlsZSB1X2NoYXIgZGRyYTsKKwl9IHVhOworCXVfY2hhciBwYWQxW1BJQV9SRUdfUEFEV0lEVEhdOworCXZvbGF0aWxlIHVfY2hhciBjcmE7CisJdV9jaGFyIHBhZDJbUElBX1JFR19QQURXSURUSF07CisJdW5pb24geworCQl2b2xhdGlsZSB1X2NoYXIgcHJiOworCQl2b2xhdGlsZSB1X2NoYXIgZGRyYjsKKwl9IHViOworCXVfY2hhciBwYWQzW1BJQV9SRUdfUEFEV0lEVEhdOworCXZvbGF0aWxlIHVfY2hhciBjcmI7CisJdV9jaGFyIHBhZDRbUElBX1JFR19QQURXSURUSF07Cit9OworCisjZGVmaW5lIHBwcmEgdWEucHJhCisjZGVmaW5lIHBkZHJhIHVhLmRkcmEKKyNkZWZpbmUgcHByYiB1Yi5wcmIKKyNkZWZpbmUgcGRkcmIgdWIuZGRyYgorCisjZGVmaW5lIFBJQV9DMV9FTkFCTEVfSVJRICgxPDwwKQorI2RlZmluZSBQSUFfQzFfTE9XX1RPX0hJR0ggKDE8PDEpCisjZGVmaW5lIFBJQV9ERFIgKDE8PDIpCisjZGVmaW5lIFBJQV9JUlEyICgxPDw2KQorI2RlZmluZSBQSUFfSVJRMSAoMTw8NykKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21jYS1sZWdhY3kuaCBiL2luY2x1ZGUvbGludXgvbWNhLWxlZ2FjeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyYmI3NzAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L21jYS1sZWdhY3kuaApAQCAtMCwwICsxLDY3IEBACisvKiAtKi0gbW9kZTogYzsgYy1iYXNpYy1vZmZzZXQ6IDggLSotICovCisKKy8qIFRoaXMgaXMgdGhlIGZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIHRoZSBvbGQgbGVnYWN5IE1DQSBpbnRlcmZhY2UKKyAqCisgKiBQbGVhc2UgbW92ZSB5b3VyIGRyaXZlciB0byB0aGUgbmV3IHN5c2ZzIGJhc2VkIG9uZSBpbnN0ZWFkICovCisKKyNpZm5kZWYgX0xJTlVYX01DQV9MRUdBQ1lfSAorI2RlZmluZSBfTElOVVhfTUNBX0xFR0FDWV9ICisKKyNpbmNsdWRlIDxsaW51eC9tY2EuaD4KKworI3dhcm5pbmcgIk1DQSBsZWdhY3kgLSBwbGVhc2UgbW92ZSB5b3VyIGRyaXZlciB0byB0aGUgbmV3IHN5c2ZzIGFwaSIKKworLyogTUNBX05PVEZPVU5EIGlzIGFuIGVycm9yIGNvbmRpdGlvbi4gIFRoZSBvdGhlciB0d28gaW5kaWNhdGUKKyAqIG1vdGhlcmJvYXJkIFBPUyByZWdpc3RlcnMgY29udGFpbiB0aGUgYWRhcHRlci4gIFRoZXkgbWlnaHQgYmUKKyAqIHJldHVybmVkIGJ5IHRoZSBtY2FfZmluZF9hZGFwdGVyKCkgZnVuY3Rpb24sIGFuZCBjYW4gYmUgdXNlZCBhcworICogYXJndW1lbnRzIHRvIG1jYV9yZWFkX3N0b3JlZF9wb3MoKS4gIEknbSBub3QgZ29pbmcgdG8gYWxsb3cgZGlyZWN0CisgKiBhY2Nlc3MgdG8gdGhlIG1vdGhlcmJvYXJkIHJlZ2lzdGVycyB1bnRpbCB3ZSBydW4gYWNyb3NzIGFuIGFkYXB0ZXIKKyAqIHRoYXQgcmVxdWlyZXMgaXQuICBXZSBkb24ndCBrbm93IGVub3VnaCBhYm91dCB0aGVtIHRvIGtub3cgaWYgaXQncworICogc2FmZS4KKyAqCisgKiBTZWUgRG9jdW1lbnRhdGlvbi9tY2EudHh0IG9yIG9uZSBvZiB0aGUgZXhpc3RpbmcgZHJpdmVycyBmb3IKKyAqIG1vcmUgaW5mb3JtYXRpb24uCisgKi8KKyNkZWZpbmUgTUNBX05PVEZPVU5ECSgtMSkKKworCisKKy8qIFJldHVybnMgdGhlIHNsb3Qgb2YgdGhlIGZpcnN0IGVuYWJsZWQgYWRhcHRlciBtYXRjaGluZyBpZC4gIFVzZXIgY2FuCisgKiBzcGVjaWZ5IGEgc3RhcnRpbmcgc2xvdCBiZXlvbmQgemVybywgdG8gZGVhbCB3aXRoIGRldGVjdGluZyBtdWx0aXBsZQorICogZGV2aWNlcy4gIFJldHVybnMgTUNBX05PVEZPVU5EIGlmIGlkIG5vdCBmb3VuZC4gIEFsc28gY2hlY2tzIHRoZQorICogaW50ZWdyYXRlZCBhZGFwdGVycy4KKyAqLworZXh0ZXJuIGludCBtY2FfZmluZF9hZGFwdGVyKGludCBpZCwgaW50IHN0YXJ0KTsKK2V4dGVybiBpbnQgbWNhX2ZpbmRfdW51c2VkX2FkYXB0ZXIoaW50IGlkLCBpbnQgc3RhcnQpOworCitleHRlcm4gaW50IG1jYV9pc19hZGFwdGVyX3VzZWQoaW50IHNsb3QpOworZXh0ZXJuIGludCBtY2FfbWFya19hc191c2VkKGludCBzbG90KTsKK2V4dGVybiB2b2lkIG1jYV9tYXJrX2FzX3VudXNlZChpbnQgc2xvdCk7CisKKy8qIGdldHMgYSBieXRlIG91dCBvZiBQT1MgcmVnaXN0ZXIgKHN0b3JlZCBpbiBtZW1vcnkpICovCitleHRlcm4gdW5zaWduZWQgY2hhciBtY2FfcmVhZF9zdG9yZWRfcG9zKGludCBzbG90LCBpbnQgcmVnKTsKKworLyogVGhpcyBjYW4gYmUgZXhwYW5kZWQgbGF0ZXIuICBSaWdodCBub3csIGl0IGdpdmVzIHVzIGEgd2F5IG9mCisgKiBnZXR0aW5nIG1lYW5pbmdmdWwgaW5mb3JtYXRpb24gaW50byB0aGUgTUNBX2luZm8gc3RydWN0dXJlLAorICogc28gd2UgY2FuIGhhdmUgYSBtb3JlIGludGVyZXN0aW5nIC9wcm9jL21jYS4KKyAqLworZXh0ZXJuIHZvaWQgbWNhX3NldF9hZGFwdGVyX25hbWUoaW50IHNsb3QsIGNoYXIqIG5hbWUpOworCisvKiBUaGVzZSByb3V0aW5lcyBhY3R1YWxseSBtZXNzIHdpdGggdGhlIGhhcmR3YXJlIFBPUyByZWdpc3RlcnMuICBUaGV5CisgKiB0ZW1wb3JhcmlseSBkaXNhYmxlIHRoZSBkZXZpY2UgKGFuZCBpbnRlcnJ1cHRzKSwgc28gbWFrZSBzdXJlIHlvdSBrbm93CisgKiB3aGF0IHlvdSdyZSBkb2luZyBpZiB5b3UgdXNlIHRoZW0uICBGdXJ0aGVybW9yZSwgd3JpdGluZyB0byBhIFBPUyBtYXkKKyAqIHJlc3VsdCBpbiB0d28gZGV2aWNlcyB0cnlpbmcgdG8gc2hhcmUgYSByZXNvdXJjZSwgd2hpY2ggaW4gdHVybiBjYW4KKyAqIHJlc3VsdCBpbiBtdWx0aXBsZSBkZXZpY2VzIHNoYXJpbmcgbWVtb3J5IHNwYWNlcywgSVJRcywgb3IgZXZlbiB0cmFzaGluZworICogaGFyZHdhcmUuICBZT1UgSEFWRSBCRUVOIFdBUk5FRC4KKyAqCisgKiBZb3UgY2FuIG9ubHkgYWNjZXNzIHNsb3RzIHdpdGggdGhpcy4gIE1vdGhlcmJvYXJkIHJlZ2lzdGVycyBhcmUgb2ZmCisgKiBsaW1pdHMuCisgKi8KKworLyogcmVhZCBhIGJ5dGUgZnJvbSB0aGUgc3BlY2lmaWVkIFBPUyByZWdpc3Rlci4gKi8KK2V4dGVybiB1bnNpZ25lZCBjaGFyIG1jYV9yZWFkX3BvcyhpbnQgc2xvdCwgaW50IHJlZyk7CisKKy8qIHdyaXRlIGEgYnl0ZSB0byB0aGUgc3BlY2lmaWVkIFBPUyByZWdpc3Rlci4gKi8KK2V4dGVybiB2b2lkIG1jYV93cml0ZV9wb3MoaW50IHNsb3QsIGludCByZWcsIHVuc2lnbmVkIGNoYXIgYnl0ZSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tY2EuaCBiL2luY2x1ZGUvbGludXgvbWNhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNmZjI5MgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbWNhLmgKQEAgLTAsMCArMSwxNDYgQEAKKy8qCisgKiBIZWFkZXIgZm9yIE1pY3JvY2hhbm5lbCBBcmNoaXRlY3R1cmUgQnVzCisgKiBXcml0dGVuIGJ5IE1hcnRpbiBLb2xpbmVrLCBGZWJydWFyeSAxOTk2CisgKi8KKworI2lmbmRlZiBfTElOVVhfTUNBX0gKKyNkZWZpbmUgX0xJTlVYX01DQV9ICisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKworI2lmZGVmIENPTkZJR19NQ0EKKyNpbmNsdWRlIDxhc20vbWNhLmg+CisKK2V4dGVybiBpbnQgTUNBX2J1czsKKyNlbHNlCisjZGVmaW5lIE1DQV9idXMgMAorI2VuZGlmCisKKy8qIFRoaXMgc2V0cyB1cCBhbiBpbmZvcm1hdGlvbiBjYWxsYmFjayBmb3IgL3Byb2MvbWNhL3Nsb3Q/LiAgVGhlCisgKiBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCB0aGUgYnVmZmVyLCBzbG90LCBhbmQgZGV2aWNlIHBvaW50ZXIgKG9yCisgKiBzb21lIGVxdWFsbHkgaW5mb3JtYXRpdmUgY29udGV4dCBpbmZvcm1hdGlvbiwgb3Igbm90aGluZywgaWYgeW91CisgKiBwcmVmZXIpLCBhbmQgaXMgZXhwZWN0ZWQgdG8gcHV0IHVzZWZ1bCBpbmZvcm1hdGlvbiBpbnRvIHRoZQorICogYnVmZmVyLiAgVGhlIGFkYXB0ZXIgbmFtZSwgaWQsIGFuZCBQT1MgcmVnaXN0ZXJzIGdldCBwcmludGVkCisgKiBiZWZvcmUgdGhpcyBpcyBjYWxsZWQgdGhvdWdoLCBzbyBkb24ndCBkbyBpdCBhZ2Fpbi4KKyAqCisgKiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgd2l0aCBhIE5VTEwgcHJvY2ZuIHdoZW4gYSBtb2R1bGUKKyAqIHVucmVnaXN0ZXJzLCB0aHVzIHByZXZlbnRpbmcga2VybmVsIGNyYXNoZXMgYW5kIG90aGVyIHN1Y2gKKyAqIG5hc3RpbmVzcy4KKyAqLwordHlwZWRlZiBpbnQgKCpNQ0FfUHJvY0ZuKShjaGFyKiBidWYsIGludCBzbG90LCB2b2lkKiBkZXYpOworCisvKiBTaG91bGQgb25seSBiZSBjYWxsZWQgYnkgdGhlIE5NSSBpbnRlcnJ1cHQgaGFuZGxlciwgdGhpcyB3aWxsIGRvIHNvbWUKKyAqIGZhbmN5IHN0dWZmIHRvIGZpZ3VyZSBvdXQgd2hhdCBtaWdodCBoYXZlIGdlbmVyYXRlZCBhIE5NSS4KKyAqLworZXh0ZXJuIHZvaWQgbWNhX2hhbmRsZV9ubWkodm9pZCk7CisKK2VudW0gTUNBX0FkYXB0ZXJTdGF0dXMgeworCU1DQV9BREFQVEVSX05PUk1BTCA9IDAsCisJTUNBX0FEQVBURVJfTk9ORSA9IDEsCisJTUNBX0FEQVBURVJfRElTQUJMRUQgPSAyLAorCU1DQV9BREFQVEVSX0VSUk9SID0gMworfTsKKworc3RydWN0IG1jYV9kZXZpY2UgeworCXU2NAkJCWRtYV9tYXNrOworCWludAkJCXBvc19pZDsKKwlpbnQJCQlzbG90OworCisJLyogaW5kZXggaW50byBpZF90YWJsZSwgc2V0IGJ5IHRoZSBidXMgbWF0Y2ggcm91dGluZSAqLworCWludAkJCWluZGV4OworCisJLyogaXMgdGhlcmUgYSBkcml2ZXIgaW5zdGFsbGVkPyAwIC0gTm8sIDEgLSBZZXMgKi8KKwlpbnQJCQlkcml2ZXJfbG9hZGVkOworCS8qIFBPUyByZWdpc3RlcnMgKi8KKwl1bnNpZ25lZCBjaGFyCQlwb3NbOF07CisJLyogaWYgYSBwc2V1ZG8gYWRhcHRlciBvZiB0aGUgbW90aGVyYm9hcmQsIHRoaXMgaXMgdGhlIG1vdGhlcmJvYXJkCisJICogcmVnaXN0ZXIgdmFsdWUgdG8gdXNlIGZvciBzZXR1cCBjeWNsZXMgKi8KKwlzaG9ydAkJCXBvc19yZWdpc3RlcjsKKwkKKwllbnVtIE1DQV9BZGFwdGVyU3RhdHVzCXN0YXR1czsKKyNpZmRlZiBDT05GSUdfTUNBX1BST0NfRlMKKwkvKiBuYW1lIG9mIHRoZSBwcm9jL21jYSBmaWxlICovCisJY2hhcgkJCXByb2NuYW1lWzhdOworCS8qIC9wcm9jIGluZm8gY2FsbGJhY2sgKi8KKwlNQ0FfUHJvY0ZuCQlwcm9jZm47CisJLyogZGV2aWNlL2NvbnRleHQgaW5mbyBmb3IgcHJvYyBjYWxsYmFjayAqLworCXZvaWQJCQkqcHJvY19kZXY7CisjZW5kaWYKKwlzdHJ1Y3QgZGV2aWNlCQlkZXY7CisJY2hhcgkJCW5hbWVbMzJdOworfTsKKyNkZWZpbmUgdG9fbWNhX2RldmljZShtZGV2KSBjb250YWluZXJfb2YobWRldiwgc3RydWN0IG1jYV9kZXZpY2UsIGRldikKKworc3RydWN0IG1jYV9idXNfYWNjZXNzb3JfZnVuY3Rpb25zIHsKKwl1bnNpZ25lZCBjaGFyCSgqbWNhX3JlYWRfcG9zKShzdHJ1Y3QgbWNhX2RldmljZSAqLCBpbnQgcmVnKTsKKwl2b2lkCQkoKm1jYV93cml0ZV9wb3MpKHN0cnVjdCBtY2FfZGV2aWNlICosIGludCByZWcsCisJCQkJCSB1bnNpZ25lZCBjaGFyIGJ5dGUpOworCWludAkJKCptY2FfdHJhbnNmb3JtX2lycSkoc3RydWN0IG1jYV9kZXZpY2UgKiwgaW50IGlycSk7CisJaW50CQkoKm1jYV90cmFuc2Zvcm1faW9wb3J0KShzdHJ1Y3QgbWNhX2RldmljZSAqLAorCQkJCQkJICBpbnQgcmVnaW9uKTsKKwl2b2lkICoJCSgqbWNhX3RyYW5zZm9ybV9tZW1vcnkpKHN0cnVjdCBtY2FfZGV2aWNlICosCisJCQkJCQl2b2lkICptZW1vcnkpOworfTsKKworc3RydWN0IG1jYV9idXMgeworCXU2NAkJCWRlZmF1bHRfZG1hX21hc2s7CisJaW50CQkJbnVtYmVyOworCXN0cnVjdCBtY2FfYnVzX2FjY2Vzc29yX2Z1bmN0aW9ucyBmOworCXN0cnVjdCBkZXZpY2UJCWRldjsKKwljaGFyCQkJbmFtZVszMl07Cit9OworI2RlZmluZSB0b19tY2FfYnVzKG1kZXYpIGNvbnRhaW5lcl9vZihtZGV2LCBzdHJ1Y3QgbWNhX2J1cywgZGV2KQorCitzdHJ1Y3QgbWNhX2RyaXZlciB7CisJY29uc3Qgc2hvcnQJCSppZF90YWJsZTsKKwl2b2lkCQkJKmRyaXZlcl9kYXRhOworCXN0cnVjdCBkZXZpY2VfZHJpdmVyCWRyaXZlcjsKK307CisjZGVmaW5lIHRvX21jYV9kcml2ZXIobWRyaXZlcikgY29udGFpbmVyX29mKG1kcml2ZXIsIHN0cnVjdCBtY2FfZHJpdmVyLCBkcml2ZXIpCisKKy8qIE9uZ29pbmcgc3VwcG9ydGVkIEFQSSBmdW5jdGlvbnMgKi8KK2V4dGVybiBzdHJ1Y3QgbWNhX2RldmljZSAqbWNhX2ZpbmRfZGV2aWNlX2J5X3Nsb3QoaW50IHNsb3QpOworZXh0ZXJuIGludCBtY2Ffc3lzdGVtX2luaXQodm9pZCk7CitleHRlcm4gc3RydWN0IG1jYV9idXMgKm1jYV9hdHRhY2hfYnVzKGludCk7CisKK2V4dGVybiB1bnNpZ25lZCBjaGFyIG1jYV9kZXZpY2VfcmVhZF9zdG9yZWRfcG9zKHN0cnVjdCBtY2FfZGV2aWNlICptY2FfZGV2LAorCQkJCQkJaW50IHJlZyk7CitleHRlcm4gdW5zaWduZWQgY2hhciBtY2FfZGV2aWNlX3JlYWRfcG9zKHN0cnVjdCBtY2FfZGV2aWNlICptY2FfZGV2LCBpbnQgcmVnKTsKK2V4dGVybiB2b2lkIG1jYV9kZXZpY2Vfd3JpdGVfcG9zKHN0cnVjdCBtY2FfZGV2aWNlICptY2FfZGV2LCBpbnQgcmVnLAorCQkJCSB1bnNpZ25lZCBjaGFyIGJ5dGUpOworZXh0ZXJuIGludCBtY2FfZGV2aWNlX3RyYW5zZm9ybV9pcnEoc3RydWN0IG1jYV9kZXZpY2UgKm1jYV9kZXYsIGludCBpcnEpOworZXh0ZXJuIGludCBtY2FfZGV2aWNlX3RyYW5zZm9ybV9pb3BvcnQoc3RydWN0IG1jYV9kZXZpY2UgKm1jYV9kZXYsIGludCBwb3J0KTsKK2V4dGVybiB2b2lkICptY2FfZGV2aWNlX3RyYW5zZm9ybV9tZW1vcnkoc3RydWN0IG1jYV9kZXZpY2UgKm1jYV9kZXYsCisJCQkJCSB2b2lkICptZW0pOworZXh0ZXJuIGludCBtY2FfZGV2aWNlX2NsYWltZWQoc3RydWN0IG1jYV9kZXZpY2UgKm1jYV9kZXYpOworZXh0ZXJuIHZvaWQgbWNhX2RldmljZV9zZXRfY2xhaW0oc3RydWN0IG1jYV9kZXZpY2UgKm1jYV9kZXYsIGludCB2YWwpOworZXh0ZXJuIHZvaWQgbWNhX2RldmljZV9zZXRfbmFtZShzdHJ1Y3QgbWNhX2RldmljZSAqbWNhX2RldiwgY29uc3QgY2hhciAqbmFtZSk7CitzdGF0aWMgaW5saW5lIGNoYXIgKm1jYV9kZXZpY2VfZ2V0X25hbWUoc3RydWN0IG1jYV9kZXZpY2UgKm1jYV9kZXYpCit7CisJcmV0dXJuIG1jYV9kZXYgPyBtY2FfZGV2LT5uYW1lIDogTlVMTDsKK30KKworZXh0ZXJuIGVudW0gTUNBX0FkYXB0ZXJTdGF0dXMgbWNhX2RldmljZV9zdGF0dXMoc3RydWN0IG1jYV9kZXZpY2UgKm1jYV9kZXYpOworCitleHRlcm4gc3RydWN0IGJ1c190eXBlIG1jYV9idXNfdHlwZTsKKworZXh0ZXJuIGludCBtY2FfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBtY2FfZHJpdmVyICpkcnYpOworZXh0ZXJuIHZvaWQgbWNhX3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBtY2FfZHJpdmVyICpkcnYpOworCisvKiBXQVJOSU5HOiBvbmx5IGNhbGxlZCBieSB0aGUgYm9vdCB0aW1lIGRldmljZSBzZXR1cCAqLworZXh0ZXJuIGludCBtY2FfcmVnaXN0ZXJfZGV2aWNlKGludCBidXMsIHN0cnVjdCBtY2FfZGV2aWNlICptY2FfZGV2KTsKKworI2lmZGVmIENPTkZJR19NQ0FfUFJPQ19GUworZXh0ZXJuIHZvaWQgbWNhX2RvX3Byb2NfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIG1jYV9zZXRfYWRhcHRlcl9wcm9jZm4oaW50IHNsb3QsIE1DQV9Qcm9jRm4sIHZvaWQqIGRldik7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIG1jYV9kb19wcm9jX2luaXQodm9pZCkKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIG1jYV9zZXRfYWRhcHRlcl9wcm9jZm4oaW50IHNsb3QsIE1DQV9Qcm9jRm4gZm4sIHZvaWQqIGRldikKK3sKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX0xJTlVYX01DQV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbXBvbGljeS5oIGIvaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDgwYWVmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaApAQCAtMCwwICsxLDIyOSBAQAorI2lmbmRlZiBfTElOVVhfTUVNUE9MSUNZX0gKKyNkZWZpbmUgX0xJTlVYX01FTVBPTElDWV9IIDEKKworI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisKKy8qCisgKiBOVU1BIG1lbW9yeSBwb2xpY2llcyBmb3IgTGludXguCisgKiBDb3B5cmlnaHQgMjAwMywyMDA0IEFuZGkgS2xlZW4gU3VTRSBMYWJzCisgKi8KKworLyogUG9saWNpZXMgKi8KKyNkZWZpbmUgTVBPTF9ERUZBVUxUCTAKKyNkZWZpbmUgTVBPTF9QUkVGRVJSRUQJMQorI2RlZmluZSBNUE9MX0JJTkQJMgorI2RlZmluZSBNUE9MX0lOVEVSTEVBVkUJMworCisjZGVmaW5lIE1QT0xfTUFYIE1QT0xfSU5URVJMRUFWRQorCisvKiBGbGFncyBmb3IgZ2V0X21lbV9wb2xpY3kgKi8KKyNkZWZpbmUgTVBPTF9GX05PREUJKDE8PDApCS8qIHJldHVybiBuZXh0IElMIG1vZGUgaW5zdGVhZCBvZiBub2RlIG1hc2sgKi8KKyNkZWZpbmUgTVBPTF9GX0FERFIJKDE8PDEpCS8qIGxvb2sgdXAgdm1hIHVzaW5nIGFkZHJlc3MgKi8KKworLyogRmxhZ3MgZm9yIG1iaW5kICovCisjZGVmaW5lIE1QT0xfTUZfU1RSSUNUCSgxPDwwKQkvKiBWZXJpZnkgZXhpc3RpbmcgcGFnZXMgaW4gdGhlIG1hcHBpbmcgKi8KKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21tem9uZS5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorCitzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Q7CisKKyNpZmRlZiBDT05GSUdfTlVNQQorCisvKgorICogRGVzY3JpYmUgYSBtZW1vcnkgcG9saWN5LgorICoKKyAqIEEgbWVtcG9saWN5IGNhbiBiZSBlaXRoZXIgYXNzb2NpYXRlZCB3aXRoIGEgcHJvY2VzcyBvciB3aXRoIGEgVk1BLgorICogRm9yIFZNQSByZWxhdGVkIGFsbG9jYXRpb25zIHRoZSBWTUEgcG9saWN5IGlzIHByZWZlcnJlZCwgb3RoZXJ3aXNlCisgKiB0aGUgcHJvY2VzcyBwb2xpY3kgaXMgdXNlZC4gSW50ZXJydXB0cyBpZ25vcmUgdGhlIG1lbW9yeSBwb2xpY3kKKyAqIG9mIHRoZSBjdXJyZW50IHByb2Nlc3MuCisgKgorICogTG9ja2luZyBwb2xpY3kgZm9yIGludGVybGF2ZToKKyAqIEluIHByb2Nlc3MgY29udGV4dCB0aGVyZSBpcyBubyBsb2NraW5nIGJlY2F1c2Ugb25seSB0aGUgcHJvY2VzcyBhY2Nlc3NlcworICogaXRzIG93biBzdGF0ZS4gQWxsIHZtYSBtYW5pcHVsYXRpb24gaXMgc29tZXdoYXQgcHJvdGVjdGVkIGJ5IGEgZG93bl9yZWFkIG9uCisgKiBtbWFwX3NlbS4gRm9yIGFsbG9jYXRpbmcgaW4gdGhlIGludGVybGVhdmUgcG9saWN5IHRoZSBwYWdlX3RhYmxlX2xvY2sKKyAqIG11c3QgYmUgYWxzbyBhcXVpcmVkIHRvIHByb3RlY3QgaWxfbmV4dC4KKyAqCisgKiBGcmVlaW5nIHBvbGljeToKKyAqIFdoZW4gcG9saWN5IGlzIE1QT0xfQklORCB2LnpvbmVsaXN0IGlzIGttYWxsb2MnZWQgYW5kIG11c3QgYmUga2ZyZWUnZC4KKyAqIEFsbCBvdGhlciBwb2xpY2llcyBkb24ndCBoYXZlIGFueSBleHRlcm5hbCBzdGF0ZS4gbXBvbF9mcmVlKCkgaGFuZGxlcyB0aGlzLgorICoKKyAqIENvcHlpbmcgcG9saWN5IG9iamVjdHM6CisgKiBGb3IgTVBPTF9CSU5EIHRoZSB6b25lbGlzdCBtdXN0IGJlIGFsd2F5cyBkdXBsaWNhdGVkLiBtcG9sX2Nsb25lKCkgZG9lcyB0aGlzLgorICovCitzdHJ1Y3QgbWVtcG9saWN5IHsKKwlhdG9taWNfdCByZWZjbnQ7CisJc2hvcnQgcG9saWN5OyAJLyogU2VlIE1QT0xfKiBhYm92ZSAqLworCXVuaW9uIHsKKwkJc3RydWN0IHpvbmVsaXN0ICAqem9uZWxpc3Q7CS8qIGJpbmQgKi8KKwkJc2hvcnQgCQkgcHJlZmVycmVkX25vZGU7IC8qIHByZWZlcnJlZCAqLworCQlERUNMQVJFX0JJVE1BUChub2RlcywgTUFYX05VTU5PREVTKTsgLyogaW50ZXJsZWF2ZSAqLworCQkvKiB1bmRlZmluZWQgZm9yIGRlZmF1bHQgKi8KKwl9IHY7Cit9OworCisvKgorICogU3VwcG9ydCBmb3IgbWFuYWdpbmcgbWVtcG9saWN5IGRhdGEgb2JqZWN0cyAoY2xvbmUsIGNvcHksIGRlc3Ryb3kpCisgKiBUaGUgZGVmYXVsdCBmYXN0IHBhdGggb2YgYSBOVUxMIE1QT0xfREVGQVVMVCBwb2xpY3kgaXMgYWx3YXlzIGlubGluZWQuCisgKi8KKworZXh0ZXJuIHZvaWQgX19tcG9sX2ZyZWUoc3RydWN0IG1lbXBvbGljeSAqcG9sKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBtcG9sX2ZyZWUoc3RydWN0IG1lbXBvbGljeSAqcG9sKQoreworCWlmIChwb2wpCisJCV9fbXBvbF9mcmVlKHBvbCk7Cit9CisKK2V4dGVybiBzdHJ1Y3QgbWVtcG9saWN5ICpfX21wb2xfY29weShzdHJ1Y3QgbWVtcG9saWN5ICpwb2wpOworc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sX2NvcHkoc3RydWN0IG1lbXBvbGljeSAqcG9sKQoreworCWlmIChwb2wpCisJCXBvbCA9IF9fbXBvbF9jb3B5KHBvbCk7CisJcmV0dXJuIHBvbDsKK30KKworI2RlZmluZSB2bWFfcG9saWN5KHZtYSkgKCh2bWEpLT52bV9wb2xpY3kpCisjZGVmaW5lIHZtYV9zZXRfcG9saWN5KHZtYSwgcG9sKSAoKHZtYSktPnZtX3BvbGljeSA9IChwb2wpKQorCitzdGF0aWMgaW5saW5lIHZvaWQgbXBvbF9nZXQoc3RydWN0IG1lbXBvbGljeSAqcG9sKQoreworCWlmIChwb2wpCisJCWF0b21pY19pbmMoJnBvbC0+cmVmY250KTsKK30KKworZXh0ZXJuIGludCBfX21wb2xfZXF1YWwoc3RydWN0IG1lbXBvbGljeSAqYSwgc3RydWN0IG1lbXBvbGljeSAqYik7CitzdGF0aWMgaW5saW5lIGludCBtcG9sX2VxdWFsKHN0cnVjdCBtZW1wb2xpY3kgKmEsIHN0cnVjdCBtZW1wb2xpY3kgKmIpCit7CisJaWYgKGEgPT0gYikKKwkJcmV0dXJuIDE7CisJcmV0dXJuIF9fbXBvbF9lcXVhbChhLCBiKTsKK30KKyNkZWZpbmUgdm1hX21wb2xfZXF1YWwoYSxiKSBtcG9sX2VxdWFsKHZtYV9wb2xpY3koYSksIHZtYV9wb2xpY3koYikpCisKKy8qIENvdWxkIGxhdGVyIGFkZCBpbmhlcml0YW5jZSBvZiB0aGUgcHJvY2VzcyBwb2xpY3kgaGVyZS4gKi8KKworI2RlZmluZSBtcG9sX3NldF92bWFfZGVmYXVsdCh2bWEpICgodm1hKS0+dm1fcG9saWN5ID0gTlVMTCkKKworLyoKKyAqIEh1Z2V0bGIgcG9saWN5LiBpMzg2IGh1Z2V0bGIgc28gZmFyIHdvcmtzIHdpdGggbm9kZSBudW1iZXJzCisgKiBpbnN0ZWFkIG9mIHpvbmUgbGlzdHMsIHNvIGdpdmUgaXQgc3BlY2lhbCBpbnRlcmZhY2VzIGZvciBub3cuCisgKi8KK2V4dGVybiBpbnQgbXBvbF9maXJzdF9ub2RlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpOworZXh0ZXJuIGludCBtcG9sX25vZGVfdmFsaWQoaW50IG5pZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQl1bnNpZ25lZCBsb25nIGFkZHIpOworCisvKgorICogVHJlZSBvZiBzaGFyZWQgcG9saWNpZXMgZm9yIGEgc2hhcmVkIG1lbW9yeSByZWdpb24uCisgKiBNYWludGFpbiB0aGUgcG9saWNpZXMgaW4gYSBwc2V1ZG8gbW0gdGhhdCBjb250YWlucyB2bWFzLiBUaGUgdm1hcworICogY2FycnkgdGhlIHBvbGljeS4gQXMgYSBzcGVjaWFsIHR3aXN0IHRoZSBwc2V1ZG8gbW0gaXMgaW5kZXhlZCBpbiBwYWdlcywgbm90CisgKiBieXRlcywgc28gdGhhdCB3ZSBjYW4gd29yayB3aXRoIHNoYXJlZCBtZW1vcnkgc2VnbWVudHMgYmlnZ2VyIHRoYW4KKyAqIHVuc2lnbmVkIGxvbmcuCisgKi8KKworc3RydWN0IHNwX25vZGUgeworCXN0cnVjdCByYl9ub2RlIG5kOworCXVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZDsKKwlzdHJ1Y3QgbWVtcG9saWN5ICpwb2xpY3k7Cit9OworCitzdHJ1Y3Qgc2hhcmVkX3BvbGljeSB7CisJc3RydWN0IHJiX3Jvb3Qgcm9vdDsKKwlzcGlubG9ja190IGxvY2s7Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgbXBvbF9zaGFyZWRfcG9saWN5X2luaXQoc3RydWN0IHNoYXJlZF9wb2xpY3kgKmluZm8pCit7CisJaW5mby0+cm9vdCA9IFJCX1JPT1Q7CisJc3Bpbl9sb2NrX2luaXQoJmluZm8tPmxvY2spOworfQorCitpbnQgbXBvbF9zZXRfc2hhcmVkX3BvbGljeShzdHJ1Y3Qgc2hhcmVkX3BvbGljeSAqaW5mbywKKwkJCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCQlzdHJ1Y3QgbWVtcG9saWN5ICpuZXcpOwordm9pZCBtcG9sX2ZyZWVfc2hhcmVkX3BvbGljeShzdHJ1Y3Qgc2hhcmVkX3BvbGljeSAqcCk7CitzdHJ1Y3QgbWVtcG9saWN5ICptcG9sX3NoYXJlZF9wb2xpY3lfbG9va3VwKHN0cnVjdCBzaGFyZWRfcG9saWN5ICpzcCwKKwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgaWR4KTsKKworZXh0ZXJuIHZvaWQgbnVtYV9kZWZhdWx0X3BvbGljeSh2b2lkKTsKK2V4dGVybiB2b2lkIG51bWFfcG9saWN5X2luaXQodm9pZCk7CisKKyNlbHNlCisKK3N0cnVjdCBtZW1wb2xpY3kge307CisKK3N0YXRpYyBpbmxpbmUgaW50IG1wb2xfZXF1YWwoc3RydWN0IG1lbXBvbGljeSAqYSwgc3RydWN0IG1lbXBvbGljeSAqYikKK3sKKwlyZXR1cm4gMTsKK30KKyNkZWZpbmUgdm1hX21wb2xfZXF1YWwoYSxiKSAxCisKKyNkZWZpbmUgbXBvbF9zZXRfdm1hX2RlZmF1bHQodm1hKSBkbyB7fSB3aGlsZSgwKQorCitzdGF0aWMgaW5saW5lIHZvaWQgbXBvbF9mcmVlKHN0cnVjdCBtZW1wb2xpY3kgKnApCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtcG9sX2dldChzdHJ1Y3QgbWVtcG9saWN5ICpwb2wpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1lbXBvbGljeSAqbXBvbF9jb3B5KHN0cnVjdCBtZW1wb2xpY3kgKm9sZCkKK3sKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGlubGluZSBpbnQgbXBvbF9maXJzdF9ub2RlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGEpCit7CisJcmV0dXJuIG51bWFfbm9kZV9pZCgpOworfQorCitzdGF0aWMgaW5saW5lIGludAorbXBvbF9ub2RlX3ZhbGlkKGludCBuaWQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGEpCit7CisJcmV0dXJuIDE7Cit9CisKK3N0cnVjdCBzaGFyZWRfcG9saWN5IHt9OworCitzdGF0aWMgaW5saW5lIGludCBtcG9sX3NldF9zaGFyZWRfcG9saWN5KHN0cnVjdCBzaGFyZWRfcG9saWN5ICppbmZvLAorCQkJCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCQkJc3RydWN0IG1lbXBvbGljeSAqbmV3KQoreworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbXBvbF9zaGFyZWRfcG9saWN5X2luaXQoc3RydWN0IHNoYXJlZF9wb2xpY3kgKmluZm8pCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtcG9sX2ZyZWVfc2hhcmVkX3BvbGljeShzdHJ1Y3Qgc2hhcmVkX3BvbGljeSAqcCkKK3sKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtcG9saWN5ICoKK21wb2xfc2hhcmVkX3BvbGljeV9sb29rdXAoc3RydWN0IHNoYXJlZF9wb2xpY3kgKnNwLCB1bnNpZ25lZCBsb25nIGlkeCkKK3sKKwlyZXR1cm4gTlVMTDsKK30KKworI2RlZmluZSB2bWFfcG9saWN5KHZtYSkgTlVMTAorI2RlZmluZSB2bWFfc2V0X3BvbGljeSh2bWEsIHBvbCkgZG8ge30gd2hpbGUoMCkKKworc3RhdGljIGlubGluZSB2b2lkIG51bWFfcG9saWN5X2luaXQodm9pZCkKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIG51bWFfZGVmYXVsdF9wb2xpY3kodm9pZCkKK3sKK30KKworI2VuZGlmIC8qIENPTkZJR19OVU1BICovCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtcG9vbC5oIGIvaW5jbHVkZS9saW51eC9tZW1wb29sLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGEzNmVkZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbWVtcG9vbC5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBtZW1vcnkgYnVmZmVyIHBvb2wgc3VwcG9ydAorICovCisjaWZuZGVmIF9MSU5VWF9NRU1QT09MX0gKKyNkZWZpbmUgX0xJTlVYX01FTVBPT0xfSAorCisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorCit0eXBlZGVmIHZvaWQgKiAobWVtcG9vbF9hbGxvY190KSh1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZ2ZwX21hc2ssIHZvaWQgKnBvb2xfZGF0YSk7Cit0eXBlZGVmIHZvaWQgKG1lbXBvb2xfZnJlZV90KSh2b2lkICplbGVtZW50LCB2b2lkICpwb29sX2RhdGEpOworCit0eXBlZGVmIHN0cnVjdCBtZW1wb29sX3MgeworCXNwaW5sb2NrX3QgbG9jazsKKwlpbnQgbWluX25yOwkJLyogbnIgb2YgZWxlbWVudHMgYXQgKmVsZW1lbnRzICovCisJaW50IGN1cnJfbnI7CQkvKiBDdXJyZW50IG5yIG9mIGVsZW1lbnRzIGF0ICplbGVtZW50cyAqLworCXZvaWQgKiplbGVtZW50czsKKworCXZvaWQgKnBvb2xfZGF0YTsKKwltZW1wb29sX2FsbG9jX3QgKmFsbG9jOworCW1lbXBvb2xfZnJlZV90ICpmcmVlOworCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7Cit9IG1lbXBvb2xfdDsKK2V4dGVybiBtZW1wb29sX3QgKiBtZW1wb29sX2NyZWF0ZShpbnQgbWluX25yLCBtZW1wb29sX2FsbG9jX3QgKmFsbG9jX2ZuLAorCQkJCSBtZW1wb29sX2ZyZWVfdCAqZnJlZV9mbiwgdm9pZCAqcG9vbF9kYXRhKTsKK2V4dGVybiBpbnQgbWVtcG9vbF9yZXNpemUobWVtcG9vbF90ICpwb29sLCBpbnQgbmV3X21pbl9uciwgdW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcF9tYXNrKTsKK2V4dGVybiB2b2lkIG1lbXBvb2xfZGVzdHJveShtZW1wb29sX3QgKnBvb2wpOworZXh0ZXJuIHZvaWQgKiBtZW1wb29sX2FsbG9jKG1lbXBvb2xfdCAqcG9vbCwgdW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcF9tYXNrKTsKK2V4dGVybiB2b2lkIG1lbXBvb2xfZnJlZSh2b2lkICplbGVtZW50LCBtZW1wb29sX3QgKnBvb2wpOworCisvKgorICogQSBtZW1wb29sX2FsbG9jX3QgYW5kIG1lbXBvb2xfZnJlZV90IHRoYXQgZ2V0IHRoZSBtZW1vcnkgZnJvbQorICogYSBzbGFiIHRoYXQgaXMgcGFzc2VkIGluIHRocm91Z2ggcG9vbF9kYXRhLgorICovCit2b2lkICptZW1wb29sX2FsbG9jX3NsYWIodW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcF9tYXNrLCB2b2lkICpwb29sX2RhdGEpOwordm9pZCBtZW1wb29sX2ZyZWVfc2xhYih2b2lkICplbGVtZW50LCB2b2lkICpwb29sX2RhdGEpOworCisjZW5kaWYgLyogX0xJTlVYX01FTVBPT0xfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZXllLmggYi9pbmNsdWRlL2xpbnV4L21leWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWVjNDVlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9tZXllLmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIE1vdGlvbiBFeWUgdmlkZW80bGludXggZHJpdmVyIGZvciBTb255IFZhaW8gUGljdHVyZUJvb2sKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMyBTdGVsaWFuIFBvcCA8c3RlbGlhbkBwb3BpZXMubmV0PgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMS0yMDAyIEFsY/R2ZSA8d3d3LmFsY292ZS5jb20+CisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwIEFuZHJldyBUcmlkZ2VsbCA8dHJpZGdlQHZhbGludXguY29tPgorICoKKyAqIEVhcmxpZXIgd29yayBieSBXZXJuZXIgQWxtZXNiZXJnZXIsIFBhdWwgYFJ1c3R5JyBSdXNzZWxsIGFuZCBQYXVsIE1hY2tlcnJhcy4KKyAqCisgKiBTb21lIHBhcnRzIGJvcnJvd2VkIGZyb20gdmFyaW91cyB2aWRlbzRsaW51eCBkcml2ZXJzLCBlc3BlY2lhbGx5CisgKiBidHR2LWRyaXZlci5jIGFuZCB6b3Jhbi5jLCBzZWUgb3JpZ2luYWwgZmlsZXMgZm9yIGNyZWRpdHMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBfTUVZRV9IXworI2RlZmluZSBfTUVZRV9IXworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFByaXZhdGUgQVBJIGZvciBoYW5kbGluZyBtanBlZyBjYXB0dXJlIC8gcGxheWJhY2suICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0cnVjdCBtZXllX3BhcmFtcyB7CisJdW5zaWduZWQgY2hhciBzdWJzYW1wbGU7CisJdW5zaWduZWQgY2hhciBxdWFsaXR5OworCXVuc2lnbmVkIGNoYXIgc2hhcnBuZXNzOworCXVuc2lnbmVkIGNoYXIgYWdjOworCXVuc2lnbmVkIGNoYXIgcGljdHVyZTsKKwl1bnNpZ25lZCBjaGFyIGZyYW1lcmF0ZTsKK307CisKKy8qIHF1ZXJ5IHRoZSBleHRlbmRlZCBwYXJhbWV0ZXJzICovCisjZGVmaW5lIE1FWUVJT0NfR19QQVJBTVMJX0lPUiAoJ3YnLCBCQVNFX1ZJRElPQ1BSSVZBVEUrMCwgc3RydWN0IG1leWVfcGFyYW1zKQorLyogc2V0IHRoZSBleHRlbmRlZCBwYXJhbWV0ZXJzICovCisjZGVmaW5lIE1FWUVJT0NfU19QQVJBTVMJX0lPVyAoJ3YnLCBCQVNFX1ZJRElPQ1BSSVZBVEUrMSwgc3RydWN0IG1leWVfcGFyYW1zKQorLyogcXVldWUgYSBidWZmZXIgZm9yIG1qcGVnIGNhcHR1cmUgKi8KKyNkZWZpbmUgTUVZRUlPQ19RQlVGX0NBUFQJX0lPVyAoJ3YnLCBCQVNFX1ZJRElPQ1BSSVZBVEUrMiwgaW50KQorLyogc3luYyBhIHByZXZpb3VzbHkgcXVldWVkIG1qcGVnIGJ1ZmZlciAqLworI2RlZmluZSBNRVlFSU9DX1NZTkMJCV9JT1dSKCd2JywgQkFTRV9WSURJT0NQUklWQVRFKzMsIGludCkKKy8qIGdldCBhIHN0aWxsIHVuY29tcHJlc3NlZCBzbmFwc2hvdCAqLworI2RlZmluZSBNRVlFSU9DX1NUSUxMQ0FQVAlfSU8gICgndicsIEJBU0VfVklESU9DUFJJVkFURSs0KQorLyogZ2V0IGEganBlZyBjb21wcmVzc2VkIHNuYXBzaG90ICovCisjZGVmaW5lIE1FWUVJT0NfU1RJTExKQ0FQVAlfSU9SICgndicsIEJBU0VfVklESU9DUFJJVkFURSs1LCBpbnQpCisKKy8qIFY0TDIgcHJpdmF0ZSBjb250cm9scyAqLworI2RlZmluZSBWNEwyX0NJRF9BR0MJCVY0TDJfQ0lEX1BSSVZBVEVfQkFTRQorI2RlZmluZSBWNEwyX0NJRF9TSEFSUE5FU1MJKFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSArIDEpCisjZGVmaW5lIFY0TDJfQ0lEX1BJQ1RVUkUJKFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSArIDIpCisjZGVmaW5lIFY0TDJfQ0lEX0pQRUdRVUFMCShWNEwyX0NJRF9QUklWQVRFX0JBU0UgKyAzKQorI2RlZmluZSBWNEwyX0NJRF9GUkFNRVJBVEUJKFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSArIDQpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9taWkuaCBiL2luY2x1ZGUvbGludXgvbWlpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA5NzFmZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbWlpLmgKQEAgLTAsMCArMSwyMjMgQEAKKy8qCisgKiBsaW51eC9taWkuaDogZGVmaW5pdGlvbnMgZm9yIE1JSS1jb21wYXRpYmxlIHRyYW5zY2VpdmVycworICogT3JpZ2luYWxseSBkcml2ZXJzL25ldC9zdW5obWUuaC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTksIDIwMDEgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUByZWRoYXQuY29tKQorICovCisKKyNpZm5kZWYgX19MSU5VWF9NSUlfSF9fCisjZGVmaW5lIF9fTElOVVhfTUlJX0hfXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pZi5oPgorCisvKiBHZW5lcmljIE1JSSByZWdpc3RlcnMuICovCisKKyNkZWZpbmUgTUlJX0JNQ1IgICAgICAgICAgICAweDAwICAgICAgICAvKiBCYXNpYyBtb2RlIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTUlJX0JNU1IgICAgICAgICAgICAweDAxICAgICAgICAvKiBCYXNpYyBtb2RlIHN0YXR1cyByZWdpc3RlciAgKi8KKyNkZWZpbmUgTUlJX1BIWVNJRDEgICAgICAgICAweDAyICAgICAgICAvKiBQSFlTIElEIDEgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTUlJX1BIWVNJRDIgICAgICAgICAweDAzICAgICAgICAvKiBQSFlTIElEIDIgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTUlJX0FEVkVSVElTRSAgICAgICAweDA0ICAgICAgICAvKiBBZHZlcnRpc2VtZW50IGNvbnRyb2wgcmVnICAgKi8KKyNkZWZpbmUgTUlJX0xQQSAgICAgICAgICAgICAweDA1ICAgICAgICAvKiBMaW5rIHBhcnRuZXIgYWJpbGl0eSByZWcgICAgKi8KKyNkZWZpbmUgTUlJX0VYUEFOU0lPTiAgICAgICAweDA2ICAgICAgICAvKiBFeHBhbnNpb24gcmVnaXN0ZXIgICAgICAgICAgKi8KKyNkZWZpbmUgTUlJX0NUUkwxMDAwICAgICAgICAweDA5ICAgICAgICAvKiAxMDAwQkFTRS1UIGNvbnRyb2wgICAgICAgICAgKi8KKyNkZWZpbmUgTUlJX1NUQVQxMDAwICAgICAgICAweDBhICAgICAgICAvKiAxMDAwQkFTRS1UIHN0YXR1cyAgICAgICAgICAgKi8KKyNkZWZpbmUgTUlJX0RDT1VOVEVSICAgICAgICAweDEyICAgICAgICAvKiBEaXNjb25uZWN0IGNvdW50ZXIgICAgICAgICAgKi8KKyNkZWZpbmUgTUlJX0ZDU0NPVU5URVIgICAgICAweDEzICAgICAgICAvKiBGYWxzZSBjYXJyaWVyIGNvdW50ZXIgICAgICAgKi8KKyNkZWZpbmUgTUlJX05XQVlURVNUICAgICAgICAweDE0ICAgICAgICAvKiBOLXdheSBhdXRvLW5lZyB0ZXN0IHJlZyAgICAgKi8KKyNkZWZpbmUgTUlJX1JFUlJDT1VOVEVSICAgICAweDE1ICAgICAgICAvKiBSZWNlaXZlIGVycm9yIGNvdW50ZXIgICAgICAgKi8KKyNkZWZpbmUgTUlJX1NSRVZJU0lPTiAgICAgICAweDE2ICAgICAgICAvKiBTaWxpY29uIHJldmlzaW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgTUlJX1JFU1YxICAgICAgICAgICAweDE3ICAgICAgICAvKiBSZXNlcnZlZC4uLiAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTUlJX0xCUkVSUk9SICAgICAgICAweDE4ICAgICAgICAvKiBMcGJhY2ssIHJ4LCBieXBhc3MgZXJyb3IgICAgKi8KKyNkZWZpbmUgTUlJX1BIWUFERFIgICAgICAgICAweDE5ICAgICAgICAvKiBQSFkgYWRkcmVzcyAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTUlJX1JFU1YyICAgICAgICAgICAweDFhICAgICAgICAvKiBSZXNlcnZlZC4uLiAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTUlJX1RQSVNUQVRVUyAgICAgICAweDFiICAgICAgICAvKiBUUEkgc3RhdHVzIGZvciAxMG1icHMgICAgICAgKi8KKyNkZWZpbmUgTUlJX05DT05GSUcgICAgICAgICAweDFjICAgICAgICAvKiBOZXR3b3JrIGludGVyZmFjZSBjb25maWcgICAgKi8KKworLyogQmFzaWMgbW9kZSBjb250cm9sIHJlZ2lzdGVyLiAqLworI2RlZmluZSBCTUNSX1JFU1YgICAgICAgICAgICAgICAweDAwM2YgIC8qIFVudXNlZC4uLiAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTUNSX1NQRUVEMTAwMAkJMHgwMDQwICAvKiBNU0Igb2YgU3BlZWQgKDEwMDApICAgICAgICAgKi8KKyNkZWZpbmUgQk1DUl9DVFNUICAgICAgICAgICAgICAgMHgwMDgwICAvKiBDb2xsaXNpb24gdGVzdCAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQk1DUl9GVUxMRFBMWCAgICAgICAgICAgMHgwMTAwICAvKiBGdWxsIGR1cGxleCAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQk1DUl9BTlJFU1RBUlQgICAgICAgICAgMHgwMjAwICAvKiBBdXRvIG5lZ290aWF0aW9uIHJlc3RhcnQgICAgKi8KKyNkZWZpbmUgQk1DUl9JU09MQVRFICAgICAgICAgICAgMHgwNDAwICAvKiBEaXNjb25uZWN0IERQODM4NDAgZnJvbSBNSUkgKi8KKyNkZWZpbmUgQk1DUl9QRE9XTiAgICAgICAgICAgICAgMHgwODAwICAvKiBQb3dlcmRvd24gdGhlIERQODM4NDAgICAgICAgKi8KKyNkZWZpbmUgQk1DUl9BTkVOQUJMRSAgICAgICAgICAgMHgxMDAwICAvKiBFbmFibGUgYXV0byBuZWdvdGlhdGlvbiAgICAgKi8KKyNkZWZpbmUgQk1DUl9TUEVFRDEwMCAgICAgICAgICAgMHgyMDAwICAvKiBTZWxlY3QgMTAwTWJwcyAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQk1DUl9MT09QQkFDSyAgICAgICAgICAgMHg0MDAwICAvKiBUWEQgbG9vcGJhY2sgYml0cyAgICAgICAgICAgKi8KKyNkZWZpbmUgQk1DUl9SRVNFVCAgICAgICAgICAgICAgMHg4MDAwICAvKiBSZXNldCB0aGUgRFA4Mzg0MCAgICAgICAgICAgKi8KKworLyogQmFzaWMgbW9kZSBzdGF0dXMgcmVnaXN0ZXIuICovCisjZGVmaW5lIEJNU1JfRVJDQVAgICAgICAgICAgICAgIDB4MDAwMSAgLyogRXh0LXJlZyBjYXBhYmlsaXR5ICAgICAgICAgICovCisjZGVmaW5lIEJNU1JfSkNEICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogSmFiYmVyIGRldGVjdGVkICAgICAgICAgICAgICovCisjZGVmaW5lIEJNU1JfTFNUQVRVUyAgICAgICAgICAgIDB4MDAwNCAgLyogTGluayBzdGF0dXMgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJNU1JfQU5FR0NBUEFCTEUgICAgICAgIDB4MDAwOCAgLyogQWJsZSB0byBkbyBhdXRvLW5lZ290aWF0aW9uICovCisjZGVmaW5lIEJNU1JfUkZBVUxUICAgICAgICAgICAgIDB4MDAxMCAgLyogUmVtb3RlIGZhdWx0IGRldGVjdGVkICAgICAgICovCisjZGVmaW5lIEJNU1JfQU5FR0NPTVBMRVRFICAgICAgIDB4MDAyMCAgLyogQXV0by1uZWdvdGlhdGlvbiBjb21wbGV0ZSAgICovCisjZGVmaW5lIEJNU1JfUkVTViAgICAgICAgICAgICAgIDB4MDdjMCAgLyogVW51c2VkLi4uICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJNU1JfMTBIQUxGICAgICAgICAgICAgIDB4MDgwMCAgLyogQ2FuIGRvIDEwbWJwcywgaGFsZi1kdXBsZXggICovCisjZGVmaW5lIEJNU1JfMTBGVUxMICAgICAgICAgICAgIDB4MTAwMCAgLyogQ2FuIGRvIDEwbWJwcywgZnVsbC1kdXBsZXggICovCisjZGVmaW5lIEJNU1JfMTAwSEFMRiAgICAgICAgICAgIDB4MjAwMCAgLyogQ2FuIGRvIDEwMG1icHMsIGhhbGYtZHVwbGV4ICovCisjZGVmaW5lIEJNU1JfMTAwRlVMTCAgICAgICAgICAgIDB4NDAwMCAgLyogQ2FuIGRvIDEwMG1icHMsIGZ1bGwtZHVwbGV4ICovCisjZGVmaW5lIEJNU1JfMTAwQkFTRTQgICAgICAgICAgIDB4ODAwMCAgLyogQ2FuIGRvIDEwMG1icHMsIDRrIHBhY2tldHMgICovCisKKy8qIEFkdmVydGlzZW1lbnQgY29udHJvbCByZWdpc3Rlci4gKi8KKyNkZWZpbmUgQURWRVJUSVNFX1NMQ1QgICAgICAgICAgMHgwMDFmICAvKiBTZWxlY3RvciBiaXRzICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQURWRVJUSVNFX0NTTUEgICAgICAgICAgMHgwMDAxICAvKiBPbmx5IHNlbGVjdG9yIHN1cHBvcnRlZCAgICAgKi8KKyNkZWZpbmUgQURWRVJUSVNFXzEwSEFMRiAgICAgICAgMHgwMDIwICAvKiBUcnkgZm9yIDEwbWJwcyBoYWxmLWR1cGxleCAgKi8KKyNkZWZpbmUgQURWRVJUSVNFXzEwRlVMTCAgICAgICAgMHgwMDQwICAvKiBUcnkgZm9yIDEwbWJwcyBmdWxsLWR1cGxleCAgKi8KKyNkZWZpbmUgQURWRVJUSVNFXzEwMEhBTEYgICAgICAgMHgwMDgwICAvKiBUcnkgZm9yIDEwMG1icHMgaGFsZi1kdXBsZXggKi8KKyNkZWZpbmUgQURWRVJUSVNFXzEwMEZVTEwgICAgICAgMHgwMTAwICAvKiBUcnkgZm9yIDEwMG1icHMgZnVsbC1kdXBsZXggKi8KKyNkZWZpbmUgQURWRVJUSVNFXzEwMEJBU0U0ICAgICAgMHgwMjAwICAvKiBUcnkgZm9yIDEwMG1icHMgNGsgcGFja2V0cyAgKi8KKyNkZWZpbmUgQURWRVJUSVNFX1BBVVNFX0NBUCAgICAgMHgwNDAwICAvKiBUcnkgZm9yIHBhdXNlICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQURWRVJUSVNFX1BBVVNFX0FTWU0gICAgMHgwODAwICAvKiBUcnkgZm9yIGFzeW1ldHJpYyBwYXVzZSAgICAgKi8KKyNkZWZpbmUgQURWRVJUSVNFX1JFU1YgICAgICAgICAgMHgxMDAwICAvKiBVbnVzZWQuLi4gICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQURWRVJUSVNFX1JGQVVMVCAgICAgICAgMHgyMDAwICAvKiBTYXkgd2UgY2FuIGRldGVjdCBmYXVsdHMgICAgKi8KKyNkZWZpbmUgQURWRVJUSVNFX0xQQUNLICAgICAgICAgMHg0MDAwICAvKiBBY2sgbGluayBwYXJ0bmVycyByZXNwb25zZSAgKi8KKyNkZWZpbmUgQURWRVJUSVNFX05QQUdFICAgICAgICAgMHg4MDAwICAvKiBOZXh0IHBhZ2UgYml0ICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBBRFZFUlRJU0VfRlVMTCAoQURWRVJUSVNFXzEwMEZVTEwgfCBBRFZFUlRJU0VfMTBGVUxMIHwgXAorCQkJQURWRVJUSVNFX0NTTUEpCisjZGVmaW5lIEFEVkVSVElTRV9BTEwgKEFEVkVSVElTRV8xMEhBTEYgfCBBRFZFUlRJU0VfMTBGVUxMIHwgXAorICAgICAgICAgICAgICAgICAgICAgICBBRFZFUlRJU0VfMTAwSEFMRiB8IEFEVkVSVElTRV8xMDBGVUxMKQorCisvKiBMaW5rIHBhcnRuZXIgYWJpbGl0eSByZWdpc3Rlci4gKi8KKyNkZWZpbmUgTFBBX1NMQ1QgICAgICAgICAgICAgICAgMHgwMDFmICAvKiBTYW1lIGFzIGFkdmVydGlzZSBzZWxlY3RvciAgKi8KKyNkZWZpbmUgTFBBXzEwSEFMRiAgICAgICAgICAgICAgMHgwMDIwICAvKiBDYW4gZG8gMTBtYnBzIGhhbGYtZHVwbGV4ICAgKi8KKyNkZWZpbmUgTFBBXzEwRlVMTCAgICAgICAgICAgICAgMHgwMDQwICAvKiBDYW4gZG8gMTBtYnBzIGZ1bGwtZHVwbGV4ICAgKi8KKyNkZWZpbmUgTFBBXzEwMEhBTEYgICAgICAgICAgICAgMHgwMDgwICAvKiBDYW4gZG8gMTAwbWJwcyBoYWxmLWR1cGxleCAgKi8KKyNkZWZpbmUgTFBBXzEwMEZVTEwgICAgICAgICAgICAgMHgwMTAwICAvKiBDYW4gZG8gMTAwbWJwcyBmdWxsLWR1cGxleCAgKi8KKyNkZWZpbmUgTFBBXzEwMEJBU0U0ICAgICAgICAgICAgMHgwMjAwICAvKiBDYW4gZG8gMTAwbWJwcyA0ayBwYWNrZXRzICAgKi8KKyNkZWZpbmUgTFBBX1BBVVNFX0NBUCAgICAgICAgICAgMHgwNDAwICAvKiBDYW4gcGF1c2UgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTFBBX1BBVVNFX0FTWU0gICAgICAgICAgMHgwODAwICAvKiBDYW4gcGF1c2UgYXN5bWV0cmljYWxseSAgICAgKi8KKyNkZWZpbmUgTFBBX1JFU1YgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBVbnVzZWQuLi4gICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTFBBX1JGQVVMVCAgICAgICAgICAgICAgMHgyMDAwICAvKiBMaW5rIHBhcnRuZXIgZmF1bHRlZCAgICAgICAgKi8KKyNkZWZpbmUgTFBBX0xQQUNLICAgICAgICAgICAgICAgMHg0MDAwICAvKiBMaW5rIHBhcnRuZXIgYWNrZWQgdXMgICAgICAgKi8KKyNkZWZpbmUgTFBBX05QQUdFICAgICAgICAgICAgICAgMHg4MDAwICAvKiBOZXh0IHBhZ2UgYml0ICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBMUEFfRFVQTEVYCQkoTFBBXzEwRlVMTCB8IExQQV8xMDBGVUxMKQorI2RlZmluZSBMUEFfMTAwCQkJKExQQV8xMDBGVUxMIHwgTFBBXzEwMEhBTEYgfCBMUEFfMTAwQkFTRTQpCisKKy8qIEV4cGFuc2lvbiByZWdpc3RlciBmb3IgYXV0by1uZWdvdGlhdGlvbi4gKi8KKyNkZWZpbmUgRVhQQU5TSU9OX05XQVkgICAgICAgICAgMHgwMDAxICAvKiBDYW4gZG8gTi13YXkgYXV0by1uZWdvICAgICAgKi8KKyNkZWZpbmUgRVhQQU5TSU9OX0xDV1AgICAgICAgICAgMHgwMDAyICAvKiBHb3QgbmV3IFJYIHBhZ2UgY29kZSB3b3JkICAgKi8KKyNkZWZpbmUgRVhQQU5TSU9OX0VOQUJMRU5QQUdFICAgMHgwMDA0ICAvKiBUaGlzIGVuYWJsZXMgbnBhZ2Ugd29yZHMgICAgKi8KKyNkZWZpbmUgRVhQQU5TSU9OX05QQ0FQQUJMRSAgICAgMHgwMDA4ICAvKiBMaW5rIHBhcnRuZXIgc3VwcG9ydHMgbnBhZ2UgKi8KKyNkZWZpbmUgRVhQQU5TSU9OX01GQVVMVFMgICAgICAgMHgwMDEwICAvKiBNdWx0aXBsZSBmYXVsdHMgZGV0ZWN0ZWQgICAgKi8KKyNkZWZpbmUgRVhQQU5TSU9OX1JFU1YgICAgICAgICAgMHhmZmUwICAvKiBVbnVzZWQuLi4gICAgICAgICAgICAgICAgICAgKi8KKworLyogTi13YXkgdGVzdCByZWdpc3Rlci4gKi8KKyNkZWZpbmUgTldBWVRFU1RfUkVTVjEgICAgICAgICAgMHgwMGZmICAvKiBVbnVzZWQuLi4gICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTldBWVRFU1RfTE9PUEJBQ0sgICAgICAgMHgwMTAwICAvKiBFbmFibGUgbG9vcGJhY2sgZm9yIE4td2F5ICAgKi8KKyNkZWZpbmUgTldBWVRFU1RfUkVTVjIgICAgICAgICAgMHhmZTAwICAvKiBVbnVzZWQuLi4gICAgICAgICAgICAgICAgICAgKi8KKworLyogMTAwMEJBU0UtVCBDb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIEFEVkVSVElTRV8xMDAwRlVMTCAgICAgIDB4MDIwMCAgLyogQWR2ZXJ0aXNlIDEwMDBCQVNFLVQgZnVsbCBkdXBsZXggKi8KKyNkZWZpbmUgQURWRVJUSVNFXzEwMDBIQUxGICAgICAgMHgwMTAwICAvKiBBZHZlcnRpc2UgMTAwMEJBU0UtVCBoYWxmIGR1cGxleCAqLworCisvKiAxMDAwQkFTRS1UIFN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBMUEFfMTAwMExPQ0FMUlhPSyAgICAgICAweDIwMDAgIC8qIExpbmsgcGFydG5lciBsb2NhbCByZWNlaXZlciBzdGF0dXMgKi8KKyNkZWZpbmUgTFBBXzEwMDBSRU1SWE9LICAgICAgICAgMHgxMDAwICAvKiBMaW5rIHBhcnRuZXIgcmVtb3RlIHJlY2VpdmVyIHN0YXR1cyAqLworI2RlZmluZSBMUEFfMTAwMEZVTEwgICAgICAgICAgICAweDA4MDAgIC8qIExpbmsgcGFydG5lciAxMDAwQkFTRS1UIGZ1bGwgZHVwbGV4ICovCisjZGVmaW5lIExQQV8xMDAwSEFMRiAgICAgICAgICAgIDB4MDQwMCAgLyogTGluayBwYXJ0bmVyIDEwMDBCQVNFLVQgaGFsZiBkdXBsZXggKi8KKworc3RydWN0IG1paV9pZl9pbmZvIHsKKwlpbnQgcGh5X2lkOworCWludCBhZHZlcnRpc2luZzsKKwlpbnQgcGh5X2lkX21hc2s7CisJaW50IHJlZ19udW1fbWFzazsKKworCXVuc2lnbmVkIGludCBmdWxsX2R1cGxleCA6IDE7CS8qIGlzIGZ1bGwgZHVwbGV4PyAqLworCXVuc2lnbmVkIGludCBmb3JjZV9tZWRpYSA6IDE7CS8qIGlzIGF1dG9uZWcuIGRpc2FibGVkPyAqLworCXVuc2lnbmVkIGludCBzdXBwb3J0c19nbWlpIDogMTsgLyogYXJlIEdNSUkgcmVnaXN0ZXJzIHN1cHBvcnRlZD8gKi8KKworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJaW50ICgqbWRpb19yZWFkKSAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9pZCwgaW50IGxvY2F0aW9uKTsKKwl2b2lkICgqbWRpb193cml0ZSkgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfaWQsIGludCBsb2NhdGlvbiwgaW50IHZhbCk7Cit9OworCitzdHJ1Y3QgZXRodG9vbF9jbWQ7CitzdHJ1Y3QgbWlpX2lvY3RsX2RhdGE7CisKK2V4dGVybiBpbnQgbWlpX2xpbmtfb2sgKHN0cnVjdCBtaWlfaWZfaW5mbyAqbWlpKTsKK2V4dGVybiBpbnQgbWlpX253YXlfcmVzdGFydCAoc3RydWN0IG1paV9pZl9pbmZvICptaWkpOworZXh0ZXJuIGludCBtaWlfZXRodG9vbF9nc2V0KHN0cnVjdCBtaWlfaWZfaW5mbyAqbWlpLCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmVjbWQpOworZXh0ZXJuIGludCBtaWlfZXRodG9vbF9zc2V0KHN0cnVjdCBtaWlfaWZfaW5mbyAqbWlpLCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmVjbWQpOworZXh0ZXJuIHZvaWQgbWlpX2NoZWNrX2xpbmsgKHN0cnVjdCBtaWlfaWZfaW5mbyAqbWlpKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgbWlpX2NoZWNrX21lZGlhIChzdHJ1Y3QgbWlpX2lmX2luZm8gKm1paSwKKwkJCQkgICAgIHVuc2lnbmVkIGludCBva190b19wcmludCwKKwkJCQkgICAgIHVuc2lnbmVkIGludCBpbml0X21lZGlhKTsKK2V4dGVybiBpbnQgZ2VuZXJpY19taWlfaW9jdGwoc3RydWN0IG1paV9pZl9pbmZvICptaWlfaWYsCisgICAgICAgICAgICAgICAgICAgICAgCSAgICAgc3RydWN0IG1paV9pb2N0bF9kYXRhICptaWlfZGF0YSwgaW50IGNtZCwKKwkJCSAgICAgdW5zaWduZWQgaW50ICpkdXBsZXhfY2hhbmdlZCk7CisKKworCisvKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIGluIGFsbCBTSU9DeE1JSXh4eCBpb2N0bCBjYWxscyAqLworc3RydWN0IG1paV9pb2N0bF9kYXRhIHsKKwl1MTYJCXBoeV9pZDsKKwl1MTYJCXJlZ19udW07CisJdTE2CQl2YWxfaW47CisJdTE2CQl2YWxfb3V0OworfTsKKworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtaWlfaW9jdGxfZGF0YSAqaWZfbWlpKHN0cnVjdCBpZnJlcSAqcnEpCit7CisJcmV0dXJuIChzdHJ1Y3QgbWlpX2lvY3RsX2RhdGEgKikgJnJxLT5pZnJfaWZydTsKK30KKworCisvKioKKyAqIG1paV9ud2F5X3Jlc3VsdAorICogQG5lZ290aWF0ZWQ6IHZhbHVlIG9mIE1JSSBBTkFSIGFuZCdkIHdpdGggQU5MUEFSCisgKgorICogR2l2ZW4gYSBzZXQgb2YgTUlJIGFiaWxpdGllcywgY2hlY2sgZWFjaCBiaXQgYW5kIHJldHVybnMgdGhlCisgKiBjdXJyZW50bHkgc3VwcG9ydGVkIG1lZGlhLCBpbiB0aGUgcHJpb3JpdHkgb3JkZXIgZGVmaW5lZCBieQorICogSUVFRSA4MDIuM3UuICBXZSB1c2UgTFBBX3h4eCBjb25zdGFudHMgYnV0IG5vdGUgdGhpcyBpcyBub3QgdGhlCisgKiB2YWx1ZSBvZiBMUEEgc29sZWx5LCBhcyBkZXNjcmliZWQgYWJvdmUuCisgKgorICogVGhlIG9uZSBleGNlcHRpb24gdG8gSUVFRSA4MDIuM3UgaXMgdGhhdCAxMDBiYXNlVDQgaXMgcGxhY2VkCisgKiBiZXR3ZWVuIDEwMFQtZnVsbCBhbmQgMTAwVC1oYWxmLiAgSWYgeW91ciBwaHkgZG9lcyBub3Qgc3VwcG9ydAorICogMTAwVDQgdGhpcyBpcyBmaW5lLiAgSWYgeW91ciBwaHkgcGxhY2VzIDEwMFQ0IGVsc2V3aGVyZSBpbiB0aGUKKyAqIHByaW9yaXR5IG9yZGVyLCB5b3Ugd2lsbCBuZWVkIHRvIHJvbGwgeW91ciBvd24gZnVuY3Rpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG1paV9ud2F5X3Jlc3VsdCAodW5zaWduZWQgaW50IG5lZ290aWF0ZWQpCit7CisJdW5zaWduZWQgaW50IHJldDsKKworCWlmIChuZWdvdGlhdGVkICYgTFBBXzEwMEZVTEwpCisJCXJldCA9IExQQV8xMDBGVUxMOworCWVsc2UgaWYgKG5lZ290aWF0ZWQgJiBMUEFfMTAwQkFTRTQpCisJCXJldCA9IExQQV8xMDBCQVNFNDsKKwllbHNlIGlmIChuZWdvdGlhdGVkICYgTFBBXzEwMEhBTEYpCisJCXJldCA9IExQQV8xMDBIQUxGOworCWVsc2UgaWYgKG5lZ290aWF0ZWQgJiBMUEFfMTBGVUxMKQorCQlyZXQgPSBMUEFfMTBGVUxMOworCWVsc2UKKwkJcmV0ID0gTFBBXzEwSEFMRjsKKworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogbWlpX2R1cGxleAorICogQGR1cGxleF9sb2NrOiBOb24temVybyBpZiBkdXBsZXggaXMgbG9ja2VkIGF0IGZ1bGwKKyAqIEBuZWdvdGlhdGVkOiB2YWx1ZSBvZiBNSUkgQU5BUiBhbmQnZCB3aXRoIEFOTFBBUgorICoKKyAqIEEgc21hbGwgaGVscGVyIGZ1bmN0aW9uIGZvciBhIGNvbW1vbiBjYXNlLiAgUmV0dXJucyBvbmUKKyAqIGlmIHRoZSBtZWRpYSBpcyBvcGVyYXRpbmcgb3IgbG9ja2VkIGF0IGZ1bGwgZHVwbGV4LCBhbmQKKyAqIHJldHVybnMgemVybyBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG1paV9kdXBsZXggKHVuc2lnbmVkIGludCBkdXBsZXhfbG9jaywKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IG5lZ290aWF0ZWQpCit7CisJaWYgKGR1cGxleF9sb2NrKQorCQlyZXR1cm4gMTsKKwlpZiAobWlpX253YXlfcmVzdWx0KG5lZ290aWF0ZWQpICYgTFBBX0RVUExFWCkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKKworI2VuZGlmIC8qIF9fTElOVVhfTUlJX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9taW5peF9mcy5oIGIvaW5jbHVkZS9saW51eC9taW5peF9mcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlY2MzY2MKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L21pbml4X2ZzLmgKQEAgLTAsMCArMSw4NSBAQAorI2lmbmRlZiBfTElOVVhfTUlOSVhfRlNfSAorI2RlZmluZSBfTElOVVhfTUlOSVhfRlNfSAorCisvKgorICogVGhlIG1pbml4IGZpbGVzeXN0ZW0gY29uc3RhbnRzL3N0cnVjdHVyZXMKKyAqLworCisvKgorICogVGhhbmtzIHRvIEtlZXMgSiBCb3QgZm9yIHNlbmRpbmcgbWUgdGhlIGRlZmluaXRpb25zIG9mIHRoZSBuZXcKKyAqIG1pbml4IGZpbGVzeXN0ZW0gKGFrYSBWMikgd2l0aCBiaWdnZXIgaW5vZGVzIGFuZCAzMi1iaXQgYmxvY2sKKyAqIHBvaW50ZXJzLgorICovCisKKyNkZWZpbmUgTUlOSVhfUk9PVF9JTk8gMQorCisvKiBOb3QgdGhlIHNhbWUgYXMgdGhlIGJvZ3VzIExJTktfTUFYIGluIDxsaW51eC9saW1pdHMuaD4uIE9oIHdlbGwuICovCisjZGVmaW5lIE1JTklYX0xJTktfTUFYCTI1MAorI2RlZmluZSBNSU5JWDJfTElOS19NQVgJNjU1MzAKKworI2RlZmluZSBNSU5JWF9JX01BUF9TTE9UUwk4CisjZGVmaW5lIE1JTklYX1pfTUFQX1NMT1RTCTY0CisjZGVmaW5lIE1JTklYX1NVUEVSX01BR0lDCTB4MTM3RgkJLyogb3JpZ2luYWwgbWluaXggZnMgKi8KKyNkZWZpbmUgTUlOSVhfU1VQRVJfTUFHSUMyCTB4MTM4RgkJLyogbWluaXggZnMsIDMwIGNoYXIgbmFtZXMgKi8KKyNkZWZpbmUgTUlOSVgyX1NVUEVSX01BR0lDCTB4MjQ2OAkJLyogbWluaXggVjIgZnMgKi8KKyNkZWZpbmUgTUlOSVgyX1NVUEVSX01BR0lDMgkweDI0NzgJCS8qIG1pbml4IFYyIGZzLCAzMCBjaGFyIG5hbWVzICovCisjZGVmaW5lIE1JTklYX1ZBTElEX0ZTCQkweDAwMDEJCS8qIENsZWFuIGZzLiAqLworI2RlZmluZSBNSU5JWF9FUlJPUl9GUwkJMHgwMDAyCQkvKiBmcyBoYXMgZXJyb3JzLiAqLworCisjZGVmaW5lIE1JTklYX0lOT0RFU19QRVJfQkxPQ0sgKChCTE9DS19TSVpFKS8oc2l6ZW9mIChzdHJ1Y3QgbWluaXhfaW5vZGUpKSkKKyNkZWZpbmUgTUlOSVgyX0lOT0RFU19QRVJfQkxPQ0sgKChCTE9DS19TSVpFKS8oc2l6ZW9mIChzdHJ1Y3QgbWluaXgyX2lub2RlKSkpCisKKy8qCisgKiBUaGlzIGlzIHRoZSBvcmlnaW5hbCBtaW5peCBpbm9kZSBsYXlvdXQgb24gZGlzay4KKyAqIE5vdGUgdGhlIDgtYml0IGdpZCBhbmQgYXRpbWUgYW5kIGN0aW1lLgorICovCitzdHJ1Y3QgbWluaXhfaW5vZGUgeworCV9fdTE2IGlfbW9kZTsKKwlfX3UxNiBpX3VpZDsKKwlfX3UzMiBpX3NpemU7CisJX191MzIgaV90aW1lOworCV9fdTggIGlfZ2lkOworCV9fdTggIGlfbmxpbmtzOworCV9fdTE2IGlfem9uZVs5XTsKK307CisKKy8qCisgKiBUaGUgbmV3IG1pbml4IGlub2RlIGhhcyBhbGwgdGhlIHRpbWUgZW50cmllcywgYXMgd2VsbCBhcworICogbG9uZyBibG9jayBudW1iZXJzIGFuZCBhIHRoaXJkIGluZGlyZWN0IGJsb2NrICg3KzErMSsxCisgKiBpbnN0ZWFkIG9mIDcrMSsxKS4gQWxzbywgc29tZSBwcmV2aW91c2x5IDgtYml0IHZhbHVlcyBhcmUKKyAqIG5vdyAxNi1iaXQuIFRoZSBpbm9kZSBpcyBub3cgNjQgYnl0ZXMgaW5zdGVhZCBvZiAzMi4KKyAqLworc3RydWN0IG1pbml4Ml9pbm9kZSB7CisJX191MTYgaV9tb2RlOworCV9fdTE2IGlfbmxpbmtzOworCV9fdTE2IGlfdWlkOworCV9fdTE2IGlfZ2lkOworCV9fdTMyIGlfc2l6ZTsKKwlfX3UzMiBpX2F0aW1lOworCV9fdTMyIGlfbXRpbWU7CisJX191MzIgaV9jdGltZTsKKwlfX3UzMiBpX3pvbmVbMTBdOworfTsKKworLyoKKyAqIG1pbml4IHN1cGVyLWJsb2NrIGRhdGEgb24gZGlzaworICovCitzdHJ1Y3QgbWluaXhfc3VwZXJfYmxvY2sgeworCV9fdTE2IHNfbmlub2RlczsKKwlfX3UxNiBzX256b25lczsKKwlfX3UxNiBzX2ltYXBfYmxvY2tzOworCV9fdTE2IHNfem1hcF9ibG9ja3M7CisJX191MTYgc19maXJzdGRhdGF6b25lOworCV9fdTE2IHNfbG9nX3pvbmVfc2l6ZTsKKwlfX3UzMiBzX21heF9zaXplOworCV9fdTE2IHNfbWFnaWM7CisJX191MTYgc19zdGF0ZTsKKwlfX3UzMiBzX3pvbmVzOworfTsKKworc3RydWN0IG1pbml4X2Rpcl9lbnRyeSB7CisJX191MTYgaW5vZGU7CisJY2hhciBuYW1lWzBdOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21pc2NkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbWlzY2RldmljZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0Y2VlYmYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L21pc2NkZXZpY2UuaApAQCAtMCwwICsxLDUyIEBACisjaWZuZGVmIF9MSU5VWF9NSVNDREVWSUNFX0gKKyNkZWZpbmUgX0xJTlVYX01JU0NERVZJQ0VfSAorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CisKKyNkZWZpbmUgUFNNT1VTRV9NSU5PUiAgMQorI2RlZmluZSBNU19CVVNNT1VTRV9NSU5PUiAyCisjZGVmaW5lIEFUSVhMX0JVU01PVVNFX01JTk9SIDMKKy8qI2RlZmluZSBBTUlHQU1PVVNFX01JTk9SIDQJRklYTUUgT0JTT0xFVEUgKi8KKyNkZWZpbmUgQVRBUklNT1VTRV9NSU5PUiA1CisjZGVmaW5lIFNVTl9NT1VTRV9NSU5PUiA2CisjZGVmaW5lIEFQT0xMT19NT1VTRV9NSU5PUiA3CisjZGVmaW5lIFBDMTEwUEFEX01JTk9SIDkKKy8qI2RlZmluZSBBREJfTU9VU0VfTUlOT1IgMTAJRklYTUUgT0JTT0xFVEUgKi8KKyNkZWZpbmUgV0FUQ0hET0dfTUlOT1IJCTEzMAkvKiBXYXRjaGRvZyB0aW1lciAgICAgKi8KKyNkZWZpbmUgVEVNUF9NSU5PUgkJMTMxCS8qIFRlbXBlcmF0dXJlIFNlbnNvciAqLworI2RlZmluZSBSVENfTUlOT1IgMTM1CisjZGVmaW5lIEVGSV9SVENfTUlOT1IJCTEzNgkvKiBFRkkgVGltZSBzZXJ2aWNlcyAqLworI2RlZmluZSBTVU5fT1BFTlBST01fTUlOT1IgMTM5CisjZGVmaW5lIERNQVBJX01JTk9SCQkxNDAJLyogRE1BUEkgKi8KKyNkZWZpbmUgTlZSQU1fTUlOT1IgMTQ0CisjZGVmaW5lIFNHSV9NTVRJTUVSICAgICAgICAxNTMKKyNkZWZpbmUgU1RPUkVfUVVFVUVfTUlOT1IJMTU1CisjZGVmaW5lIEkyT19NSU5PUiAxNjYKKyNkZWZpbmUgTUlDUk9DT0RFX01JTk9SCQkxODQKKyNkZWZpbmUgTVdBVkVfTUlOT1IJMjE5CQkvKiBBQ1AvTXdhdmUgTW9kZW0gKi8KKyNkZWZpbmUgTVBUX01JTk9SCTIyMAorI2RlZmluZSBNSVNDX0RZTkFNSUNfTUlOT1IgMjU1CisKKyNkZWZpbmUgVFVOX01JTk9SCSAgICAgMjAwCisjZGVmaW5lCUhQRVRfTUlOT1IJICAgICAyMjgKKworc3RydWN0IGRldmljZTsKK3N0cnVjdCBjbGFzc19kZXZpY2U7CisKK3N0cnVjdCBtaXNjZGV2aWNlICB7CisJaW50IG1pbm9yOworCWNvbnN0IGNoYXIgKm5hbWU7CisJc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZm9wczsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzOworCWNoYXIgZGV2ZnNfbmFtZVs2NF07Cit9OworCitleHRlcm4gaW50IG1pc2NfcmVnaXN0ZXIoc3RydWN0IG1pc2NkZXZpY2UgKiBtaXNjKTsKK2V4dGVybiBpbnQgbWlzY19kZXJlZ2lzdGVyKHN0cnVjdCBtaXNjZGV2aWNlICogbWlzYyk7CisKKyNkZWZpbmUgTU9EVUxFX0FMSUFTX01JU0NERVYobWlub3IpCQkJCVwKKwlNT0RVTEVfQUxJQVMoImNoYXItbWFqb3ItIiBfX3N0cmluZ2lmeShNSVNDX01BSk9SKQlcCisJIi0iIF9fc3RyaW5naWZ5KG1pbm9yKSkKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhOTMxMzcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L21tLmgKQEAgLTAsMCArMSw4NjEgQEAKKyNpZm5kZWYgX0xJTlVYX01NX0gKKyNkZWZpbmUgX0xJTlVYX01NX0gKKworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9tbXpvbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmlvX3RyZWUuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorCitzdHJ1Y3QgbWVtcG9saWN5Oworc3RydWN0IGFub25fdm1hOworCisjaWZuZGVmIENPTkZJR19ESVNDT05USUdNRU0gICAgICAgICAgLyogRG9uJ3QgdXNlIG1hcG5ycywgZG8gaXQgcHJvcGVybHkgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIG1heF9tYXBucjsKKyNlbmRpZgorCitleHRlcm4gdW5zaWduZWQgbG9uZyBudW1fcGh5c3BhZ2VzOworZXh0ZXJuIHZvaWQgKiBoaWdoX21lbW9yeTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHZtYWxsb2NfZWFybHlyZXNlcnZlOworZXh0ZXJuIGludCBwYWdlX2NsdXN0ZXI7CisKKyNpZmRlZiBDT05GSUdfU1lTQ1RMCitleHRlcm4gaW50IHN5c2N0bF9sZWdhY3lfdmFfbGF5b3V0OworI2Vsc2UKKyNkZWZpbmUgc3lzY3RsX2xlZ2FjeV92YV9sYXlvdXQgMAorI2VuZGlmCisKKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKworI2lmbmRlZiBNTV9WTV9TSVpFCisjZGVmaW5lIE1NX1ZNX1NJWkUobW0pCSgoVEFTS19TSVpFICsgUEdESVJfU0laRSAtIDEpICYgUEdESVJfTUFTSykKKyNlbmRpZgorCisjZGVmaW5lIG50aF9wYWdlKHBhZ2UsbikgcGZuX3RvX3BhZ2UocGFnZV90b19wZm4oKHBhZ2UpKSArIChuKSkKKworLyoKKyAqIExpbnV4IGtlcm5lbCB2aXJ0dWFsIG1lbW9yeSBtYW5hZ2VyIHByaW1pdGl2ZXMuCisgKiBUaGUgaWRlYSBiZWluZyB0byBoYXZlIGEgInZpcnR1YWwiIG1tIGluIHRoZSBzYW1lIHdheQorICogd2UgaGF2ZSBhIHZpcnR1YWwgZnMgLSBnaXZpbmcgYSBjbGVhbmVyIGludGVyZmFjZSB0byB0aGUKKyAqIG1tIGRldGFpbHMsIGFuZCBhbGxvd2luZyBkaWZmZXJlbnQga2luZHMgb2YgbWVtb3J5IG1hcHBpbmdzCisgKiAoZnJvbSBzaGFyZWQgbWVtb3J5IHRvIGV4ZWN1dGFibGUgbG9hZGluZyB0byBhcmJpdHJhcnkKKyAqIG1tYXAoKSBmdW5jdGlvbnMpLgorICovCisKKy8qCisgKiBUaGlzIHN0cnVjdCBkZWZpbmVzIGEgbWVtb3J5IFZNTSBtZW1vcnkgYXJlYS4gVGhlcmUgaXMgb25lIG9mIHRoZXNlCisgKiBwZXIgVk0tYXJlYS90YXNrLiAgQSBWTSBhcmVhIGlzIGFueSBwYXJ0IG9mIHRoZSBwcm9jZXNzIHZpcnR1YWwgbWVtb3J5CisgKiBzcGFjZSB0aGF0IGhhcyBhIHNwZWNpYWwgcnVsZSBmb3IgdGhlIHBhZ2UtZmF1bHQgaGFuZGxlcnMgKGllIGEgc2hhcmVkCisgKiBsaWJyYXJ5LCB0aGUgZXhlY3V0YWJsZSBhcmVhIGV0YykuCisgKi8KK3N0cnVjdCB2bV9hcmVhX3N0cnVjdCB7CisJc3RydWN0IG1tX3N0cnVjdCAqIHZtX21tOwkvKiBUaGUgYWRkcmVzcyBzcGFjZSB3ZSBiZWxvbmcgdG8uICovCisJdW5zaWduZWQgbG9uZyB2bV9zdGFydDsJCS8qIE91ciBzdGFydCBhZGRyZXNzIHdpdGhpbiB2bV9tbS4gKi8KKwl1bnNpZ25lZCBsb25nIHZtX2VuZDsJCS8qIFRoZSBmaXJzdCBieXRlIGFmdGVyIG91ciBlbmQgYWRkcmVzcworCQkJCQkgICB3aXRoaW4gdm1fbW0uICovCisKKwkvKiBsaW5rZWQgbGlzdCBvZiBWTSBhcmVhcyBwZXIgdGFzaywgc29ydGVkIGJ5IGFkZHJlc3MgKi8KKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtX25leHQ7CisKKwlwZ3Byb3RfdCB2bV9wYWdlX3Byb3Q7CQkvKiBBY2Nlc3MgcGVybWlzc2lvbnMgb2YgdGhpcyBWTUEuICovCisJdW5zaWduZWQgbG9uZyB2bV9mbGFnczsJCS8qIEZsYWdzLCBsaXN0ZWQgYmVsb3cuICovCisKKwlzdHJ1Y3QgcmJfbm9kZSB2bV9yYjsKKworCS8qCisJICogRm9yIGFyZWFzIHdpdGggYW4gYWRkcmVzcyBzcGFjZSBhbmQgYmFja2luZyBzdG9yZSwKKwkgKiBsaW5rYWdlIGludG8gdGhlIGFkZHJlc3Nfc3BhY2UtPmlfbW1hcCBwcmlvIHRyZWUsIG9yCisJICogbGlua2FnZSB0byB0aGUgbGlzdCBvZiBsaWtlIHZtYXMgaGFuZ2luZyBvZmYgaXRzIG5vZGUsIG9yCisJICogbGlua2FnZSBvZiB2bWEgaW4gdGhlIGFkZHJlc3Nfc3BhY2UtPmlfbW1hcF9ub25saW5lYXIgbGlzdC4KKwkgKi8KKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJCQl2b2lkICpwYXJlbnQ7CS8qIGFsaWducyB3aXRoIHByaW9fdHJlZV9ub2RlIHBhcmVudCAqLworCQkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICpoZWFkOworCQl9IHZtX3NldDsKKworCQlzdHJ1Y3QgcmF3X3ByaW9fdHJlZV9ub2RlIHByaW9fdHJlZV9ub2RlOworCX0gc2hhcmVkOworCisJLyoKKwkgKiBBIGZpbGUncyBNQVBfUFJJVkFURSB2bWEgY2FuIGJlIGluIGJvdGggaV9tbWFwIHRyZWUgYW5kIGFub25fdm1hCisJICogbGlzdCwgYWZ0ZXIgYSBDT1cgb2Ygb25lIG9mIHRoZSBmaWxlIHBhZ2VzLiAgQSBNQVBfU0hBUkVEIHZtYQorCSAqIGNhbiBvbmx5IGJlIGluIHRoZSBpX21tYXAgdHJlZS4gIEFuIGFub255bW91cyBNQVBfUFJJVkFURSwgc3RhY2sKKwkgKiBvciBicmsgdm1hICh3aXRoIE5VTEwgZmlsZSkgY2FuIG9ubHkgYmUgaW4gYW4gYW5vbl92bWEgbGlzdC4KKwkgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGFub25fdm1hX25vZGU7CS8qIFNlcmlhbGl6ZWQgYnkgYW5vbl92bWEtPmxvY2sgKi8KKwlzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hOwkvKiBTZXJpYWxpemVkIGJ5IHBhZ2VfdGFibGVfbG9jayAqLworCisJLyogRnVuY3Rpb24gcG9pbnRlcnMgdG8gZGVhbCB3aXRoIHRoaXMgc3RydWN0LiAqLworCXN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCAqIHZtX29wczsKKworCS8qIEluZm9ybWF0aW9uIGFib3V0IG91ciBiYWNraW5nIHN0b3JlOiAqLworCXVuc2lnbmVkIGxvbmcgdm1fcGdvZmY7CQkvKiBPZmZzZXQgKHdpdGhpbiB2bV9maWxlKSBpbiBQQUdFX1NJWkUKKwkJCQkJICAgdW5pdHMsICpub3QqIFBBR0VfQ0FDSEVfU0laRSAqLworCXN0cnVjdCBmaWxlICogdm1fZmlsZTsJCS8qIEZpbGUgd2UgbWFwIHRvIChjYW4gYmUgTlVMTCkuICovCisJdm9pZCAqIHZtX3ByaXZhdGVfZGF0YTsJCS8qIHdhcyB2bV9wdGUgKHNoYXJlZCBtZW0pICovCisJdW5zaWduZWQgbG9uZyB2bV90cnVuY2F0ZV9jb3VudDsvKiB0cnVuY2F0ZV9jb3VudCBvciByZXN0YXJ0X2FkZHIgKi8KKworI2lmbmRlZiBDT05GSUdfTU1VCisJYXRvbWljX3Qgdm1fdXNhZ2U7CQkvKiByZWZjb3VudCAoVk1BcyBzaGFyZWQgaWYgIU1NVSkgKi8KKyNlbmRpZgorI2lmZGVmIENPTkZJR19OVU1BCisJc3RydWN0IG1lbXBvbGljeSAqdm1fcG9saWN5OwkvKiBOVU1BIHBvbGljeSBmb3IgdGhlIFZNQSAqLworI2VuZGlmCit9OworCisvKgorICogVGhpcyBzdHJ1Y3QgZGVmaW5lcyB0aGUgcGVyLW1tIGxpc3Qgb2YgVk1BcyBmb3IgdUNsaW51eC4gSWYgQ09ORklHX01NVSBpcworICogZGlzYWJsZWQsIHRoZW4gdGhlcmUncyBhIHNpbmdsZSBzaGFyZWQgbGlzdCBvZiBWTUFzIG1haW50YWluZWQgYnkgdGhlCisgKiBzeXN0ZW0sIGFuZCBtbSdzIHN1YnNjcmliZSB0byB0aGVzZSBpbmRpdmlkdWFsbHkKKyAqLworc3RydWN0IHZtX2xpc3Rfc3RydWN0IHsKKwlzdHJ1Y3Qgdm1fbGlzdF9zdHJ1Y3QJKm5leHQ7CisJc3RydWN0IHZtX2FyZWFfc3RydWN0CSp2bWE7Cit9OworCisjaWZuZGVmIENPTkZJR19NTVUKK2V4dGVybiBzdHJ1Y3QgcmJfcm9vdCBub21tdV92bWFfdHJlZTsKK2V4dGVybiBzdHJ1Y3Qgcndfc2VtYXBob3JlIG5vbW11X3ZtYV9zZW07CisKK2V4dGVybiB1bnNpZ25lZCBpbnQga29ianNpemUoY29uc3Qgdm9pZCAqb2JqcCk7CisjZW5kaWYKKworLyoKKyAqIHZtX2ZsYWdzLi4KKyAqLworI2RlZmluZSBWTV9SRUFECQkweDAwMDAwMDAxCS8qIGN1cnJlbnRseSBhY3RpdmUgZmxhZ3MgKi8KKyNkZWZpbmUgVk1fV1JJVEUJMHgwMDAwMDAwMgorI2RlZmluZSBWTV9FWEVDCQkweDAwMDAwMDA0CisjZGVmaW5lIFZNX1NIQVJFRAkweDAwMDAwMDA4CisKKyNkZWZpbmUgVk1fTUFZUkVBRAkweDAwMDAwMDEwCS8qIGxpbWl0cyBmb3IgbXByb3RlY3QoKSBldGMgKi8KKyNkZWZpbmUgVk1fTUFZV1JJVEUJMHgwMDAwMDAyMAorI2RlZmluZSBWTV9NQVlFWEVDCTB4MDAwMDAwNDAKKyNkZWZpbmUgVk1fTUFZU0hBUkUJMHgwMDAwMDA4MAorCisjZGVmaW5lIFZNX0dST1dTRE9XTgkweDAwMDAwMTAwCS8qIGdlbmVyYWwgaW5mbyBvbiB0aGUgc2VnbWVudCAqLworI2RlZmluZSBWTV9HUk9XU1VQCTB4MDAwMDAyMDAKKyNkZWZpbmUgVk1fU0hNCQkweDAwMDAwNDAwCS8qIHNoYXJlZCBtZW1vcnkgYXJlYSwgZG9uJ3Qgc3dhcCBvdXQgKi8KKyNkZWZpbmUgVk1fREVOWVdSSVRFCTB4MDAwMDA4MDAJLyogRVRYVEJTWSBvbiB3cml0ZSBhdHRlbXB0cy4uICovCisKKyNkZWZpbmUgVk1fRVhFQ1VUQUJMRQkweDAwMDAxMDAwCisjZGVmaW5lIFZNX0xPQ0tFRAkweDAwMDAyMDAwCisjZGVmaW5lIFZNX0lPICAgICAgICAgICAweDAwMDA0MDAwCS8qIE1lbW9yeSBtYXBwZWQgSS9PIG9yIHNpbWlsYXIgKi8KKworCQkJCQkvKiBVc2VkIGJ5IHN5c19tYWR2aXNlKCkgKi8KKyNkZWZpbmUgVk1fU0VRX1JFQUQJMHgwMDAwODAwMAkvKiBBcHAgd2lsbCBhY2Nlc3MgZGF0YSBzZXF1ZW50aWFsbHkgKi8KKyNkZWZpbmUgVk1fUkFORF9SRUFECTB4MDAwMTAwMDAJLyogQXBwIHdpbGwgbm90IGJlbmVmaXQgZnJvbSBjbHVzdGVyZWQgcmVhZHMgKi8KKworI2RlZmluZSBWTV9ET05UQ09QWQkweDAwMDIwMDAwICAgICAgLyogRG8gbm90IGNvcHkgdGhpcyB2bWEgb24gZm9yayAqLworI2RlZmluZSBWTV9ET05URVhQQU5ECTB4MDAwNDAwMDAJLyogQ2Fubm90IGV4cGFuZCB3aXRoIG1yZW1hcCgpICovCisjZGVmaW5lIFZNX1JFU0VSVkVECTB4MDAwODAwMDAJLyogRG9uJ3QgdW5tYXAgaXQgZnJvbSBzd2FwX291dCAqLworI2RlZmluZSBWTV9BQ0NPVU5UCTB4MDAxMDAwMDAJLyogSXMgYSBWTSBhY2NvdW50ZWQgb2JqZWN0ICovCisjZGVmaW5lIFZNX0hVR0VUTEIJMHgwMDQwMDAwMAkvKiBIdWdlIFRMQiBQYWdlIFZNICovCisjZGVmaW5lIFZNX05PTkxJTkVBUgkweDAwODAwMDAwCS8qIElzIG5vbi1saW5lYXIgKHJlbWFwX2ZpbGVfcGFnZXMpICovCisjZGVmaW5lIFZNX01BUFBFRF9DT1BZCTB4MDEwMDAwMDAJLyogVCBpZiBtYXBwZWQgY29weSBvZiBkYXRhIChub21tdSBtbWFwKSAqLworCisjaWZuZGVmIFZNX1NUQUNLX0RFRkFVTFRfRkxBR1MJCS8qIGFyY2ggY2FuIG92ZXJyaWRlIHRoaXMgKi8KKyNkZWZpbmUgVk1fU1RBQ0tfREVGQVVMVF9GTEFHUyBWTV9EQVRBX0RFRkFVTFRfRkxBR1MKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1NUQUNLX0dST1dTVVAKKyNkZWZpbmUgVk1fU1RBQ0tfRkxBR1MJKFZNX0dST1dTVVAgfCBWTV9TVEFDS19ERUZBVUxUX0ZMQUdTIHwgVk1fQUNDT1VOVCkKKyNlbHNlCisjZGVmaW5lIFZNX1NUQUNLX0ZMQUdTCShWTV9HUk9XU0RPV04gfCBWTV9TVEFDS19ERUZBVUxUX0ZMQUdTIHwgVk1fQUNDT1VOVCkKKyNlbmRpZgorCisjZGVmaW5lIFZNX1JFQURISU5UTUFTSwkJCShWTV9TRVFfUkVBRCB8IFZNX1JBTkRfUkVBRCkKKyNkZWZpbmUgVk1fQ2xlYXJSZWFkSGludCh2KQkJKHYpLT52bV9mbGFncyAmPSB+Vk1fUkVBREhJTlRNQVNLCisjZGVmaW5lIFZNX05vcm1hbFJlYWRIaW50KHYpCQkoISgodiktPnZtX2ZsYWdzICYgVk1fUkVBREhJTlRNQVNLKSkKKyNkZWZpbmUgVk1fU2VxdWVudGlhbFJlYWRIaW50KHYpCSgodiktPnZtX2ZsYWdzICYgVk1fU0VRX1JFQUQpCisjZGVmaW5lIFZNX1JhbmRvbVJlYWRIaW50KHYpCQkoKHYpLT52bV9mbGFncyAmIFZNX1JBTkRfUkVBRCkKKworLyoKKyAqIG1hcHBpbmcgZnJvbSB0aGUgY3VycmVudGx5IGFjdGl2ZSB2bV9mbGFncyBwcm90ZWN0aW9uIGJpdHMgKHRoZQorICogbG93IGZvdXIgYml0cykgdG8gYSBwYWdlIHByb3RlY3Rpb24gbWFzay4uCisgKi8KK2V4dGVybiBwZ3Byb3RfdCBwcm90ZWN0aW9uX21hcFsxNl07CisKKworLyoKKyAqIFRoZXNlIGFyZSB0aGUgdmlydHVhbCBNTSBmdW5jdGlvbnMgLSBvcGVuaW5nIG9mIGFuIGFyZWEsIGNsb3NpbmcgYW5kCisgKiB1bm1hcHBpbmcgaXQgKG5lZWRlZCB0byBrZWVwIGZpbGVzIG9uIGRpc2sgdXAtdG8tZGF0ZSBldGMpLCBwb2ludGVyCisgKiB0byB0aGUgZnVuY3Rpb25zIGNhbGxlZCB3aGVuIGEgbm8tcGFnZSBvciBhIHdwLXBhZ2UgZXhjZXB0aW9uIG9jY3Vycy4gCisgKi8KK3N0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB7CisJdm9pZCAoKm9wZW4pKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIGFyZWEpOworCXZvaWQgKCpjbG9zZSkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICogYXJlYSk7CisJc3RydWN0IHBhZ2UgKiAoKm5vcGFnZSkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICogYXJlYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBpbnQgKnR5cGUpOworCWludCAoKnBvcHVsYXRlKShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiBhcmVhLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHVuc2lnbmVkIGxvbmcgbGVuLCBwZ3Byb3RfdCBwcm90LCB1bnNpZ25lZCBsb25nIHBnb2ZmLCBpbnQgbm9uYmxvY2spOworI2lmZGVmIENPTkZJR19OVU1BCisJaW50ICgqc2V0X3BvbGljeSkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBtZW1wb2xpY3kgKm5ldyk7CisJc3RydWN0IG1lbXBvbGljeSAqKCpnZXRfcG9saWN5KShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCQkJdW5zaWduZWQgbG9uZyBhZGRyKTsKKyNlbmRpZgorfTsKKworc3RydWN0IG1tdV9nYXRoZXI7CitzdHJ1Y3QgaW5vZGU7CisKKyNpZmRlZiBBUkNIX0hBU19BVE9NSUNfVU5TSUdORUQKK3R5cGVkZWYgdW5zaWduZWQgcGFnZV9mbGFnc190OworI2Vsc2UKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBwYWdlX2ZsYWdzX3Q7CisjZW5kaWYKKworLyoKKyAqIEVhY2ggcGh5c2ljYWwgcGFnZSBpbiB0aGUgc3lzdGVtIGhhcyBhIHN0cnVjdCBwYWdlIGFzc29jaWF0ZWQgd2l0aAorICogaXQgdG8ga2VlcCB0cmFjayBvZiB3aGF0ZXZlciBpdCBpcyB3ZSBhcmUgdXNpbmcgdGhlIHBhZ2UgZm9yIGF0IHRoZQorICogbW9tZW50LiBOb3RlIHRoYXQgd2UgaGF2ZSBubyB3YXkgdG8gdHJhY2sgd2hpY2ggdGFza3MgYXJlIHVzaW5nCisgKiBhIHBhZ2UuCisgKi8KK3N0cnVjdCBwYWdlIHsKKwlwYWdlX2ZsYWdzX3QgZmxhZ3M7CQkvKiBBdG9taWMgZmxhZ3MsIHNvbWUgcG9zc2libHkKKwkJCQkJICogdXBkYXRlZCBhc3luY2hyb25vdXNseSAqLworCWF0b21pY190IF9jb3VudDsJCS8qIFVzYWdlIGNvdW50LCBzZWUgYmVsb3cuICovCisJYXRvbWljX3QgX21hcGNvdW50OwkJLyogQ291bnQgb2YgcHRlcyBtYXBwZWQgaW4gbW1zLAorCQkJCQkgKiB0byBzaG93IHdoZW4gcGFnZSBpcyBtYXBwZWQKKwkJCQkJICogJiBsaW1pdCByZXZlcnNlIG1hcCBzZWFyY2hlcy4KKwkJCQkJICovCisJdW5zaWduZWQgbG9uZyBwcml2YXRlOwkJLyogTWFwcGluZy1wcml2YXRlIG9wYXF1ZSBkYXRhOgorCQkJCQkgKiB1c3VhbGx5IHVzZWQgZm9yIGJ1ZmZlcl9oZWFkcworCQkJCQkgKiBpZiBQYWdlUHJpdmF0ZSBzZXQ7IHVzZWQgZm9yCisJCQkJCSAqIHN3cF9lbnRyeV90IGlmIFBhZ2VTd2FwQ2FjaGUKKwkJCQkJICogV2hlbiBwYWdlIGlzIGZyZWUsIHRoaXMgaW5kaWNhdGVzCisJCQkJCSAqIG9yZGVyIGluIHRoZSBidWRkeSBzeXN0ZW0uCisJCQkJCSAqLworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nOwkvKiBJZiBsb3cgYml0IGNsZWFyLCBwb2ludHMgdG8KKwkJCQkJICogaW5vZGUgYWRkcmVzc19zcGFjZSwgb3IgTlVMTC4KKwkJCQkJICogSWYgcGFnZSBtYXBwZWQgYXMgYW5vbnltb3VzCisJCQkJCSAqIG1lbW9yeSwgbG93IGJpdCBpcyBzZXQsIGFuZAorCQkJCQkgKiBpdCBwb2ludHMgdG8gYW5vbl92bWEgb2JqZWN0OgorCQkJCQkgKiBzZWUgUEFHRV9NQVBQSU5HX0FOT04gYmVsb3cuCisJCQkJCSAqLworCXBnb2ZmX3QgaW5kZXg7CQkJLyogT3VyIG9mZnNldCB3aXRoaW4gbWFwcGluZy4gKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGxydTsJCS8qIFBhZ2VvdXQgbGlzdCwgZWcuIGFjdGl2ZV9saXN0CisJCQkJCSAqIHByb3RlY3RlZCBieSB6b25lLT5scnVfbG9jayAhCisJCQkJCSAqLworCS8qCisJICogT24gbWFjaGluZXMgd2hlcmUgYWxsIFJBTSBpcyBtYXBwZWQgaW50byBrZXJuZWwgYWRkcmVzcyBzcGFjZSwKKwkgKiB3ZSBjYW4gc2ltcGx5IGNhbGN1bGF0ZSB0aGUgdmlydHVhbCBhZGRyZXNzLiBPbiBtYWNoaW5lcyB3aXRoCisJICogaGlnaG1lbSBzb21lIG1lbW9yeSBpcyBtYXBwZWQgaW50byBrZXJuZWwgdmlydHVhbCBtZW1vcnkKKwkgKiBkeW5hbWljYWxseSwgc28gd2UgbmVlZCBhIHBsYWNlIHRvIHN0b3JlIHRoYXQgYWRkcmVzcy4KKwkgKiBOb3RlIHRoYXQgdGhpcyBmaWVsZCBjb3VsZCBiZSAxNiBiaXRzIG9uIHg4NiAuLi4gOykKKwkgKgorCSAqIEFyY2hpdGVjdHVyZXMgd2l0aCBzbG93IG11bHRpcGxpY2F0aW9uIGNhbiBkZWZpbmUKKwkgKiBXQU5UX1BBR0VfVklSVFVBTCBpbiBhc20vcGFnZS5oCisJICovCisjaWYgZGVmaW5lZChXQU5UX1BBR0VfVklSVFVBTCkKKwl2b2lkICp2aXJ0dWFsOwkJCS8qIEtlcm5lbCB2aXJ0dWFsIGFkZHJlc3MgKE5VTEwgaWYKKwkJCQkJICAgbm90IGttYXBwZWQsIGllLiBoaWdobWVtKSAqLworI2VuZGlmIC8qIFdBTlRfUEFHRV9WSVJUVUFMICovCit9OworCisvKgorICogRklYTUU6IHRha2UgdGhpcyBpbmNsdWRlIG91dCwgaW5jbHVkZSBwYWdlLWZsYWdzLmggaW4KKyAqIGZpbGVzIHdoaWNoIG5lZWQgaXQgKDExOSBvZiB0aGVtKQorICovCisjaW5jbHVkZSA8bGludXgvcGFnZS1mbGFncy5oPgorCisvKgorICogTWV0aG9kcyB0byBtb2RpZnkgdGhlIHBhZ2UgdXNhZ2UgY291bnQuCisgKgorICogV2hhdCBjb3VudHMgZm9yIGEgcGFnZSB1c2FnZToKKyAqIC0gY2FjaGUgbWFwcGluZyAgIChwYWdlLT5tYXBwaW5nKQorICogLSBwcml2YXRlIGRhdGEgICAgKHBhZ2UtPnByaXZhdGUpCisgKiAtIHBhZ2UgbWFwcGVkIGluIGEgdGFzaydzIHBhZ2UgdGFibGVzLCBlYWNoIG1hcHBpbmcKKyAqICAgaXMgY291bnRlZCBzZXBhcmF0ZWx5CisgKgorICogQWxzbywgbWFueSBrZXJuZWwgcm91dGluZXMgaW5jcmVhc2UgdGhlIHBhZ2UgY291bnQgYmVmb3JlIGEgY3JpdGljYWwKKyAqIHJvdXRpbmUgc28gdGhleSBjYW4gYmUgc3VyZSB0aGUgcGFnZSBkb2Vzbid0IGdvIGF3YXkgZnJvbSB1bmRlciB0aGVtLgorICoKKyAqIFNpbmNlIDIuNi42IChhcHByb3gpLCBhIGZyZWUgcGFnZSBoYXMgLT5fY291bnQgPSAtMS4gIFRoaXMgaXMgc28gdGhhdCB3ZQorICogY2FuIHVzZSBhdG9taWNfYWRkX25lZ2F0aXZlKC0xLCBwYWdlLT5fY291bnQpIHRvIGRldGVjdCB3aGVuIHRoZSBwYWdlCisgKiBiZWNvbWVzIGZyZWUgYW5kIHNvIHRoYXQgd2UgY2FuIGFsc28gdXNlIGF0b21pY19pbmNfYW5kX3Rlc3QgdG8gYXRvbWljYWxseQorICogZGV0ZWN0IHdoZW4gd2UganVzdCB0cmllZCB0byBncmFiIGEgcmVmIG9uIGEgcGFnZSB3aGljaCBzb21lIG90aGVyIENQVSBoYXMKKyAqIGFscmVhZHkgZGVlbWVkIHRvIGJlIGZyZWVhYmxlLgorICoKKyAqIE5PIGNvZGUgc2hvdWxkIG1ha2UgYXNzdW1wdGlvbnMgYWJvdXQgdGhpcyBpbnRlcm5hbCBkZXRhaWwhICBVc2UgdGhlIHByb3ZpZGVkCisgKiBtYWNyb3Mgd2hpY2ggcmV0YWluIHRoZSBvbGQgcnVsZXM6IHBhZ2VfY291bnQocGFnZSkgPT0gMCBpcyBhIGZyZWUgcGFnZS4KKyAqLworCisvKgorICogRHJvcCBhIHJlZiwgcmV0dXJuIHRydWUgaWYgdGhlIGxvZ2ljYWwgcmVmY291bnQgZmVsbCB0byB6ZXJvICh0aGUgcGFnZSBoYXMKKyAqIG5vIHVzZXJzKQorICovCisjZGVmaW5lIHB1dF9wYWdlX3Rlc3R6ZXJvKHApCQkJCVwKKwkoewkJCQkJCVwKKwkJQlVHX09OKHBhZ2VfY291bnQocCkgPT0gMCk7CQlcCisJCWF0b21pY19hZGRfbmVnYXRpdmUoLTEsICYocCktPl9jb3VudCk7CVwKKwl9KQorCisvKgorICogR3JhYiBhIHJlZiwgcmV0dXJuIHRydWUgaWYgdGhlIHBhZ2UgcHJldmlvdXNseSBoYWQgYSBsb2dpY2FsIHJlZmNvdW50IG9mCisgKiB6ZXJvLiAgaWU6IHJldHVybnMgdHJ1ZSBpZiB3ZSBqdXN0IGdyYWJiZWQgYW4gYWxyZWFkeS1kZWVtZWQtdG8tYmUtZnJlZSBwYWdlCisgKi8KKyNkZWZpbmUgZ2V0X3BhZ2VfdGVzdG9uZShwKQlhdG9taWNfaW5jX2FuZF90ZXN0KCYocCktPl9jb3VudCkKKworI2RlZmluZSBzZXRfcGFnZV9jb3VudChwLHYpIAlhdG9taWNfc2V0KCYocCktPl9jb3VudCwgdiAtIDEpCisjZGVmaW5lIF9fcHV0X3BhZ2UocCkJCWF0b21pY19kZWMoJihwKS0+X2NvdW50KQorCitleHRlcm4gdm9pZCBGQVNUQ0FMTChfX3BhZ2VfY2FjaGVfcmVsZWFzZShzdHJ1Y3QgcGFnZSAqKSk7CisKKyNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCisKK3N0YXRpYyBpbmxpbmUgaW50IHBhZ2VfY291bnQoc3RydWN0IHBhZ2UgKnApCit7CisJaWYgKFBhZ2VDb21wb3VuZChwKSkKKwkJcCA9IChzdHJ1Y3QgcGFnZSAqKXAtPnByaXZhdGU7CisJcmV0dXJuIGF0b21pY19yZWFkKCYocCktPl9jb3VudCkgKyAxOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJaWYgKHVubGlrZWx5KFBhZ2VDb21wb3VuZChwYWdlKSkpCisJCXBhZ2UgPSAoc3RydWN0IHBhZ2UgKilwYWdlLT5wcml2YXRlOworCWF0b21pY19pbmMoJnBhZ2UtPl9jb3VudCk7Cit9CisKK3ZvaWQgcHV0X3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpOworCisjZWxzZQkJLyogQ09ORklHX0hVR0VUTEJfUEFHRSAqLworCisjZGVmaW5lIHBhZ2VfY291bnQocCkJCShhdG9taWNfcmVhZCgmKHApLT5fY291bnQpICsgMSkKKworc3RhdGljIGlubGluZSB2b2lkIGdldF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQoreworCWF0b21pY19pbmMoJnBhZ2UtPl9jb3VudCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdXRfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlpZiAoIVBhZ2VSZXNlcnZlZChwYWdlKSAmJiBwdXRfcGFnZV90ZXN0emVybyhwYWdlKSkKKwkJX19wYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7Cit9CisKKyNlbmRpZgkJLyogQ09ORklHX0hVR0VUTEJfUEFHRSAqLworCisvKgorICogTXVsdGlwbGUgcHJvY2Vzc2VzIG1heSAic2VlIiB0aGUgc2FtZSBwYWdlLiBFLmcuIGZvciB1bnRvdWNoZWQKKyAqIG1hcHBpbmdzIG9mIC9kZXYvbnVsbCwgYWxsIHByb2Nlc3NlcyBzZWUgdGhlIHNhbWUgcGFnZSBmdWxsIG9mCisgKiB6ZXJvZXMsIGFuZCB0ZXh0IHBhZ2VzIG9mIGV4ZWN1dGFibGVzIGFuZCBzaGFyZWQgbGlicmFyaWVzIGhhdmUKKyAqIG9ubHkgb25lIGNvcHkgaW4gbWVtb3J5LCBhdCBtb3N0LCBub3JtYWxseS4KKyAqCisgKiBGb3IgdGhlIG5vbi1yZXNlcnZlZCBwYWdlcywgcGFnZV9jb3VudChwYWdlKSBkZW5vdGVzIGEgcmVmZXJlbmNlIGNvdW50LgorICogICBwYWdlX2NvdW50KCkgPT0gMCBtZWFucyB0aGUgcGFnZSBpcyBmcmVlLgorICogICBwYWdlX2NvdW50KCkgPT0gMSBtZWFucyB0aGUgcGFnZSBpcyB1c2VkIGZvciBleGFjdGx5IG9uZSBwdXJwb3NlCisgKiAgIChlLmcuIGEgcHJpdmF0ZSBkYXRhIHBhZ2Ugb2Ygb25lIHByb2Nlc3MpLgorICoKKyAqIEEgcGFnZSBtYXkgYmUgdXNlZCBmb3Iga21hbGxvYygpIG9yIGFueW9uZSBlbHNlIHdobyBkb2VzIGEKKyAqIF9fZ2V0X2ZyZWVfcGFnZSgpLiBJbiB0aGlzIGNhc2UgdGhlIHBhZ2VfY291bnQoKSBpcyBhdCBsZWFzdCAxLCBhbmQKKyAqIGFsbCBvdGhlciBmaWVsZHMgYXJlIHVudXNlZCBidXQgc2hvdWxkIGJlIDAgb3IgTlVMTC4gVGhlCisgKiBtYW5hZ2VtZW50IG9mIHRoaXMgcGFnZSBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIG9uZSB3aG8gdXNlcworICogaXQuCisgKgorICogVGhlIG90aGVyIHBhZ2VzICh3ZSBtYXkgY2FsbCB0aGVtICJwcm9jZXNzIHBhZ2VzIikgYXJlIGNvbXBsZXRlbHkKKyAqIG1hbmFnZWQgYnkgdGhlIExpbnV4IG1lbW9yeSBtYW5hZ2VyOiBJL08sIGJ1ZmZlcnMsIHN3YXBwaW5nIGV0Yy4KKyAqIFRoZSBmb2xsb3dpbmcgZGlzY3Vzc2lvbiBhcHBsaWVzIG9ubHkgdG8gdGhlbS4KKyAqCisgKiBBIHBhZ2UgbWF5IGJlbG9uZyB0byBhbiBpbm9kZSdzIG1lbW9yeSBtYXBwaW5nLiBJbiB0aGlzIGNhc2UsCisgKiBwYWdlLT5tYXBwaW5nIGlzIHRoZSBwb2ludGVyIHRvIHRoZSBpbm9kZSwgYW5kIHBhZ2UtPmluZGV4IGlzIHRoZQorICogZmlsZSBvZmZzZXQgb2YgdGhlIHBhZ2UsIGluIHVuaXRzIG9mIFBBR0VfQ0FDSEVfU0laRS4KKyAqCisgKiBBIHBhZ2UgY29udGFpbnMgYW4gb3BhcXVlIGBwcml2YXRlJyBtZW1iZXIsIHdoaWNoIGJlbG9uZ3MgdG8gdGhlCisgKiBwYWdlJ3MgYWRkcmVzc19zcGFjZS4gIFVzdWFsbHksIHRoaXMgaXMgdGhlIGFkZHJlc3Mgb2YgYSBjaXJjdWxhcgorICogbGlzdCBvZiB0aGUgcGFnZSdzIGRpc2sgYnVmZmVycy4KKyAqCisgKiBGb3IgcGFnZXMgYmVsb25naW5nIHRvIGlub2RlcywgdGhlIHBhZ2VfY291bnQoKSBpcyB0aGUgbnVtYmVyIG9mCisgKiBhdHRhY2hlcywgcGx1cyAxIGlmIGBwcml2YXRlJyBjb250YWlucyBzb21ldGhpbmcsIHBsdXMgb25lIGZvcgorICogdGhlIHBhZ2UgY2FjaGUgaXRzZWxmLgorICoKKyAqIEFsbCBwYWdlcyBiZWxvbmdpbmcgdG8gYW4gaW5vZGUgYXJlIGluIHRoZXNlIGRvdWJseSBsaW5rZWQgbGlzdHM6CisgKiBtYXBwaW5nLT5jbGVhbl9wYWdlcywgbWFwcGluZy0+ZGlydHlfcGFnZXMgYW5kIG1hcHBpbmctPmxvY2tlZF9wYWdlczsKKyAqIHVzaW5nIHRoZSBwYWdlLT5saXN0IGxpc3RfaGVhZC4gVGhlc2UgZmllbGRzIGFyZSBhbHNvIHVzZWQgZm9yCisgKiBmcmVlbGlzdCBtYW5hZ2VtZXQgKHdoZW4gcGFnZV9jb3VudCgpPT0wKS4KKyAqCisgKiBUaGVyZSBpcyBhbHNvIGEgcGVyLW1hcHBpbmcgcmFkaXggdHJlZSBtYXBwaW5nIGluZGV4IHRvIHRoZSBwYWdlCisgKiBpbiBtZW1vcnkgaWYgcHJlc2VudC4gVGhlIHRyZWUgaXMgcm9vdGVkIGF0IG1hcHBpbmctPnJvb3QuICAKKyAqCisgKiBBbGwgcHJvY2VzcyBwYWdlcyBjYW4gZG8gSS9POgorICogLSBpbm9kZSBwYWdlcyBtYXkgbmVlZCB0byBiZSByZWFkIGZyb20gZGlzaywKKyAqIC0gaW5vZGUgcGFnZXMgd2hpY2ggaGF2ZSBiZWVuIG1vZGlmaWVkIGFuZCBhcmUgTUFQX1NIQVJFRCBtYXkgbmVlZAorICogICB0byBiZSB3cml0dGVuIHRvIGRpc2ssCisgKiAtIHByaXZhdGUgcGFnZXMgd2hpY2ggaGF2ZSBiZWVuIG1vZGlmaWVkIG1heSBuZWVkIHRvIGJlIHN3YXBwZWQgb3V0CisgKiAgIHRvIHN3YXAgc3BhY2UgYW5kIChsYXRlcikgdG8gYmUgcmVhZCBiYWNrIGludG8gbWVtb3J5LgorICovCisKKy8qCisgKiBUaGUgem9uZSBmaWVsZCBpcyBuZXZlciB1cGRhdGVkIGFmdGVyIGZyZWVfYXJlYV9pbml0X2NvcmUoKQorICogc2V0cyBpdCwgc28gbm9uZSBvZiB0aGUgb3BlcmF0aW9ucyBvbiBpdCBuZWVkIHRvIGJlIGF0b21pYy4KKyAqIFdlJ2xsIGhhdmUgdXAgdG8gKE1BWF9OVU1OT0RFUyAqIE1BWF9OUl9aT05FUykgem9uZXMgdG90YWwsCisgKiBzbyB3ZSB1c2UgKE1BWF9OT0RFU19TSElGVCArIE1BWF9aT05FU19TSElGVCkgaGVyZSB0byBnZXQgZW5vdWdoIGJpdHMuCisgKi8KKyNkZWZpbmUgTk9ERVpPTkVfU0hJRlQgKHNpemVvZihwYWdlX2ZsYWdzX3QpKjggLSBNQVhfTk9ERVNfU0hJRlQgLSBNQVhfWk9ORVNfU0hJRlQpCisjZGVmaW5lIE5PREVaT05FKG5vZGUsIHpvbmUpCSgobm9kZSA8PCBaT05FU19TSElGVCkgfCB6b25lKQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcGFnZV96b25lbnVtKHN0cnVjdCBwYWdlICpwYWdlKQoreworCXJldHVybiAocGFnZS0+ZmxhZ3MgPj4gTk9ERVpPTkVfU0hJRlQpICYgKH4ofjBVTCA8PCBaT05FU19TSElGVCkpOworfQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHBhZ2VfdG9fbmlkKHN0cnVjdCBwYWdlICpwYWdlKQoreworCXJldHVybiAocGFnZS0+ZmxhZ3MgPj4gKE5PREVaT05FX1NISUZUICsgWk9ORVNfU0hJRlQpKTsKK30KKworc3RydWN0IHpvbmU7CitleHRlcm4gc3RydWN0IHpvbmUgKnpvbmVfdGFibGVbXTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgem9uZSAqcGFnZV96b25lKHN0cnVjdCBwYWdlICpwYWdlKQoreworCXJldHVybiB6b25lX3RhYmxlW3BhZ2UtPmZsYWdzID4+IE5PREVaT05FX1NISUZUXTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX3pvbmUoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbm9kZXpvbmVfbnVtKQoreworCXBhZ2UtPmZsYWdzICY9IH4ofjBVTCA8PCBOT0RFWk9ORV9TSElGVCk7CisJcGFnZS0+ZmxhZ3MgfD0gbm9kZXpvbmVfbnVtIDw8IE5PREVaT05FX1NISUZUOworfQorCisjaWZuZGVmIENPTkZJR19ESVNDT05USUdNRU0KKy8qIFRoZSBhcnJheSBvZiBzdHJ1Y3QgcGFnZXMgLSBmb3IgZGlzY29udGlnbWVtIHVzZSBwZ2RhdC0+bG1lbV9tYXAgKi8KK2V4dGVybiBzdHJ1Y3QgcGFnZSAqbWVtX21hcDsKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHZvaWQgKmxvd21lbV9wYWdlX2FkZHJlc3Moc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJcmV0dXJuIF9fdmEocGFnZV90b19wZm4ocGFnZSkgPDwgUEFHRV9TSElGVCk7Cit9CisKKyNpZiBkZWZpbmVkKENPTkZJR19ISUdITUVNKSAmJiAhZGVmaW5lZChXQU5UX1BBR0VfVklSVFVBTCkKKyNkZWZpbmUgSEFTSEVEX1BBR0VfVklSVFVBTAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFdBTlRfUEFHRV9WSVJUVUFMKQorI2RlZmluZSBwYWdlX2FkZHJlc3MocGFnZSkgKChwYWdlKS0+dmlydHVhbCkKKyNkZWZpbmUgc2V0X3BhZ2VfYWRkcmVzcyhwYWdlLCBhZGRyZXNzKQkJCVwKKwlkbyB7CQkJCQkJXAorCQkocGFnZSktPnZpcnR1YWwgPSAoYWRkcmVzcyk7CQlcCisJfSB3aGlsZSgwKQorI2RlZmluZSBwYWdlX2FkZHJlc3NfaW5pdCgpICBkbyB7IH0gd2hpbGUoMCkKKyNlbmRpZgorCisjaWYgZGVmaW5lZChIQVNIRURfUEFHRV9WSVJUVUFMKQordm9pZCAqcGFnZV9hZGRyZXNzKHN0cnVjdCBwYWdlICpwYWdlKTsKK3ZvaWQgc2V0X3BhZ2VfYWRkcmVzcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdm9pZCAqdmlydHVhbCk7Cit2b2lkIHBhZ2VfYWRkcmVzc19pbml0KHZvaWQpOworI2VuZGlmCisKKyNpZiAhZGVmaW5lZChIQVNIRURfUEFHRV9WSVJUVUFMKSAmJiAhZGVmaW5lZChXQU5UX1BBR0VfVklSVFVBTCkKKyNkZWZpbmUgcGFnZV9hZGRyZXNzKHBhZ2UpIGxvd21lbV9wYWdlX2FkZHJlc3MocGFnZSkKKyNkZWZpbmUgc2V0X3BhZ2VfYWRkcmVzcyhwYWdlLCBhZGRyZXNzKSAgZG8geyB9IHdoaWxlKDApCisjZGVmaW5lIHBhZ2VfYWRkcmVzc19pbml0KCkgIGRvIHsgfSB3aGlsZSgwKQorI2VuZGlmCisKKy8qCisgKiBPbiBhbiBhbm9ueW1vdXMgcGFnZSBtYXBwZWQgaW50byBhIHVzZXIgdmlydHVhbCBtZW1vcnkgYXJlYSwKKyAqIHBhZ2UtPm1hcHBpbmcgcG9pbnRzIHRvIGl0cyBhbm9uX3ZtYSwgbm90IHRvIGEgc3RydWN0IGFkZHJlc3Nfc3BhY2U7CisgKiB3aXRoIHRoZSBQQUdFX01BUFBJTkdfQU5PTiBiaXQgc2V0IHRvIGRpc3Rpbmd1aXNoIGl0LgorICoKKyAqIFBsZWFzZSBub3RlIHRoYXQsIGNvbmZ1c2luZ2x5LCAicGFnZV9tYXBwaW5nIiByZWZlcnMgdG8gdGhlIGlub2RlCisgKiBhZGRyZXNzX3NwYWNlIHdoaWNoIG1hcHMgdGhlIHBhZ2UgZnJvbSBkaXNrOyB3aGVyZWFzICJwYWdlX21hcHBlZCIKKyAqIHJlZmVycyB0byB1c2VyIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBpbnRvIHdoaWNoIHRoZSBwYWdlIGlzIG1hcHBlZC4KKyAqLworI2RlZmluZSBQQUdFX01BUFBJTkdfQU5PTgkxCisKK2V4dGVybiBzdHJ1Y3QgYWRkcmVzc19zcGFjZSBzd2FwcGVyX3NwYWNlOworc3RhdGljIGlubGluZSBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqcGFnZV9tYXBwaW5nKHN0cnVjdCBwYWdlICpwYWdlKQoreworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gcGFnZS0+bWFwcGluZzsKKworCWlmICh1bmxpa2VseShQYWdlU3dhcENhY2hlKHBhZ2UpKSkKKwkJbWFwcGluZyA9ICZzd2FwcGVyX3NwYWNlOworCWVsc2UgaWYgKHVubGlrZWx5KCh1bnNpZ25lZCBsb25nKW1hcHBpbmcgJiBQQUdFX01BUFBJTkdfQU5PTikpCisJCW1hcHBpbmcgPSBOVUxMOworCXJldHVybiBtYXBwaW5nOworfQorCitzdGF0aWMgaW5saW5lIGludCBQYWdlQW5vbihzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlyZXR1cm4gKCh1bnNpZ25lZCBsb25nKXBhZ2UtPm1hcHBpbmcgJiBQQUdFX01BUFBJTkdfQU5PTikgIT0gMDsKK30KKworLyoKKyAqIFJldHVybiB0aGUgcGFnZWNhY2hlIGluZGV4IG9mIHRoZSBwYXNzZWQgcGFnZS4gIFJlZ3VsYXIgcGFnZWNhY2hlIHBhZ2VzCisgKiB1c2UgLT5pbmRleCB3aGVyZWFzIHN3YXBjYWNoZSBwYWdlcyB1c2UgLT5wcml2YXRlCisgKi8KK3N0YXRpYyBpbmxpbmUgcGdvZmZfdCBwYWdlX2luZGV4KHN0cnVjdCBwYWdlICpwYWdlKQoreworCWlmICh1bmxpa2VseShQYWdlU3dhcENhY2hlKHBhZ2UpKSkKKwkJcmV0dXJuIHBhZ2UtPnByaXZhdGU7CisJcmV0dXJuIHBhZ2UtPmluZGV4OworfQorCisvKgorICogVGhlIGF0b21pYyBwYWdlLT5fbWFwY291bnQsIGxpa2UgX2NvdW50LCBzdGFydHMgZnJvbSAtMToKKyAqIHNvIHRoYXQgdHJhbnNpdGlvbnMgYm90aCBmcm9tIGl0IGFuZCB0byBpdCBjYW4gYmUgdHJhY2tlZCwKKyAqIHVzaW5nIGF0b21pY19pbmNfYW5kX3Rlc3QgYW5kIGF0b21pY19hZGRfbmVnYXRpdmUoLTEpLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgcmVzZXRfcGFnZV9tYXBjb3VudChzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlhdG9taWNfc2V0KCYocGFnZSktPl9tYXBjb3VudCwgLTEpOworfQorCitzdGF0aWMgaW5saW5lIGludCBwYWdlX21hcGNvdW50KHN0cnVjdCBwYWdlICpwYWdlKQoreworCXJldHVybiBhdG9taWNfcmVhZCgmKHBhZ2UpLT5fbWFwY291bnQpICsgMTsKK30KKworLyoKKyAqIFJldHVybiB0cnVlIGlmIHRoaXMgcGFnZSBpcyBtYXBwZWQgaW50byBwYWdldGFibGVzLgorICovCitzdGF0aWMgaW5saW5lIGludCBwYWdlX21hcHBlZChzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlyZXR1cm4gYXRvbWljX3JlYWQoJihwYWdlKS0+X21hcGNvdW50KSA+PSAwOworfQorCisvKgorICogRXJyb3IgcmV0dXJuIHZhbHVlcyBmb3IgdGhlICpfbm9wYWdlIGZ1bmN0aW9ucworICovCisjZGVmaW5lIE5PUEFHRV9TSUdCVVMJKE5VTEwpCisjZGVmaW5lIE5PUEFHRV9PT00JKChzdHJ1Y3QgcGFnZSAqKSAoLTEpKQorCisvKgorICogRGlmZmVyZW50IGtpbmRzIG9mIGZhdWx0cywgYXMgcmV0dXJuZWQgYnkgaGFuZGxlX21tX2ZhdWx0KCkuCisgKiBVc2VkIHRvIGRlY2lkZSB3aGV0aGVyIGEgcHJvY2VzcyBnZXRzIGRlbGl2ZXJlZCBTSUdCVVMgb3IKKyAqIGp1c3QgZ2V0cyBtYWpvci9taW5vciBmYXVsdCBjb3VudGVycyBidW1wZWQgdXAuCisgKi8KKyNkZWZpbmUgVk1fRkFVTFRfT09NCSgtMSkKKyNkZWZpbmUgVk1fRkFVTFRfU0lHQlVTCTAKKyNkZWZpbmUgVk1fRkFVTFRfTUlOT1IJMQorI2RlZmluZSBWTV9GQVVMVF9NQUpPUgkyCisKKyNkZWZpbmUgb2Zmc2V0X2luX3BhZ2UocCkJKCh1bnNpZ25lZCBsb25nKShwKSAmIH5QQUdFX01BU0spCisKK2V4dGVybiB2b2lkIHNob3dfZnJlZV9hcmVhcyh2b2lkKTsKKworI2lmZGVmIENPTkZJR19TSE1FTQorc3RydWN0IHBhZ2UgKnNobWVtX25vcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCXVuc2lnbmVkIGxvbmcgYWRkcmVzcywgaW50ICp0eXBlKTsKK2ludCBzaG1lbV9zZXRfcG9saWN5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgbWVtcG9saWN5ICpuZXcpOworc3RydWN0IG1lbXBvbGljeSAqc2htZW1fZ2V0X3BvbGljeShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCQkJdW5zaWduZWQgbG9uZyBhZGRyKTsKK2ludCBzaG1lbV9sb2NrKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbG9jaywgc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyKTsKKyNlbHNlCisjZGVmaW5lIHNobWVtX25vcGFnZSBmaWxlbWFwX25vcGFnZQorI2RlZmluZSBzaG1lbV9sb2NrKGEsIGIsIGMpIAkoezA7fSkJLyogYWx3YXlzIGluIG1lbW9yeSwgbm8gbmVlZCB0byBsb2NrICovCisjZGVmaW5lIHNobWVtX3NldF9wb2xpY3koYSwgYikJKDApCisjZGVmaW5lIHNobWVtX2dldF9wb2xpY3koYSwgYikJKE5VTEwpCisjZW5kaWYKK3N0cnVjdCBmaWxlICpzaG1lbV9maWxlX3NldHVwKGNoYXIgKm5hbWUsIGxvZmZfdCBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKKworaW50IHNobWVtX3plcm9fc2V0dXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICopOworCitzdGF0aWMgaW5saW5lIGludCBjYW5fZG9fbWxvY2sodm9pZCkKK3sKKwlpZiAoY2FwYWJsZShDQVBfSVBDX0xPQ0spKQorCQlyZXR1cm4gMTsKKwlpZiAoY3VycmVudC0+c2lnbmFsLT5ybGltW1JMSU1JVF9NRU1MT0NLXS5ybGltX2N1ciAhPSAwKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KK2V4dGVybiBpbnQgdXNlcl9zaG1fbG9jayhzaXplX3QsIHN0cnVjdCB1c2VyX3N0cnVjdCAqKTsKK2V4dGVybiB2b2lkIHVzZXJfc2htX3VubG9jayhzaXplX3QsIHN0cnVjdCB1c2VyX3N0cnVjdCAqKTsKKworLyoKKyAqIFBhcmFtZXRlciBibG9jayBwYXNzZWQgZG93biB0byB6YXBfcHRlX3JhbmdlIGluIGV4Y2VwdGlvbmFsIGNhc2VzLgorICovCitzdHJ1Y3QgemFwX2RldGFpbHMgeworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqbm9ubGluZWFyX3ZtYTsJLyogQ2hlY2sgcGFnZS0+aW5kZXggaWYgc2V0ICovCisJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmNoZWNrX21hcHBpbmc7CS8qIENoZWNrIHBhZ2UtPm1hcHBpbmcgaWYgc2V0ICovCisJcGdvZmZfdAlmaXJzdF9pbmRleDsJCQkvKiBMb3dlc3QgcGFnZS0+aW5kZXggdG8gdW5tYXAgKi8KKwlwZ29mZl90IGxhc3RfaW5kZXg7CQkJLyogSGlnaGVzdCBwYWdlLT5pbmRleCB0byB1bm1hcCAqLworCXNwaW5sb2NrX3QgKmlfbW1hcF9sb2NrOwkJLyogRm9yIHVubWFwX21hcHBpbmdfcmFuZ2U6ICovCisJdW5zaWduZWQgbG9uZyBicmVha19hZGRyOwkJLyogV2hlcmUgdW5tYXBfdm1hcyBzdG9wcGVkICovCisJdW5zaWduZWQgbG9uZyB0cnVuY2F0ZV9jb3VudDsJCS8qIENvbXBhcmUgdm1fdHJ1bmNhdGVfY291bnQgKi8KK307CisKK3ZvaWQgemFwX3BhZ2VfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKKwkJdW5zaWduZWQgbG9uZyBzaXplLCBzdHJ1Y3QgemFwX2RldGFpbHMgKik7CitpbnQgdW5tYXBfdm1hcyhzdHJ1Y3QgbW11X2dhdGhlciAqKnRsYnAsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnN0YXJ0X3ZtYSwgdW5zaWduZWQgbG9uZyBzdGFydF9hZGRyLAorCQl1bnNpZ25lZCBsb25nIGVuZF9hZGRyLCB1bnNpZ25lZCBsb25nICpucl9hY2NvdW50ZWQsCisJCXN0cnVjdCB6YXBfZGV0YWlscyAqKTsKK3ZvaWQgY2xlYXJfcGFnZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kKTsKK2ludCBjb3B5X3BhZ2VfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqZHN0LCBzdHJ1Y3QgbW1fc3RydWN0ICpzcmMsCisJCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7CitpbnQgemVyb21hcF9wYWdlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGZyb20sCisJCQl1bnNpZ25lZCBsb25nIHNpemUsIHBncHJvdF90IHByb3QpOwordm9pZCB1bm1hcF9tYXBwaW5nX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAorCQlsb2ZmX3QgY29uc3QgaG9sZWJlZ2luLCBsb2ZmX3QgY29uc3QgaG9sZWxlbiwgaW50IGV2ZW5fY293cyk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1bm1hcF9zaGFyZWRfbWFwcGluZ19yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKKwkJbG9mZl90IGNvbnN0IGhvbGViZWdpbiwgbG9mZl90IGNvbnN0IGhvbGVsZW4pCit7CisJdW5tYXBfbWFwcGluZ19yYW5nZShtYXBwaW5nLCBob2xlYmVnaW4sIGhvbGVsZW4sIDApOworfQorCitleHRlcm4gaW50IHZtdHJ1bmNhdGUoc3RydWN0IGlub2RlICogaW5vZGUsIGxvZmZfdCBvZmZzZXQpOworZXh0ZXJuIHB1ZF90ICpGQVNUQ0FMTChfX3B1ZF9hbGxvYyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKSk7CitleHRlcm4gcG1kX3QgKkZBU1RDQUxMKF9fcG1kX2FsbG9jKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpKTsKK2V4dGVybiBwdGVfdCAqRkFTVENBTEwocHRlX2FsbG9jX2tlcm5lbChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKSk7CitleHRlcm4gcHRlX3QgKkZBU1RDQUxMKHB0ZV9hbGxvY19tYXAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykpOworZXh0ZXJuIGludCBpbnN0YWxsX3BhZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBwYWdlICpwYWdlLCBwZ3Byb3RfdCBwcm90KTsKK2V4dGVybiBpbnQgaW5zdGFsbF9maWxlX3B0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBwZ29mZiwgcGdwcm90X3QgcHJvdCk7CitleHRlcm4gaW50IGhhbmRsZV9tbV9mYXVsdChzdHJ1Y3QgbW1fc3RydWN0ICptbSxzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBpbnQgd3JpdGVfYWNjZXNzKTsKK2V4dGVybiBpbnQgbWFrZV9wYWdlc19wcmVzZW50KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQpOworZXh0ZXJuIGludCBhY2Nlc3NfcHJvY2Vzc192bShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpidWYsIGludCBsZW4sIGludCB3cml0ZSk7Cit2b2lkIGluc3RhbGxfYXJnX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHN0cnVjdCBwYWdlICosIHVuc2lnbmVkIGxvbmcpOworCitpbnQgZ2V0X3VzZXJfcGFnZXMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQlpbnQgbGVuLCBpbnQgd3JpdGUsIGludCBmb3JjZSwgc3RydWN0IHBhZ2UgKipwYWdlcywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqdm1hcyk7CisKK2ludCBfX3NldF9wYWdlX2RpcnR5X2J1ZmZlcnMoc3RydWN0IHBhZ2UgKnBhZ2UpOworaW50IF9fc2V0X3BhZ2VfZGlydHlfbm9idWZmZXJzKHN0cnVjdCBwYWdlICpwYWdlKTsKK2ludCByZWRpcnR5X3BhZ2VfZm9yX3dyaXRlcGFnZShzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYywKKwkJCQlzdHJ1Y3QgcGFnZSAqcGFnZSk7CitpbnQgRkFTVENBTEwoc2V0X3BhZ2VfZGlydHkoc3RydWN0IHBhZ2UgKnBhZ2UpKTsKK2ludCBzZXRfcGFnZV9kaXJ0eV9sb2NrKHN0cnVjdCBwYWdlICpwYWdlKTsKK2ludCBjbGVhcl9wYWdlX2RpcnR5X2Zvcl9pbyhzdHJ1Y3QgcGFnZSAqcGFnZSk7CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIGRvX21yZW1hcCh1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBvbGRfbGVuLCB1bnNpZ25lZCBsb25nIG5ld19sZW4sCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncywgdW5zaWduZWQgbG9uZyBuZXdfYWRkcik7CisKKy8qCisgKiBQcm90b3R5cGUgdG8gYWRkIGEgc2hyaW5rZXIgY2FsbGJhY2sgZm9yIGFnZWFibGUgY2FjaGVzLgorICogCisgKiBUaGVzZSBmdW5jdGlvbnMgYXJlIHBhc3NlZCBhIGNvdW50IGBucl90b19zY2FuJyBhbmQgYSBnZnBtYXNrLiAgVGhleSBzaG91bGQKKyAqIHNjYW4gYG5yX3RvX3NjYW4nIG9iamVjdHMsIGF0dGVtcHRpbmcgdG8gZnJlZSB0aGVtLgorICoKKyAqIFRoZSBjYWxsYmFjayBtdXN0IHRoZSBudW1iZXIgb2Ygb2JqZWN0cyB3aGljaCByZW1haW4gaW4gdGhlIGNhY2hlLgorICoKKyAqIFRoZSBjYWxsYmFjayB3aWxsIGJlIHBhc3NlcyBucl90b19zY2FuID09IDAgd2hlbiB0aGUgVk0gaXMgcXVlcnlpbmcgdGhlCisgKiBjYWNoZSBzaXplLCBzbyBhIGZhc3RwYXRoIGZvciB0aGF0IGNhc2UgaXMgYXBwcm9wcmlhdGUuCisgKi8KK3R5cGVkZWYgaW50ICgqc2hyaW5rZXJfdCkoaW50IG5yX3RvX3NjYW4sIHVuc2lnbmVkIGludCBnZnBfbWFzayk7CisKKy8qCisgKiBBZGQgYW4gYWdpbmcgY2FsbGJhY2suICBUaGUgaW50IGlzIHRoZSBudW1iZXIgb2YgJ3NlZWtzJyBpdCB0YWtlcworICogdG8gcmVjcmVhdGUgb25lIG9mIHRoZSBvYmplY3RzIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFnZS4KKyAqLworCisjZGVmaW5lIERFRkFVTFRfU0VFS1MgMgorc3RydWN0IHNocmlua2VyOworZXh0ZXJuIHN0cnVjdCBzaHJpbmtlciAqc2V0X3Nocmlua2VyKGludCwgc2hyaW5rZXJfdCk7CitleHRlcm4gdm9pZCByZW1vdmVfc2hyaW5rZXIoc3RydWN0IHNocmlua2VyICpzaHJpbmtlcik7CisKKy8qCisgKiBPbiBhIHR3by1sZXZlbCBvciB0aHJlZS1sZXZlbCBwYWdlIHRhYmxlLCB0aGlzIGVuZHMgdXAgYmVpbmcgdHJpdmlhbC4gVGh1cworICogdGhlIGlubGluaW5nIGFuZCB0aGUgc3ltbWV0cnkgYnJlYWsgd2l0aCBwdGVfYWxsb2NfbWFwKCkgdGhhdCBkb2VzIGFsbAorICogb2YgdGhpcyBvdXQtb2YtbGluZS4KKyAqLworLyoKKyAqIFRoZSBmb2xsb3dpbmcgaWZkZWYgbmVlZGVkIHRvIGdldCB0aGUgNGxldmVsLWZpeHVwLmggaGVhZGVyIHRvIHdvcmsuCisgKiBSZW1vdmUgaXQgd2hlbiA0bGV2ZWwtZml4dXAuaCBoYXMgYmVlbiByZW1vdmVkLgorICovCisjaWZkZWYgQ09ORklHX01NVQorI2lmbmRlZiBfX0FSQ0hfSEFTXzRMRVZFTF9IQUNLIAorc3RhdGljIGlubGluZSBwdWRfdCAqcHVkX2FsbG9jKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisJaWYgKHBnZF9ub25lKCpwZ2QpKQorCQlyZXR1cm4gX19wdWRfYWxsb2MobW0sIHBnZCwgYWRkcmVzcyk7CisJcmV0dXJuIHB1ZF9vZmZzZXQocGdkLCBhZGRyZXNzKTsKK30KKworc3RhdGljIGlubGluZSBwbWRfdCAqcG1kX2FsbG9jKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisJaWYgKHB1ZF9ub25lKCpwdWQpKQorCQlyZXR1cm4gX19wbWRfYWxsb2MobW0sIHB1ZCwgYWRkcmVzcyk7CisJcmV0dXJuIHBtZF9vZmZzZXQocHVkLCBhZGRyZXNzKTsKK30KKyNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19NTVUgKi8KKworZXh0ZXJuIHZvaWQgZnJlZV9hcmVhX2luaXQodW5zaWduZWQgbG9uZyAqIHpvbmVzX3NpemUpOworZXh0ZXJuIHZvaWQgZnJlZV9hcmVhX2luaXRfbm9kZShpbnQgbmlkLCBwZ19kYXRhX3QgKnBnZGF0LAorCXVuc2lnbmVkIGxvbmcgKiB6b25lc19zaXplLCB1bnNpZ25lZCBsb25nIHpvbmVfc3RhcnRfcGZuLCAKKwl1bnNpZ25lZCBsb25nICp6aG9sZXNfc2l6ZSk7CitleHRlcm4gdm9pZCBtZW1tYXBfaW5pdF96b25lKHVuc2lnbmVkIGxvbmcsIGludCwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CitleHRlcm4gdm9pZCBtZW1faW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIHNob3dfbWVtKHZvaWQpOworZXh0ZXJuIHZvaWQgc2lfbWVtaW5mbyhzdHJ1Y3Qgc3lzaW5mbyAqIHZhbCk7CitleHRlcm4gdm9pZCBzaV9tZW1pbmZvX25vZGUoc3RydWN0IHN5c2luZm8gKnZhbCwgaW50IG5pZCk7CisKKy8qIHByaW9fdHJlZS5jICovCit2b2lkIHZtYV9wcmlvX3RyZWVfYWRkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKm9sZCk7Cit2b2lkIHZtYV9wcmlvX3RyZWVfaW5zZXJ0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCBzdHJ1Y3QgcHJpb190cmVlX3Jvb3QgKik7Cit2b2lkIHZtYV9wcmlvX3RyZWVfcmVtb3ZlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCBzdHJ1Y3QgcHJpb190cmVlX3Jvb3QgKik7CitzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9wcmlvX3RyZWVfbmV4dChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwlzdHJ1Y3QgcHJpb190cmVlX2l0ZXIgKml0ZXIpOworCisjZGVmaW5lIHZtYV9wcmlvX3RyZWVfZm9yZWFjaCh2bWEsIGl0ZXIsIHJvb3QsIGJlZ2luLCBlbmQpCVwKKwlmb3IgKHByaW9fdHJlZV9pdGVyX2luaXQoaXRlciwgcm9vdCwgYmVnaW4sIGVuZCksIHZtYSA9IE5VTEw7CVwKKwkJKHZtYSA9IHZtYV9wcmlvX3RyZWVfbmV4dCh2bWEsIGl0ZXIpKTsgKQorCitzdGF0aWMgaW5saW5lIHZvaWQgdm1hX25vbmxpbmVhcl9pbnNlcnQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQkJCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCit7CisJdm1hLT5zaGFyZWQudm1fc2V0LnBhcmVudCA9IE5VTEw7CisJbGlzdF9hZGRfdGFpbCgmdm1hLT5zaGFyZWQudm1fc2V0Lmxpc3QsIGxpc3QpOworfQorCisvKiBtbWFwLmMgKi8KK2V4dGVybiBpbnQgX192bV9lbm91Z2hfbWVtb3J5KGxvbmcgcGFnZXMsIGludCBjYXBfc3lzX2FkbWluKTsKK2V4dGVybiB2b2lkIHZtYV9hZGp1c3Qoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsCisJdW5zaWduZWQgbG9uZyBlbmQsIHBnb2ZmX3QgcGdvZmYsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqaW5zZXJ0KTsKK2V4dGVybiBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9tZXJnZShzdHJ1Y3QgbW1fc3RydWN0ICosCisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICpwcmV2LCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAorCXVuc2lnbmVkIGxvbmcgdm1fZmxhZ3MsIHN0cnVjdCBhbm9uX3ZtYSAqLCBzdHJ1Y3QgZmlsZSAqLCBwZ29mZl90LAorCXN0cnVjdCBtZW1wb2xpY3kgKik7CitleHRlcm4gc3RydWN0IGFub25fdm1hICpmaW5kX21lcmdlYWJsZV9hbm9uX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7CitleHRlcm4gaW50IHNwbGl0X3ZtYShzdHJ1Y3QgbW1fc3RydWN0ICosCisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG5ld19iZWxvdyk7CitleHRlcm4gaW50IGluc2VydF92bV9zdHJ1Y3Qoc3RydWN0IG1tX3N0cnVjdCAqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7CitleHRlcm4gdm9pZCBfX3ZtYV9saW5rX3JiKHN0cnVjdCBtbV9zdHJ1Y3QgKiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICosCisJc3RydWN0IHJiX25vZGUgKiosIHN0cnVjdCByYl9ub2RlICopOworZXh0ZXJuIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqY29weV92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqLAorCXVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sIHBnb2ZmX3QgcGdvZmYpOworZXh0ZXJuIHZvaWQgZXhpdF9tbWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKik7CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIGdldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOworCitleHRlcm4gdW5zaWduZWQgbG9uZyBkb19tbWFwX3Bnb2ZmKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsCisJdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcHJvdCwKKwl1bnNpZ25lZCBsb25nIGZsYWcsIHVuc2lnbmVkIGxvbmcgcGdvZmYpOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZG9fbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLAorCXVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHByb3QsCisJdW5zaWduZWQgbG9uZyBmbGFnLCB1bnNpZ25lZCBsb25nIG9mZnNldCkKK3sKKwl1bnNpZ25lZCBsb25nIHJldCA9IC1FSU5WQUw7CisJaWYgKChvZmZzZXQgKyBQQUdFX0FMSUdOKGxlbikpIDwgb2Zmc2V0KQorCQlnb3RvIG91dDsKKwlpZiAoIShvZmZzZXQgJiB+UEFHRV9NQVNLKSkKKwkJcmV0ID0gZG9fbW1hcF9wZ29mZihmaWxlLCBhZGRyLCBsZW4sIHByb3QsIGZsYWcsIG9mZnNldCA+PiBQQUdFX1NISUZUKTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitleHRlcm4gaW50IGRvX211bm1hcChzdHJ1Y3QgbW1fc3RydWN0ICosIHVuc2lnbmVkIGxvbmcsIHNpemVfdCk7CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIGRvX2Jyayh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKKworLyogZmlsZW1hcC5jICovCitleHRlcm4gdW5zaWduZWQgbG9uZyBwYWdlX3VudXNlKHN0cnVjdCBwYWdlICopOworZXh0ZXJuIHZvaWQgdHJ1bmNhdGVfaW5vZGVfcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKiwgbG9mZl90KTsKKworLyogZ2VuZXJpYyB2bV9hcmVhX29wcyBleHBvcnRlZCBmb3Igc3RhY2thYmxlIGZpbGUgc3lzdGVtcyAqLworZXh0ZXJuIHN0cnVjdCBwYWdlICpmaWxlbWFwX25vcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywgaW50ICopOworZXh0ZXJuIGludCBmaWxlbWFwX3BvcHVsYXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nLAorCQl1bnNpZ25lZCBsb25nLCBwZ3Byb3RfdCwgdW5zaWduZWQgbG9uZywgaW50KTsKKworLyogbW0vcGFnZS13cml0ZWJhY2suYyAqLworaW50IHdyaXRlX29uZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgd2FpdCk7CisKKy8qIHJlYWRhaGVhZC5jICovCisjZGVmaW5lIFZNX01BWF9SRUFEQUhFQUQJMTI4CS8qIGtieXRlcyAqLworI2RlZmluZSBWTV9NSU5fUkVBREFIRUFECTE2CS8qIGtieXRlcyAoaW5jbHVkZXMgY3VycmVudCBwYWdlKSAqLworI2RlZmluZSBWTV9NQVhfQ0FDSEVfSElUICAgIAkyNTYJLyogbWF4IHBhZ2VzIGluIGEgcm93IGluIGNhY2hlIGJlZm9yZQorCQkJCQkgKiB0dXJuaW5nIHJlYWRhaGVhZCBvZmYgKi8KKworaW50IGRvX3BhZ2VfY2FjaGVfcmVhZGFoZWFkKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJCXVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIG5yX3RvX3JlYWQpOworaW50IGZvcmNlX3BhZ2VfY2FjaGVfcmVhZGFoZWFkKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJCXVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIG5yX3RvX3JlYWQpOwordW5zaWduZWQgbG9uZyAgcGFnZV9jYWNoZV9yZWFkYWhlYWQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCisJCQkgIHN0cnVjdCBmaWxlX3JhX3N0YXRlICpyYSwKKwkJCSAgc3RydWN0IGZpbGUgKmZpbHAsCisJCQkgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorCQkJICB1bnNpZ25lZCBsb25nIHNpemUpOwordm9pZCBoYW5kbGVfcmFfbWlzcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgCisJCSAgICBzdHJ1Y3QgZmlsZV9yYV9zdGF0ZSAqcmEsIHBnb2ZmX3Qgb2Zmc2V0KTsKK3Vuc2lnbmVkIGxvbmcgbWF4X3NhbmVfcmVhZGFoZWFkKHVuc2lnbmVkIGxvbmcgbnIpOworCisvKiBEbyBzdGFjayBleHRlbnNpb24gKi8KK2V4dGVybiBpbnQgZXhwYW5kX3N0YWNrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIHZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKTsKKworLyogTG9vayB1cCB0aGUgZmlyc3QgVk1BIHdoaWNoIHNhdGlzZmllcyAgYWRkciA8IHZtX2VuZCwgIE5VTEwgaWYgbm9uZS4gKi8KK2V4dGVybiBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiBmaW5kX3ZtYShzdHJ1Y3QgbW1fc3RydWN0ICogbW0sIHVuc2lnbmVkIGxvbmcgYWRkcik7CitleHRlcm4gc3RydWN0IHZtX2FyZWFfc3RydWN0ICogZmluZF92bWFfcHJldihzdHJ1Y3QgbW1fc3RydWN0ICogbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCQkJICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKipwcHJldik7CisKKy8qIExvb2sgdXAgdGhlIGZpcnN0IFZNQSB3aGljaCBpbnRlcnNlY3RzIHRoZSBpbnRlcnZhbCBzdGFydF9hZGRyLi5lbmRfYWRkci0xLAorICAgTlVMTCBpZiBub25lLiAgQXNzdW1lIHN0YXJ0X2FkZHIgPCBlbmRfYWRkci4gKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHZtX2FyZWFfc3RydWN0ICogZmluZF92bWFfaW50ZXJzZWN0aW9uKHN0cnVjdCBtbV9zdHJ1Y3QgKiBtbSwgdW5zaWduZWQgbG9uZyBzdGFydF9hZGRyLCB1bnNpZ25lZCBsb25nIGVuZF9hZGRyKQoreworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIHZtYSA9IGZpbmRfdm1hKG1tLHN0YXJ0X2FkZHIpOworCisJaWYgKHZtYSAmJiBlbmRfYWRkciA8PSB2bWEtPnZtX3N0YXJ0KQorCQl2bWEgPSBOVUxMOworCXJldHVybiB2bWE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB2bWFfcGFnZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJcmV0dXJuICh2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQpID4+IFBBR0VfU0hJRlQ7Cit9CisKK2V4dGVybiBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmZpbmRfZXh0ZW5kX3ZtYShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKTsKKworZXh0ZXJuIHN0cnVjdCBwYWdlICogdm1hbGxvY190b19wYWdlKHZvaWQgKmFkZHIpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdm1hbGxvY190b19wZm4odm9pZCAqYWRkcik7CitleHRlcm4gc3RydWN0IHBhZ2UgKiBmb2xsb3dfcGFnZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAorCQlpbnQgd3JpdGUpOworZXh0ZXJuIGludCBjaGVja191c2VyX3BhZ2VfcmVhZGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7CitpbnQgcmVtYXBfcGZuX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nLAorCQl1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBwZ3Byb3RfdCk7CisKKyNpZmRlZiBDT05GSUdfUFJPQ19GUwordm9pZCBfX3ZtX3N0YXRfYWNjb3VudChzdHJ1Y3QgbW1fc3RydWN0ICosIHVuc2lnbmVkIGxvbmcsIHN0cnVjdCBmaWxlICosIGxvbmcpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3ZtX3N0YXRfYWNjb3VudChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHN0cnVjdCBmaWxlICpmaWxlLCBsb25nIHBhZ2VzKQoreworfQorI2VuZGlmIC8qIENPTkZJR19QUk9DX0ZTICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCB2bV9zdGF0X2FjY291bnQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJX192bV9zdGF0X2FjY291bnQodm1hLT52bV9tbSwgdm1hLT52bV9mbGFncywgdm1hLT52bV9maWxlLAorCQkJCQkJCXZtYV9wYWdlcyh2bWEpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHZtX3N0YXRfdW5hY2NvdW50KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCV9fdm1fc3RhdF9hY2NvdW50KHZtYS0+dm1fbW0sIHZtYS0+dm1fZmxhZ3MsIHZtYS0+dm1fZmlsZSwKKwkJCQkJCQktdm1hX3BhZ2VzKHZtYSkpOworfQorCisvKiB1cGRhdGUgcGVyIHByb2Nlc3MgcnNzIGFuZCB2bSBoaXdhdGVyIGRhdGEgKi8KK2V4dGVybiB2b2lkIHVwZGF0ZV9tZW1faGl3YXRlcihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7CisKKyNpZm5kZWYgQ09ORklHX0RFQlVHX1BBR0VBTExPQworc3RhdGljIGlubGluZSB2b2lkCitrZXJuZWxfbWFwX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbnVtcGFnZXMsIGludCBlbmFibGUpCit7Cit9CisjZW5kaWYKKworZXh0ZXJuIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZ2V0X2dhdGVfdm1hKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKKyNpZmRlZglfX0hBVkVfQVJDSF9HQVRFX0FSRUEKK2ludCBpbl9nYXRlX2FyZWFfbm9fdGFzayh1bnNpZ25lZCBsb25nIGFkZHIpOworaW50IGluX2dhdGVfYXJlYShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHVuc2lnbmVkIGxvbmcgYWRkcik7CisjZWxzZQoraW50IGluX2dhdGVfYXJlYV9ub190YXNrKHVuc2lnbmVkIGxvbmcgYWRkcik7CisjZGVmaW5lIGluX2dhdGVfYXJlYSh0YXNrLCBhZGRyKSAoeyh2b2lkKXRhc2s7IGluX2dhdGVfYXJlYV9ub190YXNrKGFkZHIpO30pCisjZW5kaWYJLyogX19IQVZFX0FSQ0hfR0FURV9BUkVBICovCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYgLyogX0xJTlVYX01NX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmggYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3NzYyY2EKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oCkBAIC0wLDAgKzEsNDAgQEAKKworc3RhdGljIGlubGluZSB2b2lkCithZGRfcGFnZV90b19hY3RpdmVfbGlzdChzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJbGlzdF9hZGQoJnBhZ2UtPmxydSwgJnpvbmUtPmFjdGl2ZV9saXN0KTsKKwl6b25lLT5ucl9hY3RpdmUrKzsKK30KKworc3RhdGljIGlubGluZSB2b2lkCithZGRfcGFnZV90b19pbmFjdGl2ZV9saXN0KHN0cnVjdCB6b25lICp6b25lLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlsaXN0X2FkZCgmcGFnZS0+bHJ1LCAmem9uZS0+aW5hY3RpdmVfbGlzdCk7CisJem9uZS0+bnJfaW5hY3RpdmUrKzsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitkZWxfcGFnZV9mcm9tX2FjdGl2ZV9saXN0KHN0cnVjdCB6b25lICp6b25lLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlsaXN0X2RlbCgmcGFnZS0+bHJ1KTsKKwl6b25lLT5ucl9hY3RpdmUtLTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitkZWxfcGFnZV9mcm9tX2luYWN0aXZlX2xpc3Qoc3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBwYWdlICpwYWdlKQoreworCWxpc3RfZGVsKCZwYWdlLT5scnUpOworCXpvbmUtPm5yX2luYWN0aXZlLS07Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZGVsX3BhZ2VfZnJvbV9scnUoc3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBwYWdlICpwYWdlKQoreworCWxpc3RfZGVsKCZwYWdlLT5scnUpOworCWlmIChQYWdlQWN0aXZlKHBhZ2UpKSB7CisJCUNsZWFyUGFnZUFjdGl2ZShwYWdlKTsKKwkJem9uZS0+bnJfYWN0aXZlLS07CisJfSBlbHNlIHsKKwkJem9uZS0+bnJfaW5hY3RpdmUtLTsKKwl9Cit9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tYW4uaCBiL2luY2x1ZGUvbGludXgvbW1hbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4YTU2ODkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L21tYW4uaApAQCAtMCwwICsxLDY3IEBACisjaWZuZGVmIF9MSU5VWF9NTUFOX0gKKyNkZWZpbmUgX0xJTlVYX01NQU5fSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKworI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlIDxhc20vbW1hbi5oPgorCisjZGVmaW5lIE1SRU1BUF9NQVlNT1ZFCTEKKyNkZWZpbmUgTVJFTUFQX0ZJWEVECTIKKworI2RlZmluZSBPVkVSQ09NTUlUX0dVRVNTCQkwCisjZGVmaW5lIE9WRVJDT01NSVRfQUxXQVlTCQkxCisjZGVmaW5lIE9WRVJDT01NSVRfTkVWRVIJCTIKK2V4dGVybiBpbnQgc3lzY3RsX292ZXJjb21taXRfbWVtb3J5OworZXh0ZXJuIGludCBzeXNjdGxfb3ZlcmNvbW1pdF9yYXRpbzsKK2V4dGVybiBhdG9taWNfdCB2bV9jb21taXR0ZWRfc3BhY2U7CisKKyNpZmRlZiBDT05GSUdfU01QCitleHRlcm4gdm9pZCB2bV9hY2N0X21lbW9yeShsb25nIHBhZ2VzKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgdm1fYWNjdF9tZW1vcnkobG9uZyBwYWdlcykKK3sKKwlhdG9taWNfYWRkKHBhZ2VzLCAmdm1fY29tbWl0dGVkX3NwYWNlKTsKK30KKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHZvaWQgdm1fdW5hY2N0X21lbW9yeShsb25nIHBhZ2VzKQoreworCXZtX2FjY3RfbWVtb3J5KC1wYWdlcyk7Cit9CisKKy8qCisgKiBPcHRpbWlzYXRpb24gbWFjcm8uICBJdCBpcyBlcXVpdmFsZW50IHRvOgorICogICAgICAoeCAmIGJpdDEpID8gYml0MiA6IDAKKyAqIGJ1dCB0aGlzIHZlcnNpb24gaXMgZmFzdGVyLgorICogKCJiaXQxIiBhbmQgImJpdDIiIG11c3QgYmUgc2luZ2xlIGJpdHMpCisgKi8KKyNkZWZpbmUgX2NhbGNfdm1fdHJhbnMoeCwgYml0MSwgYml0MikgXAorICAoKGJpdDEpIDw9IChiaXQyKSA/ICgoeCkgJiAoYml0MSkpICogKChiaXQyKSAvIChiaXQxKSkgXAorICAgOiAoKHgpICYgKGJpdDEpKSAvICgoYml0MSkgLyAoYml0MikpKQorCisvKgorICogQ29tYmluZSB0aGUgbW1hcCAicHJvdCIgYXJndW1lbnQgaW50byAidm1fZmxhZ3MiIHVzZWQgaW50ZXJuYWxseS4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCitjYWxjX3ZtX3Byb3RfYml0cyh1bnNpZ25lZCBsb25nIHByb3QpCit7CisJcmV0dXJuIF9jYWxjX3ZtX3RyYW5zKHByb3QsIFBST1RfUkVBRCwgIFZNX1JFQUQgKSB8CisJICAgICAgIF9jYWxjX3ZtX3RyYW5zKHByb3QsIFBST1RfV1JJVEUsIFZNX1dSSVRFKSB8CisJICAgICAgIF9jYWxjX3ZtX3RyYW5zKHByb3QsIFBST1RfRVhFQywgIFZNX0VYRUMgKTsKK30KKworLyoKKyAqIENvbWJpbmUgdGhlIG1tYXAgImZsYWdzIiBhcmd1bWVudCBpbnRvICJ2bV9mbGFncyIgdXNlZCBpbnRlcm5hbGx5LgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK2NhbGNfdm1fZmxhZ19iaXRzKHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJcmV0dXJuIF9jYWxjX3ZtX3RyYW5zKGZsYWdzLCBNQVBfR1JPV1NET1dOLCAgVk1fR1JPV1NET1dOICkgfAorCSAgICAgICBfY2FsY192bV90cmFucyhmbGFncywgTUFQX0RFTllXUklURSwgIFZNX0RFTllXUklURSApIHwKKwkgICAgICAgX2NhbGNfdm1fdHJhbnMoZmxhZ3MsIE1BUF9FWEVDVVRBQkxFLCBWTV9FWEVDVVRBQkxFKSB8CisJICAgICAgIF9jYWxjX3ZtX3RyYW5zKGZsYWdzLCBNQVBfTE9DS0VELCAgICAgVk1fTE9DS0VEICAgICk7Cit9CisKKyNlbmRpZiAvKiBfTElOVVhfTU1BTl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tYy9jYXJkLmggYi9pbmNsdWRlL2xpbnV4L21tYy9jYXJkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVmZWRmMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbW1jL2NhcmQuaApAQCAtMCwwICsxLDkyIEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvbGludXgvbW1jL2NhcmQuaAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIENhcmQgZHJpdmVyIHNwZWNpZmljIGRlZmluaXRpb25zLgorICovCisjaWZuZGVmIExJTlVYX01NQ19DQVJEX0gKKyNkZWZpbmUgTElOVVhfTU1DX0NBUkRfSAorCisjaW5jbHVkZSA8bGludXgvbW1jL21tYy5oPgorCitzdHJ1Y3QgbW1jX2NpZCB7CisJdW5zaWduZWQgaW50CQltYW5maWQ7CisJY2hhcgkJCXByb2RfbmFtZVs4XTsKKwl1bnNpZ25lZCBpbnQJCXNlcmlhbDsKKwl1bnNpZ25lZCBzaG9ydAkJb2VtaWQ7CisJdW5zaWduZWQgc2hvcnQJCXllYXI7CisJdW5zaWduZWQgY2hhcgkJaHdyZXY7CisJdW5zaWduZWQgY2hhcgkJZndyZXY7CisJdW5zaWduZWQgY2hhcgkJbW9udGg7Cit9OworCitzdHJ1Y3QgbW1jX2NzZCB7CisJdW5zaWduZWQgY2hhcgkJbW1jYV92c247CisJdW5zaWduZWQgc2hvcnQJCWNtZGNsYXNzOworCXVuc2lnbmVkIHNob3J0CQl0YWNjX2Nsa3M7CisJdW5zaWduZWQgaW50CQl0YWNjX25zOworCXVuc2lnbmVkIGludAkJbWF4X2R0cjsKKwl1bnNpZ25lZCBpbnQJCXJlYWRfYmxrYml0czsKKwl1bnNpZ25lZCBpbnQJCWNhcGFjaXR5OworfTsKKworc3RydWN0IG1tY19ob3N0OworCisvKgorICogTU1DIGRldmljZQorICovCitzdHJ1Y3QgbW1jX2NhcmQgeworCXN0cnVjdCBsaXN0X2hlYWQJbm9kZTsJCS8qIG5vZGUgaW4gaG9zdHMgZGV2aWNlcyBsaXN0ICovCisJc3RydWN0IG1tY19ob3N0CQkqaG9zdDsJCS8qIHRoZSBob3N0IHRoaXMgZGV2aWNlIGJlbG9uZ3MgdG8gKi8KKwlzdHJ1Y3QgZGV2aWNlCQlkZXY7CQkvKiB0aGUgZGV2aWNlICovCisJdW5zaWduZWQgaW50CQlyY2E7CQkvKiByZWxhdGl2ZSBjYXJkIGFkZHJlc3Mgb2YgZGV2aWNlICovCisJdW5zaWduZWQgaW50CQlzdGF0ZTsJCS8qIChvdXIpIGNhcmQgc3RhdGUgKi8KKyNkZWZpbmUgTU1DX1NUQVRFX1BSRVNFTlQJKDE8PDApCQkvKiBwcmVzZW50IGluIHN5c2ZzICovCisjZGVmaW5lIE1NQ19TVEFURV9ERUFECQkoMTw8MSkJCS8qIGRldmljZSBubyBsb25nZXIgaW4gc3RhY2sgKi8KKyNkZWZpbmUgTU1DX1NUQVRFX0JBRAkJKDE8PDIpCQkvKiB1bnJlY29nbmlzZWQgZGV2aWNlICovCisJdTMyCQkJcmF3X2NpZFs0XTsJLyogcmF3IGNhcmQgQ0lEICovCisJdTMyCQkJcmF3X2NzZFs0XTsJLyogcmF3IGNhcmQgQ1NEICovCisJc3RydWN0IG1tY19jaWQJCWNpZDsJCS8qIGNhcmQgaWRlbnRpZmljYXRpb24gKi8KKwlzdHJ1Y3QgbW1jX2NzZAkJY3NkOwkJLyogY2FyZCBzcGVjaWZpYyAqLworfTsKKworI2RlZmluZSBtbWNfY2FyZF9wcmVzZW50KGMpCSgoYyktPnN0YXRlICYgTU1DX1NUQVRFX1BSRVNFTlQpCisjZGVmaW5lIG1tY19jYXJkX2RlYWQoYykJKChjKS0+c3RhdGUgJiBNTUNfU1RBVEVfREVBRCkKKyNkZWZpbmUgbW1jX2NhcmRfYmFkKGMpCQkoKGMpLT5zdGF0ZSAmIE1NQ19TVEFURV9CQUQpCisKKyNkZWZpbmUgbW1jX2NhcmRfc2V0X3ByZXNlbnQoYykJKChjKS0+c3RhdGUgfD0gTU1DX1NUQVRFX1BSRVNFTlQpCisjZGVmaW5lIG1tY19jYXJkX3NldF9kZWFkKGMpCSgoYyktPnN0YXRlIHw9IE1NQ19TVEFURV9ERUFEKQorI2RlZmluZSBtbWNfY2FyZF9zZXRfYmFkKGMpCSgoYyktPnN0YXRlIHw9IE1NQ19TVEFURV9CQUQpCisKKyNkZWZpbmUgbW1jX2NhcmRfbmFtZShjKQkoKGMpLT5jaWQucHJvZF9uYW1lKQorI2RlZmluZSBtbWNfY2FyZF9pZChjKQkJKChjKS0+ZGV2LmJ1c19pZCkKKworI2RlZmluZSBtbWNfbGlzdF90b19jYXJkKGwpCWNvbnRhaW5lcl9vZihsLCBzdHJ1Y3QgbW1jX2NhcmQsIG5vZGUpCisjZGVmaW5lIG1tY19nZXRfZHJ2ZGF0YShjKQlkZXZfZ2V0X2RydmRhdGEoJihjKS0+ZGV2KQorI2RlZmluZSBtbWNfc2V0X2RydmRhdGEoYyxkKQlkZXZfc2V0X2RydmRhdGEoJihjKS0+ZGV2LCBkKQorCisvKgorICogTU1DIGRldmljZSBkcml2ZXIgKGUuZy4sIEZsYXNoIGNhcmQsIEkvTyBjYXJkLi4uKQorICovCitzdHJ1Y3QgbW1jX2RyaXZlciB7CisJc3RydWN0IGRldmljZV9kcml2ZXIgZHJ2OworCWludCAoKnByb2JlKShzdHJ1Y3QgbW1jX2NhcmQgKik7CisJdm9pZCAoKnJlbW92ZSkoc3RydWN0IG1tY19jYXJkICopOworCWludCAoKnN1c3BlbmQpKHN0cnVjdCBtbWNfY2FyZCAqLCBwbV9tZXNzYWdlX3QpOworCWludCAoKnJlc3VtZSkoc3RydWN0IG1tY19jYXJkICopOworfTsKKworZXh0ZXJuIGludCBtbWNfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBtbWNfZHJpdmVyICopOworZXh0ZXJuIHZvaWQgbW1jX3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBtbWNfZHJpdmVyICopOworCitzdGF0aWMgaW5saW5lIGludCBtbWNfY2FyZF9jbGFpbV9ob3N0KHN0cnVjdCBtbWNfY2FyZCAqY2FyZCkKK3sKKwlyZXR1cm4gX19tbWNfY2xhaW1faG9zdChjYXJkLT5ob3N0LCBjYXJkKTsKK30KKworI2RlZmluZSBtbWNfY2FyZF9yZWxlYXNlX2hvc3QoYykJbW1jX3JlbGVhc2VfaG9zdCgoYyktPmhvc3QpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbWMvaG9zdC5oIGIvaW5jbHVkZS9saW51eC9tbWMvaG9zdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2NzY4NmMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L21tYy9ob3N0LmgKQEAgLTAsMCArMSwxMDggQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9saW51eC9tbWMvaG9zdC5oCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgSG9zdCBkcml2ZXIgc3BlY2lmaWMgZGVmaW5pdGlvbnMuCisgKi8KKyNpZm5kZWYgTElOVVhfTU1DX0hPU1RfSAorI2RlZmluZSBMSU5VWF9NTUNfSE9TVF9ICisKKyNpbmNsdWRlIDxsaW51eC9tbWMvbW1jLmg+CisKK3N0cnVjdCBtbWNfaW9zIHsKKwl1bnNpZ25lZCBpbnQJY2xvY2s7CQkJLyogY2xvY2sgcmF0ZSAqLworCXVuc2lnbmVkIHNob3J0CXZkZDsKKworI2RlZmluZQlNTUNfVkREXzE1MAkwCisjZGVmaW5lCU1NQ19WRERfMTU1CTEKKyNkZWZpbmUJTU1DX1ZERF8xNjAJMgorI2RlZmluZQlNTUNfVkREXzE2NQkzCisjZGVmaW5lCU1NQ19WRERfMTcwCTQKKyNkZWZpbmUJTU1DX1ZERF8xODAJNQorI2RlZmluZQlNTUNfVkREXzE5MAk2CisjZGVmaW5lCU1NQ19WRERfMjAwCTcKKyNkZWZpbmUJTU1DX1ZERF8yMTAJOAorI2RlZmluZQlNTUNfVkREXzIyMAk5CisjZGVmaW5lCU1NQ19WRERfMjMwCTEwCisjZGVmaW5lCU1NQ19WRERfMjQwCTExCisjZGVmaW5lCU1NQ19WRERfMjUwCTEyCisjZGVmaW5lCU1NQ19WRERfMjYwCTEzCisjZGVmaW5lCU1NQ19WRERfMjcwCTE0CisjZGVmaW5lCU1NQ19WRERfMjgwCTE1CisjZGVmaW5lCU1NQ19WRERfMjkwCTE2CisjZGVmaW5lCU1NQ19WRERfMzAwCTE3CisjZGVmaW5lCU1NQ19WRERfMzEwCTE4CisjZGVmaW5lCU1NQ19WRERfMzIwCTE5CisjZGVmaW5lCU1NQ19WRERfMzMwCTIwCisjZGVmaW5lCU1NQ19WRERfMzQwCTIxCisjZGVmaW5lCU1NQ19WRERfMzUwCTIyCisjZGVmaW5lCU1NQ19WRERfMzYwCTIzCisKKwl1bnNpZ25lZCBjaGFyCWJ1c19tb2RlOwkJLyogY29tbWFuZCBvdXRwdXQgbW9kZSAqLworCisjZGVmaW5lIE1NQ19CVVNNT0RFX09QRU5EUkFJTgkxCisjZGVmaW5lIE1NQ19CVVNNT0RFX1BVU0hQVUxMCTIKKworCXVuc2lnbmVkIGNoYXIJcG93ZXJfbW9kZTsJCS8qIHBvd2VyIHN1cHBseSBtb2RlICovCisKKyNkZWZpbmUgTU1DX1BPV0VSX09GRgkJMAorI2RlZmluZSBNTUNfUE9XRVJfVVAJCTEKKyNkZWZpbmUgTU1DX1BPV0VSX09OCQkyCit9OworCitzdHJ1Y3QgbW1jX2hvc3Rfb3BzIHsKKwl2b2lkCSgqcmVxdWVzdCkoc3RydWN0IG1tY19ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX3JlcXVlc3QgKnJlcSk7CisJdm9pZAkoKnNldF9pb3MpKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19pb3MgKmlvcyk7Cit9OworCitzdHJ1Y3QgbW1jX2NhcmQ7CitzdHJ1Y3QgZGV2aWNlOworCitzdHJ1Y3QgbW1jX2hvc3QgeworCXN0cnVjdCBkZXZpY2UJCSpkZXY7CisJc3RydWN0IG1tY19ob3N0X29wcwkqb3BzOworCXVuc2lnbmVkIGludAkJZl9taW47CisJdW5zaWduZWQgaW50CQlmX21heDsKKwl1MzIJCQlvY3JfYXZhaWw7CisJY2hhcgkJCWhvc3RfbmFtZVs4XTsKKworCS8qIGhvc3Qgc3BlY2lmaWMgYmxvY2sgZGF0YSAqLworCXVuc2lnbmVkIGludAkJbWF4X3NlZ19zaXplOwkvKiBzZWUgYmxrX3F1ZXVlX21heF9zZWdtZW50X3NpemUgKi8KKwl1bnNpZ25lZCBzaG9ydAkJbWF4X2h3X3NlZ3M7CS8qIHNlZSBibGtfcXVldWVfbWF4X2h3X3NlZ21lbnRzICovCisJdW5zaWduZWQgc2hvcnQJCW1heF9waHlzX3NlZ3M7CS8qIHNlZSBibGtfcXVldWVfbWF4X3BoeXNfc2VnbWVudHMgKi8KKwl1bnNpZ25lZCBzaG9ydAkJbWF4X3NlY3RvcnM7CS8qIHNlZSBibGtfcXVldWVfbWF4X3NlY3RvcnMgKi8KKwl1bnNpZ25lZCBzaG9ydAkJdW51c2VkOworCisJLyogcHJpdmF0ZSBkYXRhICovCisJc3RydWN0IG1tY19pb3MJCWlvczsJCS8qIGN1cnJlbnQgaW8gYnVzIHNldHRpbmdzICovCisJdTMyCQkJb2NyOwkJLyogdGhlIGN1cnJlbnQgT0NSIHNldHRpbmcgKi8KKworCXN0cnVjdCBsaXN0X2hlYWQJY2FyZHM7CQkvKiBkZXZpY2VzIGF0dGFjaGVkIHRvIHRoaXMgaG9zdCAqLworCisJd2FpdF9xdWV1ZV9oZWFkX3QJd3E7CisJc3BpbmxvY2tfdAkJbG9jazsJCS8qIGNhcmRfYnVzeSBsb2NrICovCisJc3RydWN0IG1tY19jYXJkCQkqY2FyZF9idXN5OwkvKiB0aGUgTU1DIGNhcmQgY2xhaW1pbmcgaG9zdCAqLworCXN0cnVjdCBtbWNfY2FyZAkJKmNhcmRfc2VsZWN0ZWQ7CS8qIHRoZSBzZWxlY3RlZCBNTUMgY2FyZCAqLworCisJc3RydWN0IHdvcmtfc3RydWN0CWRldGVjdDsKK307CisKK2V4dGVybiBzdHJ1Y3QgbW1jX2hvc3QgKm1tY19hbGxvY19ob3N0KGludCBleHRyYSwgc3RydWN0IGRldmljZSAqKTsKK2V4dGVybiBpbnQgbW1jX2FkZF9ob3N0KHN0cnVjdCBtbWNfaG9zdCAqKTsKK2V4dGVybiB2b2lkIG1tY19yZW1vdmVfaG9zdChzdHJ1Y3QgbW1jX2hvc3QgKik7CitleHRlcm4gdm9pZCBtbWNfZnJlZV9ob3N0KHN0cnVjdCBtbWNfaG9zdCAqKTsKKworI2RlZmluZSBtbWNfcHJpdih4KQkoKHZvaWQgKikoKHgpICsgMSkpCisjZGVmaW5lIG1tY19kZXYoeCkJKCh4KS0+ZGV2KQorCitleHRlcm4gaW50IG1tY19zdXNwZW5kX2hvc3Qoc3RydWN0IG1tY19ob3N0ICosIHUzMik7CitleHRlcm4gaW50IG1tY19yZXN1bWVfaG9zdChzdHJ1Y3QgbW1jX2hvc3QgKik7CisKK2V4dGVybiB2b2lkIG1tY19kZXRlY3RfY2hhbmdlKHN0cnVjdCBtbWNfaG9zdCAqKTsKK2V4dGVybiB2b2lkIG1tY19yZXF1ZXN0X2RvbmUoc3RydWN0IG1tY19ob3N0ICosIHN0cnVjdCBtbWNfcmVxdWVzdCAqKTsKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1jL21tYy5oIGIvaW5jbHVkZS9saW51eC9tbWMvbW1jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQzNWQ0ZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbW1jL21tYy5oCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvbGludXgvbW1jL21tYy5oCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2lmbmRlZiBNTUNfSAorI2RlZmluZSBNTUNfSAorCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorCitzdHJ1Y3QgcmVxdWVzdDsKK3N0cnVjdCBtbWNfZGF0YTsKK3N0cnVjdCBtbWNfcmVxdWVzdDsKKworc3RydWN0IG1tY19jb21tYW5kIHsKKwl1MzIJCQlvcGNvZGU7CisJdTMyCQkJYXJnOworCXUzMgkJCXJlc3BbNF07CisJdW5zaWduZWQgaW50CQlmbGFnczsJCS8qIGV4cGVjdGVkIHJlc3BvbnNlIHR5cGUgKi8KKyNkZWZpbmUgTU1DX1JTUF9OT05FCSgwIDw8IDApCisjZGVmaW5lIE1NQ19SU1BfU0hPUlQJKDEgPDwgMCkKKyNkZWZpbmUgTU1DX1JTUF9MT05HCSgyIDw8IDApCisjZGVmaW5lIE1NQ19SU1BfTUFTSwkoMyA8PCAwKQorI2RlZmluZSBNTUNfUlNQX0NSQwkoMSA8PCAzKQkJLyogZXhwZWN0IHZhbGlkIGNyYyAqLworI2RlZmluZSBNTUNfUlNQX0JVU1kJKDEgPDwgNCkJCS8qIGNhcmQgbWF5IHNlbmQgYnVzeSAqLworCisvKgorICogVGhlc2UgYXJlIHRoZSByZXNwb25zZSB0eXBlcywgYW5kIGNvcnJlc3BvbmQgdG8gdmFsaWQgYml0CisgKiBwYXR0ZXJucyBvZiB0aGUgYWJvdmUgZmxhZ3MuICBPbmUgYWRkaXRpb25hbCB2YWxpZCBwYXR0ZXJuCisgKiBpcyBhbGwgemVyb3MsIHdoaWNoIG1lYW5zIHdlIGRvbid0IGV4cGVjdCBhIHJlc3BvbnNlLgorICovCisjZGVmaW5lIE1NQ19SU1BfUjEJKE1NQ19SU1BfU0hPUlR8TU1DX1JTUF9DUkMpCisjZGVmaW5lIE1NQ19SU1BfUjFCCShNTUNfUlNQX1NIT1JUfE1NQ19SU1BfQ1JDfE1NQ19SU1BfQlVTWSkKKyNkZWZpbmUgTU1DX1JTUF9SMgkoTU1DX1JTUF9MT05HfE1NQ19SU1BfQ1JDKQorI2RlZmluZSBNTUNfUlNQX1IzCShNTUNfUlNQX1NIT1JUKQorI2RlZmluZSBNTUNfUlNQX1I2CShNTUNfUlNQX1NIT1JUfE1NQ19SU1BfQ1JDKQorCisJdW5zaWduZWQgaW50CQlyZXRyaWVzOwkvKiBtYXggbnVtYmVyIG9mIHJldHJpZXMgKi8KKwl1bnNpZ25lZCBpbnQJCWVycm9yOwkJLyogY29tbWFuZCBlcnJvciAqLworCisjZGVmaW5lIE1NQ19FUlJfTk9ORQkwCisjZGVmaW5lIE1NQ19FUlJfVElNRU9VVAkxCisjZGVmaW5lIE1NQ19FUlJfQkFEQ1JDCTIKKyNkZWZpbmUgTU1DX0VSUl9GSUZPCTMKKyNkZWZpbmUgTU1DX0VSUl9GQUlMRUQJNAorI2RlZmluZSBNTUNfRVJSX0lOVkFMSUQJNQorCisJc3RydWN0IG1tY19kYXRhCQkqZGF0YTsJCS8qIGRhdGEgc2VnbWVudCBhc3NvY2lhdGVkIHdpdGggY21kICovCisJc3RydWN0IG1tY19yZXF1ZXN0CSptcnE7CQkvKiBhc3NvaWNhdGVkIHJlcXVlc3QgKi8KK307CisKK3N0cnVjdCBtbWNfZGF0YSB7CisJdW5zaWduZWQgaW50CQl0aW1lb3V0X25zOwkvKiBkYXRhIHRpbWVvdXQgKGluIG5zLCBtYXggODBtcykgKi8KKwl1bnNpZ25lZCBpbnQJCXRpbWVvdXRfY2xrczsJLyogZGF0YSB0aW1lb3V0IChpbiBjbG9ja3MpICovCisJdW5zaWduZWQgaW50CQlibGtzel9iaXRzOwkvKiBkYXRhIGJsb2NrIHNpemUgKi8KKwl1bnNpZ25lZCBpbnQJCWJsb2NrczsJCS8qIG51bWJlciBvZiBibG9ja3MgKi8KKwl1bnNpZ25lZCBpbnQJCWVycm9yOwkJLyogZGF0YSBlcnJvciAqLworCXVuc2lnbmVkIGludAkJZmxhZ3M7CisKKyNkZWZpbmUgTU1DX0RBVEFfV1JJVEUJKDEgPDwgOCkKKyNkZWZpbmUgTU1DX0RBVEFfUkVBRAkoMSA8PCA5KQorI2RlZmluZSBNTUNfREFUQV9TVFJFQU0JKDEgPDwgMTApCisKKwl1bnNpZ25lZCBpbnQJCWJ5dGVzX3hmZXJlZDsKKworCXN0cnVjdCBtbWNfY29tbWFuZAkqc3RvcDsJCS8qIHN0b3AgY29tbWFuZCAqLworCXN0cnVjdCBtbWNfcmVxdWVzdAkqbXJxOwkJLyogYXNzb2ljYXRlZCByZXF1ZXN0ICovCisKKwl1bnNpZ25lZCBpbnQJCXNnX2xlbjsJCS8qIHNpemUgb2Ygc2NhdHRlciBsaXN0ICovCisJc3RydWN0IHNjYXR0ZXJsaXN0CSpzZzsJCS8qIEkvTyBzY2F0dGVyIGxpc3QgKi8KK307CisKK3N0cnVjdCBtbWNfcmVxdWVzdCB7CisJc3RydWN0IG1tY19jb21tYW5kCSpjbWQ7CisJc3RydWN0IG1tY19kYXRhCQkqZGF0YTsKKwlzdHJ1Y3QgbW1jX2NvbW1hbmQJKnN0b3A7CisKKwl2b2lkCQkJKmRvbmVfZGF0YTsJLyogY29tcGxldGlvbiBkYXRhICovCisJdm9pZAkJCSgqZG9uZSkoc3RydWN0IG1tY19yZXF1ZXN0ICopOy8qIGNvbXBsZXRpb24gZnVuY3Rpb24gKi8KK307CisKK3N0cnVjdCBtbWNfaG9zdDsKK3N0cnVjdCBtbWNfY2FyZDsKKworZXh0ZXJuIGludCBtbWNfd2FpdF9mb3JfcmVxKHN0cnVjdCBtbWNfaG9zdCAqLCBzdHJ1Y3QgbW1jX3JlcXVlc3QgKik7CitleHRlcm4gaW50IG1tY193YWl0X2Zvcl9jbWQoc3RydWN0IG1tY19ob3N0ICosIHN0cnVjdCBtbWNfY29tbWFuZCAqLCBpbnQpOworCitleHRlcm4gaW50IF9fbW1jX2NsYWltX2hvc3Qoc3RydWN0IG1tY19ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQpOworCitzdGF0aWMgaW5saW5lIHZvaWQgbW1jX2NsYWltX2hvc3Qoc3RydWN0IG1tY19ob3N0ICpob3N0KQoreworCV9fbW1jX2NsYWltX2hvc3QoaG9zdCwgKHN0cnVjdCBtbWNfY2FyZCAqKS0xKTsKK30KKworZXh0ZXJuIHZvaWQgbW1jX3JlbGVhc2VfaG9zdChzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1jL3Byb3RvY29sLmggYi9pbmNsdWRlL2xpbnV4L21tYy9wcm90b2NvbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiOTA0YzUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L21tYy9wcm90b2NvbC5oCkBAIC0wLDAgKzEsMjEzIEBACisvKgorICogSGVhZGVyIGZvciBNdWx0aU1lZGlhQ2FyZCAoTU1DKQorICoKKyAqIENvcHlyaWdodCAyMDAyIEhld2xldHQtUGFja2FyZCBDb21wYW55CisgKgorICogVXNlIGNvbnNpc3RlbnQgd2l0aCB0aGUgR05VIEdQTCBpcyBwZXJtaXR0ZWQsCisgKiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IG5vdGljZSBpcworICogcHJlc2VydmVkIGluIGl0cyBlbnRpcmV0eSBpbiBhbGwgY29waWVzIGFuZCBkZXJpdmVkIHdvcmtzLgorICoKKyAqIEhFV0xFVFQtUEFDS0FSRCBDT01QQU5ZIE1BS0VTIE5PIFdBUlJBTlRJRVMsIEVYUFJFU1NFRCBPUiBJTVBMSUVELAorICogQVMgVE8gVEhFIFVTRUZVTE5FU1MgT1IgQ09SUkVDVE5FU1MgT0YgVEhJUyBDT0RFIE9SIElUUworICogRklUTkVTUyBGT1IgQU5ZIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqCisgKiBNYW55IHRoYW5rcyB0byBBbGVzc2FuZHJvIFJ1YmluaSBhbmQgSm9uYXRoYW4gQ29yYmV0IQorICoKKyAqIEJhc2VkIHN0cm9uZ2x5IG9uIGNvZGUgYnk6CisgKgorICogQXV0aG9yOiBZb25nLWlMIEpvaCA8dG9sa2llbkBtaXppLmNvbT4KKyAqIERhdGUgIDogJERhdGU6IDIwMDIvMDYvMTggMTI6Mzc6MzAgJAorICoKKyAqIEF1dGhvcjogIEFuZHJldyBDaHJpc3RpYW4KKyAqICAgICAgICAgIDE1IE1heSAyMDAyCisgKi8KKworI2lmbmRlZiBNTUNfTU1DX1BST1RPQ09MX0gKKyNkZWZpbmUgTU1DX01NQ19QUk9UT0NPTF9ICisKKy8qIFN0YW5kYXJkIE1NQyBjb21tYW5kcyAoMy4xKSAgICAgICAgICAgdHlwZSAgYXJndW1lbnQgICAgIHJlc3BvbnNlICovCisgICAvKiBjbGFzcyAxICovCisjZGVmaW5lCU1NQ19HT19JRExFX1NUQVRFICAgICAgICAgMCAgIC8qIGJjICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBNTUNfU0VORF9PUF9DT05EICAgICAgICAgIDEgICAvKiBiY3IgIFszMTowXSBPQ1IgICAgICAgICBSMyAgKi8KKyNkZWZpbmUgTU1DX0FMTF9TRU5EX0NJRCAgICAgICAgICAyICAgLyogYmNyICAgICAgICAgICAgICAgICAgICAgUjIgICovCisjZGVmaW5lIE1NQ19TRVRfUkVMQVRJVkVfQUREUiAgICAgMyAgIC8qIGFjICAgWzMxOjE2XSBSQ0EgICAgICAgIFIxICAqLworI2RlZmluZSBNTUNfU0VUX0RTUiAgICAgICAgICAgICAgIDQgICAvKiBiYyAgIFszMToxNl0gUkNBICAgICAgICAgICAgKi8KKyNkZWZpbmUgTU1DX1NFTEVDVF9DQVJEICAgICAgICAgICA3ICAgLyogYWMgICBbMzE6MTZdIFJDQSAgICAgICAgUjEgICovCisjZGVmaW5lIE1NQ19TRU5EX0NTRCAgICAgICAgICAgICAgOSAgIC8qIGFjICAgWzMxOjE2XSBSQ0EgICAgICAgIFIyICAqLworI2RlZmluZSBNTUNfU0VORF9DSUQgICAgICAgICAgICAgMTAgICAvKiBhYyAgIFszMToxNl0gUkNBICAgICAgICBSMiAgKi8KKyNkZWZpbmUgTU1DX1JFQURfREFUX1VOVElMX1NUT1AgIDExICAgLyogYWR0YyBbMzE6MF0gZGFkciAgICAgICAgUjEgICovCisjZGVmaW5lIE1NQ19TVE9QX1RSQU5TTUlTU0lPTiAgICAxMiAgIC8qIGFjICAgICAgICAgICAgICAgICAgICAgIFIxYiAqLworI2RlZmluZSBNTUNfU0VORF9TVEFUVVMJICAgICAgICAgMTMgICAvKiBhYyAgIFszMToxNl0gUkNBICAgICAgICBSMSAgKi8KKyNkZWZpbmUgTU1DX0dPX0lOQUNUSVZFX1NUQVRFICAgIDE1ICAgLyogYWMgICBbMzE6MTZdIFJDQSAgICAgICAgICAgICovCisKKyAgLyogY2xhc3MgMiAqLworI2RlZmluZSBNTUNfU0VUX0JMT0NLTEVOICAgICAgICAgMTYgICAvKiBhYyAgIFszMTowXSBibG9jayBsZW4gICBSMSAgKi8KKyNkZWZpbmUgTU1DX1JFQURfU0lOR0xFX0JMT0NLICAgIDE3ICAgLyogYWR0YyBbMzE6MF0gZGF0YSBhZGRyICAgUjEgICovCisjZGVmaW5lIE1NQ19SRUFEX01VTFRJUExFX0JMT0NLICAxOCAgIC8qIGFkdGMgWzMxOjBdIGRhdGEgYWRkciAgIFIxICAqLworCisgIC8qIGNsYXNzIDMgKi8KKyNkZWZpbmUgTU1DX1dSSVRFX0RBVF9VTlRJTF9TVE9QIDIwICAgLyogYWR0YyBbMzE6MF0gZGF0YSBhZGRyICAgUjEgICovCisKKyAgLyogY2xhc3MgNCAqLworI2RlZmluZSBNTUNfU0VUX0JMT0NLX0NPVU5UICAgICAgMjMgICAvKiBhZHRjIFszMTowXSBkYXRhIGFkZHIgICBSMSAgKi8KKyNkZWZpbmUgTU1DX1dSSVRFX0JMT0NLICAgICAgICAgIDI0ICAgLyogYWR0YyBbMzE6MF0gZGF0YSBhZGRyICAgUjEgICovCisjZGVmaW5lIE1NQ19XUklURV9NVUxUSVBMRV9CTE9DSyAyNSAgIC8qIGFkdGMgICAgICAgICAgICAgICAgICAgIFIxICAqLworI2RlZmluZSBNTUNfUFJPR1JBTV9DSUQgICAgICAgICAgMjYgICAvKiBhZHRjICAgICAgICAgICAgICAgICAgICBSMSAgKi8KKyNkZWZpbmUgTU1DX1BST0dSQU1fQ1NEICAgICAgICAgIDI3ICAgLyogYWR0YyAgICAgICAgICAgICAgICAgICAgUjEgICovCisKKyAgLyogY2xhc3MgNiAqLworI2RlZmluZSBNTUNfU0VUX1dSSVRFX1BST1QgICAgICAgMjggICAvKiBhYyAgIFszMTowXSBkYXRhIGFkZHIgICBSMWIgKi8KKyNkZWZpbmUgTU1DX0NMUl9XUklURV9QUk9UICAgICAgIDI5ICAgLyogYWMgICBbMzE6MF0gZGF0YSBhZGRyICAgUjFiICovCisjZGVmaW5lIE1NQ19TRU5EX1dSSVRFX1BST1QgICAgICAzMCAgIC8qIGFkdGMgWzMxOjBdIHdwZGF0YSBhZGRyIFIxICAqLworCisgIC8qIGNsYXNzIDUgKi8KKyNkZWZpbmUgTU1DX0VSQVNFX0dST1VQX1NUQVJUICAgIDM1ICAgLyogYWMgICBbMzE6MF0gZGF0YSBhZGRyICAgUjEgICovCisjZGVmaW5lIE1NQ19FUkFTRV9HUk9VUF9FTkQgICAgICAzNiAgIC8qIGFjICAgWzMxOjBdIGRhdGEgYWRkciAgIFIxICAqLworI2RlZmluZSBNTUNfRVJBU0UgICAgICAgICAgICAgICAgMzcgICAvKiBhYyAgICAgICAgICAgICAgICAgICAgICBSMWIgKi8KKworICAvKiBjbGFzcyA5ICovCisjZGVmaW5lIE1NQ19GQVNUX0lPICAgICAgICAgICAgICAzOSAgIC8qIGFjICAgPENvbXBsZXg+ICAgICAgICAgIFI0ICAqLworI2RlZmluZSBNTUNfR09fSVJRX1NUQVRFICAgICAgICAgNDAgICAvKiBiY3IgICAgICAgICAgICAgICAgICAgICBSNSAgKi8KKworICAvKiBjbGFzcyA3ICovCisjZGVmaW5lIE1NQ19MT0NLX1VOTE9DSyAgICAgICAgICA0MiAgIC8qIGFkdGMgICAgICAgICAgICAgICAgICAgIFIxYiAqLworCisgIC8qIGNsYXNzIDggKi8KKyNkZWZpbmUgTU1DX0FQUF9DTUQgICAgICAgICAgICAgIDU1ICAgLyogYWMgICBbMzE6MTZdIFJDQSAgICAgICAgUjEgICovCisjZGVmaW5lIE1NQ19HRU5fQ01EICAgICAgICAgICAgICA1NiAgIC8qIGFkdGMgWzBdIFJEL1dSICAgICAgICAgIFIxYiAqLworCisvKiBTRCBjb21tYW5kcyAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgIGFyZ3VtZW50ICAgICByZXNwb25zZSAqLworICAvKiBjbGFzcyA4ICovCisvKiBUaGlzIGlzIGJhc2ljYWxseSB0aGUgc2FtZSBjb21tYW5kIGFzIGZvciBNTUMgd2l0aCBzb21lIHF1aXJrcy4gKi8KKyNkZWZpbmUgU0RfU0VORF9SRUxBVElWRV9BRERSICAgICAzICAgLyogYWMgICAgICAgICAgICAgICAgICAgICAgUjYgICovCisKKyAgLyogQXBwbGljYXRpb24gY29tbWFuZHMgKi8KKyNkZWZpbmUgU0RfQVBQX1NFVF9CVVNfV0lEVEggICAgICA2ICAgLyogYWMgICBbMTowXSBidXMgd2lkdGggICAgUjEgICovCisjZGVmaW5lIFNEX0FQUF9PUF9DT05EICAgICAgICAgICA0MSAgIC8qIGJjciAgWzMxOjBdIE9DUiAgICAgICAgIFIzICAqLworI2RlZmluZSBTRF9BUFBfU0VORF9TQ1IgICAgICAgICAgNTEgICAvKiBhZHRjICAgICAgICAgICAgICAgICAgICBSMSAgKi8KKworLyoKKyAgTU1DIHN0YXR1cyBpbiBSMQorICBUeXBlCisgIAllIDogZXJyb3IgYml0CisJcyA6IHN0YXR1cyBiaXQKKwlyIDogZGV0ZWN0ZWQgYW5kIHNldCBmb3IgdGhlIGFjdHVhbCBjb21tYW5kIHJlc3BvbnNlCisJeCA6IGRldGVjdGVkIGFuZCBzZXQgZHVyaW5nIGNvbW1hbmQgZXhlY3V0aW9uLiB0aGUgaG9zdCBtdXN0IHBvbGwKKyAgICAgICAgICAgIHRoZSBjYXJkIGJ5IHNlbmRpbmcgc3RhdHVzIGNvbW1hbmQgaW4gb3JkZXIgdG8gcmVhZCB0aGVzZSBiaXRzLgorICBDbGVhciBjb25kaXRpb24KKyAgCWEgOiBhY2NvcmRpbmcgdG8gdGhlIGNhcmQgc3RhdGUKKwliIDogYWx3YXlzIHJlbGF0ZWQgdG8gdGhlIHByZXZpb3VzIGNvbW1hbmQuIFJlY2VwdGlvbiBvZgorICAgICAgICAgICAgYSB2YWxpZCBjb21tYW5kIHdpbGwgY2xlYXIgaXQgKHdpdGggYSBkZWxheSBvZiBvbmUgY29tbWFuZCkKKwljIDogY2xlYXIgYnkgcmVhZAorICovCisKKyNkZWZpbmUgUjFfT1VUX09GX1JBTkdFCQkoMSA8PCAzMSkJLyogZXIsIGMgKi8KKyNkZWZpbmUgUjFfQUREUkVTU19FUlJPUgkoMSA8PCAzMCkJLyogZXJ4LCBjICovCisjZGVmaW5lIFIxX0JMT0NLX0xFTl9FUlJPUgkoMSA8PCAyOSkJLyogZXIsIGMgKi8KKyNkZWZpbmUgUjFfRVJBU0VfU0VRX0VSUk9SICAgICAgKDEgPDwgMjgpCS8qIGVyLCBjICovCisjZGVmaW5lIFIxX0VSQVNFX1BBUkFNCQkoMSA8PCAyNykJLyogZXgsIGMgKi8KKyNkZWZpbmUgUjFfV1BfVklPTEFUSU9OCQkoMSA8PCAyNikJLyogZXJ4LCBjICovCisjZGVmaW5lIFIxX0NBUkRfSVNfTE9DS0VECSgxIDw8IDI1KQkvKiBzeCwgYSAqLworI2RlZmluZSBSMV9MT0NLX1VOTE9DS19GQUlMRUQJKDEgPDwgMjQpCS8qIGVyeCwgYyAqLworI2RlZmluZSBSMV9DT01fQ1JDX0VSUk9SCSgxIDw8IDIzKQkvKiBlciwgYiAqLworI2RlZmluZSBSMV9JTExFR0FMX0NPTU1BTkQJKDEgPDwgMjIpCS8qIGVyLCBiICovCisjZGVmaW5lIFIxX0NBUkRfRUNDX0ZBSUxFRAkoMSA8PCAyMSkJLyogZXgsIGMgKi8KKyNkZWZpbmUgUjFfQ0NfRVJST1IJCSgxIDw8IDIwKQkvKiBlcngsIGMgKi8KKyNkZWZpbmUgUjFfRVJST1IJCSgxIDw8IDE5KQkvKiBlcngsIGMgKi8KKyNkZWZpbmUgUjFfVU5ERVJSVU4JCSgxIDw8IDE4KQkvKiBleCwgYyAqLworI2RlZmluZSBSMV9PVkVSUlVOCQkoMSA8PCAxNykJLyogZXgsIGMgKi8KKyNkZWZpbmUgUjFfQ0lEX0NTRF9PVkVSV1JJVEUJKDEgPDwgMTYpCS8qIGVyeCwgYywgQ0lEL0NTRCBvdmVyd3JpdGUgKi8KKyNkZWZpbmUgUjFfV1BfRVJBU0VfU0tJUAkoMSA8PCAxNSkJLyogc3gsIGMgKi8KKyNkZWZpbmUgUjFfQ0FSRF9FQ0NfRElTQUJMRUQJKDEgPDwgMTQpCS8qIHN4LCBhICovCisjZGVmaW5lIFIxX0VSQVNFX1JFU0VUCQkoMSA8PCAxMykJLyogc3IsIGMgKi8KKyNkZWZpbmUgUjFfU1RBVFVTKHgpICAgICAgICAgICAgKHggJiAweEZGRkZFMDAwKQorI2RlZmluZSBSMV9DVVJSRU5UX1NUQVRFKHgpICAgIAkoKHggJiAweDAwMDAxRTAwKSA+PiA5KQkvKiBzeCwgYiAoNCBiaXRzKSAqLworI2RlZmluZSBSMV9SRUFEWV9GT1JfREFUQQkoMSA8PCA4KQkvKiBzeCwgYSAqLworI2RlZmluZSBSMV9BUFBfQ01ECQkoMSA8PCA1KQkvKiBzciwgYyAqLworCisvKiBUaGVzZSBhcmUgdW5wYWNrZWQgdmVyc2lvbnMgb2YgdGhlIGFjdHVhbCByZXNwb25zZXMgKi8KKworc3RydWN0IF9tbWNfY3NkIHsKKwl1OCAgY3NkX3N0cnVjdHVyZTsKKwl1OCAgc3BlY192ZXJzOworCXU4ICB0YWFjOworCXU4ICBuc2FjOworCXU4ICB0cmFuX3NwZWVkOworCXUxNiBjY2M7CisJdTggIHJlYWRfYmxfbGVuOworCXU4ICByZWFkX2JsX3BhcnRpYWw7CisJdTggIHdyaXRlX2Jsa19taXNhbGlnbjsKKwl1OCAgcmVhZF9ibGtfbWlzYWxpZ247CisJdTggIGRzcl9pbXA7CisJdTE2IGNfc2l6ZTsKKwl1OCAgdmRkX3JfY3Vycl9taW47CisJdTggIHZkZF9yX2N1cnJfbWF4OworCXU4ICB2ZGRfd19jdXJyX21pbjsKKwl1OCAgdmRkX3dfY3Vycl9tYXg7CisJdTggIGNfc2l6ZV9tdWx0OworCXVuaW9uIHsKKwkJc3RydWN0IHsgLyogTU1DIHN5c3RlbSBzcGVjaWZpY2F0aW9uIHZlcnNpb24gMy4xICovCisJCQl1OCAgZXJhc2VfZ3JwX3NpemU7CisJCQl1OCAgZXJhc2VfZ3JwX211bHQ7CisJCX0gdjMxOworCQlzdHJ1Y3QgeyAvKiBNTUMgc3lzdGVtIHNwZWNpZmljYXRpb24gdmVyc2lvbiAyLjIgKi8KKwkJCXU4ICBzZWN0b3Jfc2l6ZTsKKwkJCXU4ICBlcmFzZV9ncnBfc2l6ZTsKKwkJfSB2MjI7CisJfSBlcmFzZTsKKwl1OCAgd3BfZ3JwX3NpemU7CisJdTggIHdwX2dycF9lbmFibGU7CisJdTggIGRlZmF1bHRfZWNjOworCXU4ICByMndfZmFjdG9yOworCXU4ICB3cml0ZV9ibF9sZW47CisJdTggIHdyaXRlX2JsX3BhcnRpYWw7CisJdTggIGZpbGVfZm9ybWF0X2dycDsKKwl1OCAgY29weTsKKwl1OCAgcGVybV93cml0ZV9wcm90ZWN0OworCXU4ICB0bXBfd3JpdGVfcHJvdGVjdDsKKwl1OCAgZmlsZV9mb3JtYXQ7CisJdTggIGVjYzsKK307CisKKyNkZWZpbmUgTU1DX1ZERF8xNDVfMTUwCTB4MDAwMDAwMDEJLyogVkREIHZvbHRhZ2UgMS40NSAtIDEuNTAgKi8KKyNkZWZpbmUgTU1DX1ZERF8xNTBfMTU1CTB4MDAwMDAwMDIJLyogVkREIHZvbHRhZ2UgMS41MCAtIDEuNTUgKi8KKyNkZWZpbmUgTU1DX1ZERF8xNTVfMTYwCTB4MDAwMDAwMDQJLyogVkREIHZvbHRhZ2UgMS41NSAtIDEuNjAgKi8KKyNkZWZpbmUgTU1DX1ZERF8xNjBfMTY1CTB4MDAwMDAwMDgJLyogVkREIHZvbHRhZ2UgMS42MCAtIDEuNjUgKi8KKyNkZWZpbmUgTU1DX1ZERF8xNjVfMTcwCTB4MDAwMDAwMTAJLyogVkREIHZvbHRhZ2UgMS42NSAtIDEuNzAgKi8KKyNkZWZpbmUgTU1DX1ZERF8xN18xOAkweDAwMDAwMDIwCS8qIFZERCB2b2x0YWdlIDEuNyAtIDEuOCAqLworI2RlZmluZSBNTUNfVkREXzE4XzE5CTB4MDAwMDAwNDAJLyogVkREIHZvbHRhZ2UgMS44IC0gMS45ICovCisjZGVmaW5lIE1NQ19WRERfMTlfMjAJMHgwMDAwMDA4MAkvKiBWREQgdm9sdGFnZSAxLjkgLSAyLjAgKi8KKyNkZWZpbmUgTU1DX1ZERF8yMF8yMQkweDAwMDAwMTAwCS8qIFZERCB2b2x0YWdlIDIuMCB+IDIuMSAqLworI2RlZmluZSBNTUNfVkREXzIxXzIyCTB4MDAwMDAyMDAJLyogVkREIHZvbHRhZ2UgMi4xIH4gMi4yICovCisjZGVmaW5lIE1NQ19WRERfMjJfMjMJMHgwMDAwMDQwMAkvKiBWREQgdm9sdGFnZSAyLjIgfiAyLjMgKi8KKyNkZWZpbmUgTU1DX1ZERF8yM18yNAkweDAwMDAwODAwCS8qIFZERCB2b2x0YWdlIDIuMyB+IDIuNCAqLworI2RlZmluZSBNTUNfVkREXzI0XzI1CTB4MDAwMDEwMDAJLyogVkREIHZvbHRhZ2UgMi40IH4gMi41ICovCisjZGVmaW5lIE1NQ19WRERfMjVfMjYJMHgwMDAwMjAwMAkvKiBWREQgdm9sdGFnZSAyLjUgfiAyLjYgKi8KKyNkZWZpbmUgTU1DX1ZERF8yNl8yNwkweDAwMDA0MDAwCS8qIFZERCB2b2x0YWdlIDIuNiB+IDIuNyAqLworI2RlZmluZSBNTUNfVkREXzI3XzI4CTB4MDAwMDgwMDAJLyogVkREIHZvbHRhZ2UgMi43IH4gMi44ICovCisjZGVmaW5lIE1NQ19WRERfMjhfMjkJMHgwMDAxMDAwMAkvKiBWREQgdm9sdGFnZSAyLjggfiAyLjkgKi8KKyNkZWZpbmUgTU1DX1ZERF8yOV8zMAkweDAwMDIwMDAwCS8qIFZERCB2b2x0YWdlIDIuOSB+IDMuMCAqLworI2RlZmluZSBNTUNfVkREXzMwXzMxCTB4MDAwNDAwMDAJLyogVkREIHZvbHRhZ2UgMy4wIH4gMy4xICovCisjZGVmaW5lIE1NQ19WRERfMzFfMzIJMHgwMDA4MDAwMAkvKiBWREQgdm9sdGFnZSAzLjEgfiAzLjIgKi8KKyNkZWZpbmUgTU1DX1ZERF8zMl8zMwkweDAwMTAwMDAwCS8qIFZERCB2b2x0YWdlIDMuMiB+IDMuMyAqLworI2RlZmluZSBNTUNfVkREXzMzXzM0CTB4MDAyMDAwMDAJLyogVkREIHZvbHRhZ2UgMy4zIH4gMy40ICovCisjZGVmaW5lIE1NQ19WRERfMzRfMzUJMHgwMDQwMDAwMAkvKiBWREQgdm9sdGFnZSAzLjQgfiAzLjUgKi8KKyNkZWZpbmUgTU1DX1ZERF8zNV8zNgkweDAwODAwMDAwCS8qIFZERCB2b2x0YWdlIDMuNSB+IDMuNiAqLworI2RlZmluZSBNTUNfQ0FSRF9CVVNZCTB4ODAwMDAwMDAJLyogQ2FyZCBQb3dlciB1cCBzdGF0dXMgYml0ICovCisKKworLyoKKyAqIENTRCBmaWVsZCBkZWZpbml0aW9ucworICovCisKKyNkZWZpbmUgQ1NEX1NUUlVDVF9WRVJfMV8wICAwICAgICAgICAgICAvKiBWYWxpZCBmb3Igc3lzdGVtIHNwZWNpZmljYXRpb24gMS4wIC0gMS4yICovCisjZGVmaW5lIENTRF9TVFJVQ1RfVkVSXzFfMSAgMSAgICAgICAgICAgLyogVmFsaWQgZm9yIHN5c3RlbSBzcGVjaWZpY2F0aW9uIDEuNCAtIDIuMiAqLworI2RlZmluZSBDU0RfU1RSVUNUX1ZFUl8xXzIgIDIgICAgICAgICAgIC8qIFZhbGlkIGZvciBzeXN0ZW0gc3BlY2lmaWNhdGlvbiAzLjEgICAgICAgKi8KKworI2RlZmluZSBDU0RfU1BFQ19WRVJfMCAgICAgIDAgICAgICAgICAgIC8qIEltcGxlbWVudHMgc3lzdGVtIHNwZWNpZmljYXRpb24gMS4wIC0gMS4yICovCisjZGVmaW5lIENTRF9TUEVDX1ZFUl8xICAgICAgMSAgICAgICAgICAgLyogSW1wbGVtZW50cyBzeXN0ZW0gc3BlY2lmaWNhdGlvbiAxLjQgKi8KKyNkZWZpbmUgQ1NEX1NQRUNfVkVSXzIgICAgICAyICAgICAgICAgICAvKiBJbXBsZW1lbnRzIHN5c3RlbSBzcGVjaWZpY2F0aW9uIDIuMCAtIDIuMiAqLworI2RlZmluZSBDU0RfU1BFQ19WRVJfMyAgICAgIDMgICAgICAgICAgIC8qIEltcGxlbWVudHMgc3lzdGVtIHNwZWNpZmljYXRpb24gMy4xICovCisKKyNlbmRpZiAgLyogTU1DX01NQ19QUk9UT0NPTF9IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW10aW1lci5oIGIvaW5jbHVkZS9saW51eC9tbXRpbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg0Y2FiZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbW10aW1lci5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBJbnRlbCBNdWx0aW1lZGlhIFRpbWVyIGRldmljZSBpbnRlcmZhY2UKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgZmlsZSBzaG91bGQgZGVmaW5lIGFuIGludGVyZmFjZSBjb21wYXRpYmxlIHdpdGggdGhlIElBLVBDIE11bHRpbWVkaWEKKyAqIFRpbWVycyBEcmFmdCBTcGVjaWZpY2F0aW9uIChyZXYuIDAuOTcpIGZyb20gSW50ZWwuICBOb3RlIHRoYXQgc29tZQorICogaGFyZHdhcmUgbWF5IG5vdCBiZSBhYmxlIHRvIHNhZmVseSBleHBvcnQgaXRzIHJlZ2lzdGVycyB0byB1c2Vyc3BhY2UsCisgKiBzbyB0aGUgaW9jdGwgaW50ZXJmYWNlIHNob3VsZCBzdXBwb3J0IGFsbCBuZWNlc3NhcnkgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiAxMS8wMS8wMSAtIGpiYXJuZXMgLSBpbml0aWFsIHJldmlzaW9uCisgKiA5LzEwLzA0IC0gQ2hyaXN0b3BoIExhbWV0ZXIgLSByZW1vdmUgaW50ZXJydXB0IHN1cHBvcnQKKyAqIDkvMTcvMDQgLSBqYmFybmVzIC0gcmVtb3ZlIHRlc3QgcHJvZ3JhbSwgbW92ZSBzb21lICNkZWZpbmVzIHRvIHRoZSBkcml2ZXIKKyAqLworCisjaWZuZGVmIF9MSU5VWF9NTVRJTUVSX0gKKyNkZWZpbmUgX0xJTlVYX01NVElNRVJfSAorCisvKgorICogQnJlYWtkb3duIG9mIHRoZSBpb2N0bCdzIGF2YWlsYWJsZS4gIEFuICdvcHRpb25hbCcgbmV4dCB0byB0aGUgY29tbWFuZAorICogaW5kaWNhdGVzIHRoYXQgc3VwcG9ydGluZyB0aGlzIGNvbW1hbmQgaXMgb3B0aW9uYWwsIHdoaWxlICdyZXF1aXJlZCcKKyAqIGNvbW1hbmRzIG11c3QgYmUgaW1wbGVtZW50ZWQgaWYgY29uZm9ybWFuY2UgaXMgZGVzaXJlZC4KKyAqCisgKiBNTVRJTUVSX0dFVE9GRlNFVCAtIG9wdGlvbmFsCisgKiAgIFNob3VsZCByZXR1cm4gdGhlIG9mZnNldCAocmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBwYWdlIHdoZXJlIHRoZQorICogICByZWdpc3RlcnMgYXJlIG1hcHBlZCkgZm9yIHRoZSBjb3VudGVyIGluIHF1ZXN0aW9uLgorICoKKyAqIE1NVElNRVJfR0VUUkVTIC0gcmVxdWlyZWQKKyAqICAgVGhlIHJlc29sdXRpb24gb2YgdGhlIGNsb2NrIGluIGZlbXRvICgxMF4tMTUpIHNlY29uZHMKKyAqCisgKiBNTVRJTUVSX0dFVEZSRVEgLSByZXF1aXJlZAorICogICBGcmVxdWVuY3kgb2YgdGhlIGNsb2NrIGluIEh6CisgKgorICogTU1USU1FUl9HRVRCSVRTIC0gcmVxdWlyZWQKKyAqICAgTnVtYmVyIG9mIGJpdHMgaW4gdGhlIGNsb2NrJ3MgY291bnRlcgorICoKKyAqIE1NVElNRVJfTU1BUEFWQUlMIC0gcmVxdWlyZWQKKyAqICAgUmV0dXJucyBub256ZXJvIGlmIHRoZSByZWdpc3RlcnMgY2FuIGJlIG1tYXAnZCBpbnRvIHVzZXJzcGFjZSwgMCBvdGhlcndpc2UKKyAqCisgKiBNTVRJTUVSX0dFVENPVU5URVIgLSByZXF1aXJlZAorICogICBHZXRzIHRoZSBjdXJyZW50IHZhbHVlIGluIHRoZSBjb3VudGVyCisgKi8KKyNkZWZpbmUgTU1USU1FUl9JT0NUTF9CQVNFICdtJworCisjZGVmaW5lIE1NVElNRVJfR0VUT0ZGU0VUIF9JTyhNTVRJTUVSX0lPQ1RMX0JBU0UsIDApCisjZGVmaW5lIE1NVElNRVJfR0VUUkVTIF9JT1IoTU1USU1FUl9JT0NUTF9CQVNFLCAxLCB1bnNpZ25lZCBsb25nKQorI2RlZmluZSBNTVRJTUVSX0dFVEZSRVEgX0lPUihNTVRJTUVSX0lPQ1RMX0JBU0UsIDIsIHVuc2lnbmVkIGxvbmcpCisjZGVmaW5lIE1NVElNRVJfR0VUQklUUyBfSU8oTU1USU1FUl9JT0NUTF9CQVNFLCA0KQorI2RlZmluZSBNTVRJTUVSX01NQVBBVkFJTCBfSU8oTU1USU1FUl9JT0NUTF9CQVNFLCA2KQorI2RlZmluZSBNTVRJTUVSX0dFVENPVU5URVIgX0lPUihNTVRJTUVSX0lPQ1RMX0JBU0UsIDksIHVuc2lnbmVkIGxvbmcpCisKKyNlbmRpZiAvKiBfTElOVVhfTU1USU1FUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTMwYzZjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaApAQCAtMCwwICsxLDQyNiBAQAorI2lmbmRlZiBfTElOVVhfTU1aT05FX0gKKyNkZWZpbmUgX0xJTlVYX01NWk9ORV9ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorI2luY2x1ZGUgPGxpbnV4L251bWEuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorCisvKiBGcmVlIG1lbW9yeSBtYW5hZ2VtZW50IC0gem9uZWQgYnVkZHkgYWxsb2NhdG9yLiAgKi8KKyNpZm5kZWYgQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVIKKyNkZWZpbmUgTUFYX09SREVSIDExCisjZWxzZQorI2RlZmluZSBNQVhfT1JERVIgQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVIKKyNlbmRpZgorCitzdHJ1Y3QgZnJlZV9hcmVhIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWZyZWVfbGlzdDsKKwl1bnNpZ25lZCBsb25nCQlucl9mcmVlOworfTsKKworc3RydWN0IHBnbGlzdF9kYXRhOworCisvKgorICogem9uZS0+bG9jayBhbmQgem9uZS0+bHJ1X2xvY2sgYXJlIHR3byBvZiB0aGUgaG90dGVzdCBsb2NrcyBpbiB0aGUga2VybmVsLgorICogU28gYWRkIGEgd2lsZCBhbW91bnQgb2YgcGFkZGluZyBoZXJlIHRvIGVuc3VyZSB0aGF0IHRoZXkgZmFsbCBpbnRvIHNlcGFyYXRlCisgKiBjYWNoZWxpbmVzLiAgVGhlcmUgYXJlIHZlcnkgZmV3IHpvbmUgc3RydWN0dXJlcyBpbiB0aGUgbWFjaGluZSwgc28gc3BhY2UKKyAqIGNvbnN1bXB0aW9uIGlzIG5vdCBhIGNvbmNlcm4gaGVyZS4KKyAqLworI2lmIGRlZmluZWQoQ09ORklHX1NNUCkKK3N0cnVjdCB6b25lX3BhZGRpbmcgeworCWNoYXIgeFswXTsKK30gX19fX2NhY2hlbGluZV9tYXhhbGlnbmVkX2luX3NtcDsKKyNkZWZpbmUgWk9ORV9QQURESU5HKG5hbWUpCXN0cnVjdCB6b25lX3BhZGRpbmcgbmFtZTsKKyNlbHNlCisjZGVmaW5lIFpPTkVfUEFERElORyhuYW1lKQorI2VuZGlmCisKK3N0cnVjdCBwZXJfY3B1X3BhZ2VzIHsKKwlpbnQgY291bnQ7CQkvKiBudW1iZXIgb2YgcGFnZXMgaW4gdGhlIGxpc3QgKi8KKwlpbnQgbG93OwkJLyogbG93IHdhdGVybWFyaywgcmVmaWxsIG5lZWRlZCAqLworCWludCBoaWdoOwkJLyogaGlnaCB3YXRlcm1hcmssIGVtcHR5aW5nIG5lZWRlZCAqLworCWludCBiYXRjaDsJCS8qIGNodW5rIHNpemUgZm9yIGJ1ZGR5IGFkZC9yZW1vdmUgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CS8qIHRoZSBsaXN0IG9mIHBhZ2VzICovCit9OworCitzdHJ1Y3QgcGVyX2NwdV9wYWdlc2V0IHsKKwlzdHJ1Y3QgcGVyX2NwdV9wYWdlcyBwY3BbMl07CS8qIDA6IGhvdC4gIDE6IGNvbGQgKi8KKyNpZmRlZiBDT05GSUdfTlVNQQorCXVuc2lnbmVkIGxvbmcgbnVtYV9oaXQ7CQkvKiBhbGxvY2F0ZWQgaW4gaW50ZW5kZWQgbm9kZSAqLworCXVuc2lnbmVkIGxvbmcgbnVtYV9taXNzOwkvKiBhbGxvY2F0ZWQgaW4gbm9uIGludGVuZGVkIG5vZGUgKi8KKwl1bnNpZ25lZCBsb25nIG51bWFfZm9yZWlnbjsJLyogd2FzIGludGVuZGVkIGhlcmUsIGhpdCBlbHNld2hlcmUgKi8KKwl1bnNpZ25lZCBsb25nIGludGVybGVhdmVfaGl0OyAJLyogaW50ZXJsZWF2ZXIgcHJlZmVyZWQgdGhpcyB6b25lICovCisJdW5zaWduZWQgbG9uZyBsb2NhbF9ub2RlOwkvKiBhbGxvY2F0aW9uIGZyb20gbG9jYWwgbm9kZSAqLworCXVuc2lnbmVkIGxvbmcgb3RoZXJfbm9kZTsJLyogYWxsb2NhdGlvbiBmcm9tIG90aGVyIG5vZGUgKi8KKyNlbmRpZgorfSBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOworCisjZGVmaW5lIFpPTkVfRE1BCQkwCisjZGVmaW5lIFpPTkVfTk9STUFMCQkxCisjZGVmaW5lIFpPTkVfSElHSE1FTQkJMgorCisjZGVmaW5lIE1BWF9OUl9aT05FUwkJMwkvKiBTeW5jIHRoaXMgd2l0aCBaT05FU19TSElGVCAqLworI2RlZmluZSBaT05FU19TSElGVAkJMgkvKiBjZWlsKGxvZzIoTUFYX05SX1pPTkVTKSkgKi8KKworCisvKgorICogV2hlbiBhIG1lbW9yeSBhbGxvY2F0aW9uIG11c3QgY29uZm9ybSB0byBzcGVjaWZpYyBsaW1pdGF0aW9ucyAoc3VjaAorICogYXMgYmVpbmcgc3VpdGFibGUgZm9yIERNQSkgdGhlIGNhbGxlciB3aWxsIHBhc3MgaW4gaGludHMgdG8gdGhlCisgKiBhbGxvY2F0b3IgaW4gdGhlIGdmcF9tYXNrLCBpbiB0aGUgem9uZSBtb2RpZmllciBiaXRzLiAgVGhlc2UgYml0cworICogYXJlIHVzZWQgdG8gc2VsZWN0IGEgcHJpb3JpdHkgb3JkZXJlZCBsaXN0IG9mIG1lbW9yeSB6b25lcyB3aGljaAorICogbWF0Y2ggdGhlIHJlcXVlc3RlZCBsaW1pdHMuICBHRlBfWk9ORU1BU0sgZGVmaW5lcyB3aGljaCBiaXRzIHdpdGhpbgorICogdGhlIGdmcF9tYXNrIHNob3VsZCBiZSBjb25zaWRlcmVkIGFzIHpvbmUgbW9kaWZpZXJzLiAgRWFjaCB2YWxpZAorICogY29tYmluYXRpb24gb2YgdGhlIHpvbmUgbW9kaWZpZXIgYml0cyBoYXMgYSBjb3JyZXNwb25kaW5nIGxpc3QKKyAqIG9mIHpvbmVzIChpbiBub2RlX3pvbmVsaXN0cykuICBUaHVzIGZvciB0d28gem9uZSBtb2RpZmllcnMgdGhlcmUKKyAqIHdpbGwgYmUgYSBtYXhpbXVtIG9mIDQgKDIgKiogMikgem9uZWxpc3RzLCBmb3IgMyBtb2RpZmllcnMgdGhlcmUgd2lsbAorICogYmUgOCAoMiAqKiAzKSB6b25lbGlzdHMuICBHRlBfWk9ORVRZUEVTIGRlZmluZXMgdGhlIG51bWJlciBvZiBwb3NzaWJsZQorICogY29tYmluYXRpb25zIG9mIHpvbmUgbW9kaWZpZXJzIGluICJ6b25lIG1vZGlmaWVyIHNwYWNlIi4KKyAqLworI2RlZmluZSBHRlBfWk9ORU1BU0sJMHgwMworLyoKKyAqIEFzIGFuIG9wdGltaXNhdGlvbiBhbnkgem9uZSBtb2RpZmllciBiaXRzIHdoaWNoIGFyZSBvbmx5IHZhbGlkIHdoZW4KKyAqIG5vIG90aGVyIHpvbmUgbW9kaWZpZXIgYml0cyBhcmUgc2V0IChsb25lcnMpIHNob3VsZCBiZSBwbGFjZWQgaW4KKyAqIHRoZSBoaWdoZXN0IG9yZGVyIGJpdHMgb2YgdGhpcyBmaWVsZC4gIFRoaXMgYWxsb3dzIHVzIHRvIHJlZHVjZSB0aGUKKyAqIGV4dGVudCBvZiB0aGUgem9uZWxpc3RzIHRodXMgc2F2aW5nIHNwYWNlLiAgRm9yIGV4YW1wbGUgaW4gdGhlIGNhc2UKKyAqIG9mIHRocmVlIHpvbmUgbW9kaWZpZXIgYml0cywgd2UgY291bGQgcmVxdWlyZSB1cCB0byBlaWdodCB6b25lbGlzdHMuCisgKiBJZiB0aGUgbGVmdCBtb3N0IHpvbmUgbW9kaWZpZXIgaXMgYSAibG9uZXIiIHRoZW4gdGhlIGhpZ2hlc3QgdmFsaWQKKyAqIHpvbmVsaXN0IHdvdWxkIGJlIGZvdXIgYWxsb3dpbmcgdXMgdG8gYWxsb2NhdGUgb25seSBmaXZlIHpvbmVsaXN0cy4KKyAqIFVzZSB0aGUgZmlyc3QgZm9ybSB3aGVuIHRoZSBsZWZ0IG1vc3QgYml0IGlzIG5vdCBhICJsb25lciIsIG90aGVyd2lzZQorICogdXNlIHRoZSBzZWNvbmQuCisgKi8KKy8qICNkZWZpbmUgR0ZQX1pPTkVUWVBFUwkoR0ZQX1pPTkVNQVNLICsgMSkgKi8JCS8qIE5vbi1sb25lciAqLworI2RlZmluZSBHRlBfWk9ORVRZUEVTCSgoR0ZQX1pPTkVNQVNLICsgMSkgLyAyICsgMSkJCS8qIExvbmVyICovCisKKy8qCisgKiBPbiBtYWNoaW5lcyB3aGVyZSBpdCBpcyBuZWVkZWQgKGVnIFBDcykgd2UgZGl2aWRlIHBoeXNpY2FsIG1lbW9yeQorICogaW50byBtdWx0aXBsZSBwaHlzaWNhbCB6b25lcy4gT24gYSBQQyB3ZSBoYXZlIDMgem9uZXM6CisgKgorICogWk9ORV9ETUEJICA8IDE2IE1CCUlTQSBETUEgY2FwYWJsZSBtZW1vcnkKKyAqIFpPTkVfTk9STUFMCTE2LTg5NiBNQglkaXJlY3QgbWFwcGVkIGJ5IHRoZSBrZXJuZWwKKyAqIFpPTkVfSElHSE1FTQkgPiA4OTYgTUIJb25seSBwYWdlIGNhY2hlIGFuZCB1c2VyIHByb2Nlc3NlcworICovCisKK3N0cnVjdCB6b25lIHsKKwkvKiBGaWVsZHMgY29tbW9ubHkgYWNjZXNzZWQgYnkgdGhlIHBhZ2UgYWxsb2NhdG9yICovCisJdW5zaWduZWQgbG9uZwkJZnJlZV9wYWdlczsKKwl1bnNpZ25lZCBsb25nCQlwYWdlc19taW4sIHBhZ2VzX2xvdywgcGFnZXNfaGlnaDsKKwkvKgorCSAqIFdlIGRvbid0IGtub3cgaWYgdGhlIG1lbW9yeSB0aGF0IHdlJ3JlIGdvaW5nIHRvIGFsbG9jYXRlIHdpbGwgYmUgZnJlZWFibGUKKwkgKiBvci9hbmQgaXQgd2lsbCBiZSByZWxlYXNlZCBldmVudHVhbGx5LCBzbyB0byBhdm9pZCB0b3RhbGx5IHdhc3Rpbmcgc2V2ZXJhbAorCSAqIEdCIG9mIHJhbSB3ZSBtdXN0IHJlc2VydmUgc29tZSBvZiB0aGUgbG93ZXIgem9uZSBtZW1vcnkgKG90aGVyd2lzZSB3ZSByaXNrCisJICogdG8gcnVuIE9PTSBvbiB0aGUgbG93ZXIgem9uZXMgZGVzcGl0ZSB0aGVyZSdzIHRvbnMgb2YgZnJlZWFibGUgcmFtCisJICogb24gdGhlIGhpZ2hlciB6b25lcykuIFRoaXMgYXJyYXkgaXMgcmVjYWxjdWxhdGVkIGF0IHJ1bnRpbWUgaWYgdGhlCisJICogc3lzY3RsX2xvd21lbV9yZXNlcnZlX3JhdGlvIHN5c2N0bCBjaGFuZ2VzLgorCSAqLworCXVuc2lnbmVkIGxvbmcJCWxvd21lbV9yZXNlcnZlW01BWF9OUl9aT05FU107CisKKwlzdHJ1Y3QgcGVyX2NwdV9wYWdlc2V0CXBhZ2VzZXRbTlJfQ1BVU107CisKKwkvKgorCSAqIGZyZWUgYXJlYXMgb2YgZGlmZmVyZW50IHNpemVzCisJICovCisJc3BpbmxvY2tfdAkJbG9jazsKKwlzdHJ1Y3QgZnJlZV9hcmVhCWZyZWVfYXJlYVtNQVhfT1JERVJdOworCisKKwlaT05FX1BBRERJTkcoX3BhZDFfKQorCisJLyogRmllbGRzIGNvbW1vbmx5IGFjY2Vzc2VkIGJ5IHRoZSBwYWdlIHJlY2xhaW0gc2Nhbm5lciAqLworCXNwaW5sb2NrX3QJCWxydV9sb2NrOwkKKwlzdHJ1Y3QgbGlzdF9oZWFkCWFjdGl2ZV9saXN0OworCXN0cnVjdCBsaXN0X2hlYWQJaW5hY3RpdmVfbGlzdDsKKwl1bnNpZ25lZCBsb25nCQlucl9zY2FuX2FjdGl2ZTsKKwl1bnNpZ25lZCBsb25nCQlucl9zY2FuX2luYWN0aXZlOworCXVuc2lnbmVkIGxvbmcJCW5yX2FjdGl2ZTsKKwl1bnNpZ25lZCBsb25nCQlucl9pbmFjdGl2ZTsKKwl1bnNpZ25lZCBsb25nCQlwYWdlc19zY2FubmVkOwkgICAvKiBzaW5jZSBsYXN0IHJlY2xhaW0gKi8KKwlpbnQJCQlhbGxfdW5yZWNsYWltYWJsZTsgLyogQWxsIHBhZ2VzIHBpbm5lZCAqLworCisJLyoKKwkgKiBwcmV2X3ByaW9yaXR5IGhvbGRzIHRoZSBzY2FubmluZyBwcmlvcml0eSBmb3IgdGhpcyB6b25lLiAgSXQgaXMKKwkgKiBkZWZpbmVkIGFzIHRoZSBzY2FubmluZyBwcmlvcml0eSBhdCB3aGljaCB3ZSBhY2hpZXZlZCBvdXIgcmVjbGFpbQorCSAqIHRhcmdldCBhdCB0aGUgcHJldmlvdXMgdHJ5X3RvX2ZyZWVfcGFnZXMoKSBvciBiYWxhbmNlX3BnZGF0KCkKKwkgKiBpbnZva2F0aW9uLgorCSAqCisJICogV2UgdXNlIHByZXZfcHJpb3JpdHkgYXMgYSBtZWFzdXJlIG9mIGhvdyBtdWNoIHN0cmVzcyBwYWdlIHJlY2xhaW0gaXMKKwkgKiB1bmRlciAtIGl0IGRyaXZlcyB0aGUgc3dhcHBpbmVzcyBkZWNpc2lvbjogd2hldGhlciB0byB1bm1hcCBtYXBwZWQKKwkgKiBwYWdlcy4KKwkgKgorCSAqIHRlbXBfcHJpb3JpdHkgaXMgdXNlZCB0byByZW1lbWJlciB0aGUgc2Nhbm5pbmcgcHJpb3JpdHkgYXQgd2hpY2gKKwkgKiB0aGlzIHpvbmUgd2FzIHN1Y2Nlc3NmdWxseSByZWZpbGxlZCB0byBmcmVlX3BhZ2VzID09IHBhZ2VzX2hpZ2guCisJICoKKwkgKiBBY2Nlc3MgdG8gYm90aCB0aGVzZSBmaWVsZHMgaXMgcXVpdGUgcmFjeSBldmVuIG9uIHVuaXByb2Nlc3Nvci4gIEJ1dAorCSAqIGl0IGlzIGV4cGVjdGVkIHRvIGF2ZXJhZ2Ugb3V0IE9LLgorCSAqLworCWludCB0ZW1wX3ByaW9yaXR5OworCWludCBwcmV2X3ByaW9yaXR5OworCisKKwlaT05FX1BBRERJTkcoX3BhZDJfKQorCS8qIFJhcmVseSB1c2VkIG9yIHJlYWQtbW9zdGx5IGZpZWxkcyAqLworCisJLyoKKwkgKiB3YWl0X3RhYmxlCQktLSB0aGUgYXJyYXkgaG9sZGluZyB0aGUgaGFzaCB0YWJsZQorCSAqIHdhaXRfdGFibGVfc2l6ZQktLSB0aGUgc2l6ZSBvZiB0aGUgaGFzaCB0YWJsZSBhcnJheQorCSAqIHdhaXRfdGFibGVfYml0cwktLSB3YWl0X3RhYmxlX3NpemUgPT0gKDEgPDwgd2FpdF90YWJsZV9iaXRzKQorCSAqCisJICogVGhlIHB1cnBvc2Ugb2YgYWxsIHRoZXNlIGlzIHRvIGtlZXAgdHJhY2sgb2YgdGhlIHBlb3BsZQorCSAqIHdhaXRpbmcgZm9yIGEgcGFnZSB0byBiZWNvbWUgYXZhaWxhYmxlIGFuZCBtYWtlIHRoZW0KKwkgKiBydW5uYWJsZSBhZ2FpbiB3aGVuIHBvc3NpYmxlLiBUaGUgdHJvdWJsZSBpcyB0aGF0IHRoaXMKKwkgKiBjb25zdW1lcyBhIGxvdCBvZiBzcGFjZSwgZXNwZWNpYWxseSB3aGVuIHNvIGZldyB0aGluZ3MKKwkgKiB3YWl0IG9uIHBhZ2VzIGF0IGEgZ2l2ZW4gdGltZS4gU28gaW5zdGVhZCBvZiB1c2luZworCSAqIHBlci1wYWdlIHdhaXRxdWV1ZXMsIHdlIHVzZSBhIHdhaXRxdWV1ZSBoYXNoIHRhYmxlLgorCSAqCisJICogVGhlIGJ1Y2tldCBkaXNjaXBsaW5lIGlzIHRvIHNsZWVwIG9uIHRoZSBzYW1lIHF1ZXVlIHdoZW4KKwkgKiBjb2xsaWRpbmcgYW5kIHdha2UgYWxsIGluIHRoYXQgd2FpdCBxdWV1ZSB3aGVuIHJlbW92aW5nLgorCSAqIFdoZW4gc29tZXRoaW5nIHdha2VzLCBpdCBtdXN0IGNoZWNrIHRvIGJlIHN1cmUgaXRzIHBhZ2UgaXMKKwkgKiB0cnVseSBhdmFpbGFibGUsIGEgbGEgdGh1bmRlcmluZyBoZXJkLiBUaGUgY29zdCBvZiBhCisJICogY29sbGlzaW9uIGlzIGdyZWF0LCBidXQgZ2l2ZW4gdGhlIGV4cGVjdGVkIGxvYWQgb2YgdGhlCisJICogdGFibGUsIHRoZXkgc2hvdWxkIGJlIHNvIHJhcmUgYXMgdG8gYmUgb3V0d2VpZ2hlZCBieSB0aGUKKwkgKiBiZW5lZml0cyBmcm9tIHRoZSBzYXZlZCBzcGFjZS4KKwkgKgorCSAqIF9fd2FpdF9vbl9wYWdlX2xvY2tlZCgpIGFuZCB1bmxvY2tfcGFnZSgpIGluIG1tL2ZpbGVtYXAuYywgYXJlIHRoZQorCSAqIHByaW1hcnkgdXNlcnMgb2YgdGhlc2UgZmllbGRzLCBhbmQgaW4gbW0vcGFnZV9hbGxvYy5jCisJICogZnJlZV9hcmVhX2luaXRfY29yZSgpIHBlcmZvcm1zIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGVtLgorCSAqLworCXdhaXRfcXVldWVfaGVhZF90CSogd2FpdF90YWJsZTsKKwl1bnNpZ25lZCBsb25nCQl3YWl0X3RhYmxlX3NpemU7CisJdW5zaWduZWQgbG9uZwkJd2FpdF90YWJsZV9iaXRzOworCisJLyoKKwkgKiBEaXNjb250aWcgbWVtb3J5IHN1cHBvcnQgZmllbGRzLgorCSAqLworCXN0cnVjdCBwZ2xpc3RfZGF0YQkqem9uZV9wZ2RhdDsKKwlzdHJ1Y3QgcGFnZQkJKnpvbmVfbWVtX21hcDsKKwkvKiB6b25lX3N0YXJ0X3BmbiA9PSB6b25lX3N0YXJ0X3BhZGRyID4+IFBBR0VfU0hJRlQgKi8KKwl1bnNpZ25lZCBsb25nCQl6b25lX3N0YXJ0X3BmbjsKKworCXVuc2lnbmVkIGxvbmcJCXNwYW5uZWRfcGFnZXM7CS8qIHRvdGFsIHNpemUsIGluY2x1ZGluZyBob2xlcyAqLworCXVuc2lnbmVkIGxvbmcJCXByZXNlbnRfcGFnZXM7CS8qIGFtb3VudCBvZiBtZW1vcnkgKGV4Y2x1ZGluZyBob2xlcykgKi8KKworCS8qCisJICogcmFyZWx5IHVzZWQgZmllbGRzOgorCSAqLworCWNoYXIJCQkqbmFtZTsKK30gX19fX2NhY2hlbGluZV9tYXhhbGlnbmVkX2luX3NtcDsKKworCisvKgorICogVGhlICJwcmlvcml0eSIgb2YgVk0gc2Nhbm5pbmcgaXMgaG93IG11Y2ggb2YgdGhlIHF1ZXVlcyB3ZSB3aWxsIHNjYW4gaW4gb25lCisgKiBnby4gQSB2YWx1ZSBvZiAxMiBmb3IgREVGX1BSSU9SSVRZIGltcGxpZXMgdGhhdCB3ZSB3aWxsIHNjYW4gMS80MDk2dGggb2YgdGhlCisgKiBxdWV1ZXMgKCJxdWV1ZV9sZW5ndGggPj4gMTIiKSBkdXJpbmcgYW4gYWdpbmcgcm91bmQuCisgKi8KKyNkZWZpbmUgREVGX1BSSU9SSVRZIDEyCisKKy8qCisgKiBPbmUgYWxsb2NhdGlvbiByZXF1ZXN0IG9wZXJhdGVzIG9uIGEgem9uZWxpc3QuIEEgem9uZWxpc3QKKyAqIGlzIGEgbGlzdCBvZiB6b25lcywgdGhlIGZpcnN0IG9uZSBpcyB0aGUgJ2dvYWwnIG9mIHRoZQorICogYWxsb2NhdGlvbiwgdGhlIG90aGVyIHpvbmVzIGFyZSBmYWxsYmFjayB6b25lcywgaW4gZGVjcmVhc2luZworICogcHJpb3JpdHkuCisgKgorICogUmlnaHQgbm93IGEgem9uZWxpc3QgdGFrZXMgdXAgbGVzcyB0aGFuIGEgY2FjaGVsaW5lLiBXZSBuZXZlcgorICogbW9kaWZ5IGl0IGFwYXJ0IGZyb20gYm9vdC11cCwgYW5kIG9ubHkgYSBmZXcgaW5kaWNlcyBhcmUgdXNlZCwKKyAqIHNvIGRlc3BpdGUgdGhlIHpvbmVsaXN0IHRhYmxlIGJlaW5nIHJlbGF0aXZlbHkgYmlnLCB0aGUgY2FjaGUKKyAqIGZvb3RwcmludCBvZiB0aGlzIGNvbnN0cnVjdCBpcyB2ZXJ5IHNtYWxsLgorICovCitzdHJ1Y3Qgem9uZWxpc3QgeworCXN0cnVjdCB6b25lICp6b25lc1tNQVhfTlVNTk9ERVMgKiBNQVhfTlJfWk9ORVMgKyAxXTsgLy8gTlVMTCBkZWxpbWl0ZWQKK307CisKKworLyoKKyAqIFRoZSBwZ19kYXRhX3Qgc3RydWN0dXJlIGlzIHVzZWQgaW4gbWFjaGluZXMgd2l0aCBDT05GSUdfRElTQ09OVElHTUVNCisgKiAobW9zdGx5IE5VTUEgbWFjaGluZXM/KSB0byBkZW5vdGUgYSBoaWdoZXItbGV2ZWwgbWVtb3J5IHpvbmUgdGhhbiB0aGUKKyAqIHpvbmUgZGVub3Rlcy4KKyAqCisgKiBPbiBOVU1BIG1hY2hpbmVzLCBlYWNoIE5VTUEgbm9kZSB3b3VsZCBoYXZlIGEgcGdfZGF0YV90IHRvIGRlc2NyaWJlCisgKiBpdCdzIG1lbW9yeSBsYXlvdXQuCisgKgorICogTWVtb3J5IHN0YXRpc3RpY3MgYW5kIHBhZ2UgcmVwbGFjZW1lbnQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBtYWludGFpbmVkIG9uIGEKKyAqIHBlci16b25lIGJhc2lzLgorICovCitzdHJ1Y3QgYm9vdG1lbV9kYXRhOwordHlwZWRlZiBzdHJ1Y3QgcGdsaXN0X2RhdGEgeworCXN0cnVjdCB6b25lIG5vZGVfem9uZXNbTUFYX05SX1pPTkVTXTsKKwlzdHJ1Y3Qgem9uZWxpc3Qgbm9kZV96b25lbGlzdHNbR0ZQX1pPTkVUWVBFU107CisJaW50IG5yX3pvbmVzOworCXN0cnVjdCBwYWdlICpub2RlX21lbV9tYXA7CisJc3RydWN0IGJvb3RtZW1fZGF0YSAqYmRhdGE7CisJdW5zaWduZWQgbG9uZyBub2RlX3N0YXJ0X3BmbjsKKwl1bnNpZ25lZCBsb25nIG5vZGVfcHJlc2VudF9wYWdlczsgLyogdG90YWwgbnVtYmVyIG9mIHBoeXNpY2FsIHBhZ2VzICovCisJdW5zaWduZWQgbG9uZyBub2RlX3NwYW5uZWRfcGFnZXM7IC8qIHRvdGFsIHNpemUgb2YgcGh5c2ljYWwgcGFnZQorCQkJCQkgICAgIHJhbmdlLCBpbmNsdWRpbmcgaG9sZXMgKi8KKwlpbnQgbm9kZV9pZDsKKwlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0X25leHQ7CisJd2FpdF9xdWV1ZV9oZWFkX3Qga3N3YXBkX3dhaXQ7CisJc3RydWN0IHRhc2tfc3RydWN0ICprc3dhcGQ7CisJaW50IGtzd2FwZF9tYXhfb3JkZXI7Cit9IHBnX2RhdGFfdDsKKworI2RlZmluZSBub2RlX3ByZXNlbnRfcGFnZXMobmlkKQkoTk9ERV9EQVRBKG5pZCktPm5vZGVfcHJlc2VudF9wYWdlcykKKyNkZWZpbmUgbm9kZV9zcGFubmVkX3BhZ2VzKG5pZCkJKE5PREVfREFUQShuaWQpLT5ub2RlX3NwYW5uZWRfcGFnZXMpCisKK2V4dGVybiBzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0X2xpc3Q7CisKK3ZvaWQgX19nZXRfem9uZV9jb3VudHModW5zaWduZWQgbG9uZyAqYWN0aXZlLCB1bnNpZ25lZCBsb25nICppbmFjdGl2ZSwKKwkJCXVuc2lnbmVkIGxvbmcgKmZyZWUsIHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpOwordm9pZCBnZXRfem9uZV9jb3VudHModW5zaWduZWQgbG9uZyAqYWN0aXZlLCB1bnNpZ25lZCBsb25nICppbmFjdGl2ZSwKKwkJCXVuc2lnbmVkIGxvbmcgKmZyZWUpOwordm9pZCBidWlsZF9hbGxfem9uZWxpc3RzKHZvaWQpOwordm9pZCB3YWtldXBfa3N3YXBkKHN0cnVjdCB6b25lICp6b25lLCBpbnQgb3JkZXIpOworaW50IHpvbmVfd2F0ZXJtYXJrX29rKHN0cnVjdCB6b25lICp6LCBpbnQgb3JkZXIsIHVuc2lnbmVkIGxvbmcgbWFyaywKKwkJaW50IGFsbG9jX3R5cGUsIGludCBjYW5fdHJ5X2hhcmRlciwgaW50IGdmcF9oaWdoKTsKKworI2lmZGVmIENPTkZJR19IQVZFX01FTU9SWV9QUkVTRU5UCit2b2lkIG1lbW9yeV9wcmVzZW50KGludCBuaWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgbWVtb3J5X3ByZXNlbnQoaW50IG5pZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpIHt9CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19ORUVEX05PREVfTUVNTUFQX1NJWkUKK3Vuc2lnbmVkIGxvbmcgX19pbml0IG5vZGVfbWVtbWFwX3NpemVfYnl0ZXMoaW50LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKKyNlbmRpZgorCisvKgorICogem9uZV9pZHgoKSByZXR1cm5zIDAgZm9yIHRoZSBaT05FX0RNQSB6b25lLCAxIGZvciB0aGUgWk9ORV9OT1JNQUwgem9uZSwgZXRjLgorICovCisjZGVmaW5lIHpvbmVfaWR4KHpvbmUpCQkoKHpvbmUpIC0gKHpvbmUpLT56b25lX3BnZGF0LT5ub2RlX3pvbmVzKQorCisvKioKKyAqIGZvcl9lYWNoX3BnZGF0IC0gaGVscGVyIG1hY3JvIHRvIGl0ZXJhdGUgb3ZlciBhbGwgbm9kZXMKKyAqIEBwZ2RhdCAtIHBvaW50ZXIgdG8gYSBwZ19kYXRhX3QgdmFyaWFibGUKKyAqCisgKiBNZWFudCB0byBoZWxwIHdpdGggY29tbW9uIGxvb3BzIG9mIHRoZSBmb3JtCisgKiBwZ2RhdCA9IHBnZGF0X2xpc3Q7CisgKiB3aGlsZShwZ2RhdCkgeworICogCS4uLgorICogCXBnZGF0ID0gcGdkYXQtPnBnZGF0X25leHQ7CisgKiB9CisgKi8KKyNkZWZpbmUgZm9yX2VhY2hfcGdkYXQocGdkYXQpIFwKKwlmb3IgKHBnZGF0ID0gcGdkYXRfbGlzdDsgcGdkYXQ7IHBnZGF0ID0gcGdkYXQtPnBnZGF0X25leHQpCisKKy8qCisgKiBuZXh0X3pvbmUgLSBoZWxwZXIgbWFnaWMgZm9yIGZvcl9lYWNoX3pvbmUoKQorICogVGhhbmtzIHRvIFdpbGxpYW0gTGVlIElyd2luIElJSSBmb3IgdGhpcyBwaWVjZSBvZiBpbmdlbnVpdHkuCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHpvbmUgKm5leHRfem9uZShzdHJ1Y3Qgem9uZSAqem9uZSkKK3sKKwlwZ19kYXRhX3QgKnBnZGF0ID0gem9uZS0+em9uZV9wZ2RhdDsKKworCWlmICh6b25lIDwgcGdkYXQtPm5vZGVfem9uZXMgKyBNQVhfTlJfWk9ORVMgLSAxKQorCQl6b25lKys7CisJZWxzZSBpZiAocGdkYXQtPnBnZGF0X25leHQpIHsKKwkJcGdkYXQgPSBwZ2RhdC0+cGdkYXRfbmV4dDsKKwkJem9uZSA9IHBnZGF0LT5ub2RlX3pvbmVzOworCX0gZWxzZQorCQl6b25lID0gTlVMTDsKKworCXJldHVybiB6b25lOworfQorCisvKioKKyAqIGZvcl9lYWNoX3pvbmUgLSBoZWxwZXIgbWFjcm8gdG8gaXRlcmF0ZSBvdmVyIGFsbCBtZW1vcnkgem9uZXMKKyAqIEB6b25lIC0gcG9pbnRlciB0byBzdHJ1Y3Qgem9uZSB2YXJpYWJsZQorICoKKyAqIFRoZSB1c2VyIG9ubHkgbmVlZHMgdG8gZGVjbGFyZSB0aGUgem9uZSB2YXJpYWJsZSwgZm9yX2VhY2hfem9uZQorICogZmlsbHMgaXQgaW4uIFRoaXMgYmFzaWNhbGx5IG1lYW5zIGZvcl9lYWNoX3pvbmUoKSBpcyBhbgorICogZWFzaWVyIHRvIHJlYWQgdmVyc2lvbiBvZiB0aGlzIHBpZWNlIG9mIGNvZGU6CisgKgorICogZm9yIChwZ2RhdCA9IHBnZGF0X2xpc3Q7IHBnZGF0OyBwZ2RhdCA9IHBnZGF0LT5ub2RlX25leHQpCisgKiAJZm9yIChpID0gMDsgaSA8IE1BWF9OUl9aT05FUzsgKytpKSB7CisgKiAJCXN0cnVjdCB6b25lICogeiA9IHBnZGF0LT5ub2RlX3pvbmVzICsgaTsKKyAqIAkJLi4uCisgKiAJfQorICogfQorICovCisjZGVmaW5lIGZvcl9lYWNoX3pvbmUoem9uZSkgXAorCWZvciAoem9uZSA9IHBnZGF0X2xpc3QtPm5vZGVfem9uZXM7IHpvbmU7IHpvbmUgPSBuZXh0X3pvbmUoem9uZSkpCisKK3N0YXRpYyBpbmxpbmUgaW50IGlzX2hpZ2htZW1faWR4KGludCBpZHgpCit7CisJcmV0dXJuIChpZHggPT0gWk9ORV9ISUdITUVNKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgaXNfbm9ybWFsX2lkeChpbnQgaWR4KQoreworCXJldHVybiAoaWR4ID09IFpPTkVfTk9STUFMKTsKK30KKy8qKgorICogaXNfaGlnaG1lbSAtIGhlbHBlciBmdW5jdGlvbiB0byBxdWlja2x5IGNoZWNrIGlmIGEgc3RydWN0IHpvbmUgaXMgYSAKKyAqICAgICAgICAgICAgICBoaWdobWVtIHpvbmUgb3Igbm90LiAgVGhpcyBpcyBhbiBhdHRlbXB0IHRvIGtlZXAgcmVmZXJlbmNlcworICogICAgICAgICAgICAgIHRvIFpPTkVfe0RNQS9OT1JNQUwvSElHSE1FTS9ldGN9IGluIGdlbmVyYWwgY29kZSB0byBhIG1pbmltdW0uCisgKiBAem9uZSAtIHBvaW50ZXIgdG8gc3RydWN0IHpvbmUgdmFyaWFibGUKKyAqLworc3RhdGljIGlubGluZSBpbnQgaXNfaGlnaG1lbShzdHJ1Y3Qgem9uZSAqem9uZSkKK3sKKwlyZXR1cm4gem9uZSA9PSB6b25lLT56b25lX3BnZGF0LT5ub2RlX3pvbmVzICsgWk9ORV9ISUdITUVNOworfQorCitzdGF0aWMgaW5saW5lIGludCBpc19ub3JtYWwoc3RydWN0IHpvbmUgKnpvbmUpCit7CisJcmV0dXJuIHpvbmUgPT0gem9uZS0+em9uZV9wZ2RhdC0+bm9kZV96b25lcyArIFpPTkVfTk9STUFMOworfQorCisvKiBUaGVzZSB0d28gZnVuY3Rpb25zIGFyZSB1c2VkIHRvIHNldHVwIHRoZSBwZXIgem9uZSBwYWdlcyBtaW4gdmFsdWVzICovCitzdHJ1Y3QgY3RsX3RhYmxlOworc3RydWN0IGZpbGU7CitpbnQgbWluX2ZyZWVfa2J5dGVzX3N5c2N0bF9oYW5kbGVyKHN0cnVjdCBjdGxfdGFibGUgKiwgaW50LCBzdHJ1Y3QgZmlsZSAqLCAKKwkJCQkJdm9pZCBfX3VzZXIgKiwgc2l6ZV90ICosIGxvZmZfdCAqKTsKK2V4dGVybiBpbnQgc3lzY3RsX2xvd21lbV9yZXNlcnZlX3JhdGlvW01BWF9OUl9aT05FUy0xXTsKK2ludCBsb3dtZW1fcmVzZXJ2ZV9yYXRpb19zeXNjdGxfaGFuZGxlcihzdHJ1Y3QgY3RsX3RhYmxlICosIGludCwgc3RydWN0IGZpbGUgKiwKKwkJCQkJdm9pZCBfX3VzZXIgKiwgc2l6ZV90ICosIGxvZmZfdCAqKTsKKworI2luY2x1ZGUgPGxpbnV4L3RvcG9sb2d5Lmg+CisvKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgdGhlIGN1cnJlbnQgTm9kZS4gKi8KKyNkZWZpbmUgbnVtYV9ub2RlX2lkKCkJCShjcHVfdG9fbm9kZShfc21wX3Byb2Nlc3Nvcl9pZCgpKSkKKworI2lmbmRlZiBDT05GSUdfRElTQ09OVElHTUVNCisKK2V4dGVybiBzdHJ1Y3QgcGdsaXN0X2RhdGEgY29udGlnX3BhZ2VfZGF0YTsKKyNkZWZpbmUgTk9ERV9EQVRBKG5pZCkJCSgmY29udGlnX3BhZ2VfZGF0YSkKKyNkZWZpbmUgTk9ERV9NRU1fTUFQKG5pZCkJbWVtX21hcAorI2RlZmluZSBNQVhfTk9ERVNfU0hJRlQJCTEKKyNkZWZpbmUgcGZuX3RvX25pZChwZm4pCQkoMCkKKworI2Vsc2UgLyogQ09ORklHX0RJU0NPTlRJR01FTSAqLworCisjaW5jbHVkZSA8YXNtL21tem9uZS5oPgorCisjaWYgQklUU19QRVJfTE9ORyA9PSAzMiB8fCBkZWZpbmVkKEFSQ0hfSEFTX0FUT01JQ19VTlNJR05FRCkKKy8qCisgKiB3aXRoIDMyIGJpdCBwYWdlLT5mbGFncyBmaWVsZCwgd2UgcmVzZXJ2ZSA4IGJpdHMgZm9yIG5vZGUvem9uZSBpbmZvLgorICogdGhlcmUgYXJlIDMgem9uZXMgKDIgYml0cykgYW5kIHRoaXMgbGVhdmVzIDgtMj02IGJpdHMgZm9yIG5vZGVzLgorICovCisjZGVmaW5lIE1BWF9OT0RFU19TSElGVAkJNgorI2VsaWYgQklUU19QRVJfTE9ORyA9PSA2NAorLyoKKyAqIHdpdGggNjQgYml0IGZsYWdzIGZpZWxkLCB0aGVyZSdzIHBsZW50eSBvZiByb29tLgorICovCisjZGVmaW5lIE1BWF9OT0RFU19TSElGVAkJMTAKKyNlbmRpZgorCisjZW5kaWYgLyogIUNPTkZJR19ESVNDT05USUdNRU0gKi8KKworI2lmIE5PREVTX1NISUZUID4gTUFYX05PREVTX1NISUZUCisjZXJyb3IgTk9ERVNfU0hJRlQgPiBNQVhfTk9ERVNfU0hJRlQKKyNlbmRpZgorCisvKiBUaGVyZSBhcmUgY3VycmVudGx5IDMgem9uZXM6IERNQSwgTm9ybWFsICYgSGlnaG1lbSwgdGh1cyB3ZSBuZWVkIDIgYml0cyAqLworI2RlZmluZSBNQVhfWk9ORVNfU0hJRlQJCTIKKworI2lmIFpPTkVTX1NISUZUID4gTUFYX1pPTkVTX1NISUZUCisjZXJyb3IgWk9ORVNfU0hJRlQgPiBNQVhfWk9ORVNfU0hJRlQKKyNlbmRpZgorCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAvKiBfTElOVVhfTU1aT05FX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW9kX2RldmljZXRhYmxlLmggYi9pbmNsdWRlL2xpbnV4L21vZF9kZXZpY2V0YWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2ZWI3YjIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L21vZF9kZXZpY2V0YWJsZS5oCkBAIC0wLDAgKzEsMTc4IEBACisvKgorICogRGV2aWNlIHRhYmxlcyB3aGljaCBhcmUgZXhwb3J0ZWQgdG8gdXNlcnNwYWNlIHZpYQorICogc2NyaXB0cy90YWJsZTJhbGlhcy5jLiAgWW91IG11c3Qga2VlcCB0aGF0IGZpbGUgaW4gc3luYyB3aXRoIHRoaXMKKyAqIGhlYWRlci4KKyAqLworCisjaWZuZGVmIExJTlVYX01PRF9ERVZJQ0VUQUJMRV9ICisjZGVmaW5lIExJTlVYX01PRF9ERVZJQ0VUQUJMRV9ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBrZXJuZWxfdWxvbmdfdDsKKyNlbmRpZgorCisjZGVmaW5lIFBDSV9BTllfSUQgKH4wKQorCitzdHJ1Y3QgcGNpX2RldmljZV9pZCB7CisJX191MzIgdmVuZG9yLCBkZXZpY2U7CQkvKiBWZW5kb3IgYW5kIGRldmljZSBJRCBvciBQQ0lfQU5ZX0lEKi8KKwlfX3UzMiBzdWJ2ZW5kb3IsIHN1YmRldmljZTsJLyogU3Vic3lzdGVtIElEJ3Mgb3IgUENJX0FOWV9JRCAqLworCV9fdTMyIGNsYXNzLCBjbGFzc19tYXNrOwkvKiAoY2xhc3Msc3ViY2xhc3MscHJvZy1pZikgdHJpcGxldCAqLworCWtlcm5lbF91bG9uZ190IGRyaXZlcl9kYXRhOwkvKiBEYXRhIHByaXZhdGUgdG8gdGhlIGRyaXZlciAqLworfTsKKworCisjZGVmaW5lIElFRUUxMzk0X01BVENIX1ZFTkRPUl9JRAkweDAwMDEKKyNkZWZpbmUgSUVFRTEzOTRfTUFUQ0hfTU9ERUxfSUQJCTB4MDAwMgorI2RlZmluZSBJRUVFMTM5NF9NQVRDSF9TUEVDSUZJRVJfSUQJMHgwMDA0CisjZGVmaW5lIElFRUUxMzk0X01BVENIX1ZFUlNJT04JCTB4MDAwOAorCitzdHJ1Y3QgaWVlZTEzOTRfZGV2aWNlX2lkIHsKKwlfX3UzMiBtYXRjaF9mbGFnczsKKwlfX3UzMiB2ZW5kb3JfaWQ7CisJX191MzIgbW9kZWxfaWQ7CisJX191MzIgc3BlY2lmaWVyX2lkOworCV9fdTMyIHZlcnNpb247CisJa2VybmVsX3Vsb25nX3QgZHJpdmVyX2RhdGE7Cit9OworCisKKy8qCisgKiBEZXZpY2UgdGFibGUgZW50cnkgZm9yICJuZXcgc3R5bGUiIHRhYmxlLWRyaXZlbiBVU0IgZHJpdmVycy4KKyAqIFVzZXIgbW9kZSBjb2RlIGNhbiByZWFkIHRoZXNlIHRhYmxlcyB0byBjaG9vc2Ugd2hpY2ggbW9kdWxlcyB0byBsb2FkLgorICogRGVjbGFyZSB0aGUgdGFibGUgYXMgYSBNT0RVTEVfREVWSUNFX1RBQkxFLgorICoKKyAqIEEgcHJvYmUoKSBwYXJhbWV0ZXIgd2lsbCBwb2ludCB0byBhIG1hdGNoaW5nIGVudHJ5IGZyb20gdGhpcyB0YWJsZS4KKyAqIFVzZSB0aGUgZHJpdmVyX2luZm8gZmllbGQgZm9yIGVhY2ggbWF0Y2ggdG8gaG9sZCBpbmZvcm1hdGlvbiB0aWVkCisgKiB0byB0aGF0IG1hdGNoOiAgZGV2aWNlIHF1aXJrcywgZXRjLgorICoKKyAqIFRlcm1pbmF0ZSB0aGUgZHJpdmVyJ3MgdGFibGUgd2l0aCBhbiBhbGwtemVyb2VzIGVudHJ5LgorICogVXNlIHRoZSBmbGFnIHZhbHVlcyB0byBjb250cm9sIHdoaWNoIGZpZWxkcyBhcmUgY29tcGFyZWQuCisgKi8KKworLyoqCisgKiBzdHJ1Y3QgdXNiX2RldmljZV9pZCAtIGlkZW50aWZpZXMgVVNCIGRldmljZXMgZm9yIHByb2JpbmcgYW5kIGhvdHBsdWdnaW5nCisgKiBAbWF0Y2hfZmxhZ3M6IEJpdCBtYXNrIGNvbnRyb2xsaW5nIG9mIHRoZSBvdGhlciBmaWVsZHMgYXJlIHVzZWQgdG8gbWF0Y2gKKyAqCWFnYWluc3QgbmV3IGRldmljZXMuICBBbnkgZmllbGQgZXhjZXB0IGZvciBkcml2ZXJfaW5mbyBtYXkgYmUgdXNlZCwKKyAqCWFsdGhvdWdoIHNvbWUgb25seSBtYWtlIHNlbnNlIGluIGNvbmp1bmN0aW9uIHdpdGggb3RoZXIgZmllbGRzLgorICoJVGhpcyBpcyB1c3VhbGx5IHNldCBieSBhIFVTQl9ERVZJQ0VfKigpIG1hY3JvLCB3aGljaCBzZXRzIGFsbAorICoJb3RoZXIgZmllbGRzIGluIHRoaXMgc3RydWN0dXJlIGV4Y2VwdCBmb3IgZHJpdmVyX2luZm8uCisgKiBAaWRWZW5kb3I6IFVTQiB2ZW5kb3IgSUQgZm9yIGEgZGV2aWNlOyBudW1iZXJzIGFyZSBhc3NpZ25lZAorICoJYnkgdGhlIFVTQiBmb3J1bSB0byBpdHMgbWVtYmVycy4KKyAqIEBpZFByb2R1Y3Q6IFZlbmRvci1hc3NpZ25lZCBwcm9kdWN0IElELgorICogQGJjZERldmljZV9sbzogTG93IGVuZCBvZiByYW5nZSBvZiB2ZW5kb3ItYXNzaWduZWQgcHJvZHVjdCB2ZXJzaW9uIG51bWJlcnMuCisgKglUaGlzIGlzIGFsc28gdXNlZCB0byBpZGVudGlmeSBpbmRpdmlkdWFsIHByb2R1Y3QgdmVyc2lvbnMsIGZvcgorICoJYSByYW5nZSBjb25zaXN0aW5nIG9mIGEgc2luZ2xlIGRldmljZS4KKyAqIEBiY2REZXZpY2VfaGk6IEhpZ2ggZW5kIG9mIHZlcnNpb24gbnVtYmVyIHJhbmdlLiAgVGhlIHJhbmdlIG9mIHByb2R1Y3QKKyAqCXZlcnNpb25zIGlzIGluY2x1c2l2ZS4KKyAqIEBiRGV2aWNlQ2xhc3M6IENsYXNzIG9mIGRldmljZTsgbnVtYmVycyBhcmUgYXNzaWduZWQKKyAqCWJ5IHRoZSBVU0IgZm9ydW0uICBQcm9kdWN0cyBtYXkgY2hvb3NlIHRvIGltcGxlbWVudCBjbGFzc2VzLAorICoJb3IgYmUgdmVuZG9yLXNwZWNpZmljLiAgRGV2aWNlIGNsYXNzZXMgc3BlY2lmeSBiZWhhdmlvciBvZiBhbGwKKyAqCXRoZSBpbnRlcmZhY2VzIG9uIGEgZGV2aWNlcy4KKyAqIEBiRGV2aWNlU3ViQ2xhc3M6IFN1YmNsYXNzIG9mIGRldmljZTsgYXNzb2NpYXRlZCB3aXRoIGJEZXZpY2VDbGFzcy4KKyAqIEBiRGV2aWNlUHJvdG9jb2w6IFByb3RvY29sIG9mIGRldmljZTsgYXNzb2NpYXRlZCB3aXRoIGJEZXZpY2VDbGFzcy4KKyAqIEBiSW50ZXJmYWNlQ2xhc3M6IENsYXNzIG9mIGludGVyZmFjZTsgbnVtYmVycyBhcmUgYXNzaWduZWQKKyAqCWJ5IHRoZSBVU0IgZm9ydW0uICBQcm9kdWN0cyBtYXkgY2hvb3NlIHRvIGltcGxlbWVudCBjbGFzc2VzLAorICoJb3IgYmUgdmVuZG9yLXNwZWNpZmljLiAgSW50ZXJmYWNlIGNsYXNzZXMgc3BlY2lmeSBiZWhhdmlvciBvbmx5CisgKglvZiBhIGdpdmVuIGludGVyZmFjZTsgb3RoZXIgaW50ZXJmYWNlcyBtYXkgc3VwcG9ydCBvdGhlciBjbGFzc2VzLgorICogQGJJbnRlcmZhY2VTdWJDbGFzczogU3ViY2xhc3Mgb2YgaW50ZXJmYWNlOyBhc3NvY2lhdGVkIHdpdGggYkludGVyZmFjZUNsYXNzLgorICogQGJJbnRlcmZhY2VQcm90b2NvbDogUHJvdG9jb2wgb2YgaW50ZXJmYWNlOyBhc3NvY2lhdGVkIHdpdGggYkludGVyZmFjZUNsYXNzLgorICogQGRyaXZlcl9pbmZvOiBIb2xkcyBpbmZvcm1hdGlvbiB1c2VkIGJ5IHRoZSBkcml2ZXIuICBVc3VhbGx5IGl0IGhvbGRzCisgKglhIHBvaW50ZXIgdG8gYSBkZXNjcmlwdG9yIHVuZGVyc3Rvb2QgYnkgdGhlIGRyaXZlciwgb3IgcGVyaGFwcworICoJZGV2aWNlIGZsYWdzLgorICoKKyAqIEluIG1vc3QgY2FzZXMsIGRyaXZlcnMgd2lsbCBjcmVhdGUgYSB0YWJsZSBvZiBkZXZpY2UgSURzIGJ5IHVzaW5nCisgKiBVU0JfREVWSUNFKCksIG9yIHNpbWlsYXIgbWFjcm9zIGRlc2lnbmVkIGZvciB0aGF0IHB1cnBvc2UuCisgKiBUaGV5IHdpbGwgdGhlbiBleHBvcnQgaXQgdG8gdXNlcnNwYWNlIHVzaW5nIE1PRFVMRV9ERVZJQ0VfVEFCTEUoKSwKKyAqIGFuZCBwcm92aWRlIGl0IHRvIHRoZSBVU0IgY29yZSB0aHJvdWdoIHRoZWlyIHVzYl9kcml2ZXIgc3RydWN0dXJlLgorICoKKyAqIFNlZSB0aGUgdXNiX21hdGNoX2lkKCkgZnVuY3Rpb24gZm9yIGluZm9ybWF0aW9uIGFib3V0IGhvdyBtYXRjaGVzIGFyZQorICogcGVyZm9ybWVkLiAgQnJpZWZseSwgeW91IHdpbGwgbm9ybWFsbHkgdXNlIG9uZSBvZiBzZXZlcmFsIG1hY3JvcyB0byBoZWxwCisgKiBjb25zdHJ1Y3QgdGhlc2UgZW50cmllcy4gIEVhY2ggZW50cnkgeW91IHByb3ZpZGUgd2lsbCBlaXRoZXIgaWRlbnRpZnkKKyAqIG9uZSBvciBtb3JlIHNwZWNpZmljIHByb2R1Y3RzLCBvciB3aWxsIGlkZW50aWZ5IGEgY2xhc3Mgb2YgcHJvZHVjdHMKKyAqIHdoaWNoIGhhdmUgYWdyZWVkIHRvIGJlaGF2ZSB0aGUgc2FtZS4gIFlvdSBzaG91bGQgcHV0IHRoZSBtb3JlIHNwZWNpZmljCisgKiBtYXRjaGVzIHRvd2FyZHMgdGhlIGJlZ2lubmluZyBvZiB5b3VyIHRhYmxlLCBzbyB0aGF0IGRyaXZlcl9pbmZvIGNhbgorICogcmVjb3JkIHF1aXJrcyBvZiBzcGVjaWZpYyBwcm9kdWN0cy4KKyAqLworc3RydWN0IHVzYl9kZXZpY2VfaWQgeworCS8qIHdoaWNoIGZpZWxkcyB0byBtYXRjaCBhZ2FpbnN0PyAqLworCV9fdTE2CQltYXRjaF9mbGFnczsKKworCS8qIFVzZWQgZm9yIHByb2R1Y3Qgc3BlY2lmaWMgbWF0Y2hlczsgcmFuZ2UgaXMgaW5jbHVzaXZlICovCisJX191MTYJCWlkVmVuZG9yOworCV9fdTE2CQlpZFByb2R1Y3Q7CisJX191MTYJCWJjZERldmljZV9sbzsKKwlfX3UxNgkJYmNkRGV2aWNlX2hpOworCisJLyogVXNlZCBmb3IgZGV2aWNlIGNsYXNzIG1hdGNoZXMgKi8KKwlfX3U4CQliRGV2aWNlQ2xhc3M7CisJX191OAkJYkRldmljZVN1YkNsYXNzOworCV9fdTgJCWJEZXZpY2VQcm90b2NvbDsKKworCS8qIFVzZWQgZm9yIGludGVyZmFjZSBjbGFzcyBtYXRjaGVzICovCisJX191OAkJYkludGVyZmFjZUNsYXNzOworCV9fdTgJCWJJbnRlcmZhY2VTdWJDbGFzczsKKwlfX3U4CQliSW50ZXJmYWNlUHJvdG9jb2w7CisKKwkvKiBub3QgbWF0Y2hlZCBhZ2FpbnN0ICovCisJa2VybmVsX3Vsb25nX3QJZHJpdmVyX2luZm87Cit9OworCisvKiBTb21lIHVzZWZ1bCBtYWNyb3MgdG8gdXNlIHRvIGNyZWF0ZSBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqLworI2RlZmluZSBVU0JfREVWSUNFX0lEX01BVENIX1ZFTkRPUgkJMHgwMDAxCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTUFUQ0hfUFJPRFVDVAkJMHgwMDAyCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWX0xPCQkweDAwMDQKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZfSEkJCTB4MDAwOAorI2RlZmluZSBVU0JfREVWSUNFX0lEX01BVENIX0RFVl9DTEFTUwkJMHgwMDEwCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWX1NVQkNMQVNTCTB4MDAyMAorI2RlZmluZSBVU0JfREVWSUNFX0lEX01BVENIX0RFVl9QUk9UT0NPTAkweDAwNDAKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfQ0xBU1MJCTB4MDA4MAorI2RlZmluZSBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9TVUJDTEFTUwkweDAxMDAKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfUFJPVE9DT0wJMHgwMjAwCisKKy8qIHMzOTAgQ0NXIGRldmljZXMgKi8KK3N0cnVjdCBjY3dfZGV2aWNlX2lkIHsKKwlfX3UxNgltYXRjaF9mbGFnczsJLyogd2hpY2ggZmllbGRzIHRvIG1hdGNoIGFnYWluc3QgKi8KKworCV9fdTE2CWN1X3R5cGU7CS8qIGNvbnRyb2wgdW5pdCB0eXBlICAgICAqLworCV9fdTE2CWRldl90eXBlOwkvKiBkZXZpY2UgdHlwZSAgICAgICAgICAgKi8KKwlfX3U4CWN1X21vZGVsOwkvKiBjb250cm9sIHVuaXQgbW9kZWwgICAgKi8KKwlfX3U4CWRldl9tb2RlbDsJLyogZGV2aWNlIG1vZGVsICAgICAgICAgICovCisKKwlrZXJuZWxfdWxvbmdfdCBkcml2ZXJfaW5mbzsKK307CisKKyNkZWZpbmUgQ0NXX0RFVklDRV9JRF9NQVRDSF9DVV9UWVBFCQkweDAxCisjZGVmaW5lIENDV19ERVZJQ0VfSURfTUFUQ0hfQ1VfTU9ERUwJCTB4MDIKKyNkZWZpbmUgQ0NXX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0VfVFlQRQkJMHgwNAorI2RlZmluZSBDQ1dfREVWSUNFX0lEX01BVENIX0RFVklDRV9NT0RFTAkweDA4CisKKworI2RlZmluZSBQTlBfSURfTEVOCTgKKyNkZWZpbmUgUE5QX01BWF9ERVZJQ0VTCTgKKworc3RydWN0IHBucF9kZXZpY2VfaWQgeworCV9fdTggaWRbUE5QX0lEX0xFTl07CisJa2VybmVsX3Vsb25nX3QgZHJpdmVyX2RhdGE7Cit9OworCitzdHJ1Y3QgcG5wX2NhcmRfZGV2aWNlX2lkIHsKKwlfX3U4IGlkW1BOUF9JRF9MRU5dOworCWtlcm5lbF91bG9uZ190IGRyaXZlcl9kYXRhOworCXN0cnVjdCB7CisJCV9fdTggaWRbUE5QX0lEX0xFTl07CisJfSBkZXZzW1BOUF9NQVhfREVWSUNFU107Cit9OworCisKKyNkZWZpbmUgU0VSSU9fQU5ZCTB4ZmYKKworc3RydWN0IHNlcmlvX2RldmljZV9pZCB7CisJX191OCB0eXBlOworCV9fdTggZXh0cmE7CisJX191OCBpZDsKKwlfX3U4IHByb3RvOworfTsKKworCisjZW5kaWYgLyogTElOVVhfTU9EX0RFVklDRVRBQkxFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW9kdWxlLmggYi9pbmNsdWRlL2xpbnV4L21vZHVsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlNDMyYTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L21vZHVsZS5oCkBAIC0wLDAgKzEsNTcwIEBACisjaWZuZGVmIF9MSU5VWF9NT0RVTEVfSAorI2RlZmluZSBfTElOVVhfTU9EVUxFX0gKKy8qCisgKiBEeW5hbWljIGxvYWRpbmcgb2YgbW9kdWxlcyBpbnRvIHRoZSBrZXJuZWwuCisgKgorICogUmV3cml0dGVuIGJ5IFJpY2hhcmQgSGVuZGVyc29uIDxydGhAdGFtdS5lZHU+IERlYyAxOTk2CisgKiBSZXdyaXR0ZW4gYWdhaW4gYnkgUnVzdHkgUnVzc2VsbCwgMjAwMgorICovCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KKyNpbmNsdWRlIDxsaW51eC9lbGYuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KKyNpbmNsdWRlIDxsaW51eC9rb2JqZWN0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxhc20vbG9jYWwuaD4KKworI2luY2x1ZGUgPGFzbS9tb2R1bGUuaD4KKworLyogTm90IFlldCBJbXBsZW1lbnRlZCAqLworI2RlZmluZSBNT0RVTEVfU1VQUE9SVEVEX0RFVklDRShuYW1lKQorCisvKiB2ODUwIHRvb2xjaGFpbiB1c2VzIGEgYF8nIHByZWZpeCBmb3IgYWxsIHVzZXIgc3ltYm9scyAqLworI2lmbmRlZiBNT0RVTEVfU1lNQk9MX1BSRUZJWAorI2RlZmluZSBNT0RVTEVfU1lNQk9MX1BSRUZJWCAiIgorI2VuZGlmCisKKyNkZWZpbmUgTU9EVUxFX05BTUVfTEVOICg2NCAtIHNpemVvZih1bnNpZ25lZCBsb25nKSkKKworc3RydWN0IGtlcm5lbF9zeW1ib2wKK3sKKwl1bnNpZ25lZCBsb25nIHZhbHVlOworCWNvbnN0IGNoYXIgKm5hbWU7Cit9OworCitzdHJ1Y3QgbW9kdmVyc2lvbl9pbmZvCit7CisJdW5zaWduZWQgbG9uZyBjcmM7CisJY2hhciBuYW1lW01PRFVMRV9OQU1FX0xFTl07Cit9OworCitzdHJ1Y3QgbW9kdWxlOworCitzdHJ1Y3QgbW9kdWxlX2F0dHJpYnV0ZSB7CisgICAgICAgIHN0cnVjdCBhdHRyaWJ1dGUgYXR0cjsKKyAgICAgICAgc3NpemVfdCAoKnNob3cpKHN0cnVjdCBtb2R1bGVfYXR0cmlidXRlICosIHN0cnVjdCBtb2R1bGUgKiwgY2hhciAqKTsKKyAgICAgICAgc3NpemVfdCAoKnN0b3JlKShzdHJ1Y3QgbW9kdWxlX2F0dHJpYnV0ZSAqLCBzdHJ1Y3QgbW9kdWxlICosCisJCQkgY29uc3QgY2hhciAqLCBzaXplX3QgY291bnQpOworfTsKKworc3RydWN0IG1vZHVsZV9rb2JqZWN0Cit7CisJc3RydWN0IGtvYmplY3Qga29iajsKKwlzdHJ1Y3QgbW9kdWxlICptb2Q7Cit9OworCisvKiBUaGVzZSBhcmUgZWl0aGVyIG1vZHVsZSBsb2NhbCwgb3IgdGhlIGtlcm5lbCdzIGR1bW15IG9uZXMuICovCitleHRlcm4gaW50IGluaXRfbW9kdWxlKHZvaWQpOworZXh0ZXJuIHZvaWQgY2xlYW51cF9tb2R1bGUodm9pZCk7CisKKy8qIEFyY2hzIHByb3ZpZGUgYSBtZXRob2Qgb2YgZmluZGluZyB0aGUgY29ycmVjdCBleGNlcHRpb24gdGFibGUuICovCitzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5OworCitjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICoKK3NlYXJjaF9leHRhYmxlKGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmZpcnN0LAorCSAgICAgICBjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpsYXN0LAorCSAgICAgICB1bnNpZ25lZCBsb25nIHZhbHVlKTsKK3ZvaWQgc29ydF9leHRhYmxlKHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKnN0YXJ0LAorCQkgIHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmZpbmlzaCk7Cit2b2lkIHNvcnRfbWFpbl9leHRhYmxlKHZvaWQpOworCitleHRlcm4gc3RydWN0IHN1YnN5c3RlbSBtb2R1bGVfc3Vic3lzOworCisjaWZkZWYgTU9EVUxFCisjZGVmaW5lIE1PRFVMRV9HRU5FUklDX1RBQkxFKGd0eXBlLG5hbWUpCQkJXAorZXh0ZXJuIGNvbnN0IHN0cnVjdCBndHlwZSMjX2lkIF9fbW9kXyMjZ3R5cGUjI190YWJsZQkJXAorICBfX2F0dHJpYnV0ZV9fICgodW51c2VkLCBhbGlhcyhfX3N0cmluZ2lmeShuYW1lKSkpKQorCitleHRlcm4gc3RydWN0IG1vZHVsZSBfX3RoaXNfbW9kdWxlOworI2RlZmluZSBUSElTX01PRFVMRSAoJl9fdGhpc19tb2R1bGUpCisjZWxzZSAgLyogIU1PRFVMRSAqLworI2RlZmluZSBNT0RVTEVfR0VORVJJQ19UQUJMRShndHlwZSxuYW1lKQorI2RlZmluZSBUSElTX01PRFVMRSAoKHN0cnVjdCBtb2R1bGUgKikwKQorI2VuZGlmCisKKy8qIEdlbmVyaWMgaW5mbyBvZiBmb3JtIHRhZyA9ICJpbmZvIiAqLworI2RlZmluZSBNT0RVTEVfSU5GTyh0YWcsIGluZm8pIF9fTU9EVUxFX0lORk8odGFnLCB0YWcsIGluZm8pCisKKy8qIEZvciB1c2Vyc3BhY2U6IHlvdSBjYW4gYWxzbyBjYWxsIG1lLi4uICovCisjZGVmaW5lIE1PRFVMRV9BTElBUyhfYWxpYXMpIE1PRFVMRV9JTkZPKGFsaWFzLCBfYWxpYXMpCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGxpY2Vuc2UgaWRlbnRzIGFyZSBjdXJyZW50bHkgYWNjZXB0ZWQgYXMgaW5kaWNhdGluZyBmcmVlCisgKiBzb2Z0d2FyZSBtb2R1bGVzCisgKgorICoJIkdQTCIJCQkJW0dOVSBQdWJsaWMgTGljZW5zZSB2MiBvciBsYXRlcl0KKyAqCSJHUEwgdjIiCQkJW0dOVSBQdWJsaWMgTGljZW5zZSB2Ml0KKyAqCSJHUEwgYW5kIGFkZGl0aW9uYWwgcmlnaHRzIglbR05VIFB1YmxpYyBMaWNlbnNlIHYyIHJpZ2h0cyBhbmQgbW9yZV0KKyAqCSJEdWFsIEJTRC9HUEwiCQkJW0dOVSBQdWJsaWMgTGljZW5zZSB2MgorICoJCQkJCSBvciBCU0QgbGljZW5zZSBjaG9pY2VdCisgKgkiRHVhbCBNUEwvR1BMIgkJCVtHTlUgUHVibGljIExpY2Vuc2UgdjIKKyAqCQkJCQkgb3IgTW96aWxsYSBsaWNlbnNlIGNob2ljZV0KKyAqCisgKiBUaGUgZm9sbG93aW5nIG90aGVyIGlkZW50cyBhcmUgYXZhaWxhYmxlCisgKgorICoJIlByb3ByaWV0YXJ5IgkJCVtOb24gZnJlZSBwcm9kdWN0c10KKyAqCisgKiBUaGVyZSBhcmUgZHVhbCBsaWNlbnNlZCBjb21wb25lbnRzLCBidXQgd2hlbiBydW5uaW5nIHdpdGggTGludXggaXQgaXMgdGhlCisgKiBHUEwgdGhhdCBpcyByZWxldmFudCBzbyB0aGlzIGlzIGEgbm9uIGlzc3VlLiBTaW1pbGFybHkgTEdQTCBsaW5rZWQgd2l0aCBHUEwKKyAqIGlzIGEgR1BMIGNvbWJpbmVkIHdvcmsuCisgKgorICogVGhpcyBleGlzdHMgZm9yIHNldmVyYWwgcmVhc29ucworICogMS4JU28gbW9kaW5mbyBjYW4gc2hvdyBsaWNlbnNlIGluZm8gZm9yIHVzZXJzIHdhbnRpbmcgdG8gdmV0IHRoZWlyIHNldHVwIAorICoJaXMgZnJlZQorICogMi4JU28gdGhlIGNvbW11bml0eSBjYW4gaWdub3JlIGJ1ZyByZXBvcnRzIGluY2x1ZGluZyBwcm9wcmlldGFyeSBtb2R1bGVzCisgKiAzLglTbyB2ZW5kb3JzIGNhbiBkbyBsaWtld2lzZSBiYXNlZCBvbiB0aGVpciBvd24gcG9saWNpZXMKKyAqLworI2RlZmluZSBNT0RVTEVfTElDRU5TRShfbGljZW5zZSkgTU9EVUxFX0lORk8obGljZW5zZSwgX2xpY2Vuc2UpCisKKy8qIEF1dGhvciwgaWRlYWxseSBvZiBmb3JtIE5BTUUgPEVNQUlMPlssIE5BTUUgPEVNQUlMPl0qWyBhbmQgTkFNRSA8RU1BSUw+XSAqLworI2RlZmluZSBNT0RVTEVfQVVUSE9SKF9hdXRob3IpIE1PRFVMRV9JTkZPKGF1dGhvciwgX2F1dGhvcikKKyAgCisvKiBXaGF0IHlvdXIgbW9kdWxlIGRvZXMuICovCisjZGVmaW5lIE1PRFVMRV9ERVNDUklQVElPTihfZGVzY3JpcHRpb24pIE1PRFVMRV9JTkZPKGRlc2NyaXB0aW9uLCBfZGVzY3JpcHRpb24pCisKKy8qIE9uZSBmb3IgZWFjaCBwYXJhbWV0ZXIsIGRlc2NyaWJpbmcgaG93IHRvIHVzZSBpdC4gIFNvbWUgZmlsZXMgZG8KKyAgIG11bHRpcGxlIG9mIHRoZXNlIHBlciBsaW5lLCBzbyBjYW4ndCBqdXN0IHVzZSBNT0RVTEVfSU5GTy4gKi8KKyNkZWZpbmUgTU9EVUxFX1BBUk1fREVTQyhfcGFybSwgZGVzYykgXAorCV9fTU9EVUxFX0lORk8ocGFybSwgX3Bhcm0sICNfcGFybSAiOiIgZGVzYykKKworI2RlZmluZSBNT0RVTEVfREVWSUNFX1RBQkxFKHR5cGUsbmFtZSkJCVwKKyAgTU9EVUxFX0dFTkVSSUNfVEFCTEUodHlwZSMjX2RldmljZSxuYW1lKQorCisvKiBWZXJzaW9uIG9mIGZvcm0gWzxlcG9jaD46XTx2ZXJzaW9uPlstPGV4dHJhLXZlcnNpb24+XS4KKyAgIE9yIGZvciBDVlMvUkNTIElEIHZlcnNpb24sIGV2ZXJ5dGhpbmcgYnV0IHRoZSBudW1iZXIgaXMgc3RyaXBwZWQuCisgIDxlcG9jaD46IEEgKHNtYWxsKSB1bnNpZ25lZCBpbnRlZ2VyIHdoaWNoIGFsbG93cyB5b3UgdG8gc3RhcnQgdmVyc2lvbnMKKyAgICAgICAgICAgYW5ldy4gSWYgbm90IG1lbnRpb25lZCwgaXQncyB6ZXJvLiAgZWcuICIyOjEuMCIgaXMgYWZ0ZXIKKwkgICAiMToyLjAiLgorICA8dmVyc2lvbj46IFRoZSA8dmVyc2lvbj4gbWF5IGNvbnRhaW4gb25seSBhbHBoYW51bWVyaWNzIGFuZCB0aGUKKyAgICAgICAgICAgY2hhcmFjdGVyIGAuJy4gIE9yZGVyZWQgYnkgbnVtZXJpYyBzb3J0IGZvciBudW1lcmljIHBhcnRzLAorCSAgIGFzY2lpIHNvcnQgZm9yIGFzY2lpIHBhcnRzIChhcyBwZXIgUlBNIG9yIERFQiBhbGdvcml0aG0pLgorICA8ZXh0cmF2ZXJzaW9uPjogTGlrZSA8dmVyc2lvbj4sIGJ1dCBpbnNlcnRlZCBmb3IgbG9jYWwKKyAgICAgICAgICAgY3VzdG9taXphdGlvbnMsIGVnICJyaDMiIG9yICJydXN0eTEiLgorCisgIFVzaW5nIHRoaXMgYXV0b21hdGljYWxseSBhZGRzIGEgY2hlY2tzdW0gb2YgdGhlIC5jIGZpbGVzIGFuZCB0aGUKKyAgbG9jYWwgaGVhZGVycyBpbiAic3JjdmVyc2lvbiIuCisqLworI2RlZmluZSBNT0RVTEVfVkVSU0lPTihfdmVyc2lvbikgTU9EVUxFX0lORk8odmVyc2lvbiwgX3ZlcnNpb24pCisKKy8qIEdpdmVuIGFuIGFkZHJlc3MsIGxvb2sgZm9yIGl0IGluIHRoZSBleGNlcHRpb24gdGFibGVzICovCitjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpzZWFyY2hfZXhjZXB0aW9uX3RhYmxlcyh1bnNpZ25lZCBsb25nIGFkZCk7CisKK3N0cnVjdCBub3RpZmllcl9ibG9jazsKKworI2lmZGVmIENPTkZJR19NT0RVTEVTCisKKy8qIEdldC9wdXQgYSBrZXJuZWwgc3ltYm9sIChjYWxscyBtdXN0IGJlIHN5bW1ldHJpYykgKi8KK3ZvaWQgKl9fc3ltYm9sX2dldChjb25zdCBjaGFyICpzeW1ib2wpOwordm9pZCAqX19zeW1ib2xfZ2V0X2dwbChjb25zdCBjaGFyICpzeW1ib2wpOworI2RlZmluZSBzeW1ib2xfZ2V0KHgpICgodHlwZW9mKCZ4KSkoX19zeW1ib2xfZ2V0KE1PRFVMRV9TWU1CT0xfUFJFRklYICN4KSkpCisKKyNpZm5kZWYgX19HRU5LU1lNU19fCisjaWZkZWYgQ09ORklHX01PRFZFUlNJT05TCisvKiBNYXJrIHRoZSBDUkMgd2VhayBzaW5jZSBnZW5rc3ltcyBhcHBhcmVudGx5IGRlY2lkZXMgbm90IHRvCisgKiBnZW5lcmF0ZSBhIGNoZWNrc3VtcyBmb3Igc29tZSBzeW1ib2xzICovCisjZGVmaW5lIF9fQ1JDX1NZTUJPTChzeW0sIHNlYykJCQkJCVwKKwlleHRlcm4gdm9pZCAqX19jcmNfIyNzeW0gX19hdHRyaWJ1dGVfXygod2VhaykpOwkJXAorCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIF9fa2NyY3RhYl8jI3N5bQkJXAorCV9fYXR0cmlidXRlX3VzZWRfXwkJCQkJXAorCV9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9fa2NyY3RhYiIgc2VjKSwgdW51c2VkKSkJXAorCT0gKHVuc2lnbmVkIGxvbmcpICZfX2NyY18jI3N5bTsKKyNlbHNlCisjZGVmaW5lIF9fQ1JDX1NZTUJPTChzeW0sIHNlYykKKyNlbmRpZgorCisvKiBGb3IgZXZlcnkgZXhwb3J0ZWQgc3ltYm9sLCBwbGFjZSBhIHN0cnVjdCBpbiB0aGUgX19rc3ltdGFiIHNlY3Rpb24gKi8KKyNkZWZpbmUgX19FWFBPUlRfU1lNQk9MKHN5bSwgc2VjKQkJCQlcCisJX19DUkNfU1lNQk9MKHN5bSwgc2VjKQkJCQkJXAorCXN0YXRpYyBjb25zdCBjaGFyIF9fa3N0cnRhYl8jI3N5bVtdCQkJXAorCV9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9fa3N5bXRhYl9zdHJpbmdzIikpKQkJXAorCT0gTU9EVUxFX1NZTUJPTF9QUkVGSVggI3N5bTsgICAgICAgICAgICAgICAgICAgIAlcCisJc3RhdGljIGNvbnN0IHN0cnVjdCBrZXJuZWxfc3ltYm9sIF9fa3N5bXRhYl8jI3N5bQlcCisJX19hdHRyaWJ1dGVfdXNlZF9fCQkJCQlcCisJX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX19rc3ltdGFiIiBzZWMpLCB1bnVzZWQpKQlcCisJPSB7ICh1bnNpZ25lZCBsb25nKSZzeW0sIF9fa3N0cnRhYl8jI3N5bSB9CisKKyNkZWZpbmUgRVhQT1JUX1NZTUJPTChzeW0pCQkJCQlcCisJX19FWFBPUlRfU1lNQk9MKHN5bSwgIiIpCisKKyNkZWZpbmUgRVhQT1JUX1NZTUJPTF9HUEwoc3ltKQkJCQkJXAorCV9fRVhQT1JUX1NZTUJPTChzeW0sICJfZ3BsIikKKworI2VuZGlmCisKK3N0cnVjdCBtb2R1bGVfcmVmCit7CisJbG9jYWxfdCBjb3VudDsKK30gX19fX2NhY2hlbGluZV9hbGlnbmVkOworCitlbnVtIG1vZHVsZV9zdGF0ZQoreworCU1PRFVMRV9TVEFURV9MSVZFLAorCU1PRFVMRV9TVEFURV9DT01JTkcsCisJTU9EVUxFX1NUQVRFX0dPSU5HLAorfTsKKworLyogU2ltaWxhciBzdHVmZiBmb3Igc2VjdGlvbiBhdHRyaWJ1dGVzLiAqLworI2RlZmluZSBNT0RVTEVfU0VDVF9OQU1FX0xFTiAzMgorc3RydWN0IG1vZHVsZV9zZWN0X2F0dHIKK3sKKwlzdHJ1Y3QgbW9kdWxlX2F0dHJpYnV0ZSBtYXR0cjsKKwljaGFyIG5hbWVbTU9EVUxFX1NFQ1RfTkFNRV9MRU5dOworCXVuc2lnbmVkIGxvbmcgYWRkcmVzczsKK307CisKK3N0cnVjdCBtb2R1bGVfc2VjdF9hdHRycworeworCXN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgZ3JwOworCXN0cnVjdCBtb2R1bGVfc2VjdF9hdHRyIGF0dHJzWzBdOworfTsKKworc3RydWN0IG1vZHVsZV9wYXJhbV9hdHRyczsKKworc3RydWN0IG1vZHVsZQoreworCWVudW0gbW9kdWxlX3N0YXRlIHN0YXRlOworCisJLyogTWVtYmVyIG9mIGxpc3Qgb2YgbW9kdWxlcyAqLworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKworCS8qIFVuaXF1ZSBoYW5kbGUgZm9yIHRoaXMgbW9kdWxlICovCisJY2hhciBuYW1lW01PRFVMRV9OQU1FX0xFTl07CisKKwkvKiBTeXNmcyBzdHVmZi4gKi8KKwlzdHJ1Y3QgbW9kdWxlX2tvYmplY3QgbWtvYmo7CisJc3RydWN0IG1vZHVsZV9wYXJhbV9hdHRycyAqcGFyYW1fYXR0cnM7CisKKwkvKiBFeHBvcnRlZCBzeW1ib2xzICovCisJY29uc3Qgc3RydWN0IGtlcm5lbF9zeW1ib2wgKnN5bXM7CisJdW5zaWduZWQgaW50IG51bV9zeW1zOworCWNvbnN0IHVuc2lnbmVkIGxvbmcgKmNyY3M7CisKKwkvKiBHUEwtb25seSBleHBvcnRlZCBzeW1ib2xzLiAqLworCWNvbnN0IHN0cnVjdCBrZXJuZWxfc3ltYm9sICpncGxfc3ltczsKKwl1bnNpZ25lZCBpbnQgbnVtX2dwbF9zeW1zOworCWNvbnN0IHVuc2lnbmVkIGxvbmcgKmdwbF9jcmNzOworCisJLyogRXhjZXB0aW9uIHRhYmxlICovCisJdW5zaWduZWQgaW50IG51bV9leGVudHJpZXM7CisJY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXh0YWJsZTsKKworCS8qIFN0YXJ0dXAgZnVuY3Rpb24uICovCisJaW50ICgqaW5pdCkodm9pZCk7CisKKwkvKiBJZiB0aGlzIGlzIG5vbi1OVUxMLCB2ZnJlZSBhZnRlciBpbml0KCkgcmV0dXJucyAqLworCXZvaWQgKm1vZHVsZV9pbml0OworCisJLyogSGVyZSBpcyB0aGUgYWN0dWFsIGNvZGUgKyBkYXRhLCB2ZnJlZSdkIG9uIHVubG9hZC4gKi8KKwl2b2lkICptb2R1bGVfY29yZTsKKworCS8qIEhlcmUgYXJlIHRoZSBzaXplcyBvZiB0aGUgaW5pdCBhbmQgY29yZSBzZWN0aW9ucyAqLworCXVuc2lnbmVkIGxvbmcgaW5pdF9zaXplLCBjb3JlX3NpemU7CisKKwkvKiBUaGUgc2l6ZSBvZiB0aGUgZXhlY3V0YWJsZSBjb2RlIGluIGVhY2ggc2VjdGlvbi4gICovCisJdW5zaWduZWQgbG9uZyBpbml0X3RleHRfc2l6ZSwgY29yZV90ZXh0X3NpemU7CisKKwkvKiBBcmNoLXNwZWNpZmljIG1vZHVsZSB2YWx1ZXMgKi8KKwlzdHJ1Y3QgbW9kX2FyY2hfc3BlY2lmaWMgYXJjaDsKKworCS8qIEFtIEkgdW5zYWZlIHRvIHVubG9hZD8gKi8KKwlpbnQgdW5zYWZlOworCisJLyogQW0gSSBHUEwtY29tcGF0aWJsZSAqLworCWludCBsaWNlbnNlX2dwbG9rOworCisjaWZkZWYgQ09ORklHX01PRFVMRV9VTkxPQUQKKwkvKiBSZWZlcmVuY2UgY291bnRzICovCisJc3RydWN0IG1vZHVsZV9yZWYgcmVmW05SX0NQVVNdOworCisJLyogV2hhdCBtb2R1bGVzIGRlcGVuZCBvbiBtZT8gKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIG1vZHVsZXNfd2hpY2hfdXNlX21lOworCisJLyogV2hvIGlzIHdhaXRpbmcgZm9yIHVzIHRvIGJlIHVubG9hZGVkICovCisJc3RydWN0IHRhc2tfc3RydWN0ICp3YWl0ZXI7CisKKwkvKiBEZXN0cnVjdGlvbiBmdW5jdGlvbi4gKi8KKwl2b2lkICgqZXhpdCkodm9pZCk7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19LQUxMU1lNUworCS8qIFdlIGtlZXAgdGhlIHN5bWJvbCBhbmQgc3RyaW5nIHRhYmxlcyBmb3Iga2FsbHN5bXMuICovCisJRWxmX1N5bSAqc3ltdGFiOworCXVuc2lnbmVkIGxvbmcgbnVtX3N5bXRhYjsKKwljaGFyICpzdHJ0YWI7CisKKwkvKiBTZWN0aW9uIGF0dHJpYnV0ZXMgKi8KKwlzdHJ1Y3QgbW9kdWxlX3NlY3RfYXR0cnMgKnNlY3RfYXR0cnM7CisjZW5kaWYKKworCS8qIFBlci1jcHUgZGF0YS4gKi8KKwl2b2lkICpwZXJjcHU7CisKKwkvKiBUaGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyAobWF5IGJlIG1hbmdsZWQpLiAgUGVvcGxlIGxpa2UKKwkgICBrZWVwaW5nIHBvaW50ZXJzIHRvIHRoaXMgc3R1ZmYgKi8KKwljaGFyICphcmdzOworfTsKKworLyogRklYTUU6IEl0J2QgYmUgbmljZSB0byBpc29sYXRlIG1vZHVsZXMgZHVyaW5nIGluaXQsIHRvbywgc28gdGhleQorICAgYXJlbid0IHVzZWQgYmVmb3JlIHRoZXkgKG1heSkgZmFpbC4gIEJ1dCBwcmVzZW50bHkgdG9vIG11Y2ggY29kZQorICAgKElERSAmIFNDU0kpIHJlcXVpcmUgZW50cnkgaW50byB0aGUgbW9kdWxlIGR1cmluZyBpbml0LiovCitzdGF0aWMgaW5saW5lIGludCBtb2R1bGVfaXNfbGl2ZShzdHJ1Y3QgbW9kdWxlICptb2QpCit7CisJcmV0dXJuIG1vZC0+c3RhdGUgIT0gTU9EVUxFX1NUQVRFX0dPSU5HOworfQorCisvKiBJcyB0aGlzIGFkZHJlc3MgaW4gYSBtb2R1bGU/IChzZWNvbmQgaXMgd2l0aCBubyBsb2NrcywgZm9yIG9vcHMpICovCitzdHJ1Y3QgbW9kdWxlICptb2R1bGVfdGV4dF9hZGRyZXNzKHVuc2lnbmVkIGxvbmcgYWRkcik7CitzdHJ1Y3QgbW9kdWxlICpfX21vZHVsZV90ZXh0X2FkZHJlc3ModW5zaWduZWQgbG9uZyBhZGRyKTsKKworLyogUmV0dXJucyBtb2R1bGUgYW5kIGZpbGxzIGluIHZhbHVlLCBkZWZpbmVkIGFuZCBuYW1lYnVmLCBvciBOVUxMIGlmCisgICBzeW1udW0gb3V0IG9mIHJhbmdlLiAqLworc3RydWN0IG1vZHVsZSAqbW9kdWxlX2dldF9rYWxsc3ltKHVuc2lnbmVkIGludCBzeW1udW0sCisJCQkJICB1bnNpZ25lZCBsb25nICp2YWx1ZSwKKwkJCQkgIGNoYXIgKnR5cGUsCisJCQkJICBjaGFyIG5hbWVidWZbMTI4XSk7CisKKy8qIExvb2sgZm9yIHRoaXMgbmFtZTogY2FuIGJlIG9mIGZvcm0gbW9kdWxlOm5hbWUuICovCit1bnNpZ25lZCBsb25nIG1vZHVsZV9rYWxsc3ltc19sb29rdXBfbmFtZShjb25zdCBjaGFyICpuYW1lKTsKKworaW50IGlzX2V4cG9ydGVkKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHN0cnVjdCBtb2R1bGUgKm1vZCk7CisKK2V4dGVybiB2b2lkIF9fbW9kdWxlX3B1dF9hbmRfZXhpdChzdHJ1Y3QgbW9kdWxlICptb2QsIGxvbmcgY29kZSkKKwlfX2F0dHJpYnV0ZV9fKChub3JldHVybikpOworI2RlZmluZSBtb2R1bGVfcHV0X2FuZF9leGl0KGNvZGUpIF9fbW9kdWxlX3B1dF9hbmRfZXhpdChUSElTX01PRFVMRSwgY29kZSk7CisKKyNpZmRlZiBDT05GSUdfTU9EVUxFX1VOTE9BRAordW5zaWduZWQgaW50IG1vZHVsZV9yZWZjb3VudChzdHJ1Y3QgbW9kdWxlICptb2QpOwordm9pZCBfX3N5bWJvbF9wdXQoY29uc3QgY2hhciAqc3ltYm9sKTsKKyNkZWZpbmUgc3ltYm9sX3B1dCh4KSBfX3N5bWJvbF9wdXQoTU9EVUxFX1NZTUJPTF9QUkVGSVggI3gpCit2b2lkIHN5bWJvbF9wdXRfYWRkcih2b2lkICphZGRyKTsKKworLyogU29tZXRpbWVzIHdlIGtub3cgd2UgYWxyZWFkeSBoYXZlIGEgcmVmY291bnQsIGFuZCBpdCdzIGVhc2llciBub3QKKyAgIHRvIGhhbmRsZSB0aGUgZXJyb3IgY2FzZSAod2hpY2ggb25seSBoYXBwZW5zIHdpdGggcm1tb2QgLS13YWl0KS4gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX21vZHVsZV9nZXQoc3RydWN0IG1vZHVsZSAqbW9kdWxlKQoreworCWlmIChtb2R1bGUpIHsKKwkJQlVHX09OKG1vZHVsZV9yZWZjb3VudChtb2R1bGUpID09IDApOworCQlsb2NhbF9pbmMoJm1vZHVsZS0+cmVmW2dldF9jcHUoKV0uY291bnQpOworCQlwdXRfY3B1KCk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIGludCB0cnlfbW9kdWxlX2dldChzdHJ1Y3QgbW9kdWxlICptb2R1bGUpCit7CisJaW50IHJldCA9IDE7CisKKwlpZiAobW9kdWxlKSB7CisJCXVuc2lnbmVkIGludCBjcHUgPSBnZXRfY3B1KCk7CisJCWlmIChsaWtlbHkobW9kdWxlX2lzX2xpdmUobW9kdWxlKSkpCisJCQlsb2NhbF9pbmMoJm1vZHVsZS0+cmVmW2NwdV0uY291bnQpOworCQllbHNlCisJCQlyZXQgPSAwOworCQlwdXRfY3B1KCk7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtb2R1bGVfcHV0KHN0cnVjdCBtb2R1bGUgKm1vZHVsZSkKK3sKKwlpZiAobW9kdWxlKSB7CisJCXVuc2lnbmVkIGludCBjcHUgPSBnZXRfY3B1KCk7CisJCWxvY2FsX2RlYygmbW9kdWxlLT5yZWZbY3B1XS5jb3VudCk7CisJCS8qIE1heWJlIHRoZXkncmUgd2FpdGluZyBmb3IgdXMgdG8gZHJvcCByZWZlcmVuY2U/ICovCisJCWlmICh1bmxpa2VseSghbW9kdWxlX2lzX2xpdmUobW9kdWxlKSkpCisJCQl3YWtlX3VwX3Byb2Nlc3MobW9kdWxlLT53YWl0ZXIpOworCQlwdXRfY3B1KCk7CisJfQorfQorCisjZWxzZSAvKiFDT05GSUdfTU9EVUxFX1VOTE9BRCovCitzdGF0aWMgaW5saW5lIGludCB0cnlfbW9kdWxlX2dldChzdHJ1Y3QgbW9kdWxlICptb2R1bGUpCit7CisJcmV0dXJuICFtb2R1bGUgfHwgbW9kdWxlX2lzX2xpdmUobW9kdWxlKTsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBtb2R1bGVfcHV0KHN0cnVjdCBtb2R1bGUgKm1vZHVsZSkKK3sKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX21vZHVsZV9nZXQoc3RydWN0IG1vZHVsZSAqbW9kdWxlKQoreworfQorI2RlZmluZSBzeW1ib2xfcHV0KHgpIGRvIHsgfSB3aGlsZSgwKQorI2RlZmluZSBzeW1ib2xfcHV0X2FkZHIocCkgZG8geyB9IHdoaWxlKDApCisKKyNlbmRpZiAvKiBDT05GSUdfTU9EVUxFX1VOTE9BRCAqLworCisvKiBUaGlzIGlzIGEgI2RlZmluZSBzbyB0aGUgc3RyaW5nIGRvZXNuJ3QgZ2V0IHB1dCBpbiBldmVyeSAubyBmaWxlICovCisjZGVmaW5lIG1vZHVsZV9uYW1lKG1vZCkJCQlcCisoewkJCQkJCVwKKwlzdHJ1Y3QgbW9kdWxlICpfX21vZCA9IChtb2QpOwkJXAorCV9fbW9kID8gX19tb2QtPm5hbWUgOiAia2VybmVsIjsJCVwKK30pCisKKyNkZWZpbmUgX191bnNhZmUobW9kKQkJCQkJCQkgICAgIFwKK2RvIHsJCQkJCQkJCQkgICAgIFwKKwlpZiAobW9kICYmICEobW9kKS0+dW5zYWZlKSB7CQkJCQkgICAgIFwKKwkJcHJpbnRrKEtFUk5fV0FSTklORwkJCQkJICAgICBcCisJCSAgICAgICAiTW9kdWxlICVzIGNhbm5vdCBiZSB1bmxvYWRlZCBkdWUgdG8gdW5zYWZlIHVzYWdlIGluIiBcCisJCSAgICAgICAiICVzOiV1XG4iLCAobW9kKS0+bmFtZSwgX19GSUxFX18sIF9fTElORV9fKTsJICAgICBcCisJCShtb2QpLT51bnNhZmUgPSAxOwkJCQkJICAgICBcCisJfQkJCQkJCQkJICAgICBcCit9IHdoaWxlKDApCisKKy8qIEZvciBrYWxsc3ltcyB0byBhc2sgZm9yIGFkZHJlc3MgcmVzb2x1dGlvbi4gIE5VTEwgbWVhbnMgbm90IGZvdW5kLiAqLworY29uc3QgY2hhciAqbW9kdWxlX2FkZHJlc3NfbG9va3VwKHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgKnN5bWJvbHNpemUsCisJCQkJICB1bnNpZ25lZCBsb25nICpvZmZzZXQsCisJCQkJICBjaGFyICoqbW9kbmFtZSk7CisKKy8qIEZvciBleHRhYmxlLmMgdG8gc2VhcmNoIG1vZHVsZXMnIGV4Y2VwdGlvbiB0YWJsZXMuICovCitjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpzZWFyY2hfbW9kdWxlX2V4dGFibGVzKHVuc2lnbmVkIGxvbmcgYWRkcik7CisKK2ludCByZWdpc3Rlcl9tb2R1bGVfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICogbmIpOworaW50IHVucmVnaXN0ZXJfbW9kdWxlX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqIG5iKTsKKworZXh0ZXJuIHZvaWQgcHJpbnRfbW9kdWxlcyh2b2lkKTsKKworc3RydWN0IGRldmljZV9kcml2ZXI7Cit2b2lkIG1vZHVsZV9hZGRfZHJpdmVyKHN0cnVjdCBtb2R1bGUgKiwgc3RydWN0IGRldmljZV9kcml2ZXIgKik7Cit2b2lkIG1vZHVsZV9yZW1vdmVfZHJpdmVyKHN0cnVjdCBkZXZpY2VfZHJpdmVyICopOworCisjZWxzZSAvKiAhQ09ORklHX01PRFVMRVMuLi4gKi8KKyNkZWZpbmUgRVhQT1JUX1NZTUJPTChzeW0pCisjZGVmaW5lIEVYUE9SVF9TWU1CT0xfR1BMKHN5bSkKKworLyogR2l2ZW4gYW4gYWRkcmVzcywgbG9vayBmb3IgaXQgaW4gdGhlIGV4Y2VwdGlvbiB0YWJsZXMuICovCitzdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKgorc2VhcmNoX21vZHVsZV9leHRhYmxlcyh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qIElzIHRoaXMgYWRkcmVzcyBpbiBhIG1vZHVsZT8gKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1vZHVsZSAqbW9kdWxlX3RleHRfYWRkcmVzcyh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qIElzIHRoaXMgYWRkcmVzcyBpbiBhIG1vZHVsZT8gKGRvbid0IHRha2UgYSBsb2NrLCB3ZSdyZSBvb3BzaW5nKSAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgbW9kdWxlICpfX21vZHVsZV90ZXh0X2FkZHJlc3ModW5zaWduZWQgbG9uZyBhZGRyKQoreworCXJldHVybiBOVUxMOworfQorCisvKiBHZXQvcHV0IGEga2VybmVsIHN5bWJvbCAoY2FsbHMgc2hvdWxkIGJlIHN5bW1ldHJpYykgKi8KKyNkZWZpbmUgc3ltYm9sX2dldCh4KSAoeyBleHRlcm4gdHlwZW9mKHgpIHggX19hdHRyaWJ1dGVfXygod2VhaykpOyAmKHgpOyB9KQorI2RlZmluZSBzeW1ib2xfcHV0KHgpIGRvIHsgfSB3aGlsZSgwKQorI2RlZmluZSBzeW1ib2xfcHV0X2FkZHIoeCkgZG8geyB9IHdoaWxlKDApCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX21vZHVsZV9nZXQoc3RydWN0IG1vZHVsZSAqbW9kdWxlKQoreworfQorCitzdGF0aWMgaW5saW5lIGludCB0cnlfbW9kdWxlX2dldChzdHJ1Y3QgbW9kdWxlICptb2R1bGUpCit7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtb2R1bGVfcHV0KHN0cnVjdCBtb2R1bGUgKm1vZHVsZSkKK3sKK30KKworI2RlZmluZSBtb2R1bGVfbmFtZShtb2QpICJrZXJuZWwiCisKKyNkZWZpbmUgX191bnNhZmUobW9kKQorCisvKiBGb3Iga2FsbHN5bXMgdG8gYXNrIGZvciBhZGRyZXNzIHJlc29sdXRpb24uICBOVUxMIG1lYW5zIG5vdCBmb3VuZC4gKi8KK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqbW9kdWxlX2FkZHJlc3NfbG9va3VwKHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCQkJCXVuc2lnbmVkIGxvbmcgKnN5bWJvbHNpemUsCisJCQkJCQl1bnNpZ25lZCBsb25nICpvZmZzZXQsCisJCQkJCQljaGFyICoqbW9kbmFtZSkKK3sKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbW9kdWxlICptb2R1bGVfZ2V0X2thbGxzeW0odW5zaWduZWQgaW50IHN5bW51bSwKKwkJCQkJCXVuc2lnbmVkIGxvbmcgKnZhbHVlLAorCQkJCQkJY2hhciAqdHlwZSwKKwkJCQkJCWNoYXIgbmFtZWJ1ZlsxMjhdKQoreworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbW9kdWxlX2thbGxzeW1zX2xvb2t1cF9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGlzX2V4cG9ydGVkKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHN0cnVjdCBtb2R1bGUgKm1vZCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgcmVnaXN0ZXJfbW9kdWxlX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqIG5iKQoreworCS8qIG5vIGV2ZW50cyB3aWxsIGhhcHBlbiBhbnl3YXksIHNvIHRoaXMgY2FuIGFsd2F5cyBzdWNjZWVkICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHVucmVnaXN0ZXJfbW9kdWxlX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqIG5iKQoreworCXJldHVybiAwOworfQorCisjZGVmaW5lIG1vZHVsZV9wdXRfYW5kX2V4aXQoY29kZSkgZG9fZXhpdChjb2RlKQorCitzdGF0aWMgaW5saW5lIHZvaWQgcHJpbnRfbW9kdWxlcyh2b2lkKQoreworfQorCitzdHJ1Y3QgZGV2aWNlX2RyaXZlcjsKK3N0cnVjdCBtb2R1bGU7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtb2R1bGVfYWRkX2RyaXZlcihzdHJ1Y3QgbW9kdWxlICptb2R1bGUsIHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcml2ZXIpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtb2R1bGVfcmVtb3ZlX2RyaXZlcihzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJpdmVyKQoreworfQorCisjZW5kaWYgLyogQ09ORklHX01PRFVMRVMgKi8KKworI2RlZmluZSBzeW1ib2xfcmVxdWVzdCh4KSB0cnlfdGhlbl9yZXF1ZXN0X21vZHVsZShzeW1ib2xfZ2V0KHgpLCAic3ltYm9sOiIgI3gpCisKKy8qIEJFTE9XIEhFUkUgQUxMIFRIRVNFIEFSRSBPQlNPTEVURSBBTkQgV0lMTCBWQU5JU0ggKi8KKworc3RydWN0IG9ic29sZXRlX21vZHBhcm0geworCWNoYXIgbmFtZVs2NF07CisJY2hhciB0eXBlWzY0LXNpemVvZih2b2lkICopXTsKKwl2b2lkICphZGRyOworfTsKKworc3RhdGljIGlubGluZSB2b2lkIE1PRFVMRV9QQVJNXyh2b2lkKSB7IH0KKyNpZmRlZiBNT0RVTEUKKy8qIERFUFJFQ0FURUQ6IERvIG5vdCB1c2UuICovCisjZGVmaW5lIE1PRFVMRV9QQVJNKHZhcix0eXBlKQkJCQkJCSAgICBcCitzdHJ1Y3Qgb2Jzb2xldGVfbW9kcGFybSBfX3Bhcm1fIyN2YXIgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX19vYnNwYXJtIikpKSA9IFwKK3sgX19zdHJpbmdpZnkodmFyKSwgdHlwZSwgJk1PRFVMRV9QQVJNXyB9OyBcCitfX01PRFVMRV9QQVJNX1RZUEUodmFyLCB0eXBlKTsKKyNlbHNlCisjZGVmaW5lIE1PRFVMRV9QQVJNKHZhcix0eXBlKSBzdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKChfX3VudXNlZF9fKSkgKl9fcGFybV8jI3ZhciA9ICZNT0RVTEVfUEFSTV87CisjZW5kaWYKKworI2RlZmluZSBfX01PRFVMRV9TVFJJTkcoeCkgX19zdHJpbmdpZnkoeCkKKworLyogVXNlIHN5bWJvbF9nZXQgYW5kIHN5bWJvbF9wdXQgaW5zdGVhZC4gIFlvdSdsbCB0aGFuayBtZS4gKi8KKyNkZWZpbmUgSEFWRV9JTlRFUl9NT0RVTEUKK2V4dGVybiB2b2lkIF9fZGVwcmVjYXRlZCBpbnRlcl9tb2R1bGVfcmVnaXN0ZXIoY29uc3QgY2hhciAqLAorCQlzdHJ1Y3QgbW9kdWxlICosIGNvbnN0IHZvaWQgKik7CitleHRlcm4gdm9pZCBfX2RlcHJlY2F0ZWQgaW50ZXJfbW9kdWxlX3VucmVnaXN0ZXIoY29uc3QgY2hhciAqKTsKK2V4dGVybiBjb25zdCB2b2lkICogX19kZXByZWNhdGVkIGludGVyX21vZHVsZV9nZXRfcmVxdWVzdChjb25zdCBjaGFyICosCisJCWNvbnN0IGNoYXIgKik7CitleHRlcm4gdm9pZCBfX2RlcHJlY2F0ZWQgaW50ZXJfbW9kdWxlX3B1dChjb25zdCBjaGFyICopOworCisjZW5kaWYgLyogX0xJTlVYX01PRFVMRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21vZHVsZWxvYWRlci5oIGIvaW5jbHVkZS9saW51eC9tb2R1bGVsb2FkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjEwMzM5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9tb2R1bGVsb2FkZXIuaApAQCAtMCwwICsxLDQ3IEBACisjaWZuZGVmIF9MSU5VWF9NT0RVTEVMT0FERVJfSAorI2RlZmluZSBfTElOVVhfTU9EVUxFTE9BREVSX0gKKy8qIFRoZSBzdHVmZiBuZWVkZWQgZm9yIGFyY2hzIHRvIHN1cHBvcnQgbW9kdWxlcy4gKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2VsZi5oPgorCisvKiBUaGVzZSBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IHRoZSBzcGVjaWZpYyBhcmNoaXRlY3R1cmUgKi8KKworLyogQWRqdXN0IGFyY2gtc3BlY2lmaWMgc2VjdGlvbnMuICBSZXR1cm4gMCBvbiBzdWNjZXNzLiAgKi8KK2ludCBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zKEVsZl9FaGRyICpoZHIsCisJCQkgICAgICBFbGZfU2hkciAqc2VjaGRycywKKwkJCSAgICAgIGNoYXIgKnNlY3N0cmluZ3MsCisJCQkgICAgICBzdHJ1Y3QgbW9kdWxlICptb2QpOworCisvKiBBbGxvY2F0b3IgdXNlZCBmb3IgYWxsb2NhdGluZyBzdHJ1Y3QgbW9kdWxlLCBjb3JlIHNlY3Rpb25zIGFuZCBpbml0CisgICBzZWN0aW9ucy4gIFJldHVybnMgTlVMTCBvbiBmYWlsdXJlLiAqLwordm9pZCAqbW9kdWxlX2FsbG9jKHVuc2lnbmVkIGxvbmcgc2l6ZSk7CisKKy8qIEZyZWUgbWVtb3J5IHJldHVybmVkIGZyb20gbW9kdWxlX2FsbG9jLiAqLwordm9pZCBtb2R1bGVfZnJlZShzdHJ1Y3QgbW9kdWxlICptb2QsIHZvaWQgKm1vZHVsZV9yZWdpb24pOworCisvKiBBcHBseSB0aGUgZ2l2ZW4gcmVsb2NhdGlvbiB0byB0aGUgKHNpbXBsaWZpZWQpIEVMRi4gIFJldHVybiAtZXJyb3IKKyAgIG9yIDAuICovCitpbnQgYXBwbHlfcmVsb2NhdGUoRWxmX1NoZHIgKnNlY2hkcnMsCisJCSAgIGNvbnN0IGNoYXIgKnN0cnRhYiwKKwkJICAgdW5zaWduZWQgaW50IHN5bWluZGV4LAorCQkgICB1bnNpZ25lZCBpbnQgcmVsc2VjLAorCQkgICBzdHJ1Y3QgbW9kdWxlICptb2QpOworCisvKiBBcHBseSB0aGUgZ2l2ZW4gYWRkIHJlbG9jYXRpb24gdG8gdGhlIChzaW1wbGlmaWVkKSBFTEYuICBSZXR1cm4KKyAgIC1lcnJvciBvciAwICovCitpbnQgYXBwbHlfcmVsb2NhdGVfYWRkKEVsZl9TaGRyICpzZWNoZHJzLAorCQkgICAgICAgY29uc3QgY2hhciAqc3RydGFiLAorCQkgICAgICAgdW5zaWduZWQgaW50IHN5bWluZGV4LAorCQkgICAgICAgdW5zaWduZWQgaW50IHJlbHNlYywKKwkJICAgICAgIHN0cnVjdCBtb2R1bGUgKm1vZCk7CisKKy8qIEFueSBmaW5hbCBwcm9jZXNzaW5nIG9mIG1vZHVsZSBiZWZvcmUgYWNjZXNzLiAgUmV0dXJuIC1lcnJvciBvciAwLiAqLworaW50IG1vZHVsZV9maW5hbGl6ZShjb25zdCBFbGZfRWhkciAqaGRyLAorCQkgICAgY29uc3QgRWxmX1NoZHIgKnNlY2hkcnMsCisJCSAgICBzdHJ1Y3QgbW9kdWxlICptb2QpOworCisvKiBBbnkgY2xlYW51cCBuZWVkZWQgd2hlbiBtb2R1bGUgbGVhdmVzLiAqLwordm9pZCBtb2R1bGVfYXJjaF9jbGVhbnVwKHN0cnVjdCBtb2R1bGUgKm1vZCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tb2R1bGVwYXJhbS5oIGIvaW5jbHVkZS9saW51eC9tb2R1bGVwYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2OGVjOGUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L21vZHVsZXBhcmFtLmgKQEAgLTAsMCArMSwxODIgQEAKKyNpZm5kZWYgX0xJTlVYX01PRFVMRV9QQVJBTVNfSAorI2RlZmluZSBfTElOVVhfTU9EVUxFX1BBUkFNU19ICisvKiAoQykgQ29weXJpZ2h0IDIwMDEsIDIwMDIgUnVzdHkgUnVzc2VsbCBJQk0gQ29ycG9yYXRpb24gKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5naWZ5Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKKy8qIFlvdSBjYW4gb3ZlcnJpZGUgdGhpcyBtYW51YWxseSwgYnV0IGdlbmVyYWxseSB0aGlzIHNob3VsZCBtYXRjaCB0aGUKKyAgIG1vZHVsZSBuYW1lLiAqLworI2lmZGVmIE1PRFVMRQorI2RlZmluZSBNT0RVTEVfUEFSQU1fUFJFRklYIC8qIGVtcHR5ICovCisjZWxzZQorI2RlZmluZSBNT0RVTEVfUEFSQU1fUFJFRklYIF9fc3RyaW5naWZ5KEtCVUlMRF9NT0ROQU1FKSAiLiIKKyNlbmRpZgorCisjaWZkZWYgTU9EVUxFCisjZGVmaW5lIF9fX21vZHVsZV9jYXQoYSxiKSBfX21vZF8gIyMgYSAjIyBiCisjZGVmaW5lIF9fbW9kdWxlX2NhdChhLGIpIF9fX21vZHVsZV9jYXQoYSxiKQorI2RlZmluZSBfX01PRFVMRV9JTkZPKHRhZywgbmFtZSwgaW5mbykJCQkJCSAgXAorc3RhdGljIGNvbnN0IGNoYXIgX19tb2R1bGVfY2F0KG5hbWUsX19MSU5FX18pW10JCQkJICBcCisgIF9fYXR0cmlidXRlX3VzZWRfXwkJCQkJCQkgIFwKKyAgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiLm1vZGluZm8iKSx1bnVzZWQpKSA9IF9fc3RyaW5naWZ5KHRhZykgIj0iIGluZm8KKyNlbHNlICAvKiAhTU9EVUxFICovCisjZGVmaW5lIF9fTU9EVUxFX0lORk8odGFnLCBuYW1lLCBpbmZvKQorI2VuZGlmCisjZGVmaW5lIF9fTU9EVUxFX1BBUk1fVFlQRShuYW1lLCBfdHlwZSkJCQkJCSAgXAorICBfX01PRFVMRV9JTkZPKHBhcm10eXBlLCBuYW1lIyN0eXBlLCAjbmFtZSAiOiIgX3R5cGUpCisKK3N0cnVjdCBrZXJuZWxfcGFyYW07CisKKy8qIFJldHVybnMgMCwgb3IgLWVycm5vLiAgYXJnIGlzIGluIGtwLT5hcmcuICovCit0eXBlZGVmIGludCAoKnBhcmFtX3NldF9mbikoY29uc3QgY2hhciAqdmFsLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCk7CisvKiBSZXR1cm5zIGxlbmd0aCB3cml0dGVuIG9yIC1lcnJuby4gIEJ1ZmZlciBpcyA0ayAoaWUuIGJlIHNob3J0ISkgKi8KK3R5cGVkZWYgaW50ICgqcGFyYW1fZ2V0X2ZuKShjaGFyICpidWZmZXIsIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKTsKKworc3RydWN0IGtlcm5lbF9wYXJhbSB7CisJY29uc3QgY2hhciAqbmFtZTsKKwl1bnNpZ25lZCBpbnQgcGVybTsKKwlwYXJhbV9zZXRfZm4gc2V0OworCXBhcmFtX2dldF9mbiBnZXQ7CisJdm9pZCAqYXJnOworfTsKKworLyogU3BlY2lhbCBvbmUgZm9yIHN0cmluZ3Mgd2Ugd2FudCB0byBjb3B5IGludG8gKi8KK3N0cnVjdCBrcGFyYW1fc3RyaW5nIHsKKwl1bnNpZ25lZCBpbnQgbWF4bGVuOworCWNoYXIgKnN0cmluZzsKK307CisKKy8qIFNwZWNpYWwgb25lIGZvciBhcnJheXMgKi8KK3N0cnVjdCBrcGFyYW1fYXJyYXkKK3sKKwl1bnNpZ25lZCBpbnQgbWF4OworCXVuc2lnbmVkIGludCAqbnVtOworCXBhcmFtX3NldF9mbiBzZXQ7CisJcGFyYW1fZ2V0X2ZuIGdldDsKKwl1bnNpZ25lZCBpbnQgZWxlbXNpemU7CisJdm9pZCAqZWxlbTsKK307CisKKy8qIFRoaXMgaXMgdGhlIGZ1bmRhbWVudGFsIGZ1bmN0aW9uIGZvciByZWdpc3RlcmluZyBib290L21vZHVsZQorICAgcGFyYW1ldGVycy4gIHBlcm0gc2V0cyB0aGUgdmlzaWJpbGl0eSBpbiBkcml2ZXJmczogMDAwIG1lYW5zIGl0J3MKKyAgIG5vdCB0aGVyZSwgcmVhZCBiaXRzIG1lYW4gaXQncyByZWFkYWJsZSwgd3JpdGUgYml0cyBtZWFuIGl0J3MKKyAgIHdyaXRhYmxlLiAqLworI2RlZmluZSBfX21vZHVsZV9wYXJhbV9jYWxsKHByZWZpeCwgbmFtZSwgc2V0LCBnZXQsIGFyZywgcGVybSkJCVwKKwlzdGF0aWMgY2hhciBfX3BhcmFtX3N0cl8jI25hbWVbXSA9IHByZWZpeCAjbmFtZTsJCVwKKwlzdGF0aWMgc3RydWN0IGtlcm5lbF9wYXJhbSBjb25zdCBfX3BhcmFtXyMjbmFtZQkJCVwKKwlfX2F0dHJpYnV0ZV91c2VkX18JCQkJCQlcCisgICAgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCxfX3NlY3Rpb25fXyAoIl9fcGFyYW0iKSxhbGlnbmVkKHNpemVvZih2b2lkICopKSkpIFwKKwk9IHsgX19wYXJhbV9zdHJfIyNuYW1lLCBwZXJtLCBzZXQsIGdldCwgYXJnIH0KKworI2RlZmluZSBtb2R1bGVfcGFyYW1fY2FsbChuYW1lLCBzZXQsIGdldCwgYXJnLCBwZXJtKQkJCSAgICAgIFwKKwlfX21vZHVsZV9wYXJhbV9jYWxsKE1PRFVMRV9QQVJBTV9QUkVGSVgsIG5hbWUsIHNldCwgZ2V0LCBhcmcsIHBlcm0pCisKKy8qIEhlbHBlciBmdW5jdGlvbnM6IHR5cGUgaXMgYnl0ZSwgc2hvcnQsIHVzaG9ydCwgaW50LCB1aW50LCBsb25nLAorICAgdWxvbmcsIGNoYXJwLCBib29sIG9yIGludmJvb2wsIG9yIFhYWCBpZiB5b3UgZGVmaW5lIHBhcmFtX2dldF9YWFgsCisgICBwYXJhbV9zZXRfWFhYIGFuZCBwYXJhbV9jaGVja19YWFguICovCisjZGVmaW5lIG1vZHVsZV9wYXJhbV9uYW1lZChuYW1lLCB2YWx1ZSwgdHlwZSwgcGVybSkJCQkgICBcCisJcGFyYW1fY2hlY2tfIyN0eXBlKG5hbWUsICYodmFsdWUpKTsJCQkJICAgXAorCW1vZHVsZV9wYXJhbV9jYWxsKG5hbWUsIHBhcmFtX3NldF8jI3R5cGUsIHBhcmFtX2dldF8jI3R5cGUsICZ2YWx1ZSwgcGVybSk7IFwKKwlfX01PRFVMRV9QQVJNX1RZUEUobmFtZSwgI3R5cGUpCisKKyNkZWZpbmUgbW9kdWxlX3BhcmFtKG5hbWUsIHR5cGUsIHBlcm0pCQkJCVwKKwltb2R1bGVfcGFyYW1fbmFtZWQobmFtZSwgbmFtZSwgdHlwZSwgcGVybSkKKworLyogQWN0dWFsbHkgY29weSBzdHJpbmc6IG1heGxlbiBwYXJhbSBpcyB1c3VhbGx5IHNpemVvZihzdHJpbmcpLiAqLworI2RlZmluZSBtb2R1bGVfcGFyYW1fc3RyaW5nKG5hbWUsIHN0cmluZywgbGVuLCBwZXJtKQkJCVwKKwlzdGF0aWMgc3RydWN0IGtwYXJhbV9zdHJpbmcgX19wYXJhbV9zdHJpbmdfIyNuYW1lCQlcCisJCT0geyBsZW4sIHN0cmluZyB9OwkJCQkJXAorCW1vZHVsZV9wYXJhbV9jYWxsKG5hbWUsIHBhcmFtX3NldF9jb3B5c3RyaW5nLCBwYXJhbV9nZXRfc3RyaW5nLAlcCisJCSAgICZfX3BhcmFtX3N0cmluZ18jI25hbWUsIHBlcm0pOwkJCVwKKwlfX01PRFVMRV9QQVJNX1RZUEUobmFtZSwgInN0cmluZyIpCisKKy8qIENhbGxlZCBvbiBtb2R1bGUgaW5zZXJ0IG9yIGtlcm5lbCBib290ICovCitleHRlcm4gaW50IHBhcnNlX2FyZ3MoY29uc3QgY2hhciAqbmFtZSwKKwkJICAgICAgY2hhciAqYXJncywKKwkJICAgICAgc3RydWN0IGtlcm5lbF9wYXJhbSAqcGFyYW1zLAorCQkgICAgICB1bnNpZ25lZCBudW0sCisJCSAgICAgIGludCAoKnVua25vd24pKGNoYXIgKnBhcmFtLCBjaGFyICp2YWwpKTsKKworLyogQWxsIHRoZSBoZWxwZXIgZnVuY3Rpb25zICovCisvKiBUaGUgbWFjcm9zIHRvIGRvIGNvbXBpbGUtdGltZSB0eXBlIGNoZWNraW5nIHN0b2xlbiBmcm9tIEpha3ViCisgICBKZWxpbmVrLCB3aG8gSUlSQyBjYW1lIHVwIHdpdGggdGhpcyBpZGVhIGZvciB0aGUgMi40IG1vZHVsZSBpbml0IGNvZGUuICovCisjZGVmaW5lIF9fcGFyYW1fY2hlY2sobmFtZSwgcCwgdHlwZSkgXAorCXN0YXRpYyBpbmxpbmUgdHlwZSAqX19jaGVja18jI25hbWUodm9pZCkgeyByZXR1cm4ocCk7IH0KKworZXh0ZXJuIGludCBwYXJhbV9zZXRfYnl0ZShjb25zdCBjaGFyICp2YWwsIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKTsKK2V4dGVybiBpbnQgcGFyYW1fZ2V0X2J5dGUoY2hhciAqYnVmZmVyLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCk7CisjZGVmaW5lIHBhcmFtX2NoZWNrX2J5dGUobmFtZSwgcCkgX19wYXJhbV9jaGVjayhuYW1lLCBwLCB1bnNpZ25lZCBjaGFyKQorCitleHRlcm4gaW50IHBhcmFtX3NldF9zaG9ydChjb25zdCBjaGFyICp2YWwsIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKTsKK2V4dGVybiBpbnQgcGFyYW1fZ2V0X3Nob3J0KGNoYXIgKmJ1ZmZlciwgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApOworI2RlZmluZSBwYXJhbV9jaGVja19zaG9ydChuYW1lLCBwKSBfX3BhcmFtX2NoZWNrKG5hbWUsIHAsIHNob3J0KQorCitleHRlcm4gaW50IHBhcmFtX3NldF91c2hvcnQoY29uc3QgY2hhciAqdmFsLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCk7CitleHRlcm4gaW50IHBhcmFtX2dldF91c2hvcnQoY2hhciAqYnVmZmVyLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCk7CisjZGVmaW5lIHBhcmFtX2NoZWNrX3VzaG9ydChuYW1lLCBwKSBfX3BhcmFtX2NoZWNrKG5hbWUsIHAsIHVuc2lnbmVkIHNob3J0KQorCitleHRlcm4gaW50IHBhcmFtX3NldF9pbnQoY29uc3QgY2hhciAqdmFsLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCk7CitleHRlcm4gaW50IHBhcmFtX2dldF9pbnQoY2hhciAqYnVmZmVyLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCk7CisjZGVmaW5lIHBhcmFtX2NoZWNrX2ludChuYW1lLCBwKSBfX3BhcmFtX2NoZWNrKG5hbWUsIHAsIGludCkKKworZXh0ZXJuIGludCBwYXJhbV9zZXRfdWludChjb25zdCBjaGFyICp2YWwsIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKTsKK2V4dGVybiBpbnQgcGFyYW1fZ2V0X3VpbnQoY2hhciAqYnVmZmVyLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCk7CisjZGVmaW5lIHBhcmFtX2NoZWNrX3VpbnQobmFtZSwgcCkgX19wYXJhbV9jaGVjayhuYW1lLCBwLCB1bnNpZ25lZCBpbnQpCisKK2V4dGVybiBpbnQgcGFyYW1fc2V0X2xvbmcoY29uc3QgY2hhciAqdmFsLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCk7CitleHRlcm4gaW50IHBhcmFtX2dldF9sb25nKGNoYXIgKmJ1ZmZlciwgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApOworI2RlZmluZSBwYXJhbV9jaGVja19sb25nKG5hbWUsIHApIF9fcGFyYW1fY2hlY2sobmFtZSwgcCwgbG9uZykKKworZXh0ZXJuIGludCBwYXJhbV9zZXRfdWxvbmcoY29uc3QgY2hhciAqdmFsLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCk7CitleHRlcm4gaW50IHBhcmFtX2dldF91bG9uZyhjaGFyICpidWZmZXIsIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKTsKKyNkZWZpbmUgcGFyYW1fY2hlY2tfdWxvbmcobmFtZSwgcCkgX19wYXJhbV9jaGVjayhuYW1lLCBwLCB1bnNpZ25lZCBsb25nKQorCitleHRlcm4gaW50IHBhcmFtX3NldF9jaGFycChjb25zdCBjaGFyICp2YWwsIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKTsKK2V4dGVybiBpbnQgcGFyYW1fZ2V0X2NoYXJwKGNoYXIgKmJ1ZmZlciwgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApOworI2RlZmluZSBwYXJhbV9jaGVja19jaGFycChuYW1lLCBwKSBfX3BhcmFtX2NoZWNrKG5hbWUsIHAsIGNoYXIgKikKKworZXh0ZXJuIGludCBwYXJhbV9zZXRfYm9vbChjb25zdCBjaGFyICp2YWwsIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKTsKK2V4dGVybiBpbnQgcGFyYW1fZ2V0X2Jvb2woY2hhciAqYnVmZmVyLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCk7CisjZGVmaW5lIHBhcmFtX2NoZWNrX2Jvb2wobmFtZSwgcCkgX19wYXJhbV9jaGVjayhuYW1lLCBwLCBpbnQpCisKK2V4dGVybiBpbnQgcGFyYW1fc2V0X2ludmJvb2woY29uc3QgY2hhciAqdmFsLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCk7CitleHRlcm4gaW50IHBhcmFtX2dldF9pbnZib29sKGNoYXIgKmJ1ZmZlciwgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApOworI2RlZmluZSBwYXJhbV9jaGVja19pbnZib29sKG5hbWUsIHApIF9fcGFyYW1fY2hlY2sobmFtZSwgcCwgaW50KQorCisvKiBDb21tYS1zZXBhcmF0ZWQgYXJyYXk6ICpudW1wIGlzIHNldCB0byBudW1iZXIgdGhleSBhY3R1YWxseSBzcGVjaWZpZWQuICovCisjZGVmaW5lIG1vZHVsZV9wYXJhbV9hcnJheV9uYW1lZChuYW1lLCBhcnJheSwgdHlwZSwgbnVtcCwgcGVybSkJCVwKKwlzdGF0aWMgc3RydWN0IGtwYXJhbV9hcnJheSBfX3BhcmFtX2Fycl8jI25hbWUJCQlcCisJPSB7IEFSUkFZX1NJWkUoYXJyYXkpLCBudW1wLCBwYXJhbV9zZXRfIyN0eXBlLCBwYXJhbV9nZXRfIyN0eXBlLFwKKwkgICAgc2l6ZW9mKGFycmF5WzBdKSwgYXJyYXkgfTsJCQkJCVwKKwltb2R1bGVfcGFyYW1fY2FsbChuYW1lLCBwYXJhbV9hcnJheV9zZXQsIHBhcmFtX2FycmF5X2dldCwgCVwKKwkJCSAgJl9fcGFyYW1fYXJyXyMjbmFtZSwgcGVybSk7CQkJXAorCV9fTU9EVUxFX1BBUk1fVFlQRShuYW1lLCAiYXJyYXkgb2YgIiAjdHlwZSkKKworI2RlZmluZSBtb2R1bGVfcGFyYW1fYXJyYXkobmFtZSwgdHlwZSwgbnVtcCwgcGVybSkJCVwKKwltb2R1bGVfcGFyYW1fYXJyYXlfbmFtZWQobmFtZSwgbmFtZSwgdHlwZSwgbnVtcCwgcGVybSkKKworZXh0ZXJuIGludCBwYXJhbV9hcnJheV9zZXQoY29uc3QgY2hhciAqdmFsLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCk7CitleHRlcm4gaW50IHBhcmFtX2FycmF5X2dldChjaGFyICpidWZmZXIsIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKTsKKworZXh0ZXJuIGludCBwYXJhbV9zZXRfY29weXN0cmluZyhjb25zdCBjaGFyICp2YWwsIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKTsKK2V4dGVybiBpbnQgcGFyYW1fZ2V0X3N0cmluZyhjaGFyICpidWZmZXIsIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKTsKKworaW50IHBhcmFtX2FycmF5KGNvbnN0IGNoYXIgKm5hbWUsCisJCWNvbnN0IGNoYXIgKnZhbCwKKwkJdW5zaWduZWQgaW50IG1pbiwgdW5zaWduZWQgaW50IG1heCwKKwkJdm9pZCAqZWxlbSwgaW50IGVsZW1zaXplLAorCQlpbnQgKCpzZXQpKGNvbnN0IGNoYXIgKiwgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApLAorCQlpbnQgKm51bSk7CisKKy8qIGZvciBleHBvcnRpbmcgcGFyYW1ldGVycyBpbiAvc3lzL3BhcmFtZXRlcnMgKi8KKworc3RydWN0IG1vZHVsZTsKKworZXh0ZXJuIGludCBtb2R1bGVfcGFyYW1fc3lzZnNfc2V0dXAoc3RydWN0IG1vZHVsZSAqbW9kLAorCQkJCSAgICBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcGFyYW0sCisJCQkJICAgIHVuc2lnbmVkIGludCBudW1fcGFyYW1zKTsKKworZXh0ZXJuIHZvaWQgbW9kdWxlX3BhcmFtX3N5c2ZzX3JlbW92ZShzdHJ1Y3QgbW9kdWxlICptb2QpOworCisjZW5kaWYgLyogX0xJTlVYX01PRFVMRV9QQVJBTVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tb3VudC5oIGIvaW5jbHVkZS9saW51eC9tb3VudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiOGQzYjkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L21vdW50LmgKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqCisgKiBEZWZpbml0aW9ucyBmb3IgbW91bnQgaW50ZXJmYWNlLiBUaGlzIGRlc2NyaWJlcyB0aGUgaW4gdGhlIGtlcm5lbCBidWlsZCAKKyAqIGxpbmtlZGxpc3Qgd2l0aCBtb3VudGVkIGZpbGVzeXN0ZW1zLgorICoKKyAqIEF1dGhvcjogIE1hcmNvIHZhbiBXaWVyaW5nZW4gPG12d0BwbGFuZXRzLmVsbS5uZXQ+CisgKgorICogVmVyc2lvbjogJElkOiBtb3VudC5oLHYgMi4wIDE5OTYvMTEvMTcgMTY6NDg6MTQgbXZ3IEV4cCBtdncgJAorICoKKyAqLworI2lmbmRlZiBfTElOVVhfTU9VTlRfSAorI2RlZmluZSBfTElOVVhfTU9VTlRfSAorI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKworI2RlZmluZSBNTlRfTk9TVUlECTEKKyNkZWZpbmUgTU5UX05PREVWCTIKKyNkZWZpbmUgTU5UX05PRVhFQwk0CisKK3N0cnVjdCB2ZnNtb3VudAoreworCXN0cnVjdCBsaXN0X2hlYWQgbW50X2hhc2g7CisJc3RydWN0IHZmc21vdW50ICptbnRfcGFyZW50OwkvKiBmcyB3ZSBhcmUgbW91bnRlZCBvbiAqLworCXN0cnVjdCBkZW50cnkgKm1udF9tb3VudHBvaW50OwkvKiBkZW50cnkgb2YgbW91bnRwb2ludCAqLworCXN0cnVjdCBkZW50cnkgKm1udF9yb290OwkvKiByb290IG9mIHRoZSBtb3VudGVkIHRyZWUgKi8KKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKm1udF9zYjsJLyogcG9pbnRlciB0byBzdXBlcmJsb2NrICovCisJc3RydWN0IGxpc3RfaGVhZCBtbnRfbW91bnRzOwkvKiBsaXN0IG9mIGNoaWxkcmVuLCBhbmNob3JlZCBoZXJlICovCisJc3RydWN0IGxpc3RfaGVhZCBtbnRfY2hpbGQ7CS8qIGFuZCBnb2luZyB0aHJvdWdoIHRoZWlyIG1udF9jaGlsZCAqLworCWF0b21pY190IG1udF9jb3VudDsKKwlpbnQgbW50X2ZsYWdzOworCWludCBtbnRfZXhwaXJ5X21hcms7CQkvKiB0cnVlIGlmIG1hcmtlZCBmb3IgZXhwaXJ5ICovCisJY2hhciAqbW50X2Rldm5hbWU7CQkvKiBOYW1lIG9mIGRldmljZSBlLmcuIC9kZXYvZHNrL2hkYTEgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIG1udF9saXN0OworCXN0cnVjdCBsaXN0X2hlYWQgbW50X2ZzbGluazsJLyogbGluayBpbiBmcy1zcGVjaWZpYyBleHBpcnkgbGlzdCAqLworCXN0cnVjdCBuYW1lc3BhY2UgKm1udF9uYW1lc3BhY2U7IC8qIGNvbnRhaW5pbmcgbmFtZXNwYWNlICovCit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCB2ZnNtb3VudCAqbW50Z2V0KHN0cnVjdCB2ZnNtb3VudCAqbW50KQoreworCWlmIChtbnQpCisJCWF0b21pY19pbmMoJm1udC0+bW50X2NvdW50KTsKKwlyZXR1cm4gbW50OworfQorCitleHRlcm4gdm9pZCBfX21udHB1dChzdHJ1Y3QgdmZzbW91bnQgKm1udCk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfbW50cHV0KHN0cnVjdCB2ZnNtb3VudCAqbW50KQoreworCWlmIChtbnQpIHsKKwkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJm1udC0+bW50X2NvdW50KSkKKwkJCV9fbW50cHV0KG1udCk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbW50cHV0KHN0cnVjdCB2ZnNtb3VudCAqbW50KQoreworCWlmIChtbnQpIHsKKwkJbW50LT5tbnRfZXhwaXJ5X21hcmsgPSAwOworCQlfbW50cHV0KG1udCk7CisJfQorfQorCitleHRlcm4gdm9pZCBmcmVlX3Zmc21udChzdHJ1Y3QgdmZzbW91bnQgKm1udCk7CitleHRlcm4gc3RydWN0IHZmc21vdW50ICphbGxvY192ZnNtbnQoY29uc3QgY2hhciAqbmFtZSk7CitleHRlcm4gc3RydWN0IHZmc21vdW50ICpkb19rZXJuX21vdW50KGNvbnN0IGNoYXIgKmZzdHlwZSwgaW50IGZsYWdzLAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmRhdGEpOworCitzdHJ1Y3QgbmFtZWlkYXRhOworCitleHRlcm4gaW50IGRvX2FkZF9tb3VudChzdHJ1Y3QgdmZzbW91bnQgKm5ld21udCwgc3RydWN0IG5hbWVpZGF0YSAqbmQsCisJCQlpbnQgbW50X2ZsYWdzLCBzdHJ1Y3QgbGlzdF9oZWFkICpmc2xpc3QpOworCitleHRlcm4gdm9pZCBtYXJrX21vdW50c19mb3JfZXhwaXJ5KHN0cnVjdCBsaXN0X2hlYWQgKm1vdW50cyk7CisKK2V4dGVybiBzcGlubG9ja190IHZmc21vdW50X2xvY2s7CisKKyNlbmRpZgorI2VuZGlmIC8qIF9MSU5VWF9NT1VOVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21wYWdlLmggYi9pbmNsdWRlL2xpbnV4L21wYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVhMWIwMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbXBhZ2UuaApAQCAtMCwwICsxLDMxIEBACisvKgorICogaW5jbHVkZS9saW51eC9tcGFnZS5oCisgKgorICogQ29udGFpbnMgZGVjbGFyYXRpb25zIHJlbGF0ZWQgdG8gcHJlcGFyaW5nIGFuZCBzdWJtaXR0aW5nIEJJT1Mgd2hpY2ggY29udGFpbgorICogbXVsdGlwbGUgcGFnZWNhY2hlIHBhZ2VzLgorICovCisKKy8qCisgKiAoQW5kIG5vLCBpdCBkb2Vzbid0IGRvIHRoZSAjaWZkZWYgX19NUEFHRV9IIHRoaW5nLCBhbmQgaXQgZG9lc24ndCBkbworICogbmVzdGVkIGluY2x1ZGVzLiAgR2V0IGl0IHJpZ2h0IGluIHRoZSAuYyBmaWxlKS4KKyAqLworCitzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2w7Cit0eXBlZGVmIGludCAod3JpdGVwYWdlX3QpKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyk7CisKK2ludCBtcGFnZV9yZWFkcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBsaXN0X2hlYWQgKnBhZ2VzLAorCQkJCXVuc2lnbmVkIG5yX3BhZ2VzLCBnZXRfYmxvY2tfdCBnZXRfYmxvY2spOworaW50IG1wYWdlX3JlYWRwYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBnZXRfYmxvY2tfdCBnZXRfYmxvY2spOworaW50IG1wYWdlX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCisJCXN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjLCBnZXRfYmxvY2tfdCBnZXRfYmxvY2spOworaW50IG1wYWdlX3dyaXRlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZ2V0X2Jsb2NrX3QgKmdldF9ibG9jaywKKwkJc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpOworaW50IF9fbXBhZ2Vfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKKwkJc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMsIGdldF9ibG9ja190IGdldF9ibG9jaywKKwkJd3JpdGVwYWdlX3Qgd3JpdGVwYWdlKTsKKworc3RhdGljIGlubGluZSBpbnQKK2dlbmVyaWNfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCit7CisJcmV0dXJuIG1wYWdlX3dyaXRlcGFnZXMobWFwcGluZywgd2JjLCBOVUxMKTsKK30KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXF1ZXVlLmggYi9pbmNsdWRlL2xpbnV4L21xdWV1ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkYjlkNzUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L21xdWV1ZS5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qIENvcHlyaWdodCAoQykgMjAwMyBLcnp5c3p0b2YgQmVuZWR5Y3phayAmIE1pY2hhbCBXcm9uc2tpCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIEl0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvZnR3YXJlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmIF9MSU5VWF9NUVVFVUVfSAorI2RlZmluZSBfTElOVVhfTVFVRVVFX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNkZWZpbmUgTVFfUFJJT19NQVggCTMyNzY4CisvKiBwZXItdWlkIGxpbWl0IG9mIGtlcm5lbCBtZW1vcnkgdXNlZCBieSBtcXVldWUsIGluIGJ5dGVzICovCisjZGVmaW5lIE1RX0JZVEVTX01BWAk4MTkyMDAKKworc3RydWN0IG1xX2F0dHIgeworCWxvbmcJbXFfZmxhZ3M7CS8qIG1lc3NhZ2UgcXVldWUgZmxhZ3MJCQkqLworCWxvbmcJbXFfbWF4bXNnOwkvKiBtYXhpbXVtIG51bWJlciBvZiBtZXNzYWdlcwkJKi8KKwlsb25nCW1xX21zZ3NpemU7CS8qIG1heGltdW0gbWVzc2FnZSBzaXplCQkJKi8KKwlsb25nCW1xX2N1cm1zZ3M7CS8qIG51bWJlciBvZiBtZXNzYWdlcyBjdXJyZW50bHkgcXVldWVkCSovCisJbG9uZwlfX3Jlc2VydmVkWzRdOwkvKiBpZ25vcmVkIGZvciBpbnB1dCwgemVyb2VkIGZvciBvdXRwdXQgKi8KK307CisKKy8qCisgKiBTSUdFVl9USFJFQUQgaW1wbGVtZW50YXRpb246CisgKiBTSUdFVl9USFJFQUQgbXVzdCBiZSBpbXBsZW1lbnRlZCBpbiB1c2VyIHNwYWNlLiBJZiBTSUdFVl9USFJFQUQgaXMgcGFzc2VkCisgKiB0byBtcV9ub3RpZnksIHRoZW4KKyAqIC0gc2lnZXZfc2lnbm8gbXVzdCBiZSB0aGUgZmlsZSBkZXNjcmlwdG9yIG9mIGFuIEFGX05FVExJTksgc29ja2V0LiBJdCdzIG5vdAorICogICBuZWNlc3NhcnkgdGhhdCB0aGUgc29ja2V0IGlzIGJvdW5kLgorICogLSBzaWdldl92YWx1ZS5zaXZhbF9wdHIgbXVzdCBwb2ludCB0byBhIGNvb2tpZSB0aGF0IGlzIE5PVElGWV9DT09LSUVfTEVOCisgKiAgIGJ5dGVzIGxvbmcuCisgKiBJZiB0aGUgbm90aWZpY2F0aW9uIGlzIHRyaWdnZXJlZCwgdGhlbiB0aGUgY29va2llIGlzIHNlbnQgdG8gdGhlIG5ldGxpbmsKKyAqIHNvY2tldC4gVGhlIGxhc3QgYnl0ZSBvZiB0aGUgY29va2llIGlzIHJlcGxhY2VkIHdpdGggdGhlIE5PVElGWV8/PyBjb2RlczoKKyAqIE5PVElGWV9XT0tFTlVQIGlmIHRoZSBub3RpZmljYXRpb24gZ290IHRyaWdnZXJlZCwgTk9USUZZX1JFTU9WRUQgaWYgaXQgd2FzCisgKiByZW1vdmVkLCBlaXRoZXIgZHVlIHRvIGEgY2xvc2UoKSBvbiB0aGUgbWVzc2FnZSBxdWV1ZSBmZCBvciBkdWUgdG8gYQorICogbXFfbm90aWZ5KCkgdGhhdCByZW1vdmVkIHRoZSBub3RpZmljYXRpb24uCisgKi8KKyNkZWZpbmUgTk9USUZZX05PTkUJMAorI2RlZmluZSBOT1RJRllfV09LRU5VUAkxCisjZGVmaW5lIE5PVElGWV9SRU1PVkVECTIKKworI2RlZmluZSBOT1RJRllfQ09PS0lFX0xFTgkzMgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXJvdXRlLmggYi9pbmNsdWRlL2xpbnV4L21yb3V0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwNWQ1NGEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L21yb3V0ZS5oCkBAIC0wLDAgKzEsMjI2IEBACisjaWZuZGVmIF9fTElOVVhfTVJPVVRFX0gKKyNkZWZpbmUgX19MSU5VWF9NUk9VVEVfSAorCisjaW5jbHVkZSA8bGludXgvc29ja2lvcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisKKy8qCisgKglCYXNlZCBvbiB0aGUgTVJPVVRJTkcgMy41IGRlZmluZXMgcHJpbWFyaWx5IHRvIGtlZXAKKyAqCXNvdXJjZSBjb21wYXRpYmlsaXR5IHdpdGggQlNELgorICoKKyAqCVNlZSB0aGUgbXJvdXRlZCBjb2RlIGZvciB0aGUgb3JpZ2luYWwgaGlzdG9yeS4KKyAqCisgKiAgICAgIFByb3RvY29sIEluZGVwZW5kZW50IE11bHRpY2FzdCAoUElNKSBkYXRhIHN0cnVjdHVyZXMgaW5jbHVkZWQKKyAqICAgICAgQ2FybG9zIFBpY290byAoY2FwQGRpLmZjLnVsLnB0KQorICoKKyAqLworCisjZGVmaW5lIE1SVF9CQVNFCTIwMAorI2RlZmluZSBNUlRfSU5JVAkoTVJUX0JBU0UpCS8qIEFjdGl2YXRlIHRoZSBrZXJuZWwgbXJvdXRlIGNvZGUgCSovCisjZGVmaW5lIE1SVF9ET05FCShNUlRfQkFTRSsxKQkvKiBTaHV0ZG93biB0aGUga2VybmVsIG1yb3V0ZQkJKi8KKyNkZWZpbmUgTVJUX0FERF9WSUYJKE1SVF9CQVNFKzIpCS8qIEFkZCBhIHZpcnR1YWwgaW50ZXJmYWNlCQkqLworI2RlZmluZSBNUlRfREVMX1ZJRgkoTVJUX0JBU0UrMykJLyogRGVsZXRlIGEgdmlydHVhbCBpbnRlcmZhY2UJCSovCisjZGVmaW5lIE1SVF9BRERfTUZDCShNUlRfQkFTRSs0KQkvKiBBZGQgYSBtdWx0aWNhc3QgZm9yd2FyZGluZyBlbnRyeQkqLworI2RlZmluZSBNUlRfREVMX01GQwkoTVJUX0JBU0UrNSkJLyogRGVsZXRlIGEgbXVsdGljYXN0IGZvcndhcmRpbmcgZW50cnkJKi8KKyNkZWZpbmUgTVJUX1ZFUlNJT04JKE1SVF9CQVNFKzYpCS8qIEdldCB0aGUga2VybmVsIG11bHRpY2FzdCB2ZXJzaW9uCSovCisjZGVmaW5lIE1SVF9BU1NFUlQJKE1SVF9CQVNFKzcpCS8qIEFjdGl2YXRlIFBJTSBhc3NlcnQgbW9kZQkJKi8KKyNkZWZpbmUgTVJUX1BJTQkJKE1SVF9CQVNFKzgpCS8qIGVuYWJsZSBQSU0gY29kZQkqLworCisjZGVmaW5lIFNJT0NHRVRWSUZDTlQJU0lPQ1BST1RPUFJJVkFURQkvKiBJUCBwcm90b2NvbCBwcml2YXRlcyAqLworI2RlZmluZSBTSU9DR0VUU0dDTlQJKFNJT0NQUk9UT1BSSVZBVEUrMSkKKyNkZWZpbmUgU0lPQ0dFVFJQRgkoU0lPQ1BST1RPUFJJVkFURSsyKQorCisjZGVmaW5lIE1BWFZJRlMJCTMyCQordHlwZWRlZiB1bnNpZ25lZCBsb25nIHZpZmJpdG1hcF90OwkvKiBVc2VyIG1vZGUgY29kZSBkZXBlbmRzIG9uIHRoaXMgbG90ICovCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHZpZmlfdDsKKyNkZWZpbmUgQUxMX1ZJRlMJKCh2aWZpX3QpKC0xKSkKKworLyoKKyAqCVNhbWUgaWRlYSBhcyBzZWxlY3QKKyAqLworIAorI2RlZmluZSBWSUZNX1NFVChuLG0pCSgobSl8PSgxPDwobikpKQorI2RlZmluZSBWSUZNX0NMUihuLG0pCSgobSkmPX4oMTw8KG4pKSkKKyNkZWZpbmUgVklGTV9JU1NFVChuLG0pCSgobSkmKDE8PChuKSkpCisjZGVmaW5lIFZJRk1fQ0xSQUxMKG0pCSgobSk9MCkKKyNkZWZpbmUgVklGTV9DT1BZKG1mcm9tLG10bykJKChtdG8pPShtZnJvbSkpCisjZGVmaW5lIFZJRk1fU0FNRShtMSxtMikJKChtMSk9PShtMikpCisKKy8qCisgKglQYXNzZWQgYnkgbXJvdXRlZCBmb3IgYW4gTVJUX0FERF9WSUYgLSBhZ2FpbiB3ZSB1c2UgdGhlCisgKgltcm91dGVkIDMuNiBzdHJ1Y3R1cmVzIGZvciBjb21wYXRpYmlsaXR5CisgKi8KKyAKK3N0cnVjdCB2aWZjdGwgeworCXZpZmlfdAl2aWZjX3ZpZmk7CQkvKiBJbmRleCBvZiBWSUYgKi8KKwl1bnNpZ25lZCBjaGFyIHZpZmNfZmxhZ3M7CS8qIFZJRkZfIGZsYWdzICovCisJdW5zaWduZWQgY2hhciB2aWZjX3RocmVzaG9sZDsJLyogdHRsIGxpbWl0ICovCisJdW5zaWduZWQgaW50IHZpZmNfcmF0ZV9saW1pdDsJLyogUmF0ZSBsaW1pdGVyIHZhbHVlcyAoTkkpICovCisJc3RydWN0IGluX2FkZHIgdmlmY19sY2xfYWRkcjsJLyogT3VyIGFkZHJlc3MgKi8KKwlzdHJ1Y3QgaW5fYWRkciB2aWZjX3JtdF9hZGRyOwkvKiBJUElQIHR1bm5lbCBhZGRyICovCit9OworCisjZGVmaW5lIFZJRkZfVFVOTkVMCTB4MQkvKiBJUElQIHR1bm5lbCAqLworI2RlZmluZSBWSUZGX1NSQ1JUCTB4MgkvKiBOSSAqLworI2RlZmluZSBWSUZGX1JFR0lTVEVSCTB4NAkvKiByZWdpc3RlciB2aWYJKi8KKworLyoKKyAqCUNhY2hlIG1hbmlwdWxhdGlvbiBzdHJ1Y3R1cmVzIGZvciBtcm91dGVkIGFuZCBQSU1kCisgKi8KKyAKK3N0cnVjdCBtZmNjdGwKK3sKKwlzdHJ1Y3QgaW5fYWRkciBtZmNjX29yaWdpbjsJCS8qIE9yaWdpbiBvZiBtY2FzdAkqLworCXN0cnVjdCBpbl9hZGRyIG1mY2NfbWNhc3RncnA7CQkvKiBHcm91cCBpbiBxdWVzdGlvbgkqLworCXZpZmlfdAltZmNjX3BhcmVudDsJCQkvKiBXaGVyZSBpdCBhcnJpdmVkCSovCisJdW5zaWduZWQgY2hhciBtZmNjX3R0bHNbTUFYVklGU107CS8qIFdoZXJlIGl0IGlzIGdvaW5nCSovCisJdW5zaWduZWQgaW50IG1mY2NfcGt0X2NudDsJCS8qIHBrdCBjb3VudCBmb3Igc3JjLWdycCAqLworCXVuc2lnbmVkIGludCBtZmNjX2J5dGVfY250OworCXVuc2lnbmVkIGludCBtZmNjX3dyb25nX2lmOworCWludAkgICAgIG1mY2NfZXhwaXJlOworfTsKKworLyogCisgKglHcm91cCBjb3VudCByZXRyaWV2YWwgZm9yIG1yb3V0ZWQKKyAqLworIAorc3RydWN0IHNpb2Nfc2dfcmVxCit7CisJc3RydWN0IGluX2FkZHIgc3JjOworCXN0cnVjdCBpbl9hZGRyIGdycDsKKwl1bnNpZ25lZCBsb25nIHBrdGNudDsKKwl1bnNpZ25lZCBsb25nIGJ5dGVjbnQ7CisJdW5zaWduZWQgbG9uZyB3cm9uZ19pZjsKK307CisKKy8qCisgKglUbyBnZXQgdmlmIHBhY2tldCBjb3VudHMKKyAqLworCitzdHJ1Y3Qgc2lvY192aWZfcmVxCit7CisJdmlmaV90CXZpZmk7CQkvKiBXaGljaCBpZmFjZSAqLworCXVuc2lnbmVkIGxvbmcgaWNvdW50OwkvKiBJbiBwYWNrZXRzICovCisJdW5zaWduZWQgbG9uZyBvY291bnQ7CS8qIE91dCBwYWNrZXRzICovCisJdW5zaWduZWQgbG9uZyBpYnl0ZXM7CS8qIEluIGJ5dGVzICovCisJdW5zaWduZWQgbG9uZyBvYnl0ZXM7CS8qIE91dCBieXRlcyAqLworfTsKKworLyoKKyAqCVRoaXMgaXMgdGhlIGZvcm1hdCB0aGUgbXJvdXRlIGRhZW1vbiBleHBlY3RzIHRvIHNlZSBJR01QIGNvbnRyb2wKKyAqCWRhdGEuIE1hZ2ljYWxseSBoYXBwZW5zIHRvIGJlIGxpa2UgYW4gSVAgcGFja2V0IGFzIHBlciB0aGUgb3JpZ2luYWwKKyAqLworIAorc3RydWN0IGlnbXBtc2cKK3sKKwlfX3UzMiB1bnVzZWQxLHVudXNlZDI7CisJdW5zaWduZWQgY2hhciBpbV9tc2d0eXBlOwkJLyogV2hhdCBpcyB0aGlzICovCisJdW5zaWduZWQgY2hhciBpbV9tYno7CQkJLyogTXVzdCBiZSB6ZXJvICovCisJdW5zaWduZWQgY2hhciBpbV92aWY7CQkJLyogSW50ZXJmYWNlICh0aGlzIG91Z2h0IHRvIGJlIGEgdmlmaV90ISkgKi8KKwl1bnNpZ25lZCBjaGFyIHVudXNlZDM7CisJc3RydWN0IGluX2FkZHIgaW1fc3JjLGltX2RzdDsKK307CisKKy8qCisgKglUaGF0J3MgYWxsIHVzZXJtb2RlIGZvbGtzCisgKi8KKworI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxuZXQvc29jay5oPgorCitleHRlcm4gaW50IGlwX21yb3V0ZV9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICosIGludCwgY2hhciBfX3VzZXIgKiwgaW50KTsKK2V4dGVybiBpbnQgaXBfbXJvdXRlX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKiwgaW50LCBjaGFyIF9fdXNlciAqLCBpbnQgX191c2VyICopOworZXh0ZXJuIGludCBpcG1yX2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgdm9pZCBfX3VzZXIgKmFyZyk7CitleHRlcm4gdm9pZCBpcF9tcl9pbml0KHZvaWQpOworCisKK3N0cnVjdCB2aWZfZGV2aWNlCit7CisJc3RydWN0IG5ldF9kZXZpY2UgCSpkZXY7CQkJLyogRGV2aWNlIHdlIGFyZSB1c2luZyAqLworCXVuc2lnbmVkIGxvbmcJYnl0ZXNfaW4sYnl0ZXNfb3V0OworCXVuc2lnbmVkIGxvbmcJcGt0X2luLHBrdF9vdXQ7CQkvKiBTdGF0aXN0aWNzIAkJCSovCisJdW5zaWduZWQgbG9uZwlyYXRlX2xpbWl0OwkJLyogVHJhZmZpYyBzaGFwaW5nIChOSSkgCSovCisJdW5zaWduZWQgY2hhcgl0aHJlc2hvbGQ7CQkvKiBUVEwgdGhyZXNob2xkIAkJKi8KKwl1bnNpZ25lZCBzaG9ydAlmbGFnczsJCQkvKiBDb250cm9sIGZsYWdzIAkJKi8KKwlfX3UzMgkJbG9jYWwscmVtb3RlOwkJLyogQWRkcmVzc2VzKHJlbW90ZSBmb3IgdHVubmVscykqLworCWludAkJbGluazsJCQkvKiBQaHlzaWNhbCBpbnRlcmZhY2UgaW5kZXgJKi8KK307CisKKyNkZWZpbmUgVklGRl9TVEFUSUMgMHg4MDAwCisKK3N0cnVjdCBtZmNfY2FjaGUgCit7CisJc3RydWN0IG1mY19jYWNoZSAqbmV4dDsJCQkvKiBOZXh0IGVudHJ5IG9uIGNhY2hlIGxpbmUgCSovCisJX191MzIgbWZjX21jYXN0Z3JwOwkJCS8qIEdyb3VwIHRoZSBlbnRyeSBiZWxvbmdzIHRvIAkqLworCV9fdTMyIG1mY19vcmlnaW47CQkJLyogU291cmNlIG9mIHBhY2tldCAJCSovCisJdmlmaV90IG1mY19wYXJlbnQ7CQkJLyogU291cmNlIGludGVyZmFjZQkJKi8KKwlpbnQgbWZjX2ZsYWdzOwkJCQkvKiBGbGFncyBvbiBsaW5lCQkqLworCisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJdW5zaWduZWQgbG9uZyBleHBpcmVzOworCQkJc3RydWN0IHNrX2J1ZmZfaGVhZCB1bnJlc29sdmVkOwkvKiBVbnJlc29sdmVkIGJ1ZmZlcnMJCSovCisJCX0gdW5yZXM7CisJCXN0cnVjdCB7CisJCQl1bnNpZ25lZCBsb25nIGxhc3RfYXNzZXJ0OworCQkJaW50IG1pbnZpZjsKKwkJCWludCBtYXh2aWY7CisJCQl1bnNpZ25lZCBsb25nIGJ5dGVzOworCQkJdW5zaWduZWQgbG9uZyBwa3Q7CisJCQl1bnNpZ25lZCBsb25nIHdyb25nX2lmOworCQkJdW5zaWduZWQgY2hhciB0dGxzW01BWFZJRlNdOwkvKiBUVEwgdGhyZXNob2xkcwkJKi8KKwkJfSByZXM7CisJfSBtZmNfdW47Cit9OworCisjZGVmaW5lIE1GQ19TVEFUSUMJCTEKKyNkZWZpbmUgTUZDX05PVElGWQkJMgorCisjZGVmaW5lIE1GQ19MSU5FUwkJNjQKKworI2lmZGVmIF9fQklHX0VORElBTgorI2RlZmluZSBNRkNfSEFTSChhLGIpCSgoKChhKT4+MjQpXigoYik+PjI2KSkmKE1GQ19MSU5FUy0xKSkKKyNlbHNlCisjZGVmaW5lIE1GQ19IQVNIKGEsYikJKCgoYSleKChiKT4+MikpJihNRkNfTElORVMtMSkpCisjZW5kaWYJCQorCisjZW5kaWYKKworCisjZGVmaW5lIE1GQ19BU1NFUlRfVEhSRVNIICgzKkhaKQkJLyogTWF4aW1hbCBmcmVxLiBvZiBhc3NlcnRzICovCisKKy8qCisgKglQc2V1ZG8gbWVzc2FnZXMgdXNlZCBieSBtcm91dGVkCisgKi8KKworI2RlZmluZSBJR01QTVNHX05PQ0FDSEUJCTEJCS8qIEtlcm4gY2FjaGUgZmlsbCByZXF1ZXN0IHRvIG1yb3V0ZWQgKi8KKyNkZWZpbmUgSUdNUE1TR19XUk9OR1ZJRgkyCQkvKiBGb3IgUElNIGFzc2VydCBwcm9jZXNzaW5nICh1bnVzZWQpICovCisjZGVmaW5lIElHTVBNU0dfV0hPTEVQS1QJMwkJLyogRm9yIFBJTSBSZWdpc3RlciBwcm9jZXNzaW5nICovCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNkZWZpbmUgUElNX1YxX1ZFUlNJT04JCV9fY29uc3RhbnRfaHRvbmwoMHgxMDAwMDAwMCkKKyNkZWZpbmUgUElNX1YxX1JFR0lTVEVSCQkxCisKKyNkZWZpbmUgUElNX1ZFUlNJT04JCTIKKyNkZWZpbmUgUElNX1JFR0lTVEVSCQkxCisKKyNkZWZpbmUgUElNX05VTExfUkVHSVNURVIJX19jb25zdGFudF9odG9ubCgweDQwMDAwMDAwKQorCisvKiBQSU12MiByZWdpc3RlciBtZXNzYWdlIGhlYWRlciBsYXlvdXQgKGlldGYtZHJhZnQtaWRtci1waW12c20tdjItMDAucHMgKi8KKworc3RydWN0IHBpbXJlZ2hkcgoreworCV9fdTgJdHlwZTsKKwlfX3U4CXJlc2VydmVkOworCV9fdTE2CWNzdW07CisJX191MzIJZmxhZ3M7Cit9OworCitleHRlcm4gaW50IHBpbV9yY3ZfdjEoc3RydWN0IHNrX2J1ZmYgKik7CisKK3N0cnVjdCBydG1zZzsKK2V4dGVybiBpbnQgaXBtcl9nZXRfcm91dGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHJ0bXNnICpydG0sIGludCBub3dhaXQpOworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tc2Rvc19mcy5oIGIvaW5jbHVkZS9saW51eC9tc2Rvc19mcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhM2QyNzIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L21zZG9zX2ZzLmgKQEAgLTAsMCArMSw0MTIgQEAKKyNpZm5kZWYgX0xJTlVYX01TRE9TX0ZTX0gKKyNkZWZpbmUgX0xJTlVYX01TRE9TX0ZTX0gKKworLyoKKyAqIFRoZSBNUy1ET1MgZmlsZXN5c3RlbSBjb25zdGFudHMvc3RydWN0dXJlcworICovCisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorCisjZGVmaW5lIFNFQ1RPUl9TSVpFCTUxMgkJLyogc2VjdG9yIHNpemUgKGJ5dGVzKSAqLworI2RlZmluZSBTRUNUT1JfQklUUwk5CQkvKiBsb2cyKFNFQ1RPUl9TSVpFKSAqLworI2RlZmluZSBNU0RPU19EUEIJKE1TRE9TX0RQUykJLyogZGlyIGVudHJpZXMgcGVyIGJsb2NrICovCisjZGVmaW5lIE1TRE9TX0RQQl9CSVRTCTQJCS8qIGxvZzIoTVNET1NfRFBCKSAqLworI2RlZmluZSBNU0RPU19EUFMJKFNFQ1RPUl9TSVpFIC8gc2l6ZW9mKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkpKQorI2RlZmluZSBNU0RPU19EUFNfQklUUwk0CQkvKiBsb2cyKE1TRE9TX0RQUykgKi8KKyNkZWZpbmUgQ0ZfTEVfVyh2KQlsZTE2X3RvX2NwdSh2KQorI2RlZmluZSBDRl9MRV9MKHYpCWxlMzJfdG9fY3B1KHYpCisjZGVmaW5lIENUX0xFX1codikJY3B1X3RvX2xlMTYodikKKyNkZWZpbmUgQ1RfTEVfTCh2KQljcHVfdG9fbGUzMih2KQorCisKKyNkZWZpbmUgTVNET1NfU1VQRVJfTUFHSUMgMHg0ZDQ0IC8qIE1EICovCisKKyNkZWZpbmUgTVNET1NfUk9PVF9JTk8JMQkvKiA9PSBNSU5JWF9ST09UX0lOTyAqLworI2RlZmluZSBNU0RPU19ESVJfQklUUwk1CS8qIGxvZzIoc2l6ZW9mKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkpKSAqLworCisvKiBkaXJlY3RvcnkgbGltaXQgKi8KKyNkZWZpbmUgRkFUX01BWF9ESVJfRU5UUklFUwkoNjU1MzYpCisjZGVmaW5lIEZBVF9NQVhfRElSX1NJWkUJKEZBVF9NQVhfRElSX0VOVFJJRVMgPDwgTVNET1NfRElSX0JJVFMpCisKKyNkZWZpbmUgQVRUUl9OT05FCTAJLyogbm8gYXR0cmlidXRlIGJpdHMgKi8KKyNkZWZpbmUgQVRUUl9STwkJMQkvKiByZWFkLW9ubHkgKi8KKyNkZWZpbmUgQVRUUl9ISURERU4JMgkvKiBoaWRkZW4gKi8KKyNkZWZpbmUgQVRUUl9TWVMJNAkvKiBzeXN0ZW0gKi8KKyNkZWZpbmUgQVRUUl9WT0xVTUUJOAkvKiB2b2x1bWUgbGFiZWwgKi8KKyNkZWZpbmUgQVRUUl9ESVIJMTYJLyogZGlyZWN0b3J5ICovCisjZGVmaW5lIEFUVFJfQVJDSAkzMgkvKiBhcmNoaXZlZCAqLworCisvKiBhdHRyaWJ1dGUgYml0cyB0aGF0IGFyZSBjb3BpZWQgImFzIGlzIiAqLworI2RlZmluZSBBVFRSX1VOVVNFRAkoQVRUUl9WT0xVTUUgfCBBVFRSX0FSQ0ggfCBBVFRSX1NZUyB8IEFUVFJfSElEREVOKQorLyogYml0cyB0aGF0IGFyZSB1c2VkIGJ5IHRoZSBXaW5kb3dzIDk1L1dpbmRvd3MgTlQgZXh0ZW5kZWQgRkFUICovCisjZGVmaW5lIEFUVFJfRVhUCShBVFRSX1JPIHwgQVRUUl9ISURERU4gfCBBVFRSX1NZUyB8IEFUVFJfVk9MVU1FKQorCisjZGVmaW5lIENBU0VfTE9XRVJfQkFTRQk4CS8qIGJhc2UgaXMgbG93ZXIgY2FzZSAqLworI2RlZmluZSBDQVNFX0xPV0VSX0VYVAkxNgkvKiBleHRlbnNpb24gaXMgbG93ZXIgY2FzZSAqLworCisjZGVmaW5lIERFTEVURURfRkxBRwkweGU1CS8qIG1hcmtzIGZpbGUgYXMgZGVsZXRlZCB3aGVuIGluIG5hbWVbMF0gKi8KKyNkZWZpbmUgSVNfRlJFRShuKQkoISoobikgfHwgKihuKSA9PSBERUxFVEVEX0ZMQUcpCisKKy8qIHZhbGlkIGZpbGUgbW9kZSBiaXRzICovCisjZGVmaW5lIE1TRE9TX1ZBTElEX01PREUgKFNfSUZSRUcgfCBTX0lGRElSIHwgU19JUldYVSB8IFNfSVJXWEcgfCBTX0lSV1hPKQorLyogQ29udmVydCBhdHRyaWJ1dGUgYml0cyBhbmQgYSBtYXNrIHRvIHRoZSBVTklYIG1vZGUuICovCisjZGVmaW5lIE1TRE9TX01LTU9ERShhLCBtKSAobSAmIChhICYgQVRUUl9STyA/IFNfSVJVR098U19JWFVHTyA6IFNfSVJXWFVHTykpCisKKyNkZWZpbmUgTVNET1NfTkFNRQkxMQkvKiBtYXhpbXVtIG5hbWUgbGVuZ3RoICovCisjZGVmaW5lIE1TRE9TX0xPTkdOQU1FCTI1NgkvKiBtYXhpbXVtIG5hbWUgbGVuZ3RoICovCisjZGVmaW5lIE1TRE9TX1NMT1RTCTIxCS8qIG1heCAjIG9mIHNsb3RzIGZvciBzaG9ydCBhbmQgbG9uZyBuYW1lcyAqLworI2RlZmluZSBNU0RPU19ET1QJIi4gICAgICAgICAgIgkvKiAiLiIsIHBhZGRlZCB0byBNU0RPU19OQU1FIGNoYXJzICovCisjZGVmaW5lIE1TRE9TX0RPVERPVAkiLi4gICAgICAgICAiCS8qICIuLiIsIHBhZGRlZCB0byBNU0RPU19OQU1FIGNoYXJzICovCisKKy8qIG1lZGlhIG9mIGJvb3Qgc2VjdG9yICovCisjZGVmaW5lIEZBVF9WQUxJRF9NRURJQSh4KQkoKDB4RjggPD0gKHgpICYmICh4KSA8PSAweEZGKSB8fCAoeCkgPT0gMHhGMCkKKyNkZWZpbmUgRkFUX0ZJUlNUX0VOVChzLCB4KQkoKE1TRE9TX1NCKHMpLT5mYXRfYml0cyA9PSAzMiA/IDB4MEZGRkZGMDAgOiBcCisJTVNET1NfU0IocyktPmZhdF9iaXRzID09IDE2ID8gMHhGRjAwIDogMHhGMDApIHwgKHgpKQorCisvKiBzdGFydCBvZiBkYXRhIGNsdXN0ZXIncyBlbnRyeSAobnVtYmVyIG9mIHJlc2VydmVkIGNsdXN0ZXJzKSAqLworI2RlZmluZSBGQVRfU1RBUlRfRU5UCTIKKworLyogbWF4aW11bSBudW1iZXIgb2YgY2x1c3RlcnMgKi8KKyNkZWZpbmUgTUFYX0ZBVDEyCTB4RkY0CisjZGVmaW5lIE1BWF9GQVQxNgkweEZGRjQKKyNkZWZpbmUgTUFYX0ZBVDMyCTB4MEZGRkZGRjYKKyNkZWZpbmUgTUFYX0ZBVChzKQkoTVNET1NfU0IocyktPmZhdF9iaXRzID09IDMyID8gTUFYX0ZBVDMyIDogXAorCU1TRE9TX1NCKHMpLT5mYXRfYml0cyA9PSAxNiA/IE1BWF9GQVQxNiA6IE1BWF9GQVQxMikKKworLyogYmFkIGNsdXN0ZXIgbWFyayAqLworI2RlZmluZSBCQURfRkFUMTIJMHhGRjcKKyNkZWZpbmUgQkFEX0ZBVDE2CTB4RkZGNworI2RlZmluZSBCQURfRkFUMzIJMHgwRkZGRkZGNworCisvKiBzdGFuZGFyZCBFT0YgKi8KKyNkZWZpbmUgRU9GX0ZBVDEyCTB4RkZGCisjZGVmaW5lIEVPRl9GQVQxNgkweEZGRkYKKyNkZWZpbmUgRU9GX0ZBVDMyCTB4MEZGRkZGRkYKKworI2RlZmluZSBGQVRfRU5UX0ZSRUUJKDApCisjZGVmaW5lIEZBVF9FTlRfQkFECShCQURfRkFUMzIpCisjZGVmaW5lIEZBVF9FTlRfRU9GCShFT0ZfRkFUMzIpCisKKyNkZWZpbmUgRkFUX0ZTSU5GT19TSUcxCTB4NDE2MTUyNTIKKyNkZWZpbmUgRkFUX0ZTSU5GT19TSUcyCTB4NjE0MTcyNzIKKyNkZWZpbmUgSVNfRlNJTkZPKHgpCShsZTMyX3RvX2NwdSgoeCktPnNpZ25hdHVyZTEpID09IEZBVF9GU0lORk9fU0lHMSBcCisJCQkgJiYgbGUzMl90b19jcHUoKHgpLT5zaWduYXR1cmUyKSA9PSBGQVRfRlNJTkZPX1NJRzIpCisKKy8qCisgKiBpb2N0bCBjb21tYW5kcworICovCisjZGVmaW5lIFZGQVRfSU9DVExfUkVBRERJUl9CT1RICQlfSU9SKCdyJywgMSwgc3RydWN0IGRpcmVudCBbMl0pCisjZGVmaW5lIFZGQVRfSU9DVExfUkVBRERJUl9TSE9SVAlfSU9SKCdyJywgMiwgc3RydWN0IGRpcmVudCBbMl0pCisvKiA8bGludXgvdmlkZW90ZXh0Lmg+IGhhcyB1c2VkIDB4NzIgKCdyJykgaW4gY29sbGlzaW9uLCBzbyBza2lwIGEgZmV3ICovCisjZGVmaW5lIEZBVF9JT0NUTF9HRVRfQVRUUklCVVRFUwlfSU9SKCdyJywgMHgxMCwgX191MzIpCisjZGVmaW5lIEZBVF9JT0NUTF9TRVRfQVRUUklCVVRFUwlfSU9XKCdyJywgMHgxMSwgX191MzIpCisKKy8qCisgKiB2ZmF0IHNob3J0bmFtZSBmbGFncworICovCisjZGVmaW5lIFZGQVRfU0ZOX0RJU1BMQVlfTE9XRVIJMHgwMDAxIC8qIGNvbnZlcnQgdG8gbG93ZXJjYXNlIGZvciBkaXNwbGF5ICovCisjZGVmaW5lIFZGQVRfU0ZOX0RJU1BMQVlfV0lOOTUJMHgwMDAyIC8qIGVtdWxhdGUgd2luOTUgcnVsZSBmb3IgZGlzcGxheSAqLworI2RlZmluZSBWRkFUX1NGTl9ESVNQTEFZX1dJTk5UCTB4MDAwNCAvKiBlbXVsYXRlIHdpbm50IHJ1bGUgZm9yIGRpc3BsYXkgKi8KKyNkZWZpbmUgVkZBVF9TRk5fQ1JFQVRFX1dJTjk1CTB4MDEwMCAvKiBlbXVsYXRlIHdpbjk1IHJ1bGUgZm9yIGNyZWF0ZSAqLworI2RlZmluZSBWRkFUX1NGTl9DUkVBVEVfV0lOTlQJMHgwMjAwIC8qIGVtdWxhdGUgd2lubnQgcnVsZSBmb3IgY3JlYXRlICovCisKK3N0cnVjdCBmYXRfYm9vdF9zZWN0b3IgeworCV9fdTgJaWdub3JlZFszXTsJLyogQm9vdCBzdHJhcCBzaG9ydCBvciBuZWFyIGp1bXAgKi8KKwlfX3U4CXN5c3RlbV9pZFs4XTsJLyogTmFtZSAtIGNhbiBiZSB1c2VkIHRvIHNwZWNpYWwgY2FzZQorCQkJCSAgIHBhcnRpdGlvbiBtYW5hZ2VyIHZvbHVtZXMgKi8KKwlfX3U4CXNlY3Rvcl9zaXplWzJdOwkvKiBieXRlcyBwZXIgbG9naWNhbCBzZWN0b3IgKi8KKwlfX3U4CXNlY19wZXJfY2x1czsJLyogc2VjdG9ycy9jbHVzdGVyICovCisJX19sZTE2CXJlc2VydmVkOwkvKiByZXNlcnZlZCBzZWN0b3JzICovCisJX191OAlmYXRzOwkJLyogbnVtYmVyIG9mIEZBVHMgKi8KKwlfX3U4CWRpcl9lbnRyaWVzWzJdOwkvKiByb290IGRpcmVjdG9yeSBlbnRyaWVzICovCisJX191OAlzZWN0b3JzWzJdOwkvKiBudW1iZXIgb2Ygc2VjdG9ycyAqLworCV9fdTgJbWVkaWE7CQkvKiBtZWRpYSBjb2RlICovCisJX19sZTE2CWZhdF9sZW5ndGg7CS8qIHNlY3RvcnMvRkFUICovCisJX19sZTE2CXNlY3NfdHJhY2s7CS8qIHNlY3RvcnMgcGVyIHRyYWNrICovCisJX19sZTE2CWhlYWRzOwkJLyogbnVtYmVyIG9mIGhlYWRzICovCisJX19sZTMyCWhpZGRlbjsJCS8qIGhpZGRlbiBzZWN0b3JzICh1bnVzZWQpICovCisJX19sZTMyCXRvdGFsX3NlY3Q7CS8qIG51bWJlciBvZiBzZWN0b3JzIChpZiBzZWN0b3JzID09IDApICovCisKKwkvKiBUaGUgZm9sbG93aW5nIGZpZWxkcyBhcmUgb25seSB1c2VkIGJ5IEZBVDMyICovCisJX19sZTMyCWZhdDMyX2xlbmd0aDsJLyogc2VjdG9ycy9GQVQgKi8KKwlfX2xlMTYJZmxhZ3M7CQkvKiBiaXQgODogZmF0IG1pcnJvcmluZywgbG93IDQ6IGFjdGl2ZSBmYXQgKi8KKwlfX3U4CXZlcnNpb25bMl07CS8qIG1ham9yLCBtaW5vciBmaWxlc3lzdGVtIHZlcnNpb24gKi8KKwlfX2xlMzIJcm9vdF9jbHVzdGVyOwkvKiBmaXJzdCBjbHVzdGVyIGluIHJvb3QgZGlyZWN0b3J5ICovCisJX19sZTE2CWluZm9fc2VjdG9yOwkvKiBmaWxlc3lzdGVtIGluZm8gc2VjdG9yICovCisJX19sZTE2CWJhY2t1cF9ib290OwkvKiBiYWNrdXAgYm9vdCBzZWN0b3IgKi8KKwlfX2xlMTYJcmVzZXJ2ZWQyWzZdOwkvKiBVbnVzZWQgKi8KK307CisKK3N0cnVjdCBmYXRfYm9vdF9mc2luZm8geworCV9fbGUzMiAgIHNpZ25hdHVyZTE7CS8qIDB4NDE2MTUyNTJMICovCisJX19sZTMyICAgcmVzZXJ2ZWQxWzEyMF07CS8qIE5vdGhpbmcgYXMgZmFyIGFzIEkgY2FuIHRlbGwgKi8KKwlfX2xlMzIgICBzaWduYXR1cmUyOwkvKiAweDYxNDE3MjcyTCAqLworCV9fbGUzMiAgIGZyZWVfY2x1c3RlcnM7CS8qIEZyZWUgY2x1c3RlciBjb3VudC4gIC0xIGlmIHVua25vd24gKi8KKwlfX2xlMzIgICBuZXh0X2NsdXN0ZXI7CS8qIE1vc3QgcmVjZW50bHkgYWxsb2NhdGVkIGNsdXN0ZXIgKi8KKwlfX2xlMzIgICByZXNlcnZlZDJbNF07Cit9OworCitzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5IHsKKwlfX3U4CW5hbWVbOF0sZXh0WzNdOwkvKiBuYW1lIGFuZCBleHRlbnNpb24gKi8KKwlfX3U4CWF0dHI7CQkvKiBhdHRyaWJ1dGUgYml0cyAqLworCV9fdTggICAgbGNhc2U7CQkvKiBDYXNlIGZvciBiYXNlIGFuZCBleHRlbnNpb24gKi8KKwlfX3U4CWN0aW1lX2NzOwkvKiBDcmVhdGlvbiB0aW1lLCBjZW50aXNlY29uZHMgKDAtMTk5KSAqLworCV9fbGUxNgljdGltZTsJCS8qIENyZWF0aW9uIHRpbWUgKi8KKwlfX2xlMTYJY2RhdGU7CQkvKiBDcmVhdGlvbiBkYXRlICovCisJX19sZTE2CWFkYXRlOwkJLyogTGFzdCBhY2Nlc3MgZGF0ZSAqLworCV9fbGUxNglzdGFydGhpOwkvKiBIaWdoIDE2IGJpdHMgb2YgY2x1c3RlciBpbiBGQVQzMiAqLworCV9fbGUxNgl0aW1lLGRhdGUsc3RhcnQ7LyogdGltZSwgZGF0ZSBhbmQgZmlyc3QgY2x1c3RlciAqLworCV9fbGUzMglzaXplOwkJLyogZmlsZSBzaXplIChpbiBieXRlcykgKi8KK307CisKKy8qIFVwIHRvIDEzIGNoYXJhY3RlcnMgb2YgdGhlIG5hbWUgKi8KK3N0cnVjdCBtc2Rvc19kaXJfc2xvdCB7CisJX191OCAgICBpZDsJCS8qIHNlcXVlbmNlIG51bWJlciBmb3Igc2xvdCAqLworCV9fdTggICAgbmFtZTBfNFsxMF07CS8qIGZpcnN0IDUgY2hhcmFjdGVycyBpbiBuYW1lICovCisJX191OCAgICBhdHRyOwkJLyogYXR0cmlidXRlIGJ5dGUgKi8KKwlfX3U4ICAgIHJlc2VydmVkOwkvKiBhbHdheXMgMCAqLworCV9fdTggICAgYWxpYXNfY2hlY2tzdW07CS8qIGNoZWNrc3VtIGZvciA4LjMgYWxpYXMgKi8KKwlfX3U4ICAgIG5hbWU1XzEwWzEyXTsJLyogNiBtb3JlIGNoYXJhY3RlcnMgaW4gbmFtZSAqLworCV9fbGUxNiAgIHN0YXJ0OwkJLyogc3RhcnRpbmcgY2x1c3RlciBudW1iZXIsIDAgaW4gbG9uZyBzbG90cyAqLworCV9fdTggICAgbmFtZTExXzEyWzRdOwkvKiBsYXN0IDIgY2hhcmFjdGVycyBpbiBuYW1lICovCit9OworCitzdHJ1Y3QgZmF0X3Nsb3RfaW5mbyB7CisJbG9mZl90IGlfcG9zOwkJLyogb24tZGlzayBwb3NpdGlvbiBvZiBkaXJlY3RvcnkgZW50cnkgKi8KKwlsb2ZmX3Qgc2xvdF9vZmY7CS8qIG9mZnNldCBmb3Igc2xvdCBvciBkZSBzdGFydCAqLworCWludCBucl9zbG90czsJCS8qIG51bWJlciBvZiBzbG90cyArIDEoZGUpIGluIGZpbGVuYW1lICovCisJc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSAqZGU7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKK307CisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L25scy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisKK3N0cnVjdCBmYXRfbW91bnRfb3B0aW9ucyB7CisJdWlkX3QgZnNfdWlkOworCWdpZF90IGZzX2dpZDsKKwl1bnNpZ25lZCBzaG9ydCBmc19mbWFzazsKKwl1bnNpZ25lZCBzaG9ydCBmc19kbWFzazsKKwl1bnNpZ25lZCBzaG9ydCBjb2RlcGFnZTsgIC8qIENvZGVwYWdlIGZvciBzaG9ydG5hbWUgY29udmVyc2lvbnMgKi8KKwljaGFyICppb2NoYXJzZXQ7ICAgICAgICAgIC8qIENoYXJzZXQgdXNlZCBmb3IgZmlsZW5hbWUgaW5wdXQvZGlzcGxheSAqLworCXVuc2lnbmVkIHNob3J0IHNob3J0bmFtZTsgLyogZmxhZ3MgZm9yIHNob3J0bmFtZSBkaXNwbGF5L2NyZWF0ZSBydWxlICovCisJdW5zaWduZWQgY2hhciBuYW1lX2NoZWNrOyAvKiByID0gcmVsYXhlZCwgbiA9IG5vcm1hbCwgcyA9IHN0cmljdCAqLworCXVuc2lnbmVkIHF1aWV0OjEsICAgICAgICAgLyogc2V0ID0gZmFrZSBzdWNjZXNzZnVsIGNobW9kcyBhbmQgY2hvd25zICovCisJCSBzaG93ZXhlYzoxLCAgICAgIC8qIHNldCA9IG9ubHkgc2V0IHggYml0IGZvciBjb20vZXhlL2JhdCAqLworCQkgc3lzX2ltbXV0YWJsZToxLCAvKiBzZXQgPSBzeXN0ZW0gZmlsZXMgYXJlIGltbXV0YWJsZSAqLworCQkgZG90c09LOjEsICAgICAgICAvKiBzZXQgPSBoaWRkZW4gYW5kIHN5c3RlbSBmaWxlcyBhcmUgbmFtZWQgJy5maWxlbmFtZScgKi8KKwkJIGlzdmZhdDoxLCAgICAgICAgLyogMD1ubyB2ZmF0IGxvbmcgZmlsZW5hbWUgc3VwcG9ydCwgMT12ZmF0IHN1cHBvcnQgKi8KKwkJIHV0Zjg6MSwJICAvKiBVc2Ugb2YgVVRGOCBjaGFyYWN0ZXIgc2V0IChEZWZhdWx0KSAqLworCQkgdW5pY29kZV94bGF0ZToxLCAvKiBjcmVhdGUgZXNjYXBlIHNlcXVlbmNlcyBmb3IgdW5oYW5kbGVkIFVuaWNvZGUgKi8KKwkJIG51bXRhaWw6MSwgICAgICAgLyogRG9lcyBmaXJzdCBhbGlhcyBoYXZlIGEgbnVtZXJpYyAnfjEnIHR5cGUgdGFpbD8gKi8KKwkJIGF0YXJpOjEsICAgICAgICAgLyogVXNlIEF0YXJpIEdFTURPUyB2YXJpYXRpb24gb2YgTVMtRE9TIGZzICovCisJCSBub2Nhc2U6MTsJICAvKiBEb2VzIHRoaXMgbmVlZCBjYXNlIGNvbnZlcnNpb24/IDA9bmVlZCBjYXNlIGNvbnZlcnNpb24qLworfTsKKworI2RlZmluZSBGQVRfSEFTSF9CSVRTCTgKKyNkZWZpbmUgRkFUX0hBU0hfU0laRQkoMVVMIDw8IEZBVF9IQVNIX0JJVFMpCisjZGVmaW5lIEZBVF9IQVNIX01BU0sJKEZBVF9IQVNIX1NJWkUtMSkKKworLyoKKyAqIE1TLURPUyBmaWxlIHN5c3RlbSBpbi1jb3JlIHN1cGVyYmxvY2sgZGF0YQorICovCitzdHJ1Y3QgbXNkb3Nfc2JfaW5mbyB7CisJdW5zaWduZWQgc2hvcnQgc2VjX3Blcl9jbHVzOyAvKiBzZWN0b3JzL2NsdXN0ZXIgKi8KKwl1bnNpZ25lZCBzaG9ydCBjbHVzdGVyX2JpdHM7IC8qIGxvZzIoY2x1c3Rlcl9zaXplKSAqLworCXVuc2lnbmVkIGludCBjbHVzdGVyX3NpemU7ICAgLyogY2x1c3RlciBzaXplICovCisJdW5zaWduZWQgY2hhciBmYXRzLGZhdF9iaXRzOyAvKiBudW1iZXIgb2YgRkFUcywgRkFUIGJpdHMgKDEyIG9yIDE2KSAqLworCXVuc2lnbmVkIHNob3J0IGZhdF9zdGFydDsKKwl1bnNpZ25lZCBsb25nIGZhdF9sZW5ndGg7ICAgIC8qIEZBVCBzdGFydCAmIGxlbmd0aCAoc2VjLikgKi8KKwl1bnNpZ25lZCBsb25nIGRpcl9zdGFydDsKKwl1bnNpZ25lZCBzaG9ydCBkaXJfZW50cmllczsgIC8qIHJvb3QgZGlyIHN0YXJ0ICYgZW50cmllcyAqLworCXVuc2lnbmVkIGxvbmcgZGF0YV9zdGFydDsgICAgLyogZmlyc3QgZGF0YSBzZWN0b3IgKi8KKwl1bnNpZ25lZCBsb25nIG1heF9jbHVzdGVyOyAgIC8qIG1heGltdW0gY2x1c3RlciBudW1iZXIgKi8KKwl1bnNpZ25lZCBsb25nIHJvb3RfY2x1c3RlcjsgIC8qIGZpcnN0IGNsdXN0ZXIgb2YgdGhlIHJvb3QgZGlyZWN0b3J5ICovCisJdW5zaWduZWQgbG9uZyBmc2luZm9fc2VjdG9yOyAvKiBzZWN0b3IgbnVtYmVyIG9mIEZBVDMyIGZzaW5mbyAqLworCXN0cnVjdCBzZW1hcGhvcmUgZmF0X2xvY2s7CisJdW5zaWduZWQgaW50IHByZXZfZnJlZTsgICAgICAvKiBwcmV2aW91c2x5IGFsbG9jYXRlZCBjbHVzdGVyIG51bWJlciAqLworCXVuc2lnbmVkIGludCBmcmVlX2NsdXN0ZXJzOyAgLyogLTEgaWYgdW5kZWZpbmVkICovCisJc3RydWN0IGZhdF9tb3VudF9vcHRpb25zIG9wdGlvbnM7CisJc3RydWN0IG5sc190YWJsZSAqbmxzX2Rpc2s7ICAvKiBDb2RlcGFnZSB1c2VkIG9uIGRpc2sgKi8KKwlzdHJ1Y3QgbmxzX3RhYmxlICpubHNfaW87ICAgIC8qIENoYXJzZXQgdXNlZCBmb3IgaW5wdXQgYW5kIGRpc3BsYXkgKi8KKwl2b2lkICpkaXJfb3BzOwkJICAgICAvKiBPcGFxdWU7IGRlZmF1bHQgZGlyZWN0b3J5IG9wZXJhdGlvbnMgKi8KKwlpbnQgZGlyX3Blcl9ibG9jazsJICAgICAvKiBkaXIgZW50cmllcyBwZXIgYmxvY2sgKi8KKwlpbnQgZGlyX3Blcl9ibG9ja19iaXRzOwkgICAgIC8qIGxvZzIoZGlyX3Blcl9ibG9jaykgKi8KKworCWludCBmYXRlbnRfc2hpZnQ7CisJc3RydWN0IGZhdGVudF9vcGVyYXRpb25zICpmYXRlbnRfb3BzOworCisJc3BpbmxvY2tfdCBpbm9kZV9oYXNoX2xvY2s7CisJc3RydWN0IGhsaXN0X2hlYWQgaW5vZGVfaGFzaHRhYmxlW0ZBVF9IQVNIX1NJWkVdOworfTsKKworI2RlZmluZSBGQVRfQ0FDSEVfVkFMSUQJMAkvKiBzcGVjaWFsIGNhc2UgZm9yIHZhbGlkIGNhY2hlICovCisKKy8qCisgKiBNUy1ET1MgZmlsZSBzeXN0ZW0gaW5vZGUgZGF0YSBpbiBtZW1vcnkKKyAqLworc3RydWN0IG1zZG9zX2lub2RlX2luZm8geworCXNwaW5sb2NrX3QgY2FjaGVfbHJ1X2xvY2s7CisJc3RydWN0IGxpc3RfaGVhZCBjYWNoZV9scnU7CisJaW50IG5yX2NhY2hlczsKKwkvKiBmb3IgYXZvaWRpbmcgdGhlIHJhY2UgYmV0d2VlbiBmYXRfZnJlZSgpIGFuZCBmYXRfZ2V0X2NsdXN0ZXIoKSAqLworCXVuc2lnbmVkIGludCBjYWNoZV92YWxpZF9pZDsKKworCWxvZmZfdCBtbXVfcHJpdmF0ZTsKKwlpbnQgaV9zdGFydDsJCS8qIGZpcnN0IGNsdXN0ZXIgb3IgMCAqLworCWludCBpX2xvZ3N0YXJ0OwkJLyogbG9naWNhbCBmaXJzdCBjbHVzdGVyICovCisJaW50IGlfYXR0cnM7CQkvKiB1bnVzZWQgYXR0cmlidXRlIGJpdHMgKi8KKwlsb2ZmX3QgaV9wb3M7CQkvKiBvbi1kaXNrIHBvc2l0aW9uIG9mIGRpcmVjdG9yeSBlbnRyeSBvciAwICovCisJc3RydWN0IGhsaXN0X25vZGUgaV9mYXRfaGFzaDsJLyogaGFzaCBieSBpX2xvY2F0aW9uICovCisJc3RydWN0IGlub2RlIHZmc19pbm9kZTsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1zZG9zX3NiX2luZm8gKk1TRE9TX1NCKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJcmV0dXJuIHNiLT5zX2ZzX2luZm87Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1zZG9zX2lub2RlX2luZm8gKk1TRE9TX0koc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGlub2RlLCBzdHJ1Y3QgbXNkb3NfaW5vZGVfaW5mbywgdmZzX2lub2RlKTsKK30KKworLyogUmV0dXJuIHRoZSBGQVQgYXR0cmlidXRlIGJ5dGUgZm9yIHRoaXMgaW5vZGUgKi8KK3N0YXRpYyBpbmxpbmUgdTggZmF0X2F0dHIoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlyZXR1cm4gKChpbm9kZS0+aV9tb2RlICYgU19JV1VHTykgPyBBVFRSX05PTkUgOiBBVFRSX1JPKSB8CisJCShTX0lTRElSKGlub2RlLT5pX21vZGUpID8gQVRUUl9ESVIgOiBBVFRSX05PTkUpIHwKKwkJTVNET1NfSShpbm9kZSktPmlfYXR0cnM7Cit9CisKK3N0YXRpYyBpbmxpbmUgc2VjdG9yX3QgZmF0X2NsdXNfdG9fYmxrbnIoc3RydWN0IG1zZG9zX3NiX2luZm8gKnNiaSwgaW50IGNsdXMpCit7CisJcmV0dXJuICgoc2VjdG9yX3QpY2x1cyAtIEZBVF9TVEFSVF9FTlQpICogc2JpLT5zZWNfcGVyX2NsdXMKKwkJKyBzYmktPmRhdGFfc3RhcnQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmYXQxNl90b3djaGFyKHdjaGFyX3QgKmRzdCwgY29uc3QgX191OCAqc3JjLCBzaXplX3QgbGVuKQoreworI2lmZGVmIF9fQklHX0VORElBTgorCXdoaWxlIChsZW4tLSkgeworCQkqZHN0KysgPSBzcmNbMF0gfCAoc3JjWzFdIDw8IDgpOworCQlzcmMgKz0gMjsKKwl9CisjZWxzZQorCW1lbWNweShkc3QsIHNyYywgbGVuICogMik7CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZhdHdjaGFyX3RvMTYoX191OCAqZHN0LCBjb25zdCB3Y2hhcl90ICpzcmMsIHNpemVfdCBsZW4pCit7CisjaWZkZWYgX19CSUdfRU5ESUFOCisJd2hpbGUgKGxlbi0tKSB7CisJCWRzdFswXSA9ICpzcmMgJiAweDAwRkY7CisJCWRzdFsxXSA9ICgqc3JjICYgMHhGRjAwKSA+PiA4OworCQlkc3QgKz0gMjsKKwkJc3JjKys7CisJfQorI2Vsc2UKKwltZW1jcHkoZHN0LCBzcmMsIGxlbiAqIDIpOworI2VuZGlmCit9CisKKy8qIGZhdC9jYWNoZS5jICovCitleHRlcm4gdm9pZCBmYXRfY2FjaGVfaW52YWxfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7CitleHRlcm4gaW50IGZhdF9nZXRfY2x1c3RlcihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgY2x1c3RlciwKKwkJCSAgIGludCAqZmNsdXMsIGludCAqZGNsdXMpOworZXh0ZXJuIGludCBmYXRfYm1hcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBzZWN0b3IsIHNlY3Rvcl90ICpwaHlzKTsKKworLyogZmF0L2Rpci5jICovCitleHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmYXRfZGlyX29wZXJhdGlvbnM7CitleHRlcm4gaW50IGZhdF9zZWFyY2hfbG9uZyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lLAorCQkJICAgaW50IG5hbWVfbGVuLCBzdHJ1Y3QgZmF0X3Nsb3RfaW5mbyAqc2luZm8pOworZXh0ZXJuIGludCBmYXRfZGlyX2VtcHR5KHN0cnVjdCBpbm9kZSAqZGlyKTsKK2V4dGVybiBpbnQgZmF0X3N1YmRpcnMoc3RydWN0IGlub2RlICpkaXIpOworZXh0ZXJuIGludCBmYXRfc2NhbihzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSwKKwkJICAgIHN0cnVjdCBmYXRfc2xvdF9pbmZvICpzaW5mbyk7CitleHRlcm4gaW50IGZhdF9nZXRfZG90ZG90X2VudHJ5KHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaCwKKwkJCQlzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5ICoqZGUsIGxvZmZfdCAqaV9wb3MpOworZXh0ZXJuIGludCBmYXRfYWxsb2NfbmV3X2RpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IHRpbWVzcGVjICp0cyk7CitleHRlcm4gaW50IGZhdF9hZGRfZW50cmllcyhzdHJ1Y3QgaW5vZGUgKmRpciwgdm9pZCAqc2xvdHMsIGludCBucl9zbG90cywKKwkJCSAgIHN0cnVjdCBmYXRfc2xvdF9pbmZvICpzaW5mbyk7CitleHRlcm4gaW50IGZhdF9yZW1vdmVfZW50cmllcyhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGZhdF9zbG90X2luZm8gKnNpbmZvKTsKKworLyogZmF0L2ZhdGVudC5jICovCitzdHJ1Y3QgZmF0X2VudHJ5IHsKKwlpbnQgZW50cnk7CisJdW5pb24geworCQl1OCAqZW50MTJfcFsyXTsKKwkJX19sZTE2ICplbnQxNl9wOworCQlfX2xlMzIgKmVudDMyX3A7CisJfSB1OworCWludCBucl9iaHM7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaHNbMl07Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgZmF0ZW50X2luaXQoc3RydWN0IGZhdF9lbnRyeSAqZmF0ZW50KQoreworCWZhdGVudC0+bnJfYmhzID0gMDsKKwlmYXRlbnQtPmVudHJ5ID0gMDsKKwlmYXRlbnQtPnUuZW50MzJfcCA9IE5VTEw7CisJZmF0ZW50LT5iaHNbMF0gPSBmYXRlbnQtPmJoc1sxXSA9IE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmYXRlbnRfc2V0X2VudHJ5KHN0cnVjdCBmYXRfZW50cnkgKmZhdGVudCwgaW50IGVudHJ5KQoreworCWZhdGVudC0+ZW50cnkgPSBlbnRyeTsKKwlmYXRlbnQtPnUuZW50MzJfcCA9IE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmYXRlbnRfYnJlbHNlKHN0cnVjdCBmYXRfZW50cnkgKmZhdGVudCkKK3sKKwlpbnQgaTsKKwlmYXRlbnQtPnUuZW50MzJfcCA9IE5VTEw7CisJZm9yIChpID0gMDsgaSA8IGZhdGVudC0+bnJfYmhzOyBpKyspCisJCWJyZWxzZShmYXRlbnQtPmJoc1tpXSk7CisJZmF0ZW50LT5ucl9iaHMgPSAwOworCWZhdGVudC0+YmhzWzBdID0gZmF0ZW50LT5iaHNbMV0gPSBOVUxMOworfQorCitleHRlcm4gdm9pZCBmYXRfZW50X2FjY2Vzc19pbml0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOworZXh0ZXJuIGludCBmYXRfZW50X3JlYWQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZhdF9lbnRyeSAqZmF0ZW50LAorCQkJaW50IGVudHJ5KTsKK2V4dGVybiBpbnQgZmF0X2VudF93cml0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmF0X2VudHJ5ICpmYXRlbnQsCisJCQkgaW50IG5ldywgaW50IHdhaXQpOworZXh0ZXJuIGludCBmYXRfYWxsb2NfY2x1c3RlcnMoc3RydWN0IGlub2RlICppbm9kZSwgaW50ICpjbHVzdGVyLAorCQkJICAgICAgaW50IG5yX2NsdXN0ZXIpOworZXh0ZXJuIGludCBmYXRfZnJlZV9jbHVzdGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgY2x1c3Rlcik7CitleHRlcm4gaW50IGZhdF9jb3VudF9mcmVlX2NsdXN0ZXJzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOworCisvKiBmYXQvZmlsZS5jICovCitleHRlcm4gaW50IGZhdF9nZW5lcmljX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAorCQkJICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CitleHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmYXRfZmlsZV9vcGVyYXRpb25zOworZXh0ZXJuIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGZhdF9maWxlX2lub2RlX29wZXJhdGlvbnM7CitleHRlcm4gaW50IGZhdF9ub3RpZnlfY2hhbmdlKHN0cnVjdCBkZW50cnkgKiBkZW50cnksIHN0cnVjdCBpYXR0ciAqIGF0dHIpOworZXh0ZXJuIHZvaWQgZmF0X3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOworCisvKiBmYXQvaW5vZGUuYyAqLworZXh0ZXJuIHZvaWQgZmF0X2F0dGFjaChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgaV9wb3MpOworZXh0ZXJuIHZvaWQgZmF0X2RldGFjaChzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKK2V4dGVybiBzdHJ1Y3QgaW5vZGUgKmZhdF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGxvZmZfdCBpX3Bvcyk7CitleHRlcm4gc3RydWN0IGlub2RlICpmYXRfYnVpbGRfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJCXN0cnVjdCBtc2Rvc19kaXJfZW50cnkgKmRlLCBsb2ZmX3QgaV9wb3MpOworZXh0ZXJuIGludCBmYXRfc3luY19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKK2V4dGVybiBpbnQgZmF0X2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdm9pZCAqZGF0YSwgaW50IHNpbGVudCwKKwkJCXN0cnVjdCBpbm9kZV9vcGVyYXRpb25zICpmc19kaXJfaW5vZGVfb3BzLCBpbnQgaXN2ZmF0KTsKKworLyogZmF0L21pc2MuYyAqLworZXh0ZXJuIHZvaWQgZmF0X2ZzX3BhbmljKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgY29uc3QgY2hhciAqZm10LCAuLi4pOworZXh0ZXJuIHZvaWQgZmF0X2NsdXN0ZXJzX2ZsdXNoKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOworZXh0ZXJuIGludCBmYXRfY2hhaW5fYWRkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuZXdfZGNsdXMsIGludCBucl9jbHVzdGVyKTsKK2V4dGVybiBpbnQgZGF0ZV9kb3MydW5peCh1bnNpZ25lZCBzaG9ydCB0aW1lLCB1bnNpZ25lZCBzaG9ydCBkYXRlKTsKK2V4dGVybiB2b2lkIGZhdF9kYXRlX3VuaXgyZG9zKGludCB1bml4X2RhdGUsIF9fbGUxNiAqdGltZSwgX19sZTE2ICpkYXRlKTsKK2V4dGVybiBpbnQgZmF0X3N5bmNfYmhzKHN0cnVjdCBidWZmZXJfaGVhZCAqKmJocywgaW50IG5yX2Jocyk7CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tc2cuaCBiL2luY2x1ZGUvbGludXgvbXNnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM0YzZhYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbXNnLmgKQEAgLTAsMCArMSw5NiBAQAorI2lmbmRlZiBfTElOVVhfTVNHX0gKKyNkZWZpbmUgX0xJTlVYX01TR19ICisKKyNpbmNsdWRlIDxsaW51eC9pcGMuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisKKy8qIGlwY3MgY3RsIGNvbW1hbmRzICovCisjZGVmaW5lIE1TR19TVEFUIDExCisjZGVmaW5lIE1TR19JTkZPIDEyCisKKy8qIG1zZ3JjdiBvcHRpb25zICovCisjZGVmaW5lIE1TR19OT0VSUk9SICAgICAwMTAwMDAgIC8qIG5vIGVycm9yIGlmIG1lc3NhZ2UgaXMgdG9vIGJpZyAqLworI2RlZmluZSBNU0dfRVhDRVBUICAgICAgMDIwMDAwICAvKiByZWN2IGFueSBtc2cgZXhjZXB0IG9mIHNwZWNpZmllZCB0eXBlLiovCisKKy8qIE9ic29sZXRlLCB1c2VkIG9ubHkgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGFuZCBsaWJjNSBjb21waWxlcyAqLworc3RydWN0IG1zcWlkX2RzIHsKKwlzdHJ1Y3QgaXBjX3Blcm0gbXNnX3Blcm07CisJc3RydWN0IG1zZyAqbXNnX2ZpcnN0OwkJLyogZmlyc3QgbWVzc2FnZSBvbiBxdWV1ZSx1bnVzZWQgICovCisJc3RydWN0IG1zZyAqbXNnX2xhc3Q7CQkvKiBsYXN0IG1lc3NhZ2UgaW4gcXVldWUsdW51c2VkICovCisJX19rZXJuZWxfdGltZV90IG1zZ19zdGltZTsJLyogbGFzdCBtc2dzbmQgdGltZSAqLworCV9fa2VybmVsX3RpbWVfdCBtc2dfcnRpbWU7CS8qIGxhc3QgbXNncmN2IHRpbWUgKi8KKwlfX2tlcm5lbF90aW1lX3QgbXNnX2N0aW1lOwkvKiBsYXN0IGNoYW5nZSB0aW1lICovCisJdW5zaWduZWQgbG9uZyAgbXNnX2xjYnl0ZXM7CS8qIFJldXNlIGp1bmsgZmllbGRzIGZvciAzMiBiaXQgKi8KKwl1bnNpZ25lZCBsb25nICBtc2dfbHFieXRlczsJLyogZGl0dG8gKi8KKwl1bnNpZ25lZCBzaG9ydCBtc2dfY2J5dGVzOwkvKiBjdXJyZW50IG51bWJlciBvZiBieXRlcyBvbiBxdWV1ZSAqLworCXVuc2lnbmVkIHNob3J0IG1zZ19xbnVtOwkvKiBudW1iZXIgb2YgbWVzc2FnZXMgaW4gcXVldWUgKi8KKwl1bnNpZ25lZCBzaG9ydCBtc2dfcWJ5dGVzOwkvKiBtYXggbnVtYmVyIG9mIGJ5dGVzIG9uIHF1ZXVlICovCisJX19rZXJuZWxfaXBjX3BpZF90IG1zZ19sc3BpZDsJLyogcGlkIG9mIGxhc3QgbXNnc25kICovCisJX19rZXJuZWxfaXBjX3BpZF90IG1zZ19scnBpZDsJLyogbGFzdCByZWNlaXZlIHBpZCAqLworfTsKKworLyogSW5jbHVkZSB0aGUgZGVmaW5pdGlvbiBvZiBtc3FpZDY0X2RzICovCisjaW5jbHVkZSA8YXNtL21zZ2J1Zi5oPgorCisvKiBtZXNzYWdlIGJ1ZmZlciBmb3IgbXNnc25kIGFuZCBtc2dyY3YgY2FsbHMgKi8KK3N0cnVjdCBtc2didWYgeworCWxvbmcgbXR5cGU7ICAgICAgICAgLyogdHlwZSBvZiBtZXNzYWdlICovCisJY2hhciBtdGV4dFsxXTsgICAgICAvKiBtZXNzYWdlIHRleHQgKi8KK307CisKKy8qIGJ1ZmZlciBmb3IgbXNnY3RsIGNhbGxzIElQQ19JTkZPLCBNU0dfSU5GTyAqLworc3RydWN0IG1zZ2luZm8geworCWludCBtc2dwb29sOworCWludCBtc2dtYXA7IAorCWludCBtc2dtYXg7IAorCWludCBtc2dtbmI7IAorCWludCBtc2dtbmk7IAorCWludCBtc2dzc3o7IAorCWludCBtc2d0cWw7IAorCXVuc2lnbmVkIHNob3J0ICBtc2dzZWc7IAorfTsKKworI2RlZmluZSBNU0dNTkkgICAgMTYgICAvKiA8PSBJUENNTkkgKi8gICAgIC8qIG1heCAjIG9mIG1zZyBxdWV1ZSBpZGVudGlmaWVycyAqLworI2RlZmluZSBNU0dNQVggIDgxOTIgICAvKiA8PSBJTlRfTUFYICovICAgLyogbWF4IHNpemUgb2YgbWVzc2FnZSAoYnl0ZXMpICovCisjZGVmaW5lIE1TR01OQiAxNjM4NCAgIC8qIDw9IElOVF9NQVggKi8gICAvKiBkZWZhdWx0IG1heCBzaXplIG9mIGEgbWVzc2FnZSBxdWV1ZSAqLworCisvKiB1bnVzZWQgKi8KKyNkZWZpbmUgTVNHUE9PTCAoTVNHTU5JKk1TR01OQi8xMDI0KSAgLyogc2l6ZSBpbiBraWxvYnl0ZXMgb2YgbWVzc2FnZSBwb29sICovCisjZGVmaW5lIE1TR1RRTCAgTVNHTU5CICAgICAgICAgICAgLyogbnVtYmVyIG9mIHN5c3RlbSBtZXNzYWdlIGhlYWRlcnMgKi8KKyNkZWZpbmUgTVNHTUFQICBNU0dNTkIgICAgICAgICAgICAvKiBudW1iZXIgb2YgZW50cmllcyBpbiBtZXNzYWdlIG1hcCAqLworI2RlZmluZSBNU0dTU1ogIDE2ICAgICAgICAgICAgICAgIC8qIG1lc3NhZ2Ugc2VnbWVudCBzaXplICovCisjZGVmaW5lIF9fTVNHU0VHICgoTVNHUE9PTCoxMDI0KS8gTVNHU1NaKSAvKiBtYXggbm8uIG9mIHNlZ21lbnRzICovCisjZGVmaW5lIE1TR1NFRyAoX19NU0dTRUcgPD0gMHhmZmZmID8gX19NU0dTRUcgOiAweGZmZmYpCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKy8qIG9uZSBtc2dfbXNnIHN0cnVjdHVyZSBmb3IgZWFjaCBtZXNzYWdlICovCitzdHJ1Y3QgbXNnX21zZyB7CisJc3RydWN0IGxpc3RfaGVhZCBtX2xpc3Q7IAorCWxvbmcgIG1fdHlwZTsgICAgICAgICAgCisJaW50IG1fdHM7ICAgICAgICAgICAvKiBtZXNzYWdlIHRleHQgc2l6ZSAqLworCXN0cnVjdCBtc2dfbXNnc2VnKiBuZXh0OworCXZvaWQgKnNlY3VyaXR5OworCS8qIHRoZSBhY3R1YWwgbWVzc2FnZSBmb2xsb3dzIGltbWVkaWF0ZWx5ICovCit9OworCisvKiBvbmUgbXNxX3F1ZXVlIHN0cnVjdHVyZSBmb3IgZWFjaCBwcmVzZW50IHF1ZXVlIG9uIHRoZSBzeXN0ZW0gKi8KK3N0cnVjdCBtc2dfcXVldWUgeworCXN0cnVjdCBrZXJuX2lwY19wZXJtIHFfcGVybTsKKwl0aW1lX3QgcV9zdGltZTsJCQkvKiBsYXN0IG1zZ3NuZCB0aW1lICovCisJdGltZV90IHFfcnRpbWU7CQkJLyogbGFzdCBtc2dyY3YgdGltZSAqLworCXRpbWVfdCBxX2N0aW1lOwkJCS8qIGxhc3QgY2hhbmdlIHRpbWUgKi8KKwl1bnNpZ25lZCBsb25nIHFfY2J5dGVzOwkJLyogY3VycmVudCBudW1iZXIgb2YgYnl0ZXMgb24gcXVldWUgKi8KKwl1bnNpZ25lZCBsb25nIHFfcW51bTsJCS8qIG51bWJlciBvZiBtZXNzYWdlcyBpbiBxdWV1ZSAqLworCXVuc2lnbmVkIGxvbmcgcV9xYnl0ZXM7CQkvKiBtYXggbnVtYmVyIG9mIGJ5dGVzIG9uIHF1ZXVlICovCisJcGlkX3QgcV9sc3BpZDsJCQkvKiBwaWQgb2YgbGFzdCBtc2dzbmQgKi8KKwlwaWRfdCBxX2xycGlkOwkJCS8qIGxhc3QgcmVjZWl2ZSBwaWQgKi8KKworCXN0cnVjdCBsaXN0X2hlYWQgcV9tZXNzYWdlczsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHFfcmVjZWl2ZXJzOworCXN0cnVjdCBsaXN0X2hlYWQgcV9zZW5kZXJzOworfTsKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9MSU5VWF9NU0dfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdGQvYmxrdHJhbnMuaCBiL2luY2x1ZGUvbGludXgvbXRkL2Jsa3RyYW5zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGViYzJlNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbXRkL2Jsa3RyYW5zLmgKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqICRJZDogYmxrdHJhbnMuaCx2IDEuNSAyMDAzLzA2LzIzIDEyOjAwOjA4IGR3bXcyIEV4cCAkCisgKgorICogKEMpIDIwMDMgRGF2aWQgV29vZGhvdXNlIDxkd213MkBpbmZyYWRlYWQub3JnPgorICoKKyAqIEludGVyZmFjZSB0byBMaW51eCBibG9jayBsYXllciBmb3IgTVREICd0cmFuc2xhdGlvbiBsYXllcnMnLgorICoKKyAqLworCisjaWZuZGVmIF9fTVREX1RSQU5TX0hfXworI2RlZmluZSBfX01URF9UUkFOU19IX18KKworI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KKworc3RydWN0IGhkX2dlb21ldHJ5Oworc3RydWN0IG10ZF9pbmZvOworc3RydWN0IG10ZF9ibGt0cmFuc19vcHM7CitzdHJ1Y3QgZmlsZTsKK3N0cnVjdCBpbm9kZTsKKworc3RydWN0IG10ZF9ibGt0cmFuc19kZXYgeworCXN0cnVjdCBtdGRfYmxrdHJhbnNfb3BzICp0cjsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IG10ZF9pbmZvICptdGQ7CisJc3RydWN0IHNlbWFwaG9yZSBzZW07CisJaW50IGRldm51bTsKKwlpbnQgYmxrc2l6ZTsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJaW50IHJlYWRvbmx5OworCXZvaWQgKmJsa2NvcmVfcHJpdjsgLyogZ2VuZGlzayBpbiAyLjUsIGRldmZzX2hhbmRsZSBpbiAyLjQgKi8KK307CisKK3N0cnVjdCBibGtjb3JlX3ByaXY7IC8qIERpZmZlcnMgZm9yIDIuNCBhbmQgMi41IGtlcm5lbHM7IHByaXZhdGUgKi8KKworc3RydWN0IG10ZF9ibGt0cmFuc19vcHMgeworCWNoYXIgKm5hbWU7CisJaW50IG1ham9yOworCWludCBwYXJ0X2JpdHM7CisKKwkvKiBBY2Nlc3MgZnVuY3Rpb25zICovCisJaW50ICgqcmVhZHNlY3QpKHN0cnVjdCBtdGRfYmxrdHJhbnNfZGV2ICpkZXYsCisJCSAgICB1bnNpZ25lZCBsb25nIGJsb2NrLCBjaGFyICpidWZmZXIpOworCWludCAoKndyaXRlc2VjdCkoc3RydWN0IG10ZF9ibGt0cmFuc19kZXYgKmRldiwKKwkJICAgICB1bnNpZ25lZCBsb25nIGJsb2NrLCBjaGFyICpidWZmZXIpOworCisJLyogQmxvY2sgbGF5ZXIgaW9jdGxzICovCisJaW50ICgqZ2V0Z2VvKShzdHJ1Y3QgbXRkX2Jsa3RyYW5zX2RldiAqZGV2LCBzdHJ1Y3QgaGRfZ2VvbWV0cnkgKmdlbyk7CisJaW50ICgqZmx1c2gpKHN0cnVjdCBtdGRfYmxrdHJhbnNfZGV2ICpkZXYpOworCisJLyogQ2FsbGVkIHdpdGggbXRkX3RhYmxlX211dGV4IGhlbGQ7IG5vIHJhY2Ugd2l0aCBhZGQvcmVtb3ZlICovCisJaW50ICgqb3Blbikoc3RydWN0IG10ZF9ibGt0cmFuc19kZXYgKmRldik7CisJaW50ICgqcmVsZWFzZSkoc3RydWN0IG10ZF9ibGt0cmFuc19kZXYgKmRldik7CisKKwkvKiBDYWxsZWQgb24ge2RlLH1yZWdpc3RyYXRpb24gYW5kIG9uIHN1YnNlcXVlbnQgYWRkaXRpb24vcmVtb3ZhbAorCSAgIG9mIGRldmljZXMsIHdpdGggbXRkX3RhYmxlX211dGV4IGhlbGQuICovCisJdm9pZCAoKmFkZF9tdGQpKHN0cnVjdCBtdGRfYmxrdHJhbnNfb3BzICp0ciwgc3RydWN0IG10ZF9pbmZvICptdGQpOworCXZvaWQgKCpyZW1vdmVfZGV2KShzdHJ1Y3QgbXRkX2Jsa3RyYW5zX2RldiAqZGV2KTsKKworCXN0cnVjdCBsaXN0X2hlYWQgZGV2czsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IG1vZHVsZSAqb3duZXI7CisKKwlzdHJ1Y3QgbXRkX2Jsa2NvcmVfcHJpdiAqYmxrY29yZV9wcml2OworfTsKKworZXh0ZXJuIGludCByZWdpc3Rlcl9tdGRfYmxrdHJhbnMoc3RydWN0IG10ZF9ibGt0cmFuc19vcHMgKnRyKTsKK2V4dGVybiBpbnQgZGVyZWdpc3Rlcl9tdGRfYmxrdHJhbnMoc3RydWN0IG10ZF9ibGt0cmFuc19vcHMgKnRyKTsKK2V4dGVybiBpbnQgYWRkX210ZF9ibGt0cmFuc19kZXYoc3RydWN0IG10ZF9ibGt0cmFuc19kZXYgKmRldik7CitleHRlcm4gaW50IGRlbF9tdGRfYmxrdHJhbnNfZGV2KHN0cnVjdCBtdGRfYmxrdHJhbnNfZGV2ICpkZXYpOworCQkJCSAKKworI2VuZGlmIC8qIF9fTVREX1RSQU5TX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdGQvY2ZpLmggYi9pbmNsdWRlL2xpbnV4L210ZC9jZmkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWQ4YzU4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9tdGQvY2ZpLmgKQEAgLTAsMCArMSwzOTQgQEAKKworLyogQ29tbW9uIEZsYXNoIEludGVyZmFjZSBzdHJ1Y3R1cmVzIAorICogU2VlIGh0dHA6Ly9zdXBwb3J0LmludGVsLmNvbS9kZXNpZ24vZmxhc2gvdGVjaG5vdGUvaW5kZXguaHRtCisgKiAkSWQ6IGNmaS5oLHYgMS41MCAyMDA0LzExLzIwIDEyOjQ2OjUxIGR3bXcyIEV4cCAkCisgKi8KKworI2lmbmRlZiBfX01URF9DRklfSF9fCisjZGVmaW5lIF9fTVREX0NGSV9IX18KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbXRkL2ZsYXNoY2hpcC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvY2ZpX2VuZGlhbi5oPgorCisjaWZkZWYgQ09ORklHX01URF9DRklfSTEKKyNkZWZpbmUgY2ZpX2ludGVybGVhdmUoY2ZpKSAxCisjZGVmaW5lIGNmaV9pbnRlcmxlYXZlX2lzXzEoY2ZpKSAoY2ZpX2ludGVybGVhdmUoY2ZpKSA9PSAxKQorI2Vsc2UKKyNkZWZpbmUgY2ZpX2ludGVybGVhdmVfaXNfMShjZmkpICgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTVREX0NGSV9JMgorIyBpZmRlZiBjZmlfaW50ZXJsZWF2ZQorIyAgdW5kZWYgY2ZpX2ludGVybGVhdmUKKyMgIGRlZmluZSBjZmlfaW50ZXJsZWF2ZShjZmkpICgoY2ZpKS0+aW50ZXJsZWF2ZSkKKyMgZWxzZQorIyAgZGVmaW5lIGNmaV9pbnRlcmxlYXZlKGNmaSkgMgorIyBlbmRpZgorI2RlZmluZSBjZmlfaW50ZXJsZWF2ZV9pc18yKGNmaSkgKGNmaV9pbnRlcmxlYXZlKGNmaSkgPT0gMikKKyNlbHNlCisjZGVmaW5lIGNmaV9pbnRlcmxlYXZlX2lzXzIoY2ZpKSAoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01URF9DRklfSTQKKyMgaWZkZWYgY2ZpX2ludGVybGVhdmUKKyMgIHVuZGVmIGNmaV9pbnRlcmxlYXZlCisjICBkZWZpbmUgY2ZpX2ludGVybGVhdmUoY2ZpKSAoKGNmaSktPmludGVybGVhdmUpCisjIGVsc2UKKyMgIGRlZmluZSBjZmlfaW50ZXJsZWF2ZShjZmkpIDQKKyMgZW5kaWYKKyNkZWZpbmUgY2ZpX2ludGVybGVhdmVfaXNfNChjZmkpIChjZmlfaW50ZXJsZWF2ZShjZmkpID09IDQpCisjZWxzZQorI2RlZmluZSBjZmlfaW50ZXJsZWF2ZV9pc180KGNmaSkgKDApCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NVERfQ0ZJX0k4CisjIGlmZGVmIGNmaV9pbnRlcmxlYXZlCisjICB1bmRlZiBjZmlfaW50ZXJsZWF2ZQorIyAgZGVmaW5lIGNmaV9pbnRlcmxlYXZlKGNmaSkgKChjZmkpLT5pbnRlcmxlYXZlKQorIyBlbHNlCisjICBkZWZpbmUgY2ZpX2ludGVybGVhdmUoY2ZpKSA4CisjIGVuZGlmCisjZGVmaW5lIGNmaV9pbnRlcmxlYXZlX2lzXzgoY2ZpKSAoY2ZpX2ludGVybGVhdmUoY2ZpKSA9PSA4KQorI2Vsc2UKKyNkZWZpbmUgY2ZpX2ludGVybGVhdmVfaXNfOChjZmkpICgwKQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgaW50IGNmaV9pbnRlcmxlYXZlX3N1cHBvcnRlZChpbnQgaSkKK3sKKwlzd2l0Y2ggKGkpIHsKKyNpZmRlZiBDT05GSUdfTVREX0NGSV9JMQorCWNhc2UgMToKKyNlbmRpZgorI2lmZGVmIENPTkZJR19NVERfQ0ZJX0kyCisJY2FzZSAyOgorI2VuZGlmCisjaWZkZWYgQ09ORklHX01URF9DRklfSTQKKwljYXNlIDQ6CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfTVREX0NGSV9JOAorCWNhc2UgODoKKyNlbmRpZgorCQlyZXR1cm4gMTsKKworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KK30KKworCisvKiBOQjogdGhlc2UgdmFsdWVzIG11c3QgcmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mIGJ5dGVzIG5lZWRlZCB0byBtZWV0IHRoZSAKKyAqICAgICBkZXZpY2UgdHlwZSAoeDgsIHgxNiwgeDMyKS4gIEVnLiBhIDMyIGJpdCBkZXZpY2UgaXMgNCB4IDggYnl0ZXMuIAorICogICAgIFRoZXNlIG51bWJlcnMgYXJlIHVzZWQgaW4gY2FsY3VsYXRpb25zLgorICovCisjZGVmaW5lIENGSV9ERVZJQ0VUWVBFX1g4ICAoOCAvIDgpCisjZGVmaW5lIENGSV9ERVZJQ0VUWVBFX1gxNiAoMTYgLyA4KQorI2RlZmluZSBDRklfREVWSUNFVFlQRV9YMzIgKDMyIC8gOCkKKyNkZWZpbmUgQ0ZJX0RFVklDRVRZUEVfWDY0ICg2NCAvIDgpCisKKy8qIE5COiBXZSBrZWVwIHRoZXNlIHN0cnVjdHVyZXMgaW4gbWVtb3J5IGluIEhPU1QgYnl0ZW9yZGVyLCBleGNlcHQKKyAqIHdoZXJlIGluZGl2aWR1YWxseSBub3RlZC4KKyAqLworCisvKiBCYXNpYyBRdWVyeSBTdHJ1Y3R1cmUgKi8KK3N0cnVjdCBjZmlfaWRlbnQgeworCXVpbnQ4X3QgIHFyeVszXTsKKwl1aW50MTZfdCBQX0lEOworCXVpbnQxNl90IFBfQURSOworCXVpbnQxNl90IEFfSUQ7CisJdWludDE2X3QgQV9BRFI7CisJdWludDhfdCAgVmNjTWluOworCXVpbnQ4X3QgIFZjY01heDsKKwl1aW50OF90ICBWcHBNaW47CisJdWludDhfdCAgVnBwTWF4OworCXVpbnQ4X3QgIFdvcmRXcml0ZVRpbWVvdXRUeXA7CisJdWludDhfdCAgQnVmV3JpdGVUaW1lb3V0VHlwOworCXVpbnQ4X3QgIEJsb2NrRXJhc2VUaW1lb3V0VHlwOworCXVpbnQ4X3QgIENoaXBFcmFzZVRpbWVvdXRUeXA7CisJdWludDhfdCAgV29yZFdyaXRlVGltZW91dE1heDsKKwl1aW50OF90ICBCdWZXcml0ZVRpbWVvdXRNYXg7CisJdWludDhfdCAgQmxvY2tFcmFzZVRpbWVvdXRNYXg7CisJdWludDhfdCAgQ2hpcEVyYXNlVGltZW91dE1heDsKKwl1aW50OF90ICBEZXZTaXplOworCXVpbnQxNl90IEludGVyZmFjZURlc2M7CisJdWludDE2X3QgTWF4QnVmV3JpdGVTaXplOworCXVpbnQ4X3QgIE51bUVyYXNlUmVnaW9uczsKKwl1aW50MzJfdCBFcmFzZVJlZ2lvbkluZm9bMF07IC8qIE5vdCBob3N0IG9yZGVyZWQgKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIEV4dGVuZGVkIFF1ZXJ5IFN0cnVjdHVyZSBmb3IgYm90aCBQUkkgYW5kIEFMVCAqLworCitzdHJ1Y3QgY2ZpX2V4dHF1ZXJ5IHsKKwl1aW50OF90ICBwcmlbM107CisJdWludDhfdCAgTWFqb3JWZXJzaW9uOworCXVpbnQ4X3QgIE1pbm9yVmVyc2lvbjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIFZlbmRvci1TcGVjaWZpYyBQUkkgZm9yIEludGVsL1NoYXJwIEV4dGVuZGVkIENvbW1hbmQgU2V0ICgweDAwMDEpICovCisKK3N0cnVjdCBjZmlfcHJpX2ludGVsZXh0IHsKKwl1aW50OF90ICBwcmlbM107CisJdWludDhfdCAgTWFqb3JWZXJzaW9uOworCXVpbnQ4X3QgIE1pbm9yVmVyc2lvbjsKKwl1aW50MzJfdCBGZWF0dXJlU3VwcG9ydDsgLyogaWYgYml0IDMxIGlzIHNldCB0aGVuIGFuIGFkZGl0aW9uYWwgdWludDMyX3QgZmVhdHVyZQorCQkJCSAgICBibG9jayBmb2xsb3dzIC0gRklYTUUgLSBub3QgY3VycmVudGx5IHN1cHBvcnRlZCAqLworCXVpbnQ4X3QgIFN1c3BlbmRDbWRTdXBwb3J0OworCXVpbnQxNl90IEJsa1N0YXR1c1JlZ01hc2s7CisJdWludDhfdCAgVmNjT3B0aW1hbDsKKwl1aW50OF90ICBWcHBPcHRpbWFsOworCXVpbnQ4X3QgIE51bVByb3RlY3Rpb25GaWVsZHM7CisJdWludDE2X3QgUHJvdFJlZ0FkZHI7CisJdWludDhfdCAgRmFjdFByb3RSZWdTaXplOworCXVpbnQ4X3QgIFVzZXJQcm90UmVnU2l6ZTsKKwl1aW50OF90ICBleHRyYVswXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBjZmlfaW50ZWxleHRfYmxvY2tpbmZvIHsKKwl1aW50MTZfdCBOdW1JZGVudEJsb2NrczsKKwl1aW50MTZfdCBCbG9ja1NpemU7CisJdWludDE2X3QgTWluQmxvY2tFcmFzZUN5Y2xlczsKKwl1aW50OF90ICBCaXRzUGVyQ2VsbDsKKwl1aW50OF90ICBCbG9ja0NhcDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBjZmlfaW50ZWxleHRfcmVnaW9uaW5mbyB7CisJdWludDE2X3QgTnVtSWRlbnRQYXJ0aXRpb25zOworCXVpbnQ4X3QgIE51bU9wQWxsb3dlZDsKKwl1aW50OF90ICBOdW1PcEFsbG93ZWRTaW1Qcm9nTW9kZTsKKwl1aW50OF90ICBOdW1PcEFsbG93ZWRTaW1FcmFNb2RlOworCXVpbnQ4X3QgIE51bUJsb2NrVHlwZXM7CisJc3RydWN0IGNmaV9pbnRlbGV4dF9ibG9ja2luZm8gQmxvY2tUeXBlc1sxXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIFZlbmRvci1TcGVjaWZpYyBQUkkgZm9yIEFNRC9GdWppdHN1IEV4dGVuZGVkIENvbW1hbmQgU2V0ICgweDAwMDIpICovCisKK3N0cnVjdCBjZmlfcHJpX2FtZHN0ZCB7CisJdWludDhfdCAgcHJpWzNdOworCXVpbnQ4X3QgIE1ham9yVmVyc2lvbjsKKwl1aW50OF90ICBNaW5vclZlcnNpb247CisJdWludDhfdCAgU2lsaWNvblJldmlzaW9uOyAvKiBiaXRzIDEtMDogQWRkcmVzcyBTZW5zaXRpdmUgVW5sb2NrICovCisJdWludDhfdCAgRXJhc2VTdXNwZW5kOworCXVpbnQ4X3QgIEJsa1Byb3Q7CisJdWludDhfdCAgVG1wQmxrVW5wcm90ZWN0OworCXVpbnQ4X3QgIEJsa1Byb3RVbnByb3Q7CisJdWludDhfdCAgU2ltdWx0YW5lb3VzT3BzOworCXVpbnQ4X3QgIEJ1cnN0TW9kZTsKKwl1aW50OF90ICBQYWdlTW9kZTsKKwl1aW50OF90ICBWcHBNaW47CisJdWludDhfdCAgVnBwTWF4OworCXVpbnQ4X3QgIFRvcEJvdHRvbTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBjZmlfcHJpX3F1ZXJ5IHsKKwl1aW50OF90ICBOdW1GaWVsZHM7CisJdWludDMyX3QgUHJvdEZpZWxkWzFdOyAvKiBOb3QgaG9zdCBvcmRlcmVkICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgY2ZpX2JyaV9xdWVyeSB7CisJdWludDhfdCAgUGFnZU1vZGVSZWFkQ2FwOworCXVpbnQ4X3QgIE51bUZpZWxkczsKKwl1aW50MzJfdCBDb25mRmllbGRbMV07IC8qIE5vdCBob3N0IG9yZGVyZWQgKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgUF9JRF9OT05FICAgICAgICAgICAgICAgMHgwMDAwCisjZGVmaW5lIFBfSURfSU5URUxfRVhUICAgICAgICAgIDB4MDAwMQorI2RlZmluZSBQX0lEX0FNRF9TVEQgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgUF9JRF9JTlRFTF9TVEQgICAgICAgICAgMHgwMDAzCisjZGVmaW5lIFBfSURfQU1EX0VYVCAgICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBQX0lEX1dJTkJPTkQgICAgICAgICAgICAweDAwMDYKKyNkZWZpbmUgUF9JRF9TVF9BRFYgICAgICAgICAgICAgMHgwMDIwCisjZGVmaW5lIFBfSURfTUlUU1VCSVNISV9TVEQgICAgIDB4MDEwMAorI2RlZmluZSBQX0lEX01JVFNVQklTSElfRVhUICAgICAweDAxMDEKKyNkZWZpbmUgUF9JRF9TU1RfUEFHRSAgICAgICAgICAgMHgwMTAyCisjZGVmaW5lIFBfSURfSU5URUxfUEVSRk9STUFOQ0UgIDB4MDIwMAorI2RlZmluZSBQX0lEX0lOVEVMX0RBVEEgICAgICAgICAweDAyMTAKKyNkZWZpbmUgUF9JRF9SRVNFUlZFRCAgICAgICAgICAgMHhmZmZmCisKKworI2RlZmluZSBDRklfTU9ERV9DRkkJMQorI2RlZmluZSBDRklfTU9ERV9KRURFQwkwCisKK3N0cnVjdCBjZmlfcHJpdmF0ZSB7CisJdWludDE2X3QgY21kc2V0OworCXZvaWQgKmNtZHNldF9wcml2OworCWludCBpbnRlcmxlYXZlOworCWludCBkZXZpY2VfdHlwZTsKKwlpbnQgY2ZpX21vZGU7CQkvKiBBcmUgd2UgYSBKRURFQyBkZXZpY2UgcHJldGVuZGluZyB0byBiZSBDRkk/ICovCisJaW50IGFkZHJfdW5sb2NrMTsKKwlpbnQgYWRkcl91bmxvY2syOworCXN0cnVjdCBtdGRfaW5mbyAqKCpjbWRzZXRfc2V0dXApKHN0cnVjdCBtYXBfaW5mbyAqKTsKKwlzdHJ1Y3QgY2ZpX2lkZW50ICpjZmlxOyAvKiBGb3Igbm93IG9ubHkgb25lLiBXZSBpbnNpc3QgdGhhdCBhbGwgZGV2cworCQkJCSAgbXVzdCBiZSBvZiB0aGUgc2FtZSB0eXBlLiAqLworCWludCBtZnIsIGlkOworCWludCBudW1jaGlwczsKKwl1bnNpZ25lZCBsb25nIGNoaXBzaGlmdDsgLyogQmVjYXVzZSB0aGV5J3JlIG9mIHRoZSBzYW1lIHR5cGUgKi8KKwljb25zdCBjaGFyICppbV9uYW1lOwkgLyogaW50ZXJfbW9kdWxlIG5hbWUgZm9yIGNtZHNldF9zZXR1cCAqLworCXN0cnVjdCBmbGNoaXAgY2hpcHNbMF07ICAvKiBwZXItY2hpcCBkYXRhIHN0cnVjdHVyZSBmb3IgZWFjaCBjaGlwICovCit9OworCisvKgorICogUmV0dXJucyB0aGUgY29tbWFuZCBhZGRyZXNzIGFjY29yZGluZyB0byB0aGUgZ2l2ZW4gZ2VvbWV0cnkuCisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgY2ZpX2J1aWxkX2NtZF9hZGRyKHVpbnQzMl90IGNtZF9vZnMsIGludCBpbnRlcmxlYXZlLCBpbnQgdHlwZSkKK3sKKwlyZXR1cm4gKGNtZF9vZnMgKiB0eXBlKSAqIGludGVybGVhdmU7Cit9CisKKy8qCisgKiBUcmFuc2Zvcm1zIHRoZSBDRkkgY29tbWFuZCBmb3IgdGhlIGdpdmVuIGdlb21ldHJ5IChidXMgd2lkdGggJiBpbnRlcmxlYXZlKS4KKyAqIEl0IGxvb2tzIHRvbyBsb25nIHRvIGJlIGlubGluZSwgYnV0IGluIHRoZSBjb21tb24gY2FzZSBpdCBzaG91bGQgYWxtb3N0IGFsbAorICogZ2V0IG9wdGltaXNlZCBhd2F5LiAKKyAqLworc3RhdGljIGlubGluZSBtYXBfd29yZCBjZmlfYnVpbGRfY21kKHVfY2hhciBjbWQsIHN0cnVjdCBtYXBfaW5mbyAqbWFwLCBzdHJ1Y3QgY2ZpX3ByaXZhdGUgKmNmaSkKK3sKKwltYXBfd29yZCB2YWwgPSB7IHswfSB9OworCWludCB3b3Jkd2lkdGgsIHdvcmRzX3Blcl9idXMsIGNoaXBfbW9kZSwgY2hpcHNfcGVyX3dvcmQ7CisJdW5zaWduZWQgbG9uZyBvbmVjbWQ7CisJaW50IGk7CisKKwkvKiBXZSBkbyBpdCB0aGlzIHdheSB0byBnaXZlIHRoZSBjb21waWxlciBhIGZpZ2h0aW5nIGNoYW5jZSAKKwkgICBvZiBvcHRpbWlzaW5nIGF3YXkgYWxsIHRoZSBjcmFwIGZvciAnYmFua3dpZHRoJyBsYXJnZXIgdGhhbgorCSAgIGFuIHVuc2lnbmVkIGxvbmcsIGluIHRoZSBjb21tb24gY2FzZSB3aGVyZSB0aGF0IHN1cHBvcnQgaXMKKwkgICBkaXNhYmxlZCAqLworCWlmIChtYXBfYmFua3dpZHRoX2lzX2xhcmdlKG1hcCkpIHsKKwkJd29yZHdpZHRoID0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOworCQl3b3Jkc19wZXJfYnVzID0gKG1hcF9iYW5rd2lkdGgobWFwKSkgLyB3b3Jkd2lkdGg7IC8vIGkuZS4gbm9ybWFsbHkgMQorCX0gZWxzZSB7CisJCXdvcmR3aWR0aCA9IG1hcF9iYW5rd2lkdGgobWFwKTsKKwkJd29yZHNfcGVyX2J1cyA9IDE7CisJfQorCQorCWNoaXBfbW9kZSA9IG1hcF9iYW5rd2lkdGgobWFwKSAvIGNmaV9pbnRlcmxlYXZlKGNmaSk7CisJY2hpcHNfcGVyX3dvcmQgPSB3b3Jkd2lkdGggKiBjZmlfaW50ZXJsZWF2ZShjZmkpIC8gbWFwX2Jhbmt3aWR0aChtYXApOworCisJLyogRmlyc3QsIGRldGVybWluZSB3aGF0IHRoZSBiaXQtcGF0dGVybiBzaG91bGQgYmUgZm9yIGEgc2luZ2xlCisJICAgZGV2aWNlLCBhY2NvcmRpbmcgdG8gY2hpcCBtb2RlIGFuZCBlbmRpYW5uZXNzLi4uICovCisJc3dpdGNoIChjaGlwX21vZGUpIHsKKwlkZWZhdWx0OiBCVUcoKTsKKwljYXNlIDE6CisJCW9uZWNtZCA9IGNtZDsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlvbmVjbWQgPSBjcHVfdG9fY2ZpMTYoY21kKTsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlvbmVjbWQgPSBjcHVfdG9fY2ZpMzIoY21kKTsKKwkJYnJlYWs7CisJfQorCisJLyogTm93IHJlcGxpY2F0ZSBpdCBhY3Jvc3MgdGhlIHNpemUgb2YgYW4gdW5zaWduZWQgbG9uZywgb3IgCisJICAganVzdCB0byB0aGUgYnVzIHdpZHRoIGFzIGFwcHJvcHJpYXRlICovCisJc3dpdGNoIChjaGlwc19wZXJfd29yZCkgeworCWRlZmF1bHQ6IEJVRygpOworI2lmIEJJVFNfUEVSX0xPTkcgPj0gNjQKKwljYXNlIDg6CisJCW9uZWNtZCB8PSAob25lY21kIDw8IChjaGlwX21vZGUgKiAzMikpOworI2VuZGlmCisJY2FzZSA0OgorCQlvbmVjbWQgfD0gKG9uZWNtZCA8PCAoY2hpcF9tb2RlICogMTYpKTsKKwljYXNlIDI6CisJCW9uZWNtZCB8PSAob25lY21kIDw8IChjaGlwX21vZGUgKiA4KSk7CisJY2FzZSAxOgorCQk7CisJfQorCisJLyogQW5kIGZpbmFsbHksIGZvciB0aGUgbXVsdGktd29yZCBjYXNlLCByZXBsaWNhdGUgaXQgCisJICAgaW4gYWxsIHdvcmRzIGluIHRoZSBzdHJ1Y3R1cmUgKi8KKwlmb3IgKGk9MDsgaSA8IHdvcmRzX3Blcl9idXM7IGkrKykgeworCQl2YWwueFtpXSA9IG9uZWNtZDsKKwl9CisKKwlyZXR1cm4gdmFsOworfQorI2RlZmluZSBDTUQoeCkgIGNmaV9idWlsZF9jbWQoKHgpLCBtYXAsIGNmaSkKKworLyoKKyAqIFNlbmRzIGEgQ0ZJIGNvbW1hbmQgdG8gYSBiYW5rIG9mIGZsYXNoIGZvciB0aGUgZ2l2ZW4gZ2VvbWV0cnkuCisgKgorICogUmV0dXJucyB0aGUgb2Zmc2V0IGluIGZsYXNoIHdoZXJlIHRoZSBjb21tYW5kIHdhcyB3cml0dGVuLgorICogSWYgcHJldl92YWwgaXMgbm9uLW51bGwsIGl0IHdpbGwgYmUgc2V0IHRvIHRoZSB2YWx1ZSBhdCB0aGUgY29tbWFuZCBhZGRyZXNzLAorICogYmVmb3JlIHRoZSBjb21tYW5kIHdhcyB3cml0dGVuLgorICovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGNmaV9zZW5kX2dlbl9jbWQodV9jaGFyIGNtZCwgdWludDMyX3QgY21kX2FkZHIsIHVpbnQzMl90IGJhc2UsCisJCQkJc3RydWN0IG1hcF9pbmZvICptYXAsIHN0cnVjdCBjZmlfcHJpdmF0ZSAqY2ZpLAorCQkJCWludCB0eXBlLCBtYXBfd29yZCAqcHJldl92YWwpCit7CisJbWFwX3dvcmQgdmFsOworCXVpbnQzMl90IGFkZHIgPSBiYXNlICsgY2ZpX2J1aWxkX2NtZF9hZGRyKGNtZF9hZGRyLCBjZmlfaW50ZXJsZWF2ZShjZmkpLCB0eXBlKTsKKworCXZhbCA9IGNmaV9idWlsZF9jbWQoY21kLCBtYXAsIGNmaSk7CisKKwlpZiAocHJldl92YWwpCisJCSpwcmV2X3ZhbCA9IG1hcF9yZWFkKG1hcCwgYWRkcik7CisKKwltYXBfd3JpdGUobWFwLCB2YWwsIGFkZHIpOworCisJcmV0dXJuIGFkZHIgLSBiYXNlOworfQorCitzdGF0aWMgaW5saW5lIHVpbnQ4X3QgY2ZpX3JlYWRfcXVlcnkoc3RydWN0IG1hcF9pbmZvICptYXAsIHVpbnQzMl90IGFkZHIpCit7CisJbWFwX3dvcmQgdmFsID0gbWFwX3JlYWQobWFwLCBhZGRyKTsKKworCWlmIChtYXBfYmFua3dpZHRoX2lzXzEobWFwKSkgeworCQlyZXR1cm4gdmFsLnhbMF07CisJfSBlbHNlIGlmIChtYXBfYmFua3dpZHRoX2lzXzIobWFwKSkgeworCQlyZXR1cm4gY2ZpMTZfdG9fY3B1KHZhbC54WzBdKTsKKwl9IGVsc2UgeworCQkvKiBObyBwb2ludCBpbiBhIDY0LWJpdCBieXRlc3dhcCBzaW5jZSB0aGF0IHdvdWxkIGp1c3QgYmUKKwkJICAgc3dhcHBpbmcgdGhlIHJlc3BvbnNlcyBmcm9tIGRpZmZlcmVudCBjaGlwcywgYW5kIHdlIGFyZQorCQkgICBvbmx5IGludGVyZXN0ZWQgaW4gb25lIGNoaXAgKGEgcmVwcmVzZW50YXRpdmUgc2FtcGxlKSAqLworCQlyZXR1cm4gY2ZpMzJfdG9fY3B1KHZhbC54WzBdKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjZmlfdWRlbGF5KGludCB1cykKK3sKKwlpZiAodXMgPj0gMTAwMCkgeworCQltc2xlZXAoKHVzKzk5OSkvMTAwMCk7CisJfSBlbHNlIHsKKwkJdWRlbGF5KHVzKTsKKwkJY29uZF9yZXNjaGVkKCk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2ZpX3NwaW5fbG9jayhzcGlubG9ja190ICptdXRleCkKK3sKKwlzcGluX2xvY2tfYmgobXV0ZXgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2ZpX3NwaW5fdW5sb2NrKHNwaW5sb2NrX3QgKm11dGV4KQoreworCXNwaW5fdW5sb2NrX2JoKG11dGV4KTsKK30KKworc3RydWN0IGNmaV9leHRxdWVyeSAqY2ZpX3JlYWRfcHJpKHN0cnVjdCBtYXBfaW5mbyAqbWFwLCB1aW50MTZfdCBhZHIsIHVpbnQxNl90IHNpemUsCisJCQkgICAgIGNvbnN0IGNoYXIqIG5hbWUpOworc3RydWN0IGNmaV9maXh1cCB7CisJdWludDE2X3QgbWZyOworCXVpbnQxNl90IGlkOworCXZvaWQgKCpmaXh1cCkoc3RydWN0IG10ZF9pbmZvICptdGQsIHZvaWQqIHBhcmFtKTsKKwl2b2lkKiBwYXJhbTsKK307CisKKyNkZWZpbmUgQ0ZJX01GUl9BTlkgMHhmZmZmCisjZGVmaW5lIENGSV9JRF9BTlkgIDB4ZmZmZgorCisjZGVmaW5lIENGSV9NRlJfQU1EIDB4MDAwMQorI2RlZmluZSBDRklfTUZSX1NUICAweDAwMjAgCS8qIFNUTWljcm9lbGVjdHJvbmljcyAqLworCit2b2lkIGNmaV9maXh1cChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IGNmaV9maXh1cCogZml4dXBzKTsKKwordHlwZWRlZiBpbnQgKCp2YXJzaXplX2Zyb2JfdCkoc3RydWN0IG1hcF9pbmZvICptYXAsIHN0cnVjdCBmbGNoaXAgKmNoaXAsCisJCQkgICAgICB1bnNpZ25lZCBsb25nIGFkciwgaW50IGxlbiwgdm9pZCAqdGh1bmspOworCitpbnQgY2ZpX3ZhcnNpemVfZnJvYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdmFyc2l6ZV9mcm9iX3QgZnJvYiwKKwlsb2ZmX3Qgb2ZzLCBzaXplX3QgbGVuLCB2b2lkICp0aHVuayk7CisKKworI2VuZGlmIC8qIF9fTVREX0NGSV9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRkL2NmaV9lbmRpYW4uaCBiL2luY2x1ZGUvbGludXgvbXRkL2NmaV9lbmRpYW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTcyNGY3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9tdGQvY2ZpX2VuZGlhbi5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiAkSWQ6IGNmaV9lbmRpYW4uaCx2IDEuMTEgMjAwMi8wMS8zMCAyMzoyMDo0OCBhd296bmlhayBFeHAgJAorICoKKyAqLworCisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorCisjaWZuZGVmIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TCisKKyNkZWZpbmUgQ0ZJX0hPU1RfRU5ESUFOCisKKyNlbHNlCisKKyNpZmRlZiBDT05GSUdfTVREX0NGSV9OT1NXQVAKKyNkZWZpbmUgQ0ZJX0hPU1RfRU5ESUFOCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NVERfQ0ZJX0xFX0JZVEVfU1dBUAorI2RlZmluZSBDRklfTElUVExFX0VORElBTgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTVREX0NGSV9CRV9CWVRFX1NXQVAKKyNkZWZpbmUgQ0ZJX0JJR19FTkRJQU4KKyNlbmRpZgorCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ0ZJX0xJVFRMRV9FTkRJQU4pCisjZGVmaW5lIGNwdV90b19jZmk4KHgpICh4KQorI2RlZmluZSBjZmk4X3RvX2NwdSh4KSAoeCkKKyNkZWZpbmUgY3B1X3RvX2NmaTE2KHgpIGNwdV90b19sZTE2KHgpCisjZGVmaW5lIGNwdV90b19jZmkzMih4KSBjcHVfdG9fbGUzMih4KQorI2RlZmluZSBjcHVfdG9fY2ZpNjQoeCkgY3B1X3RvX2xlNjQoeCkKKyNkZWZpbmUgY2ZpMTZfdG9fY3B1KHgpIGxlMTZfdG9fY3B1KHgpCisjZGVmaW5lIGNmaTMyX3RvX2NwdSh4KSBsZTMyX3RvX2NwdSh4KQorI2RlZmluZSBjZmk2NF90b19jcHUoeCkgbGU2NF90b19jcHUoeCkKKyNlbGlmIGRlZmluZWQgKENGSV9CSUdfRU5ESUFOKQorI2RlZmluZSBjcHVfdG9fY2ZpOCh4KSAoeCkKKyNkZWZpbmUgY2ZpOF90b19jcHUoeCkgKHgpCisjZGVmaW5lIGNwdV90b19jZmkxNih4KSBjcHVfdG9fYmUxNih4KQorI2RlZmluZSBjcHVfdG9fY2ZpMzIoeCkgY3B1X3RvX2JlMzIoeCkKKyNkZWZpbmUgY3B1X3RvX2NmaTY0KHgpIGNwdV90b19iZTY0KHgpCisjZGVmaW5lIGNmaTE2X3RvX2NwdSh4KSBiZTE2X3RvX2NwdSh4KQorI2RlZmluZSBjZmkzMl90b19jcHUoeCkgYmUzMl90b19jcHUoeCkKKyNkZWZpbmUgY2ZpNjRfdG9fY3B1KHgpIGJlNjRfdG9fY3B1KHgpCisjZWxpZiBkZWZpbmVkIChDRklfSE9TVF9FTkRJQU4pCisjZGVmaW5lIGNwdV90b19jZmk4KHgpICh4KQorI2RlZmluZSBjZmk4X3RvX2NwdSh4KSAoeCkKKyNkZWZpbmUgY3B1X3RvX2NmaTE2KHgpICh4KQorI2RlZmluZSBjcHVfdG9fY2ZpMzIoeCkgKHgpCisjZGVmaW5lIGNwdV90b19jZmk2NCh4KSAoeCkKKyNkZWZpbmUgY2ZpMTZfdG9fY3B1KHgpICh4KQorI2RlZmluZSBjZmkzMl90b19jcHUoeCkgKHgpCisjZGVmaW5lIGNmaTY0X3RvX2NwdSh4KSAoeCkKKyNlbHNlCisjZXJyb3IgTm8gQ0ZJIGVuZGlhbm5lc3MgZGVmaW5lZAorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC9jb21wYXRtYWMuaCBiL2luY2x1ZGUvbGludXgvbXRkL2NvbXBhdG1hYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkMTMwMGQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L210ZC9jb21wYXRtYWMuaApAQCAtMCwwICsxLDEwIEBACisKKyNpZm5kZWYgX19MSU5VWF9NVERfQ09NUEFUTUFDX0hfXworI2RlZmluZSBfX0xJTlVYX01URF9DT01QQVRNQUNfSF9fCisKKy8qIE5vdGhpbmcgdG8gc2VlIGhlcmUuIFdlIHdyaXRlIDIuNS1jb21wYXRpYmxlIGNvZGUgYW5kIHRoaXMKKyAgIGZpbGUgbWFrZXMgaXQgYWxsIE9LIGluIG9sZGVyIGtlcm5lbHMsIGJ1dCBpdCdzIGVtcHR5IGluIF9jdXJyZW50XworICAga2VybmVscy4gSW5jbHVkZSBndWFyZCBqdXN0IHRvIG1ha2UgR0NDIGlnbm9yZSBpdCBpbiBmdXR1cmUgaW5jbHVzaW9ucworICAgYW55d2F5Li4uICovCisKKyNlbmRpZiAvKiBfX0xJTlVYX01URF9DT01QQVRNQUNfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC9jb25jYXQuaCBiL2luY2x1ZGUvbGludXgvbXRkL2NvbmNhdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkOGRjNjcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L210ZC9jb25jYXQuaApAQCAtMCwwICsxLDIzIEBACisvKgorICogTVREIGRldmljZSBjb25jYXRlbmF0aW9uIGxheWVyIGRlZmluaXRpb25zCisgKgorICogKEMpIDIwMDIgUm9iZXJ0IEthaXNlciA8cmthaXNlckBzeXNnby5kZT4KKyAqCisgKiBUaGlzIGNvZGUgaXMgR1BMCisgKgorICogJElkOiBjb25jYXQuaCx2IDEuMSAyMDAyLzAzLzA4IDE2OjM0OjM2IHJrYWlzZXIgRXhwICQKKyAqLworCisjaWZuZGVmIE1URF9DT05DQVRfSAorI2RlZmluZSBNVERfQ09OQ0FUX0gKKworCitzdHJ1Y3QgbXRkX2luZm8gKm10ZF9jb25jYXRfY3JlYXRlKAorICAgIHN0cnVjdCBtdGRfaW5mbyAqc3ViZGV2W10sICAvKiBzdWJkZXZpY2VzIHRvIGNvbmNhdGVuYXRlICovCisgICAgaW50IG51bV9kZXZzLCAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBzdWJkZXZpY2VzICAgICAgKi8KKyAgICBjaGFyICpuYW1lKTsgICAgICAgICAgICAgICAgLyogbmFtZSBmb3IgdGhlIG5ldyBkZXZpY2UgICAqLworCit2b2lkIG10ZF9jb25jYXRfZGVzdHJveShzdHJ1Y3QgbXRkX2luZm8gKm10ZCk7CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC9kb2MyMDAwLmggYi9pbmNsdWRlL2xpbnV4L210ZC9kb2MyMDAwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTUzZTY0ZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbXRkL2RvYzIwMDAuaApAQCAtMCwwICsxLDE5NSBAQAorLyogCisgKiBMaW51eCBkcml2ZXIgZm9yIERpc2stT24tQ2hpcCBkZXZpY2VzCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5IE1hY2hpbmUgVmlzaW9uIEhvbGRpbmdzLCBJbmMuICAgCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMyBEYXZpZCBXb29kaG91c2UgPGR3bXcyQGluZnJhZGVhZC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAwMyBHcmVnIFVuZ2VyZXIgPGdlcmdAc25hcGdlYXIuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMDMgU25hcEdlYXIgSW5jCisgKgorICogJElkOiBkb2MyMDAwLmgsdiAxLjI0IDIwMDUvMDEvMDUgMTI6NDA6MzggZHdtdzIgRXhwICQgCisgKgorICogUmVsZWFzZWQgdW5kZXIgR1BMCisgKi8KKworI2lmbmRlZiBfX01URF9ET0MyMDAwX0hfXworI2RlZmluZSBfX01URF9ET0MyMDAwX0hfXworCisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KKworI2RlZmluZSBEb0NfU2lnMSAwCisjZGVmaW5lIERvQ19TaWcyIDEKKworI2RlZmluZSBEb0NfQ2hpcElECQkweDEwMDAKKyNkZWZpbmUgRG9DX0RPQ1N0YXR1cwkJMHgxMDAxCisjZGVmaW5lIERvQ19ET0NDb250cm9sCQkweDEwMDIKKyNkZWZpbmUgRG9DX0Zsb29yU2VsZWN0CQkweDEwMDMKKyNkZWZpbmUgRG9DX0NEU05Db250cm9sCQkweDEwMDQKKyNkZWZpbmUgRG9DX0NEU05EZXZpY2VTZWxlY3QgCTB4MTAwNQorI2RlZmluZSBEb0NfRUNDQ29uZiAJCTB4MTAwNgorI2RlZmluZSBEb0NfMmtfRUNDU3RhdHVzCTB4MTAwNworCisjZGVmaW5lIERvQ19DRFNOU2xvd0lPCQkweDEwMGQKKyNkZWZpbmUgRG9DX0VDQ1N5bmRyb21lMAkweDEwMTAKKyNkZWZpbmUgRG9DX0VDQ1N5bmRyb21lMQkweDEwMTEKKyNkZWZpbmUgRG9DX0VDQ1N5bmRyb21lMgkweDEwMTIKKyNkZWZpbmUgRG9DX0VDQ1N5bmRyb21lMwkweDEwMTMKKyNkZWZpbmUgRG9DX0VDQ1N5bmRyb21lNAkweDEwMTQKKyNkZWZpbmUgRG9DX0VDQ1N5bmRyb21lNQkweDEwMTUKKyNkZWZpbmUgRG9DX0FsaWFzUmVzb2x1dGlvbiAJMHgxMDFiCisjZGVmaW5lIERvQ19Db25maWdJbnB1dAkJMHgxMDFjCisjZGVmaW5lIERvQ19SZWFkUGlwZUluaXQgCTB4MTAxZAorI2RlZmluZSBEb0NfV3JpdGVQaXBlVGVybSAJMHgxMDFlCisjZGVmaW5lIERvQ19MYXN0RGF0YVJlYWQgCTB4MTAxZgorI2RlZmluZSBEb0NfTk9QIAkJMHgxMDIwCisKKyNkZWZpbmUgRG9DX01pbF9DRFNOX0lPIAkweDA4MDAKKyNkZWZpbmUgRG9DXzJrX0NEU05fSU8gCQkweDE4MDAKKworI2RlZmluZSBEb0NfTXBsdXNfTk9QCQkJMHgxMDAyCisjZGVmaW5lIERvQ19NcGx1c19BbGlhc1Jlc29sdXRpb24JMHgxMDA0CisjZGVmaW5lIERvQ19NcGx1c19ET0NDb250cm9sCQkweDEwMDYKKyNkZWZpbmUgRG9DX01wbHVzX0FjY2Vzc1N0YXR1cwkJMHgxMDA4CisjZGVmaW5lIERvQ19NcGx1c19EZXZpY2VTZWxlY3QJCTB4MTAwOAorI2RlZmluZSBEb0NfTXBsdXNfQ29uZmlndXJhdGlvbgkJMHgxMDBhCisjZGVmaW5lIERvQ19NcGx1c19PdXRwdXRDb250cm9sCQkweDEwMGMKKyNkZWZpbmUgRG9DX01wbHVzX0ZsYXNoQ29udHJvbAkJMHgxMDIwCisjZGVmaW5lIERvQ19NcGx1c19GbGFzaFNlbGVjdCAJCTB4MTAyMgorI2RlZmluZSBEb0NfTXBsdXNfRmxhc2hDbWQJCTB4MTAyNAorI2RlZmluZSBEb0NfTXBsdXNfRmxhc2hBZGRyZXNzCQkweDEwMjYKKyNkZWZpbmUgRG9DX01wbHVzX0ZsYXNoRGF0YTAJCTB4MTAyOAorI2RlZmluZSBEb0NfTXBsdXNfRmxhc2hEYXRhMQkJMHgxMDI5CisjZGVmaW5lIERvQ19NcGx1c19SZWFkUGlwZUluaXQJCTB4MTAyYQorI2RlZmluZSBEb0NfTXBsdXNfTGFzdERhdGFSZWFkCQkweDEwMmMKKyNkZWZpbmUgRG9DX01wbHVzX0xhc3REYXRhUmVhZDEJCTB4MTAyZAorI2RlZmluZSBEb0NfTXBsdXNfV3JpdGVQaXBlVGVybSAJMHgxMDJlCisjZGVmaW5lIERvQ19NcGx1c19FQ0NTeW5kcm9tZTAJCTB4MTA0MAorI2RlZmluZSBEb0NfTXBsdXNfRUNDU3luZHJvbWUxCQkweDEwNDEKKyNkZWZpbmUgRG9DX01wbHVzX0VDQ1N5bmRyb21lMgkJMHgxMDQyCisjZGVmaW5lIERvQ19NcGx1c19FQ0NTeW5kcm9tZTMJCTB4MTA0MworI2RlZmluZSBEb0NfTXBsdXNfRUNDU3luZHJvbWU0CQkweDEwNDQKKyNkZWZpbmUgRG9DX01wbHVzX0VDQ1N5bmRyb21lNQkJMHgxMDQ1CisjZGVmaW5lIERvQ19NcGx1c19FQ0NDb25mIAkJMHgxMDQ2CisjZGVmaW5lIERvQ19NcGx1c19Ub2dnbGUJCTB4MTA0NgorI2RlZmluZSBEb0NfTXBsdXNfRG93bmxvYWRTdGF0dXMJMHgxMDc0CisjZGVmaW5lIERvQ19NcGx1c19DdHJsQ29uZmlybQkJMHgxMDc2CisjZGVmaW5lIERvQ19NcGx1c19Qb3dlcgkJCTB4MWZmZgorCisvKiBIb3cgdG8gYWNjZXNzIHRoZSBkZXZpY2U/IAorICogT24gQVJNLCBpdCdsbCBiZSBtbWFwJ2QgZGlyZWN0bHkgd2l0aCAzMi1iaXQgd2lkZSBhY2Nlc3Nlcy4gCisgKiBPbiBQUEMsIGl0J3MgbW1hcCdkIGFuZCAxNi1iaXQgd2lkZS4KKyAqIE90aGVycyB1c2UgcmVhZGIvd3JpdGViIAorICovCisjaWYgZGVmaW5lZChfX2FybV9fKQorI2RlZmluZSBSZWFkRE9DXyhhZHIsIHJlZykgICAgICAoKHVuc2lnbmVkIGNoYXIpKCoodm9sYXRpbGUgX191MzIgKikoKCh1bnNpZ25lZCBsb25nKWFkcikrKChyZWcpPDwyKSkpKQorI2RlZmluZSBXcml0ZURPQ18oZCwgYWRyLCByZWcpICBkb3sgKih2b2xhdGlsZSBfX3UzMiAqKSgoKHVuc2lnbmVkIGxvbmcpYWRyKSsoKHJlZyk8PDIpKSA9IChfX3UzMilkOyB3bWIoKTt9IHdoaWxlKDApCisjZGVmaW5lIERPQ19JT1JFTUFQX0xFTiAweDgwMDAKKyNlbGlmIGRlZmluZWQoX19wcGNfXykKKyNkZWZpbmUgUmVhZERPQ18oYWRyLCByZWcpICAgICAgKCh1bnNpZ25lZCBjaGFyKSgqKHZvbGF0aWxlIF9fdTE2ICopKCgodW5zaWduZWQgbG9uZylhZHIpKygocmVnKTw8MSkpKSkKKyNkZWZpbmUgV3JpdGVET0NfKGQsIGFkciwgcmVnKSAgZG97ICoodm9sYXRpbGUgX191MTYgKikoKCh1bnNpZ25lZCBsb25nKWFkcikrKChyZWcpPDwxKSkgPSAoX191MTYpZDsgd21iKCk7fSB3aGlsZSgwKQorI2RlZmluZSBET0NfSU9SRU1BUF9MRU4gMHg0MDAwCisjZWxzZQorI2RlZmluZSBSZWFkRE9DXyhhZHIsIHJlZykgICAgICByZWFkYigodm9pZCBfX2lvbWVtICopKGFkcikgKyAocmVnKSkKKyNkZWZpbmUgV3JpdGVET0NfKGQsIGFkciwgcmVnKSAgd3JpdGViKGQsICh2b2lkIF9faW9tZW0gKikoYWRyKSArIChyZWcpKQorI2RlZmluZSBET0NfSU9SRU1BUF9MRU4gMHgyMDAwCisKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKQorI2RlZmluZSBVU0VfTUVNQ1BZCisjZW5kaWYKKworLyogVGhlc2UgYXJlIHByb3ZpZGVkIHRvIGRpcmVjdGx5IHVzZSB0aGUgRG9DX3h4eCBkZWZpbmVzICovCisjZGVmaW5lIFJlYWRET0MoYWRyLCByZWcpICAgICAgUmVhZERPQ18oYWRyLERvQ18jI3JlZykKKyNkZWZpbmUgV3JpdGVET0MoZCwgYWRyLCByZWcpICBXcml0ZURPQ18oZCxhZHIsRG9DXyMjcmVnKQorCisjZGVmaW5lIERPQ19NT0RFX1JFU0VUIAkJMAorI2RlZmluZSBET0NfTU9ERV9OT1JNQUwgCTEKKyNkZWZpbmUgRE9DX01PREVfUkVTRVJWRUQxIAkyCisjZGVmaW5lIERPQ19NT0RFX1JFU0VSVkVEMiAJMworCisjZGVmaW5lIERPQ19NT0RFX0NMUl9FUlIgCTB4ODAKKyNkZWZpbmUJRE9DX01PREVfUlNUX0xBVAkweDEwCisjZGVmaW5lCURPQ19NT0RFX0JERUNUCQkweDA4CisjZGVmaW5lIERPQ19NT0RFX01EV1JFTiAJMHgwNAorCisjZGVmaW5lIERPQ19DaGlwSURfRG9jMmsgCTB4MjAKKyNkZWZpbmUgRE9DX0NoaXBJRF9Eb2Mya1RTT1AgCTB4MjEJLyogaW50ZXJuYWwgbnVtYmVyIGZvciBNVEQgKi8KKyNkZWZpbmUgRE9DX0NoaXBJRF9Eb2NNaWwgCTB4MzAKKyNkZWZpbmUgRE9DX0NoaXBJRF9Eb2NNaWxQbHVzMzIJMHg0MAorI2RlZmluZSBET0NfQ2hpcElEX0RvY01pbFBsdXMxNgkweDQxCisKKyNkZWZpbmUgQ0RTTl9DVFJMX0ZSX0IgCQkweDgwCisjZGVmaW5lIENEU05fQ1RSTF9GUl9CMAkJMHg0MAorI2RlZmluZSBDRFNOX0NUUkxfRlJfQjEJCTB4ODAKKworI2RlZmluZSBDRFNOX0NUUkxfRUNDX0lPIAkweDIwCisjZGVmaW5lIENEU05fQ1RSTF9GTEFTSF9JTyAJMHgxMAorI2RlZmluZSBDRFNOX0NUUkxfV1AgCQkweDA4CisjZGVmaW5lIENEU05fQ1RSTF9BTEUgCQkweDA0CisjZGVmaW5lIENEU05fQ1RSTF9DTEUgCQkweDAyCisjZGVmaW5lIENEU05fQ1RSTF9DRSAJCTB4MDEKKworI2RlZmluZSBET0NfRUNDX1JFU0VUIAkJMAorI2RlZmluZSBET0NfRUNDX0VSUk9SIAkJMHg4MAorI2RlZmluZSBET0NfRUNDX1JXIAkJMHgyMAorI2RlZmluZSBET0NfRUNDX19FTiAJCTB4MDgKKyNkZWZpbmUgRE9DX1RPR0dMRV9CSVQgCQkweDA0CisjZGVmaW5lIERPQ19FQ0NfUkVTViAJCTB4MDIKKyNkZWZpbmUgRE9DX0VDQ19JR05PUkUJCTB4MDEKKworI2RlZmluZSBET0NfRkxBU0hfQ0UJCTB4ODAKKyNkZWZpbmUgRE9DX0ZMQVNIX1dQCQkweDQwCisjZGVmaW5lIERPQ19GTEFTSF9CQU5LCQkweDAyCisKKy8qIFdlIGhhdmUgdG8gYWxzbyBzZXQgdGhlIHJlc2VydmVkIGJpdCAxIGZvciBlbmFibGUgKi8KKyNkZWZpbmUgRE9DX0VDQ19FTiAoRE9DX0VDQ19fRU4gfCBET0NfRUNDX1JFU1YpCisjZGVmaW5lIERPQ19FQ0NfRElTIChET0NfRUNDX1JFU1YpCisKK3N0cnVjdCBOYW5kIHsKKwljaGFyIGZsb29yLCBjaGlwOworCXVuc2lnbmVkIGxvbmcgY3VyYWRyOworCXVuc2lnbmVkIGNoYXIgY3VybW9kZTsKKwkvKiBBbHNvIHNvbWUgZXJhc2Uvd3JpdGUvcGlwZWxpbmUgaW5mbyB3aGVuIHdlIGdldCB0aGF0IGZhciAqLworfTsKKworI2RlZmluZSBNQVhfRkxPT1JTIDQKKyNkZWZpbmUgTUFYX0NISVBTIDQKKworI2RlZmluZSBNQVhfRkxPT1JTX01JTCAxCisjZGVmaW5lIE1BWF9DSElQU19NSUwgMQorCisjZGVmaW5lIE1BWF9GTE9PUlNfTVBMVVMgMgorI2RlZmluZSBNQVhfQ0hJUFNfTVBMVVMgMQorCisjZGVmaW5lIEFERFJfQ09MVU1OIDEKKyNkZWZpbmUgQUREUl9QQUdFIDIKKyNkZWZpbmUgQUREUl9DT0xVTU5fUEFHRSAzCisKK3N0cnVjdCBEaXNrT25DaGlwIHsKKwl1bnNpZ25lZCBsb25nIHBoeXNhZHI7CisJdm9pZCBfX2lvbWVtICp2aXJ0YWRyOworCXVuc2lnbmVkIGxvbmcgdG90bGVuOworCXVuc2lnbmVkIGNoYXIgQ2hpcElEOyAvKiBUeXBlIG9mIERpc2tPbkNoaXAgKi8KKwlpbnQgaW9yZWc7CisJCisJdW5zaWduZWQgbG9uZyBtZnI7IC8qIEZsYXNoIElEcyAtIG9ubHkgb25lIHR5cGUgb2YgZmxhc2ggcGVyIGRldmljZSAqLworCXVuc2lnbmVkIGxvbmcgaWQ7CisJaW50IGNoaXBzaGlmdDsKKwljaGFyIHBhZ2UyNTY7CisJY2hhciBwYWdlYWRybGVuOworCWNoYXIgaW50ZXJsZWF2ZTsgLyogSW50ZXJuYWwgaW50ZXJsZWF2aW5nIC0gTWlsbGVubml1bSBQbHVzIHN0eWxlICovCisJdW5zaWduZWQgbG9uZyBlcmFzZXNpemU7CisJCisJaW50IGN1cmZsb29yOworCWludCBjdXJjaGlwOworCQorCWludCBudW1jaGlwczsKKwlzdHJ1Y3QgTmFuZCAqY2hpcHM7CisJc3RydWN0IG10ZF9pbmZvICpuZXh0ZG9jOworCXN0cnVjdCBzZW1hcGhvcmUgbG9jazsKK307CisKK2ludCBkb2NfZGVjb2RlX2VjYyh1bnNpZ25lZCBjaGFyIHNlY3Rvcls1MTJdLCB1bnNpZ25lZCBjaGFyIGVjYzFbNl0pOworCisjZW5kaWYgLyogX19NVERfRE9DMjAwMF9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRkL2ZsYXNoY2hpcC5oIGIvaW5jbHVkZS9saW51eC9tdGQvZmxhc2hjaGlwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY2YmE4MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbXRkL2ZsYXNoY2hpcC5oCkBAIC0wLDAgKzEsODkgQEAKKworLyogCisgKiBzdHJ1Y3QgZmxjaGlwIGRlZmluaXRpb24KKyAqIAorICogQ29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGxvY2F0aW9uIGFuZCBzdGF0ZSBvZiBhIGdpdmVuIGZsYXNoIGRldmljZSAKKyAqCisgKiAoQykgMjAwMCBSZWQgSGF0LiBHUExkLgorICoKKyAqICRJZDogZmxhc2hjaGlwLmgsdiAxLjE1IDIwMDQvMTEvMDUgMjI6NDE6MDYgbmljbyBFeHAgJAorICoKKyAqLworCisjaWZuZGVmIF9fTVREX0ZMQVNIQ0hJUF9IX18KKyNkZWZpbmUgX19NVERfRkxBU0hDSElQX0hfXworCisvKiBGb3Igc3BpbmxvY2tzLiBzY2hlZC5oIGluY2x1ZGVzIHNwaW5sb2NrLmggZnJvbSB3aGljaGV2ZXIgZGlyZWN0b3J5IGl0CisgKiBoYXBwZW5zIHRvIGJlIGluIC0gc28gd2UgZG9uJ3QgaGF2ZSB0byBjYXJlIHdoZXRoZXIgd2UncmUgb24gMi4yLCB3aGljaAorICogaGFzIGFzbS9zcGlubG9jay5oLCBvciAyLjQsIHdoaWNoIGhhcyBsaW51eC9zcGlubG9jay5oIAorICovCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKwordHlwZWRlZiBlbnVtIHsgCisJRkxfUkVBRFksCisJRkxfU1RBVFVTLAorCUZMX0NGSV9RVUVSWSwKKwlGTF9KRURFQ19RVUVSWSwKKwlGTF9FUkFTSU5HLAorCUZMX0VSQVNFX1NVU1BFTkRJTkcsCisJRkxfRVJBU0VfU1VTUEVOREVELAorCUZMX1dSSVRJTkcsCisJRkxfV1JJVElOR19UT19CVUZGRVIsCisJRkxfV1JJVEVfU1VTUEVORElORywKKwlGTF9XUklURV9TVVNQRU5ERUQsCisJRkxfUE1fU1VTUEVOREVELAorCUZMX1NZTkNJTkcsCisJRkxfVU5MT0FESU5HLAorCUZMX0xPQ0tJTkcsCisJRkxfVU5MT0NLSU5HLAorCUZMX1BPSU5ULAorCUZMX1hJUF9XSElMRV9FUkFTSU5HLAorCUZMX1hJUF9XSElMRV9XUklUSU5HLAorCUZMX1VOS05PV04KK30gZmxzdGF0ZV90OworCisKKworLyogTk9URTogY29uZnVzaW5nbHksIHRoaXMgY2FuIGJlIHVzZWQgdG8gcmVmZXIgdG8gbW9yZSB0aGFuIG9uZSBjaGlwIGF0IGEgdGltZSwgCisgICBpZiB0aGV5J3JlIGludGVybGVhdmVkLiAgVGhpcyBjYW4gZXZlbiByZWZlciB0byBpbmRpdmlkdWFsIHBhcnRpdGlvbnMgb24KKyAgIHRoZSBzYW1lIHBoeXNpY2FsIGNoaXAgd2hlbiBwcmVzZW50LiAqLworCitzdHJ1Y3QgZmxjaGlwIHsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0OyAvKiBPZmZzZXQgd2l0aGluIHRoZSBtYXAgKi8KKwkvLwl1bnNpZ25lZCBsb25nIGxlbjsKKwkvKiBXZSBvbWl0IGxlbiBmb3Igbm93LCBiZWNhdXNlIHdoZW4gd2UgZ3JvdXAgdGhlbSB0b2dldGhlcgorCSAgIHdlIGluc2lzdCB0aGF0IHRoZXkncmUgYWxsIG9mIHRoZSBzYW1lIHNpemUsIGFuZCB0aGUgY2hpcCBzaXplCisJICAgaXMgaGVsZCBpbiB0aGUgbmV4dCBsZXZlbCB1cC4gSWYgd2UgZ2V0IG1vcmUgdmVyc2F0aWxlIGxhdGVyLAorCSAgIGl0J2xsIG1ha2UgaXQgYSBkYW1uIHNpZ2h0IGhhcmRlciB0byBmaW5kIHdoaWNoIGNoaXAgd2Ugd2FudCBmcm9tCisJICAgYSBnaXZlbiBvZmZzZXQsIGFuZCB3ZSdsbCB3YW50IHRvIGFkZCB0aGUgcGVyLWNoaXAgbGVuZ3RoIGZpZWxkCisJICAgYmFjayBpbi4KKwkqLworCWludCByZWZfcG9pbnRfY291bnRlcjsKKwlmbHN0YXRlX3Qgc3RhdGU7CisJZmxzdGF0ZV90IG9sZHN0YXRlOworCisJaW50IHdyaXRlX3N1c3BlbmRlZDoxOworCWludCBlcmFzZV9zdXNwZW5kZWQ6MTsKKwl1bnNpZ25lZCBsb25nIGluX3Byb2dyZXNzX2Jsb2NrX2FkZHI7CisKKwlzcGlubG9ja190ICptdXRleDsKKwlzcGlubG9ja190IF9zcGlubG9jazsgLyogV2UgZG8gaXQgbGlrZSB0aGlzIGJlY2F1c2Ugc29tZXRpbWVzIHRoZXknbGwgYmUgc2hhcmVkLiAqLworCXdhaXRfcXVldWVfaGVhZF90IHdxOyAvKiBXYWl0IG9uIGhlcmUgd2hlbiB3ZSdyZSB3YWl0aW5nIGZvciB0aGUgY2hpcAorCQkJICAgICB0byBiZSByZWFkeSAqLworCWludCB3b3JkX3dyaXRlX3RpbWU7CisJaW50IGJ1ZmZlcl93cml0ZV90aW1lOworCWludCBlcmFzZV90aW1lOworCisJdm9pZCAqcHJpdjsKK307CisKKy8qIFRoaXMgaXMgdXNlZCB0byBoYW5kbGUgY29udGVudGlvbiBvbiB3cml0ZS9lcmFzZSBvcGVyYXRpb25zCisgICBiZXR3ZWVuIHBhcnRpdGlvbnMgb2YgdGhlIHNhbWUgcGh5c2ljYWwgY2hpcC4gKi8KK3N0cnVjdCBmbGNoaXBfc2hhcmVkIHsKKwlzcGlubG9ja190IGxvY2s7CisJc3RydWN0IGZsY2hpcCAqd3JpdGluZzsKKwlzdHJ1Y3QgZmxjaGlwICplcmFzaW5nOworfTsKKworCisjZW5kaWYgLyogX19NVERfRkxBU0hDSElQX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdGQvZnRsLmggYi9pbmNsdWRlL2xpbnV4L210ZC9mdGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjc4NDU5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9tdGQvZnRsLmgKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqICRJZDogZnRsLmgsdiAxLjYgMjAwMy8wMS8yNCAxMzoyMDowNCBkd213MiBFeHAgJAorICogCisgKiBEZXJpdmVkIGZyb20gKGFuZCBwcm9iYWJseSBpZGVudGljYWwgdG8pOgorICogZnRsLmggMS43IDE5OTkvMTAvMjUgMjA6MjM6MTcKKyAqCisgKiBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlCisgKiBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluCisgKiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZQorICogYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisgKgorICogU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIgorICogYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZQorICogdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuIAorICoKKyAqIFRoZSBpbml0aWFsIGRldmVsb3BlciBvZiB0aGUgb3JpZ2luYWwgY29kZSBpcyBEYXZpZCBBLiBIaW5kcworICogPGRhaGluZHNAdXNlcnMuc291cmNlZm9yZ2UubmV0Pi4gIFBvcnRpb25zIGNyZWF0ZWQgYnkgRGF2aWQgQS4gSGluZHMKKyAqIGFyZSBDb3B5cmlnaHQgKEMpIDE5OTkgRGF2aWQgQS4gSGluZHMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlCisgKiB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyICh0aGUgIkdQTCIpLCBpbgorICogd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhlCisgKiBhYm92ZS4gIElmIHlvdSB3aXNoIHRvIGFsbG93IHRoZSB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZQorICogb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdQTCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UKKyAqIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIE1QTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbiBieQorICogZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UgYW5kCisgKiBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwuICBJZiB5b3UgZG8gbm90IGRlbGV0ZSB0aGUKKyAqIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZQorICogdW5kZXIgZWl0aGVyIHRoZSBNUEwgb3IgdGhlIEdQTC4KKyAqLworCisjaWZuZGVmIF9MSU5VWF9GVExfSAorI2RlZmluZSBfTElOVVhfRlRMX0gKKwordHlwZWRlZiBzdHJ1Y3QgZXJhc2VfdW5pdF9oZWFkZXJfdCB7CisgICAgdV9pbnQ4X3QJTGlua1RhcmdldFR1cGxlWzVdOworICAgIHVfaW50OF90CURhdGFPcmdUdXBsZVsxMF07CisgICAgdV9pbnQ4X3QJTnVtVHJhbnNmZXJVbml0czsKKyAgICB1X2ludDMyX3QJRXJhc2VDb3VudDsKKyAgICB1X2ludDE2X3QJTG9naWNhbEVVTjsKKyAgICB1X2ludDhfdAlCbG9ja1NpemU7CisgICAgdV9pbnQ4X3QJRXJhc2VVbml0U2l6ZTsKKyAgICB1X2ludDE2X3QJRmlyc3RQaHlzaWNhbEVVTjsKKyAgICB1X2ludDE2X3QJTnVtRXJhc2VVbml0czsKKyAgICB1X2ludDMyX3QJRm9ybWF0dGVkU2l6ZTsKKyAgICB1X2ludDMyX3QJRmlyc3RWTUFkZHJlc3M7CisgICAgdV9pbnQxNl90CU51bVZNUGFnZXM7CisgICAgdV9pbnQ4X3QJRmxhZ3M7CisgICAgdV9pbnQ4X3QJQ29kZTsKKyAgICB1X2ludDMyX3QJU2VyaWFsTnVtYmVyOworICAgIHVfaW50MzJfdAlBbHRFVUhPZmZzZXQ7CisgICAgdV9pbnQzMl90CUJBTU9mZnNldDsKKyAgICB1X2ludDhfdAlSZXNlcnZlZFsxMl07CisgICAgdV9pbnQ4X3QJRW5kVHVwbGVbMl07Cit9IGVyYXNlX3VuaXRfaGVhZGVyX3Q7CisKKy8qIEZsYWdzIGluIGVyYXNlX3VuaXRfaGVhZGVyX3QgKi8KKyNkZWZpbmUgSElEREVOX0FSRUEJCTB4MDEKKyNkZWZpbmUgUkVWRVJTRV9QT0xBUklUWQkweDAyCisjZGVmaW5lIERPVUJMRV9CQUkJCTB4MDQKKworLyogRGVmaW5pdGlvbnMgZm9yIGJsb2NrIGFsbG9jYXRpb24gaW5mb3JtYXRpb24gKi8KKworI2RlZmluZSBCTE9DS19GUkVFKGIpCQkoKGIpID09IDB4ZmZmZmZmZmYpCisjZGVmaW5lIEJMT0NLX0RFTEVURUQoYikJKCgoYikgPT0gMCkgfHwgKChiKSA9PSAweGZmZmZmZmZlKSkKKworI2RlZmluZSBCTE9DS19UWVBFKGIpCQkoKGIpICYgMHg3ZikKKyNkZWZpbmUgQkxPQ0tfQUREUkVTUyhiKQkoKGIpICYgfjB4N2YpCisjZGVmaW5lIEJMT0NLX05VTUJFUihiKQkJKChiKSA+PiA5KQorI2RlZmluZSBCTE9DS19DT05UUk9MCQkweDMwCisjZGVmaW5lIEJMT0NLX0RBVEEJCTB4NDAKKyNkZWZpbmUgQkxPQ0tfUkVQTEFDRU1FTlQJMHg2MAorI2RlZmluZSBCTE9DS19CQUQJCTB4NzAKKworI2VuZGlmIC8qIF9MSU5VWF9GVExfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdGQvZ2VuX3Byb2JlLmggYi9pbmNsdWRlL2xpbnV4L210ZC9nZW5fcHJvYmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDdiZGVjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9tdGQvZ2VuX3Byb2JlLmgKQEAgLTAsMCArMSwyMyBAQAorLyoKKyAqIChDKSAyMDAxLCAyMDAxIFJlZCBIYXQsIEluYy4KKyAqIEdQTCdkCisgKiAkSWQ6IGdlbl9wcm9iZS5oLHYgMS4zIDIwMDQvMTAvMjAgMjI6MTA6MzMgZHdtdzIgRXhwICQKKyAqLworCisjaWZuZGVmIF9fTElOVVhfTVREX0dFTl9QUk9CRV9IX18KKyNkZWZpbmUgX19MSU5VWF9NVERfR0VOX1BST0JFX0hfXworCisjaW5jbHVkZSA8bGludXgvbXRkL2ZsYXNoY2hpcC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tYXAuaD4gCisjaW5jbHVkZSA8bGludXgvbXRkL2NmaS5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorCitzdHJ1Y3QgY2hpcF9wcm9iZSB7CisJY2hhciAqbmFtZTsKKwlpbnQgKCpwcm9iZV9jaGlwKShzdHJ1Y3QgbWFwX2luZm8gKm1hcCwgX191MzIgYmFzZSwKKwkJCSAgdW5zaWduZWQgbG9uZyAqY2hpcF9tYXAsIHN0cnVjdCBjZmlfcHJpdmF0ZSAqY2ZpKTsKK307CisKK3N0cnVjdCBtdGRfaW5mbyAqbXRkX2RvX2NoaXBfcHJvYmUoc3RydWN0IG1hcF9pbmZvICptYXAsIHN0cnVjdCBjaGlwX3Byb2JlICpjcCk7CisKKyNlbmRpZiAvKiBfX0xJTlVYX01URF9HRU5fUFJPQkVfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC9pZmxhc2guaCBiL2luY2x1ZGUvbGludXgvbXRkL2lmbGFzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhYTViNGYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L210ZC9pZmxhc2guaApAQCAtMCwwICsxLDk4IEBACisvKiAkSWQ6IGlmbGFzaC5oLHYgMS4yIDIwMDAvMTEvMTMgMTg6MDE6NTQgZHdtdzIgRXhwICQgKi8KKworI2lmbmRlZiBfX01URF9JRkxBU0hfSF9fCisjZGVmaW5lIF9fTVREX0lGTEFTSF9IX18KKworLyogRXh0ZW5kZWQgQ0lTIHJlZ2lzdGVycyBmb3IgU2VyaWVzIDIgYW5kIDIrIGNhcmRzICovCisvKiBUaGUgcmVnaXN0ZXJzIGFyZSBhbGwgb2Zmc2V0cyBmcm9tIDB4NDAwMCAqLworI2RlZmluZSBDSVNSRUdfQ1NSCQkweDAxMDAKKyNkZWZpbmUgQ0lTUkVHX1dQCQkweDAxMDQKKyNkZWZpbmUgQ0lTUkVHX1JEWUJTWQkJMHgwMTQwCisKKy8qIEV4dGVuZGVkIENJUyByZWdpc3RlcnMgZm9yIFNlcmllcyAyIGNhcmRzICovCisjZGVmaW5lIENJU1JFR19TTEVFUAkJMHgwMTE4CisjZGVmaW5lIENJU1JFR19SRFlfTUFTSwkJMHgwMTIwCisjZGVmaW5lIENJU1JFR19SRFlfU1RBVFVTCTB4MDEzMAorCisvKiBFeHRlbmRlZCBDSVMgcmVnaXN0ZXJzIGZvciBTZXJpZXMgMisgY2FyZHMgKi8KKyNkZWZpbmUgQ0lTUkVHX1ZDUgkJMHgwMTBjCisKKy8qIENhcmQgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIENTUl9TUkVTRVQJCTB4MjAJLyogU29mdCByZXNldCAqLworI2RlZmluZSBDU1JfQ01XUAkJMHgxMAkvKiBDb21tb24gbWVtb3J5IHdyaXRlIHByb3RlY3QgKi8KKyNkZWZpbmUgQ1NSX1BXUkRPV04JCTB4MDgJLyogUG93ZXIgZG93biBzdGF0dXMgKi8KKyNkZWZpbmUgQ1NSX0NJU1dQCQkweDA0CS8qIENvbW1vbiBtZW1vcnkgQ0lTIFdQICovCisjZGVmaW5lIENTUl9XUAkJCTB4MDIJLyogTWVjaGFuaWNhbCB3cml0ZSBwcm90ZWN0ICovCisjZGVmaW5lIENTUl9SRUFEWQkJMHgwMQkvKiBSZWFkeS9idXN5IHN0YXR1cyAqLworCisvKiBXcml0ZSBQcm90ZWN0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lIFdQX0JMS0VOCQkweDA0CS8qIEVuYWJsZSBibG9jayBsb2NraW5nICovCisjZGVmaW5lIFdQX0NNV1AJCQkweDAyCS8qIENvbW1vbiBtZW1vcnkgd3JpdGUgcHJvdGVjdCAqLworI2RlZmluZSBXUF9DSVNXUAkJMHgwMQkvKiBDb21tb24gbWVtb3J5IENJUyBXUCAqLworCisvKiBWb2x0YWdlIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVkNSX1ZDQ19MRVZFTAkJMHg4MAkvKiAwID0gNVYsIDEgPSAzLjNWICovCisjZGVmaW5lIFZDUl9WUFBfVkFMSUQJCTB4MDIJLyogVnBwIFZhbGlkICovCisjZGVmaW5lIFZDUl9WUFBfR0VOCQkweDAxCS8qIEludGVncmF0ZWQgVnBwIGdlbmVyYXRvciAqLworCisvKiBSZWFkeS9CdXN5IE1vZGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUkRZQlNZX1JBQ0sJCTB4MDIJLyogUmVhZHkgYWNrbm93bGVkZ2UgKi8KKyNkZWZpbmUgUkRZQlNZX01PREUJCTB4MDEJLyogMSA9IGhpZ2ggcGVyZm9ybWFuY2UgKi8KKworI2RlZmluZSBMT1coeCkgKCh4KSAmIDB4ZmYpCisKKy8qIDI4RjAwOFNBLUNvbXBhdGlibGUgQ29tbWFuZCBTZXQgKi8KKyNkZWZpbmUgSUZfUkVBRF9BUlJBWQkJMHhmZmZmCisjZGVmaW5lIElGX0lOVEVMX0lECQkweDkwOTAKKyNkZWZpbmUgSUZfUkVBRF9DU1IJCTB4NzA3MAorI2RlZmluZSBJRl9DTEVBUl9DU1IJCTB4NTA1MAorI2RlZmluZSBJRl9XUklURQkJMHg0MDQwCisjZGVmaW5lIElGX0JMT0NLX0VSQVNFCQkweDIwMjAKKyNkZWZpbmUgSUZfRVJBU0VfU1VTUEVORAkweGIwYjAKKyNkZWZpbmUgSUZfQ09ORklSTQkJMHhkMGQwCisKKy8qIDI4RjAxNlNBIFBlcmZvcm1hbmNlIEVuaGFuY2VtZW50IENvbW1hbmRzICovCisjZGVmaW5lIElGX1JFQURfUEFHRQkJMHg3NTc1CisjZGVmaW5lIElGX1BBR0VfU1dBUAkJMHg3MjcyCisjZGVmaW5lIElGX1NJTkdMRV9MT0FECQkweDc0NzQKKyNkZWZpbmUgSUZfU0VRX0xPQUQJCTB4ZTBlMAorI2RlZmluZSBJRl9QQUdFX1dSSVRFCQkweDBjMGMKKyNkZWZpbmUgSUZfUkRZX01PREUJCTB4OTY5NgorI2RlZmluZSBJRl9SRFlfTEVWRUwJCTB4MDEwMQorI2RlZmluZSBJRl9SRFlfUFVMU0VfV1JJVEUJMHgwMjAyCisjZGVmaW5lIElGX1JEWV9QVUxTRV9FUkFTRQkweDAzMDMKKyNkZWZpbmUgSUZfUkRZX0RJU0FCTEUJCTB4MDQwNAorI2RlZmluZSBJRl9MT0NLX0JMT0NLCQkweDc3NzcKKyNkZWZpbmUgSUZfVVBMT0FEX1NUQVRVUwkweDk3OTcKKyNkZWZpbmUgSUZfUkVBRF9FU1IJCTB4NzE3MQorI2RlZmluZSBJRl9FUkFTRV9VTkxPQ0tFRAkweGE3YTcKKyNkZWZpbmUgSUZfU0xFRVAJCTB4ZjBmMAorI2RlZmluZSBJRl9BQk9SVAkJMHg4MDgwCisjZGVmaW5lIElGX1VQTE9BRF9ERVZJTkZPCTB4OTk5OQorCisvKiBEZWZpbml0aW9ucyBmb3IgQ29tcGF0aWJsZSBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ1NSX1dSX1JFQURZCQkweDgwODAJLyogV3JpdGUgc3RhdGUgbWFjaGluZSBzdGF0dXMgKi8KKyNkZWZpbmUgQ1NSX0VSQV9TVVNQRU5ECQkweDQwNDAJLyogRXJhc2Ugc3VzcGVuZCBzdGF0dXMgKi8KKyNkZWZpbmUgQ1NSX0VSQV9FUlIJCTB4MjAyMAkvKiBFcmFzZSBzdGF0dXMgKi8KKyNkZWZpbmUgQ1NSX1dSX0VSUgkJMHgxMDEwCS8qIERhdGEgd3JpdGUgc3RhdHVzICovCisjZGVmaW5lIENTUl9WUFBfTE9XCQkweDA4MDgJLyogVnBwIHN0YXR1cyAqLworCisvKiBEZWZpbml0aW9ucyBmb3IgR2xvYmFsIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBHU1JfV1JfUkVBRFkJCTB4ODA4MAkvKiBXcml0ZSBzdGF0ZSBtYWNoaW5lIHN0YXR1cyAqLworI2RlZmluZSBHU1JfT1BfU1VTUEVORAkJMHg0MDQwCS8qIE9wZXJhdGlvbiBzdXNwZW5kIHN0YXR1cyAqLworI2RlZmluZSBHU1JfT1BfRVJSCQkweDIwMjAJLyogRGV2aWNlIG9wZXJhdGlvbiBzdGF0dXMgKi8KKyNkZWZpbmUgR1NSX1NMRUVQCQkweDEwMTAJLyogRGV2aWNlIHNsZWVwIHN0YXR1cyAqLworI2RlZmluZSBHU1JfUVVFVUVfRlVMTAkJMHgwODA4CS8qIFF1ZXVlIHN0YXR1cyAqLworI2RlZmluZSBHU1JfUEFHRV9BVkFJTAkJMHgwNDA0CS8qIFBhZ2UgYnVmZmVyIGF2YWlsYWJsZSBzdGF0dXMgKi8KKyNkZWZpbmUgR1NSX1BBR0VfUkVBRFkJCTB4MDIwMgkvKiBQYWdlIGJ1ZmZlciBzdGF0dXMgKi8KKyNkZWZpbmUgR1NSX1BBR0VfU0VMRUNUCQkweDAxMDEJLyogUGFnZSBidWZmZXIgc2VsZWN0IHN0YXR1cyAqLworCisvKiBEZWZpbml0aW9ucyBmb3IgQmxvY2sgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIEJTUl9SRUFEWQkJMHg4MDgwCS8qIEJsb2NrIHN0YXR1cyAqLworI2RlZmluZSBCU1JfVU5MT0NLCQkweDQwNDAJLyogQmxvY2sgbG9jayBzdGF0dXMgKi8KKyNkZWZpbmUgQlNSX0ZBSUxFRAkJMHgyMDIwCS8qIEJsb2NrIG9wZXJhdGlvbiBzdGF0dXMgKi8KKyNkZWZpbmUgQlNSX0FCT1JURUQJCTB4MTAxMAkvKiBPcGVyYXRpb24gYWJvcnQgc3RhdHVzICovCisjZGVmaW5lIEJTUl9RVUVVRV9GVUxMCQkweDA4MDgJLyogUXVldWUgc3RhdHVzICovCisjZGVmaW5lIEJTUl9WUFBfTE9XCQkweDA0MDQJLyogVnBwIHN0YXR1cyAqLworCisjZW5kaWYgLyogX19NVERfSUZMQVNIX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdGQvaW5mdGwuaCBiL2luY2x1ZGUvbGludXgvbXRkL2luZnRsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjUyYzhjYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbXRkL2luZnRsLmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqCWluZnRsLmggLS0gZGVmaW5lcyB0byBzdXBwb3J0IHRoZSBJbnZlcnNlIE5BTkQgRmxhc2ggVHJhbnNsYXRpb24gTGF5ZXIKKyAqCisgKgkoQykgQ29weXJpZ2h0IDIwMDIsIEdyZWcgVW5nZXJlciAoZ2VyZ0BzbmFwZ2Vhci5jb20pCisgKgorICoJJElkOiBpbmZ0bC5oLHYgMS42IDIwMDQvMDYvMzAgMTQ6NDk6MDAgZGJyb3duIEV4cCAkCisgKi8KKworI2lmbmRlZiBfX01URF9JTkZUTF9IX18KKyNkZWZpbmUgX19NVERfSU5GVExfSF9fCisKKyNpZm5kZWYgX19LRVJORUxfXworI2Vycm9yIFRoaXMgaXMgYSBrZXJuZWwgaGVhZGVyLiBQZXJoYXBzIGluY2x1ZGUgbmZ0bC11c2VyLmggaW5zdGVhZD8KKyNlbmRpZgorCisjaW5jbHVkZSA8bGludXgvbXRkL2Jsa3RyYW5zLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9uZnRsLmg+CisKKyNpbmNsdWRlIDxtdGQvaW5mdGwtdXNlci5oPgorCisjaWZuZGVmIElORlRMX01BSk9SCisjZGVmaW5lIElORlRMX01BSk9SIDk0CisjZW5kaWYKKyNkZWZpbmUgSU5GVExfUEFSVE5fQklUUyA0CisKKyNpZmRlZiBfX0tFUk5FTF9fCisKK3N0cnVjdCBJTkZUTHJlY29yZCB7CisJc3RydWN0IG10ZF9ibGt0cmFuc19kZXYgbWJkOworCV9fdTE2IE1lZGlhVW5pdDsKKwlfX3UzMiBFcmFzZVNpemU7CisJc3RydWN0IElORlRMTWVkaWFIZWFkZXIgTWVkaWFIZHI7CisJaW50IHVzZWNvdW50OworCXVuc2lnbmVkIGNoYXIgaGVhZHM7CisJdW5zaWduZWQgY2hhciBzZWN0b3JzOworCXVuc2lnbmVkIHNob3J0IGN5bGluZGVyczsKKwlfX3UxNiBudW12dW5pdHM7CisJX191MTYgZmlyc3RFVU47CisJX191MTYgbGFzdEVVTjsKKwlfX3UxNiBudW1mcmVlRVVOczsKKwlfX3UxNiBMYXN0RnJlZUVVTjsgCQkvKiBUbyBzcGVlZCB1cCBmaW5kaW5nIGEgZnJlZSBFVU4gKi8KKwlpbnQgaGVhZCxzZWN0LGN5bDsKKwlfX3UxNiAqUFV0YWJsZTsJIAkJLyogUGh5c2ljYWwgVW5pdCBUYWJsZSAgKi8KKwlfX3UxNiAqVlV0YWJsZTsgCQkvKiBWaXJ0dWFsIFVuaXQgVGFibGUgKi8KKyAgICAgICAgdW5zaWduZWQgaW50IG5iX2Jsb2NrczsJCS8qIG51bWJlciBvZiBwaHlzaWNhbCBibG9ja3MgKi8KKyAgICAgICAgdW5zaWduZWQgaW50IG5iX2Jvb3RfYmxvY2tzOwkvKiBudW1iZXIgb2YgYmxvY2tzIHVzZWQgYnkgdGhlIGJpb3MgKi8KKyAgICAgICAgc3RydWN0IGVyYXNlX2luZm8gaW5zdHI7CisgICAgICAgIHN0cnVjdCBuYW5kX29vYmluZm8gb29iaW5mbzsKK307CisKK2ludCBJTkZUTF9tb3VudChzdHJ1Y3QgSU5GVExyZWNvcmQgKnMpOworaW50IElORlRMX2Zvcm1hdGJsb2NrKHN0cnVjdCBJTkZUTHJlY29yZCAqcywgaW50IGJsb2NrKTsKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9fTVREX0lORlRMX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdGQvamVkZWMuaCBiL2luY2x1ZGUvbGludXgvbXRkL2plZGVjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJhMGY3MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbXRkL2plZGVjLmgKQEAgLTAsMCArMSw2NiBAQAorCisvKiBKRURFQyBGbGFzaCBJbnRlcmZhY2UuCisgKiBUaGlzIGlzIGFuIG9sZGVyIHR5cGUgb2YgaW50ZXJmYWNlIGZvciBzZWxmIHByb2dyYW1taW5nIGZsYXNoLiBJdCBpcyAKKyAqIGNvbW1vbmx5IHVzZSBpbiBvbGRlciBBTUQgY2hpcHMgYW5kIGlzIG9ic29sZXRlIGNvbXBhcmVkIHdpdGggQ0ZJLgorICogSXQgaXMgY2FsbGVkIEpFREVDIGJlY2F1c2UgdGhlIEpFREVDIGFzc29jaWF0aW9uIGRpc3RyaWJ1dGVzIHRoZSBJRCBjb2RlcworICogZm9yIHRoZSBjaGlwcy4KKyAqCisgKiBTZWUgdGhlIEFNRCBmbGFzaCBkYXRhYm9vayBmb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIG9wZXJhdGUgdGhlIGludGVyZmFjZS4KKyAqCisgKiAkSWQ6IGplZGVjLmgsdiAxLjMgMjAwMy8wNS8yMSAxMTo1MTowMSBkd213MiBFeHAgJAorICovCisKKyNpZm5kZWYgX19MSU5VWF9NVERfSkVERUNfSF9fCisjZGVmaW5lIF9fTElOVVhfTVREX0pFREVDX0hfXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2RlZmluZSBNQVhfSkVERUNfQ0hJUFMgMTYKKworLy8gTGlzdGluZyBvZiBhbGwgc3VwcG9ydGVkIGNoaXBzIGFuZCB0aGVpciBpbmZvcm1hdGlvbgorc3RydWN0IEpFREVDVGFibGUKK3sKKyAgIF9fdTE2IGplZGVjOworICAgY2hhciAqbmFtZTsKKyAgIHVuc2lnbmVkIGxvbmcgc2l6ZTsKKyAgIHVuc2lnbmVkIGxvbmcgc2VjdG9yc2l6ZTsKKyAgIF9fdTMyIGNhcGFiaWxpdGllczsKK307CisKKy8vIEpFREVDIGJlaW5nIDAgaXMgdGhlIGVuZCBvZiB0aGUgY2hpcCBhcnJheQorc3RydWN0IGplZGVjX2ZsYXNoX2NoaXAKK3sKKyAgIF9fdTE2IGplZGVjOworICAgdW5zaWduZWQgbG9uZyBzaXplOworICAgdW5zaWduZWQgbG9uZyBzZWN0b3JzaXplOworICAgCisgICAvLyAqKF9fdTgqKShiYXNlICsgKGFkZGVyIDw8IGFkZHJzaGlmdCkpID0gZGF0YSA8PCBkYXRhc2hpZnQKKyAgIC8vIEFkZHJlc3Mgc2l6ZSA9IHNpemUgPDwgYWRkcnNoaWZ0CisgICB1bnNpZ25lZCBsb25nIGJhc2U7ICAgICAgICAgICAvLyBCeXRlIDAgb2YgdGhlIGZsYXNoLCB3aWxsIGJlIHVuYWxpZ25lZAorICAgdW5zaWduZWQgaW50IGRhdGFzaGlmdDsgICAgICAgLy8gVXNlZnVsIGZvciAzMmJpdC8xNmJpdCBhY2Nlc3NlcworICAgdW5zaWduZWQgaW50IGFkZHJzaGlmdDsKKyAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0OyAgICAgICAgIC8vIGxpbmVyaXplZCBzdGFydC4gYmFzZT09b2Zmc2V0IGZvciB1bmJhbmtlZCwgdW5pbnRlcmxlYXZlZCBmbGFzaAorICAgCisgICBfX3UzMiBjYXBhYmlsaXRpZXM7CisgICAKKyAgIC8vIFRoZXNlIG1hcmtlcnMgYXJlIGZpbGxlZCBpbiBieSB0aGUgZmxhc2hfY2hpcF9zY2FuIGZ1bmN0aW9uCisgICB1bnNpZ25lZCBsb25nIHN0YXJ0OworICAgdW5zaWduZWQgbG9uZyBsZW5ndGg7Cit9OworCitzdHJ1Y3QgamVkZWNfcHJpdmF0ZQoreworICAgdW5zaWduZWQgbG9uZyBzaXplOyAgICAgICAgIC8vIFRvdGFsIHNpemUgb2YgYWxsIHRoZSBkZXZpY2VzCisgICAKKyAgIC8qIEJhbmsgaGFuZGxpbmcuIElmIHN1bShiYW5rX2ZpbGwpID09IHNpemUgdGhlbiB0aGlzIGlzIGxpbmVhciBmbGFzaC4KKyAgICAgIE90aGVyd2lzZSB0aGUgbWFwcGluZyBoYXMgaG9sZXMgaW4gaXQuIGJhbmtfZmlsbCBtYXkgYmUgdXNlZCB0bworICAgICAgZmluZCB0aGUgaG9sZXMsIGJ1dCBpbiB0aGUgY29tbW9uIHN5bWV0cmljIGNhc2UgCisgICAgICBiYW5rX2ZpbGxbMF0gPT0gYmFua19maWxsWypdLCB0aHVzIGFkZHJlc3NlcyBtYXkgYmUgY29tcHV0ZWQgCisgICAgICBtYXRobWF0aWNhbGx5LiBiYW5rX2ZpbGwgbXVzdCBiZSBwb3dlcnMgb2YgdHdvICovCisgICB1bnNpZ25lZCBpc19iYW5rZWQ7CisgICB1bnNpZ25lZCBsb25nIGJhbmtfZmlsbFtNQVhfSkVERUNfQ0hJUFNdOworICAgCisgICBzdHJ1Y3QgamVkZWNfZmxhc2hfY2hpcCBjaGlwc1tNQVhfSkVERUNfQ0hJUFNdOyAgCit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRkL21hcC5oIGIvaW5jbHVkZS9saW51eC9tdGQvbWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjAyNjhiOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbXRkL21hcC5oCkBAIC0wLDAgKzEsNDEyIEBACisKKy8qIE92ZXJoYXVsZWQgcm91dGluZXMgZm9yIGRlYWxpbmcgd2l0aCBkaWZmZXJlbnQgbW1hcCByZWdpb25zIG9mIGZsYXNoICovCisvKiAkSWQ6IG1hcC5oLHYgMS40NiAyMDA1LzAxLzA1IDE3OjA5OjQ0IGR3bXcyIEV4cCAkICovCisKKyNpZm5kZWYgX19MSU5VWF9NVERfTUFQX0hfXworI2RlZmluZSBfX0xJTlVYX01URF9NQVBfSF9fCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvY29tcGF0bWFjLmg+CisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vYnVnLmg+CisKKyNpZmRlZiBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzEKKyNkZWZpbmUgbWFwX2Jhbmt3aWR0aChtYXApIDEKKyNkZWZpbmUgbWFwX2Jhbmt3aWR0aF9pc18xKG1hcCkgKG1hcF9iYW5rd2lkdGgobWFwKSA9PSAxKQorI2RlZmluZSBtYXBfYmFua3dpZHRoX2lzX2xhcmdlKG1hcCkgKDApCisjZGVmaW5lIG1hcF93b3JkcyhtYXApICgxKQorI2RlZmluZSBNQVhfTUFQX0JBTktXSURUSCAxCisjZWxzZQorI2RlZmluZSBtYXBfYmFua3dpZHRoX2lzXzEobWFwKSAoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yCisjIGlmZGVmIG1hcF9iYW5rd2lkdGgKKyMgIHVuZGVmIG1hcF9iYW5rd2lkdGgKKyMgIGRlZmluZSBtYXBfYmFua3dpZHRoKG1hcCkgKChtYXApLT5iYW5rd2lkdGgpCisjIGVsc2UKKyMgIGRlZmluZSBtYXBfYmFua3dpZHRoKG1hcCkgMgorIyAgZGVmaW5lIG1hcF9iYW5rd2lkdGhfaXNfbGFyZ2UobWFwKSAoMCkKKyMgIGRlZmluZSBtYXBfd29yZHMobWFwKSAoMSkKKyMgZW5kaWYKKyNkZWZpbmUgbWFwX2Jhbmt3aWR0aF9pc18yKG1hcCkgKG1hcF9iYW5rd2lkdGgobWFwKSA9PSAyKQorI3VuZGVmIE1BWF9NQVBfQkFOS1dJRFRICisjZGVmaW5lIE1BWF9NQVBfQkFOS1dJRFRIIDIKKyNlbHNlCisjZGVmaW5lIG1hcF9iYW5rd2lkdGhfaXNfMihtYXApICgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQKKyMgaWZkZWYgbWFwX2Jhbmt3aWR0aAorIyAgdW5kZWYgbWFwX2Jhbmt3aWR0aAorIyAgZGVmaW5lIG1hcF9iYW5rd2lkdGgobWFwKSAoKG1hcCktPmJhbmt3aWR0aCkKKyMgZWxzZQorIyAgZGVmaW5lIG1hcF9iYW5rd2lkdGgobWFwKSA0CisjICBkZWZpbmUgbWFwX2Jhbmt3aWR0aF9pc19sYXJnZShtYXApICgwKQorIyAgZGVmaW5lIG1hcF93b3JkcyhtYXApICgxKQorIyBlbmRpZgorI2RlZmluZSBtYXBfYmFua3dpZHRoX2lzXzQobWFwKSAobWFwX2Jhbmt3aWR0aChtYXApID09IDQpCisjdW5kZWYgTUFYX01BUF9CQU5LV0lEVEgKKyNkZWZpbmUgTUFYX01BUF9CQU5LV0lEVEggNAorI2Vsc2UKKyNkZWZpbmUgbWFwX2Jhbmt3aWR0aF9pc180KG1hcCkgKDApCisjZW5kaWYKKworLyogZW5zdXJlIHdlIG5ldmVyIGV2YWx1YXRlIGFueXRoaW5nIHNob3J0ZWQgdGhhbiBhbiB1bnNpZ25lZCBsb25nCisgKiB0byB6ZXJvLCBhbmQgZW5zdXJlIHdlJ2xsIG5ldmVyIG1pc3MgdGhlIGVuZCBvZiBhbiBjb21wYXJpc29uIChiamQpICovCisKKyNkZWZpbmUgbWFwX2NhbGNfd29yZHMobWFwKSAoKG1hcF9iYW5rd2lkdGgobWFwKSArIChzaXplb2YodW5zaWduZWQgbG9uZyktMSkpLyBzaXplb2YodW5zaWduZWQgbG9uZykpCisKKyNpZmRlZiBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzgKKyMgaWZkZWYgbWFwX2Jhbmt3aWR0aAorIyAgdW5kZWYgbWFwX2Jhbmt3aWR0aAorIyAgZGVmaW5lIG1hcF9iYW5rd2lkdGgobWFwKSAoKG1hcCktPmJhbmt3aWR0aCkKKyMgIGlmIEJJVFNfUEVSX0xPTkcgPCA2NAorIyAgIHVuZGVmIG1hcF9iYW5rd2lkdGhfaXNfbGFyZ2UKKyMgICBkZWZpbmUgbWFwX2Jhbmt3aWR0aF9pc19sYXJnZShtYXApIChtYXBfYmFua3dpZHRoKG1hcCkgPiBCSVRTX1BFUl9MT05HLzgpCisjICAgdW5kZWYgbWFwX3dvcmRzCisjICAgZGVmaW5lIG1hcF93b3JkcyhtYXApIG1hcF9jYWxjX3dvcmRzKG1hcCkKKyMgIGVuZGlmCisjIGVsc2UKKyMgIGRlZmluZSBtYXBfYmFua3dpZHRoKG1hcCkgOAorIyAgZGVmaW5lIG1hcF9iYW5rd2lkdGhfaXNfbGFyZ2UobWFwKSAoQklUU19QRVJfTE9ORyA8IDY0KQorIyAgZGVmaW5lIG1hcF93b3JkcyhtYXApIG1hcF9jYWxjX3dvcmRzKG1hcCkKKyMgZW5kaWYKKyNkZWZpbmUgbWFwX2Jhbmt3aWR0aF9pc184KG1hcCkgKG1hcF9iYW5rd2lkdGgobWFwKSA9PSA4KQorI3VuZGVmIE1BWF9NQVBfQkFOS1dJRFRICisjZGVmaW5lIE1BWF9NQVBfQkFOS1dJRFRIIDgKKyNlbHNlCisjZGVmaW5lIG1hcF9iYW5rd2lkdGhfaXNfOChtYXApICgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2CisjIGlmZGVmIG1hcF9iYW5rd2lkdGgKKyMgIHVuZGVmIG1hcF9iYW5rd2lkdGgKKyMgIGRlZmluZSBtYXBfYmFua3dpZHRoKG1hcCkgKChtYXApLT5iYW5rd2lkdGgpCisjICB1bmRlZiBtYXBfYmFua3dpZHRoX2lzX2xhcmdlCisjICBkZWZpbmUgbWFwX2Jhbmt3aWR0aF9pc19sYXJnZShtYXApIChtYXBfYmFua3dpZHRoKG1hcCkgPiBCSVRTX1BFUl9MT05HLzgpCisjICB1bmRlZiBtYXBfd29yZHMKKyMgIGRlZmluZSBtYXBfd29yZHMobWFwKSBtYXBfY2FsY193b3JkcyhtYXApCisjIGVsc2UKKyMgIGRlZmluZSBtYXBfYmFua3dpZHRoKG1hcCkgMTYKKyMgIGRlZmluZSBtYXBfYmFua3dpZHRoX2lzX2xhcmdlKG1hcCkgKDEpCisjICBkZWZpbmUgbWFwX3dvcmRzKG1hcCkgbWFwX2NhbGNfd29yZHMobWFwKQorIyBlbmRpZgorI2RlZmluZSBtYXBfYmFua3dpZHRoX2lzXzE2KG1hcCkgKG1hcF9iYW5rd2lkdGgobWFwKSA9PSAxNikKKyN1bmRlZiBNQVhfTUFQX0JBTktXSURUSAorI2RlZmluZSBNQVhfTUFQX0JBTktXSURUSCAxNgorI2Vsc2UKKyNkZWZpbmUgbWFwX2Jhbmt3aWR0aF9pc18xNihtYXApICgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyCisjIGlmZGVmIG1hcF9iYW5rd2lkdGgKKyMgIHVuZGVmIG1hcF9iYW5rd2lkdGgKKyMgIGRlZmluZSBtYXBfYmFua3dpZHRoKG1hcCkgKChtYXApLT5iYW5rd2lkdGgpCisjICB1bmRlZiBtYXBfYmFua3dpZHRoX2lzX2xhcmdlCisjICBkZWZpbmUgbWFwX2Jhbmt3aWR0aF9pc19sYXJnZShtYXApIChtYXBfYmFua3dpZHRoKG1hcCkgPiBCSVRTX1BFUl9MT05HLzgpCisjICB1bmRlZiBtYXBfd29yZHMKKyMgIGRlZmluZSBtYXBfd29yZHMobWFwKSBtYXBfY2FsY193b3JkcyhtYXApCisjIGVsc2UKKyMgIGRlZmluZSBtYXBfYmFua3dpZHRoKG1hcCkgMzIKKyMgIGRlZmluZSBtYXBfYmFua3dpZHRoX2lzX2xhcmdlKG1hcCkgKDEpCisjICBkZWZpbmUgbWFwX3dvcmRzKG1hcCkgbWFwX2NhbGNfd29yZHMobWFwKQorIyBlbmRpZgorI2RlZmluZSBtYXBfYmFua3dpZHRoX2lzXzMyKG1hcCkgKG1hcF9iYW5rd2lkdGgobWFwKSA9PSAzMikKKyN1bmRlZiBNQVhfTUFQX0JBTktXSURUSAorI2RlZmluZSBNQVhfTUFQX0JBTktXSURUSCAzMgorI2Vsc2UKKyNkZWZpbmUgbWFwX2Jhbmt3aWR0aF9pc18zMihtYXApICgwKQorI2VuZGlmCisKKyNpZm5kZWYgbWFwX2Jhbmt3aWR0aAorI2Vycm9yICJObyBidXMgd2lkdGggc3VwcG9ydGVkLiBXaGF0J3MgdGhlIHBvaW50PyIKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIGludCBtYXBfYmFua3dpZHRoX3N1cHBvcnRlZChpbnQgdykKK3sKKwlzd2l0Y2ggKHcpIHsKKyNpZmRlZiBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzEKKwljYXNlIDE6CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzIKKwljYXNlIDI6CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQKKwljYXNlIDQ6CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzgKKwljYXNlIDg6CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2CisJY2FzZSAxNjoKKyNlbmRpZgorI2lmZGVmIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIKKwljYXNlIDMyOgorI2VuZGlmCisJCXJldHVybiAxOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorfQorCisjZGVmaW5lIE1BWF9NQVBfTE9OR1MgKCAoKE1BWF9NQVBfQkFOS1dJRFRIKjgpICsgQklUU19QRVJfTE9ORyAtIDEpIC8gQklUU19QRVJfTE9ORyApCisKK3R5cGVkZWYgdW5pb24geworCXVuc2lnbmVkIGxvbmcgeFtNQVhfTUFQX0xPTkdTXTsKK30gbWFwX3dvcmQ7CisKKy8qIFRoZSBtYXAgc3R1ZmYgaXMgdmVyeSBzaW1wbGUuIFlvdSBmaWxsIGluIHlvdXIgc3RydWN0IG1hcF9pbmZvIHdpdGgKKyAgIGEgaGFuZGZ1bCBvZiByb3V0aW5lcyBmb3IgYWNjZXNzaW5nIHRoZSBkZXZpY2UsIG1ha2luZyBzdXJlIHRoZXkgaGFuZGxlCisgICBwYWdpbmcgZXRjLiBjb3JyZWN0bHkgaWYgeW91ciBkZXZpY2UgbmVlZHMgaXQuIFRoZW4geW91IHBhc3MgaXQgb2ZmCisgICB0byBhIGNoaXAgcHJvYmUgcm91dGluZSAtLSBlaXRoZXIgSkVERUMgb3IgQ0ZJIHByb2JlIG9yIGJvdGggLS0gdmlhCisgICBkb19tYXBfcHJvYmUoKS4gSWYgYSBjaGlwIGlzIHJlY29nbmlzZWQsIHRoZSBwcm9iZSBjb2RlIHdpbGwgaW52b2tlIHRoZQorICAgYXBwcm9wcmlhdGUgY2hpcCBkcml2ZXIgKGlmIHByZXNlbnQpIGFuZCByZXR1cm4gYSBzdHJ1Y3QgbXRkX2luZm8uCisgICBBdCB3aGljaCBwb2ludCwgeW91IGZpbGwgaW4gdGhlIG10ZC0+bW9kdWxlIHdpdGggeW91ciBvd24gbW9kdWxlIAorICAgYWRkcmVzcywgYW5kIHJlZ2lzdGVyIGl0IHdpdGggdGhlIE1URCBjb3JlIGNvZGUuIE9yIHlvdSBjb3VsZCBwYXJ0aXRpb24KKyAgIGl0IGFuZCByZWdpc3RlciB0aGUgcGFydGl0aW9ucyBpbnN0ZWFkLCBvciBrZWVwIGl0IGZvciB5b3VyIG93biBwcml2YXRlCisgICB1c2U7IHdoYXRldmVyLgorICAgCisgICBUaGUgbXRkLT5wcml2IGZpZWxkIHdpbGwgcG9pbnQgdG8gdGhlIHN0cnVjdCBtYXBfaW5mbywgYW5kIGFueSBmdXJ0aGVyCisgICBwcml2YXRlIGRhdGEgcmVxdWlyZWQgYnkgdGhlIGNoaXAgZHJpdmVyIGlzIGxpbmtlZCBmcm9tIHRoZSAKKyAgIG10ZC0+cHJpdi0+ZmxkcnZfcHJpdiBmaWVsZC4gVGhpcyBhbGxvd3MgdGhlIG1hcCBkcml2ZXIgdG8gZ2V0IGF0IAorICAgdGhlIGRlc3RydWN0b3IgZnVuY3Rpb24gbWFwLT5mbGRydl9kZXN0cm95KCkgd2hlbiBpdCdzIHRpcmVkCisgICBvZiBsaXZpbmcuCisqLworCitzdHJ1Y3QgbWFwX2luZm8geworCWNoYXIgKm5hbWU7CisJdW5zaWduZWQgbG9uZyBzaXplOworCXVuc2lnbmVkIGxvbmcgcGh5czsKKyNkZWZpbmUgTk9fWElQICgtMVVMKQorCisJdm9pZCBfX2lvbWVtICp2aXJ0OworCXZvaWQgKmNhY2hlZDsKKworCWludCBiYW5rd2lkdGg7IC8qIGluIG9jdGV0cy4gVGhpcyBpc24ndCBuZWNlc3NhcmlseSB0aGUgd2lkdGgKKwkJICAgICAgIG9mIGFjdHVhbCBidXMgY3ljbGVzIC0tIGl0J3MgdGhlIHJlcGVhdCBpbnRlcnZhbAorCQkgICAgICBpbiBieXRlcywgYmVmb3JlIHlvdSBhcmUgdGFsa2luZyB0byB0aGUgZmlyc3QgY2hpcCBhZ2Fpbi4KKwkJICAgICAgKi8KKworI2lmZGVmIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUworCW1hcF93b3JkICgqcmVhZCkoc3RydWN0IG1hcF9pbmZvICosIHVuc2lnbmVkIGxvbmcpOworCXZvaWQgKCpjb3B5X2Zyb20pKHN0cnVjdCBtYXBfaW5mbyAqLCB2b2lkICosIHVuc2lnbmVkIGxvbmcsIHNzaXplX3QpOworCisJdm9pZCAoKndyaXRlKShzdHJ1Y3QgbWFwX2luZm8gKiwgY29uc3QgbWFwX3dvcmQsIHVuc2lnbmVkIGxvbmcpOworCXZvaWQgKCpjb3B5X3RvKShzdHJ1Y3QgbWFwX2luZm8gKiwgdW5zaWduZWQgbG9uZywgY29uc3Qgdm9pZCAqLCBzc2l6ZV90KTsKKworCS8qIFdlIGNhbiBwZXJoYXBzIHB1dCBpbiAncG9pbnQnIGFuZCAndW5wb2ludCcgbWV0aG9kcywgaWYgd2UgcmVhbGx5CisJICAgd2FudCB0byBlbmFibGUgWElQIGZvciBub24tbGluZWFyIG1hcHBpbmdzLiBOb3QgeWV0IHRob3VnaC4gKi8KKyNlbmRpZgorCS8qIEl0J3MgcG9zc2libGUgZm9yIHRoZSBtYXAgZHJpdmVyIHRvIHVzZSBjYWNoZWQgbWVtb3J5IGluIGl0cworCSAgIGNvcHlfZnJvbSBpbXBsZW1lbnRhdGlvbiAoYW5kIF9vbmx5XyB3aXRoIGNvcHlfZnJvbSkuICBIb3dldmVyLAorCSAgIHdoZW4gdGhlIGNoaXAgZHJpdmVyIGtub3dzIHNvbWUgZmxhc2ggYXJlYSBoYXMgY2hhbmdlZCBjb250ZW50cywKKwkgICBpdCB3aWxsIHNpZ25hbCBpdCB0byB0aGUgbWFwIGRyaXZlciB0aHJvdWdoIHRoaXMgcm91dGluZSB0byBsZXQKKwkgICB0aGUgbWFwIGRyaXZlciBpbnZhbGlkYXRlIHRoZSBjb3JyZXNwb25kaW5nIGNhY2hlIGFzIG5lZWRlZC4KKwkgICBJZiB0aGVyZSBpcyBubyBjYWNoZSB0byBjYXJlIGFib3V0IHRoaXMgY2FuIGJlIHNldCB0byBOVUxMLiAqLworCXZvaWQgKCppbnZhbF9jYWNoZSkoc3RydWN0IG1hcF9pbmZvICosIHVuc2lnbmVkIGxvbmcsIHNzaXplX3QpOworCisJLyogc2V0X3ZwcCgpIG11c3QgaGFuZGxlIGJlaW5nIHJlZW50ZXJlZCAtLSBlbmFibGUsIGVuYWJsZSwgZGlzYWJsZSAKKwkgICBtdXN0IGxlYXZlIGl0IGVuYWJsZWQuICovCisJdm9pZCAoKnNldF92cHApKHN0cnVjdCBtYXBfaW5mbyAqLCBpbnQpOworCisJdW5zaWduZWQgbG9uZyBtYXBfcHJpdl8xOworCXVuc2lnbmVkIGxvbmcgbWFwX3ByaXZfMjsKKwl2b2lkICpmbGRydl9wcml2OworCXN0cnVjdCBtdGRfY2hpcF9kcml2ZXIgKmZsZHJ2OworfTsKKworc3RydWN0IG10ZF9jaGlwX2RyaXZlciB7CisJc3RydWN0IG10ZF9pbmZvICooKnByb2JlKShzdHJ1Y3QgbWFwX2luZm8gKm1hcCk7CisJdm9pZCAoKmRlc3Ryb3kpKHN0cnVjdCBtdGRfaW5mbyAqKTsKKwlzdHJ1Y3QgbW9kdWxlICptb2R1bGU7CisJY2hhciAqbmFtZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Cit9OworCit2b2lkIHJlZ2lzdGVyX210ZF9jaGlwX2RyaXZlcihzdHJ1Y3QgbXRkX2NoaXBfZHJpdmVyICopOwordm9pZCB1bnJlZ2lzdGVyX210ZF9jaGlwX2RyaXZlcihzdHJ1Y3QgbXRkX2NoaXBfZHJpdmVyICopOworCitzdHJ1Y3QgbXRkX2luZm8gKmRvX21hcF9wcm9iZShjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgbWFwX2luZm8gKm1hcCk7Cit2b2lkIG1hcF9kZXN0cm95KHN0cnVjdCBtdGRfaW5mbyAqbXRkKTsKKworI2RlZmluZSBFTkFCTEVfVlBQKG1hcCkgZG8geyBpZihtYXAtPnNldF92cHApIG1hcC0+c2V0X3ZwcChtYXAsIDEpOyB9IHdoaWxlKDApCisjZGVmaW5lIERJU0FCTEVfVlBQKG1hcCkgZG8geyBpZihtYXAtPnNldF92cHApIG1hcC0+c2V0X3ZwcChtYXAsIDApOyB9IHdoaWxlKDApCisKKyNkZWZpbmUgSU5WQUxJREFURV9DQUNIRURfUkFOR0UobWFwLCBmcm9tLCBzaXplKSBcCisJZG8geyBpZihtYXAtPmludmFsX2NhY2hlKSBtYXAtPmludmFsX2NhY2hlKG1hcCwgZnJvbSwgc2l6ZSk7IH0gd2hpbGUoMCkKKworCitzdGF0aWMgaW5saW5lIGludCBtYXBfd29yZF9lcXVhbChzdHJ1Y3QgbWFwX2luZm8gKm1hcCwgbWFwX3dvcmQgdmFsMSwgbWFwX3dvcmQgdmFsMikKK3sKKwlpbnQgaTsKKwlmb3IgKGk9MDsgaTxtYXBfd29yZHMobWFwKTsgaSsrKSB7CisJCWlmICh2YWwxLnhbaV0gIT0gdmFsMi54W2ldKQorCQkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgaW5saW5lIG1hcF93b3JkIG1hcF93b3JkX2FuZChzdHJ1Y3QgbWFwX2luZm8gKm1hcCwgbWFwX3dvcmQgdmFsMSwgbWFwX3dvcmQgdmFsMikKK3sKKwltYXBfd29yZCByOworCWludCBpOworCisJZm9yIChpPTA7IGk8bWFwX3dvcmRzKG1hcCk7IGkrKykgeworCQlyLnhbaV0gPSB2YWwxLnhbaV0gJiB2YWwyLnhbaV07CisJfQorCXJldHVybiByOworfQorCitzdGF0aWMgaW5saW5lIG1hcF93b3JkIG1hcF93b3JkX29yKHN0cnVjdCBtYXBfaW5mbyAqbWFwLCBtYXBfd29yZCB2YWwxLCBtYXBfd29yZCB2YWwyKQoreworCW1hcF93b3JkIHI7CisJaW50IGk7CisKKwlmb3IgKGk9MDsgaTxtYXBfd29yZHMobWFwKTsgaSsrKSB7CisJCXIueFtpXSA9IHZhbDEueFtpXSB8IHZhbDIueFtpXTsKKwl9CisJcmV0dXJuIHI7Cit9CisjZGVmaW5lIG1hcF93b3JkX2FuZGVxdWFsKG0sIGEsIGIsIHopIG1hcF93b3JkX2VxdWFsKG0sIHosIG1hcF93b3JkX2FuZChtLCBhLCBiKSkKKworc3RhdGljIGlubGluZSBpbnQgbWFwX3dvcmRfYml0c3NldChzdHJ1Y3QgbWFwX2luZm8gKm1hcCwgbWFwX3dvcmQgdmFsMSwgbWFwX3dvcmQgdmFsMikKK3sKKwlpbnQgaTsKKworCWZvciAoaT0wOyBpPG1hcF93b3JkcyhtYXApOyBpKyspIHsKKwkJaWYgKHZhbDEueFtpXSAmIHZhbDIueFtpXSkKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBtYXBfd29yZCBtYXBfd29yZF9sb2FkKHN0cnVjdCBtYXBfaW5mbyAqbWFwLCBjb25zdCB2b2lkICpwdHIpCit7CisJbWFwX3dvcmQgcjsKKworCWlmIChtYXBfYmFua3dpZHRoX2lzXzEobWFwKSkKKwkJci54WzBdID0gKih1bnNpZ25lZCBjaGFyICopcHRyOworCWVsc2UgaWYgKG1hcF9iYW5rd2lkdGhfaXNfMihtYXApKQorCQlyLnhbMF0gPSBnZXRfdW5hbGlnbmVkKCh1aW50MTZfdCAqKXB0cik7CisJZWxzZSBpZiAobWFwX2Jhbmt3aWR0aF9pc180KG1hcCkpCisJCXIueFswXSA9IGdldF91bmFsaWduZWQoKHVpbnQzMl90ICopcHRyKTsKKyNpZiBCSVRTX1BFUl9MT05HID49IDY0CisJZWxzZSBpZiAobWFwX2Jhbmt3aWR0aF9pc184KG1hcCkpCisJCXIueFswXSA9IGdldF91bmFsaWduZWQoKHVpbnQ2NF90ICopcHRyKTsKKyNlbmRpZgorCWVsc2UgaWYgKG1hcF9iYW5rd2lkdGhfaXNfbGFyZ2UobWFwKSkKKwkJbWVtY3B5KHIueCwgcHRyLCBtYXAtPmJhbmt3aWR0aCk7CisKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIGlubGluZSBtYXBfd29yZCBtYXBfd29yZF9sb2FkX3BhcnRpYWwoc3RydWN0IG1hcF9pbmZvICptYXAsIG1hcF93b3JkIG9yaWcsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IHN0YXJ0LCBpbnQgbGVuKQoreworCWludCBpOworCisJaWYgKG1hcF9iYW5rd2lkdGhfaXNfbGFyZ2UobWFwKSkgeworCQljaGFyICpkZXN0ID0gKGNoYXIgKikmb3JpZzsKKwkJbWVtY3B5KGRlc3Qrc3RhcnQsIGJ1ZiwgbGVuKTsKKwl9IGVsc2UgeworCQlmb3IgKGk9c3RhcnQ7IGkgPCBzdGFydCtsZW47IGkrKykgeworCQkJaW50IGJpdHBvczsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU4KKwkJCWJpdHBvcyA9IGkqODsKKyNlbHNlIC8qIF9fQklHX0VORElBTiAqLworCQkJYml0cG9zID0gKG1hcF9iYW5rd2lkdGgobWFwKS0xLWkpKjg7CisjZW5kaWYKKwkJCW9yaWcueFswXSAmPSB+KDB4ZmYgPDwgYml0cG9zKTsKKwkJCW9yaWcueFswXSB8PSBidWZbaS1zdGFydF0gPDwgYml0cG9zOworCQl9CisJfQorCXJldHVybiBvcmlnOworfQorCitzdGF0aWMgaW5saW5lIG1hcF93b3JkIG1hcF93b3JkX2ZmKHN0cnVjdCBtYXBfaW5mbyAqbWFwKQoreworCW1hcF93b3JkIHI7CisJaW50IGk7CisKKwlmb3IgKGk9MDsgaTxtYXBfd29yZHMobWFwKTsgaSsrKSB7CisJCXIueFtpXSA9IH4wVUw7CisJfQorCXJldHVybiByOworfQorc3RhdGljIGlubGluZSBtYXBfd29yZCBpbmxpbmVfbWFwX3JlYWQoc3RydWN0IG1hcF9pbmZvICptYXAsIHVuc2lnbmVkIGxvbmcgb2ZzKQoreworCW1hcF93b3JkIHI7CisKKwlpZiAobWFwX2Jhbmt3aWR0aF9pc18xKG1hcCkpCisJCXIueFswXSA9IF9fcmF3X3JlYWRiKG1hcC0+dmlydCArIG9mcyk7CisJZWxzZSBpZiAobWFwX2Jhbmt3aWR0aF9pc18yKG1hcCkpCisJCXIueFswXSA9IF9fcmF3X3JlYWR3KG1hcC0+dmlydCArIG9mcyk7CisJZWxzZSBpZiAobWFwX2Jhbmt3aWR0aF9pc180KG1hcCkpCisJCXIueFswXSA9IF9fcmF3X3JlYWRsKG1hcC0+dmlydCArIG9mcyk7CisjaWYgQklUU19QRVJfTE9ORyA+PSA2NAorCWVsc2UgaWYgKG1hcF9iYW5rd2lkdGhfaXNfOChtYXApKQorCQlyLnhbMF0gPSBfX3Jhd19yZWFkcShtYXAtPnZpcnQgKyBvZnMpOworI2VuZGlmCisJZWxzZSBpZiAobWFwX2Jhbmt3aWR0aF9pc19sYXJnZShtYXApKQorCQltZW1jcHlfZnJvbWlvKHIueCwgbWFwLT52aXJ0K29mcywgbWFwLT5iYW5rd2lkdGgpOworCisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbmxpbmVfbWFwX3dyaXRlKHN0cnVjdCBtYXBfaW5mbyAqbWFwLCBjb25zdCBtYXBfd29yZCBkYXR1bSwgdW5zaWduZWQgbG9uZyBvZnMpCit7CisJaWYgKG1hcF9iYW5rd2lkdGhfaXNfMShtYXApKQorCQlfX3Jhd193cml0ZWIoZGF0dW0ueFswXSwgbWFwLT52aXJ0ICsgb2ZzKTsKKwllbHNlIGlmIChtYXBfYmFua3dpZHRoX2lzXzIobWFwKSkKKwkJX19yYXdfd3JpdGV3KGRhdHVtLnhbMF0sIG1hcC0+dmlydCArIG9mcyk7CisJZWxzZSBpZiAobWFwX2Jhbmt3aWR0aF9pc180KG1hcCkpCisJCV9fcmF3X3dyaXRlbChkYXR1bS54WzBdLCBtYXAtPnZpcnQgKyBvZnMpOworI2lmIEJJVFNfUEVSX0xPTkcgPj0gNjQKKwllbHNlIGlmIChtYXBfYmFua3dpZHRoX2lzXzgobWFwKSkKKwkJX19yYXdfd3JpdGVxKGRhdHVtLnhbMF0sIG1hcC0+dmlydCArIG9mcyk7CisjZW5kaWYKKwllbHNlIGlmIChtYXBfYmFua3dpZHRoX2lzX2xhcmdlKG1hcCkpCisJCW1lbWNweV90b2lvKG1hcC0+dmlydCtvZnMsIGRhdHVtLngsIG1hcC0+YmFua3dpZHRoKTsKKwltYigpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW5saW5lX21hcF9jb3B5X2Zyb20oc3RydWN0IG1hcF9pbmZvICptYXAsIHZvaWQgKnRvLCB1bnNpZ25lZCBsb25nIGZyb20sIHNzaXplX3QgbGVuKQoreworCWlmIChtYXAtPmNhY2hlZCkKKwkJbWVtY3B5KHRvLCAoY2hhciAqKW1hcC0+Y2FjaGVkICsgZnJvbSwgbGVuKTsKKwllbHNlCisJCW1lbWNweV9mcm9taW8odG8sIG1hcC0+dmlydCArIGZyb20sIGxlbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbmxpbmVfbWFwX2NvcHlfdG8oc3RydWN0IG1hcF9pbmZvICptYXAsIHVuc2lnbmVkIGxvbmcgdG8sIGNvbnN0IHZvaWQgKmZyb20sIHNzaXplX3QgbGVuKQoreworCW1lbWNweV90b2lvKG1hcC0+dmlydCArIHRvLCBmcm9tLCBsZW4pOworfQorCisjaWZkZWYgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTCisjZGVmaW5lIG1hcF9yZWFkKG1hcCwgb2ZzKSAobWFwKS0+cmVhZChtYXAsIG9mcykKKyNkZWZpbmUgbWFwX2NvcHlfZnJvbShtYXAsIHRvLCBmcm9tLCBsZW4pIChtYXApLT5jb3B5X2Zyb20obWFwLCB0bywgZnJvbSwgbGVuKQorI2RlZmluZSBtYXBfd3JpdGUobWFwLCBkYXR1bSwgb2ZzKSAobWFwKS0+d3JpdGUobWFwLCBkYXR1bSwgb2ZzKQorI2RlZmluZSBtYXBfY29weV90byhtYXAsIHRvLCBmcm9tLCBsZW4pIChtYXApLT5jb3B5X3RvKG1hcCwgdG8sIGZyb20sIGxlbikKKworZXh0ZXJuIHZvaWQgc2ltcGxlX21hcF9pbml0KHN0cnVjdCBtYXBfaW5mbyAqKTsKKyNkZWZpbmUgbWFwX2lzX2xpbmVhcihtYXApIChtYXAtPnBoeXMgIT0gTk9fWElQKQorCisjZWxzZQorI2RlZmluZSBtYXBfcmVhZChtYXAsIG9mcykgaW5saW5lX21hcF9yZWFkKG1hcCwgb2ZzKQorI2RlZmluZSBtYXBfY29weV9mcm9tKG1hcCwgdG8sIGZyb20sIGxlbikgaW5saW5lX21hcF9jb3B5X2Zyb20obWFwLCB0bywgZnJvbSwgbGVuKQorI2RlZmluZSBtYXBfd3JpdGUobWFwLCBkYXR1bSwgb2ZzKSBpbmxpbmVfbWFwX3dyaXRlKG1hcCwgZGF0dW0sIG9mcykKKyNkZWZpbmUgbWFwX2NvcHlfdG8obWFwLCB0bywgZnJvbSwgbGVuKSBpbmxpbmVfbWFwX2NvcHlfdG8obWFwLCB0bywgZnJvbSwgbGVuKQorCisKKyNkZWZpbmUgc2ltcGxlX21hcF9pbml0KG1hcCkgQlVHX09OKCFtYXBfYmFua3dpZHRoX3N1cHBvcnRlZCgobWFwKS0+YmFua3dpZHRoKSkKKyNkZWZpbmUgbWFwX2lzX2xpbmVhcihtYXApICgxKQorCisjZW5kaWYgLyogIUNPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyAqLworCisjZW5kaWYgLyogX19MSU5VWF9NVERfTUFQX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdGQvbXRkLmggYi9pbmNsdWRlL2xpbnV4L210ZC9tdGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2QxMzQzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9tdGQvbXRkLmgKQEAgLTAsMCArMSwyMjYgQEAKKy8qIAorICogJElkOiBtdGQuaCx2IDEuNTYgMjAwNC8wOC8wOSAxODo0NjowNCBkbWFybGluIEV4cCAkCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDMgRGF2aWQgV29vZGhvdXNlIDxkd213MkBpbmZyYWRlYWQub3JnPiBldCBhbC4KKyAqCisgKiBSZWxlYXNlZCB1bmRlciBHUEwKKyAqLworCisjaWZuZGVmIF9fTVREX01URF9IX18KKyNkZWZpbmUgX19NVERfTVREX0hfXworCisjaWZuZGVmIF9fS0VSTkVMX18KKyNlcnJvciBUaGlzIGlzIGEga2VybmVsIGhlYWRlci4gUGVyaGFwcyBpbmNsdWRlIG10ZC11c2VyLmggaW5zdGVhZD8KKyNlbmRpZgorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdWlvLmg+CisKKyNpbmNsdWRlIDxsaW51eC9tdGQvY29tcGF0bWFjLmg+CisjaW5jbHVkZSA8bXRkL210ZC1hYmkuaD4KKworI2RlZmluZSBNVERfQ0hBUl9NQUpPUiA5MAorI2RlZmluZSBNVERfQkxPQ0tfTUFKT1IgMzEKKyNkZWZpbmUgTUFYX01URF9ERVZJQ0VTIDE2CisKKyNkZWZpbmUgTVREX0VSQVNFX1BFTkRJTkcgICAgICAJMHgwMQorI2RlZmluZSBNVERfRVJBU0lORwkJMHgwMgorI2RlZmluZSBNVERfRVJBU0VfU1VTUEVORAkweDA0CisjZGVmaW5lIE1URF9FUkFTRV9ET05FICAgICAgICAgIDB4MDgKKyNkZWZpbmUgTVREX0VSQVNFX0ZBSUxFRCAgICAgICAgMHgxMAorCisvKiBJZiB0aGUgZXJhc2UgZmFpbHMsIGZhaWxfYWRkciBtaWdodCBpbmRpY2F0ZSBleGFjdGx5IHdoaWNoIGJsb2NrIGZhaWxlZC4gIElmCisgICBmYWlsX2FkZHIgPSAweGZmZmZmZmZmLCB0aGUgZmFpbHVyZSB3YXMgbm90IGF0IHRoZSBkZXZpY2UgbGV2ZWwgb3Igd2FzIG5vdAorICAgc3BlY2lmaWMgdG8gYW55IHBhcnRpY3VsYXIgYmxvY2suICovCitzdHJ1Y3QgZXJhc2VfaW5mbyB7CisJc3RydWN0IG10ZF9pbmZvICptdGQ7CisJdV9pbnQzMl90IGFkZHI7CisJdV9pbnQzMl90IGxlbjsKKwl1X2ludDMyX3QgZmFpbF9hZGRyOworCXVfbG9uZyB0aW1lOworCXVfbG9uZyByZXRyaWVzOworCXVfaW50IGRldjsKKwl1X2ludCBjZWxsOworCXZvaWQgKCpjYWxsYmFjaykgKHN0cnVjdCBlcmFzZV9pbmZvICpzZWxmKTsKKwl1X2xvbmcgcHJpdjsKKwl1X2NoYXIgc3RhdGU7CisJc3RydWN0IGVyYXNlX2luZm8gKm5leHQ7Cit9OworCitzdHJ1Y3QgbXRkX2VyYXNlX3JlZ2lvbl9pbmZvIHsKKwl1X2ludDMyX3Qgb2Zmc2V0OwkJCS8qIEF0IHdoaWNoIHRoaXMgcmVnaW9uIHN0YXJ0cywgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBNVEQgKi8KKwl1X2ludDMyX3QgZXJhc2VzaXplOwkJLyogRm9yIHRoaXMgcmVnaW9uICovCisJdV9pbnQzMl90IG51bWJsb2NrczsJCS8qIE51bWJlciBvZiBibG9ja3Mgb2YgZXJhc2VzaXplIGluIHRoaXMgcmVnaW9uICovCit9OworCitzdHJ1Y3QgbXRkX2luZm8geworCXVfY2hhciB0eXBlOworCXVfaW50MzJfdCBmbGFnczsKKwl1X2ludDMyX3Qgc2l6ZTsJIC8vIFRvdGFsIHNpemUgb2YgdGhlIE1URAorCisJLyogIk1ham9yIiBlcmFzZSBzaXplIGZvciB0aGUgZGV2aWNlLiBOYe92ZSB1c2VycyBtYXkgdGFrZSB0aGlzCisJICogdG8gYmUgdGhlIG9ubHkgZXJhc2Ugc2l6ZSBhdmFpbGFibGUsIG9yIG1heSB1c2UgdGhlIG1vcmUgZGV0YWlsZWQKKwkgKiBpbmZvcm1hdGlvbiBiZWxvdyBpZiB0aGV5IGRlc2lyZQorCSAqLworCXVfaW50MzJfdCBlcmFzZXNpemU7CisKKwl1X2ludDMyX3Qgb29iYmxvY2s7ICAvLyBTaXplIG9mIE9PQiBibG9ja3MgKGUuZy4gNTEyKQorCXVfaW50MzJfdCBvb2JzaXplOyAgIC8vIEFtb3VudCBvZiBPT0IgZGF0YSBwZXIgYmxvY2sgKGUuZy4gMTYpCisJdV9pbnQzMl90IG9vYmF2YWlsOyAgLy8gTnVtYmVyIG9mIGJ5dGVzIGluIE9PQiBhcmVhIGF2YWlsYWJsZSBmb3IgZnMgCisJdV9pbnQzMl90IGVjY3R5cGU7CisJdV9pbnQzMl90IGVjY3NpemU7CisJCisKKwkvLyBLZXJuZWwtb25seSBzdHVmZiBzdGFydHMgaGVyZS4KKwljaGFyICpuYW1lOworCWludCBpbmRleDsKKworCS8vIG9vYmluZm8gaXMgYSBuYW5kX29vYmluZm8gc3RydWN0dXJlLCB3aGljaCBjYW4gYmUgc2V0IGJ5IGlvdGNsIChNRU1TRVRPT0JJTkZPKQorCXN0cnVjdCBuYW5kX29vYmluZm8gb29iaW5mbzsKKworCS8qIERhdGEgZm9yIHZhcmlhYmxlIGVyYXNlIHJlZ2lvbnMuIElmIG51bWVyYXNlcmVnaW9ucyBpcyB6ZXJvLAorCSAqIGl0IG1lYW5zIHRoYXQgdGhlIHdob2xlIGRldmljZSBoYXMgZXJhc2VzaXplIGFzIGdpdmVuIGFib3ZlLiAKKwkgKi8KKwlpbnQgbnVtZXJhc2VyZWdpb25zOworCXN0cnVjdCBtdGRfZXJhc2VfcmVnaW9uX2luZm8gKmVyYXNlcmVnaW9uczsgCisKKwkvKiBUaGlzIHJlYWxseSBzaG91bGRuJ3QgYmUgaGVyZS4gSXQgY2FuIGdvIGF3YXkgaW4gMi41ICovCisJdV9pbnQzMl90IGJhbmtfc2l6ZTsKKworCWludCAoKmVyYXNlKSAoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBlcmFzZV9pbmZvICppbnN0cik7CisKKwkvKiBUaGlzIHN0dWZmIGZvciBlWGVjdXRlLUluLVBsYWNlICovCisJaW50ICgqcG9pbnQpIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4sIHNpemVfdCAqcmV0bGVuLCB1X2NoYXIgKiptdGRidWYpOworCisJLyogV2UgcHJvYmFibHkgc2hvdWxkbid0IGFsbG93IFhJUCBpZiB0aGUgdW5wb2ludCBpc24ndCBhIE5VTEwgKi8KKwl2b2lkICgqdW5wb2ludCkgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1X2NoYXIgKiBhZGRyLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbik7CisKKworCWludCAoKnJlYWQpIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4sIHNpemVfdCAqcmV0bGVuLCB1X2NoYXIgKmJ1Zik7CisJaW50ICgqd3JpdGUpIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IHRvLCBzaXplX3QgbGVuLCBzaXplX3QgKnJldGxlbiwgY29uc3QgdV9jaGFyICpidWYpOworCisJaW50ICgqcmVhZF9lY2MpIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4sIHNpemVfdCAqcmV0bGVuLCB1X2NoYXIgKmJ1ZiwgdV9jaGFyICplY2NidWYsIHN0cnVjdCBuYW5kX29vYmluZm8gKm9vYnNlbCk7CisJaW50ICgqd3JpdGVfZWNjKSAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCB0bywgc2l6ZV90IGxlbiwgc2l6ZV90ICpyZXRsZW4sIGNvbnN0IHVfY2hhciAqYnVmLCB1X2NoYXIgKmVjY2J1Ziwgc3RydWN0IG5hbmRfb29iaW5mbyAqb29ic2VsKTsKKworCWludCAoKnJlYWRfb29iKSAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLCBzaXplX3QgKnJldGxlbiwgdV9jaGFyICpidWYpOworCWludCAoKndyaXRlX29vYikgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgdG8sIHNpemVfdCBsZW4sIHNpemVfdCAqcmV0bGVuLCBjb25zdCB1X2NoYXIgKmJ1Zik7CisKKwkvKiAKKwkgKiBNZXRob2RzIHRvIGFjY2VzcyB0aGUgcHJvdGVjdGlvbiByZWdpc3RlciBhcmVhLCBwcmVzZW50IGluIHNvbWUgCisJICogZmxhc2ggZGV2aWNlcy4gVGhlIHVzZXIgZGF0YSBpcyBvbmUgdGltZSBwcm9ncmFtbWFibGUgYnV0IHRoZQorCSAqIGZhY3RvcnkgZGF0YSBpcyByZWFkIG9ubHkuIAorCSAqLworCWludCAoKnJlYWRfdXNlcl9wcm90X3JlZykgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwgc2l6ZV90ICpyZXRsZW4sIHVfY2hhciAqYnVmKTsKKworCWludCAoKnJlYWRfZmFjdF9wcm90X3JlZykgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwgc2l6ZV90ICpyZXRsZW4sIHVfY2hhciAqYnVmKTsKKworCS8qIFRoaXMgZnVuY3Rpb24gaXMgbm90IHlldCBpbXBsZW1lbnRlZCAqLworCWludCAoKndyaXRlX3VzZXJfcHJvdF9yZWcpIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4sIHNpemVfdCAqcmV0bGVuLCB1X2NoYXIgKmJ1Zik7CisKKwkvKiBrdmVjLWJhc2VkIHJlYWQvd3JpdGUgbWV0aG9kcy4gV2UgbmVlZCB0aGVzZSBlc3BlY2lhbGx5IGZvciBOQU5EIGZsYXNoLAorCSAgIHdpdGggaXRzIGxpbWl0ZWQgbnVtYmVyIG9mIHdyaXRlIGN5Y2xlcyBwZXIgZXJhc2UuCisJICAgTkI6IFRoZSAnY291bnQnIHBhcmFtZXRlciBpcyB0aGUgbnVtYmVyIG9mIF92ZWN0b3JzXywgZWFjaCBvZiAKKwkgICB3aGljaCBjb250YWlucyBhbiAob2ZzLCBsZW4pIHR1cGxlLgorCSovCisJaW50ICgqcmVhZHYpIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IGt2ZWMgKnZlY3MsIHVuc2lnbmVkIGxvbmcgY291bnQsIGxvZmZfdCBmcm9tLCBzaXplX3QgKnJldGxlbik7CisJaW50ICgqcmVhZHZfZWNjKSAoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBrdmVjICp2ZWNzLCB1bnNpZ25lZCBsb25nIGNvdW50LCBsb2ZmX3QgZnJvbSwgCisJCXNpemVfdCAqcmV0bGVuLCB1X2NoYXIgKmVjY2J1Ziwgc3RydWN0IG5hbmRfb29iaW5mbyAqb29ic2VsKTsKKwlpbnQgKCp3cml0ZXYpIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3Qgc3RydWN0IGt2ZWMgKnZlY3MsIHVuc2lnbmVkIGxvbmcgY291bnQsIGxvZmZfdCB0bywgc2l6ZV90ICpyZXRsZW4pOworCWludCAoKndyaXRldl9lY2MpIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3Qgc3RydWN0IGt2ZWMgKnZlY3MsIHVuc2lnbmVkIGxvbmcgY291bnQsIGxvZmZfdCB0bywgCisJCXNpemVfdCAqcmV0bGVuLCB1X2NoYXIgKmVjY2J1Ziwgc3RydWN0IG5hbmRfb29iaW5mbyAqb29ic2VsKTsKKworCS8qIFN5bmMgKi8KKwl2b2lkICgqc3luYykgKHN0cnVjdCBtdGRfaW5mbyAqbXRkKTsKKworCS8qIENoaXAtc3VwcG9ydGVkIGRldmljZSBsb2NraW5nICovCisJaW50ICgqbG9jaykgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZzLCBzaXplX3QgbGVuKTsKKwlpbnQgKCp1bmxvY2spIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcywgc2l6ZV90IGxlbik7CisKKwkvKiBQb3dlciBNYW5hZ2VtZW50IGZ1bmN0aW9ucyAqLworCWludCAoKnN1c3BlbmQpIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCk7CisJdm9pZCAoKnJlc3VtZSkgKHN0cnVjdCBtdGRfaW5mbyAqbXRkKTsKKworCS8qIEJhZCBibG9jayBtYW5hZ2VtZW50IGZ1bmN0aW9ucyAqLworCWludCAoKmJsb2NrX2lzYmFkKSAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMpOworCWludCAoKmJsb2NrX21hcmtiYWQpIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcyk7CisKKwl2b2lkICpwcml2OworCisJc3RydWN0IG1vZHVsZSAqb3duZXI7CisJaW50IHVzZWNvdW50OworfTsKKworCisJLyogS2VybmVsLXNpZGUgaW9jdGwgZGVmaW5pdGlvbnMgKi8KKworZXh0ZXJuIGludCBhZGRfbXRkX2RldmljZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCk7CitleHRlcm4gaW50IGRlbF9tdGRfZGV2aWNlIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCk7CisKK2V4dGVybiBzdHJ1Y3QgbXRkX2luZm8gKmdldF9tdGRfZGV2aWNlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgbnVtKTsKKworZXh0ZXJuIHZvaWQgcHV0X210ZF9kZXZpY2Uoc3RydWN0IG10ZF9pbmZvICptdGQpOworCisKK3N0cnVjdCBtdGRfbm90aWZpZXIgeworCXZvaWQgKCphZGQpKHN0cnVjdCBtdGRfaW5mbyAqbXRkKTsKKwl2b2lkICgqcmVtb3ZlKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCk7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworfTsKKworCitleHRlcm4gdm9pZCByZWdpc3Rlcl9tdGRfdXNlciAoc3RydWN0IG10ZF9ub3RpZmllciAqbmV3KTsKK2V4dGVybiBpbnQgdW5yZWdpc3Rlcl9tdGRfdXNlciAoc3RydWN0IG10ZF9ub3RpZmllciAqb2xkKTsKKworaW50IGRlZmF1bHRfbXRkX3dyaXRldihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3Qgc3RydWN0IGt2ZWMgKnZlY3MsCisJCSAgICAgICB1bnNpZ25lZCBsb25nIGNvdW50LCBsb2ZmX3QgdG8sIHNpemVfdCAqcmV0bGVuKTsKKworaW50IGRlZmF1bHRfbXRkX3JlYWR2KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3Qga3ZlYyAqdmVjcywKKwkJICAgICAgdW5zaWduZWQgbG9uZyBjb3VudCwgbG9mZl90IGZyb20sIHNpemVfdCAqcmV0bGVuKTsKKworI2RlZmluZSBNVERfRVJBU0UobXRkLCBhcmdzLi4uKSAoKihtdGQtPmVyYXNlKSkobXRkLCBhcmdzKQorI2RlZmluZSBNVERfUE9JTlQobXRkLCBhLGIsYyxkKSAoKihtdGQtPnBvaW50KSkobXRkLCBhLGIsYywgKHVfY2hhciAqKikoZCkpCisjZGVmaW5lIE1URF9VTlBPSU5UKG10ZCwgYXJnKSAoKihtdGQtPnVucG9pbnQpKShtdGQsICh1X2NoYXIgKilhcmcpCisjZGVmaW5lIE1URF9SRUFEKG10ZCwgYXJncy4uLikgKCoobXRkLT5yZWFkKSkobXRkLCBhcmdzKQorI2RlZmluZSBNVERfV1JJVEUobXRkLCBhcmdzLi4uKSAoKihtdGQtPndyaXRlKSkobXRkLCBhcmdzKQorI2RlZmluZSBNVERfUkVBRFYobXRkLCBhcmdzLi4uKSAoKihtdGQtPnJlYWR2KSkobXRkLCBhcmdzKQorI2RlZmluZSBNVERfV1JJVEVWKG10ZCwgYXJncy4uLikgKCoobXRkLT53cml0ZXYpKShtdGQsIGFyZ3MpCisjZGVmaW5lIE1URF9SRUFERUNDKG10ZCwgYXJncy4uLikgKCoobXRkLT5yZWFkX2VjYykpKG10ZCwgYXJncykKKyNkZWZpbmUgTVREX1dSSVRFRUNDKG10ZCwgYXJncy4uLikgKCoobXRkLT53cml0ZV9lY2MpKShtdGQsIGFyZ3MpCisjZGVmaW5lIE1URF9SRUFET09CKG10ZCwgYXJncy4uLikgKCoobXRkLT5yZWFkX29vYikpKG10ZCwgYXJncykKKyNkZWZpbmUgTVREX1dSSVRFT09CKG10ZCwgYXJncy4uLikgKCoobXRkLT53cml0ZV9vb2IpKShtdGQsIGFyZ3MpCisjZGVmaW5lIE1URF9TWU5DKG10ZCkgZG8geyBpZiAobXRkLT5zeW5jKSAoKihtdGQtPnN5bmMpKShtdGQpOyAgfSB3aGlsZSAoMCkgCisKKworI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUwordm9pZCBtdGRfZXJhc2VfY2FsbGJhY2soc3RydWN0IGVyYXNlX2luZm8gKmluc3RyKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgbXRkX2VyYXNlX2NhbGxiYWNrKHN0cnVjdCBlcmFzZV9pbmZvICppbnN0cikKK3sKKwlpZiAoaW5zdHItPmNhbGxiYWNrKQorCQlpbnN0ci0+Y2FsbGJhY2soaW5zdHIpOworfQorI2VuZGlmCisKKy8qCisgKiBEZWJ1Z2dpbmcgbWFjcm8gYW5kIGRlZmluZXMKKyAqLworI2RlZmluZSBNVERfREVCVUdfTEVWRUwwCSgwKQkvKiBRdWlldCAgICovCisjZGVmaW5lIE1URF9ERUJVR19MRVZFTDEJKDEpCS8qIEF1ZGlibGUgKi8KKyNkZWZpbmUgTVREX0RFQlVHX0xFVkVMMgkoMikJLyogTG91ZCAgICAqLworI2RlZmluZSBNVERfREVCVUdfTEVWRUwzCSgzKQkvKiBOb2lzeSAgICovCisKKyNpZmRlZiBDT05GSUdfTVREX0RFQlVHCisjZGVmaW5lIERFQlVHKG4sIGFyZ3MuLi4pCQkJCVwKKyAJZG8gewkJCQkJCVwKKwkJaWYgKG4gPD0gQ09ORklHX01URF9ERUJVR19WRVJCT1NFKQlcCisJCQlwcmludGsoS0VSTl9JTkZPIGFyZ3MpOwkJXAorCX0gd2hpbGUoMCkKKyNlbHNlIC8qIENPTkZJR19NVERfREVCVUcgKi8KKyNkZWZpbmUgREVCVUcobiwgYXJncy4uLikgZG8geyB9IHdoaWxlKDApCisKKyNlbmRpZiAvKiBDT05GSUdfTVREX0RFQlVHICovCisKKyNlbmRpZiAvKiBfX01URF9NVERfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC9uYW5kLmggYi9pbmNsdWRlL2xpbnV4L210ZC9uYW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWExOWM2NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbXRkL25hbmQuaApAQCAtMCwwICsxLDQ2OSBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2xpbnV4L210ZC9uYW5kLmgKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDAwIERhdmlkIFdvb2Rob3VzZSA8ZHdtdzJAbXZoaS5jb20+CisgKiAgICAgICAgICAgICAgICAgICAgIFN0ZXZlbiBKLiBIaWxsIDxzamhpbGxAcmVhbGl0eWRpbHV0ZWQuY29tPgorICoJCSAgICAgICBUaG9tYXMgR2xlaXhuZXIgPHRnbHhAbGludXRyb25peC5kZT4KKyAqCisgKiAkSWQ6IG5hbmQuaCx2IDEuNjggMjAwNC8xMS8xMiAxMDo0MDozNyBnbGVpeG5lciBFeHAgJAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIEluZm86CisgKiAgIENvbnRhaW5zIHN0YW5kYXJkIGRlZmluZXMgYW5kIElEcyBmb3IgTkFORCBmbGFzaCBkZXZpY2VzCisgKgorICogIENoYW5nZWxvZzoKKyAqICAgMDEtMzEtMjAwMCBETVcgICAgIENyZWF0ZWQKKyAqICAgMDktMTgtMjAwMCBTSkggICAgIE1vdmVkIHN0cnVjdHVyZSBvdXQgb2YgdGhlIERpc2stT24tQ2hpcCBkcml2ZXJzCisgKgkJCXNvIGl0IGNhbiBiZSB1c2VkIGJ5IG90aGVyIE5BTkQgZmxhc2ggZGV2aWNlCisgKgkJCWRyaXZlcnMuIEkgYWxzbyBjaGFuZ2VkIHRoZSBjb3B5cmlnaHQgc2luY2Ugbm9uZQorICoJCQlvZiB0aGUgb3JpZ2luYWwgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzcGVjaWZpYworICoJCQl0byBEb0MgZGV2aWNlcy4gRGF2aWQgY2FuIHdoYWNrIG1lIHdpdGggYSBiYXNlYmFsbAorICoJCQliYXQgbGF0ZXIgaWYgSSBkaWQgc29tZXRoaW5nIG5hdWdodHkuCisgKiAgIDEwLTExLTIwMDAgU0pIICAgICBBZGRlZCBwcml2YXRlIE5BTkQgZmxhc2ggc3RydWN0dXJlIGZvciBkcml2ZXIKKyAqICAgMTAtMjQtMjAwMCBTSkggICAgIEFkZGVkIHByb3RvdHlwZSBmb3IgJ25hbmRfc2NhbicgZnVuY3Rpb24KKyAqICAgMTAtMjktMjAwMSBURwljaGFuZ2VkIG5hbmRfY2hpcCBzdHJ1Y3R1cmUgdG8gc3VwcG9ydCAKKyAqCQkJaGFyZHdhcmVzcGVjaWZpYyBmdW5jdGlvbiBmb3IgYWNjZXNzaW5nIGNvbnRyb2wgbGluZXMKKyAqICAgMDItMjEtMjAwMiBURwlhZGRlZCBzdXBwb3J0IGZvciBkaWZmZXJlbnQgcmVhZC93cml0ZSBhZHJlc3MgYW5kCisgKgkJCXJlYWR5L2J1c3kgbGluZSBhY2Nlc3MgZnVuY3Rpb24KKyAqICAgMDItMjYtMjAwMiBURwlhZGRlZCBjaGlwX2RlbGF5IHRvIG5hbmRfY2hpcCBzdHJ1Y3R1cmUgdG8gb3B0aW1pemUKKyAqCQkJY29tbWFuZCBkZWxheSB0aW1lcyBmb3IgZGlmZmVyZW50IGNoaXBzCisgKiAgIDA0LTI4LTIwMDIgVEcJT09CIGNvbmZpZyBkZWZpbmVzIG1vdmVkIGZyb20gbmFuZC5jIHRvIGF2b2lkIGR1cGxpY2F0ZQorICoJCQlkZWZpbmVzIGluIGpmZnMyL3didWYuYworICogICAwOC0wNy0yMDAyIFRHCWZvcmNlZCBiYWQgYmxvY2sgbG9jYXRpb24gdG8gYnl0ZSA1IG9mIE9PQiwgZXZlbiBpZgorICoJCQlDT05GSUdfTVREX05BTkRfRUNDX0pGRlMyIGlzIG5vdCBzZXQKKyAqICAgMDgtMTAtMjAwMiBURwlleHRlbnNpb25zIHRvIG5hbmRfY2hpcCBzdHJ1Y3R1cmUgdG8gc3VwcG9ydCBIVy1FQ0MKKyAqCisgKiAgIDA4LTI5LTIwMDIgdGdseCAJbmFuZF9jaGlwIHN0cnVjdHVyZTogZGF0YV9wb2kgZm9yIHNlbGVjdGluZyAKKyAqCQkJaW50ZXJuYWwgLyBmcy1kcml2ZXIgYnVmZmVyCisgKgkJCXN1cHBvcnQgZm9yIDZieXRlLzUxMmJ5dGUgaGFyZHdhcmUgRUNDCisgKgkJCXJlYWRfZWNjLCB3cml0ZV9lY2MgZXh0ZW5kZWQgZm9yIGRpZmZlcmVudCBvb2ItbGF5b3V0CisgKgkJCW9vYiBsYXlvdXQgc2VsZWN0aW9uczogTkFORF9OT05FX09PQiwgTkFORF9KRkZTMl9PT0IsCisgKgkJCU5BTkRfWUFGRlNfT09CCisgKiAgMTEtMjUtMjAwMiB0Z2x4CUFkZGVkIE1hbnVmYWN0dXJlciBjb2RlIEZVSklUU1UsIE5BVElPTkFMCisgKgkJCVNwbGl0IG1hbnVmYWN0dXJlciBhbmQgZGV2aWNlIElEIHN0cnVjdHVyZXMgCisgKgorICogIDAyLTA4LTIwMDQgdGdseCAJYWRkZWQgb3B0aW9uIGZpZWxkIHRvIG5hbmQgc3RydWN0dXJlIGZvciBjaGlwIGFub21hbGl0aWVzCisgKiAgMDUtMjUtMjAwNCB0Z2x4IAlhZGRlZCBiYWQgYmxvY2sgdGFibGUgc3VwcG9ydCwgU1QtTUlDUk8gbWFudWZhY3R1cmVyIGlkCisgKgkJCXVwZGF0ZSBvZiBuYW5kX2NoaXAgc3RydWN0dXJlIGRlc2NyaXB0aW9uCisgKi8KKyNpZm5kZWYgX19MSU5VWF9NVERfTkFORF9ICisjZGVmaW5lIF9fTElOVVhfTVREX05BTkRfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorCitzdHJ1Y3QgbXRkX2luZm87CisvKiBTY2FuIGFuZCBpZGVudGlmeSBhIE5BTkQgZGV2aWNlICovCitleHRlcm4gaW50IG5hbmRfc2NhbiAoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBtYXhfY2hpcHMpOworLyogRnJlZSByZXNvdXJjZXMgaGVsZCBieSB0aGUgTkFORCBkZXZpY2UgKi8KK2V4dGVybiB2b2lkIG5hbmRfcmVsZWFzZSAoc3RydWN0IG10ZF9pbmZvICptdGQpOworCisvKiBSZWFkIHJhdyBkYXRhIGZyb20gdGhlIGRldmljZSB3aXRob3V0IEVDQyAqLworZXh0ZXJuIGludCBuYW5kX3JlYWRfcmF3IChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdWludDhfdCAqYnVmLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwgc2l6ZV90IG9vYmxlbik7CisKKworLyogVGhlIG1heGltdW0gbnVtYmVyIG9mIE5BTkQgY2hpcHMgaW4gYW4gYXJyYXkgKi8KKyNkZWZpbmUgTkFORF9NQVhfQ0hJUFMJCTgKKworLyogVGhpcyBjb25zdGFudCBkZWNsYXJlcyB0aGUgbWF4LiBvb2JzaXplIC8gcGFnZSwgd2hpY2gKKyAqIGlzIHN1cHBvcnRlZCBub3cuIElmIHlvdSBhZGQgYSBjaGlwIHdpdGggYmlnZ2VyIG9vYnNpemUvcGFnZQorICogYWRqdXN0IHRoaXMgYWNjb3JkaW5nbHkuCisgKi8KKyNkZWZpbmUgTkFORF9NQVhfT09CU0laRQk2NAorCisvKgorICogQ29uc3RhbnRzIGZvciBoYXJkd2FyZSBzcGVjaWZpYyBDTEUvQUxFL05DRSBmdW5jdGlvbgorKi8KKy8qIFNlbGVjdCB0aGUgY2hpcCBieSBzZXR0aW5nIG5DRSB0byBsb3cgKi8KKyNkZWZpbmUgTkFORF9DVExfU0VUTkNFIAkxCisvKiBEZXNlbGVjdCB0aGUgY2hpcCBieSBzZXR0aW5nIG5DRSB0byBoaWdoICovCisjZGVmaW5lIE5BTkRfQ1RMX0NMUk5DRQkJMgorLyogU2VsZWN0IHRoZSBjb21tYW5kIGxhdGNoIGJ5IHNldHRpbmcgQ0xFIHRvIGhpZ2ggKi8KKyNkZWZpbmUgTkFORF9DVExfU0VUQ0xFCQkzCisvKiBEZXNlbGVjdCB0aGUgY29tbWFuZCBsYXRjaCBieSBzZXR0aW5nIENMRSB0byBsb3cgKi8KKyNkZWZpbmUgTkFORF9DVExfQ0xSQ0xFCQk0CisvKiBTZWxlY3QgdGhlIGFkZHJlc3MgbGF0Y2ggYnkgc2V0dGluZyBBTEUgdG8gaGlnaCAqLworI2RlZmluZSBOQU5EX0NUTF9TRVRBTEUJCTUKKy8qIERlc2VsZWN0IHRoZSBhZGRyZXNzIGxhdGNoIGJ5IHNldHRpbmcgQUxFIHRvIGxvdyAqLworI2RlZmluZSBOQU5EX0NUTF9DTFJBTEUJCTYKKy8qIFNldCB3cml0ZSBwcm90ZWN0aW9uIGJ5IHNldHRpbmcgV1AgdG8gaGlnaC4gTm90IHVzZWQhICovCisjZGVmaW5lIE5BTkRfQ1RMX1NFVFdQCQk3CisvKiBDbGVhciB3cml0ZSBwcm90ZWN0aW9uIGJ5IHNldHRpbmcgV1AgdG8gbG93LiBOb3QgdXNlZCEgKi8KKyNkZWZpbmUgTkFORF9DVExfQ0xSV1AJCTgKKworLyoKKyAqIFN0YW5kYXJkIE5BTkQgZmxhc2ggY29tbWFuZHMKKyAqLworI2RlZmluZSBOQU5EX0NNRF9SRUFEMAkJMAorI2RlZmluZSBOQU5EX0NNRF9SRUFEMQkJMQorI2RlZmluZSBOQU5EX0NNRF9QQUdFUFJPRwkweDEwCisjZGVmaW5lIE5BTkRfQ01EX1JFQURPT0IJMHg1MAorI2RlZmluZSBOQU5EX0NNRF9FUkFTRTEJCTB4NjAKKyNkZWZpbmUgTkFORF9DTURfU1RBVFVTCQkweDcwCisjZGVmaW5lIE5BTkRfQ01EX1NUQVRVU19NVUxUSQkweDcxCisjZGVmaW5lIE5BTkRfQ01EX1NFUUlOCQkweDgwCisjZGVmaW5lIE5BTkRfQ01EX1JFQURJRAkJMHg5MAorI2RlZmluZSBOQU5EX0NNRF9FUkFTRTIJCTB4ZDAKKyNkZWZpbmUgTkFORF9DTURfUkVTRVQJCTB4ZmYKKworLyogRXh0ZW5kZWQgY29tbWFuZHMgZm9yIGxhcmdlIHBhZ2UgZGV2aWNlcyAqLworI2RlZmluZSBOQU5EX0NNRF9SRUFEU1RBUlQJMHgzMAorI2RlZmluZSBOQU5EX0NNRF9DQUNIRURQUk9HCTB4MTUKKworLyogU3RhdHVzIGJpdHMgKi8KKyNkZWZpbmUgTkFORF9TVEFUVVNfRkFJTAkweDAxCisjZGVmaW5lIE5BTkRfU1RBVFVTX0ZBSUxfTjEJMHgwMgorI2RlZmluZSBOQU5EX1NUQVRVU19UUlVFX1JFQURZCTB4MjAKKyNkZWZpbmUgTkFORF9TVEFUVVNfUkVBRFkJMHg0MAorI2RlZmluZSBOQU5EX1NUQVRVU19XUAkJMHg4MAorCisvKiAKKyAqIENvbnN0YW50cyBmb3IgRUNDX01PREVTCisgKi8KKworLyogTm8gRUNDLiBVc2FnZSBpcyBub3QgcmVjb21tZW5kZWQgISAqLworI2RlZmluZSBOQU5EX0VDQ19OT05FCQkwCisvKiBTb2Z0d2FyZSBFQ0MgMyBieXRlIEVDQyBwZXIgMjU2IEJ5dGUgZGF0YSAqLworI2RlZmluZSBOQU5EX0VDQ19TT0ZUCQkxCisvKiBIYXJkd2FyZSBFQ0MgMyBieXRlIEVDQyBwZXIgMjU2IEJ5dGUgZGF0YSAqLworI2RlZmluZSBOQU5EX0VDQ19IVzNfMjU2CTIKKy8qIEhhcmR3YXJlIEVDQyAzIGJ5dGUgRUNDIHBlciA1MTIgQnl0ZSBkYXRhICovCisjZGVmaW5lIE5BTkRfRUNDX0hXM181MTIJMworLyogSGFyZHdhcmUgRUNDIDMgYnl0ZSBFQ0MgcGVyIDUxMiBCeXRlIGRhdGEgKi8KKyNkZWZpbmUgTkFORF9FQ0NfSFc2XzUxMgk0CisvKiBIYXJkd2FyZSBFQ0MgOCBieXRlIEVDQyBwZXIgNTEyIEJ5dGUgZGF0YSAqLworI2RlZmluZSBOQU5EX0VDQ19IVzhfNTEyCTYKKy8qIEhhcmR3YXJlIEVDQyAxMiBieXRlIEVDQyBwZXIgMjA0OCBCeXRlIGRhdGEgKi8KKyNkZWZpbmUgTkFORF9FQ0NfSFcxMl8yMDQ4CTcKKworLyoKKyAqIENvbnN0YW50cyBmb3IgSGFyZHdhcmUgRUNDCisqLworLyogUmVzZXQgSGFyZHdhcmUgRUNDIGZvciByZWFkICovCisjZGVmaW5lIE5BTkRfRUNDX1JFQUQJCTAKKy8qIFJlc2V0IEhhcmR3YXJlIEVDQyBmb3Igd3JpdGUgKi8KKyNkZWZpbmUgTkFORF9FQ0NfV1JJVEUJCTEKKy8qIEVuYWJsZSBIYXJkd2FyZSBFQ0MgYmVmb3JlIHN5bmRyb20gaXMgcmVhZCBiYWNrIGZyb20gZmxhc2ggKi8KKyNkZWZpbmUgTkFORF9FQ0NfUkVBRFNZTgkyCisKKy8qIE9wdGlvbiBjb25zdGFudHMgZm9yIGJpemFycmUgZGlzZnVuY3Rpb25hbGl0eSBhbmQgcmVhbAorKiAgZmVhdHVyZXMKKyovCisvKiBDaGlwIGNhbiBub3QgYXV0byBpbmNyZW1lbnQgcGFnZXMgKi8KKyNkZWZpbmUgTkFORF9OT19BVVRPSU5DUgkweDAwMDAwMDAxCisvKiBCdXN3aXRkaCBpcyAxNiBiaXQgKi8KKyNkZWZpbmUgTkFORF9CVVNXSURUSF8xNgkweDAwMDAwMDAyCisvKiBEZXZpY2Ugc3VwcG9ydHMgcGFydGlhbCBwcm9ncmFtbWluZyB3aXRob3V0IHBhZGRpbmcgKi8KKyNkZWZpbmUgTkFORF9OT19QQURESU5HCQkweDAwMDAwMDA0CisvKiBDaGlwIGhhcyBjYWNoZSBwcm9ncmFtIGZ1bmN0aW9uICovCisjZGVmaW5lIE5BTkRfQ0FDSEVQUkcJCTB4MDAwMDAwMDgKKy8qIENoaXAgaGFzIGNvcHkgYmFjayBmdW5jdGlvbiAqLworI2RlZmluZSBOQU5EX0NPUFlCQUNLCQkweDAwMDAwMDEwCisvKiBBTkQgQ2hpcCB3aGljaCBoYXMgNCBiYW5rcyBhbmQgYSBjb25mdXNpbmcgcGFnZSAvIGJsb2NrIAorICogYXNzaWdubWVudC4gU2VlIFJlbmVzYXMgZGF0YXNoZWV0IGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uICovCisjZGVmaW5lIE5BTkRfSVNfQU5ECQkweDAwMDAwMDIwCisvKiBDaGlwIGhhcyBhIGFycmF5IG9mIDQgcGFnZXMgd2hpY2ggY2FuIGJlIHJlYWQgd2l0aG91dAorICogYWRkaXRpb25hbCByZWFkeSAvYnVzeSB3YWl0cyAqLworI2RlZmluZSBOQU5EXzRQQUdFX0FSUkFZCTB4MDAwMDAwNDAgCisKKy8qIE9wdGlvbnMgdmFsaWQgZm9yIFNhbXN1bmcgbGFyZ2UgcGFnZSBkZXZpY2VzICovCisjZGVmaW5lIE5BTkRfU0FNU1VOR19MUF9PUFRJT05TIFwKKwkoTkFORF9OT19QQURESU5HIHwgTkFORF9DQUNIRVBSRyB8IE5BTkRfQ09QWUJBQ0spCisKKy8qIE1hY3JvcyB0byBpZGVudGlmeSB0aGUgYWJvdmUgKi8KKyNkZWZpbmUgTkFORF9DQU5BVVRPSU5DUihjaGlwKSAoIShjaGlwLT5vcHRpb25zICYgTkFORF9OT19BVVRPSU5DUikpCisjZGVmaW5lIE5BTkRfTVVTVF9QQUQoY2hpcCkgKCEoY2hpcC0+b3B0aW9ucyAmIE5BTkRfTk9fUEFERElORykpCisjZGVmaW5lIE5BTkRfSEFTX0NBQ0hFUFJPRyhjaGlwKSAoKGNoaXAtPm9wdGlvbnMgJiBOQU5EX0NBQ0hFUFJHKSkKKyNkZWZpbmUgTkFORF9IQVNfQ09QWUJBQ0soY2hpcCkgKChjaGlwLT5vcHRpb25zICYgTkFORF9DT1BZQkFDSykpCisKKy8qIE1hc2sgdG8gemVybyBvdXQgdGhlIGNoaXAgb3B0aW9ucywgd2hpY2ggY29tZSBmcm9tIHRoZSBpZCB0YWJsZSAqLworI2RlZmluZSBOQU5EX0NISVBPUFRJT05TX01TSwkoMHgwMDAwZmZmZiAmIH5OQU5EX05PX0FVVE9JTkNSKQorCisvKiBOb24gY2hpcCByZWxhdGVkIG9wdGlvbnMgKi8KKy8qIFVzZSBhIGZsYXNoIGJhc2VkIGJhZCBibG9jayB0YWJsZS4gVGhpcyBvcHRpb24gaXMgcGFzc2VkIHRvIHRoZQorICogZGVmYXVsdCBiYWQgYmxvY2sgdGFibGUgZnVuY3Rpb24uICovCisjZGVmaW5lIE5BTkRfVVNFX0ZMQVNIX0JCVAkweDAwMDEwMDAwCisvKiBUaGUgaHcgZWNjIGdlbmVyYXRvciBwcm92aWRlcyBhIHN5bmRyb21lIGluc3RlYWQgYSBlY2MgdmFsdWUgb24gcmVhZCAKKyAqIFRoaXMgY2FuIG9ubHkgd29yayBpZiB3ZSBoYXZlIHRoZSBlY2MgYnl0ZXMgZGlyZWN0bHkgYmVoaW5kIHRoZSAKKyAqIGRhdGEgYnl0ZXMuIEFwcGxpZXMgZm9yIERPQyBhbmQgQUctQU5EIFJlbmVzYXMgSFcgUmVlZCBTb2xvbW9uIGdlbmVyYXRvcnMgKi8KKyNkZWZpbmUgTkFORF9IV0VDQ19TWU5EUk9NRQkweDAwMDIwMDAwCisKKworLyogT3B0aW9ucyBzZXQgYnkgbmFuZCBzY2FuICovCisvKiBOYW5kIHNjYW4gaGFzIGFsbG9jYXRlZCBvb2JfYnVmICovCisjZGVmaW5lIE5BTkRfT09CQlVGX0FMTE9DCTB4NDAwMDAwMDAKKy8qIE5hbmQgc2NhbiBoYXMgYWxsb2NhdGVkIGRhdGFfYnVmICovCisjZGVmaW5lIE5BTkRfREFUQUJVRl9BTExPQwkweDgwMDAwMDAwCisKKworLyoKKyAqIG5hbmRfc3RhdGVfdCAtIGNoaXAgc3RhdGVzCisgKiBFbnVtZXJhdGlvbiBmb3IgTkFORCBmbGFzaCBjaGlwIHN0YXRlCisgKi8KK3R5cGVkZWYgZW51bSB7CisJRkxfUkVBRFksCisJRkxfUkVBRElORywKKwlGTF9XUklUSU5HLAorCUZMX0VSQVNJTkcsCisJRkxfU1lOQ0lORywKKwlGTF9DQUNIRURQUkcsCit9IG5hbmRfc3RhdGVfdDsKKworLyogS2VlcCBnY2MgaGFwcHkgKi8KK3N0cnVjdCBuYW5kX2NoaXA7CisKKy8qKgorICogc3RydWN0IG5hbmRfaHdfY29udHJvbCAtIENvbnRyb2wgc3RydWN0dXJlIGZvciBoYXJkd2FyZSBjb250cm9sbGVyIChlLmcgRUNDIGdlbmVyYXRvcikgc2hhcmVkIGFtb25nIGluZGVwZW5kZW5kIGRldmljZXMKKyAqIEBsb2NrOiAgICAgICAgICAgICAgIHByb3RlY3Rpb24gbG9jayAgCisgKiBAYWN0aXZlOgkJdGhlIG10ZCBkZXZpY2Ugd2hpY2ggaG9sZHMgdGhlIGNvbnRyb2xsZXIgY3VycmVudGx5CisgKi8KK3N0cnVjdCBuYW5kX2h3X2NvbnRyb2wgeworCXNwaW5sb2NrX3QJIGxvY2s7CisJc3RydWN0IG5hbmRfY2hpcCAqYWN0aXZlOworfTsKKworLyoqCisgKiBzdHJ1Y3QgbmFuZF9jaGlwIC0gTkFORCBQcml2YXRlIEZsYXNoIENoaXAgRGF0YQorICogQElPX0FERFJfUjoJCVtCT0FSRFNQRUNJRklDXSBhZGRyZXNzIHRvIHJlYWQgdGhlIDggSS9PIGxpbmVzIG9mIHRoZSBmbGFzaCBkZXZpY2UgCisgKiBASU9fQUREUl9XOgkJW0JPQVJEU1BFQ0lGSUNdIGFkZHJlc3MgdG8gd3JpdGUgdGhlIDggSS9PIGxpbmVzIG9mIHRoZSBmbGFzaCBkZXZpY2UgCisgKiBAcmVhZF9ieXRlOgkJW1JFUExBQ0VBQkxFXSByZWFkIG9uZSBieXRlIGZyb20gdGhlIGNoaXAKKyAqIEB3cml0ZV9ieXRlOgkJW1JFUExBQ0VBQkxFXSB3cml0ZSBvbmUgYnl0ZSB0byB0aGUgY2hpcAorICogQHJlYWRfd29yZDoJCVtSRVBMQUNFQUJMRV0gcmVhZCBvbmUgd29yZCBmcm9tIHRoZSBjaGlwCisgKiBAd3JpdGVfd29yZDoJCVtSRVBMQUNFQUJMRV0gd3JpdGUgb25lIHdvcmQgdG8gdGhlIGNoaXAKKyAqIEB3cml0ZV9idWY6CQlbUkVQTEFDRUFCTEVdIHdyaXRlIGRhdGEgZnJvbSB0aGUgYnVmZmVyIHRvIHRoZSBjaGlwCisgKiBAcmVhZF9idWY6CQlbUkVQTEFDRUFCTEVdIHJlYWQgZGF0YSBmcm9tIHRoZSBjaGlwIGludG8gdGhlIGJ1ZmZlcgorICogQHZlcmlmeV9idWY6CQlbUkVQTEFDRUFCTEVdIHZlcmlmeSBidWZmZXIgY29udGVudHMgYWdhaW5zdCB0aGUgY2hpcCBkYXRhCisgKiBAc2VsZWN0X2NoaXA6CVtSRVBMQUNFQUJMRV0gc2VsZWN0IGNoaXAgbnIKKyAqIEBibG9ja19iYWQ6CQlbUkVQTEFDRUFCTEVdIGNoZWNrLCBpZiB0aGUgYmxvY2sgaXMgYmFkCisgKiBAYmxvY2tfbWFya2JhZDoJW1JFUExBQ0VBQkxFXSBtYXJrIHRoZSBibG9jayBiYWQKKyAqIEBod2NvbnRyb2w6CQlbQk9BUkRTUEVDSUZJQ10gaGFyZHdhcmVzcGVjaWZpYyBmdW5jdGlvbiBmb3IgYWNjZXNpbmcgY29udHJvbC1saW5lcworICogQGRldl9yZWFkeToJCVtCT0FSRFNQRUNJRklDXSBoYXJkd2FyZXNwZWNpZmljIGZ1bmN0aW9uIGZvciBhY2Nlc2luZyBkZXZpY2UgcmVhZHkvYnVzeSBsaW5lCisgKgkJCUlmIHNldCB0byBOVUxMIG5vIGFjY2VzcyB0byByZWFkeS9idXN5IGlzIGF2YWlsYWJsZSBhbmQgdGhlIHJlYWR5L2J1c3kgaW5mb3JtYXRpb24KKyAqCQkJaXMgcmVhZCBmcm9tIHRoZSBjaGlwIHN0YXR1cyByZWdpc3RlcgorICogQGNtZGZ1bmM6CQlbUkVQTEFDRUFCTEVdIGhhcmR3YXJlc3BlY2lmaWMgZnVuY3Rpb24gZm9yIHdyaXRpbmcgY29tbWFuZHMgdG8gdGhlIGNoaXAKKyAqIEB3YWl0ZnVuYzoJCVtSRVBMQUNFQUJMRV0gaGFyZHdhcmVzcGVjaWZpYyBmdW5jdGlvbiBmb3Igd2FpdCBvbiByZWFkeQorICogQGNhbGN1bGF0ZV9lY2M6IAlbUkVQTEFDRUFCTEVdIGZ1bmN0aW9uIGZvciBlY2MgY2FsY3VsYXRpb24gb3IgcmVhZGJhY2sgZnJvbSBlY2MgaGFyZHdhcmUKKyAqIEBjb3JyZWN0X2RhdGE6CVtSRVBMQUNFQUJMRV0gZnVuY3Rpb24gZm9yIGVjYyBjb3JyZWN0aW9uLCBtYXRjaGluZyB0byBlY2MgZ2VuZXJhdG9yIChzdy9odykKKyAqIEBlbmFibGVfaHdlY2M6CVtCT0FSRFNQRUNJRklDXSBmdW5jdGlvbiB0byBlbmFibGUgKHJlc2V0KSBoYXJkd2FyZSBlY2MgZ2VuZXJhdG9yLiBNdXN0IG9ubHkKKyAqCQkJYmUgcHJvdmlkZWQgaWYgYSBoYXJkd2FyZSBFQ0MgaXMgYXZhaWxhYmxlCisgKiBAZXJhc2VfY21kOgkJW0lOVEVSTl0gZXJhc2UgY29tbWFuZCB3cml0ZSBmdW5jdGlvbiwgc2VsZWN0YWJsZSBkdWUgdG8gQU5EIHN1cHBvcnQKKyAqIEBzY2FuX2JidDoJCVtSRVBMQUNFQUJMRV0gZnVuY3Rpb24gdG8gc2NhbiBiYWQgYmxvY2sgdGFibGUKKyAqIEBlY2Ntb2RlOgkJW0JPQVJEU1BFQ0lGSUNdIG1vZGUgb2YgZWNjLCBzZWUgZGVmaW5lcyAKKyAqIEBlY2NzaXplOiAJCVtJTlRFUk5dIGRhdGFieXRlcyB1c2VkIHBlciBlY2MtY2FsY3VsYXRpb24KKyAqIEBlY2NieXRlczogCQlbSU5URVJOXSBudW1iZXIgb2YgZWNjIGJ5dGVzIHBlciBlY2MtY2FsY3VsYXRpb24gc3RlcAorICogQGVjY3N0ZXBzOgkJW0lOVEVSTl0gbnVtYmVyIG9mIGVjYyBjYWxjdWxhdGlvbiBzdGVwcyBwZXIgcGFnZQorICogQGNoaXBfZGVsYXk6CQlbQk9BUkRTUEVDSUZJQ10gY2hpcCBkZXBlbmRlbnQgZGVsYXkgZm9yIHRyYW5zZmVyaW5nIGRhdGEgZnJvbSBhcnJheSB0byByZWFkIHJlZ3MgKHRSKQorICogQGNoaXBfbG9jazoJCVtJTlRFUk5dIHNwaW5sb2NrIHVzZWQgdG8gcHJvdGVjdCBhY2Nlc3MgdG8gdGhpcyBzdHJ1Y3R1cmUgYW5kIHRoZSBjaGlwCisgKiBAd3E6CQkJW0lOVEVSTl0gd2FpdCBxdWV1ZSB0byBzbGVlcCBvbiBpZiBhIE5BTkQgb3BlcmF0aW9uIGlzIGluIHByb2dyZXNzCisgKiBAc3RhdGU6IAkJW0lOVEVSTl0gdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIE5BTkQgZGV2aWNlCisgKiBAcGFnZV9zaGlmdDoJCVtJTlRFUk5dIG51bWJlciBvZiBhZGRyZXNzIGJpdHMgaW4gYSBwYWdlIChjb2x1bW4gYWRkcmVzcyBiaXRzKQorICogQHBoeXNfZXJhc2Vfc2hpZnQ6CVtJTlRFUk5dIG51bWJlciBvZiBhZGRyZXNzIGJpdHMgaW4gYSBwaHlzaWNhbCBlcmFzZWJsb2NrCisgKiBAYmJ0X2VyYXNlX3NoaWZ0OglbSU5URVJOXSBudW1iZXIgb2YgYWRkcmVzcyBiaXRzIGluIGEgYmJ0IGVudHJ5CisgKiBAY2hpcF9zaGlmdDoJCVtJTlRFUk5dIG51bWJlciBvZiBhZGRyZXNzIGJpdHMgaW4gb25lIGNoaXAKKyAqIEBkYXRhX2J1ZjoJCVtJTlRFUk5dIGludGVybmFsIGJ1ZmZlciBmb3Igb25lIHBhZ2UgKyBvb2IgCisgKiBAb29iX2J1ZjoJCVtJTlRFUk5dIG9vYiBidWZmZXIgZm9yIG9uZSBlcmFzZWJsb2NrCisgKiBAb29iZGlydHk6CQlbSU5URVJOXSBpbmRpY2F0ZXMgdGhhdCBvb2JfYnVmIG11c3QgYmUgcmVpbml0aWFsaXplZAorICogQGRhdGFfcG9pOgkJW0lOVEVSTl0gcG9pbnRlciB0byBhIGRhdGEgYnVmZmVyCisgKiBAb3B0aW9uczoJCVtCT0FSRFNQRUNJRklDXSB2YXJpb3VzIGNoaXAgb3B0aW9ucy4gVGhleSBjYW4gcGFydGx5IGJlIHNldCB0byBpbmZvcm0gbmFuZF9zY2FuIGFib3V0CisgKgkJCXNwZWNpYWwgZnVuY3Rpb25hbGl0eS4gU2VlIHRoZSBkZWZpbmVzIGZvciBmdXJ0aGVyIGV4cGxhbmF0aW9uCisgKiBAYmFkYmxvY2twb3M6CVtJTlRFUk5dIHBvc2l0aW9uIG9mIHRoZSBiYWQgYmxvY2sgbWFya2VyIGluIHRoZSBvb2IgYXJlYQorICogQG51bWNoaXBzOgkJW0lOVEVSTl0gbnVtYmVyIG9mIHBoeXNpY2FsIGNoaXBzCisgKiBAY2hpcHNpemU6CQlbSU5URVJOXSB0aGUgc2l6ZSBvZiBvbmUgY2hpcCBmb3IgbXVsdGljaGlwIGFycmF5cworICogQHBhZ2VtYXNrOgkJW0lOVEVSTl0gcGFnZSBudW1iZXIgbWFzayA9IG51bWJlciBvZiAocGFnZXMgLyBjaGlwKSAtIDEKKyAqIEBwYWdlYnVmOgkJW0lOVEVSTl0gaG9sZHMgdGhlIHBhZ2VudW1iZXIgd2hpY2ggaXMgY3VycmVudGx5IGluIGRhdGFfYnVmCisgKiBAYXV0b29vYjoJCVtSRVBMQUNFQUJMRV0gdGhlIGRlZmF1bHQgKGF1dG8pcGxhY2VtZW50IHNjaGVtZQorICogQGJidDoJCVtJTlRFUk5dIGJhZCBibG9jayB0YWJsZSBwb2ludGVyCisgKiBAYmJ0X3RkOgkJW1JFUExBQ0VBQkxFXSBiYWQgYmxvY2sgdGFibGUgZGVzY3JpcHRvciBmb3IgZmxhc2ggbG9va3VwCisgKiBAYmJ0X21kOgkJW1JFUExBQ0VBQkxFXSBiYWQgYmxvY2sgdGFibGUgbWlycm9yIGRlc2NyaXB0b3IKKyAqIEBiYWRibG9ja19wYXR0ZXJuOglbUkVQTEFDRUFCTEVdIGJhZCBibG9jayBzY2FuIHBhdHRlcm4gdXNlZCBmb3IgaW5pdGlhbCBiYWQgYmxvY2sgc2NhbiAKKyAqIEBjb250cm9sbGVyOgkJW09QVElPTkFMXSBhIHBvaW50ZXIgdG8gYSBoYXJkd2FyZSBjb250cm9sbGVyIHN0cnVjdHVyZSB3aGljaCBpcyBzaGFyZWQgYW1vbmcgbXVsdGlwbGUgaW5kZXBlbmRlbmQgZGV2aWNlcworICogQHByaXY6CQlbT1BUSU9OQUxdIHBvaW50ZXIgdG8gcHJpdmF0ZSBjaGlwIGRhdGUKKyAqLworIAorc3RydWN0IG5hbmRfY2hpcCB7CisJdm9pZCAgX19pb21lbQkqSU9fQUREUl9SOworCXZvaWQgIF9faW9tZW0gCSpJT19BRERSX1c7CisJCisJdV9jaGFyCQkoKnJlYWRfYnl0ZSkoc3RydWN0IG10ZF9pbmZvICptdGQpOworCXZvaWQJCSgqd3JpdGVfYnl0ZSkoc3RydWN0IG10ZF9pbmZvICptdGQsIHVfY2hhciBieXRlKTsKKwl1MTYJCSgqcmVhZF93b3JkKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCk7CisJdm9pZAkJKCp3cml0ZV93b3JkKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdTE2IHdvcmQpOworCQorCXZvaWQJCSgqd3JpdGVfYnVmKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdV9jaGFyICpidWYsIGludCBsZW4pOworCXZvaWQJCSgqcmVhZF9idWYpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1X2NoYXIgKmJ1ZiwgaW50IGxlbik7CisJaW50CQkoKnZlcmlmeV9idWYpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGxlbik7CisJdm9pZAkJKCpzZWxlY3RfY2hpcCkoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjaGlwKTsKKwlpbnQJCSgqYmxvY2tfYmFkKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcywgaW50IGdldGNoaXApOworCWludAkJKCpibG9ja19tYXJrYmFkKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcyk7CisJdm9pZCAJCSgqaHdjb250cm9sKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCk7CisJaW50ICAJCSgqZGV2X3JlYWR5KShzdHJ1Y3QgbXRkX2luZm8gKm10ZCk7CisJdm9pZCAJCSgqY21kZnVuYykoc3RydWN0IG10ZF9pbmZvICptdGQsIHVuc2lnbmVkIGNvbW1hbmQsIGludCBjb2x1bW4sIGludCBwYWdlX2FkZHIpOworCWludCAJCSgqd2FpdGZ1bmMpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzLCBpbnQgc3RhdGUpOworCWludAkJKCpjYWxjdWxhdGVfZWNjKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdV9jaGFyICpkYXQsIHVfY2hhciAqZWNjX2NvZGUpOworCWludCAJCSgqY29ycmVjdF9kYXRhKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdV9jaGFyICpkYXQsIHVfY2hhciAqcmVhZF9lY2MsIHVfY2hhciAqY2FsY19lY2MpOworCXZvaWQJCSgqZW5hYmxlX2h3ZWNjKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IG1vZGUpOworCXZvaWQJCSgqZXJhc2VfY21kKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IHBhZ2UpOworCWludAkJKCpzY2FuX2JidCkoc3RydWN0IG10ZF9pbmZvICptdGQpOworCWludAkJZWNjbW9kZTsKKwlpbnQJCWVjY3NpemU7CisJaW50CQllY2NieXRlczsKKwlpbnQJCWVjY3N0ZXBzOworCWludCAJCWNoaXBfZGVsYXk7CisJc3BpbmxvY2tfdAljaGlwX2xvY2s7CisJd2FpdF9xdWV1ZV9oZWFkX3Qgd3E7CisJbmFuZF9zdGF0ZV90IAlzdGF0ZTsKKwlpbnQgCQlwYWdlX3NoaWZ0OworCWludAkJcGh5c19lcmFzZV9zaGlmdDsKKwlpbnQJCWJidF9lcmFzZV9zaGlmdDsKKwlpbnQJCWNoaXBfc2hpZnQ7CisJdV9jaGFyIAkJKmRhdGFfYnVmOworCXVfY2hhcgkJKm9vYl9idWY7CisJaW50CQlvb2JkaXJ0eTsKKwl1X2NoYXIJCSpkYXRhX3BvaTsKKwl1bnNpZ25lZCBpbnQJb3B0aW9uczsKKwlpbnQJCWJhZGJsb2NrcG9zOworCWludAkJbnVtY2hpcHM7CisJdW5zaWduZWQgbG9uZwljaGlwc2l6ZTsKKwlpbnQJCXBhZ2VtYXNrOworCWludAkJcGFnZWJ1ZjsKKwlzdHJ1Y3QgbmFuZF9vb2JpbmZvCSphdXRvb29iOworCXVpbnQ4X3QJCSpiYnQ7CisJc3RydWN0IG5hbmRfYmJ0X2Rlc2NyCSpiYnRfdGQ7CisJc3RydWN0IG5hbmRfYmJ0X2Rlc2NyCSpiYnRfbWQ7CisJc3RydWN0IG5hbmRfYmJ0X2Rlc2NyCSpiYWRibG9ja19wYXR0ZXJuOworCXN0cnVjdCBuYW5kX2h3X2NvbnRyb2wgICpjb250cm9sbGVyOworCXZvaWQJCSpwcml2OworfTsKKworLyoKKyAqIE5BTkQgRmxhc2ggTWFudWZhY3R1cmVyIElEIENvZGVzCisgKi8KKyNkZWZpbmUgTkFORF9NRlJfVE9TSElCQQkweDk4CisjZGVmaW5lIE5BTkRfTUZSX1NBTVNVTkcJMHhlYworI2RlZmluZSBOQU5EX01GUl9GVUpJVFNVCTB4MDQKKyNkZWZpbmUgTkFORF9NRlJfTkFUSU9OQUwJMHg4ZgorI2RlZmluZSBOQU5EX01GUl9SRU5FU0FTCTB4MDcKKyNkZWZpbmUgTkFORF9NRlJfU1RNSUNSTwkweDIwCisKKy8qKgorICogc3RydWN0IG5hbmRfZmxhc2hfZGV2IC0gTkFORCBGbGFzaCBEZXZpY2UgSUQgU3RydWN0dXJlCisgKgorICogQG5hbWU6ICAJSWRlbnRpZnkgdGhlIGRldmljZSB0eXBlCisgKiBAaWQ6ICAgCWRldmljZSBJRCBjb2RlCisgKiBAcGFnZXNpemU6ICAJUGFnZXNpemUgaW4gYnl0ZXMuIEVpdGhlciAyNTYgb3IgNTEyIG9yIDAKKyAqCQlJZiB0aGUgcGFnZXNpemUgaXMgMCwgdGhlbiB0aGUgcmVhbCBwYWdlc2l6ZSAKKyAqCQlhbmQgdGhlIGVyYXNlaXplIGFyZSBkZXRlcm1pbmVkIGZyb20gdGhlCisgKgkJZXh0ZW5kZWQgaWQgYnl0ZXMgaW4gdGhlIGNoaXAKKyAqIEBlcmFzZXNpemU6IAlTaXplIG9mIGFuIGVyYXNlIGJsb2NrIGluIHRoZSBmbGFzaCBkZXZpY2UuCisgKiBAY2hpcHNpemU6ICAJVG90YWwgY2hpcHNpemUgaW4gTWVnYSBCeXRlcworICogQG9wdGlvbnM6CUJpdGZpZWxkIHRvIHN0b3JlIGNoaXAgcmVsZXZhbnQgb3B0aW9ucworICovCitzdHJ1Y3QgbmFuZF9mbGFzaF9kZXYgeworCWNoYXIgKm5hbWU7CisJaW50IGlkOworCXVuc2lnbmVkIGxvbmcgcGFnZXNpemU7CisJdW5zaWduZWQgbG9uZyBjaGlwc2l6ZTsKKwl1bnNpZ25lZCBsb25nIGVyYXNlc2l6ZTsKKwl1bnNpZ25lZCBsb25nIG9wdGlvbnM7Cit9OworCisvKioKKyAqIHN0cnVjdCBuYW5kX21hbnVmYWN0dXJlcnMgLSBOQU5EIEZsYXNoIE1hbnVmYWN0dXJlciBJRCBTdHJ1Y3R1cmUKKyAqIEBuYW1lOglNYW51ZmFjdHVyZXIgbmFtZQorICogQGlkOiAJbWFudWZhY3R1cmVyIElEIGNvZGUgb2YgZGV2aWNlLgorKi8KK3N0cnVjdCBuYW5kX21hbnVmYWN0dXJlcnMgeworCWludCBpZDsKKwljaGFyICogbmFtZTsKK307CisKK2V4dGVybiBzdHJ1Y3QgbmFuZF9mbGFzaF9kZXYgbmFuZF9mbGFzaF9pZHNbXTsKK2V4dGVybiBzdHJ1Y3QgbmFuZF9tYW51ZmFjdHVyZXJzIG5hbmRfbWFudWZfaWRzW107CisKKy8qKiAKKyAqIHN0cnVjdCBuYW5kX2JidF9kZXNjciAtIGJhZCBibG9jayB0YWJsZSBkZXNjcmlwdG9yCisgKiBAb3B0aW9uczoJb3B0aW9ucyBmb3IgdGhpcyBkZXNjcmlwdG9yCisgKiBAcGFnZXM6CXRoZSBwYWdlKHMpIHdoZXJlIHdlIGZpbmQgdGhlIGJidCwgdXNlZCB3aXRoIG9wdGlvbiBCQlRfQUJTUEFHRQorICoJCXdoZW4gYmJ0IGlzIHNlYXJjaGVkLCB0aGVuIHdlIHN0b3JlIHRoZSBmb3VuZCBiYnRzIHBhZ2VzIGhlcmUuCisgKgkJSXRzIGFuIGFycmF5IGFuZCBzdXBwb3J0cyB1cCB0byA4IGNoaXBzIG5vdworICogQG9mZnM6CW9mZnNldCBvZiB0aGUgcGF0dGVybiBpbiB0aGUgb29iIGFyZWEgb2YgdGhlIHBhZ2UKKyAqIEB2ZXJvZmZzOglvZmZzZXQgb2YgdGhlIGJidCB2ZXJzaW9uIGNvdW50ZXIgaW4gdGhlIG9vYiBhcmUgb2YgdGhlIHBhZ2UKKyAqIEB2ZXJzaW9uOgl2ZXJzaW9uIHJlYWQgZnJvbSB0aGUgYmJ0IHBhZ2UgZHVyaW5nIHNjYW4KKyAqIEBsZW46CWxlbmd0aCBvZiB0aGUgcGF0dGVybiwgaWYgMCBubyBwYXR0ZXJuIGNoZWNrIGlzIHBlcmZvcm1lZAorICogQG1heGJsb2NrczoJbWF4aW11bSBudW1iZXIgb2YgYmxvY2tzIHRvIHNlYXJjaCBmb3IgYSBiYnQuIFRoaXMgbnVtYmVyIG9mCisgKgkJYmxvY2tzIGlzIHJlc2VydmVkIGF0IHRoZSBlbmQgb2YgdGhlIGRldmljZSB3aGVyZSB0aGUgdGFibGVzIGFyZSAKKyAqCQl3cml0dGVuLgorICogQHJlc2VydmVkX2Jsb2NrX2NvZGU6IGlmIG5vbi0wLCB0aGlzIHBhdHRlcm4gZGVub3RlcyBhIHJlc2VydmVkIChyYXRoZXIgdGhhbgorICogICAgICAgICAgICAgIGJhZCkgYmxvY2sgaW4gdGhlIHN0b3JlZCBiYnQKKyAqIEBwYXR0ZXJuOglwYXR0ZXJuIHRvIGlkZW50aWZ5IGJhZCBibG9jayB0YWJsZSBvciBmYWN0b3J5IG1hcmtlZCBnb29kIC8gCisgKgkJYmFkIGJsb2NrcywgY2FuIGJlIE5VTEwsIGlmIGxlbiA9IDAKKyAqCisgKiBEZXNjcmlwdG9yIGZvciB0aGUgYmFkIGJsb2NrIHRhYmxlIG1hcmtlciBhbmQgdGhlIGRlc2NyaXB0b3IgZm9yIHRoZSAKKyAqIHBhdHRlcm4gd2hpY2ggaWRlbnRpZmllcyBnb29kIGFuZCBiYWQgYmxvY2tzLiBUaGUgYXNzdW1wdGlvbiBpcyBtYWRlCisgKiB0aGF0IHRoZSBwYXR0ZXJuIGFuZCB0aGUgdmVyc2lvbiBjb3VudCBhcmUgYWx3YXlzIGxvY2F0ZWQgaW4gdGhlIG9vYiBhcmVhCisgKiBvZiB0aGUgZmlyc3QgYmxvY2suCisgKi8KK3N0cnVjdCBuYW5kX2JidF9kZXNjciB7CisJaW50CW9wdGlvbnM7CisJaW50CXBhZ2VzW05BTkRfTUFYX0NISVBTXTsKKwlpbnQJb2ZmczsKKwlpbnQJdmVyb2ZmczsKKwl1aW50OF90CXZlcnNpb25bTkFORF9NQVhfQ0hJUFNdOworCWludAlsZW47CisJaW50IAltYXhibG9ja3M7CisJaW50CXJlc2VydmVkX2Jsb2NrX2NvZGU7CisJdWludDhfdAkqcGF0dGVybjsKK307CisKKy8qIE9wdGlvbnMgZm9yIHRoZSBiYWQgYmxvY2sgdGFibGUgZGVzY3JpcHRvcnMgKi8KKworLyogVGhlIG51bWJlciBvZiBiaXRzIHVzZWQgcGVyIGJsb2NrIGluIHRoZSBiYnQgb24gdGhlIGRldmljZSAqLworI2RlZmluZSBOQU5EX0JCVF9OUkJJVFNfTVNLCTB4MDAwMDAwMEYKKyNkZWZpbmUgTkFORF9CQlRfMUJJVAkJMHgwMDAwMDAwMQorI2RlZmluZSBOQU5EX0JCVF8yQklUCQkweDAwMDAwMDAyCisjZGVmaW5lIE5BTkRfQkJUXzRCSVQJCTB4MDAwMDAwMDQKKyNkZWZpbmUgTkFORF9CQlRfOEJJVAkJMHgwMDAwMDAwOAorLyogVGhlIGJhZCBibG9jayB0YWJsZSBpcyBpbiB0aGUgbGFzdCBnb29kIGJsb2NrIG9mIHRoZSBkZXZpY2UgKi8KKyNkZWZpbmUJTkFORF9CQlRfTEFTVEJMT0NLCTB4MDAwMDAwMTAKKy8qIFRoZSBiYnQgaXMgYXQgdGhlIGdpdmVuIHBhZ2UsIGVsc2Ugd2UgbXVzdCBzY2FuIGZvciB0aGUgYmJ0ICovCisjZGVmaW5lIE5BTkRfQkJUX0FCU1BBR0UJMHgwMDAwMDAyMAorLyogVGhlIGJidCBpcyBhdCB0aGUgZ2l2ZW4gcGFnZSwgZWxzZSB3ZSBtdXN0IHNjYW4gZm9yIHRoZSBiYnQgKi8KKyNkZWZpbmUgTkFORF9CQlRfU0VBUkNICQkweDAwMDAwMDQwCisvKiBiYnQgaXMgc3RvcmVkIHBlciBjaGlwIG9uIG11bHRpY2hpcCBkZXZpY2VzICovCisjZGVmaW5lIE5BTkRfQkJUX1BFUkNISVAJMHgwMDAwMDA4MAorLyogYmJ0IGhhcyBhIHZlcnNpb24gY291bnRlciBhdCBvZmZzZXQgdmVyb2ZmcyAqLworI2RlZmluZSBOQU5EX0JCVF9WRVJTSU9OCTB4MDAwMDAxMDAKKy8qIENyZWF0ZSBhIGJidCBpZiBub25lIGF4aXN0cyAqLworI2RlZmluZSBOQU5EX0JCVF9DUkVBVEUJCTB4MDAwMDAyMDAKKy8qIFNlYXJjaCBnb29kIC8gYmFkIHBhdHRlcm4gdGhyb3VnaCBhbGwgcGFnZXMgb2YgYSBibG9jayAqLworI2RlZmluZSBOQU5EX0JCVF9TQ0FOQUxMUEFHRVMJMHgwMDAwMDQwMAorLyogU2NhbiBibG9jayBlbXB0eSBkdXJpbmcgZ29vZCAvIGJhZCBibG9jayBzY2FuICovCisjZGVmaW5lIE5BTkRfQkJUX1NDQU5FTVBUWQkweDAwMDAwODAwCisvKiBXcml0ZSBiYnQgaWYgbmVjY2VjYXJ5ICovCisjZGVmaW5lIE5BTkRfQkJUX1dSSVRFCQkweDAwMDAxMDAwCisvKiBSZWFkIGFuZCB3cml0ZSBiYWNrIGJsb2NrIGNvbnRlbnRzIHdoZW4gd3JpdGluZyBiYnQgKi8KKyNkZWZpbmUgTkFORF9CQlRfU0FWRUNPTlRFTlQJMHgwMDAwMjAwMAorLyogU2VhcmNoIGdvb2QgLyBiYWQgcGF0dGVybiBvbiB0aGUgZmlyc3QgYW5kIHRoZSBzZWNvbmQgcGFnZSAqLworI2RlZmluZSBOQU5EX0JCVF9TQ0FOMk5EUEFHRQkweDAwMDA0MDAwCisKKy8qIFRoZSBtYXhpbXVtIG51bWJlciBvZiBibG9ja3MgdG8gc2NhbiBmb3IgYSBiYnQgKi8KKyNkZWZpbmUgTkFORF9CQlRfU0NBTl9NQVhCTE9DS1MJNAorCitleHRlcm4gaW50IG5hbmRfc2Nhbl9iYnQgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgKmJkKTsKK2V4dGVybiBpbnQgbmFuZF91cGRhdGVfYmJ0IChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mZnMpOworZXh0ZXJuIGludCBuYW5kX2RlZmF1bHRfYmJ0IChzdHJ1Y3QgbXRkX2luZm8gKm10ZCk7CitleHRlcm4gaW50IG5hbmRfaXNiYWRfYmJ0IChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mZnMsIGludCBhbGxvd2JidCk7CitleHRlcm4gaW50IG5hbmRfZXJhc2VfbmFuZCAoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBlcmFzZV9pbmZvICppbnN0ciwgaW50IGFsbG93YmJ0KTsKKworLyoKKyogQ29uc3RhbnRzIGZvciBvb2IgY29uZmlndXJhdGlvbgorKi8KKyNkZWZpbmUgTkFORF9TTUFMTF9CQURCTE9DS19QT1MJCTUKKyNkZWZpbmUgTkFORF9MQVJHRV9CQURCTE9DS19QT1MJCTAKKworI2VuZGlmIC8qIF9fTElOVVhfTVREX05BTkRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdGQvbmFuZF9lY2MuaCBiL2luY2x1ZGUvbGludXgvbXRkL25hbmRfZWNjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJjNWJjMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbXRkL25hbmRfZWNjLmgKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqICBkcml2ZXJzL210ZC9uYW5kX2VjYy5oCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMCBTdGV2ZW4gSi4gSGlsbCAoc2poaWxsQHJlYWxpdHlkaWx1dGVkLmNvbSkKKyAqCisgKiAkSWQ6IG5hbmRfZWNjLmgsdiAxLjQgMjAwNC8wNi8xNyAwMjozNTowMiBkYnJvd24gRXhwICQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgZmlsZSBpcyB0aGUgaGVhZGVyIGZvciB0aGUgRUNDIGFsZ29yaXRobS4KKyAqLworCisjaWZuZGVmIF9fTVREX05BTkRfRUNDX0hfXworI2RlZmluZSBfX01URF9OQU5EX0VDQ19IX18KKworc3RydWN0IG10ZF9pbmZvOworCisvKgorICogQ2FsY3VsYXRlIDMgYnl0ZSBFQ0MgY29kZSBmb3IgMjU2IGJ5dGUgYmxvY2sKKyAqLworaW50IG5hbmRfY2FsY3VsYXRlX2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdV9jaGFyICpkYXQsIHVfY2hhciAqZWNjX2NvZGUpOworCisvKgorICogRGV0ZWN0IGFuZCBjb3JyZWN0IGEgMSBiaXQgZXJyb3IgZm9yIDI1NiBieXRlIGJsb2NrCisgKi8KK2ludCBuYW5kX2NvcnJlY3RfZGF0YShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdV9jaGFyICpkYXQsIHVfY2hhciAqcmVhZF9lY2MsIHVfY2hhciAqY2FsY19lY2MpOworCisjZW5kaWYgLyogX19NVERfTkFORF9FQ0NfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC9uZnRsLmggYi9pbmNsdWRlL2xpbnV4L210ZC9uZnRsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM1ZDJjMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbXRkL25mdGwuaApAQCAtMCwwICsxLDU0IEBACisvKgorICogJElkOiBuZnRsLmgsdiAxLjE2IDIwMDQvMDYvMzAgMTQ6NDk6MDAgZGJyb3duIEV4cCAkCisgKgorICogKEMpIDE5OTktMjAwMyBEYXZpZCBXb29kaG91c2UgPGR3bXcyQGluZnJhZGVhZC5vcmc+CisgKi8KKworI2lmbmRlZiBfX01URF9ORlRMX0hfXworI2RlZmluZSBfX01URF9ORlRMX0hfXworCisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9ibGt0cmFucy5oPgorCisjaW5jbHVkZSA8bXRkL25mdGwtdXNlci5oPgorCisvKiB0aGVzZSBpbmZvIGFyZSB1c2VkIGluIFJlcGxVbml0VGFibGUgKi8KKyNkZWZpbmUgQkxPQ0tfTklMICAgICAgICAgIDB4ZmZmZiAvKiBsYXN0IGJsb2NrIG9mIGEgY2hhaW4gKi8KKyNkZWZpbmUgQkxPQ0tfRlJFRSAgICAgICAgIDB4ZmZmZSAvKiBmcmVlIGJsb2NrICovCisjZGVmaW5lIEJMT0NLX05PVEVYUExPUkVEICAweGZmZmQgLyogbm9uIGV4cGxvcmVkIGJsb2NrLCBvbmx5IHVzZWQgZHVyaW5nIG1vdW50aW5nICovCisjZGVmaW5lIEJMT0NLX1JFU0VSVkVEICAgICAweGZmZmMgLyogYmlvcyBibG9jayBvciBiYWQgYmxvY2sgKi8KKworc3RydWN0IE5GVExyZWNvcmQgeworCXN0cnVjdCBtdGRfYmxrdHJhbnNfZGV2IG1iZDsKKwlfX3UxNiBNZWRpYVVuaXQsIFNwYXJlTWVkaWFVbml0OworCV9fdTMyIEVyYXNlU2l6ZTsKKwlzdHJ1Y3QgTkZUTE1lZGlhSGVhZGVyIE1lZGlhSGRyOworCWludCB1c2Vjb3VudDsKKwl1bnNpZ25lZCBjaGFyIGhlYWRzOworCXVuc2lnbmVkIGNoYXIgc2VjdG9yczsKKwl1bnNpZ25lZCBzaG9ydCBjeWxpbmRlcnM7CisJX191MTYgbnVtdnVuaXRzOworCV9fdTE2IGxhc3RFVU47ICAgICAgICAgICAgICAgICAgLyogc2hvdWxkIGJlIHN1cHByZXNzZWQgKi8KKwlfX3UxNiBudW1mcmVlRVVOczsKKwlfX3UxNiBMYXN0RnJlZUVVTjsgCQkvKiBUbyBzcGVlZCB1cCBmaW5kaW5nIGEgZnJlZSBFVU4gKi8KKwlpbnQgaGVhZCxzZWN0LGN5bDsKKwlfX3UxNiAqRVVOdGFibGU7IAkJLyogW251bXZ1bml0c106IEZpcnN0IEVVTiBmb3IgZWFjaCB2aXJ0dWFsIHVuaXQgICovCisJX191MTYgKlJlcGxVbml0VGFibGU7IAkJLyogW251bUVVTnNdOiBSZXBsVW5pdE51bWJlciBmb3IgZWFjaCAqLworICAgICAgICB1bnNpZ25lZCBpbnQgbmJfYmxvY2tzOwkJLyogbnVtYmVyIG9mIHBoeXNpY2FsIGJsb2NrcyAqLworICAgICAgICB1bnNpZ25lZCBpbnQgbmJfYm9vdF9ibG9ja3M7CS8qIG51bWJlciBvZiBibG9ja3MgdXNlZCBieSB0aGUgYmlvcyAqLworICAgICAgICBzdHJ1Y3QgZXJhc2VfaW5mbyBpbnN0cjsKKwlzdHJ1Y3QgbmFuZF9vb2JpbmZvIG9vYmluZm87Cit9OworCitpbnQgTkZUTF9tb3VudChzdHJ1Y3QgTkZUTHJlY29yZCAqcyk7CitpbnQgTkZUTF9mb3JtYXRibG9jayhzdHJ1Y3QgTkZUTHJlY29yZCAqcywgaW50IGJsb2NrKTsKKworI2lmbmRlZiBORlRMX01BSk9SCisjZGVmaW5lIE5GVExfTUFKT1IgOTMKKyNlbmRpZgorCisjZGVmaW5lIE1BWF9ORlRMUyAxNgorI2RlZmluZSBNQVhfU0VDVE9SU19QRVJfVU5JVCA2NAorI2RlZmluZSBORlRMX1BBUlROX0JJVFMgNAorCisjZW5kaWYgLyogX19NVERfTkZUTF9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRkL3BhcnRpdGlvbnMuaCBiL2luY2x1ZGUvbGludXgvbXRkL3BhcnRpdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGIyZWRmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9tdGQvcGFydGl0aW9ucy5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBNVEQgcGFydGl0aW9uaW5nIGxheWVyIGRlZmluaXRpb25zCisgKgorICogKEMpIDIwMDAgTmljb2xhcyBQaXRyZSA8bmljb0BjYW0ub3JnPgorICoKKyAqIFRoaXMgY29kZSBpcyBHUEwKKyAqCisgKiAkSWQ6IHBhcnRpdGlvbnMuaCx2IDEuMTYgMjAwNC8xMS8xNiAxODozNDo0MCBkd213MiBFeHAgJAorICovCisKKyNpZm5kZWYgTVREX1BBUlRJVElPTlNfSAorI2RlZmluZSBNVERfUEFSVElUSU9OU19ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisKKy8qCisgKiBQYXJ0aXRpb24gZGVmaW5pdGlvbiBzdHJ1Y3R1cmU6CisgKiAKKyAqIEFuIGFycmF5IG9mIHN0cnVjdCBwYXJ0aXRpb24gaXMgcGFzc2VkIGFsb25nIHdpdGggYSBNVEQgb2JqZWN0IHRvCisgKiBhZGRfbXRkX3BhcnRpdGlvbnMoKSB0byBjcmVhdGUgdGhlbS4KKyAqCisgKiBGb3IgZWFjaCBwYXJ0aXRpb24sIHRoZXNlIGZpZWxkcyBhcmUgYXZhaWxhYmxlOgorICogbmFtZTogc3RyaW5nIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGxhYmVsIHRoZSBwYXJ0aXRpb24ncyBNVEQgZGV2aWNlLgorICogc2l6ZTogdGhlIHBhcnRpdGlvbiBzaXplOyBpZiBkZWZpbmVkIGFzIE1URFBBUlRfU0laX0ZVTEwsIHRoZSBwYXJ0aXRpb24gCisgKiAJd2lsbCBleHRlbmQgdG8gdGhlIGVuZCBvZiB0aGUgbWFzdGVyIE1URCBkZXZpY2UuCisgKiBvZmZzZXQ6IGFic29sdXRlIHN0YXJ0aW5nIHBvc2l0aW9uIHdpdGhpbiB0aGUgbWFzdGVyIE1URCBkZXZpY2U7IGlmIAorICogCWRlZmluZWQgYXMgTVREUEFSVF9PRlNfQVBQRU5ELCB0aGUgcGFydGl0aW9uIHdpbGwgc3RhcnQgd2hlcmUgdGhlIAorICogCXByZXZpb3VzIG9uZSBlbmRlZDsgaWYgTVREUEFSVF9PRlNfTlhUQkxLLCBhdCB0aGUgbmV4dCBlcmFzZSBibG9jay4KKyAqIG1hc2tfZmxhZ3M6IGNvbnRhaW5zIGZsYWdzIHRoYXQgaGF2ZSB0byBiZSBtYXNrZWQgKHJlbW92ZWQpIGZyb20gdGhlIAorICogCW1hc3RlciBNVEQgZmxhZyBzZXQgZm9yIHRoZSBjb3JyZXNwb25kaW5nIE1URCBwYXJ0aXRpb24uCisgKiAJRm9yIGV4YW1wbGUsIHRvIGZvcmNlIGEgcmVhZC1vbmx5IHBhcnRpdGlvbiwgc2ltcGx5IGFkZGluZyAKKyAqIAlNVERfV1JJVEVBQkxFIHRvIHRoZSBtYXNrX2ZsYWdzIHdpbGwgZG8gdGhlIHRyaWNrLgorICoKKyAqIE5vdGU6IHdyaXRlYWJsZSBwYXJ0aXRpb25zIHJlcXVpcmUgdGhlaXIgc2l6ZSBhbmQgb2Zmc2V0IGJlIAorICogZXJhc2VzaXplIGFsaWduZWQgKGUuZy4gdXNlIE1URFBBUlRfT0ZTX05FWFRCTEspLgorICovIAorCitzdHJ1Y3QgbXRkX3BhcnRpdGlvbiB7CisJY2hhciAqbmFtZTsJCQkvKiBpZGVudGlmaWVyIHN0cmluZyAqLworCXVfaW50MzJfdCBzaXplOwkJCS8qIHBhcnRpdGlvbiBzaXplICovCisJdV9pbnQzMl90IG9mZnNldDsJCS8qIG9mZnNldCB3aXRoaW4gdGhlIG1hc3RlciBNVEQgc3BhY2UgKi8KKwl1X2ludDMyX3QgbWFza19mbGFnczsJCS8qIG1hc3RlciBNVEQgZmxhZ3MgdG8gbWFzayBvdXQgZm9yIHRoaXMgcGFydGl0aW9uICovCisJc3RydWN0IG5hbmRfb29iaW5mbyAqb29ic2VsOwkvKiBvdXQgb2YgYmFuZCBsYXlvdXQgZm9yIHRoaXMgcGFydGl0aW9uIChOQU5EIG9ubHkpKi8KKwlzdHJ1Y3QgbXRkX2luZm8gKiptdGRwOwkJLyogcG9pbnRlciB0byBzdG9yZSB0aGUgTVREIG9iamVjdCAqLworfTsKKworI2RlZmluZSBNVERQQVJUX09GU19OWFRCTEsJKC0yKQorI2RlZmluZSBNVERQQVJUX09GU19BUFBFTkQJKC0xKQorI2RlZmluZSBNVERQQVJUX1NJWl9GVUxMCSgwKQorCisKK2ludCBhZGRfbXRkX3BhcnRpdGlvbnMoc3RydWN0IG10ZF9pbmZvICosIGNvbnN0IHN0cnVjdCBtdGRfcGFydGl0aW9uICosIGludCk7CitpbnQgZGVsX210ZF9wYXJ0aXRpb25zKHN0cnVjdCBtdGRfaW5mbyAqKTsKKworLyoKKyAqIEZ1bmN0aW9ucyBkZWFsaW5nIHdpdGggdGhlIHZhcmlvdXMgd2F5cyBvZiBwYXJ0aXRpb25pbmcgdGhlIHNwYWNlCisgKi8KKworc3RydWN0IG10ZF9wYXJ0X3BhcnNlciB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCBtb2R1bGUgKm93bmVyOworCWNvbnN0IGNoYXIgKm5hbWU7CisJaW50ICgqcGFyc2VfZm4pKHN0cnVjdCBtdGRfaW5mbyAqLCBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqKiwgdW5zaWduZWQgbG9uZyk7Cit9OworCitleHRlcm4gaW50IHJlZ2lzdGVyX210ZF9wYXJzZXIoc3RydWN0IG10ZF9wYXJ0X3BhcnNlciAqcGFyc2VyKTsKK2V4dGVybiBpbnQgZGVyZWdpc3Rlcl9tdGRfcGFyc2VyKHN0cnVjdCBtdGRfcGFydF9wYXJzZXIgKnBhcnNlcik7CitleHRlcm4gaW50IHBhcnNlX210ZF9wYXJ0aXRpb25zKHN0cnVjdCBtdGRfaW5mbyAqbWFzdGVyLCBjb25zdCBjaGFyICoqdHlwZXMsIAorCQkJCXN0cnVjdCBtdGRfcGFydGl0aW9uICoqcHBhcnRzLCB1bnNpZ25lZCBsb25nIG9yaWdpbik7CisKKyNkZWZpbmUgcHV0X3BhcnRpdGlvbl9wYXJzZXIocCkgZG8geyBtb2R1bGVfcHV0KChwKS0+b3duZXIpOyB9IHdoaWxlKDApCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC9waHlzbWFwLmggYi9pbmNsdWRlL2xpbnV4L210ZC9waHlzbWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVhYTQ5NzAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L210ZC9waHlzbWFwLmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIEZvciBib2FyZHMgd2l0aCBwaHlzaWNhbGx5IG1hcHBlZCBmbGFzaCBhbmQgdXNpbmcgCisgKiBkcml2ZXJzL210ZC9tYXBzL3BoeXNtYXAuYyBtYXBwaW5nIGRyaXZlci4KKyAqCisgKiAkSWQ6IHBoeXNtYXAuaCx2IDEuMyAyMDA0LzA3LzIxIDAwOjE2OjE1IGp3Ym95ZXIgRXhwICQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCisgKiBBdXRob3I6IEp1biBTdW4sIGpzdW5AbXZpc3RhLmNvbSBvciBqc3VuQGp1bnN1bi5uZXQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaWZuZGVmIF9fTElOVVhfTVREX1BIWVNNQVBfXworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpZiBkZWZpbmVkKENPTkZJR19NVERfUEhZU01BUCkgCisKKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisKKy8qCisgKiBUaGUgbWFwX2luZm8gZm9yIHBoeXNtYXAuICBCb2FyZCBjYW4gb3ZlcnJpZGUgc2l6ZSwgYnVzd2lkdGgsIHBoeXMsCisgKiAoKnNldF92cHApKCksIGV0YyBpbiB0aGVpciBpbml0aWFsIHNldHVwIHJvdXRpbmUuCisgKi8KK2V4dGVybiBzdHJ1Y3QgbWFwX2luZm8gcGh5c21hcF9tYXA7CisKKy8qCisgKiBCb2FyZCBuZWVkcyB0byBzcGVjaWZ5IHRoZSBleGFjdCBtYXBwaW5nIGR1cmluZyB0aGVpciBzZXR1cCB0aW1lLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgcGh5c21hcF9jb25maWd1cmUodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIGludCBiYW5rd2lkdGgsIHZvaWQgKCpzZXRfdnBwKShzdHJ1Y3QgbWFwX2luZm8gKiwgaW50KSApCit7CisJcGh5c21hcF9tYXAucGh5cyA9IGFkZHI7CisJcGh5c21hcF9tYXAuc2l6ZSA9IHNpemU7CisJcGh5c21hcF9tYXAuYmFua3dpZHRoID0gYmFua3dpZHRoOworCXBoeXNtYXBfbWFwLnNldF92cHAgPSBzZXRfdnBwOworfQorCisjaWYgZGVmaW5lZChDT05GSUdfTVREX1BBUlRJVElPTlMpCisKKy8qCisgKiBNYWNoaW5lcyB0aGF0IHdpc2ggdG8gZG8gZmxhc2ggcGFydGl0aW9uIG1heSB3YW50IHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBpbiAKKyAqIHRoZWlyIHNldHVwIHJvdXRpbmUuICAKKyAqCisgKglwaHlzbWFwX3NldF9wYXJ0aXRpb25zKG15cGFydGl0aW9ucywgbnVtX3BhcnRzKTsKKyAqCisgKiBOb3RlIHRoYXQgb25lIGNhbiBhbHdheXMgb3ZlcnJpZGUgdGhpcyBoYXJkLWNvZGVkIHBhcnRpdGlvbiB3aXRoIAorICogY29tbWFuZCBsaW5lIHBhcnRpdGlvbiAoeW91IG5lZWQgdG8gZW5hYmxlIENPTkZJR19NVERfQ01ETElORV9QQVJUUykuCisgKi8KK3ZvaWQgcGh5c21hcF9zZXRfcGFydGl0aW9ucyhzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFydHMsIGludCBudW1fcGFydHMpOworCisjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfTVREX1BBUlRJVElPTlMpICovCisjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfTVREKSAqLworCisjZW5kaWYgLyogX19MSU5VWF9NVERfUEhZU01BUF9fICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRkL3BtYzU1MS5oIGIvaW5jbHVkZS9saW51eC9tdGQvcG1jNTUxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTEzZTMwOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbXRkL3BtYzU1MS5oCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiAkSWQ6IHBtYzU1MS5oLHYgMS41IDIwMDMvMDEvMjQgMTY6NDk6NTMgZHdtdzIgRXhwICQKKyAqCisgKiBQTUM1NTEgUENJIE1lenphbmluZSBSYW0gRGV2aWNlCisgKgorICogQXV0aG9yOgorICogICAgICAgTWFyayBGZXJyZWxsCisgKiAgICAgICBDb3B5cmlnaHQgMTk5OSwyMDAwIE5vcnRlbCBOZXR3b3JrcworICoKKyAqIExpY2Vuc2U6IAorICoJIEFzIHBhcnQgb2YgdGhpcyBkcml2ZXIgd2FzIGRlcnJpdmVkIGZyb20gdGhlIHNscmFtLmMgZHJpdmVyIGl0IGZhbGxzCisgKgkgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSwgd2hpY2ggaXMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdjIKKyAqLworCisjaWZuZGVmIF9fTVREX1BNQzU1MV9IX18KKyNkZWZpbmUgX19NVERfUE1DNTUxX0hfXworCisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorCisjZGVmaW5lIFBNQzU1MV9WRVJTSU9OICIkSWQ6IHBtYzU1MS5oLHYgMS41IDIwMDMvMDEvMjQgMTY6NDk6NTMgZHdtdzIgRXhwICRcbiJcCisgICAgICAgIlJhbWl4IFBNQzU1MSBQQ0kgTWV6emFuaW5lIFJhbSBEcml2ZXIuIChDKSAxOTk5LDIwMDAgTm9ydGVsIE5ldHdvcmtzLlxuIgorCisvKgorICogT3VyIHBlcnNvbmFsIGFuZCBwcml2YXRlIGluZm9ybWF0aW9uCisgKi8KK3N0cnVjdCBteXByaXYgeworICAgICAgICBzdHJ1Y3QgcGNpX2RldiAqZGV2OworICAgICAgICB1X2NoYXIgKnN0YXJ0OworICAgICAgICB1MzIgICAgYmFzZV9tYXAwOworICAgICAgICB1MzIgICAgY3Vycl9tYXAwOworICAgICAgICB1MzIgICAgYXNpemU7CisJc3RydWN0IG10ZF9pbmZvICpuZXh0cG1jNTUxOworfTsgICAgICAgICAgICAgICAgICAgICAgIAorCisvKgorICogRnVuY3Rpb24gUHJvdG90eXBlcworICovCitzdGF0aWMgaW50IHBtYzU1MV9lcmFzZShzdHJ1Y3QgbXRkX2luZm8gKiwgc3RydWN0IGVyYXNlX2luZm8gKik7CitzdGF0aWMgdm9pZCBwbWM1NTFfdW5wb2ludChzdHJ1Y3QgbXRkX2luZm8gKiwgdV9jaGFyICosIGxvZmZfdCwgc2l6ZV90KTsKK3N0YXRpYyBpbnQgcG1jNTUxX3BvaW50IChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4sIHNpemVfdCAqcmV0bGVuLCB1X2NoYXIgKiptdGRidWYpOworc3RhdGljIGludCBwbWM1NTFfcmVhZChzdHJ1Y3QgbXRkX2luZm8gKiwgbG9mZl90LCBzaXplX3QsIHNpemVfdCAqLCB1X2NoYXIgKik7CitzdGF0aWMgaW50IHBtYzU1MV93cml0ZShzdHJ1Y3QgbXRkX2luZm8gKiwgbG9mZl90LCBzaXplX3QsIHNpemVfdCAqLCBjb25zdCB1X2NoYXIgKik7ICAgICAgICAKKworCisvKgorICogRGVmaW5lIHRoZSBQQ0kgSUQncyBpZiB0aGUga2VybmVsIGRvZXNuJ3QgZGVmaW5lIHRoZW0gZm9yIHVzCisgKi8KKyNpZm5kZWYgUENJX1ZFTkRPUl9JRF9WM19TRU1JCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfVjNfU0VNSSAgICAgICAgICAgICAweDExYjAKKyNlbmRpZgorCisjaWZuZGVmIFBDSV9ERVZJQ0VfSURfVjNfU0VNSV9WMzcwUERDCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVjNfU0VNSV9WMzcwUERDICAgICAweDAyMDAgIAorI2VuZGlmCisKKworI2RlZmluZSBQTUM1NTFfUENJX01FTV9NQVAwCTB4NTAKKyNkZWZpbmUgUE1DNTUxX1BDSV9NRU1fTUFQMQkweDU0CisjZGVmaW5lIFBNQzU1MV9QQ0lfTUVNX01BUF9NQVBfQUREUl9NQVNLCTB4M2ZmMDAwMDAKKyNkZWZpbmUgUE1DNTUxX1BDSV9NRU1fTUFQX0FQRVJUVVJFX01BU0sJMHgwMDAwMDBmMAorI2RlZmluZSBQTUM1NTFfUENJX01FTV9NQVBfUkVHX0VOCQkweDAwMDAwMDAyCisjZGVmaW5lIFBNQzU1MV9QQ0lfTUVNX01BUF9FTkFCTEUJCTB4MDAwMDAwMDEKKworI2RlZmluZSBQTUM1NTFfU0RSQU1fTUEJCTB4NjAKKyNkZWZpbmUgUE1DNTUxX1NEUkFNX0NNRAkweDYyCisjZGVmaW5lIFBNQzU1MV9EUkFNX0NGRwkJMHg2NAorI2RlZmluZSBQTUM1NTFfU1lTX0NUUkxfUkVHCTB4NzgKKworI2RlZmluZSBQTUM1NTFfRFJBTV9CTEswCTB4NjgKKyNkZWZpbmUgUE1DNTUxX0RSQU1fQkxLMQkweDZjCisjZGVmaW5lIFBNQzU1MV9EUkFNX0JMSzIJMHg3MAorI2RlZmluZSBQTUM1NTFfRFJBTV9CTEszCTB4NzQKKyNkZWZpbmUgUE1DNTUxX0RSQU1fQkxLX0dFVF9TSVpFKHgpICg1MjQyODg8PCgoeD4+NCkmMHgwZikpCisjZGVmaW5lIFBNQzU1MV9EUkFNX0JMS19TRVRfQ09MX01VWCh4LHYpICgoKHgpICYgfjB4MDAwMDcwMDApIHwgKCgodikgJiAweDcpIDw8IDEyKSkKKyNkZWZpbmUgUE1DNTUxX0RSQU1fQkxLX1NFVF9ST1dfTVVYKHgsdikgKCgoeCkgJiB+MHgwMDAwMGYwMCkgfCAoKCh2KSAmIDB4ZikgPDwgOCkpCisKKworI2VuZGlmIC8qIF9fTVREX1BNQzU1MV9IX18gKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdGQveGlwLmggYi9pbmNsdWRlL2xpbnV4L210ZC94aXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzA3MTEyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9tdGQveGlwLmgKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiBNVEQgcHJpbWl0aXZlcyBmb3IgWElQIHN1cHBvcnQKKyAqCisgKiBBdXRob3I6CU5pY29sYXMgUGl0cmUKKyAqIENyZWF0ZWQ6CU5vdiAyLCAyMDA0CisgKiBDb3B5cmlnaHQ6CShDKSAyMDA0IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqCisgKiBUaGlzIFhJUCBzdXBwb3J0IGZvciBNVEQgaGFzIGJlZW4gbG9vc2VseSBpbnNwaXJlZAorICogYnkgYW4gZWFybGllciBwYXRjaCBhdXRob3JlZCBieSBEYXZpZCBXb29kaG91c2UuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAkSWQ6IHhpcC5oLHYgMS4yIDIwMDQvMTIvMDEgMTU6NDk6MTAgbmljbyBFeHAgJAorICovCisKKyNpZm5kZWYgX19MSU5VWF9NVERfWElQX0hfXworI2RlZmluZSBfX0xJTlVYX01URF9YSVBfSF9fCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2lmZGVmIENPTkZJR19NVERfWElQCisKKy8qCisgKiBGdW5jdGlvbiB0aGF0IGFyZSBtb2RpZnlpbmcgdGhlIGZsYXNoIHN0YXRlIGF3YXkgZnJvbSBhcnJheSBtb2RlIG11c3QKKyAqIG9idmlvdXNseSBub3QgYmUgcnVubmluZyBmcm9tIGZsYXNoLiAgVGhlIF9feGlwcmFtIGlzIHRoZXJlZm9yZSBtYXJraW5nCisgKiB0aG9zZSBmdW5jdGlvbnMgc28gdGhleSBnZXQgcmVsb2NhdGVkIHRvIHJhbS4KKyAqLworI2RlZmluZSBfX3hpcHJhbSBfX2F0dHJpYnV0ZV9fICgoX19zZWN0aW9uX18gKCIuZGF0YSIpKSkKKworLyoKKyAqIFdlIHJlYWxseSBkb24ndCB3YW50IGdjYyB0byBndWVzcyBhbnl0aGluZy4KKyAqIFdlIGFic29sdXRlbHkgX25lZWRfIHByb3BlciBpbmxpbmluZy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisKKy8qCisgKiBFYWNoIGFyY2hpdGVjdHVyZSBoYXMgdG8gcHJvdmlkZSB0aGUgZm9sbG93aW5nIG1hY3Jvcy4gIFRoZXkgbXVzdCBhY2Nlc3MKKyAqIHRoZSBoYXJkd2FyZSBkaXJlY3RseSBhbmQgbm90IHJlbHkgb24gYW55IG90aGVyIChYSVApIGZ1bmN0aW9ucyBzaW5jZSB0aGV5CisgKiB3b24ndCBiZSBhdmFpbGFibGUgd2hlbiB1c2VkIChmbGFzaCBub3QgaW4gYXJyYXkgbW9kZSkuCisgKgorICogeGlwX2lycXBlbmRpbmcoKQorICoKKyAqIAlyZXR1cm4gbm9uIHplcm8gd2hlbiBhbnkgaGFyZHdhcmUgaW50ZXJydXB0IGlzIHBlbmRpbmcuCisgKgorICogeGlwX2N1cnJ0aW1lKCkKKyAqCisgKiAJcmV0dXJuIGEgcGxhdGZvcm0gc3BlY2lmaWMgdGltZSByZWZlcmVuY2UgdG8gYmUgdXNlZCB3aXRoCisgKiAJeGlwX2VsYXBzZWRfc2luY2UoKS4KKyAqCisgKiB4aXBfZWxhcHNlZF9zaW5jZSh4KQorICoKKyAqIAlyZXR1cm4gaW4gdXNlY3MgdGhlIGVsYXBzZWQgdGltZWJldHdlZW4gbm93IGFuZCB0aGUgcmVmZXJlbmNlIHggYXMKKyAqIAlyZXR1cm5lZCBieSB4aXBfY3VycnRpbWUoKS4KKyAqCisgKiAJbm90ZSAxOiBjb252ZXJ0aW9uIHRvIHVzZWMgY2FuIGJlIGFwcHJveGltYXRlZCwgYXMgbG9uZyBhcyB0aGUKKyAqIAkJcmV0dXJuZWQgdmFsdWUgaXMgPD0gdGhlIHJlYWwgZWxhcHNlZCB0aW1lLgorICogCW5vdGUgMjogdGhpcyBzaG91bGQgYmUgYWJsZSB0byBjb3BlIHdpdGggYSBmZXcgc2Vjb25kcyB3aXRob3V0CisgKiAJCW92ZXJmbG93aW5nLgorICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX1NBMTEwMCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9QWEEpCisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpZmRlZiBDT05GSUdfQVJDSF9QWEEKKyNpbmNsdWRlIDxhc20vYXJjaC9weGEtcmVncy5oPgorI2VuZGlmCisKKyNkZWZpbmUgeGlwX2lycXBlbmRpbmcoKQkoSUNJUCAmIElDTVIpCisKKy8qIHdlIHNhbXBsZSBPU0NSIGFuZCBjb252ZXJ0IGRlc2lyZWQgZGVsdGEgdG8gdXNlYyAoMS80IH49IDEwMDAwMDAvMzY4NjQwMCkgKi8KKyNkZWZpbmUgeGlwX2N1cnJ0aW1lKCkJCShPU0NSKQorI2RlZmluZSB4aXBfZWxhcHNlZF9zaW5jZSh4KQkoc2lnbmVkKSgoT1NDUiAtICh4KSkgLyA0KQorCisjZWxzZQorCisjd2FybmluZyAibWlzc2luZyBJUlEgYW5kIHRpbWVyIHByaW1pdGl2ZXMgZm9yIFhJUCBNVEQgc3VwcG9ydCIKKyN3YXJuaW5nICJzb21lIG9mIHRoZSBYSVAgTVREIHN1cHBvcnQgY29kZSB3aWxsIGJlIGRpc2FibGVkIgorI3dhcm5pbmcgInlvdXIgc3lzdGVtIHdpbGwgdGhlcmVmb3JlIGJlIHVucmVzcG9uc2l2ZSB3aGVuIHdyaXRpbmcgb3IgZXJhc2luZyBmbGFzaCIKKworI2RlZmluZSB4aXBfaXJxcGVuZGluZygpCSgwKQorI2RlZmluZSB4aXBfY3VycnRpbWUoKQkJKDApCisjZGVmaW5lIHhpcF9lbGFwc2VkX3NpbmNlKHgpCSgwKQorCisjZW5kaWYKKworLyoKKyAqIHhpcF9jcHVfaWRsZSgpIGlzIHVzZWQgd2hlbiB3YWl0aW5nIGZvciBhIGRlbGF5IGVxdWFsIG9yIGxhcmdlciB0aGFuCisgKiB0aGUgc3lzdGVtIHRpbWVyIHRpY2sgcGVyaW9kLiAgVGhpcyBzaG91bGQgcHV0IHRoZSBDUFUgaW50byBpZGxlIG1vZGUKKyAqIHRvIHNhdmUgcG93ZXIgYW5kIHRvIGJlIHdva2VuIHVwIG9ubHkgd2hlbiBzb21lIGludGVycnVwdHMgYXJlIHBlbmRpbmcuCisgKiBBcyBhYm92ZSwgdGhpcyBzaG91bGQgbm90IHJlbHkgdXBvbiBzdGFuZGFyZCBrZXJuZWwgY29kZS4KKyAqLworCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1hTQ0FMRSkKKyNkZWZpbmUgeGlwX2NwdV9pZGxlKCkgIGFzbSB2b2xhdGlsZSAoIm1jciBwMTQsIDAsICUwLCBjNywgYzAsIDAiIDo6ICJyIiAoMSkpCisjZWxzZQorI2RlZmluZSB4aXBfY3B1X2lkbGUoKSAgZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKKyNlbHNlCisKKyNkZWZpbmUgX194aXByYW0KKworI2VuZGlmIC8qIENPTkZJR19NVERfWElQICovCisKKyNlbmRpZiAvKiBfX0xJTlVYX01URF9YSVBfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210aW8uaCBiL2luY2x1ZGUvbGludXgvbXRpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjNjYxNTEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L210aW8uaApAQCAtMCwwICsxLDM1MSBAQAorLyogCisgKiBsaW51eC9tdGlvLmggaGVhZGVyIGZpbGUgZm9yIExpbnV4LiBXcml0dGVuIGJ5IEguIEJlcmdtYW4KKyAqCisgKiBNb2RpZmllZCBmb3Igc3BlY2lhbCBpb2N0bHMgcHJvdmlkZWQgYnkgemZ0YXBlIGluIFNlcHRlbWJlciAxOTk3CisgKiBieSBDLi1KLiBIZWluZS4KKyAqLworCisjaWZuZGVmIF9MSU5VWF9NVElPX0gKKyNkZWZpbmUgX0xJTlVYX01USU9fSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L3FpYzExNy5oPgorCisvKgorICogU3RydWN0dXJlcyBhbmQgZGVmaW5pdGlvbnMgZm9yIG1hZyB0YXBlIGlvIGNvbnRyb2wgY29tbWFuZHMKKyAqLworCisvKiBzdHJ1Y3R1cmUgZm9yIE1USU9DVE9QIC0gbWFnIHRhcGUgb3AgY29tbWFuZCAqLworc3RydWN0CW10b3AgeworCXNob3J0CW10X29wOwkJLyogb3BlcmF0aW9ucyBkZWZpbmVkIGJlbG93ICovCisJaW50CW10X2NvdW50OwkvKiBob3cgbWFueSBvZiB0aGVtICovCit9OworCisvKiBNYWduZXRpYyBUYXBlIG9wZXJhdGlvbnMgW05vdCBhbGwgb3BlcmF0aW9ucyBzdXBwb3J0ZWQgYnkgYWxsIGRyaXZlcnNdOiAqLworI2RlZmluZSBNVFJFU0VUIDAJLyogK3Jlc2V0IGRyaXZlIGluIGNhc2Ugb2YgcHJvYmxlbXMgKi8KKyNkZWZpbmUgTVRGU0YJMQkvKiBmb3J3YXJkIHNwYWNlIG92ZXIgRmlsZU1hcmssCisJCQkgKiBwb3NpdGlvbiBhdCBmaXJzdCByZWNvcmQgb2YgbmV4dCBmaWxlIAorCQkJICovCisjZGVmaW5lIE1UQlNGCTIJLyogYmFja3dhcmQgc3BhY2UgRmlsZU1hcmsgKHBvc2l0aW9uIGJlZm9yZSBGTSkgKi8KKyNkZWZpbmUgTVRGU1IJMwkvKiBmb3J3YXJkIHNwYWNlIHJlY29yZCAqLworI2RlZmluZSBNVEJTUgk0CS8qIGJhY2t3YXJkIHNwYWNlIHJlY29yZCAqLworI2RlZmluZSBNVFdFT0YJNQkvKiB3cml0ZSBhbiBlbmQtb2YtZmlsZSByZWNvcmQgKG1hcmspICovCisjZGVmaW5lIE1UUkVXCTYJLyogcmV3aW5kICovCisjZGVmaW5lIE1UT0ZGTAk3CS8qIHJld2luZCBhbmQgcHV0IHRoZSBkcml2ZSBvZmZsaW5lIChlamVjdD8pICovCisjZGVmaW5lIE1UTk9QCTgJLyogbm8gb3AsIHNldCBzdGF0dXMgb25seSAocmVhZCB3aXRoIE1USU9DR0VUKSAqLworI2RlZmluZSBNVFJFVEVOIDkJLyogcmV0ZW5zaW9uIHRhcGUgKi8KKyNkZWZpbmUgTVRCU0ZNCTEwCS8qICtiYWNrd2FyZCBzcGFjZSBGaWxlTWFyaywgcG9zaXRpb24gYXQgRk0gKi8KKyNkZWZpbmUgTVRGU0ZNICAxMQkvKiArZm9yd2FyZCBzcGFjZSBGaWxlTWFyaywgcG9zaXRpb24gYXQgRk0gKi8KKyNkZWZpbmUgTVRFT00JMTIJLyogZ290byBlbmQgb2YgcmVjb3JkZWQgbWVkaWEgKGZvciBhcHBlbmRpbmcgZmlsZXMpLgorCQkJICogTVRFT00gcG9zaXRpb25zIGFmdGVyIHRoZSBsYXN0IEZNLCByZWFkeSBmb3IKKwkJCSAqIGFwcGVuZGluZyBhbm90aGVyIGZpbGUuCisJCQkgKi8KKyNkZWZpbmUgTVRFUkFTRSAxMwkvKiBlcmFzZSB0YXBlIC0tIGJlIGNhcmVmdWwhICovCisKKyNkZWZpbmUgTVRSQVMxICAxNAkvKiBydW4gc2VsZiB0ZXN0IDEgKG5vbmRlc3RydWN0aXZlKSAqLworI2RlZmluZSBNVFJBUzIJMTUJLyogcnVuIHNlbGYgdGVzdCAyIChkZXN0cnVjdGl2ZSkgKi8KKyNkZWZpbmUgTVRSQVMzICAxNgkvKiByZXNlcnZlZCBmb3Igc2VsZiB0ZXN0IDMgKi8KKworI2RlZmluZSBNVFNFVEJMSyAyMAkvKiBzZXQgYmxvY2sgbGVuZ3RoIChTQ1NJKSAqLworI2RlZmluZSBNVFNFVERFTlNJVFkgMjEJLyogc2V0IHRhcGUgZGVuc2l0eSAoU0NTSSkgKi8KKyNkZWZpbmUgTVRTRUVLCTIyCS8qIHNlZWsgdG8gYmxvY2sgKFRhbmRiZXJnLCBldGMuKSAqLworI2RlZmluZSBNVFRFTEwJMjMJLyogdGVsbCBibG9jayAoVGFuZGJlcmcsIGV0Yy4pICovCisjZGVmaW5lIE1UU0VURFJWQlVGRkVSIDI0IC8qIHNldCB0aGUgZHJpdmUgYnVmZmVyaW5nIGFjY29yZGluZyB0byBTQ1NJLTIgKi8KKwkJCS8qIG9yZGluYXJ5IGJ1ZmZlcmVkIG9wZXJhdGlvbiB3aXRoIGNvZGUgMSAqLworI2RlZmluZSBNVEZTUwkyNQkvKiBzcGFjZSBmb3J3YXJkIG92ZXIgc2V0bWFya3MgKi8KKyNkZWZpbmUgTVRCU1MJMjYJLyogc3BhY2UgYmFja3dhcmQgb3ZlciBzZXRtYXJrcyAqLworI2RlZmluZSBNVFdTTQkyNwkvKiB3cml0ZSBzZXRtYXJrcyAqLworCisjZGVmaW5lIE1UTE9DSyAgMjgJLyogbG9jayB0aGUgZHJpdmUgZG9vciAqLworI2RlZmluZSBNVFVOTE9DSyAyOQkvKiB1bmxvY2sgdGhlIGRyaXZlIGRvb3IgKi8KKyNkZWZpbmUgTVRMT0FEICAzMAkvKiBleGVjdXRlIHRoZSBTQ1NJIGxvYWQgY29tbWFuZCAqLworI2RlZmluZSBNVFVOTE9BRCAzMQkvKiBleGVjdXRlIHRoZSBTQ1NJIHVubG9hZCBjb21tYW5kICovCisjZGVmaW5lIE1UQ09NUFJFU1NJT04gMzIvKiBjb250cm9sIGNvbXByZXNzaW9uIHdpdGggU0NTSSBtb2RlIHBhZ2UgMTUgKi8KKyNkZWZpbmUgTVRTRVRQQVJUIDMzCS8qIENoYW5nZSB0aGUgYWN0aXZlIHRhcGUgcGFydGl0aW9uICovCisjZGVmaW5lIE1UTUtQQVJUICAzNAkvKiBGb3JtYXQgdGhlIHRhcGUgd2l0aCBvbmUgb3IgdHdvIHBhcnRpdGlvbnMgKi8KKworLyogc3RydWN0dXJlIGZvciBNVElPQ0dFVCAtIG1hZyB0YXBlIGdldCBzdGF0dXMgY29tbWFuZCAqLworCitzdHJ1Y3QJbXRnZXQgeworCWxvbmcJbXRfdHlwZTsJLyogdHlwZSBvZiBtYWd0YXBlIGRldmljZSAqLworCWxvbmcJbXRfcmVzaWQ7CS8qIHJlc2lkdWFsIGNvdW50OiAobm90IHN1cmUpCisJCQkJICoJbnVtYmVyIG9mIGJ5dGVzIGlnbm9yZWQsIG9yCisJCQkJICoJbnVtYmVyIG9mIGZpbGVzIG5vdCBza2lwcGVkLCBvcgorCQkJCSAqCW51bWJlciBvZiByZWNvcmRzIG5vdCBza2lwcGVkLgorCQkJCSAqLworCS8qIHRoZSBmb2xsb3dpbmcgcmVnaXN0ZXJzIGFyZSBkZXZpY2UgZGVwZW5kZW50ICovCisJbG9uZwltdF9kc3JlZzsJLyogc3RhdHVzIHJlZ2lzdGVyICovCisJbG9uZwltdF9nc3RhdDsJLyogZ2VuZXJpYyAoZGV2aWNlIGluZGVwZW5kZW50KSBzdGF0dXMgKi8KKwlsb25nCW10X2VycmVnOwkvKiBlcnJvciByZWdpc3RlciAqLworCS8qIFRoZSBuZXh0IHR3byBmaWVsZHMgYXJlIG5vdCBhbHdheXMgdXNlZCAqLworCV9fa2VybmVsX2RhZGRyX3QgbXRfZmlsZW5vOwkvKiBudW1iZXIgb2YgY3VycmVudCBmaWxlIG9uIHRhcGUgKi8KKwlfX2tlcm5lbF9kYWRkcl90IG10X2Jsa25vOwkvKiBjdXJyZW50IGJsb2NrIG51bWJlciAqLworfTsKKworCisKKy8qCisgKiBDb25zdGFudHMgZm9yIG10X3R5cGUuIE5vdCBhbGwgb2YgdGhlc2UgYXJlIHN1cHBvcnRlZCwKKyAqIGFuZCB0aGVzZSBhcmUgbm90IGFsbCBvZiB0aGUgb25lcyB0aGF0IGFyZSBzdXBwb3J0ZWQuCisgKi8KKyNkZWZpbmUgTVRfSVNVTktOT1dOCQkweDAxCisjZGVmaW5lIE1UX0lTUUlDMDIJCTB4MDIJLyogR2VuZXJpYyBRSUMtMDIgdGFwZSBzdHJlYW1lciAqLworI2RlZmluZSBNVF9JU1dUNTE1MAkJMHgwMwkvKiBXYW5ndGVrIDUxNTBFUSwgUUlDLTE1MCwgUUlDLTAyICovCisjZGVmaW5lIE1UX0lTQVJDSElWRV81OTQ1TDIJMHgwNAkvKiBBcmNoaXZlIDU5NDVMLTIsIFFJQy0yNCwgUUlDLTAyPyAqLworI2RlZmluZSBNVF9JU0NNU0o1MDAJCTB4MDUJLyogQ01TIEp1bWJvIDUwMCAoUUlDLTAyPykgKi8KKyNkZWZpbmUgTVRfSVNUREMzNjEwCQkweDA2CS8qIFRhbmRiZXJnIDYzMTAsIFFJQy0yNCAqLworI2RlZmluZSBNVF9JU0FSQ0hJVkVfVlA2MEkJMHgwNwkvKiBBcmNoaXZlIFZQNjBpLCBRSUMtMDIgKi8KKyNkZWZpbmUgTVRfSVNBUkNISVZFXzIxNTBMCTB4MDgJLyogQXJjaGl2ZSBWaXBlciAyMTUwTCAqLworI2RlZmluZSBNVF9JU0FSQ0hJVkVfMjA2MEwJMHgwOQkvKiBBcmNoaXZlIFZpcGVyIDIwNjBMICovCisjZGVmaW5lIE1UX0lTQVJDSElWRVNDNDk5CTB4MEEJLyogQXJjaGl2ZSBTQy00OTkgUUlDLTM2IGNvbnRyb2xsZXIgKi8KKyNkZWZpbmUgTVRfSVNRSUMwMl9BTExfRkVBVFVSRVMJMHgwRgkvKiBHZW5lcmljIFFJQy0wMiB3aXRoIGFsbCBmZWF0dXJlcyAqLworI2RlZmluZSBNVF9JU1dUNTA5OUVFTjI0CTB4MTEJLyogV2FuZ3RlayA1MDk5LWVlbjI0LCA2ME1CLCBRSUMtMjQgKi8KKyNkZWZpbmUgTVRfSVNURUFDX01UMlNUCQkweDEyCS8qIFRlYWMgTVQtMlNUIDE1NW1iIGRyaXZlLCBUZWFjIERDLTEgY2FyZCAoV2FuZ3RlayB0eXBlKSAqLworI2RlZmluZSBNVF9JU0VWRVJFWF9GVDQwQQkweDMyCS8qIEV2ZXJleCBGVDQwQSAoUUlDLTQwKSAqLworI2RlZmluZSBNVF9JU0REUzEJCTB4NTEJLyogRERTIGRldmljZSB3aXRob3V0IHBhcnRpdGlvbnMgKi8KKyNkZWZpbmUgTVRfSVNERFMyCQkweDUyCS8qIEREUyBkZXZpY2Ugd2l0aCBwYXJ0aXRpb25zICovCisjZGVmaW5lIE1UX0lTT05TVFJFQU1fU0MgICAgICAgIDB4NjEgICAvKiBPblN0cmVhbSBTQ1NJIHRhcGUgZHJpdmVzIChTQy14MCkKKwkJCQkJICBhbmQgU0NTSSBlbXVsYXRlZCAoREksIERQLCBVU0IpICovCisjZGVmaW5lIE1UX0lTU0NTSTEJCTB4NzEJLyogR2VuZXJpYyBBTlNJIFNDU0ktMSB0YXBlIHVuaXQgKi8KKyNkZWZpbmUgTVRfSVNTQ1NJMgkJMHg3MgkvKiBHZW5lcmljIEFOU0kgU0NTSS0yIHRhcGUgdW5pdCAqLworCisvKiBRSUMtNDAvODAvMzAxMC8zMDIwIGZ0YXBlIHN1cHBvcnRlZCBkcml2ZXMuCisgKiAyMGJpdCB2ZW5kb3IgSUQgKyAweDgwMDAwMCAoc2VlIGZ0YXBlLXZlbmRvcnMuaCkKKyAqLworI2RlZmluZSBNVF9JU0ZUQVBFX1VOS05PV04JMHg4MDAwMDAgLyogb2Jzb2xldGUgKi8KKyNkZWZpbmUgTVRfSVNGVEFQRV9GTEFHCTB4ODAwMDAwCisKK3N0cnVjdCBtdF90YXBlX2luZm8geworCWxvbmcgdF90eXBlOwkJLyogZGV2aWNlIHR5cGUgaWQgKG10X3R5cGUpICovCisJY2hhciAqdF9uYW1lOwkJLyogZGVzY3JpcHRpdmUgbmFtZSAqLworfTsKKworI2RlZmluZSBNVF9UQVBFX0lORk8JeyBcCisJe01UX0lTVU5LTk9XTiwJCSJVbmtub3duIHR5cGUgb2YgdGFwZSBkZXZpY2UifSwgXAorCXtNVF9JU1FJQzAyLAkJIkdlbmVyaWMgUUlDLTAyIHRhcGUgc3RyZWFtZXIifSwgXAorCXtNVF9JU1dUNTE1MCwJCSJXYW5ndGVrIDUxNTAsIFFJQy0xNTAifSwgXAorCXtNVF9JU0FSQ0hJVkVfNTk0NUwyLAkiQXJjaGl2ZSA1OTQ1TC0yIn0sIFwKKwl7TVRfSVNDTVNKNTAwLAkJIkNNUyBKdW1ibyA1MDAifSwgXAorCXtNVF9JU1REQzM2MTAsCQkiVGFuZGJlcmcgVERDIDM2MTAsIFFJQy0yNCJ9LCBcCisJe01UX0lTQVJDSElWRV9WUDYwSSwJIkFyY2hpdmUgVlA2MGksIFFJQy0wMiJ9LCBcCisJe01UX0lTQVJDSElWRV8yMTUwTCwJIkFyY2hpdmUgVmlwZXIgMjE1MEwifSwgXAorCXtNVF9JU0FSQ0hJVkVfMjA2MEwsCSJBcmNoaXZlIFZpcGVyIDIwNjBMIn0sIFwKKwl7TVRfSVNBUkNISVZFU0M0OTksCSJBcmNoaXZlIFNDLTQ5OSBRSUMtMzYgY29udHJvbGxlciJ9LCBcCisJe01UX0lTUUlDMDJfQUxMX0ZFQVRVUkVTLCAiR2VuZXJpYyBRSUMtMDIgdGFwZSwgYWxsIGZlYXR1cmVzIn0sIFwKKwl7TVRfSVNXVDUwOTlFRU4yNCwJIldhbmd0ZWsgNTA5OS1lZW4yNCwgNjBNQiJ9LCBcCisJe01UX0lTVEVBQ19NVDJTVCwJIlRlYWMgTVQtMlNUIDE1NW1iIGRhdGEgY2Fzc2V0dGUgZHJpdmUifSwgXAorCXtNVF9JU0VWRVJFWF9GVDQwQSwJIkV2ZXJleCBGVDQwQSwgUUlDLTQwIn0sIFwKKwl7TVRfSVNPTlNUUkVBTV9TQywgICAgICAiT25TdHJlYW0gU0MtLCBESS0sIERQLSwgb3IgVVNCIHRhcGUgZHJpdmUifSwgXAorCXtNVF9JU1NDU0kxLAkJIkdlbmVyaWMgU0NTSS0xIHRhcGUifSwgXAorCXtNVF9JU1NDU0kyLAkJIkdlbmVyaWMgU0NTSS0yIHRhcGUifSwgXAorCXswLCBOVUxMfSBcCit9CisKKworLyogc3RydWN0dXJlIGZvciBNVElPQ1BPUyAtIG1hZyB0YXBlIGdldCBwb3NpdGlvbiBjb21tYW5kICovCisKK3N0cnVjdAltdHBvcyB7CisJbG9uZyAJbXRfYmxrbm87CS8qIGN1cnJlbnQgYmxvY2sgbnVtYmVyICovCit9OworCisKKy8qICBzdHJ1Y3R1cmUgZm9yIE1USU9DVk9MSU5GTywgcXVlcnkgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHZvbHVtZQorICogIGN1cnJlbnRseSBwb3NpdGlvbmVkIGF0ICh6ZnRhcGUpCisgKi8KK3N0cnVjdCBtdHZvbGluZm8geworCXVuc2lnbmVkIGludCBtdF92b2xubzsgICAvKiB2b2wtbnVtYmVyICovCisJdW5zaWduZWQgaW50IG10X2Jsa3N6OyAgIC8qIGJsb2Nrc2l6ZSB1c2VkIHdoZW4gcmVjb3JkaW5nICovCisJdW5zaWduZWQgaW50IG10X3Jhd3NpemU7IC8qIHJhdyB0YXBlIHNwYWNlIGNvbnN1bWVkLCBpbiBrYiAqLworCXVuc2lnbmVkIGludCBtdF9zaXplOyAgICAvKiB2b2x1bWUgc2l6ZSBhZnRlciBkZWNvbXByZXNzaW9uLCBpbiBrYiAqLworCXVuc2lnbmVkIGludCBtdF9jbXByOjE7ICAvKiB0aGlzIHZvbHVtZSBoYXMgYmVlbiBjb21wcmVzc2VkICovCit9OworCisvKiByYXcgYWNjZXNzIHRvIGEgZmxvcHB5IGRyaXZlLCByZWFkIGFuZCB3cml0ZSBhbiBhcmJpdHJhcnkgc2VnbWVudC4KKyAqIEZvciBmdGFwZS96ZnRhcGUgdG8gc3VwcG9ydCBmb3JtYXR0aW5nIGV0Yy4KKyAqLworI2RlZmluZSBNVF9GVF9SRF9TSU5HTEUgIDAKKyNkZWZpbmUgTVRfRlRfUkRfQUhFQUQgICAxCisjZGVmaW5lIE1UX0ZUX1dSX0FTWU5DICAgMCAvKiBzdGFydCB0YXBlIG9ubHkgd2hlbiBhbGwgYnVmZmVycyBhcmUgZnVsbCAgICAgKi8KKyNkZWZpbmUgTVRfRlRfV1JfTVVMVEkgICAxIC8qIHN0YXJ0IHRhcGUsIGNvbnRpbnVlIHVudGlsIGJ1ZmZlcnMgYXJlIGVtcHR5ICAqLworI2RlZmluZSBNVF9GVF9XUl9TSU5HTEUgIDIgLyogd3JpdGUgYSBzaW5nbGUgc2VnbWVudCBhbmQgc3RvcCBhZnRlcndhcmRzICAgICovCisjZGVmaW5lIE1UX0ZUX1dSX0RFTEVURSAgMyAvKiB3cml0ZSBkZWxldGVkIGRhdGEgbWFya3MsIG9uZSBzZWdtZW50IGF0IHRpbWUgKi8KKworc3RydWN0IG10ZnRzZWcKK3sgICAgICAgICAgICAKKwl1bnNpZ25lZCBtdF9zZWdubzsgICAvKiB0aGUgc2VnbWVudCB0byByZWFkIG9yIHdyaXRlICovCisJdW5zaWduZWQgbXRfbW9kZTsgICAgLyogbW9kZXMgZm9yIHJlYWQvd3JpdGUgKHN5bmMvYXN5bmMgZXRjLikgKi8KKwlpbnQgICAgICBtdF9yZXN1bHQ7ICAvKiByZXN1bHQgb2Ygci93IHJlcXVlc3QsIG5vdCBvZiB0aGUgaW9jdGwgKi8KKwl2b2lkICAgIF9fdXNlciAqbXRfZGF0YTsgICAgLyogVXNlciBzcGFjZSBidWZmZXI6IG11c3QgYmUgMjlrYiAqLworfTsKKworLyogZ2V0IHRhcGUgY2FwYWNpdHkgKGZ0YXBlL3pmdGFwZSkKKyAqLworc3RydWN0IG10dGFwZXNpemUgeworCXVuc2lnbmVkIGxvbmcgbXRfY2FwYWNpdHk7IC8qIGVudGlyZSwgdW5jb21wcmVzc2VkIGNhcGFjaXR5IAorCQkJCSAgICAqIG9mIGEgY2FydHJpZGdlCisJCQkJICAgICovCisJdW5zaWduZWQgbG9uZyBtdF91c2VkOyAgICAgLyogd2hhdCBoYXMgYmVlbiB1c2VkIHNvIGZhciwgcmF3IAorCQkJCSAgICAqIHVuY29tcHJlc3NlZCBhbW91bnQKKwkJCQkgICAgKi8KK307CisKKy8qICBwb3NzaWJsZSB2YWx1ZXMgb2YgdGhlIGZ0Zm10X29wIGZpZWxkCisgKi8KKyNkZWZpbmUgRlRGTVRfU0VUX1BBUk1TCQkxIC8qIHNldCBzb2Z0d2FyZSBwYXJtcyAqLworI2RlZmluZSBGVEZNVF9HRVRfUEFSTVMJCTIgLyogZ2V0IHNvZnR3YXJlIHBhcm1zICovCisjZGVmaW5lIEZURk1UX0ZPUk1BVF9UUkFDSwkzIC8qIHN0YXJ0IGZvcm1hdHRpbmcgYSB0YXBlIHRyYWNrICAgKi8KKyNkZWZpbmUgRlRGTVRfU1RBVFVTCQk0IC8qIG1vbml0b3IgZm9ybWF0dGluZyBhIHRhcGUgdHJhY2sgKi8KKyNkZWZpbmUgRlRGTVRfVkVSSUZZCQk1IC8qIHZlcmlmeSB0aGUgZ2l2ZW4gc2VnbWVudCAgICAgICAgKi8KKworc3RydWN0IGZ0Zm10cGFybXMgeworCXVuc2lnbmVkIGNoYXIgIGZ0X3FpY3N0ZDsgICAvKiBRSUMtNDAvUUlDLTgwL1FJQy0zMDEwL1FJQy0zMDIwICovCisJdW5zaWduZWQgY2hhciAgZnRfZm10Y29kZTsgIC8qIFJlZmVyIHRvIHRoZSBRSUMgc3BlY3MgKi8KKwl1bnNpZ25lZCBjaGFyICBmdF9maG07ICAgICAgLyogZmxvcHB5IGhlYWQgbWF4ICovCisJdW5zaWduZWQgY2hhciAgZnRfZnRtOyAgICAgIC8qIGZsb3BweSB0cmFjayBtYXggKi8KKwl1bnNpZ25lZCBzaG9ydCBmdF9zcHQ7ICAgICAgLyogc2VnbWVudHMgcGVyIHRyYWNrICovCisJdW5zaWduZWQgc2hvcnQgZnRfdHBjOyAgICAgIC8qIHRyYWNrcyBwZXIgY2FydHJpZGdlICovCit9OworCitzdHJ1Y3QgZnRmbXR0cmFjayB7CisJdW5zaWduZWQgaW50ICBmdF90cmFjazsgICAvKiB0cmFjayB0byBmb3JtYXQgKi8KKwl1bnNpZ25lZCBjaGFyIGZ0X2dhcDM7ICAgIC8qIHNpemUgb2YgZ2FwMywgZm9yIEZPUk1BVF9UUksgKi8KK307CisKK3N0cnVjdCBmdGZtdHN0YXR1cyB7CisJdW5zaWduZWQgaW50ICBmdF9zZWdtZW50OyAgLyogc2VnbWVudCBjdXJyZW50bHkgYmVpbmcgZm9ybWF0dGVkICovCit9OworCitzdHJ1Y3QgZnRmbXR2ZXJpZnkgeworCXVuc2lnbmVkIGludCAgZnRfc2VnbWVudDsgICAvKiBzZWdtZW50IHRvIHZlcmlmeSAqLworCXVuc2lnbmVkIGxvbmcgZnRfYnNtOyAgICAgICAvKiBic20gYXMgcmVzdWx0IG9mIFZFUklGWSBjbWQgKi8KK307CisKK3N0cnVjdCBtdGZ0Zm9ybWF0IHsKKwl1bnNpZ25lZCBpbnQgZm10X29wOyAgICAgIC8qIG9wZXJhdGlvbiB0byBwZXJmb3JtICovCisJdW5pb24gZm10X2FyZyB7CisJCXN0cnVjdCBmdGZtdHBhcm1zICBmbXRfcGFybXM7ICAvKiBmb3JtYXQgcGFyYW1ldGVycyAqLworCQlzdHJ1Y3QgZnRmbXR0cmFjayAgZm10X3RyYWNrOyAgLyogY3RybCB3aGlsZSBmb3JtYXR0aW5nICovCisJCXN0cnVjdCBmdGZtdHN0YXR1cyBmbXRfc3RhdHVzOworCQlzdHJ1Y3QgZnRmbXR2ZXJpZnkgZm10X3ZlcmlmeTsgLyogZm9yIHZlcmlmeWluZyAqLyAKKwl9IGZtdF9hcmc7Cit9OworCitzdHJ1Y3QgbXRmdGNtZCB7CisJdW5zaWduZWQgaW50IGZ0X3dhaXRfYmVmb3JlOyAvKiB0aW1lb3V0IHRvIHdhaXQgZm9yIGRyaXZlIHRvIGdldCByZWFkeSAKKwkJCQkgICAgICAqIGJlZm9yZSBjb21tYW5kIGlzIHNlbnQuIE1pbGxpc2Vjb25kcworCQkJCSAgICAgICovCisJcWljMTE3X2NtZF90IGZ0X2NtZDsgICAgICAgICAvKiBjb21tYW5kIHRvIHNlbmQgKi8KKwl1bnNpZ25lZCBjaGFyIGZ0X3Bhcm1fY250OyAgIC8qIHplcm86IG5vIHBhcm0gaXMgc2VudC4gKi8KKwl1bnNpZ25lZCBjaGFyIGZ0X3Bhcm1zWzNdOyAgIC8qIHBhcmFtZXRlcihzKSB0byBzZW5kIHRvCisJCQkJICAgICAgKiB0aGUgZHJpdmUuIFRoZSBwYXJtcyBhcmUgbmliYmxlcworCQkJCSAgICAgICogZHJpdmVyIHNlbmRzIGNtZCArIDIgc3RlcCBwdWxzZXMgKi8KKwl1bnNpZ25lZCBpbnQgZnRfcmVzdWx0X2JpdHM7IC8qIGlmIG5vbiB6ZXJvLCBudW1iZXIgb2YgYml0cworCQkJCSAgICAgICoJcmV0dXJuZWQgYnkgdGhlIHRhcGUgZHJpdmUKKwkJCQkgICAgICAqLworCXVuc2lnbmVkIGludCBmdF9yZXN1bHQ7ICAgICAgLyogdGhlIHJlc3VsdCByZXR1cm5lZCBieSB0aGUgdGFwZSBkcml2ZSovCisJdW5zaWduZWQgaW50IGZ0X3dhaXRfYWZ0ZXI7ICAvKiB0aW1lb3V0IHRvIHdhaXQgZm9yIGRyaXZlIHRvIGdldCByZWFkeQorCQkJCSAgICAgICogYWZ0ZXIgY29tbWFuZCBpcyBzZW50LiAwOiBkb24ndCB3YWl0ICovCisJaW50IGZ0X3N0YXR1czsJICAgICAgICAgICAgIC8qIHN0YXR1cyByZXR1cm5lZCBieSByZWFkeSB3YWl0CisJCQkJICAgICAgKiB1bmRlZmluZWQgaWYgdGltZW91dCB3YXMgMC4KKwkJCQkgICAgICAqLworCWludCBmdF9lcnJvcjsgICAgICAgICAgICAgICAgLyogZXJyb3IgY29kZSBpZiBlcnJvciBzdGF0dXMgd2FzIHNldCBieSAKKwkJCQkgICAgICAqIGNvbW1hbmQKKwkJCQkgICAgICAqLworfTsKKworLyogbWFnIHRhcGUgaW8gY29udHJvbCBjb21tYW5kcyAqLworI2RlZmluZQlNVElPQ1RPUAlfSU9XKCdtJywgMSwgc3RydWN0IG10b3ApCS8qIGRvIGEgbWFnIHRhcGUgb3AgKi8KKyNkZWZpbmUJTVRJT0NHRVQJX0lPUignbScsIDIsIHN0cnVjdCBtdGdldCkJLyogZ2V0IHRhcGUgc3RhdHVzICovCisjZGVmaW5lCU1USU9DUE9TCV9JT1IoJ20nLCAzLCBzdHJ1Y3QgbXRwb3MpCS8qIGdldCB0YXBlIHBvc2l0aW9uICovCisKKy8qIFRoZSBuZXh0IHR3byBhcmUgdXNlZCBieSB0aGUgUUlDLTAyIGRyaXZlciBmb3IgcnVudGltZSByZWNvbmZpZ3VyYXRpb24uCisgKiBTZWUgdHBxaWMwMi5oIGZvciBzdHJ1Y3QgbXRjb25maWdpbmZvLgorICovCisjZGVmaW5lCU1USU9DR0VUQ09ORklHCV9JT1IoJ20nLCA0LCBzdHJ1Y3QgbXRjb25maWdpbmZvKSAvKiBnZXQgdGFwZSBjb25maWcgKi8KKyNkZWZpbmUJTVRJT0NTRVRDT05GSUcJX0lPVygnbScsIDUsIHN0cnVjdCBtdGNvbmZpZ2luZm8pIC8qIHNldCB0YXBlIGNvbmZpZyAqLworCisvKiB0aGUgbmV4dCBzaXggYXJlIHVzZWQgYnkgdGhlIGZsb3BweSBmdGFwZSBkcml2ZXJzIGFuZCBpdHMgZnJvbnRlbmRzCisgKiBzb3JyeSwgYnV0IE1USU9DVE9QIGNvbW1hbmRzIGFyZSB3cml0ZSBvbmx5LgorICovCisjZGVmaW5lCU1USU9DUkRGVFNFRyAgICBfSU9XUignbScsIDYsIHN0cnVjdCBtdGZ0c2VnKSAgLyogcmVhZCBhIHNlZ21lbnQgKi8KKyNkZWZpbmUJTVRJT0NXUkZUU0VHICAgIF9JT1dSKCdtJywgNywgc3RydWN0IG10ZnRzZWcpICAgLyogd3JpdGUgYSBzZWdtZW50ICovCisjZGVmaW5lIE1USU9DVk9MSU5GTwlfSU9SKCdtJywgIDgsIHN0cnVjdCBtdHZvbGluZm8pIC8qIGluZm8gYWJvdXQgdm9sdW1lICovCisjZGVmaW5lIE1USU9DR0VUU0laRSAgICBfSU9SKCdtJywgIDksIHN0cnVjdCBtdHRhcGVzaXplKS8qIGdldCBjYXJ0cmlkZ2Ugc2l6ZSovCisjZGVmaW5lIE1USU9DRlRGT1JNQVQgICBfSU9XUignbScsIDEwLCBzdHJ1Y3QgbXRmdGZvcm1hdCkgLyogZm9ybWF0IGZ0YXBlICovCisjZGVmaW5lIE1USU9DRlRDTUQJX0lPV1IoJ20nLCAxMSwgc3RydWN0IG10ZnRjbWQpIC8qIHNlbmQgUUlDLTExNyBjbWQgKi8KKworLyogR2VuZXJpYyBNYWcgVGFwZSAoZGV2aWNlIGluZGVwZW5kZW50KSBzdGF0dXMgbWFjcm9zIGZvciBleGFtaW5pbmcKKyAqIG10X2dzdGF0IC0tIEhQLVVYIGNvbXBhdGlibGUuCisgKiBUaGVyZSBpcyByb29tIGZvciBtb3JlIGdlbmVyaWMgc3RhdHVzIGJpdHMgaGVyZSwgYnV0IEkgZG9uJ3QKKyAqIGtub3cgd2hpY2ggb2YgdGhlbSBhcmUgcmVzZXJ2ZWQuIEF0IGxlYXN0IHRocmVlIG9yIHNvIHNob3VsZAorICogYmUgYWRkZWQgdG8gbWFrZSB0aGlzIHJlYWxseSB1c2VmdWwuCisgKi8KKyNkZWZpbmUgR01UX0VPRih4KSAgICAgICAgICAgICAgKCh4KSAmIDB4ODAwMDAwMDApCisjZGVmaW5lIEdNVF9CT1QoeCkgICAgICAgICAgICAgICgoeCkgJiAweDQwMDAwMDAwKQorI2RlZmluZSBHTVRfRU9UKHgpICAgICAgICAgICAgICAoKHgpICYgMHgyMDAwMDAwMCkKKyNkZWZpbmUgR01UX1NNKHgpICAgICAgICAgICAgICAgKCh4KSAmIDB4MTAwMDAwMDApICAvKiBERFMgc2V0bWFyayAqLworI2RlZmluZSBHTVRfRU9EKHgpICAgICAgICAgICAgICAoKHgpICYgMHgwODAwMDAwMCkgIC8qIEREUyBFT0QgKi8KKyNkZWZpbmUgR01UX1dSX1BST1QoeCkgICAgICAgICAgKCh4KSAmIDB4MDQwMDAwMDApCisvKiAjZGVmaW5lIEdNVF8gPyAJCSgoeCkgJiAweDAyMDAwMDAwKSAqLworI2RlZmluZSBHTVRfT05MSU5FKHgpICAgICAgICAgICAoKHgpICYgMHgwMTAwMDAwMCkKKyNkZWZpbmUgR01UX0RfNjI1MCh4KSAgICAgICAgICAgKCh4KSAmIDB4MDA4MDAwMDApCisjZGVmaW5lIEdNVF9EXzE2MDAoeCkgICAgICAgICAgICgoeCkgJiAweDAwNDAwMDAwKQorI2RlZmluZSBHTVRfRF84MDAoeCkgICAgICAgICAgICAoKHgpICYgMHgwMDIwMDAwMCkKKy8qICNkZWZpbmUgR01UXyA/IAkJKCh4KSAmIDB4MDAxMDAwMDApICovCisvKiAjZGVmaW5lIEdNVF8gPyAJCSgoeCkgJiAweDAwMDgwMDAwKSAqLworI2RlZmluZSBHTVRfRFJfT1BFTih4KSAgICAgICAgICAoKHgpICYgMHgwMDA0MDAwMCkgIC8qIGRvb3Igb3BlbiAobm8gdGFwZSkgKi8KKy8qICNkZWZpbmUgR01UXyA/IAkJKCh4KSAmIDB4MDAwMjAwMDApICovCisjZGVmaW5lIEdNVF9JTV9SRVBfRU4oeCkgICAgICAgICgoeCkgJiAweDAwMDEwMDAwKSAgLyogaW1tZWRpYXRlIHJlcG9ydCBtb2RlICovCisjZGVmaW5lIEdNVF9DTE4oeCkgICAgICAgICAgICAgICgoeCkgJiAweDAwMDA4MDAwKSAgLyogY2xlYW5pbmcgcmVxdWVzdGVkICovCisvKiAxNSBnZW5lcmljIHN0YXR1cyBiaXRzIHVudXNlZCAqLworCisKKy8qIFNDU0ktdGFwZSBzcGVjaWZpYyBkZWZpbml0aW9ucyAqLworLyogQml0ZmllbGQgc2hpZnRzIGluIHRoZSBzdGF0dXMgICovCisjZGVmaW5lIE1UX1NUX0JMS1NJWkVfU0hJRlQJMAorI2RlZmluZSBNVF9TVF9CTEtTSVpFX01BU0sJMHhmZmZmZmYKKyNkZWZpbmUgTVRfU1RfREVOU0lUWV9TSElGVAkyNAorI2RlZmluZSBNVF9TVF9ERU5TSVRZX01BU0sJMHhmZjAwMDAwMAorCisjZGVmaW5lIE1UX1NUX1NPRlRFUlJfU0hJRlQJMAorI2RlZmluZSBNVF9TVF9TT0ZURVJSX01BU0sJMHhmZmZmCisKKy8qIEJpdGZpZWxkcyBmb3IgdGhlIE1UU0VURFJWQlVGRkVSIGlvY3RsICovCisjZGVmaW5lIE1UX1NUX09QVElPTlMJCTB4ZjAwMDAwMDAKKyNkZWZpbmUgTVRfU1RfQk9PTEVBTlMJCTB4MTAwMDAwMDAKKyNkZWZpbmUgTVRfU1RfU0VUQk9PTEVBTlMJMHgzMDAwMDAwMAorI2RlZmluZSBNVF9TVF9DTEVBUkJPT0xFQU5TCTB4NDAwMDAwMDAKKyNkZWZpbmUgTVRfU1RfV1JJVEVfVEhSRVNIT0xECTB4MjAwMDAwMDAKKyNkZWZpbmUgTVRfU1RfREVGX0JMS1NJWkUJMHg1MDAwMDAwMAorI2RlZmluZSBNVF9TVF9ERUZfT1BUSU9OUwkweDYwMDAwMDAwCisjZGVmaW5lIE1UX1NUX1RJTUVPVVRTCQkweDcwMDAwMDAwCisjZGVmaW5lIE1UX1NUX1NFVF9USU1FT1VUCShNVF9TVF9USU1FT1VUUyB8IDB4MDAwMDAwKQorI2RlZmluZSBNVF9TVF9TRVRfTE9OR19USU1FT1VUCShNVF9TVF9USU1FT1VUUyB8IDB4MTAwMDAwKQorI2RlZmluZSBNVF9TVF9TRVRfQ0xOCQkweDgwMDAwMDAwCisKKyNkZWZpbmUgTVRfU1RfQlVGRkVSX1dSSVRFUwkweDEKKyNkZWZpbmUgTVRfU1RfQVNZTkNfV1JJVEVTCTB4MgorI2RlZmluZSBNVF9TVF9SRUFEX0FIRUFECTB4NAorI2RlZmluZSBNVF9TVF9ERUJVR0dJTkcJCTB4OAorI2RlZmluZSBNVF9TVF9UV09fRk0JCTB4MTAKKyNkZWZpbmUgTVRfU1RfRkFTVF9NVEVPTQkweDIwCisjZGVmaW5lIE1UX1NUX0FVVE9fTE9DSwkJMHg0MAorI2RlZmluZSBNVF9TVF9ERUZfV1JJVEVTCTB4ODAKKyNkZWZpbmUgTVRfU1RfQ0FOX0JTUgkJMHgxMDAKKyNkZWZpbmUgTVRfU1RfTk9fQkxLTElNUwkweDIwMAorI2RlZmluZSBNVF9TVF9DQU5fUEFSVElUSU9OUyAgICAweDQwMAorI2RlZmluZSBNVF9TVF9TQ1NJMkxPR0lDQUwgICAgICAweDgwMAorI2RlZmluZSBNVF9TVF9TWVNWICAgICAgICAgICAgICAweDEwMDAKKyNkZWZpbmUgTVRfU1RfTk9XQUlUICAgICAgICAgICAgMHgyMDAwCisKKy8qIFRoZSBtb2RlIHBhcmFtZXRlcnMgdG8gYmUgY29udHJvbGxlZC4gUGFyYW1ldGVyIGNob3NlbiB3aXRoIGJpdHMgMjAtMjggKi8KKyNkZWZpbmUgTVRfU1RfQ0xFQVJfREVGQVVMVAkweGZmZmZmCisjZGVmaW5lIE1UX1NUX0RFRl9ERU5TSVRZCShNVF9TVF9ERUZfT1BUSU9OUyB8IDB4MTAwMDAwKQorI2RlZmluZSBNVF9TVF9ERUZfQ09NUFJFU1NJT04JKE1UX1NUX0RFRl9PUFRJT05TIHwgMHgyMDAwMDApCisjZGVmaW5lIE1UX1NUX0RFRl9EUlZCVUZGRVIJKE1UX1NUX0RFRl9PUFRJT05TIHwgMHgzMDAwMDApCisKKy8qIFRoZSBvZmZzZXQgZm9yIHRoZSBhcmd1bWVudHMgZm9yIHRoZSBzcGVjaWFsIEhQIGNoYW5nZXIgbG9hZCBjb21tYW5kLiAqLworI2RlZmluZSBNVF9TVF9IUExPQURFUl9PRkZTRVQgMTAwMDAKKworI2VuZGlmIC8qIF9MSU5VWF9NVElPX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXY2NDN4eC5oIGIvaW5jbHVkZS9saW51eC9tdjY0M3h4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc3M2VhNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbXY2NDN4eC5oCkBAIC0wLDAgKzEsMTMxMyBAQAorLyoKKyAqIG12NjQzeHguaCAtIE1WLTY0M1hYIEludGVybmFsIHJlZ2lzdGVycyBkZWZpbml0aW9uIGZpbGUuCisgKgorICogQ29weXJpZ2h0IDIwMDIgTW9tZW50dW0gQ29tcHV0ZXIsIEluYy4KKyAqIAlBdXRob3I6IE1hdHRoZXcgRGhhcm0gPG1kaGFybUBtb21lbmNvLmNvbT4KKyAqIENvcHlyaWdodCAyMDAyIEdBTElMRU8gVEVDSE5PTE9HWSwgTFRELiAKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisjaWZuZGVmIF9fQVNNX01WNjQzWFhfSAorI2RlZmluZSBfX0FTTV9NVjY0M1hYX0gKKworI2lmZGVmIF9fTUlQU19fCisjaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgorI2luY2x1ZGUgPGFzbS9tYXJ2ZWxsLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBQcm9jZXNzb3IgQWRkcmVzcyBTcGFjZSAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBERFIgU0RSQU0gQkFSIGFuZCBzaXplIHJlZ2lzdGVycyAqLworCisjZGVmaW5lIE1WNjQzNDBfQ1NfMF9CQVNFX0FERFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4CisjZGVmaW5lIE1WNjQzNDBfQ1NfMF9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwCisjZGVmaW5lIE1WNjQzNDBfQ1NfMV9CQVNFX0FERFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjA4CisjZGVmaW5lIE1WNjQzNDBfQ1NfMV9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjEwCisjZGVmaW5lIE1WNjQzNDBfQ1NfMl9CQVNFX0FERFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDE4CisjZGVmaW5lIE1WNjQzNDBfQ1NfMl9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwCisjZGVmaW5lIE1WNjQzNDBfQ1NfM19CQVNFX0FERFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE4CisjZGVmaW5lIE1WNjQzNDBfQ1NfM19TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjIwCisKKy8qIERldmljZXMgQkFSIGFuZCBzaXplIHJlZ2lzdGVycyAqLworCisjZGVmaW5lIE1WNjQzNDBfREVWX0NTMF9CQVNFX0FERFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDI4CisjZGVmaW5lIE1WNjQzNDBfREVWX0NTMF9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDMwCisjZGVmaW5lIE1WNjQzNDBfREVWX0NTMV9CQVNFX0FERFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjI4CisjZGVmaW5lIE1WNjQzNDBfREVWX0NTMV9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjMwCisjZGVmaW5lIE1WNjQzNDBfREVWX0NTMl9CQVNFX0FERFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjQ4CisjZGVmaW5lIE1WNjQzNDBfREVWX0NTMl9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjUwCisjZGVmaW5lIE1WNjQzNDBfREVWX0NTM19CQVNFX0FERFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDM4CisjZGVmaW5lIE1WNjQzNDBfREVWX0NTM19TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwCisjZGVmaW5lIE1WNjQzNDBfQk9PVENTX0JBU0VfQUREUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjM4CisjZGVmaW5lIE1WNjQzNDBfQk9PVENTX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjQwCisKKy8qIFBDSSAwIEJBUiBhbmQgc2l6ZSByZWdpc3RlcnMgKi8KKworI2RlZmluZSBNVjY0MzQwX1BDSV8wX0lPX0JBU0VfQUREUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0OAorI2RlZmluZSBNVjY0MzQwX1BDSV8wX0lPX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA1MAorI2RlZmluZSBNVjY0MzQwX1BDSV8wX01FTU9SWTBfQkFTRV9BRERSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA1OAorI2RlZmluZSBNVjY0MzQwX1BDSV8wX01FTU9SWTBfU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2MAorI2RlZmluZSBNVjY0MzQwX1BDSV8wX01FTU9SWTFfQkFTRV9BRERSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MAorI2RlZmluZSBNVjY0MzQwX1BDSV8wX01FTU9SWTFfU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4OAorI2RlZmluZSBNVjY0MzQwX1BDSV8wX01FTU9SWTJfQkFTRV9BRERSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI1OAorI2RlZmluZSBNVjY0MzQwX1BDSV8wX01FTU9SWTJfU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI2MAorI2RlZmluZSBNVjY0MzQwX1BDSV8wX01FTU9SWTNfQkFTRV9BRERSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI4MAorI2RlZmluZSBNVjY0MzQwX1BDSV8wX01FTU9SWTNfU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI4OAorCisvKiBQQ0kgMSBCQVIgYW5kIHNpemUgcmVnaXN0ZXJzICovCisjZGVmaW5lIE1WNjQzNDBfUENJXzFfSU9fQkFTRV9BRERSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDkwCisjZGVmaW5lIE1WNjQzNDBfUENJXzFfSU9fU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDk4CisjZGVmaW5lIE1WNjQzNDBfUENJXzFfTUVNT1JZMF9CQVNFX0FERFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MGEwCisjZGVmaW5lIE1WNjQzNDBfUENJXzFfTUVNT1JZMF9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MGE4CisjZGVmaW5lIE1WNjQzNDBfUENJXzFfTUVNT1JZMV9CQVNFX0FERFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MGIwCisjZGVmaW5lIE1WNjQzNDBfUENJXzFfTUVNT1JZMV9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MGI4CisjZGVmaW5lIE1WNjQzNDBfUENJXzFfTUVNT1JZMl9CQVNFX0FERFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MmEwCisjZGVmaW5lIE1WNjQzNDBfUENJXzFfTUVNT1JZMl9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MmE4CisjZGVmaW5lIE1WNjQzNDBfUENJXzFfTUVNT1JZM19CQVNFX0FERFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MmIwCisjZGVmaW5lIE1WNjQzNDBfUENJXzFfTUVNT1JZM19TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MmI4CisKKy8qIFNSQU0gYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIE1WNjQzNDBfSU5URUdSQVRFRF9TUkFNX0JBU0VfQUREUiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjY4CisKKy8qIGludGVybmFsIHJlZ2lzdGVycyBzcGFjZSBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgTVY2NDM0MF9JTlRFUk5BTF9TUEFDRV9CQVNFX0FERFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNjgKKworLyogRW5hYmxlcyB0aGUgQ1MgLCBERVZfQ1MgLCBQQ0kgMCBhbmQgUENJIDEgCisgICB3aW5kb3dzIGFib3ZlICovCisjZGVmaW5lIE1WNjQzNDBfQkFTRV9BRERSX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4Mjc4CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogUENJIHJlbWFwIHJlZ2lzdGVycyAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAgIC8qIFBDSSAwICovCisjZGVmaW5lIE1WNjQzNDBfUENJXzBfSU9fQUREUl9SRU1BUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MGYwCisjZGVmaW5lIE1WNjQzNDBfUENJXzBfTUVNT1JZMF9MT1dfQUREUl9SRU1BUCAgICAgICAgICAgICAgICAgICAgICAgIDB4MGY4CisjZGVmaW5lIE1WNjQzNDBfUENJXzBfTUVNT1JZMF9ISUdIX0FERFJfUkVNQVAgICAgICAgICAgICAgICAgICAgICAgIDB4MzIwCisjZGVmaW5lIE1WNjQzNDBfUENJXzBfTUVNT1JZMV9MT1dfQUREUl9SRU1BUCAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwCisjZGVmaW5lIE1WNjQzNDBfUENJXzBfTUVNT1JZMV9ISUdIX0FERFJfUkVNQVAgICAgICAgICAgICAgICAgICAgICAgIDB4MzI4CisjZGVmaW5lIE1WNjQzNDBfUENJXzBfTUVNT1JZMl9MT1dfQUREUl9SRU1BUCAgICAgICAgICAgICAgICAgICAgICAgIDB4MmY4CisjZGVmaW5lIE1WNjQzNDBfUENJXzBfTUVNT1JZMl9ISUdIX0FERFJfUkVNQVAgICAgICAgICAgICAgICAgICAgICAgIDB4MzMwCisjZGVmaW5lIE1WNjQzNDBfUENJXzBfTUVNT1JZM19MT1dfQUREUl9SRU1BUCAgICAgICAgICAgICAgICAgICAgICAgIDB4MzAwCisjZGVmaW5lIE1WNjQzNDBfUENJXzBfTUVNT1JZM19ISUdIX0FERFJfUkVNQVAgICAgICAgICAgICAgICAgICAgICAgIDB4MzM4CisgICAgICAvKiBQQ0kgMSAqLworI2RlZmluZSBNVjY0MzQwX1BDSV8xX0lPX0FERFJfUkVNQVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwOAorI2RlZmluZSBNVjY0MzQwX1BDSV8xX01FTU9SWTBfTE9XX0FERFJfUkVNQVAgICAgICAgICAgICAgICAgICAgICAgICAweDExMAorI2RlZmluZSBNVjY0MzQwX1BDSV8xX01FTU9SWTBfSElHSF9BRERSX1JFTUFQICAgICAgICAgICAgICAgICAgICAgICAweDM0MAorI2RlZmluZSBNVjY0MzQwX1BDSV8xX01FTU9SWTFfTE9XX0FERFJfUkVNQVAgICAgICAgICAgICAgICAgICAgICAgICAweDExOAorI2RlZmluZSBNVjY0MzQwX1BDSV8xX01FTU9SWTFfSElHSF9BRERSX1JFTUFQICAgICAgICAgICAgICAgICAgICAgICAweDM0OAorI2RlZmluZSBNVjY0MzQwX1BDSV8xX01FTU9SWTJfTE9XX0FERFJfUkVNQVAgICAgICAgICAgICAgICAgICAgICAgICAweDMxMAorI2RlZmluZSBNVjY0MzQwX1BDSV8xX01FTU9SWTJfSElHSF9BRERSX1JFTUFQICAgICAgICAgICAgICAgICAgICAgICAweDM1MAorI2RlZmluZSBNVjY0MzQwX1BDSV8xX01FTU9SWTNfTE9XX0FERFJfUkVNQVAgICAgICAgICAgICAgICAgICAgICAgICAweDMxOAorI2RlZmluZSBNVjY0MzQwX1BDSV8xX01FTU9SWTNfSElHSF9BRERSX1JFTUFQICAgICAgICAgICAgICAgICAgICAgICAweDM1OAorIAorI2RlZmluZSBNVjY0MzQwX0NQVV9QQ0lfMF9IRUFERVJTX1JFVEFSR0VUX0NPTlRST0wgICAgICAgICAgICAgICAgICAweDNiMAorI2RlZmluZSBNVjY0MzQwX0NQVV9QQ0lfMF9IRUFERVJTX1JFVEFSR0VUX0JBU0UgICAgICAgICAgICAgICAgICAgICAweDNiOAorI2RlZmluZSBNVjY0MzQwX0NQVV9QQ0lfMV9IRUFERVJTX1JFVEFSR0VUX0NPTlRST0wgICAgICAgICAgICAgICAgICAweDNjMAorI2RlZmluZSBNVjY0MzQwX0NQVV9QQ0lfMV9IRUFERVJTX1JFVEFSR0VUX0JBU0UgICAgICAgICAgICAgICAgICAgICAweDNjOAorI2RlZmluZSBNVjY0MzQwX0NQVV9HRV9IRUFERVJTX1JFVEFSR0VUX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAweDNkMAorI2RlZmluZSBNVjY0MzQwX0NQVV9HRV9IRUFERVJTX1JFVEFSR0VUX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAweDNkOAorI2RlZmluZSBNVjY0MzQwX0NQVV9JRE1BX0hFQURFUlNfUkVUQVJHRVRfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAweDNlMAorI2RlZmluZSBNVjY0MzQwX0NQVV9JRE1BX0hFQURFUlNfUkVUQVJHRVRfQkFTRSAgICAgICAgICAgICAgICAgICAgICAweDNlOAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgQ1BVIENvbnRyb2wgUmVnaXN0ZXJzICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgTVY2NDM0MF9DUFVfQ09ORklHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAKKyNkZWZpbmUgTVY2NDM0MF9DUFVfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMjAKKyNkZWZpbmUgTVY2NDM0MF9DUFVfTUFTVEVSX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNjAKKyNkZWZpbmUgTVY2NDM0MF9DUFVfQ1JPU1NfQkFSX0NPTlRST0xfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNTAKKyNkZWZpbmUgTVY2NDM0MF9DUFVfQ1JPU1NfQkFSX0NPTlRST0xfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNTgKKyNkZWZpbmUgTVY2NDM0MF9DUFVfQ1JPU1NfQkFSX1RJTUVPVVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNjgKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBTTVAgUmVnaXN0ZXJTICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIE1WNjQzNDBfU01QX1dIT19BTV9JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwCisjZGVmaW5lIE1WNjQzNDBfU01QX0NQVTBfRE9PUkJFTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE0CisjZGVmaW5lIE1WNjQzNDBfU01QX0NQVTBfRE9PUkJFTExfQ0xFQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFDCisjZGVmaW5lIE1WNjQzNDBfU01QX0NQVTFfRE9PUkJFTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjI0CisjZGVmaW5lIE1WNjQzNDBfU01QX0NQVTFfRE9PUkJFTExfQ0xFQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjJDCisjZGVmaW5lIE1WNjQzNDBfU01QX0NQVTBfRE9PUkJFTExfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjM0CisjZGVmaW5lIE1WNjQzNDBfU01QX0NQVTFfRE9PUkJFTExfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjNDCisjZGVmaW5lIE1WNjQzNDBfU01QX1NFTUFQSE9SMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjQ0CisjZGVmaW5lIE1WNjQzNDBfU01QX1NFTUFQSE9SMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjRjCisjZGVmaW5lIE1WNjQzNDBfU01QX1NFTUFQSE9SMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjU0CisjZGVmaW5lIE1WNjQzNDBfU01QX1NFTUFQSE9SMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjVjCisjZGVmaW5lIE1WNjQzNDBfU01QX1NFTUFQSE9SNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjY0CisjZGVmaW5lIE1WNjQzNDBfU01QX1NFTUFQSE9SNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjZjCisjZGVmaW5lIE1WNjQzNDBfU01QX1NFTUFQSE9SNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4Mjc0CisjZGVmaW5lIE1WNjQzNDBfU01QX1NFTUFQSE9SNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjdjCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogIENQVSBTeW5jIEJhcnJpZXIgUmVnaXN0ZXIgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBNVjY0MzQwX0NQVV8wX1NZTkNfQkFSUklFUl9UUklHR0VSICAgICAgICAgICAgICAgICAgICAgICAgICAweDBjMAorI2RlZmluZSBNVjY0MzQwX0NQVV8wX1NZTkNfQkFSUklFUl9WSVJUVUFMICAgICAgICAgICAgICAgICAgICAgICAgICAweDBjOAorI2RlZmluZSBNVjY0MzQwX0NQVV8xX1NZTkNfQkFSUklFUl9UUklHR0VSICAgICAgICAgICAgICAgICAgICAgICAgICAweDBkMAorI2RlZmluZSBNVjY0MzQwX0NQVV8xX1NZTkNfQkFSUklFUl9WSVJUVUFMICAgICAgICAgICAgICAgICAgICAgICAgICAweDBkOAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIENQVSBBY2Nlc3MgUHJvdGVjdCAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgTVY2NDM0MF9DUFVfUFJPVEVDVF9XSU5ET1dfMF9CQVNFX0FERFIgICAgICAgICAgICAgICAgICAgICAgMHgxODAKKyNkZWZpbmUgTVY2NDM0MF9DUFVfUFJPVEVDVF9XSU5ET1dfMF9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxODgKKyNkZWZpbmUgTVY2NDM0MF9DUFVfUFJPVEVDVF9XSU5ET1dfMV9CQVNFX0FERFIgICAgICAgICAgICAgICAgICAgICAgMHgxOTAKKyNkZWZpbmUgTVY2NDM0MF9DUFVfUFJPVEVDVF9XSU5ET1dfMV9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxOTgKKyNkZWZpbmUgTVY2NDM0MF9DUFVfUFJPVEVDVF9XSU5ET1dfMl9CQVNFX0FERFIgICAgICAgICAgICAgICAgICAgICAgMHgxYTAKKyNkZWZpbmUgTVY2NDM0MF9DUFVfUFJPVEVDVF9XSU5ET1dfMl9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxYTgKKyNkZWZpbmUgTVY2NDM0MF9DUFVfUFJPVEVDVF9XSU5ET1dfM19CQVNFX0FERFIgICAgICAgICAgICAgICAgICAgICAgMHgxYjAKKyNkZWZpbmUgTVY2NDM0MF9DUFVfUFJPVEVDVF9XSU5ET1dfM19TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxYjgKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgIENQVSBFcnJvciBSZXBvcnQgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgTVY2NDM0MF9DUFVfRVJST1JfQUREUl9MT1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzAKKyNkZWZpbmUgTVY2NDM0MF9DUFVfRVJST1JfQUREUl9ISUdIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzgKKyNkZWZpbmUgTVY2NDM0MF9DUFVfRVJST1JfREFUQV9MT1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMjgKKyNkZWZpbmUgTVY2NDM0MF9DUFVfRVJST1JfREFUQV9ISUdIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMzAKKyNkZWZpbmUgTVY2NDM0MF9DUFVfRVJST1JfUEFSSVRZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMzgKKyNkZWZpbmUgTVY2NDM0MF9DUFVfRVJST1JfQ0FVU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDAKKyNkZWZpbmUgTVY2NDM0MF9DUFVfRVJST1JfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDgKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgIENQVSBJbnRlcmZhY2UgRGVidWcgUmVnaXN0ZXJzIAkqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgTVY2NDM0MF9QVU5JVF9TTEFWRV9ERUJVR19MT1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzNjAKKyNkZWZpbmUgTVY2NDM0MF9QVU5JVF9TTEFWRV9ERUJVR19ISUdIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzNjgKKyNkZWZpbmUgTVY2NDM0MF9QVU5JVF9NQVNURVJfREVCVUdfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzNzAKKyNkZWZpbmUgTVY2NDM0MF9QVU5JVF9NQVNURVJfREVCVUdfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzNzgKKyNkZWZpbmUgTVY2NDM0MF9QVU5JVF9NTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzZTQKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgSW50ZWdyYXRlZCBTUkFNIFJlZ2lzdGVycyAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIE1WNjQzNDBfU1JBTV9DT05GSUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzgwCisjZGVmaW5lIE1WNjQzNDBfU1JBTV9URVNUX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBYM0Y0CisjZGVmaW5lIE1WNjQzNDBfU1JBTV9FUlJPUl9DQVVTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4Mzg4CisjZGVmaW5lIE1WNjQzNDBfU1JBTV9FUlJPUl9BRERSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzkwCisjZGVmaW5lIE1WNjQzNDBfU1JBTV9FUlJPUl9BRERSX0hJR0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBYM0Y4CisjZGVmaW5lIE1WNjQzNDBfU1JBTV9FUlJPUl9EQVRBX0xPVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4Mzk4CisjZGVmaW5lIE1WNjQzNDBfU1JBTV9FUlJPUl9EQVRBX0hJR0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4M2EwCisjZGVmaW5lIE1WNjQzNDBfU1JBTV9FUlJPUl9EQVRBX1BBUklUWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4M2E4CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogU0RSQU0gQ29uZmlndXJhdGlvbiAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBNVjY0MzQwX1NEUkFNX0NPTkZJRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0MDAKKyNkZWZpbmUgTVY2NDM0MF9EX1VOSVRfQ09OVFJPTF9MT1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDA0CisjZGVmaW5lIE1WNjQzNDBfRF9VTklUX0NPTlRST0xfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQyNAorI2RlZmluZSBNVjY0MzQwX1NEUkFNX1RJTUlOR19DT05UUk9MX0xPVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0MDgKKyNkZWZpbmUgTVY2NDM0MF9TRFJBTV9USU1JTkdfQ09OVFJPTF9ISUdIICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDBjCisjZGVmaW5lIE1WNjQzNDBfU0RSQU1fQUREUl9DT05UUk9MICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQxMAorI2RlZmluZSBNVjY0MzQwX1NEUkFNX09QRU5fUEFHRVNfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0MTQKKyNkZWZpbmUgTVY2NDM0MF9TRFJBTV9PUEVSQVRJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDE4CisjZGVmaW5lIE1WNjQzNDBfU0RSQU1fTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQxYworI2RlZmluZSBNVjY0MzQwX0VYVEVOREVEX0RSQU1fTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0MjAKKyNkZWZpbmUgTVY2NDM0MF9TRFJBTV9DUk9TU19CQVJfQ09OVFJPTF9MT1cgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDMwCisjZGVmaW5lIE1WNjQzNDBfU0RSQU1fQ1JPU1NfQkFSX0NPTlRST0xfSElHSCAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQzNAorI2RlZmluZSBNVjY0MzQwX1NEUkFNX0NST1NTX0JBUl9USU1FT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0MzgKKyNkZWZpbmUgTVY2NDM0MF9TRFJBTV9BRERSX0NUUkxfUEFEU19DQUxJQlJBVElPTiAgICAgICAgICAgICAgICAgICAgMHgxNGMwCisjZGVmaW5lIE1WNjQzNDBfU0RSQU1fREFUQV9QQURTX0NBTElCUkFUSU9OICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTRjNAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFNEUkFNIEVycm9yIFJlcG9ydCAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgTVY2NDM0MF9TRFJBTV9FUlJPUl9EQVRBX0xPVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDQ0CisjZGVmaW5lIE1WNjQzNDBfU0RSQU1fRVJST1JfREFUQV9ISUdIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQ0MAorI2RlZmluZSBNVjY0MzQwX1NEUkFNX0VSUk9SX0FERFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0NTAKKyNkZWZpbmUgTVY2NDM0MF9TRFJBTV9SRUNFSVZFRF9FQ0MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDQ4CisjZGVmaW5lIE1WNjQzNDBfU0RSQU1fQ0FMQ1VMQVRFRF9FQ0MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQ0YworI2RlZmluZSBNVjY0MzQwX1NEUkFNX0VDQ19DT05UUk9MICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0NTQKKyNkZWZpbmUgTVY2NDM0MF9TRFJBTV9FQ0NfRVJST1JfQ09VTlRFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDU4CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgQ29udHJvbGxlZCBEZWxheSBMaW5lIChDREwpIFJlZ2lzdGVycyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBNVjY0MzQwX0RGQ0RMX0NPTkZJRzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0ODAKKyNkZWZpbmUgTVY2NDM0MF9ERkNETF9DT05GSUcxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDg0CisjZGVmaW5lIE1WNjQzNDBfRExMX1dSSVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQ4OAorI2RlZmluZSBNVjY0MzQwX0RMTF9SRUFEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0OGMKKyNkZWZpbmUgTVY2NDM0MF9TUkFNX0FERFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDkwCisjZGVmaW5lIE1WNjQzNDBfU1JBTV9EQVRBMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQ5NAorI2RlZmluZSBNVjY0MzQwX1NSQU1fREFUQTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0OTgKKyNkZWZpbmUgTVY2NDM0MF9TUkFNX0RBVEEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDljCisjZGVmaW5lIE1WNjQzNDBfREZDTF9QUk9CRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTRhMAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICBEZWJ1ZyBSZWdpc3RlcnMgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgTVY2NDM0MF9EVU5JVF9ERUJVR19MT1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDYwCisjZGVmaW5lIE1WNjQzNDBfRFVOSVRfREVCVUdfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQ2NAorI2RlZmluZSBNVjY0MzQwX0RVTklUX01NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwWDFiNDAKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBEZXZpY2UgUGFyYW1ldGVycwkJCSovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBNVjY0MzQwX0RFVklDRV9CQU5LMF9QQVJBTUVURVJTCQkJCSAgICAweDQ1YworI2RlZmluZSBNVjY0MzQwX0RFVklDRV9CQU5LMV9QQVJBTUVURVJTCQkJCSAgICAweDQ2MAorI2RlZmluZSBNVjY0MzQwX0RFVklDRV9CQU5LMl9QQVJBTUVURVJTCQkJCSAgICAweDQ2NAorI2RlZmluZSBNVjY0MzQwX0RFVklDRV9CQU5LM19QQVJBTUVURVJTCQkJCSAgICAweDQ2OAorI2RlZmluZSBNVjY0MzQwX0RFVklDRV9CT09UX0JBTktfUEFSQU1FVEVSUwkJCSAgICAweDQ2YworI2RlZmluZSBNVjY0MzQwX0RFVklDRV9JTlRFUkZBQ0VfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDRjMAorI2RlZmluZSBNVjY0MzQwX0RFVklDRV9JTlRFUkZBQ0VfQ1JPU1NfQkFSX0NPTlRST0xfTE9XICAgICAgICAgICAgICAweDRjOAorI2RlZmluZSBNVjY0MzQwX0RFVklDRV9JTlRFUkZBQ0VfQ1JPU1NfQkFSX0NPTlRST0xfSElHSCAgICAgICAgICAgICAweDRjYworI2RlZmluZSBNVjY0MzQwX0RFVklDRV9JTlRFUkZBQ0VfQ1JPU1NfQkFSX1RJTUVPVVQgICAgICAgICAgICAgICAgICAweDRjNAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIERldmljZSBpbnRlcnJ1cHQgcmVnaXN0ZXJzCQkqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgTVY2NDM0MF9ERVZJQ0VfSU5URVJSVVBUX0NBVVNFCQkJCSAgICAweDRkMAorI2RlZmluZSBNVjY0MzQwX0RFVklDRV9JTlRFUlJVUFRfTUFTSwkJCQkgICAgMHg0ZDQKKyNkZWZpbmUgTVY2NDM0MF9ERVZJQ0VfRVJST1JfQUREUgkJCQkgICAgMHg0ZDgKKyNkZWZpbmUgTVY2NDM0MF9ERVZJQ0VfRVJST1JfREFUQSAgIAkJCQkgICAgMHg0ZGMKKyNkZWZpbmUgTVY2NDM0MF9ERVZJQ0VfRVJST1JfUEFSSVRZICAgICAJCQkgICAgMHg0ZTAKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBEZXZpY2UgZGVidWcgcmVnaXN0ZXJzICAgCQkqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgTVY2NDM0MF9ERVZJQ0VfREVCVUdfTE9XICAgICAJCQkJICAgIDB4NGU0CisjZGVmaW5lIE1WNjQzNDBfREVWSUNFX0RFQlVHX0hJR0ggICAgIAkJCQkgICAgMHg0ZTgKKyNkZWZpbmUgTVY2NDM0MF9SVU5JVF9NTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0ZjAKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBQQ0kgU2xhdmUgQWRkcmVzcyBEZWNvZGluZyByZWdpc3RlcnMgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIE1WNjQzNDBfUENJXzBfQ1NfMF9CQU5LX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4YzA4CisjZGVmaW5lIE1WNjQzNDBfUENJXzFfQ1NfMF9CQU5LX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4Yzg4CisjZGVmaW5lIE1WNjQzNDBfUENJXzBfQ1NfMV9CQU5LX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZDA4CisjZGVmaW5lIE1WNjQzNDBfUENJXzFfQ1NfMV9CQU5LX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZDg4CisjZGVmaW5lIE1WNjQzNDBfUENJXzBfQ1NfMl9CQU5LX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4YzBjCisjZGVmaW5lIE1WNjQzNDBfUENJXzFfQ1NfMl9CQU5LX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4YzhjCisjZGVmaW5lIE1WNjQzNDBfUENJXzBfQ1NfM19CQU5LX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZDBjCisjZGVmaW5lIE1WNjQzNDBfUENJXzFfQ1NfM19CQU5LX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZDhjCisjZGVmaW5lIE1WNjQzNDBfUENJXzBfREVWQ1NfMF9CQU5LX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4YzEwCisjZGVmaW5lIE1WNjQzNDBfUENJXzFfREVWQ1NfMF9CQU5LX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4YzkwCisjZGVmaW5lIE1WNjQzNDBfUENJXzBfREVWQ1NfMV9CQU5LX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZDEwCisjZGVmaW5lIE1WNjQzNDBfUENJXzFfREVWQ1NfMV9CQU5LX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZDkwCisjZGVmaW5lIE1WNjQzNDBfUENJXzBfREVWQ1NfMl9CQU5LX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZDE4CisjZGVmaW5lIE1WNjQzNDBfUENJXzFfREVWQ1NfMl9CQU5LX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZDk4CisjZGVmaW5lIE1WNjQzNDBfUENJXzBfREVWQ1NfM19CQU5LX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4YzE0CisjZGVmaW5lIE1WNjQzNDBfUENJXzFfREVWQ1NfM19CQU5LX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4Yzk0CisjZGVmaW5lIE1WNjQzNDBfUENJXzBfREVWQ1NfQk9PVF9CQU5LX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZDE0CisjZGVmaW5lIE1WNjQzNDBfUENJXzFfREVWQ1NfQk9PVF9CQU5LX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZDk0CisjZGVmaW5lIE1WNjQzNDBfUENJXzBfUDJQX01FTTBfQkFSX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZDFjCisjZGVmaW5lIE1WNjQzNDBfUENJXzFfUDJQX01FTTBfQkFSX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZDljCisjZGVmaW5lIE1WNjQzNDBfUENJXzBfUDJQX01FTTFfQkFSX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZDIwCisjZGVmaW5lIE1WNjQzNDBfUENJXzFfUDJQX01FTTFfQkFSX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZGEwCisjZGVmaW5lIE1WNjQzNDBfUENJXzBfUDJQX0lfT19CQVJfU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZDI0CisjZGVmaW5lIE1WNjQzNDBfUENJXzFfUDJQX0lfT19CQVJfU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZGE0CisjZGVmaW5lIE1WNjQzNDBfUENJXzBfQ1BVX0JBUl9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZDI4CisjZGVmaW5lIE1WNjQzNDBfUENJXzFfQ1BVX0JBUl9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZGE4CisjZGVmaW5lIE1WNjQzNDBfUENJXzBfSU5URVJOQUxfU1JBTV9CQVJfU0laRSAgICAgICAgICAgICAgICAgICAgICAgIDB4ZTAwCisjZGVmaW5lIE1WNjQzNDBfUENJXzFfSU5URVJOQUxfU1JBTV9CQVJfU0laRSAgICAgICAgICAgICAgICAgICAgICAgIDB4ZTgwCisjZGVmaW5lIE1WNjQzNDBfUENJXzBfRVhQQU5TSU9OX1JPTV9CQVJfU0laRSAgICAgICAgICAgICAgICAgICAgICAgIDB4ZDJjCisjZGVmaW5lIE1WNjQzNDBfUENJXzFfRVhQQU5TSU9OX1JPTV9CQVJfU0laRSAgICAgICAgICAgICAgICAgICAgICAgIDB4ZDljCisjZGVmaW5lIE1WNjQzNDBfUENJXzBfQkFTRV9BRERSX1JFR19FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4YzNjCisjZGVmaW5lIE1WNjQzNDBfUENJXzFfQkFTRV9BRERSX1JFR19FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4Y2JjCisjZGVmaW5lIE1WNjQzNDBfUENJXzBfQ1NfMF9CQVNFX0FERFJfUkVNQVAJCQkgICAgMHhjNDgKKyNkZWZpbmUgTVY2NDM0MF9QQ0lfMV9DU18wX0JBU0VfQUREUl9SRU1BUAkJCSAgICAweGNjOAorI2RlZmluZSBNVjY0MzQwX1BDSV8wX0NTXzFfQkFTRV9BRERSX1JFTUFQCQkJICAgIDB4ZDQ4CisjZGVmaW5lIE1WNjQzNDBfUENJXzFfQ1NfMV9CQVNFX0FERFJfUkVNQVAJCQkgICAgMHhkYzgKKyNkZWZpbmUgTVY2NDM0MF9QQ0lfMF9DU18yX0JBU0VfQUREUl9SRU1BUAkJCSAgICAweGM0YworI2RlZmluZSBNVjY0MzQwX1BDSV8xX0NTXzJfQkFTRV9BRERSX1JFTUFQCQkJICAgIDB4Y2NjCisjZGVmaW5lIE1WNjQzNDBfUENJXzBfQ1NfM19CQVNFX0FERFJfUkVNQVAJCQkgICAgMHhkNGMKKyNkZWZpbmUgTVY2NDM0MF9QQ0lfMV9DU18zX0JBU0VfQUREUl9SRU1BUAkJCSAgICAweGRjYworI2RlZmluZSBNVjY0MzQwX1BDSV8wX0NTXzBfQkFTRV9ISUdIX0FERFJfUkVNQVAJCQkgICAgMHhGMDQKKyNkZWZpbmUgTVY2NDM0MF9QQ0lfMV9DU18wX0JBU0VfSElHSF9BRERSX1JFTUFQCQkJICAgIDB4Rjg0CisjZGVmaW5lIE1WNjQzNDBfUENJXzBfQ1NfMV9CQVNFX0hJR0hfQUREUl9SRU1BUAkJCSAgICAweEYwOAorI2RlZmluZSBNVjY0MzQwX1BDSV8xX0NTXzFfQkFTRV9ISUdIX0FERFJfUkVNQVAJCQkgICAgMHhGODgKKyNkZWZpbmUgTVY2NDM0MF9QQ0lfMF9DU18yX0JBU0VfSElHSF9BRERSX1JFTUFQCQkJICAgIDB4RjBDCisjZGVmaW5lIE1WNjQzNDBfUENJXzFfQ1NfMl9CQVNFX0hJR0hfQUREUl9SRU1BUAkJCSAgICAweEY4QworI2RlZmluZSBNVjY0MzQwX1BDSV8wX0NTXzNfQkFTRV9ISUdIX0FERFJfUkVNQVAJCQkgICAgMHhGMTAKKyNkZWZpbmUgTVY2NDM0MF9QQ0lfMV9DU18zX0JBU0VfSElHSF9BRERSX1JFTUFQCQkJICAgIDB4RjkwCisjZGVmaW5lIE1WNjQzNDBfUENJXzBfREVWQ1NfMF9CQVNFX0FERFJfUkVNQVAJCQkgICAgMHhjNTAKKyNkZWZpbmUgTVY2NDM0MF9QQ0lfMV9ERVZDU18wX0JBU0VfQUREUl9SRU1BUAkJCSAgICAweGNkMAorI2RlZmluZSBNVjY0MzQwX1BDSV8wX0RFVkNTXzFfQkFTRV9BRERSX1JFTUFQCQkJICAgIDB4ZDUwCisjZGVmaW5lIE1WNjQzNDBfUENJXzFfREVWQ1NfMV9CQVNFX0FERFJfUkVNQVAJCQkgICAgMHhkZDAKKyNkZWZpbmUgTVY2NDM0MF9QQ0lfMF9ERVZDU18yX0JBU0VfQUREUl9SRU1BUAkJCSAgICAweGQ1OAorI2RlZmluZSBNVjY0MzQwX1BDSV8xX0RFVkNTXzJfQkFTRV9BRERSX1JFTUFQCQkJICAgIDB4ZGQ4CisjZGVmaW5lIE1WNjQzNDBfUENJXzBfREVWQ1NfM19CQVNFX0FERFJfUkVNQVAgICAgICAgICAgIAkgICAgMHhjNTQKKyNkZWZpbmUgTVY2NDM0MF9QQ0lfMV9ERVZDU18zX0JBU0VfQUREUl9SRU1BUCAgICAgICAgICAgCSAgICAweGNkNAorI2RlZmluZSBNVjY0MzQwX1BDSV8wX0RFVkNTX0JPT1RDU19CQVNFX0FERFJfUkVNQVAgICAgICAJICAgIDB4ZDU0CisjZGVmaW5lIE1WNjQzNDBfUENJXzFfREVWQ1NfQk9PVENTX0JBU0VfQUREUl9SRU1BUCAgICAgIAkgICAgMHhkZDQKKyNkZWZpbmUgTVY2NDM0MF9QQ0lfMF9QMlBfTUVNMF9CQVNFX0FERFJfUkVNQVBfTE9XICAgICAgICAgICAgICAgICAgMHhkNWMKKyNkZWZpbmUgTVY2NDM0MF9QQ0lfMV9QMlBfTUVNMF9CQVNFX0FERFJfUkVNQVBfTE9XICAgICAgICAgICAgICAgICAgMHhkZGMKKyNkZWZpbmUgTVY2NDM0MF9QQ0lfMF9QMlBfTUVNMF9CQVNFX0FERFJfUkVNQVBfSElHSCAgICAgICAgICAgICAgICAgMHhkNjAKKyNkZWZpbmUgTVY2NDM0MF9QQ0lfMV9QMlBfTUVNMF9CQVNFX0FERFJfUkVNQVBfSElHSCAgICAgICAgICAgICAgICAgMHhkZTAKKyNkZWZpbmUgTVY2NDM0MF9QQ0lfMF9QMlBfTUVNMV9CQVNFX0FERFJfUkVNQVBfTE9XICAgICAgICAgICAgICAgICAgMHhkNjQKKyNkZWZpbmUgTVY2NDM0MF9QQ0lfMV9QMlBfTUVNMV9CQVNFX0FERFJfUkVNQVBfTE9XICAgICAgICAgICAgICAgICAgMHhkZTQKKyNkZWZpbmUgTVY2NDM0MF9QQ0lfMF9QMlBfTUVNMV9CQVNFX0FERFJfUkVNQVBfSElHSCAgICAgICAgICAgICAgICAgMHhkNjgKKyNkZWZpbmUgTVY2NDM0MF9QQ0lfMV9QMlBfTUVNMV9CQVNFX0FERFJfUkVNQVBfSElHSCAgICAgICAgICAgICAgICAgMHhkZTgKKyNkZWZpbmUgTVY2NDM0MF9QQ0lfMF9QMlBfSV9PX0JBU0VfQUREUl9SRU1BUCAgICAgICAgICAgICAgICAgICAgICAgMHhkNmMKKyNkZWZpbmUgTVY2NDM0MF9QQ0lfMV9QMlBfSV9PX0JBU0VfQUREUl9SRU1BUCAgICAgICAgICAgICAgICAgICAgICAgMHhkZWMgCisjZGVmaW5lIE1WNjQzNDBfUENJXzBfQ1BVX0JBU0VfQUREUl9SRU1BUF9MT1cgICAgICAgICAgICAgICAgICAgICAgIDB4ZDcwCisjZGVmaW5lIE1WNjQzNDBfUENJXzFfQ1BVX0JBU0VfQUREUl9SRU1BUF9MT1cgICAgICAgICAgICAgICAgICAgICAgIDB4ZGYwCisjZGVmaW5lIE1WNjQzNDBfUENJXzBfQ1BVX0JBU0VfQUREUl9SRU1BUF9ISUdIICAgICAgICAgICAgICAgICAgICAgIDB4ZDc0CisjZGVmaW5lIE1WNjQzNDBfUENJXzFfQ1BVX0JBU0VfQUREUl9SRU1BUF9ISUdIICAgICAgICAgICAgICAgICAgICAgIDB4ZGY0CisjZGVmaW5lIE1WNjQzNDBfUENJXzBfSU5URUdSQVRFRF9TUkFNX0JBU0VfQUREUl9SRU1BUCAgICAgICAgICAgICAgIDB4ZjAwCisjZGVmaW5lIE1WNjQzNDBfUENJXzFfSU5URUdSQVRFRF9TUkFNX0JBU0VfQUREUl9SRU1BUCAgICAgICAgICAgICAgIDB4ZjgwCisjZGVmaW5lIE1WNjQzNDBfUENJXzBfRVhQQU5TSU9OX1JPTV9CQVNFX0FERFJfUkVNQVAgICAgICAgICAgICAgICAgIDB4ZjM4CisjZGVmaW5lIE1WNjQzNDBfUENJXzFfRVhQQU5TSU9OX1JPTV9CQVNFX0FERFJfUkVNQVAgICAgICAgICAgICAgICAgIDB4ZmI4CisjZGVmaW5lIE1WNjQzNDBfUENJXzBfQUREUl9ERUNPREVfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZDNjCisjZGVmaW5lIE1WNjQzNDBfUENJXzFfQUREUl9ERUNPREVfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZGJjCisjZGVmaW5lIE1WNjQzNDBfUENJXzBfSEVBREVSU19SRVRBUkdFVF9DT05UUk9MICAgICAgICAgICAgICAgICAgICAgIDB4RjQwCisjZGVmaW5lIE1WNjQzNDBfUENJXzFfSEVBREVSU19SRVRBUkdFVF9DT05UUk9MICAgICAgICAgICAgICAgICAgICAgIDB4RmMwCisjZGVmaW5lIE1WNjQzNDBfUENJXzBfSEVBREVSU19SRVRBUkdFVF9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgIDB4RjQ0CisjZGVmaW5lIE1WNjQzNDBfUENJXzFfSEVBREVSU19SRVRBUkdFVF9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgIDB4RmM0CisjZGVmaW5lIE1WNjQzNDBfUENJXzBfSEVBREVSU19SRVRBUkdFVF9ISUdIICAgICAgICAgICAgICAgICAgICAgICAgIDB4RjQ4CisjZGVmaW5lIE1WNjQzNDBfUENJXzFfSEVBREVSU19SRVRBUkdFVF9ISUdIICAgICAgICAgICAgICAgICAgICAgICAgIDB4RmM4CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgUENJIENvbnRyb2wgUmVnaXN0ZXIgTWFwICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBNVjY0MzQwX1BDSV8wX0RMTF9TVEFUVVNfQU5EX0NPTU1BTkQgICAgICAgICAgICAgICAgICAgICAgICAweDFkMjAKKyNkZWZpbmUgTVY2NDM0MF9QQ0lfMV9ETExfU1RBVFVTX0FORF9DT01NQU5EICAgICAgICAgICAgICAgICAgICAgICAgMHgxZGEwCisjZGVmaW5lIE1WNjQzNDBfUENJXzBfTVBQX1BBRFNfRFJJVkVfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgICAgIDB4MWQxQworI2RlZmluZSBNVjY0MzQwX1BDSV8xX01QUF9QQURTX0RSSVZFX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAgICAweDFkOUMKKyNkZWZpbmUgTVY2NDM0MF9QQ0lfMF9DT01NQU5ECQkJICAgICAgICAgCSAgICAweGMwMAorI2RlZmluZSBNVjY0MzQwX1BDSV8xX0NPTU1BTkQJCQkJCSAgICAweGM4MAorI2RlZmluZSBNVjY0MzQwX1BDSV8wX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGQwMAorI2RlZmluZSBNVjY0MzQwX1BDSV8xX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGQ4MAorI2RlZmluZSBNVjY0MzQwX1BDSV8wX1JFVFJZCSAgICAgICAgCSAJCSAgICAweGMwNAorI2RlZmluZSBNVjY0MzQwX1BDSV8xX1JFVFJZCQkJCSAgICAgICAgICAgIDB4Yzg0CisjZGVmaW5lIE1WNjQzNDBfUENJXzBfUkVBRF9CVUZGRVJfRElTQ0FSRF9USU1FUiAgICAgICAgICAgICAgICAgICAgIDB4ZDA0CisjZGVmaW5lIE1WNjQzNDBfUENJXzFfUkVBRF9CVUZGRVJfRElTQ0FSRF9USU1FUiAgICAgICAgICAgICAgICAgICAgIDB4ZDg0CisjZGVmaW5lIE1WNjQzNDBfUENJXzBfTVNJX1RSSUdHRVJfVElNRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4YzM4CisjZGVmaW5lIE1WNjQzNDBfUENJXzFfTVNJX1RSSUdHRVJfVElNRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4Y2I4CisjZGVmaW5lIE1WNjQzNDBfUENJXzBfQVJCSVRFUl9DT05UUk9MICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MWQwMAorI2RlZmluZSBNVjY0MzQwX1BDSV8xX0FSQklURVJfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFkODAKKyNkZWZpbmUgTVY2NDM0MF9QQ0lfMF9DUk9TU19CQVJfQ09OVFJPTF9MT1cgICAgICAgICAgICAgICAgICAgICAgICAgMHgxZDA4CisjZGVmaW5lIE1WNjQzNDBfUENJXzFfQ1JPU1NfQkFSX0NPTlRST0xfTE9XICAgICAgICAgICAgICAgICAgICAgICAgIDB4MWQ4OAorI2RlZmluZSBNVjY0MzQwX1BDSV8wX0NST1NTX0JBUl9DT05UUk9MX0hJR0ggICAgICAgICAgICAgICAgICAgICAgICAweDFkMGMKKyNkZWZpbmUgTVY2NDM0MF9QQ0lfMV9DUk9TU19CQVJfQ09OVFJPTF9ISUdIICAgICAgICAgICAgICAgICAgICAgICAgMHgxZDhjCisjZGVmaW5lIE1WNjQzNDBfUENJXzBfQ1JPU1NfQkFSX1RJTUVPVVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MWQwNAorI2RlZmluZSBNVjY0MzQwX1BDSV8xX0NST1NTX0JBUl9USU1FT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFkODQKKyNkZWZpbmUgTVY2NDM0MF9QQ0lfMF9TWU5DX0JBUlJJRVJfVFJJR0dFUl9SRUcgICAgICAgICAgICAgICAgICAgICAgMHgxRDE4CisjZGVmaW5lIE1WNjQzNDBfUENJXzFfU1lOQ19CQVJSSUVSX1RSSUdHRVJfUkVHICAgICAgICAgICAgICAgICAgICAgIDB4MUQ5OAorI2RlZmluZSBNVjY0MzQwX1BDSV8wX1NZTkNfQkFSUklFUl9WSVJUVUFMX1JFRyAgICAgICAgICAgICAgICAgICAgICAweDFkMTAKKyNkZWZpbmUgTVY2NDM0MF9QQ0lfMV9TWU5DX0JBUlJJRVJfVklSVFVBTF9SRUcgICAgICAgICAgICAgICAgICAgICAgMHgxZDkwCisjZGVmaW5lIE1WNjQzNDBfUENJXzBfUDJQX0NPTkZJRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MWQxNAorI2RlZmluZSBNVjY0MzQwX1BDSV8xX1AyUF9DT05GSUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFkOTQKKworI2RlZmluZSBNVjY0MzQwX1BDSV8wX0FDQ0VTU19DT05UUk9MX0JBU0VfMF9MT1cgICAgICAgICAgICAgICAgICAgICAweDFlMDAKKyNkZWZpbmUgTVY2NDM0MF9QQ0lfMF9BQ0NFU1NfQ09OVFJPTF9CQVNFXzBfSElHSCAgICAgICAgICAgICAgICAgICAgMHgxZTA0CisjZGVmaW5lIE1WNjQzNDBfUENJXzBfQUNDRVNTX0NPTlRST0xfU0laRV8wICAgICAgICAgICAgICAgICAgICAgICAgIDB4MWUwOAorI2RlZmluZSBNVjY0MzQwX1BDSV8wX0FDQ0VTU19DT05UUk9MX0JBU0VfMV9MT1cgICAgICAgICAgICAgICAgICAgICAweDFlMTAKKyNkZWZpbmUgTVY2NDM0MF9QQ0lfMF9BQ0NFU1NfQ09OVFJPTF9CQVNFXzFfSElHSCAgICAgICAgICAgICAgICAgICAgMHgxZTE0CisjZGVmaW5lIE1WNjQzNDBfUENJXzBfQUNDRVNTX0NPTlRST0xfU0laRV8xICAgICAgICAgICAgICAgICAgICAgICAgIDB4MWUxOAorI2RlZmluZSBNVjY0MzQwX1BDSV8wX0FDQ0VTU19DT05UUk9MX0JBU0VfMl9MT1cgICAgICAgICAgICAgICAgICAgICAweDFlMjAKKyNkZWZpbmUgTVY2NDM0MF9QQ0lfMF9BQ0NFU1NfQ09OVFJPTF9CQVNFXzJfSElHSCAgICAgICAgICAgICAgICAgICAgMHgxZTI0CisjZGVmaW5lIE1WNjQzNDBfUENJXzBfQUNDRVNTX0NPTlRST0xfU0laRV8yICAgICAgICAgICAgICAgICAgICAgICAgIDB4MWUyOAorI2RlZmluZSBNVjY0MzQwX1BDSV8wX0FDQ0VTU19DT05UUk9MX0JBU0VfM19MT1cgICAgICAgICAgICAgICAgICAgICAweDFlMzAKKyNkZWZpbmUgTVY2NDM0MF9QQ0lfMF9BQ0NFU1NfQ09OVFJPTF9CQVNFXzNfSElHSCAgICAgICAgICAgICAgICAgICAgMHgxZTM0CisjZGVmaW5lIE1WNjQzNDBfUENJXzBfQUNDRVNTX0NPTlRST0xfU0laRV8zICAgICAgICAgICAgICAgICAgICAgICAgIDB4MWUzOAorI2RlZmluZSBNVjY0MzQwX1BDSV8wX0FDQ0VTU19DT05UUk9MX0JBU0VfNF9MT1cgICAgICAgICAgICAgICAgICAgICAweDFlNDAKKyNkZWZpbmUgTVY2NDM0MF9QQ0lfMF9BQ0NFU1NfQ09OVFJPTF9CQVNFXzRfSElHSCAgICAgICAgICAgICAgICAgICAgMHgxZTQ0CisjZGVmaW5lIE1WNjQzNDBfUENJXzBfQUNDRVNTX0NPTlRST0xfU0laRV80ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MWU0OAorI2RlZmluZSBNVjY0MzQwX1BDSV8wX0FDQ0VTU19DT05UUk9MX0JBU0VfNV9MT1cgICAgICAgICAgICAgICAgICAgICAweDFlNTAKKyNkZWZpbmUgTVY2NDM0MF9QQ0lfMF9BQ0NFU1NfQ09OVFJPTF9CQVNFXzVfSElHSCAgICAgICAgICAgICAgICAgICAgMHgxZTU0CisjZGVmaW5lIE1WNjQzNDBfUENJXzBfQUNDRVNTX0NPTlRST0xfU0laRV81ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MWU1OAorCisjZGVmaW5lIE1WNjQzNDBfUENJXzFfQUNDRVNTX0NPTlRST0xfQkFTRV8wX0xPVyAgICAgICAgICAgICAgICAgICAgIDB4MWU4MAorI2RlZmluZSBNVjY0MzQwX1BDSV8xX0FDQ0VTU19DT05UUk9MX0JBU0VfMF9ISUdIICAgICAgICAgICAgICAgICAgICAweDFlODQKKyNkZWZpbmUgTVY2NDM0MF9QQ0lfMV9BQ0NFU1NfQ09OVFJPTF9TSVpFXzAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxZTg4CisjZGVmaW5lIE1WNjQzNDBfUENJXzFfQUNDRVNTX0NPTlRST0xfQkFTRV8xX0xPVyAgICAgICAgICAgICAgICAgICAgIDB4MWU5MAorI2RlZmluZSBNVjY0MzQwX1BDSV8xX0FDQ0VTU19DT05UUk9MX0JBU0VfMV9ISUdIICAgICAgICAgICAgICAgICAgICAweDFlOTQKKyNkZWZpbmUgTVY2NDM0MF9QQ0lfMV9BQ0NFU1NfQ09OVFJPTF9TSVpFXzEgICAgICAgICAgICAgICAgICAgICAgICAgMHgxZTk4CisjZGVmaW5lIE1WNjQzNDBfUENJXzFfQUNDRVNTX0NPTlRST0xfQkFTRV8yX0xPVyAgICAgICAgICAgICAgICAgICAgIDB4MWVhMAorI2RlZmluZSBNVjY0MzQwX1BDSV8xX0FDQ0VTU19DT05UUk9MX0JBU0VfMl9ISUdIICAgICAgICAgICAgICAgICAgICAweDFlYTQKKyNkZWZpbmUgTVY2NDM0MF9QQ0lfMV9BQ0NFU1NfQ09OVFJPTF9TSVpFXzIgICAgICAgICAgICAgICAgICAgICAgICAgMHgxZWE4CisjZGVmaW5lIE1WNjQzNDBfUENJXzFfQUNDRVNTX0NPTlRST0xfQkFTRV8zX0xPVyAgICAgICAgICAgICAgICAgICAgIDB4MWViMAorI2RlZmluZSBNVjY0MzQwX1BDSV8xX0FDQ0VTU19DT05UUk9MX0JBU0VfM19ISUdIICAgICAgICAgICAgICAgICAgICAweDFlYjQKKyNkZWZpbmUgTVY2NDM0MF9QQ0lfMV9BQ0NFU1NfQ09OVFJPTF9TSVpFXzMgICAgICAgICAgICAgICAgICAgICAgICAgMHgxZWI4CisjZGVmaW5lIE1WNjQzNDBfUENJXzFfQUNDRVNTX0NPTlRST0xfQkFTRV80X0xPVyAgICAgICAgICAgICAgICAgICAgIDB4MWVjMAorI2RlZmluZSBNVjY0MzQwX1BDSV8xX0FDQ0VTU19DT05UUk9MX0JBU0VfNF9ISUdIICAgICAgICAgICAgICAgICAgICAweDFlYzQKKyNkZWZpbmUgTVY2NDM0MF9QQ0lfMV9BQ0NFU1NfQ09OVFJPTF9TSVpFXzQgICAgICAgICAgICAgICAgICAgICAgICAgMHgxZWM4CisjZGVmaW5lIE1WNjQzNDBfUENJXzFfQUNDRVNTX0NPTlRST0xfQkFTRV81X0xPVyAgICAgICAgICAgICAgICAgICAgIDB4MWVkMAorI2RlZmluZSBNVjY0MzQwX1BDSV8xX0FDQ0VTU19DT05UUk9MX0JBU0VfNV9ISUdIICAgICAgICAgICAgICAgICAgICAweDFlZDQKKyNkZWZpbmUgTVY2NDM0MF9QQ0lfMV9BQ0NFU1NfQ09OVFJPTF9TSVpFXzUgICAgICAgICAgICAgICAgICAgICAgICAgMHgxZWQ4CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICBQQ0kgQ29uZmlndXJhdGlvbiBBY2Nlc3MgUmVnaXN0ZXJzICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBNVjY0MzQwX1BDSV8wX0NPTkZJR19BRERSIAkJCQkgICAgMHhjZjgKKyNkZWZpbmUgTVY2NDM0MF9QQ0lfMF9DT05GSUdfREFUQV9WSVJUVUFMX1JFRyAgICAgICAgICAgICAgICAgICAgICAgMHhjZmMKKyNkZWZpbmUgTVY2NDM0MF9QQ0lfMV9DT05GSUdfQUREUiAJCQkJICAgIDB4Yzc4CisjZGVmaW5lIE1WNjQzNDBfUENJXzFfQ09ORklHX0RBVEFfVklSVFVBTF9SRUcgICAgICAgICAgICAgICAgICAgICAgIDB4YzdjCisjZGVmaW5lIE1WNjQzNDBfUENJXzBfSU5URVJSVVBUX0FDS05PV0xFREdFX1ZJUlRVQUxfUkVHCSAgICAgICAgICAgIDB4YzM0CisjZGVmaW5lIE1WNjQzNDBfUENJXzFfSU5URVJSVVBUX0FDS05PV0xFREdFX1ZJUlRVQUxfUkVHCSAgICAgICAgICAgIDB4Y2I0CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICBQQ0kgRXJyb3IgUmVwb3J0IFJlZ2lzdGVycyAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBNVjY0MzQwX1BDSV8wX1NFUlJfTUFTSwkJCQkJICAgIDB4YzI4CisjZGVmaW5lIE1WNjQzNDBfUENJXzFfU0VSUl9NQVNLCQkJCQkgICAgMHhjYTgKKyNkZWZpbmUgTVY2NDM0MF9QQ0lfMF9FUlJPUl9BRERSX0xPVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxZDQwCisjZGVmaW5lIE1WNjQzNDBfUENJXzFfRVJST1JfQUREUl9MT1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MWRjMAorI2RlZmluZSBNVjY0MzQwX1BDSV8wX0VSUk9SX0FERFJfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFkNDQKKyNkZWZpbmUgTVY2NDM0MF9QQ0lfMV9FUlJPUl9BRERSX0hJR0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxZGM0CisjZGVmaW5lIE1WNjQzNDBfUENJXzBfRVJST1JfQVRUUklCVVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MWQ0OAorI2RlZmluZSBNVjY0MzQwX1BDSV8xX0VSUk9SX0FUVFJJQlVURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFkYzgKKyNkZWZpbmUgTVY2NDM0MF9QQ0lfMF9FUlJPUl9DT01NQU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxZDUwCisjZGVmaW5lIE1WNjQzNDBfUENJXzFfRVJST1JfQ09NTUFORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MWRkMAorI2RlZmluZSBNVjY0MzQwX1BDSV8wX0VSUk9SX0NBVVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFkNTgKKyNkZWZpbmUgTVY2NDM0MF9QQ0lfMV9FUlJPUl9DQVVTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxZGQ4CisjZGVmaW5lIE1WNjQzNDBfUENJXzBfRVJST1JfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MWQ1YworI2RlZmluZSBNVjY0MzQwX1BDSV8xX0VSUk9SX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFkZGMKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgIFBDSSBEZWJ1ZyBSZWdpc3RlcnMgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIE1WNjQzNDBfUENJXzBfTU1BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBYMUQyNAorI2RlZmluZSBNVjY0MzQwX1BDSV8xX01NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwWDFEQTQKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFBDSSBDb25maWd1cmF0aW9uLCBGdW5jdGlvbiAwLCBSZWdpc3RlcnMgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIE1WNjQzNDBfUENJX0RFVklDRV9BTkRfVkVORE9SX0lEIAkJCSAgICAweDAwMAorI2RlZmluZSBNVjY0MzQwX1BDSV9TVEFUVVNfQU5EX0NPTU1BTkQJCQkJICAgIDB4MDA0CisjZGVmaW5lIE1WNjQzNDBfUENJX0NMQVNTX0NPREVfQU5EX1JFVklTSU9OX0lECQkJICAgIDB4MDA4CisjZGVmaW5lIE1WNjQzNDBfUENJX0JJU1RfSEVBREVSX1RZUEVfTEFURU5DWV9USU1FUl9DQUNIRV9MSU5FIAkgICAgMHgwMEMKKworI2RlZmluZSBNVjY0MzQwX1BDSV9TQ1NfMF9CQVNFX0FERFJfTE9XICAgCSAgICAgIAkJICAgIDB4MDEwCisjZGVmaW5lIE1WNjQzNDBfUENJX1NDU18wX0JBU0VfQUREUl9ISUdIICAgCQkgICAgICAgICAgICAweDAxNAorI2RlZmluZSBNVjY0MzQwX1BDSV9TQ1NfMV9CQVNFX0FERFJfTE9XICAJICAgICAJICAgICAgICAgICAgMHgwMTgKKyNkZWZpbmUgTVY2NDM0MF9QQ0lfU0NTXzFfQkFTRV9BRERSX0hJR0ggCQkgICAgICAgICAgICAweDAxQworI2RlZmluZSBNVjY0MzQwX1BDSV9JTlRFUk5BTF9SRUdfTUVNX01BUFBFRF9CQVNFX0FERFJfTE9XICAgICAgCSAgICAweDAyMAorI2RlZmluZSBNVjY0MzQwX1BDSV9JTlRFUk5BTF9SRUdfTUVNX01BUFBFRF9CQVNFX0FERFJfSElHSCAgICAgCSAgICAweDAyNAorI2RlZmluZSBNVjY0MzQwX1BDSV9TVUJTWVNURU1fSURfQU5EX1NVQlNZU1RFTV9WRU5ET1JfSUQJICAgIDB4MDJjCisjZGVmaW5lIE1WNjQzNDBfUENJX0VYUEFOU0lPTl9ST01fQkFTRV9BRERSX1JFRwkgICAgICAgICAgICAgICAgICAgIDB4MDMwCisjZGVmaW5lIE1WNjQzNDBfUENJX0NBUEFCSUxUWV9MSVNUX1BPSU5URVIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDM0CisjZGVmaW5lIE1WNjQzNDBfUENJX0lOVEVSUlVQVF9QSU5fQU5EX0xJTkUgCQkJICAgIDB4MDNDCisgICAgICAgLyogY2FwYWJpbGl0eSBsaXN0ICovCisjZGVmaW5lIE1WNjQzNDBfUENJX1BPV0VSX01BTkFHRU1FTlRfQ0FQQUJJTElUWSAgICAgICAgICAgICAgICAgICAgIDB4MDQwCisjZGVmaW5lIE1WNjQzNDBfUENJX1BPV0VSX01BTkFHRU1FTlRfU1RBVFVTX0FORF9DT05UUk9MICAgICAgICAgICAgIDB4MDQ0CisjZGVmaW5lIE1WNjQzNDBfUENJX1ZQRF9BRERSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQ4CisjZGVmaW5lIE1WNjQzNDBfUENJX1ZQRF9EQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDRjCisjZGVmaW5lIE1WNjQzNDBfUENJX01TSV9NRVNTQUdFX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDUwCisjZGVmaW5lIE1WNjQzNDBfUENJX01TSV9NRVNTQUdFX0FERFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDU0CisjZGVmaW5lIE1WNjQzNDBfUENJX01TSV9NRVNTQUdFX1VQUEVSX0FERFIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDU4CisjZGVmaW5lIE1WNjQzNDBfUENJX01TSV9NRVNTQUdFX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDVjCisjZGVmaW5lIE1WNjQzNDBfUENJX1hfQ09NTUFORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYwCisjZGVmaW5lIE1WNjQzNDBfUENJX1hfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDY0CisjZGVmaW5lIE1WNjQzNDBfUENJX0NPTVBBQ1RfUENJX0hPVF9TV0FQICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDY4CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgUENJIENvbmZpZ3VyYXRpb24sIEZ1bmN0aW9uIDEsIFJlZ2lzdGVycyAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBNVjY0MzQwX1BDSV9TQ1NfMl9CQVNFX0FERFJfTE9XICAgCQkJICAgIDB4MTEwCisjZGVmaW5lIE1WNjQzNDBfUENJX1NDU18yX0JBU0VfQUREUl9ISUdICQkJICAgIDB4MTE0CisjZGVmaW5lIE1WNjQzNDBfUENJX1NDU18zX0JBU0VfQUREUl9MT1cgCQkJICAgIDB4MTE4CisjZGVmaW5lIE1WNjQzNDBfUENJX1NDU18zX0JBU0VfQUREUl9ISUdICQkJICAgIDB4MTFjCisjZGVmaW5lIE1WNjQzNDBfUENJX0lOVEVSTkFMX1NSQU1fQkFTRV9BRERSX0xPVyAgICAgICAgICAJICAgIDB4MTIwCisjZGVmaW5lIE1WNjQzNDBfUENJX0lOVEVSTkFMX1NSQU1fQkFTRV9BRERSX0hJR0ggICAgICAgICAJICAgIDB4MTI0CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICBQQ0kgQ29uZmlndXJhdGlvbiwgRnVuY3Rpb24gMiwgUmVnaXN0ZXJzICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBNVjY0MzQwX1BDSV9ERVZDU18wX0JBU0VfQUREUl9MT1cJICAgIAkJICAgIDB4MjEwCisjZGVmaW5lIE1WNjQzNDBfUENJX0RFVkNTXzBfQkFTRV9BRERSX0hJR0ggCQkJICAgIDB4MjE0CisjZGVmaW5lIE1WNjQzNDBfUENJX0RFVkNTXzFfQkFTRV9BRERSX0xPVyAJCQkgICAgMHgyMTgKKyNkZWZpbmUgTVY2NDM0MF9QQ0lfREVWQ1NfMV9CQVNFX0FERFJfSElHSCAgICAgIAkJICAgIDB4MjFjCisjZGVmaW5lIE1WNjQzNDBfUENJX0RFVkNTXzJfQkFTRV9BRERSX0xPVyAJCQkgICAgMHgyMjAKKyNkZWZpbmUgTVY2NDM0MF9QQ0lfREVWQ1NfMl9CQVNFX0FERFJfSElHSCAgICAgIAkJICAgIDB4MjI0CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICBQQ0kgQ29uZmlndXJhdGlvbiwgRnVuY3Rpb24gMywgUmVnaXN0ZXJzICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBNVjY0MzQwX1BDSV9ERVZDU18zX0JBU0VfQUREUl9MT1cJICAgIAkJICAgIDB4MzEwCisjZGVmaW5lIE1WNjQzNDBfUENJX0RFVkNTXzNfQkFTRV9BRERSX0hJR0ggCQkJICAgIDB4MzE0CisjZGVmaW5lIE1WNjQzNDBfUENJX0JPT1RfQ1NfQkFTRV9BRERSX0xPVwkJCSAgICAweDMxOAorI2RlZmluZSBNVjY0MzQwX1BDSV9CT09UX0NTX0JBU0VfQUREUl9ISUdIICAgICAgCQkgICAgMHgzMWMKKyNkZWZpbmUgTVY2NDM0MF9QQ0lfQ1BVX0JBU0VfQUREUl9MT1cgCQkJCSAgICAweDIyMAorI2RlZmluZSBNVjY0MzQwX1BDSV9DUFVfQkFTRV9BRERSX0hJR0ggICAgICAJCQkgICAgMHgyMjQKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogIFBDSSBDb25maWd1cmF0aW9uLCBGdW5jdGlvbiA0LCBSZWdpc3RlcnMgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIE1WNjQzNDBfUENJX1AyUF9NRU0wX0JBU0VfQUREUl9MT1cgIAkJCSAgICAweDQxMAorI2RlZmluZSBNVjY0MzQwX1BDSV9QMlBfTUVNMF9CQVNFX0FERFJfSElHSCAJCQkgICAgMHg0MTQKKyNkZWZpbmUgTVY2NDM0MF9QQ0lfUDJQX01FTTFfQkFTRV9BRERSX0xPVyAgIAkJCSAgICAweDQxOAorI2RlZmluZSBNVjY0MzQwX1BDSV9QMlBfTUVNMV9CQVNFX0FERFJfSElHSCAJCQkgICAgMHg0MWMKKyNkZWZpbmUgTVY2NDM0MF9QQ0lfUDJQX0lfT19CQVNFX0FERFIgICAgICAgICAgICAgICAgIAkgICAgICAgICAgICAweDQyMAorI2RlZmluZSBNVjY0MzQwX1BDSV9JTlRFUk5BTF9SRUdTX0lfT19NQVBQRURfQkFTRV9BRERSICAgICAgICAgICAgICAweDQyNAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIE1lc3NhZ2luZyBVbml0IFJlZ2lzdGVycyAoSTIwKSAgIAkqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgTVY2NDM0MF9JMk9fSU5CT1VORF9NRVNTQUdFX1JFRzBfUENJXzBfU0lERQkJICAgIDB4MDEwCisjZGVmaW5lIE1WNjQzNDBfSTJPX0lOQk9VTkRfTUVTU0FHRV9SRUcxX1BDSV8wX1NJREUgIAkJICAgIDB4MDE0CisjZGVmaW5lIE1WNjQzNDBfSTJPX09VVEJPVU5EX01FU1NBR0VfUkVHMF9QQ0lfMF9TSURFIAkJICAgIDB4MDE4CisjZGVmaW5lIE1WNjQzNDBfSTJPX09VVEJPVU5EX01FU1NBR0VfUkVHMV9QQ0lfMF9TSURFICAJCSAgICAweDAxQworI2RlZmluZSBNVjY0MzQwX0kyT19JTkJPVU5EX0RPT1JCRUxMX1JFR19QQ0lfMF9TSURFICAJCSAgICAweDAyMAorI2RlZmluZSBNVjY0MzQwX0kyT19JTkJPVU5EX0lOVEVSUlVQVF9DQVVTRV9SRUdfUENJXzBfU0lERSAgICAgICAgICAweDAyNAorI2RlZmluZSBNVjY0MzQwX0kyT19JTkJPVU5EX0lOVEVSUlVQVF9NQVNLX1JFR19QQ0lfMF9TSURFCSAgICAweDAyOAorI2RlZmluZSBNVjY0MzQwX0kyT19PVVRCT1VORF9ET09SQkVMTF9SRUdfUENJXzBfU0lERSAJCSAgICAweDAyQworI2RlZmluZSBNVjY0MzQwX0kyT19PVVRCT1VORF9JTlRFUlJVUFRfQ0FVU0VfUkVHX1BDSV8wX1NJREUgICAgICAgICAweDAzMAorI2RlZmluZSBNVjY0MzQwX0kyT19PVVRCT1VORF9JTlRFUlJVUFRfTUFTS19SRUdfUENJXzBfU0lERSAgICAgICAgICAweDAzNAorI2RlZmluZSBNVjY0MzQwX0kyT19JTkJPVU5EX1FVRVVFX1BPUlRfVklSVFVBTF9SRUdfUENJXzBfU0lERSAgICAgICAweDA0MAorI2RlZmluZSBNVjY0MzQwX0kyT19PVVRCT1VORF9RVUVVRV9QT1JUX1ZJUlRVQUxfUkVHX1BDSV8wX1NJREUgICAgICAweDA0NAorI2RlZmluZSBNVjY0MzQwX0kyT19RVUVVRV9DT05UUk9MX1JFR19QQ0lfMF9TSURFIAkJICAgIDB4MDUwCisjZGVmaW5lIE1WNjQzNDBfSTJPX1FVRVVFX0JBU0VfQUREUl9SRUdfUENJXzBfU0lERSAJCSAgICAweDA1NAorI2RlZmluZSBNVjY0MzQwX0kyT19JTkJPVU5EX0ZSRUVfSEVBRF9QT0lOVEVSX1JFR19QQ0lfMF9TSURFICAgICAgICAweDA2MAorI2RlZmluZSBNVjY0MzQwX0kyT19JTkJPVU5EX0ZSRUVfVEFJTF9QT0lOVEVSX1JFR19QQ0lfMF9TSURFICAgICAgICAweDA2NAorI2RlZmluZSBNVjY0MzQwX0kyT19JTkJPVU5EX1BPU1RfSEVBRF9QT0lOVEVSX1JFR19QQ0lfMF9TSURFICAgICAgICAweDA2OAorI2RlZmluZSBNVjY0MzQwX0kyT19JTkJPVU5EX1BPU1RfVEFJTF9QT0lOVEVSX1JFR19QQ0lfMF9TSURFICAgICAgICAweDA2QworI2RlZmluZSBNVjY0MzQwX0kyT19PVVRCT1VORF9GUkVFX0hFQURfUE9JTlRFUl9SRUdfUENJXzBfU0lERSAgICAgICAweDA3MAorI2RlZmluZSBNVjY0MzQwX0kyT19PVVRCT1VORF9GUkVFX1RBSUxfUE9JTlRFUl9SRUdfUENJXzBfU0lERSAgICAgICAweDA3NAorI2RlZmluZSBNVjY0MzQwX0kyT19PVVRCT1VORF9QT1NUX0hFQURfUE9JTlRFUl9SRUdfUENJXzBfU0lERSAgICAgICAweDBGOAorI2RlZmluZSBNVjY0MzQwX0kyT19PVVRCT1VORF9QT1NUX1RBSUxfUE9JTlRFUl9SRUdfUENJXzBfU0lERSAgICAgICAweDBGQworCisjZGVmaW5lIE1WNjQzNDBfSTJPX0lOQk9VTkRfTUVTU0FHRV9SRUcwX1BDSV8xX1NJREUJCSAgICAweDA5MAorI2RlZmluZSBNVjY0MzQwX0kyT19JTkJPVU5EX01FU1NBR0VfUkVHMV9QQ0lfMV9TSURFICAJCSAgICAweDA5NAorI2RlZmluZSBNVjY0MzQwX0kyT19PVVRCT1VORF9NRVNTQUdFX1JFRzBfUENJXzFfU0lERSAJCSAgICAweDA5OAorI2RlZmluZSBNVjY0MzQwX0kyT19PVVRCT1VORF9NRVNTQUdFX1JFRzFfUENJXzFfU0lERSAgCQkgICAgMHgwOUMKKyNkZWZpbmUgTVY2NDM0MF9JMk9fSU5CT1VORF9ET09SQkVMTF9SRUdfUENJXzFfU0lERSAgCQkgICAgMHgwQTAKKyNkZWZpbmUgTVY2NDM0MF9JMk9fSU5CT1VORF9JTlRFUlJVUFRfQ0FVU0VfUkVHX1BDSV8xX1NJREUgICAgICAgICAgMHgwQTQKKyNkZWZpbmUgTVY2NDM0MF9JMk9fSU5CT1VORF9JTlRFUlJVUFRfTUFTS19SRUdfUENJXzFfU0lERQkgICAgMHgwQTgKKyNkZWZpbmUgTVY2NDM0MF9JMk9fT1VUQk9VTkRfRE9PUkJFTExfUkVHX1BDSV8xX1NJREUgCQkgICAgMHgwQUMKKyNkZWZpbmUgTVY2NDM0MF9JMk9fT1VUQk9VTkRfSU5URVJSVVBUX0NBVVNFX1JFR19QQ0lfMV9TSURFICAgICAgICAgMHgwQjAKKyNkZWZpbmUgTVY2NDM0MF9JMk9fT1VUQk9VTkRfSU5URVJSVVBUX01BU0tfUkVHX1BDSV8xX1NJREUgICAgICAgICAgMHgwQjQKKyNkZWZpbmUgTVY2NDM0MF9JMk9fSU5CT1VORF9RVUVVRV9QT1JUX1ZJUlRVQUxfUkVHX1BDSV8xX1NJREUgICAgICAgMHgwQzAKKyNkZWZpbmUgTVY2NDM0MF9JMk9fT1VUQk9VTkRfUVVFVUVfUE9SVF9WSVJUVUFMX1JFR19QQ0lfMV9TSURFICAgICAgMHgwQzQKKyNkZWZpbmUgTVY2NDM0MF9JMk9fUVVFVUVfQ09OVFJPTF9SRUdfUENJXzFfU0lERSAJCSAgICAweDBEMAorI2RlZmluZSBNVjY0MzQwX0kyT19RVUVVRV9CQVNFX0FERFJfUkVHX1BDSV8xX1NJREUgCQkgICAgMHgwRDQKKyNkZWZpbmUgTVY2NDM0MF9JMk9fSU5CT1VORF9GUkVFX0hFQURfUE9JTlRFUl9SRUdfUENJXzFfU0lERSAgICAgICAgMHgwRTAKKyNkZWZpbmUgTVY2NDM0MF9JMk9fSU5CT1VORF9GUkVFX1RBSUxfUE9JTlRFUl9SRUdfUENJXzFfU0lERSAgICAgICAgMHgwRTQKKyNkZWZpbmUgTVY2NDM0MF9JMk9fSU5CT1VORF9QT1NUX0hFQURfUE9JTlRFUl9SRUdfUENJXzFfU0lERSAgICAgICAgMHgwRTgKKyNkZWZpbmUgTVY2NDM0MF9JMk9fSU5CT1VORF9QT1NUX1RBSUxfUE9JTlRFUl9SRUdfUENJXzFfU0lERSAgICAgICAgMHgwRUMKKyNkZWZpbmUgTVY2NDM0MF9JMk9fT1VUQk9VTkRfRlJFRV9IRUFEX1BPSU5URVJfUkVHX1BDSV8xX1NJREUgICAgICAgMHgwRjAKKyNkZWZpbmUgTVY2NDM0MF9JMk9fT1VUQk9VTkRfRlJFRV9UQUlMX1BPSU5URVJfUkVHX1BDSV8xX1NJREUgICAgICAgMHgwRjQKKyNkZWZpbmUgTVY2NDM0MF9JMk9fT1VUQk9VTkRfUE9TVF9IRUFEX1BPSU5URVJfUkVHX1BDSV8xX1NJREUgICAgICAgMHgwNzgKKyNkZWZpbmUgTVY2NDM0MF9JMk9fT1VUQk9VTkRfUE9TVF9UQUlMX1BPSU5URVJfUkVHX1BDSV8xX1NJREUgICAgICAgMHgwN0MKKworI2RlZmluZSBNVjY0MzQwX0kyT19JTkJPVU5EX01FU1NBR0VfUkVHMF9DUFUwX1NJREUJCSAgICAweDFDMTAKKyNkZWZpbmUgTVY2NDM0MF9JMk9fSU5CT1VORF9NRVNTQUdFX1JFRzFfQ1BVMF9TSURFICAJCSAgICAweDFDMTQKKyNkZWZpbmUgTVY2NDM0MF9JMk9fT1VUQk9VTkRfTUVTU0FHRV9SRUcwX0NQVTBfU0lERSAJCSAgICAweDFDMTgKKyNkZWZpbmUgTVY2NDM0MF9JMk9fT1VUQk9VTkRfTUVTU0FHRV9SRUcxX0NQVTBfU0lERSAgCQkgICAgMHgxQzFDCisjZGVmaW5lIE1WNjQzNDBfSTJPX0lOQk9VTkRfRE9PUkJFTExfUkVHX0NQVTBfU0lERSAgCQkgICAgMHgxQzIwCisjZGVmaW5lIE1WNjQzNDBfSTJPX0lOQk9VTkRfSU5URVJSVVBUX0NBVVNFX1JFR19DUFUwX1NJREUgIAkgICAgMHgxQzI0CisjZGVmaW5lIE1WNjQzNDBfSTJPX0lOQk9VTkRfSU5URVJSVVBUX01BU0tfUkVHX0NQVTBfU0lERQkgICAgMHgxQzI4CisjZGVmaW5lIE1WNjQzNDBfSTJPX09VVEJPVU5EX0RPT1JCRUxMX1JFR19DUFUwX1NJREUgCQkgICAgMHgxQzJDCisjZGVmaW5lIE1WNjQzNDBfSTJPX09VVEJPVU5EX0lOVEVSUlVQVF9DQVVTRV9SRUdfQ1BVMF9TSURFICAgICAgICAgIDB4MUMzMAorI2RlZmluZSBNVjY0MzQwX0kyT19PVVRCT1VORF9JTlRFUlJVUFRfTUFTS19SRUdfQ1BVMF9TSURFICAgICAgICAgICAweDFDMzQKKyNkZWZpbmUgTVY2NDM0MF9JMk9fSU5CT1VORF9RVUVVRV9QT1JUX1ZJUlRVQUxfUkVHX0NQVTBfU0lERSAgICAgICAgMHgxQzQwCisjZGVmaW5lIE1WNjQzNDBfSTJPX09VVEJPVU5EX1FVRVVFX1BPUlRfVklSVFVBTF9SRUdfQ1BVMF9TSURFICAgICAgIDB4MUM0NAorI2RlZmluZSBNVjY0MzQwX0kyT19RVUVVRV9DT05UUk9MX1JFR19DUFUwX1NJREUgCQkgICAgMHgxQzUwCisjZGVmaW5lIE1WNjQzNDBfSTJPX1FVRVVFX0JBU0VfQUREUl9SRUdfQ1BVMF9TSURFIAkJICAgIDB4MUM1NAorI2RlZmluZSBNVjY0MzQwX0kyT19JTkJPVU5EX0ZSRUVfSEVBRF9QT0lOVEVSX1JFR19DUFUwX1NJREUgICAgICAgICAweDFDNjAKKyNkZWZpbmUgTVY2NDM0MF9JMk9fSU5CT1VORF9GUkVFX1RBSUxfUE9JTlRFUl9SRUdfQ1BVMF9TSURFICAgICAgICAgMHgxQzY0CisjZGVmaW5lIE1WNjQzNDBfSTJPX0lOQk9VTkRfUE9TVF9IRUFEX1BPSU5URVJfUkVHX0NQVTBfU0lERSAgICAgICAgIDB4MUM2OAorI2RlZmluZSBNVjY0MzQwX0kyT19JTkJPVU5EX1BPU1RfVEFJTF9QT0lOVEVSX1JFR19DUFUwX1NJREUgICAgICAgICAweDFDNkMKKyNkZWZpbmUgTVY2NDM0MF9JMk9fT1VUQk9VTkRfRlJFRV9IRUFEX1BPSU5URVJfUkVHX0NQVTBfU0lERSAgICAgICAgMHgxQzcwCisjZGVmaW5lIE1WNjQzNDBfSTJPX09VVEJPVU5EX0ZSRUVfVEFJTF9QT0lOVEVSX1JFR19DUFUwX1NJREUgICAgICAgIDB4MUM3NAorI2RlZmluZSBNVjY0MzQwX0kyT19PVVRCT1VORF9QT1NUX0hFQURfUE9JTlRFUl9SRUdfQ1BVMF9TSURFICAgICAgICAweDFDRjgKKyNkZWZpbmUgTVY2NDM0MF9JMk9fT1VUQk9VTkRfUE9TVF9UQUlMX1BPSU5URVJfUkVHX0NQVTBfU0lERSAgICAgICAgMHgxQ0ZDCisjZGVmaW5lIE1WNjQzNDBfSTJPX0lOQk9VTkRfTUVTU0FHRV9SRUcwX0NQVTFfU0lERQkJICAgIDB4MUM5MAorI2RlZmluZSBNVjY0MzQwX0kyT19JTkJPVU5EX01FU1NBR0VfUkVHMV9DUFUxX1NJREUgIAkJICAgIDB4MUM5NAorI2RlZmluZSBNVjY0MzQwX0kyT19PVVRCT1VORF9NRVNTQUdFX1JFRzBfQ1BVMV9TSURFIAkJICAgIDB4MUM5OAorI2RlZmluZSBNVjY0MzQwX0kyT19PVVRCT1VORF9NRVNTQUdFX1JFRzFfQ1BVMV9TSURFICAJCSAgICAweDFDOUMKKyNkZWZpbmUgTVY2NDM0MF9JMk9fSU5CT1VORF9ET09SQkVMTF9SRUdfQ1BVMV9TSURFICAJCSAgICAweDFDQTAKKyNkZWZpbmUgTVY2NDM0MF9JMk9fSU5CT1VORF9JTlRFUlJVUFRfQ0FVU0VfUkVHX0NQVTFfU0lERSAgCSAgICAweDFDQTQKKyNkZWZpbmUgTVY2NDM0MF9JMk9fSU5CT1VORF9JTlRFUlJVUFRfTUFTS19SRUdfQ1BVMV9TSURFCSAgICAweDFDQTgKKyNkZWZpbmUgTVY2NDM0MF9JMk9fT1VUQk9VTkRfRE9PUkJFTExfUkVHX0NQVTFfU0lERSAJCSAgICAweDFDQUMKKyNkZWZpbmUgTVY2NDM0MF9JMk9fT1VUQk9VTkRfSU5URVJSVVBUX0NBVVNFX1JFR19DUFUxX1NJREUgICAgICAgICAgMHgxQ0IwCisjZGVmaW5lIE1WNjQzNDBfSTJPX09VVEJPVU5EX0lOVEVSUlVQVF9NQVNLX1JFR19DUFUxX1NJREUgICAgICAgICAgIDB4MUNCNAorI2RlZmluZSBNVjY0MzQwX0kyT19JTkJPVU5EX1FVRVVFX1BPUlRfVklSVFVBTF9SRUdfQ1BVMV9TSURFICAgICAgICAweDFDQzAKKyNkZWZpbmUgTVY2NDM0MF9JMk9fT1VUQk9VTkRfUVVFVUVfUE9SVF9WSVJUVUFMX1JFR19DUFUxX1NJREUgICAgICAgMHgxQ0M0CisjZGVmaW5lIE1WNjQzNDBfSTJPX1FVRVVFX0NPTlRST0xfUkVHX0NQVTFfU0lERSAJCSAgICAweDFDRDAKKyNkZWZpbmUgTVY2NDM0MF9JMk9fUVVFVUVfQkFTRV9BRERSX1JFR19DUFUxX1NJREUgCQkgICAgMHgxQ0Q0CisjZGVmaW5lIE1WNjQzNDBfSTJPX0lOQk9VTkRfRlJFRV9IRUFEX1BPSU5URVJfUkVHX0NQVTFfU0lERSAgICAgICAgIDB4MUNFMAorI2RlZmluZSBNVjY0MzQwX0kyT19JTkJPVU5EX0ZSRUVfVEFJTF9QT0lOVEVSX1JFR19DUFUxX1NJREUgICAgICAgICAweDFDRTQKKyNkZWZpbmUgTVY2NDM0MF9JMk9fSU5CT1VORF9QT1NUX0hFQURfUE9JTlRFUl9SRUdfQ1BVMV9TSURFICAgICAgICAgMHgxQ0U4CisjZGVmaW5lIE1WNjQzNDBfSTJPX0lOQk9VTkRfUE9TVF9UQUlMX1BPSU5URVJfUkVHX0NQVTFfU0lERSAgICAgICAgIDB4MUNFQworI2RlZmluZSBNVjY0MzQwX0kyT19PVVRCT1VORF9GUkVFX0hFQURfUE9JTlRFUl9SRUdfQ1BVMV9TSURFICAgICAgICAweDFDRjAKKyNkZWZpbmUgTVY2NDM0MF9JMk9fT1VUQk9VTkRfRlJFRV9UQUlMX1BPSU5URVJfUkVHX0NQVTFfU0lERSAgICAgICAgMHgxQ0Y0CisjZGVmaW5lIE1WNjQzNDBfSTJPX09VVEJPVU5EX1BPU1RfSEVBRF9QT0lOVEVSX1JFR19DUFUxX1NJREUgICAgICAgIDB4MUM3OAorI2RlZmluZSBNVjY0MzQwX0kyT19PVVRCT1VORF9QT1NUX1RBSUxfUE9JTlRFUl9SRUdfQ1BVMV9TSURFICAgICAgICAweDFDN0MKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgRXRoZXJuZXQgVW5pdCBSZWdpc3RlcnMgIAkJKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIE1WNjQzWFhfRVRIX1NIQVJFRF9SRUdTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMAorI2RlZmluZSBNVjY0M1hYX0VUSF9TSEFSRURfUkVHU19TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAKKworI2RlZmluZSBNVjY0M1hYX0VUSF9QSFlfQUREUl9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAKKyNkZWZpbmUgTVY2NDNYWF9FVEhfU01JX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDA0CisjZGVmaW5lIE1WNjQzWFhfRVRIX1VOSVRfREVGQVVMVF9BRERSX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwOAorI2RlZmluZSBNVjY0M1hYX0VUSF9VTklUX0RFRkFVTFRJRF9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMGMKKyNkZWZpbmUgTVY2NDNYWF9FVEhfVU5JVF9JTlRFUlJVUFRfQ0FVU0VfUkVHICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDgwCisjZGVmaW5lIE1WNjQzWFhfRVRIX1VOSVRfSU5URVJSVVBUX01BU0tfUkVHICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjA4NAorI2RlZmluZSBNVjY0M1hYX0VUSF9VTklUX0lOVEVSTkFMX1VTRV9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI0ZmMKKyNkZWZpbmUgTVY2NDNYWF9FVEhfVU5JVF9FUlJPUl9BRERSX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDk0CisjZGVmaW5lIE1WNjQzWFhfRVRIX0JBUl8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjIwMAorI2RlZmluZSBNVjY0M1hYX0VUSF9CQVJfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIyMDgKKyNkZWZpbmUgTVY2NDNYWF9FVEhfQkFSXzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMjEwCisjZGVmaW5lIE1WNjQzWFhfRVRIX0JBUl8zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjIxOAorI2RlZmluZSBNVjY0M1hYX0VUSF9CQVJfNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIyMjAKKyNkZWZpbmUgTVY2NDNYWF9FVEhfQkFSXzUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMjI4CisjZGVmaW5lIE1WNjQzWFhfRVRIX1NJWkVfUkVHXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjIwNAorI2RlZmluZSBNVjY0M1hYX0VUSF9TSVpFX1JFR18xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIyMGMKKyNkZWZpbmUgTVY2NDNYWF9FVEhfU0laRV9SRUdfMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMjE0CisjZGVmaW5lIE1WNjQzWFhfRVRIX1NJWkVfUkVHXzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjIxYworI2RlZmluZSBNVjY0M1hYX0VUSF9TSVpFX1JFR180ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIyMjQKKyNkZWZpbmUgTVY2NDNYWF9FVEhfU0laRV9SRUdfNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMjJjCisjZGVmaW5lIE1WNjQzWFhfRVRIX0hFQURFUlNfUkVUQVJHRVRfQkFTRV9SRUcgICAgICAgICAgICAgICAgICAgICAgIDB4MjIzMAorI2RlZmluZSBNVjY0M1hYX0VUSF9IRUFERVJTX1JFVEFSR0VUX0NPTlRST0xfUkVHICAgICAgICAgICAgICAgICAgICAweDIyMzQKKyNkZWZpbmUgTVY2NDNYWF9FVEhfSElHSF9BRERSX1JFTUFQX1JFR18wICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMjgwCisjZGVmaW5lIE1WNjQzWFhfRVRIX0hJR0hfQUREUl9SRU1BUF9SRUdfMSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjI4NAorI2RlZmluZSBNVjY0M1hYX0VUSF9ISUdIX0FERFJfUkVNQVBfUkVHXzIgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIyODgKKyNkZWZpbmUgTVY2NDNYWF9FVEhfSElHSF9BRERSX1JFTUFQX1JFR18zICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMjhjCisjZGVmaW5lIE1WNjQzWFhfRVRIX0JBU0VfQUREUl9FTkFCTEVfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjI5MAorI2RlZmluZSBNVjY0M1hYX0VUSF9BQ0NFU1NfUFJPVEVDVElPTl9SRUcocG9ydCkgICAgICAgICAgICAgICAgICAgICgweDIyOTQgKyAocG9ydDw8MikpCisjZGVmaW5lIE1WNjQzWFhfRVRIX01JQl9DT1VOVEVSU19CQVNFKHBvcnQpICAgICAgICAgICAgICAgICAgICAgICAgKDB4MzAwMCArIChwb3J0PDw3KSkKKyNkZWZpbmUgTVY2NDNYWF9FVEhfUE9SVF9DT05GSUdfUkVHKHBvcnQpICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgyNDAwICsgKHBvcnQ8PDEwKSkKKyNkZWZpbmUgTVY2NDNYWF9FVEhfUE9SVF9DT05GSUdfRVhURU5EX1JFRyhwb3J0KSAgICAgICAgICAgICAgICAgICAoMHgyNDA0ICsgKHBvcnQ8PDEwKSkKKyNkZWZpbmUgTVY2NDNYWF9FVEhfTUlJX1NFUklBTF9QQVJBTUVUUlNfUkVHKHBvcnQpICAgICAgICAgICAgICAgICAoMHgyNDA4ICsgKHBvcnQ8PDEwKSkKKyNkZWZpbmUgTVY2NDNYWF9FVEhfR01JSV9TRVJJQUxfUEFSQU1FVFJTX1JFRyhwb3J0KSAgICAgICAgICAgICAgICAoMHgyNDBjICsgKHBvcnQ8PDEwKSkKKyNkZWZpbmUgTVY2NDNYWF9FVEhfVkxBTl9FVEhFUlRZUEVfUkVHKHBvcnQpICAgICAgICAgICAgICAgICAgICAgICAoMHgyNDEwICsgKHBvcnQ8PDEwKSkKKyNkZWZpbmUgTVY2NDNYWF9FVEhfTUFDX0FERFJfTE9XKHBvcnQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgyNDE0ICsgKHBvcnQ8PDEwKSkKKyNkZWZpbmUgTVY2NDNYWF9FVEhfTUFDX0FERFJfSElHSChwb3J0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgyNDE4ICsgKHBvcnQ8PDEwKSkKKyNkZWZpbmUgTVY2NDNYWF9FVEhfU0RNQV9DT05GSUdfUkVHKHBvcnQpICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgyNDFjICsgKHBvcnQ8PDEwKSkKKyNkZWZpbmUgTVY2NDNYWF9FVEhfRFNDUF8wKHBvcnQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgyNDIwICsgKHBvcnQ8PDEwKSkKKyNkZWZpbmUgTVY2NDNYWF9FVEhfRFNDUF8xKHBvcnQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgyNDI0ICsgKHBvcnQ8PDEwKSkKKyNkZWZpbmUgTVY2NDNYWF9FVEhfRFNDUF8yKHBvcnQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgyNDI4ICsgKHBvcnQ8PDEwKSkKKyNkZWZpbmUgTVY2NDNYWF9FVEhfRFNDUF8zKHBvcnQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgyNDJjICsgKHBvcnQ8PDEwKSkKKyNkZWZpbmUgTVY2NDNYWF9FVEhfRFNDUF80KHBvcnQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgyNDMwICsgKHBvcnQ8PDEwKSkKKyNkZWZpbmUgTVY2NDNYWF9FVEhfRFNDUF81KHBvcnQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgyNDM0ICsgKHBvcnQ8PDEwKSkKKyNkZWZpbmUgTVY2NDNYWF9FVEhfRFNDUF82KHBvcnQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgyNDM4ICsgKHBvcnQ8PDEwKSkKKyNkZWZpbmUgTVY2NDNYWF9FVEhfUE9SVF9TRVJJQUxfQ09OVFJPTF9SRUcocG9ydCkgICAgICAgICAgICAgICAgICAoMHgyNDNjICsgKHBvcnQ8PDEwKSkKKyNkZWZpbmUgTVY2NDNYWF9FVEhfVkxBTl9QUklPUklUWV9UQUdfVE9fUFJJT1JJVFkocG9ydCkgICAgICAgICAgICAoMHgyNDQwICsgKHBvcnQ8PDEwKSkKKyNkZWZpbmUgTVY2NDNYWF9FVEhfUE9SVF9TVEFUVVNfUkVHKHBvcnQpICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgyNDQ0ICsgKHBvcnQ8PDEwKSkKKyNkZWZpbmUgTVY2NDNYWF9FVEhfVFJBTlNNSVRfUVVFVUVfQ09NTUFORF9SRUcocG9ydCkgICAgICAgICAgICAgICAoMHgyNDQ4ICsgKHBvcnQ8PDEwKSkKKyNkZWZpbmUgTVY2NDNYWF9FVEhfVFhfUVVFVUVfRklYRURfUFJJT1JJVFkocG9ydCkgICAgICAgICAgICAgICAgICAoMHgyNDRjICsgKHBvcnQ8PDEwKSkKKyNkZWZpbmUgTVY2NDNYWF9FVEhfUE9SVF9UWF9UT0tFTl9CVUNLRVRfUkFURV9DT05GSUcocG9ydCkgICAgICAgICAoMHgyNDUwICsgKHBvcnQ8PDEwKSkKKyNkZWZpbmUgTVY2NDNYWF9FVEhfTUFYSU1VTV9UUkFOU01JVF9VTklUKHBvcnQpICAgICAgICAgICAgICAgICAgICAoMHgyNDU4ICsgKHBvcnQ8PDEwKSkKKyNkZWZpbmUgTVY2NDNYWF9FVEhfUE9SVF9NQVhJTVVNX1RPS0VOX0JVQ0tFVF9TSVpFKHBvcnQpICAgICAgICAgICAoMHgyNDVjICsgKHBvcnQ8PDEwKSkKKyNkZWZpbmUgTVY2NDNYWF9FVEhfSU5URVJSVVBUX0NBVVNFX1JFRyhwb3J0KSAgICAgICAgICAgICAgICAgICAgICAoMHgyNDYwICsgKHBvcnQ8PDEwKSkKKyNkZWZpbmUgTVY2NDNYWF9FVEhfSU5URVJSVVBUX0NBVVNFX0VYVEVORF9SRUcocG9ydCkgICAgICAgICAgICAgICAoMHgyNDY0ICsgKHBvcnQ8PDEwKSkKKyNkZWZpbmUgTVY2NDNYWF9FVEhfSU5URVJSVVBUX01BU0tfUkVHKHBvcnQpICAgICAgICAgICAgICAgICAgICAgICAoMHgyNDY4ICsgKHBvcnQ8PDEwKSkKKyNkZWZpbmUgTVY2NDNYWF9FVEhfSU5URVJSVVBUX0VYVEVORF9NQVNLX1JFRyhwb3J0KSAgICAgICAgICAgICAgICAoMHgyNDZjICsgKHBvcnQ8PDEwKSkKKyNkZWZpbmUgTVY2NDNYWF9FVEhfUlhfRklGT19VUkdFTlRfVEhSRVNIT0xEX1JFRyhwb3J0KSAgICAgICAgICAgICAoMHgyNDcwICsgKHBvcnQ8PDEwKSkKKyNkZWZpbmUgTVY2NDNYWF9FVEhfVFhfRklGT19VUkdFTlRfVEhSRVNIT0xEX1JFRyhwb3J0KSAgICAgICAgICAgICAoMHgyNDc0ICsgKHBvcnQ8PDEwKSkKKyNkZWZpbmUgTVY2NDNYWF9FVEhfUlhfTUlOSU1BTF9GUkFNRV9TSVpFX1JFRyhwb3J0KSAgICAgICAgICAgICAgICAoMHgyNDdjICsgKHBvcnQ8PDEwKSkKKyNkZWZpbmUgTVY2NDNYWF9FVEhfUlhfRElTQ0FSREVEX0ZSQU1FU19DT1VOVEVSKHBvcnQpICAgICAgICAgICAgICAoMHgyNDg0ICsgKHBvcnQ8PDEwKQorI2RlZmluZSBNVjY0M1hYX0VUSF9QT1JUX0RFQlVHXzBfUkVHKHBvcnQpICAgICAgICAgICAgICAgICAgICAgICAgICgweDI0OGMgKyAocG9ydDw8MTApKQorI2RlZmluZSBNVjY0M1hYX0VUSF9QT1JUX0RFQlVHXzFfUkVHKHBvcnQpICAgICAgICAgICAgICAgICAgICAgICAgICgweDI0OTAgKyAocG9ydDw8MTApKQorI2RlZmluZSBNVjY0M1hYX0VUSF9QT1JUX0lOVEVSTkFMX0FERFJfRVJST1JfUkVHKHBvcnQpICAgICAgICAgICAgICgweDI0OTQgKyAocG9ydDw8MTApKQorI2RlZmluZSBNVjY0M1hYX0VUSF9JTlRFUk5BTF9VU0VfUkVHKHBvcnQpICAgICAgICAgICAgICAgICAgICAgICAgICgweDI0ZmMgKyAocG9ydDw8MTApKQorI2RlZmluZSBNVjY0M1hYX0VUSF9SRUNFSVZFX1FVRVVFX0NPTU1BTkRfUkVHKHBvcnQpICAgICAgICAgICAgICAgICgweDI2ODAgKyAocG9ydDw8MTApKQorI2RlZmluZSBNVjY0M1hYX0VUSF9DVVJSRU5UX1NFUlZFRF9UWF9ERVNDX1BUUihwb3J0KSAgICAgICAgICAgICAgICgweDI2ODQgKyAocG9ydDw8MTApKSAgICAgIAorI2RlZmluZSBNVjY0M1hYX0VUSF9SWF9DVVJSRU5UX1FVRVVFX0RFU0NfUFRSXzAocG9ydCkgICAgICAgICAgICAgICgweDI2MGMgKyAocG9ydDw8MTApKSAgICAgCisjZGVmaW5lIE1WNjQzWFhfRVRIX1JYX0NVUlJFTlRfUVVFVUVfREVTQ19QVFJfMShwb3J0KSAgICAgICAgICAgICAgKDB4MjYxYyArIChwb3J0PDwxMCkpICAgICAKKyNkZWZpbmUgTVY2NDNYWF9FVEhfUlhfQ1VSUkVOVF9RVUVVRV9ERVNDX1BUUl8yKHBvcnQpICAgICAgICAgICAgICAoMHgyNjJjICsgKHBvcnQ8PDEwKSkgICAgIAorI2RlZmluZSBNVjY0M1hYX0VUSF9SWF9DVVJSRU5UX1FVRVVFX0RFU0NfUFRSXzMocG9ydCkgICAgICAgICAgICAgICgweDI2M2MgKyAocG9ydDw8MTApKSAgICAgCisjZGVmaW5lIE1WNjQzWFhfRVRIX1JYX0NVUlJFTlRfUVVFVUVfREVTQ19QVFJfNChwb3J0KSAgICAgICAgICAgICAgKDB4MjY0YyArIChwb3J0PDwxMCkpICAgICAKKyNkZWZpbmUgTVY2NDNYWF9FVEhfUlhfQ1VSUkVOVF9RVUVVRV9ERVNDX1BUUl81KHBvcnQpICAgICAgICAgICAgICAoMHgyNjVjICsgKHBvcnQ8PDEwKSkgICAgIAorI2RlZmluZSBNVjY0M1hYX0VUSF9SWF9DVVJSRU5UX1FVRVVFX0RFU0NfUFRSXzYocG9ydCkgICAgICAgICAgICAgICgweDI2NmMgKyAocG9ydDw8MTApKSAgICAgCisjZGVmaW5lIE1WNjQzWFhfRVRIX1JYX0NVUlJFTlRfUVVFVUVfREVTQ19QVFJfNyhwb3J0KSAgICAgICAgICAgICAgKDB4MjY3YyArIChwb3J0PDwxMCkpICAgICAKKyNkZWZpbmUgTVY2NDNYWF9FVEhfVFhfQ1VSUkVOVF9RVUVVRV9ERVNDX1BUUl8wKHBvcnQpICAgICAgICAgICAgICAoMHgyNmMwICsgKHBvcnQ8PDEwKSkgICAgIAorI2RlZmluZSBNVjY0M1hYX0VUSF9UWF9DVVJSRU5UX1FVRVVFX0RFU0NfUFRSXzEocG9ydCkgICAgICAgICAgICAgICgweDI2YzQgKyAocG9ydDw8MTApKSAgICAgCisjZGVmaW5lIE1WNjQzWFhfRVRIX1RYX0NVUlJFTlRfUVVFVUVfREVTQ19QVFJfMihwb3J0KSAgICAgICAgICAgICAgKDB4MjZjOCArIChwb3J0PDwxMCkpICAgICAKKyNkZWZpbmUgTVY2NDNYWF9FVEhfVFhfQ1VSUkVOVF9RVUVVRV9ERVNDX1BUUl8zKHBvcnQpICAgICAgICAgICAgICAoMHgyNmNjICsgKHBvcnQ8PDEwKSkgICAgIAorI2RlZmluZSBNVjY0M1hYX0VUSF9UWF9DVVJSRU5UX1FVRVVFX0RFU0NfUFRSXzQocG9ydCkgICAgICAgICAgICAgICgweDI2ZDAgKyAocG9ydDw8MTApKSAgICAgCisjZGVmaW5lIE1WNjQzWFhfRVRIX1RYX0NVUlJFTlRfUVVFVUVfREVTQ19QVFJfNShwb3J0KSAgICAgICAgICAgICAgKDB4MjZkNCArIChwb3J0PDwxMCkpICAgICAKKyNkZWZpbmUgTVY2NDNYWF9FVEhfVFhfQ1VSUkVOVF9RVUVVRV9ERVNDX1BUUl82KHBvcnQpICAgICAgICAgICAgICAoMHgyNmQ4ICsgKHBvcnQ8PDEwKSkgICAgIAorI2RlZmluZSBNVjY0M1hYX0VUSF9UWF9DVVJSRU5UX1FVRVVFX0RFU0NfUFRSXzcocG9ydCkgICAgICAgICAgICAgICgweDI2ZGMgKyAocG9ydDw8MTApKSAgICAgCisjZGVmaW5lIE1WNjQzWFhfRVRIX1RYX1FVRVVFXzBfVE9LRU5fQlVDS0VUX0NPVU5UKHBvcnQpICAgICAgICAgICAgKDB4MjcwMCArIChwb3J0PDwxMCkpCisjZGVmaW5lIE1WNjQzWFhfRVRIX1RYX1FVRVVFXzFfVE9LRU5fQlVDS0VUX0NPVU5UKHBvcnQpICAgICAgICAgICAgKDB4MjcxMCArIChwb3J0PDwxMCkpCisjZGVmaW5lIE1WNjQzWFhfRVRIX1RYX1FVRVVFXzJfVE9LRU5fQlVDS0VUX0NPVU5UKHBvcnQpICAgICAgICAgICAgKDB4MjcyMCArIChwb3J0PDwxMCkpCisjZGVmaW5lIE1WNjQzWFhfRVRIX1RYX1FVRVVFXzNfVE9LRU5fQlVDS0VUX0NPVU5UKHBvcnQpICAgICAgICAgICAgKDB4MjczMCArIChwb3J0PDwxMCkpCisjZGVmaW5lIE1WNjQzWFhfRVRIX1RYX1FVRVVFXzRfVE9LRU5fQlVDS0VUX0NPVU5UKHBvcnQpICAgICAgICAgICAgKDB4Mjc0MCArIChwb3J0PDwxMCkpCisjZGVmaW5lIE1WNjQzWFhfRVRIX1RYX1FVRVVFXzVfVE9LRU5fQlVDS0VUX0NPVU5UKHBvcnQpICAgICAgICAgICAgKDB4Mjc1MCArIChwb3J0PDwxMCkpCisjZGVmaW5lIE1WNjQzWFhfRVRIX1RYX1FVRVVFXzZfVE9LRU5fQlVDS0VUX0NPVU5UKHBvcnQpICAgICAgICAgICAgKDB4Mjc2MCArIChwb3J0PDwxMCkpCisjZGVmaW5lIE1WNjQzWFhfRVRIX1RYX1FVRVVFXzdfVE9LRU5fQlVDS0VUX0NPVU5UKHBvcnQpICAgICAgICAgICAgKDB4Mjc3MCArIChwb3J0PDwxMCkpCisjZGVmaW5lIE1WNjQzWFhfRVRIX1RYX1FVRVVFXzBfVE9LRU5fQlVDS0VUX0NPTkZJRyhwb3J0KSAgICAgICAgICAgKDB4MjcwNCArIChwb3J0PDwxMCkpCisjZGVmaW5lIE1WNjQzWFhfRVRIX1RYX1FVRVVFXzFfVE9LRU5fQlVDS0VUX0NPTkZJRyhwb3J0KSAgICAgICAgICAgKDB4MjcxNCArIChwb3J0PDwxMCkpCisjZGVmaW5lIE1WNjQzWFhfRVRIX1RYX1FVRVVFXzJfVE9LRU5fQlVDS0VUX0NPTkZJRyhwb3J0KSAgICAgICAgICAgKDB4MjcyNCArIChwb3J0PDwxMCkpCisjZGVmaW5lIE1WNjQzWFhfRVRIX1RYX1FVRVVFXzNfVE9LRU5fQlVDS0VUX0NPTkZJRyhwb3J0KSAgICAgICAgICAgKDB4MjczNCArIChwb3J0PDwxMCkpCisjZGVmaW5lIE1WNjQzWFhfRVRIX1RYX1FVRVVFXzRfVE9LRU5fQlVDS0VUX0NPTkZJRyhwb3J0KSAgICAgICAgICAgKDB4Mjc0NCArIChwb3J0PDwxMCkpCisjZGVmaW5lIE1WNjQzWFhfRVRIX1RYX1FVRVVFXzVfVE9LRU5fQlVDS0VUX0NPTkZJRyhwb3J0KSAgICAgICAgICAgKDB4Mjc1NCArIChwb3J0PDwxMCkpCisjZGVmaW5lIE1WNjQzWFhfRVRIX1RYX1FVRVVFXzZfVE9LRU5fQlVDS0VUX0NPTkZJRyhwb3J0KSAgICAgICAgICAgKDB4Mjc2NCArIChwb3J0PDwxMCkpCisjZGVmaW5lIE1WNjQzWFhfRVRIX1RYX1FVRVVFXzdfVE9LRU5fQlVDS0VUX0NPTkZJRyhwb3J0KSAgICAgICAgICAgKDB4Mjc3NCArIChwb3J0PDwxMCkpCisjZGVmaW5lIE1WNjQzWFhfRVRIX1RYX1FVRVVFXzBfQVJCSVRFUl9DT05GSUcocG9ydCkgICAgICAgICAgICAgICAgKDB4MjcwOCArIChwb3J0PDwxMCkpCisjZGVmaW5lIE1WNjQzWFhfRVRIX1RYX1FVRVVFXzFfQVJCSVRFUl9DT05GSUcocG9ydCkgICAgICAgICAgICAgICAgKDB4MjcxOCArIChwb3J0PDwxMCkpCisjZGVmaW5lIE1WNjQzWFhfRVRIX1RYX1FVRVVFXzJfQVJCSVRFUl9DT05GSUcocG9ydCkgICAgICAgICAgICAgICAgKDB4MjcyOCArIChwb3J0PDwxMCkpCisjZGVmaW5lIE1WNjQzWFhfRVRIX1RYX1FVRVVFXzNfQVJCSVRFUl9DT05GSUcocG9ydCkgICAgICAgICAgICAgICAgKDB4MjczOCArIChwb3J0PDwxMCkpCisjZGVmaW5lIE1WNjQzWFhfRVRIX1RYX1FVRVVFXzRfQVJCSVRFUl9DT05GSUcocG9ydCkgICAgICAgICAgICAgICAgKDB4Mjc0OCArIChwb3J0PDwxMCkpCisjZGVmaW5lIE1WNjQzWFhfRVRIX1RYX1FVRVVFXzVfQVJCSVRFUl9DT05GSUcocG9ydCkgICAgICAgICAgICAgICAgKDB4Mjc1OCArIChwb3J0PDwxMCkpCisjZGVmaW5lIE1WNjQzWFhfRVRIX1RYX1FVRVVFXzZfQVJCSVRFUl9DT05GSUcocG9ydCkgICAgICAgICAgICAgICAgKDB4Mjc2OCArIChwb3J0PDwxMCkpCisjZGVmaW5lIE1WNjQzWFhfRVRIX1RYX1FVRVVFXzdfQVJCSVRFUl9DT05GSUcocG9ydCkgICAgICAgICAgICAgICAgKDB4Mjc3OCArIChwb3J0PDwxMCkpCisjZGVmaW5lIE1WNjQzWFhfRVRIX1BPUlRfVFhfVE9LRU5fQlVDS0VUX0NPVU5UKHBvcnQpICAgICAgICAgICAgICAgKDB4Mjc4MCArIChwb3J0PDwxMCkpCisjZGVmaW5lIE1WNjQzWFhfRVRIX0RBX0ZJTFRFUl9TUEVDSUFMX01VTFRJQ0FTVF9UQUJMRV9CQVNFKHBvcnQpICAgKDB4MzQwMCArIChwb3J0PDwxMCkpCisjZGVmaW5lIE1WNjQzWFhfRVRIX0RBX0ZJTFRFUl9PVEhFUl9NVUxUSUNBU1RfVEFCTEVfQkFTRShwb3J0KSAgICAgKDB4MzUwMCArIChwb3J0PDwxMCkpCisjZGVmaW5lIE1WNjQzWFhfRVRIX0RBX0ZJTFRFUl9VTklDQVNUX1RBQkxFX0JBU0UocG9ydCkgICAgICAgICAgICAgKDB4MzYwMCArIChwb3J0PDwxMCkpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgQ1VOSVQgIFJlZ2lzdGVycyAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICAgICAgICAgLyogQWRkcmVzcyBEZWNvZGluZyBSZWdpc3RlciBNYXAgKi8KKyAgICAgICAgICAgCisjZGVmaW5lIE1WNjQzNDBfQ1VOSVRfQkFTRV9BRERSX1JFRzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZjIwMAorI2RlZmluZSBNVjY0MzQwX0NVTklUX0JBU0VfQUREUl9SRUcxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGYyMDgKKyNkZWZpbmUgTVY2NDM0MF9DVU5JVF9CQVNFX0FERFJfUkVHMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmMjEwCisjZGVmaW5lIE1WNjQzNDBfQ1VOSVRfQkFTRV9BRERSX1JFRzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZjIxOAorI2RlZmluZSBNVjY0MzQwX0NVTklUX1NJWkUwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGYyMDQKKyNkZWZpbmUgTVY2NDM0MF9DVU5JVF9TSVpFMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmMjBjCisjZGVmaW5lIE1WNjQzNDBfQ1VOSVRfU0laRTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZjIxNAorI2RlZmluZSBNVjY0MzQwX0NVTklUX1NJWkUzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGYyMWMKKyNkZWZpbmUgTVY2NDM0MF9DVU5JVF9ISUdIX0FERFJfUkVNQVBfUkVHMCAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmMjQwCisjZGVmaW5lIE1WNjQzNDBfQ1VOSVRfSElHSF9BRERSX1JFTUFQX1JFRzEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZjI0NAorI2RlZmluZSBNVjY0MzQwX0NVTklUX0JBU0VfQUREUl9FTkFCTEVfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAweGYyNTAKKyNkZWZpbmUgTVY2NDM0MF9NUFNDMF9BQ0NFU1NfUFJPVEVDVElPTl9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgMHhmMjU0CisjZGVmaW5lIE1WNjQzNDBfTVBTQzFfQUNDRVNTX1BST1RFQ1RJT05fUkVHICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZjI1OAorI2RlZmluZSBNVjY0MzQwX0NVTklUX0lOVEVSTkFMX1NQQUNFX0JBU0VfQUREUl9SRUcgICAgICAgICAgICAgICAgICAweGYyNUMKKworICAgICAgICAvKiAgRXJyb3IgUmVwb3J0IFJlZ2lzdGVycyAgKi8KKworI2RlZmluZSBNVjY0MzQwX0NVTklUX0lOVEVSUlVQVF9DQVVTRV9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAweGYzMTAKKyNkZWZpbmUgTVY2NDM0MF9DVU5JVF9JTlRFUlJVUFRfTUFTS19SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmMzE0CisjZGVmaW5lIE1WNjQzNDBfQ1VOSVRfRVJST1JfQUREUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZjMxOAorCisgICAgICAgIC8qICBDdW5pdCBDb250cm9sIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIE1WNjQzNDBfQ1VOSVRfQVJCSVRFUl9DT05UUk9MX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZjMwMAorI2RlZmluZSBNVjY0MzQwX0NVTklUX0NPTkZJR19SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGI0MGMKKyNkZWZpbmUgTVY2NDM0MF9DVU5JVF9DUlJPU0JBUl9USU1FT1VUX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmMzA0CisKKyAgICAgICAgLyogIEN1bml0IERlYnVnIFJlZ2lzdGVycyAgICovCisKKyNkZWZpbmUgTVY2NDM0MF9DVU5JVF9ERUJVR19MT1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmMzQwCisjZGVmaW5lIE1WNjQzNDBfQ1VOSVRfREVCVUdfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZjM0NAorI2RlZmluZSBNVjY0MzQwX0NVTklUX01NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGYzODAKKworICAgICAgICAvKiAgTVBTQ3MgQ2xvY2tzIFJvdXRpbmcgUmVnaXN0ZXJzICAqLworCisjZGVmaW5lIE1WNjQzNDBfTVBTQ19ST1VUSU5HX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4YjQwMAorI2RlZmluZSBNVjY0MzQwX01QU0NfUlhfQ0xPQ0tfUk9VVElOR19SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAweGI0MDQKKyNkZWZpbmUgTVY2NDM0MF9NUFNDX1RYX0NMT0NLX1JPVVRJTkdfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhiNDA4CisKKyAgICAgICAgLyogIE1QU0NzIEludGVycnVwdHMgUmVnaXN0ZXJzICAgICovCisKKyNkZWZpbmUgTVY2NDM0MF9NUFNDX0NBVVNFX1JFRyhwb3J0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHhiODA0ICsgKHBvcnQ8PDMpKQorI2RlZmluZSBNVjY0MzQwX01QU0NfTUFTS19SRUcocG9ydCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweGI4ODQgKyAocG9ydDw8MykpCisgCisjZGVmaW5lIE1WNjQzNDBfTVBTQ19NQUlOX0NPTkZJR19MT1cocG9ydCkgICAgICAgICAgICAgICAgICAgICAgICAgKDB4ODAwMCArIChwb3J0PDwxMikpCisjZGVmaW5lIE1WNjQzNDBfTVBTQ19NQUlOX0NPTkZJR19ISUdIKHBvcnQpICAgICAgICAgICAgICAgICAgICAgICAgKDB4ODAwNCArIChwb3J0PDwxMikpICAgIAorI2RlZmluZSBNVjY0MzQwX01QU0NfUFJPVE9DT0xfQ09ORklHKHBvcnQpICAgICAgICAgICAgICAgICAgICAgICAgICgweDgwMDggKyAocG9ydDw8MTIpKSAgICAKKyNkZWZpbmUgTVY2NDM0MF9NUFNDX0NIQU5ORUxfUkVHMShwb3J0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg4MDBjICsgKHBvcnQ8PDEyKSkgICAgCisjZGVmaW5lIE1WNjQzNDBfTVBTQ19DSEFOTkVMX1JFRzIocG9ydCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4ODAxMCArIChwb3J0PDwxMikpICAgIAorI2RlZmluZSBNVjY0MzQwX01QU0NfQ0hBTk5FTF9SRUczKHBvcnQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDgwMTQgKyAocG9ydDw8MTIpKSAgICAKKyNkZWZpbmUgTVY2NDM0MF9NUFNDX0NIQU5ORUxfUkVHNChwb3J0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg4MDE4ICsgKHBvcnQ8PDEyKSkgICAgCisjZGVmaW5lIE1WNjQzNDBfTVBTQ19DSEFOTkVMX1JFRzUocG9ydCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4ODAxYyArIChwb3J0PDwxMikpICAgIAorI2RlZmluZSBNVjY0MzQwX01QU0NfQ0hBTk5FTF9SRUc2KHBvcnQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDgwMjAgKyAocG9ydDw8MTIpKSAgICAKKyNkZWZpbmUgTVY2NDM0MF9NUFNDX0NIQU5ORUxfUkVHNyhwb3J0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg4MDI0ICsgKHBvcnQ8PDEyKSkgICAgCisjZGVmaW5lIE1WNjQzNDBfTVBTQ19DSEFOTkVMX1JFRzgocG9ydCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4ODAyOCArIChwb3J0PDwxMikpICAgIAorI2RlZmluZSBNVjY0MzQwX01QU0NfQ0hBTk5FTF9SRUc5KHBvcnQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDgwMmMgKyAocG9ydDw8MTIpKSAgICAKKyNkZWZpbmUgTVY2NDM0MF9NUFNDX0NIQU5ORUxfUkVHMTAocG9ydCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg4MDMwICsgKHBvcnQ8PDEyKSkgICAgCisgICAgICAgIAorICAgICAgICAvKiAgTVBTQzAgUmVnaXN0ZXJzICAgICAgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgU0RNQSBSZWdpc3RlcnMgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgTVY2NDM0MF9TRE1BX0NPTkZJR19SRUcoY2hhbm5lbCkgICAgICAgICAgICAgICAgICAgICAgICAoMHg0MDAwICsgKGNoYW5uZWw8PDEzKSkgICAgICAgIAorI2RlZmluZSBNVjY0MzQwX1NETUFfQ09NTUFORF9SRUcoY2hhbm5lbCkgICAgICAgICAgICAgICAgICAgICAgICgweDQwMDggKyAoY2hhbm5lbDw8MTMpKSAgICAgICAgCisjZGVmaW5lIE1WNjQzNDBfU0RNQV9DVVJSRU5UX1JYX0RFU0NSSVBUT1JfUE9JTlRFUihjaGFubmVsKSAgICAgKDB4NDgxMCArIChjaGFubmVsPDwxMykpICAgICAgICAKKyNkZWZpbmUgTVY2NDM0MF9TRE1BX0NVUlJFTlRfVFhfREVTQ1JJUFRPUl9QT0lOVEVSKGNoYW5uZWwpICAgICAoMHg0YzEwICsgKGNoYW5uZWw8PDEzKSkgICAgICAgIAorI2RlZmluZSBNVjY0MzQwX1NETUFfRklSU1RfVFhfREVTQ1JJUFRPUl9QT0lOVEVSKGNoYW5uZWwpICAgICAgICgweDRjMTQgKyAoY2hhbm5lbDw8MTMpKSAKKworI2RlZmluZSBNVjY0MzQwX1NETUFfQ0FVU0VfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGI4MDAKKyNkZWZpbmUgTVY2NDM0MF9TRE1BX01BU0tfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhiODgwCisgICAgICAgICAKKy8qIEJSRyBJbnRlcnJ1cHRzICovCisKKyNkZWZpbmUgTVY2NDM0MF9CUkdfQ09ORklHX1JFRyhicmcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4YjIwMCArIChicmc8PDMpKQorI2RlZmluZSBNVjY0MzQwX0JSR19CQVVERV9UVU5JTkdfUkVHKGJyZykgICAgICAgICAgICAgICAgICAgICAgICAoMHhiMjA4ICsgKGJyZzw8MykpCisjZGVmaW5lIE1WNjQzNDBfQlJHX0NBVVNFX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4YjgzNAorI2RlZmluZSBNVjY0MzQwX0JSR19NQVNLX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGI4YjQKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBETUEgQ2hhbm5lbCBDb250cm9sCQkJKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIE1WNjQzNDBfRE1BX0NIQU5ORUwwX0NPTlRST0wgCQkJCSAgICAweDg0MAorI2RlZmluZSBNVjY0MzQwX0RNQV9DSEFOTkVMMF9DT05UUk9MX0hJR0gJCQkgICAgMHg4ODAKKyNkZWZpbmUgTVY2NDM0MF9ETUFfQ0hBTk5FTDFfQ09OVFJPTCAJCQkJICAgIDB4ODQ0CisjZGVmaW5lIE1WNjQzNDBfRE1BX0NIQU5ORUwxX0NPTlRST0xfSElHSAkJCSAgICAweDg4NAorI2RlZmluZSBNVjY0MzQwX0RNQV9DSEFOTkVMMl9DT05UUk9MIAkJCQkgICAgMHg4NDgKKyNkZWZpbmUgTVY2NDM0MF9ETUFfQ0hBTk5FTDJfQ09OVFJPTF9ISUdICQkJICAgIDB4ODg4CisjZGVmaW5lIE1WNjQzNDBfRE1BX0NIQU5ORUwzX0NPTlRST0wgCQkJCSAgICAweDg0QworI2RlZmluZSBNVjY0MzQwX0RNQV9DSEFOTkVMM19DT05UUk9MX0hJR0gJCQkgICAgMHg4OEMKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICBJRE1BIFJlZ2lzdGVycyAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgTVY2NDM0MF9ETUFfQ0hBTk5FTDBfQllURV9DT1VOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAKKyNkZWZpbmUgTVY2NDM0MF9ETUFfQ0hBTk5FTDFfQllURV9DT1VOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDQKKyNkZWZpbmUgTVY2NDM0MF9ETUFfQ0hBTk5FTDJfQllURV9DT1VOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDgKKyNkZWZpbmUgTVY2NDM0MF9ETUFfQ0hBTk5FTDNfQllURV9DT1VOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MEMKKyNkZWZpbmUgTVY2NDM0MF9ETUFfQ0hBTk5FTDBfU09VUkNFX0FERFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MTAKKyNkZWZpbmUgTVY2NDM0MF9ETUFfQ0hBTk5FTDFfU09VUkNFX0FERFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MTQKKyNkZWZpbmUgTVY2NDM0MF9ETUFfQ0hBTk5FTDJfU09VUkNFX0FERFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MTgKKyNkZWZpbmUgTVY2NDM0MF9ETUFfQ0hBTk5FTDNfU09VUkNFX0FERFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MWMKKyNkZWZpbmUgTVY2NDM0MF9ETUFfQ0hBTk5FTDBfREVTVElOQVRJT05fQUREUiAgICAgICAgICAgICAgICAgICAgICAgMHg4MjAKKyNkZWZpbmUgTVY2NDM0MF9ETUFfQ0hBTk5FTDFfREVTVElOQVRJT05fQUREUiAgICAgICAgICAgICAgICAgICAgICAgMHg4MjQKKyNkZWZpbmUgTVY2NDM0MF9ETUFfQ0hBTk5FTDJfREVTVElOQVRJT05fQUREUiAgICAgICAgICAgICAgICAgICAgICAgMHg4MjgKKyNkZWZpbmUgTVY2NDM0MF9ETUFfQ0hBTk5FTDNfREVTVElOQVRJT05fQUREUiAgICAgICAgICAgICAgICAgICAgICAgMHg4MkMKKyNkZWZpbmUgTVY2NDM0MF9ETUFfQ0hBTk5FTDBfTkVYVF9ERVNDUklQVE9SX1BPSU5URVIgICAgICAgICAgICAgICAgMHg4MzAKKyNkZWZpbmUgTVY2NDM0MF9ETUFfQ0hBTk5FTDFfTkVYVF9ERVNDUklQVE9SX1BPSU5URVIgICAgICAgICAgICAgICAgMHg4MzQKKyNkZWZpbmUgTVY2NDM0MF9ETUFfQ0hBTk5FTDJfTkVYVF9ERVNDUklQVE9SX1BPSU5URVIgICAgICAgICAgICAgICAgMHg4MzgKKyNkZWZpbmUgTVY2NDM0MF9ETUFfQ0hBTk5FTDNfTkVYVF9ERVNDUklQVE9SX1BPSU5URVIgICAgICAgICAgICAgICAgMHg4M0MKKyNkZWZpbmUgTVY2NDM0MF9ETUFfQ0hBTk5FTDBfQ1VSUkVOVF9ERVNDUklQVE9SX1BPSU5URVIgICAgICAgICAgICAgMHg4NzAKKyNkZWZpbmUgTVY2NDM0MF9ETUFfQ0hBTk5FTDFfQ1VSUkVOVF9ERVNDUklQVE9SX1BPSU5URVIgICAgICAgICAgICAgMHg4NzQKKyNkZWZpbmUgTVY2NDM0MF9ETUFfQ0hBTk5FTDJfQ1VSUkVOVF9ERVNDUklQVE9SX1BPSU5URVIgICAgICAgICAgICAgMHg4NzgKKyNkZWZpbmUgTVY2NDM0MF9ETUFfQ0hBTk5FTDNfQ1VSUkVOVF9ERVNDUklQVE9SX1BPSU5URVIgICAgICAgICAgICAgMHg4N0MKKworIC8qICBJRE1BIEFkZHJlc3MgRGVjb2RpbmcgQmFzZSBBZGRyZXNzIFJlZ2lzdGVycyAgKi8KKyAKKyNkZWZpbmUgTVY2NDM0MF9ETUFfQkFTRV9BRERSX1JFRzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhhMDAKKyNkZWZpbmUgTVY2NDM0MF9ETUFfQkFTRV9BRERSX1JFRzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhhMDgKKyNkZWZpbmUgTVY2NDM0MF9ETUFfQkFTRV9BRERSX1JFRzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhhMTAKKyNkZWZpbmUgTVY2NDM0MF9ETUFfQkFTRV9BRERSX1JFRzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhhMTgKKyNkZWZpbmUgTVY2NDM0MF9ETUFfQkFTRV9BRERSX1JFRzQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhhMjAKKyNkZWZpbmUgTVY2NDM0MF9ETUFfQkFTRV9BRERSX1JFRzUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhhMjgKKyNkZWZpbmUgTVY2NDM0MF9ETUFfQkFTRV9BRERSX1JFRzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhhMzAKKyNkZWZpbmUgTVY2NDM0MF9ETUFfQkFTRV9BRERSX1JFRzcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhhMzgKKyAKKyAvKiAgSURNQSBBZGRyZXNzIERlY29kaW5nIFNpemUgQWRkcmVzcyBSZWdpc3RlciAgICovCisgCisjZGVmaW5lIE1WNjQzNDBfRE1BX1NJWkVfUkVHMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4YTA0CisjZGVmaW5lIE1WNjQzNDBfRE1BX1NJWkVfUkVHMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4YTBjCisjZGVmaW5lIE1WNjQzNDBfRE1BX1NJWkVfUkVHMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4YTE0CisjZGVmaW5lIE1WNjQzNDBfRE1BX1NJWkVfUkVHMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4YTFjCisjZGVmaW5lIE1WNjQzNDBfRE1BX1NJWkVfUkVHNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4YTI0CisjZGVmaW5lIE1WNjQzNDBfRE1BX1NJWkVfUkVHNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4YTJjCisjZGVmaW5lIE1WNjQzNDBfRE1BX1NJWkVfUkVHNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4YTM0CisjZGVmaW5lIE1WNjQzNDBfRE1BX1NJWkVfUkVHNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4YTNDCisKKyAvKiBJRE1BIEFkZHJlc3MgRGVjb2RpbmcgSGlnaCBBZGRyZXNzIFJlbWFwIGFuZCBBY2Nlc3MgCisgICAgICAgICAgICAgICAgICBQcm90ZWN0aW9uIFJlZ2lzdGVycyAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgIAorI2RlZmluZSBNVjY0MzQwX0RNQV9ISUdIX0FERFJfUkVNQVBfUkVHMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGE2MAorI2RlZmluZSBNVjY0MzQwX0RNQV9ISUdIX0FERFJfUkVNQVBfUkVHMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGE2NAorI2RlZmluZSBNVjY0MzQwX0RNQV9ISUdIX0FERFJfUkVNQVBfUkVHMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGE2OAorI2RlZmluZSBNVjY0MzQwX0RNQV9ISUdIX0FERFJfUkVNQVBfUkVHMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGE2QworI2RlZmluZSBNVjY0MzQwX0RNQV9CQVNFX0FERFJfRU5BQkxFX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGE4MAorI2RlZmluZSBNVjY0MzQwX0RNQV9DSEFOTkVMMF9BQ0NFU1NfUFJPVEVDVElPTl9SRUcgICAgICAgICAgICAgICAgICAweGE3MAorI2RlZmluZSBNVjY0MzQwX0RNQV9DSEFOTkVMMV9BQ0NFU1NfUFJPVEVDVElPTl9SRUcgICAgICAgICAgICAgICAgICAweGE3NAorI2RlZmluZSBNVjY0MzQwX0RNQV9DSEFOTkVMMl9BQ0NFU1NfUFJPVEVDVElPTl9SRUcgICAgICAgICAgICAgICAgICAweGE3OAorI2RlZmluZSBNVjY0MzQwX0RNQV9DSEFOTkVMM19BQ0NFU1NfUFJPVEVDVElPTl9SRUcgICAgICAgICAgICAgICAgICAweGE3YworI2RlZmluZSBNVjY0MzQwX0RNQV9BUkJJVEVSX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg2MAorI2RlZmluZSBNVjY0MzQwX0RNQV9DUk9TU19CQVJfVElNRU9VVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhkMAorCisgLyogIElETUEgSGVhZGVycyBSZXRhcmdldCBSZWdpc3RlcnMgICAqLworCisjZGVmaW5lIE1WNjQzNDBfRE1BX0hFQURFUlNfUkVUQVJHRVRfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgICAgIDB4YTg0CisjZGVmaW5lIE1WNjQzNDBfRE1BX0hFQURFUlNfUkVUQVJHRVRfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4YTg4CisKKyAvKiAgSURNQSBJbnRlcnJ1cHQgUmVnaXN0ZXIgICovCisKKyNkZWZpbmUgTVY2NDM0MF9ETUFfSU5URVJSVVBUX0NBVVNFX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4YzAKKyNkZWZpbmUgTVY2NDM0MF9ETUFfSU5URVJSVVBUX0NBVVNFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4YzQKKyNkZWZpbmUgTVY2NDM0MF9ETUFfRVJST1JfQUREUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4YzgKKyNkZWZpbmUgTVY2NDM0MF9ETUFfRVJST1JfU0VMRUNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4Y2MKKworIC8qICBJRE1BIERlYnVnIFJlZ2lzdGVyICggZm9yIGludGVybmFsIHVzZSApICAgICovCisKKyNkZWZpbmUgTVY2NDM0MF9ETUFfREVCVUdfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ZTAKKyNkZWZpbmUgTVY2NDM0MF9ETUFfREVCVUdfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ZTQKKyNkZWZpbmUgTVY2NDM0MF9ETUFfU1BBUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhBOEMKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBUaW1lcl9Db3VudGVyIAkJCSovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBNVjY0MzQwX1RJTUVSX0NPVU5URVIwCQkJCQkgICAgMHg4NTAKKyNkZWZpbmUgTVY2NDM0MF9USU1FUl9DT1VOVEVSMQkJCQkJICAgIDB4ODU0CisjZGVmaW5lIE1WNjQzNDBfVElNRVJfQ09VTlRFUjIJCQkJCSAgICAweDg1OAorI2RlZmluZSBNVjY0MzQwX1RJTUVSX0NPVU5URVIzCQkJCQkgICAgMHg4NUMKKyNkZWZpbmUgTVY2NDM0MF9USU1FUl9DT1VOVEVSXzBfM19DT05UUk9MCQkJICAgIDB4ODY0CisjZGVmaW5lIE1WNjQzNDBfVElNRVJfQ09VTlRFUl8wXzNfSU5URVJSVVBUX0NBVVNFCQkgICAgMHg4NjgKKyNkZWZpbmUgTVY2NDM0MF9USU1FUl9DT1VOVEVSXzBfM19JTlRFUlJVUFRfTUFTSyAgICAgIAkJICAgIDB4ODZjCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICBXYXRjaGRvZyByZWdpc3RlcnMgIAkgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBNVjY0MzQwX1dBVENIRE9HX0NPTkZJR19SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGI0MTAKKyNkZWZpbmUgTVY2NDM0MF9XQVRDSERPR19WQUxVRV9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhiNDE0CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogSTJDIFJlZ2lzdGVycyAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBNVjY0WFhYX0kyQ19DVExSX05BTUUJCQkJCSJtdjY0eHh4IGkyYyIKKyNkZWZpbmUgTVY2NFhYWF9JMkNfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhjMDAwCisjZGVmaW5lIE1WNjRYWFhfSTJDX1JFR19CTE9DS19TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEdQUCBJbnRlcmZhY2UgUmVnaXN0ZXJzICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgTVY2NDM0MF9HUFBfSU9fQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmMTAwCisjZGVmaW5lIE1WNjQzNDBfR1BQX0xFVkVMX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZjExMAorI2RlZmluZSBNVjY0MzQwX0dQUF9WQUxVRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGYxMDQKKyNkZWZpbmUgTVY2NDM0MF9HUFBfSU5URVJSVVBUX0NBVVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmMTA4CisjZGVmaW5lIE1WNjQzNDBfR1BQX0lOVEVSUlVQVF9NQVNLMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZjEwYworI2RlZmluZSBNVjY0MzQwX0dQUF9JTlRFUlJVUFRfTUFTSzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGYxMTQKKyNkZWZpbmUgTVY2NDM0MF9HUFBfVkFMVUVfU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmMTE4CisjZGVmaW5lIE1WNjQzNDBfR1BQX1ZBTFVFX0NMRUFSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZjExYworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEludGVycnVwdCBDb250cm9sbGVyIFJlZ2lzdGVycyAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogSW50ZXJydXB0cwkgIAkJCSovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBNVjY0MzQwX01BSU5fSU5URVJSVVBUX0NBVVNFX0xPVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNAorI2RlZmluZSBNVjY0MzQwX01BSU5fSU5URVJSVVBUX0NBVVNFX0hJR0ggICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwYworI2RlZmluZSBNVjY0MzQwX0NQVV9JTlRFUlJVUFQwX01BU0tfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxNAorI2RlZmluZSBNVjY0MzQwX0NQVV9JTlRFUlJVUFQwX01BU0tfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxYworI2RlZmluZSBNVjY0MzQwX0NQVV9JTlRFUlJVUFQwX1NFTEVDVF9DQVVTRSAgICAgICAgICAgICAgICAgICAgICAgICAweDAyNAorI2RlZmluZSBNVjY0MzQwX0NQVV9JTlRFUlJVUFQxX01BU0tfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAzNAorI2RlZmluZSBNVjY0MzQwX0NQVV9JTlRFUlJVUFQxX01BU0tfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAzYworI2RlZmluZSBNVjY0MzQwX0NQVV9JTlRFUlJVUFQxX1NFTEVDVF9DQVVTRSAgICAgICAgICAgICAgICAgICAgICAgICAweDA0NAorI2RlZmluZSBNVjY0MzQwX0lOVEVSUlVQVDBfTUFTS18wX0xPVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA1NAorI2RlZmluZSBNVjY0MzQwX0lOVEVSUlVQVDBfTUFTS18wX0hJR0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA1YworI2RlZmluZSBNVjY0MzQwX0lOVEVSUlVQVDBfU0VMRUNUX0NBVVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2NAorI2RlZmluZSBNVjY0MzQwX0lOVEVSUlVQVDFfTUFTS18wX0xPVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3NAorI2RlZmluZSBNVjY0MzQwX0lOVEVSUlVQVDFfTUFTS18wX0hJR0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3YworI2RlZmluZSBNVjY0MzQwX0lOVEVSUlVQVDFfU0VMRUNUX0NBVVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4NAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgTVBQIEludGVyZmFjZSBSZWdpc3RlcnMgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgTVY2NDM0MF9NUFBfQ09OVFJPTDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmMDAwCisjZGVmaW5lIE1WNjQzNDBfTVBQX0NPTlRST0wxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZjAwNAorI2RlZmluZSBNVjY0MzQwX01QUF9DT05UUk9MMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGYwMDgKKyNkZWZpbmUgTVY2NDM0MF9NUFBfQ09OVFJPTDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmMDBjCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgU2VyaWFsIEluaXRpYWxpemF0aW9uIHJlZ2lzdGVycyAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBNVjY0MzQwX1NFUklBTF9JTklUX0xBU1RfREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGYzMjQKKyNkZWZpbmUgTVY2NDM0MF9TRVJJQUxfSU5JVF9DT05UUk9MICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmMzI4CisjZGVmaW5lIE1WNjQzNDBfU0VSSUFMX0lOSVRfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZjMyYworCitleHRlcm4gdm9pZCBtdjY0MzQwX2lycV9pbml0KHVuc2lnbmVkIGludCBiYXNlKTsKKworLyogTVBTQyBQbGF0Zm9ybSBEZXZpY2UsIERyaXZlciBEYXRhIChTaGFyZWQgcmVnaXN0ZXIgcmVnaW9ucykgKi8KKyNkZWZpbmUJTVBTQ19TSEFSRURfTkFNRQkJIm1wc2Nfc2hhcmVkIgorCisjZGVmaW5lCU1QU0NfUk9VVElOR19CQVNFX09SREVSCQkwCisjZGVmaW5lCU1QU0NfU0RNQV9JTlRSX0JBU0VfT1JERVIJMQorCisjZGVmaW5lIE1QU0NfUk9VVElOR19SRUdfQkxPQ0tfU0laRQkweDAwMGMKKyNkZWZpbmUgTVBTQ19TRE1BX0lOVFJfUkVHX0JMT0NLX1NJWkUJMHgwMDg0CisKK3N0cnVjdCBtcHNjX3NoYXJlZF9wZGF0YSB7CisJdTMyCW1ycl92YWw7CisJdTMyCXJjcnJfdmFsOworCXUzMgl0Y3JyX3ZhbDsKKwl1MzIJaW50cl9jYXVzZV92YWw7CisJdTMyCWludHJfbWFza192YWw7Cit9OworCisvKiBNUFNDIFBsYXRmb3JtIERldmljZSwgRHJpdmVyIERhdGEgKi8KKyNkZWZpbmUJTVBTQ19DVExSX05BTUUJCQkibXBzYyIKKworI2RlZmluZQlNUFNDX0JBU0VfT1JERVIJCQkwCisjZGVmaW5lCU1QU0NfU0RNQV9CQVNFX09SREVSCQkxCisjZGVmaW5lCU1QU0NfQlJHX0JBU0VfT1JERVIJCTIKKworI2RlZmluZSBNUFNDX1JFR19CTE9DS19TSVpFCQkweDAwMzgKKyNkZWZpbmUgTVBTQ19TRE1BX1JFR19CTE9DS19TSVpFCTB4MGMxOAorI2RlZmluZSBNUFNDX0JSR19SRUdfQkxPQ0tfU0laRQkJMHgwMDA4CisKK3N0cnVjdCBtcHNjX3BkYXRhIHsKKwl1OAltaXJyb3JfcmVnczsKKwl1OAljYWNoZV9tZ210OworCXU4CW1heF9pZGxlOworCWludAlkZWZhdWx0X2JhdWQ7CisJaW50CWRlZmF1bHRfYml0czsKKwlpbnQJZGVmYXVsdF9wYXJpdHk7CisJaW50CWRlZmF1bHRfZmxvdzsKKwl1MzIJY2hyXzFfdmFsOworCXUzMgljaHJfMl92YWw7CisJdTMyCWNocl8xMF92YWw7CisJdTMyCW1wY3JfdmFsOworCXUzMgliY3JfdmFsOworCXU4CWJyZ19jYW5fdHVuZTsKKwl1OAlicmdfY2xrX3NyYzsKKwl1MzIJYnJnX2Nsa19mcmVxOworfTsKKworLyogaTJjIFBsYXRmb3JtIERldmljZSwgRHJpdmVyIERhdGEgKi8KK3N0cnVjdCBtdjY0eHh4X2kyY19wZGF0YSB7CisJdTMyCWZyZXFfbTsKKwl1MzIJZnJlcV9uOworCXUzMgl0aW1lb3V0OwkvKiBJbiBtaWxsaXNlY29uZHMgKi8KKwl1MzIJcmV0cmllczsKK307CisKKy8qIFRoZXNlIG1hY3JvcyBkZXNjcmliZSBFdGhlcm5ldCBQb3J0IGNvbmZpZ3VyYXRpb24gcmVnIChQeF9jUikgYml0cyAqLworI2RlZmluZSBNVjY0M1hYX0VUSF9VTklDQVNUX05PUk1BTF9NT0RFCQkwCisjZGVmaW5lIE1WNjQzWFhfRVRIX1VOSUNBU1RfUFJPTUlTQ1VPVVNfTU9ERQkoMTw8MCkKKyNkZWZpbmUgTVY2NDNYWF9FVEhfREVGQVVMVF9SWF9RVUVVRV8wCQkwCisjZGVmaW5lIE1WNjQzWFhfRVRIX0RFRkFVTFRfUlhfUVVFVUVfMQkJKDE8PDEpCisjZGVmaW5lIE1WNjQzWFhfRVRIX0RFRkFVTFRfUlhfUVVFVUVfMgkJKDE8PDIpCisjZGVmaW5lIE1WNjQzWFhfRVRIX0RFRkFVTFRfUlhfUVVFVUVfMwkJKCgxPDwyKSB8ICgxPDwxKSkKKyNkZWZpbmUgTVY2NDNYWF9FVEhfREVGQVVMVF9SWF9RVUVVRV80CQkoMTw8MykKKyNkZWZpbmUgTVY2NDNYWF9FVEhfREVGQVVMVF9SWF9RVUVVRV81CQkoKDE8PDMpIHwgKDE8PDEpKQorI2RlZmluZSBNVjY0M1hYX0VUSF9ERUZBVUxUX1JYX1FVRVVFXzYJCSgoMTw8MykgfCAoMTw8MikpCisjZGVmaW5lIE1WNjQzWFhfRVRIX0RFRkFVTFRfUlhfUVVFVUVfNwkJKCgxPDwzKSB8ICgxPDwyKSB8ICgxPDwxKSkKKyNkZWZpbmUgTVY2NDNYWF9FVEhfREVGQVVMVF9SWF9BUlBfUVVFVUVfMAkwCisjZGVmaW5lIE1WNjQzWFhfRVRIX0RFRkFVTFRfUlhfQVJQX1FVRVVFXzEJKDE8PDQpCisjZGVmaW5lIE1WNjQzWFhfRVRIX0RFRkFVTFRfUlhfQVJQX1FVRVVFXzIJKDE8PDUpCisjZGVmaW5lIE1WNjQzWFhfRVRIX0RFRkFVTFRfUlhfQVJQX1FVRVVFXzMJKCgxPDw1KSB8ICgxPDw0KSkKKyNkZWZpbmUgTVY2NDNYWF9FVEhfREVGQVVMVF9SWF9BUlBfUVVFVUVfNAkoMTw8NikKKyNkZWZpbmUgTVY2NDNYWF9FVEhfREVGQVVMVF9SWF9BUlBfUVVFVUVfNQkoKDE8PDYpIHwgKDE8PDQpKQorI2RlZmluZSBNVjY0M1hYX0VUSF9ERUZBVUxUX1JYX0FSUF9RVUVVRV82CSgoMTw8NikgfCAoMTw8NSkpCisjZGVmaW5lIE1WNjQzWFhfRVRIX0RFRkFVTFRfUlhfQVJQX1FVRVVFXzcJKCgxPDw2KSB8ICgxPDw1KSB8ICgxPDw0KSkKKyNkZWZpbmUgTVY2NDNYWF9FVEhfUkVDRUlWRV9CQ19JRl9OT1RfSVBfT1JfQVJQCTAKKyNkZWZpbmUgTVY2NDNYWF9FVEhfUkVKRUNUX0JDX0lGX05PVF9JUF9PUl9BUlAJKDE8PDcpCisjZGVmaW5lIE1WNjQzWFhfRVRIX1JFQ0VJVkVfQkNfSUZfSVAJCTAKKyNkZWZpbmUgTVY2NDNYWF9FVEhfUkVKRUNUX0JDX0lGX0lQCQkoMTw8OCkKKyNkZWZpbmUgTVY2NDNYWF9FVEhfUkVDRUlWRV9CQ19JRl9BUlAJCTAKKyNkZWZpbmUgTVY2NDNYWF9FVEhfUkVKRUNUX0JDX0lGX0FSUAkJKDE8PDkpCisjZGVmaW5lIE1WNjQzWFhfRVRIX1RYX0FNX05PX1VQREFURV9FUlJPUl9TVU1NQVJZICgxPDwxMikKKyNkZWZpbmUgTVY2NDNYWF9FVEhfQ0FQVFVSRV9UQ1BfRlJBTUVTX0RJUwkwCisjZGVmaW5lIE1WNjQzWFhfRVRIX0NBUFRVUkVfVENQX0ZSQU1FU19FTgkoMTw8MTQpCisjZGVmaW5lIE1WNjQzWFhfRVRIX0NBUFRVUkVfVURQX0ZSQU1FU19ESVMJMAorI2RlZmluZSBNVjY0M1hYX0VUSF9DQVBUVVJFX1VEUF9GUkFNRVNfRU4JKDE8PDE1KQorI2RlZmluZSBNVjY0M1hYX0VUSF9ERUZBVUxUX1JYX1RDUF9RVUVVRV8wCTAKKyNkZWZpbmUgTVY2NDNYWF9FVEhfREVGQVVMVF9SWF9UQ1BfUVVFVUVfMQkoMTw8MTYpCisjZGVmaW5lIE1WNjQzWFhfRVRIX0RFRkFVTFRfUlhfVENQX1FVRVVFXzIJKDE8PDE3KQorI2RlZmluZSBNVjY0M1hYX0VUSF9ERUZBVUxUX1JYX1RDUF9RVUVVRV8zCSgoMTw8MTcpIHwgKDE8PDE2KSkKKyNkZWZpbmUgTVY2NDNYWF9FVEhfREVGQVVMVF9SWF9UQ1BfUVVFVUVfNAkoMTw8MTgpCisjZGVmaW5lIE1WNjQzWFhfRVRIX0RFRkFVTFRfUlhfVENQX1FVRVVFXzUJKCgxPDwxOCkgfCAoMTw8MTYpKQorI2RlZmluZSBNVjY0M1hYX0VUSF9ERUZBVUxUX1JYX1RDUF9RVUVVRV82CSgoMTw8MTgpIHwgKDE8PDE3KSkKKyNkZWZpbmUgTVY2NDNYWF9FVEhfREVGQVVMVF9SWF9UQ1BfUVVFVUVfNwkoKDE8PDE4KSB8ICgxPDwxNykgfCAoMTw8MTYpKQorI2RlZmluZSBNVjY0M1hYX0VUSF9ERUZBVUxUX1JYX1VEUF9RVUVVRV8wCTAKKyNkZWZpbmUgTVY2NDNYWF9FVEhfREVGQVVMVF9SWF9VRFBfUVVFVUVfMQkoMTw8MTkpCisjZGVmaW5lIE1WNjQzWFhfRVRIX0RFRkFVTFRfUlhfVURQX1FVRVVFXzIJKDE8PDIwKQorI2RlZmluZSBNVjY0M1hYX0VUSF9ERUZBVUxUX1JYX1VEUF9RVUVVRV8zCSgoMTw8MjApIHwgKDE8PDE5KSkKKyNkZWZpbmUgTVY2NDNYWF9FVEhfREVGQVVMVF9SWF9VRFBfUVVFVUVfNAkoKDE8PDIxKQorI2RlZmluZSBNVjY0M1hYX0VUSF9ERUZBVUxUX1JYX1VEUF9RVUVVRV81CSgoMTw8MjEpIHwgKDE8PDE5KSkKKyNkZWZpbmUgTVY2NDNYWF9FVEhfREVGQVVMVF9SWF9VRFBfUVVFVUVfNgkoKDE8PDIxKSB8ICgxPDwyMCkpCisjZGVmaW5lIE1WNjQzWFhfRVRIX0RFRkFVTFRfUlhfVURQX1FVRVVFXzcJKCgxPDwyMSkgfCAoMTw8MjApIHwgKDE8PDE5KSkKKyNkZWZpbmUgTVY2NDNYWF9FVEhfREVGQVVMVF9SWF9CUERVX1FVRVVFXzAJMAorI2RlZmluZSBNVjY0M1hYX0VUSF9ERUZBVUxUX1JYX0JQRFVfUVVFVUVfMQkoMTw8MjIpCisjZGVmaW5lIE1WNjQzWFhfRVRIX0RFRkFVTFRfUlhfQlBEVV9RVUVVRV8yCSgxPDwyMykKKyNkZWZpbmUgTVY2NDNYWF9FVEhfREVGQVVMVF9SWF9CUERVX1FVRVVFXzMJKCgxPDwyMykgfCAoMTw8MjIpKQorI2RlZmluZSBNVjY0M1hYX0VUSF9ERUZBVUxUX1JYX0JQRFVfUVVFVUVfNAkoMTw8MjQpCisjZGVmaW5lIE1WNjQzWFhfRVRIX0RFRkFVTFRfUlhfQlBEVV9RVUVVRV81CSgoMTw8MjQpIHwgKDE8PDIyKSkKKyNkZWZpbmUgTVY2NDNYWF9FVEhfREVGQVVMVF9SWF9CUERVX1FVRVVFXzYJKCgxPDwyNCkgfCAoMTw8MjMpKQorI2RlZmluZSBNVjY0M1hYX0VUSF9ERUZBVUxUX1JYX0JQRFVfUVVFVUVfNwkoKDE8PDI0KSB8ICgxPDwyMykgfCAoMTw8MjIpKQorCisjZGVmaW5lCU1WNjQzWFhfRVRIX1BPUlRfQ09ORklHX0RFRkFVTFRfVkFMVUUJCQlcCisJCU1WNjQzWFhfRVRIX1VOSUNBU1RfTk9STUFMX01PREUJCXwJXAorCQlNVjY0M1hYX0VUSF9ERUZBVUxUX1JYX1FVRVVFXzAJCXwJXAorCQlNVjY0M1hYX0VUSF9ERUZBVUxUX1JYX0FSUF9RVUVVRV8wCXwJXAorCQlNVjY0M1hYX0VUSF9SRUNFSVZFX0JDX0lGX05PVF9JUF9PUl9BUlAJfAlcCisJCU1WNjQzWFhfRVRIX1JFQ0VJVkVfQkNfSUZfSVAJCXwJXAorCQlNVjY0M1hYX0VUSF9SRUNFSVZFX0JDX0lGX0FSUAkJfAlcCisJCU1WNjQzWFhfRVRIX0NBUFRVUkVfVENQX0ZSQU1FU19ESVMJfAlcCisJCU1WNjQzWFhfRVRIX0NBUFRVUkVfVURQX0ZSQU1FU19ESVMJfAlcCisJCU1WNjQzWFhfRVRIX0RFRkFVTFRfUlhfVENQX1FVRVVFXzAJfAlcCisJCU1WNjQzWFhfRVRIX0RFRkFVTFRfUlhfVURQX1FVRVVFXzAJfAlcCisJCU1WNjQzWFhfRVRIX0RFRkFVTFRfUlhfQlBEVV9RVUVVRV8wCisKKy8qIFRoZXNlIG1hY3JvcyBkZXNjcmliZSBFdGhlcm5ldCBQb3J0IGNvbmZpZ3VyYXRpb24gZXh0ZW5kIHJlZyAoUHhfY1hSKSBiaXRzKi8KKyNkZWZpbmUgTVY2NDNYWF9FVEhfQ0xBU1NJRllfRU4JCQkJKDE8PDApCisjZGVmaW5lIE1WNjQzWFhfRVRIX1NQQU5fQlBEVV9QQUNLRVRTX0FTX05PUk1BTAkJMAorI2RlZmluZSBNVjY0M1hYX0VUSF9TUEFOX0JQRFVfUEFDS0VUU19UT19SWF9RVUVVRV83CSgxPDwxKQorI2RlZmluZSBNVjY0M1hYX0VUSF9QQVJUSVRJT05fRElTQUJMRQkJCTAKKyNkZWZpbmUgTVY2NDNYWF9FVEhfUEFSVElUSU9OX0VOQUJMRQkJCSgxPDwyKQorCisjZGVmaW5lCU1WNjQzWFhfRVRIX1BPUlRfQ09ORklHX0VYVEVORF9ERUZBVUxUX1ZBTFVFCQlcCisJCU1WNjQzWFhfRVRIX1NQQU5fQlBEVV9QQUNLRVRTX0FTX05PUk1BTAl8CVwKKwkJTVY2NDNYWF9FVEhfUEFSVElUSU9OX0RJU0FCTEUKKworLyogVGhlc2UgbWFjcm9zIGRlc2NyaWJlIEV0aGVybmV0IFBvcnQgU2RtYSBjb25maWd1cmF0aW9uIHJlZyAoU0RDUikgYml0cyAqLworI2RlZmluZSBNVjY0M1hYX0VUSF9SSUZCCQkJKDE8PDApCisjZGVmaW5lIE1WNjQzWFhfRVRIX1JYX0JVUlNUX1NJWkVfMV82NEJJVAkJMAorI2RlZmluZSBNVjY0M1hYX0VUSF9SWF9CVVJTVF9TSVpFXzJfNjRCSVQJCSgxPDwxKQorI2RlZmluZSBNVjY0M1hYX0VUSF9SWF9CVVJTVF9TSVpFXzRfNjRCSVQJCSgxPDwyKQorI2RlZmluZSBNVjY0M1hYX0VUSF9SWF9CVVJTVF9TSVpFXzhfNjRCSVQJCSgoMTw8MikgfCAoMTw8MSkpCisjZGVmaW5lIE1WNjQzWFhfRVRIX1JYX0JVUlNUX1NJWkVfMTZfNjRCSVQJCSgxPDwzKQorI2RlZmluZSBNVjY0M1hYX0VUSF9CTE1fUlhfTk9fU1dBUAkJCSgxPDw0KQorI2RlZmluZSBNVjY0M1hYX0VUSF9CTE1fUlhfQllURV9TV0FQCQkJMAorI2RlZmluZSBNVjY0M1hYX0VUSF9CTE1fVFhfTk9fU1dBUAkJCSgxPDw1KQorI2RlZmluZSBNVjY0M1hYX0VUSF9CTE1fVFhfQllURV9TV0FQCQkJMAorI2RlZmluZSBNVjY0M1hYX0VUSF9ERVNDUklQVE9SU19CWVRFX1NXQVAJCSgxPDw2KQorI2RlZmluZSBNVjY0M1hYX0VUSF9ERVNDUklQVE9SU19OT19TV0FQCQkJMAorI2RlZmluZSBNVjY0M1hYX0VUSF9UWF9CVVJTVF9TSVpFXzFfNjRCSVQJCTAKKyNkZWZpbmUgTVY2NDNYWF9FVEhfVFhfQlVSU1RfU0laRV8yXzY0QklUCQkoMTw8MjIpCisjZGVmaW5lIE1WNjQzWFhfRVRIX1RYX0JVUlNUX1NJWkVfNF82NEJJVAkJKDE8PDIzKQorI2RlZmluZSBNVjY0M1hYX0VUSF9UWF9CVVJTVF9TSVpFXzhfNjRCSVQJCSgoMTw8MjMpIHwgKDE8PDIyKSkKKyNkZWZpbmUgTVY2NDNYWF9FVEhfVFhfQlVSU1RfU0laRV8xNl82NEJJVAkJKDE8PDI0KQorCisjZGVmaW5lCU1WNjQzWFhfRVRIX0lQR19JTlRfUlgodmFsdWUpICgodmFsdWUgJiAweDNmZmYpIDw8IDgpCisKKyNkZWZpbmUJTVY2NDNYWF9FVEhfUE9SVF9TRE1BX0NPTkZJR19ERUZBVUxUX1ZBTFVFCQlcCisJCU1WNjQzWFhfRVRIX1JYX0JVUlNUX1NJWkVfNF82NEJJVAl8CVwKKwkJTVY2NDNYWF9FVEhfSVBHX0lOVF9SWCgwKQkJfAlcCisJCU1WNjQzWFhfRVRIX1RYX0JVUlNUX1NJWkVfNF82NEJJVAorCisvKiBUaGVzZSBtYWNyb3MgZGVzY3JpYmUgRXRoZXJuZXQgUG9ydCBzZXJpYWwgY29udHJvbCByZWcgKFBTQ1IpIGJpdHMgKi8KKyNkZWZpbmUgTVY2NDNYWF9FVEhfU0VSSUFMX1BPUlRfRElTQUJMRQkJCTAKKyNkZWZpbmUgTVY2NDNYWF9FVEhfU0VSSUFMX1BPUlRfRU5BQkxFCQkJKDE8PDApCisjZGVmaW5lIE1WNjQzWFhfRVRIX0ZPUkNFX0xJTktfUEFTUwkJCSgxPDwxKQorI2RlZmluZSBNVjY0M1hYX0VUSF9ET19OT1RfRk9SQ0VfTElOS19QQVNTCQkwCisjZGVmaW5lIE1WNjQzWFhfRVRIX0VOQUJMRV9BVVRPX05FR19GT1JfRFVQTFgJCTAKKyNkZWZpbmUgTVY2NDNYWF9FVEhfRElTQUJMRV9BVVRPX05FR19GT1JfRFVQTFgJCSgxPDwyKQorI2RlZmluZSBNVjY0M1hYX0VUSF9FTkFCTEVfQVVUT19ORUdfRk9SX0ZMT1dfQ1RSTAkwCisjZGVmaW5lIE1WNjQzWFhfRVRIX0RJU0FCTEVfQVVUT19ORUdfRk9SX0ZMT1dfQ1RSTAkoMTw8MykKKyNkZWZpbmUgTVY2NDNYWF9FVEhfQURWX05PX0ZMT1dfQ1RSTAkJCTAKKyNkZWZpbmUgTVY2NDNYWF9FVEhfQURWX1NZTU1FVFJJQ19GTE9XX0NUUkwJCSgxPDw0KQorI2RlZmluZSBNVjY0M1hYX0VUSF9GT1JDRV9GQ19NT0RFX05PX1BBVVNFX0RJU19UWAkwCisjZGVmaW5lIE1WNjQzWFhfRVRIX0ZPUkNFX0ZDX01PREVfVFhfUEFVU0VfRElTCQkoMTw8NSkKKyNkZWZpbmUgTVY2NDNYWF9FVEhfRk9SQ0VfQlBfTU9ERV9OT19KQU0JCTAKKyNkZWZpbmUgTVY2NDNYWF9FVEhfRk9SQ0VfQlBfTU9ERV9KQU1fVFgJCSgxPDw3KQorI2RlZmluZSBNVjY0M1hYX0VUSF9GT1JDRV9CUF9NT0RFX0pBTV9UWF9PTl9SWF9FUlIJKDE8PDgpCisjZGVmaW5lIE1WNjQzWFhfRVRIX0ZPUkNFX0xJTktfRkFJTAkJCTAKKyNkZWZpbmUgTVY2NDNYWF9FVEhfRE9fTk9UX0ZPUkNFX0xJTktfRkFJTAkJKDE8PDEwKQorI2RlZmluZSBNVjY0M1hYX0VUSF9SRVRSQU5TTUlUXzE2X0FUVEVNUFRTCQkwCisjZGVmaW5lIE1WNjQzWFhfRVRIX1JFVFJBTlNNSVRfRk9SRVZFUgkJCSgxPDwxMSkKKyNkZWZpbmUgTVY2NDNYWF9FVEhfRElTQUJMRV9BVVRPX05FR19TUEVFRF9HTUlJCQkoMTw8MTMpCisjZGVmaW5lIE1WNjQzWFhfRVRIX0VOQUJMRV9BVVRPX05FR19TUEVFRF9HTUlJCQkwCisjZGVmaW5lIE1WNjQzWFhfRVRIX0RURV9BRFZfMAkJCQkwCisjZGVmaW5lIE1WNjQzWFhfRVRIX0RURV9BRFZfMQkJCQkoMTw8MTQpCisjZGVmaW5lIE1WNjQzWFhfRVRIX0RJU0FCTEVfQVVUT19ORUdfQllQQVNTCQkwCisjZGVmaW5lIE1WNjQzWFhfRVRIX0VOQUJMRV9BVVRPX05FR19CWVBBU1MJCSgxPDwxNSkKKyNkZWZpbmUgTVY2NDNYWF9FVEhfQVVUT19ORUdfTk9fQ0hBTkdFCQkJMAorI2RlZmluZSBNVjY0M1hYX0VUSF9SRVNUQVJUX0FVVE9fTkVHCQkJKDE8PDE2KQorI2RlZmluZSBNVjY0M1hYX0VUSF9NQVhfUlhfUEFDS0VUXzE1MThCWVRFCQkwCisjZGVmaW5lIE1WNjQzWFhfRVRIX01BWF9SWF9QQUNLRVRfMTUyMkJZVEUJCSgxPDwxNykKKyNkZWZpbmUgTVY2NDNYWF9FVEhfTUFYX1JYX1BBQ0tFVF8xNTUyQllURQkJKDE8PDE4KQorI2RlZmluZSBNVjY0M1hYX0VUSF9NQVhfUlhfUEFDS0VUXzkwMjJCWVRFCQkoKDE8PDE4KSB8ICgxPDwxNykpCisjZGVmaW5lIE1WNjQzWFhfRVRIX01BWF9SWF9QQUNLRVRfOTE5MkJZVEUJCSgxPDwxOSkKKyNkZWZpbmUgTVY2NDNYWF9FVEhfTUFYX1JYX1BBQ0tFVF85NzAwQllURQkJKCgxPDwxOSkgfCAoMTw8MTcpKQorI2RlZmluZSBNVjY0M1hYX0VUSF9TRVRfRVhUX0xPT1BCQUNLCQkJKDE8PDIwKQorI2RlZmluZSBNVjY0M1hYX0VUSF9DTFJfRVhUX0xPT1BCQUNLCQkJMAorI2RlZmluZSBNVjY0M1hYX0VUSF9TRVRfRlVMTF9EVVBMRVhfTU9ERQkJKDE8PDIxKQorI2RlZmluZSBNVjY0M1hYX0VUSF9TRVRfSEFMRl9EVVBMRVhfTU9ERQkJMAorI2RlZmluZSBNVjY0M1hYX0VUSF9FTkFCTEVfRkxPV19DVFJMX1RYX1JYX0lOX0ZVTExfRFVQTEVYICgxPDwyMikKKyNkZWZpbmUgTVY2NDNYWF9FVEhfRElTQUJMRV9GTE9XX0NUUkxfVFhfUlhfSU5fRlVMTF9EVVBMRVggMAorI2RlZmluZSBNVjY0M1hYX0VUSF9TRVRfR01JSV9TUEVFRF9UT18xMF8xMDAJCTAKKyNkZWZpbmUgTVY2NDNYWF9FVEhfU0VUX0dNSUlfU1BFRURfVE9fMTAwMAkJKDE8PDIzKQorI2RlZmluZSBNVjY0M1hYX0VUSF9TRVRfTUlJX1NQRUVEX1RPXzEwCQkJMAorI2RlZmluZSBNVjY0M1hYX0VUSF9TRVRfTUlJX1NQRUVEX1RPXzEwMAkJKDE8PDI0KQorCisjZGVmaW5lCU1WNjQzWFhfRVRIX1BPUlRfU0VSSUFMX0NPTlRST0xfREVGQVVMVF9WQUxVRQkJXAorCQlNVjY0M1hYX0VUSF9ET19OT1RfRk9SQ0VfTElOS19QQVNTCXwJXAorCQlNVjY0M1hYX0VUSF9FTkFCTEVfQVVUT19ORUdfRk9SX0RVUExYCXwJXAorCQlNVjY0M1hYX0VUSF9ESVNBQkxFX0FVVE9fTkVHX0ZPUl9GTE9XX0NUUkwgfAlcCisJCU1WNjQzWFhfRVRIX0FEVl9TWU1NRVRSSUNfRkxPV19DVFJMCXwJXAorCQlNVjY0M1hYX0VUSF9GT1JDRV9GQ19NT0RFX05PX1BBVVNFX0RJU19UWCB8CVwKKwkJTVY2NDNYWF9FVEhfRk9SQ0VfQlBfTU9ERV9OT19KQU0JfAlcCisJCSgxPDw5KQkvKiByZXNlcnZlZCAqLwkJCXwJXAorCQlNVjY0M1hYX0VUSF9ET19OT1RfRk9SQ0VfTElOS19GQUlMCXwJXAorCQlNVjY0M1hYX0VUSF9SRVRSQU5TTUlUXzE2X0FUVEVNUFRTCXwJXAorCQlNVjY0M1hYX0VUSF9FTkFCTEVfQVVUT19ORUdfU1BFRURfR01JSQl8CVwKKwkJTVY2NDNYWF9FVEhfRFRFX0FEVl8wCQkJfAlcCisJCU1WNjQzWFhfRVRIX0RJU0FCTEVfQVVUT19ORUdfQllQQVNTCXwJXAorCQlNVjY0M1hYX0VUSF9BVVRPX05FR19OT19DSEFOR0UJCXwJXAorCQlNVjY0M1hYX0VUSF9NQVhfUlhfUEFDS0VUXzk3MDBCWVRFCXwJXAorCQlNVjY0M1hYX0VUSF9DTFJfRVhUX0xPT1BCQUNLCQl8CVwKKwkJTVY2NDNYWF9FVEhfU0VUX0ZVTExfRFVQTEVYX01PREUJfAlcCisJCU1WNjQzWFhfRVRIX0VOQUJMRV9GTE9XX0NUUkxfVFhfUlhfSU5fRlVMTF9EVVBMRVgKKworLyogVGhlc2UgbWFjcm9zIGRlc2NyaWJlIEV0aGVybmV0IFNlcmlhbCBTdGF0dXMgcmVnIChQU1IpIGJpdHMgKi8KKyNkZWZpbmUgTVY2NDNYWF9FVEhfUE9SVF9TVEFUVVNfTU9ERV8xMF9CSVQJCSgxPDwwKQorI2RlZmluZSBNVjY0M1hYX0VUSF9QT1JUX1NUQVRVU19MSU5LX1VQCQkJKDE8PDEpCisjZGVmaW5lIE1WNjQzWFhfRVRIX1BPUlRfU1RBVFVTX0ZVTExfRFVQTEVYCQkoMTw8MikKKyNkZWZpbmUgTVY2NDNYWF9FVEhfUE9SVF9TVEFUVVNfRkxPV19DT05UUk9MCQkoMTw8MykKKyNkZWZpbmUgTVY2NDNYWF9FVEhfUE9SVF9TVEFUVVNfR01JSV8xMDAwCQkoMTw8NCkKKyNkZWZpbmUgTVY2NDNYWF9FVEhfUE9SVF9TVEFUVVNfTUlJXzEwMAkJCSgxPDw1KQorLyogUFNSIGJpdCA2IGlzIHVuZG9jdW1lbnRlZCAqLworI2RlZmluZSBNVjY0M1hYX0VUSF9QT1JUX1NUQVRVU19UWF9JTl9QUk9HUkVTUwkJKDE8PDcpCisjZGVmaW5lIE1WNjQzWFhfRVRIX1BPUlRfU1RBVFVTX0FVVE9ORUdfQllQQVNTRUQJKDE8PDgpCisjZGVmaW5lIE1WNjQzWFhfRVRIX1BPUlRfU1RBVFVTX1BBUlRJVElPTgkJKDE8PDkpCisjZGVmaW5lIE1WNjQzWFhfRVRIX1BPUlRfU1RBVFVTX1RYX0ZJRk9fRU1QVFkJCSgxPDwxMCkKKy8qIFBTUiBiaXRzIDExLTMxIGFyZSByZXNlcnZlZCAqLworCisjZGVmaW5lCU1WNjQzWFhfRVRIX1BPUlRfREVGQVVMVF9UUkFOU01JVF9RVUVVRV9TSVpFCTgwMAorI2RlZmluZQlNVjY0M1hYX0VUSF9QT1JUX0RFRkFVTFRfUkVDRUlWRV9RVUVVRV9TSVpFCTQwMAorCisjZGVmaW5lIE1WNjQzWFhfRVRIX0RFU0NfU0laRQkJCQk2NAorCisjZGVmaW5lIE1WNjQzWFhfRVRIX1NIQVJFRF9OQU1FCSJtdjY0M3h4X2V0aF9zaGFyZWQiCisjZGVmaW5lIE1WNjQzWFhfRVRIX05BTUUJIm12NjQzeHhfZXRoIgorCitzdHJ1Y3QgbXY2NDN4eF9ldGhfcGxhdGZvcm1fZGF0YSB7CisJLyogCisJICogTm9uLXZhbHVlcyBmb3IgbWFjX2FkZHIsIHBoeV9hZGRyLCBwb3J0X2NvbmZpZywgZXRjLgorCSAqIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHZhbHVlLiAgU2V0dGluZyB0aGUgY29ycmVzcG9uZGluZworCSAqIGZvcmNlXyogZmllbGQsIGNhdXNlcyB0aGUgZGVmYXVsdCB2YWx1ZSB0byBiZSBvdmVycmlkZGVuCisJICogZXZlbiB3aGVuIHplcm8uCisJICovCisJdW5zaWduZWQgaW50CWZvcmNlX3BoeV9hZGRyOjE7CisJdW5zaWduZWQgaW50CWZvcmNlX3BvcnRfY29uZmlnOjE7CisJdW5zaWduZWQgaW50CWZvcmNlX3BvcnRfY29uZmlnX2V4dGVuZDoxOworCXVuc2lnbmVkIGludAlmb3JjZV9wb3J0X3NkbWFfY29uZmlnOjE7CisJdW5zaWduZWQgaW50CWZvcmNlX3BvcnRfc2VyaWFsX2NvbnRyb2w6MTsKKwlpbnQJCXBoeV9hZGRyOworCWNoYXIJCSptYWNfYWRkcjsJLyogcG9pbnRlciB0byBtYWMgYWRkcmVzcyAqLworCXUzMgkJcG9ydF9jb25maWc7CisJdTMyCQlwb3J0X2NvbmZpZ19leHRlbmQ7CisJdTMyCQlwb3J0X3NkbWFfY29uZmlnOworCXUzMgkJcG9ydF9zZXJpYWxfY29udHJvbDsKKwl1MzIJCXR4X3F1ZXVlX3NpemU7CisJdTMyCQlyeF9xdWV1ZV9zaXplOworCXUzMgkJdHhfc3JhbV9hZGRyOworCXUzMgkJdHhfc3JhbV9zaXplOworCXUzMgkJcnhfc3JhbV9hZGRyOworCXUzMgkJcnhfc3JhbV9zaXplOworfTsKKworI2VuZGlmIC8qIF9fQVNNX01WNjQzWFhfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uX3IzOTY0LmggYi9pbmNsdWRlL2xpbnV4L25fcjM5NjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzUyYmNkMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbl9yMzk2NC5oCkBAIC0wLDAgKzEsMjI2IEBACisvKiByMzk2NCBsaW5lZGlzY2lwbGluZSBmb3IgbGludXgKKyAqCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogQ29weXJpZ2h0IGJ5CisgKiBQaGlsaXBzIEF1dG9tYXRpb24gUHJvamVjdHMKKyAqIEthc3NlbCAoR2VybWFueSkKKyAqIGh0dHA6Ly93d3cucGFwLXBoaWxpcHMuZGUKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBUaGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHRlcm1zIG9mCisgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgorICoKKyAqIEF1dGhvcjoKKyAqIEwuIEhhYWcKKyAqCisgKiAkTG9nOiByMzk2NC5oLHYgJAorICogUmV2aXNpb24gMS4zICAyMDAxLzAzLzE4IDEzOjAyOjI0ICBkd213MgorICogRml4IHRpbWVyIHVzYWdlLCB1c2Ugc3BpbmxvY2tzIHByb3Blcmx5LgorICoKKyAqIFJldmlzaW9uIDEuMiAgMjAwMS8wMy8xOCAxMjo1MzoxNSAgZHdtdzIKKyAqIE1lcmdlIGNoYW5nZXMgaW4gMi40LjIKKyAqCisgKiBSZXZpc2lvbiAxLjEuMS4xICAxOTk4LzEwLzEzIDE2OjQzOjE0ICBkd213MgorICogVGhpcydsbCBzY3JldyB0aGUgdmVyc2lvbiBjb250cm9sCisgKgorICogUmV2aXNpb24gMS42ICAxOTk4LzA5LzMwIDAwOjQwOjM4ICBkd213MgorICogVXBkYXRlZCB0byB1c2Uga2VybmVsJ3MgTl9SMzk2NCBpZiBhdmFpbGFibGUKKyAqCisgKiBSZXZpc2lvbiAxLjQgIDE5OTgvMDQvMDIgMjA6Mjk6NDQgIGxoYWFnCisgKiBzZWxlY3QsIGJsb2NraW5nLCAuLi4KKyAqCisgKiBSZXZpc2lvbiAxLjMgIDE5OTgvMDIvMTIgMTg6NTg6NDMgIHJvb3QKKyAqIGZpeGVkIHNvbWUgbWVtb3J5IGxlYWtzCisgKiBjYWxjdWxhdGlvbiBvZiBjaGVja3N1bSBjaGFyYWN0ZXJzCisgKgorICogUmV2aXNpb24gMS4yICAxOTk4LzAyLzA3IDEzOjAzOjE3ICByb290CisgKiBpb2N0bCByZWFkX3RlbGVncmFtCisgKgorICogUmV2aXNpb24gMS4xICAxOTk4LzAyLzA2IDE5OjE5OjQzICByb290CisgKiBJbml0aWFsIHJldmlzaW9uCisgKgorICoKKyAqLworCisjaWZuZGVmIF9fTElOVVhfTl9SMzk2NF9IX18KKyNkZWZpbmUgX19MSU5VWF9OX1IzOTY0X0hfXworCisvKiBsaW5lIGRpc2NpcGxpbmVzIGZvciByMzk2NCBwcm90b2NvbCAqLworI2luY2x1ZGUgPGFzbS90ZXJtaW9zLmg+CisKKyNpZmRlZiBfX0tFUk5FTF9fCisvKgorICogQ29tbW9uIGFzY2lpIGhhbmRzaGFrZSBjaGFyYWN0ZXJzOgorICovCisKKyNkZWZpbmUgU1RYIDB4MDIKKyNkZWZpbmUgRVRYIDB4MDMKKyNkZWZpbmUgRExFIDB4MTAKKyNkZWZpbmUgTkFLIDB4MTUKKworLyoKKyAqIFRpbWVvdXRzIChtc2Vjcy8xMCBtc2VjcyBwZXIgdGltZXIgaW50ZXJydXB0KToKKyAqLworCisjZGVmaW5lIFIzOTY0X1RPX1FWWiA1NTAvMTAKKyNkZWZpbmUgUjM5NjRfVE9fWlZaIDIyMC8xMAorI2RlZmluZSBSMzk2NF9UT19OT19CVUYgNDAwLzEwCisjZGVmaW5lIFIzOTY0X05PX1RYX1JPT00gMTAwLzEwCisjZGVmaW5lIFIzOTY0X1RPX1JYX1BBTklDIDQwMDAvMTAKKyNkZWZpbmUgUjM5NjRfTUFYX1JFVFJJRVMgNQorCisjZW5kaWYKKworLyoKKyAqIElvY3RsLWNvbW1hbmRzCisgKi8KKworI2RlZmluZSBSMzk2NF9FTkFCTEVfU0lHTkFMUyAgICAgIDB4NTMwMQorI2RlZmluZSBSMzk2NF9TRVRQUklPUklUWSAgICAgICAgIDB4NTMwMgorI2RlZmluZSBSMzk2NF9VU0VfQkNDICAgICAgICAgICAgIDB4NTMwMworI2RlZmluZSBSMzk2NF9SRUFEX1RFTEVHUkFNICAgICAgIDB4NTMwNAorCisvKiBPcHRpb25zIGZvciBSMzk2NF9TRVRQUklPUklUWSAqLworI2RlZmluZSBSMzk2NF9NQVNURVIgICAwCisjZGVmaW5lIFIzOTY0X1NMQVZFICAgIDEKKworLyogT3B0aW9ucyBmb3IgUjM5NjRfRU5BQkxFX1NJR05BTFMgKi8KKyNkZWZpbmUgUjM5NjRfU0lHX0FDSyAgIDB4MDAwMQorI2RlZmluZSBSMzk2NF9TSUdfREFUQSAgMHgwMDAyCisjZGVmaW5lIFIzOTY0X1NJR19BTEwgICAweDAwMGYKKyNkZWZpbmUgUjM5NjRfU0lHX05PTkUgIDB4MDAwMAorI2RlZmluZSBSMzk2NF9VU0VfU0lHSU8gMHgxMDAwCisKKy8qCisgKiByMzk2NCBvcGVyYXRpb24gc3RhdGVzOgorICovCisjaWZkZWYgX19LRVJORUxfXworCitlbnVtIHsgUjM5NjRfSURMRSwgCisJICAgUjM5NjRfVFhfUkVRVUVTVCwgUjM5NjRfVFJBTlNNSVRUSU5HLCAKKwkgICBSMzk2NF9XQUlUX1pWWl9CRUZPUkVfVFhfUkVUUlksIFIzOTY0X1dBSVRfRk9SX1RYX0FDSywKKwkgICBSMzk2NF9XQUlUX0ZPUl9SWF9CVUYsCisJICAgUjM5NjRfUkVDRUlWSU5HLCBSMzk2NF9XQUlUX0ZPUl9CQ0MsIFIzOTY0X1dBSVRfRk9SX1JYX1JFUEVBVAorCSAgIH07CisKKy8qCisgKiBBbGwgb3BlbiBmaWxlLWhhbmRsZXMgYXJlICdjbGllbnRzJyBhbmQgYXJlIHN0b3JlZCBpbiBhIGxpbmtlZCBsaXN0OgorICovCisKK3N0cnVjdCByMzk2NF9tZXNzYWdlOworCitzdHJ1Y3QgcjM5NjRfY2xpZW50X2luZm8geworCXNwaW5sb2NrX3QgICAgIGxvY2s7CisJcGlkX3QgICAgICAgICAgcGlkOworCXVuc2lnbmVkIGludCAgIHNpZ19mbGFnczsKKworCXN0cnVjdCByMzk2NF9jbGllbnRfaW5mbyAqbmV4dDsKKworCXN0cnVjdCByMzk2NF9tZXNzYWdlICpmaXJzdF9tc2c7CisJc3RydWN0IHIzOTY0X21lc3NhZ2UgKmxhc3RfbXNnOworCXN0cnVjdCByMzk2NF9ibG9ja19oZWFkZXIgKm5leHRfYmxvY2tfdG9fcmVhZDsKKwlpbnQgICAgICAgICAgICBtc2dfY291bnQ7Cit9OworCisKKyNlbmRpZgorCisvKiB0eXBlcyBmb3IgbXNnX2lkOiAqLworZW51bSB7UjM5NjRfTVNHX0FDSz0xLCBSMzk2NF9NU0dfREFUQSB9OworCisjZGVmaW5lIFIzOTY0X01BWF9NU0dfQ09VTlQgMzIKKworLyogZXJyb3IgY29kZXMgZm9yIGNsaWVudCBtZXNzYWdlcyAqLworI2RlZmluZSBSMzk2NF9PSyAwICAgICAgICAvKiBubyBlcnJvci4gKi8KKyNkZWZpbmUgUjM5NjRfVFhfRkFJTCAtMSAgLyogdHJhbnNtaXNzaW9uIGVycm9yLCBibG9jayBOT1Qgc2VudCAqLworI2RlZmluZSBSMzk2NF9PVkVSRkxPVyAtMiAvKiBtc2cgcXVldWUgb3ZlcmZsb3cgKi8KKworLyogdGhlIGNsaWVudCBnZXRzIHRoaXMgc3RydWN0IHdoZW4gY2FsbGluZyByZWFkKGZkLC4uLik6ICovCitzdHJ1Y3QgcjM5NjRfY2xpZW50X21lc3NhZ2UgeworCSAgaW50ICAgICBtc2dfaWQ7CisJICBpbnQgICAgIGFyZzsKKwkgIGludCAgICAgZXJyb3JfY29kZTsKK307CisKKyNkZWZpbmUgUjM5NjRfTVRVICAgICAgMjU2CisKKworI2lmZGVmIF9fS0VSTkVMX18KKworc3RydWN0IHIzOTY0X2Jsb2NrX2hlYWRlcjsKKworLyogaW50ZXJuYWwgdmVyc2lvbiBvZiBjbGllbnRfbWVzc2FnZTogKi8KK3N0cnVjdCByMzk2NF9tZXNzYWdlIHsKKwkgIGludCAgICAgbXNnX2lkOworCSAgaW50ICAgICBhcmc7CisJICBpbnQgICAgIGVycm9yX2NvZGU7CisJICBzdHJ1Y3QgcjM5NjRfYmxvY2tfaGVhZGVyICpibG9jazsKKwkgIHN0cnVjdCByMzk2NF9tZXNzYWdlICpuZXh0OworfTsKKworLyoKKyAqIEhlYWRlciBvZiByZWNlaXZlZCBibG9jayBpbiByeF9idWYvdHhfYnVmOgorICovCisKK3N0cnVjdCByMzk2NF9ibG9ja19oZWFkZXIgCit7CisJdW5zaWduZWQgaW50IGxlbmd0aDsgICAgICAgICAgICAgLyogbGVuZ3RoIGluIGNoYXJzIHdpdGhvdXQgaGVhZGVyICovCisJdW5zaWduZWQgY2hhciAqZGF0YTsgICAgICAgICAgICAgLyogdXN1YWxseSBkYXRhIGlzIGxvY2F0ZWQgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1tZWRpYXRlbHkgYmVoaW5kIHRoaXMgc3RydWN0ICovCisJdW5zaWduZWQgaW50IGxvY2tzOyAgICAgICAgICAgICAgLyogb25seSB1c2VkIGluIHJ4X2J1ZmZlciAqLworCSAgCisgICAgc3RydWN0IHIzOTY0X2Jsb2NrX2hlYWRlciAqbmV4dDsKKwlzdHJ1Y3QgcjM5NjRfY2xpZW50X2luZm8gKm93bmVyOyAgLyogPU5VTEwgaW4gcnhfYnVmZmVyICovCit9OworCisvKgorICogSWYgcnhfYnVmIGhhc24ndCBlbm91Z2ggc3BhY2UgdG8gc3RvcmUgUjM5NjRfTVRVIGNoYXJzLAorICogd2Ugd2lsbCByZWplY3QgYWxsIGluY29taW5nIFNUWC1yZXF1ZXN0cyBieSBzZW5kaW5nIE5BSy4KKyAqLworCisjZGVmaW5lIFJYX0JVRl9TSVpFICAgIDQwMDAKKyNkZWZpbmUgVFhfQlVGX1NJWkUgICAgNDAwMAorI2RlZmluZSBSMzk2NF9NQVhfQkxPQ0tTX0lOX1JYX1FVRVVFIDEwMAorCisjZGVmaW5lIFIzOTY0X1BBUklUWSAweDAwMDEKKyNkZWZpbmUgUjM5NjRfRlJBTUUgIDB4MDAwMgorI2RlZmluZSBSMzk2NF9PVkVSUlVOIDB4MDAwNAorI2RlZmluZSBSMzk2NF9VTktOT1dOIDB4MDAwOAorI2RlZmluZSBSMzk2NF9CUkVBSyAgIDB4MDAxMAorI2RlZmluZSBSMzk2NF9DSEVDS1NVTSAweDAwMjAKKyNkZWZpbmUgUjM5NjRfRVJST1IgIDB4MDAzZgorI2RlZmluZSBSMzk2NF9CQ0MgICAweDQwMDAKKyNkZWZpbmUgUjM5NjRfREVCVUcgMHg4MDAwCisKKworc3RydWN0IHIzOTY0X2luZm8geworCXNwaW5sb2NrX3QgICAgIGxvY2s7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKKwl1bnNpZ25lZCBjaGFyIHByaW9yaXR5OworCXVuc2lnbmVkIGNoYXIgKnJ4X2J1ZjsgICAgICAgICAgICAvKiByaW5nIGJ1ZmZlciAqLworCXVuc2lnbmVkIGNoYXIgKnR4X2J1ZjsKKworCXdhaXRfcXVldWVfaGVhZF90IHJlYWRfd2FpdDsKKwkvL3N0cnVjdCB3YWl0X3F1ZXVlICpyZWFkX3dhaXQ7CisKKwlzdHJ1Y3QgcjM5NjRfYmxvY2tfaGVhZGVyICpyeF9maXJzdDsKKwlzdHJ1Y3QgcjM5NjRfYmxvY2tfaGVhZGVyICpyeF9sYXN0OworCXN0cnVjdCByMzk2NF9ibG9ja19oZWFkZXIgKnR4X2ZpcnN0OworCXN0cnVjdCByMzk2NF9ibG9ja19oZWFkZXIgKnR4X2xhc3Q7CisJdW5zaWduZWQgaW50IHR4X3Bvc2l0aW9uOworICAgICAgICB1bnNpZ25lZCBpbnQgcnhfcG9zaXRpb247CisJdW5zaWduZWQgY2hhciBsYXN0X3J4OworCXVuc2lnbmVkIGNoYXIgYmNjOworICAgICAgICB1bnNpZ25lZCBpbnQgIGJsb2Nrc19pbl9yeF9xdWV1ZTsKKwkgIAorCQorCXN0cnVjdCByMzk2NF9jbGllbnRfaW5mbyAqZmlyc3RDbGllbnQ7CisJdW5zaWduZWQgaW50IHN0YXRlOworCXVuc2lnbmVkIGludCBmbGFnczsKKworCXN0cnVjdCB0aW1lcl9saXN0IHRtcjsKKwlpbnQgblJldHJ5OworfTsKKworI2VuZGlmCQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmFtZWkuaCBiL2luY2x1ZGUvbGludXgvbmFtZWkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGI2N2IwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uYW1laS5oCkBAIC0wLDAgKzEsODcgQEAKKyNpZm5kZWYgX0xJTlVYX05BTUVJX0gKKyNkZWZpbmUgX0xJTlVYX05BTUVJX0gKKworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKworc3RydWN0IHZmc21vdW50OworCitzdHJ1Y3Qgb3Blbl9pbnRlbnQgeworCWludAlmbGFnczsKKwlpbnQJY3JlYXRlX21vZGU7Cit9OworCitlbnVtIHsgTUFYX05FU1RFRF9MSU5LUyA9IDUgfTsKKworc3RydWN0IG5hbWVpZGF0YSB7CisJc3RydWN0IGRlbnRyeQkqZGVudHJ5OworCXN0cnVjdCB2ZnNtb3VudCAqbW50OworCXN0cnVjdCBxc3RyCWxhc3Q7CisJdW5zaWduZWQgaW50CWZsYWdzOworCWludAkJbGFzdF90eXBlOworCXVuc2lnbmVkCWRlcHRoOworCWNoYXIgKnNhdmVkX25hbWVzW01BWF9ORVNURURfTElOS1MgKyAxXTsKKworCS8qIEludGVudCBkYXRhICovCisJdW5pb24geworCQlzdHJ1Y3Qgb3Blbl9pbnRlbnQgb3BlbjsKKwl9IGludGVudDsKK307CisKKy8qCisgKiBUeXBlIG9mIHRoZSBsYXN0IGNvbXBvbmVudCBvbiBMT09LVVBfUEFSRU5UCisgKi8KK2VudW0ge0xBU1RfTk9STSwgTEFTVF9ST09ULCBMQVNUX0RPVCwgTEFTVF9ET1RET1QsIExBU1RfQklORH07CisKKy8qCisgKiBUaGUgYml0bWFzayBmb3IgYSBsb29rdXAgZXZlbnQ6CisgKiAgLSBmb2xsb3cgbGlua3MgYXQgdGhlIGVuZAorICogIC0gcmVxdWlyZSBhIGRpcmVjdG9yeQorICogIC0gZW5kaW5nIHNsYXNoZXMgb2sgZXZlbiBmb3Igbm9uZXhpc3RlbnQgZmlsZXMKKyAqICAtIGludGVybmFsICJ0aGVyZSBhcmUgbW9yZSBwYXRoIGNvbXBuZW50cyIgZmxhZworICogIC0gbG9ja2VkIHdoZW4gbG9va3VwIGRvbmUgd2l0aCBkY2FjaGVfbG9jayBoZWxkCisgKiAgLSBkZW50cnkgY2FjaGUgaXMgdW50cnVzdGVkOyBmb3JjZSBhIHJlYWwgbG9va3VwCisgKi8KKyNkZWZpbmUgTE9PS1VQX0ZPTExPVwkJIDEKKyNkZWZpbmUgTE9PS1VQX0RJUkVDVE9SWQkgMgorI2RlZmluZSBMT09LVVBfQ09OVElOVUUJCSA0CisjZGVmaW5lIExPT0tVUF9QQVJFTlQJCTE2CisjZGVmaW5lIExPT0tVUF9OT0FMVAkJMzIKKyNkZWZpbmUgTE9PS1VQX1JFVkFMCQk2NAorLyoKKyAqIEludGVudCBkYXRhCisgKi8KKyNkZWZpbmUgTE9PS1VQX09QRU4JCSgweDAxMDApCisjZGVmaW5lIExPT0tVUF9DUkVBVEUJCSgweDAyMDApCisjZGVmaW5lIExPT0tVUF9BQ0NFU1MJCSgweDA0MDApCisKK2V4dGVybiBpbnQgRkFTVENBTEwoX191c2VyX3dhbGsoY29uc3QgY2hhciBfX3VzZXIgKiwgdW5zaWduZWQsIHN0cnVjdCBuYW1laWRhdGEgKikpOworI2RlZmluZSB1c2VyX3BhdGhfd2FsayhuYW1lLG5kKSBcCisJX191c2VyX3dhbGsobmFtZSwgTE9PS1VQX0ZPTExPVywgbmQpCisjZGVmaW5lIHVzZXJfcGF0aF93YWxrX2xpbmsobmFtZSxuZCkgXAorCV9fdXNlcl93YWxrKG5hbWUsIDAsIG5kKQorZXh0ZXJuIGludCBGQVNUQ0FMTChwYXRoX2xvb2t1cChjb25zdCBjaGFyICosIHVuc2lnbmVkLCBzdHJ1Y3QgbmFtZWlkYXRhICopKTsKK2V4dGVybiBpbnQgRkFTVENBTEwocGF0aF93YWxrKGNvbnN0IGNoYXIgKiwgc3RydWN0IG5hbWVpZGF0YSAqKSk7CitleHRlcm4gaW50IEZBU1RDQUxMKGxpbmtfcGF0aF93YWxrKGNvbnN0IGNoYXIgKiwgc3RydWN0IG5hbWVpZGF0YSAqKSk7CitleHRlcm4gdm9pZCBwYXRoX3JlbGVhc2Uoc3RydWN0IG5hbWVpZGF0YSAqKTsKK2V4dGVybiB2b2lkIHBhdGhfcmVsZWFzZV9vbl91bW91bnQoc3RydWN0IG5hbWVpZGF0YSAqKTsKKworZXh0ZXJuIHN0cnVjdCBkZW50cnkgKiBsb29rdXBfb25lX2xlbihjb25zdCBjaGFyICosIHN0cnVjdCBkZW50cnkgKiwgaW50KTsKK2V4dGVybiBzdHJ1Y3QgZGVudHJ5ICogbG9va3VwX2hhc2goc3RydWN0IHFzdHIgKiwgc3RydWN0IGRlbnRyeSAqKTsKKworZXh0ZXJuIGludCBmb2xsb3dfZG93bihzdHJ1Y3QgdmZzbW91bnQgKiosIHN0cnVjdCBkZW50cnkgKiopOworZXh0ZXJuIGludCBmb2xsb3dfdXAoc3RydWN0IHZmc21vdW50ICoqLCBzdHJ1Y3QgZGVudHJ5ICoqKTsKKworZXh0ZXJuIHN0cnVjdCBkZW50cnkgKmxvY2tfcmVuYW1lKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGRlbnRyeSAqKTsKK2V4dGVybiB2b2lkIHVubG9ja19yZW5hbWUoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgZGVudHJ5ICopOworCitzdGF0aWMgaW5saW5lIHZvaWQgbmRfc2V0X2xpbmsoc3RydWN0IG5hbWVpZGF0YSAqbmQsIGNoYXIgKnBhdGgpCit7CisJbmQtPnNhdmVkX25hbWVzW25kLT5kZXB0aF0gPSBwYXRoOworfQorCitzdGF0aWMgaW5saW5lIGNoYXIgKm5kX2dldF9saW5rKHN0cnVjdCBuYW1laWRhdGEgKm5kKQoreworCXJldHVybiBuZC0+c2F2ZWRfbmFtZXNbbmQtPmRlcHRoXTsKK30KKworI2VuZGlmIC8qIF9MSU5VWF9OQU1FSV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25hbWVzcGFjZS5oIGIvaW5jbHVkZS9saW51eC9uYW1lc3BhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWNhMTU1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uYW1lc3BhY2UuaApAQCAtMCwwICsxLDQyIEBACisjaWZuZGVmIF9OQU1FU1BBQ0VfSF8KKyNkZWZpbmUgX05BTUVTUEFDRV9IXworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKworc3RydWN0IG5hbWVzcGFjZSB7CisJYXRvbWljX3QJCWNvdW50OworCXN0cnVjdCB2ZnNtb3VudCAqCXJvb3Q7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OworCXN0cnVjdCByd19zZW1hcGhvcmUJc2VtOworfTsKKworZXh0ZXJuIHZvaWQgdW1vdW50X3RyZWUoc3RydWN0IHZmc21vdW50ICopOworZXh0ZXJuIGludCBjb3B5X25hbWVzcGFjZShpbnQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKK2V4dGVybiB2b2lkIF9fcHV0X25hbWVzcGFjZShzdHJ1Y3QgbmFtZXNwYWNlICpuYW1lc3BhY2UpOworCitzdGF0aWMgaW5saW5lIHZvaWQgcHV0X25hbWVzcGFjZShzdHJ1Y3QgbmFtZXNwYWNlICpuYW1lc3BhY2UpCit7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJm5hbWVzcGFjZS0+Y291bnQpKQorCQlfX3B1dF9uYW1lc3BhY2UobmFtZXNwYWNlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGV4aXRfbmFtZXNwYWNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3sKKwlzdHJ1Y3QgbmFtZXNwYWNlICpuYW1lc3BhY2UgPSBwLT5uYW1lc3BhY2U7CisJaWYgKG5hbWVzcGFjZSkgeworCQl0YXNrX2xvY2socCk7CisJCXAtPm5hbWVzcGFjZSA9IE5VTEw7CisJCXRhc2tfdW5sb2NrKHApOworCQlwdXRfbmFtZXNwYWNlKG5hbWVzcGFjZSk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X25hbWVzcGFjZShzdHJ1Y3QgbmFtZXNwYWNlICpuYW1lc3BhY2UpCit7CisJYXRvbWljX2luYygmbmFtZXNwYWNlLT5jb3VudCk7Cit9CisKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25iZC5oIGIvaW5jbHVkZS9saW51eC9uYmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTBlMjEwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uYmQuaApAQCAtMCwwICsxLDkxIEBACisvKgorICogMTk5OSBDb3B5cmlnaHQgKEMpIFBhdmVsIE1hY2hlaywgcGF2ZWxAdWN3LmN6LiBUaGlzIGNvZGUgaXMgR1BMLgorICogMTk5OS8xMS8wNCBDb3B5cmlnaHQgKEMpIDE5OTkgVk13YXJlLCBJbmMuIChSZWdpcyAiSFBSZWciIER1Y2hlc25lKQorICogICAgICAgICAgICBNYWRlIG5iZF9lbmRfcmVxdWVzdCgpIHVzZSB0aGUgaW9fcmVxdWVzdF9sb2NrCisgKiAyMDAxIENvcHlyaWdodCAoQykgU3RldmVuIFdoaXRlaG91c2UKKyAqICAgICAgICAgICAgTmV3IG5iZF9lbmRfcmVxdWVzdCgpIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbmV3IGxpbnV4IGJsb2NrCisgKiAgICAgICAgICAgIGxheWVyIGNvZGUuCisgKiAyMDAzLzA2LzI0IExvdWlzIEQuIExhbmdob2x0eiA8bGRsQGFyb3MubmV0PgorICogICAgICAgICAgICBSZW1vdmVkIHVubmVlZGVkIGJsa3NpemVfYml0cyBmaWVsZCBmcm9tIG5iZF9kZXZpY2Ugc3RydWN0LgorICogICAgICAgICAgICBDbGVhbnVwIFBBUkFOT0lBIHVzYWdlICYgY29kZS4KKyAqIDIwMDQvMDIvMTkgUGF1bCBDbGVtZW50cworICogICAgICAgICAgICBSZW1vdmVkIFBBUkFOT0lBLCBwbHVzIHZhcmlvdXMgY2xlYW51cCBhbmQgY29tbWVudHMKKyAqLworCisjaWZuZGVmIExJTlVYX05CRF9ICisjZGVmaW5lIExJTlVYX05CRF9ICisKKyNkZWZpbmUgTkJEX1NFVF9TT0NLCV9JTyggMHhhYiwgMCApCisjZGVmaW5lIE5CRF9TRVRfQkxLU0laRQlfSU8oIDB4YWIsIDEgKQorI2RlZmluZSBOQkRfU0VUX1NJWkUJX0lPKCAweGFiLCAyICkKKyNkZWZpbmUgTkJEX0RPX0lUCV9JTyggMHhhYiwgMyApCisjZGVmaW5lIE5CRF9DTEVBUl9TT0NLCV9JTyggMHhhYiwgNCApCisjZGVmaW5lIE5CRF9DTEVBUl9RVUUJX0lPKCAweGFiLCA1ICkKKyNkZWZpbmUgTkJEX1BSSU5UX0RFQlVHCV9JTyggMHhhYiwgNiApCisjZGVmaW5lIE5CRF9TRVRfU0laRV9CTE9DS1MJX0lPKCAweGFiLCA3ICkKKyNkZWZpbmUgTkJEX0RJU0NPTk5FQ1QgIF9JTyggMHhhYiwgOCApCisKK2VudW0geworCU5CRF9DTURfUkVBRCA9IDAsCisJTkJEX0NNRF9XUklURSA9IDEsCisJTkJEX0NNRF9ESVNDID0gMgorfTsKKworI2RlZmluZSBuYmRfY21kKHJlcSkgKChyZXEpLT5jbWRbMF0pCisjZGVmaW5lIE1BWF9OQkQgMTI4CisKKy8qIHVzZXJzcGFjZSBkb2Vzbid0IG5lZWQgdGhlIG5iZF9kZXZpY2Ugc3RydWN0dXJlICovCisjaWZkZWYgX19LRVJORUxfXworCisvKiB2YWx1ZXMgZm9yIGZsYWdzIGZpZWxkICovCisjZGVmaW5lIE5CRF9SRUFEX09OTFkgMHgwMDAxCisjZGVmaW5lIE5CRF9XUklURV9OT0NISyAweDAwMDIKKworc3RydWN0IG5iZF9kZXZpY2UgeworCWludCBmbGFnczsKKwlpbnQgaGFyZGVycm9yOwkJLyogQ29kZSBvZiBoYXJkIGVycm9yCQkJKi8KKwlzdHJ1Y3Qgc29ja2V0ICogc29jazsKKwlzdHJ1Y3QgZmlsZSAqIGZpbGU7IAkvKiBJZiA9PSBOVUxMLCBkZXZpY2UgaXMgbm90IHJlYWR5LCB5ZXQJKi8KKwlpbnQgbWFnaWM7CisJc3BpbmxvY2tfdCBxdWV1ZV9sb2NrOworCXN0cnVjdCBsaXN0X2hlYWQgcXVldWVfaGVhZDsvKiBSZXF1ZXN0cyBhcmUgYWRkZWQgaGVyZS4uLgkqLworCXN0cnVjdCBzZW1hcGhvcmUgdHhfbG9jazsKKwlzdHJ1Y3QgZ2VuZGlzayAqZGlzazsKKwlpbnQgYmxrc2l6ZTsKKwl1NjQgYnl0ZXNpemU7Cit9OworCisjZW5kaWYKKworLyogVGhlc2UgYXJlIHNlbnQgb3ZlciB0aGUgbmV0d29yayBpbiB0aGUgcmVxdWVzdC9yZXBseSBtYWdpYyBmaWVsZHMgKi8KKworI2RlZmluZSBOQkRfUkVRVUVTVF9NQUdJQyAweDI1NjA5NTEzCisjZGVmaW5lIE5CRF9SRVBMWV9NQUdJQyAweDY3NDQ2Njk4CisvKiBEbyAqbm90KiB1c2UgbWFnaWNzOiAweDEyNTYwOTUzIDB4OTY3NDQ2NjguICovCisKKy8qCisgKiBUaGlzIGlzIHRoZSBwYWNrZXQgdXNlZCBmb3IgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIGNsaWVudCBhbmQKKyAqIHNlcnZlci4gQWxsIGRhdGEgYXJlIGluIG5ldHdvcmsgYnl0ZSBvcmRlci4KKyAqLworc3RydWN0IG5iZF9yZXF1ZXN0IHsKKwl1MzIgbWFnaWM7CisJdTMyIHR5cGU7CS8qID09IFJFQUQgfHwgPT0gV1JJVEUgCSovCisJY2hhciBoYW5kbGVbOF07CisJdTY0IGZyb207CisJdTMyIGxlbjsKK30KKyNpZmRlZiBfX0dOVUNfXworCV9fYXR0cmlidXRlX18gKChwYWNrZWQpKQorI2VuZGlmCis7CisKKy8qCisgKiBUaGlzIGlzIHRoZSByZXBseSBwYWNrZXQgdGhhdCBuYmQtc2VydmVyIHNlbmRzIGJhY2sgdG8gdGhlIGNsaWVudCBhZnRlcgorICogaXQgaGFzIGNvbXBsZXRlZCBhbiBJL08gcmVxdWVzdCAob3IgYW4gZXJyb3Igb2NjdXJzKS4KKyAqLworc3RydWN0IG5iZF9yZXBseSB7CisJdTMyIG1hZ2ljOworCXUzMiBlcnJvcjsJCS8qIDAgPSBvaywgZWxzZSBlcnJvcgkqLworCWNoYXIgaGFuZGxlWzhdOwkJLyogaGFuZGxlIHlvdSBnb3QgZnJvbSByZXF1ZXN0CSovCit9OworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25jcC5oIGIvaW5jbHVkZS9saW51eC9uY3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWY3Nzg3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uY3AuaApAQCAtMCwwICsxLDIwMSBAQAorLyoKKyAqICBuY3AuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTUgYnkgVm9sa2VyIExlbmRlY2tlCisgKiAgTW9kaWZpZWQgZm9yIHNwYXJjIGJ5IEouRi4gQ2hhZGltYQorICogIE1vZGlmaWVkIGZvciBfX2NvbnN0YW50X250b2ggYnkgRnJhbmsgQS4gVm9yc3RlbmJvc2NoCisgKgorICovCisKKyNpZm5kZWYgX0xJTlVYX05DUF9ICisjZGVmaW5lIF9MSU5VWF9OQ1BfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2RlZmluZSBOQ1BfUFRZUEUgICAgICAgICAgICAgICAgKDB4MTEpCisjZGVmaW5lIE5DUF9QT1JUICAgICAgICAgICAgICAgICAoMHgwNDUxKQorCisjZGVmaW5lIE5DUF9BTExPQ19TTE9UX1JFUVVFU1QgICAoMHgxMTExKQorI2RlZmluZSBOQ1BfUkVRVUVTVCAgICAgICAgICAgICAgKDB4MjIyMikKKyNkZWZpbmUgTkNQX0RFQUxMT0NfU0xPVF9SRVFVRVNUICgweDU1NTUpCisKK3N0cnVjdCBuY3BfcmVxdWVzdF9oZWFkZXIgeworCV9fdTE2IHR5cGUgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisJX191OCBzZXF1ZW5jZSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwlfX3U4IGNvbm5fbG93IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCV9fdTggdGFzayBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwlfX3U4IGNvbm5faGlnaCBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwlfX3U4IGZ1bmN0aW9uIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCV9fdTggZGF0YVswXSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK307CisKKyNkZWZpbmUgTkNQX1JFUExZICAgICAgICAgICAgICAgICgweDMzMzMpCisjZGVmaW5lIE5DUF9XQVRDSERPRwkJICgweDNFM0UpCisjZGVmaW5lIE5DUF9QT1NJVElWRV9BQ0sgICAgICAgICAoMHg5OTk5KQorCitzdHJ1Y3QgbmNwX3JlcGx5X2hlYWRlciB7CisJX191MTYgdHlwZSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwlfX3U4IHNlcXVlbmNlIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCV9fdTggY29ubl9sb3cgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisJX191OCB0YXNrIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCV9fdTggY29ubl9oaWdoIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCV9fdTggY29tcGxldGlvbl9jb2RlIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCV9fdTggY29ubmVjdGlvbl9zdGF0ZSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwlfX3U4IGRhdGFbMF0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9OworCisjZGVmaW5lIE5DUF9WT0xOQU1FX0xFTiAoMTYpCisjZGVmaW5lIE5DUF9OVU1CRVJfT0ZfVk9MVU1FUyAoMjU2KQorc3RydWN0IG5jcF92b2x1bWVfaW5mbyB7CisJX191MzIgdG90YWxfYmxvY2tzOworCV9fdTMyIGZyZWVfYmxvY2tzOworCV9fdTMyIHB1cmdlYWJsZV9ibG9ja3M7CisJX191MzIgbm90X3lldF9wdXJnZWFibGVfYmxvY2tzOworCV9fdTMyIHRvdGFsX2Rpcl9lbnRyaWVzOworCV9fdTMyIGF2YWlsYWJsZV9kaXJfZW50cmllczsKKwlfX3U4IHNlY3RvcnNfcGVyX2Jsb2NrOworCWNoYXIgdm9sdW1lX25hbWVbTkNQX1ZPTE5BTUVfTEVOICsgMV07Cit9OworCisjZGVmaW5lIEFSX1JFQUQgICAgICAoY3B1X3RvX2xlMTYoMSkpCisjZGVmaW5lIEFSX1dSSVRFICAgICAoY3B1X3RvX2xlMTYoMikpCisjZGVmaW5lIEFSX0VYQ0xVU0lWRSAoY3B1X3RvX2xlMTYoMHgyMCkpCisKKyNkZWZpbmUgTkNQX0ZJTEVfSURfTEVOIDYKKworLyogRGVmaW5lcyBmb3IgTmFtZSBTcGFjZXMgKi8KKyNkZWZpbmUgTldfTlNfRE9TICAgICAwCisjZGVmaW5lIE5XX05TX01BQyAgICAgMQorI2RlZmluZSBOV19OU19ORlMgICAgIDIKKyNkZWZpbmUgTldfTlNfRlRBTSAgICAzCisjZGVmaW5lIE5XX05TX09TMiAgICAgNAorCisvKiAgRGVmaW5lcyBmb3IgUmV0dXJuSW5mb3JtYXRpb25NYXNrICovCisjZGVmaW5lIFJJTV9OQU1FCSAgICAgIChjcHVfdG9fbGUzMigxKSkKKyNkZWZpbmUgUklNX1NQQUNFX0FMTE9DQVRFRCAgIChjcHVfdG9fbGUzMigyKSkKKyNkZWZpbmUgUklNX0FUVFJJQlVURVMJICAgICAgKGNwdV90b19sZTMyKDQpKQorI2RlZmluZSBSSU1fREFUQV9TSVpFCSAgICAgIChjcHVfdG9fbGUzMig4KSkKKyNkZWZpbmUgUklNX1RPVEFMX1NJWkUJICAgICAgKGNwdV90b19sZTMyKDB4MTApKQorI2RlZmluZSBSSU1fRVhUX0FUVFJfSU5GTyAgICAgKGNwdV90b19sZTMyKDB4MjApKQorI2RlZmluZSBSSU1fQVJDSElWRQkgICAgICAoY3B1X3RvX2xlMzIoMHg0MCkpCisjZGVmaW5lIFJJTV9NT0RJRlkJICAgICAgKGNwdV90b19sZTMyKDB4ODApKQorI2RlZmluZSBSSU1fQ1JFQVRJT04JICAgICAgKGNwdV90b19sZTMyKDB4MTAwKSkKKyNkZWZpbmUgUklNX09XTklOR19OQU1FU1BBQ0UgIChjcHVfdG9fbGUzMigweDIwMCkpCisjZGVmaW5lIFJJTV9ESVJFQ1RPUlkJICAgICAgKGNwdV90b19sZTMyKDB4NDAwKSkKKyNkZWZpbmUgUklNX1JJR0hUUwkgICAgICAoY3B1X3RvX2xlMzIoMHg4MDApKQorI2RlZmluZSBSSU1fQUxMIAkgICAgICAoY3B1X3RvX2xlMzIoMHhGRkYpKQorI2RlZmluZSBSSU1fQ09NUFJFU1NFRF9JTkZPICAgKGNwdV90b19sZTMyKDB4ODAwMDAwMDApKQorCisvKiBEZWZpbmVzIGZvciBOU0luZm9CaXRNYXNrICovCisjZGVmaW5lIE5TSUJNX05GU19OQU1FCQkweDAwMDEKKyNkZWZpbmUgTlNJQk1fTkZTX01PREUJCTB4MDAwMgorI2RlZmluZSBOU0lCTV9ORlNfR0lECQkweDAwMDQKKyNkZWZpbmUgTlNJQk1fTkZTX05MSU5LUwkweDAwMDgKKyNkZWZpbmUgTlNJQk1fTkZTX1JERVYJCTB4MDAxMAorI2RlZmluZSBOU0lCTV9ORlNfTElOSwkJMHgwMDIwCisjZGVmaW5lIE5TSUJNX05GU19DUkVBVEVECTB4MDA0MAorI2RlZmluZSBOU0lCTV9ORlNfVUlECQkweDAwODAKKyNkZWZpbmUgTlNJQk1fTkZTX0FDU0ZMQUcJMHgwMTAwCisjZGVmaW5lIE5TSUJNX05GU19NWUZMQUcJMHgwMjAwCisKKy8qIG9wZW4vY3JlYXRlIG1vZGVzICovCisjZGVmaW5lIE9DX01PREVfT1BFTgkgIDB4MDEKKyNkZWZpbmUgT0NfTU9ERV9UUlVOQ0FURSAgMHgwMgorI2RlZmluZSBPQ19NT0RFX1JFUExBQ0UgICAweDAyCisjZGVmaW5lIE9DX01PREVfQ1JFQVRFCSAgMHgwOAorCisvKiBvcGVuL2NyZWF0ZSByZXN1bHRzICovCisjZGVmaW5lIE9DX0FDVElPTl9OT05FCSAgIDB4MDAKKyNkZWZpbmUgT0NfQUNUSU9OX09QRU4JICAgMHgwMQorI2RlZmluZSBPQ19BQ1RJT05fQ1JFQVRFICAgMHgwMgorI2RlZmluZSBPQ19BQ1RJT05fVFJVTkNBVEUgMHgwNAorI2RlZmluZSBPQ19BQ1RJT05fUkVQTEFDRSAgMHgwNAorCisvKiBhY2Nlc3MgcmlnaHRzIGF0dHJpYnV0ZXMgKi8KKyNpZm5kZWYgQVJfUkVBRF9PTkxZCisjZGVmaW5lIEFSX1JFQURfT05MWQkgICAweDAwMDEKKyNkZWZpbmUgQVJfV1JJVEVfT05MWQkgICAweDAwMDIKKyNkZWZpbmUgQVJfREVOWV9SRUFECSAgIDB4MDAwNAorI2RlZmluZSBBUl9ERU5ZX1dSSVRFCSAgIDB4MDAwOAorI2RlZmluZSBBUl9DT01QQVRJQklMSVRZICAgMHgwMDEwCisjZGVmaW5lIEFSX1dSSVRFX1RIUk9VR0ggICAweDAwNDAKKyNkZWZpbmUgQVJfT1BFTl9DT01QUkVTU0VEIDB4MDEwMAorI2VuZGlmCisKK3N0cnVjdCBud19uZnNfaW5mbyB7CisJX191MzIgbW9kZTsKKwlfX3UzMiByZGV2OworfTsKKworc3RydWN0IG53X2luZm9fc3RydWN0IHsKKwlfX3UzMiBzcGFjZUFsbG9jIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCV9fbGUzMiBhdHRyaWJ1dGVzIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCV9fdTE2IGZsYWdzIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCV9fbGUzMiBkYXRhU3RyZWFtU2l6ZSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwlfX2xlMzIgdG90YWxTdHJlYW1TaXplIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCV9fdTE2IG51bWJlck9mU3RyZWFtcyBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwlfX2xlMTYgY3JlYXRpb25UaW1lIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCV9fbGUxNiBjcmVhdGlvbkRhdGUgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisJX191MzIgY3JlYXRvcklEIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCV9fbGUxNiBtb2RpZnlUaW1lIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCV9fbGUxNiBtb2RpZnlEYXRlIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCV9fdTMyIG1vZGlmaWVySUQgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisJX19sZTE2IGxhc3RBY2Nlc3NEYXRlIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCV9fdTE2IGFyY2hpdmVUaW1lIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCV9fdTE2IGFyY2hpdmVEYXRlIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCV9fdTMyIGFyY2hpdmVySUQgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisJX191MTYgaW5oZXJpdGVkUmlnaHRzTWFzayBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwlfX2xlMzIgZGlyRW50TnVtIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCV9fbGUzMiBEb3NEaXJOdW0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisJX191MzIgdm9sTnVtYmVyIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCV9fdTMyIEVBRGF0YVNpemUgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisJX191MzIgRUFLZXlDb3VudCBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwlfX3UzMiBFQUtleVNpemUgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisJX191MzIgTlNDcmVhdG9yIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCV9fdTggbmFtZUxlbiBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwlfX3U4IGVudHJ5TmFtZVsyNTZdIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCS8qIGxpYm5jcCBtYXkgZGVwZW5kIG9uIHRoZXJlIGJlaW5nIG5vdGhpbmcgYWZ0ZXIgZW50cnlOYW1lICovCisjaWZkZWYgX19LRVJORUxfXworCXN0cnVjdCBud19uZnNfaW5mbyBuZnM7CisjZW5kaWYKK307CisKKy8qIG1vZGlmeSBtYXNrIC0gdXNlIHdpdGggTU9ESUZZX0RPU19JTkZPIHN0cnVjdHVyZSAqLworI2RlZmluZSBETV9BVFRSSUJVVEVTCQkgIChjcHVfdG9fbGUzMigweDAyKSkKKyNkZWZpbmUgRE1fQ1JFQVRFX0RBVEUJCSAgKGNwdV90b19sZTMyKDB4MDQpKQorI2RlZmluZSBETV9DUkVBVEVfVElNRQkJICAoY3B1X3RvX2xlMzIoMHgwOCkpCisjZGVmaW5lIERNX0NSRUFUT1JfSUQJCSAgKGNwdV90b19sZTMyKDB4MTApKQorI2RlZmluZSBETV9BUkNISVZFX0RBVEUgCSAgKGNwdV90b19sZTMyKDB4MjApKQorI2RlZmluZSBETV9BUkNISVZFX1RJTUUgCSAgKGNwdV90b19sZTMyKDB4NDApKQorI2RlZmluZSBETV9BUkNISVZFUl9JRAkJICAoY3B1X3RvX2xlMzIoMHg4MCkpCisjZGVmaW5lIERNX01PRElGWV9EQVRFCQkgIChjcHVfdG9fbGUzMigweDAxMDApKQorI2RlZmluZSBETV9NT0RJRllfVElNRQkJICAoY3B1X3RvX2xlMzIoMHgwMjAwKSkKKyNkZWZpbmUgRE1fTU9ESUZJRVJfSUQJCSAgKGNwdV90b19sZTMyKDB4MDQwMCkpCisjZGVmaW5lIERNX0xBU1RfQUNDRVNTX0RBVEUJICAoY3B1X3RvX2xlMzIoMHgwODAwKSkKKyNkZWZpbmUgRE1fSU5IRVJJVEVEX1JJR0hUU19NQVNLICAoY3B1X3RvX2xlMzIoMHgxMDAwKSkKKyNkZWZpbmUgRE1fTUFYSU1VTV9TUEFDRQkgIChjcHVfdG9fbGUzMigweDIwMDApKQorCitzdHJ1Y3QgbndfbW9kaWZ5X2Rvc19pbmZvIHsKKwlfX2xlMzIgYXR0cmlidXRlcyBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwlfX2xlMTYgY3JlYXRpb25EYXRlIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCV9fbGUxNiBjcmVhdGlvblRpbWUgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisJX191MzIgY3JlYXRvcklEIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCV9fbGUxNiBtb2RpZnlEYXRlIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCV9fbGUxNiBtb2RpZnlUaW1lIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCV9fdTMyIG1vZGlmaWVySUQgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisJX191MTYgYXJjaGl2ZURhdGUgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisJX191MTYgYXJjaGl2ZVRpbWUgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisJX191MzIgYXJjaGl2ZXJJRCBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwlfX2xlMTYgbGFzdEFjY2Vzc0RhdGUgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisJX191MTYgaW5oZXJpdGFuY2VHcmFudE1hc2sgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisJX191MTYgaW5oZXJpdGFuY2VSZXZva2VNYXNrIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCV9fdTMyIG1heGltdW1TcGFjZSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK307CisKK3N0cnVjdCBud19zZWFyY2hfc2VxdWVuY2UgeworCV9fdTggdm9sTnVtYmVyIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCV9fdTMyIGRpckJhc2UgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisJX191MzIgc2VxdWVuY2UgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9OworCisjZW5kaWYJCQkJLyogX0xJTlVYX05DUF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25jcF9mcy5oIGIvaW5jbHVkZS9saW51eC9uY3BfZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Mjk3ZTQzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uY3BfZnMuaApAQCAtMCwwICsxLDMwMCBAQAorLyoKKyAqICBuY3BfZnMuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYgYnkgVm9sa2VyIExlbmRlY2tlCisgKgorICovCisKKyNpZm5kZWYgX0xJTlVYX05DUF9GU19ICisjZGVmaW5lIF9MSU5VWF9OQ1BfRlNfSAorCisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNpbmNsdWRlIDxsaW51eC9uY3BfZnNfaS5oPgorI2luY2x1ZGUgPGxpbnV4L25jcF9mc19zYi5oPgorI2luY2x1ZGUgPGxpbnV4L2lweC5oPgorI2luY2x1ZGUgPGxpbnV4L25jcF9uby5oPgorCisvKgorICogaW9jdGwgY29tbWFuZHMKKyAqLworCitzdHJ1Y3QgbmNwX2lvY3RsX3JlcXVlc3QgeworCXVuc2lnbmVkIGludCBmdW5jdGlvbjsKKwl1bnNpZ25lZCBpbnQgc2l6ZTsKKwljaGFyIF9fdXNlciAqZGF0YTsKK307CisKK3N0cnVjdCBuY3BfZnNfaW5mbyB7CisJaW50IHZlcnNpb247CisJc3RydWN0IHNvY2thZGRyX2lweCBhZGRyOworCV9fa2VybmVsX3VpZF90IG1vdW50ZWRfdWlkOworCWludCBjb25uZWN0aW9uOwkJLyogQ29ubmVjdGlvbiBudW1iZXIgdGhlIHNlcnZlciBhc3NpZ25lZCB1cyAqLworCWludCBidWZmZXJfc2l6ZTsJLyogVGhlIG5lZ290aWF0ZWQgYnVmZmVyIHNpemUsIHRvIGJlCisJCQkJICAgdXNlZCBmb3IgcmVhZC93cml0ZSByZXF1ZXN0cyEgKi8KKworCWludCB2b2x1bWVfbnVtYmVyOworCV9fbGUzMiBkaXJlY3RvcnlfaWQ7Cit9OworCitzdHJ1Y3QgbmNwX2ZzX2luZm9fdjIgeworCWludCB2ZXJzaW9uOworCXVuc2lnbmVkIGxvbmcgbW91bnRlZF91aWQ7CisJdW5zaWduZWQgaW50IGNvbm5lY3Rpb247CisJdW5zaWduZWQgaW50IGJ1ZmZlcl9zaXplOworCisJdW5zaWduZWQgaW50IHZvbHVtZV9udW1iZXI7CisJX19sZTMyIGRpcmVjdG9yeV9pZDsKKworCV9fdTMyIGR1bW15MTsKKwlfX3UzMiBkdW1teTI7CisJX191MzIgZHVtbXkzOworfTsKKworc3RydWN0IG5jcF9zaWduX2luaXQKK3sKKwljaGFyIHNpZ25fcm9vdFs4XTsKKwljaGFyIHNpZ25fbGFzdFsxNl07Cit9OworCitzdHJ1Y3QgbmNwX2xvY2tfaW9jdGwKK3sKKyNkZWZpbmUgTkNQX0xPQ0tfTE9HCTAKKyNkZWZpbmUgTkNQX0xPQ0tfU0gJMQorI2RlZmluZSBOQ1BfTE9DS19FWAkyCisjZGVmaW5lIE5DUF9MT0NLX0NMRUFSCTI1NgorCWludAkJY21kOworCWludAkJb3JpZ2luOworCXVuc2lnbmVkIGludAlvZmZzZXQ7CisJdW5zaWduZWQgaW50CWxlbmd0aDsKKyNkZWZpbmUgTkNQX0xPQ0tfREVGQVVMVF9USU1FT1VUCTE4CisjZGVmaW5lIE5DUF9MT0NLX01BWF9USU1FT1VUCQkxODAKKwlpbnQJCXRpbWVvdXQ7Cit9OworCitzdHJ1Y3QgbmNwX3NldHJvb3RfaW9jdGwKK3sKKwlpbnQJCXZvbE51bWJlcjsKKwlpbnQJCW5hbWVzcGFjZTsKKwlfX2xlMzIJCWRpckVudE51bTsKK307CisKK3N0cnVjdCBuY3Bfb2JqZWN0bmFtZV9pb2N0bAoreworI2RlZmluZSBOQ1BfQVVUSF9OT05FCTB4MDAKKyNkZWZpbmUgTkNQX0FVVEhfQklORAkweDMxCisjZGVmaW5lIE5DUF9BVVRIX05EUwkweDMyCisJaW50CQlhdXRoX3R5cGU7CisJc2l6ZV90CQlvYmplY3RfbmFtZV9sZW47CisJdm9pZCBfX3VzZXIgKglvYmplY3RfbmFtZTsJLyogYW4gdXNlcnNwYWNlIGRhdGEsIGluIG1vc3QgY2FzZXMgdXNlciBuYW1lICovCit9OworCitzdHJ1Y3QgbmNwX3ByaXZhdGVkYXRhX2lvY3RsCit7CisJc2l6ZV90CQlsZW47CisJdm9pZCBfX3VzZXIgKglkYXRhOwkJLyogfjEwMDAgZm9yIE5EUyAqLworfTsKKworLyogTkxTIGNoYXJzZXRzIGJ5IGlvY3RsICovCisjZGVmaW5lIE5DUF9JT0NTTkFNRV9MRU4gMjAKK3N0cnVjdCBuY3BfbmxzX2lvY3RsCit7CisJdW5zaWduZWQgY2hhciBjb2RlcGFnZVtOQ1BfSU9DU05BTUVfTEVOKzFdOworCXVuc2lnbmVkIGNoYXIgaW9jaGFyc2V0W05DUF9JT0NTTkFNRV9MRU4rMV07Cit9OworCisjZGVmaW5lCU5DUF9JT0NfTkNQUkVRVUVTVAkJX0lPUignbicsIDEsIHN0cnVjdCBuY3BfaW9jdGxfcmVxdWVzdCkKKyNkZWZpbmUJTkNQX0lPQ19HRVRNT1VOVFVJRAkJX0lPVygnbicsIDIsIF9fa2VybmVsX29sZF91aWRfdCkKKyNkZWZpbmUgTkNQX0lPQ19HRVRNT1VOVFVJRDIJCV9JT1coJ24nLCAyLCB1bnNpZ25lZCBsb25nKQorCisjZGVmaW5lIE5DUF9JT0NfQ09OTl9MT0dHRURfSU4gICAgICAgICAgX0lPKCduJywgMykKKworI2RlZmluZSBOQ1BfR0VUX0ZTX0lORk9fVkVSU0lPTiAgICAoMSkKKyNkZWZpbmUgTkNQX0lPQ19HRVRfRlNfSU5GTyAgICAgICAgICAgICBfSU9XUignbicsIDQsIHN0cnVjdCBuY3BfZnNfaW5mbykKKyNkZWZpbmUgTkNQX0dFVF9GU19JTkZPX1ZFUlNJT05fVjIgKDIpCisjZGVmaW5lIE5DUF9JT0NfR0VUX0ZTX0lORk9fVjIJCV9JT1dSKCduJywgNCwgc3RydWN0IG5jcF9mc19pbmZvX3YyKQorCisjZGVmaW5lIE5DUF9JT0NfU0lHTl9JTklUCQlfSU9SKCduJywgNSwgc3RydWN0IG5jcF9zaWduX2luaXQpCisjZGVmaW5lIE5DUF9JT0NfU0lHTl9XQU5URUQJCV9JT1IoJ24nLCA2LCBpbnQpCisjZGVmaW5lIE5DUF9JT0NfU0VUX1NJR05fV0FOVEVECQlfSU9XKCduJywgNiwgaW50KQorCisjZGVmaW5lIE5DUF9JT0NfTE9DS1VOTE9DSwkJX0lPUignbicsIDcsIHN0cnVjdCBuY3BfbG9ja19pb2N0bCkKKworI2RlZmluZSBOQ1BfSU9DX0dFVFJPT1QJCQlfSU9XKCduJywgOCwgc3RydWN0IG5jcF9zZXRyb290X2lvY3RsKQorI2RlZmluZSBOQ1BfSU9DX1NFVFJPT1QJCQlfSU9SKCduJywgOCwgc3RydWN0IG5jcF9zZXRyb290X2lvY3RsKQorCisjZGVmaW5lIE5DUF9JT0NfR0VUT0JKRUNUTkFNRQkJX0lPV1IoJ24nLCA5LCBzdHJ1Y3QgbmNwX29iamVjdG5hbWVfaW9jdGwpCisjZGVmaW5lIE5DUF9JT0NfU0VUT0JKRUNUTkFNRQkJX0lPUignbicsIDksIHN0cnVjdCBuY3Bfb2JqZWN0bmFtZV9pb2N0bCkKKyNkZWZpbmUgTkNQX0lPQ19HRVRQUklWQVRFREFUQQkJX0lPV1IoJ24nLCAxMCwgc3RydWN0IG5jcF9wcml2YXRlZGF0YV9pb2N0bCkKKyNkZWZpbmUgTkNQX0lPQ19TRVRQUklWQVRFREFUQQkJX0lPUignbicsIDEwLCBzdHJ1Y3QgbmNwX3ByaXZhdGVkYXRhX2lvY3RsKQorCisjZGVmaW5lIE5DUF9JT0NfR0VUQ0hBUlNFVFMJCV9JT1dSKCduJywgMTEsIHN0cnVjdCBuY3BfbmxzX2lvY3RsKQorI2RlZmluZSBOQ1BfSU9DX1NFVENIQVJTRVRTCQlfSU9SKCduJywgMTEsIHN0cnVjdCBuY3BfbmxzX2lvY3RsKQorCisjZGVmaW5lIE5DUF9JT0NfR0VUREVOVFJZVFRMCQlfSU9XKCduJywgMTIsIF9fdTMyKQorI2RlZmluZSBOQ1BfSU9DX1NFVERFTlRSWVRUTAkJX0lPUignbicsIDEyLCBfX3UzMikKKworLyoKKyAqIFRoZSBwYWNrZXQgc2l6ZSB0byBhbGxvY2F0ZS4gT25lIHBhZ2Ugc2hvdWxkIGJlIGVub3VnaC4KKyAqLworI2RlZmluZSBOQ1BfUEFDS0VUX1NJWkUgNDA3MAorCisjZGVmaW5lIE5DUF9NQVhQQVRITEVOIDI1NQorI2RlZmluZSBOQ1BfTUFYTkFNRUxFTiAxNAorCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKy8qIHVuZGVmIGJlY2F1c2UgcHVibGljIGRlZmluZSBpbiB1bXNkb3NfZnMuaCAobmNwX2ZzLmggaXNuJ3QgcHVibGljKSAqLworI3VuZGVmIFBSSU5USworLyogZGVmaW5lIGJlY2F1c2UgaXQgaXMgZWFzeSB0byBjaGFuZ2UgUFJJTlRLIHRvIHsqfVBSSU5USyAqLworI2RlZmluZSBQUklOVEsoZm9ybWF0LCBhcmdzLi4uKSBwcmludGsoS0VSTl9ERUJVRyBmb3JtYXQgLCAjIyBhcmdzKQorCisjdW5kZWYgTkNQRlNfUEFSQU5PSUEKKyNpZmRlZiBOQ1BGU19QQVJBTk9JQQorI2RlZmluZSBQUFJJTlRLKGZvcm1hdCwgYXJncy4uLikgUFJJTlRLKGZvcm1hdCAsICMjIGFyZ3MpCisjZWxzZQorI2RlZmluZSBQUFJJTlRLKGZvcm1hdCwgYXJncy4uLikKKyNlbmRpZgorCisjaWZuZGVmIERFQlVHX05DUAorI2RlZmluZSBERUJVR19OQ1AgMAorI2VuZGlmCisjaWYgREVCVUdfTkNQID4gMAorI2RlZmluZSBEUFJJTlRLKGZvcm1hdCwgYXJncy4uLikgUFJJTlRLKGZvcm1hdCAsICMjIGFyZ3MpCisjZWxzZQorI2RlZmluZSBEUFJJTlRLKGZvcm1hdCwgYXJncy4uLikKKyNlbmRpZgorI2lmIERFQlVHX05DUCA+IDEKKyNkZWZpbmUgRERQUklOVEsoZm9ybWF0LCBhcmdzLi4uKSBQUklOVEsoZm9ybWF0ICwgIyMgYXJncykKKyNlbHNlCisjZGVmaW5lIEREUFJJTlRLKGZvcm1hdCwgYXJncy4uLikKKyNlbmRpZgorCisjZGVmaW5lIE5DUF9NQVhfUlBDX1RJTUVPVVQgKDYqSFopCisKKworc3RydWN0IG5jcF9lbnRyeV9pbmZvIHsKKwlzdHJ1Y3QgbndfaW5mb19zdHJ1Y3QJaTsKKwlpbm9fdAkJCWlubzsKKwlpbnQJCQlvcGVuZWQ7CisJaW50CQkJYWNjZXNzOworCXVuc2lnbmVkIGludAkJdm9sdW1lOworCV9fdTgJCQlmaWxlX2hhbmRsZVs2XTsKK307CisKKy8qIEd1ZXNzLCB3aGF0IDB4NTY0YyBpcyA6LSkgKi8KKyNkZWZpbmUgTkNQX1NVUEVSX01BR0lDICAweDU2NGMKKworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBuY3Bfc2VydmVyICpOQ1BfU0JQKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJcmV0dXJuIHNiLT5zX2ZzX2luZm87Cit9CisKKyNkZWZpbmUgTkNQX1NFUlZFUihpbm9kZSkJTkNQX1NCUCgoaW5vZGUpLT5pX3NiKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgbmNwX2lub2RlX2luZm8gKk5DUF9GSU5GTyhzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXJldHVybiBjb250YWluZXJfb2YoaW5vZGUsIHN0cnVjdCBuY3BfaW5vZGVfaW5mbywgdmZzX2lub2RlKTsKK30KKworI2lmZGVmIERFQlVHX05DUF9NQUxMT0MKKworI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworZXh0ZXJuIGludCBuY3BfbWFsbG9jZWQ7CitleHRlcm4gaW50IG5jcF9jdXJyZW50X21hbGxvY2VkOworCitzdGF0aWMgaW5saW5lIHZvaWQgKgorIG5jcF9rbWFsbG9jKHVuc2lnbmVkIGludCBzaXplLCBpbnQgcHJpb3JpdHkpCit7CisJbmNwX21hbGxvY2VkICs9IDE7CisJbmNwX2N1cnJlbnRfbWFsbG9jZWQgKz0gMTsKKwlyZXR1cm4ga21hbGxvYyhzaXplLCBwcmlvcml0eSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuY3Bfa2ZyZWVfcyh2b2lkICpvYmosIGludCBzaXplKQoreworCW5jcF9jdXJyZW50X21hbGxvY2VkIC09IDE7CisJa2ZyZWUob2JqKTsKK30KKworI2Vsc2UJCQkJLyogREVCVUdfTkNQX01BTExPQyAqLworCisjZGVmaW5lIG5jcF9rbWFsbG9jKHMscCkga21hbGxvYyhzLHApCisjZGVmaW5lIG5jcF9rZnJlZV9zKG8scykga2ZyZWUobykKKworI2VuZGlmCQkJCS8qIERFQlVHX05DUF9NQUxMT0MgKi8KKworLyogbGludXgvZnMvbmNwZnMvaW5vZGUuYyAqLworaW50IG5jcF9ub3RpZnlfY2hhbmdlKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGlhdHRyICopOworc3RydWN0IGlub2RlICpuY3BfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IG5jcF9lbnRyeV9pbmZvICopOwordm9pZCBuY3BfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgbmNwX2VudHJ5X2luZm8gKik7Cit2b2lkIG5jcF91cGRhdGVfaW5vZGUyKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgbmNwX2VudHJ5X2luZm8gKik7CisKKy8qIGxpbnV4L2ZzL25jcGZzL2Rpci5jICovCitleHRlcm4gc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbmNwX2Rpcl9pbm9kZV9vcGVyYXRpb25zOworZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbmNwX2Rpcl9vcGVyYXRpb25zOworaW50IG5jcF9jb25uX2xvZ2dlZF9pbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CitpbnQgbmNwX2RhdGVfZG9zMnVuaXgoX19sZTE2IHRpbWUsIF9fbGUxNiBkYXRlKTsKK3ZvaWQgbmNwX2RhdGVfdW5peDJkb3MoaW50IHVuaXhfZGF0ZSwgX19sZTE2ICogdGltZSwgX19sZTE2ICogZGF0ZSk7CisKKy8qIGxpbnV4L2ZzL25jcGZzL2lvY3RsLmMgKi8KK2ludCBuY3BfaW9jdGwoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7CisKKy8qIGxpbnV4L2ZzL25jcGZzL3NvY2suYyAqLworaW50IG5jcF9yZXF1ZXN0MihzdHJ1Y3QgbmNwX3NlcnZlciAqc2VydmVyLCBpbnQgZnVuY3Rpb24sCisJdm9pZCogcmVwbHksIGludCBtYXhfcmVwbHlfc2l6ZSk7CitzdGF0aWMgaW5saW5lIGludCBuY3BfcmVxdWVzdChzdHJ1Y3QgbmNwX3NlcnZlciAqc2VydmVyLCBpbnQgZnVuY3Rpb24pIHsKKwlyZXR1cm4gbmNwX3JlcXVlc3QyKHNlcnZlciwgZnVuY3Rpb24sIHNlcnZlci0+cGFja2V0LCBzZXJ2ZXItPnBhY2tldF9zaXplKTsKK30KK2ludCBuY3BfY29ubmVjdChzdHJ1Y3QgbmNwX3NlcnZlciAqc2VydmVyKTsKK2ludCBuY3BfZGlzY29ubmVjdChzdHJ1Y3QgbmNwX3NlcnZlciAqc2VydmVyKTsKK3ZvaWQgbmNwX2xvY2tfc2VydmVyKHN0cnVjdCBuY3Bfc2VydmVyICpzZXJ2ZXIpOwordm9pZCBuY3BfdW5sb2NrX3NlcnZlcihzdHJ1Y3QgbmNwX3NlcnZlciAqc2VydmVyKTsKKworLyogbGludXgvZnMvbmNwZnMvZmlsZS5jICovCitleHRlcm4gc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbmNwX2ZpbGVfaW5vZGVfb3BlcmF0aW9uczsKK2V4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG5jcF9maWxlX29wZXJhdGlvbnM7CitpbnQgbmNwX21ha2Vfb3BlbihzdHJ1Y3QgaW5vZGUgKiwgaW50KTsKKworLyogbGludXgvZnMvbmNwZnMvbW1hcC5jICovCitpbnQgbmNwX21tYXAoc3RydWN0IGZpbGUgKiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICopOworCisvKiBsaW51eC9mcy9uY3Bmcy9uY3BsaWJfa2VybmVsLmMgKi8KK2ludCBuY3BfbWFrZV9jbG9zZWQoc3RydWN0IGlub2RlICopOworCisjZGVmaW5lIG5jcF9uYW1lc3BhY2UoaSkJKE5DUF9TRVJWRVIoaSktPm5hbWVfc3BhY2VbTkNQX0ZJTkZPKGkpLT52b2xOdW1iZXJdKQorCitzdGF0aWMgaW5saW5lIGludCBuY3BfcHJlc2VydmVfZW50cnlfY2FzZShzdHJ1Y3QgaW5vZGUgKmksIF9fdTMyIG5zY3JlYXRvcikKK3sKKyNpZmRlZiBDT05GSUdfTkNQRlNfU01BTExET1MKKwlpbnQgbnMgPSBuY3BfbmFtZXNwYWNlKGkpOworCisJaWYgKChucyA9PSBOV19OU19ET1MpCisjaWZkZWYgQ09ORklHX05DUEZTX09TMl9OUworCQl8fCAoKG5zID09IE5XX05TX09TMikgJiYgKG5zY3JlYXRvciA9PSBOV19OU19ET1MpKQorI2VuZGlmIC8qIENPTkZJR19OQ1BGU19PUzJfTlMgKi8KKwkJCQkpCisJCXJldHVybiAwOworI2VuZGlmIC8qIENPTkZJR19OQ1BGU19TTUFMTERPUyAqLworCXJldHVybiAxOworfQorCisjZGVmaW5lIG5jcF9wcmVzZXJ2ZV9jYXNlKGkpCShuY3BfbmFtZXNwYWNlKGkpICE9IE5XX05TX0RPUykKKworc3RhdGljIGlubGluZSBpbnQgbmNwX2Nhc2Vfc2Vuc2l0aXZlKHN0cnVjdCBpbm9kZSAqaSkKK3sKKyNpZmRlZiBDT05GSUdfTkNQRlNfTkZTX05TCisJcmV0dXJuIG5jcF9uYW1lc3BhY2UoaSkgPT0gTldfTlNfTkZTOworI2Vsc2UKKwlyZXR1cm4gMDsKKyNlbmRpZgkvKiBDT05GSUdfTkNQRlNfTkZTX05TICovCit9IAorCisjZW5kaWYJCQkJLyogX19LRVJORUxfXyAqLworCisjZW5kaWYJCQkJLyogX0xJTlVYX05DUF9GU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25jcF9mc19pLmggYi9pbmNsdWRlL2xpbnV4L25jcF9mc19pLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE1YmUxZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmNwX2ZzX2kuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogIG5jcF9mc19pLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk1IFZvbGtlciBMZW5kZWNrZQorICoKKyAqLworCisjaWZuZGVmIF9MSU5VWF9OQ1BfRlNfSQorI2RlZmluZSBfTElOVVhfTkNQX0ZTX0kKKworI2lmZGVmIF9fS0VSTkVMX18KKworLyoKKyAqIFRoaXMgaXMgdGhlIG5jcGZzIHBhcnQgb2YgdGhlIGlub2RlIHN0cnVjdHVyZS4gVGhpcyBtdXN0IGNvbnRhaW4KKyAqIGFsbCB0aGUgaW5mb3JtYXRpb24gd2UgbmVlZCB0byB3b3JrIHdpdGggYW4gaW5vZGUgYWZ0ZXIgY3JlYXRpb24uCisgKi8KK3N0cnVjdCBuY3BfaW5vZGVfaW5mbyB7CisJX19sZTMyCWRpckVudE51bTsKKwlfX2xlMzIJRG9zRGlyTnVtOworCV9fdTgJdm9sTnVtYmVyOworCV9fbGUzMglud2F0dHI7CisJc3RydWN0IHNlbWFwaG9yZSBvcGVuX3NlbTsKKwlhdG9taWNfdAlvcGVuZWQ7CisJaW50CWFjY2VzczsKKwlpbnQJZmxhZ3M7CisjZGVmaW5lIE5DUElfS0xVREdFX1NZTUxJTksJMHgwMDAxCisJX191OAlmaWxlX2hhbmRsZVs2XTsKKwlzdHJ1Y3QgaW5vZGUgdmZzX2lub2RlOworfTsKKworI2VuZGlmCS8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmCS8qIF9MSU5VWF9OQ1BfRlNfSSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uY3BfZnNfc2IuaCBiL2luY2x1ZGUvbGludXgvbmNwX2ZzX3NiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y4NThlYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmNwX2ZzX3NiLmgKQEAgLTAsMCArMSwxNTcgQEAKKy8qCisgKiAgbmNwX2ZzX3NiLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2IGJ5IFZvbGtlciBMZW5kZWNrZQorICoKKyAqLworCisjaWZuZGVmIF9OQ1BfRlNfU0IKKyNkZWZpbmUgX05DUF9GU19TQgorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9uY3BfbW91bnQuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXQuaD4KKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorCisjZGVmaW5lIE5DUF9ERUZBVUxUX09QVElPTlMgMAkJLyogMiBmb3IgcGFja2V0IHNpZ25hdHVyZXMgKi8KKworc3RydWN0IHNvY2s7CisKK3N0cnVjdCBuY3Bfc2VydmVyIHsKKworCXN0cnVjdCBuY3BfbW91bnRfZGF0YV9rZXJuZWwgbTsJLyogTmVhcmx5IGFsbCBvZiB0aGUgbW91bnQgZGF0YSBpcyBvZgorCQkJCQkgICBpbnRlcmVzdCBmb3IgdXMgbGF0ZXIsIHNvIHdlIHN0b3JlCisJCQkJCSAgIGl0IGNvbXBsZXRlbHkuICovCisKKwlfX3U4IG5hbWVfc3BhY2VbTkNQX05VTUJFUl9PRl9WT0xVTUVTICsgMl07CisKKwlzdHJ1Y3QgZmlsZSAqbmNwX2ZpbHA7CS8qIEZpbGUgcG9pbnRlciB0byBuY3Agc29ja2V0ICovCisJc3RydWN0IHNvY2tldCAqbmNwX3NvY2s7LyogbmNwIHNvY2tldCAqLworCXN0cnVjdCBmaWxlICppbmZvX2ZpbHA7CisJc3RydWN0IHNvY2tldCAqaW5mb19zb2NrOworCisJdTggc2VxdWVuY2U7CisJdTggdGFzazsKKwl1MTYgY29ubmVjdGlvbjsJCS8qIFJlbW90ZSBjb25uZWN0aW9uIG51bWJlciAqLworCisJdTggY29tcGxldGlvbjsJCS8qIFN0YXR1cyBtZXNzYWdlIGZyb20gc2VydmVyICovCisJdTggY29ubl9zdGF0dXM7CQkvKiBCaXQgNCA9IDEgPT0+IFNlcnZlciBnb2luZyBkb3duLCBubworCQkJCSAgIHJlcXVlc3RzIGFsbG93ZWQgYW55bW9yZS4KKwkJCQkgICBCaXQgMCA9IDEgPT0+IFNlcnZlciBpcyBkb3duLiAqLworCisJaW50IGJ1ZmZlcl9zaXplOwkvKiBOZWdvdGlhdGVkIGJ1ZnNpemUgKi8KKworCWludCByZXBseV9zaXplOwkJLyogU2l6ZSBvZiBsYXN0IHJlcGx5ICovCisKKwlpbnQgcGFja2V0X3NpemU7CisJdW5zaWduZWQgY2hhciAqcGFja2V0OwkvKiBIZXJlIHdlIHByZXBhcmUgcmVxdWVzdHMgYW5kCisJCQkJICAgcmVjZWl2ZSByZXBsaWVzICovCisKKwlpbnQgbG9jazsJCS8qIFRvIHByZXZlbnQgbWlzbWF0Y2ggaW4gcHJvdG9jb2xzLiAqLworCXN0cnVjdCBzZW1hcGhvcmUgc2VtOworCisJaW50IGN1cnJlbnRfc2l6ZTsJLyogZm9yIHBhY2tldCBwcmVwYXJhdGlvbiAqLworCWludCBoYXNfc3ViZnVuY3Rpb247CisJaW50IG5jcF9yZXBseV9zaXplOworCisJaW50IHJvb3Rfc2V0dXBlZDsKKworCS8qIGluZm8gZm9yIHBhY2tldCBzaWduaW5nICovCisJaW50IHNpZ25fd2FudGVkOwkvKiAxPVNlcnZlciBuZWVkcyBzaWduZWQgcGFja2V0cyAqLworCWludCBzaWduX2FjdGl2ZTsJLyogMD1kb24ndCBkbyBzaWduaW5nLCAxPWRvICovCisJY2hhciBzaWduX3Jvb3RbOF07CS8qIGdlbmVyYXRlZCBmcm9tIHBhc3N3b3JkIGFuZCBlbmNyLiBrZXkgKi8KKwljaGFyIHNpZ25fbGFzdFsxNl07CQorCisJLyogQXV0aGVudGljYXRpb24gaW5mbzogTkRTIG9yIEJJTkRFUlksIHVzZXJuYW1lICovCisJc3RydWN0IHsKKwkJaW50CWF1dGhfdHlwZTsKKwkJc2l6ZV90CW9iamVjdF9uYW1lX2xlbjsKKwkJdm9pZCoJb2JqZWN0X25hbWU7CisJCWludAlvYmplY3RfdHlwZTsKKwl9IGF1dGg7CisJLyogUGFzc3dvcmQgaW5mbyAqLworCXN0cnVjdCB7CisJCXNpemVfdAlsZW47CisJCXZvaWQqCWRhdGE7CisJfSBwcml2OworCisJLyogbmxzIGluZm86IGNvZGVwYWdlIGZvciB2b2x1bWUgYW5kIGNoYXJzZXQgZm9yIEkvTyAqLworCXN0cnVjdCBubHNfdGFibGUgKm5sc192b2w7CisJc3RydWN0IG5sc190YWJsZSAqbmxzX2lvOworCisJLyogbWF4aW11bSBhZ2UgaW4gamlmZmllcyAqLworCWludCBkZW50cnlfdHRsOworCisJLyogbWlzY2VsbGFuZW91cyAqLworCXVuc2lnbmVkIGludCBmbGFnczsKKworCXNwaW5sb2NrX3QgcmVxdWVzdHNfbG9jazsJLyogTG9jayBhY2Nlc3NlcyB0byB0eC5yZXF1ZXN0cywgdHguY3JlcSBhbmQgcmN2LmNyZXEgd2hlbiBTVFJFQU0gbW9kZSAqLworCisJdm9pZCAoKmRhdGFfcmVhZHkpKHN0cnVjdCBzb2NrKiBzaywgaW50IGxlbik7CisJdm9pZCAoKmVycm9yX3JlcG9ydCkoc3RydWN0IHNvY2sqIHNrKTsKKwl2b2lkICgqd3JpdGVfc3BhY2UpKHN0cnVjdCBzb2NrKiBzayk7CS8qIFNUUkVBTSBtb2RlIG9ubHkgKi8KKwlzdHJ1Y3QgeworCQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgdHE7CQkvKiBTVFJFQU0vREdSQU06IGRhdGEvZXJyb3IgcmVhZHkgKi8KKwkJc3RydWN0IG5jcF9yZXF1ZXN0X3JlcGx5KiBjcmVxOwkvKiBTVFJFQU0vREdSQU06IGF3YWl0aW5nIHJlcGx5IGZyb20gdGhpcyByZXF1ZXN0ICovCisJCXN0cnVjdCBzZW1hcGhvcmUgY3JlcV9zZW07CS8qIERHUkFNIG9ubHk6IGxvY2sgYWNjZXNzZXMgdG8gcmN2LmNyZXEgKi8KKworCQl1bnNpZ25lZCBpbnQgc3RhdGU7CQkvKiBTVFJFQU0gb25seTogcmVjZWl2ZXIgc3RhdGUgKi8KKwkJc3RydWN0IHsKKwkJCV9fdTMyIG1hZ2ljIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCQkJX191MzIgbGVuIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCQkJX191MTYgdHlwZSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwkJCV9fdTE2IHAxIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCQkJX191MTYgcDIgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisJCQlfX3UxNiBwMyBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwkJCV9fdTE2IHR5cGUyIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCQl9IGJ1ZjsJCQkJLyogU1RSRUFNIG9ubHk6IHRlbXBvcmFyeSBidWZmZXIgKi8KKwkJdW5zaWduZWQgY2hhciogcHRyOwkJLyogU1RSRUFNIG9ubHk6IHBvaW50ZXIgdG8gZGF0YSAqLworCQlzaXplX3QgbGVuOwkJCS8qIFNUUkVBTSBvbmx5OiBsZW5ndGggb2YgZGF0YSB0byByZWNlaXZlICovCisJfSByY3Y7CisJc3RydWN0IHsKKwkJc3RydWN0IGxpc3RfaGVhZCByZXF1ZXN0czsJLyogU1RSRUFNIG9ubHk6IHF1ZXVlZCByZXF1ZXN0cyAqLworCQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgdHE7CQkvKiBTVFJFQU0gb25seTogdHJhbnNtaXR0ZXIgcmVhZHkgKi8KKwkJc3RydWN0IG5jcF9yZXF1ZXN0X3JlcGx5KiBjcmVxOwkvKiBTVFJFQU0gb25seTogY3VycmVudGx5IHRyYW5zbWl0dGVkIGVudHJ5ICovCisJfSB0eDsKKwlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lb3V0X3RtOwkJLyogREdSQU0gb25seTogdGltZW91dCB0aW1lciAqLworCXN0cnVjdCB3b3JrX3N0cnVjdCB0aW1lb3V0X3RxOwkJLyogREdSQU0gb25seTogYXNzb2NpYXRlZCBxdWV1ZSwgd2UgcnVuIHRpbWVycyBmcm9tIHByb2Nlc3MgY29udGV4dCAqLworCWludCB0aW1lb3V0X2xhc3Q7CQkJLyogREdSQU0gb25seTogY3VycmVudCB0aW1lb3V0IGxlbmd0aCAqLworCWludCB0aW1lb3V0X3JldHJpZXM7CQkJLyogREdSQU0gb25seTogcmV0cmllcyBsZWZ0ICovCisJc3RydWN0IHsKKwkJc2l6ZV90IGxlbjsKKwkJX191OCBkYXRhWzEyOF07CisJfSB1bmV4cGVjdGVkX3BhY2tldDsKK307CisKK2V4dGVybiB2b2lkIG5jcF90Y3BfcmN2X3Byb2Modm9pZCAqc2VydmVyKTsKK2V4dGVybiB2b2lkIG5jcF90Y3BfdHhfcHJvYyh2b2lkICpzZXJ2ZXIpOworZXh0ZXJuIHZvaWQgbmNwZGdyYW1fcmN2X3Byb2Modm9pZCAqc2VydmVyKTsKK2V4dGVybiB2b2lkIG5jcGRncmFtX3RpbWVvdXRfcHJvYyh2b2lkICpzZXJ2ZXIpOworZXh0ZXJuIHZvaWQgbmNwZGdyYW1fdGltZW91dF9jYWxsKHVuc2lnbmVkIGxvbmcgc2VydmVyKTsKK2V4dGVybiB2b2lkIG5jcF90Y3BfZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayogc2ssIGludCBsZW4pOworZXh0ZXJuIHZvaWQgbmNwX3RjcF93cml0ZV9zcGFjZShzdHJ1Y3Qgc29jayogc2spOworZXh0ZXJuIHZvaWQgbmNwX3RjcF9lcnJvcl9yZXBvcnQoc3RydWN0IHNvY2sqIHNrKTsKKworI2RlZmluZSBOQ1BfRkxBR19VVEY4CTEKKworI2RlZmluZSBOQ1BfQ0xSX0ZMQUcoc2VydmVyLCBmbGFnKQkoKHNlcnZlciktPmZsYWdzICY9IH4oZmxhZykpCisjZGVmaW5lIE5DUF9TRVRfRkxBRyhzZXJ2ZXIsIGZsYWcpCSgoc2VydmVyKS0+ZmxhZ3MgfD0gKGZsYWcpKQorI2RlZmluZSBOQ1BfSVNfRkxBRyhzZXJ2ZXIsIGZsYWcpCSgoc2VydmVyKS0+ZmxhZ3MgJiAoZmxhZykpCisKK3N0YXRpYyBpbmxpbmUgaW50IG5jcF9jb25uX3ZhbGlkKHN0cnVjdCBuY3Bfc2VydmVyICpzZXJ2ZXIpCit7CisJcmV0dXJuICgoc2VydmVyLT5jb25uX3N0YXR1cyAmIDB4MTEpID09IDApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbmNwX2ludmFsaWRhdGVfY29ubihzdHJ1Y3QgbmNwX3NlcnZlciAqc2VydmVyKQoreworCXNlcnZlci0+Y29ubl9zdGF0dXMgfD0gMHgwMTsKK30KKworI2VuZGlmCQkJCS8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmCisgCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25jcF9tb3VudC5oIGIvaW5jbHVkZS9saW51eC9uY3BfbW91bnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDZiZGRjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uY3BfbW91bnQuaApAQCAtMCwwICsxLDkzIEBACisvKgorICogIG5jcF9tb3VudC5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiBieSBWb2xrZXIgTGVuZGVja2UKKyAqCisgKi8KKworI2lmbmRlZiBfTElOVVhfTkNQX01PVU5UX0gKKyNkZWZpbmUgX0xJTlVYX05DUF9NT1VOVF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L25jcC5oPgorCisjZGVmaW5lIE5DUF9NT1VOVF9WRVJTSU9OIDMJLyogQmluYXJ5ICovCisKKy8qIFZhbHVlcyBmb3IgZmxhZ3MgKi8KKyNkZWZpbmUgTkNQX01PVU5UX1NPRlQJCTB4MDAwMQorI2RlZmluZSBOQ1BfTU9VTlRfSU5UUgkJMHgwMDAyCisjZGVmaW5lIE5DUF9NT1VOVF9TVFJPTkcJMHgwMDA0CS8qIGVuYWJsZSBkZWxldGUvcmVuYW1lIG9mIHIvbyBmaWxlcyAqLworI2RlZmluZSBOQ1BfTU9VTlRfTk9fT1MyCTB4MDAwOAkvKiBkbyBub3QgdXNlIE9TLzIgKExPTkcpIG5hbWVzcGFjZSAqLworI2RlZmluZSBOQ1BfTU9VTlRfTk9fTkZTCTB4MDAxMAkvKiBkbyBub3QgdXNlIE5GUyBuYW1lc3BhY2UgKi8KKyNkZWZpbmUgTkNQX01PVU5UX0VYVFJBUwkweDAwMjAKKyNkZWZpbmUgTkNQX01PVU5UX1NZTUxJTktTCTB4MDA0MAkvKiBlbmFibGUgc3ltbGlua3MgKi8KKyNkZWZpbmUgTkNQX01PVU5UX05GU19FWFRSQVMJMHgwMDgwCS8qIEVuYWJsZSB1c2Ugb2YgTkZTIE5TIG1ldGEtaW5mbyAqLworCitzdHJ1Y3QgbmNwX21vdW50X2RhdGEgeworCWludCB2ZXJzaW9uOworCXVuc2lnbmVkIGludCBuY3BfZmQ7CS8qIFRoZSBzb2NrZXQgdG8gdGhlIG5jcCBwb3J0ICovCisJX19rZXJuZWxfdWlkX3QgbW91bnRlZF91aWQ7CS8qIFdobyBtYXkgdW1vdW50KCkgdGhpcyBmaWxlc3lzdGVtPyAqLworCV9fa2VybmVsX3BpZF90IHdkb2dfcGlkOwkJLyogV2hvIGNhcmVzIGZvciBvdXIgd2F0Y2hkb2cgcGFja2V0cz8gKi8KKworCXVuc2lnbmVkIGNoYXIgbW91bnRlZF92b2xbTkNQX1ZPTE5BTUVfTEVOICsgMV07CisJdW5zaWduZWQgaW50IHRpbWVfb3V0OwkvKiBIb3cgbG9uZyBzaG91bGQgSSB3YWl0IGFmdGVyCisJCQkJICAgc2VuZGluZyBhIE5DUCByZXF1ZXN0PyAqLworCXVuc2lnbmVkIGludCByZXRyeV9jb3VudDsJLyogQW5kIGhvdyBvZnRlbiBzaG91bGQgSSByZXRyeT8gKi8KKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CisKKwlfX2tlcm5lbF91aWRfdCB1aWQ7CisJX19rZXJuZWxfZ2lkX3QgZ2lkOworCV9fa2VybmVsX21vZGVfdCBmaWxlX21vZGU7CisJX19rZXJuZWxfbW9kZV90IGRpcl9tb2RlOworfTsKKworI2RlZmluZSBOQ1BfTU9VTlRfVkVSU0lPTl9WNAkoNCkJLyogQmluYXJ5IG9yIHRleHQgKi8KKworc3RydWN0IG5jcF9tb3VudF9kYXRhX3Y0IHsKKwlpbnQgdmVyc2lvbjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwkvKiBOQ1BfTU9VTlRfKiBmbGFncyAqLworCS8qIE1JUFMgdXNlcyBsb25nIF9fa2VybmVsX3VpZF90LCBidXQuLi4gKi8KKwkvKiB3ZSBuZWV2ZXIgcGFzcyAtMSwgc28gaXQgaXMgc2FmZSAqLworCXVuc2lnbmVkIGxvbmcgbW91bnRlZF91aWQ7CS8qIFdobyBtYXkgdW1vdW50KCkgdGhpcyBmaWxlc3lzdGVtPyAqLworCS8qIE1JUFMgdXNlcyBsb25nIF9fa2VybmVsX3BpZF90ICovCisJbG9uZyB3ZG9nX3BpZDsJCS8qIFdobyBjYXJlcyBmb3Igb3VyIHdhdGNoZG9nIHBhY2tldHM/ICovCisKKwl1bnNpZ25lZCBpbnQgbmNwX2ZkOwkvKiBUaGUgc29ja2V0IHRvIHRoZSBuY3AgcG9ydCAqLworCXVuc2lnbmVkIGludCB0aW1lX291dDsJLyogSG93IGxvbmcgc2hvdWxkIEkgd2FpdCBhZnRlcgorCQkJCSAgIHNlbmRpbmcgYSBOQ1AgcmVxdWVzdD8gKi8KKwl1bnNpZ25lZCBpbnQgcmV0cnlfY291bnQ7CS8qIEFuZCBob3cgb2Z0ZW4gc2hvdWxkIEkgcmV0cnk/ICovCisKKwkvKiBNSVBTIHVzZXMgbG9uZyBfX2tlcm5lbF91aWRfdC4uLiAqLworCS8qIHdlIG5ldmVyIHBhc3MgLTEsIHNvIGl0IGlzIHNhZmUgKi8KKwl1bnNpZ25lZCBsb25nIHVpZDsKKwl1bnNpZ25lZCBsb25nIGdpZDsKKwkvKiBNSVBTIHVzZXMgdW5zaWduZWQgbG9uZyBfX2tlcm5lbF9tb2RlX3QgKi8KKwl1bnNpZ25lZCBsb25nIGZpbGVfbW9kZTsKKwl1bnNpZ25lZCBsb25nIGRpcl9tb2RlOworfTsKKworI2RlZmluZSBOQ1BfTU9VTlRfVkVSU0lPTl9WNQkoNSkJLyogVGV4dCBvbmx5ICovCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKK3N0cnVjdCBuY3BfbW91bnRfZGF0YV9rZXJuZWwgeworCXVuc2lnbmVkIGxvbmcgICAgZmxhZ3M7CQkvKiBOQ1BfTU9VTlRfKiBmbGFncyAqLworCXVuc2lnbmVkIGludAkgaW50X2ZsYWdzOwkvKiBpbnRlcm5hbCBmbGFncyAqLworI2RlZmluZSBOQ1BfSU1PVU5UX0xPR0dFRElOX1BPU1NJQkxFCTB4MDAwMQorCV9fa2VybmVsX3VpZDMyX3QgbW91bnRlZF91aWQ7CS8qIFdobyBtYXkgdW1vdW50KCkgdGhpcyBmaWxlc3lzdGVtPyAqLworCV9fa2VybmVsX3BpZF90ICAgd2RvZ19waWQ7CQkvKiBXaG8gY2FyZXMgZm9yIG91ciB3YXRjaGRvZyBwYWNrZXRzPyAqLworCXVuc2lnbmVkIGludCAgICAgbmNwX2ZkOwkvKiBUaGUgc29ja2V0IHRvIHRoZSBuY3AgcG9ydCAqLworCXVuc2lnbmVkIGludCAgICAgdGltZV9vdXQ7CS8qIEhvdyBsb25nIHNob3VsZCBJIHdhaXQgYWZ0ZXIKKwkJCQkJICAgc2VuZGluZyBhIE5DUCByZXF1ZXN0PyAqLworCXVuc2lnbmVkIGludCAgICAgcmV0cnlfY291bnQ7CS8qIEFuZCBob3cgb2Z0ZW4gc2hvdWxkIEkgcmV0cnk/ICovCisJdW5zaWduZWQgY2hhcgkgbW91bnRlZF92b2xbTkNQX1ZPTE5BTUVfTEVOICsgMV07CisJX19rZXJuZWxfdWlkMzJfdCB1aWQ7CisJX19rZXJuZWxfZ2lkMzJfdCBnaWQ7CisJX19rZXJuZWxfbW9kZV90ICBmaWxlX21vZGU7CisJX19rZXJuZWxfbW9kZV90ICBkaXJfbW9kZTsKKwlpbnQJCSBpbmZvX2ZkOworfTsKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25jcF9uby5oIGIvaW5jbHVkZS9saW51eC9uY3Bfbm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTZhNjk2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uY3Bfbm8uaApAQCAtMCwwICsxLDE5IEBACisjaWZuZGVmIF9OQ1BfTk8KKyNkZWZpbmUgX05DUF9OTworCisvKiB0aGVzZSBkZWZpbmUgdGhlIGF0dHJpYnV0ZSBieXRlIGFzIHNlZW4gYnkgTkNQICovCisjZGVmaW5lIGFST05MWQkJCShfX2NvbnN0YW50X2NwdV90b19sZTMyKDEpKQorI2RlZmluZSBhSElEREVOCQkJKF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMikpCisjZGVmaW5lIGFTWVNURU0JCQkoX19jb25zdGFudF9jcHVfdG9fbGUzMig0KSkKKyNkZWZpbmUgYUVYRUNVVEUJCShfX2NvbnN0YW50X2NwdV90b19sZTMyKDgpKQorI2RlZmluZSBhRElSCQkJKF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgxMCkpCisjZGVmaW5lIGFBUkNICQkJKF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgyMCkpCisjZGVmaW5lIGFTSEFSRUQJCQkoX19jb25zdGFudF9jcHVfdG9fbGUzMigweDgwKSkKKyNkZWZpbmUgYURPTlRTVUJBTExPQ0FURQkoX19jb25zdGFudF9jcHVfdG9fbGUzMigxTDw8MTEpKQorI2RlZmluZSBhVFJBTlNBQ1RJT05BTAkJKF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMUw8PDEyKSkKKyNkZWZpbmUgYVBVUkdFCQkJKF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMUw8PDE2KSkKKyNkZWZpbmUgYVJFTkFNRUlOSElCSVQJCShfX2NvbnN0YW50X2NwdV90b19sZTMyKDFMPDwxNykpCisjZGVmaW5lIGFERUxFVEVJTkhJQklUCQkoX19jb25zdGFudF9jcHVfdG9fbGUzMigxTDw8MTgpKQorI2RlZmluZSBhRE9OVENPTVBSRVNTCQkoX19jb25zdGFudF9jcHVfdG9fbGUzMigxTDw8MjcpKQorCisjZW5kaWYgLyogX05DUF9OTyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXQuaCBiL2luY2x1ZGUvbGludXgvbmV0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzgyM2IzNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmV0LmgKQEAgLTAsMCArMSwyODcgQEAKKy8qCisgKiBORVQJCUFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBTT0NLRVQgbmV0d29yayBhY2Nlc3MgcHJvdG9jb2wuCisgKgkJVGhpcyBpcyB0aGUgbWFzdGVyIGhlYWRlciBmaWxlIGZvciB0aGUgTGludXggTkVUIGxheWVyLAorICoJCW9yLCBpbiBwbGFpbiBFbmdsaXNoOiB0aGUgbmV0d29ya2luZyBoYW5kbGluZyBwYXJ0IG9mIHRoZQorICoJCWtlcm5lbC4KKyAqCisgKiBWZXJzaW9uOglAKCMpbmV0LmgJMS4wLjMJMDUvMjUvOTMKKyAqCisgKiBBdXRob3JzOglPcmVzdCBaYm9yb3dza2ksIDxvYnpAS29kYWsuQ09NPgorICoJCVJvc3MgQmlybywgPGJpcjdAbGVsYW5kLlN0YW5mb3JkLkVkdT4KKyAqCQlGcmVkIE4uIHZhbiBLZW1wZW4sIDx3YWx0amVAdVdhbHQuTkwuTXVnbmV0Lk9SRz4KKyAqCisgKgkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKgkJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKgkJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2lmbmRlZiBfTElOVVhfTkVUX0gKKyNkZWZpbmUgX0xJTlVYX05FVF9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5naWZ5Lmg+CisjaW5jbHVkZSA8YXNtL3NvY2tldC5oPgorCitzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3Q7CitzdHJ1Y3QgaW5vZGU7CisKKyNkZWZpbmUgTlBST1RPCQkzMgkJLyogc2hvdWxkIGJlIGVub3VnaCBmb3Igbm93Li4JKi8KKworI2RlZmluZSBTWVNfU09DS0VUCTEJCS8qIHN5c19zb2NrZXQoMikJCSovCisjZGVmaW5lIFNZU19CSU5ECTIJCS8qIHN5c19iaW5kKDIpCQkJKi8KKyNkZWZpbmUgU1lTX0NPTk5FQ1QJMwkJLyogc3lzX2Nvbm5lY3QoMikJCSovCisjZGVmaW5lIFNZU19MSVNURU4JNAkJLyogc3lzX2xpc3RlbigyKQkJKi8KKyNkZWZpbmUgU1lTX0FDQ0VQVAk1CQkvKiBzeXNfYWNjZXB0KDIpCQkqLworI2RlZmluZSBTWVNfR0VUU09DS05BTUUJNgkJLyogc3lzX2dldHNvY2tuYW1lKDIpCQkqLworI2RlZmluZSBTWVNfR0VUUEVFUk5BTUUJNwkJLyogc3lzX2dldHBlZXJuYW1lKDIpCQkqLworI2RlZmluZSBTWVNfU09DS0VUUEFJUgk4CQkvKiBzeXNfc29ja2V0cGFpcigyKQkJKi8KKyNkZWZpbmUgU1lTX1NFTkQJOQkJLyogc3lzX3NlbmQoMikJCQkqLworI2RlZmluZSBTWVNfUkVDVgkxMAkJLyogc3lzX3JlY3YoMikJCQkqLworI2RlZmluZSBTWVNfU0VORFRPCTExCQkvKiBzeXNfc2VuZHRvKDIpCQkqLworI2RlZmluZSBTWVNfUkVDVkZST00JMTIJCS8qIHN5c19yZWN2ZnJvbSgyKQkJKi8KKyNkZWZpbmUgU1lTX1NIVVRET1dOCTEzCQkvKiBzeXNfc2h1dGRvd24oMikJCSovCisjZGVmaW5lIFNZU19TRVRTT0NLT1BUCTE0CQkvKiBzeXNfc2V0c29ja29wdCgyKQkJKi8KKyNkZWZpbmUgU1lTX0dFVFNPQ0tPUFQJMTUJCS8qIHN5c19nZXRzb2Nrb3B0KDIpCQkqLworI2RlZmluZSBTWVNfU0VORE1TRwkxNgkJLyogc3lzX3NlbmRtc2coMikJCSovCisjZGVmaW5lIFNZU19SRUNWTVNHCTE3CQkvKiBzeXNfcmVjdm1zZygyKQkJKi8KKwordHlwZWRlZiBlbnVtIHsKKwlTU19GUkVFID0gMCwJCQkvKiBub3QgYWxsb2NhdGVkCQkqLworCVNTX1VOQ09OTkVDVEVELAkJCS8qIHVuY29ubmVjdGVkIHRvIGFueSBzb2NrZXQJKi8KKwlTU19DT05ORUNUSU5HLAkJCS8qIGluIHByb2Nlc3Mgb2YgY29ubmVjdGluZwkqLworCVNTX0NPTk5FQ1RFRCwJCQkvKiBjb25uZWN0ZWQgdG8gc29ja2V0CQkqLworCVNTX0RJU0NPTk5FQ1RJTkcJCS8qIGluIHByb2Nlc3Mgb2YgZGlzY29ubmVjdGluZwkqLworfSBzb2NrZXRfc3RhdGU7CisKKyNkZWZpbmUgX19TT19BQ0NFUFRDT04JKDEgPDwgMTYpCS8qIHBlcmZvcm1lZCBhIGxpc3RlbgkJKi8KKworI2lmZGVmIF9fS0VSTkVMX18KKworI2RlZmluZSBTT0NLX0FTWU5DX05PU1BBQ0UJMAorI2RlZmluZSBTT0NLX0FTWU5DX1dBSVREQVRBCTEKKyNkZWZpbmUgU09DS19OT1NQQUNFCQkyCisjZGVmaW5lIFNPQ0tfUEFTU0NSRUQJCTMKKworI2lmbmRlZiBBUkNIX0hBU19TT0NLRVRfVFlQRVMKKy8qKiBzb2NrX3R5cGUgLSBTb2NrZXQgdHlwZXMKKyAqIAorICogV2hlbiBhZGRpbmcgc29tZSBuZXcgc29ja2V0IHR5cGUgcGxlYXNlCisgKiBncmVwIEFSQ0hfSEFTX1NPQ0tFVF9UWVBFIGluY2x1ZGUvYXNtLSogL3NvY2tldC5oLCBhdCBsZWFzdCBNSVBTCisgKiBvdmVycmlkZXMgdGhpcyBlbnVtIGZvciBiaW5hcnkgY29tcGF0IHJlYXNvbnMuCisgKiAKKyAqIEBTT0NLX1NUUkVBTSAtIHN0cmVhbSAoY29ubmVjdGlvbikgc29ja2V0CisgKiBAU09DS19ER1JBTSAtIGRhdGFncmFtIChjb25uLmxlc3MpIHNvY2tldAorICogQFNPQ0tfUkFXIC0gcmF3IHNvY2tldAorICogQFNPQ0tfUkRNIC0gcmVsaWFibHktZGVsaXZlcmVkIG1lc3NhZ2UKKyAqIEBTT0NLX1NFUVBBQ0tFVCAtIHNlcXVlbnRpYWwgcGFja2V0IHNvY2tldCAKKyAqIEBTT0NLX1BBQ0tFVCAtIGxpbnV4IHNwZWNpZmljIHdheSBvZiBnZXR0aW5nIHBhY2tldHMgYXQgdGhlIGRldiBsZXZlbC4KKyAqCQkgIEZvciB3cml0aW5nIHJhcnAgYW5kIG90aGVyIHNpbWlsYXIgdGhpbmdzIG9uIHRoZSB1c2VyIGxldmVsLgorICovCitlbnVtIHNvY2tfdHlwZSB7CisJU09DS19TVFJFQU0JPSAxLAorCVNPQ0tfREdSQU0JPSAyLAorCVNPQ0tfUkFXCT0gMywKKwlTT0NLX1JETQk9IDQsCisJU09DS19TRVFQQUNLRVQJPSA1LAorCVNPQ0tfUEFDS0VUCT0gMTAsCit9OworCisjZGVmaW5lIFNPQ0tfTUFYIChTT0NLX1BBQ0tFVCArIDEpCisKKyNlbmRpZiAvKiBBUkNIX0hBU19TT0NLRVRfVFlQRVMgKi8KKworLyoqCisgKiAgc3RydWN0IHNvY2tldCAtIGdlbmVyYWwgQlNEIHNvY2tldAorICogIEBzdGF0ZSAtIHNvY2tldCBzdGF0ZSAoJVNTX0NPTk5FQ1RFRCwgZXRjKQorICogIEBmbGFncyAtIHNvY2tldCBmbGFncyAoJVNPQ0tfQVNZTkNfTk9TUEFDRSwgZXRjKQorICogIEBvcHMgLSBwcm90b2NvbCBzcGVjaWZpYyBzb2NrZXQgb3BlcmF0aW9ucworICogIEBmYXN5bmNfbGlzdCAtIEFzeW5jaHJvbm91cyB3YWtlIHVwIGxpc3QKKyAqICBAZmlsZSAtIEZpbGUgYmFjayBwb2ludGVyIGZvciBnYworICogIEBzayAtIGludGVybmFsIG5ldHdvcmtpbmcgcHJvdG9jb2wgYWdub3N0aWMgc29ja2V0IHJlcHJlc2VudGF0aW9uCisgKiAgQHdhaXQgLSB3YWl0IHF1ZXVlIGZvciBzZXZlcmFsIHVzZXMKKyAqICBAdHlwZSAtIHNvY2tldCB0eXBlICglU09DS19TVFJFQU0sIGV0YykKKyAqICBAcGFzc2NyZWQgLSBjcmVkZW50aWFscyAodXNlZCBvbmx5IGluIFVuaXggU29ja2V0cyAoYWthIFBGX0xPQ0FMKSkKKyAqLworc3RydWN0IHNvY2tldCB7CisJc29ja2V0X3N0YXRlCQlzdGF0ZTsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKwlzdHJ1Y3QgcHJvdG9fb3BzCSpvcHM7CisJc3RydWN0IGZhc3luY19zdHJ1Y3QJKmZhc3luY19saXN0OworCXN0cnVjdCBmaWxlCQkqZmlsZTsKKwlzdHJ1Y3Qgc29jawkJKnNrOworCXdhaXRfcXVldWVfaGVhZF90CXdhaXQ7CisJc2hvcnQJCQl0eXBlOworfTsKKworc3RydWN0IHZtX2FyZWFfc3RydWN0Oworc3RydWN0IHBhZ2U7CitzdHJ1Y3Qga2lvY2I7CitzdHJ1Y3Qgc29ja2FkZHI7CitzdHJ1Y3QgbXNnaGRyOworc3RydWN0IG1vZHVsZTsKKworc3RydWN0IHByb3RvX29wcyB7CisJaW50CQlmYW1pbHk7CisJc3RydWN0IG1vZHVsZQkqb3duZXI7CisJaW50CQkoKnJlbGVhc2UpICAgKHN0cnVjdCBzb2NrZXQgKnNvY2spOworCWludAkJKCpiaW5kKQkgICAgIChzdHJ1Y3Qgc29ja2V0ICpzb2NrLAorCQkJCSAgICAgIHN0cnVjdCBzb2NrYWRkciAqbXlhZGRyLAorCQkJCSAgICAgIGludCBzb2NrYWRkcl9sZW4pOworCWludAkJKCpjb25uZWN0KSAgIChzdHJ1Y3Qgc29ja2V0ICpzb2NrLAorCQkJCSAgICAgIHN0cnVjdCBzb2NrYWRkciAqdmFkZHIsCisJCQkJICAgICAgaW50IHNvY2thZGRyX2xlbiwgaW50IGZsYWdzKTsKKwlpbnQJCSgqc29ja2V0cGFpcikoc3RydWN0IHNvY2tldCAqc29jazEsCisJCQkJICAgICAgc3RydWN0IHNvY2tldCAqc29jazIpOworCWludAkJKCphY2NlcHQpICAgIChzdHJ1Y3Qgc29ja2V0ICpzb2NrLAorCQkJCSAgICAgIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssIGludCBmbGFncyk7CisJaW50CQkoKmdldG5hbWUpICAgKHN0cnVjdCBzb2NrZXQgKnNvY2ssCisJCQkJICAgICAgc3RydWN0IHNvY2thZGRyICphZGRyLAorCQkJCSAgICAgIGludCAqc29ja2FkZHJfbGVuLCBpbnQgcGVlcik7CisJdW5zaWduZWQgaW50CSgqcG9sbCkJICAgICAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssCisJCQkJICAgICAgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICp3YWl0KTsKKwlpbnQJCSgqaW9jdGwpICAgICAoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGNtZCwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIGFyZyk7CisJaW50CQkoKmxpc3RlbikgICAgKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZW4pOworCWludAkJKCpzaHV0ZG93bikgIChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgZmxhZ3MpOworCWludAkJKCpzZXRzb2Nrb3B0KShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsCisJCQkJICAgICAgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBvcHRsZW4pOworCWludAkJKCpnZXRzb2Nrb3B0KShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsCisJCQkJICAgICAgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbik7CisJaW50CQkoKnNlbmRtc2cpICAgKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IHNvY2tldCAqc29jaywKKwkJCQkgICAgICBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgdG90YWxfbGVuKTsKKwlpbnQJCSgqcmVjdm1zZykgICAoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLAorCQkJCSAgICAgIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCB0b3RhbF9sZW4sCisJCQkJICAgICAgaW50IGZsYWdzKTsKKwlpbnQJCSgqbW1hcCkJICAgICAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssCisJCQkJICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICogdm1hKTsKKwlzc2l6ZV90CQkoKnNlbmRwYWdlKSAgKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJCSAgICAgIGludCBvZmZzZXQsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpOworfTsKKworc3RydWN0IG5ldF9wcm90b19mYW1pbHkgeworCWludAkJZmFtaWx5OworCWludAkJKCpjcmVhdGUpKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCk7CisJLyogVGhlc2UgYXJlIGNvdW50ZXJzIGZvciB0aGUgbnVtYmVyIG9mIGRpZmZlcmVudCBtZXRob2RzIG9mCisJICAgZWFjaCB3ZSBzdXBwb3J0ICovCisJc2hvcnQJCWF1dGhlbnRpY2F0aW9uOworCXNob3J0CQllbmNyeXB0aW9uOworCXNob3J0CQllbmNyeXB0X25ldDsKKwlzdHJ1Y3QgbW9kdWxlCSpvd25lcjsKK307CisKK3N0cnVjdCBpb3ZlYzsKK3N0cnVjdCBrdmVjOworCitleHRlcm4gaW50CSAgICAgc29ja193YWtlX2FzeW5jKHN0cnVjdCBzb2NrZXQgKnNrLCBpbnQgaG93LCBpbnQgYmFuZCk7CitleHRlcm4gaW50CSAgICAgc29ja19yZWdpc3RlcihzdHJ1Y3QgbmV0X3Byb3RvX2ZhbWlseSAqZmFtKTsKK2V4dGVybiBpbnQJICAgICBzb2NrX3VucmVnaXN0ZXIoaW50IGZhbWlseSk7CitleHRlcm4gaW50CSAgICAgc29ja19jcmVhdGUoaW50IGZhbWlseSwgaW50IHR5cGUsIGludCBwcm90bywKKwkJCQkgc3RydWN0IHNvY2tldCAqKnJlcyk7CitleHRlcm4gaW50CSAgICAgc29ja19jcmVhdGVfa2VybihpbnQgZmFtaWx5LCBpbnQgdHlwZSwgaW50IHByb3RvLAorCQkJCSAgICAgIHN0cnVjdCBzb2NrZXQgKipyZXMpOworZXh0ZXJuIGludAkgICAgIHNvY2tfY3JlYXRlX2xpdGUoaW50IGZhbWlseSwgaW50IHR5cGUsIGludCBwcm90bywKKwkJCQkgICAgICBzdHJ1Y3Qgc29ja2V0ICoqcmVzKTsgCitleHRlcm4gdm9pZAkgICAgIHNvY2tfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKTsKK2V4dGVybiBpbnQgICAJICAgICBzb2NrX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLAorCQkJCSAgc2l6ZV90IGxlbik7CitleHRlcm4gaW50CSAgICAgc29ja19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywKKwkJCQkgIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpOworZXh0ZXJuIGludCAJICAgICBzb2NrX21hcF9mZChzdHJ1Y3Qgc29ja2V0ICpzb2NrKTsKK2V4dGVybiBzdHJ1Y3Qgc29ja2V0ICpzb2NrZmRfbG9va3VwKGludCBmZCwgaW50ICplcnIpOworI2RlZmluZQkJICAgICBzb2NrZmRfcHV0KHNvY2spIGZwdXQoc29jay0+ZmlsZSkKK2V4dGVybiBpbnQJICAgICBuZXRfcmF0ZWxpbWl0KHZvaWQpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbmV0X3JhbmRvbSh2b2lkKTsKK2V4dGVybiB2b2lkCSAgICAgbmV0X3NyYW5kb20odW5zaWduZWQgbG9uZyk7CitleHRlcm4gdm9pZAkgICAgIG5ldF9yYW5kb21faW5pdCh2b2lkKTsKKworZXh0ZXJuIGludCAgIAkgICAgIGtlcm5lbF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywKKwkJCQkgICAgc3RydWN0IGt2ZWMgKnZlYywgc2l6ZV90IG51bSwgc2l6ZV90IGxlbik7CitleHRlcm4gaW50ICAgCSAgICAga2VybmVsX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLAorCQkJCSAgICBzdHJ1Y3Qga3ZlYyAqdmVjLCBzaXplX3QgbnVtLAorCQkJCSAgICBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpOworCisjaWZuZGVmIENPTkZJR19TTVAKKyNkZWZpbmUgU09DS09QU19XUkFQUEVEKG5hbWUpIG5hbWUKKyNkZWZpbmUgU09DS09QU19XUkFQKG5hbWUsIGZhbSkKKyNlbHNlCisKKyNkZWZpbmUgU09DS09QU19XUkFQUEVEKG5hbWUpIF9fdW5sb2NrZWRfIyNuYW1lCisKKyNkZWZpbmUgU09DS0NBTExfV1JBUChuYW1lLCBjYWxsLCBwYXJtcywgYXJncykJCVwKK3N0YXRpYyBpbnQgX19sb2NrXyMjbmFtZSMjXyMjY2FsbCAgcGFybXMJCVwKK3sJCQkJCQkJXAorCWludCByZXQ7CQkJCQlcCisJbG9ja19rZXJuZWwoKTsJCQkJCVwKKwlyZXQgPSBfX3VubG9ja2VkXyMjbmFtZSMjX29wcy5jYWxsICBhcmdzIDtcCisJdW5sb2NrX2tlcm5lbCgpOwkJCQlcCisJcmV0dXJuIHJldDsJCQkJCVwKK30KKworI2RlZmluZSBTT0NLQ0FMTF9VV1JBUChuYW1lLCBjYWxsLCBwYXJtcywgYXJncykJCVwKK3N0YXRpYyB1bnNpZ25lZCBpbnQgX19sb2NrXyMjbmFtZSMjXyMjY2FsbCAgcGFybXMJXAorewkJCQkJCQlcCisJaW50IHJldDsJCQkJCVwKKwlsb2NrX2tlcm5lbCgpOwkJCQkJXAorCXJldCA9IF9fdW5sb2NrZWRfIyNuYW1lIyNfb3BzLmNhbGwgIGFyZ3MgO1wKKwl1bmxvY2tfa2VybmVsKCk7CQkJCVwKKwlyZXR1cm4gcmV0OwkJCQkJXAorfQorCisKKyNkZWZpbmUgU09DS09QU19XUkFQKG5hbWUsIGZhbSkJCQkJCVwKK1NPQ0tDQUxMX1dSQVAobmFtZSwgcmVsZWFzZSwgKHN0cnVjdCBzb2NrZXQgKnNvY2spLCAoc29jaykpCVwKK1NPQ0tDQUxMX1dSQVAobmFtZSwgYmluZCwgKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqdWFkZHIsIGludCBhZGRyX2xlbiksIFwKKwkgICAgICAoc29jaywgdWFkZHIsIGFkZHJfbGVuKSkJCQkJXAorU09DS0NBTExfV1JBUChuYW1lLCBjb25uZWN0LCAoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICogdWFkZHIsIFwKKwkJCSAgICAgIGludCBhZGRyX2xlbiwgaW50IGZsYWdzKSwgCVwKKwkgICAgICAoc29jaywgdWFkZHIsIGFkZHJfbGVuLCBmbGFncykpCQkJXAorU09DS0NBTExfV1JBUChuYW1lLCBzb2NrZXRwYWlyLCAoc3RydWN0IHNvY2tldCAqc29jazEsIHN0cnVjdCBzb2NrZXQgKnNvY2syKSwgXAorCSAgICAgIChzb2NrMSwgc29jazIpKQkJCQkJXAorU09DS0NBTExfV1JBUChuYW1lLCBhY2NlcHQsIChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrLCBcCisJCQkgaW50IGZsYWdzKSwgKHNvY2ssIG5ld3NvY2ssIGZsYWdzKSkgXAorU09DS0NBTExfV1JBUChuYW1lLCBnZXRuYW1lLCAoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICp1YWRkciwgXAorCQkJIGludCAqYWRkcl9sZW4sIGludCBwZWVyKSwgKHNvY2ssIHVhZGRyLCBhZGRyX2xlbiwgcGVlcikpIFwKK1NPQ0tDQUxMX1VXUkFQKG5hbWUsIHBvbGwsIChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICp3YWl0KSwgXAorCSAgICAgIChmaWxlLCBzb2NrLCB3YWl0KSkgXAorU09DS0NBTExfV1JBUChuYW1lLCBpb2N0bCwgKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBjbWQsIFwKKwkJCSB1bnNpZ25lZCBsb25nIGFyZyksIChzb2NrLCBjbWQsIGFyZykpIFwKK1NPQ0tDQUxMX1dSQVAobmFtZSwgbGlzdGVuLCAoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxlbiksIChzb2NrLCBsZW4pKSBcCitTT0NLQ0FMTF9XUkFQKG5hbWUsIHNodXRkb3duLCAoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGZsYWdzKSwgKHNvY2ssIGZsYWdzKSkgXAorU09DS0NBTExfV1JBUChuYW1lLCBzZXRzb2Nrb3B0LCAoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwgXAorCQkJIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBvcHRsZW4pLCAoc29jaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKSkgXAorU09DS0NBTExfV1JBUChuYW1lLCBnZXRzb2Nrb3B0LCAoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwgXAorCQkJIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbiksIChzb2NrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pKSBcCitTT0NLQ0FMTF9XUkFQKG5hbWUsIHNlbmRtc2csIChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBsZW4pLCBcCisJICAgICAgKGlvY2IsIHNvY2ssIG0sIGxlbikpIFwKK1NPQ0tDQUxMX1dSQVAobmFtZSwgcmVjdm1zZywgKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGxlbiwgaW50IGZsYWdzKSwgXAorCSAgICAgIChpb2NiLCBzb2NrLCBtLCBsZW4sIGZsYWdzKSkgXAorU09DS0NBTExfV1JBUChuYW1lLCBtbWFwLCAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKSwgXAorCSAgICAgIChmaWxlLCBzb2NrLCB2bWEpKSBcCisJICAgICAgXAorc3RhdGljIHN0cnVjdCBwcm90b19vcHMgbmFtZSMjX29wcyA9IHsJCQlcCisJLmZhbWlseQkJPSBmYW0sCQkJCVwKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCQkJXAorCS5yZWxlYXNlCT0gX19sb2NrXyMjbmFtZSMjX3JlbGVhc2UsCVwKKwkuYmluZAkJPSBfX2xvY2tfIyNuYW1lIyNfYmluZCwJCVwKKwkuY29ubmVjdAk9IF9fbG9ja18jI25hbWUjI19jb25uZWN0LAlcCisJLnNvY2tldHBhaXIJPSBfX2xvY2tfIyNuYW1lIyNfc29ja2V0cGFpciwJXAorCS5hY2NlcHQJCT0gX19sb2NrXyMjbmFtZSMjX2FjY2VwdCwJXAorCS5nZXRuYW1lCT0gX19sb2NrXyMjbmFtZSMjX2dldG5hbWUsCVwKKwkucG9sbAkJPSBfX2xvY2tfIyNuYW1lIyNfcG9sbCwJCVwKKwkuaW9jdGwJCT0gX19sb2NrXyMjbmFtZSMjX2lvY3RsLAlcCisJLmxpc3RlbgkJPSBfX2xvY2tfIyNuYW1lIyNfbGlzdGVuLAlcCisJLnNodXRkb3duCT0gX19sb2NrXyMjbmFtZSMjX3NodXRkb3duLAlcCisJLnNldHNvY2tvcHQJPSBfX2xvY2tfIyNuYW1lIyNfc2V0c29ja29wdCwJXAorCS5nZXRzb2Nrb3B0CT0gX19sb2NrXyMjbmFtZSMjX2dldHNvY2tvcHQsCVwKKwkuc2VuZG1zZwk9IF9fbG9ja18jI25hbWUjI19zZW5kbXNnLAlcCisJLnJlY3Ztc2cJPSBfX2xvY2tfIyNuYW1lIyNfcmVjdm1zZywJXAorCS5tbWFwCQk9IF9fbG9ja18jI25hbWUjI19tbWFwLAkJXAorfTsKKyNlbmRpZgorCisjZGVmaW5lIE1PRFVMRV9BTElBU19ORVRQUk9UTyhwcm90bykgXAorCU1PRFVMRV9BTElBUygibmV0LXBmLSIgX19zdHJpbmdpZnkocHJvdG8pKQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmCS8qIF9MSU5VWF9ORVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ3NzViZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKQEAgLTAsMCArMSw5MzMgQEAKKy8qCisgKiBJTkVUCQlBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgVENQL0lQIHByb3RvY29sIHN1aXRlIGZvciB0aGUgTElOVVgKKyAqCQlvcGVyYXRpbmcgc3lzdGVtLiAgSU5FVCBpcyBpbXBsZW1lbnRlZCB1c2luZyB0aGUgIEJTRCBTb2NrZXQKKyAqCQlpbnRlcmZhY2UgYXMgdGhlIG1lYW5zIG9mIGNvbW11bmljYXRpb24gd2l0aCB0aGUgdXNlciBsZXZlbC4KKyAqCisgKgkJRGVmaW5pdGlvbnMgZm9yIHRoZSBJbnRlcmZhY2VzIGhhbmRsZXIuCisgKgorICogVmVyc2lvbjoJQCgjKWRldi5oCTEuMC4xMAkwOC8xMi85MworICoKKyAqIEF1dGhvcnM6CVJvc3MgQmlybywgPGJpcjdAbGVsYW5kLlN0YW5mb3JkLkVkdT4KKyAqCQlGcmVkIE4uIHZhbiBLZW1wZW4sIDx3YWx0amVAdVdhbHQuTkwuTXVnbmV0Lk9SRz4KKyAqCQlDb3JleSBNaW55YXJkIDx3Zi1yY2ghbWlueWFyZEByZWxheS5FVS5uZXQ+CisgKgkJRG9uYWxkIEouIEJlY2tlciwgPGJlY2tlckBjZXNkaXMuZ3NmYy5uYXNhLmdvdj4KKyAqCQlBbGFuIENveCwgPEFsYW4uQ294QGxpbnV4Lm9yZz4KKyAqCQlCam9ybiBFa3dhbGwuIDxiajBybkBibG94LnNlPgorICogICAgICAgICAgICAgIFBla2thIFJpaWtvbmVuIDxwcmlpa29uZUBwb3NlaWRvbi5wc3B0LmZpPgorICoKKyAqCQlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgkJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqCQlhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqCQkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqCQlNb3ZlZCB0byAvdXNyL2luY2x1ZGUvbGludXggZm9yIE5FVDMKKyAqLworI2lmbmRlZiBfTElOVVhfTkVUREVWSUNFX0gKKyNkZWZpbmUgX0xJTlVYX05FVERFVklDRV9ICisKKyNpbmNsdWRlIDxsaW51eC9pZi5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CisjaW5jbHVkZSA8bGludXgvaWZfcGFja2V0Lmg+CisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorCitzdHJ1Y3QgZGl2ZXJ0X2JsazsKK3N0cnVjdCB2bGFuX2dyb3VwOworc3RydWN0IGV0aHRvb2xfb3BzOworc3RydWN0IG5ldHBvbGw7CisJCQkJCS8qIHNvdXJjZSBiYWNrLWNvbXBhdCBob29rcyAqLworI2RlZmluZSBTRVRfRVRIVE9PTF9PUFMobmV0ZGV2LG9wcykgXAorCSggKG5ldGRldiktPmV0aHRvb2xfb3BzID0gKG9wcykgKQorCisjZGVmaW5lIEhBVkVfQUxMT0NfTkVUREVWCQkvKiBmZWF0dXJlIG1hY3JvOiBhbGxvY194eHhkZXYKKwkJCQkJICAgZnVuY3Rpb25zIGFyZSBhdmFpbGFibGUuICovCisjZGVmaW5lIEhBVkVfRlJFRV9ORVRERVYJCS8qIGZyZWVfbmV0ZGV2KCkgKi8KKyNkZWZpbmUgSEFWRV9ORVRERVZfUFJJVgkJLyogbmV0ZGV2X3ByaXYoKSAqLworCisjZGVmaW5lIE5FVF9YTUlUX1NVQ0NFU1MJMAorI2RlZmluZSBORVRfWE1JVF9EUk9QCQkxCS8qIHNrYiBkcm9wcGVkCQkJKi8KKyNkZWZpbmUgTkVUX1hNSVRfQ04JCTIJLyogY29uZ2VzdGlvbiBub3RpZmljYXRpb24JKi8KKyNkZWZpbmUgTkVUX1hNSVRfUE9MSUNFRAkzCS8qIHNrYiBpcyBzaG90IGJ5IHBvbGljZQkqLworI2RlZmluZSBORVRfWE1JVF9CWVBBU1MJCTQJLyogcGFja2V0IGRvZXMgbm90IGxlYXZlIHZpYSBkZXF1ZXVlOworCQkJCQkgICAoVEMgdXNlIG9ubHkgLSBkZXZfcXVldWVfeG1pdAorCQkJCQkgICByZXR1cm5zIHRoaXMgYXMgTkVUX1hNSVRfU1VDQ0VTUykgKi8KKworLyogQmFja2xvZyBjb25nZXN0aW9uIGxldmVscyAqLworI2RlZmluZSBORVRfUlhfU1VDQ0VTUwkJMCAgIC8qIGtlZXAgJ2VtIGNvbWluZywgYmFieSAqLworI2RlZmluZSBORVRfUlhfRFJPUAkJMSAgLyogcGFja2V0IGRyb3BwZWQgKi8KKyNkZWZpbmUgTkVUX1JYX0NOX0xPVwkJMiAgIC8qIHN0b3JtIGFsZXJ0LCBqdXN0IGluIGNhc2UgKi8KKyNkZWZpbmUgTkVUX1JYX0NOX01PRAkJMyAgIC8qIFN0b3JtIG9uIGl0cyB3YXkhICovCisjZGVmaW5lIE5FVF9SWF9DTl9ISUdICQk0ICAgLyogVGhlIHN0b3JtIGlzIGhlcmUgKi8KKyNkZWZpbmUgTkVUX1JYX0JBRAkJNSAgLyogcGFja2V0IGRyb3BwZWQgZHVlIHRvIGtlcm5lbCBlcnJvciAqLworCisjZGVmaW5lIG5ldF94bWl0X2Vycm5vKGUpCSgoZSkgIT0gTkVUX1hNSVRfQ04gPyAtRU5PQlVGUyA6IDApCisKKyNlbmRpZgorCisjZGVmaW5lIE1BWF9BRERSX0xFTgkzMgkJLyogTGFyZ2VzdCBoYXJkd2FyZSBhZGRyZXNzIGxlbmd0aCAqLworCisvKiBEcml2ZXIgdHJhbnNtaXQgcmV0dXJuIGNvZGVzICovCisjZGVmaW5lIE5FVERFVl9UWF9PSyAwCQkvKiBkcml2ZXIgdG9vayBjYXJlIG9mIHBhY2tldCAqLworI2RlZmluZSBORVRERVZfVFhfQlVTWSAxCS8qIGRyaXZlciB0eCBwYXRoIHdhcyBidXN5Ki8KKyNkZWZpbmUgTkVUREVWX1RYX0xPQ0tFRCAtMQkvKiBkcml2ZXIgdHggbG9jayB3YXMgYWxyZWFkeSB0YWtlbiAqLworCisvKgorICoJQ29tcHV0ZSB0aGUgd29yc3QgY2FzZSBoZWFkZXIgbGVuZ3RoIGFjY29yZGluZyB0byB0aGUgcHJvdG9jb2xzCisgKgl1c2VkLgorICovCisgCisjaWYgIWRlZmluZWQoQ09ORklHX0FYMjUpICYmICFkZWZpbmVkKENPTkZJR19BWDI1X01PRFVMRSkgJiYgIWRlZmluZWQoQ09ORklHX1RSKQorI2RlZmluZSBMTF9NQVhfSEVBREVSCTMyCisjZWxzZQorI2lmIGRlZmluZWQoQ09ORklHX0FYMjUpIHx8IGRlZmluZWQoQ09ORklHX0FYMjVfTU9EVUxFKQorI2RlZmluZSBMTF9NQVhfSEVBREVSCTk2CisjZWxzZQorI2RlZmluZSBMTF9NQVhfSEVBREVSCTQ4CisjZW5kaWYKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoQ09ORklHX05FVF9JUElQKSAmJiBcCisgICAgIWRlZmluZWQoQ09ORklHX0lQVjYpICYmICFkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKKyNkZWZpbmUgTUFYX0hFQURFUiBMTF9NQVhfSEVBREVSCisjZWxzZQorI2RlZmluZSBNQVhfSEVBREVSIChMTF9NQVhfSEVBREVSICsgNDgpCisjZW5kaWYKKworLyoKKyAqCU5ldHdvcmsgZGV2aWNlIHN0YXRpc3RpY3MuIEFraW4gdG8gdGhlIDIuMCBldGhlciBzdGF0cyBidXQKKyAqCXdpdGggYnl0ZSBjb3VudGVycy4KKyAqLworIAorc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMKK3sKKwl1bnNpZ25lZCBsb25nCXJ4X3BhY2tldHM7CQkvKiB0b3RhbCBwYWNrZXRzIHJlY2VpdmVkCSovCisJdW5zaWduZWQgbG9uZwl0eF9wYWNrZXRzOwkJLyogdG90YWwgcGFja2V0cyB0cmFuc21pdHRlZAkqLworCXVuc2lnbmVkIGxvbmcJcnhfYnl0ZXM7CQkvKiB0b3RhbCBieXRlcyByZWNlaXZlZCAJKi8KKwl1bnNpZ25lZCBsb25nCXR4X2J5dGVzOwkJLyogdG90YWwgYnl0ZXMgdHJhbnNtaXR0ZWQJKi8KKwl1bnNpZ25lZCBsb25nCXJ4X2Vycm9yczsJCS8qIGJhZCBwYWNrZXRzIHJlY2VpdmVkCQkqLworCXVuc2lnbmVkIGxvbmcJdHhfZXJyb3JzOwkJLyogcGFja2V0IHRyYW5zbWl0IHByb2JsZW1zCSovCisJdW5zaWduZWQgbG9uZwlyeF9kcm9wcGVkOwkJLyogbm8gc3BhY2UgaW4gbGludXggYnVmZmVycwkqLworCXVuc2lnbmVkIGxvbmcJdHhfZHJvcHBlZDsJCS8qIG5vIHNwYWNlIGF2YWlsYWJsZSBpbiBsaW51eAkqLworCXVuc2lnbmVkIGxvbmcJbXVsdGljYXN0OwkJLyogbXVsdGljYXN0IHBhY2tldHMgcmVjZWl2ZWQJKi8KKwl1bnNpZ25lZCBsb25nCWNvbGxpc2lvbnM7CisKKwkvKiBkZXRhaWxlZCByeF9lcnJvcnM6ICovCisJdW5zaWduZWQgbG9uZwlyeF9sZW5ndGhfZXJyb3JzOworCXVuc2lnbmVkIGxvbmcJcnhfb3Zlcl9lcnJvcnM7CQkvKiByZWNlaXZlciByaW5nIGJ1ZmYgb3ZlcmZsb3cJKi8KKwl1bnNpZ25lZCBsb25nCXJ4X2NyY19lcnJvcnM7CQkvKiByZWN2ZWQgcGt0IHdpdGggY3JjIGVycm9yCSovCisJdW5zaWduZWQgbG9uZwlyeF9mcmFtZV9lcnJvcnM7CS8qIHJlY3YnZCBmcmFtZSBhbGlnbm1lbnQgZXJyb3IgKi8KKwl1bnNpZ25lZCBsb25nCXJ4X2ZpZm9fZXJyb3JzOwkJLyogcmVjdidyIGZpZm8gb3ZlcnJ1bgkJKi8KKwl1bnNpZ25lZCBsb25nCXJ4X21pc3NlZF9lcnJvcnM7CS8qIHJlY2VpdmVyIG1pc3NlZCBwYWNrZXQJKi8KKworCS8qIGRldGFpbGVkIHR4X2Vycm9ycyAqLworCXVuc2lnbmVkIGxvbmcJdHhfYWJvcnRlZF9lcnJvcnM7CisJdW5zaWduZWQgbG9uZwl0eF9jYXJyaWVyX2Vycm9yczsKKwl1bnNpZ25lZCBsb25nCXR4X2ZpZm9fZXJyb3JzOworCXVuc2lnbmVkIGxvbmcJdHhfaGVhcnRiZWF0X2Vycm9yczsKKwl1bnNpZ25lZCBsb25nCXR4X3dpbmRvd19lcnJvcnM7CisJCisJLyogZm9yIGNzbGlwIGV0YyAqLworCXVuc2lnbmVkIGxvbmcJcnhfY29tcHJlc3NlZDsKKwl1bnNpZ25lZCBsb25nCXR4X2NvbXByZXNzZWQ7Cit9OworCisKKy8qIE1lZGlhIHNlbGVjdGlvbiBvcHRpb25zLiAqLworZW51bSB7CisgICAgICAgIElGX1BPUlRfVU5LTk9XTiA9IDAsCisgICAgICAgIElGX1BPUlRfMTBCQVNFMiwKKyAgICAgICAgSUZfUE9SVF8xMEJBU0VULAorICAgICAgICBJRl9QT1JUX0FVSSwKKyAgICAgICAgSUZfUE9SVF8xMDBCQVNFVCwKKyAgICAgICAgSUZfUE9SVF8xMDBCQVNFVFgsCisgICAgICAgIElGX1BPUlRfMTAwQkFTRUZYCit9OworCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKworc3RydWN0IG5laWdoYm91cjsKK3N0cnVjdCBuZWlnaF9wYXJtczsKK3N0cnVjdCBza19idWZmOworCitzdHJ1Y3QgbmV0aWZfcnhfc3RhdHMKK3sKKwl1bnNpZ25lZCB0b3RhbDsKKwl1bnNpZ25lZCBkcm9wcGVkOworCXVuc2lnbmVkIHRpbWVfc3F1ZWV6ZTsKKwl1bnNpZ25lZCB0aHJvdHRsZWQ7CisJdW5zaWduZWQgZmFzdHJvdXRlX2hpdDsKKwl1bnNpZ25lZCBmYXN0cm91dGVfc3VjY2VzczsKKwl1bnNpZ25lZCBmYXN0cm91dGVfZGVmZXI7CisJdW5zaWduZWQgZmFzdHJvdXRlX2RlZmVycmVkX291dDsKKwl1bnNpZ25lZCBmYXN0cm91dGVfbGF0ZW5jeV9yZWR1Y3Rpb247CisJdW5zaWduZWQgY3B1X2NvbGxpc2lvbjsKK307CisKK0RFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgbmV0aWZfcnhfc3RhdHMsIG5ldGRldl9yeF9zdGF0KTsKKworCisvKgorICoJV2UgdGFnIG11bHRpY2FzdHMgd2l0aCB0aGVzZSBzdHJ1Y3R1cmVzLgorICovCisgCitzdHJ1Y3QgZGV2X21jX2xpc3QKK3sJCisJc3RydWN0IGRldl9tY19saXN0CSpuZXh0OworCV9fdTgJCQlkbWlfYWRkcltNQVhfQUREUl9MRU5dOworCXVuc2lnbmVkIGNoYXIJCWRtaV9hZGRybGVuOworCWludAkJCWRtaV91c2VyczsKKwlpbnQJCQlkbWlfZ3VzZXJzOworfTsKKworc3RydWN0IGhoX2NhY2hlCit7CisJc3RydWN0IGhoX2NhY2hlICpoaF9uZXh0OwkvKiBOZXh0IGVudHJ5CQkJICAgICAqLworCWF0b21pY190CWhoX3JlZmNudDsJLyogbnVtYmVyIG9mIHVzZXJzICAgICAgICAgICAgICAgICAgICovCisJdW5zaWduZWQgc2hvcnQgIGhoX3R5cGU7CS8qIHByb3RvY29sIGlkZW50aWZpZXIsIGYuZSBFVEhfUF9JUAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICBOT1RFOiAgRm9yIFZMQU5zLCB0aGlzIHdpbGwgYmUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogIGVuY2FwdXNsYXRlZCB0eXBlLiAtLUJMRworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCWludAkJaGhfbGVuOwkJLyogbGVuZ3RoIG9mIGhlYWRlciAqLworCWludAkJKCpoaF9vdXRwdXQpKHN0cnVjdCBza19idWZmICpza2IpOworCXJ3bG9ja190CWhoX2xvY2s7CisKKwkvKiBjYWNoZWQgaGFyZHdhcmUgaGVhZGVyOyBhbGxvdyBmb3IgbWFjaGluZSBhbGlnbm1lbnQgbmVlZHMuICAgICAgICAqLworI2RlZmluZSBISF9EQVRBX01PRAkxNgorI2RlZmluZSBISF9EQVRBX09GRihfX2xlbikgXAorCShISF9EQVRBX01PRCAtICgoX19sZW4pICYgKEhIX0RBVEFfTU9EIC0gMSkpKQorI2RlZmluZSBISF9EQVRBX0FMSUdOKF9fbGVuKSBcCisJKCgoX19sZW4pKyhISF9EQVRBX01PRC0xKSkmfihISF9EQVRBX01PRCAtIDEpKQorCXVuc2lnbmVkIGxvbmcJaGhfZGF0YVtISF9EQVRBX0FMSUdOKExMX01BWF9IRUFERVIpIC8gc2l6ZW9mKGxvbmcpXTsKK307CisKKy8qIFJlc2VydmUgSEhfREFUQV9NT0QgYnl0ZSBhbGlnbmVkIGhhcmRfaGVhZGVyX2xlbiwgYnV0IGF0IGxlYXN0IHRoYXQgbXVjaC4KKyAqIEFsdGVybmF0aXZlIGlzOgorICogICBkZXYtPmhhcmRfaGVhZGVyX2xlbiA/IChkZXYtPmhhcmRfaGVhZGVyX2xlbiArCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIChISF9EQVRBX01PRCAtIDEpKSAmIH4oSEhfREFUQV9NT0QgLSAxKSA6IDAKKyAqCisgKiBXZSBjb3VsZCB1c2Ugb3RoZXIgYWxpZ25tZW50IHZhbHVlcywgYnV0IHdlIG11c3QgbWFpbnRhaW4gdGhlCisgKiByZWxhdGlvbnNoaXAgSEggYWxpZ25tZW50IDw9IExMIGFsaWdubWVudC4KKyAqLworI2RlZmluZSBMTF9SRVNFUlZFRF9TUEFDRShkZXYpIFwKKwkoKChkZXYpLT5oYXJkX2hlYWRlcl9sZW4mfihISF9EQVRBX01PRCAtIDEpKSArIEhIX0RBVEFfTU9EKQorI2RlZmluZSBMTF9SRVNFUlZFRF9TUEFDRV9FWFRSQShkZXYsZXh0cmEpIFwKKwkoKCgoZGV2KS0+aGFyZF9oZWFkZXJfbGVuK2V4dHJhKSZ+KEhIX0RBVEFfTU9EIC0gMSkpICsgSEhfREFUQV9NT0QpCisKKy8qIFRoZXNlIGZsYWcgYml0cyBhcmUgcHJpdmF0ZSB0byB0aGUgZ2VuZXJpYyBuZXR3b3JrIHF1ZXVlaW5nCisgKiBsYXllciwgdGhleSBtYXkgbm90IGJlIGV4cGxpY2l0bHkgcmVmZXJlbmNlZCBieSBhbnkgb3RoZXIKKyAqIGNvZGUuCisgKi8KKworZW51bSBuZXRkZXZfc3RhdGVfdAoreworCV9fTElOS19TVEFURV9YT0ZGPTAsCisJX19MSU5LX1NUQVRFX1NUQVJULAorCV9fTElOS19TVEFURV9QUkVTRU5ULAorCV9fTElOS19TVEFURV9TQ0hFRCwKKwlfX0xJTktfU1RBVEVfTk9DQVJSSUVSLAorCV9fTElOS19TVEFURV9SWF9TQ0hFRCwKKwlfX0xJTktfU1RBVEVfTElOS1dBVENIX1BFTkRJTkcKK307CisKKworLyoKKyAqIFRoaXMgc3RydWN0dXJlIGhvbGRzIGF0IGJvb3QgdGltZSBjb25maWd1cmVkIG5ldGRldmljZSBzZXR0aW5ncy4gVGhleQorICogYXJlIHRoZW4gdXNlZCBpbiB0aGUgZGV2aWNlIHByb2JpbmcuIAorICovCitzdHJ1Y3QgbmV0ZGV2X2Jvb3Rfc2V0dXAgeworCWNoYXIgbmFtZVtJRk5BTVNJWl07CisJc3RydWN0IGlmbWFwIG1hcDsKK307CisjZGVmaW5lIE5FVERFVl9CT09UX1NFVFVQX01BWCA4CisKKworLyoKKyAqCVRoZSBERVZJQ0Ugc3RydWN0dXJlLgorICoJQWN0dWFsbHksIHRoaXMgd2hvbGUgc3RydWN0dXJlIGlzIGEgYmlnIG1pc3Rha2UuICBJdCBtaXhlcyBJL08KKyAqCWRhdGEgd2l0aCBzdHJpY3RseSAiaGlnaC1sZXZlbCIgZGF0YSwgYW5kIGl0IGhhcyB0byBrbm93IGFib3V0CisgKglhbG1vc3QgZXZlcnkgZGF0YSBzdHJ1Y3R1cmUgdXNlZCBpbiB0aGUgSU5FVCBtb2R1bGUuCisgKgorICoJRklYTUU6IGNsZWFudXAgc3RydWN0IG5ldF9kZXZpY2Ugc3VjaCB0aGF0IG5ldHdvcmsgcHJvdG9jb2wgaW5mbworICoJbW92ZXMgb3V0LgorICovCisKK3N0cnVjdCBuZXRfZGV2aWNlCit7CisKKwkvKgorCSAqIFRoaXMgaXMgdGhlIGZpcnN0IGZpZWxkIG9mIHRoZSAidmlzaWJsZSIgcGFydCBvZiB0aGlzIHN0cnVjdHVyZQorCSAqIChpLmUuIGFzIHNlZW4gYnkgdXNlcnMgaW4gdGhlICJTcGFjZS5jIiBmaWxlKS4gIEl0IGlzIHRoZSBuYW1lCisJICogdGhlIGludGVyZmFjZS4KKwkgKi8KKwljaGFyCQkJbmFtZVtJRk5BTVNJWl07CisKKwkvKgorCSAqCUkvTyBzcGVjaWZpYyBmaWVsZHMKKwkgKglGSVhNRTogTWVyZ2UgdGhlc2UgYW5kIHN0cnVjdCBpZm1hcCBpbnRvIG9uZQorCSAqLworCXVuc2lnbmVkIGxvbmcJCW1lbV9lbmQ7CS8qIHNoYXJlZCBtZW0gZW5kCSovCisJdW5zaWduZWQgbG9uZwkJbWVtX3N0YXJ0OwkvKiBzaGFyZWQgbWVtIHN0YXJ0CSovCisJdW5zaWduZWQgbG9uZwkJYmFzZV9hZGRyOwkvKiBkZXZpY2UgSS9PIGFkZHJlc3MJKi8KKwl1bnNpZ25lZCBpbnQJCWlycTsJCS8qIGRldmljZSBJUlEgbnVtYmVyCSovCisKKwkvKgorCSAqCVNvbWUgaGFyZHdhcmUgYWxzbyBuZWVkcyB0aGVzZSBmaWVsZHMsIGJ1dCB0aGV5IGFyZSBub3QKKwkgKglwYXJ0IG9mIHRoZSB1c3VhbCBzZXQgc3BlY2lmaWVkIGluIFNwYWNlLmMuCisJICovCisKKwl1bnNpZ25lZCBjaGFyCQlpZl9wb3J0OwkvKiBTZWxlY3RhYmxlIEFVSSwgVFAsLi4qLworCXVuc2lnbmVkIGNoYXIJCWRtYTsJCS8qIERNQSBjaGFubmVsCQkqLworCisJdW5zaWduZWQgbG9uZwkJc3RhdGU7CisKKwlzdHJ1Y3QgbmV0X2RldmljZQkqbmV4dDsKKwkKKwkvKiBUaGUgZGV2aWNlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLiBDYWxsZWQgb25seSBvbmNlLiAqLworCWludAkJCSgqaW5pdCkoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisKKwkvKiAtLS0tLS0tIEZpZWxkcyBwcmVpbml0aWFsaXplZCBpbiBTcGFjZS5jIGZpbmlzaCBoZXJlIC0tLS0tLS0gKi8KKworCXN0cnVjdCBuZXRfZGV2aWNlCSpuZXh0X3NjaGVkOworCisJLyogSW50ZXJmYWNlIGluZGV4LiBVbmlxdWUgZGV2aWNlIGlkZW50aWZpZXIJKi8KKwlpbnQJCQlpZmluZGV4OworCWludAkJCWlmbGluazsKKworCisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMqICgqZ2V0X3N0YXRzKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKwlzdHJ1Y3QgaXdfc3RhdGlzdGljcyoJKCpnZXRfd2lyZWxlc3Nfc3RhdHMpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworCisJLyogTGlzdCBvZiBmdW5jdGlvbnMgdG8gaGFuZGxlIFdpcmVsZXNzIEV4dGVuc2lvbnMgKGluc3RlYWQgb2YgaW9jdGwpLgorCSAqIFNlZSA8bmV0L2l3X2hhbmRsZXIuaD4gZm9yIGRldGFpbHMuIEplYW4gSUkgKi8KKwljb25zdCBzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgKgl3aXJlbGVzc19oYW5kbGVyczsKKwkvKiBJbnN0YW5jZSBkYXRhIG1hbmFnZWQgYnkgdGhlIGNvcmUgb2YgV2lyZWxlc3MgRXh0ZW5zaW9ucy4gKi8KKwlzdHJ1Y3QgaXdfcHVibGljX2RhdGEgKgl3aXJlbGVzc19kYXRhOworCisJc3RydWN0IGV0aHRvb2xfb3BzICpldGh0b29sX29wczsKKworCS8qCisJICogVGhpcyBtYXJrcyB0aGUgZW5kIG9mIHRoZSAidmlzaWJsZSIgcGFydCBvZiB0aGUgc3RydWN0dXJlLiBBbGwKKwkgKiBmaWVsZHMgaGVyZWFmdGVyIGFyZSBpbnRlcm5hbCB0byB0aGUgc3lzdGVtLCBhbmQgbWF5IGNoYW5nZSBhdAorCSAqIHdpbGwgKHJlYWQ6IG1heSBiZSBjbGVhbmVkIHVwIGF0IHdpbGwpLgorCSAqLworCisJLyogVGhlc2UgbWF5IGJlIG5lZWRlZCBmb3IgZnV0dXJlIG5ldHdvcmstcG93ZXItZG93biBjb2RlLiAqLworCXVuc2lnbmVkIGxvbmcJCXRyYW5zX3N0YXJ0OwkvKiBUaW1lIChpbiBqaWZmaWVzKSBvZiBsYXN0IFR4CSovCisJdW5zaWduZWQgbG9uZwkJbGFzdF9yeDsJLyogVGltZSBvZiBsYXN0IFJ4CSovCisKKwl1bnNpZ25lZCBzaG9ydAkJZmxhZ3M7CS8qIGludGVyZmFjZSBmbGFncyAoYSBsYSBCU0QpCSovCisJdW5zaWduZWQgc2hvcnQJCWdmbGFnczsKKyAgICAgICAgdW5zaWduZWQgc2hvcnQgICAgICAgICAgcHJpdl9mbGFnczsgLyogTGlrZSAnZmxhZ3MnIGJ1dCBpbnZpc2libGUgdG8gdXNlcnNwYWNlLiAqLworCXVuc2lnbmVkIHNob3J0CQlwYWRkZWQ7CS8qIEhvdyBtdWNoIHBhZGRpbmcgYWRkZWQgYnkgYWxsb2NfbmV0ZGV2KCkgKi8KKworCXVuc2lnbmVkCQltdHU7CS8qIGludGVyZmFjZSBNVFUgdmFsdWUJCSovCisJdW5zaWduZWQgc2hvcnQJCXR5cGU7CS8qIGludGVyZmFjZSBoYXJkd2FyZSB0eXBlCSovCisJdW5zaWduZWQgc2hvcnQJCWhhcmRfaGVhZGVyX2xlbjsJLyogaGFyZHdhcmUgaGRyIGxlbmd0aAkqLworCXZvaWQJCQkqcHJpdjsJLyogcG9pbnRlciB0byBwcml2YXRlIGRhdGEJKi8KKworCXN0cnVjdCBuZXRfZGV2aWNlCSptYXN0ZXI7IC8qIFBvaW50ZXIgdG8gbWFzdGVyIGRldmljZSBvZiBhIGdyb3VwLAorCQkJCQkgICogd2hpY2ggdGhpcyBkZXZpY2UgaXMgbWVtYmVyIG9mLgorCQkJCQkgICovCisKKwkvKiBJbnRlcmZhY2UgYWRkcmVzcyBpbmZvLiAqLworCXVuc2lnbmVkIGNoYXIJCWJyb2FkY2FzdFtNQVhfQUREUl9MRU5dOwkvKiBodyBiY2FzdCBhZGQJKi8KKwl1bnNpZ25lZCBjaGFyCQlkZXZfYWRkcltNQVhfQUREUl9MRU5dOwkvKiBodyBhZGRyZXNzCSovCisJdW5zaWduZWQgY2hhcgkJYWRkcl9sZW47CS8qIGhhcmR3YXJlIGFkZHJlc3MgbGVuZ3RoCSovCisJdW5zaWduZWQgc2hvcnQgICAgICAgICAgZGV2X2lkOwkJLyogZm9yIHNoYXJlZCBuZXR3b3JrIGNhcmRzICovCisKKwlzdHJ1Y3QgZGV2X21jX2xpc3QJKm1jX2xpc3Q7CS8qIE11bHRpY2FzdCBtYWMgYWRkcmVzc2VzCSovCisJaW50CQkJbWNfY291bnQ7CS8qIE51bWJlciBvZiBpbnN0YWxsZWQgbWNhc3RzCSovCisJaW50CQkJcHJvbWlzY3VpdHk7CisJaW50CQkJYWxsbXVsdGk7CisKKwlpbnQJCQl3YXRjaGRvZ190aW1lbzsKKwlzdHJ1Y3QgdGltZXJfbGlzdAl3YXRjaGRvZ190aW1lcjsKKworCS8qIFByb3RvY29sIHNwZWNpZmljIHBvaW50ZXJzICovCisJCisJdm9pZCAJCQkqYXRhbGtfcHRyOwkvKiBBcHBsZVRhbGsgbGluayAJKi8KKwl2b2lkCQkJKmlwX3B0cjsJLyogSVB2NCBzcGVjaWZpYyBkYXRhCSovICAKKwl2b2lkICAgICAgICAgICAgICAgICAgICAqZG5fcHRyOyAgICAgICAgLyogREVDbmV0IHNwZWNpZmljIGRhdGEgKi8KKwl2b2lkICAgICAgICAgICAgICAgICAgICAqaXA2X3B0cjsgICAgICAgLyogSVB2NiBzcGVjaWZpYyBkYXRhICovCisJdm9pZAkJCSplY19wdHI7CS8qIEVjb25ldCBzcGVjaWZpYyBkYXRhCSovCisJdm9pZAkJCSpheDI1X3B0cjsJLyogQVguMjUgc3BlY2lmaWMgZGF0YSAqLworCisJc3RydWN0IGxpc3RfaGVhZAlwb2xsX2xpc3Q7CS8qIExpbmsgdG8gcG9sbCBsaXN0CSovCisJaW50CQkJcXVvdGE7CisJaW50CQkJd2VpZ2h0OworCisJc3RydWN0IFFkaXNjCQkqcWRpc2M7CisJc3RydWN0IFFkaXNjCQkqcWRpc2Nfc2xlZXBpbmc7CisJc3RydWN0IFFkaXNjCQkqcWRpc2NfaW5ncmVzczsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXFkaXNjX2xpc3Q7CisJdW5zaWduZWQgbG9uZwkJdHhfcXVldWVfbGVuOwkvKiBNYXggZnJhbWVzIHBlciBxdWV1ZSBhbGxvd2VkICovCisKKwkvKiBpbmdyZXNzIHBhdGggc3luY2hyb25pemVyICovCisJc3BpbmxvY2tfdAkJaW5ncmVzc19sb2NrOworCS8qIGhhcmRfc3RhcnRfeG1pdCBzeW5jaHJvbml6ZXIgKi8KKwlzcGlubG9ja190CQl4bWl0X2xvY2s7CisJLyogY3B1IGlkIG9mIHByb2Nlc3NvciBlbnRlcmVkIHRvIGhhcmRfc3RhcnRfeG1pdCBvciAtMSwKKwkgICBpZiBub2JvZHkgZW50ZXJlZCB0aGVyZS4KKwkgKi8KKwlpbnQJCQl4bWl0X2xvY2tfb3duZXI7CisJLyogZGV2aWNlIHF1ZXVlIGxvY2sgKi8KKwlzcGlubG9ja190CQlxdWV1ZV9sb2NrOworCS8qIE51bWJlciBvZiByZWZlcmVuY2VzIHRvIHRoaXMgZGV2aWNlICovCisJYXRvbWljX3QJCXJlZmNudDsKKwkvKiBkZWxheWVkIHJlZ2lzdGVyL3VucmVnaXN0ZXIgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCXRvZG9fbGlzdDsKKwkvKiBkZXZpY2UgbmFtZSBoYXNoIGNoYWluICovCisJc3RydWN0IGhsaXN0X25vZGUJbmFtZV9obGlzdDsKKwkvKiBkZXZpY2UgaW5kZXggaGFzaCBjaGFpbiAqLworCXN0cnVjdCBobGlzdF9ub2RlCWluZGV4X2hsaXN0OworCisJLyogcmVnaXN0ZXIvdW5yZWdpc3RlciBzdGF0ZSBtYWNoaW5lICovCisJZW51bSB7IE5FVFJFR19VTklOSVRJQUxJWkVEPTAsCisJICAgICAgIE5FVFJFR19SRUdJU1RFUklORywJLyogY2FsbGVkIHJlZ2lzdGVyX25ldGRldmljZSAqLworCSAgICAgICBORVRSRUdfUkVHSVNURVJFRCwJLyogY29tcGxldGVkIHJlZ2lzdGVyIHRvZG8gKi8KKwkgICAgICAgTkVUUkVHX1VOUkVHSVNURVJJTkcsCS8qIGNhbGxlZCB1bnJlZ2lzdGVyX25ldGRldmljZSAqLworCSAgICAgICBORVRSRUdfVU5SRUdJU1RFUkVELAkvKiBjb21wbGV0ZWQgdW5yZWdpc3RlciB0b2RvICovCisJICAgICAgIE5FVFJFR19SRUxFQVNFRCwJCS8qIGNhbGxlZCBmcmVlX25ldGRldiAqLworCX0gcmVnX3N0YXRlOworCisJLyogTmV0IGRldmljZSBmZWF0dXJlcyAqLworCWludAkJCWZlYXR1cmVzOworI2RlZmluZSBORVRJRl9GX1NHCQkxCS8qIFNjYXR0ZXIvZ2F0aGVyIElPLiAqLworI2RlZmluZSBORVRJRl9GX0lQX0NTVU0JCTIJLyogQ2FuIGNoZWNrc3VtIG9ubHkgVENQL1VEUCBvdmVyIElQdjQuICovCisjZGVmaW5lIE5FVElGX0ZfTk9fQ1NVTQkJNAkvKiBEb2VzIG5vdCByZXF1aXJlIGNoZWNrc3VtLiBGLmUuIGxvb3BhY2suICovCisjZGVmaW5lIE5FVElGX0ZfSFdfQ1NVTQkJOAkvKiBDYW4gY2hlY2tzdW0gYWxsIHRoZSBwYWNrZXRzLiAqLworI2RlZmluZSBORVRJRl9GX0hJR0hETUEJCTMyCS8qIENhbiBETUEgdG8gaGlnaCBtZW1vcnkuICovCisjZGVmaW5lIE5FVElGX0ZfRlJBR0xJU1QJNjQJLyogU2NhdHRlci9nYXRoZXIgSU8uICovCisjZGVmaW5lIE5FVElGX0ZfSFdfVkxBTl9UWAkxMjgJLyogVHJhbnNtaXQgVkxBTiBodyBhY2NlbGVyYXRpb24gKi8KKyNkZWZpbmUgTkVUSUZfRl9IV19WTEFOX1JYCTI1NgkvKiBSZWNlaXZlIFZMQU4gaHcgYWNjZWxlcmF0aW9uICovCisjZGVmaW5lIE5FVElGX0ZfSFdfVkxBTl9GSUxURVIJNTEyCS8qIFJlY2VpdmUgZmlsdGVyaW5nIG9uIFZMQU4gKi8KKyNkZWZpbmUgTkVUSUZfRl9WTEFOX0NIQUxMRU5HRUQJMTAyNAkvKiBEZXZpY2UgY2Fubm90IGhhbmRsZSBWTEFOIHBhY2tldHMgKi8KKyNkZWZpbmUgTkVUSUZfRl9UU08JCTIwNDgJLyogQ2FuIG9mZmxvYWQgVENQL0lQIHNlZ21lbnRhdGlvbiAqLworI2RlZmluZSBORVRJRl9GX0xMVFgJCTQwOTYJLyogTG9ja0xlc3MgVFggKi8KKworCS8qIENhbGxlZCBhZnRlciBkZXZpY2UgaXMgZGV0YWNoZWQgZnJvbSBuZXR3b3JrLiAqLworCXZvaWQJCQkoKnVuaW5pdCkoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisJLyogQ2FsbGVkIGFmdGVyIGxhc3QgdXNlciByZWZlcmVuY2UgZGlzYXBwZWFycy4gKi8KKwl2b2lkCQkJKCpkZXN0cnVjdG9yKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKworCS8qIFBvaW50ZXJzIHRvIGludGVyZmFjZSBzZXJ2aWNlIHJvdXRpbmVzLgkqLworCWludAkJCSgqb3Blbikoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisJaW50CQkJKCpzdG9wKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKwlpbnQJCQkoKmhhcmRfc3RhcnRfeG1pdCkgKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisjZGVmaW5lIEhBVkVfTkVUREVWX1BPTEwKKwlpbnQJCQkoKnBvbGwpIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgKnF1b3RhKTsKKwlpbnQJCQkoKmhhcmRfaGVhZGVyKSAoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCQl1bnNpZ25lZCBzaG9ydCB0eXBlLAorCQkJCQkJdm9pZCAqZGFkZHIsCisJCQkJCQl2b2lkICpzYWRkciwKKwkJCQkJCXVuc2lnbmVkIGxlbik7CisJaW50CQkJKCpyZWJ1aWxkX2hlYWRlcikoc3RydWN0IHNrX2J1ZmYgKnNrYik7CisjZGVmaW5lIEhBVkVfTVVMVElDQVNUCQkJIAorCXZvaWQJCQkoKnNldF9tdWx0aWNhc3RfbGlzdCkoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisjZGVmaW5lIEhBVkVfU0VUX01BQ19BRERSICAJCSAKKwlpbnQJCQkoKnNldF9tYWNfYWRkcmVzcykoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJCSAgIHZvaWQgKmFkZHIpOworI2RlZmluZSBIQVZFX1BSSVZBVEVfSU9DVEwKKwlpbnQJCQkoKmRvX2lvY3RsKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQkgICAgc3RydWN0IGlmcmVxICppZnIsIGludCBjbWQpOworI2RlZmluZSBIQVZFX1NFVF9DT05GSUcKKwlpbnQJCQkoKnNldF9jb25maWcpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCSAgICAgIHN0cnVjdCBpZm1hcCAqbWFwKTsKKyNkZWZpbmUgSEFWRV9IRUFERVJfQ0FDSEUKKwlpbnQJCQkoKmhhcmRfaGVhZGVyX2NhY2hlKShzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaCwKKwkJCQkJCSAgICAgc3RydWN0IGhoX2NhY2hlICpoaCk7CisJdm9pZAkJCSgqaGVhZGVyX2NhY2hlX3VwZGF0ZSkoc3RydWN0IGhoX2NhY2hlICpoaCwKKwkJCQkJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQkJICAgICAgIHVuc2lnbmVkIGNoYXIgKiAgaGFkZHIpOworI2RlZmluZSBIQVZFX0NIQU5HRV9NVFUKKwlpbnQJCQkoKmNoYW5nZV9tdHUpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KTsKKworI2RlZmluZSBIQVZFX1RYX1RJTUVPVVQKKwl2b2lkCQkJKCp0eF90aW1lb3V0KSAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisKKwl2b2lkCQkJKCp2bGFuX3J4X3JlZ2lzdGVyKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQkJICAgIHN0cnVjdCB2bGFuX2dyb3VwICpncnApOworCXZvaWQJCQkoKnZsYW5fcnhfYWRkX3ZpZCkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJCSAgIHVuc2lnbmVkIHNob3J0IHZpZCk7CisJdm9pZAkJCSgqdmxhbl9yeF9raWxsX3ZpZCkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJCSAgICB1bnNpZ25lZCBzaG9ydCB2aWQpOworCisJaW50CQkJKCpoYXJkX2hlYWRlcl9wYXJzZSkoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJCSAgICAgdW5zaWduZWQgY2hhciAqaGFkZHIpOworCWludAkJCSgqbmVpZ2hfc2V0dXApKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZWlnaF9wYXJtcyAqKTsKKyNpZmRlZiBDT05GSUdfTkVUUE9MTAorCXN0cnVjdCBuZXRwb2xsCQkqbnA7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorCXZvaWQgICAgICAgICAgICAgICAgICAgICgqcG9sbF9jb250cm9sbGVyKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKyNlbmRpZgorCisJLyogYnJpZGdlIHN0dWZmICovCisJc3RydWN0IG5ldF9icmlkZ2VfcG9ydAkqYnJfcG9ydDsKKworI2lmZGVmIENPTkZJR19ORVRfRElWRVJUCisJLyogdGhpcyB3aWxsIGdldCBpbml0aWFsaXplZCBhdCBlYWNoIGludGVyZmFjZSB0eXBlIGluaXQgcm91dGluZSAqLworCXN0cnVjdCBkaXZlcnRfYmxrCSpkaXZlcnQ7CisjZW5kaWYgLyogQ09ORklHX05FVF9ESVZFUlQgKi8KKworCS8qIGNsYXNzL25ldC9uYW1lIGVudHJ5ICovCisJc3RydWN0IGNsYXNzX2RldmljZQljbGFzc19kZXY7Cit9OworCisjZGVmaW5lCU5FVERFVl9BTElHTgkJMzIKKyNkZWZpbmUJTkVUREVWX0FMSUdOX0NPTlNUCShORVRERVZfQUxJR04gLSAxKQorCitzdGF0aWMgaW5saW5lIHZvaWQgKm5ldGRldl9wcml2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIChjaGFyICopZGV2ICsgKChzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2UpCisJCQkJCSsgTkVUREVWX0FMSUdOX0NPTlNUKQorCQkJCSYgfk5FVERFVl9BTElHTl9DT05TVCk7Cit9CisKKyNkZWZpbmUgU0VUX01PRFVMRV9PV05FUihkZXYpIGRvIHsgfSB3aGlsZSAoMCkKKy8qIFNldCB0aGUgc3lzZnMgcGh5c2ljYWwgZGV2aWNlIHJlZmVyZW5jZSBmb3IgdGhlIG5ldHdvcmsgbG9naWNhbCBkZXZpY2UKKyAqIGlmIHNldCBwcmlvciB0byByZWdpc3RyYXRpb24gd2lsbCBjYXVzZSBhIHN5bWxpbmsgZHVyaW5nIGluaXRpYWxpemF0aW9uLgorICovCisjZGVmaW5lIFNFVF9ORVRERVZfREVWKG5ldCwgcGRldikJKChuZXQpLT5jbGFzc19kZXYuZGV2ID0gKHBkZXYpKQorCitzdHJ1Y3QgcGFja2V0X3R5cGUgeworCXVuc2lnbmVkIHNob3J0CQl0eXBlOwkvKiBUaGlzIGlzIHJlYWxseSBodG9ucyhldGhlcl90eXBlKS4JKi8KKwlzdHJ1Y3QgbmV0X2RldmljZQkJKmRldjsJLyogTlVMTCBpcyB3aWxkY2FyZGVkIGhlcmUJCSovCisJaW50CQkJKCpmdW5jKSAoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IG5ldF9kZXZpY2UgKiwKKwkJCQkJIHN0cnVjdCBwYWNrZXRfdHlwZSAqKTsKKwl2b2lkCQkJKmFmX3BhY2tldF9wcml2OworCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKK307CisKKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgorCitleHRlcm4gc3RydWN0IG5ldF9kZXZpY2UJCWxvb3BiYWNrX2RldjsJCS8qIFRoZSBsb29wYmFjayAqLworZXh0ZXJuIHN0cnVjdCBuZXRfZGV2aWNlCQkqZGV2X2Jhc2U7CQkvKiBBbGwgZGV2aWNlcyAqLworZXh0ZXJuIHJ3bG9ja190CQkJCWRldl9iYXNlX2xvY2s7CQkvKiBEZXZpY2UgbGlzdCBsb2NrICovCisKK2V4dGVybiBpbnQgCQkJbmV0ZGV2X2Jvb3Rfc2V0dXBfY2hlY2soc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitleHRlcm4gdW5zaWduZWQgbG9uZwkJbmV0ZGV2X2Jvb3RfYmFzZShjb25zdCBjaGFyICpwcmVmaXgsIGludCB1bml0KTsKK2V4dGVybiBzdHJ1Y3QgbmV0X2RldmljZSAgICAqZGV2X2dldGJ5aHdhZGRyKHVuc2lnbmVkIHNob3J0IHR5cGUsIGNoYXIgKmh3YWRkcik7CitleHRlcm4gc3RydWN0IG5ldF9kZXZpY2UgKmRldl9nZXRmaXJzdGJ5aHd0eXBlKHVuc2lnbmVkIHNob3J0IHR5cGUpOworZXh0ZXJuIHZvaWQJCWRldl9hZGRfcGFjayhzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0KTsKK2V4dGVybiB2b2lkCQlkZXZfcmVtb3ZlX3BhY2soc3RydWN0IHBhY2tldF90eXBlICpwdCk7CitleHRlcm4gdm9pZAkJX19kZXZfcmVtb3ZlX3BhY2soc3RydWN0IHBhY2tldF90eXBlICpwdCk7CisKK2V4dGVybiBzdHJ1Y3QgbmV0X2RldmljZQkqZGV2X2dldF9ieV9mbGFncyh1bnNpZ25lZCBzaG9ydCBmbGFncywKKwkJCQkJCSAgdW5zaWduZWQgc2hvcnQgbWFzayk7CitleHRlcm4gc3RydWN0IG5ldF9kZXZpY2UJKmRldl9nZXRfYnlfbmFtZShjb25zdCBjaGFyICpuYW1lKTsKK2V4dGVybiBzdHJ1Y3QgbmV0X2RldmljZQkqX19kZXZfZ2V0X2J5X25hbWUoY29uc3QgY2hhciAqbmFtZSk7CitleHRlcm4gaW50CQlkZXZfYWxsb2NfbmFtZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCBjaGFyICpuYW1lKTsKK2V4dGVybiBpbnQJCWRldl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworZXh0ZXJuIGludAkJZGV2X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworZXh0ZXJuIGludAkJZGV2X3F1ZXVlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50CQlyZWdpc3Rlcl9uZXRkZXZpY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitleHRlcm4gaW50CQl1bnJlZ2lzdGVyX25ldGRldmljZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkCQlmcmVlX25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkCQlzeW5jaHJvbml6ZV9uZXQodm9pZCk7CitleHRlcm4gaW50IAkJcmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpOworZXh0ZXJuIGludAkJdW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7CitleHRlcm4gaW50CQljYWxsX25ldGRldmljZV9ub3RpZmllcnModW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKnYpOworZXh0ZXJuIHN0cnVjdCBuZXRfZGV2aWNlCSpkZXZfZ2V0X2J5X2luZGV4KGludCBpZmluZGV4KTsKK2V4dGVybiBzdHJ1Y3QgbmV0X2RldmljZQkqX19kZXZfZ2V0X2J5X2luZGV4KGludCBpZmluZGV4KTsKK2V4dGVybiBpbnQJCWRldl9yZXN0YXJ0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworI2lmZGVmIENPTkZJR19ORVRQT0xMX1RSQVAKK2V4dGVybiBpbnQJCW5ldHBvbGxfdHJhcCh2b2lkKTsKKyNlbmRpZgorCit0eXBlZGVmIGludCBnaWZjb25mX2Z1bmNfdChzdHJ1Y3QgbmV0X2RldmljZSAqIGRldiwgY2hhciBfX3VzZXIgKiBidWZwdHIsIGludCBsZW4pOworZXh0ZXJuIGludAkJcmVnaXN0ZXJfZ2lmY29uZih1bnNpZ25lZCBpbnQgZmFtaWx5LCBnaWZjb25mX2Z1bmNfdCAqIGdpZmNvbmYpOworc3RhdGljIGlubGluZSBpbnQgdW5yZWdpc3Rlcl9naWZjb25mKHVuc2lnbmVkIGludCBmYW1pbHkpCit7CisJcmV0dXJuIHJlZ2lzdGVyX2dpZmNvbmYoZmFtaWx5LCBOVUxMKTsKK30KKworLyoKKyAqIEluY29taW5nIHBhY2tldHMgYXJlIHBsYWNlZCBvbiBwZXItY3B1IHF1ZXVlcyBzbyB0aGF0CisgKiBubyBsb2NraW5nIGlzIG5lZWRlZC4KKyAqLworCitzdHJ1Y3Qgc29mdG5ldF9kYXRhCit7CisJaW50CQkJdGhyb3R0bGU7CisJaW50CQkJY25nX2xldmVsOworCWludAkJCWF2Z19ibG9nOworCXN0cnVjdCBza19idWZmX2hlYWQJaW5wdXRfcGt0X3F1ZXVlOworCXN0cnVjdCBsaXN0X2hlYWQJcG9sbF9saXN0OworCXN0cnVjdCBuZXRfZGV2aWNlCSpvdXRwdXRfcXVldWU7CisJc3RydWN0IHNrX2J1ZmYJCSpjb21wbGV0aW9uX3F1ZXVlOworCisJc3RydWN0IG5ldF9kZXZpY2UJYmFja2xvZ19kZXY7CS8qIFNvcnJ5LiA4KSAqLworfTsKKworREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCBzb2Z0bmV0X2RhdGEsc29mdG5ldF9kYXRhKTsKKworI2RlZmluZSBIQVZFX05FVElGX1FVRVVFCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX25ldGlmX3NjaGVkdWxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KF9fTElOS19TVEFURV9TQ0hFRCwgJmRldi0+c3RhdGUpKSB7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJCXN0cnVjdCBzb2Z0bmV0X2RhdGEgKnNkOworCisJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJc2QgPSAmX19nZXRfY3B1X3Zhcihzb2Z0bmV0X2RhdGEpOworCQlkZXYtPm5leHRfc2NoZWQgPSBzZC0+b3V0cHV0X3F1ZXVlOworCQlzZC0+b3V0cHV0X3F1ZXVlID0gZGV2OworCQlyYWlzZV9zb2Z0aXJxX2lycW9mZihORVRfVFhfU09GVElSUSk7CisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuZXRpZl9zY2hlZHVsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCWlmICghdGVzdF9iaXQoX19MSU5LX1NUQVRFX1hPRkYsICZkZXYtPnN0YXRlKSkKKwkJX19uZXRpZl9zY2hlZHVsZShkZXYpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbmV0aWZfc3RhcnRfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwljbGVhcl9iaXQoX19MSU5LX1NUQVRFX1hPRkYsICZkZXYtPnN0YXRlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG5ldGlmX3dha2VfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKyNpZmRlZiBDT05GSUdfTkVUUE9MTF9UUkFQCisJaWYgKG5ldHBvbGxfdHJhcCgpKQorCQlyZXR1cm47CisjZW5kaWYKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KF9fTElOS19TVEFURV9YT0ZGLCAmZGV2LT5zdGF0ZSkpCisJCV9fbmV0aWZfc2NoZWR1bGUoZGV2KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG5ldGlmX3N0b3BfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKyNpZmRlZiBDT05GSUdfTkVUUE9MTF9UUkFQCisJaWYgKG5ldHBvbGxfdHJhcCgpKQorCQlyZXR1cm47CisjZW5kaWYKKwlzZXRfYml0KF9fTElOS19TVEFURV9YT0ZGLCAmZGV2LT5zdGF0ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG5ldGlmX3F1ZXVlX3N0b3BwZWQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gdGVzdF9iaXQoX19MSU5LX1NUQVRFX1hPRkYsICZkZXYtPnN0YXRlKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgbmV0aWZfcnVubmluZyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXJldHVybiB0ZXN0X2JpdChfX0xJTktfU1RBVEVfU1RBUlQsICZkZXYtPnN0YXRlKTsKK30KKworCisvKiBVc2UgdGhpcyB2YXJpYW50IHdoZW4gaXQgaXMga25vd24gZm9yIHN1cmUgdGhhdCBpdAorICogaXMgZXhlY3V0aW5nIGZyb20gaW50ZXJydXB0IGNvbnRleHQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBkZXZfa2ZyZWVfc2tiX2lycShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZza2ItPnVzZXJzKSkgeworCQlzdHJ1Y3Qgc29mdG5ldF9kYXRhICpzZDsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJCXNkID0gJl9fZ2V0X2NwdV92YXIoc29mdG5ldF9kYXRhKTsKKwkJc2tiLT5uZXh0ID0gc2QtPmNvbXBsZXRpb25fcXVldWU7CisJCXNkLT5jb21wbGV0aW9uX3F1ZXVlID0gc2tiOworCQlyYWlzZV9zb2Z0aXJxX2lycW9mZihORVRfVFhfU09GVElSUSk7CisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwl9Cit9CisKKy8qIFVzZSB0aGlzIHZhcmlhbnQgaW4gcGxhY2VzIHdoZXJlIGl0IGNvdWxkIGJlIGludm9rZWQKKyAqIGVpdGhlciBmcm9tIGludGVycnVwdCBvciBub24taW50ZXJydXB0IGNvbnRleHQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBkZXZfa2ZyZWVfc2tiX2FueShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWlmIChpbl9pcnEoKSB8fCBpcnFzX2Rpc2FibGVkKCkpCisJCWRldl9rZnJlZV9za2JfaXJxKHNrYik7CisJZWxzZQorCQlkZXZfa2ZyZWVfc2tiKHNrYik7Cit9CisKKyNkZWZpbmUgSEFWRV9ORVRJRl9SWCAxCitleHRlcm4gaW50CQluZXRpZl9yeChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQJCW5ldGlmX3J4X25pKHN0cnVjdCBza19idWZmICpza2IpOworI2RlZmluZSBIQVZFX05FVElGX1JFQ0VJVkVfU0tCIDEKK2V4dGVybiBpbnQJCW5ldGlmX3JlY2VpdmVfc2tiKHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludAkJZGV2X2lvY3RsKHVuc2lnbmVkIGludCBjbWQsIHZvaWQgX191c2VyICopOworZXh0ZXJuIGludAkJZGV2X2V0aHRvb2woc3RydWN0IGlmcmVxICopOworZXh0ZXJuIHVuc2lnbmVkCQlkZXZfZ2V0X2ZsYWdzKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICopOworZXh0ZXJuIGludAkJZGV2X2NoYW5nZV9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqLCB1bnNpZ25lZCk7CitleHRlcm4gaW50CQlkZXZfY2hhbmdlX25hbWUoc3RydWN0IG5ldF9kZXZpY2UgKiwgY2hhciAqKTsKK2V4dGVybiBpbnQJCWRldl9zZXRfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICosIGludCk7CitleHRlcm4gaW50CQlkZXZfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICosCisJCQkJCSAgICBzdHJ1Y3Qgc29ja2FkZHIgKik7CitleHRlcm4gdm9pZAkJZGV2X3F1ZXVlX3htaXRfbml0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworCitleHRlcm4gdm9pZAkJZGV2X2luaXQodm9pZCk7CisKK2V4dGVybiBpbnQJCW5ldGRldl9uaXQ7CisKKy8qIENhbGxlZCBieSBydG5ldGxpbmsuYzpydG5sX3VubG9jaygpICovCitleHRlcm4gdm9pZCBuZXRkZXZfcnVuX3RvZG8odm9pZCk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZXZfcHV0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJYXRvbWljX2RlYygmZGV2LT5yZWZjbnQpOworfQorCisjZGVmaW5lIF9fZGV2X3B1dChkZXYpIGF0b21pY19kZWMoJihkZXYpLT5yZWZjbnQpCisjZGVmaW5lIGRldl9ob2xkKGRldikgYXRvbWljX2luYygmKGRldiktPnJlZmNudCkKKworLyogQ2FycmllciBsb3NzIGRldGVjdGlvbiwgZGlhbCBvbiBkZW1hbmQuIFRoZSBmdW5jdGlvbnMgbmV0aWZfY2Fycmllcl9vbgorICogYW5kIF9vZmYgbWF5IGJlIGNhbGxlZCBmcm9tIElSUSBjb250ZXh0LCBidXQgaXQgaXMgY2FsbGVyCisgKiB3aG8gaXMgcmVzcG9uc2libGUgZm9yIHNlcmlhbGl6YXRpb24gb2YgdGhlc2UgY2FsbHMuCisgKi8KKworZXh0ZXJuIHZvaWQgbGlua3dhdGNoX2ZpcmVfZXZlbnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisKK3N0YXRpYyBpbmxpbmUgaW50IG5ldGlmX2NhcnJpZXJfb2soY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gIXRlc3RfYml0KF9fTElOS19TVEFURV9OT0NBUlJJRVIsICZkZXYtPnN0YXRlKTsKK30KKworZXh0ZXJuIHZvaWQgX19uZXRkZXZfd2F0Y2hkb2dfdXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuZXRpZl9jYXJyaWVyX29uKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChfX0xJTktfU1RBVEVfTk9DQVJSSUVSLCAmZGV2LT5zdGF0ZSkpCisJCWxpbmt3YXRjaF9maXJlX2V2ZW50KGRldik7CisJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJX19uZXRkZXZfd2F0Y2hkb2dfdXAoZGV2KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG5ldGlmX2NhcnJpZXJfb2ZmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KF9fTElOS19TVEFURV9OT0NBUlJJRVIsICZkZXYtPnN0YXRlKSkKKwkJbGlua3dhdGNoX2ZpcmVfZXZlbnQoZGV2KTsKK30KKworLyogSG90LXBsdWdnaW5nLiAqLworc3RhdGljIGlubGluZSBpbnQgbmV0aWZfZGV2aWNlX3ByZXNlbnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gdGVzdF9iaXQoX19MSU5LX1NUQVRFX1BSRVNFTlQsICZkZXYtPnN0YXRlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG5ldGlmX2RldmljZV9kZXRhY2goc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KF9fTElOS19TVEFURV9QUkVTRU5ULCAmZGV2LT5zdGF0ZSkgJiYKKwkgICAgbmV0aWZfcnVubmluZyhkZXYpKSB7CisJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuZXRpZl9kZXZpY2VfYXR0YWNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KF9fTElOS19TVEFURV9QUkVTRU5ULCAmZGV2LT5zdGF0ZSkgJiYKKwkgICAgbmV0aWZfcnVubmluZyhkZXYpKSB7CisJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKKyAJCV9fbmV0ZGV2X3dhdGNoZG9nX3VwKGRldik7CisJfQorfQorCisvKgorICogTmV0d29yayBpbnRlcmZhY2UgbWVzc2FnZSBsZXZlbCBzZXR0aW5ncworICovCisjZGVmaW5lIEhBVkVfTkVUSUZfTVNHIDEKKworZW51bSB7CisJTkVUSUZfTVNHX0RSVgkJPSAweDAwMDEsCisJTkVUSUZfTVNHX1BST0JFCQk9IDB4MDAwMiwKKwlORVRJRl9NU0dfTElOSwkJPSAweDAwMDQsCisJTkVUSUZfTVNHX1RJTUVSCQk9IDB4MDAwOCwKKwlORVRJRl9NU0dfSUZET1dOCT0gMHgwMDEwLAorCU5FVElGX01TR19JRlVQCQk9IDB4MDAyMCwKKwlORVRJRl9NU0dfUlhfRVJSCT0gMHgwMDQwLAorCU5FVElGX01TR19UWF9FUlIJPSAweDAwODAsCisJTkVUSUZfTVNHX1RYX1FVRVVFRAk9IDB4MDEwMCwKKwlORVRJRl9NU0dfSU5UUgkJPSAweDAyMDAsCisJTkVUSUZfTVNHX1RYX0RPTkUJPSAweDA0MDAsCisJTkVUSUZfTVNHX1JYX1NUQVRVUwk9IDB4MDgwMCwKKwlORVRJRl9NU0dfUEtUREFUQQk9IDB4MTAwMCwKKwlORVRJRl9NU0dfSFcJCT0gMHgyMDAwLAorCU5FVElGX01TR19XT0wJCT0gMHg0MDAwLAorfTsKKworI2RlZmluZSBuZXRpZl9tc2dfZHJ2KHApCSgocCktPm1zZ19lbmFibGUgJiBORVRJRl9NU0dfRFJWKQorI2RlZmluZSBuZXRpZl9tc2dfcHJvYmUocCkJKChwKS0+bXNnX2VuYWJsZSAmIE5FVElGX01TR19QUk9CRSkKKyNkZWZpbmUgbmV0aWZfbXNnX2xpbmsocCkJKChwKS0+bXNnX2VuYWJsZSAmIE5FVElGX01TR19MSU5LKQorI2RlZmluZSBuZXRpZl9tc2dfdGltZXIocCkJKChwKS0+bXNnX2VuYWJsZSAmIE5FVElGX01TR19USU1FUikKKyNkZWZpbmUgbmV0aWZfbXNnX2lmZG93bihwKQkoKHApLT5tc2dfZW5hYmxlICYgTkVUSUZfTVNHX0lGRE9XTikKKyNkZWZpbmUgbmV0aWZfbXNnX2lmdXAocCkJKChwKS0+bXNnX2VuYWJsZSAmIE5FVElGX01TR19JRlVQKQorI2RlZmluZSBuZXRpZl9tc2dfcnhfZXJyKHApCSgocCktPm1zZ19lbmFibGUgJiBORVRJRl9NU0dfUlhfRVJSKQorI2RlZmluZSBuZXRpZl9tc2dfdHhfZXJyKHApCSgocCktPm1zZ19lbmFibGUgJiBORVRJRl9NU0dfVFhfRVJSKQorI2RlZmluZSBuZXRpZl9tc2dfdHhfcXVldWVkKHApCSgocCktPm1zZ19lbmFibGUgJiBORVRJRl9NU0dfVFhfUVVFVUVEKQorI2RlZmluZSBuZXRpZl9tc2dfaW50cihwKQkoKHApLT5tc2dfZW5hYmxlICYgTkVUSUZfTVNHX0lOVFIpCisjZGVmaW5lIG5ldGlmX21zZ190eF9kb25lKHApCSgocCktPm1zZ19lbmFibGUgJiBORVRJRl9NU0dfVFhfRE9ORSkKKyNkZWZpbmUgbmV0aWZfbXNnX3J4X3N0YXR1cyhwKQkoKHApLT5tc2dfZW5hYmxlICYgTkVUSUZfTVNHX1JYX1NUQVRVUykKKyNkZWZpbmUgbmV0aWZfbXNnX3BrdGRhdGEocCkJKChwKS0+bXNnX2VuYWJsZSAmIE5FVElGX01TR19QS1REQVRBKQorI2RlZmluZSBuZXRpZl9tc2dfaHcocCkJCSgocCktPm1zZ19lbmFibGUgJiBORVRJRl9NU0dfSFcpCisjZGVmaW5lIG5ldGlmX21zZ193b2wocCkJKChwKS0+bXNnX2VuYWJsZSAmIE5FVElGX01TR19XT0wpCisKK3N0YXRpYyBpbmxpbmUgdTMyIG5ldGlmX21zZ19pbml0KGludCBkZWJ1Z192YWx1ZSwgaW50IGRlZmF1bHRfbXNnX2VuYWJsZV9iaXRzKQoreworCS8qIHVzZSBkZWZhdWx0ICovCisJaWYgKGRlYnVnX3ZhbHVlIDwgMCB8fCBkZWJ1Z192YWx1ZSA+PSAoc2l6ZW9mKHUzMikgKiA4KSkKKwkJcmV0dXJuIGRlZmF1bHRfbXNnX2VuYWJsZV9iaXRzOworCWlmIChkZWJ1Z192YWx1ZSA9PSAwKQkvKiBubyBvdXRwdXQgKi8KKwkJcmV0dXJuIDA7CisJLyogc2V0IGxvdyBOIGJpdHMgKi8KKwlyZXR1cm4gKDEgPDwgZGVidWdfdmFsdWUpIC0gMTsKK30KKworLyogU2NoZWR1bGUgcnggaW50ciBub3c/ICovCisKK3N0YXRpYyBpbmxpbmUgaW50IG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gbmV0aWZfcnVubmluZyhkZXYpICYmCisJCSF0ZXN0X2FuZF9zZXRfYml0KF9fTElOS19TVEFURV9SWF9TQ0hFRCwgJmRldi0+c3RhdGUpOworfQorCisvKiBBZGQgaW50ZXJmYWNlIHRvIHRhaWwgb2YgcnggcG9sbCBsaXN0LiBUaGlzIGFzc3VtZXMgdGhhdCBfcHJlcCBoYXMKKyAqIGFscmVhZHkgYmVlbiBjYWxsZWQgYW5kIHJldHVybmVkIDEuCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkIF9fbmV0aWZfcnhfc2NoZWR1bGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWRldl9ob2xkKGRldik7CisJbGlzdF9hZGRfdGFpbCgmZGV2LT5wb2xsX2xpc3QsICZfX2dldF9jcHVfdmFyKHNvZnRuZXRfZGF0YSkucG9sbF9saXN0KTsKKwlpZiAoZGV2LT5xdW90YSA8IDApCisJCWRldi0+cXVvdGEgKz0gZGV2LT53ZWlnaHQ7CisJZWxzZQorCQlkZXYtPnF1b3RhID0gZGV2LT53ZWlnaHQ7CisJX19yYWlzZV9zb2Z0aXJxX2lycW9mZihORVRfUlhfU09GVElSUSk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCisvKiBUcnkgdG8gcmVzY2hlZHVsZSBwb2xsLiBDYWxsZWQgYnkgaXJxIGhhbmRsZXIuICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuZXRpZl9yeF9zY2hlZHVsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCWlmIChuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKGRldikpCisJCV9fbmV0aWZfcnhfc2NoZWR1bGUoZGV2KTsKK30KKworLyogVHJ5IHRvIHJlc2NoZWR1bGUgcG9sbC4gQ2FsbGVkIGJ5IGRldi0+cG9sbCgpIGFmdGVyIG5ldGlmX3J4X2NvbXBsZXRlKCkuCisgKiBEbyBub3QgaW5saW5lIHRoaXM/CisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IG5ldGlmX3J4X3Jlc2NoZWR1bGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHVuZG8pCit7CisJaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoZGV2KSkgeworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCWRldi0+cXVvdGEgKz0gdW5kbzsKKworCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJCWxpc3RfYWRkX3RhaWwoJmRldi0+cG9sbF9saXN0LCAmX19nZXRfY3B1X3Zhcihzb2Z0bmV0X2RhdGEpLnBvbGxfbGlzdCk7CisJCV9fcmFpc2Vfc29mdGlycV9pcnFvZmYoTkVUX1JYX1NPRlRJUlEpOworCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworLyogUmVtb3ZlIGludGVyZmFjZSBmcm9tIHBvbGwgbGlzdDogaXQgbXVzdCBiZSBpbiB0aGUgcG9sbCBsaXN0CisgKiBvbiBjdXJyZW50IGNwdS4gVGhpcyBwcmltaXRpdmUgaXMgY2FsbGVkIGJ5IGRldi0+cG9sbCgpLCB3aGVuCisgKiBpdCBjb21wbGV0ZXMgdGhlIHdvcmsuIFRoZSBkZXZpY2UgY2Fubm90IGJlIG91dCBvZiBwb2xsIGxpc3QgYXQgdGhpcworICogbW9tZW50LCBpdCBpcyBCVUcoKS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIG5ldGlmX3J4X2NvbXBsZXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlCVUdfT04oIXRlc3RfYml0KF9fTElOS19TVEFURV9SWF9TQ0hFRCwgJmRldi0+c3RhdGUpKTsKKwlsaXN0X2RlbCgmZGV2LT5wb2xsX2xpc3QpOworCXNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpOworCWNsZWFyX2JpdChfX0xJTktfU1RBVEVfUlhfU0NIRUQsICZkZXYtPnN0YXRlKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuZXRpZl9wb2xsX2Rpc2FibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwl3aGlsZSAodGVzdF9hbmRfc2V0X2JpdChfX0xJTktfU1RBVEVfUlhfU0NIRUQsICZkZXYtPnN0YXRlKSkgeworCQkvKiBObyBodXJyeS4gKi8KKwkJY3VycmVudC0+c3RhdGUgPSBUQVNLX0lOVEVSUlVQVElCTEU7CisJCXNjaGVkdWxlX3RpbWVvdXQoMSk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbmV0aWZfcG9sbF9lbmFibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwljbGVhcl9iaXQoX19MSU5LX1NUQVRFX1JYX1NDSEVELCAmZGV2LT5zdGF0ZSk7Cit9CisKKy8qIHNhbWUgYXMgbmV0aWZfcnhfY29tcGxldGUsIGV4Y2VwdCB0aGF0IGxvY2FsX2lycV9zYXZlKGZsYWdzKQorICogaGFzIGFscmVhZHkgYmVlbiBpc3N1ZWQKKyAqLworc3RhdGljIGlubGluZSB2b2lkIF9fbmV0aWZfcnhfY29tcGxldGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlCVUdfT04oIXRlc3RfYml0KF9fTElOS19TVEFURV9SWF9TQ0hFRCwgJmRldi0+c3RhdGUpKTsKKwlsaXN0X2RlbCgmZGV2LT5wb2xsX2xpc3QpOworCXNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpOworCWNsZWFyX2JpdChfX0xJTktfU1RBVEVfUlhfU0NIRUQsICZkZXYtPnN0YXRlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG5ldGlmX3R4X2Rpc2FibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzcGluX2xvY2tfYmgoJmRldi0+eG1pdF9sb2NrKTsKKwluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJc3Bpbl91bmxvY2tfYmgoJmRldi0+eG1pdF9sb2NrKTsKK30KKworLyogVGhlc2UgZnVuY3Rpb25zIGxpdmUgZWxzZXdoZXJlIChkcml2ZXJzL25ldC9uZXRfaW5pdC5jLCBidXQgcmVsYXRlZCkgKi8KKworZXh0ZXJuIHZvaWQJCWV0aGVyX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworCisvKiBTdXBwb3J0IGZvciBsb2FkYWJsZSBuZXQtZHJpdmVycyAqLworZXh0ZXJuIHN0cnVjdCBuZXRfZGV2aWNlICphbGxvY19uZXRkZXYoaW50IHNpemVvZl9wcml2LCBjb25zdCBjaGFyICpuYW1lLAorCQkJCSAgICAgICB2b2lkICgqc2V0dXApKHN0cnVjdCBuZXRfZGV2aWNlICopKTsKK2V4dGVybiBpbnQJCXJlZ2lzdGVyX25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkCQl1bnJlZ2lzdGVyX25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKy8qIEZ1bmN0aW9ucyB1c2VkIGZvciBtdWx0aWNhc3Qgc3VwcG9ydCAqLworZXh0ZXJuIHZvaWQJCWRldl9tY191cGxvYWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitleHRlcm4gaW50IAkJZGV2X21jX2RlbGV0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICphZGRyLCBpbnQgYWxlbiwgaW50IGFsbCk7CitleHRlcm4gaW50CQlkZXZfbWNfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKmFkZHIsIGludCBhbGVuLCBpbnQgbmV3b25seSk7CitleHRlcm4gdm9pZAkJZGV2X21jX2Rpc2NhcmQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitleHRlcm4gdm9pZAkJZGV2X3NldF9wcm9taXNjdWl0eShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaW5jKTsKK2V4dGVybiB2b2lkCQlkZXZfc2V0X2FsbG11bHRpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpbmMpOworZXh0ZXJuIHZvaWQJCW5ldGRldl9zdGF0ZV9jaGFuZ2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisvKiBMb2FkIGEgZGV2aWNlIHZpYSB0aGUga21vZCAqLworZXh0ZXJuIHZvaWQJCWRldl9sb2FkKGNvbnN0IGNoYXIgKm5hbWUpOworZXh0ZXJuIHZvaWQJCWRldl9tY2FzdF9pbml0KHZvaWQpOworZXh0ZXJuIGludAkJbmV0ZGV2X21heF9iYWNrbG9nOworZXh0ZXJuIGludAkJd2VpZ2h0X3A7CitleHRlcm4gaW50CQluZXRkZXZfc2V0X21hc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqbWFzdGVyKTsKK2V4dGVybiBpbnQgc2tiX2NoZWNrc3VtX2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGlud2FyZCk7CisvKiByeCBza2IgdGltZXN0YW1wcyAqLworZXh0ZXJuIHZvaWQJCW5ldF9lbmFibGVfdGltZXN0YW1wKHZvaWQpOworZXh0ZXJuIHZvaWQJCW5ldF9kaXNhYmxlX3RpbWVzdGFtcCh2b2lkKTsKKworI2lmZGVmIENPTkZJR19TWVNDVEwKK2V4dGVybiBjaGFyICpuZXRfc3lzY3RsX3N0cmR1cChjb25zdCBjaGFyICpzKTsKKyNlbmRpZgorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYJLyogX0xJTlVYX0RFVl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTIwNDU0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIuaApAQCAtMCwwICsxLDE5OSBAQAorI2lmbmRlZiBfX0xJTlVYX05FVEZJTFRFUl9ICisjZGVmaW5lIF9fTElOVVhfTkVURklMVEVSX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pZi5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorCisvKiBSZXNwb25zZXMgZnJvbSBob29rIGZ1bmN0aW9ucy4gKi8KKyNkZWZpbmUgTkZfRFJPUCAwCisjZGVmaW5lIE5GX0FDQ0VQVCAxCisjZGVmaW5lIE5GX1NUT0xFTiAyCisjZGVmaW5lIE5GX1FVRVVFIDMKKyNkZWZpbmUgTkZfUkVQRUFUIDQKKyNkZWZpbmUgTkZfU1RPUCA1CisjZGVmaW5lIE5GX01BWF9WRVJESUNUIE5GX1NUT1AKKworLyogR2VuZXJpYyBjYWNoZSByZXNwb25zZXMgZnJvbSBob29rIGZ1bmN0aW9ucy4KKyAgIDw9IDB4MjAwMCBpcyB1c2VkIGZvciBwcm90b2NvbC1mbGFncy4gKi8KKyNkZWZpbmUgTkZDX1VOS05PV04gMHg0MDAwCisjZGVmaW5lIE5GQ19BTFRFUkVEIDB4ODAwMAorCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2lmZGVmIENPTkZJR19ORVRGSUxURVIKKworZXh0ZXJuIHZvaWQgbmV0ZmlsdGVyX2luaXQodm9pZCk7CisKKy8qIExhcmdlc3QgaG9vayBudW1iZXIgKyAxICovCisjZGVmaW5lIE5GX01BWF9IT09LUyA4CisKK3N0cnVjdCBza19idWZmOworc3RydWN0IG5ldF9kZXZpY2U7CisKK3R5cGVkZWYgdW5zaWduZWQgaW50IG5mX2hvb2tmbih1bnNpZ25lZCBpbnQgaG9va251bSwKKwkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqKnNrYiwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCisJCQkgICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKKwkJCSAgICAgICBpbnQgKCpva2ZuKShzdHJ1Y3Qgc2tfYnVmZiAqKSk7CisKK3N0cnVjdCBuZl9ob29rX29wcworeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKworCS8qIFVzZXIgZmlsbHMgaW4gZnJvbSBoZXJlIGRvd24uICovCisJbmZfaG9va2ZuICpob29rOworCXN0cnVjdCBtb2R1bGUgKm93bmVyOworCWludCBwZjsKKwlpbnQgaG9va251bTsKKwkvKiBIb29rcyBhcmUgb3JkZXJlZCBpbiBhc2NlbmRpbmcgcHJpb3JpdHkuICovCisJaW50IHByaW9yaXR5OworfTsKKworc3RydWN0IG5mX3NvY2tvcHRfb3BzCit7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCisJaW50IHBmOworCisJLyogTm9uLWluY2x1c2l2ZSByYW5nZXM6IHVzZSAwLzAvTlVMTCB0byBuZXZlciBnZXQgY2FsbGVkLiAqLworCWludCBzZXRfb3B0bWluOworCWludCBzZXRfb3B0bWF4OworCWludCAoKnNldCkoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0dmFsLCB2b2lkIF9fdXNlciAqdXNlciwgdW5zaWduZWQgaW50IGxlbik7CisKKwlpbnQgZ2V0X29wdG1pbjsKKwlpbnQgZ2V0X29wdG1heDsKKwlpbnQgKCpnZXQpKHN0cnVjdCBzb2NrICpzaywgaW50IG9wdHZhbCwgdm9pZCBfX3VzZXIgKnVzZXIsIGludCAqbGVuKTsKKworCS8qIE51bWJlciBvZiB1c2VycyBpbnNpZGUgc2V0KCkgb3IgZ2V0KCkuICovCisJdW5zaWduZWQgaW50IHVzZTsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNsZWFudXBfdGFzazsKK307CisKKy8qIEVhY2ggcXVldWVkICh0byB1c2Vyc3BhY2UpIHNrYnVmZiBoYXMgb25lIG9mIHRoZXNlLiAqLworc3RydWN0IG5mX2luZm8KK3sKKwkvKiBUaGUgb3BzIHN0cnVjdCB3aGljaCBzZW50IHVzIHRvIHVzZXJzcGFjZS4gKi8KKwlzdHJ1Y3QgbmZfaG9va19vcHMgKmVsZW07CisJCisJLyogSWYgd2UncmUgc2VudCB0byB1c2Vyc3BhY2UsIHRoaXMga2VlcHMgaG91c2VrZWVwaW5nIGluZm8gKi8KKwlpbnQgcGY7CisJdW5zaWduZWQgaW50IGhvb2s7CisJc3RydWN0IG5ldF9kZXZpY2UgKmluZGV2LCAqb3V0ZGV2OworCWludCAoKm9rZm4pKHN0cnVjdCBza19idWZmICopOworfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisvKiBGdW5jdGlvbiB0byByZWdpc3Rlci91bnJlZ2lzdGVyIGhvb2sgcG9pbnRzLiAqLworaW50IG5mX3JlZ2lzdGVyX2hvb2soc3RydWN0IG5mX2hvb2tfb3BzICpyZWcpOwordm9pZCBuZl91bnJlZ2lzdGVyX2hvb2soc3RydWN0IG5mX2hvb2tfb3BzICpyZWcpOworCisvKiBGdW5jdGlvbnMgdG8gcmVnaXN0ZXIgZ2V0L3NldHNvY2tvcHQgcmFuZ2VzIChub24taW5jbHVzaXZlKS4gIFlvdQorICAgbmVlZCB0byBjaGVjayBwZXJtaXNzaW9ucyB5b3Vyc2VsZiEgKi8KK2ludCBuZl9yZWdpc3Rlcl9zb2Nrb3B0KHN0cnVjdCBuZl9zb2Nrb3B0X29wcyAqcmVnKTsKK3ZvaWQgbmZfdW5yZWdpc3Rlcl9zb2Nrb3B0KHN0cnVjdCBuZl9zb2Nrb3B0X29wcyAqcmVnKTsKKworZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgbmZfaG9va3NbTlBST1RPXVtORl9NQVhfSE9PS1NdOworCit0eXBlZGVmIHZvaWQgbmZfbG9nZm4odW5zaWduZWQgaW50IGhvb2tudW0sCisJCSAgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKKwkJICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKKwkJICAgICAgY29uc3QgY2hhciAqcHJlZml4KTsKKworLyogRnVuY3Rpb24gdG8gcmVnaXN0ZXIvdW5yZWdpc3RlciBsb2cgZnVuY3Rpb24uICovCitpbnQgbmZfbG9nX3JlZ2lzdGVyKGludCBwZiwgbmZfbG9nZm4gKmxvZ2ZuKTsKK3ZvaWQgbmZfbG9nX3VucmVnaXN0ZXIoaW50IHBmLCBuZl9sb2dmbiAqbG9nZm4pOworCisvKiBDYWxscyB0aGUgcmVnaXN0ZXJlZCBiYWNrZW5kIGxvZ2dpbmcgZnVuY3Rpb24gKi8KK3ZvaWQgbmZfbG9nX3BhY2tldChpbnQgcGYsCisJCSAgIHVuc2lnbmVkIGludCBob29rbnVtLAorCQkgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCisJCSAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCisJCSAgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKKyAgICAgICAgICAgICAgICAgICAKKy8qIEFjdGl2YXRlIGhvb2s7IGVpdGhlciBva2ZuIG9yIGtmcmVlX3NrYiBjYWxsZWQsIHVubGVzcyBhIGhvb2sKKyAgIHJldHVybnMgTkZfU1RPTEVOIChpbiB3aGljaCBjYXNlLCBpdCdzIHVwIHRvIHRoZSBob29rIHRvIGRlYWwgd2l0aAorICAgdGhlIGNvbnNlcXVlbmNlcykuCisKKyAgIFJldHVybnMgLUVSUk5PIGlmIHBhY2tldCBkcm9wcGVkLiAgWmVybyBtZWFucyBxdWV1ZWQsIHN0b2xlbiBvcgorICAgYWNjZXB0ZWQuCisqLworCisvKiBSUjoKKyAgID4gSSBkb24ndCB3YW50IG5mX2hvb2sgdG8gcmV0dXJuIGFueXRoaW5nIGJlY2F1c2UgcGVvcGxlIG1pZ2h0IGZvcmdldAorICAgPiBhYm91dCBhc3luYyBhbmQgdHJ1c3QgdGhlIHJldHVybiB2YWx1ZSB0byBtZWFuICJwYWNrZXQgd2FzIG9rIi4KKworICAgQUs6CisgICBKdXN0IGRvY3VtZW50IGl0IGNsZWFybHksIHRoZW4geW91IGNhbiBleHBlY3Qgc29tZSBzZW5zZSBmcm9tIGtlcm5lbAorICAgY29kZXJzIDopCisqLworCisvKiBUaGlzIGlzIGdyb3NzLCBidXQgaW5saW5lIGRvZXNuJ3QgY3V0IGl0IGZvciBhdm9pZGluZyB0aGUgZnVuY3Rpb24KKyAgIGNhbGwgaW4gZmFzdCBwYXRoOiBnY2MgZG9lc24ndCBpbmxpbmUgKG5lZWRzIHZhbHVlIHRyYWNraW5nPykuIC0tUlIgKi8KKyNpZmRlZiBDT05GSUdfTkVURklMVEVSX0RFQlVHCisjZGVmaW5lIE5GX0hPT0socGYsIGhvb2ssIHNrYiwgaW5kZXYsIG91dGRldiwgb2tmbikJCQkgICAgICAgXAorKHtpbnQgX19yZXQ7CQkJCQkJCQkgICAgICAgXAoraWYgKChfX3JldD1uZl9ob29rX3Nsb3cocGYsIGhvb2ssICYoc2tiKSwgaW5kZXYsIG91dGRldiwgb2tmbiwgSU5UX01JTikpID09IDEpIFwKKwlfX3JldCA9IChva2ZuKShza2IpOwkJCQkJCSAgICAgICBcCitfX3JldDt9KQorI2RlZmluZSBORl9IT09LX1RIUkVTSChwZiwgaG9vaywgc2tiLCBpbmRldiwgb3V0ZGV2LCBva2ZuLCB0aHJlc2gpCSAgICAgICBcCisoe2ludCBfX3JldDsJCQkJCQkJCSAgICAgICBcCitpZiAoKF9fcmV0PW5mX2hvb2tfc2xvdyhwZiwgaG9vaywgJihza2IpLCBpbmRldiwgb3V0ZGV2LCBva2ZuLCB0aHJlc2gpKSA9PSAxKSAgXAorCV9fcmV0ID0gKG9rZm4pKHNrYik7CQkJCQkJICAgICAgIFwKK19fcmV0O30pCisjZWxzZQorI2RlZmluZSBORl9IT09LKHBmLCBob29rLCBza2IsIGluZGV2LCBvdXRkZXYsIG9rZm4pCQkJICAgICAgIFwKKyh7aW50IF9fcmV0OwkJCQkJCQkJICAgICAgIFwKK2lmIChsaXN0X2VtcHR5KCZuZl9ob29rc1twZl1baG9va10pIHx8CQkJCQkgICAgICAgXAorICAgIChfX3JldD1uZl9ob29rX3Nsb3cocGYsIGhvb2ssICYoc2tiKSwgaW5kZXYsIG91dGRldiwgb2tmbiwgSU5UX01JTikpID09IDEpIFwKKwlfX3JldCA9IChva2ZuKShza2IpOwkJCQkJCSAgICAgICBcCitfX3JldDt9KQorI2RlZmluZSBORl9IT09LX1RIUkVTSChwZiwgaG9vaywgc2tiLCBpbmRldiwgb3V0ZGV2LCBva2ZuLCB0aHJlc2gpCSAgICAgICBcCisoe2ludCBfX3JldDsJCQkJCQkJCSAgICAgICBcCitpZiAobGlzdF9lbXB0eSgmbmZfaG9va3NbcGZdW2hvb2tdKSB8fAkJCQkJICAgICAgIFwKKyAgICAoX19yZXQ9bmZfaG9va19zbG93KHBmLCBob29rLCAmKHNrYiksIGluZGV2LCBvdXRkZXYsIG9rZm4sIHRocmVzaCkpID09IDEpICBcCisJX19yZXQgPSAob2tmbikoc2tiKTsJCQkJCQkgICAgICAgXAorX19yZXQ7fSkKKyNlbmRpZgorCitpbnQgbmZfaG9va19zbG93KGludCBwZiwgdW5zaWduZWQgaW50IGhvb2ssIHN0cnVjdCBza19idWZmICoqcHNrYiwKKwkJIHN0cnVjdCBuZXRfZGV2aWNlICppbmRldiwgc3RydWN0IG5ldF9kZXZpY2UgKm91dGRldiwKKwkJIGludCAoKm9rZm4pKHN0cnVjdCBza19idWZmICopLCBpbnQgdGhyZXNoKTsKKworLyogQ2FsbCBzZXRzb2Nrb3B0KCkgKi8KK2ludCBuZl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IHBmLCBpbnQgb3B0dmFsLCBjaGFyIF9fdXNlciAqb3B0LCAKKwkJICBpbnQgbGVuKTsKK2ludCBuZl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IHBmLCBpbnQgb3B0dmFsLCBjaGFyIF9fdXNlciAqb3B0LAorCQkgIGludCAqbGVuKTsKKworLyogUGFja2V0IHF1ZXVpbmcgKi8KK3R5cGVkZWYgaW50ICgqbmZfcXVldWVfb3V0Zm5fdCkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBuZl9pbmZvICppbmZvLCB2b2lkICpkYXRhKTsKK2V4dGVybiBpbnQgbmZfcmVnaXN0ZXJfcXVldWVfaGFuZGxlcihpbnQgcGYsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5mX3F1ZXVlX291dGZuX3Qgb3V0Zm4sIHZvaWQgKmRhdGEpOworZXh0ZXJuIGludCBuZl91bnJlZ2lzdGVyX3F1ZXVlX2hhbmRsZXIoaW50IHBmKTsKK2V4dGVybiB2b2lkIG5mX3JlaW5qZWN0KHN0cnVjdCBza19idWZmICpza2IsCisJCQlzdHJ1Y3QgbmZfaW5mbyAqaW5mbywKKwkJCXVuc2lnbmVkIGludCB2ZXJkaWN0KTsKKworZXh0ZXJuIHZvaWQgKCppcF9jdF9hdHRhY2gpKHN0cnVjdCBza19idWZmICosIHN0cnVjdCBza19idWZmICopOworZXh0ZXJuIHZvaWQgbmZfY3RfYXR0YWNoKHN0cnVjdCBza19idWZmICosIHN0cnVjdCBza19idWZmICopOworCisvKiBGSVhNRTogQmVmb3JlIGNhY2hlIGlzIGV2ZXIgdXNlZCwgdGhpcyBtdXN0IGJlIGltcGxlbWVudGVkIGZvciByZWFsLiAqLworZXh0ZXJuIHZvaWQgbmZfaW52YWxpZGF0ZV9jYWNoZShpbnQgcGYpOworCisjZWxzZSAvKiAhQ09ORklHX05FVEZJTFRFUiAqLworI2RlZmluZSBORl9IT09LKHBmLCBob29rLCBza2IsIGluZGV2LCBvdXRkZXYsIG9rZm4pIChva2ZuKShza2IpCitzdGF0aWMgaW5saW5lIHZvaWQgbmZfY3RfYXR0YWNoKHN0cnVjdCBza19idWZmICpuZXcsIHN0cnVjdCBza19idWZmICpza2IpIHt9CisjZW5kaWYgLypDT05GSUdfTkVURklMVEVSKi8KKworI2VuZGlmIC8qX19LRVJORUxfXyovCisjZW5kaWYgLypfX0xJTlVYX05FVEZJTFRFUl9IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2FycC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYXJwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNmODk3NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2FycC5oCkBAIC0wLDAgKzEsMjAgQEAKKyNpZm5kZWYgX19MSU5VWF9BUlBfTkVURklMVEVSX0gKKyNkZWZpbmUgX19MSU5VWF9BUlBfTkVURklMVEVSX0gKKworLyogQVJQLXNwZWNpZmljIGRlZmluZXMgZm9yIG5ldGZpbHRlci4KKyAqIChDKTIwMDIgUnVzdHkgUnVzc2VsbCBJQk0gLS0gVGhpcyBjb2RlIGlzIEdQTC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyLmg+CisKKy8qIFRoZXJlIGlzIG5vIFBGX0FSUC4gKi8KKyNkZWZpbmUgTkZfQVJQCQkwCisKKy8qIEFSUCBIb29rcyAqLworI2RlZmluZSBORl9BUlBfSU4JMAorI2RlZmluZSBORl9BUlBfT1VUCTEKKyNkZWZpbmUgTkZfQVJQX0ZPUldBUkQJMgorI2RlZmluZSBORl9BUlBfTlVNSE9PS1MJMworCisjZW5kaWYgLyogX19MSU5VWF9BUlBfTkVURklMVEVSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2FycC9hcnBfdGFibGVzLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9hcnAvYXJwX3RhYmxlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NTlhNjM3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYXJwL2FycF90YWJsZXMuaApAQCAtMCwwICsxLDM0MCBAQAorLyoKKyAqIAlGb3JtYXQgb2YgYW4gQVJQIGZpcmV3YWxsIGRlc2NyaXB0b3IKKyAqCisgKiAJc3JjLCB0Z3QsIHNyY19tYXNrLCB0Z3RfbWFzaywgYXJwb3AsIGFycG9wX21hc2sgYXJlIGFsd2F5cyBzdG9yZWQgaW4KKyAqCW5ldHdvcmsgYnl0ZSBvcmRlci4KKyAqIAlmbGFncyBhcmUgc3RvcmVkIGluIGhvc3QgYnl0ZSBvcmRlciAob2YgY291cnNlKS4KKyAqLworCisjaWZuZGVmIF9BUlBUQUJMRVNfSAorI2RlZmluZSBfQVJQVEFCTEVTX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxsaW51eC9pZi5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNlbmRpZgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2FycC5oPgorCisjZGVmaW5lIEFSUFRfRlVOQ1RJT05fTUFYTkFNRUxFTiAzMAorI2RlZmluZSBBUlBUX1RBQkxFX01BWE5BTUVMRU4gMzIKKworI2RlZmluZSBBUlBUX0RFVl9BRERSX0xFTl9NQVggMTYKKworc3RydWN0IGFycHRfZGV2YWRkcl9pbmZvIHsKKwljaGFyIGFkZHJbQVJQVF9ERVZfQUREUl9MRU5fTUFYXTsKKwljaGFyIG1hc2tbQVJQVF9ERVZfQUREUl9MRU5fTUFYXTsKK307CisKKy8qIFllcywgVmlyZ2luaWEsIHlvdSBoYXZlIHRvIHplcm8gdGhlIHBhZGRpbmcuICovCitzdHJ1Y3QgYXJwdF9hcnAgeworCS8qIFNvdXJjZSBhbmQgdGFyZ2V0IElQIGFkZHIgKi8KKwlzdHJ1Y3QgaW5fYWRkciBzcmMsIHRndDsKKwkvKiBNYXNrIGZvciBzcmMgYW5kIHRhcmdldCBJUCBhZGRyICovCisJc3RydWN0IGluX2FkZHIgc21zaywgdG1zazsKKworCS8qIERldmljZSBodyBhZGRyZXNzIGxlbmd0aCwgc3JjK3RhcmdldCBkZXZpY2UgYWRkcmVzc2VzICovCisJdV9pbnQ4X3QgYXJobG4sIGFyaGxuX21hc2s7CisJc3RydWN0IGFycHRfZGV2YWRkcl9pbmZvIHNyY19kZXZhZGRyOworCXN0cnVjdCBhcnB0X2RldmFkZHJfaW5mbyB0Z3RfZGV2YWRkcjsKKworCS8qIEFSUCBvcGVyYXRpb24gY29kZS4gKi8KKwl1X2ludDE2X3QgYXJwb3AsIGFycG9wX21hc2s7CisKKwkvKiBBUlAgaGFyZHdhcmUgYWRkcmVzcyBhbmQgcHJvdG9jb2wgYWRkcmVzcyBmb3JtYXQuICovCisJdV9pbnQxNl90IGFyaHJkLCBhcmhyZF9tYXNrOworCXVfaW50MTZfdCBhcnBybywgYXJwcm9fbWFzazsKKworCS8qIFRoZSBwcm90b2NvbCBhZGRyZXNzIGxlbmd0aCBpcyBvbmx5IGFjY2VwdGVkIGlmIGl0IGlzIDQKKwkgKiBzbyB0aGVyZSBpcyBubyB1c2UgaW4gb2ZmZXJpbmcgYSB3YXkgdG8gZG8gZmlsdGVyaW5nIG9uIGl0LgorCSAqLworCisJY2hhciBpbmlmYWNlW0lGTkFNU0laXSwgb3V0aWZhY2VbSUZOQU1TSVpdOworCXVuc2lnbmVkIGNoYXIgaW5pZmFjZV9tYXNrW0lGTkFNU0laXSwgb3V0aWZhY2VfbWFza1tJRk5BTVNJWl07CisKKwkvKiBGbGFncyB3b3JkICovCisJdV9pbnQ4X3QgZmxhZ3M7CisJLyogSW52ZXJzZSBmbGFncyAqLworCXVfaW50MTZfdCBpbnZmbGFnczsKK307CisKK3N0cnVjdCBhcnB0X2VudHJ5X3RhcmdldAoreworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXVfaW50MTZfdCB0YXJnZXRfc2l6ZTsKKworCQkJLyogVXNlZCBieSB1c2Vyc3BhY2UgKi8KKwkJCWNoYXIgbmFtZVtBUlBUX0ZVTkNUSU9OX01BWE5BTUVMRU5dOworCQl9IHVzZXI7CisJCXN0cnVjdCB7CisJCQl1X2ludDE2X3QgdGFyZ2V0X3NpemU7CisKKwkJCS8qIFVzZWQgaW5zaWRlIHRoZSBrZXJuZWwgKi8KKwkJCXN0cnVjdCBhcnB0X3RhcmdldCAqdGFyZ2V0OworCQl9IGtlcm5lbDsKKworCQkvKiBUb3RhbCBsZW5ndGggKi8KKwkJdV9pbnQxNl90IHRhcmdldF9zaXplOworCX0gdTsKKworCXVuc2lnbmVkIGNoYXIgZGF0YVswXTsKK307CisKK3N0cnVjdCBhcnB0X3N0YW5kYXJkX3RhcmdldAoreworCXN0cnVjdCBhcnB0X2VudHJ5X3RhcmdldCB0YXJnZXQ7CisJaW50IHZlcmRpY3Q7Cit9OworCitzdHJ1Y3QgYXJwdF9jb3VudGVycworeworCXVfaW50NjRfdCBwY250LCBiY250OwkJCS8qIFBhY2tldCBhbmQgYnl0ZSBjb3VudGVycyAqLworfTsKKworLyogVmFsdWVzIGZvciAiZmxhZyIgZmllbGQgaW4gc3RydWN0IGFycHRfaXAgKGdlbmVyYWwgYXJwIHN0cnVjdHVyZSkuCisgKiBObyBmbGFncyBkZWZpbmVkIHlldC4KKyAqLworI2RlZmluZSBBUlBUX0ZfTUFTSwkJMHgwMAkvKiBBbGwgcG9zc2libGUgZmxhZyBiaXRzIG1hc2suICovCisKKy8qIFZhbHVlcyBmb3IgImludiIgZmllbGQgaW4gc3RydWN0IGFycHRfYXJwLiAqLworI2RlZmluZSBBUlBUX0lOVl9WSUFfSU4JCTB4MDAwMQkvKiBJbnZlcnQgdGhlIHNlbnNlIG9mIElOIElGQUNFLiAqLworI2RlZmluZSBBUlBUX0lOVl9WSUFfT1VUCTB4MDAwMgkvKiBJbnZlcnQgdGhlIHNlbnNlIG9mIE9VVCBJRkFDRSAqLworI2RlZmluZSBBUlBUX0lOVl9TUkNJUAkJMHgwMDA0CS8qIEludmVydCB0aGUgc2Vuc2Ugb2YgU1JDIElQLiAqLworI2RlZmluZSBBUlBUX0lOVl9UR1RJUAkJMHgwMDA4CS8qIEludmVydCB0aGUgc2Vuc2Ugb2YgVEdUIElQLiAqLworI2RlZmluZSBBUlBUX0lOVl9TUkNERVZBRERSCTB4MDAxMAkvKiBJbnZlcnQgdGhlIHNlbnNlIG9mIFNSQyBERVYgQUREUi4gKi8KKyNkZWZpbmUgQVJQVF9JTlZfVEdUREVWQUREUgkweDAwMjAJLyogSW52ZXJ0IHRoZSBzZW5zZSBvZiBUR1QgREVWIEFERFIuICovCisjZGVmaW5lIEFSUFRfSU5WX0FSUE9QCQkweDAwNDAJLyogSW52ZXJ0IHRoZSBzZW5zZSBvZiBBUlAgT1AuICovCisjZGVmaW5lIEFSUFRfSU5WX0FSUEhSRAkJMHgwMDgwCS8qIEludmVydCB0aGUgc2Vuc2Ugb2YgQVJQIEhSRC4gKi8KKyNkZWZpbmUgQVJQVF9JTlZfQVJQUFJPCQkweDAxMDAJLyogSW52ZXJ0IHRoZSBzZW5zZSBvZiBBUlAgUFJPLiAqLworI2RlZmluZSBBUlBUX0lOVl9BUlBITE4JCTB4MDIwMAkvKiBJbnZlcnQgdGhlIHNlbnNlIG9mIEFSUCBITE4uICovCisjZGVmaW5lIEFSUFRfSU5WX01BU0sJCTB4MDNGRgkvKiBBbGwgcG9zc2libGUgZmxhZyBiaXRzIG1hc2suICovCisKKy8qIFRoaXMgc3RydWN0dXJlIGRlZmluZXMgZWFjaCBvZiB0aGUgZmlyZXdhbGwgcnVsZXMuICBDb25zaXN0cyBvZiAzCisgICBwYXJ0cyB3aGljaCBhcmUgMSkgZ2VuZXJhbCBBUlAgaGVhZGVyIHN0dWZmIDIpIG1hdGNoIHNwZWNpZmljCisgICBzdHVmZiAzKSB0aGUgdGFyZ2V0IHRvIHBlcmZvcm0gaWYgdGhlIHJ1bGUgbWF0Y2hlcyAqLworc3RydWN0IGFycHRfZW50cnkKK3sKKwlzdHJ1Y3QgYXJwdF9hcnAgYXJwOworCisJLyogU2l6ZSBvZiBhcnB0X2VudHJ5ICsgbWF0Y2hlcyAqLworCXVfaW50MTZfdCB0YXJnZXRfb2Zmc2V0OworCS8qIFNpemUgb2YgYXJwdF9lbnRyeSArIG1hdGNoZXMgKyB0YXJnZXQgKi8KKwl1X2ludDE2X3QgbmV4dF9vZmZzZXQ7CisKKwkvKiBCYWNrIHBvaW50ZXIgKi8KKwl1bnNpZ25lZCBpbnQgY29tZWZyb207CisKKwkvKiBQYWNrZXQgYW5kIGJ5dGUgY291bnRlcnMuICovCisJc3RydWN0IGFycHRfY291bnRlcnMgY291bnRlcnM7CisKKwkvKiBUaGUgbWF0Y2hlcyAoaWYgYW55KSwgdGhlbiB0aGUgdGFyZ2V0LiAqLworCXVuc2lnbmVkIGNoYXIgZWxlbXNbMF07Cit9OworCisvKgorICogTmV3IElQIGZpcmV3YWxsIG9wdGlvbnMgZm9yIFtnc11ldHNvY2tvcHQgYXQgdGhlIFJBVyBJUCBsZXZlbC4KKyAqIFVubGlrZSBCU0QgTGludXggaW5oZXJpdHMgSVAgb3B0aW9ucyBzbyB5b3UgZG9uJ3QgaGF2ZSB0byB1c2UgYSByYXcKKyAqIHNvY2tldCBmb3IgdGhpcy4gSW5zdGVhZCB3ZSBjaGVjayByaWdodHMgaW4gdGhlIGNhbGxzLgorICovCisjZGVmaW5lIEFSUFRfQkFTRV9DVEwJCTk2CS8qIGJhc2UgZm9yIGZpcmV3YWxsIHNvY2tldCBvcHRpb25zICovCisKKyNkZWZpbmUgQVJQVF9TT19TRVRfUkVQTEFDRQkJKEFSUFRfQkFTRV9DVEwpCisjZGVmaW5lIEFSUFRfU09fU0VUX0FERF9DT1VOVEVSUwkoQVJQVF9CQVNFX0NUTCArIDEpCisjZGVmaW5lIEFSUFRfU09fU0VUX01BWAkJCUFSUFRfU09fU0VUX0FERF9DT1VOVEVSUworCisjZGVmaW5lIEFSUFRfU09fR0VUX0lORk8JCShBUlBUX0JBU0VfQ1RMKQorI2RlZmluZSBBUlBUX1NPX0dFVF9FTlRSSUVTCQkoQVJQVF9CQVNFX0NUTCArIDEpCisjZGVmaW5lIEFSUFRfU09fR0VUX01BWAkJCUFSUFRfU09fR0VUX0VOVFJJRVMKKworLyogQ09OVElOVUUgdmVyZGljdCBmb3IgdGFyZ2V0cyAqLworI2RlZmluZSBBUlBUX0NPTlRJTlVFIDB4RkZGRkZGRkYKKworLyogRm9yIHN0YW5kYXJkIHRhcmdldCAqLworI2RlZmluZSBBUlBUX1JFVFVSTiAoLU5GX1JFUEVBVCAtIDEpCisKKy8qIFRoZSBhcmd1bWVudCB0byBBUlBUX1NPX0dFVF9JTkZPICovCitzdHJ1Y3QgYXJwdF9nZXRpbmZvCit7CisJLyogV2hpY2ggdGFibGU6IGNhbGxlciBmaWxscyB0aGlzIGluLiAqLworCWNoYXIgbmFtZVtBUlBUX1RBQkxFX01BWE5BTUVMRU5dOworCisJLyogS2VybmVsIGZpbGxzIHRoZXNlIGluLiAqLworCS8qIFdoaWNoIGhvb2sgZW50cnkgcG9pbnRzIGFyZSB2YWxpZDogYml0bWFzayAqLworCXVuc2lnbmVkIGludCB2YWxpZF9ob29rczsKKworCS8qIEhvb2sgZW50cnkgcG9pbnRzOiBvbmUgcGVyIG5ldGZpbHRlciBob29rLiAqLworCXVuc2lnbmVkIGludCBob29rX2VudHJ5W05GX0FSUF9OVU1IT09LU107CisKKwkvKiBVbmRlcmZsb3cgcG9pbnRzLiAqLworCXVuc2lnbmVkIGludCB1bmRlcmZsb3dbTkZfQVJQX05VTUhPT0tTXTsKKworCS8qIE51bWJlciBvZiBlbnRyaWVzICovCisJdW5zaWduZWQgaW50IG51bV9lbnRyaWVzOworCisJLyogU2l6ZSBvZiBlbnRyaWVzLiAqLworCXVuc2lnbmVkIGludCBzaXplOworfTsKKworLyogVGhlIGFyZ3VtZW50IHRvIEFSUFRfU09fU0VUX1JFUExBQ0UuICovCitzdHJ1Y3QgYXJwdF9yZXBsYWNlCit7CisJLyogV2hpY2ggdGFibGUuICovCisJY2hhciBuYW1lW0FSUFRfVEFCTEVfTUFYTkFNRUxFTl07CisKKwkvKiBXaGljaCBob29rIGVudHJ5IHBvaW50cyBhcmUgdmFsaWQ6IGJpdG1hc2suICBZb3UgY2FuJ3QKKyAgICAgICAgICAgY2hhbmdlIHRoaXMuICovCisJdW5zaWduZWQgaW50IHZhbGlkX2hvb2tzOworCisJLyogTnVtYmVyIG9mIGVudHJpZXMgKi8KKwl1bnNpZ25lZCBpbnQgbnVtX2VudHJpZXM7CisKKwkvKiBUb3RhbCBzaXplIG9mIG5ldyBlbnRyaWVzICovCisJdW5zaWduZWQgaW50IHNpemU7CisKKwkvKiBIb29rIGVudHJ5IHBvaW50cy4gKi8KKwl1bnNpZ25lZCBpbnQgaG9va19lbnRyeVtORl9BUlBfTlVNSE9PS1NdOworCisJLyogVW5kZXJmbG93IHBvaW50cy4gKi8KKwl1bnNpZ25lZCBpbnQgdW5kZXJmbG93W05GX0FSUF9OVU1IT09LU107CisKKwkvKiBJbmZvcm1hdGlvbiBhYm91dCBvbGQgZW50cmllczogKi8KKwkvKiBOdW1iZXIgb2YgY291bnRlcnMgKG11c3QgYmUgZXF1YWwgdG8gY3VycmVudCBudW1iZXIgb2YgZW50cmllcykuICovCisJdW5zaWduZWQgaW50IG51bV9jb3VudGVyczsKKwkvKiBUaGUgb2xkIGVudHJpZXMnIGNvdW50ZXJzLiAqLworCXN0cnVjdCBhcnB0X2NvdW50ZXJzIF9fdXNlciAqY291bnRlcnM7CisKKwkvKiBUaGUgZW50cmllcyAoaGFuZyBvZmYgZW5kOiBub3QgcmVhbGx5IGFuIGFycmF5KS4gKi8KKwlzdHJ1Y3QgYXJwdF9lbnRyeSBlbnRyaWVzWzBdOworfTsKKworLyogVGhlIGFyZ3VtZW50IHRvIEFSUFRfU09fQUREX0NPVU5URVJTLiAqLworc3RydWN0IGFycHRfY291bnRlcnNfaW5mbworeworCS8qIFdoaWNoIHRhYmxlLiAqLworCWNoYXIgbmFtZVtBUlBUX1RBQkxFX01BWE5BTUVMRU5dOworCisJdW5zaWduZWQgaW50IG51bV9jb3VudGVyczsKKworCS8qIFRoZSBjb3VudGVycyAoYWN0dWFsbHkgYG51bWJlcicgb2YgdGhlc2UpLiAqLworCXN0cnVjdCBhcnB0X2NvdW50ZXJzIGNvdW50ZXJzWzBdOworfTsKKworLyogVGhlIGFyZ3VtZW50IHRvIEFSUFRfU09fR0VUX0VOVFJJRVMuICovCitzdHJ1Y3QgYXJwdF9nZXRfZW50cmllcworeworCS8qIFdoaWNoIHRhYmxlOiB1c2VyIGZpbGxzIHRoaXMgaW4uICovCisJY2hhciBuYW1lW0FSUFRfVEFCTEVfTUFYTkFNRUxFTl07CisKKwkvKiBVc2VyIGZpbGxzIHRoaXMgaW46IHRvdGFsIGVudHJ5IHNpemUuICovCisJdW5zaWduZWQgaW50IHNpemU7CisKKwkvKiBUaGUgZW50cmllcy4gKi8KKwlzdHJ1Y3QgYXJwdF9lbnRyeSBlbnRyeXRhYmxlWzBdOworfTsKKworLyogU3RhbmRhcmQgcmV0dXJuIHZlcmRpY3QsIG9yIGRvIGp1bXAuICovCisjZGVmaW5lIEFSUFRfU1RBTkRBUkRfVEFSR0VUICIiCisvKiBFcnJvciB2ZXJkaWN0LiAqLworI2RlZmluZSBBUlBUX0VSUk9SX1RBUkdFVCAiRVJST1IiCisKKy8qIEhlbHBlciBmdW5jdGlvbnMgKi8KK3N0YXRpYyBfX2lubGluZV9fIHN0cnVjdCBhcnB0X2VudHJ5X3RhcmdldCAqYXJwdF9nZXRfdGFyZ2V0KHN0cnVjdCBhcnB0X2VudHJ5ICplKQoreworCXJldHVybiAodm9pZCAqKWUgKyBlLT50YXJnZXRfb2Zmc2V0OworfQorCisvKiBmbiByZXR1cm5zIDAgdG8gY29udGludWUgaXRlcmF0aW9uICovCisjZGVmaW5lIEFSUFRfRU5UUllfSVRFUkFURShlbnRyaWVzLCBzaXplLCBmbiwgYXJncy4uLikJCVwKKyh7CQkJCQkJCQlcCisJdW5zaWduZWQgaW50IF9faTsJCQkJCVwKKwlpbnQgX19yZXQgPSAwOwkJCQkJCVwKKwlzdHJ1Y3QgYXJwdF9lbnRyeSAqX19lbnRyeTsJCQkJXAorCQkJCQkJCQlcCisJZm9yIChfX2kgPSAwOyBfX2kgPCAoc2l6ZSk7IF9faSArPSBfX2VudHJ5LT5uZXh0X29mZnNldCkgeyBcCisJCV9fZW50cnkgPSAodm9pZCAqKShlbnRyaWVzKSArIF9faTsJCVwKKwkJCQkJCQkJXAorCQlfX3JldCA9IGZuKF9fZW50cnkgLCAjIyBhcmdzKTsJCQlcCisJCWlmIChfX3JldCAhPSAwKQkJCQkJXAorCQkJYnJlYWs7CQkJCQlcCisJfQkJCQkJCQlcCisJX19yZXQ7CQkJCQkJCVwKK30pCisKKy8qCisgKglNYWluIGZpcmV3YWxsIGNoYWlucyBkZWZpbml0aW9ucyBhbmQgZ2xvYmFsIHZhcidzIGRlZmluaXRpb25zLgorICovCisjaWZkZWYgX19LRVJORUxfXworCisvKiBSZWdpc3RyYXRpb24gaG9va3MgZm9yIHRhcmdldHMuICovCitzdHJ1Y3QgYXJwdF90YXJnZXQKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisKKwljb25zdCBjaGFyIG5hbWVbQVJQVF9GVU5DVElPTl9NQVhOQU1FTEVOXTsKKworCS8qIFJldHVybnMgdmVyZGljdC4gKi8KKwl1bnNpZ25lZCBpbnQgKCp0YXJnZXQpKHN0cnVjdCBza19idWZmICoqcHNrYiwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgaG9va251bSwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCisJCQkgICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKKwkJCSAgICAgICBjb25zdCB2b2lkICp0YXJnaW5mbywKKwkJCSAgICAgICB2b2lkICp1c2VyZGF0YSk7CisKKwkvKiBDYWxsZWQgd2hlbiB1c2VyIHRyaWVzIHRvIGluc2VydCBhbiBlbnRyeSBvZiB0aGlzIHR5cGU6CisgICAgICAgICAgIGhvb2tfbWFzayBpcyBhIGJpdG1hc2sgb2YgaG9va3MgZnJvbSB3aGljaCBpdCBjYW4gYmUKKyAgICAgICAgICAgY2FsbGVkLiAqLworCS8qIFNob3VsZCByZXR1cm4gdHJ1ZSBvciBmYWxzZS4gKi8KKwlpbnQgKCpjaGVja2VudHJ5KShjb25zdCBjaGFyICp0YWJsZW5hbWUsCisJCQkgIGNvbnN0IHN0cnVjdCBhcnB0X2VudHJ5ICplLAorCQkJICB2b2lkICp0YXJnaW5mbywKKwkJCSAgdW5zaWduZWQgaW50IHRhcmdpbmZvc2l6ZSwKKwkJCSAgdW5zaWduZWQgaW50IGhvb2tfbWFzayk7CisKKwkvKiBDYWxsZWQgd2hlbiBlbnRyeSBvZiB0aGlzIHR5cGUgZGVsZXRlZC4gKi8KKwl2b2lkICgqZGVzdHJveSkodm9pZCAqdGFyZ2luZm8sIHVuc2lnbmVkIGludCB0YXJnaW5mb3NpemUpOworCisJLyogU2V0IHRoaXMgdG8gVEhJU19NT0RVTEUgaWYgeW91IGFyZSBhIG1vZHVsZSwgb3RoZXJ3aXNlIE5VTEwgKi8KKwlzdHJ1Y3QgbW9kdWxlICptZTsKK307CisKK2V4dGVybiBpbnQgYXJwdF9yZWdpc3Rlcl90YXJnZXQoc3RydWN0IGFycHRfdGFyZ2V0ICp0YXJnZXQpOworZXh0ZXJuIHZvaWQgYXJwdF91bnJlZ2lzdGVyX3RhcmdldChzdHJ1Y3QgYXJwdF90YXJnZXQgKnRhcmdldCk7CisKKy8qIEZ1cm5pdHVyZSBzaG9wcGluZy4uLiAqLworc3RydWN0IGFycHRfdGFibGUKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisKKwkvKiBBIHVuaXF1ZSBuYW1lLi4uICovCisJY2hhciBuYW1lW0FSUFRfVEFCTEVfTUFYTkFNRUxFTl07CisKKwkvKiBXaGF0IGhvb2tzIHlvdSB3aWxsIGVudGVyIG9uICovCisJdW5zaWduZWQgaW50IHZhbGlkX2hvb2tzOworCisJLyogTG9jayBmb3IgdGhlIGN1cnRhaW4gKi8KKwlyd2xvY2tfdCBsb2NrOworCisJLyogTWFuIGJlaGluZCB0aGUgY3VydGFpbi4uLiAqLworCXN0cnVjdCBhcnB0X3RhYmxlX2luZm8gKnByaXZhdGU7CisKKwkvKiBTZXQgdGhpcyB0byBUSElTX01PRFVMRSBpZiB5b3UgYXJlIGEgbW9kdWxlLCBvdGhlcndpc2UgTlVMTCAqLworCXN0cnVjdCBtb2R1bGUgKm1lOworfTsKKworZXh0ZXJuIGludCBhcnB0X3JlZ2lzdGVyX3RhYmxlKHN0cnVjdCBhcnB0X3RhYmxlICp0YWJsZSwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgYXJwdF9yZXBsYWNlICpyZXBsKTsKK2V4dGVybiB2b2lkIGFycHRfdW5yZWdpc3Rlcl90YWJsZShzdHJ1Y3QgYXJwdF90YWJsZSAqdGFibGUpOworZXh0ZXJuIHVuc2lnbmVkIGludCBhcnB0X2RvX3RhYmxlKHN0cnVjdCBza19idWZmICoqcHNrYiwKKwkJCQkgIHVuc2lnbmVkIGludCBob29rLAorCQkJCSAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAorCQkJCSAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKKwkJCQkgIHN0cnVjdCBhcnB0X3RhYmxlICp0YWJsZSwKKwkJCQkgIHZvaWQgKnVzZXJkYXRhKTsKKworI2RlZmluZSBBUlBUX0FMSUdOKHMpICgoKHMpICsgKF9fYWxpZ25vZl9fKHN0cnVjdCBhcnB0X2VudHJ5KS0xKSkgJiB+KF9fYWxpZ25vZl9fKHN0cnVjdCBhcnB0X2VudHJ5KS0xKSkKKyNlbmRpZiAvKl9fS0VSTkVMX18qLworI2VuZGlmIC8qIF9BUlBUQUJMRVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYXJwL2FycHRfbWFuZ2xlLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9hcnAvYXJwdF9tYW5nbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTBmNTAyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYXJwL2FycHRfbWFuZ2xlLmgKQEAgLTAsMCArMSwyNiBAQAorI2lmbmRlZiBfQVJQVF9NQU5HTEVfSAorI2RlZmluZSBfQVJQVF9NQU5HTEVfSAorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9hcnAvYXJwX3RhYmxlcy5oPgorCisjZGVmaW5lIEFSUFRfTUFOR0xFX0FERFJfTEVOX01BWCBzaXplb2Yoc3RydWN0IGluX2FkZHIpCitzdHJ1Y3QgYXJwdF9tYW5nbGUKK3sKKwljaGFyIHNyY19kZXZhZGRyW0FSUFRfREVWX0FERFJfTEVOX01BWF07CisJY2hhciB0Z3RfZGV2YWRkcltBUlBUX0RFVl9BRERSX0xFTl9NQVhdOworCXVuaW9uIHsKKwkJc3RydWN0IGluX2FkZHIgc3JjX2lwOworCX0gdV9zOworCXVuaW9uIHsKKwkJc3RydWN0IGluX2FkZHIgdGd0X2lwOworCX0gdV90OworCXVfaW50OF90IGZsYWdzOworCWludCB0YXJnZXQ7Cit9OworCisjZGVmaW5lIEFSUFRfTUFOR0xFX1NERVYgMHgwMQorI2RlZmluZSBBUlBUX01BTkdMRV9UREVWIDB4MDIKKyNkZWZpbmUgQVJQVF9NQU5HTEVfU0lQIDB4MDQKKyNkZWZpbmUgQVJQVF9NQU5HTEVfVElQIDB4MDgKKyNkZWZpbmUgQVJQVF9NQU5HTEVfTUFTSyAweDBmCisKKyNlbmRpZiAvKiBfQVJQVF9NQU5HTEVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTRkMzk3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmgKQEAgLTAsMCArMSwxMTMgQEAKKyNpZm5kZWYgX19MSU5VWF9CUklER0VfTkVURklMVEVSX0gKKyNkZWZpbmUgX19MSU5VWF9CUklER0VfTkVURklMVEVSX0gKKworLyogYnJpZGdlLXNwZWNpZmljIGRlZmluZXMgZm9yIG5ldGZpbHRlci4gCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci5oPgorI2lmIGRlZmluZWQoX19LRVJORUxfXykgJiYgZGVmaW5lZChDT05GSUdfQlJJREdFX05FVEZJTFRFUikKKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KKyNlbmRpZgorCisvKiBCcmlkZ2UgSG9va3MgKi8KKy8qIEFmdGVyIHByb21pc2MgZHJvcHMsIGNoZWNrc3VtIGNoZWNrcy4gKi8KKyNkZWZpbmUgTkZfQlJfUFJFX1JPVVRJTkcJMAorLyogSWYgdGhlIHBhY2tldCBpcyBkZXN0aW5lZCBmb3IgdGhpcyBib3guICovCisjZGVmaW5lIE5GX0JSX0xPQ0FMX0lOCQkxCisvKiBJZiB0aGUgcGFja2V0IGlzIGRlc3RpbmVkIGZvciBhbm90aGVyIGludGVyZmFjZS4gKi8KKyNkZWZpbmUgTkZfQlJfRk9SV0FSRAkJMgorLyogUGFja2V0cyBjb21pbmcgZnJvbSBhIGxvY2FsIHByb2Nlc3MuICovCisjZGVmaW5lIE5GX0JSX0xPQ0FMX09VVAkJMworLyogUGFja2V0cyBhYm91dCB0byBoaXQgdGhlIHdpcmUuICovCisjZGVmaW5lIE5GX0JSX1BPU1RfUk9VVElORwk0CisvKiBOb3QgcmVhbGx5IGEgaG9vaywgYnV0IHVzZWQgZm9yIHRoZSBlYnRhYmxlcyBicm91dGUgdGFibGUgKi8KKyNkZWZpbmUgTkZfQlJfQlJPVVRJTkcJCTUKKyNkZWZpbmUgTkZfQlJfTlVNSE9PS1MJCTYKKworI2lmZGVmIF9fS0VSTkVMX18KKworZW51bSBuZl9icl9ob29rX3ByaW9yaXRpZXMgeworCU5GX0JSX1BSSV9GSVJTVCA9IElOVF9NSU4sCisJTkZfQlJfUFJJX05BVF9EU1RfQlJJREdFRCA9IC0zMDAsCisJTkZfQlJfUFJJX0ZJTFRFUl9CUklER0VEID0gLTIwMCwKKwlORl9CUl9QUklfQlJORiA9IDAsCisJTkZfQlJfUFJJX05BVF9EU1RfT1RIRVIgPSAxMDAsCisJTkZfQlJfUFJJX0ZJTFRFUl9PVEhFUiA9IDIwMCwKKwlORl9CUl9QUklfTkFUX1NSQyA9IDMwMCwKKwlORl9CUl9QUklfTEFTVCA9IElOVF9NQVgsCit9OworCisjaWZkZWYgQ09ORklHX0JSSURHRV9ORVRGSUxURVIKKworI2RlZmluZSBCUk5GX1BLVF9UWVBFCQkJMHgwMQorI2RlZmluZSBCUk5GX0JSSURHRURfRE5BVAkJMHgwMgorI2RlZmluZSBCUk5GX0RPTlRfVEFLRV9QQVJFTlQJCTB4MDQKKyNkZWZpbmUgQlJORl9CUklER0VECQkJMHgwOAorI2RlZmluZSBCUk5GX05GX0JSSURHRV9QUkVST1VUSU5HCTB4MTAKKworc3RhdGljIGlubGluZQorc3RydWN0IG5mX2JyaWRnZV9pbmZvICpuZl9icmlkZ2VfYWxsb2Moc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgbmZfYnJpZGdlX2luZm8gKipuZl9icmlkZ2UgPSAmKHNrYi0+bmZfYnJpZGdlKTsKKworCWlmICgoKm5mX2JyaWRnZSA9IGttYWxsb2Moc2l6ZW9mKCoqbmZfYnJpZGdlKSwgR0ZQX0FUT01JQykpICE9IE5VTEwpIHsKKwkJYXRvbWljX3NldCgmKCpuZl9icmlkZ2UpLT51c2UsIDEpOworCQkoKm5mX2JyaWRnZSktPm1hc2sgPSAwOworCQkoKm5mX2JyaWRnZSktPnBoeXNpbmRldiA9ICgqbmZfYnJpZGdlKS0+cGh5c291dGRldiA9IE5VTEw7CisjaWYgZGVmaW5lZChDT05GSUdfVkxBTl84MDIxUSkgfHwgZGVmaW5lZChDT05GSUdfVkxBTl84MDIxUV9NT0RVTEUpCisJCSgqbmZfYnJpZGdlKS0+bmV0b3V0ZGV2ID0gTlVMTDsKKyNlbmRpZgorCX0KKworCXJldHVybiAqbmZfYnJpZGdlOworfQorCisvKiBPbmx5IHVzZWQgaW4gYnJfZm9yd2FyZC5jICovCitzdGF0aWMgaW5saW5lCit2b2lkIG5mX2JyaWRnZV9tYXliZV9jb3B5X2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWlmIChza2ItPm5mX2JyaWRnZSkgeworCQlpZiAoc2tiLT5wcm90b2NvbCA9PSBfX2NvbnN0YW50X2h0b25zKEVUSF9QXzgwMjFRKSkgeworCQkJbWVtY3B5KHNrYi0+ZGF0YSAtIDE4LCBza2ItPm5mX2JyaWRnZS0+ZGF0YSwgMTgpOworCQkJc2tiX3B1c2goc2tiLCA0KTsKKwkJfSBlbHNlCisJCQltZW1jcHkoc2tiLT5kYXRhIC0gMTYsIHNrYi0+bmZfYnJpZGdlLT5kYXRhLCAxNik7CisJfQorfQorCitzdGF0aWMgaW5saW5lCit2b2lkIG5mX2JyaWRnZV9zYXZlX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworICAgICAgICBpbnQgaGVhZGVyX3NpemUgPSAxNjsKKworCWlmIChza2ItPnByb3RvY29sID09IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfODAyMVEpKQorCQloZWFkZXJfc2l6ZSA9IDE4OworCisJbWVtY3B5KHNrYi0+bmZfYnJpZGdlLT5kYXRhLCBza2ItPmRhdGEgLSBoZWFkZXJfc2l6ZSwgaGVhZGVyX3NpemUpOworfQorCisvKiBUaGlzIGlzIGNhbGxlZCBieSB0aGUgSVAgZnJhZ21lbnRpbmcgY29kZSBhbmQgaXQgZW5zdXJlcyB0aGVyZSBpcworICogZW5vdWdoIHJvb20gZm9yIHRoZSBlbmNhcHN1bGF0aW5nIGhlYWRlciAoaWYgdGhlcmUgaXMgb25lKS4gKi8KK3N0YXRpYyBpbmxpbmUKK2ludCBuZl9icmlkZ2VfcGFkKHN0cnVjdCBza19idWZmICpza2IpCit7CisJaWYgKHNrYi0+cHJvdG9jb2wgPT0gX19jb25zdGFudF9odG9ucyhFVEhfUF9JUCkpCisJCXJldHVybiAwOworCWlmIChza2ItPm5mX2JyaWRnZSkgeworCQlpZiAoc2tiLT5wcm90b2NvbCA9PSBfX2NvbnN0YW50X2h0b25zKEVUSF9QXzgwMjFRKSkKKwkJCXJldHVybiA0OworCX0KKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGJyaWRnZV9za2JfY2IgeworCXVuaW9uIHsKKwkJX191MzIgaXB2NDsKKwl9IGRhZGRyOworfTsKKyNlbmRpZiAvKiBDT05GSUdfQlJJREdFX05FVEZJTFRFUiAqLworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0XzgwMl8zLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0XzgwMl8zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjlmNzEyYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS9lYnRfODAyXzMuaApAQCAtMCwwICsxLDY5IEBACisjaWZuZGVmIF9fTElOVVhfQlJJREdFX0VCVF84MDJfM19ICisjZGVmaW5lIF9fTElOVVhfQlJJREdFX0VCVF84MDJfM19ICisKKyNkZWZpbmUgRUJUXzgwMl8zX1NBUCAweDAxCisjZGVmaW5lIEVCVF84MDJfM19UWVBFIDB4MDIKKworI2RlZmluZSBFQlRfODAyXzNfTUFUQ0ggIjgwMl8zIgorCisvKgorICogSWYgZnJhbWUgaGFzIERTQVAvU1NBUCB2YWx1ZSAweGFhIHlvdSBtdXN0IGNoZWNrIHRoZSBTTkFQIHR5cGUKKyAqIHRvIGRpc2NvdmVyIHdoYXQga2luZCBvZiBwYWNrZXQgd2UncmUgY2FycnlpbmcuIAorICovCisjZGVmaW5lIENIRUNLX1RZUEUgMHhhYQorCisvKgorICogQ29udHJvbCBmaWVsZCBtYXkgYmUgb25lIG9yIHR3byBieXRlcy4gIElmIHRoZSBmaXJzdCBieXRlIGhhcworICogdGhlIHZhbHVlIDB4MDMgdGhlbiB0aGUgZW50aXJlIGxlbmd0aCBpcyBvbmUgYnl0ZSwgb3RoZXJ3aXNlIGl0IGlzIHR3by4KKyAqIE9uZSBieXRlIGNvbnRyb2xzIGFyZSB1c2VkIGluIFVubnVtYmVyZWQgSW5mb3JtYXRpb24gZnJhbWVzLgorICogVHdvIGJ5dGUgY29udHJvbHMgYXJlIHVzZWQgaW4gTnVtYmVyZWQgSW5mb3JtYXRpb24gZnJhbWVzLgorICovCisjZGVmaW5lIElTX1VJIDB4MDMKKworI2RlZmluZSBFQlRfODAyXzNfTUFTSyAoRUJUXzgwMl8zX1NBUCB8IEVCVF84MDJfM19UWVBFIHwgRUJUXzgwMl8zKQorCisvKiB1aSBoYXMgb25lIGJ5dGUgY3RybCwgbmkgaGFzIHR3byAqLworc3RydWN0IGhkcl91aSB7CisJdWludDhfdCBkc2FwOworCXVpbnQ4X3Qgc3NhcDsKKwl1aW50OF90IGN0cmw7CisJdWludDhfdCBvcmlnWzNdOworCXVpbnQxNl90IHR5cGU7Cit9OworCitzdHJ1Y3QgaGRyX25pIHsKKwl1aW50OF90IGRzYXA7CisJdWludDhfdCBzc2FwOworCXVpbnQxNl90IGN0cmw7CisJdWludDhfdCAgb3JpZ1szXTsKKwl1aW50MTZfdCB0eXBlOworfTsKKworc3RydWN0IGVidF84MDJfM19oZHIgeworCXVpbnQ4X3QgIGRhZGRyWzZdOworCXVpbnQ4X3QgIHNhZGRyWzZdOworCXVpbnQxNl90IGxlbjsKKwl1bmlvbiB7CisJCXN0cnVjdCBoZHJfdWkgdWk7CisJCXN0cnVjdCBoZHJfbmkgbmk7CisJfSBsbGM7Cit9OworCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBlYnRfODAyXzNfaGRyICplYnRfODAyXzNfaGRyKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCit7CisJcmV0dXJuIChzdHJ1Y3QgZWJ0XzgwMl8zX2hkciAqKXNrYi0+bWFjLnJhdzsKK30KKyNlbmRpZgorCitzdHJ1Y3QgZWJ0XzgwMl8zX2luZm8gCit7CisJdWludDhfdCAgc2FwOworCXVpbnQxNl90IHR5cGU7CisJdWludDhfdCAgYml0bWFzazsKKwl1aW50OF90ICBpbnZmbGFnczsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlL2VidF9hbW9uZy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlL2VidF9hbW9uZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwN2MxZmUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0X2Ftb25nLmgKQEAgLTAsMCArMSw2NSBAQAorI2lmbmRlZiBfX0xJTlVYX0JSSURHRV9FQlRfQU1PTkdfSAorI2RlZmluZSBfX0xJTlVYX0JSSURHRV9FQlRfQU1PTkdfSAorCisjZGVmaW5lIEVCVF9BTU9OR19EU1QgMHgwMQorI2RlZmluZSBFQlRfQU1PTkdfU1JDIDB4MDIKKworLyogR3J6ZWdvcnogQm9yb3dpYWsgPGdyemVzQGdudS51bml2LmdkYS5wbD4gMjAwMworICogCisgKiBXcml0ZS1vbmNlLXJlYWQtbWFueSBoYXNoIHRhYmxlLCB1c2VkIGZvciBjaGVja2luZyBpZiBhIGdpdmVuCisgKiBNQUMgYWRkcmVzcyBiZWxvbmdzIHRvIGEgc2V0IG9yIG5vdCBhbmQgcG9zc2libHkgZm9yIGNoZWNraW5nCisgKiBpZiBpdCBpcyByZWxhdGVkIHdpdGggYSBnaXZlbiBJUHY0IGFkZHJlc3MuCisgKgorICogVGhlIGhhc2ggdmFsdWUgb2YgYW4gYWRkcmVzcyBpcyBpdHMgbGFzdCBieXRlLgorICogCisgKiBJbiByZWFsLXdvcmxkIGV0aGVybmV0IGFkZHJlc3NlcywgdmFsdWVzIG9mIHRoZSBsYXN0IGJ5dGUgYXJlCisgKiBldmVubHkgZGlzdHJpYnV0ZWQgYW5kIHRoZXJlIGlzIG5vIG5lZWQgdG8gY29uc2lkZXIgb3RoZXIgYnl0ZXMuCisgKiBJdCB3b3VsZCBvbmx5IHNsb3cgdGhlIHJvdXRpbmVzIGRvd24uCisgKgorICogRm9yIE1BQyBhZGRyZXNzIGNvbXBhcmlzb24gc3BlZWR1cCByZWFzb25zLCB3ZSBpbnRyb2R1Y2UgYSB0cmljay4KKyAqIE1BQyBhZGRyZXNzIGlzIG1hcHBlZCBvbnRvIGFuIGFycmF5IG9mIHR3byAzMi1iaXQgaW50ZWdlcnMuCisgKiBUaGlzIHBhaXIgb2YgaW50ZWdlcnMgaXMgY29tcGFyZWQgd2l0aCBNQUMgYWRkcmVzc2VzIGluIHRoZQorICogaGFzaCB0YWJsZSwgd2hpY2ggYXJlIHN0b3JlZCBhbHNvIGluIGZvcm0gb2YgcGFpcnMgb2YgaW50ZWdlcnMKKyAqIChpbiBgY21wJyBhcnJheSkuIFRoaXMgaXMgcXVpY2sgYXMgaXQgcmVxdWlyZXMgb25seSB0d28gZWxlbWVudGFyeQorICogbnVtYmVyIGNvbXBhcmlzb25zIGluIHdvcnN0IGNhc2UuIEZ1cnRoZXIsIHdlIHRha2UgYWR2YW50YWdlIG9mCisgKiBmYWN0IHRoYXQgZW50cm9weSBvZiAzIGxhc3QgYnl0ZXMgb2YgYWRkcmVzcyBpcyBsYXJnZXIgdGhhbiBlbnRyb3B5CisgKiBvZiAzIGZpcnN0IGJ5dGVzLiBTbyBmaXJzdCB3ZSBjb21wYXJlIDQgbGFzdCBieXRlcyBvZiBhZGRyZXNzZXMgYW5kCisgKiBpZiB0aGV5IGFyZSB0aGUgc2FtZSB3ZSBjb21wYXJlIDIgZmlyc3QuCisgKgorICogWWVzLCBpdCBpcyBhIG1lbW9yeSBvdmVyaGVhZCwgYnV0IGluIDIwMDMgQUQsIHdobyBjYXJlcz8KKyAqLworCitzdHJ1Y3QgZWJ0X21hY193b3JtaGFzaF90dXBsZQoreworCXVpbnQzMl90IGNtcFsyXTsKKwl1aW50MzJfdCBpcDsKK307CisKK3N0cnVjdCBlYnRfbWFjX3dvcm1oYXNoCit7CisJaW50IHRhYmxlWzI1N107CisJaW50IHBvb2xzaXplOworCXN0cnVjdCBlYnRfbWFjX3dvcm1oYXNoX3R1cGxlIHBvb2xbMF07Cit9OworCisjZGVmaW5lIGVidF9tYWNfd29ybWhhc2hfc2l6ZSh4KSAoKHgpID8gc2l6ZW9mKHN0cnVjdCBlYnRfbWFjX3dvcm1oYXNoKSBcCisJCSsgKHgpLT5wb29sc2l6ZSAqIHNpemVvZihzdHJ1Y3QgZWJ0X21hY193b3JtaGFzaF90dXBsZSkgOiAwKQorCitzdHJ1Y3QgZWJ0X2Ftb25nX2luZm8KK3sKKwlpbnQgd2hfZHN0X29mczsKKwlpbnQgd2hfc3JjX29mczsKKwlpbnQgYml0bWFzazsKK307CisKKyNkZWZpbmUgRUJUX0FNT05HX0RTVF9ORUcgMHgxCisjZGVmaW5lIEVCVF9BTU9OR19TUkNfTkVHIDB4MgorCisjZGVmaW5lIGVidF9hbW9uZ193aF9kc3QoeCkgKCh4KS0+d2hfZHN0X29mcyA/IFwKKwkoc3RydWN0IGVidF9tYWNfd29ybWhhc2gqKSgoY2hhciopKHgpICsgKHgpLT53aF9kc3Rfb2ZzKSA6IE5VTEwpCisjZGVmaW5lIGVidF9hbW9uZ193aF9zcmMoeCkgKCh4KS0+d2hfc3JjX29mcyA/IFwKKwkoc3RydWN0IGVidF9tYWNfd29ybWhhc2gqKSgoY2hhciopKHgpICsgKHgpLT53aF9zcmNfb2ZzKSA6IE5VTEwpCisKKyNkZWZpbmUgRUJUX0FNT05HX01BVENIICJhbW9uZyIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0X2FycC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlL2VidF9hcnAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzdlYzZiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlL2VidF9hcnAuaApAQCAtMCwwICsxLDMyIEBACisjaWZuZGVmIF9fTElOVVhfQlJJREdFX0VCVF9BUlBfSAorI2RlZmluZSBfX0xJTlVYX0JSSURHRV9FQlRfQVJQX0gKKworI2RlZmluZSBFQlRfQVJQX09QQ09ERSAweDAxCisjZGVmaW5lIEVCVF9BUlBfSFRZUEUgMHgwMgorI2RlZmluZSBFQlRfQVJQX1BUWVBFIDB4MDQKKyNkZWZpbmUgRUJUX0FSUF9TUkNfSVAgMHgwOAorI2RlZmluZSBFQlRfQVJQX0RTVF9JUCAweDEwCisjZGVmaW5lIEVCVF9BUlBfU1JDX01BQyAweDIwCisjZGVmaW5lIEVCVF9BUlBfRFNUX01BQyAweDQwCisjZGVmaW5lIEVCVF9BUlBfTUFTSyAoRUJUX0FSUF9PUENPREUgfCBFQlRfQVJQX0hUWVBFIHwgRUJUX0FSUF9QVFlQRSB8IFwKKyAgIEVCVF9BUlBfU1JDX0lQIHwgRUJUX0FSUF9EU1RfSVAgfCBFQlRfQVJQX1NSQ19NQUMgfCBFQlRfQVJQX0RTVF9NQUMpCisjZGVmaW5lIEVCVF9BUlBfTUFUQ0ggImFycCIKKworc3RydWN0IGVidF9hcnBfaW5mbworeworCXVpbnQxNl90IGh0eXBlOworCXVpbnQxNl90IHB0eXBlOworCXVpbnQxNl90IG9wY29kZTsKKwl1aW50MzJfdCBzYWRkcjsKKwl1aW50MzJfdCBzbXNrOworCXVpbnQzMl90IGRhZGRyOworCXVpbnQzMl90IGRtc2s7CisJdW5zaWduZWQgY2hhciBzbWFkZHJbRVRIX0FMRU5dOworCXVuc2lnbmVkIGNoYXIgc21tc2tbRVRIX0FMRU5dOworCXVuc2lnbmVkIGNoYXIgZG1hZGRyW0VUSF9BTEVOXTsKKwl1bnNpZ25lZCBjaGFyIGRtbXNrW0VUSF9BTEVOXTsKKwl1aW50OF90ICBiaXRtYXNrOworCXVpbnQ4X3QgIGludmZsYWdzOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0X2FycHJlcGx5LmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0X2FycHJlcGx5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZhODMzOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS9lYnRfYXJwcmVwbHkuaApAQCAtMCwwICsxLDExIEBACisjaWZuZGVmIF9fTElOVVhfQlJJREdFX0VCVF9BUlBSRVBMWV9ICisjZGVmaW5lIF9fTElOVVhfQlJJREdFX0VCVF9BUlBSRVBMWV9ICisKK3N0cnVjdCBlYnRfYXJwcmVwbHlfaW5mbworeworCXVuc2lnbmVkIGNoYXIgbWFjW0VUSF9BTEVOXTsKKwlpbnQgdGFyZ2V0OworfTsKKyNkZWZpbmUgRUJUX0FSUFJFUExZX1RBUkdFVCAiYXJwcmVwbHkiCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlL2VidF9pcC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlL2VidF9pcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyNDczODUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0X2lwLmgKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqICBlYnRfaXAKKyAqCisgKglBdXRob3JzOgorICoJQmFydCBEZSBTY2h1eW1lciA8YmFydC5kZS5zY2h1eW1lckBwYW5kb3JhLmJlPgorICoKKyAqICBBcHJpbCwgMjAwMgorICoKKyAqICBDaGFuZ2VzOgorICogICAgYWRkZWQgaXAtc3BvcnQgYW5kIGlwLWRwb3J0CisgKiAgICBJbm5vbWluYXRlIFNlY3VyaXR5IFRlY2hub2xvZ2llcyBBRyA8bWhvcGZAaW5ub21pbmF0ZS5jb20+CisgKiAgICBTZXB0ZW1iZXIsIDIwMDIKKyAqLworCisjaWZuZGVmIF9fTElOVVhfQlJJREdFX0VCVF9JUF9ICisjZGVmaW5lIF9fTElOVVhfQlJJREdFX0VCVF9JUF9ICisKKyNkZWZpbmUgRUJUX0lQX1NPVVJDRSAweDAxCisjZGVmaW5lIEVCVF9JUF9ERVNUIDB4MDIKKyNkZWZpbmUgRUJUX0lQX1RPUyAweDA0CisjZGVmaW5lIEVCVF9JUF9QUk9UTyAweDA4CisjZGVmaW5lIEVCVF9JUF9TUE9SVCAweDEwCisjZGVmaW5lIEVCVF9JUF9EUE9SVCAweDIwCisjZGVmaW5lIEVCVF9JUF9NQVNLIChFQlRfSVBfU09VUkNFIHwgRUJUX0lQX0RFU1QgfCBFQlRfSVBfVE9TIHwgRUJUX0lQX1BST1RPIHxcCisgRUJUX0lQX1NQT1JUIHwgRUJUX0lQX0RQT1JUICkKKyNkZWZpbmUgRUJUX0lQX01BVENIICJpcCIKKworLyogdGhlIHNhbWUgdmFsdWVzIGFyZSB1c2VkIGZvciB0aGUgaW52ZmxhZ3MgKi8KK3N0cnVjdCBlYnRfaXBfaW5mbworeworCXVpbnQzMl90IHNhZGRyOworCXVpbnQzMl90IGRhZGRyOworCXVpbnQzMl90IHNtc2s7CisJdWludDMyX3QgZG1zazsKKwl1aW50OF90ICB0b3M7CisJdWludDhfdCAgcHJvdG9jb2w7CisJdWludDhfdCAgYml0bWFzazsKKwl1aW50OF90ICBpbnZmbGFnczsKKwl1aW50MTZfdCBzcG9ydFsyXTsKKwl1aW50MTZfdCBkcG9ydFsyXTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlL2VidF9saW1pdC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlL2VidF9saW1pdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4YjY1MDAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0X2xpbWl0LmgKQEAgLTAsMCArMSwyMyBAQAorI2lmbmRlZiBfX0xJTlVYX0JSSURHRV9FQlRfTElNSVRfSAorI2RlZmluZSBfX0xJTlVYX0JSSURHRV9FQlRfTElNSVRfSAorCisjZGVmaW5lIEVCVF9MSU1JVF9NQVRDSCAibGltaXQiCisKKy8qIHRpbWluZ3MgYXJlIGluIG1pbGxpc2Vjb25kcy4gKi8KKyNkZWZpbmUgRUJUX0xJTUlUX1NDQUxFIDEwMDAwCisKKy8qIDEvMTAsMDAwIHNlYyBwZXJpb2QgPT4gbWF4IG9mIDEwLDAwMC9zZWMuICBNaW4gcmF0ZSBpcyB0aGVuIDQyOTQ5MAorICAgc2Vjb25kcywgb3Igb25lIGV2ZXJ5IDU5IGhvdXJzLiAqLworCitzdHJ1Y3QgZWJ0X2xpbWl0X2luZm8KK3sKKwl1X2ludDMyX3QgYXZnOyAgICAvKiBBdmVyYWdlIHNlY3MgYmV0d2VlbiBwYWNrZXRzICogc2NhbGUgKi8KKwl1X2ludDMyX3QgYnVyc3Q7ICAvKiBQZXJpb2QgbXVsdGlwbGllciBmb3IgdXBwZXIgbGltaXQuICovCisKKwkvKiBVc2VkIGludGVybmFsbHkgYnkgdGhlIGtlcm5lbCAqLworCXVuc2lnbmVkIGxvbmcgcHJldjsKKwl1X2ludDMyX3QgY3JlZGl0OworCXVfaW50MzJfdCBjcmVkaXRfY2FwLCBjb3N0OworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0X2xvZy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlL2VidF9sb2cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNThmYmM4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlL2VidF9sb2cuaApAQCAtMCwwICsxLDE3IEBACisjaWZuZGVmIF9fTElOVVhfQlJJREdFX0VCVF9MT0dfSAorI2RlZmluZSBfX0xJTlVYX0JSSURHRV9FQlRfTE9HX0gKKworI2RlZmluZSBFQlRfTE9HX0lQIDB4MDEgLyogaWYgdGhlIGZyYW1lIGlzIG1hZGUgYnkgaXAsIGxvZyB0aGUgaXAgaW5mb3JtYXRpb24gKi8KKyNkZWZpbmUgRUJUX0xPR19BUlAgMHgwMgorI2RlZmluZSBFQlRfTE9HX01BU0sgKEVCVF9MT0dfSVAgfCBFQlRfTE9HX0FSUCkKKyNkZWZpbmUgRUJUX0xPR19QUkVGSVhfU0laRSAzMAorI2RlZmluZSBFQlRfTE9HX1dBVENIRVIgImxvZyIKKworc3RydWN0IGVidF9sb2dfaW5mbworeworCXVpbnQ4X3QgbG9nbGV2ZWw7CisJdWludDhfdCBwcmVmaXhbRUJUX0xPR19QUkVGSVhfU0laRV07CisJdWludDMyX3QgYml0bWFzazsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlL2VidF9tYXJrX20uaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS9lYnRfbWFya19tLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzAxNTI0ZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS9lYnRfbWFya19tLmgKQEAgLTAsMCArMSwxNSBAQAorI2lmbmRlZiBfX0xJTlVYX0JSSURHRV9FQlRfTUFSS19NX0gKKyNkZWZpbmUgX19MSU5VWF9CUklER0VfRUJUX01BUktfTV9ICisKKyNkZWZpbmUgRUJUX01BUktfQU5EIDB4MDEKKyNkZWZpbmUgRUJUX01BUktfT1IgMHgwMgorI2RlZmluZSBFQlRfTUFSS19NQVNLIChFQlRfTUFSS19BTkQgfCBFQlRfTUFSS19PUikKK3N0cnVjdCBlYnRfbWFya19tX2luZm8KK3sKKwl1bnNpZ25lZCBsb25nIG1hcmssIG1hc2s7CisJdWludDhfdCBpbnZlcnQ7CisJdWludDhfdCBiaXRtYXNrOworfTsKKyNkZWZpbmUgRUJUX01BUktfTUFUQ0ggIm1hcmtfbSIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0X21hcmtfdC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlL2VidF9tYXJrX3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTBmZWM2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlL2VidF9tYXJrX3QuaApAQCAtMCwwICsxLDEyIEBACisjaWZuZGVmIF9fTElOVVhfQlJJREdFX0VCVF9NQVJLX1RfSAorI2RlZmluZSBfX0xJTlVYX0JSSURHRV9FQlRfTUFSS19UX0gKKworc3RydWN0IGVidF9tYXJrX3RfaW5mbworeworCXVuc2lnbmVkIGxvbmcgbWFyazsKKwkvKiBFQlRfQUNDRVBULCBFQlRfRFJPUCwgRUJUX0NPTlRJTlVFIG9yIEVCVF9SRVRVUk4gKi8KKwlpbnQgdGFyZ2V0OworfTsKKyNkZWZpbmUgRUJUX01BUktfVEFSR0VUICJtYXJrIgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS9lYnRfbmF0LmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0X25hdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2ZmQ5MGQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0X25hdC5oCkBAIC0wLDAgKzEsMTMgQEAKKyNpZm5kZWYgX19MSU5VWF9CUklER0VfRUJUX05BVF9ICisjZGVmaW5lIF9fTElOVVhfQlJJREdFX0VCVF9OQVRfSAorCitzdHJ1Y3QgZWJ0X25hdF9pbmZvCit7CisJdW5zaWduZWQgY2hhciBtYWNbRVRIX0FMRU5dOworCS8qIEVCVF9BQ0NFUFQsIEVCVF9EUk9QLCBFQlRfQ09OVElOVUUgb3IgRUJUX1JFVFVSTiAqLworCWludCB0YXJnZXQ7Cit9OworI2RlZmluZSBFQlRfU05BVF9UQVJHRVQgInNuYXQiCisjZGVmaW5lIEVCVF9ETkFUX1RBUkdFVCAiZG5hdCIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0X3BrdHR5cGUuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS9lYnRfcGt0dHlwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkNjRiYmIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0X3BrdHR5cGUuaApAQCAtMCwwICsxLDExIEBACisjaWZuZGVmIF9fTElOVVhfQlJJREdFX0VCVF9QS1RUWVBFX0gKKyNkZWZpbmUgX19MSU5VWF9CUklER0VfRUJUX1BLVFRZUEVfSAorCitzdHJ1Y3QgZWJ0X3BrdHR5cGVfaW5mbworeworCXVpbnQ4X3QgcGt0X3R5cGU7CisJdWludDhfdCBpbnZlcnQ7Cit9OworI2RlZmluZSBFQlRfUEtUVFlQRV9NQVRDSCAicGt0dHlwZSIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0X3JlZGlyZWN0LmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0X3JlZGlyZWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM2Nzk5MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS9lYnRfcmVkaXJlY3QuaApAQCAtMCwwICsxLDExIEBACisjaWZuZGVmIF9fTElOVVhfQlJJREdFX0VCVF9SRURJUkVDVF9ICisjZGVmaW5lIF9fTElOVVhfQlJJREdFX0VCVF9SRURJUkVDVF9ICisKK3N0cnVjdCBlYnRfcmVkaXJlY3RfaW5mbworeworCS8qIEVCVF9BQ0NFUFQsIEVCVF9EUk9QLCBFQlRfQ09OVElOVUUgb3IgRUJUX1JFVFVSTiAqLworCWludCB0YXJnZXQ7Cit9OworI2RlZmluZSBFQlRfUkVESVJFQ1RfVEFSR0VUICJyZWRpcmVjdCIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0X3N0cC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlL2VidF9zdHAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWZkNjc4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlL2VidF9zdHAuaApAQCAtMCwwICsxLDQ2IEBACisjaWZuZGVmIF9fTElOVVhfQlJJREdFX0VCVF9TVFBfSAorI2RlZmluZSBfX0xJTlVYX0JSSURHRV9FQlRfU1RQX0gKKworI2RlZmluZSBFQlRfU1RQX1RZUEUJCTB4MDAwMQorCisjZGVmaW5lIEVCVF9TVFBfRkxBR1MJCTB4MDAwMgorI2RlZmluZSBFQlRfU1RQX1JPT1RQUklPCTB4MDAwNAorI2RlZmluZSBFQlRfU1RQX1JPT1RBRERSCTB4MDAwOAorI2RlZmluZSBFQlRfU1RQX1JPT1RDT1NUCTB4MDAxMAorI2RlZmluZSBFQlRfU1RQX1NFTkRFUlBSSU8JMHgwMDIwCisjZGVmaW5lIEVCVF9TVFBfU0VOREVSQUREUgkweDAwNDAKKyNkZWZpbmUgRUJUX1NUUF9QT1JUCQkweDAwODAKKyNkZWZpbmUgRUJUX1NUUF9NU0dBR0UJCTB4MDEwMAorI2RlZmluZSBFQlRfU1RQX01BWEFHRQkJMHgwMjAwCisjZGVmaW5lIEVCVF9TVFBfSEVMTE9USU1FCTB4MDQwMAorI2RlZmluZSBFQlRfU1RQX0ZXREQJCTB4MDgwMAorCisjZGVmaW5lIEVCVF9TVFBfTUFTSwkJMHgwZmZmCisjZGVmaW5lIEVCVF9TVFBfQ09ORklHX01BU0sJMHgwZmZlCisKKyNkZWZpbmUgRUJUX1NUUF9NQVRDSCAic3RwIgorCitzdHJ1Y3QgZWJ0X3N0cF9jb25maWdfaW5mbworeworCXVpbnQ4X3QgZmxhZ3M7CisJdWludDE2X3Qgcm9vdF9wcmlvbCwgcm9vdF9wcmlvdTsKKwljaGFyIHJvb3RfYWRkcls2XSwgcm9vdF9hZGRybXNrWzZdOworCXVpbnQzMl90IHJvb3RfY29zdGwsIHJvb3RfY29zdHU7CisJdWludDE2X3Qgc2VuZGVyX3ByaW9sLCBzZW5kZXJfcHJpb3U7CisJY2hhciBzZW5kZXJfYWRkcls2XSwgc2VuZGVyX2FkZHJtc2tbNl07CisJdWludDE2X3QgcG9ydGwsIHBvcnR1OworCXVpbnQxNl90IG1zZ19hZ2VsLCBtc2dfYWdldTsKKwl1aW50MTZfdCBtYXhfYWdlbCwgbWF4X2FnZXU7CisJdWludDE2X3QgaGVsbG9fdGltZWwsIGhlbGxvX3RpbWV1OworCXVpbnQxNl90IGZvcndhcmRfZGVsYXlsLCBmb3J3YXJkX2RlbGF5dTsKK307CisKK3N0cnVjdCBlYnRfc3RwX2luZm8KK3sKKwl1aW50OF90IHR5cGU7CisJc3RydWN0IGVidF9zdHBfY29uZmlnX2luZm8gY29uZmlnOworCXVpbnQxNl90IGJpdG1hc2s7CisJdWludDE2X3QgaW52ZmxhZ3M7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS9lYnRfdWxvZy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlL2VidF91bG9nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY3N2UyNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS9lYnRfdWxvZy5oCkBAIC0wLDAgKzEsMzYgQEAKKyNpZm5kZWYgX0VCVF9VTE9HX0gKKyNkZWZpbmUgX0VCVF9VTE9HX0gKKworI2RlZmluZSBFQlRfVUxPR19ERUZBVUxUX05MR1JPVVAgMAorI2RlZmluZSBFQlRfVUxPR19ERUZBVUxUX1FUSFJFU0hPTEQgMQorI2RlZmluZSBFQlRfVUxPR19NQVhOTEdST1VQUyAzMiAvKiBoYXJkY29kZWQgbmV0bGluayBtYXggKi8KKyNkZWZpbmUgRUJUX1VMT0dfUFJFRklYX0xFTiAzMgorI2RlZmluZSBFQlRfVUxPR19NQVhfUUxFTiA1MAorI2RlZmluZSBFQlRfVUxPR19XQVRDSEVSICJ1bG9nIgorI2RlZmluZSBFQlRfVUxPR19WRVJTSU9OIDEKKworc3RydWN0IGVidF91bG9nX2luZm8geworCXVpbnQzMl90IG5sZ3JvdXA7CisJdW5zaWduZWQgaW50IGNwcmFuZ2U7CisJdW5zaWduZWQgaW50IHF0aHJlc2hvbGQ7CisJY2hhciBwcmVmaXhbRUJUX1VMT0dfUFJFRklYX0xFTl07Cit9OworCit0eXBlZGVmIHN0cnVjdCBlYnRfdWxvZ19wYWNrZXRfbXNnIHsKKwlpbnQgdmVyc2lvbjsKKwljaGFyIGluZGV2W0lGTkFNU0laXTsKKwljaGFyIG91dGRldltJRk5BTVNJWl07CisJY2hhciBwaHlzaW5kZXZbSUZOQU1TSVpdOworCWNoYXIgcGh5c291dGRldltJRk5BTVNJWl07CisJY2hhciBwcmVmaXhbRUJUX1VMT0dfUFJFRklYX0xFTl07CisJc3RydWN0IHRpbWV2YWwgc3RhbXA7CisJdW5zaWduZWQgbG9uZyBtYXJrOworCXVuc2lnbmVkIGludCBob29rOworCXNpemVfdCBkYXRhX2xlbjsKKwkvKiBUaGUgY29tcGxldGUgcGFja2V0LCBpbmNsdWRpbmcgRXRoZXJuZXQgaGVhZGVyIGFuZCBwZXJoYXBzCisJICogdGhlIFZMQU4gaGVhZGVyIGlzIGFwcGVuZGVkICovCisJdW5zaWduZWQgY2hhciBkYXRhWzBdIF9fYXR0cmlidXRlX18KKwkgICAgICAgICAgICAgICAgICAgICAgKChhbGlnbmVkIChfX2FsaWdub2ZfXyhzdHJ1Y3QgZWJ0X3Vsb2dfaW5mbykpKSk7Cit9IGVidF91bG9nX3BhY2tldF9tc2dfdDsKKworI2VuZGlmIC8qIF9FQlRfVUxPR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0X3ZsYW4uaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS9lYnRfdmxhbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiMWZjYzQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0X3ZsYW4uaApAQCAtMCwwICsxLDIwIEBACisjaWZuZGVmIF9fTElOVVhfQlJJREdFX0VCVF9WTEFOX0gKKyNkZWZpbmUgX19MSU5VWF9CUklER0VfRUJUX1ZMQU5fSAorCisjZGVmaW5lIEVCVF9WTEFOX0lECTB4MDEKKyNkZWZpbmUgRUJUX1ZMQU5fUFJJTwkweDAyCisjZGVmaW5lIEVCVF9WTEFOX0VOQ0FQCTB4MDQKKyNkZWZpbmUgRUJUX1ZMQU5fTUFTSyAoRUJUX1ZMQU5fSUQgfCBFQlRfVkxBTl9QUklPIHwgRUJUX1ZMQU5fRU5DQVApCisjZGVmaW5lIEVCVF9WTEFOX01BVENIICJ2bGFuIgorCitzdHJ1Y3QgZWJ0X3ZsYW5faW5mbyB7CisJdWludDE2X3QgaWQ7CQkvKiBWTEFOIElEIHsxLTQwOTV9ICovCisJdWludDhfdCBwcmlvOwkJLyogVkxBTiBVc2VyIFByaW9yaXR5IHswLTd9ICovCisJdWludDE2X3QgZW5jYXA7CQkvKiBWTEFOIEVuY2Fwc3VsYXRlZCBmcmFtZSBjb2RlIHswLTY1NTM1fSAqLworCXVpbnQ4X3QgYml0bWFzazsJCS8qIEFyZ3MgYml0bWFzayBiaXQgMT0xIC0gSUQgYXJnLAorCQkJCSAgIGJpdCAyPTEgVXNlci1Qcmlvcml0eSBhcmcsIGJpdCAzPTEgZW5jYXAqLworCXVpbnQ4X3QgaW52ZmxhZ3M7CQkvKiBJbnZlcnNlIGJpdG1hc2sgIGJpdCAxPTEgLSBpbnZlcnNlZCBJRCBhcmcsIAorCQkJCSAgIGJpdCAyPTEgLSBpbnZlcnNlZCBQaXJvcml0eSBhcmcgKi8KK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlL2VidGFibGVzLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0YWJsZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWE3Y2M5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlL2VidGFibGVzLmgKQEAgLTAsMCArMSwzNjMgQEAKKy8qCisgKiAgZWJ0YWJsZXMKKyAqCisgKglBdXRob3JzOgorICoJQmFydCBEZSBTY2h1eW1lcgkJPGJkc2NodXltQHBhbmRvcmEuYmU+CisgKgorICogIGVidGFibGVzLmMsdiAyLjAsIEFwcmlsLCAyMDAyCisgKgorICogIFRoaXMgY29kZSBpcyBzdG9uZ2x5IGluc3BpcmVkIG9uIHRoZSBpcHRhYmxlcyBjb2RlIHdoaWNoIGlzCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5IFBhdWwgYFJ1c3R5JyBSdXNzZWxsICYgTWljaGFlbCBKLiBOZXVsaW5nCisgKi8KKworI2lmbmRlZiBfX0xJTlVYX0JSSURHRV9FRkZfSAorI2RlZmluZSBfX0xJTlVYX0JSSURHRV9FRkZfSAorI2luY2x1ZGUgPGxpbnV4L2lmLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CisKKyNkZWZpbmUgRUJUX1RBQkxFX01BWE5BTUVMRU4gMzIKKyNkZWZpbmUgRUJUX0NIQUlOX01BWE5BTUVMRU4gRUJUX1RBQkxFX01BWE5BTUVMRU4KKyNkZWZpbmUgRUJUX0ZVTkNUSU9OX01BWE5BTUVMRU4gRUJUX1RBQkxFX01BWE5BTUVMRU4KKworLyogdmVyZGljdHMgPjAgYXJlICJicmFuY2hlcyIgKi8KKyNkZWZpbmUgRUJUX0FDQ0VQVCAgIC0xCisjZGVmaW5lIEVCVF9EUk9QICAgICAtMgorI2RlZmluZSBFQlRfQ09OVElOVUUgLTMKKyNkZWZpbmUgRUJUX1JFVFVSTiAgIC00CisjZGVmaW5lIE5VTV9TVEFOREFSRF9UQVJHRVRTICAgNAorCitzdHJ1Y3QgZWJ0X2NvdW50ZXIKK3sKKwl1aW50NjRfdCBwY250OworCXVpbnQ2NF90IGJjbnQ7Cit9OworCitzdHJ1Y3QgZWJ0X3JlcGxhY2UKK3sKKwljaGFyIG5hbWVbRUJUX1RBQkxFX01BWE5BTUVMRU5dOworCXVuc2lnbmVkIGludCB2YWxpZF9ob29rczsKKwkvKiBuciBvZiBydWxlcyBpbiB0aGUgdGFibGUgKi8KKwl1bnNpZ25lZCBpbnQgbmVudHJpZXM7CisJLyogdG90YWwgc2l6ZSBvZiB0aGUgZW50cmllcyAqLworCXVuc2lnbmVkIGludCBlbnRyaWVzX3NpemU7CisJLyogc3RhcnQgb2YgdGhlIGNoYWlucyAqLworCXN0cnVjdCBlYnRfZW50cmllcyAqaG9va19lbnRyeVtORl9CUl9OVU1IT09LU107CisJLyogbnIgb2YgY291bnRlcnMgdXNlcnNwYWNlIGV4cGVjdHMgYmFjayAqLworCXVuc2lnbmVkIGludCBudW1fY291bnRlcnM7CisJLyogd2hlcmUgdGhlIGtlcm5lbCB3aWxsIHB1dCB0aGUgb2xkIGNvdW50ZXJzICovCisJc3RydWN0IGVidF9jb3VudGVyICpjb3VudGVyczsKKwljaGFyICplbnRyaWVzOworfTsKKworc3RydWN0IGVidF9lbnRyaWVzIHsKKwkvKiB0aGlzIGZpZWxkIGlzIGFsd2F5cyBzZXQgdG8gemVybworCSAqIFNlZSBFQlRfRU5UUllfT1JfRU5UUklFUy4KKwkgKiBNdXN0IGJlIHNhbWUgc2l6ZSBhcyBlYnRfZW50cnkuYml0bWFzayAqLworCXVuc2lnbmVkIGludCBkaXN0aW5ndWlzaGVyOworCS8qIHRoZSBjaGFpbiBuYW1lICovCisJY2hhciBuYW1lW0VCVF9DSEFJTl9NQVhOQU1FTEVOXTsKKwkvKiBjb3VudGVyIG9mZnNldCBmb3IgdGhpcyBjaGFpbiAqLworCXVuc2lnbmVkIGludCBjb3VudGVyX29mZnNldDsKKwkvKiBvbmUgc3RhbmRhcmQgKGFjY2VwdCwgZHJvcCwgcmV0dXJuKSBwZXIgaG9vayAqLworCWludCBwb2xpY3k7CisJLyogbnIuIG9mIGVudHJpZXMgKi8KKwl1bnNpZ25lZCBpbnQgbmVudHJpZXM7CisJLyogZW50cnkgbGlzdCAqLworCWNoYXIgZGF0YVswXSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoX19hbGlnbm9mX18oc3RydWN0IGVidF9yZXBsYWNlKSkpKTsKK307CisKKy8qIHVzZWQgZm9yIHRoZSBiaXRtYXNrIG9mIHN0cnVjdCBlYnRfZW50cnkgKi8KKworLyogVGhpcyBpcyBhIGhhY2sgdG8gbWFrZSBhIGRpZmZlcmVuY2UgYmV0d2VlbiBhbiBlYnRfZW50cnkgc3RydWN0IGFuZCBhbgorICogZWJ0X2VudHJpZXMgc3RydWN0IHdoZW4gdHJhdmVyc2luZyB0aGUgZW50cmllcyBmcm9tIHN0YXJ0IHRvIGVuZC4KKyAqIFVzaW5nIHRoaXMgc2ltcGxpZmllcyB0aGUgY29kZSBhbG90LCB3aGlsZSBzdGlsbCBiZWluZyBhYmxlIHRvIHVzZQorICogZWJ0X2VudHJpZXMuCisgKiBDb250cmFyeSwgaXB0YWJsZXMgZG9lc24ndCB1c2Ugc29tZXRoaW5nIGxpa2UgZWJ0X2VudHJpZXMgYW5kIHRoZXJlZm9yZSB1c2VzCisgKiBkaWZmZXJlbnQgdGVjaG5pcXVlcyBmb3IgbmFtaW5nIHRoZSBwb2xpY3kgYW5kIHN1Y2guIFNvLCBpcHRhYmxlcyBkb2Vzbid0CisgKiBuZWVkIGEgaGFjayBsaWtlIHRoaXMuCisgKi8KKyNkZWZpbmUgRUJUX0VOVFJZX09SX0VOVFJJRVMgMHgwMQorLyogdGhlc2UgYXJlIHRoZSBub3JtYWwgbWFza3MgKi8KKyNkZWZpbmUgRUJUX05PUFJPVE8gMHgwMgorI2RlZmluZSBFQlRfODAyXzMgMHgwNAorI2RlZmluZSBFQlRfU09VUkNFTUFDIDB4MDgKKyNkZWZpbmUgRUJUX0RFU1RNQUMgMHgxMAorI2RlZmluZSBFQlRfRl9NQVNLIChFQlRfTk9QUk9UTyB8IEVCVF84MDJfMyB8IEVCVF9TT1VSQ0VNQUMgfCBFQlRfREVTVE1BQyBcCisgICB8IEVCVF9FTlRSWV9PUl9FTlRSSUVTKQorCisjZGVmaW5lIEVCVF9JUFJPVE8gMHgwMQorI2RlZmluZSBFQlRfSUlOIDB4MDIKKyNkZWZpbmUgRUJUX0lPVVQgMHgwNAorI2RlZmluZSBFQlRfSVNPVVJDRSAweDgKKyNkZWZpbmUgRUJUX0lERVNUIDB4MTAKKyNkZWZpbmUgRUJUX0lMT0dJQ0FMSU4gMHgyMAorI2RlZmluZSBFQlRfSUxPR0lDQUxPVVQgMHg0MAorI2RlZmluZSBFQlRfSU5WX01BU0sgKEVCVF9JUFJPVE8gfCBFQlRfSUlOIHwgRUJUX0lPVVQgfCBFQlRfSUxPR0lDQUxJTiBcCisgICB8IEVCVF9JTE9HSUNBTE9VVCB8IEVCVF9JU09VUkNFIHwgRUJUX0lERVNUKQorCitzdHJ1Y3QgZWJ0X2VudHJ5X21hdGNoCit7CisJdW5pb24geworCQljaGFyIG5hbWVbRUJUX0ZVTkNUSU9OX01BWE5BTUVMRU5dOworCQlzdHJ1Y3QgZWJ0X21hdGNoICptYXRjaDsKKwl9IHU7CisJLyogc2l6ZSBvZiBkYXRhICovCisJdW5zaWduZWQgaW50IG1hdGNoX3NpemU7CisJdW5zaWduZWQgY2hhciBkYXRhWzBdIF9fYXR0cmlidXRlX18gKChhbGlnbmVkIChfX2FsaWdub2ZfXyhzdHJ1Y3QgZWJ0X3JlcGxhY2UpKSkpOworfTsKKworc3RydWN0IGVidF9lbnRyeV93YXRjaGVyCit7CisJdW5pb24geworCQljaGFyIG5hbWVbRUJUX0ZVTkNUSU9OX01BWE5BTUVMRU5dOworCQlzdHJ1Y3QgZWJ0X3dhdGNoZXIgKndhdGNoZXI7CisJfSB1OworCS8qIHNpemUgb2YgZGF0YSAqLworCXVuc2lnbmVkIGludCB3YXRjaGVyX3NpemU7CisJdW5zaWduZWQgY2hhciBkYXRhWzBdIF9fYXR0cmlidXRlX18gKChhbGlnbmVkIChfX2FsaWdub2ZfXyhzdHJ1Y3QgZWJ0X3JlcGxhY2UpKSkpOworfTsKKworc3RydWN0IGVidF9lbnRyeV90YXJnZXQKK3sKKwl1bmlvbiB7CisJCWNoYXIgbmFtZVtFQlRfRlVOQ1RJT05fTUFYTkFNRUxFTl07CisJCXN0cnVjdCBlYnRfdGFyZ2V0ICp0YXJnZXQ7CisJfSB1OworCS8qIHNpemUgb2YgZGF0YSAqLworCXVuc2lnbmVkIGludCB0YXJnZXRfc2l6ZTsKKwl1bnNpZ25lZCBjaGFyIGRhdGFbMF0gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKF9fYWxpZ25vZl9fKHN0cnVjdCBlYnRfcmVwbGFjZSkpKSk7Cit9OworCisjZGVmaW5lIEVCVF9TVEFOREFSRF9UQVJHRVQgInN0YW5kYXJkIgorc3RydWN0IGVidF9zdGFuZGFyZF90YXJnZXQKK3sKKwlzdHJ1Y3QgZWJ0X2VudHJ5X3RhcmdldCB0YXJnZXQ7CisJaW50IHZlcmRpY3Q7Cit9OworCisvKiBvbmUgZW50cnkgKi8KK3N0cnVjdCBlYnRfZW50cnkgeworCS8qIHRoaXMgbmVlZHMgdG8gYmUgdGhlIGZpcnN0IGZpZWxkICovCisJdW5zaWduZWQgaW50IGJpdG1hc2s7CisJdW5zaWduZWQgaW50IGludmZsYWdzOworCXVpbnQxNl90IGV0aHByb3RvOworCS8qIHRoZSBwaHlzaWNhbCBpbi1kZXYgKi8KKwljaGFyIGluW0lGTkFNU0laXTsKKwkvKiB0aGUgbG9naWNhbCBpbi1kZXYgKi8KKwljaGFyIGxvZ2ljYWxfaW5bSUZOQU1TSVpdOworCS8qIHRoZSBwaHlzaWNhbCBvdXQtZGV2ICovCisJY2hhciBvdXRbSUZOQU1TSVpdOworCS8qIHRoZSBsb2dpY2FsIG91dC1kZXYgKi8KKwljaGFyIGxvZ2ljYWxfb3V0W0lGTkFNU0laXTsKKwl1bnNpZ25lZCBjaGFyIHNvdXJjZW1hY1tFVEhfQUxFTl07CisJdW5zaWduZWQgY2hhciBzb3VyY2Vtc2tbRVRIX0FMRU5dOworCXVuc2lnbmVkIGNoYXIgZGVzdG1hY1tFVEhfQUxFTl07CisJdW5zaWduZWQgY2hhciBkZXN0bXNrW0VUSF9BTEVOXTsKKwkvKiBzaXplb2YgZWJ0X2VudHJ5ICsgbWF0Y2hlcyAqLworCXVuc2lnbmVkIGludCB3YXRjaGVyc19vZmZzZXQ7CisJLyogc2l6ZW9mIGVidF9lbnRyeSArIG1hdGNoZXMgKyB3YXRjaGVycyAqLworCXVuc2lnbmVkIGludCB0YXJnZXRfb2Zmc2V0OworCS8qIHNpemVvZiBlYnRfZW50cnkgKyBtYXRjaGVzICsgd2F0Y2hlcnMgKyB0YXJnZXQgKi8KKwl1bnNpZ25lZCBpbnQgbmV4dF9vZmZzZXQ7CisJdW5zaWduZWQgY2hhciBlbGVtc1swXSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoX19hbGlnbm9mX18oc3RydWN0IGVidF9yZXBsYWNlKSkpKTsKK307CisKKy8qIHtnLHN9ZXRzb2Nrb3B0IG51bWJlcnMgKi8KKyNkZWZpbmUgRUJUX0JBU0VfQ1RMICAgICAgICAgICAgMTI4CisKKyNkZWZpbmUgRUJUX1NPX1NFVF9FTlRSSUVTICAgICAgKEVCVF9CQVNFX0NUTCkKKyNkZWZpbmUgRUJUX1NPX1NFVF9DT1VOVEVSUyAgICAgKEVCVF9TT19TRVRfRU5UUklFUysxKQorI2RlZmluZSBFQlRfU09fU0VUX01BWCAgICAgICAgICAoRUJUX1NPX1NFVF9DT1VOVEVSUysxKQorCisjZGVmaW5lIEVCVF9TT19HRVRfSU5GTyAgICAgICAgIChFQlRfQkFTRV9DVEwpCisjZGVmaW5lIEVCVF9TT19HRVRfRU5UUklFUyAgICAgIChFQlRfU09fR0VUX0lORk8rMSkKKyNkZWZpbmUgRUJUX1NPX0dFVF9JTklUX0lORk8gICAgKEVCVF9TT19HRVRfRU5UUklFUysxKQorI2RlZmluZSBFQlRfU09fR0VUX0lOSVRfRU5UUklFUyAoRUJUX1NPX0dFVF9JTklUX0lORk8rMSkKKyNkZWZpbmUgRUJUX1NPX0dFVF9NQVggICAgICAgICAgKEVCVF9TT19HRVRfSU5JVF9FTlRSSUVTKzEpCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKy8qIHJldHVybiB2YWx1ZXMgZm9yIG1hdGNoKCkgZnVuY3Rpb25zICovCisjZGVmaW5lIEVCVF9NQVRDSCAwCisjZGVmaW5lIEVCVF9OT01BVENIIDEKKworc3RydWN0IGVidF9tYXRjaAoreworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwljb25zdCBjaGFyIG5hbWVbRUJUX0ZVTkNUSU9OX01BWE5BTUVMRU5dOworCS8qIDAgPT0gaXQgbWF0Y2hlcyAqLworCWludCAoKm1hdGNoKShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCisJICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwgY29uc3Qgdm9pZCAqbWF0Y2hkYXRhLAorCSAgIHVuc2lnbmVkIGludCBkYXRhbGVuKTsKKwkvKiAwID09IGxldCBpdCBpbiAqLworCWludCAoKmNoZWNrKShjb25zdCBjaGFyICp0YWJsZW5hbWUsIHVuc2lnbmVkIGludCBob29rbWFzaywKKwkgICBjb25zdCBzdHJ1Y3QgZWJ0X2VudHJ5ICplLCB2b2lkICptYXRjaGRhdGEsIHVuc2lnbmVkIGludCBkYXRhbGVuKTsKKwl2b2lkICgqZGVzdHJveSkodm9pZCAqbWF0Y2hkYXRhLCB1bnNpZ25lZCBpbnQgZGF0YWxlbik7CisJc3RydWN0IG1vZHVsZSAqbWU7Cit9OworCitzdHJ1Y3QgZWJ0X3dhdGNoZXIKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJY29uc3QgY2hhciBuYW1lW0VCVF9GVU5DVElPTl9NQVhOQU1FTEVOXTsKKwl2b2lkICgqd2F0Y2hlcikoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2tuciwKKwkgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCisJICAgY29uc3Qgdm9pZCAqd2F0Y2hlcmRhdGEsIHVuc2lnbmVkIGludCBkYXRhbGVuKTsKKwkvKiAwID09IGxldCBpdCBpbiAqLworCWludCAoKmNoZWNrKShjb25zdCBjaGFyICp0YWJsZW5hbWUsIHVuc2lnbmVkIGludCBob29rbWFzaywKKwkgICBjb25zdCBzdHJ1Y3QgZWJ0X2VudHJ5ICplLCB2b2lkICp3YXRjaGVyZGF0YSwgdW5zaWduZWQgaW50IGRhdGFsZW4pOworCXZvaWQgKCpkZXN0cm95KSh2b2lkICp3YXRjaGVyZGF0YSwgdW5zaWduZWQgaW50IGRhdGFsZW4pOworCXN0cnVjdCBtb2R1bGUgKm1lOworfTsKKworc3RydWN0IGVidF90YXJnZXQKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJY29uc3QgY2hhciBuYW1lW0VCVF9GVU5DVElPTl9NQVhOQU1FTEVOXTsKKwkvKiByZXR1cm5zIG9uZSBvZiB0aGUgc3RhbmRhcmQgdmVyZGljdHMgKi8KKwlpbnQgKCp0YXJnZXQpKHN0cnVjdCBza19idWZmICoqcHNrYiwgdW5zaWduZWQgaW50IGhvb2tuciwKKwkgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCisJICAgY29uc3Qgdm9pZCAqdGFyZ2V0ZGF0YSwgdW5zaWduZWQgaW50IGRhdGFsZW4pOworCS8qIDAgPT0gbGV0IGl0IGluICovCisJaW50ICgqY2hlY2spKGNvbnN0IGNoYXIgKnRhYmxlbmFtZSwgdW5zaWduZWQgaW50IGhvb2ttYXNrLAorCSAgIGNvbnN0IHN0cnVjdCBlYnRfZW50cnkgKmUsIHZvaWQgKnRhcmdldGRhdGEsIHVuc2lnbmVkIGludCBkYXRhbGVuKTsKKwl2b2lkICgqZGVzdHJveSkodm9pZCAqdGFyZ2V0ZGF0YSwgdW5zaWduZWQgaW50IGRhdGFsZW4pOworCXN0cnVjdCBtb2R1bGUgKm1lOworfTsKKworLyogdXNlZCBmb3IganVtcGluZyBmcm9tIGFuZCBpbnRvIHVzZXIgZGVmaW5lZCBjaGFpbnMgKHVkYykgKi8KK3N0cnVjdCBlYnRfY2hhaW5zdGFjaworeworCXN0cnVjdCBlYnRfZW50cmllcyAqY2hhaW5pbmZvOyAvKiBwb2ludGVyIHRvIGNoYWluIGRhdGEgKi8KKwlzdHJ1Y3QgZWJ0X2VudHJ5ICplOyAvKiBwb2ludGVyIHRvIGVudHJ5IGRhdGEgKi8KKwl1bnNpZ25lZCBpbnQgbjsgLyogbid0aCBlbnRyeSAqLworfTsKKworc3RydWN0IGVidF90YWJsZV9pbmZvCit7CisJLyogdG90YWwgc2l6ZSBvZiB0aGUgZW50cmllcyAqLworCXVuc2lnbmVkIGludCBlbnRyaWVzX3NpemU7CisJdW5zaWduZWQgaW50IG5lbnRyaWVzOworCS8qIHBvaW50ZXJzIHRvIHRoZSBzdGFydCBvZiB0aGUgY2hhaW5zICovCisJc3RydWN0IGVidF9lbnRyaWVzICpob29rX2VudHJ5W05GX0JSX05VTUhPT0tTXTsKKwkvKiByb29tIHRvIG1haW50YWluIHRoZSBzdGFjayB1c2VkIGZvciBqdW1waW5nIGZyb20gYW5kIGludG8gdWRjICovCisJc3RydWN0IGVidF9jaGFpbnN0YWNrICoqY2hhaW5zdGFjazsKKwljaGFyICplbnRyaWVzOworCXN0cnVjdCBlYnRfY291bnRlciBjb3VudGVyc1swXSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7Cit9OworCitzdHJ1Y3QgZWJ0X3RhYmxlCit7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCWNoYXIgbmFtZVtFQlRfVEFCTEVfTUFYTkFNRUxFTl07CisJc3RydWN0IGVidF9yZXBsYWNlICp0YWJsZTsKKwl1bnNpZ25lZCBpbnQgdmFsaWRfaG9va3M7CisJcndsb2NrX3QgbG9jazsKKwkvKiBlLmcuIGNvdWxkIGJlIHRoZSB0YWJsZSBleHBsaWNpdGx5IG9ubHkgYWxsb3dzIGNlcnRhaW4KKwkgKiBtYXRjaGVzLCB0YXJnZXRzLCAuLi4gMCA9PSBsZXQgaXQgaW4gKi8KKwlpbnQgKCpjaGVjaykoY29uc3Qgc3RydWN0IGVidF90YWJsZV9pbmZvICppbmZvLAorCSAgIHVuc2lnbmVkIGludCB2YWxpZF9ob29rcyk7CisJLyogdGhlIGRhdGEgdXNlZCBieSB0aGUga2VybmVsICovCisJc3RydWN0IGVidF90YWJsZV9pbmZvICpwcml2YXRlOworCXN0cnVjdCBtb2R1bGUgKm1lOworfTsKKworI2RlZmluZSBFQlRfQUxJR04ocykgKCgocykgKyAoX19hbGlnbm9mX18oc3RydWN0IGVidF9yZXBsYWNlKS0xKSkgJiBcCisJCSAgICAgfihfX2FsaWdub2ZfXyhzdHJ1Y3QgZWJ0X3JlcGxhY2UpLTEpKQorZXh0ZXJuIGludCBlYnRfcmVnaXN0ZXJfdGFibGUoc3RydWN0IGVidF90YWJsZSAqdGFibGUpOworZXh0ZXJuIHZvaWQgZWJ0X3VucmVnaXN0ZXJfdGFibGUoc3RydWN0IGVidF90YWJsZSAqdGFibGUpOworZXh0ZXJuIGludCBlYnRfcmVnaXN0ZXJfbWF0Y2goc3RydWN0IGVidF9tYXRjaCAqbWF0Y2gpOworZXh0ZXJuIHZvaWQgZWJ0X3VucmVnaXN0ZXJfbWF0Y2goc3RydWN0IGVidF9tYXRjaCAqbWF0Y2gpOworZXh0ZXJuIGludCBlYnRfcmVnaXN0ZXJfd2F0Y2hlcihzdHJ1Y3QgZWJ0X3dhdGNoZXIgKndhdGNoZXIpOworZXh0ZXJuIHZvaWQgZWJ0X3VucmVnaXN0ZXJfd2F0Y2hlcihzdHJ1Y3QgZWJ0X3dhdGNoZXIgKndhdGNoZXIpOworZXh0ZXJuIGludCBlYnRfcmVnaXN0ZXJfdGFyZ2V0KHN0cnVjdCBlYnRfdGFyZ2V0ICp0YXJnZXQpOworZXh0ZXJuIHZvaWQgZWJ0X3VucmVnaXN0ZXJfdGFyZ2V0KHN0cnVjdCBlYnRfdGFyZ2V0ICp0YXJnZXQpOworZXh0ZXJuIHVuc2lnbmVkIGludCBlYnRfZG9fdGFibGUodW5zaWduZWQgaW50IGhvb2ssIHN0cnVjdCBza19idWZmICoqcHNrYiwKKyAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKKyAgIHN0cnVjdCBlYnRfdGFibGUgKnRhYmxlKTsKKworLyogVXNlZCBpbiB0aGUga2VybmVsIG1hdGNoKCkgZnVuY3Rpb25zICovCisjZGVmaW5lIEZXSU5WKGJvb2wsaW52ZmxnKSAoKGJvb2wpIF4gISEoaW5mby0+aW52ZmxhZ3MgJiBpbnZmbGcpKQorLyogVHJ1ZSBpZiB0aGUgaG9vayBtYXNrIGRlbm90ZXMgdGhhdCB0aGUgcnVsZSBpcyBpbiBhIGJhc2UgY2hhaW4sCisgKiB1c2VkIGluIHRoZSBjaGVjaygpIGZ1bmN0aW9ucyAqLworI2RlZmluZSBCQVNFX0NIQUlOIChob29rbWFzayAmICgxIDw8IE5GX0JSX05VTUhPT0tTKSkKKy8qIENsZWFyIHRoZSBiaXQgaW4gdGhlIGhvb2sgbWFzayB0aGF0IHRlbGxzIGlmIHRoZSBydWxlIGlzIG9uIGEgYmFzZSBjaGFpbiAqLworI2RlZmluZSBDTEVBUl9CQVNFX0NIQUlOX0JJVCAoaG9va21hc2sgJj0gfigxIDw8IE5GX0JSX05VTUhPT0tTKSkKKy8qIFRydWUgaWYgdGhlIHRhcmdldCBpcyBub3QgYSBzdGFuZGFyZCB0YXJnZXQgKi8KKyNkZWZpbmUgSU5WQUxJRF9UQVJHRVQgKGluZm8tPnRhcmdldCA8IC1OVU1fU1RBTkRBUkRfVEFSR0VUUyB8fCBpbmZvLT50YXJnZXQgPj0gMCkKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworLyogYmxhdGVudGx5IHN0b2xlbiBmcm9tIGlwX3RhYmxlcy5oCisgKiBmbiByZXR1cm5zIDAgdG8gY29udGludWUgaXRlcmF0aW9uICovCisjZGVmaW5lIEVCVF9NQVRDSF9JVEVSQVRFKGUsIGZuLCBhcmdzLi4uKSAgICAgICAgICAgICAgICAgICBcCisoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJdW5zaWduZWQgaW50IF9faTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlpbnQgX19yZXQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXN0cnVjdCBlYnRfZW50cnlfbWF0Y2ggKl9fbWF0Y2g7ICAgICAgICAgICAgICAgICAgICBcCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlmb3IgKF9faSA9IHNpemVvZihzdHJ1Y3QgZWJ0X2VudHJ5KTsgICAgICAgICAgICAgICAgXAorCSAgICAgX19pIDwgKGUpLT53YXRjaGVyc19vZmZzZXQ7ICAgICAgICAgICAgICAgICAgICBcCisJICAgICBfX2kgKz0gX19tYXRjaC0+bWF0Y2hfc2l6ZSArICAgICAgICAgICAgICAgICAgIFwKKwkgICAgIHNpemVvZihzdHJ1Y3QgZWJ0X2VudHJ5X21hdGNoKSkgeyAgICAgICAgICAgICAgXAorCQlfX21hdGNoID0gKHZvaWQgKikoZSkgKyBfX2k7ICAgICAgICAgICAgICAgIFwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCV9fcmV0ID0gZm4oX19tYXRjaCAsICMjIGFyZ3MpOyAgICAgICAgICAgICAgXAorCQlpZiAoX19yZXQgIT0gMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCWJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWlmIChfX3JldCA9PSAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCWlmIChfX2kgIT0gKGUpLT53YXRjaGVyc19vZmZzZXQpICAgICAgICAgICAgXAorCQkJX19yZXQgPSAtRUlOVkFMOyAgICAgICAgICAgICAgICAgICAgXAorCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJX19yZXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30pCisKKyNkZWZpbmUgRUJUX1dBVENIRVJfSVRFUkFURShlLCBmbiwgYXJncy4uLikgICAgICAgICAgICAgICAgIFwKKyh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl1bnNpZ25lZCBpbnQgX19pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWludCBfX3JldCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJc3RydWN0IGVidF9lbnRyeV93YXRjaGVyICpfX3dhdGNoZXI7ICAgICAgICAgICAgICAgIFwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWZvciAoX19pID0gZS0+d2F0Y2hlcnNfb2Zmc2V0OyAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICBfX2kgPCAoZSktPnRhcmdldF9vZmZzZXQ7ICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgIF9faSArPSBfX3dhdGNoZXItPndhdGNoZXJfc2l6ZSArICAgICAgICAgICAgICAgXAorCSAgICAgc2l6ZW9mKHN0cnVjdCBlYnRfZW50cnlfd2F0Y2hlcikpIHsgICAgICAgICAgICBcCisJCV9fd2F0Y2hlciA9ICh2b2lkICopKGUpICsgX19pOyAgICAgICAgICAgICAgXAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJX19yZXQgPSBmbihfX3dhdGNoZXIgLCAjIyBhcmdzKTsgICAgICAgICAgICBcCisJCWlmIChfX3JldCAhPSAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJaWYgKF9fcmV0ID09IDApIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJaWYgKF9faSAhPSAoZSktPnRhcmdldF9vZmZzZXQpICAgICAgICAgICAgICBcCisJCQlfX3JldCA9IC1FSU5WQUw7ICAgICAgICAgICAgICAgICAgICBcCisJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlfX3JldDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSkKKworI2RlZmluZSBFQlRfRU5UUllfSVRFUkFURShlbnRyaWVzLCBzaXplLCBmbiwgYXJncy4uLikgICAgICAgXAorKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXVuc2lnbmVkIGludCBfX2k7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJaW50IF9fcmV0ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlzdHJ1Y3QgZWJ0X2VudHJ5ICpfX2VudHJ5OyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJZm9yIChfX2kgPSAwOyBfX2kgPCAoc2l6ZSk7KSB7ICAgICAgICAgICAgICAgICAgICAgIFwKKwkJX19lbnRyeSA9ICh2b2lkICopKGVudHJpZXMpICsgX19pOyAgICAgICAgICBcCisJCV9fcmV0ID0gZm4oX19lbnRyeSAsICMjIGFyZ3MpOyAgICAgICAgICAgICAgXAorCQlpZiAoX19yZXQgIT0gMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCWJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJaWYgKF9fZW50cnktPmJpdG1hc2sgIT0gMCkgICAgICAgICAgICAgICAgICBcCisJCQlfX2kgKz0gX19lbnRyeS0+bmV4dF9vZmZzZXQ7ICAgICAgICBcCisJCWVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJX19pICs9IHNpemVvZihzdHJ1Y3QgZWJ0X2VudHJpZXMpOyAgXAorCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJaWYgKF9fcmV0ID09IDApIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJaWYgKF9faSAhPSAoc2l6ZSkpICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQlfX3JldCA9IC1FSU5WQUw7ICAgICAgICAgICAgICAgICAgICBcCisJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlfX3JldDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9kZWNuZXQuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2RlY25ldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNjRlZWMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9kZWNuZXQuaApAQCAtMCwwICsxLDU5IEBACisjaWZuZGVmIF9fTElOVVhfREVDTkVUX05FVEZJTFRFUl9ICisjZGVmaW5lIF9fTElOVVhfREVDTkVUX05FVEZJTFRFUl9ICisKKy8qIERFQ25ldC1zcGVjaWZpYyBkZWZpbmVzIGZvciBuZXRmaWx0ZXIuIAorICogVGhpcyBmaWxlIChDKSBTdGV2ZSBXaGl0ZWhvdXNlIDE5OTkgZGVyaXZlZCBmcm9tIHRoZQorICogaXB2NCBuZXRmaWx0ZXIgaGVhZGVyIGZpbGUgd2hpY2ggaXMKKyAqIChDKTE5OTggUnVzdHkgUnVzc2VsbCAtLSBUaGlzIGNvZGUgaXMgR1BMLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIuaD4KKworLyogSVAgQ2FjaGUgYml0cy4gKi8KKy8qIFNyYyBJUCBhZGRyZXNzLiAqLworI2RlZmluZSBORkNfRE5fU1JDCQkweDAwMDEKKy8qIERlc3QgSVAgYWRkcmVzcy4gKi8KKyNkZWZpbmUgTkZDX0ROX0RTVAkJMHgwMDAyCisvKiBJbnB1dCBkZXZpY2UuICovCisjZGVmaW5lIE5GQ19ETl9JRl9JTgkJMHgwMDA0CisvKiBPdXRwdXQgZGV2aWNlLiAqLworI2RlZmluZSBORkNfRE5fSUZfT1VUCQkweDAwMDgKKworLyogREVDbmV0IEhvb2tzICovCisvKiBBZnRlciBwcm9taXNjIGRyb3BzLCBjaGVja3N1bSBjaGVja3MuICovCisjZGVmaW5lIE5GX0ROX1BSRV9ST1VUSU5HCTAKKy8qIElmIHRoZSBwYWNrZXQgaXMgZGVzdGluZWQgZm9yIHRoaXMgYm94LiAqLworI2RlZmluZSBORl9ETl9MT0NBTF9JTgkJMQorLyogSWYgdGhlIHBhY2tldCBpcyBkZXN0aW5lZCBmb3IgYW5vdGhlciBpbnRlcmZhY2UuICovCisjZGVmaW5lIE5GX0ROX0ZPUldBUkQJCTIKKy8qIFBhY2tldHMgY29taW5nIGZyb20gYSBsb2NhbCBwcm9jZXNzLiAqLworI2RlZmluZSBORl9ETl9MT0NBTF9PVVQJCTMKKy8qIFBhY2tldHMgYWJvdXQgdG8gaGl0IHRoZSB3aXJlLiAqLworI2RlZmluZSBORl9ETl9QT1NUX1JPVVRJTkcJNAorLyogSW5wdXQgSGVsbG8gUGFja2V0cyAqLworI2RlZmluZSBORl9ETl9IRUxMTwkJNQorLyogSW5wdXQgUm91dGluZyBQYWNrZXRzICovCisjZGVmaW5lIE5GX0ROX1JPVVRFCQk2CisjZGVmaW5lIE5GX0ROX05VTUhPT0tTCQk3CisKK2VudW0gbmZfZG5faG9va19wcmlvcml0aWVzIHsKKwlORl9ETl9QUklfRklSU1QgPSBJTlRfTUlOLAorCU5GX0ROX1BSSV9DT05OVFJBQ0sgPSAtMjAwLAorCU5GX0ROX1BSSV9NQU5HTEUgPSAtMTUwLAorCU5GX0ROX1BSSV9OQVRfRFNUID0gLTEwMCwKKwlORl9ETl9QUklfRklMVEVSID0gMCwKKwlORl9ETl9QUklfTkFUX1NSQyA9IDEwMCwKKwlORl9ETl9QUklfRE5SVE1TRyA9IDIwMCwKKwlORl9ETl9QUklfTEFTVCA9IElOVF9NQVgsCit9OworCitzdHJ1Y3QgbmZfZG5fcnRtc2cgeworCWludCBuZmRuX2lmaW5kZXg7Cit9OworCisjZGVmaW5lIE5GRE5fUlRNU0cocikgKCh1bnNpZ25lZCBjaGFyICopKHIpICsgTkxNU0dfQUxJR04oc2l6ZW9mKHN0cnVjdCBuZl9kbl9ydG1zZykpKQorCisjZGVmaW5lIEROUk1HX0wxX0dST1VQIDB4MDEKKyNkZWZpbmUgRE5STUdfTDJfR1JPVVAgMHgwMgorCisjZW5kaWYgLypfX0xJTlVYX0RFQ05FVF9ORVRGSUxURVJfSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0LmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzliYWNmOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQuaApAQCAtMCwwICsxLDkwIEBACisjaWZuZGVmIF9fTElOVVhfSVBfTkVURklMVEVSX0gKKyNkZWZpbmUgX19MSU5VWF9JUF9ORVRGSUxURVJfSAorCisvKiBJUHY0LXNwZWNpZmljIGRlZmluZXMgZm9yIG5ldGZpbHRlci4gCisgKiAoQykxOTk4IFJ1c3R5IFJ1c3NlbGwgLS0gVGhpcyBjb2RlIGlzIEdQTC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyLmg+CisKKy8qIElQIENhY2hlIGJpdHMuICovCisvKiBTcmMgSVAgYWRkcmVzcy4gKi8KKyNkZWZpbmUgTkZDX0lQX1NSQwkJMHgwMDAxCisvKiBEZXN0IElQIGFkZHJlc3MuICovCisjZGVmaW5lIE5GQ19JUF9EU1QJCTB4MDAwMgorLyogSW5wdXQgZGV2aWNlLiAqLworI2RlZmluZSBORkNfSVBfSUZfSU4JCTB4MDAwNAorLyogT3V0cHV0IGRldmljZS4gKi8KKyNkZWZpbmUgTkZDX0lQX0lGX09VVAkJMHgwMDA4CisvKiBUT1MuICovCisjZGVmaW5lIE5GQ19JUF9UT1MJCTB4MDAxMAorLyogUHJvdG9jb2wuICovCisjZGVmaW5lIE5GQ19JUF9QUk9UTwkJMHgwMDIwCisvKiBJUCBvcHRpb25zLiAqLworI2RlZmluZSBORkNfSVBfT1BUSU9OUwkJMHgwMDQwCisvKiBGcmFnICYgZmxhZ3MuICovCisjZGVmaW5lIE5GQ19JUF9GUkFHCQkweDAwODAKKworLyogUGVyLXByb3RvY29sIGluZm9ybWF0aW9uOiBvbmx5IG1hdHRlcnMgaWYgcHJvdG8gbWF0Y2guICovCisvKiBUQ1AgZmxhZ3MuICovCisjZGVmaW5lIE5GQ19JUF9UQ1BGTEFHUwkJMHgwMTAwCisvKiBTb3VyY2UgcG9ydC4gKi8KKyNkZWZpbmUgTkZDX0lQX1NSQ19QVAkJMHgwMjAwCisvKiBEZXN0IHBvcnQuICovCisjZGVmaW5lIE5GQ19JUF9EU1RfUFQJCTB4MDQwMAorLyogU29tZXRoaW5nIGVsc2UgYWJvdXQgdGhlIHByb3RvICovCisjZGVmaW5lIE5GQ19JUF9QUk9UT19VTktOT1dOCTB4MjAwMAorCisvKiBJUCBIb29rcyAqLworLyogQWZ0ZXIgcHJvbWlzYyBkcm9wcywgY2hlY2tzdW0gY2hlY2tzLiAqLworI2RlZmluZSBORl9JUF9QUkVfUk9VVElORwkwCisvKiBJZiB0aGUgcGFja2V0IGlzIGRlc3RpbmVkIGZvciB0aGlzIGJveC4gKi8KKyNkZWZpbmUgTkZfSVBfTE9DQUxfSU4JCTEKKy8qIElmIHRoZSBwYWNrZXQgaXMgZGVzdGluZWQgZm9yIGFub3RoZXIgaW50ZXJmYWNlLiAqLworI2RlZmluZSBORl9JUF9GT1JXQVJECQkyCisvKiBQYWNrZXRzIGNvbWluZyBmcm9tIGEgbG9jYWwgcHJvY2Vzcy4gKi8KKyNkZWZpbmUgTkZfSVBfTE9DQUxfT1VUCQkzCisvKiBQYWNrZXRzIGFib3V0IHRvIGhpdCB0aGUgd2lyZS4gKi8KKyNkZWZpbmUgTkZfSVBfUE9TVF9ST1VUSU5HCTQKKyNkZWZpbmUgTkZfSVBfTlVNSE9PS1MJCTUKKworZW51bSBuZl9pcF9ob29rX3ByaW9yaXRpZXMgeworCU5GX0lQX1BSSV9GSVJTVCA9IElOVF9NSU4sCisJTkZfSVBfUFJJX0NPTk5UUkFDS19ERUZSQUcgPSAtNDAwLAorCU5GX0lQX1BSSV9SQVcgPSAtMzAwLAorCU5GX0lQX1BSSV9TRUxJTlVYX0ZJUlNUID0gLTIyNSwKKwlORl9JUF9QUklfQ09OTlRSQUNLID0gLTIwMCwKKwlORl9JUF9QUklfQlJJREdFX1NBQk9UQUdFX0ZPUldBUkQgPSAtMTc1LAorCU5GX0lQX1BSSV9NQU5HTEUgPSAtMTUwLAorCU5GX0lQX1BSSV9OQVRfRFNUID0gLTEwMCwKKwlORl9JUF9QUklfQlJJREdFX1NBQk9UQUdFX0xPQ0FMX09VVCA9IC01MCwKKwlORl9JUF9QUklfRklMVEVSID0gMCwKKwlORl9JUF9QUklfTkFUX1NSQyA9IDEwMCwKKwlORl9JUF9QUklfU0VMSU5VWF9MQVNUID0gMjI1LAorCU5GX0lQX1BSSV9MQVNUID0gSU5UX01BWCwKK307CisKKy8qIEFyZ3VtZW50cyBmb3Igc2V0c29ja29wdCBTT0xfSVA6ICovCisvKiAyLjAgZmlyZXdhbGxpbmcgd2VudCBmcm9tIDY0IHRocm91Z2ggNzEgKGFuZCArMjU2LCArNTEyLCBldGMpLiAqLworLyogMi4yIGZpcmV3YWxsaW5nICgrIG1hc3EpIHdlbnQgZnJvbSA2NCB0aHJvdWdoIDc2ICovCisvKiAyLjQgZmlyZXdhbGxpbmcgd2VudCA2NCB0aHJvdWdoIDY3LiAqLworI2RlZmluZSBTT19PUklHSU5BTF9EU1QgODAKKworI2lmZGVmIF9fS0VSTkVMX18KKyNpZmRlZiBDT05GSUdfTkVURklMVEVSX0RFQlVHCit2b2lkIG5mX2RlYnVnX2lwX2xvY2FsX2RlbGl2ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYik7Cit2b2lkIG5mX2RlYnVnX2lwX2xvb3BiYWNrX3htaXQoc3RydWN0IHNrX2J1ZmYgKm5ld3NrYik7Cit2b2lkIG5mX2RlYnVnX2lwX2ZpbmlzaF9vdXRwdXQyKHN0cnVjdCBza19idWZmICpza2IpOworI2VuZGlmIC8qQ09ORklHX05FVEZJTFRFUl9ERUJVRyovCisKK2V4dGVybiBpbnQgaXBfcm91dGVfbWVfaGFyZGVyKHN0cnVjdCBza19idWZmICoqcHNrYik7CisKKy8qIENhbGwgdGhpcyBiZWZvcmUgbW9kaWZ5aW5nIGFuIGV4aXN0aW5nIElQIHBhY2tldDogZW5zdXJlcyBpdCBpcworICAgbW9kaWZpYWJsZSBhbmQgbGluZWFyIHRvIHRoZSBwb2ludCB5b3UgY2FyZSBhYm91dCAod3JpdGFibGVfbGVuKS4KKyAgIFJldHVybnMgdHJ1ZSBvciBmYWxzZS4gKi8KK2V4dGVybiBpbnQgc2tiX2lwX21ha2Vfd3JpdGFibGUoc3RydWN0IHNrX2J1ZmYgKipwc2tiLAorCQkJCXVuc2lnbmVkIGludCB3cml0YWJsZV9sZW4pOworI2VuZGlmIC8qX19LRVJORUxfXyovCisKKyNlbmRpZiAvKl9fTElOVVhfSVBfTkVURklMVEVSX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2suaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc4MTE5MgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrLmgKQEAgLTAsMCArMSwzMTQgQEAKKyNpZm5kZWYgX0lQX0NPTk5UUkFDS19ICisjZGVmaW5lIF9JUF9DT05OVFJBQ0tfSAorLyogQ29ubmVjdGlvbiBzdGF0ZSB0cmFja2luZyBmb3IgbmV0ZmlsdGVyLiAgVGhpcyBpcyBzZXBhcmF0ZWQgZnJvbSwKKyAgIGJ1dCByZXF1aXJlZCBieSwgdGhlIE5BVCBsYXllcjsgaXQgY2FuIGFsc28gYmUgdXNlZCBieSBhbiBpcHRhYmxlcworICAgZXh0ZW5zaW9uLiAqLworZW51bSBpcF9jb25udHJhY2tfaW5mbworeworCS8qIFBhcnQgb2YgYW4gZXN0YWJsaXNoZWQgY29ubmVjdGlvbiAoZWl0aGVyIGRpcmVjdGlvbikuICovCisJSVBfQ1RfRVNUQUJMSVNIRUQsCisKKwkvKiBMaWtlIE5FVywgYnV0IHJlbGF0ZWQgdG8gYW4gZXhpc3RpbmcgY29ubmVjdGlvbiwgb3IgSUNNUCBlcnJvcgorCSAgIChpbiBlaXRoZXIgZGlyZWN0aW9uKS4gKi8KKwlJUF9DVF9SRUxBVEVELAorCisJLyogU3RhcnRlZCBhIG5ldyBjb25uZWN0aW9uIHRvIHRyYWNrIChvbmx5CisgICAgICAgICAgIElQX0NUX0RJUl9PUklHSU5BTCk7IG1heSBiZSBhIHJldHJhbnNtaXNzaW9uLiAqLworCUlQX0NUX05FVywKKworCS8qID49IHRoaXMgaW5kaWNhdGVzIHJlcGx5IGRpcmVjdGlvbiAqLworCUlQX0NUX0lTX1JFUExZLAorCisJLyogTnVtYmVyIG9mIGRpc3RpbmN0IElQX0NUIHR5cGVzIChubyBORVcgaW4gcmVwbHkgZGlybikuICovCisJSVBfQ1RfTlVNQkVSID0gSVBfQ1RfSVNfUkVQTFkgKiAyIC0gMQorfTsKKworLyogQml0c2V0IHJlcHJlc2VudGluZyBzdGF0dXMgb2YgY29ubmVjdGlvbi4gKi8KK2VudW0gaXBfY29ubnRyYWNrX3N0YXR1cyB7CisJLyogSXQncyBhbiBleHBlY3RlZCBjb25uZWN0aW9uOiBiaXQgMCBzZXQuICBUaGlzIGJpdCBuZXZlciBjaGFuZ2VkICovCisJSVBTX0VYUEVDVEVEX0JJVCA9IDAsCisJSVBTX0VYUEVDVEVEID0gKDEgPDwgSVBTX0VYUEVDVEVEX0JJVCksCisKKwkvKiBXZSd2ZSBzZWVuIHBhY2tldHMgYm90aCB3YXlzOiBiaXQgMSBzZXQuICBDYW4gYmUgc2V0LCBub3QgdW5zZXQuICovCisJSVBTX1NFRU5fUkVQTFlfQklUID0gMSwKKwlJUFNfU0VFTl9SRVBMWSA9ICgxIDw8IElQU19TRUVOX1JFUExZX0JJVCksCisKKwkvKiBDb25udHJhY2sgc2hvdWxkIG5ldmVyIGJlIGVhcmx5LWV4cGlyZWQuICovCisJSVBTX0FTU1VSRURfQklUID0gMiwKKwlJUFNfQVNTVVJFRCA9ICgxIDw8IElQU19BU1NVUkVEX0JJVCksCisKKwkvKiBDb25uZWN0aW9uIGlzIGNvbmZpcm1lZDogb3JpZ2luYXRpbmcgcGFja2V0IGhhcyBsZWZ0IGJveCAqLworCUlQU19DT05GSVJNRURfQklUID0gMywKKwlJUFNfQ09ORklSTUVEID0gKDEgPDwgSVBTX0NPTkZJUk1FRF9CSVQpLAorCisJLyogQ29ubmVjdGlvbiBuZWVkcyBzcmMgbmF0IGluIG9yaWcgZGlyLiAgVGhpcyBiaXQgbmV2ZXIgY2hhbmdlZC4gKi8KKwlJUFNfU1JDX05BVF9CSVQgPSA0LAorCUlQU19TUkNfTkFUID0gKDEgPDwgSVBTX1NSQ19OQVRfQklUKSwKKworCS8qIENvbm5lY3Rpb24gbmVlZHMgZHN0IG5hdCBpbiBvcmlnIGRpci4gIFRoaXMgYml0IG5ldmVyIGNoYW5nZWQuICovCisJSVBTX0RTVF9OQVRfQklUID0gNSwKKwlJUFNfRFNUX05BVCA9ICgxIDw8IElQU19EU1RfTkFUX0JJVCksCisKKwkvKiBCb3RoIHRvZ2V0aGVyLiAqLworCUlQU19OQVRfTUFTSyA9IChJUFNfRFNUX05BVCB8IElQU19TUkNfTkFUKSwKKworCS8qIENvbm5lY3Rpb24gbmVlZHMgVENQIHNlcXVlbmNlIGFkanVzdGVkLiAqLworCUlQU19TRVFfQURKVVNUX0JJVCA9IDYsCisJSVBTX1NFUV9BREpVU1QgPSAoMSA8PCBJUFNfU0VRX0FESlVTVF9CSVQpLAorCisJLyogTkFUIGluaXRpYWxpemF0aW9uIGJpdHMuICovCisJSVBTX1NSQ19OQVRfRE9ORV9CSVQgPSA3LAorCUlQU19TUkNfTkFUX0RPTkUgPSAoMSA8PCBJUFNfU1JDX05BVF9ET05FX0JJVCksCisKKwlJUFNfRFNUX05BVF9ET05FX0JJVCA9IDgsCisJSVBTX0RTVF9OQVRfRE9ORSA9ICgxIDw8IElQU19EU1RfTkFUX0RPTkVfQklUKSwKKworCS8qIEJvdGggdG9nZXRoZXIgKi8KKwlJUFNfTkFUX0RPTkVfTUFTSyA9IChJUFNfRFNUX05BVF9ET05FIHwgSVBTX1NSQ19OQVRfRE9ORSksCit9OworCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja190dXBsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorCisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX3RjcC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19pY21wLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX3NjdHAuaD4KKworLyogcGVyIGNvbm50cmFjazogcHJvdG9jb2wgcHJpdmF0ZSBkYXRhICovCit1bmlvbiBpcF9jb25udHJhY2tfcHJvdG8geworCS8qIGluc2VydCBjb25udHJhY2sgcHJvdG8gcHJpdmF0ZSBkYXRhIGhlcmUgKi8KKwlzdHJ1Y3QgaXBfY3Rfc2N0cCBzY3RwOworCXN0cnVjdCBpcF9jdF90Y3AgdGNwOworCXN0cnVjdCBpcF9jdF9pY21wIGljbXA7Cit9OworCit1bmlvbiBpcF9jb25udHJhY2tfZXhwZWN0X3Byb3RvIHsKKwkvKiBpbnNlcnQgZXhwZWN0IHByb3RvIHByaXZhdGUgZGF0YSBoZXJlICovCit9OworCisvKiBBZGQgcHJvdG9jb2wgaGVscGVyIGluY2x1ZGUgZmlsZSBoZXJlICovCisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2FtYW5kYS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19mdHAuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfaXJjLmg+CisKKy8qIHBlciBjb25udHJhY2s6IGFwcGxpY2F0aW9uIGhlbHBlciBwcml2YXRlIGRhdGEgKi8KK3VuaW9uIGlwX2Nvbm50cmFja19oZWxwIHsKKwkvKiBpbnNlcnQgY29ubnRyYWNrIGhlbHBlciBwcml2YXRlIGRhdGEgKG1hc3RlcikgaGVyZSAqLworCXN0cnVjdCBpcF9jdF9mdHBfbWFzdGVyIGN0X2Z0cF9pbmZvOworCXN0cnVjdCBpcF9jdF9pcmNfbWFzdGVyIGN0X2lyY19pbmZvOworfTsKKworI2lmZGVmIENPTkZJR19JUF9ORl9OQVRfTkVFREVECisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfbmF0Lmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisKKyNpZmRlZiBDT05GSUdfTkVURklMVEVSX0RFQlVHCisjZGVmaW5lIElQX05GX0FTU0VSVCh4KQkJCQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCWlmICghKHgpKQkJCQkJCQlcCisJCS8qIFdvb2FoISAgSSdtIHRyaXBwaW5nIG15IGNvbm50cmFjayBpbiBhIGZyZW56eSBvZglcCisJCSAgIG5ldHBsYXkuLi4gKi8JCQkJCVwKKwkJcHJpbnRrKCJORl9JUF9BU1NFUlQ6ICVzOiVpKCVzKVxuIiwJCQlcCisJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fRlVOQ1RJT05fXyk7CQlcCit9IHdoaWxlKDApCisjZWxzZQorI2RlZmluZSBJUF9ORl9BU1NFUlQoeCkKKyNlbmRpZgorCitzdHJ1Y3QgaXBfY29ubnRyYWNrX2NvdW50ZXIKK3sKKwl1X2ludDY0X3QgcGFja2V0czsKKwl1X2ludDY0X3QgYnl0ZXM7Cit9OworCitzdHJ1Y3QgaXBfY29ubnRyYWNrX2hlbHBlcjsKKworc3RydWN0IGlwX2Nvbm50cmFjaworeworCS8qIFVzYWdlIGNvdW50IGluIGhlcmUgaXMgMSBmb3IgaGFzaCB0YWJsZS9kZXN0cnVjdCB0aW1lciwgMSBwZXIgc2tiLAorICAgICAgICAgICBwbHVzIDEgZm9yIGFueSBjb25uZWN0aW9uKHMpIHdlIGFyZSBgbWFzdGVyJyBmb3IgKi8KKwlzdHJ1Y3QgbmZfY29ubnRyYWNrIGN0X2dlbmVyYWw7CisKKwkvKiBIYXZlIHdlIHNlZW4gdHJhZmZpYyBib3RoIHdheXMgeWV0PyAoYml0c2V0KSAqLworCXVuc2lnbmVkIGxvbmcgc3RhdHVzOworCisJLyogVGltZXIgZnVuY3Rpb247IGRyb3BzIHJlZmNudCB3aGVuIGl0IGdvZXMgb2ZmLiAqLworCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVvdXQ7CisKKyNpZmRlZiBDT05GSUdfSVBfTkZfQ1RfQUNDVAorCS8qIEFjY291bnRpbmcgSW5mb3JtYXRpb24gKHNhbWUgY2FjaGUgbGluZSBhcyBvdGhlciB3cml0dGVuIG1lbWJlcnMpICovCisJc3RydWN0IGlwX2Nvbm50cmFja19jb3VudGVyIGNvdW50ZXJzW0lQX0NUX0RJUl9NQVhdOworI2VuZGlmCisJLyogSWYgd2Ugd2VyZSBleHBlY3RlZCBieSBhbiBleHBlY3RhdGlvbiwgdGhpcyB3aWxsIGJlIGl0ICovCisJc3RydWN0IGlwX2Nvbm50cmFjayAqbWFzdGVyOworCisJLyogQ3VycmVudCBudW1iZXIgb2YgZXhwZWN0ZWQgY29ubmVjdGlvbnMgKi8KKwl1bnNpZ25lZCBpbnQgZXhwZWN0aW5nOworCisJLyogSGVscGVyLCBpZiBhbnkuICovCisJc3RydWN0IGlwX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcjsKKworCS8qIFN0b3JhZ2UgcmVzZXJ2ZWQgZm9yIG90aGVyIG1vZHVsZXM6ICovCisJdW5pb24gaXBfY29ubnRyYWNrX3Byb3RvIHByb3RvOworCisJdW5pb24gaXBfY29ubnRyYWNrX2hlbHAgaGVscDsKKworI2lmZGVmIENPTkZJR19JUF9ORl9OQVRfTkVFREVECisJc3RydWN0IHsKKwkJc3RydWN0IGlwX25hdF9pbmZvIGluZm87CisjaWYgZGVmaW5lZChDT05GSUdfSVBfTkZfVEFSR0VUX01BU1FVRVJBREUpIHx8IFwKKwlkZWZpbmVkKENPTkZJR19JUF9ORl9UQVJHRVRfTUFTUVVFUkFERV9NT0RVTEUpCisJCWludCBtYXNxX2luZGV4OworI2VuZGlmCisJfSBuYXQ7CisjZW5kaWYgLyogQ09ORklHX0lQX05GX05BVF9ORUVERUQgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX0lQX05GX0NPTk5UUkFDS19NQVJLKQorCXVuc2lnbmVkIGxvbmcgbWFyazsKKyNlbmRpZgorCisJLyogVHJhdmVyc2VkIG9mdGVuLCBzbyBob3BlZnVsbHkgaW4gZGlmZmVyZW50IGNhY2hlbGluZSB0byB0b3AgKi8KKwkvKiBUaGVzZSBhcmUgbXkgdHVwbGVzOyBvcmlnaW5hbCBhbmQgcmVwbHkgKi8KKwlzdHJ1Y3QgaXBfY29ubnRyYWNrX3R1cGxlX2hhc2ggdHVwbGVoYXNoW0lQX0NUX0RJUl9NQVhdOworfTsKKworc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QKK3sKKwkvKiBJbnRlcm5hbCBsaW5rZWQgbGlzdCAoZ2xvYmFsIGV4cGVjdGF0aW9uIGxpc3QpICovCisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCisJLyogV2UgZXhwZWN0IHRoaXMgdHVwbGUsIHdpdGggdGhlIGZvbGxvd2luZyBtYXNrICovCisJc3RydWN0IGlwX2Nvbm50cmFja190dXBsZSB0dXBsZSwgbWFzazsKKyAKKwkvKiBGdW5jdGlvbiB0byBjYWxsIGFmdGVyIHNldHVwIGFuZCBpbnNlcnRpb24gKi8KKwl2b2lkICgqZXhwZWN0Zm4pKHN0cnVjdCBpcF9jb25udHJhY2sgKm5ldywKKwkJCSBzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqdGhpcyk7CisKKwkvKiBUaGUgY29ubnRyYWNrIG9mIHRoZSBtYXN0ZXIgY29ubmVjdGlvbiAqLworCXN0cnVjdCBpcF9jb25udHJhY2sgKm1hc3RlcjsKKworCS8qIFRpbWVyIGZ1bmN0aW9uOyBkZWxldGVzIHRoZSBleHBlY3RhdGlvbi4gKi8KKwlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lb3V0OworCisjaWZkZWYgQ09ORklHX0lQX05GX05BVF9ORUVERUQKKwkvKiBUaGlzIGlzIHRoZSBvcmlnaW5hbCBwZXItcHJvdG8gcGFydCwgdXNlZCB0byBtYXAgdGhlCisJICogZXhwZWN0ZWQgY29ubmVjdGlvbiB0aGUgd2F5IHRoZSByZWNpcGllbnQgZXhwZWN0cy4gKi8KKwl1bmlvbiBpcF9jb25udHJhY2tfbWFuaXBfcHJvdG8gc2F2ZWRfcHJvdG87CisJLyogRGlyZWN0aW9uIHJlbGF0aXZlIHRvIHRoZSBtYXN0ZXIgY29ubmVjdGlvbi4gKi8KKwllbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyOworI2VuZGlmCit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpcF9jb25udHJhY2sgKgordHVwbGVoYXNoX3RvX2N0cmFjayhjb25zdCBzdHJ1Y3QgaXBfY29ubnRyYWNrX3R1cGxlX2hhc2ggKmhhc2gpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihoYXNoLCBzdHJ1Y3QgaXBfY29ubnRyYWNrLAorCQkJICAgIHR1cGxlaGFzaFtoYXNoLT50dXBsZS5kc3QuZGlyXSk7Cit9CisKKy8qIGdldCBtYXN0ZXIgY29ubnRyYWNrIHZpYSBtYXN0ZXIgZXhwZWN0YXRpb24gKi8KKyNkZWZpbmUgbWFzdGVyX2N0KGNvbm50cikgKGNvbm50ci0+bWFzdGVyKQorCisvKiBBbHRlciByZXBseSB0dXBsZSAobWF5YmUgYWx0ZXIgaGVscGVyKS4gKi8KK2V4dGVybiB2b2lkCitpcF9jb25udHJhY2tfYWx0ZXJfcmVwbHkoc3RydWN0IGlwX2Nvbm50cmFjayAqY29ubnRyYWNrLAorCQkJIGNvbnN0IHN0cnVjdCBpcF9jb25udHJhY2tfdHVwbGUgKm5ld3JlcGx5KTsKKworLyogSXMgdGhpcyB0dXBsZSB0YWtlbj8gKGlnbm9yaW5nIGFueSBiZWxvbmdpbmcgdG8gdGhlIGdpdmVuCisgICBjb25udHJhY2spLiAqLworZXh0ZXJuIGludAoraXBfY29ubnRyYWNrX3R1cGxlX3Rha2VuKGNvbnN0IHN0cnVjdCBpcF9jb25udHJhY2tfdHVwbGUgKnR1cGxlLAorCQkJIGNvbnN0IHN0cnVjdCBpcF9jb25udHJhY2sgKmlnbm9yZWRfY29ubnRyYWNrKTsKKworLyogUmV0dXJuIGNvbm50cmFja19pbmZvIGFuZCB0dXBsZSBoYXNoIGZvciBnaXZlbiBza2IuICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpcF9jb25udHJhY2sgKgoraXBfY29ubnRyYWNrX2dldChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIGlwX2Nvbm50cmFja19pbmZvICpjdGluZm8pCit7CisJKmN0aW5mbyA9IHNrYi0+bmZjdGluZm87CisJcmV0dXJuIChzdHJ1Y3QgaXBfY29ubnRyYWNrICopc2tiLT5uZmN0OworfQorCisvKiBkZWNyZW1lbnQgcmVmZXJlbmNlIGNvdW50IG9uIGEgY29ubnRyYWNrICovCitleHRlcm4gaW5saW5lIHZvaWQgaXBfY29ubnRyYWNrX3B1dChzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCk7CisKKy8qIGNhbGwgdG8gY3JlYXRlIGFuIGV4cGxpY2l0IGRlcGVuZGVuY3kgb24gaXBfY29ubnRyYWNrLiAqLworZXh0ZXJuIHZvaWQgbmVlZF9pcF9jb25udHJhY2sodm9pZCk7CisKK2V4dGVybiBpbnQgaW52ZXJ0X3R1cGxlcHIoc3RydWN0IGlwX2Nvbm50cmFja190dXBsZSAqaW52ZXJzZSwKKwkJCSAgY29uc3Qgc3RydWN0IGlwX2Nvbm50cmFja190dXBsZSAqb3JpZyk7CisKKy8qIFJlZnJlc2ggY29ubnRyYWNrIGZvciB0aGlzIG1hbnkgamlmZmllcyAqLworZXh0ZXJuIHZvaWQgaXBfY3RfcmVmcmVzaF9hY2N0KHN0cnVjdCBpcF9jb25udHJhY2sgKmN0LAorCQkJICAgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBleHRyYV9qaWZmaWVzKTsKKworLyogVGhlc2UgYXJlIGZvciBOQVQuICBJY2t5LiAqLworLyogVXBkYXRlIFRDUCB3aW5kb3cgdHJhY2tpbmcgZGF0YSB3aGVuIE5BVCBtYW5nbGVzIHRoZSBwYWNrZXQgKi8KK2V4dGVybiB2b2lkIGlwX2Nvbm50cmFja190Y3BfdXBkYXRlKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgIHN0cnVjdCBpcF9jb25udHJhY2sgKmNvbm50cmFjaywKKwkJCQkgICAgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcik7CisKKy8qIENhbGwgbWUgd2hlbiBhIGNvbm50cmFjayBpcyBkZXN0cm95ZWQuICovCitleHRlcm4gdm9pZCAoKmlwX2Nvbm50cmFja19kZXN0cm95ZWQpKHN0cnVjdCBpcF9jb25udHJhY2sgKmNvbm50cmFjayk7CisKKy8qIEZha2UgY29ubnRyYWNrIGVudHJ5IGZvciB1bnRyYWNrZWQgY29ubmVjdGlvbnMgKi8KK2V4dGVybiBzdHJ1Y3QgaXBfY29ubnRyYWNrIGlwX2Nvbm50cmFja191bnRyYWNrZWQ7CisKKy8qIFJldHVybnMgbmV3IHNrX2J1ZmYsIG9yIE5VTEwgKi8KK3N0cnVjdCBza19idWZmICoKK2lwX2N0X2dhdGhlcl9mcmFncyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1X2ludDMyX3QgdXNlcik7CisKKy8qIEl0ZXJhdGUgb3ZlciBhbGwgY29ubnRyYWNrczogaWYgaXRlciByZXR1cm5zIHRydWUsIGl0J3MgZGVsZXRlZC4gKi8KK2V4dGVybiB2b2lkCitpcF9jdF9pdGVyYXRlX2NsZWFudXAoaW50ICgqaXRlcikoc3RydWN0IGlwX2Nvbm50cmFjayAqaSwgdm9pZCAqZGF0YSksCisJCSAgICAgIHZvaWQgKmRhdGEpOworCisvKiBJdCdzIGNvbmZpcm1lZCBpZiBpdCBpcywgb3IgaGFzIGJlZW4gaW4gdGhlIGhhc2ggdGFibGUuICovCitzdGF0aWMgaW5saW5lIGludCBpc19jb25maXJtZWQoc3RydWN0IGlwX2Nvbm50cmFjayAqY3QpCit7CisJcmV0dXJuIHRlc3RfYml0KElQU19DT05GSVJNRURfQklULCAmY3QtPnN0YXR1cyk7Cit9CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgaXBfY29ubnRyYWNrX2h0YWJsZV9zaXplOworIAorc3RydWN0IGlwX2Nvbm50cmFja19zdGF0Cit7CisJdW5zaWduZWQgaW50IHNlYXJjaGVkOworCXVuc2lnbmVkIGludCBmb3VuZDsKKwl1bnNpZ25lZCBpbnQgbmV3OworCXVuc2lnbmVkIGludCBpbnZhbGlkOworCXVuc2lnbmVkIGludCBpZ25vcmU7CisJdW5zaWduZWQgaW50IGRlbGV0ZTsKKwl1bnNpZ25lZCBpbnQgZGVsZXRlX2xpc3Q7CisJdW5zaWduZWQgaW50IGluc2VydDsKKwl1bnNpZ25lZCBpbnQgaW5zZXJ0X2ZhaWxlZDsKKwl1bnNpZ25lZCBpbnQgZHJvcDsKKwl1bnNpZ25lZCBpbnQgZWFybHlfZHJvcDsKKwl1bnNpZ25lZCBpbnQgZXJyb3I7CisJdW5zaWduZWQgaW50IGV4cGVjdF9uZXc7CisJdW5zaWduZWQgaW50IGV4cGVjdF9jcmVhdGU7CisJdW5zaWduZWQgaW50IGV4cGVjdF9kZWxldGU7Cit9OworCisjZGVmaW5lIENPTk5UUkFDS19TVEFUX0lOQyhjb3VudCkgKF9fZ2V0X2NwdV92YXIoaXBfY29ubnRyYWNrX3N0YXQpLmNvdW50KyspCisKKyNpZmRlZiBDT05GSUdfSVBfTkZfTkFUX05FRURFRAorc3RhdGljIGlubGluZSBpbnQgaXBfbmF0X2luaXRpYWxpemVkKHN0cnVjdCBpcF9jb25udHJhY2sgKmNvbm50cmFjaywKKwkJCQkgICAgIGVudW0gaXBfbmF0X21hbmlwX3R5cGUgbWFuaXApCit7CisJaWYgKG1hbmlwID09IElQX05BVF9NQU5JUF9TUkMpCisJCXJldHVybiB0ZXN0X2JpdChJUFNfU1JDX05BVF9ET05FX0JJVCwgJmNvbm50cmFjay0+c3RhdHVzKTsKKwlyZXR1cm4gdGVzdF9iaXQoSVBTX0RTVF9OQVRfRE9ORV9CSVQsICZjb25udHJhY2stPnN0YXR1cyk7Cit9CisjZW5kaWYgLyogQ09ORklHX0lQX05GX05BVF9ORUVERUQgKi8KKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAvKiBfSVBfQ09OTlRSQUNLX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2FtYW5kYS5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfYW1hbmRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGUzZTQxZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2FtYW5kYS5oCkBAIC0wLDAgKzEsMTEgQEAKKyNpZm5kZWYgX0lQX0NPTk5UUkFDS19BTUFOREFfSAorI2RlZmluZSBfSVBfQ09OTlRSQUNLX0FNQU5EQV9ICisvKiBBTUFOREEgdHJhY2tpbmcuICovCisKK3N0cnVjdCBpcF9jb25udHJhY2tfZXhwZWN0OworZXh0ZXJuIHVuc2lnbmVkIGludCAoKmlwX25hdF9hbWFuZGFfaG9vaykoc3RydWN0IHNrX2J1ZmYgKipwc2tiLAorCQkJCQkgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkJCQkgIHVuc2lnbmVkIGludCBtYXRjaG9mZiwKKwkJCQkJICB1bnNpZ25lZCBpbnQgbWF0Y2hsZW4sCisJCQkJCSAgc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKmV4cCk7CisjZW5kaWYgLyogX0lQX0NPTk5UUkFDS19BTUFOREFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfY29yZS5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfY29yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4NGJlMDJjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfY29yZS5oCkBAIC0wLDAgKzEsNTIgQEAKKyNpZm5kZWYgX0lQX0NPTk5UUkFDS19DT1JFX0gKKyNkZWZpbmUgX0lQX0NPTk5UUkFDS19DT1JFX0gKKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9sb2NraGVscC5oPgorCisvKiBUaGlzIGhlYWRlciBpcyB1c2VkIHRvIHNoYXJlIGNvcmUgZnVuY3Rpb25hbGl0eSBiZXR3ZWVuIHRoZQorICAgc3RhbmRhbG9uZSBjb25uZWN0aW9uIHRyYWNraW5nIG1vZHVsZSwgYW5kIHRoZSBjb21wYXRpYmlsaXR5IGxheWVyJ3MgdXNlCisgICBvZiBjb25uZWN0aW9uIHRyYWNraW5nLiAqLworZXh0ZXJuIHVuc2lnbmVkIGludCBpcF9jb25udHJhY2tfaW4odW5zaWduZWQgaW50IGhvb2tudW0sCisJCQkJICAgIHN0cnVjdCBza19idWZmICoqcHNrYiwKKwkJCQkgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAorCQkJCSAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAorCQkJCSAgICBpbnQgKCpva2ZuKShzdHJ1Y3Qgc2tfYnVmZiAqKSk7CisKK2V4dGVybiBpbnQgaXBfY29ubnRyYWNrX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBpcF9jb25udHJhY2tfY2xlYW51cCh2b2lkKTsKKworc3RydWN0IGlwX2Nvbm50cmFja19wcm90b2NvbDsKKworZXh0ZXJuIGludAoraXBfY3RfZ2V0X3R1cGxlKGNvbnN0IHN0cnVjdCBpcGhkciAqaXBoLAorCQljb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQl1bnNpZ25lZCBpbnQgZGF0YW9mZiwKKwkJc3RydWN0IGlwX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCisJCWNvbnN0IHN0cnVjdCBpcF9jb25udHJhY2tfcHJvdG9jb2wgKnByb3RvY29sKTsKKworZXh0ZXJuIGludAoraXBfY3RfaW52ZXJ0X3R1cGxlKHN0cnVjdCBpcF9jb25udHJhY2tfdHVwbGUgKmludmVyc2UsCisJCSAgIGNvbnN0IHN0cnVjdCBpcF9jb25udHJhY2tfdHVwbGUgKm9yaWcsCisJCSAgIGNvbnN0IHN0cnVjdCBpcF9jb25udHJhY2tfcHJvdG9jb2wgKnByb3RvY29sKTsKKworLyogRmluZCBhIGNvbm5lY3Rpb24gY29ycmVzcG9uZGluZyB0byBhIHR1cGxlLiAqLworc3RydWN0IGlwX2Nvbm50cmFja190dXBsZV9oYXNoICoKK2lwX2Nvbm50cmFja19maW5kX2dldChjb25zdCBzdHJ1Y3QgaXBfY29ubnRyYWNrX3R1cGxlICp0dXBsZSwKKwkJICAgICAgY29uc3Qgc3RydWN0IGlwX2Nvbm50cmFjayAqaWdub3JlZF9jb25udHJhY2spOworCitleHRlcm4gaW50IF9faXBfY29ubnRyYWNrX2NvbmZpcm0oc3RydWN0IHNrX2J1ZmYgKipwc2tiKTsKKworLyogQ29uZmlybSBhIGNvbm5lY3Rpb246IHJldHVybnMgTkZfRFJPUCBpZiBwYWNrZXQgbXVzdCBiZSBkcm9wcGVkLiAqLworc3RhdGljIGlubGluZSBpbnQgaXBfY29ubnRyYWNrX2NvbmZpcm0oc3RydWN0IHNrX2J1ZmYgKipwc2tiKQoreworCWlmICgoKnBza2IpLT5uZmN0CisJICAgICYmICFpc19jb25maXJtZWQoKHN0cnVjdCBpcF9jb25udHJhY2sgKikoKnBza2IpLT5uZmN0KSkKKwkJcmV0dXJuIF9faXBfY29ubnRyYWNrX2NvbmZpcm0ocHNrYik7CisJcmV0dXJuIE5GX0FDQ0VQVDsKK30KKworZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgKmlwX2Nvbm50cmFja19oYXNoOworZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgaXBfY29ubnRyYWNrX2V4cGVjdF9saXN0OworREVDTEFSRV9SV0xPQ0tfRVhURVJOKGlwX2Nvbm50cmFja19sb2NrKTsKKyNlbmRpZiAvKiBfSVBfQ09OTlRSQUNLX0NPUkVfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19mdHAuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2Z0cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmMDY0MjkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19mdHAuaApAQCAtMCwwICsxLDQzIEBACisjaWZuZGVmIF9JUF9DT05OVFJBQ0tfRlRQX0gKKyNkZWZpbmUgX0lQX0NPTk5UUkFDS19GVFBfSAorLyogRlRQIHRyYWNraW5nLiAqLworCisjaWZkZWYgX19LRVJORUxfXworCisjZGVmaW5lIEZUUF9QT1JUCTIxCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKK2VudW0gaXBfY3RfZnRwX3R5cGUKK3sKKwkvKiBQT1JUIGNvbW1hbmQgZnJvbSBjbGllbnQgKi8KKwlJUF9DVF9GVFBfUE9SVCwKKwkvKiBQQVNWIHJlc3BvbnNlIGZyb20gc2VydmVyICovCisJSVBfQ1RfRlRQX1BBU1YsCisJLyogRVBSVCBjb21tYW5kIGZyb20gY2xpZW50ICovCisJSVBfQ1RfRlRQX0VQUlQsCisJLyogRVBTViByZXNwb25zZSBmcm9tIHNlcnZlciAqLworCUlQX0NUX0ZUUF9FUFNWLAorfTsKKworI2RlZmluZSBOVU1fU0VRX1RPX1JFTUVNQkVSIDIKKy8qIFRoaXMgc3RydWN0dXJlIGV4aXN0cyBvbmx5IG9uY2UgcGVyIG1hc3RlciAqLworc3RydWN0IGlwX2N0X2Z0cF9tYXN0ZXIgeworCS8qIFZhbGlkIHNlcSBwb3NpdGlvbnMgZm9yIGNtZCBtYXRjaGluZyBhZnRlciBuZXdsaW5lICovCisJdV9pbnQzMl90IHNlcV9hZnRfbmxbSVBfQ1RfRElSX01BWF1bTlVNX1NFUV9UT19SRU1FTUJFUl07CisJLyogMCBtZWFucyBzZXFfbWF0Y2hfYWZ0X25sIG5vdCBzZXQgKi8KKwlpbnQgc2VxX2FmdF9ubF9udW1bSVBfQ1RfRElSX01BWF07Cit9OworCitzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdDsKKworLyogRm9yIE5BVCB0byBob29rIGluIHdoZW4gd2UgZmluZCBhIHBhY2tldCB3aGljaCBkZXNjcmliZXMgd2hhdCBvdGhlcgorICogY29ubmVjdGlvbiB3ZSBzaG91bGQgZXhwZWN0LiAqLworZXh0ZXJuIHVuc2lnbmVkIGludCAoKmlwX25hdF9mdHBfaG9vaykoc3RydWN0IHNrX2J1ZmYgKipwc2tiLAorCQkJCSAgICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCQkgICAgICAgZW51bSBpcF9jdF9mdHBfdHlwZSB0eXBlLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgbWF0Y2hvZmYsCisJCQkJICAgICAgIHVuc2lnbmVkIGludCBtYXRjaGxlbiwKKwkJCQkgICAgICAgc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKmV4cCwKKwkJCQkgICAgICAgdTMyICpzZXEpOworI2VuZGlmIC8qIF9JUF9DT05OVFJBQ0tfRlRQX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2hlbHBlci5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfaGVscGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFiYmJhMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2hlbHBlci5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qIElQIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVycy4gKi8KKyNpZm5kZWYgX0lQX0NPTk5UUkFDS19IRUxQRVJfSAorI2RlZmluZSBfSVBfQ09OTlRSQUNLX0hFTFBFUl9ICisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrLmg+CisKK3N0cnVjdCBtb2R1bGU7CisKK3N0cnVjdCBpcF9jb25udHJhY2tfaGVscGVyCit7CQorCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsgCQkvKiBJbnRlcm5hbCB1c2UuICovCisKKwljb25zdCBjaGFyICpuYW1lOwkJLyogbmFtZSBvZiB0aGUgbW9kdWxlICovCisJc3RydWN0IG1vZHVsZSAqbWU7CQkvKiBwb2ludGVyIHRvIHNlbGYgKi8KKwl1bnNpZ25lZCBpbnQgbWF4X2V4cGVjdGVkOwkvKiBNYXhpbXVtIG51bWJlciBvZiBjb25jdXJyZW50IAorCQkJCQkgKiBleHBlY3RlZCBjb25uZWN0aW9ucyAqLworCXVuc2lnbmVkIGludCB0aW1lb3V0OwkJLyogdGltZW91dCBmb3IgZXhwZWN0ZWRzICovCisKKwkvKiBNYXNrIG9mIHRoaW5ncyB3ZSB3aWxsIGhlbHAgKGNvbXBhcmVkIGFnYWluc3Qgc2VydmVyIHJlc3BvbnNlKSAqLworCXN0cnVjdCBpcF9jb25udHJhY2tfdHVwbGUgdHVwbGU7CisJc3RydWN0IGlwX2Nvbm50cmFja190dXBsZSBtYXNrOworCQorCS8qIEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBkYXRhIHBhc3NlczsgcmV0dXJuIHZlcmRpY3QsIG9yIC0xIHRvCisgICAgICAgICAgIGludmFsaWRhdGUuICovCisJaW50ICgqaGVscCkoc3RydWN0IHNrX2J1ZmYgKipwc2tiLAorCQkgICAgc3RydWN0IGlwX2Nvbm50cmFjayAqY3QsCisJCSAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGNvbm50cmFja2luZm8pOworfTsKKworZXh0ZXJuIGludCBpcF9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKHN0cnVjdCBpcF9jb25udHJhY2tfaGVscGVyICopOworZXh0ZXJuIHZvaWQgaXBfY29ubnRyYWNrX2hlbHBlcl91bnJlZ2lzdGVyKHN0cnVjdCBpcF9jb25udHJhY2tfaGVscGVyICopOworCisvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgYW4gZXhwZWN0YXRpb246IHRoaXMgaXMgbWFuZGF0b3J5IGJlZm9yZSBjYWxsaW5nIAorICAgaXBfY29ubnRyYWNrX2V4cGVjdF9yZWxhdGVkLiAqLworZXh0ZXJuIHN0cnVjdCBpcF9jb25udHJhY2tfZXhwZWN0ICppcF9jb25udHJhY2tfZXhwZWN0X2FsbG9jKHZvaWQpOworZXh0ZXJuIHZvaWQgaXBfY29ubnRyYWNrX2V4cGVjdF9mcmVlKHN0cnVjdCBpcF9jb25udHJhY2tfZXhwZWN0ICpleHApOworCisvKiBBZGQgYW4gZXhwZWN0ZWQgY29ubmVjdGlvbjogY2FuIGhhdmUgbW9yZSB0aGFuIG9uZSBwZXIgY29ubmVjdGlvbiAqLworZXh0ZXJuIGludCBpcF9jb25udHJhY2tfZXhwZWN0X3JlbGF0ZWQoc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKmV4cCk7CitleHRlcm4gdm9pZCBpcF9jb25udHJhY2tfdW5leHBlY3RfcmVsYXRlZChzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqZXhwKTsKKworI2VuZGlmIC8qX0lQX0NPTk5UUkFDS19IRUxQRVJfSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19pY21wLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19pY21wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE2NjRhYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2ljbXAuaApAQCAtMCwwICsxLDExIEBACisjaWZuZGVmIF9JUF9DT05OVFJBQ0tfSUNNUF9ICisjZGVmaW5lIF9JUF9DT05OVFJBQ0tfSUNNUF9ICisvKiBJQ01QIHRyYWNraW5nLiAqLworI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKworc3RydWN0IGlwX2N0X2ljbXAKK3sKKwkvKiBPcHRpbWl6YXRpb246IHdoZW4gbnVtYmVyIGluID09IG51bWJlciBvdXQsIGZvcmdldCBpbW1lZGlhdGVseS4gKi8KKwlhdG9taWNfdCBjb3VudDsKK307CisjZW5kaWYgLyogX0lQX0NPTk5UUkFDS19JQ01QX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2lyYy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfaXJjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY2MDFlMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2lyYy5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qIElSQyBleHRlbnNpb24gZm9yIElQIGNvbm5lY3Rpb24gdHJhY2tpbmcuCisgKiAoQykgMjAwMCBieSBIYXJhbGQgV2VsdGUgPGxhZm9yZ2VAZ251bW9ua3Mub3JnPgorICogYmFzZWQgb24gUlIncyBpcF9jb25udHJhY2tfZnRwLmgKKyAqCisgKiBpcF9jb25udHJhY2tfaXJjLmgsdiAxLjYgMjAwMC8xMS8wNyAxODoyNjo0MiBsYWZvcmdlIEV4cAorICoKKyAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICAgICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqICAgICAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKgorICovCisjaWZuZGVmIF9JUF9DT05OVFJBQ0tfSVJDX0gKKyNkZWZpbmUgX0lQX0NPTk5UUkFDS19JUkNfSAorCisvKiBUaGlzIHN0cnVjdHVyZSBleGlzdHMgb25seSBvbmNlIHBlciBtYXN0ZXIgKi8KK3N0cnVjdCBpcF9jdF9pcmNfbWFzdGVyIHsKK307CisKKyNpZmRlZiBfX0tFUk5FTF9fCitleHRlcm4gdW5zaWduZWQgaW50ICgqaXBfbmF0X2lyY19ob29rKShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCisJCQkJICAgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgbWF0Y2hvZmYsCisJCQkJICAgICAgIHVuc2lnbmVkIGludCBtYXRjaGxlbiwKKwkJCQkgICAgICAgc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKmV4cCk7CisKKyNkZWZpbmUgSVJDX1BPUlQJNjY2NworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX0lQX0NPTk5UUkFDS19JUkNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfcHJvdG9jb2wuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX3Byb3RvY29sLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTIwYjU3YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX3Byb3RvY29sLmgKQEAgLTAsMCArMSw4OSBAQAorLyogSGVhZGVyIGZvciB1c2UgaW4gZGVmaW5pbmcgYSBnaXZlbiBwcm90b2NvbCBmb3IgY29ubmVjdGlvbiB0cmFja2luZy4gKi8KKyNpZm5kZWYgX0lQX0NPTk5UUkFDS19QUk9UT0NPTF9ICisjZGVmaW5lIF9JUF9DT05OVFJBQ0tfUFJPVE9DT0xfSAorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFjay5oPgorCitzdHJ1Y3Qgc2VxX2ZpbGU7CisKK3N0cnVjdCBpcF9jb25udHJhY2tfcHJvdG9jb2wKK3sKKwkvKiBQcm90b2NvbCBudW1iZXIuICovCisJdV9pbnQ4X3QgcHJvdG87CisKKwkvKiBQcm90b2NvbCBuYW1lICovCisJY29uc3QgY2hhciAqbmFtZTsKKworCS8qIFRyeSB0byBmaWxsIGluIHRoZSB0aGlyZCBhcmc6IGRhdGFvZmYgaXMgb2Zmc2V0IHBhc3QgSVAKKyAgICAgICAgICAgaGRyLiAgUmV0dXJuIHRydWUgaWYgcG9zc2libGUuICovCisJaW50ICgqcGt0X3RvX3R1cGxlKShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgdW5zaWduZWQgaW50IGRhdGFvZmYsCisJCQkgICBzdHJ1Y3QgaXBfY29ubnRyYWNrX3R1cGxlICp0dXBsZSk7CisKKwkvKiBJbnZlcnQgdGhlIHBlci1wcm90byBwYXJ0IG9mIHRoZSB0dXBsZTogaWUuIHR1cm4geG1pdCBpbnRvIHJlcGx5LgorCSAqIFNvbWUgcGFja2V0cyBjYW4ndCBiZSBpbnZlcnRlZDogcmV0dXJuIDAgaW4gdGhhdCBjYXNlLgorCSAqLworCWludCAoKmludmVydF90dXBsZSkoc3RydWN0IGlwX2Nvbm50cmFja190dXBsZSAqaW52ZXJzZSwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgaXBfY29ubnRyYWNrX3R1cGxlICpvcmlnKTsKKworCS8qIFByaW50IG91dCB0aGUgcGVyLXByb3RvY29sIHBhcnQgb2YgdGhlIHR1cGxlLiBSZXR1cm4gbGlrZSBzZXFfKiAqLworCWludCAoKnByaW50X3R1cGxlKShzdHJ1Y3Qgc2VxX2ZpbGUgKiwKKwkJCSAgIGNvbnN0IHN0cnVjdCBpcF9jb25udHJhY2tfdHVwbGUgKik7CisKKwkvKiBQcmludCBvdXQgdGhlIHByaXZhdGUgcGFydCBvZiB0aGUgY29ubnRyYWNrLiAqLworCWludCAoKnByaW50X2Nvbm50cmFjaykoc3RydWN0IHNlcV9maWxlICosIGNvbnN0IHN0cnVjdCBpcF9jb25udHJhY2sgKik7CisKKwkvKiBSZXR1cm5zIHZlcmRpY3QgZm9yIHBhY2tldCwgb3IgLTEgZm9yIGludmFsaWQuICovCisJaW50ICgqcGFja2V0KShzdHJ1Y3QgaXBfY29ubnRyYWNrICpjb25udHJhY2ssCisJCSAgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCisJCSAgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvKTsKKworCS8qIENhbGxlZCB3aGVuIGEgbmV3IGNvbm5lY3Rpb24gZm9yIHRoaXMgcHJvdG9jb2wgZm91bmQ7CisJICogcmV0dXJucyBUUlVFIGlmIGl0J3MgT0suICBJZiBzbywgcGFja2V0KCkgY2FsbGVkIG5leHQuICovCisJaW50ICgqbmV3KShzdHJ1Y3QgaXBfY29ubnRyYWNrICpjb25udHJhY2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpOworCisJLyogQ2FsbGVkIHdoZW4gYSBjb25udHJhY2sgZW50cnkgaXMgZGVzdHJveWVkICovCisJdm9pZCAoKmRlc3Ryb3kpKHN0cnVjdCBpcF9jb25udHJhY2sgKmNvbm50cmFjayk7CisKKwlpbnQgKCplcnJvcikoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBpcF9jb25udHJhY2tfaW5mbyAqY3RpbmZvLAorCQkgICAgIHVuc2lnbmVkIGludCBob29rbnVtKTsKKworCS8qIE1vZHVsZSAoaWYgYW55KSB3aGljaCB0aGlzIGlzIGNvbm5lY3RlZCB0by4gKi8KKwlzdHJ1Y3QgbW9kdWxlICptZTsKK307CisKKyNkZWZpbmUgTUFYX0lQX0NUX1BST1RPIDI1NgorZXh0ZXJuIHN0cnVjdCBpcF9jb25udHJhY2tfcHJvdG9jb2wgKmlwX2N0X3Byb3Rvc1tNQVhfSVBfQ1RfUFJPVE9dOworCisvKiBQcm90b2NvbCByZWdpc3RyYXRpb24uICovCitleHRlcm4gaW50IGlwX2Nvbm50cmFja19wcm90b2NvbF9yZWdpc3RlcihzdHJ1Y3QgaXBfY29ubnRyYWNrX3Byb3RvY29sICpwcm90byk7CitleHRlcm4gdm9pZCBpcF9jb25udHJhY2tfcHJvdG9jb2xfdW5yZWdpc3RlcihzdHJ1Y3QgaXBfY29ubnRyYWNrX3Byb3RvY29sICpwcm90byk7CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGlwX2Nvbm50cmFja19wcm90b2NvbCAqaXBfY3RfZmluZF9wcm90byh1X2ludDhfdCBwcm90b2NvbCkKK3sKKwlyZXR1cm4gaXBfY3RfcHJvdG9zW3Byb3RvY29sXTsKK30KKworLyogRXhpc3RpbmcgYnVpbHQtaW4gcHJvdG9jb2xzICovCitleHRlcm4gc3RydWN0IGlwX2Nvbm50cmFja19wcm90b2NvbCBpcF9jb25udHJhY2tfcHJvdG9jb2xfdGNwOworZXh0ZXJuIHN0cnVjdCBpcF9jb25udHJhY2tfcHJvdG9jb2wgaXBfY29ubnRyYWNrX3Byb3RvY29sX3VkcDsKK2V4dGVybiBzdHJ1Y3QgaXBfY29ubnRyYWNrX3Byb3RvY29sIGlwX2Nvbm50cmFja19wcm90b2NvbF9pY21wOworZXh0ZXJuIHN0cnVjdCBpcF9jb25udHJhY2tfcHJvdG9jb2wgaXBfY29ubnRyYWNrX2dlbmVyaWNfcHJvdG9jb2w7CitleHRlcm4gaW50IGlwX2Nvbm50cmFja19wcm90b2NvbF90Y3BfaW5pdCh2b2lkKTsKKworLyogTG9nIGludmFsaWQgcGFja2V0cyAqLworZXh0ZXJuIHVuc2lnbmVkIGludCBpcF9jdF9sb2dfaW52YWxpZDsKKworI2lmZGVmIENPTkZJR19TWVNDVEwKKyNpZmRlZiBERUJVR19JTlZBTElEX1BBQ0tFVFMKKyNkZWZpbmUgTE9HX0lOVkFMSUQocHJvdG8pIFwKKwkoaXBfY3RfbG9nX2ludmFsaWQgPT0gKHByb3RvKSB8fCBpcF9jdF9sb2dfaW52YWxpZCA9PSBJUFBST1RPX1JBVykKKyNlbHNlCisjZGVmaW5lIExPR19JTlZBTElEKHByb3RvKSBcCisJKChpcF9jdF9sb2dfaW52YWxpZCA9PSAocHJvdG8pIHx8IGlwX2N0X2xvZ19pbnZhbGlkID09IElQUFJPVE9fUkFXKSBcCisJICYmIG5ldF9yYXRlbGltaXQoKSkKKyNlbmRpZgorI2Vsc2UKKyNkZWZpbmUgTE9HX0lOVkFMSUQocHJvdG8pIDAKKyNlbmRpZiAvKiBDT05GSUdfU1lTQ1RMICovCisKKyNlbmRpZiAvKl9JUF9DT05OVFJBQ0tfUFJPVE9DT0xfSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19zY3RwLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19zY3RwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E4ZDg2OQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX3NjdHAuaApAQCAtMCwwICsxLDI1IEBACisjaWZuZGVmIF9JUF9DT05OVFJBQ0tfU0NUUF9ICisjZGVmaW5lIF9JUF9DT05OVFJBQ0tfU0NUUF9ICisvKiBTQ1RQIHRyYWNraW5nLiAqLworCitlbnVtIHNjdHBfY29ubnRyYWNrIHsKKwlTQ1RQX0NPTk5UUkFDS19OT05FLAorCVNDVFBfQ09OTlRSQUNLX0NMT1NFRCwKKwlTQ1RQX0NPTk5UUkFDS19DT09LSUVfV0FJVCwKKwlTQ1RQX0NPTk5UUkFDS19DT09LSUVfRUNIT0VELAorCVNDVFBfQ09OTlRSQUNLX0VTVEFCTElTSEVELAorCVNDVFBfQ09OTlRSQUNLX1NIVVRET1dOX1NFTlQsCisJU0NUUF9DT05OVFJBQ0tfU0hVVERPV05fUkVDRCwKKwlTQ1RQX0NPTk5UUkFDS19TSFVURE9XTl9BQ0tfU0VOVCwKKwlTQ1RQX0NPTk5UUkFDS19NQVgKK307CisKK3N0cnVjdCBpcF9jdF9zY3RwCit7CisJZW51bSBzY3RwX2Nvbm50cmFjayBzdGF0ZTsKKworCXVfaW50MzJfdCB2dGFnW0lQX0NUX0RJUl9NQVhdOworCXVfaW50MzJfdCB0dGFnW0lQX0NUX0RJUl9NQVhdOworfTsKKworI2VuZGlmIC8qIF9JUF9DT05OVFJBQ0tfU0NUUF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja190Y3AuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX3RjcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2ZGEwNDQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja190Y3AuaApAQCAtMCwwICsxLDUxIEBACisjaWZuZGVmIF9JUF9DT05OVFJBQ0tfVENQX0gKKyNkZWZpbmUgX0lQX0NPTk5UUkFDS19UQ1BfSAorLyogVENQIHRyYWNraW5nLiAqLworCitlbnVtIHRjcF9jb25udHJhY2sgeworCVRDUF9DT05OVFJBQ0tfTk9ORSwKKwlUQ1BfQ09OTlRSQUNLX1NZTl9TRU5ULAorCVRDUF9DT05OVFJBQ0tfU1lOX1JFQ1YsCisJVENQX0NPTk5UUkFDS19FU1RBQkxJU0hFRCwKKwlUQ1BfQ09OTlRSQUNLX0ZJTl9XQUlULAorCVRDUF9DT05OVFJBQ0tfQ0xPU0VfV0FJVCwKKwlUQ1BfQ09OTlRSQUNLX0xBU1RfQUNLLAorCVRDUF9DT05OVFJBQ0tfVElNRV9XQUlULAorCVRDUF9DT05OVFJBQ0tfQ0xPU0UsCisJVENQX0NPTk5UUkFDS19MSVNURU4sCisJVENQX0NPTk5UUkFDS19NQVgsCisJVENQX0NPTk5UUkFDS19JR05PUkUKK307CisKKy8qIFdpbmRvdyBzY2FsaW5nIGlzIGFkdmVydGlzZWQgYnkgdGhlIHNlbmRlciAqLworI2RlZmluZSBJUF9DVF9UQ1BfRkxBR19XSU5ET1dfU0NBTEUJCTB4MDEKKworLyogU0FDSyBpcyBwZXJtaXR0ZWQgYnkgdGhlIHNlbmRlciAqLworI2RlZmluZSBJUF9DVF9UQ1BfRkxBR19TQUNLX1BFUk0JCTB4MDIKKworLyogVGhpcyBzZW5kZXIgc2VudCBGSU4gZmlyc3QgKi8KKyNkZWZpbmUgSVBfQ1RfVENQX0ZMQUdfQ0xPU0VfSU5JVAkJMHgwMworCitzdHJ1Y3QgaXBfY3RfdGNwX3N0YXRlIHsKKwl1X2ludDMyX3QJdGRfZW5kOwkJLyogbWF4IG9mIHNlcSArIGxlbiAqLworCXVfaW50MzJfdAl0ZF9tYXhlbmQ7CS8qIG1heCBvZiBhY2sgKyBtYXgod2luLCAxKSAqLworCXVfaW50MzJfdAl0ZF9tYXh3aW47CS8qIG1heCh3aW4pICovCisJdV9pbnQ4X3QJdGRfc2NhbGU7CS8qIHdpbmRvdyBzY2FsZSBmYWN0b3IgKi8KKwl1X2ludDhfdAlsb29zZTsJCS8qIHVzZWQgd2hlbiBjb25uZWN0aW9uIHBpY2tlZCB1cCBmcm9tIHRoZSBtaWRkbGUgKi8KKwl1X2ludDhfdAlmbGFnczsJCS8qIHBlciBkaXJlY3Rpb24gb3B0aW9ucyAqLworfTsKKworc3RydWN0IGlwX2N0X3RjcAoreworCXN0cnVjdCBpcF9jdF90Y3Bfc3RhdGUgc2VlblsyXTsJLyogY29ubmVjdGlvbiBwYXJhbWV0ZXJzIHBlciBkaXJlY3Rpb24gKi8KKwl1X2ludDhfdAlzdGF0ZTsJCS8qIHN0YXRlIG9mIHRoZSBjb25uZWN0aW9uIChlbnVtIHRjcF9jb25udHJhY2spICovCisJLyogRm9yIGRldGVjdGluZyBzdGFsZSBjb25uZWN0aW9ucyAqLworCXVfaW50OF90CWxhc3RfZGlyOwkvKiBEaXJlY3Rpb24gb2YgdGhlIGxhc3QgcGFja2V0IChlbnVtIGlwX2Nvbm50cmFja19kaXIpICovCisJdV9pbnQ4X3QJcmV0cmFuczsJLyogTnVtYmVyIG9mIHJldHJhbnNtaXR0ZWQgcGFja2V0cyAqLworCXVfaW50OF90CWxhc3RfaW5kZXg7CS8qIEluZGV4IG9mIHRoZSBsYXN0IHBhY2tldCAqLworCXVfaW50MzJfdAlsYXN0X3NlcTsJLyogTGFzdCBzZXF1ZW5jZSBudW1iZXIgc2VlbiBpbiBkaXIgKi8KKwl1X2ludDMyX3QJbGFzdF9hY2s7CS8qIExhc3Qgc2VxdWVuY2UgbnVtYmVyIHNlZW4gaW4gb3Bwb3NpdGUgZGlyICovCisJdV9pbnQzMl90CWxhc3RfZW5kOwkvKiBMYXN0IHNlcSArIGxlbiAqLworfTsKKworI2VuZGlmIC8qIF9JUF9DT05OVFJBQ0tfVENQX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX3RmdHAuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX3RmdHAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGU5NzI5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfdGZ0cC5oCkBAIC0wLDAgKzEsMjAgQEAKKyNpZm5kZWYgX0lQX0NUX1RGVFAKKyNkZWZpbmUgX0lQX0NUX1RGVFAKKworI2RlZmluZSBURlRQX1BPUlQgNjkKKworc3RydWN0IHRmdHBoZHIgeworCXVfaW50MTZfdCBvcGNvZGU7Cit9OworCisjZGVmaW5lIFRGVFBfT1BDT0RFX1JFQUQJMQorI2RlZmluZSBURlRQX09QQ09ERV9XUklURQkyCisjZGVmaW5lIFRGVFBfT1BDT0RFX0RBVEEJMworI2RlZmluZSBURlRQX09QQ09ERV9BQ0sJCTQKKyNkZWZpbmUgVEZUUF9PUENPREVfRVJST1IJNQorCitleHRlcm4gdW5zaWduZWQgaW50ICgqaXBfbmF0X3RmdHBfaG9vaykoc3RydWN0IHNrX2J1ZmYgKipwc2tiLAorCQkJCSBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCQkgc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKmV4cCk7CisKKyNlbmRpZiAvKiBfSVBfQ1RfVEZUUCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfdHVwbGUuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX3R1cGxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMzZjBiNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX3R1cGxlLmgKQEAgLTAsMCArMSwxNDUgQEAKKyNpZm5kZWYgX0lQX0NPTk5UUkFDS19UVVBMRV9ICisjZGVmaW5lIF9JUF9DT05OVFJBQ0tfVFVQTEVfSAorCisvKiBBIGB0dXBsZScgaXMgYSBzdHJ1Y3R1cmUgY29udGFpbmluZyB0aGUgaW5mb3JtYXRpb24gdG8gdW5pcXVlbHkKKyAgaWRlbnRpZnkgYSBjb25uZWN0aW9uLiAgaWUuIGlmIHR3byBwYWNrZXRzIGhhdmUgdGhlIHNhbWUgdHVwbGUsIHRoZXkKKyAgYXJlIGluIHRoZSBzYW1lIGNvbm5lY3Rpb247IGlmIG5vdCwgdGhleSBhcmUgbm90LgorCisgIFdlIGRpdmlkZSB0aGUgc3RydWN0dXJlIGFsb25nICJtYW5pcHVsYXRhYmxlIiBhbmQKKyAgIm5vbi1tYW5pcHVsYXRhYmxlIiBsaW5lcywgZm9yIHRoZSBiZW5lZml0IG9mIHRoZSBOQVQgY29kZS4KKyovCisKKy8qIFRoZSBwcm90b2NvbC1zcGVjaWZpYyBtYW5pcHVsYWJsZSBwYXJ0cyBvZiB0aGUgdHVwbGU6IGFsd2F5cyBpbgorICAgbmV0d29yayBvcmRlciEgKi8KK3VuaW9uIGlwX2Nvbm50cmFja19tYW5pcF9wcm90bworeworCS8qIEFkZCBvdGhlciBwcm90b2NvbHMgaGVyZS4gKi8KKwl1X2ludDE2X3QgYWxsOworCisJc3RydWN0IHsKKwkJdV9pbnQxNl90IHBvcnQ7CisJfSB0Y3A7CisJc3RydWN0IHsKKwkJdV9pbnQxNl90IHBvcnQ7CisJfSB1ZHA7CisJc3RydWN0IHsKKwkJdV9pbnQxNl90IGlkOworCX0gaWNtcDsKKwlzdHJ1Y3QgeworCQl1X2ludDE2X3QgcG9ydDsKKwl9IHNjdHA7Cit9OworCisvKiBUaGUgbWFuaXB1bGFibGUgcGFydCBvZiB0aGUgdHVwbGUuICovCitzdHJ1Y3QgaXBfY29ubnRyYWNrX21hbmlwCit7CisJdV9pbnQzMl90IGlwOworCXVuaW9uIGlwX2Nvbm50cmFja19tYW5pcF9wcm90byB1OworfTsKKworLyogVGhpcyBjb250YWlucyB0aGUgaW5mb3JtYXRpb24gdG8gZGlzdGluZ3Vpc2ggYSBjb25uZWN0aW9uLiAqLworc3RydWN0IGlwX2Nvbm50cmFja190dXBsZQoreworCXN0cnVjdCBpcF9jb25udHJhY2tfbWFuaXAgc3JjOworCisJLyogVGhlc2UgYXJlIHRoZSBwYXJ0cyBvZiB0aGUgdHVwbGUgd2hpY2ggYXJlIGZpeGVkLiAqLworCXN0cnVjdCB7CisJCXVfaW50MzJfdCBpcDsKKwkJdW5pb24geworCQkJLyogQWRkIG90aGVyIHByb3RvY29scyBoZXJlLiAqLworCQkJdV9pbnQxNl90IGFsbDsKKworCQkJc3RydWN0IHsKKwkJCQl1X2ludDE2X3QgcG9ydDsKKwkJCX0gdGNwOworCQkJc3RydWN0IHsKKwkJCQl1X2ludDE2X3QgcG9ydDsKKwkJCX0gdWRwOworCQkJc3RydWN0IHsKKwkJCQl1X2ludDhfdCB0eXBlLCBjb2RlOworCQkJfSBpY21wOworCQkJc3RydWN0IHsKKwkJCQl1X2ludDE2X3QgcG9ydDsKKwkJCX0gc2N0cDsKKwkJfSB1OworCisJCS8qIFRoZSBwcm90b2NvbC4gKi8KKwkJdV9pbnQ4X3QgcHJvdG9udW07CisKKwkJLyogVGhlIGRpcmVjdGlvbiAoZm9yIHR1cGxlaGFzaCkgKi8KKwkJdV9pbnQ4X3QgZGlyOworCX0gZHN0OworfTsKKworLyogVGhpcyBpcyBvcHRpbWl6ZWQgb3Bwb3NlZCB0byBhIG1lbXNldCBvZiB0aGUgd2hvbGUgc3RydWN0dXJlLiAgRXZlcnl0aGluZyB3ZQorICogcmVhbGx5IGNhcmUgYWJvdXQgaXMgdGhlICBzb3VyY2UvZGVzdGluYXRpb24gdW5pb25zICovCisjZGVmaW5lIElQX0NUX1RVUExFX1VfQkxBTksodHVwbGUpIAkJCQlcCisJZG8gewkJCQkJCQlcCisJCSh0dXBsZSktPnNyYy51LmFsbCA9IDA7CQkJCVwKKwkJKHR1cGxlKS0+ZHN0LnUuYWxsID0gMDsJCQkJXAorCX0gd2hpbGUgKDApCisKK2VudW0gaXBfY29ubnRyYWNrX2RpcgoreworCUlQX0NUX0RJUl9PUklHSU5BTCwKKwlJUF9DVF9ESVJfUkVQTFksCisJSVBfQ1RfRElSX01BWAorfTsKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2RlZmluZSBEVU1QX1RVUExFKHRwKQkJCQkJCVwKK0RFQlVHUCgidHVwbGUgJXA6ICV1ICV1LiV1LiV1LiV1OiVodSAtPiAldS4ldS4ldS4ldTolaHVcbiIsCVwKKyAgICAgICAodHApLCAodHApLT5kc3QucHJvdG9udW0sCQkJCVwKKyAgICAgICBOSVBRVUFEKCh0cCktPnNyYy5pcCksIG50b2hzKCh0cCktPnNyYy51LmFsbCksCQlcCisgICAgICAgTklQUVVBRCgodHApLT5kc3QuaXApLCBudG9ocygodHApLT5kc3QudS5hbGwpKQorCisjZGVmaW5lIENUSU5GTzJESVIoY3RpbmZvKSAoKGN0aW5mbykgPj0gSVBfQ1RfSVNfUkVQTFkgPyBJUF9DVF9ESVJfUkVQTFkgOiBJUF9DVF9ESVJfT1JJR0lOQUwpCisKKy8qIElmIHdlJ3JlIHRoZSBmaXJzdCB0dXBsZSwgaXQncyB0aGUgb3JpZ2luYWwgZGlyLiAqLworI2RlZmluZSBESVJFQ1RJT04oaCkgKChlbnVtIGlwX2Nvbm50cmFja19kaXIpKGgpLT50dXBsZS5kc3QuZGlyKQorCisvKiBDb25uZWN0aW9ucyBoYXZlIHR3byBlbnRyaWVzIGluIHRoZSBoYXNoIHRhYmxlOiBvbmUgZm9yIGVhY2ggd2F5ICovCitzdHJ1Y3QgaXBfY29ubnRyYWNrX3R1cGxlX2hhc2gKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisKKwlzdHJ1Y3QgaXBfY29ubnRyYWNrX3R1cGxlIHR1cGxlOworfTsKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworc3RhdGljIGlubGluZSBpbnQgaXBfY3RfdHVwbGVfc3JjX2VxdWFsKGNvbnN0IHN0cnVjdCBpcF9jb25udHJhY2tfdHVwbGUgKnQxLAorCQkJCSAgICAgICAgY29uc3Qgc3RydWN0IGlwX2Nvbm50cmFja190dXBsZSAqdDIpCit7CisJcmV0dXJuIHQxLT5zcmMuaXAgPT0gdDItPnNyYy5pcAorCQkmJiB0MS0+c3JjLnUuYWxsID09IHQyLT5zcmMudS5hbGw7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGlwX2N0X3R1cGxlX2RzdF9lcXVhbChjb25zdCBzdHJ1Y3QgaXBfY29ubnRyYWNrX3R1cGxlICp0MSwKKwkJCQkgICAgICAgIGNvbnN0IHN0cnVjdCBpcF9jb25udHJhY2tfdHVwbGUgKnQyKQoreworCXJldHVybiB0MS0+ZHN0LmlwID09IHQyLT5kc3QuaXAKKwkJJiYgdDEtPmRzdC51LmFsbCA9PSB0Mi0+ZHN0LnUuYWxsCisJCSYmIHQxLT5kc3QucHJvdG9udW0gPT0gdDItPmRzdC5wcm90b251bTsKK30KKworc3RhdGljIGlubGluZSBpbnQgaXBfY3RfdHVwbGVfZXF1YWwoY29uc3Qgc3RydWN0IGlwX2Nvbm50cmFja190dXBsZSAqdDEsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBpcF9jb25udHJhY2tfdHVwbGUgKnQyKQoreworCXJldHVybiBpcF9jdF90dXBsZV9zcmNfZXF1YWwodDEsIHQyKSAmJiBpcF9jdF90dXBsZV9kc3RfZXF1YWwodDEsIHQyKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgaXBfY3RfdHVwbGVfbWFza19jbXAoY29uc3Qgc3RydWN0IGlwX2Nvbm50cmFja190dXBsZSAqdCwKKwkJCQkgICAgICAgY29uc3Qgc3RydWN0IGlwX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCisJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpcF9jb25udHJhY2tfdHVwbGUgKm1hc2spCit7CisJcmV0dXJuICEoKCh0LT5zcmMuaXAgXiB0dXBsZS0+c3JjLmlwKSAmIG1hc2stPnNyYy5pcCkKKwkJIHx8ICgodC0+ZHN0LmlwIF4gdHVwbGUtPmRzdC5pcCkgJiBtYXNrLT5kc3QuaXApCisJCSB8fCAoKHQtPnNyYy51LmFsbCBeIHR1cGxlLT5zcmMudS5hbGwpICYgbWFzay0+c3JjLnUuYWxsKQorCQkgfHwgKCh0LT5kc3QudS5hbGwgXiB0dXBsZS0+ZHN0LnUuYWxsKSAmIG1hc2stPmRzdC51LmFsbCkKKwkJIHx8ICgodC0+ZHN0LnByb3RvbnVtIF4gdHVwbGUtPmRzdC5wcm90b251bSkKKwkJICAgICAmIG1hc2stPmRzdC5wcm90b251bSkpOworfQorCisjZW5kaWYgLyogX0lQX0NPTk5UUkFDS19UVVBMRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2xvZ2dpbmcuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfbG9nZ2luZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjNWM1MmMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2xvZ2dpbmcuaApAQCAtMCwwICsxLDIwIEBACisvKiBJUHY0IG1hY3JvcyBmb3IgdGhlIGludGVybmFsIGxvZ2dpbmcgaW50ZXJmYWNlLiAqLworI2lmbmRlZiBfX0lQX0xPR0dJTkdfSAorI2RlZmluZSBfX0lQX0xPR0dJTkdfSAorCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9sb2dnaW5nLmg+CisKKyNkZWZpbmUgbmZfbG9nX2lwX3BhY2tldChwc2tiLGhvb2tudW0saW4sb3V0LGZtdCxhcmdzLi4uKSBcCisJbmZfbG9nX3BhY2tldChBRl9JTkVULHBza2IsaG9va251bSxpbixvdXQsZm10LCMjYXJncykKKworI2RlZmluZSBuZl9sb2dfaXAocGZoLGxlbixmbXQsYXJncy4uLikgXAorCW5mX2xvZyhBRl9JTkVULHBmaCxsZW4sZm10LCMjYXJncykKKworI2RlZmluZSBuZl9pcF9sb2dfcmVnaXN0ZXIobG9nZ2luZykgbmZfbG9nX3JlZ2lzdGVyKEFGX0lORVQsbG9nZ2luZykKKyNkZWZpbmUgbmZfaXBfbG9nX3VucmVnaXN0ZXIobG9nZ2luZykgbmZfbG9nX3VucmVnaXN0ZXIoQUZfSU5FVCxsb2dnaW5nKQorCQorI2VuZGlmIC8qX19LRVJORUxfXyovCisKKyNlbmRpZiAvKl9fSVBfTE9HR0lOR19IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfbmF0LmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX25hdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiNzJiODYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX25hdC5oCkBAIC0wLDAgKzEsODcgQEAKKyNpZm5kZWYgX0lQX05BVF9ICisjZGVmaW5lIF9JUF9OQVRfSAorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0Lmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX3R1cGxlLmg+CisKKyNkZWZpbmUgSVBfTkFUX01BUFBJTkdfVFlQRV9NQVhfTkFNRUxFTiAxNgorCitlbnVtIGlwX25hdF9tYW5pcF90eXBlCit7CisJSVBfTkFUX01BTklQX1NSQywKKwlJUF9OQVRfTUFOSVBfRFNUCit9OworCisvKiBTUkMgbWFuaXAgb2NjdXJzIFBPU1RfUk9VVElORyBvciBMT0NBTF9JTiAqLworI2RlZmluZSBIT09LMk1BTklQKGhvb2tudW0pICgoaG9va251bSkgIT0gTkZfSVBfUE9TVF9ST1VUSU5HICYmIChob29rbnVtKSAhPSBORl9JUF9MT0NBTF9JTikKKworI2RlZmluZSBJUF9OQVRfUkFOR0VfTUFQX0lQUyAxCisjZGVmaW5lIElQX05BVF9SQU5HRV9QUk9UT19TUEVDSUZJRUQgMgorCisvKiBOQVQgc2VxdWVuY2UgbnVtYmVyIG1vZGlmaWNhdGlvbnMgKi8KK3N0cnVjdCBpcF9uYXRfc2VxIHsKKwkvKiBwb3NpdGlvbiBvZiB0aGUgbGFzdCBUQ1Agc2VxdWVuY2UgbnVtYmVyIAorCSAqIG1vZGlmaWNhdGlvbiAoaWYgYW55KSAqLworCXVfaW50MzJfdCBjb3JyZWN0aW9uX3BvczsKKwkvKiBzZXF1ZW5jZSBudW1iZXIgb2Zmc2V0IGJlZm9yZSBhbmQgYWZ0ZXIgbGFzdCBtb2RpZmljYXRpb24gKi8KKwlpbnQzMl90IG9mZnNldF9iZWZvcmUsIG9mZnNldF9hZnRlcjsKK307CisKKy8qIFNpbmdsZSByYW5nZSBzcGVjaWZpY2F0aW9uLiAqLworc3RydWN0IGlwX25hdF9yYW5nZQoreworCS8qIFNldCB0byBPUiBvZiBmbGFncyBhYm92ZS4gKi8KKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CisKKwkvKiBJbmNsdXNpdmU6IG5ldHdvcmsgb3JkZXIuICovCisJdV9pbnQzMl90IG1pbl9pcCwgbWF4X2lwOworCisJLyogSW5jbHVzaXZlOiBuZXR3b3JrIG9yZGVyICovCisJdW5pb24gaXBfY29ubnRyYWNrX21hbmlwX3Byb3RvIG1pbiwgbWF4OworfTsKKworLyogRm9yIGJhY2t3YXJkcyBjb21wYXQ6IGRvbid0IHVzZSBpbiBtb2Rlcm4gY29kZS4gKi8KK3N0cnVjdCBpcF9uYXRfbXVsdGlfcmFuZ2VfY29tcGF0Cit7CisJdW5zaWduZWQgaW50IHJhbmdlc2l6ZTsgLyogTXVzdCBiZSAxLiAqLworCisJLyogaGFuZ3Mgb2ZmIGVuZC4gKi8KKwlzdHJ1Y3QgaXBfbmF0X3JhbmdlIHJhbmdlWzFdOworfTsKKworI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvbG9ja2hlbHAuaD4KKworLyogUHJvdGVjdHMgTkFUIGhhc2ggdGFibGVzLCBhbmQgTkFULXByaXZhdGUgcGFydCBvZiBjb25udHJhY2tzLiAqLworREVDTEFSRV9SV0xPQ0tfRVhURVJOKGlwX25hdF9sb2NrKTsKKworLyogVGhlIHN0cnVjdHVyZSBlbWJlZGRlZCBpbiB0aGUgY29ubnRyYWNrIHN0cnVjdHVyZS4gKi8KK3N0cnVjdCBpcF9uYXRfaW5mbworeworCXN0cnVjdCBsaXN0X2hlYWQgYnlzb3VyY2U7CisKKwkvKiBIZWxwZXIgKE5VTEwgaWYgbm9uZSkuICovCisJc3RydWN0IGlwX25hdF9oZWxwZXIgKmhlbHBlcjsKKworCXN0cnVjdCBpcF9uYXRfc2VxIHNlcVtJUF9DVF9ESVJfTUFYXTsKK307CisKK3N0cnVjdCBpcF9jb25udHJhY2s7CisKKy8qIFNldCB1cCB0aGUgaW5mbyBzdHJ1Y3R1cmUgdG8gbWFwIGludG8gdGhpcyByYW5nZS4gKi8KK2V4dGVybiB1bnNpZ25lZCBpbnQgaXBfbmF0X3NldHVwX2luZm8oc3RydWN0IGlwX2Nvbm50cmFjayAqY29ubnRyYWNrLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBpcF9uYXRfcmFuZ2UgKnJhbmdlLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCBob29rbnVtKTsKKworLyogSXMgdGhpcyB0dXBsZSBhbHJlYWR5IHRha2VuPyAobm90IGJ5IHVzKSovCitleHRlcm4gaW50IGlwX25hdF91c2VkX3R1cGxlKGNvbnN0IHN0cnVjdCBpcF9jb25udHJhY2tfdHVwbGUgKnR1cGxlLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgaXBfY29ubnRyYWNrICppZ25vcmVkX2Nvbm50cmFjayk7CisKKy8qIENhbGN1bGF0ZSByZWxhdGl2ZSBjaGVja3N1bS4gKi8KK2V4dGVybiB1X2ludDE2X3QgaXBfbmF0X2NoZWF0X2NoZWNrKHVfaW50MzJfdCBvbGR2YWxpbnYsCisJCQkJICAgIHVfaW50MzJfdCBuZXd2YWwsCisJCQkJICAgIHVfaW50MTZfdCBvbGRjaGVjayk7CisjZWxzZSAgLyogIV9fS0VSTkVMX186IGlwdGFibGVzIHdhbnRzIHRoaXMgdG8gY29tcGlsZS4gKi8KKyNkZWZpbmUgaXBfbmF0X211bHRpX3JhbmdlIGlwX25hdF9tdWx0aV9yYW5nZV9jb21wYXQKKyNlbmRpZiAvKl9fS0VSTkVMX18qLworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX25hdF9jb3JlLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX25hdF9jb3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I1MGViOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfbmF0X2NvcmUuaApAQCAtMCwwICsxLDIwIEBACisjaWZuZGVmIF9JUF9OQVRfQ09SRV9ICisjZGVmaW5lIF9JUF9OQVRfQ09SRV9ICisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFjay5oPgorCisvKiBUaGlzIGhlYWRlciB1c2VkIHRvIHNoYXJlIGNvcmUgZnVuY3Rpb25hbGl0eSBiZXR3ZWVuIHRoZSBzdGFuZGFsb25lCisgICBOQVQgbW9kdWxlLCBhbmQgdGhlIGNvbXBhdGliaWxpdHkgbGF5ZXIncyB1c2Ugb2YgTkFUIGZvciBtYXNxdWVyYWRpbmcuICovCitleHRlcm4gaW50IGlwX25hdF9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgaXBfbmF0X2NsZWFudXAodm9pZCk7CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgbmF0X3BhY2tldChzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCwKKwkJCSAgICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGNvbm50cmFja2luZm8sCisJCQkgICAgICAgdW5zaWduZWQgaW50IGhvb2tudW0sCisJCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKipwc2tiKTsKKworZXh0ZXJuIGludCBpY21wX3JlcGx5X3RyYW5zbGF0aW9uKHN0cnVjdCBza19idWZmICoqcHNrYiwKKwkJCQkgIHN0cnVjdCBpcF9jb25udHJhY2sgKmN0LAorCQkJCSAgZW51bSBpcF9uYXRfbWFuaXBfdHlwZSBtYW5pcCwKKwkJCQkgIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIpOworI2VuZGlmIC8qIF9JUF9OQVRfQ09SRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX25hdF9oZWxwZXIuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfbmF0X2hlbHBlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmOWNiMTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX25hdF9oZWxwZXIuaApAQCAtMCwwICsxLDMzIEBACisjaWZuZGVmIF9JUF9OQVRfSEVMUEVSX0gKKyNkZWZpbmUgX0lQX05BVF9IRUxQRVJfSAorLyogTkFUIHByb3RvY29sIGhlbHBlciByb3V0aW5lcy4gKi8KKworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFjay5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCitzdHJ1Y3Qgc2tfYnVmZjsKKworLyogVGhlc2UgcmV0dXJuIHRydWUgb3IgZmFsc2UuICovCitleHRlcm4gaW50IGlwX25hdF9tYW5nbGVfdGNwX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqKnNrYiwKKwkJCQlzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCwKKwkJCQllbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCQl1bnNpZ25lZCBpbnQgbWF0Y2hfb2Zmc2V0LAorCQkJCXVuc2lnbmVkIGludCBtYXRjaF9sZW4sCisJCQkJY29uc3QgY2hhciAqcmVwX2J1ZmZlciwKKwkJCQl1bnNpZ25lZCBpbnQgcmVwX2xlbik7CitleHRlcm4gaW50IGlwX25hdF9tYW5nbGVfdWRwX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqKnNrYiwKKwkJCQlzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCwKKwkJCQllbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCQl1bnNpZ25lZCBpbnQgbWF0Y2hfb2Zmc2V0LAorCQkJCXVuc2lnbmVkIGludCBtYXRjaF9sZW4sCisJCQkJY29uc3QgY2hhciAqcmVwX2J1ZmZlciwKKwkJCQl1bnNpZ25lZCBpbnQgcmVwX2xlbik7CitleHRlcm4gaW50IGlwX25hdF9zZXFfYWRqdXN0KHN0cnVjdCBza19idWZmICoqcHNrYiwgCisJCQkgICAgIHN0cnVjdCBpcF9jb25udHJhY2sgKmN0LCAKKwkJCSAgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8pOworCisvKiBTZXR1cCBOQVQgb24gdGhpcyBleHBlY3RlZCBjb25udHJhY2sgc28gaXQgZm9sbG93cyBtYXN0ZXIsIGJ1dCBnb2VzCisgKiB0byBwb3J0IGN0LT5tYXN0ZXItPnNhdmVkX3Byb3RvLiAqLworZXh0ZXJuIHZvaWQgaXBfbmF0X2ZvbGxvd19tYXN0ZXIoc3RydWN0IGlwX2Nvbm50cmFjayAqY3QsCisJCQkJIHN0cnVjdCBpcF9jb25udHJhY2tfZXhwZWN0ICp0aGlzKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9uYXRfcHJvdG9jb2wuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfbmF0X3Byb3RvY29sLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI5NzA4YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfbmF0X3Byb3RvY29sLmgKQEAgLTAsMCArMSw3MCBAQAorLyogSGVhZGVyIGZvciB1c2UgaW4gZGVmaW5pbmcgYSBnaXZlbiBwcm90b2NvbC4gKi8KKyNpZm5kZWYgX0lQX05BVF9QUk9UT0NPTF9ICisjZGVmaW5lIF9JUF9OQVRfUFJPVE9DT0xfSAorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisKK3N0cnVjdCBpcGhkcjsKK3N0cnVjdCBpcF9uYXRfcmFuZ2U7CisKK3N0cnVjdCBpcF9uYXRfcHJvdG9jb2wKK3sKKwkvKiBQcm90b2NvbCBuYW1lICovCisJY29uc3QgY2hhciAqbmFtZTsKKworCS8qIFByb3RvY29sIG51bWJlci4gKi8KKwl1bnNpZ25lZCBpbnQgcHJvdG9udW07CisKKwkvKiBUcmFuc2xhdGUgYSBwYWNrZXQgdG8gdGhlIHRhcmdldCBhY2NvcmRpbmcgdG8gbWFuaXAgdHlwZS4KKwkgICBSZXR1cm4gdHJ1ZSBpZiBzdWNjZWVkZWQuICovCisJaW50ICgqbWFuaXBfcGt0KShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCisJCQkgdW5zaWduZWQgaW50IGlwaGRyb2ZmLAorCQkJIGNvbnN0IHN0cnVjdCBpcF9jb25udHJhY2tfdHVwbGUgKnR1cGxlLAorCQkJIGVudW0gaXBfbmF0X21hbmlwX3R5cGUgbWFuaXB0eXBlKTsKKworCS8qIElzIHRoZSBtYW5pcGFibGUgcGFydCBvZiB0aGUgdHVwbGUgYmV0d2VlbiBtaW4gYW5kIG1heCBpbmNsPyAqLworCWludCAoKmluX3JhbmdlKShjb25zdCBzdHJ1Y3QgaXBfY29ubnRyYWNrX3R1cGxlICp0dXBsZSwKKwkJCWVudW0gaXBfbmF0X21hbmlwX3R5cGUgbWFuaXB0eXBlLAorCQkJY29uc3QgdW5pb24gaXBfY29ubnRyYWNrX21hbmlwX3Byb3RvICptaW4sCisJCQljb25zdCB1bmlvbiBpcF9jb25udHJhY2tfbWFuaXBfcHJvdG8gKm1heCk7CisKKwkvKiBBbHRlciB0aGUgcGVyLXByb3RvIHBhcnQgb2YgdGhlIHR1cGxlIChkZXBlbmRpbmcgb24KKwkgICBtYW5pcHR5cGUpLCB0byBnaXZlIGEgdW5pcXVlIHR1cGxlIGluIHRoZSBnaXZlbiByYW5nZSBpZgorCSAgIHBvc3NpYmxlOyByZXR1cm4gZmFsc2UgaWYgbm90LiAgUGVyLXByb3RvY29sIHBhcnQgb2YgdHVwbGUKKwkgICBpcyBpbml0aWFsaXplZCB0byB0aGUgaW5jb21pbmcgcGFja2V0LiAqLworCWludCAoKnVuaXF1ZV90dXBsZSkoc3RydWN0IGlwX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCisJCQkgICAgY29uc3Qgc3RydWN0IGlwX25hdF9yYW5nZSAqcmFuZ2UsCisJCQkgICAgZW51bSBpcF9uYXRfbWFuaXBfdHlwZSBtYW5pcHR5cGUsCisJCQkgICAgY29uc3Qgc3RydWN0IGlwX2Nvbm50cmFjayAqY29ubnRyYWNrKTsKKworCXVuc2lnbmVkIGludCAoKnByaW50KShjaGFyICpidWZmZXIsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgaXBfY29ubnRyYWNrX3R1cGxlICptYXRjaCwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBpcF9jb25udHJhY2tfdHVwbGUgKm1hc2spOworCisJdW5zaWduZWQgaW50ICgqcHJpbnRfcmFuZ2UpKGNoYXIgKmJ1ZmZlciwKKwkJCQkgICAgY29uc3Qgc3RydWN0IGlwX25hdF9yYW5nZSAqcmFuZ2UpOworfTsKKworI2RlZmluZSBNQVhfSVBfTkFUX1BST1RPIDI1NgorZXh0ZXJuIHN0cnVjdCBpcF9uYXRfcHJvdG9jb2wgKmlwX25hdF9wcm90b3NbTUFYX0lQX05BVF9QUk9UT107CisKKy8qIFByb3RvY29sIHJlZ2lzdHJhdGlvbi4gKi8KK2V4dGVybiBpbnQgaXBfbmF0X3Byb3RvY29sX3JlZ2lzdGVyKHN0cnVjdCBpcF9uYXRfcHJvdG9jb2wgKnByb3RvKTsKK2V4dGVybiB2b2lkIGlwX25hdF9wcm90b2NvbF91bnJlZ2lzdGVyKHN0cnVjdCBpcF9uYXRfcHJvdG9jb2wgKnByb3RvKTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgaXBfbmF0X3Byb3RvY29sICppcF9uYXRfZmluZF9wcm90byh1X2ludDhfdCBwcm90b2NvbCkKK3sKKwlyZXR1cm4gaXBfbmF0X3Byb3Rvc1twcm90b2NvbF07Cit9CisKKy8qIEJ1aWx0LWluIHByb3RvY29scy4gKi8KK2V4dGVybiBzdHJ1Y3QgaXBfbmF0X3Byb3RvY29sIGlwX25hdF9wcm90b2NvbF90Y3A7CitleHRlcm4gc3RydWN0IGlwX25hdF9wcm90b2NvbCBpcF9uYXRfcHJvdG9jb2xfdWRwOworZXh0ZXJuIHN0cnVjdCBpcF9uYXRfcHJvdG9jb2wgaXBfbmF0X3Byb3RvY29sX2ljbXA7CitleHRlcm4gc3RydWN0IGlwX25hdF9wcm90b2NvbCBpcF9uYXRfdW5rbm93bl9wcm90b2NvbDsKKworZXh0ZXJuIGludCBpbml0X3Byb3RvY29scyh2b2lkKSBfX2luaXQ7CitleHRlcm4gdm9pZCBjbGVhbnVwX3Byb3RvY29scyh2b2lkKTsKK2V4dGVybiBzdHJ1Y3QgaXBfbmF0X3Byb3RvY29sICpmaW5kX25hdF9wcm90byh1X2ludDE2X3QgcHJvdG9udW0pOworCisjZW5kaWYgLypfSVBfTkFUX1BST1RPX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9uYXRfcnVsZS5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9uYXRfcnVsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlY2QyYTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX25hdF9ydWxlLmgKQEAgLTAsMCArMSwyMyBAQAorI2lmbmRlZiBfSVBfTkFUX1JVTEVfSAorI2RlZmluZSBfSVBfTkFUX1JVTEVfSAorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFjay5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX25hdC5oPgorCisjaWZkZWYgX19LRVJORUxfXworCitleHRlcm4gaW50IGlwX25hdF9ydWxlX2luaXQodm9pZCkgX19pbml0OworZXh0ZXJuIHZvaWQgaXBfbmF0X3J1bGVfY2xlYW51cCh2b2lkKTsKK2V4dGVybiBpbnQgaXBfbmF0X3J1bGVfZmluZChzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCisJCQkgICAgdW5zaWduZWQgaW50IGhvb2tudW0sCisJCQkgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAorCQkJICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCisJCQkgICAgc3RydWN0IGlwX2Nvbm50cmFjayAqY3QsCisJCQkgICAgc3RydWN0IGlwX25hdF9pbmZvICppbmZvKTsKKworZXh0ZXJuIHVuc2lnbmVkIGludAorYWxsb2NfbnVsbF9iaW5kaW5nKHN0cnVjdCBpcF9jb25udHJhY2sgKmNvbm50cmFjaywKKwkJICAgc3RydWN0IGlwX25hdF9pbmZvICppbmZvLAorCQkgICB1bnNpZ25lZCBpbnQgaG9va251bSk7CisjZW5kaWYKKyNlbmRpZiAvKiBfSVBfTkFUX1JVTEVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9xdWV1ZS5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9xdWV1ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhMDhkNjgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3F1ZXVlLmgKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIFRoaXMgaXMgYSBtb2R1bGUgd2hpY2ggaXMgdXNlZCBmb3IgcXVldWVpbmcgSVB2NCBwYWNrZXRzIGFuZAorICogY29tbXVuaWNhdGluZyB3aXRoIHVzZXJzcGFjZSB2aWEgbmV0bGluay4KKyAqCisgKiAoQykgMjAwMCBKYW1lcyBNb3JyaXMsIHRoaXMgY29kZSBpcyBHUEwuCisgKi8KKyNpZm5kZWYgX0lQX1FVRVVFX0gKKyNkZWZpbmUgX0lQX1FVRVVFX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKyNpZmRlZiBERUJVR19JUFEKKyNkZWZpbmUgUURFQlVHKHguLi4pIHByaW50ayhLRVJOX0RFQlVHICMjIHgpCisjZWxzZQorI2RlZmluZSBRREVCVUcoeC4uLikKKyNlbmRpZiAgLyogREVCVUdfSVBRICovCisjZWxzZQorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2VuZGlmCS8qICEgX19LRVJORUxfXyAqLworCisvKiBNZXNzYWdlcyBzZW50IGZyb20ga2VybmVsICovCit0eXBlZGVmIHN0cnVjdCBpcHFfcGFja2V0X21zZyB7CisJdW5zaWduZWQgbG9uZyBwYWNrZXRfaWQ7CS8qIElEIG9mIHF1ZXVlZCBwYWNrZXQgKi8KKwl1bnNpZ25lZCBsb25nIG1hcms7CQkvKiBOZXRmaWx0ZXIgbWFyayB2YWx1ZSAqLworCWxvbmcgdGltZXN0YW1wX3NlYzsJCS8qIFBhY2tldCBhcnJpdmFsIHRpbWUgKHNlY29uZHMpICovCisJbG9uZyB0aW1lc3RhbXBfdXNlYzsJCS8qIFBhY2tldCBhcnJ2aWFsIHRpbWUgKCt1c2Vjb25kcykgKi8KKwl1bnNpZ25lZCBpbnQgaG9vazsJCS8qIE5ldGZpbHRlciBob29rIHdlIHJvZGUgaW4gb24gKi8KKwljaGFyIGluZGV2X25hbWVbSUZOQU1TSVpdOwkvKiBOYW1lIG9mIGluY29taW5nIGludGVyZmFjZSAqLworCWNoYXIgb3V0ZGV2X25hbWVbSUZOQU1TSVpdOwkvKiBOYW1lIG9mIG91dGdvaW5nIGludGVyZmFjZSAqLworCXVuc2lnbmVkIHNob3J0IGh3X3Byb3RvY29sOwkvKiBIYXJkd2FyZSBwcm90b2NvbCAobmV0d29yayBvcmRlcikgKi8KKwl1bnNpZ25lZCBzaG9ydCBod190eXBlOwkJLyogSGFyZHdhcmUgdHlwZSAqLworCXVuc2lnbmVkIGNoYXIgaHdfYWRkcmxlbjsJLyogSGFyZHdhcmUgYWRkcmVzcyBsZW5ndGggKi8KKwl1bnNpZ25lZCBjaGFyIGh3X2FkZHJbOF07CS8qIEhhcmR3YXJlIGFkZHJlc3MgKi8KKwlzaXplX3QgZGF0YV9sZW47CQkvKiBMZW5ndGggb2YgcGFja2V0IGRhdGEgKi8KKwl1bnNpZ25lZCBjaGFyIHBheWxvYWRbMF07CS8qIE9wdGlvbmFsIHBhY2tldCBkYXRhICovCit9IGlwcV9wYWNrZXRfbXNnX3Q7CisKKy8qIE1lc3NhZ2VzIHNlbnQgZnJvbSB1c2Vyc3BhY2UgKi8KK3R5cGVkZWYgc3RydWN0IGlwcV9tb2RlX21zZyB7CisJdW5zaWduZWQgY2hhciB2YWx1ZTsJCS8qIFJlcXVlc3RlZCBtb2RlICovCisJc2l6ZV90IHJhbmdlOwkJCS8qIE9wdGlvbmFsIHJhbmdlIG9mIHBhY2tldCByZXF1ZXN0ZWQgKi8KK30gaXBxX21vZGVfbXNnX3Q7CisKK3R5cGVkZWYgc3RydWN0IGlwcV92ZXJkaWN0X21zZyB7CisJdW5zaWduZWQgaW50IHZhbHVlOwkJLyogVmVyZGljdCB0byBoYW5kIHRvIG5ldGZpbHRlciAqLworCXVuc2lnbmVkIGxvbmcgaWQ7CQkvKiBQYWNrZXQgSUQgZm9yIHRoaXMgdmVyZGljdCAqLworCXNpemVfdCBkYXRhX2xlbjsJCS8qIExlbmd0aCBvZiByZXBsYWNlbWVudCBkYXRhICovCisJdW5zaWduZWQgY2hhciBwYXlsb2FkWzBdOwkvKiBPcHRpb25hbCByZXBsYWNlbWVudCBwYWNrZXQgKi8KK30gaXBxX3ZlcmRpY3RfbXNnX3Q7CisKK3R5cGVkZWYgc3RydWN0IGlwcV9wZWVyX21zZyB7CisJdW5pb24geworCQlpcHFfdmVyZGljdF9tc2dfdCB2ZXJkaWN0OworCQlpcHFfbW9kZV9tc2dfdCBtb2RlOworCX0gbXNnOworfSBpcHFfcGVlcl9tc2dfdDsKKworLyogUGFja2V0IGRlbGl2ZXJ5IG1vZGVzICovCitlbnVtIHsKKwlJUFFfQ09QWV9OT05FLAkJLyogSW5pdGlhbCBtb2RlLCBwYWNrZXRzIGFyZSBkcm9wcGVkICovCisJSVBRX0NPUFlfTUVUQSwJCS8qIENvcHkgbWV0YWRhdGEgKi8KKwlJUFFfQ09QWV9QQUNLRVQJCS8qIENvcHkgbWV0YWRhdGEgKyBwYWNrZXQgKHJhbmdlKSAqLworfTsKKyNkZWZpbmUgSVBRX0NPUFlfTUFYIElQUV9DT1BZX1BBQ0tFVAorCisvKiBUeXBlcyBvZiBtZXNzYWdlcyAqLworI2RlZmluZSBJUFFNX0JBU0UJMHgxMAkvKiBzdGFuZGFyZCBuZXRsaW5rIG1lc3NhZ2VzIGJlbG93IHRoaXMgKi8KKyNkZWZpbmUgSVBRTV9NT0RFCShJUFFNX0JBU0UgKyAxKQkJLyogTW9kZSByZXF1ZXN0IGZyb20gcGVlciAqLworI2RlZmluZSBJUFFNX1ZFUkRJQ1QJKElQUU1fQkFTRSArIDIpCQkvKiBWZXJkaWN0IGZyb20gcGVlciAqLyAKKyNkZWZpbmUgSVBRTV9QQUNLRVQJKElQUU1fQkFTRSArIDMpCQkvKiBQYWNrZXQgZnJvbSBrZXJuZWwgKi8KKyNkZWZpbmUgSVBRTV9NQVgJKElQUU1fQkFTRSArIDQpCisKKyNlbmRpZiAvKl9JUF9RVUVVRV9IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfdGFibGVzLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyY2U0NzgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oCkBAIC0wLDAgKzEsNDkwIEBACisvKgorICogMjUtSnVsLTE5OTggTWFqb3IgY2hhbmdlcyB0byBhbGxvdyBmb3IgaXAgY2hhaW4gdGFibGUKKyAqCisgKiAzLUphbi0yMDAwIE5hbWVkIHRhYmxlcyB0byBhbGxvdyBwYWNrZXQgc2VsZWN0aW9uIGZvciBkaWZmZXJlbnQgdXNlcy4KKyAqLworCisvKgorICogCUZvcm1hdCBvZiBhbiBJUCBmaXJld2FsbCBkZXNjcmlwdG9yCisgKgorICogCXNyYywgZHN0LCBzcmNfbWFzaywgZHN0X21hc2sgYXJlIGFsd2F5cyBzdG9yZWQgaW4gbmV0d29yayBieXRlIG9yZGVyLgorICogCWZsYWdzIGFyZSBzdG9yZWQgaW4gaG9zdCBieXRlIG9yZGVyIChvZiBjb3Vyc2UpLgorICogCVBvcnQgbnVtYmVycyBhcmUgc3RvcmVkIGluIEhPU1QgYnl0ZSBvcmRlci4KKyAqLworCisjaWZuZGVmIF9JUFRBQkxFU19ICisjZGVmaW5lIF9JUFRBQkxFU19ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8bGludXgvaWYuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNlbmRpZgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQuaD4KKworI2RlZmluZSBJUFRfRlVOQ1RJT05fTUFYTkFNRUxFTiAzMAorI2RlZmluZSBJUFRfVEFCTEVfTUFYTkFNRUxFTiAzMgorCisvKiBZZXMsIFZpcmdpbmlhLCB5b3UgaGF2ZSB0byB6ZXJvIHRoZSBwYWRkaW5nLiAqLworc3RydWN0IGlwdF9pcCB7CisJLyogU291cmNlIGFuZCBkZXN0aW5hdGlvbiBJUCBhZGRyICovCisJc3RydWN0IGluX2FkZHIgc3JjLCBkc3Q7CisJLyogTWFzayBmb3Igc3JjIGFuZCBkZXN0IElQIGFkZHIgKi8KKwlzdHJ1Y3QgaW5fYWRkciBzbXNrLCBkbXNrOworCWNoYXIgaW5pZmFjZVtJRk5BTVNJWl0sIG91dGlmYWNlW0lGTkFNU0laXTsKKwl1bnNpZ25lZCBjaGFyIGluaWZhY2VfbWFza1tJRk5BTVNJWl0sIG91dGlmYWNlX21hc2tbSUZOQU1TSVpdOworCisJLyogUHJvdG9jb2wsIDAgPSBBTlkgKi8KKwl1X2ludDE2X3QgcHJvdG87CisKKwkvKiBGbGFncyB3b3JkICovCisJdV9pbnQ4X3QgZmxhZ3M7CisJLyogSW52ZXJzZSBmbGFncyAqLworCXVfaW50OF90IGludmZsYWdzOworfTsKKworc3RydWN0IGlwdF9lbnRyeV9tYXRjaAoreworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXVfaW50MTZfdCBtYXRjaF9zaXplOworCisJCQkvKiBVc2VkIGJ5IHVzZXJzcGFjZSAqLworCQkJY2hhciBuYW1lW0lQVF9GVU5DVElPTl9NQVhOQU1FTEVOLTFdOworCisJCQl1X2ludDhfdCByZXZpc2lvbjsKKwkJfSB1c2VyOworCQlzdHJ1Y3QgeworCQkJdV9pbnQxNl90IG1hdGNoX3NpemU7CisKKwkJCS8qIFVzZWQgaW5zaWRlIHRoZSBrZXJuZWwgKi8KKwkJCXN0cnVjdCBpcHRfbWF0Y2ggKm1hdGNoOworCQl9IGtlcm5lbDsKKworCQkvKiBUb3RhbCBsZW5ndGggKi8KKwkJdV9pbnQxNl90IG1hdGNoX3NpemU7CisJfSB1OworCisJdW5zaWduZWQgY2hhciBkYXRhWzBdOworfTsKKworc3RydWN0IGlwdF9lbnRyeV90YXJnZXQKK3sKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQl1X2ludDE2X3QgdGFyZ2V0X3NpemU7CisKKwkJCS8qIFVzZWQgYnkgdXNlcnNwYWNlICovCisJCQljaGFyIG5hbWVbSVBUX0ZVTkNUSU9OX01BWE5BTUVMRU4tMV07CisKKwkJCXVfaW50OF90IHJldmlzaW9uOworCQl9IHVzZXI7CisJCXN0cnVjdCB7CisJCQl1X2ludDE2X3QgdGFyZ2V0X3NpemU7CisKKwkJCS8qIFVzZWQgaW5zaWRlIHRoZSBrZXJuZWwgKi8KKwkJCXN0cnVjdCBpcHRfdGFyZ2V0ICp0YXJnZXQ7CisJCX0ga2VybmVsOworCisJCS8qIFRvdGFsIGxlbmd0aCAqLworCQl1X2ludDE2X3QgdGFyZ2V0X3NpemU7CisJfSB1OworCisJdW5zaWduZWQgY2hhciBkYXRhWzBdOworfTsKKworc3RydWN0IGlwdF9zdGFuZGFyZF90YXJnZXQKK3sKKwlzdHJ1Y3QgaXB0X2VudHJ5X3RhcmdldCB0YXJnZXQ7CisJaW50IHZlcmRpY3Q7Cit9OworCitzdHJ1Y3QgaXB0X2NvdW50ZXJzCit7CisJdV9pbnQ2NF90IHBjbnQsIGJjbnQ7CQkJLyogUGFja2V0IGFuZCBieXRlIGNvdW50ZXJzICovCit9OworCisvKiBWYWx1ZXMgZm9yICJmbGFnIiBmaWVsZCBpbiBzdHJ1Y3QgaXB0X2lwIChnZW5lcmFsIGlwIHN0cnVjdHVyZSkuICovCisjZGVmaW5lIElQVF9GX0ZSQUcJCTB4MDEJLyogU2V0IGlmIHJ1bGUgaXMgYSBmcmFnbWVudCBydWxlICovCisjZGVmaW5lIElQVF9GX01BU0sJCTB4MDEJLyogQWxsIHBvc3NpYmxlIGZsYWcgYml0cyBtYXNrLiAqLworCisvKiBWYWx1ZXMgZm9yICJpbnYiIGZpZWxkIGluIHN0cnVjdCBpcHRfaXAuICovCisjZGVmaW5lIElQVF9JTlZfVklBX0lOCQkweDAxCS8qIEludmVydCB0aGUgc2Vuc2Ugb2YgSU4gSUZBQ0UuICovCisjZGVmaW5lIElQVF9JTlZfVklBX09VVAkJMHgwMgkvKiBJbnZlcnQgdGhlIHNlbnNlIG9mIE9VVCBJRkFDRSAqLworI2RlZmluZSBJUFRfSU5WX1RPUwkJMHgwNAkvKiBJbnZlcnQgdGhlIHNlbnNlIG9mIFRPUy4gKi8KKyNkZWZpbmUgSVBUX0lOVl9TUkNJUAkJMHgwOAkvKiBJbnZlcnQgdGhlIHNlbnNlIG9mIFNSQyBJUC4gKi8KKyNkZWZpbmUgSVBUX0lOVl9EU1RJUAkJMHgxMAkvKiBJbnZlcnQgdGhlIHNlbnNlIG9mIERTVCBPUC4gKi8KKyNkZWZpbmUgSVBUX0lOVl9GUkFHCQkweDIwCS8qIEludmVydCB0aGUgc2Vuc2Ugb2YgRlJBRy4gKi8KKyNkZWZpbmUgSVBUX0lOVl9QUk9UTwkJMHg0MAkvKiBJbnZlcnQgdGhlIHNlbnNlIG9mIFBST1RPLiAqLworI2RlZmluZSBJUFRfSU5WX01BU0sJCTB4N0YJLyogQWxsIHBvc3NpYmxlIGZsYWcgYml0cyBtYXNrLiAqLworCisvKiBUaGlzIHN0cnVjdHVyZSBkZWZpbmVzIGVhY2ggb2YgdGhlIGZpcmV3YWxsIHJ1bGVzLiAgQ29uc2lzdHMgb2YgMworICAgcGFydHMgd2hpY2ggYXJlIDEpIGdlbmVyYWwgSVAgaGVhZGVyIHN0dWZmIDIpIG1hdGNoIHNwZWNpZmljCisgICBzdHVmZiAzKSB0aGUgdGFyZ2V0IHRvIHBlcmZvcm0gaWYgdGhlIHJ1bGUgbWF0Y2hlcyAqLworc3RydWN0IGlwdF9lbnRyeQoreworCXN0cnVjdCBpcHRfaXAgaXA7CisKKwkvKiBNYXJrIHdpdGggZmllbGRzIHRoYXQgd2UgY2FyZSBhYm91dC4gKi8KKwl1bnNpZ25lZCBpbnQgbmZjYWNoZTsKKworCS8qIFNpemUgb2YgaXB0X2VudHJ5ICsgbWF0Y2hlcyAqLworCXVfaW50MTZfdCB0YXJnZXRfb2Zmc2V0OworCS8qIFNpemUgb2YgaXB0X2VudHJ5ICsgbWF0Y2hlcyArIHRhcmdldCAqLworCXVfaW50MTZfdCBuZXh0X29mZnNldDsKKworCS8qIEJhY2sgcG9pbnRlciAqLworCXVuc2lnbmVkIGludCBjb21lZnJvbTsKKworCS8qIFBhY2tldCBhbmQgYnl0ZSBjb3VudGVycy4gKi8KKwlzdHJ1Y3QgaXB0X2NvdW50ZXJzIGNvdW50ZXJzOworCisJLyogVGhlIG1hdGNoZXMgKGlmIGFueSksIHRoZW4gdGhlIHRhcmdldC4gKi8KKwl1bnNpZ25lZCBjaGFyIGVsZW1zWzBdOworfTsKKworLyoKKyAqIE5ldyBJUCBmaXJld2FsbCBvcHRpb25zIGZvciBbZ3NdZXRzb2Nrb3B0IGF0IHRoZSBSQVcgSVAgbGV2ZWwuCisgKiBVbmxpa2UgQlNEIExpbnV4IGluaGVyaXRzIElQIG9wdGlvbnMgc28geW91IGRvbid0IGhhdmUgdG8gdXNlIGEgcmF3CisgKiBzb2NrZXQgZm9yIHRoaXMuIEluc3RlYWQgd2UgY2hlY2sgcmlnaHRzIGluIHRoZSBjYWxscy4gKi8KKyNkZWZpbmUgSVBUX0JBU0VfQ1RMCQk2NAkvKiBiYXNlIGZvciBmaXJld2FsbCBzb2NrZXQgb3B0aW9ucyAqLworCisjZGVmaW5lIElQVF9TT19TRVRfUkVQTEFDRQkoSVBUX0JBU0VfQ1RMKQorI2RlZmluZSBJUFRfU09fU0VUX0FERF9DT1VOVEVSUwkoSVBUX0JBU0VfQ1RMICsgMSkKKyNkZWZpbmUgSVBUX1NPX1NFVF9NQVgJCUlQVF9TT19TRVRfQUREX0NPVU5URVJTCisKKyNkZWZpbmUgSVBUX1NPX0dFVF9JTkZPCQkJKElQVF9CQVNFX0NUTCkKKyNkZWZpbmUgSVBUX1NPX0dFVF9FTlRSSUVTCQkoSVBUX0JBU0VfQ1RMICsgMSkKKyNkZWZpbmUgSVBUX1NPX0dFVF9SRVZJU0lPTl9NQVRDSAkoSVBUX0JBU0VfQ1RMICsgMikKKyNkZWZpbmUgSVBUX1NPX0dFVF9SRVZJU0lPTl9UQVJHRVQJKElQVF9CQVNFX0NUTCArIDMpCisjZGVmaW5lIElQVF9TT19HRVRfTUFYCQkJSVBUX1NPX0dFVF9SRVZJU0lPTl9UQVJHRVQKKworLyogQ09OVElOVUUgdmVyZGljdCBmb3IgdGFyZ2V0cyAqLworI2RlZmluZSBJUFRfQ09OVElOVUUgMHhGRkZGRkZGRgorCisvKiBGb3Igc3RhbmRhcmQgdGFyZ2V0ICovCisjZGVmaW5lIElQVF9SRVRVUk4gKC1ORl9SRVBFQVQgLSAxKQorCisvKiBUQ1AgbWF0Y2hpbmcgc3R1ZmYgKi8KK3N0cnVjdCBpcHRfdGNwCit7CisJdV9pbnQxNl90IHNwdHNbMl07CQkJLyogU291cmNlIHBvcnQgcmFuZ2UuICovCisJdV9pbnQxNl90IGRwdHNbMl07CQkJLyogRGVzdGluYXRpb24gcG9ydCByYW5nZS4gKi8KKwl1X2ludDhfdCBvcHRpb247CQkJLyogVENQIE9wdGlvbiBpZmYgbm9uLXplcm8qLworCXVfaW50OF90IGZsZ19tYXNrOwkJCS8qIFRDUCBmbGFncyBtYXNrIGJ5dGUgKi8KKwl1X2ludDhfdCBmbGdfY21wOwkJCS8qIFRDUCBmbGFncyBjb21wYXJlIGJ5dGUgKi8KKwl1X2ludDhfdCBpbnZmbGFnczsJCQkvKiBJbnZlcnNlIGZsYWdzICovCit9OworCisvKiBWYWx1ZXMgZm9yICJpbnYiIGZpZWxkIGluIHN0cnVjdCBpcHRfdGNwLiAqLworI2RlZmluZSBJUFRfVENQX0lOVl9TUkNQVAkweDAxCS8qIEludmVydCB0aGUgc2Vuc2Ugb2Ygc291cmNlIHBvcnRzLiAqLworI2RlZmluZSBJUFRfVENQX0lOVl9EU1RQVAkweDAyCS8qIEludmVydCB0aGUgc2Vuc2Ugb2YgZGVzdCBwb3J0cy4gKi8KKyNkZWZpbmUgSVBUX1RDUF9JTlZfRkxBR1MJMHgwNAkvKiBJbnZlcnQgdGhlIHNlbnNlIG9mIFRDUCBmbGFncy4gKi8KKyNkZWZpbmUgSVBUX1RDUF9JTlZfT1BUSU9OCTB4MDgJLyogSW52ZXJ0IHRoZSBzZW5zZSBvZiBvcHRpb24gdGVzdC4gKi8KKyNkZWZpbmUgSVBUX1RDUF9JTlZfTUFTSwkweDBGCS8qIEFsbCBwb3NzaWJsZSBmbGFncy4gKi8KKworLyogVURQIG1hdGNoaW5nIHN0dWZmICovCitzdHJ1Y3QgaXB0X3VkcAoreworCXVfaW50MTZfdCBzcHRzWzJdOwkJCS8qIFNvdXJjZSBwb3J0IHJhbmdlLiAqLworCXVfaW50MTZfdCBkcHRzWzJdOwkJCS8qIERlc3RpbmF0aW9uIHBvcnQgcmFuZ2UuICovCisJdV9pbnQ4X3QgaW52ZmxhZ3M7CQkJLyogSW52ZXJzZSBmbGFncyAqLworfTsKKworLyogVmFsdWVzIGZvciAiaW52ZmxhZ3MiIGZpZWxkIGluIHN0cnVjdCBpcHRfdWRwLiAqLworI2RlZmluZSBJUFRfVURQX0lOVl9TUkNQVAkweDAxCS8qIEludmVydCB0aGUgc2Vuc2Ugb2Ygc291cmNlIHBvcnRzLiAqLworI2RlZmluZSBJUFRfVURQX0lOVl9EU1RQVAkweDAyCS8qIEludmVydCB0aGUgc2Vuc2Ugb2YgZGVzdCBwb3J0cy4gKi8KKyNkZWZpbmUgSVBUX1VEUF9JTlZfTUFTSwkweDAzCS8qIEFsbCBwb3NzaWJsZSBmbGFncy4gKi8KKworLyogSUNNUCBtYXRjaGluZyBzdHVmZiAqLworc3RydWN0IGlwdF9pY21wCit7CisJdV9pbnQ4X3QgdHlwZTsJCQkJLyogdHlwZSB0byBtYXRjaCAqLworCXVfaW50OF90IGNvZGVbMl07CQkJLyogcmFuZ2Ugb2YgY29kZSAqLworCXVfaW50OF90IGludmZsYWdzOwkJCS8qIEludmVyc2UgZmxhZ3MgKi8KK307CisKKy8qIFZhbHVlcyBmb3IgImludiIgZmllbGQgZm9yIHN0cnVjdCBpcHRfaWNtcC4gKi8KKyNkZWZpbmUgSVBUX0lDTVBfSU5WCTB4MDEJLyogSW52ZXJ0IHRoZSBzZW5zZSBvZiB0eXBlL2NvZGUgdGVzdCAqLworCisvKiBUaGUgYXJndW1lbnQgdG8gSVBUX1NPX0dFVF9JTkZPICovCitzdHJ1Y3QgaXB0X2dldGluZm8KK3sKKwkvKiBXaGljaCB0YWJsZTogY2FsbGVyIGZpbGxzIHRoaXMgaW4uICovCisJY2hhciBuYW1lW0lQVF9UQUJMRV9NQVhOQU1FTEVOXTsKKworCS8qIEtlcm5lbCBmaWxscyB0aGVzZSBpbi4gKi8KKwkvKiBXaGljaCBob29rIGVudHJ5IHBvaW50cyBhcmUgdmFsaWQ6IGJpdG1hc2sgKi8KKwl1bnNpZ25lZCBpbnQgdmFsaWRfaG9va3M7CisKKwkvKiBIb29rIGVudHJ5IHBvaW50czogb25lIHBlciBuZXRmaWx0ZXIgaG9vay4gKi8KKwl1bnNpZ25lZCBpbnQgaG9va19lbnRyeVtORl9JUF9OVU1IT09LU107CisKKwkvKiBVbmRlcmZsb3cgcG9pbnRzLiAqLworCXVuc2lnbmVkIGludCB1bmRlcmZsb3dbTkZfSVBfTlVNSE9PS1NdOworCisJLyogTnVtYmVyIG9mIGVudHJpZXMgKi8KKwl1bnNpZ25lZCBpbnQgbnVtX2VudHJpZXM7CisKKwkvKiBTaXplIG9mIGVudHJpZXMuICovCisJdW5zaWduZWQgaW50IHNpemU7Cit9OworCisvKiBUaGUgYXJndW1lbnQgdG8gSVBUX1NPX1NFVF9SRVBMQUNFLiAqLworc3RydWN0IGlwdF9yZXBsYWNlCit7CisJLyogV2hpY2ggdGFibGUuICovCisJY2hhciBuYW1lW0lQVF9UQUJMRV9NQVhOQU1FTEVOXTsKKworCS8qIFdoaWNoIGhvb2sgZW50cnkgcG9pbnRzIGFyZSB2YWxpZDogYml0bWFzay4gIFlvdSBjYW4ndAorICAgICAgICAgICBjaGFuZ2UgdGhpcy4gKi8KKwl1bnNpZ25lZCBpbnQgdmFsaWRfaG9va3M7CisKKwkvKiBOdW1iZXIgb2YgZW50cmllcyAqLworCXVuc2lnbmVkIGludCBudW1fZW50cmllczsKKworCS8qIFRvdGFsIHNpemUgb2YgbmV3IGVudHJpZXMgKi8KKwl1bnNpZ25lZCBpbnQgc2l6ZTsKKworCS8qIEhvb2sgZW50cnkgcG9pbnRzLiAqLworCXVuc2lnbmVkIGludCBob29rX2VudHJ5W05GX0lQX05VTUhPT0tTXTsKKworCS8qIFVuZGVyZmxvdyBwb2ludHMuICovCisJdW5zaWduZWQgaW50IHVuZGVyZmxvd1tORl9JUF9OVU1IT09LU107CisKKwkvKiBJbmZvcm1hdGlvbiBhYm91dCBvbGQgZW50cmllczogKi8KKwkvKiBOdW1iZXIgb2YgY291bnRlcnMgKG11c3QgYmUgZXF1YWwgdG8gY3VycmVudCBudW1iZXIgb2YgZW50cmllcykuICovCisJdW5zaWduZWQgaW50IG51bV9jb3VudGVyczsKKwkvKiBUaGUgb2xkIGVudHJpZXMnIGNvdW50ZXJzLiAqLworCXN0cnVjdCBpcHRfY291bnRlcnMgX191c2VyICpjb3VudGVyczsKKworCS8qIFRoZSBlbnRyaWVzIChoYW5nIG9mZiBlbmQ6IG5vdCByZWFsbHkgYW4gYXJyYXkpLiAqLworCXN0cnVjdCBpcHRfZW50cnkgZW50cmllc1swXTsKK307CisKKy8qIFRoZSBhcmd1bWVudCB0byBJUFRfU09fQUREX0NPVU5URVJTLiAqLworc3RydWN0IGlwdF9jb3VudGVyc19pbmZvCit7CisJLyogV2hpY2ggdGFibGUuICovCisJY2hhciBuYW1lW0lQVF9UQUJMRV9NQVhOQU1FTEVOXTsKKworCXVuc2lnbmVkIGludCBudW1fY291bnRlcnM7CisKKwkvKiBUaGUgY291bnRlcnMgKGFjdHVhbGx5IGBudW1iZXInIG9mIHRoZXNlKS4gKi8KKwlzdHJ1Y3QgaXB0X2NvdW50ZXJzIGNvdW50ZXJzWzBdOworfTsKKworLyogVGhlIGFyZ3VtZW50IHRvIElQVF9TT19HRVRfRU5UUklFUy4gKi8KK3N0cnVjdCBpcHRfZ2V0X2VudHJpZXMKK3sKKwkvKiBXaGljaCB0YWJsZTogdXNlciBmaWxscyB0aGlzIGluLiAqLworCWNoYXIgbmFtZVtJUFRfVEFCTEVfTUFYTkFNRUxFTl07CisKKwkvKiBVc2VyIGZpbGxzIHRoaXMgaW46IHRvdGFsIGVudHJ5IHNpemUuICovCisJdW5zaWduZWQgaW50IHNpemU7CisKKwkvKiBUaGUgZW50cmllcy4gKi8KKwlzdHJ1Y3QgaXB0X2VudHJ5IGVudHJ5dGFibGVbMF07Cit9OworCisvKiBUaGUgYXJndW1lbnQgdG8gSVBUX1NPX0dFVF9SRVZJU0lPTl8qLiAgUmV0dXJucyBoaWdoZXN0IHJldmlzaW9uCisgKiBrZXJuZWwgc3VwcG9ydHMsIGlmID49IHJldmlzaW9uLiAqLworc3RydWN0IGlwdF9nZXRfcmV2aXNpb24KK3sKKwljaGFyIG5hbWVbSVBUX0ZVTkNUSU9OX01BWE5BTUVMRU4tMV07CisKKwl1X2ludDhfdCByZXZpc2lvbjsKK307CisKKy8qIFN0YW5kYXJkIHJldHVybiB2ZXJkaWN0LCBvciBkbyBqdW1wLiAqLworI2RlZmluZSBJUFRfU1RBTkRBUkRfVEFSR0VUICIiCisvKiBFcnJvciB2ZXJkaWN0LiAqLworI2RlZmluZSBJUFRfRVJST1JfVEFSR0VUICJFUlJPUiIKKworLyogSGVscGVyIGZ1bmN0aW9ucyAqLworc3RhdGljIF9faW5saW5lX18gc3RydWN0IGlwdF9lbnRyeV90YXJnZXQgKgoraXB0X2dldF90YXJnZXQoc3RydWN0IGlwdF9lbnRyeSAqZSkKK3sKKwlyZXR1cm4gKHZvaWQgKillICsgZS0+dGFyZ2V0X29mZnNldDsKK30KKworLyogZm4gcmV0dXJucyAwIHRvIGNvbnRpbnVlIGl0ZXJhdGlvbiAqLworI2RlZmluZSBJUFRfTUFUQ0hfSVRFUkFURShlLCBmbiwgYXJncy4uLikJXAorKHsJCQkJCQlcCisJdW5zaWduZWQgaW50IF9faTsJCQlcCisJaW50IF9fcmV0ID0gMDsJCQkJXAorCXN0cnVjdCBpcHRfZW50cnlfbWF0Y2ggKl9fbWF0Y2g7CVwKKwkJCQkJCVwKKwlmb3IgKF9faSA9IHNpemVvZihzdHJ1Y3QgaXB0X2VudHJ5KTsJXAorCSAgICAgX19pIDwgKGUpLT50YXJnZXRfb2Zmc2V0OwkJXAorCSAgICAgX19pICs9IF9fbWF0Y2gtPnUubWF0Y2hfc2l6ZSkgewlcCisJCV9fbWF0Y2ggPSAodm9pZCAqKShlKSArIF9faTsJXAorCQkJCQkJXAorCQlfX3JldCA9IGZuKF9fbWF0Y2ggLCAjIyBhcmdzKTsJXAorCQlpZiAoX19yZXQgIT0gMCkJCQlcCisJCQlicmVhazsJCQlcCisJfQkJCQkJXAorCV9fcmV0OwkJCQkJXAorfSkKKworLyogZm4gcmV0dXJucyAwIHRvIGNvbnRpbnVlIGl0ZXJhdGlvbiAqLworI2RlZmluZSBJUFRfRU5UUllfSVRFUkFURShlbnRyaWVzLCBzaXplLCBmbiwgYXJncy4uLikJCVwKKyh7CQkJCQkJCQlcCisJdW5zaWduZWQgaW50IF9faTsJCQkJCVwKKwlpbnQgX19yZXQgPSAwOwkJCQkJCVwKKwlzdHJ1Y3QgaXB0X2VudHJ5ICpfX2VudHJ5OwkJCQlcCisJCQkJCQkJCVwKKwlmb3IgKF9faSA9IDA7IF9faSA8IChzaXplKTsgX19pICs9IF9fZW50cnktPm5leHRfb2Zmc2V0KSB7IFwKKwkJX19lbnRyeSA9ICh2b2lkICopKGVudHJpZXMpICsgX19pOwkJXAorCQkJCQkJCQlcCisJCV9fcmV0ID0gZm4oX19lbnRyeSAsICMjIGFyZ3MpOwkJCVwKKwkJaWYgKF9fcmV0ICE9IDApCQkJCQlcCisJCQlicmVhazsJCQkJCVwKKwl9CQkJCQkJCVwKKwlfX3JldDsJCQkJCQkJXAorfSkKKworLyoKKyAqCU1haW4gZmlyZXdhbGwgY2hhaW5zIGRlZmluaXRpb25zIGFuZCBnbG9iYWwgdmFyJ3MgZGVmaW5pdGlvbnMuCisgKi8KKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CitleHRlcm4gdm9pZCBpcHRfaW5pdCh2b2lkKSBfX2luaXQ7CisKK3N0cnVjdCBpcHRfbWF0Y2gKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisKKwljb25zdCBjaGFyIG5hbWVbSVBUX0ZVTkNUSU9OX01BWE5BTUVMRU4tMV07CisKKwl1X2ludDhfdCByZXZpc2lvbjsKKworCS8qIFJldHVybiB0cnVlIG9yIGZhbHNlOiByZXR1cm4gRkFMU0UgYW5kIHNldCAqaG90ZHJvcCA9IDEgdG8KKyAgICAgICAgICAgZm9yY2UgaW1tZWRpYXRlIHBhY2tldCBkcm9wLiAqLworCS8qIEFyZ3VtZW50cyBjaGFuZ2VkIHNpbmNlIDIuNCwgYXMgdGhpcyBtdXN0IG5vdyBoYW5kbGUKKyAgICAgICAgICAgbm9uLWxpbmVhciBza2JzLCB1c2luZyBza2JfY29weV9iaXRzIGFuZAorICAgICAgICAgICBza2JfaXBfbWFrZV93cml0YWJsZS4gKi8KKwlpbnQgKCptYXRjaCkoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCisJCSAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKKwkJICAgICBjb25zdCB2b2lkICptYXRjaGluZm8sCisJCSAgICAgaW50IG9mZnNldCwKKwkJICAgICBpbnQgKmhvdGRyb3ApOworCisJLyogQ2FsbGVkIHdoZW4gdXNlciB0cmllcyB0byBpbnNlcnQgYW4gZW50cnkgb2YgdGhpcyB0eXBlLiAqLworCS8qIFNob3VsZCByZXR1cm4gdHJ1ZSBvciBmYWxzZS4gKi8KKwlpbnQgKCpjaGVja2VudHJ5KShjb25zdCBjaGFyICp0YWJsZW5hbWUsCisJCQkgIGNvbnN0IHN0cnVjdCBpcHRfaXAgKmlwLAorCQkJICB2b2lkICptYXRjaGluZm8sCisJCQkgIHVuc2lnbmVkIGludCBtYXRjaGluZm9zaXplLAorCQkJICB1bnNpZ25lZCBpbnQgaG9va19tYXNrKTsKKworCS8qIENhbGxlZCB3aGVuIGVudHJ5IG9mIHRoaXMgdHlwZSBkZWxldGVkLiAqLworCXZvaWQgKCpkZXN0cm95KSh2b2lkICptYXRjaGluZm8sIHVuc2lnbmVkIGludCBtYXRjaGluZm9zaXplKTsKKworCS8qIFNldCB0aGlzIHRvIFRISVNfTU9EVUxFLiAqLworCXN0cnVjdCBtb2R1bGUgKm1lOworfTsKKworLyogUmVnaXN0cmF0aW9uIGhvb2tzIGZvciB0YXJnZXRzLiAqLworc3RydWN0IGlwdF90YXJnZXQKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisKKwljb25zdCBjaGFyIG5hbWVbSVBUX0ZVTkNUSU9OX01BWE5BTUVMRU4tMV07CisKKwl1X2ludDhfdCByZXZpc2lvbjsKKworCS8qIENhbGxlZCB3aGVuIHVzZXIgdHJpZXMgdG8gaW5zZXJ0IGFuIGVudHJ5IG9mIHRoaXMgdHlwZToKKyAgICAgICAgICAgaG9va19tYXNrIGlzIGEgYml0bWFzayBvZiBob29rcyBmcm9tIHdoaWNoIGl0IGNhbiBiZQorICAgICAgICAgICBjYWxsZWQuICovCisJLyogU2hvdWxkIHJldHVybiB0cnVlIG9yIGZhbHNlLiAqLworCWludCAoKmNoZWNrZW50cnkpKGNvbnN0IGNoYXIgKnRhYmxlbmFtZSwKKwkJCSAgY29uc3Qgc3RydWN0IGlwdF9lbnRyeSAqZSwKKwkJCSAgdm9pZCAqdGFyZ2luZm8sCisJCQkgIHVuc2lnbmVkIGludCB0YXJnaW5mb3NpemUsCisJCQkgIHVuc2lnbmVkIGludCBob29rX21hc2spOworCisJLyogQ2FsbGVkIHdoZW4gZW50cnkgb2YgdGhpcyB0eXBlIGRlbGV0ZWQuICovCisJdm9pZCAoKmRlc3Ryb3kpKHZvaWQgKnRhcmdpbmZvLCB1bnNpZ25lZCBpbnQgdGFyZ2luZm9zaXplKTsKKworCS8qIFJldHVybnMgdmVyZGljdC4gIEFyZ3VtZW50IG9yZGVyIGNoYW5nZWQgc2luY2UgMi40LCBhcyB0aGlzCisgICAgICAgICAgIG11c3Qgbm93IGhhbmRsZSBub24tbGluZWFyIHNrYnMsIHVzaW5nIHNrYl9jb3B5X2JpdHMgYW5kCisgICAgICAgICAgIHNrYl9pcF9tYWtlX3dyaXRhYmxlLiAqLworCXVuc2lnbmVkIGludCAoKnRhcmdldCkoc3RydWN0IHNrX2J1ZmYgKipwc2tiLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAorCQkJICAgICAgIHVuc2lnbmVkIGludCBob29rbnVtLAorCQkJICAgICAgIGNvbnN0IHZvaWQgKnRhcmdpbmZvLAorCQkJICAgICAgIHZvaWQgKnVzZXJkYXRhKTsKKworCS8qIFNldCB0aGlzIHRvIFRISVNfTU9EVUxFLiAqLworCXN0cnVjdCBtb2R1bGUgKm1lOworfTsKKworZXh0ZXJuIGludCBpcHRfcmVnaXN0ZXJfdGFyZ2V0KHN0cnVjdCBpcHRfdGFyZ2V0ICp0YXJnZXQpOworZXh0ZXJuIHZvaWQgaXB0X3VucmVnaXN0ZXJfdGFyZ2V0KHN0cnVjdCBpcHRfdGFyZ2V0ICp0YXJnZXQpOworCitleHRlcm4gaW50IGlwdF9yZWdpc3Rlcl9tYXRjaChzdHJ1Y3QgaXB0X21hdGNoICptYXRjaCk7CitleHRlcm4gdm9pZCBpcHRfdW5yZWdpc3Rlcl9tYXRjaChzdHJ1Y3QgaXB0X21hdGNoICptYXRjaCk7CisKKy8qIEZ1cm5pdHVyZSBzaG9wcGluZy4uLiAqLworc3RydWN0IGlwdF90YWJsZQoreworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKworCS8qIEEgdW5pcXVlIG5hbWUuLi4gKi8KKwljaGFyIG5hbWVbSVBUX1RBQkxFX01BWE5BTUVMRU5dOworCisJLyogV2hhdCBob29rcyB5b3Ugd2lsbCBlbnRlciBvbiAqLworCXVuc2lnbmVkIGludCB2YWxpZF9ob29rczsKKworCS8qIExvY2sgZm9yIHRoZSBjdXJ0YWluICovCisJcndsb2NrX3QgbG9jazsKKworCS8qIE1hbiBiZWhpbmQgdGhlIGN1cnRhaW4uLi4gKi8KKwlzdHJ1Y3QgaXB0X3RhYmxlX2luZm8gKnByaXZhdGU7CisKKwkvKiBTZXQgdG8gVEhJU19NT0RVTEUuICovCisJc3RydWN0IG1vZHVsZSAqbWU7Cit9OworCisvKiBuZXQvc2NoZWQvaXB0LmM6IEdpbW1lIGFjY2VzcyB0byB5b3VyIHRhcmdldHMhICBHZXRzIHRhcmdldC0+bWUuICovCitleHRlcm4gc3RydWN0IGlwdF90YXJnZXQgKmlwdF9maW5kX3RhcmdldChjb25zdCBjaGFyICpuYW1lLCB1OCByZXZpc2lvbik7CisKKy8qIFN0YW5kYXJkIGVudHJ5LiAqLworc3RydWN0IGlwdF9zdGFuZGFyZAoreworCXN0cnVjdCBpcHRfZW50cnkgZW50cnk7CisJc3RydWN0IGlwdF9zdGFuZGFyZF90YXJnZXQgdGFyZ2V0OworfTsKKworc3RydWN0IGlwdF9lcnJvcl90YXJnZXQKK3sKKwlzdHJ1Y3QgaXB0X2VudHJ5X3RhcmdldCB0YXJnZXQ7CisJY2hhciBlcnJvcm5hbWVbSVBUX0ZVTkNUSU9OX01BWE5BTUVMRU5dOworfTsKKworc3RydWN0IGlwdF9lcnJvcgoreworCXN0cnVjdCBpcHRfZW50cnkgZW50cnk7CisJc3RydWN0IGlwdF9lcnJvcl90YXJnZXQgdGFyZ2V0OworfTsKKworZXh0ZXJuIGludCBpcHRfcmVnaXN0ZXJfdGFibGUoc3RydWN0IGlwdF90YWJsZSAqdGFibGUsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgaXB0X3JlcGxhY2UgKnJlcGwpOworZXh0ZXJuIHZvaWQgaXB0X3VucmVnaXN0ZXJfdGFibGUoc3RydWN0IGlwdF90YWJsZSAqdGFibGUpOworZXh0ZXJuIHVuc2lnbmVkIGludCBpcHRfZG9fdGFibGUoc3RydWN0IHNrX2J1ZmYgKipwc2tiLAorCQkJCSB1bnNpZ25lZCBpbnQgaG9vaywKKwkJCQkgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAorCQkJCSBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAorCQkJCSBzdHJ1Y3QgaXB0X3RhYmxlICp0YWJsZSwKKwkJCQkgdm9pZCAqdXNlcmRhdGEpOworCisjZGVmaW5lIElQVF9BTElHTihzKSAoKChzKSArIChfX2FsaWdub2ZfXyhzdHJ1Y3QgaXB0X2VudHJ5KS0xKSkgJiB+KF9fYWxpZ25vZl9fKHN0cnVjdCBpcHRfZW50cnkpLTEpKQorI2VuZGlmIC8qX19LRVJORUxfXyovCisjZW5kaWYgLyogX0lQVEFCTEVTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X0NMQVNTSUZZLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9DTEFTU0lGWS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1OTZlM2QKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9DTEFTU0lGWS5oCkBAIC0wLDAgKzEsOCBAQAorI2lmbmRlZiBfSVBUX0NMQVNTSUZZX0gKKyNkZWZpbmUgX0lQVF9DTEFTU0lGWV9ICisKK3N0cnVjdCBpcHRfY2xhc3NpZnlfdGFyZ2V0X2luZm8geworCXVfaW50MzJfdCBwcmlvcml0eTsKK307CisKKyNlbmRpZiAvKl9JUFRfQ0xBU1NJRllfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfQ0xVU1RFUklQLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9DTFVTVEVSSVAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWE4M2U3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfQ0xVU1RFUklQLmgKQEAgLTAsMCArMSwzMiBAQAorI2lmbmRlZiBfSVBUX0NMVVNURVJJUF9IX3RhcmdldAorI2RlZmluZSBfSVBUX0NMVVNURVJJUF9IX3RhcmdldAorCitlbnVtIGNsdXN0ZXJpcF9oYXNobW9kZSB7CisgICAgQ0xVU1RFUklQX0hBU0hNT0RFX1NJUCA9IDAsCisgICAgQ0xVU1RFUklQX0hBU0hNT0RFX1NJUF9TUFQsCisgICAgQ0xVU1RFUklQX0hBU0hNT0RFX1NJUF9TUFRfRFBULAorfTsKKworI2RlZmluZSBDTFVTVEVSSVBfSEFTSE1PREVfTUFYIENMVVNURVJJUF9IQVNITU9ERV9TSVBfU1BUX0RQVAorCisjZGVmaW5lIENMVVNURVJJUF9NQVhfTk9ERVMgMTYKKworI2RlZmluZSBDTFVTVEVSSVBfRkxBR19ORVcgMHgwMDAwMDAwMQorCitzdHJ1Y3QgY2x1c3RlcmlwX2NvbmZpZzsKKworc3RydWN0IGlwdF9jbHVzdGVyaXBfdGd0X2luZm8geworCisJdV9pbnQzMl90IGZsYWdzOworCXN0cnVjdCBjbHVzdGVyaXBfY29uZmlnICpjb25maWc7CisJCisJLyogb25seSByZWxldmFudCBmb3IgbmV3IG9uZXMgKi8KKwl1X2ludDhfdCBjbHVzdGVybWFjWzZdOworCXVfaW50MTZfdCBudW1fdG90YWxfbm9kZXM7CisJdV9pbnQxNl90IG51bV9sb2NhbF9ub2RlczsKKwl1X2ludDE2X3QgbG9jYWxfbm9kZXNbQ0xVU1RFUklQX01BWF9OT0RFU107CisJZW51bSBjbHVzdGVyaXBfaGFzaG1vZGUgaGFzaF9tb2RlOworCXVfaW50MzJfdCBoYXNoX2luaXR2YWw7Cit9OworCisjZW5kaWYgLypfSVBUX0NMVVNURVJJUF9IX3RhcmdldCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9DT05OTUFSSy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfQ09OTk1BUksuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2MwMjUzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfQ09OTk1BUksuaApAQCAtMCwwICsxLDI1IEBACisjaWZuZGVmIF9JUFRfQ09OTk1BUktfSF90YXJnZXQKKyNkZWZpbmUgX0lQVF9DT05OTUFSS19IX3RhcmdldAorCisvKiBDb3B5cmlnaHQgKEMpIDIwMDIsMjAwNCBNQVJBIFN5c3RlbXMgQUIgPGh0dHA6Ly93d3cubWFyYXN5c3RlbXMuY29tPgorICogYnkgSGVucmlrIE5vcmRzdHJvbSA8aG5vQG1hcmFzeXN0ZW1zLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKK2VudW0geworCUlQVF9DT05OTUFSS19TRVQgPSAwLAorCUlQVF9DT05OTUFSS19TQVZFLAorCUlQVF9DT05OTUFSS19SRVNUT1JFCit9OworCitzdHJ1Y3QgaXB0X2Nvbm5tYXJrX3RhcmdldF9pbmZvIHsKKwl1bnNpZ25lZCBsb25nIG1hcms7CisJdW5zaWduZWQgbG9uZyBtYXNrOworCXVfaW50OF90IG1vZGU7Cit9OworCisjZW5kaWYgLypfSVBUX0NPTk5NQVJLX0hfdGFyZ2V0Ki8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X0RTQ1AuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X0RTQ1AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzBmNTEwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfRFNDUC5oCkBAIC0wLDAgKzEsMjAgQEAKKy8qIGlwdGFibGVzIG1vZHVsZSBmb3Igc2V0dGluZyB0aGUgSVB2NCBEU0NQIGZpZWxkCisgKgorICogKEMpIDIwMDIgSGFyYWxkIFdlbHRlIDxsYWZvcmdlQGdudW1vbmtzLm9yZz4KKyAqIGJhc2VkIG9uIGlwdF9GVE9TLmMgKEMpIDIwMDAgYnkgTWF0dGhldyBHLiBNYXJzaCA8bWdtQHBha3Ryb25peC5jb20+CisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIEdOVSBHUEwgdjIsIDE5OTEKKyAqIAorICogU2VlIFJGQzI0NzQgZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIERTQ1AgZmllbGQgd2l0aGluIHRoZSBJUCBIZWFkZXIuCisgKgorICogaXB0X0RTQ1AuaCx2IDEuNyAyMDAyLzAzLzE0IDEyOjAzOjEzIGxhZm9yZ2UgRXhwCisqLworI2lmbmRlZiBfSVBUX0RTQ1BfVEFSR0VUX0gKKyNkZWZpbmUgX0lQVF9EU0NQX1RBUkdFVF9ICisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2RzY3AuaD4KKworLyogdGFyZ2V0IGluZm8gKi8KK3N0cnVjdCBpcHRfRFNDUF9pbmZvIHsKKwl1X2ludDhfdCBkc2NwOworfTsKKworI2VuZGlmIC8qIF9JUFRfRFNDUF9UQVJHRVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfRUNOLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9FQ04uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGUwZDk4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfRUNOLmgKQEAgLTAsMCArMSwzMSBAQAorLyogSGVhZGVyIGZpbGUgZm9yIGlwdGFibGVzIGlwdF9FQ04gdGFyZ2V0CisgKgorICogKEMpIDIwMDIgYnkgSGFyYWxkIFdlbHRlIDxsYWZvcmdlQGdudW1vbmtzLm9yZz4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIEdOVSBHUEwgdjIsIDE5OTEKKyAqIAorICogaXB0X0VDTi5oLHYgMS4zIDIwMDIvMDUvMjkgMTI6MTc6NDAgbGFmb3JnZSBFeHAKKyovCisjaWZuZGVmIF9JUFRfRUNOX1RBUkdFVF9ICisjZGVmaW5lIF9JUFRfRUNOX1RBUkdFVF9ICisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X0RTQ1AuaD4KKworI2RlZmluZSBJUFRfRUNOX0lQX01BU0sJKH5JUFRfRFNDUF9NQVNLKQorCisjZGVmaW5lIElQVF9FQ05fT1BfU0VUX0lQCTB4MDEJLyogc2V0IEVDTiBiaXRzIG9mIElQdjQgaGVhZGVyICovCisjZGVmaW5lIElQVF9FQ05fT1BfU0VUX0VDRQkweDEwCS8qIHNldCBFQ0UgYml0IG9mIFRDUCBoZWFkZXIgKi8KKyNkZWZpbmUgSVBUX0VDTl9PUF9TRVRfQ1dSCTB4MjAJLyogc2V0IENXUiBiaXQgb2YgVENQIGhlYWRlciAqLworCisjZGVmaW5lIElQVF9FQ05fT1BfTUFTSwkJMHhjZQorCitzdHJ1Y3QgaXB0X0VDTl9pbmZvIHsKKwl1X2ludDhfdCBvcGVyYXRpb247CS8qIGJpdHNldCBvZiBvcGVyYXRpb25zICovCisJdV9pbnQ4X3QgaXBfZWN0OwkvKiBFQ1QgY29kZXBvaW50IG9mIElQdjQgaGVhZGVyLCBwcmUtc2hpZnRlZCAqLworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXVfaW50OF90IGVjZToxLCBjd3I6MTsgLyogVENQIEVDVCBiaXRzICovCisJCX0gdGNwOworCX0gcHJvdG87Cit9OworCisjZW5kaWYgLyogX0lQVF9FQ05fVEFSR0VUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X0xPRy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfTE9HLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI1Zjc4MgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X0xPRy5oCkBAIC0wLDAgKzEsMTYgQEAKKyNpZm5kZWYgX0lQVF9MT0dfSAorI2RlZmluZSBfSVBUX0xPR19ICisKKyNkZWZpbmUgSVBUX0xPR19UQ1BTRVEJCTB4MDEJLyogTG9nIFRDUCBzZXF1ZW5jZSBudW1iZXJzICovCisjZGVmaW5lIElQVF9MT0dfVENQT1BUCQkweDAyCS8qIExvZyBUQ1Agb3B0aW9ucyAqLworI2RlZmluZSBJUFRfTE9HX0lQT1BUCQkweDA0CS8qIExvZyBJUCBvcHRpb25zICovCisjZGVmaW5lIElQVF9MT0dfVUlECQkweDA4CS8qIExvZyBVSUQgb3duaW5nIGxvY2FsIHNvY2tldCAqLworI2RlZmluZSBJUFRfTE9HX01BU0sJCTB4MGYKKworc3RydWN0IGlwdF9sb2dfaW5mbyB7CisJdW5zaWduZWQgY2hhciBsZXZlbDsKKwl1bnNpZ25lZCBjaGFyIGxvZ2ZsYWdzOworCWNoYXIgcHJlZml4WzMwXTsKK307CisKKyNlbmRpZiAvKl9JUFRfTE9HX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfTUFSSy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfTUFSSy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0NzQ4NTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9NQVJLLmgKQEAgLTAsMCArMSwyMCBAQAorI2lmbmRlZiBfSVBUX01BUktfSF90YXJnZXQKKyNkZWZpbmUgX0lQVF9NQVJLX0hfdGFyZ2V0CisKKy8qIFZlcnNpb24gMCAqLworc3RydWN0IGlwdF9tYXJrX3RhcmdldF9pbmZvIHsKKwl1bnNpZ25lZCBsb25nIG1hcms7Cit9OworCisvKiBWZXJzaW9uIDEgKi8KK2VudW0geworCUlQVF9NQVJLX1NFVD0wLAorCUlQVF9NQVJLX0FORCwKKwlJUFRfTUFSS19PUgorfTsKKworc3RydWN0IGlwdF9tYXJrX3RhcmdldF9pbmZvX3YxIHsKKwl1bnNpZ25lZCBsb25nIG1hcms7CisJdV9pbnQ4X3QgbW9kZTsKK307CisjZW5kaWYgLypfSVBUX01BUktfSF90YXJnZXQqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfUkVKRUNULmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9SRUpFQ1QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjkzYTFhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfUkVKRUNULmgKQEAgLTAsMCArMSwyMCBAQAorI2lmbmRlZiBfSVBUX1JFSkVDVF9ICisjZGVmaW5lIF9JUFRfUkVKRUNUX0gKKworZW51bSBpcHRfcmVqZWN0X3dpdGggeworCUlQVF9JQ01QX05FVF9VTlJFQUNIQUJMRSwKKwlJUFRfSUNNUF9IT1NUX1VOUkVBQ0hBQkxFLAorCUlQVF9JQ01QX1BST1RfVU5SRUFDSEFCTEUsCisJSVBUX0lDTVBfUE9SVF9VTlJFQUNIQUJMRSwKKwlJUFRfSUNNUF9FQ0hPUkVQTFksCisJSVBUX0lDTVBfTkVUX1BST0hJQklURUQsCisJSVBUX0lDTVBfSE9TVF9QUk9ISUJJVEVELAorCUlQVF9UQ1BfUkVTRVQsCisJSVBUX0lDTVBfQURNSU5fUFJPSElCSVRFRAorfTsKKworc3RydWN0IGlwdF9yZWplY3RfaW5mbyB7CisJZW51bSBpcHRfcmVqZWN0X3dpdGggd2l0aDsgICAgICAvKiByZWplY3QgdHlwZSAqLworfTsKKworI2VuZGlmIC8qX0lQVF9SRUpFQ1RfSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9TQU1FLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9TQU1FLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M0YzBiMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X1NBTUUuaApAQCAtMCwwICsxLDE5IEBACisjaWZuZGVmIF9JUFRfU0FNRV9ICisjZGVmaW5lIF9JUFRfU0FNRV9ICisKKyNkZWZpbmUgSVBUX1NBTUVfTUFYX1JBTkdFCTEwCisKKyNkZWZpbmUgSVBUX1NBTUVfTk9EU1QJCTB4MDEKKworc3RydWN0IGlwdF9zYW1lX2luZm8KK3sKKwl1bnNpZ25lZCBjaGFyIGluZm87CisJdV9pbnQzMl90IHJhbmdlc2l6ZTsKKwl1X2ludDMyX3QgaXBudW07CisJdV9pbnQzMl90ICppcGFycmF5OworCisJLyogaGFuZ3Mgb2ZmIGVuZC4gKi8KKwlzdHJ1Y3QgaXBfbmF0X3JhbmdlIHJhbmdlW0lQVF9TQU1FX01BWF9SQU5HRV07Cit9OworCisjZW5kaWYgLypfSVBUX1NBTUVfSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9UQ1BNU1MuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X1RDUE1TUy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhZGIzOTUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9UQ1BNU1MuaApAQCAtMCwwICsxLDEwIEBACisjaWZuZGVmIF9JUFRfVENQTVNTX0gKKyNkZWZpbmUgX0lQVF9UQ1BNU1NfSAorCitzdHJ1Y3QgaXB0X3RjcG1zc19pbmZvIHsKKwl1X2ludDE2X3QgbXNzOworfTsKKworI2RlZmluZSBJUFRfVENQTVNTX0NMQU1QX1BNVFUgMHhmZmZmCisKKyNlbmRpZiAvKl9JUFRfVENQTVNTX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfVE9TLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9UT1MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmY5ZTFmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfVE9TLmgKQEAgLTAsMCArMSwxMiBAQAorI2lmbmRlZiBfSVBUX1RPU19IX3RhcmdldAorI2RlZmluZSBfSVBUX1RPU19IX3RhcmdldAorCisjaWZuZGVmIElQVE9TX05PUk1BTFNWQworI2RlZmluZSBJUFRPU19OT1JNQUxTVkMgMAorI2VuZGlmCisKK3N0cnVjdCBpcHRfdG9zX3RhcmdldF9pbmZvIHsKKwl1X2ludDhfdCB0b3M7Cit9OworCisjZW5kaWYgLypfSVBUX1RPU19IX3RhcmdldCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9VTE9HLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9VTE9HLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE3YWFkMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X1VMT0cuaApAQCAtMCwwICsxLDQ5IEBACisvKiBIZWFkZXIgZmlsZSBmb3IgSVAgdGFibGVzIHVzZXJzcGFjZSBsb2dnaW5nLCBWZXJzaW9uIDEuOAorICoKKyAqIChDKSAyMDAwLTIwMDIgYnkgSGFyYWxkIFdlbHRlIDxsYWZvcmdlQGdudW1vbmtzLm9yZz4KKyAqIAorICogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIEdOVSBHUEwgKi8KKworI2lmbmRlZiBfSVBUX1VMT0dfSAorI2RlZmluZSBfSVBUX1VMT0dfSAorCisjaWZuZGVmIE5FVExJTktfTkZMT0cKKyNkZWZpbmUgTkVUTElOS19ORkxPRyAJNQorI2VuZGlmCisKKyNkZWZpbmUgVUxPR19ERUZBVUxUX05MR1JPVVAJMQorI2RlZmluZSBVTE9HX0RFRkFVTFRfUVRIUkVTSE9MRAkxCisKKyNkZWZpbmUgVUxPR19NQUNfTEVOCTgwCisjZGVmaW5lIFVMT0dfUFJFRklYX0xFTgkzMgorCisjZGVmaW5lIFVMT0dfTUFYX1FMRU4JNTAKKy8qIFdoeSA1MD8gV2VsbC4uLiB0aGVyZSBpcyBhIGxpbWl0IGltcG9zZWQgYnkgdGhlIHNsYWIgY2FjaGUgMTMxMDAwCisgKiBieXRlcy4gU28gdGhlIG11bHRpcGFydCBuZXRsaW5rLW1lc3NhZ2UgaGFzIHRvIGJlIDwgMTMxMDAwIGJ5dGVzLgorICogQXNzdW1pbmcgYSBzdGFuZGFyZCBldGhlcm5ldC1tdHUgb2YgMTUwMCwgd2UgY291bGQgZGVmaW5lIHRoaXMgdXAKKyAqIHRvIDgwLi4uIGJ1dCBldmVuIDUwIHNlZW1zIHRvIGJlIGJpZyBlbm91Z2guICovCisKKy8qIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUgZm9yIGVhY2ggcnVsZSB3aXRoIGEgVUxPRyB0YXJnZXQgKi8KK3N0cnVjdCBpcHRfdWxvZ19pbmZvIHsKKwl1bnNpZ25lZCBpbnQgbmxfZ3JvdXA7CisJc2l6ZV90IGNvcHlfcmFuZ2U7CisJc2l6ZV90IHF0aHJlc2hvbGQ7CisJY2hhciBwcmVmaXhbVUxPR19QUkVGSVhfTEVOXTsKK307CisKKy8qIEZvcm1hdCBvZiB0aGUgVUxPRyBwYWNrZXRzIHBhc3NlZCB0aHJvdWdoIG5ldGxpbmsgKi8KK3R5cGVkZWYgc3RydWN0IHVsb2dfcGFja2V0X21zZyB7CisJdW5zaWduZWQgbG9uZyBtYXJrOworCWxvbmcgdGltZXN0YW1wX3NlYzsKKwlsb25nIHRpbWVzdGFtcF91c2VjOworCXVuc2lnbmVkIGludCBob29rOworCWNoYXIgaW5kZXZfbmFtZVtJRk5BTVNJWl07CisJY2hhciBvdXRkZXZfbmFtZVtJRk5BTVNJWl07CisJc2l6ZV90IGRhdGFfbGVuOworCWNoYXIgcHJlZml4W1VMT0dfUFJFRklYX0xFTl07CisJdW5zaWduZWQgY2hhciBtYWNfbGVuOworCXVuc2lnbmVkIGNoYXIgbWFjW1VMT0dfTUFDX0xFTl07CisJdW5zaWduZWQgY2hhciBwYXlsb2FkWzBdOworfSB1bG9nX3BhY2tldF9tc2dfdDsKKworI2VuZGlmIC8qX0lQVF9VTE9HX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfYWRkcnR5cGUuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2FkZHJ0eXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY2ZWQwMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2FkZHJ0eXBlLmgKQEAgLTAsMCArMSwxMSBAQAorI2lmbmRlZiBfSVBUX0FERFJUWVBFX0gKKyNkZWZpbmUgX0lQVF9BRERSVFlQRV9ICisKK3N0cnVjdCBpcHRfYWRkcnR5cGVfaW5mbyB7CisJdV9pbnQxNl90CXNvdXJjZTsJCS8qIHNvdXJjZS10eXBlIG1hc2sgKi8KKwl1X2ludDE2X3QJZGVzdDsJCS8qIGRlc3QtdHlwZSBtYXNrICovCisJdV9pbnQzMl90CWludmVydF9zb3VyY2U7CisJdV9pbnQzMl90CWludmVydF9kZXN0OworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9haC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfYWguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjlhMmFjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfYWguaApAQCAtMCwwICsxLDE2IEBACisjaWZuZGVmIF9JUFRfQUhfSAorI2RlZmluZSBfSVBUX0FIX0gKKworc3RydWN0IGlwdF9haAoreworCXVfaW50MzJfdCBzcGlzWzJdOwkJCS8qIFNlY3VyaXR5IFBhcmFtZXRlciBJbmRleCAqLworCXVfaW50OF90ICBpbnZmbGFnczsJCQkvKiBJbnZlcnNlIGZsYWdzICovCit9OworCisKKworLyogVmFsdWVzIGZvciAiaW52ZmxhZ3MiIGZpZWxkIGluIHN0cnVjdCBpcHRfYWguICovCisjZGVmaW5lIElQVF9BSF9JTlZfU1BJCQkweDAxCS8qIEludmVydCB0aGUgc2Vuc2Ugb2Ygc3BpLiAqLworI2RlZmluZSBJUFRfQUhfSU5WX01BU0sJMHgwMQkvKiBBbGwgcG9zc2libGUgZmxhZ3MuICovCisKKyNlbmRpZiAvKl9JUFRfQUhfSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9jb21tZW50LmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9jb21tZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVjMTEyMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2NvbW1lbnQuaApAQCAtMCwwICsxLDEwIEBACisjaWZuZGVmIF9JUFRfQ09NTUVOVF9ICisjZGVmaW5lIF9JUFRfQ09NTUVOVF9ICisKKyNkZWZpbmUgSVBUX01BWF9DT01NRU5UX0xFTiAyNTYKKworc3RydWN0IGlwdF9jb21tZW50X2luZm8geworCXVuc2lnbmVkIGNoYXIgY29tbWVudFtJUFRfTUFYX0NPTU1FTlRfTEVOXTsKK307CisKKyNlbmRpZiAvKiBfSVBUX0NPTU1FTlRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfY29ubm1hcmsuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2Nvbm5tYXJrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY1NzMyNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2Nvbm5tYXJrLmgKQEAgLTAsMCArMSwxOCBAQAorI2lmbmRlZiBfSVBUX0NPTk5NQVJLX0gKKyNkZWZpbmUgX0lQVF9DT05OTUFSS19ICisKKy8qIENvcHlyaWdodCAoQykgMjAwMiwyMDA0IE1BUkEgU3lzdGVtcyBBQiA8aHR0cDovL3d3dy5tYXJhc3lzdGVtcy5jb20+CisgKiBieSBIZW5yaWsgTm9yZHN0cm9tIDxobm9AbWFyYXN5c3RlbXMuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworc3RydWN0IGlwdF9jb25ubWFya19pbmZvIHsKKwl1bnNpZ25lZCBsb25nIG1hcmssIG1hc2s7CisJdV9pbnQ4X3QgaW52ZXJ0OworfTsKKworI2VuZGlmIC8qX0lQVF9DT05OTUFSS19IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2Nvbm50cmFjay5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfY29ubnRyYWNrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDEzYzU2NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2Nvbm50cmFjay5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qIEhlYWRlciBmaWxlIGZvciBrZXJuZWwgbW9kdWxlIHRvIG1hdGNoIGNvbm5lY3Rpb24gdHJhY2tpbmcgaW5mb3JtYXRpb24uCisgKiBHUEwgKEMpIDIwMDEgIE1hcmMgQm91Y2hlciAobWFyY0BtYnNpLmNhKS4KKyAqLworCisjaWZuZGVmIF9JUFRfQ09OTlRSQUNLX0gKKyNkZWZpbmUgX0lQVF9DT05OVFJBQ0tfSAorCisjZGVmaW5lIElQVF9DT05OVFJBQ0tfU1RBVEVfQklUKGN0aW5mbykgKDEgPDwgKChjdGluZm8pJUlQX0NUX0lTX1JFUExZKzEpKQorI2RlZmluZSBJUFRfQ09OTlRSQUNLX1NUQVRFX0lOVkFMSUQgKDEgPDwgMCkKKworI2RlZmluZSBJUFRfQ09OTlRSQUNLX1NUQVRFX1NOQVQgKDEgPDwgKElQX0NUX05VTUJFUiArIDEpKQorI2RlZmluZSBJUFRfQ09OTlRSQUNLX1NUQVRFX0ROQVQgKDEgPDwgKElQX0NUX05VTUJFUiArIDIpKQorI2RlZmluZSBJUFRfQ09OTlRSQUNLX1NUQVRFX1VOVFJBQ0tFRCAoMSA8PCAoSVBfQ1RfTlVNQkVSICsgMykpCisKKy8qIGZsYWdzLCBpbnZmbGFnczogKi8KKyNkZWZpbmUgSVBUX0NPTk5UUkFDS19TVEFURQkweDAxCisjZGVmaW5lIElQVF9DT05OVFJBQ0tfUFJPVE8JMHgwMgorI2RlZmluZSBJUFRfQ09OTlRSQUNLX09SSUdTUkMJMHgwNAorI2RlZmluZSBJUFRfQ09OTlRSQUNLX09SSUdEU1QJMHgwOAorI2RlZmluZSBJUFRfQ09OTlRSQUNLX1JFUExTUkMJMHgxMAorI2RlZmluZSBJUFRfQ09OTlRSQUNLX1JFUExEU1QJMHgyMAorI2RlZmluZSBJUFRfQ09OTlRSQUNLX1NUQVRVUwkweDQwCisjZGVmaW5lIElQVF9DT05OVFJBQ0tfRVhQSVJFUwkweDgwCisKKy8qIFRoaXMgaXMgZXhwb3NlZCB0byB1c2Vyc3BhY2UsIHNvIHJlbWFpbnMgZnJvemVuIGluIHRpbWUuICovCitzdHJ1Y3QgaXBfY29ubnRyYWNrX29sZF90dXBsZQoreworCXN0cnVjdCB7CisJCV9fdTMyIGlwOworCQl1bmlvbiB7CisJCQlfX3UxNiBhbGw7CisJCX0gdTsKKwl9IHNyYzsKKworCXN0cnVjdCB7CisJCV9fdTMyIGlwOworCQl1bmlvbiB7CisJCQlfX3UxNiBhbGw7CisJCX0gdTsKKworCQkvKiBUaGUgcHJvdG9jb2wuICovCisJCXUxNiBwcm90b251bTsKKwl9IGRzdDsKK307CisKK3N0cnVjdCBpcHRfY29ubnRyYWNrX2luZm8KK3sKKwl1bnNpZ25lZCBpbnQgc3RhdGVtYXNrLCBzdGF0dXNtYXNrOworCisJc3RydWN0IGlwX2Nvbm50cmFja19vbGRfdHVwbGUgdHVwbGVbSVBfQ1RfRElSX01BWF07CisJc3RydWN0IGluX2FkZHIgc2lwbXNrW0lQX0NUX0RJUl9NQVhdLCBkaXBtc2tbSVBfQ1RfRElSX01BWF07CisKKwl1bnNpZ25lZCBsb25nIGV4cGlyZXNfbWluLCBleHBpcmVzX21heDsKKworCS8qIEZsYWdzIHdvcmQgKi8KKwl1X2ludDhfdCBmbGFnczsKKwkvKiBJbnZlcnNlIGZsYWdzICovCisJdV9pbnQ4X3QgaW52ZmxhZ3M7Cit9OworI2VuZGlmIC8qX0lQVF9DT05OVFJBQ0tfSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9kc2NwLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9kc2NwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZhNmRmZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2RzY3AuaApAQCAtMCwwICsxLDIzIEBACisvKiBpcHRhYmxlcyBtb2R1bGUgZm9yIG1hdGNoaW5nIHRoZSBJUHY0IERTQ1AgZmllbGQKKyAqCisgKiAoQykgMjAwMiBIYXJhbGQgV2VsdGUgPGxhZm9yZ2VAZ251bW9ua3Mub3JnPgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCB1bmRlciBHTlUgR1BMIHYyLCAxOTkxCisgKiAKKyAqIFNlZSBSRkMyNDc0IGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSBEU0NQIGZpZWxkIHdpdGhpbiB0aGUgSVAgSGVhZGVyLgorICoKKyAqIGlwdF9kc2NwLmgsdiAxLjMgMjAwMi8wOC8wNSAxOTowMDoyMSBsYWZvcmdlIEV4cAorKi8KKyNpZm5kZWYgX0lQVF9EU0NQX0gKKyNkZWZpbmUgX0lQVF9EU0NQX0gKKworI2RlZmluZSBJUFRfRFNDUF9NQVNLCTB4ZmMJLyogMTExMTExMDAgKi8KKyNkZWZpbmUgSVBUX0RTQ1BfU0hJRlQJMgorI2RlZmluZSBJUFRfRFNDUF9NQVgJMHgzZgkvKiAwMDExMTExMSAqLworCisvKiBtYXRjaCBpbmZvICovCitzdHJ1Y3QgaXB0X2RzY3BfaW5mbyB7CisJdV9pbnQ4X3QgZHNjcDsKKwl1X2ludDhfdCBpbnZlcnQ7Cit9OworCisjZW5kaWYgLyogX0lQVF9EU0NQX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2Vjbi5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfZWNuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWYwZDlhNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2Vjbi5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qIGlwdGFibGVzIG1vZHVsZSBmb3IgbWF0Y2hpbmcgdGhlIEVDTiBoZWFkZXIgaW4gSVB2NCBhbmQgVENQIGhlYWRlcgorICoKKyAqIChDKSAyMDAyIEhhcmFsZCBXZWx0ZSA8bGFmb3JnZUBnbnVtb25rcy5vcmc+CisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCB1bmRlciBHTlUgR1BMIHYyLCAxOTkxCisgKiAKKyAqIGlwdF9lY24uaCx2IDEuNCAyMDAyLzA4LzA1IDE5OjM5OjAwIGxhZm9yZ2UgRXhwCisqLworI2lmbmRlZiBfSVBUX0VDTl9ICisjZGVmaW5lIF9JUFRfRUNOX0gKKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfZHNjcC5oPgorCisjZGVmaW5lIElQVF9FQ05fSVBfTUFTSwkofklQVF9EU0NQX01BU0spCisKKyNkZWZpbmUgSVBUX0VDTl9PUF9NQVRDSF9JUAkweDAxCisjZGVmaW5lIElQVF9FQ05fT1BfTUFUQ0hfRUNFCTB4MTAKKyNkZWZpbmUgSVBUX0VDTl9PUF9NQVRDSF9DV1IJMHgyMAorCisjZGVmaW5lIElQVF9FQ05fT1BfTUFUQ0hfTUFTSwkweGNlCisKKy8qIG1hdGNoIGluZm8gKi8KK3N0cnVjdCBpcHRfZWNuX2luZm8geworCXVfaW50OF90IG9wZXJhdGlvbjsKKwl1X2ludDhfdCBpbnZlcnQ7CisJdV9pbnQ4X3QgaXBfZWN0OworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXVfaW50OF90IGVjdDsKKwkJfSB0Y3A7CisJfSBwcm90bzsKK307CisKKyNlbmRpZiAvKiBfSVBUX0VDTl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9lc3AuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2VzcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3ODJhODMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9lc3AuaApAQCAtMCwwICsxLDE2IEBACisjaWZuZGVmIF9JUFRfRVNQX0gKKyNkZWZpbmUgX0lQVF9FU1BfSAorCitzdHJ1Y3QgaXB0X2VzcAoreworCXVfaW50MzJfdCBzcGlzWzJdOwkJCS8qIFNlY3VyaXR5IFBhcmFtZXRlciBJbmRleCAqLworCXVfaW50OF90ICBpbnZmbGFnczsJCQkvKiBJbnZlcnNlIGZsYWdzICovCit9OworCisKKworLyogVmFsdWVzIGZvciAiaW52ZmxhZ3MiIGZpZWxkIGluIHN0cnVjdCBpcHRfZXNwLiAqLworI2RlZmluZSBJUFRfRVNQX0lOVl9TUEkJCTB4MDEJLyogSW52ZXJ0IHRoZSBzZW5zZSBvZiBzcGkuICovCisjZGVmaW5lIElQVF9FU1BfSU5WX01BU0sJMHgwMQkvKiBBbGwgcG9zc2libGUgZmxhZ3MuICovCisKKyNlbmRpZiAvKl9JUFRfRVNQX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfaGFzaGxpbWl0LmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9oYXNobGltaXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzJjYjY0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfaGFzaGxpbWl0LmgKQEAgLTAsMCArMSw0MCBAQAorI2lmbmRlZiBfSVBUX0hBU0hMSU1JVF9ICisjZGVmaW5lIF9JUFRfSEFTSExJTUlUX0gKKworLyogdGltaW5ncyBhcmUgaW4gbWlsbGlzZWNvbmRzLiAqLworI2RlZmluZSBJUFRfSEFTSExJTUlUX1NDQUxFIDEwMDAwCisvKiAxLzEwLDAwMCBzZWMgcGVyaW9kID0+IG1heCBvZiAxMCwwMDAvc2VjLiAgTWluIHJhdGUgaXMgdGhlbiA0Mjk0OTAKKyAgIHNlY29uZHMsIG9yIG9uZSBldmVyeSA1OSBob3Vycy4gKi8KKworLyogZGV0YWlscyBvZiB0aGlzIHN0cnVjdHVyZSBoaWRkZW4gYnkgdGhlIGltcGxlbWVudGF0aW9uICovCitzdHJ1Y3QgaXB0X2hhc2hsaW1pdF9odGFibGU7CisKKyNkZWZpbmUgSVBUX0hBU0hMSU1JVF9IQVNIX0RJUAkweDAwMDEKKyNkZWZpbmUgSVBUX0hBU0hMSU1JVF9IQVNIX0RQVAkweDAwMDIKKyNkZWZpbmUgSVBUX0hBU0hMSU1JVF9IQVNIX1NJUAkweDAwMDQKKyNkZWZpbmUgSVBUX0hBU0hMSU1JVF9IQVNIX1NQVAkweDAwMDgKKworc3RydWN0IGhhc2hsaW1pdF9jZmcgeworCXVfaW50MzJfdCBtb2RlOwkgIC8qIGJpdG1hc2sgb2YgSVBUX0hBU0hMSU1JVF9IQVNIXyogKi8KKwl1X2ludDMyX3QgYXZnOyAgICAvKiBBdmVyYWdlIHNlY3MgYmV0d2VlbiBwYWNrZXRzICogc2NhbGUgKi8KKwl1X2ludDMyX3QgYnVyc3Q7ICAvKiBQZXJpb2QgbXVsdGlwbGllciBmb3IgdXBwZXIgbGltaXQuICovCisKKwkvKiB1c2VyIHNwZWNpZmllZCAqLworCXVfaW50MzJfdCBzaXplOwkJLyogaG93IG1hbnkgYnVja2V0cyAqLworCXVfaW50MzJfdCBtYXg7CQkvKiBtYXggbnVtYmVyIG9mIGVudHJpZXMgKi8KKwl1X2ludDMyX3QgZ2NfaW50ZXJ2YWw7CS8qIGdjIGludGVydmFsICovCisJdV9pbnQzMl90IGV4cGlyZTsJLyogd2hlbiBkbyBlbnRyaWVzIGV4cGlyZT8gKi8KK307CisKK3N0cnVjdCBpcHRfaGFzaGxpbWl0X2luZm8geworCWNoYXIgbmFtZSBbSUZOQU1TSVpdOwkJLyogbmFtZSAqLworCXN0cnVjdCBoYXNobGltaXRfY2ZnIGNmZzsKKwlzdHJ1Y3QgaXB0X2hhc2hsaW1pdF9odGFibGUgKmhpbmZvOworCisJLyogVXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBrZXJuZWwgKi8KKwl1bmlvbiB7CisJCXZvaWQgKnB0cjsKKwkJc3RydWN0IGlwdF9oYXNobGltaXRfaW5mbyAqbWFzdGVyOworCX0gdTsKK307CisjZW5kaWYgLypfSVBUX0hBU0hMSU1JVF9IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2hlbHBlci5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfaGVscGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmYxMmVjYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2hlbHBlci5oCkBAIC0wLDAgKzEsOCBAQAorI2lmbmRlZiBfSVBUX0hFTFBFUl9ICisjZGVmaW5lIF9JUFRfSEVMUEVSX0gKKworc3RydWN0IGlwdF9oZWxwZXJfaW5mbyB7CisJaW50IGludmVydDsKKwljaGFyIG5hbWVbMzBdOworfTsKKyNlbmRpZiAvKiBfSVBUX0hFTFBFUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9pcHJhbmdlLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9pcHJhbmdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VjYjNiZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2lwcmFuZ2UuaApAQCAtMCwwICsxLDIzIEBACisjaWZuZGVmIF9JUFRfSVBSQU5HRV9ICisjZGVmaW5lIF9JUFRfSVBSQU5HRV9ICisKKyNkZWZpbmUgSVBSQU5HRV9TUkMJCTB4MDEJLyogTWF0Y2ggc291cmNlIElQIGFkZHJlc3MgKi8KKyNkZWZpbmUgSVBSQU5HRV9EU1QJCTB4MDIJLyogTWF0Y2ggZGVzdGluYXRpb24gSVAgYWRkcmVzcyAqLworI2RlZmluZSBJUFJBTkdFX1NSQ19JTlYJCTB4MTAJLyogTmVnYXRlIHRoZSBjb25kaXRpb24gKi8KKyNkZWZpbmUgSVBSQU5HRV9EU1RfSU5WCQkweDIwCS8qIE5lZ2F0ZSB0aGUgY29uZGl0aW9uICovCisKK3N0cnVjdCBpcHRfaXByYW5nZSB7CisJLyogSW5jbHVzaXZlOiBuZXR3b3JrIG9yZGVyLiAqLworCXVfaW50MzJfdCBtaW5faXAsIG1heF9pcDsKK307CisKK3N0cnVjdCBpcHRfaXByYW5nZV9pbmZvCit7CisJc3RydWN0IGlwdF9pcHJhbmdlIHNyYzsKKwlzdHJ1Y3QgaXB0X2lwcmFuZ2UgZHN0OworCisJLyogRmxhZ3MgZnJvbSBhYm92ZSAqLworCXVfaW50OF90IGZsYWdzOworfTsKKworI2VuZGlmIC8qIF9JUFRfSVBSQU5HRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9sZW5ndGguaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2xlbmd0aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlMDg4NTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9sZW5ndGguaApAQCAtMCwwICsxLDkgQEAKKyNpZm5kZWYgX0lQVF9MRU5HVEhfSAorI2RlZmluZSBfSVBUX0xFTkdUSF9ICisKK3N0cnVjdCBpcHRfbGVuZ3RoX2luZm8geworICAgIHVfaW50MTZfdAltaW4sIG1heDsKKyAgICB1X2ludDhfdAlpbnZlcnQ7Cit9OworCisjZW5kaWYgLypfSVBUX0xFTkdUSF9IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2xpbWl0LmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9saW1pdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1NjQ1MzQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9saW1pdC5oCkBAIC0wLDAgKzEsMjEgQEAKKyNpZm5kZWYgX0lQVF9SQVRFX0gKKyNkZWZpbmUgX0lQVF9SQVRFX0gKKworLyogdGltaW5ncyBhcmUgaW4gbWlsbGlzZWNvbmRzLiAqLworI2RlZmluZSBJUFRfTElNSVRfU0NBTEUgMTAwMDAKKworLyogMS8xMCwwMDAgc2VjIHBlcmlvZCA9PiBtYXggb2YgMTAsMDAwL3NlYy4gIE1pbiByYXRlIGlzIHRoZW4gNDI5NDkwCisgICBzZWNvbmRzLCBvciBvbmUgZXZlcnkgNTkgaG91cnMuICovCitzdHJ1Y3QgaXB0X3JhdGVpbmZvIHsKKwl1X2ludDMyX3QgYXZnOyAgICAvKiBBdmVyYWdlIHNlY3MgYmV0d2VlbiBwYWNrZXRzICogc2NhbGUgKi8KKwl1X2ludDMyX3QgYnVyc3Q7ICAvKiBQZXJpb2QgbXVsdGlwbGllciBmb3IgdXBwZXIgbGltaXQuICovCisKKwkvKiBVc2VkIGludGVybmFsbHkgYnkgdGhlIGtlcm5lbCAqLworCXVuc2lnbmVkIGxvbmcgcHJldjsKKwl1X2ludDMyX3QgY3JlZGl0OworCXVfaW50MzJfdCBjcmVkaXRfY2FwLCBjb3N0OworCisJLyogVWdseSwgdWdseSBmdWNrZXIuICovCisJc3RydWN0IGlwdF9yYXRlaW5mbyAqbWFzdGVyOworfTsKKyNlbmRpZiAvKl9JUFRfUkFURV9IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X21hYy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfbWFjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhkNWI4ZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X21hYy5oCkBAIC0wLDAgKzEsOCBAQAorI2lmbmRlZiBfSVBUX01BQ19ICisjZGVmaW5lIF9JUFRfTUFDX0gKKworc3RydWN0IGlwdF9tYWNfaW5mbyB7CisgICAgdW5zaWduZWQgY2hhciBzcmNhZGRyW0VUSF9BTEVOXTsKKyAgICBpbnQgaW52ZXJ0OworfTsKKyNlbmRpZiAvKl9JUFRfTUFDX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfbWFyay5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfbWFyay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzOTUyYjUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9tYXJrLmgKQEAgLTAsMCArMSw5IEBACisjaWZuZGVmIF9JUFRfTUFSS19ICisjZGVmaW5lIF9JUFRfTUFSS19ICisKK3N0cnVjdCBpcHRfbWFya19pbmZvIHsKKyAgICB1bnNpZ25lZCBsb25nIG1hcmssIG1hc2s7CisgICAgdV9pbnQ4X3QgaW52ZXJ0OworfTsKKworI2VuZGlmIC8qX0lQVF9NQVJLX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfbXVsdGlwb3J0LmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9tdWx0aXBvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmI2ZmZmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfbXVsdGlwb3J0LmgKQEAgLTAsMCArMSwzMCBAQAorI2lmbmRlZiBfSVBUX01VTFRJUE9SVF9ICisjZGVmaW5lIF9JUFRfTVVMVElQT1JUX0gKKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF90YWJsZXMuaD4KKworZW51bSBpcHRfbXVsdGlwb3J0X2ZsYWdzCit7CisJSVBUX01VTFRJUE9SVF9TT1VSQ0UsCisJSVBUX01VTFRJUE9SVF9ERVNUSU5BVElPTiwKKwlJUFRfTVVMVElQT1JUX0VJVEhFUgorfTsKKworI2RlZmluZSBJUFRfTVVMVElfUE9SVFMJMTUKKworLyogTXVzdCBmaXQgaW5zaWRlIHVuaW9uIGlwdF9tYXRjaGluZm86IDE2IGJ5dGVzICovCitzdHJ1Y3QgaXB0X211bHRpcG9ydAoreworCXVfaW50OF90IGZsYWdzOwkJCQkvKiBUeXBlIG9mIGNvbXBhcmlzb24gKi8KKwl1X2ludDhfdCBjb3VudDsJCQkJLyogTnVtYmVyIG9mIHBvcnRzICovCisJdV9pbnQxNl90IHBvcnRzW0lQVF9NVUxUSV9QT1JUU107CS8qIFBvcnRzICovCit9OworCitzdHJ1Y3QgaXB0X211bHRpcG9ydF92MQoreworCXVfaW50OF90IGZsYWdzOwkJCQkvKiBUeXBlIG9mIGNvbXBhcmlzb24gKi8KKwl1X2ludDhfdCBjb3VudDsJCQkJLyogTnVtYmVyIG9mIHBvcnRzICovCisJdV9pbnQxNl90IHBvcnRzW0lQVF9NVUxUSV9QT1JUU107CS8qIFBvcnRzICovCisJdV9pbnQ4X3QgcGZsYWdzW0lQVF9NVUxUSV9QT1JUU107CS8qIFBvcnQgZmxhZ3MgKi8KKwl1X2ludDhfdCBpbnZlcnQ7CQkJLyogSW52ZXJ0IGZsYWcgKi8KK307CisjZW5kaWYgLypfSVBUX01VTFRJUE9SVF9IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X293bmVyLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9vd25lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyZjRiZGEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9vd25lci5oCkBAIC0wLDAgKzEsMjAgQEAKKyNpZm5kZWYgX0lQVF9PV05FUl9ICisjZGVmaW5lIF9JUFRfT1dORVJfSAorCisvKiBtYXRjaCBhbmQgaW52ZXJ0IGZsYWdzICovCisjZGVmaW5lIElQVF9PV05FUl9VSUQJMHgwMQorI2RlZmluZSBJUFRfT1dORVJfR0lECTB4MDIKKyNkZWZpbmUgSVBUX09XTkVSX1BJRAkweDA0CisjZGVmaW5lIElQVF9PV05FUl9TSUQJMHgwOAorI2RlZmluZSBJUFRfT1dORVJfQ09NTQkweDEwCisKK3N0cnVjdCBpcHRfb3duZXJfaW5mbyB7CisgICAgdWlkX3QgdWlkOworICAgIGdpZF90IGdpZDsKKyAgICBwaWRfdCBwaWQ7CisgICAgcGlkX3Qgc2lkOworICAgIGNoYXIgY29tbVsxNl07CisgICAgdV9pbnQ4X3QgbWF0Y2gsIGludmVydDsJLyogZmxhZ3MgKi8KK307CisKKyNlbmRpZiAvKl9JUFRfT1dORVJfSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9waHlzZGV2LmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9waHlzZGV2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzUzOGM4NgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X3BoeXNkZXYuaApAQCAtMCwwICsxLDI0IEBACisjaWZuZGVmIF9JUFRfUEhZU0RFVl9ICisjZGVmaW5lIF9JUFRfUEhZU0RFVl9ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8bGludXgvaWYuaD4KKyNlbmRpZgorCisjZGVmaW5lIElQVF9QSFlTREVWX09QX0lOCQkweDAxCisjZGVmaW5lIElQVF9QSFlTREVWX09QX09VVAkJMHgwMgorI2RlZmluZSBJUFRfUEhZU0RFVl9PUF9CUklER0VECQkweDA0CisjZGVmaW5lIElQVF9QSFlTREVWX09QX0lTSU4JCTB4MDgKKyNkZWZpbmUgSVBUX1BIWVNERVZfT1BfSVNPVVQJCTB4MTAKKyNkZWZpbmUgSVBUX1BIWVNERVZfT1BfTUFTSwkJKDB4MjAgLSAxKQorCitzdHJ1Y3QgaXB0X3BoeXNkZXZfaW5mbyB7CisJY2hhciBwaHlzaW5kZXZbSUZOQU1TSVpdOworCWNoYXIgaW5fbWFza1tJRk5BTVNJWl07CisJY2hhciBwaHlzb3V0ZGV2W0lGTkFNU0laXTsKKwljaGFyIG91dF9tYXNrW0lGTkFNU0laXTsKKwl1X2ludDhfdCBpbnZlcnQ7CisJdV9pbnQ4X3QgYml0bWFzazsKK307CisKKyNlbmRpZiAvKl9JUFRfUEhZU0RFVl9IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X3BrdHR5cGUuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X3BrdHR5cGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTNhNjU4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfcGt0dHlwZS5oCkBAIC0wLDAgKzEsOCBAQAorI2lmbmRlZiBfSVBUX1BLVFRZUEVfSAorI2RlZmluZSBfSVBUX1BLVFRZUEVfSAorCitzdHJ1Y3QgaXB0X3BrdHR5cGVfaW5mbyB7CisJaW50CXBrdHR5cGU7CisJaW50CWludmVydDsKK307CisjZW5kaWYgLypfSVBUX1BLVFRZUEVfSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9yZWFsbS5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfcmVhbG0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGQ2Njk4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfcmVhbG0uaApAQCAtMCwwICsxLDEwIEBACisjaWZuZGVmIF9JUFRfUkVBTE1fSAorI2RlZmluZSBfSVBUX1JFQUxNX0gKKworc3RydWN0IGlwdF9yZWFsbV9pbmZvIHsKKwl1X2ludDMyX3QgaWQ7CisJdV9pbnQzMl90IG1hc2s7CisJdV9pbnQ4X3QgaW52ZXJ0OworfTsKKworI2VuZGlmIC8qIF9JUFRfUkVBTE1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfcmVjZW50LmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9yZWNlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTA4YTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfcmVjZW50LmgKQEAgLTAsMCArMSwyNyBAQAorI2lmbmRlZiBfSVBUX1JFQ0VOVF9ICisjZGVmaW5lIF9JUFRfUkVDRU5UX0gKKworI2RlZmluZSBSRUNFTlRfTkFNRQkiaXB0X3JlY2VudCIKKyNkZWZpbmUgUkVDRU5UX1ZFUgkidjAuMy4xIgorCisjZGVmaW5lIElQVF9SRUNFTlRfQ0hFQ0sgIDEKKyNkZWZpbmUgSVBUX1JFQ0VOVF9TRVQgICAgMgorI2RlZmluZSBJUFRfUkVDRU5UX1VQREFURSA0CisjZGVmaW5lIElQVF9SRUNFTlRfUkVNT1ZFIDgKKyNkZWZpbmUgSVBUX1JFQ0VOVF9UVEwgICAxNgorCisjZGVmaW5lIElQVF9SRUNFTlRfU09VUkNFIDAKKyNkZWZpbmUgSVBUX1JFQ0VOVF9ERVNUICAgMQorCisjZGVmaW5lIElQVF9SRUNFTlRfTkFNRV9MRU4gMjAwCisKK3N0cnVjdCBpcHRfcmVjZW50X2luZm8geworCXVfaW50MzJfdCAgIHNlY29uZHM7CisJdV9pbnQzMl90ICAgaGl0X2NvdW50OworCXVfaW50OF90ICAgIGNoZWNrX3NldDsKKwl1X2ludDhfdCAgICBpbnZlcnQ7CisJY2hhciAgICAgICAgbmFtZVtJUFRfUkVDRU5UX05BTUVfTEVOXTsKKwl1X2ludDhfdCAgICBzaWRlOworfTsKKworI2VuZGlmIC8qX0lQVF9SRUNFTlRfSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9zY3RwLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9zY3RwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTkzYTllYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X3NjdHAuaApAQCAtMCwwICsxLDEwNyBAQAorI2lmbmRlZiBfSVBUX1NDVFBfSF8KKyNkZWZpbmUgX0lQVF9TQ1RQX0hfCisKKyNkZWZpbmUgSVBUX1NDVFBfU1JDX1BPUlRTCSAgICAgICAgMHgwMQorI2RlZmluZSBJUFRfU0NUUF9ERVNUX1BPUlRTCSAgICAgICAgMHgwMgorI2RlZmluZSBJUFRfU0NUUF9DSFVOS19UWVBFUwkJMHgwNAorCisjZGVmaW5lIElQVF9TQ1RQX1ZBTElEX0ZMQUdTCQkweDA3CisKKyNkZWZpbmUgRUxFTUNPVU5UKHgpIChzaXplb2YoeCkvc2l6ZW9mKHhbMF0pKQorCisKK3N0cnVjdCBpcHRfc2N0cF9mbGFnX2luZm8geworCXVfaW50OF90IGNodW5rdHlwZTsKKwl1X2ludDhfdCBmbGFnOworCXVfaW50OF90IGZsYWdfbWFzazsKK307CisKKyNkZWZpbmUgSVBUX05VTV9TQ1RQX0ZMQUdTCTQKKworc3RydWN0IGlwdF9zY3RwX2luZm8geworCXVfaW50MTZfdCBkcHRzWzJdOyAgLyogTWluLCBNYXggKi8KKwl1X2ludDE2X3Qgc3B0c1syXTsgIC8qIE1pbiwgTWF4ICovCisKKwl1X2ludDMyX3QgY2h1bmttYXBbMjU2IC8gc2l6ZW9mICh1X2ludDMyX3QpXTsgIC8qIEJpdCBtYXNrIG9mIGNodW5rcyB0byBiZSBtYXRjaGVkIGFjY29yZGluZyB0byBSRkMgMjk2MCAqLworCisjZGVmaW5lIFNDVFBfQ0hVTktfTUFUQ0hfQU5ZICAgMHgwMSAgLyogTWF0Y2ggaWYgYW55IG9mIHRoZSBjaHVuayB0eXBlcyBhcmUgcHJlc2VudCAqLworI2RlZmluZSBTQ1RQX0NIVU5LX01BVENIX0FMTCAgIDB4MDIgIC8qIE1hdGNoIGlmIGFsbCBvZiB0aGUgY2h1bmsgdHlwZXMgYXJlIHByZXNlbnQgKi8KKyNkZWZpbmUgU0NUUF9DSFVOS19NQVRDSF9PTkxZICAweDA0ICAvKiBNYXRjaCBpZiB0aGVzZSBhcmUgdGhlIG9ubHkgY2h1bmsgdHlwZXMgcHJlc2VudCAqLworCisJdV9pbnQzMl90IGNodW5rX21hdGNoX3R5cGU7CisJc3RydWN0IGlwdF9zY3RwX2ZsYWdfaW5mbyBmbGFnX2luZm9bSVBUX05VTV9TQ1RQX0ZMQUdTXTsKKwlpbnQgZmxhZ19jb3VudDsKKworCXVfaW50MzJfdCBmbGFnczsKKwl1X2ludDMyX3QgaW52ZmxhZ3M7Cit9OworCisjZGVmaW5lIGJ5dGVzKHR5cGUpIChzaXplb2YodHlwZSkgKiA4KQorCisjZGVmaW5lIFNDVFBfQ0hVTktNQVBfU0VUKGNodW5rbWFwLCB0eXBlKSAJCVwKKwlkbyB7IAkJCQkJCVwKKwkJY2h1bmttYXBbdHlwZSAvIGJ5dGVzKHVfaW50MzJfdCldIHw9IAlcCisJCQkxIDw8ICh0eXBlICUgYnl0ZXModV9pbnQzMl90KSk7CVwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIFNDVFBfQ0hVTktNQVBfQ0xFQVIoY2h1bmttYXAsIHR5cGUpCQkgCVwKKwlkbyB7CQkJCQkJCVwKKwkJY2h1bmttYXBbdHlwZSAvIGJ5dGVzKHVfaW50MzJfdCldICY9IAkJXAorCQkJfigxIDw8ICh0eXBlICUgYnl0ZXModV9pbnQzMl90KSkpOwlcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBTQ1RQX0NIVU5LTUFQX0lTX1NFVChjaHVua21hcCwgdHlwZSkgCQkJXAorKHsJCQkJCQkJCVwKKwkoY2h1bmttYXBbdHlwZSAvIGJ5dGVzICh1X2ludDMyX3QpXSAmIAkJCVwKKwkJKDEgPDwgKHR5cGUgJSBieXRlcyAodV9pbnQzMl90KSkpKSA/IDE6IDA7CVwKK30pCisKKyNkZWZpbmUgU0NUUF9DSFVOS01BUF9SRVNFVChjaHVua21hcCkgCQkJCVwKKwlkbyB7CQkJCQkJCVwKKwkJaW50IGk7IAkJCQkJCVwKKwkJZm9yIChpID0gMDsgaSA8IEVMRU1DT1VOVChjaHVua21hcCk7IGkrKykJXAorCQkJY2h1bmttYXBbaV0gPSAwOwkJCVwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIFNDVFBfQ0hVTktNQVBfU0VUX0FMTChjaHVua21hcCkgCQkJXAorCWRvIHsJCQkJCQkJXAorCQlpbnQgaTsgCQkJCQkJXAorCQlmb3IgKGkgPSAwOyBpIDwgRUxFTUNPVU5UKGNodW5rbWFwKTsgaSsrKSAJXAorCQkJY2h1bmttYXBbaV0gPSB+MDsJCQlcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBTQ1RQX0NIVU5LTUFQX0NPUFkoZGVzdG1hcCwgc3JjbWFwKSAJCQlcCisJZG8gewkJCQkJCQlcCisJCWludCBpOyAJCQkJCQlcCisJCWZvciAoaSA9IDA7IGkgPCBFTEVNQ09VTlQoY2h1bmttYXApOyBpKyspIAlcCisJCQlkZXN0bWFwW2ldID0gc3JjbWFwW2ldOwkJCVwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIFNDVFBfQ0hVTktNQVBfSVNfQ0xFQVIoY2h1bmttYXApIAkJXAorKHsJCQkJCQkJXAorCWludCBpOyAJCQkJCQlcCisJaW50IGZsYWcgPSAxOwkJCQkJXAorCWZvciAoaSA9IDA7IGkgPCBFTEVNQ09VTlQoY2h1bmttYXApOyBpKyspIHsJXAorCQlpZiAoY2h1bmttYXBbaV0pIHsJCQlcCisJCQlmbGFnID0gMDsJCQlcCisJCQlicmVhazsJCQkJXAorCQl9CQkJCQlcCisJfQkJCQkJCVwKKyAgICAgICAgZmxhZzsJCQkJCQlcCit9KQorCisjZGVmaW5lIFNDVFBfQ0hVTktNQVBfSVNfQUxMX1NFVChjaHVua21hcCkgCQlcCisoewkJCQkJCQlcCisJaW50IGk7IAkJCQkJCVwKKwlpbnQgZmxhZyA9IDE7CQkJCQlcCisJZm9yIChpID0gMDsgaSA8IEVMRU1DT1VOVChjaHVua21hcCk7IGkrKykgewlcCisJCWlmIChjaHVua21hcFtpXSAhPSB+MCkgewkJXAorCQkJZmxhZyA9IDA7CQkJXAorCQkJCWJyZWFrOwkJCVwKKwkJfQkJCQkJXAorCX0JCQkJCQlcCisgICAgICAgIGZsYWc7CQkJCQkJXAorfSkKKworI2VuZGlmIC8qIF9JUFRfU0NUUF9IXyAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9zdGF0ZS5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfc3RhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGYzNzg2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfc3RhdGUuaApAQCAtMCwwICsxLDEzIEBACisjaWZuZGVmIF9JUFRfU1RBVEVfSAorI2RlZmluZSBfSVBUX1NUQVRFX0gKKworI2RlZmluZSBJUFRfU1RBVEVfQklUKGN0aW5mbykgKDEgPDwgKChjdGluZm8pJUlQX0NUX0lTX1JFUExZKzEpKQorI2RlZmluZSBJUFRfU1RBVEVfSU5WQUxJRCAoMSA8PCAwKQorCisjZGVmaW5lIElQVF9TVEFURV9VTlRSQUNLRUQgKDEgPDwgKElQX0NUX05VTUJFUiArIDEpKQorCitzdHJ1Y3QgaXB0X3N0YXRlX2luZm8KK3sKKwl1bnNpZ25lZCBpbnQgc3RhdGVtYXNrOworfTsKKyNlbmRpZiAvKl9JUFRfU1RBVEVfSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF90Y3Btc3MuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X3RjcG1zcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyYjE0MzkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF90Y3Btc3MuaApAQCAtMCwwICsxLDkgQEAKKyNpZm5kZWYgX0lQVF9UQ1BNU1NfTUFUQ0hfSAorI2RlZmluZSBfSVBUX1RDUE1TU19NQVRDSF9ICisKK3N0cnVjdCBpcHRfdGNwbXNzX21hdGNoX2luZm8geworICAgIHVfaW50MTZfdCBtc3NfbWluLCBtc3NfbWF4OworICAgIHVfaW50OF90IGludmVydDsKK307CisKKyNlbmRpZiAvKl9JUFRfVENQTVNTX01BVENIX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfdG9zLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF90b3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjFmNWRmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfdG9zLmgKQEAgLTAsMCArMSwxMyBAQAorI2lmbmRlZiBfSVBUX1RPU19ICisjZGVmaW5lIF9JUFRfVE9TX0gKKworc3RydWN0IGlwdF90b3NfaW5mbyB7CisgICAgdV9pbnQ4X3QgdG9zOworICAgIHVfaW50OF90IGludmVydDsKK307CisKKyNpZm5kZWYgSVBUT1NfTk9STUFMU1ZDCisjZGVmaW5lIElQVE9TX05PUk1BTFNWQyAwCisjZW5kaWYKKworI2VuZGlmIC8qX0lQVF9UT1NfSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF90dGwuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X3R0bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlMjRmZDgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF90dGwuaApAQCAtMCwwICsxLDIxIEBACisvKiBJUCB0YWJsZXMgbW9kdWxlIGZvciBtYXRjaGluZyB0aGUgdmFsdWUgb2YgdGhlIFRUTAorICogKEMpIDIwMDAgYnkgSGFyYWxkIFdlbHRlIDxsYWZvcmdlQGdudW1vbmtzLm9yZz4gKi8KKworI2lmbmRlZiBfSVBUX1RUTF9ICisjZGVmaW5lIF9JUFRfVFRMX0gKKworZW51bSB7CisJSVBUX1RUTF9FUSA9IDAsCQkvKiBlcXVhbHMgKi8KKwlJUFRfVFRMX05FLAkJLyogbm90IGVxdWFscyAqLworCUlQVF9UVExfTFQsCQkvKiBsZXNzIHRoYW4gKi8KKwlJUFRfVFRMX0dULAkJLyogZ3JlYXRlciB0aGFuICovCit9OworCisKK3N0cnVjdCBpcHRfdHRsX2luZm8geworCXVfaW50OF90CW1vZGU7CisJdV9pbnQ4X3QJdHRsOworfTsKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvbGlzdGhlbHAuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvbGlzdGhlbHAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmFlN2M1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9saXN0aGVscC5oCkBAIC0wLDAgKzEsMTI1IEBACisjaWZuZGVmIF9MSVNUSEVMUF9ICisjZGVmaW5lIF9MSVNUSEVMUF9ICisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2xvY2toZWxwLmg+CisKKy8qIEhlYWRlciB0byBkbyBtb3JlIGNvbXByZWhlbnNpdmUgam9iIHRoYW4gbGludXgvbGlzdC5oOyBhc3N1bWUgbGlzdAorICAgaXMgZmlyc3QgZW50cnkgaW4gc3RydWN0dXJlLiAqLworCisvKiBSZXR1cm4gcG9pbnRlciB0byBmaXJzdCB0cnVlIGVudHJ5LCBpZiBhbnksIG9yIE5VTEwuICBBIG1hY3JvCisgICByZXF1aXJlZCB0byBhbGxvdyBpbmxpbmluZyBvZiBjbXBmbi4gKi8KKyNkZWZpbmUgTElTVF9GSU5EKGhlYWQsIGNtcGZuLCB0eXBlLCBhcmdzLi4uKQkJXAorKHsJCQkJCQkJXAorCWNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKl9faSwgKl9faiA9IE5VTEw7CVwKKwkJCQkJCQlcCisJQVNTRVJUX1JFQURfTE9DSyhoZWFkKTsJCQkJXAorCWxpc3RfZm9yX2VhY2goX19pLCAoaGVhZCkpCQkJXAorCQlpZiAoY21wZm4oKGNvbnN0IHR5cGUpX19pICwgIyMgYXJncykpIHsJXAorCQkJX19qID0gX19pOwkJCVwKKwkJCWJyZWFrOwkJCQlcCisJCX0JCQkJCVwKKwkodHlwZSlfX2o7CQkJCQlcCit9KQorCisjZGVmaW5lIExJU1RfRklORF9XKGhlYWQsIGNtcGZuLCB0eXBlLCBhcmdzLi4uKQkJXAorKHsJCQkJCQkJXAorCWNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKl9faSwgKl9faiA9IE5VTEw7CVwKKwkJCQkJCQlcCisJQVNTRVJUX1dSSVRFX0xPQ0soaGVhZCk7CQkJXAorCWxpc3RfZm9yX2VhY2goX19pLCAoaGVhZCkpCQkJXAorCQlpZiAoY21wZm4oKHR5cGUpX19pICwgIyMgYXJncykpIHsJXAorCQkJX19qID0gX19pOwkJCVwKKwkJCWJyZWFrOwkJCQlcCisJCX0JCQkJCVwKKwkodHlwZSlfX2o7CQkJCQlcCit9KQorCisvKiBKdXN0IGxpa2UgTElTVF9GSU5EIGJ1dCB3ZSBzZWFyY2ggYmFja3dhcmRzICovCisjZGVmaW5lIExJU1RfRklORF9CKGhlYWQsIGNtcGZuLCB0eXBlLCBhcmdzLi4uKQkJXAorKHsJCQkJCQkJXAorCWNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKl9faSwgKl9faiA9IE5VTEw7CVwKKwkJCQkJCQlcCisJQVNTRVJUX1JFQURfTE9DSyhoZWFkKTsJCQkJXAorCWxpc3RfZm9yX2VhY2hfcHJldihfX2ksIChoZWFkKSkJCQlcCisJCWlmIChjbXBmbigoY29uc3QgdHlwZSlfX2kgLCAjIyBhcmdzKSkgewlcCisJCQlfX2ogPSBfX2k7CQkJXAorCQkJYnJlYWs7CQkJCVwKKwkJfQkJCQkJXAorCSh0eXBlKV9fajsJCQkJCVwKK30pCisKK3N0YXRpYyBpbmxpbmUgaW50CitfX2xpc3RfY21wX3NhbWUoY29uc3Qgdm9pZCAqcDEsIGNvbnN0IHZvaWQgKnAyKSB7IHJldHVybiBwMSA9PSBwMjsgfQorCisvKiBJcyB0aGlzIGVudHJ5IGluIHRoZSBsaXN0PyAqLworc3RhdGljIGlubGluZSBpbnQKK2xpc3RfaW5saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIGNvbnN0IHZvaWQgKmVudHJ5KQoreworCXJldHVybiBMSVNUX0ZJTkQoaGVhZCwgX19saXN0X2NtcF9zYW1lLCB2b2lkICosIGVudHJ5KSAhPSBOVUxMOworfQorCisvKiBEZWxldGUgZnJvbSBsaXN0LiAqLworI2lmZGVmIENPTkZJR19ORVRGSUxURVJfREVCVUcKKyNkZWZpbmUgTElTVF9ERUxFVEUoaGVhZCwgb2xkZW50cnkpCQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCUFTU0VSVF9XUklURV9MT0NLKGhlYWQpOwkJCQkJXAorCWlmICghbGlzdF9pbmxpc3QoaGVhZCwgb2xkZW50cnkpKQkJCQlcCisJCXByaW50aygiTElTVF9ERUxFVEU6ICVzOiV1IGAlcycoJXApIG5vdCBpbiAlcy5cbiIsCVwKKwkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgI29sZGVudHJ5LCBvbGRlbnRyeSwgI2hlYWQpOwlcCisgICAgICAgIGVsc2UgbGlzdF9kZWwoKHN0cnVjdCBsaXN0X2hlYWQgKilvbGRlbnRyeSk7CQkJXAorfSB3aGlsZSgwKQorI2Vsc2UKKyNkZWZpbmUgTElTVF9ERUxFVEUoaGVhZCwgb2xkZW50cnkpIGxpc3RfZGVsKChzdHJ1Y3QgbGlzdF9oZWFkICopb2xkZW50cnkpCisjZW5kaWYKKworLyogQXBwZW5kLiAqLworc3RhdGljIGlubGluZSB2b2lkCitsaXN0X2FwcGVuZChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCB2b2lkICpuZXcpCit7CisJQVNTRVJUX1dSSVRFX0xPQ0soaGVhZCk7CisJbGlzdF9hZGQoKG5ldyksIChoZWFkKS0+cHJldik7Cit9CisKKy8qIFByZXBlbmQuICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2xpc3RfcHJlcGVuZChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCB2b2lkICpuZXcpCit7CisJQVNTRVJUX1dSSVRFX0xPQ0soaGVhZCk7CisJbGlzdF9hZGQobmV3LCBoZWFkKTsKK30KKworLyogSW5zZXJ0IGFjY29yZGluZyB0byBvcmRlcmluZyBmdW5jdGlvbjsgaW5zZXJ0IGJlZm9yZSBmaXJzdCB0cnVlLiAqLworI2RlZmluZSBMSVNUX0lOU0VSVChoZWFkLCBuZXcsIGNtcGZuKQkJCQlcCitkbyB7CQkJCQkJCQlcCisJc3RydWN0IGxpc3RfaGVhZCAqX19pOwkJCQkJXAorCUFTU0VSVF9XUklURV9MT0NLKGhlYWQpOwkJCQlcCisJbGlzdF9mb3JfZWFjaChfX2ksIChoZWFkKSkJCQkJXAorCQlpZiAoKG5ldyksICh0eXBlb2YgKG5ldykpX19pKQkJCVwKKwkJCWJyZWFrOwkJCQkJXAorCWxpc3RfYWRkKChzdHJ1Y3QgbGlzdF9oZWFkICopKG5ldyksIF9faS0+cHJldik7CQlcCit9IHdoaWxlKDApCisKKy8qIElmIHRoZSBmaWVsZCBhZnRlciB0aGUgbGlzdF9oZWFkIGlzIGEgbnVsLXRlcm1pbmF0ZWQgc3RyaW5nLCB5b3UKKyAgIGNhbiB1c2UgdGhlc2UgZnVuY3Rpb25zLiAqLworc3RhdGljIGlubGluZSBpbnQgX19saXN0X2NtcF9uYW1lKGNvbnN0IHZvaWQgKmksIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJcmV0dXJuIHN0cmNtcChuYW1lLCBpK3NpemVvZihzdHJ1Y3QgbGlzdF9oZWFkKSkgPT0gMDsKK30KKworLyogUmV0dXJucyBmYWxzZSBpZiBzYW1lIG5hbWUgYWxyZWFkeSBpbiBsaXN0LCBvdGhlcndpc2UgZG9lcyBpbnNlcnQuICovCitzdGF0aWMgaW5saW5lIGludAorbGlzdF9uYW1lZF9pbnNlcnQoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgdm9pZCAqbmV3KQoreworCWlmIChMSVNUX0ZJTkQoaGVhZCwgX19saXN0X2NtcF9uYW1lLCB2b2lkICosCisJCSAgICAgIG5ldyArIHNpemVvZihzdHJ1Y3QgbGlzdF9oZWFkKSkpCisJCXJldHVybiAwOworCWxpc3RfcHJlcGVuZChoZWFkLCBuZXcpOworCXJldHVybiAxOworfQorCisvKiBGaW5kIHRoaXMgbmFtZWQgZWxlbWVudCBpbiB0aGUgbGlzdC4gKi8KKyNkZWZpbmUgbGlzdF9uYW1lZF9maW5kKGhlYWQsIG5hbWUpCQkJXAorTElTVF9GSU5EKGhlYWQsIF9fbGlzdF9jbXBfbmFtZSwgdm9pZCAqLCBuYW1lKQorCisjZW5kaWYgLypfTElTVEhFTFBfSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2xvY2toZWxwLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2xvY2toZWxwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMyODg2MwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvbG9ja2hlbHAuaApAQCAtMCwwICsxLDEyOSBAQAorI2lmbmRlZiBfTE9DS0hFTFBfSAorI2RlZmluZSBfTE9DS0hFTFBfSAorI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CisKKy8qIEhlYWRlciB0byBkbyBoZWxwIGluIGxvY2sgZGVidWdnaW5nLiAqLworCisjaWZkZWYgQ09ORklHX05FVEZJTFRFUl9ERUJVRworc3RydWN0IHNwaW5sb2NrX2RlYnVnCit7CisJc3BpbmxvY2tfdCBsOworCWF0b21pY190IGxvY2tlZF9ieTsKK307CisKK3N0cnVjdCByd2xvY2tfZGVidWcKK3sKKwlyd2xvY2tfdCBsOworCWxvbmcgcmVhZF9sb2NrZWRfbWFwOworCWxvbmcgd3JpdGVfbG9ja2VkX21hcDsKK307CisKKyNkZWZpbmUgREVDTEFSRV9MT0NLKGwpIAkJCQkJCVwKK3N0cnVjdCBzcGlubG9ja19kZWJ1ZyBsID0geyBTUElOX0xPQ0tfVU5MT0NLRUQsIEFUT01JQ19JTklUKC0xKSB9CisjZGVmaW5lIERFQ0xBUkVfTE9DS19FWFRFUk4obCkgCQkJXAorZXh0ZXJuIHN0cnVjdCBzcGlubG9ja19kZWJ1ZyBsCisjZGVmaW5lIERFQ0xBUkVfUldMT0NLKGwpCQkJCVwKK3N0cnVjdCByd2xvY2tfZGVidWcgbCA9IHsgUldfTE9DS19VTkxPQ0tFRCwgMCwgMCB9CisjZGVmaW5lIERFQ0xBUkVfUldMT0NLX0VYVEVSTihsKQkJXAorZXh0ZXJuIHN0cnVjdCByd2xvY2tfZGVidWcgbAorCisjZGVmaW5lIE1VU1RfQkVfTE9DS0VEKGwpCQkJCQkJXAorZG8geyBpZiAoYXRvbWljX3JlYWQoJihsKS0+bG9ja2VkX2J5KSAhPSBzbXBfcHJvY2Vzc29yX2lkKCkpCQlcCisJcHJpbnRrKCJBU1NFUlQgJXM6JXUgJXMgdW5sb2NrZWRcbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgI2wpOwlcCit9IHdoaWxlKDApCisKKyNkZWZpbmUgTVVTVF9CRV9VTkxPQ0tFRChsKQkJCQkJCVwKK2RvIHsgaWYgKGF0b21pY19yZWFkKCYobCktPmxvY2tlZF9ieSkgPT0gc21wX3Byb2Nlc3Nvcl9pZCgpKQkJXAorCXByaW50aygiQVNTRVJUICVzOiV1ICVzIGxvY2tlZFxuIiwgX19GSUxFX18sIF9fTElORV9fLCAjbCk7CVwKK30gd2hpbGUoMCkKKworLyogV3JpdGUgbG9ja2VkIE9LIGFzIHdlbGwuICovCisjZGVmaW5lIE1VU1RfQkVfUkVBRF9MT0NLRUQobCkJCQkJCQkgICAgXAorZG8geyBpZiAoISgobCktPnJlYWRfbG9ja2VkX21hcCAmICgxVUwgPDwgc21wX3Byb2Nlc3Nvcl9pZCgpKSkJCSAgICBcCisJICYmICEoKGwpLT53cml0ZV9sb2NrZWRfbWFwICYgKDFVTCA8PCBzbXBfcHJvY2Vzc29yX2lkKCkpKSkJICAgIFwKKwlwcmludGsoIkFTU0VSVCAlczoldSAlcyBub3QgcmVhZGxvY2tlZFxuIiwgX19GSUxFX18sIF9fTElORV9fLCAjbCk7IFwKK30gd2hpbGUoMCkKKworI2RlZmluZSBNVVNUX0JFX1dSSVRFX0xPQ0tFRChsKQkJCQkJCSAgICAgXAorZG8geyBpZiAoISgobCktPndyaXRlX2xvY2tlZF9tYXAgJiAoMVVMIDw8IHNtcF9wcm9jZXNzb3JfaWQoKSkpKQkgICAgIFwKKwlwcmludGsoIkFTU0VSVCAlczoldSAlcyBub3Qgd3JpdGVsb2NrZWRcbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgI2wpOyBcCit9IHdoaWxlKDApCisKKyNkZWZpbmUgTVVTVF9CRV9SRUFEX1dSSVRFX1VOTE9DS0VEKGwpCQkJCQkgIFwKK2RvIHsgaWYgKChsKS0+cmVhZF9sb2NrZWRfbWFwICYgKDFVTCA8PCBzbXBfcHJvY2Vzc29yX2lkKCkpKQkJICBcCisJcHJpbnRrKCJBU1NFUlQgJXM6JXUgJXMgcmVhZGxvY2tlZFxuIiwgX19GSUxFX18sIF9fTElORV9fLCAjbCk7CSAgXAorIGVsc2UgaWYgKChsKS0+d3JpdGVfbG9ja2VkX21hcCAmICgxVUwgPDwgc21wX3Byb2Nlc3Nvcl9pZCgpKSkJCSAgXAorCSBwcmludGsoIkFTU0VSVCAlczoldSAlcyB3cml0ZWxvY2tlZFxuIiwgX19GSUxFX18sIF9fTElORV9fLCAjbCk7IFwKK30gd2hpbGUoMCkKKworI2RlZmluZSBMT0NLX0JIKGxrKQkJCQkJCVwKK2RvIHsJCQkJCQkJCVwKKwlNVVNUX0JFX1VOTE9DS0VEKGxrKTsJCQkJCVwKKwlzcGluX2xvY2tfYmgoJihsayktPmwpOwkJCQkJXAorCWF0b21pY19zZXQoJihsayktPmxvY2tlZF9ieSwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsJXAorfSB3aGlsZSgwKQorCisjZGVmaW5lIFVOTE9DS19CSChsaykJCQkJXAorZG8gewkJCQkJCVwKKwlNVVNUX0JFX0xPQ0tFRChsayk7CQkJXAorCWF0b21pY19zZXQoJihsayktPmxvY2tlZF9ieSwgLTEpOwlcCisJc3Bpbl91bmxvY2tfYmgoJihsayktPmwpOwkJXAorfSB3aGlsZSgwKQorCisjZGVmaW5lIFJFQURfTE9DSyhsaykgCQkJCQkJXAorZG8gewkJCQkJCQkJXAorCU1VU1RfQkVfUkVBRF9XUklURV9VTkxPQ0tFRChsayk7CQkJXAorCXJlYWRfbG9ja19iaCgmKGxrKS0+bCk7CQkJCQlcCisJc2V0X2JpdChzbXBfcHJvY2Vzc29yX2lkKCksICYobGspLT5yZWFkX2xvY2tlZF9tYXApOwlcCit9IHdoaWxlKDApCisKKyNkZWZpbmUgV1JJVEVfTE9DSyhsaykJCQkJCQkJICBcCitkbyB7CQkJCQkJCQkJICBcCisJTVVTVF9CRV9SRUFEX1dSSVRFX1VOTE9DS0VEKGxrKTsJCQkJICBcCisJd3JpdGVfbG9ja19iaCgmKGxrKS0+bCk7CQkJCQkgIFwKKwlzZXRfYml0KHNtcF9wcm9jZXNzb3JfaWQoKSwgJihsayktPndyaXRlX2xvY2tlZF9tYXApOwkJICBcCit9IHdoaWxlKDApCisKKyNkZWZpbmUgUkVBRF9VTkxPQ0sobGspCQkJCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJaWYgKCEoKGxrKS0+cmVhZF9sb2NrZWRfbWFwICYgKDFVTCA8PCBzbXBfcHJvY2Vzc29yX2lkKCkpKSkJXAorCQlwcmludGsoIkFTU0VSVDogJXM6JXUgJXMgbm90IHJlYWRsb2NrZWRcbiIsIAkJXAorCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCAjbGspOwkJCVwKKwljbGVhcl9iaXQoc21wX3Byb2Nlc3Nvcl9pZCgpLCAmKGxrKS0+cmVhZF9sb2NrZWRfbWFwKTsJCVwKKwlyZWFkX3VubG9ja19iaCgmKGxrKS0+bCk7CQkJCQlcCit9IHdoaWxlKDApCisKKyNkZWZpbmUgV1JJVEVfVU5MT0NLKGxrKQkJCQkJXAorZG8gewkJCQkJCQkJXAorCU1VU1RfQkVfV1JJVEVfTE9DS0VEKGxrKTsJCQkJXAorCWNsZWFyX2JpdChzbXBfcHJvY2Vzc29yX2lkKCksICYobGspLT53cml0ZV9sb2NrZWRfbWFwKTsJXAorCXdyaXRlX3VubG9ja19iaCgmKGxrKS0+bCk7CQkJCVwKK30gd2hpbGUoMCkKKworI2Vsc2UKKyNkZWZpbmUgREVDTEFSRV9MT0NLKGwpIHNwaW5sb2NrX3QgbCA9IFNQSU5fTE9DS19VTkxPQ0tFRAorI2RlZmluZSBERUNMQVJFX0xPQ0tfRVhURVJOKGwpIGV4dGVybiBzcGlubG9ja190IGwKKyNkZWZpbmUgREVDTEFSRV9SV0xPQ0sobCkgcndsb2NrX3QgbCA9IFJXX0xPQ0tfVU5MT0NLRUQKKyNkZWZpbmUgREVDTEFSRV9SV0xPQ0tfRVhURVJOKGwpIGV4dGVybiByd2xvY2tfdCBsCisKKyNkZWZpbmUgTVVTVF9CRV9MT0NLRUQobCkKKyNkZWZpbmUgTVVTVF9CRV9VTkxPQ0tFRChsKQorI2RlZmluZSBNVVNUX0JFX1JFQURfTE9DS0VEKGwpCisjZGVmaW5lIE1VU1RfQkVfV1JJVEVfTE9DS0VEKGwpCisjZGVmaW5lIE1VU1RfQkVfUkVBRF9XUklURV9VTkxPQ0tFRChsKQorCisjZGVmaW5lIExPQ0tfQkgobCkgc3Bpbl9sb2NrX2JoKGwpCisjZGVmaW5lIFVOTE9DS19CSChsKSBzcGluX3VubG9ja19iaChsKQorCisjZGVmaW5lIFJFQURfTE9DSyhsKSByZWFkX2xvY2tfYmgobCkKKyNkZWZpbmUgV1JJVEVfTE9DSyhsKSB3cml0ZV9sb2NrX2JoKGwpCisjZGVmaW5lIFJFQURfVU5MT0NLKGwpIHJlYWRfdW5sb2NrX2JoKGwpCisjZGVmaW5lIFdSSVRFX1VOTE9DSyhsKSB3cml0ZV91bmxvY2tfYmgobCkKKyNlbmRpZiAvKkNPTkZJR19ORVRGSUxURVJfREVCVUcqLworCisjZW5kaWYgLyogX0xPQ0tIRUxQX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWU3YTVlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni5oCkBAIC0wLDAgKzEsNzEgQEAKKyNpZm5kZWYgX19MSU5VWF9JUDZfTkVURklMVEVSX0gKKyNkZWZpbmUgX19MSU5VWF9JUDZfTkVURklMVEVSX0gKKworLyogSVB2Ni1zcGVjaWZpYyBkZWZpbmVzIGZvciBuZXRmaWx0ZXIuIAorICogKEMpMTk5OCBSdXN0eSBSdXNzZWxsIC0tIFRoaXMgY29kZSBpcyBHUEwuCisgKiAoQykxOTk5IERhdmlkIEplZmZlcnkKKyAqICAgdGhpcyBoZWFkZXIgd2FzIGJsYXRhbnRseSByaXBwZWQgZnJvbSBuZXRmaWx0ZXJfaXB2NC5oIAorICogICBpdCdzIGFtYXppbmcgd2hhdCBhZGRpbmcgYSBidW5jaCBvZiA2cyBjYW4gZG8gPTheKQorICovCisKKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIuaD4KKworLyogSVAgQ2FjaGUgYml0cy4gKi8KKy8qIFNyYyBJUCBhZGRyZXNzLiAqLworI2RlZmluZSBORkNfSVA2X1NSQyAgICAgICAgICAgICAgMHgwMDAxCisvKiBEZXN0IElQIGFkZHJlc3MuICovCisjZGVmaW5lIE5GQ19JUDZfRFNUICAgICAgICAgICAgICAweDAwMDIKKy8qIElucHV0IGRldmljZS4gKi8KKyNkZWZpbmUgTkZDX0lQNl9JRl9JTiAgICAgICAgICAgIDB4MDAwNAorLyogT3V0cHV0IGRldmljZS4gKi8KKyNkZWZpbmUgTkZDX0lQNl9JRl9PVVQgICAgICAgICAgIDB4MDAwOAorLyogVE9TLiAqLworI2RlZmluZSBORkNfSVA2X1RPUyAgICAgICAgICAgICAgMHgwMDEwCisvKiBQcm90b2NvbC4gKi8KKyNkZWZpbmUgTkZDX0lQNl9QUk9UTyAgICAgICAgICAgIDB4MDAyMAorLyogSVAgb3B0aW9ucy4gKi8KKyNkZWZpbmUgTkZDX0lQNl9PUFRJT05TICAgICAgICAgIDB4MDA0MAorLyogRnJhZyAmIGZsYWdzLiAqLworI2RlZmluZSBORkNfSVA2X0ZSQUcgICAgICAgICAgICAgMHgwMDgwCisKKworLyogUGVyLXByb3RvY29sIGluZm9ybWF0aW9uOiBvbmx5IG1hdHRlcnMgaWYgcHJvdG8gbWF0Y2guICovCisvKiBUQ1AgZmxhZ3MuICovCisjZGVmaW5lIE5GQ19JUDZfVENQRkxBR1MgICAgICAgICAweDAxMDAKKy8qIFNvdXJjZSBwb3J0LiAqLworI2RlZmluZSBORkNfSVA2X1NSQ19QVCAgICAgICAgICAgMHgwMjAwCisvKiBEZXN0IHBvcnQuICovCisjZGVmaW5lIE5GQ19JUDZfRFNUX1BUICAgICAgICAgICAweDA0MDAKKy8qIFNvbWV0aGluZyBlbHNlIGFib3V0IHRoZSBwcm90byAqLworI2RlZmluZSBORkNfSVA2X1BST1RPX1VOS05PV04gICAgMHgyMDAwCisKKworLyogSVA2IEhvb2tzICovCisvKiBBZnRlciBwcm9taXNjIGRyb3BzLCBjaGVja3N1bSBjaGVja3MuICovCisjZGVmaW5lIE5GX0lQNl9QUkVfUk9VVElORwkwCisvKiBJZiB0aGUgcGFja2V0IGlzIGRlc3RpbmVkIGZvciB0aGlzIGJveC4gKi8KKyNkZWZpbmUgTkZfSVA2X0xPQ0FMX0lOCQkxCisvKiBJZiB0aGUgcGFja2V0IGlzIGRlc3RpbmVkIGZvciBhbm90aGVyIGludGVyZmFjZS4gKi8KKyNkZWZpbmUgTkZfSVA2X0ZPUldBUkQJCTIKKy8qIFBhY2tldHMgY29taW5nIGZyb20gYSBsb2NhbCBwcm9jZXNzLiAqLworI2RlZmluZSBORl9JUDZfTE9DQUxfT1VUCQkzCisvKiBQYWNrZXRzIGFib3V0IHRvIGhpdCB0aGUgd2lyZS4gKi8KKyNkZWZpbmUgTkZfSVA2X1BPU1RfUk9VVElORwk0CisjZGVmaW5lIE5GX0lQNl9OVU1IT09LUwkJNQorCisKK2VudW0gbmZfaXA2X2hvb2tfcHJpb3JpdGllcyB7CisJTkZfSVA2X1BSSV9GSVJTVCA9IElOVF9NSU4sCisJTkZfSVA2X1BSSV9TRUxJTlVYX0ZJUlNUID0gLTIyNSwKKwlORl9JUDZfUFJJX0NPTk5UUkFDSyA9IC0yMDAsCisJTkZfSVA2X1BSSV9CUklER0VfU0FCT1RBR0VfRk9SV0FSRCA9IC0xNzUsCisJTkZfSVA2X1BSSV9NQU5HTEUgPSAtMTUwLAorCU5GX0lQNl9QUklfTkFUX0RTVCA9IC0xMDAsCisJTkZfSVA2X1BSSV9CUklER0VfU0FCT1RBR0VfTE9DQUxfT1VUID0gLTUwLAorCU5GX0lQNl9QUklfRklMVEVSID0gMCwKKwlORl9JUDZfUFJJX05BVF9TUkMgPSAxMDAsCisJTkZfSVA2X1BSSV9TRUxJTlVYX0xBU1QgPSAyMjUsCisJTkZfSVA2X1BSSV9MQVNUID0gSU5UX01BWCwKK307CisKKyNlbmRpZiAvKl9fTElOVVhfSVA2X05FVEZJTFRFUl9IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2X2xvZ2dpbmcuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2X2xvZ2dpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGIyZWUzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZfbG9nZ2luZy5oCkBAIC0wLDAgKzEsMjAgQEAKKy8qIElQdjYgbWFjcm9zIGZvciB0aGUgbnRlcm5hbCBsb2dnaW5nIGludGVyZmFjZS4gKi8KKyNpZm5kZWYgX19JUDZfTE9HR0lOR19ICisjZGVmaW5lIF9fSVA2X0xPR0dJTkdfSAorCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9sb2dnaW5nLmg+CisKKyNkZWZpbmUgbmZfbG9nX2lwNl9wYWNrZXQocHNrYixob29rbnVtLGluLG91dCxmbXQsYXJncy4uLikgXAorCW5mX2xvZ19wYWNrZXQoQUZfSU5FVDYscHNrYixob29rbnVtLGluLG91dCxmbXQsIyNhcmdzKQorCisjZGVmaW5lIG5mX2xvZ19pcDYocGZoLGxlbixmbXQsYXJncy4uLikgXAorCW5mX2xvZyhBRl9JTkVUNixwZmgsbGVuLGZtdCwjI2FyZ3MpCisKKyNkZWZpbmUgbmZfaXA2X2xvZ19yZWdpc3Rlcihsb2dnaW5nKSBuZl9sb2dfcmVnaXN0ZXIoQUZfSU5FVDYsbG9nZ2luZykKKyNkZWZpbmUgbmZfaXA2X2xvZ191bnJlZ2lzdGVyKGxvZ2dpbmcpIG5mX2xvZ191bnJlZ2lzdGVyKEFGX0lORVQ2LGxvZ2dpbmcpCisJCisjZW5kaWYgLypfX0tFUk5FTF9fKi8KKworI2VuZGlmIC8qX19JUDZfTE9HR0lOR19IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2X3RhYmxlcy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZfdGFibGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFjZTNiMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2X3RhYmxlcy5oCkBAIC0wLDAgKzEsNDYxIEBACisvKgorICogMjUtSnVsLTE5OTggTWFqb3IgY2hhbmdlcyB0byBhbGxvdyBmb3IgaXAgY2hhaW4gdGFibGUKKyAqCisgKiAzLUphbi0yMDAwIE5hbWVkIHRhYmxlcyB0byBhbGxvdyBwYWNrZXQgc2VsZWN0aW9uIGZvciBkaWZmZXJlbnQgdXNlcy4KKyAqLworCisvKgorICogCUZvcm1hdCBvZiBhbiBJUDYgZmlyZXdhbGwgZGVzY3JpcHRvcgorICoKKyAqIAlzcmMsIGRzdCwgc3JjX21hc2ssIGRzdF9tYXNrIGFyZSBhbHdheXMgc3RvcmVkIGluIG5ldHdvcmsgYnl0ZSBvcmRlci4KKyAqIAlmbGFncyBhcmUgc3RvcmVkIGluIGhvc3QgYnl0ZSBvcmRlciAob2YgY291cnNlKS4KKyAqIAlQb3J0IG51bWJlcnMgYXJlIHN0b3JlZCBpbiBIT1NUIGJ5dGUgb3JkZXIuCisgKi8KKworI2lmbmRlZiBfSVA2X1RBQkxFU19ICisjZGVmaW5lIF9JUDZfVEFCTEVTX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxsaW51eC9pZi5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW42Lmg+CisjaW5jbHVkZSA8bGludXgvaXB2Ni5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2VuZGlmCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2Ni5oPgorCisjZGVmaW5lIElQNlRfRlVOQ1RJT05fTUFYTkFNRUxFTiAzMAorI2RlZmluZSBJUDZUX1RBQkxFX01BWE5BTUVMRU4gMzIKKworLyogWWVzLCBWaXJnaW5pYSwgeW91IGhhdmUgdG8gemVybyB0aGUgcGFkZGluZy4gKi8KK3N0cnVjdCBpcDZ0X2lwNiB7CisJLyogU291cmNlIGFuZCBkZXN0aW5hdGlvbiBJUDYgYWRkciAqLworCXN0cnVjdCBpbjZfYWRkciBzcmMsIGRzdDsJCQorCS8qIE1hc2sgZm9yIHNyYyBhbmQgZGVzdCBJUDYgYWRkciAqLworCXN0cnVjdCBpbjZfYWRkciBzbXNrLCBkbXNrOworCWNoYXIgaW5pZmFjZVtJRk5BTVNJWl0sIG91dGlmYWNlW0lGTkFNU0laXTsKKwl1bnNpZ25lZCBjaGFyIGluaWZhY2VfbWFza1tJRk5BTVNJWl0sIG91dGlmYWNlX21hc2tbSUZOQU1TSVpdOworCisJLyogQVJHSCwgSG9wQnlIb3AgdXNlcyAwLCBzbyBjYW4ndCBkbyAwID0gQU5ZLAorCSAgIGluc3RlYWQgSVA2VF9GX05PUFJPVE8gbXVzdCBiZSBzZXQgKi8KKwl1X2ludDE2X3QgcHJvdG87CisJLyogVE9TIHRvIG1hdGNoIGlmZiBmbGFncyAmIElQNlRfRl9UT1MgKi8KKwl1X2ludDhfdCB0b3M7CisKKwkvKiBGbGFncyB3b3JkICovCisJdV9pbnQ4X3QgZmxhZ3M7CisJLyogSW52ZXJzZSBmbGFncyAqLworCXVfaW50OF90IGludmZsYWdzOworfTsKKworLyogRklYTUU6IElmIGFsaWdubWVudCBpbiBrZXJuZWwgZGlmZmVyZW50IGZyb20gdXNlcnNwYWNlPyAtLVJSICovCitzdHJ1Y3QgaXA2dF9lbnRyeV9tYXRjaAoreworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXVfaW50MTZfdCBtYXRjaF9zaXplOworCisJCQkvKiBVc2VkIGJ5IHVzZXJzcGFjZSAqLworCQkJY2hhciBuYW1lW0lQNlRfRlVOQ1RJT05fTUFYTkFNRUxFTl07CisJCX0gdXNlcjsKKwkJc3RydWN0IHsKKwkJCXVfaW50MTZfdCBtYXRjaF9zaXplOworCisJCQkvKiBVc2VkIGluc2lkZSB0aGUga2VybmVsICovCisJCQlzdHJ1Y3QgaXA2dF9tYXRjaCAqbWF0Y2g7CisJCX0ga2VybmVsOworCisJCS8qIFRvdGFsIGxlbmd0aCAqLworCQl1X2ludDE2X3QgbWF0Y2hfc2l6ZTsKKwl9IHU7CisKKwl1bnNpZ25lZCBjaGFyIGRhdGFbMF07Cit9OworCitzdHJ1Y3QgaXA2dF9lbnRyeV90YXJnZXQKK3sKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQl1X2ludDE2X3QgdGFyZ2V0X3NpemU7CisKKwkJCS8qIFVzZWQgYnkgdXNlcnNwYWNlICovCisJCQljaGFyIG5hbWVbSVA2VF9GVU5DVElPTl9NQVhOQU1FTEVOXTsKKwkJfSB1c2VyOworCQlzdHJ1Y3QgeworCQkJdV9pbnQxNl90IHRhcmdldF9zaXplOworCisJCQkvKiBVc2VkIGluc2lkZSB0aGUga2VybmVsICovCisJCQlzdHJ1Y3QgaXA2dF90YXJnZXQgKnRhcmdldDsKKwkJfSBrZXJuZWw7CisKKwkJLyogVG90YWwgbGVuZ3RoICovCisJCXVfaW50MTZfdCB0YXJnZXRfc2l6ZTsKKwl9IHU7CisKKwl1bnNpZ25lZCBjaGFyIGRhdGFbMF07Cit9OworCitzdHJ1Y3QgaXA2dF9zdGFuZGFyZF90YXJnZXQKK3sKKwlzdHJ1Y3QgaXA2dF9lbnRyeV90YXJnZXQgdGFyZ2V0OworCWludCB2ZXJkaWN0OworfTsKKworc3RydWN0IGlwNnRfY291bnRlcnMKK3sKKwl1X2ludDY0X3QgcGNudCwgYmNudDsJCQkvKiBQYWNrZXQgYW5kIGJ5dGUgY291bnRlcnMgKi8KK307CisKKy8qIFZhbHVlcyBmb3IgImZsYWciIGZpZWxkIGluIHN0cnVjdCBpcDZ0X2lwNiAoZ2VuZXJhbCBpcDYgc3RydWN0dXJlKS4gKi8KKyNkZWZpbmUgSVA2VF9GX1BST1RPCQkweDAxCS8qIFNldCBpZiBydWxlIGNhcmVzIGFib3V0IHVwcGVyIAorCQkJCQkgICBwcm90b2NvbHMgKi8KKyNkZWZpbmUgSVA2VF9GX1RPUwkJMHgwMgkvKiBNYXRjaCB0aGUgVE9TLiAqLworI2RlZmluZSBJUDZUX0ZfTUFTSwkJMHgwMwkvKiBBbGwgcG9zc2libGUgZmxhZyBiaXRzIG1hc2suICovCisKKy8qIFZhbHVlcyBmb3IgImludiIgZmllbGQgaW4gc3RydWN0IGlwNnRfaXA2LiAqLworI2RlZmluZSBJUDZUX0lOVl9WSUFfSU4JCTB4MDEJLyogSW52ZXJ0IHRoZSBzZW5zZSBvZiBJTiBJRkFDRS4gKi8KKyNkZWZpbmUgSVA2VF9JTlZfVklBX09VVAkJMHgwMgkvKiBJbnZlcnQgdGhlIHNlbnNlIG9mIE9VVCBJRkFDRSAqLworI2RlZmluZSBJUDZUX0lOVl9UT1MJCTB4MDQJLyogSW52ZXJ0IHRoZSBzZW5zZSBvZiBUT1MuICovCisjZGVmaW5lIElQNlRfSU5WX1NSQ0lQCQkweDA4CS8qIEludmVydCB0aGUgc2Vuc2Ugb2YgU1JDIElQLiAqLworI2RlZmluZSBJUDZUX0lOVl9EU1RJUAkJMHgxMAkvKiBJbnZlcnQgdGhlIHNlbnNlIG9mIERTVCBPUC4gKi8KKyNkZWZpbmUgSVA2VF9JTlZfRlJBRwkJMHgyMAkvKiBJbnZlcnQgdGhlIHNlbnNlIG9mIEZSQUcuICovCisjZGVmaW5lIElQNlRfSU5WX1BST1RPCQkweDQwCS8qIEludmVydCB0aGUgc2Vuc2Ugb2YgUFJPVE8uICovCisjZGVmaW5lIElQNlRfSU5WX01BU0sJCTB4N0YJLyogQWxsIHBvc3NpYmxlIGZsYWcgYml0cyBtYXNrLiAqLworCisvKiBUaGlzIHN0cnVjdHVyZSBkZWZpbmVzIGVhY2ggb2YgdGhlIGZpcmV3YWxsIHJ1bGVzLiAgQ29uc2lzdHMgb2YgMworICAgcGFydHMgd2hpY2ggYXJlIDEpIGdlbmVyYWwgSVAgaGVhZGVyIHN0dWZmIDIpIG1hdGNoIHNwZWNpZmljCisgICBzdHVmZiAzKSB0aGUgdGFyZ2V0IHRvIHBlcmZvcm0gaWYgdGhlIHJ1bGUgbWF0Y2hlcyAqLworc3RydWN0IGlwNnRfZW50cnkKK3sKKwlzdHJ1Y3QgaXA2dF9pcDYgaXB2NjsKKworCS8qIE1hcmsgd2l0aCBmaWVsZHMgdGhhdCB3ZSBjYXJlIGFib3V0LiAqLworCXVuc2lnbmVkIGludCBuZmNhY2hlOworCisJLyogU2l6ZSBvZiBpcHRfZW50cnkgKyBtYXRjaGVzICovCisJdV9pbnQxNl90IHRhcmdldF9vZmZzZXQ7CisJLyogU2l6ZSBvZiBpcHRfZW50cnkgKyBtYXRjaGVzICsgdGFyZ2V0ICovCisJdV9pbnQxNl90IG5leHRfb2Zmc2V0OworCisJLyogQmFjayBwb2ludGVyICovCisJdW5zaWduZWQgaW50IGNvbWVmcm9tOworCisJLyogUGFja2V0IGFuZCBieXRlIGNvdW50ZXJzLiAqLworCXN0cnVjdCBpcDZ0X2NvdW50ZXJzIGNvdW50ZXJzOworCisJLyogVGhlIG1hdGNoZXMgKGlmIGFueSksIHRoZW4gdGhlIHRhcmdldC4gKi8KKwl1bnNpZ25lZCBjaGFyIGVsZW1zWzBdOworfTsKKworLyoKKyAqIE5ldyBJUCBmaXJld2FsbCBvcHRpb25zIGZvciBbZ3NdZXRzb2Nrb3B0IGF0IHRoZSBSQVcgSVAgbGV2ZWwuCisgKiBVbmxpa2UgQlNEIExpbnV4IGluaGVyaXRzIElQIG9wdGlvbnMgc28geW91IGRvbid0IGhhdmUgdG8gdXNlCisgKiBhIHJhdyBzb2NrZXQgZm9yIHRoaXMuIEluc3RlYWQgd2UgY2hlY2sgcmlnaHRzIGluIHRoZSBjYWxscy4gKi8KKyNkZWZpbmUgSVA2VF9CQVNFX0NUTAkJCTY0CS8qIGJhc2UgZm9yIGZpcmV3YWxsIHNvY2tldCBvcHRpb25zICovCisKKyNkZWZpbmUgSVA2VF9TT19TRVRfUkVQTEFDRQkJKElQNlRfQkFTRV9DVEwpCisjZGVmaW5lIElQNlRfU09fU0VUX0FERF9DT1VOVEVSUwkoSVA2VF9CQVNFX0NUTCArIDEpCisjZGVmaW5lIElQNlRfU09fU0VUX01BWAkJCUlQNlRfU09fU0VUX0FERF9DT1VOVEVSUworCisjZGVmaW5lIElQNlRfU09fR0VUX0lORk8JCShJUDZUX0JBU0VfQ1RMKQorI2RlZmluZSBJUDZUX1NPX0dFVF9FTlRSSUVTCQkoSVA2VF9CQVNFX0NUTCArIDEpCisjZGVmaW5lIElQNlRfU09fR0VUX01BWAkJCUlQNlRfU09fR0VUX0VOVFJJRVMKKworLyogQ09OVElOVUUgdmVyZGljdCBmb3IgdGFyZ2V0cyAqLworI2RlZmluZSBJUDZUX0NPTlRJTlVFIDB4RkZGRkZGRkYKKworLyogRm9yIHN0YW5kYXJkIHRhcmdldCAqLworI2RlZmluZSBJUDZUX1JFVFVSTiAoLU5GX1JFUEVBVCAtIDEpCisKKy8qIFRDUCBtYXRjaGluZyBzdHVmZiAqLworc3RydWN0IGlwNnRfdGNwCit7CisJdV9pbnQxNl90IHNwdHNbMl07CQkJLyogU291cmNlIHBvcnQgcmFuZ2UuICovCisJdV9pbnQxNl90IGRwdHNbMl07CQkJLyogRGVzdGluYXRpb24gcG9ydCByYW5nZS4gKi8KKwl1X2ludDhfdCBvcHRpb247CQkJLyogVENQIE9wdGlvbiBpZmYgbm9uLXplcm8qLworCXVfaW50OF90IGZsZ19tYXNrOwkJCS8qIFRDUCBmbGFncyBtYXNrIGJ5dGUgKi8KKwl1X2ludDhfdCBmbGdfY21wOwkJCS8qIFRDUCBmbGFncyBjb21wYXJlIGJ5dGUgKi8KKwl1X2ludDhfdCBpbnZmbGFnczsJCQkvKiBJbnZlcnNlIGZsYWdzICovCit9OworCisvKiBWYWx1ZXMgZm9yICJpbnYiIGZpZWxkIGluIHN0cnVjdCBpcHRfdGNwLiAqLworI2RlZmluZSBJUDZUX1RDUF9JTlZfU1JDUFQJMHgwMQkvKiBJbnZlcnQgdGhlIHNlbnNlIG9mIHNvdXJjZSBwb3J0cy4gKi8KKyNkZWZpbmUgSVA2VF9UQ1BfSU5WX0RTVFBUCTB4MDIJLyogSW52ZXJ0IHRoZSBzZW5zZSBvZiBkZXN0IHBvcnRzLiAqLworI2RlZmluZSBJUDZUX1RDUF9JTlZfRkxBR1MJMHgwNAkvKiBJbnZlcnQgdGhlIHNlbnNlIG9mIFRDUCBmbGFncy4gKi8KKyNkZWZpbmUgSVA2VF9UQ1BfSU5WX09QVElPTgkweDA4CS8qIEludmVydCB0aGUgc2Vuc2Ugb2Ygb3B0aW9uIHRlc3QuICovCisjZGVmaW5lIElQNlRfVENQX0lOVl9NQVNLCTB4MEYJLyogQWxsIHBvc3NpYmxlIGZsYWdzLiAqLworCisvKiBVRFAgbWF0Y2hpbmcgc3R1ZmYgKi8KK3N0cnVjdCBpcDZ0X3VkcAoreworCXVfaW50MTZfdCBzcHRzWzJdOwkJCS8qIFNvdXJjZSBwb3J0IHJhbmdlLiAqLworCXVfaW50MTZfdCBkcHRzWzJdOwkJCS8qIERlc3RpbmF0aW9uIHBvcnQgcmFuZ2UuICovCisJdV9pbnQ4X3QgaW52ZmxhZ3M7CQkJLyogSW52ZXJzZSBmbGFncyAqLworfTsKKworLyogVmFsdWVzIGZvciAiaW52ZmxhZ3MiIGZpZWxkIGluIHN0cnVjdCBpcHRfdWRwLiAqLworI2RlZmluZSBJUDZUX1VEUF9JTlZfU1JDUFQJMHgwMQkvKiBJbnZlcnQgdGhlIHNlbnNlIG9mIHNvdXJjZSBwb3J0cy4gKi8KKyNkZWZpbmUgSVA2VF9VRFBfSU5WX0RTVFBUCTB4MDIJLyogSW52ZXJ0IHRoZSBzZW5zZSBvZiBkZXN0IHBvcnRzLiAqLworI2RlZmluZSBJUDZUX1VEUF9JTlZfTUFTSwkweDAzCS8qIEFsbCBwb3NzaWJsZSBmbGFncy4gKi8KKworLyogSUNNUCBtYXRjaGluZyBzdHVmZiAqLworc3RydWN0IGlwNnRfaWNtcAoreworCXVfaW50OF90IHR5cGU7CQkJCS8qIHR5cGUgdG8gbWF0Y2ggKi8KKwl1X2ludDhfdCBjb2RlWzJdOwkJCS8qIHJhbmdlIG9mIGNvZGUgKi8KKwl1X2ludDhfdCBpbnZmbGFnczsJCQkvKiBJbnZlcnNlIGZsYWdzICovCit9OworCisvKiBWYWx1ZXMgZm9yICJpbnYiIGZpZWxkIGZvciBzdHJ1Y3QgaXB0X2ljbXAuICovCisjZGVmaW5lIElQNlRfSUNNUF9JTlYJMHgwMQkvKiBJbnZlcnQgdGhlIHNlbnNlIG9mIHR5cGUvY29kZSB0ZXN0ICovCisKKy8qIFRoZSBhcmd1bWVudCB0byBJUDZUX1NPX0dFVF9JTkZPICovCitzdHJ1Y3QgaXA2dF9nZXRpbmZvCit7CisJLyogV2hpY2ggdGFibGU6IGNhbGxlciBmaWxscyB0aGlzIGluLiAqLworCWNoYXIgbmFtZVtJUDZUX1RBQkxFX01BWE5BTUVMRU5dOworCisJLyogS2VybmVsIGZpbGxzIHRoZXNlIGluLiAqLworCS8qIFdoaWNoIGhvb2sgZW50cnkgcG9pbnRzIGFyZSB2YWxpZDogYml0bWFzayAqLworCXVuc2lnbmVkIGludCB2YWxpZF9ob29rczsKKworCS8qIEhvb2sgZW50cnkgcG9pbnRzOiBvbmUgcGVyIG5ldGZpbHRlciBob29rLiAqLworCXVuc2lnbmVkIGludCBob29rX2VudHJ5W05GX0lQNl9OVU1IT09LU107CisKKwkvKiBVbmRlcmZsb3cgcG9pbnRzLiAqLworCXVuc2lnbmVkIGludCB1bmRlcmZsb3dbTkZfSVA2X05VTUhPT0tTXTsKKworCS8qIE51bWJlciBvZiBlbnRyaWVzICovCisJdW5zaWduZWQgaW50IG51bV9lbnRyaWVzOworCisJLyogU2l6ZSBvZiBlbnRyaWVzLiAqLworCXVuc2lnbmVkIGludCBzaXplOworfTsKKworLyogVGhlIGFyZ3VtZW50IHRvIElQNlRfU09fU0VUX1JFUExBQ0UuICovCitzdHJ1Y3QgaXA2dF9yZXBsYWNlCit7CisJLyogV2hpY2ggdGFibGUuICovCisJY2hhciBuYW1lW0lQNlRfVEFCTEVfTUFYTkFNRUxFTl07CisKKwkvKiBXaGljaCBob29rIGVudHJ5IHBvaW50cyBhcmUgdmFsaWQ6IGJpdG1hc2suICBZb3UgY2FuJ3QKKyAgICAgICAgICAgY2hhbmdlIHRoaXMuICovCisJdW5zaWduZWQgaW50IHZhbGlkX2hvb2tzOworCisJLyogTnVtYmVyIG9mIGVudHJpZXMgKi8KKwl1bnNpZ25lZCBpbnQgbnVtX2VudHJpZXM7CisKKwkvKiBUb3RhbCBzaXplIG9mIG5ldyBlbnRyaWVzICovCisJdW5zaWduZWQgaW50IHNpemU7CisKKwkvKiBIb29rIGVudHJ5IHBvaW50cy4gKi8KKwl1bnNpZ25lZCBpbnQgaG9va19lbnRyeVtORl9JUDZfTlVNSE9PS1NdOworCisJLyogVW5kZXJmbG93IHBvaW50cy4gKi8KKwl1bnNpZ25lZCBpbnQgdW5kZXJmbG93W05GX0lQNl9OVU1IT09LU107CisKKwkvKiBJbmZvcm1hdGlvbiBhYm91dCBvbGQgZW50cmllczogKi8KKwkvKiBOdW1iZXIgb2YgY291bnRlcnMgKG11c3QgYmUgZXF1YWwgdG8gY3VycmVudCBudW1iZXIgb2YgZW50cmllcykuICovCisJdW5zaWduZWQgaW50IG51bV9jb3VudGVyczsKKwkvKiBUaGUgb2xkIGVudHJpZXMnIGNvdW50ZXJzLiAqLworCXN0cnVjdCBpcDZ0X2NvdW50ZXJzIF9fdXNlciAqY291bnRlcnM7CisKKwkvKiBUaGUgZW50cmllcyAoaGFuZyBvZmYgZW5kOiBub3QgcmVhbGx5IGFuIGFycmF5KS4gKi8KKwlzdHJ1Y3QgaXA2dF9lbnRyeSBlbnRyaWVzWzBdOworfTsKKworLyogVGhlIGFyZ3VtZW50IHRvIElQNlRfU09fQUREX0NPVU5URVJTLiAqLworc3RydWN0IGlwNnRfY291bnRlcnNfaW5mbworeworCS8qIFdoaWNoIHRhYmxlLiAqLworCWNoYXIgbmFtZVtJUDZUX1RBQkxFX01BWE5BTUVMRU5dOworCisJdW5zaWduZWQgaW50IG51bV9jb3VudGVyczsKKworCS8qIFRoZSBjb3VudGVycyAoYWN0dWFsbHkgYG51bWJlcicgb2YgdGhlc2UpLiAqLworCXN0cnVjdCBpcDZ0X2NvdW50ZXJzIGNvdW50ZXJzWzBdOworfTsKKworLyogVGhlIGFyZ3VtZW50IHRvIElQNlRfU09fR0VUX0VOVFJJRVMuICovCitzdHJ1Y3QgaXA2dF9nZXRfZW50cmllcworeworCS8qIFdoaWNoIHRhYmxlOiB1c2VyIGZpbGxzIHRoaXMgaW4uICovCisJY2hhciBuYW1lW0lQNlRfVEFCTEVfTUFYTkFNRUxFTl07CisKKwkvKiBVc2VyIGZpbGxzIHRoaXMgaW46IHRvdGFsIGVudHJ5IHNpemUuICovCisJdW5zaWduZWQgaW50IHNpemU7CisKKwkvKiBUaGUgZW50cmllcy4gKi8KKwlzdHJ1Y3QgaXA2dF9lbnRyeSBlbnRyeXRhYmxlWzBdOworfTsKKworLyogU3RhbmRhcmQgcmV0dXJuIHZlcmRpY3QsIG9yIGRvIGp1bXAuICovCisjZGVmaW5lIElQNlRfU1RBTkRBUkRfVEFSR0VUICIiCisvKiBFcnJvciB2ZXJkaWN0LiAqLworI2RlZmluZSBJUDZUX0VSUk9SX1RBUkdFVCAiRVJST1IiCisKKy8qIEhlbHBlciBmdW5jdGlvbnMgKi8KK3N0YXRpYyBfX2lubGluZV9fIHN0cnVjdCBpcDZ0X2VudHJ5X3RhcmdldCAqCitpcDZ0X2dldF90YXJnZXQoc3RydWN0IGlwNnRfZW50cnkgKmUpCit7CisJcmV0dXJuICh2b2lkICopZSArIGUtPnRhcmdldF9vZmZzZXQ7Cit9CisKKy8qIGZuIHJldHVybnMgMCB0byBjb250aW51ZSBpdGVyYXRpb24gKi8KKyNkZWZpbmUgSVA2VF9NQVRDSF9JVEVSQVRFKGUsIGZuLCBhcmdzLi4uKQlcCisoewkJCQkJCVwKKwl1bnNpZ25lZCBpbnQgX19pOwkJCVwKKwlpbnQgX19yZXQgPSAwOwkJCQlcCisJc3RydWN0IGlwNnRfZW50cnlfbWF0Y2ggKl9fbTsJCVwKKwkJCQkJCVwKKwlmb3IgKF9faSA9IHNpemVvZihzdHJ1Y3QgaXA2dF9lbnRyeSk7CVwKKwkgICAgIF9faSA8IChlKS0+dGFyZ2V0X29mZnNldDsJCVwKKwkgICAgIF9faSArPSBfX20tPnUubWF0Y2hfc2l6ZSkgewlcCisJCV9fbSA9ICh2b2lkICopKGUpICsgX19pOwlcCisJCQkJCQlcCisJCV9fcmV0ID0gZm4oX19tICwgIyMgYXJncyk7CVwKKwkJaWYgKF9fcmV0ICE9IDApCQkJXAorCQkJYnJlYWs7CQkJXAorCX0JCQkJCVwKKwlfX3JldDsJCQkJCVwKK30pCisKKy8qIGZuIHJldHVybnMgMCB0byBjb250aW51ZSBpdGVyYXRpb24gKi8KKyNkZWZpbmUgSVA2VF9FTlRSWV9JVEVSQVRFKGVudHJpZXMsIHNpemUsIGZuLCBhcmdzLi4uKQkJXAorKHsJCQkJCQkJCVwKKwl1bnNpZ25lZCBpbnQgX19pOwkJCQkJXAorCWludCBfX3JldCA9IDA7CQkJCQkJXAorCXN0cnVjdCBpcDZ0X2VudHJ5ICpfX2U7CQkJCQlcCisJCQkJCQkJCVwKKwlmb3IgKF9faSA9IDA7IF9faSA8IChzaXplKTsgX19pICs9IF9fZS0+bmV4dF9vZmZzZXQpIHsJXAorCQlfX2UgPSAodm9pZCAqKShlbnRyaWVzKSArIF9faTsJCQlcCisJCQkJCQkJCVwKKwkJX19yZXQgPSBmbihfX2UgLCAjIyBhcmdzKTsJCQlcCisJCWlmIChfX3JldCAhPSAwKQkJCQkJXAorCQkJYnJlYWs7CQkJCQlcCisJfQkJCQkJCQlcCisJX19yZXQ7CQkJCQkJCVwKK30pCisKKy8qCisgKglNYWluIGZpcmV3YWxsIGNoYWlucyBkZWZpbml0aW9ucyBhbmQgZ2xvYmFsIHZhcidzIGRlZmluaXRpb25zLgorICovCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CitleHRlcm4gdm9pZCBpcDZ0X2luaXQodm9pZCkgX19pbml0OworCitzdHJ1Y3QgaXA2dF9tYXRjaAoreworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKworCWNvbnN0IGNoYXIgbmFtZVtJUDZUX0ZVTkNUSU9OX01BWE5BTUVMRU5dOworCisJLyogUmV0dXJuIHRydWUgb3IgZmFsc2U6IHJldHVybiBGQUxTRSBhbmQgc2V0ICpob3Rkcm9wID0gMSB0bworICAgICAgICAgICBmb3JjZSBpbW1lZGlhdGUgcGFja2V0IGRyb3AuICovCisJLyogQXJndW1lbnRzIGNoYW5nZWQgc2luY2UgMi42LjksIGFzIHRoaXMgbXVzdCBub3cgaGFuZGxlCisJICAgbm9uLWxpbmVhciBza2IsIHVzaW5nIHNrYl9oZWFkZXJfcG9pbnRlciBhbmQKKwkgICBza2JfaXBfbWFrZV93cml0YWJsZS4gKi8KKwlpbnQgKCptYXRjaCkoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCisJCSAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKKwkJICAgICBjb25zdCB2b2lkICptYXRjaGluZm8sCisJCSAgICAgaW50IG9mZnNldCwKKwkJICAgICB1bnNpZ25lZCBpbnQgcHJvdG9mZiwKKwkJICAgICBpbnQgKmhvdGRyb3ApOworCisJLyogQ2FsbGVkIHdoZW4gdXNlciB0cmllcyB0byBpbnNlcnQgYW4gZW50cnkgb2YgdGhpcyB0eXBlLiAqLworCS8qIFNob3VsZCByZXR1cm4gdHJ1ZSBvciBmYWxzZS4gKi8KKwlpbnQgKCpjaGVja2VudHJ5KShjb25zdCBjaGFyICp0YWJsZW5hbWUsCisJCQkgIGNvbnN0IHN0cnVjdCBpcDZ0X2lwNiAqaXAsCisJCQkgIHZvaWQgKm1hdGNoaW5mbywKKwkJCSAgdW5zaWduZWQgaW50IG1hdGNoaW5mb3NpemUsCisJCQkgIHVuc2lnbmVkIGludCBob29rX21hc2spOworCisJLyogQ2FsbGVkIHdoZW4gZW50cnkgb2YgdGhpcyB0eXBlIGRlbGV0ZWQuICovCisJdm9pZCAoKmRlc3Ryb3kpKHZvaWQgKm1hdGNoaW5mbywgdW5zaWduZWQgaW50IG1hdGNoaW5mb3NpemUpOworCisJLyogU2V0IHRoaXMgdG8gVEhJU19NT0RVTEUgaWYgeW91IGFyZSBhIG1vZHVsZSwgb3RoZXJ3aXNlIE5VTEwgKi8KKwlzdHJ1Y3QgbW9kdWxlICptZTsKK307CisKKy8qIFJlZ2lzdHJhdGlvbiBob29rcyBmb3IgdGFyZ2V0cy4gKi8KK3N0cnVjdCBpcDZ0X3RhcmdldAoreworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKworCWNvbnN0IGNoYXIgbmFtZVtJUDZUX0ZVTkNUSU9OX01BWE5BTUVMRU5dOworCisJLyogUmV0dXJucyB2ZXJkaWN0LiBBcmd1bWVudCBvcmRlciBjaGFuZ2VkIHNpbmNlIDIuNi45LCBhcyB0aGlzCisJICAgbXVzdCBub3cgaGFuZGxlIG5vbi1saW5lYXIgc2ticywgdXNpbmcgc2tiX2NvcHlfYml0cyBhbmQKKwkgICBza2JfaXBfbWFrZV93cml0YWJsZS4gKi8KKwl1bnNpZ25lZCBpbnQgKCp0YXJnZXQpKHN0cnVjdCBza19idWZmICoqcHNrYiwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCisJCQkgICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgaG9va251bSwKKwkJCSAgICAgICBjb25zdCB2b2lkICp0YXJnaW5mbywKKwkJCSAgICAgICB2b2lkICp1c2VyZGF0YSk7CisKKwkvKiBDYWxsZWQgd2hlbiB1c2VyIHRyaWVzIHRvIGluc2VydCBhbiBlbnRyeSBvZiB0aGlzIHR5cGU6CisgICAgICAgICAgIGhvb2tfbWFzayBpcyBhIGJpdG1hc2sgb2YgaG9va3MgZnJvbSB3aGljaCBpdCBjYW4gYmUKKyAgICAgICAgICAgY2FsbGVkLiAqLworCS8qIFNob3VsZCByZXR1cm4gdHJ1ZSBvciBmYWxzZS4gKi8KKwlpbnQgKCpjaGVja2VudHJ5KShjb25zdCBjaGFyICp0YWJsZW5hbWUsCisJCQkgIGNvbnN0IHN0cnVjdCBpcDZ0X2VudHJ5ICplLAorCQkJICB2b2lkICp0YXJnaW5mbywKKwkJCSAgdW5zaWduZWQgaW50IHRhcmdpbmZvc2l6ZSwKKwkJCSAgdW5zaWduZWQgaW50IGhvb2tfbWFzayk7CisKKwkvKiBDYWxsZWQgd2hlbiBlbnRyeSBvZiB0aGlzIHR5cGUgZGVsZXRlZC4gKi8KKwl2b2lkICgqZGVzdHJveSkodm9pZCAqdGFyZ2luZm8sIHVuc2lnbmVkIGludCB0YXJnaW5mb3NpemUpOworCisJLyogU2V0IHRoaXMgdG8gVEhJU19NT0RVTEUgaWYgeW91IGFyZSBhIG1vZHVsZSwgb3RoZXJ3aXNlIE5VTEwgKi8KKwlzdHJ1Y3QgbW9kdWxlICptZTsKK307CisKK2V4dGVybiBpbnQgaXA2dF9yZWdpc3Rlcl90YXJnZXQoc3RydWN0IGlwNnRfdGFyZ2V0ICp0YXJnZXQpOworZXh0ZXJuIHZvaWQgaXA2dF91bnJlZ2lzdGVyX3RhcmdldChzdHJ1Y3QgaXA2dF90YXJnZXQgKnRhcmdldCk7CisKK2V4dGVybiBpbnQgaXA2dF9yZWdpc3Rlcl9tYXRjaChzdHJ1Y3QgaXA2dF9tYXRjaCAqbWF0Y2gpOworZXh0ZXJuIHZvaWQgaXA2dF91bnJlZ2lzdGVyX21hdGNoKHN0cnVjdCBpcDZ0X21hdGNoICptYXRjaCk7CisKKy8qIEZ1cm5pdHVyZSBzaG9wcGluZy4uLiAqLworc3RydWN0IGlwNnRfdGFibGUKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisKKwkvKiBBIHVuaXF1ZSBuYW1lLi4uICovCisJY2hhciBuYW1lW0lQNlRfVEFCTEVfTUFYTkFNRUxFTl07CisKKwkvKiBXaGF0IGhvb2tzIHlvdSB3aWxsIGVudGVyIG9uICovCisJdW5zaWduZWQgaW50IHZhbGlkX2hvb2tzOworCisJLyogTG9jayBmb3IgdGhlIGN1cnRhaW4gKi8KKwlyd2xvY2tfdCBsb2NrOworCisJLyogTWFuIGJlaGluZCB0aGUgY3VydGFpbi4uLiAqLworCXN0cnVjdCBpcDZ0X3RhYmxlX2luZm8gKnByaXZhdGU7CisKKwkvKiBTZXQgdGhpcyB0byBUSElTX01PRFVMRSBpZiB5b3UgYXJlIGEgbW9kdWxlLCBvdGhlcndpc2UgTlVMTCAqLworCXN0cnVjdCBtb2R1bGUgKm1lOworfTsKKworZXh0ZXJuIGludCBpcDZ0X3JlZ2lzdGVyX3RhYmxlKHN0cnVjdCBpcDZ0X3RhYmxlICp0YWJsZSwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaXA2dF9yZXBsYWNlICpyZXBsKTsKK2V4dGVybiB2b2lkIGlwNnRfdW5yZWdpc3Rlcl90YWJsZShzdHJ1Y3QgaXA2dF90YWJsZSAqdGFibGUpOworZXh0ZXJuIHVuc2lnbmVkIGludCBpcDZ0X2RvX3RhYmxlKHN0cnVjdCBza19idWZmICoqcHNrYiwKKwkJCQkgIHVuc2lnbmVkIGludCBob29rLAorCQkJCSAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAorCQkJCSAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKKwkJCQkgIHN0cnVjdCBpcDZ0X3RhYmxlICp0YWJsZSwKKwkJCQkgIHZvaWQgKnVzZXJkYXRhKTsKKworLyogQ2hlY2sgZm9yIGFuIGV4dGVuc2lvbiAqLworZXh0ZXJuIGludCBpcDZ0X2V4dF9oZHIodTggbmV4dGhkcik7CisKKyNkZWZpbmUgSVA2VF9BTElHTihzKSAoKChzKSArIChfX2FsaWdub2ZfXyhzdHJ1Y3QgaXA2dF9lbnRyeSktMSkpICYgfihfX2FsaWdub2ZfXyhzdHJ1Y3QgaXA2dF9lbnRyeSktMSkpCisKKyNlbmRpZiAvKl9fS0VSTkVMX18qLworI2VuZGlmIC8qIF9JUDZfVEFCTEVTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9MT0cuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9MT0cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Mjk5NmE0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X0xPRy5oCkBAIC0wLDAgKzEsMTYgQEAKKyNpZm5kZWYgX0lQNlRfTE9HX0gKKyNkZWZpbmUgX0lQNlRfTE9HX0gKKworI2RlZmluZSBJUDZUX0xPR19UQ1BTRVEJCTB4MDEJLyogTG9nIFRDUCBzZXF1ZW5jZSBudW1iZXJzICovCisjZGVmaW5lIElQNlRfTE9HX1RDUE9QVAkJMHgwMgkvKiBMb2cgVENQIG9wdGlvbnMgKi8KKyNkZWZpbmUgSVA2VF9MT0dfSVBPUFQJCTB4MDQJLyogTG9nIElQIG9wdGlvbnMgKi8KKyNkZWZpbmUgSVA2VF9MT0dfVUlECQkweDA4CS8qIExvZyBVSUQgb3duaW5nIGxvY2FsIHNvY2tldCAqLworI2RlZmluZSBJUDZUX0xPR19NQVNLCQkweDBmCisKK3N0cnVjdCBpcDZ0X2xvZ19pbmZvIHsKKwl1bnNpZ25lZCBjaGFyIGxldmVsOworCXVuc2lnbmVkIGNoYXIgbG9nZmxhZ3M7CisJY2hhciBwcmVmaXhbMzBdOworfTsKKworI2VuZGlmIC8qX0lQVF9MT0dfSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfTUFSSy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X01BUksuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWRlOGQ4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X01BUksuaApAQCAtMCwwICsxLDggQEAKKyNpZm5kZWYgX0lQNlRfTUFSS19IX3RhcmdldAorI2RlZmluZSBfSVA2VF9NQVJLX0hfdGFyZ2V0CisKK3N0cnVjdCBpcDZ0X21hcmtfdGFyZ2V0X2luZm8geworCXVuc2lnbmVkIGxvbmcgbWFyazsKK307CisKKyNlbmRpZiAvKl9JUFRfTUFSS19IX3RhcmdldCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfYWguaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9haC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0ZjA3OTMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfYWguaApAQCAtMCwwICsxLDMwIEBACisjaWZuZGVmIF9JUDZUX0FIX0gKKyNkZWZpbmUgX0lQNlRfQUhfSAorCitzdHJ1Y3QgaXA2dF9haAoreworCXVfaW50MzJfdCBzcGlzWzJdOwkJCS8qIFNlY3VyaXR5IFBhcmFtZXRlciBJbmRleCAqLworCXVfaW50MzJfdCBoZHJsZW47CQkJLyogSGVhZGVyIExlbmd0aCAqLworCXVfaW50OF90ICBoZHJyZXM7CQkJLyogVGVzdCBvZiB0aGUgUmVzZXJ2ZWQgRmlsZWQgKi8KKwl1X2ludDhfdCAgaW52ZmxhZ3M7CQkJLyogSW52ZXJzZSBmbGFncyAqLworfTsKKworI2RlZmluZSBJUDZUX0FIX1NQSSAweDAxCisjZGVmaW5lIElQNlRfQUhfTEVOIDB4MDIKKyNkZWZpbmUgSVA2VF9BSF9SRVMgMHgwNAorCisvKiBWYWx1ZXMgZm9yICJpbnZmbGFncyIgZmllbGQgaW4gc3RydWN0IGlwNnRfYWguICovCisjZGVmaW5lIElQNlRfQUhfSU5WX1NQSQkJMHgwMQkvKiBJbnZlcnQgdGhlIHNlbnNlIG9mIHNwaS4gKi8KKyNkZWZpbmUgSVA2VF9BSF9JTlZfTEVOCQkweDAyCS8qIEludmVydCB0aGUgc2Vuc2Ugb2YgbGVuZ3RoLiAqLworI2RlZmluZSBJUDZUX0FIX0lOVl9NQVNLCTB4MDMJLyogQWxsIHBvc3NpYmxlIGZsYWdzLiAqLworCisjZGVmaW5lIE1BU0tfSE9QT1BUUyAgICAxMjgKKyNkZWZpbmUgTUFTS19EU1RPUFRTICAgIDY0CisjZGVmaW5lIE1BU0tfUk9VVElORyAgICAzMgorI2RlZmluZSBNQVNLX0ZSQUdNRU5UICAgMTYKKyNkZWZpbmUgTUFTS19BSCAgICAgICAgIDgKKyNkZWZpbmUgTUFTS19FU1AgICAgICAgIDQKKyNkZWZpbmUgTUFTS19OT05FICAgICAgIDIKKyNkZWZpbmUgTUFTS19QUk9UTyAgICAgIDEKKworI2VuZGlmIC8qX0lQNlRfQUhfSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfZXNwLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfZXNwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDExNDJiOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9lc3AuaApAQCAtMCwwICsxLDIzIEBACisjaWZuZGVmIF9JUDZUX0VTUF9ICisjZGVmaW5lIF9JUDZUX0VTUF9ICisKK3N0cnVjdCBpcDZ0X2VzcAoreworCXVfaW50MzJfdCBzcGlzWzJdOwkJCS8qIFNlY3VyaXR5IFBhcmFtZXRlciBJbmRleCAqLworCXVfaW50OF90ICBpbnZmbGFnczsJCQkvKiBJbnZlcnNlIGZsYWdzICovCit9OworCisjZGVmaW5lIE1BU0tfSE9QT1BUUyAgICAxMjgKKyNkZWZpbmUgTUFTS19EU1RPUFRTICAgIDY0CisjZGVmaW5lIE1BU0tfUk9VVElORyAgICAzMgorI2RlZmluZSBNQVNLX0ZSQUdNRU5UICAgMTYKKyNkZWZpbmUgTUFTS19BSCAgICAgICAgIDgKKyNkZWZpbmUgTUFTS19FU1AgICAgICAgIDQKKyNkZWZpbmUgTUFTS19OT05FICAgICAgIDIKKyNkZWZpbmUgTUFTS19QUk9UTyAgICAgIDEKKworLyogVmFsdWVzIGZvciAiaW52ZmxhZ3MiIGZpZWxkIGluIHN0cnVjdCBpcDZ0X2VzcC4gKi8KKyNkZWZpbmUgSVA2VF9FU1BfSU5WX1NQSQkJMHgwMQkvKiBJbnZlcnQgdGhlIHNlbnNlIG9mIHNwaS4gKi8KKyNkZWZpbmUgSVA2VF9FU1BfSU5WX01BU0sJMHgwMQkvKiBBbGwgcG9zc2libGUgZmxhZ3MuICovCisKKyNlbmRpZiAvKl9JUDZUX0VTUF9IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9mcmFnLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfZnJhZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0OWE1N2UKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfZnJhZy5oCkBAIC0wLDAgKzEsMzMgQEAKKyNpZm5kZWYgX0lQNlRfRlJBR19ICisjZGVmaW5lIF9JUDZUX0ZSQUdfSAorCitzdHJ1Y3QgaXA2dF9mcmFnCit7CisJdV9pbnQzMl90IGlkc1syXTsJCQkvKiBTZWN1cml0eSBQYXJhbWV0ZXIgSW5kZXggKi8KKwl1X2ludDMyX3QgaGRybGVuOwkJCS8qIEhlYWRlciBMZW5ndGggKi8KKwl1X2ludDhfdCAgZmxhZ3M7CQkJLyogICovCisJdV9pbnQ4X3QgIGludmZsYWdzOwkJCS8qIEludmVyc2UgZmxhZ3MgKi8KK307CisKKyNkZWZpbmUgSVA2VF9GUkFHX0lEUyAJCTB4MDEKKyNkZWZpbmUgSVA2VF9GUkFHX0xFTiAJCTB4MDIKKyNkZWZpbmUgSVA2VF9GUkFHX1JFUyAJCTB4MDQKKyNkZWZpbmUgSVA2VF9GUkFHX0ZTVCAJCTB4MDgKKyNkZWZpbmUgSVA2VF9GUkFHX01GICAJCTB4MTAKKyNkZWZpbmUgSVA2VF9GUkFHX05NRiAgCQkweDIwCisKKy8qIFZhbHVlcyBmb3IgImludmZsYWdzIiBmaWVsZCBpbiBzdHJ1Y3QgaXA2dF9mcmFnLiAqLworI2RlZmluZSBJUDZUX0ZSQUdfSU5WX0lEUwkweDAxCS8qIEludmVydCB0aGUgc2Vuc2Ugb2YgaWRzLiAqLworI2RlZmluZSBJUDZUX0ZSQUdfSU5WX0xFTgkweDAyCS8qIEludmVydCB0aGUgc2Vuc2Ugb2YgbGVuZ3RoLiAqLworI2RlZmluZSBJUDZUX0ZSQUdfSU5WX01BU0sJMHgwMwkvKiBBbGwgcG9zc2libGUgZmxhZ3MuICovCisKKyNkZWZpbmUgTUFTS19IT1BPUFRTICAgIDEyOAorI2RlZmluZSBNQVNLX0RTVE9QVFMgICAgNjQKKyNkZWZpbmUgTUFTS19ST1VUSU5HICAgIDMyCisjZGVmaW5lIE1BU0tfRlJBR01FTlQgICAxNgorI2RlZmluZSBNQVNLX0FIICAgICAgICAgOAorI2RlZmluZSBNQVNLX0VTUCAgICAgICAgNAorI2RlZmluZSBNQVNLX05PTkUgICAgICAgMgorI2RlZmluZSBNQVNLX1BST1RPICAgICAgMQorCisjZW5kaWYgLypfSVA2VF9GUkFHX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X2hsLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfaGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWY5MWI4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X2hsLmgKQEAgLTAsMCArMSwyMiBAQAorLyogaXA2dGFibGVzIG1vZHVsZSBmb3IgbWF0Y2hpbmcgdGhlIEhvcCBMaW1pdCB2YWx1ZQorICogTWFjaWVqIFNvbHR5c2lhayA8c29sdEBkbnMudG94aWNmaWxtcy50dj4KKyAqIEJhc2VkIG9uIEhXJ3MgdHRsIG1vZHVsZSAqLworCisjaWZuZGVmIF9JUDZUX0hMX0gKKyNkZWZpbmUgX0lQNlRfSExfSAorCitlbnVtIHsKKwlJUDZUX0hMX0VRID0gMCwJCS8qIGVxdWFscyAqLworCUlQNlRfSExfTkUsCQkvKiBub3QgZXF1YWxzICovCisJSVA2VF9ITF9MVCwJCS8qIGxlc3MgdGhhbiAqLworCUlQNlRfSExfR1QsCQkvKiBncmVhdGVyIHRoYW4gKi8KK307CisKKworc3RydWN0IGlwNnRfaGxfaW5mbyB7CisJdV9pbnQ4X3QJbW9kZTsKKwl1X2ludDhfdAlob3BfbGltaXQ7Cit9OworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X2lwdjZoZWFkZXIuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9pcHY2aGVhZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFjNTNmYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9pcHY2aGVhZGVyLmgKQEAgLTAsMCArMSwyNyBAQAorLyogaXB2NmhlYWRlciBtYXRjaCAtIG1hdGNoZXMgSVB2NiBwYWNrZXRzIGJhc2VkCitvbiB3aGV0aGVyIHRoZXkgY29udGFpbiBjZXJ0YWluIGhlYWRlcnMgKi8KKworLyogT3JpZ2luYWwgaWRlYTogQnJhZCBDaGFwbWFuIAorICogUmV3cml0dGVuIGJ5OiBBbmRyYXMgS2lzLVN6YWJvIDxraXN6YUBzY2guYm1lLmh1PiAqLworCisKKyNpZm5kZWYgX19JUFY2SEVBREVSX0gKKyNkZWZpbmUgX19JUFY2SEVBREVSX0gKKworc3RydWN0IGlwNnRfaXB2NmhlYWRlcl9pbmZvCit7CisJdV9pbnQ4X3QgbWF0Y2hmbGFnczsKKwl1X2ludDhfdCBpbnZmbGFnczsKKwl1X2ludDhfdCBtb2RlZmxhZzsKK307CisKKyNkZWZpbmUgTUFTS19IT1BPUFRTICAgIDEyOAorI2RlZmluZSBNQVNLX0RTVE9QVFMgICAgNjQKKyNkZWZpbmUgTUFTS19ST1VUSU5HICAgIDMyCisjZGVmaW5lIE1BU0tfRlJBR01FTlQgICAxNgorI2RlZmluZSBNQVNLX0FIICAgICAgICAgOAorI2RlZmluZSBNQVNLX0VTUCAgICAgICAgNAorI2RlZmluZSBNQVNLX05PTkUgICAgICAgMgorI2RlZmluZSBNQVNLX1BST1RPICAgICAgMQorCisjZW5kaWYgLyogX19JUFY2SEVBREVSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9sZW5ndGguaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9sZW5ndGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmMwOWY5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X2xlbmd0aC5oCkBAIC0wLDAgKzEsMTAgQEAKKyNpZm5kZWYgX0lQNlRfTEVOR1RIX0gKKyNkZWZpbmUgX0lQNlRfTEVOR1RIX0gKKworc3RydWN0IGlwNnRfbGVuZ3RoX2luZm8geworCXVfaW50MTZfdCAgbWluLCBtYXg7CisJdV9pbnQ4X3QgICBpbnZlcnQ7Cit9OworCisjZW5kaWYgLypfSVA2VF9MRU5HVEhfSCovCisJCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfbGltaXQuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9saW1pdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyODY2ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfbGltaXQuaApAQCAtMCwwICsxLDIxIEBACisjaWZuZGVmIF9JUDZUX1JBVEVfSAorI2RlZmluZSBfSVA2VF9SQVRFX0gKKworLyogdGltaW5ncyBhcmUgaW4gbWlsbGlzZWNvbmRzLiAqLworI2RlZmluZSBJUDZUX0xJTUlUX1NDQUxFIDEwMDAwCisKKy8qIDEvMTAsMDAwIHNlYyBwZXJpb2QgPT4gbWF4IG9mIDEwLDAwMC9zZWMuICBNaW4gcmF0ZSBpcyB0aGVuIDQyOTQ5MAorICAgc2Vjb25kcywgb3Igb25lIGV2ZXJ5IDU5IGhvdXJzLiAqLworc3RydWN0IGlwNnRfcmF0ZWluZm8geworCXVfaW50MzJfdCBhdmc7ICAgIC8qIEF2ZXJhZ2Ugc2VjcyBiZXR3ZWVuIHBhY2tldHMgKiBzY2FsZSAqLworCXVfaW50MzJfdCBidXJzdDsgIC8qIFBlcmlvZCBtdWx0aXBsaWVyIGZvciB1cHBlciBsaW1pdC4gKi8KKworCS8qIFVzZWQgaW50ZXJuYWxseSBieSB0aGUga2VybmVsICovCisJdW5zaWduZWQgbG9uZyBwcmV2OworCXVfaW50MzJfdCBjcmVkaXQ7CisJdV9pbnQzMl90IGNyZWRpdF9jYXAsIGNvc3Q7CisKKwkvKiBVZ2x5LCB1Z2x5IGZ1Y2tlci4gKi8KKwlzdHJ1Y3QgaXA2dF9yYXRlaW5mbyAqbWFzdGVyOworfTsKKyNlbmRpZiAvKl9JUFRfUkFURV9IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9tYWMuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9tYWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2MwODhjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X21hYy5oCkBAIC0wLDAgKzEsOCBAQAorI2lmbmRlZiBfSVA2VF9NQUNfSAorI2RlZmluZSBfSVA2VF9NQUNfSAorCitzdHJ1Y3QgaXA2dF9tYWNfaW5mbyB7CisgICAgdW5zaWduZWQgY2hhciBzcmNhZGRyW0VUSF9BTEVOXTsKKyAgICBpbnQgaW52ZXJ0OworfTsKKyNlbmRpZiAvKl9JUFRfTUFDX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X21hcmsuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9tYXJrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTczNDQ0MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9tYXJrLmgKQEAgLTAsMCArMSw5IEBACisjaWZuZGVmIF9JUDZUX01BUktfSAorI2RlZmluZSBfSVA2VF9NQVJLX0gKKworc3RydWN0IGlwNnRfbWFya19pbmZvIHsKKyAgICB1bnNpZ25lZCBsb25nIG1hcmssIG1hc2s7CisgICAgdV9pbnQ4X3QgaW52ZXJ0OworfTsKKworI2VuZGlmIC8qX0lQVF9NQVJLX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X211bHRpcG9ydC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X211bHRpcG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmZTQ5NTQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfbXVsdGlwb3J0LmgKQEAgLTAsMCArMSwyMSBAQAorI2lmbmRlZiBfSVA2VF9NVUxUSVBPUlRfSAorI2RlZmluZSBfSVA2VF9NVUxUSVBPUlRfSAorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY2L2lwNl90YWJsZXMuaD4KKworZW51bSBpcDZ0X211bHRpcG9ydF9mbGFncworeworCUlQNlRfTVVMVElQT1JUX1NPVVJDRSwKKwlJUDZUX01VTFRJUE9SVF9ERVNUSU5BVElPTiwKKwlJUDZUX01VTFRJUE9SVF9FSVRIRVIKK307CisKKyNkZWZpbmUgSVA2VF9NVUxUSV9QT1JUUwkxNQorCisvKiBNdXN0IGZpdCBpbnNpZGUgdW5pb24gaXA2dF9tYXRjaGluZm86IDE2IGJ5dGVzICovCitzdHJ1Y3QgaXA2dF9tdWx0aXBvcnQKK3sKKwl1X2ludDhfdCBmbGFnczsJCQkJLyogVHlwZSBvZiBjb21wYXJpc29uICovCisJdV9pbnQ4X3QgY291bnQ7CQkJCS8qIE51bWJlciBvZiBwb3J0cyAqLworCXVfaW50MTZfdCBwb3J0c1tJUDZUX01VTFRJX1BPUlRTXTsJLyogUG9ydHMgKi8KK307CisjZW5kaWYgLypfSVBUX01VTFRJUE9SVF9IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9vcHRzLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfb3B0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyNTliNjI3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X29wdHMuaApAQCAtMCwwICsxLDMyIEBACisjaWZuZGVmIF9JUDZUX09QVFNfSAorI2RlZmluZSBfSVA2VF9PUFRTX0gKKworI2RlZmluZSBJUDZUX09QVFNfT1BUU05SIDE2CisKK3N0cnVjdCBpcDZ0X29wdHMKK3sKKwl1X2ludDMyX3QgaGRybGVuOwkJCS8qIEhlYWRlciBMZW5ndGggKi8KKwl1X2ludDhfdCBmbGFnczsJCQkJLyogICovCisJdV9pbnQ4X3QgaW52ZmxhZ3M7CQkJLyogSW52ZXJzZSBmbGFncyAqLworCXVfaW50MTZfdCBvcHRzW0lQNlRfT1BUU19PUFRTTlJdOwkvKiBvcHRzICovCisJdV9pbnQ4X3Qgb3B0c25yOwkJCS8qIE5yIG9mIE9QdHMgKi8KK307CisKKyNkZWZpbmUgSVA2VF9PUFRTX0xFTiAJCTB4MDEKKyNkZWZpbmUgSVA2VF9PUFRTX09QVFMgCQkweDAyCisjZGVmaW5lIElQNlRfT1BUU19OU1RSSUNUCTB4MDQKKworLyogVmFsdWVzIGZvciAiaW52ZmxhZ3MiIGZpZWxkIGluIHN0cnVjdCBpcDZ0X3J0LiAqLworI2RlZmluZSBJUDZUX09QVFNfSU5WX0xFTgkweDAxCS8qIEludmVydCB0aGUgc2Vuc2Ugb2YgbGVuZ3RoLiAqLworI2RlZmluZSBJUDZUX09QVFNfSU5WX01BU0sJMHgwMQkvKiBBbGwgcG9zc2libGUgZmxhZ3MuICovCisKKyNkZWZpbmUgTUFTS19IT1BPUFRTICAgIDEyOAorI2RlZmluZSBNQVNLX0RTVE9QVFMgICAgNjQKKyNkZWZpbmUgTUFTS19ST1VUSU5HICAgIDMyCisjZGVmaW5lIE1BU0tfRlJBR01FTlQgICAxNgorI2RlZmluZSBNQVNLX0FIICAgICAgICAgOAorI2RlZmluZSBNQVNLX0VTUCAgICAgICAgNAorI2RlZmluZSBNQVNLX05PTkUgICAgICAgMgorI2RlZmluZSBNQVNLX1BST1RPICAgICAgMQorCisjZW5kaWYgLypfSVA2VF9PUFRTX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X293bmVyLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfb3duZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTkzN2RhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X293bmVyLmgKQEAgLTAsMCArMSwxOCBAQAorI2lmbmRlZiBfSVA2VF9PV05FUl9ICisjZGVmaW5lIF9JUDZUX09XTkVSX0gKKworLyogbWF0Y2ggYW5kIGludmVydCBmbGFncyAqLworI2RlZmluZSBJUDZUX09XTkVSX1VJRAkweDAxCisjZGVmaW5lIElQNlRfT1dORVJfR0lECTB4MDIKKyNkZWZpbmUgSVA2VF9PV05FUl9QSUQJMHgwNAorI2RlZmluZSBJUDZUX09XTkVSX1NJRAkweDA4CisKK3N0cnVjdCBpcDZ0X293bmVyX2luZm8geworICAgIHVpZF90IHVpZDsKKyAgICBnaWRfdCBnaWQ7CisgICAgcGlkX3QgcGlkOworICAgIHBpZF90IHNpZDsKKyAgICB1X2ludDhfdCBtYXRjaCwgaW52ZXJ0OwkvKiBmbGFncyAqLworfTsKKworI2VuZGlmIC8qX0lQVF9PV05FUl9IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9waHlzZGV2LmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfcGh5c2Rldi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyMzQ3MzEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfcGh5c2Rldi5oCkBAIC0wLDAgKzEsMjQgQEAKKyNpZm5kZWYgX0lQNlRfUEhZU0RFVl9ICisjZGVmaW5lIF9JUDZUX1BIWVNERVZfSAorCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGxpbnV4L2lmLmg+CisjZW5kaWYKKworI2RlZmluZSBJUDZUX1BIWVNERVZfT1BfSU4JCTB4MDEKKyNkZWZpbmUgSVA2VF9QSFlTREVWX09QX09VVAkJMHgwMgorI2RlZmluZSBJUDZUX1BIWVNERVZfT1BfQlJJREdFRAkJMHgwNAorI2RlZmluZSBJUDZUX1BIWVNERVZfT1BfSVNJTgkJMHgwOAorI2RlZmluZSBJUDZUX1BIWVNERVZfT1BfSVNPVVQJCTB4MTAKKyNkZWZpbmUgSVA2VF9QSFlTREVWX09QX01BU0sJCSgweDIwIC0gMSkKKworc3RydWN0IGlwNnRfcGh5c2Rldl9pbmZvIHsKKwljaGFyIHBoeXNpbmRldltJRk5BTVNJWl07CisJY2hhciBpbl9tYXNrW0lGTkFNU0laXTsKKwljaGFyIHBoeXNvdXRkZXZbSUZOQU1TSVpdOworCWNoYXIgb3V0X21hc2tbSUZOQU1TSVpdOworCXVfaW50OF90IGludmVydDsKKwl1X2ludDhfdCBiaXRtYXNrOworfTsKKworI2VuZGlmIC8qX0lQNlRfUEhZU0RFVl9IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9ydC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjEwNzBmYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9ydC5oCkBAIC0wLDAgKzEsNDIgQEAKKyNpZm5kZWYgX0lQNlRfUlRfSAorI2RlZmluZSBfSVA2VF9SVF9ICisKKy8qI2luY2x1ZGUgPGxpbnV4L2luNi5oPiovCisKKyNkZWZpbmUgSVA2VF9SVF9IT1BTIDE2CisKK3N0cnVjdCBpcDZ0X3J0Cit7CisJdV9pbnQzMl90IHJ0X3R5cGU7CQkJLyogUm91dGluZyBUeXBlICovCisJdV9pbnQzMl90IHNlZ3NsZWZ0WzJdOwkJCS8qIFNlZ21lbnRzIExlZnQgKi8KKwl1X2ludDMyX3QgaGRybGVuOwkJCS8qIEhlYWRlciBMZW5ndGggKi8KKwl1X2ludDhfdCAgZmxhZ3M7CQkJLyogICovCisJdV9pbnQ4X3QgIGludmZsYWdzOwkJCS8qIEludmVyc2UgZmxhZ3MgKi8KKwlzdHJ1Y3QgaW42X2FkZHIgYWRkcnNbSVA2VF9SVF9IT1BTXTsJLyogSG9wcyAqLworCXVfaW50OF90IGFkZHJucjsJCQkvKiBOciBvZiBBZGRyZXNzZXMgKi8KK307CisKKyNkZWZpbmUgSVA2VF9SVF9UWVAgCQkweDAxCisjZGVmaW5lIElQNlRfUlRfU0dTIAkJMHgwMgorI2RlZmluZSBJUDZUX1JUX0xFTiAJCTB4MDQKKyNkZWZpbmUgSVA2VF9SVF9SRVMgCQkweDA4CisjZGVmaW5lIElQNlRfUlRfRlNUX01BU0sJMHgzMAorI2RlZmluZSBJUDZUX1JUX0ZTVCAJCTB4MTAKKyNkZWZpbmUgSVA2VF9SVF9GU1RfTlNUUklDVAkweDIwCisKKy8qIFZhbHVlcyBmb3IgImludmZsYWdzIiBmaWVsZCBpbiBzdHJ1Y3QgaXA2dF9ydC4gKi8KKyNkZWZpbmUgSVA2VF9SVF9JTlZfVFlQCQkweDAxCS8qIEludmVydCB0aGUgc2Vuc2Ugb2YgdHlwZS4gKi8KKyNkZWZpbmUgSVA2VF9SVF9JTlZfU0dTCQkweDAyCS8qIEludmVydCB0aGUgc2Vuc2Ugb2YgU2VnbWVudHMuICovCisjZGVmaW5lIElQNlRfUlRfSU5WX0xFTgkJMHgwNAkvKiBJbnZlcnQgdGhlIHNlbnNlIG9mIGxlbmd0aC4gKi8KKyNkZWZpbmUgSVA2VF9SVF9JTlZfTUFTSwkweDA3CS8qIEFsbCBwb3NzaWJsZSBmbGFncy4gKi8KKworI2RlZmluZSBNQVNLX0hPUE9QVFMgICAgMTI4CisjZGVmaW5lIE1BU0tfRFNUT1BUUyAgICA2NAorI2RlZmluZSBNQVNLX1JPVVRJTkcgICAgMzIKKyNkZWZpbmUgTUFTS19GUkFHTUVOVCAgIDE2CisjZGVmaW5lIE1BU0tfQUggICAgICAgICA4CisjZGVmaW5lIE1BU0tfRVNQICAgICAgICA0CisjZGVmaW5lIE1BU0tfTk9ORSAgICAgICAyCisjZGVmaW5lIE1BU0tfUFJPVE8gICAgICAxCisKKyNlbmRpZiAvKl9JUDZUX1JUX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfbG9nZ2luZy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfbG9nZ2luZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MmJiNmEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9sb2dnaW5nLmgKQEAgLTAsMCArMSwzMyBAQAorLyogSW50ZXJuYWwgbG9nZ2luZyBpbnRlcmZhY2UsIHdoaWNoIHJlbGllcyBvbiB0aGUgcmVhbCAKKyAgIExPRyB0YXJnZXQgbW9kdWxlcyAqLworI2lmbmRlZiBfX0xJTlVYX05FVEZJTFRFUl9MT0dHSU5HX0gKKyNkZWZpbmUgX19MSU5VWF9ORVRGSUxURVJfTE9HR0lOR19ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorCitzdHJ1Y3QgbmZfbG9nZ2luZ190IHsKKwl2b2lkICgqbmZfbG9nX3BhY2tldCkoc3RydWN0IHNrX2J1ZmYgKipwc2tiLAorCQkJICAgICAgdW5zaWduZWQgaW50IGhvb2tudW0sCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAorCQkJICAgICAgY29uc3QgY2hhciAqcHJlZml4KTsKKwl2b2lkICgqbmZfbG9nKShjaGFyICpwZmgsIHNpemVfdCBsZW4sCisJCSAgICAgICBjb25zdCBjaGFyICpwcmVmaXgpOworfTsKKworZXh0ZXJuIHZvaWQgbmZfbG9nX3JlZ2lzdGVyKGludCBwZiwgY29uc3Qgc3RydWN0IG5mX2xvZ2dpbmdfdCAqbG9nZ2luZyk7CitleHRlcm4gdm9pZCBuZl9sb2dfdW5yZWdpc3RlcihpbnQgcGYsIGNvbnN0IHN0cnVjdCBuZl9sb2dnaW5nX3QgKmxvZ2dpbmcpOworCitleHRlcm4gdm9pZCBuZl9sb2dfcGFja2V0KGludCBwZiwKKwkJCSAgc3RydWN0IHNrX2J1ZmYgKipwc2tiLAorCQkJICB1bnNpZ25lZCBpbnQgaG9va251bSwKKwkJCSAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAorCQkJICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAorCQkJICBjb25zdCBjaGFyICpmbXQsIC4uLik7CitleHRlcm4gdm9pZCBuZl9sb2coaW50IHBmLAorCQkgICBjaGFyICpwZmgsIHNpemVfdCBsZW4sCisJCSAgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKKyNlbmRpZiAvKl9fS0VSTkVMX18qLworCisjZW5kaWYgLypfX0xJTlVYX05FVEZJTFRFUl9MT0dHSU5HX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRsaW5rLmggYi9pbmNsdWRlL2xpbnV4L25ldGxpbmsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzMxYWJkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZXRsaW5rLmgKQEAgLTAsMCArMSwxODggQEAKKyNpZm5kZWYgX19MSU5VWF9ORVRMSU5LX0gKKyNkZWZpbmUgX19MSU5VWF9ORVRMSU5LX0gKKworI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPiAvKiBmb3Igc2FfZmFtaWx5X3QgKi8KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjZGVmaW5lIE5FVExJTktfUk9VVEUJCTAJLyogUm91dGluZy9kZXZpY2UgaG9vawkJCQkqLworI2RlZmluZSBORVRMSU5LX1NLSVAJCTEJLyogUmVzZXJ2ZWQgZm9yIEVOc2tpcCAgCQkJKi8KKyNkZWZpbmUgTkVUTElOS19VU0VSU09DSwkyCS8qIFJlc2VydmVkIGZvciB1c2VyIG1vZGUgc29ja2V0IHByb3RvY29scyAJKi8KKyNkZWZpbmUgTkVUTElOS19GSVJFV0FMTAkzCS8qIEZpcmV3YWxsaW5nIGhvb2sJCQkJKi8KKyNkZWZpbmUgTkVUTElOS19UQ1BESUFHCQk0CS8qIFRDUCBzb2NrZXQgbW9uaXRvcmluZwkJCSovCisjZGVmaW5lIE5FVExJTktfTkZMT0cJCTUJLyogbmV0ZmlsdGVyL2lwdGFibGVzIFVMT0cgKi8KKyNkZWZpbmUgTkVUTElOS19YRlJNCQk2CS8qIGlwc2VjICovCisjZGVmaW5lIE5FVExJTktfU0VMSU5VWAkJNwkvKiBTRUxpbnV4IGV2ZW50IG5vdGlmaWNhdGlvbnMgKi8KKyNkZWZpbmUgTkVUTElOS19BUlBECQk4CisjZGVmaW5lIE5FVExJTktfQVVESVQJCTkJLyogYXVkaXRpbmcgKi8KKyNkZWZpbmUgTkVUTElOS19ST1VURTYJCTExCS8qIGFmX2luZXQ2IHJvdXRlIGNvbW0gY2hhbm5lbCAqLworI2RlZmluZSBORVRMSU5LX0lQNl9GVwkJMTMKKyNkZWZpbmUgTkVUTElOS19ETlJUTVNHCQkxNAkvKiBERUNuZXQgcm91dGluZyBtZXNzYWdlcyAqLworI2RlZmluZSBORVRMSU5LX0tPQkpFQ1RfVUVWRU5UCTE1CS8qIEtlcm5lbCBtZXNzYWdlcyB0byB1c2Vyc3BhY2UgKi8KKyNkZWZpbmUgTkVUTElOS19UQVBCQVNFCQkxNgkvKiAxNiB0byAzMSBhcmUgZXRoZXJ0YXAgKi8KKworI2RlZmluZSBNQVhfTElOS1MgMzIJCQorCitzdHJ1Y3Qgc29ja2FkZHJfbmwKK3sKKwlzYV9mYW1pbHlfdAlubF9mYW1pbHk7CS8qIEFGX05FVExJTksJKi8KKwl1bnNpZ25lZCBzaG9ydAlubF9wYWQ7CQkvKiB6ZXJvCQkqLworCV9fdTMyCQlubF9waWQ7CQkvKiBwcm9jZXNzIHBpZAkqLworICAgICAgIAlfX3UzMgkJbmxfZ3JvdXBzOwkvKiBtdWx0aWNhc3QgZ3JvdXBzIG1hc2sgKi8KK307CisKK3N0cnVjdCBubG1zZ2hkcgoreworCV9fdTMyCQlubG1zZ19sZW47CS8qIExlbmd0aCBvZiBtZXNzYWdlIGluY2x1ZGluZyBoZWFkZXIgKi8KKwlfX3UxNgkJbmxtc2dfdHlwZTsJLyogTWVzc2FnZSBjb250ZW50ICovCisJX191MTYJCW5sbXNnX2ZsYWdzOwkvKiBBZGRpdGlvbmFsIGZsYWdzICovCisJX191MzIJCW5sbXNnX3NlcTsJLyogU2VxdWVuY2UgbnVtYmVyICovCisJX191MzIJCW5sbXNnX3BpZDsJLyogU2VuZGluZyBwcm9jZXNzIFBJRCAqLworfTsKKworLyogRmxhZ3MgdmFsdWVzICovCisKKyNkZWZpbmUgTkxNX0ZfUkVRVUVTVAkJMQkvKiBJdCBpcyByZXF1ZXN0IG1lc3NhZ2UuIAkqLworI2RlZmluZSBOTE1fRl9NVUxUSQkJMgkvKiBNdWx0aXBhcnQgbWVzc2FnZSwgdGVybWluYXRlZCBieSBOTE1TR19ET05FICovCisjZGVmaW5lIE5MTV9GX0FDSwkJNAkvKiBSZXBseSB3aXRoIGFjaywgd2l0aCB6ZXJvIG9yIGVycm9yIGNvZGUgKi8KKyNkZWZpbmUgTkxNX0ZfRUNITwkJOAkvKiBFY2hvIHRoaXMgcmVxdWVzdCAJCSovCisKKy8qIE1vZGlmaWVycyB0byBHRVQgcmVxdWVzdCAqLworI2RlZmluZSBOTE1fRl9ST09UCTB4MTAwCS8qIHNwZWNpZnkgdHJlZQlyb290CSovCisjZGVmaW5lIE5MTV9GX01BVENICTB4MjAwCS8qIHJldHVybiBhbGwgbWF0Y2hpbmcJKi8KKyNkZWZpbmUgTkxNX0ZfQVRPTUlDCTB4NDAwCS8qIGF0b21pYyBHRVQJCSovCisjZGVmaW5lIE5MTV9GX0RVTVAJKE5MTV9GX1JPT1R8TkxNX0ZfTUFUQ0gpCisKKy8qIE1vZGlmaWVycyB0byBORVcgcmVxdWVzdCAqLworI2RlZmluZSBOTE1fRl9SRVBMQUNFCTB4MTAwCS8qIE92ZXJyaWRlIGV4aXN0aW5nCQkqLworI2RlZmluZSBOTE1fRl9FWENMCTB4MjAwCS8qIERvIG5vdCB0b3VjaCwgaWYgaXQgZXhpc3RzCSovCisjZGVmaW5lIE5MTV9GX0NSRUFURQkweDQwMAkvKiBDcmVhdGUsIGlmIGl0IGRvZXMgbm90IGV4aXN0CSovCisjZGVmaW5lIE5MTV9GX0FQUEVORAkweDgwMAkvKiBBZGQgdG8gZW5kIG9mIGxpc3QJCSovCisKKy8qCisgICA0LjRCU0QgQURECQlOTE1fRl9DUkVBVEV8TkxNX0ZfRVhDTAorICAgNC40QlNEIENIQU5HRQlOTE1fRl9SRVBMQUNFCisKKyAgIFRydWUgQ0hBTkdFCQlOTE1fRl9DUkVBVEV8TkxNX0ZfUkVQTEFDRQorICAgQXBwZW5kCQlOTE1fRl9DUkVBVEUKKyAgIENoZWNrCQlOTE1fRl9FWENMCisgKi8KKworI2RlZmluZSBOTE1TR19BTElHTlRPCTQKKyNkZWZpbmUgTkxNU0dfQUxJR04obGVuKSAoICgobGVuKStOTE1TR19BTElHTlRPLTEpICYgfihOTE1TR19BTElHTlRPLTEpICkKKyNkZWZpbmUgTkxNU0dfTEVOR1RIKGxlbikgKChsZW4pK05MTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3Qgbmxtc2doZHIpKSkKKyNkZWZpbmUgTkxNU0dfU1BBQ0UobGVuKSBOTE1TR19BTElHTihOTE1TR19MRU5HVEgobGVuKSkKKyNkZWZpbmUgTkxNU0dfREFUQShubGgpICAoKHZvaWQqKSgoKGNoYXIqKW5saCkgKyBOTE1TR19MRU5HVEgoMCkpKQorI2RlZmluZSBOTE1TR19ORVhUKG5saCxsZW4pCSAoKGxlbikgLT0gTkxNU0dfQUxJR04oKG5saCktPm5sbXNnX2xlbiksIFwKKwkJCQkgIChzdHJ1Y3Qgbmxtc2doZHIqKSgoKGNoYXIqKShubGgpKSArIE5MTVNHX0FMSUdOKChubGgpLT5ubG1zZ19sZW4pKSkKKyNkZWZpbmUgTkxNU0dfT0sobmxoLGxlbikgKChsZW4pID49IChpbnQpc2l6ZW9mKHN0cnVjdCBubG1zZ2hkcikgJiYgXAorCQkJICAgKG5saCktPm5sbXNnX2xlbiA+PSBzaXplb2Yoc3RydWN0IG5sbXNnaGRyKSAmJiBcCisJCQkgICAobmxoKS0+bmxtc2dfbGVuIDw9IChsZW4pKQorI2RlZmluZSBOTE1TR19QQVlMT0FEKG5saCxsZW4pICgobmxoKS0+bmxtc2dfbGVuIC0gTkxNU0dfU1BBQ0UoKGxlbikpKQorCisjZGVmaW5lIE5MTVNHX05PT1AJCTB4MQkvKiBOb3RoaW5nLgkJKi8KKyNkZWZpbmUgTkxNU0dfRVJST1IJCTB4MgkvKiBFcnJvcgkJKi8KKyNkZWZpbmUgTkxNU0dfRE9ORQkJMHgzCS8qIEVuZCBvZiBhIGR1bXAJKi8KKyNkZWZpbmUgTkxNU0dfT1ZFUlJVTgkJMHg0CS8qIERhdGEgbG9zdAkJKi8KKworc3RydWN0IG5sbXNnZXJyCit7CisJaW50CQllcnJvcjsKKwlzdHJ1Y3Qgbmxtc2doZHIgbXNnOworfTsKKworI2RlZmluZSBORVRfTUFKT1IgMzYJCS8qIE1ham9yIDM2IGlzIHJlc2VydmVkIGZvciBuZXR3b3JraW5nIAkJCQkJCSovCisKK2VudW0geworCU5FVExJTktfVU5DT05ORUNURUQgPSAwLAorCU5FVExJTktfQ09OTkVDVEVELAorfTsKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKworc3RydWN0IG5ldGxpbmtfc2tiX3Bhcm1zCit7CisJc3RydWN0IHVjcmVkCQljcmVkczsJCS8qIFNrYiBjcmVkZW50aWFscwkqLworCV9fdTMyCQkJcGlkOworCV9fdTMyCQkJZ3JvdXBzOworCV9fdTMyCQkJZHN0X3BpZDsKKwlfX3UzMgkJCWRzdF9ncm91cHM7CisJa2VybmVsX2NhcF90CQllZmZfY2FwOworfTsKKworI2RlZmluZSBORVRMSU5LX0NCKHNrYikJCSgqKHN0cnVjdCBuZXRsaW5rX3NrYl9wYXJtcyopJigoc2tiKS0+Y2IpKQorI2RlZmluZSBORVRMSU5LX0NSRURTKHNrYikJKCZORVRMSU5LX0NCKChza2IpKS5jcmVkcykKKworCitleHRlcm4gc3RydWN0IHNvY2sgKm5ldGxpbmtfa2VybmVsX2NyZWF0ZShpbnQgdW5pdCwgdm9pZCAoKmlucHV0KShzdHJ1Y3Qgc29jayAqc2ssIGludCBsZW4pKTsKK2V4dGVybiB2b2lkIG5ldGxpbmtfYWNrKHN0cnVjdCBza19idWZmICppbl9za2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLCBpbnQgZXJyKTsKK2V4dGVybiBpbnQgbmV0bGlua191bmljYXN0KHN0cnVjdCBzb2NrICpzc2ssIHN0cnVjdCBza19idWZmICpza2IsIF9fdTMyIHBpZCwgaW50IG5vbmJsb2NrKTsKK2V4dGVybiBpbnQgbmV0bGlua19icm9hZGNhc3Qoc3RydWN0IHNvY2sgKnNzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgX191MzIgcGlkLAorCQkJICAgICBfX3UzMiBncm91cCwgaW50IGFsbG9jYXRpb24pOworZXh0ZXJuIHZvaWQgbmV0bGlua19zZXRfZXJyKHN0cnVjdCBzb2NrICpzc2ssIF9fdTMyIHBpZCwgX191MzIgZ3JvdXAsIGludCBjb2RlKTsKK2V4dGVybiBpbnQgbmV0bGlua19yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTsKK2V4dGVybiBpbnQgbmV0bGlua191bnJlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpOworCisvKiBmaW5lZ3JhaW5lZCB1bmljYXN0IGhlbHBlcnM6ICovCitzdHJ1Y3Qgc29jayAqbmV0bGlua19nZXRzb2NrYnlmaWxwKHN0cnVjdCBmaWxlICpmaWxwKTsKK2ludCBuZXRsaW5rX2F0dGFjaHNrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsIGludCBub25ibG9jaywgbG9uZyB0aW1lbyk7Cit2b2lkIG5ldGxpbmtfZGV0YWNoc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitpbnQgbmV0bGlua19zZW5kc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHByb3RvY29sKTsKKworLyoKKyAqCXNrYiBzaG91bGQgZml0IG9uZSBwYWdlLiBUaGlzIGNob2ljZSBpcyBnb29kIGZvciBoZWFkZXJsZXNzIG1hbGxvYy4KKyAqLworI2RlZmluZSBOTE1TR19HT09ET1JERVIgMAorI2RlZmluZSBOTE1TR19HT09EU0laRSAoU0tCX01BWF9PUkRFUigwLCBOTE1TR19HT09ET1JERVIpKQorCisKK3N0cnVjdCBuZXRsaW5rX2NhbGxiYWNrCit7CisJc3RydWN0IHNrX2J1ZmYJKnNrYjsKKwlzdHJ1Y3Qgbmxtc2doZHIJKm5saDsKKwlpbnQJCSgqZHVtcCkoc3RydWN0IHNrX2J1ZmYgKiBza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7CisJaW50CQkoKmRvbmUpKHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7CisJaW50CQlmYW1pbHk7CisJbG9uZwkJYXJnc1s0XTsKK307CisKK3N0cnVjdCBuZXRsaW5rX25vdGlmeQoreworCWludCBwaWQ7CisJaW50IHByb3RvY29sOworfTsKKworc3RhdGljIF9faW5saW5lX18gc3RydWN0IG5sbXNnaGRyICoKK19fbmxtc2dfcHV0KHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsIGludCB0eXBlLCBpbnQgbGVuKQoreworCXN0cnVjdCBubG1zZ2hkciAqbmxoOworCWludCBzaXplID0gTkxNU0dfTEVOR1RIKGxlbik7CisKKwlubGggPSAoc3RydWN0IG5sbXNnaGRyKilza2JfcHV0KHNrYiwgTkxNU0dfQUxJR04oc2l6ZSkpOworCW5saC0+bmxtc2dfdHlwZSA9IHR5cGU7CisJbmxoLT5ubG1zZ19sZW4gPSBzaXplOworCW5saC0+bmxtc2dfZmxhZ3MgPSAwOworCW5saC0+bmxtc2dfcGlkID0gcGlkOworCW5saC0+bmxtc2dfc2VxID0gc2VxOworCXJldHVybiBubGg7Cit9CisKKyNkZWZpbmUgTkxNU0dfUFVUKHNrYiwgcGlkLCBzZXEsIHR5cGUsIGxlbikgXAorKHsgaWYgKHNrYl90YWlscm9vbShza2IpIDwgKGludClOTE1TR19TUEFDRShsZW4pKSBnb3RvIG5sbXNnX2ZhaWx1cmU7IFwKKyAgIF9fbmxtc2dfcHV0KHNrYiwgcGlkLCBzZXEsIHR5cGUsIGxlbik7IH0pCisKK2V4dGVybiBpbnQgbmV0bGlua19kdW1wX3N0YXJ0KHN0cnVjdCBzb2NrICpzc2ssIHN0cnVjdCBza19idWZmICpza2IsCisJCQkgICAgICBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKKwkJCSAgICAgIGludCAoKmR1bXApKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrKiksCisJCQkgICAgICBpbnQgKCpkb25lKShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayopKTsKKworCisjZGVmaW5lIE5MX05PTlJPT1RfUkVDViAweDEKKyNkZWZpbmUgTkxfTk9OUk9PVF9TRU5EIDB4MgorZXh0ZXJuIHZvaWQgbmV0bGlua19zZXRfbm9ucm9vdChpbnQgcHJvdG9jb2wsIHVuc2lnbmVkIGZsYWcpOworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYJLyogX19MSU5VWF9ORVRMSU5LX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oIGIvaW5jbHVkZS9saW51eC9uZXRwb2xsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBkOGI5MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb21tb24gY29kZSBmb3IgbG93LWxldmVsIG5ldHdvcmsgY29uc29sZSwgZHVtcCwgYW5kIGRlYnVnZ2VyIGNvZGUKKyAqCisgKiBEZXJpdmVkIGZyb20gbmV0Y29uc29sZSwga2dkYi1vdmVyLWV0aGVybmV0LCBhbmQgbmV0ZHVtcCBwYXRjaGVzCisgKi8KKworI2lmbmRlZiBfTElOVVhfTkVUUE9MTF9ICisjZGVmaW5lIF9MSU5VWF9ORVRQT0xMX0gKKworI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKworc3RydWN0IG5ldHBvbGw7CisKK3N0cnVjdCBuZXRwb2xsIHsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCWNoYXIgZGV2X25hbWVbMTZdLCAqbmFtZTsKKwlpbnQgcnhfZmxhZ3M7CisJdm9pZCAoKnJ4X2hvb2spKHN0cnVjdCBuZXRwb2xsICosIGludCwgY2hhciAqLCBpbnQpOworCXZvaWQgKCpkcm9wKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKwl1MzIgbG9jYWxfaXAsIHJlbW90ZV9pcDsKKwl1MTYgbG9jYWxfcG9ydCwgcmVtb3RlX3BvcnQ7CisJdW5zaWduZWQgY2hhciBsb2NhbF9tYWNbNl0sIHJlbW90ZV9tYWNbNl07CisJc3BpbmxvY2tfdCBwb2xsX2xvY2s7CisJaW50IHBvbGxfb3duZXI7Cit9OworCit2b2lkIG5ldHBvbGxfcG9sbChzdHJ1Y3QgbmV0cG9sbCAqbnApOwordm9pZCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRwb2xsICpucCwgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuKTsKK2ludCBuZXRwb2xsX3BhcnNlX29wdGlvbnMoc3RydWN0IG5ldHBvbGwgKm5wLCBjaGFyICpvcHQpOworaW50IG5ldHBvbGxfc2V0dXAoc3RydWN0IG5ldHBvbGwgKm5wKTsKK2ludCBuZXRwb2xsX3RyYXAodm9pZCk7Cit2b2lkIG5ldHBvbGxfc2V0X3RyYXAoaW50IHRyYXApOwordm9pZCBuZXRwb2xsX2NsZWFudXAoc3RydWN0IG5ldHBvbGwgKm5wKTsKK2ludCBfX25ldHBvbGxfcngoc3RydWN0IHNrX2J1ZmYgKnNrYik7Cit2b2lkIG5ldHBvbGxfcXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKKyNpZmRlZiBDT05GSUdfTkVUUE9MTAorc3RhdGljIGlubGluZSBpbnQgbmV0cG9sbF9yeChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXJldHVybiBza2ItPmRldi0+bnAgJiYgc2tiLT5kZXYtPm5wLT5yeF9mbGFncyAmJiBfX25ldHBvbGxfcngoc2tiKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG5ldHBvbGxfcG9sbF9sb2NrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJaWYgKGRldi0+bnApIHsKKwkJc3Bpbl9sb2NrKCZkZXYtPm5wLT5wb2xsX2xvY2spOworCQlkZXYtPm5wLT5wb2xsX293bmVyID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIG5ldHBvbGxfcG9sbF91bmxvY2soc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlpZiAoZGV2LT5ucCkgeworCQlzcGluX3VubG9jaygmZGV2LT5ucC0+cG9sbF9sb2NrKTsKKwkJZGV2LT5ucC0+cG9sbF9vd25lciA9IC0xOworCX0KK30KKworI2Vsc2UKKyNkZWZpbmUgbmV0cG9sbF9yeChhKSAwCisjZGVmaW5lIG5ldHBvbGxfcG9sbF9sb2NrKGEpCisjZGVmaW5lIG5ldHBvbGxfcG9sbF91bmxvY2soYSkKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0cm9tLmggYi9pbmNsdWRlL2xpbnV4L25ldHJvbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5MzliMzIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L25ldHJvbS5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBUaGVzZSBhcmUgdGhlIHB1YmxpYyBlbGVtZW50cyBvZiB0aGUgTGludXgga2VybmVsIE5FVC9ST00gaW1wbGVtZW50YXRpb24uCisgKiBGb3Iga2VybmVsIEFYLjI1IHNlZSB0aGUgZmlsZSBheDI1LmguIFRoaXMgZmlsZSByZXF1aXJlcyBheDI1LmggZm9yIHRoZQorICogZGVmaW5pdGlvbiBvZiB0aGUgYXgyNV9hZGRyZXNzIHN0cnVjdHVyZS4KKyAqLworCisjaWZuZGVmCU5FVFJPTV9LRVJORUxfSAorI2RlZmluZQlORVRST01fS0VSTkVMX0gKKworI2RlZmluZSBORVRST01fTVRVCTIzNgorCisjZGVmaW5lIE5FVFJPTV9UMQkxCisjZGVmaW5lIE5FVFJPTV9UMgkyCisjZGVmaW5lIE5FVFJPTV9OMgkzCisjZGVmaW5lCU5FVFJPTV9UNAk2CisjZGVmaW5lCU5FVFJPTV9JRExFCTcKKworI2RlZmluZQlTSU9DTlJERUNPQlMJCShTSU9DUFJPVE9QUklWQVRFKzIpCisKK3N0cnVjdCBucl9yb3V0ZV9zdHJ1Y3QgeworI2RlZmluZQlORVRST01fTkVJR0gJMAorI2RlZmluZQlORVRST01fTk9ERQkxCisJaW50CQl0eXBlOworCWF4MjVfYWRkcmVzcwljYWxsc2lnbjsKKwljaGFyCQlkZXZpY2VbMTZdOworCXVuc2lnbmVkIGludAlxdWFsaXR5OworCWNoYXIJCW1uZW1vbmljWzddOworCWF4MjVfYWRkcmVzcwluZWlnaGJvdXI7CisJdW5zaWduZWQgaW50CW9ic19jb3VudDsKKwl1bnNpZ25lZCBpbnQJbmRpZ2lzOworCWF4MjVfYWRkcmVzcwlkaWdpcGVhdGVyc1tBWDI1X01BWF9ESUdJU107Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzLmggYi9pbmNsdWRlL2xpbnV4L25mcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhMmZmYTYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L25mcy5oCkBAIC0wLDAgKzEsMTcxIEBACisvKgorICogTkZTIHByb3RvY29sIGRlZmluaXRpb25zCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIGNvbnN0YW50cyBtb3N0bHkgZm9yIFZlcnNpb24gMiBvZiB0aGUgcHJvdG9jb2wsCisgKiBidXQgYWxzbyBoYXMgYSBjb3VwbGUgb2YgTkZTdjMgYml0cyBpbiAobm90YWJseSB0aGUgZXJyb3IgY29kZXMpLgorICovCisjaWZuZGVmIF9MSU5VWF9ORlNfSAorI2RlZmluZSBfTElOVVhfTkZTX0gKKworI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9tc2dfcHJvdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorCisjZGVmaW5lIE5GU19QUk9HUkFNCTEwMDAwMworI2RlZmluZSBORlNfUE9SVAkyMDQ5CisjZGVmaW5lIE5GU19NQVhEQVRBCTgxOTIKKyNkZWZpbmUgTkZTX01BWFBBVEhMRU4JMTAyNAorI2RlZmluZSBORlNfTUFYTkFNTEVOCTI1NQorI2RlZmluZSBORlNfTUFYR1JPVVBTCTE2CisjZGVmaW5lIE5GU19GSFNJWkUJMzIKKyNkZWZpbmUgTkZTX0NPT0tJRVNJWkUJNAorI2RlZmluZSBORlNfRklGT19ERVYJKC0xKQorI2RlZmluZSBORlNNT0RFX0ZNVAkwMTcwMDAwCisjZGVmaW5lIE5GU01PREVfRElSCTAwNDAwMDAKKyNkZWZpbmUgTkZTTU9ERV9DSFIJMDAyMDAwMAorI2RlZmluZSBORlNNT0RFX0JMSwkwMDYwMDAwCisjZGVmaW5lIE5GU01PREVfUkVHCTAxMDAwMDAKKyNkZWZpbmUgTkZTTU9ERV9MTksJMDEyMDAwMAorI2RlZmluZSBORlNNT0RFX1NPQ0sJMDE0MDAwMAorI2RlZmluZSBORlNNT0RFX0ZJRk8JMDAxMDAwMAorCisjZGVmaW5lIE5GU19NTlRfUFJPR1JBTQkxMDAwMDUKKyNkZWZpbmUgTkZTX01OVF9QT1JUCTYyNworCisvKgorICogTkZTIHN0YXRzLiBUaGUgZ29vZCB0aGluZyB3aXRoIHRoZXNlIHZhbHVlcyBpcyB0aGF0IE5GU3YzIGVycm9ycyBhcmUKKyAqIGEgc3VwZXJzZXQgb2YgTkZTdjIgZXJyb3JzICh3aXRoIHRoZSBleGNlcHRpb24gb2YgTkZTRVJSX1dGTFVTSCB3aGljaAorICogbm8tb25lIHVzZXMgYW55d2F5KSwgc28gd2UgY2FuIGhhcHBpbHkgbWl4IGNvZGUgYXMgbG9uZyBhcyB3ZSBtYWtlIHN1cmUKKyAqIG5vIE5GU3YzIGVycm9ycyBhcmUgcmV0dXJuZWQgdG8gTkZTdjIgY2xpZW50cy4KKyAqIEVycm9yIGNvZGVzIHRoYXQgaGF2ZSBhIGAtLScgaW4gdGhlIHYyIGNvbHVtbiBhcmUgbm90IHBhcnQgb2YgdGhlCisgKiBzdGFuZGFyZCwgYnV0IHNlZW0gdG8gYmUgd2lkZWx5IHVzZWQgbmV2ZXJ0aGVsZXNzLgorICovCisgZW51bSBuZnNfc3RhdCB7CisJTkZTX09LID0gMCwJCQkvKiB2MiB2MyB2NCAqLworCU5GU0VSUl9QRVJNID0gMSwJCS8qIHYyIHYzIHY0ICovCisJTkZTRVJSX05PRU5UID0gMiwJCS8qIHYyIHYzIHY0ICovCisJTkZTRVJSX0lPID0gNSwJCQkvKiB2MiB2MyB2NCAqLworCU5GU0VSUl9OWElPID0gNiwJCS8qIHYyIHYzIHY0ICovCisJTkZTRVJSX0VBR0FJTiA9IDExLAkJLyogdjIgdjMgKi8KKwlORlNFUlJfQUNDRVMgPSAxMywJCS8qIHYyIHYzIHY0ICovCisJTkZTRVJSX0VYSVNUID0gMTcsCQkvKiB2MiB2MyB2NCAqLworCU5GU0VSUl9YREVWID0gMTgsCQkvKiAgICB2MyB2NCAqLworCU5GU0VSUl9OT0RFViA9IDE5LAkJLyogdjIgdjMgdjQgKi8KKwlORlNFUlJfTk9URElSID0gMjAsCQkvKiB2MiB2MyB2NCAqLworCU5GU0VSUl9JU0RJUiA9IDIxLAkJLyogdjIgdjMgdjQgKi8KKwlORlNFUlJfSU5WQUwgPSAyMiwJCS8qIHYyIHYzIHY0ICovCisJTkZTRVJSX0ZCSUcgPSAyNywJCS8qIHYyIHYzIHY0ICovCisJTkZTRVJSX05PU1BDID0gMjgsCQkvKiB2MiB2MyB2NCAqLworCU5GU0VSUl9ST0ZTID0gMzAsCQkvKiB2MiB2MyB2NCAqLworCU5GU0VSUl9NTElOSyA9IDMxLAkJLyogICAgdjMgdjQgKi8KKwlORlNFUlJfT1BOT1RTVVBQID0gNDUsCQkvKiB2MiB2MyAqLworCU5GU0VSUl9OQU1FVE9PTE9ORyA9IDYzLAkvKiB2MiB2MyB2NCAqLworCU5GU0VSUl9OT1RFTVBUWSA9IDY2LAkJLyogdjIgdjMgdjQgKi8KKwlORlNFUlJfRFFVT1QgPSA2OSwJCS8qIHYyIHYzIHY0ICovCisJTkZTRVJSX1NUQUxFID0gNzAsCQkvKiB2MiB2MyB2NCAqLworCU5GU0VSUl9SRU1PVEUgPSA3MSwJCS8qIHYyIHYzICovCisJTkZTRVJSX1dGTFVTSCA9IDk5LAkJLyogdjIgICAgKi8KKwlORlNFUlJfQkFESEFORExFID0gMTAwMDEsCS8qICAgIHYzIHY0ICovCisJTkZTRVJSX05PVF9TWU5DID0gMTAwMDIsCS8qICAgIHYzICovCisJTkZTRVJSX0JBRF9DT09LSUUgPSAxMDAwMywJLyogICAgdjMgdjQgKi8KKwlORlNFUlJfTk9UU1VQUCA9IDEwMDA0LAkJLyogICAgdjMgdjQgKi8KKwlORlNFUlJfVE9PU01BTEwgPSAxMDAwNSwJLyogICAgdjMgdjQgKi8KKwlORlNFUlJfU0VSVkVSRkFVTFQgPSAxMDAwNiwJLyogICAgdjMgdjQgKi8KKwlORlNFUlJfQkFEVFlQRSA9IDEwMDA3LAkJLyogICAgdjMgdjQgKi8KKwlORlNFUlJfSlVLRUJPWCA9IDEwMDA4LAkJLyogICAgdjMgdjQgKi8KKwlORlNFUlJfU0FNRSA9IDEwMDA5LAkJLyogICAgICAgdjQgKi8KKwlORlNFUlJfREVOSUVEID0gMTAwMTAsCQkvKiAgICAgICB2NCAqLworCU5GU0VSUl9FWFBJUkVEID0gMTAwMTEsCQkvKiAgICAgICB2NCAqLworCU5GU0VSUl9MT0NLRUQgPSAxMDAxMiwJCS8qICAgICAgIHY0ICovCisJTkZTRVJSX0dSQUNFID0gMTAwMTMsCQkvKiAgICAgICB2NCAqLworCU5GU0VSUl9GSEVYUElSRUQgPSAxMDAxNCwJLyogICAgICAgdjQgKi8KKwlORlNFUlJfU0hBUkVfREVOSUVEID0gMTAwMTUsCS8qICAgICAgIHY0ICovCisJTkZTRVJSX1dST05HU0VDID0gMTAwMTYsCS8qICAgICAgIHY0ICovCisJTkZTRVJSX0NMSURfSU5VU0UgPSAxMDAxNywJLyogICAgICAgdjQgKi8KKwlORlNFUlJfUkVTT1VSQ0UgPSAxMDAxOCwJLyogICAgICAgdjQgKi8KKwlORlNFUlJfTU9WRUQgPSAxMDAxOSwJCS8qICAgICAgIHY0ICovCisJTkZTRVJSX05PRklMRUhBTkRMRSA9IDEwMDIwLAkvKiAgICAgICB2NCAqLworCU5GU0VSUl9NSU5PUl9WRVJTX01JU01BVENIID0gMTAwMjEsICAgLyogdjQgKi8KKwlORlNFUlJfU1RBTEVfQ0xJRU5USUQgPSAxMDAyMiwJLyogICAgICAgdjQgKi8KKwlORlNFUlJfU1RBTEVfU1RBVEVJRCA9IDEwMDIzLCAgIC8qICAgICAgIHY0ICovCisJTkZTRVJSX09MRF9TVEFURUlEID0gMTAwMjQsICAgICAvKiAgICAgICB2NCAqLworCU5GU0VSUl9CQURfU1RBVEVJRCA9IDEwMDI1LCAgICAgLyogICAgICAgdjQgKi8gIAorCU5GU0VSUl9CQURfU0VRSUQgPSAxMDAyNiwJLyogICAgICAgdjQgKi8KKwlORlNFUlJfTk9UX1NBTUUgPSAxMDAyNywJLyogICAgICAgdjQgKi8KKwlORlNFUlJfTE9DS19SQU5HRSA9IDEwMDI4LAkvKiAgICAgICB2NCAqLworCU5GU0VSUl9TWU1MSU5LID0gMTAwMjksCQkvKiAgICAgICB2NCAqLworCU5GU0VSUl9SRVNUT1JFRkggPSAxMDAzMCwJLyogICAgICAgdjQgKi8KKwlORlNFUlJfTEVBU0VfTU9WRUQgPSAxMDAzMSwJLyogICAgICAgdjQgKi8KKwlORlNFUlJfQVRUUk5PVFNVUFAgPSAxMDAzMiwJLyogICAgICAgdjQgKi8KKwlORlNFUlJfTk9fR1JBQ0UgPSAxMDAzMywJLyogICAgICAgdjQgKi8KKwlORlNFUlJfUkVDTEFJTV9CQUQgPSAxMDAzNCwJLyogICAgICAgdjQgKi8KKwlORlNFUlJfUkVDTEFJTV9DT05GTElDVCA9IDEwMDM1LC8qICAgICAgIHY0ICovCisJTkZTRVJSX0JBRF9YRFIgPSAxMDAzNiwJCS8qICAgICAgIHY0ICovCisJTkZTRVJSX0xPQ0tTX0hFTEQgPSAxMDAzNywJLyogICAgICAgdjQgKi8KKwlORlNFUlJfT1BFTk1PREUgPSAxMDAzOCwgICAgICAgLyogICAgICAgdjQgKi8KKwlORlNFUlJfQkFET1dORVIgPSAxMDAzOSwgICAgICAgLyogICAgICAgdjQgKi8KKwlORlNFUlJfQkFEQ0hBUiA9IDEwMDQwLCAgICAgICAgLyogICAgICAgdjQgKi8KKwlORlNFUlJfQkFETkFNRSA9IDEwMDQxLCAgICAgICAgLyogICAgICAgdjQgKi8KKwlORlNFUlJfQkFEX1JBTkdFID0gMTAwNDIsICAgICAgLyogICAgICAgdjQgKi8KKwlORlNFUlJfTE9DS19OT1RTVVBQID0gMTAwNDMsICAgLyogICAgICAgdjQgKi8KKwlORlNFUlJfT1BfSUxMRUdBTCA9IDEwMDQ0LCAgICAgLyogICAgICAgdjQgKi8KKwlORlNFUlJfREVBRExPQ0sgPSAxMDA0NSwgICAgICAgLyogICAgICAgdjQgKi8KKwlORlNFUlJfRklMRV9PUEVOID0gMTAwNDYsICAgICAgLyogICAgICAgdjQgKi8KKwlORlNFUlJfQURNSU5fUkVWT0tFRCA9IDEwMDQ3LCAgLyogICAgICAgdjQgKi8KKwlORlNFUlJfQ0JfUEFUSF9ET1dOID0gMTAwNDgsICAgLyogICAgICAgdjQgKi8KKwlORlNFUlJfUkVQTEFZX01FID0gMTAwNDkJLyogICAgICAgdjQgKi8KK307CisKKy8qIE5GU3YyIGZpbGUgdHlwZXMgLSBiZXdhcmUsIHRoZXNlIGFyZSBub3QgdGhlIHNhbWUgaW4gTkZTdjMgKi8KKworZW51bSBuZnNfZnR5cGUgeworCU5GTk9OID0gMCwKKwlORlJFRyA9IDEsCisJTkZESVIgPSAyLAorCU5GQkxLID0gMywKKwlORkNIUiA9IDQsCisJTkZMTksgPSA1LAorCU5GU09DSyA9IDYsCisJTkZCQUQgPSA3LAorCU5GRklGTyA9IDgKK307CisKKyNpZiBkZWZpbmVkKF9fS0VSTkVMX18pCisvKgorICogVGhpcyBpcyB0aGUga2VybmVsIE5GUyBjbGllbnQgZmlsZSBoYW5kbGUgcmVwcmVzZW50YXRpb24KKyAqLworI2RlZmluZSBORlNfTUFYRkhTSVpFCQkxMjgKK3N0cnVjdCBuZnNfZmggeworCXVuc2lnbmVkIHNob3J0CQlzaXplOworCXVuc2lnbmVkIGNoYXIJCWRhdGFbTkZTX01BWEZIU0laRV07Cit9OworCisvKgorICogUmV0dXJucyBhIHplcm8gaWZmIHRoZSBzaXplIGFuZCBkYXRhIGZpZWxkcyBtYXRjaC4KKyAqIENoZWNrcyBvbmx5ICJzaXplIiBieXRlcyBpbiB0aGUgZGF0YSBmaWVsZC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgbmZzX2NvbXBhcmVfZmgoY29uc3Qgc3RydWN0IG5mc19maCAqYSwgY29uc3Qgc3RydWN0IG5mc19maCAqYikKK3sKKwlyZXR1cm4gYS0+c2l6ZSAhPSBiLT5zaXplIHx8IG1lbWNtcChhLT5kYXRhLCBiLT5kYXRhLCBhLT5zaXplKSAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbmZzX2NvcHlfZmgoc3RydWN0IG5mc19maCAqdGFyZ2V0LCBjb25zdCBzdHJ1Y3QgbmZzX2ZoICpzb3VyY2UpCit7CisJdGFyZ2V0LT5zaXplID0gc291cmNlLT5zaXplOworCW1lbWNweSh0YXJnZXQtPmRhdGEsIHNvdXJjZS0+ZGF0YSwgc291cmNlLT5zaXplKTsKK30KKworCisvKgorICogVGhpcyBpcyByZWFsbHkgYSBnZW5lcmFsIGtlcm5lbCBjb25zdGFudCwgYnV0IHNpbmNlIG5vdGhpbmcgbGlrZQorICogdGhpcyBpcyBkZWZpbmVkIGluIHRoZSBrZXJuZWwgaGVhZGVycywgSSBoYXZlIHRvIGRvIGl0IGhlcmUuCisgKi8KKyNkZWZpbmUgTkZTX09GRlNFVF9NQVgJCSgoX19zNjQpKCh+KF9fdTY0KTApID4+IDEpKQorCisKK2VudW0gbmZzM19zdGFibGVfaG93IHsKKwlORlNfVU5TVEFCTEUgPSAwLAorCU5GU19EQVRBX1NZTkMgPSAxLAorCU5GU19GSUxFX1NZTkMgPSAyCit9OworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAvKiBfTElOVVhfTkZTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzMi5oIGIvaW5jbHVkZS9saW51eC9uZnMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGVkOTUxNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmZzMi5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBORlMgcHJvdG9jb2wgZGVmaW5pdGlvbnMKKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgY29uc3RhbnRzIGZvciBWZXJzaW9uIDIgb2YgdGhlIHByb3RvY29sLgorICovCisjaWZuZGVmIF9MSU5VWF9ORlMyX0gKKyNkZWZpbmUgX0xJTlVYX05GUzJfSAorCisjZGVmaW5lIE5GUzJfUE9SVAkyMDQ5CisjZGVmaW5lIE5GUzJfTUFYREFUQQk4MTkyCisjZGVmaW5lIE5GUzJfTUFYUEFUSExFTgkxMDI0CisjZGVmaW5lIE5GUzJfTUFYTkFNTEVOCTI1NQorI2RlZmluZSBORlMyX01BWEdST1VQUwkxNgorI2RlZmluZSBORlMyX0ZIU0laRQkzMgorI2RlZmluZSBORlMyX0NPT0tJRVNJWkUJNAorI2RlZmluZSBORlMyX0ZJRk9fREVWCSgtMSkKKyNkZWZpbmUgTkZTMk1PREVfRk1UCTAxNzAwMDAKKyNkZWZpbmUgTkZTMk1PREVfRElSCTAwNDAwMDAKKyNkZWZpbmUgTkZTMk1PREVfQ0hSCTAwMjAwMDAKKyNkZWZpbmUgTkZTMk1PREVfQkxLCTAwNjAwMDAKKyNkZWZpbmUgTkZTMk1PREVfUkVHCTAxMDAwMDAKKyNkZWZpbmUgTkZTMk1PREVfTE5LCTAxMjAwMDAKKyNkZWZpbmUgTkZTMk1PREVfU09DSwkwMTQwMDAwCisjZGVmaW5lIE5GUzJNT0RFX0ZJRk8JMDAxMDAwMAorCisKKy8qIE5GU3YyIGZpbGUgdHlwZXMgLSBiZXdhcmUsIHRoZXNlIGFyZSBub3QgdGhlIHNhbWUgaW4gTkZTdjMgKi8KK2VudW0gbmZzMl9mdHlwZSB7CisJTkYyTk9OID0gMCwKKwlORjJSRUcgPSAxLAorCU5GMkRJUiA9IDIsCisJTkYyQkxLID0gMywKKwlORjJDSFIgPSA0LAorCU5GMkxOSyA9IDUsCisJTkYyU09DSyA9IDYsCisJTkYyQkFEID0gNywKKwlORjJGSUZPID0gOAorfTsKKworc3RydWN0IG5mczJfZmggeworCWNoYXIJCQlkYXRhW05GUzJfRkhTSVpFXTsKK307CisKKy8qCisgKiBQcm9jZWR1cmUgbnVtYmVycyBmb3IgTkZTdjIKKyAqLworI2RlZmluZSBORlMyX1ZFUlNJT04JCTIKKyNkZWZpbmUgTkZTUFJPQ19OVUxMCQkwCisjZGVmaW5lIE5GU1BST0NfR0VUQVRUUgkJMQorI2RlZmluZSBORlNQUk9DX1NFVEFUVFIJCTIKKyNkZWZpbmUgTkZTUFJPQ19ST09UCQkzCisjZGVmaW5lIE5GU1BST0NfTE9PS1VQCQk0CisjZGVmaW5lIE5GU1BST0NfUkVBRExJTksJNQorI2RlZmluZSBORlNQUk9DX1JFQUQJCTYKKyNkZWZpbmUgTkZTUFJPQ19XUklURUNBQ0hFCTcKKyNkZWZpbmUgTkZTUFJPQ19XUklURQkJOAorI2RlZmluZSBORlNQUk9DX0NSRUFURQkJOQorI2RlZmluZSBORlNQUk9DX1JFTU9WRQkJMTAKKyNkZWZpbmUgTkZTUFJPQ19SRU5BTUUJCTExCisjZGVmaW5lIE5GU1BST0NfTElOSwkJMTIKKyNkZWZpbmUgTkZTUFJPQ19TWU1MSU5LCQkxMworI2RlZmluZSBORlNQUk9DX01LRElSCQkxNAorI2RlZmluZSBORlNQUk9DX1JNRElSCQkxNQorI2RlZmluZSBORlNQUk9DX1JFQURESVIJCTE2CisjZGVmaW5lIE5GU1BST0NfU1RBVEZTCQkxNworCisjZGVmaW5lIE5GU19NTlRfUFJPR1JBTQkJMTAwMDA1CisjZGVmaW5lIE5GU19NTlRfVkVSU0lPTgkJMQorI2RlZmluZSBNTlRQUk9DX05VTEwJCTAKKyNkZWZpbmUgTU5UUFJPQ19NTlQJCTEKKyNkZWZpbmUgTU5UUFJPQ19VTU5UCQkzCisjZGVmaW5lIE1OVFBST0NfVU1OVEFMTAkJNAorCisjZW5kaWYgLyogX0xJTlVYX05GUzJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZnMzLmggYi9pbmNsdWRlL2xpbnV4L25mczMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjExZmE1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZnMzLmgKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiBORlN2MyBwcm90b2NvbCBkZWZpbml0aW9ucworICovCisjaWZuZGVmIF9MSU5VWF9ORlMzX0gKKyNkZWZpbmUgX0xJTlVYX05GUzNfSAorCisjZGVmaW5lIE5GUzNfUE9SVAkJMjA0OQorI2RlZmluZSBORlMzX01BWERBVEEJCTMyNzY4CisjZGVmaW5lIE5GUzNfTUFYUEFUSExFTgkJUEFUSF9NQVgKKyNkZWZpbmUgTkZTM19NQVhOQU1MRU4JCU5BTUVfTUFYCisjZGVmaW5lIE5GUzNfTUFYR1JPVVBTCQkxNgorI2RlZmluZSBORlMzX0ZIU0laRQkJNjQKKyNkZWZpbmUgTkZTM19DT09LSUVTSVpFCQk0CisjZGVmaW5lIE5GUzNfRklGT19ERVYJCSgtMSkKKyNkZWZpbmUgTkZTM01PREVfRk1UCQkwMTcwMDAwCisjZGVmaW5lIE5GUzNNT0RFX0RJUgkJMDA0MDAwMAorI2RlZmluZSBORlMzTU9ERV9DSFIJCTAwMjAwMDAKKyNkZWZpbmUgTkZTM01PREVfQkxLCQkwMDYwMDAwCisjZGVmaW5lIE5GUzNNT0RFX1JFRwkJMDEwMDAwMAorI2RlZmluZSBORlMzTU9ERV9MTksJCTAxMjAwMDAKKyNkZWZpbmUgTkZTM01PREVfU09DSwkJMDE0MDAwMAorI2RlZmluZSBORlMzTU9ERV9GSUZPCQkwMDEwMDAwCisKKy8qIEZsYWdzIGZvciBhY2Nlc3MoKSBjYWxsICovCisjZGVmaW5lIE5GUzNfQUNDRVNTX1JFQUQJMHgwMDAxCisjZGVmaW5lIE5GUzNfQUNDRVNTX0xPT0tVUAkweDAwMDIKKyNkZWZpbmUgTkZTM19BQ0NFU1NfTU9ESUZZCTB4MDAwNAorI2RlZmluZSBORlMzX0FDQ0VTU19FWFRFTkQJMHgwMDA4CisjZGVmaW5lIE5GUzNfQUNDRVNTX0RFTEVURQkweDAwMTAKKyNkZWZpbmUgTkZTM19BQ0NFU1NfRVhFQ1VURQkweDAwMjAKKyNkZWZpbmUgTkZTM19BQ0NFU1NfRlVMTAkweDAwM2YKKworLyogRmxhZ3MgZm9yIGNyZWF0ZSBtb2RlICovCitlbnVtIG5mczNfY3JlYXRlbW9kZSB7CisJTkZTM19DUkVBVEVfVU5DSEVDS0VEID0gMCwKKwlORlMzX0NSRUFURV9HVUFSREVEID0gMSwKKwlORlMzX0NSRUFURV9FWENMVVNJVkUgPSAyCit9OworCisvKiBORlN2MyBmaWxlIHN5c3RlbSBwcm9wZXJ0aWVzICovCisjZGVmaW5lIE5GUzNfRlNGX0xJTksJCTB4MDAwMQorI2RlZmluZSBORlMzX0ZTRl9TWU1MSU5LCTB4MDAwMgorI2RlZmluZSBORlMzX0ZTRl9IT01PR0VORU9VUwkweDAwMDgKKyNkZWZpbmUgTkZTM19GU0ZfQ0FOU0VUVElNRQkweDAwMTAKKy8qIFNvbWUgc2hvcnRoYW5kcy4gU2VlIGZzL25mc2QvbmZzM3Byb2MuYyAqLworI2RlZmluZSBORlMzX0ZTRl9ERUZBVUxUCTB4MDAxQgorI2RlZmluZSBORlMzX0ZTRl9CSUxMWUJPWQkweDAwMTgKKyNkZWZpbmUgTkZTM19GU0ZfUkVBRE9OTFkJMHgwMDA4CisKK2VudW0gbmZzM19mdHlwZSB7CisJTkYzTk9OICA9IDAsCisJTkYzUkVHICA9IDEsCisJTkYzRElSICA9IDIsCisJTkYzQkxLICA9IDMsCisJTkYzQ0hSICA9IDQsCisJTkYzTE5LICA9IDUsCisJTkYzU09DSyA9IDYsCisJTkYzRklGTyA9IDcsCS8qIGNoYW5nZWQgZnJvbSBORlN2MiAod2FzIDgpICovCisJTkYzQkFEICA9IDgKK307CisKK3N0cnVjdCBuZnMzX2ZoIHsKKwl1bnNpZ25lZCBzaG9ydCBzaXplOworCXVuc2lnbmVkIGNoYXIgIGRhdGFbTkZTM19GSFNJWkVdOworfTsKKworI2RlZmluZSBORlMzX1ZFUlNJT04JCTMKKyNkZWZpbmUgTkZTM1BST0NfTlVMTAkJMAorI2RlZmluZSBORlMzUFJPQ19HRVRBVFRSCTEKKyNkZWZpbmUgTkZTM1BST0NfU0VUQVRUUgkyCisjZGVmaW5lIE5GUzNQUk9DX0xPT0tVUAkJMworI2RlZmluZSBORlMzUFJPQ19BQ0NFU1MJCTQKKyNkZWZpbmUgTkZTM1BST0NfUkVBRExJTksJNQorI2RlZmluZSBORlMzUFJPQ19SRUFECQk2CisjZGVmaW5lIE5GUzNQUk9DX1dSSVRFCQk3CisjZGVmaW5lIE5GUzNQUk9DX0NSRUFURQkJOAorI2RlZmluZSBORlMzUFJPQ19NS0RJUgkJOQorI2RlZmluZSBORlMzUFJPQ19TWU1MSU5LCTEwCisjZGVmaW5lIE5GUzNQUk9DX01LTk9ECQkxMQorI2RlZmluZSBORlMzUFJPQ19SRU1PVkUJCTEyCisjZGVmaW5lIE5GUzNQUk9DX1JNRElSCQkxMworI2RlZmluZSBORlMzUFJPQ19SRU5BTUUJCTE0CisjZGVmaW5lIE5GUzNQUk9DX0xJTksJCTE1CisjZGVmaW5lIE5GUzNQUk9DX1JFQURESVIJMTYKKyNkZWZpbmUgTkZTM1BST0NfUkVBRERJUlBMVVMJMTcKKyNkZWZpbmUgTkZTM1BST0NfRlNTVEFUCQkxOAorI2RlZmluZSBORlMzUFJPQ19GU0lORk8JCTE5CisjZGVmaW5lIE5GUzNQUk9DX1BBVEhDT05GCTIwCisjZGVmaW5lIE5GUzNQUk9DX0NPTU1JVAkJMjEKKworI2RlZmluZSBORlNfTU5UM19QUk9HUkFNCTEwMDAwNQorI2RlZmluZSBORlNfTU5UM19WRVJTSU9OCTMKKyNkZWZpbmUgTU9VTlRQUk9DM19OVUxMCQkwCisjZGVmaW5lIE1PVU5UUFJPQzNfTU5UCQkxCisjZGVmaW5lIE1PVU5UUFJPQzNfVU1OVAkJMworI2RlZmluZSBNT1VOVFBST0MzX1VNTlRBTEwJNAorIAorCisjaWYgZGVmaW5lZChfX0tFUk5FTF9fKSB8fCBkZWZpbmVkKE5GU19ORUVEX0tFUk5FTF9UWVBFUykKKworLyogTnVtYmVyIG9mIDMyYml0IHdvcmRzIGluIHBvc3Rfb3BfYXR0ciAqLworI2RlZmluZSBORlMzX1BPU1RfT1BfQVRUUl9XT1JEUwkJMjIKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAvKiBfTElOVVhfTkZTM19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mczQuaCBiL2luY2x1ZGUvbGludXgvbmZzNC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjYThhOGQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L25mczQuaApAQCAtMCwwICsxLDM5NCBAQAorLyoKKyAqICBpbmNsdWRlL2xpbnV4L25mczQuaAorICoKKyAqICBORlN2NCBwcm90b2NvbCBkZWZpbml0aW9ucy4KKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDAyIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIE1pY2hpZ2FuLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIEtlbmRyaWNrIFNtaXRoIDxrbXNtaXRoQHVtaWNoLmVkdT4KKyAqICBBbmR5IEFkYW1zb24gICA8YW5kcm9zQHVtaWNoLmVkdT4KKyAqLworCisjaWZuZGVmIF9MSU5VWF9ORlM0X0gKKyNkZWZpbmUgX0xJTlVYX05GUzRfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisKKyNkZWZpbmUgTkZTNF9WRVJJRklFUl9TSVpFCTgKKyNkZWZpbmUgTkZTNF9GSFNJWkUJCTEyOAorI2RlZmluZSBORlM0X01BWFBBVEhMRU4JCVBBVEhfTUFYCisjZGVmaW5lIE5GUzRfTUFYTkFNTEVOCQlOQU1FX01BWAorCisjZGVmaW5lIE5GUzRfQUNDRVNTX1JFQUQgICAgICAgIDB4MDAwMQorI2RlZmluZSBORlM0X0FDQ0VTU19MT09LVVAgICAgICAweDAwMDIKKyNkZWZpbmUgTkZTNF9BQ0NFU1NfTU9ESUZZICAgICAgMHgwMDA0CisjZGVmaW5lIE5GUzRfQUNDRVNTX0VYVEVORCAgICAgIDB4MDAwOAorI2RlZmluZSBORlM0X0FDQ0VTU19ERUxFVEUgICAgICAweDAwMTAKKyNkZWZpbmUgTkZTNF9BQ0NFU1NfRVhFQ1VURSAgICAgMHgwMDIwCisKKyNkZWZpbmUgTkZTNF9GSF9QRVJJU1RFTlQJCTB4MDAwMAorI2RlZmluZSBORlM0X0ZIX05PRVhQSVJFX1dJVEhfT1BFTgkweDAwMDEKKyNkZWZpbmUgTkZTNF9GSF9WT0xBVElMRV9BTlkJCTB4MDAwMgorI2RlZmluZSBORlM0X0ZIX1ZPTF9NSUdSQVRJT04JCTB4MDAwNAorI2RlZmluZSBORlM0X0ZIX1ZPTF9SRU5BTUUJCTB4MDAwOAorCisjZGVmaW5lIE5GUzRfT1BFTl9SRVNVTFRfQ09ORklSTSAweDAwMDIKKyNkZWZpbmUgTkZTNF9PUEVOX1JFU1VMVF9MT0NLVFlQRV9QT1NJWCAweDAwMDQKKworI2RlZmluZSBORlM0X1NIQVJFX0FDQ0VTU19SRUFECTB4MDAwMQorI2RlZmluZSBORlM0X1NIQVJFX0FDQ0VTU19XUklURQkweDAwMDIKKyNkZWZpbmUgTkZTNF9TSEFSRV9BQ0NFU1NfQk9USAkweDAwMDMKKyNkZWZpbmUgTkZTNF9TSEFSRV9ERU5ZX1JFQUQJMHgwMDAxCisjZGVmaW5lIE5GUzRfU0hBUkVfREVOWV9XUklURQkweDAwMDIKKyNkZWZpbmUgTkZTNF9TSEFSRV9ERU5ZX0JPVEgJMHgwMDAzCisKKyNkZWZpbmUgTkZTNF9TRVRfVE9fU0VSVkVSX1RJTUUJMAorI2RlZmluZSBORlM0X1NFVF9UT19DTElFTlRfVElNRQkxCisKKyNkZWZpbmUgTkZTNF9BQ0VfQUNDRVNTX0FMTE9XRURfQUNFX1RZUEUgMAorI2RlZmluZSBORlM0X0FDRV9BQ0NFU1NfREVOSUVEX0FDRV9UWVBFICAxCisjZGVmaW5lIE5GUzRfQUNFX1NZU1RFTV9BVURJVF9BQ0VfVFlQRSAgIDIKKyNkZWZpbmUgTkZTNF9BQ0VfU1lTVEVNX0FMQVJNX0FDRV9UWVBFICAgMworCisjZGVmaW5lIEFDTDRfU1VQUE9SVF9BTExPV19BQ0wgMHgwMQorI2RlZmluZSBBQ0w0X1NVUFBPUlRfREVOWV9BQ0wgIDB4MDIKKyNkZWZpbmUgQUNMNF9TVVBQT1JUX0FVRElUX0FDTCAweDA0CisjZGVmaW5lIEFDTDRfU1VQUE9SVF9BTEFSTV9BQ0wgMHgwOAorCisjZGVmaW5lIE5GUzRfQUNFX0ZJTEVfSU5IRVJJVF9BQ0UgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBORlM0X0FDRV9ESVJFQ1RPUllfSU5IRVJJVF9BQ0UgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgTkZTNF9BQ0VfTk9fUFJPUEFHQVRFX0lOSEVSSVRfQUNFICAgICAweDAwMDAwMDA0CisjZGVmaW5lIE5GUzRfQUNFX0lOSEVSSVRfT05MWV9BQ0UgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBORlM0X0FDRV9TVUNDRVNTRlVMX0FDQ0VTU19BQ0VfRkxBRyAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgTkZTNF9BQ0VfRkFJTEVEX0FDQ0VTU19BQ0VfRkxBRyAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIE5GUzRfQUNFX0lERU5USUZJRVJfR1JPVVAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBORlM0X0FDRV9PV05FUiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgTkZTNF9BQ0VfR1JPVVAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIE5GUzRfQUNFX0VWRVJZT05FICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorCisjZGVmaW5lIE5GUzRfQUNFX1JFQURfREFUQSAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBORlM0X0FDRV9MSVNUX0RJUkVDVE9SWSAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgTkZTNF9BQ0VfV1JJVEVfREFUQSAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIE5GUzRfQUNFX0FERF9GSUxFICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBORlM0X0FDRV9BUFBFTkRfREFUQSAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgTkZTNF9BQ0VfQUREX1NVQkRJUkVDVE9SWSAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIE5GUzRfQUNFX1JFQURfTkFNRURfQVRUUlMgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBORlM0X0FDRV9XUklURV9OQU1FRF9BVFRSUyAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgTkZTNF9BQ0VfRVhFQ1VURSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIE5GUzRfQUNFX0RFTEVURV9DSElMRCAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBORlM0X0FDRV9SRUFEX0FUVFJJQlVURVMgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgTkZTNF9BQ0VfV1JJVEVfQVRUUklCVVRFUyAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIE5GUzRfQUNFX0RFTEVURSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBORlM0X0FDRV9SRUFEX0FDTCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgTkZTNF9BQ0VfV1JJVEVfQUNMICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIE5GUzRfQUNFX1dSSVRFX09XTkVSICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBORlM0X0FDRV9TWU5DSFJPTklaRSAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgTkZTNF9BQ0VfR0VORVJJQ19SRUFEICAgICAgICAgICAgICAgICAweDAwMTIwMDgxCisjZGVmaW5lIE5GUzRfQUNFX0dFTkVSSUNfV1JJVEUgICAgICAgICAgICAgICAgMHgwMDE2MDEwNgorI2RlZmluZSBORlM0X0FDRV9HRU5FUklDX0VYRUNVVEUgICAgICAgICAgICAgIDB4MDAxMjAwQTAKKyNkZWZpbmUgTkZTNF9BQ0VfTUFTS19BTEwgICAgICAgICAgICAgICAgICAgICAweDAwMUYwMUZGCisKK2VudW0gbmZzNF9hY2xfd2hvdHlwZSB7CisJTkZTNF9BQ0xfV0hPX05BTUVEID0gMCwKKwlORlM0X0FDTF9XSE9fT1dORVIsCisJTkZTNF9BQ0xfV0hPX0dST1VQLAorCU5GUzRfQUNMX1dIT19FVkVSWU9ORSwKK307CisKK3N0cnVjdCBuZnM0X2FjZSB7CisJdWludDMyX3QJdHlwZTsKKwl1aW50MzJfdAlmbGFnOworCXVpbnQzMl90CWFjY2Vzc19tYXNrOworCWludAkJd2hvdHlwZTsKKwl1aWRfdAkJd2hvOworCXN0cnVjdCBsaXN0X2hlYWQgbF9hY2U7Cit9OworCitzdHJ1Y3QgbmZzNF9hY2wgeworCXVpbnQzMl90CW5hY2VzOworCXN0cnVjdCBsaXN0X2hlYWQgYWNlX2hlYWQ7Cit9OworCit0eXBlZGVmIHN0cnVjdCB7IGNoYXIgZGF0YVtORlM0X1ZFUklGSUVSX1NJWkVdOyB9IG5mczRfdmVyaWZpZXI7Cit0eXBlZGVmIHN0cnVjdCB7IGNoYXIgZGF0YVsxNl07IH0gbmZzNF9zdGF0ZWlkOworCitlbnVtIG5mc19vcG51bTQgeworCU9QX0FDQ0VTUyA9IDMsCisJT1BfQ0xPU0UgPSA0LAorCU9QX0NPTU1JVCA9IDUsCisJT1BfQ1JFQVRFID0gNiwKKwlPUF9ERUxFR1BVUkdFID0gNywKKwlPUF9ERUxFR1JFVFVSTiA9IDgsCisJT1BfR0VUQVRUUiA9IDksCisJT1BfR0VURkggPSAxMCwKKwlPUF9MSU5LID0gMTEsCisJT1BfTE9DSyA9IDEyLAorCU9QX0xPQ0tUID0gMTMsCisJT1BfTE9DS1UgPSAxNCwKKwlPUF9MT09LVVAgPSAxNSwKKwlPUF9MT09LVVBQID0gMTYsCisJT1BfTlZFUklGWSA9IDE3LAorCU9QX09QRU4gPSAxOCwKKwlPUF9PUEVOQVRUUiA9IDE5LAorCU9QX09QRU5fQ09ORklSTSA9IDIwLAorCU9QX09QRU5fRE9XTkdSQURFID0gMjEsCisJT1BfUFVURkggPSAyMiwKKwlPUF9QVVRQVUJGSCA9IDIzLAorCU9QX1BVVFJPT1RGSCA9IDI0LAorCU9QX1JFQUQgPSAyNSwKKwlPUF9SRUFERElSID0gMjYsCisJT1BfUkVBRExJTksgPSAyNywKKwlPUF9SRU1PVkUgPSAyOCwKKwlPUF9SRU5BTUUgPSAyOSwKKwlPUF9SRU5FVyA9IDMwLAorCU9QX1JFU1RPUkVGSCA9IDMxLAorCU9QX1NBVkVGSCA9IDMyLAorCU9QX1NFQ0lORk8gPSAzMywKKwlPUF9TRVRBVFRSID0gMzQsCisJT1BfU0VUQ0xJRU5USUQgPSAzNSwKKwlPUF9TRVRDTElFTlRJRF9DT05GSVJNID0gMzYsCisJT1BfVkVSSUZZID0gMzcsCisJT1BfV1JJVEUgPSAzOCwKKwlPUF9SRUxFQVNFX0xPQ0tPV05FUiA9IDM5LAorCU9QX0lMTEVHQUwgPSAxMDA0NCwKK307CisKK2VudW0gbmZzc3RhdDQgeworCU5GUzRfT0sgPSAwLAorCU5GUzRFUlJfUEVSTSA9IDEsCisJTkZTNEVSUl9OT0VOVCA9IDIsCisJTkZTNEVSUl9JTyA9IDUsCisJTkZTNEVSUl9OWElPID0gNiwKKwlORlM0RVJSX0FDQ0VTUyA9IDEzLAorCU5GUzRFUlJfRVhJU1QgPSAxNywKKwlORlM0RVJSX1hERVYgPSAxOCwKKwkvKiBVbnVzZWQvcmVzZXJ2ZWQgMTkgKi8KKwlORlM0RVJSX05PVERJUiA9IDIwLAorCU5GUzRFUlJfSVNESVIgPSAyMSwKKwlORlM0RVJSX0lOVkFMID0gMjIsCisJTkZTNEVSUl9GQklHID0gMjcsCisJTkZTNEVSUl9OT1NQQyA9IDI4LAorCU5GUzRFUlJfUk9GUyA9IDMwLAorCU5GUzRFUlJfTUxJTksgPSAzMSwKKwlORlM0RVJSX05BTUVUT09MT05HID0gNjMsCisJTkZTNEVSUl9OT1RFTVBUWSA9IDY2LAorCU5GUzRFUlJfRFFVT1QgPSA2OSwKKwlORlM0RVJSX1NUQUxFID0gNzAsCisJTkZTNEVSUl9CQURIQU5ETEUgPSAxMDAwMSwKKwlORlM0RVJSX0JBRF9DT09LSUUgPSAxMDAwMywKKwlORlM0RVJSX05PVFNVUFAgPSAxMDAwNCwKKwlORlM0RVJSX1RPT1NNQUxMID0gMTAwMDUsCisJTkZTNEVSUl9TRVJWRVJGQVVMVCA9IDEwMDA2LAorCU5GUzRFUlJfQkFEVFlQRSA9IDEwMDA3LAorCU5GUzRFUlJfREVMQVkgPSAxMDAwOCwKKwlORlM0RVJSX1NBTUUgPSAxMDAwOSwKKwlORlM0RVJSX0RFTklFRCA9IDEwMDEwLAorCU5GUzRFUlJfRVhQSVJFRCA9IDEwMDExLAorCU5GUzRFUlJfTE9DS0VEID0gMTAwMTIsCisJTkZTNEVSUl9HUkFDRSA9IDEwMDEzLAorCU5GUzRFUlJfRkhFWFBJUkVEID0gMTAwMTQsCisJTkZTNEVSUl9TSEFSRV9ERU5JRUQgPSAxMDAxNSwKKwlORlM0RVJSX1dST05HU0VDID0gMTAwMTYsCisJTkZTNEVSUl9DTElEX0lOVVNFID0gMTAwMTcsCisJTkZTNEVSUl9SRVNPVVJDRSA9IDEwMDE4LAorCU5GUzRFUlJfTU9WRUQgPSAxMDAxOSwKKwlORlM0RVJSX05PRklMRUhBTkRMRSA9IDEwMDIwLAorCU5GUzRFUlJfTUlOT1JfVkVSU19NSVNNQVRDSCA9IDEwMDIxLAorCU5GUzRFUlJfU1RBTEVfQ0xJRU5USUQgPSAxMDAyMiwKKwlORlM0RVJSX1NUQUxFX1NUQVRFSUQgPSAxMDAyMywKKwlORlM0RVJSX09MRF9TVEFURUlEID0gMTAwMjQsCisJTkZTNEVSUl9CQURfU1RBVEVJRCA9IDEwMDI1LAorCU5GUzRFUlJfQkFEX1NFUUlEID0gMTAwMjYsCisJTkZTNEVSUl9OT1RfU0FNRSA9IDEwMDI3LAorCU5GUzRFUlJfTE9DS19SQU5HRSA9IDEwMDI4LAorCU5GUzRFUlJfU1lNTElOSyA9IDEwMDI5LAorCU5GUzRFUlJfUkVTVE9SRUZIID0gMTAwMzAsCisJTkZTNEVSUl9MRUFTRV9NT1ZFRCA9IDEwMDMxLAorCU5GUzRFUlJfQVRUUk5PVFNVUFAgPSAxMDAzMiwKKwlORlM0RVJSX05PX0dSQUNFID0gMTAwMzMsCisJTkZTNEVSUl9SRUNMQUlNX0JBRCA9IDEwMDM0LAorCU5GUzRFUlJfUkVDTEFJTV9DT05GTElDVCA9IDEwMDM1LAorCU5GUzRFUlJfQkFEWERSID0gMTAwMzYsCisJTkZTNEVSUl9MT0NLU19IRUxEID0gMTAwMzcsCisJTkZTNEVSUl9PUEVOTU9ERSA9IDEwMDM4LAorCU5GUzRFUlJfQkFET1dORVIgPSAxMDAzOSwKKwlORlM0RVJSX0JBRENIQVIgPSAxMDA0MCwKKwlORlM0RVJSX0JBRE5BTUUgPSAxMDA0MSwKKwlORlM0RVJSX0JBRF9SQU5HRSA9IDEwMDQyLAorCU5GUzRFUlJfTE9DS19OT1RTVVBQID0gMTAwNDMsCisJTkZTNEVSUl9PUF9JTExFR0FMID0gMTAwNDQsCisJTkZTNEVSUl9ERUFETE9DSyA9IDEwMDQ1LAorCU5GUzRFUlJfRklMRV9PUEVOID0gMTAwNDYsCisJTkZTNEVSUl9BRE1JTl9SRVZPS0VEID0gMTAwNDcsCisJTkZTNEVSUl9DQl9QQVRIX0RPV04gPSAxMDA0OAorfTsKKworLyoKKyAqIE5vdGU6IE5GNEJBRCBpcyBub3QgYWN0dWFsbHkgcGFydCBvZiB0aGUgcHJvdG9jb2w7IGl0IGlzIGp1c3QgdXNlZAorICogaW50ZXJuYWxseSBieSBuZnNkLgorICovCitlbnVtIG5mc19mdHlwZTQgeworCU5GNEJBRAkJPSAwLAorICAgICAgICBORjRSRUcgICAgICAgICAgPSAxLCAgICAvKiBSZWd1bGFyIEZpbGUgKi8KKyAgICAgICAgTkY0RElSICAgICAgICAgID0gMiwgICAgLyogRGlyZWN0b3J5ICovCisgICAgICAgIE5GNEJMSyAgICAgICAgICA9IDMsICAgIC8qIFNwZWNpYWwgRmlsZSAtIGJsb2NrIGRldmljZSAqLworICAgICAgICBORjRDSFIgICAgICAgICAgPSA0LCAgICAvKiBTcGVjaWFsIEZpbGUgLSBjaGFyYWN0ZXIgZGV2aWNlICovCisgICAgICAgIE5GNExOSyAgICAgICAgICA9IDUsICAgIC8qIFN5bWJvbGljIExpbmsgKi8KKyAgICAgICAgTkY0U09DSyAgICAgICAgID0gNiwgICAgLyogU3BlY2lhbCBGaWxlIC0gc29ja2V0ICovCisgICAgICAgIE5GNEZJRk8gICAgICAgICA9IDcsICAgIC8qIFNwZWNpYWwgRmlsZSAtIGZpZm8gKi8KKyAgICAgICAgTkY0QVRUUkRJUiAgICAgID0gOCwgICAgLyogQXR0cmlidXRlIERpcmVjdG9yeSAqLworICAgICAgICBORjROQU1FREFUVFIgICAgPSA5ICAgICAvKiBOYW1lZCBBdHRyaWJ1dGUgKi8KK307CisKK2VudW0gb3Blbl9jbGFpbV90eXBlNCB7CisJTkZTNF9PUEVOX0NMQUlNX05VTEwgPSAwLAorCU5GUzRfT1BFTl9DTEFJTV9QUkVWSU9VUyA9IDEsCisJTkZTNF9PUEVOX0NMQUlNX0RFTEVHQVRFX0NVUiA9IDIsCisJTkZTNF9PUEVOX0NMQUlNX0RFTEVHQVRFX1BSRVYgPSAzCit9OworCitlbnVtIG9wZW50eXBlNCB7CisJTkZTNF9PUEVOX05PQ1JFQVRFID0gMCwKKwlORlM0X09QRU5fQ1JFQVRFID0gMQorfTsKKworZW51bSBjcmVhdGVtb2RlNCB7CisJTkZTNF9DUkVBVEVfVU5DSEVDS0VEID0gMCwKKwlORlM0X0NSRUFURV9HVUFSREVEID0gMSwKKwlORlM0X0NSRUFURV9FWENMVVNJVkUgPSAyCit9OworCitlbnVtIGxpbWl0X2J5NCB7CisJTkZTNF9MSU1JVF9TSVpFID0gMSwKKwlORlM0X0xJTUlUX0JMT0NLUyA9IDIKK307CisKK2VudW0gb3Blbl9kZWxlZ2F0aW9uX3R5cGU0IHsKKwlORlM0X09QRU5fREVMRUdBVEVfTk9ORSA9IDAsCisJTkZTNF9PUEVOX0RFTEVHQVRFX1JFQUQgPSAxLAorCU5GUzRfT1BFTl9ERUxFR0FURV9XUklURSA9IDIKK307CisKK2VudW0gbG9ja190eXBlNCB7CisJTkZTNF9VTkxPQ0tfTFQgPSAwLAorCU5GUzRfUkVBRF9MVCA9IDEsCisJTkZTNF9XUklURV9MVCA9IDIsCisJTkZTNF9SRUFEV19MVCA9IDMsCisJTkZTNF9XUklURVdfTFQgPSA0Cit9OworCisKKy8qIE1hbmRhdG9yeSBBdHRyaWJ1dGVzICovCisjZGVmaW5lIEZBVFRSNF9XT1JEMF9TVVBQT1JURURfQVRUUlMgICAgKDFVTCA8PCAwKQorI2RlZmluZSBGQVRUUjRfV09SRDBfVFlQRSAgICAgICAgICAgICAgICgxVUwgPDwgMSkKKyNkZWZpbmUgRkFUVFI0X1dPUkQwX0ZIX0VYUElSRV9UWVBFICAgICAoMVVMIDw8IDIpCisjZGVmaW5lIEZBVFRSNF9XT1JEMF9DSEFOR0UgICAgICAgICAgICAgKDFVTCA8PCAzKQorI2RlZmluZSBGQVRUUjRfV09SRDBfU0laRSAgICAgICAgICAgICAgICgxVUwgPDwgNCkKKyNkZWZpbmUgRkFUVFI0X1dPUkQwX0xJTktfU1VQUE9SVCAgICAgICAoMVVMIDw8IDUpCisjZGVmaW5lIEZBVFRSNF9XT1JEMF9TWU1MSU5LX1NVUFBPUlQgICAgKDFVTCA8PCA2KQorI2RlZmluZSBGQVRUUjRfV09SRDBfTkFNRURfQVRUUiAgICAgICAgICgxVUwgPDwgNykKKyNkZWZpbmUgRkFUVFI0X1dPUkQwX0ZTSUQgICAgICAgICAgICAgICAoMVVMIDw8IDgpCisjZGVmaW5lIEZBVFRSNF9XT1JEMF9VTklRVUVfSEFORExFUyAgICAgKDFVTCA8PCA5KQorI2RlZmluZSBGQVRUUjRfV09SRDBfTEVBU0VfVElNRSAgICAgICAgICgxVUwgPDwgMTApCisjZGVmaW5lIEZBVFRSNF9XT1JEMF9SREFUVFJfRVJST1IgICAgICAgKDFVTCA8PCAxMSkKKworLyogUmVjb21tZW5kZWQgQXR0cmlidXRlcyAqLworI2RlZmluZSBGQVRUUjRfV09SRDBfQUNMICAgICAgICAgICAgICAgICgxVUwgPDwgMTIpCisjZGVmaW5lIEZBVFRSNF9XT1JEMF9BQ0xTVVBQT1JUICAgICAgICAgKDFVTCA8PCAxMykKKyNkZWZpbmUgRkFUVFI0X1dPUkQwX0FSQ0hJVkUgICAgICAgICAgICAoMVVMIDw8IDE0KQorI2RlZmluZSBGQVRUUjRfV09SRDBfQ0FOU0VUVElNRSAgICAgICAgICgxVUwgPDwgMTUpCisjZGVmaW5lIEZBVFRSNF9XT1JEMF9DQVNFX0lOU0VOU0lUSVZFICAgKDFVTCA8PCAxNikKKyNkZWZpbmUgRkFUVFI0X1dPUkQwX0NBU0VfUFJFU0VSVklORyAgICAoMVVMIDw8IDE3KQorI2RlZmluZSBGQVRUUjRfV09SRDBfQ0hPV05fUkVTVFJJQ1RFRCAgICgxVUwgPDwgMTgpCisjZGVmaW5lIEZBVFRSNF9XT1JEMF9GSUxFSEFORExFICAgICAgICAgKDFVTCA8PCAxOSkKKyNkZWZpbmUgRkFUVFI0X1dPUkQwX0ZJTEVJRCAgICAgICAgICAgICAoMVVMIDw8IDIwKQorI2RlZmluZSBGQVRUUjRfV09SRDBfRklMRVNfQVZBSUwgICAgICAgICgxVUwgPDwgMjEpCisjZGVmaW5lIEZBVFRSNF9XT1JEMF9GSUxFU19GUkVFICAgICAgICAgKDFVTCA8PCAyMikKKyNkZWZpbmUgRkFUVFI0X1dPUkQwX0ZJTEVTX1RPVEFMICAgICAgICAoMVVMIDw8IDIzKQorI2RlZmluZSBGQVRUUjRfV09SRDBfRlNfTE9DQVRJT05TICAgICAgICgxVUwgPDwgMjQpCisjZGVmaW5lIEZBVFRSNF9XT1JEMF9ISURERU4gICAgICAgICAgICAgKDFVTCA8PCAyNSkKKyNkZWZpbmUgRkFUVFI0X1dPUkQwX0hPTU9HRU5FT1VTICAgICAgICAoMVVMIDw8IDI2KQorI2RlZmluZSBGQVRUUjRfV09SRDBfTUFYRklMRVNJWkUgICAgICAgICgxVUwgPDwgMjcpCisjZGVmaW5lIEZBVFRSNF9XT1JEMF9NQVhMSU5LICAgICAgICAgICAgKDFVTCA8PCAyOCkKKyNkZWZpbmUgRkFUVFI0X1dPUkQwX01BWE5BTUUgICAgICAgICAgICAoMVVMIDw8IDI5KQorI2RlZmluZSBGQVRUUjRfV09SRDBfTUFYUkVBRCAgICAgICAgICAgICgxVUwgPDwgMzApCisjZGVmaW5lIEZBVFRSNF9XT1JEMF9NQVhXUklURSAgICAgICAgICAgKDFVTCA8PCAzMSkKKyNkZWZpbmUgRkFUVFI0X1dPUkQxX01JTUVUWVBFICAgICAgICAgICAoMVVMIDw8IDApCisjZGVmaW5lIEZBVFRSNF9XT1JEMV9NT0RFICAgICAgICAgICAgICAgKDFVTCA8PCAxKQorI2RlZmluZSBGQVRUUjRfV09SRDFfTk9fVFJVTkMgICAgICAgICAgICgxVUwgPDwgMikKKyNkZWZpbmUgRkFUVFI0X1dPUkQxX05VTUxJTktTICAgICAgICAgICAoMVVMIDw8IDMpCisjZGVmaW5lIEZBVFRSNF9XT1JEMV9PV05FUiAgICAgICAgICAgICAgKDFVTCA8PCA0KQorI2RlZmluZSBGQVRUUjRfV09SRDFfT1dORVJfR1JPVVAgICAgICAgICgxVUwgPDwgNSkKKyNkZWZpbmUgRkFUVFI0X1dPUkQxX1FVT1RBX0hBUkQgICAgICAgICAoMVVMIDw8IDYpCisjZGVmaW5lIEZBVFRSNF9XT1JEMV9RVU9UQV9TT0ZUICAgICAgICAgKDFVTCA8PCA3KQorI2RlZmluZSBGQVRUUjRfV09SRDFfUVVPVEFfVVNFRCAgICAgICAgICgxVUwgPDwgOCkKKyNkZWZpbmUgRkFUVFI0X1dPUkQxX1JBV0RFViAgICAgICAgICAgICAoMVVMIDw8IDkpCisjZGVmaW5lIEZBVFRSNF9XT1JEMV9TUEFDRV9BVkFJTCAgICAgICAgKDFVTCA8PCAxMCkKKyNkZWZpbmUgRkFUVFI0X1dPUkQxX1NQQUNFX0ZSRUUgICAgICAgICAoMVVMIDw8IDExKQorI2RlZmluZSBGQVRUUjRfV09SRDFfU1BBQ0VfVE9UQUwgICAgICAgICgxVUwgPDwgMTIpCisjZGVmaW5lIEZBVFRSNF9XT1JEMV9TUEFDRV9VU0VEICAgICAgICAgKDFVTCA8PCAxMykKKyNkZWZpbmUgRkFUVFI0X1dPUkQxX1NZU1RFTSAgICAgICAgICAgICAoMVVMIDw8IDE0KQorI2RlZmluZSBGQVRUUjRfV09SRDFfVElNRV9BQ0NFU1MgICAgICAgICgxVUwgPDwgMTUpCisjZGVmaW5lIEZBVFRSNF9XT1JEMV9USU1FX0FDQ0VTU19TRVQgICAgKDFVTCA8PCAxNikKKyNkZWZpbmUgRkFUVFI0X1dPUkQxX1RJTUVfQkFDS1VQICAgICAgICAoMVVMIDw8IDE3KQorI2RlZmluZSBGQVRUUjRfV09SRDFfVElNRV9DUkVBVEUgICAgICAgICgxVUwgPDwgMTgpCisjZGVmaW5lIEZBVFRSNF9XT1JEMV9USU1FX0RFTFRBICAgICAgICAgKDFVTCA8PCAxOSkKKyNkZWZpbmUgRkFUVFI0X1dPUkQxX1RJTUVfTUVUQURBVEEgICAgICAoMVVMIDw8IDIwKQorI2RlZmluZSBGQVRUUjRfV09SRDFfVElNRV9NT0RJRlkgICAgICAgICgxVUwgPDwgMjEpCisjZGVmaW5lIEZBVFRSNF9XT1JEMV9USU1FX01PRElGWV9TRVQgICAgKDFVTCA8PCAyMikKKyNkZWZpbmUgRkFUVFI0X1dPUkQxX01PVU5URURfT05fRklMRUlEICAoMVVMIDw8IDIzKQorCisjZGVmaW5lIE5GU1BST0M0X05VTEwgMAorI2RlZmluZSBORlNQUk9DNF9DT01QT1VORCAxCisjZGVmaW5lIE5GUzRfTUlOT1JfVkVSU0lPTiAwCisjZGVmaW5lIE5GUzRfREVCVUcgMQorCisjaWZkZWYgX19LRVJORUxfXworCisvKiBJbmRleCBvZiBwcmVkZWZpbmVkIExpbnV4IGNsaWVudCBvcGVyYXRpb25zICovCisKK2VudW0geworCU5GU1BST0M0X0NMTlRfTlVMTCA9IDAsCQkvKiBVbnVzZWQgKi8KKwlORlNQUk9DNF9DTE5UX1JFQUQsCisJTkZTUFJPQzRfQ0xOVF9XUklURSwKKwlORlNQUk9DNF9DTE5UX0NPTU1JVCwKKwlORlNQUk9DNF9DTE5UX09QRU4sCisJTkZTUFJPQzRfQ0xOVF9PUEVOX0NPTkZJUk0sCisJTkZTUFJPQzRfQ0xOVF9PUEVOX05PQVRUUiwKKwlORlNQUk9DNF9DTE5UX09QRU5fRE9XTkdSQURFLAorCU5GU1BST0M0X0NMTlRfQ0xPU0UsCisJTkZTUFJPQzRfQ0xOVF9TRVRBVFRSLAorCU5GU1BST0M0X0NMTlRfRlNJTkZPLAorCU5GU1BST0M0X0NMTlRfUkVORVcsCisJTkZTUFJPQzRfQ0xOVF9TRVRDTElFTlRJRCwKKwlORlNQUk9DNF9DTE5UX1NFVENMSUVOVElEX0NPTkZJUk0sCisJTkZTUFJPQzRfQ0xOVF9MT0NLLAorCU5GU1BST0M0X0NMTlRfTE9DS1QsCisJTkZTUFJPQzRfQ0xOVF9MT0NLVSwKKwlORlNQUk9DNF9DTE5UX0FDQ0VTUywKKwlORlNQUk9DNF9DTE5UX0dFVEFUVFIsCisJTkZTUFJPQzRfQ0xOVF9MT09LVVAsCisJTkZTUFJPQzRfQ0xOVF9MT09LVVBfUk9PVCwKKwlORlNQUk9DNF9DTE5UX1JFTU9WRSwKKwlORlNQUk9DNF9DTE5UX1JFTkFNRSwKKwlORlNQUk9DNF9DTE5UX0xJTkssCisJTkZTUFJPQzRfQ0xOVF9TWU1MSU5LLAorCU5GU1BST0M0X0NMTlRfQ1JFQVRFLAorCU5GU1BST0M0X0NMTlRfUEFUSENPTkYsCisJTkZTUFJPQzRfQ0xOVF9TVEFURlMsCisJTkZTUFJPQzRfQ0xOVF9SRUFETElOSywKKwlORlNQUk9DNF9DTE5UX1JFQURESVIsCisJTkZTUFJPQzRfQ0xOVF9TRVJWRVJfQ0FQUywKKwlORlNQUk9DNF9DTE5UX0RFTEVHUkVUVVJOLAorfTsKKworI2VuZGlmCisjZW5kaWYKKworLyoKKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqICBjLWJhc2ljLW9mZnNldDogOAorICogRW5kOgorICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mczRfYWNsLmggYi9pbmNsdWRlL2xpbnV4L25mczRfYWNsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJhZmY0ZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmZzNF9hY2wuaApAQCAtMCwwICsxLDU5IEBACisvKgorICogIGluY2x1ZGUvbGludXgvbmZzNF9hY2wuYworICoKKyAqICBDb21tb24gTkZTdjQgQUNMIGhhbmRsaW5nIGRlZmluaXRpb25zLgorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDIgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgTWljaGlnYW4uCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgTWFyaXVzIEFhbW9kdCBFcmlrc2VuIDxtYXJpdXNAdW1pY2guZWR1PgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqICBhcmUgbWV0OgorICoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisgKiAgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqICBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorICogIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAqICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICogIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTElOVVhfTkZTNF9BQ0xfSAorI2RlZmluZSBMSU5VWF9ORlM0X0FDTF9ICisKKyNpbmNsdWRlIDxsaW51eC9wb3NpeF9hY2wuaD4KKworc3RydWN0IG5mczRfYWNsICpuZnM0X2FjbF9uZXcodm9pZCk7Cit2b2lkIG5mczRfYWNsX2ZyZWUoc3RydWN0IG5mczRfYWNsICopOworaW50IG5mczRfYWNsX2FkZF9hY2Uoc3RydWN0IG5mczRfYWNsICosIHUzMiwgdTMyLCB1MzIsIGludCwgdWlkX3QpOworaW50IG5mczRfYWNsX2dldF93aG90eXBlKGNoYXIgKiwgdTMyKTsKK2ludCBuZnM0X2FjbF93cml0ZV93aG8oaW50IHdobywgY2hhciAqcCk7CitpbnQgbmZzNF9hY2xfcGVybWlzc2lvbihzdHJ1Y3QgbmZzNF9hY2wgKmFjbCwgdWlkX3Qgb3duZXIsIGdpZF90IGdyb3VwLAorCQkgICAgICAgICAgICAgICAgICAgICAgICB1aWRfdCB3aG8sIHUzMiBtYXNrKTsKKworI2RlZmluZSBORlM0X0FDTF9UWVBFX0RFRkFVTFQJMHgwMQorI2RlZmluZSBORlM0X0FDTF9ESVIJCTB4MDIKKyNkZWZpbmUgTkZTNF9BQ0xfT1dORVIJCTB4MDQKKworc3RydWN0IG5mczRfYWNsICpuZnM0X2FjbF9wb3NpeF90b19uZnN2NChzdHJ1Y3QgcG9zaXhfYWNsICosCisJCQkJc3RydWN0IHBvc2l4X2FjbCAqLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOworaW50IG5mczRfYWNsX25mc3Y0X3RvX3Bvc2l4KHN0cnVjdCBuZnM0X2FjbCAqLCBzdHJ1Y3QgcG9zaXhfYWNsICoqLAorCQkJCXN0cnVjdCBwb3NpeF9hY2wgKiosIHVuc2lnbmVkIGludCBmbGFncyk7CisKKyNlbmRpZiAvKiBMSU5VWF9ORlM0X0FDTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mczRfbW91bnQuaCBiL2luY2x1ZGUvbGludXgvbmZzNF9tb3VudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2YjRjODMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L25mczRfbW91bnQuaApAQCAtMCwwICsxLDcwIEBACisjaWZuZGVmIF9MSU5VWF9ORlM0X01PVU5UX0gKKyNkZWZpbmUgX0xJTlVYX05GUzRfTU9VTlRfSAorCisvKgorICogIGxpbnV4L2luY2x1ZGUvbGludXgvbmZzNF9tb3VudC5oCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMiAgVHJvbmQgTXlrbGVidXN0CisgKgorICogIHN0cnVjdHVyZSBwYXNzZWQgZnJvbSB1c2VyLXNwYWNlIHRvIGtlcm5lbC1zcGFjZSBkdXJpbmcgYW4gbmZzdjQgbW91bnQKKyAqLworCisvKgorICogV0FSTklORyEgIERvIG5vdCBkZWxldGUgb3IgY2hhbmdlIHRoZSBvcmRlciBvZiB0aGVzZSBmaWVsZHMuICBJZgorICogYSBuZXcgZmllbGQgaXMgcmVxdWlyZWQgdGhlbiBhZGQgaXQgdG8gdGhlIGVuZC4gIFRoZSB2ZXJzaW9uIGZpZWxkCisgKiB0cmFja3Mgd2hpY2ggZmllbGRzIGFyZSBwcmVzZW50LiAgVGhpcyB3aWxsIGVuc3VyZSBzb21lIG1lYXN1cmUgb2YKKyAqIG1vdW50LXRvLWtlcm5lbCB2ZXJzaW9uIGNvbXBhdGliaWxpdHkuICBTb21lIG9mIHRoZXNlIGFyZW4ndCB1c2VkIHlldAorICogYnV0IGhlcmUgdGhleSBhcmUgYW55d2F5LgorICovCisjZGVmaW5lIE5GUzRfTU9VTlRfVkVSU0lPTgkxCisKK3N0cnVjdCBuZnNfc3RyaW5nIHsKKwl1bnNpZ25lZCBpbnQgbGVuOworCWNvbnN0IGNoYXIgX191c2VyICogZGF0YTsKK307CisKK3N0cnVjdCBuZnM0X21vdW50X2RhdGEgeworCWludCB2ZXJzaW9uOwkJCQkvKiAxICovCisJaW50IGZsYWdzOwkJCQkvKiAxICovCisJaW50IHJzaXplOwkJCQkvKiAxICovCisJaW50IHdzaXplOwkJCQkvKiAxICovCisJaW50IHRpbWVvOwkJCQkvKiAxICovCisJaW50IHJldHJhbnM7CQkJCS8qIDEgKi8KKwlpbnQgYWNyZWdtaW47CQkJCS8qIDEgKi8KKwlpbnQgYWNyZWdtYXg7CQkJCS8qIDEgKi8KKwlpbnQgYWNkaXJtaW47CQkJCS8qIDEgKi8KKwlpbnQgYWNkaXJtYXg7CQkJCS8qIDEgKi8KKworCS8qIHNlZSB0aGUgZGVmaW5pdGlvbiBvZiAnc3RydWN0IGNsaWVudGFkZHI0JyBpbiBSRkMzMDEwICovCisJc3RydWN0IG5mc19zdHJpbmcgY2xpZW50X2FkZHI7CQkvKiAxICovCisKKwkvKiBNb3VudCBwYXRoICovCisJc3RydWN0IG5mc19zdHJpbmcgbW50X3BhdGg7CQkvKiAxICovCisKKwkvKiBTZXJ2ZXIgZGV0YWlscyAqLworCXN0cnVjdCBuZnNfc3RyaW5nIGhvc3RuYW1lOwkJLyogMSAqLworCS8qIFNlcnZlciBJUCBhZGRyZXNzICovCisJdW5zaWduZWQgaW50IGhvc3RfYWRkcmxlbjsJCS8qIDEgKi8KKwlzdHJ1Y3Qgc29ja2FkZHIgX191c2VyICogaG9zdF9hZGRyOwkvKiAxICovCisKKwkvKiBUcmFuc3BvcnQgcHJvdG9jb2wgdG8gdXNlICovCisJaW50IHByb3RvOwkJCQkvKiAxICovCisKKwkvKiBQc2V1ZG8tZmxhdm91cnMgdG8gdXNlIGZvciBhdXRoZW50aWNhdGlvbi4gU2VlIFJGQzI2MjMgKi8KKwlpbnQgYXV0aF9mbGF2b3VybGVuOwkJCS8qIDEgKi8KKwlpbnQgX191c2VyICphdXRoX2ZsYXZvdXJzOwkJLyogMSAqLworfTsKKworLyogYml0cyBpbiB0aGUgZmxhZ3MgZmllbGQgKi8KKy8qIE5vdGU6IHRoZSBmaWVsZHMgdGhhdCBjb3JyZXNwb25kIHRvIGV4aXN0aW5nIE5GU3YyL3YzIG1vdW50IG9wdGlvbnMKKyAqIAkgc2hvdWxkIG1pcnJvciB0aGUgdmFsdWVzIGZyb20gaW5jbHVkZS9saW51eC9uZnNfbW91bnQuaAorICovCisKKyNkZWZpbmUgTkZTNF9NT1VOVF9TT0ZUCQkweDAwMDEJLyogMSAqLworI2RlZmluZSBORlM0X01PVU5UX0lOVFIJCTB4MDAwMgkvKiAxICovCisjZGVmaW5lIE5GUzRfTU9VTlRfTk9DVE8JMHgwMDEwCS8qIDEgKi8KKyNkZWZpbmUgTkZTNF9NT1VOVF9OT0FDCQkweDAwMjAJLyogMSAqLworI2RlZmluZSBORlM0X01PVU5UX1NUUklDVExPQ0sJMHgxMDAwCS8qIDEgKi8KKyNkZWZpbmUgTkZTNF9NT1VOVF9GTEFHTUFTSwkweEZGRkYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mc19mcy5oIGIvaW5jbHVkZS9saW51eC9uZnNfZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmFjN2YzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZnNfZnMuaApAQCAtMCwwICsxLDc2NyBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2xpbnV4L25mc19mcy5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5MiAgUmljayBTbGFka2V5CisgKgorICogIE9TLXNwZWNpZmljIG5mcyBmaWxlc3lzdGVtIGRlZmluaXRpb25zIGFuZCBkZWNsYXJhdGlvbnMKKyAqLworCisjaWZuZGVmIF9MSU5VWF9ORlNfRlNfSAorI2RlZmluZSBfTElOVVhfTkZTX0ZTX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvdWlvLmg+CisKKyNpbmNsdWRlIDxsaW51eC9uZnNfZnNfc2IuaD4KKworI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9kZWJ1Zy5oPgorI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9hdXRoLmg+CisjaW5jbHVkZSA8bGludXgvc3VucnBjL2NsbnQuaD4KKworI2luY2x1ZGUgPGxpbnV4L25mcy5oPgorI2luY2x1ZGUgPGxpbnV4L25mczIuaD4KKyNpbmNsdWRlIDxsaW51eC9uZnMzLmg+CisjaW5jbHVkZSA8bGludXgvbmZzNC5oPgorI2luY2x1ZGUgPGxpbnV4L25mc194ZHIuaD4KKyNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L21lbXBvb2wuaD4KKworLyoKKyAqIEVuYWJsZSBkZWJ1Z2dpbmcgc3VwcG9ydCBmb3IgbmZzIGNsaWVudC4KKyAqIFJlcXVpcmVzIFJQQ19ERUJVRy4KKyAqLworI2lmZGVmIFJQQ19ERUJVRworIyBkZWZpbmUgTkZTX0RFQlVHCisjZW5kaWYKKworI2RlZmluZSBORlNfTUFYX0ZJTEVfSU9fQlVGRkVSX1NJWkUJMzI3NjgKKyNkZWZpbmUgTkZTX0RFRl9GSUxFX0lPX0JVRkZFUl9TSVpFCTQwOTYKKworLyoKKyAqIFRoZSB1cHBlciBsaW1pdCBvbiB0aW1lb3V0cyBmb3IgdGhlIGV4cG9uZW50aWFsIGJhY2tvZmYgYWxnb3JpdGhtLgorICovCisjZGVmaW5lIE5GU19XUklURUJBQ0tfREVMQVkJCSg1KkhaKQorI2RlZmluZSBORlNfV1JJVEVCQUNLX0xPQ0tERUxBWQkJKDYwKkhaKQorI2RlZmluZSBORlNfQ09NTUlUX0RFTEFZCQkoNSpIWikKKworLyoKKyAqIHN1cGVyYmxvY2sgbWFnaWMgbnVtYmVyIGZvciBORlMKKyAqLworI2RlZmluZSBORlNfU1VQRVJfTUFHSUMJCQkweDY5NjkKKworLyoKKyAqIFRoZXNlIGFyZSB0aGUgZGVmYXVsdCBmbGFncyBmb3Igc3dhcCByZXF1ZXN0cworICovCisjZGVmaW5lIE5GU19SUENfU1dBUEZMQUdTCQkoUlBDX1RBU0tfU1dBUFBFUnxSUENfVEFTS19ST09UQ1JFRFMpCisKKyNkZWZpbmUgTkZTX1JXX1NZTkMJCTB4MDAwMQkvKiBPX1NZTkMgaGFuZGxpbmcgKi8KKyNkZWZpbmUgTkZTX1JXX1NXQVAJCTB4MDAwMgkvKiBUaGlzIGlzIGEgc3dhcCByZXF1ZXN0ICovCisKKy8qCisgKiBXaGVuIGZsdXNoaW5nIGEgY2x1c3RlciBvZiBkaXJ0eSBwYWdlcywgdGhlcmUgY2FuIGJlIGRpZmZlcmVudAorICogc3RyYXRlZ2llczoKKyAqLworI2RlZmluZSBGTFVTSF9BR0lORwkJMAkvKiBvbmx5IGZsdXNoIG9sZCBidWZmZXJzICovCisjZGVmaW5lIEZMVVNIX1NZTkMJCTEJLyogZmlsZSBiZWluZyBzeW5jZWQsIG9yIGNvbnRlbnRpb24gKi8KKyNkZWZpbmUgRkxVU0hfV0FJVAkJMgkvKiB3YWl0IGZvciBjb21wbGV0aW9uICovCisjZGVmaW5lIEZMVVNIX1NUQUJMRQkJNAkvKiBjb21taXQgdG8gc3RhYmxlIHN0b3JhZ2UgKi8KKyNkZWZpbmUgRkxVU0hfTE9XUFJJCQk4CS8qIGxvdyBwcmlvcml0eSBiYWNrZ3JvdW5kIGZsdXNoICovCisjZGVmaW5lIEZMVVNIX0hJR0hQUkkJCTE2CS8qIGhpZ2ggcHJpb3JpdHkgbWVtb3J5IHJlY2xhaW0gZmx1c2ggKi8KKworI2lmZGVmIF9fS0VSTkVMX18KKworLyoKKyAqIE5GU3YzL3Y0IEFjY2VzcyBtb2RlIGNhY2hlIGVudHJ5CisgKi8KK3N0cnVjdCBuZnNfYWNjZXNzX2VudHJ5IHsKKwl1bnNpZ25lZCBsb25nCQlqaWZmaWVzOworCXN0cnVjdCBycGNfY3JlZCAqCWNyZWQ7CisJaW50CQkJbWFzazsKK307CisKK3N0cnVjdCBuZnM0X3N0YXRlOworc3RydWN0IG5mc19vcGVuX2NvbnRleHQgeworCWF0b21pY190IGNvdW50OworCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKKwlzdHJ1Y3QgcnBjX2NyZWQgKmNyZWQ7CisJc3RydWN0IG5mczRfc3RhdGUgKnN0YXRlOworCWZsX293bmVyX3QgbG9ja293bmVyOworCWludCBtb2RlOworCWludCBlcnJvcjsKKworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0cTsKK307CisKKy8qCisgKiBORlN2NCBkZWxlZ2F0aW9uCisgKi8KK3N0cnVjdCBuZnNfZGVsZWdhdGlvbjsKKworLyoKKyAqIG5mcyBmcyBpbm9kZSBkYXRhIGluIG1lbW9yeQorICovCitzdHJ1Y3QgbmZzX2lub2RlIHsKKwkvKgorCSAqIFRoZSA2NGJpdCAnaW5vZGUgbnVtYmVyJworCSAqLworCV9fdTY0IGZpbGVpZDsKKworCS8qCisJICogTkZTIGZpbGUgaGFuZGxlCisJICovCisJc3RydWN0IG5mc19maAkJZmg7CisKKwkvKgorCSAqIFZhcmlvdXMgZmxhZ3MKKwkgKi8KKwl1bnNpZ25lZCBpbnQJCWZsYWdzOworCisJLyoKKwkgKiByZWFkX2NhY2hlX2ppZmZpZXMgaXMgd2hlbiB3ZSBzdGFydGVkIHJlYWQtY2FjaGluZyB0aGlzIGlub2RlLAorCSAqIGFuZCByZWFkX2NhY2hlX210aW1lIGlzIHRoZSBtdGltZSBvZiB0aGUgaW5vZGUgYXQgdGhhdCB0aW1lLgorCSAqIGF0dHJ0aW1lbyBpcyBmb3IgaG93IGxvbmcgdGhlIGNhY2hlZCBpbmZvcm1hdGlvbiBpcyBhc3N1bWVkCisJICogdG8gYmUgdmFsaWQuIEEgc3VjY2Vzc2Z1bCBhdHRyaWJ1dGUgcmV2YWxpZGF0aW9uIGRvdWJsZXMKKwkgKiBhdHRydGltZW8gKHVwIHRvIGFjcmVnbWF4L2FjZGlybWF4KSwgYSBmYWlsdXJlIHJlc2V0cyBpdCB0bworCSAqIGFjcmVnbWluL2FjZGlybWluLgorCSAqCisJICogV2UgbmVlZCB0byByZXZhbGlkYXRlIHRoZSBjYWNoZWQgYXR0cnMgZm9yIHRoaXMgaW5vZGUgaWYKKwkgKgorCSAqCWppZmZpZXMgLSByZWFkX2NhY2hlX2ppZmZpZXMgPiBhdHRydGltZW8KKwkgKgorCSAqIGFuZCBpbnZhbGlkYXRlIGFueSBjYWNoZWQgZGF0YS9mbHVzaCBvdXQgYW55IGRpcnR5IHBhZ2VzIGlmCisJICogd2UgZmluZCB0aGF0CisJICoKKwkgKgltdGltZSAhPSByZWFkX2NhY2hlX210aW1lCisJICovCisJdW5zaWduZWQgbG9uZwkJcmVhZGRpcl90aW1lc3RhbXA7CisJdW5zaWduZWQgbG9uZwkJcmVhZF9jYWNoZV9qaWZmaWVzOworCXVuc2lnbmVkIGxvbmcJCWF0dHJ0aW1lbzsKKwl1bnNpZ25lZCBsb25nCQlhdHRydGltZW9fdGltZXN0YW1wOworCV9fdTY0CQkJY2hhbmdlX2F0dHI7CQkvKiB2NCBvbmx5ICovCisKKwkvKiAiR2VuZXJhdGlvbiBjb3VudGVyIiBmb3IgdGhlIGF0dHJpYnV0ZSBjYWNoZS4gVGhpcyBpcworCSAqIGJ1bXBlZCB3aGVuZXZlciB3ZSB1cGRhdGUgdGhlIG1ldGFkYXRhIG9uIHRoZQorCSAqIHNlcnZlci4KKwkgKi8KKwl1bnNpZ25lZCBsb25nCQljYWNoZV9jaGFuZ2VfYXR0cmlidXRlOworCS8qCisJICogQ291bnRlciBpbmRpY2F0aW5nIHRoZSBudW1iZXIgb2Ygb3V0c3RhbmRpbmcgcmVxdWVzdHMgdGhhdAorCSAqIHdpbGwgY2F1c2UgYSBmaWxlIGRhdGEgdXBkYXRlLgorCSAqLworCWF0b21pY190CQlkYXRhX3VwZGF0ZXM7CisKKwlzdHJ1Y3QgbmZzX2FjY2Vzc19lbnRyeQljYWNoZV9hY2Nlc3M7CisKKwkvKgorCSAqIFRoaXMgaXMgdGhlIGNvb2tpZSB2ZXJpZmllciB1c2VkIGZvciBORlN2MyByZWFkZGlyCisJICogb3BlcmF0aW9ucworCSAqLworCV9fdTMyCQkJY29va2lldmVyZlsyXTsKKworCS8qCisJICogVGhpcyBpcyB0aGUgbGlzdCBvZiBkaXJ0eSB1bndyaXR0ZW4gcGFnZXMuCisJICovCisJc3BpbmxvY2tfdAkJcmVxX2xvY2s7CisJc3RydWN0IGxpc3RfaGVhZAlkaXJ0eTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWNvbW1pdDsKKwlzdHJ1Y3QgcmFkaXhfdHJlZV9yb290CW5mc19wYWdlX3RyZWU7CisKKwl1bnNpZ25lZCBpbnQJCW5kaXJ0eSwKKwkJCQluY29tbWl0LAorCQkJCW5wYWdlczsKKworCS8qIE9wZW4gY29udGV4dHMgZm9yIHNoYXJlZCBtbWFwIHdyaXRlcyAqLworCXN0cnVjdCBsaXN0X2hlYWQJb3Blbl9maWxlczsKKworCXdhaXRfcXVldWVfaGVhZF90CW5mc19pX3dhaXQ7CisKKyNpZmRlZiBDT05GSUdfTkZTX1Y0CisgICAgICAgIC8qIE5GU3Y0IHN0YXRlICovCisJc3RydWN0IGxpc3RfaGVhZAlvcGVuX3N0YXRlczsKKwlzdHJ1Y3QgbmZzX2RlbGVnYXRpb24JKmRlbGVnYXRpb247CisJaW50CQkJIGRlbGVnYXRpb25fc3RhdGU7CisJc3RydWN0IHJ3X3NlbWFwaG9yZQlyd3NlbTsKKyNlbmRpZiAvKiBDT05GSUdfTkZTX1Y0Ki8KKworCXN0cnVjdCBpbm9kZQkJdmZzX2lub2RlOworfTsKKworLyoKKyAqIExlZ2FsIGlub2RlIGZsYWcgdmFsdWVzCisgKi8KKyNkZWZpbmUgTkZTX0lOT19TVEFMRQkJMHgwMDAxCQkvKiBwb3NzaWJsZSBzdGFsZSBpbm9kZSAqLworI2RlZmluZSBORlNfSU5PX0FEVklTRV9SRFBMVVMgICAweDAwMDIgICAgICAgICAgLyogYWR2aXNlIHJlYWRkaXJwbHVzICovCisjZGVmaW5lIE5GU19JTk9fUkVWQUxJREFUSU5HCTB4MDAwNAkJLyogcmV2YWxpZGF0aW5nIGF0dHJzICovCisjZGVmaW5lIE5GU19JTk9fSU5WQUxJRF9BVFRSCTB4MDAwOAkJLyogY2FjaGVkIGF0dHJzIGFyZSBpbnZhbGlkICovCisjZGVmaW5lIE5GU19JTk9fSU5WQUxJRF9EQVRBCTB4MDAxMAkJLyogY2FjaGVkIGRhdGEgaXMgaW52YWxpZCAqLworI2RlZmluZSBORlNfSU5PX0lOVkFMSURfQVRJTUUJMHgwMDIwCQkvKiBjYWNoZWQgYXRpbWUgaXMgaW52YWxpZCAqLworI2RlZmluZSBORlNfSU5PX0lOVkFMSURfQUNDRVNTCTB4MDA0MAkJLyogY2FjaGVkIGFjY2VzcyBjcmVkIGludmFsaWQgKi8KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbmZzX2lub2RlICpORlNfSShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXJldHVybiBjb250YWluZXJfb2YoaW5vZGUsIHN0cnVjdCBuZnNfaW5vZGUsIHZmc19pbm9kZSk7Cit9CisjZGVmaW5lIE5GU19TQihzKQkJKChzdHJ1Y3QgbmZzX3NlcnZlciAqKShzLT5zX2ZzX2luZm8pKQorCisjZGVmaW5lIE5GU19GSChpbm9kZSkJCQkoJk5GU19JKGlub2RlKS0+ZmgpCisjZGVmaW5lIE5GU19TRVJWRVIoaW5vZGUpCQkoTkZTX1NCKGlub2RlLT5pX3NiKSkKKyNkZWZpbmUgTkZTX0NMSUVOVChpbm9kZSkJCShORlNfU0VSVkVSKGlub2RlKS0+Y2xpZW50KQorI2RlZmluZSBORlNfUFJPVE8oaW5vZGUpCQkoTkZTX1NFUlZFUihpbm9kZSktPnJwY19vcHMpCisjZGVmaW5lIE5GU19BRERSKGlub2RlKQkJCShSUENfUEVFUkFERFIoTkZTX0NMSUVOVChpbm9kZSkpKQorI2RlZmluZSBORlNfQ09PS0lFVkVSRihpbm9kZSkJCShORlNfSShpbm9kZSktPmNvb2tpZXZlcmYpCisjZGVmaW5lIE5GU19SRUFEVElNRShpbm9kZSkJCShORlNfSShpbm9kZSktPnJlYWRfY2FjaGVfamlmZmllcykKKyNkZWZpbmUgTkZTX0NIQU5HRV9BVFRSKGlub2RlKQkJKE5GU19JKGlub2RlKS0+Y2hhbmdlX2F0dHIpCisjZGVmaW5lIE5GU19BVFRSVElNRU8oaW5vZGUpCQkoTkZTX0koaW5vZGUpLT5hdHRydGltZW8pCisjZGVmaW5lIE5GU19NSU5BVFRSVElNRU8oaW5vZGUpIFwKKwkoU19JU0RJUihpbm9kZS0+aV9tb2RlKT8gTkZTX1NFUlZFUihpbm9kZSktPmFjZGlybWluIFwKKwkJCSAgICAgICA6IE5GU19TRVJWRVIoaW5vZGUpLT5hY3JlZ21pbikKKyNkZWZpbmUgTkZTX01BWEFUVFJUSU1FTyhpbm9kZSkgXAorCShTX0lTRElSKGlub2RlLT5pX21vZGUpPyBORlNfU0VSVkVSKGlub2RlKS0+YWNkaXJtYXggXAorCQkJICAgICAgIDogTkZTX1NFUlZFUihpbm9kZSktPmFjcmVnbWF4KQorI2RlZmluZSBORlNfQVRUUlRJTUVPX1VQREFURShpbm9kZSkJKE5GU19JKGlub2RlKS0+YXR0cnRpbWVvX3RpbWVzdGFtcCkKKworI2RlZmluZSBORlNfRkxBR1MoaW5vZGUpCQkoTkZTX0koaW5vZGUpLT5mbGFncykKKyNkZWZpbmUgTkZTX1JFVkFMSURBVElORyhpbm9kZSkJCShORlNfRkxBR1MoaW5vZGUpICYgTkZTX0lOT19SRVZBTElEQVRJTkcpCisjZGVmaW5lIE5GU19TVEFMRShpbm9kZSkJCShORlNfRkxBR1MoaW5vZGUpICYgTkZTX0lOT19TVEFMRSkKKworI2RlZmluZSBORlNfRklMRUlEKGlub2RlKQkJKE5GU19JKGlub2RlKS0+ZmlsZWlkKQorCitzdGF0aWMgaW5saW5lIGludCBuZnNfY2FjaGVzX3Vuc3RhYmxlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJcmV0dXJuIGF0b21pY19yZWFkKCZORlNfSShpbm9kZSktPmRhdGFfdXBkYXRlcykgIT0gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIE5GU19DQUNIRUlOVihzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCWlmICghbmZzX2NhY2hlc191bnN0YWJsZShpbm9kZSkpCisJCU5GU19GTEFHUyhpbm9kZSkgfD0gTkZTX0lOT19JTlZBTElEX0FUVFIgfCBORlNfSU5PX0lOVkFMSURfQUNDRVNTOworfQorCitzdGF0aWMgaW5saW5lIGludCBuZnNfc2VydmVyX2NhcGFibGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGNhcCkKK3sKKwlyZXR1cm4gTkZTX1NFUlZFUihpbm9kZSktPmNhcHMgJiBjYXA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IE5GU19VU0VfUkVBRERJUlBMVVMoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlyZXR1cm4gTkZTX0ZMQUdTKGlub2RlKSAmIE5GU19JTk9fQURWSVNFX1JEUExVUzsKK30KKworLyoqCisgKiBuZnNfc2F2ZV9jaGFuZ2VfYXR0cmlidXRlIC0gUmV0dXJucyB0aGUgaW5vZGUgYXR0cmlidXRlIGNoYW5nZSBjb29raWUKKyAqIEBpbm9kZSAtIHBvaW50ZXIgdG8gaW5vZGUKKyAqIFRoZSAiY2hhbmdlIGF0dHJpYnV0ZSIgaXMgdXBkYXRlZCBldmVyeSB0aW1lIHdlIGZpbmlzaCBhbiBvcGVyYXRpb24KKyAqIHRoYXQgd2lsbCByZXN1bHQgaW4gYSBtZXRhZGF0YSBjaGFuZ2Ugb24gdGhlIHNlcnZlci4KKyAqLworc3RhdGljIGlubGluZSBsb25nIG5mc19zYXZlX2NoYW5nZV9hdHRyaWJ1dGUoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlyZXR1cm4gTkZTX0koaW5vZGUpLT5jYWNoZV9jaGFuZ2VfYXR0cmlidXRlOworfQorCisvKioKKyAqIG5mc192ZXJpZnlfY2hhbmdlX2F0dHJpYnV0ZSAtIERldGVjdHMgTkZTIGlub2RlIGNhY2hlIHVwZGF0ZXMKKyAqIEBpbm9kZSAtIHBvaW50ZXIgdG8gaW5vZGUKKyAqIEBjaGF0dHIgLSBwcmV2aW91c2x5IHNhdmVkIGNoYW5nZSBhdHRyaWJ1dGUKKyAqIFJldHVybiAiZmFsc2UiIGlmIG1ldGFkYXRhIGhhcyBiZWVuIHVwZGF0ZWQgKG9yIGlzIGluIHRoZSBwcm9jZXNzIG9mCisgKiBiZWluZyB1cGRhdGVkKSBzaW5jZSB0aGUgY2hhbmdlIGF0dHJpYnV0ZSB3YXMgc2F2ZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IG5mc192ZXJpZnlfY2hhbmdlX2F0dHJpYnV0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBsb25nIGNoYXR0cikKK3sKKwlyZXR1cm4gIW5mc19jYWNoZXNfdW5zdGFibGUoaW5vZGUpCisJCSYmIGNoYXR0ciA9PSBORlNfSShpbm9kZSktPmNhY2hlX2NoYW5nZV9hdHRyaWJ1dGU7Cit9CisKKy8qCisgKiBsaW51eC9mcy9uZnMvaW5vZGUuYworICovCitleHRlcm4gdm9pZCBuZnNfemFwX2NhY2hlcyhzdHJ1Y3QgaW5vZGUgKik7CitleHRlcm4gc3RydWN0IGlub2RlICpuZnNfZmhnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBuZnNfZmggKiwKKwkJCQlzdHJ1Y3QgbmZzX2ZhdHRyICopOworZXh0ZXJuIGludCBuZnNfcmVmcmVzaF9pbm9kZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IG5mc19mYXR0ciAqKTsKK2V4dGVybiBpbnQgbmZzX2dldGF0dHIoc3RydWN0IHZmc21vdW50ICosIHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGtzdGF0ICopOworZXh0ZXJuIGludCBuZnNfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKiwgaW50LCBzdHJ1Y3QgbmFtZWlkYXRhICopOworZXh0ZXJuIGludCBuZnNfYWNjZXNzX2dldF9jYWNoZWQoc3RydWN0IGlub2RlICosIHN0cnVjdCBycGNfY3JlZCAqLCBzdHJ1Y3QgbmZzX2FjY2Vzc19lbnRyeSAqKTsKK2V4dGVybiB2b2lkIG5mc19hY2Nlc3NfYWRkX2NhY2hlKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgbmZzX2FjY2Vzc19lbnRyeSAqKTsKK2V4dGVybiBpbnQgbmZzX29wZW4oc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopOworZXh0ZXJuIGludCBuZnNfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7CitleHRlcm4gaW50IG5mc19hdHRyaWJ1dGVfdGltZW91dChzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKK2V4dGVybiBpbnQgbmZzX3JldmFsaWRhdGVfaW5vZGUoc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlciwgc3RydWN0IGlub2RlICppbm9kZSk7CitleHRlcm4gaW50IF9fbmZzX3JldmFsaWRhdGVfaW5vZGUoc3RydWN0IG5mc19zZXJ2ZXIgKiwgc3RydWN0IGlub2RlICopOworZXh0ZXJuIGludCBuZnNfc2V0YXR0cihzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBpYXR0ciAqKTsKK2V4dGVybiB2b2lkIG5mc19iZWdpbl9hdHRyX3VwZGF0ZShzdHJ1Y3QgaW5vZGUgKik7CitleHRlcm4gdm9pZCBuZnNfZW5kX2F0dHJfdXBkYXRlKHN0cnVjdCBpbm9kZSAqKTsKK2V4dGVybiB2b2lkIG5mc19iZWdpbl9kYXRhX3VwZGF0ZShzdHJ1Y3QgaW5vZGUgKik7CitleHRlcm4gdm9pZCBuZnNfZW5kX2RhdGFfdXBkYXRlKHN0cnVjdCBpbm9kZSAqKTsKK2V4dGVybiB2b2lkIG5mc19lbmRfZGF0YV91cGRhdGVfZGVmZXIoc3RydWN0IGlub2RlICopOworZXh0ZXJuIHN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICphbGxvY19uZnNfb3Blbl9jb250ZXh0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IHJwY19jcmVkICpjcmVkKTsKK2V4dGVybiBzdHJ1Y3QgbmZzX29wZW5fY29udGV4dCAqZ2V0X25mc19vcGVuX2NvbnRleHQoc3RydWN0IG5mc19vcGVuX2NvbnRleHQgKmN0eCk7CitleHRlcm4gdm9pZCBwdXRfbmZzX29wZW5fY29udGV4dChzdHJ1Y3QgbmZzX29wZW5fY29udGV4dCAqY3R4KTsKK2V4dGVybiB2b2lkIG5mc19maWxlX3NldF9vcGVuX2NvbnRleHQoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICpjdHgpOworZXh0ZXJuIHN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICpuZnNfZmluZF9vcGVuX2NvbnRleHQoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1vZGUpOworZXh0ZXJuIHZvaWQgbmZzX2ZpbGVfY2xlYXJfb3Blbl9jb250ZXh0KHN0cnVjdCBmaWxlICpmaWxwKTsKKworLyogbGludXgvbmV0L2lwdjQvaXBjb25maWcuYzogdHJpbXMgaXAgYWRkciBvZmYgZnJvbnQgb2YgbmFtZSwgdG9vLiAqLworZXh0ZXJuIHUzMiByb290X25mc19wYXJzZV9hZGRyKGNoYXIgKm5hbWUpOyAvKl9faW5pdCovCisKKy8qCisgKiBsaW51eC9mcy9uZnMvZmlsZS5jCisgKi8KK2V4dGVybiBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBuZnNfZmlsZV9pbm9kZV9vcGVyYXRpb25zOworZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbmZzX2ZpbGVfb3BlcmF0aW9uczsKK2V4dGVybiBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIG5mc19maWxlX2FvcHM7CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHJwY19jcmVkICpuZnNfZmlsZV9jcmVkKHN0cnVjdCBmaWxlICpmaWxlKQoreworCWlmIChmaWxlICE9IE5VTEwpIHsKKwkJc3RydWN0IG5mc19vcGVuX2NvbnRleHQgKmN0eDsKKworCQljdHggPSAoc3RydWN0IG5mc19vcGVuX2NvbnRleHQqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwkJcmV0dXJuIGN0eC0+Y3JlZDsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBsaW51eC9mcy9uZnMvZGlyZWN0LmMKKyAqLworZXh0ZXJuIHNzaXplX3QgbmZzX2RpcmVjdF9JTyhpbnQsIHN0cnVjdCBraW9jYiAqLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKiwgbG9mZl90LAorCQkJdW5zaWduZWQgbG9uZyk7CitleHRlcm4gc3NpemVfdCBuZnNfZmlsZV9kaXJlY3RfcmVhZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNoYXIgX191c2VyICpidWYsCisJCQlzaXplX3QgY291bnQsIGxvZmZfdCBwb3MpOworZXh0ZXJuIHNzaXplX3QgbmZzX2ZpbGVfZGlyZWN0X3dyaXRlKHN0cnVjdCBraW9jYiAqaW9jYiwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCXNpemVfdCBjb3VudCwgbG9mZl90IHBvcyk7CisKKy8qCisgKiBsaW51eC9mcy9uZnMvZGlyLmMKKyAqLworZXh0ZXJuIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG5mc19kaXJfaW5vZGVfb3BlcmF0aW9uczsKK2V4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG5mc19kaXJfb3BlcmF0aW9uczsKK2V4dGVybiBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgbmZzX2RlbnRyeV9vcGVyYXRpb25zOworCitleHRlcm4gaW50IG5mc19pbnN0YW50aWF0ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBuZnNfZmggKmZoLCBzdHJ1Y3QgbmZzX2ZhdHRyICpmYXR0cik7CisKKy8qCisgKiBsaW51eC9mcy9uZnMvc3ltbGluay5jCisgKi8KK2V4dGVybiBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBuZnNfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zOworCisvKgorICogbGludXgvZnMvbmZzL3VubGluay5jCisgKi8KK2V4dGVybiBpbnQgIG5mc19hc3luY191bmxpbmsoc3RydWN0IGRlbnRyeSAqKTsKK2V4dGVybiB2b2lkIG5mc19jb21wbGV0ZV91bmxpbmsoc3RydWN0IGRlbnRyeSAqKTsKKworLyoKKyAqIGxpbnV4L2ZzL25mcy93cml0ZS5jCisgKi8KK2V4dGVybiBpbnQgIG5mc193cml0ZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTsKK2V4dGVybiBpbnQgIG5mc193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICosIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqKTsKK2V4dGVybiBpbnQgIG5mc19mbHVzaF9pbmNvbXBhdGlibGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBwYWdlICpwYWdlKTsKK2V4dGVybiBpbnQgIG5mc191cGRhdGVwYWdlKHN0cnVjdCBmaWxlICosIHN0cnVjdCBwYWdlICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKK2V4dGVybiB2b2lkIG5mc193cml0ZWJhY2tfZG9uZShzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2spOworCisjaWYgZGVmaW5lZChDT05GSUdfTkZTX1YzKSB8fCBkZWZpbmVkKENPTkZJR19ORlNfVjQpCitleHRlcm4gdm9pZCBuZnNfY29tbWl0X2RvbmUoc3RydWN0IHJwY190YXNrICopOworI2VuZGlmCisKKy8qCisgKiBUcnkgdG8gd3JpdGUgYmFjayBldmVyeXRoaW5nIHN5bmNocm9ub3VzbHkgKGJ1dCBjaGVjayB0aGUKKyAqIHJldHVybiB2YWx1ZSEpCisgKi8KK2V4dGVybiBpbnQgIG5mc19zeW5jX2lub2RlKHN0cnVjdCBpbm9kZSAqLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBpbnQsIGludCk7CisjaWYgZGVmaW5lZChDT05GSUdfTkZTX1YzKSB8fCBkZWZpbmVkKENPTkZJR19ORlNfVjQpCitleHRlcm4gaW50ICBuZnNfY29tbWl0X2lub2RlKHN0cnVjdCBpbm9kZSAqLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBpbnQsIGludCk7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQKK25mc19jb21taXRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgbG9uZyBpZHhfc3RhcnQsIHVuc2lnbmVkIGludCBucGFnZXMsIGludCBob3cpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIGlubGluZSBpbnQKK25mc19oYXZlX3dyaXRlYmFja3Moc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlyZXR1cm4gTkZTX0koaW5vZGUpLT5ucGFnZXMgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQKK25mc193Yl9hbGwoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlpbnQgZXJyb3IgPSBuZnNfc3luY19pbm9kZShpbm9kZSwgMCwgMCwgRkxVU0hfV0FJVCk7CisJcmV0dXJuIChlcnJvciA8IDApID8gZXJyb3IgOiAwOworfQorCisvKgorICogV3JpdGUgYmFjayBhbGwgcmVxdWVzdHMgb24gb25lIHBhZ2UgLSB3ZSBkbyB0aGlzIGJlZm9yZSByZWFkaW5nIGl0LgorICovCitzdGF0aWMgaW5saW5lIGludCBuZnNfd2JfcGFnZV9wcmlvcml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcGFnZSogcGFnZSwgaW50IGhvdykKK3sKKwlpbnQgZXJyb3IgPSBuZnNfc3luY19pbm9kZShpbm9kZSwgcGFnZS0+aW5kZXgsIDEsCisJCQlob3cgfCBGTFVTSF9XQUlUIHwgRkxVU0hfU1RBQkxFKTsKKwlyZXR1cm4gKGVycm9yIDwgMCkgPyBlcnJvciA6IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG5mc193Yl9wYWdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBwYWdlKiBwYWdlKQoreworCXJldHVybiBuZnNfd2JfcGFnZV9wcmlvcml0eShpbm9kZSwgcGFnZSwgMCk7Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBhbmQgZnJlZSBuZnNfd3JpdGVfZGF0YSBzdHJ1Y3R1cmVzCisgKi8KK2V4dGVybiBtZW1wb29sX3QgKm5mc193ZGF0YV9tZW1wb29sOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBuZnNfd3JpdGVfZGF0YSAqbmZzX3dyaXRlZGF0YV9hbGxvYyh2b2lkKQoreworCXN0cnVjdCBuZnNfd3JpdGVfZGF0YSAqcCA9IG1lbXBvb2xfYWxsb2MobmZzX3dkYXRhX21lbXBvb2wsIFNMQUJfTk9GUyk7CisJaWYgKHApIHsKKwkJbWVtc2V0KHAsIDAsIHNpemVvZigqcCkpOworCQlJTklUX0xJU1RfSEVBRCgmcC0+cGFnZXMpOworCX0KKwlyZXR1cm4gcDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG5mc193cml0ZWRhdGFfZnJlZShzdHJ1Y3QgbmZzX3dyaXRlX2RhdGEgKnApCit7CisJbWVtcG9vbF9mcmVlKHAsIG5mc193ZGF0YV9tZW1wb29sKTsKK30KKworLyogSGFjayBmb3IgZnV0dXJlIE5GUyBzd2FwIHN1cHBvcnQgKi8KKyNpZm5kZWYgSVNfU1dBUEZJTEUKKyMgZGVmaW5lIElTX1NXQVBGSUxFKGlub2RlKQkoMCkKKyNlbmRpZgorCisvKgorICogbGludXgvZnMvbmZzL3JlYWQuYworICovCitleHRlcm4gaW50ICBuZnNfcmVhZHBhZ2Uoc3RydWN0IGZpbGUgKiwgc3RydWN0IHBhZ2UgKik7CitleHRlcm4gaW50ICBuZnNfcmVhZHBhZ2VzKHN0cnVjdCBmaWxlICosIHN0cnVjdCBhZGRyZXNzX3NwYWNlICosCisJCXN0cnVjdCBsaXN0X2hlYWQgKiwgdW5zaWduZWQpOworZXh0ZXJuIHZvaWQgbmZzX3JlYWRwYWdlX3Jlc3VsdChzdHJ1Y3QgcnBjX3Rhc2sgKik7CisKKy8qCisgKiBBbGxvY2F0ZSBhbmQgZnJlZSBuZnNfcmVhZF9kYXRhIHN0cnVjdHVyZXMKKyAqLworZXh0ZXJuIG1lbXBvb2xfdCAqbmZzX3JkYXRhX21lbXBvb2w7CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG5mc19yZWFkX2RhdGEgKm5mc19yZWFkZGF0YV9hbGxvYyh2b2lkKQoreworCXN0cnVjdCBuZnNfcmVhZF9kYXRhICpwID0gbWVtcG9vbF9hbGxvYyhuZnNfcmRhdGFfbWVtcG9vbCwgU0xBQl9OT0ZTKTsKKwlpZiAocCkKKwkJbWVtc2V0KHAsIDAsIHNpemVvZigqcCkpOworCXJldHVybiBwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbmZzX3JlYWRkYXRhX2ZyZWUoc3RydWN0IG5mc19yZWFkX2RhdGEgKnApCit7CisJbWVtcG9vbF9mcmVlKHAsIG5mc19yZGF0YV9tZW1wb29sKTsKK30KKworZXh0ZXJuIHZvaWQgIG5mc19yZWFkZGF0YV9yZWxlYXNlKHN0cnVjdCBycGNfdGFzayAqdGFzayk7CisKKy8qCisgKiBsaW51eC9mcy9tb3VudF9jbG50LmMKKyAqIChVc2VkIG9ubHkgYnkgbmZzcm9vdCBtb2R1bGUpCisgKi8KK2V4dGVybiBpbnQgIG5mc3Jvb3RfbW91bnQoc3RydWN0IHNvY2thZGRyX2luICosIGNoYXIgKiwgc3RydWN0IG5mc19maCAqLAorCQlpbnQsIGludCk7CisKKy8qCisgKiBpbmxpbmUgZnVuY3Rpb25zCisgKi8KKworc3RhdGljIGlubGluZSBsb2ZmX3QKK25mc19zaXplX3RvX2xvZmZfdChfX3U2NCBzaXplKQoreworCWxvZmZfdCBtYXhzeiA9ICgoKGxvZmZfdCkgVUxPTkdfTUFYKSA8PCBQQUdFX0NBQ0hFX1NISUZUKSArIFBBR0VfQ0FDSEVfU0laRSAtIDE7CisJaWYgKHNpemUgPiBtYXhzeikKKwkJcmV0dXJuIG1heHN6OworCXJldHVybiAobG9mZl90KSBzaXplOworfQorCitzdGF0aWMgaW5saW5lIGlub190CituZnNfZmlsZWlkX3RvX2lub190KHU2NCBmaWxlaWQpCit7CisJaW5vX3QgaW5vID0gKGlub190KSBmaWxlaWQ7CisJaWYgKHNpemVvZihpbm9fdCkgPCBzaXplb2YodTY0KSkKKwkJaW5vIF49IGZpbGVpZCA+PiAoc2l6ZW9mKHU2NCktc2l6ZW9mKGlub190KSkgKiA4OworCXJldHVybiBpbm87Cit9CisKKy8qIE5GUyByb290ICovCisKK2V4dGVybiB2b2lkICogbmZzX3Jvb3RfZGF0YSh2b2lkKTsKKworI2RlZmluZSBuZnNfd2FpdF9ldmVudChjbG50LCB3cSwgY29uZGl0aW9uKQkJCQlcCisoewkJCQkJCQkJCVwKKwlpbnQgX19yZXR2YWwgPSAwOwkJCQkJCVwKKwlpZiAoY2xudC0+Y2xfaW50cikgewkJCQkJCVwKKwkJc2lnc2V0X3Qgb2xkbWFzazsJCQkJCVwKKwkJcnBjX2NsbnRfc2lnbWFzayhjbG50LCAmb2xkbWFzayk7CQkJXAorCQlfX3JldHZhbCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZSh3cSwgY29uZGl0aW9uKTsJXAorCQlycGNfY2xudF9zaWd1bm1hc2soY2xudCwgJm9sZG1hc2spOwkJCVwKKwl9IGVsc2UJCQkJCQkJCVwKKwkJd2FpdF9ldmVudCh3cSwgY29uZGl0aW9uKTsJCQkJXAorCV9fcmV0dmFsOwkJCQkJCQlcCit9KQorCisjZGVmaW5lIE5GU19KVUtFQk9YX1JFVFJZX1RJTUUgKDUgKiBIWikKKworI2lmZGVmIENPTkZJR19ORlNfVjQKKworc3RydWN0IGlkbWFwOworCisvKgorICogSW4gYSBzZXFpZC1tdXRhdGluZyBvcCwgdGhpcyBtYWNybyBjb250cm9scyB3aGljaCBlcnJvciByZXR1cm4KKyAqIHZhbHVlcyB0cmlnZ2VyIGluY3JlbWVudGF0aW9uIG9mIHRoZSBzZXFpZC4KKyAqCisgKiBmcm9tIHJmYyAzMDEwOgorICogVGhlIGNsaWVudCBNVVNUIG1vbm90b25pY2FsbHkgaW5jcmVtZW50IHRoZSBzZXF1ZW5jZSBudW1iZXIgZm9yIHRoZQorICogQ0xPU0UsIExPQ0ssIExPQ0tVLCBPUEVOLCBPUEVOX0NPTkZJUk0sIGFuZCBPUEVOX0RPV05HUkFERQorICogb3BlcmF0aW9ucy4gIFRoaXMgaXMgdHJ1ZSBldmVuIGluIHRoZSBldmVudCB0aGF0IHRoZSBwcmV2aW91cworICogb3BlcmF0aW9uIHRoYXQgdXNlZCB0aGUgc2VxdWVuY2UgbnVtYmVyIHJlY2VpdmVkIGFuIGVycm9yLiAgVGhlIG9ubHkKKyAqIGV4Y2VwdGlvbiB0byB0aGlzIHJ1bGUgaXMgaWYgdGhlIHByZXZpb3VzIG9wZXJhdGlvbiByZWNlaXZlZCBvbmUgb2YKKyAqIHRoZSBmb2xsb3dpbmcgZXJyb3JzOiBORlNFUlJfU1RBTEVfQ0xJRU5USUQsIE5GU0VSUl9TVEFMRV9TVEFURUlELAorICogTkZTRVJSX0JBRF9TVEFURUlELCBORlNFUlJfQkFEX1NFUUlELCBORlNFUlJfQkFEWERSLAorICogTkZTRVJSX1JFU09VUkNFLCBORlNFUlJfTk9GSUxFSEFORExFLgorICoKKyAqLworI2RlZmluZSBzZXFpZF9tdXRhdGluZ19lcnIoZXJyKSAgICAgICBcCisoKChlcnIpICE9IE5GU0VSUl9TVEFMRV9DTElFTlRJRCkgJiYgIFwKKyAoKGVycikgIT0gTkZTRVJSX1NUQUxFX1NUQVRFSUQpICAmJiAgXAorICgoZXJyKSAhPSBORlNFUlJfQkFEX1NUQVRFSUQpICAgICYmICBcCisgKChlcnIpICE9IE5GU0VSUl9CQURfU0VRSUQpICAgICAgJiYgIFwKKyAoKGVycikgIT0gTkZTRVJSX0JBRF9YRFIpICAgICAgICAmJiAgXAorICgoZXJyKSAhPSBORlNFUlJfUkVTT1VSQ0UpICAgICAgICYmICBcCisgKChlcnIpICE9IE5GU0VSUl9OT0ZJTEVIQU5ETEUpKQorCitlbnVtIG5mczRfY2xpZW50X3N0YXRlIHsKKwlORlM0Q0xOVF9PSyAgPSAwLAorfTsKKworLyoKKyAqIFRoZSBuZnM0X2NsaWVudCBpZGVudGlmaWVzIG91ciBjbGllbnQgc3RhdGUgdG8gdGhlIHNlcnZlci4KKyAqLworc3RydWN0IG5mczRfY2xpZW50IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWNsX3NlcnZlcnM7CS8qIEdsb2JhbCBsaXN0IG9mIHNlcnZlcnMgKi8KKwlzdHJ1Y3QgaW5fYWRkcgkJY2xfYWRkcjsJLyogU2VydmVyIGlkZW50aWZpZXIgKi8KKwl1NjQJCQljbF9jbGllbnRpZDsJLyogY29uc3RhbnQgKi8KKwluZnM0X3ZlcmlmaWVyCQljbF9jb25maXJtOworCXVuc2lnbmVkIGxvbmcJCWNsX3N0YXRlOworCisJdTMyCQkJY2xfbG9ja293bmVyX2lkOworCisJLyoKKwkgKiBUaGUgZm9sbG93aW5nIHJ3c2VtIGVuc3VyZXMgZXhjbHVzaXZlIGFjY2VzcyB0byB0aGUgc2VydmVyCisJICogd2hpbGUgd2UgcmVjb3ZlciB0aGUgc3RhdGUgZm9sbG93aW5nIGEgbGVhc2UgZXhwaXJhdGlvbi4KKwkgKi8KKwlzdHJ1Y3Qgcndfc2VtYXBob3JlCWNsX3NlbTsKKworCXN0cnVjdCBsaXN0X2hlYWQJY2xfZGVsZWdhdGlvbnM7CisJc3RydWN0IGxpc3RfaGVhZAljbF9zdGF0ZV9vd25lcnM7CisJc3RydWN0IGxpc3RfaGVhZAljbF91bnVzZWQ7CisJaW50CQkJY2xfbnVudXNlZDsKKwlzcGlubG9ja190CQljbF9sb2NrOworCWF0b21pY190CQljbF9jb3VudDsKKworCXN0cnVjdCBycGNfY2xudCAqCWNsX3JwY2NsaWVudDsKKwlzdHJ1Y3QgcnBjX2NyZWQgKgljbF9jcmVkOworCisJc3RydWN0IGxpc3RfaGVhZAljbF9zdXBlcmJsb2NrczsJLyogTGlzdCBvZiBuZnNfc2VydmVyIHN0cnVjdHMgKi8KKworCXVuc2lnbmVkIGxvbmcJCWNsX2xlYXNlX3RpbWU7CisJdW5zaWduZWQgbG9uZwkJY2xfbGFzdF9yZW5ld2FsOworCXN0cnVjdCB3b3JrX3N0cnVjdAljbF9yZW5ld2Q7CisJc3RydWN0IHdvcmtfc3RydWN0CWNsX3JlY292ZXJkOworCisJd2FpdF9xdWV1ZV9oZWFkX3QJY2xfd2FpdHE7CisJc3RydWN0IHJwY193YWl0X3F1ZXVlCWNsX3JwY3dhaXRxOworCisJLyogdXNlZCBmb3IgdGhlIHNldGNsaWVudGlkIHZlcmlmaWVyICovCisJc3RydWN0IHRpbWVzcGVjCQljbF9ib290X3RpbWU7CisKKwkvKiBpZG1hcHBlciAqLworCXN0cnVjdCBpZG1hcCAqCQljbF9pZG1hcDsKKworCS8qIE91ciBvd24gSVAgYWRkcmVzcywgYXMgYSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nLgorCSAqIFRoaXMgaXMgdXNlZCB0byBnZW5lcmF0ZSB0aGUgY2xpZW50aWQsIGFuZCB0aGUgY2FsbGJhY2sgYWRkcmVzcy4KKwkgKi8KKwljaGFyCQkJY2xfaXBhZGRyWzE2XTsKKwl1bnNpZ25lZCBjaGFyCQljbF9pZF91bmlxdWlmaWVyOworfTsKKworLyoKKyAqIE5GUzQgc3RhdGVfb3duZXJzIGFuZCBsb2NrX293bmVycyBhcmUgc2ltcGx5IGxhYmVscyBmb3Igb3JkZXJlZAorICogc2VxdWVuY2VzIG9mIFJQQyBjYWxscy4gVGhlaXIgc29sZSBwdXJwb3NlIGlzIHRvIHByb3ZpZGUgb25jZS1vbmx5CisgKiBzZW1hbnRpY3MgYnkgYWxsb3dpbmcgdGhlIHNlcnZlciB0byBpZGVudGlmeSByZXBsYXllZCByZXF1ZXN0cy4KKyAqCisgKiBUaGUgLT5zb19zZW1hIGlzIGhlbGQgZHVyaW5nIGFsbCBzdGF0ZV9vd25lciBzZXFpZC1tdXRhdGluZyBvcGVyYXRpb25zOgorICogT1BFTiwgT1BFTl9ET1dOR1JBREUsIGFuZCBDTE9TRS4gSXRzIHB1cnBvc2UgaXMgdG8gcHJvcGVybHkgc2VyaWFsaXplCisgKiBzb19zZXFpZC4KKyAqLworc3RydWN0IG5mczRfc3RhdGVfb3duZXIgeworCXN0cnVjdCBsaXN0X2hlYWQgICAgIHNvX2xpc3Q7CSAvKiBwZXItY2xpZW50aWQgbGlzdCBvZiBzdGF0ZV9vd25lcnMgKi8KKwlzdHJ1Y3QgbmZzNF9jbGllbnQgICAqc29fY2xpZW50OworCXUzMiAgICAgICAgICAgICAgICAgIHNvX2lkOyAgICAgIC8qIDMyLWJpdCBpZGVudGlmaWVyLCB1bmlxdWUgKi8KKwlzdHJ1Y3Qgc2VtYXBob3JlICAgICBzb19zZW1hOworCXUzMiAgICAgICAgICAgICAgICAgIHNvX3NlcWlkOyAgIC8qIHByb3RlY3RlZCBieSBzb19zZW1hICovCisJYXRvbWljX3QJICAgICBzb19jb3VudDsKKworCXN0cnVjdCBycGNfY3JlZAkgICAgICpzb19jcmVkOwkgLyogQXNzb2NpYXRlZCBjcmVkICovCisJc3RydWN0IGxpc3RfaGVhZCAgICAgc29fc3RhdGVzOworCXN0cnVjdCBsaXN0X2hlYWQgICAgIHNvX2RlbGVnYXRpb25zOworfTsKKworLyoKKyAqIHN0cnVjdCBuZnM0X3N0YXRlIG1haW50YWlucyB0aGUgY2xpZW50LXNpZGUgc3RhdGUgZm9yIGEgZ2l2ZW4KKyAqIChzdGF0ZV9vd25lcixpbm9kZSkgdHVwbGUgKE9QRU4pIG9yIHN0YXRlX293bmVyIChMT0NLKS4KKyAqCisgKiBPUEVOOgorICogSW4gb3JkZXIgdG8ga25vdyB3aGVuIHRvIE9QRU5fRE9XTkdSQURFIG9yIENMT1NFIHRoZSBzdGF0ZSBvbiB0aGUgc2VydmVyLAorICogd2UgbmVlZCB0byBrbm93IGhvdyBtYW55IGZpbGVzIGFyZSBvcGVuIGZvciByZWFkaW5nIG9yIHdyaXRpbmcgb24gYQorICogZ2l2ZW4gaW5vZGUuIFRoaXMgaW5mb3JtYXRpb24gdG9vIGlzIHN0b3JlZCBoZXJlLgorICoKKyAqIExPQ0s6IG9uZSBuZnM0X3N0YXRlIChMT0NLKSB0byBob2xkIHRoZSBsb2NrIHN0YXRlaWQgbmZzNF9zdGF0ZShPUEVOKQorICovCisKK3N0cnVjdCBuZnM0X2xvY2tfc3RhdGUgeworCXN0cnVjdCBsaXN0X2hlYWQJbHNfbG9ja3M7CS8qIE90aGVyIGxvY2sgc3RhdGVpZHMgKi8KKwlmbF9vd25lcl90CQlsc19vd25lcjsJLyogUE9TSVggbG9jayBvd25lciAqLworI2RlZmluZSBORlNfTE9DS19JTklUSUFMSVpFRCAxCisJaW50CQkJbHNfZmxhZ3M7CisJdTMyCQkJbHNfc2VxaWQ7CisJdTMyCQkJbHNfaWQ7CisJbmZzNF9zdGF0ZWlkCQlsc19zdGF0ZWlkOworCWF0b21pY190CQlsc19jb3VudDsKK307CisKKy8qIGJpdHMgZm9yIG5mczRfc3RhdGUtPmZsYWdzICovCitlbnVtIHsKKwlMS19TVEFURV9JTl9VU0UsCisJTkZTX0RFTEVHQVRFRF9TVEFURSwKK307CisKK3N0cnVjdCBuZnM0X3N0YXRlIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG9wZW5fc3RhdGVzOwkvKiBMaXN0IG9mIHN0YXRlcyBmb3IgdGhlIHNhbWUgc3RhdGVfb3duZXIgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGlub2RlX3N0YXRlczsJLyogTGlzdCBvZiBzdGF0ZXMgZm9yIHRoZSBzYW1lIGlub2RlICovCisJc3RydWN0IGxpc3RfaGVhZCBsb2NrX3N0YXRlczsJLyogTGlzdCBvZiBzdWJzZXJ2aWVudCBsb2NrIHN0YXRlaWRzICovCisKKwlzdHJ1Y3QgbmZzNF9zdGF0ZV9vd25lciAqb3duZXI7CS8qIFBvaW50ZXIgdG8gdGhlIG9wZW4gb3duZXIgKi8KKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOwkJLyogUG9pbnRlciB0byB0aGUgaW5vZGUgKi8KKworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CQkvKiBEbyB3ZSBob2xkIGFueSBsb2Nrcz8gKi8KKwlzdHJ1Y3Qgc2VtYXBob3JlIGxvY2tfc2VtYTsJLyogU2VyaWFsaXplcyBmaWxlIGxvY2tpbmcgb3BlcmF0aW9ucyAqLworCXJ3bG9ja190IHN0YXRlX2xvY2s7CQkvKiBQcm90ZWN0cyB0aGUgbG9ja19zdGF0ZXMgbGlzdCAqLworCisJbmZzNF9zdGF0ZWlkIHN0YXRlaWQ7CisKKwl1bnNpZ25lZCBpbnQgbnJlYWRlcnM7CisJdW5zaWduZWQgaW50IG53cml0ZXJzOworCWludCBzdGF0ZTsJCQkvKiBTdGF0ZSBvbiB0aGUgc2VydmVyIChSLFcsIG9yIFJXKSAqLworCWF0b21pY190IGNvdW50OworfTsKKworCitzdHJ1Y3QgbmZzNF9leGNlcHRpb24geworCWxvbmcgdGltZW91dDsKKwlpbnQgcmV0cnk7Cit9OworCitzdHJ1Y3QgbmZzNF9zdGF0ZV9yZWNvdmVyeV9vcHMgeworCWludCAoKnJlY292ZXJfb3Blbikoc3RydWN0IG5mczRfc3RhdGVfb3duZXIgKiwgc3RydWN0IG5mczRfc3RhdGUgKik7CisJaW50ICgqcmVjb3Zlcl9sb2NrKShzdHJ1Y3QgbmZzNF9zdGF0ZSAqLCBzdHJ1Y3QgZmlsZV9sb2NrICopOworfTsKKworZXh0ZXJuIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBuZnM0X2RlbnRyeV9vcGVyYXRpb25zOworZXh0ZXJuIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG5mczRfZGlyX2lub2RlX29wZXJhdGlvbnM7CisKKy8qIG5mczRwcm9jLmMgKi8KK2V4dGVybiBpbnQgbmZzNF9tYXBfZXJyb3JzKGludCBlcnIpOworZXh0ZXJuIGludCBuZnM0X3Byb2Nfc2V0Y2xpZW50aWQoc3RydWN0IG5mczRfY2xpZW50ICosIHUzMiwgdW5zaWduZWQgc2hvcnQpOworZXh0ZXJuIGludCBuZnM0X3Byb2Nfc2V0Y2xpZW50aWRfY29uZmlybShzdHJ1Y3QgbmZzNF9jbGllbnQgKik7CitleHRlcm4gaW50IG5mczRfcHJvY19hc3luY19yZW5ldyhzdHJ1Y3QgbmZzNF9jbGllbnQgKik7CitleHRlcm4gaW50IG5mczRfcHJvY19yZW5ldyhzdHJ1Y3QgbmZzNF9jbGllbnQgKik7CitleHRlcm4gaW50IG5mczRfZG9fY2xvc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IG5mczRfc3RhdGUgKnN0YXRlLCBtb2RlX3QgbW9kZSk7CitleHRlcm4gc3RydWN0IGlub2RlICpuZnM0X2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBuYW1laWRhdGEgKik7CitleHRlcm4gaW50IG5mczRfb3Blbl9yZXZhbGlkYXRlKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosIGludCk7CisKK2V4dGVybiBzdHJ1Y3QgbmZzNF9zdGF0ZV9yZWNvdmVyeV9vcHMgbmZzNF9yZWJvb3RfcmVjb3Zlcnlfb3BzOworZXh0ZXJuIHN0cnVjdCBuZnM0X3N0YXRlX3JlY292ZXJ5X29wcyBuZnM0X25ldHdvcmtfcGFydGl0aW9uX3JlY292ZXJ5X29wczsKKworLyogbmZzNHJlbmV3ZC5jICovCitleHRlcm4gdm9pZCBuZnM0X3NjaGVkdWxlX3N0YXRlX3JlbmV3YWwoc3RydWN0IG5mczRfY2xpZW50ICopOworZXh0ZXJuIHZvaWQgbmZzNF9yZW5ld2RfcHJlcGFyZV9zaHV0ZG93bihzdHJ1Y3QgbmZzX3NlcnZlciAqKTsKK2V4dGVybiB2b2lkIG5mczRfa2lsbF9yZW5ld2Qoc3RydWN0IG5mczRfY2xpZW50ICopOworCisvKiBuZnM0c3RhdGUuYyAqLworZXh0ZXJuIHZvaWQgaW5pdF9uZnN2NF9zdGF0ZShzdHJ1Y3QgbmZzX3NlcnZlciAqKTsKK2V4dGVybiB2b2lkIGRlc3Ryb3lfbmZzdjRfc3RhdGUoc3RydWN0IG5mc19zZXJ2ZXIgKik7CitleHRlcm4gc3RydWN0IG5mczRfY2xpZW50ICpuZnM0X2dldF9jbGllbnQoc3RydWN0IGluX2FkZHIgKik7CitleHRlcm4gdm9pZCBuZnM0X3B1dF9jbGllbnQoc3RydWN0IG5mczRfY2xpZW50ICpjbHApOworZXh0ZXJuIGludCBuZnM0X2luaXRfY2xpZW50KHN0cnVjdCBuZnM0X2NsaWVudCAqY2xwKTsKK2V4dGVybiBzdHJ1Y3QgbmZzNF9jbGllbnQgKm5mczRfZmluZF9jbGllbnQoc3RydWN0IGluX2FkZHIgKik7CitleHRlcm4gdTMyIG5mczRfYWxsb2NfbG9ja293bmVyX2lkKHN0cnVjdCBuZnM0X2NsaWVudCAqKTsKKworZXh0ZXJuIHN0cnVjdCBuZnM0X3N0YXRlX293bmVyICogbmZzNF9nZXRfc3RhdGVfb3duZXIoc3RydWN0IG5mc19zZXJ2ZXIgKiwgc3RydWN0IHJwY19jcmVkICopOworZXh0ZXJuIHZvaWQgbmZzNF9wdXRfc3RhdGVfb3duZXIoc3RydWN0IG5mczRfc3RhdGVfb3duZXIgKik7CitleHRlcm4gdm9pZCBuZnM0X2Ryb3Bfc3RhdGVfb3duZXIoc3RydWN0IG5mczRfc3RhdGVfb3duZXIgKik7CitleHRlcm4gc3RydWN0IG5mczRfc3RhdGUgKiBuZnM0X2dldF9vcGVuX3N0YXRlKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgbmZzNF9zdGF0ZV9vd25lciAqKTsKK2V4dGVybiB2b2lkIG5mczRfcHV0X29wZW5fc3RhdGUoc3RydWN0IG5mczRfc3RhdGUgKik7CitleHRlcm4gdm9pZCBuZnM0X2Nsb3NlX3N0YXRlKHN0cnVjdCBuZnM0X3N0YXRlICosIG1vZGVfdCk7CitleHRlcm4gc3RydWN0IG5mczRfc3RhdGUgKm5mczRfZmluZF9zdGF0ZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHJwY19jcmVkICosIG1vZGVfdCBtb2RlKTsKK2V4dGVybiB2b2lkIG5mczRfaW5jcmVtZW50X3NlcWlkKGludCBzdGF0dXMsIHN0cnVjdCBuZnM0X3N0YXRlX293bmVyICpzcCk7CitleHRlcm4gdm9pZCBuZnM0X3NjaGVkdWxlX3N0YXRlX3JlY292ZXJ5KHN0cnVjdCBuZnM0X2NsaWVudCAqKTsKK2V4dGVybiBzdHJ1Y3QgbmZzNF9sb2NrX3N0YXRlICpuZnM0X2ZpbmRfbG9ja19zdGF0ZShzdHJ1Y3QgbmZzNF9zdGF0ZSAqc3RhdGUsIGZsX293bmVyX3QpOworZXh0ZXJuIHN0cnVjdCBuZnM0X2xvY2tfc3RhdGUgKm5mczRfZ2V0X2xvY2tfc3RhdGUoc3RydWN0IG5mczRfc3RhdGUgKnN0YXRlLCBmbF9vd25lcl90KTsKK2V4dGVybiB2b2lkIG5mczRfcHV0X2xvY2tfc3RhdGUoc3RydWN0IG5mczRfbG9ja19zdGF0ZSAqc3RhdGUpOworZXh0ZXJuIHZvaWQgbmZzNF9pbmNyZW1lbnRfbG9ja19zZXFpZChpbnQgc3RhdHVzLCBzdHJ1Y3QgbmZzNF9sb2NrX3N0YXRlICpscyk7CitleHRlcm4gdm9pZCBuZnM0X25vdGlmeV9zZXRsayhzdHJ1Y3QgbmZzNF9zdGF0ZSAqLCBzdHJ1Y3QgZmlsZV9sb2NrICosIHN0cnVjdCBuZnM0X2xvY2tfc3RhdGUgKik7CitleHRlcm4gdm9pZCBuZnM0X25vdGlmeV91bmxjayhzdHJ1Y3QgbmZzNF9zdGF0ZSAqLCBzdHJ1Y3QgZmlsZV9sb2NrICosIHN0cnVjdCBuZnM0X2xvY2tfc3RhdGUgKik7CitleHRlcm4gdm9pZCBuZnM0X2NvcHlfc3RhdGVpZChuZnM0X3N0YXRlaWQgKiwgc3RydWN0IG5mczRfc3RhdGUgKiwgZmxfb3duZXJfdCk7CisKKworCitzdHJ1Y3QgbmZzNF9tb3VudF9kYXRhOworI2Vsc2UKKyNkZWZpbmUgaW5pdF9uZnN2NF9zdGF0ZShzZXJ2ZXIpICBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGRlc3Ryb3lfbmZzdjRfc3RhdGUoc2VydmVyKSAgICAgICBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIG5mczRfcHV0X3N0YXRlX293bmVyKGlub2RlLCBvd25lcikgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBuZnM0X3B1dF9vcGVuX3N0YXRlKHN0YXRlKSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIG5mczRfY2xvc2Vfc3RhdGUoYSwgYikgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBuZnM0X3JlbmV3ZF9wcmVwYXJlX3NodXRkb3duKHNlcnZlcikgZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKy8qCisgKiBORlMgZGVidWcgZmxhZ3MKKyAqLworI2RlZmluZSBORlNEQkdfVkZTCQkweDAwMDEKKyNkZWZpbmUgTkZTREJHX0RJUkNBQ0hFCQkweDAwMDIKKyNkZWZpbmUgTkZTREJHX0xPT0tVUENBQ0hFCTB4MDAwNAorI2RlZmluZSBORlNEQkdfUEFHRUNBQ0hFCTB4MDAwOAorI2RlZmluZSBORlNEQkdfUFJPQwkJMHgwMDEwCisjZGVmaW5lIE5GU0RCR19YRFIJCTB4MDAyMAorI2RlZmluZSBORlNEQkdfRklMRQkJMHgwMDQwCisjZGVmaW5lIE5GU0RCR19ST09UCQkweDAwODAKKyNkZWZpbmUgTkZTREJHX0NBTExCQUNLCQkweDAxMDAKKyNkZWZpbmUgTkZTREJHX0FMTAkJMHhGRkZGCisKKyNpZmRlZiBfX0tFUk5FTF9fCisjIHVuZGVmIGlmZGVidWcKKyMgaWZkZWYgTkZTX0RFQlVHCisjICBkZWZpbmUgaWZkZWJ1ZyhmYWMpCQlpZiAodW5saWtlbHkobmZzX2RlYnVnICYgTkZTREJHXyMjZmFjKSkKKyMgZWxzZQorIyAgZGVmaW5lIGlmZGVidWcoZmFjKQkJaWYgKDApCisjIGVuZGlmCisjZW5kaWYgLyogX19LRVJORUwgKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mc19mc19pLmggYi9pbmNsdWRlL2xpbnV4L25mc19mc19pLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTlhNzQ5NTgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L25mc19mc19pLmgKQEAgLTAsMCArMSwyNSBAQAorI2lmbmRlZiBfTkZTX0ZTX0kKKyNkZWZpbmUgX05GU19GU19JCisKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvbmZzLmg+CisKK3N0cnVjdCBubG1fbG9ja293bmVyOworCisvKgorICogTkZTIGxvY2sgaW5mbworICovCitzdHJ1Y3QgbmZzX2xvY2tfaW5mbyB7CisJdTMyCQlzdGF0ZTsKKwl1MzIJCWZsYWdzOworCXN0cnVjdCBubG1fbG9ja293bmVyICpvd25lcjsKK307CisKKy8qCisgKiBMb2NrIGZsYWcgdmFsdWVzCisgKi8KKyNkZWZpbmUgTkZTX0xDS19HUkFOVEVECQkweDAwMDEJCS8qIGxvY2sgaGFzIGJlZW4gZ3JhbnRlZCAqLworI2RlZmluZSBORlNfTENLX1JFQ0xBSU0JCTB4MDAwMgkJLyogbG9jayBtYXJrZWQgZm9yIHJlY2xhaW1pbmcgKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mc19mc19zYi5oIGIvaW5jbHVkZS9saW51eC9uZnNfZnNfc2IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzUxNjQ1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZnNfZnNfc2IuaApAQCAtMCwwICsxLDU4IEBACisjaWZuZGVmIF9ORlNfRlNfU0IKKyNkZWZpbmUgX05GU19GU19TQgorCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2JhY2tpbmctZGV2Lmg+CisKKy8qCisgKiBORlMgY2xpZW50IHBhcmFtZXRlcnMgc3RvcmVkIGluIHRoZSBzdXBlcmJsb2NrLgorICovCitzdHJ1Y3QgbmZzX3NlcnZlciB7CisJc3RydWN0IHJwY19jbG50ICoJY2xpZW50OwkJLyogUlBDIGNsaWVudCBoYW5kbGUgKi8KKwlzdHJ1Y3QgcnBjX2NsbnQgKgljbGllbnRfc3lzOwkvKiAybmQgaGFuZGxlIGZvciBGU0lORk8gKi8KKwlzdHJ1Y3QgbmZzX3JwY19vcHMgKglycGNfb3BzOwkvKiBORlMgcHJvdG9jb2wgdmVjdG9yICovCisJc3RydWN0IGJhY2tpbmdfZGV2X2luZm8JYmFja2luZ19kZXZfaW5mbzsKKwlpbnQJCQlmbGFnczsJCS8qIHZhcmlvdXMgZmxhZ3MgKi8KKwl1bnNpZ25lZCBpbnQJCWNhcHM7CQkvKiBzZXJ2ZXIgY2FwYWJpbGl0aWVzICovCisJdW5zaWduZWQgaW50CQlyc2l6ZTsJCS8qIHJlYWQgc2l6ZSAqLworCXVuc2lnbmVkIGludAkJcnBhZ2VzOwkJLyogcmVhZCBzaXplIChpbiBwYWdlcykgKi8KKwl1bnNpZ25lZCBpbnQJCXdzaXplOwkJLyogd3JpdGUgc2l6ZSAqLworCXVuc2lnbmVkIGludAkJd3BhZ2VzOwkJLyogd3JpdGUgc2l6ZSAoaW4gcGFnZXMpICovCisJdW5zaWduZWQgaW50CQl3dG11bHQ7CQkvKiBzZXJ2ZXIgZGlzayBibG9jayBzaXplICovCisJdW5zaWduZWQgaW50CQlkdHNpemU7CQkvKiByZWFkZGlyIHNpemUgKi8KKwl1bnNpZ25lZCBpbnQJCWJzaXplOwkJLyogc2VydmVyIGJsb2NrIHNpemUgKi8KKwl1bnNpZ25lZCBpbnQJCWFjcmVnbWluOwkvKiBhdHRyIGNhY2hlIHRpbWVvdXRzICovCisJdW5zaWduZWQgaW50CQlhY3JlZ21heDsKKwl1bnNpZ25lZCBpbnQJCWFjZGlybWluOworCXVuc2lnbmVkIGludAkJYWNkaXJtYXg7CisJdW5zaWduZWQgaW50CQluYW1lbGVuOworCWNoYXIgKgkJCWhvc3RuYW1lOwkvKiByZW1vdGUgaG9zdG5hbWUgKi8KKwlzdHJ1Y3QgbmZzX2ZoCQlmaDsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4JYWRkcjsKKyNpZmRlZiBDT05GSUdfTkZTX1Y0CisJLyogT3VyIG93biBJUCBhZGRyZXNzLCBhcyBhIG51bGwtdGVybWluYXRlZCBzdHJpbmcuCisJICogVGhpcyBpcyB1c2VkIHRvIGdlbmVyYXRlIHRoZSBjbGllbnRpZCwgYW5kIHRoZSBjYWxsYmFjayBhZGRyZXNzLgorCSAqLworCWNoYXIJCQlpcF9hZGRyWzE2XTsKKwljaGFyICoJCQltbnRfcGF0aDsKKwlzdHJ1Y3QgbmZzNF9jbGllbnQgKgluZnM0X3N0YXRlOwkvKiBhbGwgTkZTdjQgc3RhdGUgc3RhcnRzIGhlcmUgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCW5mczRfc2libGluZ3M7CS8qIExpc3Qgb2Ygb3RoZXIgbmZzX3NlcnZlciBzdHJ1Y3RzCisJCQkJCQkgKiB0aGF0IHNoYXJlIHRoZSBzYW1lIGNsaWVudGlkCisJCQkJCQkgKi8KKwl1MzIJCQlhdHRyX2JpdG1hc2tbMl07LyogVjQgYml0bWFzayByZXByZXNlbnRpbmcgdGhlIHNldAorCQkJCQkJICAgb2YgYXR0cmlidXRlcyBzdXBwb3J0ZWQgb24gdGhpcworCQkJCQkJICAgZmlsZXN5c3RlbSAqLworCXUzMgkJCWFjbF9iaXRtYXNrOwkvKiBWNCBiaXRtYXNrIHJlcHJlc2VudGluZyB0aGUgQUNFcworCQkJCQkJICAgdGhhdCBhcmUgc3VwcG9ydGVkIG9uIHRoaXMKKwkJCQkJCSAgIGZpbGVzeXN0ZW0gKi8KKyNlbmRpZgorfTsKKworLyogU2VydmVyIGNhcGFiaWxpdGllcyAqLworI2RlZmluZSBORlNfQ0FQX1JFQURESVJQTFVTCSgxVSA8PCAwKQorI2RlZmluZSBORlNfQ0FQX0hBUkRMSU5LUwkoMVUgPDwgMSkKKyNkZWZpbmUgTkZTX0NBUF9TWU1MSU5LUwkoMVUgPDwgMikKKyNkZWZpbmUgTkZTX0NBUF9BQ0xTCQkoMVUgPDwgMykKKyNkZWZpbmUgTkZTX0NBUF9BVE9NSUNfT1BFTgkoMVUgPDwgNCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mc19pZG1hcC5oIGIvaW5jbHVkZS9saW51eC9uZnNfaWRtYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGYxZjI1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZnNfaWRtYXAuaApAQCAtMCwwICsxLDc2IEBACisvKgorICogaW5jbHVkZS9saW51eC9uZnNfaWRtYXAuaAorICoKKyAqICBVSUQgYW5kIEdJRCB0byBuYW1lIG1hcHBpbmcgZm9yIGNsaWVudHMuCisgKgorICogIENvcHlyaWdodCAoYykgMjAwMiBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBNaWNoaWdhbi4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBNYXJpdXMgQWFtb2R0IEVyaWtzZW4gPG1hcml1c0B1bWljaC5lZHU+CisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogIGFyZSBtZXQ6CisgKgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKyAqICBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiAgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCisgKiAgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorICogIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgKiAgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBORlNfSURNQVBfSAorI2RlZmluZSBORlNfSURNQVBfSAorCisvKiBYWFggZnJvbSBiaXRzL3V0bXAuaCAgKi8KKyNkZWZpbmUgSURNQVBfTkFNRVNaICAxMjgKKworI2RlZmluZSBJRE1BUF9UWVBFX1VTRVIgIDAKKyNkZWZpbmUgSURNQVBfVFlQRV9HUk9VUCAxCisKKyNkZWZpbmUgSURNQVBfQ09OVl9JRFRPTkFNRSAwCisjZGVmaW5lIElETUFQX0NPTlZfTkFNRVRPSUQgMQorCisjZGVmaW5lIElETUFQX1NUQVRVU19JTlZBTElETVNHIDB4MDEKKyNkZWZpbmUgSURNQVBfU1RBVFVTX0FHQUlOICAgICAgMHgwMgorI2RlZmluZSBJRE1BUF9TVEFUVVNfTE9PS1VQRkFJTCAweDA0CisjZGVmaW5lIElETUFQX1NUQVRVU19TVUNDRVNTICAgIDB4MDgKKworc3RydWN0IGlkbWFwX21zZyB7CisJX191OCAgaW1fdHlwZTsKKwlfX3U4ICBpbV9jb252OworCWNoYXIgIGltX25hbWVbSURNQVBfTkFNRVNaXTsKKwlfX3UzMiBpbV9pZDsKKwlfX3U4ICBpbV9zdGF0dXM7Cit9OworCisjaWZkZWYgX19LRVJORUxfXworCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9uIHRvIG1ha2UgdGhpcyBoZWFkZXIgaW5kZXBlbmRlbnQgb2Ygb3RoZXJzICovCitzdHJ1Y3QgbmZzNF9jbGllbnQ7CisKK3ZvaWQgbmZzX2lkbWFwX25ldyhzdHJ1Y3QgbmZzNF9jbGllbnQgKik7Cit2b2lkIG5mc19pZG1hcF9kZWxldGUoc3RydWN0IG5mczRfY2xpZW50ICopOworCitpbnQgbmZzX21hcF9uYW1lX3RvX3VpZChzdHJ1Y3QgbmZzNF9jbGllbnQgKiwgY29uc3QgY2hhciAqLCBzaXplX3QsIF9fdTMyICopOworaW50IG5mc19tYXBfZ3JvdXBfdG9fZ2lkKHN0cnVjdCBuZnM0X2NsaWVudCAqLCBjb25zdCBjaGFyICosIHNpemVfdCwgX191MzIgKik7CitpbnQgbmZzX21hcF91aWRfdG9fbmFtZShzdHJ1Y3QgbmZzNF9jbGllbnQgKiwgX191MzIsIGNoYXIgKik7CitpbnQgbmZzX21hcF9naWRfdG9fZ3JvdXAoc3RydWN0IG5mczRfY2xpZW50ICosIF9fdTMyLCBjaGFyICopOworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIE5GU19JRE1BUF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mc19tb3VudC5oIGIvaW5jbHVkZS9saW51eC9uZnNfbW91bnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDcxNDI4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZnNfbW91bnQuaApAQCAtMCwwICsxLDY1IEBACisjaWZuZGVmIF9MSU5VWF9ORlNfTU9VTlRfSAorI2RlZmluZSBfTElOVVhfTkZTX01PVU5UX0gKKworLyoKKyAqICBsaW51eC9pbmNsdWRlL2xpbnV4L25mc19tb3VudC5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5MiAgUmljayBTbGFka2V5CisgKgorICogIHN0cnVjdHVyZSBwYXNzZWQgZnJvbSB1c2VyLXNwYWNlIHRvIGtlcm5lbC1zcGFjZSBkdXJpbmcgYW4gbmZzIG1vdW50CisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L25mcy5oPgorI2luY2x1ZGUgPGxpbnV4L25mczIuaD4KKyNpbmNsdWRlIDxsaW51eC9uZnMzLmg+CisKKy8qCisgKiBXQVJOSU5HISAgRG8gbm90IGRlbGV0ZSBvciBjaGFuZ2UgdGhlIG9yZGVyIG9mIHRoZXNlIGZpZWxkcy4gIElmCisgKiBhIG5ldyBmaWVsZCBpcyByZXF1aXJlZCB0aGVuIGFkZCBpdCB0byB0aGUgZW5kLiAgVGhlIHZlcnNpb24gZmllbGQKKyAqIHRyYWNrcyB3aGljaCBmaWVsZHMgYXJlIHByZXNlbnQuICBUaGlzIHdpbGwgZW5zdXJlIHNvbWUgbWVhc3VyZSBvZgorICogbW91bnQtdG8ta2VybmVsIHZlcnNpb24gY29tcGF0aWJpbGl0eS4gIFNvbWUgb2YgdGhlc2UgYXJlbid0IHVzZWQgeWV0CisgKiBidXQgaGVyZSB0aGV5IGFyZSBhbnl3YXkuCisgKi8KKyNkZWZpbmUgTkZTX01PVU5UX1ZFUlNJT04JNgorI2RlZmluZSBORlNfTUFYX0NPTlRFWFRfTEVOCTI1NgorCitzdHJ1Y3QgbmZzX21vdW50X2RhdGEgeworCWludAkJdmVyc2lvbjsJCS8qIDEgKi8KKwlpbnQJCWZkOwkJCS8qIDEgKi8KKwlzdHJ1Y3QgbmZzMl9maAlvbGRfcm9vdDsJCS8qIDEgKi8KKwlpbnQJCWZsYWdzOwkJCS8qIDEgKi8KKwlpbnQJCXJzaXplOwkJCS8qIDEgKi8KKwlpbnQJCXdzaXplOwkJCS8qIDEgKi8KKwlpbnQJCXRpbWVvOwkJCS8qIDEgKi8KKwlpbnQJCXJldHJhbnM7CQkvKiAxICovCisJaW50CQlhY3JlZ21pbjsJCS8qIDEgKi8KKwlpbnQJCWFjcmVnbWF4OwkJLyogMSAqLworCWludAkJYWNkaXJtaW47CQkvKiAxICovCisJaW50CQlhY2Rpcm1heDsJCS8qIDEgKi8KKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjsJCS8qIDEgKi8KKwljaGFyCQlob3N0bmFtZVsyNTZdOwkJLyogMSAqLworCWludAkJbmFtbGVuOwkJCS8qIDIgKi8KKwl1bnNpZ25lZCBpbnQJYnNpemU7CQkJLyogMyAqLworCXN0cnVjdCBuZnMzX2ZoCXJvb3Q7CQkJLyogNCAqLworCWludAkJcHNldWRvZmxhdm9yOwkJLyogNSAqLworCWNoYXIJCWNvbnRleHRbTkZTX01BWF9DT05URVhUX0xFTiArIDFdOwkvKiA2ICovCit9OworCisvKiBiaXRzIGluIHRoZSBmbGFncyBmaWVsZCAqLworCisjZGVmaW5lIE5GU19NT1VOVF9TT0ZUCQkweDAwMDEJLyogMSAqLworI2RlZmluZSBORlNfTU9VTlRfSU5UUgkJMHgwMDAyCS8qIDEgKi8KKyNkZWZpbmUgTkZTX01PVU5UX1NFQ1VSRQkweDAwMDQJLyogMSAqLworI2RlZmluZSBORlNfTU9VTlRfUE9TSVgJCTB4MDAwOAkvKiAxICovCisjZGVmaW5lIE5GU19NT1VOVF9OT0NUTwkJMHgwMDEwCS8qIDEgKi8KKyNkZWZpbmUgTkZTX01PVU5UX05PQUMJCTB4MDAyMAkvKiAxICovCisjZGVmaW5lIE5GU19NT1VOVF9UQ1AJCTB4MDA0MAkvKiAyICovCisjZGVmaW5lIE5GU19NT1VOVF9WRVIzCQkweDAwODAJLyogMyAqLworI2RlZmluZSBORlNfTU9VTlRfS0VSQkVST1MJMHgwMTAwCS8qIDMgKi8KKyNkZWZpbmUgTkZTX01PVU5UX05PTkxNCQkweDAyMDAJLyogMyAqLworI2RlZmluZSBORlNfTU9VTlRfQlJPS0VOX1NVSUQJMHgwNDAwCS8qIDQgKi8KKyNkZWZpbmUgTkZTX01PVU5UX1NUUklDVExPQ0sJMHgxMDAwCS8qIHJlc2VydmVkIGZvciBORlN2NCAqLworI2RlZmluZSBORlNfTU9VTlRfU0VDRkxBVk9VUgkweDIwMDAJLyogNSAqLworI2RlZmluZSBORlNfTU9VTlRfRkxBR01BU0sJMHhGRkZGCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZnNfcGFnZS5oIGIvaW5jbHVkZS9saW51eC9uZnNfcGFnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5ZTQ4OTUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L25mc19wYWdlLmgKQEAgLTAsMCArMSwxNTEgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2xpbnV4L25mc19wYWdlLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgVHJvbmQgTXlrbGVidXN0CisgKgorICogTkZTIHBhZ2UgY2FjaGUgd3JhcHBlci4KKyAqLworCisjaWZuZGVmIF9MSU5VWF9ORlNfUEFHRV9ICisjZGVmaW5lIF9MSU5VWF9ORlNfUEFHRV9ICisKKworI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L25mc19mc19zYi5oPgorI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9hdXRoLmg+CisjaW5jbHVkZSA8bGludXgvbmZzX3hkci5oPgorCisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorCisvKgorICogVmFsaWQgZmxhZ3MgZm9yIGEgZGlydHkgYnVmZmVyCisgKi8KKyNkZWZpbmUgUEdfQlVTWQkJCTAKKyNkZWZpbmUgUEdfTkVFRF9DT01NSVQJCTEKKyNkZWZpbmUgUEdfTkVFRF9SRVNDSEVECQkyCisKK3N0cnVjdCBuZnNfcGFnZSB7CisJc3RydWN0IGxpc3RfaGVhZAl3Yl9saXN0LAkvKiBEZWZpbmVzIHN0YXRlIG9mIHBhZ2U6ICovCisJCQkJKndiX2xpc3RfaGVhZDsJLyogICAgICByZWFkL3dyaXRlL2NvbW1pdCAqLworCXN0cnVjdCBwYWdlCQkqd2JfcGFnZTsJLyogcGFnZSB0byByZWFkIGluL3dyaXRlIG91dCAqLworCXN0cnVjdCBuZnNfb3Blbl9jb250ZXh0CSp3Yl9jb250ZXh0OwkvKiBGaWxlIHN0YXRlIGNvbnRleHQgaW5mbyAqLworCWF0b21pY190CQl3Yl9jb21wbGV0ZTsJLyogaS9vcyB3ZSdyZSB3YWl0aW5nIGZvciAqLworCXVuc2lnbmVkIGxvbmcJCXdiX2luZGV4OwkvKiBPZmZzZXQgPj4gUEFHRV9DQUNIRV9TSElGVCAqLworCXVuc2lnbmVkIGludAkJd2Jfb2Zmc2V0LAkvKiBPZmZzZXQgJiB+UEFHRV9DQUNIRV9NQVNLICovCisJCQkJd2JfcGdiYXNlLAkvKiBTdGFydCBvZiBwYWdlIGRhdGEgKi8KKwkJCQl3Yl9ieXRlczsJLyogTGVuZ3RoIG9mIHJlcXVlc3QgKi8KKwlhdG9taWNfdAkJd2JfY291bnQ7CS8qIHJlZmVyZW5jZSBjb3VudCAqLworCXVuc2lnbmVkIGxvbmcJCXdiX2ZsYWdzOworCXN0cnVjdCBuZnNfd3JpdGV2ZXJmCXdiX3ZlcmY7CS8qIENvbW1pdCBjb29raWUgKi8KK307CisKKyNkZWZpbmUgTkZTX1dCQUNLX0JVU1kocmVxKQkodGVzdF9iaXQoUEdfQlVTWSwmKHJlcSktPndiX2ZsYWdzKSkKKyNkZWZpbmUgTkZTX05FRURfQ09NTUlUKHJlcSkJKHRlc3RfYml0KFBHX05FRURfQ09NTUlULCYocmVxKS0+d2JfZmxhZ3MpKQorI2RlZmluZSBORlNfTkVFRF9SRVNDSEVEKHJlcSkJKHRlc3RfYml0KFBHX05FRURfUkVTQ0hFRCwmKHJlcSktPndiX2ZsYWdzKSkKKworZXh0ZXJuCXN0cnVjdCBuZnNfcGFnZSAqbmZzX2NyZWF0ZV9yZXF1ZXN0KHN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICpjdHgsCisJCQkJCSAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQkgICAgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkJCSAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0LAorCQkJCQkgICAgdW5zaWduZWQgaW50IGNvdW50KTsKK2V4dGVybgl2b2lkIG5mc19jbGVhcl9yZXF1ZXN0KHN0cnVjdCBuZnNfcGFnZSAqcmVxKTsKK2V4dGVybgl2b2lkIG5mc19yZWxlYXNlX3JlcXVlc3Qoc3RydWN0IG5mc19wYWdlICpyZXEpOworCisKK2V4dGVybgl2b2lkIG5mc19saXN0X2FkZF9yZXF1ZXN0KHN0cnVjdCBuZnNfcGFnZSAqLCBzdHJ1Y3QgbGlzdF9oZWFkICopOworCitleHRlcm4JaW50IG5mc19zY2FuX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqLCBzdHJ1Y3QgbGlzdF9oZWFkICosCisJCQkgIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGludCk7CitleHRlcm4JaW50IG5mc19jb2FsZXNjZV9yZXF1ZXN0cyhzdHJ1Y3QgbGlzdF9oZWFkICosIHN0cnVjdCBsaXN0X2hlYWQgKiwKKwkJCQkgIHVuc2lnbmVkIGludCk7CitleHRlcm4gIGludCBuZnNfd2FpdF9vbl9yZXF1ZXN0KHN0cnVjdCBuZnNfcGFnZSAqKTsKK2V4dGVybgl2b2lkIG5mc191bmxvY2tfcmVxdWVzdChzdHJ1Y3QgbmZzX3BhZ2UgKnJlcSk7CisKKy8qCisgKiBMb2NrIHRoZSBwYWdlIG9mIGFuIGFzeW5jaHJvbm91cyByZXF1ZXN0IHdpdGhvdXQgaW5jcmVtZW50aW5nIHRoZSB3Yl9jb3VudAorICovCitzdGF0aWMgaW5saW5lIGludAorbmZzX2xvY2tfcmVxdWVzdF9kb250Z2V0KHN0cnVjdCBuZnNfcGFnZSAqcmVxKQoreworCWlmICh0ZXN0X2FuZF9zZXRfYml0KFBHX0JVU1ksICZyZXEtPndiX2ZsYWdzKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBMb2NrIHRoZSBwYWdlIG9mIGFuIGFzeW5jaHJvbm91cyByZXF1ZXN0CisgKi8KK3N0YXRpYyBpbmxpbmUgaW50CituZnNfbG9ja19yZXF1ZXN0KHN0cnVjdCBuZnNfcGFnZSAqcmVxKQoreworCWlmICh0ZXN0X2FuZF9zZXRfYml0KFBHX0JVU1ksICZyZXEtPndiX2ZsYWdzKSkKKwkJcmV0dXJuIDA7CisJYXRvbWljX2luYygmcmVxLT53Yl9jb3VudCk7CisJcmV0dXJuIDE7Cit9CisKKworLyoqCisgKiBuZnNfbGlzdF9yZW1vdmVfcmVxdWVzdCAtIFJlbW92ZSBhIHJlcXVlc3QgZnJvbSBpdHMgd2JfbGlzdAorICogQHJlcTogcmVxdWVzdAorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK25mc19saXN0X3JlbW92ZV9yZXF1ZXN0KHN0cnVjdCBuZnNfcGFnZSAqcmVxKQoreworCWlmIChsaXN0X2VtcHR5KCZyZXEtPndiX2xpc3QpKQorCQlyZXR1cm47CisJaWYgKCFORlNfV0JBQ0tfQlVTWShyZXEpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiTkZTOiB1bmxvY2tlZCByZXF1ZXN0IGF0dGVtcHRlZCByZW1vdmVkIGZyb20gbGlzdCFcbiIpOworCQlCVUcoKTsKKwl9CisJbGlzdF9kZWxfaW5pdCgmcmVxLT53Yl9saXN0KTsKKwlyZXEtPndiX2xpc3RfaGVhZCA9IE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CituZnNfZGVmZXJfY29tbWl0KHN0cnVjdCBuZnNfcGFnZSAqcmVxKQoreworCWlmICh0ZXN0X2FuZF9zZXRfYml0KFBHX05FRURfQ09NTUlULCAmcmVxLT53Yl9mbGFncykpCisJCXJldHVybiAwOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK25mc19jbGVhcl9jb21taXQoc3RydWN0IG5mc19wYWdlICpyZXEpCit7CisJc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCk7CisJY2xlYXJfYml0KFBHX05FRURfQ09NTUlULCAmcmVxLT53Yl9mbGFncyk7CisJc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK25mc19kZWZlcl9yZXNjaGVkdWxlKHN0cnVjdCBuZnNfcGFnZSAqcmVxKQoreworCWlmICh0ZXN0X2FuZF9zZXRfYml0KFBHX05FRURfUkVTQ0hFRCwgJnJlcS0+d2JfZmxhZ3MpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCituZnNfY2xlYXJfcmVzY2hlZHVsZShzdHJ1Y3QgbmZzX3BhZ2UgKnJlcSkKK3sKKwlzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKTsKKwljbGVhcl9iaXQoUEdfTkVFRF9SRVNDSEVELCAmcmVxLT53Yl9mbGFncyk7CisJc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbmZzX3BhZ2UgKgorbmZzX2xpc3RfZW50cnkoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKK3sKKwlyZXR1cm4gbGlzdF9lbnRyeShoZWFkLCBzdHJ1Y3QgbmZzX3BhZ2UsIHdiX2xpc3QpOworfQorCitzdGF0aWMgaW5saW5lCitsb2ZmX3QgcmVxX29mZnNldChzdHJ1Y3QgbmZzX3BhZ2UgKnJlcSkKK3sKKwlyZXR1cm4gKCgobG9mZl90KXJlcS0+d2JfaW5kZXgpIDw8IFBBR0VfQ0FDSEVfU0hJRlQpICsgcmVxLT53Yl9vZmZzZXQ7Cit9CisKKyNlbmRpZiAvKiBfTElOVVhfTkZTX1BBR0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZnNfeGRyLmggYi9pbmNsdWRlL2xpbnV4L25mc194ZHIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzAzN2Q5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZnNfeGRyLmgKQEAgLTAsMCArMSw3MzUgQEAKKyNpZm5kZWYgX0xJTlVYX05GU19YRFJfSAorI2RlZmluZSBfTElOVVhfTkZTX1hEUl9ICisKKyNpbmNsdWRlIDxsaW51eC9zdW5ycGMveHBydC5oPgorCitzdHJ1Y3QgbmZzNF9mc2lkIHsKKwlfX3U2NCBtYWpvcjsKKwlfX3U2NCBtaW5vcjsKK307CisKK3N0cnVjdCBuZnNfZmF0dHIgeworCXVuc2lnbmVkIHNob3J0CQl2YWxpZDsJCS8qIHdoaWNoIGZpZWxkcyBhcmUgdmFsaWQgKi8KKwlfX3U2NAkJCXByZV9zaXplOwkvKiBwcmVfb3BfYXR0ci5zaXplCSAgKi8KKwlzdHJ1Y3QgdGltZXNwZWMJCXByZV9tdGltZTsJLyogcHJlX29wX2F0dHIubXRpbWUJICAqLworCXN0cnVjdCB0aW1lc3BlYwkJcHJlX2N0aW1lOwkvKiBwcmVfb3BfYXR0ci5jdGltZQkgICovCisJZW51bSBuZnNfZnR5cGUJCXR5cGU7CQkvKiBhbHdheXMgdXNlIE5GU3YyIHR5cGVzICovCisJX191MzIJCQltb2RlOworCV9fdTMyCQkJbmxpbms7CisJX191MzIJCQl1aWQ7CisJX191MzIJCQlnaWQ7CisJX191NjQJCQlzaXplOworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCV9fdTMyCWJsb2Nrc2l6ZTsKKwkJCV9fdTMyCWJsb2NrczsKKwkJfSBuZnMyOworCQlzdHJ1Y3QgeworCQkJX191NjQJdXNlZDsKKwkJfSBuZnMzOworCX0gZHU7CisJZGV2X3QJCQlyZGV2OworCXVuaW9uIHsKKwkJX191NjQJCW5mczM7CQkvKiBhbHNvIG5mczIgKi8KKwkJc3RydWN0IG5mczRfZnNpZCBuZnM0OworCX0gZnNpZF91OworCV9fdTY0CQkJZmlsZWlkOworCXN0cnVjdCB0aW1lc3BlYwkJYXRpbWU7CisJc3RydWN0IHRpbWVzcGVjCQltdGltZTsKKwlzdHJ1Y3QgdGltZXNwZWMJCWN0aW1lOworCV9fdTMyCQkJYml0bWFwWzJdOwkvKiBORlN2NCByZXR1cm5lZCBhdHRyaWJ1dGUgYml0bWFwICovCisJX191NjQJCQljaGFuZ2VfYXR0cjsJLyogTkZTdjQgY2hhbmdlIGF0dHJpYnV0ZSAqLworCV9fdTY0CQkJcHJlX2NoYW5nZV9hdHRyOy8qIHByZS1vcCBORlN2NCBjaGFuZ2UgYXR0cmlidXRlICovCisJdW5zaWduZWQgbG9uZwkJdGltZXN0YW1wOworfTsKKworI2RlZmluZSBORlNfQVRUUl9XQ0MJCTB4MDAwMQkJLyogcHJlLW9wIFdDQyBkYXRhICAgICovCisjZGVmaW5lIE5GU19BVFRSX0ZBVFRSCQkweDAwMDIJCS8qIHBvc3Qtb3AgYXR0cmlidXRlcyAqLworI2RlZmluZSBORlNfQVRUUl9GQVRUUl9WMwkweDAwMDQJCS8qIE5GU3YzIGF0dHJpYnV0ZXMgKi8KKyNkZWZpbmUgTkZTX0FUVFJfRkFUVFJfVjQJMHgwMDA4CisjZGVmaW5lIE5GU19BVFRSX1BSRV9DSEFOR0UJMHgwMDEwCisKKy8qCisgKiBJbmZvIG9uIHRoZSBmaWxlIHN5c3RlbQorICovCitzdHJ1Y3QgbmZzX2ZzaW5mbyB7CisJc3RydWN0IG5mc19mYXR0cgkqZmF0dHI7IC8qIFBvc3Qtb3AgYXR0cmlidXRlcyAqLworCV9fdTMyCQkJcnRtYXg7CS8qIG1heC4gIHJlYWQgdHJhbnNmZXIgc2l6ZSAqLworCV9fdTMyCQkJcnRwcmVmOwkvKiBwcmVmLiByZWFkIHRyYW5zZmVyIHNpemUgKi8KKwlfX3UzMgkJCXJ0bXVsdDsJLyogcmVhZHMgc2hvdWxkIGJlIG11bHRpcGxlIG9mIHRoaXMgKi8KKwlfX3UzMgkJCXd0bWF4OwkvKiBtYXguICB3cml0ZSB0cmFuc2ZlciBzaXplICovCisJX191MzIJCQl3dHByZWY7CS8qIHByZWYuIHdyaXRlIHRyYW5zZmVyIHNpemUgKi8KKwlfX3UzMgkJCXd0bXVsdDsJLyogd3JpdGVzIHNob3VsZCBiZSBtdWx0aXBsZSBvZiB0aGlzICovCisJX191MzIJCQlkdHByZWY7CS8qIHByZWYuIHJlYWRkaXIgdHJhbnNmZXIgc2l6ZSAqLworCV9fdTY0CQkJbWF4ZmlsZXNpemU7CisJX191MzIJCQlsZWFzZV90aW1lOyAvKiBpbiBzZWNvbmRzICovCit9OworCitzdHJ1Y3QgbmZzX2Zzc3RhdCB7CisJc3RydWN0IG5mc19mYXR0cgkqZmF0dHI7IC8qIFBvc3Qtb3AgYXR0cmlidXRlcyAqLworCV9fdTY0CQkJdGJ5dGVzOwkvKiB0b3RhbCBzaXplIGluIGJ5dGVzICovCisJX191NjQJCQlmYnl0ZXM7CS8qICMgb2YgZnJlZSBieXRlcyAqLworCV9fdTY0CQkJYWJ5dGVzOwkvKiAjIG9mIGJ5dGVzIGF2YWlsYWJsZSB0byB1c2VyICovCisJX191NjQJCQl0ZmlsZXM7CS8qICMgb2YgZmlsZXMgKi8KKwlfX3U2NAkJCWZmaWxlczsJLyogIyBvZiBmcmVlIGZpbGVzICovCisJX191NjQJCQlhZmlsZXM7CS8qICMgb2YgZmlsZXMgYXZhaWxhYmxlIHRvIHVzZXIgKi8KK307CisKK3N0cnVjdCBuZnMyX2Zzc3RhdCB7CisJX191MzIJCQl0c2l6ZTsgIC8qIFNlcnZlciB0cmFuc2ZlciBzaXplICovCisJX191MzIJCQlic2l6ZTsgIC8qIEZpbGVzeXN0ZW0gYmxvY2sgc2l6ZSAqLworCV9fdTMyCQkJYmxvY2tzOyAvKiBOby4gb2YgImJzaXplIiBibG9ja3Mgb24gZmlsZXN5c3RlbSAqLworCV9fdTMyCQkJYmZyZWU7ICAvKiBOby4gb2YgZnJlZSAiYnNpemUiIGJsb2NrcyAqLworCV9fdTMyCQkJYmF2YWlsOyAvKiBOby4gb2YgYXZhaWxhYmxlICJic2l6ZSIgYmxvY2tzICovCit9OworCitzdHJ1Y3QgbmZzX3BhdGhjb25mIHsKKwlzdHJ1Y3QgbmZzX2ZhdHRyCSpmYXR0cjsgLyogUG9zdC1vcCBhdHRyaWJ1dGVzICovCisJX191MzIJCQltYXhfbGluazsgLyogbWF4ICMgb2YgaGFyZCBsaW5rcyAqLworCV9fdTMyCQkJbWF4X25hbWVsZW47IC8qIG1heCBuYW1lIGxlbmd0aCAqLworfTsKKworc3RydWN0IG5mczRfY2hhbmdlX2luZm8geworCXUzMgkJCWF0b21pYzsKKwl1NjQJCQliZWZvcmU7CisJdTY0CQkJYWZ0ZXI7Cit9OworCisvKgorICogQXJndW1lbnRzIHRvIHRoZSBvcGVuIGNhbGwuCisgKi8KK3N0cnVjdCBuZnNfb3BlbmFyZ3MgeworCWNvbnN0IHN0cnVjdCBuZnNfZmggKglmaDsKKwlfX3UzMiAgICAgICAgICAgICAgICAgICBzZXFpZDsKKwlpbnQJCQlvcGVuX2ZsYWdzOworCV9fdTY0ICAgICAgICAgICAgICAgICAgIGNsaWVudGlkOworCV9fdTMyICAgICAgICAgICAgICAgICAgIGlkOworCXVuaW9uIHsKKwkJc3RydWN0IGlhdHRyICogIGF0dHJzOyAgICAvKiBVTkNIRUNLRUQsIEdVQVJERUQgKi8KKwkJbmZzNF92ZXJpZmllciAgIHZlcmlmaWVyOyAvKiBFWENMVVNJVkUgKi8KKwkJbmZzNF9zdGF0ZWlkCWRlbGVnYXRpb247CQkvKiBDTEFJTV9ERUxFR0FURV9DVVIgKi8KKwkJaW50CQlkZWxlZ2F0aW9uX3R5cGU7CS8qIENMQUlNX1BSRVZJT1VTICovCisJfSB1OworCWNvbnN0IHN0cnVjdCBxc3RyICoJbmFtZTsKKwljb25zdCBzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyOwkgLyogTmVlZGVkIGZvciBJRCBtYXBwaW5nICovCisJY29uc3QgdTMyICoJCWJpdG1hc2s7CisJX191MzIJCQljbGFpbTsKK307CisKK3N0cnVjdCBuZnNfb3BlbnJlcyB7CisJbmZzNF9zdGF0ZWlkICAgICAgICAgICAgc3RhdGVpZDsKKwlzdHJ1Y3QgbmZzX2ZoICAgICAgICAgICBmaDsKKwlzdHJ1Y3QgbmZzNF9jaGFuZ2VfaW5mbwljaW5mbzsKKwlfX3UzMiAgICAgICAgICAgICAgICAgICByZmxhZ3M7CisJc3RydWN0IG5mc19mYXR0ciAqICAgICAgZl9hdHRyOworCWNvbnN0IHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXI7CisJaW50CQkJZGVsZWdhdGlvbl90eXBlOworCW5mczRfc3RhdGVpZAkJZGVsZWdhdGlvbjsKKwlfX3UzMgkJCWRvX3JlY2FsbDsKKwlfX3U2NAkJCW1heHNpemU7Cit9OworCisvKgorICogQXJndW1lbnRzIHRvIHRoZSBvcGVuX2NvbmZpcm0gY2FsbC4KKyAqLworc3RydWN0IG5mc19vcGVuX2NvbmZpcm1hcmdzIHsKKwljb25zdCBzdHJ1Y3QgbmZzX2ZoICoJZmg7CisJbmZzNF9zdGF0ZWlkICAgICAgICAgICAgc3RhdGVpZDsKKwlfX3UzMiAgICAgICAgICAgICAgICAgICBzZXFpZDsKK307CisKK3N0cnVjdCBuZnNfb3Blbl9jb25maXJtcmVzIHsKKwluZnM0X3N0YXRlaWQgICAgICAgICAgICBzdGF0ZWlkOworfTsKKworLyoKKyAqIEFyZ3VtZW50cyB0byB0aGUgY2xvc2UgY2FsbC4KKyAqLworc3RydWN0IG5mc19jbG9zZWFyZ3MgeworCXN0cnVjdCBuZnNfZmggKiAgICAgICAgIGZoOworCW5mczRfc3RhdGVpZCAgICAgICAgICAgIHN0YXRlaWQ7CisJX191MzIgICAgICAgICAgICAgICAgICAgc2VxaWQ7CisJaW50CQkJb3Blbl9mbGFnczsKK307CisKK3N0cnVjdCBuZnNfY2xvc2VyZXMgeworCW5mczRfc3RhdGVpZCAgICAgICAgICAgIHN0YXRlaWQ7Cit9OworLyoKKyAqICAqIEFyZ3VtZW50cyB0byB0aGUgbG9jayxsb2NrdCwgYW5kIGxvY2t1IGNhbGwuCisgKiAgICovCitzdHJ1Y3QgbmZzX2xvd25lciB7CisJX191NjQgICAgICAgICAgIGNsaWVudGlkOworCXUzMiAgICAgICAgICAgICAgICAgICAgIGlkOworfTsKKworc3RydWN0IG5mc19vcGVuX3RvX2xvY2sgeworCV9fdTMyICAgICAgICAgICAgICAgICAgIG9wZW5fc2VxaWQ7CisJbmZzNF9zdGF0ZWlkICAgICAgICAgICAgb3Blbl9zdGF0ZWlkOworCV9fdTMyICAgICAgICAgICAgICAgICAgIGxvY2tfc2VxaWQ7CisJc3RydWN0IG5mc19sb3duZXIgICAgICAgbG9ja19vd25lcjsKK307CisKK3N0cnVjdCBuZnNfZXhpc3RfbG9jayB7CisJbmZzNF9zdGF0ZWlkICAgICAgICAgICAgc3RhdGVpZDsKKwlfX3UzMiAgICAgICAgICAgICAgICAgICBzZXFpZDsKK307CisKK3N0cnVjdCBuZnNfbG9ja19vcGFyZ3MgeworCV9fdTMyICAgICAgICAgICAgICAgICAgIHJlY2xhaW07CisJX191MzIgICAgICAgICAgICAgICAgICAgbmV3X2xvY2tfb3duZXI7CisJdW5pb24geworCQlzdHJ1Y3QgbmZzX29wZW5fdG9fbG9jayAqb3Blbl9sb2NrOworCQlzdHJ1Y3QgbmZzX2V4aXN0X2xvY2sgICAqZXhpc3RfbG9jazsKKwl9IHU7Cit9OworCitzdHJ1Y3QgbmZzX2xvY2t1X29wYXJncyB7CisJX191MzIgICAgICAgICAgICAgICAgICAgc2VxaWQ7CisJbmZzNF9zdGF0ZWlkICAgICAgICAgICAgc3RhdGVpZDsKK307CisKK3N0cnVjdCBuZnNfbG9ja2FyZ3MgeworCXN0cnVjdCBuZnNfZmggKiAgICAgICAgIGZoOworCV9fdTMyICAgICAgICAgICAgICAgICAgIHR5cGU7CisJX191NjQgICAgICAgICAgICAgICAgICAgb2Zmc2V0OyAKKwlfX3U2NCAgICAgICAgICAgICAgICAgICBsZW5ndGg7IAorCXVuaW9uIHsKKwkJc3RydWN0IG5mc19sb2NrX29wYXJncyAgKmxvY2s7ICAgIC8qIExPQ0sgICovCisJCXN0cnVjdCBuZnNfbG93bmVyICAgICAgICpsb2NrdDsgIC8qIExPQ0tUICovCisJCXN0cnVjdCBuZnNfbG9ja3Vfb3BhcmdzICpsb2NrdTsgIC8qIExPQ0tVICovCisJfSB1OworfTsKKworc3RydWN0IG5mc19sb2NrX2RlbmllZCB7CisJX191NjQgICAgICAgICAgICAgICAgICAgb2Zmc2V0OworCV9fdTY0ICAgICAgICAgICAgICAgICAgIGxlbmd0aDsKKwlfX3UzMiAgICAgICAgICAgICAgICAgICB0eXBlOworCXN0cnVjdCBuZnNfbG93bmVyICAgCW93bmVyOworfTsKKworc3RydWN0IG5mc19sb2NrcmVzIHsKKwl1bmlvbiB7CisJCW5mczRfc3RhdGVpZCAgICAgICAgICAgIHN0YXRlaWQ7LyogTE9DSyBzdWNjZXNzLCBMT0NLVSAqLworCQlzdHJ1Y3QgbmZzX2xvY2tfZGVuaWVkICBkZW5pZWQ7IC8qIExPQ0sgZmFpbGVkLCBMT0NLVCBzdWNjZXNzICovCisJfSB1OworCWNvbnN0IHN0cnVjdCBuZnNfc2VydmVyICoJc2VydmVyOworfTsKKworc3RydWN0IG5mczRfZGVsZWdyZXR1cm5hcmdzIHsKKwljb25zdCBzdHJ1Y3QgbmZzX2ZoICpmaGFuZGxlOworCWNvbnN0IG5mczRfc3RhdGVpZCAqc3RhdGVpZDsKK307CisKKy8qCisgKiBBcmd1bWVudHMgdG8gdGhlIHJlYWQgY2FsbC4KKyAqLworCisjZGVmaW5lIE5GU19SRUFEX01BWElPVgkJKDlVKQorI2lmIChORlNfUkVBRF9NQVhJT1YgPiAoTUFYX0lPVkVDIC0yKSkKKyNlcnJvciAiTkZTX1JFQURfTUFYSU9WIGlzIHRvbyBsYXJnZSIKKyNlbmRpZgorCitzdHJ1Y3QgbmZzX3JlYWRhcmdzIHsKKwlzdHJ1Y3QgbmZzX2ZoICoJCWZoOworCXN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICpjb250ZXh0OworCV9fdTY0CQkJb2Zmc2V0OworCV9fdTMyCQkJY291bnQ7CisJdW5zaWduZWQgaW50CQlwZ2Jhc2U7CisJc3RydWN0IHBhZ2UgKioJCXBhZ2VzOworfTsKKworc3RydWN0IG5mc19yZWFkcmVzIHsKKwlzdHJ1Y3QgbmZzX2ZhdHRyICoJZmF0dHI7CisJX191MzIJCQljb3VudDsKKwlpbnQgICAgICAgICAgICAgICAgICAgICBlb2Y7Cit9OworCisvKgorICogQXJndW1lbnRzIHRvIHRoZSB3cml0ZSBjYWxsLgorICovCisjZGVmaW5lIE5GU19XUklURV9NQVhJT1YJKDlVKQorI2lmIChORlNfV1JJVEVfTUFYSU9WID4gKE1BWF9JT1ZFQyAtMikpCisjZXJyb3IgIk5GU19XUklURV9NQVhJT1YgaXMgdG9vIGxhcmdlIgorI2VuZGlmCisKK3N0cnVjdCBuZnNfd3JpdGVhcmdzIHsKKwlzdHJ1Y3QgbmZzX2ZoICoJCWZoOworCXN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICpjb250ZXh0OworCV9fdTY0CQkJb2Zmc2V0OworCV9fdTMyCQkJY291bnQ7CisJZW51bSBuZnMzX3N0YWJsZV9ob3cJc3RhYmxlOworCXVuc2lnbmVkIGludAkJcGdiYXNlOworCXN0cnVjdCBwYWdlICoqCQlwYWdlczsKK307CisKK3N0cnVjdCBuZnNfd3JpdGV2ZXJmIHsKKwllbnVtIG5mczNfc3RhYmxlX2hvdwljb21taXR0ZWQ7CisJX191MzIJCQl2ZXJpZmllclsyXTsKK307CisKK3N0cnVjdCBuZnNfd3JpdGVyZXMgeworCXN0cnVjdCBuZnNfZmF0dHIgKglmYXR0cjsKKwlzdHJ1Y3QgbmZzX3dyaXRldmVyZiAqCXZlcmY7CisJX191MzIJCQljb3VudDsKK307CisKKy8qCisgKiBBcmd1bWVudCBzdHJ1Y3QgZm9yIGRlY29kZV9lbnRyeSBmdW5jdGlvbgorICovCitzdHJ1Y3QgbmZzX2VudHJ5IHsKKwlfX3U2NAkJCWlubzsKKwlfX3U2NAkJCWNvb2tpZSwKKwkJCQlwcmV2X2Nvb2tpZTsKKwljb25zdCBjaGFyICoJCW5hbWU7CisJdW5zaWduZWQgaW50CQlsZW47CisJaW50CQkJZW9mOworCXN0cnVjdCBuZnNfZmggKgkJZmg7CisJc3RydWN0IG5mc19mYXR0ciAqCWZhdHRyOworfTsKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgdHlwZXMgYXJlIGZvciBORlN2MiBvbmx5LgorICovCitzdHJ1Y3QgbmZzX3NhdHRyYXJncyB7CisJc3RydWN0IG5mc19maCAqCQlmaDsKKwlzdHJ1Y3QgaWF0dHIgKgkJc2F0dHI7Cit9OworCitzdHJ1Y3QgbmZzX2Rpcm9wYXJncyB7CisJc3RydWN0IG5mc19maCAqCQlmaDsKKwljb25zdCBjaGFyICoJCW5hbWU7CisJdW5zaWduZWQgaW50CQlsZW47Cit9OworCitzdHJ1Y3QgbmZzX2NyZWF0ZWFyZ3MgeworCXN0cnVjdCBuZnNfZmggKgkJZmg7CisJY29uc3QgY2hhciAqCQluYW1lOworCXVuc2lnbmVkIGludAkJbGVuOworCXN0cnVjdCBpYXR0ciAqCQlzYXR0cjsKK307CisKK3N0cnVjdCBuZnNfcmVuYW1lYXJncyB7CisJc3RydWN0IG5mc19maCAqCQlmcm9tZmg7CisJY29uc3QgY2hhciAqCQlmcm9tbmFtZTsKKwl1bnNpZ25lZCBpbnQJCWZyb21sZW47CisJc3RydWN0IG5mc19maCAqCQl0b2ZoOworCWNvbnN0IGNoYXIgKgkJdG9uYW1lOworCXVuc2lnbmVkIGludAkJdG9sZW47Cit9OworCitzdHJ1Y3QgbmZzX3NldGF0dHJhcmdzIHsKKwlzdHJ1Y3QgbmZzX2ZoICogICAgICAgICAgICAgICAgIGZoOworCW5mczRfc3RhdGVpZCAgICAgICAgICAgICAgICAgICAgc3RhdGVpZDsKKwlzdHJ1Y3QgaWF0dHIgKiAgICAgICAgICAgICAgICAgIGlhcDsKKwljb25zdCBzdHJ1Y3QgbmZzX3NlcnZlciAqCXNlcnZlcjsgLyogTmVlZGVkIGZvciBuYW1lIG1hcHBpbmcgKi8KKwljb25zdCB1MzIgKgkJCWJpdG1hc2s7Cit9OworCitzdHJ1Y3QgbmZzX3NldGF0dHJyZXMgeworCXN0cnVjdCBuZnNfZmF0dHIgKiAgICAgICAgICAgICAgZmF0dHI7CisJY29uc3Qgc3RydWN0IG5mc19zZXJ2ZXIgKglzZXJ2ZXI7Cit9OworCitzdHJ1Y3QgbmZzX2xpbmthcmdzIHsKKwlzdHJ1Y3QgbmZzX2ZoICoJCWZyb21maDsKKwlzdHJ1Y3QgbmZzX2ZoICoJCXRvZmg7CisJY29uc3QgY2hhciAqCQl0b25hbWU7CisJdW5zaWduZWQgaW50CQl0b2xlbjsKK307CisKK3N0cnVjdCBuZnNfc3ltbGlua2FyZ3MgeworCXN0cnVjdCBuZnNfZmggKgkJZnJvbWZoOworCWNvbnN0IGNoYXIgKgkJZnJvbW5hbWU7CisJdW5zaWduZWQgaW50CQlmcm9tbGVuOworCWNvbnN0IGNoYXIgKgkJdG9wYXRoOworCXVuc2lnbmVkIGludAkJdG9sZW47CisJc3RydWN0IGlhdHRyICoJCXNhdHRyOworfTsKKworc3RydWN0IG5mc19yZWFkZGlyYXJncyB7CisJc3RydWN0IG5mc19maCAqCQlmaDsKKwlfX3UzMgkJCWNvb2tpZTsKKwl1bnNpZ25lZCBpbnQJCWNvdW50OworCXN0cnVjdCBwYWdlICoqCQlwYWdlczsKK307CisKK3N0cnVjdCBuZnNfZGlyb3BvayB7CisJc3RydWN0IG5mc19maCAqCQlmaDsKKwlzdHJ1Y3QgbmZzX2ZhdHRyICoJZmF0dHI7Cit9OworCitzdHJ1Y3QgbmZzX3JlYWRsaW5rYXJncyB7CisJc3RydWN0IG5mc19maCAqCQlmaDsKKwl1bnNpZ25lZCBpbnQJCXBnYmFzZTsKKwl1bnNpZ25lZCBpbnQJCXBnbGVuOworCXN0cnVjdCBwYWdlICoqCQlwYWdlczsKK307CisKK3N0cnVjdCBuZnMzX3NhdHRyYXJncyB7CisJc3RydWN0IG5mc19maCAqCQlmaDsKKwlzdHJ1Y3QgaWF0dHIgKgkJc2F0dHI7CisJdW5zaWduZWQgaW50CQlndWFyZDsKKwlzdHJ1Y3QgdGltZXNwZWMJCWd1YXJkdGltZTsKK307CisKK3N0cnVjdCBuZnMzX2Rpcm9wYXJncyB7CisJc3RydWN0IG5mc19maCAqCQlmaDsKKwljb25zdCBjaGFyICoJCW5hbWU7CisJdW5zaWduZWQgaW50CQlsZW47Cit9OworCitzdHJ1Y3QgbmZzM19hY2Nlc3NhcmdzIHsKKwlzdHJ1Y3QgbmZzX2ZoICoJCWZoOworCV9fdTMyCQkJYWNjZXNzOworfTsKKworc3RydWN0IG5mczNfY3JlYXRlYXJncyB7CisJc3RydWN0IG5mc19maCAqCQlmaDsKKwljb25zdCBjaGFyICoJCW5hbWU7CisJdW5zaWduZWQgaW50CQlsZW47CisJc3RydWN0IGlhdHRyICoJCXNhdHRyOworCWVudW0gbmZzM19jcmVhdGVtb2RlCWNyZWF0ZW1vZGU7CisJX191MzIJCQl2ZXJpZmllclsyXTsKK307CisKK3N0cnVjdCBuZnMzX21rZGlyYXJncyB7CisJc3RydWN0IG5mc19maCAqCQlmaDsKKwljb25zdCBjaGFyICoJCW5hbWU7CisJdW5zaWduZWQgaW50CQlsZW47CisJc3RydWN0IGlhdHRyICoJCXNhdHRyOworfTsKKworc3RydWN0IG5mczNfc3ltbGlua2FyZ3MgeworCXN0cnVjdCBuZnNfZmggKgkJZnJvbWZoOworCWNvbnN0IGNoYXIgKgkJZnJvbW5hbWU7CisJdW5zaWduZWQgaW50CQlmcm9tbGVuOworCWNvbnN0IGNoYXIgKgkJdG9wYXRoOworCXVuc2lnbmVkIGludAkJdG9sZW47CisJc3RydWN0IGlhdHRyICoJCXNhdHRyOworfTsKKworc3RydWN0IG5mczNfbWtub2RhcmdzIHsKKwlzdHJ1Y3QgbmZzX2ZoICoJCWZoOworCWNvbnN0IGNoYXIgKgkJbmFtZTsKKwl1bnNpZ25lZCBpbnQJCWxlbjsKKwllbnVtIG5mczNfZnR5cGUJCXR5cGU7CisJc3RydWN0IGlhdHRyICoJCXNhdHRyOworCWRldl90CQkJcmRldjsKK307CisKK3N0cnVjdCBuZnMzX3JlbmFtZWFyZ3MgeworCXN0cnVjdCBuZnNfZmggKgkJZnJvbWZoOworCWNvbnN0IGNoYXIgKgkJZnJvbW5hbWU7CisJdW5zaWduZWQgaW50CQlmcm9tbGVuOworCXN0cnVjdCBuZnNfZmggKgkJdG9maDsKKwljb25zdCBjaGFyICoJCXRvbmFtZTsKKwl1bnNpZ25lZCBpbnQJCXRvbGVuOworfTsKKworc3RydWN0IG5mczNfbGlua2FyZ3MgeworCXN0cnVjdCBuZnNfZmggKgkJZnJvbWZoOworCXN0cnVjdCBuZnNfZmggKgkJdG9maDsKKwljb25zdCBjaGFyICoJCXRvbmFtZTsKKwl1bnNpZ25lZCBpbnQJCXRvbGVuOworfTsKKworc3RydWN0IG5mczNfcmVhZGRpcmFyZ3MgeworCXN0cnVjdCBuZnNfZmggKgkJZmg7CisJX191NjQJCQljb29raWU7CisJX191MzIJCQl2ZXJmWzJdOworCWludAkJCXBsdXM7CisJdW5zaWduZWQgaW50ICAgICAgICAgICAgY291bnQ7CisJc3RydWN0IHBhZ2UgKioJCXBhZ2VzOworfTsKKworc3RydWN0IG5mczNfZGlyb3ByZXMgeworCXN0cnVjdCBuZnNfZmF0dHIgKglkaXJfYXR0cjsKKwlzdHJ1Y3QgbmZzX2ZoICoJCWZoOworCXN0cnVjdCBuZnNfZmF0dHIgKglmYXR0cjsKK307CisKK3N0cnVjdCBuZnMzX2FjY2Vzc3JlcyB7CisJc3RydWN0IG5mc19mYXR0ciAqCWZhdHRyOworCV9fdTMyCQkJYWNjZXNzOworfTsKKworc3RydWN0IG5mczNfcmVhZGxpbmthcmdzIHsKKwlzdHJ1Y3QgbmZzX2ZoICoJCWZoOworCXVuc2lnbmVkIGludAkJcGdiYXNlOworCXVuc2lnbmVkIGludAkJcGdsZW47CisJc3RydWN0IHBhZ2UgKioJCXBhZ2VzOworfTsKKworc3RydWN0IG5mczNfcmVuYW1lcmVzIHsKKwlzdHJ1Y3QgbmZzX2ZhdHRyICoJZnJvbWF0dHI7CisJc3RydWN0IG5mc19mYXR0ciAqCXRvYXR0cjsKK307CisKK3N0cnVjdCBuZnMzX2xpbmtyZXMgeworCXN0cnVjdCBuZnNfZmF0dHIgKglkaXJfYXR0cjsKKwlzdHJ1Y3QgbmZzX2ZhdHRyICoJZmF0dHI7Cit9OworCitzdHJ1Y3QgbmZzM19yZWFkZGlycmVzIHsKKwlzdHJ1Y3QgbmZzX2ZhdHRyICoJZGlyX2F0dHI7CisJX191MzIgKgkJCXZlcmY7CisJaW50CQkJcGx1czsKK307CisKKyNpZmRlZiBDT05GSUdfTkZTX1Y0CisKK3R5cGVkZWYgdTY0IGNsaWVudGlkNDsKKworc3RydWN0IG5mczRfYWNjZXNzYXJncyB7CisJY29uc3Qgc3RydWN0IG5mc19maCAqCQlmaDsKKwl1MzIJCQkJYWNjZXNzOworfTsKKworc3RydWN0IG5mczRfYWNjZXNzcmVzIHsKKwl1MzIJCQkJc3VwcG9ydGVkOworCXUzMgkJCQlhY2Nlc3M7Cit9OworCitzdHJ1Y3QgbmZzNF9jcmVhdGVfYXJnIHsKKwl1MzIJCQkJZnR5cGU7CisJdW5pb24geworCQlzdHJ1Y3QgcXN0ciAqCQlzeW1saW5rOyAgICAvKiBORjRMTksgKi8KKwkJc3RydWN0IHsKKwkJCXUzMgkJc3BlY2RhdGExOworCQkJdTMyCQlzcGVjZGF0YTI7CisJCX0gZGV2aWNlOyAgICAvKiBORjRCTEssIE5GNENIUiAqLworCX0gdTsKKwljb25zdCBzdHJ1Y3QgcXN0ciAqCQluYW1lOworCWNvbnN0IHN0cnVjdCBuZnNfc2VydmVyICoJc2VydmVyOworCWNvbnN0IHN0cnVjdCBpYXR0ciAqCQlhdHRyczsKKwljb25zdCBzdHJ1Y3QgbmZzX2ZoICoJCWRpcl9maDsKKwljb25zdCB1MzIgKgkJCWJpdG1hc2s7Cit9OworCitzdHJ1Y3QgbmZzNF9jcmVhdGVfcmVzIHsKKwljb25zdCBzdHJ1Y3QgbmZzX3NlcnZlciAqCXNlcnZlcjsKKwlzdHJ1Y3QgbmZzX2ZoICoJCQlmaDsKKwlzdHJ1Y3QgbmZzX2ZhdHRyICoJCWZhdHRyOworCXN0cnVjdCBuZnM0X2NoYW5nZV9pbmZvCQlkaXJfY2luZm87Cit9OworCitzdHJ1Y3QgbmZzNF9mc2luZm9fYXJnIHsKKwljb25zdCBzdHJ1Y3QgbmZzX2ZoICoJCWZoOworCWNvbnN0IHUzMiAqCQkJYml0bWFzazsKK307CisKK3N0cnVjdCBuZnM0X2dldGF0dHJfYXJnIHsKKwljb25zdCBzdHJ1Y3QgbmZzX2ZoICoJCWZoOworCWNvbnN0IHUzMiAqCQkJYml0bWFzazsKK307CisKK3N0cnVjdCBuZnM0X2dldGF0dHJfcmVzIHsKKwljb25zdCBzdHJ1Y3QgbmZzX3NlcnZlciAqCXNlcnZlcjsKKwlzdHJ1Y3QgbmZzX2ZhdHRyICoJCWZhdHRyOworfTsKKworc3RydWN0IG5mczRfbGlua19hcmcgeworCWNvbnN0IHN0cnVjdCBuZnNfZmggKgkJZmg7CisJY29uc3Qgc3RydWN0IG5mc19maCAqCQlkaXJfZmg7CisJY29uc3Qgc3RydWN0IHFzdHIgKgkJbmFtZTsKK307CisKK3N0cnVjdCBuZnM0X2xvb2t1cF9hcmcgeworCWNvbnN0IHN0cnVjdCBuZnNfZmggKgkJZGlyX2ZoOworCWNvbnN0IHN0cnVjdCBxc3RyICoJCW5hbWU7CisJY29uc3QgdTMyICoJCQliaXRtYXNrOworfTsKKworc3RydWN0IG5mczRfbG9va3VwX3JlcyB7CisJY29uc3Qgc3RydWN0IG5mc19zZXJ2ZXIgKglzZXJ2ZXI7CisJc3RydWN0IG5mc19mYXR0ciAqCQlmYXR0cjsKKwlzdHJ1Y3QgbmZzX2ZoICoJCQlmaDsKK307CisKK3N0cnVjdCBuZnM0X2xvb2t1cF9yb290X2FyZyB7CisJY29uc3QgdTMyICoJCQliaXRtYXNrOworfTsKKworc3RydWN0IG5mczRfcGF0aGNvbmZfYXJnIHsKKwljb25zdCBzdHJ1Y3QgbmZzX2ZoICoJCWZoOworCWNvbnN0IHUzMiAqCQkJYml0bWFzazsKK307CisKK3N0cnVjdCBuZnM0X3JlYWRkaXJfYXJnIHsKKwljb25zdCBzdHJ1Y3QgbmZzX2ZoICoJCWZoOworCXU2NAkJCQljb29raWU7CisJbmZzNF92ZXJpZmllcgkJCXZlcmlmaWVyOworCXUzMgkJCQljb3VudDsKKwlzdHJ1Y3QgcGFnZSAqKgkJCXBhZ2VzOwkvKiB6ZXJvLWNvcHkgZGF0YSAqLworCXVuc2lnbmVkIGludAkJCXBnYmFzZTsJLyogemVyby1jb3B5IGRhdGEgKi8KKwljb25zdCB1MzIgKgkJCWJpdG1hc2s7Cit9OworCitzdHJ1Y3QgbmZzNF9yZWFkZGlyX3JlcyB7CisJbmZzNF92ZXJpZmllcgkJCXZlcmlmaWVyOworCXVuc2lnbmVkIGludAkJCXBnYmFzZTsKK307CisKK3N0cnVjdCBuZnM0X3JlYWRsaW5rIHsKKwljb25zdCBzdHJ1Y3QgbmZzX2ZoICoJCWZoOworCXVuc2lnbmVkIGludAkJCXBnYmFzZTsKKwl1bnNpZ25lZCBpbnQJCQlwZ2xlbjsgICAvKiB6ZXJvLWNvcHkgZGF0YSAqLworCXN0cnVjdCBwYWdlICoqCQkJcGFnZXM7ICAgLyogemVyby1jb3B5IGRhdGEgKi8KK307CisKK3N0cnVjdCBuZnM0X3JlbW92ZV9hcmcgeworCWNvbnN0IHN0cnVjdCBuZnNfZmggKgkJZmg7CisJY29uc3Qgc3RydWN0IHFzdHIgKgkJbmFtZTsKK307CisKK3N0cnVjdCBuZnM0X3JlbmFtZV9hcmcgeworCWNvbnN0IHN0cnVjdCBuZnNfZmggKgkJb2xkX2RpcjsKKwljb25zdCBzdHJ1Y3QgbmZzX2ZoICoJCW5ld19kaXI7CisJY29uc3Qgc3RydWN0IHFzdHIgKgkJb2xkX25hbWU7CisJY29uc3Qgc3RydWN0IHFzdHIgKgkJbmV3X25hbWU7Cit9OworCitzdHJ1Y3QgbmZzNF9yZW5hbWVfcmVzIHsKKwlzdHJ1Y3QgbmZzNF9jaGFuZ2VfaW5mbwkJb2xkX2NpbmZvOworCXN0cnVjdCBuZnM0X2NoYW5nZV9pbmZvCQluZXdfY2luZm87Cit9OworCitzdHJ1Y3QgbmZzNF9zZXRjbGllbnRpZCB7CisJY29uc3QgbmZzNF92ZXJpZmllciAqCQlzY192ZXJpZmllcjsgICAgICAvKiByZXF1ZXN0ICovCisJdW5zaWduZWQgaW50CQkJc2NfbmFtZV9sZW47CisJY2hhcgkJCQlzY19uYW1lWzMyXTsJICAvKiByZXF1ZXN0ICovCisJdTMyCQkJCXNjX3Byb2c7ICAgICAgICAgIC8qIHJlcXVlc3QgKi8KKwl1bnNpZ25lZCBpbnQJCQlzY19uZXRpZF9sZW47CisJY2hhcgkJCQlzY19uZXRpZFs0XTsJICAvKiByZXF1ZXN0ICovCisJdW5zaWduZWQgaW50CQkJc2NfdWFkZHJfbGVuOworCWNoYXIJCQkJc2NfdWFkZHJbMjRdOyAgICAgLyogcmVxdWVzdCAqLworCXUzMgkJCQlzY19jYl9pZGVudDsgICAgICAvKiByZXF1ZXN0ICovCit9OworCitzdHJ1Y3QgbmZzNF9zdGF0ZnNfYXJnIHsKKwljb25zdCBzdHJ1Y3QgbmZzX2ZoICoJCWZoOworCWNvbnN0IHUzMiAqCQkJYml0bWFzazsKK307CisKK3N0cnVjdCBuZnM0X3NlcnZlcl9jYXBzX3JlcyB7CisJdTMyCQkJCWF0dHJfYml0bWFza1syXTsKKwl1MzIJCQkJYWNsX2JpdG1hc2s7CisJdTMyCQkJCWhhc19saW5rczsKKwl1MzIJCQkJaGFzX3N5bWxpbmtzOworfTsKKworI2VuZGlmIC8qIENPTkZJR19ORlNfVjQgKi8KKworc3RydWN0IG5mc19wYWdlOworCitzdHJ1Y3QgbmZzX3JlYWRfZGF0YSB7CisJaW50CQkJZmxhZ3M7CisJc3RydWN0IHJwY190YXNrCQl0YXNrOworCXN0cnVjdCBpbm9kZQkJKmlub2RlOworCXN0cnVjdCBycGNfY3JlZAkJKmNyZWQ7CisJc3RydWN0IG5mc19mYXR0cglmYXR0cjsJLyogZmF0dHIgc3RvcmFnZSAqLworCXN0cnVjdCBsaXN0X2hlYWQJcGFnZXM7CS8qIENvYWxlc2NlZCByZWFkIHJlcXVlc3RzICovCisJc3RydWN0IG5mc19wYWdlCQkqcmVxOwkvKiBtdWx0aSBvcHMgcGVyIG5mc19wYWdlICovCisJc3RydWN0IHBhZ2UJCSpwYWdldmVjW05GU19SRUFEX01BWElPVl07CisJc3RydWN0IG5mc19yZWFkYXJncyBhcmdzOworCXN0cnVjdCBuZnNfcmVhZHJlcyAgcmVzOworI2lmZGVmIENPTkZJR19ORlNfVjQKKwl1bnNpZ25lZCBsb25nCQl0aW1lc3RhbXA7CS8qIEZvciBsZWFzZSByZW5ld2FsICovCisjZW5kaWYKKwl2b2lkICgqY29tcGxldGUpIChzdHJ1Y3QgbmZzX3JlYWRfZGF0YSAqLCBpbnQpOworfTsKKworc3RydWN0IG5mc193cml0ZV9kYXRhIHsKKwlpbnQJCQlmbGFnczsKKwlzdHJ1Y3QgcnBjX3Rhc2sJCXRhc2s7CisJc3RydWN0IGlub2RlCQkqaW5vZGU7CisJc3RydWN0IHJwY19jcmVkCQkqY3JlZDsKKwlzdHJ1Y3QgbmZzX2ZhdHRyCWZhdHRyOworCXN0cnVjdCBuZnNfd3JpdGV2ZXJmCXZlcmY7CisJc3RydWN0IGxpc3RfaGVhZAlwYWdlczsJCS8qIENvYWxlc2NlZCByZXF1ZXN0cyB3ZSB3aXNoIHRvIGZsdXNoICovCisJc3RydWN0IG5mc19wYWdlCQkqcmVxOwkJLyogbXVsdGkgb3BzIHBlciBuZnNfcGFnZSAqLworCXN0cnVjdCBwYWdlCQkqcGFnZXZlY1tORlNfV1JJVEVfTUFYSU9WXTsKKwlzdHJ1Y3QgbmZzX3dyaXRlYXJncwlhcmdzOwkJLyogYXJndW1lbnQgc3RydWN0ICovCisJc3RydWN0IG5mc193cml0ZXJlcwlyZXM7CQkvKiByZXN1bHQgc3RydWN0ICovCisjaWZkZWYgQ09ORklHX05GU19WNAorCXVuc2lnbmVkIGxvbmcJCXRpbWVzdGFtcDsJLyogRm9yIGxlYXNlIHJlbmV3YWwgKi8KKyNlbmRpZgorCXZvaWQgKCpjb21wbGV0ZSkgKHN0cnVjdCBuZnNfd3JpdGVfZGF0YSAqLCBpbnQpOworfTsKKworc3RydWN0IG5mc19hY2Nlc3NfZW50cnk7CisKKy8qCisgKiBSUEMgcHJvY2VkdXJlIHZlY3RvciBmb3IgTkZTdjIvTkZTdjMgZGVtdXhpbmcKKyAqLworc3RydWN0IG5mc19ycGNfb3BzIHsKKwlpbnQJdmVyc2lvbjsJCS8qIFByb3RvY29sIHZlcnNpb24gKi8KKwlzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgKmRlbnRyeV9vcHM7CisJc3RydWN0IGlub2RlX29wZXJhdGlvbnMgKmRpcl9pbm9kZV9vcHM7CisKKwlpbnQJKCpnZXRyb290KSAoc3RydWN0IG5mc19zZXJ2ZXIgKiwgc3RydWN0IG5mc19maCAqLAorCQkJICAgIHN0cnVjdCBuZnNfZnNpbmZvICopOworCWludAkoKmdldGF0dHIpIChzdHJ1Y3QgbmZzX3NlcnZlciAqLCBzdHJ1Y3QgbmZzX2ZoICosCisJCQkgICAgc3RydWN0IG5mc19mYXR0ciAqKTsKKwlpbnQJKCpzZXRhdHRyKSAoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgbmZzX2ZhdHRyICosCisJCQkgICAgc3RydWN0IGlhdHRyICopOworCWludAkoKmxvb2t1cCkgIChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHFzdHIgKiwKKwkJCSAgICBzdHJ1Y3QgbmZzX2ZoICosIHN0cnVjdCBuZnNfZmF0dHIgKik7CisJaW50CSgqYWNjZXNzKSAgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgbmZzX2FjY2Vzc19lbnRyeSAqKTsKKwlpbnQJKCpyZWFkbGluaykoc3RydWN0IGlub2RlICosIHN0cnVjdCBwYWdlICosIHVuc2lnbmVkIGludCwKKwkJCSAgICB1bnNpZ25lZCBpbnQpOworCWludAkoKnJlYWQpICAgIChzdHJ1Y3QgbmZzX3JlYWRfZGF0YSAqKTsKKwlpbnQJKCp3cml0ZSkgICAoc3RydWN0IG5mc193cml0ZV9kYXRhICopOworCWludAkoKmNvbW1pdCkgIChzdHJ1Y3QgbmZzX3dyaXRlX2RhdGEgKik7CisJaW50CSgqY3JlYXRlKSAgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosCisJCQkgICAgc3RydWN0IGlhdHRyICosIGludCk7CisJaW50CSgqcmVtb3ZlKSAgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgcXN0ciAqKTsKKwlpbnQJKCp1bmxpbmtfc2V0dXApICAoc3RydWN0IHJwY19tZXNzYWdlICosCisJCQkgICAgc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgcXN0ciAqKTsKKwlpbnQJKCp1bmxpbmtfZG9uZSkgKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IHJwY190YXNrICopOworCWludAkoKnJlbmFtZSkgIChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHFzdHIgKiwKKwkJCSAgICBzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHFzdHIgKik7CisJaW50CSgqbGluaykgICAgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHFzdHIgKik7CisJaW50CSgqc3ltbGluaykgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgcXN0ciAqLCBzdHJ1Y3QgcXN0ciAqLAorCQkJICAgIHN0cnVjdCBpYXR0ciAqLCBzdHJ1Y3QgbmZzX2ZoICosCisJCQkgICAgc3RydWN0IG5mc19mYXR0ciAqKTsKKwlpbnQJKCpta2RpcikgICAoc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGlhdHRyICopOworCWludAkoKnJtZGlyKSAgIChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHFzdHIgKik7CisJaW50CSgqcmVhZGRpcikgKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IHJwY19jcmVkICosCisJCQkgICAgdTY0LCBzdHJ1Y3QgcGFnZSAqLCB1bnNpZ25lZCBpbnQsIGludCk7CisJaW50CSgqbWtub2QpICAgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBpYXR0ciAqLAorCQkJICAgIGRldl90KTsKKwlpbnQJKCpzdGF0ZnMpICAoc3RydWN0IG5mc19zZXJ2ZXIgKiwgc3RydWN0IG5mc19maCAqLAorCQkJICAgIHN0cnVjdCBuZnNfZnNzdGF0ICopOworCWludAkoKmZzaW5mbykgIChzdHJ1Y3QgbmZzX3NlcnZlciAqLCBzdHJ1Y3QgbmZzX2ZoICosCisJCQkgICAgc3RydWN0IG5mc19mc2luZm8gKik7CisJaW50CSgqcGF0aGNvbmYpIChzdHJ1Y3QgbmZzX3NlcnZlciAqLCBzdHJ1Y3QgbmZzX2ZoICosCisJCQkgICAgIHN0cnVjdCBuZnNfcGF0aGNvbmYgKik7CisJdTMyICoJKCpkZWNvZGVfZGlyZW50KSh1MzIgKiwgc3RydWN0IG5mc19lbnRyeSAqLCBpbnQgcGx1cyk7CisJdm9pZAkoKnJlYWRfc2V0dXApICAgKHN0cnVjdCBuZnNfcmVhZF9kYXRhICopOworCXZvaWQJKCp3cml0ZV9zZXR1cCkgIChzdHJ1Y3QgbmZzX3dyaXRlX2RhdGEgKiwgaW50IGhvdyk7CisJdm9pZAkoKmNvbW1pdF9zZXR1cCkgKHN0cnVjdCBuZnNfd3JpdGVfZGF0YSAqLCBpbnQgaG93KTsKKwlpbnQJKCpmaWxlX29wZW4pICAgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKKwlpbnQJKCpmaWxlX3JlbGVhc2UpIChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7CisJaW50CSgqbG9jaykoc3RydWN0IGZpbGUgKiwgaW50LCBzdHJ1Y3QgZmlsZV9sb2NrICopOworfTsKKworLyoKKyAqIAlORlNfQ0FMTChnZXRhdHRyLCBpbm9kZSwgKGZhdHRyKSk7CisgKiBpbnRvCisgKglORlNfUFJPVE8oaW5vZGUpLT5nZXRhdHRyKGZhdHRyKTsKKyAqLworI2RlZmluZSBORlNfQ0FMTChvcCwgaW5vZGUsIGFyZ3MpCU5GU19QUk9UTyhpbm9kZSktPm9wIGFyZ3MKKworLyoKKyAqIEZ1bmN0aW9uIHZlY3RvcnMgZXRjLiBmb3IgdGhlIE5GUyBjbGllbnQKKyAqLworZXh0ZXJuIHN0cnVjdCBuZnNfcnBjX29wcwluZnNfdjJfY2xpZW50b3BzOworZXh0ZXJuIHN0cnVjdCBuZnNfcnBjX29wcwluZnNfdjNfY2xpZW50b3BzOworZXh0ZXJuIHN0cnVjdCBuZnNfcnBjX29wcwluZnNfdjRfY2xpZW50b3BzOworZXh0ZXJuIHN0cnVjdCBycGNfdmVyc2lvbgluZnNfdmVyc2lvbjI7CitleHRlcm4gc3RydWN0IHJwY192ZXJzaW9uCW5mc192ZXJzaW9uMzsKK2V4dGVybiBzdHJ1Y3QgcnBjX3ZlcnNpb24JbmZzX3ZlcnNpb240OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzZC9hdXRoLmggYi9pbmNsdWRlL2xpbnV4L25mc2QvYXV0aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmYjlmNzIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L25mc2QvYXV0aC5oCkBAIC0wLDAgKzEsMjcgQEAKKy8qCisgKiBpbmNsdWRlL2xpbnV4L25mc2QvYXV0aC5oCisgKgorICogbmZzZC1zcGVjaWZpYyBhdXRoZW50aWNhdGlvbiBzdHVmZi4KKyAqIHVpZC9naWQgbWFwcGluZyBub3QgeWV0IGltcGxlbWVudGVkLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiBPbGFmIEtpcmNoIDxva2lyQG1vbmFkLnN3Yi5kZT4KKyAqLworCisjaWZuZGVmIExJTlVYX05GU0RfQVVUSF9ICisjZGVmaW5lIExJTlVYX05GU0RfQVVUSF9ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNkZWZpbmUgbmZzZF9sdWlkKHJxLCB1aWQpCSgodTMyKSh1aWQpKQorI2RlZmluZSBuZnNkX2xnaWQocnEsIGdpZCkJKCh1MzIpKGdpZCkpCisjZGVmaW5lIG5mc2RfcnVpZChycSwgdWlkKQkoKHUzMikodWlkKSkKKyNkZWZpbmUgbmZzZF9yZ2lkKHJxLCBnaWQpCSgodTMyKShnaWQpKQorCisvKgorICogU2V0IHRoZSBjdXJyZW50IHByb2Nlc3MncyBmc3VpZC9mc2dpZCBldGMgdG8gdGhvc2Ugb2YgdGhlIE5GUworICogY2xpZW50IHVzZXIKKyAqLworaW50IG5mc2Rfc2V0dXNlcihzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgc3RydWN0IHN2Y19leHBvcnQgKik7CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYgLyogTElOVVhfTkZTRF9BVVRIX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzZC9jYWNoZS5oIGIvaW5jbHVkZS9saW51eC9uZnNkL2NhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNhMzU1NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmZzZC9jYWNoZS5oCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBpbmNsdWRlL2xpbnV4L25mc2QvY2FjaGUuaAorICoKKyAqIFJlcXVlc3QgcmVwbHkgY2FjaGUuIFRoaXMgd2FzIGhlYXZpbHkgaW5zcGlyZWQgYnkgdGhlCisgKiBpbXBsZW1lbnRhdGlvbiBpbiA0LjNCU0QvNC40QlNELgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiBPbGFmIEtpcmNoIDxva2lyQG1vbmFkLnN3Yi5kZT4KKyAqLworCisjaWZuZGVmIE5GU0NBQ0hFX0gKKyNkZWZpbmUgTkZTQ0FDSEVfSAorCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvdWlvLmg+CisKKy8qCisgKiBSZXByZXNlbnRhdGlvbiBvZiBhIHJlcGx5IGNhY2hlIGVudHJ5LiBUaGUgZmlyc3QgdHdvIG1lbWJlcnMgKm11c3QqCisgKiBiZSBoYXNoX25leHQgYW5kIGhhc2hfcHJldi4KKyAqLworc3RydWN0IHN2Y19jYWNoZXJlcCB7CisJc3RydWN0IGhsaXN0X25vZGUJY19oYXNoOworCXN0cnVjdCBsaXN0X2hlYWQJY19scnU7CisKKwl1bnNpZ25lZCBjaGFyCQljX3N0YXRlLAkvKiB1bnVzZWQsIGlucHJvZywgZG9uZSAqLworCQkJCWNfdHlwZSwJCS8qIHN0YXR1cywgYnVmZmVyICovCisJCQkJY19zZWN1cmUgOiAxOwkvKiByZXEgY2FtZSBmcm9tIHBvcnQgPCAxMDI0ICovCisJc3RydWN0IHNvY2thZGRyX2luCWNfYWRkcjsKKwl1MzIJCQljX3hpZDsKKwl1MzIJCQljX3Byb3Q7CisJdTMyCQkJY19wcm9jOworCXUzMgkJCWNfdmVyczsKKwl1bnNpZ25lZCBsb25nCQljX3RpbWVzdGFtcDsKKwl1bmlvbiB7CisJCXN0cnVjdCBrdmVjCXVfdmVjOworCQl1MzIJCXVfc3RhdHVzOworCX0JCQljX3U7Cit9OworCisjZGVmaW5lIGNfcmVwbHZlYwkJY191LnVfdmVjCisjZGVmaW5lIGNfcmVwbHN0YXQJCWNfdS51X3N0YXR1cworCisvKiBjYWNoZSBlbnRyeSBzdGF0ZXMgKi8KK2VudW0geworCVJDX1VOVVNFRCwKKwlSQ19JTlBST0csCisJUkNfRE9ORQorfTsKKworLyogcmV0dXJuIHZhbHVlcyAqLworZW51bSB7CisJUkNfRFJPUElULAorCVJDX1JFUExZLAorCVJDX0RPSVQsCisJUkNfSU5UUgorfTsKKworLyoKKyAqIENhY2hlIHR5cGVzLgorICogV2UgbWF5IHdhbnQgdG8gYWRkIG1vcmUgdHlwZXMgb25lIGRheSwgZS5nLiBmb3IgZGlyb3ByZXMgYW5kCisgKiBhdHRyc3RhdCByZXBsaWVzLiBVc2luZyBjYWNoZSBlbnRyaWVzIHdpdGggZml4ZWQgbGVuZ3RoIGluc3RlYWQKKyAqIG9mIGJ1ZmZlciBwb2ludGVycyBtYXkgYmUgbW9yZSBlZmZpY2llbnQuCisgKi8KK2VudW0geworCVJDX05PQ0FDSEUsCisJUkNfUkVQTFNUQVQsCisJUkNfUkVQTEJVRkYsCit9OworCisvKgorICogSWYgcmVxdWVzdHMgYXJlIHJldHJhbnNtaXR0ZWQgd2l0aGluIHRoaXMgaW50ZXJ2YWwsIHRoZXkncmUgZHJvcHBlZC4KKyAqLworI2RlZmluZSBSQ19ERUxBWQkJKEhaLzUpCisKK3ZvaWQJbmZzZF9jYWNoZV9pbml0KHZvaWQpOwordm9pZAluZnNkX2NhY2hlX3NodXRkb3duKHZvaWQpOworaW50CW5mc2RfY2FjaGVfbG9va3VwKHN0cnVjdCBzdmNfcnFzdCAqLCBpbnQpOwordm9pZAluZnNkX2NhY2hlX3VwZGF0ZShzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgaW50LCB1MzIgKik7CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYgLyogTkZTQ0FDSEVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZnNkL2NvbnN0LmggYi9pbmNsdWRlL2xpbnV4L25mc2QvY29uc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzViYjFiMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmZzZC9jb25zdC5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBpbmNsdWRlL2xpbnV4L25mc2QvY29uc3QuaAorICoKKyAqIFZhcmlvdXMgY29uc3RhbnRzIHJlbGF0ZWQgdG8gTkZTLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0xOTk3IE9sYWYgS2lyY2ggPG9raXJAbW9uYWQuc3diLmRlPgorICovCisKKyNpZm5kZWYgX0xJTlVYX05GU0RfQ09OU1RfSAorI2RlZmluZSBfTElOVVhfTkZTRF9DT05TVF9ICisKKyNpbmNsdWRlIDxsaW51eC9uZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9uZnMyLmg+CisjaW5jbHVkZSA8bGludXgvbmZzMy5oPgorI2luY2x1ZGUgPGxpbnV4L25mczQuaD4KKworLyoKKyAqIE1heGltdW0gcHJvdG9jb2wgdmVyc2lvbiBzdXBwb3J0ZWQgYnkga25mc2QKKyAqLworI2RlZmluZSBORlNTVkNfTUFYVkVSUwkJMworCisvKgorICogTWF4aW11bSBibG9ja3NpemUgc3VwcG9ydGVkIGJ5IGRhZW1vbiBjdXJyZW50bHkgYXQgMzJLCisgKi8KKyNkZWZpbmUgTkZTU1ZDX01BWEJMS1NJWkUJKDMyKjEwMjQpCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpZm5kZWYgTkZTX1NVUEVSX01BR0lDCisjIGRlZmluZSBORlNfU1VQRVJfTUFHSUMJMHg2OTY5CisjZW5kaWYKKworI2RlZmluZSBORlNEX0JVRlNJWkUJCSgxMDI0ICsgTkZTU1ZDX01BWEJMS1NJWkUpCisKKyNpZmRlZiBDT05GSUdfTkZTRF9WNAorIyBkZWZpbmUgTkZTU1ZDX1hEUlNJWkUJCU5GUzRfU1ZDX1hEUlNJWkUKKyNlbGlmIGRlZmluZWQoQ09ORklHX05GU0RfVjMpCisjIGRlZmluZSBORlNTVkNfWERSU0laRQkJTkZTM19TVkNfWERSU0laRQorI2Vsc2UKKyMgZGVmaW5lIE5GU1NWQ19YRFJTSVpFCQlORlMyX1NWQ19YRFJTSVpFCisjZW5kaWYKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9MSU5VWF9ORlNEX0NPTlNUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzZC9kZWJ1Zy5oIGIvaW5jbHVkZS9saW51eC9uZnNkL2RlYnVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU0YWE5MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmZzZC9kZWJ1Zy5oCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2xpbnV4L25mc2QvZGVidWcuaAorICoKKyAqIERlYnVnZ2luZy1yZWxhdGVkIHN0dWZmIGZvciBuZnNkCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1IE9sYWYgS2lyY2ggPG9raXJAbW9uYWQuc3diLmRlPgorICovCisKKyNpZm5kZWYgTElOVVhfTkZTRF9ERUJVR19ICisjZGVmaW5lIExJTlVYX05GU0RfREVCVUdfSAorCisjaW5jbHVkZSA8bGludXgvc3VucnBjL2RlYnVnLmg+CisKKy8qCisgKiBFbmFibGUgZGVidWdnaW5nIGZvciBuZnNkLgorICogUmVxdWlyZXMgUlBDX0RFQlVHLgorICovCisjaWZkZWYgUlBDX0RFQlVHCisjIGRlZmluZSBORlNEX0RFQlVHCQkxCisjZW5kaWYKKworLyoKKyAqIGtuZnNkIGRlYnVnIGZsYWdzCisgKi8KKyNkZWZpbmUgTkZTRERCR19TT0NLCQkweDAwMDEKKyNkZWZpbmUgTkZTRERCR19GSAkJMHgwMDAyCisjZGVmaW5lIE5GU0REQkdfRVhQT1JUCQkweDAwMDQKKyNkZWZpbmUgTkZTRERCR19TVkMJCTB4MDAwOAorI2RlZmluZSBORlNEREJHX1BST0MJCTB4MDAxMAorI2RlZmluZSBORlNEREJHX0ZJTEVPUAkJMHgwMDIwCisjZGVmaW5lIE5GU0REQkdfQVVUSAkJMHgwMDQwCisjZGVmaW5lIE5GU0REQkdfUkVQQ0FDSEUJMHgwMDgwCisjZGVmaW5lIE5GU0REQkdfWERSCQkweDAxMDAKKyNkZWZpbmUgTkZTRERCR19MT0NLRAkJMHgwMjAwCisjZGVmaW5lIE5GU0REQkdfQUxMCQkweDdGRkYKKyNkZWZpbmUgTkZTRERCR19OT0NIQU5HRQkweEZGRkYKKworCisjaWZkZWYgX19LRVJORUxfXworIyB1bmRlZiBpZmRlYnVnCisjIGlmZGVmIE5GU0RfREVCVUcKKyMgIGRlZmluZSBpZmRlYnVnKGZsYWcpCQlpZiAobmZzZF9kZWJ1ZyAmIE5GU0REQkdfIyNmbGFnKQorIyBlbHNlCisjICBkZWZpbmUgaWZkZWJ1ZyhmbGFnKQkJaWYgKDApCisjIGVuZGlmCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogTElOVVhfTkZTRF9ERUJVR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mc2QvZXhwb3J0LmggYi9pbmNsdWRlL2xpbnV4L25mc2QvZXhwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJhZDQ3NgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmZzZC9leHBvcnQuaApAQCAtMCwwICsxLDEzNyBAQAorLyoKKyAqIGluY2x1ZGUvbGludXgvbmZzZC9leHBvcnQuaAorICogCisgKiBQdWJsaWMgZGVjbGFyYXRpb25zIGZvciBORlMgZXhwb3J0cy4gVGhlIGRlZmluaXRpb25zIGZvciB0aGUKKyAqIHN5c2NhbGwgaW50ZXJmYWNlIGFyZSBpbiBuZnNjdGwuaAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0xOTk3IE9sYWYgS2lyY2ggPG9raXJAbW9uYWQuc3diLmRlPgorICovCisKKyNpZm5kZWYgTkZTRF9FWFBPUlRfSAorI2RlZmluZSBORlNEX0VYUE9SVF9ICisKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpZmRlZiBfX0tFUk5FTF9fCisjIGluY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjIGluY2x1ZGUgPGxpbnV4L2luLmg+CisjZW5kaWYKKworLyoKKyAqIEltcG9ydGFudCBsaW1pdHMgZm9yIHRoZSBleHBvcnRzIHN0dWZmLgorICovCisjZGVmaW5lIE5GU0NMTlRfSURNQVgJCTEwMjQKKyNkZWZpbmUgTkZTQ0xOVF9BRERSTUFYCQkxNgorI2RlZmluZSBORlNDTE5UX0tFWU1BWAkJMzIKKworLyoKKyAqIEV4cG9ydCBmbGFncy4KKyAqLworI2RlZmluZSBORlNFWFBfUkVBRE9OTFkJCTB4MDAwMQorI2RlZmluZSBORlNFWFBfSU5TRUNVUkVfUE9SVAkweDAwMDIKKyNkZWZpbmUgTkZTRVhQX1JPT1RTUVVBU0gJMHgwMDA0CisjZGVmaW5lIE5GU0VYUF9BTExTUVVBU0gJMHgwMDA4CisjZGVmaW5lIE5GU0VYUF9BU1lOQwkJMHgwMDEwCisjZGVmaW5lIE5GU0VYUF9HQVRIRVJFRF9XUklURVMJMHgwMDIwCisvKiA0MCA4MCAxMDAgY3VycmVudGx5IHVudXNlZCAqLworI2RlZmluZSBORlNFWFBfTk9ISURFCQkweDAyMDAKKyNkZWZpbmUgTkZTRVhQX05PU1VCVFJFRUNIRUNLCTB4MDQwMAorI2RlZmluZQlORlNFWFBfTk9BVVRITkxNCTB4MDgwMAkJLyogRG9uJ3QgYXV0aGVudGljYXRlIE5MTSByZXF1ZXN0cyAtIGp1c3QgdHJ1c3QgKi8KKyNkZWZpbmUgTkZTRVhQX01TTkZTCQkweDEwMDAJLyogZG8gc2lsbHkgdGhpbmdzIHRoYXQgTVMgY2xpZW50cyBleHBlY3QgKi8KKyNkZWZpbmUgTkZTRVhQX0ZTSUQJCTB4MjAwMAorI2RlZmluZQlORlNFWFBfQ1JPU1NNT1VOVAkweDQwMDAKKyNkZWZpbmUJTkZTRVhQX05PQUNMCQkweDgwMDAJLyogcmVzZXJ2ZWQgZm9yIHBvc3NpYmxlIEFDTCByZWxhdGVkIHVzZSAqLworI2RlZmluZSBORlNFWFBfQUxMRkxBR1MJCTB4RkUzRgorCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKK3N0cnVjdCBzdmNfZXhwb3J0IHsKKwlzdHJ1Y3QgY2FjaGVfaGVhZAloOworCXN0cnVjdCBhdXRoX2RvbWFpbiAqCWV4X2NsaWVudDsKKwlpbnQJCQlleF9mbGFnczsKKwlzdHJ1Y3QgdmZzbW91bnQgKglleF9tbnQ7CisJc3RydWN0IGRlbnRyeSAqCQlleF9kZW50cnk7CisJdWlkX3QJCQlleF9hbm9uX3VpZDsKKwlnaWRfdAkJCWV4X2Fub25fZ2lkOworCWludAkJCWV4X2ZzaWQ7Cit9OworCisvKiBhbiAiZXhwb3J0IGtleSIgKGV4cGtleSkgbWFwcyBhIGZpbGVoYW5kbGVmcmFnZW1lbnQgdG8gYW4KKyAqIHN2Y19leHBvcnQgZm9yIGEgZ2l2ZW4gY2xpZW50LiAgVGhlcmUgY2FuIGJlIHR3byBwZXIgZXhwb3J0LCBvbmUKKyAqIGZvciB0eXBlIDAgKGRldi9pbm8pLCBvbmUgZm9yIHR5cGUgMSAoZnNpZCkKKyAqLworc3RydWN0IHN2Y19leHBrZXkgeworCXN0cnVjdCBjYWNoZV9oZWFkCWg7CisKKwlzdHJ1Y3QgYXV0aF9kb21haW4gKglla19jbGllbnQ7CisJaW50CQkJZWtfZnNpZHR5cGU7CisJdTMyCQkJZWtfZnNpZFszXTsKKworCXN0cnVjdCBzdmNfZXhwb3J0ICoJZWtfZXhwb3J0OworfTsKKworI2RlZmluZSBFWF9TRUNVUkUoZXhwKQkJKCEoKGV4cCktPmV4X2ZsYWdzICYgTkZTRVhQX0lOU0VDVVJFX1BPUlQpKQorI2RlZmluZSBFWF9JU1NZTkMoZXhwKQkJKCEoKGV4cCktPmV4X2ZsYWdzICYgTkZTRVhQX0FTWU5DKSkKKyNkZWZpbmUgRVhfUkRPTkxZKGV4cCkJCSgoZXhwKS0+ZXhfZmxhZ3MgJiBORlNFWFBfUkVBRE9OTFkpCisjZGVmaW5lIEVYX05PSElERShleHApCQkoKGV4cCktPmV4X2ZsYWdzICYgTkZTRVhQX05PSElERSkKKyNkZWZpbmUgRVhfV0dBVEhFUihleHApCQkoKGV4cCktPmV4X2ZsYWdzICYgTkZTRVhQX0dBVEhFUkVEX1dSSVRFUykKKworCisvKgorICogRnVuY3Rpb24gZGVjbGFyYXRpb25zCisgKi8KK3ZvaWQJCQluZnNkX2V4cG9ydF9pbml0KHZvaWQpOwordm9pZAkJCW5mc2RfZXhwb3J0X3NodXRkb3duKHZvaWQpOwordm9pZAkJCW5mc2RfZXhwb3J0X2ZsdXNoKHZvaWQpOwordm9pZAkJCWV4cF9yZWFkbG9jayh2b2lkKTsKK3ZvaWQJCQlleHBfcmVhZHVubG9jayh2b2lkKTsKK3N0cnVjdCBzdmNfZXhwa2V5ICoJZXhwX2ZpbmRfa2V5KHN0cnVjdCBhdXRoX2RvbWFpbiAqY2xwLCAKKwkJCQkgICAgIGludCBmc2lkX3R5cGUsIHUzMiAqZnNpZHYsCisJCQkJICAgICBzdHJ1Y3QgY2FjaGVfcmVxICpyZXFwKTsKK3N0cnVjdCBzdmNfZXhwb3J0ICoJZXhwX2dldF9ieV9uYW1lKHN0cnVjdCBhdXRoX2RvbWFpbiAqY2xwLAorCQkJCQlzdHJ1Y3QgdmZzbW91bnQgKm1udCwKKwkJCQkJc3RydWN0IGRlbnRyeSAqZGVudHJ5LAorCQkJCQlzdHJ1Y3QgY2FjaGVfcmVxICpyZXFwKTsKK3N0cnVjdCBzdmNfZXhwb3J0ICoJZXhwX3BhcmVudChzdHJ1Y3QgYXV0aF9kb21haW4gKmNscCwKKwkJCQkgICBzdHJ1Y3QgdmZzbW91bnQgKm1udCwKKwkJCQkgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCisJCQkJICAgc3RydWN0IGNhY2hlX3JlcSAqcmVxcCk7CitpbnQJCQlleHBfcm9vdGZoKHN0cnVjdCBhdXRoX2RvbWFpbiAqLCAKKwkJCQkJY2hhciAqcGF0aCwgc3RydWN0IGtuZnNkX2ZoICosIGludCBtYXhzaXplKTsKK2ludAkJCWV4cF9wc2V1ZG9yb290KHN0cnVjdCBhdXRoX2RvbWFpbiAqLCBzdHJ1Y3Qgc3ZjX2ZoICpmaHAsIHN0cnVjdCBjYWNoZV9yZXEgKmNyZXEpOworaW50CQkJbmZzZXJybm8oaW50IGVycm5vKTsKKworZXh0ZXJuIHZvaWQgZXhwa2V5X3B1dChzdHJ1Y3QgY2FjaGVfaGVhZCAqaXRlbSwgc3RydWN0IGNhY2hlX2RldGFpbCAqY2QpOworZXh0ZXJuIHZvaWQgc3ZjX2V4cG9ydF9wdXQoc3RydWN0IGNhY2hlX2hlYWQgKml0ZW0sIHN0cnVjdCBjYWNoZV9kZXRhaWwgKmNkKTsKK2V4dGVybiBzdHJ1Y3QgY2FjaGVfZGV0YWlsIHN2Y19leHBvcnRfY2FjaGUsIHN2Y19leHBrZXlfY2FjaGU7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBleHBfcHV0KHN0cnVjdCBzdmNfZXhwb3J0ICpleHApCit7CisJc3ZjX2V4cG9ydF9wdXQoJmV4cC0+aCwgJnN2Y19leHBvcnRfY2FjaGUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZXhwX2dldChzdHJ1Y3Qgc3ZjX2V4cG9ydCAqZXhwKQoreworCWNhY2hlX2dldCgmZXhwLT5oKTsKK30KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHN2Y19leHBvcnQgKgorZXhwX2ZpbmQoc3RydWN0IGF1dGhfZG9tYWluICpjbHAsIGludCBmc2lkX3R5cGUsIHUzMiAqZnNpZHYsCisJIHN0cnVjdCBjYWNoZV9yZXEgKnJlcXApCit7CisJc3RydWN0IHN2Y19leHBrZXkgKmVrID0gZXhwX2ZpbmRfa2V5KGNscCwgZnNpZF90eXBlLCBmc2lkdiwgcmVxcCk7CisJaWYgKGVrICYmICFJU19FUlIoZWspKSB7CisJCXN0cnVjdCBzdmNfZXhwb3J0ICpleHAgPSBlay0+ZWtfZXhwb3J0OworCQlpbnQgZXJyOworCQlleHBfZ2V0KGV4cCk7CisJCWV4cGtleV9wdXQoJmVrLT5oLCAmc3ZjX2V4cGtleV9jYWNoZSk7CisJCWlmICgoZXJyID0gY2FjaGVfY2hlY2soJnN2Y19leHBvcnRfY2FjaGUsICZleHAtPmgsIHJlcXApKSkKKwkJCWV4cCA9IEVSUl9QVFIoZXJyKTsKKwkJcmV0dXJuIGV4cDsKKwl9IGVsc2UKKwkJcmV0dXJuIEVSUl9QVFIoUFRSX0VSUihlaykpOworfQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogTkZTRF9FWFBPUlRfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mc2QvaW50ZXJmYWNlLmggYi9pbmNsdWRlL2xpbnV4L25mc2QvaW50ZXJmYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYwOTc5NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmZzZC9pbnRlcmZhY2UuaApAQCAtMCwwICsxLDEzIEBACisvKgorICogaW5jbHVkZS9saW51eC9uZnNkL2ludGVyZmFjZS5oCisgKgorICogZGVmaW5lcyBpbnRlcmZhY2UgYmV0d2VlbiBuZnNkIGFuZCBvdGhlciBiaXRzIG9mCisgKiB0aGUga2VybmVsLiAgUGFydGljdWxhcmx5IGZpbGVzeXN0ZW1zIChldmVudHVhbGx5KS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgTmVpbCBCcm93biA8bmVpbGJAY3NlLnVuc3cuZWR1LmF1PgorICovCisKKyNpZm5kZWYgTElOVVhfTkZTRF9JTlRFUkZBQ0VfSAorI2RlZmluZSBMSU5VWF9ORlNEX0lOVEVSRkFDRV9ICisKKyNlbmRpZiAvKiBMSU5VWF9ORlNEX0lOVEVSRkFDRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mc2QvbmZzZC5oIGIvaW5jbHVkZS9saW51eC9uZnNkL25mc2QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Zjg1ZDlhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZnNkL25mc2QuaApAQCAtMCwwICsxLDMxMSBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvbGludXgvbmZzZC9uZnNkLmgKKyAqCisgKiBIb2RnZS1wb2RnZSBjb2xsZWN0aW9uIG9mIGtuZnNkLXJlbGF0ZWQgc3R1ZmYuCisgKiBJIHdpbGwgc29ydCB0aGlzIG91dCBsYXRlci4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5NyBPbGFmIEtpcmNoIDxva2lyQG1vbmFkLnN3Yi5kZT4KKyAqLworCisjaWZuZGVmIExJTlVYX05GU0RfTkZTRF9ICisjZGVmaW5lIExJTlVYX05GU0RfTkZTRF9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2RpcmVudC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KKworI2luY2x1ZGUgPGxpbnV4L25mc2QvZGVidWcuaD4KKyNpbmNsdWRlIDxsaW51eC9uZnNkL25mc2ZoLmg+CisjaW5jbHVkZSA8bGludXgvbmZzZC9leHBvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9uZnNkL2F1dGguaD4KKyNpbmNsdWRlIDxsaW51eC9uZnNkL3N0YXRzLmg+CisjaW5jbHVkZSA8bGludXgvbmZzZC9pbnRlcmZhY2UuaD4KKy8qCisgKiBuZnNkIHZlcnNpb24KKyAqLworI2RlZmluZSBORlNEX1ZFUlNJT04JCSIwLjUiCisjZGVmaW5lIE5GU0RfU1VQUE9SVEVEX01JTk9SX1ZFUlNJT04JMAorCisjaWZkZWYgX19LRVJORUxfXworLyoKKyAqIFNwZWNpYWwgZmxhZ3MgZm9yIG5mc2RfcGVybWlzc2lvbi4gVGhlc2UgbXVzdCBiZSBkaWZmZXJlbnQgZnJvbSBNQVlfUkVBRCwKKyAqIE1BWV9XUklURSwgYW5kIE1BWV9FWEVDLgorICovCisjZGVmaW5lIE1BWV9OT1AJCQkwCisjZGVmaW5lIE1BWV9TQVRUUgkJOAorI2RlZmluZSBNQVlfVFJVTkMJCTE2CisjZGVmaW5lIE1BWV9MT0NLCQkzMgorI2RlZmluZSBNQVlfT1dORVJfT1ZFUlJJREUJNjQKKyNkZWZpbmUJTUFZX0xPQ0FMX0FDQ0VTUwkxMjggLyogSVJJWCBkb2luZyBsb2NhbCBhY2Nlc3MgY2hlY2sgb24gZGV2aWNlIHNwZWNpYWwgZmlsZSovCisjaWYgKE1BWV9TQVRUUiB8IE1BWV9UUlVOQyB8IE1BWV9MT0NLIHwgTUFZX09XTkVSX09WRVJSSURFIHwgTUFZX0xPQ0FMX0FDQ0VTUykgJiAoTUFZX1JFQUQgfCBNQVlfV1JJVEUgfCBNQVlfRVhFQykKKyMgZXJyb3IgInBsZWFzZSB1c2UgYSBkaWZmZXJlbnQgdmFsdWUgZm9yIE1BWV9TQVRUUiBvciBNQVlfVFJVTkMgb3IgTUFZX0xPQ0sgb3IgTUFZX0xPQ0FMX0FDQ0VTUyBvciBNQVlfT1dORVJfT1ZFUlJJREUuIgorI2VuZGlmCisjZGVmaW5lIE1BWV9DUkVBVEUJCShNQVlfRVhFQ3xNQVlfV1JJVEUpCisjZGVmaW5lIE1BWV9SRU1PVkUJCShNQVlfRVhFQ3xNQVlfV1JJVEV8TUFZX1RSVU5DKQorCisvKgorICogQ2FsbGJhY2sgZnVuY3Rpb24gZm9yIHJlYWRkaXIKKyAqLworc3RydWN0IHJlYWRkaXJfY2QgeworCWludAkJCWVycjsJLyogMCwgbmZzZXJyLCBvciBuZnNlcnJfZW9mICovCit9OwordHlwZWRlZiBpbnQJCSgqZW5jb2RlX2RlbnRfZm4pKHN0cnVjdCByZWFkZGlyX2NkICosIGNvbnN0IGNoYXIgKiwKKwkJCQkJCWludCwgbG9mZl90LCBpbm9fdCwgdW5zaWduZWQgaW50KTsKK3R5cGVkZWYgaW50ICgqbmZzZF9kaXJvcF90KShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqLCBpbnQsIGludCk7CisKK2V4dGVybiBzdHJ1Y3Qgc3ZjX3Byb2dyYW0JbmZzZF9wcm9ncmFtOworZXh0ZXJuIHN0cnVjdCBzdmNfdmVyc2lvbgluZnNkX3ZlcnNpb24yLCBuZnNkX3ZlcnNpb24zLAorCQkJCW5mc2RfdmVyc2lvbjQ7CisKKy8qCisgKiBGdW5jdGlvbiBwcm90b3R5cGVzLgorICovCitpbnQJCW5mc2Rfc3ZjKHVuc2lnbmVkIHNob3J0IHBvcnQsIGludCBucnNlcnZzKTsKK2ludAkJbmZzZF9kaXNwYXRjaChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCB1MzIgKnN0YXRwKTsKKworLyogbmZzZC92ZnMuYyAqLworaW50CQlmaF9sb2NrX3BhcmVudChzdHJ1Y3Qgc3ZjX2ZoICosIHN0cnVjdCBkZW50cnkgKik7CitpbnQJCW5mc2RfcmFjYWNoZV9pbml0KGludCk7Cit2b2lkCQluZnNkX3JhY2FjaGVfc2h1dGRvd24odm9pZCk7CitpbnQJCW5mc2RfY3Jvc3NfbW50KHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBkZW50cnkgKipkcHAsCisJCSAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3ZjX2V4cG9ydCAqKmV4cHApOworaW50CQluZnNkX2xvb2t1cChzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgc3RydWN0IHN2Y19maCAqLAorCQkJCWNvbnN0IGNoYXIgKiwgaW50LCBzdHJ1Y3Qgc3ZjX2ZoICopOworaW50CQluZnNkX3NldGF0dHIoc3RydWN0IHN2Y19ycXN0ICosIHN0cnVjdCBzdmNfZmggKiwKKwkJCQlzdHJ1Y3QgaWF0dHIgKiwgaW50LCB0aW1lX3QpOworI2lmZGVmIENPTkZJR19ORlNEX1Y0CitpbnQgICAgICAgICAgICAgbmZzZDRfc2V0X25mczRfYWNsKHN0cnVjdCBzdmNfcnFzdCAqLCBzdHJ1Y3Qgc3ZjX2ZoICosCisgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBuZnM0X2FjbCAqKTsKK2ludCAgICAgICAgICAgICBuZnNkNF9nZXRfbmZzNF9hY2woc3RydWN0IHN2Y19ycXN0ICosIHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IG5mczRfYWNsICoqKTsKKyNlbmRpZiAvKiBDT05GSUdfTkZTRF9WNCAqLworaW50CQluZnNkX2NyZWF0ZShzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgc3RydWN0IHN2Y19maCAqLAorCQkJCWNoYXIgKm5hbWUsIGludCBsZW4sIHN0cnVjdCBpYXR0ciAqYXR0cnMsCisJCQkJaW50IHR5cGUsIGRldl90IHJkZXYsIHN0cnVjdCBzdmNfZmggKnJlcyk7CisjaWZkZWYgQ09ORklHX05GU0RfVjMKK2ludAkJbmZzZF9hY2Nlc3Moc3RydWN0IHN2Y19ycXN0ICosIHN0cnVjdCBzdmNfZmggKiwgdTMyICosIHUzMiAqKTsKK2ludAkJbmZzZF9jcmVhdGVfdjMoc3RydWN0IHN2Y19ycXN0ICosIHN0cnVjdCBzdmNfZmggKiwKKwkJCQljaGFyICpuYW1lLCBpbnQgbGVuLCBzdHJ1Y3QgaWF0dHIgKmF0dHJzLAorCQkJCXN0cnVjdCBzdmNfZmggKnJlcywgaW50IGNyZWF0ZW1vZGUsCisJCQkJdTMyICp2ZXJpZmllciwgaW50ICp0cnVuY3ApOworaW50CQluZnNkX2NvbW1pdChzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgc3RydWN0IHN2Y19maCAqLAorCQkJCWxvZmZfdCwgdW5zaWduZWQgbG9uZyk7CisjZW5kaWYgLyogQ09ORklHX05GU0RfVjMgKi8KK2ludAkJbmZzZF9vcGVuKHN0cnVjdCBzdmNfcnFzdCAqLCBzdHJ1Y3Qgc3ZjX2ZoICosIGludCwKKwkJCQlpbnQsIHN0cnVjdCBmaWxlICoqKTsKK3ZvaWQJCW5mc2RfY2xvc2Uoc3RydWN0IGZpbGUgKik7CitpbnQgCQluZnNkX3JlYWQoc3RydWN0IHN2Y19ycXN0ICosIHN0cnVjdCBzdmNfZmggKiwgc3RydWN0IGZpbGUgKiwKKwkJCQlsb2ZmX3QsIHN0cnVjdCBrdmVjICosIGludCwgdW5zaWduZWQgbG9uZyAqKTsKK2ludCAJCW5mc2Rfd3JpdGUoc3RydWN0IHN2Y19ycXN0ICosIHN0cnVjdCBzdmNfZmggKixzdHJ1Y3QgZmlsZSAqLAorCQkJCWxvZmZfdCwgc3RydWN0IGt2ZWMgKixpbnQsIHVuc2lnbmVkIGxvbmcsIGludCAqKTsKK2ludAkJbmZzZF9yZWFkbGluayhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgc3RydWN0IHN2Y19maCAqLAorCQkJCWNoYXIgKiwgaW50ICopOworaW50CQluZnNkX3N5bWxpbmsoc3RydWN0IHN2Y19ycXN0ICosIHN0cnVjdCBzdmNfZmggKiwKKwkJCQljaGFyICpuYW1lLCBpbnQgbGVuLCBjaGFyICpwYXRoLCBpbnQgcGxlbiwKKwkJCQlzdHJ1Y3Qgc3ZjX2ZoICpyZXMsIHN0cnVjdCBpYXR0ciAqKTsKK2ludAkJbmZzZF9saW5rKHN0cnVjdCBzdmNfcnFzdCAqLCBzdHJ1Y3Qgc3ZjX2ZoICosCisJCQkJY2hhciAqLCBpbnQsIHN0cnVjdCBzdmNfZmggKik7CitpbnQJCW5mc2RfcmVuYW1lKHN0cnVjdCBzdmNfcnFzdCAqLAorCQkJCXN0cnVjdCBzdmNfZmggKiwgY2hhciAqLCBpbnQsCisJCQkJc3RydWN0IHN2Y19maCAqLCBjaGFyICosIGludCk7CitpbnQJCW5mc2RfcmVtb3ZlKHN0cnVjdCBzdmNfcnFzdCAqLAorCQkJCXN0cnVjdCBzdmNfZmggKiwgY2hhciAqLCBpbnQpOworaW50CQluZnNkX3VubGluayhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgc3RydWN0IHN2Y19maCAqLCBpbnQgdHlwZSwKKwkJCQljaGFyICpuYW1lLCBpbnQgbGVuKTsKK2ludAkJbmZzZF90cnVuY2F0ZShzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgc3RydWN0IHN2Y19maCAqLAorCQkJCXVuc2lnbmVkIGxvbmcgc2l6ZSk7CitpbnQJCW5mc2RfcmVhZGRpcihzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgc3RydWN0IHN2Y19maCAqLAorCQkJICAgICBsb2ZmX3QgKiwgc3RydWN0IHJlYWRkaXJfY2QgKiwgZW5jb2RlX2RlbnRfZm4pOworaW50CQluZnNkX3N0YXRmcyhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgc3RydWN0IHN2Y19maCAqLAorCQkJCXN0cnVjdCBrc3RhdGZzICopOworCitpbnQJCW5mc2Rfbm90aWZ5X2NoYW5nZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGlhdHRyICopOworaW50CQluZnNkX3Blcm1pc3Npb24oc3RydWN0IHN2Y19leHBvcnQgKiwgc3RydWN0IGRlbnRyeSAqLCBpbnQpOworCisKKy8qIAorICogTkZTdjQgU3RhdGUKKyAqLworI2lmZGVmIENPTkZJR19ORlNEX1Y0CitpbnQgbmZzNF9zdGF0ZV9pbml0KHZvaWQpOwordm9pZCBuZnM0X3N0YXRlX3NodXRkb3duKHZvaWQpOwordGltZV90IG5mczRfbGVhc2VfdGltZSh2b2lkKTsKK3ZvaWQgbmZzNF9yZXNldF9sZWFzZSh0aW1lX3QgbGVhc2V0aW1lKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBuZnM0X3N0YXRlX2luaXQodm9pZCl7cmV0dXJuIDA7fQorc3RhdGljIGlubGluZSB2b2lkIG5mczRfc3RhdGVfc2h1dGRvd24odm9pZCl7fQorc3RhdGljIGlubGluZSB0aW1lX3QgbmZzNF9sZWFzZV90aW1lKHZvaWQpe3JldHVybiAwO30KK3N0YXRpYyBpbmxpbmUgdm9pZCBuZnM0X3Jlc2V0X2xlYXNlKHRpbWVfdCBsZWFzZXRpbWUpe30KKyNlbmRpZgorCisvKgorICogbG9ja2QgYmluZGluZworICovCit2b2lkCQluZnNkX2xvY2tkX2luaXQodm9pZCk7Cit2b2lkCQluZnNkX2xvY2tkX3NodXRkb3duKHZvaWQpOworCisKKy8qCisgKiBUaGVzZSBtYWNyb3MgcHJvdmlkZSBwcmUteGRyJ2VkIHZhbHVlcyBmb3IgZmFzdGVyIG9wZXJhdGlvbi4KKyAqLworI2RlZmluZQluZnNfb2sJCQlfX2NvbnN0YW50X2h0b25sKE5GU19PSykKKyNkZWZpbmUJbmZzZXJyX3Blcm0JCV9fY29uc3RhbnRfaHRvbmwoTkZTRVJSX1BFUk0pCisjZGVmaW5lCW5mc2Vycl9ub2VudAkJX19jb25zdGFudF9odG9ubChORlNFUlJfTk9FTlQpCisjZGVmaW5lCW5mc2Vycl9pbwkJX19jb25zdGFudF9odG9ubChORlNFUlJfSU8pCisjZGVmaW5lCW5mc2Vycl9ueGlvCQlfX2NvbnN0YW50X2h0b25sKE5GU0VSUl9OWElPKQorI2RlZmluZQluZnNlcnJfZWFnYWluCQlfX2NvbnN0YW50X2h0b25sKE5GU0VSUl9FQUdBSU4pCisjZGVmaW5lCW5mc2Vycl9hY2NlcwkJX19jb25zdGFudF9odG9ubChORlNFUlJfQUNDRVMpCisjZGVmaW5lCW5mc2Vycl9leGlzdAkJX19jb25zdGFudF9odG9ubChORlNFUlJfRVhJU1QpCisjZGVmaW5lCW5mc2Vycl94ZGV2CQlfX2NvbnN0YW50X2h0b25sKE5GU0VSUl9YREVWKQorI2RlZmluZQluZnNlcnJfbm9kZXYJCV9fY29uc3RhbnRfaHRvbmwoTkZTRVJSX05PREVWKQorI2RlZmluZQluZnNlcnJfbm90ZGlyCQlfX2NvbnN0YW50X2h0b25sKE5GU0VSUl9OT1RESVIpCisjZGVmaW5lCW5mc2Vycl9pc2RpcgkJX19jb25zdGFudF9odG9ubChORlNFUlJfSVNESVIpCisjZGVmaW5lCW5mc2Vycl9pbnZhbAkJX19jb25zdGFudF9odG9ubChORlNFUlJfSU5WQUwpCisjZGVmaW5lCW5mc2Vycl9mYmlnCQlfX2NvbnN0YW50X2h0b25sKE5GU0VSUl9GQklHKQorI2RlZmluZQluZnNlcnJfbm9zcGMJCV9fY29uc3RhbnRfaHRvbmwoTkZTRVJSX05PU1BDKQorI2RlZmluZQluZnNlcnJfcm9mcwkJX19jb25zdGFudF9odG9ubChORlNFUlJfUk9GUykKKyNkZWZpbmUJbmZzZXJyX21saW5rCQlfX2NvbnN0YW50X2h0b25sKE5GU0VSUl9NTElOSykKKyNkZWZpbmUJbmZzZXJyX29wbm90c3VwcAlfX2NvbnN0YW50X2h0b25sKE5GU0VSUl9PUE5PVFNVUFApCisjZGVmaW5lCW5mc2Vycl9uYW1ldG9vbG9uZwlfX2NvbnN0YW50X2h0b25sKE5GU0VSUl9OQU1FVE9PTE9ORykKKyNkZWZpbmUJbmZzZXJyX25vdGVtcHR5CQlfX2NvbnN0YW50X2h0b25sKE5GU0VSUl9OT1RFTVBUWSkKKyNkZWZpbmUJbmZzZXJyX2RxdW90CQlfX2NvbnN0YW50X2h0b25sKE5GU0VSUl9EUVVPVCkKKyNkZWZpbmUJbmZzZXJyX3N0YWxlCQlfX2NvbnN0YW50X2h0b25sKE5GU0VSUl9TVEFMRSkKKyNkZWZpbmUJbmZzZXJyX3JlbW90ZQkJX19jb25zdGFudF9odG9ubChORlNFUlJfUkVNT1RFKQorI2RlZmluZQluZnNlcnJfd2ZsdXNoCQlfX2NvbnN0YW50X2h0b25sKE5GU0VSUl9XRkxVU0gpCisjZGVmaW5lCW5mc2Vycl9iYWRoYW5kbGUJX19jb25zdGFudF9odG9ubChORlNFUlJfQkFESEFORExFKQorI2RlZmluZQluZnNlcnJfbm90c3luYwkJX19jb25zdGFudF9odG9ubChORlNFUlJfTk9UX1NZTkMpCisjZGVmaW5lCW5mc2Vycl9iYWRjb29raWUJX19jb25zdGFudF9odG9ubChORlNFUlJfQkFEX0NPT0tJRSkKKyNkZWZpbmUJbmZzZXJyX25vdHN1cHAJCV9fY29uc3RhbnRfaHRvbmwoTkZTRVJSX05PVFNVUFApCisjZGVmaW5lCW5mc2Vycl90b29zbWFsbAkJX19jb25zdGFudF9odG9ubChORlNFUlJfVE9PU01BTEwpCisjZGVmaW5lCW5mc2Vycl9zZXJ2ZXJmYXVsdAlfX2NvbnN0YW50X2h0b25sKE5GU0VSUl9TRVJWRVJGQVVMVCkKKyNkZWZpbmUJbmZzZXJyX2JhZHR5cGUJCV9fY29uc3RhbnRfaHRvbmwoTkZTRVJSX0JBRFRZUEUpCisjZGVmaW5lCW5mc2Vycl9qdWtlYm94CQlfX2NvbnN0YW50X2h0b25sKE5GU0VSUl9KVUtFQk9YKQorI2RlZmluZQluZnNlcnJfZGVuaWVkCQlfX2NvbnN0YW50X2h0b25sKE5GU0VSUl9ERU5JRUQpCisjZGVmaW5lCW5mc2Vycl9kZWFkbG9jawkJX19jb25zdGFudF9odG9ubChORlNFUlJfREVBRExPQ0spCisjZGVmaW5lIG5mc2Vycl9leHBpcmVkICAgICAgICAgIF9fY29uc3RhbnRfaHRvbmwoTkZTRVJSX0VYUElSRUQpCisjZGVmaW5lCW5mc2Vycl9iYWRfY29va2llCV9fY29uc3RhbnRfaHRvbmwoTkZTRVJSX0JBRF9DT09LSUUpCisjZGVmaW5lCW5mc2Vycl9zYW1lCQlfX2NvbnN0YW50X2h0b25sKE5GU0VSUl9TQU1FKQorI2RlZmluZQluZnNlcnJfY2xpZF9pbnVzZQlfX2NvbnN0YW50X2h0b25sKE5GU0VSUl9DTElEX0lOVVNFKQorI2RlZmluZQluZnNlcnJfc3RhbGVfY2xpZW50aWQJX19jb25zdGFudF9odG9ubChORlNFUlJfU1RBTEVfQ0xJRU5USUQpCisjZGVmaW5lCW5mc2Vycl9yZXNvdXJjZQkJX19jb25zdGFudF9odG9ubChORlNFUlJfUkVTT1VSQ0UpCisjZGVmaW5lCW5mc2Vycl9ub2ZpbGVoYW5kbGUJX19jb25zdGFudF9odG9ubChORlNFUlJfTk9GSUxFSEFORExFKQorI2RlZmluZQluZnNlcnJfbWlub3JfdmVyc19taXNtYXRjaAlfX2NvbnN0YW50X2h0b25sKE5GU0VSUl9NSU5PUl9WRVJTX01JU01BVENIKQorI2RlZmluZSBuZnNlcnJfc2hhcmVfZGVuaWVkCV9fY29uc3RhbnRfaHRvbmwoTkZTRVJSX1NIQVJFX0RFTklFRCkKKyNkZWZpbmUgbmZzZXJyX3N0YWxlX3N0YXRlaWQJX19jb25zdGFudF9odG9ubChORlNFUlJfU1RBTEVfU1RBVEVJRCkKKyNkZWZpbmUgbmZzZXJyX29sZF9zdGF0ZWlkCV9fY29uc3RhbnRfaHRvbmwoTkZTRVJSX09MRF9TVEFURUlEKQorI2RlZmluZSBuZnNlcnJfYmFkX3N0YXRlaWQJX19jb25zdGFudF9odG9ubChORlNFUlJfQkFEX1NUQVRFSUQpCisjZGVmaW5lIG5mc2Vycl9iYWRfc2VxaWQJX19jb25zdGFudF9odG9ubChORlNFUlJfQkFEX1NFUUlEKQorI2RlZmluZQluZnNlcnJfc3ltbGluawkJX19jb25zdGFudF9odG9ubChORlNFUlJfU1lNTElOSykKKyNkZWZpbmUJbmZzZXJyX25vdF9zYW1lCQlfX2NvbnN0YW50X2h0b25sKE5GU0VSUl9OT1RfU0FNRSkKKyNkZWZpbmUJbmZzZXJyX3Jlc3RvcmVmaAlfX2NvbnN0YW50X2h0b25sKE5GU0VSUl9SRVNUT1JFRkgpCisjZGVmaW5lCW5mc2Vycl9hdHRybm90c3VwcAlfX2NvbnN0YW50X2h0b25sKE5GU0VSUl9BVFRSTk9UU1VQUCkKKyNkZWZpbmUJbmZzZXJyX2JhZF94ZHIJCV9fY29uc3RhbnRfaHRvbmwoTkZTRVJSX0JBRF9YRFIpCisjZGVmaW5lCW5mc2Vycl9vcGVubW9kZQkJX19jb25zdGFudF9odG9ubChORlNFUlJfT1BFTk1PREUpCisjZGVmaW5lCW5mc2Vycl9sb2Nrc19oZWxkCV9fY29uc3RhbnRfaHRvbmwoTkZTRVJSX0xPQ0tTX0hFTEQpCisjZGVmaW5lCW5mc2Vycl9vcF9pbGxlZ2FsCV9fY29uc3RhbnRfaHRvbmwoTkZTRVJSX09QX0lMTEVHQUwpCisjZGVmaW5lCW5mc2Vycl9ncmFjZQkJX19jb25zdGFudF9odG9ubChORlNFUlJfR1JBQ0UpCisjZGVmaW5lCW5mc2Vycl9ub19ncmFjZQkJX19jb25zdGFudF9odG9ubChORlNFUlJfTk9fR1JBQ0UpCisjZGVmaW5lCW5mc2Vycl9yZWNsYWltX2JhZAlfX2NvbnN0YW50X2h0b25sKE5GU0VSUl9SRUNMQUlNX0JBRCkKKyNkZWZpbmUJbmZzZXJyX2JhZG5hbWUJCV9fY29uc3RhbnRfaHRvbmwoTkZTRVJSX0JBRE5BTUUpCisjZGVmaW5lCW5mc2Vycl9jYl9wYXRoX2Rvd24JX19jb25zdGFudF9odG9ubChORlNFUlJfQ0JfUEFUSF9ET1dOKQorCisvKiBlcnJvciBjb2RlcyBmb3IgaW50ZXJuYWwgdXNlICovCisvKiBpZiBhIHJlcXVlc3QgZmFpbHMgZHVlIHRvIGttYWxsb2MgZmFpbHVyZSwgaXQgZ2V0cyBkcm9wcGVkLgorICogIENsaWVudCBzaG91bGQgcmVzZW5kIGV2ZW50dWFsbHkKKyAqLworI2RlZmluZQluZnNlcnJfZHJvcGl0CQlfX2NvbnN0YW50X2h0b25sKDMwMDAwKQorLyogZW5kLW9mLWZpbGUgaW5kaWNhdG9yIGluIHJlYWRkaXIgKi8KKyNkZWZpbmUJbmZzZXJyX2VvZgkJX19jb25zdGFudF9odG9ubCgzMDAwMSkKKworLyogQ2hlY2sgZm9yIGRpciBlbnRyaWVzICcuJyBhbmQgJy4uJyAqLworI2RlZmluZSBpc2RvdGVudChuLCBsKQkobCA8IDMgJiYgblswXSA9PSAnLicgJiYgKGwgPT0gMSB8fCBuWzFdID09ICcuJykpCisKKy8qCisgKiBUaW1lIG9mIHNlcnZlciBzdGFydHVwCisgKi8KK2V4dGVybiBzdHJ1Y3QgdGltZXZhbAluZnNzdmNfYm9vdDsKKworc3RhdGljIGlubGluZSBpbnQgaXNfZnNpZChzdHJ1Y3Qgc3ZjX2ZoICpmaCwgc3RydWN0IGtuZnNkX2ZoICpyZWZmaCkKK3sKKwlpZiAoZmgtPmZoX2V4cG9ydC0+ZXhfZmxhZ3MgJiBORlNFWFBfRlNJRCkgeworCQlzdHJ1Y3QgdmZzbW91bnQgKm1udCA9IGZoLT5maF9leHBvcnQtPmV4X21udDsKKwkJaWYgKCFvbGRfdmFsaWRfZGV2KG1udC0+bW50X3NiLT5zX2RldikgfHwKKwkJICAgIChyZWZmaC0+ZmhfdmVyc2lvbiA9PSAxICYmIHJlZmZoLT5maF9mc2lkX3R5cGUgPT0gMSkpCisJCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKworI2lmZGVmIENPTkZJR19ORlNEX1Y0CisKKy8qIGJlZm9yZSBwcm9jZXNzaW5nIGEgQ09NUE9VTkQgb3BlcmF0aW9uLCB3ZSBoYXZlIHRvIGNoZWNrIHRoYXQgdGhlcmUKKyAqIGlzIGVub3VnaCBzcGFjZSBpbiB0aGUgYnVmZmVyIGZvciBYRFIgZW5jb2RlIHRvIHN1Y2NlZWQuICBvdGhlcndpc2UsCisgKiB3ZSBtaWdodCBwcm9jZXNzIGFuIG9wZXJhdGlvbiB3aXRoIHNpZGUgZWZmZWN0cywgYW5kIGJlIHVuYWJsZSB0bworICogdGVsbCB0aGUgY2xpZW50IHRoYXQgdGhlIG9wZXJhdGlvbiBzdWNjZWVkZWQuCisgKgorICogQ09NUE9VTkRfU0xBQ0tfU1BBQ0UgLSB0aGlzIGlzIHRoZSBtaW5pbXVtIGFtb3VudCBvZiBidWZmZXIgc3BhY2UKKyAqIG5lZWRlZCB0byBlbmNvZGUgYW4gIm9yZGluYXJ5IiBfc3VjY2Vzc2Z1bF8gb3BlcmF0aW9uLiAgKEdFVEFUVFIsCisgKiBSRUFELCBSRUFERElSLCBhbmQgUkVBRExJTksgaGF2ZSB0aGVpciBvd24gYnVmZmVyIGNoZWNrcy4pICBpZiB3ZQorICogZmFsbCBiZWxvdyB0aGlzIGxldmVsLCB3ZSBmYWlsIHRoZSBuZXh0IG9wZXJhdGlvbiB3aXRoIE5GUzRFUlJfUkVTT1VSQ0UuCisgKgorICogQ09NUE9VTkRfRVJSX1NMQUNLX1NQQUNFIC0gdGhpcyBpcyB0aGUgbWluaW11bSBhbW91bnQgb2YgYnVmZmVyIHNwYWNlCisgKiBuZWVkZWQgdG8gZW5jb2RlIGFuIG9wZXJhdGlvbiB3aGljaCBoYXMgZmFpbGVkIHdpdGggTkZTNEVSUl9SRVNPVVJDRS4KKyAqIGNhcmUgaXMgdGFrZW4gdG8gZW5zdXJlIHRoYXQgd2UgbmV2ZXIgZmFsbCBiZWxvdyB0aGlzIGxldmVsIGZvciBhbnkKKyAqIHJlYXNvbi4KKyAqLworI2RlZmluZQlDT01QT1VORF9TTEFDS19TUEFDRQkJMTQwICAgIC8qIE9QX0dFVEZIICovCisjZGVmaW5lIENPTVBPVU5EX0VSUl9TTEFDS19TUEFDRQkxMiAgICAgLyogT1BfU0VUQVRUUiAqLworCisjZGVmaW5lIE5GU0RfTEVBU0VfVElNRSAgICAgICAgICAgICAgICAgKG5mczRfbGVhc2VfdGltZSgpKQorI2RlZmluZSBORlNEX0xBVU5EUk9NQVRfTUlOVElNRU9VVCAgICAgIDEwICAgLyogc2Vjb25kcyAqLworCisvKgorICogVGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIGFyZSBjdXJyZW50bHkgbm90IHN1cHBvcnRlZCBieSB0aGUgTkZTdjQgc2VydmVyOgorICogICAgQVJDSElWRSAgICAgICAoZGVwcmVjYXRlZCBhbnl3YXkpCisgKiAgICBGU19MT0NBVElPTlMgICh3aWxsIGJlIHN1cHBvcnRlZCBldmVudHVhbGx5KQorICogICAgSElEREVOICAgICAgICAodW5saWtlbHkgdG8gYmUgc3VwcG9ydGVkIGFueSB0aW1lIHNvb24pCisgKiAgICBNSU1FVFlQRSAgICAgICh1bmxpa2VseSB0byBiZSBzdXBwb3J0ZWQgYW55IHRpbWUgc29vbikKKyAqICAgIFFVT1RBXyogICAgICAgKHdpbGwgYmUgc3VwcG9ydGVkIGluIGEgZm9ydGhjb21pbmcgcGF0Y2gpCisgKiAgICBTWVNURU0gICAgICAgICh1bmxpa2VseSB0byBiZSBzdXBwb3J0ZWQgYW55IHRpbWUgc29vbikKKyAqICAgIFRJTUVfQkFDS1VQICAgKHVubGlrZWx5IHRvIGJlIHN1cHBvcnRlZCBhbnkgdGltZSBzb29uKQorICogICAgVElNRV9DUkVBVEUgICAodW5saWtlbHkgdG8gYmUgc3VwcG9ydGVkIGFueSB0aW1lIHNvb24pCisgKi8KKyNkZWZpbmUgTkZTRF9TVVBQT1JURURfQVRUUlNfV09SRDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKEZBVFRSNF9XT1JEMF9TVVBQT1JURURfQVRUUlMgICB8IEZBVFRSNF9XT1JEMF9UWVBFICAgICAgICAgfCBGQVRUUjRfV09SRDBfRkhfRVhQSVJFX1RZUEUgICBcCisgfCBGQVRUUjRfV09SRDBfQ0hBTkdFICAgICAgICAgIHwgRkFUVFI0X1dPUkQwX1NJWkUgICAgICAgICB8IEZBVFRSNF9XT1JEMF9MSU5LX1NVUFBPUlQgICAgIFwKKyB8IEZBVFRSNF9XT1JEMF9TWU1MSU5LX1NVUFBPUlQgfCBGQVRUUjRfV09SRDBfTkFNRURfQVRUUiAgIHwgRkFUVFI0X1dPUkQwX0ZTSUQgICAgICAgICAgICAgXAorIHwgRkFUVFI0X1dPUkQwX1VOSVFVRV9IQU5ETEVTICB8IEZBVFRSNF9XT1JEMF9MRUFTRV9USU1FICAgfCBGQVRUUjRfV09SRDBfUkRBVFRSX0VSUk9SICAgICBcCisgfCBGQVRUUjRfV09SRDBfQUNMU1VQUE9SVCAgICAgIHwgRkFUVFI0X1dPUkQwX0NBTlNFVFRJTUUgICB8IEZBVFRSNF9XT1JEMF9DQVNFX0lOU0VOU0lUSVZFIFwKKyB8IEZBVFRSNF9XT1JEMF9DQVNFX1BSRVNFUlZJTkcgfCBGQVRUUjRfV09SRDBfQ0hPV05fUkVTVFJJQ1RFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorIHwgRkFUVFI0X1dPUkQwX0ZJTEVIQU5ETEUgICAgICB8IEZBVFRSNF9XT1JEMF9GSUxFSUQgICAgICAgfCBGQVRUUjRfV09SRDBfRklMRVNfQVZBSUwgICAgICBcCisgfCBGQVRUUjRfV09SRDBfRklMRVNfRlJFRSAgICAgIHwgRkFUVFI0X1dPUkQwX0ZJTEVTX1RPVEFMICB8IEZBVFRSNF9XT1JEMF9IT01PR0VORU9VUyAgICAgIFwKKyB8IEZBVFRSNF9XT1JEMF9NQVhGSUxFU0laRSAgICAgfCBGQVRUUjRfV09SRDBfTUFYTElOSyAgICAgIHwgRkFUVFI0X1dPUkQwX01BWE5BTUUgICAgICAgICAgXAorIHwgRkFUVFI0X1dPUkQwX01BWFJFQUQgICAgICAgICB8IEZBVFRSNF9XT1JEMF9NQVhXUklURSAgICAgfCBGQVRUUjRfV09SRDBfQUNMKQorCisjZGVmaW5lIE5GU0RfU1VQUE9SVEVEX0FUVFJTX1dPUkQxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyhGQVRUUjRfV09SRDFfTU9ERSAgICAgICAgICAgICAgfCBGQVRUUjRfV09SRDFfTk9fVFJVTkMgICAgIHwgRkFUVFI0X1dPUkQxX05VTUxJTktTICAgICAgICAgXAorIHwgRkFUVFI0X1dPUkQxX09XTkVSCSAgICAgICAgfCBGQVRUUjRfV09SRDFfT1dORVJfR1JPVVAgIHwgRkFUVFI0X1dPUkQxX1JBV0RFViAgICAgICAgICAgXAorIHwgRkFUVFI0X1dPUkQxX1NQQUNFX0FWQUlMICAgICB8IEZBVFRSNF9XT1JEMV9TUEFDRV9GUkVFICAgfCBGQVRUUjRfV09SRDFfU1BBQ0VfVE9UQUwgICAgICBcCisgfCBGQVRUUjRfV09SRDFfU1BBQ0VfVVNFRCAgICAgIHwgRkFUVFI0X1dPUkQxX1RJTUVfQUNDRVNTICB8IEZBVFRSNF9XT1JEMV9USU1FX0FDQ0VTU19TRVQgIFwKKyB8IEZBVFRSNF9XT1JEMV9USU1FX0RFTFRBICAgfCBGQVRUUjRfV09SRDFfVElNRV9NRVRBREFUQSAgICBcCisgfCBGQVRUUjRfV09SRDFfVElNRV9NT0RJRlkgICAgIHwgRkFUVFI0X1dPUkQxX1RJTUVfTU9ESUZZX1NFVCB8IEZBVFRSNF9XT1JEMV9NT1VOVEVEX09OX0ZJTEVJRCkKKworLyogVGhlc2Ugd2lsbCByZXR1cm4gRVJSX0lOVkFMIGlmIHNwZWNpZmllZCBpbiBHRVRBVFRSIG9yIFJFQURESVIuICovCisjZGVmaW5lIE5GU0RfV1JJVEVPTkxZX0FUVFJTX1dPUkQxCQkJCQkJCSAgICBcCisoRkFUVFI0X1dPUkQxX1RJTUVfQUNDRVNTX1NFVCAgIHwgRkFUVFI0X1dPUkQxX1RJTUVfTU9ESUZZX1NFVCkKKworLyogVGhlc2UgYXJlIHRoZSBvbmx5IGF0dHJzIGFsbG93ZWQgaW4gQ1JFQVRFL09QRU4vU0VUQVRUUi4gKi8KKyNkZWZpbmUgTkZTRF9XUklURUFCTEVfQVRUUlNfV09SRDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKEZBVFRSNF9XT1JEMF9TSVpFICAgICAgICAgICAgICB8IEZBVFRSNF9XT1JEMF9BQ0wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyNkZWZpbmUgTkZTRF9XUklURUFCTEVfQVRUUlNfV09SRDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKEZBVFRSNF9XT1JEMV9NT0RFICAgICAgICAgICAgICB8IEZBVFRSNF9XT1JEMV9PV05FUiAgICAgICAgIHwgRkFUVFI0X1dPUkQxX09XTkVSX0dST1VQICAgICBcCisgfCBGQVRUUjRfV09SRDFfVElNRV9BQ0NFU1NfU0VUIHwgRkFUVFI0X1dPUkQxX1RJTUVfTUVUQURBVEEgfCBGQVRUUjRfV09SRDFfVElNRV9NT0RJRllfU0VUKQorCisjZW5kaWYgLyogQ09ORklHX05GU0RfVjQgKi8KKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIExJTlVYX05GU0RfTkZTRF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mc2QvbmZzZmguaCBiL2luY2x1ZGUvbGludXgvbmZzZC9uZnNmaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiODQyZWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L25mc2QvbmZzZmguaApAQCAtMCwwICsxLDM0MyBAQAorLyoKKyAqIGluY2x1ZGUvbGludXgvbmZzZC9uZnNmaC5oCisgKgorICogVGhpcyBmaWxlIGRlc2NyaWJlcyB0aGUgbGF5b3V0IG9mIHRoZSBmaWxlIGhhbmRsZXMgYXMgcGFzc2VkCisgKiBvdmVyIHRoZSB3aXJlLgorICoKKyAqIEVhcmxpZXIgdmVyc2lvbnMgb2Yga25mc2QgdXNlZCB0byBzaWduIGZpbGUgaGFuZGxlcyB1c2luZyBrZXllZCBNRDUKKyAqIG9yIFNIQS4gSSd2ZSByZW1vdmVkIHRoaXMgY29kZSwgYmVjYXVzZSBpdCBkb2Vzbid0IGdpdmUgeW91IG1vcmUKKyAqIHNlY3VyaXR5IHRoYW4gYmxvY2tpbmcgZXh0ZXJuYWwgYWNjZXNzIHRvIHBvcnQgMjA0OSBvbiB5b3VyIGZpcmV3YWxsLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiwgMTk5NyBPbGFmIEtpcmNoIDxva2lyQG1vbmFkLnN3Yi5kZT4KKyAqLworCisjaWZuZGVmIF9MSU5VWF9ORlNEX0ZIX0gKKyNkZWZpbmUgX0xJTlVYX05GU0RfRkhfSAorCisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaWZkZWYgX19LRVJORUxfXworIyBpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyMgaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyMgaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjIGluY2x1ZGUgPGxpbnV4L2ZzLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxsaW51eC9uZnNkL2NvbnN0Lmg+CisjaW5jbHVkZSA8bGludXgvbmZzZC9kZWJ1Zy5oPgorCisvKgorICogVGhpcyBpcyB0aGUgb2xkICJkZW50cnkgc3R5bGUiIExpbnV4IE5GU3YyIGZpbGUgaGFuZGxlLgorICoKKyAqIFRoZSB4aW5vIGFuZCB4ZGV2IGZpZWxkcyBhcmUgY3VycmVudGx5IHVzZWQgdG8gdHJhbnNwb3J0IHRoZQorICogaW5vL2RldiBvZiB0aGUgZXhwb3J0ZWQgaW5vZGUuCisgKi8KK3N0cnVjdCBuZnNfZmhiYXNlX29sZCB7CisJX191MzIJCWZiX2Rjb29raWU7CS8qIGRlbnRyeSBjb29raWUgLSBhbHdheXMgMHhmZWViYmFjYSAqLworCV9fdTMyCQlmYl9pbm87CQkvKiBvdXIgaW5vZGUgbnVtYmVyICovCisJX191MzIJCWZiX2RpcmlubzsJLyogZGlyIGlub2RlIG51bWJlciwgMCBmb3IgZGlyZWN0b3JpZXMgKi8KKwlfX3UzMgkJZmJfZGV2OwkJLyogb3VyIGRldmljZSAqLworCV9fdTMyCQlmYl94ZGV2OworCV9fdTMyCQlmYl94aW5vOworCV9fdTMyCQlmYl9nZW5lcmF0aW9uOworfTsKKworLyoKKyAqIFRoaXMgaXMgdGhlIG5ldyBmbGV4aWJsZSwgZXh0ZW5zaWJsZSBzdHlsZSBORlN2Mi92MyBmaWxlIGhhbmRsZS4KKyAqIGJ5IE5laWwgQnJvd24gPG5laWxiQGNzZS51bnN3LmVkdS5hdT4gLSBNYXJjaCAyMDAwCisgKgorICogVGhlIGZpbGUgaGFuZGxlIGlzIHNlZW5zIGFzIGEgbGlzdCBvZiA0Ynl0ZSB3b3Jkcy4KKyAqIFRoZSBmaXJzdCB3b3JkIGNvbnRhaW5zIGEgdmVyc2lvbiBudW1iZXIgKDEpIGFuZCBmb3VyIGRlc2NyaXB0b3IgYnl0ZXMKKyAqIHRoYXQgdGVsbCBob3cgdGhlIHJlbWFpbmluZyAzIHZhcmlhYmxlIGxlbmd0aCBmaWVsZHMgc2hvdWxkIGJlIGhhbmRsZWQuCisgKiBUaGVzZSB0aHJlZSBieXRlcyBhcmUgYXV0aF90eXBlLCBmc2lkX3R5cGUgYW5kIGZpbGVpZF90eXBlLgorICoKKyAqIEFsbCA0Ynl0ZSB2YWx1ZXMgYXJlIGluIGhvc3QtYnl0ZS1vcmRlci4KKyAqCisgKiBUaGUgYXV0aF90eXBlIGZpZWxkIHNwZWNpZmllcyBob3cgdGhlIGZpbGVoYW5kbGUgY2FuIGJlIGF1dGhlbnRpY2F0ZWQKKyAqIFRoaXMgbWlnaHQgYWxsb3cgYSBmaWxlIHRvIGJlIGNvbmZpcm1lZCB0byBiZSBpbiBhIHdyaXRhYmxlIHBhcnQgb2YgYQorICogZmlsZXRyZWUgd2l0aG91dCBjaGVja2luZyB0aGUgcGF0aCBmcm9tIGl0IHVwdG8gdGhlIHJvb3QuCisgKiBDdXJyZW50IHZhbHVlczoKKyAqICAgICAwICAtIE5vIGF1dGhlbnRpY2F0aW9uLiAgZmJfYXV0aCBpcyAwIGJ5dGVzIGxvbmcKKyAqIFBvc3NpYmxlIGZ1dHVyZSB2YWx1ZXM6CisgKiAgICAgMSAgLSA0IGJ5dGVzIHRha2VuIGZyb20gTUQ1IGhhc2ggb2YgdGhlIHJlbWFpbmVyIG9mIHRoZSBmaWxlIGhhbmRsZQorICogICAgICAgICAgcHJlZml4ZWQgYnkgYSBzZWNyZXQgYW5kIHdpdGggdGhlIGltcG9ydGFudCBleHBvcnQgZmxhZ3MuCisgKgorICogVGhlIGZzaWRfdHlwZSBpZGVudGlmaWVzIGhvdyB0aGUgZmlsZXN5c3RlbSAob3IgZXhwb3J0IHBvaW50KSBpcworICogICAgZW5jb2RlZC4KKyAqICBDdXJyZW50IHZhbHVlczoKKyAqICAgICAwICAtIDQgYnl0ZSBkZXZpY2UgaWQgKG1zLTItYnl0ZXMgbWFqb3IsIGxzLTItYnl0ZXMgbWlub3IpLCA0Ynl0ZSBpbm9kZSBudW1iZXIKKyAqICAgICAgICBOT1RFOiB3ZSBjYW5ub3QgdXNlIHRoZSBrZGV2X3QgZGV2aWNlIGlkIHZhbHVlLCBiZWNhdXNlIGtkZXZfdC5oCisgKiAgICAgICAgICAgICAgc2F5cyB3ZSBtdXN0bid0LiAgV2UgbXVzdCBicmVhayBpdCB1cCBhbmQgcmVhc3NlbWJsZS4KKyAqICAgICAxICAtIDQgYnl0ZSB1c2VyIHNwZWNpZmllZCBpZGVudGlmaWVyCisgKiAgICAgMiAgLSA0IGJ5dGUgbWFqb3IsIDQgYnl0ZSBtaW5vciwgNCBieXRlIGlub2RlIG51bWJlciAtIERFUFJFQ0FURUQKKyAqICAgICAzICAtIDQgYnl0ZSBkZXZpY2UgaWQsIGVuY29kZWQgZm9yIHVzZXItc3BhY2UsIDQgYnl0ZSBpbm9kZSBudW1iZXIKKyAqCisgKiBUaGUgZmlsZWlkX3R5cGUgaWRlbnRpZmllZCBob3cgdGhlIGZpbGUgd2l0aGluIHRoZSBmaWxlc3lzdGVtIGlzIGVuY29kZWQuCisgKiBUaGlzIGlzICh3aWxsIGJlKSBwYXNzZWQgdG8sIGFuZCBzZXQgYnksIHRoZSB1bmRlcmx5aW5nIGZpbGVzeXN0ZW0gaWYgaXQgc3VwcG9ydHMKKyAqIGZpbGVoYW5kbGUgb3BlcmF0aW9ucy4gIFRoZSBmaWxlc3lzdGVtIG11c3Qgbm90IHVzZSB0aGUgdmFsdWUgJzAnIG9yICcweGZmJyBhbmQgbWF5CisgKiBvbmx5IHVzZSB0aGUgdmFsdWVzIDEgYW5kIDIgYXMgZGVmaW5lZCBiZWxvdzoKKyAqICBDdXJyZW50IHZhbHVlczoKKyAqICAgIDAgICAtIFRoZSByb290LCBvciBleHBvcnQgcG9pbnQsIG9mIHRoZSBmaWxlc3lzdGVtLiAgZmJfZmlsZWlkIGlzIDAgYnl0ZXMuCisgKiAgICAxICAgLSAzMmJpdCBpbm9kZSBudW1iZXIsIDMyIGJpdCBnZW5lcmF0aW9uIG51bWJlci4KKyAqICAgIDIgICAtIDMyYml0IGlub2RlIG51bWJlciwgMzIgYml0IGdlbmVyYXRpb24gbnVtYmVyLCAzMiBiaXQgcGFyZW50IGRpcmVjdG9yeSBpbm9kZSBudW1iZXIuCisgKgorICovCitzdHJ1Y3QgbmZzX2ZoYmFzZV9uZXcgeworCV9fdTgJCWZiX3ZlcnNpb247CS8qID09IDEsIGV2ZW4gPT4gbmZzX2ZoYmFzZV9vbGQgKi8KKwlfX3U4CQlmYl9hdXRoX3R5cGU7CisJX191OAkJZmJfZnNpZF90eXBlOworCV9fdTgJCWZiX2ZpbGVpZF90eXBlOworCV9fdTMyCQlmYl9hdXRoWzFdOworLyoJX191MzIJCWZiX2ZzaWRbMF07IGZsb2F0aW5nICovCisvKglfX3UzMgkJZmJfZmlsZWlkWzBdOyBmbG9hdGluZyAqLworfTsKKworc3RydWN0IGtuZnNkX2ZoIHsKKwl1bnNpZ25lZCBpbnQJZmhfc2l6ZTsJLyogc2lnbmlmaWNhbnQgZm9yIE5GU3YzLgorCQkJCQkgKiBQb2ludHMgdG8gdGhlIGN1cnJlbnQgc2l6ZSB3aGlsZSBidWlsZGluZworCQkJCQkgKiBhIG5ldyBmaWxlIGhhbmRsZQorCQkJCQkgKi8KKwl1bmlvbiB7CisJCXN0cnVjdCBuZnNfZmhiYXNlX29sZAlmaF9vbGQ7CisJCV9fdTMyCQkJZmhfcGFkW05GUzRfRkhTSVpFLzRdOworCQlzdHJ1Y3QgbmZzX2ZoYmFzZV9uZXcJZmhfbmV3OworCX0gZmhfYmFzZTsKK307CisKKyNkZWZpbmUgb2ZoX2Rjb29raWUJCWZoX2Jhc2UuZmhfb2xkLmZiX2Rjb29raWUKKyNkZWZpbmUgb2ZoX2lubwkJCWZoX2Jhc2UuZmhfb2xkLmZiX2lubworI2RlZmluZSBvZmhfZGlyaW5vCQlmaF9iYXNlLmZoX29sZC5mYl9kaXJpbm8KKyNkZWZpbmUgb2ZoX2RldgkJCWZoX2Jhc2UuZmhfb2xkLmZiX2RldgorI2RlZmluZSBvZmhfeGRldgkJZmhfYmFzZS5maF9vbGQuZmJfeGRldgorI2RlZmluZSBvZmhfeGlubwkJZmhfYmFzZS5maF9vbGQuZmJfeGlubworI2RlZmluZSBvZmhfZ2VuZXJhdGlvbgkJZmhfYmFzZS5maF9vbGQuZmJfZ2VuZXJhdGlvbgorCisjZGVmaW5lCWZoX3ZlcnNpb24JCWZoX2Jhc2UuZmhfbmV3LmZiX3ZlcnNpb24KKyNkZWZpbmUJZmhfZnNpZF90eXBlCQlmaF9iYXNlLmZoX25ldy5mYl9mc2lkX3R5cGUKKyNkZWZpbmUJZmhfYXV0aF90eXBlCQlmaF9iYXNlLmZoX25ldy5mYl9hdXRoX3R5cGUKKyNkZWZpbmUJZmhfZmlsZWlkX3R5cGUJCWZoX2Jhc2UuZmhfbmV3LmZiX2ZpbGVpZF90eXBlCisjZGVmaW5lCWZoX2F1dGgJCQlmaF9iYXNlLmZoX25ldy5mYl9hdXRoCisjZGVmaW5lCWZoX2ZzaWQJCQlmaF9iYXNlLmZoX25ldy5mYl9hdXRoCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKK3N0YXRpYyBpbmxpbmUgX191MzIgaW5vX3RfdG9fdTMyKGlub190IGlubykKK3sKKwlyZXR1cm4gKF9fdTMyKSBpbm87Cit9CisKK3N0YXRpYyBpbmxpbmUgaW5vX3QgdTMyX3RvX2lub190KF9fdTMyIHVpbm8pCit7CisJcmV0dXJuIChpbm9fdCkgdWlubzsKK30KKworLyoKKyAqIFRoaXMgaXMgdGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIGFuIE5GUyBoYW5kbGUgdXNlZCBpbiBrbmZzZC4KKyAqIHByZV9tdGltZS9wb3N0X3ZlcnNpb24gd2lsbCBiZSB1c2VkIHRvIHN1cHBvcnQgd2NjX2F0dHIncyBpbiBORlN2My4KKyAqLwordHlwZWRlZiBzdHJ1Y3Qgc3ZjX2ZoIHsKKwlzdHJ1Y3Qga25mc2RfZmgJCWZoX2hhbmRsZTsJLyogRkggZGF0YSAqLworCXN0cnVjdCBkZW50cnkgKgkJZmhfZGVudHJ5OwkvKiB2YWxpZGF0ZWQgZGVudHJ5ICovCisJc3RydWN0IHN2Y19leHBvcnQgKglmaF9leHBvcnQ7CS8qIGV4cG9ydCBwb2ludGVyICovCisJaW50CQkJZmhfbWF4c2l6ZTsJLyogbWF4IHNpemUgZm9yIGZoX2hhbmRsZSAqLworCisJdW5zaWduZWQgY2hhcgkJZmhfbG9ja2VkOwkvKiBpbm9kZSBsb2NrZWQgYnkgdXMgKi8KKworI2lmZGVmIENPTkZJR19ORlNEX1YzCisJdW5zaWduZWQgY2hhcgkJZmhfcG9zdF9zYXZlZDsJLyogcG9zdC1vcCBhdHRycyBzYXZlZCAqLworCXVuc2lnbmVkIGNoYXIJCWZoX3ByZV9zYXZlZDsJLyogcHJlLW9wIGF0dHJzIHNhdmVkICovCisKKwkvKiBQcmUtb3AgYXR0cmlidXRlcyBzYXZlZCBkdXJpbmcgZmhfbG9jayAqLworCV9fdTY0CQkJZmhfcHJlX3NpemU7CS8qIHNpemUgYmVmb3JlIG9wZXJhdGlvbiAqLworCXN0cnVjdCB0aW1lc3BlYwkJZmhfcHJlX210aW1lOwkvKiBtdGltZSBiZWZvcmUgb3BlciAqLworCXN0cnVjdCB0aW1lc3BlYwkJZmhfcHJlX2N0aW1lOwkvKiBjdGltZSBiZWZvcmUgb3BlciAqLworCisJLyogUG9zdC1vcCBhdHRyaWJ1dGVzIHNhdmVkIGluIGZoX3VubG9jayAqLworCXVtb2RlX3QJCQlmaF9wb3N0X21vZGU7CS8qIGlfbW9kZSAqLworCW5saW5rX3QJCQlmaF9wb3N0X25saW5rOwkvKiBpX25saW5rICovCisJdWlkX3QJCQlmaF9wb3N0X3VpZDsJLyogaV91aWQgKi8KKwlnaWRfdAkJCWZoX3Bvc3RfZ2lkOwkvKiBpX2dpZCAqLworCV9fdTY0CQkJZmhfcG9zdF9zaXplOwkvKiBpX3NpemUgKi8KKwl1bnNpZ25lZCBsb25nCQlmaF9wb3N0X2Jsb2NrczsgLyogaV9ibG9ja3MgKi8KKwl1bnNpZ25lZCBsb25nCQlmaF9wb3N0X2Jsa3NpemU7LyogaV9ibGtzaXplICovCisJX191MzIJCQlmaF9wb3N0X3JkZXZbMl07LyogaV9yZGV2ICovCisJc3RydWN0IHRpbWVzcGVjCQlmaF9wb3N0X2F0aW1lOwkvKiBpX2F0aW1lICovCisJc3RydWN0IHRpbWVzcGVjCQlmaF9wb3N0X210aW1lOwkvKiBpX210aW1lICovCisJc3RydWN0IHRpbWVzcGVjCQlmaF9wb3N0X2N0aW1lOwkvKiBpX2N0aW1lICovCisjZW5kaWYgLyogQ09ORklHX05GU0RfVjMgKi8KKworfSBzdmNfZmg7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBta19mc2lkX3YwKHUzMiAqZnNpZHYsIGRldl90IGRldiwgaW5vX3QgaW5vKQoreworCWZzaWR2WzBdID0gaHRvbmwoKE1BSk9SKGRldik8PDE2KSB8CisJCQlNSU5PUihkZXYpKTsKKwlmc2lkdlsxXSA9IGlub190X3RvX3UzMihpbm8pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbWtfZnNpZF92MSh1MzIgKmZzaWR2LCB1MzIgZnNpZCkKK3sKKwlmc2lkdlswXSA9IGZzaWQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBta19mc2lkX3YyKHUzMiAqZnNpZHYsIGRldl90IGRldiwgaW5vX3QgaW5vKQoreworCWZzaWR2WzBdID0gaHRvbmwoTUFKT1IoZGV2KSk7CisJZnNpZHZbMV0gPSBodG9ubChNSU5PUihkZXYpKTsKKwlmc2lkdlsyXSA9IGlub190X3RvX3UzMihpbm8pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbWtfZnNpZF92Myh1MzIgKmZzaWR2LCBkZXZfdCBkZXYsIGlub190IGlubykKK3sKKwlmc2lkdlswXSA9IG5ld19lbmNvZGVfZGV2KGRldik7CisJZnNpZHZbMV0gPSBpbm9fdF90b191MzIoaW5vKTsKK30KKworc3RhdGljIGlubGluZSBpbnQga2V5X2xlbihpbnQgdHlwZSkKK3sKKwlzd2l0Y2godHlwZSkgeworCWNhc2UgMDogcmV0dXJuIDg7CisJY2FzZSAxOiByZXR1cm4gNDsKKwljYXNlIDI6IHJldHVybiAxMjsKKwljYXNlIDM6IHJldHVybiA4OworCWRlZmF1bHQ6IHJldHVybiAwOworCX0KK30KKworLyoKKyAqIFNob3J0aGFuZCBmb3IgZHByaW50aygpJ3MKKyAqLworZXh0ZXJuIGNoYXIgKiBTVkNGSF9mbXQoc3RydWN0IHN2Y19maCAqZmhwKTsKKworLyoKKyAqIEZ1bmN0aW9uIHByb3RvdHlwZXMKKyAqLwordTMyCWZoX3ZlcmlmeShzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgc3RydWN0IHN2Y19maCAqLCBpbnQsIGludCk7CitpbnQJZmhfY29tcG9zZShzdHJ1Y3Qgc3ZjX2ZoICosIHN0cnVjdCBzdmNfZXhwb3J0ICosIHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IHN2Y19maCAqKTsKK2ludAlmaF91cGRhdGUoc3RydWN0IHN2Y19maCAqKTsKK3ZvaWQJZmhfcHV0KHN0cnVjdCBzdmNfZmggKik7CisKK3N0YXRpYyBfX2lubGluZV9fIHN0cnVjdCBzdmNfZmggKgorZmhfY29weShzdHJ1Y3Qgc3ZjX2ZoICpkc3QsIHN0cnVjdCBzdmNfZmggKnNyYykKK3sKKwlpZiAoc3JjLT5maF9kZW50cnkgfHwgc3JjLT5maF9sb2NrZWQpIHsKKwkJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gc3JjLT5maF9kZW50cnk7CisJCXByaW50ayhLRVJOX0VSUiAiZmhfY29weTogY29weWluZyAlcy8lcywgYWxyZWFkeSB2ZXJpZmllZCFcbiIsCisJCQlkZW50cnktPmRfcGFyZW50LT5kX25hbWUubmFtZSwgZGVudHJ5LT5kX25hbWUubmFtZSk7CisJfQorCQkJCisJKmRzdCA9ICpzcmM7CisJcmV0dXJuIGRzdDsKK30KKworc3RhdGljIF9faW5saW5lX18gc3RydWN0IHN2Y19maCAqCitmaF9pbml0KHN0cnVjdCBzdmNfZmggKmZocCwgaW50IG1heHNpemUpCit7CisJbWVtc2V0KGZocCwgMCwgc2l6ZW9mKCpmaHApKTsKKwlmaHAtPmZoX21heHNpemUgPSBtYXhzaXplOworCXJldHVybiBmaHA7Cit9CisKKyNpZmRlZiBDT05GSUdfTkZTRF9WMworLyoKKyAqIEZpbGwgaW4gdGhlIHByZV9vcCBhdHRyIGZvciB0aGUgd2NjIGRhdGEKKyAqLworc3RhdGljIGlubGluZSB2b2lkCitmaWxsX3ByZV93Y2Moc3RydWN0IHN2Y19maCAqZmhwKQoreworCXN0cnVjdCBpbm9kZSAgICAqaW5vZGU7CisKKwlpbm9kZSA9IGZocC0+ZmhfZGVudHJ5LT5kX2lub2RlOworCWlmICghZmhwLT5maF9wcmVfc2F2ZWQpIHsKKwkJZmhwLT5maF9wcmVfbXRpbWUgPSBpbm9kZS0+aV9tdGltZTsKKwkJZmhwLT5maF9wcmVfY3RpbWUgPSBpbm9kZS0+aV9jdGltZTsKKwkJCWZocC0+ZmhfcHJlX3NpemUgID0gaW5vZGUtPmlfc2l6ZTsKKwkJCWZocC0+ZmhfcHJlX3NhdmVkID0gMTsKKwl9Cit9CisKKy8qCisgKiBGaWxsIGluIHRoZSBwb3N0X29wIGF0dHIgZm9yIHRoZSB3Y2MgZGF0YQorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2ZpbGxfcG9zdF93Y2Moc3RydWN0IHN2Y19maCAqZmhwKQoreworCXN0cnVjdCBpbm9kZSAgICAqaW5vZGUgPSBmaHAtPmZoX2RlbnRyeS0+ZF9pbm9kZTsKKworCWlmIChmaHAtPmZoX3Bvc3Rfc2F2ZWQpCisJCXByaW50aygibmZzZDogaW5vZGUgbG9ja2VkIHR3aWNlIGR1cmluZyBvcGVyYXRpb24uXG4iKTsKKworCWZocC0+ZmhfcG9zdF9tb2RlICAgICAgID0gaW5vZGUtPmlfbW9kZTsKKwlmaHAtPmZoX3Bvc3RfbmxpbmsgICAgICA9IGlub2RlLT5pX25saW5rOworCWZocC0+ZmhfcG9zdF91aWQJPSBpbm9kZS0+aV91aWQ7CisJZmhwLT5maF9wb3N0X2dpZAk9IGlub2RlLT5pX2dpZDsKKwlmaHAtPmZoX3Bvc3Rfc2l6ZSAgICAgICA9IGlub2RlLT5pX3NpemU7CisJaWYgKGlub2RlLT5pX2Jsa3NpemUpIHsKKwkJZmhwLT5maF9wb3N0X2Jsa3NpemUgICAgPSBpbm9kZS0+aV9ibGtzaXplOworCQlmaHAtPmZoX3Bvc3RfYmxvY2tzICAgICA9IGlub2RlLT5pX2Jsb2NrczsKKwl9IGVsc2UgeworCQlmaHAtPmZoX3Bvc3RfYmxrc2l6ZSAgICA9IEJMT0NLX1NJWkU7CisJCS8qIGhvdyBtdWNoIGRvIHdlIGNhcmUgZm9yIGFjY3VyYWN5IHdpdGggTWluaXhGUz8gKi8KKwkJZmhwLT5maF9wb3N0X2Jsb2NrcyAgICAgPSAoaW5vZGUtPmlfc2l6ZSs1MTEpID4+IDk7CisJfQorCWZocC0+ZmhfcG9zdF9yZGV2WzBdICAgID0gaHRvbmwoKHUzMilpbWFqb3IoaW5vZGUpKTsKKwlmaHAtPmZoX3Bvc3RfcmRldlsxXSAgICA9IGh0b25sKCh1MzIpaW1pbm9yKGlub2RlKSk7CisJZmhwLT5maF9wb3N0X2F0aW1lICAgICAgPSBpbm9kZS0+aV9hdGltZTsKKwlmaHAtPmZoX3Bvc3RfbXRpbWUgICAgICA9IGlub2RlLT5pX210aW1lOworCWZocC0+ZmhfcG9zdF9jdGltZSAgICAgID0gaW5vZGUtPmlfY3RpbWU7CisJZmhwLT5maF9wb3N0X3NhdmVkICAgICAgPSAxOworfQorI2Vsc2UKKyNkZWZpbmUJZmlsbF9wcmVfd2NjKGlnbm9yZWQpCisjZGVmaW5lIGZpbGxfcG9zdF93Y2Mobm90dXNlZCkKKyNlbmRpZiAvKiBDT05GSUdfTkZTRF9WMyAqLworCisKKy8qCisgKiBMb2NrIGEgZmlsZSBoYW5kbGUvaW5vZGUKKyAqIE5PVEU6IGJvdGggZmhfbG9jayBhbmQgZmhfdW5sb2NrIGFyZSBkb25lICJieSBoYW5kIiBpbgorICogdmZzLmM6bmZzZF9yZW5hbWUgYXMgaXQgbmVlZHMgdG8gZ3JhYiAyIGlfc2VtJ3MgYXQgb25jZQorICogc28sIGFueSBjaGFuZ2VzIGhlcmUgc2hvdWxkIGJlIHJlZmxlY3RlZCB0aGVyZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCitmaF9sb2NrKHN0cnVjdCBzdmNfZmggKmZocCkKK3sKKwlzdHJ1Y3QgZGVudHJ5CSpkZW50cnkgPSBmaHAtPmZoX2RlbnRyeTsKKwlzdHJ1Y3QgaW5vZGUJKmlub2RlOworCisJZGZwcmludGsoRklMRU9QLCAibmZzZDogZmhfbG9jayglcykgbG9ja2VkID0gJWRcbiIsCisJCQlTVkNGSF9mbXQoZmhwKSwgZmhwLT5maF9sb2NrZWQpOworCisJaWYgKCFmaHAtPmZoX2RlbnRyeSkgeworCQlwcmludGsoS0VSTl9FUlIgImZoX2xvY2s6IGZoIG5vdCB2ZXJpZmllZCFcbiIpOworCQlyZXR1cm47CisJfQorCWlmIChmaHAtPmZoX2xvY2tlZCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJmaF9sb2NrOiAlcy8lcyBhbHJlYWR5IGxvY2tlZCFcbiIsCisJCQlkZW50cnktPmRfcGFyZW50LT5kX25hbWUubmFtZSwgZGVudHJ5LT5kX25hbWUubmFtZSk7CisJCXJldHVybjsKKwl9CisKKwlpbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKKwlkb3duKCZpbm9kZS0+aV9zZW0pOworCWZpbGxfcHJlX3djYyhmaHApOworCWZocC0+ZmhfbG9ja2VkID0gMTsKK30KKworLyoKKyAqIFVubG9jayBhIGZpbGUgaGFuZGxlL2lub2RlCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorZmhfdW5sb2NrKHN0cnVjdCBzdmNfZmggKmZocCkKK3sKKwlpZiAoIWZocC0+ZmhfZGVudHJ5KQorCQlwcmludGsoS0VSTl9FUlIgImZoX3VubG9jazogZmggbm90IHZlcmlmaWVkIVxuIik7CisKKwlpZiAoZmhwLT5maF9sb2NrZWQpIHsKKwkJZmlsbF9wb3N0X3djYyhmaHApOworCQl1cCgmZmhwLT5maF9kZW50cnktPmRfaW5vZGUtPmlfc2VtKTsKKwkJZmhwLT5maF9sb2NrZWQgPSAwOworCX0KK30KKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKworI2VuZGlmIC8qIF9MSU5VWF9ORlNEX0ZIX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzZC9zdGF0ZS5oIGIvaW5jbHVkZS9saW51eC9uZnNkL3N0YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZiMmZlMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmZzZC9zdGF0ZS5oCkBAIC0wLDAgKzEsMjk4IEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvbmZzZC9zdGF0ZS5oCisgKgorICogIENvcHlyaWdodCAoYykgMjAwMSBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBNaWNoaWdhbi4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBLZW5kcmljayBTbWl0aCA8a21zbWl0aEB1bWljaC5lZHU+CisgKiAgQW5keSBBZGFtc29uIDxhbmRyb3NAdW1pY2guZWR1PgorICogIAorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogIGFyZSBtZXQ6CisgKiAgCisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorICogIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqICBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiAgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKyAqICBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCisgKiAgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAqICBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworI2lmbmRlZiBfTkZTRDRfU1RBVEVfSAorI2RlZmluZSBfTkZTRDRfU1RBVEVfSAorCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KKyNpbmNsdWRlIDxsaW51eC9zdW5ycGMvY2xudC5oPgorCisjZGVmaW5lIE5GUzRfT1BBUVVFX0xJTUlUIDEwMjQKK3R5cGVkZWYgc3RydWN0IHsKKwl1MzIgICAgICAgICAgICAgY2xfYm9vdDsKKwl1MzIgICAgICAgICAgICAgY2xfaWQ7Cit9IGNsaWVudGlkX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1MzIgICAgICAgICAgICAgc29fYm9vdDsKKwl1MzIgICAgICAgICAgICAgc29fc3RhdGVvd25lcmlkOworCXUzMiAgICAgICAgICAgICBzb19maWxlaWQ7Cit9IHN0YXRlaWRfb3BhcXVlX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1MzIgICAgICAgICAgICAgICAgICAgICBzaV9nZW5lcmF0aW9uOworCXN0YXRlaWRfb3BhcXVlX3QgICAgICAgIHNpX29wYXF1ZTsKK30gc3RhdGVpZF90OworI2RlZmluZSBzaV9ib290ICAgICAgICAgICBzaV9vcGFxdWUuc29fYm9vdAorI2RlZmluZSBzaV9zdGF0ZW93bmVyaWQgICBzaV9vcGFxdWUuc29fc3RhdGVvd25lcmlkCisjZGVmaW5lIHNpX2ZpbGVpZCAgICAgICAgIHNpX29wYXF1ZS5zb19maWxlaWQKKworZXh0ZXJuIHN0YXRlaWRfdCB6ZXJvc3RhdGVpZDsKK2V4dGVybiBzdGF0ZWlkX3Qgb25lc3RhdGVpZDsKKworI2RlZmluZSBaRVJPX1NUQVRFSUQoc3RhdGVpZCkgICAgICAgKCFtZW1jbXAoKHN0YXRlaWQpLCAmemVyb3N0YXRlaWQsIHNpemVvZihzdGF0ZWlkX3QpKSkKKyNkZWZpbmUgT05FX1NUQVRFSUQoc3RhdGVpZCkgICAgICAgICghbWVtY21wKChzdGF0ZWlkKSwgJm9uZXN0YXRlaWQsIHNpemVvZihzdGF0ZWlkX3QpKSkKKworc3RydWN0IG5mczRfY2JfcmVjYWxsIHsKKwl1MzIJCQljYnJfaWRlbnQ7CisJaW50CQkJY2JyX3RydW5jOworCXN0YXRlaWRfdAkJY2JyX3N0YXRlaWQ7CisJdTMyCQkJY2JyX2ZobGVuOworCXUzMgkJCWNicl9maHZhbFtORlM0X0ZIU0laRV07CisJc3RydWN0IG5mczRfZGVsZWdhdGlvbgkqY2JyX2RwOworfTsKKworc3RydWN0IG5mczRfZGVsZWdhdGlvbiB7CisJc3RydWN0IGxpc3RfaGVhZAlkbF9kZWxfcGVyZmlsZTsgLyogbmZzNF9maWxlLT5maV9kZWxfcGVyZmlsZSAqLworCXN0cnVjdCBsaXN0X2hlYWQJZGxfZGVsX3BlcmNsbnQ7IC8qIG5mczRfY2xpZW50LT5jbF9kZWxfcGVyY2xudCovCisJc3RydWN0IGxpc3RfaGVhZAlkbF9yZWNhbGxfbHJ1OyAgLyogZGVsZWdhdGlvbiByZWNhbGxlZCAqLworCWF0b21pY190CQlkbF9jb3VudDsgICAgICAgLyogcmVmIGNvdW50ICovCisJc3RydWN0IG5mczRfY2xpZW50CSpkbF9jbGllbnQ7CisJc3RydWN0IG5mczRfZmlsZQkqZGxfZmlsZTsKKwlzdHJ1Y3QgZmlsZV9sb2NrCSpkbF9mbG9jazsKKwlzdHJ1Y3QgZmlsZQkJKmRsX3Zmc19maWxlOworCXUzMgkJCWRsX3R5cGU7CisJdGltZV90CQkJZGxfdGltZTsKKwlzdHJ1Y3QgbmZzNF9jYl9yZWNhbGwJZGxfcmVjYWxsOworfTsKKworI2RlZmluZSBkbF9zdGF0ZWlkICAgICAgZGxfcmVjYWxsLmNicl9zdGF0ZWlkCisjZGVmaW5lIGRsX2ZobGVuICAgICAgICBkbF9yZWNhbGwuY2JyX2ZobGVuCisjZGVmaW5lIGRsX2ZodmFsICAgICAgICBkbF9yZWNhbGwuY2JyX2ZodmFsCisKKy8qIGNsaWVudCBkZWxlZ2F0aW9uIGNhbGxiYWNrIGluZm8gKi8KK3N0cnVjdCBuZnM0X2NhbGxiYWNrIHsKKwkvKiBTRVRDTElFTlRJRCBpbmZvICovCisJdTMyCQkJY2JfcGFyc2VkOyAgLyogYWRkciBwYXJzZWQgKi8KKwl1MzIgICAgICAgICAgICAgICAgICAgICBjYl9hZGRyOworCXVuc2lnbmVkIHNob3J0ICAgICAgICAgIGNiX3BvcnQ7CisJdTMyICAgICAgICAgICAgICAgICAgICAgY2JfcHJvZzsKKwl1MzIgICAgICAgICAgICAgICAgICAgICBjYl9pZGVudDsKKwkvKiBSUEMgY2xpZW50IGluZm8gKi8KKwlhdG9taWNfdAkJY2Jfc2V0OyAgICAgLyogc3VjY2Vzc2Z1bCBDQl9OVUxMIGNhbGwgKi8KKwlzdHJ1Y3QgcnBjX3Byb2dyYW0gICAgICBjYl9wcm9ncmFtOworCXN0cnVjdCBycGNfc3RhdCAgICAgICAgIGNiX3N0YXQ7CisJc3RydWN0IHJwY19jbG50ICogICAgICAgY2JfY2xpZW50OworfTsKKworLyoKKyAqIHN0cnVjdCBuZnM0X2NsaWVudCAtIG9uZSBwZXIgY2xpZW50LiAgQ2xpZW50aWRzIGxpdmUgaGVyZS4KKyAqIAlvIEVhY2ggbmZzNF9jbGllbnQgaXMgaGFzaGVkIGJ5IGNsaWVudGlkLgorICoKKyAqIAlvIEVhY2ggbmZzNF9jbGllbnRzIGlzIGFsc28gaGFzaGVkIGJ5IG5hbWUgCisgKiAJICAodGhlIG9wYXF1ZSBxdWFudGl0eSBpbml0aWFsbHkgc2VudCBieSB0aGUgY2xpZW50IHRvIGlkZW50aWZ5IGl0c2VsZikuCisgKiAJICAKKyAqCW8gY2xfcGVyY2xpZW50IGxpc3QgaXMgdXNlZCB0byBlbnN1cmUgbm8gZGFuZ2xpbmcgc3RhdGVvd25lciByZWZlcmVuY2VzCisgKgkgIHdoZW4gd2UgZXhwaXJlIHRoZSBuZnM0X2NsaWVudAorICovCitzdHJ1Y3QgbmZzNF9jbGllbnQgeworCXN0cnVjdCBsaXN0X2hlYWQJY2xfaWRoYXNoOyAJLyogaGFzaCBieSBjbF9jbGllbnRpZC5pZCAqLworCXN0cnVjdCBsaXN0X2hlYWQJY2xfc3RyaGFzaDsgCS8qIGhhc2ggYnkgY2xfbmFtZSAqLworCXN0cnVjdCBsaXN0X2hlYWQJY2xfcGVyY2xpZW50OyAJLyogbGlzdDogc3RhdGVvd25lcnMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCWNsX2RlbF9wZXJjbG50OyAvKiBsaXN0OiBkZWxlZ2F0aW9ucyAqLworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgIGNsX2xydTsgICAgICAgICAvKiB0YWlsIHF1ZXVlICovCisJc3RydWN0IHhkcl9uZXRvYmoJY2xfbmFtZTsgCS8qIGlkIGdlbmVyYXRlZCBieSBjbGllbnQgKi8KKwluZnM0X3ZlcmlmaWVyCQljbF92ZXJpZmllcjsgCS8qIGdlbmVyYXRlZCBieSBjbGllbnQgKi8KKwl0aW1lX3QgICAgICAgICAgICAgICAgICBjbF90aW1lOyAgICAgICAgLyogdGltZSBvZiBsYXN0IGxlYXNlIHJlbmV3YWwgKi8KKwl1MzIJCQljbF9hZGRyOyAJLyogY2xpZW50IGlwYWRkcmVzcyAqLworCXN0cnVjdCBzdmNfY3JlZAkJY2xfY3JlZDsgCS8qIHNldGNsaWVudGlkIHByaW5jaXBhbCAqLworCWNsaWVudGlkX3QJCWNsX2NsaWVudGlkOwkvKiBnZW5lcmF0ZWQgYnkgc2VydmVyICovCisJbmZzNF92ZXJpZmllcgkJY2xfY29uZmlybTsJLyogZ2VuZXJhdGVkIGJ5IHNlcnZlciAqLworCXN0cnVjdCBuZnM0X2NhbGxiYWNrCWNsX2NhbGxiYWNrOyAgICAvKiBjYWxsYmFjayBpbmZvICovCisJYXRvbWljX3QJCWNsX2NvdW50OwkvKiByZWYgY291bnQgKi8KK307CisKKy8qIHN0cnVjdCBuZnM0X2NsaWVudF9yZXNldAorICogb25lIHBlciBvbGQgY2xpZW50LiBQb3B1bGF0ZXMgcmVzZXRfc3RyX2hhc2h0YmwuIEZpbGxlZCBmcm9tIGNvbmZfaWRfaGFzaHRibAorICogdXBvbiBsZWFzZSByZXNldCwgb3IgZnJvbSB1cGNhbGwgdG8gc3RhdGVfZGFlbW9uICh0byByZWFkIGluIHN0YXRlCisgKiBmcm9tIG5vbi12b2xpdGlsZSBzdG9yYWdlKSB1cG9uIHJlYm9vdC4KKyAqLworc3RydWN0IG5mczRfY2xpZW50X3JlY2xhaW0geworCXN0cnVjdCBsaXN0X2hlYWQJY3Jfc3RyaGFzaDsJLyogaGFzaCBieSBjcl9uYW1lICovCisJc3RydWN0IHhkcl9uZXRvYmogCWNyX25hbWU7IAkvKiBpZCBnZW5lcmF0ZWQgYnkgY2xpZW50ICovCit9OworCitzdGF0aWMgaW5saW5lIHZvaWQKK3VwZGF0ZV9zdGF0ZWlkKHN0YXRlaWRfdCAqc3RhdGVpZCkKK3sKKwlzdGF0ZWlkLT5zaV9nZW5lcmF0aW9uKys7Cit9CisKKy8qIEEgcmVhc29uYWJsZSB2YWx1ZSBmb3IgUkVQTEFZX0lTSVpFIHdhcyBlc3RpbWF0ZWQgYXMgZm9sbG93czogIAorICogVGhlIE9QRU4gcmVzcG9uc2UsIHR5cGljYWxseSB0aGUgbGFyZ2VzdCwgcmVxdWlyZXMgCisgKiAgIDQoc3RhdHVzKSArIDgoc3RhdGVpZCkgKyAyMChjaGFuZ2VpbmZvKSArIDQocmZsYWdzKSArICA4KHZlcmlmaWVyKSArIAorICogICA0KGRlbGVnLiB0eXBlKSArIDgoZGVsZWcuIHN0YXRlaWQpICsgNChkZWxlZy4gcmVjYWxsIGZsYWcpICsgCisgKiAgIDIwKGRlbGVnLiBzcGFjZSBsaW1pdCkgKyB+MzIoZGVsZWcuIGFjZSkgPSAxMTIgYnl0ZXMgCisgKi8KKworI2RlZmluZSBORlNENF9SRVBMQVlfSVNJWkUgICAgICAgMTEyIAorCisvKgorICogUmVwbGF5IGJ1ZmZlciwgd2hlcmUgdGhlIHJlc3VsdCBvZiB0aGUgbGFzdCBzZXFpZC1tdXRhdGluZyBvcGVyYXRpb24gCisgKiBpcyBjYWNoZWQuIAorICovCitzdHJ1Y3QgbmZzNF9yZXBsYXkgeworCXUzMgkJCXJwX3N0YXR1czsKKwl1bnNpZ25lZCBpbnQJCXJwX2J1ZmxlbjsKKwljaGFyCQkJKnJwX2J1ZjsKKwl1bnNpZ25lZAkJaW50cnBfYWxsb2NhdGVkOworCWludAkJCXJwX29wZW5maF9sZW47CisJY2hhcgkJCXJwX29wZW5maFtORlM0X0ZIU0laRV07CisJY2hhcgkJCXJwX2lidWZbTkZTRDRfUkVQTEFZX0lTSVpFXTsKK307CisKKy8qCisqIG5mczRfc3RhdGVvd25lciBjYW4gZWl0aGVyIGJlIGFuIG9wZW5fb3duZXIsIG9yIGEgbG9ja19vd25lcgorKgorKiAgICBzb19pZGhhc2g6ICBzdGF0ZWlkX2hhc2h0YmxbXSBmb3Igb3BlbiBvd25lciwgbG9ja3N0YXRlaWRfaGFzaHRibFtdCisqICAgICAgICAgZm9yIGxvY2tfb3duZXIKKyogICAgc29fc3RyaGFzaDogb3duZXJzdHJfaGFzaHRibFtdIGZvciBvcGVuX293bmVyLCBsb2NrX293bmVyc3RyX2hhc2h0YmxbXQorKiAgICAgICAgIGZvciBsb2NrX293bmVyCisqICAgIHNvX3BlcmNsaWVudDogbmZzNF9jbGllbnQtPmNsX3BlcmNsaWVudCBlbnRyeSAtIHVzZWQgd2hlbiBuZnM0X2NsaWVudAorKiAgICAgICAgIHN0cnVjdCBpcyByZWFwZWQuCisqICAgIHNvX3BlcmZpbGVzdGF0ZTogaGVhZHMgdGhlIGxpc3Qgb2YgbmZzNF9zdGF0ZWlkIChlaXRoZXIgb3BlbiBvciBsb2NrKSAKKyogICAgICAgICBhbmQgaXMgdXNlZCB0byBlbnN1cmUgbm8gZGFuZ2xpbmcgbmZzNF9zdGF0ZWlkIHJlZmVyZW5jZXMgd2hlbiB3ZSAKKyogICAgICAgICByZWxlYXNlIGEgc3RhdGVvd25lci4KKyogICAgc29fcGVybG9ja293bmVyOiAob3BlbikgbmZzNF9zdGF0ZWlkLT5zdF9wZXJsb2Nrb3duZXIgZW50cnkgLSB1c2VkIHdoZW4KKyogICAgICAgICBjbG9zZSBpcyBjYWxsZWQgdG8gcmVhcCBhc3NvY2lhdGVkIGJ5dGUtcmFuZ2UgbG9ja3MKKyogICAgc29fY2xvc2VfbHJ1OiAob3Blbikgc3RhdGVvd25lciBpcyBwbGFjZWQgb24gdGhpcyBsaXN0IGluc3RlYWQgb2YgYmVpbmcKKyogICAgICAgICByZWFwZWQgKHdoZW4gc29fcGVyZmlsZXN0YXRlIGlzIGVtcHR5KSB0byBob2xkIHRoZSBsYXN0IGNsb3NlIHJlcGxheS4KKyogICAgICAgICByZWFwZWQgYnkgbGF1bmRyYW1hdCB0aHJlYWQgYWZ0ZXIgbGVhc2UgcGVyaW9kLgorKi8KK3N0cnVjdCBuZnM0X3N0YXRlb3duZXIgeworCXN0cnVjdCBrcmVmCQlzb19yZWY7CisJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgc29faWRoYXNoOyAgIC8qIGhhc2ggYnkgc29faWQgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICBzb19zdHJoYXNoOyAgIC8qIGhhc2ggYnkgb3BfbmFtZSAqLworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgIHNvX3BlcmNsaWVudDsgLyogbmZzNF9jbGllbnQtPmNsX3BlcmNsaWVudCAqLworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgIHNvX3BlcmZpbGVzdGF0ZTsgLyogbGlzdDogbmZzNF9zdGF0ZWlkICovCisJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgc29fcGVybG9ja293bmVyOyAvKiBuZnM0X3N0YXRlaWQtPnN0X3BlcmxvY2tvd25lciAqLworCXN0cnVjdCBsaXN0X2hlYWQJc29fY2xvc2VfbHJ1OyAvKiB0YWlsIHF1ZXVlICovCisJdGltZV90CQkJc29fdGltZTsgLyogdGltZSBvZiBwbGFjZW1lbnQgb24gc29fY2xvc2VfbHJ1ICovCisJaW50CQkJc29faXNfb3Blbl9vd25lcjsgLyogMT1vcGVub3duZXIsMD1sb2Nrb3duZXIgKi8KKwl1MzIgICAgICAgICAgICAgICAgICAgICBzb19pZDsKKwlzdHJ1Y3QgbmZzNF9jbGllbnQgKiAgICBzb19jbGllbnQ7CisJdTMyICAgICAgICAgICAgICAgICAgICAgc29fc2VxaWQ7ICAgIAorCXN0cnVjdCB4ZHJfbmV0b2JqICAgICAgIHNvX293bmVyOyAgICAgLyogb3BlbiBvd25lciBuYW1lICovCisJaW50ICAgICAgICAgICAgICAgICAgICAgc29fY29uZmlybWVkOyAvKiBzdWNjZXNzZnVsIE9QRU5fQ09ORklSTT8gKi8KKwlzdHJ1Y3QgbmZzNF9yZXBsYXkJc29fcmVwbGF5OworfTsKKworLyoKKyogIG5mczRfZmlsZTogYSBmaWxlIG9wZW5lZCBieSBzb21lIG51bWJlciBvZiAob3BlbikgbmZzNF9zdGF0ZW93bmVycy4KKyogICAgbyBmaV9wZXJmaWxlIGxpc3QgaXMgdXNlZCB0byBzZWFyY2ggZm9yIGNvbmZsaWN0aW5nIAorKiAgICAgIHNoYXJlX2FjY2VzLCBzaGFyZV9kZW55IG9uIHRoZSBmaWxlLgorKi8KK3N0cnVjdCBuZnM0X2ZpbGUgeworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgIGZpX2hhc2g7ICAgIC8qIGhhc2ggYnkgInN0cnVjdCBpbm9kZSAqIiAqLworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgIGZpX3BlcmZpbGU7IC8qIGxpc3Q6IG5mczRfc3RhdGVpZCAqLworCXN0cnVjdCBsaXN0X2hlYWQJZmlfZGVsX3BlcmZpbGU7IC8qIGxpc3Q6IG5mczRfZGVsZWdhdGlvbiAqLworCXN0cnVjdCBpbm9kZQkJKmZpX2lub2RlOworCXUzMiAgICAgICAgICAgICAgICAgICAgIGZpX2lkOyAgICAgIC8qIHVzZWQgd2l0aCBzdGF0ZW93bmVyLT5zb19pZCAKKwkJCQkJICAgICAqIGZvciBzdGF0ZWlkX2hhc2h0YmwgaGFzaCAqLworfTsKKworLyoKKyogbmZzNF9zdGF0ZWlkIGNhbiBlaXRoZXIgYmUgYW4gb3BlbiBzdGF0ZWlkIG9yIChldmVudHVhbGx5KSBhIGxvY2sgc3RhdGVpZAorKgorKiAob3BlbiluZnM0X3N0YXRlaWQ6IG9uZSBwZXIgKG9wZW4pbmZzNF9zdGF0ZW93bmVyLCBuZnM0X2ZpbGUKKyoKKyogCXN0X2hhc2g6IHN0YXRlaWRfaGFzaHRibFtdIGVudHJ5IG9yIGxvY2tzdGF0ZWlkX2hhc2h0YmwgZW50cnkKKyogCXN0X3BlcmZpbGU6IGZpbGVfaGFzaHRibFtdIGVudHJ5LgorKiAJc3RfcGVyZmlsZV9zdGF0ZTogbmZzNF9zdGF0ZW93bmVyLT5zb19wZXJmaWxlc3RhdGUKKyogICAgICAgc3RfcGVybG9ja293bmVyOiAob3BlbiBzdGF0ZWlkKSBsaXN0IG9mIGxvY2sgbmZzNF9zdGF0ZW93bmVycworKiAJc3RfYWNjZXNzX2JtYXA6IHVzZWQgb25seSBmb3Igb3BlbiBzdGF0ZWlkCisqIAlzdF9kZW55X2JtYXA6IHVzZWQgb25seSBmb3Igb3BlbiBzdGF0ZWlkCisqLworCitzdHJ1Y3QgbmZzNF9zdGF0ZWlkIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAgICAgICBzdF9oYXNoOyAKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAgICAgICBzdF9wZXJmaWxlOworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICAgICAgIHN0X3BlcmZpbGVzdGF0ZTsgCisJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgICAgICAgc3RfcGVybG9ja293bmVyOworCXN0cnVjdCBuZnM0X3N0YXRlb3duZXIgICAgICAqIHN0X3N0YXRlb3duZXI7CisJc3RydWN0IG5mczRfZmlsZSAgICAgICAgICAgICogc3RfZmlsZTsKKwlzdGF0ZWlkX3QgICAgICAgICAgICAgICAgICAgICBzdF9zdGF0ZWlkOworCXN0cnVjdCBmaWxlICAgICAgICAgICAgICAgICAqIHN0X3Zmc19maWxlOworCXVuc2lnbmVkIGxvbmcgICAgICAgICAgICAgICAgIHN0X2FjY2Vzc19ibWFwOworCXVuc2lnbmVkIGxvbmcgICAgICAgICAgICAgICAgIHN0X2RlbnlfYm1hcDsKK307CisKKy8qIGZsYWdzIGZvciBwcmVwcm9jZXNzX3NlcWlkX29wKCkgKi8KKyNkZWZpbmUgQ0hFQ0tfRkggICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDT05GSVJNICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIE9QRU5fU1RBVEUgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgTE9DS19TVEFURSAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBSRF9TVEFURQkgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgV1JfU1RBVEUJICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIENMT1NFX1NUQVRFICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgREVMRUdfUkVUICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorCisjZGVmaW5lIHNlcWlkX211dGF0aW5nX2VycihlcnIpICAgICAgICAgICAgICAgICAgICAgICBcCisJKCgoZXJyKSAhPSBuZnNlcnJfc3RhbGVfY2xpZW50aWQpICYmICAgIFwKKwkoKGVycikgIT0gbmZzZXJyX2JhZF9zZXFpZCkgJiYgICAgICAgICAgXAorCSgoZXJyKSAhPSBuZnNlcnJfc3RhbGVfc3RhdGVpZCkgJiYgICAgICBcCisJKChlcnIpICE9IG5mc2Vycl9iYWRfc3RhdGVpZCkpCisKK2V4dGVybiB0aW1lX3QgbmZzNF9sYXVuZHJvbWF0KHZvaWQpOworZXh0ZXJuIGludCBuZnNkNF9yZW5ldyhjbGllbnRpZF90ICpjbGlkKTsKK2V4dGVybiBpbnQgbmZzNF9wcmVwcm9jZXNzX3N0YXRlaWRfb3Aoc3RydWN0IHN2Y19maCAqY3VycmVudF9maCwgCisJCXN0YXRlaWRfdCAqc3RhdGVpZCwgaW50IGZsYWdzLCBzdHJ1Y3QgZmlsZSAqKmZpbHApOworZXh0ZXJuIGludCBuZnM0X3NoYXJlX2NvbmZsaWN0KHN0cnVjdCBzdmNfZmggKmN1cnJlbnRfZmgsIAorCQl1bnNpZ25lZCBpbnQgZGVueV90eXBlKTsKK2V4dGVybiB2b2lkIG5mczRfbG9ja19zdGF0ZSh2b2lkKTsKK2V4dGVybiB2b2lkIG5mczRfdW5sb2NrX3N0YXRlKHZvaWQpOworZXh0ZXJuIGludCBuZnM0X2luX2dyYWNlKHZvaWQpOworZXh0ZXJuIGludCBuZnM0X2NoZWNrX29wZW5fcmVjbGFpbShjbGllbnRpZF90ICpjbGlkKTsKK2V4dGVybiB2b2lkIHB1dF9uZnM0X2NsaWVudChzdHJ1Y3QgbmZzNF9jbGllbnQgKmNscCk7CitleHRlcm4gdm9pZCBuZnM0X2ZyZWVfc3RhdGVvd25lcihzdHJ1Y3Qga3JlZiAqa3JlZik7CitleHRlcm4gdm9pZCBuZnNkNF9wcm9iZV9jYWxsYmFjayhzdHJ1Y3QgbmZzNF9jbGllbnQgKmNscCk7CitleHRlcm4gdm9pZCBuZnNkNF9jYl9yZWNhbGwoc3RydWN0IG5mczRfZGVsZWdhdGlvbiAqZHApOworZXh0ZXJuIHZvaWQgbmZzNF9wdXRfZGVsZWdhdGlvbihzdHJ1Y3QgbmZzNF9kZWxlZ2F0aW9uICpkcCk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorbmZzNF9wdXRfc3RhdGVvd25lcihzdHJ1Y3QgbmZzNF9zdGF0ZW93bmVyICpzbykKK3sKKwlrcmVmX3B1dCgmc28tPnNvX3JlZiwgbmZzNF9mcmVlX3N0YXRlb3duZXIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK25mczRfZ2V0X3N0YXRlb3duZXIoc3RydWN0IG5mczRfc3RhdGVvd25lciAqc28pCit7CisJa3JlZl9nZXQoJnNvLT5zb19yZWYpOworfQorCisjZW5kaWYgICAvKiBORlNENF9TVEFURV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mc2Qvc3RhdHMuaCBiL2luY2x1ZGUvbGludXgvbmZzZC9zdGF0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2ZjFlMGMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L25mc2Qvc3RhdHMuaApAQCAtMCwwICsxLDQ0IEBACisvKgorICogbGludXgvaW5jbHVkZS9uZnNkL3N0YXRzLmgKKyAqCisgKiBTdGF0aXN0aWNzIGZvciBORlMgc2VydmVyLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiBPbGFmIEtpcmNoIDxva2lyQG1vbmFkLnN3Yi5kZT4KKyAqLworCisjaWZuZGVmIExJTlVYX05GU0RfU1RBVFNfSAorI2RlZmluZSBMSU5VWF9ORlNEX1NUQVRTX0gKKworc3RydWN0IG5mc2Rfc3RhdHMgeworCXVuc2lnbmVkIGludAlyY2hpdHM7CQkvKiByZXBjYWNoZSBoaXRzICovCisJdW5zaWduZWQgaW50CXJjbWlzc2VzOwkvKiByZXBjYWNoZSBoaXRzICovCisJdW5zaWduZWQgaW50CXJjbm9jYWNoZTsJLyogdW5jYWNoZWQgcmVxcyAqLworCXVuc2lnbmVkIGludAlmaF9zdGFsZTsJLyogRkggc3RhbGUgZXJyb3IgKi8KKwl1bnNpZ25lZCBpbnQJZmhfbG9va3VwOwkvKiBkZW50cnkgY2FjaGVkICovCisJdW5zaWduZWQgaW50CWZoX2Fub247CS8qIGFub24gZmlsZSBkZW50cnkgcmV0dXJuZWQgKi8KKwl1bnNpZ25lZCBpbnQJZmhfbm9jYWNoZV9kaXI7CS8qIGZpbGVoYW5kbGUgbm90IGZvdW5kIGluIGRjYWNoZSAqLworCXVuc2lnbmVkIGludAlmaF9ub2NhY2hlX25vbmRpcjsJLyogZmlsZWhhbmRsZSBub3QgZm91bmQgaW4gZGNhY2hlICovCisJdW5zaWduZWQgaW50CWlvX3JlYWQ7CS8qIGJ5dGVzIHJldHVybmVkIHRvIHJlYWQgcmVxdWVzdHMgKi8KKwl1bnNpZ25lZCBpbnQJaW9fd3JpdGU7CS8qIGJ5dGVzIHBhc3NlZCBpbiB3cml0ZSByZXF1ZXN0cyAqLworCXVuc2lnbmVkIGludAl0aF9jbnQ7CQkvKiBudW1iZXIgb2YgYXZhaWxhYmxlIHRocmVhZHMgKi8KKwl1bnNpZ25lZCBpbnQJdGhfdXNhZ2VbMTBdOwkvKiBudW1iZXIgb2YgdGlja3MgZHVyaW5nIHdoaWNoIG4gcGVyZGVjaWxlcworCQkJCQkgKiBvZiBhdmFpbGFibGUgdGhyZWFkcyB3ZXJlIGluIHVzZSAqLworCXVuc2lnbmVkIGludAl0aF9mdWxsY250OwkvKiBudW1iZXIgb2YgdGltZXMgbGFzdCBmcmVlIHRocmVhZCB3YXMgdXNlZCAqLworCXVuc2lnbmVkIGludAlyYV9zaXplOwkvKiBzaXplIG9mIHJhIGNhY2hlICovCisJdW5zaWduZWQgaW50CXJhX2RlcHRoWzExXTsJLyogbnVtYmVyIG9mIHRpbWVzIHJhIGVudHJ5IHdhcyBmb3VuZCB0aGF0IGRlZXAKKwkJCQkJICogaW4gdGhlIGNhY2hlICgxMHBlcmNlbnRpbGVzKS4gWzEwXSA9IG5vdCBmb3VuZCAqLworfTsKKworLyogdGhyZWFkIHVzYWdlIHdyYXBzIHZlcnkgbWlsbGlvbiBzZWNvbmRzIChhcHByb3ggb25lIGZvcnRuaWdodCkgKi8KKyNkZWZpbmUJTkZTRF9VU0FHRV9XUkFQCShIWioxMDAwMDAwKQorCisjaWZkZWYgX19LRVJORUxfXworCitleHRlcm4gc3RydWN0IG5mc2Rfc3RhdHMJbmZzZHN0YXRzOworZXh0ZXJuIHN0cnVjdCBzdmNfc3RhdAkJbmZzZF9zdmNzdGF0czsKKwordm9pZAluZnNkX3N0YXRfaW5pdCh2b2lkKTsKK3ZvaWQJbmZzZF9zdGF0X3NodXRkb3duKHZvaWQpOworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIExJTlVYX05GU0RfU1RBVFNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZnNkL3N5c2NhbGwuaCBiL2luY2x1ZGUvbGludXgvbmZzZC9zeXNjYWxsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY1YzlkYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmZzZC9zeXNjYWxsLmgKQEAgLTAsMCArMSwxMjUgQEAKKy8qCisgKiBpbmNsdWRlL2xpbnV4L25mc2Qvc3lzY2FsbC5oCisgKgorICogVGhpcyBmaWxlIGhvbGRzIGFsbCBkZWNsYXJhdGlvbnMgZm9yIHRoZSBrbmZzZCBzeXNjYWxsIGludGVyZmFjZS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5NyBPbGFmIEtpcmNoIDxva2lyQG1vbmFkLnN3Yi5kZT4KKyAqLworCisjaWZuZGVmIE5GU0RfU1lTQ0FMTF9ICisjZGVmaW5lIE5GU0RfU1lTQ0FMTF9ICisKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpZmRlZiBfX0tFUk5FTF9fCisjIGluY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorIyBpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorIyBpbmNsdWRlIDxsaW51eC9pbi5oPgorI2VuZGlmIAorI2luY2x1ZGUgPGxpbnV4L3Bvc2l4X3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbmZzZC9jb25zdC5oPgorI2luY2x1ZGUgPGxpbnV4L25mc2QvZXhwb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvbmZzZC9uZnNmaC5oPgorI2luY2x1ZGUgPGxpbnV4L25mc2QvYXV0aC5oPgorCisvKgorICogVmVyc2lvbiBvZiB0aGUgc3lzY2FsbCBpbnRlcmZhY2UKKyAqLworI2RlZmluZSBORlNDVExfVkVSU0lPTgkJMHgwMjAxCisKKy8qCisgKiBUaGVzZSBhcmUgdGhlIGNvbW1hbmRzIHVuZGVyc3Rvb2QgYnkgbmZzY3RsKCkuCisgKi8KKyNkZWZpbmUgTkZTQ1RMX1NWQwkJMAkvKiBUaGlzIGlzIGEgc2VydmVyIHByb2Nlc3MuICovCisjZGVmaW5lIE5GU0NUTF9BRERDTElFTlQJMQkvKiBBZGQgYW4gTkZTIGNsaWVudC4gKi8KKyNkZWZpbmUgTkZTQ1RMX0RFTENMSUVOVAkyCS8qIFJlbW92ZSBhbiBORlMgY2xpZW50LiAqLworI2RlZmluZSBORlNDVExfRVhQT1JUCQkzCS8qIGV4cG9ydCBhIGZpbGUgc3lzdGVtLiAqLworI2RlZmluZSBORlNDVExfVU5FWFBPUlQJCTQJLyogdW5leHBvcnQgYSBmaWxlIHN5c3RlbS4gKi8KKy8qI2RlZmluZSBORlNDVExfVUdJRFVQREFURQk1CS8gKiB1cGRhdGUgYSBjbGllbnQncyB1aWQvZ2lkIG1hcC4gRElTQ0FSREVEICovCisvKiNkZWZpbmUgTkZTQ1RMX0dFVEZICQk2CS8gKiBnZXQgYW4gZmggYnkgaW5vIERJU0NBUkRFRCAqLworI2RlZmluZSBORlNDVExfR0VURkQJCTcJLyogZ2V0IGFuIGZoIGJ5IHBhdGggKHVzZWQgYnkgbW91bnRkKSAqLworI2RlZmluZQlORlNDVExfR0VURlMJCTgJLyogZ2V0IGFuIGZoIGJ5IHBhdGggd2l0aCBtYXggRkggbGVuICovCisKKy8qIFNWQyAqLworc3RydWN0IG5mc2N0bF9zdmMgeworCXVuc2lnbmVkIHNob3J0CQlzdmNfcG9ydDsKKwlpbnQJCQlzdmNfbnRocmVhZHM7Cit9OworCisvKiBBRERDTElFTlQvREVMQ0xJRU5UICovCitzdHJ1Y3QgbmZzY3RsX2NsaWVudCB7CisJY2hhcgkJCWNsX2lkZW50W05GU0NMTlRfSURNQVgrMV07CisJaW50CQkJY2xfbmFkZHI7CisJc3RydWN0IGluX2FkZHIJCWNsX2FkZHJsaXN0W05GU0NMTlRfQUREUk1BWF07CisJaW50CQkJY2xfZmhrZXl0eXBlOworCWludAkJCWNsX2Zoa2V5bGVuOworCXVuc2lnbmVkIGNoYXIJCWNsX2Zoa2V5W05GU0NMTlRfS0VZTUFYXTsKK307CisKKy8qIEVYUE9SVC9VTkVYUE9SVCAqLworc3RydWN0IG5mc2N0bF9leHBvcnQgeworCWNoYXIJCQlleF9jbGllbnRbTkZTQ0xOVF9JRE1BWCsxXTsKKwljaGFyCQkJZXhfcGF0aFtORlNfTUFYUEFUSExFTisxXTsKKwlfX2tlcm5lbF9vbGRfZGV2X3QJZXhfZGV2OworCV9fa2VybmVsX2lub190CQlleF9pbm87CisJaW50CQkJZXhfZmxhZ3M7CisJX19rZXJuZWxfdWlkX3QJCWV4X2Fub25fdWlkOworCV9fa2VybmVsX2dpZF90CQlleF9hbm9uX2dpZDsKK307CisKKy8qIEdFVEZEICovCitzdHJ1Y3QgbmZzY3RsX2ZkcGFybSB7CisJc3RydWN0IHNvY2thZGRyCQlnZF9hZGRyOworCWNoYXIJCQlnZF9wYXRoW05GU19NQVhQQVRITEVOKzFdOworCWludAkJCWdkX3ZlcnNpb247Cit9OworCisvKiBHRVRGUyAtIEdFVCBGaWxlaGFuZGxlIHdpdGggU2l6ZSAqLworc3RydWN0IG5mc2N0bF9mc3Bhcm0geworCXN0cnVjdCBzb2NrYWRkcgkJZ2RfYWRkcjsKKwljaGFyCQkJZ2RfcGF0aFtORlNfTUFYUEFUSExFTisxXTsKKwlpbnQJCQlnZF9tYXhsZW47Cit9OworCisvKgorICogVGhpcyBpcyB0aGUgYXJndW1lbnQgdW5pb24uCisgKi8KK3N0cnVjdCBuZnNjdGxfYXJnIHsKKwlpbnQJCQljYV92ZXJzaW9uOwkvKiBzYWZlZ3VhcmQgKi8KKwl1bmlvbiB7CisJCXN0cnVjdCBuZnNjdGxfc3ZjCXVfc3ZjOworCQlzdHJ1Y3QgbmZzY3RsX2NsaWVudAl1X2NsaWVudDsKKwkJc3RydWN0IG5mc2N0bF9leHBvcnQJdV9leHBvcnQ7CisJCXN0cnVjdCBuZnNjdGxfZmRwYXJtCXVfZ2V0ZmQ7CisJCXN0cnVjdCBuZnNjdGxfZnNwYXJtCXVfZ2V0ZnM7CisJCS8qCisJCSAqIFRoZSBmb2xsb3dpbmcgZHVtbXkgbWVtYmVyIGlzIG5lZWRlZCB0byBwcmVzZXJ2ZSBiaW5hcnkgY29tcGF0aWJpbGl0eQorCQkgKiBvbiBwbGF0Zm9ybXMgd2hlcmUgYWxpZ25vZih2b2lkKik+YWxpZ25vZihpbnQpLiAgSXQncyBuZWVkZWQgYmVjYXVzZQorCQkgKiB0aGlzIHVuaW9uIHVzZWQgdG8gY29udGFpbiBhIG1lbWJlciAodV91bWFwKSB3aGljaCBjb250YWluZWQgYQorCQkgKiBwb2ludGVyLgorCQkgKi8KKwkJdm9pZCAqdV9wdHI7CisJfSB1OworI2RlZmluZSBjYV9zdmMJCXUudV9zdmMKKyNkZWZpbmUgY2FfY2xpZW50CXUudV9jbGllbnQKKyNkZWZpbmUgY2FfZXhwb3J0CXUudV9leHBvcnQKKyNkZWZpbmUgY2FfZ2V0ZmQJdS51X2dldGZkCisjZGVmaW5lCWNhX2dldGZzCXUudV9nZXRmcworfTsKKwordW5pb24gbmZzY3RsX3JlcyB7CisJX191OAkJCWNyX2dldGZoW05GU19GSFNJWkVdOworCXN0cnVjdCBrbmZzZF9maAkJY3JfZ2V0ZnM7Cit9OworCisjaWZkZWYgX19LRVJORUxfXworLyoKKyAqIEtlcm5lbCBzeXNjYWxsIGltcGxlbWVudGF0aW9uLgorICovCitleHRlcm4gaW50CQlleHBfYWRkY2xpZW50KHN0cnVjdCBuZnNjdGxfY2xpZW50ICpuY3ApOworZXh0ZXJuIGludAkJZXhwX2RlbGNsaWVudChzdHJ1Y3QgbmZzY3RsX2NsaWVudCAqbmNwKTsKK2V4dGVybiBpbnQJCWV4cF9leHBvcnQoc3RydWN0IG5mc2N0bF9leHBvcnQgKm54cCk7CitleHRlcm4gaW50CQlleHBfdW5leHBvcnQoc3RydWN0IG5mc2N0bF9leHBvcnQgKm54cCk7CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBORlNEX1NZU0NBTExfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZnNkL3hkci5oIGIvaW5jbHVkZS9saW51eC9uZnNkL3hkci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjY2NlZjcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L25mc2QveGRyLmgKQEAgLTAsMCArMSwxNzIgQEAKKy8qCisgKiBsaW51eC9pbnhsdWRlL2xpbnV4L25mc2QveGRyLmgKKyAqCisgKiBYRFIgdHlwZXMgZm9yIG5mc2QuIFRoaXMgaXMgbWFpbmx5IGEgdHlwaW5nIGV4ZXJjaXNlLgorICovCisKKyNpZm5kZWYgTElOVVhfTkZTRF9ICisjZGVmaW5lIExJTlVYX05GU0RfSAorCisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC92ZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9uZnMuaD4KKworc3RydWN0IG5mc2RfZmhhbmRsZSB7CisJc3RydWN0IHN2Y19maAkJZmg7Cit9OworCitzdHJ1Y3QgbmZzZF9zYXR0cmFyZ3MgeworCXN0cnVjdCBzdmNfZmgJCWZoOworCXN0cnVjdCBpYXR0cgkJYXR0cnM7Cit9OworCitzdHJ1Y3QgbmZzZF9kaXJvcGFyZ3MgeworCXN0cnVjdCBzdmNfZmgJCWZoOworCWNoYXIgKgkJCW5hbWU7CisJaW50CQkJbGVuOworfTsKKworc3RydWN0IG5mc2RfcmVhZGFyZ3MgeworCXN0cnVjdCBzdmNfZmgJCWZoOworCV9fdTMyCQkJb2Zmc2V0OworCV9fdTMyCQkJY291bnQ7CisJc3RydWN0IGt2ZWMJCXZlY1tSUENTVkNfTUFYUEFHRVNdOworCWludAkJCXZsZW47Cit9OworCitzdHJ1Y3QgbmZzZF93cml0ZWFyZ3MgeworCXN2Y19maAkJCWZoOworCV9fdTMyCQkJb2Zmc2V0OworCWludAkJCWxlbjsKKwlzdHJ1Y3Qga3ZlYwkJdmVjW1JQQ1NWQ19NQVhQQUdFU107CisJaW50CQkJdmxlbjsKK307CisKK3N0cnVjdCBuZnNkX2NyZWF0ZWFyZ3MgeworCXN0cnVjdCBzdmNfZmgJCWZoOworCWNoYXIgKgkJCW5hbWU7CisJaW50CQkJbGVuOworCXN0cnVjdCBpYXR0cgkJYXR0cnM7Cit9OworCitzdHJ1Y3QgbmZzZF9yZW5hbWVhcmdzIHsKKwlzdHJ1Y3Qgc3ZjX2ZoCQlmZmg7CisJY2hhciAqCQkJZm5hbWU7CisJaW50CQkJZmxlbjsKKwlzdHJ1Y3Qgc3ZjX2ZoCQl0Zmg7CisJY2hhciAqCQkJdG5hbWU7CisJaW50CQkJdGxlbjsKK307CisKK3N0cnVjdCBuZnNkX3JlYWRsaW5rYXJncyB7CisJc3RydWN0IHN2Y19maAkJZmg7CisJY2hhciAqCQkJYnVmZmVyOworfTsKKwkKK3N0cnVjdCBuZnNkX2xpbmthcmdzIHsKKwlzdHJ1Y3Qgc3ZjX2ZoCQlmZmg7CisJc3RydWN0IHN2Y19maAkJdGZoOworCWNoYXIgKgkJCXRuYW1lOworCWludAkJCXRsZW47Cit9OworCitzdHJ1Y3QgbmZzZF9zeW1saW5rYXJncyB7CisJc3RydWN0IHN2Y19maAkJZmZoOworCWNoYXIgKgkJCWZuYW1lOworCWludAkJCWZsZW47CisJY2hhciAqCQkJdG5hbWU7CisJaW50CQkJdGxlbjsKKwlzdHJ1Y3QgaWF0dHIJCWF0dHJzOworfTsKKworc3RydWN0IG5mc2RfcmVhZGRpcmFyZ3MgeworCXN0cnVjdCBzdmNfZmgJCWZoOworCV9fdTMyCQkJY29va2llOworCV9fdTMyCQkJY291bnQ7CisJdTMyICoJCQlidWZmZXI7Cit9OworCitzdHJ1Y3QgbmZzZF9hdHRyc3RhdCB7CisJc3RydWN0IHN2Y19maAkJZmg7Cit9OworCitzdHJ1Y3QgbmZzZF9kaXJvcHJlcyAgeworCXN0cnVjdCBzdmNfZmgJCWZoOworfTsKKworc3RydWN0IG5mc2RfcmVhZGxpbmtyZXMgeworCWludAkJCWxlbjsKK307CisKK3N0cnVjdCBuZnNkX3JlYWRyZXMgeworCXN0cnVjdCBzdmNfZmgJCWZoOworCXVuc2lnbmVkIGxvbmcJCWNvdW50OworfTsKKworc3RydWN0IG5mc2RfcmVhZGRpcnJlcyB7CisJaW50CQkJY291bnQ7CisKKwlzdHJ1Y3QgcmVhZGRpcl9jZAljb21tb247CisJdTMyICoJCQlidWZmZXI7CisJaW50CQkJYnVmbGVuOworCXUzMiAqCQkJb2Zmc2V0OworfTsKKworc3RydWN0IG5mc2Rfc3RhdGZzcmVzIHsKKwlzdHJ1Y3Qga3N0YXRmcwkJc3RhdHM7Cit9OworCisvKgorICogU3RvcmFnZSByZXF1aXJlbWVudHMgZm9yIFhEUiBhcmd1bWVudHMgYW5kIHJlc3VsdHMuCisgKi8KK3VuaW9uIG5mc2RfeGRyc3RvcmUgeworCXN0cnVjdCBuZnNkX3NhdHRyYXJncwlzYXR0cjsKKwlzdHJ1Y3QgbmZzZF9kaXJvcGFyZ3MJZGlyb3A7CisJc3RydWN0IG5mc2RfcmVhZGFyZ3MJcmVhZDsKKwlzdHJ1Y3QgbmZzZF93cml0ZWFyZ3MJd3JpdGU7CisJc3RydWN0IG5mc2RfY3JlYXRlYXJncwljcmVhdGU7CisJc3RydWN0IG5mc2RfcmVuYW1lYXJncwlyZW5hbWU7CisJc3RydWN0IG5mc2RfbGlua2FyZ3MJbGluazsKKwlzdHJ1Y3QgbmZzZF9zeW1saW5rYXJncwlzeW1saW5rOworCXN0cnVjdCBuZnNkX3JlYWRkaXJhcmdzCXJlYWRkaXI7Cit9OworCisjZGVmaW5lIE5GUzJfU1ZDX1hEUlNJWkUJc2l6ZW9mKHVuaW9uIG5mc2RfeGRyc3RvcmUpCisKKworaW50IG5mc3N2Y19kZWNvZGVfdm9pZChzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgdTMyICosIHZvaWQgKik7CitpbnQgbmZzc3ZjX2RlY29kZV9maGFuZGxlKHN0cnVjdCBzdmNfcnFzdCAqLCB1MzIgKiwgc3RydWN0IG5mc2RfZmhhbmRsZSAqKTsKK2ludCBuZnNzdmNfZGVjb2RlX3NhdHRyYXJncyhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgdTMyICosCisJCQkJc3RydWN0IG5mc2Rfc2F0dHJhcmdzICopOworaW50IG5mc3N2Y19kZWNvZGVfZGlyb3BhcmdzKHN0cnVjdCBzdmNfcnFzdCAqLCB1MzIgKiwKKwkJCQlzdHJ1Y3QgbmZzZF9kaXJvcGFyZ3MgKik7CitpbnQgbmZzc3ZjX2RlY29kZV9yZWFkYXJncyhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgdTMyICosCisJCQkJc3RydWN0IG5mc2RfcmVhZGFyZ3MgKik7CitpbnQgbmZzc3ZjX2RlY29kZV93cml0ZWFyZ3Moc3RydWN0IHN2Y19ycXN0ICosIHUzMiAqLAorCQkJCXN0cnVjdCBuZnNkX3dyaXRlYXJncyAqKTsKK2ludCBuZnNzdmNfZGVjb2RlX2NyZWF0ZWFyZ3Moc3RydWN0IHN2Y19ycXN0ICosIHUzMiAqLAorCQkJCXN0cnVjdCBuZnNkX2NyZWF0ZWFyZ3MgKik7CitpbnQgbmZzc3ZjX2RlY29kZV9yZW5hbWVhcmdzKHN0cnVjdCBzdmNfcnFzdCAqLCB1MzIgKiwKKwkJCQlzdHJ1Y3QgbmZzZF9yZW5hbWVhcmdzICopOworaW50IG5mc3N2Y19kZWNvZGVfcmVhZGxpbmthcmdzKHN0cnVjdCBzdmNfcnFzdCAqLCB1MzIgKiwKKwkJCQlzdHJ1Y3QgbmZzZF9yZWFkbGlua2FyZ3MgKik7CitpbnQgbmZzc3ZjX2RlY29kZV9saW5rYXJncyhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgdTMyICosCisJCQkJc3RydWN0IG5mc2RfbGlua2FyZ3MgKik7CitpbnQgbmZzc3ZjX2RlY29kZV9zeW1saW5rYXJncyhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgdTMyICosCisJCQkJc3RydWN0IG5mc2Rfc3ltbGlua2FyZ3MgKik7CitpbnQgbmZzc3ZjX2RlY29kZV9yZWFkZGlyYXJncyhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgdTMyICosCisJCQkJc3RydWN0IG5mc2RfcmVhZGRpcmFyZ3MgKik7CitpbnQgbmZzc3ZjX2VuY29kZV92b2lkKHN0cnVjdCBzdmNfcnFzdCAqLCB1MzIgKiwgdm9pZCAqKTsKK2ludCBuZnNzdmNfZW5jb2RlX2F0dHJzdGF0KHN0cnVjdCBzdmNfcnFzdCAqLCB1MzIgKiwgc3RydWN0IG5mc2RfYXR0cnN0YXQgKik7CitpbnQgbmZzc3ZjX2VuY29kZV9kaXJvcHJlcyhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgdTMyICosIHN0cnVjdCBuZnNkX2Rpcm9wcmVzICopOworaW50IG5mc3N2Y19lbmNvZGVfcmVhZGxpbmtyZXMoc3RydWN0IHN2Y19ycXN0ICosIHUzMiAqLCBzdHJ1Y3QgbmZzZF9yZWFkbGlua3JlcyAqKTsKK2ludCBuZnNzdmNfZW5jb2RlX3JlYWRyZXMoc3RydWN0IHN2Y19ycXN0ICosIHUzMiAqLCBzdHJ1Y3QgbmZzZF9yZWFkcmVzICopOworaW50IG5mc3N2Y19lbmNvZGVfc3RhdGZzcmVzKHN0cnVjdCBzdmNfcnFzdCAqLCB1MzIgKiwgc3RydWN0IG5mc2Rfc3RhdGZzcmVzICopOworaW50IG5mc3N2Y19lbmNvZGVfcmVhZGRpcnJlcyhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgdTMyICosIHN0cnVjdCBuZnNkX3JlYWRkaXJyZXMgKik7CisKK2ludCBuZnNzdmNfZW5jb2RlX2VudHJ5KHN0cnVjdCByZWFkZGlyX2NkICosIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJaW50IG5hbWxlbiwgbG9mZl90IG9mZnNldCwgaW5vX3QgaW5vLCB1bnNpZ25lZCBpbnQpOworCitpbnQgbmZzc3ZjX3JlbGVhc2VfZmhhbmRsZShzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgdTMyICosIHN0cnVjdCBuZnNkX2ZoYW5kbGUgKik7CisKKyNlbmRpZiAvKiBMSU5VWF9ORlNEX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzZC94ZHIzLmggYi9pbmNsdWRlL2xpbnV4L25mc2QveGRyMy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhZTllMGUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L25mc2QveGRyMy5oCkBAIC0wLDAgKzEsMzIxIEBACisvKgorICogbGludXgvaW5jbHVkZS9saW51eC9uZnNkL3hkcjMuaAorICoKKyAqIFhEUiB0eXBlcyBmb3IgTkZTdjMgaW4gbmZzZC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMTk5OCwgT2xhZiBLaXJjaCA8b2tpckBtb25hZC5zd2IuZGU+CisgKi8KKworI2lmbmRlZiBfTElOVVhfTkZTRF9YRFIzX0gKKyNkZWZpbmUgX0xJTlVYX05GU0RfWERSM19ICisKKyNpbmNsdWRlIDxsaW51eC9uZnNkL3hkci5oPgorCitzdHJ1Y3QgbmZzZDNfc2F0dHJhcmdzIHsKKwlzdHJ1Y3Qgc3ZjX2ZoCQlmaDsKKwlzdHJ1Y3QgaWF0dHIJCWF0dHJzOworCWludAkJCWNoZWNrX2d1YXJkOworCXRpbWVfdAkJCWd1YXJkdGltZTsKK307CisKK3N0cnVjdCBuZnNkM19kaXJvcGFyZ3MgeworCXN0cnVjdCBzdmNfZmgJCWZoOworCWNoYXIgKgkJCW5hbWU7CisJaW50CQkJbGVuOworfTsKKworc3RydWN0IG5mc2QzX2FjY2Vzc2FyZ3MgeworCXN0cnVjdCBzdmNfZmgJCWZoOworCXVuc2lnbmVkIGludAkJYWNjZXNzOworfTsKKworc3RydWN0IG5mc2QzX3JlYWRhcmdzIHsKKwlzdHJ1Y3Qgc3ZjX2ZoCQlmaDsKKwlfX3U2NAkJCW9mZnNldDsKKwlfX3UzMgkJCWNvdW50OworCXN0cnVjdCBrdmVjCQl2ZWNbUlBDU1ZDX01BWFBBR0VTXTsKKwlpbnQJCQl2bGVuOworfTsKKworc3RydWN0IG5mc2QzX3dyaXRlYXJncyB7CisJc3ZjX2ZoCQkJZmg7CisJX191NjQJCQlvZmZzZXQ7CisJX191MzIJCQljb3VudDsKKwlpbnQJCQlzdGFibGU7CisJaW50CQkJbGVuOworCXN0cnVjdCBrdmVjCQl2ZWNbUlBDU1ZDX01BWFBBR0VTXTsKKwlpbnQJCQl2bGVuOworfTsKKworc3RydWN0IG5mc2QzX2NyZWF0ZWFyZ3MgeworCXN0cnVjdCBzdmNfZmgJCWZoOworCWNoYXIgKgkJCW5hbWU7CisJaW50CQkJbGVuOworCWludAkJCWNyZWF0ZW1vZGU7CisJc3RydWN0IGlhdHRyCQlhdHRyczsKKwlfX3UzMiAqCQkJdmVyZjsKK307CisKK3N0cnVjdCBuZnNkM19ta25vZGFyZ3MgeworCXN0cnVjdCBzdmNfZmgJCWZoOworCWNoYXIgKgkJCW5hbWU7CisJaW50CQkJbGVuOworCV9fdTMyCQkJZnR5cGU7CisJX191MzIJCQltYWpvciwgbWlub3I7CisJc3RydWN0IGlhdHRyCQlhdHRyczsKK307CisKK3N0cnVjdCBuZnNkM19yZW5hbWVhcmdzIHsKKwlzdHJ1Y3Qgc3ZjX2ZoCQlmZmg7CisJY2hhciAqCQkJZm5hbWU7CisJaW50CQkJZmxlbjsKKwlzdHJ1Y3Qgc3ZjX2ZoCQl0Zmg7CisJY2hhciAqCQkJdG5hbWU7CisJaW50CQkJdGxlbjsKK307CisKK3N0cnVjdCBuZnNkM19yZWFkbGlua2FyZ3MgeworCXN0cnVjdCBzdmNfZmgJCWZoOworCWNoYXIgKgkJCWJ1ZmZlcjsKK307CisKK3N0cnVjdCBuZnNkM19saW5rYXJncyB7CisJc3RydWN0IHN2Y19maAkJZmZoOworCXN0cnVjdCBzdmNfZmgJCXRmaDsKKwljaGFyICoJCQl0bmFtZTsKKwlpbnQJCQl0bGVuOworfTsKKworc3RydWN0IG5mc2QzX3N5bWxpbmthcmdzIHsKKwlzdHJ1Y3Qgc3ZjX2ZoCQlmZmg7CisJY2hhciAqCQkJZm5hbWU7CisJaW50CQkJZmxlbjsKKwljaGFyICoJCQl0bmFtZTsKKwlpbnQJCQl0bGVuOworCXN0cnVjdCBpYXR0cgkJYXR0cnM7Cit9OworCitzdHJ1Y3QgbmZzZDNfcmVhZGRpcmFyZ3MgeworCXN0cnVjdCBzdmNfZmgJCWZoOworCV9fdTY0CQkJY29va2llOworCV9fdTMyCQkJZGlyY291bnQ7CisJX191MzIJCQljb3VudDsKKwlfX3UzMiAqCQkJdmVyZjsKKwl1MzIgKgkJCWJ1ZmZlcjsKK307CisKK3N0cnVjdCBuZnNkM19jb21taXRhcmdzIHsKKwlzdHJ1Y3Qgc3ZjX2ZoCQlmaDsKKwlfX3U2NAkJCW9mZnNldDsKKwlfX3UzMgkJCWNvdW50OworfTsKKworc3RydWN0IG5mc2QzX2F0dHJzdGF0IHsKKwlfX3UzMgkJCXN0YXR1czsKKwlzdHJ1Y3Qgc3ZjX2ZoCQlmaDsKK307CisKKy8qIExPT0tVUCwgQ1JFQVRFLCBNS0RJUiwgU1lNTElOSywgTUtOT0QgKi8KK3N0cnVjdCBuZnNkM19kaXJvcHJlcyAgeworCV9fdTMyCQkJc3RhdHVzOworCXN0cnVjdCBzdmNfZmgJCWRpcmZoOworCXN0cnVjdCBzdmNfZmgJCWZoOworfTsKKworc3RydWN0IG5mc2QzX2FjY2Vzc3JlcyB7CisJX191MzIJCQlzdGF0dXM7CisJc3RydWN0IHN2Y19maAkJZmg7CisJX191MzIJCQlhY2Nlc3M7Cit9OworCitzdHJ1Y3QgbmZzZDNfcmVhZGxpbmtyZXMgeworCV9fdTMyCQkJc3RhdHVzOworCXN0cnVjdCBzdmNfZmgJCWZoOworCV9fdTMyCQkJbGVuOworfTsKKworc3RydWN0IG5mc2QzX3JlYWRyZXMgeworCV9fdTMyCQkJc3RhdHVzOworCXN0cnVjdCBzdmNfZmgJCWZoOworCXVuc2lnbmVkIGxvbmcJCWNvdW50OworCWludAkJCWVvZjsKK307CisKK3N0cnVjdCBuZnNkM193cml0ZXJlcyB7CisJX191MzIJCQlzdGF0dXM7CisJc3RydWN0IHN2Y19maAkJZmg7CisJdW5zaWduZWQgbG9uZwkJY291bnQ7CisJaW50CQkJY29tbWl0dGVkOworfTsKKworc3RydWN0IG5mc2QzX3JlbmFtZXJlcyB7CisJX191MzIJCQlzdGF0dXM7CisJc3RydWN0IHN2Y19maAkJZmZoOworCXN0cnVjdCBzdmNfZmgJCXRmaDsKK307CisKK3N0cnVjdCBuZnNkM19saW5rcmVzIHsKKwlfX3UzMgkJCXN0YXR1czsKKwlzdHJ1Y3Qgc3ZjX2ZoCQl0Zmg7CisJc3RydWN0IHN2Y19maAkJZmg7Cit9OworCitzdHJ1Y3QgbmZzZDNfcmVhZGRpcnJlcyB7CisJX191MzIJCQlzdGF0dXM7CisJc3RydWN0IHN2Y19maAkJZmg7CisJaW50CQkJY291bnQ7CisJX191MzIJCQl2ZXJmWzJdOworCisJc3RydWN0IHJlYWRkaXJfY2QJY29tbW9uOworCXUzMiAqCQkJYnVmZmVyOworCWludAkJCWJ1ZmxlbjsKKwl1MzIgKgkJCW9mZnNldDsKKwl1MzIgKgkJCW9mZnNldDE7CisJc3RydWN0IHN2Y19ycXN0ICoJcnFzdHA7CisKK307CisKK3N0cnVjdCBuZnNkM19mc3N0YXRyZXMgeworCV9fdTMyCQkJc3RhdHVzOworCXN0cnVjdCBrc3RhdGZzCQlzdGF0czsKKwlfX3UzMgkJCWludmFyc2VjOworfTsKKworc3RydWN0IG5mc2QzX2ZzaW5mb3JlcyB7CisJX191MzIJCQlzdGF0dXM7CisJX191MzIJCQlmX3J0bWF4OworCV9fdTMyCQkJZl9ydHByZWY7CisJX191MzIJCQlmX3J0bXVsdDsKKwlfX3UzMgkJCWZfd3RtYXg7CisJX191MzIJCQlmX3d0cHJlZjsKKwlfX3UzMgkJCWZfd3RtdWx0OworCV9fdTMyCQkJZl9kdHByZWY7CisJX191NjQJCQlmX21heGZpbGVzaXplOworCV9fdTMyCQkJZl9wcm9wZXJ0aWVzOworfTsKKworc3RydWN0IG5mc2QzX3BhdGhjb25mcmVzIHsKKwlfX3UzMgkJCXN0YXR1czsKKwlfX3UzMgkJCXBfbGlua19tYXg7CisJX191MzIJCQlwX25hbWVfbWF4OworCV9fdTMyCQkJcF9ub190cnVuYzsKKwlfX3UzMgkJCXBfY2hvd25fcmVzdHJpY3RlZDsKKwlfX3UzMgkJCXBfY2FzZV9pbnNlbnNpdGl2ZTsKKwlfX3UzMgkJCXBfY2FzZV9wcmVzZXJ2aW5nOworfTsKKworc3RydWN0IG5mc2QzX2NvbW1pdHJlcyB7CisJX191MzIJCQlzdGF0dXM7CisJc3RydWN0IHN2Y19maAkJZmg7Cit9OworCisvKiBkdW1teSB0eXBlIGZvciByZWxlYXNlICovCitzdHJ1Y3QgbmZzZDNfZmhhbmRsZV9wYWlyIHsKKwlfX3UzMgkJCWR1bW15OworCXN0cnVjdCBzdmNfZmgJCWZoMTsKKwlzdHJ1Y3Qgc3ZjX2ZoCQlmaDI7Cit9OworCisvKgorICogU3RvcmFnZSByZXF1aXJlbWVudHMgZm9yIFhEUiBhcmd1bWVudHMgYW5kIHJlc3VsdHMuCisgKi8KK3VuaW9uIG5mc2QzX3hkcnN0b3JlIHsKKwlzdHJ1Y3QgbmZzZDNfc2F0dHJhcmdzCQlzYXR0cmFyZ3M7CisJc3RydWN0IG5mc2QzX2Rpcm9wYXJncwkJZGlyb3BhcmdzOworCXN0cnVjdCBuZnNkM19yZWFkYXJncwkJcmVhZGFyZ3M7CisJc3RydWN0IG5mc2QzX3dyaXRlYXJncwkJd3JpdGVhcmdzOworCXN0cnVjdCBuZnNkM19jcmVhdGVhcmdzCQljcmVhdGVhcmdzOworCXN0cnVjdCBuZnNkM19yZW5hbWVhcmdzCQlyZW5hbWVhcmdzOworCXN0cnVjdCBuZnNkM19saW5rYXJncwkJbGlua2FyZ3M7CisJc3RydWN0IG5mc2QzX3N5bWxpbmthcmdzCXN5bWxpbmthcmdzOworCXN0cnVjdCBuZnNkM19yZWFkZGlyYXJncwlyZWFkZGlyYXJnczsKKwlzdHJ1Y3QgbmZzZDNfZGlyb3ByZXMgCQlkaXJvcHJlczsKKwlzdHJ1Y3QgbmZzZDNfYWNjZXNzcmVzCQlhY2Nlc3NyZXM7CisJc3RydWN0IG5mc2QzX3JlYWRsaW5rcmVzCXJlYWRsaW5rcmVzOworCXN0cnVjdCBuZnNkM19yZWFkcmVzCQlyZWFkcmVzOworCXN0cnVjdCBuZnNkM193cml0ZXJlcwkJd3JpdGVyZXM7CisJc3RydWN0IG5mc2QzX3JlbmFtZXJlcwkJcmVuYW1lcmVzOworCXN0cnVjdCBuZnNkM19saW5rcmVzCQlsaW5rcmVzOworCXN0cnVjdCBuZnNkM19yZWFkZGlycmVzCQlyZWFkZGlycmVzOworCXN0cnVjdCBuZnNkM19mc3N0YXRyZXMJCWZzc3RhdHJlczsKKwlzdHJ1Y3QgbmZzZDNfZnNpbmZvcmVzCQlmc2luZm9yZXM7CisJc3RydWN0IG5mc2QzX3BhdGhjb25mcmVzCXBhdGhjb25mcmVzOworCXN0cnVjdCBuZnNkM19jb21taXRyZXMJCWNvbW1pdHJlczsKK307CisKKyNkZWZpbmUgTkZTM19TVkNfWERSU0laRQkJc2l6ZW9mKHVuaW9uIG5mc2QzX3hkcnN0b3JlKQorCitpbnQgbmZzM3N2Y19kZWNvZGVfZmhhbmRsZShzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgdTMyICosIHN0cnVjdCBuZnNkX2ZoYW5kbGUgKik7CitpbnQgbmZzM3N2Y19kZWNvZGVfc2F0dHJhcmdzKHN0cnVjdCBzdmNfcnFzdCAqLCB1MzIgKiwKKwkJCQlzdHJ1Y3QgbmZzZDNfc2F0dHJhcmdzICopOworaW50IG5mczNzdmNfZGVjb2RlX2Rpcm9wYXJncyhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgdTMyICosCisJCQkJc3RydWN0IG5mc2QzX2Rpcm9wYXJncyAqKTsKK2ludCBuZnMzc3ZjX2RlY29kZV9hY2Nlc3NhcmdzKHN0cnVjdCBzdmNfcnFzdCAqLCB1MzIgKiwKKwkJCQlzdHJ1Y3QgbmZzZDNfYWNjZXNzYXJncyAqKTsKK2ludCBuZnMzc3ZjX2RlY29kZV9yZWFkYXJncyhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgdTMyICosCisJCQkJc3RydWN0IG5mc2QzX3JlYWRhcmdzICopOworaW50IG5mczNzdmNfZGVjb2RlX3dyaXRlYXJncyhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgdTMyICosCisJCQkJc3RydWN0IG5mc2QzX3dyaXRlYXJncyAqKTsKK2ludCBuZnMzc3ZjX2RlY29kZV9jcmVhdGVhcmdzKHN0cnVjdCBzdmNfcnFzdCAqLCB1MzIgKiwKKwkJCQlzdHJ1Y3QgbmZzZDNfY3JlYXRlYXJncyAqKTsKK2ludCBuZnMzc3ZjX2RlY29kZV9ta2RpcmFyZ3Moc3RydWN0IHN2Y19ycXN0ICosIHUzMiAqLAorCQkJCXN0cnVjdCBuZnNkM19jcmVhdGVhcmdzICopOworaW50IG5mczNzdmNfZGVjb2RlX21rbm9kYXJncyhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgdTMyICosCisJCQkJc3RydWN0IG5mc2QzX21rbm9kYXJncyAqKTsKK2ludCBuZnMzc3ZjX2RlY29kZV9yZW5hbWVhcmdzKHN0cnVjdCBzdmNfcnFzdCAqLCB1MzIgKiwKKwkJCQlzdHJ1Y3QgbmZzZDNfcmVuYW1lYXJncyAqKTsKK2ludCBuZnMzc3ZjX2RlY29kZV9yZWFkbGlua2FyZ3Moc3RydWN0IHN2Y19ycXN0ICosIHUzMiAqLAorCQkJCXN0cnVjdCBuZnNkM19yZWFkbGlua2FyZ3MgKik7CitpbnQgbmZzM3N2Y19kZWNvZGVfbGlua2FyZ3Moc3RydWN0IHN2Y19ycXN0ICosIHUzMiAqLAorCQkJCXN0cnVjdCBuZnNkM19saW5rYXJncyAqKTsKK2ludCBuZnMzc3ZjX2RlY29kZV9zeW1saW5rYXJncyhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgdTMyICosCisJCQkJc3RydWN0IG5mc2QzX3N5bWxpbmthcmdzICopOworaW50IG5mczNzdmNfZGVjb2RlX3JlYWRkaXJhcmdzKHN0cnVjdCBzdmNfcnFzdCAqLCB1MzIgKiwKKwkJCQlzdHJ1Y3QgbmZzZDNfcmVhZGRpcmFyZ3MgKik7CitpbnQgbmZzM3N2Y19kZWNvZGVfcmVhZGRpcnBsdXNhcmdzKHN0cnVjdCBzdmNfcnFzdCAqLCB1MzIgKiwKKwkJCQlzdHJ1Y3QgbmZzZDNfcmVhZGRpcmFyZ3MgKik7CitpbnQgbmZzM3N2Y19kZWNvZGVfY29tbWl0YXJncyhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgdTMyICosCisJCQkJc3RydWN0IG5mc2QzX2NvbW1pdGFyZ3MgKik7CitpbnQgbmZzM3N2Y19lbmNvZGVfdm9pZHJlcyhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgdTMyICosIHZvaWQgKik7CitpbnQgbmZzM3N2Y19lbmNvZGVfYXR0cnN0YXQoc3RydWN0IHN2Y19ycXN0ICosIHUzMiAqLAorCQkJCXN0cnVjdCBuZnNkM19hdHRyc3RhdCAqKTsKK2ludCBuZnMzc3ZjX2VuY29kZV93Y2NzdGF0KHN0cnVjdCBzdmNfcnFzdCAqLCB1MzIgKiwKKwkJCQlzdHJ1Y3QgbmZzZDNfYXR0cnN0YXQgKik7CitpbnQgbmZzM3N2Y19lbmNvZGVfZGlyb3ByZXMoc3RydWN0IHN2Y19ycXN0ICosIHUzMiAqLAorCQkJCXN0cnVjdCBuZnNkM19kaXJvcHJlcyAqKTsKK2ludCBuZnMzc3ZjX2VuY29kZV9hY2Nlc3NyZXMoc3RydWN0IHN2Y19ycXN0ICosIHUzMiAqLAorCQkJCXN0cnVjdCBuZnNkM19hY2Nlc3NyZXMgKik7CitpbnQgbmZzM3N2Y19lbmNvZGVfcmVhZGxpbmtyZXMoc3RydWN0IHN2Y19ycXN0ICosIHUzMiAqLAorCQkJCXN0cnVjdCBuZnNkM19yZWFkbGlua3JlcyAqKTsKK2ludCBuZnMzc3ZjX2VuY29kZV9yZWFkcmVzKHN0cnVjdCBzdmNfcnFzdCAqLCB1MzIgKiwgc3RydWN0IG5mc2QzX3JlYWRyZXMgKik7CitpbnQgbmZzM3N2Y19lbmNvZGVfd3JpdGVyZXMoc3RydWN0IHN2Y19ycXN0ICosIHUzMiAqLCBzdHJ1Y3QgbmZzZDNfd3JpdGVyZXMgKik7CitpbnQgbmZzM3N2Y19lbmNvZGVfY3JlYXRlcmVzKHN0cnVjdCBzdmNfcnFzdCAqLCB1MzIgKiwKKwkJCQlzdHJ1Y3QgbmZzZDNfZGlyb3ByZXMgKik7CitpbnQgbmZzM3N2Y19lbmNvZGVfcmVuYW1lcmVzKHN0cnVjdCBzdmNfcnFzdCAqLCB1MzIgKiwKKwkJCQlzdHJ1Y3QgbmZzZDNfcmVuYW1lcmVzICopOworaW50IG5mczNzdmNfZW5jb2RlX2xpbmtyZXMoc3RydWN0IHN2Y19ycXN0ICosIHUzMiAqLAorCQkJCXN0cnVjdCBuZnNkM19saW5rcmVzICopOworaW50IG5mczNzdmNfZW5jb2RlX3JlYWRkaXJyZXMoc3RydWN0IHN2Y19ycXN0ICosIHUzMiAqLAorCQkJCXN0cnVjdCBuZnNkM19yZWFkZGlycmVzICopOworaW50IG5mczNzdmNfZW5jb2RlX2Zzc3RhdHJlcyhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgdTMyICosCisJCQkJc3RydWN0IG5mc2QzX2Zzc3RhdHJlcyAqKTsKK2ludCBuZnMzc3ZjX2VuY29kZV9mc2luZm9yZXMoc3RydWN0IHN2Y19ycXN0ICosIHUzMiAqLAorCQkJCXN0cnVjdCBuZnNkM19mc2luZm9yZXMgKik7CitpbnQgbmZzM3N2Y19lbmNvZGVfcGF0aGNvbmZyZXMoc3RydWN0IHN2Y19ycXN0ICosIHUzMiAqLAorCQkJCXN0cnVjdCBuZnNkM19wYXRoY29uZnJlcyAqKTsKK2ludCBuZnMzc3ZjX2VuY29kZV9jb21taXRyZXMoc3RydWN0IHN2Y19ycXN0ICosIHUzMiAqLAorCQkJCXN0cnVjdCBuZnNkM19jb21taXRyZXMgKik7CisKK2ludCBuZnMzc3ZjX3JlbGVhc2VfZmhhbmRsZShzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgdTMyICosCisJCQkJc3RydWN0IG5mc2QzX2F0dHJzdGF0ICopOworaW50IG5mczNzdmNfcmVsZWFzZV9maGFuZGxlMihzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgdTMyICosCisJCQkJc3RydWN0IG5mc2QzX2ZoYW5kbGVfcGFpciAqKTsKK2ludCBuZnMzc3ZjX2VuY29kZV9lbnRyeShzdHJ1Y3QgcmVhZGRpcl9jZCAqLCBjb25zdCBjaGFyICpuYW1lLAorCQkJCWludCBuYW1sZW4sIGxvZmZfdCBvZmZzZXQsIGlub190IGlubywKKwkJCQl1bnNpZ25lZCBpbnQpOworaW50IG5mczNzdmNfZW5jb2RlX2VudHJ5X3BsdXMoc3RydWN0IHJlYWRkaXJfY2QgKiwgY29uc3QgY2hhciAqbmFtZSwKKwkJCQlpbnQgbmFtbGVuLCBsb2ZmX3Qgb2Zmc2V0LCBpbm9fdCBpbm8sCisJCQkJdW5zaWduZWQgaW50KTsKKworCisjZW5kaWYgLyogX0xJTlVYX05GU0RfWERSM19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mc2QveGRyNC5oIGIvaW5jbHVkZS9saW51eC9uZnNkL3hkcjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWY1YWQwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZnNkL3hkcjQuaApAQCAtMCwwICsxLDQ2MyBAQAorLyoKKyAqICBpbmNsdWRlL2xpbnV4L25mc2QveGRyNC5oCisgKgorICogIFNlcnZlci1zaWRlIHR5cGVzIGZvciBORlN2NC4KKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDAyIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIE1pY2hpZ2FuLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIEtlbmRyaWNrIFNtaXRoIDxrbXNtaXRoQHVtaWNoLmVkdT4KKyAqICBBbmR5IEFkYW1zb24gICA8YW5kcm9zQHVtaWNoLmVkdT4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiAgYXJlIG1ldDoKKyAqCisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorICogIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqICBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiAgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKyAqICBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCisgKiAgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAqICBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworI2lmbmRlZiBfTElOVVhfTkZTRF9YRFI0X0gKKyNkZWZpbmUgX0xJTlVYX05GU0RfWERSNF9ICisKKyNpbmNsdWRlIDxsaW51eC9uZnM0Lmg+CisKKyNkZWZpbmUgTkZTRDRfTUFYX1RBR0xFTgkxMjgKKyNkZWZpbmUgWERSX0xFTihuKSAgICAgICAgICAgICAgICAgICAgICgoKG4pICsgMykgJiB+MykKKworc3RydWN0IG5mc2Q0X2NoYW5nZV9pbmZvIHsKKwl1MzIJCWF0b21pYzsKKwl1MzIJCWJlZm9yZV9jdGltZV9zZWM7CisJdTMyCQliZWZvcmVfY3RpbWVfbnNlYzsKKwl1MzIJCWFmdGVyX2N0aW1lX3NlYzsKKwl1MzIJCWFmdGVyX2N0aW1lX25zZWM7Cit9OworCitzdHJ1Y3QgbmZzZDRfYWNjZXNzIHsKKwl1MzIJCWFjX3JlcV9hY2Nlc3M7ICAgICAgLyogcmVxdWVzdCAqLworCXUzMgkJYWNfc3VwcG9ydGVkOyAgICAgICAvKiByZXNwb25zZSAqLworCXUzMgkJYWNfcmVzcF9hY2Nlc3M7ICAgICAvKiByZXNwb25zZSAqLworfTsKKworc3RydWN0IG5mc2Q0X2Nsb3NlIHsKKwl1MzIJCWNsX3NlcWlkOyAgICAgICAgICAgLyogcmVxdWVzdCAqLworCXN0YXRlaWRfdAljbF9zdGF0ZWlkOyAgICAgICAgIC8qIHJlcXVlc3QrcmVzcG9uc2UgKi8KKwlzdHJ1Y3QgbmZzNF9zdGF0ZW93bmVyICogY2xfc3RhdGVvd25lcjsJLyogcmVzcG9uc2UgKi8KK307CisKK3N0cnVjdCBuZnNkNF9jb21taXQgeworCXU2NAkJY29fb2Zmc2V0OyAgICAgICAgICAvKiByZXF1ZXN0ICovCisJdTMyCQljb19jb3VudDsgICAgICAgICAgIC8qIHJlcXVlc3QgKi8KKwluZnM0X3ZlcmlmaWVyCWNvX3ZlcmY7ICAgICAgICAgICAgLyogcmVzcG9uc2UgKi8KK307CisKK3N0cnVjdCBuZnNkNF9jcmVhdGUgeworCXUzMgkJY3JfbmFtZWxlbjsgICAgICAgICAvKiByZXF1ZXN0ICovCisJY2hhciAqCQljcl9uYW1lOyAgICAgICAgICAgIC8qIHJlcXVlc3QgKi8KKwl1MzIJCWNyX3R5cGU7ICAgICAgICAgICAgLyogcmVxdWVzdCAqLworCXVuaW9uIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJlcXVlc3QgKi8KKwkJc3RydWN0IHsKKwkJCXUzMiBuYW1lbGVuOworCQkJY2hhciAqbmFtZTsKKwkJfSBsaW5rOyAgIC8qIE5GNExOSyAqLworCQlzdHJ1Y3QgeworCQkJdTMyIHNwZWNkYXRhMTsKKwkJCXUzMiBzcGVjZGF0YTI7CisJCX0gZGV2OyAgICAvKiBORjRCTEssIE5GNENIUiAqLworCX0gdTsKKwl1MzIJCWNyX2JtdmFsWzJdOyAgICAgICAgLyogcmVxdWVzdCAqLworCXN0cnVjdCBpYXR0cgljcl9pYXR0cjsgICAgICAgICAgIC8qIHJlcXVlc3QgKi8KKwlzdHJ1Y3QgbmZzZDRfY2hhbmdlX2luZm8gIGNyX2NpbmZvOyAvKiByZXNwb25zZSAqLworCXN0cnVjdCBuZnM0X2FjbCAqY3JfYWNsOworfTsKKyNkZWZpbmUgY3JfbGlua2xlbgl1LmxpbmsubmFtZWxlbgorI2RlZmluZSBjcl9saW5rbmFtZQl1LmxpbmsubmFtZQorI2RlZmluZSBjcl9zcGVjZGF0YTEJdS5kZXYuc3BlY2RhdGExCisjZGVmaW5lIGNyX3NwZWNkYXRhMgl1LmRldi5zcGVjZGF0YTIKKworc3RydWN0IG5mc2Q0X2RlbGVncmV0dXJuIHsKKwlzdGF0ZWlkX3QJZHJfc3RhdGVpZDsKK307CisKK3N0cnVjdCBuZnNkNF9nZXRhdHRyIHsKKwl1MzIJCWdhX2JtdmFsWzJdOyAgICAgICAgLyogcmVxdWVzdCAqLworCXN0cnVjdCBzdmNfZmgJKmdhX2ZocDsgICAgICAgICAgICAvKiByZXNwb25zZSAqLworfTsKKworc3RydWN0IG5mc2Q0X2xpbmsgeworCXUzMgkJbGlfbmFtZWxlbjsgICAgICAgICAvKiByZXF1ZXN0ICovCisJY2hhciAqCQlsaV9uYW1lOyAgICAgICAgICAgIC8qIHJlcXVlc3QgKi8KKwlzdHJ1Y3QgbmZzZDRfY2hhbmdlX2luZm8gIGxpX2NpbmZvOyAvKiByZXNwb25zZSAqLworfTsKKworc3RydWN0IG5mc2Q0X2xvY2tfZGVuaWVkIHsKKwljbGllbnRpZF90CWxkX2NsaWVudGlkOworCXN0cnVjdCBuZnM0X3N0YXRlb3duZXIgICAqbGRfc29wOworCXU2NCAgICAgICAgICAgICBsZF9zdGFydDsKKwl1NjQgICAgICAgICAgICAgbGRfbGVuZ3RoOworCXUzMiAgICAgICAgICAgICBsZF90eXBlOworfTsKKworc3RydWN0IG5mc2Q0X2xvY2sgeworCS8qIHJlcXVlc3QgKi8KKwl1MzIgICAgICAgICAgICAgbGtfdHlwZTsKKwl1MzIgICAgICAgICAgICAgbGtfcmVjbGFpbTsgICAgICAgICAvKiBib29sZWFuICovCisJdTY0ICAgICAgICAgICAgIGxrX29mZnNldDsKKwl1NjQgICAgICAgICAgICAgbGtfbGVuZ3RoOworCXUzMiAgICAgICAgICAgICBsa19pc19uZXc7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJdTMyICAgICAgICAgICAgIG9wZW5fc2VxaWQ7CisJCQlzdGF0ZWlkX3QgICAgICAgb3Blbl9zdGF0ZWlkOworCQkJdTMyICAgICAgICAgICAgIGxvY2tfc2VxaWQ7CisJCQljbGllbnRpZF90ICAgICAgY2xpZW50aWQ7CisJCQlzdHJ1Y3QgeGRyX25ldG9iaiBvd25lcjsKKwkJfSBuZXc7CisJCXN0cnVjdCB7CisJCQlzdGF0ZWlkX3QgICAgICAgbG9ja19zdGF0ZWlkOworCQkJdTMyICAgICAgICAgICAgIGxvY2tfc2VxaWQ7CisJCX0gb2xkOworCX0gdjsKKworCS8qIHJlc3BvbnNlICovCisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJc3RhdGVpZF90ICAgICAgICAgICAgICAgc3RhdGVpZDsKKwkJfSBvazsKKwkJc3RydWN0IG5mc2Q0X2xvY2tfZGVuaWVkICAgICAgICBkZW5pZWQ7CisJfSB1OworCisJc3RydWN0IG5mczRfc3RhdGVvd25lciAqbGtfc3RhdGVvd25lcjsKK307CisjZGVmaW5lIGxrX25ld19vcGVuX3NlcWlkICAgICAgIHYubmV3Lm9wZW5fc2VxaWQKKyNkZWZpbmUgbGtfbmV3X29wZW5fc3RhdGVpZCAgICAgdi5uZXcub3Blbl9zdGF0ZWlkCisjZGVmaW5lIGxrX25ld19sb2NrX3NlcWlkICAgICAgIHYubmV3LmxvY2tfc2VxaWQKKyNkZWZpbmUgbGtfbmV3X2NsaWVudGlkICAgICAgICAgdi5uZXcuY2xpZW50aWQKKyNkZWZpbmUgbGtfbmV3X293bmVyICAgICAgICAgICAgdi5uZXcub3duZXIKKyNkZWZpbmUgbGtfb2xkX2xvY2tfc3RhdGVpZCAgICAgdi5vbGQubG9ja19zdGF0ZWlkCisjZGVmaW5lIGxrX29sZF9sb2NrX3NlcWlkICAgICAgIHYub2xkLmxvY2tfc2VxaWQKKworI2RlZmluZSBsa19yZmxhZ3MgICAgICAgdS5vay5yZmxhZ3MKKyNkZWZpbmUgbGtfcmVzcF9zdGF0ZWlkIHUub2suc3RhdGVpZAorI2RlZmluZSBsa19kZW5pZWQgICAgICAgdS5kZW5pZWQKKworCitzdHJ1Y3QgbmZzZDRfbG9ja3QgeworCXUzMgkJCQlsdF90eXBlOworCWNsaWVudGlkX3QJCQlsdF9jbGllbnRpZDsKKwlzdHJ1Y3QgeGRyX25ldG9iagkJbHRfb3duZXI7CisJdTY0CQkJCWx0X29mZnNldDsKKwl1NjQJCQkJbHRfbGVuZ3RoOworCXN0cnVjdCBuZnM0X3N0YXRlb3duZXIgKiAJbHRfc3RhdGVvd25lcjsKKwlzdHJ1Y3QgbmZzZDRfbG9ja19kZW5pZWQgIAlsdF9kZW5pZWQ7Cit9OworCisgCitzdHJ1Y3QgbmZzZDRfbG9ja3UgeworCXUzMiAgICAgICAgICAgICBsdV90eXBlOworCXUzMiAgICAgICAgICAgICBsdV9zZXFpZDsKKwlzdGF0ZWlkX3QgICAgICAgbHVfc3RhdGVpZDsKKwl1NjQgICAgICAgICAgICAgbHVfb2Zmc2V0OworCXU2NCAgICAgICAgICAgICBsdV9sZW5ndGg7CisJc3RydWN0IG5mczRfc3RhdGVvd25lciAgKmx1X3N0YXRlb3duZXI7Cit9OworCisKK3N0cnVjdCBuZnNkNF9sb29rdXAgeworCXUzMgkJbG9fbGVuOyAgICAgICAgICAgICAvKiByZXF1ZXN0ICovCisJY2hhciAqCQlsb19uYW1lOyAgICAgICAgICAgIC8qIHJlcXVlc3QgKi8KK307CisKK3N0cnVjdCBuZnNkNF9wdXRmaCB7CisJdTMyCQlwZl9maGxlbjsgICAgICAgICAgIC8qIHJlcXVlc3QgKi8KKwljaGFyCQkqcGZfZmh2YWw7ICAgICAgICAgIC8qIHJlcXVlc3QgKi8KK307CisKK3N0cnVjdCBuZnNkNF9vcGVuIHsKKwl1MzIJCW9wX2NsYWltX3R5cGU7ICAgICAgLyogcmVxdWVzdCAqLworCXN0cnVjdCB4ZHJfbmV0b2JqIG9wX2ZuYW1lOwkgICAgLyogcmVxdWVzdCAtIGV2ZXJ5dGhpbmcgYnV0IENMQUlNX1BSRVYgKi8KKwl1MzIJCW9wX2RlbGVnYXRlX3R5cGU7ICAgLyogcmVxdWVzdCAtIENMQUlNX1BSRVYgb25seSAqLworCXN0YXRlaWRfdCAgICAgICBvcF9kZWxlZ2F0ZV9zdGF0ZWlkOyAvKiByZXF1ZXN0IC0gcmVzcG9uc2UgKi8KKwl1MzIJCW9wX2NyZWF0ZTsgICAgIAkgICAgLyogcmVxdWVzdCAqLworCXUzMgkJb3BfY3JlYXRlbW9kZTsgICAgICAvKiByZXF1ZXN0ICovCisJdTMyCQlvcF9ibXZhbFsyXTsgICAgICAgIC8qIHJlcXVlc3QgKi8KKwl1bmlvbiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZXF1ZXN0ICovCisJCXN0cnVjdCBpYXR0cglpYXR0cjsgICAgICAgICAgICAgICAgICAgICAgLyogVU5DSEVDS0VENCxHVUFSREVENCAqLworCQluZnM0X3ZlcmlmaWVyCXZlcmY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFWENMVVNJVkU0ICovCisJfSB1OworCWNsaWVudGlkX3QJb3BfY2xpZW50aWQ7ICAgICAgICAvKiByZXF1ZXN0ICovCisJc3RydWN0IHhkcl9uZXRvYmogb3Bfb3duZXI7ICAgICAgICAgICAvKiByZXF1ZXN0ICovCisJdTMyCQlvcF9zZXFpZDsgICAgICAgICAgIC8qIHJlcXVlc3QgKi8KKwl1MzIJCW9wX3NoYXJlX2FjY2VzczsgICAgLyogcmVxdWVzdCAqLworCXUzMgkJb3Bfc2hhcmVfZGVueTsgICAgICAvKiByZXF1ZXN0ICovCisJc3RhdGVpZF90CW9wX3N0YXRlaWQ7ICAgICAgICAgLyogcmVzcG9uc2UgKi8KKwlzdHJ1Y3QgbmZzZDRfY2hhbmdlX2luZm8gIG9wX2NpbmZvOyAvKiByZXNwb25zZSAqLworCXUzMgkJb3BfcmZsYWdzOyAgICAgICAgICAvKiByZXNwb25zZSAqLworCWludAkJb3BfdHJ1bmNhdGU7ICAgICAgICAvKiB1c2VkIGR1cmluZyBwcm9jZXNzaW5nICovCisJc3RydWN0IG5mczRfc3RhdGVvd25lciAqb3Bfc3RhdGVvd25lcjsgLyogdXNlZCBkdXJpbmcgcHJvY2Vzc2luZyAqLworCXN0cnVjdCBuZnM0X2FjbCAqb3BfYWNsOworfTsKKyNkZWZpbmUgb3BfaWF0dHIJdS5pYXR0cgorI2RlZmluZSBvcF92ZXJmCQl1LnZlcmYKKworc3RydWN0IG5mc2Q0X29wZW5fY29uZmlybSB7CisJc3RhdGVpZF90CW9jX3JlcV9zdGF0ZWlkCQkvKiByZXF1ZXN0ICovOworCXUzMgkJb2Nfc2VxaWQgICAgCQkvKiByZXF1ZXN0ICovOworCXN0YXRlaWRfdAlvY19yZXNwX3N0YXRlaWQJCS8qIHJlc3BvbnNlICovOworCXN0cnVjdCBuZnM0X3N0YXRlb3duZXIgKiBvY19zdGF0ZW93bmVyOwkvKiByZXNwb25zZSAqLworfTsKKworc3RydWN0IG5mc2Q0X29wZW5fZG93bmdyYWRlIHsKKwlzdGF0ZWlkX3QgICAgICAgb2Rfc3RhdGVpZDsKKwl1MzIgICAgICAgICAgICAgb2Rfc2VxaWQ7CisJdTMyICAgICAgICAgICAgIG9kX3NoYXJlX2FjY2VzczsKKwl1MzIgICAgICAgICAgICAgb2Rfc2hhcmVfZGVueTsKKwlzdHJ1Y3QgbmZzNF9zdGF0ZW93bmVyICpvZF9zdGF0ZW93bmVyOworfTsKKworCitzdHJ1Y3QgbmZzZDRfcmVhZCB7CisJc3RhdGVpZF90CXJkX3N0YXRlaWQ7ICAgICAgICAgLyogcmVxdWVzdCAqLworCXU2NAkJcmRfb2Zmc2V0OyAgICAgICAgICAvKiByZXF1ZXN0ICovCisJdTMyCQlyZF9sZW5ndGg7ICAgICAgICAgIC8qIHJlcXVlc3QgKi8KKwlzdHJ1Y3Qga3ZlYwlyZF9pb3ZbUlBDU1ZDX01BWFBBR0VTXTsKKwlpbnQJCXJkX3ZsZW47CisJc3RydWN0IGZpbGUgICAgICpyZF9maWxwOworCQorCXN0cnVjdCBzdmNfcnFzdCAqcmRfcnFzdHA7ICAgICAgICAgIC8qIHJlc3BvbnNlICovCisJc3RydWN0IHN2Y19maCAqIHJkX2ZocDsgICAgICAgICAgICAgLyogcmVzcG9uc2UgKi8KK307CisKK3N0cnVjdCBuZnNkNF9yZWFkZGlyIHsKKwl1NjQJCXJkX2Nvb2tpZTsgICAgICAgICAgLyogcmVxdWVzdCAqLworCW5mczRfdmVyaWZpZXIJcmRfdmVyZjsgICAgICAgICAgICAvKiByZXF1ZXN0ICovCisJdTMyCQlyZF9kaXJjb3VudDsgICAgICAgIC8qIHJlcXVlc3QgKi8KKwl1MzIJCXJkX21heGNvdW50OyAgICAgICAgLyogcmVxdWVzdCAqLworCXUzMgkJcmRfYm12YWxbMl07ICAgICAgICAvKiByZXF1ZXN0ICovCisJc3RydWN0IHN2Y19ycXN0ICpyZF9ycXN0cDsgICAgICAgICAgLyogcmVzcG9uc2UgKi8KKwlzdHJ1Y3Qgc3ZjX2ZoICogcmRfZmhwOyAgICAgICAgICAgICAvKiByZXNwb25zZSAqLworCisJc3RydWN0IHJlYWRkaXJfY2QJY29tbW9uOworCXUzMiAqCQkJYnVmZmVyOworCWludAkJCWJ1ZmxlbjsKKwl1MzIgKgkJCW9mZnNldDsKK307CisKK3N0cnVjdCBuZnNkNF9yZWxlYXNlX2xvY2tvd25lciB7CisJY2xpZW50aWRfdCAgICAgICAgcmxfY2xpZW50aWQ7CisJc3RydWN0IHhkcl9uZXRvYmogcmxfb3duZXI7Cit9Oworc3RydWN0IG5mc2Q0X3JlYWRsaW5rIHsKKwlzdHJ1Y3Qgc3ZjX3Jxc3QgKnJsX3Jxc3RwOyAgICAgICAgICAvKiByZXF1ZXN0ICovCisJc3RydWN0IHN2Y19maCAqCXJsX2ZocDsgICAgICAgICAgICAgLyogcmVxdWVzdCAqLworfTsKKworc3RydWN0IG5mc2Q0X3JlbW92ZSB7CisJdTMyCQlybV9uYW1lbGVuOyAgICAgICAgIC8qIHJlcXVlc3QgKi8KKwljaGFyICoJCXJtX25hbWU7ICAgICAgICAgICAgLyogcmVxdWVzdCAqLworCXN0cnVjdCBuZnNkNF9jaGFuZ2VfaW5mbyAgcm1fY2luZm87IC8qIHJlc3BvbnNlICovCit9OworCitzdHJ1Y3QgbmZzZDRfcmVuYW1lIHsKKwl1MzIJCXJuX3NuYW1lbGVuOyAgICAgICAgLyogcmVxdWVzdCAqLworCWNoYXIgKgkJcm5fc25hbWU7ICAgICAgICAgICAvKiByZXF1ZXN0ICovCisJdTMyCQlybl90bmFtZWxlbjsgICAgICAgIC8qIHJlcXVlc3QgKi8KKwljaGFyICoJCXJuX3RuYW1lOyAgICAgICAgICAgLyogcmVxdWVzdCAqLworCXN0cnVjdCBuZnNkNF9jaGFuZ2VfaW5mbyAgcm5fc2luZm87IC8qIHJlc3BvbnNlICovCisJc3RydWN0IG5mc2Q0X2NoYW5nZV9pbmZvICBybl90aW5mbzsgLyogcmVzcG9uc2UgKi8KK307CisKK3N0cnVjdCBuZnNkNF9zZXRhdHRyIHsKKwlzdGF0ZWlkX3QJc2Ffc3RhdGVpZDsgICAgICAgICAvKiByZXF1ZXN0ICovCisJdTMyCQlzYV9ibXZhbFsyXTsgICAgICAgIC8qIHJlcXVlc3QgKi8KKwlzdHJ1Y3QgaWF0dHIJc2FfaWF0dHI7ICAgICAgICAgICAvKiByZXF1ZXN0ICovCisJc3RydWN0IG5mczRfYWNsICpzYV9hY2w7Cit9OworCitzdHJ1Y3QgbmZzZDRfc2V0Y2xpZW50aWQgeworCW5mczRfdmVyaWZpZXIJc2VfdmVyZjsgICAgICAgICAgICAvKiByZXF1ZXN0ICovCisJdTMyCQlzZV9uYW1lbGVuOyAgICAgICAgIC8qIHJlcXVlc3QgKi8KKwljaGFyICoJCXNlX25hbWU7ICAgICAgICAgICAgLyogcmVxdWVzdCAqLworCXUzMgkJc2VfY2FsbGJhY2tfcHJvZzsgICAvKiByZXF1ZXN0ICovCisJdTMyCQlzZV9jYWxsYmFja19uZXRpZF9sZW47ICAvKiByZXF1ZXN0ICovCisJY2hhciAqCQlzZV9jYWxsYmFja19uZXRpZF92YWw7ICAvKiByZXF1ZXN0ICovCisJdTMyCQlzZV9jYWxsYmFja19hZGRyX2xlbjsgICAvKiByZXF1ZXN0ICovCisJY2hhciAqCQlzZV9jYWxsYmFja19hZGRyX3ZhbDsgICAvKiByZXF1ZXN0ICovCisJdTMyCQlzZV9jYWxsYmFja19pZGVudDsgIC8qIHJlcXVlc3QgKi8KKwljbGllbnRpZF90CXNlX2NsaWVudGlkOyAgICAgICAgLyogcmVzcG9uc2UgKi8KKwluZnM0X3ZlcmlmaWVyCXNlX2NvbmZpcm07ICAgICAgICAgLyogcmVzcG9uc2UgKi8KK307CisKK3N0cnVjdCBuZnNkNF9zZXRjbGllbnRpZF9jb25maXJtIHsKKwljbGllbnRpZF90CXNjX2NsaWVudGlkOworCW5mczRfdmVyaWZpZXIJc2NfY29uZmlybTsKK307CisKKy8qIGFsc28gdXNlZCBmb3IgTlZFUklGWSAqLworc3RydWN0IG5mc2Q0X3ZlcmlmeSB7CisJdTMyCQl2ZV9ibXZhbFsyXTsgICAgICAgIC8qIHJlcXVlc3QgKi8KKwl1MzIJCXZlX2F0dHJsZW47ICAgICAgICAgLyogcmVxdWVzdCAqLworCWNoYXIgKgkJdmVfYXR0cnZhbDsgICAgICAgICAvKiByZXF1ZXN0ICovCit9OworCitzdHJ1Y3QgbmZzZDRfd3JpdGUgeworCXN0YXRlaWRfdAl3cl9zdGF0ZWlkOyAgICAgICAgIC8qIHJlcXVlc3QgKi8KKwl1NjQJCXdyX29mZnNldDsgICAgICAgICAgLyogcmVxdWVzdCAqLworCXUzMgkJd3Jfc3RhYmxlX2hvdzsgICAgICAvKiByZXF1ZXN0ICovCisJdTMyCQl3cl9idWZsZW47ICAgICAgICAgIC8qIHJlcXVlc3QgKi8KKwlzdHJ1Y3Qga3ZlYwl3cl92ZWNbUlBDU1ZDX01BWFBBR0VTXTsgLyogcmVxdWVzdCAqLworCWludAkJd3JfdmxlbjsKKworCXUzMgkJd3JfYnl0ZXNfd3JpdHRlbjsgICAvKiByZXNwb25zZSAqLworCXUzMgkJd3JfaG93X3dyaXR0ZW47ICAgICAvKiByZXNwb25zZSAqLworCW5mczRfdmVyaWZpZXIJd3JfdmVyaWZpZXI7ICAgICAgICAvKiByZXNwb25zZSAqLworfTsKKworc3RydWN0IG5mc2Q0X29wIHsKKwlpbnQJCQkJCW9wbnVtOworCWludAkJCQkJc3RhdHVzOworCXVuaW9uIHsKKwkJc3RydWN0IG5mc2Q0X2FjY2VzcwkJYWNjZXNzOworCQlzdHJ1Y3QgbmZzZDRfY2xvc2UJCWNsb3NlOworCQlzdHJ1Y3QgbmZzZDRfY29tbWl0CQljb21taXQ7CisJCXN0cnVjdCBuZnNkNF9jcmVhdGUJCWNyZWF0ZTsKKwkJc3RydWN0IG5mc2Q0X2RlbGVncmV0dXJuCWRlbGVncmV0dXJuOworCQlzdHJ1Y3QgbmZzZDRfZ2V0YXR0cgkJZ2V0YXR0cjsKKwkJc3RydWN0IHN2Y19maCAqCQkJZ2V0Zmg7CisJCXN0cnVjdCBuZnNkNF9saW5rCQlsaW5rOworCQlzdHJ1Y3QgbmZzZDRfbG9jawkJbG9jazsKKwkJc3RydWN0IG5mc2Q0X2xvY2t0CQlsb2NrdDsKKwkJc3RydWN0IG5mc2Q0X2xvY2t1CQlsb2NrdTsKKwkJc3RydWN0IG5mc2Q0X2xvb2t1cAkJbG9va3VwOworCQlzdHJ1Y3QgbmZzZDRfdmVyaWZ5CQludmVyaWZ5OworCQlzdHJ1Y3QgbmZzZDRfb3BlbgkJb3BlbjsKKwkJc3RydWN0IG5mc2Q0X29wZW5fY29uZmlybQlvcGVuX2NvbmZpcm07CisJCXN0cnVjdCBuZnNkNF9vcGVuX2Rvd25ncmFkZQlvcGVuX2Rvd25ncmFkZTsKKwkJc3RydWN0IG5mc2Q0X3B1dGZoCQlwdXRmaDsKKwkJc3RydWN0IG5mc2Q0X3JlYWQJCXJlYWQ7CisJCXN0cnVjdCBuZnNkNF9yZWFkZGlyCQlyZWFkZGlyOworCQlzdHJ1Y3QgbmZzZDRfcmVhZGxpbmsJCXJlYWRsaW5rOworCQlzdHJ1Y3QgbmZzZDRfcmVtb3ZlCQlyZW1vdmU7CisJCXN0cnVjdCBuZnNkNF9yZW5hbWUJCXJlbmFtZTsKKwkJY2xpZW50aWRfdAkJCXJlbmV3OworCQlzdHJ1Y3QgbmZzZDRfc2V0YXR0cgkJc2V0YXR0cjsKKwkJc3RydWN0IG5mc2Q0X3NldGNsaWVudGlkCXNldGNsaWVudGlkOworCQlzdHJ1Y3QgbmZzZDRfc2V0Y2xpZW50aWRfY29uZmlybSBzZXRjbGllbnRpZF9jb25maXJtOworCQlzdHJ1Y3QgbmZzZDRfdmVyaWZ5CQl2ZXJpZnk7CisJCXN0cnVjdCBuZnNkNF93cml0ZQkJd3JpdGU7CisJCXN0cnVjdCBuZnNkNF9yZWxlYXNlX2xvY2tvd25lcglyZWxlYXNlX2xvY2tvd25lcjsKKwl9IHU7CisJc3RydWN0IG5mczRfcmVwbGF5ICoJCQlyZXBsYXk7Cit9OworCitzdHJ1Y3QgbmZzZDRfY29tcG91bmRhcmdzIHsKKwkvKiBzY3JhdGNoIHZhcmlhYmxlcyBmb3IgWERSIGRlY29kZSAqLworCXUzMiAqCQkJCXA7CisJdTMyICoJCQkJZW5kOworCXN0cnVjdCBwYWdlICoqCQkJcGFnZWxpc3Q7CisJaW50CQkJCXBhZ2VsZW47CisJdTMyCQkJCXRtcFs4XTsKKwl1MzIgKgkJCQl0bXBwOworCXN0cnVjdCB0bXBidWYgeworCQlzdHJ1Y3QgdG1wYnVmICpuZXh0OworCQl2b2lkICgqcmVsZWFzZSkoY29uc3Qgdm9pZCAqKTsKKwkJdm9pZCAqYnVmOworCX0JCQkJKnRvX2ZyZWU7CisKKwlzdHJ1Y3Qgc3ZjX3Jxc3QJCQkqcnFzdHA7CisKKwl1MzIJCQkJdGFnbGVuOworCWNoYXIgKgkJCQl0YWc7CisJdTMyCQkJCW1pbm9ydmVyc2lvbjsKKwl1MzIJCQkJb3BjbnQ7CisJc3RydWN0IG5mc2Q0X29wCQkJKm9wczsKKwlzdHJ1Y3QgbmZzZDRfb3AJCQlpb3BzWzhdOworfTsKKworc3RydWN0IG5mc2Q0X2NvbXBvdW5kcmVzIHsKKwkvKiBzY3JhdGNoIHZhcmlhYmxlcyBmb3IgWERSIGVuY29kZSAqLworCXUzMiAqCQkJCXA7CisJdTMyICoJCQkJZW5kOworCXN0cnVjdCB4ZHJfYnVmICoJCXhidWY7CisJc3RydWN0IHN2Y19ycXN0ICoJCXJxc3RwOworCisJdTMyCQkJCXRhZ2xlbjsKKwljaGFyICoJCQkJdGFnOworCXUzMgkJCQlvcGNudDsKKwl1MzIgKgkJCQl0YWdwOyAvKiB3aGVyZSB0byBlbmNvZGUgdGFnIGFuZCAgb3Bjb3VudCAqLworfTsKKworI2RlZmluZSBORlM0X1NWQ19YRFJTSVpFCQlzaXplb2Yoc3RydWN0IG5mc2Q0X2NvbXBvdW5kYXJncykKKworc3RhdGljIGlubGluZSB2b2lkCitzZXRfY2hhbmdlX2luZm8oc3RydWN0IG5mc2Q0X2NoYW5nZV9pbmZvICpjaW5mbywgc3RydWN0IHN2Y19maCAqZmhwKQoreworCUJVR19PTighZmhwLT5maF9wcmVfc2F2ZWQgfHwgIWZocC0+ZmhfcG9zdF9zYXZlZCk7CisJY2luZm8tPmF0b21pYyA9IDE7CisJY2luZm8tPmJlZm9yZV9jdGltZV9zZWMgPSBmaHAtPmZoX3ByZV9jdGltZS50dl9zZWM7CisJY2luZm8tPmJlZm9yZV9jdGltZV9uc2VjID0gZmhwLT5maF9wcmVfY3RpbWUudHZfbnNlYzsKKwljaW5mby0+YWZ0ZXJfY3RpbWVfc2VjID0gZmhwLT5maF9wb3N0X2N0aW1lLnR2X3NlYzsKKwljaW5mby0+YWZ0ZXJfY3RpbWVfbnNlYyA9IGZocC0+ZmhfcG9zdF9jdGltZS50dl9uc2VjOworfQorCitpbnQgbmZzNHN2Y19lbmNvZGVfdm9pZHJlcyhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgdTMyICosIHZvaWQgKik7CitpbnQgbmZzNHN2Y19kZWNvZGVfY29tcG91bmRhcmdzKHN0cnVjdCBzdmNfcnFzdCAqLCB1MzIgKiwgCisJCXN0cnVjdCBuZnNkNF9jb21wb3VuZGFyZ3MgKik7CitpbnQgbmZzNHN2Y19lbmNvZGVfY29tcG91bmRyZXMoc3RydWN0IHN2Y19ycXN0ICosIHUzMiAqLCAKKwkJc3RydWN0IG5mc2Q0X2NvbXBvdW5kcmVzICopOwordm9pZCBuZnNkNF9lbmNvZGVfb3BlcmF0aW9uKHN0cnVjdCBuZnNkNF9jb21wb3VuZHJlcyAqLCBzdHJ1Y3QgbmZzZDRfb3AgKik7Cit2b2lkIG5mc2Q0X2VuY29kZV9yZXBsYXkoc3RydWN0IG5mc2Q0X2NvbXBvdW5kcmVzICpyZXNwLCBzdHJ1Y3QgbmZzZDRfb3AgKm9wKTsKK2ludCBuZnNkNF9lbmNvZGVfZmF0dHIoc3RydWN0IHN2Y19maCAqZmhwLCBzdHJ1Y3Qgc3ZjX2V4cG9ydCAqZXhwLAorCQkgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1MzIgKmJ1ZmZlciwgaW50ICpjb3VudHAsIAorCQkgICAgICAgdTMyICpibXZhbCwgc3RydWN0IHN2Y19ycXN0ICopOworZXh0ZXJuIGludCBuZnNkNF9zZXRjbGllbnRpZChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCAKKwkJc3RydWN0IG5mc2Q0X3NldGNsaWVudGlkICpzZXRjbGlkKTsKK2V4dGVybiBpbnQgbmZzZDRfc2V0Y2xpZW50aWRfY29uZmlybShzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCAKKwkJc3RydWN0IG5mc2Q0X3NldGNsaWVudGlkX2NvbmZpcm0gKnNldGNsaWVudGlkX2NvbmZpcm0pOworZXh0ZXJuIGludCBuZnNkNF9wcm9jZXNzX29wZW4xKHN0cnVjdCBuZnNkNF9vcGVuICpvcGVuKTsKK2V4dGVybiBpbnQgbmZzZDRfcHJvY2Vzc19vcGVuMihzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCAKKwkJc3RydWN0IHN2Y19maCAqY3VycmVudF9maCwgc3RydWN0IG5mc2Q0X29wZW4gKm9wZW4pOworZXh0ZXJuIGludCBuZnNkNF9vcGVuX2NvbmZpcm0oc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgCisJCXN0cnVjdCBzdmNfZmggKmN1cnJlbnRfZmgsIHN0cnVjdCBuZnNkNF9vcGVuX2NvbmZpcm0gKm9jKTsKK2V4dGVybiAgaW50IG5mc2Q0X2Nsb3NlKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBzdmNfZmggKmN1cnJlbnRfZmgsIAorCQlzdHJ1Y3QgbmZzZDRfY2xvc2UgKmNsb3NlKTsKK2V4dGVybiBpbnQgbmZzZDRfb3Blbl9kb3duZ3JhZGUoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgCisJCXN0cnVjdCBzdmNfZmggKmN1cnJlbnRfZmgsIHN0cnVjdCBuZnNkNF9vcGVuX2Rvd25ncmFkZSAqb2QpOworZXh0ZXJuIGludCBuZnNkNF9sb2NrKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBzdmNfZmggKmN1cnJlbnRfZmgsIAorCQlzdHJ1Y3QgbmZzZDRfbG9jayAqbG9jayk7CitleHRlcm4gaW50IG5mc2Q0X2xvY2t0KHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBzdmNfZmggKmN1cnJlbnRfZmgsIAorCQlzdHJ1Y3QgbmZzZDRfbG9ja3QgKmxvY2t0KTsKK2V4dGVybiBpbnQgbmZzZDRfbG9ja3Uoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y19maCAqY3VycmVudF9maCwgCisJCXN0cnVjdCBuZnNkNF9sb2NrdSAqbG9ja3UpOworZXh0ZXJuIGludAorbmZzZDRfcmVsZWFzZV9sb2Nrb3duZXIoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwKKwkJc3RydWN0IG5mc2Q0X3JlbGVhc2VfbG9ja293bmVyICpybG9ja293bmVyKTsKK2V4dGVybiB2b2lkIG5mc2Q0X3JlbGVhc2VfY29tcG91bmRhcmdzKHN0cnVjdCBuZnNkNF9jb21wb3VuZGFyZ3MgKik7CitleHRlcm4gaW50IG5mc2Q0X2RlbGVncmV0dXJuKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsCisJCXN0cnVjdCBzdmNfZmggKmN1cnJlbnRfZmgsIHN0cnVjdCBuZnNkNF9kZWxlZ3JldHVybiAqZHIpOworI2VuZGlmCisKKy8qCisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiAgYy1iYXNpYy1vZmZzZXQ6IDgKKyAqIEVuZDoKKyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZnNkX2lkbWFwLmggYi9pbmNsdWRlL2xpbnV4L25mc2RfaWRtYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmI3ZjMwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZnNkX2lkbWFwLmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqICBpbmNsdWRlL2xpbnV4L25mc2RfaWRtYXAuaAorICoKKyAqICBNYXBwaW5nIG9mIFVJRCB0byBuYW1lIGFuZCB2aWNlIHZlcnNhLgorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDMgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YKKyAqICBNaWNoaWdhbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCis+ICoKKyAqICBNYXJpdXMgQWFtb2R0IEVyaWtzZW4gPG1hcml1c0B1bWljaC5lZHU+CisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogIGFyZSBtZXQ6CisgKgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKyAqICBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiAgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCisgKiAgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorICogIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgKiAgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBMSU5VWF9ORlNEX0lETUFQX0gKKyNkZWZpbmUgTElOVVhfTkZTRF9JRE1BUF9ICisKKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9zdmMuaD4KKworLyogWFhYIGZyb20gbGludXgvbmZzX2lkbWFwLmggKi8KKyNkZWZpbmUgSURNQVBfTkFNRVNaIDEyOAorCit2b2lkIG5mc2RfaWRtYXBfaW5pdCh2b2lkKTsKK3ZvaWQgbmZzZF9pZG1hcF9zaHV0ZG93bih2b2lkKTsKKworaW50IG5mc2RfbWFwX25hbWVfdG9fdWlkKHN0cnVjdCBzdmNfcnFzdCAqLCBjb25zdCBjaGFyICosIHNpemVfdCwgX191MzIgKik7CitpbnQgbmZzZF9tYXBfbmFtZV90b19naWQoc3RydWN0IHN2Y19ycXN0ICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90LCBfX3UzMiAqKTsKK2ludCBuZnNkX21hcF91aWRfdG9fbmFtZShzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgX191MzIsIGNoYXIgKik7CitpbnQgbmZzZF9tYXBfZ2lkX3RvX25hbWUoc3RydWN0IHN2Y19ycXN0ICosIF9fdTMyLCBjaGFyICopOworCisjZW5kaWYgLyogTElOVVhfTkZTRF9JRE1BUF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25scy5oIGIvaW5jbHVkZS9saW51eC9ubHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTZjMDRhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9ubHMuaApAQCAtMCwwICsxLDY0IEBACisjaWZuZGVmIF9MSU5VWF9OTFNfSAorI2RlZmluZSBfTElOVVhfTkxTX0gKKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworLyogdW5pY29kZSBjaGFyYWN0ZXIgKi8KK3R5cGVkZWYgX191MTYgd2NoYXJfdDsKKworc3RydWN0IG5sc190YWJsZSB7CisJY2hhciAqY2hhcnNldDsKKwljaGFyICphbGlhczsKKwlpbnQgKCp1bmkyY2hhcikgKHdjaGFyX3QgdW5pLCB1bnNpZ25lZCBjaGFyICpvdXQsIGludCBib3VuZGxlbik7CisJaW50ICgqY2hhcjJ1bmkpIChjb25zdCB1bnNpZ25lZCBjaGFyICpyYXdzdHJpbmcsIGludCBib3VuZGxlbiwKKwkJCSB3Y2hhcl90ICp1bmkpOworCXVuc2lnbmVkIGNoYXIgKmNoYXJzZXQybG93ZXI7CisJdW5zaWduZWQgY2hhciAqY2hhcnNldDJ1cHBlcjsKKwlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKKwlzdHJ1Y3QgbmxzX3RhYmxlICpuZXh0OworfTsKKworLyogdGhpcyB2YWx1ZSBob2xkIHRoZSBtYXhpbXVtIG9jdGV0IG9mIGNoYXJzZXQgKi8KKyNkZWZpbmUgTkxTX01BWF9DSEFSU0VUX1NJWkUgNiAvKiBmb3IgVVRGLTggKi8KKworLyogbmxzLmMgKi8KK2V4dGVybiBpbnQgcmVnaXN0ZXJfbmxzKHN0cnVjdCBubHNfdGFibGUgKik7CitleHRlcm4gaW50IHVucmVnaXN0ZXJfbmxzKHN0cnVjdCBubHNfdGFibGUgKik7CitleHRlcm4gc3RydWN0IG5sc190YWJsZSAqbG9hZF9ubHMoY2hhciAqKTsKK2V4dGVybiB2b2lkIHVubG9hZF9ubHMoc3RydWN0IG5sc190YWJsZSAqKTsKK2V4dGVybiBzdHJ1Y3QgbmxzX3RhYmxlICpsb2FkX25sc19kZWZhdWx0KHZvaWQpOworCitleHRlcm4gaW50IHV0ZjhfbWJ0b3djKHdjaGFyX3QgKiwgY29uc3QgX191OCAqLCBpbnQpOworZXh0ZXJuIGludCB1dGY4X21ic3Rvd2NzKHdjaGFyX3QgKiwgY29uc3QgX191OCAqLCBpbnQpOworZXh0ZXJuIGludCB1dGY4X3djdG9tYihfX3U4ICosIHdjaGFyX3QsIGludCk7CitleHRlcm4gaW50IHV0Zjhfd2NzdG9tYnMoX191OCAqLCBjb25zdCB3Y2hhcl90ICosIGludCk7CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciBubHNfdG9sb3dlcihzdHJ1Y3QgbmxzX3RhYmxlICp0LCB1bnNpZ25lZCBjaGFyIGMpCit7CisJdW5zaWduZWQgY2hhciBuYyA9IHQtPmNoYXJzZXQybG93ZXJbY107CisKKwlyZXR1cm4gbmMgPyBuYyA6IGM7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciBubHNfdG91cHBlcihzdHJ1Y3QgbmxzX3RhYmxlICp0LCB1bnNpZ25lZCBjaGFyIGMpCit7CisJdW5zaWduZWQgY2hhciBuYyA9IHQtPmNoYXJzZXQydXBwZXJbY107CisKKwlyZXR1cm4gbmMgPyBuYyA6IGM7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG5sc19zdHJuaWNtcChzdHJ1Y3QgbmxzX3RhYmxlICp0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpzMSwKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqczIsIGludCBsZW4pCit7CisJd2hpbGUgKGxlbi0tKSB7CisJCWlmIChubHNfdG9sb3dlcih0LCAqczErKykgIT0gbmxzX3RvbG93ZXIodCwgKnMyKyspKQorCQkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgTU9EVUxFX0FMSUFTX05MUyhuYW1lKQlNT0RVTEVfQUxJQVMoIm5sc18iIF9fc3RyaW5naWZ5KG5hbWUpKQorCisjZW5kaWYgLyogX0xJTlVYX05MU19IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbm1pLmggYi9pbmNsdWRlL2xpbnV4L25taS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4ZjRkMmYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L25taS5oCkBAIC0wLDAgKzEsMjIgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9saW51eC9ubWkuaAorICovCisjaWZuZGVmIExJTlVYX05NSV9ICisjZGVmaW5lIExJTlVYX05NSV9ICisKKyNpbmNsdWRlIDxhc20vaXJxLmg+CisKKy8qKgorICogdG91Y2hfbm1pX3dhdGNoZG9nIC0gcmVzdGFydCBOTUkgd2F0Y2hkb2cgdGltZW91dC4KKyAqIAorICogSWYgdGhlIGFyY2hpdGVjdHVyZSBzdXBwb3J0cyB0aGUgTk1JIHdhdGNoZG9nLCB0b3VjaF9ubWlfd2F0Y2hkb2coKQorICogbWF5IGJlIHVzZWQgdG8gcmVzZXQgdGhlIHRpbWVvdXQgLSBmb3IgY29kZSB3aGljaCBpbnRlbnRpb25hbGx5CisgKiBkaXNhYmxlcyBpbnRlcnJ1cHRzIGZvciBhIGxvbmcgdGltZS4gVGhpcyBjYWxsIGlzIHN0YXRlbGVzcy4KKyAqLworI2lmZGVmIEFSQ0hfSEFTX05NSV9XQVRDSERPRworZXh0ZXJuIHZvaWQgdG91Y2hfbm1pX3dhdGNoZG9nKHZvaWQpOworI2Vsc2UKKyMgZGVmaW5lIHRvdWNoX25taV93YXRjaGRvZygpIGRvIHsgfSB3aGlsZSgwKQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ub2RlLmggYi9pbmNsdWRlL2xpbnV4L25vZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTBhNjk3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9ub2RlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIGluY2x1ZGUvbGludXgvbm9kZS5oIC0gZ2VuZXJpYyBub2RlIGRlZmluaXRpb24KKyAqCisgKiBUaGlzIGlzIG1haW5seSBmb3IgdG9wb2xvZ2ljYWwgcmVwcmVzZW50YXRpb24uIFdlIGRlZmluZSB0aGUgCisgKiBiYXNpYyAnc3RydWN0IG5vZGUnIGhlcmUsIHdoaWNoIGNhbiBiZSBlbWJlZGRlZCBpbiBwZXItYXJjaCAKKyAqIGRlZmluaXRpb25zIG9mIHByb2Nlc3NvcnMuCisgKgorICogQmFzaWMgaGFuZGxpbmcgb2YgdGhlIGRldmljZXMgaXMgZG9uZSBpbiBkcml2ZXJzL2Jhc2Uvbm9kZS5jCisgKiBhbmQgc3lzdGVtIGRldmljZXMgYXJlIGhhbmRsZWQgaW4gZHJpdmVycy9iYXNlL3N5cy5jLiAKKyAqCisgKiBOb2RlcyBhcmUgZXhwb3J0ZWQgdmlhIGRyaXZlcmZzIGluIHRoZSBjbGFzcy9ub2RlL2RldmljZXMvCisgKiBkaXJlY3RvcnkuIAorICoKKyAqIFBlci1ub2RlIGludGVyZmFjZXMgY2FuIGJlIGltcGxlbWVudGVkIHVzaW5nIGEgc3RydWN0IGRldmljZV9pbnRlcmZhY2UuIAorICogU2VlIHRoZSBmb2xsb3dpbmcgZm9yIGhvdyB0byBkbyB0aGlzOiAKKyAqIC0gZHJpdmVycy9iYXNlL2ludGYuYyAKKyAqIC0gRG9jdW1lbnRhdGlvbi9kcml2ZXItbW9kZWwvaW50ZXJmYWNlLnR4dAorICovCisjaWZuZGVmIF9MSU5VWF9OT0RFX0hfCisjZGVmaW5lIF9MSU5VWF9OT0RFX0hfCisKKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CisKK3N0cnVjdCBub2RlIHsKKwlzdHJ1Y3Qgc3lzX2RldmljZQlzeXNkZXY7Cit9OworCitleHRlcm4gaW50IHJlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKiwgaW50LCBzdHJ1Y3Qgbm9kZSAqKTsKKworI2RlZmluZSB0b19ub2RlKHN5c19kZXZpY2UpIGNvbnRhaW5lcl9vZihzeXNfZGV2aWNlLCBzdHJ1Y3Qgbm9kZSwgc3lzZGV2KQorCisjZW5kaWYgLyogX0xJTlVYX05PREVfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbm9kZW1hc2suaCBiL2luY2x1ZGUvbGludXgvbm9kZW1hc2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTZmZTkwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9ub2RlbWFzay5oCkBAIC0wLDAgKzEsMzU2IEBACisjaWZuZGVmIF9fTElOVVhfTk9ERU1BU0tfSAorI2RlZmluZSBfX0xJTlVYX05PREVNQVNLX0gKKworLyoKKyAqIE5vZGVtYXNrcyBwcm92aWRlIGEgYml0bWFwIHN1aXRhYmxlIGZvciByZXByZXNlbnRpbmcgdGhlCisgKiBzZXQgb2YgTm9kZSdzIGluIGEgc3lzdGVtLCBvbmUgYml0IHBvc2l0aW9uIHBlciBOb2RlIG51bWJlci4KKyAqCisgKiBTZWUgZGV0YWlsZWQgY29tbWVudHMgaW4gdGhlIGZpbGUgbGludXgvYml0bWFwLmggZGVzY3JpYmluZyB0aGUKKyAqIGRhdGEgdHlwZSBvbiB3aGljaCB0aGVzZSBub2RlbWFza3MgYXJlIGJhc2VkLgorICoKKyAqIEZvciBkZXRhaWxzIG9mIG5vZGVtYXNrX3NjbnByaW50ZigpIGFuZCBub2RlbWFza19wYXJzZSgpLAorICogc2VlIGJpdG1hcF9zY25wcmludGYoKSBhbmQgYml0bWFwX3BhcnNlKCkgaW4gbGliL2JpdG1hcC5jLgorICogRm9yIGRldGFpbHMgb2Ygbm9kZWxpc3Rfc2NucHJpbnRmKCkgYW5kIG5vZGVsaXN0X3BhcnNlKCksIHNlZQorICogYml0bWFwX3Njbmxpc3RwcmludGYoKSBhbmQgYml0bWFwX3BhcnNlbGlzdCgpLCBhbHNvIGluIGJpdG1hcC5jLgorICoKKyAqIFRoZSBhdmFpbGFibGUgbm9kZW1hc2sgb3BlcmF0aW9ucyBhcmU6CisgKgorICogdm9pZCBub2RlX3NldChub2RlLCBtYXNrKQkJdHVybiBvbiBiaXQgJ25vZGUnIGluIG1hc2sKKyAqIHZvaWQgbm9kZV9jbGVhcihub2RlLCBtYXNrKQkJdHVybiBvZmYgYml0ICdub2RlJyBpbiBtYXNrCisgKiB2b2lkIG5vZGVzX3NldGFsbChtYXNrKQkJc2V0IGFsbCBiaXRzCisgKiB2b2lkIG5vZGVzX2NsZWFyKG1hc2spCQljbGVhciBhbGwgYml0cworICogaW50IG5vZGVfaXNzZXQobm9kZSwgbWFzaykJCXRydWUgaWZmIGJpdCAnbm9kZScgc2V0IGluIG1hc2sKKyAqIGludCBub2RlX3Rlc3RfYW5kX3NldChub2RlLCBtYXNrKQl0ZXN0IGFuZCBzZXQgYml0ICdub2RlJyBpbiBtYXNrCisgKgorICogdm9pZCBub2Rlc19hbmQoZHN0LCBzcmMxLCBzcmMyKQlkc3QgPSBzcmMxICYgc3JjMiAgW2ludGVyc2VjdGlvbl0KKyAqIHZvaWQgbm9kZXNfb3IoZHN0LCBzcmMxLCBzcmMyKQlkc3QgPSBzcmMxIHwgc3JjMiAgW3VuaW9uXQorICogdm9pZCBub2Rlc194b3IoZHN0LCBzcmMxLCBzcmMyKQlkc3QgPSBzcmMxIF4gc3JjMgorICogdm9pZCBub2Rlc19hbmRub3QoZHN0LCBzcmMxLCBzcmMyKQlkc3QgPSBzcmMxICYgfnNyYzIKKyAqIHZvaWQgbm9kZXNfY29tcGxlbWVudChkc3QsIHNyYykJZHN0ID0gfnNyYworICoKKyAqIGludCBub2Rlc19lcXVhbChtYXNrMSwgbWFzazIpCURvZXMgbWFzazEgPT0gbWFzazI/CisgKiBpbnQgbm9kZXNfaW50ZXJzZWN0cyhtYXNrMSwgbWFzazIpCURvIG1hc2sxIGFuZCBtYXNrMiBpbnRlcnNlY3Q/CisgKiBpbnQgbm9kZXNfc3Vic2V0KG1hc2sxLCBtYXNrMikJSXMgbWFzazEgYSBzdWJzZXQgb2YgbWFzazI/CisgKiBpbnQgbm9kZXNfZW1wdHkobWFzaykJCUlzIG1hc2sgZW1wdHkgKG5vIGJpdHMgc2V0cyk/CisgKiBpbnQgbm9kZXNfZnVsbChtYXNrKQkJCUlzIG1hc2sgZnVsbCAoYWxsIGJpdHMgc2V0cyk/CisgKiBpbnQgbm9kZXNfd2VpZ2h0KG1hc2spCQlIYW1taW5nIHdlaWdodCAtIG51bWJlciBvZiBzZXQgYml0cworICoKKyAqIHZvaWQgbm9kZXNfc2hpZnRfcmlnaHQoZHN0LCBzcmMsIG4pCVNoaWZ0IHJpZ2h0CisgKiB2b2lkIG5vZGVzX3NoaWZ0X2xlZnQoZHN0LCBzcmMsIG4pCVNoaWZ0IGxlZnQKKyAqCisgKiBpbnQgZmlyc3Rfbm9kZShtYXNrKQkJCU51bWJlciBsb3dlc3Qgc2V0IGJpdCwgb3IgTUFYX05VTU5PREVTCisgKiBpbnQgbmV4dF9ub2RlKG5vZGUsIG1hc2spCQlOZXh0IG5vZGUgcGFzdCAnbm9kZScsIG9yIE1BWF9OVU1OT0RFUworICogaW50IGZpcnN0X3Vuc2V0X25vZGUobWFzaykJCUZpcnN0IG5vZGUgbm90IHNldCBpbiBtYXNrLCBvciAKKyAqCQkJCQlNQVhfTlVNTk9ERVMuCisgKgorICogbm9kZW1hc2tfdCBub2RlbWFza19vZl9ub2RlKG5vZGUpCVJldHVybiBub2RlbWFzayB3aXRoIGJpdCAnbm9kZScgc2V0CisgKiBOT0RFX01BU0tfQUxMCQkJSW5pdGlhbGl6ZXIgLSBhbGwgYml0cyBzZXQKKyAqIE5PREVfTUFTS19OT05FCQkJSW5pdGlhbGl6ZXIgLSBubyBiaXRzIHNldAorICogdW5zaWduZWQgbG9uZyAqbm9kZXNfYWRkcihtYXNrKQlBcnJheSBvZiB1bnNpZ25lZCBsb25nJ3MgaW4gbWFzaworICoKKyAqIGludCBub2RlbWFza19zY25wcmludGYoYnVmLCBsZW4sIG1hc2spIEZvcm1hdCBub2RlbWFzayBmb3IgcHJpbnRpbmcKKyAqIGludCBub2RlbWFza19wYXJzZSh1YnVmLCB1bGVuLCBtYXNrKQlQYXJzZSBhc2NpaSBzdHJpbmcgYXMgbm9kZW1hc2sKKyAqIGludCBub2RlbGlzdF9zY25wcmludGYoYnVmLCBsZW4sIG1hc2spIEZvcm1hdCBub2RlbWFzayBhcyBsaXN0IGZvciBwcmludGluZworICogaW50IG5vZGVsaXN0X3BhcnNlKGJ1ZiwgbWFwKQkJUGFyc2UgYXNjaWkgc3RyaW5nIGFzIG5vZGVsaXN0CisgKgorICogZm9yX2VhY2hfbm9kZV9tYXNrKG5vZGUsIG1hc2spCWZvci1sb29wIG5vZGUgb3ZlciBtYXNrCisgKgorICogaW50IG51bV9vbmxpbmVfbm9kZXMoKQkJTnVtYmVyIG9mIG9ubGluZSBOb2RlcworICogaW50IG51bV9wb3NzaWJsZV9ub2RlcygpCQlOdW1iZXIgb2YgYWxsIHBvc3NpYmxlIE5vZGVzCisgKgorICogaW50IG5vZGVfb25saW5lKG5vZGUpCQlJcyBzb21lIG5vZGUgb25saW5lPworICogaW50IG5vZGVfcG9zc2libGUobm9kZSkJCUlzIHNvbWUgbm9kZSBwb3NzaWJsZT8KKyAqCisgKiBpbnQgYW55X29ubGluZV9ub2RlKG1hc2spCQlGaXJzdCBvbmxpbmUgbm9kZSBpbiBtYXNrCisgKgorICogbm9kZV9zZXRfb25saW5lKG5vZGUpCQlzZXQgYml0ICdub2RlJyBpbiBub2RlX29ubGluZV9tYXAKKyAqIG5vZGVfc2V0X29mZmxpbmUobm9kZSkJCWNsZWFyIGJpdCAnbm9kZScgaW4gbm9kZV9vbmxpbmVfbWFwCisgKgorICogZm9yX2VhY2hfbm9kZShub2RlKQkJCWZvci1sb29wIG5vZGUgb3ZlciBub2RlX3Bvc3NpYmxlX21hcAorICogZm9yX2VhY2hfb25saW5lX25vZGUobm9kZSkJCWZvci1sb29wIG5vZGUgb3ZlciBub2RlX29ubGluZV9tYXAKKyAqCisgKiBTdWJ0bGV0eToKKyAqIDEpIFRoZSAndHlwZS1jaGVja2VkJyBmb3JtIG9mIG5vZGVfaXNzZXQoKSBjYXVzZXMgZ2NjICgzLjMuMiwgYW55d2F5KQorICogICAgdG8gZ2VuZXJhdGUgc2xpZ2h0bHkgd29yc2UgY29kZS4gIFNvIHVzZSBhIHNpbXBsZSBvbmUtbGluZSAjZGVmaW5lCisgKiAgICBmb3Igbm9kZV9pc3NldCgpLCBpbnN0ZWFkIG9mIHdyYXBwaW5nIGFuIGlubGluZSBpbnNpZGUgYSBtYWNybywgdGhlCisgKiAgICB3YXkgd2UgZG8gdGhlIG90aGVyIGNhbGxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisjaW5jbHVkZSA8bGludXgvYml0bWFwLmg+CisjaW5jbHVkZSA8bGludXgvbnVtYS5oPgorI2luY2x1ZGUgPGFzbS9idWcuaD4KKwordHlwZWRlZiBzdHJ1Y3QgeyBERUNMQVJFX0JJVE1BUChiaXRzLCBNQVhfTlVNTk9ERVMpOyB9IG5vZGVtYXNrX3Q7CitleHRlcm4gbm9kZW1hc2tfdCBfdW51c2VkX25vZGVtYXNrX2FyZ187CisKKyNkZWZpbmUgbm9kZV9zZXQobm9kZSwgZHN0KSBfX25vZGVfc2V0KChub2RlKSwgJihkc3QpKQorc3RhdGljIGlubGluZSB2b2lkIF9fbm9kZV9zZXQoaW50IG5vZGUsIHZvbGF0aWxlIG5vZGVtYXNrX3QgKmRzdHApCit7CisJc2V0X2JpdChub2RlLCBkc3RwLT5iaXRzKTsKK30KKworI2RlZmluZSBub2RlX2NsZWFyKG5vZGUsIGRzdCkgX19ub2RlX2NsZWFyKChub2RlKSwgJihkc3QpKQorc3RhdGljIGlubGluZSB2b2lkIF9fbm9kZV9jbGVhcihpbnQgbm9kZSwgdm9sYXRpbGUgbm9kZW1hc2tfdCAqZHN0cCkKK3sKKwljbGVhcl9iaXQobm9kZSwgZHN0cC0+Yml0cyk7Cit9CisKKyNkZWZpbmUgbm9kZXNfc2V0YWxsKGRzdCkgX19ub2Rlc19zZXRhbGwoJihkc3QpLCBNQVhfTlVNTk9ERVMpCitzdGF0aWMgaW5saW5lIHZvaWQgX19ub2Rlc19zZXRhbGwobm9kZW1hc2tfdCAqZHN0cCwgaW50IG5iaXRzKQoreworCWJpdG1hcF9maWxsKGRzdHAtPmJpdHMsIG5iaXRzKTsKK30KKworI2RlZmluZSBub2Rlc19jbGVhcihkc3QpIF9fbm9kZXNfY2xlYXIoJihkc3QpLCBNQVhfTlVNTk9ERVMpCitzdGF0aWMgaW5saW5lIHZvaWQgX19ub2Rlc19jbGVhcihub2RlbWFza190ICpkc3RwLCBpbnQgbmJpdHMpCit7CisJYml0bWFwX3plcm8oZHN0cC0+Yml0cywgbmJpdHMpOworfQorCisvKiBObyBzdGF0aWMgaW5saW5lIHR5cGUgY2hlY2tpbmcgLSBzZWUgU3VidGxldHkgKDEpIGFib3ZlLiAqLworI2RlZmluZSBub2RlX2lzc2V0KG5vZGUsIG5vZGVtYXNrKSB0ZXN0X2JpdCgobm9kZSksIChub2RlbWFzaykuYml0cykKKworI2RlZmluZSBub2RlX3Rlc3RfYW5kX3NldChub2RlLCBub2RlbWFzaykgXAorCQkJX19ub2RlX3Rlc3RfYW5kX3NldCgobm9kZSksICYobm9kZW1hc2spKQorc3RhdGljIGlubGluZSBpbnQgX19ub2RlX3Rlc3RfYW5kX3NldChpbnQgbm9kZSwgbm9kZW1hc2tfdCAqYWRkcikKK3sKKwlyZXR1cm4gdGVzdF9hbmRfc2V0X2JpdChub2RlLCBhZGRyLT5iaXRzKTsKK30KKworI2RlZmluZSBub2Rlc19hbmQoZHN0LCBzcmMxLCBzcmMyKSBcCisJCQlfX25vZGVzX2FuZCgmKGRzdCksICYoc3JjMSksICYoc3JjMiksIE1BWF9OVU1OT0RFUykKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX25vZGVzX2FuZChub2RlbWFza190ICpkc3RwLCBjb25zdCBub2RlbWFza190ICpzcmMxcCwKKwkJCQkJY29uc3Qgbm9kZW1hc2tfdCAqc3JjMnAsIGludCBuYml0cykKK3sKKwliaXRtYXBfYW5kKGRzdHAtPmJpdHMsIHNyYzFwLT5iaXRzLCBzcmMycC0+Yml0cywgbmJpdHMpOworfQorCisjZGVmaW5lIG5vZGVzX29yKGRzdCwgc3JjMSwgc3JjMikgXAorCQkJX19ub2Rlc19vcigmKGRzdCksICYoc3JjMSksICYoc3JjMiksIE1BWF9OVU1OT0RFUykKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX25vZGVzX29yKG5vZGVtYXNrX3QgKmRzdHAsIGNvbnN0IG5vZGVtYXNrX3QgKnNyYzFwLAorCQkJCQljb25zdCBub2RlbWFza190ICpzcmMycCwgaW50IG5iaXRzKQoreworCWJpdG1hcF9vcihkc3RwLT5iaXRzLCBzcmMxcC0+Yml0cywgc3JjMnAtPmJpdHMsIG5iaXRzKTsKK30KKworI2RlZmluZSBub2Rlc194b3IoZHN0LCBzcmMxLCBzcmMyKSBcCisJCQlfX25vZGVzX3hvcigmKGRzdCksICYoc3JjMSksICYoc3JjMiksIE1BWF9OVU1OT0RFUykKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX25vZGVzX3hvcihub2RlbWFza190ICpkc3RwLCBjb25zdCBub2RlbWFza190ICpzcmMxcCwKKwkJCQkJY29uc3Qgbm9kZW1hc2tfdCAqc3JjMnAsIGludCBuYml0cykKK3sKKwliaXRtYXBfeG9yKGRzdHAtPmJpdHMsIHNyYzFwLT5iaXRzLCBzcmMycC0+Yml0cywgbmJpdHMpOworfQorCisjZGVmaW5lIG5vZGVzX2FuZG5vdChkc3QsIHNyYzEsIHNyYzIpIFwKKwkJCV9fbm9kZXNfYW5kbm90KCYoZHN0KSwgJihzcmMxKSwgJihzcmMyKSwgTUFYX05VTU5PREVTKQorc3RhdGljIGlubGluZSB2b2lkIF9fbm9kZXNfYW5kbm90KG5vZGVtYXNrX3QgKmRzdHAsIGNvbnN0IG5vZGVtYXNrX3QgKnNyYzFwLAorCQkJCQljb25zdCBub2RlbWFza190ICpzcmMycCwgaW50IG5iaXRzKQoreworCWJpdG1hcF9hbmRub3QoZHN0cC0+Yml0cywgc3JjMXAtPmJpdHMsIHNyYzJwLT5iaXRzLCBuYml0cyk7Cit9CisKKyNkZWZpbmUgbm9kZXNfY29tcGxlbWVudChkc3QsIHNyYykgXAorCQkJX19ub2Rlc19jb21wbGVtZW50KCYoZHN0KSwgJihzcmMpLCBNQVhfTlVNTk9ERVMpCitzdGF0aWMgaW5saW5lIHZvaWQgX19ub2Rlc19jb21wbGVtZW50KG5vZGVtYXNrX3QgKmRzdHAsCisJCQkJCWNvbnN0IG5vZGVtYXNrX3QgKnNyY3AsIGludCBuYml0cykKK3sKKwliaXRtYXBfY29tcGxlbWVudChkc3RwLT5iaXRzLCBzcmNwLT5iaXRzLCBuYml0cyk7Cit9CisKKyNkZWZpbmUgbm9kZXNfZXF1YWwoc3JjMSwgc3JjMikgXAorCQkJX19ub2Rlc19lcXVhbCgmKHNyYzEpLCAmKHNyYzIpLCBNQVhfTlVNTk9ERVMpCitzdGF0aWMgaW5saW5lIGludCBfX25vZGVzX2VxdWFsKGNvbnN0IG5vZGVtYXNrX3QgKnNyYzFwLAorCQkJCQljb25zdCBub2RlbWFza190ICpzcmMycCwgaW50IG5iaXRzKQoreworCXJldHVybiBiaXRtYXBfZXF1YWwoc3JjMXAtPmJpdHMsIHNyYzJwLT5iaXRzLCBuYml0cyk7Cit9CisKKyNkZWZpbmUgbm9kZXNfaW50ZXJzZWN0cyhzcmMxLCBzcmMyKSBcCisJCQlfX25vZGVzX2ludGVyc2VjdHMoJihzcmMxKSwgJihzcmMyKSwgTUFYX05VTU5PREVTKQorc3RhdGljIGlubGluZSBpbnQgX19ub2Rlc19pbnRlcnNlY3RzKGNvbnN0IG5vZGVtYXNrX3QgKnNyYzFwLAorCQkJCQljb25zdCBub2RlbWFza190ICpzcmMycCwgaW50IG5iaXRzKQoreworCXJldHVybiBiaXRtYXBfaW50ZXJzZWN0cyhzcmMxcC0+Yml0cywgc3JjMnAtPmJpdHMsIG5iaXRzKTsKK30KKworI2RlZmluZSBub2Rlc19zdWJzZXQoc3JjMSwgc3JjMikgXAorCQkJX19ub2Rlc19zdWJzZXQoJihzcmMxKSwgJihzcmMyKSwgTUFYX05VTU5PREVTKQorc3RhdGljIGlubGluZSBpbnQgX19ub2Rlc19zdWJzZXQoY29uc3Qgbm9kZW1hc2tfdCAqc3JjMXAsCisJCQkJCWNvbnN0IG5vZGVtYXNrX3QgKnNyYzJwLCBpbnQgbmJpdHMpCit7CisJcmV0dXJuIGJpdG1hcF9zdWJzZXQoc3JjMXAtPmJpdHMsIHNyYzJwLT5iaXRzLCBuYml0cyk7Cit9CisKKyNkZWZpbmUgbm9kZXNfZW1wdHkoc3JjKSBfX25vZGVzX2VtcHR5KCYoc3JjKSwgTUFYX05VTU5PREVTKQorc3RhdGljIGlubGluZSBpbnQgX19ub2Rlc19lbXB0eShjb25zdCBub2RlbWFza190ICpzcmNwLCBpbnQgbmJpdHMpCit7CisJcmV0dXJuIGJpdG1hcF9lbXB0eShzcmNwLT5iaXRzLCBuYml0cyk7Cit9CisKKyNkZWZpbmUgbm9kZXNfZnVsbChub2RlbWFzaykgX19ub2Rlc19mdWxsKCYobm9kZW1hc2spLCBNQVhfTlVNTk9ERVMpCitzdGF0aWMgaW5saW5lIGludCBfX25vZGVzX2Z1bGwoY29uc3Qgbm9kZW1hc2tfdCAqc3JjcCwgaW50IG5iaXRzKQoreworCXJldHVybiBiaXRtYXBfZnVsbChzcmNwLT5iaXRzLCBuYml0cyk7Cit9CisKKyNkZWZpbmUgbm9kZXNfd2VpZ2h0KG5vZGVtYXNrKSBfX25vZGVzX3dlaWdodCgmKG5vZGVtYXNrKSwgTUFYX05VTU5PREVTKQorc3RhdGljIGlubGluZSBpbnQgX19ub2Rlc193ZWlnaHQoY29uc3Qgbm9kZW1hc2tfdCAqc3JjcCwgaW50IG5iaXRzKQoreworCXJldHVybiBiaXRtYXBfd2VpZ2h0KHNyY3AtPmJpdHMsIG5iaXRzKTsKK30KKworI2RlZmluZSBub2Rlc19zaGlmdF9yaWdodChkc3QsIHNyYywgbikgXAorCQkJX19ub2Rlc19zaGlmdF9yaWdodCgmKGRzdCksICYoc3JjKSwgKG4pLCBNQVhfTlVNTk9ERVMpCitzdGF0aWMgaW5saW5lIHZvaWQgX19ub2Rlc19zaGlmdF9yaWdodChub2RlbWFza190ICpkc3RwLAorCQkJCQljb25zdCBub2RlbWFza190ICpzcmNwLCBpbnQgbiwgaW50IG5iaXRzKQoreworCWJpdG1hcF9zaGlmdF9yaWdodChkc3RwLT5iaXRzLCBzcmNwLT5iaXRzLCBuLCBuYml0cyk7Cit9CisKKyNkZWZpbmUgbm9kZXNfc2hpZnRfbGVmdChkc3QsIHNyYywgbikgXAorCQkJX19ub2Rlc19zaGlmdF9sZWZ0KCYoZHN0KSwgJihzcmMpLCAobiksIE1BWF9OVU1OT0RFUykKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX25vZGVzX3NoaWZ0X2xlZnQobm9kZW1hc2tfdCAqZHN0cCwKKwkJCQkJY29uc3Qgbm9kZW1hc2tfdCAqc3JjcCwgaW50IG4sIGludCBuYml0cykKK3sKKwliaXRtYXBfc2hpZnRfbGVmdChkc3RwLT5iaXRzLCBzcmNwLT5iaXRzLCBuLCBuYml0cyk7Cit9CisKKy8qIEZJWE1FOiBiZXR0ZXIgd291bGQgYmUgdG8gZml4IGFsbCBhcmNoaXRlY3R1cmVzIHRvIG5ldmVyIHJldHVybgorICAgICAgICAgID4gTUFYX05VTU5PREVTLCB0aGVuIHRoZSBzaWxseSBtaW5fdHMgY291bGQgYmUgZHJvcHBlZC4gKi8KKworI2RlZmluZSBmaXJzdF9ub2RlKHNyYykgX19maXJzdF9ub2RlKCYoc3JjKSkKK3N0YXRpYyBpbmxpbmUgaW50IF9fZmlyc3Rfbm9kZShjb25zdCBub2RlbWFza190ICpzcmNwKQoreworCXJldHVybiBtaW5fdChpbnQsIE1BWF9OVU1OT0RFUywgZmluZF9maXJzdF9iaXQoc3JjcC0+Yml0cywgTUFYX05VTU5PREVTKSk7Cit9CisKKyNkZWZpbmUgbmV4dF9ub2RlKG4sIHNyYykgX19uZXh0X25vZGUoKG4pLCAmKHNyYykpCitzdGF0aWMgaW5saW5lIGludCBfX25leHRfbm9kZShpbnQgbiwgY29uc3Qgbm9kZW1hc2tfdCAqc3JjcCkKK3sKKwlyZXR1cm4gbWluX3QoaW50LE1BWF9OVU1OT0RFUyxmaW5kX25leHRfYml0KHNyY3AtPmJpdHMsIE1BWF9OVU1OT0RFUywgbisxKSk7Cit9CisKKyNkZWZpbmUgbm9kZW1hc2tfb2Zfbm9kZShub2RlKQkJCQkJCVwKKyh7CQkJCQkJCQkJXAorCXR5cGVvZihfdW51c2VkX25vZGVtYXNrX2FyZ18pIG07CQkJCVwKKwlpZiAoc2l6ZW9mKG0pID09IHNpemVvZih1bnNpZ25lZCBsb25nKSkgewkJCVwKKwkJbS5iaXRzWzBdID0gMVVMPDwobm9kZSk7CQkJCVwKKwl9IGVsc2UgewkJCQkJCQlcCisJCW5vZGVzX2NsZWFyKG0pOwkJCQkJCVwKKwkJbm9kZV9zZXQoKG5vZGUpLCBtKTsJCQkJCVwKKwl9CQkJCQkJCQlcCisJbTsJCQkJCQkJCVwKK30pCisKKyNkZWZpbmUgZmlyc3RfdW5zZXRfbm9kZShtYXNrKSBfX2ZpcnN0X3Vuc2V0X25vZGUoJihtYXNrKSkKK3N0YXRpYyBpbmxpbmUgaW50IF9fZmlyc3RfdW5zZXRfbm9kZShjb25zdCBub2RlbWFza190ICptYXNrcCkKK3sKKwlyZXR1cm4gbWluX3QoaW50LE1BWF9OVU1OT0RFUywKKwkJCWZpbmRfZmlyc3RfemVyb19iaXQobWFza3AtPmJpdHMsIE1BWF9OVU1OT0RFUykpOworfQorCisjZGVmaW5lIE5PREVfTUFTS19MQVNUX1dPUkQgQklUTUFQX0xBU1RfV09SRF9NQVNLKE1BWF9OVU1OT0RFUykKKworI2lmIE1BWF9OVU1OT0RFUyA8PSBCSVRTX1BFUl9MT05HCisKKyNkZWZpbmUgTk9ERV9NQVNLX0FMTAkJCQkJCQlcCisoKG5vZGVtYXNrX3QpIHsgewkJCQkJCQlcCisJW0JJVFNfVE9fTE9OR1MoTUFYX05VTU5PREVTKS0xXSA9IE5PREVfTUFTS19MQVNUX1dPUkQJCVwKK30gfSkKKworI2Vsc2UKKworI2RlZmluZSBOT0RFX01BU0tfQUxMCQkJCQkJCVwKKygobm9kZW1hc2tfdCkgeyB7CQkJCQkJCVwKKwlbMCAuLi4gQklUU19UT19MT05HUyhNQVhfTlVNTk9ERVMpLTJdID0gfjBVTCwJCQlcCisJW0JJVFNfVE9fTE9OR1MoTUFYX05VTU5PREVTKS0xXSA9IE5PREVfTUFTS19MQVNUX1dPUkQJCVwKK30gfSkKKworI2VuZGlmCisKKyNkZWZpbmUgTk9ERV9NQVNLX05PTkUJCQkJCQkJXAorKChub2RlbWFza190KSB7IHsJCQkJCQkJXAorCVswIC4uLiBCSVRTX1RPX0xPTkdTKE1BWF9OVU1OT0RFUyktMV0gPSAgMFVMCQkJXAorfSB9KQorCisjZGVmaW5lIG5vZGVzX2FkZHIoc3JjKSAoKHNyYykuYml0cykKKworI2RlZmluZSBub2RlbWFza19zY25wcmludGYoYnVmLCBsZW4sIHNyYykgXAorCQkJX19ub2RlbWFza19zY25wcmludGYoKGJ1ZiksIChsZW4pLCAmKHNyYyksIE1BWF9OVU1OT0RFUykKK3N0YXRpYyBpbmxpbmUgaW50IF9fbm9kZW1hc2tfc2NucHJpbnRmKGNoYXIgKmJ1ZiwgaW50IGxlbiwKKwkJCQkJY29uc3Qgbm9kZW1hc2tfdCAqc3JjcCwgaW50IG5iaXRzKQoreworCXJldHVybiBiaXRtYXBfc2NucHJpbnRmKGJ1ZiwgbGVuLCBzcmNwLT5iaXRzLCBuYml0cyk7Cit9CisKKyNkZWZpbmUgbm9kZW1hc2tfcGFyc2UodWJ1ZiwgdWxlbiwgZHN0KSBcCisJCQlfX25vZGVtYXNrX3BhcnNlKCh1YnVmKSwgKHVsZW4pLCAmKGRzdCksIE1BWF9OVU1OT0RFUykKK3N0YXRpYyBpbmxpbmUgaW50IF9fbm9kZW1hc2tfcGFyc2UoY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwgaW50IGxlbiwKKwkJCQkJbm9kZW1hc2tfdCAqZHN0cCwgaW50IG5iaXRzKQoreworCXJldHVybiBiaXRtYXBfcGFyc2UoYnVmLCBsZW4sIGRzdHAtPmJpdHMsIG5iaXRzKTsKK30KKworI2RlZmluZSBub2RlbGlzdF9zY25wcmludGYoYnVmLCBsZW4sIHNyYykgXAorCQkJX19ub2RlbGlzdF9zY25wcmludGYoKGJ1ZiksIChsZW4pLCAmKHNyYyksIE1BWF9OVU1OT0RFUykKK3N0YXRpYyBpbmxpbmUgaW50IF9fbm9kZWxpc3Rfc2NucHJpbnRmKGNoYXIgKmJ1ZiwgaW50IGxlbiwKKwkJCQkJY29uc3Qgbm9kZW1hc2tfdCAqc3JjcCwgaW50IG5iaXRzKQoreworCXJldHVybiBiaXRtYXBfc2NubGlzdHByaW50ZihidWYsIGxlbiwgc3JjcC0+Yml0cywgbmJpdHMpOworfQorCisjZGVmaW5lIG5vZGVsaXN0X3BhcnNlKGJ1ZiwgZHN0KSBfX25vZGVsaXN0X3BhcnNlKChidWYpLCAmKGRzdCksIE1BWF9OVU1OT0RFUykKK3N0YXRpYyBpbmxpbmUgaW50IF9fbm9kZWxpc3RfcGFyc2UoY29uc3QgY2hhciAqYnVmLCBub2RlbWFza190ICpkc3RwLCBpbnQgbmJpdHMpCit7CisJcmV0dXJuIGJpdG1hcF9wYXJzZWxpc3QoYnVmLCBkc3RwLT5iaXRzLCBuYml0cyk7Cit9CisKKyNpZiBNQVhfTlVNTk9ERVMgPiAxCisjZGVmaW5lIGZvcl9lYWNoX25vZGVfbWFzayhub2RlLCBtYXNrKQkJCVwKKwlmb3IgKChub2RlKSA9IGZpcnN0X25vZGUobWFzayk7CQkJXAorCQkobm9kZSkgPCBNQVhfTlVNTk9ERVM7CQkJXAorCQkobm9kZSkgPSBuZXh0X25vZGUoKG5vZGUpLCAobWFzaykpKQorI2Vsc2UgLyogTUFYX05VTU5PREVTID09IDEgKi8KKyNkZWZpbmUgZm9yX2VhY2hfbm9kZV9tYXNrKG5vZGUsIG1hc2spCQkJXAorCWlmICghbm9kZXNfZW1wdHkobWFzaykpCQkJCVwKKwkJZm9yICgobm9kZSkgPSAwOyAobm9kZSkgPCAxOyAobm9kZSkrKykKKyNlbmRpZiAvKiBNQVhfTlVNTk9ERVMgKi8KKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgcGFydGljdWxhciBzeXN0ZW0gbm9kZW1hc2tzIGFuZCBvcGVyYXRpb25zCisgKiBvbiB0aGVtIG1hbmFnZSBhbGwgcG9zc2libGUgYW5kIG9ubGluZSBub2Rlcy4KKyAqLworCitleHRlcm4gbm9kZW1hc2tfdCBub2RlX29ubGluZV9tYXA7CitleHRlcm4gbm9kZW1hc2tfdCBub2RlX3Bvc3NpYmxlX21hcDsKKworI2lmIE1BWF9OVU1OT0RFUyA+IDEKKyNkZWZpbmUgbnVtX29ubGluZV9ub2RlcygpCW5vZGVzX3dlaWdodChub2RlX29ubGluZV9tYXApCisjZGVmaW5lIG51bV9wb3NzaWJsZV9ub2RlcygpCW5vZGVzX3dlaWdodChub2RlX3Bvc3NpYmxlX21hcCkKKyNkZWZpbmUgbm9kZV9vbmxpbmUobm9kZSkJbm9kZV9pc3NldCgobm9kZSksIG5vZGVfb25saW5lX21hcCkKKyNkZWZpbmUgbm9kZV9wb3NzaWJsZShub2RlKQlub2RlX2lzc2V0KChub2RlKSwgbm9kZV9wb3NzaWJsZV9tYXApCisjZWxzZQorI2RlZmluZSBudW1fb25saW5lX25vZGVzKCkJMQorI2RlZmluZSBudW1fcG9zc2libGVfbm9kZXMoKQkxCisjZGVmaW5lIG5vZGVfb25saW5lKG5vZGUpCSgobm9kZSkgPT0gMCkKKyNkZWZpbmUgbm9kZV9wb3NzaWJsZShub2RlKQkoKG5vZGUpID09IDApCisjZW5kaWYKKworI2RlZmluZSBhbnlfb25saW5lX25vZGUobWFzaykJCQlcCisoewkJCQkJCVwKKwlpbnQgbm9kZTsJCQkJXAorCWZvcl9lYWNoX25vZGVfbWFzayhub2RlLCAobWFzaykpCVwKKwkJaWYgKG5vZGVfb25saW5lKG5vZGUpKQkJXAorCQkJYnJlYWs7CQkJXAorCW5vZGU7CQkJCQlcCit9KQorCisjZGVmaW5lIG5vZGVfc2V0X29ubGluZShub2RlKQkgICBzZXRfYml0KChub2RlKSwgbm9kZV9vbmxpbmVfbWFwLmJpdHMpCisjZGVmaW5lIG5vZGVfc2V0X29mZmxpbmUobm9kZSkJICAgY2xlYXJfYml0KChub2RlKSwgbm9kZV9vbmxpbmVfbWFwLmJpdHMpCisKKyNkZWZpbmUgZm9yX2VhY2hfbm9kZShub2RlKQkgICBmb3JfZWFjaF9ub2RlX21hc2soKG5vZGUpLCBub2RlX3Bvc3NpYmxlX21hcCkKKyNkZWZpbmUgZm9yX2VhY2hfb25saW5lX25vZGUobm9kZSkgZm9yX2VhY2hfbm9kZV9tYXNrKChub2RlKSwgbm9kZV9vbmxpbmVfbWFwKQorCisjZW5kaWYgLyogX19MSU5VWF9OT0RFTUFTS19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25vdGlmaWVyLmggYi9pbmNsdWRlL2xpbnV4L25vdGlmaWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTMwM2EwMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbm90aWZpZXIuaApAQCAtMCwwICsxLDc1IEBACisvKgorICoJUm91dGluZXMgdG8gbWFuYWdlIG5vdGlmaWVyIGNoYWlucyBmb3IgcGFzc2luZyBzdGF0dXMgY2hhbmdlcyB0byBhbnkKKyAqCWludGVyZXN0ZWQgcm91dGluZXMuIFdlIG5lZWQgdGhpcyBpbnN0ZWFkIG9mIGhhcmQgY29kZWQgY2FsbCBsaXN0cyBzbworICoJdGhhdCBtb2R1bGVzIGNhbiBwb2tlIHRoZWlyIG5vc2UgaW50byB0aGUgaW5uYXJkcy4gVGhlIG5ldHdvcmsgZGV2aWNlcworICoJbmVlZGVkIHRoZW0gc28gaGVyZSB0aGV5IGFyZSBmb3IgdGhlIHJlc3Qgb2YgeW91LgorICoKKyAqCQkJCUFsYW4gQ294IDxBbGFuLkNveEBsaW51eC5vcmc+CisgKi8KKyAKKyNpZm5kZWYgX0xJTlVYX05PVElGSUVSX0gKKyNkZWZpbmUgX0xJTlVYX05PVElGSUVSX0gKKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorCitzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sKK3sKKwlpbnQgKCpub3RpZmllcl9jYWxsKShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsIHVuc2lnbmVkIGxvbmcsIHZvaWQgKik7CisJc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZXh0OworCWludCBwcmlvcml0eTsKK307CisKKworI2lmZGVmIF9fS0VSTkVMX18KKworZXh0ZXJuIGludCBub3RpZmllcl9jaGFpbl9yZWdpc3RlcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKipsaXN0LCBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm4pOworZXh0ZXJuIGludCBub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqKm5sLCBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm4pOworZXh0ZXJuIGludCBub3RpZmllcl9jYWxsX2NoYWluKHN0cnVjdCBub3RpZmllcl9ibG9jayAqKm4sIHVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICp2KTsKKworI2RlZmluZSBOT1RJRllfRE9ORQkJMHgwMDAwCQkvKiBEb24ndCBjYXJlICovCisjZGVmaW5lIE5PVElGWV9PSwkJMHgwMDAxCQkvKiBTdWl0cyBtZSAqLworI2RlZmluZSBOT1RJRllfU1RPUF9NQVNLCTB4ODAwMAkJLyogRG9uJ3QgY2FsbCBmdXJ0aGVyICovCisjZGVmaW5lIE5PVElGWV9CQUQJCShOT1RJRllfU1RPUF9NQVNLfDB4MDAwMikJLyogQmFkL1ZldG8gYWN0aW9uCSovCisvKgorICogQ2xlYW4gd2F5IHRvIHJldHVybiBmcm9tIHRoZSBub3RpZmllciBhbmQgc3RvcCBmdXJ0aGVyIGNhbGxzLgorICovCisjZGVmaW5lIE5PVElGWV9TVE9QCQkoTk9USUZZX09LfE5PVElGWV9TVE9QX01BU0spCisKKy8qCisgKglEZWNsYXJlZCBub3RpZmllcnMgc28gZmFyLiBJIGNhbiBpbWFnaW5lIHF1aXRlIGEgZmV3IG1vcmUgY2hhaW5zCisgKglvdmVyIHRpbWUgKGVnIGxhcHRvcCBwb3dlciByZXNldCBjaGFpbnMsIHJlYm9vdCBjaGFpbiAodG8gY2xlYW4gCisgKglkZXZpY2UgdW5pdHMgdXApLCBkZXZpY2UgW3VuXW1vdW50IGNoYWluLCBtb2R1bGUgbG9hZC91bmxvYWQgY2hhaW4sCisgKglsb3cgbWVtb3J5IGNoYWluLCBzY3JlZW5ibGFuayBjaGFpbiAoZm9yIHBsdWcgaW4gbW9kdWxhciBzY3JlZW5ibGFua2VycykgCisgKglWQyBzd2l0Y2ggY2hhaW5zIChmb3IgbG9hZGFibGUga2VybmVsIHN2Z2FsaWIgVkMgc3dpdGNoIGhlbHBlcnMpIGV0Yy4uLgorICovCisgCisvKiBuZXRkZXZpY2Ugbm90aWZpZXIgY2hhaW4gKi8KKyNkZWZpbmUgTkVUREVWX1VQCTB4MDAwMQkvKiBGb3Igbm93IHlvdSBjYW4ndCB2ZXRvIGEgZGV2aWNlIHVwL2Rvd24gKi8KKyNkZWZpbmUgTkVUREVWX0RPV04JMHgwMDAyCisjZGVmaW5lIE5FVERFVl9SRUJPT1QJMHgwMDAzCS8qIFRlbGwgYSBwcm90b2NvbCBzdGFjayBhIG5ldHdvcmsgaW50ZXJmYWNlCisJCQkJICAgZGV0ZWN0ZWQgYSBoYXJkd2FyZSBjcmFzaCBhbmQgcmVzdGFydGVkCisJCQkJICAgLSB3ZSBjYW4gdXNlIHRoaXMgZWcgdG8ga2ljayB0Y3Agc2Vzc2lvbnMKKwkJCQkgICBvbmNlIGRvbmUgKi8KKyNkZWZpbmUgTkVUREVWX0NIQU5HRQkweDAwMDQJLyogTm90aWZ5IGRldmljZSBzdGF0ZSBjaGFuZ2UgKi8KKyNkZWZpbmUgTkVUREVWX1JFR0lTVEVSIDB4MDAwNQorI2RlZmluZSBORVRERVZfVU5SRUdJU1RFUgkweDAwMDYKKyNkZWZpbmUgTkVUREVWX0NIQU5HRU1UVQkweDAwMDcKKyNkZWZpbmUgTkVUREVWX0NIQU5HRUFERFIJMHgwMDA4CisjZGVmaW5lIE5FVERFVl9HT0lOR19ET1dOCTB4MDAwOQorI2RlZmluZSBORVRERVZfQ0hBTkdFTkFNRQkweDAwMEEKKworI2RlZmluZSBTWVNfRE9XTgkweDAwMDEJLyogTm90aWZ5IG9mIHN5c3RlbSBkb3duICovCisjZGVmaW5lIFNZU19SRVNUQVJUCVNZU19ET1dOCisjZGVmaW5lIFNZU19IQUxUCTB4MDAwMgkvKiBOb3RpZnkgb2Ygc3lzdGVtIGhhbHQgKi8KKyNkZWZpbmUgU1lTX1BPV0VSX09GRgkweDAwMDMJLyogTm90aWZ5IG9mIHN5c3RlbSBwb3dlciBvZmYgKi8KKworI2RlZmluZSBORVRMSU5LX1VSRUxFQVNFCTB4MDAwMQkvKiBVbmljYXN0IG5ldGxpbmsgc29ja2V0IHJlbGVhc2VkICovCisKKyNkZWZpbmUgQ1BVX09OTElORQkJMHgwMDAyIC8qIENQVSAodW5zaWduZWQpdiBpcyB1cCAqLworI2RlZmluZSBDUFVfVVBfUFJFUEFSRQkJMHgwMDAzIC8qIENQVSAodW5zaWduZWQpdiBjb21pbmcgdXAgKi8KKyNkZWZpbmUgQ1BVX1VQX0NBTkNFTEVECQkweDAwMDQgLyogQ1BVICh1bnNpZ25lZCl2IE5PVCBjb21pbmcgdXAgKi8KKyNkZWZpbmUgQ1BVX0RPV05fUFJFUEFSRQkweDAwMDUgLyogQ1BVICh1bnNpZ25lZCl2IGdvaW5nIGRvd24gKi8KKyNkZWZpbmUgQ1BVX0RPV05fRkFJTEVECQkweDAwMDYgLyogQ1BVICh1bnNpZ25lZCl2IE5PVCBnb2luZyBkb3duICovCisjZGVmaW5lIENQVV9ERUFECQkweDAwMDcgLyogQ1BVICh1bnNpZ25lZCl2IGRlYWQgKi8KKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAvKiBfTElOVVhfTk9USUZJRVJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9udWJ1cy5oIGIvaW5jbHVkZS9saW51eC9udWJ1cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3MGU2NmEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L251YnVzLmgKQEAgLTAsMCArMSwzMzQgQEAKKy8qCisgIG51YnVzLmg6IHZhcmlvdXMgZGVmaW5pdGlvbnMgYW5kIHByb3RvdHlwZXMgZm9yIE51QnVzIGRyaXZlcnMgdG8gdXNlLgorCisgIE9yaWdpbmFsbHkgd3JpdHRlbiBieSBBbGFuIENveC4KKworICBIYWNrZWQgdG8gZGVhdGggYnkgQy4gU2NvdHQgQW5hbmlhbiBhbmQgRGF2aWQgSHVnZ2lucy1EYWluZXMuCisgIAorICBTb21lIG9mIHRoZSBjb25zdGFudHMgaW4gaGVyZSBhcmUgZnJvbSB0aGUgY29ycmVzcG9uZGluZworICBOZXRCU0QvT3BlbkJTRCBoZWFkZXIgZmlsZSwgYnkgQWxsZW4gQnJpZ2dzLiAgV2UgZmlndXJlZCBvdXQgdGhlCisgIHJlc3Qgb2YgdGhlbSBvbiBvdXIgb3duLiAqLworCisjaWZuZGVmIExJTlVYX05VQlVTX0gKKyNkZWZpbmUgTElOVVhfTlVCVVNfSAorCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGFzbS9udWJ1cy5oPgorI2VuZGlmCisKK2VudW0gbnVidXNfY2F0ZWdvcnkgeworCU5VQlVTX0NBVF9CT0FSRCAgICAgICAgICA9IDB4MDAwMSwKKwlOVUJVU19DQVRfRElTUExBWSAgICAgICAgPSAweDAwMDMsCisJTlVCVVNfQ0FUX05FVFdPUksgICAgICAgID0gMHgwMDA0LAorCU5VQlVTX0NBVF9DT01NVU5JQ0FUSU9OUyA9IDB4MDAwNiwKKwlOVUJVU19DQVRfRk9OVCAgICAgICAgICAgPSAweDAwMDksCisJTlVCVVNfQ0FUX0NQVSAgICAgICAgICAgID0gMHgwMDBBLAorCS8qIEZvciBsYWNrIG9mIGEgYmV0dGVyIG5hbWUgKi8KKwlOVUJVU19DQVRfRFVPRE9DSyAgICAgICAgPSAweDAwMjAKK307CisKK2VudW0gbnVidXNfdHlwZV9uZXR3b3JrIHsKKwlOVUJVU19UWVBFX0VUSEVSTkVUIAkgPSAweDAwMDEsCisJTlVCVVNfVFlQRV9SUzIzMiAgICAJID0gMHgwMDAyCit9OworCitlbnVtIG51YnVzX3R5cGVfZGlzcGxheSB7CisJTlVCVVNfVFlQRV9WSURFTyAJID0gMHgwMDAxCit9OworCitlbnVtIG51YnVzX3R5cGVfY3B1IHsKKwlOVUJVU19UWVBFXzY4MDIwIAkgPSAweDAwMDMsCisJTlVCVVNfVFlQRV82ODAzMCAJID0gMHgwMDA0LAorCU5VQlVTX1RZUEVfNjgwNDAgCSA9IDB4MDAwNQorfTsKKworLyogS25vd24gPENhdCxUeXBlLFNXLEhXPiB0dXBsZXM6IChhY2NvcmRpbmcgdG8gVGF0dGxlVGVjaCBhbmQgU2xvdHMpCisgKiAgNjgwMzAgbW90aGVyYm9hcmRzOiA8MTAsNCwwLDI0PgorICogIDY4MDQwIG1vdGhlcmJvYXJkczogPDEwLDUsMCwyND4KKyAqICBEdW9Eb2NrIFBsdXM6IDwzMiwxLDEsMj4KKyAqCisgKiAgVG9ieSBGcmFtZSBCdWZmZXIgY2FyZDogPDMsMSwxLDE+CisgKiAgUkJWIGJ1aWx0LWluIHZpZGVvIChJSWNpKTogPDMsMSwxLDI0PgorICogIFZhbGt5cmllIGJ1aWx0LWluIHZpZGVvIChRNjMwKTogPDMsMSwxLDQ2PgorICogIE1hY2ludG9zaCBEaXNwbGF5IENhcmQ6IDwzLDEsMSwyNT4KKyAqICBTb25vcmEgYnVpbHQtaW4gdmlkZW8gKFA0NjApOiA8MywxLDEsMzQ+CisgKiAgSmV0IGZyYW1lYnVmZmVyIChEdW9Eb2NrIFBsdXMpOiA8MywxLDEsNDE+CisgKgorICogIFNPTklDIGNvbW0tc2xvdC9vbi1ib2FyZCBhbmQgRHVvRG9jayBFdGhlcm5ldDogPDQsMSwxLDI3Mj4KKyAqICBTT05JQyBMQy1QRFMgRXRoZXJuZXQgKERheW5hLCBidXQgbGlrZSBBcHBsZSAxNi1iaXQsIHNvcnQgb2YpOiA8NCwxLDEsMjcxPgorICogIFNvbmljIFN5c3RlbXMgRXRoZXJuZXQgQS1TZXJpZXMgQ2FyZDogPDQsMSwyNjgsMjU2PgorICogIEFzYW50ZSBNYWNDb24gTnVCdXMtQTogPDQsMSwyNjAsMjU2PiAoYWxwaGEtMS4wLDEuMSByZXZpc2lvbikKKyAqICAgUk9NIG9uIHRoZSBhYm92ZSBjYXJkOiA8MiwxLDAsMD4KKyAqICBDYWJsZXRyb24gZXRoZXJuZXQgY2FyZDogPDQsMSwxLDI2NT4KKyAqICBGYXJhbGxvbiBldGhlcm5ldCBjYXJkOiA8NCwxLDI2OCwyNTY+IChpZGVudGljYWwgdG8gU29uaWMgU3lzdGVtcyBjYXJkKQorICogIEtpbmV0aWNzIEV0aGVyUG9ydCBJSU46IDw0LDEsMjU5LDI2Mj4KKyAqICBBUEkgRW5naW5lZXJpbmcgRXRoZXJSdW5fTENhIFBEUyBlbmV0IGNhcmQ6IDw0LDEsMjgyLDI1Nj4KKyAqCisgKiAgQWRkIHlvdXIgZGV2aWNlcyB0byB0aGUgbGlzdCEgIFlvdSBjYW4gb2J0YWluIHRoZSAiU2xvdHMiIHV0aWxpdHkKKyAqICBmcm9tIEFwcGxlJ3MgRlRQIHNpdGUgYXQ6CisgKiAgZnRwOi8vZGV2LmFwcGxlLmNvbS9kZXZ3b3JsZC9Ub29sX0NoZXN0L0RldmljZXNfLV9IYXJkd2FyZS9OdUJ1c19TbG90X01hbmFnZXIvCisgKgorICogIEFsdGVybmF0ZWx5LCBUYXR0bGVUZWNoIGNhbiBiZSBmb3VuZCBhdCBhbnkgSW5mby1NYWMgbWlycm9yIHNpdGUuICAKKyAqICBvciBmcm9tIGl0cyBkaXN0cmlidXRpb24gc2l0ZTogZnRwOi8vZnRwLmRlY2lzbWtyLmNvbS9kbXMKKyAqLworCisvKiBEclNXOiBVbmlxdWVseSBpZGVudGlmaWVzIHRoZSBzb2Z0d2FyZSBpbnRlcmZhY2UgdG8gYSBib2FyZC4gIFRoaXMKKyAgIGlzIHVzdWFsbHkgdGhlIG9uZSB5b3Ugd2FudCB0byBsb29rIGF0IHdoZW4gd3JpdGluZyBhIGRyaXZlci4gIEl0J3MKKyAgIG5vdCBhcyB1c2VmdWwgYXMgeW91IHRoaW5rLCB0aG91Z2gsIGJlY2F1c2UgYXMgd2Ugc2hvdWxkIGtub3cgYnkKKyAgIG5vdyAoZHVoKSwgIkFwcGxlIENvbXBhdGlibGUiIGNhbiBtZWFuIGEgbG90IG9mIHRoaW5ncy4uLiAqLworCisvKiBBZGQga25vd24gRHJTVyB2YWx1ZXMgaGVyZSAqLworZW51bSBudWJ1c19kcnN3IHsKKwkvKiBOVUJVU19DQVRfRElTUExBWSAqLworCU5VQlVTX0RSU1dfQVBQTEUgICAgICAgCT0gMHgwMDAxLAorCU5VQlVTX0RSU1dfQVBQTEVfSElSRVMgCT0gMHgwMDEzLCAvKiBNYWNJSSBIaVJlcyBjYXJkIGRyaXZlciAqLworCQorCS8qIE5VQlVTX0NBVF9ORVRXT1JLICovCisJTlVCVVNfRFJTV19DQUJMRVRST04gICAJPSAweDAwMDEsCisJTlVCVVNfRFJTV19TT05JQ19MQyAgICAJPSAweDAwMDEsCisJTlVCVVNfRFJTV19LSU5FVElDUyAgICAJPSAweDAxMDMsCisJTlVCVVNfRFJTV19BU0FOVEUgICAgICAJPSAweDAxMDQsCisJTlVCVVNfRFJTV19EQVlOQSAgICAgICAJPSAweDAxMGIsCisJTlVCVVNfRFJTV19GQVJBTExPTiAgICAJPSAweDAxMGMsCisJTlVCVVNfRFJTV19BUFBMRV9TTiAgICAJPSAweDAxMGYsCisJTlVCVVNfRFJTV19EQVlOQTIJPSAweDAxMTUsCisJTlVCVVNfRFJTV19GT0NVUyAgICAgICAgPSAweDAxMWEsCisJTlVCVVNfRFJTV19BU0FOVEVfQ1MgICAgPSAweDAxMWQsIC8qIHVzZSBhc2FudGUgU01DOTE5NCBkcml2ZXIgKi8KKwlOVUJVU19EUlNXX0RBWU5BX0xDCT0gMHgwMTFlLAorCisJLyogTlVCVVNfQ0FUX0NQVSAqLworCU5VQlVTX0RSU1dfTk9ORSAgICAgICAgCT0gMHgwMDAwLAorfTsKKworLyogRHJIVzogVW5pcXVlbHkgaWRlbnRpZmllcyB0aGUgaGFyZHdhcmUgaW50ZXJmYWNlIHRvIGEgYm9hcmQgKG9yIGF0CisgICBsZWFzdCwgaXQgc2hvdWxkLi4uICBzb21lIHZpZGVvIGNhcmRzIGFyZSBrbm93biB0byBpbmNvcnJlY3RseQorICAgaWRlbnRpZnkgdGhlbXNlbHZlcyBhcyBUb2J5IGNhcmRzKSAqLworCisvKiBBZGQga25vd24gRHJIVyB2YWx1ZXMgaGVyZSAqLworZW51bSBudWJ1c19kcmh3IHsKKwkvKiBOVUJVU19DQVRfRElTUExBWSAqLworCU5VQlVTX0RSSFdfQVBQTEVfVEZCCT0gMHgwMDAxLCAvKiBUb2J5IGZyYW1lIGJ1ZmZlciBjYXJkICovCisJTlVCVVNfRFJIV19BUFBMRV9IUlZDCT0gMHgwMDEzLCAvKiBNYWMgSUkgSGlnaCBSZXMgVmlkZW8gY2FyZCAqLworCU5VQlVTX0RSSFdfQVBQTEVfUkJWMSAgID0gMHgwMDE4LCAvKiBJSWNpIFJCViB2aWRlbyAqLworCU5VQlVTX0RSSFdfQVBQTEVfTURDICAgID0gMHgwMDE5LCAvKiBNYWNpbnRvc2ggRGlzcGxheSBDYXJkICovCisJTlVCVVNfRFJIV19BUFBMRV9TT05PUkEgPSAweDAwMjIsIC8qIFNvbm9yYSBidWlsdC1pbiB2aWRlbyAqLworCU5VQlVTX0RSSFdfQVBQTEVfSkVUIAk9IDB4MDAyOSwgLyogSmV0IGZyYW1lYnVmZmVyIChEdW9Eb2NrKSAqLworCU5VQlVTX0RSSFdfQVBQTEVfVkFMS1lSSUUgPSAweDAwMmUsCisJTlVCVVNfRFJIV19USFVOREVSMjQJPSAweDAyY2IsIC8qIFN1cGVyTWFjIFRodW5kZXIvMjQgKi8KKwkKKwkvKiBOVUJVU19DQVRfTkVUV09SSyAqLworCU5VQlVTX0RSSFdfSU5URVJMQU4gICAgID0gMHgwMTAwLAorCU5VQlVTX0RSSFdfU01DOTE5NCAgICAgID0gMHgwMTAxLAorCU5VQlVTX0RSSFdfS0lORVRJQ1MgICAgID0gMHgwMTA2LAorCU5VQlVTX0RSSFdfQ0FCTEVUUk9OICAgID0gMHgwMTA5LAorCU5VQlVTX0RSSFdfQVNBTlRFX0xDICAgID0gMHgwMTBmLAorCU5VQlVTX0RSSFdfU09OSUMgICAgICAgID0gMHgwMTEwLAorCU5VQlVTX0RSSFdfU09OSUNfTkIJPSAweDAxMTgsCisJTlVCVVNfRFJIV19TT05JQ19MQwk9IDB4MDExOSwKKwkKKwkvKiBOVUJVU19DQVRfQ09NTVVOSUNBVElPTlMgKi8KKwlOVUJVU19EUkhXX0RPVkVGQVgJPSAweDAxMDAsCit9OworCisvKiBSZXNvdXJjZSBJRHM6IFRoZXNlIGFyZSB0aGUgaWRlbnRpZmllcnMgZm9yIHRoZSB2YXJpb3VzIHdlaXJkIGFuZAorICAgd29uZGVyZnVsIHRpZGJpdHMgb2YgaW5mb3JtYXRpb24gdGhhdCBtYXkgb3IgbWF5IG5vdCByZXNpZGUgaW4gdGhlCisgICBOdUJ1cyBST00gZGlyZWN0b3J5LiAqLworZW51bSBudWJ1c19yZXNfaWQgeworCU5VQlVTX1JFU0lEX1RZUEUgICAgICAgICA9IDB4MDAwMSwKKwlOVUJVU19SRVNJRF9OQU1FICAgICAgICAgPSAweDAwMDIsCisJTlVCVVNfUkVTSURfSUNPTiAgICAgICAgID0gMHgwMDAzLAorCU5VQlVTX1JFU0lEX0RSVlJESVIgICAgICA9IDB4MDAwNCwKKwlOVUJVU19SRVNJRF9MT0FEUkVDICAgICAgPSAweDAwMDUsCisJTlVCVVNfUkVTSURfQk9PVFJFQyAgICAgID0gMHgwMDA2LAorCU5VQlVTX1JFU0lEX0ZMQUdTICAgICAgICA9IDB4MDAwNywKKwlOVUJVU19SRVNJRF9IV0RFVklEICAgICAgPSAweDAwMDgsCisJTlVCVVNfUkVTSURfTUlOT1JfQkFTRU9TID0gMHgwMDBhLAorCU5VQlVTX1JFU0lEX01JTk9SX0xFTkdUSCA9IDB4MDAwYiwKKwlOVUJVU19SRVNJRF9NQUpPUl9CQVNFT1MgPSAweDAwMGMsCisJTlVCVVNfUkVTSURfTUFKT1JfTEVOR1RIID0gMHgwMDBkLAorCU5VQlVTX1JFU0lEX0NJQ04gICAgICAgICA9IDB4MDAwZiwKKwlOVUJVU19SRVNJRF9JQ0w4ICAgICAgICAgPSAweDAwMTAsCisJTlVCVVNfUkVTSURfSUNMNCAgICAgICAgID0gMHgwMDExLAorfTsKKworLyogQ2F0ZWdvcnktc3BlY2lmaWMgcmVzb3VyY2VzLiAqLworZW51bSBudWJ1c19ib2FyZF9yZXNfaWQgeworCU5VQlVTX1JFU0lEX0JPQVJESUQJID0gMHgwMDIwLAorCU5VQlVTX1JFU0lEX1BSQU1JTklUREFUQSA9IDB4MDAyMSwKKwlOVUJVU19SRVNJRF9QUklNQVJZSU5JVAkgPSAweDAwMjIsCisJTlVCVVNfUkVTSURfVElNRU9VVENPTlNUID0gMHgwMDIzLAorCU5VQlVTX1JFU0lEX1ZFTkRPUklORk8JID0gMHgwMDI0LAorCU5VQlVTX1JFU0lEX0JPQVJERkxBR1MJID0gMHgwMDI1LAorCU5VQlVTX1JFU0lEX1NFQ09ORElOSVQJID0gMHgwMDI2LAorCisJLyogTm90IHN1cmUgd2h5IEFwcGxlIHB1dCB0aGVzZSBuZXh0IHR3byBpbiBoZXJlICovCisJTlVCVVNfUkVTSURfVklETkFNRVMgCSA9IDB4MDA0MSwKKwlOVUJVU19SRVNJRF9WSURNT0RFUyAJID0gMHgwMDdlCit9OworCisvKiBGaWVsZHMgd2l0aGluIHRoZSB2ZW5kb3IgaW5mbyBkaXJlY3RvcnkgKi8KK2VudW0gbnVidXNfdmVuZG9yX3Jlc19pZCB7CisJTlVCVVNfUkVTSURfVkVORF9JRCAgICAgPSAweDAwMDEsCisJTlVCVVNfUkVTSURfVkVORF9TRVJJQUwgPSAweDAwMDIsCisJTlVCVVNfUkVTSURfVkVORF9SRVYgICAgPSAweDAwMDMsCisJTlVCVVNfUkVTSURfVkVORF9QQVJUICAgPSAweDAwMDQsCisJTlVCVVNfUkVTSURfVkVORF9EQVRFICAgPSAweDAwMDUKK307CisKK2VudW0gbnVidXNfbmV0X3Jlc19pZCB7CisJTlVCVVNfUkVTSURfTUFDX0FERFJFU1MgID0gMHgwMDgwCit9OworCitlbnVtIG51YnVzX2NwdV9yZXNfaWQgeworCU5VQlVTX1JFU0lEX01FTUlORk8gICAgICA9IDB4MDA4MSwKKwlOVUJVU19SRVNJRF9ST01JTkZPICAgICAgPSAweDAwODIKK307CisKK2VudW0gbnVidXNfZGlzcGxheV9yZXNfaWQgeworCU5VQlVTX1JFU0lEX0dBTU1BRElSCT0gMHgwMDQwLAorCU5VQlVTX1JFU0lEX0ZJUlNUTU9ERQk9IDB4MDA4MCwKKwlOVUJVU19SRVNJRF9TRUNPTkRNT0RFCT0gMHgwMDgxLAorCU5VQlVTX1JFU0lEX1RISVJETU9ERQk9IDB4MDA4MiwKKwlOVUJVU19SRVNJRF9GT1VSVEhNT0RFCT0gMHgwMDgzLAorCU5VQlVTX1JFU0lEX0ZJRlRITU9ERQk9IDB4MDA4NCwKKwlOVUJVU19SRVNJRF9TSVhUSE1PREUJPSAweDAwODUKK307CisKK3N0cnVjdCBudWJ1c19kaXIKK3sKKwl1bnNpZ25lZCBjaGFyICpiYXNlOworCXVuc2lnbmVkIGNoYXIgKnB0cjsKKwlpbnQgZG9uZTsKKwlpbnQgbWFzazsKK307CisKK3N0cnVjdCBudWJ1c19kaXJlbnQKK3sKKwl1bnNpZ25lZCBjaGFyICpiYXNlOworCXVuc2lnbmVkIGNoYXIgdHlwZTsKKwlfX3UzMiBkYXRhOwkvKiBBY3R1YWxseSAyNGJpdHMgdXNlZCAqLworCWludCBtYXNrOworfTsKKworc3RydWN0IG51YnVzX2JvYXJkIHsKKwlzdHJ1Y3QgbnVidXNfYm9hcmQqIG5leHQ7CisJc3RydWN0IG51YnVzX2RldiogZmlyc3RfZGV2OworCQorICAgICAgICAvKiBPbmx5IDktRSBhY3R1YWxseSBleGlzdCwgdGhvdWdoIDAtOCBhcmUgYWxzbyB0aGVvcmV0aWNhbGx5CisJICAgcG9zc2libGUsIGFuZCAwIGlzIGEgc3BlY2lhbCBjYXNlIHdoaWNoIHJlcHJlc2VudHMgdGhlCisJICAgbW90aGVyYm9hcmQgYW5kIG9uYm9hcmQgcGVyaXBoZXJhbHMgKEV0aGVybmV0LCB2aWRlbykgKi8KKwlpbnQgc2xvdDsKKwkvKiBGb3Igc2xvdCAwLCB0aGlzIGlzIGJvZ3VzLiAqLworCWNoYXIgbmFtZVs2NF07CisKKwkvKiBGb3JtYXQgYmxvY2sgKi8KKwl1bnNpZ25lZCBjaGFyKiBmYmxvY2s7CisJLyogUm9vdCBkaXJlY3RvcnkgKGRvZXMgKm5vdCogYWx3YXlzIGVxdWFsIGZibG9jayArIGRvZmZzZXQhKSAqLworCXVuc2lnbmVkIGNoYXIqIGRpcmVjdG9yeTsKKwkKKwl1bnNpZ25lZCBsb25nIHNsb3RfYWRkcjsKKwkvKiBPZmZzZXQgdG8gcm9vdCBkaXJlY3RvcnkgKHNvbWV0aW1lcykgKi8KKwl1bnNpZ25lZCBsb25nIGRvZmZzZXQ7CisJLyogTGVuZ3RoIG92ZXIgd2hpY2ggdG8gY29tcHV0ZSB0aGUgY3JjICovCisJdW5zaWduZWQgbG9uZyByb21fbGVuZ3RoOworCS8qIENvbXBsZXRlbHkgdXNlbGVzcyBtb3N0IG9mIHRoZSB0aW1lICovCisJdW5zaWduZWQgbG9uZyBjcmM7CisJdW5zaWduZWQgY2hhciByZXY7CisJdW5zaWduZWQgY2hhciBmb3JtYXQ7CisJdW5zaWduZWQgY2hhciBsYW5lczsKK307CisKK3N0cnVjdCBudWJ1c19kZXYgeworCS8qIE5leHQgbGluayBpbiBkZXZpY2UgbGlzdCAqLworCXN0cnVjdCBudWJ1c19kZXYqIG5leHQ7CisJLyogRGlyZWN0b3J5IGVudHJ5IGluIC9wcm9jL2J1cy9udWJ1cyAqLworCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSogcHJvY2RpcjsKKworCS8qIFRoZSBmdW5jdGlvbmFsIHJlc291cmNlIElEIG9mIHRoaXMgZGV2aWNlICovCisJdW5zaWduZWQgY2hhciByZXNpZDsKKwkvKiBUaGVzZSBhcmUgbW9zdGx5IGhlcmUgZm9yIGNvbnZlbmllbmNlOyB3ZSBjb3VsZCBhbHdheXMgcmVhZAorCSAgIHRoZW0gZnJvbSB0aGUgUk9NcyBpZiB3ZSB3YW50ZWQgdG8gKi8KKwl1bnNpZ25lZCBzaG9ydCBjYXRlZ29yeTsKKwl1bnNpZ25lZCBzaG9ydCB0eXBlOworCXVuc2lnbmVkIHNob3J0IGRyX3N3OworCXVuc2lnbmVkIHNob3J0IGRyX2h3OworCS8qIFRoaXMgaXMgdGhlIGRldmljZSdzIG5hbWUgcmF0aGVyIHRoYW4gdGhlIGJvYXJkJ3MuCisJICAgU29tZXRpbWVzIHRoZXkgYXJlIGRpZmZlcmVudC4gIFVzdWFsbHkgdGhlIGJvYXJkIG5hbWUgaXMKKwkgICBtb3JlIGNvcnJlY3QuICovCisJY2hhciBuYW1lWzY0XTsKKwkvKiBNYWNPUyBkcml2ZXIgKEkga2lkIHlvdSBub3QpICovCisJdW5zaWduZWQgY2hhciogZHJpdmVyOworCS8qIEFjdHVhbGx5IHRoaXMgaXMgYW4gb2Zmc2V0ICovCisJdW5zaWduZWQgbG9uZyBpb2Jhc2U7CisJdW5zaWduZWQgbG9uZyBpb3NpemU7CisJdW5zaWduZWQgY2hhciBmbGFncywgaHdkZXZpZDsKKwkKKwkvKiBGdW5jdGlvbmFsIGRpcmVjdG9yeSAqLworCXVuc2lnbmVkIGNoYXIqIGRpcmVjdG9yeTsKKwkvKiBNdWNoIG9mIG91ciBpbmZvIGNvbWVzIGZyb20gaGVyZSAqLworCXN0cnVjdCBudWJ1c19ib2FyZCogYm9hcmQ7Cit9OworCisvKiBUaGlzIGlzIGFsbCBOdUJ1cyBkZXZpY2VzICh1c2VkIHRvIGZpbmQgZGV2aWNlcyBsYXRlciBvbikgKi8KK2V4dGVybiBzdHJ1Y3QgbnVidXNfZGV2KiBudWJ1c19kZXZpY2VzOworLyogVGhpcyBpcyBhbGwgTnVCdXMgY2FyZHMgKi8KK2V4dGVybiBzdHJ1Y3QgbnVidXNfYm9hcmQqIG51YnVzX2JvYXJkczsKKworLyogR2VuZXJpYyBOdUJ1cyBpbnRlcmZhY2UgZnVuY3Rpb25zLCBtb2RlbGxlZCBhZnRlciB0aGUgUENJIGludGVyZmFjZSAqLwordm9pZCBudWJ1c19zY2FuX2J1cyh2b2lkKTsKK2V4dGVybiB2b2lkIG51YnVzX3Byb2NfaW5pdCh2b2lkKTsKK2ludCBnZXRfbnVidXNfbGlzdChjaGFyICpidWYpOworaW50IG51YnVzX3Byb2NfYXR0YWNoX2RldmljZShzdHJ1Y3QgbnVidXNfZGV2ICpkZXYpOworaW50IG51YnVzX3Byb2NfZGV0YWNoX2RldmljZShzdHJ1Y3QgbnVidXNfZGV2ICpkZXYpOworLyogSWYgd2UgbmVlZCBtb3JlIHByZWNpc2lvbiB3ZSBjYW4gYWRkIHNvbWUgbW9yZSBvZiB0aGVzZSAqLworc3RydWN0IG51YnVzX2RldiogbnVidXNfZmluZF9kZXZpY2UodW5zaWduZWQgc2hvcnQgY2F0ZWdvcnksCisJCQkJICAgIHVuc2lnbmVkIHNob3J0IHR5cGUsCisJCQkJICAgIHVuc2lnbmVkIHNob3J0IGRyX2h3LAorCQkJCSAgICB1bnNpZ25lZCBzaG9ydCBkcl9zdywKKwkJCQkgICAgY29uc3Qgc3RydWN0IG51YnVzX2RldiogZnJvbSk7CitzdHJ1Y3QgbnVidXNfZGV2KiBudWJ1c19maW5kX3R5cGUodW5zaWduZWQgc2hvcnQgY2F0ZWdvcnksCisJCQkJICB1bnNpZ25lZCBzaG9ydCB0eXBlLAorCQkJCSAgY29uc3Qgc3RydWN0IG51YnVzX2RldiogZnJvbSk7CisvKiBNaWdodCBoYXZlIG1vcmUgdGhhbiBvbmUgZGV2aWNlIGluIGEgc2xvdCwgeW91IGtub3cuLi4gKi8KK3N0cnVjdCBudWJ1c19kZXYqIG51YnVzX2ZpbmRfc2xvdCh1bnNpZ25lZCBpbnQgc2xvdCwKKwkJCQkgIGNvbnN0IHN0cnVjdCBudWJ1c19kZXYqIGZyb20pOworCisvKiBUaGVzZSBhcmUgc29tZXdoYXQgbW9yZSBOdUJ1cy1zcGVjaWZpYy4gIFRoZXkgYWxsIHJldHVybiAwIGZvcgorICAgc3VjY2VzcyBhbmQgLTEgZm9yIGZhaWx1cmUsIGFzIHlvdSdkIGV4cGVjdC4gKi8KKworLyogVGhlIHJvb3QgZGlyZWN0b3J5IHdoaWNoIGNvbnRhaW5zIHRoZSBib2FyZCBhbmQgZnVuY3Rpb25hbAorICAgZGlyZWN0b3JpZXMgKi8KK2ludCBudWJ1c19nZXRfcm9vdF9kaXIoY29uc3Qgc3RydWN0IG51YnVzX2JvYXJkKiBib2FyZCwKKwkJICAgICAgIHN0cnVjdCBudWJ1c19kaXIqIGRpcik7CisvKiBUaGUgYm9hcmQgZGlyZWN0b3J5ICovCitpbnQgbnVidXNfZ2V0X2JvYXJkX2Rpcihjb25zdCBzdHJ1Y3QgbnVidXNfYm9hcmQqIGJvYXJkLAorCQkJc3RydWN0IG51YnVzX2RpciogZGlyKTsKKy8qIFRoZSBmdW5jdGlvbmFsIGRpcmVjdG9yeSAqLworaW50IG51YnVzX2dldF9mdW5jX2Rpcihjb25zdCBzdHJ1Y3QgbnVidXNfZGV2KiBkZXYsCisJCSAgICAgICBzdHJ1Y3QgbnVidXNfZGlyKiBkaXIpOworCisvKiBUaGVzZSB3b3JrIG9uIGFueSBkaXJlY3RvcnkgZ290dGVuIHZpYSB0aGUgYWJvdmUgKi8KK2ludCBudWJ1c19yZWFkZGlyKHN0cnVjdCBudWJ1c19kaXIqIGRpciwKKwkJICBzdHJ1Y3QgbnVidXNfZGlyZW50KiBlbnQpOworaW50IG51YnVzX2ZpbmRfcnNyYyhzdHJ1Y3QgbnVidXNfZGlyKiBkaXIsCisJCSAgICB1bnNpZ25lZCBjaGFyIHJzcmNfdHlwZSwKKwkJICAgIHN0cnVjdCBudWJ1c19kaXJlbnQqIGVudCk7CitpbnQgbnVidXNfcmV3aW5kZGlyKHN0cnVjdCBudWJ1c19kaXIqIGRpcik7CisKKy8qIFRoaW5ncyB0byBkbyB3aXRoIGRpcmVjdG9yeSBlbnRyaWVzICovCitpbnQgbnVidXNfZ2V0X3N1YmRpcihjb25zdCBzdHJ1Y3QgbnVidXNfZGlyZW50KiBlbnQsCisJCSAgICAgc3RydWN0IG51YnVzX2RpciogZGlyKTsKK3ZvaWQgbnVidXNfZ2V0X3JzcmNfbWVtKHZvaWQqIGRlc3QsCisJCQljb25zdCBzdHJ1Y3QgbnVidXNfZGlyZW50ICpkaXJlbnQsCisJCQlpbnQgbGVuKTsKK3ZvaWQgbnVidXNfZ2V0X3JzcmNfc3RyKHZvaWQqIGRlc3QsCisJCQljb25zdCBzdHJ1Y3QgbnVidXNfZGlyZW50ICpkaXJlbnQsCisJCQlpbnQgbWF4bGVuKTsKKworLyogV2UnZCBsaWtlIHRvIGdldCByaWQgb2YgdGhpcyBldmVudHVhbGx5LiAgT25seSBkYXluYXBvcnQuYyB1c2VzIGl0IG5vdy4gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCAqbnVidXNfc2xvdF9hZGRyKGludCBzbG90KQoreworCXJldHVybiAodm9pZCAqKSgweEYwMDAwMDAwfChzbG90PDwyNCkpOworfQorCisjZW5kaWYgLyogTElOVVhfTlVCVVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9udW1hLmggYi9pbmNsdWRlL2xpbnV4L251bWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDBjOGM0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9udW1hLmgKQEAgLTAsMCArMSwxNiBAQAorI2lmbmRlZiBfTElOVVhfTlVNQV9ICisjZGVmaW5lIF9MSU5VWF9OVU1BX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjaWZkZWYgQ09ORklHX0RJU0NPTlRJR01FTQorI2luY2x1ZGUgPGFzbS9udW1ub2Rlcy5oPgorI2VuZGlmCisKKyNpZm5kZWYgTk9ERVNfU0hJRlQKKyNkZWZpbmUgTk9ERVNfU0hJRlQgICAgIDAKKyNlbmRpZgorCisjZGVmaW5lIE1BWF9OVU1OT0RFUyAgICAoMSA8PCBOT0RFU19TSElGVCkKKworI2VuZGlmIC8qIF9MSU5VWF9OVU1BX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbnZyYW0uaCBiL2luY2x1ZGUvbGludXgvbnZyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDMxZTQxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9udnJhbS5oCkBAIC0wLDAgKzEsMjcgQEAKKyNpZm5kZWYgX0xJTlVYX05WUkFNX0gKKyNkZWZpbmUgX0xJTlVYX05WUkFNX0gKKworI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisKKy8qIC9kZXYvbnZyYW0gaW9jdGxzICovCisjZGVmaW5lIE5WUkFNX0lOSVQJX0lPKCdwJywgMHg0MCkgLyogaW5pdGlhbGl6ZSBOVlJBTSBhbmQgc2V0IGNoZWNrc3VtICovCisjZGVmaW5lIE5WUkFNX1NFVENLUwlfSU8oJ3AnLCAweDQxKSAvKiByZWNhbGN1bGF0ZSBjaGVja3N1bSAqLworCisvKiBmb3IgYWxsIGN1cnJlbnQgc3lzdGVtcywgdGhpcyBpcyB3aGVyZSBOVlJBTSBzdGFydHMgKi8KKyNkZWZpbmUgTlZSQU1fRklSU1RfQllURSAgICAxNAorLyogYWxsIHRoZXNlIGZ1bmN0aW9ucyBleHBlY3QgYW4gTlZSQU0gb2Zmc2V0LCBub3QgYW4gYWJzb2x1dGUgKi8KKyNkZWZpbmUgTlZSQU1fT0ZGU0VUKHgpICAgKCh4KS1OVlJBTV9GSVJTVF9CWVRFKQorCisjaWZkZWYgX19LRVJORUxfXworLyogX19mb28gaXMgZm9vIHdpdGhvdXQgZ3JhYmJpbmcgdGhlIHJ0Y19sb2NrIC0gZ2V0IGl0IHlvdXJzZWxmICovCitleHRlcm4gdW5zaWduZWQgY2hhciBfX252cmFtX3JlYWRfYnl0ZShpbnQgaSk7CitleHRlcm4gdW5zaWduZWQgY2hhciBudnJhbV9yZWFkX2J5dGUoaW50IGkpOworZXh0ZXJuIHZvaWQgX19udnJhbV93cml0ZV9ieXRlKHVuc2lnbmVkIGNoYXIgYywgaW50IGkpOworZXh0ZXJuIHZvaWQgbnZyYW1fd3JpdGVfYnl0ZSh1bnNpZ25lZCBjaGFyIGMsIGludCBpKTsKK2V4dGVybiBpbnQgX19udnJhbV9jaGVja19jaGVja3N1bSh2b2lkKTsKK2V4dGVybiBpbnQgbnZyYW1fY2hlY2tfY2hlY2tzdW0odm9pZCk7CitleHRlcm4gdm9pZCBfX252cmFtX3NldF9jaGVja3N1bSh2b2lkKTsKK2V4dGVybiB2b2lkIG52cmFtX3NldF9jaGVja3N1bSh2b2lkKTsKKyNlbmRpZgorCisjZW5kaWYgIC8qIF9MSU5VWF9OVlJBTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L29wZW5wcm9tX2ZzLmggYi9pbmNsdWRlL2xpbnV4L29wZW5wcm9tX2ZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTgzN2FhYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvb3BlbnByb21fZnMuaApAQCAtMCwwICsxLDEwIEBACisjaWZuZGVmIF9MSU5VWF9PUEVOUFJPTV9GU19ICisjZGVmaW5lIF9MSU5VWF9PUEVOUFJPTV9GU19ICisKKy8qCisgKiBUaGUgb3BlbnByb20gZmlsZXN5c3RlbSBjb25zdGFudHMvc3RydWN0dXJlcworICovCisKKyNkZWZpbmUgT1BFTlBST01fU1VQRVJfTUFHSUMgMHg5ZmExCisKKyNlbmRpZiAvKiBfTElOVVhfT1BFTlBST01fRlNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9vcHJvZmlsZS5oIGIvaW5jbHVkZS9saW51eC9vcHJvZmlsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1OWM0YzMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L29wcm9maWxlLmgKQEAgLTAsMCArMSwxMTkgQEAKKy8qKgorICogQGZpbGUgb3Byb2ZpbGUuaAorICoKKyAqIEFQSSBmb3IgbWFjaGluZS1zcGVjaWZpYyBpbnRlcnJ1cHRzIHRvIGludGVyZmFjZQorICogdG8gb3Byb2ZpbGUuCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgSm9obiBMZXZvbiA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisgKi8KKworI2lmbmRlZiBPUFJPRklMRV9ICisjZGVmaW5lIE9QUk9GSUxFX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisgCitzdHJ1Y3Qgc3VwZXJfYmxvY2s7CitzdHJ1Y3QgZGVudHJ5Oworc3RydWN0IGZpbGVfb3BlcmF0aW9uczsKK3N0cnVjdCBwdF9yZWdzOworIAorLyogT3BlcmF0aW9ucyBzdHJ1Y3R1cmUgdG8gYmUgZmlsbGVkIGluICovCitzdHJ1Y3Qgb3Byb2ZpbGVfb3BlcmF0aW9ucyB7CisJLyogY3JlYXRlIGFueSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiBmaWxlcyBpbiB0aGUgb3Byb2ZpbGUgZnMuCisJICogT3B0aW9uYWwuICovCisJaW50ICgqY3JlYXRlX2ZpbGVzKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzYiwgc3RydWN0IGRlbnRyeSAqIHJvb3QpOworCS8qIERvIGFueSBuZWNlc3NhcnkgaW50ZXJydXB0IHNldHVwLiBPcHRpb25hbC4gKi8KKwlpbnQgKCpzZXR1cCkodm9pZCk7CisJLyogRG8gYW55IG5lY2Vzc2FyeSBpbnRlcnJ1cHQgc2h1dGRvd24uIE9wdGlvbmFsLiAqLworCXZvaWQgKCpzaHV0ZG93bikodm9pZCk7CisJLyogU3RhcnQgZGVsaXZlcmluZyBpbnRlcnJ1cHRzLiAqLworCWludCAoKnN0YXJ0KSh2b2lkKTsKKwkvKiBTdG9wIGRlbGl2ZXJpbmcgaW50ZXJydXB0cy4gKi8KKwl2b2lkICgqc3RvcCkodm9pZCk7CisJLyogSW5pdGlhdGUgYSBzdGFjayBiYWNrdHJhY2UuIE9wdGlvbmFsLiAqLworCXZvaWQgKCpiYWNrdHJhY2UpKHN0cnVjdCBwdF9yZWdzICogY29uc3QgcmVncywgdW5zaWduZWQgaW50IGRlcHRoKTsKKwkvKiBDUFUgaWRlbnRpZmljYXRpb24gc3RyaW5nLiAqLworCWNoYXIgKiBjcHVfdHlwZTsKK307CisKKy8qKgorICogT25lLXRpbWUgaW5pdGlhbGlzYXRpb24uICpvcHMgbXVzdCBiZSBzZXQgdG8gYSBmaWxsZWQtaW4KKyAqIG9wZXJhdGlvbnMgc3RydWN0dXJlLiBUaGlzIGlzIGNhbGxlZCBldmVuIGluIHRpbWVyIGludGVycnVwdAorICogbW9kZSBzbyBhbiBhcmNoIGNhbiBzZXQgYSBiYWNrdHJhY2UgY2FsbGJhY2suCisgKgorICogSWYgYW4gZXJyb3Igb2NjdXJzLCB0aGUgZmllbGRzIHNob3VsZCBiZSBsZWZ0IHVudG91Y2hlZC4KKyAqLworaW50IG9wcm9maWxlX2FyY2hfaW5pdChzdHJ1Y3Qgb3Byb2ZpbGVfb3BlcmF0aW9ucyAqIG9wcyk7CisgCisvKioKKyAqIE9uZS10aW1lIGV4aXQvY2xlYW51cCBmb3IgdGhlIGFyY2guCisgKi8KK3ZvaWQgb3Byb2ZpbGVfYXJjaF9leGl0KHZvaWQpOworCisvKioKKyAqIEFkZCBhIHNhbXBsZS4gVGhpcyBtYXkgYmUgY2FsbGVkIGZyb20gYW55IGNvbnRleHQuIFBhc3MKKyAqIHNtcF9wcm9jZXNzb3JfaWQoKSBhcyBjcHUuCisgKi8KK3ZvaWQgb3Byb2ZpbGVfYWRkX3NhbXBsZShzdHJ1Y3QgcHRfcmVncyAqIGNvbnN0IHJlZ3MsIHVuc2lnbmVkIGxvbmcgZXZlbnQpOworCisvKiBVc2UgdGhpcyBpbnN0ZWFkIHdoZW4gdGhlIFBDIHZhbHVlIGlzIG5vdCBmcm9tIHRoZSByZWdzLiBEb2Vzbid0CisgKiBiYWNrdHJhY2UuICovCit2b2lkIG9wcm9maWxlX2FkZF9wYyh1bnNpZ25lZCBsb25nIHBjLCBpbnQgaXNfa2VybmVsLCB1bnNpZ25lZCBsb25nIGV2ZW50KTsKKworLyogYWRkIGEgYmFja3RyYWNlIGVudHJ5LCB0byBiZSBjYWxsZWQgZnJvbSB0aGUgLT5iYWNrdHJhY2UgY2FsbGJhY2sgKi8KK3ZvaWQgb3Byb2ZpbGVfYWRkX3RyYWNlKHVuc2lnbmVkIGxvbmcgZWlwKTsKKworCisvKioKKyAqIENyZWF0ZSBhIGZpbGUgb2YgdGhlIGdpdmVuIG5hbWUgYXMgYSBjaGlsZCBvZiB0aGUgZ2l2ZW4gcm9vdCwgd2l0aAorICogdGhlIHNwZWNpZmllZCBmaWxlIG9wZXJhdGlvbnMuCisgKi8KK2ludCBvcHJvZmlsZWZzX2NyZWF0ZV9maWxlKHN0cnVjdCBzdXBlcl9ibG9jayAqIHNiLCBzdHJ1Y3QgZGVudHJ5ICogcm9vdCwKKwljaGFyIGNvbnN0ICogbmFtZSwgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqIGZvcHMpOworCitpbnQgb3Byb2ZpbGVmc19jcmVhdGVfZmlsZV9wZXJtKHN0cnVjdCBzdXBlcl9ibG9jayAqIHNiLCBzdHJ1Y3QgZGVudHJ5ICogcm9vdCwKKwljaGFyIGNvbnN0ICogbmFtZSwgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqIGZvcHMsIGludCBwZXJtKTsKKyAKKy8qKiBDcmVhdGUgYSBmaWxlIGZvciByZWFkL3dyaXRlIGFjY2VzcyB0byBhbiB1bnNpZ25lZCBsb25nLiAqLworaW50IG9wcm9maWxlZnNfY3JlYXRlX3Vsb25nKHN0cnVjdCBzdXBlcl9ibG9jayAqIHNiLCBzdHJ1Y3QgZGVudHJ5ICogcm9vdCwKKwljaGFyIGNvbnN0ICogbmFtZSwgdWxvbmcgKiB2YWwpOworIAorLyoqIENyZWF0ZSBhIGZpbGUgZm9yIHJlYWQtb25seSBhY2Nlc3MgdG8gYW4gdW5zaWduZWQgbG9uZy4gKi8KK2ludCBvcHJvZmlsZWZzX2NyZWF0ZV9yb191bG9uZyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzYiwgc3RydWN0IGRlbnRyeSAqIHJvb3QsCisJY2hhciBjb25zdCAqIG5hbWUsIHVsb25nICogdmFsKTsKKyAKKy8qKiBDcmVhdGUgYSBmaWxlIGZvciByZWFkLW9ubHkgYWNjZXNzIHRvIGFuIGF0b21pY190LiAqLworaW50IG9wcm9maWxlZnNfY3JlYXRlX3JvX2F0b21pYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzYiwgc3RydWN0IGRlbnRyeSAqIHJvb3QsCisJY2hhciBjb25zdCAqIG5hbWUsIGF0b21pY190ICogdmFsKTsKKyAKKy8qKiBjcmVhdGUgYSBkaXJlY3RvcnkgKi8KK3N0cnVjdCBkZW50cnkgKiBvcHJvZmlsZWZzX21rZGlyKHN0cnVjdCBzdXBlcl9ibG9jayAqIHNiLCBzdHJ1Y3QgZGVudHJ5ICogcm9vdCwKKwljaGFyIGNvbnN0ICogbmFtZSk7CisKKy8qKgorICogV3JpdGUgdGhlIGdpdmVuIGFzY2l6IHN0cmluZyB0byB0aGUgZ2l2ZW4gdXNlciBidWZmZXIgQGJ1ZiwgdXBkYXRpbmcgKm9mZnNldAorICogYXBwcm9wcmlhdGVseS4gUmV0dXJucyBieXRlcyB3cml0dGVuIG9yIC1FRkFVTFQuCisgKi8KK3NzaXplX3Qgb3Byb2ZpbGVmc19zdHJfdG9fdXNlcihjaGFyIGNvbnN0ICogc3RyLCBjaGFyIF9fdXNlciAqIGJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKiBvZmZzZXQpOworCisvKioKKyAqIENvbnZlcnQgYW4gdW5zaWduZWQgbG9uZyB2YWx1ZSBpbnRvIEFTQ0lJIGFuZCBjb3B5IGl0IHRvIHRoZSB1c2VyIGJ1ZmZlciBAYnVmLAorICogdXBkYXRpbmcgKm9mZnNldCBhcHByb3ByaWF0ZWx5LiBSZXR1cm5zIGJ5dGVzIHdyaXR0ZW4gb3IgLUVGQVVMVC4KKyAqLworc3NpemVfdCBvcHJvZmlsZWZzX3Vsb25nX3RvX3VzZXIodW5zaWduZWQgbG9uZyB2YWwsIGNoYXIgX191c2VyICogYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqIG9mZnNldCk7CisKKy8qKgorICogUmVhZCBhbiBBU0NJSSBzdHJpbmcgZm9yIGEgbnVtYmVyIGZyb20gYSB1c2Vyc3BhY2UgYnVmZmVyIGFuZCBmaWxsICp2YWwgb24gc3VjY2Vzcy4KKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCA8IDAgb24gZXJyb3IuCisgKi8KK2ludCBvcHJvZmlsZWZzX3Vsb25nX2Zyb21fdXNlcih1bnNpZ25lZCBsb25nICogdmFsLCBjaGFyIGNvbnN0IF9fdXNlciAqIGJ1Ziwgc2l6ZV90IGNvdW50KTsKKworLyoqIGxvY2sgZm9yIHJlYWQvd3JpdGUgc2FmZXR5ICovCitleHRlcm4gc3BpbmxvY2tfdCBvcHJvZmlsZWZzX2xvY2s7CisgCisjZW5kaWYgLyogT1BST0ZJTEVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Yjc0ZmNmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgKQEAgLTAsMCArMSwzMjQgQEAKKy8qCisgKiBNYWNyb3MgZm9yIG1hbmlwdWxhdGluZyBhbmQgdGVzdGluZyBwYWdlLT5mbGFncworICovCisKKyNpZm5kZWYgUEFHRV9GTEFHU19ICisjZGVmaW5lIFBBR0VfRkxBR1NfSAorCisjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorCisvKgorICogVmFyaW91cyBwYWdlLT5mbGFncyBiaXRzOgorICoKKyAqIFBHX3Jlc2VydmVkIGlzIHNldCBmb3Igc3BlY2lhbCBwYWdlcywgd2hpY2ggY2FuIG5ldmVyIGJlIHN3YXBwZWQgb3V0LiBTb21lCisgKiBvZiB0aGVtIG1pZ2h0IG5vdCBldmVuIGV4aXN0IChlZyBlbXB0eV9iYWRfcGFnZSkuLi4KKyAqCisgKiBUaGUgUEdfcHJpdmF0ZSBiaXRmbGFnIGlzIHNldCBpZiBwYWdlLT5wcml2YXRlIGNvbnRhaW5zIGEgdmFsaWQgdmFsdWUuCisgKgorICogRHVyaW5nIGRpc2sgSS9PLCBQR19sb2NrZWQgaXMgdXNlZC4gVGhpcyBiaXQgaXMgc2V0IGJlZm9yZSBJL08gYW5kCisgKiByZXNldCB3aGVuIEkvTyBjb21wbGV0ZXMuIHBhZ2Vfd2FpdHF1ZXVlKHBhZ2UpIGlzIGEgd2FpdCBxdWV1ZSBvZiBhbGwgdGFza3MKKyAqIHdhaXRpbmcgZm9yIHRoZSBJL08gb24gdGhpcyBwYWdlIHRvIGNvbXBsZXRlLgorICoKKyAqIFBHX3VwdG9kYXRlIHRlbGxzIHdoZXRoZXIgdGhlIHBhZ2UncyBjb250ZW50cyBpcyB2YWxpZC4gIFdoZW4gYSByZWFkCisgKiBjb21wbGV0ZXMsIHRoZSBwYWdlIGJlY29tZXMgdXB0b2RhdGUsIHVubGVzcyBhIGRpc2sgSS9PIGVycm9yIGhhcHBlbmVkLgorICoKKyAqIEZvciBjaG9vc2luZyB3aGljaCBwYWdlcyB0byBzd2FwIG91dCwgaW5vZGUgcGFnZXMgY2FycnkgYSBQR19yZWZlcmVuY2VkIGJpdCwKKyAqIHdoaWNoIGlzIHNldCBhbnkgdGltZSB0aGUgc3lzdGVtIGFjY2Vzc2VzIHRoYXQgcGFnZSB0aHJvdWdoIHRoZSAobWFwcGluZywKKyAqIGluZGV4KSBoYXNoIHRhYmxlLiAgVGhpcyByZWZlcmVuY2VkIGJpdCwgdG9nZXRoZXIgd2l0aCB0aGUgcmVmZXJlbmNlZCBiaXQKKyAqIGluIHRoZSBwYWdlIHRhYmxlcywgaXMgdXNlZCB0byBtYW5pcHVsYXRlIHBhZ2UtPmFnZSBhbmQgbW92ZSB0aGUgcGFnZSBhY3Jvc3MKKyAqIHRoZSBhY3RpdmUsIGluYWN0aXZlX2RpcnR5IGFuZCBpbmFjdGl2ZV9jbGVhbiBsaXN0cy4KKyAqCisgKiBOb3RlIHRoYXQgdGhlIHJlZmVyZW5jZWQgYml0LCB0aGUgcGFnZS0+bHJ1IGxpc3RfaGVhZCBhbmQgdGhlIGFjdGl2ZSwKKyAqIGluYWN0aXZlX2RpcnR5IGFuZCBpbmFjdGl2ZV9jbGVhbiBsaXN0cyBhcmUgcHJvdGVjdGVkIGJ5IHRoZQorICogem9uZS0+bHJ1X2xvY2ssIGFuZCAqTk9UKiBieSB0aGUgdXN1YWwgUEdfbG9ja2VkIGJpdCEKKyAqCisgKiBQR19lcnJvciBpcyBzZXQgdG8gaW5kaWNhdGUgdGhhdCBhbiBJL08gZXJyb3Igb2NjdXJyZWQgb24gdGhpcyBwYWdlLgorICoKKyAqIFBHX2FyY2hfMSBpcyBhbiBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgcGFnZSBzdGF0ZSBiaXQuICBUaGUgZ2VuZXJpYyBjb2RlCisgKiBndWFyYW50ZWVzIHRoYXQgdGhpcyBiaXQgaXMgY2xlYXJlZCBmb3IgYSBwYWdlIHdoZW4gaXQgZmlyc3QgaXMgZW50ZXJlZCBpbnRvCisgKiB0aGUgcGFnZSBjYWNoZS4KKyAqCisgKiBQR19oaWdobWVtIHBhZ2VzIGFyZSBub3QgcGVybWFuZW50bHkgbWFwcGVkIGludG8gdGhlIGtlcm5lbCB2aXJ0dWFsIGFkZHJlc3MKKyAqIHNwYWNlLCB0aGV5IG5lZWQgdG8gYmUga21hcHBlZCBzZXBhcmF0ZWx5IGZvciBkb2luZyBJTyBvbiB0aGUgcGFnZXMuICBUaGUKKyAqIHN0cnVjdCBwYWdlICh0aGVzZSBiaXRzIHdpdGggaW5mb3JtYXRpb24pIGFyZSBhbHdheXMgbWFwcGVkIGludG8ga2VybmVsCisgKiBhZGRyZXNzIHNwYWNlLi4uCisgKi8KKworLyoKKyAqIERvbid0IHVzZSB0aGUgKl9kb250dXNlIGZsYWdzLiAgVXNlIHRoZSBtYWNyb3MuICBPdGhlcndpc2UgeW91J2xsIGJyZWFrCisgKiBsb2NrZWQtIGFuZCBkaXJ0eS1wYWdlIGFjY291bnRpbmcuICBUaGUgdG9wIGVpZ2h0IGJpdHMgb2YgcGFnZS0+ZmxhZ3MgYXJlCisgKiB1c2VkIGZvciBwYWdlLT56b25lLCBzbyBwdXR0aW5nIGZsYWcgYml0cyB0aGVyZSBkb2Vzbid0IHdvcmsuCisgKi8KKyNkZWZpbmUgUEdfbG9ja2VkCSAJIDAJLyogUGFnZSBpcyBsb2NrZWQuIERvbid0IHRvdWNoLiAqLworI2RlZmluZSBQR19lcnJvcgkJIDEKKyNkZWZpbmUgUEdfcmVmZXJlbmNlZAkJIDIKKyNkZWZpbmUgUEdfdXB0b2RhdGUJCSAzCisKKyNkZWZpbmUgUEdfZGlydHkJIAkgNAorI2RlZmluZSBQR19scnUJCQkgNQorI2RlZmluZSBQR19hY3RpdmUJCSA2CisjZGVmaW5lIFBHX3NsYWIJCQkgNwkvKiBzbGFiIGRlYnVnIChTdXBhcm5hIHdhbnRzIHRoaXMpICovCisKKyNkZWZpbmUgUEdfaGlnaG1lbQkJIDgKKyNkZWZpbmUgUEdfY2hlY2tlZAkJIDkJLyoga2lsbCBtZSBpbiAyLjUuPGVhcmx5Pi4gKi8KKyNkZWZpbmUgUEdfYXJjaF8xCQkxMAorI2RlZmluZSBQR19yZXNlcnZlZAkJMTEKKworI2RlZmluZSBQR19wcml2YXRlCQkxMgkvKiBIYXMgc29tZXRoaW5nIGF0IC0+cHJpdmF0ZSAqLworI2RlZmluZSBQR193cml0ZWJhY2sJCTEzCS8qIFBhZ2UgaXMgdW5kZXIgd3JpdGViYWNrICovCisjZGVmaW5lIFBHX25vc2F2ZQkJMTQJLyogVXNlZCBmb3Igc3lzdGVtIHN1c3BlbmQvcmVzdW1lICovCisjZGVmaW5lIFBHX2NvbXBvdW5kCQkxNQkvKiBQYXJ0IG9mIGEgY29tcG91bmQgcGFnZSAqLworCisjZGVmaW5lIFBHX3N3YXBjYWNoZQkJMTYJLyogU3dhcCBwYWdlOiBzd3BfZW50cnlfdCBpbiBwcml2YXRlICovCisjZGVmaW5lIFBHX21hcHBlZHRvZGlzawkJMTcJLyogSGFzIGJsb2NrcyBhbGxvY2F0ZWQgb24tZGlzayAqLworI2RlZmluZSBQR19yZWNsYWltCQkxOAkvKiBUbyBiZSByZWNsYWltZWQgYXNhcCAqLworI2RlZmluZSBQR19ub3NhdmVfZnJlZQkJMTkJLyogRnJlZSwgc2hvdWxkIG5vdCBiZSB3cml0dGVuICovCisjZGVmaW5lIFBHX3VuY2FjaGVkCQkyMAkvKiBQYWdlIGhhcyBiZWVuIG1hcHBlZCBhcyB1bmNhY2hlZCAqLworCisvKgorICogR2xvYmFsIHBhZ2UgYWNjb3VudGluZy4gIE9uZSBpbnN0YW5jZSBwZXIgQ1BVLiAgT25seSB1bnNpZ25lZCBsb25ncyBhcmUKKyAqIGFsbG93ZWQuCisgKi8KK3N0cnVjdCBwYWdlX3N0YXRlIHsKKwl1bnNpZ25lZCBsb25nIG5yX2RpcnR5OwkJLyogRGlydHkgd3JpdGVhYmxlIHBhZ2VzICovCisJdW5zaWduZWQgbG9uZyBucl93cml0ZWJhY2s7CS8qIFBhZ2VzIHVuZGVyIHdyaXRlYmFjayAqLworCXVuc2lnbmVkIGxvbmcgbnJfdW5zdGFibGU7CS8qIE5GUyB1bnN0YWJsZSBwYWdlcyAqLworCXVuc2lnbmVkIGxvbmcgbnJfcGFnZV90YWJsZV9wYWdlczsvKiBQYWdlcyB1c2VkIGZvciBwYWdldGFibGVzICovCisJdW5zaWduZWQgbG9uZyBucl9tYXBwZWQ7CS8qIG1hcHBlZCBpbnRvIHBhZ2V0YWJsZXMgKi8KKwl1bnNpZ25lZCBsb25nIG5yX3NsYWI7CQkvKiBJbiBzbGFiICovCisjZGVmaW5lIEdFVF9QQUdFX1NUQVRFX0xBU1QgbnJfc2xhYgorCisJLyoKKwkgKiBUaGUgYmVsb3cgYXJlIHplcm9lZCBieSBnZXRfcGFnZV9zdGF0ZSgpLiAgVXNlIGdldF9mdWxsX3BhZ2Vfc3RhdGUoKQorCSAqIHRvIGFkZCB1cCBhbGwgdGhlc2UuCisJICovCisJdW5zaWduZWQgbG9uZyBwZ3BnaW47CQkvKiBEaXNrIHJlYWRzICovCisJdW5zaWduZWQgbG9uZyBwZ3Bnb3V0OwkJLyogRGlzayB3cml0ZXMgKi8KKwl1bnNpZ25lZCBsb25nIHBzd3BpbjsJCS8qIHN3YXAgcmVhZHMgKi8KKwl1bnNpZ25lZCBsb25nIHBzd3BvdXQ7CQkvKiBzd2FwIHdyaXRlcyAqLworCXVuc2lnbmVkIGxvbmcgcGdhbGxvY19oaWdoOwkvKiBwYWdlIGFsbG9jYXRpb25zICovCisKKwl1bnNpZ25lZCBsb25nIHBnYWxsb2Nfbm9ybWFsOworCXVuc2lnbmVkIGxvbmcgcGdhbGxvY19kbWE7CisJdW5zaWduZWQgbG9uZyBwZ2ZyZWU7CQkvKiBwYWdlIGZyZWVpbmdzICovCisJdW5zaWduZWQgbG9uZyBwZ2FjdGl2YXRlOwkvKiBwYWdlcyBtb3ZlZCBpbmFjdGl2ZS0+YWN0aXZlICovCisJdW5zaWduZWQgbG9uZyBwZ2RlYWN0aXZhdGU7CS8qIHBhZ2VzIG1vdmVkIGFjdGl2ZS0+aW5hY3RpdmUgKi8KKworCXVuc2lnbmVkIGxvbmcgcGdmYXVsdDsJCS8qIGZhdWx0cyAobWFqb3IrbWlub3IpICovCisJdW5zaWduZWQgbG9uZyBwZ21hamZhdWx0OwkvKiBmYXVsdHMgKG1ham9yIG9ubHkpICovCisJdW5zaWduZWQgbG9uZyBwZ3JlZmlsbF9oaWdoOwkvKiBpbnNwZWN0ZWQgaW4gcmVmaWxsX2luYWN0aXZlX3pvbmUgKi8KKwl1bnNpZ25lZCBsb25nIHBncmVmaWxsX25vcm1hbDsKKwl1bnNpZ25lZCBsb25nIHBncmVmaWxsX2RtYTsKKworCXVuc2lnbmVkIGxvbmcgcGdzdGVhbF9oaWdoOwkvKiB0b3RhbCBoaWdobWVtIHBhZ2VzIHJlY2xhaW1lZCAqLworCXVuc2lnbmVkIGxvbmcgcGdzdGVhbF9ub3JtYWw7CisJdW5zaWduZWQgbG9uZyBwZ3N0ZWFsX2RtYTsKKwl1bnNpZ25lZCBsb25nIHBnc2Nhbl9rc3dhcGRfaGlnaDsvKiB0b3RhbCBoaWdobWVtIHBhZ2VzIHNjYW5uZWQgKi8KKwl1bnNpZ25lZCBsb25nIHBnc2Nhbl9rc3dhcGRfbm9ybWFsOworCisJdW5zaWduZWQgbG9uZyBwZ3NjYW5fa3N3YXBkX2RtYTsKKwl1bnNpZ25lZCBsb25nIHBnc2Nhbl9kaXJlY3RfaGlnaDsvKiB0b3RhbCBoaWdobWVtIHBhZ2VzIHNjYW5uZWQgKi8KKwl1bnNpZ25lZCBsb25nIHBnc2Nhbl9kaXJlY3Rfbm9ybWFsOworCXVuc2lnbmVkIGxvbmcgcGdzY2FuX2RpcmVjdF9kbWE7CisJdW5zaWduZWQgbG9uZyBwZ2lub2Rlc3RlYWw7CS8qIHBhZ2VzIHJlY2xhaW1lZCB2aWEgaW5vZGUgZnJlZWluZyAqLworCisJdW5zaWduZWQgbG9uZyBzbGFic19zY2FubmVkOwkvKiBzbGFiIG9iamVjdHMgc2Nhbm5lZCAqLworCXVuc2lnbmVkIGxvbmcga3N3YXBkX3N0ZWFsOwkvKiBwYWdlcyByZWNsYWltZWQgYnkga3N3YXBkICovCisJdW5zaWduZWQgbG9uZyBrc3dhcGRfaW5vZGVzdGVhbDsvKiByZWNsYWltZWQgdmlhIGtzd2FwZCBpbm9kZSBmcmVlaW5nICovCisJdW5zaWduZWQgbG9uZyBwYWdlb3V0cnVuOwkvKiBrc3dhcGQncyBjYWxscyB0byBwYWdlIHJlY2xhaW0gKi8KKwl1bnNpZ25lZCBsb25nIGFsbG9jc3RhbGw7CS8qIGRpcmVjdCByZWNsYWltIGNhbGxzICovCisKKwl1bnNpZ25lZCBsb25nIHBncm90YXRlZDsJLyogcGFnZXMgcm90YXRlZCB0byB0YWlsIG9mIHRoZSBMUlUgKi8KK307CisKK2V4dGVybiB2b2lkIGdldF9wYWdlX3N0YXRlKHN0cnVjdCBwYWdlX3N0YXRlICpyZXQpOworZXh0ZXJuIHZvaWQgZ2V0X2Z1bGxfcGFnZV9zdGF0ZShzdHJ1Y3QgcGFnZV9zdGF0ZSAqcmV0KTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fcmVhZF9wYWdlX3N0YXRlKHVuc2lnbmVkIG9mZnNldCk7CitleHRlcm4gdm9pZCBfX21vZF9wYWdlX3N0YXRlKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbG9uZyBkZWx0YSk7CisKKyNkZWZpbmUgcmVhZF9wYWdlX3N0YXRlKG1lbWJlcikgXAorCV9fcmVhZF9wYWdlX3N0YXRlKG9mZnNldG9mKHN0cnVjdCBwYWdlX3N0YXRlLCBtZW1iZXIpKQorCisjZGVmaW5lIG1vZF9wYWdlX3N0YXRlKG1lbWJlciwgZGVsdGEpCVwKKwlfX21vZF9wYWdlX3N0YXRlKG9mZnNldG9mKHN0cnVjdCBwYWdlX3N0YXRlLCBtZW1iZXIpLCAoZGVsdGEpKQorCisjZGVmaW5lIGluY19wYWdlX3N0YXRlKG1lbWJlcikJbW9kX3BhZ2Vfc3RhdGUobWVtYmVyLCAxVUwpCisjZGVmaW5lIGRlY19wYWdlX3N0YXRlKG1lbWJlcikJbW9kX3BhZ2Vfc3RhdGUobWVtYmVyLCAwVUwgLSAxKQorI2RlZmluZSBhZGRfcGFnZV9zdGF0ZShtZW1iZXIsZGVsdGEpIG1vZF9wYWdlX3N0YXRlKG1lbWJlciwgKGRlbHRhKSkKKyNkZWZpbmUgc3ViX3BhZ2Vfc3RhdGUobWVtYmVyLGRlbHRhKSBtb2RfcGFnZV9zdGF0ZShtZW1iZXIsIDBVTCAtIChkZWx0YSkpCisKKyNkZWZpbmUgbW9kX3BhZ2Vfc3RhdGVfem9uZSh6b25lLCBtZW1iZXIsIGRlbHRhKQkJCQlcCisJZG8gewkJCQkJCQkJCVwKKwkJdW5zaWduZWQgb2Zmc2V0OwkJCQkJCVwKKwkJaWYgKGlzX2hpZ2htZW0oem9uZSkpCQkJCQkJXAorCQkJb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHBhZ2Vfc3RhdGUsIG1lbWJlciMjX2hpZ2gpOwlcCisJCWVsc2UgaWYgKGlzX25vcm1hbCh6b25lKSkJCQkJCVwKKwkJCW9mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBwYWdlX3N0YXRlLCBtZW1iZXIjI19ub3JtYWwpOwlcCisJCWVsc2UJCQkJCQkJCVwKKwkJCW9mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBwYWdlX3N0YXRlLCBtZW1iZXIjI19kbWEpOwlcCisJCV9fbW9kX3BhZ2Vfc3RhdGUob2Zmc2V0LCAoZGVsdGEpKTsJCQkJXAorCX0gd2hpbGUgKDApCisKKy8qCisgKiBNYW5pcHVsYXRpb24gb2YgcGFnZSBzdGF0ZSBmbGFncworICovCisjZGVmaW5lIFBhZ2VMb2NrZWQocGFnZSkJCVwKKwkJdGVzdF9iaXQoUEdfbG9ja2VkLCAmKHBhZ2UpLT5mbGFncykKKyNkZWZpbmUgU2V0UGFnZUxvY2tlZChwYWdlKQkJXAorCQlzZXRfYml0KFBHX2xvY2tlZCwgJihwYWdlKS0+ZmxhZ3MpCisjZGVmaW5lIFRlc3RTZXRQYWdlTG9ja2VkKHBhZ2UpCQlcCisJCXRlc3RfYW5kX3NldF9iaXQoUEdfbG9ja2VkLCAmKHBhZ2UpLT5mbGFncykKKyNkZWZpbmUgQ2xlYXJQYWdlTG9ja2VkKHBhZ2UpCQlcCisJCWNsZWFyX2JpdChQR19sb2NrZWQsICYocGFnZSktPmZsYWdzKQorI2RlZmluZSBUZXN0Q2xlYXJQYWdlTG9ja2VkKHBhZ2UpCVwKKwkJdGVzdF9hbmRfY2xlYXJfYml0KFBHX2xvY2tlZCwgJihwYWdlKS0+ZmxhZ3MpCisKKyNkZWZpbmUgUGFnZUVycm9yKHBhZ2UpCQl0ZXN0X2JpdChQR19lcnJvciwgJihwYWdlKS0+ZmxhZ3MpCisjZGVmaW5lIFNldFBhZ2VFcnJvcihwYWdlKQlzZXRfYml0KFBHX2Vycm9yLCAmKHBhZ2UpLT5mbGFncykKKyNkZWZpbmUgQ2xlYXJQYWdlRXJyb3IocGFnZSkJY2xlYXJfYml0KFBHX2Vycm9yLCAmKHBhZ2UpLT5mbGFncykKKworI2RlZmluZSBQYWdlUmVmZXJlbmNlZChwYWdlKQl0ZXN0X2JpdChQR19yZWZlcmVuY2VkLCAmKHBhZ2UpLT5mbGFncykKKyNkZWZpbmUgU2V0UGFnZVJlZmVyZW5jZWQocGFnZSkJc2V0X2JpdChQR19yZWZlcmVuY2VkLCAmKHBhZ2UpLT5mbGFncykKKyNkZWZpbmUgQ2xlYXJQYWdlUmVmZXJlbmNlZChwYWdlKQljbGVhcl9iaXQoUEdfcmVmZXJlbmNlZCwgJihwYWdlKS0+ZmxhZ3MpCisjZGVmaW5lIFRlc3RDbGVhclBhZ2VSZWZlcmVuY2VkKHBhZ2UpIHRlc3RfYW5kX2NsZWFyX2JpdChQR19yZWZlcmVuY2VkLCAmKHBhZ2UpLT5mbGFncykKKworI2RlZmluZSBQYWdlVXB0b2RhdGUocGFnZSkJdGVzdF9iaXQoUEdfdXB0b2RhdGUsICYocGFnZSktPmZsYWdzKQorI2lmbmRlZiBTZXRQYWdlVXB0b2RhdGUKKyNkZWZpbmUgU2V0UGFnZVVwdG9kYXRlKHBhZ2UpCXNldF9iaXQoUEdfdXB0b2RhdGUsICYocGFnZSktPmZsYWdzKQorI2VuZGlmCisjZGVmaW5lIENsZWFyUGFnZVVwdG9kYXRlKHBhZ2UpCWNsZWFyX2JpdChQR191cHRvZGF0ZSwgJihwYWdlKS0+ZmxhZ3MpCisKKyNkZWZpbmUgUGFnZURpcnR5KHBhZ2UpCQl0ZXN0X2JpdChQR19kaXJ0eSwgJihwYWdlKS0+ZmxhZ3MpCisjZGVmaW5lIFNldFBhZ2VEaXJ0eShwYWdlKQlzZXRfYml0KFBHX2RpcnR5LCAmKHBhZ2UpLT5mbGFncykKKyNkZWZpbmUgVGVzdFNldFBhZ2VEaXJ0eShwYWdlKQl0ZXN0X2FuZF9zZXRfYml0KFBHX2RpcnR5LCAmKHBhZ2UpLT5mbGFncykKKyNkZWZpbmUgQ2xlYXJQYWdlRGlydHkocGFnZSkJY2xlYXJfYml0KFBHX2RpcnR5LCAmKHBhZ2UpLT5mbGFncykKKyNkZWZpbmUgVGVzdENsZWFyUGFnZURpcnR5KHBhZ2UpIHRlc3RfYW5kX2NsZWFyX2JpdChQR19kaXJ0eSwgJihwYWdlKS0+ZmxhZ3MpCisKKyNkZWZpbmUgU2V0UGFnZUxSVShwYWdlKQlzZXRfYml0KFBHX2xydSwgJihwYWdlKS0+ZmxhZ3MpCisjZGVmaW5lIFBhZ2VMUlUocGFnZSkJCXRlc3RfYml0KFBHX2xydSwgJihwYWdlKS0+ZmxhZ3MpCisjZGVmaW5lIFRlc3RTZXRQYWdlTFJVKHBhZ2UpCXRlc3RfYW5kX3NldF9iaXQoUEdfbHJ1LCAmKHBhZ2UpLT5mbGFncykKKyNkZWZpbmUgVGVzdENsZWFyUGFnZUxSVShwYWdlKQl0ZXN0X2FuZF9jbGVhcl9iaXQoUEdfbHJ1LCAmKHBhZ2UpLT5mbGFncykKKworI2RlZmluZSBQYWdlQWN0aXZlKHBhZ2UpCXRlc3RfYml0KFBHX2FjdGl2ZSwgJihwYWdlKS0+ZmxhZ3MpCisjZGVmaW5lIFNldFBhZ2VBY3RpdmUocGFnZSkJc2V0X2JpdChQR19hY3RpdmUsICYocGFnZSktPmZsYWdzKQorI2RlZmluZSBDbGVhclBhZ2VBY3RpdmUocGFnZSkJY2xlYXJfYml0KFBHX2FjdGl2ZSwgJihwYWdlKS0+ZmxhZ3MpCisjZGVmaW5lIFRlc3RDbGVhclBhZ2VBY3RpdmUocGFnZSkgdGVzdF9hbmRfY2xlYXJfYml0KFBHX2FjdGl2ZSwgJihwYWdlKS0+ZmxhZ3MpCisjZGVmaW5lIFRlc3RTZXRQYWdlQWN0aXZlKHBhZ2UpIHRlc3RfYW5kX3NldF9iaXQoUEdfYWN0aXZlLCAmKHBhZ2UpLT5mbGFncykKKworI2RlZmluZSBQYWdlU2xhYihwYWdlKQkJdGVzdF9iaXQoUEdfc2xhYiwgJihwYWdlKS0+ZmxhZ3MpCisjZGVmaW5lIFNldFBhZ2VTbGFiKHBhZ2UpCXNldF9iaXQoUEdfc2xhYiwgJihwYWdlKS0+ZmxhZ3MpCisjZGVmaW5lIENsZWFyUGFnZVNsYWIocGFnZSkJY2xlYXJfYml0KFBHX3NsYWIsICYocGFnZSktPmZsYWdzKQorI2RlZmluZSBUZXN0Q2xlYXJQYWdlU2xhYihwYWdlKQl0ZXN0X2FuZF9jbGVhcl9iaXQoUEdfc2xhYiwgJihwYWdlKS0+ZmxhZ3MpCisjZGVmaW5lIFRlc3RTZXRQYWdlU2xhYihwYWdlKQl0ZXN0X2FuZF9zZXRfYml0KFBHX3NsYWIsICYocGFnZSktPmZsYWdzKQorCisjaWZkZWYgQ09ORklHX0hJR0hNRU0KKyNkZWZpbmUgUGFnZUhpZ2hNZW0ocGFnZSkJdGVzdF9iaXQoUEdfaGlnaG1lbSwgJihwYWdlKS0+ZmxhZ3MpCisjZWxzZQorI2RlZmluZSBQYWdlSGlnaE1lbShwYWdlKQkwIC8qIG5lZWRlZCB0byBvcHRpbWl6ZSBhd2F5IGF0IGNvbXBpbGUgdGltZSAqLworI2VuZGlmCisKKyNkZWZpbmUgUGFnZUNoZWNrZWQocGFnZSkJdGVzdF9iaXQoUEdfY2hlY2tlZCwgJihwYWdlKS0+ZmxhZ3MpCisjZGVmaW5lIFNldFBhZ2VDaGVja2VkKHBhZ2UpCXNldF9iaXQoUEdfY2hlY2tlZCwgJihwYWdlKS0+ZmxhZ3MpCisjZGVmaW5lIENsZWFyUGFnZUNoZWNrZWQocGFnZSkJY2xlYXJfYml0KFBHX2NoZWNrZWQsICYocGFnZSktPmZsYWdzKQorCisjZGVmaW5lIFBhZ2VSZXNlcnZlZChwYWdlKQl0ZXN0X2JpdChQR19yZXNlcnZlZCwgJihwYWdlKS0+ZmxhZ3MpCisjZGVmaW5lIFNldFBhZ2VSZXNlcnZlZChwYWdlKQlzZXRfYml0KFBHX3Jlc2VydmVkLCAmKHBhZ2UpLT5mbGFncykKKyNkZWZpbmUgQ2xlYXJQYWdlUmVzZXJ2ZWQocGFnZSkJY2xlYXJfYml0KFBHX3Jlc2VydmVkLCAmKHBhZ2UpLT5mbGFncykKKyNkZWZpbmUgX19DbGVhclBhZ2VSZXNlcnZlZChwYWdlKQlfX2NsZWFyX2JpdChQR19yZXNlcnZlZCwgJihwYWdlKS0+ZmxhZ3MpCisKKyNkZWZpbmUgU2V0UGFnZVByaXZhdGUocGFnZSkJc2V0X2JpdChQR19wcml2YXRlLCAmKHBhZ2UpLT5mbGFncykKKyNkZWZpbmUgQ2xlYXJQYWdlUHJpdmF0ZShwYWdlKQljbGVhcl9iaXQoUEdfcHJpdmF0ZSwgJihwYWdlKS0+ZmxhZ3MpCisjZGVmaW5lIFBhZ2VQcml2YXRlKHBhZ2UpCXRlc3RfYml0KFBHX3ByaXZhdGUsICYocGFnZSktPmZsYWdzKQorI2RlZmluZSBfX1NldFBhZ2VQcml2YXRlKHBhZ2UpICBfX3NldF9iaXQoUEdfcHJpdmF0ZSwgJihwYWdlKS0+ZmxhZ3MpCisjZGVmaW5lIF9fQ2xlYXJQYWdlUHJpdmF0ZShwYWdlKSBfX2NsZWFyX2JpdChQR19wcml2YXRlLCAmKHBhZ2UpLT5mbGFncykKKworI2RlZmluZSBQYWdlV3JpdGViYWNrKHBhZ2UpCXRlc3RfYml0KFBHX3dyaXRlYmFjaywgJihwYWdlKS0+ZmxhZ3MpCisjZGVmaW5lIFNldFBhZ2VXcml0ZWJhY2socGFnZSkJCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoUEdfd3JpdGViYWNrLAkJCVwKKwkJCQkmKHBhZ2UpLT5mbGFncykpCQkJXAorCQkJaW5jX3BhZ2Vfc3RhdGUobnJfd3JpdGViYWNrKTsJCQlcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgVGVzdFNldFBhZ2VXcml0ZWJhY2socGFnZSkJCQkJCVwKKwkoewkJCQkJCQkJXAorCQlpbnQgcmV0OwkJCQkJCVwKKwkJcmV0ID0gdGVzdF9hbmRfc2V0X2JpdChQR193cml0ZWJhY2ssCQkJXAorCQkJCQkmKHBhZ2UpLT5mbGFncyk7CQlcCisJCWlmICghcmV0KQkJCQkJCVwKKwkJCWluY19wYWdlX3N0YXRlKG5yX3dyaXRlYmFjayk7CQkJXAorCQlyZXQ7CQkJCQkJCVwKKwl9KQorI2RlZmluZSBDbGVhclBhZ2VXcml0ZWJhY2socGFnZSkJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUEdfd3JpdGViYWNrLAkJCVwKKwkJCQkmKHBhZ2UpLT5mbGFncykpCQkJXAorCQkJZGVjX3BhZ2Vfc3RhdGUobnJfd3JpdGViYWNrKTsJCQlcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgVGVzdENsZWFyUGFnZVdyaXRlYmFjayhwYWdlKQkJCQkJXAorCSh7CQkJCQkJCQlcCisJCWludCByZXQ7CQkJCQkJXAorCQlyZXQgPSB0ZXN0X2FuZF9jbGVhcl9iaXQoUEdfd3JpdGViYWNrLAkJCVwKKwkJCQkmKHBhZ2UpLT5mbGFncyk7CQkJXAorCQlpZiAocmV0KQkJCQkJCVwKKwkJCWRlY19wYWdlX3N0YXRlKG5yX3dyaXRlYmFjayk7CQkJXAorCQlyZXQ7CQkJCQkJCVwKKwl9KQorCisjZGVmaW5lIFBhZ2VOb3NhdmUocGFnZSkJdGVzdF9iaXQoUEdfbm9zYXZlLCAmKHBhZ2UpLT5mbGFncykKKyNkZWZpbmUgU2V0UGFnZU5vc2F2ZShwYWdlKQlzZXRfYml0KFBHX25vc2F2ZSwgJihwYWdlKS0+ZmxhZ3MpCisjZGVmaW5lIFRlc3RTZXRQYWdlTm9zYXZlKHBhZ2UpCXRlc3RfYW5kX3NldF9iaXQoUEdfbm9zYXZlLCAmKHBhZ2UpLT5mbGFncykKKyNkZWZpbmUgQ2xlYXJQYWdlTm9zYXZlKHBhZ2UpCQljbGVhcl9iaXQoUEdfbm9zYXZlLCAmKHBhZ2UpLT5mbGFncykKKyNkZWZpbmUgVGVzdENsZWFyUGFnZU5vc2F2ZShwYWdlKQl0ZXN0X2FuZF9jbGVhcl9iaXQoUEdfbm9zYXZlLCAmKHBhZ2UpLT5mbGFncykKKworI2RlZmluZSBQYWdlTm9zYXZlRnJlZShwYWdlKQl0ZXN0X2JpdChQR19ub3NhdmVfZnJlZSwgJihwYWdlKS0+ZmxhZ3MpCisjZGVmaW5lIFNldFBhZ2VOb3NhdmVGcmVlKHBhZ2UpCXNldF9iaXQoUEdfbm9zYXZlX2ZyZWUsICYocGFnZSktPmZsYWdzKQorI2RlZmluZSBDbGVhclBhZ2VOb3NhdmVGcmVlKHBhZ2UpCQljbGVhcl9iaXQoUEdfbm9zYXZlX2ZyZWUsICYocGFnZSktPmZsYWdzKQorCisjZGVmaW5lIFBhZ2VNYXBwZWRUb0Rpc2socGFnZSkJdGVzdF9iaXQoUEdfbWFwcGVkdG9kaXNrLCAmKHBhZ2UpLT5mbGFncykKKyNkZWZpbmUgU2V0UGFnZU1hcHBlZFRvRGlzayhwYWdlKSBzZXRfYml0KFBHX21hcHBlZHRvZGlzaywgJihwYWdlKS0+ZmxhZ3MpCisjZGVmaW5lIENsZWFyUGFnZU1hcHBlZFRvRGlzayhwYWdlKSBjbGVhcl9iaXQoUEdfbWFwcGVkdG9kaXNrLCAmKHBhZ2UpLT5mbGFncykKKworI2RlZmluZSBQYWdlUmVjbGFpbShwYWdlKQl0ZXN0X2JpdChQR19yZWNsYWltLCAmKHBhZ2UpLT5mbGFncykKKyNkZWZpbmUgU2V0UGFnZVJlY2xhaW0ocGFnZSkJc2V0X2JpdChQR19yZWNsYWltLCAmKHBhZ2UpLT5mbGFncykKKyNkZWZpbmUgQ2xlYXJQYWdlUmVjbGFpbShwYWdlKQljbGVhcl9iaXQoUEdfcmVjbGFpbSwgJihwYWdlKS0+ZmxhZ3MpCisjZGVmaW5lIFRlc3RDbGVhclBhZ2VSZWNsYWltKHBhZ2UpIHRlc3RfYW5kX2NsZWFyX2JpdChQR19yZWNsYWltLCAmKHBhZ2UpLT5mbGFncykKKworI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKKyNkZWZpbmUgUGFnZUNvbXBvdW5kKHBhZ2UpCXRlc3RfYml0KFBHX2NvbXBvdW5kLCAmKHBhZ2UpLT5mbGFncykKKyNlbHNlCisjZGVmaW5lIFBhZ2VDb21wb3VuZChwYWdlKQkwCisjZW5kaWYKKyNkZWZpbmUgU2V0UGFnZUNvbXBvdW5kKHBhZ2UpCXNldF9iaXQoUEdfY29tcG91bmQsICYocGFnZSktPmZsYWdzKQorI2RlZmluZSBDbGVhclBhZ2VDb21wb3VuZChwYWdlKQljbGVhcl9iaXQoUEdfY29tcG91bmQsICYocGFnZSktPmZsYWdzKQorCisjaWZkZWYgQ09ORklHX1NXQVAKKyNkZWZpbmUgUGFnZVN3YXBDYWNoZShwYWdlKQl0ZXN0X2JpdChQR19zd2FwY2FjaGUsICYocGFnZSktPmZsYWdzKQorI2RlZmluZSBTZXRQYWdlU3dhcENhY2hlKHBhZ2UpCXNldF9iaXQoUEdfc3dhcGNhY2hlLCAmKHBhZ2UpLT5mbGFncykKKyNkZWZpbmUgQ2xlYXJQYWdlU3dhcENhY2hlKHBhZ2UpIGNsZWFyX2JpdChQR19zd2FwY2FjaGUsICYocGFnZSktPmZsYWdzKQorI2Vsc2UKKyNkZWZpbmUgUGFnZVN3YXBDYWNoZShwYWdlKQkwCisjZW5kaWYKKworI2RlZmluZSBQYWdlVW5jYWNoZWQocGFnZSkJdGVzdF9iaXQoUEdfdW5jYWNoZWQsICYocGFnZSktPmZsYWdzKQorI2RlZmluZSBTZXRQYWdlVW5jYWNoZWQocGFnZSkJc2V0X2JpdChQR191bmNhY2hlZCwgJihwYWdlKS0+ZmxhZ3MpCisjZGVmaW5lIENsZWFyUGFnZVVuY2FjaGVkKHBhZ2UpCWNsZWFyX2JpdChQR191bmNhY2hlZCwgJihwYWdlKS0+ZmxhZ3MpCisKK3N0cnVjdCBwYWdlOwkvKiBmb3J3YXJkIGRlY2xhcmF0aW9uICovCisKK2ludCB0ZXN0X2NsZWFyX3BhZ2VfZGlydHkoc3RydWN0IHBhZ2UgKnBhZ2UpOworaW50IHRlc3RfY2xlYXJfcGFnZV93cml0ZWJhY2soc3RydWN0IHBhZ2UgKnBhZ2UpOworaW50IHRlc3Rfc2V0X3BhZ2Vfd3JpdGViYWNrKHN0cnVjdCBwYWdlICpwYWdlKTsKKworc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3BhZ2VfZGlydHkoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJdGVzdF9jbGVhcl9wYWdlX2RpcnR5KHBhZ2UpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfd3JpdGViYWNrKHN0cnVjdCBwYWdlICpwYWdlKQoreworCXRlc3Rfc2V0X3BhZ2Vfd3JpdGViYWNrKHBhZ2UpOworfQorCisjZW5kaWYJLyogUEFHRV9GTEFHU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaCBiL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0MjIwMzEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaApAQCAtMCwwICsxLDI0NiBAQAorI2lmbmRlZiBfTElOVVhfUEFHRU1BUF9ICisjZGVmaW5lIF9MSU5VWF9QQUdFTUFQX0gKKworLyoKKyAqIENvcHlyaWdodCAxOTk1IExpbnVzIFRvcnZhbGRzCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvZ2ZwLmg+CisKKy8qCisgKiBCaXRzIGluIG1hcHBpbmctPmZsYWdzLiAgVGhlIGxvd2VyIF9fR0ZQX0JJVFNfU0hJRlQgYml0cyBhcmUgdGhlIHBhZ2UKKyAqIGFsbG9jYXRpb24gbW9kZSBmbGFncy4KKyAqLworI2RlZmluZQlBU19FSU8JCShfX0dGUF9CSVRTX1NISUZUICsgMCkJLyogSU8gZXJyb3Igb24gYXN5bmMgd3JpdGUgKi8KKyNkZWZpbmUgQVNfRU5PU1BDCShfX0dGUF9CSVRTX1NISUZUICsgMSkJLyogRU5PU1BDIG9uIGFzeW5jIHdyaXRlICovCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IF9fbm9jYXN0IG1hcHBpbmdfZ2ZwX21hc2soc3RydWN0IGFkZHJlc3Nfc3BhY2UgKiBtYXBwaW5nKQoreworCXJldHVybiBtYXBwaW5nLT5mbGFncyAmIF9fR0ZQX0JJVFNfTUFTSzsKK30KKworLyoKKyAqIFRoaXMgaXMgbm9uLWF0b21pYy4gIE9ubHkgdG8gYmUgdXNlZCBiZWZvcmUgdGhlIG1hcHBpbmcgaXMgYWN0aXZhdGVkLgorICogUHJvYmFibHkgbmVlZHMgYSBiYXJyaWVyLi4uCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF9nZnBfbWFzayhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbSwgaW50IG1hc2spCit7CisJbS0+ZmxhZ3MgPSAobS0+ZmxhZ3MgJiB+X19HRlBfQklUU19NQVNLKSB8IG1hc2s7Cit9CisKKy8qCisgKiBUaGUgcGFnZSBjYWNoZSBjYW4gZG9uZSBpbiBsYXJnZXIgY2h1bmtzIHRoYW4KKyAqIG9uZSBwYWdlLCBiZWNhdXNlIGl0IGFsbG93cyBmb3IgbW9yZSBlZmZpY2llbnQKKyAqIHRocm91Z2hwdXQgKGl0IGNhbiB0aGVuIGJlIG1hcHBlZCBpbnRvIHVzZXIKKyAqIHNwYWNlIGluIHNtYWxsZXIgY2h1bmtzIGZvciBzYW1lIGZsZXhpYmlsaXR5KS4KKyAqCisgKiBPciByYXRoZXIsIGl0IF93aWxsXyBiZSBkb25lIGluIGxhcmdlciBjaHVua3MuCisgKi8KKyNkZWZpbmUgUEFHRV9DQUNIRV9TSElGVAlQQUdFX1NISUZUCisjZGVmaW5lIFBBR0VfQ0FDSEVfU0laRQkJUEFHRV9TSVpFCisjZGVmaW5lIFBBR0VfQ0FDSEVfTUFTSwkJUEFHRV9NQVNLCisjZGVmaW5lIFBBR0VfQ0FDSEVfQUxJR04oYWRkcikJKCgoYWRkcikrUEFHRV9DQUNIRV9TSVpFLTEpJlBBR0VfQ0FDSEVfTUFTSykKKworI2RlZmluZSBwYWdlX2NhY2hlX2dldChwYWdlKQkJZ2V0X3BhZ2UocGFnZSkKKyNkZWZpbmUgcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpCXB1dF9wYWdlKHBhZ2UpCit2b2lkIHJlbGVhc2VfcGFnZXMoc3RydWN0IHBhZ2UgKipwYWdlcywgaW50IG5yLCBpbnQgY29sZCk7CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKnBhZ2VfY2FjaGVfYWxsb2Moc3RydWN0IGFkZHJlc3Nfc3BhY2UgKngpCit7CisJcmV0dXJuIGFsbG9jX3BhZ2VzKG1hcHBpbmdfZ2ZwX21hc2soeCksIDApOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpwYWdlX2NhY2hlX2FsbG9jX2NvbGQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKngpCit7CisJcmV0dXJuIGFsbG9jX3BhZ2VzKG1hcHBpbmdfZ2ZwX21hc2soeCl8X19HRlBfQ09MRCwgMCk7Cit9CisKK3R5cGVkZWYgaW50IGZpbGxlcl90KHZvaWQgKiwgc3RydWN0IHBhZ2UgKik7CisKK2V4dGVybiBzdHJ1Y3QgcGFnZSAqIGZpbmRfZ2V0X3BhZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCisJCQkJdW5zaWduZWQgbG9uZyBpbmRleCk7CitleHRlcm4gc3RydWN0IHBhZ2UgKiBmaW5kX2xvY2tfcGFnZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKKwkJCQl1bnNpZ25lZCBsb25nIGluZGV4KTsKK2V4dGVybiBzdHJ1Y3QgcGFnZSAqIGZpbmRfdHJ5bG9ja19wYWdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAorCQkJCXVuc2lnbmVkIGxvbmcgaW5kZXgpOworZXh0ZXJuIHN0cnVjdCBwYWdlICogZmluZF9vcl9jcmVhdGVfcGFnZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKKwkJCQl1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBpbnQgZ2ZwX21hc2spOwordW5zaWduZWQgZmluZF9nZXRfcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3Qgc3RhcnQsCisJCQl1bnNpZ25lZCBpbnQgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZXMpOwordW5zaWduZWQgZmluZF9nZXRfcGFnZXNfdGFnKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90ICppbmRleCwKKwkJCWludCB0YWcsIHVuc2lnbmVkIGludCBucl9wYWdlcywgc3RydWN0IHBhZ2UgKipwYWdlcyk7CisKKy8qCisgKiBSZXR1cm5zIGxvY2tlZCBwYWdlIGF0IGdpdmVuIGluZGV4IGluIGdpdmVuIGNhY2hlLCBjcmVhdGluZyBpdCBpZiBuZWVkZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKmdyYWJfY2FjaGVfcGFnZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgdW5zaWduZWQgbG9uZyBpbmRleCkKK3sKKwlyZXR1cm4gZmluZF9vcl9jcmVhdGVfcGFnZShtYXBwaW5nLCBpbmRleCwgbWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSk7Cit9CisKK2V4dGVybiBzdHJ1Y3QgcGFnZSAqIGdyYWJfY2FjaGVfcGFnZV9ub3dhaXQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCisJCQkJdW5zaWduZWQgbG9uZyBpbmRleCk7CitleHRlcm4gc3RydWN0IHBhZ2UgKiByZWFkX2NhY2hlX3BhZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCisJCQkJdW5zaWduZWQgbG9uZyBpbmRleCwgZmlsbGVyX3QgKmZpbGxlciwKKwkJCQl2b2lkICpkYXRhKTsKK2V4dGVybiBpbnQgcmVhZF9jYWNoZV9wYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKKwkJc3RydWN0IGxpc3RfaGVhZCAqcGFnZXMsIGZpbGxlcl90ICpmaWxsZXIsIHZvaWQgKmRhdGEpOworCitpbnQgYWRkX3RvX3BhZ2VfY2FjaGUoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAorCQkJCXVuc2lnbmVkIGxvbmcgaW5kZXgsIGludCBnZnBfbWFzayk7CitpbnQgYWRkX3RvX3BhZ2VfY2FjaGVfbHJ1KHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKKwkJCQl1bnNpZ25lZCBsb25nIGluZGV4LCBpbnQgZ2ZwX21hc2spOworZXh0ZXJuIHZvaWQgcmVtb3ZlX2Zyb21fcGFnZV9jYWNoZShzdHJ1Y3QgcGFnZSAqcGFnZSk7CitleHRlcm4gdm9pZCBfX3JlbW92ZV9mcm9tX3BhZ2VfY2FjaGUoc3RydWN0IHBhZ2UgKnBhZ2UpOworCitleHRlcm4gYXRvbWljX3QgbnJfcGFnZWNhY2hlOworCisjaWZkZWYgQ09ORklHX1NNUAorCisjZGVmaW5lIFBBR0VDQUNIRV9BQ0NUX1RIUkVTSE9MRCAgICAgICAgbWF4KDE2LCBOUl9DUFVTICogMikKK0RFQ0xBUkVfUEVSX0NQVShsb25nLCBucl9wYWdlY2FjaGVfbG9jYWwpOworCisvKgorICogcGFnZWNhY2hlX2FjY3QgaW1wbGVtZW50cyBhcHByb3hpbWF0ZSBhY2NvdW50aW5nIGZvciBwYWdlY2FjaGUuCisgKiB2bV9lbm91Z2hfbWVtb3J5KCkgZG8gbm90IG5lZWQgaGlnaCBhY2N1cmFjeS4gV3JpdGVycyB3aWxsIGtlZXAKKyAqIGFuIG9mZnNldCBpbiB0aGVpciBwZXItY3B1IGFyZW5hIGFuZCB3aWxsIHNwaWxsIHRoYXQgaW50byB0aGUKKyAqIGdsb2JhbCBjb3VudCB3aGVuZXZlciB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgdGhlIGxvY2FsIGNvdW50CisgKiBleGNlZWRzIHRoZSBjb3VudGVyJ3MgdGhyZXNob2xkLgorICoKKyAqIE1VU1QgYmUgcHJvdGVjdGVkIGZyb20gcHJlZW1wdGlvbi4KKyAqIGN1cnJlbnQgcHJvdGVjdGlvbiBpcyBtYXBwaW5nLT5wYWdlX2xvY2suCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBwYWdlY2FjaGVfYWNjdChpbnQgY291bnQpCit7CisJbG9uZyAqbG9jYWw7CisKKwlsb2NhbCA9ICZfX2dldF9jcHVfdmFyKG5yX3BhZ2VjYWNoZV9sb2NhbCk7CisJKmxvY2FsICs9IGNvdW50OworCWlmICgqbG9jYWwgPiBQQUdFQ0FDSEVfQUNDVF9USFJFU0hPTEQgfHwgKmxvY2FsIDwgLVBBR0VDQUNIRV9BQ0NUX1RIUkVTSE9MRCkgeworCQlhdG9taWNfYWRkKCpsb2NhbCwgJm5yX3BhZ2VjYWNoZSk7CisJCSpsb2NhbCA9IDA7CisJfQorfQorCisjZWxzZQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGFnZWNhY2hlX2FjY3QoaW50IGNvdW50KQoreworCWF0b21pY19hZGQoY291bnQsICZucl9wYWdlY2FjaGUpOworfQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfcGFnZV9jYWNoZV9zaXplKHZvaWQpCit7CisJaW50IHJldCA9IGF0b21pY19yZWFkKCZucl9wYWdlY2FjaGUpOworCWlmICh1bmxpa2VseShyZXQgPCAwKSkKKwkJcmV0ID0gMDsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogUmV0dXJuIGJ5dGUtb2Zmc2V0IGludG8gZmlsZXN5c3RlbSBvYmplY3QgZm9yIHBhZ2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgbG9mZl90IHBhZ2Vfb2Zmc2V0KHN0cnVjdCBwYWdlICpwYWdlKQoreworCXJldHVybiAoKGxvZmZfdClwYWdlLT5pbmRleCkgPDwgUEFHRV9DQUNIRV9TSElGVDsKK30KKworc3RhdGljIGlubGluZSBwZ29mZl90IGxpbmVhcl9wYWdlX2luZGV4KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJCQl1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisJcGdvZmZfdCBwZ29mZiA9IChhZGRyZXNzIC0gdm1hLT52bV9zdGFydCkgPj4gUEFHRV9TSElGVDsKKwlwZ29mZiArPSB2bWEtPnZtX3Bnb2ZmOworCXJldHVybiBwZ29mZiA+PiAoUEFHRV9DQUNIRV9TSElGVCAtIFBBR0VfU0hJRlQpOworfQorCitleHRlcm4gdm9pZCBGQVNUQ0FMTChfX2xvY2tfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkpOworZXh0ZXJuIHZvaWQgRkFTVENBTEwodW5sb2NrX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpKTsKKworc3RhdGljIGlubGluZSB2b2lkIGxvY2tfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwltaWdodF9zbGVlcCgpOworCWlmIChUZXN0U2V0UGFnZUxvY2tlZChwYWdlKSkKKwkJX19sb2NrX3BhZ2UocGFnZSk7Cit9CisJCisvKgorICogVGhpcyBpcyBleHBvcnRlZCBvbmx5IGZvciB3YWl0X29uX3BhZ2VfbG9ja2VkL3dhaXRfb25fcGFnZV93cml0ZWJhY2suCisgKiBOZXZlciB1c2UgdGhpcyBkaXJlY3RseSEKKyAqLworZXh0ZXJuIHZvaWQgRkFTVENBTEwod2FpdF9vbl9wYWdlX2JpdChzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IGJpdF9ucikpOworCisvKiAKKyAqIFdhaXQgZm9yIGEgcGFnZSB0byBiZSB1bmxvY2tlZC4KKyAqCisgKiBUaGlzIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIGNhbGxlciAiaG9sZGluZyIgdGhlIHBhZ2UsCisgKiBpZSB3aXRoIGluY3JlYXNlZCAicGFnZS0+Y291bnQiIHNvIHRoYXQgdGhlIHBhZ2Ugd29uJ3QKKyAqIGdvIGF3YXkgZHVyaW5nIHRoZSB3YWl0Li4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHdhaXRfb25fcGFnZV9sb2NrZWQoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJaWYgKFBhZ2VMb2NrZWQocGFnZSkpCisJCXdhaXRfb25fcGFnZV9iaXQocGFnZSwgUEdfbG9ja2VkKTsKK30KKworLyogCisgKiBXYWl0IGZvciBhIHBhZ2UgdG8gY29tcGxldGUgd3JpdGViYWNrCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB3YWl0X29uX3BhZ2Vfd3JpdGViYWNrKHN0cnVjdCBwYWdlICpwYWdlKQoreworCWlmIChQYWdlV3JpdGViYWNrKHBhZ2UpKQorCQl3YWl0X29uX3BhZ2VfYml0KHBhZ2UsIFBHX3dyaXRlYmFjayk7Cit9CisKK2V4dGVybiB2b2lkIGVuZF9wYWdlX3dyaXRlYmFjayhzdHJ1Y3QgcGFnZSAqcGFnZSk7CisKKy8qCisgKiBGYXVsdCBhIHVzZXJzcGFjZSBwYWdlIGludG8gcGFnZXRhYmxlcy4gIFJldHVybiBub24temVybyBvbiBhIGZhdWx0LgorICoKKyAqIFRoaXMgYXNzdW1lcyB0aGF0IHR3byB1c2Vyc3BhY2UgcGFnZXMgYXJlIGFsd2F5cyBzdWZmaWNpZW50LiAgVGhhdCdzCisgKiBub3QgdHJ1ZSBpZiBQQUdFX0NBQ0hFX1NJWkUgPiBQQUdFX1NJWkUuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGZhdWx0X2luX3BhZ2VzX3dyaXRlYWJsZShjaGFyIF9fdXNlciAqdWFkZHIsIGludCBzaXplKQoreworCWludCByZXQ7CisKKwkvKgorCSAqIFdyaXRpbmcgemVyb2VzIGludG8gdXNlcnNwYWNlIGhlcmUgaXMgT0ssIGJlY2F1c2Ugd2Uga25vdyB0aGF0IGlmCisJICogdGhlIHplcm8gZ2V0cyB0aGVyZSwgd2UnbGwgYmUgb3ZlcndyaXRpbmcgaXQuCisJICovCisJcmV0ID0gX19wdXRfdXNlcigwLCB1YWRkcik7CisJaWYgKHJldCA9PSAwKSB7CisJCWNoYXIgX191c2VyICplbmQgPSB1YWRkciArIHNpemUgLSAxOworCisJCS8qCisJCSAqIElmIHRoZSBwYWdlIHdhcyBhbHJlYWR5IG1hcHBlZCwgdGhpcyB3aWxsIGdldCBhIGNhY2hlIG1pc3MKKwkJICogZm9yIHN1cmUsIHNvIHRyeSB0byBhdm9pZCBkb2luZyBpdC4KKwkJICovCisJCWlmICgoKHVuc2lnbmVkIGxvbmcpdWFkZHIgJiBQQUdFX01BU0spICE9CisJCQkJKCh1bnNpZ25lZCBsb25nKWVuZCAmIFBBR0VfTUFTSykpCisJCSAJcmV0ID0gX19wdXRfdXNlcigwLCBlbmQpOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmF1bHRfaW5fcGFnZXNfcmVhZGFibGUoY29uc3QgY2hhciBfX3VzZXIgKnVhZGRyLCBpbnQgc2l6ZSkKK3sKKwl2b2xhdGlsZSBjaGFyIGM7CisJaW50IHJldDsKKworCXJldCA9IF9fZ2V0X3VzZXIoYywgdWFkZHIpOworCWlmIChyZXQgPT0gMCkgeworCQljb25zdCBjaGFyIF9fdXNlciAqZW5kID0gdWFkZHIgKyBzaXplIC0gMTsKKworCQlpZiAoKCh1bnNpZ25lZCBsb25nKXVhZGRyICYgUEFHRV9NQVNLKSAhPQorCQkJCSgodW5zaWduZWQgbG9uZyllbmQgJiBQQUdFX01BU0spKQorCQkgCV9fZ2V0X3VzZXIoYywgZW5kKTsKKwl9Cit9CisKKyNlbmRpZiAvKiBfTElOVVhfUEFHRU1BUF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2V2ZWMuaCBiL2luY2x1ZGUvbGludXgvcGFnZXZlYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlZjMyYzUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2V2ZWMuaApAQCAtMCwwICsxLDg1IEBACisvKgorICogaW5jbHVkZS9saW51eC9wYWdldmVjLmgKKyAqCisgKiBJbiBtYW55IHBsYWNlcyBpdCBpcyBlZmZpY2llbnQgdG8gYmF0Y2ggYW4gb3BlcmF0aW9uIHVwIGFnYWluc3QgbXVsdGlwbGUKKyAqIHBhZ2VzLiAgQSBwYWdldmVjIGlzIGEgbXVsdGlwYWdlIGNvbnRhaW5lciB3aGljaCBpcyB1c2VkIGZvciB0aGF0LgorICovCisKKy8qIDE0IHBvaW50ZXJzICsgdHdvIGxvbmcncyBhbGlnbiB0aGUgcGFnZXZlYyBzdHJ1Y3R1cmUgdG8gYSBwb3dlciBvZiB0d28gKi8KKyNkZWZpbmUgUEFHRVZFQ19TSVpFCTE0CisKK3N0cnVjdCBwYWdlOworc3RydWN0IGFkZHJlc3Nfc3BhY2U7CisKK3N0cnVjdCBwYWdldmVjIHsKKwl1bnNpZ25lZCBsb25nIG5yOworCXVuc2lnbmVkIGxvbmcgY29sZDsKKwlzdHJ1Y3QgcGFnZSAqcGFnZXNbUEFHRVZFQ19TSVpFXTsKK307CisKK3ZvaWQgX19wYWdldmVjX3JlbGVhc2Uoc3RydWN0IHBhZ2V2ZWMgKnB2ZWMpOwordm9pZCBfX3BhZ2V2ZWNfcmVsZWFzZV9ub25scnUoc3RydWN0IHBhZ2V2ZWMgKnB2ZWMpOwordm9pZCBfX3BhZ2V2ZWNfZnJlZShzdHJ1Y3QgcGFnZXZlYyAqcHZlYyk7Cit2b2lkIF9fcGFnZXZlY19scnVfYWRkKHN0cnVjdCBwYWdldmVjICpwdmVjKTsKK3ZvaWQgX19wYWdldmVjX2xydV9hZGRfYWN0aXZlKHN0cnVjdCBwYWdldmVjICpwdmVjKTsKK3ZvaWQgcGFnZXZlY19zdHJpcChzdHJ1Y3QgcGFnZXZlYyAqcHZlYyk7Cit1bnNpZ25lZCBwYWdldmVjX2xvb2t1cChzdHJ1Y3QgcGFnZXZlYyAqcHZlYywgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCisJCXBnb2ZmX3Qgc3RhcnQsIHVuc2lnbmVkIG5yX3BhZ2VzKTsKK3Vuc2lnbmVkIHBhZ2V2ZWNfbG9va3VwX3RhZyhzdHJ1Y3QgcGFnZXZlYyAqcHZlYywKKwkJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgKmluZGV4LCBpbnQgdGFnLAorCQl1bnNpZ25lZCBucl9wYWdlcyk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwYWdldmVjX2luaXQoc3RydWN0IHBhZ2V2ZWMgKnB2ZWMsIGludCBjb2xkKQoreworCXB2ZWMtPm5yID0gMDsKKwlwdmVjLT5jb2xkID0gY29sZDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBhZ2V2ZWNfcmVpbml0KHN0cnVjdCBwYWdldmVjICpwdmVjKQoreworCXB2ZWMtPm5yID0gMDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBwYWdldmVjX2NvdW50KHN0cnVjdCBwYWdldmVjICpwdmVjKQoreworCXJldHVybiBwdmVjLT5ucjsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBwYWdldmVjX3NwYWNlKHN0cnVjdCBwYWdldmVjICpwdmVjKQoreworCXJldHVybiBQQUdFVkVDX1NJWkUgLSBwdmVjLT5ucjsKK30KKworLyoKKyAqIEFkZCBhIHBhZ2UgdG8gYSBwYWdldmVjLiAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIHNsb3RzIHN0aWxsIGF2YWlsYWJsZS4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBwYWdldmVjX2FkZChzdHJ1Y3QgcGFnZXZlYyAqcHZlYywgc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJcHZlYy0+cGFnZXNbcHZlYy0+bnIrK10gPSBwYWdlOworCXJldHVybiBwYWdldmVjX3NwYWNlKHB2ZWMpOworfQorCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwYWdldmVjX3JlbGVhc2Uoc3RydWN0IHBhZ2V2ZWMgKnB2ZWMpCit7CisJaWYgKHBhZ2V2ZWNfY291bnQocHZlYykpCisJCV9fcGFnZXZlY19yZWxlYXNlKHB2ZWMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGFnZXZlY19yZWxlYXNlX25vbmxydShzdHJ1Y3QgcGFnZXZlYyAqcHZlYykKK3sKKwlpZiAocGFnZXZlY19jb3VudChwdmVjKSkKKwkJX19wYWdldmVjX3JlbGVhc2Vfbm9ubHJ1KHB2ZWMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGFnZXZlY19mcmVlKHN0cnVjdCBwYWdldmVjICpwdmVjKQoreworCWlmIChwYWdldmVjX2NvdW50KHB2ZWMpKQorCQlfX3BhZ2V2ZWNfZnJlZShwdmVjKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBhZ2V2ZWNfbHJ1X2FkZChzdHJ1Y3QgcGFnZXZlYyAqcHZlYykKK3sKKwlpZiAocGFnZXZlY19jb3VudChwdmVjKSkKKwkJX19wYWdldmVjX2xydV9hZGQocHZlYyk7Cit9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhcmFtLmggYi9pbmNsdWRlL2xpbnV4L3BhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDkyZTkyZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvcGFyYW0uaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX0xJTlVYX1BBUkFNX0gKKyNkZWZpbmUgX0xJTlVYX1BBUkFNX0gKKworI2luY2x1ZGUgPGFzbS9wYXJhbS5oPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFycG9ydC5oIGIvaW5jbHVkZS9saW51eC9wYXJwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJhNGQ5ZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvcGFycG9ydC5oCkBAIC0wLDAgKzEsNTUyIEBACisvKiAkSWQ6IHBhcnBvcnQuaCx2IDEuMSAxOTk4LzA1LzE3IDEwOjU3OjUyIGFuZHJlYSBFeHAgYW5kcmVhICQgKi8KKworLyoKKyAqIEFueSBwYXJ0IG9mIHRoaXMgcHJvZ3JhbSBtYXkgYmUgdXNlZCBpbiBkb2N1bWVudHMgbGljZW5zZWQgdW5kZXIKKyAqIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4xIG9yIGFueSBsYXRlciB2ZXJzaW9uCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9QQVJQT1JUX0hfCisjZGVmaW5lIF9QQVJQT1JUX0hfCisKKy8qIFN0YXJ0IG9mZiB3aXRoIHVzZXItdmlzaWJsZSBjb25zdGFudHMgKi8KKworLyogTWF4aW11bSBvZiAxNiBwb3J0cyBwZXIgbWFjaGluZSAqLworI2RlZmluZSBQQVJQT1JUX01BWCAgMTYKKworLyogTWFnaWMgbnVtYmVycyAqLworI2RlZmluZSBQQVJQT1JUX0lSUV9OT05FICAtMQorI2RlZmluZSBQQVJQT1JUX0RNQV9OT05FICAtMQorI2RlZmluZSBQQVJQT1JUX0lSUV9BVVRPICAtMgorI2RlZmluZSBQQVJQT1JUX0RNQV9BVVRPICAtMgorI2RlZmluZSBQQVJQT1JUX0RNQV9OT0ZJRk8gLTMKKyNkZWZpbmUgUEFSUE9SVF9ESVNBQkxFICAgLTIKKyNkZWZpbmUgUEFSUE9SVF9JUlFfUFJPQkVPTkxZIC0zCisjZGVmaW5lIFBBUlBPUlRfSU9ISV9BVVRPIC0xCisKKyNkZWZpbmUgUEFSUE9SVF9DT05UUk9MX1NUUk9CRSAgICAweDEKKyNkZWZpbmUgUEFSUE9SVF9DT05UUk9MX0FVVE9GRCAgICAweDIKKyNkZWZpbmUgUEFSUE9SVF9DT05UUk9MX0lOSVQgICAgICAweDQKKyNkZWZpbmUgUEFSUE9SVF9DT05UUk9MX1NFTEVDVCAgICAweDgKKworI2RlZmluZSBQQVJQT1JUX1NUQVRVU19FUlJPUiAgICAgIDB4OAorI2RlZmluZSBQQVJQT1JUX1NUQVRVU19TRUxFQ1QgICAgIDB4MTAKKyNkZWZpbmUgUEFSUE9SVF9TVEFUVVNfUEFQRVJPVVQgICAweDIwCisjZGVmaW5lIFBBUlBPUlRfU1RBVFVTX0FDSyAgICAgICAgMHg0MAorI2RlZmluZSBQQVJQT1JUX1NUQVRVU19CVVNZICAgICAgIDB4ODAKKworLyogVHlwZSBjbGFzc2VzIGZvciBQbHVnLWFuZC1QbGF5IHByb2JlLiAgKi8KK3R5cGVkZWYgZW51bSB7CisJUEFSUE9SVF9DTEFTU19MRUdBQ1kgPSAwLCAgICAgICAvKiBOb24tSUVFRTEyODQgZGV2aWNlICovCisJUEFSUE9SVF9DTEFTU19QUklOVEVSLAorCVBBUlBPUlRfQ0xBU1NfTU9ERU0sCisJUEFSUE9SVF9DTEFTU19ORVQsCisJUEFSUE9SVF9DTEFTU19IREMsICAgICAgICAgICAgICAvKiBIYXJkIGRpc2sgY29udHJvbGxlciAqLworCVBBUlBPUlRfQ0xBU1NfUENNQ0lBLAorCVBBUlBPUlRfQ0xBU1NfTUVESUEsICAgICAgICAgICAgLyogTXVsdGltZWRpYSBkZXZpY2UgKi8KKwlQQVJQT1JUX0NMQVNTX0ZEQywgICAgICAgICAgICAgIC8qIEZsb3BweSBkaXNrIGNvbnRyb2xsZXIgKi8KKwlQQVJQT1JUX0NMQVNTX1BPUlRTLAorCVBBUlBPUlRfQ0xBU1NfU0NBTk5FUiwKKwlQQVJQT1JUX0NMQVNTX0RJR0NBTSwKKwlQQVJQT1JUX0NMQVNTX09USEVSLCAgICAgICAgICAgIC8qIEFueXRoaW5nIGVsc2UgKi8KKwlQQVJQT1JUX0NMQVNTX1VOU1BFQywgICAgICAgICAgIC8qIE5vIENMUyBmaWVsZCBpbiBJRCAqLworCVBBUlBPUlRfQ0xBU1NfU0NTSUFEQVBURVIKK30gcGFycG9ydF9kZXZpY2VfY2xhc3M7CisKKy8qIFRoZSAibW9kZXMiIGVudHJ5IGluIHBhcnBvcnQgaXMgYSBiaXQgZmllbGQgcmVwcmVzZW50aW5nIHRoZQorICAgY2FwYWJpbGl0aWVzIG9mIHRoZSBoYXJkd2FyZS4gKi8KKyNkZWZpbmUgUEFSUE9SVF9NT0RFX1BDU1BQCSgxPDwwKSAvKiBJQk0gUEMgcmVnaXN0ZXJzIGF2YWlsYWJsZS4gKi8KKyNkZWZpbmUgUEFSUE9SVF9NT0RFX1RSSVNUQVRFCSgxPDwxKSAvKiBDYW4gdHJpc3RhdGUuICovCisjZGVmaW5lIFBBUlBPUlRfTU9ERV9FUFAJKDE8PDIpIC8qIEhhcmR3YXJlIEVQUC4gKi8KKyNkZWZpbmUgUEFSUE9SVF9NT0RFX0VDUAkoMTw8MykgLyogSGFyZHdhcmUgRUNQLiAqLworI2RlZmluZSBQQVJQT1JUX01PREVfQ09NUEFUCSgxPDw0KSAvKiBIYXJkd2FyZSAncHJpbnRlciBwcm90b2NvbCcuICovCisjZGVmaW5lIFBBUlBPUlRfTU9ERV9ETUEJKDE8PDUpIC8qIEhhcmR3YXJlIGNhbiBETUEuICovCisjZGVmaW5lIFBBUlBPUlRfTU9ERV9TQUZFSU5JTlQJKDE8PDYpIC8qIFNQUCByZWdpc3RlcnMgYWNjZXNzaWJsZSBpbiBJUlEuICovCisKKy8qIElFRUUxMjg0IG1vZGVzOiAKKyAgIE5pYmJsZSBtb2RlLCBieXRlIG1vZGUsIEVDUCwgRUNQUkxFIGFuZCBFUFAgYXJlIHRoZWlyIG93bgorICAgJ2V4dGVuc2liaWxpdHkgcmVxdWVzdCcgdmFsdWVzLiAgT3RoZXJzIGFyZSBzcGVjaWFsLgorICAgJ1JlYWwnIEVDUCBtb2RlcyBtdXN0IGhhdmUgdGhlIElFRUUxMjg0X01PREVfRUNQIGJpdCBzZXQuICAqLworI2RlZmluZSBJRUVFMTI4NF9NT0RFX05JQkJMRSAgICAgICAgICAgICAwCisjZGVmaW5lIElFRUUxMjg0X01PREVfQllURSAgICAgICAgICAgICAgKDE8PDApCisjZGVmaW5lIElFRUUxMjg0X01PREVfQ09NUEFUICAgICAgICAgICAgKDE8PDgpCisjZGVmaW5lIElFRUUxMjg0X01PREVfQkVDUCAgICAgICAgICAgICAgKDE8PDkpIC8qIEJvdW5kZWQgRUNQIG1vZGUgKi8KKyNkZWZpbmUgSUVFRTEyODRfTU9ERV9FQ1AgICAgICAgICAgICAgICAoMTw8NCkKKyNkZWZpbmUgSUVFRTEyODRfTU9ERV9FQ1BSTEUgICAgICAgICAgICAoSUVFRTEyODRfTU9ERV9FQ1AgfCAoMTw8NSkpCisjZGVmaW5lIElFRUUxMjg0X01PREVfRUNQU1dFICAgICAgICAgICAgKDE8PDEwKSAvKiBTb2Z0d2FyZS1lbXVsYXRlZCAqLworI2RlZmluZSBJRUVFMTI4NF9NT0RFX0VQUCAgICAgICAgICAgICAgICgxPDw2KQorI2RlZmluZSBJRUVFMTI4NF9NT0RFX0VQUFNMICAgICAgICAgICAgICgxPDwxMSkgLyogRVBQIDEuNyAqLworI2RlZmluZSBJRUVFMTI4NF9NT0RFX0VQUFNXRSAgICAgICAgICAgICgxPDwxMikgLyogU29mdHdhcmUtZW11bGF0ZWQgKi8KKyNkZWZpbmUgSUVFRTEyODRfREVWSUNFSUQgICAgICAgICAgICAgICAoMTw8MikgIC8qIFRoaXMgaXMgYSBmbGFnICovCisjZGVmaW5lIElFRUUxMjg0X0VYVF9MSU5LICAgICAgICAgICAgICAgKDE8PDE0KSAvKiBUaGlzIGZsYWcgY2F1c2VzIHRoZQorCQkJCQkJICogZXh0ZW5zaWJpbGl0eSBsaW5rIHRvCisJCQkJCQkgKiBiZSByZXF1ZXN0ZWQsIHVzaW5nCisJCQkJCQkgKiBiaXRzIDAtNi4gKi8KKworLyogRm9yIHRoZSBiZW5lZml0IG9mIHBhcnBvcnRfcmVhZC93cml0ZSwgeW91IGNhbiB1c2UgdGhlc2Ugd2l0aAorICogcGFycG9ydF9uZWdvdGlhdGUgdG8gdXNlIGFkZHJlc3Mgb3BlcmF0aW9ucy4gIFRoZXkgaGF2ZSBubyBlZmZlY3QKKyAqIG90aGVyIHRoYW4gdG8gbWFrZSBwYXJwb3J0X3JlYWQvd3JpdGUgdXNlIGFkZHJlc3MgdHJhbnNmZXJzLiAqLworI2RlZmluZSBJRUVFMTI4NF9BRERSCQkJKDE8PDEzKQkvKiBUaGlzIGlzIGEgZmxhZyAqLworI2RlZmluZSBJRUVFMTI4NF9EQVRBCQkJIDAJLyogU28gaXMgdGhpcyAqLworCisvKiBGbGFncyBmb3IgYmxvY2sgdHJhbnNmZXIgb3BlcmF0aW9ucy4gKi8KKyNkZWZpbmUgUEFSUE9SVF9FUFBfRkFTVAkJKDE8PDApIC8qIFVucmVsaWFibGUgY291bnRzLiAqLworI2RlZmluZSBQQVJQT1JUX1c5MTI4NFBJQwkJKDE8PDEpIC8qIGhhdmUgYSBXYXJwOSB3OTEyODRwaWMgaW4gdGhlIGRldmljZSAqLworCisvKiBUaGUgcmVzdCBpcyBmb3IgdGhlIGtlcm5lbCBvbmx5ICovCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KKworLyogRGVmaW5lIHRoaXMgbGF0ZXIuICovCitzdHJ1Y3QgcGFycG9ydDsKK3N0cnVjdCBwYXJkZXZpY2U7CisKK3N0cnVjdCBwY19wYXJwb3J0X3N0YXRlIHsKKwl1bnNpZ25lZCBpbnQgY3RyOworCXVuc2lnbmVkIGludCBlY3I7Cit9OworCitzdHJ1Y3QgYXhfcGFycG9ydF9zdGF0ZSB7CisJdW5zaWduZWQgaW50IGN0cjsKKwl1bnNpZ25lZCBpbnQgZWNyOworCXVuc2lnbmVkIGludCBkY3NyOworfTsKKworLyogdXNlZCBieSBib3RoIHBhcnBvcnRfYW1pZ2EgYW5kIHBhcnBvcnRfbWZjMyAqLworc3RydWN0IGFtaWdhX3BhcnBvcnRfc3RhdGUgeworICAgICAgIHVuc2lnbmVkIGNoYXIgZGF0YTsgICAgIC8qIGNpYWEucHJiICovCisgICAgICAgdW5zaWduZWQgY2hhciBkYXRhZGlyOyAgLyogY2lhYS5kZHJiICovCisgICAgICAgdW5zaWduZWQgY2hhciBzdGF0dXM7ICAgLyogY2lhYi5wcmEgJiA3ICovCisgICAgICAgdW5zaWduZWQgY2hhciBzdGF0dXNkaXI7LyogY2lhYi5kZHJiICYgNyAqLworfTsKKworc3RydWN0IHBhcnBvcnRfc3RhdGUgeworCXVuaW9uIHsKKwkJc3RydWN0IHBjX3BhcnBvcnRfc3RhdGUgcGM7CisJCS8qIEFSQyBoYXMgbm8gc3RhdGUuICovCisJCXN0cnVjdCBheF9wYXJwb3J0X3N0YXRlIGF4OworCQlzdHJ1Y3QgYW1pZ2FfcGFycG9ydF9zdGF0ZSBhbWlnYTsKKwkJLyogQXRhcmkgaGFzIG5vdCBzdGF0ZS4gKi8KKwkJdm9pZCAqbWlzYzsgCisJfSB1OworfTsKKworc3RydWN0IHBhcnBvcnRfb3BlcmF0aW9ucyB7CisJLyogSUJNIFBDLXN0eWxlIHZpcnR1YWwgcmVnaXN0ZXJzLiAqLworCXZvaWQgKCp3cml0ZV9kYXRhKShzdHJ1Y3QgcGFycG9ydCAqLCB1bnNpZ25lZCBjaGFyKTsKKwl1bnNpZ25lZCBjaGFyICgqcmVhZF9kYXRhKShzdHJ1Y3QgcGFycG9ydCAqKTsKKworCXZvaWQgKCp3cml0ZV9jb250cm9sKShzdHJ1Y3QgcGFycG9ydCAqLCB1bnNpZ25lZCBjaGFyKTsKKwl1bnNpZ25lZCBjaGFyICgqcmVhZF9jb250cm9sKShzdHJ1Y3QgcGFycG9ydCAqKTsKKwl1bnNpZ25lZCBjaGFyICgqZnJvYl9jb250cm9sKShzdHJ1Y3QgcGFycG9ydCAqLCB1bnNpZ25lZCBjaGFyIG1hc2ssCisJCQkJICAgICAgdW5zaWduZWQgY2hhciB2YWwpOworCisJdW5zaWduZWQgY2hhciAoKnJlYWRfc3RhdHVzKShzdHJ1Y3QgcGFycG9ydCAqKTsKKworCS8qIElSUXMuICovCisJdm9pZCAoKmVuYWJsZV9pcnEpKHN0cnVjdCBwYXJwb3J0ICopOworCXZvaWQgKCpkaXNhYmxlX2lycSkoc3RydWN0IHBhcnBvcnQgKik7CisKKwkvKiBEYXRhIGRpcmVjdGlvbi4gKi8KKwl2b2lkICgqZGF0YV9mb3J3YXJkKSAoc3RydWN0IHBhcnBvcnQgKik7CisJdm9pZCAoKmRhdGFfcmV2ZXJzZSkgKHN0cnVjdCBwYXJwb3J0ICopOworCisJLyogRm9yIGNvcmUgcGFycG9ydCBjb2RlLiAqLworCXZvaWQgKCppbml0X3N0YXRlKShzdHJ1Y3QgcGFyZGV2aWNlICosIHN0cnVjdCBwYXJwb3J0X3N0YXRlICopOworCXZvaWQgKCpzYXZlX3N0YXRlKShzdHJ1Y3QgcGFycG9ydCAqLCBzdHJ1Y3QgcGFycG9ydF9zdGF0ZSAqKTsKKwl2b2lkICgqcmVzdG9yZV9zdGF0ZSkoc3RydWN0IHBhcnBvcnQgKiwgc3RydWN0IHBhcnBvcnRfc3RhdGUgKik7CisKKwkvKiBCbG9jayByZWFkL3dyaXRlICovCisJc2l6ZV90ICgqZXBwX3dyaXRlX2RhdGEpIChzdHJ1Y3QgcGFycG9ydCAqcG9ydCwgY29uc3Qgdm9pZCAqYnVmLAorCQkJCSAgc2l6ZV90IGxlbiwgaW50IGZsYWdzKTsKKwlzaXplX3QgKCplcHBfcmVhZF9kYXRhKSAoc3RydWN0IHBhcnBvcnQgKnBvcnQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbiwKKwkJCQkgaW50IGZsYWdzKTsKKwlzaXplX3QgKCplcHBfd3JpdGVfYWRkcikgKHN0cnVjdCBwYXJwb3J0ICpwb3J0LCBjb25zdCB2b2lkICpidWYsCisJCQkJICBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpOworCXNpemVfdCAoKmVwcF9yZWFkX2FkZHIpIChzdHJ1Y3QgcGFycG9ydCAqcG9ydCwgdm9pZCAqYnVmLCBzaXplX3QgbGVuLAorCQkJCSBpbnQgZmxhZ3MpOworCisJc2l6ZV90ICgqZWNwX3dyaXRlX2RhdGEpIChzdHJ1Y3QgcGFycG9ydCAqcG9ydCwgY29uc3Qgdm9pZCAqYnVmLAorCQkJCSAgc2l6ZV90IGxlbiwgaW50IGZsYWdzKTsKKwlzaXplX3QgKCplY3BfcmVhZF9kYXRhKSAoc3RydWN0IHBhcnBvcnQgKnBvcnQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbiwKKwkJCQkgaW50IGZsYWdzKTsKKwlzaXplX3QgKCplY3Bfd3JpdGVfYWRkcikgKHN0cnVjdCBwYXJwb3J0ICpwb3J0LCBjb25zdCB2b2lkICpidWYsCisJCQkJICBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpOworCisJc2l6ZV90ICgqY29tcGF0X3dyaXRlX2RhdGEpIChzdHJ1Y3QgcGFycG9ydCAqcG9ydCwgY29uc3Qgdm9pZCAqYnVmLAorCQkJCSAgICAgc2l6ZV90IGxlbiwgaW50IGZsYWdzKTsKKwlzaXplX3QgKCpuaWJibGVfcmVhZF9kYXRhKSAoc3RydWN0IHBhcnBvcnQgKnBvcnQsIHZvaWQgKmJ1ZiwKKwkJCQkgICAgc2l6ZV90IGxlbiwgaW50IGZsYWdzKTsKKwlzaXplX3QgKCpieXRlX3JlYWRfZGF0YSkgKHN0cnVjdCBwYXJwb3J0ICpwb3J0LCB2b2lkICpidWYsCisJCQkJICBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpOworCXN0cnVjdCBtb2R1bGUgKm93bmVyOworfTsKKworc3RydWN0IHBhcnBvcnRfZGV2aWNlX2luZm8geworCXBhcnBvcnRfZGV2aWNlX2NsYXNzIGNsYXNzOworCWNvbnN0IGNoYXIgKmNsYXNzX25hbWU7CisJY29uc3QgY2hhciAqbWZyOworCWNvbnN0IGNoYXIgKm1vZGVsOworCWNvbnN0IGNoYXIgKmNtZHNldDsKKwljb25zdCBjaGFyICpkZXNjcmlwdGlvbjsKK307CisKKy8qIEVhY2ggZGV2aWNlIGNhbiBoYXZlIHR3byBjYWxsYmFjayBmdW5jdGlvbnM6CisgKiAgMSkgYSBwcmVlbXB0aW9uIGZ1bmN0aW9uLCBjYWxsZWQgYnkgdGhlIHJlc291cmNlIG1hbmFnZXIgdG8gcmVxdWVzdAorICogICAgIHRoYXQgdGhlIGRyaXZlciByZWxpbnF1aXNoIGNvbnRyb2wgb2YgdGhlIHBvcnQuICBUaGUgZHJpdmVyIHNob3VsZAorICogICAgIHJldHVybiB6ZXJvIGlmIGl0IGFncmVlcyB0byByZWxlYXNlIHRoZSBwb3J0LCBhbmQgbm9uemVybyBpZiBpdCAKKyAqICAgICByZWZ1c2VzLiAgRG8gbm90IGNhbGwgcGFycG9ydF9yZWxlYXNlKCkgLSB0aGUga2VybmVsIHdpbGwgZG8gdGhpcworICogICAgIGltcGxpY2l0bHkuCisgKgorICogIDIpIGEgd2FrZS11cCBmdW5jdGlvbiwgY2FsbGVkIGJ5IHRoZSByZXNvdXJjZSBtYW5hZ2VyIHRvIHRlbGwgZHJpdmVycworICogICAgIHRoYXQgdGhlIHBvcnQgaXMgYXZhaWxhYmxlIHRvIGJlIGNsYWltZWQuICBJZiBhIGRyaXZlciB3YW50cyB0byB1c2UKKyAqICAgICB0aGUgcG9ydCwgaXQgc2hvdWxkIGNhbGwgcGFycG9ydF9jbGFpbSgpIGhlcmUuCisgKi8KKworLyogQSBwYXJhbGxlbCBwb3J0IGRldmljZSAqLworc3RydWN0IHBhcmRldmljZSB7CisJY29uc3QgY2hhciAqbmFtZTsKKwlzdHJ1Y3QgcGFycG9ydCAqcG9ydDsKKwlpbnQgZGFpc3k7CisJaW50ICgqcHJlZW1wdCkodm9pZCAqKTsKKwl2b2lkICgqd2FrZXVwKSh2b2lkICopOworCXZvaWQgKnByaXZhdGU7CisJdm9pZCAoKmlycV9mdW5jKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKik7CisJdW5zaWduZWQgaW50IGZsYWdzOworCXN0cnVjdCBwYXJkZXZpY2UgKm5leHQ7CisJc3RydWN0IHBhcmRldmljZSAqcHJldjsKKwlzdHJ1Y3QgcGFycG9ydF9zdGF0ZSAqc3RhdGU7ICAgICAvKiBzYXZlZCBzdGF0dXMgb3ZlciBwcmVlbXB0aW9uICovCisJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdF9xOworCXVuc2lnbmVkIGxvbmcgaW50IHRpbWU7CisJdW5zaWduZWQgbG9uZyBpbnQgdGltZXNsaWNlOworCXZvbGF0aWxlIGxvbmcgaW50IHRpbWVvdXQ7CisJdW5zaWduZWQgbG9uZyB3YWl0aW5nOwkJIC8qIGxvbmcgcmVxJ2QgZm9yIHNldF9iaXQgLS1SUiAqLworCXN0cnVjdCBwYXJkZXZpY2UgKndhaXRwcmV2OworCXN0cnVjdCBwYXJkZXZpY2UgKndhaXRuZXh0OworCXZvaWQgKiBzeXNjdGxfdGFibGU7Cit9OworCisvKiBJRUVFMTI4NCBpbmZvcm1hdGlvbiAqLworCisvKiBJRUVFMTI4NCBwaGFzZXMgKi8KK2VudW0gaWVlZTEyODRfcGhhc2UgeworCUlFRUUxMjg0X1BIX0ZXRF9EQVRBLAorCUlFRUUxMjg0X1BIX0ZXRF9JRExFLAorCUlFRUUxMjg0X1BIX1RFUk1JTkFURSwKKwlJRUVFMTI4NF9QSF9ORUdPVElBVElPTiwKKwlJRUVFMTI4NF9QSF9IQlVTWV9ETkEsCisJSUVFRTEyODRfUEhfUkVWX0lETEUsCisJSUVFRTEyODRfUEhfSEJVU1lfREFWQUlMLAorCUlFRUUxMjg0X1BIX1JFVl9EQVRBLAorCUlFRUUxMjg0X1BIX0VDUF9TRVRVUCwKKwlJRUVFMTI4NF9QSF9FQ1BfRldEX1RPX1JFViwKKwlJRUVFMTI4NF9QSF9FQ1BfUkVWX1RPX0ZXRCwKKwlJRUVFMTI4NF9QSF9FQ1BfRElSX1VOS05PV04sCit9Oworc3RydWN0IGllZWUxMjg0X2luZm8geworCWludCBtb2RlOworCXZvbGF0aWxlIGVudW0gaWVlZTEyODRfcGhhc2UgcGhhc2U7CisJc3RydWN0IHNlbWFwaG9yZSBpcnE7Cit9OworCisvKiBBIHBhcmFsbGVsIHBvcnQgKi8KK3N0cnVjdCBwYXJwb3J0IHsKKwl1bnNpZ25lZCBsb25nIGJhc2U7CS8qIGJhc2UgYWRkcmVzcyAqLworCXVuc2lnbmVkIGxvbmcgYmFzZV9oaTsgIC8qIGJhc2UgYWRkcmVzcyAoaGkgLSBFQ1IpICovCisJdW5zaWduZWQgaW50IHNpemU7CS8qIElPIGV4dGVudCAqLworCWNvbnN0IGNoYXIgKm5hbWU7CisJdW5zaWduZWQgaW50IG1vZGVzOworCWludCBpcnE7CQkvKiBpbnRlcnJ1cHQgKG9yIC0xIGZvciBub25lKSAqLworCWludCBkbWE7CisJaW50IG11eHBvcnQ7CQkvKiB3aGljaCBtdXhwb3J0IChpZiBhbnkpIHRoaXMgaXMgKi8KKwlpbnQgcG9ydG51bTsJCS8qIHdoaWNoIHBoeXNpY2FsIHBhcmFsbGVsIHBvcnQgKG5vdCBtdXgpICovCisKKwlzdHJ1Y3QgcGFycG9ydCAqcGh5c3BvcnQ7CisJCQkJLyogSWYgdGhpcyBpcyBhIG5vbi1kZWZhdWx0IG11eAorCQkJCSAgIHBhcnBvcnQsIGkuZS4gd2UncmUgYSBjbG9uZSBvZiBhIHJlYWwKKwkJCQkgICBwaHlzaWNhbCBwb3J0LCB0aGlzIGlzIGEgcG9pbnRlciB0byB0aGF0CisJCQkJICAgcG9ydC4gVGhlIGxvY2tpbmcgaXMgb25seSBkb25lIGluIHRoZQorCQkJCSAgIHJlYWwgcG9ydC4gIEZvciBhIGNsb25lIHBvcnQsIHRoZQorCQkJCSAgIGZvbGxvd2luZyBzdHJ1Y3R1cmUgbWVtYmVycyBhcmUKKwkJCQkgICBtZWFuaW5nbGVzczogZGV2aWNlcywgY2FkLCBtdXhzZWwsCisJCQkJICAgd2FpdGhlYWQsIHdhaXR0YWlsLCBmbGFncywgcGRpciwKKwkJCQkgICBpZWVlMTI4NCwgKl9sb2NrLgorCisJCQkJICAgSXQgdGhpcyBpcyBhIGRlZmF1bHQgbXV4IHBhcnBvcnQsIG9yCisJCQkJICAgdGhlcmUgaXMgbm8gbXV4IGludm9sdmVkLCB0aGlzIHBvaW50cyB0bworCQkJCSAgIG91cnNlbGYuICovCisKKwlzdHJ1Y3QgcGFyZGV2aWNlICpkZXZpY2VzOworCXN0cnVjdCBwYXJkZXZpY2UgKmNhZDsJLyogcG9ydCBvd25lciAqLworCWludCBkYWlzeTsJCS8qIGN1cnJlbnRseSBzZWxlY3RlZCBkYWlzeSBhZGRyICovCisJaW50IG11eHNlbDsJCS8qIGN1cnJlbnRseSBzZWxlY3RlZCBtdXggcG9ydCAqLworCisJc3RydWN0IHBhcmRldmljZSAqd2FpdGhlYWQ7CisJc3RydWN0IHBhcmRldmljZSAqd2FpdHRhaWw7CisJCisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXVuc2lnbmVkIGludCBmbGFnczsKKworCXZvaWQgKnN5c2N0bF90YWJsZTsKKwlzdHJ1Y3QgcGFycG9ydF9kZXZpY2VfaW5mbyBwcm9iZV9pbmZvWzVdOyAvKiAwLTMgKyBub24tSUVFRTEyODQuMyAqLworCXN0cnVjdCBpZWVlMTI4NF9pbmZvIGllZWUxMjg0OworCisJc3RydWN0IHBhcnBvcnRfb3BlcmF0aW9ucyAqb3BzOworCXZvaWQgKnByaXZhdGVfZGF0YTsgICAgIC8qIGZvciBsb3dsZXZlbCBkcml2ZXIgKi8KKworCWludCBudW1iZXI7CQkvKiBwb3J0IGluZGV4IC0gdGhlIGBuJyBpbiBgcGFycG9ydG4nICovCisJc3BpbmxvY2tfdCBwYXJkZXZpY2VfbG9jazsKKwlzcGlubG9ja190IHdhaXRsaXN0X2xvY2s7CisJcndsb2NrX3QgY2FkX2xvY2s7CisKKwlpbnQgc3BpbnRpbWU7CisJYXRvbWljX3QgcmVmX2NvdW50OworCisJc3RydWN0IGxpc3RfaGVhZCBmdWxsX2xpc3Q7CisJc3RydWN0IHBhcnBvcnQgKnNsYXZlc1szXTsKK307CisKKyNkZWZpbmUgREVGQVVMVF9TUElOX1RJTUUgNTAwIC8qIHVzICovCisKK3N0cnVjdCBwYXJwb3J0X2RyaXZlciB7CisJY29uc3QgY2hhciAqbmFtZTsKKwl2b2lkICgqYXR0YWNoKSAoc3RydWN0IHBhcnBvcnQgKik7CisJdm9pZCAoKmRldGFjaCkgKHN0cnVjdCBwYXJwb3J0ICopOworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKK307CisKKy8qIHBhcnBvcnRfcmVnaXN0ZXJfcG9ydCByZWdpc3RlcnMgYSBuZXcgcGFyYWxsZWwgcG9ydCBhdCB0aGUgZ2l2ZW4KKyAgIGFkZHJlc3MgKGlmIG9uZSBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0KSBhbmQgcmV0dXJucyBhIHBvaW50ZXIgdG8gaXQuCisgICBUaGlzIGVudGFpbHMgY2xhaW1pbmcgdGhlIEkvTyByZWdpb24sIElSUSBhbmQgRE1BLiAgTlVMTCBpcyByZXR1cm5lZAorICAgaWYgaW5pdGlhbGlzYXRpb24gZmFpbHMuICovCitzdHJ1Y3QgcGFycG9ydCAqcGFycG9ydF9yZWdpc3Rlcl9wb3J0KHVuc2lnbmVkIGxvbmcgYmFzZSwgaW50IGlycSwgaW50IGRtYSwKKwkJCQkgICAgICBzdHJ1Y3QgcGFycG9ydF9vcGVyYXRpb25zICpvcHMpOworCisvKiBPbmNlIGEgcmVnaXN0ZXJlZCBwb3J0IGlzIHJlYWR5IGZvciBoaWdoLWxldmVsIGRyaXZlcnMgdG8gdXNlLCB0aGUKKyAgIGxvdy1sZXZlbCBkcml2ZXIgdGhhdCByZWdpc3RlcmVkIGl0IHNob3VsZCBhbm5vdW5jZSBpdC4gIFRoaXMgd2lsbAorICAgY2FsbCB0aGUgaGlnaC1sZXZlbCBkcml2ZXJzJyBhdHRhY2goKSBmdW5jdGlvbnMgKGFmdGVyIHRoaW5ncyBsaWtlCisgICBkZXRlcm1pbmluZyB0aGUgSUVFRSAxMjg0LjMgdG9wb2xvZ3kgb2YgdGhlIHBvcnQgYW5kIGNvbGxlY3RpbmcKKyAgIERldmljZUlEcykuICovCit2b2lkIHBhcnBvcnRfYW5ub3VuY2VfcG9ydCAoc3RydWN0IHBhcnBvcnQgKnBvcnQpOworCisvKiBVbnJlZ2lzdGVyIGEgcG9ydC4gKi8KK2V4dGVybiB2b2lkIHBhcnBvcnRfcmVtb3ZlX3BvcnQoc3RydWN0IHBhcnBvcnQgKnBvcnQpOworCisvKiBSZWdpc3RlciBhIG5ldyBoaWdoLWxldmVsIGRyaXZlci4gKi8KK2V4dGVybiBpbnQgcGFycG9ydF9yZWdpc3Rlcl9kcml2ZXIgKHN0cnVjdCBwYXJwb3J0X2RyaXZlciAqKTsKKworLyogVW5yZWdpc3RlciBhIGhpZ2gtbGV2ZWwgZHJpdmVyLiAqLworZXh0ZXJuIHZvaWQgcGFycG9ydF91bnJlZ2lzdGVyX2RyaXZlciAoc3RydWN0IHBhcnBvcnRfZHJpdmVyICopOworCisvKiBJZiBwYXJwb3J0X3JlZ2lzdGVyX2RyaXZlciBkb2Vzbid0IGZpdCB5b3VyIG5lZWRzLCBwZXJoYXBzCisgKiBwYXJwb3J0X2ZpbmRfeHh4IGRvZXMuICovCitleHRlcm4gc3RydWN0IHBhcnBvcnQgKnBhcnBvcnRfZmluZF9udW1iZXIgKGludCk7CitleHRlcm4gc3RydWN0IHBhcnBvcnQgKnBhcnBvcnRfZmluZF9iYXNlICh1bnNpZ25lZCBsb25nKTsKKworLyogUmVmZXJlbmNlIGNvdW50aW5nIGZvciBwb3J0cy4gKi8KK2V4dGVybiBzdHJ1Y3QgcGFycG9ydCAqcGFycG9ydF9nZXRfcG9ydCAoc3RydWN0IHBhcnBvcnQgKik7CitleHRlcm4gdm9pZCBwYXJwb3J0X3B1dF9wb3J0IChzdHJ1Y3QgcGFycG9ydCAqKTsKKworLyogcGFycG9ydF9yZWdpc3Rlcl9kZXZpY2UgZGVjbGFyZXMgdGhhdCBhIGRldmljZSBpcyBjb25uZWN0ZWQgdG8gYQorICAgcG9ydCwgYW5kIHRlbGxzIHRoZSBrZXJuZWwgYWxsIGl0IG5lZWRzIHRvIGtub3cuCisgICAtIHBmIGlzIHRoZSBwcmVlbXB0aW9uIGZ1bmN0aW9uIChtYXkgYmUgTlVMTCBmb3Igbm8gY2FsbGJhY2spCisgICAtIGtmIGlzIHRoZSB3YWtlLXVwIGZ1bmN0aW9uIChtYXkgYmUgTlVMTCBmb3Igbm8gY2FsbGJhY2spCisgICAtIGlycV9mdW5jIGlzIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciAobWF5IGJlIE5VTEwgZm9yIG5vIGludGVycnVwdHMpCisgICAtIGhhbmRsZSBpcyBhIHVzZXIgcG9pbnRlciB0aGF0IGdldHMgaGFuZGVkIHRvIGNhbGxiYWNrIGZ1bmN0aW9ucy4gICovCitzdHJ1Y3QgcGFyZGV2aWNlICpwYXJwb3J0X3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgcGFycG9ydCAqcG9ydCwgCisJCQkgIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgIGludCAoKnBmKSh2b2lkICopLCB2b2lkICgqa2YpKHZvaWQgKiksCisJCQkgIHZvaWQgKCppcnFfZnVuYykoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopLCAKKwkJCSAgaW50IGZsYWdzLCB2b2lkICpoYW5kbGUpOworCisvKiBwYXJwb3J0X3VucmVnaXN0ZXIgdW5saW5rcyBhIGRldmljZSBmcm9tIHRoZSBjaGFpbi4gKi8KK2V4dGVybiB2b2lkIHBhcnBvcnRfdW5yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IHBhcmRldmljZSAqZGV2KTsKKworLyogcGFycG9ydF9jbGFpbSB0cmllcyB0byBnYWluIG93bmVyc2hpcCBvZiB0aGUgcG9ydCBmb3IgYSBwYXJ0aWN1bGFyCisgICBkcml2ZXIuICBUaGlzIG1heSBmYWlsIChyZXR1cm4gbm9uLXplcm8pIGlmIGFub3RoZXIgZHJpdmVyIGlzIGJ1c3kuCisgICBJZiB0aGlzIGRyaXZlciBoYXMgcmVnaXN0ZXJlZCBhbiBpbnRlcnJ1cHQgaGFuZGxlciwgaXQgd2lsbCBiZQorICAgZW5hYmxlZC4gICovCitleHRlcm4gaW50IHBhcnBvcnRfY2xhaW0oc3RydWN0IHBhcmRldmljZSAqZGV2KTsKKworLyogcGFycG9ydF9jbGFpbV9vcl9ibG9jayBpcyB0aGUgc2FtZSwgYnV0IHNsZWVwcyBpZiB0aGUgcG9ydCBjYW5ub3QKKyAgIGJlIGNsYWltZWQuICBSZXR1cm4gdmFsdWUgaXMgMSBpZiBpdCBzbGVwdCwgMCBub3JtYWxseSBhbmQgLWVycm5vCisgICBvbiBlcnJvci4gICovCitleHRlcm4gaW50IHBhcnBvcnRfY2xhaW1fb3JfYmxvY2soc3RydWN0IHBhcmRldmljZSAqZGV2KTsKKworLyogcGFycG9ydF9yZWxlYXNlIHJldmVyc2VzIGEgcHJldmlvdXMgcGFycG9ydF9jbGFpbS4gIFRoaXMgY2FuIG5ldmVyCisgICBmYWlsLCB0aG91Z2ggdGhlIGVmZmVjdHMgYXJlIHVuZGVmaW5lZCAoZXhjZXB0IHRoYXQgdGhleSBhcmUgYmFkKQorICAgaWYgeW91IGRpZG4ndCBwcmV2aW91c2x5IG93biB0aGUgcG9ydC4gIE9uY2UgeW91IGhhdmUgcmVsZWFzZWQgdGhlCisgICBwb3J0IHlvdSBzaG91bGQgbWFrZSBzdXJlIHRoYXQgbmVpdGhlciB5b3VyIGNvZGUgbm9yIHRoZSBoYXJkd2FyZQorICAgb24gdGhlIHBvcnQgdHJpZXMgdG8gaW5pdGlhdGUgYW55IGNvbW11bmljYXRpb24gd2l0aG91dCBmaXJzdAorICAgcmUtY2xhaW1pbmcgdGhlIHBvcnQuICBJZiB5b3UgbWVzcyB3aXRoIHRoZSBwb3J0IHN0YXRlIChlbmFibGluZworICAgRUNQIGZvciBleGFtcGxlKSB5b3Ugc2hvdWxkIGNsZWFuIHVwIGJlZm9yZSByZWxlYXNpbmcgdGhlIHBvcnQuICovCisKK2V4dGVybiB2b2lkIHBhcnBvcnRfcmVsZWFzZShzdHJ1Y3QgcGFyZGV2aWNlICpkZXYpOworCisvKioKKyAqIHBhcnBvcnRfeWllbGQgLSByZWxpbnF1aXNoIGEgcGFyYWxsZWwgcG9ydCB0ZW1wb3JhcmlseQorICogQGRldjogYSBkZXZpY2Ugb24gdGhlIHBhcmFsbGVsIHBvcnQKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJlbGlucXVpc2hlcyB0aGUgcG9ydCBpZiBpdCB3b3VsZCBiZSBoZWxwZnVsIHRvIG90aGVyCisgKiBkcml2ZXJzIHRvIGRvIHNvLiAgQWZ0ZXJ3YXJkcyBpdCB0cmllcyB0byByZWNsYWltIHRoZSBwb3J0IHVzaW5nCisgKiBwYXJwb3J0X2NsYWltKCksIGFuZCB0aGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBzYW1lIGFzIGZvcgorICogcGFycG9ydF9jbGFpbSgpLiAgSWYgaXQgZmFpbHMsIHRoZSBwb3J0IGlzIGxlZnQgdW5jbGFpbWVkIGFuZCBpdCBpcworICogdGhlIGRyaXZlcidzIHJlc3BvbnNpYmlsaXR5IHRvIHJlY2xhaW0gdGhlIHBvcnQuCisgKgorICogVGhlIHBhcnBvcnRfeWllbGQoKSBhbmQgcGFycG9ydF95aWVsZF9ibG9ja2luZygpIGZ1bmN0aW9ucyBhcmUgZm9yCisgKiBtYXJraW5nIHBvaW50cyBpbiB0aGUgZHJpdmVyIGF0IHdoaWNoIG90aGVyIGRyaXZlcnMgbWF5IGNsYWltIHRoZQorICogcG9ydCBhbmQgdXNlIHRoZWlyIGRldmljZXMuICBZaWVsZGluZyB0aGUgcG9ydCBpcyBzaW1pbGFyIHRvCisgKiByZWxlYXNpbmcgaXQgYW5kIHJlY2xhaW1pbmcgaXQsIGJ1dCBpcyBtb3JlIGVmZmljaWVudCBiZWNhdXNlIG5vCisgKiBhY3Rpb24gaXMgdGFrZW4gaWYgdGhlcmUgYXJlIG5vIG90aGVyIGRldmljZXMgbmVlZGluZyB0aGUgcG9ydC4gIEluCisgKiBmYWN0LCBub3RoaW5nIGlzIGRvbmUgZXZlbiBpZiB0aGVyZSBhcmUgb3RoZXIgZGV2aWNlcyB3YWl0aW5nIGJ1dAorICogdGhlIGN1cnJlbnQgZGV2aWNlIGlzIHN0aWxsIHdpdGhpbiBpdHMgInRpbWVzbGljZSIuICBUaGUgZGVmYXVsdAorICogdGltZXNsaWNlIGlzIGhhbGYgYSBzZWNvbmQsIGJ1dCBpdCBjYW4gYmUgYWRqdXN0ZWQgdmlhIHRoZSAvcHJvYworICogaW50ZXJmYWNlLgorICoqLworc3RhdGljIF9faW5saW5lX18gaW50IHBhcnBvcnRfeWllbGQoc3RydWN0IHBhcmRldmljZSAqZGV2KQoreworCXVuc2lnbmVkIGxvbmcgaW50IHRpbWVzbGlwID0gKGppZmZpZXMgLSBkZXYtPnRpbWUpOworCWlmICgoZGV2LT5wb3J0LT53YWl0aGVhZCA9PSBOVUxMKSB8fCAodGltZXNsaXAgPCBkZXYtPnRpbWVzbGljZSkpCisJCXJldHVybiAwOworCXBhcnBvcnRfcmVsZWFzZShkZXYpOworCXJldHVybiBwYXJwb3J0X2NsYWltKGRldik7Cit9CisKKy8qKgorICogcGFycG9ydF95aWVsZF9ibG9ja2luZyAtIHJlbGlucXVpc2ggYSBwYXJhbGxlbCBwb3J0IHRlbXBvcmFyaWx5CisgKiBAZGV2OiBhIGRldmljZSBvbiB0aGUgcGFyYWxsZWwgcG9ydAorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmVsaW5xdWlzaGVzIHRoZSBwb3J0IGlmIGl0IHdvdWxkIGJlIGhlbHBmdWwgdG8gb3RoZXIKKyAqIGRyaXZlcnMgdG8gZG8gc28uICBBZnRlcndhcmRzIGl0IHRyaWVzIHRvIHJlY2xhaW0gdGhlIHBvcnQgdXNpbmcKKyAqIHBhcnBvcnRfY2xhaW1fb3JfYmxvY2soKSwgYW5kIHRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIHNhbWUgYXMgZm9yCisgKiBwYXJwb3J0X2NsYWltX29yX2Jsb2NrKCkuCisgKiovCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgcGFycG9ydF95aWVsZF9ibG9ja2luZyhzdHJ1Y3QgcGFyZGV2aWNlICpkZXYpCit7CisJdW5zaWduZWQgbG9uZyBpbnQgdGltZXNsaXAgPSAoamlmZmllcyAtIGRldi0+dGltZSk7CisJaWYgKChkZXYtPnBvcnQtPndhaXRoZWFkID09IE5VTEwpIHx8ICh0aW1lc2xpcCA8IGRldi0+dGltZXNsaWNlKSkKKwkJcmV0dXJuIDA7CisJcGFycG9ydF9yZWxlYXNlKGRldik7CisJcmV0dXJuIHBhcnBvcnRfY2xhaW1fb3JfYmxvY2soZGV2KTsKK30KKworLyogRmxhZ3MgdXNlZCB0byBpZGVudGlmeSB3aGF0IGEgZGV2aWNlIGRvZXMuICovCisjZGVmaW5lIFBBUlBPUlRfREVWX1RSQU4JCTAJLyogV0FSTklORyAhISBERVBSRUNBVEVEICEhICovCisjZGVmaW5lIFBBUlBPUlRfREVWX0xVUksJCSgxPDwwKQkvKiBXQVJOSU5HICEhIERFUFJFQ0FURUQgISEgKi8KKyNkZWZpbmUgUEFSUE9SVF9ERVZfRVhDTAkJKDE8PDEpCS8qIE5lZWQgZXhjbHVzaXZlIGFjY2Vzcy4gKi8KKworI2RlZmluZSBQQVJQT1JUX0ZMQUdfRVhDTAkJKDE8PDEpCS8qIEVYQ0wgZHJpdmVyIHJlZ2lzdGVyZWQuICovCisKKy8qIElFRUUxMjg0IGZ1bmN0aW9ucyAqLworZXh0ZXJuIHZvaWQgcGFycG9ydF9pZWVlMTI4NF9pbnRlcnJ1cHQgKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKK2V4dGVybiBpbnQgcGFycG9ydF9uZWdvdGlhdGUgKHN0cnVjdCBwYXJwb3J0ICosIGludCBtb2RlKTsKK2V4dGVybiBzc2l6ZV90IHBhcnBvcnRfd3JpdGUgKHN0cnVjdCBwYXJwb3J0ICosIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbik7CitleHRlcm4gc3NpemVfdCBwYXJwb3J0X3JlYWQgKHN0cnVjdCBwYXJwb3J0ICosIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbik7CisKKyNkZWZpbmUgUEFSUE9SVF9JTkFDVElWSVRZX09fTk9OQkxPQ0sgMQorZXh0ZXJuIGxvbmcgcGFycG9ydF9zZXRfdGltZW91dCAoc3RydWN0IHBhcmRldmljZSAqLCBsb25nIGluYWN0aXZpdHkpOworCitleHRlcm4gaW50IHBhcnBvcnRfd2FpdF9ldmVudCAoc3RydWN0IHBhcnBvcnQgKiwgbG9uZyB0aW1lb3V0KTsKK2V4dGVybiBpbnQgcGFycG9ydF93YWl0X3BlcmlwaGVyYWwgKHN0cnVjdCBwYXJwb3J0ICpwb3J0LAorCQkJCSAgICB1bnNpZ25lZCBjaGFyIG1hc2ssCisJCQkJICAgIHVuc2lnbmVkIGNoYXIgdmFsKTsKK2V4dGVybiBpbnQgcGFycG9ydF9wb2xsX3BlcmlwaGVyYWwgKHN0cnVjdCBwYXJwb3J0ICpwb3J0LAorCQkJCSAgICB1bnNpZ25lZCBjaGFyIG1hc2ssCisJCQkJICAgIHVuc2lnbmVkIGNoYXIgdmFsLAorCQkJCSAgICBpbnQgdXNlYyk7CisKKy8qIEZvciBhcmNoaXRlY3R1cmFsIGRyaXZlcnMgKi8KK2V4dGVybiBzaXplX3QgcGFycG9ydF9pZWVlMTI4NF93cml0ZV9jb21wYXQgKHN0cnVjdCBwYXJwb3J0ICosCisJCQkJCSAgICAgY29uc3Qgdm9pZCAqLCBzaXplX3QsIGludCk7CitleHRlcm4gc2l6ZV90IHBhcnBvcnRfaWVlZTEyODRfcmVhZF9uaWJibGUgKHN0cnVjdCBwYXJwb3J0ICosCisJCQkJCSAgICB2b2lkICosIHNpemVfdCwgaW50KTsKK2V4dGVybiBzaXplX3QgcGFycG9ydF9pZWVlMTI4NF9yZWFkX2J5dGUgKHN0cnVjdCBwYXJwb3J0ICosCisJCQkJCSAgdm9pZCAqLCBzaXplX3QsIGludCk7CitleHRlcm4gc2l6ZV90IHBhcnBvcnRfaWVlZTEyODRfZWNwX3JlYWRfZGF0YSAoc3RydWN0IHBhcnBvcnQgKiwKKwkJCQkJICAgICAgdm9pZCAqLCBzaXplX3QsIGludCk7CitleHRlcm4gc2l6ZV90IHBhcnBvcnRfaWVlZTEyODRfZWNwX3dyaXRlX2RhdGEgKHN0cnVjdCBwYXJwb3J0ICosCisJCQkJCSAgICAgICBjb25zdCB2b2lkICosIHNpemVfdCwgaW50KTsKK2V4dGVybiBzaXplX3QgcGFycG9ydF9pZWVlMTI4NF9lY3Bfd3JpdGVfYWRkciAoc3RydWN0IHBhcnBvcnQgKiwKKwkJCQkJICAgICAgIGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBpbnQpOworZXh0ZXJuIHNpemVfdCBwYXJwb3J0X2llZWUxMjg0X2VwcF93cml0ZV9kYXRhIChzdHJ1Y3QgcGFycG9ydCAqLAorCQkJCQkgICAgICAgY29uc3Qgdm9pZCAqLCBzaXplX3QsIGludCk7CitleHRlcm4gc2l6ZV90IHBhcnBvcnRfaWVlZTEyODRfZXBwX3JlYWRfZGF0YSAoc3RydWN0IHBhcnBvcnQgKiwKKwkJCQkJICAgICAgdm9pZCAqLCBzaXplX3QsIGludCk7CitleHRlcm4gc2l6ZV90IHBhcnBvcnRfaWVlZTEyODRfZXBwX3dyaXRlX2FkZHIgKHN0cnVjdCBwYXJwb3J0ICosCisJCQkJCSAgICAgICBjb25zdCB2b2lkICosIHNpemVfdCwgaW50KTsKK2V4dGVybiBzaXplX3QgcGFycG9ydF9pZWVlMTI4NF9lcHBfcmVhZF9hZGRyIChzdHJ1Y3QgcGFycG9ydCAqLAorCQkJCQkgICAgICB2b2lkICosIHNpemVfdCwgaW50KTsKKworLyogSUVFRTEyODQuMyBmdW5jdGlvbnMgKi8KK2V4dGVybiBpbnQgcGFycG9ydF9kYWlzeV9pbml0IChzdHJ1Y3QgcGFycG9ydCAqcG9ydCk7CitleHRlcm4gdm9pZCBwYXJwb3J0X2RhaXN5X2ZpbmkgKHN0cnVjdCBwYXJwb3J0ICpwb3J0KTsKK2V4dGVybiBzdHJ1Y3QgcGFyZGV2aWNlICpwYXJwb3J0X29wZW4gKGludCBkZXZudW0sIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJICAgICAgIGludCAoKnBmKSAodm9pZCAqKSwKKwkJCQkgICAgICAgdm9pZCAoKmtmKSAodm9pZCAqKSwKKwkJCQkgICAgICAgdm9pZCAoKmlycWYpIChpbnQsIHZvaWQgKiwKKwkJCQkJCSAgICAgc3RydWN0IHB0X3JlZ3MgKiksCisJCQkJICAgICAgIGludCBmbGFncywgdm9pZCAqaGFuZGxlKTsKK2V4dGVybiB2b2lkIHBhcnBvcnRfY2xvc2UgKHN0cnVjdCBwYXJkZXZpY2UgKmRldik7CitleHRlcm4gc3NpemVfdCBwYXJwb3J0X2RldmljZV9pZCAoaW50IGRldm51bSwgY2hhciAqYnVmZmVyLCBzaXplX3QgbGVuKTsKK2V4dGVybiBpbnQgcGFycG9ydF9kZXZpY2VfbnVtIChpbnQgcGFycG9ydCwgaW50IG11eCwgaW50IGRhaXN5KTsKK2V4dGVybiB2b2lkIHBhcnBvcnRfZGFpc3lfZGVzZWxlY3RfYWxsIChzdHJ1Y3QgcGFycG9ydCAqcG9ydCk7CitleHRlcm4gaW50IHBhcnBvcnRfZGFpc3lfc2VsZWN0IChzdHJ1Y3QgcGFycG9ydCAqcG9ydCwgaW50IGRhaXN5LCBpbnQgbW9kZSk7CisKKy8qIExvd2xldmVsIGRyaXZlcnMgX2Nhbl8gY2FsbCB0aGlzIHN1cHBvcnQgZnVuY3Rpb24gdG8gaGFuZGxlIGlycXMuICAqLworc3RhdGljIF9faW5saW5lX18gdm9pZCBwYXJwb3J0X2dlbmVyaWNfaXJxKGludCBpcnEsIHN0cnVjdCBwYXJwb3J0ICpwb3J0LAorCQkJCQkgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlwYXJwb3J0X2llZWUxMjg0X2ludGVycnVwdCAoaXJxLCBwb3J0LCByZWdzKTsKKwlyZWFkX2xvY2soJnBvcnQtPmNhZF9sb2NrKTsKKwlpZiAocG9ydC0+Y2FkICYmIHBvcnQtPmNhZC0+aXJxX2Z1bmMpCisJCXBvcnQtPmNhZC0+aXJxX2Z1bmMoaXJxLCBwb3J0LT5jYWQtPnByaXZhdGUsIHJlZ3MpOworCXJlYWRfdW5sb2NrKCZwb3J0LT5jYWRfbG9jayk7Cit9CisKKy8qIFByb3RvdHlwZXMgZnJvbSBwYXJwb3J0X3Byb2NmcyAqLworZXh0ZXJuIGludCBwYXJwb3J0X3Byb2NfcmVnaXN0ZXIoc3RydWN0IHBhcnBvcnQgKnBwKTsKK2V4dGVybiBpbnQgcGFycG9ydF9wcm9jX3VucmVnaXN0ZXIoc3RydWN0IHBhcnBvcnQgKnBwKTsKK2V4dGVybiBpbnQgcGFycG9ydF9kZXZpY2VfcHJvY19yZWdpc3RlcihzdHJ1Y3QgcGFyZGV2aWNlICpkZXZpY2UpOworZXh0ZXJuIGludCBwYXJwb3J0X2RldmljZV9wcm9jX3VucmVnaXN0ZXIoc3RydWN0IHBhcmRldmljZSAqZGV2aWNlKTsKKworLyogSWYgUEMgaGFyZHdhcmUgaXMgdGhlIG9ubHkgdHlwZSBzdXBwb3J0ZWQsIHdlIGNhbiBvcHRpbWlzZSBhIGJpdC4gICovCisjaWYgIWRlZmluZWQoQ09ORklHX1BBUlBPUlRfTk9UX1BDKQorCisjaW5jbHVkZSA8bGludXgvcGFycG9ydF9wYy5oPgorI2RlZmluZSBwYXJwb3J0X3dyaXRlX2RhdGEocCx4KSAgICAgICAgICAgIHBhcnBvcnRfcGNfd3JpdGVfZGF0YShwLHgpCisjZGVmaW5lIHBhcnBvcnRfcmVhZF9kYXRhKHApICAgICAgICAgICAgICAgcGFycG9ydF9wY19yZWFkX2RhdGEocCkKKyNkZWZpbmUgcGFycG9ydF93cml0ZV9jb250cm9sKHAseCkgICAgICAgICBwYXJwb3J0X3BjX3dyaXRlX2NvbnRyb2wocCx4KQorI2RlZmluZSBwYXJwb3J0X3JlYWRfY29udHJvbChwKSAgICAgICAgICAgIHBhcnBvcnRfcGNfcmVhZF9jb250cm9sKHApCisjZGVmaW5lIHBhcnBvcnRfZnJvYl9jb250cm9sKHAsbSx2KSAgICAgICAgcGFycG9ydF9wY19mcm9iX2NvbnRyb2wocCxtLHYpCisjZGVmaW5lIHBhcnBvcnRfcmVhZF9zdGF0dXMocCkgICAgICAgICAgICAgcGFycG9ydF9wY19yZWFkX3N0YXR1cyhwKQorI2RlZmluZSBwYXJwb3J0X2VuYWJsZV9pcnEocCkgICAgICAgICAgICAgIHBhcnBvcnRfcGNfZW5hYmxlX2lycShwKQorI2RlZmluZSBwYXJwb3J0X2Rpc2FibGVfaXJxKHApICAgICAgICAgICAgIHBhcnBvcnRfcGNfZGlzYWJsZV9pcnEocCkKKyNkZWZpbmUgcGFycG9ydF9kYXRhX2ZvcndhcmQocCkgICAgICAgICAgICBwYXJwb3J0X3BjX2RhdGFfZm9yd2FyZChwKQorI2RlZmluZSBwYXJwb3J0X2RhdGFfcmV2ZXJzZShwKSAgICAgICAgICAgIHBhcnBvcnRfcGNfZGF0YV9yZXZlcnNlKHApCisKKyNlbHNlICAvKiAgIUNPTkZJR19QQVJQT1JUX05PVF9QQyAgKi8KKworLyogR2VuZXJpYyBvcGVyYXRpb25zIHZlY3RvciB0aHJvdWdoIHRoZSBkaXNwYXRjaCB0YWJsZS4gKi8KKyNkZWZpbmUgcGFycG9ydF93cml0ZV9kYXRhKHAseCkgICAgICAgICAgICAocCktPm9wcy0+d3JpdGVfZGF0YShwLHgpCisjZGVmaW5lIHBhcnBvcnRfcmVhZF9kYXRhKHApICAgICAgICAgICAgICAgKHApLT5vcHMtPnJlYWRfZGF0YShwKQorI2RlZmluZSBwYXJwb3J0X3dyaXRlX2NvbnRyb2wocCx4KSAgICAgICAgIChwKS0+b3BzLT53cml0ZV9jb250cm9sKHAseCkKKyNkZWZpbmUgcGFycG9ydF9yZWFkX2NvbnRyb2wocCkgICAgICAgICAgICAocCktPm9wcy0+cmVhZF9jb250cm9sKHApCisjZGVmaW5lIHBhcnBvcnRfZnJvYl9jb250cm9sKHAsbSx2KSAgICAgICAgKHApLT5vcHMtPmZyb2JfY29udHJvbChwLG0sdikKKyNkZWZpbmUgcGFycG9ydF9yZWFkX3N0YXR1cyhwKSAgICAgICAgICAgICAocCktPm9wcy0+cmVhZF9zdGF0dXMocCkKKyNkZWZpbmUgcGFycG9ydF9lbmFibGVfaXJxKHApICAgICAgICAgICAgICAocCktPm9wcy0+ZW5hYmxlX2lycShwKQorI2RlZmluZSBwYXJwb3J0X2Rpc2FibGVfaXJxKHApICAgICAgICAgICAgIChwKS0+b3BzLT5kaXNhYmxlX2lycShwKQorI2RlZmluZSBwYXJwb3J0X2RhdGFfZm9yd2FyZChwKSAgICAgICAgICAgIChwKS0+b3BzLT5kYXRhX2ZvcndhcmQocCkKKyNkZWZpbmUgcGFycG9ydF9kYXRhX3JldmVyc2UocCkgICAgICAgICAgICAocCktPm9wcy0+ZGF0YV9yZXZlcnNlKHApCisKKyNlbmRpZiAvKiAgIUNPTkZJR19QQVJQT1JUX05PVF9QQyAgKi8KKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAvKiBfUEFSUE9SVF9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYXJwb3J0X3BjLmggYi9pbmNsdWRlL2xpbnV4L3BhcnBvcnRfcGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODI1Yzc2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9wYXJwb3J0X3BjLmgKQEAgLTAsMCArMSwyMzggQEAKKyNpZm5kZWYgX19MSU5VWF9QQVJQT1JUX1BDX0gKKyNkZWZpbmUgX19MSU5VWF9QQVJQT1JUX1BDX0gKKworI2luY2x1ZGUgPGFzbS9pby5oPgorCisvKiAtLS0gcmVnaXN0ZXIgZGVmaW5pdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEVDT05UUk9MKHApICgocCktPmJhc2VfaGkgKyAweDIpCisjZGVmaW5lIENPTkZJR0IocCkgICgocCktPmJhc2VfaGkgKyAweDEpCisjZGVmaW5lIENPTkZJR0EocCkgICgocCktPmJhc2VfaGkgKyAweDApCisjZGVmaW5lIEZJRk8ocCkgICAgICgocCktPmJhc2VfaGkgKyAweDApCisjZGVmaW5lIEVQUERBVEEocCkgICgocCktPmJhc2UgICAgKyAweDQpCisjZGVmaW5lIEVQUEFERFIocCkgICgocCktPmJhc2UgICAgKyAweDMpCisjZGVmaW5lIENPTlRST0wocCkgICgocCktPmJhc2UgICAgKyAweDIpCisjZGVmaW5lIFNUQVRVUyhwKSAgICgocCktPmJhc2UgICAgKyAweDEpCisjZGVmaW5lIERBVEEocCkgICAgICgocCktPmJhc2UgICAgKyAweDApCisKK3N0cnVjdCBwYXJwb3J0X3BjX3ByaXZhdGUgeworCS8qIENvbnRlbnRzIG9mIENUUi4gKi8KKwl1bnNpZ25lZCBjaGFyIGN0cjsKKworCS8qIEJpdG1hc2sgb2Ygd3JpdGFibGUgQ1RSIGJpdHMuICovCisJdW5zaWduZWQgY2hhciBjdHJfd3JpdGFibGU7CisKKwkvKiBXaGV0aGVyIG9yIG5vdCB0aGVyZSdzIGFuIEVDUi4gKi8KKwlpbnQgZWNyOworCisJLyogTnVtYmVyIG9mIFBXb3JkcyB0aGF0IEZJRk8gd2lsbCBob2xkLiAqLworCWludCBmaWZvX2RlcHRoOworCisJLyogTnVtYmVyIG9mIGJ5dGVzIHBlciBwb3J0d29yZC4gKi8KKwlpbnQgcHdvcmQ7CisKKwkvKiBOb3QgdXNlZCB5ZXQuICovCisJaW50IHJlYWRJbnRyVGhyZXNob2xkOworCWludCB3cml0ZUludHJUaHJlc2hvbGQ7CisKKwkvKiBidWZmZXIgc3VpdGFibGUgZm9yIERNQSwgaWYgRE1BIGVuYWJsZWQgKi8KKwljaGFyICpkbWFfYnVmOworCWRtYV9hZGRyX3QgZG1hX2hhbmRsZTsKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2OworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3QgcGFycG9ydCAqcG9ydDsKK307CisKK3N0cnVjdCBwYXJwb3J0X3BjX3ZpYV9kYXRhCit7CisJLyogSVNBIFBuUCBJUlEgcm91dGluZyByZWdpc3RlciAxICovCisJdTggdmlhX3BjaV9wYXJwb3J0X2lycV9yZWc7CisJLyogSVNBIFBuUCBETUEgcmVxdWVzdCByb3V0aW5nIHJlZ2lzdGVyICovCisJdTggdmlhX3BjaV9wYXJwb3J0X2RtYV9yZWc7CisJLyogUmVnaXN0ZXIgYW5kIHZhbHVlIHRvIGVuYWJsZSBTdXBlcklPIGNvbmZpZ3VyYXRpb24gYWNjZXNzICovCisJdTggdmlhX3BjaV9zdXBlcmlvX2NvbmZpZ19yZWc7CisJdTggdmlhX3BjaV9zdXBlcmlvX2NvbmZpZ19kYXRhOworCS8qIFN1cGVySU8gZnVuY3Rpb24gcmVnaXN0ZXIgbnVtYmVyICovCisJdTggdmlhY2ZnX2Z1bmN0aW9uOworCS8qIHBhcmFsbGVsIHBvcnQgY29udHJvbCByZWdpc3RlciBudW1iZXIgKi8KKwl1OCB2aWFjZmdfcGFycG9ydF9jb250cm9sOworCS8qIFBhcmFsbGVsIHBvcnQgYmFzZSBhZGRyZXNzIHJlZ2lzdGVyICovCisJdTggdmlhY2ZnX3BhcnBvcnRfYmFzZTsKK307CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgcGFycG9ydF9wY193cml0ZV9kYXRhKHN0cnVjdCBwYXJwb3J0ICpwLCB1bnNpZ25lZCBjaGFyIGQpCit7CisjaWZkZWYgREVCVUdfUEFSUE9SVAorCXByaW50ayAoS0VSTl9ERUJVRyAicGFycG9ydF9wY193cml0ZV9kYXRhKCVwLDB4JTAyeClcbiIsIHAsIGQpOworI2VuZGlmCisJb3V0YihkLCBEQVRBKHApKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgY2hhciBwYXJwb3J0X3BjX3JlYWRfZGF0YShzdHJ1Y3QgcGFycG9ydCAqcCkKK3sKKwl1bnNpZ25lZCBjaGFyIHZhbCA9IGluYiAoREFUQSAocCkpOworI2lmZGVmIERFQlVHX1BBUlBPUlQKKwlwcmludGsgKEtFUk5fREVCVUcgInBhcnBvcnRfcGNfcmVhZF9kYXRhKCVwKSA9IDB4JTAyeFxuIiwKKwkJcCwgdmFsKTsKKyNlbmRpZgorCXJldHVybiB2YWw7Cit9CisKKyNpZmRlZiBERUJVR19QQVJQT1JUCitleHRlcm4gX19pbmxpbmVfXyB2b2lkIGR1bXBfcGFycG9ydF9zdGF0ZSAoY2hhciAqc3RyLCBzdHJ1Y3QgcGFycG9ydCAqcCkKK3sKKwkvKiBoZXJlJ3MgaG9waW5nIHRoYXQgcmVhZGluZyB0aGVzZSBwb3J0cyB3b24ndCBzaWRlLWVmZmVjdCBhbnl0aGluZyB1bmRlcm5lYXRoICovCisJdW5zaWduZWQgY2hhciBlY3IgPSBpbmIgKEVDT05UUk9MIChwKSk7CisJdW5zaWduZWQgY2hhciBkY3IgPSBpbmIgKENPTlRST0wgKHApKTsKKwl1bnNpZ25lZCBjaGFyIGRzciA9IGluYiAoU1RBVFVTIChwKSk7CisJc3RhdGljIGNoYXIgKmVjcl9tb2Rlc1tdID0geyJTUFAiLCAiUFMyIiwgIlBQRklGTyIsICJFQ1AiLCAieFh4IiwgInlZeSIsICJUU1QiLCAiQ0ZHIn07CisJY29uc3Qgc3RydWN0IHBhcnBvcnRfcGNfcHJpdmF0ZSAqcHJpdiA9IChwYXJwb3J0X3BjX3ByaXZhdGUgKilwLT5waHlzcG9ydC0+cHJpdmF0ZV9kYXRhOworCWludCBpOworCisJcHJpbnRrIChLRVJOX0RFQlVHICIqKiogcGFycG9ydCBzdGF0ZSAoJXMpOiBlY3I9WyVzIiwgc3RyLCBlY3JfbW9kZXNbKGVjciAmIDB4ZTApID4+IDVdKTsKKwlpZiAoZWNyICYgMHgxMCkgcHJpbnRrICgiLG5FcnJJbnRyRW4iKTsKKwlpZiAoZWNyICYgMHgwOCkgcHJpbnRrICgiLGRtYUVuIik7CisJaWYgKGVjciAmIDB4MDQpIHByaW50ayAoIixzZXJ2aWNlSW50ciIpOworCWlmIChlY3IgJiAweDAyKSBwcmludGsgKCIsZl9mdWxsIik7CisJaWYgKGVjciAmIDB4MDEpIHByaW50ayAoIixmX2VtcHR5Iik7CisJZm9yIChpPTA7IGk8MjsgaSsrKSB7CisJCXByaW50ayAoIl0gIGRjciglcyk9WyIsIGkgPyAic29mdCIgOiAiaGFyZCIpOworCQlkY3IgPSBpID8gcHJpdi0+Y3RyIDogaW5iIChDT05UUk9MIChwKSk7CisJCisJCWlmIChkY3IgJiAweDIwKSB7CisJCQlwcmludGsgKCJyZXYiKTsKKwkJfSBlbHNlIHsKKwkJCXByaW50ayAoImZ3ZCIpOworCQl9CisJCWlmIChkY3IgJiAweDEwKSBwcmludGsgKCIsYWNrSW50RW4iKTsKKwkJaWYgKCEoZGNyICYgMHgwOCkpIHByaW50ayAoIixOLVNFTEVDVC1JTiIpOworCQlpZiAoZGNyICYgMHgwNCkgcHJpbnRrICgiLE4tSU5JVCIpOworCQlpZiAoIShkY3IgJiAweDAyKSkgcHJpbnRrICgiLE4tQVVUT0ZEIik7CisJCWlmICghKGRjciAmIDB4MDEpKSBwcmludGsgKCIsTi1TVFJPQkUiKTsKKwl9CisJcHJpbnRrICgiXSAgZHNyPVsiKTsKKwlpZiAoIShkc3IgJiAweDgwKSkgcHJpbnRrICgiQlVTWSIpOworCWlmIChkc3IgJiAweDQwKSBwcmludGsgKCIsTi1BQ0siKTsKKwlpZiAoZHNyICYgMHgyMCkgcHJpbnRrICgiLFBFUlJPUiIpOworCWlmIChkc3IgJiAweDEwKSBwcmludGsgKCIsU0VMRUNUIik7CisJaWYgKGRzciAmIDB4MDgpIHByaW50ayAoIixOLUZBVUxUIik7CisJcHJpbnRrICgiXVxuIik7CisJcmV0dXJuOworfQorI2Vsc2UJLyogIURFQlVHX1BBUlBPUlQgKi8KKyNkZWZpbmUgZHVtcF9wYXJwb3J0X3N0YXRlKGFyZ3MuLi4pCisjZW5kaWYJLyogIURFQlVHX1BBUlBPUlQgKi8KKworLyogX19wYXJwb3J0X3BjX2Zyb2JfY29udHJvbCBkaWZmZXJzIGZyb20gcGFycG9ydF9wY19mcm9iX2NvbnRyb2wgaW4gdGhhdAorICogaXQgZG9lc24ndCBkbyBhbnkgZXh0cmEgbWFza2luZy4gKi8KK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGNoYXIgX19wYXJwb3J0X3BjX2Zyb2JfY29udHJvbCAoc3RydWN0IHBhcnBvcnQgKnAsCisJCQkJCQkJICAgdW5zaWduZWQgY2hhciBtYXNrLAorCQkJCQkJCSAgIHVuc2lnbmVkIGNoYXIgdmFsKQoreworCXN0cnVjdCBwYXJwb3J0X3BjX3ByaXZhdGUgKnByaXYgPSBwLT5waHlzcG9ydC0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGNoYXIgY3RyID0gcHJpdi0+Y3RyOworI2lmZGVmIERFQlVHX1BBUlBPUlQKKwlwcmludGsgKEtFUk5fREVCVUcKKwkJIl9fcGFycG9ydF9wY19mcm9iX2NvbnRyb2woJTAyeCwlMDJ4KTogJTAyeCAtPiAlMDJ4XG4iLAorCQltYXNrLCB2YWwsIGN0ciwgKChjdHIgJiB+bWFzaykgXiB2YWwpICYgcHJpdi0+Y3RyX3dyaXRhYmxlKTsKKyNlbmRpZgorCWN0ciA9IChjdHIgJiB+bWFzaykgXiB2YWw7CisJY3RyICY9IHByaXYtPmN0cl93cml0YWJsZTsgLyogb25seSB3cml0ZSB3cml0YWJsZSBiaXRzLiAqLworCW91dGIgKGN0ciwgQ09OVFJPTCAocCkpOworCXByaXYtPmN0ciA9IGN0cjsJLyogVXBkYXRlIHNvZnQgY29weSAqLworCXJldHVybiBjdHI7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgcGFycG9ydF9wY19kYXRhX3JldmVyc2UgKHN0cnVjdCBwYXJwb3J0ICpwKQoreworCV9fcGFycG9ydF9wY19mcm9iX2NvbnRyb2wgKHAsIDB4MjAsIDB4MjApOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHBhcnBvcnRfcGNfZGF0YV9mb3J3YXJkIChzdHJ1Y3QgcGFycG9ydCAqcCkKK3sKKwlfX3BhcnBvcnRfcGNfZnJvYl9jb250cm9sIChwLCAweDIwLCAweDAwKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBwYXJwb3J0X3BjX3dyaXRlX2NvbnRyb2wgKHN0cnVjdCBwYXJwb3J0ICpwLAorCQkJCQkJIHVuc2lnbmVkIGNoYXIgZCkKK3sKKwljb25zdCB1bnNpZ25lZCBjaGFyIHdtID0gKFBBUlBPUlRfQ09OVFJPTF9TVFJPQkUgfAorCQkJCSAgUEFSUE9SVF9DT05UUk9MX0FVVE9GRCB8CisJCQkJICBQQVJQT1JUX0NPTlRST0xfSU5JVCB8CisJCQkJICBQQVJQT1JUX0NPTlRST0xfU0VMRUNUKTsKKworCS8qIFRha2UgdGhpcyBvdXQgd2hlbiBkcml2ZXJzIGhhdmUgYWRhcHRlZCB0byBuZXdlciBpbnRlcmZhY2UuICovCisJaWYgKGQgJiAweDIwKSB7CisJCXByaW50ayAoS0VSTl9ERUJVRyAiJXMgKCVzKTogdXNlIGRhdGFfcmV2ZXJzZSBmb3IgdGhpcyFcbiIsCisJCQlwLT5uYW1lLCBwLT5jYWQtPm5hbWUpOworCQlwYXJwb3J0X3BjX2RhdGFfcmV2ZXJzZSAocCk7CisJfQorCisJX19wYXJwb3J0X3BjX2Zyb2JfY29udHJvbCAocCwgd20sIGQgJiB3bSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGNoYXIgcGFycG9ydF9wY19yZWFkX2NvbnRyb2woc3RydWN0IHBhcnBvcnQgKnApCit7CisJY29uc3QgdW5zaWduZWQgY2hhciBybSA9IChQQVJQT1JUX0NPTlRST0xfU1RST0JFIHwKKwkJCQkgIFBBUlBPUlRfQ09OVFJPTF9BVVRPRkQgfAorCQkJCSAgUEFSUE9SVF9DT05UUk9MX0lOSVQgfAorCQkJCSAgUEFSUE9SVF9DT05UUk9MX1NFTEVDVCk7CisJY29uc3Qgc3RydWN0IHBhcnBvcnRfcGNfcHJpdmF0ZSAqcHJpdiA9IHAtPnBoeXNwb3J0LT5wcml2YXRlX2RhdGE7CisJcmV0dXJuIHByaXYtPmN0ciAmIHJtOyAvKiBVc2Ugc29mdCBjb3B5ICovCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGNoYXIgcGFycG9ydF9wY19mcm9iX2NvbnRyb2wgKHN0cnVjdCBwYXJwb3J0ICpwLAorCQkJCQkJCSB1bnNpZ25lZCBjaGFyIG1hc2ssCisJCQkJCQkJIHVuc2lnbmVkIGNoYXIgdmFsKQoreworCWNvbnN0IHVuc2lnbmVkIGNoYXIgd20gPSAoUEFSUE9SVF9DT05UUk9MX1NUUk9CRSB8CisJCQkJICBQQVJQT1JUX0NPTlRST0xfQVVUT0ZEIHwKKwkJCQkgIFBBUlBPUlRfQ09OVFJPTF9JTklUIHwKKwkJCQkgIFBBUlBPUlRfQ09OVFJPTF9TRUxFQ1QpOworCisJLyogVGFrZSB0aGlzIG91dCB3aGVuIGRyaXZlcnMgaGF2ZSBhZGFwdGVkIHRvIG5ld2VyIGludGVyZmFjZS4gKi8KKwlpZiAobWFzayAmIDB4MjApIHsKKwkJcHJpbnRrIChLRVJOX0RFQlVHICIlcyAoJXMpOiB1c2UgZGF0YV8lcyBmb3IgdGhpcyFcbiIsCisJCQlwLT5uYW1lLCBwLT5jYWQtPm5hbWUsCisJCQkodmFsICYgMHgyMCkgPyAicmV2ZXJzZSIgOiAiZm9yd2FyZCIpOworCQlpZiAodmFsICYgMHgyMCkKKwkJCXBhcnBvcnRfcGNfZGF0YV9yZXZlcnNlIChwKTsKKwkJZWxzZQorCQkJcGFycG9ydF9wY19kYXRhX2ZvcndhcmQgKHApOworCX0KKworCS8qIFJlc3RyaWN0IG1hc2sgYW5kIHZhbCB0byBjb250cm9sIGxpbmVzLiAqLworCW1hc2sgJj0gd207CisJdmFsICY9IHdtOworCisJcmV0dXJuIF9fcGFycG9ydF9wY19mcm9iX2NvbnRyb2wgKHAsIG1hc2ssIHZhbCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGNoYXIgcGFycG9ydF9wY19yZWFkX3N0YXR1cyhzdHJ1Y3QgcGFycG9ydCAqcCkKK3sKKwlyZXR1cm4gaW5iKFNUQVRVUyhwKSk7Cit9CisKKworc3RhdGljIF9faW5saW5lX18gdm9pZCBwYXJwb3J0X3BjX2Rpc2FibGVfaXJxKHN0cnVjdCBwYXJwb3J0ICpwKQoreworCV9fcGFycG9ydF9wY19mcm9iX2NvbnRyb2wgKHAsIDB4MTAsIDB4MDApOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHBhcnBvcnRfcGNfZW5hYmxlX2lycShzdHJ1Y3QgcGFycG9ydCAqcCkKK3sKKwlfX3BhcnBvcnRfcGNfZnJvYl9jb250cm9sIChwLCAweDEwLCAweDEwKTsKK30KKworZXh0ZXJuIHZvaWQgcGFycG9ydF9wY19yZWxlYXNlX3Jlc291cmNlcyhzdHJ1Y3QgcGFycG9ydCAqcCk7CisKK2V4dGVybiBpbnQgcGFycG9ydF9wY19jbGFpbV9yZXNvdXJjZXMoc3RydWN0IHBhcnBvcnQgKnApOworCisvKiBQQ01DSUEgY29kZSB3aWxsIHdhbnQgdG8gZ2V0IHVzIHRvIGxvb2sgYXQgYSBwb3J0LiAgUHJvdmlkZSBhIG1lY2hhbmlzbS4gKi8KK2V4dGVybiBzdHJ1Y3QgcGFycG9ydCAqcGFycG9ydF9wY19wcm9iZV9wb3J0ICh1bnNpZ25lZCBsb25nIGJhc2UsCisJCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYmFzZV9oaSwKKwkJCQkJICAgICAgaW50IGlycSwgaW50IGRtYSwKKwkJCQkJICAgICAgc3RydWN0IHBjaV9kZXYgKmRldik7CitleHRlcm4gdm9pZCBwYXJwb3J0X3BjX3VucmVnaXN0ZXJfcG9ydCAoc3RydWN0IHBhcnBvcnQgKnApOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFyc2VyLmggYi9pbmNsdWRlL2xpbnV4L3BhcnNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhMzMzMjgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3BhcnNlci5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2xpbnV4L3BhcnNlci5oCisgKgorICogSGVhZGVyIGZvciBsaWIvcGFyc2VyLmMKKyAqIEludGVuZGVkIHVzZSBvZiB0aGVzZSBmdW5jdGlvbnMgaXMgcGFyc2luZyBmaWxlc3lzdGVtIGFyZ3VtZW50IGxpc3RzLAorICogYnV0IGNvdWxkIHBvdGVudGlhbGx5IGJlIHVzZWQgYW55d2hlcmUgZWxzZSB0aGF0IHNpbXBsZSBvcHRpb249YXJnCisgKiBwYXJzaW5nIGlzIHJlcXVpcmVkLgorICovCisKKworLyogYXNzb2NpYXRlcyBhbiBpbnRlZ2VyIGVudW1lcmF0b3Igd2l0aCBhIHBhdHRlcm4gc3RyaW5nLiAqLworc3RydWN0IG1hdGNoX3Rva2VuIHsKKwlpbnQgdG9rZW47CisJY2hhciAqcGF0dGVybjsKK307CisKK3R5cGVkZWYgc3RydWN0IG1hdGNoX3Rva2VuIG1hdGNoX3RhYmxlX3RbXTsKKworLyogTWF4aW11bSBudW1iZXIgb2YgYXJndW1lbnRzIHRoYXQgbWF0Y2hfdG9rZW4gd2lsbCBmaW5kIGluIGEgcGF0dGVybiAqLworZW51bSB7TUFYX09QVF9BUkdTID0gM307CisKKy8qIERlc2NyaWJlIHRoZSBsb2NhdGlvbiB3aXRoaW4gYSBzdHJpbmcgb2YgYSBzdWJzdHJpbmcgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwljaGFyICpmcm9tOworCWNoYXIgKnRvOworfSBzdWJzdHJpbmdfdDsKKworaW50IG1hdGNoX3Rva2VuKGNoYXIgKiwgbWF0Y2hfdGFibGVfdCB0YWJsZSwgc3Vic3RyaW5nX3QgYXJnc1tdKTsKK2ludCBtYXRjaF9pbnQoc3Vic3RyaW5nX3QgKiwgaW50ICpyZXN1bHQpOworaW50IG1hdGNoX29jdGFsKHN1YnN0cmluZ190ICosIGludCAqcmVzdWx0KTsKK2ludCBtYXRjaF9oZXgoc3Vic3RyaW5nX3QgKiwgaW50ICpyZXN1bHQpOwordm9pZCBtYXRjaF9zdHJjcHkoY2hhciAqLCBzdWJzdHJpbmdfdCAqKTsKK2NoYXIgKm1hdGNoX3N0cmR1cChzdWJzdHJpbmdfdCAqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpLWFjcGkuaCBiL2luY2x1ZGUvbGludXgvcGNpLWFjcGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTcxMjZhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9wY2ktYWNwaS5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBGaWxlCQlwY2ktYWNwaS5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IEludGVsCisgKiBDb3B5cmlnaHQgKEMpIFRvbSBMb25nIE5ndXllbiAodG9tLmwubmd1eWVuQGludGVsLmNvbSkKKyAqLworCisjaWZuZGVmIF9QQ0lfQUNQSV9IXworI2RlZmluZSBfUENJX0FDUElfSF8KKworI2RlZmluZSBPU0NfUVVFUllfVFlQRQkJCTAKKyNkZWZpbmUgT1NDX1NVUFBPUlRfVFlQRSAJCTEKKyNkZWZpbmUgT1NDX0NPTlRST0xfVFlQRQkJMgorI2RlZmluZSBPU0NfU1VQUE9SVF9NQVNLUwkJMHgxZgorCisvKgorICogX09TQyBEVzAgRGVmaW5pdGlvbiAKKyAqLworI2RlZmluZSBPU0NfUVVFUllfRU5BQkxFCQkxCisjZGVmaW5lIE9TQ19SRVFVRVNUX0VSUk9SCQkyCisjZGVmaW5lIE9TQ19JTlZBTElEX1VVSURfRVJST1IJCTQKKyNkZWZpbmUgT1NDX0lOVkFMSURfUkVWSVNJT05fRVJST1IJOAorI2RlZmluZSBPU0NfQ0FQQUJJTElUSUVTX01BU0tfRVJST1IJMTYKKworLyoKKyAqIF9PU0MgRFcxIERlZmluaXRpb24gKE9TIFN1cHBvcnQgRmllbGRzKQorICovCisjZGVmaW5lIE9TQ19FWFRfUENJX0NPTkZJR19TVVBQT1JUCQkxCisjZGVmaW5lIE9TQ19BQ1RJVkVfU1RBVEVfUFdSX1NVUFBPUlQgCQkyCisjZGVmaW5lIE9TQ19DTE9DS19QV1JfQ0FQQUJJTElUWV9TVVBQT1JUCTQKKyNkZWZpbmUgT1NDX1BDSV9TRUdNRU5UX0dST1VQU19TVVBQT1JUCQk4CisjZGVmaW5lIE9TQ19NU0lfU1VQUE9SVAkJCQkxNgorCisvKgorICogX09TQyBEVzEgRGVmaW5pdGlvbiAoT1MgQ29udHJvbCBGaWVsZHMpCisgKi8KKyNkZWZpbmUgT1NDX1BDSV9FWFBSRVNTX05BVElWRV9IUF9DT05UUk9MCTEKKyNkZWZpbmUgT1NDX1NIUENfTkFUSVZFX0hQX0NPTlRST0wgCQkyCisjZGVmaW5lIE9TQ19QQ0lfRVhQUkVTU19QTUVfQ09OVFJPTAkJNAorI2RlZmluZSBPU0NfUENJX0VYUFJFU1NfQUVSX0NPTlRST0wJCTgKKyNkZWZpbmUgT1NDX1BDSV9FWFBSRVNTX0NBUF9TVFJVQ1RVUkVfQ09OVFJPTAkxNgorCisjZGVmaW5lIE9TQ19DT05UUk9MX01BU0tTIAkoT1NDX1BDSV9FWFBSRVNTX05BVElWRV9IUF9DT05UUk9MIHwgCVwKKwkJCQlPU0NfU0hQQ19OQVRJVkVfSFBfQ09OVFJPTCB8IAkJXAorCQkJCU9TQ19QQ0lfRVhQUkVTU19QTUVfQ09OVFJPTCB8CQlcCisJCQkJT1NDX1BDSV9FWFBSRVNTX0FFUl9DT05UUk9MIHwJCVwKKwkJCQlPU0NfUENJX0VYUFJFU1NfQ0FQX1NUUlVDVFVSRV9DT05UUk9MKQorCisjaWZkZWYgQ09ORklHX0FDUEkKK2V4dGVybiBhY3BpX3N0YXR1cyBwY2lfb3NjX2NvbnRyb2xfc2V0KHUzMiBmbGFncyk7CitleHRlcm4gYWNwaV9zdGF0dXMgcGNpX29zY19zdXBwb3J0X3NldCh1MzIgZmxhZ3MpOworI2Vsc2UKKyNpZiAhZGVmaW5lZChhY3BpX3N0YXR1cykKK3R5cGVkZWYgdTMyIAkJYWNwaV9zdGF0dXM7CisjZGVmaW5lIEFFX0VSUk9SICAgICAgCShhY3BpX3N0YXR1cykgKDB4MDAwMSkKKyNlbmRpZiAgICAKK3N0YXRpYyBpbmxpbmUgYWNwaV9zdGF0dXMgcGNpX29zY19jb250cm9sX3NldCh1MzIgZmxhZ3MpIHtyZXR1cm4gQUVfRVJST1I7fQorc3RhdGljIGlubGluZSBhY3BpX3N0YXR1cyBwY2lfb3NjX3N1cHBvcnRfc2V0KHUzMiBmbGFncykge3JldHVybiBBRV9FUlJPUjt9IAorI2VuZGlmCisKKyNlbmRpZgkvKiBfUENJX0FDUElfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpLWR5bmlkcy5oIGIvaW5jbHVkZS9saW51eC9wY2ktZHluaWRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTgzYjZiMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvcGNpLWR5bmlkcy5oCkBAIC0wLDAgKzEsMTggQEAKKy8qCisgKglQQ0kgZGVmaW5lcyBhbmQgZnVuY3Rpb24gcHJvdG90eXBlcworICoJQ29weXJpZ2h0IDIwMDMgRGVsbCBJbmMuCisgKiAgICAgICAgYnkgTWF0dCBEb21zY2ggPE1hdHRfRG9tc2NoQGRlbGwuY29tPgorICovCisKKyNpZm5kZWYgTElOVVhfUENJX0RZTklEU19ICisjZGVmaW5lIExJTlVYX1BDSV9EWU5JRFNfSAorCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZF9kZXZpY2V0YWJsZS5oPgorCitzdHJ1Y3QgZHluaWQgeworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgIG5vZGU7CisJc3RydWN0IHBjaV9kZXZpY2VfaWQgICAgaWQ7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpLmggYi9pbmNsdWRlL2xpbnV4L3BjaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlYTEzYTkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3BjaS5oCkBAIC0wLDAgKzEsMTA2NyBAQAorLyoKKyAqCXBjaS5oCisgKgorICoJUENJIGRlZmluZXMgYW5kIGZ1bmN0aW9uIHByb3RvdHlwZXMKKyAqCUNvcHlyaWdodCAxOTk0LCBEcmV3IEVja2hhcmR0CisgKglDb3B5cmlnaHQgMTk5Ny0tMTk5OSBNYXJ0aW4gTWFyZXMgPG1qQHVjdy5jej4KKyAqCisgKglGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIGNvbnN1bHQgdGhlIGZvbGxvd2luZyBtYW51YWxzIChsb29rIGF0CisgKglodHRwOi8vd3d3LnBjaXNpZy5jb20vIGZvciBob3cgdG8gZ2V0IHRoZW0pOgorICoKKyAqCVBDSSBCSU9TIFNwZWNpZmljYXRpb24KKyAqCVBDSSBMb2NhbCBCdXMgU3BlY2lmaWNhdGlvbgorICoJUENJIHRvIFBDSSBCcmlkZ2UgU3BlY2lmaWNhdGlvbgorICoJUENJIFN5c3RlbSBEZXNpZ24gR3VpZGUKKyAqLworCisjaWZuZGVmIExJTlVYX1BDSV9ICisjZGVmaW5lIExJTlVYX1BDSV9ICisKKyNpbmNsdWRlIDxsaW51eC9tb2RfZGV2aWNldGFibGUuaD4KKworLyoKKyAqIFVuZGVyIFBDSSwgZWFjaCBkZXZpY2UgaGFzIDI1NiBieXRlcyBvZiBjb25maWd1cmF0aW9uIGFkZHJlc3Mgc3BhY2UsCisgKiBvZiB3aGljaCB0aGUgZmlyc3QgNjQgYnl0ZXMgYXJlIHN0YW5kYXJkaXplZCBhcyBmb2xsb3dzOgorICovCisjZGVmaW5lIFBDSV9WRU5ET1JfSUQJCTB4MDAJLyogMTYgYml0cyAqLworI2RlZmluZSBQQ0lfREVWSUNFX0lECQkweDAyCS8qIDE2IGJpdHMgKi8KKyNkZWZpbmUgUENJX0NPTU1BTkQJCTB4MDQJLyogMTYgYml0cyAqLworI2RlZmluZSAgUENJX0NPTU1BTkRfSU8JCTB4MQkvKiBFbmFibGUgcmVzcG9uc2UgaW4gSS9PIHNwYWNlICovCisjZGVmaW5lICBQQ0lfQ09NTUFORF9NRU1PUlkJMHgyCS8qIEVuYWJsZSByZXNwb25zZSBpbiBNZW1vcnkgc3BhY2UgKi8KKyNkZWZpbmUgIFBDSV9DT01NQU5EX01BU1RFUgkweDQJLyogRW5hYmxlIGJ1cyBtYXN0ZXJpbmcgKi8KKyNkZWZpbmUgIFBDSV9DT01NQU5EX1NQRUNJQUwJMHg4CS8qIEVuYWJsZSByZXNwb25zZSB0byBzcGVjaWFsIGN5Y2xlcyAqLworI2RlZmluZSAgUENJX0NPTU1BTkRfSU5WQUxJREFURQkweDEwCS8qIFVzZSBtZW1vcnkgd3JpdGUgYW5kIGludmFsaWRhdGUgKi8KKyNkZWZpbmUgIFBDSV9DT01NQU5EX1ZHQV9QQUxFVFRFIDB4MjAJLyogRW5hYmxlIHBhbGV0dGUgc25vb3BpbmcgKi8KKyNkZWZpbmUgIFBDSV9DT01NQU5EX1BBUklUWQkweDQwCS8qIEVuYWJsZSBwYXJpdHkgY2hlY2tpbmcgKi8KKyNkZWZpbmUgIFBDSV9DT01NQU5EX1dBSVQgCTB4ODAJLyogRW5hYmxlIGFkZHJlc3MvZGF0YSBzdGVwcGluZyAqLworI2RlZmluZSAgUENJX0NPTU1BTkRfU0VSUgkweDEwMAkvKiBFbmFibGUgU0VSUiAqLworI2RlZmluZSAgUENJX0NPTU1BTkRfRkFTVF9CQUNLCTB4MjAwCS8qIEVuYWJsZSBiYWNrLXRvLWJhY2sgd3JpdGVzICovCisjZGVmaW5lICBQQ0lfQ09NTUFORF9JTlRYX0RJU0FCTEUgMHg0MDAgLyogSU5UeCBFbXVsYXRpb24gRGlzYWJsZSAqLworCisjZGVmaW5lIFBDSV9TVEFUVVMJCTB4MDYJLyogMTYgYml0cyAqLworI2RlZmluZSAgUENJX1NUQVRVU19DQVBfTElTVAkweDEwCS8qIFN1cHBvcnQgQ2FwYWJpbGl0eSBMaXN0ICovCisjZGVmaW5lICBQQ0lfU1RBVFVTXzY2TUhaCTB4MjAJLyogU3VwcG9ydCA2NiBNaHogUENJIDIuMSBidXMgKi8KKyNkZWZpbmUgIFBDSV9TVEFUVVNfVURGCQkweDQwCS8qIFN1cHBvcnQgVXNlciBEZWZpbmFibGUgRmVhdHVyZXMgW29ic29sZXRlXSAqLworI2RlZmluZSAgUENJX1NUQVRVU19GQVNUX0JBQ0sJMHg4MAkvKiBBY2NlcHQgZmFzdC1iYWNrIHRvIGJhY2sgKi8KKyNkZWZpbmUgIFBDSV9TVEFUVVNfUEFSSVRZCTB4MTAwCS8qIERldGVjdGVkIHBhcml0eSBlcnJvciAqLworI2RlZmluZSAgUENJX1NUQVRVU19ERVZTRUxfTUFTSwkweDYwMAkvKiBERVZTRUwgdGltaW5nICovCisjZGVmaW5lICBQQ0lfU1RBVFVTX0RFVlNFTF9GQVNUCTB4MDAwCQorI2RlZmluZSAgUENJX1NUQVRVU19ERVZTRUxfTUVESVVNIDB4MjAwCisjZGVmaW5lICBQQ0lfU1RBVFVTX0RFVlNFTF9TTE9XIDB4NDAwCisjZGVmaW5lICBQQ0lfU1RBVFVTX1NJR19UQVJHRVRfQUJPUlQgMHg4MDAgLyogU2V0IG9uIHRhcmdldCBhYm9ydCAqLworI2RlZmluZSAgUENJX1NUQVRVU19SRUNfVEFSR0VUX0FCT1JUIDB4MTAwMCAvKiBNYXN0ZXIgYWNrIG9mICIgKi8KKyNkZWZpbmUgIFBDSV9TVEFUVVNfUkVDX01BU1RFUl9BQk9SVCAweDIwMDAgLyogU2V0IG9uIG1hc3RlciBhYm9ydCAqLworI2RlZmluZSAgUENJX1NUQVRVU19TSUdfU1lTVEVNX0VSUk9SIDB4NDAwMCAvKiBTZXQgd2hlbiB3ZSBkcml2ZSBTRVJSICovCisjZGVmaW5lICBQQ0lfU1RBVFVTX0RFVEVDVEVEX1BBUklUWSAweDgwMDAgLyogU2V0IG9uIHBhcml0eSBlcnJvciAqLworCisjZGVmaW5lIFBDSV9DTEFTU19SRVZJU0lPTgkweDA4CS8qIEhpZ2ggMjQgYml0cyBhcmUgY2xhc3MsIGxvdyA4CisJCQkJCSAgIHJldmlzaW9uICovCisjZGVmaW5lIFBDSV9SRVZJU0lPTl9JRCAgICAgICAgIDB4MDggICAgLyogUmV2aXNpb24gSUQgKi8KKyNkZWZpbmUgUENJX0NMQVNTX1BST0cgICAgICAgICAgMHgwOSAgICAvKiBSZWcuIExldmVsIFByb2dyYW1taW5nIEludGVyZmFjZSAqLworI2RlZmluZSBQQ0lfQ0xBU1NfREVWSUNFICAgICAgICAweDBhICAgIC8qIERldmljZSBjbGFzcyAqLworCisjZGVmaW5lIFBDSV9DQUNIRV9MSU5FX1NJWkUJMHgwYwkvKiA4IGJpdHMgKi8KKyNkZWZpbmUgUENJX0xBVEVOQ1lfVElNRVIJMHgwZAkvKiA4IGJpdHMgKi8KKyNkZWZpbmUgUENJX0hFQURFUl9UWVBFCQkweDBlCS8qIDggYml0cyAqLworI2RlZmluZSAgUENJX0hFQURFUl9UWVBFX05PUk1BTAkwCisjZGVmaW5lICBQQ0lfSEVBREVSX1RZUEVfQlJJREdFIDEKKyNkZWZpbmUgIFBDSV9IRUFERVJfVFlQRV9DQVJEQlVTIDIKKworI2RlZmluZSBQQ0lfQklTVAkJMHgwZgkvKiA4IGJpdHMgKi8KKyNkZWZpbmUgIFBDSV9CSVNUX0NPREVfTUFTSwkweDBmCS8qIFJldHVybiByZXN1bHQgKi8KKyNkZWZpbmUgIFBDSV9CSVNUX1NUQVJUCQkweDQwCS8qIDEgdG8gc3RhcnQgQklTVCwgMiBzZWNzIG9yIGxlc3MgKi8KKyNkZWZpbmUgIFBDSV9CSVNUX0NBUEFCTEUJMHg4MAkvKiAxIGlmIEJJU1QgY2FwYWJsZSAqLworCisvKgorICogQmFzZSBhZGRyZXNzZXMgc3BlY2lmeSBsb2NhdGlvbnMgaW4gbWVtb3J5IG9yIEkvTyBzcGFjZS4KKyAqIERlY29kZWQgc2l6ZSBjYW4gYmUgZGV0ZXJtaW5lZCBieSB3cml0aW5nIGEgdmFsdWUgb2YgCisgKiAweGZmZmZmZmZmIHRvIHRoZSByZWdpc3RlciwgYW5kIHJlYWRpbmcgaXQgYmFjay4gIE9ubHkgCisgKiAxIGJpdHMgYXJlIGRlY29kZWQuCisgKi8KKyNkZWZpbmUgUENJX0JBU0VfQUREUkVTU18wCTB4MTAJLyogMzIgYml0cyAqLworI2RlZmluZSBQQ0lfQkFTRV9BRERSRVNTXzEJMHgxNAkvKiAzMiBiaXRzIFtodHlwZSAwLDEgb25seV0gKi8KKyNkZWZpbmUgUENJX0JBU0VfQUREUkVTU18yCTB4MTgJLyogMzIgYml0cyBbaHR5cGUgMCBvbmx5XSAqLworI2RlZmluZSBQQ0lfQkFTRV9BRERSRVNTXzMJMHgxYwkvKiAzMiBiaXRzICovCisjZGVmaW5lIFBDSV9CQVNFX0FERFJFU1NfNAkweDIwCS8qIDMyIGJpdHMgKi8KKyNkZWZpbmUgUENJX0JBU0VfQUREUkVTU181CTB4MjQJLyogMzIgYml0cyAqLworI2RlZmluZSAgUENJX0JBU0VfQUREUkVTU19TUEFDRQkweDAxCS8qIDAgPSBtZW1vcnksIDEgPSBJL08gKi8KKyNkZWZpbmUgIFBDSV9CQVNFX0FERFJFU1NfU1BBQ0VfSU8gMHgwMQorI2RlZmluZSAgUENJX0JBU0VfQUREUkVTU19TUEFDRV9NRU1PUlkgMHgwMAorI2RlZmluZSAgUENJX0JBU0VfQUREUkVTU19NRU1fVFlQRV9NQVNLIDB4MDYKKyNkZWZpbmUgIFBDSV9CQVNFX0FERFJFU1NfTUVNX1RZUEVfMzIJMHgwMAkvKiAzMiBiaXQgYWRkcmVzcyAqLworI2RlZmluZSAgUENJX0JBU0VfQUREUkVTU19NRU1fVFlQRV8xTQkweDAyCS8qIEJlbG93IDFNIFtvYnNvbGV0ZV0gKi8KKyNkZWZpbmUgIFBDSV9CQVNFX0FERFJFU1NfTUVNX1RZUEVfNjQJMHgwNAkvKiA2NCBiaXQgYWRkcmVzcyAqLworI2RlZmluZSAgUENJX0JBU0VfQUREUkVTU19NRU1fUFJFRkVUQ0gJMHgwOAkvKiBwcmVmZXRjaGFibGU/ICovCisjZGVmaW5lICBQQ0lfQkFTRV9BRERSRVNTX01FTV9NQVNLCSh+MHgwZlVMKQorI2RlZmluZSAgUENJX0JBU0VfQUREUkVTU19JT19NQVNLCSh+MHgwM1VMKQorLyogYml0IDEgaXMgcmVzZXJ2ZWQgaWYgYWRkcmVzc19zcGFjZSA9IDEgKi8KKworLyogSGVhZGVyIHR5cGUgMCAobm9ybWFsIGRldmljZXMpICovCisjZGVmaW5lIFBDSV9DQVJEQlVTX0NJUwkJMHgyOAorI2RlZmluZSBQQ0lfU1VCU1lTVEVNX1ZFTkRPUl9JRAkweDJjCisjZGVmaW5lIFBDSV9TVUJTWVNURU1fSUQJMHgyZSAgCisjZGVmaW5lIFBDSV9ST01fQUREUkVTUwkJMHgzMAkvKiBCaXRzIDMxLi4xMSBhcmUgYWRkcmVzcywgMTAuLjEgcmVzZXJ2ZWQgKi8KKyNkZWZpbmUgIFBDSV9ST01fQUREUkVTU19FTkFCTEUJMHgwMQorI2RlZmluZSBQQ0lfUk9NX0FERFJFU1NfTUFTSwkofjB4N2ZmVUwpCisKKyNkZWZpbmUgUENJX0NBUEFCSUxJVFlfTElTVAkweDM0CS8qIE9mZnNldCBvZiBmaXJzdCBjYXBhYmlsaXR5IGxpc3QgZW50cnkgKi8KKworLyogMHgzNS0weDNiIGFyZSByZXNlcnZlZCAqLworI2RlZmluZSBQQ0lfSU5URVJSVVBUX0xJTkUJMHgzYwkvKiA4IGJpdHMgKi8KKyNkZWZpbmUgUENJX0lOVEVSUlVQVF9QSU4JMHgzZAkvKiA4IGJpdHMgKi8KKyNkZWZpbmUgUENJX01JTl9HTlQJCTB4M2UJLyogOCBiaXRzICovCisjZGVmaW5lIFBDSV9NQVhfTEFUCQkweDNmCS8qIDggYml0cyAqLworCisvKiBIZWFkZXIgdHlwZSAxIChQQ0ktdG8tUENJIGJyaWRnZXMpICovCisjZGVmaW5lIFBDSV9QUklNQVJZX0JVUwkJMHgxOAkvKiBQcmltYXJ5IGJ1cyBudW1iZXIgKi8KKyNkZWZpbmUgUENJX1NFQ09OREFSWV9CVVMJMHgxOQkvKiBTZWNvbmRhcnkgYnVzIG51bWJlciAqLworI2RlZmluZSBQQ0lfU1VCT1JESU5BVEVfQlVTCTB4MWEJLyogSGlnaGVzdCBidXMgbnVtYmVyIGJlaGluZCB0aGUgYnJpZGdlICovCisjZGVmaW5lIFBDSV9TRUNfTEFURU5DWV9USU1FUgkweDFiCS8qIExhdGVuY3kgdGltZXIgZm9yIHNlY29uZGFyeSBpbnRlcmZhY2UgKi8KKyNkZWZpbmUgUENJX0lPX0JBU0UJCTB4MWMJLyogSS9PIHJhbmdlIGJlaGluZCB0aGUgYnJpZGdlICovCisjZGVmaW5lIFBDSV9JT19MSU1JVAkJMHgxZAorI2RlZmluZSAgUENJX0lPX1JBTkdFX1RZUEVfTUFTSwkweDBmVUwJLyogSS9PIGJyaWRnaW5nIHR5cGUgKi8KKyNkZWZpbmUgIFBDSV9JT19SQU5HRV9UWVBFXzE2CTB4MDAKKyNkZWZpbmUgIFBDSV9JT19SQU5HRV9UWVBFXzMyCTB4MDEKKyNkZWZpbmUgIFBDSV9JT19SQU5HRV9NQVNLCSh+MHgwZlVMKQorI2RlZmluZSBQQ0lfU0VDX1NUQVRVUwkJMHgxZQkvKiBTZWNvbmRhcnkgc3RhdHVzIHJlZ2lzdGVyLCBvbmx5IGJpdCAxNCB1c2VkICovCisjZGVmaW5lIFBDSV9NRU1PUllfQkFTRQkJMHgyMAkvKiBNZW1vcnkgcmFuZ2UgYmVoaW5kICovCisjZGVmaW5lIFBDSV9NRU1PUllfTElNSVQJMHgyMgorI2RlZmluZSAgUENJX01FTU9SWV9SQU5HRV9UWVBFX01BU0sgMHgwZlVMCisjZGVmaW5lICBQQ0lfTUVNT1JZX1JBTkdFX01BU0sJKH4weDBmVUwpCisjZGVmaW5lIFBDSV9QUkVGX01FTU9SWV9CQVNFCTB4MjQJLyogUHJlZmV0Y2hhYmxlIG1lbW9yeSByYW5nZSBiZWhpbmQgKi8KKyNkZWZpbmUgUENJX1BSRUZfTUVNT1JZX0xJTUlUCTB4MjYKKyNkZWZpbmUgIFBDSV9QUkVGX1JBTkdFX1RZUEVfTUFTSyAweDBmVUwKKyNkZWZpbmUgIFBDSV9QUkVGX1JBTkdFX1RZUEVfMzIJMHgwMAorI2RlZmluZSAgUENJX1BSRUZfUkFOR0VfVFlQRV82NAkweDAxCisjZGVmaW5lICBQQ0lfUFJFRl9SQU5HRV9NQVNLCSh+MHgwZlVMKQorI2RlZmluZSBQQ0lfUFJFRl9CQVNFX1VQUEVSMzIJMHgyOAkvKiBVcHBlciBoYWxmIG9mIHByZWZldGNoYWJsZSBtZW1vcnkgcmFuZ2UgKi8KKyNkZWZpbmUgUENJX1BSRUZfTElNSVRfVVBQRVIzMgkweDJjCisjZGVmaW5lIFBDSV9JT19CQVNFX1VQUEVSMTYJMHgzMAkvKiBVcHBlciBoYWxmIG9mIEkvTyBhZGRyZXNzZXMgKi8KKyNkZWZpbmUgUENJX0lPX0xJTUlUX1VQUEVSMTYJMHgzMgorLyogMHgzNCBzYW1lIGFzIGZvciBodHlwZSAwICovCisvKiAweDM1LTB4M2IgaXMgcmVzZXJ2ZWQgKi8KKyNkZWZpbmUgUENJX1JPTV9BRERSRVNTMQkweDM4CS8qIFNhbWUgYXMgUENJX1JPTV9BRERSRVNTLCBidXQgZm9yIGh0eXBlIDEgKi8KKy8qIDB4M2MtMHgzZCBhcmUgc2FtZSBhcyBmb3IgaHR5cGUgMCAqLworI2RlZmluZSBQQ0lfQlJJREdFX0NPTlRST0wJMHgzZQorI2RlZmluZSAgUENJX0JSSURHRV9DVExfUEFSSVRZCTB4MDEJLyogRW5hYmxlIHBhcml0eSBkZXRlY3Rpb24gb24gc2Vjb25kYXJ5IGludGVyZmFjZSAqLworI2RlZmluZSAgUENJX0JSSURHRV9DVExfU0VSUgkweDAyCS8qIFRoZSBzYW1lIGZvciBTRVJSIGZvcndhcmRpbmcgKi8KKyNkZWZpbmUgIFBDSV9CUklER0VfQ1RMX05PX0lTQQkweDA0CS8qIERpc2FibGUgYnJpZGdpbmcgb2YgSVNBIHBvcnRzICovCisjZGVmaW5lICBQQ0lfQlJJREdFX0NUTF9WR0EJMHgwOAkvKiBGb3J3YXJkIFZHQSBhZGRyZXNzZXMgKi8KKyNkZWZpbmUgIFBDSV9CUklER0VfQ1RMX01BU1RFUl9BQk9SVCAweDIwICAvKiBSZXBvcnQgbWFzdGVyIGFib3J0cyAqLworI2RlZmluZSAgUENJX0JSSURHRV9DVExfQlVTX1JFU0VUIDB4NDAJLyogU2Vjb25kYXJ5IGJ1cyByZXNldCAqLworI2RlZmluZSAgUENJX0JSSURHRV9DVExfRkFTVF9CQUNLIDB4ODAJLyogRmFzdCBCYWNrMkJhY2sgZW5hYmxlZCBvbiBzZWNvbmRhcnkgaW50ZXJmYWNlICovCisKKy8qIEhlYWRlciB0eXBlIDIgKENhcmRCdXMgYnJpZGdlcykgKi8KKyNkZWZpbmUgUENJX0NCX0NBUEFCSUxJVFlfTElTVAkweDE0CisvKiAweDE1IHJlc2VydmVkICovCisjZGVmaW5lIFBDSV9DQl9TRUNfU1RBVFVTCTB4MTYJLyogU2Vjb25kYXJ5IHN0YXR1cyAqLworI2RlZmluZSBQQ0lfQ0JfUFJJTUFSWV9CVVMJMHgxOAkvKiBQQ0kgYnVzIG51bWJlciAqLworI2RlZmluZSBQQ0lfQ0JfQ0FSRF9CVVMJCTB4MTkJLyogQ2FyZEJ1cyBidXMgbnVtYmVyICovCisjZGVmaW5lIFBDSV9DQl9TVUJPUkRJTkFURV9CVVMJMHgxYQkvKiBTdWJvcmRpbmF0ZSBidXMgbnVtYmVyICovCisjZGVmaW5lIFBDSV9DQl9MQVRFTkNZX1RJTUVSCTB4MWIJLyogQ2FyZEJ1cyBsYXRlbmN5IHRpbWVyICovCisjZGVmaW5lIFBDSV9DQl9NRU1PUllfQkFTRV8wCTB4MWMKKyNkZWZpbmUgUENJX0NCX01FTU9SWV9MSU1JVF8wCTB4MjAKKyNkZWZpbmUgUENJX0NCX01FTU9SWV9CQVNFXzEJMHgyNAorI2RlZmluZSBQQ0lfQ0JfTUVNT1JZX0xJTUlUXzEJMHgyOAorI2RlZmluZSBQQ0lfQ0JfSU9fQkFTRV8wCTB4MmMKKyNkZWZpbmUgUENJX0NCX0lPX0JBU0VfMF9ISQkweDJlCisjZGVmaW5lIFBDSV9DQl9JT19MSU1JVF8wCTB4MzAKKyNkZWZpbmUgUENJX0NCX0lPX0xJTUlUXzBfSEkJMHgzMgorI2RlZmluZSBQQ0lfQ0JfSU9fQkFTRV8xCTB4MzQKKyNkZWZpbmUgUENJX0NCX0lPX0JBU0VfMV9ISQkweDM2CisjZGVmaW5lIFBDSV9DQl9JT19MSU1JVF8xCTB4MzgKKyNkZWZpbmUgUENJX0NCX0lPX0xJTUlUXzFfSEkJMHgzYQorI2RlZmluZSAgUENJX0NCX0lPX1JBTkdFX01BU0sJKH4weDAzVUwpCisvKiAweDNjLTB4M2QgYXJlIHNhbWUgYXMgZm9yIGh0eXBlIDAgKi8KKyNkZWZpbmUgUENJX0NCX0JSSURHRV9DT05UUk9MCTB4M2UKKyNkZWZpbmUgIFBDSV9DQl9CUklER0VfQ1RMX1BBUklUWQkweDAxCS8qIFNpbWlsYXIgdG8gc3RhbmRhcmQgYnJpZGdlIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgIFBDSV9DQl9CUklER0VfQ1RMX1NFUlIJCTB4MDIKKyNkZWZpbmUgIFBDSV9DQl9CUklER0VfQ1RMX0lTQQkJMHgwNAorI2RlZmluZSAgUENJX0NCX0JSSURHRV9DVExfVkdBCQkweDA4CisjZGVmaW5lICBQQ0lfQ0JfQlJJREdFX0NUTF9NQVNURVJfQUJPUlQJMHgyMAorI2RlZmluZSAgUENJX0NCX0JSSURHRV9DVExfQ0JfUkVTRVQJMHg0MAkvKiBDYXJkQnVzIHJlc2V0ICovCisjZGVmaW5lICBQQ0lfQ0JfQlJJREdFX0NUTF8xNkJJVF9JTlQJMHg4MAkvKiBFbmFibGUgaW50ZXJydXB0IGZvciAxNi1iaXQgY2FyZHMgKi8KKyNkZWZpbmUgIFBDSV9DQl9CUklER0VfQ1RMX1BSRUZFVENIX01FTTAgMHgxMDAJLyogUHJlZmV0Y2ggZW5hYmxlIGZvciBib3RoIG1lbW9yeSByZWdpb25zICovCisjZGVmaW5lICBQQ0lfQ0JfQlJJREdFX0NUTF9QUkVGRVRDSF9NRU0xIDB4MjAwCisjZGVmaW5lICBQQ0lfQ0JfQlJJREdFX0NUTF9QT1NUX1dSSVRFUwkweDQwMAorI2RlZmluZSBQQ0lfQ0JfU1VCU1lTVEVNX1ZFTkRPUl9JRCAweDQwCisjZGVmaW5lIFBDSV9DQl9TVUJTWVNURU1fSUQJMHg0MgorI2RlZmluZSBQQ0lfQ0JfTEVHQUNZX01PREVfQkFTRQkweDQ0CS8qIDE2LWJpdCBQQyBDYXJkIGxlZ2FjeSBtb2RlIGJhc2UgYWRkcmVzcyAoRXhDYSkgKi8KKy8qIDB4NDgtMHg3ZiByZXNlcnZlZCAqLworCisvKiBDYXBhYmlsaXR5IGxpc3RzICovCisKKyNkZWZpbmUgUENJX0NBUF9MSVNUX0lECQkwCS8qIENhcGFiaWxpdHkgSUQgKi8KKyNkZWZpbmUgIFBDSV9DQVBfSURfUE0JCTB4MDEJLyogUG93ZXIgTWFuYWdlbWVudCAqLworI2RlZmluZSAgUENJX0NBUF9JRF9BR1AJCTB4MDIJLyogQWNjZWxlcmF0ZWQgR3JhcGhpY3MgUG9ydCAqLworI2RlZmluZSAgUENJX0NBUF9JRF9WUEQJCTB4MDMJLyogVml0YWwgUHJvZHVjdCBEYXRhICovCisjZGVmaW5lICBQQ0lfQ0FQX0lEX1NMT1RJRAkweDA0CS8qIFNsb3QgSWRlbnRpZmljYXRpb24gKi8KKyNkZWZpbmUgIFBDSV9DQVBfSURfTVNJCQkweDA1CS8qIE1lc3NhZ2UgU2lnbmFsbGVkIEludGVycnVwdHMgKi8KKyNkZWZpbmUgIFBDSV9DQVBfSURfQ0hTV1AJMHgwNgkvKiBDb21wYWN0UENJIEhvdFN3YXAgKi8KKyNkZWZpbmUgIFBDSV9DQVBfSURfUENJWAkweDA3CS8qIFBDSS1YICovCisjZGVmaW5lICBQQ0lfQ0FQX0lEX1NIUEMgCTB4MEMJLyogUENJIFN0YW5kYXJkIEhvdC1QbHVnIENvbnRyb2xsZXIgKi8KKyNkZWZpbmUgIFBDSV9DQVBfSURfRVhQIAkweDEwCS8qIFBDSSBFeHByZXNzICovCisjZGVmaW5lICBQQ0lfQ0FQX0lEX01TSVgJMHgxMQkvKiBNU0ktWCAqLworI2RlZmluZSBQQ0lfQ0FQX0xJU1RfTkVYVAkxCS8qIE5leHQgY2FwYWJpbGl0eSBpbiB0aGUgbGlzdCAqLworI2RlZmluZSBQQ0lfQ0FQX0ZMQUdTCQkyCS8qIENhcGFiaWxpdHkgZGVmaW5lZCBmbGFncyAoMTYgYml0cykgKi8KKyNkZWZpbmUgUENJX0NBUF9TSVpFT0YJCTQKKworLyogUG93ZXIgTWFuYWdlbWVudCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBQQ0lfUE1fUE1DICAgICAgICAgICAgICAyICAgICAgIC8qIFBNIENhcGFiaWxpdGllcyBSZWdpc3RlciAqLworI2RlZmluZSAgUENJX1BNX0NBUF9WRVJfTUFTSwkweDAwMDcJLyogVmVyc2lvbiAqLworI2RlZmluZSAgUENJX1BNX0NBUF9QTUVfQ0xPQ0sJMHgwMDA4CS8qIFBNRSBjbG9jayByZXF1aXJlZCAqLworI2RlZmluZSAgUENJX1BNX0NBUF9SRVNFUlZFRCAgICAweDAwMTAgIC8qIFJlc2VydmVkIGZpZWxkICovCisjZGVmaW5lICBQQ0lfUE1fQ0FQX0RTSQkJMHgwMDIwCS8qIERldmljZSBzcGVjaWZpYyBpbml0aWFsaXphdGlvbiAqLworI2RlZmluZSAgUENJX1BNX0NBUF9BVVhfUE9XRVIJMHgwMUMwCS8qIEF1eGlsbGlhcnkgcG93ZXIgc3VwcG9ydCBtYXNrICovCisjZGVmaW5lICBQQ0lfUE1fQ0FQX0QxCQkweDAyMDAJLyogRDEgcG93ZXIgc3RhdGUgc3VwcG9ydCAqLworI2RlZmluZSAgUENJX1BNX0NBUF9EMgkJMHgwNDAwCS8qIEQyIHBvd2VyIHN0YXRlIHN1cHBvcnQgKi8KKyNkZWZpbmUgIFBDSV9QTV9DQVBfUE1FCQkweDA4MDAJLyogUE1FIHBpbiBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUgIFBDSV9QTV9DQVBfUE1FX01BU0sgICAgMHhGODAwICAvKiBQTUUgTWFzayBvZiBhbGwgc3VwcG9ydGVkIHN0YXRlcyAqLworI2RlZmluZSAgUENJX1BNX0NBUF9QTUVfRDAgICAgICAweDA4MDAgIC8qIFBNRSMgZnJvbSBEMCAqLworI2RlZmluZSAgUENJX1BNX0NBUF9QTUVfRDEgICAgICAweDEwMDAgIC8qIFBNRSMgZnJvbSBEMSAqLworI2RlZmluZSAgUENJX1BNX0NBUF9QTUVfRDIgICAgICAweDIwMDAgIC8qIFBNRSMgZnJvbSBEMiAqLworI2RlZmluZSAgUENJX1BNX0NBUF9QTUVfRDMgICAgICAweDQwMDAgIC8qIFBNRSMgZnJvbSBEMyAoaG90KSAqLworI2RlZmluZSAgUENJX1BNX0NBUF9QTUVfRDNjb2xkICAweDgwMDAgIC8qIFBNRSMgZnJvbSBEMyAoY29sZCkgKi8KKyNkZWZpbmUgUENJX1BNX0NUUkwJCTQJLyogUE0gY29udHJvbCBhbmQgc3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lICBQQ0lfUE1fQ1RSTF9TVEFURV9NQVNLCTB4MDAwMwkvKiBDdXJyZW50IHBvd2VyIHN0YXRlIChEMCB0byBEMykgKi8KKyNkZWZpbmUgIFBDSV9QTV9DVFJMX1BNRV9FTkFCTEUJMHgwMTAwCS8qIFBNRSBwaW4gZW5hYmxlICovCisjZGVmaW5lICBQQ0lfUE1fQ1RSTF9EQVRBX1NFTF9NQVNLCTB4MWUwMAkvKiBEYXRhIHNlbGVjdCAoPz8pICovCisjZGVmaW5lICBQQ0lfUE1fQ1RSTF9EQVRBX1NDQUxFX01BU0sJMHg2MDAwCS8qIERhdGEgc2NhbGUgKD8/KSAqLworI2RlZmluZSAgUENJX1BNX0NUUkxfUE1FX1NUQVRVUwkweDgwMDAJLyogUE1FIHBpbiBzdGF0dXMgKi8KKyNkZWZpbmUgUENJX1BNX1BQQl9FWFRFTlNJT05TCTYJLyogUFBCIHN1cHBvcnQgZXh0ZW5zaW9ucyAoPz8pICovCisjZGVmaW5lICBQQ0lfUE1fUFBCX0IyX0IzCTB4NDAJLyogU3RvcCBjbG9jayB3aGVuIGluIEQzaG90ICg/PykgKi8KKyNkZWZpbmUgIFBDSV9QTV9CUENDX0VOQUJMRQkweDgwCS8qIEJ1cyBwb3dlci9jbG9jayBjb250cm9sIGVuYWJsZSAoPz8pICovCisjZGVmaW5lIFBDSV9QTV9EQVRBX1JFR0lTVEVSCTcJLyogKD8/KSAqLworI2RlZmluZSBQQ0lfUE1fU0laRU9GCQk4CisKKy8qIEFHUCByZWdpc3RlcnMgKi8KKworI2RlZmluZSBQQ0lfQUdQX1ZFUlNJT04JCTIJLyogQkNEIHZlcnNpb24gbnVtYmVyICovCisjZGVmaW5lIFBDSV9BR1BfUkZVCQkzCS8qIFJlc3Qgb2YgY2FwYWJpbGl0eSBmbGFncyAqLworI2RlZmluZSBQQ0lfQUdQX1NUQVRVUwkJNAkvKiBTdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgIFBDSV9BR1BfU1RBVFVTX1JRX01BU0sJMHhmZjAwMDAwMAkvKiBNYXhpbXVtIG51bWJlciBvZiByZXF1ZXN0cyAtIDEgKi8KKyNkZWZpbmUgIFBDSV9BR1BfU1RBVFVTX1NCQQkweDAyMDAJLyogU2lkZWJhbmQgYWRkcmVzc2luZyBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUgIFBDSV9BR1BfU1RBVFVTXzY0QklUCTB4MDAyMAkvKiA2NC1iaXQgYWRkcmVzc2luZyBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUgIFBDSV9BR1BfU1RBVFVTX0ZXCTB4MDAxMAkvKiBGVyB0cmFuc2ZlcnMgc3VwcG9ydGVkICovCisjZGVmaW5lICBQQ0lfQUdQX1NUQVRVU19SQVRFNAkweDAwMDQJLyogNHggdHJhbnNmZXIgcmF0ZSBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUgIFBDSV9BR1BfU1RBVFVTX1JBVEUyCTB4MDAwMgkvKiAyeCB0cmFuc2ZlciByYXRlIHN1cHBvcnRlZCAqLworI2RlZmluZSAgUENJX0FHUF9TVEFUVVNfUkFURTEJMHgwMDAxCS8qIDF4IHRyYW5zZmVyIHJhdGUgc3VwcG9ydGVkICovCisjZGVmaW5lIFBDSV9BR1BfQ09NTUFORAkJOAkvKiBDb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lICBQQ0lfQUdQX0NPTU1BTkRfUlFfTUFTSyAweGZmMDAwMDAwICAvKiBNYXN0ZXI6IE1heGltdW0gbnVtYmVyIG9mIHJlcXVlc3RzICovCisjZGVmaW5lICBQQ0lfQUdQX0NPTU1BTkRfU0JBCTB4MDIwMAkvKiBTaWRlYmFuZCBhZGRyZXNzaW5nIGVuYWJsZWQgKi8KKyNkZWZpbmUgIFBDSV9BR1BfQ09NTUFORF9BR1AJMHgwMTAwCS8qIEFsbG93IHByb2Nlc3Npbmcgb2YgQUdQIHRyYW5zYWN0aW9ucyAqLworI2RlZmluZSAgUENJX0FHUF9DT01NQU5EXzY0QklUCTB4MDAyMCAJLyogQWxsb3cgcHJvY2Vzc2luZyBvZiA2NC1iaXQgYWRkcmVzc2VzICovCisjZGVmaW5lICBQQ0lfQUdQX0NPTU1BTkRfRlcJMHgwMDEwIAkvKiBGb3JjZSBGVyB0cmFuc2ZlcnMgKi8KKyNkZWZpbmUgIFBDSV9BR1BfQ09NTUFORF9SQVRFNAkweDAwMDQJLyogVXNlIDR4IHJhdGUgKi8KKyNkZWZpbmUgIFBDSV9BR1BfQ09NTUFORF9SQVRFMgkweDAwMDIJLyogVXNlIDJ4IHJhdGUgKi8KKyNkZWZpbmUgIFBDSV9BR1BfQ09NTUFORF9SQVRFMQkweDAwMDEJLyogVXNlIDF4IHJhdGUgKi8KKyNkZWZpbmUgUENJX0FHUF9TSVpFT0YJCTEyCisKKy8qIFZpdGFsIFByb2R1Y3QgRGF0YSAqLworCisjZGVmaW5lIFBDSV9WUERfQUREUgkJMgkvKiBBZGRyZXNzIHRvIGFjY2VzcyAoMTUgYml0cyEpICovCisjZGVmaW5lICBQQ0lfVlBEX0FERFJfTUFTSwkweDdmZmYJLyogQWRkcmVzcyBtYXNrICovCisjZGVmaW5lICBQQ0lfVlBEX0FERFJfRgkJMHg4MDAwCS8qIFdyaXRlIDAsIDEgaW5kaWNhdGVzIGNvbXBsZXRpb24gKi8KKyNkZWZpbmUgUENJX1ZQRF9EQVRBCQk0CS8qIDMyLWJpdHMgb2YgZGF0YSByZXR1cm5lZCBoZXJlICovCisKKy8qIFNsb3QgSWRlbnRpZmljYXRpb24gKi8KKworI2RlZmluZSBQQ0lfU0lEX0VTUgkJMgkvKiBFeHBhbnNpb24gU2xvdCBSZWdpc3RlciAqLworI2RlZmluZSAgUENJX1NJRF9FU1JfTlNMT1RTCTB4MWYJLyogTnVtYmVyIG9mIGV4cGFuc2lvbiBzbG90cyBhdmFpbGFibGUgKi8KKyNkZWZpbmUgIFBDSV9TSURfRVNSX0ZJQwkweDIwCS8qIEZpcnN0IEluIENoYXNzaXMgRmxhZyAqLworI2RlZmluZSBQQ0lfU0lEX0NIQVNTSVNfTlIJMwkvKiBDaGFzc2lzIE51bWJlciAqLworCisvKiBNZXNzYWdlIFNpZ25hbGxlZCBJbnRlcnJ1cHRzIHJlZ2lzdGVycyAqLworCisjZGVmaW5lIFBDSV9NU0lfRkxBR1MJCTIJLyogVmFyaW91cyBmbGFncyAqLworI2RlZmluZSAgUENJX01TSV9GTEFHU182NEJJVAkweDgwCS8qIDY0LWJpdCBhZGRyZXNzZXMgYWxsb3dlZCAqLworI2RlZmluZSAgUENJX01TSV9GTEFHU19RU0laRQkweDcwCS8qIE1lc3NhZ2UgcXVldWUgc2l6ZSBjb25maWd1cmVkICovCisjZGVmaW5lICBQQ0lfTVNJX0ZMQUdTX1FNQVNLCTB4MGUJLyogTWF4aW11bSBxdWV1ZSBzaXplIGF2YWlsYWJsZSAqLworI2RlZmluZSAgUENJX01TSV9GTEFHU19FTkFCTEUJMHgwMQkvKiBNU0kgZmVhdHVyZSBlbmFibGVkICovCisjZGVmaW5lICBQQ0lfTVNJX0ZMQUdTX01BU0tCSVQJMHgxMDAJLyogNjQtYml0IG1hc2sgYml0cyBhbGxvd2VkICovCisjZGVmaW5lIFBDSV9NU0lfUkZVCQkzCS8qIFJlc3Qgb2YgY2FwYWJpbGl0eSBmbGFncyAqLworI2RlZmluZSBQQ0lfTVNJX0FERFJFU1NfTE8JNAkvKiBMb3dlciAzMiBiaXRzICovCisjZGVmaW5lIFBDSV9NU0lfQUREUkVTU19ISQk4CS8qIFVwcGVyIDMyIGJpdHMgKGlmIFBDSV9NU0lfRkxBR1NfNjRCSVQgc2V0KSAqLworI2RlZmluZSBQQ0lfTVNJX0RBVEFfMzIJCTgJLyogMTYgYml0cyBvZiBkYXRhIGZvciAzMi1iaXQgZGV2aWNlcyAqLworI2RlZmluZSBQQ0lfTVNJX0RBVEFfNjQJCTEyCS8qIDE2IGJpdHMgb2YgZGF0YSBmb3IgNjQtYml0IGRldmljZXMgKi8KKyNkZWZpbmUgUENJX01TSV9NQVNLX0JJVAkxNgkvKiBNYXNrIGJpdHMgcmVnaXN0ZXIgKi8KKworLyogQ29tcGFjdFBDSSBIb3Rzd2FwIFJlZ2lzdGVyICovCisKKyNkZWZpbmUgUENJX0NIU1dQX0NTUgkJMgkvKiBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgIFBDSV9DSFNXUF9ESEEJCTB4MDEJLyogRGV2aWNlIEhpZGluZyBBcm0gKi8KKyNkZWZpbmUgIFBDSV9DSFNXUF9FSU0JCTB4MDIJLyogRU5VTSMgU2lnbmFsIE1hc2sgKi8KKyNkZWZpbmUgIFBDSV9DSFNXUF9QSUUJCTB4MDQJLyogUGVuZGluZyBJbnNlcnQgb3IgRXh0cmFjdCAqLworI2RlZmluZSAgUENJX0NIU1dQX0xPTwkJMHgwOAkvKiBMRUQgT24gLyBPZmYgKi8KKyNkZWZpbmUgIFBDSV9DSFNXUF9QSQkJMHgzMAkvKiBQcm9ncmFtbWluZyBJbnRlcmZhY2UgKi8KKyNkZWZpbmUgIFBDSV9DSFNXUF9FWFQJCTB4NDAJLyogRU5VTSMgc3RhdHVzIC0gZXh0cmFjdGlvbiAqLworI2RlZmluZSAgUENJX0NIU1dQX0lOUwkJMHg4MAkvKiBFTlVNIyBzdGF0dXMgLSBpbnNlcnRpb24gKi8KKworLyogUENJLVggcmVnaXN0ZXJzICovCisKKyNkZWZpbmUgUENJX1hfQ01ECQkyCS8qIE1vZGVzICYgRmVhdHVyZXMgKi8KKyNkZWZpbmUgIFBDSV9YX0NNRF9EUEVSUl9FCTB4MDAwMQkvKiBEYXRhIFBhcml0eSBFcnJvciBSZWNvdmVyeSBFbmFibGUgKi8KKyNkZWZpbmUgIFBDSV9YX0NNRF9FUk8JCTB4MDAwMgkvKiBFbmFibGUgUmVsYXhlZCBPcmRlcmluZyAqLworI2RlZmluZSAgUENJX1hfQ01EX01BWF9SRUFECTB4MDAwYwkvKiBNYXggTWVtb3J5IFJlYWQgQnl0ZSBDb3VudCAqLworI2RlZmluZSAgUENJX1hfQ01EX01BWF9TUExJVAkweDAwNzAJLyogTWF4IE91dHN0YW5kaW5nIFNwbGl0IFRyYW5zYWN0aW9ucyAqLworI2RlZmluZSAgUENJX1hfQ01EX1ZFUlNJT04oeCkgCSgoKHgpID4+IDEyKSAmIDMpIC8qIFZlcnNpb24gKi8KKyNkZWZpbmUgUENJX1hfU1RBVFVTCQk0CS8qIFBDSS1YIGNhcGFiaWxpdGllcyAqLworI2RlZmluZSAgUENJX1hfU1RBVFVTX0RFVkZOCTB4MDAwMDAwZmYJLyogQSBjb3B5IG9mIGRldmZuICovCisjZGVmaW5lICBQQ0lfWF9TVEFUVVNfQlVTCTB4MDAwMGZmMDAJLyogQSBjb3B5IG9mIGJ1cyBuciAqLworI2RlZmluZSAgUENJX1hfU1RBVFVTXzY0QklUCTB4MDAwMTAwMDAJLyogNjQtYml0IGRldmljZSAqLworI2RlZmluZSAgUENJX1hfU1RBVFVTXzEzM01IWgkweDAwMDIwMDAwCS8qIDEzMyBNSHogY2FwYWJsZSAqLworI2RlZmluZSAgUENJX1hfU1RBVFVTX1NQTF9ESVNDCTB4MDAwNDAwMDAJLyogU3BsaXQgQ29tcGxldGlvbiBEaXNjYXJkZWQgKi8KKyNkZWZpbmUgIFBDSV9YX1NUQVRVU19VTlhfU1BMCTB4MDAwODAwMDAJLyogVW5leHBlY3RlZCBTcGxpdCBDb21wbGV0aW9uICovCisjZGVmaW5lICBQQ0lfWF9TVEFUVVNfQ09NUExFWAkweDAwMTAwMDAwCS8qIERldmljZSBDb21wbGV4aXR5ICovCisjZGVmaW5lICBQQ0lfWF9TVEFUVVNfTUFYX1JFQUQJMHgwMDYwMDAwMAkvKiBEZXNpZ25lZCBNYXggTWVtb3J5IFJlYWQgQ291bnQgKi8KKyNkZWZpbmUgIFBDSV9YX1NUQVRVU19NQVhfU1BMSVQJMHgwMzgwMDAwMAkvKiBEZXNpZ25lZCBNYXggT3V0c3RhbmRpbmcgU3BsaXQgVHJhbnNhY3Rpb25zICovCisjZGVmaW5lICBQQ0lfWF9TVEFUVVNfTUFYX0NVTQkweDFjMDAwMDAwCS8qIERlc2lnbmVkIE1heCBDdW11bGF0aXZlIFJlYWQgU2l6ZSAqLworI2RlZmluZSAgUENJX1hfU1RBVFVTX1NQTF9FUlIJMHgyMDAwMDAwMAkvKiBSY3ZkIFNwbGl0IENvbXBsZXRpb24gRXJyb3IgTXNnICovCisjZGVmaW5lICBQQ0lfWF9TVEFUVVNfMjY2TUhaCTB4NDAwMDAwMDAJLyogMjY2IE1IeiBjYXBhYmxlICovCisjZGVmaW5lICBQQ0lfWF9TVEFUVVNfNTMzTUhaCTB4ODAwMDAwMDAJLyogNTMzIE1IeiBjYXBhYmxlICovCisKKy8qIFBDSSBFeHByZXNzIGNhcGFiaWxpdHkgcmVnaXN0ZXJzICovCisKKyNkZWZpbmUgUENJX0VYUF9GTEFHUwkJMgkvKiBDYXBhYmlsaXRpZXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJX0VYUF9GTEFHU19WRVJTCTB4MDAwZgkvKiBDYXBhYmlsaXR5IHZlcnNpb24gKi8KKyNkZWZpbmUgUENJX0VYUF9GTEFHU19UWVBFCTB4MDBmMAkvKiBEZXZpY2UvUG9ydCB0eXBlICovCisjZGVmaW5lICBQQ0lfRVhQX1RZUEVfRU5EUE9JTlQJMHgwCS8qIEV4cHJlc3MgRW5kcG9pbnQgKi8KKyNkZWZpbmUgIFBDSV9FWFBfVFlQRV9MRUdfRU5ECTB4MQkvKiBMZWdhY3kgRW5kcG9pbnQgKi8KKyNkZWZpbmUgIFBDSV9FWFBfVFlQRV9ST09UX1BPUlQgMHg0CS8qIFJvb3QgUG9ydCAqLworI2RlZmluZSAgUENJX0VYUF9UWVBFX1VQU1RSRUFNCTB4NQkvKiBVcHN0cmVhbSBQb3J0ICovCisjZGVmaW5lICBQQ0lfRVhQX1RZUEVfRE9XTlNUUkVBTSAweDYJLyogRG93bnN0cmVhbSBQb3J0ICovCisjZGVmaW5lICBQQ0lfRVhQX1RZUEVfUENJX0JSSURHRSAweDcJLyogUENJL1BDSS1YIEJyaWRnZSAqLworI2RlZmluZSBQQ0lfRVhQX0ZMQUdTX1NMT1QJMHgwMTAwCS8qIFNsb3QgaW1wbGVtZW50ZWQgKi8KKyNkZWZpbmUgUENJX0VYUF9GTEFHU19JUlEJMHgzZTAwCS8qIEludGVycnVwdCBtZXNzYWdlIG51bWJlciAqLworI2RlZmluZSBQQ0lfRVhQX0RFVkNBUAkJNAkvKiBEZXZpY2UgY2FwYWJpbGl0aWVzICovCisjZGVmaW5lICBQQ0lfRVhQX0RFVkNBUF9QQVlMT0FECTB4MDcJLyogTWF4X1BheWxvYWRfU2l6ZSAqLworI2RlZmluZSAgUENJX0VYUF9ERVZDQVBfUEhBTlRPTQkweDE4CS8qIFBoYW50b20gZnVuY3Rpb25zICovCisjZGVmaW5lICBQQ0lfRVhQX0RFVkNBUF9FWFRfVEFHCTB4MjAJLyogRXh0ZW5kZWQgdGFncyAqLworI2RlZmluZSAgUENJX0VYUF9ERVZDQVBfTDBTCTB4MWMwCS8qIEwwcyBBY2NlcHRhYmxlIExhdGVuY3kgKi8KKyNkZWZpbmUgIFBDSV9FWFBfREVWQ0FQX0wxCTB4ZTAwCS8qIEwxIEFjY2VwdGFibGUgTGF0ZW5jeSAqLworI2RlZmluZSAgUENJX0VYUF9ERVZDQVBfQVROX0JVVAkweDEwMDAJLyogQXR0ZW50aW9uIEJ1dHRvbiBQcmVzZW50ICovCisjZGVmaW5lICBQQ0lfRVhQX0RFVkNBUF9BVE5fSU5ECTB4MjAwMAkvKiBBdHRlbnRpb24gSW5kaWNhdG9yIFByZXNlbnQgKi8KKyNkZWZpbmUgIFBDSV9FWFBfREVWQ0FQX1BXUl9JTkQJMHg0MDAwCS8qIFBvd2VyIEluZGljYXRvciBQcmVzZW50ICovCisjZGVmaW5lICBQQ0lfRVhQX0RFVkNBUF9QV1JfVkFMCTB4M2ZjMDAwMCAvKiBTbG90IFBvd2VyIExpbWl0IFZhbHVlICovCisjZGVmaW5lICBQQ0lfRVhQX0RFVkNBUF9QV1JfU0NMCTB4YzAwMDAwMCAvKiBTbG90IFBvd2VyIExpbWl0IFNjYWxlICovCisjZGVmaW5lIFBDSV9FWFBfREVWQ1RMCQk4CS8qIERldmljZSBDb250cm9sICovCisjZGVmaW5lICBQQ0lfRVhQX0RFVkNUTF9DRVJFCTB4MDAwMQkvKiBDb3JyZWN0YWJsZSBFcnJvciBSZXBvcnRpbmcgRW4uICovCisjZGVmaW5lICBQQ0lfRVhQX0RFVkNUTF9ORkVSRQkweDAwMDIJLyogTm9uLUZhdGFsIEVycm9yIFJlcG9ydGluZyBFbmFibGUgKi8KKyNkZWZpbmUgIFBDSV9FWFBfREVWQ1RMX0ZFUkUJMHgwMDA0CS8qIEZhdGFsIEVycm9yIFJlcG9ydGluZyBFbmFibGUgKi8KKyNkZWZpbmUgIFBDSV9FWFBfREVWQ1RMX1VSUkUJMHgwMDA4CS8qIFVuc3VwcG9ydGVkIFJlcXVlc3QgUmVwb3J0aW5nIEVuLiAqLworI2RlZmluZSAgUENJX0VYUF9ERVZDVExfUkVMQVhfRU4gMHgwMDEwIC8qIEVuYWJsZSByZWxheGVkIG9yZGVyaW5nICovCisjZGVmaW5lICBQQ0lfRVhQX0RFVkNUTF9QQVlMT0FECTB4MDBlMAkvKiBNYXhfUGF5bG9hZF9TaXplICovCisjZGVmaW5lICBQQ0lfRVhQX0RFVkNUTF9FWFRfVEFHCTB4MDEwMAkvKiBFeHRlbmRlZCBUYWcgRmllbGQgRW5hYmxlICovCisjZGVmaW5lICBQQ0lfRVhQX0RFVkNUTF9QSEFOVE9NCTB4MDIwMAkvKiBQaGFudG9tIEZ1bmN0aW9ucyBFbmFibGUgKi8KKyNkZWZpbmUgIFBDSV9FWFBfREVWQ1RMX0FVWF9QTUUJMHgwNDAwCS8qIEF1eGlsaWFyeSBQb3dlciBQTSBFbmFibGUgKi8KKyNkZWZpbmUgIFBDSV9FWFBfREVWQ1RMX05PU05PT1BfRU4gMHgwODAwICAvKiBFbmFibGUgTm8gU25vb3AgKi8KKyNkZWZpbmUgIFBDSV9FWFBfREVWQ1RMX1JFQURSUQkweDcwMDAJLyogTWF4X1JlYWRfUmVxdWVzdF9TaXplICovCisjZGVmaW5lIFBDSV9FWFBfREVWU1RBCQkxMAkvKiBEZXZpY2UgU3RhdHVzICovCisjZGVmaW5lICBQQ0lfRVhQX0RFVlNUQV9DRUQJMHgwMQkvKiBDb3JyZWN0YWJsZSBFcnJvciBEZXRlY3RlZCAqLworI2RlZmluZSAgUENJX0VYUF9ERVZTVEFfTkZFRAkweDAyCS8qIE5vbi1GYXRhbCBFcnJvciBEZXRlY3RlZCAqLworI2RlZmluZSAgUENJX0VYUF9ERVZTVEFfRkVECTB4MDQJLyogRmF0YWwgRXJyb3IgRGV0ZWN0ZWQgKi8KKyNkZWZpbmUgIFBDSV9FWFBfREVWU1RBX1VSRAkweDA4CS8qIFVuc3VwcG9ydGVkIFJlcXVlc3QgRGV0ZWN0ZWQgKi8KKyNkZWZpbmUgIFBDSV9FWFBfREVWU1RBX0FVWFBECTB4MTAJLyogQVVYIFBvd2VyIERldGVjdGVkICovCisjZGVmaW5lICBQQ0lfRVhQX0RFVlNUQV9UUlBORAkweDIwCS8qIFRyYW5zYWN0aW9ucyBQZW5kaW5nICovCisjZGVmaW5lIFBDSV9FWFBfTE5LQ0FQCQkxMgkvKiBMaW5rIENhcGFiaWxpdGllcyAqLworI2RlZmluZSBQQ0lfRVhQX0xOS0NUTAkJMTYJLyogTGluayBDb250cm9sICovCisjZGVmaW5lIFBDSV9FWFBfTE5LU1RBCQkxOAkvKiBMaW5rIFN0YXR1cyAqLworI2RlZmluZSBQQ0lfRVhQX1NMVENBUAkJMjAJLyogU2xvdCBDYXBhYmlsaXRpZXMgKi8KKyNkZWZpbmUgUENJX0VYUF9TTFRDVEwJCTI0CS8qIFNsb3QgQ29udHJvbCAqLworI2RlZmluZSBQQ0lfRVhQX1NMVFNUQQkJMjYJLyogU2xvdCBTdGF0dXMgKi8KKyNkZWZpbmUgUENJX0VYUF9SVENUTAkJMjgJLyogUm9vdCBDb250cm9sICovCisjZGVmaW5lICBQQ0lfRVhQX1JUQ1RMX1NFQ0VFCTB4MDEJLyogU3lzdGVtIEVycm9yIG9uIENvcnJlY3RhYmxlIEVycm9yICovCisjZGVmaW5lICBQQ0lfRVhQX1JUQ1RMX1NFTkZFRQkweDAyCS8qIFN5c3RlbSBFcnJvciBvbiBOb24tRmF0YWwgRXJyb3IgKi8KKyNkZWZpbmUgIFBDSV9FWFBfUlRDVExfU0VGRUUJMHgwNAkvKiBTeXN0ZW0gRXJyb3Igb24gRmF0YWwgRXJyb3IgKi8KKyNkZWZpbmUgIFBDSV9FWFBfUlRDVExfUE1FSUUJMHgwOAkvKiBQTUUgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSAgUENJX0VYUF9SVENUTF9DUlNTVkUJMHgxMAkvKiBDUlMgU29mdHdhcmUgVmlzaWJpbGl0eSBFbmFibGUgKi8KKyNkZWZpbmUgUENJX0VYUF9SVENBUAkJMzAJLyogUm9vdCBDYXBhYmlsaXRpZXMgKi8KKyNkZWZpbmUgUENJX0VYUF9SVFNUQQkJMzIJLyogUm9vdCBTdGF0dXMgKi8KKworLyogRXh0ZW5kZWQgQ2FwYWJpbGl0aWVzIChQQ0ktWCAyLjAgYW5kIEV4cHJlc3MpICovCisjZGVmaW5lIFBDSV9FWFRfQ0FQX0lEKGhlYWRlcikJCShoZWFkZXIgJiAweDAwMDBmZmZmKQorI2RlZmluZSBQQ0lfRVhUX0NBUF9WRVIoaGVhZGVyKQkJKChoZWFkZXIgPj4gMTYpICYgMHhmKQorI2RlZmluZSBQQ0lfRVhUX0NBUF9ORVhUKGhlYWRlcikJKChoZWFkZXIgPj4gMjApICYgMHhmZmMpCisKKyNkZWZpbmUgUENJX0VYVF9DQVBfSURfRVJSCTEKKyNkZWZpbmUgUENJX0VYVF9DQVBfSURfVkMJMgorI2RlZmluZSBQQ0lfRVhUX0NBUF9JRF9EU04JMworI2RlZmluZSBQQ0lfRVhUX0NBUF9JRF9QV1IJNAorCisvKiBBZHZhbmNlZCBFcnJvciBSZXBvcnRpbmcgKi8KKyNkZWZpbmUgUENJX0VSUl9VTkNPUl9TVEFUVVMJNAkvKiBVbmNvcnJlY3RhYmxlIEVycm9yIFN0YXR1cyAqLworI2RlZmluZSAgUENJX0VSUl9VTkNfVFJBSU4JMHgwMDAwMDAwMQkvKiBUcmFpbmluZyAqLworI2RlZmluZSAgUENJX0VSUl9VTkNfRExQCTB4MDAwMDAwMTAJLyogRGF0YSBMaW5rIFByb3RvY29sICovCisjZGVmaW5lICBQQ0lfRVJSX1VOQ19QT0lTT05fVExQCTB4MDAwMDEwMDAJLyogUG9pc29uZWQgVExQICovCisjZGVmaW5lICBQQ0lfRVJSX1VOQ19GQ1AJMHgwMDAwMjAwMAkvKiBGbG93IENvbnRyb2wgUHJvdG9jb2wgKi8KKyNkZWZpbmUgIFBDSV9FUlJfVU5DX0NPTVBfVElNRQkweDAwMDA0MDAwCS8qIENvbXBsZXRpb24gVGltZW91dCAqLworI2RlZmluZSAgUENJX0VSUl9VTkNfQ09NUF9BQk9SVAkweDAwMDA4MDAwCS8qIENvbXBsZXRlciBBYm9ydCAqLworI2RlZmluZSAgUENJX0VSUl9VTkNfVU5YX0NPTVAJMHgwMDAxMDAwMAkvKiBVbmV4cGVjdGVkIENvbXBsZXRpb24gKi8KKyNkZWZpbmUgIFBDSV9FUlJfVU5DX1JYX09WRVIJMHgwMDAyMDAwMAkvKiBSZWNlaXZlciBPdmVyZmxvdyAqLworI2RlZmluZSAgUENJX0VSUl9VTkNfTUFMRl9UTFAJMHgwMDA0MDAwMAkvKiBNYWxmb3JtZWQgVExQICovCisjZGVmaW5lICBQQ0lfRVJSX1VOQ19FQ1JDCTB4MDAwODAwMDAJLyogRUNSQyBFcnJvciBTdGF0dXMgKi8KKyNkZWZpbmUgIFBDSV9FUlJfVU5DX1VOU1VQCTB4MDAxMDAwMDAJLyogVW5zdXBwb3J0ZWQgUmVxdWVzdCAqLworI2RlZmluZSBQQ0lfRVJSX1VOQ09SX01BU0sJOAkvKiBVbmNvcnJlY3RhYmxlIEVycm9yIE1hc2sgKi8KKwkvKiBTYW1lIGJpdHMgYXMgYWJvdmUgKi8KKyNkZWZpbmUgUENJX0VSUl9VTkNPUl9TRVZFUgkxMgkvKiBVbmNvcnJlY3RhYmxlIEVycm9yIFNldmVyaXR5ICovCisJLyogU2FtZSBiaXRzIGFzIGFib3ZlICovCisjZGVmaW5lIFBDSV9FUlJfQ09SX1NUQVRVUwkxNgkvKiBDb3JyZWN0YWJsZSBFcnJvciBTdGF0dXMgKi8KKyNkZWZpbmUgIFBDSV9FUlJfQ09SX1JDVlIJMHgwMDAwMDAwMQkvKiBSZWNlaXZlciBFcnJvciBTdGF0dXMgKi8KKyNkZWZpbmUgIFBDSV9FUlJfQ09SX0JBRF9UTFAJMHgwMDAwMDA0MAkvKiBCYWQgVExQIFN0YXR1cyAqLworI2RlZmluZSAgUENJX0VSUl9DT1JfQkFEX0RMTFAJMHgwMDAwMDA4MAkvKiBCYWQgRExMUCBTdGF0dXMgKi8KKyNkZWZpbmUgIFBDSV9FUlJfQ09SX1JFUF9ST0xMCTB4MDAwMDAxMDAJLyogUkVQTEFZX05VTSBSb2xsb3ZlciAqLworI2RlZmluZSAgUENJX0VSUl9DT1JfUkVQX1RJTUVSCTB4MDAwMDEwMDAJLyogUmVwbGF5IFRpbWVyIFRpbWVvdXQgKi8KKyNkZWZpbmUgUENJX0VSUl9DT1JfTUFTSwkyMAkvKiBDb3JyZWN0YWJsZSBFcnJvciBNYXNrICovCisJLyogU2FtZSBiaXRzIGFzIGFib3ZlICovCisjZGVmaW5lIFBDSV9FUlJfQ0FQCQkyNAkvKiBBZHZhbmNlZCBFcnJvciBDYXBhYmlsaXRpZXMgKi8KKyNkZWZpbmUgIFBDSV9FUlJfQ0FQX0ZFUCh4KQkoKHgpICYgMzEpCS8qIEZpcnN0IEVycm9yIFBvaW50ZXIgKi8KKyNkZWZpbmUgIFBDSV9FUlJfQ0FQX0VDUkNfR0VOQwkweDAwMDAwMDIwCS8qIEVDUkMgR2VuZXJhdGlvbiBDYXBhYmxlICovCisjZGVmaW5lICBQQ0lfRVJSX0NBUF9FQ1JDX0dFTkUJMHgwMDAwMDA0MAkvKiBFQ1JDIEdlbmVyYXRpb24gRW5hYmxlICovCisjZGVmaW5lICBQQ0lfRVJSX0NBUF9FQ1JDX0NIS0MJMHgwMDAwMDA4MAkvKiBFQ1JDIENoZWNrIENhcGFibGUgKi8KKyNkZWZpbmUgIFBDSV9FUlJfQ0FQX0VDUkNfQ0hLRQkweDAwMDAwMTAwCS8qIEVDUkMgQ2hlY2sgRW5hYmxlICovCisjZGVmaW5lIFBDSV9FUlJfSEVBREVSX0xPRwkyOAkvKiBIZWFkZXIgTG9nIFJlZ2lzdGVyICgxNiBieXRlcykgKi8KKyNkZWZpbmUgUENJX0VSUl9ST09UX0NPTU1BTkQJNDQJLyogUm9vdCBFcnJvciBDb21tYW5kICovCisjZGVmaW5lIFBDSV9FUlJfUk9PVF9TVEFUVVMJNDgKKyNkZWZpbmUgUENJX0VSUl9ST09UX0NPUl9TUkMJNTIKKyNkZWZpbmUgUENJX0VSUl9ST09UX1NSQwk1NAorCisvKiBWaXJ0dWFsIENoYW5uZWwgKi8KKyNkZWZpbmUgUENJX1ZDX1BPUlRfUkVHMQk0CisjZGVmaW5lIFBDSV9WQ19QT1JUX1JFRzIJOAorI2RlZmluZSBQQ0lfVkNfUE9SVF9DVFJMCTEyCisjZGVmaW5lIFBDSV9WQ19QT1JUX1NUQVRVUwkxNAorI2RlZmluZSBQQ0lfVkNfUkVTX0NBUAkJMTYKKyNkZWZpbmUgUENJX1ZDX1JFU19DVFJMCQkyMAorI2RlZmluZSBQQ0lfVkNfUkVTX1NUQVRVUwkyNgorCisvKiBQb3dlciBCdWRnZXRpbmcgKi8KKyNkZWZpbmUgUENJX1BXUl9EU1IJCTQJLyogRGF0YSBTZWxlY3QgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJX1BXUl9EQVRBCQk4CS8qIERhdGEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgIFBDSV9QV1JfREFUQV9CQVNFKHgpCSgoeCkgJiAweGZmKQkgICAgLyogQmFzZSBQb3dlciAqLworI2RlZmluZSAgUENJX1BXUl9EQVRBX1NDQUxFKHgpCSgoKHgpID4+IDgpICYgMykgICAgLyogRGF0YSBTY2FsZSAqLworI2RlZmluZSAgUENJX1BXUl9EQVRBX1BNX1NVQih4KQkoKCh4KSA+PiAxMCkgJiA3KSAgIC8qIFBNIFN1YiBTdGF0ZSAqLworI2RlZmluZSAgUENJX1BXUl9EQVRBX1BNX1NUQVRFKHgpICgoKHgpID4+IDEzKSAmIDMpIC8qIFBNIFN0YXRlICovCisjZGVmaW5lICBQQ0lfUFdSX0RBVEFfVFlQRSh4KQkoKCh4KSA+PiAxNSkgJiA3KSAgIC8qIFR5cGUgKi8KKyNkZWZpbmUgIFBDSV9QV1JfREFUQV9SQUlMKHgpCSgoKHgpID4+IDE4KSAmIDcpICAgLyogUG93ZXIgUmFpbCAqLworI2RlZmluZSBQQ0lfUFdSX0NBUAkJMTIJLyogQ2FwYWJpbGl0eSAqLworI2RlZmluZSAgUENJX1BXUl9DQVBfQlVER0VUKHgpCSgoeCkgJiAxKQkvKiBJbmNsdWRlZCBpbiBzeXN0ZW0gYnVkZ2V0ICovCisKKy8qIEluY2x1ZGUgdGhlIElEIGxpc3QgKi8KKworI2luY2x1ZGUgPGxpbnV4L3BjaV9pZHMuaD4KKworLyoKKyAqIFRoZSBQQ0kgaW50ZXJmYWNlIHRyZWF0cyBtdWx0aS1mdW5jdGlvbiBkZXZpY2VzIGFzIGluZGVwZW5kZW50CisgKiBkZXZpY2VzLiAgVGhlIHNsb3QvZnVuY3Rpb24gYWRkcmVzcyBvZiBlYWNoIGRldmljZSBpcyBlbmNvZGVkCisgKiBpbiBhIHNpbmdsZSBieXRlIGFzIGZvbGxvd3M6CisgKgorICoJNzozID0gc2xvdAorICoJMjowID0gZnVuY3Rpb24KKyAqLworI2RlZmluZSBQQ0lfREVWRk4oc2xvdCxmdW5jKQkoKCgoc2xvdCkgJiAweDFmKSA8PCAzKSB8ICgoZnVuYykgJiAweDA3KSkKKyNkZWZpbmUgUENJX1NMT1QoZGV2Zm4pCQkoKChkZXZmbikgPj4gMykgJiAweDFmKQorI2RlZmluZSBQQ0lfRlVOQyhkZXZmbikJCSgoZGV2Zm4pICYgMHgwNykKKworLyogSW9jdGxzIGZvciAvcHJvYy9idXMvcGNpL1gvWSBub2Rlcy4gKi8KKyNkZWZpbmUgUENJSU9DX0JBU0UJCSgnUCcgPDwgMjQgfCAnQycgPDwgMTYgfCAnSScgPDwgOCkKKyNkZWZpbmUgUENJSU9DX0NPTlRST0xMRVIJKFBDSUlPQ19CQVNFIHwgMHgwMCkJLyogR2V0IGNvbnRyb2xsZXIgZm9yIFBDSSBkZXZpY2UuICovCisjZGVmaW5lIFBDSUlPQ19NTUFQX0lTX0lPCShQQ0lJT0NfQkFTRSB8IDB4MDEpCS8qIFNldCBtbWFwIHN0YXRlIHRvIEkvTyBzcGFjZS4gKi8KKyNkZWZpbmUgUENJSU9DX01NQVBfSVNfTUVNCShQQ0lJT0NfQkFTRSB8IDB4MDIpCS8qIFNldCBtbWFwIHN0YXRlIHRvIE1FTSBzcGFjZS4gKi8KKyNkZWZpbmUgUENJSU9DX1dSSVRFX0NPTUJJTkUJKFBDSUlPQ19CQVNFIHwgMHgwMykJLyogRW5hYmxlL2Rpc2FibGUgd3JpdGUtY29tYmluaW5nLiAqLworCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKworLyogRmlsZSBzdGF0ZSBmb3IgbW1hcCgpcyBvbiAvcHJvYy9idXMvcGNpL1gvWSAqLworZW51bSBwY2lfbW1hcF9zdGF0ZSB7CisJcGNpX21tYXBfaW8sCisJcGNpX21tYXBfbWVtCit9OworCisvKiBUaGlzIGRlZmluZXMgdGhlIGRpcmVjdGlvbiBhcmcgdG8gdGhlIERNQSBtYXBwaW5nIHJvdXRpbmVzLiAqLworI2RlZmluZSBQQ0lfRE1BX0JJRElSRUNUSU9OQUwJMAorI2RlZmluZSBQQ0lfRE1BX1RPREVWSUNFCTEKKyNkZWZpbmUgUENJX0RNQV9GUk9NREVWSUNFCTIKKyNkZWZpbmUgUENJX0RNQV9OT05FCQkzCisKKyNkZWZpbmUgREVWSUNFX0NPVU5UX0NPTVBBVElCTEUJNAorI2RlZmluZSBERVZJQ0VfQ09VTlRfUkVTT1VSQ0UJMTIKKwordHlwZWRlZiBpbnQgX19iaXR3aXNlIHBjaV9wb3dlcl90OworCisjZGVmaW5lIFBDSV9EMAkoKHBjaV9wb3dlcl90IF9fZm9yY2UpIDApCisjZGVmaW5lIFBDSV9EMQkoKHBjaV9wb3dlcl90IF9fZm9yY2UpIDEpCisjZGVmaW5lIFBDSV9EMgkoKHBjaV9wb3dlcl90IF9fZm9yY2UpIDIpCisjZGVmaW5lIFBDSV9EM2hvdAkoKHBjaV9wb3dlcl90IF9fZm9yY2UpIDMpCisjZGVmaW5lIFBDSV9EM2NvbGQJKChwY2lfcG93ZXJfdCBfX2ZvcmNlKSA0KQorCisvKgorICogVGhlIHBjaV9kZXYgc3RydWN0dXJlIGlzIHVzZWQgdG8gZGVzY3JpYmUgUENJIGRldmljZXMuCisgKi8KK3N0cnVjdCBwY2lfZGV2IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGdsb2JhbF9saXN0OwkvKiBub2RlIGluIGxpc3Qgb2YgYWxsIFBDSSBkZXZpY2VzICovCisJc3RydWN0IGxpc3RfaGVhZCBidXNfbGlzdDsJLyogbm9kZSBpbiBwZXItYnVzIGxpc3QgKi8KKwlzdHJ1Y3QgcGNpX2J1cwkqYnVzOwkJLyogYnVzIHRoaXMgZGV2aWNlIGlzIG9uICovCisJc3RydWN0IHBjaV9idXMJKnN1Ym9yZGluYXRlOwkvKiBidXMgdGhpcyBkZXZpY2UgYnJpZGdlcyB0byAqLworCisJdm9pZAkJKnN5c2RhdGE7CS8qIGhvb2sgZm9yIHN5cy1zcGVjaWZpYyBleHRlbnNpb24gKi8KKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NlbnQ7CS8qIGRldmljZSBlbnRyeSBpbiAvcHJvYy9idXMvcGNpICovCisKKwl1bnNpZ25lZCBpbnQJZGV2Zm47CQkvKiBlbmNvZGVkIGRldmljZSAmIGZ1bmN0aW9uIGluZGV4ICovCisJdW5zaWduZWQgc2hvcnQJdmVuZG9yOworCXVuc2lnbmVkIHNob3J0CWRldmljZTsKKwl1bnNpZ25lZCBzaG9ydAlzdWJzeXN0ZW1fdmVuZG9yOworCXVuc2lnbmVkIHNob3J0CXN1YnN5c3RlbV9kZXZpY2U7CisJdW5zaWduZWQgaW50CWNsYXNzOwkJLyogMyBieXRlczogKGJhc2Usc3ViLHByb2ctaWYpICovCisJdTgJCWhkcl90eXBlOwkvKiBQQ0kgaGVhZGVyIHR5cGUgKGBtdWx0aScgZmxhZyBtYXNrZWQgb3V0KSAqLworCXU4CQlyb21fYmFzZV9yZWc7CS8qIHdoaWNoIGNvbmZpZyByZWdpc3RlciBjb250cm9scyB0aGUgUk9NICovCisKKwlzdHJ1Y3QgcGNpX2RyaXZlciAqZHJpdmVyOwkvKiB3aGljaCBkcml2ZXIgaGFzIGFsbG9jYXRlZCB0aGlzIGRldmljZSAqLworCXU2NAkJZG1hX21hc2s7CS8qIE1hc2sgb2YgdGhlIGJpdHMgb2YgYnVzIGFkZHJlc3MgdGhpcworCQkJCQkgICBkZXZpY2UgaW1wbGVtZW50cy4gIE5vcm1hbGx5IHRoaXMgaXMKKwkJCQkJICAgMHhmZmZmZmZmZi4gIFlvdSBvbmx5IG5lZWQgdG8gY2hhbmdlCisJCQkJCSAgIHRoaXMgaWYgeW91ciBkZXZpY2UgaGFzIGJyb2tlbiBETUEKKwkJCQkJICAgb3Igc3VwcG9ydHMgNjQtYml0IHRyYW5zZmVycy4gICovCisKKwlwY2lfcG93ZXJfdCAgICAgY3VycmVudF9zdGF0ZTsgIC8qIEN1cnJlbnQgb3BlcmF0aW5nIHN0YXRlLiBJbiBBQ1BJLXNwZWFrLAorCQkJCQkgICB0aGlzIGlzIEQwLUQzLCBEMCBiZWluZyBmdWxseSBmdW5jdGlvbmFsLAorCQkJCQkgICBhbmQgRDMgYmVpbmcgb2ZmLiAqLworCisJc3RydWN0CWRldmljZQlkZXY7CQkvKiBHZW5lcmljIGRldmljZSBpbnRlcmZhY2UgKi8KKworCS8qIGRldmljZSBpcyBjb21wYXRpYmxlIHdpdGggdGhlc2UgSURzICovCisJdW5zaWduZWQgc2hvcnQgdmVuZG9yX2NvbXBhdGlibGVbREVWSUNFX0NPVU5UX0NPTVBBVElCTEVdOworCXVuc2lnbmVkIHNob3J0IGRldmljZV9jb21wYXRpYmxlW0RFVklDRV9DT1VOVF9DT01QQVRJQkxFXTsKKworCWludAkJY2ZnX3NpemU7CS8qIFNpemUgb2YgY29uZmlndXJhdGlvbiBzcGFjZSAqLworCisJLyoKKwkgKiBJbnN0ZWFkIG9mIHRvdWNoaW5nIGludGVycnVwdCBsaW5lIGFuZCBiYXNlIGFkZHJlc3MgcmVnaXN0ZXJzCisJICogZGlyZWN0bHksIHVzZSB0aGUgdmFsdWVzIHN0b3JlZCBoZXJlLiBUaGV5IG1pZ2h0IGJlIGRpZmZlcmVudCEKKwkgKi8KKwl1bnNpZ25lZCBpbnQJaXJxOworCXN0cnVjdCByZXNvdXJjZSByZXNvdXJjZVtERVZJQ0VfQ09VTlRfUkVTT1VSQ0VdOyAvKiBJL08gYW5kIG1lbW9yeSByZWdpb25zICsgZXhwYW5zaW9uIFJPTXMgKi8KKworCS8qIFRoZXNlIGZpZWxkcyBhcmUgdXNlZCBieSBjb21tb24gZml4dXBzICovCisJdW5zaWduZWQgaW50CXRyYW5zcGFyZW50OjE7CS8qIFRyYW5zcGFyZW50IFBDSSBicmlkZ2UgKi8KKwl1bnNpZ25lZCBpbnQJbXVsdGlmdW5jdGlvbjoxOy8qIFBhcnQgb2YgbXVsdGktZnVuY3Rpb24gZGV2aWNlICovCisJLyoga2VlcCB0cmFjayBvZiBkZXZpY2Ugc3RhdGUgKi8KKwl1bnNpZ25lZCBpbnQJaXNfZW5hYmxlZDoxOwkvKiBwY2lfZW5hYmxlX2RldmljZSBoYXMgYmVlbiBjYWxsZWQgKi8KKwl1bnNpZ25lZCBpbnQJaXNfYnVzbWFzdGVyOjE7IC8qIGRldmljZSBpcyBidXNtYXN0ZXIgKi8KKwkKKwl1MzIJCXNhdmVkX2NvbmZpZ19zcGFjZVsxNl07IC8qIGNvbmZpZyBzcGFjZSBzYXZlZCBhdCBzdXNwZW5kIHRpbWUgKi8KKwlzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqcm9tX2F0dHI7IC8qIGF0dHJpYnV0ZSBkZXNjcmlwdG9yIGZvciBzeXNmcyBST00gZW50cnkgKi8KKwlpbnQgcm9tX2F0dHJfZW5hYmxlZDsJCS8qIGhhcyBkaXNwbGF5IG9mIHRoZSByb20gYXR0cmlidXRlIGJlZW4gZW5hYmxlZD8gKi8KKwlzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqcmVzX2F0dHJbREVWSUNFX0NPVU5UX1JFU09VUkNFXTsgLyogc3lzZnMgZmlsZSBmb3IgcmVzb3VyY2VzICovCisjaWZkZWYgQ09ORklHX1BDSV9OQU1FUworI2RlZmluZSBQQ0lfTkFNRV9TSVpFCTI1NQorI2RlZmluZSBQQ0lfTkFNRV9IQUxGCV9fc3RyaW5naWZ5KDQzKQkvKiBsZXNzIHRoYW4gaGFsZiB0byBoYW5kbGUgc2xvcCAqLworCWNoYXIJCXByZXR0eV9uYW1lW1BDSV9OQU1FX1NJWkVdOwkvKiBwcmV0dHkgbmFtZSBmb3IgdXNlcnMgdG8gc2VlICovCisjZW5kaWYKK307CisKKyNkZWZpbmUgcGNpX2Rldl9nKG4pIGxpc3RfZW50cnkobiwgc3RydWN0IHBjaV9kZXYsIGdsb2JhbF9saXN0KQorI2RlZmluZSBwY2lfZGV2X2IobikgbGlzdF9lbnRyeShuLCBzdHJ1Y3QgcGNpX2RldiwgYnVzX2xpc3QpCisjZGVmaW5lCXRvX3BjaV9kZXYobikgY29udGFpbmVyX29mKG4sIHN0cnVjdCBwY2lfZGV2LCBkZXYpCisjZGVmaW5lIGZvcl9lYWNoX3BjaV9kZXYoZCkgd2hpbGUgKChkID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgZCkpICE9IE5VTEwpCisKKy8qCisgKiAgRm9yIFBDSSBkZXZpY2VzLCB0aGUgcmVnaW9uIG51bWJlcnMgYXJlIGFzc2lnbmVkIHRoaXMgd2F5OgorICoKKyAqCTAtNQlzdGFuZGFyZCBQQ0kgcmVnaW9ucworICoJNglleHBhbnNpb24gUk9NCisgKgk3LTEwCWJyaWRnZXM6IGFkZHJlc3Mgc3BhY2UgYXNzaWduZWQgdG8gYnVzZXMgYmVoaW5kIHRoZSBicmlkZ2UKKyAqLworCisjZGVmaW5lIFBDSV9ST01fUkVTT1VSQ0UgNgorI2RlZmluZSBQQ0lfQlJJREdFX1JFU09VUkNFUyA3CisjZGVmaW5lIFBDSV9OVU1fUkVTT1VSQ0VTIDExCisKKyNpZm5kZWYgUENJX0JVU19OVU1fUkVTT1VSQ0VTCisjZGVmaW5lIFBDSV9CVVNfTlVNX1JFU09VUkNFUyA0CisjZW5kaWYKKyAgCisjZGVmaW5lIFBDSV9SRUdJT05fRkxBR19NQVNLIDB4MGZVCS8qIFRoZXNlIGJpdHMgb2YgcmVzb3VyY2UgZmxhZ3MgdGVsbCB1cyB0aGUgUENJIHJlZ2lvbiBmbGFncyAqLworCitzdHJ1Y3QgcGNpX2J1cyB7CisJc3RydWN0IGxpc3RfaGVhZCBub2RlOwkJLyogbm9kZSBpbiBsaXN0IG9mIGJ1c2VzICovCisJc3RydWN0IHBjaV9idXMJKnBhcmVudDsJLyogcGFyZW50IGJ1cyB0aGlzIGJyaWRnZSBpcyBvbiAqLworCXN0cnVjdCBsaXN0X2hlYWQgY2hpbGRyZW47CS8qIGxpc3Qgb2YgY2hpbGQgYnVzZXMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGRldmljZXM7CS8qIGxpc3Qgb2YgZGV2aWNlcyBvbiB0aGlzIGJ1cyAqLworCXN0cnVjdCBwY2lfZGV2CSpzZWxmOwkJLyogYnJpZGdlIGRldmljZSBhcyBzZWVuIGJ5IHBhcmVudCAqLworCXN0cnVjdCByZXNvdXJjZQkqcmVzb3VyY2VbUENJX0JVU19OVU1fUkVTT1VSQ0VTXTsKKwkJCQkJLyogYWRkcmVzcyBzcGFjZSByb3V0ZWQgdG8gdGhpcyBidXMgKi8KKworCXN0cnVjdCBwY2lfb3BzCSpvcHM7CQkvKiBjb25maWd1cmF0aW9uIGFjY2VzcyBmdW5jdGlvbnMgKi8KKwl2b2lkCQkqc3lzZGF0YTsJLyogaG9vayBmb3Igc3lzLXNwZWNpZmljIGV4dGVuc2lvbiAqLworCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY2RpcjsJLyogZGlyZWN0b3J5IGVudHJ5IGluIC9wcm9jL2J1cy9wY2kgKi8KKworCXVuc2lnbmVkIGNoYXIJbnVtYmVyOwkJLyogYnVzIG51bWJlciAqLworCXVuc2lnbmVkIGNoYXIJcHJpbWFyeTsJLyogbnVtYmVyIG9mIHByaW1hcnkgYnJpZGdlICovCisJdW5zaWduZWQgY2hhcglzZWNvbmRhcnk7CS8qIG51bWJlciBvZiBzZWNvbmRhcnkgYnJpZGdlICovCisJdW5zaWduZWQgY2hhcglzdWJvcmRpbmF0ZTsJLyogbWF4IG51bWJlciBvZiBzdWJvcmRpbmF0ZSBidXNlcyAqLworCisJY2hhcgkJbmFtZVs0OF07CisKKwl1bnNpZ25lZCBzaG9ydCAgYnJpZGdlX2N0bDsJLyogbWFuYWdlIE5PX0lTQS9GQkIvZXQgYWwgYmVoYXZpb3JzICovCisJdW5zaWduZWQgc2hvcnQgIHBhZDI7CisJc3RydWN0IGRldmljZQkJKmJyaWRnZTsKKwlzdHJ1Y3QgY2xhc3NfZGV2aWNlCWNsYXNzX2RldjsKKwlzdHJ1Y3QgYmluX2F0dHJpYnV0ZQkqbGVnYWN5X2lvOyAvKiBsZWdhY3kgSS9PIGZvciB0aGlzIGJ1cyAqLworCXN0cnVjdCBiaW5fYXR0cmlidXRlCSpsZWdhY3lfbWVtOyAvKiBsZWdhY3kgbWVtICovCit9OworCisjZGVmaW5lIHBjaV9idXNfYihuKQlsaXN0X2VudHJ5KG4sIHN0cnVjdCBwY2lfYnVzLCBub2RlKQorI2RlZmluZSB0b19wY2lfYnVzKG4pCWNvbnRhaW5lcl9vZihuLCBzdHJ1Y3QgcGNpX2J1cywgY2xhc3NfZGV2KQorCisvKgorICogRXJyb3IgdmFsdWVzIHRoYXQgbWF5IGJlIHJldHVybmVkIGJ5IFBDSSBmdW5jdGlvbnMuCisgKi8KKyNkZWZpbmUgUENJQklPU19TVUNDRVNTRlVMCQkweDAwCisjZGVmaW5lIFBDSUJJT1NfRlVOQ19OT1RfU1VQUE9SVEVECTB4ODEKKyNkZWZpbmUgUENJQklPU19CQURfVkVORE9SX0lECQkweDgzCisjZGVmaW5lIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORAkweDg2CisjZGVmaW5lIFBDSUJJT1NfQkFEX1JFR0lTVEVSX05VTUJFUgkweDg3CisjZGVmaW5lIFBDSUJJT1NfU0VUX0ZBSUxFRAkJMHg4OAorI2RlZmluZSBQQ0lCSU9TX0JVRkZFUl9UT09fU01BTEwJMHg4OQorCisvKiBMb3ctbGV2ZWwgYXJjaGl0ZWN0dXJlLWRlcGVuZGVudCByb3V0aW5lcyAqLworCitzdHJ1Y3QgcGNpX29wcyB7CisJaW50ICgqcmVhZCkoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLCBpbnQgd2hlcmUsIGludCBzaXplLCB1MzIgKnZhbCk7CisJaW50ICgqd3JpdGUpKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwgaW50IHdoZXJlLCBpbnQgc2l6ZSwgdTMyIHZhbCk7Cit9OworCitzdHJ1Y3QgcGNpX3Jhd19vcHMgeworCWludCAoKnJlYWQpKHVuc2lnbmVkIGludCBkb21haW4sIHVuc2lnbmVkIGludCBidXMsIHVuc2lnbmVkIGludCBkZXZmbiwKKwkJICAgIGludCByZWcsIGludCBsZW4sIHUzMiAqdmFsKTsKKwlpbnQgKCp3cml0ZSkodW5zaWduZWQgaW50IGRvbWFpbiwgdW5zaWduZWQgaW50IGJ1cywgdW5zaWduZWQgaW50IGRldmZuLAorCQkgICAgIGludCByZWcsIGludCBsZW4sIHUzMiB2YWwpOworfTsKKworZXh0ZXJuIHN0cnVjdCBwY2lfcmF3X29wcyAqcmF3X3BjaV9vcHM7CisKK3N0cnVjdCBwY2lfYnVzX3JlZ2lvbiB7CisJdW5zaWduZWQgbG9uZyBzdGFydDsKKwl1bnNpZ25lZCBsb25nIGVuZDsKK307CisKK3N0cnVjdCBwY2lfZHluaWRzIHsKKwlzcGlubG9ja190IGxvY2s7ICAgICAgICAgICAgLyogcHJvdGVjdHMgbGlzdCwgaW5kZXggKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7ICAgICAgLyogZm9yIElEcyBhZGRlZCBhdCBydW50aW1lICovCisJdW5zaWduZWQgaW50IHVzZV9kcml2ZXJfZGF0YToxOyAvKiBwY2lfZHJpdmVyLT5kcml2ZXJfZGF0YSBpcyB1c2VkICovCit9OworCitzdHJ1Y3QgbW9kdWxlOworc3RydWN0IHBjaV9kcml2ZXIgeworCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKKwljaGFyICpuYW1lOworCXN0cnVjdCBtb2R1bGUgKm93bmVyOworCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZF90YWJsZTsJLyogbXVzdCBiZSBub24tTlVMTCBmb3IgcHJvYmUgdG8gYmUgY2FsbGVkICovCisJaW50ICAoKnByb2JlKSAgKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCk7CS8qIE5ldyBkZXZpY2UgaW5zZXJ0ZWQgKi8KKwl2b2lkICgqcmVtb3ZlKSAoc3RydWN0IHBjaV9kZXYgKmRldik7CS8qIERldmljZSByZW1vdmVkIChOVUxMIGlmIG5vdCBhIGhvdC1wbHVnIGNhcGFibGUgZHJpdmVyKSAqLworCWludCAgKCpzdXNwZW5kKSAoc3RydWN0IHBjaV9kZXYgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKTsJLyogRGV2aWNlIHN1c3BlbmRlZCAqLworCWludCAgKCpyZXN1bWUpIChzdHJ1Y3QgcGNpX2RldiAqZGV2KTsJICAgICAgICAgICAgICAgIC8qIERldmljZSB3b2tlbiB1cCAqLworCWludCAgKCplbmFibGVfd2FrZSkgKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHUzMiBzdGF0ZSwgaW50IGVuYWJsZSk7ICAgLyogRW5hYmxlIHdha2UgZXZlbnQgKi8KKworCXN0cnVjdCBkZXZpY2VfZHJpdmVyCWRyaXZlcjsKKwlzdHJ1Y3QgcGNpX2R5bmlkcyBkeW5pZHM7Cit9OworCisjZGVmaW5lCXRvX3BjaV9kcml2ZXIoZHJ2KSBjb250YWluZXJfb2YoZHJ2LHN0cnVjdCBwY2lfZHJpdmVyLCBkcml2ZXIpCisKKy8qKgorICogUENJX0RFVklDRSAtIG1hY3JvIHVzZWQgdG8gZGVzY3JpYmUgYSBzcGVjaWZpYyBwY2kgZGV2aWNlCisgKiBAdmVuZDogdGhlIDE2IGJpdCBQQ0kgVmVuZG9yIElECisgKiBAZGV2OiB0aGUgMTYgYml0IFBDSSBEZXZpY2UgSUQKKyAqCisgKiBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gY3JlYXRlIGEgc3RydWN0IHBjaV9kZXZpY2VfaWQgdGhhdCBtYXRjaGVzIGEKKyAqIHNwZWNpZmljIGRldmljZS4gIFRoZSBzdWJ2ZW5kb3IgYW5kIHN1YmRldmljZSBmaWVsZHMgd2lsbCBiZSBzZXQgdG8KKyAqIFBDSV9BTllfSUQuCisgKi8KKyNkZWZpbmUgUENJX0RFVklDRSh2ZW5kLGRldikgXAorCS52ZW5kb3IgPSAodmVuZCksIC5kZXZpY2UgPSAoZGV2KSwgXAorCS5zdWJ2ZW5kb3IgPSBQQ0lfQU5ZX0lELCAuc3ViZGV2aWNlID0gUENJX0FOWV9JRAorCisvKioKKyAqIFBDSV9ERVZJQ0VfQ0xBU1MgLSBtYWNybyB1c2VkIHRvIGRlc2NyaWJlIGEgc3BlY2lmaWMgcGNpIGRldmljZSBjbGFzcworICogQGRldl9jbGFzczogdGhlIGNsYXNzLCBzdWJjbGFzcywgcHJvZy1pZiB0cmlwbGUgZm9yIHRoaXMgZGV2aWNlCisgKiBAZGV2X2NsYXNzX21hc2s6IHRoZSBjbGFzcyBtYXNrIGZvciB0aGlzIGRldmljZQorICoKKyAqIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBjcmVhdGUgYSBzdHJ1Y3QgcGNpX2RldmljZV9pZCB0aGF0IG1hdGNoZXMgYQorICogc3BlY2lmaWMgUENJIGNsYXNzLiAgVGhlIHZlbmRvciwgZGV2aWNlLCBzdWJ2ZW5kb3IsIGFuZCBzdWJkZXZpY2UgCisgKiBmaWVsZHMgd2lsbCBiZSBzZXQgdG8gUENJX0FOWV9JRC4KKyAqLworI2RlZmluZSBQQ0lfREVWSUNFX0NMQVNTKGRldl9jbGFzcyxkZXZfY2xhc3NfbWFzaykgXAorCS5jbGFzcyA9IChkZXZfY2xhc3MpLCAuY2xhc3NfbWFzayA9IChkZXZfY2xhc3NfbWFzayksIFwKKwkudmVuZG9yID0gUENJX0FOWV9JRCwgLmRldmljZSA9IFBDSV9BTllfSUQsIFwKKwkuc3VidmVuZG9yID0gUENJX0FOWV9JRCwgLnN1YmRldmljZSA9IFBDSV9BTllfSUQKKworLyogCisgKiBwY2lfbW9kdWxlX2luaXQgaXMgb2Jzb2xldGUsIHRoaXMgc3RheXMgaGVyZSB0aWxsIHdlIGZpeCB1cCBhbGwgdXNhZ2VzIG9mIGl0CisgKiBpbiB0aGUgdHJlZS4KKyAqLworI2RlZmluZSBwY2lfbW9kdWxlX2luaXQJcGNpX3JlZ2lzdGVyX2RyaXZlcgorCisvKiB0aGVzZSBleHRlcm5hbCBmdW5jdGlvbnMgYXJlIG9ubHkgYXZhaWxhYmxlIHdoZW4gUENJIHN1cHBvcnQgaXMgZW5hYmxlZCAqLworI2lmZGVmIENPTkZJR19QQ0kKKworZXh0ZXJuIHN0cnVjdCBidXNfdHlwZSBwY2lfYnVzX3R5cGU7CisKKy8qIERvIE5PVCBkaXJlY3RseSBhY2Nlc3MgdGhlc2UgdHdvIHZhcmlhYmxlcywgdW5sZXNzIHlvdSBhcmUgYXJjaCBzcGVjaWZpYyBwY2kKKyAqIGNvZGUsIG9yIHBjaSBjb3JlIGNvZGUuICovCitleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBwY2lfcm9vdF9idXNlczsJLyogbGlzdCBvZiBhbGwga25vd24gUENJIGJ1c2VzICovCitleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBwY2lfZGV2aWNlczsJLyogbGlzdCBvZiBhbGwgZGV2aWNlcyAqLworCit2b2lkIHBjaWJpb3NfZml4dXBfYnVzKHN0cnVjdCBwY2lfYnVzICopOworaW50IHBjaWJpb3NfZW5hYmxlX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqLCBpbnQgbWFzayk7CitjaGFyICpwY2liaW9zX3NldHVwIChjaGFyICpzdHIpOworCisvKiBVc2VkIG9ubHkgd2hlbiBkcml2ZXJzL3BjaS9zZXR1cC5jIGlzIHVzZWQgKi8KK3ZvaWQgcGNpYmlvc19hbGlnbl9yZXNvdXJjZSh2b2lkICosIHN0cnVjdCByZXNvdXJjZSAqLAorCQkJICAgIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwordm9pZCBwY2liaW9zX3VwZGF0ZV9pcnEoc3RydWN0IHBjaV9kZXYgKiwgaW50IGlycSk7CisKKy8qIEdlbmVyaWMgUENJIGZ1bmN0aW9ucyB1c2VkIGludGVybmFsbHkgKi8KKworZXh0ZXJuIHN0cnVjdCBwY2lfYnVzICpwY2lfZmluZF9idXMoaW50IGRvbWFpbiwgaW50IGJ1c25yKTsKK3N0cnVjdCBwY2lfYnVzICpwY2lfc2Nhbl9idXNfcGFyZW50ZWQoc3RydWN0IGRldmljZSAqcGFyZW50LCBpbnQgYnVzLCBzdHJ1Y3QgcGNpX29wcyAqb3BzLCB2b2lkICpzeXNkYXRhKTsKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBjaV9idXMgKnBjaV9zY2FuX2J1cyhpbnQgYnVzLCBzdHJ1Y3QgcGNpX29wcyAqb3BzLCB2b2lkICpzeXNkYXRhKQoreworCXJldHVybiBwY2lfc2Nhbl9idXNfcGFyZW50ZWQoTlVMTCwgYnVzLCBvcHMsIHN5c2RhdGEpOworfQoraW50IHBjaV9zY2FuX3Nsb3Qoc3RydWN0IHBjaV9idXMgKmJ1cywgaW50IGRldmZuKTsKK3N0cnVjdCBwY2lfZGV2ICogcGNpX3NjYW5fc2luZ2xlX2RldmljZShzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBpbnQgZGV2Zm4pOwordW5zaWduZWQgaW50IHBjaV9zY2FuX2NoaWxkX2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKTsKK3ZvaWQgcGNpX2J1c19hZGRfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwordm9pZCBwY2lfYnVzX2FkZF9kZXZpY2VzKHN0cnVjdCBwY2lfYnVzICpidXMpOwordm9pZCBwY2lfbmFtZV9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldik7CitjaGFyICpwY2lfY2xhc3NfbmFtZSh1MzIgY2xhc3MpOwordm9pZCBwY2lfcmVhZF9icmlkZ2VfYmFzZXMoc3RydWN0IHBjaV9idXMgKmNoaWxkKTsKK3N0cnVjdCByZXNvdXJjZSAqcGNpX2ZpbmRfcGFyZW50X3Jlc291cmNlKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCByZXNvdXJjZSAqcmVzKTsKK2ludCBwY2lfZ2V0X2ludGVycnVwdF9waW4oc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IHBjaV9kZXYgKipicmlkZ2UpOworZXh0ZXJuIHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2X2dldChzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKK2V4dGVybiB2b2lkIHBjaV9kZXZfcHV0KHN0cnVjdCBwY2lfZGV2ICpkZXYpOworZXh0ZXJuIHZvaWQgcGNpX3JlbW92ZV9idXMoc3RydWN0IHBjaV9idXMgKmIpOworZXh0ZXJuIHZvaWQgcGNpX3JlbW92ZV9idXNfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpOworCisvKiBHZW5lcmljIFBDSSBmdW5jdGlvbnMgZXhwb3J0ZWQgdG8gY2FyZCBkcml2ZXJzICovCisKK3N0cnVjdCBwY2lfZGV2ICpwY2lfZmluZF9kZXZpY2UgKHVuc2lnbmVkIGludCB2ZW5kb3IsIHVuc2lnbmVkIGludCBkZXZpY2UsIGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpmcm9tKTsKK3N0cnVjdCBwY2lfZGV2ICpwY2lfZmluZF9kZXZpY2VfcmV2ZXJzZSAodW5zaWduZWQgaW50IHZlbmRvciwgdW5zaWduZWQgaW50IGRldmljZSwgY29uc3Qgc3RydWN0IHBjaV9kZXYgKmZyb20pOworc3RydWN0IHBjaV9kZXYgKnBjaV9maW5kX3Nsb3QgKHVuc2lnbmVkIGludCBidXMsIHVuc2lnbmVkIGludCBkZXZmbik7CitpbnQgcGNpX2ZpbmRfY2FwYWJpbGl0eSAoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGNhcCk7CitpbnQgcGNpX2ZpbmRfZXh0X2NhcGFiaWxpdHkgKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBjYXApOworc3RydWN0IHBjaV9idXMgKiBwY2lfZmluZF9uZXh0X2J1cyhjb25zdCBzdHJ1Y3QgcGNpX2J1cyAqZnJvbSk7CisKK3N0cnVjdCBwY2lfZGV2ICpwY2lfZ2V0X2RldmljZSAodW5zaWduZWQgaW50IHZlbmRvciwgdW5zaWduZWQgaW50IGRldmljZSwgc3RydWN0IHBjaV9kZXYgKmZyb20pOworc3RydWN0IHBjaV9kZXYgKnBjaV9nZXRfc3Vic3lzICh1bnNpZ25lZCBpbnQgdmVuZG9yLCB1bnNpZ25lZCBpbnQgZGV2aWNlLAorCQkJCXVuc2lnbmVkIGludCBzc192ZW5kb3IsIHVuc2lnbmVkIGludCBzc19kZXZpY2UsCisJCQkJc3RydWN0IHBjaV9kZXYgKmZyb20pOworc3RydWN0IHBjaV9kZXYgKnBjaV9nZXRfc2xvdCAoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuKTsKK3N0cnVjdCBwY2lfZGV2ICpwY2lfZ2V0X2NsYXNzICh1bnNpZ25lZCBpbnQgY2xhc3MsIHN0cnVjdCBwY2lfZGV2ICpmcm9tKTsKK2ludCBwY2lfZGV2X3ByZXNlbnQoY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkcyk7CisKK2ludCBwY2lfYnVzX3JlYWRfY29uZmlnX2J5dGUgKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwgaW50IHdoZXJlLCB1OCAqdmFsKTsKK2ludCBwY2lfYnVzX3JlYWRfY29uZmlnX3dvcmQgKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwgaW50IHdoZXJlLCB1MTYgKnZhbCk7CitpbnQgcGNpX2J1c19yZWFkX2NvbmZpZ19kd29yZCAoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLCBpbnQgd2hlcmUsIHUzMiAqdmFsKTsKK2ludCBwY2lfYnVzX3dyaXRlX2NvbmZpZ19ieXRlIChzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sIGludCB3aGVyZSwgdTggdmFsKTsKK2ludCBwY2lfYnVzX3dyaXRlX2NvbmZpZ193b3JkIChzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sIGludCB3aGVyZSwgdTE2IHZhbCk7CitpbnQgcGNpX2J1c193cml0ZV9jb25maWdfZHdvcmQgKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwgaW50IHdoZXJlLCB1MzIgdmFsKTsKKworc3RhdGljIGlubGluZSBpbnQgcGNpX3JlYWRfY29uZmlnX2J5dGUoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHdoZXJlLCB1OCAqdmFsKQoreworCXJldHVybiBwY2lfYnVzX3JlYWRfY29uZmlnX2J5dGUgKGRldi0+YnVzLCBkZXYtPmRldmZuLCB3aGVyZSwgdmFsKTsKK30KK3N0YXRpYyBpbmxpbmUgaW50IHBjaV9yZWFkX2NvbmZpZ193b3JkKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCB3aGVyZSwgdTE2ICp2YWwpCit7CisJcmV0dXJuIHBjaV9idXNfcmVhZF9jb25maWdfd29yZCAoZGV2LT5idXMsIGRldi0+ZGV2Zm4sIHdoZXJlLCB2YWwpOworfQorc3RhdGljIGlubGluZSBpbnQgcGNpX3JlYWRfY29uZmlnX2R3b3JkKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCB3aGVyZSwgdTMyICp2YWwpCit7CisJcmV0dXJuIHBjaV9idXNfcmVhZF9jb25maWdfZHdvcmQgKGRldi0+YnVzLCBkZXYtPmRldmZuLCB3aGVyZSwgdmFsKTsKK30KK3N0YXRpYyBpbmxpbmUgaW50IHBjaV93cml0ZV9jb25maWdfYnl0ZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgd2hlcmUsIHU4IHZhbCkKK3sKKwlyZXR1cm4gcGNpX2J1c193cml0ZV9jb25maWdfYnl0ZSAoZGV2LT5idXMsIGRldi0+ZGV2Zm4sIHdoZXJlLCB2YWwpOworfQorc3RhdGljIGlubGluZSBpbnQgcGNpX3dyaXRlX2NvbmZpZ193b3JkKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCB3aGVyZSwgdTE2IHZhbCkKK3sKKwlyZXR1cm4gcGNpX2J1c193cml0ZV9jb25maWdfd29yZCAoZGV2LT5idXMsIGRldi0+ZGV2Zm4sIHdoZXJlLCB2YWwpOworfQorc3RhdGljIGlubGluZSBpbnQgcGNpX3dyaXRlX2NvbmZpZ19kd29yZChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgd2hlcmUsIHUzMiB2YWwpCit7CisJcmV0dXJuIHBjaV9idXNfd3JpdGVfY29uZmlnX2R3b3JkIChkZXYtPmJ1cywgZGV2LT5kZXZmbiwgd2hlcmUsIHZhbCk7Cit9CisKK2ludCBwY2lfZW5hYmxlX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKK2ludCBwY2lfZW5hYmxlX2RldmljZV9iYXJzKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBtYXNrKTsKK3ZvaWQgcGNpX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwordm9pZCBwY2lfc2V0X21hc3RlcihzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKKyNkZWZpbmUgSEFWRV9QQ0lfU0VUX01XSQoraW50IHBjaV9zZXRfbXdpKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwordm9pZCBwY2lfY2xlYXJfbXdpKHN0cnVjdCBwY2lfZGV2ICpkZXYpOworaW50IHBjaV9zZXRfZG1hX21hc2soc3RydWN0IHBjaV9kZXYgKmRldiwgdTY0IG1hc2spOworaW50IHBjaV9kYWNfc2V0X2RtYV9tYXNrKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU2NCBtYXNrKTsKK2ludCBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2soc3RydWN0IHBjaV9kZXYgKmRldiwgdTY0IG1hc2spOworaW50IHBjaV9hc3NpZ25fcmVzb3VyY2Uoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGkpOworCisvKiBST00gY29udHJvbCByZWxhdGVkIHJvdXRpbmVzICovCit2b2lkIF9faW9tZW0gKnBjaV9tYXBfcm9tKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzaXplX3QgKnNpemUpOwordm9pZCBfX2lvbWVtICpwY2lfbWFwX3JvbV9jb3B5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzaXplX3QgKnNpemUpOwordm9pZCBwY2lfdW5tYXBfcm9tKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB2b2lkIF9faW9tZW0gKnJvbSk7Cit2b2lkIHBjaV9yZW1vdmVfcm9tKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKKworLyogUG93ZXIgbWFuYWdlbWVudCByZWxhdGVkIHJvdXRpbmVzICovCitpbnQgcGNpX3NhdmVfc3RhdGUoc3RydWN0IHBjaV9kZXYgKmRldik7CitpbnQgcGNpX3Jlc3RvcmVfc3RhdGUoc3RydWN0IHBjaV9kZXYgKmRldik7CitpbnQgcGNpX3NldF9wb3dlcl9zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBwY2lfcG93ZXJfdCBzdGF0ZSk7CitwY2lfcG93ZXJfdCBwY2lfY2hvb3NlX3N0YXRlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSk7CitpbnQgcGNpX2VuYWJsZV93YWtlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHBjaV9wb3dlcl90IHN0YXRlLCBpbnQgZW5hYmxlKTsKKworLyogSGVscGVyIGZ1bmN0aW9ucyBmb3IgbG93LWxldmVsIGNvZGUgKGRyaXZlcnMvcGNpL3NldHVwLVtidXMscmVzXS5jKSAqLwordm9pZCBwY2lfYnVzX2Fzc2lnbl9yZXNvdXJjZXMoc3RydWN0IHBjaV9idXMgKmJ1cyk7Cit2b2lkIHBjaV9idXNfc2l6ZV9icmlkZ2VzKHN0cnVjdCBwY2lfYnVzICpidXMpOworaW50IHBjaV9jbGFpbV9yZXNvdXJjZShzdHJ1Y3QgcGNpX2RldiAqLCBpbnQpOwordm9pZCBwY2lfYXNzaWduX3VuYXNzaWduZWRfcmVzb3VyY2VzKHZvaWQpOwordm9pZCBwZGV2X2VuYWJsZV9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKik7Cit2b2lkIHBkZXZfc29ydF9yZXNvdXJjZXMoc3RydWN0IHBjaV9kZXYgKiwgc3RydWN0IHJlc291cmNlX2xpc3QgKik7Cit2b2lkIHBjaV9maXh1cF9pcnFzKHU4ICgqKShzdHJ1Y3QgcGNpX2RldiAqLCB1OCAqKSwKKwkJICAgIGludCAoKikoc3RydWN0IHBjaV9kZXYgKiwgdTgsIHU4KSk7CisjZGVmaW5lIEhBVkVfUENJX1JFUV9SRUdJT05TCTIKK2ludCBwY2lfcmVxdWVzdF9yZWdpb25zKHN0cnVjdCBwY2lfZGV2ICosIGNoYXIgKik7Cit2b2lkIHBjaV9yZWxlYXNlX3JlZ2lvbnMoc3RydWN0IHBjaV9kZXYgKik7CitpbnQgcGNpX3JlcXVlc3RfcmVnaW9uKHN0cnVjdCBwY2lfZGV2ICosIGludCwgY2hhciAqKTsKK3ZvaWQgcGNpX3JlbGVhc2VfcmVnaW9uKHN0cnVjdCBwY2lfZGV2ICosIGludCk7CisKKy8qIGRyaXZlcnMvcGNpL2J1cy5jICovCitpbnQgcGNpX2J1c19hbGxvY19yZXNvdXJjZShzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKKwkJCSAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBhbGlnbiwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgbWluLCB1bnNpZ25lZCBpbnQgdHlwZV9tYXNrLAorCQkJICAgdm9pZCAoKmFsaWduZikodm9pZCAqLCBzdHJ1Y3QgcmVzb3VyY2UgKiwKKwkJCQkJICB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKSwKKwkJCSAgIHZvaWQgKmFsaWduZl9kYXRhKTsKK3ZvaWQgcGNpX2VuYWJsZV9icmlkZ2VzKHN0cnVjdCBwY2lfYnVzICpidXMpOworCisvKiBOZXctc3R5bGUgcHJvYmluZyBzdXBwb3J0aW5nIGhvdC1wbHVnZ2FibGUgZGV2aWNlcyAqLworaW50IHBjaV9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHBjaV9kcml2ZXIgKik7Cit2b2lkIHBjaV91bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgcGNpX2RyaXZlciAqKTsKK3ZvaWQgcGNpX3JlbW92ZV9iZWhpbmRfYnJpZGdlKHN0cnVjdCBwY2lfZGV2ICopOworc3RydWN0IHBjaV9kcml2ZXIgKnBjaV9kZXZfZHJpdmVyKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICopOworY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9tYXRjaF9kZXZpY2UoY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkcywgY29uc3Qgc3RydWN0IHBjaV9kZXYgKmRldik7CitpbnQgcGNpX3NjYW5fYnJpZGdlKHN0cnVjdCBwY2lfYnVzICpidXMsIHN0cnVjdCBwY2lfZGV2ICogZGV2LCBpbnQgbWF4LCBpbnQgcGFzcyk7CisKKy8qIGttZW1fY2FjaGUgc3R5bGUgd3JhcHBlciBhcm91bmQgcGNpX2FsbG9jX2NvbnNpc3RlbnQoKSAqLworCisjaW5jbHVkZSA8bGludXgvZG1hcG9vbC5oPgorCisjZGVmaW5lCXBjaV9wb29sIGRtYV9wb29sCisjZGVmaW5lIHBjaV9wb29sX2NyZWF0ZShuYW1lLCBwZGV2LCBzaXplLCBhbGlnbiwgYWxsb2NhdGlvbikgXAorCQlkbWFfcG9vbF9jcmVhdGUobmFtZSwgJnBkZXYtPmRldiwgc2l6ZSwgYWxpZ24sIGFsbG9jYXRpb24pCisjZGVmaW5lCXBjaV9wb29sX2Rlc3Ryb3kocG9vbCkgZG1hX3Bvb2xfZGVzdHJveShwb29sKQorI2RlZmluZQlwY2lfcG9vbF9hbGxvYyhwb29sLCBmbGFncywgaGFuZGxlKSBkbWFfcG9vbF9hbGxvYyhwb29sLCBmbGFncywgaGFuZGxlKQorI2RlZmluZQlwY2lfcG9vbF9mcmVlKHBvb2wsIHZhZGRyLCBhZGRyKSBkbWFfcG9vbF9mcmVlKHBvb2wsIHZhZGRyLCBhZGRyKQorCisjaWYgZGVmaW5lZChDT05GSUdfSVNBKSB8fCBkZWZpbmVkKENPTkZJR19FSVNBKQorZXh0ZXJuIHN0cnVjdCBwY2lfZGV2ICppc2FfYnJpZGdlOworI2VuZGlmCisKK3N0cnVjdCBtc2l4X2VudHJ5IHsKKwl1MTYgCXZlY3RvcjsJLyoga2VybmVsIHVzZXMgdG8gd3JpdGUgYWxsb2NhdGVkIHZlY3RvciAqLworCXUxNgllbnRyeTsJLyogZHJpdmVyIHVzZXMgdG8gc3BlY2lmeSBlbnRyeSwgT1Mgd3JpdGVzICovCit9OworCisjaWZuZGVmIENPTkZJR19QQ0lfTVNJCitzdGF0aWMgaW5saW5lIHZvaWQgcGNpX3NjYW5fbXNpX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KSB7fQorc3RhdGljIGlubGluZSBpbnQgcGNpX2VuYWJsZV9tc2koc3RydWN0IHBjaV9kZXYgKmRldikge3JldHVybiAtMTt9CitzdGF0aWMgaW5saW5lIHZvaWQgcGNpX2Rpc2FibGVfbXNpKHN0cnVjdCBwY2lfZGV2ICpkZXYpIHt9CitzdGF0aWMgaW5saW5lIGludCBwY2lfZW5hYmxlX21zaXgoc3RydWN0IHBjaV9kZXYqIGRldiwKKwlzdHJ1Y3QgbXNpeF9lbnRyeSAqZW50cmllcywgaW50IG52ZWMpIHtyZXR1cm4gLTE7fQorc3RhdGljIGlubGluZSB2b2lkIHBjaV9kaXNhYmxlX21zaXgoc3RydWN0IHBjaV9kZXYgKmRldikge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBtc2lfcmVtb3ZlX3BjaV9pcnFfdmVjdG9ycyhzdHJ1Y3QgcGNpX2RldiAqZGV2KSB7fQorI2Vsc2UKK2V4dGVybiB2b2lkIHBjaV9zY2FuX21zaV9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldik7CitleHRlcm4gaW50IHBjaV9lbmFibGVfbXNpKHN0cnVjdCBwY2lfZGV2ICpkZXYpOworZXh0ZXJuIHZvaWQgcGNpX2Rpc2FibGVfbXNpKHN0cnVjdCBwY2lfZGV2ICpkZXYpOworZXh0ZXJuIGludCBwY2lfZW5hYmxlX21zaXgoc3RydWN0IHBjaV9kZXYqIGRldiwKKwlzdHJ1Y3QgbXNpeF9lbnRyeSAqZW50cmllcywgaW50IG52ZWMpOworZXh0ZXJuIHZvaWQgcGNpX2Rpc2FibGVfbXNpeChzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKK2V4dGVybiB2b2lkIG1zaV9yZW1vdmVfcGNpX2lycV92ZWN0b3JzKHN0cnVjdCBwY2lfZGV2ICpkZXYpOworI2VuZGlmCisKKyNlbmRpZiAvKiBDT05GSUdfUENJICovCisKKy8qIEluY2x1ZGUgYXJjaGl0ZWN0dXJlLWRlcGVuZGVudCBzZXR0aW5ncyBhbmQgZnVuY3Rpb25zICovCisKKyNpbmNsdWRlIDxhc20vcGNpLmg+CisKKy8qCisgKiAgSWYgdGhlIHN5c3RlbSBkb2VzIG5vdCBoYXZlIFBDSSwgY2xlYXJseSB0aGVzZSByZXR1cm4gZXJyb3JzLiAgRGVmaW5lCisgKiAgdGhlc2UgYXMgc2ltcGxlIGlubGluZSBmdW5jdGlvbnMgdG8gYXZvaWQgaGFpciBpbiBkcml2ZXJzLgorICovCisKKyNpZm5kZWYgQ09ORklHX1BDSQorI2RlZmluZSBfUENJX05PUChvLHMsdCkgXAorCXN0YXRpYyBpbmxpbmUgaW50IHBjaV8jI28jI19jb25maWdfIyNzIChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgd2hlcmUsIHQgdmFsKSBcCisJCXsgcmV0dXJuIFBDSUJJT1NfRlVOQ19OT1RfU1VQUE9SVEVEOyB9CisjZGVmaW5lIF9QQ0lfTk9QX0FMTChvLHgpCV9QQ0lfTk9QKG8sYnl0ZSx1OCB4KSBcCisJCQkJX1BDSV9OT1Aobyx3b3JkLHUxNiB4KSBcCisJCQkJX1BDSV9OT1Aobyxkd29yZCx1MzIgeCkKK19QQ0lfTk9QX0FMTChyZWFkLCAqKQorX1BDSV9OT1BfQUxMKHdyaXRlLCkKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcGNpX2RldiAqcGNpX2ZpbmRfZGV2aWNlKHVuc2lnbmVkIGludCB2ZW5kb3IsIHVuc2lnbmVkIGludCBkZXZpY2UsIGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpmcm9tKQoreyByZXR1cm4gTlVMTDsgfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwY2lfZGV2ICpwY2lfZmluZF9zbG90KHVuc2lnbmVkIGludCBidXMsIHVuc2lnbmVkIGludCBkZXZmbikKK3sgcmV0dXJuIE5VTEw7IH0KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcGNpX2RldiAqcGNpX2dldF9kZXZpY2UgKHVuc2lnbmVkIGludCB2ZW5kb3IsIHVuc2lnbmVkIGludCBkZXZpY2UsIHN0cnVjdCBwY2lfZGV2ICpmcm9tKQoreyByZXR1cm4gTlVMTDsgfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwY2lfZGV2ICpwY2lfZ2V0X3N1YnN5cyAodW5zaWduZWQgaW50IHZlbmRvciwgdW5zaWduZWQgaW50IGRldmljZSwKK3Vuc2lnbmVkIGludCBzc192ZW5kb3IsIHVuc2lnbmVkIGludCBzc19kZXZpY2UsIHN0cnVjdCBwY2lfZGV2ICpmcm9tKQoreyByZXR1cm4gTlVMTDsgfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwY2lfZGV2ICpwY2lfZ2V0X2NsYXNzKHVuc2lnbmVkIGludCBjbGFzcywgc3RydWN0IHBjaV9kZXYgKmZyb20pCit7IHJldHVybiBOVUxMOyB9CisKKyNkZWZpbmUgcGNpX2Rldl9wcmVzZW50KGlkcykJKDApCisjZGVmaW5lIHBjaV9kZXZfcHV0KGRldikJZG8geyB9IHdoaWxlICgwKQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGNpX3NldF9tYXN0ZXIoc3RydWN0IHBjaV9kZXYgKmRldikgeyB9CitzdGF0aWMgaW5saW5lIGludCBwY2lfZW5hYmxlX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KSB7IHJldHVybiAtRUlPOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgcGNpX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpIHsgfQorc3RhdGljIGlubGluZSBpbnQgcGNpX3NldF9kbWFfbWFzayhzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1NjQgbWFzaykgeyByZXR1cm4gLUVJTzsgfQorc3RhdGljIGlubGluZSBpbnQgcGNpX2RhY19zZXRfZG1hX21hc2soc3RydWN0IHBjaV9kZXYgKmRldiwgdTY0IG1hc2spIHsgcmV0dXJuIC1FSU87IH0KK3N0YXRpYyBpbmxpbmUgaW50IHBjaV9hc3NpZ25fcmVzb3VyY2Uoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGkpIHsgcmV0dXJuIC1FQlVTWTt9CitzdGF0aWMgaW5saW5lIGludCBwY2lfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBwY2lfZHJpdmVyICpkcnYpIHsgcmV0dXJuIDA7fQorc3RhdGljIGlubGluZSB2b2lkIHBjaV91bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgcGNpX2RyaXZlciAqZHJ2KSB7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHBjaV9maW5kX2NhcGFiaWxpdHkgKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBjYXApIHtyZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSBpbnQgcGNpX2ZpbmRfZXh0X2NhcGFiaWxpdHkgKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBjYXApIHtyZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX21hdGNoX2RldmljZShjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWRzLCBjb25zdCBzdHJ1Y3QgcGNpX2RldiAqZGV2KSB7IHJldHVybiBOVUxMOyB9CisKKy8qIFBvd2VyIG1hbmFnZW1lbnQgcmVsYXRlZCByb3V0aW5lcyAqLworc3RhdGljIGlubGluZSBpbnQgcGNpX3NhdmVfc3RhdGUoc3RydWN0IHBjaV9kZXYgKmRldikgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSBpbnQgcGNpX3Jlc3RvcmVfc3RhdGUoc3RydWN0IHBjaV9kZXYgKmRldikgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSBpbnQgcGNpX3NldF9wb3dlcl9zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBwY2lfcG93ZXJfdCBzdGF0ZSkgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSBwY2lfcG93ZXJfdCBwY2lfY2hvb3NlX3N0YXRlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHUzMiBzdGF0ZSkgeyByZXR1cm4gUENJX0QwOyB9CitzdGF0aWMgaW5saW5lIGludCBwY2lfZW5hYmxlX3dha2Uoc3RydWN0IHBjaV9kZXYgKmRldiwgcGNpX3Bvd2VyX3Qgc3RhdGUsIGludCBlbmFibGUpIHsgcmV0dXJuIDA7IH0KKworI2RlZmluZQlpc2FfYnJpZGdlCSgoc3RydWN0IHBjaV9kZXYgKilOVUxMKQorCisjZWxzZQorCisvKgorICogUENJIGRvbWFpbiBzdXBwb3J0LiAgU29tZXRpbWVzIGNhbGxlZCBQQ0kgc2VnbWVudCAoZWcgYnkgQUNQSSksCisgKiBhIFBDSSBkb21haW4gaXMgZGVmaW5lZCB0byBiZSBhIHNldCBvZiBQQ0kgYnVzc2VzIHdoaWNoIHNoYXJlCisgKiBjb25maWd1cmF0aW9uIHNwYWNlLgorICovCisjaWZuZGVmIENPTkZJR19QQ0lfRE9NQUlOUworc3RhdGljIGlubGluZSBpbnQgcGNpX2RvbWFpbl9ucihzdHJ1Y3QgcGNpX2J1cyAqYnVzKSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIGludCBwY2lfcHJvY19kb21haW4oc3RydWN0IHBjaV9idXMgKmJ1cykKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCisjZW5kaWYgLyogIUNPTkZJR19QQ0kgKi8KKworLyogdGhlc2UgaGVscGVycyBwcm92aWRlIGZ1dHVyZSBhbmQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkKKyAqIGZvciBhY2Nlc3NpbmcgcG9wdWxhciBQQ0kgQkFSIGluZm8gKi8KKyNkZWZpbmUgcGNpX3Jlc291cmNlX3N0YXJ0KGRldixiYXIpICAgKChkZXYpLT5yZXNvdXJjZVsoYmFyKV0uc3RhcnQpCisjZGVmaW5lIHBjaV9yZXNvdXJjZV9lbmQoZGV2LGJhcikgICAgICgoZGV2KS0+cmVzb3VyY2VbKGJhcildLmVuZCkKKyNkZWZpbmUgcGNpX3Jlc291cmNlX2ZsYWdzKGRldixiYXIpICAgKChkZXYpLT5yZXNvdXJjZVsoYmFyKV0uZmxhZ3MpCisjZGVmaW5lIHBjaV9yZXNvdXJjZV9sZW4oZGV2LGJhcikgXAorCSgocGNpX3Jlc291cmNlX3N0YXJ0KChkZXYpLChiYXIpKSA9PSAwICYmCVwKKwkgIHBjaV9yZXNvdXJjZV9lbmQoKGRldiksKGJhcikpID09CQlcCisJICBwY2lfcmVzb3VyY2Vfc3RhcnQoKGRldiksKGJhcikpKSA/IDAgOglcCisJICAJCQkJCQlcCisJIChwY2lfcmVzb3VyY2VfZW5kKChkZXYpLChiYXIpKSAtCQlcCisJICBwY2lfcmVzb3VyY2Vfc3RhcnQoKGRldiksKGJhcikpICsgMSkpCisKKy8qIFNpbWlsYXIgdG8gdGhlIGhlbHBlcnMgYWJvdmUsIHRoZXNlIG1hbmlwdWxhdGUgcGVyLXBjaV9kZXYKKyAqIGRyaXZlci1zcGVjaWZpYyBkYXRhLiAgVGhleSBhcmUgcmVhbGx5IGp1c3QgYSB3cmFwcGVyIGFyb3VuZAorICogdGhlIGdlbmVyaWMgZGV2aWNlIHN0cnVjdHVyZSBmdW5jdGlvbnMgb2YgdGhlc2UgY2FsbHMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCAqcGNpX2dldF9kcnZkYXRhIChzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlyZXR1cm4gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGNpX3NldF9kcnZkYXRhIChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdm9pZCAqZGF0YSkKK3sKKwlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgZGF0YSk7Cit9CisKKy8qIElmIHlvdSB3YW50IHRvIGtub3cgd2hhdCB0byBjYWxsIHlvdXIgcGNpX2RldiwgYXNrIHRoaXMgZnVuY3Rpb24uCisgKiBBZ2FpbiwgaXQncyBhIHdyYXBwZXIgYXJvdW5kIHRoZSBnZW5lcmljIGRldmljZS4KKyAqLworc3RhdGljIGlubGluZSBjaGFyICpwY2lfbmFtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlyZXR1cm4gcGRldi0+ZGV2LmJ1c19pZDsKK30KKworLyogU29tZSBhcmNocyB3YW50IHRvIHNlZSB0aGUgcHJldHR5IHBjaSBuYW1lLCBzbyB1c2UgdGhpcyBtYWNybyAqLworI2lmZGVmIENPTkZJR19QQ0lfTkFNRVMKKyNkZWZpbmUgcGNpX3ByZXR0eV9uYW1lKGRldikgKChkZXYpLT5wcmV0dHlfbmFtZSkKKyNlbHNlCisjZGVmaW5lIHBjaV9wcmV0dHlfbmFtZShkZXYpICIiCisjZW5kaWYKKworLyoKKyAqICBUaGUgd29ybGQgaXMgbm90IHBlcmZlY3QgYW5kIHN1cHBsaWVzIHVzIHdpdGggYnJva2VuIFBDSSBkZXZpY2VzLgorICogIEZvciBhdCBsZWFzdCBhIHBhcnQgb2YgdGhlc2UgYnVncyB3ZSBuZWVkIGEgd29yay1hcm91bmQsIHNvIGJvdGgKKyAqICBnZW5lcmljIChkcml2ZXJzL3BjaS9xdWlya3MuYykgYW5kIHBlci1hcmNoaXRlY3R1cmUgY29kZSBjYW4gZGVmaW5lCisgKiAgZml4dXAgaG9va3MgdG8gYmUgY2FsbGVkIGZvciBwYXJ0aWN1bGFyIGJ1Z2d5IGRldmljZXMuCisgKi8KKworc3RydWN0IHBjaV9maXh1cCB7CisJdTE2IHZlbmRvciwgZGV2aWNlOwkvKiBZb3UgY2FuIHVzZSBQQ0lfQU5ZX0lEIGhlcmUgb2YgY291cnNlICovCisJdm9pZCAoKmhvb2spKHN0cnVjdCBwY2lfZGV2ICpkZXYpOworfTsKKworZW51bSBwY2lfZml4dXBfcGFzcyB7CisJcGNpX2ZpeHVwX2Vhcmx5LAkvKiBCZWZvcmUgcHJvYmluZyBCQVJzICovCisJcGNpX2ZpeHVwX2hlYWRlciwJLyogQWZ0ZXIgcmVhZGluZyBjb25maWd1cmF0aW9uIGhlYWRlciAqLworCXBjaV9maXh1cF9maW5hbCwJLyogRmluYWwgcGhhc2Ugb2YgZGV2aWNlIGZpeHVwcyAqLworCXBjaV9maXh1cF9lbmFibGUsCS8qIHBjaV9lbmFibGVfZGV2aWNlKCkgdGltZSAqLworfTsKKworLyogQW5vbnltb3VzIHZhcmlhYmxlcyB3b3VsZCBiZSBuaWNlLi4uICovCisjZGVmaW5lIERFQ0xBUkVfUENJX0ZJWFVQX1NFQ1RJT04oc2VjdGlvbiwgbmFtZSwgdmVuZG9yLCBkZXZpY2UsIGhvb2spCVwKKwlzdGF0aWMgc3RydWN0IHBjaV9maXh1cCBfX3BjaV9maXh1cF8jI25hbWUgX19hdHRyaWJ1dGVfdXNlZF9fCVwKKwlfX2F0dHJpYnV0ZV9fKChfX3NlY3Rpb25fXygjc2VjdGlvbikpKSA9IHsgdmVuZG9yLCBkZXZpY2UsIGhvb2sgfTsKKyNkZWZpbmUgREVDTEFSRV9QQ0lfRklYVVBfRUFSTFkodmVuZG9yLCBkZXZpY2UsIGhvb2spCQkJXAorCURFQ0xBUkVfUENJX0ZJWFVQX1NFQ1RJT04oLnBjaV9maXh1cF9lYXJseSwJCQlcCisJCQl2ZW5kb3IjI2RldmljZSMjaG9vaywgdmVuZG9yLCBkZXZpY2UsIGhvb2spCisjZGVmaW5lIERFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUih2ZW5kb3IsIGRldmljZSwgaG9vaykJCQlcCisJREVDTEFSRV9QQ0lfRklYVVBfU0VDVElPTigucGNpX2ZpeHVwX2hlYWRlciwJCQlcCisJCQl2ZW5kb3IjI2RldmljZSMjaG9vaywgdmVuZG9yLCBkZXZpY2UsIGhvb2spCisjZGVmaW5lIERFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFMKHZlbmRvciwgZGV2aWNlLCBob29rKQkJCVwKKwlERUNMQVJFX1BDSV9GSVhVUF9TRUNUSU9OKC5wY2lfZml4dXBfZmluYWwsCQkJXAorCQkJdmVuZG9yIyNkZXZpY2UjI2hvb2ssIHZlbmRvciwgZGV2aWNlLCBob29rKQorI2RlZmluZSBERUNMQVJFX1BDSV9GSVhVUF9FTkFCTEUodmVuZG9yLCBkZXZpY2UsIGhvb2spCQkJXAorCURFQ0xBUkVfUENJX0ZJWFVQX1NFQ1RJT04oLnBjaV9maXh1cF9lbmFibGUsCQkJXAorCQkJdmVuZG9yIyNkZXZpY2UjI2hvb2ssIHZlbmRvciwgZGV2aWNlLCBob29rKQorCisKK3ZvaWQgcGNpX2ZpeHVwX2RldmljZShlbnVtIHBjaV9maXh1cF9wYXNzIHBhc3MsIHN0cnVjdCBwY2lfZGV2ICpkZXYpOworCitleHRlcm4gaW50IHBjaV9wY2lfcHJvYmxlbXM7CisjZGVmaW5lIFBDSVBDSV9GQUlMCQkxCisjZGVmaW5lIFBDSVBDSV9UUklUT04JCTIKKyNkZWZpbmUgUENJUENJX05BVE9NQQkJNAorI2RlZmluZSBQQ0lQQ0lfVklBRVRCRgkJOAorI2RlZmluZSBQQ0lQQ0lfVlNGWAkJMTYKKyNkZWZpbmUgUENJUENJX0FMSU1BR0lLCQkzMgorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIExJTlVYX1BDSV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaCBiL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlMzNmNjcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaApAQCAtMCwwICsxLDI1NjIgQEAKKy8qCisgKglQQ0kgQ2xhc3MsIFZlbmRvciBhbmQgRGV2aWNlIElEcworICoKKyAqCVBsZWFzZSBrZWVwIHNvcnRlZC4KKyAqLworCisvKiBEZXZpY2UgY2xhc3NlcyBhbmQgc3ViY2xhc3NlcyAqLworCisjZGVmaW5lIFBDSV9DTEFTU19OT1RfREVGSU5FRAkJMHgwMDAwCisjZGVmaW5lIFBDSV9DTEFTU19OT1RfREVGSU5FRF9WR0EJMHgwMDAxCisKKyNkZWZpbmUgUENJX0JBU0VfQ0xBU1NfU1RPUkFHRQkJMHgwMQorI2RlZmluZSBQQ0lfQ0xBU1NfU1RPUkFHRV9TQ1NJCQkweDAxMDAKKyNkZWZpbmUgUENJX0NMQVNTX1NUT1JBR0VfSURFCQkweDAxMDEKKyNkZWZpbmUgUENJX0NMQVNTX1NUT1JBR0VfRkxPUFBZCTB4MDEwMgorI2RlZmluZSBQQ0lfQ0xBU1NfU1RPUkFHRV9JUEkJCTB4MDEwMworI2RlZmluZSBQQ0lfQ0xBU1NfU1RPUkFHRV9SQUlECQkweDAxMDQKKyNkZWZpbmUgUENJX0NMQVNTX1NUT1JBR0VfT1RIRVIJCTB4MDE4MAorCisjZGVmaW5lIFBDSV9CQVNFX0NMQVNTX05FVFdPUksJCTB4MDIKKyNkZWZpbmUgUENJX0NMQVNTX05FVFdPUktfRVRIRVJORVQJMHgwMjAwCisjZGVmaW5lIFBDSV9DTEFTU19ORVRXT1JLX1RPS0VOX1JJTkcJMHgwMjAxCisjZGVmaW5lIFBDSV9DTEFTU19ORVRXT1JLX0ZEREkJCTB4MDIwMgorI2RlZmluZSBQQ0lfQ0xBU1NfTkVUV09SS19BVE0JCTB4MDIwMworI2RlZmluZSBQQ0lfQ0xBU1NfTkVUV09SS19PVEhFUgkJMHgwMjgwCisKKyNkZWZpbmUgUENJX0JBU0VfQ0xBU1NfRElTUExBWQkJMHgwMworI2RlZmluZSBQQ0lfQ0xBU1NfRElTUExBWV9WR0EJCTB4MDMwMAorI2RlZmluZSBQQ0lfQ0xBU1NfRElTUExBWV9YR0EJCTB4MDMwMQorI2RlZmluZSBQQ0lfQ0xBU1NfRElTUExBWV8zRAkJMHgwMzAyCisjZGVmaW5lIFBDSV9DTEFTU19ESVNQTEFZX09USEVSCQkweDAzODAKKworI2RlZmluZSBQQ0lfQkFTRV9DTEFTU19NVUxUSU1FRElBCTB4MDQKKyNkZWZpbmUgUENJX0NMQVNTX01VTFRJTUVESUFfVklERU8JMHgwNDAwCisjZGVmaW5lIFBDSV9DTEFTU19NVUxUSU1FRElBX0FVRElPCTB4MDQwMQorI2RlZmluZSBQQ0lfQ0xBU1NfTVVMVElNRURJQV9QSE9ORQkweDA0MDIKKyNkZWZpbmUgUENJX0NMQVNTX01VTFRJTUVESUFfT1RIRVIJMHgwNDgwCisKKyNkZWZpbmUgUENJX0JBU0VfQ0xBU1NfTUVNT1JZCQkweDA1CisjZGVmaW5lIFBDSV9DTEFTU19NRU1PUllfUkFNCQkweDA1MDAKKyNkZWZpbmUgUENJX0NMQVNTX01FTU9SWV9GTEFTSAkJMHgwNTAxCisjZGVmaW5lIFBDSV9DTEFTU19NRU1PUllfT1RIRVIJCTB4MDU4MAorCisjZGVmaW5lIFBDSV9CQVNFX0NMQVNTX0JSSURHRQkJMHgwNgorI2RlZmluZSBQQ0lfQ0xBU1NfQlJJREdFX0hPU1QJCTB4MDYwMAorI2RlZmluZSBQQ0lfQ0xBU1NfQlJJREdFX0lTQQkJMHgwNjAxCisjZGVmaW5lIFBDSV9DTEFTU19CUklER0VfRUlTQQkJMHgwNjAyCisjZGVmaW5lIFBDSV9DTEFTU19CUklER0VfTUMJCTB4MDYwMworI2RlZmluZSBQQ0lfQ0xBU1NfQlJJREdFX1BDSQkJMHgwNjA0CisjZGVmaW5lIFBDSV9DTEFTU19CUklER0VfUENNQ0lBCQkweDA2MDUKKyNkZWZpbmUgUENJX0NMQVNTX0JSSURHRV9OVUJVUwkJMHgwNjA2CisjZGVmaW5lIFBDSV9DTEFTU19CUklER0VfQ0FSREJVUwkweDA2MDcKKyNkZWZpbmUgUENJX0NMQVNTX0JSSURHRV9SQUNFV0FZCTB4MDYwOAorI2RlZmluZSBQQ0lfQ0xBU1NfQlJJREdFX09USEVSCQkweDA2ODAKKworI2RlZmluZSBQQ0lfQkFTRV9DTEFTU19DT01NVU5JQ0FUSU9OCTB4MDcKKyNkZWZpbmUgUENJX0NMQVNTX0NPTU1VTklDQVRJT05fU0VSSUFMCTB4MDcwMAorI2RlZmluZSBQQ0lfQ0xBU1NfQ09NTVVOSUNBVElPTl9QQVJBTExFTCAweDA3MDEKKyNkZWZpbmUgUENJX0NMQVNTX0NPTU1VTklDQVRJT05fTVVMVElTRVJJQUwgMHgwNzAyCisjZGVmaW5lIFBDSV9DTEFTU19DT01NVU5JQ0FUSU9OX01PREVNCTB4MDcwMworI2RlZmluZSBQQ0lfQ0xBU1NfQ09NTVVOSUNBVElPTl9PVEhFUgkweDA3ODAKKworI2RlZmluZSBQQ0lfQkFTRV9DTEFTU19TWVNURU0JCTB4MDgKKyNkZWZpbmUgUENJX0NMQVNTX1NZU1RFTV9QSUMJCTB4MDgwMAorI2RlZmluZSBQQ0lfQ0xBU1NfU1lTVEVNX0RNQQkJMHgwODAxCisjZGVmaW5lIFBDSV9DTEFTU19TWVNURU1fVElNRVIJCTB4MDgwMgorI2RlZmluZSBQQ0lfQ0xBU1NfU1lTVEVNX1JUQwkJMHgwODAzCisjZGVmaW5lIFBDSV9DTEFTU19TWVNURU1fUENJX0hPVFBMVUcJMHgwODA0CisjZGVmaW5lIFBDSV9DTEFTU19TWVNURU1fT1RIRVIJCTB4MDg4MAorCisjZGVmaW5lIFBDSV9CQVNFX0NMQVNTX0lOUFVUCQkweDA5CisjZGVmaW5lIFBDSV9DTEFTU19JTlBVVF9LRVlCT0FSRAkweDA5MDAKKyNkZWZpbmUgUENJX0NMQVNTX0lOUFVUX1BFTgkJMHgwOTAxCisjZGVmaW5lIFBDSV9DTEFTU19JTlBVVF9NT1VTRQkJMHgwOTAyCisjZGVmaW5lIFBDSV9DTEFTU19JTlBVVF9TQ0FOTkVSCQkweDA5MDMKKyNkZWZpbmUgUENJX0NMQVNTX0lOUFVUX0dBTUVQT1JUCTB4MDkwNAorI2RlZmluZSBQQ0lfQ0xBU1NfSU5QVVRfT1RIRVIJCTB4MDk4MAorCisjZGVmaW5lIFBDSV9CQVNFX0NMQVNTX0RPQ0tJTkcJCTB4MGEKKyNkZWZpbmUgUENJX0NMQVNTX0RPQ0tJTkdfR0VORVJJQwkweDBhMDAKKyNkZWZpbmUgUENJX0NMQVNTX0RPQ0tJTkdfT1RIRVIJCTB4MGE4MAorCisjZGVmaW5lIFBDSV9CQVNFX0NMQVNTX1BST0NFU1NPUgkweDBiCisjZGVmaW5lIFBDSV9DTEFTU19QUk9DRVNTT1JfMzg2CQkweDBiMDAKKyNkZWZpbmUgUENJX0NMQVNTX1BST0NFU1NPUl80ODYJCTB4MGIwMQorI2RlZmluZSBQQ0lfQ0xBU1NfUFJPQ0VTU09SX1BFTlRJVU0JMHgwYjAyCisjZGVmaW5lIFBDSV9DTEFTU19QUk9DRVNTT1JfQUxQSEEJMHgwYjEwCisjZGVmaW5lIFBDSV9DTEFTU19QUk9DRVNTT1JfUE9XRVJQQwkweDBiMjAKKyNkZWZpbmUgUENJX0NMQVNTX1BST0NFU1NPUl9NSVBTCTB4MGIzMAorI2RlZmluZSBQQ0lfQ0xBU1NfUFJPQ0VTU09SX0NPCQkweDBiNDAKKworI2RlZmluZSBQQ0lfQkFTRV9DTEFTU19TRVJJQUwJCTB4MGMKKyNkZWZpbmUgUENJX0NMQVNTX1NFUklBTF9GSVJFV0lSRQkweDBjMDAKKyNkZWZpbmUgUENJX0NMQVNTX1NFUklBTF9BQ0NFU1MJCTB4MGMwMQorI2RlZmluZSBQQ0lfQ0xBU1NfU0VSSUFMX1NTQQkJMHgwYzAyCisjZGVmaW5lIFBDSV9DTEFTU19TRVJJQUxfVVNCCQkweDBjMDMKKyNkZWZpbmUgUENJX0NMQVNTX1NFUklBTF9GSUJFUgkJMHgwYzA0CisjZGVmaW5lIFBDSV9DTEFTU19TRVJJQUxfU01CVVMJCTB4MGMwNQorCisjZGVmaW5lIFBDSV9CQVNFX0NMQVNTX0lOVEVMTElHRU5UCTB4MGUKKyNkZWZpbmUgUENJX0NMQVNTX0lOVEVMTElHRU5UX0kyTwkweDBlMDAKKworI2RlZmluZSBQQ0lfQkFTRV9DTEFTU19TQVRFTExJVEUJMHgwZgorI2RlZmluZSBQQ0lfQ0xBU1NfU0FURUxMSVRFX1RWCQkweDBmMDAKKyNkZWZpbmUgUENJX0NMQVNTX1NBVEVMTElURV9BVURJTwkweDBmMDEKKyNkZWZpbmUgUENJX0NMQVNTX1NBVEVMTElURV9WT0lDRQkweDBmMDMKKyNkZWZpbmUgUENJX0NMQVNTX1NBVEVMTElURV9EQVRBCTB4MGYwNAorCisjZGVmaW5lIFBDSV9CQVNFX0NMQVNTX0NSWVBUCQkweDEwCisjZGVmaW5lIFBDSV9DTEFTU19DUllQVF9ORVRXT1JLCQkweDEwMDAKKyNkZWZpbmUgUENJX0NMQVNTX0NSWVBUX0VOVEVSVEFJTk1FTlQJMHgxMDAxCisjZGVmaW5lIFBDSV9DTEFTU19DUllQVF9PVEhFUgkJMHgxMDgwCisKKyNkZWZpbmUgUENJX0JBU0VfQ0xBU1NfU0lHTkFMX1BST0NFU1NJTkcgMHgxMQorI2RlZmluZSBQQ0lfQ0xBU1NfU1BfRFBJTwkJMHgxMTAwCisjZGVmaW5lIFBDSV9DTEFTU19TUF9PVEhFUgkJMHgxMTgwCisKKyNkZWZpbmUgUENJX0NMQVNTX09USEVSUwkJMHhmZgorCisvKiBWZW5kb3JzIGFuZCBkZXZpY2VzLiAgU29ydCBrZXk6IHZlbmRvciBmaXJzdCwgZGV2aWNlIG5leHQuICovCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9EWU5BTElOSwkJMHgwNjc1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRFlOQUxJTktfSVM2NFBICTB4MTcwMgorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfQkVSS09NCQkJMHgwODcxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQkVSS09NX0ExVAkJMHhmZmExCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQkVSS09NX1RfQ09OQ0VQVAkJMHhmZmEyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQkVSS09NX0E0VAkJMHhmZmE0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQkVSS09NX1NDSVRFTF9RVUFEUk8JMHhmZmE4CisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9DT01QQVEJCTB4MGUxMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NPTVBBUV9UT0tFTlJJTkcJMHgwNTA4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ09NUEFRXzEyODAJMHgzMDMzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ09NUEFRX1RSSUZMRVgJMHg0MDAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ09NUEFRXzYwMTAJMHg2MDEwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ09NUEFRX1RBQ0hZT04JMHhhMGZjCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ09NUEFRX1NNQVJUMlAJMHhhZTEwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ09NUEFRX05FVEVMMTAwCTB4YWUzMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NPTVBBUV9ORVRFTDEwCTB4YWUzNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NPTVBBUV9UUklGTEVYX0lERSAweGFlMzMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DT01QQVFfTkVURkxFWDNJCTB4YWUzNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NPTVBBUV9ORVRFTDEwMEQJMHhhZTQwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ09NUEFRX05FVEVMMTAwUEkJMHhhZTQzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ09NUEFRX05FVEVMMTAwSQkweGIwMTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DT01QQVFfQ0lTUwkweGIwNjAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DT01QQVFfQ0lTU0IJMHhiMTc4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ09NUEFRX0NJU1NDCTB4NDYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DT01QQVFfVEhVTkRFUgkweGYxMzAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DT01QQVFfTkVURkxFWDNCCTB4ZjE1MAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfTkNSCQkweDEwMDAKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9MU0lfTE9HSUMJCTB4MTAwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05DUl81M0M4MTAJMHgwMDAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkNSXzUzQzgyMAkweDAwMDIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OQ1JfNTNDODI1CTB4MDAwMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX05DUl81M0M4MTUJMHgwMDA0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTFNJXzUzQzgxMEFQCTB4MDAwNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05DUl81M0M4NjAJMHgwMDA2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTFNJXzUzQzE1MTAJMHgwMDBhCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkNSXzUzQzg5NgkweDAwMGIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OQ1JfNTNDODk1CTB4MDAwYworI2RlZmluZSBQQ0lfREVWSUNFX0lEX05DUl81M0M4ODUJMHgwMDBkCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkNSXzUzQzg3NQkweDAwMGYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OQ1JfNTNDMTUxMAkweDAwMTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9MU0lfNTNDODk1QQkweDAwMTIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9MU0lfNTNDODc1QQkweDAwMTMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9MU0lfNTNDMTAxMF8zMwkweDAwMjAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9MU0lfNTNDMTAxMF82NgkweDAwMjEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9MU0lfNTNDMTAzMAkweDAwMzAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9MU0lfMTAzMF81M0MxMDM1CTB4MDAzMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xTSV81M0MxMDM1CTB4MDA0MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05DUl81M0M4NzVKCTB4MDA4ZgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xTSV9GQzkwOQkJMHgwNjIxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTFNJX0ZDOTI5CQkweDA2MjIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9MU0lfRkM5MjlfTEFOCTB4MDYyMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xTSV9GQzkxOQkJMHgwNjI0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTFNJX0ZDOTE5X0xBTgkweDA2MjUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9MU0lfRkM5MjlYCTB4MDYyNgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xTSV9GQzkzOVgJMHgwNjQyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTFNJX0ZDOTQ5WAkweDA2NDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9MU0lfRkM5MTlYCTB4MDYyOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05DUl9ZRUxMT1dGSU4JMHgwNzAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTFNJXzYxQzEwMgkweDA5MDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9MU0lfNjNDODE1CTB4MTAwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xTSV9TQVMxMDY0CTB4MDA1MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xTSV9TQVMxMDY2CTB4MDA1RQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xTSV9TQVMxMDY4CTB4MDA1NAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xTSV9TQVMxMDY0QQkweDAwNUMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9MU0lfU0FTMTA2NEUJMHgwMDU2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTFNJX1NBUzEwNjZFCTB4MDA1QQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xTSV9TQVMxMDY4RQkweDAwNTgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9MU0lfU0FTMTA3OAkweDAwNjAKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0FUSQkJMHgxMDAyCisvKiBNYWNoNjQgKi8KKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfNjg4MDAJCTB4NDE1OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV8yMTVDVDIyMgkweDQzNTQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfMjEwODg4Q1gJMHg0MzU4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJXzIxNUVUMjIyCTB4NDU1NAorLyogTWFjaDY0IC8gUmFnZSAqLworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV8yMTVHQgkJMHg0NzQyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJXzIxNUdECQkweDQ3NDQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfMjE1R0kJCTB4NDc0OQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV8yMTVHUAkJMHg0NzUwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJXzIxNUdRCQkweDQ3NTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfMjE1WEwJCTB4NDc1MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV8yMTVHVAkJMHg0NzU0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJXzIxNUdUQgkweDQ3NTUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfMjE1X0lWCTB4NDc1NgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV8yMTVfSVcJMHg0NzU3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJXzIxNV9JWgkweDQ3NUEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfMjEwODg4R1gJMHg0NzU4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJXzIxNV9MQgkweDRjNDIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfMjE1X0xECTB4NGM0NAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV8yMTVfTEcJMHg0YzQ3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJXzIxNV9MSQkweDRjNDkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfMjE1X0xNCTB4NGM0RAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV8yMTVfTE4JMHg0YzRFCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJXzIxNV9MUgkweDRjNTIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfMjE1X0xTCTB4NGM1MworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV8yNjRfTFQJMHg0YzU0CisvKiBNYWNoNjQgVlQgKi8KKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfMjY0VlQJCTB4NTY1NAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV8yNjRWVQkJMHg1NjU1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJXzI2NFZWCQkweDU2NTYKKy8qIFJhZ2UxMjggR0wgKi8KKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9SRQkweDUyNDUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9SRgkweDUyNDYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9SRwkweDUyNDcKKy8qIFJhZ2UxMjggVlIgKi8KKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9SSwkweDUyNGIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9STAkweDUyNGMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9TRQkweDUzNDUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9TRgkweDUzNDYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9TRwkweDUzNDcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9TSAkweDUzNDgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9TSwkweDUzNGIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9TTAkweDUzNGMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9TTQkweDUzNGQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9TTgkweDUzNGUKKy8qIFJhZ2UxMjggVWx0cmEgKi8KKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9URgkweDU0NDYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9UTAkweDU0NGMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9UUgkweDU0NTIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9UUwkweDU0NTMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9UVAkweDU0NTQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9UVQkweDU0NTUKKy8qIFJhZ2UxMjggTTMgKi8KKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9MRQkweDRjNDUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9MRgkweDRjNDYKKy8qIFJhZ2UxMjggTTQgKi8KKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9NRiAgICAweDRkNDYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9NTCAgICAweDRkNGMKKy8qIFJhZ2UxMjggUHJvIEdMICovCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBR0UxMjhfUEEJMHg1MDQxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBR0UxMjhfUEIJMHg1MDQyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBR0UxMjhfUEMJMHg1MDQzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBR0UxMjhfUEQJMHg1MDQ0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBR0UxMjhfUEUJMHg1MDQ1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBR0UxMjhfUEYJMHg1MDQ2CisvKiBSYWdlMTI4IFBybyBWUiAqLworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQUdFMTI4X1BHCTB4NTA0NworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQUdFMTI4X1BICTB4NTA0OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQUdFMTI4X1BJCTB4NTA0OQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQUdFMTI4X1BKCTB4NTA0QQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQUdFMTI4X1BLCTB4NTA0QgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQUdFMTI4X1BMCTB4NTA0QworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQUdFMTI4X1BNCTB4NTA0RAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQUdFMTI4X1BOCTB4NTA0RQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQUdFMTI4X1BPCTB4NTA0RgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQUdFMTI4X1BQCTB4NTA1MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQUdFMTI4X1BRCTB4NTA1MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQUdFMTI4X1BSCTB4NTA1MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQUdFMTI4X1RSCTB4NTQ1MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQUdFMTI4X1BTCTB4NTA1MworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQUdFMTI4X1BUCTB4NTA1NAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQUdFMTI4X1BVCTB4NTA1NQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQUdFMTI4X1BWCTB4NTA1NgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQUdFMTI4X1BXCTB4NTA1NworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQUdFMTI4X1BYCTB4NTA1OAorLyogUmFnZTEyOCBNNCAqLworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQURFT05fTEUJMHg0ZDQ1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9MRgkweDRkNDYKKy8qIFJhZGVvbiBSMTAwICovCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9RRAkweDUxNDQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX1FFCTB4NTE0NQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQURFT05fUUYJMHg1MTQ2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9RRwkweDUxNDcKKy8qIFJhZGVvbiBSVjEwMCAoVkUpICovCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9RWQkweDUxNTkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX1FaCTB4NTE1YQorLyogUmFkZW9uIFIyMDAgKDg1MDApICovCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9RTAkweDUxNGMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX1FOCTB4NTE0ZQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQURFT05fUU8JMHg1MTRmCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9RbAkweDUxNmMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX0JCCTB4NDI0MgorLyogUmFkZW9uIFIyMDAgKDkxMDApICovCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9RTQkweDUxNGQKKy8qIFJhZGVvbiBSVjIwMCAoNzUwMCkgKi8KKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX1FXCTB4NTE1NworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQURFT05fUVgJMHg1MTU4CisvKiBSYWRlb24gTlYtMTAwICovCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9OMQkweDUxNTkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX04yCTB4NTE1YQorLyogUmFkZW9uIFJWMjUwICg5MDAwKSAqLworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQURFT05fSWQJMHg0OTY0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9JZQkweDQ5NjUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX0lmCTB4NDk2NgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQURFT05fSWcJMHg0OTY3CisvKiBSYWRlb24gUlYyODAgKDkyMDApICovCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9ZXwkweDU5NjAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX1lhCTB4NTk2MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQURFT05fWWQJMHg1OTY0CisvKiBSYWRlb24gUjMwMCAoOTUwMCkgKi8KKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX0FECTB4NDE0NAorLyogUmFkZW9uIFIzMDAgKDk3MDApICovCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9ORAkweDRlNDQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX05FCTB4NGU0NQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQURFT05fTkYJMHg0ZTQ2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9ORwkweDRlNDcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX0FFCTB4NDE0NQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQURFT05fQUYJMHg0MTQ2CisvKiBSYWRlb24gUjM1MCAoOTgwMCkgKi8KKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX05ICTB4NGU0OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQURFT05fTkkJMHg0ZTQ5CisvKiBSYWRlb24gUlYzNTAgKDk2MDApICovCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9BUAkweDQxNTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX0FSCTB4NDE1MgorLyogUmFkZW9uIE02ICovCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9MWQkweDRjNTkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX0xaCTB4NGM1YQorLyogUmFkZW9uIE03ICovCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9MVwkweDRjNTcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX0xYCTB4NGM1OAorLyogUmFkZW9uIE05ICovCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9MZAkweDRjNjQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX0xlCTB4NGM2NQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQURFT05fTGYJMHg0YzY2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9MZwkweDRjNjcKKy8qIFJhZGVvbiAqLworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQURFT05fUkEJMHg1MTQ0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9SQgkweDUxNDUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX1JDCTB4NTE0NgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQURFT05fUkQJMHg1MTQ3CisvKiBSYWRlb25JR1AgKi8KKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUlMxMDAJCTB4Y2FiMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SUzIwMAkJMHhjYWIyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JTMjAwX0IJMHhjYmIyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JTMjUwCQkweGNhYjMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUlMzMDBfMTAwCTB4NTgzMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SUzMwMF8xMzMJMHg1ODMxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JTMzAwXzE2NgkweDU4MzIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUlMzMDBfMjAwCTB4NTgzMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SUzM1MF8xMDAgICAgIDB4NzgzMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SUzM1MF8xMzMgICAgIDB4NzgzMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SUzM1MF8xNjYgICAgIDB4NzgzMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SUzM1MF8yMDAgICAgIDB4NzgzMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SUzQwMF8xMDAgICAgIDB4NWEzMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SUzQwMF8xMzMgICAgIDB4NWEzMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SUzQwMF8xNjYgICAgIDB4NWEzMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SUzQwMF8yMDAgICAgIDB4NWEzMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SUzQ4MCAgICAgICAgIDB4NTk1MAorLyogQVRJIElYUCBDaGlwc2V0ICovCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDIwMF9JREUJMHg0MzQ5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDMwMF9JREUJMHg0MzY5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDMwMF9TQVRBICAgMHg0MzZlCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDQwMF9JREUJMHg0Mzc2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDQwMF9TQVRBICAgMHg0Mzc5CisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9WTFNJCQkweDEwMDQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WTFNJXzgyQzU5MgkweDAwMDUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WTFNJXzgyQzU5MwkweDAwMDYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WTFNJXzgyQzU5NAkweDAwMDcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WTFNJXzgyQzU5NwkweDAwMDkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WTFNJXzgyQzU0MQkweDAwMGMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WTFNJXzgyQzU0MwkweDAwMGQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WTFNJXzgyQzUzMgkweDAxMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WTFNJXzgyQzUzNAkweDAxMDIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WTFNJXzgyQzUzNQkweDAxMDQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WTFNJXzgyQzE0NwkweDAxMDUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WTFNJX1ZBUzk2MDExCTB4MDcwMgorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfQURMCQkweDEwMDUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BRExfMjMwMQkJMHgyMzAxCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9OUwkJMHgxMDBiCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlNfODc0MTUJCTB4MDAwMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05TXzg3NTYwX0xJTwkweDAwMGUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OU184NzU2MF9VU0IJMHgwMDEyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlNfODM4MTUJCTB4MDAyMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05TXzgzODIwCQkweDAwMjIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OU19TQ3gyMDBfQlJJREdFCTB4MDUwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05TX1NDeDIwMF9TTUkJMHgwNTAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlNfU0N4MjAwX0lERQkweDA1MDIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OU19TQ3gyMDBfQVVESU8JMHgwNTAzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlNfU0N4MjAwX1ZJREVPCTB4MDUwNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05TX1NDeDIwMF9YQlVTCTB4MDUwNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05TX1NDMTEwMF9CUklER0UJMHgwNTEwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlNfU0MxMTAwX1NNSQkweDA1MTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OU19TQzExMDBfWEJVUwkweDA1MTUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OU184NzQxMAkJMHhkMDAxCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9UU0VORwkJMHgxMDBjCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVFNFTkdfVzMyUF8yCTB4MzIwMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RTRU5HX1czMlBfYgkweDMyMDUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9UU0VOR19XMzJQX2MJMHgzMjA2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVFNFTkdfVzMyUF9kCTB4MzIwNworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RTRU5HX0VUNjAwMAkweDMyMDgKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1dFSVRFSwkJMHgxMDBlCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfV0VJVEVLX1A5MDAwCTB4OTAwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1dFSVRFS19QOTEwMAkweDkxMDAKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0RFQwkJMHgxMDExCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfREVDX0JSRAkJMHgwMDAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfREVDX1RVTElQCQkweDAwMDIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ERUNfVEdBCQkweDAwMDQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ERUNfVFVMSVBfRkFTVAkweDAwMDkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ERUNfVEdBMgkJMHgwMDBECisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfREVDX0ZEREkJCTB4MDAwRgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0RFQ19UVUxJUF9QTFVTCTB4MDAxNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0RFQ18yMTE0MgkJMHgwMDE5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfREVDXzIxMDUyCQkweDAwMjEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ERUNfMjExNTAJCTB4MDAyMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0RFQ18yMTE1MgkJMHgwMDI0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfREVDXzIxMTUzCQkweDAwMjUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ERUNfMjExNTQJCTB4MDAyNgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0RFQ18yMTI4NQkJMHgxMDY1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ09NUEFRXzQyWFgJMHgwMDQ2CisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9DSVJSVVMJCTB4MTAxMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NJUlJVU183NTQ4CTB4MDAzOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NJUlJVU181NDMwCTB4MDBhMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NJUlJVU181NDM0XzQJMHgwMGE0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ0lSUlVTXzU0MzRfOAkweDAwYTgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DSVJSVVNfNTQzNgkweDAwYWMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DSVJSVVNfNTQ0NgkweDAwYjgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DSVJSVVNfNTQ4MAkweDAwYmMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DSVJSVVNfNTQ2MgkweDAwZDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DSVJSVVNfNTQ2NAkweDAwZDQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DSVJSVVNfNTQ2NQkweDAwZDYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DSVJSVVNfNjcyOQkweDExMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DSVJSVVNfNjgzMgkweDExMTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DSVJSVVNfNzU0MgkweDEyMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DSVJSVVNfNzU0MwkweDEyMDIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DSVJSVVNfNzU0MQkweDEyMDQKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0lCTQkJMHgxMDE0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSUJNX0ZJUkVfQ09SQUwJMHgwMDBhCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSUJNX1RSCQkweDAwMTgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JQk1fODJHMjY3NQkweDAwMWQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JQk1fTUNBCQkweDAwMjAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JQk1fODIzNTEJCTB4MDAyMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lCTV9QWVRIT04JMHgwMDJkCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSUJNX1NFUlZFUkFJRAkweDAwMmUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JQk1fVFJfV0FLRQkweDAwM2UKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JQk1fTVBJQwkJMHgwMDQ2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSUJNXzM3ODBJRFNQCTB4MDA3ZAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lCTV9DSFVLQVIJMHgwMDk2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSUJNX0NQQzcxMF9QQ0k2NAkweDAwZmMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JQk1fQ1BDNzEwX1BDSTMyCTB4MDEwNQorI2RlZmluZQlQQ0lfREVWSUNFX0lEX0lCTV80MDVHUAkJMHgwMTU2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSUJNX1NOSVBFCQkweDAxODAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JQk1fU0VSVkVSQUlESTk2MAkweDAxYmQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JQk1fQ0lUUklORQkJMHgwMjhDCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSUJNX0dFTVNUT05FCQkweEIxNjYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JQk1fTVBJQ18yCTB4ZmZmZgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lCTV9JQ09NX0RFVl9JRF8xCTB4MDAzMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lCTV9JQ09NX0RFVl9JRF8yCTB4MDIxOQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lCTV9JQ09NX1YyX1RXT19QT1JUU19SVlgJCTB4MDIxQQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lCTV9JQ09NX1YyX09ORV9QT1JUX1JWWF9PTkVfUE9SVF9NRE0JMHgwMjUxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSUJNX0lDT01fRk9VUl9QT1JUX01PREVMCTB4MjUyCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9DT01QRVgyCQkweDEwMWEgLy8gcGNpLmlkcyBzYXlzICJBVCZUIEdJUyAoTkNSKSIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DT01QRVgyXzEwMFZHCTB4MDAwNQorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfV0QJCTB4MTAxYworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1dEXzcxOTcJCTB4MzI5NgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1dEXzkwQwkJMHhjMjRhCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9BTUkJCTB4MTAxZQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNSV9NRUdBUkFJRDMJMHgxOTYwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1JX01FR0FSQUlECTB4OTAxMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNSV9NRUdBUkFJRDIJMHg5MDYwCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9BTUQJCTB4MTAyMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9MQU5DRQkJMHgyMDAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX0xBTkNFX0hPTUUJMHgyMDAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX1NDU0kJCTB4MjAyMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9TRVJFTkFERQkweDM2YzAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfRkVfR0FURV83MDA2CTB4NzAwNgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9GRV9HQVRFXzcwMDcJMHg3MDA3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX0ZFX0dBVEVfNzAwQwkweDcwMEMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfRkVfR0FURV83MDBECTB4NzAwRAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9GRV9HQVRFXzcwMEUJMHg3MDBFCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX0ZFX0dBVEVfNzAwRgkweDcwMEYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfQ09CUkFfNzQwMAkweDc0MDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfQ09CUkFfNzQwMQkweDc0MDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfQ09CUkFfNzQwMwkweDc0MDMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfQ09CUkFfNzQwNAkweDc0MDQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfVklQRVJfNzQwOAkweDc0MDgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfVklQRVJfNzQwOQkweDc0MDkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfVklQRVJfNzQwQgkweDc0MEIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfVklQRVJfNzQwQwkweDc0MEMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfVklQRVJfNzQxMAkweDc0MTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfVklQRVJfNzQxMQkweDc0MTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfVklQRVJfNzQxMwkweDc0MTMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfVklQRVJfNzQxNAkweDc0MTQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfT1BVU183NDQwCTB4NzQ0MAorIwlkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfVklQRVJfNzQ0MAlQQ0lfREVWSUNFX0lEX0FNRF9PUFVTXzc0NDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfT1BVU183NDQxCTB4NzQ0MQorIwlkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfVklQRVJfNzQ0MQlQQ0lfREVWSUNFX0lEX0FNRF9PUFVTXzc0NDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfT1BVU183NDQzCTB4NzQ0MworIwlkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfVklQRVJfNzQ0MwlQQ0lfREVWSUNFX0lEX0FNRF9PUFVTXzc0NDMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfT1BVU183NDQ1CTB4NzQ0NQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9PUFVTXzc0NDgJMHg3NDQ4CisjIGRlZmluZQlQQ0lfREVWSUNFX0lEX0FNRF9WSVBFUl83NDQ4CVBDSV9ERVZJQ0VfSURfQU1EX09QVVNfNzQ0OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9PUFVTXzc0NDkJMHg3NDQ5CisjCWRlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9WSVBFUl83NDQ5CVBDSV9ERVZJQ0VfSURfQU1EX09QVVNfNzQ0OQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF84MTExX0xBTgkweDc0NjIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfODExMV9MUEMJMHg3NDY4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EXzgxMTFfSURFCTB4NzQ2OQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF84MTExX1NNQlVTMgkweDc0NmEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfODExMV9TTUJVUwkweDc0NmIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfODExMV9BVURJTwkweDc0NmQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfODE1MV8wCTB4NzQ1NAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF84MTMxX0FQSUMgICAgIDB4NzQ1MAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfVFJJREVOVAkJMHgxMDIzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVFJJREVOVF80RFdBVkVfRFgJMHgyMDAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVFJJREVOVF80RFdBVkVfTlgJMHgyMDAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVFJJREVOVF85MzIwCTB4OTMyMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RSSURFTlRfOTM4OAkweDkzODgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9UUklERU5UXzkzOTcJMHg5Mzk3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVFJJREVOVF85MzlBCTB4OTM5QQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RSSURFTlRfOTUyMAkweDk1MjAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9UUklERU5UXzk1MjUJMHg5NTI1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVFJJREVOVF85NDIwCTB4OTQyMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RSSURFTlRfOTQ0MAkweDk0NDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9UUklERU5UXzk2NjAJMHg5NjYwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVFJJREVOVF85NzUwCTB4OTc1MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RSSURFTlRfOTg1MAkweDk4NTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9UUklERU5UXzk4ODAJMHg5ODgwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVFJJREVOVF84NDAwCTB4ODQwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RSSURFTlRfODQyMAkweDg0MjAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9UUklERU5UXzg1MDAJMHg4NTAwCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9BSQkJMHgxMDI1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQUlfTTE0MzUJCTB4MTQzNQorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfREVMTAkJMHgxMDI4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfREVMTF9SQUNJSUkJMHgwMDA4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfREVMTF9SQUM0CQkweDAwMTIKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX01BVFJPWAkJMHgxMDJCCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUFUUk9YX01HQV8yCTB4MDUxOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01BVFJPWF9NSUwJMHgwNTE5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUFUUk9YX01ZUwkweDA1MUEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NQVRST1hfTUlMXzIJMHgwNTFiCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUFUUk9YX01JTF8yX0FHUAkweDA1MWYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NQVRST1hfTUdBX0lNUAkweDBkMTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NQVRST1hfRzEwMF9NTQkweDEwMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NQVRST1hfRzEwMF9BR1AJMHgxMDAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUFUUk9YX0cyMDBfUENJCTB4MDUyMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01BVFJPWF9HMjAwX0FHUAkweDA1MjEKKyNkZWZpbmUJUENJX0RFVklDRV9JRF9NQVRST1hfRzQwMAkweDA1MjUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NQVRST1hfRzU1MAkweDI1MjcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NQVRST1hfVklBCTB4NDUzNgorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfQ1QJCTB4MTAyYworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NUXzY5MDAwCQkweDAwYzAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DVF82NTU0NQkJMHgwMGQ4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ1RfNjU1NDgJCTB4MDBkYworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NUXzY1NTUwCQkweDAwZTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DVF82NTU1NAkJMHgwMGU0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ1RfNjU1NTUJCTB4MDBlNQorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfTUlSTwkJMHgxMDMxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUlST18zNjA1MAkweDU2MDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NSVJPX0RDMTBQTFVTCTB4N2VmZQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01JUk9fREMzMFBMVVMJMHhkODAxCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9ORUMJCTB4MTAzMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX05FQ19DQlVTXzEJMHgwMDAxIC8qIFBDSS1DYnVzIEJyaWRnZSAqLworI2RlZmluZSBQQ0lfREVWSUNFX0lEX05FQ19MT0NBTAkJMHgwMDAyIC8qIExvY2FsIEJyaWRnZSAqLworI2RlZmluZSBQQ0lfREVWSUNFX0lEX05FQ19BVE0JCTB4MDAwMyAvKiBBVE0gTEFOIENvbnRyb2xsZXIgKi8KKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ORUNfUjQwMDAJCTB4MDAwNCAvKiBSNDAwMCBCcmlkZ2UgKi8KKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ORUNfNDg2CQkweDAwMDUgLyogNDg2IExpa2UgUGVyaXBoZXJhbCBCdXMgQnJpZGdlICovCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVDX0FDQ0VMXzEJMHgwMDA2IC8qIEdyYXBoaWMgQWNjZWxlcmF0b3IgKi8KKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ORUNfVVhCVVMJCTB4MDAwNyAvKiBVWC1CdXMgQnJpZGdlICovCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVDX0FDQ0VMXzIJMHgwMDA4IC8qIEdyYXBoaWMgQWNjZWxlcmF0b3IgKi8KKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ORUNfR1JBUEgJCTB4MDAwOSAvKiBQQ0ktQ29yZUdyYXBoIEJyaWRnZSAqLworI2RlZmluZSBQQ0lfREVWSUNFX0lEX05FQ19WTAkJMHgwMDE2IC8qIFBDSS1WTCBCcmlkZ2UgKi8KKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ORUNfU1RBUkFMUEhBMgkweDAwMmMgLyogU1RBUiBBTFBIQTIgKi8KKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ORUNfQ0JVU18yCTB4MDAyZCAvKiBQQ0ktQ2J1cyBCcmlkZ2UgKi8KKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ORUNfVVNCCQkweDAwMzUgLyogUENJLVVTQiBIb3N0ICovCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVDX0NCVVNfMwkweDAwM2IKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ORUNfTkFQQ0NBUkQJMHgwMDNlCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVDX1BDWDIJCTB4MDA0NiAvKiBQb3dlclZSICovCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVDX05JTEU0CQkweDAwNWEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ORUNfVlJDNTQ3NiAgICAgICAweDAwOWIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ORUNfVlJDNDE3MwkweDAwYTUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ORUNfVlJDNTQ3N19BQzk3ICAweDAwYTYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ORUNfUEM5ODIxQ1MwMSAgICAweDgwMGMgLyogUEMtOTgyMS1DUzAxICovCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVDX1BDOTgyMU5SQjA2ICAgMHg4MDBkIC8qIFBDLTk4MjFOUi1CMDYgKi8KKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0ZECQkweDEwMzYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9GRF8zNkM3MAkJMHgwMDAwCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9TSQkJMHgxMDM5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNTU5MV9BR1AJMHgwMDAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNjIwMgkJMHgwMDAyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNTAzCQkweDAwMDgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV9BQ1BJCQkweDAwMDkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV9TTUJVUwkJMHgwMDE2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfTFBDCQkweDAwMTgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV81NTk3X1ZHQQkweDAyMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV82MjA1CQkweDAyMDUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV81MDEJCTB4MDQwNgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzQ5NgkJMHgwNDk2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfMzAwCQkweDAzMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV8zMTVICQkweDAzMTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV8zMTUJCTB4MDMxNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzMxNVBSTwkJMHgwMzI1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNTMwCQkweDA1MzAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV81NDAJCTB4MDU0MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzU1MAkJMHgwNTUwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNTQwX1ZHQQkweDUzMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV81NTBfVkdBCTB4NTMxNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzYwMQkJMHgwNjAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNjIwCQkweDA2MjAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV82MzAJCTB4MDYzMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzYzMwkJMHgwNjMzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNjM1CQkweDA2MzUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV82NDAJCTB4MDY0MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzY0NQkJMHgwNjQ1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNjQ2CQkweDA2NDYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV82NDgJCTB4MDY0OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzY1MAkJMHgwNjUwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNjUxCQkweDA2NTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV82NTIJCTB4MDY1MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzY1NQkJMHgwNjU1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNjYxCQkweDA2NjEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV83MzAJCTB4MDczMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzczMwkJMHgwNzMzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNjMwX1ZHQQkweDYzMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV83MzBfVkdBCTB4NzMwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzczNQkJMHgwNzM1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNzQwCQkweDA3NDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV83NDEJCTB4MDc0MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzc0NQkJMHgwNzQ1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNzQ2CQkweDA3NDYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV83NDgJCTB4MDc0OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzc1MAkJMHgwNzUwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNzUxCQkweDA3NTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV83NTIJCTB4MDc1MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzc1NQkJMHgwNzU1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNzYwCQkweDA3NjAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV85MDAJCTB4MDkwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzk2MQkJMHgwOTYxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfOTYyCQkweDA5NjIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV85NjMJCTB4MDk2MworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzUxMDcJCTB4NTEwNworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzUzMDAJCTB4NTMwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzU1MTEJCTB4NTUxMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzU1MTMJCTB4NTUxMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzU1MTgJCTB4NTUxOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzU1NzEJCTB4NTU3MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzU1ODEJCTB4NTU4MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzU1ODIJCTB4NTU4MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzU1OTEJCTB4NTU5MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzU1OTYJCTB4NTU5NgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzU1OTcJCTB4NTU5NworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzU1OTgJCTB4NTU5OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzU2MDAJCTB4NTYwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzYzMDAJCTB4NjMwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzYzMDYJCTB4NjMwNgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzYzMjYJCTB4NjMyNgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzcwMDEJCTB4NzAwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzcwMTIJCTB4NzAxMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzcwMTYJCTB4NzAxNgorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfSFAJCTB4MTAzYworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0hQX1ZJU1VBTElaRV9FRwkweDEwMDUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9IUF9WSVNVQUxJWkVfRlg2CTB4MTAwNgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0hQX1ZJU1VBTElaRV9GWDQJMHgxMDA4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSFBfVklTVUFMSVpFX0ZYMgkweDEwMGEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9IUF9UQUNIWU9OCTB4MTAyOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0hQX1RBQ0hMSVRFCTB4MTAyOQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0hQX0oyNTg1QQkJMHgxMDMwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSFBfSjI1ODVCCQkweDEwMzEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9IUF9KMjk3M0EJCTB4MTA0MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0hQX0oyOTcwQQkJMHgxMDQyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSFBfRElWQQkJMHgxMDQ4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSFBfRElWQV9UT1NDQTEJMHgxMDQ5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSFBfRElWQV9UT1NDQTIJMHgxMDRBCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSFBfRElWQV9NQUVTVFJPCTB4MTA0QgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0hQX1BDSV9MQkEJMHgxMDU0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSFBfUkVPX1NCQQkweDEwZjAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9IUF9SRU9fSU9DCTB4MTBmMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0hQX1ZJU1VBTElaRV9GWEUJMHgxMDhiCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSFBfRElWQV9IQUxGRE9NRQkweDEyMjMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9IUF9ESVZBX0tFWVNUT05FCTB4MTIyNgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0hQX0RJVkFfUE9XRVJCQVIJMHgxMjI3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSFBfWlgxX1NCQQkweDEyMjkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9IUF9aWDFfSU9DCTB4MTIyYQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0hQX1BDSVhfTEJBCTB4MTIyZQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0hQX1NYMTAwMF9JT0MJMHgxMjdjCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSFBfRElWQV9FVkVSRVNUCTB4MTI4MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0hQX0RJVkFfQVVYCTB4MTI5MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0hQX0RJVkFfUk1QMwkweDEzMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9IUF9DSVNTQQkJMHgzMjIwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSFBfQ0lTU0IJCTB4MzIzMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0hQX1pYMl9JT0MJMHg0MDMxCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9QQ1RFQ0gJCTB4MTA0MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BDVEVDSF9SWjEwMDAJMHgxMDAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUENURUNIX1JaMTAwMQkweDEwMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9QQ1RFQ0hfU0FNVVJBSV8wCTB4MzAwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BDVEVDSF9TQU1VUkFJXzEJMHgzMDEwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUENURUNIX1NBTVVSQUlfSURFIDB4MzAyMAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfQVNVU1RFSwkJMHgxMDQzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVNVU1RFS18wNjc1CTB4MDY3NQorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfRFBUCQkweDEwNDQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9EUFQJCTB4YTQwMAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfT1BUSQkJMHgxMDQ1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfT1BUSV85MkMxNzgJMHhjMTc4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfT1BUSV84MkM1NTcJMHhjNTU3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfT1BUSV84MkM1NTgJMHhjNTU4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfT1BUSV84MkM2MjEJMHhjNjIxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfT1BUSV84MkM3MDAJMHhjNzAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfT1BUSV84MkM3MDEJMHhjNzAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfT1BUSV84MkM4MTQJMHhjODE0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfT1BUSV84MkM4MjIJMHhjODIyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfT1BUSV84MkM4NjEJMHhjODYxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfT1BUSV84MkM4MjUJMHhkNTY4CisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9FTFNBCQkweDEwNDgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9FTFNBX01JQ1JPTElOSwkweDEwMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9FTFNBX1FTMzAwMAkweDMwMDAKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1NHUwkJMHgxMDRhCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0dTXzIwMDAJCTB4MDAwOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NHU18xNzY0CQkweDAwMDkKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0JVU0xPR0lDCQkgICAgICAweDEwNEIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9CVVNMT0dJQ19NVUxUSU1BU1RFUl9OQyAweDAxNDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9CVVNMT0dJQ19NVUxUSU1BU1RFUiAgICAweDEwNDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9CVVNMT0dJQ19GTEFTSFBPSU5UICAgICAweDgxMzAKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1RJCQkweDEwNGMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USV9UVlA0MDEwCTB4M2QwNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJX1RWUDQwMjAJMHgzZDA3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfNDQ1MAkJMHg4MDExCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfMTEzMAkJMHhhYzEyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfMTAzMQkJMHhhYzEzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfMTEzMQkJMHhhYzE1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfMTI1MAkJMHhhYzE2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfMTIyMAkJMHhhYzE3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfMTIyMQkJMHhhYzE5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfMTIxMAkJMHhhYzFhCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfMTQ1MAkJMHhhYzFiCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfMTIyNQkJMHhhYzFjCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfMTI1MUEJCTB4YWMxZAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJXzEyMTEJCTB4YWMxZQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJXzEyNTFCCQkweGFjMWYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USV80NDEwCQkweGFjNDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USV80NDUxCQkweGFjNDIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USV80NTEwCQkweGFjNDQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USV80NTIwCQkweGFjNDYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USV8xNDEwCQkweGFjNTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USV8xNDIwCQkweGFjNTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USV8xNDUxQQkJMHhhYzUyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfMTYyMAkJMHhhYzU0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfMTUyMAkJMHhhYzU1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfMTUxMAkJMHhhYzU2CisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9TT05ZCQkweDEwNGQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TT05ZX0NYRDMyMjIJMHg4MDM5CisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9PQUsJCTB4MTA0ZQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX09BS19PVEkxMDcJMHgwMTA3CisKKy8qIFdpbmJvbmQgaGF2ZSB0d28gdmVuZG9yIElEcyEgU2VlIDB4MTBhZCBhcyB3ZWxsICovCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfV0lOQk9ORDIJCTB4MTA1MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1dJTkJPTkQyXzg5Qzk0MAkweDA5NDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9XSU5CT05EMl84OUM5NDBGCTB4NWE1YQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1dJTkJPTkQyXzY2OTIJMHg2NjkyCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9BTklHTUEJCTB4MTA1MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FOSUdNQV9NQzE0NTU3NQkweDAxMDAKKyAgCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfRUZBUgkJMHgxMDU1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRUZBUl9TTEM5MEU2Nl8xCTB4OTEzMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0VGQVJfU0xDOTBFNjZfMAkweDk0NjAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9FRkFSX1NMQzkwRTY2XzIJMHg5NDYyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRUZBUl9TTEM5MEU2Nl8zCTB4OTQ2MworCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfTU9UT1JPTEEJCTB4MTA1NworI2RlZmluZSBQQ0lfVkVORE9SX0lEX01PVE9ST0xBX09PUFMJMHgxNTA3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTU9UT1JPTEFfTVBDMTA1CTB4MDAwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01PVE9ST0xBX01QQzEwNgkweDAwMDIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NT1RPUk9MQV9NUEMxMDcJMHgwMDA0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTU9UT1JPTEFfUkFWRU4JMHg0ODAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTU9UT1JPTEFfRkFMQ09OCTB4NDgwMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01PVE9ST0xBX0hBV0sJMHg0ODAzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTU9UT1JPTEFfQ1BYODIxNgkweDQ4MDYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NT1RPUk9MQV9IQVJSSUVSCTB4NDgwYgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01PVE9ST0xBX01QQzUyMDAJMHg1ODAzCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9QUk9NSVNFCQkweDEwNWEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9QUk9NSVNFXzIwMjY1CTB4MGQzMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BST01JU0VfMjAyNjcJMHg0ZDMwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUFJPTUlTRV8yMDI0NgkweDRkMzMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9QUk9NSVNFXzIwMjYyCTB4NGQzOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BST01JU0VfMjAyNjMJMHgwRDM4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUFJPTUlTRV8yMDI2OAkweDRkNjgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9QUk9NSVNFXzIwMjY4UgkweDYyNjgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9QUk9NSVNFXzIwMjY5CTB4NGQ2OQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BST01JU0VfMjAyNzAJMHg2MjY4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUFJPTUlTRV8yMDI3MQkweDYyNjkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9QUk9NSVNFXzIwMjc1CTB4MTI3NQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BST01JU0VfMjAyNzYJMHg1Mjc1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUFJPTUlTRV8yMDI3NwkweDcyNzUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9QUk9NSVNFXzUzMDAJMHg1MzAwCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9OOQkJMHgxMDVkCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTjlfSTEyOAkJMHgyMzA5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTjlfSTEyOF8yCQkweDIzMzkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OOV9JMTI4X1QyUgkweDQ5M2QKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1VNQwkJMHgxMDYwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVU1DX1VNODY3M0YJMHgwMTAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVU1DX1VNODg5MUEJMHgwODkxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVU1DX1VNODg4NkJGCTB4NjczYQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1VNQ19VTTg4ODZBCTB4ODg2YQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1VNQ19VTTg4ODFGCTB4ODg4MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1VNQ19VTTg4ODZGCTB4ODg4NgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1VNQ19VTTkwMTdGCTB4OTAxNworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1VNQ19VTTg4ODZOCTB4ZTg4NgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1VNQ19VTTg4OTFOCTB4ZTg5MQorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfWAkJCTB4MTA2MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1hfQUdYMDE2CQkweDAwMDEKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX01ZTEVYCQkweDEwNjkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NWUxFWF9EQUM5NjBfUAkweDAwMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NWUxFWF9EQUM5NjBfUEQJMHgwMDAyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTVlMRVhfREFDOTYwX1BHCTB4MDAxMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01ZTEVYX0RBQzk2MF9MQQkweDAwMjAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NWUxFWF9EQUM5NjBfTFAJMHgwMDUwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTVlMRVhfREFDOTYwX0JBCTB4QkE1NgorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfUElDT1AJCTB4MTA2NgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BJQ09QX1BUODZDNTJYCTB4MDAwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BJQ09QX1BUODBDNTI0CTB4ODAwMgorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfQVBQTEUJCTB4MTA2YgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FQUExFX0JBTkRJVAkweDAwMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BUFBMRV9HQwkJMHgwMDAyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVBQTEVfSFlEUkEJMHgwMDBlCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVBQTEVfVU5JX05fRlcJMHgwMDE4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVBQTEVfS0xfVVNCCTB4MDAxOQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FQUExFX1VOSV9OX0FHUAkweDAwMjAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BUFBMRV9VTklfTl9HTUFDCTB4MDAyMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FQUExFX0tFWUxBUkdPCTB4MDAyMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FQUExFX1VOSV9OX0dNQUNQCTB4MDAyNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FQUExFX0tFWUxBUkdPX1AJMHgwMDI1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVBQTEVfS0xfVVNCX1AJMHgwMDI2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVBQTEVfVU5JX05fQUdQX1AJMHgwMDI3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVBQTEVfVU5JX05fQUdQMTUJMHgwMDJkCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVBQTEVfVU5JX05fRlcyCTB4MDAzMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FQUExFX1VOSV9OX0dNQUMyCTB4MDAzMgorI2RlZmluZSBQQ0lfREVWSUVDX0lEX0FQUExFX1VOSV9OX0FUQQkweDAwMzMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BUFBMRV9VTklfTl9BR1AyCTB4MDAzNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FQUExFX0lQSURfQVRBMTAwCTB4MDAzYgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FQUExFX0tFWUxBUkdPX0kJMHgwMDNlCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVBQTEVfSzJfQVRBMTAwCTB4MDA0MworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FQUExFX1UzX0FHUAkweDAwNGIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BUFBMRV9LMl9HTUFDCTB4MDA0YworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FQUExFX1NIX0FUQSAgICAgIDB4MDA1MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FQUExFX1NIX1NVTkdFTSAgIDB4MDA1MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FQUExFX1NIX0ZXICAgICAgIDB4MDA1MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FQUExFX1UzTF9BR1AJMHgwMDU4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVBQTEVfVTNIX0FHUAkweDAwNTkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BUFBMRV9USUdPTjMJMHgxNjQ1CisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9ZQU1BSEEJCTB4MTA3MworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1lBTUFIQV83MjQJMHgwMDA0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfWUFNQUhBXzcyNEYJMHgwMDBkCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfWUFNQUhBXzc0MAkweDAwMGEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ZQU1BSEFfNzQwQwkweDAwMGMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ZQU1BSEFfNzQ0CTB4MDAxMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1lBTUFIQV83NTQJMHgwMDEyCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9ORVhHRU4JCTB4MTA3NAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05FWEdFTl84MkM1MDEJMHg0ZTc4CisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9RTE9HSUMJCTB4MTA3NworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1AxMDIwCTB4MTAyMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1AxMDIyCTB4MTAyMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1AyMTAwCTB4MjEwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1AyMjAwCTB4MjIwMAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfQ1lSSVgJCTB4MTA3OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NZUklYXzU1MTAJMHgwMDAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ1lSSVhfUENJX01BU1RFUgkweDAwMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DWVJJWF81NTIwCTB4MDAwMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NZUklYXzU1MzBfTEVHQUNZCTB4MDEwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NZUklYXzU1MzBfU01JCTB4MDEwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NZUklYXzU1MzBfSURFCTB4MDEwMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NZUklYXzU1MzBfQVVESU8JMHgwMTAzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ1lSSVhfNTUzMF9WSURFTwkweDAxMDQKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0xFQURURUsJCTB4MTA3ZAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xFQURURUtfODA1CTB4MDAwMAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfSU5URVJQSEFTRQkweDEwN2UKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFUlBIQVNFXzU1MjYJMHgwMDA0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URVJQSEFTRV81NXg2CTB4MDAwNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVSUEhBU0VfNTU3NQkweDAwMDgKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0NPTlRBUQkJMHgxMDgwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ09OVEFRXzgyQzU5OQkweDA2MDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DT05UQVFfODJDNjkzCTB4YzY5MworCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfRk9SRVgJCTB4MTA4MworCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfT0xJQ09NCQkweDEwOGQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9PTElDT01fT0MzMTM2CTB4MDAwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX09MSUNPTV9PQzIzMTUJMHgwMDExCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfT0xJQ09NX09DMjMyNQkweDAwMTIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9PTElDT01fT0MyMTgzCTB4MDAxMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX09MSUNPTV9PQzIzMjYJMHgwMDE0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfT0xJQ09NX09DNjE1MQkweDAwMjEKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1NVTgkJMHgxMDhlCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU1VOX0VCVVMJCTB4MTAwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NVTl9IQVBQWU1FQUwJMHgxMDAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU1VOX1JJT19FQlVTCTB4MTEwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NVTl9SSU9fR0VNCTB4MTEwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NVTl9SSU9fMTM5NAkweDExMDIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TVU5fUklPX1VTQgkweDExMDMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TVU5fR0VNCQkweDJiYWQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TVU5fU0lNQkEJCTB4NTAwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NVTl9QQk0JCTB4ODAwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NVTl9TQ0hJWk8JMHg4MDAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU1VOX1NBQlJFCQkweGEwMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TVU5fSFVNTUlOR0JJUkQJMHhhMDAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU1VOX1RPTUFUSUxMTwkweGE4MDEKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0NNRAkJMHgxMDk1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ01EXzY0MAkJMHgwNjQwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ01EXzY0MwkJMHgwNjQzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ01EXzY0NgkJMHgwNjQ2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ01EXzY0NwkJMHgwNjQ3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ01EXzY0OAkJMHgwNjQ4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ01EXzY0OQkJMHgwNjQ5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ01EXzY3MAkJMHgwNjcwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ01EXzY4MAkJMHgwNjgwCisKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSUlfNjgwCQkweDA2ODAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSUlfMzExMgkJMHgzMTEyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lJXzEyMTBTQQkweDAyNDAKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1ZJU0lPTgkJMHgxMDk4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklTSU9OX1FEODUwMAkweDAwMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSVNJT05fUUQ4NTgwCTB4MDAwMgorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfQlJPT0tUUkVFCQkweDEwOWUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9CUk9PS1RSRUVfODQ4CTB4MDM1MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0JST09LVFJFRV84NDlBCTB4MDM1MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0JST09LVFJFRV84NzhfMQkweDAzNmUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9CUk9PS1RSRUVfODc4CTB4MDg3OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0JST09LVFJFRV84NDc0CTB4ODQ3NAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfU0lFUlJBCQkweDEwYTgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSUVSUkFfU1RCCTB4MDAwMAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfU0dJCQkweDEwYTkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TR0lfSU9DMwkJMHgwMDAzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0dJX0lPQzQJCTB4MTAwYQorI2RlZmluZSBQQ0lfVkVORE9SX0lEX1NHSV9MSVRISVVNCTB4MTAwMgorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfQUNDCQkweDEwYWEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BQ0NfMjA1NgkJMHgwMDAwCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9XSU5CT05ECQkweDEwYWQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9XSU5CT05EXzgzNzY5CTB4MDAwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1dJTkJPTkRfODJDMTA1CTB4MDEwNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1dJTkJPTkRfODNDNTUzCTB4MDU2NQorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfREFUQUJPT0sJCTB4MTBiMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0RBVEFCT09LXzg3MTQ0CTB4YjEwNgorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfUExYCQkweDEwYjUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9QTFhfUjY4NQkJMHgxMDMwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUExYX1JPTVVMVVMJMHgxMDZhCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUExYX1NQQ09NODAwCTB4MTA3NgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BMWF8xMDc3CQkweDEwNzcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9QTFhfU1BDT00yMDAJMHgxMTAzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUExYX0RKSU5OX0lUT08JMHgxMTUxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUExYX1I3NTMJCTB4MTE1MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BMWF85MDMwCQkweDkwMzAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9QTFhfOTA1MAkJMHg5MDUwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUExYXzkwNjAJCTB4OTA2MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BMWF85MDYwRVMJMHg5MDZFCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUExYXzkwNjBTRAkweDkwNkQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9QTFhfOTA4MAkJMHg5MDgwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUExYX0dURUtfU0VSSUFMMgkweGEwMDEKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX01BREdFCQkweDEwYjYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NQURHRV9NSzIJCTB4MDAwMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01BREdFX0MxNTVTCTB4MTAwMQorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfM0NPTQkJMHgxMGI3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfM0NPTV8zQzk4NQkweDAwMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF8zQ09NXzNDOTQwCTB4MTcwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEXzNDT01fM0MzMzkJMHgzMzkwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfM0NPTV8zQzM1OQkweDM1OTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF8zQ09NXzNDNTkwCTB4NTkwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEXzNDT01fM0M1OTVUWAkweDU5NTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF8zQ09NXzNDNTk1VDQJMHg1OTUxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfM0NPTV8zQzU5NU1JSQkweDU5NTIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF8zQ09NXzNDOTQwQgkweDgwZWIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF8zQ09NXzNDOTAwVFBPCTB4OTAwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEXzNDT01fM0M5MDBDT01CTwkweDkwMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF8zQ09NXzNDOTA1VFgJMHg5MDUwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfM0NPTV8zQzkwNVQ0CTB4OTA1MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEXzNDT01fM0M5MDVCX1RYCTB4OTA1NQorI2RlZmluZSBQQ0lfREVWSUNFX0lEXzNDT01fM0NSOTkwCTB4OTkwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEXzNDT01fM0NSOTkwX1RYXzk1CTB4OTkwMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEXzNDT01fM0NSOTkwX1RYXzk3CTB4OTkwMworI2RlZmluZSBQQ0lfREVWSUNFX0lEXzNDT01fM0NSOTkwQgkweDk5MDQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF8zQ09NXzNDUjk5MF9GWAkweDk5MDUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF8zQ09NXzNDUjk5MFNWUjk1CTB4OTkwOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEXzNDT01fM0NSOTkwU1ZSOTcJMHg5OTA5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfM0NPTV8zQ1I5OTBTVlIJMHg5OTBhCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9TTUMJCTB4MTBiOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NNQ19FUElDMTAwCTB4MDAwNQorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfQUwJCTB4MTBiOQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FMX00xNDQ1CQkweDE0NDUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTF9NMTQ0OQkJMHgxNDQ5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQUxfTTE0NTEJCTB4MTQ1MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FMX00xNDYxCQkweDE0NjEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTF9NMTQ4OQkJMHgxNDg5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQUxfTTE1MTEJCTB4MTUxMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FMX00xNTEzCQkweDE1MTMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTF9NMTUyMQkJMHgxNTIxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQUxfTTE1MjMJCTB4MTUyMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FMX00xNTMxCQkweDE1MzEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTF9NMTUzMwkJMHgxNTMzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQUxfTTE1MzUgCQkweDE1MzUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTF9NMTU0MQkJMHgxNTQxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQUxfTTE1NDMJCTB4MTU0MworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FMX00xNTYzCQkweDE1NjMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTF9NMTYyMQkJMHgxNjIxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQUxfTTE2MzEJCTB4MTYzMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FMX00xNjMyCQkweDE2MzIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTF9NMTY0MQkJMHgxNjQxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQUxfTTE2NDQJCTB4MTY0NAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FMX00xNjQ3CQkweDE2NDcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTF9NMTY1MQkJMHgxNjUxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQUxfTTE2NzEJCTB4MTY3MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FMX00xNjgxCQkweDE2ODEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTF9NMTY4MwkJMHgxNjgzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQUxfTTE2ODkJCTB4MTY4OQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FMX00zMzA3CQkweDMzMDcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTF9NNDgwMwkJMHg1MjE1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQUxfTTUyMTkJCTB4NTIxOQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FMX001MjI4CQkweDUyMjgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTF9NNTIyOQkJMHg1MjI5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQUxfTTUyMzcJCTB4NTIzNworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FMX001MjQzCQkweDUyNDMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTF9NNTQ1MQkJMHg1NDUxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQUxfTTcxMDEJCTB4NzEwMQorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfTUlUU1VCSVNISQkweDEwYmEKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1NVUkVDT00JCTB4MTBiZAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NVUkVDT01fTkUzNAkweDBlMzQKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX05FT01BR0lDCQkweDEwYzgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ORU9NQUdJQ19NQUdJQ0dSQVBIX05NMjA3MCAweDAwMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ORU9NQUdJQ19NQUdJQ0dSQVBIXzEyOFYgMHgwMDAyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVPTUFHSUNfTUFHSUNHUkFQSF8xMjhaViAweDAwMDMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ORU9NQUdJQ19NQUdJQ0dSQVBIX05NMjE2MCAweDAwMDQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ORU9NQUdJQ19NQUdJQ01FRElBXzI1NkFWICAgICAgIDB4MDAwNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05FT01BR0lDX01BR0lDR1JBUEhfMTI4WlZQTFVTICAgMHgwMDgzCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9BU1AJCTB4MTBjZAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FTUF9BQlA5NDAJMHgxMjAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVNQX0FCUDk0MFUJMHgxMzAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVNQX0FCUDk0MFVXCTB4MjMwMAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfTUFDUk9OSVgJCTB4MTBkOQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01BQ1JPTklYX01YOTg3MTMJMHgwNTEyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUFDUk9OSVhfTVg5ODd4NQkweDA1MzEKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1RDT05SQUQJCTB4MTBkYQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RDT05SQURfVE9LRU5SSU5HCTB4MDUwOAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfQ0VSTgkJMHgxMGRjCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ0VSTl9TUFNCX1BNQwkweDAwMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DRVJOX1NQU0JfUENJCTB4MDAwMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NFUk5fSElQUElfRFNUCTB4MDAyMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NFUk5fSElQUElfU1JDCTB4MDAyMgorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfTlZJRElBCQkJMHgxMGRlCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX1ROVAkJMHgwMDIwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX1ROVDIJCTB4MDAyOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9VVE5UMgkJMHgwMDI5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX1ROVF9VTktOT1dOICAgICAgICAweDAwMmEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfVlROVDIJCTB4MDAyQworI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9VVlROVDIJCTB4MDAyRAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0VfTUNQMDRfSURFCTB4MDAzNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0VfTUNQMDRfU0FUQQkweDAwMzYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzEwCQkweDAwMzcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzExCQkweDAwMzgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFX01DUDA0X1NBVEEyCTB4MDAzZQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFXzY4MDBfVUxUUkEgMHgwMDQwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0VfNjgwMCAgICAgICAweDAwNDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV82ODAwX0xFICAgIDB4MDA0MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFXzY4MDBfR1QgICAgMHgwMDQ1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX1FVQURST19GWF80MDAwICAgICAweDAwNEUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFNF9TTUJVUwkweDAwNTIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFX0NLODA0X0lERQkweDAwNTMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFX0NLODA0X1NBVEEJMHgwMDU0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRV9DSzgwNF9TQVRBMgkweDAwNTUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzgJCTB4MDA1NgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfOQkJMHgwMDU3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0NLODA0X0FVRElPCTB4MDA1OQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0UyX1NNQlVTCTB4MDA2NAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0UyX0lERQkweDAwNjUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzIJCTB4MDA2NgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9NQ1AyX0FVRElPCQkweDAwNmEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFMlNfU01CVVMJMHgwMDg0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRTJTX0lERQkweDAwODUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzQJCTB4MDA4NgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfNQkJMHgwMDhjCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRTJTX1NBVEEJMHgwMDhlCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0lUTlQyCQkweDAwQTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9HRUZPUkNFXzY4MDBBICAgICAgICAgICAgIDB4MDBjMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0dFRk9SQ0VfNjgwMEFfTEUgICAgICAgICAgMHgwMGMyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfR0VGT1JDRV9HT182ODAwICAgICAgICAgICAweDAwYzgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9HRUZPUkNFX0dPXzY4MDBfVUxUUkEgICAgIDB4MDBjOQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1FVQURST19GWF9HTzE0MDAgICAgICAgICAgMHgwMGNjCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUVVBRFJPX0ZYXzE0MDAgICAgICAgICAgICAweDAwY2UKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFMwkJMHgwMGQxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX01DUDNfQVVESU8JCTB4MDBkYQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0UzX1NNQlVTCTB4MDBkNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0UzX0lERQkweDAwZDUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzMJCTB4MDBkNgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9NQ1AzX0FVRElPCQkweDAwZGEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzcJCTB4MDBkZgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0UzUwkJMHgwMGUxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRTNTX1NBVEEJMHgwMGUzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRTNTX1NNQlVTCTB4MDBlNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0UzU19JREUJMHgwMGU1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF82CQkweDAwZTYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFM1NfU0FUQTIJMHgwMGVlCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0VfU0RSCTB4MDEwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFX0REUgkweDAxMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfUVVBRFJPCQkweDAxMDMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRTJfTVgJMHgwMTEwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0UyX01YMgkweDAxMTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRTJfR08JMHgwMTEyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX1FVQURSTzJfTVhSCTB4MDExMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFXzY2MDBfR1QJMHgwMTQwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0VfNjYwMAkweDAxNDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV82NjEwX1hMCTB4MDE0NQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9RVUFEUk9fRlhfNTQwCTB4MDE0RQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFXzYyMDAJMHgwMTRGCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0UyX0dUUwkweDAxNTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRTJfR1RTMgkweDAxNTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRTJfVUxUUkEJMHgwMTUyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX1FVQURSTzJfUFJPCTB4MDE1MworI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFXzYyMDBfVFVSQk9DQUNIRSAweDAxNjEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9HT182MjAwICAgIDB4MDE2NAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFX0dPXzYyNTAgICAgMHgwMTY2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0VfR09fNjIwMF8xICAweDAxNjcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9HT182MjUwXzEgIDB4MDE2OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFNF9NWF80NjAJMHgwMTcwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0U0X01YXzQ0MAkweDAxNzEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRTRfTVhfNDIwCTB4MDE3MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFNF9NWF80NDBfU0UJMHgwMTczCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0U0XzQ0MF9HTwkweDAxNzQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRTRfNDIwX0dPCTB4MDE3NQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFNF80MjBfR09fTTMyIDB4MDE3NgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFNF80NjBfR08gICAgMHgwMTc3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX1FVQURSTzRfNTAwWEdMCTB4MDE3OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFNF80NDBfR09fTTY0IDB4MDE3OQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9RVUFEUk80XzIwMAkweDAxN0EKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfUVVBRFJPNF81NTBYR0wJMHgwMTdCCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX1FVQURSTzRfNTAwX0dPR0wJMHgwMTdDCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0U0XzQxMF9HT19NMTYgMHgwMTdECisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0U0X01YXzQ0MF84WCAweDAxODEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRTRfTVhfNDQwU0VfOFggMHgwMTgyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0U0X01YXzQyMF84WCAweDAxODMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRTRfNDQ4X0dPICAgIDB4MDE4NgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFNF80ODhfR08gICAgMHgwMTg3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX1FVQURSTzRfNTgwX1hHTCAgICAweDAxODgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRTRfTVhfTUFDICAgIDB4MDE4OQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9RVUFEUk80XzI4MF9OVlMgICAgMHgwMThBCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX1FVQURSTzRfMzgwX1hHTCAgICAweDAxOEIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfSUdFRk9SQ0UyCQkweDAxYTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFCQkweDAxYTQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTUNQMV9BVURJTwkJMHgwMWIxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRV9TTUJVUwkweDAxYjQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFX0lERQkJMHgwMWJjCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8xCQkweDAxYzMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFMgkJMHgwMWUwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0UzCQkweDAyMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRTNfMQkJMHgwMjAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0UzXzIJCTB4MDIwMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9RVUFEUk9fRERDCQkweDAyMDMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV82ODAwQiAgICAgIDB4MDIxMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFXzY4MDBCX0xFICAgMHgwMjEyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0VfNjgwMEJfR1QgICAweDAyMTUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRTRfVElfNDYwMAkweDAyNTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRTRfVElfNDQwMAkweDAyNTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRTRfVElfNDIwMAkweDAyNTMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfUVVBRFJPNF85MDBYR0wJMHgwMjU4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX1FVQURSTzRfNzUwWEdMCTB4MDI1OQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9RVUFEUk80XzcwMFhHTAkweDAyNUIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRTRfVElfNDgwMAkweDAyODAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRTRfVElfNDgwMF84WCAgICAweDAyODEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRTRfVElfNDgwMFNFICAgICAweDAyODIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRTRfNDIwMF9HTyAgICAgICAweDAyODYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfUVVBRFJPNF85ODBfWEdMICAgICAgICAweDAyODgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfUVVBRFJPNF83ODBfWEdMICAgICAgICAweDAyODkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfUVVBRFJPNF83MDBfR09HTCAgICAgICAweDAyOEMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9GWF81ODAwX1VMVFJBICAweDAzMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9GWF81ODAwICAgICAgICAweDAzMDIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfUVVBRFJPX0ZYXzIwMDAgICAgICAgICAweDAzMDgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfUVVBRFJPX0ZYXzEwMDAgICAgICAgICAweDAzMDkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9GWF81NjAwX1VMVFJBICAweDAzMTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9GWF81NjAwICAgICAgICAweDAzMTIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9GWF81NjAwU0UgICAgICAweDAzMTQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9GWF9HTzU2MDAgICAgICAweDAzMUEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9GWF9HTzU2NTAgICAgICAweDAzMUIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfUVVBRFJPX0ZYX0dPNzAwICAgICAgICAweDAzMUMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9GWF81MjAwICAgICAgICAweDAzMjAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9GWF81MjAwX1VMVFJBICAweDAzMjEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9GWF81MjAwXzEgICAgICAweDAzMjIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9GWF81MjAwU0UgICAgICAweDAzMjMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9GWF9HTzUyMDAgICAgICAweDAzMjQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9GWF9HTzUyNTAgICAgICAweDAzMjUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9GWF81NTAwICAgICAgICAweDAzMjYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9GWF81MTAwICAgICAgICAweDAzMjcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9GWF9HTzUyNTBfMzIgICAweDAzMjgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9GWF9HT181MjAwCSAgICAweDAzMjkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfUVVBRFJPX05WU18yODBfUENJICAgICAweDAzMkEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfUVVBRFJPX0ZYXzUwMCAgICAgICAgICAweDAzMkIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9GWF9HTzUzMDAgICAgICAweDAzMkMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9GWF9HTzUxMDAgICAgICAweDAzMkQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9GWF81OTAwX1VMVFJBICAweDAzMzAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9GWF81OTAwICAgICAgICAweDAzMzEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9GWF81OTAwWFQgICAgICAweDAzMzIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9GWF81OTUwX1VMVFJBICAweDAzMzMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9GWF81OTAwWlQgICAgICAweDAzMzQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfUVVBRFJPX0ZYXzMwMDAgICAgICAgICAweDAzMzgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfUVVBRFJPX0ZYXzcwMCAgICAgICAgICAweDAzM0YKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9GWF81NzAwX1VMVFJBICAweDAzNDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9GWF81NzAwICAgICAgICAweDAzNDIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9GWF81NzAwTEUgICAgICAweDAzNDMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9GWF81NzAwVkUgICAgICAweDAzNDQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9GWF9HTzU3MDBfMSAgICAweDAzNDcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9GWF9HTzU3MDBfMiAgICAweDAzNDgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfUVVBRFJPX0ZYX0dPMTAwMCAgICAgICAweDAzNEMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfUVVBRFJPX0ZYXzExMDAgICAgICAgICAweDAzNEUKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0lNUwkJMHgxMGUwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU1TXzg4NDkJCTB4ODg0OQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lNU19UVDEyOAkJMHg5MTI4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU1TX1RUM0QJCTB4OTEzNQorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfVEVLUkFNMgkJMHgxMGUxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVEVLUkFNMl82OTBjCTB4NjkwYworCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfVFVORFJBCQkweDEwZTMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9UVU5EUkFfQ0E5MUMwNDIJMHgwMDAwCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9BTUNDCQkweDEwZTgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTUNDX01ZUklORVQJMHg4MDQzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1DQ19QQVJBU1RBVElPTgkweDgwNjIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTUNDX1M1OTMzCTB4ODA3ZAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNQ0NfUzU5MzNfSEVQQzMJMHg4MDljCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9JTlRFUkcJCTB4MTBlYQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVSR18xNjgwCTB4MTY4MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVSR18xNjgyCTB4MTY4MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVSR18yMDAwCTB4MjAwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVSR18yMDEwCTB4MjAxMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVSR181MDAwCTB4NTAwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVSR181MDUwCTB4NTA1MAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfUkVBTFRFSwkJMHgxMGVjCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUkVBTFRFS184MDI5CTB4ODAyOQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1JFQUxURUtfODEyOQkweDgxMjkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9SRUFMVEVLXzgxMzkJMHg4MTM5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUkVBTFRFS184MTY5CTB4ODE2OQorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfWElMSU5YCQkweDEwZWUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9UVVJCT1BBTQkJMHg0MDIwCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9UUlVFVklTSU9OCTB4MTBmYQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RSVUVWSVNJT05fVDEwMDAJMHgwMDBjCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9JTklUCQkweDExMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTklUXzMyMFAJCTB4OTEwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOSVRfMzYwUAkJMHg5NTAwCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9DUkVBVElWRQkJMHgxMTAyIC8vIGR1cGxpY2F0ZTogRUNUSVZBCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ1JFQVRJVkVfRU1VMTBLMQkweDAwMDIKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0VDVElWQQkJMHgxMTAyIC8vIGR1cGxpY2F0ZTogQ1JFQVRJVkUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9FQ1RJVkFfRVYxOTM4CTB4ODkzOAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfVFRJCQkweDExMDMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9UVElfSFBUMzQzCTB4MDAwMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RUSV9IUFQzNjYJMHgwMDA0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVFRJX0hQVDM3MgkweDAwMDUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9UVElfSFBUMzAyCTB4MDAwNgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RUSV9IUFQzNzEJMHgwMDA3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVFRJX0hQVDM3NAkweDAwMDgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9UVElfSFBUMzcyTgkweDAwMDkJLy8gYXBwYXJlbnRseSBhIDM3Mk4gdmFyaWFudD8KKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1ZJQQkJMHgxMTA2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzg3NjNfMAkweDAxOTgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODM4MF8wCTB4MDIwNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV8zMjM4XzAJMHgwMjM4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBX1BUODgwCQkweDAyNTgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfUFg4WDBfMAkweDAyNTkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfMzI2OV8wCTB4MDI2OQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV9LOFQ4MDBQUk9fMAkweDAyODIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODM2M18wCTB4MDMwNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84MzcxXzAJMHgwMzkxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzg1MDFfMAkweDA1MDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODJDNTA1CTB4MDUwNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84MkM1NjEJMHgwNTYxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgyQzU4Nl8xCTB4MDU3MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84MkM1NzYJMHgwNTc2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgyQzU4NQkweDA1ODUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODJDNTg2XzAJMHgwNTg2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgyQzU5NQkweDA1OTUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODJDNTk2CTB4MDU5NgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84MkM1OTdfMAkweDA1OTcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODJDNTk4XzAJMHgwNTk4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzg2MDFfMAkweDA2MDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODYwNV8wCTB4MDYwNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84MkM2ODAJMHgwNjgwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgyQzY4NgkweDA2ODYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODJDNjkxXzAJMHgwNjkxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgyQzY5MwkweDA2OTMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODJDNjkzXzEJMHgwNjk4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgyQzkyNgkweDA5MjYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODJDNTc2XzEJMHgxNTcxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgyQzU5NV85NwkweDE1OTUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODJDNTg2XzIJMHgzMDM4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgyQzU4Nl8zCTB4MzA0MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV82MzA1CQkweDMwNDQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODJDNTk2XzMJMHgzMDUwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgyQzU5NkJfMwkweDMwNTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODJDNjg2XzQJMHgzMDU3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgyQzY4Nl81CTB4MzA1OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84MjMzXzUJMHgzMDU5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgyMzNfNwkweDMwNjUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODJDNjg2XzYJMHgzMDY4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgyMzNfMAkweDMwNzQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODYzM18wCTB4MzA5MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84MzY3XzAJMHgzMDk5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzg2NTNfMAkweDMxMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODYyMgkJMHgzMTAyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgyMzNDXzAJMHgzMTA5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgzNjEJCTB4MzExMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV9YTTI2NgkJMHgzMTE2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzYxMlgJCTB4MzExOQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84NjJYXzAJMHgzMTIzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzg3NTNfMAkweDMxMjgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODIzM0EJCTB4MzE0NworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84NzAzXzUxXzAJMHgzMTQ4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgyMzdfU0FUQQkweDMxNDkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfWE4yNjYJCTB4MzE1NgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84NzU0Q18wCTB4MzE2OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84MjM1CQkweDMxNzcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfUDROMzMzCTB4MzE3OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84Mzg1XzAJMHgzMTg4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgzNzdfMAkweDMxODkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODM3OF8wCTB4MzIwNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84NzgzXzAJMHgzMjA4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBX1A0TTQwMAkweDMyMDkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODIzNwkJMHgzMjI3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzMyOTZfMAkweDAyOTYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODZDMTAwQQkweDYxMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODIzMQkJMHg4MjMxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgyMzFfNAkweDgyMzUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODM2NV8xCTB4ODMwNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84MzcxXzEJMHg4MzkxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzg1MDFfMQkweDg1MDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODJDNTk3XzEJMHg4NTk3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgyQzU5OF8xCTB4ODU5OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84NjAxXzEJMHg4NjAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzg1MDVfMQkweDg2MDUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODYzM18xCTB4QjA5MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84MzY3XzEJMHhCMDk5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBX1A0WDI2Nl8xCTB4QjEwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84NjE1XzEJMHhCMTAzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgzNjFfMQkweEIxMTIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODIzNV8xCTB4QjE2OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84MzhYXzEJMHhCMTg4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgzXzg3WFhfMQkweEIxOTgKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1NJRU1FTlMgICAgICAgICAgIDB4MTEwQQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJRU1FTlNfRFNDQzQgICAgIDB4MjEwMgorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfU01DMgkJMHgxMTEzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU01DMl8xMjExVFgJMHgxMjExCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9WT1JURVgJCTB4MTExOQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZPUlRFWF9HRFQ2MHgwCTB4MDAwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZPUlRFWF9HRFQ2MDAwQgkweDAwMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WT1JURVhfR0RUNngxMAkweDAwMDIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WT1JURVhfR0RUNngyMAkweDAwMDMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WT1JURVhfR0RUNjUzMAkweDAwMDQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WT1JURVhfR0RUNjU1MAkweDAwMDUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WT1JURVhfR0RUNngxNwkweDAwMDYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WT1JURVhfR0RUNngyNwkweDAwMDcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WT1JURVhfR0RUNjUzNwkweDAwMDgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WT1JURVhfR0RUNjU1NwkweDAwMDkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WT1JURVhfR0RUNngxNQkweDAwMGEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WT1JURVhfR0RUNngyNQkweDAwMGIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WT1JURVhfR0RUNjUzNQkweDAwMGMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WT1JURVhfR0RUNjU1NQkweDAwMGQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WT1JURVhfR0RUNngxN1JQCTB4MDEwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZPUlRFWF9HRFQ2eDI3UlAJMHgwMTAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVk9SVEVYX0dEVDY1MzdSUAkweDAxMDIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WT1JURVhfR0RUNjU1N1JQCTB4MDEwMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZPUlRFWF9HRFQ2eDExUlAJMHgwMTA0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVk9SVEVYX0dEVDZ4MjFSUAkweDAxMDUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WT1JURVhfR0RUNngxN1JQMQkweDAxMTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WT1JURVhfR0RUNngyN1JQMQkweDAxMTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WT1JURVhfR0RUNjUzN1JQMQkweDAxMTIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WT1JURVhfR0RUNjU1N1JQMQkweDAxMTMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WT1JURVhfR0RUNngxMVJQMQkweDAxMTQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WT1JURVhfR0RUNngyMVJQMQkweDAxMTUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WT1JURVhfR0RUNngxN1JQMgkweDAxMjAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WT1JURVhfR0RUNngyN1JQMgkweDAxMjEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WT1JURVhfR0RUNjUzN1JQMgkweDAxMjIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WT1JURVhfR0RUNjU1N1JQMgkweDAxMjMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WT1JURVhfR0RUNngxMVJQMgkweDAxMjQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WT1JURVhfR0RUNngyMVJQMgkweDAxMjUKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0VGCQkweDExMWEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9FRl9BVE1fRlBHQQkweDAwMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9FRl9BVE1fQVNJQwkweDAwMDIKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9FRl9BVE1fTEFOQUkyCTB4MDAwMworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0VGX0FUTV9MQU5BSUhCCTB4MDAwNQorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfSURUCQkweDExMWQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JRFRfSURUNzcyMDEJMHgwMDAxCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9GT1JFCQkweDExMjcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9GT1JFX1BDQTIwMFBDCTB4MDIxMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0ZPUkVfUENBMjAwRQkweDAzMDAKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0lNQUdJTkdURUNICTB4MTEyZgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lNQUdJTkdURUNIX0lDUENJCTB4MDAwMAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfUEhJTElQUwkJMHgxMTMxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTQ1CTB4NzE0NQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzE0NgkweDcxNDYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTk3MzAJMHg5NzMwCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9FSUNPTgkJMHgxMTMzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRUlDT05fRElWQTIwUFJPCTB4ZTAwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0VJQ09OX0RJVkEyMAkweGUwMDIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9FSUNPTl9ESVZBMjBQUk9fVQkweGUwMDMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9FSUNPTl9ESVZBMjBfVQkweGUwMDQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9FSUNPTl9ESVZBMjAxCTB4ZTAwNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0VJQ09OX0RJVkEyMDIJMHhlMDBiCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRUlDT05fTUFFU1RSQQkweGUwMTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9FSUNPTl9NQUVTVFJBUQkweGUwMTIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9FSUNPTl9NQUVTVFJBUV9VCTB4ZTAxMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0VJQ09OX01BRVNUUkFQCTB4ZTAxNAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfWklBVEVDSAkJMHgxMTM4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfWklBVEVDSF81NTUwX0hDCTB4NTU1MAorIAorI2RlZmluZSBQQ0lfVkVORE9SX0lEX0NZQ0xPTkUJCTB4MTEzYworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NZQ0xPTkVfU0RLCTB4MDAwMQorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfQUxMSUFOQ0UJCTB4MTE0MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FMTElBTkNFX1BST01PVElPCTB4MzIxMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FMTElBTkNFX1BST1ZJREVPCTB4NjQyMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FMTElBTkNFX0FUMjQJMHg2NDI0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQUxMSUFOQ0VfQVQzRAkweDY0M2QKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1NZU0tPTk5FQ1QJMHgxMTQ4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU1lTS09OTkVDVF9GUAkweDQwMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TWVNLT05ORUNUX1RSCTB4NDIwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NZU0tPTk5FQ1RfR0UJMHg0MzAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU1lTS09OTkVDVF9ZVQkweDQzMjAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TWVNLT05ORUNUXzlEWFgJMHg0NDAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU1lTS09OTkVDVF85TVhYCTB4NDUwMAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfVk1JQwkJMHgxMTRhCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVk1JQ19WTUUJCTB4NzU4NworCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfRElHSQkJMHgxMTRmCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRElHSV9FUEMJCTB4MDAwMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0RJR0lfUklHSFRTV0lUQ0gJMHgwMDAzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRElHSV9YRU0JCTB4MDAwNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0RJR0lfWFIJCTB4MDAwNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0RJR0lfQ1gJCTB4MDAwNgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0RJR0lfWFJKCQkweDAwMDkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ESUdJX0VQQ0oJCTB4MDAwYQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0RJR0lfWFJfOTIwCTB4MDAyNworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0RJR0lfREZfTV9JT00yX0UJMHgwMDcwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRElHSV9ERl9NX0UJMHgwMDcxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRElHSV9ERl9NX0lPTTJfQQkweDAwNzIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ESUdJX0RGX01fQQkweDAwNzMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ORU9fMkRCOSAgICAgICAgICAweDAwQzgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ORU9fMkRCOVBSSSAgICAgICAweDAwQzkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ORU9fMlJKNDUgICAgICAgICAweDAwQ0EKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ORU9fMlJKNDVQUkkgICAgICAweDAwQ0IKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX01VVEVDSAkJMHgxMTU5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTVVURUNIX01WMTAwMAkweDAwMDEKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1hJUkNPTQkJMHgxMTVkCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfWElSQ09NX1gzMjAxX0VUSAkweDAwMDMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9YSVJDT01fUkJNNTZHCTB4MDEwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1hJUkNPTV9YMzIwMV9NRE0JMHgwMTAzCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9SRU5ESVRJT04JCTB4MTE2MworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1JFTkRJVElPTl9WRVJJVEUJMHgwMDAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUkVORElUSU9OX1ZFUklURTIxMDAgMHgyMDAwCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9TRVJWRVJXT1JLUwkgIDB4MTE2NgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX0hFCSAgMHgwMDA4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfTEUJICAweDAwMDkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TRVJWRVJXT1JLU19DSU9CMzAgIDB4MDAxMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX0NNSUNfSEUgMHgwMDExCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfR0NOQl9MRSAweDAwMTcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TRVJWRVJXT1JLU19PU0I0CSAgMHgwMjAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfQ1NCNQkgIDB4MDIwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX0NTQjYgICAgMHgwMjAzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfT1NCNElERSAweDAyMTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TRVJWRVJXT1JLU19DU0I1SURFIDB4MDIxMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX0NTQjZJREUgMHgwMjEzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfQ1NCNklERTIgMHgwMjE3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfT1NCNFVTQiAweDAyMjAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TRVJWRVJXT1JLU19DU0I1VVNCIFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfT1NCNFVTQgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX0NTQjZVU0IgMHgwMjIxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfR0NMRSAgICAweDAyMjUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TRVJWRVJXT1JLU19HQ0xFMiAgIDB4MDIyNworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX0NTQjVJU0EgMHgwMjMwCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9TQkUJCTB4MTE3NgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NCRV9XQU5YTDEwMAkweDAzMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TQkVfV0FOWEwyMDAJMHgwMzAyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0JFX1dBTlhMNDAwCTB4MDEwNAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfVE9TSElCQQkJMHgxMTc5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVE9TSElCQV9QSUNDT0xPCTB4MDEwMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RPU0hJQkFfUElDQ09MT18xCTB4MDEwMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RPU0hJQkFfUElDQ09MT18yCTB4MDEwNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RPU0hJQkFfNjAxCTB4MDYwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RPU0hJQkFfVE9QSUM5NQkweDA2MGEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9UT1NISUJBX1RPUElDOTVfQSAweDA2MDMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9UT1NISUJBX1RPUElDOTVfQiAweDA2MGEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9UT1NISUJBX1RPUElDOTcJMHgwNjBmCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVE9TSElCQV9UT1BJQzEwMAkweDA2MTcKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1RPU0hJQkFfMgkJMHgxMDJmCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVE9TSElCQV9UWDM5MjcJMHgwMDBhCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVE9TSElCQV9UQzM1ODE1Q0YJMHgwMDMwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVE9TSElCQV9UWDQ5MjcJMHgwMTgwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVE9TSElCQV9UQzg2QzAwMV9NSVNDCTB4MDEwOAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfUklDT0gJCTB4MTE4MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1JJQ09IX1JMNUM0NjUJMHgwNDY1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUklDT0hfUkw1QzQ2NgkweDA0NjYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9SSUNPSF9STDVDNDc1CTB4MDQ3NQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1JJQ09IX1JMNUM0NzYJMHgwNDc2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUklDT0hfUkw1QzQ3OAkweDA0NzgKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0RMSU5LCQkweDExODYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ETElOS19ER0U1MTBUCTB4NGMwMAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfQVJUT1AJCTB4MTE5MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FSVE9QX0FUUDg0MDAJMHgwMDA0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVJUT1BfQVRQODUwVUYJMHgwMDA1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVJUT1BfQVRQODYwCTB4MDAwNgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FSVE9QX0FUUDg2MFIJMHgwMDA3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVJUT1BfQVRQODY1CTB4MDAwOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FSVE9QX0FUUDg2NVIJMHgwMDA5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVJUT1BfQUVDNzYxMAkweDgwMDIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BUlRPUF9BRUM3NjEyVVcJMHg4MDEwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVJUT1BfQUVDNzYxMlUJMHg4MDIwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVJUT1BfQUVDNzYxMlMJMHg4MDMwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVJUT1BfQUVDNzYxMkQJMHg4MDQwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVJUT1BfQUVDNzYxMlNVVwkweDgwNTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BUlRPUF84MDYwCTB4ODA2MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FSVE9QX0FFQzY3MTYwCTB4ODA4MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FSVE9QX0FFQzY3MTYwXzIJMHg4MDgxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVJUT1BfQUVDNjcxNjIJMHg4MDhhCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9aRUlUTkVUCQkweDExOTMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9aRUlUTkVUXzEyMjEJMHgwMDAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfWkVJVE5FVF8xMjI1CTB4MDAwMgorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfT01FR0EJCTB4MTE5YgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX09NRUdBXzgyQzA5MkcJMHgxMjIxCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9GVUpJVFNVX01FCTB4MTE5ZQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0ZVSklUU1VfRlMxNTUJMHgwMDAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRlVKSVRTVV9GUzUwCTB4MDAwMworCisjZGVmaW5lIFBDSV9TVUJWRU5ET1JfSURfS0VZU1BBTgkweDExYTkKKyNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9LRVlTUEFOX1NYMgkweDUzMzQKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX01BUlZFTEwJCTB4MTFhYgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01BUlZFTExfR1Q2NDAxMQkweDQxNDYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NQVJWRUxMX0dUNjQxMTEJMHg0MTQ2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUFSVkVMTF9HVDY0MjYwCTB4NjQzMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01BUlZFTExfTVY2NDM2MAkweDY0NjAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NQVJWRUxMX01WNjQ0NjAJMHg2NDgwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUFSVkVMTF9HVDk2MTAwCTB4OTY1MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01BUlZFTExfR1Q5NjEwMEEJMHg5NjUzCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9MSVRFT04JCTB4MTFhZAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xJVEVPTl9MTkUxMDBUWAkweDAwMDIKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1YzCQkweDExYjAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WM19WOTYwCQkweDAwMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WM19WMzUwCQkweDAwMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WM19WOTYxCQkweDAwMDIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WM19WMzUxCQkweDAwMDIKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX05QCQkweDExYmMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OUF9QQ0lfRkRESQkweDAwMDEKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0FUVAkJMHgxMWMxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRUX0w1NlhNRgkweDA0NDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVFRfVkVOVVNfTU9ERU0JMHg0ODAKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX05FQzIJCTB4MTFjMyAvKiBORUMgKDJuZCkgKi8KKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1NQRUNJQUxJWAkJMHgxMWNiCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU1BFQ0lBTElYX0lPOAkweDIwMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TUEVDSUFMSVhfWElPCTB4NDAwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NQRUNJQUxJWF9SSU8JMHg4MDAwCisjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfU1BFQ0lBTElYX1NQRUVENCAweGEwMDQKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0FVUkFWSVNJT04JMHgxMWQxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVVSQVZJU0lPTl9WWFA1MjQJMHgwMWY3CisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9BTkFMT0dfREVWSUNFUwkweDExZDQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BRDE4ODlKUwkJMHgxODg5CisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9JS09OCQkweDExZDUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JS09OXzEwMTE1CTB4MDExNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lLT05fMTAxMTcJMHgwMTE3CisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9TRUdBCQkweDExZGIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TRUdBX0JCQQkJMHgxMjM0CisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9aT1JBTgkJMHgxMWRlCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfWk9SQU5fMzYwNTcJMHg2MDU3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfWk9SQU5fMzYxMjAJMHg2MTIwCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9LSU5FVElDCQkweDExZjQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9LSU5FVElDXzI5MTUJMHgyOTE1CisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9DT01QRVgJCTB4MTFmNgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NPTVBFWF9FTkVUMTAwVkc0CTB4MDExMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NPTVBFWF9STDIwMDAJMHgxNDAxCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9SUAkJMHgxMWZlCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUlAzMklOVEYJCTB4MDAwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1JQOElOVEYJCTB4MDAwMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1JQMTZJTlRGCQkweDAwMDMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9SUDRRVUFECQkweDAwMDQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9SUDhPQ1RBCQkweDAwMDUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9SUDhKCQkweDAwMDYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9SUDRKCQkweDAwMDcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9SUDhTTkkJCTB4MDAwOAkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9SUDE2U05JCQkweDAwMDkJCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUlBQNAkJMHgwMDBBCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUlBQOAkJMHgwMDBCCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUlA4TQkJMHgwMDBDCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUlA0TQkJMHgwMDBECisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUlAyXzIzMgkJMHgwMDBFCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUlAyXzQyMgkJMHgwMDBGCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVVJQMzJJTlRGCQkweDA4MDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9VUlA4SU5URgkJMHgwODAyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVVJQMTZJTlRGCQkweDA4MDMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9VUlA4T0NUQQkJMHgwODA1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVVBDSV9STTNfOFBPUlQJMHgwODBDICAgICAgIAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1VQQ0lfUk0zXzRQT1JUCTB4MDgwRAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NSUDE2SU5URgkJMHgwOTAzICAgICAgIAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfQ1lDTEFERVMJCTB4MTIwZQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NZQ0xPTV9ZX0xvCTB4MDEwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NZQ0xPTV9ZX0hpCTB4MDEwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NZQ0xPTV80WV9MbwkweDAxMDIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DWUNMT01fNFlfSGkJMHgwMTAzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ1lDTE9NXzhZX0xvCTB4MDEwNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NZQ0xPTV84WV9IaQkweDAxMDUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DWUNMT01fWl9MbwkweDAyMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DWUNMT01fWl9IaQkweDAyMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9QQzMwMF9SWF8yCTB4MDMwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BDMzAwX1JYXzEJMHgwMzAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUEMzMDBfVEVfMgkweDAzMTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9QQzMwMF9URV8xCTB4MDMxMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BDMzAwX1RFX01fMgkweDAzMjAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9QQzMwMF9URV9NXzEJMHgwMzIxCisKKy8qIEFsbGllZCBUZWxlc3luICovCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfQVQgICAgCQkweDEyNTkKKyNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9BVF8yNzAxRlgJMHgyNzAzCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9FU1NFTlRJQUwJCTB4MTIwZgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0VTU0VOVElBTF9ST0FEUlVOTkVSCTB4MDAwMQorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfTzIJCTB4MTIxNworI2RlZmluZSBQQ0lfREVWSUNFX0lEX08yXzY3MjkJCTB4NjcyOQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX08yXzY3MzAJCTB4NjczYQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX08yXzY4MzIJCTB4NjgzMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX08yXzY4MzYJCTB4NjgzNgorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfM0RGWAkJMHgxMjFhCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfM0RGWF9WT09ET08JMHgwMDAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfM0RGWF9WT09ET08yCTB4MDAwMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEXzNERlhfQkFOU0hFRQkweDAwMDMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF8zREZYX1ZPT0RPTzMJMHgwMDA1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfM0RGWF9WT09ET081CTB4MDAwOQorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfU0lHTUFERVMJCTB4MTIzNgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJR01BREVTXzY0MjUJMHg2NDAxCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9DQ1VCRQkJMHgxMjNmCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9BVk0JCTB4MTI0NAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FWTV9CMQkJMHgwNzAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVZNX0M0CQkweDA4MDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVk1fQTEJCTB4MGEwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FWTV9BMV9WMgkJMHgwZTAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVZNX0MyCQkweDExMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVk1fVDEJCTB4MTIwMAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfRElQSVgJCTB4MTI0NgorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfU1RBTExJT04JCTB4MTI0ZAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NUQUxMSU9OX0VDSFBDSTgzMiAweDAwMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TVEFMTElPTl9FQ0hQQ0k4NjQgMHgwMDAyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU1RBTExJT05fRUlPUENJCTB4MDAwMworCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfT1BUSUJBU0UJCTB4MTI1NQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX09QVElCQVNFX0ZPUkdFCTB4MTExMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX09QVElCQVNFX0ZVU0lPTgkweDEyMTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9PUFRJQkFTRV9WUExFWAkweDIxMTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9PUFRJQkFTRV9WUExFWENDCTB4MjEyMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX09QVElCQVNFX1ZRVUVTVAkweDIxMzAKKworLyogQWxsaWVkIFRlbGVzeW4gKi8KKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9BVCAgICAJCTB4MTI1OQorI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX0FUXzI3MDBGWAkweDI3MDEKKyNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9BVF8yNzAxRlgJMHgyNzAzCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9FU1MJCTB4MTI1ZAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0VTU19FU1MxOTY4CTB4MTk2OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0VTU19BVURJT1BDSQkweDE5NjkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9FU1NfRVNTMTk3OAkweDE5NzgKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1NBVFNBR0VNCQkweDEyNjcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TQVRTQUdFTV9OSUNDWQkweDEwMTYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TQVRTQUdFTV9QQ1IyMTAxCTB4NTM1MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NBVFNBR0VNX1RFTFNBVFRVUkJPIDB4NWE0YgorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfSFVHSEVTCQkweDEyNzMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9IVUdIRVNfRElSRUNQQwkweDAwMDIKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0VOU09OSVEJCTB4MTI3NAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0VOU09OSVFfQ1Q1ODgwCTB4NTg4MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0VOU09OSVFfRVMxMzcwCTB4NTAwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0VOU09OSVFfRVMxMzcxCTB4MTM3MQorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfVFJBTlNNRVRBCQkweDEyNzkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9FRkZJQ0VPTgkJMHgwMDYwCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9ST0NLV0VMTAkJMHgxMjdBCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9JVEUJCTB4MTI4MworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lURV9JVDgxNzJHCTB4ODE3MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lURV9JVDgxNzJHX0FVRElPIDB4MDgwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lURV84ODcyCQkweDg4NzIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JVEVfSVQ4MzMwR18wCTB4ZTg4NgorCisvKiBmb3JtZXJseSBQbGF0Zm9ybSBUZWNoICovCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfRVNTX09MRAkJMHgxMjg1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRVNTX0VTUzAxMDAJMHgwMTAwCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9BTFRFT04JCTB4MTJhZQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FMVEVPTl9BQ0VOSUMJMHgwMDAxCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9VU1IJCTB4MTJCOQorCisjZGVmaW5lIFBDSV9TVUJWRU5ET1JfSURfQ09OTkVDVF9URUNICQkJMHgxMmM0CisjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfQ09OTkVDVF9URUNIX0JIOF8yMzIJCTB4MDAwMQorI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX0NPTk5FQ1RfVEVDSF9CSDRfMjMyCQkweDAwMDIKKyNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9DT05ORUNUX1RFQ0hfQkgyXzIzMgkJMHgwMDAzCisjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfQ09OTkVDVF9URUNIX0JIOF80ODUJCTB4MDAwNAorI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX0NPTk5FQ1RfVEVDSF9CSDhfNDg1XzRfNAkweDAwMDUKKyNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9DT05ORUNUX1RFQ0hfQkg0XzQ4NQkJMHgwMDA2CisjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfQ09OTkVDVF9URUNIX0JINF80ODVfMl8yCTB4MDAwNworI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX0NPTk5FQ1RfVEVDSF9CSDJfNDg1CQkweDAwMDgKKyNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9DT05ORUNUX1RFQ0hfQkg4XzQ4NV8yXzYJMHgwMDA5CisjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfQ09OTkVDVF9URUNIX0JIMDgxMTAxVjEJMHgwMDBBCisjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfQ09OTkVDVF9URUNIX0JIMDQxMTAxVjEJMHgwMDBCCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9QSUNUVVJFTAkJMHgxMmM1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUElDVFVSRUxfUENJVlNUCTB4MDA4MQorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfTlZJRElBX1NHUwkweDEyZDIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfU0dTX1JJVkExMjggMHgwMDE4CisKKyNkZWZpbmUgUENJX1NVQlZFTkRPUl9JRF9DSEFTRV9QQ0lGQVNUCQkweDEyRTAKKyNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9DSEFTRV9QQ0lGQVNUNAkJMHgwMDMxCisjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfQ0hBU0VfUENJRkFTVDgJCTB4MDAyMQorI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX0NIQVNFX1BDSUZBU1QxNgkweDAwMTEKKyNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9DSEFTRV9QQ0lGQVNUMTZGTUMJMHgwMDQxCisjZGVmaW5lIFBDSV9TVUJWRU5ET1JfSURfQ0hBU0VfUENJUkFTCQkweDEyNEQKKyNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9DSEFTRV9QQ0lSQVM0CQkweEYwMDEKKyNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9DSEFTRV9QQ0lSQVM4CQkweEYwMTAKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0FVUkVBTAkJMHgxMmViCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVVSRUFMX1ZPUlRFWF8xCTB4MDAwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FVUkVBTF9WT1JURVhfMgkweDAwMDIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVVJFQUxfQURWQU5UQUdFCTB4MDAwMworCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfRUxFQ1RST05JQ0RFU0lHTkdNQkggMHgxMmY4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTE1MXzMzUjEwCQkweDhhMDIKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0NCT0FSRFMJCTB4MTMwNworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NCT0FSRFNfREFTMTYwMl8xNiAweDAwMDEKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1NJSUcJCTB4MTMxZgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfMVNfMTB4XzU1MAkweDEwMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSUlHXzFTXzEweF82NTAJMHgxMDAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lJR18xU18xMHhfODUwCTB4MTAwMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfMVMxUF8xMHhfNTUwCTB4MTAxMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfMVMxUF8xMHhfNjUwCTB4MTAxMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfMVMxUF8xMHhfODUwCTB4MTAxMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfMVBfMTB4CTB4MTAyMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfMlBfMTB4CTB4MTAyMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfMlNfMTB4XzU1MAkweDEwMzAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSUlHXzJTXzEweF82NTAJMHgxMDMxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lJR18yU18xMHhfODUwCTB4MTAzMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfMlMxUF8xMHhfNTUwCTB4MTAzNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfMlMxUF8xMHhfNjUwCTB4MTAzNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfMlMxUF8xMHhfODUwCTB4MTAzNgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfNFNfMTB4XzU1MAkweDEwNTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSUlHXzRTXzEweF82NTAJMHgxMDUxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lJR180U18xMHhfODUwCTB4MTA1MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfMVNfMjB4XzU1MAkweDIwMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSUlHXzFTXzIweF82NTAJMHgyMDAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lJR18xU18yMHhfODUwCTB4MjAwMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfMVBfMjB4CTB4MjAyMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfMlBfMjB4CTB4MjAyMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfMlNfMjB4XzU1MAkweDIwMzAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSUlHXzJTXzIweF82NTAJMHgyMDMxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lJR18yU18yMHhfODUwCTB4MjAzMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfMlAxU18yMHhfNTUwCTB4MjA0MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfMlAxU18yMHhfNjUwCTB4MjA0MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfMlAxU18yMHhfODUwCTB4MjA0MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfMVMxUF8yMHhfNTUwCTB4MjAxMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfMVMxUF8yMHhfNjUwCTB4MjAxMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfMVMxUF8yMHhfODUwCTB4MjAxMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfNFNfMjB4XzU1MAkweDIwNTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSUlHXzRTXzIweF82NTAJMHgyMDUxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lJR180U18yMHhfODUwCTB4MjA1MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfMlMxUF8yMHhfNTUwCTB4MjA2MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfMlMxUF8yMHhfNjUwCTB4MjA2MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfMlMxUF8yMHhfODUwCTB4MjA2MgorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfUkFESVNZUwkJMHgxMzMxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUkFESVNZU19FTlAyNjExCTB4MDAzMAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfRE9NRVgJCTB4MTM0YQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0RPTUVYX0RNWDMxOTFECTB4MDAwMQorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfUVVBVEVDSAkJMHgxMzVDCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUVVBVEVDSF9RU0MxMDAJMHgwMDEwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUVVBVEVDSF9EU0MxMDAJMHgwMDIwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUVVBVEVDSF9EU0MyMDAJMHgwMDMwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUVVBVEVDSF9RU0MyMDAJMHgwMDQwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUVVBVEVDSF9FU0MxMDBECTB4MDA1MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1FVQVRFQ0hfRVNDMTAwTQkweDAwNjAKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1NFQUxFVkVMCQkweDEzNWUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TRUFMRVZFTF9VNTMwCTB4NzEwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NFQUxFVkVMX1VDT01NMgkweDcyMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TRUFMRVZFTF9VQ09NTTQyMgkweDc0MDIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TRUFMRVZFTF9VQ09NTTIzMgkweDcyMDIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TRUFMRVZFTF9DT01NNAkweDc0MDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TRUFMRVZFTF9DT01NOAkweDc4MDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TRUFMRVZFTF9VQ09NTTgJMHg3ODA0CisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9IWVBFUkNPUEUJCTB4MTM2NQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0hZUEVSQ09QRV9QTFgJMHg5MDUwCisjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfSFlQRVJDT1BFX09MRF9FUkdPCTB4MDEwNAorI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX0hZUEVSQ09QRV9FUkdPCQkweDAxMDYKKyNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9IWVBFUkNPUEVfTUVUUk8JMHgwMTA3CisjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfSFlQRVJDT1BFX0NIQU1QMgkweDAxMDgKKyNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9IWVBFUkNPUEVfUExFWFVTCTB4MDEwOQorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfS0FXQVNBS0kJCTB4MTM2YgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01DSElQX0tMNUE3MjAwMgkweGZmMDEKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0NORVQJCTB4MTM3MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NORVRfR0lHQUNBUkQJMHg0MzRlCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9MTUMJCTB4MTM3NgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xNQ19IU1NJCQkweDAwMDMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9MTUNfRFMzCQkweDAwMDQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9MTUNfU1NJCQkweDAwMDUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9MTUNfVDEJCTB4MDAwNgorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfTkVUR0VBUgkJMHgxMzg1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVUR0VBUl9HQTYyMAkweDYyMGEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ORVRHRUFSX0dBNjIyCTB4NjIyYQorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfQVBQTElDT00JCTB4MTM4OQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FQUExJQ09NX1BDSUdFTkVSSUMgMHgwMDAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVBQTElDT01fUENJMjAwMElCU19DQU4gMHgwMDAyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVBQTElDT01fUENJMjAwMFBGQiAweDAwMDMKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX01PWEEJCTB4MTM5MworI2RlZmluZSBQQ0lfREVWSUNFX0lEX01PWEFfUkM3MDAwCTB4MDAwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01PWEFfQ1AxMDIJMHgxMDIwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTU9YQV9DUDEwMlVMCTB4MTAyMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01PWEFfQ1AxMDJVCTB4MTAyMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01PWEFfQzEwNAkJMHgxMDQwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTU9YQV9DUDEwNFUJMHgxMDQxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTU9YQV9DUDEwNEpVCTB4MTA0MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01PWEFfQ1QxMTQJMHgxMTQwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTU9YQV9DUDExNAkweDExNDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NT1hBX0NQMTE4VQkweDExODAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NT1hBX0NQMTMyCTB4MTMyMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01PWEFfQ1AxMzJVCTB4MTMyMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01PWEFfQ1AxMzRVCTB4MTM0MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01PWEFfQzE2OAkJMHgxNjgwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTU9YQV9DUDE2OFUJMHgxNjgxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTU9YQV9DUDIwNEoJMHgyMDQwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTU9YQV9DMjE4CQkweDIxODAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NT1hBX0MzMjAJCTB4MzIwMAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfQ0NECQkweDEzOTcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DQ0RfMkJEMAkJMHgyYmQwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ0NEX0IwMDAJCTB4YjAwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NDRF9CMDA2CQkweGIwMDYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DQ0RfQjAwNwkJMHhiMDA3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ0NEX0IwMDgJCTB4YjAwOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NDRF9CMDA5CQkweGIwMDkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DQ0RfQjAwQQkJMHhiMDBhCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ0NEX0IwMEIJCTB4YjAwYgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NDRF9CMDBDCQkweGIwMGMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DQ0RfQjEwMAkJMHhiMTAwCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9FWEFSCQkweDEzYTgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9FWEFSX1hSMTdDMTUyCTB4MDE1MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0VYQVJfWFIxN0MxNTQJMHgwMTU0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRVhBUl9YUjE3QzE1OAkweDAxNTgKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX01JQ1JPR0FURQkJMHgxM2MwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUlDUk9HQVRFX1VTQwkweDAwMTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NSUNST0dBVEVfU0NDCTB4MDAyMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01JQ1JPR0FURV9TQ0EJMHgwMDMwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUlDUk9HQVRFX1VTQzIJMHgwMjEwCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF8zV0FSRQkJMHgxM0MxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfM1dBUkVfMTAwMAkweDEwMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF8zV0FSRV83MDAwCTB4MTAwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEXzNXQVJFXzkwMDAJMHgxMDAyCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9JT01FR0EJCTB4MTNjYQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lPTUVHQV9CVVoJMHg0MjMxCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9BQk9DT00JCTB4MTNEMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FCT0NPTV8yQkQxICAgICAgIDB4MkJEMQorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfQ01FRElBCQkweDEzZjYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DTUVESUFfQ004MzM4QQkweDAxMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DTUVESUFfQ004MzM4QgkweDAxMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DTUVESUFfQ004NzM4CTB4MDExMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NNRURJQV9DTTg3MzhCCTB4MDExMgorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfTEFWQQkJMHgxNDA3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTEFWQV9EU0VSSUFMCTB4MDEwMCAvKiAyeCAxNjU1MCAqLworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xBVkFfUVVBVFJPX0EJMHgwMTAxIC8qIDJ4IDE2NTUwLCBoYWxmIG9mIDQgcG9ydCAqLworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xBVkFfUVVBVFJPX0IJMHgwMTAyIC8qIDJ4IDE2NTUwLCBoYWxmIG9mIDQgcG9ydCAqLworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xBVkFfT0NUT19BCTB4MDE4MCAvKiA0eCAxNjU1MEEsIGhhbGYgb2YgOCBwb3J0ICovCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTEFWQV9PQ1RPX0IJMHgwMTgxIC8qIDR4IDE2NTUwQSwgaGFsZiBvZiA4IHBvcnQgKi8KKyNkZWZpbmUgUENJX0RFVklDRV9JRF9MQVZBX1BPUlRfUExVUwkweDAyMDAgLyogMnggMTY2NTAgKi8KKyNkZWZpbmUgUENJX0RFVklDRV9JRF9MQVZBX1FVQURfQQkweDAyMDEgLyogMnggMTY2NTAsIGhhbGYgb2YgNCBwb3J0ICovCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTEFWQV9RVUFEX0IJMHgwMjAyIC8qIDJ4IDE2NjUwLCBoYWxmIG9mIDQgcG9ydCAqLworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xBVkFfU1NFUklBTAkweDA1MDAgLyogMXggMTY1NTAgKi8KKyNkZWZpbmUgUENJX0RFVklDRV9JRF9MQVZBX1BPUlRfNjUwCTB4MDYwMCAvKiAxeCAxNjY1MCAqLworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xBVkFfUEFSQUxMRUwJMHg4MDAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTEFWQV9EVUFMX1BBUl9BCTB4ODAwMiAvKiBUaGUgTGF2YSBEdWFsIFBhcmFsbGVsIGlzICovCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTEFWQV9EVUFMX1BBUl9CCTB4ODAwMyAvKiB0d28gUENJIGRldmljZXMgb24gYSBjYXJkICovCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTEFWQV9CT0NBX0lPUFBBUgkweDg4MDAKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1RJTUVESUEJCTB4MTQwOQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJTUVESUFfMTg4OQkweDcxNjgKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX09YU0VNSQkJMHgxNDE1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfT1hTRU1JXzEyUENJODQwCTB4ODQwMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX09YU0VNSV8xNlBDSTk1NAkweDk1MDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9PWFNFTUlfMTZQQ0k5NU4JMHg5NTExCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfT1hTRU1JXzE2UENJOTU0UFAJMHg5NTEzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfT1hTRU1JXzE2UENJOTUyCTB4OTUyMQorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfU0FNU1VORwkJMHgxNDRkCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9BSVJPTkVUCQkweDE0YjkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BSVJPTkVUXzQ4MDBfMQkweDAwMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BSVJPTkVUXzQ4MDAJMHg0NTAwIC8vIHZhbHVlcyBzd2l0Y2hlZD8gIHNlZQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FJUk9ORVRfNDUwMAkweDQ4MDAgLy8gZHJpdmVycy9uZXQvYWlyb25ldDQ1MDBfY2FyZC5jCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9USVRBTgkJMHgxNEQyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElUQU5fMDEwTAkweDgwMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USVRBTl8xMDBMCTB4ODAxMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJVEFOXzExMEwJMHg4MDExCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElUQU5fMjAwTAkweDgwMjAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USVRBTl8yMTBMCTB4ODAyMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJVEFOXzQwMEwJMHg4MDQwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElUQU5fODAwTAkweDgwODAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USVRBTl8xMDAJCTB4QTAwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJVEFOXzIwMAkJMHhBMDA1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElUQU5fNDAwCQkweEEwMDMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USVRBTl84MDBCCTB4QTAwNAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfUEFOQUNPTQkJMHgxNGQ0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUEFOQUNPTV9RVUFETU9ERU0JMHgwNDAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUEFOQUNPTV9EVUFMTU9ERU0JMHgwNDAyCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9TSVBBQ0tFVFMJCTB4MTRkOQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NQX0hUCQkweDAwMTAKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0FGQVZMQUIJCTB4MTRkYgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FGQVZMQUJfUDAyOAkweDIxODAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BRkFWTEFCX1AwMzAJMHgyMTgyCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9CUk9BRENPTQkJMHgxNGU0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3MDAJMHgxNjQ0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3MDEJMHgxNjQ1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3MDIJMHgxNjQ2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3MDMJMHgxNjQ3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3MDQJMHgxNjQ4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3MDRTXzIJMHgxNjQ5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3MDJGRQkweDE2NGQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTcwNQkweDE2NTMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTcwNV8yCTB4MTY1NAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzIwCTB4MTY1OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzIxCTB4MTY1OQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzA1TQkweDE2NWQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTcwNU1fMgkweDE2NWUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTcwNUYJMHgxNjZlCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3NTAJMHgxNjc2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3NTEJMHgxNjc3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3NTBNCTB4MTY3YworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzUxTQkweDE2N2QKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTc1MUYJMHgxNjdlCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3ODIJMHgxNjk2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3ODgJMHgxNjljCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3ODkJMHgxNjlkCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3MDJYCTB4MTZhNgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzAzWAkweDE2YTcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTcwNFMJMHgxNmE4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3MDJBMwkweDE2YzYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTcwM0EzCTB4MTZjNworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzgxCTB4MTZkZAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzUzCTB4MTZmNworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzUzTQkweDE2ZmQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTc1M0YJMHgxNmZlCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU5MDEJMHgxNzBkCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQkNNNDQwMUIxCQkweDE3MGMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTkwMV8yCTB4MTcwZQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0JDTTQ0MDEJCTB4NDQwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0JDTTQ0MDFCMAkJMHg0NDAyCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9UT1BJQwkJMHgxNTFmCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVE9QSUNfVFA1NjAJMHgwMDAwCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9FTkUJCTB4MTUyNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0VORV8xMjExCQkweDEyMTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9FTkVfMTIyNQkJMHgxMjI1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRU5FXzE0MTAJCTB4MTQxMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0VORV8xNDIwCQkweDE0MjAKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1NZQkEJCTB4MTU5MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NZQkFfMlBfRVBQCTB4MDc4MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NZQkFfMVBfRUNQCTB4MDc4MworCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfTU9SRVRPTgkJMHgxNWFhCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUkFTVEVMXzJQT1JUCTB4MjAwMAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfWk9MVFJJWAkJMHgxNWIwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfWk9MVFJJWF8yQkQwCTB4MmJkMCAKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX01FTExBTk9YCQkweDE1YjMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NRUxMQU5PWF9UQVZPUgkweDVhNDQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NRUxMQU5PWF9BUkJFTF9DT01QQVQgMHg2Mjc4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVMTEFOT1hfQVJCRUwJMHg2MjgyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVMTEFOT1hfU0lOQUlfT0xEIDB4NWU4YworI2RlZmluZSBQQ0lfREVWSUNFX0lEX01FTExBTk9YX1NJTkFJCTB4NjI3NAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfUERDCQkweDE1ZTkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9QRENfMTg0MQkJMHgxODQxCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9NQUNST0xJTksJCTB4MTVlZAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01BQ1JPTElOS19NQ0NTOAkweDEwMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NQUNST0xJTktfTUNDUwkweDEwMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NQUNST0xJTktfTUNDUzhICTB4MTAwMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01BQ1JPTElOS19NQ0NTSAkweDEwMDMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NQUNST0xJTktfTUNDUjgJMHgyMDAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUFDUk9MSU5LX01DQ1IJMHgyMDAxCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9GQVJTSVRFICAgICAgICAgICAweDE2MTkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9GQVJTSVRFX1QyUCAgICAgICAweDA0MDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9GQVJTSVRFX1Q0UCAgICAgICAweDA0NDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9GQVJTSVRFX1QxVSAgICAgICAweDA2MTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9GQVJTSVRFX1QyVSAgICAgICAweDA2MjAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9GQVJTSVRFX1Q0VSAgICAgICAweDA2NDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9GQVJTSVRFX1RFMSAgICAgICAweDE2MTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9GQVJTSVRFX1RFMUMgICAgICAweDE2MTIKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1NJQllURQkJMHgxNjZkCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQkNNMTI1MF9IVAkweDAwMDIKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0xJTktTWVMJCTB4MTczNworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xJTktTWVNfRUcxMDMyCTB4MTAzMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xJTktTWVNfRUcxMDY0CTB4MTA2NAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfQUxUSU1BCQkweDE3M2IKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTFRJTUFfQUMxMDAwCTB4MDNlOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FMVElNQV9BQzEwMDEJMHgwM2U5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQUxUSU1BX0FDOTEwMAkweDAzZWEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTFRJTUFfQUMxMDAzCTB4MDNlYgorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfUzJJTwkJMHgxN2Q1CisjZGVmaW5lCVBDSV9ERVZJQ0VfSURfUzJJT19XSU4JCTB4NTczMQorI2RlZmluZQlQQ0lfREVWSUNFX0lEX1MySU9fVU5JCQkweDU4MzEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9IRVJDX1dJTgkJMHg1NzMyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSEVSQ19VTkkJCTB4NTgzMgorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfSU5GSU5JQ09OCQkweDE4MjAKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1RPUFNQSU4JCTB4MTg2NworCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfVERJICAgICAgICAgICAgICAgMHgxOTJFCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVERJX0VIQ0kgICAgICAgICAgMHgwMTAxCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9TWU1QSE9OWQkJMHgxYzFjCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU1lNUEhPTllfMTAxCTB4MDAwMQorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfVEVLUkFNCQkweDFkZTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9URUtSQU1fREMyOTAJMHhkYzI5CisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9ISU5UICAgICAgICAgICAgIDB4MzM4OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0hJTlRfVlhQUk9JSV9JREUgMHg4MDEzCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF8zRExBQlMJCTB4M2QzZAorI2RlZmluZSBQQ0lfREVWSUNFX0lEXzNETEFCU18zMDBTWAkweDAwMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF8zRExBQlNfNTAwVFgJMHgwMDAyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfM0RMQUJTX0RFTFRBCTB4MDAwMworI2RlZmluZSBQQ0lfREVWSUNFX0lEXzNETEFCU19QRVJNRURJQQkweDAwMDQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF8zRExBQlNfTVgJCTB4MDAwNgorI2RlZmluZSBQQ0lfREVWSUNFX0lEXzNETEFCU19QRVJNRURJQTIJMHgwMDA3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfM0RMQUJTX0dBTU1BCTB4MDAwOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEXzNETEFCU19QRVJNRURJQTJWCTB4MDAwOQorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfQVZBTkNFCQkweDQwMDUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVkFOQ0VfQUxHMjA2NAkweDIwNjQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVkFOQ0VfMjMwMgkweDIzMDIKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0FLUwkJMHg0MTZjCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQUtTX0FMQURESU5DQVJECTB4MDEwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FLU19DUEMJCTB4MDIwMAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfUkVEQ1JFRUsJCTB4NDkxNgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1JDNDUJCTB4MTk2MAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfTkVUVklOCQkweDRhMTQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ORVRWSU5fTlY1MDAwU0MJMHg1MDAwCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9TMwkJMHg1MzMzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUzNfUExBVE9fUFhTCTB4MDU1MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1MzX1ZpUkdFCQkweDU2MzEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TM19UUklPCQkweDg4MTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TM19BVVJPUkE2NFZQCTB4ODgxMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1MzX1RSSU82NFVWUAkweDg4MTQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TM19WaVJHRV9WWAkweDg4M2QKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TM184NjgJCTB4ODg4MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1MzXzkyOAkJMHg4OGIwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUzNfODY0XzEJCTB4ODhjMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1MzXzg2NF8yCQkweDg4YzEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TM185NjRfMQkJMHg4OGQwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUzNfOTY0XzIJCTB4ODhkMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1MzXzk2OAkJMHg4OGYwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUzNfVFJJTzY0VjIJMHg4OTAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUzNfUExBVE9fUFhHCTB4ODkwMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1MzX1ZpUkdFX0RYR1gJMHg4YTAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUzNfVmlSR0VfR1gyCTB4OGExMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1MzX1NBVkFHRTQJMHg4YTI1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUzNfVmlSR0VfTVgJMHg4YzAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUzNfVmlSR0VfTVhQCTB4OGMwMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1MzX1ZpUkdFX01YUE1WCTB4OGMwMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1MzX1BST1NBVkFHRTgJMHg4ZDA0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUzNfU09OSUNWSUJFUwkweGNhMDAKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0RVTk9SRAkJMHg1NTQ0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRFVOT1JEX0kzMDAwCTB4MDAwMQorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfRENJCQkweDY2NjYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9EQ0lfUENDT000CTB4MDAwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0RDSV9QQ0NPTTgJMHgwMDAyCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9EVU5PUkQJCTB4NTU0NAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0RVTk9SRF9JMzAwMAkweDAwMDEKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0dFTlJPQ08JCTB4NTU1NQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0dFTlJPQ09fSEZQODMyCTB4MDAwMworCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfSU5URUwJCTB4ODA4NgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0VFU1NDCTB4MDAwOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzIxMTQ1CTB4MDAzOQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyMzc1CTB4MDQ4MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNDI0CTB4MDQ4MworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyMzc4CTB4MDQ4NAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNDMwCTB4MDQ4NgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNDM0CTB4MDRhMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0k5NjAJMHgwOTYwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSTk2MFJNCTB4MDk2MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNTYyRVQJMHgxMDMxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFDQU0JMHgxMDM4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MTVfTUMJMHgxMTMwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MTVfQUIJMHgxMTMxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MTVfQ0dDCTB4MTEzMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNTU5RVIJMHgxMjA5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODIwOTJBQV8wCTB4MTIyMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyMDkyQUFfMQkweDEyMjIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF83MTE2CTB4MTIyMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzc1MDVfMAkweDI1NTAgIAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzc1MDVfMQkweDI1NTIgIAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzcyMDVfMAkweDI1NWQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjU5NgkweDEyMjYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84Mjg2NQkweDEyMjcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjU1NwkweDEyMjkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjQzNwkweDEyMmQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjM3MUZCXzAJMHgxMjJlCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODIzNzFGQl8xCTB4MTIzMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyMzcxTVgJMHgxMjM0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI0MzdNWAkweDEyMzUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjQ0MQkweDEyMzcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjM4MEZCCTB4MTI0YgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNDM5CTB4MTI1MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgwOTYwX1JQCTB4MTk2MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODQwX0hCCTB4MWEyMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODQ1X0hCCTB4MWEzMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQUFfMAkweDI0MTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUFBXzEJMHgyNDExCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFBQV8yCTB4MjQxMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQUFfMwkweDI0MTMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUFBXzUJMHgyNDE1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFBQV82CTB4MjQxNgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQUFfOAkweDI0MTgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUFCXzAJMHgyNDIwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFBQl8xCTB4MjQyMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQUJfMgkweDI0MjIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUFCXzMJMHgyNDIzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFBQl81CTB4MjQyNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQUJfNgkweDI0MjYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUFCXzgJMHgyNDI4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFCQV8wCTB4MjQ0MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQkFfMQkweDI0NDIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUJBXzIJMHgyNDQzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFCQV8zCTB4MjQ0NAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQkFfNAkweDI0NDUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUJBXzUJMHgyNDQ2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFCQV82CTB4MjQ0OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQkFfNwkweDI0NDkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUJBXzgJMHgyNDRhCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFCQV85CTB4MjQ0YgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQkFfMTAJMHgyNDRjCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFCQV8xMQkweDI0NGUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUVfMAkweDI0NTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUVfMgkweDI0NTIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUVfMwkweDI0NTMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUVfOQkweDI0NTkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUVfMTEJMHgyNDViCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFFXzEzCTB4MjQ1ZAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxRV8xNAkweDI0NWUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUNBXzAJMHgyNDgwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFDQV8yCTB4MjQ4MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQ0FfMwkweDI0ODMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUNBXzQJMHgyNDg0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFDQV81CTB4MjQ4NQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQ0FfNgkweDI0ODYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUNBXzcJMHgyNDg3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFDQV8xMAkweDI0OGEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUNBXzExCTB4MjQ4YgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQ0FfMTIJMHgyNDhjCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFEQl8wCTB4MjRjMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxREJfMQkweDI0YzEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMURCXzIJMHgyNGMyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFEQl8zCTB4MjRjMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxREJfNAkweDI0YzQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMURCXzUJMHgyNGM1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFEQl82CTB4MjRjNgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxREJfNwkweDI0YzcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMURCXzkJMHgyNGM5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFEQl8xMAkweDI0Y2EKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMURCXzExCTB4MjRjYgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxREJfMTIgIDB4MjRjYworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxREJfMTMJMHgyNGNkCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFFQl8wCTB4MjRkMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxRUJfMQkweDI0ZDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUVCXzIJMHgyNGQyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFFQl8zCTB4MjRkMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxRUJfNAkweDI0ZDQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUVCXzUJMHgyNGQ1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFFQl82CTB4MjRkNgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxRUJfNwkweDI0ZDcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUVCXzExCTB4MjRkYgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxRUJfMTMJMHgyNGRkCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfRVNCXzEJMHgyNWExCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfRVNCXzIJMHgyNWEyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfRVNCXzMJMHgyNWEzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfRVNCXzMxCTB4MjViMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0VTQl80CTB4MjVhNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0VTQl81CTB4MjVhNgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0VTQl82CTB4MjVhNworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0VTQl83CTB4MjVhOQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0VTQl84CTB4MjVhYQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0VTQl85CTB4MjVhYgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0VTQl8xMQkweDI1YWMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9FU0JfMTIJMHgyNWFkCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfRVNCXzEzCTB4MjVhZQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODIwX0hCCTB4MjUwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODIwX1VQX0hCCTB4MjUwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODUwX0hCCTB4MjUzMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODYwX0hCCTB4MjUzMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODQ1R19IQgkweDI1NjAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84Mjg0NUdfSUcJMHgyNTYyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4NjVfSEIJMHgyNTcwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4NjVfSUcJMHgyNTcyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4NzVfSEIJMHgyNTc4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4NzVfSUcJMHgyNTdiCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI5MTVHX0hCCTB4MjU4MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyOTE1R19JRwkweDI1ODIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjkxNUdNX0hCCTB4MjU5MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyOTE1R01fSUcJMHgyNTkyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNINl8wCTB4MjY0MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDZfMQkweDI2NDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g2XzIJMHgyNjQyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNINl8zCTB4MjY1MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDZfNAkweDI2NTIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g2XzUJMHgyNjUzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNINl82CTB4MjY1OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDZfNwkweDI2NTkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g2XzgJMHgyNjVhCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNINl85CTB4MjY1YgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDZfMTAJMHgyNjVjCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNINl8xMQkweDI2NjAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g2XzEyCTB4MjY2MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDZfMTMJMHgyNjY0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNINl8xNAkweDI2NjYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g2XzE1CTB4MjY2OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDZfMTYJMHgyNjZhCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNINl8xNwkweDI2NmQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g2XzE4CTB4MjY2ZQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDZfMTkJMHgyNjZmCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIN18wCTB4MjdiOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDdfMQkweDI3YjkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g3XzIJMHgyN2MwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIN18zCTB4MjdjMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDdfNQkweDI3YzQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g3XzYJMHgyN2M1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIN183CTB4MjdjOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDdfOAkweDI3YzkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g3XzkJMHgyN2NhCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIN18xMAkweDI3Y2IKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g3XzExCTB4MjdjYworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDdfMTIJMHgyN2QwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIN18xMwkweDI3ZDIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g3XzE0CTB4MjdkNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDdfMTUJMHgyN2Q2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIN18xNgkweDI3ZDgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g3XzE3CTB4MjdkYQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDdfMTgJMHgyN2RjCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIN18xOQkweDI3ZGQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g3XzIwCTB4MjdkZQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDdfMjEJMHgyN2RmCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIN18yMgkweDI3ZTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g3XzIzCTB4MjdlMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODU1UE1fSEIJMHgzMzQwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MzBfSEIJMHgzNTc1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MzBfQ0dDCTB4MzU3NworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODU1R01fSEIJMHgzNTgwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4NTVHTV9JRwkweDM1ODIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9FNzUyMF9NQ0gJMHgzNTkwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfRTczMjBfTUNICTB4MzU5MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX01DSF9QQQkweDM1OTUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9NQ0hfUEExCTB4MzU5NgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX01DSF9QQgkweDM1OTcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9NQ0hfUEIxCTB4MzU5OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX01DSF9QQwkweDM1OTkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9NQ0hfUEMxCTB4MzU5YQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0U3NTI1X01DSAkweDM1OWUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MDMxMAkweDUzMGQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjM3MVNCXzAJMHg3MDAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODIzNzFTQl8xCTB4NzAxMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyMzcxU0JfMgkweDcwMjAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjQzN1ZYCTB4NzAzMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNDM5VFgJMHg3MTAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODIzNzFBQl8wCTB4NzExMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyMzcxQUIJMHg3MTExCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODIzNzFBQl8yCTB4NzExMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyMzcxQUJfMwkweDcxMTMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgxMF9NQzEJMHg3MTIwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MTBfSUcxCTB4NzEyMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODEwX01DMwkweDcxMjIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgxMF9JRzMJMHg3MTIzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MTBFX01DCTB4NzEyNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODEwRV9JRwkweDcxMjUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjQ0M0xYXzAJMHg3MTgwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI0NDNMWF8xCTB4NzE4MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNDQzQlhfMAkweDcxOTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjQ0M0JYXzEJMHg3MTkxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI0NDNCWF8yCTB4NzE5MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzQ0ME1YCTB4NzE5NQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNDQzTVhfMAkweDcxOTgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjQ0M01YXzEJMHg3MTk5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI0NDNNWF8yCTB4NzE5YQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNDQzTVhfMwkweDcxOWIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjQ0M0dYXzAJMHg3MWEwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI0NDNHWF8xCTB4NzFhMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNDQzR1hfMgkweDcxYTIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjM3MkZCXzAJMHg3NjAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODIzNzJGQl8xCTB4NzYwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyMzcyRkJfMgkweDc2MDIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjM3MkZCXzMJMHg3NjAzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI0NTRHWAkweDg0YzQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjQ1MEdYCTB4ODRjNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNDUxTlgJMHg4NGNhCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI0NTROWCAgICAgMHg4NGNiCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODQ0NjBHWAkweDg0ZWEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JWFA0WFgJMHg4NTAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSVhQMjQwMAkweDkwMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JWFAyODAwCTB4OTAwNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX1MyMTE1MkJCCTB4YjE1MgorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfQ09NUFVUT05FCQkweDhlMGUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DT01QVVRPTkVfSVAyRVgJMHgwMjkxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ09NUFVUT05FX1BHCTB4MDMwMgorI2RlZmluZSBQQ0lfU1VCVkVORE9SX0lEX0NPTVBVVE9ORQkweDhlMGUKKyNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9DT01QVVRPTkVfUEc0CTB4MDAwMQorI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX0NPTVBVVE9ORV9QRzgJMHgwMDAyCisjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfQ09NUFVUT05FX1BHNgkweDAwMDMKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0tUSQkJMHg4ZTJlCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfS1RJX0VUMzJQMgkweDMwMDAKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0FEQVBURUMJCTB4OTAwNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FEQVBURUNfNzgxMAkweDEwNzgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BREFQVEVDXzc4MjEJMHgyMTc4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURBUFRFQ18zODYwMgkweDM4NjAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BREFQVEVDXzc4NTAJMHg1MDc4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURBUFRFQ183ODU1CTB4NTU3OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FEQVBURUNfNTgwMAkweDU4MDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BREFQVEVDXzM4NjAJMHg2MDM4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURBUFRFQ18xNDgwQQkweDYwNzUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BREFQVEVDXzc4NjAJMHg2MDc4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURBUFRFQ183ODYxCTB4NjE3OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FEQVBURUNfNzg3MAkweDcwNzgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BREFQVEVDXzc4NzEJMHg3MTc4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURBUFRFQ183ODcyCTB4NzI3OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FEQVBURUNfNzg3MwkweDczNzgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BREFQVEVDXzc4NzQJMHg3NDc4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURBUFRFQ183ODk1CTB4Nzg5NQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FEQVBURUNfNzg4MAkweDgwNzgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BREFQVEVDXzc4ODEJMHg4MTc4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURBUFRFQ183ODgyCTB4ODI3OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FEQVBURUNfNzg4MwkweDgzNzgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BREFQVEVDXzc4ODQJMHg4NDc4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURBUFRFQ183ODg1CTB4ODU3OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FEQVBURUNfNzg4NgkweDg2NzgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BREFQVEVDXzc4ODcJMHg4Nzc4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURBUFRFQ183ODg4CTB4ODg3OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FEQVBURUNfMTAzMAkweDhiNzgKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0FEQVBURUMyCQkweDkwMDUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BREFQVEVDMl8yOTQwVTIJMHgwMDEwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURBUFRFQzJfMjkzMFUyCTB4MDAxMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FEQVBURUMyXzc4OTBCCTB4MDAxMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FEQVBURUMyXzc4OTAJMHgwMDFmCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURBUFRFQzJfMzk0MFUyCTB4MDA1MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FEQVBURUMyXzM5NTBVMkQJMHgwMDUxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURBUFRFQzJfNzg5NgkweDAwNWYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BREFQVEVDMl83ODkyQQkweDAwODAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BREFQVEVDMl83ODkyQgkweDAwODEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BREFQVEVDMl83ODkyRAkweDAwODMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BREFQVEVDMl83ODkyUAkweDAwOGYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BREFQVEVDMl83ODk5QQkweDAwYzAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BREFQVEVDMl83ODk5QgkweDAwYzEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BREFQVEVDMl83ODk5RAkweDAwYzMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BREFQVEVDMl83ODk5UAkweDAwY2YKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BREFQVEVDMl9TQ0FNUAkweDA1MDMKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0FUUk9OSUNTCQkweDkwN2YKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVFJPTklDU18yMDE1CTB4MjAxNQorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfSE9MVEVLCQkweDk0MTIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9IT0xURUtfNjU2NQkweDY1NjUKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX05FVE1PUwkJMHg5NzEwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVUTU9TXzk3MDUJMHg5NzA1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVUTU9TXzk3MTUJMHg5NzE1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVUTU9TXzk3MzUJMHg5NzM1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVUTU9TXzk3NDUJMHg5NzQ1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVUTU9TXzk3NTUJMHg5NzU1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVUTU9TXzk4MDUJMHg5ODA1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVUTU9TXzk4MTUJMHg5ODE1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVUTU9TXzk4MzUJMHg5ODM1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVUTU9TXzk4NDUJMHg5ODQ1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVUTU9TXzk4NTUJMHg5ODU1CisKKyNkZWZpbmUgUENJX1NVQlZFTkRPUl9JRF9FWFNZUwkJMHhkODRkCisjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfRVhTWVNfNDAxNAkweDQwMTQKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1RJR0VSSkVUCQkweGUxNTkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdFUkpFVF8zMDAJMHgwMDAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHRVJKRVRfMTAwCTB4MDAwMgorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfVFRURUNICQkweDAzNTcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9UVFRFQ0hfTUMzMjIJMHgwMDBBCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9BUksJCTB4ZWRkOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FSS19TVElORwkJMHhhMDkxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVJLX1NUSU5HQVJLCTB4YTA5OQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FSS18yMDAwTVQJMHhhMGExCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaWVwb3J0X2lmLmggYi9pbmNsdWRlL2xpbnV4L3BjaWVwb3J0X2lmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QzZWFmYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvcGNpZXBvcnRfaWYuaApAQCAtMCwwICsxLDc0IEBACisvKgorICogRmlsZToJcGNpZXBvcnRfaWYuaAorICogUHVycG9zZToJUENJIEV4cHJlc3MgUG9ydCBCdXMgRHJpdmVyJ3MgSUYgRGF0YSBTdHJ1Y3R1cmUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgSW50ZWwKKyAqIENvcHlyaWdodCAoQykgVG9tIExvbmcgTmd1eWVuICh0b20ubC5uZ3V5ZW5AaW50ZWwuY29tKQorICovCisKKyNpZm5kZWYgX1BDSUVQT1JUX0lGX0hfCisjZGVmaW5lIF9QQ0lFUE9SVF9JRl9IXworCisvKiBQb3J0IFR5cGUgKi8KKyNkZWZpbmUgUENJRV9SQ19QT1JUCQkJNAkvKiBSb290IHBvcnQgb2YgUkMgKi8KKyNkZWZpbmUgUENJRV9TV19VUFNUUkVBTV9QT1JUCQk1CS8qIFVwc3RyZWFtIHBvcnQgb2YgU3dpdGNoICovCisjZGVmaW5lIFBDSUVfU1dfRE9XTlNUUkVBTV9QT1JUCQk2CS8qIERvd25zdHJlYW0gcG9ydCBvZiBTd2l0Y2ggKi8KKyNkZWZpbmUgUENJRV9BTllfUE9SVAkJCTcKKworLyogU2VydmljZSBUeXBlICovCisjZGVmaW5lIFBDSUVfUE9SVF9TRVJWSUNFX1BNRQkJMQkvKiBQb3dlciBNYW5hZ2VtZW50IEV2ZW50ICovCisjZGVmaW5lIFBDSUVfUE9SVF9TRVJWSUNFX0FFUgkJMgkvKiBBZHZhbmNlZCBFcnJvciBSZXBvcnRpbmcgKi8KKyNkZWZpbmUgUENJRV9QT1JUX1NFUlZJQ0VfSFAJCTQJLyogTmF0aXZlIEhvdHBsdWcgKi8KKyNkZWZpbmUgUENJRV9QT1JUX1NFUlZJQ0VfVkMJCTgJLyogVmlydHVhbCBDaGFubmVsICovCisKKy8qIFJvb3QvVXBzdHJlYW0vRG93bnN0cmVhbSBQb3J0J3MgSW50ZXJydXB0IE1vZGUgKi8KKyNkZWZpbmUgUENJRV9QT1JUX0lOVHhfTU9ERQkJMAorI2RlZmluZSBQQ0lFX1BPUlRfTVNJX01PREUJCTEKKyNkZWZpbmUgUENJRV9QT1JUX01TSVhfTU9ERQkJMgorCitzdHJ1Y3QgcGNpZV9wb3J0X3NlcnZpY2VfaWQgeworCV9fdTMyIHZlbmRvciwgZGV2aWNlOwkJLyogVmVuZG9yIGFuZCBkZXZpY2UgSUQgb3IgUENJX0FOWV9JRCovCisJX191MzIgc3VidmVuZG9yLCBzdWJkZXZpY2U7CS8qIFN1YnN5c3RlbSBJRCdzIG9yIFBDSV9BTllfSUQgKi8KKwlfX3UzMiBjbGFzcywgY2xhc3NfbWFzazsJLyogKGNsYXNzLHN1YmNsYXNzLHByb2ctaWYpIHRyaXBsZXQgKi8KKwlfX3UzMiBwb3J0X3R5cGUsIHNlcnZpY2VfdHlwZTsJLyogUG9ydCBFbnRpdHkgKi8KKwlrZXJuZWxfdWxvbmdfdCBkcml2ZXJfZGF0YTsKK307CisKK3N0cnVjdCBwY2llX2RldmljZSB7CisJaW50IAkJaXJxOwkgICAgLyogU2VydmljZSBJUlEvTVNJL01TSS1YIFZlY3RvciAqLworCWludCAJCWludGVycnVwdF9tb2RlOwkvKiBbMDpJTlR4IHwgMTpNU0kgfCAyOk1TSS1YXSAqLwkKKwlzdHJ1Y3QgcGNpZV9wb3J0X3NlcnZpY2VfaWQgaWQ7CS8qIFNlcnZpY2UgSUQgKi8KKwlzdHJ1Y3QgcGNpX2RldgkqcG9ydDsJICAgIC8qIFJvb3QvVXBzdHJlYW0vRG93bnN0cmVhbSBQb3J0ICovCisJdm9pZAkJKnByaXZfZGF0YTsgLyogU2VydmljZSBQcml2YXRlIERhdGEgKi8KKwlzdHJ1Y3QgZGV2aWNlCWRldmljZTsgICAgIC8qIEdlbmVyaWMgRGV2aWNlIEludGVyZmFjZSAqLworfTsKKyNkZWZpbmUgdG9fcGNpZV9kZXZpY2UoZCkgY29udGFpbmVyX29mKGQsIHN0cnVjdCBwY2llX2RldmljZSwgZGV2aWNlKQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3NlcnZpY2VfZGF0YShzdHJ1Y3QgcGNpZV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKK3sKKwlkZXYtPnByaXZfZGF0YSA9IGRhdGE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCogZ2V0X3NlcnZpY2VfZGF0YShzdHJ1Y3QgcGNpZV9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gZGV2LT5wcml2X2RhdGE7Cit9CisKK3N0cnVjdCBwY2llX3BvcnRfc2VydmljZV9kcml2ZXIgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJaW50ICgqcHJvYmUpIChzdHJ1Y3QgcGNpZV9kZXZpY2UgKmRldiwgCisJCWNvbnN0IHN0cnVjdCBwY2llX3BvcnRfc2VydmljZV9pZCAqaWQpOworCXZvaWQgKCpyZW1vdmUpIChzdHJ1Y3QgcGNpZV9kZXZpY2UgKmRldik7CisJaW50ICgqc3VzcGVuZCkgKHN0cnVjdCBwY2llX2RldmljZSAqZGV2LCB1MzIgc3RhdGUpOworCWludCAoKnJlc3VtZSkgKHN0cnVjdCBwY2llX2RldmljZSAqZGV2KTsKKworCWNvbnN0IHN0cnVjdCBwY2llX3BvcnRfc2VydmljZV9pZCAqaWRfdGFibGU7CisJc3RydWN0IGRldmljZV9kcml2ZXIgZHJpdmVyOworfTsKKyNkZWZpbmUgdG9fc2VydmljZV9kcml2ZXIoZCkgXAorCWNvbnRhaW5lcl9vZihkLCBzdHJ1Y3QgcGNpZV9wb3J0X3NlcnZpY2VfZHJpdmVyLCBkcml2ZXIpCisKK2V4dGVybiBpbnQgcGNpZV9wb3J0X3NlcnZpY2VfcmVnaXN0ZXIoc3RydWN0IHBjaWVfcG9ydF9zZXJ2aWNlX2RyaXZlciAqbmV3KTsKK2V4dGVybiB2b2lkIHBjaWVfcG9ydF9zZXJ2aWNlX3VucmVnaXN0ZXIoc3RydWN0IHBjaWVfcG9ydF9zZXJ2aWNlX2RyaXZlciAqbmV3KTsKKworI2VuZGlmIC8qIF9QQ0lFUE9SVF9JRl9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZXJjcHUuaCBiL2luY2x1ZGUvbGludXgvcGVyY3B1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ1MWViMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvcGVyY3B1LmgKQEAgLTAsMCArMSw2MSBAQAorI2lmbmRlZiBfX0xJTlVYX1BFUkNQVV9ICisjZGVmaW5lIF9fTElOVVhfUEVSQ1BVX0gKKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPiAvKiBGb3IgcHJlZW1wdF9kaXNhYmxlKCkgKi8KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+IC8qIEZvciBrbWFsbG9jKCkgKi8KKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4gLyogRm9yIG1lbXNldCgpICovCisjaW5jbHVkZSA8YXNtL3BlcmNwdS5oPgorCisvKiBFbm91Z2ggdG8gY292ZXIgYWxsIERFRklORV9QRVJfQ1BVcyBpbiBrZXJuZWwsIGluY2x1ZGluZyBtb2R1bGVzLiAqLworI2lmbmRlZiBQRVJDUFVfRU5PVUdIX1JPT00KKyNkZWZpbmUgUEVSQ1BVX0VOT1VHSF9ST09NIDMyNzY4CisjZW5kaWYKKworLyogTXVzdCBiZSBhbiBsdmFsdWUuICovCisjZGVmaW5lIGdldF9jcHVfdmFyKHZhcikgKCooeyBwcmVlbXB0X2Rpc2FibGUoKTsgJl9fZ2V0X2NwdV92YXIodmFyKTsgfSkpCisjZGVmaW5lIHB1dF9jcHVfdmFyKHZhcikgcHJlZW1wdF9lbmFibGUoKQorCisjaWZkZWYgQ09ORklHX1NNUAorCitzdHJ1Y3QgcGVyY3B1X2RhdGEgeworCXZvaWQgKnB0cnNbTlJfQ1BVU107CisJdm9pZCAqYmxrcDsKK307CisKKy8qIAorICogVXNlIHRoaXMgdG8gZ2V0IHRvIGEgY3B1J3MgdmVyc2lvbiBvZiB0aGUgcGVyLWNwdSBvYmplY3QgYWxsb2NhdGVkIHVzaW5nCisgKiBhbGxvY19wZXJjcHUuICBOb24tYXRvbWljIGFjY2VzcyB0byB0aGUgY3VycmVudCBDUFUncyB2ZXJzaW9uIHNob3VsZAorICogcHJvYmFibHkgYmUgY29tYmluZWQgd2l0aCBnZXRfY3B1KCkvcHV0X2NwdSgpLgorICovIAorI2RlZmluZSBwZXJfY3B1X3B0cihwdHIsIGNwdSkgICAgICAgICAgICAgICAgICAgXAorKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBzdHJ1Y3QgcGVyY3B1X2RhdGEgKl9fcCA9IChzdHJ1Y3QgcGVyY3B1X2RhdGEgKil+KHVuc2lnbmVkIGxvbmcpKHB0cik7IFwKKyAgICAgICAgKF9fdHlwZW9mX18ocHRyKSlfX3AtPnB0cnNbKGNwdSldOwlcCit9KQorCitleHRlcm4gdm9pZCAqX19hbGxvY19wZXJjcHUoc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbik7CitleHRlcm4gdm9pZCBmcmVlX3BlcmNwdShjb25zdCB2b2lkICopOworCisjZWxzZSAvKiBDT05GSUdfU01QICovCisKKyNkZWZpbmUgcGVyX2NwdV9wdHIocHRyLCBjcHUpIChwdHIpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqX19hbGxvY19wZXJjcHUoc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbikKK3sKKwl2b2lkICpyZXQgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWlmIChyZXQpCisJCW1lbXNldChyZXQsIDAsIHNpemUpOworCXJldHVybiByZXQ7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9wZXJjcHUoY29uc3Qgdm9pZCAqcHRyKQorewkKKwlrZnJlZShwdHIpOworfQorCisjZW5kaWYgLyogQ09ORklHX1NNUCAqLworCisvKiBTaW1wbGUgd3JhcHBlciBmb3IgdGhlIGNvbW1vbiBjYXNlOiB6ZXJvcyBtZW1vcnkuICovCisjZGVmaW5lIGFsbG9jX3BlcmNwdSh0eXBlKSBcCisJKCh0eXBlICopKF9fYWxsb2NfcGVyY3B1KHNpemVvZih0eXBlKSwgX19hbGlnbm9mX18odHlwZSkpKSkKKworI2VuZGlmIC8qIF9fTElOVVhfUEVSQ1BVX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGVyY3B1X2NvdW50ZXIuaCBiL2luY2x1ZGUvbGludXgvcGVyY3B1X2NvdW50ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDY3MDhlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9wZXJjcHVfY291bnRlci5oCkBAIC0wLDAgKzEsMTA3IEBACisjaWZuZGVmIF9MSU5VWF9QRVJDUFVfQ09VTlRFUl9ICisjZGVmaW5lIF9MSU5VWF9QRVJDUFVfQ09VTlRFUl9ICisvKgorICogQSBzaW1wbGUgImFwcHJveGltYXRlIGNvdW50ZXIiIGZvciB1c2UgaW4gZXh0MiBhbmQgZXh0MyBzdXBlcmJsb2Nrcy4KKyAqCisgKiBXQVJOSU5HOiB0aGVzZSB0aGluZ3MgYXJlIEhVR0UuICA0IGtieXRlcyBwZXIgY291bnRlciBvbiAzMi13YXkgUDQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorCisjaWZkZWYgQ09ORklHX1NNUAorCitzdHJ1Y3QgcGVyY3B1X2NvdW50ZXIgeworCXNwaW5sb2NrX3QgbG9jazsKKwlsb25nIGNvdW50OworCWxvbmcgKmNvdW50ZXJzOworfTsKKworI2lmIE5SX0NQVVMgPj0gMTYKKyNkZWZpbmUgRkJDX0JBVENICShOUl9DUFVTKjIpCisjZWxzZQorI2RlZmluZSBGQkNfQkFUQ0gJKE5SX0NQVVMqNCkKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHZvaWQgcGVyY3B1X2NvdW50ZXJfaW5pdChzdHJ1Y3QgcGVyY3B1X2NvdW50ZXIgKmZiYykKK3sKKwlzcGluX2xvY2tfaW5pdCgmZmJjLT5sb2NrKTsKKwlmYmMtPmNvdW50ID0gMDsKKwlmYmMtPmNvdW50ZXJzID0gYWxsb2NfcGVyY3B1KGxvbmcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGVyY3B1X2NvdW50ZXJfZGVzdHJveShzdHJ1Y3QgcGVyY3B1X2NvdW50ZXIgKmZiYykKK3sKKwlmcmVlX3BlcmNwdShmYmMtPmNvdW50ZXJzKTsKK30KKwordm9pZCBwZXJjcHVfY291bnRlcl9tb2Qoc3RydWN0IHBlcmNwdV9jb3VudGVyICpmYmMsIGxvbmcgYW1vdW50KTsKKworc3RhdGljIGlubGluZSBsb25nIHBlcmNwdV9jb3VudGVyX3JlYWQoc3RydWN0IHBlcmNwdV9jb3VudGVyICpmYmMpCit7CisJcmV0dXJuIGZiYy0+Y291bnQ7Cit9CisKKy8qCisgKiBJdCBpcyBwb3NzaWJsZSBmb3IgdGhlIHBlcmNwdV9jb3VudGVyX3JlYWQoKSB0byByZXR1cm4gYSBzbWFsbCBuZWdhdGl2ZQorICogbnVtYmVyIGZvciBzb21lIGNvdW50ZXIgd2hpY2ggc2hvdWxkIG5ldmVyIGJlIG5lZ2F0aXZlLgorICovCitzdGF0aWMgaW5saW5lIGxvbmcgcGVyY3B1X2NvdW50ZXJfcmVhZF9wb3NpdGl2ZShzdHJ1Y3QgcGVyY3B1X2NvdW50ZXIgKmZiYykKK3sKKwlsb25nIHJldCA9IGZiYy0+Y291bnQ7CisKKwliYXJyaWVyKCk7CQkvKiBQcmV2ZW50IHJlbG9hZHMgb2YgZmJjLT5jb3VudCAqLworCWlmIChyZXQgPiAwKQorCQlyZXR1cm4gcmV0OworCXJldHVybiAxOworfQorCisjZWxzZQorCitzdHJ1Y3QgcGVyY3B1X2NvdW50ZXIgeworCWxvbmcgY291bnQ7Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgcGVyY3B1X2NvdW50ZXJfaW5pdChzdHJ1Y3QgcGVyY3B1X2NvdW50ZXIgKmZiYykKK3sKKwlmYmMtPmNvdW50ID0gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBlcmNwdV9jb3VudGVyX2Rlc3Ryb3koc3RydWN0IHBlcmNwdV9jb3VudGVyICpmYmMpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcGVyY3B1X2NvdW50ZXJfbW9kKHN0cnVjdCBwZXJjcHVfY291bnRlciAqZmJjLCBsb25nIGFtb3VudCkKK3sKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwlmYmMtPmNvdW50ICs9IGFtb3VudDsKKwlwcmVlbXB0X2VuYWJsZSgpOworfQorCitzdGF0aWMgaW5saW5lIGxvbmcgcGVyY3B1X2NvdW50ZXJfcmVhZChzdHJ1Y3QgcGVyY3B1X2NvdW50ZXIgKmZiYykKK3sKKwlyZXR1cm4gZmJjLT5jb3VudDsKK30KKworc3RhdGljIGlubGluZSBsb25nIHBlcmNwdV9jb3VudGVyX3JlYWRfcG9zaXRpdmUoc3RydWN0IHBlcmNwdV9jb3VudGVyICpmYmMpCit7CisJcmV0dXJuIGZiYy0+Y291bnQ7Cit9CisKKyNlbmRpZgkvKiBDT05GSUdfU01QICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwZXJjcHVfY291bnRlcl9pbmMoc3RydWN0IHBlcmNwdV9jb3VudGVyICpmYmMpCit7CisJcGVyY3B1X2NvdW50ZXJfbW9kKGZiYywgMSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwZXJjcHVfY291bnRlcl9kZWMoc3RydWN0IHBlcmNwdV9jb3VudGVyICpmYmMpCit7CisJcGVyY3B1X2NvdW50ZXJfbW9kKGZiYywgLTEpOworfQorCisjZW5kaWYgLyogX0xJTlVYX1BFUkNQVV9DT1VOVEVSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGVyc29uYWxpdHkuaCBiL2luY2x1ZGUvbGludXgvcGVyc29uYWxpdHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGQ3ODBlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9wZXJzb25hbGl0eS5oCkBAIC0wLDAgKzEsMTE0IEBACisjaWZuZGVmIF9MSU5VWF9QRVJTT05BTElUWV9ICisjZGVmaW5lIF9MSU5VWF9QRVJTT05BTElUWV9ICisKKy8qCisgKiBIYW5kbGluZyBvZiBkaWZmZXJlbnQgQUJJcyAocGVyc29uYWxpdGllcykuCisgKi8KKworc3RydWN0IGV4ZWNfZG9tYWluOworc3RydWN0IHB0X3JlZ3M7CisKK2V4dGVybiBpbnQJCXJlZ2lzdGVyX2V4ZWNfZG9tYWluKHN0cnVjdCBleGVjX2RvbWFpbiAqKTsKK2V4dGVybiBpbnQJCXVucmVnaXN0ZXJfZXhlY19kb21haW4oc3RydWN0IGV4ZWNfZG9tYWluICopOworZXh0ZXJuIGludAkJX19zZXRfcGVyc29uYWxpdHkodW5zaWduZWQgbG9uZyk7CisKKy8qCisgKiBGbGFncyBmb3IgYnVnIGVtdWxhdGlvbi4KKyAqCisgKiBUaGVzZSBvY2N1cHkgdGhlIHRvcCB0aHJlZSBieXRlcy4KKyAqLworZW51bSB7CisJQUREUl9OT19SQU5ET01JWkUgPSAJMHgwMDQwMDAwLAkvKiBkaXNhYmxlIHJhbmRvbWl6YXRpb24gb2YgVkEgc3BhY2UgKi8KKwlGRFBJQ19GVU5DUFRSUyA9CTB4MDA4MDAwMCwJLyogdXNlcnNwYWNlIGZ1bmN0aW9uIHB0cnMgcG9pbnQgdG8gZGVzY3JpcHRvcnMKKwkJCQkJCSAqIChzaWduYWwgaGFuZGxpbmcpCisJCQkJCQkgKi8KKwlNTUFQX1BBR0VfWkVSTyA9CTB4MDEwMDAwMCwKKwlBRERSX0NPTVBBVF9MQVlPVVQgPQkweDAyMDAwMDAsCisJUkVBRF9JTVBMSUVTX0VYRUMgPQkweDA0MDAwMDAsCisJQUREUl9MSU1JVF8zMkJJVCA9CTB4MDgwMDAwMCwKKwlTSE9SVF9JTk9ERSA9CQkweDEwMDAwMDAsCisJV0hPTEVfU0VDT05EUyA9CQkweDIwMDAwMDAsCisJU1RJQ0tZX1RJTUVPVVRTCT0JMHg0MDAwMDAwLAorCUFERFJfTElNSVRfM0dCID0gCTB4ODAwMDAwMCwKK307CisKKy8qCisgKiBTZWN1cml0eS1yZWxldmFudCBjb21wYXRpYmlsaXR5IGZsYWdzIHRoYXQgbXVzdCBiZQorICogY2xlYXJlZCB1cG9uIHNldHVpZCBvciBzZXRnaWQgZXhlYzoKKyAqLworI2RlZmluZSBQRVJfQ0xFQVJfT05fU0VUSUQgKFJFQURfSU1QTElFU19FWEVDfEFERFJfTk9fUkFORE9NSVpFKQorCisvKgorICogUGVyc29uYWxpdHkgdHlwZXMuCisgKgorICogVGhlc2UgZ28gaW4gdGhlIGxvdyBieXRlLiAgQXZvaWQgdXNpbmcgdGhlIHRvcCBiaXQsIGl0IHdpbGwKKyAqIGNvbmZsaWN0IHdpdGggZXJyb3IgcmV0dXJucy4KKyAqLworZW51bSB7CisJUEVSX0xJTlVYID0JCTB4MDAwMCwKKwlQRVJfTElOVVhfMzJCSVQgPQkweDAwMDAgfCBBRERSX0xJTUlUXzMyQklULAorCVBFUl9MSU5VWF9GRFBJQyA9CTB4MDAwMCB8IEZEUElDX0ZVTkNQVFJTLAorCVBFUl9TVlI0ID0JCTB4MDAwMSB8IFNUSUNLWV9USU1FT1VUUyB8IE1NQVBfUEFHRV9aRVJPLAorCVBFUl9TVlIzID0JCTB4MDAwMiB8IFNUSUNLWV9USU1FT1VUUyB8IFNIT1JUX0lOT0RFLAorCVBFUl9TQ09TVlIzID0JCTB4MDAwMyB8IFNUSUNLWV9USU1FT1VUUyB8CisJCQkJCSBXSE9MRV9TRUNPTkRTIHwgU0hPUlRfSU5PREUsCisJUEVSX09TUjUgPQkJMHgwMDAzIHwgU1RJQ0tZX1RJTUVPVVRTIHwgV0hPTEVfU0VDT05EUywKKwlQRVJfV1lTRVYzODYgPQkJMHgwMDA0IHwgU1RJQ0tZX1RJTUVPVVRTIHwgU0hPUlRfSU5PREUsCisJUEVSX0lTQ1I0ID0JCTB4MDAwNSB8IFNUSUNLWV9USU1FT1VUUywKKwlQRVJfQlNEID0JCTB4MDAwNiwKKwlQRVJfU1VOT1MgPQkJMHgwMDA2IHwgU1RJQ0tZX1RJTUVPVVRTLAorCVBFUl9YRU5JWCA9CQkweDAwMDcgfCBTVElDS1lfVElNRU9VVFMgfCBTSE9SVF9JTk9ERSwKKwlQRVJfTElOVVgzMiA9CQkweDAwMDgsCisJUEVSX0xJTlVYMzJfM0dCID0JMHgwMDA4IHwgQUREUl9MSU1JVF8zR0IsCisJUEVSX0lSSVgzMiA9CQkweDAwMDkgfCBTVElDS1lfVElNRU9VVFMsLyogSVJJWDUgMzItYml0ICovCisJUEVSX0lSSVhOMzIgPQkJMHgwMDBhIHwgU1RJQ0tZX1RJTUVPVVRTLC8qIElSSVg2IG5ldyAzMi1iaXQgKi8KKwlQRVJfSVJJWDY0ID0JCTB4MDAwYiB8IFNUSUNLWV9USU1FT1VUUywvKiBJUklYNiA2NC1iaXQgKi8KKwlQRVJfUklTQ09TID0JCTB4MDAwYywKKwlQRVJfU09MQVJJUyA9CQkweDAwMGQgfCBTVElDS1lfVElNRU9VVFMsCisJUEVSX1VXNyA9CQkweDAwMGUgfCBTVElDS1lfVElNRU9VVFMgfCBNTUFQX1BBR0VfWkVSTywKKwlQRVJfT1NGNCA9CQkweDAwMGYsCQkJIC8qIE9TRi8xIHY0ICovCisJUEVSX0hQVVggPQkJMHgwMDEwLAorCVBFUl9NQVNLID0JCTB4MDBmZiwKK307CisKKworLyoKKyAqIERlc2NyaXB0aW9uIG9mIGFuIGV4ZWN1dGlvbiBkb21haW4uCisgKiAKKyAqIFRoZSBmaXJzdCB0d28gbWVtYmVycyBhcmUgcmVmZXJuY2VkIGZyb20gYXNzZW1ibHkgc291cmNlCisgKiBhbmQgc2hvdWxkIHN0YXkgd2hlcmUgdGhleSBhcmUgdW5sZXNzIGV4cGxpY2l0bHkgbmVlZGVkLgorICovCit0eXBlZGVmIHZvaWQgKCpoYW5kbGVyX3QpKGludCwgc3RydWN0IHB0X3JlZ3MgKik7CisKK3N0cnVjdCBleGVjX2RvbWFpbiB7CisJY29uc3QgY2hhcgkJKm5hbWU7CQkvKiBuYW1lIG9mIHRoZSBleGVjZG9tYWluICovCisJaGFuZGxlcl90CQloYW5kbGVyOwkvKiBoYW5kbGVyIGZvciBzeXNjYWxscyAqLworCXVuc2lnbmVkIGNoYXIJCXBlcnNfbG93OwkvKiBsb3dlc3QgcGVyc29uYWxpdHkgKi8KKwl1bnNpZ25lZCBjaGFyCQlwZXJzX2hpZ2g7CS8qIGhpZ2hlc3QgcGVyc29uYWxpdHkgKi8KKwl1bnNpZ25lZCBsb25nCQkqc2lnbmFsX21hcDsJLyogc2lnbmFsIG1hcHBpbmcgKi8KKwl1bnNpZ25lZCBsb25nCQkqc2lnbmFsX2ludm1hcDsJLyogcmV2ZXJzZSBzaWduYWwgbWFwcGluZyAqLworCXN0cnVjdCBtYXBfc2VnbWVudAkqZXJyX21hcDsJLyogZXJyb3IgbWFwcGluZyAqLworCXN0cnVjdCBtYXBfc2VnbWVudAkqc29ja3R5cGVfbWFwOwkvKiBzb2NrZXQgdHlwZSBtYXBwaW5nICovCisJc3RydWN0IG1hcF9zZWdtZW50CSpzb2Nrb3B0X21hcDsJLyogc29ja2V0IG9wdGlvbiBtYXBwaW5nICovCisJc3RydWN0IG1hcF9zZWdtZW50CSphZl9tYXA7CS8qIGFkZHJlc3MgZmFtaWx5IG1hcHBpbmcgKi8KKwlzdHJ1Y3QgbW9kdWxlCQkqbW9kdWxlOwkvKiBtb2R1bGUgY29udGV4dCBvZiB0aGUgZWQuICovCisJc3RydWN0IGV4ZWNfZG9tYWluCSpuZXh0OwkJLyogbGlua2VkIGxpc3QgKGludGVybmFsKSAqLworfTsKKworLyoKKyAqIFJldHVybiB0aGUgYmFzZSBwZXJzb25hbGl0eSB3aXRob3V0IGZsYWdzLgorICovCisjZGVmaW5lIHBlcnNvbmFsaXR5KHBlcnMpCShwZXJzICYgUEVSX01BU0spCisKKy8qCisgKiBQZXJzb25hbGl0eSBvZiB0aGUgY3VycmVudGx5IHJ1bm5pbmcgcHJvY2Vzcy4KKyAqLworI2RlZmluZSBnZXRfcGVyc29uYWxpdHkJCShjdXJyZW50LT5wZXJzb25hbGl0eSkKKworLyoKKyAqIENoYW5nZSBwZXJzb25hbGl0eSBvZiB0aGUgY3VycmVudGx5IHJ1bm5pbmcgcHJvY2Vzcy4KKyAqLworI2RlZmluZSBzZXRfcGVyc29uYWxpdHkocGVycykgXAorCSgoY3VycmVudC0+cGVyc29uYWxpdHkgPT0gcGVycykgPyAwIDogX19zZXRfcGVyc29uYWxpdHkocGVycykpCisKKyNlbmRpZiAvKiBfTElOVVhfUEVSU09OQUxJVFlfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZmtleXYyLmggYi9pbmNsdWRlL2xpbnV4L3Bma2V5djIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmI1MTkyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9wZmtleXYyLmgKQEAgLTAsMCArMSwzMzYgQEAKKy8qIFBGX0tFWSB1c2VyIGludGVyZmFjZSwgdGhpcyBpcyBkZWZpbmVkIGJ5IHJmYzIzNjcgc28KKyAqIGRvIG5vdCBtYWtlIGFyYml0cmFyeSBtb2RpZmljYXRpb25zIG9yIGVsc2UgdGhpcyBoZWFkZXIKKyAqIGZpbGUgd2lsbCBub3QgYmUgY29tcGxpYW50LgorICovCisKKyNpZm5kZWYgX0xJTlVYX1BGS0VZMl9ICisjZGVmaW5lIF9MSU5VWF9QRktFWTJfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2RlZmluZSBQRl9LRVlfVjIJCTIKKyNkZWZpbmUgUEZLRVlWMl9SRVZJU0lPTgkxOTk4MDZMCisKK3N0cnVjdCBzYWRiX21zZyB7CisJdWludDhfdAkJc2FkYl9tc2dfdmVyc2lvbjsKKwl1aW50OF90CQlzYWRiX21zZ190eXBlOworCXVpbnQ4X3QJCXNhZGJfbXNnX2Vycm5vOworCXVpbnQ4X3QJCXNhZGJfbXNnX3NhdHlwZTsKKwl1aW50MTZfdAlzYWRiX21zZ19sZW47CisJdWludDE2X3QJc2FkYl9tc2dfcmVzZXJ2ZWQ7CisJdWludDMyX3QJc2FkYl9tc2dfc2VxOworCXVpbnQzMl90CXNhZGJfbXNnX3BpZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisvKiBzaXplb2Yoc3RydWN0IHNhZGJfbXNnKSA9PSAxNiAqLworCitzdHJ1Y3Qgc2FkYl9leHQgeworCXVpbnQxNl90CXNhZGJfZXh0X2xlbjsKKwl1aW50MTZfdAlzYWRiX2V4dF90eXBlOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKy8qIHNpemVvZihzdHJ1Y3Qgc2FkYl9leHQpID09IDQgKi8KKworc3RydWN0IHNhZGJfc2EgeworCXVpbnQxNl90CXNhZGJfc2FfbGVuOworCXVpbnQxNl90CXNhZGJfc2FfZXh0dHlwZTsKKwl1aW50MzJfdAlzYWRiX3NhX3NwaTsKKwl1aW50OF90CQlzYWRiX3NhX3JlcGxheTsKKwl1aW50OF90CQlzYWRiX3NhX3N0YXRlOworCXVpbnQ4X3QJCXNhZGJfc2FfYXV0aDsKKwl1aW50OF90CQlzYWRiX3NhX2VuY3J5cHQ7CisJdWludDMyX3QJc2FkYl9zYV9mbGFnczsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisvKiBzaXplb2Yoc3RydWN0IHNhZGJfc2EpID09IDE2ICovCisKK3N0cnVjdCBzYWRiX2xpZmV0aW1lIHsKKwl1aW50MTZfdAlzYWRiX2xpZmV0aW1lX2xlbjsKKwl1aW50MTZfdAlzYWRiX2xpZmV0aW1lX2V4dHR5cGU7CisJdWludDMyX3QJc2FkYl9saWZldGltZV9hbGxvY2F0aW9uczsKKwl1aW50NjRfdAlzYWRiX2xpZmV0aW1lX2J5dGVzOworCXVpbnQ2NF90CXNhZGJfbGlmZXRpbWVfYWRkdGltZTsKKwl1aW50NjRfdAlzYWRiX2xpZmV0aW1lX3VzZXRpbWU7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworLyogc2l6ZW9mKHN0cnVjdCBzYWRiX2xpZmV0aW1lKSA9PSAzMiAqLworCitzdHJ1Y3Qgc2FkYl9hZGRyZXNzIHsKKwl1aW50MTZfdAlzYWRiX2FkZHJlc3NfbGVuOworCXVpbnQxNl90CXNhZGJfYWRkcmVzc19leHR0eXBlOworCXVpbnQ4X3QJCXNhZGJfYWRkcmVzc19wcm90bzsKKwl1aW50OF90CQlzYWRiX2FkZHJlc3NfcHJlZml4bGVuOworCXVpbnQxNl90CXNhZGJfYWRkcmVzc19yZXNlcnZlZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisvKiBzaXplb2Yoc3RydWN0IHNhZGJfYWRkcmVzcykgPT0gOCAqLworCitzdHJ1Y3Qgc2FkYl9rZXkgeworCXVpbnQxNl90CXNhZGJfa2V5X2xlbjsKKwl1aW50MTZfdAlzYWRiX2tleV9leHR0eXBlOworCXVpbnQxNl90CXNhZGJfa2V5X2JpdHM7CisJdWludDE2X3QJc2FkYl9rZXlfcmVzZXJ2ZWQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworLyogc2l6ZW9mKHN0cnVjdCBzYWRiX2tleSkgPT0gOCAqLworCitzdHJ1Y3Qgc2FkYl9pZGVudCB7CisJdWludDE2X3QJc2FkYl9pZGVudF9sZW47CisJdWludDE2X3QJc2FkYl9pZGVudF9leHR0eXBlOworCXVpbnQxNl90CXNhZGJfaWRlbnRfdHlwZTsKKwl1aW50MTZfdAlzYWRiX2lkZW50X3Jlc2VydmVkOworCXVpbnQ2NF90CXNhZGJfaWRlbnRfaWQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworLyogc2l6ZW9mKHN0cnVjdCBzYWRiX2lkZW50KSA9PSAxNiAqLworCitzdHJ1Y3Qgc2FkYl9zZW5zIHsKKwl1aW50MTZfdAlzYWRiX3NlbnNfbGVuOworCXVpbnQxNl90CXNhZGJfc2Vuc19leHR0eXBlOworCXVpbnQzMl90CXNhZGJfc2Vuc19kcGQ7CisJdWludDhfdAkJc2FkYl9zZW5zX3NlbnNfbGV2ZWw7CisJdWludDhfdAkJc2FkYl9zZW5zX3NlbnNfbGVuOworCXVpbnQ4X3QJCXNhZGJfc2Vuc19pbnRlZ19sZXZlbDsKKwl1aW50OF90CQlzYWRiX3NlbnNfaW50ZWdfbGVuOworCXVpbnQzMl90CXNhZGJfc2Vuc19yZXNlcnZlZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisvKiBzaXplb2Yoc3RydWN0IHNhZGJfc2VucykgPT0gMTYgKi8KKworLyogZm9sbG93ZWQgYnk6CisJdWludDY0X3QJc2FkYl9zZW5zX2JpdG1hcFtzZW5zX2xlbl07CisJdWludDY0X3QJc2FkYl9pbnRlZ19iaXRtYXBbaW50ZWdfbGVuXTsgICovCisKK3N0cnVjdCBzYWRiX3Byb3AgeworCXVpbnQxNl90CXNhZGJfcHJvcF9sZW47CisJdWludDE2X3QJc2FkYl9wcm9wX2V4dHR5cGU7CisJdWludDhfdAkJc2FkYl9wcm9wX3JlcGxheTsKKwl1aW50OF90CQlzYWRiX3Byb3BfcmVzZXJ2ZWRbM107Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworLyogc2l6ZW9mKHN0cnVjdCBzYWRiX3Byb3ApID09IDggKi8KKworLyogZm9sbG93ZWQgYnk6CisJc3RydWN0IHNhZGJfY29tYiBzYWRiX2NvbWJzWyhzYWRiX3Byb3BfbGVuICsKKwkJc2l6ZW9mKHVpbnQ2NF90KSAtIHNpemVvZihzdHJ1Y3Qgc2FkYl9wcm9wKSkgLworCQlzaXplb2Yoc3RydXQgc2FkYl9jb21iKV07ICovCisKK3N0cnVjdCBzYWRiX2NvbWIgeworCXVpbnQ4X3QJCXNhZGJfY29tYl9hdXRoOworCXVpbnQ4X3QJCXNhZGJfY29tYl9lbmNyeXB0OworCXVpbnQxNl90CXNhZGJfY29tYl9mbGFnczsKKwl1aW50MTZfdAlzYWRiX2NvbWJfYXV0aF9taW5iaXRzOworCXVpbnQxNl90CXNhZGJfY29tYl9hdXRoX21heGJpdHM7CisJdWludDE2X3QJc2FkYl9jb21iX2VuY3J5cHRfbWluYml0czsKKwl1aW50MTZfdAlzYWRiX2NvbWJfZW5jcnlwdF9tYXhiaXRzOworCXVpbnQzMl90CXNhZGJfY29tYl9yZXNlcnZlZDsKKwl1aW50MzJfdAlzYWRiX2NvbWJfc29mdF9hbGxvY2F0aW9uczsKKwl1aW50MzJfdAlzYWRiX2NvbWJfaGFyZF9hbGxvY2F0aW9uczsKKwl1aW50NjRfdAlzYWRiX2NvbWJfc29mdF9ieXRlczsKKwl1aW50NjRfdAlzYWRiX2NvbWJfaGFyZF9ieXRlczsKKwl1aW50NjRfdAlzYWRiX2NvbWJfc29mdF9hZGR0aW1lOworCXVpbnQ2NF90CXNhZGJfY29tYl9oYXJkX2FkZHRpbWU7CisJdWludDY0X3QJc2FkYl9jb21iX3NvZnRfdXNldGltZTsKKwl1aW50NjRfdAlzYWRiX2NvbWJfaGFyZF91c2V0aW1lOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKy8qIHNpemVvZihzdHJ1Y3Qgc2FkYl9jb21iKSA9PSA3MiAqLworCitzdHJ1Y3Qgc2FkYl9zdXBwb3J0ZWQgeworCXVpbnQxNl90CXNhZGJfc3VwcG9ydGVkX2xlbjsKKwl1aW50MTZfdAlzYWRiX3N1cHBvcnRlZF9leHR0eXBlOworCXVpbnQzMl90CXNhZGJfc3VwcG9ydGVkX3Jlc2VydmVkOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKy8qIHNpemVvZihzdHJ1Y3Qgc2FkYl9zdXBwb3J0ZWQpID09IDggKi8KKworLyogZm9sbG93ZWQgYnk6CisJc3RydWN0IHNhZGJfYWxnIHNhZGJfYWxnc1soc2FkYl9zdXBwb3J0ZWRfbGVuICsKKwkJc2l6ZW9mKHVpbnQ2NF90KSAtIHNpemVvZihzdHJ1Y3Qgc2FkYl9zdXBwb3J0ZWQpKSAvCisJCXNpemVvZihzdHJ1Y3Qgc2FkYl9hbGcpXTsgKi8KKworc3RydWN0IHNhZGJfYWxnIHsKKwl1aW50OF90CQlzYWRiX2FsZ19pZDsKKwl1aW50OF90CQlzYWRiX2FsZ19pdmxlbjsKKwl1aW50MTZfdAlzYWRiX2FsZ19taW5iaXRzOworCXVpbnQxNl90CXNhZGJfYWxnX21heGJpdHM7CisJdWludDE2X3QJc2FkYl9hbGdfcmVzZXJ2ZWQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworLyogc2l6ZW9mKHN0cnVjdCBzYWRiX2FsZykgPT0gOCAqLworCitzdHJ1Y3Qgc2FkYl9zcGlyYW5nZSB7CisJdWludDE2X3QJc2FkYl9zcGlyYW5nZV9sZW47CisJdWludDE2X3QJc2FkYl9zcGlyYW5nZV9leHR0eXBlOworCXVpbnQzMl90CXNhZGJfc3BpcmFuZ2VfbWluOworCXVpbnQzMl90CXNhZGJfc3BpcmFuZ2VfbWF4OworCXVpbnQzMl90CXNhZGJfc3BpcmFuZ2VfcmVzZXJ2ZWQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworLyogc2l6ZW9mKHN0cnVjdCBzYWRiX3NwaXJhbmdlKSA9PSAxNiAqLworCitzdHJ1Y3Qgc2FkYl94X2ttcHJpdmF0ZSB7CisJdWludDE2X3QJc2FkYl94X2ttcHJpdmF0ZV9sZW47CisJdWludDE2X3QJc2FkYl94X2ttcHJpdmF0ZV9leHR0eXBlOworCXVfaW50MzJfdAlzYWRiX3hfa21wcml2YXRlX3Jlc2VydmVkOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKy8qIHNpemVvZihzdHJ1Y3Qgc2FkYl94X2ttcHJpdmF0ZSkgPT0gOCAqLworCitzdHJ1Y3Qgc2FkYl94X3NhMiB7CisJdWludDE2X3QJc2FkYl94X3NhMl9sZW47CisJdWludDE2X3QJc2FkYl94X3NhMl9leHR0eXBlOworCXVpbnQ4X3QJCXNhZGJfeF9zYTJfbW9kZTsKKwl1aW50OF90CQlzYWRiX3hfc2EyX3Jlc2VydmVkMTsKKwl1aW50MTZfdAlzYWRiX3hfc2EyX3Jlc2VydmVkMjsKKwl1aW50MzJfdAlzYWRiX3hfc2EyX3NlcXVlbmNlOworCXVpbnQzMl90CXNhZGJfeF9zYTJfcmVxaWQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworLyogc2l6ZW9mKHN0cnVjdCBzYWRiX3hfc2EyKSA9PSAxNiAqLworCitzdHJ1Y3Qgc2FkYl94X3BvbGljeSB7CisJdWludDE2X3QJc2FkYl94X3BvbGljeV9sZW47CisJdWludDE2X3QJc2FkYl94X3BvbGljeV9leHR0eXBlOworCXVpbnQxNl90CXNhZGJfeF9wb2xpY3lfdHlwZTsKKwl1aW50OF90CQlzYWRiX3hfcG9saWN5X2RpcjsKKwl1aW50OF90CQlzYWRiX3hfcG9saWN5X3Jlc2VydmVkOworCXVpbnQzMl90CXNhZGJfeF9wb2xpY3lfaWQ7CisJdWludDMyX3QJc2FkYl94X3BvbGljeV9wcmlvcml0eTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisvKiBzaXplb2Yoc3RydWN0IHNhZGJfeF9wb2xpY3kpID09IDE2ICovCisKK3N0cnVjdCBzYWRiX3hfaXBzZWNyZXF1ZXN0IHsKKwl1aW50MTZfdAlzYWRiX3hfaXBzZWNyZXF1ZXN0X2xlbjsKKwl1aW50MTZfdAlzYWRiX3hfaXBzZWNyZXF1ZXN0X3Byb3RvOworCXVpbnQ4X3QJCXNhZGJfeF9pcHNlY3JlcXVlc3RfbW9kZTsKKwl1aW50OF90CQlzYWRiX3hfaXBzZWNyZXF1ZXN0X2xldmVsOworCXVpbnQxNl90CXNhZGJfeF9pcHNlY3JlcXVlc3RfcmVzZXJ2ZWQxOworCXVpbnQzMl90CXNhZGJfeF9pcHNlY3JlcXVlc3RfcmVxaWQ7CisJdWludDMyX3QJc2FkYl94X2lwc2VjcmVxdWVzdF9yZXNlcnZlZDI7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworLyogc2l6ZW9mKHN0cnVjdCBzYWRiX3hfaXBzZWNyZXF1ZXN0KSA9PSAxNiAqLworCisvKiBUaGlzIGRlZmluZXMgdGhlIFRZUEUgb2YgTmF0IFRyYXZlcnNhbCBpbiB1c2UuICBDdXJyZW50bHkgb25seSBvbmUKKyAqIHR5cGUgb2YgTkFULVQgaXMgc3VwcG9ydGVkLCBkcmFmdC1pZXRmLWlwc2VjLXVkcC1lbmNhcHMtMDYKKyAqLworc3RydWN0IHNhZGJfeF9uYXRfdF90eXBlIHsKKwl1aW50MTZfdAlzYWRiX3hfbmF0X3RfdHlwZV9sZW47CisJdWludDE2X3QJc2FkYl94X25hdF90X3R5cGVfZXh0dHlwZTsKKwl1aW50OF90CQlzYWRiX3hfbmF0X3RfdHlwZV90eXBlOworCXVpbnQ4X3QJCXNhZGJfeF9uYXRfdF90eXBlX3Jlc2VydmVkWzNdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKy8qIHNpemVvZihzdHJ1Y3Qgc2FkYl94X25hdF90X3R5cGUpID09IDggKi8KKworLyogUGFzcyBhIE5BVCBUcmF2ZXJzYWwgcG9ydCAoU291cmNlIG9yIERlc3QgcG9ydCkgKi8KK3N0cnVjdCBzYWRiX3hfbmF0X3RfcG9ydCB7CisJdWludDE2X3QJc2FkYl94X25hdF90X3BvcnRfbGVuOworCXVpbnQxNl90CXNhZGJfeF9uYXRfdF9wb3J0X2V4dHR5cGU7CisJdWludDE2X3QJc2FkYl94X25hdF90X3BvcnRfcG9ydDsKKwl1aW50MTZfdAlzYWRiX3hfbmF0X3RfcG9ydF9yZXNlcnZlZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisvKiBzaXplb2Yoc3RydWN0IHNhZGJfeF9uYXRfdF9wb3J0KSA9PSA4ICovCisKKy8qIE1lc3NhZ2UgdHlwZXMgKi8KKyNkZWZpbmUgU0FEQl9SRVNFUlZFRAkJMAorI2RlZmluZSBTQURCX0dFVFNQSQkJMQorI2RlZmluZSBTQURCX1VQREFURQkJMgorI2RlZmluZSBTQURCX0FERAkJMworI2RlZmluZSBTQURCX0RFTEVURQkJNAorI2RlZmluZSBTQURCX0dFVAkJNQorI2RlZmluZSBTQURCX0FDUVVJUkUJCTYKKyNkZWZpbmUgU0FEQl9SRUdJU1RFUgkJNworI2RlZmluZSBTQURCX0VYUElSRQkJOAorI2RlZmluZSBTQURCX0ZMVVNICQk5CisjZGVmaW5lIFNBREJfRFVNUAkJMTAKKyNkZWZpbmUgU0FEQl9YX1BST01JU0MJCTExCisjZGVmaW5lIFNBREJfWF9QQ0hBTkdFCQkxMgorI2RlZmluZSBTQURCX1hfU1BEVVBEQVRFCTEzCisjZGVmaW5lIFNBREJfWF9TUERBREQJCTE0CisjZGVmaW5lIFNBREJfWF9TUERERUxFVEUJMTUKKyNkZWZpbmUgU0FEQl9YX1NQREdFVAkJMTYKKyNkZWZpbmUgU0FEQl9YX1NQREFDUVVJUkUJMTcKKyNkZWZpbmUgU0FEQl9YX1NQRERVTVAJCTE4CisjZGVmaW5lIFNBREJfWF9TUERGTFVTSAkJMTkKKyNkZWZpbmUgU0FEQl9YX1NQRFNFVElEWAkyMAorI2RlZmluZSBTQURCX1hfU1BERVhQSVJFCTIxCisjZGVmaW5lIFNBREJfWF9TUERERUxFVEUyCTIyCisjZGVmaW5lIFNBREJfWF9OQVRfVF9ORVdfTUFQUElORwkyMworI2RlZmluZSBTQURCX01BWAkJMjMKKworLyogU2VjdXJpdHkgQXNzb2NpYXRpb24gZmxhZ3MgKi8KKyNkZWZpbmUgU0FEQl9TQUZMQUdTX1BGUwkxCisjZGVmaW5lIFNBREJfU0FGTEFHU19ERUNBUF9EU0NQCTB4NDAwMDAwMDAKKyNkZWZpbmUgU0FEQl9TQUZMQUdTX05PRUNOCTB4ODAwMDAwMDAKKworLyogU2VjdXJpdHkgQXNzb2NpYXRpb24gc3RhdGVzICovCisjZGVmaW5lIFNBREJfU0FTVEFURV9MQVJWQUwJMAorI2RlZmluZSBTQURCX1NBU1RBVEVfTUFUVVJFCTEKKyNkZWZpbmUgU0FEQl9TQVNUQVRFX0RZSU5HCTIKKyNkZWZpbmUgU0FEQl9TQVNUQVRFX0RFQUQJMworI2RlZmluZSBTQURCX1NBU1RBVEVfTUFYCTMKKworLyogU2VjdXJpdHkgQXNzb2NpYXRpb24gdHlwZXMgKi8KKyNkZWZpbmUgU0FEQl9TQVRZUEVfVU5TUEVDCTAKKyNkZWZpbmUgU0FEQl9TQVRZUEVfQUgJCTIKKyNkZWZpbmUgU0FEQl9TQVRZUEVfRVNQCQkzCisjZGVmaW5lIFNBREJfU0FUWVBFX1JTVlAJNQorI2RlZmluZSBTQURCX1NBVFlQRV9PU1BGVjIJNgorI2RlZmluZSBTQURCX1NBVFlQRV9SSVBWMgk3CisjZGVmaW5lIFNBREJfU0FUWVBFX01JUAkJOAorI2RlZmluZSBTQURCX1hfU0FUWVBFX0lQQ09NUAk5CisjZGVmaW5lIFNBREJfU0FUWVBFX01BWAkJOQorCisvKiBBdXRoZW50aWNhdGlvbiBhbGdvcml0aG1zICovCisjZGVmaW5lIFNBREJfQUFMR19OT05FCQkJMAorI2RlZmluZSBTQURCX0FBTEdfTUQ1SE1BQwkJMgorI2RlZmluZSBTQURCX0FBTEdfU0hBMUhNQUMJCTMKKyNkZWZpbmUgU0FEQl9YX0FBTEdfU0hBMl8yNTZITUFDCTUKKyNkZWZpbmUgU0FEQl9YX0FBTEdfU0hBMl8zODRITUFDCTYKKyNkZWZpbmUgU0FEQl9YX0FBTEdfU0hBMl81MTJITUFDCTcKKyNkZWZpbmUgU0FEQl9YX0FBTEdfUklQRU1EMTYwSE1BQwk4CisjZGVmaW5lIFNBREJfWF9BQUxHX05VTEwJCTI1MQkvKiBrYW1lICovCisjZGVmaW5lIFNBREJfQUFMR19NQVgJCQkyNTEKKworLyogRW5jcnlwdGlvbiBhbGdvcml0aG1zICovCisjZGVmaW5lIFNBREJfRUFMR19OT05FCQkJMAorI2RlZmluZSBTQURCX0VBTEdfREVTQ0JDCQkyCisjZGVmaW5lIFNBREJfRUFMR18zREVTQ0JDCQkzCisjZGVmaW5lIFNBREJfWF9FQUxHX0NBU1RDQkMJCTYKKyNkZWZpbmUgU0FEQl9YX0VBTEdfQkxPV0ZJU0hDQkMJCTcKKyNkZWZpbmUgU0FEQl9FQUxHX05VTEwJCQkxMQorI2RlZmluZSBTQURCX1hfRUFMR19BRVNDQkMJCTEyCisjZGVmaW5lIFNBREJfRUFMR19NQVggICAgICAgICAgICAgICAgICAgMjUzIC8qIGxhc3QgRUFMRyAqLworLyogcHJpdmF0ZSBhbGxvY2F0aW9ucyBzaG91bGQgdXNlIDI0OS0yNTUgKFJGQzI0MDcpICovCisjZGVmaW5lIFNBREJfWF9FQUxHX1NFUlBFTlRDQkMgIDI1MiAgICAgLyogZHJhZnQtaWV0Zi1pcHNlYy1jaXBoLWFlcy1jYmMtMDAgKi8KKyNkZWZpbmUgU0FEQl9YX0VBTEdfVFdPRklTSENCQyAgMjUzICAgICAvKiBkcmFmdC1pZXRmLWlwc2VjLWNpcGgtYWVzLWNiYy0wMCAqLworCisvKiBDb21wcmVzc2lvbiBhbGdvcml0aG1zICovCisjZGVmaW5lIFNBREJfWF9DQUxHX05PTkUJCTAKKyNkZWZpbmUgU0FEQl9YX0NBTEdfT1VJCQkJMQorI2RlZmluZSBTQURCX1hfQ0FMR19ERUZMQVRFCQkyCisjZGVmaW5lIFNBREJfWF9DQUxHX0xaUwkJCTMKKyNkZWZpbmUgU0FEQl9YX0NBTEdfTFpKSAkJNAorI2RlZmluZSBTQURCX1hfQ0FMR19NQVgJCQk0CisKKy8qIEV4dGVuc2lvbiBIZWFkZXIgdmFsdWVzICovCisjZGVmaW5lIFNBREJfRVhUX1JFU0VSVkVECQkwCisjZGVmaW5lIFNBREJfRVhUX1NBCQkJMQorI2RlZmluZSBTQURCX0VYVF9MSUZFVElNRV9DVVJSRU5UCTIKKyNkZWZpbmUgU0FEQl9FWFRfTElGRVRJTUVfSEFSRAkJMworI2RlZmluZSBTQURCX0VYVF9MSUZFVElNRV9TT0ZUCQk0CisjZGVmaW5lIFNBREJfRVhUX0FERFJFU1NfU1JDCQk1CisjZGVmaW5lIFNBREJfRVhUX0FERFJFU1NfRFNUCQk2CisjZGVmaW5lIFNBREJfRVhUX0FERFJFU1NfUFJPWFkJCTcKKyNkZWZpbmUgU0FEQl9FWFRfS0VZX0FVVEgJCTgKKyNkZWZpbmUgU0FEQl9FWFRfS0VZX0VOQ1JZUFQJCTkKKyNkZWZpbmUgU0FEQl9FWFRfSURFTlRJVFlfU1JDCQkxMAorI2RlZmluZSBTQURCX0VYVF9JREVOVElUWV9EU1QJCTExCisjZGVmaW5lIFNBREJfRVhUX1NFTlNJVElWSVRZCQkxMgorI2RlZmluZSBTQURCX0VYVF9QUk9QT1NBTAkJMTMKKyNkZWZpbmUgU0FEQl9FWFRfU1VQUE9SVEVEX0FVVEgJCTE0CisjZGVmaW5lIFNBREJfRVhUX1NVUFBPUlRFRF9FTkNSWVBUCTE1CisjZGVmaW5lIFNBREJfRVhUX1NQSVJBTkdFCQkxNgorI2RlZmluZSBTQURCX1hfRVhUX0tNUFJJVkFURQkJMTcKKyNkZWZpbmUgU0FEQl9YX0VYVF9QT0xJQ1kJCTE4CisjZGVmaW5lIFNBREJfWF9FWFRfU0EyCQkJMTkKKy8qIFRoZSBuZXh0IGZvdXIgZW50cmllcyBhcmUgZm9yIHNldHRpbmcgdXAgTkFUIFRyYXZlcnNhbCAqLworI2RlZmluZSBTQURCX1hfRVhUX05BVF9UX1RZUEUJCTIwCisjZGVmaW5lIFNBREJfWF9FWFRfTkFUX1RfU1BPUlQJCTIxCisjZGVmaW5lIFNBREJfWF9FWFRfTkFUX1RfRFBPUlQJCTIyCisjZGVmaW5lIFNBREJfWF9FWFRfTkFUX1RfT0EJCTIzCisjZGVmaW5lIFNBREJfRVhUX01BWAkJCTIzCisKKy8qIElkZW50aXR5IEV4dGVuc2lvbiB2YWx1ZXMgKi8KKyNkZWZpbmUgU0FEQl9JREVOVFRZUEVfUkVTRVJWRUQJMAorI2RlZmluZSBTQURCX0lERU5UVFlQRV9QUkVGSVgJMQorI2RlZmluZSBTQURCX0lERU5UVFlQRV9GUUROCTIKKyNkZWZpbmUgU0FEQl9JREVOVFRZUEVfVVNFUkZRRE4JMworI2RlZmluZSBTQURCX0lERU5UVFlQRV9NQVgJMworCisjZW5kaWYgLyogIShfTElOVVhfUEZLRVkyX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BnLmggYi9pbmNsdWRlL2xpbnV4L3BnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI5OTRiYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvcGcuaApAQCAtMCwwICsxLDYzIEBACisvKiAJcGcuaCAoYykgMTk5OCAgR3JhbnQgUi4gR3VlbnRoZXIgPGdyYW50QHRvcnF1ZS5uZXQ+CisgCQkgICAgICAgVW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorCisKKwlwZy5oIGRlZmluZXMgdGhlIHVzZXIgaW50ZXJmYWNlIHRvIHRoZSBnZW5lcmljIEFUQVBJIHBhY2tldAorICAgICAgICBjb21tYW5kIGRyaXZlciBmb3IgcGFyYWxsZWwgcG9ydCBBVEFQSSBkZXZpY2VzIChwZykuIFRoZQorCWRyaXZlciBpcyBsb29zZWx5IG1vZGVsbGVkIGFmdGVyIHRoZSBnZW5lcmljIFNDU0kgZHJpdmVyLCBzZywKKwlhbHRob3VnaCB0aGUgYWN0dWFsIGludGVyZmFjZSBpcyBkaWZmZXJlbnQuCisKKwlUaGUgcGcgZHJpdmVyIHByb3ZpZGVzIGEgc2ltcGxlIGNoYXJhY3RlciBkZXZpY2UgaW50ZXJmYWNlIGZvcgorICAgICAgICBzZW5kaW5nIEFUQVBJIGNvbW1hbmRzIHRvIGEgZGV2aWNlLiAgV2l0aCB0aGUgZXhjZXB0aW9uIG9mIHRoZQorCUFUQVBJIHJlc2V0IG9wZXJhdGlvbiwgYWxsIG9wZXJhdGlvbnMgYXJlIHBlcmZvcm1lZCBieSBhIHBhaXIKKyAgICAgICAgb2YgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyB0byB0aGUgYXBwcm9wcmlhdGUgL2Rldi9wZ04gZGV2aWNlLgorCUEgd3JpdGUgb3BlcmF0aW9uIGRlbGl2ZXJzIGEgY29tbWFuZCBhbmQgYW55IG91dGJvdW5kIGRhdGEgaW4KKyAgICAgICAgYSBzaW5nbGUgYnVmZmVyLiAgTm9ybWFsbHksIHRoZSB3cml0ZSB3aWxsIHN1Y2NlZWQgdW5sZXNzIHRoZQorICAgICAgICBkZXZpY2UgaXMgb2ZmbGluZSBvciBtYWxmdW5jdGlvbmluZywgb3IgdGhlcmUgaXMgYWxyZWFkeSBhbm90aGVyCisJY29tbWFuZCBwZW5kaW5nLiAgSWYgdGhlIHdyaXRlIHN1Y2NlZWRzLCBpdCBzaG91bGQgYmUgZm9sbG93ZWQKKyAgICAgICAgaW1tZWRpYXRlbHkgYnkgYSByZWFkIG9wZXJhdGlvbiwgdG8gb2J0YWluIGFueSByZXR1cm5lZCBkYXRhIGFuZAorICAgICAgICBzdGF0dXMgaW5mb3JtYXRpb24uICBBIHJlYWQgd2lsbCBmYWlsIGlmIHRoZXJlIGlzIG5vIG9wZXJhdGlvbgorICAgICAgICBpbiBwcm9ncmVzcy4KKworCUFzIGEgc3BlY2lhbCBjYXNlLCB0aGUgZGV2aWNlIGNhbiBiZSByZXNldCB3aXRoIGEgd3JpdGUgb3BlcmF0aW9uLAorICAgICAgICBhbmQgaW4gdGhpcyBjYXNlLCBubyBmb2xsb3dpbmcgcmVhZCBpcyBleHBlY3RlZCwgb3IgcGVybWl0dGVkLgorCisJVGhlcmUgYXJlIG5vIGlvY3RsKCkgb3BlcmF0aW9ucy4gIEFueSBzaW5nbGUgb3BlcmF0aW9uCisJbWF5IHRyYW5zZmVyIGF0IG1vc3QgUEdfTUFYX0RBVEEgYnl0ZXMuICBOb3RlIHRoYXQgdGhlIGRyaXZlciBtdXN0CisgICAgICAgIGNvcHkgdGhlIGRhdGEgdGhyb3VnaCBhbiBpbnRlcm5hbCBidWZmZXIuICBJbiBrZWVwaW5nIHdpdGggYWxsCisJY3VycmVudCBBVEFQSSBkZXZpY2VzLCBjb21tYW5kIHBhY2tldHMgYXJlIGFzc3VtZWQgdG8gYmUgZXhhY3RseQorCTEyIGJ5dGVzIGluIGxlbmd0aC4KKworCVRvIHBlcm1pdCBmdXR1cmUgY2hhbmdlcyB0byB0aGlzIGludGVyZmFjZSwgdGhlIGhlYWRlcnMgaW4gdGhlCisJcmVhZCBhbmQgd3JpdGUgYnVmZmVycyBjb250YWluIGEgc2luZ2xlIGNoYXJhY3RlciAibWFnaWMiIGZsYWcuCisgICAgICAgIEN1cnJlbnRseSB0aGlzIGZsYWcgbXVzdCBiZSB0aGUgY2hhcmFjdGVyICJQIi4KKworKi8KKworI2RlZmluZSBQR19NQUdJQwknUCcKKyNkZWZpbmUgUEdfUkVTRVQJJ1onCisjZGVmaW5lIFBHX0NPTU1BTkQJJ0MnCisKKyNkZWZpbmUgUEdfTUFYX0RBVEEJMzI3NjgKKworc3RydWN0IHBnX3dyaXRlX2hkciB7CisKKwljaGFyCW1hZ2ljOwkJLyogPT0gUEdfTUFHSUMgKi8KKwljaGFyCWZ1bmM7CQkvKiBQR19SRVNFVCBvciBQR19DT01NQU5EICovCisJaW50ICAgICBkbGVuOwkJLyogbnVtYmVyIG9mIGJ5dGVzIGV4cGVjdGVkIHRvIHRyYW5zZmVyICovCisJaW50ICAgICB0aW1lb3V0OwkvKiBudW1iZXIgb2Ygc2Vjb25kcyBiZWZvcmUgdGltZW91dCAqLworCWNoYXIJcGFja2V0WzEyXTsJLyogcGFja2V0IGNvbW1hbmQgKi8KKworfTsKKworc3RydWN0IHBnX3JlYWRfaGRyIHsKKworCWNoYXIJbWFnaWM7CQkvKiA9PSBQR19NQUdJQyAqLworCWNoYXIJc2NzaTsJCS8qICJzY3NpIiBzdGF0dXMgPT0gc2Vuc2Uga2V5ICovCisJaW50CWRsZW47CQkvKiBzaXplIG9mIGRldmljZSB0cmFuc2ZlciByZXF1ZXN0ICovCisJaW50ICAgICBkdXJhdGlvbjsJLyogdGltZSBpbiBzZWNvbmRzIGNvbW1hbmQgdG9vayAqLworCWNoYXIgICAgcGFkWzEyXTsJLyogbm90IHVzZWQgKi8KKworfTsKKworLyogZW5kIG9mIHBnLmggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGhvbmVkZXYuaCBiL2luY2x1ZGUvbGludXgvcGhvbmVkZXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTQwNDllCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9waG9uZWRldi5oCkBAIC0wLDAgKzEsMjYgQEAKKyNpZm5kZWYgX19MSU5VWF9QSE9ORURFVl9ICisjZGVmaW5lIF9fTElOVVhfUEhPTkVERVZfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisKK3N0cnVjdCBwaG9uZV9kZXZpY2UgeworCXN0cnVjdCBwaG9uZV9kZXZpY2UgKm5leHQ7CisJc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZl9vcDsKKwlpbnQgKCpvcGVuKSAoc3RydWN0IHBob25lX2RldmljZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKKwlpbnQgYm9hcmQ7CQkvKiBEZXZpY2UgcHJpdmF0ZSBpbmRleCAqLworCWludCBtaW5vcjsKK307CisKK2V4dGVybiBpbnQgcGhvbmVkZXZfaW5pdCh2b2lkKTsKKyNkZWZpbmUgUEhPTkVfTUFKT1IJMTAwCitleHRlcm4gaW50IHBob25lX3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgcGhvbmVfZGV2aWNlICosIGludCB1bml0KTsKKyNkZWZpbmUgUEhPTkVfVU5JVF9BTlkJLTEKK2V4dGVybiB2b2lkIHBob25lX3VucmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBwaG9uZV9kZXZpY2UgKik7CisKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BpZC5oIGIvaW5jbHVkZS9saW51eC9waWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjJmY2IxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9waWQuaApAQCAtMCwwICsxLDU1IEBACisjaWZuZGVmIF9MSU5VWF9QSURfSAorI2RlZmluZSBfTElOVVhfUElEX0gKKworZW51bSBwaWRfdHlwZQoreworCVBJRFRZUEVfUElELAorCVBJRFRZUEVfVEdJRCwKKwlQSURUWVBFX1BHSUQsCisJUElEVFlQRV9TSUQsCisJUElEVFlQRV9NQVgKK307CisKK3N0cnVjdCBwaWQKK3sKKwkvKiBUcnkgdG8ga2VlcCBwaWRfY2hhaW4gaW4gdGhlIHNhbWUgY2FjaGVsaW5lIGFzIG5yIGZvciBmaW5kX3BpZCAqLworCWludCBucjsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSBwaWRfY2hhaW47CisJLyogbGlzdCBvZiBwaWRzIHdpdGggdGhlIHNhbWUgbnIsIG9ubHkgb25lIG9mIHRoZW0gaXMgaW4gdGhlIGhhc2ggKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHBpZF9saXN0OworfTsKKworI2RlZmluZSBwaWRfdGFzayhlbGVtLCB0eXBlKSBcCisJbGlzdF9lbnRyeShlbGVtLCBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHBpZHNbdHlwZV0ucGlkX2xpc3QpCisKKy8qCisgKiBhdHRhY2hfcGlkKCkgYW5kIGRldGFjaF9waWQoKSBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSB0YXNrbGlzdF9sb2NrCisgKiB3cml0ZS1oZWxkLgorICovCitleHRlcm4gaW50IEZBU1RDQUxMKGF0dGFjaF9waWQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBlbnVtIHBpZF90eXBlIHR5cGUsIGludCBucikpOworCitleHRlcm4gdm9pZCBGQVNUQ0FMTChkZXRhY2hfcGlkKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgZW51bSBwaWRfdHlwZSkpOworCisvKgorICogbG9vayB1cCBhIFBJRCBpbiB0aGUgaGFzaCB0YWJsZS4gTXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgdGFza2xpc3RfbG9jaworICogaGVsZC4KKyAqLworZXh0ZXJuIHN0cnVjdCBwaWQgKkZBU1RDQUxMKGZpbmRfcGlkKGVudW0gcGlkX3R5cGUsIGludCkpOworCitleHRlcm4gaW50IGFsbG9jX3BpZG1hcCh2b2lkKTsKK2V4dGVybiB2b2lkIEZBU1RDQUxMKGZyZWVfcGlkbWFwKGludCkpOworZXh0ZXJuIHZvaWQgc3dpdGNoX2V4ZWNfcGlkcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmxlYWRlciwgc3RydWN0IHRhc2tfc3RydWN0ICp0aHJlYWQpOworCisjZGVmaW5lIGRvX2VhY2hfdGFza19waWQod2hvLCB0eXBlLCB0YXNrKQkJCQlcCisJaWYgKCh0YXNrID0gZmluZF90YXNrX2J5X3BpZF90eXBlKHR5cGUsIHdobykpKSB7CQlcCisJCXByZWZldGNoKCh0YXNrKS0+cGlkc1t0eXBlXS5waWRfbGlzdC5uZXh0KTsJCVwKKwkJZG8geworCisjZGVmaW5lIHdoaWxlX2VhY2hfdGFza19waWQod2hvLCB0eXBlLCB0YXNrKQkJCQlcCisJCX0gd2hpbGUgKHRhc2sgPSBwaWRfdGFzaygodGFzayktPnBpZHNbdHlwZV0ucGlkX2xpc3QubmV4dCxcCisJCQkJCQl0eXBlKSwJCQlcCisJCQlwcmVmZXRjaCgodGFzayktPnBpZHNbdHlwZV0ucGlkX2xpc3QubmV4dCksCVwKKwkJCWhsaXN0X3VuaGFzaGVkKCYodGFzayktPnBpZHNbdHlwZV0ucGlkX2NoYWluKSk7CVwKKwl9CQkJCQkJCQlcCisKKyNlbmRpZiAvKiBfTElOVVhfUElEX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGlwZV9mc19pLmggYi9pbmNsdWRlL2xpbnV4L3BpcGVfZnNfaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2NzI1ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3BpcGVfZnNfaS5oCkBAIC0wLDAgKzEsNTkgQEAKKyNpZm5kZWYgX0xJTlVYX1BJUEVfRlNfSV9ICisjZGVmaW5lIF9MSU5VWF9QSVBFX0ZTX0lfSAorCisjZGVmaW5lIFBJUEVGU19NQUdJQyAweDUwNDk1MDQ1CisKKyNkZWZpbmUgUElQRV9CVUZGRVJTICgxNikKKworc3RydWN0IHBpcGVfYnVmZmVyIHsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0LCBsZW47CisJc3RydWN0IHBpcGVfYnVmX29wZXJhdGlvbnMgKm9wczsKK307CisKK3N0cnVjdCBwaXBlX2J1Zl9vcGVyYXRpb25zIHsKKwlpbnQgY2FuX21lcmdlOworCXZvaWQgKiAoKm1hcCkoc3RydWN0IGZpbGUgKiwgc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqLCBzdHJ1Y3QgcGlwZV9idWZmZXIgKik7CisJdm9pZCAoKnVubWFwKShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICosIHN0cnVjdCBwaXBlX2J1ZmZlciAqKTsKKwl2b2lkICgqcmVsZWFzZSkoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqLCBzdHJ1Y3QgcGlwZV9idWZmZXIgKik7Cit9OworCitzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvIHsKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OworCXVuc2lnbmVkIGludCBucmJ1ZnMsIGN1cmJ1ZjsKKwlzdHJ1Y3QgcGlwZV9idWZmZXIgYnVmc1tQSVBFX0JVRkZFUlNdOworCXN0cnVjdCBwYWdlICp0bXBfcGFnZTsKKwl1bnNpZ25lZCBpbnQgc3RhcnQ7CisJdW5zaWduZWQgaW50IHJlYWRlcnM7CisJdW5zaWduZWQgaW50IHdyaXRlcnM7CisJdW5zaWduZWQgaW50IHdhaXRpbmdfd3JpdGVyczsKKwl1bnNpZ25lZCBpbnQgcl9jb3VudGVyOworCXVuc2lnbmVkIGludCB3X2NvdW50ZXI7CisJc3RydWN0IGZhc3luY19zdHJ1Y3QgKmZhc3luY19yZWFkZXJzOworCXN0cnVjdCBmYXN5bmNfc3RydWN0ICpmYXN5bmNfd3JpdGVyczsKK307CisKKy8qIERpZmZlcnMgZnJvbSBQSVBFX0JVRiBpbiB0aGF0IFBJUEVfU0laRSBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBhY3R1YWwKKyAgIG1lbW9yeSBhbGxvY2F0aW9uLCB3aGVyZWFzIFBJUEVfQlVGIG1ha2VzIGF0b21pY2l0eSBndWFyYW50ZWVzLiAgKi8KKyNkZWZpbmUgUElQRV9TSVpFCQlQQUdFX1NJWkUKKworI2RlZmluZSBQSVBFX1NFTShpbm9kZSkJCSgmKGlub2RlKS5pX3NlbSkKKyNkZWZpbmUgUElQRV9XQUlUKGlub2RlKQkoJihpbm9kZSkuaV9waXBlLT53YWl0KQorI2RlZmluZSBQSVBFX0JBU0UoaW5vZGUpCSgoaW5vZGUpLmlfcGlwZS0+YmFzZSkKKyNkZWZpbmUgUElQRV9TVEFSVChpbm9kZSkJKChpbm9kZSkuaV9waXBlLT5zdGFydCkKKyNkZWZpbmUgUElQRV9MRU4oaW5vZGUpCQkoKGlub2RlKS5pX3BpcGUtPmxlbikKKyNkZWZpbmUgUElQRV9SRUFERVJTKGlub2RlKQkoKGlub2RlKS5pX3BpcGUtPnJlYWRlcnMpCisjZGVmaW5lIFBJUEVfV1JJVEVSUyhpbm9kZSkJKChpbm9kZSkuaV9waXBlLT53cml0ZXJzKQorI2RlZmluZSBQSVBFX1dBSVRJTkdfV1JJVEVSUyhpbm9kZSkJKChpbm9kZSkuaV9waXBlLT53YWl0aW5nX3dyaXRlcnMpCisjZGVmaW5lIFBJUEVfUkNPVU5URVIoaW5vZGUpCSgoaW5vZGUpLmlfcGlwZS0+cl9jb3VudGVyKQorI2RlZmluZSBQSVBFX1dDT1VOVEVSKGlub2RlKQkoKGlub2RlKS5pX3BpcGUtPndfY291bnRlcikKKyNkZWZpbmUgUElQRV9GQVNZTkNfUkVBREVSUyhpbm9kZSkgICAgICgmKChpbm9kZSkuaV9waXBlLT5mYXN5bmNfcmVhZGVycykpCisjZGVmaW5lIFBJUEVfRkFTWU5DX1dSSVRFUlMoaW5vZGUpICAgICAoJigoaW5vZGUpLmlfcGlwZS0+ZmFzeW5jX3dyaXRlcnMpKQorCisvKiBEcm9wIHRoZSBpbm9kZSBzZW1hcGhvcmUgYW5kIHdhaXQgZm9yIGEgcGlwZSBldmVudCwgYXRvbWljYWxseSAqLwordm9pZCBwaXBlX3dhaXQoc3RydWN0IGlub2RlICogaW5vZGUpOworCitzdHJ1Y3QgaW5vZGUqIHBpcGVfbmV3KHN0cnVjdCBpbm9kZSogaW5vZGUpOwordm9pZCBmcmVlX3BpcGVfaW5mbyhzdHJ1Y3QgaW5vZGUqIGlub2RlKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BrdF9jbHMuaCBiL2luY2x1ZGUvbGludXgvcGt0X2Nscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyYWEyMTQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3BrdF9jbHMuaApAQCAtMCwwICsxLDQyNiBAQAorI2lmbmRlZiBfX0xJTlVYX1BLVF9DTFNfSAorI2RlZmluZSBfX0xJTlVYX1BLVF9DTFNfSAorCisjaW5jbHVkZSA8bGludXgvcGt0X3NjaGVkLmg+CisKKy8qIEkgdGhpbmsgaSBjb3VsZCBoYXZlIGRvbmUgYmV0dGVyIG1hY3JvcyA7IGZvciBub3cgdGhpcyBpcyBzdG9sZW4gZnJvbQorICogc29tZSBhcmNoL21pcHMgY29kZSAtIGpocworKi8KKyNkZWZpbmUgX1RDX01BS0UzMih4KSAoKHgpKQorCisjZGVmaW5lIF9UQ19NQUtFTUFTSzEobikgKF9UQ19NQUtFMzIoMSkgPDwgX1RDX01BS0UzMihuKSkKKyNkZWZpbmUgX1RDX01BS0VNQVNLKHYsbikgKF9UQ19NQUtFMzIoKF9UQ19NQUtFMzIoMSk8PCh2KSktMSkgPDwgX1RDX01BS0UzMihuKSkKKyNkZWZpbmUgX1RDX01BS0VWQUxVRSh2LG4pIChfVENfTUFLRTMyKHYpIDw8IF9UQ19NQUtFMzIobikpCisjZGVmaW5lIF9UQ19HRVRWQUxVRSh2LG4sbSkgKChfVENfTUFLRTMyKHYpICYgX1RDX01BS0UzMihtKSkgPj4gX1RDX01BS0UzMihuKSkKKworLyogdmVyZGljdCBiaXQgYnJlYWtkb3duIAorICoKK2JpdCAwOiB3aGVuIHNldCAtPiB0aGlzIHBhY2tldCBoYXMgYmVlbiBtdW5nZWQgYWxyZWFkeQorCitiaXQgMTogd2hlbiBzZXQgLT4gSXQgaXMgb2sgdG8gbXVuZ2UgdGhpcyBwYWNrZXQKKworYml0IDIsMyw0LDU6IFJlY2xhc3NpZnkgY291bnRlciAtIHNvcnQgb2YgcmV2ZXJzZSBUVEwgLSBpZiBleGNlZWRlZAorYXNzdW1lIGxvb3AKKworYml0IDYsNzogV2hlcmUgdGhpcyBwYWNrZXQgd2FzIGxhc3Qgc2VlbiAKKzA6IEFib3ZlIHRoZSB0cmFuc21pdCBleGFtcGxlIGF0IHRoZSBzb2NrZXQgbGV2ZWwKKzE6IG9uIHRoZSBJbmdyZXNzCisyOiBvbiB0aGUgRWdyZXNzCisKK2JpdCA4OiB3aGVuIHNldCAtLT4gUmVxdWVzdCBub3QgdG8gY2xhc3NpZnkgb24gaW5ncmVzcy4gCisKK2JpdHMgOSwxMCwxMTogcmVkaXJlY3QgY291bnRlciAtICByZWRpcmVjdCBUVEwuIExvb3AgYXZvaWRhbmNlCisKKyAqCisgKiAqLworCisjZGVmaW5lIFRDX01VTkdFRCAgICAgICAgICBfVENfTUFLRU1BU0sxKDApCisjZGVmaW5lIFNFVF9UQ19NVU5HRUQodikgICAoIFRDX01VTkdFRCB8ICh2ICYgflRDX01VTkdFRCkpCisjZGVmaW5lIENMUl9UQ19NVU5HRUQodikgICAoIHYgJiB+VENfTVVOR0VEKQorCisjZGVmaW5lIFRDX09LMk1VTkdFICAgICAgICBfVENfTUFLRU1BU0sxKDEpCisjZGVmaW5lIFNFVF9UQ19PSzJNVU5HRSh2KSAgICggVENfT0syTVVOR0UgfCAodiAmIH5UQ19PSzJNVU5HRSkpCisjZGVmaW5lIENMUl9UQ19PSzJNVU5HRSh2KSAgICggdiAmIH5UQ19PSzJNVU5HRSkKKworI2RlZmluZSBTX1RDX1ZFUkQgICAgICAgICAgX1RDX01BS0UzMigyKQorI2RlZmluZSBNX1RDX1ZFUkQgICAgICAgICAgX1RDX01BS0VNQVNLKDQsU19UQ19WRVJEKQorI2RlZmluZSBHX1RDX1ZFUkQoeCkgICAgICAgX1RDX0dFVFZBTFVFKHgsU19UQ19WRVJELE1fVENfVkVSRCkKKyNkZWZpbmUgVl9UQ19WRVJEKHgpICAgICAgIF9UQ19NQUtFVkFMVUUoeCxTX1RDX1ZFUkQpCisjZGVmaW5lIFNFVF9UQ19WRVJEKHYsbikgICAoKFZfVENfVkVSRChuKSkgfCAodiAmIH5NX1RDX1ZFUkQpKQorCisjZGVmaW5lIFNfVENfRlJPTSAgICAgICAgICBfVENfTUFLRTMyKDYpCisjZGVmaW5lIE1fVENfRlJPTSAgICAgICAgICBfVENfTUFLRU1BU0soMixTX1RDX0ZST00pCisjZGVmaW5lIEdfVENfRlJPTSh4KSAgICAgICBfVENfR0VUVkFMVUUoeCxTX1RDX0ZST00sTV9UQ19GUk9NKQorI2RlZmluZSBWX1RDX0ZST00oeCkgICAgICAgX1RDX01BS0VWQUxVRSh4LFNfVENfRlJPTSkKKyNkZWZpbmUgU0VUX1RDX0ZST00odixuKSAgICgoVl9UQ19GUk9NKG4pKSB8ICh2ICYgfk1fVENfRlJPTSkpCisjZGVmaW5lIEFUX1NUQUNLCTB4MAorI2RlZmluZSBBVF9JTkdSRVNTCTB4MQorI2RlZmluZSBBVF9FR1JFU1MJMHgyCisKKyNkZWZpbmUgVENfTkNMUyAgICAgICAgICBfVENfTUFLRU1BU0sxKDgpCisjZGVmaW5lIFNFVF9UQ19OQ0xTKHYpICAgKCBUQ19OQ0xTIHwgKHYgJiB+VENfTkNMUykpCisjZGVmaW5lIENMUl9UQ19OQ0xTKHYpICAgKCB2ICYgflRDX05DTFMpCisKKyNkZWZpbmUgU19UQ19SVFRMICAgICAgICAgIF9UQ19NQUtFMzIoOSkKKyNkZWZpbmUgTV9UQ19SVFRMICAgICAgICAgIF9UQ19NQUtFTUFTSygzLFNfVENfUlRUTCkKKyNkZWZpbmUgR19UQ19SVFRMKHgpICAgICAgIF9UQ19HRVRWQUxVRSh4LFNfVENfUlRUTCxNX1RDX1JUVEwpCisjZGVmaW5lIFZfVENfUlRUTCh4KSAgICAgICBfVENfTUFLRVZBTFVFKHgsU19UQ19SVFRMKQorI2RlZmluZSBTRVRfVENfUlRUTCh2LG4pICAgKChWX1RDX1JUVEwobikpIHwgKHYgJiB+TV9UQ19SVFRMKSkKKworI2RlZmluZSBTX1RDX0FUICAgICAgICAgIF9UQ19NQUtFMzIoMTIpCisjZGVmaW5lIE1fVENfQVQgICAgICAgICAgX1RDX01BS0VNQVNLKDIsU19UQ19BVCkKKyNkZWZpbmUgR19UQ19BVCh4KSAgICAgICBfVENfR0VUVkFMVUUoeCxTX1RDX0FULE1fVENfQVQpCisjZGVmaW5lIFZfVENfQVQoeCkgICAgICAgX1RDX01BS0VWQUxVRSh4LFNfVENfQVQpCisjZGVmaW5lIFNFVF9UQ19BVCh2LG4pICAgKChWX1RDX0FUKG4pKSB8ICh2ICYgfk1fVENfQVQpKQorCisvKiBBY3Rpb24gYXR0cmlidXRlcyAqLworZW51bQoreworCVRDQV9BQ1RfVU5TUEVDLAorCVRDQV9BQ1RfS0lORCwKKwlUQ0FfQUNUX09QVElPTlMsCisJVENBX0FDVF9JTkRFWCwKKwlUQ0FfQUNUX1NUQVRTLAorCV9fVENBX0FDVF9NQVgKK307CisKKyNkZWZpbmUgVENBX0FDVF9NQVggX19UQ0FfQUNUX01BWAorI2RlZmluZSBUQ0FfT0xEX0NPTVBBVCAoVENBX0FDVF9NQVgrMSkKKyNkZWZpbmUgVENBX0FDVF9NQVhfUFJJTyAzMgorI2RlZmluZSBUQ0FfQUNUX0JJTkQJMQorI2RlZmluZSBUQ0FfQUNUX05PQklORAkwCisjZGVmaW5lIFRDQV9BQ1RfVU5CSU5ECTEKKyNkZWZpbmUgVENBX0FDVF9OT1VOQklORAkwCisjZGVmaW5lIFRDQV9BQ1RfUkVQTEFDRQkJMQorI2RlZmluZSBUQ0FfQUNUX05PUkVQTEFDRQkwCisjZGVmaW5lIE1BWF9SRUNfTE9PUCA0CisjZGVmaW5lIE1BWF9SRURfTE9PUCA0CisKKyNkZWZpbmUgVENfQUNUX1VOU1BFQwkoLTEpCisjZGVmaW5lIFRDX0FDVF9PSwkJMAorI2RlZmluZSBUQ19BQ1RfUkVDTEFTU0lGWQkxCisjZGVmaW5lIFRDX0FDVF9TSE9UCQkyCisjZGVmaW5lIFRDX0FDVF9QSVBFCQkzCisjZGVmaW5lIFRDX0FDVF9TVE9MRU4JCTQKKyNkZWZpbmUgVENfQUNUX1FVRVVFRAkJNQorI2RlZmluZSBUQ19BQ1RfUkVQRUFUCQk2CisjZGVmaW5lIFRDX0FDVF9KVU1QCQkweDEwMDAwMDAwCisKKy8qIEFjdGlvbiB0eXBlIGlkZW50aWZpZXJzKi8KK2VudW0KK3sKKwlUQ0FfSURfVU5TUEVDPTAsCisJVENBX0lEX1BPTElDRT0xLAorCS8qIG90aGVyIGFjdGlvbnMgZ28gaGVyZSAqLworCV9fVENBX0lEX01BWD0yNTUKK307CisKKyNkZWZpbmUgVENBX0lEX01BWCBfX1RDQV9JRF9NQVgKKworc3RydWN0IHRjX3BvbGljZQoreworCV9fdTMyCQkJaW5kZXg7CisJaW50CQkJYWN0aW9uOworI2RlZmluZSBUQ19QT0xJQ0VfVU5TUEVDCVRDX0FDVF9VTlNQRUMKKyNkZWZpbmUgVENfUE9MSUNFX09LCQlUQ19BQ1RfT0sKKyNkZWZpbmUgVENfUE9MSUNFX1JFQ0xBU1NJRlkJVENfQUNUX1JFQ0xBU1NJRlkKKyNkZWZpbmUgVENfUE9MSUNFX1NIT1QJCVRDX0FDVF9TSE9UCisjZGVmaW5lIFRDX1BPTElDRV9QSVBFCQlUQ19BQ1RfUElQRQorCisJX191MzIJCQlsaW1pdDsKKwlfX3UzMgkJCWJ1cnN0OworCV9fdTMyCQkJbXR1OworCXN0cnVjdCB0Y19yYXRlc3BlYwlyYXRlOworCXN0cnVjdCB0Y19yYXRlc3BlYwlwZWFrcmF0ZTsKKwlpbnQgCQkJcmVmY250OworCWludCAJCQliaW5kY250OworCV9fdTMyCQkJY2FwYWI7Cit9OworCitzdHJ1Y3QgdGNmX3QKK3sKKwlfX3U2NCAgIGluc3RhbGw7CisJX191NjQgICBsYXN0dXNlOworCV9fdTY0ICAgZXhwaXJlczsKK307CisKK3N0cnVjdCB0Y19jbnQKK3sKKwlpbnQgICAgICAgICAgICAgICAgICAgcmVmY250OyAKKwlpbnQgICAgICAgICAgICAgICAgICAgYmluZGNudDsKK307CisKKyNkZWZpbmUgdGNfZ2VuIFwKKwlfX3UzMiAgICAgICAgICAgICAgICAgaW5kZXg7IFwKKwlfX3UzMiAgICAgICAgICAgICAgICAgY2FwYWI7IFwKKwlpbnQgICAgICAgICAgICAgICAgICAgYWN0aW9uOyBcCisJaW50ICAgICAgICAgICAgICAgICAgIHJlZmNudDsgXAorCWludCAgICAgICAgICAgICAgICAgICBiaW5kY250CisKK2VudW0KK3sKKwlUQ0FfUE9MSUNFX1VOU1BFQywKKwlUQ0FfUE9MSUNFX1RCRiwKKwlUQ0FfUE9MSUNFX1JBVEUsCisJVENBX1BPTElDRV9QRUFLUkFURSwKKwlUQ0FfUE9MSUNFX0FWUkFURSwKKwlUQ0FfUE9MSUNFX1JFU1VMVCwKKwlfX1RDQV9QT0xJQ0VfTUFYCisjZGVmaW5lIFRDQV9QT0xJQ0VfUkVTVUxUIFRDQV9QT0xJQ0VfUkVTVUxUCit9OworCisjZGVmaW5lIFRDQV9QT0xJQ0VfTUFYIChfX1RDQV9QT0xJQ0VfTUFYIC0gMSkKKworLyogVTMyIGZpbHRlcnMgKi8KKworI2RlZmluZSBUQ19VMzJfSFRJRChoKSAoKGgpJjB4RkZGMDAwMDApCisjZGVmaW5lIFRDX1UzMl9VU0VSSFRJRChoKSAoVENfVTMyX0hUSUQoaCk+PjIwKQorI2RlZmluZSBUQ19VMzJfSEFTSChoKSAoKChoKT4+MTIpJjB4RkYpCisjZGVmaW5lIFRDX1UzMl9OT0RFKGgpICgoaCkmMHhGRkYpCisjZGVmaW5lIFRDX1UzMl9LRVkoaCkgKChoKSYweEZGRkZGKQorI2RlZmluZSBUQ19VMzJfVU5TUEVDCTAKKyNkZWZpbmUgVENfVTMyX1JPT1QJKDB4RkZGMDAwMDApCisKK2VudW0KK3sKKwlUQ0FfVTMyX1VOU1BFQywKKwlUQ0FfVTMyX0NMQVNTSUQsCisJVENBX1UzMl9IQVNILAorCVRDQV9VMzJfTElOSywKKwlUQ0FfVTMyX0RJVklTT1IsCisJVENBX1UzMl9TRUwsCisJVENBX1UzMl9QT0xJQ0UsCisJVENBX1UzMl9BQ1QsICAgCisJVENBX1UzMl9JTkRFViwKKwlUQ0FfVTMyX1BDTlQsCisJVENBX1UzMl9NQVJLLAorCV9fVENBX1UzMl9NQVgKK307CisKKyNkZWZpbmUgVENBX1UzMl9NQVggKF9fVENBX1UzMl9NQVggLSAxKQorCitzdHJ1Y3QgdGNfdTMyX2tleQoreworCV9fdTMyCQltYXNrOworCV9fdTMyCQl2YWw7CisJaW50CQlvZmY7CisJaW50CQlvZmZtYXNrOworfTsKKworc3RydWN0IHRjX3UzMl9zZWwKK3sKKwl1bnNpZ25lZCBjaGFyCQlmbGFnczsKKwl1bnNpZ25lZCBjaGFyCQlvZmZzaGlmdDsKKwl1bnNpZ25lZCBjaGFyCQlua2V5czsKKworCV9fdTE2CQkJb2ZmbWFzazsKKwlfX3UxNgkJCW9mZjsKKwlzaG9ydAkJCW9mZm9mZjsKKworCXNob3J0CQkJaG9mZjsKKwlfX3UzMgkJCWhtYXNrOworCXN0cnVjdCB0Y191MzJfa2V5CWtleXNbMF07Cit9OworCitzdHJ1Y3QgdGNfdTMyX21hcmsKK3sKKwlfX3UzMgkJdmFsOworCV9fdTMyCQltYXNrOworCV9fdTMyCQlzdWNjZXNzOworfTsKKworc3RydWN0IHRjX3UzMl9wY250Cit7CisJX191NjQgcmNudDsKKwlfX3U2NCByaGl0OworCV9fdTY0IGtjbnRzWzBdOworfTsKKworLyogRmxhZ3MgKi8KKworI2RlZmluZSBUQ19VMzJfVEVSTUlOQUwJCTEKKyNkZWZpbmUgVENfVTMyX09GRlNFVAkJMgorI2RlZmluZSBUQ19VMzJfVkFST0ZGU0VUCTQKKyNkZWZpbmUgVENfVTMyX0VBVAkJOAorCisjZGVmaW5lIFRDX1UzMl9NQVhERVBUSCA4CisKKworLyogUlNWUCBmaWx0ZXIgKi8KKworZW51bQoreworCVRDQV9SU1ZQX1VOU1BFQywKKwlUQ0FfUlNWUF9DTEFTU0lELAorCVRDQV9SU1ZQX0RTVCwKKwlUQ0FfUlNWUF9TUkMsCisJVENBX1JTVlBfUElORk8sCisJVENBX1JTVlBfUE9MSUNFLAorCVRDQV9SU1ZQX0FDVCwKKwlfX1RDQV9SU1ZQX01BWAorfTsKKworI2RlZmluZSBUQ0FfUlNWUF9NQVggKF9fVENBX1JTVlBfTUFYIC0gMSApCisKK3N0cnVjdCB0Y19yc3ZwX2dwaQoreworCV9fdTMyCWtleTsKKwlfX3UzMgltYXNrOworCWludAlvZmZzZXQ7Cit9OworCitzdHJ1Y3QgdGNfcnN2cF9waW5mbworeworCXN0cnVjdCB0Y19yc3ZwX2dwaSBkcGk7CisJc3RydWN0IHRjX3JzdnBfZ3BpIHNwaTsKKwlfX3U4CXByb3RvY29sOworCV9fdTgJdHVubmVsaWQ7CisJX191OAl0dW5uZWxoZHI7Cit9OworCisvKiBST1VURSBmaWx0ZXIgKi8KKworZW51bQoreworCVRDQV9ST1VURTRfVU5TUEVDLAorCVRDQV9ST1VURTRfQ0xBU1NJRCwKKwlUQ0FfUk9VVEU0X1RPLAorCVRDQV9ST1VURTRfRlJPTSwKKwlUQ0FfUk9VVEU0X0lJRiwKKwlUQ0FfUk9VVEU0X1BPTElDRSwKKwlUQ0FfUk9VVEU0X0FDVCwKKwlfX1RDQV9ST1VURTRfTUFYCit9OworCisjZGVmaW5lIFRDQV9ST1VURTRfTUFYIChfX1RDQV9ST1VURTRfTUFYIC0gMSkKKworCisvKiBGVyBmaWx0ZXIgKi8KKworZW51bQoreworCVRDQV9GV19VTlNQRUMsCisJVENBX0ZXX0NMQVNTSUQsCisJVENBX0ZXX1BPTElDRSwKKwlUQ0FfRldfSU5ERVYsIC8qICB1c2VkIGJ5IENPTkZJR19ORVRfQ0xTX0lORCAqLworCVRDQV9GV19BQ1QsIC8qIHVzZWQgYnkgQ09ORklHX05FVF9DTFNfQUNUICovCisJX19UQ0FfRldfTUFYCit9OworCisjZGVmaW5lIFRDQV9GV19NQVggKF9fVENBX0ZXX01BWCAtIDEpCisKKy8qIFRDIGluZGV4IGZpbHRlciAqLworCitlbnVtCit7CisJVENBX1RDSU5ERVhfVU5TUEVDLAorCVRDQV9UQ0lOREVYX0hBU0gsCisJVENBX1RDSU5ERVhfTUFTSywKKwlUQ0FfVENJTkRFWF9TSElGVCwKKwlUQ0FfVENJTkRFWF9GQUxMX1RIUk9VR0gsCisJVENBX1RDSU5ERVhfQ0xBU1NJRCwKKwlUQ0FfVENJTkRFWF9QT0xJQ0UsCisJVENBX1RDSU5ERVhfQUNULAorCV9fVENBX1RDSU5ERVhfTUFYCit9OworCisjZGVmaW5lIFRDQV9UQ0lOREVYX01BWCAgICAgKF9fVENBX1RDSU5ERVhfTUFYIC0gMSkKKworLyogQmFzaWMgZmlsdGVyICovCisKK2VudW0KK3sKKwlUQ0FfQkFTSUNfVU5TUEVDLAorCVRDQV9CQVNJQ19DTEFTU0lELAorCVRDQV9CQVNJQ19FTUFUQ0hFUywKKwlUQ0FfQkFTSUNfQUNULAorCVRDQV9CQVNJQ19QT0xJQ0UsCisJX19UQ0FfQkFTSUNfTUFYCit9OworCisjZGVmaW5lIFRDQV9CQVNJQ19NQVggKF9fVENBX0JBU0lDX01BWCAtIDEpCisKKy8qIEV4dGVuZGVkIE1hdGNoZXMgKi8KKworc3RydWN0IHRjZl9lbWF0Y2hfdHJlZV9oZHIKK3sKKwlfX3UxNgkJbm1hdGNoZXM7CisJX191MTYJCXByb2dpZDsKK307CisKK2VudW0KK3sKKwlUQ0FfRU1BVENIX1RSRUVfVU5TUEVDLAorCVRDQV9FTUFUQ0hfVFJFRV9IRFIsCisJVENBX0VNQVRDSF9UUkVFX0xJU1QsCisJX19UQ0FfRU1BVENIX1RSRUVfTUFYCit9OworI2RlZmluZSBUQ0FfRU1BVENIX1RSRUVfTUFYIChfX1RDQV9FTUFUQ0hfVFJFRV9NQVggLSAxKQorCitzdHJ1Y3QgdGNmX2VtYXRjaF9oZHIKK3sKKwlfX3UxNgkJbWF0Y2hpZDsKKwlfX3UxNgkJa2luZDsKKwlfX3UxNgkJZmxhZ3M7CisJX191MTYJCXBhZDsgLyogY3VycmVudGx5IHVudXNlZCAqLworfTsKKworLyogIDAgICAgICAgICAgICAgICAgICAgMQorICogIDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgCisgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLSstKy0tLSsKKyAqIHwgICAgICAgICBVbnVzZWQgICAgICAgIHxTfEl8IFIgfAorICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0rLSstLS0rCisgKgorICogUigyKSA6Oj0gcmVsYXRpb24gdG8gbmV4dCBlbWF0Y2gKKyAqICAgICAgICAgIHdoZXJlOiAwIDAgRU5EIChsYXN0IGVtYXRjaCkKKyAqICAgICAgICAgICAgICAgICAwIDEgQU5ECisgKiAgICAgICAgICAgICAgICAgMSAwIE9SCisgKiAgICAgICAgICAgICAgICAgMSAxIFVudXNlZCAoaW52YWxpZCkKKyAqIEkoMSkgOjo9IGludmVydCByZXN1bHQKKyAqIFMoMSkgOjo9IHNpbXBsZSBwYXlsb2FkCisgKi8KKyNkZWZpbmUgVENGX0VNX1JFTF9FTkQJMAorI2RlZmluZSBUQ0ZfRU1fUkVMX0FORAkoMTw8MCkKKyNkZWZpbmUgVENGX0VNX1JFTF9PUgkoMTw8MSkKKyNkZWZpbmUgVENGX0VNX0lOVkVSVAkoMTw8MikKKyNkZWZpbmUgVENGX0VNX1NJTVBMRQkoMTw8MykKKworI2RlZmluZSBUQ0ZfRU1fUkVMX01BU0sJMworI2RlZmluZSBUQ0ZfRU1fUkVMX1ZBTElEKHYpICgoKHYpICYgVENGX0VNX1JFTF9NQVNLKSAhPSBUQ0ZfRU1fUkVMX01BU0spCisKK2VudW0KK3sKKwlUQ0ZfTEFZRVJfTElOSywKKwlUQ0ZfTEFZRVJfTkVUV09SSywKKwlUQ0ZfTEFZRVJfVFJBTlNQT1JULAorCV9fVENGX0xBWUVSX01BWAorfTsKKyNkZWZpbmUgVENGX0xBWUVSX01BWCAoX19UQ0ZfTEFZRVJfTUFYIC0gMSkKKworLyogRW1hdGNoIHR5cGUgYXNzaWdubWVudHMKKyAqICAgMS4uMzI3NjcJCVJlc2VydmVkIGZvciBlbWF0Y2hlcyBpbnNpZGUga2VybmVsIHRyZWUKKyAqICAgMzI3NjguLjY1NTM1CUZyZWUgdG8gdXNlLCBub3QgcmVsaWFibGUKKyAqLworZW51bQoreworCVRDRl9FTV9DT05UQUlORVIsCisJVENGX0VNX0NNUCwKKwlUQ0ZfRU1fTkJZVEUsCisJVENGX0VNX1UzMiwKKwlUQ0ZfRU1fTUVUQSwKKwlfX1RDRl9FTV9NQVgKK307CisKK2VudW0KK3sKKwlUQ0ZfRU1fUFJPR19UQworfTsKKworZW51bQoreworCVRDRl9FTV9PUE5EX0VRLAorCVRDRl9FTV9PUE5EX0dULAorCVRDRl9FTV9PUE5EX0xUCit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGt0X3NjaGVkLmggYi9pbmNsdWRlL2xpbnV4L3BrdF9zY2hlZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczZDg0YzAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3BrdF9zY2hlZC5oCkBAIC0wLDAgKzEsNDU0IEBACisjaWZuZGVmIF9fTElOVVhfUEtUX1NDSEVEX0gKKyNkZWZpbmUgX19MSU5VWF9QS1RfU0NIRURfSAorCisvKiBMb2dpY2FsIHByaW9yaXR5IGJhbmRzIG5vdCBkZXBlbmRpbmcgb24gc3BlY2lmaWMgcGFja2V0IHNjaGVkdWxlci4KKyAgIEV2ZXJ5IHNjaGVkdWxlciB3aWxsIG1hcCB0aGVtIHRvIHJlYWwgdHJhZmZpYyBjbGFzc2VzLCBpZiBpdCBoYXMKKyAgIG5vIG1vcmUgcHJlY2lzZSBtZWNoYW5pc20gdG8gY2xhc3NpZnkgcGFja2V0cy4KKworICAgVGhlc2UgbnVtYmVycyBoYXZlIG5vIHNwZWNpYWwgbWVhbmluZywgdGhvdWdoIHRoZWlyIGNvaW5jaWRlbmNlCisgICB3aXRoIG9ic29sZXRlIElQdjYgdmFsdWVzIGlzIG5vdCBvY2Nhc2lvbmFsIDotKS4gTmV3IElQdjYgZHJhZnRzCisgICBwcmVmZXJyZWQgZnVsbCBhbmFyY2h5IGluc3BpcmVkIGJ5IGRpZmZzZXJ2IGdyb3VwLgorCisgICBOb3RlOiBUQ19QUklPX0JFU1RFRkZPUlQgZG9lcyBub3QgbWVhbiB0aGF0IGl0IGlzIHRoZSBtb3N0IHVuaGFwcHkKKyAgIGNsYXNzLCBhY3R1YWxseSwgYXMgcnVsZSBpdCB3aWxsIGJlIGhhbmRsZWQgd2l0aCBtb3JlIGNhcmUgdGhhbgorICAgZmlsbGVyIG9yIGV2ZW4gYnVsay4KKyAqLworCisjZGVmaW5lIFRDX1BSSU9fQkVTVEVGRk9SVAkJMAorI2RlZmluZSBUQ19QUklPX0ZJTExFUgkJCTEKKyNkZWZpbmUgVENfUFJJT19CVUxLCQkJMgorI2RlZmluZSBUQ19QUklPX0lOVEVSQUNUSVZFX0JVTEsJNAorI2RlZmluZSBUQ19QUklPX0lOVEVSQUNUSVZFCQk2CisjZGVmaW5lIFRDX1BSSU9fQ09OVFJPTAkJCTcKKworI2RlZmluZSBUQ19QUklPX01BWAkJCTE1CisKKy8qIEdlbmVyaWMgcXVldWUgc3RhdGlzdGljcywgYXZhaWxhYmxlIGZvciBhbGwgdGhlIGVsZW1lbnRzLgorICAgUGFydGljdWxhciBzY2hlZHVsZXJzIG1heSBoYXZlIGFsc28gdGhlaXIgcHJpdmF0ZSByZWNvcmRzLgorICovCisKK3N0cnVjdCB0Y19zdGF0cworeworCV9fdTY0CWJ5dGVzOwkJCS8qIE5VbWJlciBvZiBlbnF1ZXVlcyBieXRlcyAqLworCV9fdTMyCXBhY2tldHM7CQkvKiBOdW1iZXIgb2YgZW5xdWV1ZWQgcGFja2V0cwkqLworCV9fdTMyCWRyb3BzOwkJCS8qIFBhY2tldHMgZHJvcHBlZCBiZWNhdXNlIG9mIGxhY2sgb2YgcmVzb3VyY2VzICovCisJX191MzIJb3ZlcmxpbWl0czsJCS8qIE51bWJlciBvZiB0aHJvdHRsZSBldmVudHMgd2hlbiB0aGlzCisJCQkJCSAqIGZsb3cgZ29lcyBvdXQgb2YgYWxsb2NhdGVkIGJhbmR3aWR0aCAqLworCV9fdTMyCWJwczsJCQkvKiBDdXJyZW50IGZsb3cgYnl0ZSByYXRlICovCisJX191MzIJcHBzOwkJCS8qIEN1cnJlbnQgZmxvdyBwYWNrZXQgcmF0ZSAqLworCV9fdTMyCXFsZW47CisJX191MzIJYmFja2xvZzsKK307CisKK3N0cnVjdCB0Y19lc3RpbWF0b3IKK3sKKwlzaWduZWQgY2hhcglpbnRlcnZhbDsKKwl1bnNpZ25lZCBjaGFyCWV3bWFfbG9nOworfTsKKworLyogIkhhbmRsZXMiCisgICAtLS0tLS0tLS0KKworICAgIEFsbCB0aGUgdHJhZmZpYyBjb250cm9sIG9iamVjdHMgaGF2ZSAzMmJpdCBpZGVudGlmaWVycywgb3IgImhhbmRsZXMiLgorCisgICAgVGhleSBjYW4gYmUgY29uc2lkZXJlZCBhcyBvcGFxdWUgbnVtYmVycyBmcm9tIHVzZXIgQVBJIHZpZXdwb2ludCwKKyAgICBidXQgYWN0dWFsbHkgdGhleSBhbHdheXMgY29uc2lzdCBvZiB0d28gZmllbGRzOiBtYWpvciBhbmQKKyAgICBtaW5vciBudW1iZXJzLCB3aGljaCBhcmUgaW50ZXJwcmV0ZWQgYnkga2VybmVsIHNwZWNpYWxseSwKKyAgICB0aGF0IG1heSBiZSB1c2VkIGJ5IGFwcGxpY2F0aW9ucywgdGhvdWdoIG5vdCByZWNvbW1lbmRlZC4KKworICAgIEYuZS4gcWRpc2MgaGFuZGxlcyBhbHdheXMgaGF2ZSBtaW5vciBudW1iZXIgZXF1YWwgdG8gemVybywKKyAgICBjbGFzc2VzIChvciBmbG93cykgaGF2ZSBtYWpvciBlcXVhbCB0byBwYXJlbnQgcWRpc2MgbWFqb3IsIGFuZAorICAgIG1pbm9yIHVuaXF1ZWx5IGlkZW50aWZ5aW5nIGNsYXNzIGluc2lkZSBxZGlzYy4KKworICAgIE1hY3JvcyB0byBtYW5pcHVsYXRlIGhhbmRsZXM6CisgKi8KKworI2RlZmluZSBUQ19IX01BSl9NQVNLICgweEZGRkYwMDAwVSkKKyNkZWZpbmUgVENfSF9NSU5fTUFTSyAoMHgwMDAwRkZGRlUpCisjZGVmaW5lIFRDX0hfTUFKKGgpICgoaCkmVENfSF9NQUpfTUFTSykKKyNkZWZpbmUgVENfSF9NSU4oaCkgKChoKSZUQ19IX01JTl9NQVNLKQorI2RlZmluZSBUQ19IX01BS0UobWFqLG1pbikgKCgobWFqKSZUQ19IX01BSl9NQVNLKXwoKG1pbikmVENfSF9NSU5fTUFTSykpCisKKyNkZWZpbmUgVENfSF9VTlNQRUMJKDBVKQorI2RlZmluZSBUQ19IX1JPT1QJKDB4RkZGRkZGRkZVKQorI2RlZmluZSBUQ19IX0lOR1JFU1MgICAgKDB4RkZGRkZGRjFVKQorCitzdHJ1Y3QgdGNfcmF0ZXNwZWMKK3sKKwl1bnNpZ25lZCBjaGFyCWNlbGxfbG9nOworCXVuc2lnbmVkIGNoYXIJX19yZXNlcnZlZDsKKwl1bnNpZ25lZCBzaG9ydAlmZWF0dXJlOworCXNob3J0CQlhZGRlbmQ7CisJdW5zaWduZWQgc2hvcnQJbXB1OworCV9fdTMyCQlyYXRlOworfTsKKworLyogRklGTyBzZWN0aW9uICovCisKK3N0cnVjdCB0Y19maWZvX3FvcHQKK3sKKwlfX3UzMglsaW1pdDsJLyogUXVldWUgbGVuZ3RoOiBieXRlcyBmb3IgYmZpZm8sIHBhY2tldHMgZm9yIHBmaWZvICovCit9OworCisvKiBQUklPIHNlY3Rpb24gKi8KKworI2RlZmluZSBUQ1FfUFJJT19CQU5EUwkxNgorCitzdHJ1Y3QgdGNfcHJpb19xb3B0Cit7CisJaW50CWJhbmRzOwkJCS8qIE51bWJlciBvZiBiYW5kcyAqLworCV9fdTgJcHJpb21hcFtUQ19QUklPX01BWCsxXTsJLyogTWFwOiBsb2dpY2FsIHByaW9yaXR5IC0+IFBSSU8gYmFuZCAqLworfTsKKworLyogVEJGIHNlY3Rpb24gKi8KKworc3RydWN0IHRjX3RiZl9xb3B0Cit7CisJc3RydWN0IHRjX3JhdGVzcGVjIHJhdGU7CisJc3RydWN0IHRjX3JhdGVzcGVjIHBlYWtyYXRlOworCV9fdTMyCQlsaW1pdDsKKwlfX3UzMgkJYnVmZmVyOworCV9fdTMyCQltdHU7Cit9OworCitlbnVtCit7CisJVENBX1RCRl9VTlNQRUMsCisJVENBX1RCRl9QQVJNUywKKwlUQ0FfVEJGX1JUQUIsCisJVENBX1RCRl9QVEFCLAorCV9fVENBX1RCRl9NQVgsCit9OworCisjZGVmaW5lIFRDQV9UQkZfTUFYIChfX1RDQV9UQkZfTUFYIC0gMSkKKworCisvKiBURVFMIHNlY3Rpb24gKi8KKworLyogVEVRTCBkb2VzIG5vdCByZXF1aXJlIGFueSBwYXJhbWV0ZXJzICovCisKKy8qIFNGUSBzZWN0aW9uICovCisKK3N0cnVjdCB0Y19zZnFfcW9wdAoreworCXVuc2lnbmVkCXF1YW50dW07CS8qIEJ5dGVzIHBlciByb3VuZCBhbGxvY2F0ZWQgdG8gZmxvdyAqLworCWludAkJcGVydHVyYl9wZXJpb2Q7CS8qIFBlcmlvZCBvZiBoYXNoIHBlcnR1cmJhdGlvbiAqLworCV9fdTMyCQlsaW1pdDsJCS8qIE1heGltYWwgcGFja2V0cyBpbiBxdWV1ZSAqLworCXVuc2lnbmVkCWRpdmlzb3I7CS8qIEhhc2ggZGl2aXNvciAgKi8KKwl1bnNpZ25lZAlmbG93czsJCS8qIE1heGltYWwgbnVtYmVyIG9mIGZsb3dzICAqLworfTsKKworLyoKKyAqICBOT1RFOiBsaW1pdCwgZGl2aXNvciBhbmQgZmxvd3MgYXJlIGhhcmR3aXJlZCB0byBjb2RlIGF0IHRoZSBtb21lbnQuCisgKgorICoJbGltaXQ9Zmxvd3M9MTI4LCBkaXZpc29yPTEwMjQ7CisgKgorICoJVGhlIG9ubHkgcmVhc29uIGZvciB0aGlzIGlzIGVmZmljaWVuY3ksIGl0IGlzIHBvc3NpYmxlCisgKgl0byBjaGFuZ2UgdGhlc2UgcGFyYW1ldGVycyBpbiBjb21waWxlIHRpbWUuCisgKi8KKworLyogUkVEIHNlY3Rpb24gKi8KKworZW51bQoreworCVRDQV9SRURfVU5TUEVDLAorCVRDQV9SRURfUEFSTVMsCisJVENBX1JFRF9TVEFCLAorCV9fVENBX1JFRF9NQVgsCit9OworCisjZGVmaW5lIFRDQV9SRURfTUFYIChfX1RDQV9SRURfTUFYIC0gMSkKKworc3RydWN0IHRjX3JlZF9xb3B0Cit7CisJX191MzIJCWxpbWl0OwkJLyogSEFSRCBtYXhpbWFsIHF1ZXVlIGxlbmd0aCAoYnl0ZXMpCSovCisJX191MzIJCXF0aF9taW47CS8qIE1pbiBhdmVyYWdlIGxlbmd0aCB0aHJlc2hvbGQgKGJ5dGVzKSAqLworCV9fdTMyCQlxdGhfbWF4OwkvKiBNYXggYXZlcmFnZSBsZW5ndGggdGhyZXNob2xkIChieXRlcykgKi8KKwl1bnNpZ25lZCBjaGFyICAgV2xvZzsJCS8qIGxvZyhXKQkJKi8KKwl1bnNpZ25lZCBjaGFyICAgUGxvZzsJCS8qIGxvZyhQX21heC8ocXRoX21heC1xdGhfbWluKSkJKi8KKwl1bnNpZ25lZCBjaGFyICAgU2NlbGxfbG9nOwkvKiBjZWxsIHNpemUgZm9yIGlkbGUgZGFtcGluZyAqLworCXVuc2lnbmVkIGNoYXIJZmxhZ3M7CisjZGVmaW5lIFRDX1JFRF9FQ04JMQorfTsKKworc3RydWN0IHRjX3JlZF94c3RhdHMKK3sKKwlfX3UzMiAgICAgICAgICAgZWFybHk7ICAgICAgICAgIC8qIEVhcmx5IGRyb3BzICovCisJX191MzIgICAgICAgICAgIHBkcm9wOyAgICAgICAgICAvKiBEcm9wcyBkdWUgdG8gcXVldWUgbGltaXRzICovCisJX191MzIgICAgICAgICAgIG90aGVyOyAgICAgICAgICAvKiBEcm9wcyBkdWUgdG8gZHJvcCgpIGNhbGxzICovCisJX191MzIgICAgICAgICAgIG1hcmtlZDsgICAgICAgICAvKiBNYXJrZWQgcGFja2V0cyAqLworfTsKKworLyogR1JFRCBzZWN0aW9uICovCisKKyNkZWZpbmUgTUFYX0RQcyAxNgorCitlbnVtCit7CisgICAgICAgVENBX0dSRURfVU5TUEVDLAorICAgICAgIFRDQV9HUkVEX1BBUk1TLAorICAgICAgIFRDQV9HUkVEX1NUQUIsCisgICAgICAgVENBX0dSRURfRFBTLAorCSAgIF9fVENBX0dSRURfTUFYLAorfTsKKworI2RlZmluZSBUQ0FfR1JFRF9NQVggKF9fVENBX0dSRURfTUFYIC0gMSkKKworI2RlZmluZSBUQ0FfU0VUX09GRiBUQ0FfR1JFRF9QQVJNUworc3RydWN0IHRjX2dyZWRfcW9wdAoreworICAgICAgIF9fdTMyICAgICAgICAgICBsaW1pdDsgICAgICAgICAgLyogSEFSRCBtYXhpbWFsIHF1ZXVlIGxlbmd0aCAoYnl0ZXMpICAgIAorKi8KKyAgICAgICBfX3UzMiAgICAgICAgICAgcXRoX21pbjsgICAgICAgIC8qIE1pbiBhdmVyYWdlIGxlbmd0aCB0aHJlc2hvbGQgKGJ5dGVzKSAKKyovCisgICAgICAgX191MzIgICAgICAgICAgIHF0aF9tYXg7ICAgICAgICAvKiBNYXggYXZlcmFnZSBsZW5ndGggdGhyZXNob2xkIChieXRlcykgCisqLworICAgICAgIF9fdTMyICAgICAgICAgICBEUDsgICAgICAgICAgICAgLyogdXB0byAyXjMyIERQcyAqLworICAgICAgIF9fdTMyICAgICAgICAgICBiYWNrbG9nOyAgICAgICAgCisgICAgICAgX191MzIgICAgICAgICAgIHFhdmU7ICAgCisgICAgICAgX191MzIgICAgICAgICAgIGZvcmNlZDsgCisgICAgICAgX191MzIgICAgICAgICAgIGVhcmx5OyAgCisgICAgICAgX191MzIgICAgICAgICAgIG90aGVyOyAgCisgICAgICAgX191MzIgICAgICAgICAgIHBkcm9wOyAgCisKKyAgICAgICB1bnNpZ25lZCBjaGFyICAgV2xvZzsgICAgICAgICAgIC8qIGxvZyhXKSAgICAgICAgICAgICAgICovCisgICAgICAgdW5zaWduZWQgY2hhciAgIFBsb2c7ICAgICAgICAgICAvKiBsb2coUF9tYXgvKHF0aF9tYXgtcXRoX21pbikpICovCisgICAgICAgdW5zaWduZWQgY2hhciAgIFNjZWxsX2xvZzsgICAgICAvKiBjZWxsIHNpemUgZm9yIGlkbGUgZGFtcGluZyAqLworICAgICAgIF9fdTggICAgICAgICAgICBwcmlvOwkJLyogcHJpbyBvZiB0aGlzIFZRICovCisgICAgICAgX191MzIJcGFja2V0czsKKyAgICAgICBfX3UzMglieXRlc2luOworfTsKKy8qIGdyZWQgc2V0dXAgKi8KK3N0cnVjdCB0Y19ncmVkX3NvcHQKK3sKKyAgICAgICBfX3UzMiAgICAgICAgICAgRFBzOworICAgICAgIF9fdTMyICAgICAgICAgICBkZWZfRFA7CisgICAgICAgX191OCAgICAgICAgICAgIGdyaW87Cit9OworCisvKiBIVEIgc2VjdGlvbiAqLworI2RlZmluZSBUQ19IVEJfTlVNUFJJTwkJOAorI2RlZmluZSBUQ19IVEJfTUFYREVQVEgJCTgKKyNkZWZpbmUgVENfSFRCX1BST1RPVkVSCQkzIC8qIHRoZSBzYW1lIGFzIEhUQiBhbmQgVEMncyBtYWpvciAqLworCitzdHJ1Y3QgdGNfaHRiX29wdAoreworCXN0cnVjdCB0Y19yYXRlc3BlYyAJcmF0ZTsKKwlzdHJ1Y3QgdGNfcmF0ZXNwZWMgCWNlaWw7CisJX191MzIJYnVmZmVyOworCV9fdTMyCWNidWZmZXI7CisJX191MzIJcXVhbnR1bTsKKwlfX3UzMglsZXZlbDsJCS8qIG91dCBvbmx5ICovCisJX191MzIJcHJpbzsKK307CitzdHJ1Y3QgdGNfaHRiX2dsb2IKK3sKKwlfX3UzMiB2ZXJzaW9uOwkJLyogdG8gbWF0Y2ggSFRCL1RDICovCisgICAgCV9fdTMyIHJhdGUycXVhbnR1bTsJLyogYnBzLT5xdWFudHVtIGRpdmlzb3IgKi8KKyAgICAJX191MzIgZGVmY2xzOwkJLyogZGVmYXVsdCBjbGFzcyBudW1iZXIgKi8KKwlfX3UzMiBkZWJ1ZzsJCS8qIGRlYnVnIGZsYWdzICovCisKKwkvKiBzdGF0cyAqLworCV9fdTMyIGRpcmVjdF9wa3RzOyAvKiBjb3VudCBvZiBub24gc2hhcHBlZCBwYWNrZXRzICovCit9OworZW51bQoreworCVRDQV9IVEJfVU5TUEVDLAorCVRDQV9IVEJfUEFSTVMsCisJVENBX0hUQl9JTklULAorCVRDQV9IVEJfQ1RBQiwKKwlUQ0FfSFRCX1JUQUIsCisJX19UQ0FfSFRCX01BWCwKK307CisKKyNkZWZpbmUgVENBX0hUQl9NQVggKF9fVENBX0hUQl9NQVggLSAxKQorCitzdHJ1Y3QgdGNfaHRiX3hzdGF0cworeworCV9fdTMyIGxlbmRzOworCV9fdTMyIGJvcnJvd3M7CisJX191MzIgZ2lhbnRzOwkvKiB0b28gYmlnIHBhY2tldHMgKHJhdGUgd2lsbCBub3QgYmUgYWNjdXJhdGUpICovCisJX191MzIgdG9rZW5zOworCV9fdTMyIGN0b2tlbnM7Cit9OworCisvKiBIRlNDIHNlY3Rpb24gKi8KKworc3RydWN0IHRjX2hmc2NfcW9wdAoreworCV9fdTE2CWRlZmNsczsJCS8qIGRlZmF1bHQgY2xhc3MgKi8KK307CisKK3N0cnVjdCB0Y19zZXJ2aWNlX2N1cnZlCit7CisJX191MzIJbTE7CQkvKiBzbG9wZSBvZiB0aGUgZmlyc3Qgc2VnbWVudCBpbiBicHMgKi8KKwlfX3UzMglkOwkJLyogeC1wcm9qZWN0aW9uIG9mIHRoZSBmaXJzdCBzZWdtZW50IGluIHVzICovCisJX191MzIJbTI7CQkvKiBzbG9wZSBvZiB0aGUgc2Vjb25kIHNlZ21lbnQgaW4gYnBzICovCit9OworCitzdHJ1Y3QgdGNfaGZzY19zdGF0cworeworCV9fdTY0CXdvcms7CQkvKiB0b3RhbCB3b3JrIGRvbmUgKi8KKwlfX3U2NAlydHdvcms7CQkvKiB3b3JrIGRvbmUgYnkgcmVhbC10aW1lIGNyaXRlcmlhICovCisJX191MzIJcGVyaW9kOwkJLyogY3VycmVudCBwZXJpb2QgKi8KKwlfX3UzMglsZXZlbDsJCS8qIGNsYXNzIGxldmVsIGluIGhpZXJhcmNoeSAqLworfTsKKworZW51bQoreworCVRDQV9IRlNDX1VOU1BFQywKKwlUQ0FfSEZTQ19SU0MsCisJVENBX0hGU0NfRlNDLAorCVRDQV9IRlNDX1VTQywKKwlfX1RDQV9IRlNDX01BWCwKK307CisKKyNkZWZpbmUgVENBX0hGU0NfTUFYIChfX1RDQV9IRlNDX01BWCAtIDEpCisKKworLyogQ0JRIHNlY3Rpb24gKi8KKworI2RlZmluZSBUQ19DQlFfTUFYUFJJTwkJOAorI2RlZmluZSBUQ19DQlFfTUFYTEVWRUwJCTgKKyNkZWZpbmUgVENfQ0JRX0RFRl9FV01BCQk1CisKK3N0cnVjdCB0Y19jYnFfbHNzb3B0Cit7CisJdW5zaWduZWQgY2hhcgljaGFuZ2U7CisJdW5zaWduZWQgY2hhcglmbGFnczsKKyNkZWZpbmUgVENGX0NCUV9MU1NfQk9VTkRFRAkxCisjZGVmaW5lIFRDRl9DQlFfTFNTX0lTT0xBVEVECTIKKwl1bnNpZ25lZCBjaGFyICAJZXdtYV9sb2c7CisJdW5zaWduZWQgY2hhciAgCWxldmVsOworI2RlZmluZSBUQ0ZfQ0JRX0xTU19GTEFHUwkxCisjZGVmaW5lIFRDRl9DQlFfTFNTX0VXTUEJMgorI2RlZmluZSBUQ0ZfQ0JRX0xTU19NQVhJRExFCTQKKyNkZWZpbmUgVENGX0NCUV9MU1NfTUlOSURMRQk4CisjZGVmaW5lIFRDRl9DQlFfTFNTX09GRlRJTUUJMHgxMAorI2RlZmluZSBUQ0ZfQ0JRX0xTU19BVlBLVAkweDIwCisJX191MzIJCW1heGlkbGU7CisJX191MzIJCW1pbmlkbGU7CisJX191MzIJCW9mZnRpbWU7CisJX191MzIJCWF2cGt0OworfTsKKworc3RydWN0IHRjX2NicV93cnJvcHQKK3sKKwl1bnNpZ25lZCBjaGFyCWZsYWdzOworCXVuc2lnbmVkIGNoYXIJcHJpb3JpdHk7CisJdW5zaWduZWQgY2hhcgljcHJpb3JpdHk7CisJdW5zaWduZWQgY2hhcglfX3Jlc2VydmVkOworCV9fdTMyCQlhbGxvdDsKKwlfX3UzMgkJd2VpZ2h0OworfTsKKworc3RydWN0IHRjX2NicV9vdmwKK3sKKwl1bnNpZ25lZCBjaGFyCXN0cmF0ZWd5OworI2RlZmluZQlUQ19DQlFfT1ZMX0NMQVNTSUMJMAorI2RlZmluZQlUQ19DQlFfT1ZMX0RFTEFZCTEKKyNkZWZpbmUJVENfQ0JRX09WTF9MT1dQUklPCTIKKyNkZWZpbmUJVENfQ0JRX09WTF9EUk9QCQkzCisjZGVmaW5lCVRDX0NCUV9PVkxfUkNMQVNTSUMJNAorCXVuc2lnbmVkIGNoYXIJcHJpb3JpdHkyOworCV9fdTMyCQlwZW5hbHR5OworfTsKKworc3RydWN0IHRjX2NicV9wb2xpY2UKK3sKKwl1bnNpZ25lZCBjaGFyCXBvbGljZTsKKwl1bnNpZ25lZCBjaGFyCV9fcmVzMTsKKwl1bnNpZ25lZCBzaG9ydAlfX3JlczI7Cit9OworCitzdHJ1Y3QgdGNfY2JxX2ZvcHQKK3sKKwlfX3UzMgkJc3BsaXQ7CisJX191MzIJCWRlZm1hcDsKKwlfX3UzMgkJZGVmY2hhbmdlOworfTsKKworc3RydWN0IHRjX2NicV94c3RhdHMKK3sKKwlfX3UzMgkJYm9ycm93czsKKwlfX3UzMgkJb3ZlcmFjdGlvbnM7CisJX19zMzIJCWF2Z2lkbGU7CisJX19zMzIJCXVuZGVydGltZTsKK307CisKK2VudW0KK3sKKwlUQ0FfQ0JRX1VOU1BFQywKKwlUQ0FfQ0JRX0xTU09QVCwKKwlUQ0FfQ0JRX1dSUk9QVCwKKwlUQ0FfQ0JRX0ZPUFQsCisJVENBX0NCUV9PVkxfU1RSQVRFR1ksCisJVENBX0NCUV9SQVRFLAorCVRDQV9DQlFfUlRBQiwKKwlUQ0FfQ0JRX1BPTElDRSwKKwlfX1RDQV9DQlFfTUFYLAorfTsKKworI2RlZmluZSBUQ0FfQ0JRX01BWAkoX19UQ0FfQ0JRX01BWCAtIDEpCisKKy8qIGRzbWFyayBzZWN0aW9uICovCisKK2VudW0geworCVRDQV9EU01BUktfVU5TUEVDLAorCVRDQV9EU01BUktfSU5ESUNFUywKKwlUQ0FfRFNNQVJLX0RFRkFVTFRfSU5ERVgsCisJVENBX0RTTUFSS19TRVRfVENfSU5ERVgsCisJVENBX0RTTUFSS19NQVNLLAorCVRDQV9EU01BUktfVkFMVUUsCisJX19UQ0FfRFNNQVJLX01BWCwKK307CisKKyNkZWZpbmUgVENBX0RTTUFSS19NQVggKF9fVENBX0RTTUFSS19NQVggLSAxKQorCisvKiBBVE0gIHNlY3Rpb24gKi8KKworZW51bSB7CisJVENBX0FUTV9VTlNQRUMsCisJVENBX0FUTV9GRCwJCS8qIGZpbGUvc29ja2V0IGRlc2NyaXB0b3IgKi8KKwlUQ0FfQVRNX1BUUiwJCS8qIHBvaW50ZXIgdG8gZGVzY3JpcHRvciAtIGxhdGVyICovCisJVENBX0FUTV9IRFIsCQkvKiBMTCBoZWFkZXIgKi8KKwlUQ0FfQVRNX0VYQ0VTUywJCS8qIGV4Y2VzcyB0cmFmZmljIGNsYXNzICgwIGZvciBDTFApICAqLworCVRDQV9BVE1fQUREUiwJCS8qIFBWQyBhZGRyZXNzIChmb3Igb3V0cHV0IG9ubHkpICovCisJVENBX0FUTV9TVEFURSwJCS8qIFZDIHN0YXRlIChBVE1fVlNfKjsgZm9yIG91dHB1dCBvbmx5KSAqLworCV9fVENBX0FUTV9NQVgsCit9OworCisjZGVmaW5lIFRDQV9BVE1fTUFYCShfX1RDQV9BVE1fTUFYIC0gMSkKKworLyogTmV0d29yayBlbXVsYXRvciAqLworCitlbnVtCit7CisJVENBX05FVEVNX1VOU1BFQywKKwlUQ0FfTkVURU1fQ09SUiwKKwlUQ0FfTkVURU1fREVMQVlfRElTVCwKKwlfX1RDQV9ORVRFTV9NQVgsCit9OworCisjZGVmaW5lIFRDQV9ORVRFTV9NQVggKF9fVENBX05FVEVNX01BWCAtIDEpCisKK3N0cnVjdCB0Y19uZXRlbV9xb3B0Cit7CisJX191MzIJbGF0ZW5jeTsJLyogYWRkZWQgZGVsYXkgKHVzKSAqLworCV9fdTMyICAgbGltaXQ7CQkvKiBmaWZvIGxpbWl0IChwYWNrZXRzKSAqLworCV9fdTMyCWxvc3M7CQkvKiByYW5kb20gcGFja2V0IGxvc3MgKDA9bm9uZSB+MD0xMDAlKSAqLworCV9fdTMyCWdhcDsJCS8qIHJlLW9yZGVyaW5nIGdhcCAoMCBmb3IgZGVsYXkgYWxsKSAqLworCV9fdTMyICAgZHVwbGljYXRlOwkvKiByYW5kb20gcGFja2V0IGR1cCAgKDA9bm9uZSB+MD0xMDAlKSAqLworCV9fdTMyCWppdHRlcjsJCS8qIHJhbmRvbSBqaXR0ZXIgaW4gbGF0ZW5jeSAodXMpICovCit9OworCitzdHJ1Y3QgdGNfbmV0ZW1fY29ycgoreworCV9fdTMyCWRlbGF5X2NvcnI7CS8qIGRlbGF5IGNvcnJlbGF0aW9uICovCisJX191MzIJbG9zc19jb3JyOwkvKiBwYWNrZXQgbG9zcyBjb3JyZWxhdGlvbiAqLworCV9fdTMyCWR1cF9jb3JyOwkvKiBkdXBsaWNhdGUgY29ycmVsYXRpb24gICovCit9OworCisjZGVmaW5lIE5FVEVNX0RJU1RfU0NBTEUJODE5MgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGt0Y2R2ZC5oIGIvaW5jbHVkZS9saW51eC9wa3RjZHZkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGUyZDJhOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvcGt0Y2R2ZC5oCkBAIC0wLDAgKzEsMjc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAwIEplbnMgQXhib2UgPGF4Ym9lQHN1c2UuZGU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNCBQZXRlciBPc3Rlcmx1bmQgPHBldGVybzJAdGVsaWEuY29tPgorICoKKyAqIE1heSBiZSBjb3BpZWQgb3IgbW9kaWZpZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgbGludXgvQ09QWUlORyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAqCisgKiBQYWNrZXQgd3JpdGluZyBsYXllciBmb3IgQVRBUEkgYW5kIFNDU0kgQ0QtUiwgQ0QtUlcsIERWRC1SLCBhbmQKKyAqIERWRC1SVyBkZXZpY2VzLgorICoKKyAqLworI2lmbmRlZiBfX1BLVENEVkRfSAorI2RlZmluZSBfX1BLVENEVkRfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyoKKyAqIDEgZm9yIG5vcm1hbCBkZWJ1ZyBtZXNzYWdlcywgMiBpcyB2ZXJ5IHZlcmJvc2UuIDAgdG8gdHVybiBpdCBvZmYuCisgKi8KKyNkZWZpbmUgUEFDS0VUX0RFQlVHCQkxCisKKyNkZWZpbmUJTUFYX1dSSVRFUlMJCTgKKworI2RlZmluZSBQS1RfUkJfUE9PTF9TSVpFCTUxMgorCisvKgorICogSG93IGxvbmcgd2Ugc2hvdWxkIGhvbGQgYSBub24tZnVsbCBwYWNrZXQgYmVmb3JlIHN0YXJ0aW5nIGRhdGEgZ2F0aGVyaW5nLgorICovCisjZGVmaW5lIFBBQ0tFVF9XQUlUX1RJTUUJKEhaICogNSAvIDEwMDApCisKKy8qCisgKiB1c2UgZHJpdmUgd3JpdGUgY2FjaGluZyAtLSB3ZSBuZWVkIGRlZmVycmVkIGVycm9yIGhhbmRsaW5nIHRvIGJlCisgKiBhYmxlIHRvIHN1Y2Vzc2Z1bGx5IHJlY292ZXIgd2l0aCB0aGlzIG9wdGlvbiAoZHJpdmUgd2lsbCByZXR1cm4gZ29vZAorICogc3RhdHVzIGFzIHNvb24gYXMgdGhlIGNkYiBpcyB2YWxpZGF0ZWQpLgorICovCisjaWYgZGVmaW5lZChDT05GSUdfQ0RST01fUEtUQ0RWRF9XQ0FDSEUpCisjZGVmaW5lIFVTRV9XQ0FDSElORwkJMQorI2Vsc2UKKyNkZWZpbmUgVVNFX1dDQUNISU5HCQkwCisjZW5kaWYKKworLyoKKyAqIE5vIHVzZXItc2VydmljYWJsZSBwYXJ0cyBiZXlvbmQgdGhpcyBwb2ludCAtPgorICovCisKKy8qCisgKiBkZXZpY2UgdHlwZXMKKyAqLworI2RlZmluZSBQQUNLRVRfQ0RSCQkxCisjZGVmaW5lCVBBQ0tFVF9DRFJXCQkyCisjZGVmaW5lIFBBQ0tFVF9EVkRSCQkzCisjZGVmaW5lIFBBQ0tFVF9EVkRSVwkJNAorCisvKgorICogZmxhZ3MKKyAqLworI2RlZmluZSBQQUNLRVRfV1JJVEFCTEUJCTEJLyogcGQgaXMgd3JpdGFibGUgKi8KKyNkZWZpbmUgUEFDS0VUX05XQV9WQUxJRAkyCS8qIG5leHQgd3JpdGFibGUgYWRkcmVzcyB2YWxpZCAqLworI2RlZmluZSBQQUNLRVRfTFJBX1ZBTElECTMJLyogbGFzdCByZWNvcmRlZCBhZGRyZXNzIHZhbGlkICovCisjZGVmaW5lIFBBQ0tFVF9NRVJHRV9TRUdTCTQJLyogcGVyZm9ybSBzZWdtZW50IG1lcmdpbmcgdG8ga2VlcCAqLworCQkJCQkvKiB1bmRlcmx5aW5nIGNkcm9tIGRldmljZSBoYXBweSAqLworCisvKgorICogRGlzYyBzdGF0dXMgLS0gZnJvbSBSRUFEX0RJU0NfSU5GTworICovCisjZGVmaW5lIFBBQ0tFVF9ESVNDX0VNUFRZCTAKKyNkZWZpbmUgUEFDS0VUX0RJU0NfSU5DT01QTEVURQkxCisjZGVmaW5lIFBBQ0tFVF9ESVNDX0NPTVBMRVRFCTIKKyNkZWZpbmUgUEFDS0VUX0RJU0NfT1RIRVIJMworCisvKgorICogd3JpdGUgdHlwZSwgYW5kIGNvcnJlc3BvbmRpbmcgZGF0YSBibG9jayB0eXBlCisgKi8KKyNkZWZpbmUgUEFDS0VUX01PREUxCQkxCisjZGVmaW5lIFBBQ0tFVF9NT0RFMgkJMgorI2RlZmluZSBQQUNLRVRfQkxPQ0tfTU9ERTEJOAorI2RlZmluZSBQQUNLRVRfQkxPQ0tfTU9ERTIJMTAKKworLyoKKyAqIExhc3Qgc2Vzc2lvbi9ib3JkZXIgc3RhdHVzCisgKi8KKyNkZWZpbmUgUEFDS0VUX1NFU1NJT05fRU1QVFkJCTAKKyNkZWZpbmUgUEFDS0VUX1NFU1NJT05fSU5DT01QTEVURQkxCisjZGVmaW5lIFBBQ0tFVF9TRVNTSU9OX1JFU0VSVkVECQkyCisjZGVmaW5lIFBBQ0tFVF9TRVNTSU9OX0NPTVBMRVRFCQkzCisKKyNkZWZpbmUgUEFDS0VUX01DTgkJCSI0YTY1NmU3MzQxNzg2MjZmNjUzMjMwMzAzMDAwMDAiCisKKyN1bmRlZiBQQUNLRVRfVVNFX0xTCisKKyNkZWZpbmUgUEtUX0NUUkxfQ01EX1NFVFVQCTAKKyNkZWZpbmUgUEtUX0NUUkxfQ01EX1RFQVJET1dOCTEKKyNkZWZpbmUgUEtUX0NUUkxfQ01EX1NUQVRVUwkyCisKK3N0cnVjdCBwa3RfY3RybF9jb21tYW5kIHsKKwlfX3UzMiBjb21tYW5kOwkJCQkvKiBpbjogU2V0dXAsIHRlYXJkb3duLCBzdGF0dXMgKi8KKwlfX3UzMiBkZXZfaW5kZXg7CQkJLyogaW4vb3V0OiBEZXZpY2UgaW5kZXggKi8KKwlfX3UzMiBkZXY7CQkJCS8qIGluL291dDogRGV2aWNlIG5yIGZvciBjZHJ3IGRldmljZSAqLworCV9fdTMyIHBrdF9kZXY7CQkJCS8qIGluL291dDogRGV2aWNlIG5yIGZvciBwYWNrZXQgZGV2aWNlICovCisJX191MzIgbnVtX2RldmljZXM7CQkJLyogb3V0OiBMYXJnZXN0IGRldmljZSBpbmRleCArIDEgKi8KKwlfX3UzMiBwYWRkaW5nOwkJCQkvKiBOb3QgdXNlZCAqLworfTsKKworLyoKKyAqIHBhY2tldCBpb2N0bHMKKyAqLworI2RlZmluZSBQQUNLRVRfSU9DVExfTUFHSUMJKCdYJykKKyNkZWZpbmUgUEFDS0VUX0NUUkxfQ01ECQlfSU9XUihQQUNLRVRfSU9DVExfTUFHSUMsIDEsIHN0cnVjdCBwa3RfY3RybF9jb21tYW5kKQorCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9jZHJvbS5oPgorCitzdHJ1Y3QgcGFja2V0X3NldHRpbmdzCit7CisJX191OAkJCXNpemU7CQkvKiBwYWNrZXQgc2l6ZSBpbiAoNTEyIGJ5dGUpIHNlY3RvcnMgKi8KKwlfX3U4CQkJZnA7CQkvKiBmaXhlZCBwYWNrZXRzICovCisJX191OAkJCWxpbmtfbG9zczsJLyogdGhlIHJlc3QgaXMgc3BlY2lmaWVkCisJCQkJCQkgKiBhcyBwZXIgTXQgRnVqaSAqLworCV9fdTgJCQl3cml0ZV90eXBlOworCV9fdTgJCQl0cmFja19tb2RlOworCV9fdTgJCQlibG9ja19tb2RlOworfTsKKworLyoKKyAqIFZlcnkgY3J1ZGUgc3RhdHMgZm9yIG5vdworICovCitzdHJ1Y3QgcGFja2V0X3N0YXRzCit7CisJdW5zaWduZWQgbG9uZwkJcGt0X3N0YXJ0ZWQ7CisJdW5zaWduZWQgbG9uZwkJcGt0X2VuZGVkOworCXVuc2lnbmVkIGxvbmcJCXNlY3NfdzsKKwl1bnNpZ25lZCBsb25nCQlzZWNzX3JnOworCXVuc2lnbmVkIGxvbmcJCXNlY3NfcjsKK307CisKK3N0cnVjdCBwYWNrZXRfY2RydworeworCXN0cnVjdCBsaXN0X2hlYWQJcGt0X2ZyZWVfbGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXBrdF9hY3RpdmVfbGlzdDsKKwlzcGlubG9ja190CQlhY3RpdmVfbGlzdF9sb2NrOyAvKiBTZXJpYWxpemUgYWNjZXNzIHRvIHBrdF9hY3RpdmVfbGlzdCAqLworCXN0cnVjdCB0YXNrX3N0cnVjdAkqdGhyZWFkOworCWF0b21pY190CQlwZW5kaW5nX2Jpb3M7Cit9OworCisvKgorICogU3dpdGNoIHRvIGhpZ2ggc3BlZWQgcmVhZGluZyBhZnRlciByZWFkaW5nIHRoaXMgbWFueSBraWxvYnl0ZXMKKyAqIHdpdGggbm8gaW50ZXJzcGVyc2VkIHdyaXRlcy4KKyAqLworI2RlZmluZSBISV9TUEVFRF9TV0lUQ0ggNTEyCisKK3N0cnVjdCBwYWNrZXRfaW9zY2hlZAoreworCWF0b21pY190CQlhdHRlbnRpb247CS8qIFNldCB0byBub24temVybyB3aGVuIHF1ZXVlIHByb2Nlc3NpbmcgaXMgbmVlZGVkICovCisJaW50CQkJd3JpdGluZzsJLyogTm9uLXplcm8gd2hlbiB3cml0aW5nLCB6ZXJvIHdoZW4gcmVhZGluZyAqLworCXNwaW5sb2NrX3QJCWxvY2s7CQkvKiBQcm90ZWN0aW5nIHJlYWQvd3JpdGUgcXVldWUgbWFuaXB1bGF0aW9ucyAqLworCXN0cnVjdCBiaW8JCSpyZWFkX3F1ZXVlOworCXN0cnVjdCBiaW8JCSpyZWFkX3F1ZXVlX3RhaWw7CisJc3RydWN0IGJpbwkJKndyaXRlX3F1ZXVlOworCXN0cnVjdCBiaW8JCSp3cml0ZV9xdWV1ZV90YWlsOworCWludAkJCWhpZ2hfcHJpb19yZWFkOwkvKiBBbiBpbXBvcnRhbnQgcmVhZCByZXF1ZXN0IGhhcyBiZWVuIHF1ZXVlZCAqLworCWludAkJCXN1Y2Nlc3NpdmVfcmVhZHM7Cit9OworCisvKgorICogMzIgYnVmZmVycyBvZiAyMDQ4IGJ5dGVzCisgKi8KKyNkZWZpbmUgUEFDS0VUX01BWF9TSVpFCQkzMgorI2RlZmluZSBQQUdFU19QRVJfUEFDS0VUCShQQUNLRVRfTUFYX1NJWkUgKiBDRF9GUkFNRVNJWkUgLyBQQUdFX1NJWkUpCisjZGVmaW5lIFBBQ0tFVF9NQVhfU0VDVE9SUwkoUEFDS0VUX01BWF9TSVpFICogQ0RfRlJBTUVTSVpFID4+IDkpCisKK2VudW0gcGFja2V0X2RhdGFfc3RhdGUgeworCVBBQ0tFVF9JRExFX1NUQVRFLAkJCS8qIE5vdCB1c2VkIGF0IHRoZSBtb21lbnQgKi8KKwlQQUNLRVRfV0FJVElOR19TVEFURSwJCQkvKiBXYWl0aW5nIGZvciBtb3JlIGJpb3MgdG8gYXJyaXZlLCBzbyAqLworCQkJCQkJLyogd2UgZG9uJ3QgaGF2ZSB0byBkbyBhcyBtdWNoICovCisJCQkJCQkvKiBkYXRhIGdhdGhlcmluZyAqLworCVBBQ0tFVF9SRUFEX1dBSVRfU1RBVEUsCQkJLyogV2FpdGluZyBmb3IgcmVhZHMgdG8gZmlsbCBpbiBob2xlcyAqLworCVBBQ0tFVF9XUklURV9XQUlUX1NUQVRFLAkJLyogV2FpdGluZyBmb3IgdGhlIHdyaXRlIHRvIGNvbXBsZXRlICovCisJUEFDS0VUX1JFQ09WRVJZX1NUQVRFLAkJCS8qIFJlY292ZXIgYWZ0ZXIgcmVhZC93cml0ZSBlcnJvcnMgKi8KKwlQQUNLRVRfRklOSVNIRURfU1RBVEUsCQkJLyogQWZ0ZXIgd3JpdGUgaGFzIGZpbmlzaGVkICovCisKKwlQQUNLRVRfTlVNX1NUQVRFUwkJCS8qIE51bWJlciBvZiBwb3NzaWJsZSBzdGF0ZXMgKi8KK307CisKKy8qCisgKiBJbmZvcm1hdGlvbiBuZWVkZWQgZm9yIHdyaXRpbmcgYSBzaW5nbGUgcGFja2V0CisgKi8KK3N0cnVjdCBwa3RjZHZkX2RldmljZTsKKworc3RydWN0IHBhY2tldF9kYXRhCit7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OworCisJc3BpbmxvY2tfdAkJbG9jazsJCS8qIExvY2sgcHJvdGVjdGluZyBzdGF0ZSB0cmFuc2l0aW9ucyBhbmQgKi8KKwkJCQkJCS8qIG9yaWdfYmlvcyBsaXN0ICovCisKKwlzdHJ1Y3QgYmlvCQkqb3JpZ19iaW9zOwkvKiBPcmlnaW5hbCBiaW9zIHBhc3NlZCB0byBwa3RfbWFrZV9yZXF1ZXN0ICovCisJc3RydWN0IGJpbwkJKm9yaWdfYmlvc190YWlsOy8qIHRoYXQgd2lsbCBiZSBoYW5kbGVkIGJ5IHRoaXMgcGFja2V0ICovCisJaW50CQkJd3JpdGVfc2l6ZTsJLyogVG90YWwgc2l6ZSBvZiBhbGwgYmlvcyBpbiB0aGUgb3JpZ19iaW9zICovCisJCQkJCQkvKiBsaXN0LCBtZWFzdXJlZCBpbiBudW1iZXIgb2YgZnJhbWVzICovCisKKwlzdHJ1Y3QgYmlvCQkqd19iaW87CQkvKiBUaGUgYmlvIHdlIHdpbGwgc2VuZCB0byB0aGUgcmVhbCBDRCAqLworCQkJCQkJLyogZGV2aWNlIG9uY2Ugd2UgaGF2ZSBhbGwgZGF0YSBmb3IgdGhlICovCisJCQkJCQkvKiBwYWNrZXQgd2UgYXJlIGdvaW5nIHRvIHdyaXRlICovCisJc2VjdG9yX3QJCXNlY3RvcjsJCS8qIEZpcnN0IHNlY3RvciBpbiB0aGlzIHBhY2tldCAqLworCWludAkJCWZyYW1lczsJCS8qIE51bWJlciBvZiBmcmFtZXMgaW4gdGhpcyBwYWNrZXQgKi8KKworCWVudW0gcGFja2V0X2RhdGFfc3RhdGUJc3RhdGU7CQkvKiBDdXJyZW50IHN0YXRlICovCisJYXRvbWljX3QJCXJ1bl9zbTsJCS8qIEluY3JlbWVudGVkIHdoZW5ldmVyIHRoZSBzdGF0ZSAqLworCQkJCQkJLyogbWFjaGluZSBuZWVkcyB0byBiZSBydW4gKi8KKwlsb25nCQkJc2xlZXBfdGltZTsJLyogU2V0IHRoaXMgdG8gbm9uLXplcm8gdG8gbWFrZSB0aGUgc3RhdGUgKi8KKwkJCQkJCS8qIG1hY2hpbmUgcnVuIGFmdGVyIHRoaXMgbWFueSBqaWZmaWVzLiAqLworCisJYXRvbWljX3QJCWlvX3dhaXQ7CS8qIE51bWJlciBvZiBwZW5kaW5nIElPIG9wZXJhdGlvbnMgKi8KKwlhdG9taWNfdAkJaW9fZXJyb3JzOwkvKiBOdW1iZXIgb2YgcmVhZC93cml0ZSBlcnJvcnMgZHVyaW5nIElPICovCisKKwlzdHJ1Y3QgYmlvCQkqcl9iaW9zW1BBQ0tFVF9NQVhfU0laRV07IC8qIGJpb3MgdG8gdXNlIGR1cmluZyBkYXRhIGdhdGhlcmluZyAqLworCXN0cnVjdCBwYWdlCQkqcGFnZXNbUEFHRVNfUEVSX1BBQ0tFVF07CisKKwlpbnQJCQljYWNoZV92YWxpZDsJLyogSWYgbm9uLXplcm8sIHRoZSBkYXRhIGZvciB0aGUgem9uZSBkZWZpbmVkICovCisJCQkJCQkvKiBieSB0aGUgc2VjdG9yIHZhcmlhYmxlIGlzIGNvbXBsZXRlbHkgY2FjaGVkICovCisJCQkJCQkvKiBpbiB0aGUgcGFnZXNbXSB2ZWN0b3IuICovCisKKwlpbnQJCQlpZDsJCS8qIElEIG51bWJlciBmb3IgZGVidWdnaW5nICovCisJc3RydWN0IHBrdGNkdmRfZGV2aWNlCSpwZDsKK307CisKK3N0cnVjdCBwa3RfcmJfbm9kZSB7CisJc3RydWN0IHJiX25vZGUJCXJiX25vZGU7CisJc3RydWN0IGJpbwkJKmJpbzsKK307CisKK3N0cnVjdCBwYWNrZXRfc3RhY2tlZF9kYXRhCit7CisJc3RydWN0IGJpbwkJKmJpbzsJCS8qIE9yaWdpbmFsIHJlYWQgcmVxdWVzdCBiaW8gKi8KKwlzdHJ1Y3QgcGt0Y2R2ZF9kZXZpY2UJKnBkOworfTsKKyNkZWZpbmUgUFNEX1BPT0xfU0laRQkJNjQKKworc3RydWN0IHBrdGNkdmRfZGV2aWNlCit7CisJc3RydWN0IGJsb2NrX2RldmljZQkqYmRldjsJCS8qIGRldiBhdHRhY2hlZCAqLworCWRldl90CQkJcGt0X2RldjsJLyogb3VyIGRldiAqLworCWNoYXIJCQluYW1lWzIwXTsKKwlzdHJ1Y3QgcGFja2V0X3NldHRpbmdzCXNldHRpbmdzOworCXN0cnVjdCBwYWNrZXRfc3RhdHMJc3RhdHM7CisJaW50CQkJcmVmY250OwkJLyogT3BlbiBjb3VudCAqLworCWludAkJCXdyaXRlX3NwZWVkOwkvKiBjdXJyZW50IHdyaXRlIHNwZWVkLCBrQi9zICovCisJaW50CQkJcmVhZF9zcGVlZDsJLyogY3VycmVudCByZWFkIHNwZWVkLCBrQi9zICovCisJdW5zaWduZWQgbG9uZwkJb2Zmc2V0OwkJLyogc3RhcnQgb2Zmc2V0ICovCisJX191OAkJCW1vZGVfb2Zmc2V0OwkvKiAwIC8gOCAqLworCV9fdTgJCQl0eXBlOworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCV9fdTE2CQkJbW1jM19wcm9maWxlOworCV9fdTMyCQkJbndhOwkJLyogbmV4dCB3cml0YWJsZSBhZGRyZXNzICovCisJX191MzIJCQlscmE7CQkvKiBsYXN0IHJlY29yZGVkIGFkZHJlc3MgKi8KKwlzdHJ1Y3QgcGFja2V0X2NkcncJY2RydzsKKwl3YWl0X3F1ZXVlX2hlYWRfdAl3cXVldWU7CisKKwlzcGlubG9ja190CQlsb2NrOwkJLyogU2VyaWFsaXplIGFjY2VzcyB0byBiaW9fcXVldWUgKi8KKwlzdHJ1Y3QgcmJfcm9vdAkJYmlvX3F1ZXVlOwkvKiBXb3JrIHF1ZXVlIG9mIGJpb3Mgd2UgbmVlZCB0byBoYW5kbGUgKi8KKwlpbnQJCQliaW9fcXVldWVfc2l6ZTsJLyogTnVtYmVyIG9mIG5vZGVzIGluIGJpb19xdWV1ZSAqLworCXNlY3Rvcl90CQljdXJyZW50X3NlY3RvcjsJLyogS2VlcCB0cmFjayBvZiB3aGVyZSB0aGUgZWxldmF0b3IgaXMgKi8KKwlhdG9taWNfdAkJc2Nhbl9xdWV1ZTsJLyogU2V0IHRvIG5vbi16ZXJvIHdoZW4gcGt0X2hhbmRsZV9xdWV1ZSAqLworCQkJCQkJLyogbmVlZHMgdG8gYmUgcnVuLiAqLworCW1lbXBvb2xfdAkJKnJiX3Bvb2w7CS8qIG1lbXBvb2wgZm9yIHBrdF9yYl9ub2RlIGFsbG9jYXRpb25zICovCisKKwlzdHJ1Y3QgcGFja2V0X2lvc2NoZWQgICBpb3NjaGVkOworCXN0cnVjdCBnZW5kaXNrCQkqZGlzazsKK307CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfX1BLVENEVkRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wbGF0Zm9ybS5oIGIvaW5jbHVkZS9saW51eC9wbGF0Zm9ybS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjMzMwODQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtLmgKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIGluY2x1ZGUvbGludXgvcGxhdGZvcm0uaCAtIHBsYXRmb3JtIGRyaXZlciBkZWZpbml0aW9ucworICoKKyAqIEJlY2F1c2Ugb2YgdGhlIHByb2xpZmljIGNvbnN1bWVyaXNtIG9mIHRoZSBhdmVyYWdlIEFtZXJpY2FuLAorICogYW5kIHRoZSBkb21pbmFudCBtYXJrZXRpbmcgYnVkZ2V0cyBvZiBQQyBPRU1zLCB3ZSBoYXZlIGJlZW4KKyAqIGJsZXNzZWQgd2l0aCBmcmVxdWVudCB1cGRhdGVzIG9mIHRoZSBQQyBhcmNoaXRlY3R1cmUuIAorICoKKyAqIFdoaWxlIG1vc3Qgb2YgdGhlc2UgY2FsbHMgYXJlIHNpbmd1bGFyIHBlciBhcmNoaXRlY3R1cmUsIHRoZXkgCisgKiByZXF1aXJlIGFuIGV4dHJhIGxheWVyIG9mIGFic3RyYWN0aW9uIG9uIHRoZSB4ODYgc28gdGhlIHJpZ2h0CisgKiBzdWJzeXN0ZW0gZ2V0cyB0aGUgcmlnaHQgY2FsbC4gCisgKgorICogQmFzaWNhbGx5LCB0aGlzIGNvbnNvbGlkYXRlcyB0aGUgcG93ZXIgb2ZmIGFuZCByZWJvb3QgY2FsbGJhY2tzIAorICogaW50byBvbmUgc3RydWN0dXJlLCBhcyB3ZWxsIGFzIGFkZGluZyBwb3dlciBtYW5hZ2VtZW50IGhvb2tzLgorICoKKyAqIFdoZW4gYWRkaW5nIGEgcGxhdGZvcm0gZHJpdmVyLCBwbGVhc2UgbWFrZSBzdXJlIGFsbCBjYWxsYmFja3MgYXJlIAorICogZmlsbGVkLiBUaGVyZSBhcmUgZGVmYXVsdHMgZGVmaW5lZCBiZWxvdyB0aGF0IGRvIG5vdGhpbmc7IHVzZSB0aG9zZQorICogaWYgeW91IGRvIG5vdCBzdXBwb3J0IHRoYXQgY2FsbGJhY2suCisgKi8gCisKKyNpZm5kZWYgX1BMQVRGT1JNX0hfCisjZGVmaW5lIF9QTEFURk9STV9IXworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3N0cnVjdCBwbGF0Zm9ybV90IHsKKwljaGFyCSogbmFtZTsKKwl1MzIJc3VzcGVuZF9zdGF0ZXM7CisJdm9pZAkoKnJlYm9vdCkoY2hhciAqIGNtZCk7CisJdm9pZAkoKmhhbHQpKHZvaWQpOworCXZvaWQJKCpwb3dlcl9vZmYpKHZvaWQpOworCWludAkoKnN1c3BlbmQpKGludCBzdGF0ZSwgaW50IGZsYWdzKTsKKwl2b2lkCSgqaWRsZSkodm9pZCk7Cit9OworCitleHRlcm4gc3RydWN0IHBsYXRmb3JtX3QgKiBwbGF0Zm9ybTsKK2V4dGVybiB2b2lkIGRlZmF1bHRfcmVib290KGNoYXIgKiBjbWQpOworZXh0ZXJuIHZvaWQgZGVmYXVsdF9oYWx0KHZvaWQpOworZXh0ZXJuIGludCBkZWZhdWx0X3N1c3BlbmQoaW50IHN0YXRlLCBpbnQgZmxhZ3MpOworZXh0ZXJuIHZvaWQgZGVmYXVsdF9pZGxlKHZvaWQpOworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9QTEFURk9STV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BtLmggYi9pbmNsdWRlL2xpbnV4L3BtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQyYjc2ZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvcG0uaApAQCAtMCwwICsxLDIzMyBAQAorLyoKKyAqICBwbS5oIC0gUG93ZXIgbWFuYWdlbWVudCBpbnRlcmZhY2UKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwIEFuZHJldyBIZW5yb2lkCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2lmbmRlZiBfTElOVVhfUE1fSAorI2RlZmluZSBfTElOVVhfUE1fSAorCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKworLyoKKyAqIFBvd2VyIG1hbmFnZW1lbnQgcmVxdWVzdHMuLi4gdGhlc2UgYXJlIHBhc3NlZCB0byBwbV9zZW5kX2FsbCgpIGFuZCBmcmllbmRzLgorICoKKyAqIHRoZXNlIGZ1bmN0aW9ucyBhcmUgb2xkIGFuZCBkZXByZWNhdGVkLCBzZWUgYmVsb3cuCisgKi8KK3R5cGVkZWYgaW50IF9fYml0d2lzZSBwbV9yZXF1ZXN0X3Q7CisKKyNkZWZpbmUgUE1fU1VTUEVORAkoKF9fZm9yY2UgcG1fcmVxdWVzdF90KSAxKQkvKiBlbnRlciBEMS1EMyAqLworI2RlZmluZSBQTV9SRVNVTUUJKChfX2ZvcmNlIHBtX3JlcXVlc3RfdCkgMikJLyogZW50ZXIgRDAgKi8KKworCisvKgorICogRGV2aWNlIHR5cGVzLi4uIHRoZXNlIGFyZSBwYXNzZWQgdG8gcG1fcmVnaXN0ZXIKKyAqLwordHlwZWRlZiBpbnQgX19iaXR3aXNlIHBtX2Rldl90OworCisjZGVmaW5lIFBNX1VOS05PV05fREVWCSgoX19mb3JjZSBwbV9kZXZfdCkgMCkJLyogZ2VuZXJpYyAqLworI2RlZmluZSBQTV9TWVNfREVWCSgoX19mb3JjZSBwbV9kZXZfdCkgMSkJLyogc3lzdGVtIGRldmljZSAoZmFuLCBLQiBjb250cm9sbGVyLCAuLi4pICovCisjZGVmaW5lIFBNX1BDSV9ERVYJKChfX2ZvcmNlIHBtX2Rldl90KSAyKQkvKiBQQ0kgZGV2aWNlICovCisjZGVmaW5lIFBNX1VTQl9ERVYJKChfX2ZvcmNlIHBtX2Rldl90KSAzKQkvKiBVU0IgZGV2aWNlICovCisjZGVmaW5lIFBNX1NDU0lfREVWCSgoX19mb3JjZSBwbV9kZXZfdCkgNCkJLyogU0NTSSBkZXZpY2UgKi8KKyNkZWZpbmUgUE1fSVNBX0RFVgkoKF9fZm9yY2UgcG1fZGV2X3QpIDUpCS8qIElTQSBkZXZpY2UgKi8KKyNkZWZpbmUJUE1fTVREX0RFVgkoKF9fZm9yY2UgcG1fZGV2X3QpIDYpCS8qIE1lbW9yeSBUZWNobm9sb2d5IERldmljZSAqLworCisvKgorICogU3lzdGVtIGRldmljZSBoYXJkd2FyZSBJRCAoUG5QKSB2YWx1ZXMKKyAqLworZW51bQoreworCVBNX1NZU19VTktOT1dOID0gMHgwMDAwMDAwMCwgLyogZ2VuZXJpYyAqLworCVBNX1NZU19LQkMgPQkgMHg0MWQwMDMwMywgLyoga2V5Ym9hcmQgY29udHJvbGxlciAqLworCVBNX1NZU19DT00gPQkgMHg0MWQwMDUwMCwgLyogc2VyaWFsIHBvcnQgKi8KKwlQTV9TWVNfSVJEQSA9CSAweDQxZDAwNTEwLCAvKiBJUkRBIGNvbnRyb2xsZXIgKi8KKwlQTV9TWVNfRkRDID0JIDB4NDFkMDA3MDAsIC8qIGZsb3BweSBjb250cm9sbGVyICovCisJUE1fU1lTX1ZHQSA9CSAweDQxZDAwOTAwLCAvKiBWR0EgY29udHJvbGxlciAqLworCVBNX1NZU19QQ01DSUEgPQkgMHg0MWQwMGUwMCwgLyogUENNQ0lBIGNvbnRyb2xsZXIgKi8KK307CisKKy8qCisgKiBEZXZpY2UgaWRlbnRpZmllcgorICovCisjZGVmaW5lIFBNX1BDSV9JRChkZXYpICgoZGV2KS0+YnVzLT5udW1iZXIgPDwgMTYgfCAoZGV2KS0+ZGV2Zm4pCisKKy8qCisgKiBSZXF1ZXN0IGhhbmRsZXIgY2FsbGJhY2sKKyAqLworc3RydWN0IHBtX2RldjsKKwordHlwZWRlZiBpbnQgKCpwbV9jYWxsYmFjaykoc3RydWN0IHBtX2RldiAqZGV2LCBwbV9yZXF1ZXN0X3QgcnFzdCwgdm9pZCAqZGF0YSk7CisKKy8qCisgKiBEeW5hbWljIGRldmljZSBpbmZvcm1hdGlvbgorICovCitzdHJ1Y3QgcG1fZGV2Cit7CisJcG1fZGV2X3QJIHR5cGU7CisJdW5zaWduZWQgbG9uZwkgaWQ7CisJcG1fY2FsbGJhY2sJIGNhbGxiYWNrOworCXZvaWQJCSpkYXRhOworCisJdW5zaWduZWQgbG9uZwkgZmxhZ3M7CisJdW5zaWduZWQgbG9uZwkgc3RhdGU7CisJdW5zaWduZWQgbG9uZwkgcHJldl9zdGF0ZTsKKworCXN0cnVjdCBsaXN0X2hlYWQgZW50cnk7Cit9OworCisjaWZkZWYgQ09ORklHX1BNCisKK2V4dGVybiBpbnQgcG1fYWN0aXZlOworCisjZGVmaW5lIFBNX0lTX0FDVElWRSgpIChwbV9hY3RpdmUgIT0gMCkKKworLyoKKyAqIFJlZ2lzdGVyIGEgZGV2aWNlIHdpdGggcG93ZXIgbWFuYWdlbWVudAorICovCitzdHJ1Y3QgcG1fZGV2IF9fZGVwcmVjYXRlZCAqcG1fcmVnaXN0ZXIocG1fZGV2X3QgdHlwZSwgdW5zaWduZWQgbG9uZyBpZCwgcG1fY2FsbGJhY2sgY2FsbGJhY2spOworCisvKgorICogVW5yZWdpc3RlciBhIGRldmljZSB3aXRoIHBvd2VyIG1hbmFnZW1lbnQKKyAqLwordm9pZCBfX2RlcHJlY2F0ZWQgcG1fdW5yZWdpc3RlcihzdHJ1Y3QgcG1fZGV2ICpkZXYpOworCisvKgorICogVW5yZWdpc3RlciBhbGwgZGV2aWNlcyB3aXRoIG1hdGNoaW5nIGNhbGxiYWNrCisgKi8KK3ZvaWQgX19kZXByZWNhdGVkIHBtX3VucmVnaXN0ZXJfYWxsKHBtX2NhbGxiYWNrIGNhbGxiYWNrKTsKKworLyoKKyAqIFNlbmQgYSByZXF1ZXN0IHRvIGFsbCBkZXZpY2VzCisgKi8KK2ludCBfX2RlcHJlY2F0ZWQgcG1fc2VuZF9hbGwocG1fcmVxdWVzdF90IHJxc3QsIHZvaWQgKmRhdGEpOworCisjZWxzZSAvKiBDT05GSUdfUE0gKi8KKworI2RlZmluZSBQTV9JU19BQ1RJVkUoKSAwCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBtX2RldiAqcG1fcmVnaXN0ZXIocG1fZGV2X3QgdHlwZSwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgaWQsCisJCQkJCSBwbV9jYWxsYmFjayBjYWxsYmFjaykKK3sKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBtX3VucmVnaXN0ZXIoc3RydWN0IHBtX2RldiAqZGV2KSB7fQorCitzdGF0aWMgaW5saW5lIHZvaWQgcG1fdW5yZWdpc3Rlcl9hbGwocG1fY2FsbGJhY2sgY2FsbGJhY2spIHt9CisKK3N0YXRpYyBpbmxpbmUgaW50IHBtX3NlbmRfYWxsKHBtX3JlcXVlc3RfdCBycXN0LCB2b2lkICpkYXRhKQoreworCXJldHVybiAwOworfQorCisjZW5kaWYgLyogQ09ORklHX1BNICovCisKKy8qIEZ1bmN0aW9ucyBhYm92ZSB0aGlzIGNvbW1lbnQgYXJlIGxpc3QtYmFzZWQgb2xkLXN0eWxlIHBvd2VyCisgKiBtYW5hZ21lbnQuIFBsZWFzZSBhdm9pZCB1c2luZyB0aGVtLiAgKi8KKworLyoKKyAqIENhbGxiYWNrcyBmb3IgcGxhdGZvcm0gZHJpdmVycyB0byBpbXBsZW1lbnQuCisgKi8KK2V4dGVybiB2b2lkICgqcG1faWRsZSkodm9pZCk7CitleHRlcm4gdm9pZCAoKnBtX3Bvd2VyX29mZikodm9pZCk7CisKK3R5cGVkZWYgaW50IF9fYml0d2lzZSBzdXNwZW5kX3N0YXRlX3Q7CisKKyNkZWZpbmUgUE1fU1VTUEVORF9PTgkJKChfX2ZvcmNlIHN1c3BlbmRfc3RhdGVfdCkgMCkKKyNkZWZpbmUgUE1fU1VTUEVORF9TVEFOREJZCSgoX19mb3JjZSBzdXNwZW5kX3N0YXRlX3QpIDEpCisjZGVmaW5lIFBNX1NVU1BFTkRfTUVNCQkoKF9fZm9yY2Ugc3VzcGVuZF9zdGF0ZV90KSAzKQorI2RlZmluZSBQTV9TVVNQRU5EX0RJU0sJCSgoX19mb3JjZSBzdXNwZW5kX3N0YXRlX3QpIDQpCisjZGVmaW5lIFBNX1NVU1BFTkRfTUFYCQkoKF9fZm9yY2Ugc3VzcGVuZF9zdGF0ZV90KSA1KQorCit0eXBlZGVmIGludCBfX2JpdHdpc2Ugc3VzcGVuZF9kaXNrX21ldGhvZF90OworCisjZGVmaW5lCVBNX0RJU0tfRklSTVdBUkUJKChfX2ZvcmNlIHN1c3BlbmRfZGlza19tZXRob2RfdCkgMSkKKyNkZWZpbmUJUE1fRElTS19QTEFURk9STQkoKF9fZm9yY2Ugc3VzcGVuZF9kaXNrX21ldGhvZF90KSAyKQorI2RlZmluZQlQTV9ESVNLX1NIVVRET1dOCSgoX19mb3JjZSBzdXNwZW5kX2Rpc2tfbWV0aG9kX3QpIDMpCisjZGVmaW5lCVBNX0RJU0tfUkVCT09UCQkoKF9fZm9yY2Ugc3VzcGVuZF9kaXNrX21ldGhvZF90KSA0KQorI2RlZmluZQlQTV9ESVNLX01BWAkJKChfX2ZvcmNlIHN1c3BlbmRfZGlza19tZXRob2RfdCkgNSkKKworc3RydWN0IHBtX29wcyB7CisJc3VzcGVuZF9kaXNrX21ldGhvZF90IHBtX2Rpc2tfbW9kZTsKKwlpbnQgKCpwcmVwYXJlKShzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpOworCWludCAoKmVudGVyKShzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpOworCWludCAoKmZpbmlzaCkoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKTsKK307CisKK2V4dGVybiB2b2lkIHBtX3NldF9vcHMoc3RydWN0IHBtX29wcyAqKTsKKworZXh0ZXJuIGludCBwbV9zdXNwZW5kKHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSk7CisKKworLyoKKyAqIERldmljZSBwb3dlciBtYW5hZ2VtZW50CisgKi8KKworc3RydWN0IGRldmljZTsKKwordHlwZWRlZiB1MzIgX19iaXR3aXNlIHBtX21lc3NhZ2VfdDsKKworLyoKKyAqIFRoZXJlIGFyZSA0IGltcG9ydGFudCBzdGF0ZXMgZHJpdmVyIGNhbiBiZSBpbjoKKyAqIE9OICAgICAtLSBkcml2ZXIgaXMgd29ya2luZworICogRlJFRVpFIC0tIHN0b3Agb3BlcmF0aW9ucyBhbmQgYXBwbHkgd2hhdGV2ZXIgcG9saWN5IGlzIGFwcGxpY2FibGUgdG8gYSBzdXNwZW5kZWQgZHJpdmVyCisgKiAgICAgICAgICAgb2YgdGhhdCBjbGFzcywgZnJlZXplIHF1ZXVlcyBmb3IgYmxvY2sgbGlrZSBJREUgZG9lcywgZHJvcCBwYWNrZXRzIGZvcgorICogICAgICAgICAgIGV0aGVybmV0LCBldGMuLi4gc3RvcCBETUEgZW5naW5lIHRvbyBldGMuLi4gc28gYSBjb25zaXN0ZW50IGltYWdlIGNhbiBiZQorICogICAgICAgICAgIHNhdmVkOyBidXQgZG8gbm90IHBvd2VyIGFueSBoYXJkd2FyZSBkb3duLgorICogU1VTUEVORCAtIGxpa2UgRlJFRVpFLCBidXQgaGFyZHdhcmUgaXMgZG9pbmcgYXMgbXVjaCBwb3dlcnNhdmluZyBhcyBwb3NzaWJsZS4gUm91Z2hseQorICogICAgICAgICAgIHBjaSBEMy4KKyAqCisgKiBVbmZvcnR1bmF0ZWx5LCBjdXJyZW50IGRyaXZlcnMgb25seSByZWNvZ25pemUgbnVtZXJpYyB2YWx1ZXMgMCAoT04pIGFuZCAzIChTVVNQRU5EKS4KKyAqIFdlJ2xsIG5lZWQgdG8gZml4IHRoZSBkcml2ZXJzLiBTbyB5ZXMsIHB1dHRpbmcgMyB0byBhbGwgZGlmZXJlbnQgZGVmaW5lcyBpcyBpbnRlbnRpb25hbCwKKyAqIGFuZCB3aWxsIGdvIGF3YXkgYXMgc29vbiBhcyBkcml2ZXJzIGFyZSBmaXhlZC4gQWxzbyBub3RlIHRoYXQgdHlwZWRlZiBpcyBuZWNjZXNzYXJ5LAorICogd2UnbGwgcHJvYmFibHkgd2FudCB0byBzd2l0Y2ggdG8KKyAqICAgdHlwZWRlZiBzdHJ1Y3QgcG1fbWVzc2FnZV90IHsgaW50IGV2ZW50OyBpbnQgZmxhZ3M7IH0gcG1fbWVzc2FnZV90CisgKiBvciBzb21ldGhpbmcgc2ltaWxhciBzb29uLgorICovCisKKyNkZWZpbmUgUE1TR19GUkVFWkUJKChfX2ZvcmNlIHBtX21lc3NhZ2VfdCkgMykKKyNkZWZpbmUgUE1TR19TVVNQRU5ECSgoX19mb3JjZSBwbV9tZXNzYWdlX3QpIDMpCisjZGVmaW5lIFBNU0dfT04JCSgoX19mb3JjZSBwbV9tZXNzYWdlX3QpIDApCisKK3N0cnVjdCBkZXZfcG1faW5mbyB7CisJcG1fbWVzc2FnZV90CQlwb3dlcl9zdGF0ZTsKKyNpZmRlZglDT05GSUdfUE0KKwlwbV9tZXNzYWdlX3QJCXByZXZfc3RhdGU7CisJdm9pZAkJCSogc2F2ZWRfc3RhdGU7CisJYXRvbWljX3QJCXBtX3VzZXJzOworCXN0cnVjdCBkZXZpY2UJCSogcG1fcGFyZW50OworCXN0cnVjdCBsaXN0X2hlYWQJZW50cnk7CisjZW5kaWYKK307CisKK2V4dGVybiB2b2lkIGRldmljZV9wbV9zZXRfcGFyZW50KHN0cnVjdCBkZXZpY2UgKiBkZXYsIHN0cnVjdCBkZXZpY2UgKiBwYXJlbnQpOworCitleHRlcm4gaW50IGRldmljZV9zdXNwZW5kKHBtX21lc3NhZ2VfdCBzdGF0ZSk7CitleHRlcm4gaW50IGRldmljZV9wb3dlcl9kb3duKHBtX21lc3NhZ2VfdCBzdGF0ZSk7CitleHRlcm4gdm9pZCBkZXZpY2VfcG93ZXJfdXAodm9pZCk7CitleHRlcm4gdm9pZCBkZXZpY2VfcmVzdW1lKHZvaWQpOworCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfTElOVVhfUE1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wbXUuaCBiL2luY2x1ZGUvbGludXgvcG11LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ3M2VhZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvcG11LmgKQEAgLTAsMCArMSwyNDAgQEAKKy8qCisgKiBEZWZpbml0aW9ucyBmb3IgdGFsa2luZyB0byB0aGUgUE1VLiAgVGhlIFBNVSBpcyBhIG1pY3JvY29udHJvbGxlcgorICogd2hpY2ggY29udHJvbHMgYmF0dGVyeSBjaGFyZ2luZyBhbmQgc3lzdGVtIHBvd2VyIG9uIFBvd2VyQm9vayAzNDAwCisgKiBhbmQgMjQwMCBtb2RlbHMgYXMgd2VsbCBhcyB0aGUgUlRDIGFuZCB2YXJpb3VzIG90aGVyIHRoaW5ncy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggUGF1bCBNYWNrZXJyYXMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjZGVmaW5lIFBNVV9EUklWRVJfVkVSU0lPTgkyCisKKy8qCisgKiBQTVUgY29tbWFuZHMKKyAqLworI2RlZmluZSBQTVVfUE9XRVJfQ1RSTDAJCTB4MTAJLyogY29udHJvbCBwb3dlciBvZiBzb21lIGRldmljZXMgKi8KKyNkZWZpbmUgUE1VX1BPV0VSX0NUUkwJCTB4MTEJLyogY29udHJvbCBwb3dlciBvZiBzb21lIGRldmljZXMgKi8KKyNkZWZpbmUgUE1VX0FEQl9DTUQJCTB4MjAJLyogc2VuZCBBREIgcGFja2V0ICovCisjZGVmaW5lIFBNVV9BREJfUE9MTF9PRkYJMHgyMQkvKiBkaXNhYmxlIEFEQiBhdXRvLXBvbGwgKi8KKyNkZWZpbmUgUE1VX1dSSVRFX05WUkFNCQkweDMzCS8qIHdyaXRlIG5vbi12b2xhdGlsZSBSQU0gKi8KKyNkZWZpbmUgUE1VX1JFQURfTlZSQU0JCTB4M2IJLyogcmVhZCBub24tdm9sYXRpbGUgUkFNICovCisjZGVmaW5lIFBNVV9TRVRfUlRDCQkweDMwCS8qIHNldCByZWFsLXRpbWUgY2xvY2sgKi8KKyNkZWZpbmUgUE1VX1JFQURfUlRDCQkweDM4CS8qIHJlYWQgcmVhbC10aW1lIGNsb2NrICovCisjZGVmaW5lIFBNVV9TRVRfVk9MQlVUVE9OCTB4NDAJLyogc2V0IHZvbHVtZSB1cC9kb3duIHBvc2l0aW9uICovCisjZGVmaW5lIFBNVV9CQUNLTElHSFRfQlJJR0hUCTB4NDEJLyogc2V0IGJhY2tsaWdodCBicmlnaHRuZXNzICovCisjZGVmaW5lIFBNVV9HRVRfVk9MQlVUVE9OCTB4NDgJLyogZ2V0IHZvbHVtZSB1cC9kb3duIHBvc2l0aW9uICovCisjZGVmaW5lIFBNVV9QQ0VKRUNUCQkweDRjCS8qIGVqZWN0IFBDLWNhcmQgZnJvbSBzbG90ICovCisjZGVmaW5lIFBNVV9CQVRURVJZX1NUQVRFCTB4NmIJLyogcmVwb3J0IGJhdHRlcnkgc3RhdGUgZXRjLiAqLworI2RlZmluZSBQTVVfU01BUlRfQkFUVEVSWV9TVEFURQkweDZmCS8qIHJlcG9ydCBiYXR0ZXJ5IHN0YXRlIChuZXcgd2F5KSAqLworI2RlZmluZSBQTVVfU0VUX0lOVFJfTUFTSwkweDcwCS8qIHNldCBQTVUgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgUE1VX0lOVF9BQ0sJCTB4NzgJLyogcmVhZCBpbnRlcnJ1cHQgYml0cyAqLworI2RlZmluZSBQTVVfU0hVVERPV04JCTB4N2UJLyogdHVybiBwb3dlciBvZmYgKi8KKyNkZWZpbmUgUE1VX0NQVV9TUEVFRAkJMHg3ZAkvKiBjb250cm9sIENQVSBzcGVlZCBvbiBzb21lIG1vZGVscyAqLworI2RlZmluZSBQTVVfU0xFRVAJCTB4N2YJLyogcHV0IENQVSB0byBzbGVlcCAqLworI2RlZmluZSBQTVVfUE9XRVJfRVZFTlRTCTB4OGYJLyogU2VuZCBwb3dlci1ldmVudCBjb21tYW5kcyB0byBQTVUgKi8KKyNkZWZpbmUgUE1VX0kyQ19DTUQJCTB4OWEJLyogSTJDIG9wZXJhdGlvbnMgKi8KKyNkZWZpbmUgUE1VX1JFU0VUCQkweGQwCS8qIHJlc2V0IENQVSAqLworI2RlZmluZSBQTVVfR0VUX0JSSUdIVEJVVFRPTgkweGQ5CS8qIHJlcG9ydCBicmlnaHRuZXNzIHVwL2Rvd24gcG9zICovCisjZGVmaW5lIFBNVV9HRVRfQ09WRVIJCTB4ZGMJLyogcmVwb3J0IGNvdmVyIG9wZW4vY2xvc2VkICovCisjZGVmaW5lIFBNVV9TWVNURU1fUkVBRFkJMHhkZgkvKiB0ZWxsIFBNVSB3ZSBhcmUgYXdha2UgKi8KKyNkZWZpbmUgUE1VX0dFVF9WRVJTSU9OCQkweGVhCS8qIHJlYWQgdGhlIFBNVSB2ZXJzaW9uICovCisKKy8qIEJpdHMgdG8gdXNlIHdpdGggdGhlIFBNVV9QT1dFUl9DVFJMMCBjb21tYW5kICovCisjZGVmaW5lIFBNVV9QT1cwX09OCQkweDgwCS8qIE9SIHRoaXMgdG8gcG93ZXIgT04gdGhlIGRldmljZSAqLworI2RlZmluZSBQTVVfUE9XMF9PRkYJCTB4MDAJLyogbGVhdmUgYml0IDcgdG8gMCB0byBwb3dlciBpdCBPRkYgKi8KKyNkZWZpbmUgUE1VX1BPVzBfSEFSRF9EUklWRQkweDA0CS8qIEhhcmQgZHJpdmUgcG93ZXIgKG9uIHdhbGxzdHJlZXQvbG9tYmFyZCA/KSAqLworCisvKiBCaXRzIHRvIHVzZSB3aXRoIHRoZSBQTVVfUE9XRVJfQ1RSTCBjb21tYW5kICovCisjZGVmaW5lIFBNVV9QT1dfT04JCTB4ODAJLyogT1IgdGhpcyB0byBwb3dlciBPTiB0aGUgZGV2aWNlICovCisjZGVmaW5lIFBNVV9QT1dfT0ZGCQkweDAwCS8qIGxlYXZlIGJpdCA3IHRvIDAgdG8gcG93ZXIgaXQgT0ZGICovCisjZGVmaW5lIFBNVV9QT1dfQkFDS0xJR0hUCTB4MDEJLyogYmFja2xpZ2h0IHBvd2VyICovCisjZGVmaW5lIFBNVV9QT1dfQ0hBUkdFUgkJMHgwMgkvKiBiYXR0ZXJ5IGNoYXJnZXIgcG93ZXIgKi8KKyNkZWZpbmUgUE1VX1BPV19JUkxFRAkJMHgwNAkvKiBJUiBsZWQgcG93ZXIgKG9uIHdhbGxzdHJlZXQpICovCisjZGVmaW5lIFBNVV9QT1dfTUVESUFCQVkJMHgwOAkvKiBtZWRpYSBiYXkgcG93ZXIgKHdhbGxzdHJlZXQvbG9tYmFyZCA/KSAqLworCisvKiBCaXRzIGluIFBNVSBpbnRlcnJ1cHQgYW5kIGludGVycnVwdCBtYXNrIGJ5dGVzICovCisjZGVmaW5lIFBNVV9JTlRfUENFSkVDVAkJMHgwNAkvKiBQQy1jYXJkIGVqZWN0IGJ1dHRvbnMgKi8KKyNkZWZpbmUgUE1VX0lOVF9TTkRCUlQJCTB4MDgJLyogc291bmQvYnJpZ2h0bmVzcyB1cC9kb3duIGJ1dHRvbnMgKi8KKyNkZWZpbmUgUE1VX0lOVF9BREIJCTB4MTAJLyogQURCIGF1dG9wb2xsIG9yIHJlcGx5IGRhdGEgKi8KKyNkZWZpbmUgUE1VX0lOVF9CQVRURVJZCQkweDIwCS8qIEJhdHRlcnkgc3RhdGUgY2hhbmdlICovCisjZGVmaW5lIFBNVV9JTlRfRU5WSVJPTk1FTlQJMHg0MAkvKiBFbnZpcm9ubWVudCBpbnRlcnJ1cHRzICovCisjZGVmaW5lIFBNVV9JTlRfVElDSwkJMHg4MAkvKiAxLXNlY29uZCB0aWNrIGludGVycnVwdCAqLworCisvKiBPdGhlciBiaXRzIGluIFBNVSBpbnRlcnJ1cHQgdmFsaWQgd2hlbiBQTVVfSU5UX0FEQiBpcyBzZXQgKi8KKyNkZWZpbmUgUE1VX0lOVF9BREJfQVVUTwkweDA0CS8qIEFEQiBhdXRvcG9sbCwgd2hlbiBQTVVfSU5UX0FEQiAqLworI2RlZmluZSBQTVVfSU5UX1dBSVRJTkdfQ0hBUkdFUgkweDAxCS8qID8/PyAqLworI2RlZmluZSBQTVVfSU5UX0FVVE9fU1JRX1BPTEwJMHgwMgkvKiA/Pz8gKi8KKworLyogQml0cyBpbiB0aGUgZW52aXJvbmVtZW50IG1lc3NhZ2UgKGVpdGhlciBvYnRhaW5lZCB2aWEgUE1VX0dFVF9DT1ZFUiwKKyAqIG9yIHZpYSBQTVVfSU5UX0VOVklST05NRU5UIG9uIGNvcmU5OSAqLworI2RlZmluZSBQTVVfRU5WX0xJRF9DTE9TRUQJMHgwMQkvKiBUaGUgbGlkIGlzIGNsb3NlZCAqLworCisvKiBJMkMgcmVsYXRlZCBkZWZpbml0aW9ucyAqLworI2RlZmluZSBQTVVfSTJDX01PREVfU0lNUExFCTAKKyNkZWZpbmUgUE1VX0kyQ19NT0RFX1NURFNVQgkxCisjZGVmaW5lIFBNVV9JMkNfTU9ERV9DT01CSU5FRAkyCisKKyNkZWZpbmUgUE1VX0kyQ19CVVNfU1RBVFVTCTAKKyNkZWZpbmUgUE1VX0kyQ19CVVNfU1lTQ0xLCTEKKyNkZWZpbmUgUE1VX0kyQ19CVVNfUE9XRVIJMgorCisjZGVmaW5lIFBNVV9JMkNfU1RBVFVTX09LCTAKKyNkZWZpbmUgUE1VX0kyQ19TVEFUVVNfREFUQVJFQUQJMQorI2RlZmluZSBQTVVfSTJDX1NUQVRVU19CVVNZCTB4ZmUKKworCisvKiBLaW5kIG9mIFBNVSAobW9kZWwpICovCitlbnVtIHsKKwlQTVVfVU5LTk9XTiwKKwlQTVVfT0hBUkVfQkFTRUQsCS8qIDI0MDAsIDM0MDAsIDM1MDAgKG9sZCBHMyBwb3dlcmJvb2spICovCisJUE1VX0hFQVRIUk9XX0JBU0VELAkvKiBQb3dlckJvb2sgRzMgc2VyaWVzICovCisJUE1VX1BBRERJTkdUT05fQkFTRUQsCS8qIDE5OTkgUG93ZXJCb29rIEczICovCisJUE1VX0tFWUxBUkdPX0JBU0VELAkvKiBDb3JlOTkgbW90aGVyYm9hcmQgKFBNVTk5KSAqLworCVBNVV82OEtfVjEsCQkvKiA2OEsgUE1VLCB2ZXJzaW9uIDEgKi8KKwlQTVVfNjhLX1YyLCAJCS8qIDY4SyBQTVUsIHZlcnNpb24gMiAqLworfTsKKworLyogUE1VIFBNVV9QT1dFUl9FVkVOVFMgY29tbWFuZHMgKi8KK2VudW0geworCVBNVV9QV1JfR0VUX1BPV0VSVVBfRVZFTlRTCT0gMHgwMCwKKwlQTVVfUFdSX1NFVF9QT1dFUlVQX0VWRU5UUwk9IDB4MDEsCisJUE1VX1BXUl9DTFJfUE9XRVJVUF9FVkVOVFMJPSAweDAyLAorCVBNVV9QV1JfR0VUX1dBS0VVUF9FVkVOVFMJPSAweDAzLAorCVBNVV9QV1JfU0VUX1dBS0VVUF9FVkVOVFMJPSAweDA0LAorCVBNVV9QV1JfQ0xSX1dBS0VVUF9FVkVOVFMJPSAweDA1LAorfTsKKworLyogUG93ZXIgZXZlbnRzIHdha2V1cCBiaXRzICovCitlbnVtIHsKKwlQTVVfUFdSX1dBS0VVUF9LRVkJCT0gMHgwMSwJLyogV2FrZSBvbiBrZXkgcHJlc3MgKi8KKwlQTVVfUFdSX1dBS0VVUF9BQ19JTlNFUlQJPSAweDAyLCAvKiBXYWtlIG9uIEFDIGFkYXB0ZXIgcGx1ZyAqLworCVBNVV9QV1JfV0FLRVVQX0FDX0NIQU5HRQk9IDB4MDQsCisJUE1VX1BXUl9XQUtFVVBfTElEX09QRU4JCT0gMHgwOCwKKwlQTVVfUFdSX1dBS0VVUF9SSU5HCQk9IDB4MTAsCit9OworCQorLyoKKyAqIElvY3RsIGNvbW1hbmRzIGZvciB0aGUgL2Rldi9wbXUgZGV2aWNlCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorCisvKiBubyBwYXJhbSAqLworI2RlZmluZSBQTVVfSU9DX1NMRUVQCQlfSU8oJ0InLCAwKQorLyogb3V0IHBhcmFtOiB1MzIqCWJhY2tsaWdodCB2YWx1ZTogMCB0byAxNSAqLworI2RlZmluZSBQTVVfSU9DX0dFVF9CQUNLTElHSFQJX0lPUignQicsIDEsIHNpemVfdCkKKy8qIGluIHBhcmFtOiB1MzIJYmFja2xpZ2h0IHZhbHVlOiAwIHRvIDE1ICovCisjZGVmaW5lIFBNVV9JT0NfU0VUX0JBQ0tMSUdIVAlfSU9XKCdCJywgMiwgc2l6ZV90KQorLyogb3V0IHBhcmFtOiB1MzIqCVBNVSBtb2RlbCAqLworI2RlZmluZSBQTVVfSU9DX0dFVF9NT0RFTAlfSU9SKCdCJywgMywgc2l6ZV90KQorLyogb3V0IHBhcmFtOiB1MzIqCWhhc19hZGI6IDAgb3IgMSAqLworI2RlZmluZSBQTVVfSU9DX0hBU19BREIJCV9JT1IoJ0InLCA0LCBzaXplX3QpIAorLyogb3V0IHBhcmFtOiB1MzIqCWNhbl9zbGVlcDogMCBvciAxICovCisjZGVmaW5lIFBNVV9JT0NfQ0FOX1NMRUVQCV9JT1IoJ0InLCA1LCBzaXplX3QpIAorLyogbm8gcGFyYW0sIGJ1dCBoaXN0b3JpY2FsbHkgd2FzIF9JT1IoJ0InLCA2LCAwKSwgbWVhbmluZyA0IGJ5dGVzICovCisjZGVmaW5lIFBNVV9JT0NfR1JBQl9CQUNLTElHSFQJX0lPUignQicsIDYsIHNpemVfdCkgCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKK2V4dGVybiBpbnQgZmluZF92aWFfcG11KHZvaWQpOworCitleHRlcm4gaW50IHBtdV9yZXF1ZXN0KHN0cnVjdCBhZGJfcmVxdWVzdCAqcmVxLAorCQl2b2lkICgqZG9uZSkoc3RydWN0IGFkYl9yZXF1ZXN0ICopLCBpbnQgbmJ5dGVzLCAuLi4pOworCitleHRlcm4gdm9pZCBwbXVfcG9sbCh2b2lkKTsKK2V4dGVybiB2b2lkIHBtdV9wb2xsX2FkYih2b2lkKTsgLyogRm9yIHVzZSBieSB4bW9uICovCitleHRlcm4gdm9pZCBwbXVfd2FpdF9jb21wbGV0ZShzdHJ1Y3QgYWRiX3JlcXVlc3QgKnJlcSk7CisKKy8qIEZvciB1c2UgYmVmb3JlIHN3aXRjaGluZyBpbnRlcnJ1cHRzIG9mZiBmb3IgYSBsb25nIHRpbWU7CisgKiB3YXJuaW5nOiBub3Qgc3RhY2thYmxlCisgKi8KK2V4dGVybiB2b2lkIHBtdV9zdXNwZW5kKHZvaWQpOworZXh0ZXJuIHZvaWQgcG11X3Jlc3VtZSh2b2lkKTsKKworZXh0ZXJuIHZvaWQgcG11X2VuYWJsZV9pcmxlZChpbnQgb24pOworCitleHRlcm4gdm9pZCBwbXVfcmVzdGFydCh2b2lkKTsKK2V4dGVybiB2b2lkIHBtdV9zaHV0ZG93bih2b2lkKTsKK2V4dGVybiB2b2lkIHBtdV91bmxvY2sodm9pZCk7CisKK2V4dGVybiBpbnQgcG11X3ByZXNlbnQodm9pZCk7CitleHRlcm4gaW50IHBtdV9nZXRfbW9kZWwodm9pZCk7CisKK2V4dGVybiBpbnQgcG11X2kyY19jb21iaW5lZF9yZWFkKGludCBidXMsIGludCBhZGRyLCBpbnQgc3ViYWRkciwgIHU4KiBkYXRhLCBpbnQgbGVuKTsKK2V4dGVybiBpbnQgcG11X2kyY19zdGRzdWJfd3JpdGUoaW50IGJ1cywgaW50IGFkZHIsIGludCBzdWJhZGRyLCAgdTgqIGRhdGEsIGludCBsZW4pOworZXh0ZXJuIGludCBwbXVfaTJjX3NpbXBsZV9yZWFkKGludCBidXMsIGludCBhZGRyLCAgdTgqIGRhdGEsIGludCBsZW4pOworZXh0ZXJuIGludCBwbXVfaTJjX3NpbXBsZV93cml0ZShpbnQgYnVzLCBpbnQgYWRkciwgIHU4KiBkYXRhLCBpbnQgbGVuKTsKKworCisjaWZkZWYgQ09ORklHX1BNQUNfUEJPT0sKKy8qCisgKiBTdHVmZiBmb3IgcHV0dGluZyB0aGUgcG93ZXJib29rIHRvIHNsZWVwIGFuZCB3YWtpbmcgaXQgYWdhaW4uCisgKgorICovCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorCitzdHJ1Y3QgcG11X3NsZWVwX25vdGlmaWVyCit7CisJaW50ICgqbm90aWZpZXJfY2FsbCkoc3RydWN0IHBtdV9zbGVlcF9ub3RpZmllciAqc2VsZiwgaW50IHdoZW4pOworCWludCBwcmlvcml0eTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Cit9OworCisvKiBDb2RlIHZhbHVlcyBmb3IgY2FsbGluZyBzbGVlcC93YWtldXAgaGFuZGxlcnMKKyAqCisgKiBOb3RlOiBJZiBhIHNsZWVwIHJlcXVlc3QgZ290IGNhbmNlbGxlZCwgYWxsIGRyaXZlcnMgd2lsbCBnZXQKKyAqIHRoZSBQQk9PS19TTEVFUF9SRUpFQ1QsIGV2ZW4gdGhvc2Ugd2hvIGRpZG4ndCBnZXQgdGhlIFBCT09LX1NMRUVQX1JFUVVFU1QuCisgKi8KKyNkZWZpbmUgUEJPT0tfU0xFRVBfUkVRVUVTVAkxCisjZGVmaW5lIFBCT09LX1NMRUVQX05PVwkJMgorI2RlZmluZSBQQk9PS19TTEVFUF9SRUpFQ1QJMworI2RlZmluZSBQQk9PS19XQUtFCQk0CisKKy8qIFJlc3VsdCBjb2RlcyByZXR1cm5lZCBieSB0aGUgbm90aWZpZXJzICovCisjZGVmaW5lIFBCT09LX1NMRUVQX09LCQkwCisjZGVmaW5lIFBCT09LX1NMRUVQX1JFRlVTRQktMQorCisvKiBwcmlvcml0eSBsZXZlbHMgaW4gbm90aWZpZXJzICovCisjZGVmaW5lIFNMRUVQX0xFVkVMX1ZJREVPCTEwMAkvKiBWaWRlbyBkcml2ZXIgKGZpcnN0IHdha2UpICovCisjZGVmaW5lIFNMRUVQX0xFVkVMX01FRElBQkFZCTkwCS8qIE1lZGlhIGJheSBkcml2ZXIgKi8KKyNkZWZpbmUgU0xFRVBfTEVWRUxfQkxPQ0sJODAJLyogSURFLCBTQ1NJICovCisjZGVmaW5lIFNMRUVQX0xFVkVMX05FVAkJNzAJLyogYm1hYywgZ21hYyAqLworI2RlZmluZSBTTEVFUF9MRVZFTF9NSVNDCTYwCS8qIEFueXRoaW5nIGVsc2UgKi8KKyNkZWZpbmUgU0xFRVBfTEVWRUxfVVNFUkxBTkQJNTUJLyogUmVzZXJ2ZWQgZm9yIGFwbV9lbXUgKi8KKyNkZWZpbmUgU0xFRVBfTEVWRUxfQURCCQk1MAkvKiBBREIgKGFzeW5jKSAqLworI2RlZmluZSBTTEVFUF9MRVZFTF9TT1VORAk0MAkvKiBTb3VuZCBkcml2ZXIgKGJsb2NraW5nKSAqLworCisvKiBzcGVjaWFsIHJlZ2lzdGVyIG5vdGlmaWVyIGZ1bmN0aW9ucyAqLworaW50IHBtdV9yZWdpc3Rlcl9zbGVlcF9ub3RpZmllcihzdHJ1Y3QgcG11X3NsZWVwX25vdGlmaWVyKiBub3RpZmllcik7CitpbnQgcG11X3VucmVnaXN0ZXJfc2xlZXBfbm90aWZpZXIoc3RydWN0IHBtdV9zbGVlcF9ub3RpZmllciogbm90aWZpZXIpOworCisjZGVmaW5lIFBNVV9NQVhfQkFUVEVSSUVTCTIKKworLyogdmFsdWVzIGZvciBwbXVfcG93ZXJfZmxhZ3MgKi8KKyNkZWZpbmUgUE1VX1BXUl9BQ19QUkVTRU5UCTB4MDAwMDAwMDEKKworLyogdmFsdWVzIGZvciBwbXVfYmF0dGVyeV9pbmZvLmZsYWdzICovCisjZGVmaW5lIFBNVV9CQVRUX1BSRVNFTlQJMHgwMDAwMDAwMQorI2RlZmluZSBQTVVfQkFUVF9DSEFSR0lORwkweDAwMDAwMDAyCisjZGVmaW5lIFBNVV9CQVRUX1RZUEVfTUFTSwkweDAwMDAwMGYwCisjZGVmaW5lIFBNVV9CQVRUX1RZUEVfU01BUlQJMHgwMDAwMDAxMCAvKiBTbWFydCBiYXR0ZXJ5ICovCisjZGVmaW5lIFBNVV9CQVRUX1RZUEVfSE9PUEVSCTB4MDAwMDAwMjAgLyogMzQwMC8zNTAwICovCisjZGVmaW5lIFBNVV9CQVRUX1RZUEVfQ09NRVQJMHgwMDAwMDAzMCAvKiAyNDAwICovCisKK3N0cnVjdCBwbXVfYmF0dGVyeV9pbmZvCit7CisJdW5zaWduZWQgaW50CWZsYWdzOworCXVuc2lnbmVkIGludAljaGFyZ2U7CQkvKiBjdXJyZW50IGNoYXJnZSAqLworCXVuc2lnbmVkIGludAltYXhfY2hhcmdlOwkvKiBtYXhpbXVtIGNoYXJnZSAqLworCXNpZ25lZCBpbnQJYW1wZXJhZ2U7CS8qIGN1cnJlbnQsIHBvc2l0aXZlIGlmIGNoYXJnaW5nICovCisJdW5zaWduZWQgaW50CXZvbHRhZ2U7CS8qIHZvbHRhZ2UgKi8KKwl1bnNpZ25lZCBpbnQJdGltZV9yZW1haW5pbmc7CS8qIHJlbWFpbmluZyB0aW1lICovCit9OworCitleHRlcm4gaW50IHBtdV9iYXR0ZXJ5X2NvdW50OworZXh0ZXJuIHN0cnVjdCBwbXVfYmF0dGVyeV9pbmZvIHBtdV9iYXR0ZXJpZXNbUE1VX01BWF9CQVRURVJJRVNdOworZXh0ZXJuIHVuc2lnbmVkIGludCBwbXVfcG93ZXJfZmxhZ3M7CisKKyNlbmRpZiAvKiBDT05GSUdfUE1BQ19QQk9PSyAqLworCisjZW5kaWYJLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wbnAuaCBiL2luY2x1ZGUvbGludXgvcG5wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVjMmJkMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvcG5wLmgKQEAgLTAsMCArMSw0NTQgQEAKKy8qCisgKiBMaW51eCBQbHVnIGFuZCBQbGF5IFN1cHBvcnQKKyAqIENvcHlyaWdodCBieSBBZGFtIEJlbGF5IDxhbWJ4MUBuZW8ucnIuY29tPgorICoKKyAqLworCisjaWZuZGVmIF9MSU5VWF9QTlBfSAorI2RlZmluZSBfTElOVVhfUE5QX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZF9kZXZpY2V0YWJsZS5oPgorCisjZGVmaW5lIFBOUF9NQVhfUE9SVAkJOAorI2RlZmluZSBQTlBfTUFYX01FTQkJNAorI2RlZmluZSBQTlBfTUFYX0lSUQkJMgorI2RlZmluZSBQTlBfTUFYX0RNQQkJMgorI2RlZmluZSBQTlBfTkFNRV9MRU4JCTUwCisKK3N0cnVjdCBwbnBfcHJvdG9jb2w7CitzdHJ1Y3QgcG5wX2RldjsKKworCisvKgorICogUmVzb3VyY2UgTWFuYWdlbWVudAorICovCisKKy8qIFVzZSB0aGVzZSBpbnN0ZWFkIG9mIGRpcmVjdGx5IHJlYWRpbmcgcG5wX2RldiB0byBnZXQgcmVzb3VyY2UgaW5mb3JtYXRpb24gKi8KKyNkZWZpbmUgcG5wX3BvcnRfc3RhcnQoZGV2LGJhcikgICAoKGRldiktPnJlcy5wb3J0X3Jlc291cmNlWyhiYXIpXS5zdGFydCkKKyNkZWZpbmUgcG5wX3BvcnRfZW5kKGRldixiYXIpICAgICAoKGRldiktPnJlcy5wb3J0X3Jlc291cmNlWyhiYXIpXS5lbmQpCisjZGVmaW5lIHBucF9wb3J0X2ZsYWdzKGRldixiYXIpICAgKChkZXYpLT5yZXMucG9ydF9yZXNvdXJjZVsoYmFyKV0uZmxhZ3MpCisjZGVmaW5lIHBucF9wb3J0X3ZhbGlkKGRldixiYXIpIFwKKwkoKHBucF9wb3J0X2ZsYWdzKChkZXYpLChiYXIpKSAmIChJT1JFU09VUkNFX0lPIHwgSU9SRVNPVVJDRV9VTlNFVCkpIFwKKwkJPT0gSU9SRVNPVVJDRV9JTykKKyNkZWZpbmUgcG5wX3BvcnRfbGVuKGRldixiYXIpIFwKKwkoKHBucF9wb3J0X3N0YXJ0KChkZXYpLChiYXIpKSA9PSAwICYmCVwKKwkgIHBucF9wb3J0X2VuZCgoZGV2KSwoYmFyKSkgPT0JCVwKKwkgIHBucF9wb3J0X3N0YXJ0KChkZXYpLChiYXIpKSkgPyAwIDoJXAorCSAgCQkJCQlcCisJIChwbnBfcG9ydF9lbmQoKGRldiksKGJhcikpIC0JCVwKKwkgIHBucF9wb3J0X3N0YXJ0KChkZXYpLChiYXIpKSArIDEpKQorCisjZGVmaW5lIHBucF9tZW1fc3RhcnQoZGV2LGJhcikgICAoKGRldiktPnJlcy5tZW1fcmVzb3VyY2VbKGJhcildLnN0YXJ0KQorI2RlZmluZSBwbnBfbWVtX2VuZChkZXYsYmFyKSAgICAgKChkZXYpLT5yZXMubWVtX3Jlc291cmNlWyhiYXIpXS5lbmQpCisjZGVmaW5lIHBucF9tZW1fZmxhZ3MoZGV2LGJhcikgICAoKGRldiktPnJlcy5tZW1fcmVzb3VyY2VbKGJhcildLmZsYWdzKQorI2RlZmluZSBwbnBfbWVtX3ZhbGlkKGRldixiYXIpIFwKKwkoKHBucF9tZW1fZmxhZ3MoKGRldiksKGJhcikpICYgKElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9VTlNFVCkpIFwKKwkJPT0gSU9SRVNPVVJDRV9NRU0pCisjZGVmaW5lIHBucF9tZW1fbGVuKGRldixiYXIpIFwKKwkoKHBucF9tZW1fc3RhcnQoKGRldiksKGJhcikpID09IDAgJiYJXAorCSAgcG5wX21lbV9lbmQoKGRldiksKGJhcikpID09CQlcCisJICBwbnBfbWVtX3N0YXJ0KChkZXYpLChiYXIpKSkgPyAwIDoJXAorCSAgCQkJCQlcCisJIChwbnBfbWVtX2VuZCgoZGV2KSwoYmFyKSkgLQkJXAorCSAgcG5wX21lbV9zdGFydCgoZGV2KSwoYmFyKSkgKyAxKSkKKworI2RlZmluZSBwbnBfaXJxKGRldixiYXIpCSAoKGRldiktPnJlcy5pcnFfcmVzb3VyY2VbKGJhcildLnN0YXJ0KQorI2RlZmluZSBwbnBfaXJxX2ZsYWdzKGRldixiYXIpCSAoKGRldiktPnJlcy5pcnFfcmVzb3VyY2VbKGJhcildLmZsYWdzKQorI2RlZmluZSBwbnBfaXJxX3ZhbGlkKGRldixiYXIpIFwKKwkoKHBucF9pcnFfZmxhZ3MoKGRldiksKGJhcikpICYgKElPUkVTT1VSQ0VfSVJRIHwgSU9SRVNPVVJDRV9VTlNFVCkpIFwKKwkJPT0gSU9SRVNPVVJDRV9JUlEpCisKKyNkZWZpbmUgcG5wX2RtYShkZXYsYmFyKQkgKChkZXYpLT5yZXMuZG1hX3Jlc291cmNlWyhiYXIpXS5zdGFydCkKKyNkZWZpbmUgcG5wX2RtYV9mbGFncyhkZXYsYmFyKQkgKChkZXYpLT5yZXMuZG1hX3Jlc291cmNlWyhiYXIpXS5mbGFncykKKyNkZWZpbmUgcG5wX2RtYV92YWxpZChkZXYsYmFyKSBcCisJKChwbnBfZG1hX2ZsYWdzKChkZXYpLChiYXIpKSAmIChJT1JFU09VUkNFX0RNQSB8IElPUkVTT1VSQ0VfVU5TRVQpKSBcCisJCT09IElPUkVTT1VSQ0VfRE1BKQorCisjZGVmaW5lIFBOUF9QT1JUX0ZMQUdfMTZCSVRBRERSCSgxPDwwKQorI2RlZmluZSBQTlBfUE9SVF9GTEFHX0ZJWEVECSgxPDwxKQorCitzdHJ1Y3QgcG5wX3BvcnQgeworCXVuc2lnbmVkIHNob3J0IG1pbjsJCS8qIG1pbiBiYXNlIG51bWJlciAqLworCXVuc2lnbmVkIHNob3J0IG1heDsJCS8qIG1heCBiYXNlIG51bWJlciAqLworCXVuc2lnbmVkIGNoYXIgYWxpZ247CQkvKiBhbGlnbiBib3VuZGFyeSAqLworCXVuc2lnbmVkIGNoYXIgc2l6ZTsJCS8qIHNpemUgb2YgcmFuZ2UgKi8KKwl1bnNpZ25lZCBjaGFyIGZsYWdzOwkJLyogcG9ydCBmbGFncyAqLworCXVuc2lnbmVkIGNoYXIgcGFkOwkJLyogcGFkICovCisJc3RydWN0IHBucF9wb3J0ICpuZXh0OwkJLyogbmV4dCBwb3J0ICovCit9OworCisjZGVmaW5lIFBOUF9JUlFfTlIgMjU2CitzdHJ1Y3QgcG5wX2lycSB7CisJREVDTEFSRV9CSVRNQVAobWFwLCBQTlBfSVJRX05SKTsgLyogYml0bWFrcyBmb3IgSVJRIGxpbmVzICovCisJdW5zaWduZWQgY2hhciBmbGFnczsJCS8qIElSUSBmbGFncyAqLworCXVuc2lnbmVkIGNoYXIgcGFkOwkJLyogcGFkICovCisJc3RydWN0IHBucF9pcnEgKm5leHQ7CQkvKiBuZXh0IElSUSAqLworfTsKKworc3RydWN0IHBucF9kbWEgeworCXVuc2lnbmVkIGNoYXIgbWFwOwkJLyogYml0bWFzayBmb3IgRE1BIGNoYW5uZWxzICovCisJdW5zaWduZWQgY2hhciBmbGFnczsJCS8qIERNQSBmbGFncyAqLworCXN0cnVjdCBwbnBfZG1hICpuZXh0OwkJLyogbmV4dCBwb3J0ICovCit9OworCitzdHJ1Y3QgcG5wX21lbSB7CisJdW5zaWduZWQgaW50IG1pbjsJCS8qIG1pbiBiYXNlIG51bWJlciAqLworCXVuc2lnbmVkIGludCBtYXg7CQkvKiBtYXggYmFzZSBudW1iZXIgKi8KKwl1bnNpZ25lZCBpbnQgYWxpZ247CQkvKiBhbGlnbiBib3VuZGFyeSAqLworCXVuc2lnbmVkIGludCBzaXplOwkJLyogc2l6ZSBvZiByYW5nZSAqLworCXVuc2lnbmVkIGNoYXIgZmxhZ3M7CQkvKiBtZW1vcnkgZmxhZ3MgKi8KKwl1bnNpZ25lZCBjaGFyIHBhZDsJCS8qIHBhZCAqLworCXN0cnVjdCBwbnBfbWVtICpuZXh0OwkJLyogbmV4dCBtZW1vcnkgcmVzb3VyY2UgKi8KK307CisKKyNkZWZpbmUgUE5QX1JFU19QUklPUklUWV9QUkVGRVJSRUQJMAorI2RlZmluZSBQTlBfUkVTX1BSSU9SSVRZX0FDQ0VQVEFCTEUJMQorI2RlZmluZSBQTlBfUkVTX1BSSU9SSVRZX0ZVTkNUSU9OQUwJMgorI2RlZmluZSBQTlBfUkVTX1BSSU9SSVRZX0lOVkFMSUQJNjU1MzUKKworc3RydWN0IHBucF9vcHRpb24geworCXVuc2lnbmVkIHNob3J0IHByaW9yaXR5OwkvKiBwcmlvcml0eSAqLworCXN0cnVjdCBwbnBfcG9ydCAqcG9ydDsJCS8qIGZpcnN0IHBvcnQgKi8KKwlzdHJ1Y3QgcG5wX2lycSAqaXJxOwkJLyogZmlyc3QgSVJRICovCisJc3RydWN0IHBucF9kbWEgKmRtYTsJCS8qIGZpcnN0IERNQSAqLworCXN0cnVjdCBwbnBfbWVtICptZW07CQkvKiBmaXJzdCBtZW1vcnkgcmVzb3VyY2UgKi8KKwlzdHJ1Y3QgcG5wX29wdGlvbiAqbmV4dDsJLyogdXNlZCB0byBjaGFpbiBkZXBlbmRlbnQgcmVzb3VyY2VzICovCit9OworCitzdHJ1Y3QgcG5wX3Jlc291cmNlX3RhYmxlIHsKKwlzdHJ1Y3QgcmVzb3VyY2UgcG9ydF9yZXNvdXJjZVtQTlBfTUFYX1BPUlRdOworCXN0cnVjdCByZXNvdXJjZSBtZW1fcmVzb3VyY2VbUE5QX01BWF9NRU1dOworCXN0cnVjdCByZXNvdXJjZSBkbWFfcmVzb3VyY2VbUE5QX01BWF9ETUFdOworCXN0cnVjdCByZXNvdXJjZSBpcnFfcmVzb3VyY2VbUE5QX01BWF9JUlFdOworfTsKKworCisvKgorICogRGV2aWNlIE1hbmFnZW1udAorICovCisKK3N0cnVjdCBwbnBfY2FyZCB7CisJc3RydWN0IGRldmljZSBkZXY7CQkvKiBEcml2ZXIgTW9kZWwgZGV2aWNlIGludGVyZmFjZSAqLworCXVuc2lnbmVkIGNoYXIgbnVtYmVyOwkJLyogdXNlZCBhcyBhbiBpbmRleCwgbXVzdCBiZSB1bmlxdWUgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGdsb2JhbF9saXN0OwkvKiBub2RlIGluIGdsb2JhbCBsaXN0IG9mIGNhcmRzICovCisJc3RydWN0IGxpc3RfaGVhZCBwcm90b2NvbF9saXN0OwkvKiBub2RlIGluIHByb3RvY29sJ3MgbGlzdCBvZiBjYXJkcyAqLworCXN0cnVjdCBsaXN0X2hlYWQgZGV2aWNlczsJLyogZGV2aWNlcyBhdHRhY2hlZCB0byB0aGUgY2FyZCAqLworCisJc3RydWN0IHBucF9wcm90b2NvbCAqIHByb3RvY29sOworCXN0cnVjdCBwbnBfaWQgKiBpZDsJCS8qIGNvbnRhaW5zIHN1cHBvcnRlZCBFSVNBIElEcyovCisKKwljaGFyIG5hbWVbUE5QX05BTUVfTEVOXTsJLyogY29udGFpbnMgYSBodW1hbi1yZWFkYWJsZSBuYW1lICovCisJdW5zaWduZWQgY2hhcglwbnB2ZXI7CQkvKiBQbHVnICYgUGxheSB2ZXJzaW9uICovCisJdW5zaWduZWQgY2hhcglwcm9kdWN0dmVyOwkvKiBwcm9kdWN0IHZlcnNpb24gKi8KKwl1bnNpZ25lZCBpbnQJc2VyaWFsOwkJLyogc2VyaWFsIG51bWJlciAqLworCXVuc2lnbmVkIGNoYXIJY2hlY2tzdW07CS8qIGlmIHplcm8gLSBjaGVja3N1bSBwYXNzZWQgKi8KKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NkaXI7CS8qIGRpcmVjdG9yeSBlbnRyeSBpbiAvcHJvYy9idXMvaXNhcG5wICovCit9OworCisjZGVmaW5lIGdsb2JhbF90b19wbnBfY2FyZChuKSBsaXN0X2VudHJ5KG4sIHN0cnVjdCBwbnBfY2FyZCwgZ2xvYmFsX2xpc3QpCisjZGVmaW5lIHByb3RvY29sX3RvX3BucF9jYXJkKG4pIGxpc3RfZW50cnkobiwgc3RydWN0IHBucF9jYXJkLCBwcm90b2NvbF9saXN0KQorI2RlZmluZSB0b19wbnBfY2FyZChuKSBjb250YWluZXJfb2Yobiwgc3RydWN0IHBucF9jYXJkLCBkZXYpCisjZGVmaW5lIHBucF9mb3JfZWFjaF9jYXJkKGNhcmQpIFwKKwlmb3IoKGNhcmQpID0gZ2xvYmFsX3RvX3BucF9jYXJkKHBucF9jYXJkcy5uZXh0KTsgXAorCShjYXJkKSAhPSBnbG9iYWxfdG9fcG5wX2NhcmQoJnBucF9jYXJkcyk7IFwKKwkoY2FyZCkgPSBnbG9iYWxfdG9fcG5wX2NhcmQoKGNhcmQpLT5nbG9iYWxfbGlzdC5uZXh0KSkKKworc3RydWN0IHBucF9jYXJkX2xpbmsgeworCXN0cnVjdCBwbnBfY2FyZCAqIGNhcmQ7CisJc3RydWN0IHBucF9jYXJkX2RyaXZlciAqIGRyaXZlcjsKKwl2b2lkICogZHJpdmVyX2RhdGE7Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgKnBucF9nZXRfY2FyZF9kcnZkYXRhIChzdHJ1Y3QgcG5wX2NhcmRfbGluayAqcGNhcmQpCit7CisJcmV0dXJuIHBjYXJkLT5kcml2ZXJfZGF0YTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBucF9zZXRfY2FyZF9kcnZkYXRhIChzdHJ1Y3QgcG5wX2NhcmRfbGluayAqcGNhcmQsIHZvaWQgKmRhdGEpCit7CisJcGNhcmQtPmRyaXZlcl9kYXRhID0gZGF0YTsKK30KKworc3RydWN0IHBucF9kZXYgeworCXN0cnVjdCBkZXZpY2UgZGV2OwkJLyogRHJpdmVyIE1vZGVsIGRldmljZSBpbnRlcmZhY2UgKi8KKwl1bnNpZ25lZCBjaGFyIG51bWJlcjsJCS8qIHVzZWQgYXMgYW4gaW5kZXgsIG11c3QgYmUgdW5pcXVlICovCisJaW50IHN0YXR1czsKKworCXN0cnVjdCBsaXN0X2hlYWQgZ2xvYmFsX2xpc3Q7CS8qIG5vZGUgaW4gZ2xvYmFsIGxpc3Qgb2YgZGV2aWNlcyAqLworCXN0cnVjdCBsaXN0X2hlYWQgcHJvdG9jb2xfbGlzdDsJLyogbm9kZSBpbiBsaXN0IG9mIGRldmljZSdzIHByb3RvY29sICovCisJc3RydWN0IGxpc3RfaGVhZCBjYXJkX2xpc3Q7CS8qIG5vZGUgaW4gY2FyZCdzIGxpc3Qgb2YgZGV2aWNlcyAqLworCXN0cnVjdCBsaXN0X2hlYWQgcmRldl9saXN0OwkvKiBub2RlIGluIGNhcmRzIGxpc3Qgb2YgcmVxdWVzdGVkIGRldmljZXMgKi8KKworCXN0cnVjdCBwbnBfcHJvdG9jb2wgKiBwcm90b2NvbDsKKwlzdHJ1Y3QgcG5wX2NhcmQgKiBjYXJkOwkJLyogY2FyZCB0aGUgZGV2aWNlIGlzIGF0dGFjaGVkIHRvLCBub25lIGlmIE5VTEwgKi8KKwlzdHJ1Y3QgcG5wX2RyaXZlciAqIGRyaXZlcjsKKwlzdHJ1Y3QgcG5wX2NhcmRfbGluayAqIGNhcmRfbGluazsKKworCXN0cnVjdCBwbnBfaWQJKiBpZDsJLyogc3VwcG9ydGVkIEVJU0EgSURzKi8KKworCWludCBhY3RpdmU7CisJaW50IGNhcGFiaWxpdGllczsKKwlzdHJ1Y3QgcG5wX29wdGlvbiAqIGluZGVwZW5kZW50OworCXN0cnVjdCBwbnBfb3B0aW9uICogZGVwZW5kZW50OworCXN0cnVjdCBwbnBfcmVzb3VyY2VfdGFibGUgcmVzOworCisJY2hhciBuYW1lW1BOUF9OQU1FX0xFTl07CS8qIGNvbnRhaW5zIGEgaHVtYW4tcmVhZGFibGUgbmFtZSAqLworCXVuc2lnbmVkIHNob3J0CXJlZ3M7CQkvKiBJU0FQblA6IHN1cHBvcnRlZCByZWdpc3RlcnMgKi8KKwlpbnQgCQlmbGFnczsJCS8qIHVzZWQgYnkgcHJvdG9jb2xzICovCisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jZW50OwkvKiBkZXZpY2UgZW50cnkgaW4gL3Byb2MvYnVzL2lzYXBucCAqLworCXZvaWQgKmRhdGE7Cit9OworCisjZGVmaW5lIGdsb2JhbF90b19wbnBfZGV2KG4pIGxpc3RfZW50cnkobiwgc3RydWN0IHBucF9kZXYsIGdsb2JhbF9saXN0KQorI2RlZmluZSBjYXJkX3RvX3BucF9kZXYobikgbGlzdF9lbnRyeShuLCBzdHJ1Y3QgcG5wX2RldiwgY2FyZF9saXN0KQorI2RlZmluZSBwcm90b2NvbF90b19wbnBfZGV2KG4pIGxpc3RfZW50cnkobiwgc3RydWN0IHBucF9kZXYsIHByb3RvY29sX2xpc3QpCisjZGVmaW5lCXRvX3BucF9kZXYobikgY29udGFpbmVyX29mKG4sIHN0cnVjdCBwbnBfZGV2LCBkZXYpCisjZGVmaW5lIHBucF9mb3JfZWFjaF9kZXYoZGV2KSBcCisJZm9yKChkZXYpID0gZ2xvYmFsX3RvX3BucF9kZXYocG5wX2dsb2JhbC5uZXh0KTsgXAorCShkZXYpICE9IGdsb2JhbF90b19wbnBfZGV2KCZwbnBfZ2xvYmFsKTsgXAorCShkZXYpID0gZ2xvYmFsX3RvX3BucF9kZXYoKGRldiktPmdsb2JhbF9saXN0Lm5leHQpKQorI2RlZmluZSBjYXJkX2Zvcl9lYWNoX2RldihjYXJkLGRldikgXAorCWZvcigoZGV2KSA9IGNhcmRfdG9fcG5wX2RldigoY2FyZCktPmRldmljZXMubmV4dCk7IFwKKwkoZGV2KSAhPSBjYXJkX3RvX3BucF9kZXYoJihjYXJkKS0+ZGV2aWNlcyk7IFwKKwkoZGV2KSA9IGNhcmRfdG9fcG5wX2RldigoZGV2KS0+Y2FyZF9saXN0Lm5leHQpKQorI2RlZmluZSBwbnBfZGV2X25hbWUoZGV2KSAoZGV2KS0+bmFtZQorCitzdGF0aWMgaW5saW5lIHZvaWQgKnBucF9nZXRfZHJ2ZGF0YSAoc3RydWN0IHBucF9kZXYgKnBkZXYpCit7CisJcmV0dXJuIGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBucF9zZXRfZHJ2ZGF0YSAoc3RydWN0IHBucF9kZXYgKnBkZXYsIHZvaWQgKmRhdGEpCit7CisJZGV2X3NldF9kcnZkYXRhKCZwZGV2LT5kZXYsIGRhdGEpOworfQorCitzdHJ1Y3QgcG5wX2ZpeHVwIHsKKwljaGFyIGlkWzddOworCXZvaWQgKCpxdWlya19mdW5jdGlvbikoc3RydWN0IHBucF9kZXYgKmRldik7CS8qIGZpeHVwIGZ1bmN0aW9uICovCit9OworCisvKiBjb25maWcgcGFyYW1ldGVycyAqLworI2RlZmluZSBQTlBfQ09ORklHX05PUk1BTAkweDAwMDEKKyNkZWZpbmUgUE5QX0NPTkZJR19GT1JDRQkweDAwMDIJLyogZGlzYWJsZXMgdmFsaWRpdHkgY2hlY2tpbmcgKi8KKworLyogY2FwYWJpbGl0aWVzICovCisjZGVmaW5lIFBOUF9SRUFECQkweDAwMDEKKyNkZWZpbmUgUE5QX1dSSVRFCQkweDAwMDIKKyNkZWZpbmUgUE5QX0RJU0FCTEUJCTB4MDAwNAorI2RlZmluZSBQTlBfQ09ORklHVVJBQkxFCTB4MDAwOAorI2RlZmluZSBQTlBfUkVNT1ZBQkxFCQkweDAwMTAKKworI2RlZmluZSBwbnBfY2FuX3JlYWQoZGV2KQkoKChkZXYpLT5wcm90b2NvbCkgJiYgKChkZXYpLT5wcm90b2NvbC0+Z2V0KSAmJiBcCisJCQkJICgoZGV2KS0+Y2FwYWJpbGl0aWVzICYgUE5QX1JFQUQpKQorI2RlZmluZSBwbnBfY2FuX3dyaXRlKGRldikJKCgoZGV2KS0+cHJvdG9jb2wpICYmICgoZGV2KS0+cHJvdG9jb2wtPnNldCkgJiYgXAorCQkJCSAoKGRldiktPmNhcGFiaWxpdGllcyAmIFBOUF9XUklURSkpCisjZGVmaW5lIHBucF9jYW5fZGlzYWJsZShkZXYpCSgoKGRldiktPnByb3RvY29sKSAmJiAoKGRldiktPnByb3RvY29sLT5kaXNhYmxlKSAmJiBcCisJCQkJICgoZGV2KS0+Y2FwYWJpbGl0aWVzICYgUE5QX0RJU0FCTEUpKQorI2RlZmluZSBwbnBfY2FuX2NvbmZpZ3VyZShkZXYpCSgoIShkZXYpLT5hY3RpdmUpICYmIFwKKwkJCQkgKChkZXYpLT5jYXBhYmlsaXRpZXMgJiBQTlBfQ09ORklHVVJBQkxFKSkKKworI2lmZGVmIENPTkZJR19JU0FQTlAKK2V4dGVybiBzdHJ1Y3QgcG5wX3Byb3RvY29sIGlzYXBucF9wcm90b2NvbDsKKyNkZWZpbmUgcG5wX2RldmljZV9pc19pc2FwbnAoZGV2KSAoKGRldiktPnByb3RvY29sID09ICgmaXNhcG5wX3Byb3RvY29sKSkKKyNlbHNlCisjZGVmaW5lIHBucF9kZXZpY2VfaXNfaXNhcG5wKGRldikgMAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfUE5QQklPUworZXh0ZXJuIHN0cnVjdCBwbnBfcHJvdG9jb2wgcG5wYmlvc19wcm90b2NvbDsKKyNkZWZpbmUgcG5wX2RldmljZV9pc19wbnBiaW9zKGRldikgKChkZXYpLT5wcm90b2NvbCA9PSAoJnBucGJpb3NfcHJvdG9jb2wpKQorI2Vsc2UKKyNkZWZpbmUgcG5wX2RldmljZV9pc19wbnBiaW9zKGRldikgMAorI2VuZGlmCisKKworLyogc3RhdHVzICovCisjZGVmaW5lIFBOUF9SRUFEWQkJMHgwMDAwCisjZGVmaW5lIFBOUF9BVFRBQ0hFRAkJMHgwMDAxCisjZGVmaW5lIFBOUF9CVVNZCQkweDAwMDIKKyNkZWZpbmUgUE5QX0ZBVUxUWQkJMHgwMDA0CisKKy8qIGlzYXBucCBzcGVjaWZpYyBtYWNyb3MgKi8KKworI2RlZmluZSBpc2FwbnBfY2FyZF9udW1iZXIoZGV2KQkoKGRldiktPmNhcmQgPyAoZGV2KS0+Y2FyZC0+bnVtYmVyIDogLTEpCisjZGVmaW5lIGlzYXBucF9jc25fbnVtYmVyKGRldikgICgoZGV2KS0+bnVtYmVyKQorCisvKgorICogRHJpdmVyIE1hbmFnZW1lbnQKKyAqLworCitzdHJ1Y3QgcG5wX2lkIHsKKwljaGFyIGlkW1BOUF9JRF9MRU5dOworCXN0cnVjdCBwbnBfaWQgKiBuZXh0OworfTsKKworc3RydWN0IHBucF9kcml2ZXIgeworCWNoYXIgKiBuYW1lOworCWNvbnN0IHN0cnVjdCBwbnBfZGV2aWNlX2lkICppZF90YWJsZTsKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CisJaW50ICAoKnByb2JlKSAgKHN0cnVjdCBwbnBfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwbnBfZGV2aWNlX2lkICpkZXZfaWQpOworCXZvaWQgKCpyZW1vdmUpIChzdHJ1Y3QgcG5wX2RldiAqZGV2KTsKKwlzdHJ1Y3QgZGV2aWNlX2RyaXZlciBkcml2ZXI7Cit9OworCisjZGVmaW5lCXRvX3BucF9kcml2ZXIoZHJ2KSBjb250YWluZXJfb2YoZHJ2LCBzdHJ1Y3QgcG5wX2RyaXZlciwgZHJpdmVyKQorCitzdHJ1Y3QgcG5wX2NhcmRfZHJpdmVyIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGdsb2JhbF9saXN0OworCWNoYXIgKiBuYW1lOworCWNvbnN0IHN0cnVjdCBwbnBfY2FyZF9kZXZpY2VfaWQgKmlkX3RhYmxlOworCXVuc2lnbmVkIGludCBmbGFnczsKKwlpbnQgICgqcHJvYmUpICAoc3RydWN0IHBucF9jYXJkX2xpbmsgKmNhcmQsIGNvbnN0IHN0cnVjdCBwbnBfY2FyZF9kZXZpY2VfaWQgKmNhcmRfaWQpOworCXZvaWQgKCpyZW1vdmUpIChzdHJ1Y3QgcG5wX2NhcmRfbGluayAqY2FyZCk7CisJc3RydWN0IHBucF9kcml2ZXIgbGluazsKK307CisKKyNkZWZpbmUJdG9fcG5wX2NhcmRfZHJpdmVyKGRydikgY29udGFpbmVyX29mKGRydiwgc3RydWN0IHBucF9jYXJkX2RyaXZlciwgbGluaykKKworLyogcG5wIGRyaXZlciBmbGFncyAqLworI2RlZmluZSBQTlBfRFJJVkVSX1JFU19ET19OT1RfQ0hBTkdFCTB4MDAwMQkvKiBkbyBub3QgY2hhbmdlIHRoZSBzdGF0ZSBvZiB0aGUgZGV2aWNlICovCisjZGVmaW5lIFBOUF9EUklWRVJfUkVTX0RJU0FCTEUJCTB4MDAwMwkvKiBlbnN1cmUgdGhlIGRldmljZSBpcyBkaXNhYmxlZCAqLworCisKKy8qCisgKiBQcm90b2NvbCBNYW5hZ2VtZW50CisgKi8KKworc3RydWN0IHBucF9wcm90b2NvbCB7CisJc3RydWN0IGxpc3RfaGVhZAlwcm90b2NvbF9saXN0OworCWNoYXIJCSAgICAgICogbmFtZTsKKworCS8qIHJlc291cmNlIGNvbnRyb2wgZnVuY3Rpb25zICovCisJaW50ICgqZ2V0KShzdHJ1Y3QgcG5wX2RldiAqZGV2LCBzdHJ1Y3QgcG5wX3Jlc291cmNlX3RhYmxlICpyZXMpOworCWludCAoKnNldCkoc3RydWN0IHBucF9kZXYgKmRldiwgc3RydWN0IHBucF9yZXNvdXJjZV90YWJsZSAqcmVzKTsKKwlpbnQgKCpkaXNhYmxlKShzdHJ1Y3QgcG5wX2RldiAqZGV2KTsKKworCS8qIHVzZWQgYnkgcG5wIGxheWVyIG9ubHkgKGxvb2sgYnV0IGRvbid0IHRvdWNoKSAqLworCXVuc2lnbmVkIGNoYXIJCW51bWJlcjsJCS8qIHByb3RvY29sIG51bWJlciovCisJc3RydWN0IGRldmljZQkJZGV2OwkJLyogbGluayB0byBkcml2ZXIgbW9kZWwgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCWNhcmRzOworCXN0cnVjdCBsaXN0X2hlYWQJZGV2aWNlczsKK307CisKKyNkZWZpbmUgdG9fcG5wX3Byb3RvY29sKG4pIGxpc3RfZW50cnkobiwgc3RydWN0IHBucF9wcm90b2NvbCwgcHJvdG9jb2xfbGlzdCkKKyNkZWZpbmUgcHJvdG9jb2xfZm9yX2VhY2hfY2FyZChwcm90b2NvbCxjYXJkKSBcCisJZm9yKChjYXJkKSA9IHByb3RvY29sX3RvX3BucF9jYXJkKChwcm90b2NvbCktPmNhcmRzLm5leHQpOyBcCisJKGNhcmQpICE9IHByb3RvY29sX3RvX3BucF9jYXJkKCYocHJvdG9jb2wpLT5jYXJkcyk7IFwKKwkoY2FyZCkgPSBwcm90b2NvbF90b19wbnBfY2FyZCgoY2FyZCktPnByb3RvY29sX2xpc3QubmV4dCkpCisjZGVmaW5lIHByb3RvY29sX2Zvcl9lYWNoX2Rldihwcm90b2NvbCxkZXYpIFwKKwlmb3IoKGRldikgPSBwcm90b2NvbF90b19wbnBfZGV2KChwcm90b2NvbCktPmRldmljZXMubmV4dCk7IFwKKwkoZGV2KSAhPSBwcm90b2NvbF90b19wbnBfZGV2KCYocHJvdG9jb2wpLT5kZXZpY2VzKTsgXAorCShkZXYpID0gcHJvdG9jb2xfdG9fcG5wX2RldigoZGV2KS0+cHJvdG9jb2xfbGlzdC5uZXh0KSkKKworCisjaWYgZGVmaW5lZChDT05GSUdfUE5QKQorCisvKiBkZXZpY2UgbWFuYWdlbWVudCAqLworaW50IHBucF9yZWdpc3Rlcl9wcm90b2NvbChzdHJ1Y3QgcG5wX3Byb3RvY29sICpwcm90b2NvbCk7Cit2b2lkIHBucF91bnJlZ2lzdGVyX3Byb3RvY29sKHN0cnVjdCBwbnBfcHJvdG9jb2wgKnByb3RvY29sKTsKK2ludCBwbnBfYWRkX2RldmljZShzdHJ1Y3QgcG5wX2RldiAqZGV2KTsKK3ZvaWQgcG5wX3JlbW92ZV9kZXZpY2Uoc3RydWN0IHBucF9kZXYgKmRldik7CitpbnQgcG5wX2RldmljZV9hdHRhY2goc3RydWN0IHBucF9kZXYgKnBucF9kZXYpOwordm9pZCBwbnBfZGV2aWNlX2RldGFjaChzdHJ1Y3QgcG5wX2RldiAqcG5wX2Rldik7CitleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBwbnBfZ2xvYmFsOworCisvKiBtdWx0aWRldmljZSBjYXJkIHN1cHBvcnQgKi8KK2ludCBwbnBfYWRkX2NhcmQoc3RydWN0IHBucF9jYXJkICpjYXJkKTsKK3ZvaWQgcG5wX3JlbW92ZV9jYXJkKHN0cnVjdCBwbnBfY2FyZCAqY2FyZCk7CitpbnQgcG5wX2FkZF9jYXJkX2RldmljZShzdHJ1Y3QgcG5wX2NhcmQgKmNhcmQsIHN0cnVjdCBwbnBfZGV2ICpkZXYpOwordm9pZCBwbnBfcmVtb3ZlX2NhcmRfZGV2aWNlKHN0cnVjdCBwbnBfZGV2ICpkZXYpOworaW50IHBucF9hZGRfY2FyZF9pZChzdHJ1Y3QgcG5wX2lkICppZCwgc3RydWN0IHBucF9jYXJkICpjYXJkKTsKK3N0cnVjdCBwbnBfZGV2ICogcG5wX3JlcXVlc3RfY2FyZF9kZXZpY2Uoc3RydWN0IHBucF9jYXJkX2xpbmsgKmNsaW5rLCBjb25zdCBjaGFyICogaWQsIHN0cnVjdCBwbnBfZGV2ICogZnJvbSk7Cit2b2lkIHBucF9yZWxlYXNlX2NhcmRfZGV2aWNlKHN0cnVjdCBwbnBfZGV2ICogZGV2KTsKK2ludCBwbnBfcmVnaXN0ZXJfY2FyZF9kcml2ZXIoc3RydWN0IHBucF9jYXJkX2RyaXZlciAqIGRydik7Cit2b2lkIHBucF91bnJlZ2lzdGVyX2NhcmRfZHJpdmVyKHN0cnVjdCBwbnBfY2FyZF9kcml2ZXIgKiBkcnYpOworZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgcG5wX2NhcmRzOworCisvKiByZXNvdXJjZSBtYW5hZ2VtZW50ICovCitzdHJ1Y3QgcG5wX29wdGlvbiAqIHBucF9yZWdpc3Rlcl9pbmRlcGVuZGVudF9vcHRpb24oc3RydWN0IHBucF9kZXYgKmRldik7CitzdHJ1Y3QgcG5wX29wdGlvbiAqIHBucF9yZWdpc3Rlcl9kZXBlbmRlbnRfb3B0aW9uKHN0cnVjdCBwbnBfZGV2ICpkZXYsIGludCBwcmlvcml0eSk7CitpbnQgcG5wX3JlZ2lzdGVyX2lycV9yZXNvdXJjZShzdHJ1Y3QgcG5wX29wdGlvbiAqb3B0aW9uLCBzdHJ1Y3QgcG5wX2lycSAqZGF0YSk7CitpbnQgcG5wX3JlZ2lzdGVyX2RtYV9yZXNvdXJjZShzdHJ1Y3QgcG5wX29wdGlvbiAqb3B0aW9uLCBzdHJ1Y3QgcG5wX2RtYSAqZGF0YSk7CitpbnQgcG5wX3JlZ2lzdGVyX3BvcnRfcmVzb3VyY2Uoc3RydWN0IHBucF9vcHRpb24gKm9wdGlvbiwgc3RydWN0IHBucF9wb3J0ICpkYXRhKTsKK2ludCBwbnBfcmVnaXN0ZXJfbWVtX3Jlc291cmNlKHN0cnVjdCBwbnBfb3B0aW9uICpvcHRpb24sIHN0cnVjdCBwbnBfbWVtICpkYXRhKTsKK3ZvaWQgcG5wX2luaXRfcmVzb3VyY2VfdGFibGUoc3RydWN0IHBucF9yZXNvdXJjZV90YWJsZSAqdGFibGUpOworaW50IHBucF9tYW51YWxfY29uZmlnX2RldihzdHJ1Y3QgcG5wX2RldiAqZGV2LCBzdHJ1Y3QgcG5wX3Jlc291cmNlX3RhYmxlICpyZXMsIGludCBtb2RlKTsKK2ludCBwbnBfYXV0b19jb25maWdfZGV2KHN0cnVjdCBwbnBfZGV2ICpkZXYpOworaW50IHBucF92YWxpZGF0ZV9jb25maWcoc3RydWN0IHBucF9kZXYgKmRldik7CitpbnQgcG5wX2FjdGl2YXRlX2RldihzdHJ1Y3QgcG5wX2RldiAqZGV2KTsKK2ludCBwbnBfZGlzYWJsZV9kZXYoc3RydWN0IHBucF9kZXYgKmRldik7Cit2b2lkIHBucF9yZXNvdXJjZV9jaGFuZ2Uoc3RydWN0IHJlc291cmNlICpyZXNvdXJjZSwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKTsKKworLyogcHJvdG9jb2wgaGVscGVycyAqLworaW50IHBucF9pc19hY3RpdmUoc3RydWN0IHBucF9kZXYgKiBkZXYpOworaW50IGNvbXBhcmVfcG5wX2lkKHN0cnVjdCBwbnBfaWQgKiBwb3MsIGNvbnN0IGNoYXIgKiBpZCk7CitpbnQgcG5wX2FkZF9pZChzdHJ1Y3QgcG5wX2lkICppZCwgc3RydWN0IHBucF9kZXYgKmRldik7CitpbnQgcG5wX3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgcG5wX2RyaXZlciAqZHJ2KTsKK3ZvaWQgcG5wX3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBwbnBfZHJpdmVyICpkcnYpOworCisjZWxzZQorCisvKiBkZXZpY2UgbWFuYWdlbWVudCAqLworc3RhdGljIGlubGluZSBpbnQgcG5wX3JlZ2lzdGVyX3Byb3RvY29sKHN0cnVjdCBwbnBfcHJvdG9jb2wgKnByb3RvY29sKSB7IHJldHVybiAtRU5PREVWOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgcG5wX3VucmVnaXN0ZXJfcHJvdG9jb2woc3RydWN0IHBucF9wcm90b2NvbCAqcHJvdG9jb2wpIHsgfQorc3RhdGljIGlubGluZSBpbnQgcG5wX2luaXRfZGV2aWNlKHN0cnVjdCBwbnBfZGV2ICpkZXYpIHsgcmV0dXJuIC1FTk9ERVY7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHBucF9hZGRfZGV2aWNlKHN0cnVjdCBwbnBfZGV2ICpkZXYpIHsgcmV0dXJuIC1FTk9ERVY7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBwbnBfcmVtb3ZlX2RldmljZShzdHJ1Y3QgcG5wX2RldiAqZGV2KSB7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHBucF9kZXZpY2VfYXR0YWNoKHN0cnVjdCBwbnBfZGV2ICpwbnBfZGV2KSB7IHJldHVybiAtRU5PREVWOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgcG5wX2RldmljZV9kZXRhY2goc3RydWN0IHBucF9kZXYgKnBucF9kZXYpIHsgOyB9CisKKy8qIG11bHRpZGV2aWNlIGNhcmQgc3VwcG9ydCAqLworc3RhdGljIGlubGluZSBpbnQgcG5wX2FkZF9jYXJkKHN0cnVjdCBwbnBfY2FyZCAqY2FyZCkgeyByZXR1cm4gLUVOT0RFVjsgfQorc3RhdGljIGlubGluZSB2b2lkIHBucF9yZW1vdmVfY2FyZChzdHJ1Y3QgcG5wX2NhcmQgKmNhcmQpIHsgOyB9CitzdGF0aWMgaW5saW5lIGludCBwbnBfYWRkX2NhcmRfZGV2aWNlKHN0cnVjdCBwbnBfY2FyZCAqY2FyZCwgc3RydWN0IHBucF9kZXYgKmRldikgeyByZXR1cm4gLUVOT0RFVjsgfQorc3RhdGljIGlubGluZSB2b2lkIHBucF9yZW1vdmVfY2FyZF9kZXZpY2Uoc3RydWN0IHBucF9kZXYgKmRldikgeyA7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHBucF9hZGRfY2FyZF9pZChzdHJ1Y3QgcG5wX2lkICppZCwgc3RydWN0IHBucF9jYXJkICpjYXJkKSB7IHJldHVybiAtRU5PREVWOyB9CitzdGF0aWMgaW5saW5lIHN0cnVjdCBwbnBfZGV2ICogcG5wX3JlcXVlc3RfY2FyZF9kZXZpY2Uoc3RydWN0IHBucF9jYXJkX2xpbmsgKmNsaW5rLCBjb25zdCBjaGFyICogaWQsIHN0cnVjdCBwbnBfZGV2ICogZnJvbSkgeyByZXR1cm4gTlVMTDsgfQorc3RhdGljIGlubGluZSB2b2lkIHBucF9yZWxlYXNlX2NhcmRfZGV2aWNlKHN0cnVjdCBwbnBfZGV2ICogZGV2KSB7IDsgfQorc3RhdGljIGlubGluZSBpbnQgcG5wX3JlZ2lzdGVyX2NhcmRfZHJpdmVyKHN0cnVjdCBwbnBfY2FyZF9kcml2ZXIgKiBkcnYpIHsgcmV0dXJuIC1FTk9ERVY7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBwbnBfdW5yZWdpc3Rlcl9jYXJkX2RyaXZlcihzdHJ1Y3QgcG5wX2NhcmRfZHJpdmVyICogZHJ2KSB7IDsgfQorCisvKiByZXNvdXJjZSBtYW5hZ2VtZW50ICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwbnBfb3B0aW9uICogcG5wX3JlZ2lzdGVyX2luZGVwZW5kZW50X29wdGlvbihzdHJ1Y3QgcG5wX2RldiAqZGV2KSB7IHJldHVybiBOVUxMOyB9CitzdGF0aWMgaW5saW5lIHN0cnVjdCBwbnBfb3B0aW9uICogcG5wX3JlZ2lzdGVyX2RlcGVuZGVudF9vcHRpb24oc3RydWN0IHBucF9kZXYgKmRldiwgaW50IHByaW9yaXR5KSB7IHJldHVybiBOVUxMOyB9CitzdGF0aWMgaW5saW5lIGludCBwbnBfcmVnaXN0ZXJfaXJxX3Jlc291cmNlKHN0cnVjdCBwbnBfb3B0aW9uICpvcHRpb24sIHN0cnVjdCBwbnBfaXJxICpkYXRhKSB7IHJldHVybiAtRU5PREVWOyB9CitzdGF0aWMgaW5saW5lIGludCBwbnBfcmVnaXN0ZXJfZG1hX3Jlc291cmNlKHN0cnVjdCBwbnBfb3B0aW9uICpvcHRpb24sIHN0cnVjdCBwbnBfZG1hICpkYXRhKSB7IHJldHVybiAtRU5PREVWOyB9CitzdGF0aWMgaW5saW5lIGludCBwbnBfcmVnaXN0ZXJfcG9ydF9yZXNvdXJjZShzdHJ1Y3QgcG5wX29wdGlvbiAqb3B0aW9uLCBzdHJ1Y3QgcG5wX3BvcnQgKmRhdGEpIHsgcmV0dXJuIC1FTk9ERVY7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHBucF9yZWdpc3Rlcl9tZW1fcmVzb3VyY2Uoc3RydWN0IHBucF9vcHRpb24gKm9wdGlvbiwgc3RydWN0IHBucF9tZW0gKmRhdGEpIHsgcmV0dXJuIC1FTk9ERVY7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBwbnBfaW5pdF9yZXNvdXJjZV90YWJsZShzdHJ1Y3QgcG5wX3Jlc291cmNlX3RhYmxlICp0YWJsZSkgeyB9CitzdGF0aWMgaW5saW5lIGludCBwbnBfbWFudWFsX2NvbmZpZ19kZXYoc3RydWN0IHBucF9kZXYgKmRldiwgc3RydWN0IHBucF9yZXNvdXJjZV90YWJsZSAqcmVzLCBpbnQgbW9kZSkgeyByZXR1cm4gLUVOT0RFVjsgfQorc3RhdGljIGlubGluZSBpbnQgcG5wX2F1dG9fY29uZmlnX2RldihzdHJ1Y3QgcG5wX2RldiAqZGV2KSB7IHJldHVybiAtRU5PREVWOyB9CitzdGF0aWMgaW5saW5lIGludCBwbnBfdmFsaWRhdGVfY29uZmlnKHN0cnVjdCBwbnBfZGV2ICpkZXYpIHsgcmV0dXJuIC1FTk9ERVY7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHBucF9hY3RpdmF0ZV9kZXYoc3RydWN0IHBucF9kZXYgKmRldikgeyByZXR1cm4gLUVOT0RFVjsgfQorc3RhdGljIGlubGluZSBpbnQgcG5wX2Rpc2FibGVfZGV2KHN0cnVjdCBwbnBfZGV2ICpkZXYpIHsgcmV0dXJuIC1FTk9ERVY7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBwbnBfcmVzb3VyY2VfY2hhbmdlKHN0cnVjdCByZXNvdXJjZSAqcmVzb3VyY2UsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkgeyB9CisKKy8qIHByb3RvY29sIGhlbHBlcnMgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHBucF9pc19hY3RpdmUoc3RydWN0IHBucF9kZXYgKiBkZXYpIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgaW50IGNvbXBhcmVfcG5wX2lkKHN0cnVjdCBwbnBfaWQgKiBwb3MsIGNvbnN0IGNoYXIgKiBpZCkgeyByZXR1cm4gLUVOT0RFVjsgfQorc3RhdGljIGlubGluZSBpbnQgcG5wX2FkZF9pZChzdHJ1Y3QgcG5wX2lkICppZCwgc3RydWN0IHBucF9kZXYgKmRldikgeyByZXR1cm4gLUVOT0RFVjsgfQorc3RhdGljIGlubGluZSBpbnQgcG5wX3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgcG5wX2RyaXZlciAqZHJ2KSB7IHJldHVybiAtRU5PREVWOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgcG5wX3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBwbnBfZHJpdmVyICpkcnYpIHsgOyB9CisKKyNlbmRpZiAvKiBDT05GSUdfUE5QICovCisKKworI2RlZmluZSBwbnBfZXJyKGZvcm1hdCwgYXJnLi4uKSBwcmludGsoS0VSTl9FUlIgInBucDogIiBmb3JtYXQgIlxuIiAsICMjIGFyZykKKyNkZWZpbmUgcG5wX2luZm8oZm9ybWF0LCBhcmcuLi4pIHByaW50ayhLRVJOX0lORk8gInBucDogIiBmb3JtYXQgIlxuIiAsICMjIGFyZykKKyNkZWZpbmUgcG5wX3dhcm4oZm9ybWF0LCBhcmcuLi4pIHByaW50ayhLRVJOX1dBUk5JTkcgInBucDogIiBmb3JtYXQgIlxuIiAsICMjIGFyZykKKworI2lmZGVmIERFQlVHCisjZGVmaW5lIHBucF9kYmcoZm9ybWF0LCBhcmcuLi4pIHByaW50ayhLRVJOX0RFQlVHICJwbnA6ICIgZm9ybWF0ICJcbiIgLCAjIyBhcmcpCisjZWxzZQorI2RlZmluZSBwbnBfZGJnKGZvcm1hdCwgYXJnLi4uKSBkbyB7fSB3aGlsZSAoMCkKKyNlbmRpZgorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX0xJTlVYX1BOUF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BucGJpb3MuaCBiL2luY2x1ZGUvbGludXgvcG5wYmlvcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhMjgyYWMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3BucGJpb3MuaApAQCAtMCwwICsxLDE1NyBAQAorLyoKKyAqIEluY2x1ZGUgZmlsZSBmb3IgdGhlIGludGVyZmFjZSB0byBhIFBuUCBCSU9TCisgKgorICogT3JpZ2luYWwgQklPUyBjb2RlIChDKSAxOTk4IENocmlzdGlhbiBTY2htaWR0IChjaHIuc2NobWlkdEB0dS1icy5kZSkKKyAqIFBuUCBoYW5kbGVyIHBhcnRzIChjKSAxOTk4IFRvbSBMZWVzIDx0b21AbHBzZy5kZW1vbi5jby51az4KKyAqIE1pbm9yIHJlb3JnYW5pemF0aW9ucyBieSBEYXZpZCBIaW5kcyA8ZGFoaW5kc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpZm5kZWYgX0xJTlVYX1BOUEJJT1NfSAorI2RlZmluZSBfTElOVVhfUE5QQklPU19ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BucC5oPgorCisvKgorICogUmV0dXJuIGNvZGVzCisgKi8KKyNkZWZpbmUgUE5QX1NVQ0NFU1MgICAgICAgICAgICAgICAgICAgICAweDAwCisjZGVmaW5lIFBOUF9OT1RfU0VUX1NUQVRJQ0FMTFkgICAgICAgICAgMHg3ZgorI2RlZmluZSBQTlBfVU5LTk9XTl9GVU5DVElPTiAgICAgICAgICAgIDB4ODEKKyNkZWZpbmUgUE5QX0ZVTkNUSU9OX05PVF9TVVBQT1JURUQgICAgICAweDgyCisjZGVmaW5lIFBOUF9JTlZBTElEX0hBTkRMRSAgICAgICAgICAgICAgMHg4MworI2RlZmluZSBQTlBfQkFEX1BBUkFNRVRFUiAgICAgICAgICAgICAgIDB4ODQKKyNkZWZpbmUgUE5QX1NFVF9GQUlMRUQgICAgICAgICAgICAgICAgICAweDg1CisjZGVmaW5lIFBOUF9FVkVOVFNfTk9UX1BFTkRJTkcgICAgICAgICAgMHg4NgorI2RlZmluZSBQTlBfU1lTVEVNX05PVF9ET0NLRUQgICAgICAgICAgIDB4ODcKKyNkZWZpbmUgUE5QX05PX0lTQV9QTlBfQ0FSRFMgICAgICAgICAgICAweDg4CisjZGVmaW5lIFBOUF9VTkFCTEVfVE9fREVURVJNSU5FX0RPQ0tfQ0FQQUJJTElUSUVTIDB4ODkKKyNkZWZpbmUgUE5QX0NPTkZJR19DSEFOR0VfRkFJTEVEX05PX0JBVFRFUlkgMHg4YQorI2RlZmluZSBQTlBfQ09ORklHX0NIQU5HRV9GQUlMRURfUkVTT1VSQ0VfQ09ORkxJQ1QgMHg4YgorI2RlZmluZSBQTlBfQlVGRkVSX1RPT19TTUFMTCAgICAgICAgICAgIDB4OGMKKyNkZWZpbmUgUE5QX1VTRV9FU0NEX1NVUFBPUlQgICAgICAgICAgICAweDhkCisjZGVmaW5lIFBOUF9NRVNTQUdFX05PVF9TVVBQT1JURUQgICAgICAgMHg4ZQorI2RlZmluZSBQTlBfSEFSRFdBUkVfRVJST1IgICAgICAgICAgICAgIDB4OGYKKworI2RlZmluZSBFU0NEX1NVQ0NFU1MgICAgICAgICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgRVNDRF9JT19FUlJPUl9SRUFESU5HICAgICAgICAgICAweDU1CisjZGVmaW5lIEVTQ0RfSU5WQUxJRCAgICAgICAgICAgICAgICAgICAgMHg1NgorI2RlZmluZSBFU0NEX0JVRkZFUl9UT09fU01BTEwgICAgICAgICAgIDB4NTkKKyNkZWZpbmUgRVNDRF9OVlJBTV9UT09fU01BTEwgICAgICAgICAgICAweDVhCisjZGVmaW5lIEVTQ0RfRlVOQ1RJT05fTk9UX1NVUFBPUlRFRCAgICAgMHg4MQorCisvKgorICogRXZlbnRzIHRoYXQgY2FuIGJlIHJlY2VpdmVkIGJ5ICJnZXQgZXZlbnQiCisgKi8KKyNkZWZpbmUgUE5QRVZfQUJPVVRfVE9fQ0hBTkdFX0NPTkZJRwkweDAwMDEKKyNkZWZpbmUgUE5QRVZfRE9DS19DSEFOR0VECQkweDAwMDIKKyNkZWZpbmUgUE5QRVZfU1lTVEVNX0RFVklDRV9DSEFOR0VECTB4MDAwMworI2RlZmluZSBQTlBFVl9DT05GSUdfQ0hBTkdFRF9GQUlMRUQJMHgwMDA0CisjZGVmaW5lIFBOUEVWX1VOS05PV05fU1lTVEVNX0VWRU5UCTB4ZmZmZgorLyogMHg4MDAwIHRocm91Z2ggMHhmZmZlIGFyZSBPRU0gZGVmaW5lZCAqLworCisvKgorICogTWVzc2FnZXMgdGhhdCBzaG91bGQgYmUgc2VudCB0aHJvdWdoICJzZW5kIG1lc3NhZ2UiCisgKi8KKyNkZWZpbmUgUE5QTVNHX09LCQkJMHgwMAorI2RlZmluZSBQTlBNU0dfQUJPUlQJCQkweDAxCisjZGVmaW5lIFBOUE1TR19VTkRPQ0tfREVGQVVMVF9BQ1RJT04JMHg0MAorI2RlZmluZSBQTlBNU0dfUE9XRVJfT0ZGCQkweDQxCisjZGVmaW5lIFBOUE1TR19QTlBfT1NfQUNUSVZFCQkweDQyCisjZGVmaW5lIFBOUE1TR19QTlBfT1NfSU5BQ1RJVkUJCTB4NDMKKworLyoKKyAqIFBsdWcgYW5kIFBsYXkgQklPUyBmbGFncworICovCisjZGVmaW5lIFBOUEJJT1NfTk9fRElTQUJMRQkJMHgwMDAxCisjZGVmaW5lIFBOUEJJT1NfTk9fQ09ORklHCQkweDAwMDIKKyNkZWZpbmUgUE5QQklPU19PVVRQVVQJCQkweDAwMDQKKyNkZWZpbmUgUE5QQklPU19JTlBVVAkJCTB4MDAwOAorI2RlZmluZSBQTlBCSU9TX0JPT1RBQkxFCQkweDAwMTAKKyNkZWZpbmUgUE5QQklPU19ET0NLCQkJMHgwMDIwCisjZGVmaW5lIFBOUEJJT1NfUkVNT1ZBQkxFCQkweDAwNDAKKyNkZWZpbmUgcG5wYmlvc19pc19zdGF0aWMoeCkgKCgoeCktPmZsYWdzICYgMHgwMTAwKSA9PSAweDAwMDApCisjZGVmaW5lIHBucGJpb3NfaXNfZHluYW1pYyh4KSAoKHgpLT5mbGFncyAmIDB4MDA4MCkKKworLyoKKyAqIEZ1bmN0aW9uIFBhcmFtZXRlcnMKKyAqLworI2RlZmluZSBQTlBNT0RFX1NUQVRJQyAxCisjZGVmaW5lIFBOUE1PREVfRFlOQU1JQyAwCisKKy8qIDB4ODAwMCB0aHJvdWdoIDB4ZmZmZiBhcmUgT0VNIGRlZmluZWQgKi8KKworI3ByYWdtYSBwYWNrKDEpCitzdHJ1Y3QgcG5wX2Rldl9ub2RlX2luZm8geworCV9fdTE2CW5vX25vZGVzOworCV9fdTE2CW1heF9ub2RlX3NpemU7Cit9Oworc3RydWN0IHBucF9kb2NraW5nX3N0YXRpb25faW5mbyB7CisJX191MzIJbG9jYXRpb25faWQ7CisJX191MzIJc2VyaWFsOworCV9fdTE2CWNhcGFiaWxpdGllczsKK307CitzdHJ1Y3QgcG5wX2lzYV9jb25maWdfc3RydWMgeworCV9fdTgJcmV2aXNpb247CisJX191OAlub19jc25zOworCV9fdTE2CWlzYV9yZF9kYXRhX3BvcnQ7CisJX191MTYJcmVzZXJ2ZWQ7Cit9Oworc3RydWN0IGVzY2RfaW5mb19zdHJ1YyB7CisJX191MTYJbWluX2VzY2Rfd3JpdGVfc2l6ZTsKKwlfX3UxNgllc2NkX3NpemU7CisJX191MzIJbnZfc3RvcmFnZV9iYXNlOworfTsKK3N0cnVjdCBwbnBfYmlvc19ub2RlIHsKKwlfX3UxNglzaXplOworCV9fdTgJaGFuZGxlOworCV9fdTMyCWVpc2FfaWQ7CisJX191OAl0eXBlX2NvZGVbM107CisJX191MTYJZmxhZ3M7CisJX191OAlkYXRhWzBdOworfTsKKyNwcmFnbWEgcGFjaygpCisKKyNpZmRlZiBDT05GSUdfUE5QQklPUworCisvKiBub24tZXhwb3J0ZWQgKi8KK2V4dGVybiBzdHJ1Y3QgcG5wX2Rldl9ub2RlX2luZm8gbm9kZV9pbmZvOworCitleHRlcm4gaW50IHBucF9iaW9zX2Rldl9ub2RlX2luZm8gKHN0cnVjdCBwbnBfZGV2X25vZGVfaW5mbyAqZGF0YSk7CitleHRlcm4gaW50IHBucF9iaW9zX2dldF9kZXZfbm9kZSAodTggKm5vZGVudW0sIGNoYXIgY29uZmlnLCBzdHJ1Y3QgcG5wX2Jpb3Nfbm9kZSAqZGF0YSk7CitleHRlcm4gaW50IHBucF9iaW9zX3NldF9kZXZfbm9kZSAodTggbm9kZW51bSwgY2hhciBjb25maWcsIHN0cnVjdCBwbnBfYmlvc19ub2RlICpkYXRhKTsKK2V4dGVybiBpbnQgcG5wX2Jpb3NfZ2V0X3N0YXRfcmVzIChjaGFyICppbmZvKTsKK2V4dGVybiBpbnQgcG5wX2Jpb3NfaXNhcG5wX2NvbmZpZyAoc3RydWN0IHBucF9pc2FfY29uZmlnX3N0cnVjICpkYXRhKTsKK2V4dGVybiBpbnQgcG5wX2Jpb3NfZXNjZF9pbmZvIChzdHJ1Y3QgZXNjZF9pbmZvX3N0cnVjICpkYXRhKTsKK2V4dGVybiBpbnQgcG5wX2Jpb3NfcmVhZF9lc2NkIChjaGFyICpkYXRhLCB1MzIgbnZyYW1fYmFzZSk7CitleHRlcm4gaW50IHBucF9iaW9zX2RvY2tfc3RhdGlvbl9pbmZvKHN0cnVjdCBwbnBfZG9ja2luZ19zdGF0aW9uX2luZm8gKmRhdGEpOworI2RlZmluZSBuZWVkZWQgMAorI2lmIG5lZWRlZAorZXh0ZXJuIGludCBwbnBfYmlvc19nZXRfZXZlbnQgKHUxNiAqbWVzc2FnZSk7CitleHRlcm4gaW50IHBucF9iaW9zX3NlbmRfbWVzc2FnZSAodTE2IG1lc3NhZ2UpOworZXh0ZXJuIGludCBwbnBfYmlvc19zZXRfc3RhdF9yZXMgKGNoYXIgKmluZm8pOworZXh0ZXJuIGludCBwbnBfYmlvc19hcG1faWRfdGFibGUgKGNoYXIgKnRhYmxlLCB1MTYgKnNpemUpOworZXh0ZXJuIGludCBwbnBfYmlvc193cml0ZV9lc2NkIChjaGFyICpkYXRhLCB1MzIgbnZyYW1fYmFzZSk7CisjZW5kaWYKKworI2VuZGlmIC8qIENPTkZJR19QTlBCSU9TICovCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfTElOVVhfUE5QQklPU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BvbGwuaCBiL2luY2x1ZGUvbGludXgvcG9sbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2ZGE3MDIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3BvbGwuaApAQCAtMCwwICsxLDk5IEBACisjaWZuZGVmIF9MSU5VWF9QT0xMX0gKKyNkZWZpbmUgX0xJTlVYX1BPTExfSAorCisjaW5jbHVkZSA8YXNtL3BvbGwuaD4KKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworc3RydWN0IHBvbGxfdGFibGVfc3RydWN0OworCisvKiAKKyAqIHN0cnVjdHVyZXMgYW5kIGhlbHBlcnMgZm9yIGZfb3AtPnBvbGwgaW1wbGVtZW50YXRpb25zCisgKi8KK3R5cGVkZWYgdm9pZCAoKnBvbGxfcXVldWVfcHJvYykoc3RydWN0IGZpbGUgKiwgd2FpdF9xdWV1ZV9oZWFkX3QgKiwgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICopOworCit0eXBlZGVmIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCB7CisJcG9sbF9xdWV1ZV9wcm9jIHFwcm9jOworfSBwb2xsX3RhYmxlOworCitzdGF0aWMgaW5saW5lIHZvaWQgcG9sbF93YWl0KHN0cnVjdCBmaWxlICogZmlscCwgd2FpdF9xdWV1ZV9oZWFkX3QgKiB3YWl0X2FkZHJlc3MsIHBvbGxfdGFibGUgKnApCit7CisJaWYgKHAgJiYgd2FpdF9hZGRyZXNzKQorCQlwLT5xcHJvYyhmaWxwLCB3YWl0X2FkZHJlc3MsIHApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9wb2xsX2Z1bmNwdHIocG9sbF90YWJsZSAqcHQsIHBvbGxfcXVldWVfcHJvYyBxcHJvYykKK3sKKwlwdC0+cXByb2MgPSBxcHJvYzsKK30KKworLyoKKyAqIFN0cnVjdHVyZXMgYW5kIGhlbHBlcnMgZm9yIHN5c19wb2xsL3N5c19wb2xsCisgKi8KK3N0cnVjdCBwb2xsX3dxdWV1ZXMgeworCXBvbGxfdGFibGUgcHQ7CisJc3RydWN0IHBvbGxfdGFibGVfcGFnZSAqIHRhYmxlOworCWludCBlcnJvcjsKK307CisKK2V4dGVybiB2b2lkIHBvbGxfaW5pdHdhaXQoc3RydWN0IHBvbGxfd3F1ZXVlcyAqcHdxKTsKK2V4dGVybiB2b2lkIHBvbGxfZnJlZXdhaXQoc3RydWN0IHBvbGxfd3F1ZXVlcyAqcHdxKTsKKworLyoKKyAqIFNjYWxlYWJsZSB2ZXJzaW9uIG9mIHRoZSBmZF9zZXQuCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcgKmluLCAqb3V0LCAqZXg7CisJdW5zaWduZWQgbG9uZyAqcmVzX2luLCAqcmVzX291dCwgKnJlc19leDsKK30gZmRfc2V0X2JpdHM7CisKKy8qCisgKiBIb3cgbWFueSBsb25nd29yZHMgZm9yICJuciIgYml0cz8KKyAqLworI2RlZmluZSBGRFNfQklUUEVSTE9ORwkoOCpzaXplb2YobG9uZykpCisjZGVmaW5lIEZEU19MT05HUyhucikJKCgobnIpK0ZEU19CSVRQRVJMT05HLTEpL0ZEU19CSVRQRVJMT05HKQorI2RlZmluZSBGRFNfQllURVMobnIpCShGRFNfTE9OR1MobnIpKnNpemVvZihsb25nKSkKKworLyoKKyAqIFdlIGRvIGEgVkVSSUZZX1dSSVRFIGhlcmUgZXZlbiB0aG91Z2ggd2UgYXJlIG9ubHkgcmVhZGluZyB0aGlzIHRpbWU6CisgKiB3ZSdsbCB3cml0ZSB0byBpdCBldmVudHVhbGx5Li4KKyAqCisgKiBVc2UgInVuc2lnbmVkIGxvbmciIGFjY2Vzc2VzIHRvIGxldCB1c2VyLW1vZGUgZmRfc2V0J3MgYmUgbG9uZy1hbGlnbmVkLgorICovCitzdGF0aWMgaW5saW5lCitpbnQgZ2V0X2ZkX3NldCh1bnNpZ25lZCBsb25nIG5yLCB2b2lkIF9fdXNlciAqdWZkc2V0LCB1bnNpZ25lZCBsb25nICpmZHNldCkKK3sKKwluciA9IEZEU19CWVRFUyhucik7CisJaWYgKHVmZHNldCkKKwkJcmV0dXJuIGNvcHlfZnJvbV91c2VyKGZkc2V0LCB1ZmRzZXQsIG5yKSA/IC1FRkFVTFQgOiAwOworCisJbWVtc2V0KGZkc2V0LCAwLCBucik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX211c3RfY2hlY2sKK3NldF9mZF9zZXQodW5zaWduZWQgbG9uZyBuciwgdm9pZCBfX3VzZXIgKnVmZHNldCwgdW5zaWduZWQgbG9uZyAqZmRzZXQpCit7CisJaWYgKHVmZHNldCkKKwkJcmV0dXJuIF9fY29weV90b191c2VyKHVmZHNldCwgZmRzZXQsIEZEU19CWVRFUyhucikpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lCit2b2lkIHplcm9fZmRfc2V0KHVuc2lnbmVkIGxvbmcgbnIsIHVuc2lnbmVkIGxvbmcgKmZkc2V0KQoreworCW1lbXNldChmZHNldCwgMCwgRkRTX0JZVEVTKG5yKSk7Cit9CisKK2V4dGVybiBpbnQgZG9fc2VsZWN0KGludCBuLCBmZF9zZXRfYml0cyAqZmRzLCBsb25nICp0aW1lb3V0KTsKKworI2VuZGlmIC8qIEtFUk5FTCAqLworCisjZW5kaWYgLyogX0xJTlVYX1BPTExfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wb3NpeC10aW1lcnMuaCBiL2luY2x1ZGUvbGludXgvcG9zaXgtdGltZXJzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk0MmUyYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvcG9zaXgtdGltZXJzLmgKQEAgLTAsMCArMSwxMzkgQEAKKyNpZm5kZWYgX2xpbnV4X1BPU0lYX1RJTUVSU19ICisjZGVmaW5lIF9saW51eF9QT1NJWF9USU1FUlNfSAorCisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKwordW5pb24gY3B1X3RpbWVfY291bnQgeworCWNwdXRpbWVfdCBjcHU7CisJdW5zaWduZWQgbG9uZyBsb25nIHNjaGVkOworfTsKKworc3RydWN0IGNwdV90aW1lcl9saXN0IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGVudHJ5OworCXVuaW9uIGNwdV90aW1lX2NvdW50IGV4cGlyZXMsIGluY3I7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOworCWludCBmaXJpbmc7Cit9OworCisjZGVmaW5lIENQVUNMT0NLX1BJRChjbG9jaykJCSgocGlkX3QpIH4oKGNsb2NrKSA+PiAzKSkKKyNkZWZpbmUgQ1BVQ0xPQ0tfUEVSVEhSRUFEKGNsb2NrKSBcCisJKCgoY2xvY2spICYgKGNsb2NraWRfdCkgQ1BVQ0xPQ0tfUEVSVEhSRUFEX01BU0spICE9IDApCisjZGVmaW5lIENQVUNMT0NLX1BJRF9NQVNLCTcKKyNkZWZpbmUgQ1BVQ0xPQ0tfUEVSVEhSRUFEX01BU0sJNAorI2RlZmluZSBDUFVDTE9DS19XSElDSChjbG9jaykJKChjbG9jaykgJiAoY2xvY2tpZF90KSBDUFVDTE9DS19DTE9DS19NQVNLKQorI2RlZmluZSBDUFVDTE9DS19DTE9DS19NQVNLCTMKKyNkZWZpbmUgQ1BVQ0xPQ0tfUFJPRgkJMAorI2RlZmluZSBDUFVDTE9DS19WSVJUCQkxCisjZGVmaW5lIENQVUNMT0NLX1NDSEVECQkyCisjZGVmaW5lIENQVUNMT0NLX01BWAkJMworCisjZGVmaW5lIE1BS0VfUFJPQ0VTU19DUFVDTE9DSyhwaWQsIGNsb2NrKSBcCisJKCh+KGNsb2NraWRfdCkgKHBpZCkgPDwgMykgfCAoY2xvY2tpZF90KSAoY2xvY2spKQorI2RlZmluZSBNQUtFX1RIUkVBRF9DUFVDTE9DSyh0aWQsIGNsb2NrKSBcCisJTUFLRV9QUk9DRVNTX0NQVUNMT0NLKCh0aWQpLCAoY2xvY2spIHwgQ1BVQ0xPQ0tfUEVSVEhSRUFEX01BU0spCisKKy8qIFBPU0lYLjFiIGludGVydmFsIHRpbWVyIHN0cnVjdHVyZS4gKi8KK3N0cnVjdCBrX2l0aW1lciB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwkJLyogZnJlZS8gYWxsb2NhdGUgbGlzdCAqLworCXNwaW5sb2NrX3QgaXRfbG9jazsKKwljbG9ja2lkX3QgaXRfY2xvY2s7CQkvKiB3aGljaCB0aW1lciB0eXBlICovCisJdGltZXJfdCBpdF9pZDsJCQkvKiB0aW1lciBpZCAqLworCWludCBpdF9vdmVycnVuOwkJCS8qIG92ZXJydW4gb24gcGVuZGluZyBzaWduYWwgICovCisJaW50IGl0X292ZXJydW5fbGFzdDsJCS8qIG92ZXJydW4gb24gbGFzdCBkZWxpdmVyZWQgc2lnbmFsICovCisJaW50IGl0X3JlcXVldWVfcGVuZGluZzsgICAgICAgICAvKiB3YWl0aW5nIHRvIHJlcXVldWUgdGhpcyB0aW1lciAqLworI2RlZmluZSBSRVFVRVVFX1BFTkRJTkcgMQorCWludCBpdF9zaWdldl9ub3RpZnk7CQkvKiBub3RpZnkgd29yZCBvZiBzaWdldmVudCBzdHJ1Y3QgKi8KKwlpbnQgaXRfc2lnZXZfc2lnbm87CQkvKiBzaWdubyB3b3JkIG9mIHNpZ2V2ZW50IHN0cnVjdCAqLworCXNpZ3ZhbF90IGl0X3NpZ2V2X3ZhbHVlOwkvKiB2YWx1ZSB3b3JkIG9mIHNpZ2V2ZW50IHN0cnVjdCAqLworCXN0cnVjdCB0YXNrX3N0cnVjdCAqaXRfcHJvY2VzczsJLyogcHJvY2VzcyB0byBzZW5kIHNpZ25hbCB0byAqLworCXN0cnVjdCBzaWdxdWV1ZSAqc2lncTsJCS8qIHNpZ25hbCBxdWV1ZSBlbnRyeS4gKi8KKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKKwkJCXN0cnVjdCBsaXN0X2hlYWQgYWJzX3RpbWVyX2VudHJ5OyAvKiBjbG9jayBhYnNfdGltZXJfbGlzdCAqLworCQkJc3RydWN0IHRpbWVzcGVjIHdhbGxfdG9fcHJldjsgICAvKiB3YWxsX3RvX21vbm90b25pYyB1c2VkIHdoZW4gc2V0ICovCisJCQl1bnNpZ25lZCBsb25nIGluY3I7IC8qIGludGVydmFsIGluIGppZmZpZXMgKi8KKwkJfSByZWFsOworCQlzdHJ1Y3QgY3B1X3RpbWVyX2xpc3QgY3B1OworCQlzdHJ1Y3QgeworCQkJdW5zaWduZWQgaW50IGNsb2NrOworCQkJdW5zaWduZWQgaW50IG5vZGU7CisJCQl1bnNpZ25lZCBsb25nIGluY3I7CisJCQl1bnNpZ25lZCBsb25nIGV4cGlyZXM7CisJCX0gbW10aW1lcjsKKwl9IGl0OworfTsKKworc3RydWN0IGtfY2xvY2tfYWJzIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3BpbmxvY2tfdCBsb2NrOworfTsKK3N0cnVjdCBrX2Nsb2NrIHsKKwlpbnQgcmVzOwkJLyogaW4gbmFubyBzZWNvbmRzICovCisJaW50ICgqY2xvY2tfZ2V0cmVzKSAoY2xvY2tpZF90IHdoaWNoX2Nsb2NrLCBzdHJ1Y3QgdGltZXNwZWMgKnRwKTsKKwlzdHJ1Y3Qga19jbG9ja19hYnMgKmFic19zdHJ1Y3Q7CisJaW50ICgqY2xvY2tfc2V0KSAoY2xvY2tpZF90IHdoaWNoX2Nsb2NrLCBzdHJ1Y3QgdGltZXNwZWMgKiB0cCk7CisJaW50ICgqY2xvY2tfZ2V0KSAoY2xvY2tpZF90IHdoaWNoX2Nsb2NrLCBzdHJ1Y3QgdGltZXNwZWMgKiB0cCk7CisJaW50ICgqdGltZXJfY3JlYXRlKSAoc3RydWN0IGtfaXRpbWVyICp0aW1lcik7CisJaW50ICgqbnNsZWVwKSAoY2xvY2tpZF90IHdoaWNoX2Nsb2NrLCBpbnQgZmxhZ3MsIHN0cnVjdCB0aW1lc3BlYyAqKTsKKwlpbnQgKCp0aW1lcl9zZXQpIChzdHJ1Y3Qga19pdGltZXIgKiB0aW1yLCBpbnQgZmxhZ3MsCisJCQkgIHN0cnVjdCBpdGltZXJzcGVjICogbmV3X3NldHRpbmcsCisJCQkgIHN0cnVjdCBpdGltZXJzcGVjICogb2xkX3NldHRpbmcpOworCWludCAoKnRpbWVyX2RlbCkgKHN0cnVjdCBrX2l0aW1lciAqIHRpbXIpOworI2RlZmluZSBUSU1FUl9SRVRSWSAxCisJdm9pZCAoKnRpbWVyX2dldCkgKHN0cnVjdCBrX2l0aW1lciAqIHRpbXIsCisJCQkgICBzdHJ1Y3QgaXRpbWVyc3BlYyAqIGN1cl9zZXR0aW5nKTsKK307CisKK3ZvaWQgcmVnaXN0ZXJfcG9zaXhfY2xvY2soY2xvY2tpZF90IGNsb2NrX2lkLCBzdHJ1Y3Qga19jbG9jayAqbmV3X2Nsb2NrKTsKKworLyogRXJyb3IgaGFuZGxlcnMgZm9yIHRpbWVyX2NyZWF0ZSwgbmFub3NsZWVwIGFuZCBzZXR0aW1lICovCitpbnQgZG9fcG9zaXhfY2xvY2tfbm90aW1lcl9jcmVhdGUoc3RydWN0IGtfaXRpbWVyICp0aW1lcik7CitpbnQgZG9fcG9zaXhfY2xvY2tfbm9uYW5vc2xlZXAoY2xvY2tpZF90LCBpbnQgZmxhZ3MsIHN0cnVjdCB0aW1lc3BlYyAqKTsKK2ludCBkb19wb3NpeF9jbG9ja19ub3NldHRpbWUoY2xvY2tpZF90LCBzdHJ1Y3QgdGltZXNwZWMgKnRwKTsKKworLyogZnVuY3Rpb24gdG8gY2FsbCB0byB0cmlnZ2VyIHRpbWVyIGV2ZW50ICovCitpbnQgcG9zaXhfdGltZXJfZXZlbnQoc3RydWN0IGtfaXRpbWVyICp0aW1yLCBpbnQgc2lfcHJpdmF0ZSk7CisKK3N0cnVjdCBub3dfc3RydWN0IHsKKwl1bnNpZ25lZCBsb25nIGppZmZpZXM7Cit9OworCisjZGVmaW5lIHBvc2l4X2dldF9ub3cobm93KSAobm93KS0+amlmZmllcyA9IGppZmZpZXM7CisjZGVmaW5lIHBvc2l4X3RpbWVfYmVmb3JlKHRpbWVyLCBub3cpIFwKKyAgICAgICAgICAgICAgICAgICAgICB0aW1lX2JlZm9yZSgodGltZXIpLT5leHBpcmVzLCAobm93KS0+amlmZmllcykKKworI2RlZmluZSBwb3NpeF9idW1wX3RpbWVyKHRpbXIsIG5vdykJCQkJCVwKKyAgICAgICAgIGRvIHsJCQkJCQkJCVwKKyAgICAgICAgICAgICAgbG9uZyBkZWx0YSwgb3J1bjsJCQkJCQlcCisJICAgICAgZGVsdGEgPSBub3cuamlmZmllcyAtICh0aW1yKS0+aXQucmVhbC50aW1lci5leHBpcmVzOwlcCisgICAgICAgICAgICAgIGlmIChkZWx0YSA+PSAwKSB7CQkJCQkJXAorCSAgICAgICAgICAgb3J1biA9IDEgKyAoZGVsdGEgLyAodGltciktPml0LnJlYWwuaW5jcik7CQlcCisJICAgICAgICAgICh0aW1yKS0+aXQucmVhbC50aW1lci5leHBpcmVzICs9CQkJXAorCQkJIG9ydW4gKiAodGltciktPml0LnJlYWwuaW5jcjsJCQlcCisgICAgICAgICAgICAgICAgICAodGltciktPml0X292ZXJydW4gKz0gb3J1bjsJCQkJXAorICAgICAgICAgICAgICB9CQkJCQkJCQlcCisgICAgICAgICAgICB9d2hpbGUgKDApCisKK2ludCBwb3NpeF9jcHVfY2xvY2tfZ2V0cmVzKGNsb2NraWRfdCB3aGljaF9jbG9jaywgc3RydWN0IHRpbWVzcGVjICopOworaW50IHBvc2l4X2NwdV9jbG9ja19nZXQoY2xvY2tpZF90IHdoaWNoX2Nsb2NrLCBzdHJ1Y3QgdGltZXNwZWMgKik7CitpbnQgcG9zaXhfY3B1X2Nsb2NrX3NldChjbG9ja2lkX3Qgd2hpY2hfY2xvY2ssIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqdHApOworaW50IHBvc2l4X2NwdV90aW1lcl9jcmVhdGUoc3RydWN0IGtfaXRpbWVyICopOworaW50IHBvc2l4X2NwdV9uc2xlZXAoY2xvY2tpZF90LCBpbnQsIHN0cnVjdCB0aW1lc3BlYyAqKTsKK2ludCBwb3NpeF9jcHVfdGltZXJfc2V0KHN0cnVjdCBrX2l0aW1lciAqLCBpbnQsCisJCQlzdHJ1Y3QgaXRpbWVyc3BlYyAqLCBzdHJ1Y3QgaXRpbWVyc3BlYyAqKTsKK2ludCBwb3NpeF9jcHVfdGltZXJfZGVsKHN0cnVjdCBrX2l0aW1lciAqKTsKK3ZvaWQgcG9zaXhfY3B1X3RpbWVyX2dldChzdHJ1Y3Qga19pdGltZXIgKiwgc3RydWN0IGl0aW1lcnNwZWMgKik7CisKK3ZvaWQgcG9zaXhfY3B1X3RpbWVyX3NjaGVkdWxlKHN0cnVjdCBrX2l0aW1lciAqKTsKKwordm9pZCBydW5fcG9zaXhfY3B1X3RpbWVycyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7Cit2b2lkIHBvc2l4X2NwdV90aW1lcnNfZXhpdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7Cit2b2lkIHBvc2l4X2NwdV90aW1lcnNfZXhpdF9ncm91cChzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CisKK3ZvaWQgc2V0X3Byb2Nlc3NfY3B1X3RpbWVyKHN0cnVjdCB0YXNrX3N0cnVjdCAqLCB1bnNpZ25lZCBpbnQsCisJCQkgICBjcHV0aW1lX3QgKiwgY3B1dGltZV90ICopOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcG9zaXhfYWNsLmggYi9pbmNsdWRlL2xpbnV4L3Bvc2l4X2FjbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjYWVkZGQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3Bvc2l4X2FjbC5oCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgIEZpbGU6IGxpbnV4L3Bvc2l4X2FjbC5oCisKKyAgKEMpIDIwMDIgQW5kcmVhcyBHcnVlbmJhY2hlciwgPGEuZ3J1ZW5iYWNoZXJAY29tcHV0ZXIub3JnPgorKi8KKworCisjaWZuZGVmIF9fTElOVVhfUE9TSVhfQUNMX0gKKyNkZWZpbmUgX19MSU5VWF9QT1NJWF9BQ0xfSAorCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCisjZGVmaW5lIEFDTF9VTkRFRklORURfSUQJKC0xKQorCisvKiBhX3R5cGUgZmllbGQgaW4gYWNsX3VzZXJfcG9zaXhfZW50cnlfdCAqLworI2RlZmluZSBBQ0xfVFlQRV9BQ0NFU1MJCSgweDgwMDApCisjZGVmaW5lIEFDTF9UWVBFX0RFRkFVTFQJKDB4NDAwMCkKKworLyogZV90YWcgZW50cnkgaW4gc3RydWN0IHBvc2l4X2FjbF9lbnRyeSAqLworI2RlZmluZSBBQ0xfVVNFUl9PQkoJCSgweDAxKQorI2RlZmluZSBBQ0xfVVNFUgkJKDB4MDIpCisjZGVmaW5lIEFDTF9HUk9VUF9PQkoJCSgweDA0KQorI2RlZmluZSBBQ0xfR1JPVVAJCSgweDA4KQorI2RlZmluZSBBQ0xfTUFTSwkJKDB4MTApCisjZGVmaW5lIEFDTF9PVEhFUgkJKDB4MjApCisKKy8qIHBlcm1pc3Npb25zIGluIHRoZSBlX3Blcm0gZmllbGQgKi8KKyNkZWZpbmUgQUNMX1JFQUQJCSgweDA0KQorI2RlZmluZSBBQ0xfV1JJVEUJCSgweDAyKQorI2RlZmluZSBBQ0xfRVhFQ1VURQkJKDB4MDEpCisvLyNkZWZpbmUgQUNMX0FERAkJKDB4MDgpCisvLyNkZWZpbmUgQUNMX0RFTEVURQkJKDB4MTApCisKK3N0cnVjdCBwb3NpeF9hY2xfZW50cnkgeworCXNob3J0CQkJZV90YWc7CisJdW5zaWduZWQgc2hvcnQJCWVfcGVybTsKKwl1bnNpZ25lZCBpbnQJCWVfaWQ7Cit9OworCitzdHJ1Y3QgcG9zaXhfYWNsIHsKKwlhdG9taWNfdAkJYV9yZWZjb3VudDsKKwl1bnNpZ25lZCBpbnQJCWFfY291bnQ7CisJc3RydWN0IHBvc2l4X2FjbF9lbnRyeQlhX2VudHJpZXNbMF07Cit9OworCisjZGVmaW5lIEZPUkVBQ0hfQUNMX0VOVFJZKHBhLCBhY2wsIHBlKSBcCisJZm9yKHBhPShhY2wpLT5hX2VudHJpZXMsIHBlPXBhKyhhY2wpLT5hX2NvdW50OyBwYTxwZTsgcGErKykKKworCisvKgorICogRHVwbGljYXRlIGFuIEFDTCBoYW5kbGUuCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBvc2l4X2FjbCAqCitwb3NpeF9hY2xfZHVwKHN0cnVjdCBwb3NpeF9hY2wgKmFjbCkKK3sKKwlpZiAoYWNsKQorCQlhdG9taWNfaW5jKCZhY2wtPmFfcmVmY291bnQpOworCXJldHVybiBhY2w7Cit9CisKKy8qCisgKiBGcmVlIGFuIEFDTCBoYW5kbGUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorcG9zaXhfYWNsX3JlbGVhc2Uoc3RydWN0IHBvc2l4X2FjbCAqYWNsKQoreworCWlmIChhY2wgJiYgYXRvbWljX2RlY19hbmRfdGVzdCgmYWNsLT5hX3JlZmNvdW50KSkKKwkJa2ZyZWUoYWNsKTsKK30KKworCisvKiBwb3NpeF9hY2wuYyAqLworCitleHRlcm4gc3RydWN0IHBvc2l4X2FjbCAqcG9zaXhfYWNsX2FsbG9jKGludCwgdW5zaWduZWQgaW50IF9fbm9jYXN0KTsKK2V4dGVybiBzdHJ1Y3QgcG9zaXhfYWNsICpwb3NpeF9hY2xfY2xvbmUoY29uc3Qgc3RydWN0IHBvc2l4X2FjbCAqLCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QpOworZXh0ZXJuIGludCBwb3NpeF9hY2xfdmFsaWQoY29uc3Qgc3RydWN0IHBvc2l4X2FjbCAqKTsKK2V4dGVybiBpbnQgcG9zaXhfYWNsX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICosIGNvbnN0IHN0cnVjdCBwb3NpeF9hY2wgKiwgaW50KTsKK2V4dGVybiBzdHJ1Y3QgcG9zaXhfYWNsICpwb3NpeF9hY2xfZnJvbV9tb2RlKG1vZGVfdCwgdW5zaWduZWQgaW50IF9fbm9jYXN0KTsKK2V4dGVybiBpbnQgcG9zaXhfYWNsX2VxdWl2X21vZGUoY29uc3Qgc3RydWN0IHBvc2l4X2FjbCAqLCBtb2RlX3QgKik7CitleHRlcm4gaW50IHBvc2l4X2FjbF9jcmVhdGVfbWFzcShzdHJ1Y3QgcG9zaXhfYWNsICosIG1vZGVfdCAqKTsKK2V4dGVybiBpbnQgcG9zaXhfYWNsX2NobW9kX21hc3Eoc3RydWN0IHBvc2l4X2FjbCAqLCBtb2RlX3QpOworCitleHRlcm4gc3RydWN0IHBvc2l4X2FjbCAqZ2V0X3Bvc2l4X2FjbChzdHJ1Y3QgaW5vZGUgKiwgaW50KTsKK2V4dGVybiBpbnQgc2V0X3Bvc2l4X2FjbChzdHJ1Y3QgaW5vZGUgKiwgaW50LCBzdHJ1Y3QgcG9zaXhfYWNsICopOworCisjZW5kaWYgIC8qIF9fTElOVVhfUE9TSVhfQUNMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcG9zaXhfYWNsX3hhdHRyLmggYi9pbmNsdWRlL2xpbnV4L3Bvc2l4X2FjbF94YXR0ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlZmQwYTYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3Bvc2l4X2FjbF94YXR0ci5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgIEZpbGU6IGxpbnV4L3Bvc2l4X2FjbF94YXR0ci5oCisKKyAgRXh0ZW5kZWQgYXR0cmlidXRlIHN5c3RlbSBjYWxsIHJlcHJlc2VudGF0aW9uIG9mIEFjY2VzcyBDb250cm9sIExpc3RzLgorCisgIENvcHlyaWdodCAoQykgMjAwMCBieSBBbmRyZWFzIEdydWVuYmFjaGVyIDxhLmdydWVuYmFjaGVyQGNvbXB1dGVyLm9yZz4KKyAgQ29weXJpZ2h0IChDKSAyMDAyIFNHSSAtIFNpbGljb24gR3JhcGhpY3MsIEluYyA8bGludXgteGZzQG9zcy5zZ2kuY29tPgorICovCisjaWZuZGVmIF9QT1NJWF9BQ0xfWEFUVFJfSAorI2RlZmluZSBfUE9TSVhfQUNMX1hBVFRSX0gKKworI2luY2x1ZGUgPGxpbnV4L3Bvc2l4X2FjbC5oPgorCisvKiBFeHRlbmRlZCBhdHRyaWJ1dGUgbmFtZXMgKi8KKyNkZWZpbmUgUE9TSVhfQUNMX1hBVFRSX0FDQ0VTUwkic3lzdGVtLnBvc2l4X2FjbF9hY2Nlc3MiCisjZGVmaW5lIFBPU0lYX0FDTF9YQVRUUl9ERUZBVUxUCSJzeXN0ZW0ucG9zaXhfYWNsX2RlZmF1bHQiCisKKy8qIFN1cHBvcnRlZCBBQ0wgYV92ZXJzaW9uIGZpZWxkcyAqLworI2RlZmluZSBQT1NJWF9BQ0xfWEFUVFJfVkVSU0lPTgkweDAwMDIKKworCisvKiBBbiB1bmRlZmluZWQgZW50cnkgZV9pZCB2YWx1ZSAqLworI2RlZmluZSBBQ0xfVU5ERUZJTkVEX0lECSgtMSkKKwordHlwZWRlZiBzdHJ1Y3QgeworCV9fdTE2CQkJZV90YWc7CisJX191MTYJCQllX3Blcm07CisJX191MzIJCQllX2lkOworfSBwb3NpeF9hY2xfeGF0dHJfZW50cnk7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlfX3UzMgkJCWFfdmVyc2lvbjsKKwlwb3NpeF9hY2xfeGF0dHJfZW50cnkJYV9lbnRyaWVzWzBdOworfSBwb3NpeF9hY2xfeGF0dHJfaGVhZGVyOworCisKK3N0YXRpYyBpbmxpbmUgc2l6ZV90Citwb3NpeF9hY2xfeGF0dHJfc2l6ZShpbnQgY291bnQpCit7CisJcmV0dXJuIChzaXplb2YocG9zaXhfYWNsX3hhdHRyX2hlYWRlcikgKworCQkoY291bnQgKiBzaXplb2YocG9zaXhfYWNsX3hhdHRyX2VudHJ5KSkpOworfQorCitzdGF0aWMgaW5saW5lIGludAorcG9zaXhfYWNsX3hhdHRyX2NvdW50KHNpemVfdCBzaXplKQoreworCWlmIChzaXplIDwgc2l6ZW9mKHBvc2l4X2FjbF94YXR0cl9oZWFkZXIpKQorCQlyZXR1cm4gLTE7CisJc2l6ZSAtPSBzaXplb2YocG9zaXhfYWNsX3hhdHRyX2hlYWRlcik7CisJaWYgKHNpemUgJSBzaXplb2YocG9zaXhfYWNsX3hhdHRyX2VudHJ5KSkKKwkJcmV0dXJuIC0xOworCXJldHVybiBzaXplIC8gc2l6ZW9mKHBvc2l4X2FjbF94YXR0cl9lbnRyeSk7Cit9CisKKyNlbmRpZgkvKiBfUE9TSVhfQUNMX1hBVFRSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcG9zaXhfdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvcG9zaXhfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDRjOThjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9wb3NpeF90eXBlcy5oCkBAIC0wLDAgKzEsNDkgQEAKKyNpZm5kZWYgX0xJTlVYX1BPU0lYX1RZUEVTX0gKKyNkZWZpbmUgX0xJTlVYX1BPU0lYX1RZUEVTX0gKKworI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgorCisvKgorICogVGhpcyBhbGxvd3MgZm9yIDEwMjQgZmlsZSBkZXNjcmlwdG9yczogaWYgTlJfT1BFTiBpcyBldmVyIGdyb3duCisgKiBiZXlvbmQgdGhhdCB5b3UnbGwgaGF2ZSB0byBjaGFuZ2UgdGhpcyB0b28uIEJ1dCAxMDI0IGZkJ3Mgc2VlbSB0byBiZQorICogZW5vdWdoIGV2ZW4gZm9yIHN1Y2ggInJlYWwiIHVuaWNlcyBsaWtlIE9TRi8xLCBzbyBob3BlZnVsbHkgdGhpcyBpcworICogb25lIGxpbWl0IHRoYXQgZG9lc24ndCBoYXZlIHRvIGJlIGNoYW5nZWQgW2FnYWluXS4KKyAqCisgKiBOb3RlIHRoYXQgUE9TSVggd2FudHMgdGhlIEZEX0NMRUFSKGZkLGZkc2V0cCkgZGVmaW5lcyB0byBiZSBpbgorICogPHN5cy90aW1lLmg+IChhbmQgdGh1cyA8bGludXgvdGltZS5oPikgLSBidXQgdGhpcyBpcyBhIG1vcmUgbG9naWNhbAorICogcGxhY2UgZm9yIHRoZW0uIFNvbHZlZCBieSBoYXZpbmcgZHVtbXkgZGVmaW5lcyBpbiA8c3lzL3RpbWUuaD4uCisgKi8KKworLyoKKyAqIFRob3NlIG1hY3JvcyBtYXkgaGF2ZSBiZWVuIGRlZmluZWQgaW4gPGdudS90eXBlcy5oPi4gQnV0IHdlIGFsd2F5cworICogdXNlIHRoZSBvbmVzIGhlcmUuIAorICovCisjdW5kZWYgX19ORkRCSVRTCisjZGVmaW5lIF9fTkZEQklUUwkoOCAqIHNpemVvZih1bnNpZ25lZCBsb25nKSkKKworI3VuZGVmIF9fRkRfU0VUU0laRQorI2RlZmluZSBfX0ZEX1NFVFNJWkUJMTAyNAorCisjdW5kZWYgX19GRFNFVF9MT05HUworI2RlZmluZSBfX0ZEU0VUX0xPTkdTCShfX0ZEX1NFVFNJWkUvX19ORkRCSVRTKQorCisjdW5kZWYgX19GREVMVAorI2RlZmluZQlfX0ZERUxUKGQpCSgoZCkgLyBfX05GREJJVFMpCisKKyN1bmRlZiBfX0ZETUFTSworI2RlZmluZQlfX0ZETUFTSyhkKQkoMVVMIDw8ICgoZCkgJSBfX05GREJJVFMpKQorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgbG9uZyBmZHNfYml0cyBbX19GRFNFVF9MT05HU107Cit9IF9fa2VybmVsX2ZkX3NldDsKKworLyogVHlwZSBvZiBhIHNpZ25hbCBoYW5kbGVyLiAgKi8KK3R5cGVkZWYgdm9pZCAoKl9fa2VybmVsX3NpZ2hhbmRsZXJfdCkoaW50KTsKKworLyogVHlwZSBvZiBhIFNZU1YgSVBDIGtleS4gICovCit0eXBlZGVmIGludCBfX2tlcm5lbF9rZXlfdDsKK3R5cGVkZWYgaW50IF9fa2VybmVsX21xZF90OworCisjaW5jbHVkZSA8YXNtL3Bvc2l4X3R5cGVzLmg+CisKKyNlbmRpZiAvKiBfTElOVVhfUE9TSVhfVFlQRVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wcGRldi5oIGIvaW5jbHVkZS9saW51eC9wcGRldi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0MWM5NjUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3BwZGV2LmgKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBsaW51eC9kcml2ZXJzL2NoYXIvcHBkZXYuaAorICoKKyAqIFVzZXItc3BhY2UgcGFyYWxsZWwgcG9ydCBkZXZpY2UgZHJpdmVyIChoZWFkZXIgZmlsZSkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4LTkgVGltIFdhdWdoIDx0aW1AY3liZXJlbGsuZGVtb24uY28udWs+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBBZGRlZCBQUEdFVFRJTUUvUFBTRVRUSU1FLCBGcmVkIEJhcm5lcywgMTk5OQorICogQWRkZWQgUFBHRVRNT0RFUy9QUEdFVE1PREUvUFBHRVRQSEFTRSwgRnJlZCBCYXJuZXMgPGZybWIyQHVrYy5hYy51az4sIDAzLzAxLzIwMDEKKyAqLworCisjZGVmaW5lIFBQX01BSk9SCTk5CisKKyNkZWZpbmUgUFBfSU9DVEwJJ3AnCisKKy8qIFNldCBtb2RlIGZvciByZWFkL3dyaXRlIChlLmcuIElFRUUxMjg0X01PREVfRVBQKSAqLworI2RlZmluZSBQUFNFVE1PREUJX0lPVyhQUF9JT0NUTCwgMHg4MCwgaW50KQorCisvKiBSZWFkIHN0YXR1cyAqLworI2RlZmluZSBQUFJTVEFUVVMJX0lPUihQUF9JT0NUTCwgMHg4MSwgdW5zaWduZWQgY2hhcikKKyNkZWZpbmUgUFBXU1RBVFVTCU9CU09MRVRFX19JT1coUFBfSU9DVEwsIDB4ODIsIHVuc2lnbmVkIGNoYXIpCisKKy8qIFJlYWQvd3JpdGUgY29udHJvbCAqLworI2RlZmluZSBQUFJDT05UUk9MCV9JT1IoUFBfSU9DVEwsIDB4ODMsIHVuc2lnbmVkIGNoYXIpCisjZGVmaW5lIFBQV0NPTlRST0wJX0lPVyhQUF9JT0NUTCwgMHg4NCwgdW5zaWduZWQgY2hhcikKKworc3RydWN0IHBwZGV2X2Zyb2Jfc3RydWN0IHsKKwl1bnNpZ25lZCBjaGFyIG1hc2s7CisJdW5zaWduZWQgY2hhciB2YWw7Cit9OworI2RlZmluZSBQUEZDT05UUk9MICAgICAgX0lPVyhQUF9JT0NUTCwgMHg4ZSwgc3RydWN0IHBwZGV2X2Zyb2Jfc3RydWN0KQorCisvKiBSZWFkL3dyaXRlIGRhdGEgKi8KKyNkZWZpbmUgUFBSREFUQQkJX0lPUihQUF9JT0NUTCwgMHg4NSwgdW5zaWduZWQgY2hhcikKKyNkZWZpbmUgUFBXREFUQQkJX0lPVyhQUF9JT0NUTCwgMHg4NiwgdW5zaWduZWQgY2hhcikKKworLyogUmVhZC93cml0ZSBlY29udHJvbCAobm90IHVzZWQpICovCisjZGVmaW5lIFBQUkVDT05UUk9MCU9CU09MRVRFX19JT1IoUFBfSU9DVEwsIDB4ODcsIHVuc2lnbmVkIGNoYXIpCisjZGVmaW5lIFBQV0VDT05UUk9MCU9CU09MRVRFX19JT1coUFBfSU9DVEwsIDB4ODgsIHVuc2lnbmVkIGNoYXIpCisKKy8qIFJlYWQvd3JpdGUgRklGTyAobm90IHVzZWQpICovCisjZGVmaW5lIFBQUkZJRk8JCU9CU09MRVRFX19JT1IoUFBfSU9DVEwsIDB4ODksIHVuc2lnbmVkIGNoYXIpCisjZGVmaW5lIFBQV0ZJRk8JCU9CU09MRVRFX19JT1coUFBfSU9DVEwsIDB4OGEsIHVuc2lnbmVkIGNoYXIpCisKKy8qIENsYWltIHRoZSBwb3J0IHRvIHN0YXJ0IHVzaW5nIGl0ICovCisjZGVmaW5lIFBQQ0xBSU0JCV9JTyhQUF9JT0NUTCwgMHg4YikKKworLyogUmVsZWFzZSB0aGUgcG9ydCB3aGVuIHlvdSBhcmVuJ3QgdXNpbmcgaXQgKi8KKyNkZWZpbmUgUFBSRUxFQVNFCV9JTyhQUF9JT0NUTCwgMHg4YykKKworLyogWWllbGQgdGhlIHBvcnQgKHJlbGVhc2UgaXQgaWYgYW5vdGhlciBkcml2ZXIgaXMgd2FpdGluZywKKyAqIHRoZW4gcmVjbGFpbSkgKi8KKyNkZWZpbmUgUFBZSUVMRAkJX0lPKFBQX0lPQ1RMLCAweDhkKQorCisvKiBSZWdpc3RlciBkZXZpY2UgZXhjbHVzaXZlbHkgKG11c3QgYmUgYmVmb3JlIFBQQ0xBSU0pLiAqLworI2RlZmluZSBQUEVYQ0wJCV9JTyhQUF9JT0NUTCwgMHg4ZikKKworLyogRGF0YSBsaW5lIGRpcmVjdGlvbjogbm9uLXplcm8gZm9yIGlucHV0IG1vZGUuICovCisjZGVmaW5lIFBQREFUQURJUglfSU9XKFBQX0lPQ1RMLCAweDkwLCBpbnQpCisKKy8qIE5lZ290aWF0ZSBhIHBhcnRpY3VsYXIgSUVFRSAxMjg0IG1vZGUuICovCisjZGVmaW5lIFBQTkVHT1QJCV9JT1coUFBfSU9DVEwsIDB4OTEsIGludCkKKworLyogU2V0IGNvbnRyb2wgbGluZXMgd2hlbiBhbiBpbnRlcnJ1cHQgb2NjdXJzLiAqLworI2RlZmluZSBQUFdDVExPTklSUQlfSU9XKFBQX0lPQ1RMLCAweDkyLCB1bnNpZ25lZCBjaGFyKQorCisvKiBDbGVhciAoYW5kIHJldHVybikgaW50ZXJydXB0IGNvdW50LiAqLworI2RlZmluZSBQUENMUklSUQlfSU9SKFBQX0lPQ1RMLCAweDkzLCBpbnQpCisKKy8qIFNldCB0aGUgSUVFRSAxMjg0IHBoYXNlIHRoYXQgd2UncmUgaW4gKGUuZy4gSUVFRTEyODRfUEhfRldEX0lETEUpICovCisjZGVmaW5lIFBQU0VUUEhBU0UJX0lPVyhQUF9JT0NUTCwgMHg5NCwgaW50KQorCisvKiBTZXQgYW5kIGdldCBwb3J0IHRpbWVvdXQgKHN0cnVjdCB0aW1ldmFsJ3MpICovCisjZGVmaW5lIFBQR0VUVElNRQlfSU9SKFBQX0lPQ1RMLCAweDk1LCBzdHJ1Y3QgdGltZXZhbCkKKyNkZWZpbmUgUFBTRVRUSU1FCV9JT1coUFBfSU9DVEwsIDB4OTYsIHN0cnVjdCB0aW1ldmFsKQorCisvKiBHZXQgYXZhaWxhYmxlIG1vZGVzICh3aGF0IHRoZSBoYXJkd2FyZSBjYW4gZG8pICovCisjZGVmaW5lIFBQR0VUTU9ERVMJX0lPUihQUF9JT0NUTCwgMHg5NywgdW5zaWduZWQgaW50KQorCisvKiBHZXQgdGhlIGN1cnJlbnQgbW9kZSBhbmQgcGhhemUgKi8KKyNkZWZpbmUgUFBHRVRNT0RFCV9JT1IoUFBfSU9DVEwsIDB4OTgsIGludCkKKyNkZWZpbmUgUFBHRVRQSEFTRQlfSU9SKFBQX0lPQ1RMLCAweDk5LCBpbnQpCisKKy8qIGdldC9zZXQgZmxhZ3MgKi8KKyNkZWZpbmUgUFBHRVRGTEFHUwlfSU9SKFBQX0lPQ1RMLCAweDlhLCBpbnQpCisjZGVmaW5lIFBQU0VURkxBR1MJX0lPVyhQUF9JT0NUTCwgMHg5YiwgaW50KQorCisvKiBmbGFncyB2aXNpYmxlIHRvIHRoZSB3b3JsZCAqLworI2RlZmluZSBQUF9GQVNUV1JJVEUJKDE8PDIpCisjZGVmaW5lIFBQX0ZBU1RSRUFECSgxPDwzKQorI2RlZmluZSBQUF9XOTEyODRQSUMJKDE8PDQpCisKKy8qIG9ubHkgbWFza3MgdXNlci12aXNpYmxlIGZsYWdzICovCisjZGVmaW5lIFBQX0ZMQUdNQVNLCShQUF9GQVNUV1JJVEUgfCBQUF9GQVNUUkVBRCB8IFBQX1c5MTI4NFBJQykKKworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BwcC1jb21wLmggYi9pbmNsdWRlL2xpbnV4L3BwcC1jb21wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzIyN2U2NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvcHBwLWNvbXAuaApAQCAtMCwwICsxLDIwNyBAQAorLyoKKyAqIHBwcC1jb21wLmggLSBEZWZpbml0aW9ucyBmb3IgZG9pbmcgUFBQIHBhY2tldCBjb21wcmVzc2lvbi4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTQgVGhlIEF1c3RyYWxpYW4gTmF0aW9uYWwgVW5pdmVyc2l0eS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCisgKiBkb2N1bWVudGF0aW9uIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMuICBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSwgZXhwcmVzcyBvciBpbXBsaWVkLiBUaGUgQXVzdHJhbGlhbiBOYXRpb25hbCBVbml2ZXJzaXR5CisgKiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yCisgKiBhbnkgcHVycG9zZS4KKyAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVTVFJBTElBTiBOQVRJT05BTCBVTklWRVJTSVRZIEJFIExJQUJMRSBUTyBBTlkKKyAqIFBBUlRZIEZPUiBESVJFQ1QsIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIEFSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT04sIEVWRU4gSUYKKyAqIFRIRSBBVVNUUkFMSUFOIE5BVElPTkFMIFVOSVZFUlNJVFkgSEFWRSBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZCisgKiBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiBUSEUgQVVTVFJBTElBTiBOQVRJT05BTCBVTklWRVJTSVRZIFNQRUNJRklDQUxMWSBESVNDTEFJTVMgQU5ZIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkKKyAqIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBTT0ZUV0FSRSBQUk9WSURFRCBIRVJFVU5ERVIgSVMKKyAqIE9OIEFOICJBUyBJUyIgQkFTSVMsIEFORCBUSEUgQVVTVFJBTElBTiBOQVRJT05BTCBVTklWRVJTSVRZIEhBUyBOTworICogT0JMSUdBVElPTiBUTyBQUk9WSURFIE1BSU5URU5BTkNFLCBTVVBQT1JULCBVUERBVEVTLCBFTkhBTkNFTUVOVFMsCisgKiBPUiBNT0RJRklDQVRJT05TLgorICoKKyAqICRJZDogcHBwLWNvbXAuaCx2IDEuNiAxOTk3LzExLzI3IDA2OjA0OjQ0IHBhdWx1cyBFeHAgJAorICovCisKKy8qCisgKiAgPT1GSUxFVkVSU0lPTiA5ODAzMTk9PQorICoKKyAqICBOT1RFIFRPIE1BSU5UQUlORVJTOgorICogICAgIElmIHlvdSBtb2RpZnkgdGhpcyBmaWxlIGF0IGFsbCwgcGxlYXNlIHNldCB0aGUgYWJvdmUgZGF0ZS4KKyAqICAgICBwcHAtY29tcC5oIGlzIHNoaXBwZWQgd2l0aCBhIFBQUCBkaXN0cmlidXRpb24gYXMgd2VsbCBhcyB3aXRoIHRoZSBrZXJuZWw7CisgKiAgICAgaWYgZXZlcnlvbmUgaW5jcmVhc2VzIHRoZSBGSUxFVkVSU0lPTiBudW1iZXIgYWJvdmUsIHRoZW4gc2NyaXB0cworICogICAgIGNhbiBkbyB0aGUgcmlnaHQgdGhpbmcgd2hlbiBkZWNpZGluZyB3aGV0aGVyIHRvIGluc3RhbGwgYSBuZXcgcHBwLWNvbXAuaAorICogICAgIGZpbGUuICBEb24ndCBjaGFuZ2UgdGhlIGZvcm1hdCBvZiB0aGF0IGxpbmUgb3RoZXJ3aXNlLCBzbyB0aGUKKyAqICAgICBpbnN0YWxsYXRpb24gc2NyaXB0IGNhbiByZWNvZ25pemUgaXQuCisgKi8KKworI2lmbmRlZiBfTkVUX1BQUF9DT01QX0gKKyNkZWZpbmUgX05FVF9QUFBfQ09NUF9ICisKK3N0cnVjdCBtb2R1bGU7CisKKy8qCisgKiBUaGUgZm9sbG93aW5nIHN5bWJvbHMgY29udHJvbCB3aGV0aGVyIHdlIGluY2x1ZGUgY29kZSBmb3IKKyAqIHZhcmlvdXMgY29tcHJlc3Npb24gbWV0aG9kcy4KKyAqLworCisjaWZuZGVmIERPX0JTRF9DT01QUkVTUworI2RlZmluZSBET19CU0RfQ09NUFJFU1MJMQkvKiBieSBkZWZhdWx0LCBpbmNsdWRlIEJTRC1Db21wcmVzcyAqLworI2VuZGlmCisjaWZuZGVmIERPX0RFRkxBVEUKKyNkZWZpbmUgRE9fREVGTEFURQkxCS8qIGJ5IGRlZmF1bHQsIGluY2x1ZGUgRGVmbGF0ZSAqLworI2VuZGlmCisjZGVmaW5lIERPX1BSRURJQ1RPUl8xCTAKKyNkZWZpbmUgRE9fUFJFRElDVE9SXzIJMAorCisvKgorICogU3RydWN0dXJlIGdpdmluZyBtZXRob2RzIGZvciBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uLgorICovCisKK3N0cnVjdCBjb21wcmVzc29yIHsKKwlpbnQJY29tcHJlc3NfcHJvdG87CS8qIENDUCBjb21wcmVzc2lvbiBwcm90b2NvbCBudW1iZXIgKi8KKworCS8qIEFsbG9jYXRlIHNwYWNlIGZvciBhIGNvbXByZXNzb3IgKHRyYW5zbWl0IHNpZGUpICovCisJdm9pZAkqKCpjb21wX2FsbG9jKSAodW5zaWduZWQgY2hhciAqb3B0aW9ucywgaW50IG9wdF9sZW4pOworCisJLyogRnJlZSBzcGFjZSB1c2VkIGJ5IGEgY29tcHJlc3NvciAqLworCXZvaWQJKCpjb21wX2ZyZWUpICh2b2lkICpzdGF0ZSk7CisKKwkvKiBJbml0aWFsaXplIGEgY29tcHJlc3NvciAqLworCWludAkoKmNvbXBfaW5pdCkgKHZvaWQgKnN0YXRlLCB1bnNpZ25lZCBjaGFyICpvcHRpb25zLAorCQkJICAgICAgaW50IG9wdF9sZW4sIGludCB1bml0LCBpbnQgb3B0aGRyLCBpbnQgZGVidWcpOworCisJLyogUmVzZXQgYSBjb21wcmVzc29yICovCisJdm9pZAkoKmNvbXBfcmVzZXQpICh2b2lkICpzdGF0ZSk7CisKKwkvKiBDb21wcmVzcyBhIHBhY2tldCAqLworCWludCAgICAgKCpjb21wcmVzcykgKHZvaWQgKnN0YXRlLCB1bnNpZ25lZCBjaGFyICpycHRyLAorCQkJICAgICAgdW5zaWduZWQgY2hhciAqb2J1ZiwgaW50IGlzaXplLCBpbnQgb3NpemUpOworCisJLyogUmV0dXJuIGNvbXByZXNzaW9uIHN0YXRpc3RpY3MgKi8KKwl2b2lkCSgqY29tcF9zdGF0KSAodm9pZCAqc3RhdGUsIHN0cnVjdCBjb21wc3RhdCAqc3RhdHMpOworCisJLyogQWxsb2NhdGUgc3BhY2UgZm9yIGEgZGVjb21wcmVzc29yIChyZWNlaXZlIHNpZGUpICovCisJdm9pZAkqKCpkZWNvbXBfYWxsb2MpICh1bnNpZ25lZCBjaGFyICpvcHRpb25zLCBpbnQgb3B0X2xlbik7CisKKwkvKiBGcmVlIHNwYWNlIHVzZWQgYnkgYSBkZWNvbXByZXNzb3IgKi8KKwl2b2lkCSgqZGVjb21wX2ZyZWUpICh2b2lkICpzdGF0ZSk7CisKKwkvKiBJbml0aWFsaXplIGEgZGVjb21wcmVzc29yICovCisJaW50CSgqZGVjb21wX2luaXQpICh2b2lkICpzdGF0ZSwgdW5zaWduZWQgY2hhciAqb3B0aW9ucywKKwkJCQlpbnQgb3B0X2xlbiwgaW50IHVuaXQsIGludCBvcHRoZHIsIGludCBtcnUsCisJCQkJaW50IGRlYnVnKTsKKworCS8qIFJlc2V0IGEgZGVjb21wcmVzc29yICovCisJdm9pZAkoKmRlY29tcF9yZXNldCkgKHZvaWQgKnN0YXRlKTsKKworCS8qIERlY29tcHJlc3MgYSBwYWNrZXQuICovCisJaW50CSgqZGVjb21wcmVzcykgKHZvaWQgKnN0YXRlLCB1bnNpZ25lZCBjaGFyICppYnVmLCBpbnQgaXNpemUsCisJCQkJdW5zaWduZWQgY2hhciAqb2J1ZiwgaW50IG9zaXplKTsKKworCS8qIFVwZGF0ZSBzdGF0ZSBmb3IgYW4gaW5jb21wcmVzc2libGUgcGFja2V0IHJlY2VpdmVkICovCisJdm9pZAkoKmluY29tcCkgKHZvaWQgKnN0YXRlLCB1bnNpZ25lZCBjaGFyICppYnVmLCBpbnQgaWNudCk7CisKKwkvKiBSZXR1cm4gZGVjb21wcmVzc2lvbiBzdGF0aXN0aWNzICovCisJdm9pZAkoKmRlY29tcF9zdGF0KSAodm9pZCAqc3RhdGUsIHN0cnVjdCBjb21wc3RhdCAqc3RhdHMpOworCisJLyogVXNlZCBpbiBsb2NraW5nIGNvbXByZXNzb3IgbW9kdWxlcyAqLworCXN0cnVjdCBtb2R1bGUgKm93bmVyOworfTsKKworLyoKKyAqIFRoZSByZXR1cm4gdmFsdWUgZnJvbSBkZWNvbXByZXNzIHJvdXRpbmUgaXMgdGhlIGxlbmd0aCBvZiB0aGUKKyAqIGRlY29tcHJlc3NlZCBwYWNrZXQgaWYgc3VjY2Vzc2Z1bCwgb3RoZXJ3aXNlIERFQ09NUF9FUlJPUgorICogb3IgREVDT01QX0ZBVEFMRVJST1IgaWYgYW4gZXJyb3Igb2NjdXJyZWQuCisgKiAKKyAqIFdlIG5lZWQgdG8gbWFrZSB0aGlzIGRpc3RpbmN0aW9uIHNvIHRoYXQgd2UgY2FuIGRpc2FibGUgY2VydGFpbgorICogdXNlZnVsIGZ1bmN0aW9uYWxpdHksIG5hbWVseSBzZW5kaW5nIGEgQ0NQIHJlc2V0LXJlcXVlc3QgYXMgYSByZXN1bHQKKyAqIG9mIGFuIGVycm9yIGRldGVjdGVkIGFmdGVyIGRlY29tcHJlc3Npb24uICBUaGlzIGlzIHRvIGF2b2lkIGluZnJpbmdpbmcKKyAqIGEgcGF0ZW50IGhlbGQgYnkgTW90b3JvbGEuCisgKiBEb24ndCB5b3UganVzdCBsdXJ2ZSBzb2Z0d2FyZSBwYXRlbnRzLgorICovCisKKyNkZWZpbmUgREVDT01QX0VSUk9SCQktMQkvKiBlcnJvciBkZXRlY3RlZCBiZWZvcmUgZGVjb21wLiAqLworI2RlZmluZSBERUNPTVBfRkFUQUxFUlJPUgktMgkvKiBlcnJvciBkZXRlY3RlZCBhZnRlciBkZWNvbXAuICovCisKKy8qCisgKiBDQ1AgY29kZXMuCisgKi8KKworI2RlZmluZSBDQ1BfQ09ORlJFUQkxCisjZGVmaW5lIENDUF9DT05GQUNLCTIKKyNkZWZpbmUgQ0NQX1RFUk1SRVEJNQorI2RlZmluZSBDQ1BfVEVSTUFDSwk2CisjZGVmaW5lIENDUF9SRVNFVFJFUQkxNAorI2RlZmluZSBDQ1BfUkVTRVRBQ0sJMTUKKworLyoKKyAqIE1heCAjIGJ5dGVzIGZvciBhIENDUCBvcHRpb24KKyAqLworCisjZGVmaW5lIENDUF9NQVhfT1BUSU9OX0xFTkdUSAkzMgorCisvKgorICogUGFydHMgb2YgYSBDQ1AgcGFja2V0LgorICovCisKKyNkZWZpbmUgQ0NQX0NPREUoZHApCQkoKGRwKVswXSkKKyNkZWZpbmUgQ0NQX0lEKGRwKQkJKChkcClbMV0pCisjZGVmaW5lIENDUF9MRU5HVEgoZHApCQkoKChkcClbMl0gPDwgOCkgKyAoZHApWzNdKQorI2RlZmluZSBDQ1BfSERSTEVOCQk0CisKKyNkZWZpbmUgQ0NQX09QVF9DT0RFKGRwKQkoKGRwKVswXSkKKyNkZWZpbmUgQ0NQX09QVF9MRU5HVEgoZHApCSgoZHApWzFdKQorI2RlZmluZSBDQ1BfT1BUX01JTkxFTgkJMgorCisvKgorICogRGVmaW5pdGlvbnMgZm9yIEJTRC1Db21wcmVzcy4KKyAqLworCisjZGVmaW5lIENJX0JTRF9DT01QUkVTUwkJMjEJLyogY29uZmlnLiBvcHRpb24gZm9yIEJTRC1Db21wcmVzcyAqLworI2RlZmluZSBDSUxFTl9CU0RfQ09NUFJFU1MJMwkvKiBsZW5ndGggb2YgY29uZmlnLiBvcHRpb24gKi8KKworLyogTWFjcm9zIGZvciBoYW5kbGluZyB0aGUgM3JkIGJ5dGUgb2YgdGhlIEJTRC1Db21wcmVzcyBjb25maWcgb3B0aW9uLiAqLworI2RlZmluZSBCU0RfTkJJVFMoeCkJCSgoeCkgJiAweDFGKQkvKiBudW1iZXIgb2YgYml0cyByZXF1ZXN0ZWQgKi8KKyNkZWZpbmUgQlNEX1ZFUlNJT04oeCkJCSgoeCkgPj4gNSkJLyogdmVyc2lvbiBvZiBvcHRpb24gZm9ybWF0ICovCisjZGVmaW5lIEJTRF9DVVJSRU5UX1ZFUlNJT04JMQkJLyogY3VycmVudCB2ZXJzaW9uIG51bWJlciAqLworI2RlZmluZSBCU0RfTUFLRV9PUFQodiwgbikJKCgodikgPDwgNSkgfCAobikpCisKKyNkZWZpbmUgQlNEX01JTl9CSVRTCQk5CS8qIHNtYWxsZXN0IGNvZGUgc2l6ZSBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUgQlNEX01BWF9CSVRTCQkxNQkvKiBsYXJnZXN0IGNvZGUgc2l6ZSBzdXBwb3J0ZWQgKi8KKworLyoKKyAqIERlZmluaXRpb25zIGZvciBEZWZsYXRlLgorICovCisKKyNkZWZpbmUgQ0lfREVGTEFURQkJMjYJLyogY29uZmlnIG9wdGlvbiBmb3IgRGVmbGF0ZSAqLworI2RlZmluZSBDSV9ERUZMQVRFX0RSQUZUCTI0CS8qIHZhbHVlIHVzZWQgaW4gb3JpZ2luYWwgZHJhZnQgUkZDICovCisjZGVmaW5lIENJTEVOX0RFRkxBVEUJCTQJLyogbGVuZ3RoIG9mIGl0cyBjb25maWcgb3B0aW9uICovCisKKyNkZWZpbmUgREVGTEFURV9NSU5fU0laRQk5CisjZGVmaW5lIERFRkxBVEVfTUFYX1NJWkUJMTUKKyNkZWZpbmUgREVGTEFURV9NRVRIT0RfVkFMCTgKKyNkZWZpbmUgREVGTEFURV9TSVpFKHgpCQkoKCh4KSA+PiA0KSArIDgpCisjZGVmaW5lIERFRkxBVEVfTUVUSE9EKHgpCSgoeCkgJiAweDBGKQorI2RlZmluZSBERUZMQVRFX01BS0VfT1BUKHcpCSgoKCh3KSAtIDgpIDw8IDQpICsgREVGTEFURV9NRVRIT0RfVkFMKQorI2RlZmluZSBERUZMQVRFX0NIS19TRVFVRU5DRQkwCisKKy8qCisgKiBEZWZpbml0aW9ucyBmb3Igb3RoZXIsIGFzIHlldCB1bnN1cHBvcnRlZCwgY29tcHJlc3Npb24gbWV0aG9kcy4KKyAqLworCisjZGVmaW5lIENJX1BSRURJQ1RPUl8xCQkxCS8qIGNvbmZpZyBvcHRpb24gZm9yIFByZWRpY3Rvci0xICovCisjZGVmaW5lIENJTEVOX1BSRURJQ1RPUl8xCTIJLyogbGVuZ3RoIG9mIGl0cyBjb25maWcgb3B0aW9uICovCisjZGVmaW5lIENJX1BSRURJQ1RPUl8yCQkyCS8qIGNvbmZpZyBvcHRpb24gZm9yIFByZWRpY3Rvci0yICovCisjZGVmaW5lIENJTEVOX1BSRURJQ1RPUl8yCTIJLyogbGVuZ3RoIG9mIGl0cyBjb25maWcgb3B0aW9uICovCisKKyNpZmRlZiBfX0tFUk5FTF9fCitleHRlcm4gaW50IHBwcF9yZWdpc3Rlcl9jb21wcmVzc29yKHN0cnVjdCBjb21wcmVzc29yICopOworZXh0ZXJuIHZvaWQgcHBwX3VucmVnaXN0ZXJfY29tcHJlc3NvcihzdHJ1Y3QgY29tcHJlc3NvciAqKTsKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfTkVUX1BQUF9DT01QX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaCBiL2luY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTQyODkyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oCkBAIC0wLDAgKzEsODEgQEAKKyNpZm5kZWYgX1BQUF9DSEFOTkVMX0hfCisjZGVmaW5lIF9QUFBfQ0hBTk5FTF9IXworLyoKKyAqIERlZmluaXRpb25zIGZvciB0aGUgaW50ZXJmYWNlIGJldHdlZW4gdGhlIGdlbmVyaWMgUFBQIGNvZGUKKyAqIGFuZCBhIFBQUCBjaGFubmVsLgorICoKKyAqIEEgUFBQIGNoYW5uZWwgcHJvdmlkZXMgYSB3YXkgZm9yIHRoZSBnZW5lcmljIFBQUCBjb2RlIHRvIHNlbmQKKyAqIGFuZCByZWNlaXZlIHBhY2tldHMgb3ZlciBzb21lIHNvcnQgb2YgY29tbXVuaWNhdGlvbnMgbWVkaXVtLgorICogUGFja2V0cyBhcmUgc3RvcmVkIGluIHNrX2J1ZmZzIGFuZCBoYXZlIHRoZSAyLWJ5dGUgUFBQIHByb3RvY29sCisgKiBudW1iZXIgYXQgdGhlIHN0YXJ0LCBidXQgbm90IHRoZSBhZGRyZXNzIGFuZCBjb250cm9sIGJ5dGVzLgorICoKKyAqIENvcHlyaWdodCAxOTk5IFBhdWwgTWFja2VycmFzLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqID09RklMRVZFUlNJT04gMjAwMDAzMjI9PQorICovCisKKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorCitzdHJ1Y3QgcHBwX2NoYW5uZWw7CisKK3N0cnVjdCBwcHBfY2hhbm5lbF9vcHMgeworCS8qIFNlbmQgYSBwYWNrZXQgKG9yIG11bHRpbGluayBmcmFnbWVudCkgb24gdGhpcyBjaGFubmVsLgorCSAgIFJldHVybnMgMSBpZiBpdCB3YXMgYWNjZXB0ZWQsIDAgaWYgbm90LiAqLworCWludAkoKnN0YXJ0X3htaXQpKHN0cnVjdCBwcHBfY2hhbm5lbCAqLCBzdHJ1Y3Qgc2tfYnVmZiAqKTsKKwkvKiBIYW5kbGUgYW4gaW9jdGwgY2FsbCB0aGF0IGhhcyBjb21lIGluIHZpYSAvZGV2L3BwcC4gKi8KKwlpbnQJKCppb2N0bCkoc3RydWN0IHBwcF9jaGFubmVsICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7Cit9OworCitzdHJ1Y3QgcHBwX2NoYW5uZWwgeworCXZvaWQJCSpwcml2YXRlOwkvKiBjaGFubmVsIHByaXZhdGUgZGF0YSAqLworCXN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgKm9wczsJLyogb3BlcmF0aW9ucyBmb3IgdGhpcyBjaGFubmVsICovCisJaW50CQltdHU7CQkvKiBtYXggdHJhbnNtaXQgcGFja2V0IHNpemUgKi8KKwlpbnQJCWhkcmxlbjsJCS8qIGFtb3VudCBvZiBoZWFkcm9vbSBjaGFubmVsIG5lZWRzICovCisJdm9pZAkJKnBwcDsJCS8qIG9wYXF1ZSB0byBjaGFubmVsICovCisJLyogdGhlIGZvbGxvd2luZyBhcmUgbm90IHVzZWQgYXQgcHJlc2VudCAqLworCWludAkJc3BlZWQ7CQkvKiB0cmFuc2ZlciByYXRlIChieXRlcy9zZWNvbmQpICovCisJaW50CQlsYXRlbmN5OwkvKiBvdmVyaGVhZCB0aW1lIGluIG1pbGxpc2Vjb25kcyAqLworfTsKKworI2lmZGVmIF9fS0VSTkVMX18KKy8qIENhbGxlZCBieSB0aGUgY2hhbm5lbCB3aGVuIGl0IGNhbiBzZW5kIHNvbWUgbW9yZSBkYXRhLiAqLworZXh0ZXJuIHZvaWQgcHBwX291dHB1dF93YWtldXAoc3RydWN0IHBwcF9jaGFubmVsICopOworCisvKiBDYWxsZWQgYnkgdGhlIGNoYW5uZWwgdG8gcHJvY2VzcyBhIHJlY2VpdmVkIFBQUCBwYWNrZXQuCisgICBUaGUgcGFja2V0IHNob3VsZCBoYXZlIGp1c3QgdGhlIDItYnl0ZSBQUFAgcHJvdG9jb2wgaGVhZGVyLiAqLworZXh0ZXJuIHZvaWQgcHBwX2lucHV0KHN0cnVjdCBwcHBfY2hhbm5lbCAqLCBzdHJ1Y3Qgc2tfYnVmZiAqKTsKKworLyogQ2FsbGVkIGJ5IHRoZSBjaGFubmVsIHdoZW4gYW4gaW5wdXQgZXJyb3Igb2NjdXJzLCBpbmRpY2F0aW5nCisgICB0aGF0IHdlIG1heSBoYXZlIG1pc3NlZCBhIHBhY2tldC4gKi8KK2V4dGVybiB2b2lkIHBwcF9pbnB1dF9lcnJvcihzdHJ1Y3QgcHBwX2NoYW5uZWwgKiwgaW50IGNvZGUpOworCisvKiBBdHRhY2ggYSBjaGFubmVsIHRvIGEgZ2l2ZW4gUFBQIHVuaXQuICovCitleHRlcm4gaW50IHBwcF9yZWdpc3Rlcl9jaGFubmVsKHN0cnVjdCBwcHBfY2hhbm5lbCAqKTsKKworLyogRGV0YWNoIGEgY2hhbm5lbCBmcm9tIGl0cyBQUFAgdW5pdCAoZS5nLiBvbiBoYW5ndXApLiAqLworZXh0ZXJuIHZvaWQgcHBwX3VucmVnaXN0ZXJfY2hhbm5lbChzdHJ1Y3QgcHBwX2NoYW5uZWwgKik7CisKKy8qIEdldCB0aGUgY2hhbm5lbCBudW1iZXIgZm9yIGEgY2hhbm5lbCAqLworZXh0ZXJuIGludCBwcHBfY2hhbm5lbF9pbmRleChzdHJ1Y3QgcHBwX2NoYW5uZWwgKik7CisKKy8qIEdldCB0aGUgdW5pdCBudW1iZXIgYXNzb2NpYXRlZCB3aXRoIGEgY2hhbm5lbCwgb3IgLTEgaWYgbm9uZSAqLworZXh0ZXJuIGludCBwcHBfdW5pdF9udW1iZXIoc3RydWN0IHBwcF9jaGFubmVsICopOworCisvKgorICogU01QIGxvY2tpbmcgbm90ZXM6CisgKiBUaGUgY2hhbm5lbCBjb2RlIG11c3QgZW5zdXJlIHRoYXQgd2hlbiBpdCBjYWxscyBwcHBfdW5yZWdpc3Rlcl9jaGFubmVsLAorICogbm90aGluZyBpcyBleGVjdXRpbmcgaW4gYW55IG9mIHRoZSBwcm9jZWR1cmVzIGFib3ZlLCBmb3IgdGhhdAorICogY2hhbm5lbC4gIFRoZSBnZW5lcmljIGxheWVyIHdpbGwgZW5zdXJlIHRoYXQgbm90aGluZyBpcyBleGVjdXRpbmcKKyAqIGluIHRoZSBzdGFydF94bWl0IGFuZCBpb2N0bCByb3V0aW5lcyBmb3IgdGhlIGNoYW5uZWwgYnkgdGhlIHRpbWUKKyAqIHRoYXQgcHBwX3VucmVnaXN0ZXJfY2hhbm5lbCByZXR1cm5zLgorICovCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHBwX2RlZnMuaCBiL2luY2x1ZGUvbGludXgvcHBwX2RlZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDIwNTZjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9wcHBfZGVmcy5oCkBAIC0wLDAgKzEsMTkwIEBACisvKgkkSWQ6IHBwcF9kZWZzLmgsdiAxLjIgMTk5NC8wOS8yMSAwMTozMTowNiBwYXVsdXMgRXhwICQJKi8KKworLyoKKyAqIHBwcF9kZWZzLmggLSBQUFAgZGVmaW5pdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk0IFRoZSBBdXN0cmFsaWFuIE5hdGlvbmFsIFVuaXZlcnNpdHkuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cworICogZG9jdW1lbnRhdGlvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCB3aXRob3V0IGFueQorICogd2FycmFudHksIGV4cHJlc3Mgb3IgaW1wbGllZC4gVGhlIEF1c3RyYWxpYW4gTmF0aW9uYWwgVW5pdmVyc2l0eQorICogbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvcgorICogYW55IHB1cnBvc2UuCisgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVU1RSQUxJQU4gTkFUSU9OQUwgVU5JVkVSU0lUWSBCRSBMSUFCTEUgVE8gQU5ZCisgKiBQQVJUWSBGT1IgRElSRUNULCBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OLCBFVkVOIElGCisgKiBUSEUgQVVTVFJBTElBTiBOQVRJT05BTCBVTklWRVJTSVRZIEhBVkUgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWQorICogT0YgU1VDSCBEQU1BR0UuCisgKgorICogVEhFIEFVU1RSQUxJQU4gTkFUSU9OQUwgVU5JVkVSU0lUWSBTUEVDSUZJQ0FMTFkgRElTQ0xBSU1TIEFOWSBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZCisgKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUgU09GVFdBUkUgUFJPVklERUQgSEVSRVVOREVSIElTCisgKiBPTiBBTiAiQVMgSVMiIEJBU0lTLCBBTkQgVEhFIEFVU1RSQUxJQU4gTkFUSU9OQUwgVU5JVkVSU0lUWSBIQVMgTk8KKyAqIE9CTElHQVRJT04gVE8gUFJPVklERSBNQUlOVEVOQU5DRSwgU1VQUE9SVCwgVVBEQVRFUywgRU5IQU5DRU1FTlRTLAorICogT1IgTU9ESUZJQ0FUSU9OUy4KKyAqLworCisvKgorICogID09RklMRVZFUlNJT04gMjAwMDAxMTQ9PQorICoKKyAqICBOT1RFIFRPIE1BSU5UQUlORVJTOgorICogICAgIElmIHlvdSBtb2RpZnkgdGhpcyBmaWxlIGF0IGFsbCwgcGxlYXNlIHNldCB0aGUgYWJvdmUgZGF0ZS4KKyAqICAgICBwcHBfZGVmcy5oIGlzIHNoaXBwZWQgd2l0aCBhIFBQUCBkaXN0cmlidXRpb24gYXMgd2VsbCBhcyB3aXRoIHRoZSBrZXJuZWw7CisgKiAgICAgaWYgZXZlcnlvbmUgaW5jcmVhc2VzIHRoZSBGSUxFVkVSU0lPTiBudW1iZXIgYWJvdmUsIHRoZW4gc2NyaXB0cworICogICAgIGNhbiBkbyB0aGUgcmlnaHQgdGhpbmcgd2hlbiBkZWNpZGluZyB3aGV0aGVyIHRvIGluc3RhbGwgYSBuZXcgcHBwX2RlZnMuaAorICogICAgIGZpbGUuICBEb24ndCBjaGFuZ2UgdGhlIGZvcm1hdCBvZiB0aGF0IGxpbmUgb3RoZXJ3aXNlLCBzbyB0aGUKKyAqICAgICBpbnN0YWxsYXRpb24gc2NyaXB0IGNhbiByZWNvZ25pemUgaXQuCisgKi8KKworI2lmbmRlZiBfUFBQX0RFRlNfSF8KKyNkZWZpbmUgX1BQUF9ERUZTX0hfCisKKyNpbmNsdWRlIDxsaW51eC9jcmMtY2NpdHQuaD4KKworLyoKKyAqIFRoZSBiYXNpYyBQUFAgZnJhbWUuCisgKi8KKyNkZWZpbmUgUFBQX0hEUkxFTgk0CS8qIG9jdGV0cyBmb3Igc3RhbmRhcmQgcHBwIGhlYWRlciAqLworI2RlZmluZSBQUFBfRkNTTEVOCTIJLyogb2N0ZXRzIGZvciBGQ1MgKi8KKyNkZWZpbmUgUFBQX01SVQkJMTUwMAkvKiBkZWZhdWx0IE1SVSA9IG1heCBsZW5ndGggb2YgaW5mbyBmaWVsZCAqLworCisjZGVmaW5lIFBQUF9BRERSRVNTKHApCSgoKF9fdTggKikocCkpWzBdKQorI2RlZmluZSBQUFBfQ09OVFJPTChwKQkoKChfX3U4ICopKHApKVsxXSkKKyNkZWZpbmUgUFBQX1BST1RPQ09MKHApCSgoKChfX3U4ICopKHApKVsyXSA8PCA4KSArICgoX191OCAqKShwKSlbM10pCisKKy8qCisgKiBTaWduaWZpY2FudCBvY3RldCB2YWx1ZXMuCisgKi8KKyNkZWZpbmUJUFBQX0FMTFNUQVRJT05TCTB4ZmYJLyogQWxsLVN0YXRpb25zIGJyb2FkY2FzdCBhZGRyZXNzICovCisjZGVmaW5lCVBQUF9VSQkJMHgwMwkvKiBVbm51bWJlcmVkIEluZm9ybWF0aW9uICovCisjZGVmaW5lCVBQUF9GTEFHCTB4N2UJLyogRmxhZyBTZXF1ZW5jZSAqLworI2RlZmluZQlQUFBfRVNDQVBFCTB4N2QJLyogQXN5bmNocm9ub3VzIENvbnRyb2wgRXNjYXBlICovCisjZGVmaW5lCVBQUF9UUkFOUwkweDIwCS8qIEFzeW5jaHJvbm91cyB0cmFuc3BhcmVuY3kgbW9kaWZpZXIgKi8KKworLyoKKyAqIFByb3RvY29sIGZpZWxkIHZhbHVlcy4KKyAqLworI2RlZmluZSBQUFBfSVAJCTB4MjEJLyogSW50ZXJuZXQgUHJvdG9jb2wgKi8KKyNkZWZpbmUgUFBQX0FUCQkweDI5CS8qIEFwcGxlVGFsayBQcm90b2NvbCAqLworI2RlZmluZSBQUFBfSVBYCQkweDJiCS8qIElQWCBwcm90b2NvbCAqLworI2RlZmluZQlQUFBfVkpDX0NPTVAJMHgyZAkvKiBWSiBjb21wcmVzc2VkIFRDUCAqLworI2RlZmluZQlQUFBfVkpDX1VOQ09NUAkweDJmCS8qIFZKIHVuY29tcHJlc3NlZCBUQ1AgKi8KKyNkZWZpbmUgUFBQX01QCQkweDNkCS8qIE11bHRpbGluayBwcm90b2NvbCAqLworI2RlZmluZSBQUFBfSVBWNgkweDU3CS8qIEludGVybmV0IFByb3RvY29sIFZlcnNpb24gNiAqLworI2RlZmluZSBQUFBfQ09NUEZSQUcJMHhmYgkvKiBmcmFnbWVudCBjb21wcmVzc2VkIGJlbG93IGJ1bmRsZSAqLworI2RlZmluZSBQUFBfQ09NUAkweGZkCS8qIGNvbXByZXNzZWQgcGFja2V0ICovCisjZGVmaW5lIFBQUF9NUExTX1VDCTB4MDI4MQkvKiBNdWx0aSBQcm90b2NvbCBMYWJlbCBTd2l0Y2hpbmcgLSBVbmljYXN0ICovCisjZGVmaW5lIFBQUF9NUExTX01DCTB4MDI4MwkvKiBNdWx0aSBQcm90b2NvbCBMYWJlbCBTd2l0Y2hpbmcgLSBNdWx0aWNhc3QgKi8KKyNkZWZpbmUgUFBQX0lQQ1AJMHg4MDIxCS8qIElQIENvbnRyb2wgUHJvdG9jb2wgKi8KKyNkZWZpbmUgUFBQX0FUQ1AJMHg4MDI5CS8qIEFwcGxlVGFsayBDb250cm9sIFByb3RvY29sICovCisjZGVmaW5lIFBQUF9JUFhDUAkweDgwMmIJLyogSVBYIENvbnRyb2wgUHJvdG9jb2wgKi8KKyNkZWZpbmUgUFBQX0lQVjZDUAkweDgwNTcJLyogSVB2NiBDb250cm9sIFByb3RvY29sICovCisjZGVmaW5lIFBQUF9DQ1BGUkFHCTB4ODBmYgkvKiBDQ1AgYXQgbGluayBsZXZlbCAoYmVsb3cgTVAgYnVuZGxlKSAqLworI2RlZmluZSBQUFBfQ0NQCQkweDgwZmQJLyogQ29tcHJlc3Npb24gQ29udHJvbCBQcm90b2NvbCAqLworI2RlZmluZSBQUFBfTVBMU0NQCTB4ODBmZAkvKiBNUExTIENvbnRyb2wgUHJvdG9jb2wgKi8KKyNkZWZpbmUgUFBQX0xDUAkJMHhjMDIxCS8qIExpbmsgQ29udHJvbCBQcm90b2NvbCAqLworI2RlZmluZSBQUFBfUEFQCQkweGMwMjMJLyogUGFzc3dvcmQgQXV0aGVudGljYXRpb24gUHJvdG9jb2wgKi8KKyNkZWZpbmUgUFBQX0xRUgkJMHhjMDI1CS8qIExpbmsgUXVhbGl0eSBSZXBvcnQgcHJvdG9jb2wgKi8KKyNkZWZpbmUgUFBQX0NIQVAJMHhjMjIzCS8qIENyeXB0b2dyYXBoaWMgSGFuZHNoYWtlIEF1dGguIFByb3RvY29sICovCisjZGVmaW5lIFBQUF9DQkNQCTB4YzAyOQkvKiBDYWxsYmFjayBDb250cm9sIFByb3RvY29sICovCisKKy8qCisgKiBWYWx1ZXMgZm9yIEZDUyBjYWxjdWxhdGlvbnMuCisgKi8KKworI2RlZmluZSBQUFBfSU5JVEZDUwkweGZmZmYJLyogSW5pdGlhbCBGQ1MgdmFsdWUgKi8KKyNkZWZpbmUgUFBQX0dPT0RGQ1MJMHhmMGI4CS8qIEdvb2QgZmluYWwgRkNTIHZhbHVlICovCisjZGVmaW5lIFBQUF9GQ1MoZmNzLCBjKSBjcmNfY2NpdHRfYnl0ZShmY3MsIGMpCisKKy8qCisgKiBFeHRlbmRlZCBhc3luY21hcCAtIGFsbG93cyBhbnkgY2hhcmFjdGVyIHRvIGJlIGVzY2FwZWQuCisgKi8KKwordHlwZWRlZiBfX3UzMgkJZXh0X2FjY21bOF07CisKKy8qCisgKiBXaGF0IHRvIGRvIHdpdGggbmV0d29yayBwcm90b2NvbCAoTlApIHBhY2tldHMuCisgKi8KK2VudW0gTlBtb2RlIHsKKyAgICBOUE1PREVfUEFTUywJCS8qIHBhc3MgdGhlIHBhY2tldCB0aHJvdWdoICovCisgICAgTlBNT0RFX0RST1AsCQkvKiBzaWxlbnRseSBkcm9wIHRoZSBwYWNrZXQgKi8KKyAgICBOUE1PREVfRVJST1IsCQkvKiByZXR1cm4gYW4gZXJyb3IgKi8KKyAgICBOUE1PREVfUVVFVUUJCS8qIHNhdmUgaXQgdXAgZm9yIGxhdGVyLiAqLworfTsKKworLyoKKyAqIFN0YXRpc3RpY3MgZm9yIExRUlAgYW5kIHBwcHN0YXRzCisgKi8KK3N0cnVjdCBwcHBzdGF0CXsKKyAgICBfX3UzMglwcHBfZGlzY2FyZHM7CS8qICMgZnJhbWVzIGRpc2NhcmRlZCAqLworCisgICAgX191MzIJcHBwX2lieXRlczsJLyogYnl0ZXMgcmVjZWl2ZWQgKi8KKyAgICBfX3UzMglwcHBfaW9jdGVjdHM7CS8qIGJ5dGVzIHJlY2VpdmVkIG5vdCBpbiBlcnJvciAqLworICAgIF9fdTMyCXBwcF9pcGFja2V0czsJLyogcGFja2V0cyByZWNlaXZlZCAqLworICAgIF9fdTMyCXBwcF9pZXJyb3JzOwkvKiByZWNlaXZlIGVycm9ycyAqLworICAgIF9fdTMyCXBwcF9pbHFyczsJLyogIyBMUVIgZnJhbWVzIHJlY2VpdmVkICovCisKKyAgICBfX3UzMglwcHBfb2J5dGVzOwkvKiByYXcgYnl0ZXMgc2VudCAqLworICAgIF9fdTMyCXBwcF9vb2N0ZWN0czsJLyogZnJhbWUgYnl0ZXMgc2VudCAqLworICAgIF9fdTMyCXBwcF9vcGFja2V0czsJLyogcGFja2V0cyBzZW50ICovCisgICAgX191MzIJcHBwX29lcnJvcnM7CS8qIHRyYW5zbWl0IGVycm9ycyAqLyAKKyAgICBfX3UzMglwcHBfb2xxcnM7CS8qICMgTFFSIGZyYW1lcyBzZW50ICovCit9OworCitzdHJ1Y3QgdmpzdGF0IHsKKyAgICBfX3UzMgl2anNfcGFja2V0czsJLyogb3V0Ym91bmQgcGFja2V0cyAqLworICAgIF9fdTMyCXZqc19jb21wcmVzc2VkOwkvKiBvdXRib3VuZCBjb21wcmVzc2VkIHBhY2tldHMgKi8KKyAgICBfX3UzMgl2anNfc2VhcmNoZXM7CS8qIHNlYXJjaGVzIGZvciBjb25uZWN0aW9uIHN0YXRlICovCisgICAgX191MzIJdmpzX21pc3NlczsJLyogdGltZXMgY291bGRuJ3QgZmluZCBjb25uLiBzdGF0ZSAqLworICAgIF9fdTMyCXZqc191bmNvbXByZXNzZWRpbjsgLyogaW5ib3VuZCB1bmNvbXByZXNzZWQgcGFja2V0cyAqLworICAgIF9fdTMyCXZqc19jb21wcmVzc2VkaW47ICAgLyogaW5ib3VuZCBjb21wcmVzc2VkIHBhY2tldHMgKi8KKyAgICBfX3UzMgl2anNfZXJyb3JpbjsJLyogaW5ib3VuZCB1bmtub3duIHR5cGUgcGFja2V0cyAqLworICAgIF9fdTMyCXZqc190b3NzZWQ7CS8qIGluYm91bmQgcGFja2V0cyB0b3NzZWQgYmVjYXVzZSBvZiBlcnJvciAqLworfTsKKworc3RydWN0IGNvbXBzdGF0IHsKKyAgICBfX3UzMgl1bmNfYnl0ZXM7CS8qIHRvdGFsIHVuY29tcHJlc3NlZCBieXRlcyAqLworICAgIF9fdTMyCXVuY19wYWNrZXRzOwkvKiB0b3RhbCB1bmNvbXByZXNzZWQgcGFja2V0cyAqLworICAgIF9fdTMyCWNvbXBfYnl0ZXM7CS8qIGNvbXByZXNzZWQgYnl0ZXMgKi8KKyAgICBfX3UzMgljb21wX3BhY2tldHM7CS8qIGNvbXByZXNzZWQgcGFja2V0cyAqLworICAgIF9fdTMyCWluY19ieXRlczsJLyogaW5jb21wcmVzc2libGUgYnl0ZXMgKi8KKyAgICBfX3UzMglpbmNfcGFja2V0czsJLyogaW5jb21wcmVzc2libGUgcGFja2V0cyAqLworCisgICAgLyogdGhlIGNvbXByZXNzaW9uIHJhdGlvIGlzIGRlZmluZWQgYXMgaW5fY291bnQgLyBieXRlc19vdXQgKi8KKyAgICBfX3UzMiAgICAgICBpbl9jb3VudDsJLyogQnl0ZXMgcmVjZWl2ZWQgKi8KKyAgICBfX3UzMiAgICAgICBieXRlc19vdXQ7CS8qIEJ5dGVzIHRyYW5zbWl0dGVkICovCisKKyAgICBkb3VibGUJcmF0aW87CQkvKiBub3QgY29tcHV0ZWQgaW4ga2VybmVsLiAqLworfTsKKworc3RydWN0IHBwcF9zdGF0cyB7CisgICAgc3RydWN0IHBwcHN0YXQJcDsJLyogYmFzaWMgUFBQIHN0YXRpc3RpY3MgKi8KKyAgICBzdHJ1Y3QgdmpzdGF0CXZqOwkvKiBWSiBoZWFkZXIgY29tcHJlc3Npb24gc3RhdGlzdGljcyAqLworfTsKKworc3RydWN0IHBwcF9jb21wX3N0YXRzIHsKKyAgICBzdHJ1Y3QgY29tcHN0YXQJYzsJLyogcGFja2V0IGNvbXByZXNzaW9uIHN0YXRpc3RpY3MgKi8KKyAgICBzdHJ1Y3QgY29tcHN0YXQJZDsJLyogcGFja2V0IGRlY29tcHJlc3Npb24gc3RhdGlzdGljcyAqLworfTsKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIHJlY29yZHMgdGhlIHRpbWUgaW4gc2Vjb25kcyBzaW5jZQorICogdGhlIGxhc3QgTlAgcGFja2V0IHdhcyBzZW50IG9yIHJlY2VpdmVkLgorICovCitzdHJ1Y3QgcHBwX2lkbGUgeworICAgIHRpbWVfdCB4bWl0X2lkbGU7CQkvKiB0aW1lIHNpbmNlIGxhc3QgTlAgcGFja2V0IHNlbnQgKi8KKyAgICB0aW1lX3QgcmVjdl9pZGxlOwkJLyogdGltZSBzaW5jZSBsYXN0IE5QIHBhY2tldCByZWNlaXZlZCAqLworfTsKKworI2lmbmRlZiBfX1AKKyNpZmRlZiBfX1NURENfXworI2RlZmluZSBfX1AoeCkJeAorI2Vsc2UKKyNkZWZpbmUgX19QKHgpCSgpCisjZW5kaWYKKyNlbmRpZgorCisjZW5kaWYgLyogX1BQUF9ERUZTX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ByY3RsLmggYi9pbmNsdWRlL2xpbnV4L3ByY3RsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmYwMjJjNDMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3ByY3RsLmgKQEAgLTAsMCArMSw1NSBAQAorI2lmbmRlZiBfTElOVVhfUFJDVExfSAorI2RlZmluZSBfTElOVVhfUFJDVExfSAorCisvKiBWYWx1ZXMgdG8gcGFzcyBhcyBmaXJzdCBhcmd1bWVudCB0byBwcmN0bCgpICovCisKKyNkZWZpbmUgUFJfU0VUX1BERUFUSFNJRyAgMSAgLyogU2Vjb25kIGFyZyBpcyBhIHNpZ25hbCAqLworI2RlZmluZSBQUl9HRVRfUERFQVRIU0lHICAyICAvKiBTZWNvbmQgYXJnIGlzIGEgcHRyIHRvIHJldHVybiB0aGUgc2lnbmFsICovCisKKy8qIEdldC9zZXQgY3VycmVudC0+bW0tPmR1bXBhYmxlICovCisjZGVmaW5lIFBSX0dFVF9EVU1QQUJMRSAgIDMKKyNkZWZpbmUgUFJfU0VUX0RVTVBBQkxFICAgNAorCisvKiBHZXQvc2V0IHVuYWxpZ25lZCBhY2Nlc3MgY29udHJvbCBiaXRzIChpZiBtZWFuaW5nZnVsKSAqLworI2RlZmluZSBQUl9HRVRfVU5BTElHTgkgIDUKKyNkZWZpbmUgUFJfU0VUX1VOQUxJR04JICA2CisjIGRlZmluZSBQUl9VTkFMSUdOX05PUFJJTlQJMQkvKiBzaWxlbnRseSBmaXggdXAgdW5hbGlnbmVkIHVzZXIgYWNjZXNzZXMgKi8KKyMgZGVmaW5lIFBSX1VOQUxJR05fU0lHQlVTCTIJLyogZ2VuZXJhdGUgU0lHQlVTIG9uIHVuYWxpZ25lZCB1c2VyIGFjY2VzcyAqLworCisvKiBHZXQvc2V0IHdoZXRoZXIgb3Igbm90IHRvIGRyb3AgY2FwYWJpbGl0aWVzIG9uIHNldHVpZCgpIGF3YXkgZnJvbSB1aWQgMCAqLworI2RlZmluZSBQUl9HRVRfS0VFUENBUFMgICA3CisjZGVmaW5lIFBSX1NFVF9LRUVQQ0FQUyAgIDgKKworLyogR2V0L3NldCBmbG9hdGluZy1wb2ludCBlbXVsYXRpb24gY29udHJvbCBiaXRzIChpZiBtZWFuaW5nZnVsKSAqLworI2RlZmluZSBQUl9HRVRfRlBFTVUgIDkKKyNkZWZpbmUgUFJfU0VUX0ZQRU1VIDEwCisjIGRlZmluZSBQUl9GUEVNVV9OT1BSSU5UCTEJLyogc2lsZW50bHkgZW11bGF0ZSBmcCBvcGVyYXRpb25zIGFjY2Vzc2VzICovCisjIGRlZmluZSBQUl9GUEVNVV9TSUdGUEUJMgkvKiBkb24ndCBlbXVsYXRlIGZwIG9wZXJhdGlvbnMsIHNlbmQgU0lHRlBFIGluc3RlYWQgKi8KKworLyogR2V0L3NldCBmbG9hdGluZy1wb2ludCBleGNlcHRpb24gbW9kZSAoaWYgbWVhbmluZ2Z1bCkgKi8KKyNkZWZpbmUgUFJfR0VUX0ZQRVhDCTExCisjZGVmaW5lIFBSX1NFVF9GUEVYQwkxMgorIyBkZWZpbmUgUFJfRlBfRVhDX1NXX0VOQUJMRQkweDgwCS8qIFVzZSBGUEVYQyBmb3IgRlAgZXhjZXB0aW9uIGVuYWJsZXMgKi8KKyMgZGVmaW5lIFBSX0ZQX0VYQ19ESVYJCTB4MDEwMDAwCS8qIGZsb2F0aW5nIHBvaW50IGRpdmlkZSBieSB6ZXJvICovCisjIGRlZmluZSBQUl9GUF9FWENfT1ZGCQkweDAyMDAwMAkvKiBmbG9hdGluZyBwb2ludCBvdmVyZmxvdyAqLworIyBkZWZpbmUgUFJfRlBfRVhDX1VORAkJMHgwNDAwMDAJLyogZmxvYXRpbmcgcG9pbnQgdW5kZXJmbG93ICovCisjIGRlZmluZSBQUl9GUF9FWENfUkVTCQkweDA4MDAwMAkvKiBmbG9hdGluZyBwb2ludCBpbmV4YWN0IHJlc3VsdCAqLworIyBkZWZpbmUgUFJfRlBfRVhDX0lOVgkJMHgxMDAwMDAJLyogZmxvYXRpbmcgcG9pbnQgaW52YWxpZCBvcGVyYXRpb24gKi8KKyMgZGVmaW5lIFBSX0ZQX0VYQ19ESVNBQkxFRAkwCS8qIEZQIGV4Y2VwdGlvbnMgZGlzYWJsZWQgKi8KKyMgZGVmaW5lIFBSX0ZQX0VYQ19OT05SRUNPVgkxCS8qIGFzeW5jIG5vbi1yZWNvdmVyYWJsZSBleGMuIG1vZGUgKi8KKyMgZGVmaW5lIFBSX0ZQX0VYQ19BU1lOQwkyCS8qIGFzeW5jIHJlY292ZXJhYmxlIGV4Y2VwdGlvbiBtb2RlICovCisjIGRlZmluZSBQUl9GUF9FWENfUFJFQ0lTRQkzCS8qIHByZWNpc2UgZXhjZXB0aW9uIG1vZGUgKi8KKworLyogR2V0L3NldCB3aGV0aGVyIHdlIHVzZSBzdGF0aXN0aWNhbCBwcm9jZXNzIHRpbWluZyBvciBhY2N1cmF0ZSB0aW1lc3RhbXAKKyAqIGJhc2VkIHByb2Nlc3MgdGltaW5nICovCisjZGVmaW5lIFBSX0dFVF9USU1JTkcgICAxMworI2RlZmluZSBQUl9TRVRfVElNSU5HICAgMTQKKyMgZGVmaW5lIFBSX1RJTUlOR19TVEFUSVNUSUNBTCAgMCAgICAgICAvKiBOb3JtYWwsIHRyYWRpdGlvbmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlzdGljYWwgcHJvY2VzcyB0aW1pbmcgKi8KKyMgZGVmaW5lIFBSX1RJTUlOR19USU1FU1RBTVAgICAgMSAgICAgICAvKiBBY2N1cmF0ZSB0aW1lc3RhbXAgYmFzZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MgdGltaW5nICovCisKKyNkZWZpbmUgUFJfU0VUX05BTUUgICAgMTUJCS8qIFNldCBwcm9jZXNzIG5hbWUgKi8KKyNkZWZpbmUgUFJfR0VUX05BTUUgICAgMTYJCS8qIEdldCBwcm9jZXNzIG5hbWUgKi8KKworI2VuZGlmIC8qIF9MSU5VWF9QUkNUTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ByZWVtcHQuaCBiL2luY2x1ZGUvbGludXgvcHJlZW1wdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkOThjNTQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3ByZWVtcHQuaApAQCAtMCwwICsxLDYyIEBACisjaWZuZGVmIF9fTElOVVhfUFJFRU1QVF9ICisjZGVmaW5lIF9fTElOVVhfUFJFRU1QVF9ICisKKy8qCisgKiBpbmNsdWRlL2xpbnV4L3ByZWVtcHQuaCAtIG1hY3JvcyBmb3IgYWNjZXNzaW5nIGFuZCBtYW5pcHVsYXRpbmcKKyAqIHByZWVtcHRfY291bnQgKHVzZWQgZm9yIGtlcm5lbCBwcmVlbXB0aW9uLCBpbnRlcnJ1cHQgY291bnQsIGV0Yy4pCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKworI2lmZGVmIENPTkZJR19ERUJVR19QUkVFTVBUCisgIGV4dGVybiB2b2lkIGZhc3RjYWxsIGFkZF9wcmVlbXB0X2NvdW50KGludCB2YWwpOworICBleHRlcm4gdm9pZCBmYXN0Y2FsbCBzdWJfcHJlZW1wdF9jb3VudChpbnQgdmFsKTsKKyNlbHNlCisjIGRlZmluZSBhZGRfcHJlZW1wdF9jb3VudCh2YWwpCWRvIHsgcHJlZW1wdF9jb3VudCgpICs9ICh2YWwpOyB9IHdoaWxlICgwKQorIyBkZWZpbmUgc3ViX3ByZWVtcHRfY291bnQodmFsKQlkbyB7IHByZWVtcHRfY291bnQoKSAtPSAodmFsKTsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisjZGVmaW5lIGluY19wcmVlbXB0X2NvdW50KCkgYWRkX3ByZWVtcHRfY291bnQoMSkKKyNkZWZpbmUgZGVjX3ByZWVtcHRfY291bnQoKSBzdWJfcHJlZW1wdF9jb3VudCgxKQorCisjZGVmaW5lIHByZWVtcHRfY291bnQoKQkoY3VycmVudF90aHJlYWRfaW5mbygpLT5wcmVlbXB0X2NvdW50KQorCisjaWZkZWYgQ09ORklHX1BSRUVNUFQKKworYXNtbGlua2FnZSB2b2lkIHByZWVtcHRfc2NoZWR1bGUodm9pZCk7CisKKyNkZWZpbmUgcHJlZW1wdF9kaXNhYmxlKCkgXAorZG8geyBcCisJaW5jX3ByZWVtcHRfY291bnQoKTsgXAorCWJhcnJpZXIoKTsgXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCkgXAorZG8geyBcCisJYmFycmllcigpOyBcCisJZGVjX3ByZWVtcHRfY291bnQoKTsgXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBwcmVlbXB0X2NoZWNrX3Jlc2NoZWQoKSBcCitkbyB7IFwKKwlpZiAodW5saWtlbHkodGVzdF90aHJlYWRfZmxhZyhUSUZfTkVFRF9SRVNDSEVEKSkpIFwKKwkJcHJlZW1wdF9zY2hlZHVsZSgpOyBcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIHByZWVtcHRfZW5hYmxlKCkgXAorZG8geyBcCisJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOyBcCisJcHJlZW1wdF9jaGVja19yZXNjaGVkKCk7IFwKK30gd2hpbGUgKDApCisKKyNlbHNlCisKKyNkZWZpbmUgcHJlZW1wdF9kaXNhYmxlKCkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgcHJlZW1wdF9lbmFibGUoKQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBwcmVlbXB0X2NoZWNrX3Jlc2NoZWQoKQkJZG8geyB9IHdoaWxlICgwKQorCisjZW5kaWYKKworI2VuZGlmIC8qIF9fTElOVVhfUFJFRU1QVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ByZWZldGNoLmggYi9pbmNsdWRlL2xpbnV4L3ByZWZldGNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM4NmYyNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvcHJlZmV0Y2guaApAQCAtMCwwICsxLDY5IEBACisvKgorICogIEdlbmVyaWMgY2FjaGUgbWFuYWdlbWVudCBmdW5jdGlvbnMuIEV2ZXJ5dGhpbmcgaXMgYXJjaC1zcGVjaWZpYywgIAorICogIGJ1dCB0aGlzIGhlYWRlciBleGlzdHMgdG8gbWFrZSBzdXJlIHRoZSBkZWZpbmVzL2Z1bmN0aW9ucyBjYW4gYmUKKyAqICB1c2VkIGluIGEgZ2VuZXJpYyB3YXkuCisgKgorICogIDIwMDAtMTEtMTMgIEFyamFuIHZhbiBkZSBWZW4gICA8YXJqYW5AZmVucnVzLmRlbW9uLm5sPgorICoKKyAqLworCisjaWZuZGVmIF9MSU5VWF9QUkVGRVRDSF9ICisjZGVmaW5lIF9MSU5VWF9QUkVGRVRDSF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vY2FjaGUuaD4KKworLyoKKwlwcmVmZXRjaCh4KSBhdHRlbXB0cyB0byBwcmUtZW1wdGl2ZWx5IGdldCB0aGUgbWVtb3J5IHBvaW50ZWQgdG8KKwlieSBhZGRyZXNzICJ4IiBpbnRvIHRoZSBDUFUgTDEgY2FjaGUuIAorCXByZWZldGNoKHgpIHNob3VsZCBub3QgY2F1c2UgYW55IGtpbmQgb2YgZXhjZXB0aW9uLCBwcmVmZXRjaCgwKSBpcworCXNwZWNpZmljYWxseSBvay4KKworCXByZWZldGNoKCkgc2hvdWxkIGJlIGRlZmluZWQgYnkgdGhlIGFyY2hpdGVjdHVyZSwgaWYgbm90LCB0aGUgCisJI2RlZmluZSBiZWxvdyBwcm92aWRlcyBhIG5vLW9wIGRlZmluZS4JCisJCisJVGhlcmUgYXJlIDMgcHJlZmV0Y2goKSBtYWNyb3M6CisJCisJcHJlZmV0Y2goeCkgIAktIHByZWZldGNoZXMgdGhlIGNhY2hlbGluZSBhdCAieCIgZm9yIHJlYWQKKwlwcmVmZXRjaHcoeCkJLSBwcmVmZXRjaGVzIHRoZSBjYWNoZWxpbmUgYXQgIngiIGZvciB3cml0ZQorCXNwaW5fbG9ja19wcmVmZXRjaCh4KSAtIHByZWZlY3RjaGVzIHRoZSBzcGlubG9jayAqeCBmb3IgdGFraW5nCisJCisJdGhlcmUgaXMgYWxzbyBQUkVGRVRDSF9TVFJJREUgd2hpY2ggaXMgdGhlIGFyY2hpdGVjdXJlLXByZWZlcmVkIAorCSJsb29rYWhlYWQiIHNpemUgZm9yIHByZWZldGNoaW5nIHN0cmVhbWVkIG9wZXJhdGlvbnMuCisJCisqLworCisvKgorICoJVGhlc2UgY2Fubm90IGJlIGRve313aGlsZSgwKSBtYWNyb3MuIFNlZSB0aGUgbWVudGFsIGd5bW5hc3RpY3MgaW4KKyAqCXRoZSBsb29wIG1hY3JvLgorICovCisgCisjaWZuZGVmIEFSQ0hfSEFTX1BSRUZFVENICitzdGF0aWMgaW5saW5lIHZvaWQgcHJlZmV0Y2goY29uc3Qgdm9pZCAqeCkgezt9CisjZW5kaWYKKworI2lmbmRlZiBBUkNIX0hBU19QUkVGRVRDSFcKK3N0YXRpYyBpbmxpbmUgdm9pZCBwcmVmZXRjaHcoY29uc3Qgdm9pZCAqeCkgezt9CisjZW5kaWYKKworI2lmbmRlZiBBUkNIX0hBU19TUElOTE9DS19QUkVGRVRDSAorI2RlZmluZSBzcGluX2xvY2tfcHJlZmV0Y2goeCkgcHJlZmV0Y2h3KHgpCisjZW5kaWYKKworI2lmbmRlZiBQUkVGRVRDSF9TVFJJREUKKyNkZWZpbmUgUFJFRkVUQ0hfU1RSSURFICg0KkwxX0NBQ0hFX0JZVEVTKQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwcmVmZXRjaF9yYW5nZSh2b2lkICphZGRyLCBzaXplX3QgbGVuKQoreworI2lmZGVmIEFSQ0hfSEFTX1BSRUZFVENICisJY2hhciAqY3A7CisJY2hhciAqZW5kID0gYWRkciArIGxlbjsKKworCWZvciAoY3AgPSBhZGRyOyBjcCA8IGVuZDsgY3AgKz0gUFJFRkVUQ0hfU1RSSURFKQorCQlwcmVmZXRjaChjcCk7CisjZW5kaWYKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ByaW9fdHJlZS5oIGIvaW5jbHVkZS9saW51eC9wcmlvX3RyZWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjA0YWJiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9wcmlvX3RyZWUuaApAQCAtMCwwICsxLDEyMCBAQAorI2lmbmRlZiBfTElOVVhfUFJJT19UUkVFX0gKKyNkZWZpbmUgX0xJTlVYX1BSSU9fVFJFRV9ICisKKy8qCisgKiBLJlIgMm5kIGVkLiBBOC4zIHNvbWV3aGF0IG9ibGlxdWVseSBoaW50cyB0aGF0IGluaXRpYWwgc2VxdWVuY2VzIG9mIHN0cnVjdAorICogZmllbGRzIHdpdGggaWRlbnRpY2FsIHR5cGVzIHNob3VsZCBlbmQgdXAgYXQgdGhlIHNhbWUgbG9jYXRpb24uIFdlJ2xsIHVzZQorICogdGhpcyB1bnRpbCB3ZSBjYW4gc2NyYXAgc3RydWN0IHJhd19wcmlvX3RyZWVfbm9kZS4KKyAqCisgKiBOb3RlOiBhbGwgdGhpcyBjb3VsZCBiZSBkb25lIG1vcmUgZWxlZ2FudGx5IGJ5IHVzaW5nIHVubmFtZWQgdW5pb24vc3RydWN0CisgKiBmaWVsZHMuIEhvd2V2ZXIsIGdjYyAyLjk1LjMgYW5kIGFwcGFyZW50bHkgYWxzbyBnY2MgMy4wLjQgZG9uJ3Qgc3VwcG9ydCB0aGlzCisgKiBsYW5ndWFnZSBleHRlbnNpb24uCisgKi8KKworc3RydWN0IHJhd19wcmlvX3RyZWVfbm9kZSB7CisJc3RydWN0IHByaW9fdHJlZV9ub2RlCSpsZWZ0OworCXN0cnVjdCBwcmlvX3RyZWVfbm9kZQkqcmlnaHQ7CisJc3RydWN0IHByaW9fdHJlZV9ub2RlCSpwYXJlbnQ7Cit9OworCitzdHJ1Y3QgcHJpb190cmVlX25vZGUgeworCXN0cnVjdCBwcmlvX3RyZWVfbm9kZQkqbGVmdDsKKwlzdHJ1Y3QgcHJpb190cmVlX25vZGUJKnJpZ2h0OworCXN0cnVjdCBwcmlvX3RyZWVfbm9kZQkqcGFyZW50OworCXVuc2lnbmVkIGxvbmcJCXN0YXJ0OworCXVuc2lnbmVkIGxvbmcJCWxhc3Q7CS8qIGxhc3QgbG9jYXRpb24gX2luXyBpbnRlcnZhbCAqLworfTsKKworc3RydWN0IHByaW9fdHJlZV9yb290IHsKKwlzdHJ1Y3QgcHJpb190cmVlX25vZGUJKnByaW9fdHJlZV9ub2RlOworCXVuc2lnbmVkIHNob3J0IAkJaW5kZXhfYml0czsKKwl1bnNpZ25lZCBzaG9ydAkJcmF3OworCQkvKgorCQkgKiAwOiBub2RlcyBhcmUgb2YgdHlwZSBzdHJ1Y3QgcHJpb190cmVlX25vZGUKKwkJICogMTogbm9kZXMgYXJlIG9mIHR5cGUgcmF3X3ByaW9fdHJlZV9ub2RlCisJCSAqLworfTsKKworc3RydWN0IHByaW9fdHJlZV9pdGVyIHsKKwlzdHJ1Y3QgcHJpb190cmVlX25vZGUJKmN1cjsKKwl1bnNpZ25lZCBsb25nCQltYXNrOworCXVuc2lnbmVkIGxvbmcJCXZhbHVlOworCWludAkJCXNpemVfbGV2ZWw7CisKKwlzdHJ1Y3QgcHJpb190cmVlX3Jvb3QJKnJvb3Q7CisJcGdvZmZfdAkJCXJfaW5kZXg7CisJcGdvZmZfdAkJCWhfaW5kZXg7Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgcHJpb190cmVlX2l0ZXJfaW5pdChzdHJ1Y3QgcHJpb190cmVlX2l0ZXIgKml0ZXIsCisJCXN0cnVjdCBwcmlvX3RyZWVfcm9vdCAqcm9vdCwgcGdvZmZfdCByX2luZGV4LCBwZ29mZl90IGhfaW5kZXgpCit7CisJaXRlci0+cm9vdCA9IHJvb3Q7CisJaXRlci0+cl9pbmRleCA9IHJfaW5kZXg7CisJaXRlci0+aF9pbmRleCA9IGhfaW5kZXg7CisJaXRlci0+Y3VyID0gTlVMTDsKK30KKworI2RlZmluZSBfX0lOSVRfUFJJT19UUkVFX1JPT1QocHRyLCBfcmF3KQlcCitkbyB7CQkJCQlcCisJKHB0ciktPnByaW9fdHJlZV9ub2RlID0gTlVMTDsJXAorCShwdHIpLT5pbmRleF9iaXRzID0gMTsJCVwKKwkocHRyKS0+cmF3ID0gKF9yYXcpOwkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBJTklUX1BSSU9fVFJFRV9ST09UKHB0cikJX19JTklUX1BSSU9fVFJFRV9ST09UKHB0ciwgMCkKKyNkZWZpbmUgSU5JVF9SQVdfUFJJT19UUkVFX1JPT1QocHRyKQlfX0lOSVRfUFJJT19UUkVFX1JPT1QocHRyLCAxKQorCisjZGVmaW5lIElOSVRfUFJJT19UUkVFX05PREUocHRyKQkJCQlcCitkbyB7CQkJCQkJCQlcCisJKHB0ciktPmxlZnQgPSAocHRyKS0+cmlnaHQgPSAocHRyKS0+cGFyZW50ID0gKHB0cik7CVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgSU5JVF9QUklPX1RSRUVfSVRFUihwdHIpCVwKK2RvIHsJCQkJCVwKKwkocHRyKS0+Y3VyID0gTlVMTDsJCVwKKwkocHRyKS0+bWFzayA9IDBVTDsJCVwKKwkocHRyKS0+dmFsdWUgPSAwVUw7CQlcCisJKHB0ciktPnNpemVfbGV2ZWwgPSAwOwkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBwcmlvX3RyZWVfZW50cnkocHRyLCB0eXBlLCBtZW1iZXIpIFwKKyAgICAgICAoKHR5cGUgKikoKGNoYXIgKikocHRyKS0odW5zaWduZWQgbG9uZykoJigodHlwZSAqKTApLT5tZW1iZXIpKSkKKworc3RhdGljIGlubGluZSBpbnQgcHJpb190cmVlX2VtcHR5KGNvbnN0IHN0cnVjdCBwcmlvX3RyZWVfcm9vdCAqcm9vdCkKK3sKKwlyZXR1cm4gcm9vdC0+cHJpb190cmVlX25vZGUgPT0gTlVMTDsKK30KKworc3RhdGljIGlubGluZSBpbnQgcHJpb190cmVlX3Jvb3QoY29uc3Qgc3RydWN0IHByaW9fdHJlZV9ub2RlICpub2RlKQoreworCXJldHVybiBub2RlLT5wYXJlbnQgPT0gbm9kZTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcHJpb190cmVlX2xlZnRfZW1wdHkoY29uc3Qgc3RydWN0IHByaW9fdHJlZV9ub2RlICpub2RlKQoreworCXJldHVybiBub2RlLT5sZWZ0ID09IG5vZGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHByaW9fdHJlZV9yaWdodF9lbXB0eShjb25zdCBzdHJ1Y3QgcHJpb190cmVlX25vZGUgKm5vZGUpCit7CisJcmV0dXJuIG5vZGUtPnJpZ2h0ID09IG5vZGU7Cit9CisKKworc3RydWN0IHByaW9fdHJlZV9ub2RlICpwcmlvX3RyZWVfcmVwbGFjZShzdHJ1Y3QgcHJpb190cmVlX3Jvb3QgKnJvb3QsCisgICAgICAgICAgICAgICAgc3RydWN0IHByaW9fdHJlZV9ub2RlICpvbGQsIHN0cnVjdCBwcmlvX3RyZWVfbm9kZSAqbm9kZSk7CitzdHJ1Y3QgcHJpb190cmVlX25vZGUgKnByaW9fdHJlZV9pbnNlcnQoc3RydWN0IHByaW9fdHJlZV9yb290ICpyb290LAorICAgICAgICAgICAgICAgIHN0cnVjdCBwcmlvX3RyZWVfbm9kZSAqbm9kZSk7Cit2b2lkIHByaW9fdHJlZV9yZW1vdmUoc3RydWN0IHByaW9fdHJlZV9yb290ICpyb290LCBzdHJ1Y3QgcHJpb190cmVlX25vZGUgKm5vZGUpOworc3RydWN0IHByaW9fdHJlZV9ub2RlICpwcmlvX3RyZWVfbmV4dChzdHJ1Y3QgcHJpb190cmVlX2l0ZXIgKml0ZXIpOworCisjZGVmaW5lIHJhd19wcmlvX3RyZWVfcmVwbGFjZShyb290LCBvbGQsIG5vZGUpIFwKKwlwcmlvX3RyZWVfcmVwbGFjZShyb290LCAoc3RydWN0IHByaW9fdHJlZV9ub2RlICopIChvbGQpLCBcCisJICAgIChzdHJ1Y3QgcHJpb190cmVlX25vZGUgKikgKG5vZGUpKQorI2RlZmluZSByYXdfcHJpb190cmVlX2luc2VydChyb290LCBub2RlKSBcCisJcHJpb190cmVlX2luc2VydChyb290LCAoc3RydWN0IHByaW9fdHJlZV9ub2RlICopIChub2RlKSkKKyNkZWZpbmUgcmF3X3ByaW9fdHJlZV9yZW1vdmUocm9vdCwgbm9kZSkgXAorCXByaW9fdHJlZV9yZW1vdmUocm9vdCwgKHN0cnVjdCBwcmlvX3RyZWVfbm9kZSAqKSAobm9kZSkpCisKKyNlbmRpZiAvKiBfTElOVVhfUFJJT19UUkVFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHJvY19mcy5oIGIvaW5jbHVkZS9saW51eC9wcm9jX2ZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTllNTA1MgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvcHJvY19mcy5oCkBAIC0wLDAgKzEsMjU5IEBACisjaWZuZGVmIF9MSU5VWF9QUk9DX0ZTX0gKKyNkZWZpbmUgX0xJTlVYX1BST0NfRlNfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorCisvKgorICogVGhlIHByb2MgZmlsZXN5c3RlbSBjb25zdGFudHMvc3RydWN0dXJlcworICovCisKKy8qCisgKiBPZmZzZXQgb2YgdGhlIGZpcnN0IHByb2Nlc3MgaW4gdGhlIC9wcm9jIHJvb3QgZGlyZWN0b3J5Li4KKyAqLworI2RlZmluZSBGSVJTVF9QUk9DRVNTX0VOVFJZIDI1NgorCisKKy8qCisgKiBXZSBhbHdheXMgZGVmaW5lIHRoZXNlIGVudW1lcmF0b3JzCisgKi8KKworZW51bSB7CisJUFJPQ19ST09UX0lOTyA9IDEsCit9OworCisjZGVmaW5lIFBST0NfU1VQRVJfTUFHSUMgMHg5ZmEwCisKKy8qCisgKiBUaGlzIGlzIG5vdCBjb21wbGV0ZWx5IGltcGxlbWVudGVkIHlldC4gVGhlIGlkZWEgaXMgdG8KKyAqIGNyZWF0ZSBhbiBpbi1tZW1vcnkgdHJlZSAobGlrZSB0aGUgYWN0dWFsIC9wcm9jIGZpbGVzeXN0ZW0KKyAqIHRyZWUpIG9mIHRoZXNlIHByb2NfZGlyX2VudHJpZXMsIHNvIHRoYXQgd2UgY2FuIGR5bmFtaWNhbGx5CisgKiBhZGQgbmV3IGZpbGVzIHRvIC9wcm9jLgorICoKKyAqIFRoZSAibmV4dCIgcG9pbnRlciBjcmVhdGVzIGEgbGlua2VkIGxpc3Qgb2Ygb25lIC9wcm9jIGRpcmVjdG9yeSwKKyAqIHdoaWxlIHBhcmVudC9zdWJkaXIgY3JlYXRlIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIChldmVyeQorICogL3Byb2MgZmlsZSBoYXMgYSBwYXJlbnQsIGJ1dCAic3ViZGlyIiBpcyBOVUxMIGZvciBhbGwKKyAqIG5vbi1kaXJlY3RvcnkgZW50cmllcykuCisgKgorICogImdldF9pbmZvIiBpcyBjYWxsZWQgYXQgInJlYWQiLCB3aGlsZSAib3duZXIiIGlzIHVzZWQgdG8gcHJvdGVjdCBtb2R1bGUKKyAqIGZyb20gdW5sb2FkaW5nIHdoaWxlIHByb2NfZGlyX2VudHJ5IGlzIGluIHVzZQorICovCisKK3R5cGVkZWYJaW50IChyZWFkX3Byb2NfdCkoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCisJCQkgIGludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpOwordHlwZWRlZglpbnQgKHdyaXRlX3Byb2NfdCkoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCisJCQkgICB1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lkICpkYXRhKTsKK3R5cGVkZWYgaW50IChnZXRfaW5mb190KShjaGFyICosIGNoYXIgKiosIG9mZl90LCBpbnQpOworCitzdHJ1Y3QgcHJvY19kaXJfZW50cnkgeworCXVuc2lnbmVkIGludCBsb3dfaW5vOworCXVuc2lnbmVkIHNob3J0IG5hbWVsZW47CisJY29uc3QgY2hhciAqbmFtZTsKKwltb2RlX3QgbW9kZTsKKwlubGlua190IG5saW5rOworCXVpZF90IHVpZDsKKwlnaWRfdCBnaWQ7CisJdW5zaWduZWQgbG9uZyBzaXplOworCXN0cnVjdCBpbm9kZV9vcGVyYXRpb25zICogcHJvY19pb3BzOworCXN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKiBwcm9jX2ZvcHM7CisJZ2V0X2luZm9fdCAqZ2V0X2luZm87CisJc3RydWN0IG1vZHVsZSAqb3duZXI7CisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpuZXh0LCAqcGFyZW50LCAqc3ViZGlyOworCXZvaWQgKmRhdGE7CisJcmVhZF9wcm9jX3QgKnJlYWRfcHJvYzsKKwl3cml0ZV9wcm9jX3QgKndyaXRlX3Byb2M7CisJYXRvbWljX3QgY291bnQ7CQkvKiB1c2UgY291bnQgKi8KKwlpbnQgZGVsZXRlZDsJCS8qIGRlbGV0ZSBmbGFnICovCit9OworCitzdHJ1Y3Qga2NvcmVfbGlzdCB7CisJc3RydWN0IGtjb3JlX2xpc3QgKm5leHQ7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCXNpemVfdCBzaXplOworfTsKKworI2lmZGVmIENPTkZJR19QUk9DX0ZTCisKK2V4dGVybiBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgcHJvY19yb290OworZXh0ZXJuIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19yb290X2ZzOworZXh0ZXJuIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19uZXQ7CitleHRlcm4gc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX25ldF9zdGF0OworZXh0ZXJuIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19idXM7CitleHRlcm4gc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX3Jvb3RfZHJpdmVyOworZXh0ZXJuIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19yb290X2tjb3JlOworCitleHRlcm4gdm9pZCBwcm9jX3Jvb3RfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIHByb2NfbWlzY19pbml0KHZvaWQpOworCitzdHJ1Y3QgbW1fc3RydWN0OworCitzdHJ1Y3QgZGVudHJ5ICpwcm9jX3BpZF9sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKiBkZW50cnksIHN0cnVjdCBuYW1laWRhdGEgKik7CitzdHJ1Y3QgZGVudHJ5ICpwcm9jX3BpZF91bmhhc2goc3RydWN0IHRhc2tfc3RydWN0ICpwKTsKK3ZvaWQgcHJvY19waWRfZmx1c2goc3RydWN0IGRlbnRyeSAqcHJvY19kZW50cnkpOworaW50IHByb2NfcGlkX3JlYWRkaXIoc3RydWN0IGZpbGUgKiBmaWxwLCB2b2lkICogZGlyZW50LCBmaWxsZGlyX3QgZmlsbGRpcik7Cit1bnNpZ25lZCBsb25nIHRhc2tfdnNpemUoc3RydWN0IG1tX3N0cnVjdCAqKTsKK2ludCB0YXNrX3N0YXRtKHN0cnVjdCBtbV9zdHJ1Y3QgKiwgaW50ICosIGludCAqLCBpbnQgKiwgaW50ICopOworY2hhciAqdGFza19tZW0oc3RydWN0IG1tX3N0cnVjdCAqLCBjaGFyICopOworCitleHRlcm4gc3RydWN0IHByb2NfZGlyX2VudHJ5ICpjcmVhdGVfcHJvY19lbnRyeShjb25zdCBjaGFyICpuYW1lLCBtb2RlX3QgbW9kZSwKKwkJCQkJCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGFyZW50KTsKK2V4dGVybiB2b2lkIHJlbW92ZV9wcm9jX2VudHJ5KGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGFyZW50KTsKKworZXh0ZXJuIHN0cnVjdCB2ZnNtb3VudCAqcHJvY19tbnQ7CitleHRlcm4gaW50IHByb2NfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKix2b2lkICosaW50KTsKK2V4dGVybiBzdHJ1Y3QgaW5vZGUgKnByb2NfZ2V0X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqLCB1bnNpZ25lZCBpbnQsIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqKTsKKworZXh0ZXJuIGludCBwcm9jX21hdGNoKGludCwgY29uc3QgY2hhciAqLHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqKTsKKworLyoKKyAqIFRoZXNlIGFyZSBnZW5lcmljIC9wcm9jIHJvdXRpbmVzIHRoYXQgdXNlIHRoZSBpbnRlcm5hbAorICogInN0cnVjdCBwcm9jX2Rpcl9lbnRyeSIgdHJlZSB0byB0cmF2ZXJzZSB0aGUgZmlsZXN5c3RlbS4KKyAqCisgKiBUaGUgL3Byb2Mgcm9vdCBkaXJlY3RvcnkgaGFzIGV4dGVuZGVkIHZlcnNpb25zIHRvIHRha2UgY2FyZQorICogb2YgdGhlIC9wcm9jLzxwaWQ+IHN1YmRpcmVjdG9yaWVzLgorICovCitleHRlcm4gaW50IHByb2NfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqLCB2b2lkICosIGZpbGxkaXJfdCk7CitleHRlcm4gc3RydWN0IGRlbnRyeSAqcHJvY19sb29rdXAoc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IG5hbWVpZGF0YSAqKTsKKworZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19rY29yZV9vcGVyYXRpb25zOworZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19rbXNnX29wZXJhdGlvbnM7CitleHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcGNfaHRhYl9vcGVyYXRpb25zOworCisvKgorICogcHJvY190dHkuYworICovCitzdHJ1Y3QgdHR5X2RyaXZlcjsKK2V4dGVybiB2b2lkIHByb2NfdHR5X2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBwcm9jX3R0eV9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHR0eV9kcml2ZXIgKmRyaXZlcik7CitleHRlcm4gdm9pZCBwcm9jX3R0eV91bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgdHR5X2RyaXZlciAqZHJpdmVyKTsKKworLyoKKyAqIHByb2NfZGV2dHJlZS5jCisgKi8KK3N0cnVjdCBkZXZpY2Vfbm9kZTsKK2V4dGVybiB2b2lkIHByb2NfZGV2aWNlX3RyZWVfaW5pdCh2b2lkKTsKKyNpZmRlZiBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFCitleHRlcm4gdm9pZCBwcm9jX2RldmljZV90cmVlX2FkZF9ub2RlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqLCBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKik7CisjZWxzZSAvKiAhQ09ORklHX1BST0NfREVWSUNFVFJFRSAqLworc3RhdGljIGlubGluZSB2b2lkIHByb2NfZGV2aWNlX3RyZWVfYWRkX25vZGUoc3RydWN0IGRldmljZV9ub2RlICpucCwgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwZGUpCit7CisJcmV0dXJuOworfQorI2VuZGlmIC8qIENPTkZJR19QUk9DX0RFVklDRVRSRUUgKi8KKworZXh0ZXJuIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19zeW1saW5rKGNvbnN0IGNoYXIgKiwKKwkJc3RydWN0IHByb2NfZGlyX2VudHJ5ICosIGNvbnN0IGNoYXIgKik7CitleHRlcm4gc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX21rZGlyKGNvbnN0IGNoYXIgKixzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKik7CitleHRlcm4gc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX21rZGlyX21vZGUoY29uc3QgY2hhciAqbmFtZSwgbW9kZV90IG1vZGUsCisJCQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBhcmVudCk7CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpjcmVhdGVfcHJvY19yZWFkX2VudHJ5KGNvbnN0IGNoYXIgKm5hbWUsCisJbW9kZV90IG1vZGUsIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqYmFzZSwgCisJcmVhZF9wcm9jX3QgKnJlYWRfcHJvYywgdm9pZCAqIGRhdGEpCit7CisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpyZXM9Y3JlYXRlX3Byb2NfZW50cnkobmFtZSxtb2RlLGJhc2UpOworCWlmIChyZXMpIHsKKwkJcmVzLT5yZWFkX3Byb2M9cmVhZF9wcm9jOworCQlyZXMtPmRhdGE9ZGF0YTsKKwl9CisJcmV0dXJuIHJlczsKK30KKyAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpjcmVhdGVfcHJvY19pbmZvX2VudHJ5KGNvbnN0IGNoYXIgKm5hbWUsCisJbW9kZV90IG1vZGUsIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqYmFzZSwgZ2V0X2luZm9fdCAqZ2V0X2luZm8pCit7CisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpyZXM9Y3JlYXRlX3Byb2NfZW50cnkobmFtZSxtb2RlLGJhc2UpOworCWlmIChyZXMpIHJlcy0+Z2V0X2luZm89Z2V0X2luZm87CisJcmV0dXJuIHJlczsKK30KKyAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX25ldF9jcmVhdGUoY29uc3QgY2hhciAqbmFtZSwKKwltb2RlX3QgbW9kZSwgZ2V0X2luZm9fdCAqZ2V0X2luZm8pCit7CisJcmV0dXJuIGNyZWF0ZV9wcm9jX2luZm9fZW50cnkobmFtZSxtb2RlLHByb2NfbmV0LGdldF9pbmZvKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NfbmV0X2ZvcHNfY3JlYXRlKGNvbnN0IGNoYXIgKm5hbWUsCisJbW9kZV90IG1vZGUsIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmZvcHMpCit7CisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpyZXMgPSBjcmVhdGVfcHJvY19lbnRyeShuYW1lLCBtb2RlLCBwcm9jX25ldCk7CisJaWYgKHJlcykKKwkJcmVzLT5wcm9jX2ZvcHMgPSBmb3BzOworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwcm9jX25ldF9yZW1vdmUoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlyZW1vdmVfcHJvY19lbnRyeShuYW1lLHByb2NfbmV0KTsKK30KKworI2Vsc2UKKworI2RlZmluZSBwcm9jX3Jvb3RfZHJpdmVyIE5VTEwKKyNkZWZpbmUgcHJvY19uZXQgTlVMTAorI2RlZmluZSBwcm9jX2J1cyBOVUxMCisKKyNkZWZpbmUgcHJvY19uZXRfZm9wc19jcmVhdGUobmFtZSwgbW9kZSwgZm9wcykgICh7ICh2b2lkKShtb2RlKSwgTlVMTDsgfSkKKyNkZWZpbmUgcHJvY19uZXRfY3JlYXRlKG5hbWUsIG1vZGUsIGluZm8pCSh7ICh2b2lkKShtb2RlKSwgTlVMTDsgfSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBwcm9jX25ldF9yZW1vdmUoY29uc3QgY2hhciAqbmFtZSkge30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZGVudHJ5ICpwcm9jX3BpZF91bmhhc2goc3RydWN0IHRhc2tfc3RydWN0ICpwKSB7IHJldHVybiBOVUxMOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgcHJvY19waWRfZmx1c2goc3RydWN0IGRlbnRyeSAqcHJvY19kZW50cnkpIHsgfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqY3JlYXRlX3Byb2NfZW50cnkoY29uc3QgY2hhciAqbmFtZSwKKwltb2RlX3QgbW9kZSwgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwYXJlbnQpIHsgcmV0dXJuIE5VTEw7IH0KKworI2RlZmluZSByZW1vdmVfcHJvY19lbnRyeShuYW1lLCBwYXJlbnQpIGRvIHt9IHdoaWxlICgwKQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19zeW1saW5rKGNvbnN0IGNoYXIgKm5hbWUsCisJCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGFyZW50LGNvbnN0IGNoYXIgKmRlc3QpIHtyZXR1cm4gTlVMTDt9CitzdGF0aWMgaW5saW5lIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19ta2Rpcihjb25zdCBjaGFyICpuYW1lLAorCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGFyZW50KSB7cmV0dXJuIE5VTEw7fQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqY3JlYXRlX3Byb2NfcmVhZF9lbnRyeShjb25zdCBjaGFyICpuYW1lLAorCW1vZGVfdCBtb2RlLCBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmJhc2UsIAorCXJlYWRfcHJvY190ICpyZWFkX3Byb2MsIHZvaWQgKiBkYXRhKSB7IHJldHVybiBOVUxMOyB9CitzdGF0aWMgaW5saW5lIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqY3JlYXRlX3Byb2NfaW5mb19lbnRyeShjb25zdCBjaGFyICpuYW1lLAorCW1vZGVfdCBtb2RlLCBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmJhc2UsIGdldF9pbmZvX3QgKmdldF9pbmZvKQorCXsgcmV0dXJuIE5VTEw7IH0KKworc3RydWN0IHR0eV9kcml2ZXI7CitzdGF0aWMgaW5saW5lIHZvaWQgcHJvY190dHlfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCB0dHlfZHJpdmVyICpkcml2ZXIpIHt9Oworc3RhdGljIGlubGluZSB2b2lkIHByb2NfdHR5X3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCB0dHlfZHJpdmVyICpkcml2ZXIpIHt9OworCitleHRlcm4gc3RydWN0IHByb2NfZGlyX2VudHJ5IHByb2Nfcm9vdDsKKworI2VuZGlmIC8qIENPTkZJR19QUk9DX0ZTICovCisKKyNpZiAhZGVmaW5lZChDT05GSUdfUFJPQ19LQ09SRSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBrY2xpc3RfYWRkKHN0cnVjdCBrY29yZV9saXN0ICpuZXcsIHZvaWQgKmFkZHIsIHNpemVfdCBzaXplKQoreworfQorI2Vsc2UKK2V4dGVybiB2b2lkIGtjbGlzdF9hZGQoc3RydWN0IGtjb3JlX2xpc3QgKiwgdm9pZCAqLCBzaXplX3QpOworI2VuZGlmCisKK3N0cnVjdCBwcm9jX2lub2RlIHsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CisJaW50IHR5cGU7CisJdW5pb24geworCQlpbnQgKCpwcm9jX2dldF9saW5rKShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqKiwgc3RydWN0IHZmc21vdW50ICoqKTsKKwkJaW50ICgqcHJvY19yZWFkKShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGNoYXIgKnBhZ2UpOworCX0gb3A7CisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwZGU7CisJc3RydWN0IGlub2RlIHZmc19pbm9kZTsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHByb2NfaW5vZGUgKlBST0NfSShjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXJldHVybiBjb250YWluZXJfb2YoaW5vZGUsIHN0cnVjdCBwcm9jX2lub2RlLCB2ZnNfaW5vZGUpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqUERFKGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJcmV0dXJuIFBST0NfSShpbm9kZSktPnBkZTsKK30KKworI2VuZGlmIC8qIF9MSU5VWF9QUk9DX0ZTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHJvZmlsZS5oIGIvaW5jbHVkZS9saW51eC9wcm9maWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI2OTY5YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvcHJvZmlsZS5oCkBAIC0wLDAgKzEsMTA0IEBACisjaWZuZGVmIF9MSU5VWF9QUk9GSUxFX0gKKyNkZWZpbmUgX0xJTlVYX1BST0ZJTEVfSAorCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KKyNpbmNsdWRlIDxhc20vZXJybm8uaD4KKworI2RlZmluZSBDUFVfUFJPRklMSU5HCTEKKyNkZWZpbmUgU0NIRURfUFJPRklMSU5HCTIKKworc3RydWN0IHByb2NfZGlyX2VudHJ5Oworc3RydWN0IHB0X3JlZ3M7CisKKy8qIGluaXQgYmFzaWMga2VybmVsIHByb2ZpbGVyICovCit2b2lkIF9faW5pdCBwcm9maWxlX2luaXQodm9pZCk7Cit2b2lkIHByb2ZpbGVfdGljayhpbnQsIHN0cnVjdCBwdF9yZWdzICopOwordm9pZCBwcm9maWxlX2hpdChpbnQsIHZvaWQgKik7CisjaWZkZWYgQ09ORklHX1BST0NfRlMKK3ZvaWQgY3JlYXRlX3Byb2ZfY3B1X21hc2soc3RydWN0IHByb2NfZGlyX2VudHJ5ICopOworI2Vsc2UKKyNkZWZpbmUgY3JlYXRlX3Byb2ZfY3B1X21hc2soeCkJCQlkbyB7ICh2b2lkKSh4KTsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCitlbnVtIHByb2ZpbGVfdHlwZSB7CisJUFJPRklMRV9UQVNLX0VYSVQsCisJUFJPRklMRV9NVU5NQVAKK307CisKKyNpZmRlZiBDT05GSUdfUFJPRklMSU5HCisKK3N0cnVjdCBub3RpZmllcl9ibG9jazsKK3N0cnVjdCB0YXNrX3N0cnVjdDsKK3N0cnVjdCBtbV9zdHJ1Y3Q7CisKKy8qIHRhc2sgaXMgaW4gZG9fZXhpdCgpICovCit2b2lkIHByb2ZpbGVfdGFza19leGl0KHN0cnVjdCB0YXNrX3N0cnVjdCAqIHRhc2spOworCisvKiB0YXNrIGlzIGRlYWQsIGZyZWUgdGFzayBzdHJ1Y3QgPyBSZXR1cm5zIDEgaWYKKyAqIHRoZSB0YXNrIHdhcyB0YWtlbiwgMCBpZiB0aGUgdGFzayBzaG91bGQgYmUgZnJlZWQuCisgKi8KK2ludCBwcm9maWxlX2hhbmRvZmZfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKiB0YXNrKTsKKworLyogc3lzX211bm1hcCAqLwordm9pZCBwcm9maWxlX211bm1hcCh1bnNpZ25lZCBsb25nIGFkZHIpOworCitpbnQgdGFza19oYW5kb2ZmX3JlZ2lzdGVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqIG4pOworaW50IHRhc2tfaGFuZG9mZl91bnJlZ2lzdGVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqIG4pOworCitpbnQgcHJvZmlsZV9ldmVudF9yZWdpc3RlcihlbnVtIHByb2ZpbGVfdHlwZSwgc3RydWN0IG5vdGlmaWVyX2Jsb2NrICogbik7CitpbnQgcHJvZmlsZV9ldmVudF91bnJlZ2lzdGVyKGVudW0gcHJvZmlsZV90eXBlLCBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKiBuKTsKKworaW50IHJlZ2lzdGVyX3RpbWVyX2hvb2soaW50ICgqaG9vaykoc3RydWN0IHB0X3JlZ3MgKikpOwordm9pZCB1bnJlZ2lzdGVyX3RpbWVyX2hvb2soaW50ICgqaG9vaykoc3RydWN0IHB0X3JlZ3MgKikpOworCisvKiBUaW1lciBiYXNlZCBwcm9maWxpbmcgaG9vayAqLworZXh0ZXJuIGludCAoKnRpbWVyX2hvb2spKHN0cnVjdCBwdF9yZWdzICopOworCitzdHJ1Y3QgcHRfcmVnczsKKworI2Vsc2UKKworc3RhdGljIGlubGluZSBpbnQgdGFza19oYW5kb2ZmX3JlZ2lzdGVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqIG4pCit7CisJcmV0dXJuIC1FTk9TWVM7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHRhc2tfaGFuZG9mZl91bnJlZ2lzdGVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqIG4pCit7CisJcmV0dXJuIC1FTk9TWVM7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHByb2ZpbGVfZXZlbnRfcmVnaXN0ZXIoZW51bSBwcm9maWxlX3R5cGUgdCwgc3RydWN0IG5vdGlmaWVyX2Jsb2NrICogbikKK3sKKwlyZXR1cm4gLUVOT1NZUzsKK30KKworc3RhdGljIGlubGluZSBpbnQgcHJvZmlsZV9ldmVudF91bnJlZ2lzdGVyKGVudW0gcHJvZmlsZV90eXBlIHQsIHN0cnVjdCBub3RpZmllcl9ibG9jayAqIG4pCit7CisJcmV0dXJuIC1FTk9TWVM7Cit9CisKKyNkZWZpbmUgcHJvZmlsZV90YXNrX2V4aXQoYSkgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBwcm9maWxlX2hhbmRvZmZfdGFzayhhKSAoMCkKKyNkZWZpbmUgcHJvZmlsZV9tdW5tYXAoYSkgZG8geyB9IHdoaWxlICgwKQorCitzdGF0aWMgaW5saW5lIGludCByZWdpc3Rlcl90aW1lcl9ob29rKGludCAoKmhvb2spKHN0cnVjdCBwdF9yZWdzICopKQoreworCXJldHVybiAtRU5PU1lTOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdW5yZWdpc3Rlcl90aW1lcl9ob29rKGludCAoKmhvb2spKHN0cnVjdCBwdF9yZWdzICopKQoreworCXJldHVybjsKK30KKworI2VuZGlmIC8qIENPTkZJR19QUk9GSUxJTkcgKi8KKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9MSU5VWF9QUk9GSUxFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHMyZXNkaS5oIGIvaW5jbHVkZS9saW51eC9wczJlc2RpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBlMDUwYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvcHMyZXNkaS5oCkBAIC0wLDAgKzEsOTggQEAKKyNpZm5kZWYgX1BTMkVTRElfSF8KKyNkZWZpbmUgX1BTMkVTRElfSF8KKworI2RlZmluZSBOUk1MX0VTRElfSUQgMHhkZGZmCisjZGVmaW5lIElOVEdfRVNESV9JRCAweGRmOWYKKworI2RlZmluZSBQUklNQVJZX0lPX0JBU0UgMHgzNTEwCisjZGVmaW5lIEFMVF9JT19CQVNFIDB4MzUxOAorCisjZGVmaW5lIEVTRElfQ01EX0lOVCAoaW9fYmFzZSswKQorI2RlZmluZSBFU0RJX1NUVF9JTlQgKGlvX2Jhc2UrMCkKKyNkZWZpbmUgRVNESV9DT05UUk9MIChpb19iYXNlKzIpCisjZGVmaW5lIEVTRElfU1RBVFVTICAoaW9fYmFzZSsyKQorI2RlZmluZSBFU0RJX0FUVE4gICAgKGlvX2Jhc2UrMykKKyNkZWZpbmUgRVNESV9JTlRSUFQgIChpb19iYXNlKzMpCisKKyNkZWZpbmUgU1RBVFVTX0VOQUJMRUQgICAgMHgwMQorI2RlZmluZSBTVEFUVVNfQUxURVJOQVRFICAweDAyCisjZGVmaW5lIFNUQVRVU19CVVNZICAgICAgIDB4MTAKKyNkZWZpbmUgU1RBVFVTX1NUQVRfQVZBSUwgMHgwOAorI2RlZmluZSBTVEFUVVNfSU5UUiAgICAgICAweDAxCisjZGVmaW5lIFNUQVRVU19SRVNFVF9GQUlMIDB4ZWEKKyNkZWZpbmUgU1RBVFVTX0NNRF9JTkYJICAweDA0CisKKyNkZWZpbmUgQ1RSTF9TT0ZUX1JFU0VUICAgMHhlNAorI2RlZmluZSBDVFJMX0hBUkRfUkVTRVQgICAweDgwCisjZGVmaW5lIENUUkxfRU9JICAgICAgICAgIDB4ZTIKKyNkZWZpbmUgQ1RSTF9FTkFCTEVfRE1BICAgMHgwMgorI2RlZmluZSBDVFJMX0VOQUJMRV9JTlRSICAweDAxCisjZGVmaW5lIENUUkxfRElTQUJMRV9JTlRSICAweDAwCisKKyNkZWZpbmUgQVRUX0VPSSAweDAyCisKKy8qIGJpdHMgb2Ygd29yZCAwIG9mIGNvbmZpZ3VyYXRpb24gc3RhdHVzIGJsb2NrLiBtb3JlIGluZm8gc2VlIHAuMzggb2YgdGVjaCByZWYgKi8KKyNkZWZpbmUgQ09ORklHX0lTIDB4MTAgLyogSW52YWxpZCBTZWNvbmRhcnkgKi8KKyNkZWZpbmUgQ09ORklHX1pEIDB4MDggLyogWmVybyBEZWZlY3QgKi8KKyNkZWZpbmUgQ09ORklHX1NGIDB4MDQgLyogU2tld2VkIEZvcm1hdCAqLworI2RlZmluZSBDT05GSUdfRlIgMHgwMiAvKiBSZW1vdmFibGUgKi8KKyNkZWZpbmUgQ09ORklHX1JUIDB4MDEgLyogUmV0cmllcyAqLworCisjZGVmaW5lIFBPUlRfU1lTX0EgICAweDkyCisjZGVmaW5lIFBPUlRfRE1BX0ZOICAweDE4CisjZGVmaW5lIFBPUlRfRE1BX0VYICAweDFhCisKKyNkZWZpbmUgT04gKHVuc2lnbmVkIGNoYXIpMHg0MAorI2RlZmluZSBPRkYgKHVuc2lnbmVkIGNoYXIpfk9OCisjZGVmaW5lIExJVEVfT04gb3V0YihpbmIoUE9SVF9TWVNfQSkgfCBPTixQT1JUX1NZU19BKQorI2RlZmluZSBMSVRFX09GRiBvdXRiKChpbmIoUE9SVF9TWVNfQSkgJiBPRkYpLFBPUlRfU1lTX0EpCisKKyNkZWZpbmUgRkFJTCAwCisjZGVmaW5lIFNVQ0NFUyAxCisKKyNkZWZpbmUgSU5UX0NNRF9DT01QTEVURSAweDAxCisjZGVmaW5lIElOVF9DTURfRUNDICAgICAgMHgwMworI2RlZmluZSBJTlRfQ01EX1JFVFJZICAgIDB4MDUKKyNkZWZpbmUgSU5UX0NNRF9GT1JNQVQgICAweDA2CisjZGVmaW5lIElOVF9DTURfRUNDX1JFVFJZIDB4MDcKKyNkZWZpbmUgSU5UX0NNRF9XQVJOSU5HICAweDA4CisjZGVmaW5lIElOVF9DTURfQUJPUlQgICAgMHgwOQorI2RlZmluZSBJTlRfUkVTRVQgICAgICAgIDB4MEEKKyNkZWZpbmUgSU5UX1RSQU5TRkVSX1JFUSAweDBCCisjZGVmaW5lIElOVF9DTURfRkFJTEVEICAgMHgwQworI2RlZmluZSBJTlRfRE1BX0VSUiAgICAgIDB4MEQKKyNkZWZpbmUgSU5UX0NNRF9CTEtfRVJSICAweDBFCisjZGVmaW5lIElOVF9BVFROX0VSUk9SICAgMHgwRgorCisjZGVmaW5lIERNQV9NQVNLX0NIQU4gMHg5MAorI2RlZmluZSBETUFfVU5NQVNLX0NIQU4gMHhBMAorI2RlZmluZSBETUFfV1JJVEVfQUREUiAweDIwCisjZGVmaW5lIERNQV9XUklURV9UQyAweDQwCisjZGVmaW5lIERNQV9XUklURV9NT0RFIDB4NzAKKworI2RlZmluZSBDTURfR0VUX0RFVl9DT05GSUcgMHgwOQorI2RlZmluZSBDTURfUkVBRCAweDQ2MDEKKyNkZWZpbmUgQ01EX1dSSVRFIDB4NDYwMgorI2RlZmluZSBETUFfUkVBRF8xNiAweDRDCisjZGVmaW5lIERNQV9XUklURV8xNiAweDQ0CisKKworI2RlZmluZSBNQiAxMDI0KjEwMjQKKyNkZWZpbmUgU0VDVF9TSVpFIDUxMiAgIAorCisjZGVmaW5lIEVSUk9SIDEKKyNkZWZpbmUgT0sgMAorCisjZGVmaW5lIEhESU9fR0VUR0VPIDB4MDMwMQorCisjZGVmaW5lIEZBTFNFIDAKKyNkZWZpbmUgVFJVRSAhRkFMU0UKKworc3RydWN0IHBzMmVzZGlfZ2VvbWV0cnkgeworCXVuc2lnbmVkIGNoYXIgaGVhZHM7CisJdW5zaWduZWQgY2hhciBzZWN0b3JzOworCXVuc2lnbmVkIHNob3J0IGN5bGluZGVyczsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0OworfTsKKworI2VuZGlmIC8qIF9QUzJFU0RJX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3B0cmFjZS5oIGIvaW5jbHVkZS9saW51eC9wdHJhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzczZmMyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9wdHJhY2UuaApAQCAtMCwwICsxLDEyMiBAQAorI2lmbmRlZiBfTElOVVhfUFRSQUNFX0gKKyNkZWZpbmUgX0xJTlVYX1BUUkFDRV9ICisvKiBwdHJhY2UuaCAqLworLyogc3RydWN0cyBhbmQgZGVmaW5lcyB0byBoZWxwIHRoZSB1c2VyIHVzZSB0aGUgcHRyYWNlIHN5c3RlbSBjYWxsLiAqLworCisvKiBoYXMgdGhlIGRlZmluZXMgdG8gZ2V0IGF0IHRoZSByZWdpc3RlcnMuICovCisKKyNkZWZpbmUgUFRSQUNFX1RSQUNFTUUJCSAgIDAKKyNkZWZpbmUgUFRSQUNFX1BFRUtURVhUCQkgICAxCisjZGVmaW5lIFBUUkFDRV9QRUVLREFUQQkJICAgMgorI2RlZmluZSBQVFJBQ0VfUEVFS1VTUgkJICAgMworI2RlZmluZSBQVFJBQ0VfUE9LRVRFWFQJCSAgIDQKKyNkZWZpbmUgUFRSQUNFX1BPS0VEQVRBCQkgICA1CisjZGVmaW5lIFBUUkFDRV9QT0tFVVNSCQkgICA2CisjZGVmaW5lIFBUUkFDRV9DT05UCQkgICA3CisjZGVmaW5lIFBUUkFDRV9LSUxMCQkgICA4CisjZGVmaW5lIFBUUkFDRV9TSU5HTEVTVEVQCSAgIDkKKworI2RlZmluZSBQVFJBQ0VfQVRUQUNICQkweDEwCisjZGVmaW5lIFBUUkFDRV9ERVRBQ0gJCTB4MTEKKworI2RlZmluZSBQVFJBQ0VfU1lTQ0FMTAkJICAyNAorCisvKiAweDQyMDAtMHg0MzAwIGFyZSByZXNlcnZlZCBmb3IgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGFkZGl0aW9ucy4gICovCisjZGVmaW5lIFBUUkFDRV9TRVRPUFRJT05TCTB4NDIwMAorI2RlZmluZSBQVFJBQ0VfR0VURVZFTlRNU0cJMHg0MjAxCisjZGVmaW5lIFBUUkFDRV9HRVRTSUdJTkZPCTB4NDIwMgorI2RlZmluZSBQVFJBQ0VfU0VUU0lHSU5GTwkweDQyMDMKKworLyogb3B0aW9ucyBzZXQgdXNpbmcgUFRSQUNFX1NFVE9QVElPTlMgKi8KKyNkZWZpbmUgUFRSQUNFX09fVFJBQ0VTWVNHT09ECTB4MDAwMDAwMDEKKyNkZWZpbmUgUFRSQUNFX09fVFJBQ0VGT1JLCTB4MDAwMDAwMDIKKyNkZWZpbmUgUFRSQUNFX09fVFJBQ0VWRk9SSwkweDAwMDAwMDA0CisjZGVmaW5lIFBUUkFDRV9PX1RSQUNFQ0xPTkUJMHgwMDAwMDAwOAorI2RlZmluZSBQVFJBQ0VfT19UUkFDRUVYRUMJMHgwMDAwMDAxMAorI2RlZmluZSBQVFJBQ0VfT19UUkFDRVZGT1JLRE9ORQkweDAwMDAwMDIwCisjZGVmaW5lIFBUUkFDRV9PX1RSQUNFRVhJVAkweDAwMDAwMDQwCisKKyNkZWZpbmUgUFRSQUNFX09fTUFTSwkJMHgwMDAwMDA3ZgorCisvKiBXYWl0IGV4dGVuZGVkIHJlc3VsdCBjb2RlcyBmb3IgdGhlIGFib3ZlIHRyYWNlIG9wdGlvbnMuICAqLworI2RlZmluZSBQVFJBQ0VfRVZFTlRfRk9SSwkxCisjZGVmaW5lIFBUUkFDRV9FVkVOVF9WRk9SSwkyCisjZGVmaW5lIFBUUkFDRV9FVkVOVF9DTE9ORQkzCisjZGVmaW5lIFBUUkFDRV9FVkVOVF9FWEVDCTQKKyNkZWZpbmUgUFRSQUNFX0VWRU5UX1ZGT1JLX0RPTkUJNQorI2RlZmluZSBQVFJBQ0VfRVZFTlRfRVhJVAk2CisKKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisKKyNpZmRlZiBfX0tFUk5FTF9fCisvKgorICogUHRyYWNlIGZsYWdzCisgKi8KKworI2RlZmluZSBQVF9QVFJBQ0VECTB4MDAwMDAwMDEKKyNkZWZpbmUgUFRfRFRSQUNFCTB4MDAwMDAwMDIJLyogZGVsYXllZCB0cmFjZSAodXNlZCBvbiBtNjhrLCBpMzg2KSAqLworI2RlZmluZSBQVF9UUkFDRVNZU0dPT0QJMHgwMDAwMDAwNAorI2RlZmluZSBQVF9QVFJBQ0VfQ0FQCTB4MDAwMDAwMDgJLyogcHRyYWNlciBjYW4gZm9sbG93IHN1aWQtZXhlYyAqLworI2RlZmluZSBQVF9UUkFDRV9GT1JLCTB4MDAwMDAwMTAKKyNkZWZpbmUgUFRfVFJBQ0VfVkZPUksJMHgwMDAwMDAyMAorI2RlZmluZSBQVF9UUkFDRV9DTE9ORQkweDAwMDAwMDQwCisjZGVmaW5lIFBUX1RSQUNFX0VYRUMJMHgwMDAwMDA4MAorI2RlZmluZSBQVF9UUkFDRV9WRk9SS19ET05FCTB4MDAwMDAxMDAKKyNkZWZpbmUgUFRfVFJBQ0VfRVhJVAkweDAwMDAwMjAwCisjZGVmaW5lIFBUX0FUVEFDSEVECTB4MDAwMDA0MDAJLyogcGFyZW50ICE9IHJlYWxfcGFyZW50ICovCisKKyNkZWZpbmUgUFRfVFJBQ0VfTUFTSwkweDAwMDAwM2Y0CisKKy8qIHNpbmdsZSBzdGVwcGluZyBzdGF0ZSBiaXRzICh1c2VkIG9uIEFSTSBhbmQgUEEtUklTQykgKi8KKyNkZWZpbmUgUFRfU0lOR0xFU1RFUF9CSVQJMzEKKyNkZWZpbmUgUFRfU0lOR0xFU1RFUAkJKDE8PFBUX1NJTkdMRVNURVBfQklUKQorI2RlZmluZSBQVF9CTE9DS1NURVBfQklUCTMwCisjZGVmaW5lIFBUX0JMT0NLU1RFUAkJKDE8PFBUX0JMT0NLU1RFUF9CSVQpCisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgkJLyogRm9yIHVubGlrZWx5LiAgKi8KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgkJLyogRm9yIHN0cnVjdCB0YXNrX3N0cnVjdC4gICovCisKK2V4dGVybiBpbnQgcHRyYWNlX3JlYWRkYXRhKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIHNyYywgY2hhciBfX3VzZXIgKmRzdCwgaW50IGxlbik7CitleHRlcm4gaW50IHB0cmFjZV93cml0ZWRhdGEoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGNoYXIgX191c2VyICpzcmMsIHVuc2lnbmVkIGxvbmcgZHN0LCBpbnQgbGVuKTsKK2V4dGVybiBpbnQgcHRyYWNlX2F0dGFjaChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7CitleHRlcm4gaW50IHB0cmFjZV9kZXRhY2goc3RydWN0IHRhc2tfc3RydWN0ICosIHVuc2lnbmVkIGludCk7CitleHRlcm4gdm9pZCBwdHJhY2VfZGlzYWJsZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CitleHRlcm4gaW50IHB0cmFjZV9jaGVja19hdHRhY2goc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQga2lsbCk7CitleHRlcm4gaW50IHB0cmFjZV9yZXF1ZXN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIGxvbmcgcmVxdWVzdCwgbG9uZyBhZGRyLCBsb25nIGRhdGEpOworZXh0ZXJuIHZvaWQgcHRyYWNlX25vdGlmeShpbnQgZXhpdF9jb2RlKTsKK2V4dGVybiB2b2lkIF9fcHRyYWNlX2xpbmsoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwKKwkJCSAgc3RydWN0IHRhc2tfc3RydWN0ICpuZXdfcGFyZW50KTsKK2V4dGVybiB2b2lkIF9fcHRyYWNlX3VubGluayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKTsKK2V4dGVybiB2b2lkIHB0cmFjZV91bnRyYWNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpOworCitzdGF0aWMgaW5saW5lIHZvaWQgcHRyYWNlX2xpbmsoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwKKwkJCSAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5ld19wYXJlbnQpCit7CisJaWYgKHVubGlrZWx5KGNoaWxkLT5wdHJhY2UpKQorCQlfX3B0cmFjZV9saW5rKGNoaWxkLCBuZXdfcGFyZW50KTsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBwdHJhY2VfdW5saW5rKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpCit7CisJaWYgKHVubGlrZWx5KGNoaWxkLT5wdHJhY2UpKQorCQlfX3B0cmFjZV91bmxpbmsoY2hpbGQpOworfQorCisKKyNpZm5kZWYgZm9yY2Vfc3VjY2Vzc2Z1bF9zeXNjYWxsX3JldHVybgorLyoKKyAqIFN5c3RlbSBjYWxsIGhhbmRsZXJzIHRoYXQsIHVwb24gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLCBuZWVkIHRvIHJldHVybiBhCisgKiBuZWdhdGl2ZSB2YWx1ZSBzaG91bGQgY2FsbCBmb3JjZV9zdWNjZXNzZnVsX3N5c2NhbGxfcmV0dXJuKCkgcmlnaHQgYmVmb3JlCisgKiByZXR1cm5pbmcuICBPbiBhcmNoaXRlY3R1cmVzIHdoZXJlIHRoZSBzeXNjYWxsIGNvbnZlbnRpb24gcHJvdmlkZXMgZm9yIGEKKyAqIHNlcGFyYXRlIGVycm9yIGZsYWcgKGUuZy4sIGFscGhhLCBpYTY0LCBwcGN7LDY0fSwgc3BhcmN7LDY0fSwgcG9zc2libHkKKyAqIG90aGVycyksIHRoaXMgbWFjcm8gY2FuIGJlIHVzZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGVycm9yIGZsYWcgd2lsbCBub3QgZ2V0CisgKiBzZXQuICBPbiBhcmNoaXRlY3R1cmVzIHdoaWNoIGRvIG5vdCBzdXBwb3J0IGEgc2VwYXJhdGUgZXJyb3IgZmxhZywgdGhlIG1hY3JvCisgKiBpcyBhIG5vLW9wIGFuZCB0aGUgc3B1cmlvdXMgZXJyb3IgY29uZGl0aW9uIG5lZWRzIHRvIGJlIGZpbHRlcmVkIG91dCBieSBzb21lCisgKiBvdGhlciBtZWFucyAoZS5nLiwgaW4gdXNlci1sZXZlbCwgYnkgcGFzc2luZyBhbiBleHRyYSBhcmd1bWVudCB0byB0aGUKKyAqIHN5c2NhbGwgaGFuZGxlciwgb3Igc29tZXRoaW5nIGFsb25nIHRob3NlIGxpbmVzKS4KKyAqLworI2RlZmluZSBmb3JjZV9zdWNjZXNzZnVsX3N5c2NhbGxfcmV0dXJuKCkgZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcWljMTE3LmggYi9pbmNsdWRlL2xpbnV4L3FpYzExNy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3YjUzN2UKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3FpYzExNy5oCkBAIC0wLDAgKzEsMjkwIEBACisjaWZuZGVmIF9RSUMxMTdfSAorI2RlZmluZSBfUUlDMTE3X0gKKworLyoKKyAqICAgICAgQ29weXJpZ2h0IChDKSAxOTkzLTE5OTYgQmFzIExhYXJob3ZlbiwKKyAqICAgICAgICAgICAgICAgIChDKSAxOTk3ICAgICAgQ2xhdXMtSnVzdHVzIEhlaW5lLgorCisgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworICoKKyAqICRTb3VyY2U6IC9ob21lcy9jdnMvZnRhcGUtc3RhY2tlZC9pbmNsdWRlL2xpbnV4L3FpYzExNy5oLHYgJAorICogJFJldmlzaW9uOiAxLjIgJAorICogJERhdGU6IDE5OTcvMTAvMDUgMTk6MTk6MzIgJAorICoKKyAqICAgICAgVGhpcyBmaWxlIGNvbnRhaW5zIFFJQy0xMTcgc3BlYy4gcmVsYXRlZCBkZWZpbml0aW9ucyBmb3IgdGhlCisgKiAgICAgIFFJQy00MC84MC8zMDEwLzMwMjAgZmxvcHB5LXRhcGUgZHJpdmVyICJmdGFwZSIgZm9yIExpbnV4LgorICoKKyAqICAgICAgVGhlc2UgZGF0YSB3ZXJlIHRha2VuIGZyb20gdGhlIFF1YXJ0ZXItSW5jaCBDYXJ0cmlkZ2UKKyAqICAgICAgRHJpdmUgU3RhbmRhcmRzLCBJbmMuIGRvY3VtZW50IHRpdGxlZDoKKyAqICAgICAgYENvbW1vbiBDb21tYW5kIFNldCBJbnRlcmZhY2UgU3BlY2lmaWNhdGlvbiBmb3IgRmxleGlibGUKKyAqICAgICAgIERpc2sgQ29udHJvbGxlciBCYXNlZCBNaW5pY2FydHJpZGdlIFRhcGUgRHJpdmVzJworICogICAgICAgZG9jdW1lbnQgUUlDLTExNyBSZXZpc2lvbiBKLCAyOCBBdWcgOTYuCisgKiAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBjb250YWN0OgorICogICAgICAgUXVhcnRlci1JbmNoIENhcnRyaWRnZSBEcml2ZSBTdGFuZGFyZHMsIEluYy4KKyAqICAgICAgIDMxMSBFYXN0IENhcnJpbGxvIFN0cmVldAorICogICAgICAgU2FudGEgQmFyYmFyYSwgQ2FsaWZvcm5pYSA5MzEwMQorICogICAgICAgVGVsZXBob25lICg4MDUpIDk2My0zODUzCisgKiAgICAgICBGYXggICAgICAgKDgwNSkgOTYyLTE1NDEKKyAqICAgICAgIFdXVyAgICAgICBodHRwOi8vd3d3LnFpYy5vcmcKKyAqCisgKiAgICAgIEN1cnJlbnQgUUlDIHN0YW5kYXJkIHJldmlzaW9ucyAob2YgaW50ZXJlc3QpIGFyZToKKyAqICAgICAgIFFJQy00MC1NQywgICBSZXYuIE0sICAyIFNlcCA5Mi4KKyAqICAgICAgIFFJQy04MC1NQywgICBSZXYuIE4sIDIwIE1hciA5Ni4KKyAqICAgICAgIFFJQy04MC1NQywgICBSZXYuIEssIDE1IERlYyA5NC4KKyAqICAgICAgIFFJQy0xMTMsICAgICBSZXYuIEcsIDE1IEp1biA5NS4KKyAqICAgICAgIFFJQy0xMTcsICAgICBSZXYuIEosIDI4IEF1ZyA5Ni4KKyAqICAgICAgIFFJQy0xMjIsICAgICBSZXYuIEIsICA2IE1hciA5MS4KKyAqICAgICAgIFFJQy0xMzAsICAgICBSZXYuIEMsICAyIFNlcCA5Mi4KKyAqICAgICAgIFFJQy0zMDEwLU1DLCBSZXYuIEYsIDE0IEp1biA5NS4KKyAqICAgICAgIFFJQy0zMDIwLU1DLCBSZXYuIEcsIDMxIEF1ZyA5NS4KKyAqICAgICAgIFFJQy1DUkYzLCAgICBSZXYuIEIsIDE1IEp1biA5NS4KKyAqICovCisKKy8qCisgKiAgICAgIFFJQy0xMTcgY29tbW9uIGNvbW1hbmQgc2V0IHJldi4gSi4KKyAqICAgICAgVGhlc2UgY29tbWFuZHMgYXJlIHNlbnQgdG8gdGhlIHRhcGUgdW5pdAorICogICAgICBhcyBudW1iZXIgb2YgcHVsc2VzIG92ZXIgdGhlIHN0ZXAgbGluZS4KKyAqLworCit0eXBlZGVmIGVudW0geworCVFJQ19OT19DT01NQU5EICAgICAgICAgICAgICAgICAgPSAwLAorCVFJQ19SRVNFVCAJCQk9IDEsCisJUUlDX1JFUE9SVF9ORVhUX0JJVAkJPSAyLAorCVFJQ19QQVVTRSAJCQk9IDMsCisJUUlDX01JQ1JPX1NURVBfUEFVU0UJCT0gNCwKKwlRSUNfQUxURVJOQVRFX1RJTUVPVVQJCT0gNSwKKwlRSUNfUkVQT1JUX0RSSVZFX1NUQVRVUwkJPSA2LAorCVFJQ19SRVBPUlRfRVJST1JfQ09ERQkJPSA3LAorCVFJQ19SRVBPUlRfRFJJVkVfQ09ORklHVVJBVElPTgk9IDgsCisJUUlDX1JFUE9SVF9ST01fVkVSU0lPTgkJPSA5LAorCVFJQ19MT0dJQ0FMX0ZPUldBUkQJCT0gMTAsCisJUUlDX1BIWVNJQ0FMX1JFVkVSU0UJCT0gMTEsCisJUUlDX1BIWVNJQ0FMX0ZPUldBUkQJCT0gMTIsCisJUUlDX1NFRUtfSEVBRF9UT19UUkFDSwkJPSAxMywKKwlRSUNfU0VFS19MT0FEX1BPSU5UCQk9IDE0LAorCVFJQ19FTlRFUl9GT1JNQVRfTU9ERQkJPSAxNSwKKwlRSUNfV1JJVEVfUkVGRVJFTkNFX0JVUlNUCT0gMTYsCisJUUlDX0VOVEVSX1ZFUklGWV9NT0RFCQk9IDE3LAorCVFJQ19TVE9QX1RBUEUJCQk9IDE4LAorLyogY29tbWFuZHMgMTktMjA6IHJlc2VydmVkICovCisJUUlDX01JQ1JPX1NURVBfSEVBRF9VUAkJPSAyMSwKKwlRSUNfTUlDUk9fU1RFUF9IRUFEX0RPV04JPSAyMiwKKwlRSUNfU09GVF9TRUxFQ1QJCQk9IDIzLAorCVFJQ19TT0ZUX0RFU0VMRUNUCQk9IDI0LAorCVFJQ19TS0lQX1JFVkVSU0UJCT0gMjUsCisJUUlDX1NLSVBfRk9SV0FSRAkJPSAyNiwKKwlRSUNfU0VMRUNUX1JBVEUJCQk9IDI3LAorLyogY29tbWFuZCAyNywgaW4gY2NzMjogU2VsZWN0IFJhdGUgb3IgRm9ybWF0ICovCisJUUlDX0VOVEVSX0RJQUdOT1NUSUNfMQkJPSAyOCwKKwlRSUNfRU5URVJfRElBR05PU1RJQ18yCQk9IDI5LAorCVFJQ19FTlRFUl9QUklNQVJZX01PREUJCT0gMzAsCisvKiBjb21tYW5kIDMxOiB2ZW5kb3IgdW5pcXVlICovCisJUUlDX1JFUE9SVF9WRU5ET1JfSUQJCT0gMzIsCisJUUlDX1JFUE9SVF9UQVBFX1NUQVRVUwkJPSAzMywKKwlRSUNfU0tJUF9FWFRFTkRFRF9SRVZFUlNFCT0gMzQsCisJUUlDX1NLSVBfRVhURU5ERURfRk9SV0FSRAk9IDM1LAorCVFJQ19DQUxJQlJBVEVfVEFQRV9MRU5HVEgJPSAzNiwKKwlRSUNfUkVQT1JUX0ZPUk1BVF9TRUdNRU5UUwk9IDM3LAorCVFJQ19TRVRfRk9STUFUX1NFR01FTlRTCQk9IDM4LAorLyogY29tbWFuZHMgMzktNDU6IHJlc2VydmVkICovCisJUUlDX1BIQU5UT01fU0VMRUNUCQk9IDQ2LAorCVFJQ19QSEFOVE9NX0RFU0VMRUNUCQk9IDQ3Cit9IHFpYzExN19jbWRfdDsKKwordHlwZWRlZiBlbnVtIHsKKwlkaXNjcmV0aW9uYWwgPSAwLCByZXF1aXJlZCwgY2NzMSwgY2NzMgorfSBxaWNfY29tcGF0aWJpbGl0eTsKKwordHlwZWRlZiBlbnVtIHsKKwl1bnVzZWQsIG1vZGUsIG1vdGlvbiwgcmVwb3J0Cit9IGNvbW1hbmRfdHlwZXM7CisKK3N0cnVjdCBxaWMxMTdfY29tbWFuZF90YWJsZSB7CisJY2hhciAqbmFtZTsKKwlfX3U4IG1hc2s7CisJX191OCBzdGF0ZTsKKwlfX3U4IGNtZF90eXBlOworCV9fdTggbm9uX2ludHI7CisJX191OCBsZXZlbDsKK307CisKKyNkZWZpbmUgUUlDMTE3X0NPTU1BTkRTIHtcCisvKiBjb21tYW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzayAgc3RhdGUgY21kX3R5cGUgICAgICAgICAgICovXAorLyogfCAgICBuYW1lICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgICAgIHwgICAgICAgbm9uX2ludHIgICAqL1wKKy8qIHwgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8ICAgICB8ICAgICAgIHwgIGxldmVsICAgKi9cCisvKiAwKi8ge05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgMHgwMCwgbW9kZSwgICAwLCBkaXNjcmV0aW9uYWx9LFwKKy8qIDEqLyB7InNvZnQgcmVzZXQiLCAgICAgICAgICAgICAgICAweDAwLCAweDAwLCBtb3Rpb24sIDEsIHJlcXVpcmVkfSxcCisvKiAyKi8geyJyZXBvcnQgbmV4dCBiaXQiLCAgICAgICAgICAgMHgwMCwgMHgwMCwgcmVwb3J0LCAwLCByZXF1aXJlZH0sXAorLyogMyovIHsicGF1c2UiLCAgICAgICAgICAgICAgICAgICAgIDB4MzYsIDB4MjQsIG1vdGlvbiwgMSwgcmVxdWlyZWR9LFwKKy8qIDQqLyB7Im1pY3JvIHN0ZXAgcGF1c2UiLCAgICAgICAgICAweDM2LCAweDI0LCBtb3Rpb24sIDEsIHJlcXVpcmVkfSxcCisvKiA1Ki8geyJhbHRlcm5hdGUgY29tbWFuZCB0aW1lb3V0IiwgMHgwMCwgMHgwMCwgbW9kZSwgICAwLCByZXF1aXJlZH0sXAorLyogNiovIHsicmVwb3J0IGRyaXZlIHN0YXR1cyIsICAgICAgIDB4MDAsIDB4MDAsIHJlcG9ydCwgMCwgcmVxdWlyZWR9LFwKKy8qIDcqLyB7InJlcG9ydCBlcnJvciBjb2RlIiwgICAgICAgICAweDAxLCAweDAxLCByZXBvcnQsIDAsIHJlcXVpcmVkfSxcCisvKiA4Ki8geyJyZXBvcnQgZHJpdmUgY29uZmlndXJhdGlvbiIsMHgwMCwgMHgwMCwgcmVwb3J0LCAwLCByZXF1aXJlZH0sXAorLyogOSovIHsicmVwb3J0IHJvbSB2ZXJzaW9uIiwgICAgICAgIDB4MDAsIDB4MDAsIHJlcG9ydCwgMCwgcmVxdWlyZWR9LFwKKy8qMTAqLyB7ImxvZ2ljYWwgZm9yd2FyZCIsICAgICAgICAgICAweDM3LCAweDI1LCBtb3Rpb24sIDAsIHJlcXVpcmVkfSxcCisvKjExKi8geyJwaHlzaWNhbCByZXZlcnNlIiwgICAgICAgICAgMHgxNywgMHgwNSwgbW90aW9uLCAwLCByZXF1aXJlZH0sXAorLyoxMiovIHsicGh5c2ljYWwgZm9yd2FyZCIsICAgICAgICAgIDB4MTcsIDB4MDUsIG1vdGlvbiwgMCwgcmVxdWlyZWR9LFwKKy8qMTMqLyB7InNlZWsgaGVhZCB0byB0cmFjayIsICAgICAgICAweDM3LCAweDI1LCBtb3Rpb24sIDAsIHJlcXVpcmVkfSxcCisvKjE0Ki8geyJzZWVrIGxvYWQgcG9pbnQiLCAgICAgICAgICAgMHgxNywgMHgwNSwgbW90aW9uLCAxLCByZXF1aXJlZH0sXAorLyoxNSovIHsiZW50ZXIgZm9ybWF0IG1vZGUiLCAgICAgICAgIDB4MWYsIDB4MDUsIG1vZGUsICAgMCwgcmVxdWlyZWR9LFwKKy8qMTYqLyB7IndyaXRlIHJlZmVyZW5jZSBidXJzdCIsICAgICAweDFmLCAweDA1LCBtb3Rpb24sIDEsIHJlcXVpcmVkfSxcCisvKjE3Ki8geyJlbnRlciB2ZXJpZnkgbW9kZSIsICAgICAgICAgMHgzNywgMHgyNSwgbW9kZSwgICAwLCByZXF1aXJlZH0sXAorLyoxOCovIHsic3RvcCB0YXBlIiwgICAgICAgICAgICAgICAgIDB4MDAsIDB4MDAsIG1vdGlvbiwgMSwgcmVxdWlyZWR9LFwKKy8qMTkqLyB7InJlc2VydmVkICgxOSkiLCAgICAgICAgICAgICAweDAwLCAweDAwLCB1bnVzZWQsIDAsIGRpc2NyZXRpb25hbH0sXAorLyoyMCovIHsicmVzZXJ2ZWQgKDIwKSIsICAgICAgICAgICAgIDB4MDAsIDB4MDAsIHVudXNlZCwgMCwgZGlzY3JldGlvbmFsfSxcCisvKjIxKi8geyJtaWNybyBzdGVwIGhlYWQgdXAiLCAgICAgICAgMHgwMiwgMHgwMCwgbW90aW9uLCAwLCByZXF1aXJlZH0sXAorLyoyMiovIHsibWljcm8gc3RlcCBoZWFkIGRvd24iLCAgICAgIDB4MDIsIDB4MDAsIG1vdGlvbiwgMCwgcmVxdWlyZWR9LFwKKy8qMjMqLyB7InNvZnQgc2VsZWN0IiwgICAgICAgICAgICAgICAweDAwLCAweDAwLCBtb2RlLCAgIDAsIGRpc2NyZXRpb25hbH0sXAorLyoyNCovIHsic29mdCBkZXNlbGVjdCIsICAgICAgICAgICAgIDB4MDAsIDB4MDAsIG1vZGUsICAgMCwgZGlzY3JldGlvbmFsfSxcCisvKjI1Ki8geyJza2lwIHNlZ21lbnRzIHJldmVyc2UiLCAgICAgMHgzNiwgMHgyNCwgbW90aW9uLCAxLCByZXF1aXJlZH0sXAorLyoyNiovIHsic2tpcCBzZWdtZW50cyBmb3J3YXJkIiwgICAgIDB4MzYsIDB4MjQsIG1vdGlvbiwgMSwgcmVxdWlyZWR9LFwKKy8qMjcqLyB7InNlbGVjdCByYXRlIG9yIGZvcm1hdCIsICAgICAweDAzLCAweDAxLCBtb2RlLCAgIDAsIHJlcXVpcmVkIC8qIFtjY3MyXSAqL30sXAorLyoyOCovIHsiZW50ZXIgZGlhZyBtb2RlIDEiLCAgICAgICAgIDB4MDAsIDB4MDAsIG1vZGUsICAgMCwgZGlzY3JldGlvbmFsfSxcCisvKjI5Ki8geyJlbnRlciBkaWFnIG1vZGUgMiIsICAgICAgICAgMHgwMCwgMHgwMCwgbW9kZSwgICAwLCBkaXNjcmV0aW9uYWx9LFwKKy8qMzAqLyB7ImVudGVyIHByaW1hcnkgbW9kZSIsICAgICAgICAweDAwLCAweDAwLCBtb2RlLCAgIDAsIHJlcXVpcmVkfSxcCisvKjMxKi8geyJ2ZW5kb3IgdW5pcXVlICgzMSkiLCAgICAgICAgMHgwMCwgMHgwMCwgdW51c2VkLCAwLCBkaXNjcmV0aW9uYWx9LFwKKy8qMzIqLyB7InJlcG9ydCB2ZW5kb3IgaWQiLCAgICAgICAgICAweDAwLCAweDAwLCByZXBvcnQsIDAsIHJlcXVpcmVkfSxcCisvKjMzKi8geyJyZXBvcnQgdGFwZSBzdGF0dXMiLCAgICAgICAgMHgwNCwgMHgwNCwgcmVwb3J0LCAwLCBjY3MxfSxcCisvKjM0Ki8geyJza2lwIGV4dGVuZGVkIHJldmVyc2UiLCAgICAgMHgzNiwgMHgyNCwgbW90aW9uLCAxLCBjY3MxfSxcCisvKjM1Ki8geyJza2lwIGV4dGVuZGVkIGZvcndhcmQiLCAgICAgMHgzNiwgMHgyNCwgbW90aW9uLCAxLCBjY3MxfSxcCisvKjM2Ki8geyJjYWxpYnJhdGUgdGFwZSBsZW5ndGgiLCAgICAgMHgxNywgMHgwNSwgbW90aW9uLCAxLCBjY3MyfSxcCisvKjM3Ki8geyJyZXBvcnQgZm9ybWF0IHNlZ21lbnRzIiwgICAgMHgxNywgMHgwNSwgcmVwb3J0LCAwLCBjY3MyfSxcCisvKjM4Ki8geyJzZXQgZm9ybWF0IHNlZ21lbnRzIiwgICAgICAgMHgxNywgMHgwNSwgbW9kZSwgICAwLCBjY3MyfSxcCisvKjM5Ki8geyJyZXNlcnZlZCAoMzkpIiwgICAgICAgICAgICAgMHgwMCwgMHgwMCwgdW51c2VkLCAwLCBkaXNjcmV0aW9uYWx9LFwKKy8qNDAqLyB7InZlbmRvciB1bmlxdWUgKDQwKSIsICAgICAgICAweDAwLCAweDAwLCB1bnVzZWQsIDAsIGRpc2NyZXRpb25hbH0sXAorLyo0MSovIHsidmVuZG9yIHVuaXF1ZSAoNDEpIiwgICAgICAgIDB4MDAsIDB4MDAsIHVudXNlZCwgMCwgZGlzY3JldGlvbmFsfSxcCisvKjQyKi8geyJ2ZW5kb3IgdW5pcXVlICg0MikiLCAgICAgICAgMHgwMCwgMHgwMCwgdW51c2VkLCAwLCBkaXNjcmV0aW9uYWx9LFwKKy8qNDMqLyB7InZlbmRvciB1bmlxdWUgKDQzKSIsICAgICAgICAweDAwLCAweDAwLCB1bnVzZWQsIDAsIGRpc2NyZXRpb25hbH0sXAorLyo0NCovIHsidmVuZG9yIHVuaXF1ZSAoNDQpIiwgICAgICAgIDB4MDAsIDB4MDAsIHVudXNlZCwgMCwgZGlzY3JldGlvbmFsfSxcCisvKjQ1Ki8geyJ2ZW5kb3IgdW5pcXVlICg0NSkiLCAgICAgICAgMHgwMCwgMHgwMCwgdW51c2VkLCAwLCBkaXNjcmV0aW9uYWx9LFwKKy8qNDYqLyB7InBoYW50b20gc2VsZWN0IiwgICAgICAgICAgICAweDAwLCAweDAwLCBtb2RlLCAgIDAsIGRpc2NyZXRpb25hbH0sXAorLyo0NyovIHsicGhhbnRvbSBkZXNlbGVjdCIsICAgICAgICAgIDB4MDAsIDB4MDAsIG1vZGUsICAgMCwgZGlzY3JldGlvbmFsfSxcCit9CisKKy8qCisgKiAgICAgIFN0YXR1cyBiaXRzIHJldHVybmVkIGJ5IFFJQ19SRVBPUlRfRFJJVkVfU1RBVFVTCisgKi8KKworI2RlZmluZSBRSUNfU1RBVFVTX1JFQURZCTB4MDEJLyogRHJpdmUgaXMgcmVhZHkgb3IgaWRsZS4gKi8KKyNkZWZpbmUgUUlDX1NUQVRVU19FUlJPUgkweDAyCS8qIEVycm9yIGRldGVjdGVkLCBtdXN0IHJlYWQKKwkJCQkJICAgZXJyb3IgY29kZSB0byBjbGVhciB0aGlzICovCisjZGVmaW5lIFFJQ19TVEFUVVNfQ0FSVFJJREdFX1BSRVNFTlQgMHgwNAkvKiBUYXBlIGlzIHByZXNlbnQgKi8KKyNkZWZpbmUgUUlDX1NUQVRVU19XUklURV9QUk9URUNUIDB4MDgJLyogVGFwZSBpcyB3cml0ZSBwcm90ZWN0ZWQgKi8KKyNkZWZpbmUgUUlDX1NUQVRVU19ORVdfQ0FSVFJJREdFIDB4MTAJLyogTmV3IGNhcnRyaWRnZSBpbnNlcnRlZCwgbXVzdAorCQkJCQkgICByZWFkIGVycm9yIHN0YXR1cyB0byBjbGVhci4gKi8KKyNkZWZpbmUgUUlDX1NUQVRVU19SRUZFUkVOQ0VECTB4MjAJLyogQ2FydHJpZGdlIGFwcGVhcnMgdG8gaGF2ZSBiZWVuCisJCQkJCSAgIGZvcm1hdHRlZC4gKi8KKyNkZWZpbmUgUUlDX1NUQVRVU19BVF9CT1QJMHg0MAkvKiBDYXJ0cmlkZ2UgaXMgYXQgcGh5c2ljYWwKKwkJCQkJICAgYmVnaW5uaW5nIG9mIHRhcGUuICovCisjZGVmaW5lIFFJQ19TVEFUVVNfQVRfRU9UCTB4ODAJLyogQ2FydHJpZGdlIGlzIGF0IHBoeXNpY2FsIGVuZAorCQkJCQkgICBvZiB0YXBlLiAqLworLyoKKyAqICAgICAgU3RhdHVzIGJpdHMgcmV0dXJuZWQgYnkgUUlDX1JFUE9SVF9EUklWRV9DT05GSUdVUkFUSU9OCisgKi8KKworI2RlZmluZSBRSUNfQ09ORklHX1JBVEVfTUFTSwkweDE4CisjZGVmaW5lIFFJQ19DT05GSUdfUkFURV9TSElGVAkzCisjZGVmaW5lIFFJQ19DT05GSUdfUkFURV8yNTAJMAorI2RlZmluZSBRSUNfQ09ORklHX1JBVEVfNTAwCTIKKyNkZWZpbmUgUUlDX0NPTkZJR19SQVRFXzEwMDAJMworI2RlZmluZSBRSUNfQ09ORklHX1JBVEVfMjAwMAkxCisjZGVmaW5lIFFJQ19DT05GSUdfUkFURV80MDAwICAgIDAgICAgICAgLyogc2luY2UgUUlDLTExNyBSZXYuIEogKi8KKworI2RlZmluZSBRSUNfQ09ORklHX0xPTkcJCTB4NDAJLyogRXh0cmEgTGVuZ3RoIFRhcGUgRGV0ZWN0ZWQgKi8KKyNkZWZpbmUgUUlDX0NPTkZJR184MAkJMHg4MAkvKiBRSUMtODAgZGV0ZWN0ZWQuICovCisKKy8qCisgKiAgICAgIFN0YXR1cyBiaXRzIHJldHVybmVkIGJ5IFFJQ19SRVBPUlRfVEFQRV9TVEFUVVMKKyAqLworCisjZGVmaW5lIFFJQ19UQVBFX1NURF9NQVNLICAgICAgIDB4MGYKKyNkZWZpbmUgUUlDX1RBUEVfUUlDNDAgIAkweDAxCisjZGVmaW5lIFFJQ19UQVBFX1FJQzgwICAJMHgwMgorI2RlZmluZSBRSUNfVEFQRV9RSUMzMDIwICAJMHgwMworI2RlZmluZSBRSUNfVEFQRV9RSUMzMDEwICAJMHgwNAorCisjZGVmaW5lIFFJQ19UQVBFX0xFTl9NQVNLCTB4NzAKKyNkZWZpbmUgUUlDX1RBUEVfMjA1RlQJCTB4MTAKKyNkZWZpbmUgUUlDX1RBUEVfMzA3RlQJCTB4MjAKKyNkZWZpbmUgUUlDX1RBUEVfVkFSSUFCTEUJMHgzMAorI2RlZmluZSBRSUNfVEFQRV8xMTAwRlQJCTB4NDAKKyNkZWZpbmUgUUlDX1RBUEVfRkxFWAkJMHg2MAorCisjZGVmaW5lIFFJQ19UQVBFX1dJREUJCTB4ODAKKworLyogRGVmaW5lIGEgdmFsdWUgKGluIGZlZXQpIHNsaWdodGx5IGhpZ2hlciB0aGFuIAorICogdGhlIHBvc3NpYmxlIG1heGltdW0gdGFwZSBsZW5ndGguCisgKi8KKyNkZWZpbmUgUUlDX1RPUF9UQVBFX0xFTgkxNTAwCisKKy8qCisgKiAgICAgIEVycm9yczogTGlzdCBvZiBlcnJvciBjb2RlcywgYW5kIHRoZWlyIHNldmVyaXR5LgorICovCisKK3R5cGVkZWYgc3RydWN0IHsKKwljaGFyICptZXNzYWdlOwkJLyogVGV4dCBkZXNjcmliaW5nIHRoZSBlcnJvci4gKi8KKwl1bnNpZ25lZCBpbnQgZmF0YWw6MTsJLyogTm9uLXplcm8gaWYgdGhlIGVycm9yIGlzIGZhdGFsLiAqLworfSBmdGFwZV9lcnJvcjsKKworI2RlZmluZSBRSUMxMTdfRVJST1JTIHtcCisgIC8qIDAqLyB7ICJObyBlcnJvciIsIDAsIH0sXAorICAvKiAxKi8geyAiQ29tbWFuZCBSZWNlaXZlZCB3aGlsZSBEcml2ZSBOb3QgUmVhZHkiLCAwLCB9LFwKKyAgLyogMiovIHsgIkNhcnRyaWRnZSBOb3QgUHJlc2VudCBvciBSZW1vdmVkIiwgMSwgfSxcCisgIC8qIDMqLyB7ICJNb3RvciBTcGVlZCBFcnJvciAobm90IHdpdGhpbiAxJSkiLCAxLCB9LFwKKyAgLyogNCovIHsgIk1vdG9yIFNwZWVkIEZhdWx0IChqYW1tZWQsIG9yIGdyb3NzIHNwZWVkIGVycm9yIiwgMSwgfSxcCisgIC8qIDUqLyB7ICJDYXJ0cmlkZ2UgV3JpdGUgUHJvdGVjdGVkIiwgMSwgfSxcCisgIC8qIDYqLyB7ICJVbmRlZmluZWQgb3IgUmVzZXJ2ZWQgQ29tbWFuZCBDb2RlIiwgMSwgfSxcCisgIC8qIDcqLyB7ICJJbGxlZ2FsIFRyYWNrIEFkZHJlc3MgU3BlY2lmaWVkIGZvciBTZWVrIiwgMSwgfSxcCisgIC8qIDgqLyB7ICJJbGxlZ2FsIENvbW1hbmQgaW4gUmVwb3J0IFN1YmNvbnRleHQiLCAwLCB9LFwKKyAgLyogOSovIHsgIklsbGVnYWwgRW50cnkgaW50byBhIERpYWdub3N0aWMgTW9kZSIsIDEsIH0sXAorICAvKjEwKi8geyAiQnJva2VuIFRhcGUgRGV0ZWN0ZWQgKGJhc2VkIG9uIGhvbGUgc2Vuc29yKSIsIDEsIH0sXAorICAvKjExKi8geyAiV2FybmluZy0tUmVhZCBHYWluIFNldHRpbmcgRXJyb3IiLCAxLCB9LFwKKyAgLyoxMiovIHsgIkNvbW1hbmQgUmVjZWl2ZWQgV2hpbGUgRXJyb3IgU3RhdHVzIFBlbmRpbmcgKG9icykiLCAxLCB9LFwKKyAgLyoxMyovIHsgIkNvbW1hbmQgUmVjZWl2ZWQgV2hpbGUgTmV3IENhcnRyaWRnZSBQZW5kaW5nIiwgMSwgfSxcCisgIC8qMTQqLyB7ICJDb21tYW5kIElsbGVnYWwgb3IgVW5kZWZpbmVkIGluIFByaW1hcnkgTW9kZSIsIDEsIH0sXAorICAvKjE1Ki8geyAiQ29tbWFuZCBJbGxlZ2FsIG9yIFVuZGVmaW5lZCBpbiBGb3JtYXQgTW9kZSIsIDEsIH0sXAorICAvKjE2Ki8geyAiQ29tbWFuZCBJbGxlZ2FsIG9yIFVuZGVmaW5lZCBpbiBWZXJpZnkgTW9kZSIsIDEsIH0sXAorICAvKjE3Ki8geyAiTG9naWNhbCBGb3J3YXJkIE5vdCBhdCBMb2dpY2FsIEJPVCBvciBubyBGb3JtYXQgU2VnbWVudHMgaW4gRm9ybWF0IE1vZGUiLCAxLCB9LFwKKyAgLyoxOCovIHsgIkxvZ2ljYWwgRU9UIEJlZm9yZSBBbGwgU2VnbWVudHMgZ2VuZXJhdGVkIiwgMSwgfSxcCisgIC8qMTkqLyB7ICJDb21tYW5kIElsbGVnYWwgV2hlbiBDYXJ0cmlkZ2UgTm90IFJlZmVyZW5jZWQiLCAxLCB9LFwKKyAgLyoyMCovIHsgIlNlbGYtRGlhZ25vc3RpYyBGYWlsZWQgKGNhbm5vdCBiZSBjbGVhcmVkKSIsIDEsIH0sXAorICAvKjIxKi8geyAiV2FybmluZyBFRVBST00gTm90IEluaXRpYWxpemVkLCBEZWZhdWx0cyBTZXQiLCAxLCB9LFwKKyAgLyoyMiovIHsgIkVFUFJPTSBDb3JydXB0ZWQgb3IgSGFyZHdhcmUgRmFpbHVyZSIsIDEsIH0sXAorICAvKjIzKi8geyAiTW90aW9uIFRpbWUtb3V0IEVycm9yIiwgMSwgfSxcCisgIC8qMjQqLyB7ICJEYXRhIFNlZ21lbnQgVG9vIExvbmcgLS0gTG9naWNhbCBGb3J3YXJkIG9yIFBhdXNlIiwgMSwgfSxcCisgIC8qMjUqLyB7ICJUcmFuc21pdCBPdmVycnVuIChvYnMpIiwgMSwgfSxcCisgIC8qMjYqLyB7ICJQb3dlciBPbiBSZXNldCBPY2N1cnJlZCIsIDAsIH0sXAorICAvKjI3Ki8geyAiU29mdHdhcmUgUmVzZXQgT2NjdXJyZWQiLCAwLCB9LFwKKyAgLyoyOCovIHsgIkRpYWdub3N0aWMgTW9kZSAxIEVycm9yIiwgMSwgfSxcCisgIC8qMjkqLyB7ICJEaWFnbm9zdGljIE1vZGUgMiBFcnJvciIsIDEsIH0sXAorICAvKjMwKi8geyAiQ29tbWFuZCBSZWNlaXZlZCBEdXJpbmcgTm9uLUludGVycnVwdGlibGUgUHJvY2VzcyIsIDEsIH0sXAorICAvKjMxKi8geyAiUmF0ZSBvciBGb3JtYXQgU2VsZWN0aW9uIEVycm9yIiwgMSwgfSxcCisgIC8qMzIqLyB7ICJJbGxlZ2FsIENvbW1hbmQgV2hpbGUgaW4gSGlnaCBTcGVlZCBNb2RlIiwgMSwgfSxcCisgIC8qMzMqLyB7ICJJbGxlZ2FsIFNlZWsgU2VnbWVudCBWYWx1ZSIsIDEsIH0sXAorICAvKjM0Ki8geyAiSW52YWxpZCBNZWRpYSIsIDEsIH0sXAorICAvKjM1Ki8geyAiSGVhZCBQb3NpdGlvbmluZyBGYWlsdXJlIiwgMSwgfSxcCisgIC8qMzYqLyB7ICJXcml0ZSBSZWZlcmVuY2UgQnVyc3QgRmFpbHVyZSIsIDEsIH0sXAorICAvKjM3Ki8geyAiUHJvbSBDb2RlIE1pc3NpbmciLCAxLCB9LFwKKyAgLyozOCovIHsgIkludmFsaWQgRm9ybWF0IiwgMSwgfSxcCisgIC8qMzkqLyB7ICJFT1QvQk9UIFN5c3RlbSBGYWlsdXJlIiwgMSwgfSxcCisgIC8qNDAqLyB7ICJQcm9tIEEgQ2hlY2tzdW0gRXJyb3IiLCAxLCB9LFwKKyAgLyo0MSovIHsgIkRyaXZlIFdha2V1cCBSZXNldCBPY2N1cnJlZCIsIDEsIH0sXAorICAvKjQyKi8geyAiUHJvbSBCIENoZWNrc3VtIEVycm9yIiwgMSwgfSxcCisgIC8qNDMqLyB7ICJJbGxlZ2FsIEVudHJ5IGludG8gRm9ybWF0IE1vZGUiLCAxLCB9LFwKK30KKworI2VuZGlmCQkJCS8qIF9RSUMxMTdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9xbng0X2ZzLmggYi9pbmNsdWRlL2xpbnV4L3FueDRfZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmJhNTgwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9xbng0X2ZzLmgKQEAgLTAsMCArMSwxNTAgQEAKKy8qCisgKiAgTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICA6IHFueDRfZnMuaAorICogIEF1dGhvciAgICAgICAgICAgICAgICAgICAgICAgOiBSaWNoYXJkIEZyb3dpam4KKyAqICBGdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgIDogcW54NCBnbG9iYWwgZmlsZXN5c3RlbSBkZWZpbml0aW9ucworICogIFZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgOiAxLjAuMgorICogIExhc3QgbW9kaWZpZWQgICAgICAgICAgICAgICAgOiAyMDAwLTAxLTMxCisgKgorICogIEhpc3RvcnkgICAgICAgICAgICAgICAgICAgICAgOiAyMy0wMy0xOTk4IGNyZWF0ZWQKKyAqLworI2lmbmRlZiBfTElOVVhfUU5YNF9GU19ICisjZGVmaW5lIF9MSU5VWF9RTlg0X0ZTX0gKKworI2luY2x1ZGUgPGxpbnV4L3FueHR5cGVzLmg+CisKKyNkZWZpbmUgUU5YNF9ST09UX0lOTyAxCisKKyNkZWZpbmUgUU5YNF9NQVhfWFROVFNfUEVSX1hCTEsJNjAKKy8qIGZvciBkaV9zdGF0dXMgKi8KKyNkZWZpbmUgUU5YNF9GSUxFX1VTRUQgICAgICAgICAgMHgwMQorI2RlZmluZSBRTlg0X0ZJTEVfTU9ESUZJRUQgICAgICAweDAyCisjZGVmaW5lIFFOWDRfRklMRV9CVVNZICAgICAgICAgIDB4MDQKKyNkZWZpbmUgUU5YNF9GSUxFX0xJTksgICAgICAgICAgMHgwOAorI2RlZmluZSBRTlg0X0ZJTEVfSU5PREUgICAgICAgICAweDEwCisjZGVmaW5lIFFOWDRfRklMRV9GU1lTQ0xFQU4gICAgIDB4MjAKKworI2RlZmluZSBRTlg0X0lfTUFQX1NMT1RTCTgKKyNkZWZpbmUgUU5YNF9aX01BUF9TTE9UUwk2NAorI2RlZmluZSBRTlg0X1NVUEVSX01BR0lDCTB4MDAyZgkvKiBxbng0IGZzIGRldGVjdGlvbiAqLworI2RlZmluZSBRTlg0X1ZBTElEX0ZTCQkweDAwMDEJLyogQ2xlYW4gZnMuICovCisjZGVmaW5lIFFOWDRfRVJST1JfRlMJCTB4MDAwMgkvKiBmcyBoYXMgZXJyb3JzLiAqLworI2RlZmluZSBRTlg0X0JMT0NLX1NJWkUgICAgICAgICAweDIwMAkvKiBibG9ja3NpemUgb2YgNTEyIGJ5dGVzICovCisjZGVmaW5lIFFOWDRfQkxPQ0tfU0laRV9CSVRTICAgIDkJLyogYmxvY2tzaXplIHNoaWZ0ICovCisjZGVmaW5lIFFOWDRfRElSX0VOVFJZX1NJWkUgICAgIDB4MDQwCS8qIGRpciBlbnRyeSBzaXplIG9mIDY0IGJ5dGVzICovCisjZGVmaW5lIFFOWDRfRElSX0VOVFJZX1NJWkVfQklUUyA2CS8qIGRpciBlbnRyeSBzaXplIHNoaWZ0ICovCisjZGVmaW5lIFFOWDRfWEJMS19FTlRSWV9TSVpFICAgIDB4MjAwCS8qIHhibGsgZW50cnkgc2l6ZSAqLworI2RlZmluZSBRTlg0X0lOT0RFU19QRVJfQkxPQ0sgICAweDA4CS8qIDUxMiAvIDY0ICovCisKKy8qIGZvciBmaWxlbmFtZXMgKi8KKyNkZWZpbmUgUU5YNF9TSE9SVF9OQU1FX01BWAkxNgorI2RlZmluZSBRTlg0X05BTUVfTUFYCQk0OAorCisvKgorICogVGhpcyBpcyB0aGUgb3JpZ2luYWwgcW54NCBpbm9kZSBsYXlvdXQgb24gZGlzay4KKyAqLworc3RydWN0IHFueDRfaW5vZGVfZW50cnkgeworCWNoYXIJCWRpX2ZuYW1lW1FOWDRfU0hPUlRfTkFNRV9NQVhdOworCXFueDRfb2ZmX3QJZGlfc2l6ZTsKKwlxbng0X3h0bnRfdAlkaV9maXJzdF94dG50OworCV9fdTMyCQlkaV94YmxrOworCV9fczMyCQlkaV9mdGltZTsKKwlfX3MzMgkJZGlfbXRpbWU7CisJX19zMzIJCWRpX2F0aW1lOworCV9fczMyCQlkaV9jdGltZTsKKwlxbng0X254dG50X3QJZGlfbnVtX3h0bnRzOworCXFueDRfbW9kZV90CWRpX21vZGU7CisJcW54NF9tdWlkX3QJZGlfdWlkOworCXFueDRfbWdpZF90CWRpX2dpZDsKKwlxbng0X25saW5rX3QJZGlfbmxpbms7CisJX191OAkJZGlfemVyb1s0XTsKKwlxbng0X2Z0eXBlX3QJZGlfdHlwZTsKKwlfX3U4CQlkaV9zdGF0dXM7Cit9OworCitzdHJ1Y3QgcW54NF9saW5rX2luZm8geworCWNoYXIJCWRsX2ZuYW1lW1FOWDRfTkFNRV9NQVhdOworCV9fdTMyCQlkbF9pbm9kZV9ibGs7CisJX191OAkJZGxfaW5vZGVfbmR4OworCV9fdTgJCWRsX3NwYXJlWzEwXTsKKwlfX3U4CQlkbF9zdGF0dXM7Cit9OworCitzdHJ1Y3QgcW54NF94YmxrIHsKKwlfX3UzMgkJeGJsa19uZXh0X3hibGs7CisJX191MzIJCXhibGtfcHJldl94YmxrOworCV9fdTgJCXhibGtfbnVtX3h0bnRzOworCV9fdTgJCXhibGtfc3BhcmVbM107CisJX19zMzIJCXhibGtfbnVtX2Jsb2NrczsKKwlxbng0X3h0bnRfdAl4YmxrX3h0bnRzW1FOWDRfTUFYX1hUTlRTX1BFUl9YQkxLXTsKKwljaGFyCQl4YmxrX3NpZ25hdHVyZVs4XTsKKwlxbng0X3h0bnRfdAl4YmxrX2ZpcnN0X3h0bnQ7Cit9OworCitzdHJ1Y3QgcW54NF9zdXBlcl9ibG9jayB7CisJc3RydWN0IHFueDRfaW5vZGVfZW50cnkgUm9vdERpcjsKKwlzdHJ1Y3QgcW54NF9pbm9kZV9lbnRyeSBJbm9kZTsKKwlzdHJ1Y3QgcW54NF9pbm9kZV9lbnRyeSBCb290OworCXN0cnVjdCBxbng0X2lub2RlX2VudHJ5IEFsdEJvb3Q7Cit9OworCisjaWZkZWYgX19LRVJORUxfXworCisjZGVmaW5lIFFOWDRfREVCVUcgMAorCisjaWYgUU5YNF9ERUJVRworI2RlZmluZSBRTlg0REVCVUcoWCkgcHJpbnRrIFgKKyNlbHNlCisjZGVmaW5lIFFOWDRERUJVRyhYKSAodm9pZCkgMAorI2VuZGlmCisKK3N0cnVjdCBxbng0X3NiX2luZm8geworCXN0cnVjdCBidWZmZXJfaGVhZAkqc2JfYnVmOwkvKiBzdXBlcmJsb2NrIGJ1ZmZlciAqLworCXN0cnVjdCBxbng0X3N1cGVyX2Jsb2NrCSpzYjsJCS8qIG91ciBzdXBlcmJsb2NrICovCisJdW5zaWduZWQgaW50CQlWZXJzaW9uOwkvKiBtYXkgYmUgdXNlZnVsICovCisJc3RydWN0IHFueDRfaW5vZGVfZW50cnkJKkJpdE1hcDsJLyogdXNlZnVsICovCit9OworCitzdHJ1Y3QgcW54NF9pbm9kZV9pbmZvIHsKKwlzdHJ1Y3QgcW54NF9pbm9kZV9lbnRyeSByYXc7CisJbG9mZl90IG1tdV9wcml2YXRlOworCXN0cnVjdCBpbm9kZSB2ZnNfaW5vZGU7Cit9OworCitleHRlcm4gc3RydWN0IGRlbnRyeSAqcW54NF9sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IG5hbWVpZGF0YSAqbmQpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcW54NF9jb3VudF9mcmVlX2Jsb2NrcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHFueDRfYmxvY2tfbWFwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvbmcgaWJsb2NrKTsKKworZXh0ZXJuIHN0cnVjdCBidWZmZXJfaGVhZCAqcW54NF9icmVhZChzdHJ1Y3QgaW5vZGUgKiwgaW50LCBpbnQpOworCitleHRlcm4gc3RydWN0IGlub2RlX29wZXJhdGlvbnMgcW54NF9maWxlX2lub2RlX29wZXJhdGlvbnM7CitleHRlcm4gc3RydWN0IGlub2RlX29wZXJhdGlvbnMgcW54NF9kaXJfaW5vZGVfb3BlcmF0aW9uczsKK2V4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHFueDRfZmlsZV9vcGVyYXRpb25zOworZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcW54NF9kaXJfb3BlcmF0aW9uczsKK2V4dGVybiBpbnQgcW54NF9pc19mcmVlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGxvbmcgYmxvY2spOworZXh0ZXJuIGludCBxbng0X3NldF9iaXRtYXAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgbG9uZyBibG9jaywgaW50IGJ1c3kpOworZXh0ZXJuIGludCBxbng0X2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBtb2RlLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCk7CitleHRlcm4gdm9pZCBxbng0X3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOworZXh0ZXJuIHZvaWQgcW54NF9mcmVlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOworZXh0ZXJuIGludCBxbng0X3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKK2V4dGVybiBpbnQgcW54NF9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKK2V4dGVybiBpbnQgcW54NF9zeW5jX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50KTsKK2V4dGVybiBpbnQgcW54NF9zeW5jX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBxbng0X3NiX2luZm8gKnFueDRfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlyZXR1cm4gc2ItPnNfZnNfaW5mbzsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcW54NF9pbm9kZV9pbmZvICpxbng0X2koc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGlub2RlLCBzdHJ1Y3QgcW54NF9pbm9kZV9pbmZvLCB2ZnNfaW5vZGUpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBxbng0X2lub2RlX2VudHJ5ICpxbng0X3Jhd19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXJldHVybiAmcW54NF9pKGlub2RlKS0+cmF3OworfQorCisjZW5kaWYJCQkJLyogX19LRVJORUxfXyAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcW54dHlwZXMuaCBiL2luY2x1ZGUvbGludXgvcW54dHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjUxOGUzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9xbnh0eXBlcy5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiAgTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICA6IHFueHR5cGVzLmgKKyAqICBBdXRob3IgICAgICAgICAgICAgICAgICAgICAgIDogUmljaGFyZCBGcm93aWpuCisgKiAgRnVuY3Rpb24gICAgICAgICAgICAgICAgICAgICA6IHN0YW5kYXJkIHFueCB0eXBlcworICogIFZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgOiAxLjAuMgorICogIExhc3QgbW9kaWZpZWQgICAgICAgICAgICAgICAgOiAyMDAwLTAxLTA2CisgKgorICogIEhpc3RvcnkgICAgICAgICAgICAgICAgICAgICAgOiAyMi0wMy0xOTk4IGNyZWF0ZWQKKyAqCisgKi8KKworI2lmbmRlZiBfUU5YNFRZUEVTX0gKKyNkZWZpbmUgX1FOWDRUWVBFU19ICisKK3R5cGVkZWYgX191MTYgcW54NF9ueHRudF90OwordHlwZWRlZiBfX3U4ICBxbng0X2Z0eXBlX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlfX3UzMiB4dG50X2JsazsKKwlfX3UzMiB4dG50X3NpemU7Cit9IHFueDRfeHRudF90OworCit0eXBlZGVmIF9fdTE2IHFueDRfbW9kZV90OwordHlwZWRlZiBfX3UxNiBxbng0X211aWRfdDsKK3R5cGVkZWYgX191MTYgcW54NF9tZ2lkX3Q7Cit0eXBlZGVmIF9fdTMyIHFueDRfb2ZmX3Q7Cit0eXBlZGVmIF9fdTE2IHFueDRfbmxpbmtfdDsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3F1b3RhLmggYi9pbmNsdWRlL2xpbnV4L3F1b3RhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM1YjkwZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvcXVvdGEuaApAQCAtMCwwICsxLDMyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMTk4MiwgMTk4NiBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIFJvYmVydCBFbHogYXQgVGhlIFVuaXZlcnNpdHkgb2YgTWVsYm91cm5lLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiBWZXJzaW9uOiAkSWQ6IHF1b3RhLmgsdiAyLjAgMTk5Ni8xMS8xNyAxNjo0ODoxNCBtdncgRXhwIG12dyAkCisgKi8KKworI2lmbmRlZiBfTElOVVhfUVVPVEFfCisjZGVmaW5lIF9MSU5VWF9RVU9UQV8KKworI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorCisjZGVmaW5lIF9fRFFVT1RfVkVSU0lPTl9fCSJkcXVvdF82LjUuMSIKKyNkZWZpbmUgX19EUVVPVF9OVU1fVkVSU0lPTl9fCTYqMTAwMDArNSoxMDArMQorCit0eXBlZGVmIF9fa2VybmVsX3VpZDMyX3QgcWlkX3Q7IC8qIFR5cGUgaW4gd2hpY2ggd2Ugc3RvcmUgaWRzIGluIG1lbW9yeSAqLwordHlwZWRlZiBfX3U2NCBxc2l6ZV90OyAgICAgICAgICAvKiBUeXBlIGluIHdoaWNoIHdlIHN0b3JlIHNpemVzICovCisKK2V4dGVybiBzcGlubG9ja190IGRxX2RhdGFfbG9jazsKKworLyogU2l6ZSBvZiBibG9ja3MgaW4gd2hpY2ggYXJlIGNvdW50ZWQgc2l6ZSBsaW1pdHMgKi8KKyNkZWZpbmUgUVVPVEFCTE9DS19CSVRTIDEwCisjZGVmaW5lIFFVT1RBQkxPQ0tfU0laRSAoMSA8PCBRVU9UQUJMT0NLX0JJVFMpCisKKy8qIENvbnZlcnNpb24gcm91dGluZXMgZnJvbSBhbmQgdG8gcXVvdGEgYmxvY2tzICovCisjZGVmaW5lIHFiMmtiKHgpICgoeCkgPDwgKFFVT1RBQkxPQ0tfQklUUy0xMCkpCisjZGVmaW5lIGtiMnFiKHgpICgoeCkgPj4gKFFVT1RBQkxPQ0tfQklUUy0xMCkpCisjZGVmaW5lIHRvcWIoeCkgKCgoeCkgKyBRVU9UQUJMT0NLX1NJWkUgLSAxKSA+PiBRVU9UQUJMT0NLX0JJVFMpCisKKyNkZWZpbmUgTUFYUVVPVEFTIDIKKyNkZWZpbmUgVVNSUVVPVEEgIDAJCS8qIGVsZW1lbnQgdXNlZCBmb3IgdXNlciBxdW90YXMgKi8KKyNkZWZpbmUgR1JQUVVPVEEgIDEJCS8qIGVsZW1lbnQgdXNlZCBmb3IgZ3JvdXAgcXVvdGFzICovCisKKy8qCisgKiBEZWZpbml0aW9ucyBmb3IgdGhlIGRlZmF1bHQgbmFtZXMgb2YgdGhlIHF1b3RhcyBmaWxlcy4KKyAqLworI2RlZmluZSBJTklUUUZOQU1FUyB7IFwKKwkidXNlciIsICAgIC8qIFVTUlFVT1RBICovIFwKKwkiZ3JvdXAiLCAgIC8qIEdSUFFVT1RBICovIFwKKwkidW5kZWZpbmVkIiwgXAorfTsKKworLyoKKyAqIENvbW1hbmQgZGVmaW5pdGlvbnMgZm9yIHRoZSAncXVvdGFjdGwnIHN5c3RlbSBjYWxsLgorICogVGhlIGNvbW1hbmRzIGFyZSBicm9rZW4gaW50byBhIG1haW4gY29tbWFuZCBkZWZpbmVkIGJlbG93CisgKiBhbmQgYSBzdWJjb21tYW5kIHRoYXQgaXMgdXNlZCB0byBjb252ZXkgdGhlIHR5cGUgb2YKKyAqIHF1b3RhIHRoYXQgaXMgYmVpbmcgbWFuaXB1bGF0ZWQgKHNlZSBhYm92ZSkuCisgKi8KKyNkZWZpbmUgU1VCQ01ETUFTSyAgMHgwMGZmCisjZGVmaW5lIFNVQkNNRFNISUZUIDgKKyNkZWZpbmUgUUNNRChjbWQsIHR5cGUpICAoKChjbWQpIDw8IFNVQkNNRFNISUZUKSB8ICgodHlwZSkgJiBTVUJDTURNQVNLKSkKKworI2RlZmluZSBRX1NZTkMgICAgIDB4ODAwMDAxCS8qIHN5bmMgZGlzayBjb3B5IG9mIGEgZmlsZXN5c3RlbXMgcXVvdGFzICovCisjZGVmaW5lIFFfUVVPVEFPTiAgMHg4MDAwMDIJLyogdHVybiBxdW90YXMgb24gKi8KKyNkZWZpbmUgUV9RVU9UQU9GRiAweDgwMDAwMwkvKiB0dXJuIHF1b3RhcyBvZmYgKi8KKyNkZWZpbmUgUV9HRVRGTVQgICAweDgwMDAwNAkvKiBnZXQgcXVvdGEgZm9ybWF0IHVzZWQgb24gZ2l2ZW4gZmlsZXN5c3RlbSAqLworI2RlZmluZSBRX0dFVElORk8gIDB4ODAwMDA1CS8qIGdldCBpbmZvcm1hdGlvbiBhYm91dCBxdW90YSBmaWxlcyAqLworI2RlZmluZSBRX1NFVElORk8gIDB4ODAwMDA2CS8qIHNldCBpbmZvcm1hdGlvbiBhYm91dCBxdW90YSBmaWxlcyAqLworI2RlZmluZSBRX0dFVFFVT1RBIDB4ODAwMDA3CS8qIGdldCB1c2VyIHF1b3RhIHN0cnVjdHVyZSAqLworI2RlZmluZSBRX1NFVFFVT1RBIDB4ODAwMDA4CS8qIHNldCB1c2VyIHF1b3RhIHN0cnVjdHVyZSAqLworCisvKgorICogUXVvdGEgc3RydWN0dXJlIHVzZWQgZm9yIGNvbW11bmljYXRpb24gd2l0aCB1c2Vyc3BhY2UgdmlhIHF1b3RhY3RsCisgKiBGb2xsb3dpbmcgZmxhZ3MgYXJlIHVzZWQgdG8gc3BlY2lmeSB3aGljaCBmaWVsZHMgYXJlIHZhbGlkCisgKi8KKyNkZWZpbmUgUUlGX0JMSU1JVFMJMQorI2RlZmluZSBRSUZfU1BBQ0UJMgorI2RlZmluZSBRSUZfSUxJTUlUUwk0CisjZGVmaW5lIFFJRl9JTk9ERVMJOAorI2RlZmluZSBRSUZfQlRJTUUJMTYKKyNkZWZpbmUgUUlGX0lUSU1FCTMyCisjZGVmaW5lIFFJRl9MSU1JVFMJKFFJRl9CTElNSVRTIHwgUUlGX0lMSU1JVFMpCisjZGVmaW5lIFFJRl9VU0FHRQkoUUlGX1NQQUNFIHwgUUlGX0lOT0RFUykKKyNkZWZpbmUgUUlGX1RJTUVTCShRSUZfQlRJTUUgfCBRSUZfSVRJTUUpCisjZGVmaW5lIFFJRl9BTEwJCShRSUZfTElNSVRTIHwgUUlGX1VTQUdFIHwgUUlGX1RJTUVTKQorCitzdHJ1Y3QgaWZfZHFibGsgeworCV9fdTY0IGRxYl9iaGFyZGxpbWl0OworCV9fdTY0IGRxYl9ic29mdGxpbWl0OworCV9fdTY0IGRxYl9jdXJzcGFjZTsKKwlfX3U2NCBkcWJfaWhhcmRsaW1pdDsKKwlfX3U2NCBkcWJfaXNvZnRsaW1pdDsKKwlfX3U2NCBkcWJfY3VyaW5vZGVzOworCV9fdTY0IGRxYl9idGltZTsKKwlfX3U2NCBkcWJfaXRpbWU7CisJX191MzIgZHFiX3ZhbGlkOworfTsKKworLyoKKyAqIFN0cnVjdHVyZSB1c2VkIGZvciBzZXR0aW5nIHF1b3RhIGluZm9ybWF0aW9uIGFib3V0IGZpbGUgdmlhIHF1b3RhY3RsCisgKiBGb2xsb3dpbmcgZmxhZ3MgYXJlIHVzZWQgdG8gc3BlY2lmeSB3aGljaCBmaWVsZHMgYXJlIHZhbGlkCisgKi8KKyNkZWZpbmUgSUlGX0JHUkFDRQkxCisjZGVmaW5lIElJRl9JR1JBQ0UJMgorI2RlZmluZSBJSUZfRkxBR1MJNAorI2RlZmluZSBJSUZfQUxMCQkoSUlGX0JHUkFDRSB8IElJRl9JR1JBQ0UgfCBJSUZfRkxBR1MpCisKK3N0cnVjdCBpZl9kcWluZm8geworCV9fdTY0IGRxaV9iZ3JhY2U7CisJX191NjQgZHFpX2lncmFjZTsKKwlfX3UzMiBkcWlfZmxhZ3M7CisJX191MzIgZHFpX3ZhbGlkOworfTsKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L2RxYmxrX3hmcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RxYmxrX3YxLmg+CisjaW5jbHVkZSA8bGludXgvZHFibGtfdjIuaD4KKworLyogTWF4aW1hbCBudW1iZXJzIG9mIHdyaXRlcyBmb3IgcXVvdGEgb3BlcmF0aW9uIChpbnNlcnQvZGVsZXRlL3VwZGF0ZSkKKyAqIChvdmVyIGFsbCBmb3JtYXRzKSAtIGluZm8gYmxvY2ssIDQgcG9pbnRlciBibG9ja3MsIGRhdGEgYmxvY2sgKi8KKyNkZWZpbmUgRFFVT1RfTUFYX1dSSVRFUwk2CisKKy8qCisgKiBEYXRhIGZvciBvbmUgdXNlci9ncm91cCBrZXB0IGluIG1lbW9yeQorICovCitzdHJ1Y3QgbWVtX2RxYmxrIHsKKwlfX3UzMiBkcWJfYmhhcmRsaW1pdDsJLyogYWJzb2x1dGUgbGltaXQgb24gZGlzayBibGtzIGFsbG9jICovCisJX191MzIgZHFiX2Jzb2Z0bGltaXQ7CS8qIHByZWZlcnJlZCBsaW1pdCBvbiBkaXNrIGJsa3MgKi8KKwlxc2l6ZV90IGRxYl9jdXJzcGFjZTsJLyogY3VycmVudCB1c2VkIHNwYWNlICovCisJX191MzIgZHFiX2loYXJkbGltaXQ7CS8qIGFic29sdXRlIGxpbWl0IG9uIGFsbG9jYXRlZCBpbm9kZXMgKi8KKwlfX3UzMiBkcWJfaXNvZnRsaW1pdDsJLyogcHJlZmVycmVkIGlub2RlIGxpbWl0ICovCisJX191MzIgZHFiX2N1cmlub2RlczsJLyogY3VycmVudCAjIGFsbG9jYXRlZCBpbm9kZXMgKi8KKwl0aW1lX3QgZHFiX2J0aW1lOwkvKiB0aW1lIGxpbWl0IGZvciBleGNlc3NpdmUgZGlzayB1c2UgKi8KKwl0aW1lX3QgZHFiX2l0aW1lOwkvKiB0aW1lIGxpbWl0IGZvciBleGNlc3NpdmUgaW5vZGUgdXNlICovCit9OworCisvKgorICogRGF0YSBmb3Igb25lIHF1b3RhZmlsZSBrZXB0IGluIG1lbW9yeQorICovCitzdHJ1Y3QgcXVvdGFfZm9ybWF0X3R5cGU7CisKK3N0cnVjdCBtZW1fZHFpbmZvIHsKKwlzdHJ1Y3QgcXVvdGFfZm9ybWF0X3R5cGUgKmRxaV9mb3JtYXQ7CisJc3RydWN0IGxpc3RfaGVhZCBkcWlfZGlydHlfbGlzdDsJLyogTGlzdCBvZiBkaXJ0eSBkcXVvdHMgKi8KKwl1bnNpZ25lZCBsb25nIGRxaV9mbGFnczsKKwl1bnNpZ25lZCBpbnQgZHFpX2JncmFjZTsKKwl1bnNpZ25lZCBpbnQgZHFpX2lncmFjZTsKKwl1bmlvbiB7CisJCXN0cnVjdCB2MV9tZW1fZHFpbmZvIHYxX2k7CisJCXN0cnVjdCB2Ml9tZW1fZHFpbmZvIHYyX2k7CisJfSB1OworfTsKKworc3RydWN0IHN1cGVyX2Jsb2NrOworCisjZGVmaW5lIERRRl9NQVNLIDB4ZmZmZgkJLyogTWFzayBmb3IgZm9ybWF0IHNwZWNpZmljIGZsYWdzICovCisjZGVmaW5lIERRRl9JTkZPX0RJUlRZX0IgMTYKKyNkZWZpbmUgRFFGX0lORk9fRElSVFkgKDEgPDwgRFFGX0lORk9fRElSVFlfQikJLyogSXMgaW5mbyBkaXJ0eT8gKi8KKworZXh0ZXJuIHZvaWQgbWFya19pbmZvX2RpcnR5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKTsKKyNkZWZpbmUgaW5mb19kaXJ0eShpbmZvKSB0ZXN0X2JpdChEUUZfSU5GT19ESVJUWV9CLCAmKGluZm8pLT5kcWlfZmxhZ3MpCisjZGVmaW5lIGluZm9fYW55X2RxdW90X2RpcnR5KGluZm8pICghbGlzdF9lbXB0eSgmKGluZm8pLT5kcWlfZGlydHlfbGlzdCkpCisjZGVmaW5lIGluZm9fYW55X2RpcnR5KGluZm8pIChpbmZvX2RpcnR5KGluZm8pIHx8IGluZm9fYW55X2RxdW90X2RpcnR5KGluZm8pKQorCisjZGVmaW5lIHNiX2Rxb3B0KHNiKSAoJihzYiktPnNfZHF1b3QpCisjZGVmaW5lIHNiX2RxaW5mbyhzYiwgdHlwZSkgKHNiX2Rxb3B0KHNiKS0+aW5mbysodHlwZSkpCisKK3N0cnVjdCBkcXN0YXRzIHsKKwlpbnQgbG9va3VwczsKKwlpbnQgZHJvcHM7CisJaW50IHJlYWRzOworCWludCB3cml0ZXM7CisJaW50IGNhY2hlX2hpdHM7CisJaW50IGFsbG9jYXRlZF9kcXVvdHM7CisJaW50IGZyZWVfZHF1b3RzOworCWludCBzeW5jczsKK307CisKK2V4dGVybiBzdHJ1Y3QgZHFzdGF0cyBkcXN0YXRzOworCisjZGVmaW5lIERRX01PRF9CCTAJLyogZHF1b3QgbW9kaWZpZWQgc2luY2UgcmVhZCAqLworI2RlZmluZSBEUV9CTEtTX0IJMQkvKiB1aWQvZ2lkIGhhcyBiZWVuIHdhcm5lZCBhYm91dCBibGsgbGltaXQgKi8KKyNkZWZpbmUgRFFfSU5PREVTX0IJMgkvKiB1aWQvZ2lkIGhhcyBiZWVuIHdhcm5lZCBhYm91dCBpbm9kZSBsaW1pdCAqLworI2RlZmluZSBEUV9GQUtFX0IJMwkvKiBubyBsaW1pdHMgb25seSB1c2FnZSAqLworI2RlZmluZSBEUV9SRUFEX0IJNAkvKiBkcXVvdCB3YXMgcmVhZCBpbnRvIG1lbW9yeSAqLworI2RlZmluZSBEUV9BQ1RJVkVfQgk1CS8qIGRxdW90IGlzIGFjdGl2ZSAoZHF1b3RfcmVsZWFzZSBub3QgY2FsbGVkKSAqLworI2RlZmluZSBEUV9XQUlURlJFRV9CCTYJLyogZHF1b3QgYmVpbmcgd2FpdGVkIChieSBpbnZhbGlkYXRlX2RxdW90cykgKi8KKworc3RydWN0IGRxdW90IHsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSBkcV9oYXNoOwkvKiBIYXNoIGxpc3QgaW4gbWVtb3J5ICovCisJc3RydWN0IGxpc3RfaGVhZCBkcV9pbnVzZTsJLyogTGlzdCBvZiBhbGwgcXVvdGFzICovCisJc3RydWN0IGxpc3RfaGVhZCBkcV9mcmVlOwkvKiBGcmVlIGxpc3QgZWxlbWVudCAqLworCXN0cnVjdCBsaXN0X2hlYWQgZHFfZGlydHk7CS8qIExpc3Qgb2YgZGlydHkgZHF1b3RzICovCisJc3RydWN0IHNlbWFwaG9yZSBkcV9sb2NrOwkvKiBkcXVvdCBJTyBsb2NrICovCisJYXRvbWljX3QgZHFfY291bnQ7CQkvKiBVc2UgY291bnQgKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdCBkcV93YWl0X3VudXNlZDsJLyogV2FpdCBxdWV1ZSBmb3IgZHF1b3QgdG8gYmVjb21lIHVudXNlZCAqLworCXN0cnVjdCBzdXBlcl9ibG9jayAqZHFfc2I7CS8qIHN1cGVyYmxvY2sgdGhpcyBhcHBsaWVzIHRvICovCisJdW5zaWduZWQgaW50IGRxX2lkOwkJLyogSUQgdGhpcyBhcHBsaWVzIHRvICh1aWQsIGdpZCkgKi8KKwlsb2ZmX3QgZHFfb2ZmOwkJCS8qIE9mZnNldCBvZiBkcXVvdCBvbiBkaXNrICovCisJdW5zaWduZWQgbG9uZyBkcV9mbGFnczsJCS8qIFNlZSBEUV8qICovCisJc2hvcnQgZHFfdHlwZTsJCQkvKiBUeXBlIG9mIHF1b3RhICovCisJc3RydWN0IG1lbV9kcWJsayBkcV9kcWI7CS8qIERpc2txdW90YSB1c2FnZSAqLworfTsKKworI2RlZmluZSBOT0RRVU9UIChzdHJ1Y3QgZHF1b3QgKilOVUxMCisKKyNkZWZpbmUgUVVPVEFfT0sgICAgICAgICAgMAorI2RlZmluZSBOT19RVU9UQSAgICAgICAgICAxCisKKy8qIE9wZXJhdGlvbnMgd2hpY2ggbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBlYWNoIHF1b3RhIGZvcm1hdCAqLworc3RydWN0IHF1b3RhX2Zvcm1hdF9vcHMgeworCWludCAoKmNoZWNrX3F1b3RhX2ZpbGUpKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKTsJLyogRGV0ZWN0IHdoZXRoZXIgZmlsZSBpcyBpbiBvdXIgZm9ybWF0ICovCisJaW50ICgqcmVhZF9maWxlX2luZm8pKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKTsJLyogUmVhZCBtYWluIGluZm8gYWJvdXQgZmlsZSAtIGNhbGxlZCBvbiBxdW90YW9uKCkgKi8KKwlpbnQgKCp3cml0ZV9maWxlX2luZm8pKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKTsJLyogV3JpdGUgbWFpbiBpbmZvIGFib3V0IGZpbGUgKi8KKwlpbnQgKCpmcmVlX2ZpbGVfaW5mbykoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpOwkvKiBDYWxsZWQgb24gcXVvdGFvZmYoKSAqLworCWludCAoKnJlYWRfZHFibGspKHN0cnVjdCBkcXVvdCAqZHF1b3QpOwkJLyogUmVhZCBzdHJ1Y3R1cmUgZm9yIG9uZSB1c2VyICovCisJaW50ICgqY29tbWl0X2RxYmxrKShzdHJ1Y3QgZHF1b3QgKmRxdW90KTsJLyogV3JpdGUgc3RydWN0dXJlIGZvciBvbmUgdXNlciAqLworCWludCAoKnJlbGVhc2VfZHFibGspKHN0cnVjdCBkcXVvdCAqZHF1b3QpOwkvKiBDYWxsZWQgd2hlbiBsYXN0IHJlZmVyZW5jZSB0byBkcXVvdCBpcyBiZWluZyBkcm9wcGVkICovCit9OworCisvKiBPcGVyYXRpb25zIHdvcmtpbmcgd2l0aCBkcXVvdHMgKi8KK3N0cnVjdCBkcXVvdF9vcGVyYXRpb25zIHsKKwlpbnQgKCppbml0aWFsaXplKSAoc3RydWN0IGlub2RlICosIGludCk7CisJaW50ICgqZHJvcCkgKHN0cnVjdCBpbm9kZSAqKTsKKwlpbnQgKCphbGxvY19zcGFjZSkgKHN0cnVjdCBpbm9kZSAqLCBxc2l6ZV90LCBpbnQpOworCWludCAoKmFsbG9jX2lub2RlKSAoY29uc3Qgc3RydWN0IGlub2RlICosIHVuc2lnbmVkIGxvbmcpOworCWludCAoKmZyZWVfc3BhY2UpIChzdHJ1Y3QgaW5vZGUgKiwgcXNpemVfdCk7CisJaW50ICgqZnJlZV9pbm9kZSkgKGNvbnN0IHN0cnVjdCBpbm9kZSAqLCB1bnNpZ25lZCBsb25nKTsKKwlpbnQgKCp0cmFuc2ZlcikgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgaWF0dHIgKik7CisJaW50ICgqd3JpdGVfZHF1b3QpIChzdHJ1Y3QgZHF1b3QgKik7CQkvKiBPcmRpbmFyeSBkcXVvdCB3cml0ZSAqLworCWludCAoKmFjcXVpcmVfZHF1b3QpIChzdHJ1Y3QgZHF1b3QgKik7CQkvKiBRdW90YSBpcyBnb2luZyB0byBiZSBjcmVhdGVkIG9uIGRpc2sgKi8KKwlpbnQgKCpyZWxlYXNlX2RxdW90KSAoc3RydWN0IGRxdW90ICopOwkJLyogUXVvdGEgaXMgZ29pbmcgdG8gYmUgZGVsZXRlZCBmcm9tIGRpc2sgKi8KKwlpbnQgKCptYXJrX2RpcnR5KSAoc3RydWN0IGRxdW90ICopOwkJLyogRHF1b3QgaXMgbWFya2VkIGRpcnR5ICovCisJaW50ICgqd3JpdGVfaW5mbykgKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBpbnQpOwkvKiBXcml0ZSBvZiBxdW90YSAic3VwZXJibG9jayIgKi8KK307CisKKy8qIE9wZXJhdGlvbnMgaGFuZGxpbmcgcmVxdWVzdHMgZnJvbSB1c2Vyc3BhY2UgKi8KK3N0cnVjdCBxdW90YWN0bF9vcHMgeworCWludCAoKnF1b3RhX29uKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgaW50LCBpbnQsIGNoYXIgKik7CisJaW50ICgqcXVvdGFfb2ZmKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgaW50KTsKKwlpbnQgKCpxdW90YV9zeW5jKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgaW50KTsKKwlpbnQgKCpnZXRfaW5mbykoc3RydWN0IHN1cGVyX2Jsb2NrICosIGludCwgc3RydWN0IGlmX2RxaW5mbyAqKTsKKwlpbnQgKCpzZXRfaW5mbykoc3RydWN0IHN1cGVyX2Jsb2NrICosIGludCwgc3RydWN0IGlmX2RxaW5mbyAqKTsKKwlpbnQgKCpnZXRfZHFibGspKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBpbnQsIHFpZF90LCBzdHJ1Y3QgaWZfZHFibGsgKik7CisJaW50ICgqc2V0X2RxYmxrKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgaW50LCBxaWRfdCwgc3RydWN0IGlmX2RxYmxrICopOworCWludCAoKmdldF94c3RhdGUpKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3QgZnNfcXVvdGFfc3RhdCAqKTsKKwlpbnQgKCpzZXRfeHN0YXRlKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdW5zaWduZWQgaW50LCBpbnQpOworCWludCAoKmdldF94cXVvdGEpKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBpbnQsIHFpZF90LCBzdHJ1Y3QgZnNfZGlza19xdW90YSAqKTsKKwlpbnQgKCpzZXRfeHF1b3RhKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgaW50LCBxaWRfdCwgc3RydWN0IGZzX2Rpc2tfcXVvdGEgKik7Cit9OworCitzdHJ1Y3QgcXVvdGFfZm9ybWF0X3R5cGUgeworCWludCBxZl9mbXRfaWQ7CS8qIFF1b3RhIGZvcm1hdCBpZCAqLworCXN0cnVjdCBxdW90YV9mb3JtYXRfb3BzICpxZl9vcHM7CS8qIE9wZXJhdGlvbnMgb2YgZm9ybWF0ICovCisJc3RydWN0IG1vZHVsZSAqcWZfb3duZXI7CQkvKiBNb2R1bGUgaW1wbGVtZW50aW5nIHF1b3RhIGZvcm1hdCAqLworCXN0cnVjdCBxdW90YV9mb3JtYXRfdHlwZSAqcWZfbmV4dDsKK307CisKKyNkZWZpbmUgRFFVT1RfVVNSX0VOQUJMRUQJMHgwMQkJLyogVXNlciBkaXNrcXVvdGFzIGVuYWJsZWQgKi8KKyNkZWZpbmUgRFFVT1RfR1JQX0VOQUJMRUQJMHgwMgkJLyogR3JvdXAgZGlza3F1b3RhcyBlbmFibGVkICovCisKK3N0cnVjdCBxdW90YV9pbmZvIHsKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CQkJLyogRmxhZ3MgZm9yIGRpc2txdW90YXMgb24gdGhpcyBkZXZpY2UgKi8KKwlzdHJ1Y3Qgc2VtYXBob3JlIGRxaW9fc2VtOwkJLyogbG9jayBkZXZpY2Ugd2hpbGUgSS9PIGluIHByb2dyZXNzICovCisJc3RydWN0IHNlbWFwaG9yZSBkcW9ub2ZmX3NlbTsJCS8qIFNlcmlhbGl6ZSBxdW90YW9uICYgcXVvdGFvZmYgKi8KKwlzdHJ1Y3Qgcndfc2VtYXBob3JlIGRxcHRyX3NlbTsJCS8qIHNlcmlhbGl6ZSBvcHMgdXNpbmcgcXVvdGFfaW5mbyBzdHJ1Y3QsIHBvaW50ZXJzIGZyb20gaW5vZGUgdG8gZHF1b3RzICovCisJc3RydWN0IGlub2RlICpmaWxlc1tNQVhRVU9UQVNdOwkJLyogaW5vZGVzIG9mIHF1b3RhZmlsZXMgKi8KKwlzdHJ1Y3QgdmZzbW91bnQgKm1udFtNQVhRVU9UQVNdOwkvKiBtb3VudHBvaW50IGVudHJpZXMgb2YgZmlsZXN5c3RlbXMgd2l0aCBxdW90YSBmaWxlcyAqLworCXN0cnVjdCBtZW1fZHFpbmZvIGluZm9bTUFYUVVPVEFTXTsJLyogSW5mb3JtYXRpb24gZm9yIGVhY2ggcXVvdGEgdHlwZSAqLworCXN0cnVjdCBxdW90YV9mb3JtYXRfb3BzICpvcHNbTUFYUVVPVEFTXTsJLyogT3BlcmF0aW9ucyBmb3IgZWFjaCB0eXBlICovCit9OworCisvKiBJbmxpbmUgd291bGQgYmUgYmV0dGVyIGJ1dCB3ZSBuZWVkIHRvIGRlcmVmZXJlbmNlIHN1cGVyX2Jsb2NrIHdoaWNoIGlzIG5vdCBkZWZpbmVkIHlldCAqLworaW50IG1hcmtfZHF1b3RfZGlydHkoc3RydWN0IGRxdW90ICpkcXVvdCk7CisKKyNkZWZpbmUgZHF1b3RfZGlydHkoZHF1b3QpIHRlc3RfYml0KERRX01PRF9CLCAmKGRxdW90KS0+ZHFfZmxhZ3MpCisKKyNkZWZpbmUgc2JfaGFzX3F1b3RhX2VuYWJsZWQoc2IsIHR5cGUpICgodHlwZSk9PVVTUlFVT1RBID8gXAorCShzYl9kcW9wdChzYiktPmZsYWdzICYgRFFVT1RfVVNSX0VOQUJMRUQpIDogKHNiX2Rxb3B0KHNiKS0+ZmxhZ3MgJiBEUVVPVF9HUlBfRU5BQkxFRCkpCisKKyNkZWZpbmUgc2JfYW55X3F1b3RhX2VuYWJsZWQoc2IpIChzYl9oYXNfcXVvdGFfZW5hYmxlZChzYiwgVVNSUVVPVEEpIHwgXAorCQkJCSAgc2JfaGFzX3F1b3RhX2VuYWJsZWQoc2IsIEdSUFFVT1RBKSkKKworaW50IHJlZ2lzdGVyX3F1b3RhX2Zvcm1hdChzdHJ1Y3QgcXVvdGFfZm9ybWF0X3R5cGUgKmZtdCk7Cit2b2lkIHVucmVnaXN0ZXJfcXVvdGFfZm9ybWF0KHN0cnVjdCBxdW90YV9mb3JtYXRfdHlwZSAqZm10KTsKKworc3RydWN0IHF1b3RhX21vZHVsZV9uYW1lIHsKKwlpbnQgcW1fZm10X2lkOworCWNoYXIgKnFtX21vZF9uYW1lOworfTsKKworI2RlZmluZSBJTklUX1FVT1RBX01PRFVMRV9OQU1FUyB7XAorCXtRRk1UX1ZGU19PTEQsICJxdW90YV92MSJ9LFwKKwl7UUZNVF9WRlNfVjAsICJxdW90YV92MiJ9LFwKKwl7MCwgTlVMTH19CisKKyNlbHNlCisKKyMgLyogbm9kZXAgKi8gaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisKK19fQkVHSU5fREVDTFMKK2xvbmcgcXVvdGFjdGwgX19QICgodW5zaWduZWQgaW50LCBjb25zdCBjaGFyICosIGludCwgY2FkZHJfdCkpOworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAvKiBfUVVPVEFfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3F1b3RhaW9fdjEuaCBiL2luY2x1ZGUvbGludXgvcXVvdGFpb192MS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0NjY1NGIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3F1b3RhaW9fdjEuaApAQCAtMCwwICsxLDMzIEBACisjaWZuZGVmIF9MSU5VWF9RVU9UQUlPX1YxX0gKKyNkZWZpbmUgX0xJTlVYX1FVT1RBSU9fVjFfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIGRlZmluZSB0aGUgYW1vdW50IG9mIHRpbWUgZ2l2ZW4gYSB1c2VyCisgKiBiZWZvcmUgdGhlIHNvZnQgbGltaXRzIGFyZSB0cmVhdGVkIGFzIGhhcmQgbGltaXRzICh1c3VhbGx5IHJlc3VsdGluZworICogaW4gYW4gYWxsb2NhdGlvbiBmYWlsdXJlKS4gVGhlIHRpbWVyIGlzIHN0YXJ0ZWQgd2hlbiB0aGUgdXNlciBjcm9zc2VzCisgKiB0aGVpciBzb2Z0IGxpbWl0LCBpdCBpcyByZXNldCB3aGVuIHRoZXkgZ28gYmVsb3cgdGhlaXIgc29mdCBsaW1pdC4KKyAqLworI2RlZmluZSBNQVhfSVFfVElNRSAgNjA0ODAwCS8qICg3KjI0KjYwKjYwKSAxIHdlZWsgKi8KKyNkZWZpbmUgTUFYX0RRX1RJTUUgIDYwNDgwMAkvKiAoNyoyNCo2MCo2MCkgMSB3ZWVrICovCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIHN0cnVjdHVyZSBkZWZpbmVzIHRoZSBmb3JtYXQgb2YgdGhlIGRpc2sgcXVvdGEgZmlsZQorICogKGFzIGl0IGFwcGVhcnMgb24gZGlzaykgLSB0aGUgZmlsZSBpcyBhbiBhcnJheSBvZiB0aGVzZSBzdHJ1Y3R1cmVzCisgKiBpbmRleGVkIGJ5IHVzZXIgb3IgZ3JvdXAgbnVtYmVyLgorICovCitzdHJ1Y3QgdjFfZGlza19kcWJsayB7CisJX191MzIgZHFiX2JoYXJkbGltaXQ7CS8qIGFic29sdXRlIGxpbWl0IG9uIGRpc2sgYmxrcyBhbGxvYyAqLworCV9fdTMyIGRxYl9ic29mdGxpbWl0OwkvKiBwcmVmZXJyZWQgbGltaXQgb24gZGlzayBibGtzICovCisJX191MzIgZHFiX2N1cmJsb2NrczsJLyogY3VycmVudCBibG9jayBjb3VudCAqLworCV9fdTMyIGRxYl9paGFyZGxpbWl0OwkvKiBhYnNvbHV0ZSBsaW1pdCBvbiBhbGxvY2F0ZWQgaW5vZGVzICovCisJX191MzIgZHFiX2lzb2Z0bGltaXQ7CS8qIHByZWZlcnJlZCBpbm9kZSBsaW1pdCAqLworCV9fdTMyIGRxYl9jdXJpbm9kZXM7CS8qIGN1cnJlbnQgIyBhbGxvY2F0ZWQgaW5vZGVzICovCisJdGltZV90IGRxYl9idGltZTsJLyogdGltZSBsaW1pdCBmb3IgZXhjZXNzaXZlIGRpc2sgdXNlICovCisJdGltZV90IGRxYl9pdGltZTsJLyogdGltZSBsaW1pdCBmb3IgZXhjZXNzaXZlIGlub2RlIHVzZSAqLworfTsKKworI2RlZmluZSB2MV9kcW9mZihVSUQpICAgICAgKChsb2ZmX3QpKChVSUQpICogc2l6ZW9mIChzdHJ1Y3QgdjFfZGlza19kcWJsaykpKQorCisjZW5kaWYJLyogX0xJTlVYX1FVT1RBSU9fVjFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9xdW90YWlvX3YyLmggYi9pbmNsdWRlL2xpbnV4L3F1b3RhaW9fdjIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDNkN2NiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9xdW90YWlvX3YyLmgKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqCURlZmluaXRpb25zIG9mIHN0cnVjdHVyZXMgZm9yIHZmc3YwIHF1b3RhIGZvcm1hdAorICovCisKKyNpZm5kZWYgX0xJTlVYX1FVT1RBSU9fVjJfSAorI2RlZmluZSBfTElOVVhfUVVPVEFJT19WMl9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3F1b3RhLmg+CisKKy8qCisgKiBEZWZpbml0aW9ucyBvZiBtYWdpY3MgYW5kIHZlcnNpb25zIG9mIGN1cnJlbnQgcXVvdGEgZmlsZXMKKyAqLworI2RlZmluZSBWMl9JTklUUU1BR0lDUyB7XAorCTB4ZDljMDFmMTEsCS8qIFVTUlFVT1RBICovXAorCTB4ZDljMDE5MjcJLyogR1JQUVVPVEEgKi9cCit9CisKKyNkZWZpbmUgVjJfSU5JVFFWRVJTSU9OUyB7XAorCTAsCQkvKiBVU1JRVU9UQSAqL1wKKwkwCQkvKiBHUlBRVU9UQSAqL1wKK30KKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIGRlZmluZXMgdGhlIGZvcm1hdCBvZiB0aGUgZGlzayBxdW90YSBmaWxlCisgKiAoYXMgaXQgYXBwZWFycyBvbiBkaXNrKSAtIHRoZSBmaWxlIGlzIGEgcmFkaXggdHJlZSB3aG9zZSBsZWF2ZXMgcG9pbnQKKyAqIHRvIGJsb2NrcyBvZiB0aGVzZSBzdHJ1Y3R1cmVzLgorICovCitzdHJ1Y3QgdjJfZGlza19kcWJsayB7CisJX19sZTMyIGRxYl9pZDsJCS8qIGlkIHRoaXMgcXVvdGEgYXBwbGllcyB0byAqLworCV9fbGUzMiBkcWJfaWhhcmRsaW1pdDsJLyogYWJzb2x1dGUgbGltaXQgb24gYWxsb2NhdGVkIGlub2RlcyAqLworCV9fbGUzMiBkcWJfaXNvZnRsaW1pdDsJLyogcHJlZmVycmVkIGlub2RlIGxpbWl0ICovCisJX19sZTMyIGRxYl9jdXJpbm9kZXM7CS8qIGN1cnJlbnQgIyBhbGxvY2F0ZWQgaW5vZGVzICovCisJX19sZTMyIGRxYl9iaGFyZGxpbWl0OwkvKiBhYnNvbHV0ZSBsaW1pdCBvbiBkaXNrIHNwYWNlIChpbiBRVU9UQUJMT0NLX1NJWkUpICovCisJX19sZTMyIGRxYl9ic29mdGxpbWl0OwkvKiBwcmVmZXJyZWQgbGltaXQgb24gZGlzayBzcGFjZSAoaW4gUVVPVEFCTE9DS19TSVpFKSAqLworCV9fbGU2NCBkcWJfY3Vyc3BhY2U7CS8qIGN1cnJlbnQgc3BhY2Ugb2NjdXBpZWQgKGluIGJ5dGVzKSAqLworCV9fbGU2NCBkcWJfYnRpbWU7CS8qIHRpbWUgbGltaXQgZm9yIGV4Y2Vzc2l2ZSBkaXNrIHVzZSAqLworCV9fbGU2NCBkcWJfaXRpbWU7CS8qIHRpbWUgbGltaXQgZm9yIGV4Y2Vzc2l2ZSBpbm9kZSB1c2UgKi8KK307CisKKy8qCisgKiBIZXJlIGFyZSBoZWFkZXIgc3RydWN0dXJlcyBhcyB3cml0dGVuIG9uIGRpc2sgYW5kIHRoZWlyIGluLW1lbW9yeSBjb3BpZXMKKyAqLworLyogRmlyc3QgZ2VuZXJpYyBoZWFkZXIgKi8KK3N0cnVjdCB2Ml9kaXNrX2RxaGVhZGVyIHsKKwlfX2xlMzIgZHFoX21hZ2ljOwkvKiBNYWdpYyBudW1iZXIgaWRlbnRpZnlpbmcgZmlsZSAqLworCV9fbGUzMiBkcWhfdmVyc2lvbjsJLyogRmlsZSB2ZXJzaW9uICovCit9OworCisvKiBIZWFkZXIgd2l0aCB0eXBlIGFuZCB2ZXJzaW9uIHNwZWNpZmljIGluZm9ybWF0aW9uICovCitzdHJ1Y3QgdjJfZGlza19kcWluZm8geworCV9fbGUzMiBkcWlfYmdyYWNlOwkvKiBUaW1lIGJlZm9yZSBibG9jayBzb2Z0IGxpbWl0IGJlY29tZXMgaGFyZCBsaW1pdCAqLworCV9fbGUzMiBkcWlfaWdyYWNlOwkvKiBUaW1lIGJlZm9yZSBpbm9kZSBzb2Z0IGxpbWl0IGJlY29tZXMgaGFyZCBsaW1pdCAqLworCV9fbGUzMiBkcWlfZmxhZ3M7CS8qIEZsYWdzIGZvciBxdW90YWZpbGUgKERRRl8qKSAqLworCV9fbGUzMiBkcWlfYmxvY2tzOwkvKiBOdW1iZXIgb2YgYmxvY2tzIGluIGZpbGUgKi8KKwlfX2xlMzIgZHFpX2ZyZWVfYmxrOwkvKiBOdW1iZXIgb2YgZmlyc3QgZnJlZSBibG9jayBpbiB0aGUgbGlzdCAqLworCV9fbGUzMiBkcWlfZnJlZV9lbnRyeTsJLyogTnVtYmVyIG9mIGJsb2NrIHdpdGggYXQgbGVhc3Qgb25lIGZyZWUgZW50cnkgKi8KK307CisKKy8qCisgKiAgU3RydWN0dXJlIG9mIGhlYWRlciBvZiBibG9jayB3aXRoIHF1b3RhIHN0cnVjdHVyZXMuIEl0IGlzIHBhZGRlZCB0byAxNiBieXRlcyBzbworICogIHRoZXJlIHdpbGwgYmUgc3BhY2UgZm9yIGV4YWN0bHkgMjEgcXVvdGEtZW50cmllcyBpbiBhIGJsb2NrCisgKi8KK3N0cnVjdCB2Ml9kaXNrX2RxZGJoZWFkZXIgeworCV9fbGUzMiBkcWRoX25leHRfZnJlZTsJLyogTnVtYmVyIG9mIG5leHQgYmxvY2sgd2l0aCBmcmVlIGVudHJ5ICovCisJX19sZTMyIGRxZGhfcHJldl9mcmVlOwkvKiBOdW1iZXIgb2YgcHJldmlvdXMgYmxvY2sgd2l0aCBmcmVlIGVudHJ5ICovCisJX19sZTE2IGRxZGhfZW50cmllczsJLyogTnVtYmVyIG9mIHZhbGlkIGVudHJpZXMgaW4gYmxvY2sgKi8KKwlfX2xlMTYgZHFkaF9wYWQxOworCV9fbGUzMiBkcWRoX3BhZDI7Cit9OworCisjZGVmaW5lIFYyX0RRSU5GT09GRglzaXplb2Yoc3RydWN0IHYyX2Rpc2tfZHFoZWFkZXIpCS8qIE9mZnNldCBvZiBpbmZvIGhlYWRlciBpbiBmaWxlICovCisjZGVmaW5lIFYyX0RRQkxLU0laRV9CSVRTCTEwCisjZGVmaW5lIFYyX0RRQkxLU0laRQkoMSA8PCBWMl9EUUJMS1NJWkVfQklUUykJLyogU2l6ZSBvZiBibG9jayB3aXRoIHF1b3RhIHN0cnVjdHVyZXMgKi8KKyNkZWZpbmUgVjJfRFFUUkVFT0ZGCTEJCS8qIE9mZnNldCBvZiB0cmVlIGluIGZpbGUgaW4gYmxvY2tzICovCisjZGVmaW5lIFYyX0RRVFJFRURFUFRICTQJCS8qIERlcHRoIG9mIHF1b3RhIHRyZWUgKi8KKyNkZWZpbmUgVjJfRFFTVFJJTkJMSwkoKFYyX0RRQkxLU0laRSAtIHNpemVvZihzdHJ1Y3QgdjJfZGlza19kcWRiaGVhZGVyKSkgLyBzaXplb2Yoc3RydWN0IHYyX2Rpc2tfZHFibGspKQkvKiBOdW1iZXIgb2YgZW50cmllcyBpbiBvbmUgYmxvY2tzICovCisKKyNlbmRpZiAvKiBfTElOVVhfUVVPVEFJT19WMl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3F1b3Rhb3BzLmggYi9pbmNsdWRlL2xpbnV4L3F1b3Rhb3BzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU3YmFhOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvcXVvdGFvcHMuaApAQCAtMCwwICsxLDI0NiBAQAorLyoKKyAqIERlZmluaXRpb25zIGZvciBkaXNrcXVvdGEtb3BlcmF0aW9ucy4gV2hlbiBkaXNrcXVvdGEgaXMgY29uZmlndXJlZCB0aGVzZQorICogbWFjcm9zIGV4cGFuZCB0byB0aGUgcmlnaHQgc291cmNlLWNvZGUuCisgKgorICogQXV0aG9yOiAgTWFyY28gdmFuIFdpZXJpbmdlbiA8bXZ3QHBsYW5ldHMuZWxtLm5ldD4KKyAqCisgKiBWZXJzaW9uOiAkSWQ6IHF1b3Rhb3BzLmgsdiAxLjIgMTk5OC8wMS8xNSAxNjoyMjoyNiBlY2QgRXhwICQKKyAqCisgKi8KKyNpZm5kZWYgX0xJTlVYX1FVT1RBT1BTXworI2RlZmluZSBfTElOVVhfUVVPVEFPUFNfCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorCisjaW5jbHVkZSA8bGludXgvZnMuaD4KKworI2lmIGRlZmluZWQoQ09ORklHX1FVT1RBKQorCisvKgorICogZGVjbGFyYXRpb24gb2YgcXVvdGFfZnVuY3Rpb24gY2FsbHMgaW4ga2VybmVsLgorICovCitleHRlcm4gdm9pZCBzeW5jX2RxdW90cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSk7CisKK2V4dGVybiBpbnQgZHF1b3RfaW5pdGlhbGl6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSk7CitleHRlcm4gaW50IGRxdW90X2Ryb3Aoc3RydWN0IGlub2RlICppbm9kZSk7CisKK2V4dGVybiBpbnQgZHF1b3RfYWxsb2Nfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBudW1iZXIsIGludCBwcmVhbGxvYyk7CitleHRlcm4gaW50IGRxdW90X2FsbG9jX2lub2RlKGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVuc2lnbmVkIGxvbmcgbnVtYmVyKTsKKworZXh0ZXJuIGludCBkcXVvdF9mcmVlX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnVtYmVyKTsKK2V4dGVybiBpbnQgZHF1b3RfZnJlZV9pbm9kZShjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBsb25nIG51bWJlcik7CisKK2V4dGVybiBpbnQgZHF1b3RfdHJhbnNmZXIoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlhdHRyICppYXR0cik7CitleHRlcm4gaW50IGRxdW90X2NvbW1pdChzdHJ1Y3QgZHF1b3QgKmRxdW90KTsKK2V4dGVybiBpbnQgZHF1b3RfYWNxdWlyZShzdHJ1Y3QgZHF1b3QgKmRxdW90KTsKK2V4dGVybiBpbnQgZHF1b3RfcmVsZWFzZShzdHJ1Y3QgZHF1b3QgKmRxdW90KTsKK2V4dGVybiBpbnQgZHF1b3RfY29tbWl0X2luZm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpOworZXh0ZXJuIGludCBkcXVvdF9tYXJrX2RxdW90X2RpcnR5KHN0cnVjdCBkcXVvdCAqZHF1b3QpOworCitleHRlcm4gaW50IHZmc19xdW90YV9vbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgaW50IGZvcm1hdF9pZCwgY2hhciAqcGF0aCk7CitleHRlcm4gaW50IHZmc19xdW90YV9vbl9tb3VudChpbnQgdHlwZSwgaW50IGZvcm1hdF9pZCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKK2V4dGVybiBpbnQgdmZzX3F1b3RhX29mZihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSk7CisjZGVmaW5lIHZmc19xdW90YV9vZmZfbW91bnQoc2IsIHR5cGUpIHZmc19xdW90YV9vZmYoc2IsIHR5cGUpCitleHRlcm4gaW50IHZmc19xdW90YV9zeW5jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKTsKK2V4dGVybiBpbnQgdmZzX2dldF9kcWluZm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIHN0cnVjdCBpZl9kcWluZm8gKmlpKTsKK2V4dGVybiBpbnQgdmZzX3NldF9kcWluZm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIHN0cnVjdCBpZl9kcWluZm8gKmlpKTsKK2V4dGVybiBpbnQgdmZzX2dldF9kcWJsayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgcWlkX3QgaWQsIHN0cnVjdCBpZl9kcWJsayAqZGkpOworZXh0ZXJuIGludCB2ZnNfc2V0X2RxYmxrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLCBxaWRfdCBpZCwgc3RydWN0IGlmX2RxYmxrICpkaSk7CisKKy8qCisgKiBPcGVyYXRpb25zIHN1cHBvcnRlZCBmb3IgZGlza3F1b3Rhcy4KKyAqLworZXh0ZXJuIHN0cnVjdCBkcXVvdF9vcGVyYXRpb25zIGRxdW90X29wZXJhdGlvbnM7CitleHRlcm4gc3RydWN0IHF1b3RhY3RsX29wcyB2ZnNfcXVvdGFjdGxfb3BzOworCisjZGVmaW5lIHNiX2RxdW90X29wcyAoJmRxdW90X29wZXJhdGlvbnMpCisjZGVmaW5lIHNiX3F1b3RhY3RsX29wcyAoJnZmc19xdW90YWN0bF9vcHMpCisKKy8qIEl0IGlzIGJldHRlciB0byBjYWxsIHRoaXMgZnVuY3Rpb24gb3V0c2lkZSBvZiBhbnkgdHJhbnNhY3Rpb24gYXMgaXQgbWlnaHQKKyAqIG5lZWQgYSBsb3Qgb2Ygc3BhY2UgaW4gam91cm5hbCBmb3IgZHF1b3Qgc3RydWN0dXJlIGFsbG9jYXRpb24uICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIERRVU9UX0lOSVQoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlCVUdfT04oIWlub2RlLT5pX3NiKTsKKwlpZiAoc2JfYW55X3F1b3RhX2VuYWJsZWQoaW5vZGUtPmlfc2IpICYmICFJU19OT1FVT1RBKGlub2RlKSkKKwkJaW5vZGUtPmlfc2ItPmRxX29wLT5pbml0aWFsaXplKGlub2RlLCAtMSk7Cit9CisKKy8qIFRoZSBzYW1lIGFzIHdpdGggRFFVT1RfSU5JVCAqLworc3RhdGljIF9faW5saW5lX18gdm9pZCBEUVVPVF9EUk9QKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJLyogSGVyZSB3ZSBjYW4gZ2V0IGFyYml0cmFyeSBpbm9kZSBmcm9tIGNsZWFyX2lub2RlKCkgc28gd2UgaGF2ZQorCSAqIHRvIGJlIGNhcmVmdWwuIE9UT0ggd2UgZG9uJ3QgbmVlZCBsb2NraW5nIGFzIHF1b3RhIG9wZXJhdGlvbnMKKwkgKiBhcmUgYWxsb3dlZCB0byBjaGFuZ2Ugb25seSBhdCBtb3VudCB0aW1lICovCisJaWYgKCFJU19OT1FVT1RBKGlub2RlKSAmJiBpbm9kZS0+aV9zYiAmJiBpbm9kZS0+aV9zYi0+ZHFfb3AKKwkgICAgJiYgaW5vZGUtPmlfc2ItPmRxX29wLT5kcm9wKSB7CisJCWludCBjbnQ7CisJCS8qIFRlc3QgYmVmb3JlIGNhbGxpbmcgdG8gcnVsZSBvdXQgY2FsbHMgZnJvbSBwcm9jIGFuZCBzdWNoCisgICAgICAgICAgICAgICAgICogd2hlcmUgd2UgYXJlIG5vdCBhbGxvd2VkIHRvIGJsb2NrLiBOb3RlIHRoYXQgdGhpcyBpcworCQkgKiBhY3R1YWxseSByZWxpYWJsZSB0ZXN0IGV2ZW4gd2l0aG91dCB0aGUgbG9jayAtIHRoZSBjYWxsZXIKKwkJICogbXVzdCBhc3N1cmUgdGhhdCBub2JvZHkgY2FuIGNvbWUgYWZ0ZXIgdGhlIERRVU9UX0RST1AgYW5kCisJCSAqIGFkZCBxdW90YSBwb2ludGVycyBiYWNrIGFueXdheSAqLworCQlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspCisJCQlpZiAoaW5vZGUtPmlfZHF1b3RbY250XSAhPSBOT0RRVU9UKQorCQkJCWJyZWFrOworCQlpZiAoY250IDwgTUFYUVVPVEFTKQorCQkJaW5vZGUtPmlfc2ItPmRxX29wLT5kcm9wKGlub2RlKTsKKwl9Cit9CisKKy8qIFRoZSBmb2xsb3dpbmcgYWxsb2NhdGlvbi9mcmVlaW5nL3RyYW5zZmVyIGZ1bmN0aW9ucyAqbXVzdCogYmUgY2FsbGVkIGluc2lkZQorICogYSB0cmFuc2FjdGlvbiAoZGVhZGxvY2tzIHBvc3NpYmxlIG90aGVyd2lzZSkgKi8KK3N0YXRpYyBfX2lubGluZV9fIGludCBEUVVPVF9QUkVBTExPQ19TUEFDRV9OT0RJUlRZKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnIpCit7CisJaWYgKHNiX2FueV9xdW90YV9lbmFibGVkKGlub2RlLT5pX3NiKSkgeworCQkvKiBVc2VkIHNwYWNlIGlzIHVwZGF0ZWQgaW4gYWxsb2Nfc3BhY2UoKSAqLworCQlpZiAoaW5vZGUtPmlfc2ItPmRxX29wLT5hbGxvY19zcGFjZShpbm9kZSwgbnIsIDEpID09IE5PX1FVT1RBKQorCQkJcmV0dXJuIDE7CisJfQorCWVsc2UKKwkJaW5vZGVfYWRkX2J5dGVzKGlub2RlLCBucik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBEUVVPVF9QUkVBTExPQ19TUEFDRShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG5yKQoreworCWludCByZXQ7CisgICAgICAgIGlmICghKHJldCA9ICBEUVVPVF9QUkVBTExPQ19TUEFDRV9OT0RJUlRZKGlub2RlLCBucikpKQorCQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgRFFVT1RfQUxMT0NfU1BBQ0VfTk9ESVJUWShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG5yKQoreworCWlmIChzYl9hbnlfcXVvdGFfZW5hYmxlZChpbm9kZS0+aV9zYikpIHsKKwkJLyogVXNlZCBzcGFjZSBpcyB1cGRhdGVkIGluIGFsbG9jX3NwYWNlKCkgKi8KKwkJaWYgKGlub2RlLT5pX3NiLT5kcV9vcC0+YWxsb2Nfc3BhY2UoaW5vZGUsIG5yLCAwKSA9PSBOT19RVU9UQSkKKwkJCXJldHVybiAxOworCX0KKwllbHNlCisJCWlub2RlX2FkZF9ieXRlcyhpbm9kZSwgbnIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgRFFVT1RfQUxMT0NfU1BBQ0Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBucikKK3sKKwlpbnQgcmV0OworCWlmICghKHJldCA9IERRVU9UX0FMTE9DX1NQQUNFX05PRElSVFkoaW5vZGUsIG5yKSkpCisJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBEUVVPVF9BTExPQ19JTk9ERShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCWlmIChzYl9hbnlfcXVvdGFfZW5hYmxlZChpbm9kZS0+aV9zYikpIHsKKwkJRFFVT1RfSU5JVChpbm9kZSk7CisJCWlmIChpbm9kZS0+aV9zYi0+ZHFfb3AtPmFsbG9jX2lub2RlKGlub2RlLCAxKSA9PSBOT19RVU9UQSkKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBEUVVPVF9GUkVFX1NQQUNFX05PRElSVFkoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBucikKK3sKKwlpZiAoc2JfYW55X3F1b3RhX2VuYWJsZWQoaW5vZGUtPmlfc2IpKQorCQlpbm9kZS0+aV9zYi0+ZHFfb3AtPmZyZWVfc3BhY2UoaW5vZGUsIG5yKTsKKwllbHNlCisJCWlub2RlX3N1Yl9ieXRlcyhpbm9kZSwgbnIpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIERRVU9UX0ZSRUVfU1BBQ0Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBucikKK3sKKwlEUVVPVF9GUkVFX1NQQUNFX05PRElSVFkoaW5vZGUsIG5yKTsKKwltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBEUVVPVF9GUkVFX0lOT0RFKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJaWYgKHNiX2FueV9xdW90YV9lbmFibGVkKGlub2RlLT5pX3NiKSkKKwkJaW5vZGUtPmlfc2ItPmRxX29wLT5mcmVlX2lub2RlKGlub2RlLCAxKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IERRVU9UX1RSQU5TRkVSKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpYXR0ciAqaWF0dHIpCit7CisJaWYgKHNiX2FueV9xdW90YV9lbmFibGVkKGlub2RlLT5pX3NiKSAmJiAhSVNfTk9RVU9UQShpbm9kZSkpIHsKKwkJRFFVT1RfSU5JVChpbm9kZSk7CisJCWlmIChpbm9kZS0+aV9zYi0+ZHFfb3AtPnRyYW5zZmVyKGlub2RlLCBpYXR0cikgPT0gTk9fUVVPVEEpCisJCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIFRoZSBmb2xsb3dpbmcgdHdvIGZ1bmN0aW9ucyBjYW5ub3QgYmUgY2FsbGVkIGluc2lkZSBhIHRyYW5zYWN0aW9uICovCisjZGVmaW5lIERRVU9UX1NZTkMoc2IpCXN5bmNfZHF1b3RzKHNiLCAtMSkKKworc3RhdGljIF9faW5saW5lX18gaW50IERRVU9UX09GRihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCWludCByZXQgPSAtRU5PU1lTOworCisJaWYgKHNiX2FueV9xdW90YV9lbmFibGVkKHNiKSAmJiBzYi0+c19xY29wICYmIHNiLT5zX3Fjb3AtPnF1b3RhX29mZikKKwkJcmV0ID0gc2ItPnNfcWNvcC0+cXVvdGFfb2ZmKHNiLCAtMSk7CisJcmV0dXJuIHJldDsKK30KKworI2Vsc2UKKworLyoKKyAqIE5PLU9QIHdoZW4gcXVvdGEgbm90IGNvbmZpZ3VyZWQuCisgKi8KKyNkZWZpbmUgc2JfZHF1b3Rfb3BzCQkJCShOVUxMKQorI2RlZmluZSBzYl9xdW90YWN0bF9vcHMJCQkJKE5VTEwpCisjZGVmaW5lIHN5bmNfZHF1b3RzX2RldihkZXYsdHlwZSkJCShOVUxMKQorI2RlZmluZSBEUVVPVF9JTklUKGlub2RlKQkJCWRvIHsgfSB3aGlsZSgwKQorI2RlZmluZSBEUVVPVF9EUk9QKGlub2RlKQkJCWRvIHsgfSB3aGlsZSgwKQorI2RlZmluZSBEUVVPVF9BTExPQ19JTk9ERShpbm9kZSkJCSgwKQorI2RlZmluZSBEUVVPVF9GUkVFX0lOT0RFKGlub2RlKQkJCWRvIHsgfSB3aGlsZSgwKQorI2RlZmluZSBEUVVPVF9TWU5DKHNiKQkJCQlkbyB7IH0gd2hpbGUoMCkKKyNkZWZpbmUgRFFVT1RfT0ZGKHNiKQkJCQlkbyB7IH0gd2hpbGUoMCkKKyNkZWZpbmUgRFFVT1RfVFJBTlNGRVIoaW5vZGUsIGlhdHRyKQkJKDApCitleHRlcm4gX19pbmxpbmVfXyBpbnQgRFFVT1RfUFJFQUxMT0NfU1BBQ0VfTk9ESVJUWShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG5yKQoreworCWlub2RlX2FkZF9ieXRlcyhpbm9kZSwgbnIpOworCXJldHVybiAwOworfQorCitleHRlcm4gX19pbmxpbmVfXyBpbnQgRFFVT1RfUFJFQUxMT0NfU1BBQ0Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBucikKK3sKKwlEUVVPVF9QUkVBTExPQ19TUEFDRV9OT0RJUlRZKGlub2RlLCBucik7CisJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CisJcmV0dXJuIDA7Cit9CisKK2V4dGVybiBfX2lubGluZV9fIGludCBEUVVPVF9BTExPQ19TUEFDRV9OT0RJUlRZKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnIpCit7CisJaW5vZGVfYWRkX2J5dGVzKGlub2RlLCBucik7CisJcmV0dXJuIDA7Cit9CisKK2V4dGVybiBfX2lubGluZV9fIGludCBEUVVPVF9BTExPQ19TUEFDRShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG5yKQoreworCURRVU9UX0FMTE9DX1NQQUNFX05PRElSVFkoaW5vZGUsIG5yKTsKKwltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKKwlyZXR1cm4gMDsKK30KKworZXh0ZXJuIF9faW5saW5lX18gdm9pZCBEUVVPVF9GUkVFX1NQQUNFX05PRElSVFkoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBucikKK3sKKwlpbm9kZV9zdWJfYnl0ZXMoaW5vZGUsIG5yKTsKK30KKworZXh0ZXJuIF9faW5saW5lX18gdm9pZCBEUVVPVF9GUkVFX1NQQUNFKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnIpCit7CisJRFFVT1RfRlJFRV9TUEFDRV9OT0RJUlRZKGlub2RlLCBucik7CisJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7Cit9CQorCisjZW5kaWYgLyogQ09ORklHX1FVT1RBICovCisKKyNkZWZpbmUgRFFVT1RfUFJFQUxMT0NfQkxPQ0tfTk9ESVJUWShpbm9kZSwgbnIpCURRVU9UX1BSRUFMTE9DX1NQQUNFX05PRElSVFkoaW5vZGUsICgocXNpemVfdCkobnIpKSA8PCAoaW5vZGUpLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzKQorI2RlZmluZSBEUVVPVF9QUkVBTExPQ19CTE9DSyhpbm9kZSwgbnIpCURRVU9UX1BSRUFMTE9DX1NQQUNFKGlub2RlLCAoKHFzaXplX3QpKG5yKSkgPDwgKGlub2RlKS0+aV9zYi0+c19ibG9ja3NpemVfYml0cykKKyNkZWZpbmUgRFFVT1RfQUxMT0NfQkxPQ0tfTk9ESVJUWShpbm9kZSwgbnIpIERRVU9UX0FMTE9DX1NQQUNFX05PRElSVFkoaW5vZGUsICgocXNpemVfdCkobnIpKSA8PCAoaW5vZGUpLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzKQorI2RlZmluZSBEUVVPVF9BTExPQ19CTE9DSyhpbm9kZSwgbnIpIERRVU9UX0FMTE9DX1NQQUNFKGlub2RlLCAoKHFzaXplX3QpKG5yKSkgPDwgKGlub2RlKS0+aV9zYi0+c19ibG9ja3NpemVfYml0cykKKyNkZWZpbmUgRFFVT1RfRlJFRV9CTE9DS19OT0RJUlRZKGlub2RlLCBucikgRFFVT1RfRlJFRV9TUEFDRV9OT0RJUlRZKGlub2RlLCAoKHFzaXplX3QpKG5yKSkgPDwgKGlub2RlKS0+aV9zYi0+c19ibG9ja3NpemVfYml0cykKKyNkZWZpbmUgRFFVT1RfRlJFRV9CTE9DSyhpbm9kZSwgbnIpIERRVU9UX0ZSRUVfU1BBQ0UoaW5vZGUsICgocXNpemVfdCkobnIpKSA8PCAoaW5vZGUpLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzKQorCisjZW5kaWYgLyogX0xJTlVYX1FVT1RBT1BTXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yYWRlb25mYi5oIGIvaW5jbHVkZS9saW51eC9yYWRlb25mYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViZDg5NzUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3JhZGVvbmZiLmgKQEAgLTAsMCArMSwxNSBAQAorI2lmbmRlZiBfX0xJTlVYX1JBREVPTkZCX0hfXworI2RlZmluZSBfX0xJTlVYX1JBREVPTkZCX0hfXworCisjaW5jbHVkZSA8YXNtL2lvY3RsLmg+CisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisKKyNkZWZpbmUgQVRZX1JBREVPTl9MQ0RfT04JMHgwMDAwMDAwMQorI2RlZmluZSBBVFlfUkFERU9OX0NSVF9PTgkweDAwMDAwMDAyCisKKworI2RlZmluZSBGQklPX1JBREVPTl9HRVRfTUlSUk9SCV9JT1IoJ0AnLCAzLCBzaXplX3QpCisjZGVmaW5lIEZCSU9fUkFERU9OX1NFVF9NSVJST1IJX0lPVygnQCcsIDQsIHNpemVfdCkKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmFkaXgtdHJlZS5oIGIvaW5jbHVkZS9saW51eC9yYWRpeC10cmVlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA4MWEyOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvcmFkaXgtdHJlZS5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgTW9tY2hpbCBWZWxpa292CisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKEMpIDIwMDEgQ2hyaXN0b3BoIEhlbGx3aWcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdAorICogeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICogCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisjaWZuZGVmIF9MSU5VWF9SQURJWF9UUkVFX0gKKyNkZWZpbmUgX0xJTlVYX1JBRElYX1RSRUVfSAorCisjaW5jbHVkZSA8bGludXgvcHJlZW1wdC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3N0cnVjdCByYWRpeF90cmVlX3Jvb3QgeworCXVuc2lnbmVkIGludAkJaGVpZ2h0OworCWludAkJCWdmcF9tYXNrOworCXN0cnVjdCByYWRpeF90cmVlX25vZGUJKnJub2RlOworfTsKKworI2RlZmluZSBSQURJWF9UUkVFX0lOSVQobWFzaykJewkJCQkJXAorCS5oZWlnaHQgPSAwLAkJCQkJCQlcCisJLmdmcF9tYXNrID0gKG1hc2spLAkJCQkJCVwKKwkucm5vZGUgPSBOVUxMLAkJCQkJCQlcCit9CisKKyNkZWZpbmUgUkFESVhfVFJFRShuYW1lLCBtYXNrKSBcCisJc3RydWN0IHJhZGl4X3RyZWVfcm9vdCBuYW1lID0gUkFESVhfVFJFRV9JTklUKG1hc2spCisKKyNkZWZpbmUgSU5JVF9SQURJWF9UUkVFKHJvb3QsIG1hc2spCQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCShyb290KS0+aGVpZ2h0ID0gMDsJCQkJCQlcCisJKHJvb3QpLT5nZnBfbWFzayA9IChtYXNrKTsJCQkJCVwKKwkocm9vdCktPnJub2RlID0gTlVMTDsJCQkJCQlcCit9IHdoaWxlICgwKQorCitpbnQgcmFkaXhfdHJlZV9pbnNlcnQoc3RydWN0IHJhZGl4X3RyZWVfcm9vdCAqLCB1bnNpZ25lZCBsb25nLCB2b2lkICopOwordm9pZCAqcmFkaXhfdHJlZV9sb29rdXAoc3RydWN0IHJhZGl4X3RyZWVfcm9vdCAqLCB1bnNpZ25lZCBsb25nKTsKK3ZvaWQgKnJhZGl4X3RyZWVfZGVsZXRlKHN0cnVjdCByYWRpeF90cmVlX3Jvb3QgKiwgdW5zaWduZWQgbG9uZyk7Cit1bnNpZ25lZCBpbnQKK3JhZGl4X3RyZWVfZ2FuZ19sb29rdXAoc3RydWN0IHJhZGl4X3RyZWVfcm9vdCAqcm9vdCwgdm9pZCAqKnJlc3VsdHMsCisJCQl1bnNpZ25lZCBsb25nIGZpcnN0X2luZGV4LCB1bnNpZ25lZCBpbnQgbWF4X2l0ZW1zKTsKK2ludCByYWRpeF90cmVlX3ByZWxvYWQoaW50IGdmcF9tYXNrKTsKK3ZvaWQgcmFkaXhfdHJlZV9pbml0KHZvaWQpOwordm9pZCAqcmFkaXhfdHJlZV90YWdfc2V0KHN0cnVjdCByYWRpeF90cmVlX3Jvb3QgKnJvb3QsCisJCQl1bnNpZ25lZCBsb25nIGluZGV4LCBpbnQgdGFnKTsKK3ZvaWQgKnJhZGl4X3RyZWVfdGFnX2NsZWFyKHN0cnVjdCByYWRpeF90cmVlX3Jvb3QgKnJvb3QsCisJCQl1bnNpZ25lZCBsb25nIGluZGV4LCBpbnQgdGFnKTsKK2ludCByYWRpeF90cmVlX3RhZ19nZXQoc3RydWN0IHJhZGl4X3RyZWVfcm9vdCAqcm9vdCwKKwkJCXVuc2lnbmVkIGxvbmcgaW5kZXgsIGludCB0YWcpOwordW5zaWduZWQgaW50CityYWRpeF90cmVlX2dhbmdfbG9va3VwX3RhZyhzdHJ1Y3QgcmFkaXhfdHJlZV9yb290ICpyb290LCB2b2lkICoqcmVzdWx0cywKKwkJdW5zaWduZWQgbG9uZyBmaXJzdF9pbmRleCwgdW5zaWduZWQgaW50IG1heF9pdGVtcywgaW50IHRhZyk7CitpbnQgcmFkaXhfdHJlZV90YWdnZWQoc3RydWN0IHJhZGl4X3RyZWVfcm9vdCAqcm9vdCwgaW50IHRhZyk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByYWRpeF90cmVlX3ByZWxvYWRfZW5kKHZvaWQpCit7CisJcHJlZW1wdF9lbmFibGUoKTsKK30KKworI2VuZGlmIC8qIF9MSU5VWF9SQURJWF9UUkVFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmFpZC9saW5lYXIuaCBiL2luY2x1ZGUvbGludXgvcmFpZC9saW5lYXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDRjNGZlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9yYWlkL2xpbmVhci5oCkBAIC0wLDAgKzEsMjcgQEAKKyNpZm5kZWYgX0xJTkVBUl9ICisjZGVmaW5lIF9MSU5FQVJfSAorCisjaW5jbHVkZSA8bGludXgvcmFpZC9tZC5oPgorCitzdHJ1Y3QgZGV2X2luZm8geworCW1ka19yZGV2X3QJKnJkZXY7CisJc2VjdG9yX3QJc2l6ZTsKKwlzZWN0b3JfdAlvZmZzZXQ7Cit9OworCit0eXBlZGVmIHN0cnVjdCBkZXZfaW5mbyBkZXZfaW5mb190OworCitzdHJ1Y3QgbGluZWFyX3ByaXZhdGVfZGF0YQoreworCWRldl9pbmZvX3QJCSoqaGFzaF90YWJsZTsKKwlkZXZfaW5mb190CQkqc21hbGxlc3Q7CisJaW50CQkJbnJfem9uZXM7CisJZGV2X2luZm9fdAkJZGlza3NbMF07Cit9OworCisKK3R5cGVkZWYgc3RydWN0IGxpbmVhcl9wcml2YXRlX2RhdGEgbGluZWFyX2NvbmZfdDsKKworI2RlZmluZSBtZGRldl90b19jb25mKG1kZGV2KSAoKGxpbmVhcl9jb25mX3QgKikgbWRkZXYtPnByaXZhdGUpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yYWlkL21kLmggYi9pbmNsdWRlL2xpbnV4L3JhaWQvbWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmE2N2QxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9yYWlkL21kLmgKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAgIG1kLmggOiBNdWx0aXBsZSBEZXZpY2VzIGRyaXZlciBmb3IgTGludXgKKyAgICAgICAgICBDb3B5cmlnaHQgKEMpIDE5OTYtOTggSW5nbyBNb2xuYXIsIEdhZGkgT3htYW4KKyAgICAgICAgICBDb3B5cmlnaHQgKEMpIDE5OTQtOTYgTWFyYyBaWU5HSUVSCisJICA8enluZ2llckB1ZnItaW5mby1wNy5pYnAuZnI+IG9yCisJICA8bWF6QGdsb3Vwcy5mZG4uZnI+CisJICAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisgICAKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAoZm9yIGV4YW1wbGUgL3Vzci9zcmMvbGludXgvQ09QWUlORyk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLiAgCisqLworCisjaWZuZGVmIF9NRF9ICisjZGVmaW5lIF9NRF9ICisKKyNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KKyNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CisjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bmV0L2NoZWNrc3VtLmg+CisjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CisjaW5jbHVkZSA8bGludXgvbWVtcG9vbC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvYmxrcGcuaD4KKyNpbmNsdWRlIDxsaW51eC9iaW8uaD4KKworLyoKKyAqICdtZF9wLmgnIGhvbGRzIHRoZSAncGh5c2ljYWwnIGxheW91dCBvZiBSQUlEIGRldmljZXMKKyAqICdtZF91LmgnIGhvbGRzIHRoZSB1c2VyIDw9PiBrZXJuZWwgQVBJCisgKgorICogJ21kX2suaCcgaG9sZHMga2VybmVsIGludGVybmFsIGRlZmluaXRpb25zCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3JhaWQvbWRfcC5oPgorI2luY2x1ZGUgPGxpbnV4L3JhaWQvbWRfdS5oPgorI2luY2x1ZGUgPGxpbnV4L3JhaWQvbWRfay5oPgorCisvKgorICogRGlmZmVyZW50IG1ham9yIHZlcnNpb25zIGFyZSBub3QgY29tcGF0aWJsZS4KKyAqIERpZmZlcmVudCBtaW5vciB2ZXJzaW9ucyBhcmUgb25seSBkb3dud2FyZCBjb21wYXRpYmxlLgorICogRGlmZmVyZW50IHBhdGNobGV2ZWwgdmVyc2lvbnMgYXJlIGRvd253YXJkIGFuZCB1cHdhcmQgY29tcGF0aWJsZS4KKyAqLworI2RlZmluZSBNRF9NQUpPUl9WRVJTSU9OICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgTURfTUlOT1JfVkVSU0lPTiAgICAgICAgICAgICAgICA5MAorI2RlZmluZSBNRF9QQVRDSExFVkVMX1ZFUlNJT04gICAgICAgICAgIDEKKworZXh0ZXJuIGludCByZWdpc3Rlcl9tZF9wZXJzb25hbGl0eSAoaW50IHBfbnVtLCBtZGtfcGVyc29uYWxpdHlfdCAqcCk7CitleHRlcm4gaW50IHVucmVnaXN0ZXJfbWRfcGVyc29uYWxpdHkgKGludCBwX251bSk7CitleHRlcm4gbWRrX3RocmVhZF90ICogbWRfcmVnaXN0ZXJfdGhyZWFkICh2b2lkICgqcnVuKSAobWRkZXZfdCAqbWRkZXYpLAorCQkJCW1kZGV2X3QgKm1kZGV2LCBjb25zdCBjaGFyICpuYW1lKTsKK2V4dGVybiB2b2lkIG1kX3VucmVnaXN0ZXJfdGhyZWFkIChtZGtfdGhyZWFkX3QgKnRocmVhZCk7CitleHRlcm4gdm9pZCBtZF93YWtldXBfdGhyZWFkKG1ka190aHJlYWRfdCAqdGhyZWFkKTsKK2V4dGVybiB2b2lkIG1kX2NoZWNrX3JlY292ZXJ5KG1kZGV2X3QgKm1kZGV2KTsKK2V4dGVybiB2b2lkIG1kX3dyaXRlX3N0YXJ0KG1kZGV2X3QgKm1kZGV2KTsKK2V4dGVybiB2b2lkIG1kX3dyaXRlX2VuZChtZGRldl90ICptZGRldik7CitleHRlcm4gdm9pZCBtZF9oYW5kbGVfc2FmZW1vZGUobWRkZXZfdCAqbWRkZXYpOworZXh0ZXJuIHZvaWQgbWRfZG9uZV9zeW5jKG1kZGV2X3QgKm1kZGV2LCBpbnQgYmxvY2tzLCBpbnQgb2spOworZXh0ZXJuIHZvaWQgbWRfZXJyb3IgKG1kZGV2X3QgKm1kZGV2LCBtZGtfcmRldl90ICpyZGV2KTsKK2V4dGVybiB2b2lkIG1kX3VucGx1Z19tZGRldihtZGRldl90ICptZGRldik7CisKK2V4dGVybiB2b2lkIG1kX3ByaW50X2RldmljZXMgKHZvaWQpOworCisjZGVmaW5lIE1EX0JVRyh4Li4uKSB7IHByaW50aygibWQ6IGJ1ZyBpbiBmaWxlICVzLCBsaW5lICVkXG4iLCBfX0ZJTEVfXywgX19MSU5FX18pOyBtZF9wcmludF9kZXZpY2VzKCk7IH0KKworI2VuZGlmIAorCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JhaWQvbWRfay5oIGIvaW5jbHVkZS9saW51eC9yYWlkL21kX2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWEwZDQwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9yYWlkL21kX2suaApAQCAtMCwwICsxLDM2OSBAQAorLyoKKyAgIG1kX2suaCA6IGtlcm5lbCBpbnRlcm5hbCBzdHJ1Y3R1cmUgb2YgdGhlIExpbnV4IE1EIGRyaXZlcgorICAgICAgICAgIENvcHlyaWdodCAoQykgMTk5Ni05OCBJbmdvIE1vbG5hciwgR2FkaSBPeG1hbgorCSAgCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorICAgCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgKGZvciBleGFtcGxlIC91c3Ivc3JjL2xpbnV4L0NPUFlJTkcpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4gIAorKi8KKworI2lmbmRlZiBfTURfS19ICisjZGVmaW5lIF9NRF9LX0gKKworI2RlZmluZSBNRF9SRVNFUlZFRCAgICAgICAwVUwKKyNkZWZpbmUgTElORUFSICAgICAgICAgICAgMVVMCisjZGVmaW5lIFJBSUQwICAgICAgICAgICAgIDJVTAorI2RlZmluZSBSQUlEMSAgICAgICAgICAgICAzVUwKKyNkZWZpbmUgUkFJRDUgICAgICAgICAgICAgNFVMCisjZGVmaW5lIFRSQU5TTFVDRU5UICAgICAgIDVVTAorI2RlZmluZSBIU00gICAgICAgICAgICAgICA2VUwKKyNkZWZpbmUgTVVMVElQQVRIICAgICAgICAgN1VMCisjZGVmaW5lIFJBSUQ2CQkgIDhVTAorI2RlZmluZQlSQUlEMTAJCSAgOVVMCisjZGVmaW5lIEZBVUxUWQkJICAxMFVMCisjZGVmaW5lIE1BWF9QRVJTT05BTElUWSAgIDExVUwKKworI2RlZmluZQlMRVZFTF9NVUxUSVBBVEgJCSgtNCkKKyNkZWZpbmUJTEVWRUxfTElORUFSCQkoLTEpCisjZGVmaW5lCUxFVkVMX0ZBVUxUWQkJKC01KQorCisjZGVmaW5lIE1heFNlY3RvciAofihzZWN0b3JfdCkwKQorI2RlZmluZSBNRF9USFJFQURfTkFNRV9NQVggMTQKKworc3RhdGljIGlubGluZSBpbnQgcGVyc190b19sZXZlbCAoaW50IHBlcnMpCit7CisJc3dpdGNoIChwZXJzKSB7CisJCWNhc2UgRkFVTFRZOgkJcmV0dXJuIExFVkVMX0ZBVUxUWTsKKwkJY2FzZSBNVUxUSVBBVEg6CQlyZXR1cm4gTEVWRUxfTVVMVElQQVRIOworCQljYXNlIEhTTToJCXJldHVybiAtMzsKKwkJY2FzZSBUUkFOU0xVQ0VOVDoJcmV0dXJuIC0yOworCQljYXNlIExJTkVBUjoJCXJldHVybiBMRVZFTF9MSU5FQVI7CisJCWNhc2UgUkFJRDA6CQlyZXR1cm4gMDsKKwkJY2FzZSBSQUlEMToJCXJldHVybiAxOworCQljYXNlIFJBSUQ1OgkJcmV0dXJuIDU7CisJCWNhc2UgUkFJRDY6CQlyZXR1cm4gNjsKKwkJY2FzZSBSQUlEMTA6CQlyZXR1cm4gMTA7CisJfQorCUJVRygpOworCXJldHVybiBNRF9SRVNFUlZFRDsKK30KKworc3RhdGljIGlubGluZSBpbnQgbGV2ZWxfdG9fcGVycyAoaW50IGxldmVsKQoreworCXN3aXRjaCAobGV2ZWwpIHsKKwkJY2FzZSBMRVZFTF9GQVVMVFk6IHJldHVybiBGQVVMVFk7CisJCWNhc2UgTEVWRUxfTVVMVElQQVRIOiByZXR1cm4gTVVMVElQQVRIOworCQljYXNlIC0zOiByZXR1cm4gSFNNOworCQljYXNlIC0yOiByZXR1cm4gVFJBTlNMVUNFTlQ7CisJCWNhc2UgTEVWRUxfTElORUFSOiByZXR1cm4gTElORUFSOworCQljYXNlIDA6IHJldHVybiBSQUlEMDsKKwkJY2FzZSAxOiByZXR1cm4gUkFJRDE7CisJCWNhc2UgNDoKKwkJY2FzZSA1OiByZXR1cm4gUkFJRDU7CisJCWNhc2UgNjogcmV0dXJuIFJBSUQ2OworCQljYXNlIDEwOiByZXR1cm4gUkFJRDEwOworCX0KKwlyZXR1cm4gTURfUkVTRVJWRUQ7Cit9CisKK3R5cGVkZWYgc3RydWN0IG1kZGV2X3MgbWRkZXZfdDsKK3R5cGVkZWYgc3RydWN0IG1ka19yZGV2X3MgbWRrX3JkZXZfdDsKKworI2RlZmluZSBNQVhfTURfREVWUyAgMjU2CS8qIE1heCBudW1iZXIgb2YgbWQgZGV2ICovCisKKy8qCisgKiBvcHRpb25zIHBhc3NlZCBpbiByYWlkcnVuOgorICovCisKKyNkZWZpbmUgTUFYX0NIVU5LX1NJWkUgKDQwOTYqMTAyNCkKKworLyoKKyAqIGRlZmF1bHQgcmVhZGFoZWFkCisgKi8KKworc3RhdGljIGlubGluZSBpbnQgZGlza19mYXVsdHkobWRwX2Rpc2tfdCAqIGQpCit7CisJcmV0dXJuIGQtPnN0YXRlICYgKDEgPDwgTURfRElTS19GQVVMVFkpOworfQorCitzdGF0aWMgaW5saW5lIGludCBkaXNrX2FjdGl2ZShtZHBfZGlza190ICogZCkKK3sKKwlyZXR1cm4gZC0+c3RhdGUgJiAoMSA8PCBNRF9ESVNLX0FDVElWRSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGRpc2tfc3luYyhtZHBfZGlza190ICogZCkKK3sKKwlyZXR1cm4gZC0+c3RhdGUgJiAoMSA8PCBNRF9ESVNLX1NZTkMpOworfQorCitzdGF0aWMgaW5saW5lIGludCBkaXNrX3NwYXJlKG1kcF9kaXNrX3QgKiBkKQoreworCXJldHVybiAhZGlza19zeW5jKGQpICYmICFkaXNrX2FjdGl2ZShkKSAmJiAhZGlza19mYXVsdHkoZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGRpc2tfcmVtb3ZlZChtZHBfZGlza190ICogZCkKK3sKKwlyZXR1cm4gZC0+c3RhdGUgJiAoMSA8PCBNRF9ESVNLX1JFTU9WRUQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbWFya19kaXNrX2ZhdWx0eShtZHBfZGlza190ICogZCkKK3sKKwlkLT5zdGF0ZSB8PSAoMSA8PCBNRF9ESVNLX0ZBVUxUWSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtYXJrX2Rpc2tfYWN0aXZlKG1kcF9kaXNrX3QgKiBkKQoreworCWQtPnN0YXRlIHw9ICgxIDw8IE1EX0RJU0tfQUNUSVZFKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG1hcmtfZGlza19zeW5jKG1kcF9kaXNrX3QgKiBkKQoreworCWQtPnN0YXRlIHw9ICgxIDw8IE1EX0RJU0tfU1lOQyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtYXJrX2Rpc2tfc3BhcmUobWRwX2Rpc2tfdCAqIGQpCit7CisJZC0+c3RhdGUgPSAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbWFya19kaXNrX3JlbW92ZWQobWRwX2Rpc2tfdCAqIGQpCit7CisJZC0+c3RhdGUgPSAoMSA8PCBNRF9ESVNLX0ZBVUxUWSkgfCAoMSA8PCBNRF9ESVNLX1JFTU9WRUQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbWFya19kaXNrX2luYWN0aXZlKG1kcF9kaXNrX3QgKiBkKQoreworCWQtPnN0YXRlICY9IH4oMSA8PCBNRF9ESVNLX0FDVElWRSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtYXJrX2Rpc2tfbm9uc3luYyhtZHBfZGlza190ICogZCkKK3sKKwlkLT5zdGF0ZSAmPSB+KDEgPDwgTURfRElTS19TWU5DKTsKK30KKworLyoKKyAqIE1EJ3MgJ2V4dGVuZGVkJyBkZXZpY2UKKyAqLworc3RydWN0IG1ka19yZGV2X3MKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkIHNhbWVfc2V0OwkvKiBSQUlEIGRldmljZXMgd2l0aGluIHRoZSBzYW1lIHNldCAqLworCisJc2VjdG9yX3Qgc2l6ZTsJCQkvKiBEZXZpY2Ugc2l6ZSAoaW4gYmxvY2tzKSAqLworCW1kZGV2X3QgKm1kZGV2OwkJCS8qIFJBSUQgYXJyYXkgaWYgcnVubmluZyAqLworCXVuc2lnbmVkIGxvbmcgbGFzdF9ldmVudHM7CS8qIElPIGV2ZW50IHRpbWVzdGFtcCAqLworCisJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldjsJLyogYmxvY2sgZGV2aWNlIGhhbmRsZSAqLworCisJc3RydWN0IHBhZ2UJKnNiX3BhZ2U7CisJaW50CQlzYl9sb2FkZWQ7CisJc2VjdG9yX3QJZGF0YV9vZmZzZXQ7CS8qIHN0YXJ0IG9mIGRhdGEgaW4gYXJyYXkgKi8KKwlzZWN0b3JfdAlzYl9vZmZzZXQ7CisJaW50CQlwcmVmZXJyZWRfbWlub3I7CS8qIGF1dG9ydW4gc3VwcG9ydCAqLworCisJLyogQSBkZXZpY2UgY2FuIGJlIGluIG9uZSBvZiB0aHJlZSBzdGF0ZXMgYmFzZWQgb24gdHdvIGZsYWdzOgorCSAqIE5vdCB3b3JraW5nOiAgIGZhdWx0eT09MSBpbl9zeW5jPT0wCisJICogRnVsbHkgd29ya2luZzogZmF1bHR5PT0wIGluX3N5bmM9PTEKKwkgKiBXb3JraW5nLCBidXQgbm90CisJICogaW4gc3luYyB3aXRoIGFycmF5CisJICogICAgICAgICAgICAgICAgZmF1bHR5PT0wIGluX3N5bmM9PTAKKwkgKgorCSAqIEl0IGNhbiBuZXZlciBoYXZlIGZhdWx0eT09MSwgaW5fc3luYz09MQorCSAqIFRoaXMgcmVkdWNlcyB0aGUgYnVyZGVuIG9mIHRlc3RpbmcgbXVsdGlwbGUgZmxhZ3MgaW4gbWFueSBjYXNlcworCSAqLworCWludCBmYXVsdHk7CQkJLyogaWYgZmF1bHR5IGRvIG5vdCBpc3N1ZSBJTyByZXF1ZXN0cyAqLworCWludCBpbl9zeW5jOwkJCS8qIGRldmljZSBpcyBhIGZ1bGwgbWVtYmVyIG9mIHRoZSBhcnJheSAqLworCisJaW50IGRlc2NfbnI7CQkJLyogZGVzY3JpcHRvciBpbmRleCBpbiB0aGUgc3VwZXJibG9jayAqLworCWludCByYWlkX2Rpc2s7CQkJLyogcm9sZSBvZiBkZXZpY2UgaW4gYXJyYXkgKi8KKworCWF0b21pY190CW5yX3BlbmRpbmc7CS8qIG51bWJlciBvZiBwZW5kaW5nIHJlcXVlc3RzLgorCQkJCQkgKiBvbmx5IG1haW50YWluZWQgZm9yIGFycmF5cyB0aGF0CisJCQkJCSAqIHN1cHBvcnQgaG90IHJlbW92YWwKKwkJCQkJICovCit9OworCit0eXBlZGVmIHN0cnVjdCBtZGtfcGVyc29uYWxpdHlfcyBtZGtfcGVyc29uYWxpdHlfdDsKKworc3RydWN0IG1kZGV2X3MKK3sKKwl2b2lkCQkJCSpwcml2YXRlOworCW1ka19wZXJzb25hbGl0eV90CQkqcGVyczsKKwlkZXZfdAkJCQl1bml0OworCWludAkJCQltZF9taW5vcjsKKwlzdHJ1Y3QgbGlzdF9oZWFkIAkJZGlza3M7CisJaW50CQkJCXNiX2RpcnR5OworCWludAkJCQlybzsKKworCXN0cnVjdCBnZW5kaXNrCQkJKmdlbmRpc2s7CisKKwkvKiBTdXBlcmJsb2NrIGluZm9ybWF0aW9uICovCisJaW50CQkJCW1ham9yX3ZlcnNpb24sCisJCQkJCW1pbm9yX3ZlcnNpb24sCisJCQkJCXBhdGNoX3ZlcnNpb247CisJaW50CQkJCXBlcnNpc3RlbnQ7CisJaW50CQkJCWNodW5rX3NpemU7CisJdGltZV90CQkJCWN0aW1lLCB1dGltZTsKKwlpbnQJCQkJbGV2ZWwsIGxheW91dDsKKwlpbnQJCQkJcmFpZF9kaXNrczsKKwlpbnQJCQkJbWF4X2Rpc2tzOworCXNlY3Rvcl90CQkJc2l6ZTsgLyogdXNlZCBzaXplIG9mIGNvbXBvbmVudCBkZXZpY2VzICovCisJc2VjdG9yX3QJCQlhcnJheV9zaXplOyAvKiBleHBvcnRlZCBhcnJheSBzaXplICovCisJX191NjQJCQkJZXZlbnRzOworCisJY2hhcgkJCQl1dWlkWzE2XTsKKworCXN0cnVjdCBtZGtfdGhyZWFkX3MJCSp0aHJlYWQ7CS8qIG1hbmFnZW1lbnQgdGhyZWFkICovCisJc3RydWN0IG1ka190aHJlYWRfcwkJKnN5bmNfdGhyZWFkOwkvKiBkb2luZyByZXN5bmMgb3IgcmVjb25zdHJ1Y3QgKi8KKwlzZWN0b3JfdAkJCWN1cnJfcmVzeW5jOwkvKiBibG9ja3Mgc2NoZWR1bGVkICovCisJdW5zaWduZWQgbG9uZwkJCXJlc3luY19tYXJrOwkvKiBhIHJlY2VudCB0aW1lc3RhbXAgKi8KKwlzZWN0b3JfdAkJCXJlc3luY19tYXJrX2NudDsvKiBibG9ja3Mgd3JpdHRlbiBhdCByZXN5bmNfbWFyayAqLworCisJc2VjdG9yX3QJCQlyZXN5bmNfbWF4X3NlY3RvcnM7IC8qIG1heSBiZSBzZXQgYnkgcGVyc29uYWxpdHkgKi8KKwkvKiByZWNvdmVyeS9yZXN5bmMgZmxhZ3MgCisJICogTkVFREVEOiAgIHdlIG1pZ2h0IG5lZWQgdG8gc3RhcnQgYSByZXN5bmMvcmVjb3ZlcgorCSAqIFJVTk5JTkc6ICBhIHRocmVhZCBpcyBydW5uaW5nLCBvciBhYm91dCB0byBiZSBzdGFydGVkCisJICogU1lOQzogICAgIGFjdHVhbGx5IGRvaW5nIGEgcmVzeW5jLCBub3QgYSByZWNvdmVyeQorCSAqIEVSUjogICAgICBhbmQgSU8gZXJyb3Igd2FzIGRldGVjdGVkIC0gYWJvcnQgdGhlIHJlc3luYy9yZWNvdmVyeQorCSAqIElOVFI6ICAgICBzb21lb25lIHJlcXVlc3RlZCBhIChjbGVhbikgZWFybHkgYWJvcnQuCisJICogRE9ORTogICAgIHRocmVhZCBpcyBkb25lIGFuZCBpcyB3YWl0aW5nIHRvIGJlIHJlYXBlZAorCSAqLworI2RlZmluZQlNRF9SRUNPVkVSWV9SVU5OSU5HCTAKKyNkZWZpbmUJTURfUkVDT1ZFUllfU1lOQwkxCisjZGVmaW5lCU1EX1JFQ09WRVJZX0VSUgkJMgorI2RlZmluZQlNRF9SRUNPVkVSWV9JTlRSCTMKKyNkZWZpbmUJTURfUkVDT1ZFUllfRE9ORQk0CisjZGVmaW5lCU1EX1JFQ09WRVJZX05FRURFRAk1CisJdW5zaWduZWQgbG9uZwkJCXJlY292ZXJ5OworCisJaW50CQkJCWluX3N5bmM7CS8qIGtub3cgdG8gbm90IG5lZWQgcmVzeW5jICovCisJc3RydWN0IHNlbWFwaG9yZQkJcmVjb25maWdfc2VtOworCWF0b21pY190CQkJYWN0aXZlOworCisJaW50CQkJCWNoYW5nZWQ7CS8qIHRydWUgaWYgd2UgbWlnaHQgbmVlZCB0byByZXJlYWQgcGFydGl0aW9uIGluZm8gKi8KKwlpbnQJCQkJZGVncmFkZWQ7CS8qIHdoZXRoZXIgbWQgc2hvdWxkIGNvbnNpZGVyCisJCQkJCQkJICogYWRkaW5nIGEgc3BhcmUKKwkJCQkJCQkgKi8KKworCWF0b21pY190CQkJcmVjb3ZlcnlfYWN0aXZlOyAvKiBibG9ja3Mgc2NoZWR1bGVkLCBidXQgbm90IHdyaXR0ZW4gKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdAkJcmVjb3Zlcnlfd2FpdDsKKwlzZWN0b3JfdAkJCXJlY292ZXJ5X2NwOworCXVuc2lnbmVkIGludAkJCXNhZmVtb2RlOwkvKiBpZiBzZXQsIHVwZGF0ZSAiY2xlYW4iIHN1cGVyYmxvY2sKKwkJCQkJCQkgKiB3aGVuIG5vIHdyaXRlcyBwZW5kaW5nLgorCQkJCQkJCSAqLyAKKwl1bnNpZ25lZCBpbnQJCQlzYWZlbW9kZV9kZWxheTsKKwlzdHJ1Y3QgdGltZXJfbGlzdAkJc2FmZW1vZGVfdGltZXI7CisJYXRvbWljX3QJCQl3cml0ZXNfcGVuZGluZzsgCisJcmVxdWVzdF9xdWV1ZV90CQkJKnF1ZXVlOwkvKiBmb3IgcGx1Z2dpbmcgLi4uICovCisKKwlzdHJ1Y3QgbGlzdF9oZWFkCQlhbGxfbWRkZXZzOworfTsKKworCitzdGF0aWMgaW5saW5lIHZvaWQgcmRldl9kZWNfcGVuZGluZyhtZGtfcmRldl90ICpyZGV2LCBtZGRldl90ICptZGRldikKK3sKKwlpbnQgZmF1bHR5ID0gcmRldi0+ZmF1bHR5OworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZyZGV2LT5ucl9wZW5kaW5nKSAmJiBmYXVsdHkpCisJCXNldF9iaXQoTURfUkVDT1ZFUllfTkVFREVELCAmbWRkZXYtPnJlY292ZXJ5KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG1kX3N5bmNfYWNjdChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCB1bnNpZ25lZCBsb25nIG5yX3NlY3RvcnMpCit7CisgICAgICAgIGF0b21pY19hZGQobnJfc2VjdG9ycywgJmJkZXYtPmJkX2NvbnRhaW5zLT5iZF9kaXNrLT5zeW5jX2lvKTsKK30KKworc3RydWN0IG1ka19wZXJzb25hbGl0eV9zCit7CisJY2hhciAqbmFtZTsKKwlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKKwlpbnQgKCptYWtlX3JlcXVlc3QpKHJlcXVlc3RfcXVldWVfdCAqcSwgc3RydWN0IGJpbyAqYmlvKTsKKwlpbnQgKCpydW4pKG1kZGV2X3QgKm1kZGV2KTsKKwlpbnQgKCpzdG9wKShtZGRldl90ICptZGRldik7CisJdm9pZCAoKnN0YXR1cykoc3RydWN0IHNlcV9maWxlICpzZXEsIG1kZGV2X3QgKm1kZGV2KTsKKwkvKiBlcnJvcl9oYW5kbGVyIG11c3Qgc2V0IC0+ZmF1bHR5IGFuZCBjbGVhciAtPmluX3N5bmMKKwkgKiBpZiBhcHByb3ByaWF0ZSwgYW5kIHNob3VsZCBhYm9ydCByZWNvdmVyeSBpZiBuZWVkZWQgCisJICovCisJdm9pZCAoKmVycm9yX2hhbmRsZXIpKG1kZGV2X3QgKm1kZGV2LCBtZGtfcmRldl90ICpyZGV2KTsKKwlpbnQgKCpob3RfYWRkX2Rpc2spIChtZGRldl90ICptZGRldiwgbWRrX3JkZXZfdCAqcmRldik7CisJaW50ICgqaG90X3JlbW92ZV9kaXNrKSAobWRkZXZfdCAqbWRkZXYsIGludCBudW1iZXIpOworCWludCAoKnNwYXJlX2FjdGl2ZSkgKG1kZGV2X3QgKm1kZGV2KTsKKwlpbnQgKCpzeW5jX3JlcXVlc3QpKG1kZGV2X3QgKm1kZGV2LCBzZWN0b3JfdCBzZWN0b3JfbnIsIGludCBnb19mYXN0ZXIpOworCWludCAoKnJlc2l6ZSkgKG1kZGV2X3QgKm1kZGV2LCBzZWN0b3JfdCBzZWN0b3JzKTsKKwlpbnQgKCpyZXNoYXBlKSAobWRkZXZfdCAqbWRkZXYsIGludCByYWlkX2Rpc2tzKTsKKwlpbnQgKCpyZWNvbmZpZykgKG1kZGV2X3QgKm1kZGV2LCBpbnQgbGF5b3V0LCBpbnQgY2h1bmtfc2l6ZSk7Cit9OworCisKK3N0YXRpYyBpbmxpbmUgY2hhciAqIG1kbmFtZSAobWRkZXZfdCAqIG1kZGV2KQoreworCXJldHVybiBtZGRldi0+Z2VuZGlzayA/IG1kZGV2LT5nZW5kaXNrLT5kaXNrX25hbWUgOiAibWRYIjsKK30KKworZXh0ZXJuIG1ka19yZGV2X3QgKiBmaW5kX3JkZXZfbnIobWRkZXZfdCAqbWRkZXYsIGludCBucik7CisKKy8qCisgKiBpdGVyYXRlcyB0aHJvdWdoIHNvbWUgcmRldiByaW5nbGlzdC4gSXQncyBzYWZlIHRvIHJlbW92ZSB0aGUKKyAqIGN1cnJlbnQgJ3JkZXYnLiBEb250IHRvdWNoICd0bXAnIHRob3VnaC4KKyAqLworI2RlZmluZSBJVEVSQVRFX1JERVZfR0VORVJJQyhoZWFkLHJkZXYsdG1wKQkJCQlcCisJCQkJCQkJCQlcCisJZm9yICgodG1wKSA9IChoZWFkKS5uZXh0OwkJCQkJXAorCQkocmRldikgPSAobGlzdF9lbnRyeSgodG1wKSwgbWRrX3JkZXZfdCwgc2FtZV9zZXQpKSwJXAorCQkJKHRtcCkgPSAodG1wKS0+bmV4dCwgKHRtcCktPnByZXYgIT0gJihoZWFkKQlcCisJCTsgKQorLyoKKyAqIGl0ZXJhdGVzIHRocm91Z2ggdGhlICdzYW1lIGFycmF5IGRpc2tzJyByaW5nbGlzdAorICovCisjZGVmaW5lIElURVJBVEVfUkRFVihtZGRldixyZGV2LHRtcCkJCQkJCVwKKwlJVEVSQVRFX1JERVZfR0VORVJJQygobWRkZXYpLT5kaXNrcyxyZGV2LHRtcCkKKworLyoKKyAqIEl0ZXJhdGVzIHRocm91Z2ggJ3BlbmRpbmcgUkFJRCBkaXNrcycKKyAqLworI2RlZmluZSBJVEVSQVRFX1JERVZfUEVORElORyhyZGV2LHRtcCkJCQkJCVwKKwlJVEVSQVRFX1JERVZfR0VORVJJQyhwZW5kaW5nX3JhaWRfZGlza3MscmRldix0bXApCisKK3R5cGVkZWYgc3RydWN0IG1ka190aHJlYWRfcyB7CisJdm9pZAkJCSgqcnVuKSAobWRkZXZfdCAqbWRkZXYpOworCW1kZGV2X3QJCQkqbWRkZXY7CisJd2FpdF9xdWV1ZV9oZWFkX3QJd3F1ZXVlOworCXVuc2lnbmVkIGxvbmcgICAgICAgICAgIGZsYWdzOworCXN0cnVjdCBjb21wbGV0aW9uCSpldmVudDsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QJKnRzazsKKwljb25zdCBjaGFyCQkqbmFtZTsKK30gbWRrX3RocmVhZF90OworCisjZGVmaW5lIFRIUkVBRF9XQUtFVVAgIDAKKworI2RlZmluZSBfX3dhaXRfZXZlbnRfbG9ja19pcnEod3EsIGNvbmRpdGlvbiwgbG9jaywgY21kKSAJCVwKK2RvIHsJCQkJCQkJCQlcCisJd2FpdF9xdWV1ZV90IF9fd2FpdDsJCQkJCQlcCisJaW5pdF93YWl0cXVldWVfZW50cnkoJl9fd2FpdCwgY3VycmVudCk7CQkJCVwKKwkJCQkJCQkJCVwKKwlhZGRfd2FpdF9xdWV1ZSgmd3EsICZfX3dhaXQpOwkJCQkJXAorCWZvciAoOzspIHsJCQkJCQkJXAorCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7CQlcCisJCWlmIChjb25kaXRpb24pCQkJCQkJXAorCQkJYnJlYWs7CQkJCQkJXAorCQlzcGluX3VubG9ja19pcnEoJmxvY2spOwkJCQkJXAorCQljbWQ7CQkJCQkJCVwKKwkJc2NoZWR1bGUoKTsJCQkJCQlcCisJCXNwaW5fbG9ja19pcnEoJmxvY2spOwkJCQkJXAorCX0JCQkJCQkJCVwKKwljdXJyZW50LT5zdGF0ZSA9IFRBU0tfUlVOTklORzsJCQkJCVwKKwlyZW1vdmVfd2FpdF9xdWV1ZSgmd3EsICZfX3dhaXQpOwkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIHdhaXRfZXZlbnRfbG9ja19pcnEod3EsIGNvbmRpdGlvbiwgbG9jaywgY21kKSAJCQlcCitkbyB7CQkJCQkJCQkJXAorCWlmIChjb25kaXRpb24pCSAJCQkJCQlcCisJCWJyZWFrOwkJCQkJCQlcCisJX193YWl0X2V2ZW50X2xvY2tfaXJxKHdxLCBjb25kaXRpb24sIGxvY2ssIGNtZCk7CQlcCit9IHdoaWxlICgwKQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yYWlkL21kX3AuaCBiL2luY2x1ZGUvbGludXgvcmFpZC9tZF9wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJhOTVkNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvcmFpZC9tZF9wLmgKQEAgLTAsMCArMSwyMzAgQEAKKy8qCisgICBtZF9wLmggOiBwaHlzaWNhbCBsYXlvdXQgb2YgTGludXggUkFJRCBkZXZpY2VzCisgICAgICAgICAgQ29weXJpZ2h0IChDKSAxOTk2LTk4IEluZ28gTW9sbmFyLCBHYWRpIE94bWFuCisJICAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisgICAKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAoZm9yIGV4YW1wbGUgL3Vzci9zcmMvbGludXgvQ09QWUlORyk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLiAgCisqLworCisjaWZuZGVmIF9NRF9QX0gKKyNkZWZpbmUgX01EX1BfSAorCisvKgorICogUkFJRCBzdXBlcmJsb2NrLgorICoKKyAqIFRoZSBSQUlEIHN1cGVyYmxvY2sgbWFpbnRhaW5zIHNvbWUgc3RhdGlzdGljcyBvbiBlYWNoIFJBSUQgY29uZmlndXJhdGlvbi4KKyAqIEVhY2ggcmVhbCBkZXZpY2UgaW4gdGhlIFJBSUQgc2V0IGNvbnRhaW5zIGl0IG5lYXIgdGhlIGVuZCBvZiB0aGUgZGV2aWNlLgorICogU29tZSBvZiB0aGUgaWRlYXMgYXJlIGNvcGllZCBmcm9tIHRoZSBleHQyZnMgaW1wbGVtZW50YXRpb24uCisgKgorICogV2UgY3VycmVudGx5IHVzZSA0MDk2IGJ5dGVzIGFzIGZvbGxvd3M6CisgKgorICoJd29yZCBvZmZzZXQJZnVuY3Rpb24KKyAqCisgKgkgICAwICAtICAgIDMxCUNvbnN0YW50IGdlbmVyaWMgUkFJRCBkZXZpY2UgaW5mb3JtYXRpb24uCisgKiAgICAgICAgMzIgIC0gICAgNjMgICBHZW5lcmljIHN0YXRlIGluZm9ybWF0aW9uLgorICoJICA2NCAgLSAgIDEyNwlQZXJzb25hbGl0eSBzcGVjaWZpYyBpbmZvcm1hdGlvbi4KKyAqCSAxMjggIC0gICA1MTEJMTIgMzItd29yZHMgZGVzY3JpcHRvcnMgb2YgdGhlIGRpc2tzIGluIHRoZSByYWlkIHNldC4KKyAqCSA1MTIgIC0gICA5MTEJUmVzZXJ2ZWQuCisgKgkgOTEyICAtICAxMDIzCURpc2sgc3BlY2lmaWMgZGVzY3JpcHRvci4KKyAqLworCisvKgorICogSWYgeCBpcyB0aGUgcmVhbCBkZXZpY2Ugc2l6ZSBpbiBieXRlcywgd2UgcmV0dXJuIGFuIGFwcGFyZW50IHNpemUgb2Y6CisgKgorICoJeSA9ICh4ICYgfihNRF9SRVNFUlZFRF9CWVRFUyAtIDEpKSAtIE1EX1JFU0VSVkVEX0JZVEVTCisgKgorICogYW5kIHBsYWNlIHRoZSA0a0Igc3VwZXJibG9jayBhdCBvZmZzZXQgeS4KKyAqLworI2RlZmluZSBNRF9SRVNFUlZFRF9CWVRFUwkJKDY0ICogMTAyNCkKKyNkZWZpbmUgTURfUkVTRVJWRURfU0VDVE9SUwkJKE1EX1JFU0VSVkVEX0JZVEVTIC8gNTEyKQorI2RlZmluZSBNRF9SRVNFUlZFRF9CTE9DS1MJCShNRF9SRVNFUlZFRF9CWVRFUyAvIEJMT0NLX1NJWkUpCisKKyNkZWZpbmUgTURfTkVXX1NJWkVfU0VDVE9SUyh4KQkJKCh4ICYgfihNRF9SRVNFUlZFRF9TRUNUT1JTIC0gMSkpIC0gTURfUkVTRVJWRURfU0VDVE9SUykKKyNkZWZpbmUgTURfTkVXX1NJWkVfQkxPQ0tTKHgpCQkoKHggJiB+KE1EX1JFU0VSVkVEX0JMT0NLUyAtIDEpKSAtIE1EX1JFU0VSVkVEX0JMT0NLUykKKworI2RlZmluZSBNRF9TQl9CWVRFUwkJCTQwOTYKKyNkZWZpbmUgTURfU0JfV09SRFMJCQkoTURfU0JfQllURVMgLyA0KQorI2RlZmluZSBNRF9TQl9CTE9DS1MJCQkoTURfU0JfQllURVMgLyBCTE9DS19TSVpFKQorI2RlZmluZSBNRF9TQl9TRUNUT1JTCQkJKE1EX1NCX0JZVEVTIC8gNTEyKQorCisvKgorICogVGhlIGZvbGxvd2luZyBhcmUgY291bnRlZCBpbiAzMi1iaXQgd29yZHMKKyAqLworI2RlZmluZQlNRF9TQl9HRU5FUklDX09GRlNFVAkJMAorI2RlZmluZSBNRF9TQl9QRVJTT05BTElUWV9PRkZTRVQJNjQKKyNkZWZpbmUgTURfU0JfRElTS1NfT0ZGU0VUCQkxMjgKKyNkZWZpbmUgTURfU0JfREVTQ1JJUFRPUl9PRkZTRVQJCTk5MgorCisjZGVmaW5lIE1EX1NCX0dFTkVSSUNfQ09OU1RBTlRfV09SRFMJMzIKKyNkZWZpbmUgTURfU0JfR0VORVJJQ19TVEFURV9XT1JEUwkzMgorI2RlZmluZSBNRF9TQl9HRU5FUklDX1dPUkRTCQkoTURfU0JfR0VORVJJQ19DT05TVEFOVF9XT1JEUyArIE1EX1NCX0dFTkVSSUNfU1RBVEVfV09SRFMpCisjZGVmaW5lIE1EX1NCX1BFUlNPTkFMSVRZX1dPUkRTCQk2NAorI2RlZmluZSBNRF9TQl9ERVNDUklQVE9SX1dPUkRTCQkzMgorI2RlZmluZSBNRF9TQl9ESVNLUwkJCTI3CisjZGVmaW5lIE1EX1NCX0RJU0tTX1dPUkRTCQkoTURfU0JfRElTS1MqTURfU0JfREVTQ1JJUFRPUl9XT1JEUykKKyNkZWZpbmUgTURfU0JfUkVTRVJWRURfV09SRFMJCSgxMDI0IC0gTURfU0JfR0VORVJJQ19XT1JEUyAtIE1EX1NCX1BFUlNPTkFMSVRZX1dPUkRTIC0gTURfU0JfRElTS1NfV09SRFMgLSBNRF9TQl9ERVNDUklQVE9SX1dPUkRTKQorI2RlZmluZSBNRF9TQl9FUVVBTF9XT1JEUwkJKE1EX1NCX0dFTkVSSUNfV09SRFMgKyBNRF9TQl9QRVJTT05BTElUWV9XT1JEUyArIE1EX1NCX0RJU0tTX1dPUkRTKQorCisvKgorICogRGV2aWNlICJvcGVyYXRpb25hbCIgc3RhdGUgYml0cworICovCisjZGVmaW5lIE1EX0RJU0tfRkFVTFRZCQkwIC8qIGRpc2sgaXMgZmF1bHR5IC8gb3BlcmF0aW9uYWwgKi8KKyNkZWZpbmUgTURfRElTS19BQ1RJVkUJCTEgLyogZGlzayBpcyBydW5uaW5nIG9yIHNwYXJlIGRpc2sgKi8KKyNkZWZpbmUgTURfRElTS19TWU5DCQkyIC8qIGRpc2sgaXMgaW4gc3luYyB3aXRoIHRoZSByYWlkIHNldCAqLworI2RlZmluZSBNRF9ESVNLX1JFTU9WRUQJCTMgLyogZGlzayBpcyBpbiBzeW5jIHdpdGggdGhlIHJhaWQgc2V0ICovCisKK3R5cGVkZWYgc3RydWN0IG1kcF9kZXZpY2VfZGVzY3JpcHRvcl9zIHsKKwlfX3UzMiBudW1iZXI7CQkvKiAwIERldmljZSBudW1iZXIgaW4gdGhlIGVudGlyZSBzZXQJICAgICAgKi8KKwlfX3UzMiBtYWpvcjsJCS8qIDEgRGV2aWNlIG1ham9yIG51bWJlcgkJICAgICAgKi8KKwlfX3UzMiBtaW5vcjsJCS8qIDIgRGV2aWNlIG1pbm9yIG51bWJlcgkJICAgICAgKi8KKwlfX3UzMiByYWlkX2Rpc2s7CS8qIDMgVGhlIHJvbGUgb2YgdGhlIGRldmljZSBpbiB0aGUgcmFpZCBzZXQgICAqLworCV9fdTMyIHN0YXRlOwkJLyogNCBPcGVyYXRpb25hbCBzdGF0ZQkJCSAgICAgICovCisJX191MzIgcmVzZXJ2ZWRbTURfU0JfREVTQ1JJUFRPUl9XT1JEUyAtIDVdOworfSBtZHBfZGlza190OworCisjZGVmaW5lIE1EX1NCX01BR0lDCQkweGE5MmI0ZWZjCisKKy8qCisgKiBTdXBlcmJsb2NrIHN0YXRlIGJpdHMKKyAqLworI2RlZmluZSBNRF9TQl9DTEVBTgkJMAorI2RlZmluZSBNRF9TQl9FUlJPUlMJCTEKKwordHlwZWRlZiBzdHJ1Y3QgbWRwX3N1cGVyYmxvY2tfcyB7CisJLyoKKwkgKiBDb25zdGFudCBnZW5lcmljIGluZm9ybWF0aW9uCisJICovCisJX191MzIgbWRfbWFnaWM7CQkvKiAgMCBNRCBpZGVudGlmaWVyIAkJCSAgICAgICovCisJX191MzIgbWFqb3JfdmVyc2lvbjsJLyogIDEgbWFqb3IgdmVyc2lvbiB0byB3aGljaCB0aGUgc2V0IGNvbmZvcm1zICovCisJX191MzIgbWlub3JfdmVyc2lvbjsJLyogIDIgbWlub3IgdmVyc2lvbiAuLi4JCQkgICAgICAqLworCV9fdTMyIHBhdGNoX3ZlcnNpb247CS8qICAzIHBhdGNobGV2ZWwgdmVyc2lvbiAuLi4JCSAgICAgICovCisJX191MzIgZ3ZhbGlkX3dvcmRzOwkvKiAgNCBOdW1iZXIgb2YgdXNlZCB3b3JkcyBpbiB0aGlzIHNlY3Rpb24gICAgKi8KKwlfX3UzMiBzZXRfdXVpZDA7CS8qICA1IFJhaWQgc2V0IGlkZW50aWZpZXIJCSAgICAgICovCisJX191MzIgY3RpbWU7CQkvKiAgNiBDcmVhdGlvbiB0aW1lCQkJICAgICAgKi8KKwlfX3UzMiBsZXZlbDsJCS8qICA3IFJhaWQgcGVyc29uYWxpdHkJCQkgICAgICAqLworCV9fdTMyIHNpemU7CQkvKiAgOCBBcHBhcmVudCBzaXplIG9mIGVhY2ggaW5kaXZpZHVhbCBkaXNrICAgKi8KKwlfX3UzMiBucl9kaXNrczsJCS8qICA5IHRvdGFsIGRpc2tzIGluIHRoZSByYWlkIHNldAkgICAgICAqLworCV9fdTMyIHJhaWRfZGlza3M7CS8qIDEwIGRpc2tzIGluIGEgZnVsbHkgZnVuY3Rpb25hbCByYWlkIHNldCAgICAqLworCV9fdTMyIG1kX21pbm9yOwkJLyogMTEgcHJlZmVycmVkIE1EIG1pbm9yIGRldmljZSBudW1iZXIJICAgICAgKi8KKwlfX3UzMiBub3RfcGVyc2lzdGVudDsJLyogMTIgZG9lcyBpdCBoYXZlIGEgcGVyc2lzdGVudCBzdXBlcmJsb2NrICAgICovCisJX191MzIgc2V0X3V1aWQxOwkvKiAxMyBSYWlkIHNldCBpZGVudGlmaWVyICMyCQkgICAgICAqLworCV9fdTMyIHNldF91dWlkMjsJLyogMTQgUmFpZCBzZXQgaWRlbnRpZmllciAjMwkJICAgICAgKi8KKwlfX3UzMiBzZXRfdXVpZDM7CS8qIDE1IFJhaWQgc2V0IGlkZW50aWZpZXIgIzQJCSAgICAgICovCisJX191MzIgZ3N0YXRlX2NyZXNlcnZlZFtNRF9TQl9HRU5FUklDX0NPTlNUQU5UX1dPUkRTIC0gMTZdOworCisJLyoKKwkgKiBHZW5lcmljIHN0YXRlIGluZm9ybWF0aW9uCisJICovCisJX191MzIgdXRpbWU7CQkvKiAgMCBTdXBlcmJsb2NrIHVwZGF0ZSB0aW1lCQkgICAgICAqLworCV9fdTMyIHN0YXRlOwkJLyogIDEgU3RhdGUgYml0cyAoY2xlYW4sIC4uLikJCSAgICAgICovCisJX191MzIgYWN0aXZlX2Rpc2tzOwkvKiAgMiBOdW1iZXIgb2YgY3VycmVudGx5IGFjdGl2ZSBkaXNrcwkgICAgICAqLworCV9fdTMyIHdvcmtpbmdfZGlza3M7CS8qICAzIE51bWJlciBvZiB3b3JraW5nIGRpc2tzCQkgICAgICAqLworCV9fdTMyIGZhaWxlZF9kaXNrczsJLyogIDQgTnVtYmVyIG9mIGZhaWxlZCBkaXNrcwkJICAgICAgKi8KKwlfX3UzMiBzcGFyZV9kaXNrczsJLyogIDUgTnVtYmVyIG9mIHNwYXJlIGRpc2tzCQkgICAgICAqLworCV9fdTMyIHNiX2NzdW07CQkvKiAgNiBjaGVja3N1bSBvZiB0aGUgd2hvbGUgc3VwZXJibG9jayAgICAgICAgKi8KKyNpZmRlZiBfX0JJR19FTkRJQU4KKwlfX3UzMiBldmVudHNfaGk7CS8qICA3IGhpZ2gtb3JkZXIgb2Ygc3VwZXJibG9jayB1cGRhdGUgY291bnQgICAqLworCV9fdTMyIGV2ZW50c19sbzsJLyogIDggbG93LW9yZGVyIG9mIHN1cGVyYmxvY2sgdXBkYXRlIGNvdW50ICAgICovCisJX191MzIgY3BfZXZlbnRzX2hpOwkvKiAgOSBoaWdoLW9yZGVyIG9mIGNoZWNrcG9pbnQgdXBkYXRlIGNvdW50ICAgKi8KKwlfX3UzMiBjcF9ldmVudHNfbG87CS8qIDEwIGxvdy1vcmRlciBvZiBjaGVja3BvaW50IHVwZGF0ZSBjb3VudCAgICAqLworI2Vsc2UKKwlfX3UzMiBldmVudHNfbG87CS8qICA3IGxvdy1vcmRlciBvZiBzdXBlcmJsb2NrIHVwZGF0ZSBjb3VudCAgICAqLworCV9fdTMyIGV2ZW50c19oaTsJLyogIDggaGlnaC1vcmRlciBvZiBzdXBlcmJsb2NrIHVwZGF0ZSBjb3VudCAgICovCisJX191MzIgY3BfZXZlbnRzX2xvOwkvKiAgOSBsb3ctb3JkZXIgb2YgY2hlY2twb2ludCB1cGRhdGUgY291bnQgICAgKi8KKwlfX3UzMiBjcF9ldmVudHNfaGk7CS8qIDEwIGhpZ2gtb3JkZXIgb2YgY2hlY2twb2ludCB1cGRhdGUgY291bnQgICAqLworI2VuZGlmCisJX191MzIgcmVjb3ZlcnlfY3A7CS8qIDExIHJlY292ZXJ5IGNoZWNrcG9pbnQgc2VjdG9yIGNvdW50CSAgICAgICovCisJX191MzIgZ3N0YXRlX3NyZXNlcnZlZFtNRF9TQl9HRU5FUklDX1NUQVRFX1dPUkRTIC0gMTJdOworCisJLyoKKwkgKiBQZXJzb25hbGl0eSBpbmZvcm1hdGlvbgorCSAqLworCV9fdTMyIGxheW91dDsJCS8qICAwIHRoZSBhcnJheSdzIHBoeXNpY2FsIGxheW91dAkgICAgICAqLworCV9fdTMyIGNodW5rX3NpemU7CS8qICAxIGNodW5rIHNpemUgaW4gYnl0ZXMJCSAgICAgICovCisJX191MzIgcm9vdF9wdjsJCS8qICAyIExWIHJvb3QgUFYgKi8KKwlfX3UzMiByb290X2Jsb2NrOwkvKiAgMyBMViByb290IGJsb2NrICovCisJX191MzIgcHN0YXRlX3Jlc2VydmVkW01EX1NCX1BFUlNPTkFMSVRZX1dPUkRTIC0gNF07CisKKwkvKgorCSAqIERpc2tzIGluZm9ybWF0aW9uCisJICovCisJbWRwX2Rpc2tfdCBkaXNrc1tNRF9TQl9ESVNLU107CisKKwkvKgorCSAqIFJlc2VydmVkCisJICovCisJX191MzIgcmVzZXJ2ZWRbTURfU0JfUkVTRVJWRURfV09SRFNdOworCisJLyoKKwkgKiBBY3RpdmUgZGVzY3JpcHRvcgorCSAqLworCW1kcF9kaXNrX3QgdGhpc19kaXNrOworCit9IG1kcF9zdXBlcl90OworCitzdGF0aWMgaW5saW5lIF9fdTY0IG1kX2V2ZW50KG1kcF9zdXBlcl90ICpzYikgeworCV9fdTY0IGV2ID0gc2ItPmV2ZW50c19oaTsKKwlyZXR1cm4gKGV2PDwzMil8IHNiLT5ldmVudHNfbG87Cit9CisKKy8qCisgKiBUaGUgdmVyc2lvbi0xIHN1cGVyYmxvY2sgOgorICogQWxsIG51bWVyaWMgZmllbGRzIGFyZSBsaXR0bGUtZW5kaWFuLgorICoKKyAqIHRvdGFsIHNpemU6IDI1NiBieXRlcyBwbHVzIDIgcGVyIGRldmljZS4KKyAqICAxSyBhbGxvd3MgMzg0IGRldmljZXMuCisgKi8KK3N0cnVjdCBtZHBfc3VwZXJibG9ja18xIHsKKwkvKiBjb25zdGFudCBhcnJheSBpbmZvcm1hdGlvbiAtIDEyOCBieXRlcyAqLworCV9fdTMyCW1hZ2ljOwkJLyogTURfU0JfTUFHSUM6IDB4YTkyYjRlZmMgLSBsaXR0bGUgZW5kaWFuICovCisJX191MzIJbWFqb3JfdmVyc2lvbjsJLyogMSAqLworCV9fdTMyCWZlYXR1cmVfbWFwOwkvKiAwIGZvciBub3cgKi8KKwlfX3UzMglwYWQwOwkJLyogYWx3YXlzIHNldCB0byAwIHdoZW4gd3JpdGluZyAqLworCisJX191OAlzZXRfdXVpZFsxNl07CS8qIHVzZXItc3BhY2UgZ2VuZXJhdGVkLiAqLworCWNoYXIJc2V0X25hbWVbMzJdOwkvKiBzZXQgYW5kIGludGVycHJldGVkIGJ5IHVzZXItc3BhY2UgKi8KKworCV9fdTY0CWN0aW1lOwkJLyogbG8gNDAgYml0cyBhcmUgc2Vjb25kcywgdG9wIDI0IGFyZSBtaWNyb3NlY29uZHMgb3IgMCovCisJX191MzIJbGV2ZWw7CQkvKiAtNCAobXVsdGlwYXRoKSwgLTEgKGxpbmVhciksIDAsMSw0LDUgKi8KKwlfX3UzMglsYXlvdXQ7CQkvKiBvbmx5IGZvciByYWlkNSBjdXJyZW50bHkgKi8KKwlfX3U2NAlzaXplOwkJLyogdXNlZCBzaXplIG9mIGNvbXBvbmVudCBkZXZpY2VzLCBpbiA1MTJieXRlIHNlY3RvcnMgKi8KKworCV9fdTMyCWNodW5rc2l6ZTsJLyogaW4gNTEyYnl0ZSBzZWN0b3JzICovCisJX191MzIJcmFpZF9kaXNrczsKKwlfX3U4CXBhZDFbMTI4LTk2XTsJLyogc2V0IHRvIDAgd2hlbiB3cml0dGVuICovCisKKwkvKiBjb25zdGFudCB0aGlzLWRldmljZSBpbmZvcm1hdGlvbiAtIDY0IGJ5dGVzICovCisJX191NjQJZGF0YV9vZmZzZXQ7CS8qIHNlY3RvciBzdGFydCBvZiBkYXRhLCBvZnRlbiAwICovCisJX191NjQJZGF0YV9zaXplOwkvKiBzZWN0b3JzIGluIHRoaXMgZGV2aWNlIHRoYXQgY2FuIGJlIHVzZWQgZm9yIGRhdGEgKi8KKwlfX3U2NAlzdXBlcl9vZmZzZXQ7CS8qIHNlY3RvciBzdGFydCBvZiB0aGlzIHN1cGVyYmxvY2sgKi8KKwlfX3U2NAlyZWNvdmVyeV9vZmZzZXQ7Lyogc2VjdG9ycyBiZWZvcmUgdGhpcyBvZmZzZXQgKGZyb20gZGF0YV9vZmZzZXQpIGhhdmUgYmVlbiByZWNvdmVyZWQgKi8KKwlfX3UzMglkZXZfbnVtYmVyOwkvKiBwZXJtYW5lbnQgaWRlbnRpZmllciBvZiB0aGlzICBkZXZpY2UgLSBub3Qgcm9sZSBpbiByYWlkICovCisJX191MzIJY250X2NvcnJlY3RlZF9yZWFkOyAvKiBudW1iZXIgb2YgcmVhZCBlcnJvcnMgdGhhdCB3ZXJlIGNvcnJlY3RlZCBieSByZS13cml0aW5nICovCisJX191OAlkZXZpY2VfdXVpZFsxNl07IC8qIHVzZXItc3BhY2Ugc2V0YWJsZSwgaWdub3JlZCBieSBrZXJuZWwgKi8KKwlfX3U4CXBhZDJbNjQtNTZdOwkvKiBzZXQgdG8gMCB3aGVuIHdyaXRpbmcgKi8KKworCS8qIGFycmF5IHN0YXRlIGluZm9ybWF0aW9uIC0gNjQgYnl0ZXMgKi8KKwlfX3U2NAl1dGltZTsJCS8qIDQwIGJpdHMgc2Vjb25kLCAyNCBidGVzIG1pY3Jvc2Vjb25kcyAqLworCV9fdTY0CWV2ZW50czsJCS8qIGluY3JlbWVudGVkIHdoZW4gc3VwZXJibG9jayB1cGRhdGVkICovCisJX191NjQJcmVzeW5jX29mZnNldDsJLyogZGF0YSBiZWZvcmUgdGhpcyBvZmZzZXQgKGZyb20gZGF0YV9vZmZzZXQpIGtub3duIHRvIGJlIGluIHN5bmMgKi8KKwlfX3UzMglzYl9jc3VtOwkvKiBjaGVja3N1bSB1cHRvIGRldnNbbWF4X2Rldl0gKi8KKwlfX3UzMgltYXhfZGV2OwkvKiBzaXplIG9mIGRldnNbXSBhcnJheSB0byBjb25zaWRlciAqLworCV9fdTgJcGFkM1s2NC0zMl07CS8qIHNldCB0byAwIHdoZW4gd3JpdGluZyAqLworCisJLyogZGV2aWNlIHN0YXRlIGluZm9ybWF0aW9uLiBJbmRleGVkIGJ5IGRldl9udW1iZXIuCisJICogMiBieXRlcyBwZXIgZGV2aWNlCisJICogTm90ZSB0aGVyZSBhcmUgbm8gcGVyLWRldmljZSBzdGF0ZSBmbGFncy4gU3RhdGUgaW5mb3JtYXRpb24gaXMgcm9sbGVkCisJICogaW50byB0aGUgJ3JvbGVzJyB2YWx1ZS4gIElmIGEgZGV2aWNlIGlzIHNwYXJlIG9yIGZhdWx0eSwgdGhlbiBpdCBkb2Vzbid0CisJICogaGF2ZSBhIG1lYW5pbmdmdWwgcm9sZS4KKwkgKi8KKwlfX3UxNglkZXZfcm9sZXNbMF07CS8qIHJvbGUgaW4gYXJyYXksIG9yIDB4ZmZmZiBmb3IgYSBzcGFyZSwgb3IgMHhmZmZlIGZvciBmYXVsdHkgKi8KK307CisKKyNlbmRpZiAKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yYWlkL21kX3UuaCBiL2luY2x1ZGUvbGludXgvcmFpZC9tZF91LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJkZjVjMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvcmFpZC9tZF91LmgKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisgICBtZF91LmggOiB1c2VyIDw9PiBrZXJuZWwgQVBJIGJldHdlZW4gTGludXggcmFpZHRvb2xzIGFuZCBSQUlEIGRyaXZlcnMKKyAgICAgICAgICBDb3B5cmlnaHQgKEMpIDE5OTggSW5nbyBNb2xuYXIKKwkgIAorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIAorICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIChmb3IgZXhhbXBsZSAvdXNyL3NyYy9saW51eC9DT1BZSU5HKTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuICAKKyovCisKKyNpZm5kZWYgX01EX1VfSAorI2RlZmluZSBfTURfVV9ICisKKy8qIGlvY3RscyAqLworCisvKiBzdGF0dXMgKi8KKyNkZWZpbmUgUkFJRF9WRVJTSU9OCQlfSU9SIChNRF9NQUpPUiwgMHgxMCwgbWR1X3ZlcnNpb25fdCkKKyNkZWZpbmUgR0VUX0FSUkFZX0lORk8JCV9JT1IgKE1EX01BSk9SLCAweDExLCBtZHVfYXJyYXlfaW5mb190KQorI2RlZmluZSBHRVRfRElTS19JTkZPCQlfSU9SIChNRF9NQUpPUiwgMHgxMiwgbWR1X2Rpc2tfaW5mb190KQorI2RlZmluZSBQUklOVF9SQUlEX0RFQlVHCV9JTyAoTURfTUFKT1IsIDB4MTMpCisjZGVmaW5lIFJBSURfQVVUT1JVTgkJX0lPIChNRF9NQUpPUiwgMHgxNCkKKworLyogY29uZmlndXJhdGlvbiAqLworI2RlZmluZSBDTEVBUl9BUlJBWQkJX0lPIChNRF9NQUpPUiwgMHgyMCkKKyNkZWZpbmUgQUREX05FV19ESVNLCQlfSU9XIChNRF9NQUpPUiwgMHgyMSwgbWR1X2Rpc2tfaW5mb190KQorI2RlZmluZSBIT1RfUkVNT1ZFX0RJU0sJCV9JTyAoTURfTUFKT1IsIDB4MjIpCisjZGVmaW5lIFNFVF9BUlJBWV9JTkZPCQlfSU9XIChNRF9NQUpPUiwgMHgyMywgbWR1X2FycmF5X2luZm9fdCkKKyNkZWZpbmUgU0VUX0RJU0tfSU5GTwkJX0lPIChNRF9NQUpPUiwgMHgyNCkKKyNkZWZpbmUgV1JJVEVfUkFJRF9JTkZPCQlfSU8gKE1EX01BSk9SLCAweDI1KQorI2RlZmluZSBVTlBST1RFQ1RfQVJSQVkJCV9JTyAoTURfTUFKT1IsIDB4MjYpCisjZGVmaW5lIFBST1RFQ1RfQVJSQVkJCV9JTyAoTURfTUFKT1IsIDB4MjcpCisjZGVmaW5lIEhPVF9BRERfRElTSwkJX0lPIChNRF9NQUpPUiwgMHgyOCkKKyNkZWZpbmUgU0VUX0RJU0tfRkFVTFRZCQlfSU8gKE1EX01BSk9SLCAweDI5KQorI2RlZmluZSBIT1RfR0VORVJBVEVfRVJST1IJX0lPIChNRF9NQUpPUiwgMHgyYSkKKworLyogdXNhZ2UgKi8KKyNkZWZpbmUgUlVOX0FSUkFZCQlfSU9XIChNRF9NQUpPUiwgMHgzMCwgbWR1X3BhcmFtX3QpCisjZGVmaW5lIFNUQVJUX0FSUkFZCQlfSU8gKE1EX01BSk9SLCAweDMxKQorI2RlZmluZSBTVE9QX0FSUkFZCQlfSU8gKE1EX01BSk9SLCAweDMyKQorI2RlZmluZSBTVE9QX0FSUkFZX1JPCQlfSU8gKE1EX01BSk9SLCAweDMzKQorI2RlZmluZSBSRVNUQVJUX0FSUkFZX1JXCV9JTyAoTURfTUFKT1IsIDB4MzQpCisKK3R5cGVkZWYgc3RydWN0IG1kdV92ZXJzaW9uX3MgeworCWludCBtYWpvcjsKKwlpbnQgbWlub3I7CisJaW50IHBhdGNobGV2ZWw7Cit9IG1kdV92ZXJzaW9uX3Q7CisKK3R5cGVkZWYgc3RydWN0IG1kdV9hcnJheV9pbmZvX3MgeworCS8qCisJICogR2VuZXJpYyBjb25zdGFudCBpbmZvcm1hdGlvbgorCSAqLworCWludCBtYWpvcl92ZXJzaW9uOworCWludCBtaW5vcl92ZXJzaW9uOworCWludCBwYXRjaF92ZXJzaW9uOworCWludCBjdGltZTsKKwlpbnQgbGV2ZWw7CisJaW50IHNpemU7CisJaW50IG5yX2Rpc2tzOworCWludCByYWlkX2Rpc2tzOworCWludCBtZF9taW5vcjsKKwlpbnQgbm90X3BlcnNpc3RlbnQ7CisKKwkvKgorCSAqIEdlbmVyaWMgc3RhdGUgaW5mb3JtYXRpb24KKwkgKi8KKwlpbnQgdXRpbWU7CQkvKiAgMCBTdXBlcmJsb2NrIHVwZGF0ZSB0aW1lCQkgICAgICAqLworCWludCBzdGF0ZTsJCS8qICAxIFN0YXRlIGJpdHMgKGNsZWFuLCAuLi4pCQkgICAgICAqLworCWludCBhY3RpdmVfZGlza3M7CS8qICAyIE51bWJlciBvZiBjdXJyZW50bHkgYWN0aXZlIGRpc2tzCSAgICAgICovCisJaW50IHdvcmtpbmdfZGlza3M7CS8qICAzIE51bWJlciBvZiB3b3JraW5nIGRpc2tzCQkgICAgICAqLworCWludCBmYWlsZWRfZGlza3M7CS8qICA0IE51bWJlciBvZiBmYWlsZWQgZGlza3MJCSAgICAgICovCisJaW50IHNwYXJlX2Rpc2tzOwkvKiAgNSBOdW1iZXIgb2Ygc3BhcmUgZGlza3MJCSAgICAgICovCisKKwkvKgorCSAqIFBlcnNvbmFsaXR5IGluZm9ybWF0aW9uCisJICovCisJaW50IGxheW91dDsJCS8qICAwIHRoZSBhcnJheSdzIHBoeXNpY2FsIGxheW91dAkgICAgICAqLworCWludCBjaHVua19zaXplOwkvKiAgMSBjaHVuayBzaXplIGluIGJ5dGVzCQkgICAgICAqLworCit9IG1kdV9hcnJheV9pbmZvX3Q7CisKK3R5cGVkZWYgc3RydWN0IG1kdV9kaXNrX2luZm9fcyB7CisJLyoKKwkgKiBjb25maWd1cmF0aW9uL3N0YXR1cyBvZiBvbmUgcGFydGljdWxhciBkaXNrCisJICovCisJaW50IG51bWJlcjsKKwlpbnQgbWFqb3I7CisJaW50IG1pbm9yOworCWludCByYWlkX2Rpc2s7CisJaW50IHN0YXRlOworCit9IG1kdV9kaXNrX2luZm9fdDsKKwordHlwZWRlZiBzdHJ1Y3QgbWR1X3N0YXJ0X2luZm9fcyB7CisJLyoKKwkgKiBjb25maWd1cmF0aW9uL3N0YXR1cyBvZiBvbmUgcGFydGljdWxhciBkaXNrCisJICovCisJaW50IG1ham9yOworCWludCBtaW5vcjsKKwlpbnQgcmFpZF9kaXNrOworCWludCBzdGF0ZTsKKworfSBtZHVfc3RhcnRfaW5mb190OworCit0eXBlZGVmIHN0cnVjdCBtZHVfcGFyYW1fcworeworCWludAkJCXBlcnNvbmFsaXR5OwkvKiAxLDIsMyw0ICovCisJaW50CQkJY2h1bmtfc2l6ZTsJLyogaW4gYnl0ZXMgKi8KKwlpbnQJCQltYXhfZmF1bHQ7CS8qIHVudXNlZCBmb3Igbm93ICovCit9IG1kdV9wYXJhbV90OworCisjZW5kaWYgCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmFpZC9tdWx0aXBhdGguaCBiL2luY2x1ZGUvbGludXgvcmFpZC9tdWx0aXBhdGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjUzZmMxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9yYWlkL211bHRpcGF0aC5oCkBAIC0wLDAgKzEsNDIgQEAKKyNpZm5kZWYgX01VTFRJUEFUSF9ICisjZGVmaW5lIF9NVUxUSVBBVEhfSAorCisjaW5jbHVkZSA8bGludXgvcmFpZC9tZC5oPgorCitzdHJ1Y3QgbXVsdGlwYXRoX2luZm8geworCW1ka19yZGV2X3QJKnJkZXY7Cit9OworCitzdHJ1Y3QgbXVsdGlwYXRoX3ByaXZhdGVfZGF0YSB7CisJbWRkZXZfdAkJCSptZGRldjsKKwlzdHJ1Y3QgbXVsdGlwYXRoX2luZm8JKm11bHRpcGF0aHM7CisJaW50CQkJcmFpZF9kaXNrczsKKwlpbnQJCQl3b3JraW5nX2Rpc2tzOworCXNwaW5sb2NrX3QJCWRldmljZV9sb2NrOworCXN0cnVjdCBsaXN0X2hlYWQJcmV0cnlfbGlzdDsKKworCW1lbXBvb2xfdAkJKnBvb2w7Cit9OworCit0eXBlZGVmIHN0cnVjdCBtdWx0aXBhdGhfcHJpdmF0ZV9kYXRhIG11bHRpcGF0aF9jb25mX3Q7CisKKy8qCisgKiB0aGlzIGlzIHRoZSBvbmx5IHBvaW50IGluIHRoZSBSQUlEIGNvZGUgd2hlcmUgd2UgdmlvbGF0ZQorICogQyB0eXBlIHNhZmV0eS4gbWRkZXYtPnByaXZhdGUgaXMgYW4gJ29wYXF1ZScgcG9pbnRlci4KKyAqLworI2RlZmluZSBtZGRldl90b19jb25mKG1kZGV2KSAoKG11bHRpcGF0aF9jb25mX3QgKikgbWRkZXYtPnByaXZhdGUpCisKKy8qCisgKiB0aGlzIGlzIG91ciAncHJpdmF0ZScgJ2NvbGxlY3RpdmUnIE1VTFRJUEFUSCBidWZmZXIgaGVhZC4KKyAqIGl0IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHdoYXQga2luZCBvZiBJTyBvcGVyYXRpb25zIHdlcmUgc3RhcnRlZAorICogZm9yIHRoaXMgTVVMVElQQVRIIG9wZXJhdGlvbiwgYW5kIGFib3V0IHRoZWlyIHN0YXR1czoKKyAqLworCitzdHJ1Y3QgbXVsdGlwYXRoX2JoIHsKKwltZGRldl90CQkJKm1kZGV2OworCXN0cnVjdCBiaW8JCSptYXN0ZXJfYmlvOworCXN0cnVjdCBiaW8JCWJpbzsKKwlpbnQJCQlwYXRoOworCXN0cnVjdCBsaXN0X2hlYWQJcmV0cnlfbGlzdDsKK307CisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmFpZC9yYWlkMC5oIGIvaW5jbHVkZS9saW51eC9yYWlkL3JhaWQwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIyZGRhMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvcmFpZC9yYWlkMC5oCkBAIC0wLDAgKzEsMzAgQEAKKyNpZm5kZWYgX1JBSUQwX0gKKyNkZWZpbmUgX1JBSUQwX0gKKworI2luY2x1ZGUgPGxpbnV4L3JhaWQvbWQuaD4KKworc3RydWN0IHN0cmlwX3pvbmUKK3sKKwlzZWN0b3JfdCB6b25lX29mZnNldDsJLyogWm9uZSBvZmZzZXQgaW4gbWRfZGV2ICovCisJc2VjdG9yX3QgZGV2X29mZnNldDsJLyogWm9uZSBvZmZzZXQgaW4gcmVhbCBkZXYgKi8KKwlzZWN0b3JfdCBzaXplOwkJLyogWm9uZSBzaXplICovCisJaW50IG5iX2RldjsJCS8qICMgb2YgZGV2aWNlcyBhdHRhY2hlZCB0byB0aGUgem9uZSAqLworCW1ka19yZGV2X3QgKipkZXY7CS8qIERldmljZXMgYXR0YWNoZWQgdG8gdGhlIHpvbmUgKi8KK307CisKK3N0cnVjdCByYWlkMF9wcml2YXRlX2RhdGEKK3sKKwlzdHJ1Y3Qgc3RyaXBfem9uZSAqKmhhc2hfdGFibGU7IC8qIFRhYmxlIG9mIGluZGV4ZXMgaW50byBzdHJpcF96b25lICovCisJc3RydWN0IHN0cmlwX3pvbmUgKnN0cmlwX3pvbmU7CisJbWRrX3JkZXZfdCAqKmRldmxpc3Q7IC8qIGxpc3RzIG9mIHJkZXZzLCBwb2ludGVkIHRvIGJ5IHN0cmlwX3pvbmUtPmRldiAqLworCWludCBucl9zdHJpcF96b25lczsKKworCXNlY3Rvcl90IGhhc2hfc3BhY2luZzsKKwlpbnQgcHJlc2hpZnQ7CQkJLyogc2hpZnQgdGhpcyBiZWZvcmUgZGl2aWRlIGJ5IGhhc2hfc3BhY2luZyAqLworfTsKKwordHlwZWRlZiBzdHJ1Y3QgcmFpZDBfcHJpdmF0ZV9kYXRhIHJhaWQwX2NvbmZfdDsKKworI2RlZmluZSBtZGRldl90b19jb25mKG1kZGV2KSAoKHJhaWQwX2NvbmZfdCAqKSBtZGRldi0+cHJpdmF0ZSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JhaWQvcmFpZDEuaCBiL2luY2x1ZGUvbGludXgvcmFpZC9yYWlkMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiYmZkZDkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3JhaWQvcmFpZDEuaApAQCAtMCwwICsxLDk4IEBACisjaWZuZGVmIF9SQUlEMV9ICisjZGVmaW5lIF9SQUlEMV9ICisKKyNpbmNsdWRlIDxsaW51eC9yYWlkL21kLmg+CisKK3R5cGVkZWYgc3RydWN0IG1pcnJvcl9pbmZvIG1pcnJvcl9pbmZvX3Q7CisKK3N0cnVjdCBtaXJyb3JfaW5mbyB7CisJbWRrX3JkZXZfdAkqcmRldjsKKwlzZWN0b3JfdAloZWFkX3Bvc2l0aW9uOworfTsKKworLyoKKyAqIG1lbW9yeSBwb29scyBuZWVkIGEgcG9pbnRlciB0byB0aGUgbWRkZXYsIHNvIHRoZXkgY2FuIGZvcmNlIGFuIHVucGx1ZworICogd2hlbiBtZW1vcnkgaXMgdGlnaHQsIGFuZCBhIGNvdW50IG9mIHRoZSBudW1iZXIgb2YgZHJpdmVzIHRoYXQgdGhlCisgKiBwb29sIHdhcyBhbGxvY2F0ZWQgZm9yLCBzbyB0aGV5IGtub3cgaG93IG11Y2ggdG8gYWxsb2NhdGUgYW5kIGZyZWUuCisgKiBtZGRldi0+cmFpZF9kaXNrcyBjYW5ub3QgYmUgdXNlZCwgYXMgaXQgY2FuIGNoYW5nZSB3aGlsZSBhIHBvb2wgaXMgYWN0aXZlCisgKiBUaGVzZSB0d28gZGF0dW1zIGFyZSBzdG9yZWQgaW4gYSBrbWFsbG9jZWQgc3RydWN0LgorICovCisKK3N0cnVjdCBwb29sX2luZm8geworCW1kZGV2X3QgKm1kZGV2OworCWludAlyYWlkX2Rpc2tzOworfTsKKworCit0eXBlZGVmIHN0cnVjdCByMWJpb19zIHIxYmlvX3Q7CisKK3N0cnVjdCByMV9wcml2YXRlX2RhdGFfcyB7CisJbWRkZXZfdAkJCSptZGRldjsKKwltaXJyb3JfaW5mb190CQkqbWlycm9yczsKKwlpbnQJCQlyYWlkX2Rpc2tzOworCWludAkJCXdvcmtpbmdfZGlza3M7CisJaW50CQkJbGFzdF91c2VkOworCXNlY3Rvcl90CQluZXh0X3NlcV9zZWN0OworCXNwaW5sb2NrX3QJCWRldmljZV9sb2NrOworCisJc3RydWN0IGxpc3RfaGVhZAlyZXRyeV9saXN0OworCS8qIGZvciB1c2Ugd2hlbiBzeW5jaW5nIG1pcnJvcnM6ICovCisKKwlzcGlubG9ja190CQlyZXN5bmNfbG9jazsKKwlpbnQgbnJfcGVuZGluZzsKKwlpbnQgYmFycmllcjsKKwlzZWN0b3JfdAkJbmV4dF9yZXN5bmM7CisKKwl3YWl0X3F1ZXVlX2hlYWRfdAl3YWl0X2lkbGU7CisJd2FpdF9xdWV1ZV9oZWFkX3QJd2FpdF9yZXN1bWU7CisKKwlzdHJ1Y3QgcG9vbF9pbmZvCSpwb29saW5mbzsKKworCW1lbXBvb2xfdCAqcjFiaW9fcG9vbDsKKwltZW1wb29sX3QgKnIxYnVmX3Bvb2w7Cit9OworCit0eXBlZGVmIHN0cnVjdCByMV9wcml2YXRlX2RhdGFfcyBjb25mX3Q7CisKKy8qCisgKiB0aGlzIGlzIHRoZSBvbmx5IHBvaW50IGluIHRoZSBSQUlEIGNvZGUgd2hlcmUgd2UgdmlvbGF0ZQorICogQyB0eXBlIHNhZmV0eS4gbWRkZXYtPnByaXZhdGUgaXMgYW4gJ29wYXF1ZScgcG9pbnRlci4KKyAqLworI2RlZmluZSBtZGRldl90b19jb25mKG1kZGV2KSAoKGNvbmZfdCAqKSBtZGRldi0+cHJpdmF0ZSkKKworLyoKKyAqIHRoaXMgaXMgb3VyICdwcml2YXRlJyBSQUlEMSBiaW8uCisgKgorICogaXQgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBraW5kIG9mIElPIG9wZXJhdGlvbnMgd2VyZSBzdGFydGVkCisgKiBmb3IgdGhpcyBSQUlEMSBvcGVyYXRpb24sIGFuZCBhYm91dCB0aGVpciBzdGF0dXM6CisgKi8KKworc3RydWN0IHIxYmlvX3MgeworCWF0b21pY190CQlyZW1haW5pbmc7IC8qICdoYXZlIHdlIGZpbmlzaGVkJyBjb3VudCwKKwkJCQkJICAgICogdXNlZCBmcm9tIElSUSBoYW5kbGVycworCQkJCQkgICAgKi8KKwlzZWN0b3JfdAkJc2VjdG9yOworCWludAkJCXNlY3RvcnM7CisJdW5zaWduZWQgbG9uZwkJc3RhdGU7CisJbWRkZXZfdAkJCSptZGRldjsKKwkvKgorCSAqIG9yaWdpbmFsIGJpbyBnb2luZyB0byAvZGV2L21keAorCSAqLworCXN0cnVjdCBiaW8JCSptYXN0ZXJfYmlvOworCS8qCisJICogaWYgdGhlIElPIGlzIGluIFJFQUQgZGlyZWN0aW9uLCB0aGVuIHRoaXMgaXMgd2hlcmUgd2UgcmVhZAorCSAqLworCWludAkJCXJlYWRfZGlzazsKKworCXN0cnVjdCBsaXN0X2hlYWQJcmV0cnlfbGlzdDsKKwkvKgorCSAqIGlmIHRoZSBJTyBpcyBpbiBXUklURSBkaXJlY3Rpb24sIHRoZW4gbXVsdGlwbGUgYmlvcyBhcmUgdXNlZC4KKwkgKiBXZSBjaG9vc2UgdGhlIG51bWJlciB3aGVuIHRoZXkgYXJlIGFsbG9jYXRlZC4KKwkgKi8KKwlzdHJ1Y3QgYmlvCQkqYmlvc1swXTsKK307CisKKy8qIGJpdHMgZm9yIHIxYmlvLnN0YXRlICovCisjZGVmaW5lCVIxQklPX1VwdG9kYXRlCTAKKyNkZWZpbmUJUjFCSU9fSXNTeW5jCTEKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yYWlkL3JhaWQxMC5oIGIvaW5jbHVkZS9saW51eC9yYWlkL3JhaWQxMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwNzA4NzgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3JhaWQvcmFpZDEwLmgKQEAgLTAsMCArMSwxMDMgQEAKKyNpZm5kZWYgX1JBSUQxMF9ICisjZGVmaW5lIF9SQUlEMTBfSAorCisjaW5jbHVkZSA8bGludXgvcmFpZC9tZC5oPgorCit0eXBlZGVmIHN0cnVjdCBtaXJyb3JfaW5mbyBtaXJyb3JfaW5mb190OworCitzdHJ1Y3QgbWlycm9yX2luZm8geworCW1ka19yZGV2X3QJKnJkZXY7CisJc2VjdG9yX3QJaGVhZF9wb3NpdGlvbjsKK307CisKK3R5cGVkZWYgc3RydWN0IHIxMGJpb19zIHIxMGJpb190OworCitzdHJ1Y3QgcjEwX3ByaXZhdGVfZGF0YV9zIHsKKwltZGRldl90CQkJKm1kZGV2OworCW1pcnJvcl9pbmZvX3QJCSptaXJyb3JzOworCWludAkJCXJhaWRfZGlza3M7CisJaW50CQkJd29ya2luZ19kaXNrczsKKwlzcGlubG9ja190CQlkZXZpY2VfbG9jazsKKworCS8qIGdlb21ldHJ5ICovCisJaW50CQkJbmVhcl9jb3BpZXM7ICAvKiBudW1iZXIgb2YgY29waWVzIGxheWVkIG91dCByYWlkMCBzdHlsZSAqLworCWludCAJCQlmYXJfY29waWVzOyAgIC8qIG51bWJlciBvZiBjb3BpZXMgbGF5ZWQgb3V0CisJCQkJCSAgICAgICAqIGF0IGxhcmdlIHN0cmlkZXMgYWNyb3NzIGRyaXZlcworCQkJCQkgICAgICAgKi8KKwlpbnQJCQljb3BpZXM7CSAgICAgIC8qIG5lYXJfY29waWVzICogZmFyX2NvcGllcy4KKwkJCQkJICAgICAgICogbXVzdCBiZSA8PSByYWlkX2Rpc2tzCisJCQkJCSAgICAgICAqLworCXNlY3Rvcl90CQlzdHJpZGU7CSAgICAgIC8qIGRpc3RhbmNlIGJldHdlZW4gZmFyIGNvcGllcy4KKwkJCQkJICAgICAgICogVGhpcyBpcyBzaXplIC8gZmFyX2NvcGllcworCQkJCQkgICAgICAgKi8KKworCWludCBjaHVua19zaGlmdDsgLyogc2hpZnQgZnJvbSBjaHVua3MgdG8gc2VjdG9ycyAqLworCXNlY3Rvcl90IGNodW5rX21hc2s7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkCXJldHJ5X2xpc3Q7CisJLyogZm9yIHVzZSB3aGVuIHN5bmNpbmcgbWlycm9yczogKi8KKworCXNwaW5sb2NrX3QJCXJlc3luY19sb2NrOworCWludCBucl9wZW5kaW5nOworCWludCBiYXJyaWVyOworCXNlY3Rvcl90CQluZXh0X3Jlc3luYzsKKworCXdhaXRfcXVldWVfaGVhZF90CXdhaXRfaWRsZTsKKwl3YWl0X3F1ZXVlX2hlYWRfdAl3YWl0X3Jlc3VtZTsKKworCW1lbXBvb2xfdCAqcjEwYmlvX3Bvb2w7CisJbWVtcG9vbF90ICpyMTBidWZfcG9vbDsKK307CisKK3R5cGVkZWYgc3RydWN0IHIxMF9wcml2YXRlX2RhdGFfcyBjb25mX3Q7CisKKy8qCisgKiB0aGlzIGlzIHRoZSBvbmx5IHBvaW50IGluIHRoZSBSQUlEIGNvZGUgd2hlcmUgd2UgdmlvbGF0ZQorICogQyB0eXBlIHNhZmV0eS4gbWRkZXYtPnByaXZhdGUgaXMgYW4gJ29wYXF1ZScgcG9pbnRlci4KKyAqLworI2RlZmluZSBtZGRldl90b19jb25mKG1kZGV2KSAoKGNvbmZfdCAqKSBtZGRldi0+cHJpdmF0ZSkKKworLyoKKyAqIHRoaXMgaXMgb3VyICdwcml2YXRlJyBSQUlEMTAgYmlvLgorICoKKyAqIGl0IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHdoYXQga2luZCBvZiBJTyBvcGVyYXRpb25zIHdlcmUgc3RhcnRlZAorICogZm9yIHRoaXMgUkFJRDEwIG9wZXJhdGlvbiwgYW5kIGFib3V0IHRoZWlyIHN0YXR1czoKKyAqLworCitzdHJ1Y3QgcjEwYmlvX3MgeworCWF0b21pY190CQlyZW1haW5pbmc7IC8qICdoYXZlIHdlIGZpbmlzaGVkJyBjb3VudCwKKwkJCQkJICAgICogdXNlZCBmcm9tIElSUSBoYW5kbGVycworCQkJCQkgICAgKi8KKwlzZWN0b3JfdAkJc2VjdG9yOwkvKiB2aXJ0dWFsIHNlY3RvciBudW1iZXIgKi8KKwlpbnQJCQlzZWN0b3JzOworCXVuc2lnbmVkIGxvbmcJCXN0YXRlOworCW1kZGV2X3QJCQkqbWRkZXY7CisJLyoKKwkgKiBvcmlnaW5hbCBiaW8gZ29pbmcgdG8gL2Rldi9tZHgKKwkgKi8KKwlzdHJ1Y3QgYmlvCQkqbWFzdGVyX2JpbzsKKwkvKgorCSAqIGlmIHRoZSBJTyBpcyBpbiBSRUFEIGRpcmVjdGlvbiwgdGhlbiB0aGlzIGlzIHdoZXJlIHdlIHJlYWQKKwkgKi8KKwlpbnQJCQlyZWFkX3Nsb3Q7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkCXJldHJ5X2xpc3Q7CisJLyoKKwkgKiBpZiB0aGUgSU8gaXMgaW4gV1JJVEUgZGlyZWN0aW9uLCB0aGVuIG11bHRpcGxlIGJpb3MgYXJlIHVzZWQsCisJICogb25lIGZvciBlYWNoIGNvcHkuCisJICogV2hlbiByZXN5bmNpbmcgd2UgYWxzbyB1c2Ugb25lIGZvciBlYWNoIGNvcHkuCisJICogV2hlbiByZWNvbnN0cnVjdGluZywgd2UgdXNlIDIgYmlvcywgb25lIGZvciByZWFkLCBvbmUgZm9yIHdyaXRlLgorCSAqIFdlIGNob29zZSB0aGUgbnVtYmVyIHdoZW4gdGhleSBhcmUgYWxsb2NhdGVkLgorCSAqLworCXN0cnVjdCB7CisJCXN0cnVjdCBiaW8JCSpiaW87CisJCXNlY3Rvcl90IGFkZHI7CisJCWludCBkZXZudW07CisJfSBkZXZzWzBdOworfTsKKworLyogYml0cyBmb3IgcjEwYmlvLnN0YXRlICovCisjZGVmaW5lCVIxMEJJT19VcHRvZGF0ZQkwCisjZGVmaW5lCVIxMEJJT19Jc1N5bmMJMQorI2RlZmluZQlSMTBCSU9fSXNSZWNvdmVyIDIKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yYWlkL3JhaWQ1LmggYi9pbmNsdWRlL2xpbnV4L3JhaWQvcmFpZDUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjNkZGNiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9yYWlkL3JhaWQ1LmgKQEAgLTAsMCArMSwyNDMgQEAKKyNpZm5kZWYgX1JBSUQ1X0gKKyNkZWZpbmUgX1JBSUQ1X0gKKworI2luY2x1ZGUgPGxpbnV4L3JhaWQvbWQuaD4KKyNpbmNsdWRlIDxsaW51eC9yYWlkL3hvci5oPgorCisvKgorICoKKyAqIEVhY2ggc3RyaXBlIGNvbnRhaW5zIG9uZSBidWZmZXIgcGVyIGRpc2MuICBFYWNoIGJ1ZmZlciBjYW4gYmUgaW4KKyAqIG9uZSBvZiBhIG51bWJlciBvZiBzdGF0ZXMgc3RvcmVkIGluICJmbGFncyIuICBDaGFuZ2VzIGJldHdlZW4KKyAqIHRoZXNlIHN0YXRlcyBoYXBwZW4gKmFsbW9zdCogZXhjbHVzaXZlbHkgdW5kZXIgYSBwZXItc3RyaXBlCisgKiBzcGlubG9jay4gIFNvbWUgdmVyeSBzcGVjaWZpYyBjaGFuZ2VzIGNhbiBoYXBwZW4gaW4gYmlfZW5kX2lvLCBhbmQKKyAqIHRoZXNlIGFyZSBub3QgcHJvdGVjdGVkIGJ5IHRoZSBzcGluIGxvY2suCisgKgorICogVGhlIGZsYWcgYml0cyB0aGF0IGFyZSB1c2VkIHRvIHJlcHJlc2VudCB0aGVzZSBzdGF0ZXMgYXJlOgorICogICBSNV9VUFRPREFURSBhbmQgUjVfTE9DS0VECisgKgorICogU3RhdGUgRW1wdHkgPT0gIVVQVE9EQVRFLCAhTE9DSworICogICAgICAgIFdlIGhhdmUgbm8gZGF0YSwgYW5kIHRoZXJlIGlzIG5vIGFjdGl2ZSByZXF1ZXN0CisgKiBTdGF0ZSBXYW50ID09ICFVUFRPREFURSwgTE9DSworICogICAgICAgIEEgcmVhZCByZXF1ZXN0IGlzIGJlaW5nIHN1Ym1pdHRlZCBmb3IgdGhpcyBibG9jaworICogU3RhdGUgRGlydHkgPT0gVVBUT0RBVEUsIExPQ0sKKyAqICAgICAgICBTb21lIG5ldyBkYXRhIGlzIGluIHRoaXMgYnVmZmVyLCBhbmQgaXQgaXMgYmVpbmcgd3JpdHRlbiBvdXQKKyAqIFN0YXRlIENsZWFuID09IFVQVE9EQVRFLCAhTE9DSworICogICAgICAgIFdlIGhhdmUgdmFsaWQgZGF0YSB3aGljaCBpcyB0aGUgc2FtZSBhcyBvbiBkaXNjCisgKgorICogVGhlIHBvc3NpYmxlIHN0YXRlIHRyYW5zaXRpb25zIGFyZToKKyAqCisgKiAgRW1wdHkgLT4gV2FudCAgIC0gb24gcmVhZCBvciB3cml0ZSB0byBnZXQgb2xkIGRhdGEgZm9yICBwYXJpdHkgY2FsYworICogIEVtcHR5IC0+IERpcnR5ICAtIG9uIGNvbXB1dGVfcGFyaXR5IHRvIHNhdGlzZnkgd3JpdGUvc3luYyByZXF1ZXN0LihSRUNPTlNUUlVDVF9XUklURSkKKyAqICBFbXB0eSAtPiBDbGVhbiAgLSBvbiBjb21wdXRlX2Jsb2NrIHdoZW4gY29tcHV0aW5nIGEgYmxvY2sgZm9yIGZhaWxlZCBkcml2ZQorICogIFdhbnQgIC0+IEVtcHR5ICAtIG9uIGZhaWxlZCByZWFkCisgKiAgV2FudCAgLT4gQ2xlYW4gIC0gb24gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uIG9mIHJlYWQgcmVxdWVzdAorICogIERpcnR5IC0+IENsZWFuICAtIG9uIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiBvZiB3cml0ZSByZXF1ZXN0CisgKiAgRGlydHkgLT4gQ2xlYW4gIC0gb24gZmFpbGVkIHdyaXRlCisgKiAgQ2xlYW4gLT4gRGlydHkgIC0gb24gY29tcHV0ZV9wYXJpdHkgdG8gc2F0aXNmeSB3cml0ZS9zeW5jIChSRUNPTlNUUlVDVCBvciBSTVcpCisgKgorICogVGhlIFdhbnQtPkVtcHR5LCBXYW50LT5DbGVhbiwgRGlydHktPkNsZWFuLCB0cmFuc2l0aW9ucworICogYWxsIGhhcHBlbiBpbiBiX2VuZF9pbyBhdCBpbnRlcnJ1cHQgdGltZS4KKyAqIEVhY2ggc2V0cyB0aGUgVXB0b2RhdGUgYml0IGJlZm9yZSByZWxlYXNpbmcgdGhlIExvY2sgYml0LgorICogVGhpcyBsZWF2ZXMgb25lIG11bHRpLXN0YWdlIHRyYW5zaXRpb246CisgKiAgICBXYW50LT5EaXJ0eS0+Q2xlYW4KKyAqIFRoaXMgaXMgc2FmZSBiZWNhdXNlIHRoaW5raW5nIHRoYXQgYSBDbGVhbiBidWZmZXIgaXMgYWN0dWFsbHkgZGlydHkKKyAqIHdpbGwgYXQgd29yc3QgZGVsYXkgc29tZSBhY3Rpb24sIGFuZCB0aGUgc3RyaXBlIHdpbGwgYmUgc2NoZWR1bGVkCisgKiBmb3IgYXR0ZW50aW9uIGFmdGVyIHRoZSB0cmFuc2l0aW9uIGlzIGNvbXBsZXRlLgorICoKKyAqIFRoZXJlIGlzIG9uZSBwb3NzaWJpbGl0eSB0aGF0IGlzIG5vdCBjb3ZlcmVkIGJ5IHRoZXNlIHN0YXRlcy4gIFRoYXQKKyAqIGlzIGlmIG9uZSBkcml2ZSBoYXMgZmFpbGVkIGFuZCB0aGVyZSBpcyBhIHNwYXJlIGJlaW5nIHJlYnVpbHQuICBXZQorICogY2FuJ3QgZGlzdGluZ3Vpc2ggYmV0d2VlbiBhIGNsZWFuIGJsb2NrIHRoYXQgaGFzIGJlZW4gZ2VuZXJhdGVkCisgKiBmcm9tIHBhcml0eSBjYWxjdWxhdGlvbnMsIGFuZCBhIGNsZWFuIGJsb2NrIHRoYXQgaGFzIGJlZW4KKyAqIHN1Y2Nlc3NmdWxseSB3cml0dGVuIHRvIHRoZSBzcGFyZSAoIG9yIHRvIHBhcml0eSB3aGVuIHJlc3luY2luZykuCisgKiBUbyBkaXN0aW5ndXNoIHRoZXNlIHN0YXRlcyB3ZSBoYXZlIGEgc3RyaXBlIGJpdCBTVFJJUEVfSU5TWU5DIHRoYXQKKyAqIGlzIHNldCB3aGVuZXZlciBhIHdyaXRlIGlzIHNjaGVkdWxlZCB0byB0aGUgc3BhcmUsIG9yIHRvIHRoZSBwYXJpdHkKKyAqIGRpc2MgaWYgdGhlcmUgaXMgbm8gc3BhcmUuICBBIHN5bmMgcmVxdWVzdCBjbGVhcnMgdGhpcyBiaXQsIGFuZAorICogd2hlbiB3ZSBmaW5kIGl0IHNldCB3aXRoIG5vIGJ1ZmZlcnMgbG9ja2VkLCB3ZSBrbm93IHRoZSBzeW5jIGlzCisgKiBjb21wbGV0ZS4KKyAqCisgKiBCdWZmZXJzIGZvciB0aGUgbWQgZGV2aWNlIHRoYXQgYXJyaXZlIHZpYSBtYWtlX3JlcXVlc3QgYXJlIGF0dGFjaGVkCisgKiB0byB0aGUgYXBwcm9wcmlhdGUgc3RyaXBlIGluIG9uZSBvZiB0d28gbGlzdHMgbGlua2VkIG9uIGJfcmVxbmV4dC4KKyAqIE9uZSBsaXN0IChiaF9yZWFkKSBmb3IgcmVhZCByZXF1ZXN0cywgb25lIChiaF93cml0ZSkgZm9yIHdyaXRlLgorICogVGhlcmUgc2hvdWxkIG5ldmVyIGJlIG1vcmUgdGhhbiBvbmUgYnVmZmVyIG9uIHRoZSB0d28gbGlzdHMKKyAqIHRvZ2V0aGVyLCBidXQgd2UgYXJlIG5vdCBndWFyYW50ZWVkIG9mIHRoYXQgc28gd2UgYWxsb3cgZm9yIG1vcmUuCisgKgorICogSWYgYSBidWZmZXIgaXMgb24gdGhlIHJlYWQgbGlzdCB3aGVuIHRoZSBhc3NvY2lhdGVkIGNhY2hlIGJ1ZmZlciBpcworICogVXB0b2RhdGUsIHRoZSBkYXRhIGlzIGNvcGllZCBpbnRvIHRoZSByZWFkIGJ1ZmZlciBhbmQgaXQncyBiX2VuZF9pbworICogcm91dGluZSBpcyBjYWxsZWQuICBUaGlzIG1heSBoYXBwZW4gaW4gdGhlIGVuZF9yZXF1ZXN0IHJvdXRpbmUgb25seQorICogaWYgdGhlIGJ1ZmZlciBoYXMganVzdCBzdWNjZXNzZnVsbHkgYmVlbiByZWFkLiAgZW5kX3JlcXVlc3Qgc2hvdWxkCisgKiByZW1vdmUgdGhlIGJ1ZmZlcnMgZnJvbSB0aGUgbGlzdCBhbmQgdGhlbiBzZXQgdGhlIFVwdG9kYXRlIGJpdCBvbgorICogdGhlIGJ1ZmZlci4gIE90aGVyIHRocmVhZHMgbWF5IGRvIHRoaXMgb25seSBpZiB0aGV5IGZpcnN0IGNoZWNrCisgKiB0aGF0IHRoZSBVcHRvZGF0ZSBiaXQgaXMgc2V0LiAgT25jZSB0aGV5IGhhdmUgY2hlY2tlZCB0aGF0IHRoZXkgbWF5CisgKiB0YWtlIGJ1ZmZlcnMgb2ZmIHRoZSByZWFkIHF1ZXVlLgorICoKKyAqIFdoZW4gYSBidWZmZXIgb24gdGhlIHdyaXRlIGxpc3QgaXMgY29tbWl0dGVkIGZvciB3cml0ZSBpdCBpcyBjb3BpZWQKKyAqIGludG8gdGhlIGNhY2hlIGJ1ZmZlciwgd2hpY2ggaXMgdGhlbiBtYXJrZWQgZGlydHksIGFuZCBtb3ZlZCBvbnRvIGEKKyAqIHRoaXJkIGxpc3QsIHRoZSB3cml0dGVuIGxpc3QgKGJoX3dyaXR0ZW4pLiAgT25jZSBib3RoIHRoZSBwYXJpdHkKKyAqIGJsb2NrIGFuZCB0aGUgY2FjaGVkIGJ1ZmZlciBhcmUgc3VjY2Vzc2Z1bGx5IHdyaXR0ZW4sIGFueSBidWZmZXIgb24KKyAqIGEgd3JpdHRlbiBsaXN0IGNhbiBiZSByZXR1cm5lZCB3aXRoIGJfZW5kX2lvLgorICoKKyAqIFRoZSB3cml0ZSBsaXN0IGFuZCByZWFkIGxpc3QgYm90aCBhY3QgYXMgZmlmb3MuICBUaGUgcmVhZCBsaXN0IGlzCisgKiBwcm90ZWN0ZWQgYnkgdGhlIGRldmljZV9sb2NrLiAgVGhlIHdyaXRlIGFuZCB3cml0dGVuIGxpc3RzIGFyZQorICogcHJvdGVjdGVkIGJ5IHRoZSBzdHJpcGUgbG9jay4gIFRoZSBkZXZpY2VfbG9jaywgd2hpY2ggY2FuIGJlCisgKiBjbGFpbWVkIHdoaWxlIHRoZSBzdGlwZSBsb2NrIGlzIGhlbGQsIGlzIG9ubHkgZm9yIGxpc3QKKyAqIG1hbmlwdWxhdGlvbnMgYW5kIHdpbGwgb25seSBiZSBoZWxkIGZvciBhIHZlcnkgc2hvcnQgdGltZS4gIEl0IGNhbgorICogYmUgY2xhaW1lZCBmcm9tIGludGVycnVwdHMuCisgKgorICoKKyAqIFN0cmlwZXMgaW4gdGhlIHN0cmlwZSBjYWNoZSBjYW4gYmUgb24gb25lIG9mIHR3byBsaXN0cyAob3Igb24KKyAqIG5laXRoZXIpLiAgVGhlICJpbmFjdGl2ZV9saXN0IiBjb250YWlucyBzdHJpcGVzIHdoaWNoIGFyZSBub3QKKyAqIGN1cnJlbnRseSBiZWluZyB1c2VkIGZvciBhbnkgcmVxdWVzdC4gIFRoZXkgY2FuIGZyZWVseSBiZSByZXVzZWQKKyAqIGZvciBhbm90aGVyIHN0cmlwZS4gIFRoZSAiaGFuZGxlX2xpc3QiIGNvbnRhaW5zIHN0cmlwZXMgdGhhdCBuZWVkCisgKiB0byBiZSBoYW5kbGVkIGluIHNvbWUgd2F5LiAgQm90aCBvZiB0aGVzZSBhcmUgZmlmbyBxdWV1ZXMuICBFYWNoCisgKiBzdHJpcGUgaXMgYWxzbyAocG90ZW50aWFsbHkpIGxpbmtlZCB0byBhIGhhc2ggYnVja2V0IGluIHRoZSBoYXNoCisgKiB0YWJsZSBzbyB0aGF0IGl0IGNhbiBiZSBmb3VuZCBieSBzZWN0b3IgbnVtYmVyLiAgU3RyaXBlcyB0aGF0IGFyZQorICogbm90IGhhc2hlZCBtdXN0IGJlIG9uIHRoZSBpbmFjdGl2ZV9saXN0LCBhbmQgd2lsbCBub3JtYWxseSBiZSBhdAorICogdGhlIGZyb250LiAgQWxsIHN0cmlwZXMgc3RhcnQgbGlmZSB0aGlzIHdheS4KKyAqCisgKiBUaGUgaW5hY3RpdmVfbGlzdCwgaGFuZGxlX2xpc3QgYW5kIGhhc2ggYnVja2V0IGxpc3RzIGFyZSBhbGwgcHJvdGVjdGVkIGJ5IHRoZQorICogZGV2aWNlX2xvY2suCisgKiAgLSBzdHJpcGVzIG9uIHRoZSBpbmFjdGl2ZV9saXN0IG5ldmVyIGhhdmUgdGhlaXIgc3RyaXBlX2xvY2sgaGVsZC4KKyAqICAtIHN0cmlwZXMgaGF2ZSBhIHJlZmVyZW5jZSBjb3VudGVyLiBJZiBjb3VudD09MCwgdGhleSBhcmUgb24gYSBsaXN0LgorICogIC0gSWYgYSBzdHJpcGUgbWlnaHQgbmVlZCBoYW5kbGluZywgU1RSSVBFX0hBTkRMRSBpcyBzZXQuCisgKiAgLSBXaGVuIHJlZmNvdW50IHJlYWNoZXMgemVybywgdGhlbiBpZiBTVFJJUEVfSEFORExFIGl0IGlzIHB1dCBvbgorICogICAgaGFuZGxlX2xpc3QgZWxzZSBpbmFjdGl2ZV9saXN0CisgKgorICogVGhpcywgY29tYmluZWQgd2l0aCB0aGUgZmFjdCB0aGF0IFNUUklQRV9IQU5ETEUgaXMgb25seSBldmVyCisgKiBjbGVhcmVkIHdoaWxlIGEgc3RyaXBlIGhhcyBhIG5vbi16ZXJvIGNvdW50IG1lYW5zIHRoYXQgaWYgdGhlCisgKiByZWZjb3VudCBpcyAwIGFuZCBTVFJJUEVfSEFORExFIGlzIHNldCwgdGhlbiBpdCBpcyBvbiB0aGUKKyAqIGhhbmRsZV9saXN0IGFuZCBpZiByZWNvdW50IGlzIDAgYW5kIFNUUklQRV9IQU5ETEUgaXMgbm90IHNldCwgdGhlbgorICogdGhlIHN0cmlwZSBpcyBvbiBpbmFjdGl2ZV9saXN0LgorICoKKyAqIFRoZSBwb3NzaWJsZSB0cmFuc2l0aW9ucyBhcmU6CisgKiAgYWN0aXZhdGUgYW4gdW5oYXNoZWQvaW5hY3RpdmUgc3RyaXBlIChnZXRfYWN0aXZlX3N0cmlwZSgpKQorICogICAgIGxvY2tkZXYgY2hlY2staGFzaCB1bmxpbmstc3RyaXBlIGNudCsrIGNsZWFuLXN0cmlwZSBoYXNoLXN0cmlwZSB1bmxvY2tkZXYKKyAqICBhY3RpdmF0ZSBhIGhhc2hlZCwgcG9zc2libHkgYWN0aXZlIHN0cmlwZSAoZ2V0X2FjdGl2ZV9zdHJpcGUoKSkKKyAqICAgICBsb2NrZGV2IGNoZWNrLWhhc2ggaWYoIWNudCsrKXVubGluay1zdHJpcGUgdW5sb2NrZGV2CisgKiAgYXR0YWNoIGEgcmVxdWVzdCB0byBhbiBhY3RpdmUgc3RyaXBlIChhZGRfc3RyaXBlX2JoKCkpCisgKiAgICAgbG9ja2RldiBhdHRhY2gtYnVmZmVyIHVubG9ja2RldgorICogIGhhbmRsZSBhIHN0cmlwZSAoaGFuZGxlX3N0cmlwZSgpKQorICogICAgIGxvY2tzdHJpcGUgY2xyU1RSSVBFX0hBTkRMRSAuLi4gKGxvY2tkZXYgY2hlY2stYnVmZmVycyB1bmxvY2tkZXYpIC4uIGNoYW5nZS1zdGF0ZSAuLiByZWNvcmQgaW8gbmVlZGVkIHVubG9ja3N0cmlwZSBzY2hlZHVsZSBpbworICogIHJlbGVhc2UgYW4gYWN0aXZlIHN0cmlwZSAocmVsZWFzZV9zdHJpcGUoKSkKKyAqICAgICBsb2NrZGV2IGlmICghLS1jbnQpIHsgaWYgIFNUUklQRV9IQU5ETEUsIGFkZCB0byBoYW5kbGVfbGlzdCBlbHNlIGFkZCB0byBpbmFjdGl2ZS1saXN0IH0gdW5sb2NrZGV2CisgKgorICogVGhlIHJlZmNvdW50IGNvdW50cyBlYWNoIHRocmVhZCB0aGF0IGhhdmUgYWN0aXZhdGVkIHRoZSBzdHJpcGUsCisgKiBwbHVzIHJhaWQ1ZCBpZiBpdCBpcyBoYW5kbGluZyBpdCwgcGx1cyBvbmUgZm9yIGVhY2ggYWN0aXZlIHJlcXVlc3QKKyAqIG9uIGEgY2FjaGVkIGJ1ZmZlci4KKyAqLworCitzdHJ1Y3Qgc3RyaXBlX2hlYWQgeworCXN0cnVjdCBzdHJpcGVfaGVhZAkqaGFzaF9uZXh0LCAqKmhhc2hfcHByZXY7IC8qIGhhc2ggcG9pbnRlcnMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCWxydTsJCQkvKiBpbmFjdGl2ZV9saXN0IG9yIGhhbmRsZV9saXN0ICovCisJc3RydWN0IHJhaWQ1X3ByaXZhdGVfZGF0YQkqcmFpZF9jb25mOworCXNlY3Rvcl90CQlzZWN0b3I7CQkJLyogc2VjdG9yIG9mIHRoaXMgcm93ICovCisJaW50CQkJcGRfaWR4OwkJCS8qIHBhcml0eSBkaXNrIGluZGV4ICovCisJdW5zaWduZWQgbG9uZwkJc3RhdGU7CQkJLyogc3RhdGUgZmxhZ3MgKi8KKwlhdG9taWNfdAkJY291bnQ7CQkJLyogbnIgb2YgYWN0aXZlIHRocmVhZC9yZXF1ZXN0cyAqLworCXNwaW5sb2NrX3QJCWxvY2s7CisJc3RydWN0IHI1ZGV2IHsKKwkJc3RydWN0IGJpbwlyZXE7CisJCXN0cnVjdCBiaW9fdmVjCXZlYzsKKwkJc3RydWN0IHBhZ2UJKnBhZ2U7CisJCXN0cnVjdCBiaW8JKnRvcmVhZCwgKnRvd3JpdGUsICp3cml0dGVuOworCQlzZWN0b3JfdAlzZWN0b3I7CQkJLyogc2VjdG9yIG9mIHRoaXMgcGFnZSAqLworCQl1bnNpZ25lZCBsb25nCWZsYWdzOworCX0gZGV2WzFdOyAvKiBhbGxvY2F0ZWQgd2l0aCBleHRyYSBzcGFjZSBkZXBlbmRpbmcgb2YgUkFJRCBnZW9tZXRyeSAqLworfTsKKy8qIEZsYWdzICovCisjZGVmaW5lCVI1X1VQVE9EQVRFCTAJLyogcGFnZSBjb250YWlucyBjdXJyZW50IGRhdGEgKi8KKyNkZWZpbmUJUjVfTE9DS0VECTEJLyogSU8gaGFzIGJlZW4gc3VibWl0dGVkIG9uICJyZXEiICovCisjZGVmaW5lCVI1X09WRVJXUklURQkyCS8qIHRvd3JpdGUgY292ZXJzIHdob2xlIHBhZ2UgKi8KKy8qIGFuZCBzb21lIHRoYXQgYXJlIGludGVybmFsIHRvIGhhbmRsZV9zdHJpcGUgKi8KKyNkZWZpbmUJUjVfSW5zeW5jCTMJLyogcmRldiAmJiByZGV2LT5pbl9zeW5jIGF0IHN0YXJ0ICovCisjZGVmaW5lCVI1X1dhbnRyZWFkCTQJLyogd2FudCB0byBzY2hlZHVsZSBhIHJlYWQgKi8KKyNkZWZpbmUJUjVfV2FudHdyaXRlCTUKKyNkZWZpbmUJUjVfU3luY2lvCTYJLyogdGhpcyBpbyBuZWVkIHRvIGJlIGFjY291bnRlZCBhcyByZXN5bmMgaW8gKi8KKyNkZWZpbmUJUjVfT3ZlcmxhcAk3CS8qIFRoZXJlIGlzIGEgcGVuZGluZyBvdmVybGFwcGluZyByZXF1ZXN0IG9uIHRoaXMgYmxvY2sgKi8KKworLyoKKyAqIFdyaXRlIG1ldGhvZAorICovCisjZGVmaW5lIFJFQ09OU1RSVUNUX1dSSVRFCTEKKyNkZWZpbmUgUkVBRF9NT0RJRllfV1JJVEUJMgorLyogbm90IGEgd3JpdGUgbWV0aG9kLCBidXQgYSBjb21wdXRlX3Bhcml0eSBtb2RlICovCisjZGVmaW5lCUNIRUNLX1BBUklUWQkJMworCisvKgorICogU3RyaXBlIHN0YXRlCisgKi8KKyNkZWZpbmUgU1RSSVBFX0VSUk9SCQkxCisjZGVmaW5lIFNUUklQRV9IQU5ETEUJCTIKKyNkZWZpbmUJU1RSSVBFX1NZTkNJTkcJCTMKKyNkZWZpbmUJU1RSSVBFX0lOU1lOQwkJNAorI2RlZmluZQlTVFJJUEVfUFJFUkVBRF9BQ1RJVkUJNQorI2RlZmluZQlTVFJJUEVfREVMQVlFRAkJNgorCisvKgorICogUGx1Z2dpbmc6CisgKgorICogVG8gaW1wcm92ZSB3cml0ZSB0aHJvdWdocHV0LCB3ZSBuZWVkIHRvIGRlbGF5IHRoZSBoYW5kbGluZyBvZiBzb21lCisgKiBzdHJpcGVzIHVudGlsIHRoZXJlIGhhcyBiZWVuIGEgY2hhbmNlIHRoYXQgc2V2ZXJhbCB3cml0ZSByZXF1ZXN0cworICogZm9yIHRoZSBvbmUgc3RyaXBlIGhhdmUgYWxsIGJlZW4gY29sbGVjdGVkLgorICogSW4gcGFydGljdWxhciwgYW55IHdyaXRlIHJlcXVlc3QgdGhhdCB3b3VsZCByZXF1aXJlIHByZS1yZWFkaW5nCisgKiBpcyBwdXQgb24gYSAiZGVsYXllZCIgcXVldWUgdW50aWwgdGhlcmUgYXJlIG5vIHN0cmlwZXMgY3VycmVudGx5CisgKiBpbiBhIHByZS1yZWFkIHBoYXNlLiAgRnVydGhlciwgaWYgdGhlICJkZWxheWVkIiBxdWV1ZSBpcyBlbXB0eSB3aGVuCisgKiBhIHN0cmlwZSBpcyBwdXQgb24gaXQgdGhlbiB3ZSAicGx1ZyIgdGhlIHF1ZXVlIGFuZCBkbyBub3QgcHJvY2VzcyBpdAorICogdW50aWwgYW4gdW5wbHVnIGNhbGwgaXMgbWFkZS4gKHRoZSB1bnBsdWdfaW9fZm4oKSBpcyBjYWxsZWQpLgorICoKKyAqIFdoZW4gcHJlcmVhZCBpcyBpbml0aWF0ZWQgb24gYSBzdHJpcGUsIHdlIHNldCBQUkVSRUFEX0FDVElWRSBhbmQgYWRkCisgKiBpdCB0byB0aGUgY291bnQgb2YgcHJlcmVhZGluZyBzdHJpcGVzLgorICogV2hlbiB3cml0ZSBpcyBpbml0aWF0ZWQsIG9yIHRoZSBzdHJpcGUgcmVmY250ID09IDAgKGp1c3QgaW4gY2FzZSkgd2UKKyAqIGNsZWFyIHRoZSBQUkVSRUFEX0FDVElWRSBmbGFnIGFuZCBkZWNyZW1lbnQgdGhlIGNvdW50CisgKiBXaGVuZXZlciB0aGUgZGVsYXllZCBxdWV1ZSBpcyBlbXB0eSBhbmQgdGhlIGRldmljZSBpcyBub3QgcGx1Z2dlZCwgd2UKKyAqIG1vdmUgYW55IHN0cmlwcyBmcm9tIGRlbGF5ZWQgdG8gaGFuZGxlIGFuZCBjbGVhciB0aGUgREVMQVlFRCBmbGFnIGFuZCBzZXQgUFJFUkVBRF9BQ1RJVkUuCisgKiBJbiBzdHJpcGVfaGFuZGxlLCBpZiB3ZSBmaW5kIHByZS1yZWFkaW5nIGlzIG5lY2Vzc2FyeSwgd2UgZG8gaXQgaWYKKyAqIFBSRVJFQURfQUNUSVZFIGlzIHNldCwgZWxzZSB3ZSBzZXQgREVMQVlFRCB3aGljaCB3aWxsIHNlbmQgaXQgdG8gdGhlIGRlbGF5ZWQgcXVldWUuCisgKiBIQU5ETEUgZ2V0cyBjbGVhcmVkIGlmIHN0cmlwZV9oYW5kbGUgbGVhdmUgbm90aGluZyBsb2NrZWQuCisgKi8KKyAKKworc3RydWN0IGRpc2tfaW5mbyB7CisJbWRrX3JkZXZfdAkqcmRldjsKK307CisKK3N0cnVjdCByYWlkNV9wcml2YXRlX2RhdGEgeworCXN0cnVjdCBzdHJpcGVfaGVhZAkqKnN0cmlwZV9oYXNodGJsOworCW1kZGV2X3QJCQkqbWRkZXY7CisJc3RydWN0IGRpc2tfaW5mbwkqc3BhcmU7CisJaW50CQkJY2h1bmtfc2l6ZSwgbGV2ZWwsIGFsZ29yaXRobTsKKwlpbnQJCQlyYWlkX2Rpc2tzLCB3b3JraW5nX2Rpc2tzLCBmYWlsZWRfZGlza3M7CisJaW50CQkJbWF4X25yX3N0cmlwZXM7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkCWhhbmRsZV9saXN0OyAvKiBzdHJpcGVzIG5lZWRpbmcgaGFuZGxpbmcgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCWRlbGF5ZWRfbGlzdDsgLyogc3RyaXBlcyB0aGF0IGhhdmUgcGx1Z2dlZCByZXF1ZXN0cyAqLworCWF0b21pY190CQlwcmVyZWFkX2FjdGl2ZV9zdHJpcGVzOyAvKiBzdHJpcGVzIHdpdGggc2NoZWR1bGVkIGlvICovCisKKwljaGFyCQkJY2FjaGVfbmFtZVsyMF07CisJa21lbV9jYWNoZV90CQkqc2xhYl9jYWNoZTsgLyogZm9yIGFsbG9jYXRpbmcgc3RyaXBlcyAqLworCS8qCisJICogRnJlZSBzdHJpcGVzIHBvb2wKKwkgKi8KKwlhdG9taWNfdAkJYWN0aXZlX3N0cmlwZXM7CisJc3RydWN0IGxpc3RfaGVhZAlpbmFjdGl2ZV9saXN0OworCXdhaXRfcXVldWVfaGVhZF90CXdhaXRfZm9yX3N0cmlwZTsKKwl3YWl0X3F1ZXVlX2hlYWRfdAl3YWl0X2Zvcl9vdmVybGFwOworCWludAkJCWluYWN0aXZlX2Jsb2NrZWQ7CS8qIHJlbGVhc2Ugb2YgaW5hY3RpdmUgc3RyaXBlcyBibG9ja2VkLAorCQkJCQkJCSAqIHdhaXRpbmcgZm9yIDI1JSB0byBiZSBmcmVlCisJCQkJCQkJICovICAgICAgICAKKwlzcGlubG9ja190CQlkZXZpY2VfbG9jazsKKwlzdHJ1Y3QgZGlza19pbmZvCWRpc2tzWzBdOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgcmFpZDVfcHJpdmF0ZV9kYXRhIHJhaWQ1X2NvbmZfdDsKKworI2RlZmluZSBtZGRldl90b19jb25mKG1kZGV2KSAoKHJhaWQ1X2NvbmZfdCAqKSBtZGRldi0+cHJpdmF0ZSkKKworLyoKKyAqIE91ciBzdXBwb3J0ZWQgYWxnb3JpdGhtcworICovCisjZGVmaW5lIEFMR09SSVRITV9MRUZUX0FTWU1NRVRSSUMJMAorI2RlZmluZSBBTEdPUklUSE1fUklHSFRfQVNZTU1FVFJJQwkxCisjZGVmaW5lIEFMR09SSVRITV9MRUZUX1NZTU1FVFJJQwkyCisjZGVmaW5lIEFMR09SSVRITV9SSUdIVF9TWU1NRVRSSUMJMworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmFpZC94b3IuaCBiL2luY2x1ZGUvbGludXgvcmFpZC94b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGQ2N2NiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9yYWlkL3hvci5oCkBAIC0wLDAgKzEsMjMgQEAKKyNpZm5kZWYgX1hPUl9ICisjZGVmaW5lIF9YT1JfSAorCisjaW5jbHVkZSA8bGludXgvcmFpZC9tZC5oPgorCisjZGVmaW5lIE1BWF9YT1JfQkxPQ0tTIDUKKworZXh0ZXJuIHZvaWQgeG9yX2Jsb2NrKHVuc2lnbmVkIGludCBjb3VudCwgdW5zaWduZWQgaW50IGJ5dGVzLCB2b2lkICoqcHRyKTsKKworc3RydWN0IHhvcl9ibG9ja190ZW1wbGF0ZSB7CisgICAgICAgIHN0cnVjdCB4b3JfYmxvY2tfdGVtcGxhdGUgKm5leHQ7CisgICAgICAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICAgICAgIGludCBzcGVlZDsKKwl2b2lkICgqZG9fMikodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyAqLCB1bnNpZ25lZCBsb25nICopOworCXZvaWQgKCpkb18zKSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nICosIHVuc2lnbmVkIGxvbmcgKiwKKwkJICAgICB1bnNpZ25lZCBsb25nICopOworCXZvaWQgKCpkb180KSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nICosIHVuc2lnbmVkIGxvbmcgKiwKKwkJICAgICB1bnNpZ25lZCBsb25nICosIHVuc2lnbmVkIGxvbmcgKik7CisJdm9pZCAoKmRvXzUpKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcgKiwgdW5zaWduZWQgbG9uZyAqLAorCQkgICAgIHVuc2lnbmVkIGxvbmcgKiwgdW5zaWduZWQgbG9uZyAqLCB1bnNpZ25lZCBsb25nICopOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JhbWZzLmggYi9pbmNsdWRlL2xpbnV4L3JhbWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBhNGZhYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvcmFtZnMuaApAQCAtMCwwICsxLDExIEBACisjaWZuZGVmIF9MSU5VWF9SQU1GU19ICisjZGVmaW5lIF9MSU5VWF9SQU1GU19ICisKK3N0cnVjdCBpbm9kZSAqcmFtZnNfZ2V0X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBtb2RlLCBkZXZfdCBkZXYpOworc3RydWN0IHN1cGVyX2Jsb2NrICpyYW1mc19nZXRfc2Ioc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKmZzX3R5cGUsCisJIGludCBmbGFncywgY29uc3QgY2hhciAqZGV2X25hbWUsIHZvaWQgKmRhdGEpOworCitleHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByYW1mc19maWxlX29wZXJhdGlvbnM7CitleHRlcm4gc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGdlbmVyaWNfZmlsZV92bV9vcHM7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yYW5kb20uaCBiL2luY2x1ZGUvbGludXgvcmFuZG9tLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M2NzAzNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvcmFuZG9tLmgKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIGluY2x1ZGUvbGludXgvcmFuZG9tLmgKKyAqCisgKiBJbmNsdWRlIGZpbGUgZm9yIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4KKyAqLworCisjaWZuZGVmIF9MSU5VWF9SQU5ET01fSAorI2RlZmluZSBfTElOVVhfUkFORE9NX0gKKworI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisKKy8qIGlvY3RsKCkncyBmb3IgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yICovCisKKy8qIEdldCB0aGUgZW50cm9weSBjb3VudC4gKi8KKyNkZWZpbmUgUk5ER0VURU5UQ05UCV9JT1IoICdSJywgMHgwMCwgaW50ICkKKworLyogQWRkIHRvIChvciBzdWJ0cmFjdCBmcm9tKSB0aGUgZW50cm9weSBjb3VudC4gIChTdXBlcnVzZXIgb25seS4pICovCisjZGVmaW5lIFJOREFERFRPRU5UQ05UCV9JT1coICdSJywgMHgwMSwgaW50ICkKKworLyogR2V0IHRoZSBjb250ZW50cyBvZiB0aGUgZW50cm9weSBwb29sLiAgKFN1cGVydXNlciBvbmx5LikgKi8KKyNkZWZpbmUgUk5ER0VUUE9PTAlfSU9SKCAnUicsIDB4MDIsIGludCBbMl0gKQorCisvKiAKKyAqIFdyaXRlIGJ5dGVzIGludG8gdGhlIGVudHJvcHkgcG9vbCBhbmQgYWRkIHRvIHRoZSBlbnRyb3B5IGNvdW50LgorICogKFN1cGVydXNlciBvbmx5LikKKyAqLworI2RlZmluZSBSTkRBRERFTlRST1BZCV9JT1coICdSJywgMHgwMywgaW50IFsyXSApCisKKy8qIENsZWFyIGVudHJvcHkgY291bnQgdG8gMC4gIChTdXBlcnVzZXIgb25seS4pICovCisjZGVmaW5lIFJORFpBUEVOVENOVAlfSU8oICdSJywgMHgwNCApCisKKy8qIENsZWFyIHRoZSBlbnRyb3B5IHBvb2wgYW5kIGFzc29jaWF0ZWQgY291bnRlcnMuICAoU3VwZXJ1c2VyIG9ubHkuKSAqLworI2RlZmluZSBSTkRDTEVBUlBPT0wJX0lPKCAnUicsIDB4MDYgKQorCitzdHJ1Y3QgcmFuZF9wb29sX2luZm8geworCWludAllbnRyb3B5X2NvdW50OworCWludAlidWZfc2l6ZTsKKwlfX3UzMglidWZbMF07Cit9OworCisvKiBFeHBvcnRlZCBmdW5jdGlvbnMgKi8KKworI2lmZGVmIF9fS0VSTkVMX18KKworZXh0ZXJuIHZvaWQgcmFuZF9pbml0aWFsaXplX2lycShpbnQgaXJxKTsKKworZXh0ZXJuIHZvaWQgYWRkX2lucHV0X3JhbmRvbW5lc3ModW5zaWduZWQgaW50IHR5cGUsIHVuc2lnbmVkIGludCBjb2RlLAorCQkJCSB1bnNpZ25lZCBpbnQgdmFsdWUpOworZXh0ZXJuIHZvaWQgYWRkX2ludGVycnVwdF9yYW5kb21uZXNzKGludCBpcnEpOworCitleHRlcm4gdm9pZCBnZXRfcmFuZG9tX2J5dGVzKHZvaWQgKmJ1ZiwgaW50IG5ieXRlcyk7Cit2b2lkIGdlbmVyYXRlX3JhbmRvbV91dWlkKHVuc2lnbmVkIGNoYXIgdXVpZF9vdXRbMTZdKTsKKworZXh0ZXJuIF9fdTMyIHNlY3VyZV9pcF9pZChfX3UzMiBkYWRkcik7CitleHRlcm4gdTMyIHNlY3VyZV90Y3BfcG9ydF9lcGhlbWVyYWwoX191MzIgc2FkZHIsIF9fdTMyIGRhZGRyLCBfX3UxNiBkcG9ydCk7CitleHRlcm4gdTMyIHNlY3VyZV90Y3B2Nl9wb3J0X2VwaGVtZXJhbChjb25zdCBfX3UzMiAqc2FkZHIsIGNvbnN0IF9fdTMyICpkYWRkciwgCisJCQkJICAgICAgIF9fdTE2IGRwb3J0KTsKK2V4dGVybiBfX3UzMiBzZWN1cmVfdGNwX3NlcXVlbmNlX251bWJlcihfX3UzMiBzYWRkciwgX191MzIgZGFkZHIsCisJCQkJCV9fdTE2IHNwb3J0LCBfX3UxNiBkcG9ydCk7CitleHRlcm4gX191MzIgc2VjdXJlX3RjcHY2X3NlcXVlbmNlX251bWJlcihfX3UzMiAqc2FkZHIsIF9fdTMyICpkYWRkciwKKwkJCQkJICBfX3UxNiBzcG9ydCwgX191MTYgZHBvcnQpOworCisjaWZuZGVmIE1PRFVMRQorZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmFuZG9tX2ZvcHMsIHVyYW5kb21fZm9wczsKKyNlbmRpZgorCit1bnNpZ25lZCBpbnQgZ2V0X3JhbmRvbV9pbnQodm9pZCk7Cit1bnNpZ25lZCBsb25nIHJhbmRvbWl6ZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgbG9uZyBsZW4pOworCisjZW5kaWYgLyogX19LRVJORUxfX18gKi8KKworI2VuZGlmIC8qIF9MSU5VWF9SQU5ET01fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yYXcuaCBiL2luY2x1ZGUvbGludXgvcmF3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJkNTQzZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvcmF3LmgKQEAgLTAsMCArMSwxOCBAQAorI2lmbmRlZiBfX0xJTlVYX1JBV19ICisjZGVmaW5lIF9fTElOVVhfUkFXX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNkZWZpbmUgUkFXX1NFVEJJTkQJX0lPKCAweGFjLCAwICkKKyNkZWZpbmUgUkFXX0dFVEJJTkQJX0lPKCAweGFjLCAxICkKKworc3RydWN0IHJhd19jb25maWdfcmVxdWVzdCAKK3sKKwlpbnQJcmF3X21pbm9yOworCV9fdTY0CWJsb2NrX21ham9yOworCV9fdTY0CWJsb2NrX21pbm9yOworfTsKKworI2RlZmluZSBNQVhfUkFXX01JTk9SUyBDT05GSUdfTUFYX1JBV19ERVZTCisKKyNlbmRpZiAvKiBfX0xJTlVYX1JBV19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JidHJlZS5oIGIvaW5jbHVkZS9saW51eC9yYnRyZWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjdjYzRmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9yYnRyZWUuaApAQCAtMCwwICsxLDE0MSBAQAorLyoKKyAgUmVkIEJsYWNrIFRyZWVzCisgIChDKSAxOTk5ICBBbmRyZWEgQXJjYW5nZWxpIDxhbmRyZWFAc3VzZS5kZT4KKyAgCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisKKyAgbGludXgvaW5jbHVkZS9saW51eC9yYnRyZWUuaAorCisgIFRvIHVzZSByYnRyZWVzIHlvdSdsbCBoYXZlIHRvIGltcGxlbWVudCB5b3VyIG93biBpbnNlcnQgYW5kIHNlYXJjaCBjb3Jlcy4KKyAgVGhpcyB3aWxsIGF2b2lkIHVzIHRvIHVzZSBjYWxsYmFja3MgYW5kIHRvIGRyb3AgZHJhbW1hdGljYWxseSBwZXJmb3JtYW5jZXMuCisgIEkga25vdyBpdCdzIG5vdCB0aGUgY2xlYW5lciB3YXksICBidXQgaW4gQyAobm90IGluIEMrKykgdG8gZ2V0CisgIHBlcmZvcm1hbmNlcyBhbmQgZ2VuZXJpY2l0eS4uLgorCisgIFNvbWUgZXhhbXBsZSBvZiBpbnNlcnQgYW5kIHNlYXJjaCBmb2xsb3dzIGhlcmUuIFRoZSBzZWFyY2ggaXMgYSBwbGFpbgorICBub3JtYWwgc2VhcmNoIG92ZXIgYW4gb3JkZXJlZCB0cmVlLiBUaGUgaW5zZXJ0IGluc3RlYWQgbXVzdCBiZSBpbXBsZW1lbnRlZAorICBpbnQgdHdvIHN0ZXBzOiBhcyBmaXJzdCB0aGluZyB0aGUgY29kZSBtdXN0IGluc2VydCB0aGUgZWxlbWVudCBpbgorICBvcmRlciBhcyBhIHJlZCBsZWFmIGluIHRoZSB0cmVlLCB0aGVuIHRoZSBzdXBwb3J0IGxpYnJhcnkgZnVuY3Rpb24KKyAgcmJfaW5zZXJ0X2NvbG9yKCkgbXVzdCBiZSBjYWxsZWQuIFN1Y2ggZnVuY3Rpb24gd2lsbCBkbyB0aGUKKyAgbm90IHRyaXZpYWwgd29yayB0byByZWJhbGFuY2UgdGhlIHJidHJlZSBpZiBuZWNlc3NhcnkuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICogcmJfc2VhcmNoX3BhZ2VfY2FjaGUoc3RydWN0IGlub2RlICogaW5vZGUsCisJCQkJCQkgdW5zaWduZWQgbG9uZyBvZmZzZXQpCit7CisJc3RydWN0IHJiX25vZGUgKiBuID0gaW5vZGUtPmlfcmJfcGFnZV9jYWNoZS5yYl9ub2RlOworCXN0cnVjdCBwYWdlICogcGFnZTsKKworCXdoaWxlIChuKQorCXsKKwkJcGFnZSA9IHJiX2VudHJ5KG4sIHN0cnVjdCBwYWdlLCByYl9wYWdlX2NhY2hlKTsKKworCQlpZiAob2Zmc2V0IDwgcGFnZS0+b2Zmc2V0KQorCQkJbiA9IG4tPnJiX2xlZnQ7CisJCWVsc2UgaWYgKG9mZnNldCA+IHBhZ2UtPm9mZnNldCkKKwkJCW4gPSBuLT5yYl9yaWdodDsKKwkJZWxzZQorCQkJcmV0dXJuIHBhZ2U7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICogX19yYl9pbnNlcnRfcGFnZV9jYWNoZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwKKwkJCQkJCSAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorCQkJCQkJICAgc3RydWN0IHJiX25vZGUgKiBub2RlKQoreworCXN0cnVjdCByYl9ub2RlICoqIHAgPSAmaW5vZGUtPmlfcmJfcGFnZV9jYWNoZS5yYl9ub2RlOworCXN0cnVjdCByYl9ub2RlICogcGFyZW50ID0gTlVMTDsKKwlzdHJ1Y3QgcGFnZSAqIHBhZ2U7CisKKwl3aGlsZSAoKnApCisJeworCQlwYXJlbnQgPSAqcDsKKwkJcGFnZSA9IHJiX2VudHJ5KHBhcmVudCwgc3RydWN0IHBhZ2UsIHJiX3BhZ2VfY2FjaGUpOworCisJCWlmIChvZmZzZXQgPCBwYWdlLT5vZmZzZXQpCisJCQlwID0gJigqcCktPnJiX2xlZnQ7CisJCWVsc2UgaWYgKG9mZnNldCA+IHBhZ2UtPm9mZnNldCkKKwkJCXAgPSAmKCpwKS0+cmJfcmlnaHQ7CisJCWVsc2UKKwkJCXJldHVybiBwYWdlOworCX0KKworCXJiX2xpbmtfbm9kZShub2RlLCBwYXJlbnQsIHApOworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKiByYl9pbnNlcnRfcGFnZV9jYWNoZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwKKwkJCQkJCSB1bnNpZ25lZCBsb25nIG9mZnNldCwKKwkJCQkJCSBzdHJ1Y3QgcmJfbm9kZSAqIG5vZGUpCit7CisJc3RydWN0IHBhZ2UgKiByZXQ7CisJaWYgKChyZXQgPSBfX3JiX2luc2VydF9wYWdlX2NhY2hlKGlub2RlLCBvZmZzZXQsIG5vZGUpKSkKKwkJZ290byBvdXQ7CisJcmJfaW5zZXJ0X2NvbG9yKG5vZGUsICZpbm9kZS0+aV9yYl9wYWdlX2NhY2hlKTsKKyBvdXQ6CisJcmV0dXJuIHJldDsKK30KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworCisjaWZuZGVmCV9MSU5VWF9SQlRSRUVfSAorI2RlZmluZQlfTElOVVhfUkJUUkVFX0gKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgorCitzdHJ1Y3QgcmJfbm9kZQoreworCXN0cnVjdCByYl9ub2RlICpyYl9wYXJlbnQ7CisJaW50IHJiX2NvbG9yOworI2RlZmluZQlSQl9SRUQJCTAKKyNkZWZpbmUJUkJfQkxBQ0sJMQorCXN0cnVjdCByYl9ub2RlICpyYl9yaWdodDsKKwlzdHJ1Y3QgcmJfbm9kZSAqcmJfbGVmdDsKK307CisKK3N0cnVjdCByYl9yb290Cit7CisJc3RydWN0IHJiX25vZGUgKnJiX25vZGU7Cit9OworCisjZGVmaW5lIFJCX1JPT1QJKHN0cnVjdCByYl9yb290KSB7IE5VTEwsIH0KKyNkZWZpbmUJcmJfZW50cnkocHRyLCB0eXBlLCBtZW1iZXIpIGNvbnRhaW5lcl9vZihwdHIsIHR5cGUsIG1lbWJlcikKKworZXh0ZXJuIHZvaWQgcmJfaW5zZXJ0X2NvbG9yKHN0cnVjdCByYl9ub2RlICosIHN0cnVjdCByYl9yb290ICopOworZXh0ZXJuIHZvaWQgcmJfZXJhc2Uoc3RydWN0IHJiX25vZGUgKiwgc3RydWN0IHJiX3Jvb3QgKik7CisKKy8qIEZpbmQgbG9naWNhbCBuZXh0IGFuZCBwcmV2aW91cyBub2RlcyBpbiBhIHRyZWUgKi8KK2V4dGVybiBzdHJ1Y3QgcmJfbm9kZSAqcmJfbmV4dChzdHJ1Y3QgcmJfbm9kZSAqKTsKK2V4dGVybiBzdHJ1Y3QgcmJfbm9kZSAqcmJfcHJldihzdHJ1Y3QgcmJfbm9kZSAqKTsKK2V4dGVybiBzdHJ1Y3QgcmJfbm9kZSAqcmJfZmlyc3Qoc3RydWN0IHJiX3Jvb3QgKik7CitleHRlcm4gc3RydWN0IHJiX25vZGUgKnJiX2xhc3Qoc3RydWN0IHJiX3Jvb3QgKik7CisKKy8qIEZhc3QgcmVwbGFjZW1lbnQgb2YgYSBzaW5nbGUgbm9kZSB3aXRob3V0IHJlbW92ZS9yZWJhbGFuY2UvYWRkL3JlYmFsYW5jZSAqLworZXh0ZXJuIHZvaWQgcmJfcmVwbGFjZV9ub2RlKHN0cnVjdCByYl9ub2RlICp2aWN0aW0sIHN0cnVjdCByYl9ub2RlICpuZXcsIAorCQkJICAgIHN0cnVjdCByYl9yb290ICpyb290KTsKKworc3RhdGljIGlubGluZSB2b2lkIHJiX2xpbmtfbm9kZShzdHJ1Y3QgcmJfbm9kZSAqIG5vZGUsIHN0cnVjdCByYl9ub2RlICogcGFyZW50LAorCQkJCXN0cnVjdCByYl9ub2RlICoqIHJiX2xpbmspCit7CisJbm9kZS0+cmJfcGFyZW50ID0gcGFyZW50OworCW5vZGUtPnJiX2NvbG9yID0gUkJfUkVEOworCW5vZGUtPnJiX2xlZnQgPSBub2RlLT5yYl9yaWdodCA9IE5VTEw7CisKKwkqcmJfbGluayA9IG5vZGU7Cit9CisKKyNlbmRpZgkvKiBfTElOVVhfUkJUUkVFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmN1cGRhdGUuaCBiL2luY2x1ZGUvbGludXgvcmN1cGRhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDc0NzQzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oCkBAIC0wLDAgKzEsMjcxIEBACisvKgorICogUmVhZC1Db3B5IFVwZGF0ZSBtZWNoYW5pc20gZm9yIG11dHVhbCBleGNsdXNpb24gCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIElCTSBDb3Jwb3JhdGlvbiwgMjAwMQorICoKKyAqIEF1dGhvcjogRGlwYW5rYXIgU2FybWEgPGRpcGFua2FyQGluLmlibS5jb20+CisgKiAKKyAqIEJhc2VkIG9uIHRoZSBvcmlnaW5hbCB3b3JrIGJ5IFBhdWwgTWNLZW5uZXkgPHBhdWwubWNrZW5uZXlAdXMuaWJtLmNvbT4KKyAqIGFuZCBpbnB1dHMgZnJvbSBSdXN0eSBSdXNzZWxsLCBBbmRyZWEgQXJjYW5nZWxpIGFuZCBBbmRpIEtsZWVuLgorICogUGFwZXJzOgorICogaHR0cDovL3d3dy5yZHJvcC5jb20vdXNlcnMvcGF1bG1jay9wYXBlci9yY2xvY2twZGNzcHJvb2YucGRmCisgKiBodHRwOi8vbHNlLnNvdXJjZWZvcmdlLm5ldC9sb2NraW5nL3JjbG9ja19PTFMuMjAwMS4wNS4wMWMuc2MucGRmIChPTFMyMDAxKQorICoKKyAqIEZvciBkZXRhaWxlZCBleHBsYW5hdGlvbiBvZiBSZWFkLUNvcHkgVXBkYXRlIG1lY2hhbmlzbSBzZWUgLQorICogCQlodHRwOi8vbHNlLnNvdXJjZWZvcmdlLm5ldC9sb2NraW5nL3JjdXBkYXRlLmh0bWwKKyAqCisgKi8KKworI2lmbmRlZiBfX0xJTlVYX1JDVVBEQVRFX0gKKyNkZWZpbmUgX19MSU5VWF9SQ1VQREFURV9ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFsb2NrLmg+CisKKy8qKgorICogc3RydWN0IHJjdV9oZWFkIC0gY2FsbGJhY2sgc3RydWN0dXJlIGZvciB1c2Ugd2l0aCBSQ1UKKyAqIEBuZXh0OiBuZXh0IHVwZGF0ZSByZXF1ZXN0cyBpbiBhIGxpc3QKKyAqIEBmdW5jOiBhY3R1YWwgdXBkYXRlIGZ1bmN0aW9uIHRvIGNhbGwgYWZ0ZXIgdGhlIGdyYWNlIHBlcmlvZC4KKyAqLworc3RydWN0IHJjdV9oZWFkIHsKKwlzdHJ1Y3QgcmN1X2hlYWQgKm5leHQ7CisJdm9pZCAoKmZ1bmMpKHN0cnVjdCByY3VfaGVhZCAqaGVhZCk7Cit9OworCisjZGVmaW5lIFJDVV9IRUFEX0lOSVQoaGVhZCkgeyAubmV4dCA9IE5VTEwsIC5mdW5jID0gTlVMTCB9CisjZGVmaW5lIFJDVV9IRUFEKGhlYWQpIHN0cnVjdCByY3VfaGVhZCBoZWFkID0gUkNVX0hFQURfSU5JVChoZWFkKQorI2RlZmluZSBJTklUX1JDVV9IRUFEKHB0cikgZG8geyBcCisgICAgICAgKHB0ciktPm5leHQgPSBOVUxMOyAocHRyKS0+ZnVuYyA9IE5VTEw7IFwKK30gd2hpbGUgKDApCisKKworCisvKiBHbG9iYWwgY29udHJvbCB2YXJpYWJsZXMgZm9yIHJjdXBkYXRlIGNhbGxiYWNrIG1lY2hhbmlzbS4gKi8KK3N0cnVjdCByY3VfY3RybGJsayB7CisJbG9uZwljdXI7CQkvKiBDdXJyZW50IGJhdGNoIG51bWJlci4gICAgICAgICAgICAgICAgICAgICAgKi8KKwlsb25nCWNvbXBsZXRlZDsJLyogTnVtYmVyIG9mIHRoZSBsYXN0IGNvbXBsZXRlZCBiYXRjaCAgICAgICAgICovCisJaW50CW5leHRfcGVuZGluZzsJLyogSXMgdGhlIG5leHQgYmF0Y2ggYWxyZWFkeSB3YWl0aW5nPyAgICAgICAgICovCit9IF9fX19jYWNoZWxpbmVfbWF4YWxpZ25lZF9pbl9zbXA7CisKKy8qIElzIGJhdGNoIGEgYmVmb3JlIGJhdGNoIGIgPyAqLworc3RhdGljIGlubGluZSBpbnQgcmN1X2JhdGNoX2JlZm9yZShsb25nIGEsIGxvbmcgYikKK3sKKyAgICAgICAgcmV0dXJuIChhIC0gYikgPCAwOworfQorCisvKiBJcyBiYXRjaCBhIGFmdGVyIGJhdGNoIGIgPyAqLworc3RhdGljIGlubGluZSBpbnQgcmN1X2JhdGNoX2FmdGVyKGxvbmcgYSwgbG9uZyBiKQoreworICAgICAgICByZXR1cm4gKGEgLSBiKSA+IDA7Cit9CisKKy8qCisgKiBQZXItQ1BVIGRhdGEgZm9yIFJlYWQtQ29weSBVUGRhdGUuCisgKiBueHRsaXN0IC0gbmV3IGNhbGxiYWNrcyBhcmUgYWRkZWQgaGVyZQorICogY3VybGlzdCAtIGN1cnJlbnQgYmF0Y2ggZm9yIHdoaWNoIHF1aWVzY2VudCBjeWNsZSBzdGFydGVkIGlmIGFueQorICovCitzdHJ1Y3QgcmN1X2RhdGEgeworCS8qIDEpIHF1aWVzY2VudCBzdGF0ZSBoYW5kbGluZyA6ICovCisJbG9uZwkJcXVpZXNjYmF0Y2g7ICAgICAvKiBCYXRjaCAjIGZvciBncmFjZSBwZXJpb2QgKi8KKwlpbnQJCXBhc3NlZF9xdWllc2M7CSAvKiBVc2VyLW1vZGUvaWRsZSBsb29wIGV0Yy4gKi8KKwlpbnQJCXFzX3BlbmRpbmc7CSAvKiBjb3JlIHdhaXRzIGZvciBxdWllc2Mgc3RhdGUgKi8KKworCS8qIDIpIGJhdGNoIGhhbmRsaW5nICovCisJbG9uZyAgCSAgICAgICAJYmF0Y2g7ICAgICAgICAgICAvKiBCYXRjaCAjIGZvciBjdXJyZW50IFJDVSBiYXRjaCAqLworCXN0cnVjdCByY3VfaGVhZCAqbnh0bGlzdDsKKwlzdHJ1Y3QgcmN1X2hlYWQgKipueHR0YWlsOworCXN0cnVjdCByY3VfaGVhZCAqY3VybGlzdDsKKwlzdHJ1Y3QgcmN1X2hlYWQgKipjdXJ0YWlsOworCXN0cnVjdCByY3VfaGVhZCAqZG9uZWxpc3Q7CisJc3RydWN0IHJjdV9oZWFkICoqZG9uZXRhaWw7CisJaW50IGNwdTsKK307CisKK0RFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgcmN1X2RhdGEsIHJjdV9kYXRhKTsKK0RFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgcmN1X2RhdGEsIHJjdV9iaF9kYXRhKTsKK2V4dGVybiBzdHJ1Y3QgcmN1X2N0cmxibGsgcmN1X2N0cmxibGs7CitleHRlcm4gc3RydWN0IHJjdV9jdHJsYmxrIHJjdV9iaF9jdHJsYmxrOworCisvKgorICogSW5jcmVtZW50IHRoZSBxdWllc2NlbnQgc3RhdGUgY291bnRlci4KKyAqIFRoZSBjb3VudGVyIGlzIGEgYml0IGRlZ2VuZXJhdGVkOiBXZSBkbyBub3QgbmVlZCB0byBrbm93CisgKiBob3cgbWFueSBxdWllc2NlbnQgc3RhdGVzIHBhc3NlZCwganVzdCBpZiB0aGVyZSB3YXMgYXQgbGVhc3QKKyAqIG9uZSBzaW5jZSB0aGUgc3RhcnQgb2YgdGhlIGdyYWNlIHBlcmlvZC4gVGh1cyBqdXN0IGEgZmxhZy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHJjdV9xc2N0cl9pbmMoaW50IGNwdSkKK3sKKwlzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9ICZwZXJfY3B1KHJjdV9kYXRhLCBjcHUpOworCXJkcC0+cGFzc2VkX3F1aWVzYyA9IDE7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgcmN1X2JoX3FzY3RyX2luYyhpbnQgY3B1KQoreworCXN0cnVjdCByY3VfZGF0YSAqcmRwID0gJnBlcl9jcHUocmN1X2JoX2RhdGEsIGNwdSk7CisJcmRwLT5wYXNzZWRfcXVpZXNjID0gMTsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19yY3VfcGVuZGluZyhzdHJ1Y3QgcmN1X2N0cmxibGsgKnJjcCwKKwkJCQkJCXN0cnVjdCByY3VfZGF0YSAqcmRwKQoreworCS8qIFRoaXMgY3B1IGhhcyBwZW5kaW5nIHJjdSBlbnRyaWVzIGFuZCB0aGUgZ3JhY2UgcGVyaW9kCisJICogZm9yIHRoZW0gaGFzIGNvbXBsZXRlZC4KKwkgKi8KKwlpZiAocmRwLT5jdXJsaXN0ICYmICFyY3VfYmF0Y2hfYmVmb3JlKHJjcC0+Y29tcGxldGVkLCByZHAtPmJhdGNoKSkKKwkJcmV0dXJuIDE7CisKKwkvKiBUaGlzIGNwdSBoYXMgbm8gcGVuZGluZyBlbnRyaWVzLCBidXQgdGhlcmUgYXJlIG5ldyBlbnRyaWVzICovCisJaWYgKCFyZHAtPmN1cmxpc3QgJiYgcmRwLT5ueHRsaXN0KQorCQlyZXR1cm4gMTsKKworCS8qIFRoaXMgY3B1IGhhcyBmaW5pc2hlZCBjYWxsYmFja3MgdG8gaW52b2tlICovCisJaWYgKHJkcC0+ZG9uZWxpc3QpCisJCXJldHVybiAxOworCisJLyogVGhlIHJjdSBjb3JlIHdhaXRzIGZvciBhIHF1aWVzY2VudCBzdGF0ZSBmcm9tIHRoZSBjcHUgKi8KKwlpZiAocmRwLT5xdWllc2NiYXRjaCAhPSByY3AtPmN1ciB8fCByZHAtPnFzX3BlbmRpbmcpCisJCXJldHVybiAxOworCisJLyogbm90aGluZyB0byBkbyAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCByY3VfcGVuZGluZyhpbnQgY3B1KQoreworCXJldHVybiBfX3JjdV9wZW5kaW5nKCZyY3VfY3RybGJsaywgJnBlcl9jcHUocmN1X2RhdGEsIGNwdSkpIHx8CisJCV9fcmN1X3BlbmRpbmcoJnJjdV9iaF9jdHJsYmxrLCAmcGVyX2NwdShyY3VfYmhfZGF0YSwgY3B1KSk7Cit9CisKKy8qKgorICogcmN1X3JlYWRfbG9jayAtIG1hcmsgdGhlIGJlZ2lubmluZyBvZiBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uCisgKgorICogV2hlbiBzeW5jaHJvbml6ZV9rZXJuZWwoKSBpcyBpbnZva2VkIG9uIG9uZSBDUFUgd2hpbGUgb3RoZXIgQ1BVcworICogYXJlIHdpdGhpbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zLCB0aGVuIHRoZQorICogc3luY2hyb25pemVfa2VybmVsKCkgaXMgZ3VhcmFudGVlZCB0byBibG9jayB1bnRpbCBhZnRlciBhbGwgdGhlIG90aGVyCisgKiBDUFVzIGV4aXQgdGhlaXIgY3JpdGljYWwgc2VjdGlvbnMuICBTaW1pbGFybHksIGlmIGNhbGxfcmN1KCkgaXMgaW52b2tlZAorICogb24gb25lIENQVSB3aGlsZSBvdGhlciBDUFVzIGFyZSB3aXRoaW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbAorICogc2VjdGlvbnMsIGludm9jYXRpb24gb2YgdGhlIGNvcnJlc3BvbmRpbmcgUkNVIGNhbGxiYWNrIGlzIGRlZmVycmVkCisgKiB1bnRpbCBhZnRlciB0aGUgYWxsIHRoZSBvdGhlciBDUFVzIGV4aXQgdGhlaXIgY3JpdGljYWwgc2VjdGlvbnMuCisgKgorICogTm90ZSwgaG93ZXZlciwgdGhhdCBSQ1UgY2FsbGJhY2tzIGFyZSBwZXJtaXR0ZWQgdG8gcnVuIGNvbmN1cnJlbnRseQorICogd2l0aCBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zLiAgT25lIHdheSB0aGF0IHRoaXMgY2FuIGhhcHBlbgorICogaXMgdmlhIHRoZSBmb2xsb3dpbmcgc2VxdWVuY2Ugb2YgZXZlbnRzOiAoMSkgQ1BVIDAgZW50ZXJzIGFuIFJDVQorICogcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24sICgyKSBDUFUgMSBpbnZva2VzIGNhbGxfcmN1KCkgdG8gcmVnaXN0ZXIKKyAqIGFuIFJDVSBjYWxsYmFjaywgKDMpIENQVSAwIGV4aXRzIHRoZSBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24sCisgKiAoNCkgQ1BVIDIgZW50ZXJzIGEgUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLCAoNSkgdGhlIFJDVQorICogY2FsbGJhY2sgaXMgaW52b2tlZC4gIFRoaXMgaXMgbGVnYWwsIGJlY2F1c2UgdGhlIFJDVSByZWFkLXNpZGUgY3JpdGljYWwKKyAqIHNlY3Rpb24gdGhhdCB3YXMgcnVubmluZyBjb25jdXJyZW50bHkgd2l0aCB0aGUgY2FsbF9yY3UoKSAoYW5kIHdoaWNoCisgKiB0aGVyZWZvcmUgbWlnaHQgYmUgcmVmZXJlbmNpbmcgc29tZXRoaW5nIHRoYXQgdGhlIGNvcnJlc3BvbmRpbmcgUkNVCisgKiBjYWxsYmFjayB3b3VsZCBmcmVlIHVwKSBoYXMgY29tcGxldGVkIGJlZm9yZSB0aGUgY29ycmVzcG9uZGluZworICogUkNVIGNhbGxiYWNrIGlzIGludm9rZWQuCisgKgorICogUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucyBtYXkgYmUgbmVzdGVkLiAgQW55IGRlZmVycmVkIGFjdGlvbnMKKyAqIHdpbGwgYmUgZGVmZXJyZWQgdW50aWwgdGhlIG91dGVybW9zdCBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24KKyAqIGNvbXBsZXRlcy4KKyAqCisgKiBJdCBpcyBpbGxlZ2FsIHRvIGJsb2NrIHdoaWxlIGluIGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbi4KKyAqLworI2RlZmluZSByY3VfcmVhZF9sb2NrKCkJCXByZWVtcHRfZGlzYWJsZSgpCisKKy8qKgorICogcmN1X3JlYWRfdW5sb2NrIC0gbWFya3MgdGhlIGVuZCBvZiBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uCisgKgorICogU2VlIHJjdV9yZWFkX2xvY2soKSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAqLworI2RlZmluZSByY3VfcmVhZF91bmxvY2soKQlwcmVlbXB0X2VuYWJsZSgpCisKKy8qCisgKiBTbyB3aGVyZSBpcyByY3Vfd3JpdGVfbG9jaygpPyAgSXQgZG9lcyBub3QgZXhpc3QsIGFzIHRoZXJlIGlzIG5vCisgKiB3YXkgZm9yIHdyaXRlcnMgdG8gbG9jayBvdXQgUkNVIHJlYWRlcnMuICBUaGlzIGlzIGEgZmVhdHVyZSwgbm90CisgKiBhIGJ1ZyAtLSB0aGlzIHByb3BlcnR5IGlzIHdoYXQgcHJvdmlkZXMgUkNVJ3MgcGVyZm9ybWFuY2UgYmVuZWZpdHMuCisgKiBPZiBjb3Vyc2UsIHdyaXRlcnMgbXVzdCBjb29yZGluYXRlIHdpdGggZWFjaCBvdGhlci4gIFRoZSBub3JtYWwKKyAqIHNwaW5sb2NrIHByaW1pdGl2ZXMgd29yayB3ZWxsIGZvciB0aGlzLCBidXQgYW55IG90aGVyIHRlY2huaXF1ZSBtYXkgYmUKKyAqIHVzZWQgYXMgd2VsbC4gIFJDVSBkb2VzIG5vdCBjYXJlIGhvdyB0aGUgd3JpdGVycyBrZWVwIG91dCBvZiBlYWNoCisgKiBvdGhlcnMnIHdheSwgYXMgbG9uZyBhcyB0aGV5IGRvIHNvLgorICovCisKKy8qKgorICogcmN1X3JlYWRfbG9ja19iaCAtIG1hcmsgdGhlIGJlZ2lubmluZyBvZiBhIHNvZnRpcnEtb25seSBSQ1UgY3JpdGljYWwgc2VjdGlvbgorICoKKyAqIFRoaXMgaXMgZXF1aXZhbGVudCBvZiByY3VfcmVhZF9sb2NrKCksIGJ1dCB0byBiZSB1c2VkIHdoZW4gdXBkYXRlcworICogYXJlIGJlaW5nIGRvbmUgdXNpbmcgY2FsbF9yY3VfYmgoKS4gU2luY2UgY2FsbF9yY3VfYmgoKSBjYWxsYmFja3MKKyAqIGNvbnNpZGVyIGNvbXBsZXRpb24gb2YgYSBzb2Z0aXJxIGhhbmRsZXIgdG8gYmUgYSBxdWllc2NlbnQgc3RhdGUsCisgKiBhIHByb2Nlc3MgaW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uIG11c3QgYmUgcHJvdGVjdGVkIGJ5CisgKiBkaXNhYmxpbmcgc29mdGlycXMuIFJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucyBpbiBpbnRlcnJ1cHQgY29udGV4dAorICogY2FuIHVzZSBqdXN0IHJjdV9yZWFkX2xvY2soKS4KKyAqCisgKi8KKyNkZWZpbmUgcmN1X3JlYWRfbG9ja19iaCgpCWxvY2FsX2JoX2Rpc2FibGUoKQorCisvKgorICogcmN1X3JlYWRfdW5sb2NrX2JoIC0gbWFya3MgdGhlIGVuZCBvZiBhIHNvZnRpcnEtb25seSBSQ1UgY3JpdGljYWwgc2VjdGlvbgorICoKKyAqIFNlZSByY3VfcmVhZF9sb2NrX2JoKCkgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgKi8KKyNkZWZpbmUgcmN1X3JlYWRfdW5sb2NrX2JoKCkJbG9jYWxfYmhfZW5hYmxlKCkKKworLyoqCisgKiByY3VfZGVyZWZlcmVuY2UgLSBmZXRjaCBhbiBSQ1UtcHJvdGVjdGVkIHBvaW50ZXIgaW4gYW4KKyAqIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbi4gIFRoaXMgcG9pbnRlciBtYXkgbGF0ZXIKKyAqIGJlIHNhZmVseSBkZXJlZmVyZW5jZWQuCisgKgorICogSW5zZXJ0cyBtZW1vcnkgYmFycmllcnMgb24gYXJjaGl0ZWN0dXJlcyB0aGF0IHJlcXVpcmUgdGhlbQorICogKGN1cnJlbnRseSBvbmx5IHRoZSBBbHBoYSksIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgZG9jdW1lbnRzCisgKiBleGFjdGx5IHdoaWNoIHBvaW50ZXJzIGFyZSBwcm90ZWN0ZWQgYnkgUkNVLgorICovCisKKyNkZWZpbmUgcmN1X2RlcmVmZXJlbmNlKHApICAgICAoeyBcCisJCQkJdHlwZW9mKHApIF9fX19fX19fX3AxID0gcDsgXAorCQkJCXNtcF9yZWFkX2JhcnJpZXJfZGVwZW5kcygpOyBcCisJCQkJKF9fX19fX19fX3AxKTsgXAorCQkJCX0pCisKKy8qKgorICogcmN1X2Fzc2lnbl9wb2ludGVyIC0gYXNzaWduIChwdWJsaWNpemUpIGEgcG9pbnRlciB0byBhIG5ld2x5CisgKiBpbml0aWFsaXplZCBzdHJ1Y3R1cmUgdGhhdCB3aWxsIGJlIGRlcmVmZXJlbmNlZCBieSBSQ1UgcmVhZC1zaWRlCisgKiBjcml0aWNhbCBzZWN0aW9ucy4gIFJldHVybnMgdGhlIHZhbHVlIGFzc2lnbmVkLgorICoKKyAqIEluc2VydHMgbWVtb3J5IGJhcnJpZXJzIG9uIGFyY2hpdGVjdHVyZXMgdGhhdCByZXF1aXJlIHRoZW0KKyAqIChwcmV0dHkgbXVjaCBhbGwgb2YgdGhlbSBvdGhlciB0aGFuIHg4NiksIGFuZCBhbHNvIHByZXZlbnRzCisgKiB0aGUgY29tcGlsZXIgZnJvbSByZW9yZGVyaW5nIHRoZSBjb2RlIHRoYXQgaW5pdGlhbGl6ZXMgdGhlCisgKiBzdHJ1Y3R1cmUgYWZ0ZXIgdGhlIHBvaW50ZXIgYXNzaWdubWVudC4gIE1vcmUgaW1wb3J0YW50bHksIHRoaXMKKyAqIGNhbGwgZG9jdW1lbnRzIHdoaWNoIHBvaW50ZXJzIHdpbGwgYmUgZGVyZWZlcmVuY2VkIGJ5IFJDVSByZWFkLXNpZGUKKyAqIGNvZGUuCisgKi8KKworI2RlZmluZSByY3VfYXNzaWduX3BvaW50ZXIocCwgdikJKHsgXAorCQkJCQkJc21wX3dtYigpOyBcCisJCQkJCQkocCkgPSAodik7IFwKKwkJCQkJfSkKKworZXh0ZXJuIHZvaWQgcmN1X2luaXQodm9pZCk7CitleHRlcm4gdm9pZCByY3VfY2hlY2tfY2FsbGJhY2tzKGludCBjcHUsIGludCB1c2VyKTsKK2V4dGVybiB2b2lkIHJjdV9yZXN0YXJ0X2NwdShpbnQgY3B1KTsKKworLyogRXhwb3J0ZWQgaW50ZXJmYWNlcyAqLworZXh0ZXJuIHZvaWQgRkFTVENBTEwoY2FsbF9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkLCAKKwkJCQl2b2lkICgqZnVuYykoc3RydWN0IHJjdV9oZWFkICpoZWFkKSkpOworZXh0ZXJuIHZvaWQgRkFTVENBTEwoY2FsbF9yY3VfYmgoc3RydWN0IHJjdV9oZWFkICpoZWFkLAorCQkJCXZvaWQgKCpmdW5jKShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpKSk7CitleHRlcm4gdm9pZCBzeW5jaHJvbml6ZV9rZXJuZWwodm9pZCk7CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYgLyogX19MSU5VWF9SQ1VQREFURV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JlYm9vdC5oIGIvaW5jbHVkZS9saW51eC9yZWJvb3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjBmYWZjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9yZWJvb3QuaApAQCAtMCwwICsxLDU2IEBACisjaWZuZGVmIF9MSU5VWF9SRUJPT1RfSAorI2RlZmluZSBfTElOVVhfUkVCT09UX0gKKworLyoKKyAqIE1hZ2ljIHZhbHVlcyByZXF1aXJlZCB0byB1c2UgX3JlYm9vdCgpIHN5c3RlbSBjYWxsLgorICovCisKKyNkZWZpbmUJTElOVVhfUkVCT09UX01BR0lDMQkweGZlZTFkZWFkCisjZGVmaW5lCUxJTlVYX1JFQk9PVF9NQUdJQzIJNjcyMjc0NzkzCisjZGVmaW5lCUxJTlVYX1JFQk9PVF9NQUdJQzJBCTg1MDcyMjc4CisjZGVmaW5lCUxJTlVYX1JFQk9PVF9NQUdJQzJCCTM2OTM2NzQ0OAorI2RlZmluZQlMSU5VWF9SRUJPT1RfTUFHSUMyQwk1Mzc5OTMyMTYKKworCisvKgorICogQ29tbWFuZHMgYWNjZXB0ZWQgYnkgdGhlIF9yZWJvb3QoKSBzeXN0ZW0gY2FsbC4KKyAqCisgKiBSRVNUQVJUICAgICBSZXN0YXJ0IHN5c3RlbSB1c2luZyBkZWZhdWx0IGNvbW1hbmQgYW5kIG1vZGUuCisgKiBIQUxUICAgICAgICBTdG9wIE9TIGFuZCBnaXZlIHN5c3RlbSBjb250cm9sIHRvIFJPTSBtb25pdG9yLCBpZiBhbnkuCisgKiBDQURfT04gICAgICBDdHJsLUFsdC1EZWwgc2VxdWVuY2UgY2F1c2VzIFJFU1RBUlQgY29tbWFuZC4KKyAqIENBRF9PRkYgICAgIEN0cmwtQWx0LURlbCBzZXF1ZW5jZSBzZW5kcyBTSUdJTlQgdG8gaW5pdCB0YXNrLgorICogUE9XRVJfT0ZGICAgU3RvcCBPUyBhbmQgcmVtb3ZlIGFsbCBwb3dlciBmcm9tIHN5c3RlbSwgaWYgcG9zc2libGUuCisgKiBSRVNUQVJUMiAgICBSZXN0YXJ0IHN5c3RlbSB1c2luZyBnaXZlbiBjb21tYW5kIHN0cmluZy4KKyAqIFNXX1NVU1BFTkQgIFN1c3BlbmQgc3lzdGVtIHVzaW5nIHNvZnR3YXJlIHN1c3BlbmQgaWYgY29tcGlsZWQgaW4uCisgKiBLRVhFQyAgICAgICBSZXN0YXJ0IHN5c3RlbSB1c2luZyBhIHByZXZpb3VzbHkgbG9hZGVkIExpbnV4IGtlcm5lbAorICovCisKKyNkZWZpbmUJTElOVVhfUkVCT09UX0NNRF9SRVNUQVJUCTB4MDEyMzQ1NjcKKyNkZWZpbmUJTElOVVhfUkVCT09UX0NNRF9IQUxUCQkweENERUYwMTIzCisjZGVmaW5lCUxJTlVYX1JFQk9PVF9DTURfQ0FEX09OCQkweDg5QUJDREVGCisjZGVmaW5lCUxJTlVYX1JFQk9PVF9DTURfQ0FEX09GRgkweDAwMDAwMDAwCisjZGVmaW5lCUxJTlVYX1JFQk9PVF9DTURfUE9XRVJfT0ZGCTB4NDMyMUZFREMKKyNkZWZpbmUJTElOVVhfUkVCT09UX0NNRF9SRVNUQVJUMgkweEExQjJDM0Q0CisjZGVmaW5lCUxJTlVYX1JFQk9PVF9DTURfU1dfU1VTUEVORAkweEQwMDBGQ0UyCisjZGVmaW5lCUxJTlVYX1JFQk9PVF9DTURfS0VYRUMJCTB4NDU1ODQ1NDMKKworCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KKworZXh0ZXJuIGludCByZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICopOworZXh0ZXJuIGludCB1bnJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKik7CisKKworLyoKKyAqIEFyY2hpdGVjdHVyZS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMgb2Ygc3lzX3JlYm9vdCBjb21tYW5kcy4KKyAqLworCitleHRlcm4gdm9pZCBtYWNoaW5lX3Jlc3RhcnQoY2hhciAqY21kKTsKK2V4dGVybiB2b2lkIG1hY2hpbmVfaGFsdCh2b2lkKTsKK2V4dGVybiB2b2lkIG1hY2hpbmVfcG93ZXJfb2ZmKHZvaWQpOworCisjZW5kaWYKKworI2VuZGlmIC8qIF9MSU5VWF9SRUJPT1RfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZWlzZXJmc19hY2wuaCBiL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfYWNsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU3ZTk3MwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfYWNsLmgKQEAgLTAsMCArMSw4OSBAQAorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wb3NpeF9hY2wuaD4KKyNpbmNsdWRlIDxsaW51eC94YXR0cl9hY2wuaD4KKworI2RlZmluZSBSRUlTRVJGU19BQ0xfVkVSU0lPTgkweDAwMDEKKwordHlwZWRlZiBzdHJ1Y3QgeworCV9fdTE2CQllX3RhZzsKKwlfX3UxNgkJZV9wZXJtOworCV9fdTMyCQllX2lkOworfSByZWlzZXJmc19hY2xfZW50cnk7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlfX3UxNgkJZV90YWc7CisJX191MTYJCWVfcGVybTsKK30gcmVpc2VyZnNfYWNsX2VudHJ5X3Nob3J0OworCit0eXBlZGVmIHN0cnVjdCB7CisJX191MzIJCWFfdmVyc2lvbjsKK30gcmVpc2VyZnNfYWNsX2hlYWRlcjsKKworc3RhdGljIGlubGluZSBzaXplX3QgcmVpc2VyZnNfYWNsX3NpemUoaW50IGNvdW50KQoreworCWlmIChjb3VudCA8PSA0KSB7CisJCXJldHVybiBzaXplb2YocmVpc2VyZnNfYWNsX2hlYWRlcikgKworCQkgICAgICAgY291bnQgKiBzaXplb2YocmVpc2VyZnNfYWNsX2VudHJ5X3Nob3J0KTsKKwl9IGVsc2UgeworCQlyZXR1cm4gc2l6ZW9mKHJlaXNlcmZzX2FjbF9oZWFkZXIpICsKKwkJICAgICAgIDQgKiBzaXplb2YocmVpc2VyZnNfYWNsX2VudHJ5X3Nob3J0KSArCisJCSAgICAgICAoY291bnQgLSA0KSAqIHNpemVvZihyZWlzZXJmc19hY2xfZW50cnkpOworCX0KK30KKworc3RhdGljIGlubGluZSBpbnQgcmVpc2VyZnNfYWNsX2NvdW50KHNpemVfdCBzaXplKQoreworCXNzaXplX3QgczsKKwlzaXplIC09IHNpemVvZihyZWlzZXJmc19hY2xfaGVhZGVyKTsKKwlzID0gc2l6ZSAtIDQgKiBzaXplb2YocmVpc2VyZnNfYWNsX2VudHJ5X3Nob3J0KTsKKwlpZiAocyA8IDApIHsKKwkJaWYgKHNpemUgJSBzaXplb2YocmVpc2VyZnNfYWNsX2VudHJ5X3Nob3J0KSkKKwkJCXJldHVybiAtMTsKKwkJcmV0dXJuIHNpemUgLyBzaXplb2YocmVpc2VyZnNfYWNsX2VudHJ5X3Nob3J0KTsKKwl9IGVsc2UgeworCQlpZiAocyAlIHNpemVvZihyZWlzZXJmc19hY2xfZW50cnkpKQorCQkJcmV0dXJuIC0xOworCQlyZXR1cm4gcyAvIHNpemVvZihyZWlzZXJmc19hY2xfZW50cnkpICsgNDsKKwl9Cit9CisKKworI2lmZGVmIENPTkZJR19SRUlTRVJGU19GU19QT1NJWF9BQ0wKK3N0cnVjdCBwb3NpeF9hY2wgKiByZWlzZXJmc19nZXRfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlKTsKK2ludCByZWlzZXJmc19hY2xfY2htb2QgKHN0cnVjdCBpbm9kZSAqaW5vZGUpOworaW50IHJlaXNlcmZzX2luaGVyaXRfZGVmYXVsdF9hY2wgKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUpOworaW50IHJlaXNlcmZzX2NhY2hlX2RlZmF1bHRfYWNsIChzdHJ1Y3QgaW5vZGUgKmRpcik7CitleHRlcm4gaW50IHJlaXNlcmZzX3hhdHRyX3Bvc2l4X2FjbF9pbml0ICh2b2lkKSBfX2luaXQ7CitleHRlcm4gaW50IHJlaXNlcmZzX3hhdHRyX3Bvc2l4X2FjbF9leGl0ICh2b2lkKTsKK2V4dGVybiBzdHJ1Y3QgcmVpc2VyZnNfeGF0dHJfaGFuZGxlciBwb3NpeF9hY2xfZGVmYXVsdF9oYW5kbGVyOworZXh0ZXJuIHN0cnVjdCByZWlzZXJmc194YXR0cl9oYW5kbGVyIHBvc2l4X2FjbF9hY2Nlc3NfaGFuZGxlcjsKKyNlbHNlCisKKyNkZWZpbmUgcmVpc2VyZnNfZ2V0X2FjbCBOVUxMCisjZGVmaW5lIHJlaXNlcmZzX2NhY2hlX2RlZmF1bHRfYWNsKGlub2RlKSAwCisKK3N0YXRpYyBpbmxpbmUgaW50CityZWlzZXJmc194YXR0cl9wb3NpeF9hY2xfaW5pdCAodm9pZCkKK3sKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3JlaXNlcmZzX3hhdHRyX3Bvc2l4X2FjbF9leGl0ICh2b2lkKQoreworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludAorcmVpc2VyZnNfYWNsX2NobW9kIChzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludAorcmVpc2VyZnNfaW5oZXJpdF9kZWZhdWx0X2FjbCAoY29uc3Qgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSkKK3sKKyAgICByZXR1cm4gMDsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzLmggYi9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNjZmY4YgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnMuaApAQCAtMCwwICsxLDIyNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMTk5NiwgMTk5NywgMTk5OCBIYW5zIFJlaXNlciwgc2VlIHJlaXNlcmZzL1JFQURNRSBmb3IgbGljZW5zaW5nIGFuZCBjb3B5cmlnaHQgZGV0YWlscworICovCisKKwkJCQkvKiB0aGlzIGZpbGUgaGFzIGFuIGFtYXppbmdseSBzdHVwaWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwgeXVyYSBwbGVhc2UgZml4IGl0IHRvIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaXNlcmZzLmgsIGFuZCBtZXJnZSBhbGwgdGhlIHJlc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Ygb3VyIC5oIGZpbGVzIHRoYXQgYXJlIGluIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IGludG8gaXQuICAqLworCisKKyNpZm5kZWYgX0xJTlVYX1JFSVNFUl9GU19ICisjZGVmaW5lIF9MSU5VWF9SRUlTRVJfRlNfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CisjaW5jbHVkZSA8bGludXgvcmVpc2VyZnNfZnNfaS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlaXNlcmZzX2ZzX3NiLmg+CisjZW5kaWYKKworLyoKKyAqICBpbmNsdWRlL2xpbnV4L3JlaXNlcl9mcy5oCisgKgorICogIFJlaXNlciBGaWxlIFN5c3RlbSBjb25zdGFudHMgYW5kIHN0cnVjdHVyZXMKKyAqCisgKi8KKworLyogaW4gcmVhZGluZyB0aGUgI2RlZmluZXMsIGl0IG1heSBoZWxwIHRvIHVuZGVyc3RhbmQgdGhhdCB0aGV5IGVtcGxveQorICAgdGhlIGZvbGxvd2luZyBhYmJyZXZpYXRpb25zOgorCisgICBCID0gQnVmZmVyCisgICBJID0gSXRlbSBoZWFkZXIKKyAgIEggPSBIZWlnaHQgd2l0aGluIHRoZSB0cmVlIChzaG91bGQgYmUgY2hhbmdlZCB0byBMRVYpCisgICBOID0gTnVtYmVyIG9mIHRoZSBpdGVtIGluIHRoZSBub2RlCisgICBTVEFUID0gc3RhdCBkYXRhCisgICBERUggPSBEaXJlY3RvcnkgRW50cnkgSGVhZGVyCisgICBFQyA9IEVudHJ5IENvdW50CisgICBFID0gRW50cnkgbnVtYmVyCisgICBVTCA9IFVuc2lnbmVkIExvbmcKKyAgIEJMS0ggPSBCTG9jSyBIZWFkZXIKKyAgIFVORk0gPSBVTkZvck1hdHRlZCBub2RlCisgICBEQyA9IERpc2sgQ2hpbGQKKyAgIFAgPSBQYXRoCisKKyAgIFRoZXNlICNkZWZpbmVzIGFyZSBuYW1lZCBieSBjb25jYXRlbmF0aW5nIHRoZXNlIGFiYnJldmlhdGlvbnMsCisgICB3aGVyZSBmaXJzdCBjb21lcyB0aGUgYXJndW1lbnRzLCBhbmQgbGFzdCBjb21lcyB0aGUgcmV0dXJuIHZhbHVlLAorICAgb2YgdGhlIG1hY3JvLgorCisqLworCisjZGVmaW5lIFVTRV9JTk9ERV9HRU5FUkFUSU9OX0NPVU5URVIKKworI2RlZmluZSBSRUlTRVJGU19QUkVBTExPQ0FURQorI2RlZmluZSBESVNQTEFDRV9ORVdfUEFDS0lOR19MT0NBTElUSUVTCisjZGVmaW5lIFBSRUFMTE9DQVRJT05fU0laRSA5CisKKy8qIG4gbXVzdCBiZSBwb3dlciBvZiAyICovCisjZGVmaW5lIF9ST1VORF9VUCh4LG4pICgoKHgpKyhuKS0xdSkgJiB+KChuKS0xdSkpCisKKy8vIHRvIGJlIG9rIGZvciBhbHBoYSBhbmQgb3RoZXJzIHdlIGhhdmUgdG8gYWxpZ24gc3RydWN0dXJlcyB0byA4IGJ5dGUKKy8vIGJvdW5kYXJ5LgorLy8gRklYTUU6IGRvIG5vdCBjaGFuZ2UgNCBieSBhbnl0aGluZyBlbHNlOiB0aGVyZSBpcyBjb2RlIHdoaWNoIHJlbGllcyBvbiB0aGF0CisjZGVmaW5lIFJPVU5EX1VQKHgpIF9ST1VORF9VUCh4LDhMTCkKKworLyogZGVidWcgbGV2ZWxzLiAgUmlnaHQgbm93LCBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sgbWVhbnMgcHJpbnQgYWxsIGRlYnVnCisqKiBtZXNzYWdlcy4KKyovCisjZGVmaW5lIFJFSVNFUkZTX0RFQlVHX0NPREUgNSAvKiBleHRyYSBtZXNzYWdlcyB0byBoZWxwIGZpbmQvZGVidWcgZXJyb3JzICovIAorCit2b2lkIHJlaXNlcmZzX3dhcm5pbmcgKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgY29uc3QgY2hhciAqIGZtdCwgLi4uKTsKKy8qIGFzc2VydGlvbnMgaGFuZGxpbmcgKi8KKworLyoqIGFsd2F5cyBjaGVjayBhIGNvbmRpdGlvbiBhbmQgcGFuaWMgaWYgaXQncyBmYWxzZS4gKi8KKyNkZWZpbmUgUkFTU0VSVCggY29uZCwgZm9ybWF0LCBhcmdzLi4uICkJCQkJCVwKK2lmKCAhKCBjb25kICkgKSAJCQkJCQkJCVwKKyAgcmVpc2VyZnNfcGFuaWMoIE5VTEwsICJyZWlzZXJmc1slaV06IGFzc2VydGlvbiAiICNjb25kICIgZmFpbGVkIGF0ICIJXAorCQkgIF9fRklMRV9fICI6JWk6JXM6ICIgZm9ybWF0ICJcbiIsCQlcCisJCSAgaW5faW50ZXJydXB0KCkgPyAtMSA6IGN1cnJlbnQgLT4gcGlkLCBfX0xJTkVfXyAsIF9fRlVOQ1RJT05fXyAsICMjYXJncyApCisKKyNpZiBkZWZpbmVkKCBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sgKQorI2RlZmluZSBSRkFMU0UoIGNvbmQsIGZvcm1hdCwgYXJncy4uLiApIFJBU1NFUlQoICEoIGNvbmQgKSwgZm9ybWF0LCAjI2FyZ3MgKQorI2Vsc2UKKyNkZWZpbmUgUkZBTFNFKCBjb25kLCBmb3JtYXQsIGFyZ3MuLi4gKSBkbyB7O30gd2hpbGUoIDAgKQorI2VuZGlmCisKKyNkZWZpbmUgQ09OU1RGIF9fYXR0cmlidXRlX2NvbnN0X18KKy8qCisgKiBEaXNrIERhdGEgU3RydWN0dXJlcworICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1VQRVIgQkxPQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIFN0cnVjdHVyZSBvZiBzdXBlciBibG9jayBvbiBkaXNrLCBhIHZlcnNpb24gb2Ygd2hpY2ggaW4gUkFNIGlzIG9mdGVuIGFjY2Vzc2VkIGFzIFJFSVNFUkZTX1NCKHMpLT5zX3JzCisgKiB0aGUgdmVyc2lvbiBpbiBSQU0gaXMgcGFydCBvZiBhIGxhcmdlciBzdHJ1Y3R1cmUgY29udGFpbmluZyBmaWVsZHMgbmV2ZXIgd3JpdHRlbiB0byBkaXNrLgorICovCisjZGVmaW5lIFVOU0VUX0hBU0ggMCAvLyByZWFkX3N1cGVyIHdpbGwgZ3Vlc3MgYWJvdXQsIHdoYXQgaGFzaCBuYW1lcworICAgICAgICAgICAgICAgICAgICAgLy8gaW4gZGlyZWN0b3JpZXMgd2VyZSBzb3J0ZWQgd2l0aAorI2RlZmluZSBURUFfSEFTSCAgMQorI2RlZmluZSBZVVJBX0hBU0ggMgorI2RlZmluZSBSNV9IQVNIICAgMworI2RlZmluZSBERUZBVUxUX0hBU0ggUjVfSEFTSAorCisKK3N0cnVjdCBqb3VybmFsX3BhcmFtcyB7CisgICAgX191MzIganBfam91cm5hbF8xc3RfYmxvY2s7CSAgICAgIC8qIHdoZXJlIGRvZXMgam91cm5hbCBzdGFydCBmcm9tIG9uIGl0cworCQkJCSAgICAgICAqIGRldmljZSAqLworICAgIF9fdTMyIGpwX2pvdXJuYWxfZGV2OwkgICAgICAvKiBqb3VybmFsIGRldmljZSBzdF9yZGV2ICovCisgICAgX191MzIganBfam91cm5hbF9zaXplOwkgICAgICAvKiBzaXplIG9mIHRoZSBqb3VybmFsICovCisgICAgX191MzIganBfam91cm5hbF90cmFuc19tYXg7CSAgICAgIC8qIG1heCBudW1iZXIgb2YgYmxvY2tzIGluIGEgdHJhbnNhY3Rpb24uICovCisgICAgX191MzIganBfam91cm5hbF9tYWdpYzsgCSAgICAgIC8qIHJhbmRvbSB2YWx1ZSBtYWRlIG9uIGZzIGNyZWF0aW9uICh0aGlzCisJCQkJICAgICAgICogd2FzIHNiX2pvdXJuYWxfYmxvY2tfY291bnQpICovCisgICAgX191MzIganBfam91cm5hbF9tYXhfYmF0Y2g7CSAgICAgIC8qIG1heCBudW1iZXIgb2YgYmxvY2tzIHRvIGJhdGNoIGludG8gYQorCQkJCSAgICAgICAqIHRyYW5zICovCisgICAgX191MzIganBfam91cm5hbF9tYXhfY29tbWl0X2FnZTsgIC8qIGluIHNlY29uZHMsIGhvdyBvbGQgY2FuIGFuIGFzeW5jCisJCQkJICAgICAgICogY29tbWl0IGJlICovCisgICAgX191MzIganBfam91cm5hbF9tYXhfdHJhbnNfYWdlOyAgIC8qIGluIHNlY29uZHMsIGhvdyBvbGQgY2FuIGEgdHJhbnNhY3Rpb24KKwkJCQkgICAgICAgKiBiZSAqLworfTsKKworLyogdGhpcyBpcyB0aGUgc3VwZXIgZnJvbSAzLjUuWCwgd2hlcmUgWCA+PSAxMCAqLworc3RydWN0IHJlaXNlcmZzX3N1cGVyX2Jsb2NrX3YxCit7CisgICAgX191MzIgc19ibG9ja19jb3VudDsJICAgLyogYmxvY2tzIGNvdW50ICAgICAgICAgKi8KKyAgICBfX3UzMiBzX2ZyZWVfYmxvY2tzOyAgICAgICAgICAgLyogZnJlZSBibG9ja3MgY291bnQgICAgKi8KKyAgICBfX3UzMiBzX3Jvb3RfYmxvY2s7ICAgICAgICAgICAgLyogcm9vdCBibG9jayBudW1iZXIgICAgKi8KKyAgICBzdHJ1Y3Qgam91cm5hbF9wYXJhbXMgc19qb3VybmFsOworICAgIF9fdTE2IHNfYmxvY2tzaXplOyAgICAgICAgICAgICAvKiBibG9jayBzaXplICovCisgICAgX191MTYgc19vaWRfbWF4c2l6ZTsJICAgLyogbWF4IHNpemUgb2Ygb2JqZWN0IGlkIGFycmF5LCBzZWUKKwkJCQkgICAgKiBnZXRfb2JqZWN0aWQoKSBjb21tZW50YXJ5ICAqLworICAgIF9fdTE2IHNfb2lkX2N1cnNpemU7CSAgIC8qIGN1cnJlbnQgc2l6ZSBvZiBvYmplY3QgaWQgYXJyYXkgKi8KKyAgICBfX3UxNiBzX3Vtb3VudF9zdGF0ZTsgICAgICAgICAgLyogdGhpcyBpcyBzZXQgdG8gMSB3aGVuIGZpbGVzeXN0ZW0gd2FzCisJCQkJICAgICogdW1vdW50ZWQsIHRvIDIgLSB3aGVuIG5vdCAqLyAgICAKKyAgICBjaGFyIHNfbWFnaWNbMTBdOyAgICAgICAgICAgICAgLyogcmVpc2VyZnMgbWFnaWMgc3RyaW5nIGluZGljYXRlcyB0aGF0CisJCQkJICAgICogZmlsZSBzeXN0ZW0gaXMgcmVpc2VyZnM6CisJCQkJICAgICogIlJlSXNFckZzIiBvciAiUmVJc0VyMkZzIiBvciAiUmVJc0VyM0ZzIiAqLworICAgIF9fdTE2IHNfZnNfc3RhdGU7CSAgICAgICAgICAgLyogaXQgaXMgc2V0IHRvIHVzZWQgYnkgZnNjayB0byBtYXJrIHdoaWNoCisJCQkJICAgICogcGhhc2Ugb2YgcmVidWlsZGluZyBpcyBkb25lICovCisgICAgX191MzIgc19oYXNoX2Z1bmN0aW9uX2NvZGU7ICAgIC8qIGluZGljYXRlLCB3aGF0IGhhc2ggZnVuY3Rpb24gaXMgYmVpbmcgdXNlCisJCQkJICAgICogdG8gc29ydCBuYW1lcyBpbiBhIGRpcmVjdG9yeSovCisgICAgX191MTYgc190cmVlX2hlaWdodDsgICAgICAgICAgIC8qIGhlaWdodCBvZiBkaXNrIHRyZWUgKi8KKyAgICBfX3UxNiBzX2JtYXBfbnI7ICAgICAgICAgICAgICAgLyogYW1vdW50IG9mIGJpdG1hcCBibG9ja3MgbmVlZGVkIHRvIGFkZHJlc3MKKwkJCQkgICAgKiBlYWNoIGJsb2NrIG9mIGZpbGUgc3lzdGVtICovCisgICAgX191MTYgc192ZXJzaW9uOyAgICAgICAgICAgICAgIC8qIHRoaXMgZmllbGQgaXMgb25seSByZWxpYWJsZSBvbiBmaWxlc3lzdGVtCisJCQkJICAgICogd2l0aCBub24tc3RhbmRhcmQgam91cm5hbCAqLworICAgIF9fdTE2IHNfcmVzZXJ2ZWRfZm9yX2pvdXJuYWw7ICAvKiBzaXplIGluIGJsb2NrcyBvZiBqb3VybmFsIGFyZWEgb24gbWFpbgorCQkJCSAgICAqIGRldmljZSwgd2UgbmVlZCB0byBrZWVwIGFmdGVyCisJCQkJICAgICogbWFraW5nIGZzIHdpdGggbm9uLXN0YW5kYXJkIGpvdXJuYWwgKi8JCit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisKKyNkZWZpbmUgU0JfU0laRV9WMSAoc2l6ZW9mKHN0cnVjdCByZWlzZXJmc19zdXBlcl9ibG9ja192MSkpCisKKy8qIHRoaXMgaXMgdGhlIG9uIGRpc2sgc3VwZXIgYmxvY2sgKi8KK3N0cnVjdCByZWlzZXJmc19zdXBlcl9ibG9jaworeworICAgIHN0cnVjdCByZWlzZXJmc19zdXBlcl9ibG9ja192MSBzX3YxOworICAgIF9fdTMyIHNfaW5vZGVfZ2VuZXJhdGlvbjsKKyAgICBfX3UzMiBzX2ZsYWdzOyAgICAgICAgICAgICAgICAgIC8qIFJpZ2h0IG5vdyB1c2VkIG9ubHkgYnkgaW5vZGUtYXR0cmlidXRlcywgaWYgZW5hYmxlZCAqLworICAgIHVuc2lnbmVkIGNoYXIgc191dWlkWzE2XTsgICAgICAgLyogZmlsZXN5c3RlbSB1bmlxdWUgaWRlbnRpZmllciAqLworICAgIHVuc2lnbmVkIGNoYXIgc19sYWJlbFsxNl07ICAgICAgLyogZmlsZXN5c3RlbSB2b2x1bWUgbGFiZWwgKi8KKyAgICBjaGFyIHNfdW51c2VkWzg4XSA7ICAgICAgICAgICAgIC8qIHplcm8gZmlsbGVkIGJ5IG1rcmVpc2VyZnMgYW5kCisJCQkJICAgICAqIHJlaXNlcmZzX2NvbnZlcnRfb2JqZWN0aWRfbWFwX3YxKCkKKwkJCQkgICAgICogc28gYW55IGFkZGl0aW9ucyBtdXN0IGJlIHVwZGF0ZWQKKwkJCQkgICAgICogdGhlcmUgYXMgd2VsbC4gKi8KK30gIF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisKKyNkZWZpbmUgU0JfU0laRSAoc2l6ZW9mKHN0cnVjdCByZWlzZXJmc19zdXBlcl9ibG9jaykpCisKKyNkZWZpbmUgUkVJU0VSRlNfVkVSU0lPTl8xIDAKKyNkZWZpbmUgUkVJU0VSRlNfVkVSU0lPTl8yIDIKKworCisvLyBvbi1kaXNrIHN1cGVyIGJsb2NrIGZpZWxkcyBjb252ZXJ0ZWQgdG8gY3B1IGZvcm0KKyNkZWZpbmUgU0JfRElTS19TVVBFUl9CTE9DSyhzKSAoUkVJU0VSRlNfU0IocyktPnNfcnMpCisjZGVmaW5lIFNCX1YxX0RJU0tfU1VQRVJfQkxPQ0socykgKCYoU0JfRElTS19TVVBFUl9CTE9DSyhzKS0+c192MSkpCisjZGVmaW5lIFNCX0JMT0NLU0laRShzKSBcCisgICAgICAgIGxlMzJfdG9fY3B1ICgoU0JfVjFfRElTS19TVVBFUl9CTE9DSyhzKS0+c19ibG9ja3NpemUpKQorI2RlZmluZSBTQl9CTE9DS19DT1VOVChzKSBcCisgICAgICAgIGxlMzJfdG9fY3B1ICgoU0JfVjFfRElTS19TVVBFUl9CTE9DSyhzKS0+c19ibG9ja19jb3VudCkpCisjZGVmaW5lIFNCX0ZSRUVfQkxPQ0tTKHMpIFwKKyAgICAgICAgbGUzMl90b19jcHUgKChTQl9WMV9ESVNLX1NVUEVSX0JMT0NLKHMpLT5zX2ZyZWVfYmxvY2tzKSkKKyNkZWZpbmUgU0JfUkVJU0VSRlNfTUFHSUMocykgXAorICAgICAgICAoU0JfVjFfRElTS19TVVBFUl9CTE9DSyhzKS0+c19tYWdpYykKKyNkZWZpbmUgU0JfUk9PVF9CTE9DSyhzKSBcCisgICAgICAgIGxlMzJfdG9fY3B1ICgoU0JfVjFfRElTS19TVVBFUl9CTE9DSyhzKS0+c19yb290X2Jsb2NrKSkKKyNkZWZpbmUgU0JfVFJFRV9IRUlHSFQocykgXAorICAgICAgICBsZTE2X3RvX2NwdSAoKFNCX1YxX0RJU0tfU1VQRVJfQkxPQ0socyktPnNfdHJlZV9oZWlnaHQpKQorI2RlZmluZSBTQl9SRUlTRVJGU19TVEFURShzKSBcCisgICAgICAgIGxlMTZfdG9fY3B1ICgoU0JfVjFfRElTS19TVVBFUl9CTE9DSyhzKS0+c191bW91bnRfc3RhdGUpKQorI2RlZmluZSBTQl9WRVJTSU9OKHMpIGxlMTZfdG9fY3B1ICgoU0JfVjFfRElTS19TVVBFUl9CTE9DSyhzKS0+c192ZXJzaW9uKSkKKyNkZWZpbmUgU0JfQk1BUF9OUihzKSBsZTE2X3RvX2NwdSAoKFNCX1YxX0RJU0tfU1VQRVJfQkxPQ0socyktPnNfYm1hcF9ucikpCisKKyNkZWZpbmUgUFVUX1NCX0JMT0NLX0NPVU5UKHMsIHZhbCkgXAorICAgZG8geyBTQl9WMV9ESVNLX1NVUEVSX0JMT0NLKHMpLT5zX2Jsb2NrX2NvdW50ID0gY3B1X3RvX2xlMzIodmFsKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgUFVUX1NCX0ZSRUVfQkxPQ0tTKHMsIHZhbCkgXAorICAgZG8geyBTQl9WMV9ESVNLX1NVUEVSX0JMT0NLKHMpLT5zX2ZyZWVfYmxvY2tzID0gY3B1X3RvX2xlMzIodmFsKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgUFVUX1NCX1JPT1RfQkxPQ0socywgdmFsKSBcCisgICBkbyB7IFNCX1YxX0RJU0tfU1VQRVJfQkxPQ0socyktPnNfcm9vdF9ibG9jayA9IGNwdV90b19sZTMyKHZhbCk7IH0gd2hpbGUgKDApCisjZGVmaW5lIFBVVF9TQl9UUkVFX0hFSUdIVChzLCB2YWwpIFwKKyAgIGRvIHsgU0JfVjFfRElTS19TVVBFUl9CTE9DSyhzKS0+c190cmVlX2hlaWdodCA9IGNwdV90b19sZTE2KHZhbCk7IH0gd2hpbGUgKDApCisjZGVmaW5lIFBVVF9TQl9SRUlTRVJGU19TVEFURShzLCB2YWwpIFwKKyAgIGRvIHsgU0JfVjFfRElTS19TVVBFUl9CTE9DSyhzKS0+c191bW91bnRfc3RhdGUgPSBjcHVfdG9fbGUxNih2YWwpOyB9IHdoaWxlICgwKSAKKyNkZWZpbmUgUFVUX1NCX1ZFUlNJT04ocywgdmFsKSBcCisgICBkbyB7IFNCX1YxX0RJU0tfU1VQRVJfQkxPQ0socyktPnNfdmVyc2lvbiA9IGNwdV90b19sZTE2KHZhbCk7IH0gd2hpbGUgKDApCisjZGVmaW5lIFBVVF9TQl9CTUFQX05SKHMsIHZhbCkgXAorICAgZG8geyBTQl9WMV9ESVNLX1NVUEVSX0JMT0NLKHMpLT5zX2JtYXBfbnIgPSBjcHVfdG9fbGUxNiAodmFsKTsgfSB3aGlsZSAoMCkKKworCisjZGVmaW5lIFNCX09ORElTS19KUChzKSAoJlNCX1YxX0RJU0tfU1VQRVJfQkxPQ0socyktPnNfam91cm5hbCkKKyNkZWZpbmUgU0JfT05ESVNLX0pPVVJOQUxfU0laRShzKSBcCisgICAgICAgICBsZTMyX3RvX2NwdSAoKFNCX09ORElTS19KUChzKS0+anBfam91cm5hbF9zaXplKSkKKyNkZWZpbmUgU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHMpIFwKKyAgICAgICAgIGxlMzJfdG9fY3B1ICgoU0JfT05ESVNLX0pQKHMpLT5qcF9qb3VybmFsXzFzdF9ibG9jaykpCisjZGVmaW5lIFNCX09ORElTS19KT1VSTkFMX0RFVklDRShzKSBcCisgICAgICAgICBsZTMyX3RvX2NwdSAoKFNCX09ORElTS19KUChzKS0+anBfam91cm5hbF9kZXYpKQorI2RlZmluZSBTQl9PTkRJU0tfUkVTRVJWRURfRk9SX0pPVVJOQUwocykgXAorICAgICAgICAgbGUzMl90b19jcHUgKChTQl9WMV9ESVNLX1NVUEVSX0JMT0NLKHMpLT5zX3Jlc2VydmVkX2Zvcl9qb3VybmFsKSkKKworI2RlZmluZSBpc19ibG9ja19pbl9sb2dfb3JfcmVzZXJ2ZWRfYXJlYShzLCBibG9jaykgXAorICAgICAgICAgYmxvY2sgPj0gU0JfSk9VUk5BTF8xc3RfUkVTRVJWRURfQkxPQ0socykgXAorICAgICAgICAgJiYgYmxvY2sgPCBTQl9KT1VSTkFMXzFzdF9SRVNFUlZFRF9CTE9DSyhzKSArICBcCisgICAgICAgICAoKCFpc19yZWlzZXJmc19qcihTQl9ESVNLX1NVUEVSX0JMT0NLKHMpKSA/IFwKKyAgICAgICAgIFNCX09ORElTS19KT1VSTkFMX1NJWkUocykgKyAxIDogU0JfT05ESVNLX1JFU0VSVkVEX0ZPUl9KT1VSTkFMKHMpKSkgCisKKworCisJCQkJLyogdXNlZCBieSBnY2MgKi8KKyNkZWZpbmUgUkVJU0VSRlNfU1VQRVJfTUFHSUMgMHg1MjY1NDk3MworCQkJCS8qIHVzZWQgYnkgZmlsZSBzeXN0ZW0gdXRpbGl0aWVzIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vayBhdCB0aGUgc3VwZXJibG9jaywgZXRjLiAqLworI2RlZmluZSBSRUlTRVJGU19TVVBFUl9NQUdJQ19TVFJJTkcgIlJlSXNFckZzIgorI2RlZmluZSBSRUlTRVIyRlNfU1VQRVJfTUFHSUNfU1RSSU5HICJSZUlzRXIyRnMiCisjZGVmaW5lIFJFSVNFUjJGU19KUl9TVVBFUl9NQUdJQ19TVFJJTkcgIlJlSXNFcjNGcyIKKworaW50IGlzX3JlaXNlcmZzXzNfNSAoc3RydWN0IHJlaXNlcmZzX3N1cGVyX2Jsb2NrICogcnMpOworaW50IGlzX3JlaXNlcmZzXzNfNiAoc3RydWN0IHJlaXNlcmZzX3N1cGVyX2Jsb2NrICogcnMpOworaW50IGlzX3JlaXNlcmZzX2pyIChzdHJ1Y3QgcmVpc2VyZnNfc3VwZXJfYmxvY2sgKiBycyk7CisKKy8qIFJlaXNlckZTIGxlYXZlcyB0aGUgZmlyc3QgNjRrIHVudXNlZCwgc28gdGhhdCBwYXJ0aXRpb24gbGFiZWxzIGhhdmUKKyAgIGVub3VnaCBzcGFjZS4gIElmIHNvbWVvbmUgd2FudHMgdG8gd3JpdGUgYSBmYW5jeSBib290bG9hZGVyIHRoYXQKKyAgIG5lZWRzIG1vcmUgdGhhbiA2NGssIGxldCB1cyBrbm93LCBhbmQgdGhpcyB3aWxsIGJlIGluY3JlYXNlZCBpbiBzaXplLgorICAgVGhpcyBudW1iZXIgbXVzdCBiZSBsYXJnZXIgdGhhbiB0aGFuIHRoZSBsYXJnZXN0IGJsb2NrIHNpemUgb24gYW55CisgICBwbGF0Zm9ybSwgb3IgY29kZSB3aWxsIGJyZWFrLiAgLUhhbnMgKi8KKyNkZWZpbmUgUkVJU0VSRlNfRElTS19PRkZTRVRfSU5fQllURVMgKDY0ICogMTAyNCkKKyNkZWZpbmUgUkVJU0VSRlNfRklSU1RfQkxPQ0sgdW51c2VkX2RlZmluZQorI2RlZmluZSBSRUlTRVJGU19KT1VSTkFMX09GRlNFVF9JTl9CWVRFUyBSRUlTRVJGU19ESVNLX09GRlNFVF9JTl9CWVRFUworCisvKiB0aGUgc3BvdCBmb3IgdGhlIHN1cGVyIGluIHZlcnNpb25zIDMuNSAtIDMuNS4xMCAoaW5jbHVzaXZlKSAqLworI2RlZmluZSBSRUlTRVJGU19PTERfRElTS19PRkZTRVRfSU5fQllURVMgKDggKiAxMDI0KQorCisvLyByZWlzZXJmcyBpbnRlcm5hbCBlcnJvciBjb2RlICh1c2VkIGJ5IHNlYXJjaF9ieV9rZXkgYWRuIGZpeF9ub2RlcykpCisjZGVmaW5lIENBUlJZX09OICAgICAgMAorI2RlZmluZSBSRVBFQVRfU0VBUkNIIC0xCisjZGVmaW5lIElPX0VSUk9SICAgICAgLTIKKyNkZWZpbmUgTk9fRElTS19TUEFDRSAtMworI2RlZmluZSBOT19CQUxBTkNJTkdfTkVFREVEICAoLTQpCisjZGVmaW5lIE5PX01PUkVfVU5VU0VEX0NPTlRJR1VPVVNfQkxPQ0tTICgtNSkKKyNkZWZpbmUgUVVPVEFfRVhDRUVERUQgLTYKKwordHlwZWRlZiBfX3UzMiBiX2Jsb2NrbnJfdDsKK3R5cGVkZWYgX191MzIgdW5wX3Q7CisKK3N0cnVjdCB1bmZtX25vZGVpbmZvIHsKKyAgICB1bnBfdCB1bmZtX25vZGVudW07CisgICAgdW5zaWduZWQgc2hvcnQgdW5mbV9mcmVlc3BhY2U7Cit9OworCisvKiB0aGVyZSBhcmUgdHdvIGZvcm1hdHMgb2Yga2V5czogMy41IGFuZCAzLjYKKyAqLworI2RlZmluZSBLRVlfRk9STUFUXzNfNSAwCisjZGVmaW5lIEtFWV9GT1JNQVRfM182IDEKKworLyogdGhlcmUgYXJlIHR3byBzdGF0IGRhdGFzICovCisjZGVmaW5lIFNUQVRfREFUQV9WMSAwCisjZGVmaW5lIFNUQVRfREFUQV9WMiAxCisKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcmVpc2VyZnNfaW5vZGVfaW5mbyAqUkVJU0VSRlNfSShjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXJldHVybiBjb250YWluZXJfb2YoaW5vZGUsIHN0cnVjdCByZWlzZXJmc19pbm9kZV9pbmZvLCB2ZnNfaW5vZGUpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCByZWlzZXJmc19zYl9pbmZvICpSRUlTRVJGU19TQihjb25zdCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCXJldHVybiBzYi0+c19mc19pbmZvOworfQorCisvKiogdGhpcyBzYXlzIGFib3V0IHZlcnNpb24gb2Yga2V5IG9mIGFsbCBpdGVtcyAoYnV0IHN0YXQgZGF0YSkgdGhlCisgICAgb2JqZWN0IGNvbnNpc3RzIG9mICovCisjZGVmaW5lIGdldF9pbm9kZV9pdGVtX2tleV92ZXJzaW9uKCBpbm9kZSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICgoUkVJU0VSRlNfSShpbm9kZSktPmlfZmxhZ3MgJiBpX2l0ZW1fa2V5X3ZlcnNpb25fbWFzaykgPyBLRVlfRk9STUFUXzNfNiA6IEtFWV9GT1JNQVRfM181KQorCisjZGVmaW5lIHNldF9pbm9kZV9pdGVtX2tleV92ZXJzaW9uKCBpbm9kZSwgdmVyc2lvbiApICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgKHsgaWYoKHZlcnNpb24pPT1LRVlfRk9STUFUXzNfNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBSRUlTRVJGU19JKGlub2RlKS0+aV9mbGFncyB8PSBpX2l0ZW1fa2V5X3ZlcnNpb25fbWFzazsgICAgICBcCisgICAgICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIFJFSVNFUkZTX0koaW5vZGUpLT5pX2ZsYWdzICY9IH5pX2l0ZW1fa2V5X3ZlcnNpb25fbWFzazsgfSkKKworI2RlZmluZSBnZXRfaW5vZGVfc2RfdmVyc2lvbihpbm9kZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoKFJFSVNFUkZTX0koaW5vZGUpLT5pX2ZsYWdzICYgaV9zdGF0X2RhdGFfdmVyc2lvbl9tYXNrKSA/IFNUQVRfREFUQV9WMiA6IFNUQVRfREFUQV9WMSkKKworI2RlZmluZSBzZXRfaW5vZGVfc2RfdmVyc2lvbihpbm9kZSwgdmVyc2lvbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICh7IGlmKCh2ZXJzaW9uKT09U1RBVF9EQVRBX1YyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgUkVJU0VSRlNfSShpbm9kZSktPmlfZmxhZ3MgfD0gaV9zdGF0X2RhdGFfdmVyc2lvbl9tYXNrOyAgICAgXAorICAgICAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBSRUlTRVJGU19JKGlub2RlKS0+aV9mbGFncyAmPSB+aV9zdGF0X2RhdGFfdmVyc2lvbl9tYXNrOyB9KQorCisvKiBUaGlzIGlzIGFuIGFnZ3Jlc3NpdmUgdGFpbCBzdXBwcmVzc2lvbiBwb2xpY3ksIEkgYW0gaG9waW5nIGl0CisgICBpbXByb3ZlcyBvdXIgYmVuY2htYXJrcy4gVGhlIHByaW5jaXBsZSBiZWhpbmQgaXQgaXMgdGhhdCBwZXJjZW50YWdlCisgICBzcGFjZSBzYXZpbmcgaXMgd2hhdCBtYXR0ZXJzLCBub3QgYWJzb2x1dGUgc3BhY2Ugc2F2aW5nLiAgVGhpcyBpcworICAgbm9uLWludHVpdGl2ZSwgYnV0IGl0IGhlbHBzIHRvIHVuZGVyc3RhbmQgaXQgaWYgeW91IGNvbnNpZGVyIHRoYXQgdGhlCisgICBjb3N0IHRvIGFjY2VzcyA0IGJsb2NrcyBpcyBub3QgbXVjaCBtb3JlIHRoYW4gdGhlIGNvc3QgdG8gYWNjZXNzIDEKKyAgIGJsb2NrLCBpZiB5b3UgaGF2ZSB0byBkbyBhIHNlZWsgYW5kIHJvdGF0ZS4gIEEgdGFpbCByaXNrcyBhCisgICBub24tbGluZWFyIGRpc2sgYWNjZXNzIHRoYXQgaXMgc2lnbmlmaWNhbnQgYXMgYSBwZXJjZW50YWdlIG9mIHRvdGFsCisgICB0aW1lIGNvc3QgZm9yIGEgNCBibG9jayBmaWxlIGFuZCBzYXZlcyBhbiBhbW91bnQgb2Ygc3BhY2UgdGhhdCBpcworICAgbGVzcyBzaWduaWZpY2FudCBhcyBhIHBlcmNlbnRhZ2Ugb2Ygc3BhY2UsIG9yIHNvIGdvZXMgdGhlIGh5cG90aGVzaXMuCisgICAtSGFucyAqLworI2RlZmluZSBTVE9SRV9UQUlMX0lOX1VORk1fUzEobl9maWxlX3NpemUsbl90YWlsX3NpemUsbl9ibG9ja19zaXplKSBcCisoXAorICAoIShuX3RhaWxfc2l6ZSkpIHx8IFwKKyAgKCgobl90YWlsX3NpemUpID4gTUFYX0RJUkVDVF9JVEVNX0xFTihuX2Jsb2NrX3NpemUpKSB8fCBcCisgICAoIChuX2ZpbGVfc2l6ZSkgPj0gKG5fYmxvY2tfc2l6ZSkgKiA0ICkgfHwgXAorICAgKCAoIChuX2ZpbGVfc2l6ZSkgPj0gKG5fYmxvY2tfc2l6ZSkgKiAzICkgJiYgXAorICAgICAoIChuX3RhaWxfc2l6ZSkgPj0gICAoTUFYX0RJUkVDVF9JVEVNX0xFTihuX2Jsb2NrX3NpemUpKS80KSApIHx8IFwKKyAgICggKCAobl9maWxlX3NpemUpID49IChuX2Jsb2NrX3NpemUpICogMiApICYmIFwKKyAgICAgKCAobl90YWlsX3NpemUpID49ICAgKE1BWF9ESVJFQ1RfSVRFTV9MRU4obl9ibG9ja19zaXplKSkvMikgKSB8fCBcCisgICAoICggKG5fZmlsZV9zaXplKSA+PSAobl9ibG9ja19zaXplKSApICYmIFwKKyAgICAgKCAobl90YWlsX3NpemUpID49ICAgKE1BWF9ESVJFQ1RfSVRFTV9MRU4obl9ibG9ja19zaXplKSAqIDMpLzQpICkgKSBcCispCisKKy8qIEFub3RoZXIgc3RyYXRlZ3kgZm9yIHRhaWxzLCB0aGlzIG9uZSBtZWFucyBvbmx5IGNyZWF0ZSBhIHRhaWwgaWYgYWxsIHRoZQorICAgZmlsZSB3b3VsZCBmaXQgaW50byBvbmUgRElSRUNUIGl0ZW0uCisgICBQcmltYXJ5IGludGVudGlvbiBmb3IgdGhpcyBvbmUgaXMgdG8gaW5jcmVhc2UgcGVyZm9ybWFuY2UgYnkgZGVjcmVhc2luZworICAgc2Vla2luZy4KKyovICAgCisjZGVmaW5lIFNUT1JFX1RBSUxfSU5fVU5GTV9TMihuX2ZpbGVfc2l6ZSxuX3RhaWxfc2l6ZSxuX2Jsb2NrX3NpemUpIFwKKyhcCisgICghKG5fdGFpbF9zaXplKSkgfHwgXAorICAoKChuX2ZpbGVfc2l6ZSkgPiBNQVhfRElSRUNUX0lURU1fTEVOKG5fYmxvY2tfc2l6ZSkpICkgXAorKQorCisKKworLyoKKyAqIHZhbHVlcyBmb3Igc191bW91bnRfc3RhdGUgZmllbGQKKyAqLworI2RlZmluZSBSRUlTRVJGU19WQUxJRF9GUyAgICAxCisjZGVmaW5lIFJFSVNFUkZTX0VSUk9SX0ZTICAgIDIKKworLy8KKy8vIHRoZXJlIGFyZSA1IGl0ZW0gdHlwZXMgY3VycmVudGx5CisvLworI2RlZmluZSBUWVBFX1NUQVRfREFUQSAwCisjZGVmaW5lIFRZUEVfSU5ESVJFQ1QgMQorI2RlZmluZSBUWVBFX0RJUkVDVCAyCisjZGVmaW5lIFRZUEVfRElSRU5UUlkgMyAKKyNkZWZpbmUgVFlQRV9NQVhUWVBFIDMgCisjZGVmaW5lIFRZUEVfQU5ZIDE1IC8vIEZJWE1FOiBjb21tZW50IGlzIHJlcXVpcmVkCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgS0VZICYgSVRFTSBIRUFEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLy8KKy8vIGRpcmVjdG9yaWVzIHVzZSB0aGlzIGtleSBhcyB3ZWxsIGFzIG9sZCBmaWxlcworLy8KK3N0cnVjdCBvZmZzZXRfdjEgeworICAgIF9fdTMyIGtfb2Zmc2V0OworICAgIF9fdTMyIGtfdW5pcXVlbmVzczsKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKworc3RydWN0IG9mZnNldF92MiB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOCisJICAgIC8qIGxpdHRsZSBlbmRpYW4gdmVyc2lvbiAqLworCSAgICBfX3U2NCBrX29mZnNldDo2MDsKKwkgICAgX191NjQga190eXBlOiA0OworI2Vsc2UKKwkgICAgLyogYmlnIGVuZGlhbiB2ZXJzaW9uICovCisJICAgIF9fdTY0IGtfdHlwZTogNDsKKwkgICAgX191NjQga19vZmZzZXQ6NjA7CisjZW5kaWYKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKworI2lmbmRlZiBfX0xJVFRMRV9FTkRJQU4KK3R5cGVkZWYgdW5pb24geworICAgIHN0cnVjdCBvZmZzZXRfdjIgb2Zmc2V0X3YyOworICAgIF9fdTY0IGxpbmVhcjsKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKSBvZmZzZXRfdjJfZXNhZmVfb3ZlcmxheTsKKworc3RhdGljIGlubGluZSBfX3UxNiBvZmZzZXRfdjJfa190eXBlKCBjb25zdCBzdHJ1Y3Qgb2Zmc2V0X3YyICp2MiApCit7CisgICAgb2Zmc2V0X3YyX2VzYWZlX292ZXJsYXkgdG1wID0gKihjb25zdCBvZmZzZXRfdjJfZXNhZmVfb3ZlcmxheSAqKXYyOworICAgIHRtcC5saW5lYXIgPSBsZTY0X3RvX2NwdSggdG1wLmxpbmVhciApOworICAgIHJldHVybiAodG1wLm9mZnNldF92Mi5rX3R5cGUgPD0gVFlQRV9NQVhUWVBFKT90bXAub2Zmc2V0X3YyLmtfdHlwZTpUWVBFX0FOWTsKK30KKyAKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfb2Zmc2V0X3YyX2tfdHlwZSggc3RydWN0IG9mZnNldF92MiAqdjIsIGludCB0eXBlICkKK3sKKyAgICBvZmZzZXRfdjJfZXNhZmVfb3ZlcmxheSAqdG1wID0gKG9mZnNldF92Ml9lc2FmZV9vdmVybGF5ICopdjI7CisgICAgdG1wLT5saW5lYXIgPSBsZTY0X3RvX2NwdSh0bXAtPmxpbmVhcik7CisgICAgdG1wLT5vZmZzZXRfdjIua190eXBlID0gdHlwZTsKKyAgICB0bXAtPmxpbmVhciA9IGNwdV90b19sZTY0KHRtcC0+bGluZWFyKTsKK30KKyAKK3N0YXRpYyBpbmxpbmUgbG9mZl90IG9mZnNldF92Ml9rX29mZnNldCggY29uc3Qgc3RydWN0IG9mZnNldF92MiAqdjIgKQoreworICAgIG9mZnNldF92Ml9lc2FmZV9vdmVybGF5IHRtcCA9ICooY29uc3Qgb2Zmc2V0X3YyX2VzYWZlX292ZXJsYXkgKil2MjsKKyAgICB0bXAubGluZWFyID0gbGU2NF90b19jcHUoIHRtcC5saW5lYXIgKTsKKyAgICByZXR1cm4gdG1wLm9mZnNldF92Mi5rX29mZnNldDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldF9vZmZzZXRfdjJfa19vZmZzZXQoIHN0cnVjdCBvZmZzZXRfdjIgKnYyLCBsb2ZmX3Qgb2Zmc2V0ICl7CisgICAgb2Zmc2V0X3YyX2VzYWZlX292ZXJsYXkgKnRtcCA9IChvZmZzZXRfdjJfZXNhZmVfb3ZlcmxheSAqKXYyOworICAgIHRtcC0+bGluZWFyID0gbGU2NF90b19jcHUodG1wLT5saW5lYXIpOworICAgIHRtcC0+b2Zmc2V0X3YyLmtfb2Zmc2V0ID0gb2Zmc2V0OworICAgIHRtcC0+bGluZWFyID0gY3B1X3RvX2xlNjQodG1wLT5saW5lYXIpOworfQorI2Vsc2UKKyMgZGVmaW5lIG9mZnNldF92Ml9rX3R5cGUodjIpICAgICAgICAgICAoKHYyKS0+a190eXBlKQorIyBkZWZpbmUgc2V0X29mZnNldF92Ml9rX3R5cGUodjIsdmFsKSAgIChvZmZzZXRfdjJfa190eXBlKHYyKSA9ICh2YWwpKQorIyBkZWZpbmUgb2Zmc2V0X3YyX2tfb2Zmc2V0KHYyKSAgICAgICAgICgodjIpLT5rX29mZnNldCkKKyMgZGVmaW5lIHNldF9vZmZzZXRfdjJfa19vZmZzZXQodjIsdmFsKSAob2Zmc2V0X3YyX2tfb2Zmc2V0KHYyKSA9ICh2YWwpKQorI2VuZGlmCisKKy8qIEtleSBvZiBhbiBpdGVtIGRldGVybWluZXMgaXRzIGxvY2F0aW9uIGluIHRoZSBTK3RyZWUsIGFuZAorICAgaXMgY29tcG9zZWQgb2YgNCBjb21wb25lbnRzICovCitzdHJ1Y3QgcmVpc2VyZnNfa2V5IHsKKyAgICBfX3UzMiBrX2Rpcl9pZDsgICAgLyogcGFja2luZyBsb2NhbGl0eTogYnkgZGVmYXVsdCBwYXJlbnQKKwkJCSAgZGlyZWN0b3J5IG9iamVjdCBpZCAqLworICAgIF9fdTMyIGtfb2JqZWN0aWQ7ICAvKiBvYmplY3QgaWRlbnRpZmllciAqLworICAgIHVuaW9uIHsKKwlzdHJ1Y3Qgb2Zmc2V0X3YxIGtfb2Zmc2V0X3YxOworCXN0cnVjdCBvZmZzZXRfdjIga19vZmZzZXRfdjI7CisgICAgfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpIHU7Cit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisKKworc3RydWN0IGNwdV9rZXkgeworICAgIHN0cnVjdCByZWlzZXJmc19rZXkgb25fZGlza19rZXk7CisgICAgaW50IHZlcnNpb247CisgICAgaW50IGtleV9sZW5ndGg7IC8qIDMgaW4gYWxsIGNhc2VzIGJ1dCBkaXJlY3QyaW5kaXJlY3QgYW5kCisJCSAgICAgICBpbmRpcmVjdDJkaXJlY3QgY29udmVyc2lvbiAqLworfTsKKworLyogT3VyIGZ1bmN0aW9uIGZvciBjb21wYXJpbmcga2V5cyBjYW4gY29tcGFyZSBrZXlzIG9mIGRpZmZlcmVudAorICAgbGVuZ3Rocy4gIEl0IHRha2VzIGFzIGEgcGFyYW1ldGVyIHRoZSBsZW5ndGggb2YgdGhlIGtleXMgaXQgaXMgdG8KKyAgIGNvbXBhcmUuICBUaGVzZSBkZWZpbmVzIGFyZSB1c2VkIGluIGRldGVybWluaW5nIHdoYXQgaXMgdG8gYmUgcGFzc2VkCisgICB0byBpdCBhcyB0aGF0IHBhcmFtZXRlci4gKi8KKyNkZWZpbmUgUkVJU0VSRlNfRlVMTF9LRVlfTEVOICAgICA0CisjZGVmaW5lIFJFSVNFUkZTX1NIT1JUX0tFWV9MRU4gICAgMgorCisvKiBUaGUgcmVzdWx0IG9mIHRoZSBrZXkgY29tcGFyZSAqLworI2RlZmluZSBGSVJTVF9HUkVBVEVSIDEKKyNkZWZpbmUgU0VDT05EX0dSRUFURVIgLTEKKyNkZWZpbmUgS0VZU19JREVOVElDQUwgMAorI2RlZmluZSBLRVlfRk9VTkQgMQorI2RlZmluZSBLRVlfTk9UX0ZPVU5EIDAKKworI2RlZmluZSBLRVlfU0laRSAoc2l6ZW9mKHN0cnVjdCByZWlzZXJmc19rZXkpKQorI2RlZmluZSBTSE9SVF9LRVlfU0laRSAoc2l6ZW9mIChfX3UzMikgKyBzaXplb2YgKF9fdTMyKSkKKworLyogcmV0dXJuIHZhbHVlcyBmb3Igc2VhcmNoX2J5X2tleSBhbmQgY2xvbmVzICovCisjZGVmaW5lIElURU1fRk9VTkQgMQorI2RlZmluZSBJVEVNX05PVF9GT1VORCAwCisjZGVmaW5lIEVOVFJZX0ZPVU5EIDEKKyNkZWZpbmUgRU5UUllfTk9UX0ZPVU5EIDAKKyNkZWZpbmUgRElSRUNUT1JZX05PVF9GT1VORCAtMQorI2RlZmluZSBSRUdVTEFSX0ZJTEVfRk9VTkQgLTIKKyNkZWZpbmUgRElSRUNUT1JZX0ZPVU5EIC0zCisjZGVmaW5lIEJZVEVfRk9VTkQgMQorI2RlZmluZSBCWVRFX05PVF9GT1VORCAwCisjZGVmaW5lIEZJTEVfTk9UX0ZPVU5EIC0xCisKKyNkZWZpbmUgUE9TSVRJT05fRk9VTkQgMQorI2RlZmluZSBQT1NJVElPTl9OT1RfRk9VTkQgMAorCisvLyByZXR1cm4gdmFsdWVzIGZvciByZWlzZXJmc19maW5kX2VudHJ5IGFuZCBzZWFyY2hfYnlfZW50cnlfa2V5CisjZGVmaW5lIE5BTUVfRk9VTkQgMQorI2RlZmluZSBOQU1FX05PVF9GT1VORCAwCisjZGVmaW5lIEdPVE9fUFJFVklPVVNfSVRFTSAyCisjZGVmaW5lIE5BTUVfRk9VTkRfSU5WSVNJQkxFIDMKKworLyogIEV2ZXJ5dGhpbmcgaW4gdGhlIGZpbGVzeXN0ZW0gaXMgc3RvcmVkIGFzIGEgc2V0IG9mIGl0ZW1zLiAgVGhlCisgICAgaXRlbSBoZWFkIGNvbnRhaW5zIHRoZSBrZXkgb2YgdGhlIGl0ZW0sIGl0cyBmcmVlIHNwYWNlIChmb3IKKyAgICBpbmRpcmVjdCBpdGVtcykgYW5kIHNwZWNpZmllcyB0aGUgbG9jYXRpb24gb2YgdGhlIGl0ZW0gaXRzZWxmCisgICAgd2l0aGluIHRoZSBibG9jay4gICovCisKK3N0cnVjdCBpdGVtX2hlYWQKK3sKKwkvKiBFdmVyeXRoaW5nIGluIHRoZSB0cmVlIGlzIGZvdW5kIGJ5IHNlYXJjaGluZyBmb3IgaXQgYmFzZWQgb24KKwkgKiBpdHMga2V5LiovCisJc3RydWN0IHJlaXNlcmZzX2tleSBpaF9rZXk7CisJdW5pb24geworCQkvKiBUaGUgZnJlZSBzcGFjZSBpbiB0aGUgbGFzdCB1bmZvcm1hdHRlZCBub2RlIG9mIGFuCisJCSAgIGluZGlyZWN0IGl0ZW0gaWYgdGhpcyBpcyBhbiBpbmRpcmVjdCBpdGVtLiAgVGhpcworCQkgICBlcXVhbHMgMHhGRkZGIGlmZiB0aGlzIGlzIGEgZGlyZWN0IGl0ZW0gb3Igc3RhdCBkYXRhCisJCSAgIGl0ZW0uIE5vdGUgdGhhdCB0aGUga2V5LCBub3QgdGhpcyBmaWVsZCwgaXMgdXNlZCB0bworCQkgICBkZXRlcm1pbmUgdGhlIGl0ZW0gdHlwZSwgYW5kIHRodXMgd2hpY2ggZmllbGQgdGhpcworCQkgICB1bmlvbiBjb250YWlucy4gKi8KKwkJX191MTYgaWhfZnJlZV9zcGFjZV9yZXNlcnZlZDsgCisJCS8qIElmZiB0aGlzIGlzIGEgZGlyZWN0b3J5IGl0ZW0sIHRoaXMgZmllbGQgZXF1YWxzIHRoZQorCQkgICBudW1iZXIgb2YgZGlyZWN0b3J5IGVudHJpZXMgaW4gdGhlIGRpcmVjdG9yeSBpdGVtLiAqLworCQlfX3UxNiBpaF9lbnRyeV9jb3VudDsgCisJfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpIHU7CisJX191MTYgaWhfaXRlbV9sZW47ICAgICAgICAgICAvKiB0b3RhbCBzaXplIG9mIHRoZSBpdGVtIGJvZHkgKi8KKwlfX3UxNiBpaF9pdGVtX2xvY2F0aW9uOyAgICAgIC8qIGFuIG9mZnNldCB0byB0aGUgaXRlbSBib2R5CisJCQkJICAgICAgKiB3aXRoaW4gdGhlIGJsb2NrICovCisJX191MTYgaWhfdmVyc2lvbjsJICAgICAvKiAwIGZvciBhbGwgb2xkIGl0ZW1zLCAyIGZvciBuZXcKKwkJCQkJb25lcy4gSGlnaGVzdCBiaXQgaXMgc2V0IGJ5IGZzY2sKKwkJCQkJdGVtcG9yYXJ5LCBjbGVhbmVkIGFmdGVyIGFsbAorCQkJCQlkb25lICovCit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisvKiBzaXplIG9mIGl0ZW0gaGVhZGVyICAgICAqLworI2RlZmluZSBJSF9TSVpFIChzaXplb2Yoc3RydWN0IGl0ZW1faGVhZCkpCisKKyNkZWZpbmUgaWhfZnJlZV9zcGFjZShpaCkgICAgICAgICAgICBsZTE2X3RvX2NwdSgoaWgpLT51LmloX2ZyZWVfc3BhY2VfcmVzZXJ2ZWQpCisjZGVmaW5lIGloX3ZlcnNpb24oaWgpICAgICAgICAgICAgICAgbGUxNl90b19jcHUoKGloKS0+aWhfdmVyc2lvbikKKyNkZWZpbmUgaWhfZW50cnlfY291bnQoaWgpICAgICAgICAgICBsZTE2X3RvX2NwdSgoaWgpLT51LmloX2VudHJ5X2NvdW50KQorI2RlZmluZSBpaF9sb2NhdGlvbihpaCkgICAgICAgICAgICAgIGxlMTZfdG9fY3B1KChpaCktPmloX2l0ZW1fbG9jYXRpb24pCisjZGVmaW5lIGloX2l0ZW1fbGVuKGloKSAgICAgICAgICAgICAgbGUxNl90b19jcHUoKGloKS0+aWhfaXRlbV9sZW4pCisKKyNkZWZpbmUgcHV0X2loX2ZyZWVfc3BhY2UoaWgsIHZhbCkgICBkbyB7IChpaCktPnUuaWhfZnJlZV9zcGFjZV9yZXNlcnZlZCA9IGNwdV90b19sZTE2KHZhbCk7IH0gd2hpbGUoMCkKKyNkZWZpbmUgcHV0X2loX3ZlcnNpb24oaWgsIHZhbCkgICAgICBkbyB7IChpaCktPmloX3ZlcnNpb24gPSBjcHVfdG9fbGUxNih2YWwpOyB9IHdoaWxlICgwKQorI2RlZmluZSBwdXRfaWhfZW50cnlfY291bnQoaWgsIHZhbCkgIGRvIHsgKGloKS0+dS5paF9lbnRyeV9jb3VudCA9IGNwdV90b19sZTE2KHZhbCk7IH0gd2hpbGUgKDApCisjZGVmaW5lIHB1dF9paF9sb2NhdGlvbihpaCwgdmFsKSAgICAgZG8geyAoaWgpLT5paF9pdGVtX2xvY2F0aW9uID0gY3B1X3RvX2xlMTYodmFsKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgcHV0X2loX2l0ZW1fbGVuKGloLCB2YWwpICAgICBkbyB7IChpaCktPmloX2l0ZW1fbGVuID0gY3B1X3RvX2xlMTYodmFsKTsgfSB3aGlsZSAoMCkKKworCisjZGVmaW5lIHVucmVhY2hhYmxlX2l0ZW0oaWgpIChpaF92ZXJzaW9uKGloKSAmICgxIDw8IDE1KSkKKworI2RlZmluZSBnZXRfaWhfZnJlZV9zcGFjZShpaCkgKGloX3ZlcnNpb24gKGloKSA9PSBLRVlfRk9STUFUXzNfNiA/IDAgOiBpaF9mcmVlX3NwYWNlIChpaCkpCisjZGVmaW5lIHNldF9paF9mcmVlX3NwYWNlKGloLHZhbCkgcHV0X2loX2ZyZWVfc3BhY2UoKGloKSwgKChpaF92ZXJzaW9uKGloKSA9PSBLRVlfRk9STUFUXzNfNikgPyAwIDogKHZhbCkpKQorCisvKiB0aGVzZSBvcGVyYXRlIG9uIGluZGlyZWN0IGl0ZW1zLCB3aGVyZSB5b3UndmUgZ290IGFuIGFycmF5IG9mIGludHMKKyoqIGF0IGEgcG9zc2libHkgdW5hbGlnbmVkIGxvY2F0aW9uLiAgVGhlc2UgYXJlIGEgbm9vcCBvbiBpYTMyCisqKiAKKyoqIHAgaXMgdGhlIGFycmF5IG9mIF9fdTMyLCBpIGlzIHRoZSBpbmRleCBpbnRvIHRoZSBhcnJheSwgdiBpcyB0aGUgdmFsdWUKKyoqIHRvIHN0b3JlIHRoZXJlLgorKi8KKyNkZWZpbmUgZ2V0X2Jsb2NrX251bShwLCBpKSBsZTMyX3RvX2NwdShnZXRfdW5hbGlnbmVkKChwKSArIChpKSkpCisjZGVmaW5lIHB1dF9ibG9ja19udW0ocCwgaSwgdikgcHV0X3VuYWxpZ25lZChjcHVfdG9fbGUzMih2KSwgKHApICsgKGkpKQorCisvLworLy8gaW4gb2xkIHZlcnNpb24gdW5pcXVlbmVzcyBmaWVsZCBzaG93cyBrZXkgdHlwZQorLy8KKyNkZWZpbmUgVjFfU0RfVU5JUVVFTkVTUyAwCisjZGVmaW5lIFYxX0lORElSRUNUX1VOSVFVRU5FU1MgMHhmZmZmZmZmZQorI2RlZmluZSBWMV9ESVJFQ1RfVU5JUVVFTkVTUyAweGZmZmZmZmZmCisjZGVmaW5lIFYxX0RJUkVOVFJZX1VOSVFVRU5FU1MgNTAwCisjZGVmaW5lIFYxX0FOWV9VTklRVUVORVNTIDU1NSAvLyBGSVhNRTogY29tbWVudCBpcyByZXF1aXJlZAorCisvLworLy8gaGVyZSBhcmUgY29udmVyc2lvbiByb3V0aW5lcworLy8KK3N0YXRpYyBpbmxpbmUgaW50IHVuaXF1ZW5lc3MydHlwZSAoX191MzIgdW5pcXVlbmVzcykgQ09OU1RGOworc3RhdGljIGlubGluZSBpbnQgdW5pcXVlbmVzczJ0eXBlIChfX3UzMiB1bmlxdWVuZXNzKQoreworICAgIHN3aXRjaCAoKGludCl1bmlxdWVuZXNzKSB7CisgICAgY2FzZSBWMV9TRF9VTklRVUVORVNTOiByZXR1cm4gVFlQRV9TVEFUX0RBVEE7CisgICAgY2FzZSBWMV9JTkRJUkVDVF9VTklRVUVORVNTOiByZXR1cm4gVFlQRV9JTkRJUkVDVDsKKyAgICBjYXNlIFYxX0RJUkVDVF9VTklRVUVORVNTOiByZXR1cm4gVFlQRV9ESVJFQ1Q7CisgICAgY2FzZSBWMV9ESVJFTlRSWV9VTklRVUVORVNTOiByZXR1cm4gVFlQRV9ESVJFTlRSWTsKKyAgICBkZWZhdWx0OgorCSAgICByZWlzZXJmc193YXJuaW5nIChOVUxMLCAidnMtNTAwOiB1bmtub3duIHVuaXF1ZW5lc3MgJWQiLAorCQkJICAgICAgdW5pcXVlbmVzcyk7CisJY2FzZSBWMV9BTllfVU5JUVVFTkVTUzoKKwkgICAgcmV0dXJuIFRZUEVfQU5ZOworICAgIH0KK30KKworc3RhdGljIGlubGluZSBfX3UzMiB0eXBlMnVuaXF1ZW5lc3MgKGludCB0eXBlKSBDT05TVEY7CitzdGF0aWMgaW5saW5lIF9fdTMyIHR5cGUydW5pcXVlbmVzcyAoaW50IHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBUWVBFX1NUQVRfREFUQTogcmV0dXJuIFYxX1NEX1VOSVFVRU5FU1M7CisgICAgY2FzZSBUWVBFX0lORElSRUNUOiByZXR1cm4gVjFfSU5ESVJFQ1RfVU5JUVVFTkVTUzsKKyAgICBjYXNlIFRZUEVfRElSRUNUOiByZXR1cm4gVjFfRElSRUNUX1VOSVFVRU5FU1M7CisgICAgY2FzZSBUWVBFX0RJUkVOVFJZOiByZXR1cm4gVjFfRElSRU5UUllfVU5JUVVFTkVTUzsKKyAgICBkZWZhdWx0OgorCSAgICByZWlzZXJmc193YXJuaW5nIChOVUxMLCAidnMtNTAxOiB1bmtub3duIHR5cGUgJWQiLCB0eXBlKTsKKwljYXNlIFRZUEVfQU5ZOgorCSAgICByZXR1cm4gVjFfQU5ZX1VOSVFVRU5FU1M7CisgICAgfQorfQorCisvLworLy8ga2V5IGlzIHBvaW50ZXIgdG8gb24gZGlzayBrZXkgd2hpY2ggaXMgc3RvcmVkIGluIGxlLCByZXN1bHQgaXMgY3B1LAorLy8gdGhlcmUgaXMgbm8gd2F5IHRvIGdldCB2ZXJzaW9uIG9mIG9iamVjdCBmcm9tIGtleSwgc28sIHByb3ZpZGUKKy8vIHZlcnNpb24gdG8gdGhlc2UgZGVmaW5lcworLy8KK3N0YXRpYyBpbmxpbmUgbG9mZl90IGxlX2tleV9rX29mZnNldCAoaW50IHZlcnNpb24sIGNvbnN0IHN0cnVjdCByZWlzZXJmc19rZXkgKiBrZXkpCit7CisgICAgcmV0dXJuICh2ZXJzaW9uID09IEtFWV9GT1JNQVRfM181KSA/CisgICAgICAgIGxlMzJfdG9fY3B1KCBrZXktPnUua19vZmZzZXRfdjEua19vZmZzZXQgKSA6CisJb2Zmc2V0X3YyX2tfb2Zmc2V0KCAmKGtleS0+dS5rX29mZnNldF92MikgKTsKK30KKworc3RhdGljIGlubGluZSBsb2ZmX3QgbGVfaWhfa19vZmZzZXQgKGNvbnN0IHN0cnVjdCBpdGVtX2hlYWQgKiBpaCkKK3sKKyAgICByZXR1cm4gbGVfa2V5X2tfb2Zmc2V0IChpaF92ZXJzaW9uIChpaCksICYoaWgtPmloX2tleSkpOworfQorCitzdGF0aWMgaW5saW5lIGxvZmZfdCBsZV9rZXlfa190eXBlIChpbnQgdmVyc2lvbiwgY29uc3Qgc3RydWN0IHJlaXNlcmZzX2tleSAqIGtleSkKK3sKKyAgICByZXR1cm4gKHZlcnNpb24gPT0gS0VZX0ZPUk1BVF8zXzUpID8KKyAgICAgICAgdW5pcXVlbmVzczJ0eXBlKCBsZTMyX3RvX2NwdSgga2V5LT51Lmtfb2Zmc2V0X3YxLmtfdW5pcXVlbmVzcykpIDoKKwlvZmZzZXRfdjJfa190eXBlKCAmKGtleS0+dS5rX29mZnNldF92MikgKTsKK30KKworc3RhdGljIGlubGluZSBsb2ZmX3QgbGVfaWhfa190eXBlIChjb25zdCBzdHJ1Y3QgaXRlbV9oZWFkICogaWgpCit7CisgICAgcmV0dXJuIGxlX2tleV9rX3R5cGUgKGloX3ZlcnNpb24gKGloKSwgJihpaC0+aWhfa2V5KSk7Cit9CisKKworc3RhdGljIGlubGluZSB2b2lkIHNldF9sZV9rZXlfa19vZmZzZXQgKGludCB2ZXJzaW9uLCBzdHJ1Y3QgcmVpc2VyZnNfa2V5ICoga2V5LCBsb2ZmX3Qgb2Zmc2V0KQoreworICAgICh2ZXJzaW9uID09IEtFWV9GT1JNQVRfM181KSA/CisgICAgICAgICh2b2lkKShrZXktPnUua19vZmZzZXRfdjEua19vZmZzZXQgPSBjcHVfdG9fbGUzMiAob2Zmc2V0KSkgOiAvKiBqZG0gY2hlY2sgKi8KKwkodm9pZCkoc2V0X29mZnNldF92Ml9rX29mZnNldCggJihrZXktPnUua19vZmZzZXRfdjIpLCBvZmZzZXQgKSk7Cit9CisKKworc3RhdGljIGlubGluZSB2b2lkIHNldF9sZV9paF9rX29mZnNldCAoc3RydWN0IGl0ZW1faGVhZCAqIGloLCBsb2ZmX3Qgb2Zmc2V0KQoreworICAgIHNldF9sZV9rZXlfa19vZmZzZXQgKGloX3ZlcnNpb24gKGloKSwgJihpaC0+aWhfa2V5KSwgb2Zmc2V0KTsKK30KKworCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2xlX2tleV9rX3R5cGUgKGludCB2ZXJzaW9uLCBzdHJ1Y3QgcmVpc2VyZnNfa2V5ICoga2V5LCBpbnQgdHlwZSkKK3sKKyAgICAodmVyc2lvbiA9PSBLRVlfRk9STUFUXzNfNSkgPworICAgICAgICAodm9pZCkoa2V5LT51Lmtfb2Zmc2V0X3YxLmtfdW5pcXVlbmVzcyA9IGNwdV90b19sZTMyKHR5cGUydW5pcXVlbmVzcyh0eXBlKSkpOgorCSh2b2lkKShzZXRfb2Zmc2V0X3YyX2tfdHlwZSggJihrZXktPnUua19vZmZzZXRfdjIpLCB0eXBlICkpOworfQorc3RhdGljIGlubGluZSB2b2lkIHNldF9sZV9paF9rX3R5cGUgKHN0cnVjdCBpdGVtX2hlYWQgKiBpaCwgaW50IHR5cGUpCit7CisgICAgc2V0X2xlX2tleV9rX3R5cGUgKGloX3ZlcnNpb24gKGloKSwgJihpaC0+aWhfa2V5KSwgdHlwZSk7Cit9CisKKworI2RlZmluZSBpc19kaXJlbnRyeV9sZV9rZXkodmVyc2lvbixrZXkpIChsZV9rZXlfa190eXBlICh2ZXJzaW9uLCBrZXkpID09IFRZUEVfRElSRU5UUlkpCisjZGVmaW5lIGlzX2RpcmVjdF9sZV9rZXkodmVyc2lvbixrZXkpIChsZV9rZXlfa190eXBlICh2ZXJzaW9uLCBrZXkpID09IFRZUEVfRElSRUNUKQorI2RlZmluZSBpc19pbmRpcmVjdF9sZV9rZXkodmVyc2lvbixrZXkpIChsZV9rZXlfa190eXBlICh2ZXJzaW9uLCBrZXkpID09IFRZUEVfSU5ESVJFQ1QpCisjZGVmaW5lIGlzX3N0YXRkYXRhX2xlX2tleSh2ZXJzaW9uLGtleSkgKGxlX2tleV9rX3R5cGUgKHZlcnNpb24sIGtleSkgPT0gVFlQRV9TVEFUX0RBVEEpCisKKy8vCisvLyBpdGVtIGhlYWRlciBoYXMgdmVyc2lvbi4KKy8vCisjZGVmaW5lIGlzX2RpcmVudHJ5X2xlX2loKGloKSBpc19kaXJlbnRyeV9sZV9rZXkgKGloX3ZlcnNpb24gKGloKSwgJigoaWgpLT5paF9rZXkpKQorI2RlZmluZSBpc19kaXJlY3RfbGVfaWgoaWgpIGlzX2RpcmVjdF9sZV9rZXkgKGloX3ZlcnNpb24gKGloKSwgJigoaWgpLT5paF9rZXkpKQorI2RlZmluZSBpc19pbmRpcmVjdF9sZV9paChpaCkgaXNfaW5kaXJlY3RfbGVfa2V5IChpaF92ZXJzaW9uKGloKSwgJigoaWgpLT5paF9rZXkpKQorI2RlZmluZSBpc19zdGF0ZGF0YV9sZV9paChpaCkgaXNfc3RhdGRhdGFfbGVfa2V5IChpaF92ZXJzaW9uIChpaCksICYoKGloKS0+aWhfa2V5KSkKKworCisKKy8vCisvLyBrZXkgaXMgcG9pbnRlciB0byBjcHUga2V5LCByZXN1bHQgaXMgY3B1CisvLworc3RhdGljIGlubGluZSBsb2ZmX3QgY3B1X2tleV9rX29mZnNldCAoY29uc3Qgc3RydWN0IGNwdV9rZXkgKiBrZXkpCit7CisgICAgcmV0dXJuIChrZXktPnZlcnNpb24gPT0gS0VZX0ZPUk1BVF8zXzUpID8KKyAgICAgICAga2V5LT5vbl9kaXNrX2tleS51Lmtfb2Zmc2V0X3YxLmtfb2Zmc2V0IDoKKwlrZXktPm9uX2Rpc2tfa2V5LnUua19vZmZzZXRfdjIua19vZmZzZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgbG9mZl90IGNwdV9rZXlfa190eXBlIChjb25zdCBzdHJ1Y3QgY3B1X2tleSAqIGtleSkKK3sKKyAgICByZXR1cm4gKGtleS0+dmVyc2lvbiA9PSBLRVlfRk9STUFUXzNfNSkgPworICAgICAgICB1bmlxdWVuZXNzMnR5cGUgKGtleS0+b25fZGlza19rZXkudS5rX29mZnNldF92MS5rX3VuaXF1ZW5lc3MpIDoKKwlrZXktPm9uX2Rpc2tfa2V5LnUua19vZmZzZXRfdjIua190eXBlOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2NwdV9rZXlfa19vZmZzZXQgKHN0cnVjdCBjcHVfa2V5ICoga2V5LCBsb2ZmX3Qgb2Zmc2V0KQoreworICAgIChrZXktPnZlcnNpb24gPT0gS0VZX0ZPUk1BVF8zXzUpID8KKyAgICAgICAgKGtleS0+b25fZGlza19rZXkudS5rX29mZnNldF92MS5rX29mZnNldCA9IG9mZnNldCkgOgorCShrZXktPm9uX2Rpc2tfa2V5LnUua19vZmZzZXRfdjIua19vZmZzZXQgPSBvZmZzZXQpOworfQorCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfY3B1X2tleV9rX3R5cGUgKHN0cnVjdCBjcHVfa2V5ICoga2V5LCBpbnQgdHlwZSkKK3sKKyAgICAoa2V5LT52ZXJzaW9uID09IEtFWV9GT1JNQVRfM181KSA/CisgICAgICAgIChrZXktPm9uX2Rpc2tfa2V5LnUua19vZmZzZXRfdjEua191bmlxdWVuZXNzID0gdHlwZTJ1bmlxdWVuZXNzICh0eXBlKSk6CisJKGtleS0+b25fZGlza19rZXkudS5rX29mZnNldF92Mi5rX3R5cGUgPSB0eXBlKTsKK30KKworCitzdGF0aWMgaW5saW5lIHZvaWQgY3B1X2tleV9rX29mZnNldF9kZWMgKHN0cnVjdCBjcHVfa2V5ICoga2V5KQoreworICAgIGlmIChrZXktPnZlcnNpb24gPT0gS0VZX0ZPUk1BVF8zXzUpCisJa2V5LT5vbl9kaXNrX2tleS51Lmtfb2Zmc2V0X3YxLmtfb2Zmc2V0IC0tOworICAgIGVsc2UKKwlrZXktPm9uX2Rpc2tfa2V5LnUua19vZmZzZXRfdjIua19vZmZzZXQgLS07Cit9CisKKworI2RlZmluZSBpc19kaXJlbnRyeV9jcHVfa2V5KGtleSkgKGNwdV9rZXlfa190eXBlIChrZXkpID09IFRZUEVfRElSRU5UUlkpCisjZGVmaW5lIGlzX2RpcmVjdF9jcHVfa2V5KGtleSkgKGNwdV9rZXlfa190eXBlIChrZXkpID09IFRZUEVfRElSRUNUKQorI2RlZmluZSBpc19pbmRpcmVjdF9jcHVfa2V5KGtleSkgKGNwdV9rZXlfa190eXBlIChrZXkpID09IFRZUEVfSU5ESVJFQ1QpCisjZGVmaW5lIGlzX3N0YXRkYXRhX2NwdV9rZXkoa2V5KSAoY3B1X2tleV9rX3R5cGUgKGtleSkgPT0gVFlQRV9TVEFUX0RBVEEpCisKKworLyogYXJlIHRoZXNlIHVzZWQgPyAqLworI2RlZmluZSBpc19kaXJlbnRyeV9jcHVfaWgoaWgpIChpc19kaXJlbnRyeV9jcHVfa2V5ICgmKChpaCktPmloX2tleSkpKQorI2RlZmluZSBpc19kaXJlY3RfY3B1X2loKGloKSAoaXNfZGlyZWN0X2NwdV9rZXkgKCYoKGloKS0+aWhfa2V5KSkpCisjZGVmaW5lIGlzX2luZGlyZWN0X2NwdV9paChpaCkgKGlzX2luZGlyZWN0X2NwdV9rZXkgKCYoKGloKS0+aWhfa2V5KSkpCisjZGVmaW5lIGlzX3N0YXRkYXRhX2NwdV9paChpaCkgKGlzX3N0YXRkYXRhX2NwdV9rZXkgKCYoKGloKS0+aWhfa2V5KSkpCisKKworCisKKworI2RlZmluZSBJX0tfS0VZX0lOX0lURU0ocF9zX2loLCBwX3Nfa2V5LCBuX2Jsb2Nrc2l6ZSkgXAorICAgICggISBDT01QX1NIT1JUX0tFWVMocF9zX2loLCBwX3Nfa2V5KSAmJiBcCisgICAgICAgICAgSV9PRkZfQllURV9JTl9JVEVNKHBfc19paCwga19vZmZzZXQgKHBfc19rZXkpLCBuX2Jsb2Nrc2l6ZSkgKQorCisvKiBtYXhpbWFsIGxlbmd0aCBvZiBpdGVtICovIAorI2RlZmluZSBNQVhfSVRFTV9MRU4oYmxvY2tfc2l6ZSkgKGJsb2NrX3NpemUgLSBCTEtIX1NJWkUgLSBJSF9TSVpFKQorI2RlZmluZSBNSU5fSVRFTV9MRU4gMQorCisKKy8qIG9iamVjdCBpZGVudGlmaWVyIGZvciByb290IGRpciAqLworI2RlZmluZSBSRUlTRVJGU19ST09UX09CSkVDVElEIDIKKyNkZWZpbmUgUkVJU0VSRlNfUk9PVF9QQVJFTlRfT0JKRUNUSUQgMQorZXh0ZXJuIHN0cnVjdCByZWlzZXJmc19rZXkgcm9vdF9rZXk7CisKKworCisKKy8qIAorICogUGljdHVyZSByZXByZXNlbnRzIGEgbGVhZiBvZiB0aGUgUyt0cmVlCisgKiAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisgKiB8ICAgICAgfCAgQXJyYXkgb2YgICAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfAorICogfEJsb2NrIHwgIE9iamVjdC1JdGVtICB8ICAgICAgRiByIGUgZSAgICAgIHwgIE9iamVjdHMtIHwKKyAqIHwgaGVhZCB8ICBIZWFkZXJzICAgICAgfCAgICAgUyBwIGEgYyBlICAgICB8ICAgSXRlbXMgICB8CisgKiB8X19fX19ffF9fX19fX19fX19fX19fX3xfX19fX19fX19fX19fX19fX19ffF9fX19fX19fX19ffAorICovCisKKy8qIEhlYWRlciBvZiBhIGRpc2sgYmxvY2suICBNb3JlIHByZWNpc2VseSwgaGVhZGVyIG9mIGEgZm9ybWF0dGVkIGxlYWYKKyAgIG9yIGludGVybmFsIG5vZGUsIGFuZCBub3QgdGhlIGhlYWRlciBvZiBhbiB1bmZvcm1hdHRlZCBub2RlLiAqLworc3RydWN0IGJsb2NrX2hlYWQgeyAgICAgICAKKyAgX191MTYgYmxrX2xldmVsOyAgICAgICAgLyogTGV2ZWwgb2YgYSBibG9jayBpbiB0aGUgdHJlZS4gKi8KKyAgX191MTYgYmxrX25yX2l0ZW07ICAgICAgLyogTnVtYmVyIG9mIGtleXMvaXRlbXMgaW4gYSBibG9jay4gKi8KKyAgX191MTYgYmxrX2ZyZWVfc3BhY2U7ICAgLyogQmxvY2sgZnJlZSBzcGFjZSBpbiBieXRlcy4gKi8KKyAgX191MTYgYmxrX3Jlc2VydmVkOworCQkJCS8qIGR1bXAgdGhpcyBpbiB2NC9wbGFuQSAqLworICBzdHJ1Y3QgcmVpc2VyZnNfa2V5ICBibGtfcmlnaHRfZGVsaW1fa2V5OyAvKiBrZXB0IG9ubHkgZm9yIGNvbXBhdGliaWxpdHkgKi8KK307CisKKyNkZWZpbmUgQkxLSF9TSVpFICAgICAgICAgICAgICAgICAgICAgKHNpemVvZihzdHJ1Y3QgYmxvY2tfaGVhZCkpCisjZGVmaW5lIGJsa2hfbGV2ZWwocF9ibGtoKSAgICAgICAgICAgIChsZTE2X3RvX2NwdSgocF9ibGtoKS0+YmxrX2xldmVsKSkKKyNkZWZpbmUgYmxraF9ucl9pdGVtKHBfYmxraCkgICAgICAgICAgKGxlMTZfdG9fY3B1KChwX2Jsa2gpLT5ibGtfbnJfaXRlbSkpCisjZGVmaW5lIGJsa2hfZnJlZV9zcGFjZShwX2Jsa2gpICAgICAgIChsZTE2X3RvX2NwdSgocF9ibGtoKS0+YmxrX2ZyZWVfc3BhY2UpKQorI2RlZmluZSBibGtoX3Jlc2VydmVkKHBfYmxraCkgICAgICAgICAobGUxNl90b19jcHUoKHBfYmxraCktPmJsa19yZXNlcnZlZCkpCisjZGVmaW5lIHNldF9ibGtoX2xldmVsKHBfYmxraCx2YWwpICAgICgocF9ibGtoKS0+YmxrX2xldmVsID0gY3B1X3RvX2xlMTYodmFsKSkKKyNkZWZpbmUgc2V0X2Jsa2hfbnJfaXRlbShwX2Jsa2gsdmFsKSAgKChwX2Jsa2gpLT5ibGtfbnJfaXRlbSA9IGNwdV90b19sZTE2KHZhbCkpCisjZGVmaW5lIHNldF9ibGtoX2ZyZWVfc3BhY2UocF9ibGtoLHZhbCkgKChwX2Jsa2gpLT5ibGtfZnJlZV9zcGFjZSA9IGNwdV90b19sZTE2KHZhbCkpCisjZGVmaW5lIHNldF9ibGtoX3Jlc2VydmVkKHBfYmxraCx2YWwpICgocF9ibGtoKS0+YmxrX3Jlc2VydmVkID0gY3B1X3RvX2xlMTYodmFsKSkKKyNkZWZpbmUgYmxraF9yaWdodF9kZWxpbV9rZXkocF9ibGtoKSAgKChwX2Jsa2gpLT5ibGtfcmlnaHRfZGVsaW1fa2V5KQorI2RlZmluZSBzZXRfYmxraF9yaWdodF9kZWxpbV9rZXkocF9ibGtoLHZhbCkgICgocF9ibGtoKS0+YmxrX3JpZ2h0X2RlbGltX2tleSA9IHZhbCkKKworLyoKKyAqIHZhbHVlcyBmb3IgYmxrX2xldmVsIGZpZWxkIG9mIHRoZSBzdHJ1Y3QgYmxvY2tfaGVhZAorICovCisKKyNkZWZpbmUgRlJFRV9MRVZFTCAwIC8qIHdoZW4gbm9kZSBnZXRzIHJlbW92ZWQgZnJvbSB0aGUgdHJlZSBpdHMKKwkJCWJsa19sZXZlbCBpcyBzZXQgdG8gRlJFRV9MRVZFTC4gSXQgaXMgdGhlbgorCQkJdXNlZCB0byBzZWUgd2hldGhlciB0aGUgbm9kZSBpcyBzdGlsbCBpbiB0aGUKKwkJCXRyZWUgKi8KKworI2RlZmluZSBESVNLX0xFQUZfTk9ERV9MRVZFTCAgMSAvKiBMZWFmIG5vZGUgbGV2ZWwuKi8KKworLyogR2l2ZW4gdGhlIGJ1ZmZlciBoZWFkIG9mIGEgZm9ybWF0dGVkIG5vZGUsIHJlc29sdmUgdG8gdGhlIGJsb2NrIGhlYWQgb2YgdGhhdCBub2RlLiAqLworI2RlZmluZSBCX0JMS19IRUFEKHBfc19iaCkgICAgICAgICAgICAoKHN0cnVjdCBibG9ja19oZWFkICopKChwX3NfYmgpLT5iX2RhdGEpKQorLyogTnVtYmVyIG9mIGl0ZW1zIHRoYXQgYXJlIGluIGJ1ZmZlci4gKi8KKyNkZWZpbmUgQl9OUl9JVEVNUyhwX3NfYmgpICAgICAgICAgICAgKGJsa2hfbnJfaXRlbShCX0JMS19IRUFEKHBfc19iaCkpKQorI2RlZmluZSBCX0xFVkVMKHBfc19iaCkgICAgICAgICAgICAgICAoYmxraF9sZXZlbChCX0JMS19IRUFEKHBfc19iaCkpKQorI2RlZmluZSBCX0ZSRUVfU1BBQ0UocF9zX2JoKSAgICAgICAgICAoYmxraF9mcmVlX3NwYWNlKEJfQkxLX0hFQUQocF9zX2JoKSkpCisKKyNkZWZpbmUgUFVUX0JfTlJfSVRFTVMocF9zX2JoLHZhbCkgICAgZG8geyBzZXRfYmxraF9ucl9pdGVtKEJfQkxLX0hFQUQocF9zX2JoKSx2YWwpOyB9IHdoaWxlICgwKQorI2RlZmluZSBQVVRfQl9MRVZFTChwX3NfYmgsdmFsKSAgICAgICBkbyB7IHNldF9ibGtoX2xldmVsKEJfQkxLX0hFQUQocF9zX2JoKSx2YWwpOyB9IHdoaWxlICgwKQorI2RlZmluZSBQVVRfQl9GUkVFX1NQQUNFKHBfc19iaCx2YWwpICBkbyB7IHNldF9ibGtoX2ZyZWVfc3BhY2UoQl9CTEtfSEVBRChwX3NfYmgpLHZhbCk7IH0gd2hpbGUgKDApCisKKworLyogR2V0IHJpZ2h0IGRlbGltaXRpbmcga2V5LiAtLSBsaXR0bGUgZW5kaWFuICovCisjZGVmaW5lIEJfUFJJR0hUX0RFTElNX0tFWShwX3NfYmgpICAgKCYoYmxrX3JpZ2h0X2RlbGltX2tleShCX0JMS19IRUFEKHBfc19iaCkpCisKKy8qIERvZXMgdGhlIGJ1ZmZlciBjb250YWluIGEgZGlzayBsZWFmLiAqLworI2RlZmluZSBCX0lTX0lURU1TX0xFVkVMKHBfc19iaCkgICAgIChCX0xFVkVMKHBfc19iaCkgPT0gRElTS19MRUFGX05PREVfTEVWRUwpCisKKy8qIERvZXMgdGhlIGJ1ZmZlciBjb250YWluIGEgZGlzayBpbnRlcm5hbCBub2RlICovCisjZGVmaW5lIEJfSVNfS0VZU19MRVZFTChwX3NfYmgpICAgICAgKEJfTEVWRUwocF9zX2JoKSA+IERJU0tfTEVBRl9OT0RFX0xFVkVMIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgQl9MRVZFTChwX3NfYmgpIDw9IE1BWF9IRUlHSFQpCisKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1RBVCBEQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvLworLy8gb2xkIHN0YXQgZGF0YSBpcyAzMiBieXRlcyBsb25nLiBXZSBhcmUgZ29pbmcgdG8gZGlzdGluZ3Vpc2ggbmV3IG9uZSBieQorLy8gZGlmZmVyZW50IHNpemUKKy8vCitzdHJ1Y3Qgc3RhdF9kYXRhX3YxCit7CisgICAgX191MTYgc2RfbW9kZTsJLyogZmlsZSB0eXBlLCBwZXJtaXNzaW9ucyAqLworICAgIF9fdTE2IHNkX25saW5rOwkvKiBudW1iZXIgb2YgaGFyZCBsaW5rcyAqLworICAgIF9fdTE2IHNkX3VpZDsJCS8qIG93bmVyICovCisgICAgX191MTYgc2RfZ2lkOwkJLyogZ3JvdXAgKi8KKyAgICBfX3UzMiBzZF9zaXplOwkvKiBmaWxlIHNpemUgKi8KKyAgICBfX3UzMiBzZF9hdGltZTsJLyogdGltZSBvZiBsYXN0IGFjY2VzcyAqLworICAgIF9fdTMyIHNkX210aW1lOwkvKiB0aW1lIGZpbGUgd2FzIGxhc3QgbW9kaWZpZWQgICovCisgICAgX191MzIgc2RfY3RpbWU7CS8qIHRpbWUgaW5vZGUgKHN0YXQgZGF0YSkgd2FzIGxhc3QgY2hhbmdlZCAoZXhjZXB0IGNoYW5nZXMgdG8gc2RfYXRpbWUgYW5kIHNkX210aW1lKSAqLworICAgIHVuaW9uIHsKKwlfX3UzMiBzZF9yZGV2OworCV9fdTMyIHNkX2Jsb2NrczsJLyogbnVtYmVyIG9mIGJsb2NrcyBmaWxlIHVzZXMgKi8KKyAgICB9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkgdTsKKyAgICBfX3UzMiBzZF9maXJzdF9kaXJlY3RfYnl0ZTsgLyogZmlyc3QgYnl0ZSBvZiBmaWxlIHdoaWNoIGlzIHN0b3JlZAorCQkJCSAgIGluIGEgZGlyZWN0IGl0ZW06IGV4Y2VwdCB0aGF0IGlmIGl0CisJCQkJICAgZXF1YWxzIDEgaXQgaXMgYSBzeW1saW5rIGFuZCBpZiBpdAorCQkJCSAgIGVxdWFscyB+KF9fdTMyKTAgdGhlcmUgaXMgbm8KKwkJCQkgICBkaXJlY3QgaXRlbS4gIFRoZSBleGlzdGVuY2Ugb2YgdGhpcworCQkJCSAgIGZpZWxkIHJlYWxseSBncmF0ZXMgb24gbWUuIExldCdzCisJCQkJICAgcmVwbGFjZSBpdCB3aXRoIGEgbWFjcm8gYmFzZWQgb24KKwkJCQkgICBzZF9zaXplIGFuZCBvdXIgdGFpbCBzdXBwcmVzc2lvbgorCQkJCSAgIHBvbGljeS4gIFNvbWVkYXkuICAtSGFucyAqLworfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworCisjZGVmaW5lIFNEX1YxX1NJWkUgICAgICAgICAgICAgIChzaXplb2Yoc3RydWN0IHN0YXRfZGF0YV92MSkpCisjZGVmaW5lIHN0YXRfZGF0YV92MShpaCkgICAgICAgIChpaF92ZXJzaW9uIChpaCkgPT0gS0VZX0ZPUk1BVF8zXzUpCisjZGVmaW5lIHNkX3YxX21vZGUoc2RwKSAgICAgICAgIChsZTE2X3RvX2NwdSgoc2RwKS0+c2RfbW9kZSkpCisjZGVmaW5lIHNldF9zZF92MV9tb2RlKHNkcCx2KSAgICgoc2RwKS0+c2RfbW9kZSA9IGNwdV90b19sZTE2KHYpKQorI2RlZmluZSBzZF92MV9ubGluayhzZHApICAgICAgICAobGUxNl90b19jcHUoKHNkcCktPnNkX25saW5rKSkKKyNkZWZpbmUgc2V0X3NkX3YxX25saW5rKHNkcCx2KSAgKChzZHApLT5zZF9ubGluayA9IGNwdV90b19sZTE2KHYpKQorI2RlZmluZSBzZF92MV91aWQoc2RwKSAgICAgICAgICAobGUxNl90b19jcHUoKHNkcCktPnNkX3VpZCkpCisjZGVmaW5lIHNldF9zZF92MV91aWQoc2RwLHYpICAgICgoc2RwKS0+c2RfdWlkID0gY3B1X3RvX2xlMTYodikpCisjZGVmaW5lIHNkX3YxX2dpZChzZHApICAgICAgICAgIChsZTE2X3RvX2NwdSgoc2RwKS0+c2RfZ2lkKSkKKyNkZWZpbmUgc2V0X3NkX3YxX2dpZChzZHAsdikgICAgKChzZHApLT5zZF9naWQgPSBjcHVfdG9fbGUxNih2KSkKKyNkZWZpbmUgc2RfdjFfc2l6ZShzZHApICAgICAgICAgKGxlMzJfdG9fY3B1KChzZHApLT5zZF9zaXplKSkKKyNkZWZpbmUgc2V0X3NkX3YxX3NpemUoc2RwLHYpICAgKChzZHApLT5zZF9zaXplID0gY3B1X3RvX2xlMzIodikpCisjZGVmaW5lIHNkX3YxX2F0aW1lKHNkcCkgICAgICAgIChsZTMyX3RvX2NwdSgoc2RwKS0+c2RfYXRpbWUpKQorI2RlZmluZSBzZXRfc2RfdjFfYXRpbWUoc2RwLHYpICAoKHNkcCktPnNkX2F0aW1lID0gY3B1X3RvX2xlMzIodikpCisjZGVmaW5lIHNkX3YxX210aW1lKHNkcCkgICAgICAgIChsZTMyX3RvX2NwdSgoc2RwKS0+c2RfbXRpbWUpKQorI2RlZmluZSBzZXRfc2RfdjFfbXRpbWUoc2RwLHYpICAoKHNkcCktPnNkX210aW1lID0gY3B1X3RvX2xlMzIodikpCisjZGVmaW5lIHNkX3YxX2N0aW1lKHNkcCkgICAgICAgIChsZTMyX3RvX2NwdSgoc2RwKS0+c2RfY3RpbWUpKQorI2RlZmluZSBzZXRfc2RfdjFfY3RpbWUoc2RwLHYpICAoKHNkcCktPnNkX2N0aW1lID0gY3B1X3RvX2xlMzIodikpCisjZGVmaW5lIHNkX3YxX3JkZXYoc2RwKSAgICAgICAgIChsZTMyX3RvX2NwdSgoc2RwKS0+dS5zZF9yZGV2KSkKKyNkZWZpbmUgc2V0X3NkX3YxX3JkZXYoc2RwLHYpICAgKChzZHApLT51LnNkX3JkZXYgPSBjcHVfdG9fbGUzMih2KSkKKyNkZWZpbmUgc2RfdjFfYmxvY2tzKHNkcCkgICAgICAgKGxlMzJfdG9fY3B1KChzZHApLT51LnNkX2Jsb2NrcykpCisjZGVmaW5lIHNldF9zZF92MV9ibG9ja3Moc2RwLHYpICgoc2RwKS0+dS5zZF9ibG9ja3MgPSBjcHVfdG9fbGUzMih2KSkKKyNkZWZpbmUgc2RfdjFfZmlyc3RfZGlyZWN0X2J5dGUoc2RwKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsZTMyX3RvX2NwdSgoc2RwKS0+c2RfZmlyc3RfZGlyZWN0X2J5dGUpKQorI2RlZmluZSBzZXRfc2RfdjFfZmlyc3RfZGlyZWN0X2J5dGUoc2RwLHYpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChzZHApLT5zZF9maXJzdF9kaXJlY3RfYnl0ZSA9IGNwdV90b19sZTMyKHYpKQorCisjaW5jbHVkZSA8bGludXgvZXh0Ml9mcy5oPgorCisvKiBpbm9kZSBmbGFncyBzdG9yZWQgaW4gc2RfYXR0cnMgKG5lZSBzZF9yZXNlcnZlZCkgKi8KKworLyogd2Ugd2FudCBjb21tb24gZmxhZ3MgdG8gaGF2ZSB0aGUgc2FtZSB2YWx1ZXMgYXMgaW4gZXh0MiwKKyAgIHNvIGNoYXR0cigxKSB3aWxsIHdvcmsgd2l0aG91dCBwcm9ibGVtcyAqLworI2RlZmluZSBSRUlTRVJGU19JTU1VVEFCTEVfRkwgRVhUMl9JTU1VVEFCTEVfRkwKKyNkZWZpbmUgUkVJU0VSRlNfQVBQRU5EX0ZMICAgIEVYVDJfQVBQRU5EX0ZMCisjZGVmaW5lIFJFSVNFUkZTX1NZTkNfRkwgICAgICBFWFQyX1NZTkNfRkwKKyNkZWZpbmUgUkVJU0VSRlNfTk9BVElNRV9GTCAgIEVYVDJfTk9BVElNRV9GTAorI2RlZmluZSBSRUlTRVJGU19OT0RVTVBfRkwgICAgRVhUMl9OT0RVTVBfRkwKKyNkZWZpbmUgUkVJU0VSRlNfU0VDUk1fRkwgICAgIEVYVDJfU0VDUk1fRkwKKyNkZWZpbmUgUkVJU0VSRlNfVU5STV9GTCAgICAgIEVYVDJfVU5STV9GTAorI2RlZmluZSBSRUlTRVJGU19DT01QUl9GTCAgICAgRVhUMl9DT01QUl9GTAorI2RlZmluZSBSRUlTRVJGU19OT1RBSUxfRkwgICAgRVhUMl9OT1RBSUxfRkwKKworLyogcGVyc2lzdGVudCBmbGFncyB0aGF0IGZpbGUgaW5oZXJpdHMgZnJvbSB0aGUgcGFyZW50IGRpcmVjdG9yeSAqLworI2RlZmluZSBSRUlTRVJGU19JTkhFUklUX01BU0sgKCBSRUlTRVJGU19JTU1VVEFCTEVfRkwgfAlcCisJCQkJUkVJU0VSRlNfU1lOQ19GTCB8CVwKKwkJCQlSRUlTRVJGU19OT0FUSU1FX0ZMIHwJXAorCQkJCVJFSVNFUkZTX05PRFVNUF9GTCB8CVwKKwkJCQlSRUlTRVJGU19TRUNSTV9GTCB8CVwKKwkJCQlSRUlTRVJGU19DT01QUl9GTCB8CVwKKwkJCQlSRUlTRVJGU19OT1RBSUxfRkwgKQorCisvKiBTdGF0IERhdGEgb24gZGlzayAocmVpc2VyZnMgdmVyc2lvbiBvZiBVRlMgZGlzayBpbm9kZSBtaW51cyB0aGUKKyAgIGFkZHJlc3MgYmxvY2tzKSAqLworc3RydWN0IHN0YXRfZGF0YSB7CisgICAgX191MTYgc2RfbW9kZTsJLyogZmlsZSB0eXBlLCBwZXJtaXNzaW9ucyAqLworICAgIF9fdTE2IHNkX2F0dHJzOyAgICAgLyogcGVyc2lzdGVudCBpbm9kZSBmbGFncyAqLworICAgIF9fdTMyIHNkX25saW5rOwkvKiBudW1iZXIgb2YgaGFyZCBsaW5rcyAqLworICAgIF9fdTY0IHNkX3NpemU7CS8qIGZpbGUgc2l6ZSAqLworICAgIF9fdTMyIHNkX3VpZDsJCS8qIG93bmVyICovCisgICAgX191MzIgc2RfZ2lkOwkJLyogZ3JvdXAgKi8KKyAgICBfX3UzMiBzZF9hdGltZTsJLyogdGltZSBvZiBsYXN0IGFjY2VzcyAqLworICAgIF9fdTMyIHNkX210aW1lOwkvKiB0aW1lIGZpbGUgd2FzIGxhc3QgbW9kaWZpZWQgICovCisgICAgX191MzIgc2RfY3RpbWU7CS8qIHRpbWUgaW5vZGUgKHN0YXQgZGF0YSkgd2FzIGxhc3QgY2hhbmdlZCAoZXhjZXB0IGNoYW5nZXMgdG8gc2RfYXRpbWUgYW5kIHNkX210aW1lKSAqLworICAgIF9fdTMyIHNkX2Jsb2NrczsKKyAgICB1bmlvbiB7CisJX191MzIgc2RfcmRldjsKKwlfX3UzMiBzZF9nZW5lcmF0aW9uOworICAgICAgLy9fX3UzMiBzZF9maXJzdF9kaXJlY3RfYnl0ZTsgCisgICAgICAvKiBmaXJzdCBieXRlIG9mIGZpbGUgd2hpY2ggaXMgc3RvcmVkIGluIGEKKwkJCQkgICAgICAgZGlyZWN0IGl0ZW06IGV4Y2VwdCB0aGF0IGlmIGl0IGVxdWFscyAxCisJCQkJICAgICAgIGl0IGlzIGEgc3ltbGluayBhbmQgaWYgaXQgZXF1YWxzCisJCQkJICAgICAgIH4oX191MzIpMCB0aGVyZSBpcyBubyBkaXJlY3QgaXRlbS4gIFRoZQorCQkJCSAgICAgICBleGlzdGVuY2Ugb2YgdGhpcyBmaWVsZCByZWFsbHkgZ3JhdGVzCisJCQkJICAgICAgIG9uIG1lLiBMZXQncyByZXBsYWNlIGl0IHdpdGggYSBtYWNybworCQkJCSAgICAgICBiYXNlZCBvbiBzZF9zaXplIGFuZCBvdXIgdGFpbAorCQkJCSAgICAgICBzdXBwcmVzc2lvbiBwb2xpY3k/ICovCisgIH0gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKSB1OworfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworLy8KKy8vIHRoaXMgaXMgNDQgYnl0ZXMgbG9uZworLy8KKyNkZWZpbmUgU0RfU0laRSAoc2l6ZW9mKHN0cnVjdCBzdGF0X2RhdGEpKQorI2RlZmluZSBTRF9WMl9TSVpFICAgICAgICAgICAgICBTRF9TSVpFCisjZGVmaW5lIHN0YXRfZGF0YV92MihpaCkgICAgICAgIChpaF92ZXJzaW9uIChpaCkgPT0gS0VZX0ZPUk1BVF8zXzYpCisjZGVmaW5lIHNkX3YyX21vZGUoc2RwKSAgICAgICAgIChsZTE2X3RvX2NwdSgoc2RwKS0+c2RfbW9kZSkpCisjZGVmaW5lIHNldF9zZF92Ml9tb2RlKHNkcCx2KSAgICgoc2RwKS0+c2RfbW9kZSA9IGNwdV90b19sZTE2KHYpKQorLyogc2RfcmVzZXJ2ZWQgKi8KKy8qIHNldF9zZF9yZXNlcnZlZCAqLworI2RlZmluZSBzZF92Ml9ubGluayhzZHApICAgICAgICAobGUzMl90b19jcHUoKHNkcCktPnNkX25saW5rKSkKKyNkZWZpbmUgc2V0X3NkX3YyX25saW5rKHNkcCx2KSAgKChzZHApLT5zZF9ubGluayA9IGNwdV90b19sZTMyKHYpKQorI2RlZmluZSBzZF92Ml9zaXplKHNkcCkgICAgICAgICAobGU2NF90b19jcHUoKHNkcCktPnNkX3NpemUpKQorI2RlZmluZSBzZXRfc2RfdjJfc2l6ZShzZHAsdikgICAoKHNkcCktPnNkX3NpemUgPSBjcHVfdG9fbGU2NCh2KSkKKyNkZWZpbmUgc2RfdjJfdWlkKHNkcCkgICAgICAgICAgKGxlMzJfdG9fY3B1KChzZHApLT5zZF91aWQpKQorI2RlZmluZSBzZXRfc2RfdjJfdWlkKHNkcCx2KSAgICAoKHNkcCktPnNkX3VpZCA9IGNwdV90b19sZTMyKHYpKQorI2RlZmluZSBzZF92Ml9naWQoc2RwKSAgICAgICAgICAobGUzMl90b19jcHUoKHNkcCktPnNkX2dpZCkpCisjZGVmaW5lIHNldF9zZF92Ml9naWQoc2RwLHYpICAgICgoc2RwKS0+c2RfZ2lkID0gY3B1X3RvX2xlMzIodikpCisjZGVmaW5lIHNkX3YyX2F0aW1lKHNkcCkgICAgICAgIChsZTMyX3RvX2NwdSgoc2RwKS0+c2RfYXRpbWUpKQorI2RlZmluZSBzZXRfc2RfdjJfYXRpbWUoc2RwLHYpICAoKHNkcCktPnNkX2F0aW1lID0gY3B1X3RvX2xlMzIodikpCisjZGVmaW5lIHNkX3YyX210aW1lKHNkcCkgICAgICAgIChsZTMyX3RvX2NwdSgoc2RwKS0+c2RfbXRpbWUpKQorI2RlZmluZSBzZXRfc2RfdjJfbXRpbWUoc2RwLHYpICAoKHNkcCktPnNkX210aW1lID0gY3B1X3RvX2xlMzIodikpCisjZGVmaW5lIHNkX3YyX2N0aW1lKHNkcCkgICAgICAgIChsZTMyX3RvX2NwdSgoc2RwKS0+c2RfY3RpbWUpKQorI2RlZmluZSBzZXRfc2RfdjJfY3RpbWUoc2RwLHYpICAoKHNkcCktPnNkX2N0aW1lID0gY3B1X3RvX2xlMzIodikpCisjZGVmaW5lIHNkX3YyX2Jsb2NrcyhzZHApICAgICAgIChsZTMyX3RvX2NwdSgoc2RwKS0+c2RfYmxvY2tzKSkKKyNkZWZpbmUgc2V0X3NkX3YyX2Jsb2NrcyhzZHAsdikgKChzZHApLT5zZF9ibG9ja3MgPSBjcHVfdG9fbGUzMih2KSkKKyNkZWZpbmUgc2RfdjJfcmRldihzZHApICAgICAgICAgKGxlMzJfdG9fY3B1KChzZHApLT51LnNkX3JkZXYpKQorI2RlZmluZSBzZXRfc2RfdjJfcmRldihzZHAsdikgICAoKHNkcCktPnUuc2RfcmRldiA9IGNwdV90b19sZTMyKHYpKQorI2RlZmluZSBzZF92Ml9nZW5lcmF0aW9uKHNkcCkgICAobGUzMl90b19jcHUoKHNkcCktPnUuc2RfZ2VuZXJhdGlvbikpCisjZGVmaW5lIHNldF9zZF92Ml9nZW5lcmF0aW9uKHNkcCx2KSAoKHNkcCktPnUuc2RfZ2VuZXJhdGlvbiA9IGNwdV90b19sZTMyKHYpKQorI2RlZmluZSBzZF92Ml9hdHRycyhzZHApICAgICAgICAgKGxlMTZfdG9fY3B1KChzZHApLT5zZF9hdHRycykpCisjZGVmaW5lIHNldF9zZF92Ml9hdHRycyhzZHAsdikgICAoKHNkcCktPnNkX2F0dHJzID0gY3B1X3RvX2xlMTYodikpCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgIERJUkVDVE9SWSBTVFJVQ1RVUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogCisgICBQaWN0dXJlIHJlcHJlc2VudHMgdGhlIHN0cnVjdHVyZSBvZiBkaXJlY3RvcnkgaXRlbXMKKyAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworICAgfCAgQXJyYXkgb2YgICAgIHwgICB8ICAgICB8ICAgICAgICB8ICAgICAgIHwgICB8CisgICB8IGRpcmVjdG9yeSAgICAgfE4tMXwgTi0yIHwgLi4uLiAgIHwgICAxc3QgfDB0aHwKKyAgIHwgZW50cnkgaGVhZGVycyB8ICAgfCAgICAgfCAgICAgICAgfCAgICAgICB8ICAgfAorICAgfF9fX19fX19fX19fX19fX3xfX198X19fX198X19fX19fX198X19fX19fX3xfX198CisgICAgICAgICAgICAgICAgICAgIDwtLS0tICAgZGlyZWN0b3J5IGVudHJpZXMgICAgICAgICAtLS0tLS0+CisKKyBGaXJzdCBkaXJlY3RvcnkgaXRlbSBoYXMga19vZmZzZXQgY29tcG9uZW50IDEuIFdlIHN0b3JlICIuIiBhbmQgIi4uIgorIGluIG9uZSBpdGVtLCBhbHdheXMsIHdlIG5ldmVyIHNwbGl0ICIuIiBhbmQgIi4uIiBpbnRvIGRpZmZlcmluZworIGl0ZW1zLiAgVGhpcyBtYWtlcywgYW1vbmcgb3RoZXIgdGhpbmdzLCB0aGUgY29kZSBmb3IgcmVtb3ZpbmcKKyBkaXJlY3RvcmllcyBzaW1wbGVyLiAqLworI2RlZmluZSBTRF9PRkZTRVQgIDAKKyNkZWZpbmUgU0RfVU5JUVVFTkVTUyAwCisjZGVmaW5lIERPVF9PRkZTRVQgMQorI2RlZmluZSBET1RfRE9UX09GRlNFVCAyCisjZGVmaW5lIERJUkVOVFJZX1VOSVFVRU5FU1MgNTAwCisKKy8qICovCisjZGVmaW5lIEZJUlNUX0lURU1fT0ZGU0VUIDEKKworLyoKKyAgIFE6IEhvdyB0byBnZXQga2V5IG9mIG9iamVjdCBwb2ludGVkIHRvIGJ5IGVudHJ5IGZyb20gZW50cnk/ICAKKworICAgQTogRWFjaCBkaXJlY3RvcnkgZW50cnkgaGFzIGl0cyBoZWFkZXIuIFRoaXMgaGVhZGVyIGhhcyBkZWhfZGlyX2lkIGFuZCBkZWhfb2JqZWN0aWQgZmllbGRzLCB0aG9zZSBhcmUga2V5CisgICAgICBvZiBvYmplY3QsIGVudHJ5IHBvaW50cyB0byAqLworCisvKiBOT1QgSU1QTEVNRU5URUQ6ICAgCisgICBEaXJlY3Rvcnkgd2lsbCBzb21lZGF5IGNvbnRhaW4gc3RhdCBkYXRhIG9mIG9iamVjdCAqLworCisKKworc3RydWN0IHJlaXNlcmZzX2RlX2hlYWQKK3sKKyAgX191MzIgZGVoX29mZnNldDsJCS8qIHRoaXJkIGNvbXBvbmVudCBvZiB0aGUgZGlyZWN0b3J5IGVudHJ5IGtleSAqLworICBfX3UzMiBkZWhfZGlyX2lkOwkJLyogb2JqZWN0aWQgb2YgdGhlIHBhcmVudCBkaXJlY3Rvcnkgb2YgdGhlIG9iamVjdCwgdGhhdCBpcyByZWZlcmVuY2VkCisJCQkJCSAgIGJ5IGRpcmVjdG9yeSBlbnRyeSAqLworICBfX3UzMiBkZWhfb2JqZWN0aWQ7CQkvKiBvYmplY3RpZCBvZiB0aGUgb2JqZWN0LCB0aGF0IGlzIHJlZmVyZW5jZWQgYnkgZGlyZWN0b3J5IGVudHJ5ICovCisgIF9fdTE2IGRlaF9sb2NhdGlvbjsJCS8qIG9mZnNldCBvZiBuYW1lIGluIHRoZSB3aG9sZSBpdGVtICovCisgIF9fdTE2IGRlaF9zdGF0ZTsJCS8qIHdoZXRoZXIgMSkgZW50cnkgY29udGFpbnMgc3RhdCBkYXRhIChmb3IgZnV0dXJlKSwgYW5kIDIpIHdoZXRoZXIKKwkJCQkJICAgZW50cnkgaXMgaGlkZGVuICh1bmxpbmtlZCkgKi8KK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKyNkZWZpbmUgREVIX1NJWkUgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHJlaXNlcmZzX2RlX2hlYWQpCisjZGVmaW5lIGRlaF9vZmZzZXQocF9kZWgpICAgICAgICAgKGxlMzJfdG9fY3B1KChwX2RlaCktPmRlaF9vZmZzZXQpKQorI2RlZmluZSBkZWhfZGlyX2lkKHBfZGVoKSAgICAgICAgIChsZTMyX3RvX2NwdSgocF9kZWgpLT5kZWhfZGlyX2lkKSkKKyNkZWZpbmUgZGVoX29iamVjdGlkKHBfZGVoKSAgICAgICAobGUzMl90b19jcHUoKHBfZGVoKS0+ZGVoX29iamVjdGlkKSkKKyNkZWZpbmUgZGVoX2xvY2F0aW9uKHBfZGVoKSAgICAgICAobGUxNl90b19jcHUoKHBfZGVoKS0+ZGVoX2xvY2F0aW9uKSkKKyNkZWZpbmUgZGVoX3N0YXRlKHBfZGVoKSAgICAgICAgICAobGUxNl90b19jcHUoKHBfZGVoKS0+ZGVoX3N0YXRlKSkKKworI2RlZmluZSBwdXRfZGVoX29mZnNldChwX2RlaCx2KSAgICgocF9kZWgpLT5kZWhfb2Zmc2V0ID0gY3B1X3RvX2xlMzIoKHYpKSkKKyNkZWZpbmUgcHV0X2RlaF9kaXJfaWQocF9kZWgsdikgICAoKHBfZGVoKS0+ZGVoX2Rpcl9pZCA9IGNwdV90b19sZTMyKCh2KSkpCisjZGVmaW5lIHB1dF9kZWhfb2JqZWN0aWQocF9kZWgsdikgKChwX2RlaCktPmRlaF9vYmplY3RpZCA9IGNwdV90b19sZTMyKCh2KSkpCisjZGVmaW5lIHB1dF9kZWhfbG9jYXRpb24ocF9kZWgsdikgKChwX2RlaCktPmRlaF9sb2NhdGlvbiA9IGNwdV90b19sZTE2KCh2KSkpCisjZGVmaW5lIHB1dF9kZWhfc3RhdGUocF9kZWgsdikgICAgKChwX2RlaCktPmRlaF9zdGF0ZSA9IGNwdV90b19sZTE2KCh2KSkpCisKKy8qIGVtcHR5IGRpcmVjdG9yeSBjb250YWlucyB0d28gZW50cmllcyAiLiIgYW5kICIuLiIgYW5kIHRoZWlyIGhlYWRlcnMgKi8KKyNkZWZpbmUgRU1QVFlfRElSX1NJWkUgXAorKERFSF9TSVpFICogMiArIFJPVU5EX1VQIChzdHJsZW4gKCIuIikpICsgUk9VTkRfVVAgKHN0cmxlbiAoIi4uIikpKQorCisvKiBvbGQgZm9ybWF0IGRpcmVjdG9yaWVzIGhhdmUgdGhpcyBzaXplIHdoZW4gZW1wdHkgKi8KKyNkZWZpbmUgRU1QVFlfRElSX1NJWkVfVjEgKERFSF9TSVpFICogMiArIDMpCisKKyNkZWZpbmUgREVIX1N0YXRkYXRhIDAJCQkvKiBub3QgdXNlZCBub3cgKi8KKyNkZWZpbmUgREVIX1Zpc2libGUgMgorCisvKiA2NCBiaXQgc3lzdGVtcyAoYW5kIHRoZSBTLzM5MCkgbmVlZCB0byBiZSBhbGlnbmVkIGV4cGxpY2l0bHkgLWpkbSAqLworI2lmIEJJVFNfUEVSX0xPTkcgPT0gNjQgfHwgZGVmaW5lZChfX3MzOTBfXykgfHwgZGVmaW5lZChfX2hwcGFfXykKKyMgICBkZWZpbmUgQUREUl9VTkFMSUdORURfQklUUyAgKDMpCisjZW5kaWYKKworLyogVGhlc2UgYXJlIG9ubHkgdXNlZCB0byBtYW5pcHVsYXRlIGRlaF9zdGF0ZS4KKyAqIEJlY2F1c2Ugb2YgdGhpcywgd2UnbGwgdXNlIHRoZSBleHQyXyBiaXQgcm91dGluZXMsCisgKiBzaW5jZSB0aGV5IGFyZSBsaXR0bGUgZW5kaWFuICovCisjaWZkZWYgQUREUl9VTkFMSUdORURfQklUUworCisjICAgZGVmaW5lIGFsaWduZWRfYWRkcmVzcyhhZGRyKSAgICAgICAgICAgKCh2b2lkICopKChsb25nKShhZGRyKSAmIH4oKDFVTCA8PCBBRERSX1VOQUxJR05FRF9CSVRTKSAtIDEpKSkKKyMgICBkZWZpbmUgdW5hbGlnbmVkX29mZnNldChhZGRyKSAgICAgICAgICAoKChpbnQpKChsb25nKShhZGRyKSAmICgoMSA8PCBBRERSX1VOQUxJR05FRF9CSVRTKSAtIDEpKSkgPDwgMykKKworIyAgIGRlZmluZSBzZXRfYml0X3VuYWxpZ25lZChuciwgYWRkcikgICAgIGV4dDJfc2V0X2JpdCgobnIpICsgdW5hbGlnbmVkX29mZnNldChhZGRyKSwgYWxpZ25lZF9hZGRyZXNzKGFkZHIpKQorIyAgIGRlZmluZSBjbGVhcl9iaXRfdW5hbGlnbmVkKG5yLCBhZGRyKSAgIGV4dDJfY2xlYXJfYml0KChucikgKyB1bmFsaWduZWRfb2Zmc2V0KGFkZHIpLCBhbGlnbmVkX2FkZHJlc3MoYWRkcikpCisjICAgZGVmaW5lIHRlc3RfYml0X3VuYWxpZ25lZChuciwgYWRkcikgICAgZXh0Ml90ZXN0X2JpdCgobnIpICsgdW5hbGlnbmVkX29mZnNldChhZGRyKSwgYWxpZ25lZF9hZGRyZXNzKGFkZHIpKQorCisjZWxzZQorCisjICAgZGVmaW5lIHNldF9iaXRfdW5hbGlnbmVkKG5yLCBhZGRyKSAgICAgZXh0Ml9zZXRfYml0KG5yLCBhZGRyKQorIyAgIGRlZmluZSBjbGVhcl9iaXRfdW5hbGlnbmVkKG5yLCBhZGRyKSAgIGV4dDJfY2xlYXJfYml0KG5yLCBhZGRyKQorIyAgIGRlZmluZSB0ZXN0X2JpdF91bmFsaWduZWQobnIsIGFkZHIpICAgIGV4dDJfdGVzdF9iaXQobnIsIGFkZHIpCisKKyNlbmRpZgorCisjZGVmaW5lIG1hcmtfZGVfd2l0aF9zZChkZWgpICAgICAgICBzZXRfYml0X3VuYWxpZ25lZCAoREVIX1N0YXRkYXRhLCAmKChkZWgpLT5kZWhfc3RhdGUpKQorI2RlZmluZSBtYXJrX2RlX3dpdGhvdXRfc2QoZGVoKSAgICAgY2xlYXJfYml0X3VuYWxpZ25lZCAoREVIX1N0YXRkYXRhLCAmKChkZWgpLT5kZWhfc3RhdGUpKQorI2RlZmluZSBtYXJrX2RlX3Zpc2libGUoZGVoKQkgICAgc2V0X2JpdF91bmFsaWduZWQgKERFSF9WaXNpYmxlLCAmKChkZWgpLT5kZWhfc3RhdGUpKQorI2RlZmluZSBtYXJrX2RlX2hpZGRlbihkZWgpCSAgICBjbGVhcl9iaXRfdW5hbGlnbmVkIChERUhfVmlzaWJsZSwgJigoZGVoKS0+ZGVoX3N0YXRlKSkKKworI2RlZmluZSBkZV93aXRoX3NkKGRlaCkJCSAgICB0ZXN0X2JpdF91bmFsaWduZWQgKERFSF9TdGF0ZGF0YSwgJigoZGVoKS0+ZGVoX3N0YXRlKSkKKyNkZWZpbmUgZGVfdmlzaWJsZShkZWgpCSAgICAJICAgIHRlc3RfYml0X3VuYWxpZ25lZCAoREVIX1Zpc2libGUsICYoKGRlaCktPmRlaF9zdGF0ZSkpCisjZGVmaW5lIGRlX2hpZGRlbihkZWgpCSAgICAJICAgICF0ZXN0X2JpdF91bmFsaWduZWQgKERFSF9WaXNpYmxlLCAmKChkZWgpLT5kZWhfc3RhdGUpKQorCitleHRlcm4gdm9pZCBtYWtlX2VtcHR5X2Rpcl9pdGVtX3YxIChjaGFyICogYm9keSwgX191MzIgZGlyaWQsIF9fdTMyIG9iamlkLAorCQkJCSAgICBfX3UzMiBwYXJfZGlyaWQsIF9fdTMyIHBhcl9vYmppZCk7CitleHRlcm4gdm9pZCBtYWtlX2VtcHR5X2Rpcl9pdGVtIChjaGFyICogYm9keSwgX191MzIgZGlyaWQsIF9fdTMyIG9iamlkLAorCQkJCSBfX3UzMiBwYXJfZGlyaWQsIF9fdTMyIHBhcl9vYmppZCk7CisKKy8qIGFycmF5IG9mIHRoZSBlbnRyeSBoZWFkZXJzICovCisgLyogZ2V0IGl0ZW0gYm9keSAqLworI2RlZmluZSBCX0lfUElURU0oYmgsaWgpICggKGJoKS0+Yl9kYXRhICsgaWhfbG9jYXRpb24oaWgpICkKKyNkZWZpbmUgQl9JX0RFSChiaCxpaCkgKChzdHJ1Y3QgcmVpc2VyZnNfZGVfaGVhZCAqKShCX0lfUElURU0oYmgsaWgpKSkKKworLyogbGVuZ3RoIG9mIHRoZSBkaXJlY3RvcnkgZW50cnkgaW4gZGlyZWN0b3J5IGl0ZW0uIFRoaXMgZGVmaW5lCisgICBjYWxjdWxhdGVzIGxlbmd0aCBvZiBpLXRoIGRpcmVjdG9yeSBlbnRyeSB1c2luZyBkaXJlY3RvcnkgZW50cnkKKyAgIGxvY2F0aW9ucyBmcm9tIGRpciBlbnRyeSBoZWFkLiBXaGVuIGl0IGNhbGN1bGF0ZXMgbGVuZ3RoIG9mIDAtdGgKKyAgIGRpcmVjdG9yeSBlbnRyeSwgaXQgdXNlcyBsZW5ndGggb2Ygd2hvbGUgaXRlbSBpbiBwbGFjZSBvZiBlbnRyeQorICAgbG9jYXRpb24gb2YgdGhlIG5vbi1leGlzdGVudCBmb2xsb3dpbmcgZW50cnkgaW4gdGhlIGNhbGN1bGF0aW9uLgorICAgU2VlIHBpY3R1cmUgYWJvdmUuKi8KKy8qCisjZGVmaW5lIElfREVIX05fRU5UUllfTEVOR1RIKGloLGRlaCxpKSBcCisoKGkpID8gKGRlaF9sb2NhdGlvbigoZGVoKS0xKSAtIGRlaF9sb2NhdGlvbigoZGVoKSkpIDogKGloX2l0ZW1fbGVuKChpaCkpIC0gZGVoX2xvY2F0aW9uKChkZWgpKSkpCisqLworc3RhdGljIGlubGluZSBpbnQgZW50cnlfbGVuZ3RoIChjb25zdCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBiaCwgCisJCQkJCQkJCWNvbnN0IHN0cnVjdCBpdGVtX2hlYWQgKiBpaCwgaW50IHBvc19pbl9pdGVtKQoreworICAgIHN0cnVjdCByZWlzZXJmc19kZV9oZWFkICogZGVoOworCisgICAgZGVoID0gQl9JX0RFSCAoYmgsIGloKSArIHBvc19pbl9pdGVtOworICAgIGlmIChwb3NfaW5faXRlbSkKKwlyZXR1cm4gZGVoX2xvY2F0aW9uKGRlaC0xKSAtIGRlaF9sb2NhdGlvbihkZWgpOworCisgICAgcmV0dXJuIGloX2l0ZW1fbGVuKGloKSAtIGRlaF9sb2NhdGlvbihkZWgpOworfQorCisKKworLyogbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIGRpcmVjdG9yeSBpdGVtLCBkZXBlbmRzIG9uIEVOVFJZX0NPVU5UIGJlaW5nIGF0IHRoZSBzdGFydCBvZiBkaXJlY3RvcnkgZHluYW1pYyBkYXRhLiAqLworI2RlZmluZSBJX0VOVFJZX0NPVU5UKGloKSAoaWhfZW50cnlfY291bnQoKGloKSkpCisKKworLyogbmFtZSBieSBiaCwgaWggYW5kIGVudHJ5X251bSAqLworI2RlZmluZSBCX0lfRV9OQU1FKGJoLGloLGVudHJ5X251bSkgKChjaGFyICopKGJoLT5iX2RhdGEgKyBpaF9sb2NhdGlvbihpaCkgKyBkZWhfbG9jYXRpb24oQl9JX0RFSChiaCxpaCkrKGVudHJ5X251bSkpKSkKKworLy8gdHdvIGVudHJpZXMgcGVyIGJsb2NrIChhdCBsZWFzdCkKKyNkZWZpbmUgUkVJU0VSRlNfTUFYX05BTUUoYmxvY2tfc2l6ZSkgMjU1CisKKworLyogdGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCBmb3Igb3BlcmF0aW9ucyBvbiBkaXJlY3RvcnkgZW50cmllcy4gSXQgaXMKKyAgIG5vdCBhIGRpc2sgc3RydWN0dXJlLiAqLworLyogV2hlbiByZWlzZXJmc19maW5kX2VudHJ5IG9yIHNlYXJjaF9ieV9lbnRyeV9rZXkgZmluZCBkaXJlY3RvcnkKKyAgIGVudHJ5LCB0aGV5IHJldHVybiBmaWxsZWQgcmVpc2VyZnNfZGlyX2VudHJ5IHN0cnVjdHVyZSAqLworc3RydWN0IHJlaXNlcmZzX2Rpcl9lbnRyeQoreworICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBkZV9iaDsKKyAgaW50IGRlX2l0ZW1fbnVtOworICBzdHJ1Y3QgaXRlbV9oZWFkICogZGVfaWg7CisgIGludCBkZV9lbnRyeV9udW07CisgIHN0cnVjdCByZWlzZXJmc19kZV9oZWFkICogZGVfZGVoOworICBpbnQgZGVfZW50cnlsZW47CisgIGludCBkZV9uYW1lbGVuOworICBjaGFyICogZGVfbmFtZTsKKyAgY2hhciAqIGRlX2dlbl9udW1iZXJfYml0X3N0cmluZzsKKworICBfX3UzMiBkZV9kaXJfaWQ7CisgIF9fdTMyIGRlX29iamVjdGlkOworCisgIHN0cnVjdCBjcHVfa2V5IGRlX2VudHJ5X2tleTsKK307CisgICAKKy8qIHRoZXNlIGRlZmluZXMgYXJlIHVzZWZ1bCB3aGVuIGEgcGFydGljdWxhciBtZW1iZXIgb2YgYSByZWlzZXJmc19kaXJfZW50cnkgaXMgbmVlZGVkICovCisKKy8qIHBvaW50ZXIgdG8gZmlsZSBuYW1lLCBzdG9yZWQgaW4gZW50cnkgKi8KKyNkZWZpbmUgQl9JX0RFSF9FTlRSWV9GSUxFX05BTUUoYmgsaWgsZGVoKSAoQl9JX1BJVEVNIChiaCwgaWgpICsgZGVoX2xvY2F0aW9uKGRlaCkpCisKKy8qIGxlbmd0aCBvZiBuYW1lICovCisjZGVmaW5lIElfREVIX05fRU5UUllfRklMRV9OQU1FX0xFTkdUSChpaCxkZWgsZW50cnlfbnVtKSBcCisoSV9ERUhfTl9FTlRSWV9MRU5HVEggKGloLCBkZWgsIGVudHJ5X251bSkgLSAoZGVfd2l0aF9zZCAoZGVoKSA/IFNEX1NJWkUgOiAwKSkKKworCisKKy8qIGhhc2ggdmFsdWUgb2NjdXBpZXMgYml0cyBmcm9tIDcgdXAgdG8gMzAgKi8KKyNkZWZpbmUgR0VUX0hBU0hfVkFMVUUob2Zmc2V0KSAoKG9mZnNldCkgJiAweDdmZmZmZjgwTEwpCisvKiBnZW5lcmF0aW9uIG51bWJlciBvY2N1cGllcyA3IGJpdHMgc3RhcnRpbmcgZnJvbSAwIHVwIHRvIDYgKi8KKyNkZWZpbmUgR0VUX0dFTkVSQVRJT05fTlVNQkVSKG9mZnNldCkgKChvZmZzZXQpICYgMHg3ZkxMKQorI2RlZmluZSBNQVhfR0VORVJBVElPTl9OVU1CRVIgIDEyNworCisjZGVmaW5lIFNFVF9HRU5FUkFUSU9OX05VTUJFUihvZmZzZXQsZ2VuX251bWJlcikgKEdFVF9IQVNIX1ZBTFVFKG9mZnNldCl8KGdlbl9udW1iZXIpKQorCisKKy8qCisgKiBQaWN0dXJlIHJlcHJlc2VudHMgYW4gaW50ZXJuYWwgbm9kZSBvZiB0aGUgcmVpc2VyZnMgdHJlZQorICogIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworICogfCAgICAgIHwgIEFycmF5IG9mICAgICB8ICBBcnJheSBvZiAgICAgICAgIHwgIEZyZWUgICAgIHwKKyAqIHxibG9jayB8ICAgIGtleXMgICAgICAgfCAgcG9pbnRlcnMgICAgICAgICB8IHNwYWNlICAgICB8CisgKiB8IGhlYWQgfCAgICAgIE4gICAgICAgIHwgICAgICBOKzEgICAgICAgICAgfCAgICAgICAgICAgfAorICogfF9fX19fX3xfX19fX19fX19fX19fX198X19fX19fX19fX19fX19fX19fX3xfX19fX19fX19fX3wKKyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgRElTSyBDSElMRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBEaXNrIGNoaWxkIHBvaW50ZXI6IFRoZSBwb2ludGVyIGZyb20gYW4gaW50ZXJuYWwgbm9kZSBvZiB0aGUgdHJlZQorICAgdG8gYSBub2RlIHRoYXQgaXMgb24gZGlzay4gKi8KK3N0cnVjdCBkaXNrX2NoaWxkIHsKKyAgX191MzIgICAgICAgZGNfYmxvY2tfbnVtYmVyOyAgICAgICAgICAgICAgLyogRGlzayBjaGlsZCdzIGJsb2NrIG51bWJlci4gKi8KKyAgX191MTYgICAgICAgZGNfc2l6ZTsJCSAgICAgICAgICAgIC8qIERpc2sgY2hpbGQncyB1c2VkIHNwYWNlLiAgICovCisgIF9fdTE2ICAgICAgIGRjX3Jlc2VydmVkOworfTsKKworI2RlZmluZSBEQ19TSVpFIChzaXplb2Yoc3RydWN0IGRpc2tfY2hpbGQpKQorI2RlZmluZSBkY19ibG9ja19udW1iZXIoZGNfcCkJKGxlMzJfdG9fY3B1KChkY19wKS0+ZGNfYmxvY2tfbnVtYmVyKSkKKyNkZWZpbmUgZGNfc2l6ZShkY19wKQkJKGxlMTZfdG9fY3B1KChkY19wKS0+ZGNfc2l6ZSkpCisjZGVmaW5lIHB1dF9kY19ibG9ja19udW1iZXIoZGNfcCwgdmFsKSAgIGRvIHsgKGRjX3ApLT5kY19ibG9ja19udW1iZXIgPSBjcHVfdG9fbGUzMih2YWwpOyB9IHdoaWxlKDApCisjZGVmaW5lIHB1dF9kY19zaXplKGRjX3AsIHZhbCkgICBkbyB7IChkY19wKS0+ZGNfc2l6ZSA9IGNwdV90b19sZTE2KHZhbCk7IH0gd2hpbGUoMCkKKworLyogR2V0IGRpc2sgY2hpbGQgYnkgYnVmZmVyIGhlYWRlciBhbmQgcG9zaXRpb24gaW4gdGhlIHRyZWUgbm9kZS4gKi8KKyNkZWZpbmUgQl9OX0NISUxEKHBfc19iaCxuX3BvcykgICgoc3RydWN0IGRpc2tfY2hpbGQgKilcCisoKHBfc19iaCktPmJfZGF0YStCTEtIX1NJWkUrQl9OUl9JVEVNUyhwX3NfYmgpKktFWV9TSVpFK0RDX1NJWkUqKG5fcG9zKSkpCisKKy8qIEdldCBkaXNrIGNoaWxkIG51bWJlciBieSBidWZmZXIgaGVhZGVyIGFuZCBwb3NpdGlvbiBpbiB0aGUgdHJlZSBub2RlLiAqLworI2RlZmluZSBCX05fQ0hJTERfTlVNKHBfc19iaCxuX3BvcykgKGRjX2Jsb2NrX251bWJlcihCX05fQ0hJTEQocF9zX2JoLG5fcG9zKSkpCisjZGVmaW5lIFBVVF9CX05fQ0hJTERfTlVNKHBfc19iaCxuX3BvcywgdmFsKSAocHV0X2RjX2Jsb2NrX251bWJlcihCX05fQ0hJTEQocF9zX2JoLG5fcG9zKSwgdmFsICkpCisKKyAvKiBtYXhpbWFsIHZhbHVlIG9mIGZpZWxkIGNoaWxkX3NpemUgaW4gc3RydWN0dXJlIGRpc2tfY2hpbGQgKi8gCisgLyogY2hpbGQgc2l6ZSBpcyB0aGUgY29tYmluZWQgc2l6ZSBvZiBhbGwgaXRlbXMgYW5kIHRoZWlyIGhlYWRlcnMgKi8KKyNkZWZpbmUgTUFYX0NISUxEX1NJWkUoYmgpICgoaW50KSggKGJoKS0+Yl9zaXplIC0gQkxLSF9TSVpFICkpCisKKy8qIGFtb3VudCBvZiB1c2VkIHNwYWNlIGluIGJ1ZmZlciAobm90IGluY2x1ZGluZyBibG9jayBoZWFkKSAqLworI2RlZmluZSBCX0NISUxEX1NJWkUoY3VyKSAoTUFYX0NISUxEX1NJWkUoY3VyKS0oQl9GUkVFX1NQQUNFKGN1cikpKQorCisvKiBtYXggYW5kIG1pbiBudW1iZXIgb2Yga2V5cyBpbiBpbnRlcm5hbCBub2RlICovCisjZGVmaW5lIE1BWF9OUl9LRVkoYmgpICggKE1BWF9DSElMRF9TSVpFKGJoKS1EQ19TSVpFKS8oS0VZX1NJWkUrRENfU0laRSkgKQorI2RlZmluZSBNSU5fTlJfS0VZKGJoKSAgICAoTUFYX05SX0tFWShiaCkvMikKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgIFBBVEggU1RSVUNUVVJFUyBBTkQgREVGSU5FUyAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qIFNlYXJjaF9ieV9rZXkgZmlsbHMgdXAgdGhlIHBhdGggZnJvbSB0aGUgcm9vdCB0byB0aGUgbGVhZiBhcyBpdCBkZXNjZW5kcyB0aGUgdHJlZSBsb29raW5nIGZvciB0aGUKKyAgIGtleS4gIEl0IHVzZXMgcmVpc2VyZnNfYnJlYWQgdG8gdHJ5IHRvIGZpbmQgYnVmZmVycyBpbiB0aGUgY2FjaGUgZ2l2ZW4gdGhlaXIgYmxvY2sgbnVtYmVyLiAgSWYgaXQKKyAgIGRvZXMgbm90IGZpbmQgdGhlbSBpbiB0aGUgY2FjaGUgaXQgcmVhZHMgdGhlbSBmcm9tIGRpc2suICBGb3IgZWFjaCBub2RlIHNlYXJjaF9ieV9rZXkgZmluZHMgdXNpbmcKKyAgIHJlaXNlcmZzX2JyZWFkIGl0IHRoZW4gdXNlcyBiaW5fc2VhcmNoIHRvIGxvb2sgdGhyb3VnaCB0aGF0IG5vZGUuICBiaW5fc2VhcmNoIHdpbGwgZmluZCB0aGUKKyAgIHBvc2l0aW9uIG9mIHRoZSBibG9ja19udW1iZXIgb2YgdGhlIG5leHQgbm9kZSBpZiBpdCBpcyBsb29raW5nIHRocm91Z2ggYW4gaW50ZXJuYWwgbm9kZS4gIElmIGl0CisgICBpcyBsb29raW5nIHRocm91Z2ggYSBsZWFmIG5vZGUgYmluX3NlYXJjaCB3aWxsIGZpbmQgdGhlIHBvc2l0aW9uIG9mIHRoZSBpdGVtIHdoaWNoIGhhcyBrZXkgZWl0aGVyCisgICBlcXVhbCB0byBnaXZlbiBrZXksIG9yIHdoaWNoIGlzIHRoZSBtYXhpbWFsIGtleSBsZXNzIHRoYW4gdGhlIGdpdmVuIGtleS4gKi8KKworc3RydWN0ICBwYXRoX2VsZW1lbnQgIHsKKyAgc3RydWN0IGJ1ZmZlcl9oZWFkICoJcGVfYnVmZmVyOyAgICAvKiBQb2ludGVyIHRvIHRoZSBidWZmZXIgYXQgdGhlIHBhdGggaW4gdGhlIHRyZWUuICovCisgIGludCAgICAgICAgIAkJcGVfcG9zaXRpb247ICAvKiBQb3NpdGlvbiBpbiB0aGUgdHJlZSBub2RlIHdoaWNoIGlzIHBsYWNlZCBpbiB0aGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYnVmZmVyIGFib3ZlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworfTsKKworI2RlZmluZSBNQVhfSEVJR0hUIDUgLyogbWF4aW1hbCBoZWlnaHQgb2YgYSB0cmVlLiBkb24ndCBjaGFuZ2UgdGhpcyB3aXRob3V0IGNoYW5naW5nIEpPVVJOQUxfUEVSX0JBTEFOQ0VfQ05UICovCisjZGVmaW5lIEVYVEVOREVEX01BWF9IRUlHSFQgICAgICAgICA3IC8qIE11c3QgYmUgZXF1YWxzIE1BWF9IRUlHSFQgKyBGSVJTVF9QQVRIX0VMRU1FTlRfT0ZGU0VUICovCisjZGVmaW5lIEZJUlNUX1BBVEhfRUxFTUVOVF9PRkZTRVQgICAyIC8qIE11c3QgYmUgZXF1YWwgdG8gYXQgbGVhc3QgMi4gKi8KKworI2RlZmluZSBJTExFR0FMX1BBVEhfRUxFTUVOVF9PRkZTRVQgMSAvKiBNdXN0IGJlIGVxdWFsIHRvIEZJUlNUX1BBVEhfRUxFTUVOVF9PRkZTRVQgLSAxICovCisjZGVmaW5lIE1BWF9GRUJfU0laRSA2ICAgLyogdGhpcyBNVVNUIGJlIE1BWF9IRUlHSFQgKyAxLiBTZWUgYWJvdXQgRkVCIGJlbG93ICovCisKKworCisvKiBXZSBuZWVkIHRvIGtlZXAgdHJhY2sgb2Ygd2hvIHRoZSBhbmNlc3RvcnMgb2Ygbm9kZXMgYXJlLiAgV2hlbiB3ZQorICAgcGVyZm9ybSBhIHNlYXJjaCB3ZSByZWNvcmQgd2hpY2ggbm9kZXMgd2VyZSB2aXNpdGVkIHdoaWxlCisgICBkZXNjZW5kaW5nIHRoZSB0cmVlIGxvb2tpbmcgZm9yIHRoZSBub2RlIHdlIHNlYXJjaGVkIGZvci4gVGhpcyBsaXN0CisgICBvZiBub2RlcyBpcyBjYWxsZWQgdGhlIHBhdGguICBUaGlzIGluZm9ybWF0aW9uIGlzIHVzZWQgd2hpbGUKKyAgIHBlcmZvcm1pbmcgYmFsYW5jaW5nLiAgTm90ZSB0aGF0IHRoaXMgcGF0aCBpbmZvcm1hdGlvbiBtYXkgYmVjb21lCisgICBpbnZhbGlkLCBhbmQgdGhpcyBtZWFucyB3ZSBtdXN0IGNoZWNrIGl0IHdoZW4gdXNpbmcgaXQgdG8gc2VlIGlmIGl0CisgICBpcyBzdGlsbCB2YWxpZC4gWW91J2xsIG5lZWQgdG8gcmVhZCBzZWFyY2hfYnlfa2V5IGFuZCB0aGUgY29tbWVudHMKKyAgIGluIGl0LCBlc3BlY2lhbGx5IGFib3V0IGRlY3JlbWVudF9jb3VudGVyc19pbl9wYXRoKCksIHRvIHVuZGVyc3RhbmQKKyAgIHRoaXMgc3RydWN0dXJlLiAgCisKK1BhdGhzIG1ha2UgdGhlIGNvZGUgc28gbXVjaCBoYXJkZXIgdG8gd29yayB3aXRoIGFuZCBkZWJ1Zy4uLi4gQW4KK2Vub3Jtb3VzIG51bWJlciBvZiBidWdzIGFyZSBkdWUgdG8gdGhlbSwgYW5kIHRyeWluZyB0byB3cml0ZSBvciBtb2RpZnkKK2NvZGUgdGhhdCB1c2VzIHRoZW0ganVzdCBtYWtlcyBteSBoZWFkIGh1cnQuICBUaGV5IGFyZSBiYXNlZCBvbiBhbgorZXhjZXNzaXZlIGVmZm9ydCB0byBhdm9pZCBkaXN0dXJiaW5nIHRoZSBwcmVjaW91cyBWRlMgY29kZS46LSggVGhlCitnb2RzIG9ubHkga25vdyBob3cgd2UgYXJlIGdvaW5nIHRvIFNNUCB0aGUgY29kZSB0aGF0IHVzZXMgdGhlbS4KK3pub2RlcyBhcmUgdGhlIHdheSEgKi8KKworI2RlZmluZSBQQVRIX1JFQURBCTB4MSAvKiBkbyByZWFkIGFoZWFkICovCisjZGVmaW5lIFBBVEhfUkVBREFfQkFDSyAweDIgLyogcmVhZCBiYWNrd2FyZHMgKi8KKworc3RydWN0ICBwYXRoIHsKKyAgaW50ICAgICAgICAgICAgICAgICAgIHBhdGhfbGVuZ3RoOyAgICAgICAgICAgICAgICAgICAgICAJLyogTGVuZ3RoIG9mIHRoZSBhcnJheSBhYm92ZS4gICAqLworICBpbnQJCQlyZWFkYTsKKyAgc3RydWN0ICBwYXRoX2VsZW1lbnQgIHBhdGhfZWxlbWVudHNbRVhURU5ERURfTUFYX0hFSUdIVF07CS8qIEFycmF5IG9mIHRoZSBwYXRoIGVsZW1lbnRzLiAgKi8KKyAgaW50CQkJcG9zX2luX2l0ZW07Cit9OworCisjZGVmaW5lIHBvc19pbl9pdGVtKHBhdGgpICgocGF0aCktPnBvc19pbl9pdGVtKQorCisjZGVmaW5lIElOSVRJQUxJWkVfUEFUSCh2YXIpIFwKK3N0cnVjdCBwYXRoIHZhciA9IHsucGF0aF9sZW5ndGggPSBJTExFR0FMX1BBVEhfRUxFTUVOVF9PRkZTRVQsIC5yZWFkYSA9IDAsfQorCisvKiBHZXQgcGF0aCBlbGVtZW50IGJ5IHBhdGggYW5kIHBhdGggcG9zaXRpb24uICovCisjZGVmaW5lIFBBVEhfT0ZGU0VUX1BFTEVNRU5UKHBfc19wYXRoLG5fb2Zmc2V0KSAgKChwX3NfcGF0aCktPnBhdGhfZWxlbWVudHMgKyhuX29mZnNldCkpCisKKy8qIEdldCBidWZmZXIgaGVhZGVyIGF0IHRoZSBwYXRoIGJ5IHBhdGggYW5kIHBhdGggcG9zaXRpb24uICovCisjZGVmaW5lIFBBVEhfT0ZGU0VUX1BCVUZGRVIocF9zX3BhdGgsbl9vZmZzZXQpICAgKFBBVEhfT0ZGU0VUX1BFTEVNRU5UKHBfc19wYXRoLG5fb2Zmc2V0KS0+cGVfYnVmZmVyKQorCisvKiBHZXQgcG9zaXRpb24gaW4gdGhlIGVsZW1lbnQgYXQgdGhlIHBhdGggYnkgcGF0aCBhbmQgcGF0aCBwb3NpdGlvbi4gKi8KKyNkZWZpbmUgUEFUSF9PRkZTRVRfUE9TSVRJT04ocF9zX3BhdGgsbl9vZmZzZXQpIChQQVRIX09GRlNFVF9QRUxFTUVOVChwX3NfcGF0aCxuX29mZnNldCktPnBlX3Bvc2l0aW9uKQorCisKKyNkZWZpbmUgUEFUSF9QTEFTVF9CVUZGRVIocF9zX3BhdGgpIChQQVRIX09GRlNFVF9QQlVGRkVSKChwX3NfcGF0aCksIChwX3NfcGF0aCktPnBhdGhfbGVuZ3RoKSkKKwkJCQkvKiB5b3Uga25vdywgdG8gdGhlIHBlcnNvbiB3aG8gZGlkbid0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlIHRoaXMgdGhlIG1hY3JvIG5hbWUgZG9lcyBub3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXQgZmlyc3Qgc3VnZ2VzdCB3aGF0IGl0IGRvZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1heWJlIFBPU0lUSU9OX0ZST01fUEFUSF9FTkQ/IE9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heWJlIHdlIHNob3VsZCBqdXN0IGZvY3VzIG9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBpbmcgcGF0aHMuLi4gLUhhbnMgKi8KKyNkZWZpbmUgUEFUSF9MQVNUX1BPU0lUSU9OKHBfc19wYXRoKSAoUEFUSF9PRkZTRVRfUE9TSVRJT04oKHBfc19wYXRoKSwgKHBfc19wYXRoKS0+cGF0aF9sZW5ndGgpKQorCisKKyNkZWZpbmUgUEFUSF9QSVRFTV9IRUFEKHBfc19wYXRoKSAgICBCX05fUElURU1fSEVBRChQQVRIX1BMQVNUX0JVRkZFUihwX3NfcGF0aCksUEFUSF9MQVNUX1BPU0lUSU9OKHBfc19wYXRoKSkKKworLyogaW4gZG9fYmFsYW5jZSBsZWFmIGhhcyBoID09IDAgaW4gY29udHJhc3Qgd2l0aCBwYXRoIHN0cnVjdHVyZSwKKyAgIHdoZXJlIHJvb3QgaGFzIGxldmVsID09IDAuIFRoYXQgaXMgd2h5IHdlIG5lZWQgdGhlc2UgZGVmaW5lcyAqLworI2RlZmluZSBQQVRIX0hfUEJVRkZFUihwX3NfcGF0aCwgaCkgUEFUSF9PRkZTRVRfUEJVRkZFUiAocF9zX3BhdGgsIHBfc19wYXRoLT5wYXRoX2xlbmd0aCAtIChoKSkJLyogdGItPlNbaF0gKi8KKyNkZWZpbmUgUEFUSF9IX1BQQVJFTlQocGF0aCwgaCkgUEFUSF9IX1BCVUZGRVIgKHBhdGgsIChoKSArIDEpCQkJLyogdGItPkZbaF0gb3IgdGItPlNbMF0tPmJfcGFyZW50ICovCisjZGVmaW5lIFBBVEhfSF9QT1NJVElPTihwYXRoLCBoKSBQQVRIX09GRlNFVF9QT1NJVElPTiAocGF0aCwgcGF0aC0+cGF0aF9sZW5ndGggLSAoaCkpCQorI2RlZmluZSBQQVRIX0hfQl9JVEVNX09SREVSKHBhdGgsIGgpIFBBVEhfSF9QT1NJVElPTihwYXRoLCBoICsgMSkJCS8qIHRiLT5TW2hdLT5iX2l0ZW1fb3JkZXIgKi8KKworI2RlZmluZSBQQVRIX0hfUEFUSF9PRkZTRVQocF9zX3BhdGgsIG5faCkgKChwX3NfcGF0aCktPnBhdGhfbGVuZ3RoIC0gKG5faCkpCisKKyNkZWZpbmUgZ2V0X2xhc3RfYmgocGF0aCkgUEFUSF9QTEFTVF9CVUZGRVIocGF0aCkKKyNkZWZpbmUgZ2V0X2loKHBhdGgpIFBBVEhfUElURU1fSEVBRChwYXRoKQorI2RlZmluZSBnZXRfaXRlbV9wb3MocGF0aCkgUEFUSF9MQVNUX1BPU0lUSU9OKHBhdGgpCisjZGVmaW5lIGdldF9pdGVtKHBhdGgpICgodm9pZCAqKUJfTl9QSVRFTShQQVRIX1BMQVNUX0JVRkZFUihwYXRoKSwgUEFUSF9MQVNUX1BPU0lUSU9OIChwYXRoKSkpCisjZGVmaW5lIGl0ZW1fbW92ZWQoaWgscGF0aCkgY29tcF9pdGVtcyhpaCwgcGF0aCkKKyNkZWZpbmUgcGF0aF9jaGFuZ2VkKGloLHBhdGgpIGNvbXBfaXRlbXMgKGloLCBwYXRoKQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgTUlTQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogU2l6ZSBvZiBwb2ludGVyIHRvIHRoZSB1bmZvcm1hdHRlZCBub2RlLiAqLworI2RlZmluZSBVTkZNX1BfU0laRSAoc2l6ZW9mKHVucF90KSkKKyNkZWZpbmUgVU5GTV9QX1NISUZUIDIKKworLy8gaW4gaW4tY29yZSBpbm9kZSBrZXkgaXMgc3RvcmVkIG9uIGxlIGZvcm0KKyNkZWZpbmUgSU5PREVfUEtFWShpbm9kZSkgKChzdHJ1Y3QgcmVpc2VyZnNfa2V5ICopKFJFSVNFUkZTX0koaW5vZGUpLT5pX2tleSkpCisKKyNkZWZpbmUgTUFYX1VMX0lOVCAweGZmZmZmZmZmCisjZGVmaW5lIE1BWF9JTlQgICAgMHg3ZmZmZmZmCisjZGVmaW5lIE1BWF9VU19JTlQgMHhmZmZmCisKKy8vIHJlaXNlcmZzIHZlcnNpb24gMiBoYXMgbWF4IG9mZnNldCA2MCBiaXRzLiBWZXJzaW9uIDEgLSAzMiBiaXQgb2Zmc2V0CisjZGVmaW5lIFUzMl9NQVggKH4oX191MzIpMCkKKworc3RhdGljIGlubGluZSBsb2ZmX3QgbWF4X3JlaXNlcmZzX29mZnNldCAoc3RydWN0IGlub2RlICogaW5vZGUpCit7CisgICAgaWYgKGdldF9pbm9kZV9pdGVtX2tleV92ZXJzaW9uKGlub2RlKSA9PSBLRVlfRk9STUFUXzNfNSkKKwlyZXR1cm4gKGxvZmZfdClVMzJfTUFYOworCisgICAgcmV0dXJuIChsb2ZmX3QpKCh+KF9fdTY0KTApID4+IDQpOworfQorCisKKy8qI2RlZmluZSBNQVhfS0VZX1VOSVFVRU5FU1MJTUFYX1VMX0lOVCovCisjZGVmaW5lIE1BWF9LRVlfT0JKRUNUSUQJTUFYX1VMX0lOVAorCisKKyNkZWZpbmUgTUFYX0JfTlVNICBNQVhfVUxfSU5UCisjZGVmaW5lIE1BWF9GQ19OVU0gTUFYX1VTX0lOVAorCisKKy8qIHRoZSBwdXJwb3NlIGlzIHRvIGRldGVjdCBvdmVyZmxvdyBvZiBhbiB1bnNpZ25lZCBzaG9ydCAqLworI2RlZmluZSBSRUlTRVJGU19MSU5LX01BWCAoTUFYX1VTX0lOVCAtIDEwMDApCisKKworLyogVGhlIGZvbGxvd2luZyBkZWZpbmVzIGFyZSB1c2VkIGluIHJlaXNlcmZzX2luc2VydF9pdGVtIGFuZCByZWlzZXJmc19hcHBlbmRfaXRlbSAgKi8KKyNkZWZpbmUgUkVJU0VSRlNfS0VSTkVMX01FTQkJMAkvKiByZWlzZXJmcyBrZXJuZWwgbWVtb3J5IG1vZGUJKi8KKyNkZWZpbmUgUkVJU0VSRlNfVVNFUl9NRU0JCTEJLyogcmVpc2VyZnMgdXNlciBtZW1vcnkgbW9kZQkJKi8KKworI2RlZmluZSBmc19nZW5lcmF0aW9uKHMpIChSRUlTRVJGU19TQihzKS0+c19nZW5lcmF0aW9uX2NvdW50ZXIpCisjZGVmaW5lIGdldF9nZW5lcmF0aW9uKHMpIGF0b21pY19yZWFkICgmZnNfZ2VuZXJhdGlvbihzKSkKKyNkZWZpbmUgRklMRVNZU1RFTV9DSEFOR0VEX1RCKHRiKSAgKGdldF9nZW5lcmF0aW9uKCh0YiktPnRiX3NiKSAhPSAodGIpLT5mc19nZW4pCisjZGVmaW5lIF9fZnNfY2hhbmdlZChnZW4scykgKGdlbiAhPSBnZXRfZ2VuZXJhdGlvbiAocykpCisjZGVmaW5lIGZzX2NoYW5nZWQoZ2VuLHMpICh7Y29uZF9yZXNjaGVkKCk7IF9fZnNfY2hhbmdlZChnZW4sIHMpO30pCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgRklYQVRFIE5PREVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIFZJX1RZUEVfTEVGVF9NRVJHRUFCTEUgMQorI2RlZmluZSBWSV9UWVBFX1JJR0hUX01FUkdFQUJMRSAyCisKKy8qIFRvIG1ha2UgYW55IGNoYW5nZXMgaW4gdGhlIHRyZWUgd2UgYWx3YXlzIGZpcnN0IGZpbmQgbm9kZSwgdGhhdAorICAgY29udGFpbnMgaXRlbSB0byBiZSBjaGFuZ2VkL2RlbGV0ZWQgb3IgcGxhY2UgdG8gaW5zZXJ0IGEgbmV3CisgICBpdGVtLiBXZSBjYWxsIHRoaXMgbm9kZSBTLiBUbyBkbyBiYWxhbmNpbmcgd2UgbmVlZCB0byBkZWNpZGUgd2hhdAorICAgd2Ugd2lsbCBzaGlmdCB0byBsZWZ0L3JpZ2h0IG5laWdoYm9yLCBvciB0byBhIG5ldyBub2RlLCB3aGVyZSBuZXcKKyAgIGl0ZW0gd2lsbCBiZSBldGMuIFRvIG1ha2UgdGhpcyBhbmFseXNpcyBzaW1wbGVyIHdlIGJ1aWxkIHZpcnR1YWwKKyAgIG5vZGUuIFZpcnR1YWwgbm9kZSBpcyBhbiBhcnJheSBvZiBpdGVtcywgdGhhdCB3aWxsIHJlcGxhY2UgaXRlbXMgb2YKKyAgIG5vZGUgUy4gKEZvciBpbnN0YW5jZSBpZiB3ZSBhcmUgZ29pbmcgdG8gZGVsZXRlIGFuIGl0ZW0sIHZpcnR1YWwKKyAgIG5vZGUgZG9lcyBub3QgY29udGFpbiBpdCkuIFZpcnR1YWwgbm9kZSBrZWVwcyBpbmZvcm1hdGlvbiBhYm91dAorICAgaXRlbSBzaXplcyBhbmQgdHlwZXMsIG1lcmdlYWJpbGl0eSBvZiBmaXJzdCBhbmQgbGFzdCBpdGVtcywgc2l6ZXMKKyAgIG9mIGFsbCBlbnRyaWVzIGluIGRpcmVjdG9yeSBpdGVtLiBXZSB1c2UgdGhpcyBhcnJheSBvZiBpdGVtcyB3aGVuCisgICBjYWxjdWxhdGluZyB3aGF0IHdlIGNhbiBzaGlmdCB0byBuZWlnaGJvcnMgYW5kIGhvdyBtYW55IG5vZGVzIHdlCisgICBoYXZlIHRvIGhhdmUgaWYgd2UgZG8gbm90IGFueSBzaGlmdGluZ3MsIGlmIHdlIHNoaWZ0IHRvIGxlZnQvcmlnaHQKKyAgIG5laWdoYm9yIG9yIHRvIGJvdGguICovCitzdHJ1Y3QgdmlydHVhbF9pdGVtCit7CisgICAgaW50IHZpX2luZGV4OyAvLyBpbmRleCBpbiB0aGUgYXJyYXkgb2YgaXRlbSBvcGVyYXRpb25zCisgICAgdW5zaWduZWQgc2hvcnQgdmlfdHlwZTsJLy8gbGVmdC9yaWdodCBtZXJnZWFiaWxpdHkKKyAgICB1bnNpZ25lZCBzaG9ydCB2aV9pdGVtX2xlbjsgICAgICAgICAgIC8qIGxlbmd0aCBvZiBpdGVtIHRoYXQgaXQgd2lsbCBoYXZlIGFmdGVyIGJhbGFuY2luZyAqLworICAgIHN0cnVjdCBpdGVtX2hlYWQgKiB2aV9paDsKKyAgICBjb25zdCBjaGFyICogdmlfaXRlbTsgICAgIC8vIGJvZHkgb2YgaXRlbSAob2xkIG9yIG5ldykKKyAgICBjb25zdCB2b2lkICogdmlfbmV3X2RhdGE7IC8vIDAgYWx3YXlzIGJ1dCBwYXN0ZSBtb2RlCisgICAgdm9pZCAqIHZpX3VhcmVhOyAgICAvLyBpdGVtIHNwZWNpZmljIGFyZWEKK307CisKKworc3RydWN0IHZpcnR1YWxfbm9kZQoreworICBjaGFyICogdm5fZnJlZV9wdHI7CQkvKiB0aGlzIGlzIGEgcG9pbnRlciB0byB0aGUgZnJlZSBzcGFjZSBpbiB0aGUgYnVmZmVyICovCisgIHVuc2lnbmVkIHNob3J0IHZuX25yX2l0ZW07CS8qIG51bWJlciBvZiBpdGVtcyBpbiB2aXJ0dWFsIG5vZGUgKi8KKyAgc2hvcnQgdm5fc2l6ZTsgICAgICAgIAkvKiBzaXplIG9mIG5vZGUgLCB0aGF0IG5vZGUgd291bGQgaGF2ZSBpZiBpdCBoYXMgdW5saW1pdGVkIHNpemUgYW5kIG5vIGJhbGFuY2luZyBpcyBwZXJmb3JtZWQgKi8KKyAgc2hvcnQgdm5fbW9kZTsJCS8qIG1vZGUgb2YgYmFsYW5jaW5nIChwYXN0ZSwgaW5zZXJ0LCBkZWxldGUsIGN1dCkgKi8KKyAgc2hvcnQgdm5fYWZmZWN0ZWRfaXRlbV9udW07IAorICBzaG9ydCB2bl9wb3NfaW5faXRlbTsKKyAgc3RydWN0IGl0ZW1faGVhZCAqIHZuX2luc19paDsJLyogaXRlbSBoZWFkZXIgb2YgaW5zZXJ0ZWQgaXRlbSwgMCBmb3Igb3RoZXIgbW9kZXMgKi8KKyAgY29uc3Qgdm9pZCAqIHZuX2RhdGE7CisgIHN0cnVjdCB2aXJ0dWFsX2l0ZW0gKiB2bl92aTsJLyogYXJyYXkgb2YgaXRlbXMgKGluY2x1ZGluZyBhIG5ldyBvbmUsIGV4Y2x1ZGluZyBpdGVtIHRvIGJlIGRlbGV0ZWQpICovCit9OworCisvKiB1c2VkIGJ5IGRpcmVjdG9yeSBpdGVtcyB3aGVuIGNyZWF0aW5nIHZpcnR1YWwgbm9kZXMgKi8KK3N0cnVjdCBkaXJlbnRyeV91YXJlYSB7CisgICAgaW50IGZsYWdzOworICAgIF9fdTE2IGVudHJ5X2NvdW50OworICAgIF9fdTE2IGVudHJ5X3NpemVzWzFdOworfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpIDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICBUUkVFIEJBTEFOQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFRoaXMgdGVtcG9yYXJ5IHN0cnVjdHVyZSBpcyB1c2VkIGluIHRyZWUgYmFsYW5jZSBhbGdvcml0aG1zLCBhbmQKKyAgIGNvbnN0cnVjdGVkIGFzIHdlIGdvIHRvIHRoZSBleHRlbnQgdGhhdCBpdHMgdmFyaW91cyBwYXJ0cyBhcmUKKyAgIG5lZWRlZC4gIEl0IGNvbnRhaW5zIGFycmF5cyBvZiBub2RlcyB0aGF0IGNhbiBwb3RlbnRpYWxseSBiZQorICAgaW52b2x2ZWQgaW4gdGhlIGJhbGFuY2luZyBvZiBub2RlIFMsIGFuZCBwYXJhbWV0ZXJzIHRoYXQgZGVmaW5lIGhvdworICAgZWFjaCBvZiB0aGUgbm9kZXMgbXVzdCBiZSBiYWxhbmNlZC4gIE5vdGUgdGhhdCBpbiB0aGVzZSBhbGdvcml0aG1zCisgICBmb3IgYmFsYW5jaW5nIHRoZSB3b3JzdCBjYXNlIGlzIHRvIG5lZWQgdG8gYmFsYW5jZSB0aGUgY3VycmVudCBub2RlCisgICBTIGFuZCB0aGUgbGVmdCBhbmQgcmlnaHQgbmVpZ2hib3JzIGFuZCBhbGwgb2YgdGhlaXIgcGFyZW50cyBwbHVzCisgICBjcmVhdGUgYSBuZXcgbm9kZS4gIFdlIGltcGxlbWVudCBTMSBiYWxhbmNpbmcgZm9yIHRoZSBsZWFmIG5vZGVzCisgICBhbmQgUzAgYmFsYW5jaW5nIGZvciB0aGUgaW50ZXJuYWwgbm9kZXMgKFMxIGFuZCBTMCBhcmUgZGVmaW5lZCBpbgorICAgb3VyIHBhcGVycy4pKi8KKworI2RlZmluZSBNQVhfRlJFRV9CTE9DSyA3CS8qIHNpemUgb2YgdGhlIGFycmF5IG9mIGJ1ZmZlcnMgdG8gZnJlZSBhdCBlbmQgb2YgZG9fYmFsYW5jZSAqLworCisvKiBtYXhpbXVtIG51bWJlciBvZiBGRUIgYmxvY2tucnMgb24gYSBzaW5nbGUgbGV2ZWwgKi8KKyNkZWZpbmUgTUFYX0FNT1VOVF9ORUVERUQgMgorCisvKiBzb21lZGF5IHNvbWVib2R5IHdpbGwgcHJlZml4IGV2ZXJ5IGZpZWxkIGluIHRoaXMgc3RydWN0IHdpdGggdGJfICovCitzdHJ1Y3QgdHJlZV9iYWxhbmNlCit7CisgIGludCB0Yl9tb2RlOworICBpbnQgbmVlZF9iYWxhbmNlX2RpcnR5OworICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiB0Yl9zYjsKKyAgc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdHJhbnNhY3Rpb25faGFuZGxlIDsKKyAgc3RydWN0IHBhdGggKiB0Yl9wYXRoOworICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBMW01BWF9IRUlHSFRdOyAgICAgICAgLyogYXJyYXkgb2YgbGVmdCBuZWlnaGJvcnMgb2Ygbm9kZXMgaW4gdGhlIHBhdGggKi8KKyAgc3RydWN0IGJ1ZmZlcl9oZWFkICogUltNQVhfSEVJR0hUXTsgICAgICAgIC8qIGFycmF5IG9mIHJpZ2h0IG5laWdoYm9ycyBvZiBub2RlcyBpbiB0aGUgcGF0aCovCisgIHN0cnVjdCBidWZmZXJfaGVhZCAqIEZMW01BWF9IRUlHSFRdOyAgICAgICAvKiBhcnJheSBvZiBmYXRoZXJzIG9mIHRoZSBsZWZ0ICBuZWlnaGJvcnMgICAgICAqLworICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBGUltNQVhfSEVJR0hUXTsgICAgICAgLyogYXJyYXkgb2YgZmF0aGVycyBvZiB0aGUgcmlnaHQgbmVpZ2hib3JzICAgICAgKi8KKyAgc3RydWN0IGJ1ZmZlcl9oZWFkICogQ0ZMW01BWF9IRUlHSFRdOyAgICAgIC8qIGFycmF5IG9mIGNvbW1vbiBwYXJlbnRzIG9mIGNlbnRlciBub2RlIGFuZCBpdHMgbGVmdCBuZWlnaGJvciAgKi8KKyAgc3RydWN0IGJ1ZmZlcl9oZWFkICogQ0ZSW01BWF9IRUlHSFRdOyAgICAgIC8qIGFycmF5IG9mIGNvbW1vbiBwYXJlbnRzIG9mIGNlbnRlciBub2RlIGFuZCBpdHMgcmlnaHQgbmVpZ2hib3IgKi8KKworICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBGRUJbTUFYX0ZFQl9TSVpFXTsgLyogYXJyYXkgb2YgZW1wdHkgYnVmZmVycy4gTnVtYmVyIG9mIGJ1ZmZlcnMgaW4gYXJyYXkgZXF1YWxzCisJCQkJCSAgICAgY3VyX2Jsa251bS4gKi8KKyAgc3RydWN0IGJ1ZmZlcl9oZWFkICogdXNlZFtNQVhfRkVCX1NJWkVdOworICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiB0aHJvd25bTUFYX0ZFQl9TSVpFXTsKKyAgaW50IGxudW1bTUFYX0hFSUdIVF07CS8qIGFycmF5IG9mIG51bWJlciBvZiBpdGVtcyB3aGljaCBtdXN0IGJlCisJCQkgICBzaGlmdGVkIHRvIHRoZSBsZWZ0IGluIG9yZGVyIHRvIGJhbGFuY2UgdGhlCisJCQkgICBjdXJyZW50IG5vZGU7IGZvciBsZWF2ZXMgaW5jbHVkZXMgaXRlbSB0aGF0CisJCQkgICB3aWxsIGJlIHBhcnRpYWxseSBzaGlmdGVkOyBmb3IgaW50ZXJuYWwKKwkJCSAgIG5vZGVzLCBpdCBpcyB0aGUgbnVtYmVyIG9mIGNoaWxkIHBvaW50ZXJzCisJCQkgICByYXRoZXIgdGhhbiBpdGVtcy4gSXQgaW5jbHVkZXMgdGhlIG5ldyBpdGVtCisJCQkgICBiZWluZyBjcmVhdGVkLiBUaGUgY29kZSBzb21ldGltZXMgc3VidHJhY3RzCisJCQkgICBvbmUgdG8gZ2V0IHRoZSBudW1iZXIgb2Ygd2hvbGx5IHNoaWZ0ZWQKKwkJCSAgIGl0ZW1zIGZvciBvdGhlciBwdXJwb3Nlcy4gKi8KKyAgaW50IHJudW1bTUFYX0hFSUdIVF07CS8qIHN1YnN0aXR1dGUgcmlnaHQgZm9yIGxlZnQgaW4gY29tbWVudCBhYm92ZSAqLworICBpbnQgbGtleVtNQVhfSEVJR0hUXTsgICAgICAgICAgICAgICAvKiBhcnJheSBpbmRleGVkIGJ5IGhlaWdodCBoIG1hcHBpbmcgdGhlIGtleSBkZWxpbWl0aW5nIExbaF0gYW5kCisJCQkJCSAgICAgICBTW2hdIHRvIGl0cyBpdGVtIG51bWJlciB3aXRoaW4gdGhlIG5vZGUgQ0ZMW2hdICovCisgIGludCBya2V5W01BWF9IRUlHSFRdOyAgICAgICAgICAgICAgIC8qIHN1YnN0aXR1dGUgciBmb3IgbCBpbiBjb21tZW50IGFib3ZlICovCisgIGludCBpbnNlcnRfc2l6ZVtNQVhfSEVJR0hUXTsgICAgICAgIC8qIHRoZSBudW1iZXIgb2YgYnl0ZXMgYnkgd2UgYXJlIHRyeWluZyB0byBhZGQgb3IgcmVtb3ZlIGZyb20KKwkJCQkJICAgICAgIFNbaF0uIEEgbmVnYXRpdmUgdmFsdWUgbWVhbnMgcmVtb3ZpbmcuICAqLworICBpbnQgYmxrbnVtW01BWF9IRUlHSFRdOyAgICAgICAgICAgICAvKiBudW1iZXIgb2Ygbm9kZXMgdGhhdCB3aWxsIHJlcGxhY2Ugbm9kZSBTW2hdIGFmdGVyCisJCQkJCSAgICAgICBiYWxhbmNpbmcgb24gdGhlIGxldmVsIGggb2YgdGhlIHRyZWUuICBJZiAwIHRoZW4gUyBpcworCQkJCQkgICAgICAgYmVpbmcgZGVsZXRlZCwgaWYgMSB0aGVuIFMgaXMgcmVtYWluaW5nIGFuZCBubyBuZXcgbm9kZXMKKwkJCQkJICAgICAgIGFyZSBiZWluZyBjcmVhdGVkLCBpZiAyIG9yIDMgdGhlbiAxIG9yIDIgbmV3IG5vZGVzIGlzCisJCQkJCSAgICAgICBiZWluZyBjcmVhdGVkICovCisKKyAgLyogZmllbGRzIHRoYXQgYXJlIHVzZWQgb25seSBmb3IgYmFsYW5jaW5nIGxlYXZlcyBvZiB0aGUgdHJlZSAqLworICBpbnQgY3VyX2Jsa251bTsJLyogbnVtYmVyIG9mIGVtcHR5IGJsb2NrcyBoYXZpbmcgYmVlbiBhbHJlYWR5IGFsbG9jYXRlZAkJCSovCisgIGludCBzMG51bTsgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGl0ZW1zIHRoYXQgZmFsbCBpbnRvIGxlZnQgbW9zdCAgbm9kZSB3aGVuIFNbMF0gc3BsaXRzCSovCisgIGludCBzMW51bTsgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGl0ZW1zIHRoYXQgZmFsbCBpbnRvIGZpcnN0ICBuZXcgbm9kZSB3aGVuIFNbMF0gc3BsaXRzCSovCisgIGludCBzMm51bTsgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGl0ZW1zIHRoYXQgZmFsbCBpbnRvIHNlY29uZCBuZXcgbm9kZSB3aGVuIFNbMF0gc3BsaXRzCSovCisgIGludCBsYnl0ZXM7ICAgICAgICAgICAgLyogbnVtYmVyIG9mIGJ5dGVzIHdoaWNoIGNhbiBmbG93IHRvIHRoZSBsZWZ0IG5laWdoYm9yIGZyb20gdGhlCWxlZnQJKi8KKyAgLyogbW9zdCBsaXF1aWQgaXRlbSB0aGF0IGNhbm5vdCBiZSBzaGlmdGVkIGZyb20gU1swXSBlbnRpcmVseQkJKi8KKyAgLyogaWYgLTEgdGhlbiBub3RoaW5nIHdpbGwgYmUgcGFydGlhbGx5IHNoaWZ0ZWQgKi8KKyAgaW50IHJieXRlczsgICAgICAgICAgICAvKiBudW1iZXIgb2YgYnl0ZXMgd2hpY2ggd2lsbCBmbG93IHRvIHRoZSByaWdodCBuZWlnaGJvciBmcm9tIHRoZSByaWdodAkqLworICAvKiBtb3N0IGxpcXVpZCBpdGVtIHRoYXQgY2Fubm90IGJlIHNoaWZ0ZWQgZnJvbSBTWzBdIGVudGlyZWx5CQkqLworICAvKiBpZiAtMSB0aGVuIG5vdGhpbmcgd2lsbCBiZSBwYXJ0aWFsbHkgc2hpZnRlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIGludCBzMWJ5dGVzOwkJLyogbnVtYmVyIG9mIGJ5dGVzIHdoaWNoIGZsb3cgdG8gdGhlIGZpcnN0ICBuZXcgbm9kZSB3aGVuIFNbMF0gc3BsaXRzCSovCisgICAgICAgICAgICAJCQkvKiBub3RlOiBpZiBTWzBdIHNwbGl0cyBpbnRvIDMgbm9kZXMsIHRoZW4gaXRlbXMgZG8gbm90IG5lZWQgdG8gYmUgY3V0CSovCisgIGludCBzMmJ5dGVzOworICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBidWZfdG9fZnJlZVtNQVhfRlJFRV9CTE9DS107IC8qIGJ1ZmZlcnMgd2hpY2ggYXJlIHRvIGJlIGZyZWVkIGFmdGVyIGRvX2JhbGFuY2UgZmluaXNoZXMgYnkgdW5maXhfbm9kZXMgKi8KKyAgY2hhciAqIHZuX2J1ZjsJCS8qIGttYWxsb2NlZCBtZW1vcnkuIFVzZWQgdG8gY3JlYXRlCisJCQkJICAgdmlydHVhbCBub2RlIGFuZCBrZWVwIG1hcCBvZgorCQkJCSAgIGRpcnRpZWQgYml0bWFwIGJsb2NrcyAqLworICBpbnQgdm5fYnVmX3NpemU7CQkvKiBzaXplIG9mIHRoZSB2bl9idWYgKi8KKyAgc3RydWN0IHZpcnR1YWxfbm9kZSAqIHRiX3ZuOwkvKiBWTiBzdGFydHMgYWZ0ZXIgYml0bWFwIG9mIGJpdG1hcCBibG9ja3MgKi8KKworICBpbnQgZnNfZ2VuOyAgICAgICAgICAgICAgICAgIC8qIHNhdmVkIHZhbHVlIG9mIGByZWlzZXJmc19nZW5lcmF0aW9uJyBjb3VudGVyCisJCQkgICAgICAgICAgc2VlIEZJTEVTWVNURU1fQ0hBTkdFRCgpIG1hY3JvIGluIHJlaXNlcmZzX2ZzLmggKi8KKyNpZmRlZiBESVNQTEFDRV9ORVdfUEFDS0lOR19MT0NBTElUSUVTCisgIHN0cnVjdCByZWlzZXJmc19rZXkgIGtleTsJICAgICAgLyoga2V5IHBvaW50ZXIsIHRvIHBhc3MgdG8gYmxvY2sgYWxsb2NhdG9yIG9yCisJCQkJIGFub3RoZXIgbG93LWxldmVsIHN1YnN5c3RlbSAqLworI2VuZGlmCit9IDsKKworLyogVGhlc2UgYXJlIG1vZGVzIG9mIGJhbGFuY2luZyAqLworCisvKiBXaGVuIGluc2VydGluZyBhbiBpdGVtLiAqLworI2RlZmluZSBNX0lOU0VSVAknaScKKy8qIFdoZW4gaW5zZXJ0aW5nIGludG8gKGRpcmVjdG9yaWVzIG9ubHkpIG9yIGFwcGVuZGluZyBvbnRvIGFuIGFscmVhZHkKKyAgIGV4aXN0YW50IGl0ZW0uICovCisjZGVmaW5lIE1fUEFTVEUJCSdwJworLyogV2hlbiBkZWxldGluZyBhbiBpdGVtLiAqLworI2RlZmluZSBNX0RFTEVURQknZCcKKy8qIFdoZW4gdHJ1bmNhdGluZyBhbiBpdGVtIG9yIHJlbW92aW5nIGFuIGVudHJ5IGZyb20gYSAoZGlyZWN0b3J5KSBpdGVtLiAqLworI2RlZmluZSBNX0NVVCAJCSdjJworCisvKiB1c2VkIHdoZW4gYmFsYW5jaW5nIG9uIGxlYWYgbGV2ZWwgc2tpcHBlZCAoaW4gcmVpc2VyZnNjaykgKi8KKyNkZWZpbmUgTV9JTlRFUk5BTAknbicKKworLyogV2hlbiBmdXJ0aGVyIGJhbGFuY2luZyBpcyBub3QgbmVlZGVkLCB0aGVuIGRvX2JhbGFuY2UgZG9lcyBub3QgbmVlZAorICAgdG8gYmUgY2FsbGVkLiAqLworI2RlZmluZSBNX1NLSVBfQkFMQU5DSU5HIAkJJ3MnCisjZGVmaW5lIE1fQ09OVkVSVAkndicKKworLyogbW9kZXMgb2YgbGVhZl9tb3ZlX2l0ZW1zICovCisjZGVmaW5lIExFQUZfRlJPTV9TX1RPX0wgMAorI2RlZmluZSBMRUFGX0ZST01fU19UT19SIDEKKyNkZWZpbmUgTEVBRl9GUk9NX1JfVE9fTCAyCisjZGVmaW5lIExFQUZfRlJPTV9MX1RPX1IgMworI2RlZmluZSBMRUFGX0ZST01fU19UT19TTkVXIDQKKworI2RlZmluZSBGSVJTVF9UT19MQVNUIDAKKyNkZWZpbmUgTEFTVF9UT19GSVJTVCAxCisKKy8qIHVzZWQgaW4gZG9fYmFsYW5jZSBmb3IgcGFzc2luZyBwYXJlbnQgb2Ygbm9kZSBpbmZvcm1hdGlvbiB0aGF0IGhhcworICAgYmVlbiBnb3R0ZW4gZnJvbSB0YiBzdHJ1Y3QgKi8KK3N0cnVjdCBidWZmZXJfaW5mbyB7CisgICAgc3RydWN0IHRyZWVfYmFsYW5jZSAqIHRiOworICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqIGJpX2JoOworICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqIGJpX3BhcmVudDsKKyAgICBpbnQgYmlfcG9zaXRpb247Cit9OworCisKKy8qIHRoZXJlIGFyZSA0IHR5cGVzIG9mIGl0ZW1zOiBzdGF0IGRhdGEsIGRpcmVjdG9yeSBpdGVtLCBpbmRpcmVjdCwgZGlyZWN0LgorKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSsKK3wJICAgICAgICAgICAgfCAga19vZmZzZXQgIHwga191bmlxdWVuZXNzIHwgbWVyZ2VhYmxlPyB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKworfCAgICAgc3RhdCBkYXRhICAgICB8CTAgICAgICAgIHwgICAgICAwICAgICAgIHwgICBubyAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKworfCAxc3QgZGlyZWN0b3J5IGl0ZW18IERPVF9PRkZTRVQgfERJUkVOVFJZX1VOSVFVRU5FU1N8ICAgbm8gICAgICAgfCAKK3wgbm9uIDFzdCBkaXJlY3RvcnkgfCBoYXNoIHZhbHVlIHwgICAgICAgICAgICAgIHwgICB5ZXMgICAgICB8Cit8ICAgICBpdGVtICAgICAgICAgIHwgICAgICAgICAgICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSsKK3wgaW5kaXJlY3QgaXRlbSAgICAgfCBvZmZzZXQgKyAxIHxUWVBFX0lORElSRUNUIHwgICBpZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3QgaW5kaXJlY3QgaXRlbSBvZiB0aGUgb2JqZWN0CisrLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKworfCBkaXJlY3QgaXRlbSAgICAgICB8IG9mZnNldCArIDEgfFRZUEVfRElSRUNUICAgfCBpZiBub3QgdGhpcyBpcyBub3QgdGhlIGZpcnN0IGRpcmVjdCBpdGVtIG9mIHRoZSBvYmplY3QKKystLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rCisqLworCitzdHJ1Y3QgaXRlbV9vcGVyYXRpb25zIHsKKyAgICBpbnQgKCpieXRlc19udW1iZXIpIChzdHJ1Y3QgaXRlbV9oZWFkICogaWgsIGludCBibG9ja19zaXplKTsKKyAgICB2b2lkICgqZGVjcmVtZW50X2tleSkgKHN0cnVjdCBjcHVfa2V5ICopOworICAgIGludCAoKmlzX2xlZnRfbWVyZ2VhYmxlKSAoc3RydWN0IHJlaXNlcmZzX2tleSAqIGloLCB1bnNpZ25lZCBsb25nIGJzaXplKTsKKyAgICB2b2lkICgqcHJpbnRfaXRlbSkgKHN0cnVjdCBpdGVtX2hlYWQgKiwgY2hhciAqIGl0ZW0pOworICAgIHZvaWQgKCpjaGVja19pdGVtKSAoc3RydWN0IGl0ZW1faGVhZCAqLCBjaGFyICogaXRlbSk7CisKKyAgICBpbnQgKCpjcmVhdGVfdmkpIChzdHJ1Y3QgdmlydHVhbF9ub2RlICogdm4sIHN0cnVjdCB2aXJ0dWFsX2l0ZW0gKiB2aSwgCisJCSAgICAgIGludCBpc19hZmZlY3RlZCwgaW50IGluc2VydF9zaXplKTsKKyAgICBpbnQgKCpjaGVja19sZWZ0KSAoc3RydWN0IHZpcnR1YWxfaXRlbSAqIHZpLCBpbnQgZnJlZSwgCisJCQkgICAgaW50IHN0YXJ0X3NraXAsIGludCBlbmRfc2tpcCk7CisgICAgaW50ICgqY2hlY2tfcmlnaHQpIChzdHJ1Y3QgdmlydHVhbF9pdGVtICogdmksIGludCBmcmVlKTsKKyAgICBpbnQgKCpwYXJ0X3NpemUpIChzdHJ1Y3QgdmlydHVhbF9pdGVtICogdmksIGludCBmcm9tLCBpbnQgdG8pOworICAgIGludCAoKnVuaXRfbnVtKSAoc3RydWN0IHZpcnR1YWxfaXRlbSAqIHZpKTsKKyAgICB2b2lkICgqcHJpbnRfdmkpIChzdHJ1Y3QgdmlydHVhbF9pdGVtICogdmkpOworfTsKKworCitleHRlcm4gc3RydWN0IGl0ZW1fb3BlcmF0aW9ucyAqIGl0ZW1fb3BzIFtUWVBFX0FOWSArIDFdOworCisjZGVmaW5lIG9wX2J5dGVzX251bWJlcihpaCxic2l6ZSkgICAgICAgICAgICAgICAgICAgIGl0ZW1fb3BzW2xlX2loX2tfdHlwZSAoaWgpXS0+Ynl0ZXNfbnVtYmVyIChpaCwgYnNpemUpCisjZGVmaW5lIG9wX2lzX2xlZnRfbWVyZ2VhYmxlKGtleSxic2l6ZSkgICAgICAgICAgICAgIGl0ZW1fb3BzW2xlX2tleV9rX3R5cGUgKGxlX2tleV92ZXJzaW9uIChrZXkpLCBrZXkpXS0+aXNfbGVmdF9tZXJnZWFibGUgKGtleSwgYnNpemUpCisjZGVmaW5lIG9wX3ByaW50X2l0ZW0oaWgsaXRlbSkgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1fb3BzW2xlX2loX2tfdHlwZSAoaWgpXS0+cHJpbnRfaXRlbSAoaWgsIGl0ZW0pCisjZGVmaW5lIG9wX2NoZWNrX2l0ZW0oaWgsaXRlbSkgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1fb3BzW2xlX2loX2tfdHlwZSAoaWgpXS0+Y2hlY2tfaXRlbSAoaWgsIGl0ZW0pCisjZGVmaW5lIG9wX2NyZWF0ZV92aSh2bix2aSxpc19hZmZlY3RlZCxpbnNlcnRfc2l6ZSkgIGl0ZW1fb3BzW2xlX2loX2tfdHlwZSAoKHZpKS0+dmlfaWgpXS0+Y3JlYXRlX3ZpICh2bix2aSxpc19hZmZlY3RlZCxpbnNlcnRfc2l6ZSkKKyNkZWZpbmUgb3BfY2hlY2tfbGVmdCh2aSxmcmVlLHN0YXJ0X3NraXAsZW5kX3NraXApIGl0ZW1fb3BzWyh2aSktPnZpX2luZGV4XS0+Y2hlY2tfbGVmdCAodmksIGZyZWUsIHN0YXJ0X3NraXAsIGVuZF9za2lwKQorI2RlZmluZSBvcF9jaGVja19yaWdodCh2aSxmcmVlKSAgICAgICAgICAgICAgICAgICAgICBpdGVtX29wc1sodmkpLT52aV9pbmRleF0tPmNoZWNrX3JpZ2h0ICh2aSwgZnJlZSkKKyNkZWZpbmUgb3BfcGFydF9zaXplKHZpLGZyb20sdG8pICAgICAgICAgICAgICAgICAgICAgaXRlbV9vcHNbKHZpKS0+dmlfaW5kZXhdLT5wYXJ0X3NpemUgKHZpLCBmcm9tLCB0bykKKyNkZWZpbmUgb3BfdW5pdF9udW0odmkpCQkJCSAgICAgaXRlbV9vcHNbKHZpKS0+dmlfaW5kZXhdLT51bml0X251bSAodmkpCisjZGVmaW5lIG9wX3ByaW50X3ZpKHZpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1fb3BzWyh2aSktPnZpX2luZGV4XS0+cHJpbnRfdmkgKHZpKQorCisKKworI2RlZmluZSBDT01QX1NIT1JUX0tFWVMgY29tcF9zaG9ydF9rZXlzCisKKy8qIG51bWJlciBvZiBibG9ja3MgcG9pbnRlZCB0byBieSB0aGUgaW5kaXJlY3QgaXRlbSAqLworI2RlZmluZSBJX1VORk1fTlVNKHBfc19paCkJKCBpaF9pdGVtX2xlbihwX3NfaWgpIC8gVU5GTV9QX1NJWkUgKQorCisvKiB0aGUgdXNlZCBzcGFjZSB3aXRoaW4gdGhlIHVuZm9ybWF0dGVkIG5vZGUgY29ycmVzcG9uZGluZyB0byBwb3Mgd2l0aGluIHRoZSBpdGVtIHBvaW50ZWQgdG8gYnkgaWggKi8KKyNkZWZpbmUgSV9QT1NfVU5GTV9TSVpFKGloLHBvcyxzaXplKSAoKChwb3MpID09IElfVU5GTV9OVU0oaWgpIC0gMSApID8gKHNpemUpIC0gaWhfZnJlZV9zcGFjZShpaCkgOiAoc2l6ZSkpCisKKy8qIG51bWJlciBvZiBieXRlcyBjb250YWluZWQgYnkgdGhlIGRpcmVjdCBpdGVtIG9yIHRoZSB1bmZvcm1hdHRlZCBub2RlcyB0aGUgaW5kaXJlY3QgaXRlbSBwb2ludHMgdG8gKi8KKworCisvKiBnZXQgdGhlIGl0ZW0gaGVhZGVyICovIAorI2RlZmluZSBCX05fUElURU1fSEVBRChiaCxpdGVtX251bSkgKCAoc3RydWN0IGl0ZW1faGVhZCAqICkoKGJoKS0+Yl9kYXRhICsgQkxLSF9TSVpFKSArIChpdGVtX251bSkgKQorCisvKiBnZXQga2V5ICovCisjZGVmaW5lIEJfTl9QREVMSU1fS0VZKGJoLGl0ZW1fbnVtKSAoIChzdHJ1Y3QgcmVpc2VyZnNfa2V5ICogKSgoYmgpLT5iX2RhdGEgKyBCTEtIX1NJWkUpICsgKGl0ZW1fbnVtKSApCisKKy8qIGdldCB0aGUga2V5ICovCisjZGVmaW5lIEJfTl9QS0VZKGJoLGl0ZW1fbnVtKSAoICYoQl9OX1BJVEVNX0hFQUQoYmgsaXRlbV9udW0pLT5paF9rZXkpICkKKworLyogZ2V0IGl0ZW0gYm9keSAqLworI2RlZmluZSBCX05fUElURU0oYmgsaXRlbV9udW0pICggKGJoKS0+Yl9kYXRhICsgaWhfbG9jYXRpb24oQl9OX1BJVEVNX0hFQUQoKGJoKSwoaXRlbV9udW0pKSkpCisKKy8qIGdldCB0aGUgc3RhdCBkYXRhIGJ5IHRoZSBidWZmZXIgaGVhZGVyIGFuZCB0aGUgaXRlbSBvcmRlciAqLworI2RlZmluZSBCX05fU1RBVF9EQVRBKGJoLG5yKSBcCisoIChzdHJ1Y3Qgc3RhdF9kYXRhICopKChiaCktPmJfZGF0YSArIGloX2xvY2F0aW9uKEJfTl9QSVRFTV9IRUFEKChiaCksKG5yKSkpICkgKQorCisgICAgLyogZm9sbG93aW5nIGRlZmluZXMgdXNlIHJlaXNlcmZzIGJ1ZmZlciBoZWFkZXIgYW5kIGl0ZW0gaGVhZGVyICovCisKKy8qIGdldCBzdGF0LWRhdGEgKi8KKyNkZWZpbmUgQl9JX1NUQVRfREFUQShiaCwgaWgpICggKHN0cnVjdCBzdGF0X2RhdGEgKiApKChiaCktPmJfZGF0YSArIGloX2xvY2F0aW9uKGloKSkgKQorCisvLyB0aGlzIGlzIDM5NzYgZm9yIHNpemU9PTQwOTYKKyNkZWZpbmUgTUFYX0RJUkVDVF9JVEVNX0xFTihzaXplKSAoKHNpemUpIC0gQkxLSF9TSVpFIC0gMipJSF9TSVpFIC0gU0RfU0laRSAtIFVORk1fUF9TSVpFKQorCisvKiBpbmRpcmVjdCBpdGVtcyBjb25zaXN0IG9mIGVudHJpZXMgd2hpY2ggY29udGFpbiBibG9ja25ycywgcG9zCisgICBpbmRpY2F0ZXMgd2hpY2ggZW50cnksIGFuZCBCX0lfUE9TX1VORk1fUE9JTlRFUiByZXNvbHZlcyB0byB0aGUKKyAgIGJsb2NrbnIgY29udGFpbmVkIGJ5IHRoZSBlbnRyeSBwb3MgcG9pbnRzIHRvICovCisjZGVmaW5lIEJfSV9QT1NfVU5GTV9QT0lOVEVSKGJoLGloLHBvcykgbGUzMl90b19jcHUoKigoKHVucF90ICopQl9JX1BJVEVNKGJoLGloKSkgKyAocG9zKSkpCisjZGVmaW5lIFBVVF9CX0lfUE9TX1VORk1fUE9JTlRFUihiaCxpaCxwb3MsIHZhbCkgZG8geyooKCh1bnBfdCAqKUJfSV9QSVRFTShiaCxpaCkpICsgKHBvcykpID0gY3B1X3RvX2xlMzIodmFsKTsgfSB3aGlsZSAoMCkKKworc3RydWN0IHJlaXNlcmZzX2lnZXRfYXJncyB7CisgICAgX191MzIgb2JqZWN0aWQgOworICAgIF9fdTMyIGRpcmlkIDsKK30gOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgIEZVTkNUSU9OIERFQ0xBUkFUSU9OUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qI2lmZGVmIF9fS0VSTkVMX18qLworI2RlZmluZSBnZXRfam91cm5hbF9kZXNjX21hZ2ljKGJoKSAoYmgtPmJfZGF0YSArIGJoLT5iX3NpemUgLSAxMikKKworI2RlZmluZSBqb3VybmFsX3RyYW5zX2hhbGYoYmxvY2tzaXplKSBcCisJKChibG9ja3NpemUgLSBzaXplb2YgKHN0cnVjdCByZWlzZXJmc19qb3VybmFsX2Rlc2MpICsgc2l6ZW9mIChfX3UzMikgLSAxMikgLyBzaXplb2YgKF9fdTMyKSkKKworLyogam91cm5hbC5jIHNlZSBqb3VybmFsLmMgZm9yIGFsbCB0aGUgY29tbWVudHMgaGVyZSAqLworCisvKiBmaXJzdCBibG9jayB3cml0dGVuIGluIGEgY29tbWl0LiAgKi8KK3N0cnVjdCByZWlzZXJmc19qb3VybmFsX2Rlc2MgeworICBfX3UzMiBqX3RyYW5zX2lkIDsJCQkvKiBpZCBvZiBjb21taXQgKi8KKyAgX191MzIgal9sZW4gOwkJCS8qIGxlbmd0aCBvZiBjb21taXQuIGxlbiArMSBpcyB0aGUgY29tbWl0IGJsb2NrICovCisgIF9fdTMyIGpfbW91bnRfaWQgOwkJCQkvKiBtb3VudCBpZCBvZiB0aGlzIHRyYW5zKi8KKyAgX191MzIgal9yZWFsYmxvY2tbMV0gOyAvKiByZWFsIGxvY2F0aW9ucyBmb3IgZWFjaCBibG9jayAqLworfSA7CisKKyNkZWZpbmUgZ2V0X2Rlc2NfdHJhbnNfaWQoZCkgICBsZTMyX3RvX2NwdSgoZCktPmpfdHJhbnNfaWQpCisjZGVmaW5lIGdldF9kZXNjX3RyYW5zX2xlbihkKSAgbGUzMl90b19jcHUoKGQpLT5qX2xlbikKKyNkZWZpbmUgZ2V0X2Rlc2NfbW91bnRfaWQoZCkgICBsZTMyX3RvX2NwdSgoZCktPmpfbW91bnRfaWQpCisKKyNkZWZpbmUgc2V0X2Rlc2NfdHJhbnNfaWQoZCx2YWwpICAgICAgIGRvIHsgKGQpLT5qX3RyYW5zX2lkID0gY3B1X3RvX2xlMzIgKHZhbCk7IH0gd2hpbGUgKDApCisjZGVmaW5lIHNldF9kZXNjX3RyYW5zX2xlbihkLHZhbCkgICAgICBkbyB7IChkKS0+al9sZW4gPSBjcHVfdG9fbGUzMiAodmFsKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgc2V0X2Rlc2NfbW91bnRfaWQoZCx2YWwpICAgICAgIGRvIHsgKGQpLT5qX21vdW50X2lkID0gY3B1X3RvX2xlMzIgKHZhbCk7IH0gd2hpbGUgKDApCisKKy8qIGxhc3QgYmxvY2sgd3JpdHRlbiBpbiBhIGNvbW1pdCAqLworc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfY29tbWl0IHsKKyAgX191MzIgal90cmFuc19pZCA7CQkJLyogbXVzdCBtYXRjaCBqX3RyYW5zX2lkIGZyb20gdGhlIGRlc2MgYmxvY2sgKi8KKyAgX191MzIgal9sZW4gOwkJCS8qIGRpdHRvICovCisgIF9fdTMyIGpfcmVhbGJsb2NrWzFdIDsgLyogcmVhbCBsb2NhdGlvbnMgZm9yIGVhY2ggYmxvY2sgKi8KK30gOworCisjZGVmaW5lIGdldF9jb21taXRfdHJhbnNfaWQoYykgbGUzMl90b19jcHUoKGMpLT5qX3RyYW5zX2lkKQorI2RlZmluZSBnZXRfY29tbWl0X3RyYW5zX2xlbihjKSAgICAgICAgbGUzMl90b19jcHUoKGMpLT5qX2xlbikKKyNkZWZpbmUgZ2V0X2NvbW1pdF9tb3VudF9pZChjKSBsZTMyX3RvX2NwdSgoYyktPmpfbW91bnRfaWQpCisKKyNkZWZpbmUgc2V0X2NvbW1pdF90cmFuc19pZChjLHZhbCkgICAgIGRvIHsgKGMpLT5qX3RyYW5zX2lkID0gY3B1X3RvX2xlMzIgKHZhbCk7IH0gd2hpbGUgKDApCisjZGVmaW5lIHNldF9jb21taXRfdHJhbnNfbGVuKGMsdmFsKSAgICBkbyB7IChjKS0+al9sZW4gPSBjcHVfdG9fbGUzMiAodmFsKTsgfSB3aGlsZSAoMCkKKworLyogdGhpcyBoZWFkZXIgYmxvY2sgZ2V0cyB3cml0dGVuIHdoZW5ldmVyIGEgdHJhbnNhY3Rpb24gaXMgY29uc2lkZXJlZCBmdWxseSBmbHVzaGVkLCBhbmQgaXMgbW9yZSByZWNlbnQgdGhhbiB0aGUKKyoqIGxhc3QgZnVsbHkgZmx1c2hlZCB0cmFuc2FjdGlvbi4gIGZ1bGx5IGZsdXNoZWQgbWVhbnMgYWxsIHRoZSBsb2cgYmxvY2tzIGFuZCBhbGwgdGhlIHJlYWwgYmxvY2tzIGFyZSBvbiBkaXNrLAorKiogYW5kIHRoaXMgdHJhbnNhY3Rpb24gZG9lcyBub3QgbmVlZCB0byBiZSByZXBsYXllZC4KKyovCitzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9oZWFkZXIgeworICBfX3UzMiBqX2xhc3RfZmx1c2hfdHJhbnNfaWQgOwkJLyogaWQgb2YgbGFzdCBmdWxseSBmbHVzaGVkIHRyYW5zYWN0aW9uICovCisgIF9fdTMyIGpfZmlyc3RfdW5mbHVzaGVkX29mZnNldCA7ICAgICAgLyogb2Zmc2V0IGluIHRoZSBsb2cgb2Ygd2hlcmUgdG8gc3RhcnQgcmVwbGF5IGFmdGVyIGEgY3Jhc2ggKi8KKyAgX191MzIgal9tb3VudF9pZCA7CisgIC8qIDEyICovIHN0cnVjdCBqb3VybmFsX3BhcmFtcyBqaF9qb3VybmFsOworfSA7CisKKy8qIGJpZ2dlc3QgdHVuYWJsZSBkZWZpbmVzIGFyZSByaWdodCBoZXJlICovCisjZGVmaW5lIEpPVVJOQUxfQkxPQ0tfQ09VTlQgODE5MiAvKiBudW1iZXIgb2YgYmxvY2tzIGluIHRoZSBqb3VybmFsICovCisjZGVmaW5lIEpPVVJOQUxfVFJBTlNfTUFYX0RFRkFVTFQgMTAyNCAgIC8qIGJpZ2dlc3QgcG9zc2libGUgc2luZ2xlIHRyYW5zYWN0aW9uLCBkb24ndCBjaGFuZ2UgZm9yIG5vdyAoOC8zLzk5KSAqLworI2RlZmluZSBKT1VSTkFMX1RSQU5TX01JTl9ERUZBVUxUIDI1NgorI2RlZmluZSBKT1VSTkFMX01BWF9CQVRDSF9ERUZBVUxUICAgOTAwIC8qIG1heCBibG9ja3MgdG8gYmF0Y2ggaW50byBvbmUgdHJhbnNhY3Rpb24sIGRvbid0IG1ha2UgdGhpcyBhbnkgYmlnZ2VyIHRoYW4gOTAwICovCisjZGVmaW5lIEpPVVJOQUxfTUlOX1JBVElPIDIKKyNkZWZpbmUgSk9VUk5BTF9NQVhfQ09NTUlUX0FHRSAzMCAKKyNkZWZpbmUgSk9VUk5BTF9NQVhfVFJBTlNfQUdFIDMwCisjZGVmaW5lIEpPVVJOQUxfUEVSX0JBTEFOQ0VfQ05UICgzICogKE1BWF9IRUlHSFQtMikgKyA5KQorI2lmZGVmIENPTkZJR19RVU9UQQorI2RlZmluZSBSRUlTRVJGU19RVU9UQV9UUkFOU19CTE9DS1MgMgkvKiBXZSBuZWVkIHRvIHVwZGF0ZSBkYXRhIGFuZCBpbm9kZSAoYXRpbWUpICovCisjZGVmaW5lIFJFSVNFUkZTX1FVT1RBX0lOSVRfQkxPQ0tTIChEUVVPVF9NQVhfV1JJVEVTKihKT1VSTkFMX1BFUl9CQUxBTkNFX0NOVCsyKSsxKQkvKiAxIGJhbGFuY2luZywgMSBiaXRtYXAsIDEgZGF0YSBwZXIgd3JpdGUgKyBzdGF0IGRhdGEgdXBkYXRlICovCisjZWxzZQorI2RlZmluZSBSRUlTRVJGU19RVU9UQV9UUkFOU19CTE9DS1MgMAorI2RlZmluZSBSRUlTRVJGU19RVU9UQV9JTklUX0JMT0NLUyAwCisjZW5kaWYKKworLyogYm90aCBvZiB0aGVzZSBjYW4gYmUgYXMgbG93IGFzIDEsIG9yIGFzIGhpZ2ggYXMgeW91IHdhbnQuICBUaGUgbWluIGlzIHRoZQorKiogbnVtYmVyIG9mIDRrIGJpdG1hcCBub2RlcyBwcmVhbGxvY2F0ZWQgb24gbW91bnQuIE5ldyBub2RlcyBhcmUgYWxsb2NhdGVkCisqKiBhcyBuZWVkZWQsIGFuZCByZWxlYXNlZCB3aGVuIHRyYW5zYWN0aW9ucyBhcmUgY29tbWl0dGVkLiAgT24gcmVsZWFzZSwgaWYgCisqKiB0aGUgY3VycmVudCBudW1iZXIgb2Ygbm9kZXMgaXMgPiBtYXgsIHRoZSBub2RlIGlzIGZyZWVkLCBvdGhlcndpc2UsIAorKiogaXQgaXMgcHV0IG9uIGEgZnJlZSBsaXN0IGZvciBmYXN0ZXIgdXNlIGxhdGVyLgorKi8KKyNkZWZpbmUgUkVJU0VSRlNfTUlOX0JJVE1BUF9OT0RFUyAxMCAKKyNkZWZpbmUgUkVJU0VSRlNfTUFYX0JJVE1BUF9OT0RFUyAxMDAgCisKKyNkZWZpbmUgSkJIX0hBU0hfU0hJRlQgMTMgLyogdGhlc2UgYXJlIGJhc2VkIG9uIGpvdXJuYWwgaGFzaCBzaXplIG9mIDgxOTIgKi8KKyNkZWZpbmUgSkJIX0hBU0hfTUFTSyA4MTkxCisKKyNkZWZpbmUgX2poYXNoZm4oc2IsYmxvY2spCVwKKwkoKCh1bnNpZ25lZCBsb25nKXNiPj5MMV9DQUNIRV9TSElGVCkgXiBcCisJICgoKGJsb2NrKTw8KEpCSF9IQVNIX1NISUZUIC0gNikpIF4gKChibG9jaykgPj4gMTMpIF4gKChibG9jaykgPDwgKEpCSF9IQVNIX1NISUZUIC0gMTIpKSkpCisjZGVmaW5lIGpvdXJuYWxfaGFzaCh0LHNiLGJsb2NrKSAoKHQpW19qaGFzaGZuKChzYiksKGJsb2NrKSkgJiBKQkhfSEFTSF9NQVNLXSkKKworLy8gV2UgbmVlZCB0aGVzZSB0byBtYWtlIGpvdXJuYWwuYyBjb2RlIG1vcmUgcmVhZGFibGUKKyNkZWZpbmUgam91cm5hbF9maW5kX2dldF9ibG9jayhzLCBibG9jaykgX19maW5kX2dldF9ibG9jayhTQl9KT1VSTkFMKHMpLT5qX2Rldl9iZCwgYmxvY2ssIHMtPnNfYmxvY2tzaXplKQorI2RlZmluZSBqb3VybmFsX2dldGJsayhzLCBibG9jaykgX19nZXRibGsoU0JfSk9VUk5BTChzKS0+al9kZXZfYmQsIGJsb2NrLCBzLT5zX2Jsb2Nrc2l6ZSkKKyNkZWZpbmUgam91cm5hbF9icmVhZChzLCBibG9jaykgX19icmVhZChTQl9KT1VSTkFMKHMpLT5qX2Rldl9iZCwgYmxvY2ssIHMtPnNfYmxvY2tzaXplKQorCitlbnVtIHJlaXNlcmZzX2JoX3N0YXRlX2JpdHMgeworICAgIEJIX0pEaXJ0eSA9IEJIX1ByaXZhdGVTdGFydCwgLyogYnVmZmVyIGlzIGluIGN1cnJlbnQgdHJhbnNhY3Rpb24gKi8KKyAgICBCSF9KRGlydHlfd2FpdCwKKyAgICBCSF9KTmV3LCAgICAgICAgICAgICAgICAgICAgIC8qIGRpc2sgYmxvY2sgd2FzIHRha2VuIG9mZiBmcmVlIGxpc3QgYmVmb3JlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBiZWluZyBpbiBhIGZpbmlzaGVkIHRyYW5zYWN0aW9uLCBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogd3JpdHRlbiB0byBkaXNrLiBDYW4gYmUgcmV1c2VkIGltbWVkLiAqLworICAgIEJIX0pQcmVwYXJlZCwKKyAgICBCSF9KUmVzdG9yZV9kaXJ0eSwKKyAgICBCSF9KVGVzdCwgLy8gZGVidWdnaW5nIG9ubHkgd2lsbCBnbyBhd2F5Cit9OworCitCVUZGRVJfRk5TKEpEaXJ0eSwgam91cm5hbGVkKTsKK1RBU19CVUZGRVJfRk5TKEpEaXJ0eSwgam91cm5hbGVkKTsKK0JVRkZFUl9GTlMoSkRpcnR5X3dhaXQsIGpvdXJuYWxfZGlydHkpOworVEFTX0JVRkZFUl9GTlMoSkRpcnR5X3dhaXQsIGpvdXJuYWxfZGlydHkpOworQlVGRkVSX0ZOUyhKTmV3LCBqb3VybmFsX25ldyk7CitUQVNfQlVGRkVSX0ZOUyhKTmV3LCBqb3VybmFsX25ldyk7CitCVUZGRVJfRk5TKEpQcmVwYXJlZCwgam91cm5hbF9wcmVwYXJlZCk7CitUQVNfQlVGRkVSX0ZOUyhKUHJlcGFyZWQsIGpvdXJuYWxfcHJlcGFyZWQpOworQlVGRkVSX0ZOUyhKUmVzdG9yZV9kaXJ0eSwgam91cm5hbF9yZXN0b3JlX2RpcnR5KTsKK1RBU19CVUZGRVJfRk5TKEpSZXN0b3JlX2RpcnR5LCBqb3VybmFsX3Jlc3RvcmVfZGlydHkpOworQlVGRkVSX0ZOUyhKVGVzdCwgam91cm5hbF90ZXN0KTsKK1RBU19CVUZGRVJfRk5TKEpUZXN0LCBqb3VybmFsX3Rlc3QpOworCisvKgorKiogdHJhbnNhY3Rpb24gaGFuZGxlIHdoaWNoIGlzIHBhc3NlZCBhcm91bmQgZm9yIGFsbCBqb3VybmFsIGNhbGxzCisqLworc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSB7CisgIHN0cnVjdCBzdXBlcl9ibG9jayAqdF9zdXBlciA7IC8qIHN1cGVyIGZvciB0aGlzIEZTIHdoZW4gam91cm5hbF9iZWdpbiB3YXMKKwkJCQkgICBjYWxsZWQuIHNhdmVzIGNhbGxzIHRvIHJlaXNlcmZzX2dldF9zdXBlcgorCQkJCSAgIGFsc28gdXNlZCBieSBuZXN0ZWQgdHJhbnNhY3Rpb25zIHRvIG1ha2UKKwkJCQkgICBzdXJlIHRoZXkgYXJlIG5lc3Rpbmcgb24gdGhlIHJpZ2h0IEZTCisJCQkJICAgX211c3RfIGJlIGZpcnN0IGluIHRoZSBoYW5kbGUKKwkJCQkqLworICBpbnQgdF9yZWZjb3VudDsKKyAgaW50IHRfYmxvY2tzX2xvZ2dlZCA7ICAgICAgICAgLyogbnVtYmVyIG9mIGJsb2NrcyB0aGlzIHdyaXRlciBoYXMgbG9nZ2VkICovCisgIGludCB0X2Jsb2Nrc19hbGxvY2F0ZWQgOyAgICAgIC8qIG51bWJlciBvZiBibG9ja3MgdGhpcyB3cml0ZXIgYWxsb2NhdGVkICovCisgIHVuc2lnbmVkIGxvbmcgdF90cmFuc19pZCA7ICAgIC8qIHNhbml0eSBjaGVjaywgZXF1YWxzIHRoZSBjdXJyZW50IHRyYW5zIGlkICovCisgIHZvaWQgKnRfaGFuZGxlX3NhdmUgOwkJLyogc2F2ZSBleGlzdGluZyBjdXJyZW50LT5qb3VybmFsX2luZm8gKi8KKyAgdW5zaWduZWQgZGlzcGxhY2VfbmV3X2Jsb2NrczoxOyAvKiBpZiBuZXcgYmxvY2sgYWxsb2NhdGlvbiBvY2N1cnJlcywgdGhhdCBibG9jaworCQkJCSAgIHNob3VsZCBiZSBkaXNwbGFjZWQgZnJvbSBvdGhlcnMgKi8KKyAgc3RydWN0IGxpc3RfaGVhZCB0X2xpc3Q7Cit9IDsKKworLyogdXNlZCB0byBrZWVwIHRyYWNrIG9mIG9yZGVyZWQgYW5kIHRhaWwgd3JpdGVzLCBhdHRhY2hlZCB0byB0aGUgYnVmZmVyCisgKiBoZWFkIHRocm91Z2ggYl9qb3VybmFsX2hlYWQuCisgKi8KK3N0cnVjdCByZWlzZXJmc19qaCB7CisgICAgc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfbGlzdCAqamw7CisgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKKyAgICBzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Cit9OworCit2b2lkIHJlaXNlcmZzX2ZyZWVfamgoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCk7CitpbnQgcmVpc2VyZnNfYWRkX3RhaWxfbGlzdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKTsKK2ludCByZWlzZXJmc19hZGRfb3JkZXJlZF9saXN0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpOworaW50IGpvdXJuYWxfbWFya19kaXJ0eShzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICosIHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKSA7CisKK3N0YXRpYyBpbmxpbmUgaW50CityZWlzZXJmc19maWxlX2RhdGFfbG9nKHN0cnVjdCBpbm9kZSAqaW5vZGUpIHsKKyAgICBpZiAocmVpc2VyZnNfZGF0YV9sb2coaW5vZGUtPmlfc2IpIHx8CisgICAgICAgKFJFSVNFUkZTX0koaW5vZGUpLT5pX2ZsYWdzICYgaV9kYXRhX2xvZykpCisgICAgICAgIHJldHVybiAxIDsKKyAgICByZXR1cm4gMCA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHJlaXNlcmZzX3RyYW5zYWN0aW9uX3J1bm5pbmcoc3RydWN0IHN1cGVyX2Jsb2NrICpzKSB7CisgICAgc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGggPSBjdXJyZW50LT5qb3VybmFsX2luZm8gOworICAgIGlmICh0aCAmJiB0aC0+dF9zdXBlciA9PSBzKQorICAgICAgICByZXR1cm4gMSA7CisgICAgaWYgKHRoICYmIHRoLT50X3N1cGVyID09IE5VTEwpCisgICAgICAgIEJVRygpOworICAgIHJldHVybiAwIDsKK30KKworaW50IHJlaXNlcmZzX2FzeW5jX3Byb2dyZXNzX3dhaXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzKTsKKworc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqCityZWlzZXJmc19wZXJzaXN0ZW50X3RyYW5zYWN0aW9uKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBpbnQgY291bnQpOworaW50IHJlaXNlcmZzX2VuZF9wZXJzaXN0ZW50X3RyYW5zYWN0aW9uKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKik7CitpbnQgcmVpc2VyZnNfY29tbWl0X3BhZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCXVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKTsKK2ludCByZWlzZXJmc19mbHVzaF9vbGRfY29tbWl0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CitpbnQgcmVpc2VyZnNfY29tbWl0X2Zvcl9pbm9kZShzdHJ1Y3QgaW5vZGUgKikgOworaW50ICByZWlzZXJmc19pbm9kZV9uZWVkc19jb21taXQoc3RydWN0IGlub2RlICopIDsKK3ZvaWQgcmVpc2VyZnNfdXBkYXRlX2lub2RlX3RyYW5zYWN0aW9uKHN0cnVjdCBpbm9kZSAqKSA7Cit2b2lkIHJlaXNlcmZzX3dhaXRfb25fd3JpdGVfYmxvY2soc3RydWN0IHN1cGVyX2Jsb2NrICpzKSA7Cit2b2lkIHJlaXNlcmZzX2Jsb2NrX3dyaXRlcyhzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCkgOwordm9pZCByZWlzZXJmc19hbGxvd193cml0ZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzKSA7Cit2b2lkIHJlaXNlcmZzX2NoZWNrX2xvY2tfZGVwdGgoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBjaGFyICpjYWxsZXIpIDsKK2ludCByZWlzZXJmc19wcmVwYXJlX2Zvcl9qb3VybmFsKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBpbnQgd2FpdCkgOwordm9pZCByZWlzZXJmc19yZXN0b3JlX3ByZXBhcmVkX2J1ZmZlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkgOworaW50IGpvdXJuYWxfaW5pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgY29uc3QgY2hhciAqIGpfZGV2X25hbWUsIGludCBvbGRfZm9ybWF0LCB1bnNpZ25lZCBpbnQpIDsKK2ludCBqb3VybmFsX3JlbGVhc2Uoc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSosIHN0cnVjdCBzdXBlcl9ibG9jayAqKSA7CitpbnQgam91cm5hbF9yZWxlYXNlX2Vycm9yKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUqLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKikgOworaW50IGpvdXJuYWxfZW5kKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKiwgc3RydWN0IHN1cGVyX2Jsb2NrICosIHVuc2lnbmVkIGxvbmcpIDsKK2ludCBqb3VybmFsX2VuZF9zeW5jKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKiwgc3RydWN0IHN1cGVyX2Jsb2NrICosIHVuc2lnbmVkIGxvbmcpIDsKK2ludCBqb3VybmFsX21hcmtfZnJlZWQoc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgYl9ibG9ja25yX3QgYmxvY2tucikgOworaW50IGpvdXJuYWxfdHJhbnNhY3Rpb25fc2hvdWxkX2VuZChzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICosIGludCkgOworaW50IHJlaXNlcmZzX2luX2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IsIGludCBibWFwX25yLCBpbnQgYml0X25yLCBpbnQgc2VhcmNoYWxsLCBiX2Jsb2NrbnJfdCAqbmV4dCkgOworaW50IGpvdXJuYWxfYmVnaW4oc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwgdW5zaWduZWQgbG9uZykgOworaW50IGpvdXJuYWxfam9pbl9hYm9ydChzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICosIHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiLCB1bnNpZ25lZCBsb25nKSA7Cit2b2lkIHJlaXNlcmZzX2pvdXJuYWxfYWJvcnQgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBlcnJubyk7Cit2b2lkIHJlaXNlcmZzX2Fib3J0IChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgZXJybm8sIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKK2ludCByZWlzZXJmc19hbGxvY2F0ZV9saXN0X2JpdG1hcHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBzdHJ1Y3QgcmVpc2VyZnNfbGlzdF9iaXRtYXAgKiwgaW50KSA7CisKK3ZvaWQgYWRkX3NhdmVfbGluayAoc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqIHRoLAorCQkJCQlzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgaW50IHRydW5jYXRlKTsKK2ludCByZW1vdmVfc2F2ZV9saW5rIChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgaW50IHRydW5jYXRlKTsKKworLyogb2JqZWN0aWQuYyAqLworX191MzIgcmVpc2VyZnNfZ2V0X3VudXNlZF9vYmplY3RpZCAoc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgpOwordm9pZCByZWlzZXJmc19yZWxlYXNlX29iamVjdGlkIChzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwgX191MzIgb2JqZWN0aWRfdG9fcmVsZWFzZSk7CitpbnQgcmVpc2VyZnNfY29udmVydF9vYmplY3RpZF9tYXBfdjEoc3RydWN0IHN1cGVyX2Jsb2NrICopIDsKKworLyogc3RyZWUuYyAqLworaW50IEJfSVNfSU5fVFJFRShjb25zdCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKik7CitleHRlcm4gdm9pZCBjb3B5X2l0ZW1faGVhZChzdHJ1Y3QgaXRlbV9oZWFkICogcF92X3RvLAorCQkJCQkJCQkgIGNvbnN0IHN0cnVjdCBpdGVtX2hlYWQgKiBwX3ZfZnJvbSk7CisKKy8vIGZpcnN0IGtleSBpcyBpbiBjcHUgZm9ybSwgc2Vjb25kIC0gbGUKK2V4dGVybiBpbnQgIGNvbXBfc2hvcnRfa2V5cyAoY29uc3Qgc3RydWN0IHJlaXNlcmZzX2tleSAqIGxlX2tleSwKKwkJCQkgICAgY29uc3Qgc3RydWN0IGNwdV9rZXkgKiBjcHVfa2V5KTsKK2V4dGVybiB2b2lkIGxlX2tleTJjcHVfa2V5IChzdHJ1Y3QgY3B1X2tleSAqIHRvLCBjb25zdCBzdHJ1Y3QgcmVpc2VyZnNfa2V5ICogZnJvbSk7CisKKy8vIGJvdGggYXJlIGluIGxlIGZvcm0KK2V4dGVybiBpbnQgY29tcF9sZV9rZXlzIChjb25zdCBzdHJ1Y3QgcmVpc2VyZnNfa2V5ICosIGNvbnN0IHN0cnVjdCByZWlzZXJmc19rZXkgKik7CitleHRlcm4gaW50IGNvbXBfc2hvcnRfbGVfa2V5cyAoY29uc3Qgc3RydWN0IHJlaXNlcmZzX2tleSAqLCBjb25zdCBzdHJ1Y3QgcmVpc2VyZnNfa2V5ICopOworCisvLworLy8gZ2V0IGtleSB2ZXJzaW9uIGZyb20gb24gZGlzayBrZXkgLSBrbHVkZ2UKKy8vCitzdGF0aWMgaW5saW5lIGludCBsZV9rZXlfdmVyc2lvbiAoY29uc3Qgc3RydWN0IHJlaXNlcmZzX2tleSAqIGtleSkKK3sKKyAgICBpbnQgdHlwZTsKKyAgICAKKyAgICB0eXBlID0gb2Zmc2V0X3YyX2tfdHlwZSggJihrZXktPnUua19vZmZzZXRfdjIpKTsKKyAgICBpZiAodHlwZSAhPSBUWVBFX0RJUkVDVCAmJiB0eXBlICE9IFRZUEVfSU5ESVJFQ1QgJiYgdHlwZSAhPSBUWVBFX0RJUkVOVFJZKQorCXJldHVybiBLRVlfRk9STUFUXzNfNTsKKworICAgIHJldHVybiBLRVlfRk9STUFUXzNfNjsKKwkKK30KKworCitzdGF0aWMgaW5saW5lIHZvaWQgY29weV9rZXkgKHN0cnVjdCByZWlzZXJmc19rZXkgKnRvLCBjb25zdCBzdHJ1Y3QgcmVpc2VyZnNfa2V5ICpmcm9tKQoreworICAgIG1lbWNweSAodG8sIGZyb20sIEtFWV9TSVpFKTsKK30KKworCitpbnQgY29tcF9pdGVtcyAoY29uc3Qgc3RydWN0IGl0ZW1faGVhZCAqIHN0b3JlZF9paCwgY29uc3Qgc3RydWN0IHBhdGggKiBwX3NfcGF0aCk7Citjb25zdCBzdHJ1Y3QgcmVpc2VyZnNfa2V5ICogZ2V0X3JrZXkgKGNvbnN0IHN0cnVjdCBwYXRoICogcF9zX2Noa19wYXRoLAorCQkJCQkJCSBjb25zdCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgICogcF9zX3NiKTsKK2ludCBzZWFyY2hfYnlfa2V5IChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgY29uc3Qgc3RydWN0IGNwdV9rZXkgKiwgCisJCQkJICAgc3RydWN0IHBhdGggKiwgaW50KTsKKyNkZWZpbmUgc2VhcmNoX2l0ZW0ocyxrZXkscGF0aCkgc2VhcmNoX2J5X2tleSAocywga2V5LCBwYXRoLCBESVNLX0xFQUZfTk9ERV9MRVZFTCkKK2ludCBzZWFyY2hfZm9yX3Bvc2l0aW9uX2J5X2tleSAoc3RydWN0IHN1cGVyX2Jsb2NrICogcF9zX3NiLCAKKwkJCQkJCQkJY29uc3Qgc3RydWN0IGNwdV9rZXkgKiBwX3NfY3B1X2tleSwgCisJCQkJCQkJCXN0cnVjdCBwYXRoICogcF9zX3NlYXJjaF9wYXRoKTsKK2V4dGVybiB2b2lkIGRlY3JlbWVudF9iY291bnQgKHN0cnVjdCBidWZmZXJfaGVhZCAqIHBfc19iaCk7Cit2b2lkIGRlY3JlbWVudF9jb3VudGVyc19pbl9wYXRoIChzdHJ1Y3QgcGF0aCAqIHBfc19zZWFyY2hfcGF0aCk7Cit2b2lkIHBhdGhyZWxzZSAoc3RydWN0IHBhdGggKiBwX3Nfc2VhcmNoX3BhdGgpOworaW50IHJlaXNlcmZzX2NoZWNrX3BhdGgoc3RydWN0IHBhdGggKnApIDsKK3ZvaWQgcGF0aHJlbHNlX2FuZF9yZXN0b3JlIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIHN0cnVjdCBwYXRoICogcF9zX3NlYXJjaF9wYXRoKTsKKworaW50IHJlaXNlcmZzX2luc2VydF9pdGVtIChzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwgCisJCQkgIHN0cnVjdCBwYXRoICogcGF0aCwgCisJCQkgIGNvbnN0IHN0cnVjdCBjcHVfa2V5ICoga2V5LAorCQkJICBzdHJ1Y3QgaXRlbV9oZWFkICogaWgsCisJCQkgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKiBib2R5KTsKKworaW50IHJlaXNlcmZzX3Bhc3RlX2ludG9faXRlbSAoc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsCisJCQkgICAgICBzdHJ1Y3QgcGF0aCAqIHBhdGgsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgY3B1X2tleSAqIGtleSwKKwkJCSAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkgICAgICBjb25zdCBjaGFyICogYm9keSwgaW50IHBhc3RlX3NpemUpOworCitpbnQgcmVpc2VyZnNfY3V0X2Zyb21faXRlbSAoc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsCisJCQkgICAgc3RydWN0IHBhdGggKiBwYXRoLAorCQkJICAgIHN0cnVjdCBjcHVfa2V5ICoga2V5LAorCQkJICAgIHN0cnVjdCBpbm9kZSAqIGlub2RlLAorCQkJICAgIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJICAgIGxvZmZfdCBuZXdfZmlsZV9zaXplKTsKKworaW50IHJlaXNlcmZzX2RlbGV0ZV9pdGVtIChzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwKKwkJCSAgc3RydWN0IHBhdGggKiBwYXRoLCAKKwkJCSAgY29uc3Qgc3RydWN0IGNwdV9rZXkgKiBrZXksCisJCQkgIHN0cnVjdCBpbm9kZSAqIGlub2RlLCAKKwkJCSAgc3RydWN0IGJ1ZmZlcl9oZWFkICAqIHBfc191bl9iaCk7CisKK3ZvaWQgcmVpc2VyZnNfZGVsZXRlX3NvbGlkX2l0ZW0gKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLAorCQkJc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHJlaXNlcmZzX2tleSAqIGtleSk7CitpbnQgcmVpc2VyZnNfZGVsZXRlX29iamVjdCAoc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsIHN0cnVjdCBpbm9kZSAqIHBfc19pbm9kZSk7CitpbnQgcmVpc2VyZnNfZG9fdHJ1bmNhdGUgKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLAorCQkJICAgc3RydWN0ICBpbm9kZSAqIHBfc19pbm9kZSwgc3RydWN0IHBhZ2UgKiwgCisJCQkgICBpbnQgdXBkYXRlX3RpbWVzdGFtcHMpOworCisjZGVmaW5lIGlfYmxvY2tfc2l6ZShpbm9kZSkgKChpbm9kZSktPmlfc2ItPnNfYmxvY2tzaXplKQorI2RlZmluZSBmaWxlX3NpemUoaW5vZGUpICgoaW5vZGUpLT5pX3NpemUpCisjZGVmaW5lIHRhaWxfc2l6ZShpbm9kZSkgKGZpbGVfc2l6ZSAoaW5vZGUpICYgKGlfYmxvY2tfc2l6ZSAoaW5vZGUpIC0gMSkpCisKKyNkZWZpbmUgdGFpbF9oYXNfdG9fYmVfcGFja2VkKGlub2RlKSAoaGF2ZV9sYXJnZV90YWlscyAoKGlub2RlKS0+aV9zYik/XAorIVNUT1JFX1RBSUxfSU5fVU5GTV9TMShmaWxlX3NpemUgKGlub2RlKSwgdGFpbF9zaXplKGlub2RlKSwgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplKTpoYXZlX3NtYWxsX3RhaWxzICgoaW5vZGUpLT5pX3NiKT8hU1RPUkVfVEFJTF9JTl9VTkZNX1MyKGZpbGVfc2l6ZSAoaW5vZGUpLCB0YWlsX3NpemUoaW5vZGUpLCBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUpOjAgKQorCit2b2lkIHBhZGRfaXRlbSAoY2hhciAqIGl0ZW0sIGludCB0b3RhbF9sZW5ndGgsIGludCBsZW5ndGgpOworCisvKiBpbm9kZS5jICovCisvKiBhcmdzIGZvciB0aGUgY3JlYXRlIHBhcmFtZXRlciBvZiByZWlzZXJmc19nZXRfYmxvY2sgKi8KKyNkZWZpbmUgR0VUX0JMT0NLX05PX0NSRUFURSAwIC8qIGRvbid0IGNyZWF0ZSBuZXcgYmxvY2tzIG9yIGNvbnZlcnQgdGFpbHMgKi8KKyNkZWZpbmUgR0VUX0JMT0NLX0NSRUFURSAxICAgIC8qIGFkZCBhbnl0aGluZyB5b3UgbmVlZCB0byBmaW5kIGJsb2NrICovCisjZGVmaW5lIEdFVF9CTE9DS19OT19IT0xFIDIgICAvKiByZXR1cm4gLUVOT0VOVCBmb3IgZmlsZSBob2xlcyAqLworI2RlZmluZSBHRVRfQkxPQ0tfUkVBRF9ESVJFQ1QgNCAgLyogcmVhZCB0aGUgdGFpbCBpZiBpbmRpcmVjdCBpdGVtIG5vdCBmb3VuZCAqLworI2RlZmluZSBHRVRfQkxPQ0tfTk9fSVNFTSAgICAgOCAvKiBpX3NlbSBpcyBub3QgaGVsZCwgZG9uJ3QgcHJlYWxsb2NhdGUgKi8KKyNkZWZpbmUgR0VUX0JMT0NLX05PX0RBTkdMRSAgIDE2IC8qIGRvbid0IGxlYXZlIGFueSB0cmFuc2FjdGlvbnMgcnVubmluZyAqLworCitpbnQgcmVzdGFydF90cmFuc2FjdGlvbihzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwgc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHBhdGggKnBhdGgpOwordm9pZCByZWlzZXJmc19yZWFkX2xvY2tlZF9pbm9kZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgc3RydWN0IHJlaXNlcmZzX2lnZXRfYXJncyAqYXJncykgOworaW50IHJlaXNlcmZzX2ZpbmRfYWN0b3Ioc3RydWN0IGlub2RlICogaW5vZGUsIHZvaWQgKnApIDsKK2ludCByZWlzZXJmc19pbml0X2xvY2tlZF9pbm9kZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgdm9pZCAqcCkgOwordm9pZCByZWlzZXJmc19kZWxldGVfaW5vZGUgKHN0cnVjdCBpbm9kZSAqIGlub2RlKTsKK2ludCByZWlzZXJmc193cml0ZV9pbm9kZSAoc3RydWN0IGlub2RlICogaW5vZGUsIGludCkgOworaW50IHJlaXNlcmZzX2dldF9ibG9jayAoc3RydWN0IGlub2RlICogaW5vZGUsIHNlY3Rvcl90IGJsb2NrLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBiaF9yZXN1bHQsIGludCBjcmVhdGUpOworc3RydWN0IGRlbnRyeSAqcmVpc2VyZnNfZ2V0X2RlbnRyeShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdm9pZCAqKSA7CitzdHJ1Y3QgZGVudHJ5ICpyZWlzZXJmc19kZWNvZGVfZmgoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgX191MzIgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbiwgaW50IGZodHlwZSwKKwkJCQkgIGludCAoKmFjY2VwdGFibGUpKHZvaWQgKmNvbnRlY3QsIHN0cnVjdCBkZW50cnkgKmRlKSwKKwkJCQkgIHZvaWQgKmNvbnRleHQpIDsKK2ludCByZWlzZXJmc19lbmNvZGVfZmgoIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgX191MzIgKmRhdGEsIGludCAqbGVucCwgCisJCQkJCQlpbnQgY29ubmVjdGFibGUgKTsKKworaW50IHJlaXNlcmZzX3RydW5jYXRlX2ZpbGUoc3RydWN0IGlub2RlICosIGludCB1cGRhdGVfdGltZXN0YW1wcykgOwordm9pZCBtYWtlX2NwdV9rZXkgKHN0cnVjdCBjcHVfa2V5ICogY3B1X2tleSwgc3RydWN0IGlub2RlICogaW5vZGUsIGxvZmZfdCBvZmZzZXQsCisJCSAgIGludCB0eXBlLCBpbnQga2V5X2xlbmd0aCk7Cit2b2lkIG1ha2VfbGVfaXRlbV9oZWFkIChzdHJ1Y3QgaXRlbV9oZWFkICogaWgsIGNvbnN0IHN0cnVjdCBjcHVfa2V5ICoga2V5LCAKKwkJCWludCB2ZXJzaW9uLAorCQkJbG9mZl90IG9mZnNldCwgaW50IHR5cGUsIGludCBsZW5ndGgsIGludCBlbnRyeV9jb3VudCk7CitzdHJ1Y3QgaW5vZGUgKiByZWlzZXJmc19pZ2V0IChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzLCAKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBjcHVfa2V5ICoga2V5KTsKKworCitpbnQgcmVpc2VyZnNfbmV3X2lub2RlIChzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwgCisJCQkJICAgc3RydWN0IGlub2RlICogZGlyLCBpbnQgbW9kZSwgCisJCQkJICAgY29uc3QgY2hhciAqIHN5bW5hbWUsIGxvZmZfdCBpX3NpemUsCisJCQkJICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKKwordm9pZCByZWlzZXJmc191cGRhdGVfc2Rfc2l6ZSAoc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgbG9mZl90IHNpemUpOworCitzdGF0aWMgaW5saW5lIHZvaWQgcmVpc2VyZnNfdXBkYXRlX3NkKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworICAgIHJlaXNlcmZzX3VwZGF0ZV9zZF9zaXplKHRoLCBpbm9kZSwgaW5vZGUtPmlfc2l6ZSkgOworfQorCit2b2lkIHNkX2F0dHJzX3RvX2lfYXR0cnMoIF9fdTE2IHNkX2F0dHJzLCBzdHJ1Y3QgaW5vZGUgKmlub2RlICk7Cit2b2lkIGlfYXR0cnNfdG9fc2RfYXR0cnMoIHN0cnVjdCBpbm9kZSAqaW5vZGUsIF9fdTE2ICpzZF9hdHRycyApOworaW50IHJlaXNlcmZzX3NldGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmF0dHIpOworCisvKiBuYW1laS5jICovCit2b2lkIHNldF9kZV9uYW1lX2FuZF9uYW1lbGVuIChzdHJ1Y3QgcmVpc2VyZnNfZGlyX2VudHJ5ICogZGUpOworaW50IHNlYXJjaF9ieV9lbnRyeV9rZXkgKHN0cnVjdCBzdXBlcl9ibG9jayAqIHNiLCBjb25zdCBzdHJ1Y3QgY3B1X2tleSAqIGtleSwgCisJCQkgc3RydWN0IHBhdGggKiBwYXRoLCAKKwkJCSBzdHJ1Y3QgcmVpc2VyZnNfZGlyX2VudHJ5ICogZGUpOworc3RydWN0IGRlbnRyeSAqcmVpc2VyZnNfZ2V0X3BhcmVudChzdHJ1Y3QgZGVudHJ5ICopIDsKKy8qIHByb2Nmcy5jICovCisKKyNpZiBkZWZpbmVkKCBDT05GSUdfUFJPQ19GUyApICYmIGRlZmluZWQoIENPTkZJR19SRUlTRVJGU19QUk9DX0lORk8gKQorI2RlZmluZSBSRUlTRVJGU19QUk9DX0lORk8KKyNlbHNlCisjdW5kZWYgUkVJU0VSRlNfUFJPQ19JTkZPCisjZW5kaWYKKworaW50IHJlaXNlcmZzX3Byb2NfaW5mb19pbml0KCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiICk7CitpbnQgcmVpc2VyZnNfcHJvY19pbmZvX2RvbmUoIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgKTsKK3N0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcmVpc2VyZnNfcHJvY19yZWdpc3Rlcl9nbG9iYWwoIGNoYXIgKm5hbWUsIAorCQkJCQkJCQkJCQkJCSAgcmVhZF9wcm9jX3QgKmZ1bmMgKTsKK3ZvaWQgcmVpc2VyZnNfcHJvY191bnJlZ2lzdGVyX2dsb2JhbCggY29uc3QgY2hhciAqbmFtZSApOworaW50IHJlaXNlcmZzX3Byb2NfaW5mb19nbG9iYWxfaW5pdCggdm9pZCApOworaW50IHJlaXNlcmZzX3Byb2NfaW5mb19nbG9iYWxfZG9uZSggdm9pZCApOworaW50IHJlaXNlcmZzX2dsb2JhbF92ZXJzaW9uX2luX3Byb2MoIGNoYXIgKmJ1ZmZlciwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsCisJCQkJCQkJCQkgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSApOworCisjaWYgZGVmaW5lZCggUkVJU0VSRlNfUFJPQ19JTkZPICkKKworI2RlZmluZSBQUk9DX0VYUCggZSApICAgZQorCisjZGVmaW5lIF9fUElORk8oIHNiICkgUkVJU0VSRlNfU0Ioc2IpIC0+IHNfcHJvY19pbmZvX2RhdGEKKyNkZWZpbmUgUFJPQ19JTkZPX01BWCggc2IsIGZpZWxkLCB2YWx1ZSApCQkJCQkJCQlcCisgICAgX19QSU5GTyggc2IgKS5maWVsZCA9CQkJCQkJCQkJCQkJXAorICAgICAgICBtYXgoIFJFSVNFUkZTX1NCKCBzYiApIC0+IHNfcHJvY19pbmZvX2RhdGEuZmllbGQsIHZhbHVlICkKKyNkZWZpbmUgUFJPQ19JTkZPX0lOQyggc2IsIGZpZWxkICkgKCArKyAoIF9fUElORk8oIHNiICkuZmllbGQgKSApCisjZGVmaW5lIFBST0NfSU5GT19BREQoIHNiLCBmaWVsZCwgdmFsICkgKCBfX1BJTkZPKCBzYiApLmZpZWxkICs9ICggdmFsICkgKQorI2RlZmluZSBQUk9DX0lORk9fQkhfU1RBVCggc2IsIGJoLCBsZXZlbCApCQkJCQkJCVwKKyAgICBQUk9DX0lORk9fSU5DKCBzYiwgc2JrX3JlYWRfYXRbICggbGV2ZWwgKSBdICk7CQkJCQkJXAorICAgIFBST0NfSU5GT19BREQoIHNiLCBmcmVlX2F0WyAoIGxldmVsICkgXSwgQl9GUkVFX1NQQUNFKCBiaCApICk7CVwKKyAgICBQUk9DX0lORk9fQUREKCBzYiwgaXRlbXNfYXRbICggbGV2ZWwgKSBdLCBCX05SX0lURU1TKCBiaCApICkKKyNlbHNlCisjZGVmaW5lIFBST0NfRVhQKCBlICkKKyNkZWZpbmUgVk9JRF9WICggKCB2b2lkICkgMCApCisjZGVmaW5lIFBST0NfSU5GT19NQVgoIHNiLCBmaWVsZCwgdmFsdWUgKSBWT0lEX1YKKyNkZWZpbmUgUFJPQ19JTkZPX0lOQyggc2IsIGZpZWxkICkgVk9JRF9WCisjZGVmaW5lIFBST0NfSU5GT19BREQoIHNiLCBmaWVsZCwgdmFsICkgVk9JRF9WCisjZGVmaW5lIFBST0NfSU5GT19CSF9TVEFUKCBwX3Nfc2IsIHBfc19iaCwgbl9ub2RlX2xldmVsICkgVk9JRF9WCisjZW5kaWYKKworLyogZGlyLmMgKi8KK2V4dGVybiBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyByZWlzZXJmc19kaXJfaW5vZGVfb3BlcmF0aW9uczsKK2V4dGVybiBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyByZWlzZXJmc19zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7CitleHRlcm4gc3RydWN0IGlub2RlX29wZXJhdGlvbnMgcmVpc2VyZnNfc3BlY2lhbF9pbm9kZV9vcGVyYXRpb25zOworZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmVpc2VyZnNfZGlyX29wZXJhdGlvbnM7CisKKy8qIHRhaWxfY29udmVyc2lvbi5jICovCitpbnQgZGlyZWN0MmluZGlyZWN0IChzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICosIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgcGF0aCAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwgbG9mZl90KTsKK2ludCBpbmRpcmVjdDJkaXJlY3QgKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKiwgc3RydWN0IGlub2RlICosIHN0cnVjdCBwYWdlICosIHN0cnVjdCBwYXRoICosIGNvbnN0IHN0cnVjdCBjcHVfa2V5ICosIGxvZmZfdCwgY2hhciAqKTsKK3ZvaWQgcmVpc2VyZnNfdW5tYXBfYnVmZmVyKHN0cnVjdCBidWZmZXJfaGVhZCAqKSA7CisKKworLyogZmlsZS5jICovCitleHRlcm4gc3RydWN0IGlub2RlX29wZXJhdGlvbnMgcmVpc2VyZnNfZmlsZV9pbm9kZV9vcGVyYXRpb25zOworZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmVpc2VyZnNfZmlsZV9vcGVyYXRpb25zOworZXh0ZXJuIHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgcmVpc2VyZnNfYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIDsKKworLyogZml4X25vZGVzLmMgKi8KKyNpZmRlZiBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sKK3ZvaWQgKiByZWlzZXJmc19rbWFsbG9jIChzaXplX3Qgc2l6ZSwgaW50IGZsYWdzLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzKTsKK3ZvaWQgcmVpc2VyZnNfa2ZyZWUgKGNvbnN0IHZvaWQgKiB2cCwgc2l6ZV90IHNpemUsIHN0cnVjdCBzdXBlcl9ibG9jayAqIHMpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCAqcmVpc2VyZnNfa21hbGxvYyhzaXplX3Qgc2l6ZSwgaW50IGZsYWdzLAorCQkJCQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMpCit7CisJcmV0dXJuIGttYWxsb2Moc2l6ZSwgZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmVpc2VyZnNfa2ZyZWUoY29uc3Qgdm9pZCAqdnAsIHNpemVfdCBzaXplLAorCQkJCQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMpCit7CisJa2ZyZWUodnApOworfQorI2VuZGlmCisKK2ludCBmaXhfbm9kZXMgKGludCBuX29wX21vZGUsIHN0cnVjdCB0cmVlX2JhbGFuY2UgKiBwX3NfdGIsIAorCSAgICAgICBzdHJ1Y3QgaXRlbV9oZWFkICogcF9zX2luc19paCwgY29uc3Qgdm9pZCAqKTsKK3ZvaWQgdW5maXhfbm9kZXMgKHN0cnVjdCB0cmVlX2JhbGFuY2UgKik7CisKKworLyogcHJpbnRzLmMgKi8KK3ZvaWQgcmVpc2VyZnNfcGFuaWMgKHN0cnVjdCBzdXBlcl9ibG9jayAqIHMsIGNvbnN0IGNoYXIgKiBmbXQsIC4uLikgX19hdHRyaWJ1dGVfXyAoICggbm9yZXR1cm4gKSApOwordm9pZCByZWlzZXJmc19pbmZvIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIGNvbnN0IGNoYXIgKiBmbXQsIC4uLik7Cit2b2lkIHJlaXNlcmZzX2RlYnVnIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIGludCBsZXZlbCwgY29uc3QgY2hhciAqIGZtdCwgLi4uKTsKK3ZvaWQgcHJpbnRfaW5kaXJlY3RfaXRlbSAoc3RydWN0IGJ1ZmZlcl9oZWFkICogYmgsIGludCBpdGVtX251bSk7Cit2b2lkIHN0b3JlX3ByaW50X3RiIChzdHJ1Y3QgdHJlZV9iYWxhbmNlICogdGIpOwordm9pZCBwcmludF9jdXJfdGIgKGNoYXIgKiBtZXMpOwordm9pZCBwcmludF9kZSAoc3RydWN0IHJlaXNlcmZzX2Rpcl9lbnRyeSAqIGRlKTsKK3ZvaWQgcHJpbnRfYmkgKHN0cnVjdCBidWZmZXJfaW5mbyAqIGJpLCBjaGFyICogbWVzKTsKKyNkZWZpbmUgUFJJTlRfTEVBRl9JVEVNUyAxICAgLyogcHJpbnQgYWxsIGl0ZW1zICovCisjZGVmaW5lIFBSSU5UX0RJUkVDVE9SWV9JVEVNUyAyIC8qIHByaW50IGRpcmVjdG9yeSBpdGVtcyAqLworI2RlZmluZSBQUklOVF9ESVJFQ1RfSVRFTVMgNCAvKiBwcmludCBjb250ZW50cyBvZiBkaXJlY3QgaXRlbXMgKi8KK3ZvaWQgcHJpbnRfYmxvY2sgKHN0cnVjdCBidWZmZXJfaGVhZCAqIGJoLCAuLi4pOwordm9pZCBwcmludF9ibWFwIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzLCBpbnQgc2lsZW50KTsKK3ZvaWQgcHJpbnRfYm1hcF9ibG9jayAoaW50IGksIGNoYXIgKiBkYXRhLCBpbnQgc2l6ZSwgaW50IHNpbGVudCk7CisvKnZvaWQgcHJpbnRfc3VwZXJfYmxvY2sgKHN0cnVjdCBzdXBlcl9ibG9jayAqIHMsIGNoYXIgKiBtZXMpOyovCit2b2lkIHByaW50X29iamVjdGlkX21hcCAoc3RydWN0IHN1cGVyX2Jsb2NrICogcyk7Cit2b2lkIHByaW50X2Jsb2NrX2hlYWQgKHN0cnVjdCBidWZmZXJfaGVhZCAqIGJoLCBjaGFyICogbWVzKTsKK3ZvaWQgY2hlY2tfbGVhZiAoc3RydWN0IGJ1ZmZlcl9oZWFkICogYmgpOwordm9pZCBjaGVja19pbnRlcm5hbCAoc3RydWN0IGJ1ZmZlcl9oZWFkICogYmgpOwordm9pZCBwcmludF9zdGF0aXN0aWNzIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzKTsKK2NoYXIgKiByZWlzZXJmc19oYXNobmFtZShpbnQgY29kZSk7CisKKy8qIGxiYWxhbmNlLmMgKi8KK2ludCBsZWFmX21vdmVfaXRlbXMgKGludCBzaGlmdF9tb2RlLCBzdHJ1Y3QgdHJlZV9iYWxhbmNlICogdGIsIGludCBtb3ZfbnVtLCBpbnQgbW92X2J5dGVzLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBTbmV3KTsKK2ludCBsZWFmX3NoaWZ0X2xlZnQgKHN0cnVjdCB0cmVlX2JhbGFuY2UgKiB0YiwgaW50IHNoaWZ0X251bSwgaW50IHNoaWZ0X2J5dGVzKTsKK2ludCBsZWFmX3NoaWZ0X3JpZ2h0IChzdHJ1Y3QgdHJlZV9iYWxhbmNlICogdGIsIGludCBzaGlmdF9udW0sIGludCBzaGlmdF9ieXRlcyk7Cit2b2lkIGxlYWZfZGVsZXRlX2l0ZW1zIChzdHJ1Y3QgYnVmZmVyX2luZm8gKiBjdXJfYmksIGludCBsYXN0X2ZpcnN0LCBpbnQgZmlyc3QsIGludCBkZWxfbnVtLCBpbnQgZGVsX2J5dGVzKTsKK3ZvaWQgbGVhZl9pbnNlcnRfaW50b19idWYgKHN0cnVjdCBidWZmZXJfaW5mbyAqIGJpLCBpbnQgYmVmb3JlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpdGVtX2hlYWQgKiBpbnNlcnRlZF9pdGVtX2loLCBjb25zdCBjaGFyICogaW5zZXJ0ZWRfaXRlbV9ib2R5LCBpbnQgemVyb3NfbnVtYmVyKTsKK3ZvaWQgbGVhZl9wYXN0ZV9pbl9idWZmZXIgKHN0cnVjdCBidWZmZXJfaW5mbyAqIGJpLCBpbnQgcGFzdGVkX2l0ZW1fbnVtLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwb3NfaW5faXRlbSwgaW50IHBhc3RlX3NpemUsIGNvbnN0IGNoYXIgKiBib2R5LCBpbnQgemVyb3NfbnVtYmVyKTsKK3ZvaWQgbGVhZl9jdXRfZnJvbV9idWZmZXIgKHN0cnVjdCBidWZmZXJfaW5mbyAqIGJpLCBpbnQgY3V0X2l0ZW1fbnVtLCBpbnQgcG9zX2luX2l0ZW0sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGN1dF9zaXplKTsKK3ZvaWQgbGVhZl9wYXN0ZV9lbnRyaWVzIChzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBiaCwgaW50IGl0ZW1fbnVtLCBpbnQgYmVmb3JlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbmV3X2VudHJ5X2NvdW50LCBzdHJ1Y3QgcmVpc2VyZnNfZGVfaGVhZCAqIG5ld19kZWhzLCBjb25zdCBjaGFyICogcmVjb3JkcywgaW50IHBhc3RlX3NpemUpOworLyogaWJhbGFuY2UuYyAqLworaW50IGJhbGFuY2VfaW50ZXJuYWwgKHN0cnVjdCB0cmVlX2JhbGFuY2UgKiAsIGludCwgaW50LCBzdHJ1Y3QgaXRlbV9oZWFkICogLCAKKyAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiopOworCisvKiBkb19iYWxhbmNlLmMgKi8KK3ZvaWQgZG9fYmFsYW5jZV9tYXJrX2xlYWZfZGlydHkgKHN0cnVjdCB0cmVlX2JhbGFuY2UgKiB0YiwKKwkJCQkJc3RydWN0IGJ1ZmZlcl9oZWFkICogYmgsIGludCBmbGFnKTsKKyNkZWZpbmUgZG9fYmFsYW5jZV9tYXJrX2ludGVybmFsX2RpcnR5IGRvX2JhbGFuY2VfbWFya19sZWFmX2RpcnR5CisjZGVmaW5lIGRvX2JhbGFuY2VfbWFya19zYl9kaXJ0eSBkb19iYWxhbmNlX21hcmtfbGVhZl9kaXJ0eQorCit2b2lkIGRvX2JhbGFuY2UgKHN0cnVjdCB0cmVlX2JhbGFuY2UgKiB0Yiwgc3RydWN0IGl0ZW1faGVhZCAqIGloLCAKKyAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqIGJvZHksIGludCBmbGFnKTsKK3ZvaWQgcmVpc2VyZnNfaW52YWxpZGF0ZV9idWZmZXIgKHN0cnVjdCB0cmVlX2JhbGFuY2UgKiB0Yiwgc3RydWN0IGJ1ZmZlcl9oZWFkICogYmgpOworCitpbnQgZ2V0X2xlZnRfbmVpZ2hib3JfcG9zaXRpb24gKHN0cnVjdCB0cmVlX2JhbGFuY2UgKiB0YiwgaW50IGgpOworaW50IGdldF9yaWdodF9uZWlnaGJvcl9wb3NpdGlvbiAoc3RydWN0IHRyZWVfYmFsYW5jZSAqIHRiLCBpbnQgaCk7Cit2b2lkIHJlcGxhY2Vfa2V5IChzdHJ1Y3QgdHJlZV9iYWxhbmNlICogdGIsIHN0cnVjdCBidWZmZXJfaGVhZCAqLCBpbnQsIHN0cnVjdCBidWZmZXJfaGVhZCAqLCBpbnQpOwordm9pZCBtYWtlX2VtcHR5X25vZGUgKHN0cnVjdCBidWZmZXJfaW5mbyAqKTsKK3N0cnVjdCBidWZmZXJfaGVhZCAqIGdldF9GRUIgKHN0cnVjdCB0cmVlX2JhbGFuY2UgKik7CisKKy8qIGJpdG1hcC5jICovCisKKy8qIHN0cnVjdHVyZSBjb250YWlucyBoaW50cyBmb3IgYmxvY2sgYWxsb2NhdG9yLCBhbmQgaXQgaXMgYSBjb250YWluZXIgZm9yCisgKiBhcmd1bWVudHMsIHN1Y2ggYXMgbm9kZSwgc2VhcmNoIHBhdGgsIHRyYW5zYWN0aW9uX2hhbmRsZSwgZXRjLiAqLworIHN0cnVjdCBfX3JlaXNlcmZzX2Jsb2NrbnJfaGludCB7CisgICAgIHN0cnVjdCBpbm9kZSAqIGlub2RlOwkJLyogaW5vZGUgcGFzc2VkIHRvIGFsbG9jYXRvciwgaWYgd2UgYWxsb2NhdGUgdW5mLiBub2RlcyAqLworICAgICBsb25nIGJsb2NrOwkJCS8qIGZpbGUgb2Zmc2V0LCBpbiBibG9ja3MgKi8KKyAgICAgc3RydWN0IHJlaXNlcmZzX2tleSBrZXk7CisgICAgIHN0cnVjdCBwYXRoICogcGF0aDsJCS8qIHNlYXJjaCBwYXRoLCB1c2VkIGJ5IGFsbG9jYXRvciB0byBkZXRlcm5pbmUgc2VhcmNoX3N0YXJ0IGJ5CisJCQkJCSAqIHZhcmlvdXMgd2F5cyAqLworICAgICBzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICogdGg7IC8qIHRyYW5zYWN0aW9uIGhhbmRsZSBpcyBuZWVkZWQgdG8gbG9nIHN1cGVyIGJsb2NrcyBhbmQKKwkJCQkJICAgICAgICogYml0bWFwIGJsb2NrcyBjaGFuZ2VzICAqLworICAgICBiX2Jsb2NrbnJfdCBiZWcsIGVuZDsKKyAgICAgYl9ibG9ja25yX3Qgc2VhcmNoX3N0YXJ0OwkJLyogYSBmaWVsZCB1c2VkIHRvIHRyYW5zZmVyIHNlYXJjaCBzdGFydCB2YWx1ZSAoYmxvY2sgbnVtYmVyKQorCQkJCQkgKiBiZXR3ZWVuIGRpZmZlcmVudCBibG9jayBhbGxvY2F0b3IgcHJvY2VkdXJlcworCQkJCQkgKiAoZGV0ZXJtaW5lX3NlYXJjaF9zdGFydCgpIGFuZCBvdGhlcnMpICovCisgICAgaW50IHByZWFsbG9jX3NpemU7CQkJLyogaXMgc2V0IGluIGRldGVybWluZV9wcmVhbGxvY19zaXplKCkgZnVuY3Rpb24sIHVzZWQgYnkgdW5kZXJsYXllZAorCQkJCQkgKiBmdW5jdGlvbiB0aGF0IGRvIGFjdHVhbCBhbGxvY2F0aW9uICovCisKKyAgICB1bnNpZ25lZCBmb3JtYXR0ZWRfbm9kZToxOwkJLyogdGhlIGFsbG9jYXRvciB1c2VzIGRpZmZlcmVudCBwb2xpY2VzIGZvciBnZXR0aW5nIGRpc2sgc3BhY2UgZm9yCisJCQkJCSAqIGZvcm1hdHRlZC91bmZvcm1hdHRlZCBibG9ja3Mgd2l0aC93aXRob3V0IHByZWFsbG9jYXRpb24gKi8KKyAgICB1bnNpZ25lZCBwcmVhbGxvY2F0ZToxOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgX19yZWlzZXJmc19ibG9ja25yX2hpbnQgcmVpc2VyZnNfYmxvY2tucl9oaW50X3Q7CisKK2ludCByZWlzZXJmc19wYXJzZV9hbGxvY19vcHRpb25zIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgY2hhciAqKTsKK3ZvaWQgcmVpc2VyZnNfaW5pdF9hbGxvY19vcHRpb25zIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMpOworCisvKgorICogZ2l2ZW4gYSBkaXJlY3RvcnksIHRoaXMgd2lsbCB0ZWxsIHlvdSB3aGF0IHBhY2tpbmcgbG9jYWxpdHkKKyAqIHRvIHVzZSBmb3IgYSBuZXcgb2JqZWN0IHVuZGVybmVhdCBpdC4gIFRoZSBsb2NhbGl0eSBpcyByZXR1cm5lZAorICogaW4gZGlzayBieXRlIG9yZGVyIChsZSkuCisgKi8KK3UzMiByZWlzZXJmc19jaG9vc2VfcGFja2luZyhzdHJ1Y3QgaW5vZGUgKmRpcik7CisKK2ludCBpc19yZXVzYWJsZSAoc3RydWN0IHN1cGVyX2Jsb2NrICogcywgYl9ibG9ja25yX3QgYmxvY2ssIGludCBiaXRfdmFsdWUpOwordm9pZCByZWlzZXJmc19mcmVlX2Jsb2NrIChzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwgc3RydWN0IGlub2RlICosIGJfYmxvY2tucl90LCBpbnQgZm9yX3VuZm9ybWF0dGVkKTsKK2ludCByZWlzZXJmc19hbGxvY2F0ZV9ibG9ja25ycyhyZWlzZXJmc19ibG9ja25yX2hpbnRfdCAqLCBiX2Jsb2NrbnJfdCAqICwgaW50LCBpbnQpOworZXh0ZXJuIGlubGluZSBpbnQgcmVpc2VyZnNfbmV3X2Zvcm1fYmxvY2tucnMgKHN0cnVjdCB0cmVlX2JhbGFuY2UgKiB0YiwKKwkJCQkJICAgICAgYl9ibG9ja25yX3QgKm5ld19ibG9ja25ycywgaW50IGFtb3VudF9uZWVkZWQpCit7CisgICAgcmVpc2VyZnNfYmxvY2tucl9oaW50X3QgaGludCA9IHsKKwkudGggPSB0Yi0+dHJhbnNhY3Rpb25faGFuZGxlLAorCS5wYXRoID0gdGItPnRiX3BhdGgsCisJLmlub2RlID0gTlVMTCwKKwkua2V5ID0gdGItPmtleSwKKwkuYmxvY2sgPSAwLAorCS5mb3JtYXR0ZWRfbm9kZSA9IDEKKyAgICB9OworICAgIHJldHVybiByZWlzZXJmc19hbGxvY2F0ZV9ibG9ja25ycygmaGludCwgbmV3X2Jsb2NrbnJzLCBhbW91bnRfbmVlZGVkLCAwKTsKK30KKworZXh0ZXJuIGlubGluZSBpbnQgcmVpc2VyZnNfbmV3X3VuZl9ibG9ja25ycyAoc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsCisJCQkJCSAgICAgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJICAgICBiX2Jsb2NrbnJfdCAqbmV3X2Jsb2NrbnJzLAorCQkJCQkgICAgIHN0cnVjdCBwYXRoICogcGF0aCwgbG9uZyBibG9jaykKK3sKKyAgICByZWlzZXJmc19ibG9ja25yX2hpbnRfdCBoaW50ID0geworCS50aCA9IHRoLAorCS5wYXRoID0gcGF0aCwKKwkuaW5vZGUgPSBpbm9kZSwKKwkuYmxvY2sgPSBibG9jaywKKwkuZm9ybWF0dGVkX25vZGUgPSAwLAorCS5wcmVhbGxvY2F0ZSA9IDAKKyAgICB9OworICAgIHJldHVybiByZWlzZXJmc19hbGxvY2F0ZV9ibG9ja25ycygmaGludCwgbmV3X2Jsb2NrbnJzLCAxLCAwKTsKK30KKworI2lmZGVmIFJFSVNFUkZTX1BSRUFMTE9DQVRFCitleHRlcm4gaW5saW5lIGludCByZWlzZXJmc19uZXdfdW5mX2Jsb2NrbnJzMihzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwKKwkJCQkJICAgICBzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwKKwkJCQkJICAgICBiX2Jsb2NrbnJfdCAqbmV3X2Jsb2NrbnJzLAorCQkJCQkgICAgIHN0cnVjdCBwYXRoICogcGF0aCwgbG9uZyBibG9jaykKK3sKKyAgICByZWlzZXJmc19ibG9ja25yX2hpbnRfdCBoaW50ID0geworCS50aCA9IHRoLAorCS5wYXRoID0gcGF0aCwKKwkuaW5vZGUgPSBpbm9kZSwKKwkuYmxvY2sgPSBibG9jaywKKwkuZm9ybWF0dGVkX25vZGUgPSAwLAorCS5wcmVhbGxvY2F0ZSA9IDEKKyAgICB9OworICAgIHJldHVybiByZWlzZXJmc19hbGxvY2F0ZV9ibG9ja25ycygmaGludCwgbmV3X2Jsb2NrbnJzLCAxLCAwKTsKK30KKwordm9pZCByZWlzZXJmc19kaXNjYXJkX3ByZWFsbG9jIChzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwgCisJCQkJc3RydWN0IGlub2RlICogaW5vZGUpOwordm9pZCByZWlzZXJmc19kaXNjYXJkX2FsbF9wcmVhbGxvYyAoc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgpOworI2VuZGlmCit2b2lkIHJlaXNlcmZzX2NsYWltX2Jsb2Nrc190b19iZV9hbGxvY2F0ZWQoIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBibG9ja3MpOwordm9pZCByZWlzZXJmc19yZWxlYXNlX2NsYWltZWRfYmxvY2tzKCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgYmxvY2tzKTsKK2ludCByZWlzZXJmc19jYW5fZml0X3BhZ2VzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOworCisvKiBoYXNoZXMuYyAqLworX191MzIga2V5ZWRfaGFzaCAoY29uc3Qgc2lnbmVkIGNoYXIgKm1zZywgaW50IGxlbik7CitfX3UzMiB5dXJhX2hhc2ggKGNvbnN0IHNpZ25lZCBjaGFyICptc2csIGludCBsZW4pOworX191MzIgcjVfaGFzaCAoY29uc3Qgc2lnbmVkIGNoYXIgKm1zZywgaW50IGxlbik7CisKKy8qIHRoZSBleHQyIGJpdCByb3V0aW5lcyBhZGp1c3QgZm9yIGJpZyBvciBsaXR0bGUgZW5kaWFuIGFzCisqKiBhcHByb3ByaWF0ZSBmb3IgdGhlIGFyY2gsIHNvIGluIG91ciBsYXppbmVzcyB3ZSB1c2UgdGhlbSByYXRoZXIKKyoqIHRoYW4gdXNpbmcgdGhlIGJpdCByb3V0aW5lcyB0aGV5IGNhbGwgbW9yZSBkaXJlY3RseS4gIFRoZXNlCisqKiByb3V0aW5lcyBtdXN0IGJlIHVzZWQgd2hlbiBjaGFuZ2luZyBvbiBkaXNrIGJpdG1hcHMuICAqLworI2RlZmluZSByZWlzZXJmc190ZXN0X2FuZF9zZXRfbGVfYml0ICAgZXh0Ml9zZXRfYml0CisjZGVmaW5lIHJlaXNlcmZzX3Rlc3RfYW5kX2NsZWFyX2xlX2JpdCBleHQyX2NsZWFyX2JpdAorI2RlZmluZSByZWlzZXJmc190ZXN0X2xlX2JpdCAgICAgICAgICAgZXh0Ml90ZXN0X2JpdAorI2RlZmluZSByZWlzZXJmc19maW5kX25leHRfemVyb19sZV9iaXQgZXh0Ml9maW5kX25leHRfemVyb19iaXQKKworLyogc29tZXRpbWVzIHJlaXNlcmZzX3RydW5jYXRlIG1heSByZXF1aXJlIHRvIGFsbG9jYXRlIGZldyBuZXcgYmxvY2tzCisgICB0byBwZXJmb3JtIGluZGlyZWN0MmRpcmVjdCBjb252ZXJzaW9uLiBQZW9wbGUgcHJvYmFibHkgdXNlZCB0bworICAgdGhpbmssIHRoYXQgdHJ1bmNhdGUgc2hvdWxkIHdvcmsgd2l0aG91dCBwcm9ibGVtcyBvbiBhIGZpbGVzeXN0ZW0KKyAgIHdpdGhvdXQgZnJlZSBkaXNrIHNwYWNlLiBUaGV5IG1heSBjb21wbGFpbiB0aGF0IHRoZXkgY2FuIG5vdAorICAgdHJ1bmNhdGUgZHVlIHRvIGxhY2sgb2YgZnJlZSBkaXNrIHNwYWNlLiBUaGlzIHNwYXJlIHNwYWNlIGFsbG93cyB1cworICAgdG8gbm90IHdvcnJ5IGFib3V0IGl0LiA1MDAgaXMgcHJvYmFibHkgdG9vIG11Y2gsIGJ1dCBpdCBzaG91bGQgYmUKKyAgIGFic29sdXRlbHkgc2FmZSAqLworI2RlZmluZSBTUEFSRV9TUEFDRSA1MDAKKworCisvKiBwcm90b3R5cGVzIGZyb20gaW9jdGwuYyAqLworaW50IHJlaXNlcmZzX2lvY3RsIChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgc3RydWN0IGZpbGUgKiBmaWxwLCAKKyAJCSAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CisgCisvKiBpb2N0bCdzIGNvbW1hbmQgKi8KKyNkZWZpbmUgUkVJU0VSRlNfSU9DX1VOUEFDSwkJX0lPVygweENELDEsbG9uZykKKy8qIGRlZmluZSBmb2xsb3dpbmcgZmxhZ3MgdG8gYmUgdGhlIHNhbWUgYXMgaW4gZXh0Miwgc28gdGhhdCBjaGF0dHIoMSksCisgICBsc2F0dHIoMSkgd2lsbCB3b3JrIHdpdGggdXMuICovCisjZGVmaW5lIFJFSVNFUkZTX0lPQ19HRVRGTEFHUwkJRVhUMl9JT0NfR0VURkxBR1MKKyNkZWZpbmUgUkVJU0VSRlNfSU9DX1NFVEZMQUdTCQlFWFQyX0lPQ19TRVRGTEFHUworI2RlZmluZSBSRUlTRVJGU19JT0NfR0VUVkVSU0lPTgkJRVhUMl9JT0NfR0VUVkVSU0lPTgorI2RlZmluZSBSRUlTRVJGU19JT0NfU0VUVkVSU0lPTgkJRVhUMl9JT0NfU0VUVkVSU0lPTgorCisvKiBMb2NraW5nIHByaW1pdGl2ZXMgKi8KKy8qIFJpZ2h0IG5vdyB3ZSBhcmUgc3RpbGwgZmFsbGluZyBiYWNrIHRvICh1bilsb2NrX2tlcm5lbCwgYnV0IGV2ZW50dWFsbHkgdGhhdAorICAgd291bGQgZXZvbHZlIGludG8gcmVhbCBwZXItZnMgbG9ja3MgKi8KKyNkZWZpbmUgcmVpc2VyZnNfd3JpdGVfbG9jayggc2IgKSBsb2NrX2tlcm5lbCgpCisjZGVmaW5lIHJlaXNlcmZzX3dyaXRlX3VubG9jayggc2IgKSB1bmxvY2tfa2VybmVsKCkKKyAJCQkgICAgICAgICAKKy8qIHhhdHRyIHN0dWZmICovCisjZGVmaW5lIFJFSVNFUkZTX1hBVFRSX0RJUl9TRU0ocykgKFJFSVNFUkZTX1NCKHMpLT54YXR0cl9kaXJfc2VtKQorCisjZW5kaWYgLyogX0xJTlVYX1JFSVNFUl9GU19IICovCisKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mc19pLmggYi9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzX2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzIxZWIwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mc19pLmgKQEAgLTAsMCArMSw2MyBAQAorI2lmbmRlZiBfUkVJU0VSX0ZTX0kKKyNkZWZpbmUgX1JFSVNFUl9GU19JCisKKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisKK3N0cnVjdCByZWlzZXJmc19qb3VybmFsX2xpc3Q7CisKKy8qKiBiaXRtYXNrcyBmb3IgaV9mbGFncyBmaWVsZCBpbiByZWlzZXJmcy1zcGVjaWZpYyBwYXJ0IG9mIGlub2RlICovCit0eXBlZGVmIGVudW0geworICAgIC8qKiB0aGlzIHNheXMgd2hhdCBmb3JtYXQgb2Yga2V5IGRvIGFsbCBpdGVtcyAoYnV0IHN0YXQgZGF0YSkgb2YKKyAgICAgIGFuIG9iamVjdCBoYXZlLiAgSWYgdGhpcyBpcyBzZXQsIHRoYXQgZm9ybWF0IGlzIDMuNiBvdGhlcndpc2UKKyAgICAgIC0gMy41ICovCisgICAgaV9pdGVtX2tleV92ZXJzaW9uX21hc2sgICAgPSAgMHgwMDAxLAorICAgIC8qKiBJZiB0aGlzIGlzIHVuc2V0LCBvYmplY3QgaGFzIDMuNSBzdGF0IGRhdGEsIG90aGVyd2lzZSwgaXQgaGFzCisgICAgICAzLjYgc3RhdCBkYXRhIHdpdGggNjRiaXQgc2l6ZSwgMzJiaXQgbmxpbmsgZXRjLiAqLworICAgIGlfc3RhdF9kYXRhX3ZlcnNpb25fbWFzayAgID0gIDB4MDAwMiwKKyAgICAvKiogZmlsZSBtaWdodCBuZWVkIHRhaWwgcGFja2luZyBvbiBjbG9zZSAqLworICAgIGlfcGFja19vbl9jbG9zZV9tYXNrICAgICAgID0gIDB4MDAwNCwKKyAgICAvKiogZG9uJ3QgcGFjayB0YWlsIG9mIGZpbGUgKi8KKyAgICBpX25vcGFja19tYXNrICAgICAgICAgICAgICA9ICAweDAwMDgsCisgICAgLyoqIElmIHRob3NlIGlzIHNldCwgInNhZmUgbGluayIgd2FzIGNyZWF0ZWQgZm9yIHRoaXMgZmlsZSBkdXJpbmcKKyAgICAgIHRydW5jYXRlIG9yIHVubGluay4gU2FmZSBsaW5rIGlzIHVzZWQgdG8gYXZvaWQgbGVha2FnZSBvZiBkaXNrCisgICAgICBzcGFjZSBvbiBjcmFzaCB3aXRoIHNvbWUgZmlsZXMgb3BlbiwgYnV0IHVubGlua2VkLiAqLworICAgIGlfbGlua19zYXZlZF91bmxpbmtfbWFzayAgID0gIDB4MDAxMCwKKyAgICBpX2xpbmtfc2F2ZWRfdHJ1bmNhdGVfbWFzayA9ICAweDAwMjAsCisgICAgaV9oYXNfeGF0dHJfZGlyICAgICAgICAgICAgPSAgMHgwMDQwLAorICAgIGlfZGF0YV9sb2cJICAgICAgICAgICAgICAgPSAgMHgwMDgwLAorfSByZWlzZXJmc19pbm9kZV9mbGFnczsKKworCitzdHJ1Y3QgcmVpc2VyZnNfaW5vZGVfaW5mbyB7CisgICAgX191MzIgaV9rZXkgWzRdOy8qIGtleSBpcyBzdGlsbCA0IDMyIGJpdCBpbnRlZ2VycyAqLworICAgIC8qKiB0cmFuc2llbnQgaW5vZGUgZmxhZ3MgdGhhdCBhcmUgbmV2ZXIgc3RvcmVkIG9uIGRpc2suIEJpdG1hc2tzCisgICAgICBmb3IgdGhpcyBmaWVsZCBhcmUgZGVmaW5lZCBhYm92ZS4gKi8KKyAgICBfX3UzMiBpX2ZsYWdzOworCisgICAgX191MzIgaV9maXJzdF9kaXJlY3RfYnl0ZTsgLy8gb2Zmc2V0IG9mIGZpcnN0IGJ5dGUgc3RvcmVkIGluIGRpcmVjdCBpdGVtLgorCisgICAgLyogY29weSBvZiBwZXJzaXN0ZW50IGlub2RlIGZsYWdzIHJlYWQgZnJvbSBzZF9hdHRycy4gKi8KKyAgICBfX3UzMiBpX2F0dHJzOworCisgICAgaW50IGlfcHJlYWxsb2NfYmxvY2s7IC8qIGZpcnN0IHVudXNlZCBibG9jayBvZiBhIHNlcXVlbmNlIG9mIHVudXNlZCBibG9ja3MgKi8KKyAgICBpbnQgaV9wcmVhbGxvY19jb3VudDsgLyogbGVuZ3RoIG9mIHRoYXQgc2VxdWVuY2UgKi8KKyAgICBzdHJ1Y3QgbGlzdF9oZWFkIGlfcHJlYWxsb2NfbGlzdDsgLyogcGVyLXRyYW5zYWN0aW9uIGxpc3Qgb2YgaW5vZGVzIHdoaWNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGhhdmUgcHJlYWxsb2NhdGVkIGJsb2NrcyAqLworCisgICAgdW5zaWduZWQgbmV3X3BhY2tpbmdfbG9jYWxpdHk6MTsgIC8qIG5ld19wYWNraWdfbG9jYWxpdHkgaXMgY3JlYXRlZDsgbmV3IGJsb2NrcworCQkJCSAgICAgICAqIGZvciB0aGUgY29udGVudHMgb2YgdGhpcyBkaXJlY3Rvcnkgc2hvdWxkIGJlCisJCQkJICAgICAgICogZGlzcGxhY2VkICovCisKKyAgICAvKiB3ZSB1c2UgdGhlc2UgZm9yIGZzeW5jIG9yIE9fU1lOQyB0byBkZWNpZGUgd2hpY2ggdHJhbnNhY3Rpb24KKyAgICAqKiBuZWVkcyB0byBiZSBjb21taXR0ZWQgaW4gb3JkZXIgZm9yIHRoaXMgaW5vZGUgdG8gYmUgcHJvcGVybHkKKyAgICAqKiBmbHVzaGVkICovCisgICAgdW5zaWduZWQgbG9uZyBpX3RyYW5zX2lkIDsKKyAgICBzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9saXN0ICppX2psOworCisgICAgc3RydWN0IHBvc2l4X2FjbCAqaV9hY2xfYWNjZXNzOworICAgIHN0cnVjdCBwb3NpeF9hY2wgKmlfYWNsX2RlZmF1bHQ7CisgICAgc3RydWN0IHJ3X3NlbWFwaG9yZSB4YXR0cl9zZW07CisgICAgc3RydWN0IGlub2RlIHZmc19pbm9kZTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mc19zYi5oIGIvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mc19zYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3YTNhN2EKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzX3NiLmgKQEAgLTAsMCArMSw1MzUgQEAKKy8qIENvcHlyaWdodCAxOTk2LTIwMDAgSGFucyBSZWlzZXIsIHNlZSByZWlzZXJmcy9SRUFETUUgZm9yIGxpY2Vuc2luZworICogYW5kIGNvcHlyaWdodCBkZXRhaWxzICovCisKKyNpZm5kZWYgX0xJTlVYX1JFSVNFUl9GU19TQgorI2RlZmluZSBfTElOVVhfUkVJU0VSX0ZTX1NCCisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KKyNlbmRpZgorCit0eXBlZGVmIGVudW0geworICByZWlzZXJmc19hdHRyc19jbGVhcmVkCT0gMHgwMDAwMDAwMSwKK30gcmVpc2VyZnNfc3VwZXJfYmxvY2tfZmxhZ3M7CisKKy8qIHN0cnVjdCByZWlzZXJmc19zdXBlcl9ibG9jayBhY2Nlc3NvcnMvbXV0YXRvcnMKKyAqIHNpbmNlIHRoaXMgaXMgYSBkaXNrIHN0cnVjdHVyZSwgaXQgd2lsbCBhbHdheXMgYmUgaW4gCisgKiBsaXR0bGUgZW5kaWFuIGZvcm1hdC4gKi8KKyNkZWZpbmUgc2JfYmxvY2tfY291bnQoc2JwKSAgICAgICAgIChsZTMyX3RvX2NwdSgoc2JwKS0+c192MS5zX2Jsb2NrX2NvdW50KSkKKyNkZWZpbmUgc2V0X3NiX2Jsb2NrX2NvdW50KHNicCx2KSAgICgoc2JwKS0+c192MS5zX2Jsb2NrX2NvdW50ID0gY3B1X3RvX2xlMzIodikpCisjZGVmaW5lIHNiX2ZyZWVfYmxvY2tzKHNicCkgICAgICAgICAobGUzMl90b19jcHUoKHNicCktPnNfdjEuc19mcmVlX2Jsb2NrcykpCisjZGVmaW5lIHNldF9zYl9mcmVlX2Jsb2NrcyhzYnAsdikgICAoKHNicCktPnNfdjEuc19mcmVlX2Jsb2NrcyA9IGNwdV90b19sZTMyKHYpKQorI2RlZmluZSBzYl9yb290X2Jsb2NrKHNicCkgICAgICAgICAgKGxlMzJfdG9fY3B1KChzYnApLT5zX3YxLnNfcm9vdF9ibG9jaykpCisjZGVmaW5lIHNldF9zYl9yb290X2Jsb2NrKHNicCx2KSAgICAoKHNicCktPnNfdjEuc19yb290X2Jsb2NrID0gY3B1X3RvX2xlMzIodikpCisKKyNkZWZpbmUgc2JfanBfam91cm5hbF8xc3RfYmxvY2soc2JwKSAgXAorICAgICAgICAgICAgICAobGUzMl90b19jcHUoKHNicCktPnNfdjEuc19qb3VybmFsLmpwX2pvdXJuYWxfMXN0X2Jsb2NrKSkKKyNkZWZpbmUgc2V0X3NiX2pwX2pvdXJuYWxfMXN0X2Jsb2NrKHNicCx2KSBcCisgICAgICAgICAgICAgICgoc2JwKS0+c192MS5zX2pvdXJuYWwuanBfam91cm5hbF8xc3RfYmxvY2sgPSBjcHVfdG9fbGUzMih2KSkKKyNkZWZpbmUgc2JfanBfam91cm5hbF9kZXYoc2JwKSBcCisgICAgICAgICAgICAgIChsZTMyX3RvX2NwdSgoc2JwKS0+c192MS5zX2pvdXJuYWwuanBfam91cm5hbF9kZXYpKQorI2RlZmluZSBzZXRfc2JfanBfam91cm5hbF9kZXYoc2JwLHYpIFwKKyAgICAgICAgICAgICAgKChzYnApLT5zX3YxLnNfam91cm5hbC5qcF9qb3VybmFsX2RldiA9IGNwdV90b19sZTMyKHYpKQorI2RlZmluZSBzYl9qcF9qb3VybmFsX3NpemUoc2JwKSBcCisgICAgICAgICAgICAgIChsZTMyX3RvX2NwdSgoc2JwKS0+c192MS5zX2pvdXJuYWwuanBfam91cm5hbF9zaXplKSkKKyNkZWZpbmUgc2V0X3NiX2pwX2pvdXJuYWxfc2l6ZShzYnAsdikgXAorICAgICAgICAgICAgICAoKHNicCktPnNfdjEuc19qb3VybmFsLmpwX2pvdXJuYWxfc2l6ZSA9IGNwdV90b19sZTMyKHYpKQorI2RlZmluZSBzYl9qcF9qb3VybmFsX3RyYW5zX21heChzYnApIFwKKyAgICAgICAgICAgICAgKGxlMzJfdG9fY3B1KChzYnApLT5zX3YxLnNfam91cm5hbC5qcF9qb3VybmFsX3RyYW5zX21heCkpCisjZGVmaW5lIHNldF9zYl9qcF9qb3VybmFsX3RyYW5zX21heChzYnAsdikgXAorICAgICAgICAgICAgICAoKHNicCktPnNfdjEuc19qb3VybmFsLmpwX2pvdXJuYWxfdHJhbnNfbWF4ID0gY3B1X3RvX2xlMzIodikpCisjZGVmaW5lIHNiX2pwX2pvdXJuYWxfbWFnaWMoc2JwKSBcCisgICAgICAgICAgICAgIChsZTMyX3RvX2NwdSgoc2JwKS0+c192MS5zX2pvdXJuYWwuanBfam91cm5hbF9tYWdpYykpCisjZGVmaW5lIHNldF9zYl9qcF9qb3VybmFsX21hZ2ljKHNicCx2KSBcCisgICAgICAgICAgICAgICgoc2JwKS0+c192MS5zX2pvdXJuYWwuanBfam91cm5hbF9tYWdpYyA9IGNwdV90b19sZTMyKHYpKQorI2RlZmluZSBzYl9qcF9qb3VybmFsX21heF9iYXRjaChzYnApIFwKKyAgICAgICAgICAgICAgKGxlMzJfdG9fY3B1KChzYnApLT5zX3YxLnNfam91cm5hbC5qcF9qb3VybmFsX21heF9iYXRjaCkpCisjZGVmaW5lIHNldF9zYl9qcF9qb3VybmFsX21heF9iYXRjaChzYnAsdikgXAorICAgICAgICAgICAgICAoKHNicCktPnNfdjEuc19qb3VybmFsLmpwX2pvdXJuYWxfbWF4X2JhdGNoID0gY3B1X3RvX2xlMzIodikpCisjZGVmaW5lIHNiX2pwX2pvdXJtYWxfbWF4X2NvbW1pdF9hZ2Uoc2JwKSBcCisgICAgICAgICAgICAgIChsZTMyX3RvX2NwdSgoc2JwKS0+c192MS5zX2pvdXJuYWwuanBfam91cm5hbF9tYXhfY29tbWl0X2FnZSkpCisjZGVmaW5lIHNldF9zYl9qcF9qb3VybmFsX21heF9jb21taXRfYWdlKHNicCx2KSBcCisgICAgICAgICAgICAgICgoc2JwKS0+c192MS5zX2pvdXJuYWwuanBfam91cm5hbF9tYXhfY29tbWl0X2FnZSA9IGNwdV90b19sZTMyKHYpKQorCisjZGVmaW5lIHNiX2Jsb2Nrc2l6ZShzYnApICAgICAgICAgIChsZTE2X3RvX2NwdSgoc2JwKS0+c192MS5zX2Jsb2Nrc2l6ZSkpCisjZGVmaW5lIHNldF9zYl9ibG9ja3NpemUoc2JwLHYpICAgICgoc2JwKS0+c192MS5zX2Jsb2Nrc2l6ZSA9IGNwdV90b19sZTE2KHYpKQorI2RlZmluZSBzYl9vaWRfbWF4c2l6ZShzYnApICAgICAgICAobGUxNl90b19jcHUoKHNicCktPnNfdjEuc19vaWRfbWF4c2l6ZSkpCisjZGVmaW5lIHNldF9zYl9vaWRfbWF4c2l6ZShzYnAsdikgICgoc2JwKS0+c192MS5zX29pZF9tYXhzaXplID0gY3B1X3RvX2xlMTYodikpCisjZGVmaW5lIHNiX29pZF9jdXJzaXplKHNicCkgICAgICAgIChsZTE2X3RvX2NwdSgoc2JwKS0+c192MS5zX29pZF9jdXJzaXplKSkKKyNkZWZpbmUgc2V0X3NiX29pZF9jdXJzaXplKHNicCx2KSAgKChzYnApLT5zX3YxLnNfb2lkX2N1cnNpemUgPSBjcHVfdG9fbGUxNih2KSkKKyNkZWZpbmUgc2JfdW1vdW50X3N0YXRlKHNicCkgICAgICAgKGxlMTZfdG9fY3B1KChzYnApLT5zX3YxLnNfdW1vdW50X3N0YXRlKSkKKyNkZWZpbmUgc2V0X3NiX3Vtb3VudF9zdGF0ZShzYnAsdikgKChzYnApLT5zX3YxLnNfdW1vdW50X3N0YXRlID0gY3B1X3RvX2xlMTYodikpCisjZGVmaW5lIHNiX2ZzX3N0YXRlKHNicCkgICAgICAgICAgIChsZTE2X3RvX2NwdSgoc2JwKS0+c192MS5zX2ZzX3N0YXRlKSkKKyNkZWZpbmUgc2V0X3NiX2ZzX3N0YXRlKHNicCx2KSAgICAgKChzYnApLT5zX3YxLnNfZnNfc3RhdGUgPSBjcHVfdG9fbGUxNih2KSkgCisjZGVmaW5lIHNiX2hhc2hfZnVuY3Rpb25fY29kZShzYnApIFwKKyAgICAgICAgICAgICAgKGxlMzJfdG9fY3B1KChzYnApLT5zX3YxLnNfaGFzaF9mdW5jdGlvbl9jb2RlKSkKKyNkZWZpbmUgc2V0X3NiX2hhc2hfZnVuY3Rpb25fY29kZShzYnAsdikgXAorICAgICAgICAgICAgICAoKHNicCktPnNfdjEuc19oYXNoX2Z1bmN0aW9uX2NvZGUgPSBjcHVfdG9fbGUzMih2KSkKKyNkZWZpbmUgc2JfdHJlZV9oZWlnaHQoc2JwKSAgICAgICAgKGxlMTZfdG9fY3B1KChzYnApLT5zX3YxLnNfdHJlZV9oZWlnaHQpKQorI2RlZmluZSBzZXRfc2JfdHJlZV9oZWlnaHQoc2JwLHYpICAoKHNicCktPnNfdjEuc190cmVlX2hlaWdodCA9IGNwdV90b19sZTE2KHYpKQorI2RlZmluZSBzYl9ibWFwX25yKHNicCkgICAgICAgICAgICAobGUxNl90b19jcHUoKHNicCktPnNfdjEuc19ibWFwX25yKSkKKyNkZWZpbmUgc2V0X3NiX2JtYXBfbnIoc2JwLHYpICAgICAgKChzYnApLT5zX3YxLnNfYm1hcF9uciA9IGNwdV90b19sZTE2KHYpKQorI2RlZmluZSBzYl92ZXJzaW9uKHNicCkgICAgICAgICAgICAobGUxNl90b19jcHUoKHNicCktPnNfdjEuc192ZXJzaW9uKSkKKyNkZWZpbmUgc2V0X3NiX3ZlcnNpb24oc2JwLHYpICAgICAgKChzYnApLT5zX3YxLnNfdmVyc2lvbiA9IGNwdV90b19sZTE2KHYpKQorCisjZGVmaW5lIHNiX3Jlc2VydmVkX2Zvcl9qb3VybmFsKHNicCkgXAorICAgICAgICAgICAgICAobGUxNl90b19jcHUoKHNicCktPnNfdjEuc19yZXNlcnZlZF9mb3Jfam91cm5hbCkpCisjZGVmaW5lIHNldF9zYl9yZXNlcnZlZF9mb3Jfam91cm5hbChzYnAsdikgXAorICAgICAgICAgICAgICAoKHNicCktPnNfdjEuc19yZXNlcnZlZF9mb3Jfam91cm5hbCA9IGNwdV90b19sZTE2KHYpKQorCisvKiBMT0dHSU5HIC0tICovCisKKy8qIFRoZXNlIGFsbCBpbnRlcmVsYXRlIGZvciBwZXJmb3JtYW5jZS4gIAorKioKKyoqIElmIHRoZSBqb3VybmFsIGJsb2NrIGNvdW50IGlzIHNtYWxsZXIgdGhhbiBuIHRyYW5zYWN0aW9ucywgeW91IGxvc2Ugc3BlZWQuIAorKiogSSBkb24ndCBrbm93IHdoYXQgbiBpcyB5ZXQsIEknbSBndWVzc2luZyA4LTE2LgorKioKKyoqIHR5cGljYWwgdHJhbnNhY3Rpb24gc2l6ZSBkZXBlbmRzIG9uIHRoZSBhcHBsaWNhdGlvbiwgaG93IG9mdGVuIGZzeW5jIGlzCisqKiBjYWxsZWQsIGFuZCBob3cgbWFueSBtZXRhZGF0YSBibG9ja3MgeW91IGRpcnR5IGluIGEgMzAgc2Vjb25kIHBlcmlvZC4gIAorKiogVGhlIG1vcmUgc21hbGwgZmlsZXMgKDwxNmspIHlvdSB1c2UsIHRoZSBsYXJnZXIgeW91ciB0cmFuc2FjdGlvbnMgd2lsbAorKiogYmUuCisqKiAKKyoqIElmIHlvdXIgam91cm5hbCBmaWxscyBmYXN0ZXIgdGhhbiBkaXJ0eSBidWZmZXJzIGdldCBmbHVzaGVkIHRvIGRpc2ssIGl0IG11c3QgZmx1c2ggdGhlbSBiZWZvcmUgYWxsb3dpbmcgdGhlIGpvdXJuYWwKKyoqIHRvIHdyYXAsIHdoaWNoIHNsb3dzIHRoaW5ncyBkb3duLiAgSWYgeW91IG5lZWQgaGlnaCBzcGVlZCBtZXRhIGRhdGEgdXBkYXRlcywgdGhlIGpvdXJuYWwgc2hvdWxkIGJlIGJpZyBlbm91Z2gKKyoqIHRvIHByZXZlbnQgd3JhcHBpbmcgYmVmb3JlIGRpcnR5IG1ldGEgYmxvY2tzIGdldCB0byBkaXNrLgorKioKKyoqIElmIHRoZSBiYXRjaCBtYXggaXMgc21hbGxlciB0aGFuIHRoZSB0cmFuc2FjdGlvbiBtYXgsIHlvdSdsbCB3YXN0ZSBzcGFjZSBhdCB0aGUgZW5kIG9mIHRoZSBqb3VybmFsCisqKiBiZWNhdXNlIGpvdXJuYWxfZW5kIHNldHMgdGhlIG5leHQgdHJhbnNhY3Rpb24gdG8gc3RhcnQgYXQgMCBpZiB0aGUgbmV4dCB0cmFuc2FjdGlvbiBoYXMgYW55IGNoYW5jZSBvZiB3cmFwcGluZy4KKyoqCisqKiBUaGUgbGFyZ2UgdGhlIGJhdGNoIG1heCBhZ2UsIHRoZSBiZXR0ZXIgdGhlIHNwZWVkLCBhbmQgdGhlIG1vcmUgbWV0YSBkYXRhIGNoYW5nZXMgeW91J2xsIGxvc2UgYWZ0ZXIgYSBjcmFzaC4KKyoqCisqLworCisvKiBkb24ndCBtZXNzIHdpdGggdGhlc2UgZm9yIGEgd2hpbGUgKi8KKwkJCQkvKiB3ZSBoYXZlIGEgbm9kZSBzaXplIGRlZmluZSBzb21ld2hlcmUgaW4gcmVpc2VyZnNfZnMuaC4gLUhhbnMgKi8KKyNkZWZpbmUgSk9VUk5BTF9CTE9DS19TSVpFICA0MDk2IC8qIEJVRyBnb3R0YSBnZXQgcmlkIG9mIHRoaXMgKi8KKyNkZWZpbmUgSk9VUk5BTF9NQVhfQ05PREUgICAxNTAwIC8qIG1heCBjbm9kZXMgdG8gYWxsb2NhdGUuICovCisjZGVmaW5lIEpPVVJOQUxfSEFTSF9TSVpFIDgxOTIgICAKKyNkZWZpbmUgSk9VUk5BTF9OVU1fQklUTUFQUyA1IC8qIG51bWJlciBvZiBjb3BpZXMgb2YgdGhlIGJpdG1hcHMgdG8gaGF2ZSBmbG9hdGluZy4gIE11c3QgYmUgPj0gMiAqLworCisvKiBPbmUgb2YgdGhlc2UgZm9yIGV2ZXJ5IGJsb2NrIGluIGV2ZXJ5IHRyYW5zYWN0aW9uCisqKiBFYWNoIG9uZSBpcyBpbiB0d28gaGFzaCB0YWJsZXMuICBGaXJzdCwgYSBoYXNoIG9mIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uLCBhbmQgYWZ0ZXIgam91cm5hbF9lbmQsIGEKKyoqIGhhc2ggb2YgYWxsIHRoZSBpbiBtZW1vcnkgdHJhbnNhY3Rpb25zLgorKiogbmV4dCBhbmQgcHJldiBhcmUgdXNlZCBieSB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiAoam91cm5hbF9oYXNoKS4KKyoqIGhuZXh0IGFuZCBocHJldiBhcmUgdXNlZCBieSBqb3VybmFsX2xpc3RfaGFzaC4gIElmIGEgYmxvY2sgaXMgaW4gbW9yZSB0aGFuIG9uZSB0cmFuc2FjdGlvbiwgdGhlIGpvdXJuYWxfbGlzdF9oYXNoCisqKiBsaW5rcyBpdCBpbiBtdWx0aXBsZSB0aW1lcy4gIFRoaXMgYWxsb3dzIGZsdXNoX2pvdXJuYWxfbGlzdCB0byByZW1vdmUganVzdCB0aGUgY25vZGUgYmVsb25naW5nCisqKiB0byBhIGdpdmVuIHRyYW5zYWN0aW9uLgorKi8KK3N0cnVjdCByZWlzZXJmc19qb3VybmFsX2Nub2RlIHsKKyAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA7CQkgLyogcmVhbCBidWZmZXIgaGVhZCAqLworICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiIDsJCSAvKiBkZXYgb2YgcmVhbCBidWZmZXIgaGVhZCAqLworICBfX3UzMiBibG9ja25yIDsJCSAvKiBibG9jayBudW1iZXIgb2YgcmVhbCBidWZmZXIgaGVhZCwgPT0gMCB3aGVuIGJ1ZmZlciBvbiBkaXNrICovCisgIGxvbmcgc3RhdGUgOworICBzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9saXN0ICpqbGlzdCA7ICAvKiBqb3VybmFsIGxpc3QgdGhpcyBjbm9kZSBsaXZlcyBpbiAqLworICBzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9jbm9kZSAqbmV4dCA7ICAvKiBuZXh0IGluIHRyYW5zYWN0aW9uIGxpc3QgKi8KKyAgc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfY25vZGUgKnByZXYgOyAgLyogcHJldiBpbiB0cmFuc2FjdGlvbiBsaXN0ICovCisgIHN0cnVjdCByZWlzZXJmc19qb3VybmFsX2Nub2RlICpocHJldiA7IC8qIHByZXYgaW4gaGFzaCBsaXN0ICovCisgIHN0cnVjdCByZWlzZXJmc19qb3VybmFsX2Nub2RlICpobmV4dCA7IC8qIG5leHQgaW4gaGFzaCBsaXN0ICovCit9OworCitzdHJ1Y3QgcmVpc2VyZnNfYml0bWFwX25vZGUgeworICBpbnQgaWQgOworICBjaGFyICpkYXRhIDsKKyAgc3RydWN0IGxpc3RfaGVhZCBsaXN0IDsKK30gOworCitzdHJ1Y3QgcmVpc2VyZnNfbGlzdF9iaXRtYXAgeworICBzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9saXN0ICpqb3VybmFsX2xpc3QgOworICBzdHJ1Y3QgcmVpc2VyZnNfYml0bWFwX25vZGUgKipiaXRtYXBzIDsKK30gOworCisvKgorKiogb25lIG9mIHRoZXNlIGZvciBlYWNoIHRyYW5zYWN0aW9uLiAgVGhlIG1vc3QgaW1wb3J0YW50IHBhcnQgaGVyZSBpcyB0aGUgal9yZWFsYmxvY2suCisqKiB0aGlzIGxpc3Qgb2YgY25vZGVzIGlzIHVzZWQgdG8gaGFzaCBhbGwgdGhlIGJsb2NrcyBpbiBhbGwgdGhlIGNvbW1pdHMsIHRvIG1hcmsgYWxsIHRoZQorKiogcmVhbCBidWZmZXIgaGVhZHMgZGlydHkgb25jZSBhbGwgdGhlIGNvbW1pdHMgaGl0IHRoZSBkaXNrLAorKiogYW5kIHRvIG1ha2Ugc3VyZSBldmVyeSByZWFsIGJsb2NrIGluIGEgdHJhbnNhY3Rpb24gaXMgb24gZGlzayBiZWZvcmUgYWxsb3dpbmcgdGhlIGxvZyBhcmVhCisqKiB0byBiZSBvdmVyd3JpdHRlbiAqLworc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfbGlzdCB7CisgIHVuc2lnbmVkIGxvbmcgal9zdGFydCA7CisgIHVuc2lnbmVkIGxvbmcgal9zdGF0ZTsKKyAgdW5zaWduZWQgbG9uZyBqX2xlbiA7CisgIGF0b21pY190IGpfbm9uemVyb2xlbiA7CisgIGF0b21pY190IGpfY29tbWl0X2xlZnQgOworICBhdG9taWNfdCBqX29sZGVyX2NvbW1pdHNfZG9uZSA7ICAgICAgLyogYWxsIGNvbW1pdHMgb2xkZXIgdGhhbiB0aGlzIG9uIGRpc2sqLworICBzdHJ1Y3Qgc2VtYXBob3JlIGpfY29tbWl0X2xvY2s7CisgIHVuc2lnbmVkIGxvbmcgal90cmFuc19pZCA7CisgIHRpbWVfdCBqX3RpbWVzdGFtcCA7CisgIHN0cnVjdCByZWlzZXJmc19saXN0X2JpdG1hcCAqal9saXN0X2JpdG1hcCA7CisgIHN0cnVjdCBidWZmZXJfaGVhZCAqal9jb21taXRfYmggOyAvKiBjb21taXQgYnVmZmVyIGhlYWQgKi8KKyAgc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfY25vZGUgKmpfcmVhbGJsb2NrICA7CisgIHN0cnVjdCByZWlzZXJmc19qb3VybmFsX2Nub2RlICpqX2ZyZWVkbGlzdCA7IC8qIGxpc3Qgb2YgYnVmZmVycyB0aGF0IHdlcmUgZnJlZWQgZHVyaW5nIHRoaXMgdHJhbnMuICBmcmVlIGVhY2ggb2YgdGhlc2Ugb24gZmx1c2ggKi8KKyAgLyogdGltZSBvcmRlcmVkIGxpc3Qgb2YgYWxsIGFjdGl2ZSB0cmFuc2FjdGlvbnMgKi8KKyAgc3RydWN0IGxpc3RfaGVhZCBqX2xpc3Q7CisKKyAgLyogdGltZSBvcmRlcmVkIGxpc3Qgb2YgYWxsIHRyYW5zYWN0aW9ucyB3ZSBoYXZlbid0IHRyaWVkIHRvIGZsdXNoIHlldCAqLworICBzdHJ1Y3QgbGlzdF9oZWFkIGpfd29ya2luZ19saXN0OworCisgIC8qIGxpc3Qgb2YgdGFpbCBjb252ZXJzaW9uIHRhcmdldHMgaW4gbmVlZCBvZiBmbHVzaCBiZWZvcmUgY29tbWl0ICovCisgIHN0cnVjdCBsaXN0X2hlYWQgal90YWlsX2JoX2xpc3Q7CisgIC8qIGxpc3Qgb2YgZGF0YT1vcmRlcmVkIGJ1ZmZlcnMgaW4gbmVlZCBvZiBmbHVzaCBiZWZvcmUgY29tbWl0ICovCisgIHN0cnVjdCBsaXN0X2hlYWQgal9iaF9saXN0OworICBpbnQgal9yZWZjb3VudDsKK30gOworCitzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCB7CisgIHN0cnVjdCBidWZmZXJfaGVhZCAqKiBqX2FwX2Jsb2NrcyA7IC8qIGpvdXJuYWwgYmxvY2tzIG9uIGRpc2sgKi8KKyAgc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfY25vZGUgKmpfbGFzdCA7IC8qIG5ld2VzdCBqb3VybmFsIGJsb2NrICovCisgIHN0cnVjdCByZWlzZXJmc19qb3VybmFsX2Nub2RlICpqX2ZpcnN0IDsgLyogIG9sZGVzdCBqb3VybmFsIGJsb2NrLiAgc3RhcnQgaGVyZSBmb3IgdHJhdmVyc2UgKi8KKworICBzdHJ1Y3QgZmlsZSAgICAgICAgICpqX2Rldl9maWxlOworICBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpqX2Rldl9iZDsgIAorICBpbnQgal8xc3RfcmVzZXJ2ZWRfYmxvY2s7ICAgICAvKiBmaXJzdCBibG9jayBvbiBzX2RldiBvZiByZXNlcnZlZCBhcmVhIGpvdXJuYWwgKi8gICAgICAgIAorCQorICBsb25nIGpfc3RhdGUgOwkJCQorICB1bnNpZ25lZCBsb25nIGpfdHJhbnNfaWQgOworICB1bnNpZ25lZCBsb25nIGpfbW91bnRfaWQgOworICB1bnNpZ25lZCBsb25nIGpfc3RhcnQgOyAgICAgICAgICAgICAvKiBzdGFydCBvZiBjdXJyZW50IHdhaXRpbmcgY29tbWl0IChpbmRleCBpbnRvIGpfYXBfYmxvY2tzKSAqLworICB1bnNpZ25lZCBsb25nIGpfbGVuIDsgICAgICAgICAgICAgICAvKiBsZW5naHQgb2YgY3VycmVudCB3YWl0aW5nIGNvbW1pdCAqLworICB1bnNpZ25lZCBsb25nIGpfbGVuX2FsbG9jIDsgICAgICAgICAvKiBudW1iZXIgb2YgYnVmZmVycyByZXF1ZXN0ZWQgYnkgam91cm5hbF9iZWdpbigpICovCisgIGF0b21pY190IGpfd2NvdW50IDsgICAgICAgICAgICAvKiBjb3VudCBvZiB3cml0ZXJzIGZvciBjdXJyZW50IGNvbW1pdCAqLworICB1bnNpZ25lZCBsb25nIGpfYmNvdW50IDsgICAgICAgICAgICAvKiBiYXRjaCBjb3VudC4gYWxsb3dzIHR1cm5pbmcgWCB0cmFuc2FjdGlvbnMgaW50byAxICovCisgIHVuc2lnbmVkIGxvbmcgal9maXJzdF91bmZsdXNoZWRfb2Zmc2V0IDsgIC8qIGZpcnN0IHVuZmx1c2hlZCB0cmFuc2FjdGlvbnMgb2Zmc2V0ICovCisgIHVuc2lnbmVkIGxvbmcgal9sYXN0X2ZsdXNoX3RyYW5zX2lkIDsgICAgLyogbGFzdCBmdWxseSBmbHVzaGVkIGpvdXJuYWwgdGltZXN0YW1wICovCisgIHN0cnVjdCBidWZmZXJfaGVhZCAqal9oZWFkZXJfYmggOyAgIAorCisgIHRpbWVfdCBqX3RyYW5zX3N0YXJ0X3RpbWUgOyAgICAgICAgIC8qIHRpbWUgdGhpcyB0cmFuc2FjdGlvbiBzdGFydGVkICovCisgIHN0cnVjdCBzZW1hcGhvcmUgal9sb2NrOworICBzdHJ1Y3Qgc2VtYXBob3JlIGpfZmx1c2hfc2VtOworICB3YWl0X3F1ZXVlX2hlYWRfdCBqX2pvaW5fd2FpdCA7ICAgIC8qIHdhaXQgZm9yIGN1cnJlbnQgdHJhbnNhY3Rpb24gdG8gZmluaXNoIGJlZm9yZSBzdGFydGluZyBuZXcgb25lICovCisgIGF0b21pY190IGpfamxvY2sgOyAgICAgICAgICAgICAgICAgICAgICAgLyogbG9jayBmb3Igal9qb2luX3dhaXQgKi8KKyAgaW50IGpfbGlzdF9iaXRtYXBfaW5kZXggOwkgICAgICAvKiBudW1iZXIgb2YgbmV4dCBsaXN0IGJpdG1hcCB0byB1c2UgKi8KKyAgaW50IGpfbXVzdF93YWl0IDsJCSAgICAgICAvKiBubyBtb3JlIGpvdXJuYWwgYmVnaW5zIGFsbG93ZWQuIE1VU1Qgc2xlZXAgb24gal9qb2luX3dhaXQgKi8KKyAgaW50IGpfbmV4dF9mdWxsX2ZsdXNoIDsgICAgICAgICAgICAgLyogbmV4dCBqb3VybmFsX2VuZCB3aWxsIGZsdXNoIGFsbCBqb3VybmFsIGxpc3QgKi8KKyAgaW50IGpfbmV4dF9hc3luY19mbHVzaCA7ICAgICAgICAgICAgIC8qIG5leHQgam91cm5hbF9lbmQgd2lsbCBmbHVzaCBhbGwgYXN5bmMgY29tbWl0cyAqLworCisgIGludCBqX2Nub2RlX3VzZWQgOwkgICAgICAvKiBudW1iZXIgb2YgY25vZGVzIG9uIHRoZSB1c2VkIGxpc3QgKi8KKyAgaW50IGpfY25vZGVfZnJlZSA7ICAgICAgICAgIC8qIG51bWJlciBvZiBjbm9kZXMgb24gdGhlIGZyZWUgbGlzdCAqLworCisgIHVuc2lnbmVkIGludCBqX3RyYW5zX21heCA7ICAgICAgICAgICAvKiBtYXggbnVtYmVyIG9mIGJsb2NrcyBpbiBhIHRyYW5zYWN0aW9uLiAgKi8KKyAgdW5zaWduZWQgaW50IGpfbWF4X2JhdGNoIDsgICAgICAgICAgIC8qIG1heCBudW1iZXIgb2YgYmxvY2tzIHRvIGJhdGNoIGludG8gYSB0cmFucyAqLworICB1bnNpZ25lZCBpbnQgal9tYXhfY29tbWl0X2FnZSA7ICAgICAgLyogaW4gc2Vjb25kcywgaG93IG9sZCBjYW4gYW4gYXN5bmMgY29tbWl0IGJlICovCisgIHVuc2lnbmVkIGludCBqX21heF90cmFuc19hZ2UgOyAgICAgICAvKiBpbiBzZWNvbmRzLCBob3cgb2xkIGNhbiBhIHRyYW5zYWN0aW9uIGJlICovCisgIHVuc2lnbmVkIGludCBqX2RlZmF1bHRfbWF4X2NvbW1pdF9hZ2UgOyAvKiB0aGUgZGVmYXVsdCBmb3IgdGhlIG1heCBjb21taXQgYWdlICovCisKKyAgc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfY25vZGUgKmpfY25vZGVfZnJlZV9saXN0IDsKKyAgc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfY25vZGUgKmpfY25vZGVfZnJlZV9vcmlnIDsgLyogb3JpZyBwb2ludGVyIHJldHVybmVkIGZyb20gdm1hbGxvYyAqLworCisgIHN0cnVjdCByZWlzZXJmc19qb3VybmFsX2xpc3QgKmpfY3VycmVudF9qbDsKKyAgaW50IGpfZnJlZV9iaXRtYXBfbm9kZXMgOworICBpbnQgal91c2VkX2JpdG1hcF9ub2RlcyA7CisKKyAgaW50IGpfbnVtX2xpc3RzOyAgICAgIC8qIHRvdGFsIG51bWJlciBvZiBhY3RpdmUgdHJhbnNhY3Rpb25zICovCisgIGludCBqX251bV93b3JrX2xpc3RzOyAvKiBudW1iZXIgdGhhdCBuZWVkIGF0dGVudGlvbiBmcm9tIGtyZWlzZXJmc2QgKi8KKworICAvKiBkZWJ1Z2dpbmcgdG8gbWFrZSBzdXJlIHRoaW5ncyBhcmUgZmx1c2hlZCBpbiBvcmRlciAqLworICBpbnQgal9sYXN0X2ZsdXNoX2lkOworCisgIC8qIGRlYnVnZ2luZyB0byBtYWtlIHN1cmUgdGhpbmdzIGFyZSBjb21taXR0ZWQgaW4gb3JkZXIgKi8KKyAgaW50IGpfbGFzdF9jb21taXRfaWQ7CisKKyAgc3RydWN0IGxpc3RfaGVhZCBqX2JpdG1hcF9ub2RlcyA7CisgIHN0cnVjdCBsaXN0X2hlYWQgal9kaXJ0eV9idWZmZXJzIDsKKyAgc3BpbmxvY2tfdCBqX2RpcnR5X2J1ZmZlcnNfbG9jayA7IC8qIHByb3RlY3RzIGpfZGlydHlfYnVmZmVycyAqLworCisgIC8qIGxpc3Qgb2YgYWxsIGFjdGl2ZSB0cmFuc2FjdGlvbnMgKi8KKyAgc3RydWN0IGxpc3RfaGVhZCBqX2pvdXJuYWxfbGlzdDsKKyAgLyogbGlzdHMgdGhhdCBoYXZlbid0IGJlZW4gdG91Y2hlZCBieSB3cml0ZWJhY2sgYXR0ZW1wdHMgKi8KKyAgc3RydWN0IGxpc3RfaGVhZCBqX3dvcmtpbmdfbGlzdDsKKworICBzdHJ1Y3QgcmVpc2VyZnNfbGlzdF9iaXRtYXAgal9saXN0X2JpdG1hcFtKT1VSTkFMX05VTV9CSVRNQVBTXSA7CS8qIGFycmF5IG9mIGJpdG1hcHMgdG8gcmVjb3JkIHRoZSBkZWxldGVkIGJsb2NrcyAqLworICBzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9jbm9kZSAqal9oYXNoX3RhYmxlW0pPVVJOQUxfSEFTSF9TSVpFXSA7IAkgICAgLyogaGFzaCB0YWJsZSBmb3IgcmVhbCBidWZmZXIgaGVhZHMgaW4gY3VycmVudCB0cmFucyAqLyAKKyAgc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfY25vZGUgKmpfbGlzdF9oYXNoX3RhYmxlW0pPVVJOQUxfSEFTSF9TSVpFXSA7IC8qIGhhc2ggdGFibGUgZm9yIGFsbCB0aGUgcmVhbCBidWZmZXIgaGVhZHMgaW4gYWxsIAorICAJCQkJCQkJCQkJdGhlIHRyYW5zYWN0aW9ucyAqLworICBzdHJ1Y3QgbGlzdF9oZWFkIGpfcHJlYWxsb2NfbGlzdDsgICAgIC8qIGxpc3Qgb2YgaW5vZGVzIHdoaWNoIGhhdmUgcHJlYWxsb2NhdGVkIGJsb2NrcyAqLworICBpbnQgal9wZXJzaXN0ZW50X3RyYW5zOworICB1bnNpZ25lZCBsb25nIGpfbWF4X3RyYW5zX3NpemUgOworICB1bnNpZ25lZCBsb25nIGpfbWF4X2JhdGNoX3NpemUgOworCisgIGludCBqX2Vycm5vOworCisgIC8qIHdoZW4gZmx1c2hpbmcgb3JkZXJlZCBidWZmZXJzLCB0aHJvdHRsZSBuZXcgb3JkZXJlZCB3cml0ZXJzICovCisgIHN0cnVjdCB3b3JrX3N0cnVjdCBqX3dvcms7CisgIGF0b21pY190IGpfYXN5bmNfdGhyb3R0bGU7Cit9OworCitlbnVtIGpvdXJuYWxfc3RhdGVfYml0cyB7CisgICAgSl9XUklURVJTX0JMT0NLRUQgPSAxLCAgIC8qIHNldCB3aGVuIG5ldyB3cml0ZXJzIG5vdCBhbGxvd2VkICovCisgICAgSl9XUklURVJTX1FVRVVFRCwgICAgICAgIC8qIHNldCB3aGVuIGxvZyBpcyBmdWxsIGR1ZSB0byB0b28gbWFueSB3cml0ZXJzICovCisgICAgSl9BQk9SVEVELCAgICAgICAgICAgICAgIC8qIHNldCB3aGVuIGxvZyBpcyBhYm9ydGVkICovCit9OworCisKKyNkZWZpbmUgSk9VUk5BTF9ERVNDX01BR0lDICJSZUlzRXJMQiIgLyogaWNrLiAgbWFnaWMgc3RyaW5nIHRvIGZpbmQgZGVzYyBibG9ja3MgaW4gdGhlIGpvdXJuYWwgKi8KKwordHlwZWRlZiBfX3UzMiAoKmhhc2hmX3QpIChjb25zdCBzaWduZWQgY2hhciAqLCBpbnQpOworCitzdHJ1Y3QgcmVpc2VyZnNfYml0bWFwX2luZm8KK3sKKyAgICAvLyBGSVhNRTogV29uJ3Qgd29yayB3aXRoIGJsb2NrIHNpemVzID4gOEsKKyAgICBfX3UxNiAgZmlyc3RfemVyb19oaW50OworICAgIF9fdTE2ICBmcmVlX2NvdW50OworICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7IC8qIHRoZSBhY3R1YWwgYml0bWFwICovCit9OworCitzdHJ1Y3QgcHJvY19kaXJfZW50cnk7CisKKyNpZiBkZWZpbmVkKCBDT05GSUdfUFJPQ19GUyApICYmIGRlZmluZWQoIENPTkZJR19SRUlTRVJGU19QUk9DX0lORk8gKQordHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBzdGF0X2NudF90OwordHlwZWRlZiBzdHJ1Y3QgcmVpc2VyZnNfcHJvY19pbmZvX2RhdGEKK3sKKyAgc3BpbmxvY2tfdCBsb2NrOworICBpbnQgZXhpdGluZzsKKyAgaW50IG1heF9oYXNoX2NvbGxpc2lvbnM7CisKKyAgc3RhdF9jbnRfdCBicmVhZHM7CisgIHN0YXRfY250X3QgYnJlYWRfbWlzczsKKyAgc3RhdF9jbnRfdCBzZWFyY2hfYnlfa2V5OworICBzdGF0X2NudF90IHNlYXJjaF9ieV9rZXlfZnNfY2hhbmdlZDsKKyAgc3RhdF9jbnRfdCBzZWFyY2hfYnlfa2V5X3Jlc3RhcnRlZDsKKworICBzdGF0X2NudF90IGluc2VydF9pdGVtX3Jlc3RhcnRlZDsKKyAgc3RhdF9jbnRfdCBwYXN0ZV9pbnRvX2l0ZW1fcmVzdGFydGVkOworICBzdGF0X2NudF90IGN1dF9mcm9tX2l0ZW1fcmVzdGFydGVkOworICBzdGF0X2NudF90IGRlbGV0ZV9zb2xpZF9pdGVtX3Jlc3RhcnRlZDsKKyAgc3RhdF9jbnRfdCBkZWxldGVfaXRlbV9yZXN0YXJ0ZWQ7CisKKyAgc3RhdF9jbnRfdCBsZWFrZWRfb2lkOworICBzdGF0X2NudF90IGxlYXZlc19yZW1vdmFibGU7CisKKyAgLyogYmFsYW5jZXMgcGVyIGxldmVsLiBVc2UgZXhwbGljaXQgNSBhcyBNQVhfSEVJR0hUIGlzIG5vdCB2aXNpYmxlIHlldC4gKi8KKyAgc3RhdF9jbnRfdCBiYWxhbmNlX2F0WyA1IF07IC8qIFhYWCAqLworICAvKiBzYmsgPT0gc2VhcmNoX2J5X2tleSAqLworICBzdGF0X2NudF90IHNia19yZWFkX2F0WyA1IF07IC8qIFhYWCAqLworICBzdGF0X2NudF90IHNia19mc19jaGFuZ2VkWyA1IF07CisgIHN0YXRfY250X3Qgc2JrX3Jlc3RhcnRlZFsgNSBdOworICBzdGF0X2NudF90IGl0ZW1zX2F0WyA1IF07IC8qIFhYWCAqLworICBzdGF0X2NudF90IGZyZWVfYXRbIDUgXTsgLyogWFhYICovCisgIHN0YXRfY250X3QgY2FuX25vZGVfYmVfcmVtb3ZlZFsgNSBdOyAvKiBYWFggKi8KKyAgbG9uZyBpbnQgbG51bVsgNSBdOyAvKiBYWFggKi8KKyAgbG9uZyBpbnQgcm51bVsgNSBdOyAvKiBYWFggKi8KKyAgbG9uZyBpbnQgbGJ5dGVzWyA1IF07IC8qIFhYWCAqLworICBsb25nIGludCByYnl0ZXNbIDUgXTsgLyogWFhYICovCisgIHN0YXRfY250X3QgZ2V0X25laWdoYm9yc1sgNSBdOworICBzdGF0X2NudF90IGdldF9uZWlnaGJvcnNfcmVzdGFydFsgNSBdOworICBzdGF0X2NudF90IG5lZWRfbF9uZWlnaGJvclsgNSBdOworICBzdGF0X2NudF90IG5lZWRfcl9uZWlnaGJvclsgNSBdOworCisgIHN0YXRfY250X3QgZnJlZV9ibG9jazsKKyAgc3RydWN0IF9fc2Nhbl9iaXRtYXBfc3RhdHMgeworCXN0YXRfY250X3QgY2FsbDsKKwlzdGF0X2NudF90IHdhaXQ7CisJc3RhdF9jbnRfdCBibWFwOworCXN0YXRfY250X3QgcmV0cnk7CisJc3RhdF9jbnRfdCBpbl9qb3VybmFsX2hpbnQ7CisJc3RhdF9jbnRfdCBpbl9qb3VybmFsX25vaGludDsKKwlzdGF0X2NudF90IHN0b2xlbjsKKyAgfSBzY2FuX2JpdG1hcDsKKyAgc3RydWN0IF9fam91cm5hbF9zdGF0cyB7CisJc3RhdF9jbnRfdCBpbl9qb3VybmFsOworCXN0YXRfY250X3QgaW5fam91cm5hbF9iaXRtYXA7CisJc3RhdF9jbnRfdCBpbl9qb3VybmFsX3JldXNhYmxlOworCXN0YXRfY250X3QgbG9ja19qb3VybmFsOworCXN0YXRfY250X3QgbG9ja19qb3VybmFsX3dhaXQ7CisJc3RhdF9jbnRfdCBqb3VybmFsX2JlaW5nOworCXN0YXRfY250X3Qgam91cm5hbF9yZWxvY2tfd3JpdGVyczsKKwlzdGF0X2NudF90IGpvdXJuYWxfcmVsb2NrX3djb3VudDsKKwlzdGF0X2NudF90IG1hcmtfZGlydHk7CisJc3RhdF9jbnRfdCBtYXJrX2RpcnR5X2FscmVhZHk7CisJc3RhdF9jbnRfdCBtYXJrX2RpcnR5X25vdGpvdXJuYWw7CisJc3RhdF9jbnRfdCByZXN0b3JlX3ByZXBhcmVkOworCXN0YXRfY250X3QgcHJlcGFyZTsKKwlzdGF0X2NudF90IHByZXBhcmVfcmV0cnk7CisgIH0gam91cm5hbDsKK30gcmVpc2VyZnNfcHJvY19pbmZvX2RhdGFfdDsKKyNlbHNlCit0eXBlZGVmIHN0cnVjdCByZWlzZXJmc19wcm9jX2luZm9fZGF0YQore30gcmVpc2VyZnNfcHJvY19pbmZvX2RhdGFfdDsKKyNlbmRpZgorCisvKiByZWlzZXJmcyB1bmlvbiBvZiBpbi1jb3JlIHN1cGVyIGJsb2NrIGRhdGEgKi8KK3N0cnVjdCByZWlzZXJmc19zYl9pbmZvCit7CisgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICogc19zYmg7ICAgICAgICAgICAgICAgICAgIC8qIEJ1ZmZlciBjb250YWluaW5nIHRoZSBzdXBlciBibG9jayAqLworCQkJCS8qIGJvdGggdGhlIGNvbW1lbnQgYW5kIHRoZSBjaG9pY2Ugb2YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSBhcmUgdW5jbGVhciBmb3Igc19ycyAtSGFucyAqLworICAgIHN0cnVjdCByZWlzZXJmc19zdXBlcl9ibG9jayAqIHNfcnM7ICAgICAgICAgICAvKiBQb2ludGVyIHRvIHRoZSBzdXBlciBibG9jayBpbiB0aGUgYnVmZmVyICovCisgICAgc3RydWN0IHJlaXNlcmZzX2JpdG1hcF9pbmZvICogc19hcF9iaXRtYXA7CisgICAgc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKnNfam91cm5hbCA7CQkvKiBwb2ludGVyIHRvIGpvdXJuYWwgaW5mb3JtYXRpb24gKi8KKyAgICB1bnNpZ25lZCBzaG9ydCBzX21vdW50X3N0YXRlOyAgICAgICAgICAgICAgICAgLyogcmVpc2VyZnMgc3RhdGUgKHZhbGlkLCBpbnZhbGlkKSAqLworICAKKwkJCQkvKiBDb21tZW50PyAtSGFucyAqLworICAgIHZvaWQgKCplbmRfaW9faGFuZGxlcikoc3RydWN0IGJ1ZmZlcl9oZWFkICosIGludCk7CisgICAgaGFzaGZfdCBzX2hhc2hfZnVuY3Rpb247CS8qIHBvaW50ZXIgdG8gZnVuY3Rpb24gd2hpY2ggaXMgdXNlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBzb3J0IG5hbWVzIGluIGRpcmVjdG9yeS4gU2V0IG9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdW50ICovCisgICAgdW5zaWduZWQgbG9uZyBzX21vdW50X29wdDsJLyogcmVpc2VyZnMncyBtb3VudCBvcHRpb25zIGFyZSBzZXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVyZSAoY3VycmVudGx5IC0gTk9UQUlMLCBOT0xPRywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVQTEFZT05MWSkgKi8KKworICAgIHN0cnVjdCB7CQkJLyogVGhpcyBpcyBhIHN0cnVjdHVyZSB0aGF0IGRlc2NyaWJlcyBibG9jayBhbGxvY2F0b3Igb3B0aW9ucyAqLworCXVuc2lnbmVkIGxvbmcgYml0czsJLyogQml0ZmllbGQgZm9yIGVuYWJsZS9kaXNhYmxlIGtpbmQgb2Ygb3B0aW9ucyAqLworCXVuc2lnbmVkIGxvbmcgbGFyZ2VfZmlsZV9zaXplOyAvKiBzaXplIHN0YXJ0ZWQgZnJvbSB3aGljaCB3ZSBjb25zaWRlciBmaWxlIHRvIGJlIGEgbGFyZ2Ugb25lKGluIGJsb2NrcykgKi8KKwlpbnQgYm9yZGVyOwkJLyogcGVyY2VudGFnZSBvZiBkaXNrLCBib3JkZXIgdGFrZXMgKi8KKwlpbnQgcHJlYWxsb2NtaW47CS8qIE1pbmltYWwgZmlsZSBzaXplIChpbiBibG9ja3MpIHN0YXJ0aW5nIGZyb20gd2hpY2ggd2UgZG8gcHJlYWxsb2NhdGlvbnMgKi8KKwlpbnQgcHJlYWxsb2NzaXplOwkvKiBOdW1iZXIgb2YgYmxvY2tzIHdlIHRyeSB0byBwcmVhbGxvYyB3aGVuIGZpbGUKKwkJCQkgICByZWFjaGVzIHByZWFsbG9jbWluIHNpemUgKGluIGJsb2Nrcykgb3IKKwkJCQkgICBwcmVhbGxvY19saXN0IGlzIGVtcHR5LiAqLworICAgIH0gc19hbGxvY19vcHRpb25zOworCisJCQkJLyogQ29tbWVudD8gLUhhbnMgKi8KKyAgICB3YWl0X3F1ZXVlX2hlYWRfdCBzX3dhaXQ7CisJCQkJLyogVG8gYmUgb2Jzb2xldGVkIHNvb24gYnkgcGVyIGJ1ZmZlciBzZWFscy4uIC1IYW5zICovCisgICAgYXRvbWljX3Qgc19nZW5lcmF0aW9uX2NvdW50ZXI7IC8vIGluY3JlYXNlZCBieSBvbmUgZXZlcnkgdGltZSB0aGUKKyAgICAvLyB0cmVlIGdldHMgcmUtYmFsYW5jZWQKKyAgICB1bnNpZ25lZCBsb25nIHNfcHJvcGVydGllczsgICAgLyogRmlsZSBzeXN0ZW0gcHJvcGVydGllcy4gQ3VycmVudGx5IGhvbGRzCisJCQkJICAgICBvbi1kaXNrIEZTIGZvcm1hdCAqLworICAgIAorICAgIC8qIHNlc3Npb24gc3RhdGlzdGljcyAqLworICAgIGludCBzX2ttYWxsb2NzOworICAgIGludCBzX2Rpc2tfcmVhZHM7CisgICAgaW50IHNfZGlza193cml0ZXM7CisgICAgaW50IHNfZml4X25vZGVzOworICAgIGludCBzX2RvX2JhbGFuY2U7CisgICAgaW50IHNfdW5uZWVkZWRfbGVmdF9uZWlnaGJvcjsKKyAgICBpbnQgc19nb29kX3NlYXJjaF9ieV9rZXlfcmVhZGE7CisgICAgaW50IHNfYm1hcHM7CisgICAgaW50IHNfYm1hcHNfd2l0aG91dF9zZWFyY2g7CisgICAgaW50IHNfZGlyZWN0MmluZGlyZWN0OworICAgIGludCBzX2luZGlyZWN0MmRpcmVjdDsKKwkvKiBzZXQgdXAgd2hlbiBpdCdzIG9rIGZvciByZWlzZXJmc19yZWFkX2lub2RlMigpIHRvIHJlYWQgZnJvbQorCSAgIGRpc2sgaW5vZGUgd2l0aCBubGluaz09MC4gQ3VycmVudGx5IHRoaXMgaXMgb25seSB1c2VkIGR1cmluZworCSAgIGZpbmlzaF91bmZpbmlzaGVkKCkgcHJvY2Vzc2luZyBhdCBtb3VudCB0aW1lICovCisgICAgaW50IHNfaXNfdW5saW5rZWRfb2s7CisgICAgcmVpc2VyZnNfcHJvY19pbmZvX2RhdGFfdCBzX3Byb2NfaW5mb19kYXRhOworICAgIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY2RpcjsKKyAgICBpbnQgcmVzZXJ2ZWRfYmxvY2tzOyAvKiBhbW91bnQgb2YgYmxvY2tzIHJlc2VydmVkIGZvciBmdXJ0aGVyIGFsbG9jYXRpb25zICovCisgICAgc3BpbmxvY2tfdCBiaXRtYXBfbG9jazsgLyogdGhpcyBsb2NrIG9uIG5vdyBvbmx5IHVzZWQgdG8gcHJvdGVjdCByZXNlcnZlZF9ibG9ja3MgdmFyaWFibGUgKi8KKyAgICBzdHJ1Y3QgZGVudHJ5ICpwcml2X3Jvb3Q7IC8qIHJvb3Qgb2YgLy5yZWlzZXJmc19wcml2ICovCisgICAgc3RydWN0IGRlbnRyeSAqeGF0dHJfcm9vdDsgLyogcm9vdCBvZiAvLnJlaXNlcmZzX3ByaXYvLnhhICovCisgICAgc3RydWN0IHJ3X3NlbWFwaG9yZSB4YXR0cl9kaXJfc2VtOworCisgICAgaW50IGpfZXJybm87CisjaWZkZWYgQ09ORklHX1FVT1RBCisgICAgY2hhciAqc19xZl9uYW1lc1tNQVhRVU9UQVNdOworICAgIGludCBzX2pxdW90YV9mbXQ7CisjZW5kaWYKK307CisKKy8qIERlZmluaXRpb25zIG9mIHJlaXNlcmZzIG9uLWRpc2sgcHJvcGVydGllczogKi8KKyNkZWZpbmUgUkVJU0VSRlNfM181IDAKKyNkZWZpbmUgUkVJU0VSRlNfM182IDEKKworZW51bSByZWlzZXJmc19tb3VudF9vcHRpb25zIHsKKy8qIE1vdW50IG9wdGlvbnMgKi8KKyAgICBSRUlTRVJGU19MQVJHRVRBSUwsICAvKiBsYXJnZSB0YWlscyB3aWxsIGJlIGNyZWF0ZWQgaW4gYSBzZXNzaW9uICovCisgICAgUkVJU0VSRlNfU01BTExUQUlMLCAgLyogc21hbGwgKGZvciBmaWxlcyBsZXNzIHRoYW4gYmxvY2sgc2l6ZSkgdGFpbHMgd2lsbCBiZSBjcmVhdGVkIGluIGEgc2Vzc2lvbiAqLworICAgIFJFUExBWU9OTFksIC8qIHJlcGxheSBqb3VybmFsIGFuZCByZXR1cm4gMC4gVXNlIGJ5IGZzY2sgKi8KKyAgICBSRUlTRVJGU19DT05WRVJULCAgICAvKiAtbyBjb252OiBjYXVzZXMgY29udmVyc2lvbiBvZiBvbGQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCBzdXBlciBibG9jayB0byB0aGUgbmV3CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQuIElmIG5vdCBzcGVjaWZpZWQgLSBvbGQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpdGlvbiB3aWxsIGJlIGRlYWx0IHdpdGggaW4gYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFubmVyIG9mIDMuNS54ICovCisKKy8qIC1vIGhhc2g9e3RlYSwgcnVwYXNvdiwgcjUsIGRldGVjdH0gaXMgbWVhbnQgZm9yIHByb3Blcmx5IG1vdW50aW5nIAorKiogcmVpc2VyZnMgZGlza3MgZnJvbSAzLjUuMTkgb3IgZWFybGllci4gIDk5JSBvZiB0aGUgdGltZSwgdGhpcyBvcHRpb24KKyoqIGlzIG5vdCByZXF1aXJlZC4gIElmIHRoZSBub3JtYWwgYXV0b2RlY3Rpb24gY29kZSBjYW4ndCBkZXRlcm1pbmUgd2hpY2gKKyoqIGhhc2ggdG8gdXNlIChiZWNhdXNlIGJvdGggaGFzZXMgaGFkIHRoZSBzYW1lIHZhbHVlIGZvciBhIGZpbGUpCisqKiB1c2UgdGhpcyBvcHRpb24gdG8gZm9yY2UgYSBzcGVjaWZpYyBoYXNoLiAgSXQgd29uJ3QgYWxsb3cgeW91IHRvIG92ZXJyaWRlCisqKiB0aGUgZXhpc3RpbmcgaGFzaCBvbiB0aGUgRlMsIHNvIGlmIHlvdSBoYXZlIGEgdGVhIGhhc2ggZGlzaywgYW5kIG1vdW50CisqKiB3aXRoIC1vIGhhc2g9cnVwYXNvdiwgdGhlIG1vdW50IHdpbGwgZmFpbC4KKyovCisgICAgRk9SQ0VfVEVBX0hBU0gsICAgICAgLyogdHJ5IHRvIGZvcmNlIHRlYSBoYXNoIG9uIG1vdW50ICovCisgICAgRk9SQ0VfUlVQQVNPVl9IQVNILCAgLyogdHJ5IHRvIGZvcmNlIHJ1cGFzb3YgaGFzaCBvbiBtb3VudCAqLworICAgIEZPUkNFX1I1X0hBU0gsICAgICAgIC8qIHRyeSB0byBmb3JjZSBydXBhc292IGhhc2ggb24gbW91bnQgKi8KKyAgICBGT1JDRV9IQVNIX0RFVEVDVCwgICAvKiB0cnkgdG8gZGV0ZWN0IGhhc2ggZnVuY3Rpb24gb24gbW91bnQgKi8KKworICAgIFJFSVNFUkZTX0RBVEFfTE9HLAorICAgIFJFSVNFUkZTX0RBVEFfT1JERVJFRCwKKyAgICBSRUlTRVJGU19EQVRBX1dSSVRFQkFDSywKKworLyogdXNlZCBmb3IgdGVzdGluZyBleHBlcmltZW50YWwgZmVhdHVyZXMsIG1ha2VzIGJlbmNobWFya2luZyBuZXcKKyAgIGZlYXR1cmVzIHdpdGggYW5kIHdpdGhvdXQgbW9yZSBjb252ZW5pZW50LCBzaG91bGQgbmV2ZXIgYmUgdXNlZCBieQorICAgdXNlcnMgaW4gYW55IGNvZGUgc2hpcHBlZCB0byB1c2VycyAoaWRlYWxseSkgKi8KKworICAgIFJFSVNFUkZTX05PX0JPUkRFUiwKKyAgICBSRUlTRVJGU19OT19VTkhBU0hFRF9SRUxPQ0FUSU9OLAorICAgIFJFSVNFUkZTX0hBU0hFRF9SRUxPQ0FUSU9OLAorICAgIFJFSVNFUkZTX0FUVFJTLAorICAgIFJFSVNFUkZTX1hBVFRSUywKKyAgICBSRUlTRVJGU19YQVRUUlNfVVNFUiwKKyAgICBSRUlTRVJGU19QT1NJWEFDTCwKKyAgICBSRUlTRVJGU19CQVJSSUVSX05PTkUsCisgICAgUkVJU0VSRlNfQkFSUklFUl9GTFVTSCwKKworICAgIC8qIEFjdGlvbnMgb24gZXJyb3IgKi8KKyAgICBSRUlTRVJGU19FUlJPUl9QQU5JQywKKyAgICBSRUlTRVJGU19FUlJPUl9STywKKyAgICBSRUlTRVJGU19FUlJPUl9DT05USU5VRSwKKworICAgIFJFSVNFUkZTX1RFU1QxLAorICAgIFJFSVNFUkZTX1RFU1QyLAorICAgIFJFSVNFUkZTX1RFU1QzLAorICAgIFJFSVNFUkZTX1RFU1Q0LAorICAgIFJFSVNFUkZTX1VOU1VQUE9SVEVEX09QVCwKK307CisKKyNkZWZpbmUgcmVpc2VyZnNfcjVfaGFzaChzKSAoUkVJU0VSRlNfU0IocyktPnNfbW91bnRfb3B0ICYgKDEgPDwgRk9SQ0VfUjVfSEFTSCkpCisjZGVmaW5lIHJlaXNlcmZzX3J1cGFzb3ZfaGFzaChzKSAoUkVJU0VSRlNfU0IocyktPnNfbW91bnRfb3B0ICYgKDEgPDwgRk9SQ0VfUlVQQVNPVl9IQVNIKSkKKyNkZWZpbmUgcmVpc2VyZnNfdGVhX2hhc2gocykgKFJFSVNFUkZTX1NCKHMpLT5zX21vdW50X29wdCAmICgxIDw8IEZPUkNFX1RFQV9IQVNIKSkKKyNkZWZpbmUgcmVpc2VyZnNfaGFzaF9kZXRlY3QocykgKFJFSVNFUkZTX1NCKHMpLT5zX21vdW50X29wdCAmICgxIDw8IEZPUkNFX0hBU0hfREVURUNUKSkKKyNkZWZpbmUgcmVpc2VyZnNfbm9fYm9yZGVyKHMpIChSRUlTRVJGU19TQihzKS0+c19tb3VudF9vcHQgJiAoMSA8PCBSRUlTRVJGU19OT19CT1JERVIpKQorI2RlZmluZSByZWlzZXJmc19ub191bmhhc2hlZF9yZWxvY2F0aW9uKHMpIChSRUlTRVJGU19TQihzKS0+c19tb3VudF9vcHQgJiAoMSA8PCBSRUlTRVJGU19OT19VTkhBU0hFRF9SRUxPQ0FUSU9OKSkKKyNkZWZpbmUgcmVpc2VyZnNfaGFzaGVkX3JlbG9jYXRpb24ocykgKFJFSVNFUkZTX1NCKHMpLT5zX21vdW50X29wdCAmICgxIDw8IFJFSVNFUkZTX0hBU0hFRF9SRUxPQ0FUSU9OKSkKKyNkZWZpbmUgcmVpc2VyZnNfdGVzdDQocykgKFJFSVNFUkZTX1NCKHMpLT5zX21vdW50X29wdCAmICgxIDw8IFJFSVNFUkZTX1RFU1Q0KSkKKworI2RlZmluZSBoYXZlX2xhcmdlX3RhaWxzKHMpIChSRUlTRVJGU19TQihzKS0+c19tb3VudF9vcHQgJiAoMSA8PCBSRUlTRVJGU19MQVJHRVRBSUwpKQorI2RlZmluZSBoYXZlX3NtYWxsX3RhaWxzKHMpIChSRUlTRVJGU19TQihzKS0+c19tb3VudF9vcHQgJiAoMSA8PCBSRUlTRVJGU19TTUFMTFRBSUwpKQorI2RlZmluZSByZXBsYXlfb25seShzKSAoUkVJU0VSRlNfU0IocyktPnNfbW91bnRfb3B0ICYgKDEgPDwgUkVQTEFZT05MWSkpCisjZGVmaW5lIHJlaXNlcmZzX2F0dHJzKHMpIChSRUlTRVJGU19TQihzKS0+c19tb3VudF9vcHQgJiAoMSA8PCBSRUlTRVJGU19BVFRSUykpCisjZGVmaW5lIG9sZF9mb3JtYXRfb25seShzKSAoUkVJU0VSRlNfU0IocyktPnNfcHJvcGVydGllcyAmICgxIDw8IFJFSVNFUkZTXzNfNSkpCisjZGVmaW5lIGNvbnZlcnRfcmVpc2VyZnMocykgKFJFSVNFUkZTX1NCKHMpLT5zX21vdW50X29wdCAmICgxIDw8IFJFSVNFUkZTX0NPTlZFUlQpKQorI2RlZmluZSByZWlzZXJmc19kYXRhX2xvZyhzKSAoUkVJU0VSRlNfU0IocyktPnNfbW91bnRfb3B0ICYgKDEgPDwgUkVJU0VSRlNfREFUQV9MT0cpKQorI2RlZmluZSByZWlzZXJmc19kYXRhX29yZGVyZWQocykgKFJFSVNFUkZTX1NCKHMpLT5zX21vdW50X29wdCAmICgxIDw8IFJFSVNFUkZTX0RBVEFfT1JERVJFRCkpCisjZGVmaW5lIHJlaXNlcmZzX2RhdGFfd3JpdGViYWNrKHMpIChSRUlTRVJGU19TQihzKS0+c19tb3VudF9vcHQgJiAoMSA8PCBSRUlTRVJGU19EQVRBX1dSSVRFQkFDSykpCisjZGVmaW5lIHJlaXNlcmZzX3hhdHRycyhzKSAoUkVJU0VSRlNfU0IocyktPnNfbW91bnRfb3B0ICYgKDEgPDwgUkVJU0VSRlNfWEFUVFJTKSkKKyNkZWZpbmUgcmVpc2VyZnNfeGF0dHJzX3VzZXIocykgKFJFSVNFUkZTX1NCKHMpLT5zX21vdW50X29wdCAmICgxIDw8IFJFSVNFUkZTX1hBVFRSU19VU0VSKSkKKyNkZWZpbmUgcmVpc2VyZnNfcG9zaXhhY2wocykgKFJFSVNFUkZTX1NCKHMpLT5zX21vdW50X29wdCAmICgxIDw8IFJFSVNFUkZTX1BPU0lYQUNMKSkKKyNkZWZpbmUgcmVpc2VyZnNfeGF0dHJzX29wdGlvbmFsKHMpIChyZWlzZXJmc194YXR0cnNfdXNlcihzKSB8fCByZWlzZXJmc19wb3NpeGFjbChzKSkKKyNkZWZpbmUgcmVpc2VyZnNfYmFycmllcl9ub25lKHMpIChSRUlTRVJGU19TQihzKS0+c19tb3VudF9vcHQgJiAoMSA8PCBSRUlTRVJGU19CQVJSSUVSX05PTkUpKQorI2RlZmluZSByZWlzZXJmc19iYXJyaWVyX2ZsdXNoKHMpIChSRUlTRVJGU19TQihzKS0+c19tb3VudF9vcHQgJiAoMSA8PCBSRUlTRVJGU19CQVJSSUVSX0ZMVVNIKSkKKworI2RlZmluZSByZWlzZXJmc19lcnJvcl9wYW5pYyhzKSAoUkVJU0VSRlNfU0IocyktPnNfbW91bnRfb3B0ICYgKDEgPDwgUkVJU0VSRlNfRVJST1JfUEFOSUMpKQorI2RlZmluZSByZWlzZXJmc19lcnJvcl9ybyhzKSAoUkVJU0VSRlNfU0IocyktPnNfbW91bnRfb3B0ICYgKDEgPDwgUkVJU0VSRlNfRVJST1JfUk8pKQorCit2b2lkIHJlaXNlcmZzX2ZpbGVfYnVmZmVyIChzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBiaCwgaW50IGxpc3QpOworZXh0ZXJuIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIHJlaXNlcmZzX2ZzX3R5cGU7CitpbnQgcmVpc2VyZnNfcmVzaXplKHN0cnVjdCBzdXBlcl9ibG9jayAqLCB1bnNpZ25lZCBsb25nKSA7CisKKyNkZWZpbmUgQ0FSUllfT04gICAgICAgICAgICAgICAgMAorI2RlZmluZSBTQ0hFRFVMRV9PQ0NVUlJFRCAgICAgICAxCisKKworI2RlZmluZSBTQl9CVUZGRVJfV0lUSF9TQihzKSAoUkVJU0VSRlNfU0IocyktPnNfc2JoKQorI2RlZmluZSBTQl9KT1VSTkFMKHMpIChSRUlTRVJGU19TQihzKS0+c19qb3VybmFsKQorI2RlZmluZSBTQl9KT1VSTkFMXzFzdF9SRVNFUlZFRF9CTE9DSyhzKSAoU0JfSk9VUk5BTChzKS0+al8xc3RfcmVzZXJ2ZWRfYmxvY2spCisjZGVmaW5lIFNCX0pPVVJOQUxfTEVOX0ZSRUUocykgKFNCX0pPVVJOQUwocyktPmpfam91cm5hbF9sZW5fZnJlZSkgCisjZGVmaW5lIFNCX0FQX0JJVE1BUChzKSAoUkVJU0VSRlNfU0IocyktPnNfYXBfYml0bWFwKQorCisjZGVmaW5lIFNCX0RJU0tfSk9VUk5BTF9IRUFEKHMpIChTQl9KT1VSTkFMKHMpLT5qX2hlYWRlcl9iaC0+KQorCisvKiBBIHNhZmUgdmVyc2lvbiBvZiB0aGUgImJkZXZuYW1lIiwgd2hpY2ggcmV0dXJucyB0aGUgInNfaWQiIGZpZWxkIG9mCisgKiBhIHN1cGVyYmxvY2sgb3IgZWxzZSAiTnVsbCBzdXBlcmJsb2NrIiBpZiB0aGUgc3VwZXIgYmxvY2sgaXMgTlVMTC4KKyAqLworc3RhdGljIGlubGluZSBjaGFyICpyZWlzZXJmc19iZGV2bmFtZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMpCit7CisgICAgICAgIHJldHVybiAocyA9PSBOVUxMKSA/ICJOdWxsIHN1cGVyYmxvY2siIDogcyAtPiBzX2lkOworfQorCisjZGVmaW5lIHJlaXNlcmZzX2lzX2pvdXJuYWxfYWJvcnRlZChqb3VybmFsKSAodW5saWtlbHkgKF9fcmVpc2VyZnNfaXNfam91cm5hbF9hYm9ydGVkIChqb3VybmFsKSkpCitzdGF0aWMgaW5saW5lIGludCBfX3JlaXNlcmZzX2lzX2pvdXJuYWxfYWJvcnRlZCAoc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwpCit7CisgICAgcmV0dXJuIHRlc3RfYml0IChKX0FCT1JURUQsICZqb3VybmFsLT5qX3N0YXRlKTsKK30KKworI2VuZGlmCS8qIF9MSU5VWF9SRUlTRVJfRlNfU0IgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfeGF0dHIuaCBiL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfeGF0dHIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWFhNDhlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9yZWlzZXJmc194YXR0ci5oCkBAIC0wLDAgKzEsMTM5IEBACisvKgorICBGaWxlOiBsaW51eC9yZWlzZXJmc194YXR0ci5oCisqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3hhdHRyLmg+CisKKy8qIE1hZ2ljIHZhbHVlIGluIGhlYWRlciAqLworI2RlZmluZSBSRUlTRVJGU19YQVRUUl9NQUdJQyAweDUyNDY1ODQxIC8qICJSRlhBIiAqLworCitzdHJ1Y3QgcmVpc2VyZnNfeGF0dHJfaGVhZGVyIHsKKyAgICBfX3UzMiBoX21hZ2ljOyAgICAgICAgICAgICAgLyogbWFnaWMgbnVtYmVyIGZvciBpZGVudGlmaWNhdGlvbiAqLworICAgIF9fdTMyIGhfaGFzaDsgICAgICAgICAgICAgICAvKiBoYXNoIG9mIHRoZSB2YWx1ZSAqLworfTsKKworI2lmZGVmIF9fS0VSTkVMX18KKworc3RydWN0IHJlaXNlcmZzX3hhdHRyX2hhbmRsZXIgeworCWNoYXIgKnByZWZpeDsKKyAgICAgICAgaW50ICgqaW5pdCkodm9pZCk7CisgICAgICAgIHZvaWQgKCpleGl0KSh2b2lkKTsKKwlpbnQgKCpnZXQpKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmJ1ZmZlciwKKwkJICAgc2l6ZV90IHNpemUpOworCWludCAoKnNldCkoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqYnVmZmVyLAorCQkgICBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKTsKKwlpbnQgKCpkZWwpKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUpOworICAgICAgICBpbnQgKCpsaXN0KShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwgY2hhciAqb3V0KTsKKyAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBoYW5kbGVyczsKK307CisKKworI2lmZGVmIENPTkZJR19SRUlTRVJGU19GU19YQVRUUgorI2RlZmluZSBpc19yZWlzZXJmc19wcml2X29iamVjdChpbm9kZSkgSVNfUFJJVkFURShpbm9kZSkKKyNkZWZpbmUgaGFzX3hhdHRyX2Rpcihpbm9kZSkgKFJFSVNFUkZTX0koaW5vZGUpLT5pX2ZsYWdzICYgaV9oYXNfeGF0dHJfZGlyKQorc3NpemVfdCByZWlzZXJmc19nZXR4YXR0ciAoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lLAorCQkJICAgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSk7CitpbnQgcmVpc2VyZnNfc2V0eGF0dHIgKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpOworc3NpemVfdCByZWlzZXJmc19saXN0eGF0dHIgKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSk7CitpbnQgcmVpc2VyZnNfcmVtb3ZleGF0dHIgKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSk7CitpbnQgcmVpc2VyZnNfZGVsZXRlX3hhdHRycyAoc3RydWN0IGlub2RlICppbm9kZSk7CitpbnQgcmVpc2VyZnNfY2hvd25feGF0dHJzIChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaWF0dHIgKmF0dHJzKTsKK2ludCByZWlzZXJmc194YXR0cl9pbml0IChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgbW91bnRfZmxhZ3MpOworaW50IHJlaXNlcmZzX3Blcm1pc3Npb24gKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCk7CitpbnQgcmVpc2VyZnNfcGVybWlzc2lvbl9sb2NrZWQgKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCk7CisKK2ludCByZWlzZXJmc194YXR0cl9kZWwgKHN0cnVjdCBpbm9kZSAqLCBjb25zdCBjaGFyICopOworaW50IHJlaXNlcmZzX3hhdHRyX2dldCAoY29uc3Qgc3RydWN0IGlub2RlICosIGNvbnN0IGNoYXIgKiwgdm9pZCAqLCBzaXplX3QpOworaW50IHJlaXNlcmZzX3hhdHRyX3NldCAoc3RydWN0IGlub2RlICosIGNvbnN0IGNoYXIgKiwgY29uc3Qgdm9pZCAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCwgaW50KTsKKworZXh0ZXJuIHN0cnVjdCByZWlzZXJmc194YXR0cl9oYW5kbGVyIHVzZXJfaGFuZGxlcjsKK2V4dGVybiBzdHJ1Y3QgcmVpc2VyZnNfeGF0dHJfaGFuZGxlciB0cnVzdGVkX2hhbmRsZXI7CisjaWZkZWYgQ09ORklHX1JFSVNFUkZTX0ZTX1NFQ1VSSVRZCitleHRlcm4gc3RydWN0IHJlaXNlcmZzX3hhdHRyX2hhbmRsZXIgc2VjdXJpdHlfaGFuZGxlcjsKKyNlbmRpZgorCitpbnQgcmVpc2VyZnNfeGF0dHJfcmVnaXN0ZXJfaGFuZGxlcnMgKHZvaWQpIF9faW5pdDsKK3ZvaWQgcmVpc2VyZnNfeGF0dHJfdW5yZWdpc3Rlcl9oYW5kbGVycyAodm9pZCk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcmVpc2VyZnNfd3JpdGVfbG9ja194YXR0cnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKyAgICBkb3duX3dyaXRlICgmUkVJU0VSRlNfWEFUVFJfRElSX1NFTShzYikpOworfQorc3RhdGljIGlubGluZSB2b2lkCityZWlzZXJmc193cml0ZV91bmxvY2tfeGF0dHJzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisgICAgdXBfd3JpdGUgKCZSRUlTRVJGU19YQVRUUl9ESVJfU0VNKHNiKSk7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQKK3JlaXNlcmZzX3JlYWRfbG9ja194YXR0cnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKyAgICBkb3duX3JlYWQgKCZSRUlTRVJGU19YQVRUUl9ESVJfU0VNKHNiKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcmVpc2VyZnNfcmVhZF91bmxvY2tfeGF0dHJzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisgICAgdXBfcmVhZCAoJlJFSVNFUkZTX1hBVFRSX0RJUl9TRU0oc2IpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCityZWlzZXJmc193cml0ZV9sb2NrX3hhdHRyX2koc3RydWN0IGlub2RlICppbm9kZSkKK3sKKyAgICBkb3duX3dyaXRlICgmUkVJU0VSRlNfSShpbm9kZSktPnhhdHRyX3NlbSk7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQKK3JlaXNlcmZzX3dyaXRlX3VubG9ja194YXR0cl9pKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisgICAgdXBfd3JpdGUgKCZSRUlTRVJGU19JKGlub2RlKS0+eGF0dHJfc2VtKTsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZAorcmVpc2VyZnNfcmVhZF9sb2NrX3hhdHRyX2koc3RydWN0IGlub2RlICppbm9kZSkKK3sKKyAgICBkb3duX3JlYWQgKCZSRUlTRVJGU19JKGlub2RlKS0+eGF0dHJfc2VtKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCityZWlzZXJmc19yZWFkX3VubG9ja194YXR0cl9pKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisgICAgdXBfcmVhZCAoJlJFSVNFUkZTX0koaW5vZGUpLT54YXR0cl9zZW0pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3JlaXNlcmZzX21hcmtfaW5vZGVfcHJpdmF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworICAgIGlub2RlLT5pX2ZsYWdzIHw9IFNfUFJJVkFURTsKK30KKworI2Vsc2UKKworI2RlZmluZSBpc19yZWlzZXJmc19wcml2X29iamVjdChpbm9kZSkgMAorI2RlZmluZSByZWlzZXJmc19tYXJrX2lub2RlX3ByaXZhdGUoaW5vZGUpCisjZGVmaW5lIHJlaXNlcmZzX2dldHhhdHRyIE5VTEwKKyNkZWZpbmUgcmVpc2VyZnNfc2V0eGF0dHIgTlVMTAorI2RlZmluZSByZWlzZXJmc19saXN0eGF0dHIgTlVMTAorI2RlZmluZSByZWlzZXJmc19yZW1vdmV4YXR0ciBOVUxMCisjZGVmaW5lIHJlaXNlcmZzX3dyaXRlX2xvY2tfeGF0dHJzKHNiKQorI2RlZmluZSByZWlzZXJmc193cml0ZV91bmxvY2tfeGF0dHJzKHNiKQorI2RlZmluZSByZWlzZXJmc19yZWFkX2xvY2tfeGF0dHJzKHNiKQorI2RlZmluZSByZWlzZXJmc19yZWFkX3VubG9ja194YXR0cnMoc2IpCisKKyNkZWZpbmUgcmVpc2VyZnNfcGVybWlzc2lvbiBOVUxMCisKKyNkZWZpbmUgcmVpc2VyZnNfeGF0dHJfcmVnaXN0ZXJfaGFuZGxlcnMoKSAwCisjZGVmaW5lIHJlaXNlcmZzX3hhdHRyX3VucmVnaXN0ZXJfaGFuZGxlcnMoKQorCitzdGF0aWMgaW5saW5lIGludCByZWlzZXJmc19kZWxldGVfeGF0dHJzIChzdHJ1Y3QgaW5vZGUgKmlub2RlKSB7IHJldHVybiAwOyB9Oworc3RhdGljIGlubGluZSBpbnQgcmVpc2VyZnNfY2hvd25feGF0dHJzIChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaWF0dHIgKmF0dHJzKSB7IHJldHVybiAwOyB9Oworc3RhdGljIGlubGluZSBpbnQgcmVpc2VyZnNfeGF0dHJfaW5pdCAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IG1vdW50X2ZsYWdzKQoreworICAgIHNiLT5zX2ZsYWdzID0gKHNiLT5zX2ZsYWdzICYgfk1TX1BPU0lYQUNMKTsgLyogdG8gYmUgc3VyZSAqLworICAgIHJldHVybiAwOworfTsKKyNlbmRpZgorCisjZW5kaWYgIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmVzb3VyY2UuaCBiL2luY2x1ZGUvbGludXgvcmVzb3VyY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWE4NmNiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9yZXNvdXJjZS5oCkBAIC0wLDAgKzEsNzAgQEAKKyNpZm5kZWYgX0xJTlVYX1JFU09VUkNFX0gKKyNkZWZpbmUgX0xJTlVYX1JFU09VUkNFX0gKKworI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKworLyoKKyAqIFJlc291cmNlIGNvbnRyb2wvYWNjb3VudGluZyBoZWFkZXIgZmlsZSBmb3IgbGludXgKKyAqLworCisvKgorICogRGVmaW5pdGlvbiBvZiBzdHJ1Y3QgcnVzYWdlIHRha2VuIGZyb20gQlNEIDQuMyBSZW5vCisgKiAKKyAqIFdlIGRvbid0IHN1cHBvcnQgYWxsIG9mIHRoZXNlIHlldCwgYnV0IHdlIG1pZ2h0IGFzIHdlbGwgaGF2ZSB0aGVtLi4uLgorICogT3RoZXJ3aXNlLCBlYWNoIHRpbWUgd2UgYWRkIG5ldyBpdGVtcywgcHJvZ3JhbXMgd2hpY2ggZGVwZW5kIG9uIHRoaXMKKyAqIHN0cnVjdHVyZSB3aWxsIGxvc2UuICBUaGlzIHJlZHVjZXMgdGhlIGNoYW5jZXMgb2YgdGhhdCBoYXBwZW5pbmcuCisgKi8KKyNkZWZpbmUJUlVTQUdFX1NFTEYJMAorI2RlZmluZQlSVVNBR0VfQ0hJTERSRU4JKC0xKQorI2RlZmluZSBSVVNBR0VfQk9USAkoLTIpCQkvKiBzeXNfd2FpdDQoKSB1c2VzIHRoaXMgKi8KKworc3RydWN0CXJ1c2FnZSB7CisJc3RydWN0IHRpbWV2YWwgcnVfdXRpbWU7CS8qIHVzZXIgdGltZSB1c2VkICovCisJc3RydWN0IHRpbWV2YWwgcnVfc3RpbWU7CS8qIHN5c3RlbSB0aW1lIHVzZWQgKi8KKwlsb25nCXJ1X21heHJzczsJCS8qIG1heGltdW0gcmVzaWRlbnQgc2V0IHNpemUgKi8KKwlsb25nCXJ1X2l4cnNzOwkJLyogaW50ZWdyYWwgc2hhcmVkIG1lbW9yeSBzaXplICovCisJbG9uZwlydV9pZHJzczsJCS8qIGludGVncmFsIHVuc2hhcmVkIGRhdGEgc2l6ZSAqLworCWxvbmcJcnVfaXNyc3M7CQkvKiBpbnRlZ3JhbCB1bnNoYXJlZCBzdGFjayBzaXplICovCisJbG9uZwlydV9taW5mbHQ7CQkvKiBwYWdlIHJlY2xhaW1zICovCisJbG9uZwlydV9tYWpmbHQ7CQkvKiBwYWdlIGZhdWx0cyAqLworCWxvbmcJcnVfbnN3YXA7CQkvKiBzd2FwcyAqLworCWxvbmcJcnVfaW5ibG9jazsJCS8qIGJsb2NrIGlucHV0IG9wZXJhdGlvbnMgKi8KKwlsb25nCXJ1X291YmxvY2s7CQkvKiBibG9jayBvdXRwdXQgb3BlcmF0aW9ucyAqLworCWxvbmcJcnVfbXNnc25kOwkJLyogbWVzc2FnZXMgc2VudCAqLworCWxvbmcJcnVfbXNncmN2OwkJLyogbWVzc2FnZXMgcmVjZWl2ZWQgKi8KKwlsb25nCXJ1X25zaWduYWxzOwkJLyogc2lnbmFscyByZWNlaXZlZCAqLworCWxvbmcJcnVfbnZjc3c7CQkvKiB2b2x1bnRhcnkgY29udGV4dCBzd2l0Y2hlcyAqLworCWxvbmcJcnVfbml2Y3N3OwkJLyogaW52b2x1bnRhcnkgIiAqLworfTsKKworc3RydWN0IHJsaW1pdCB7CisJdW5zaWduZWQgbG9uZwlybGltX2N1cjsKKwl1bnNpZ25lZCBsb25nCXJsaW1fbWF4OworfTsKKworI2RlZmluZQlQUklPX01JTgkoLTIwKQorI2RlZmluZQlQUklPX01BWAkyMAorCisjZGVmaW5lCVBSSU9fUFJPQ0VTUwkwCisjZGVmaW5lCVBSSU9fUEdSUAkxCisjZGVmaW5lCVBSSU9fVVNFUgkyCisKKy8qCisgKiBMaW1pdCB0aGUgc3RhY2sgYnkgdG8gc29tZSBzYW5lIGRlZmF1bHQ6IHJvb3QgY2FuIGFsd2F5cworICogaW5jcmVhc2UgdGhpcyBsaW1pdCBpZiBuZWVkZWQuLiAgOE1CIHNlZW1zIHJlYXNvbmFibGUuCisgKi8KKyNkZWZpbmUgX1NUS19MSU0JKDgqMTAyNCoxMDI0KQorCisvKgorICogR1BHIHdhbnRzIDMya0Igb2YgbWxvY2tlZCBtZW1vcnksIHRvIG1ha2Ugc3VyZSBwYXNzIHBocmFzZXMKKyAqIGFuZCBvdGhlciBzZW5zaXRpdmUgaW5mb3JtYXRpb24gYXJlIG5ldmVyIHdyaXR0ZW4gdG8gZGlzay4KKyAqLworI2RlZmluZSBNTE9DS19MSU1JVAkoOCAqIFBBR0VfU0laRSkKKworLyoKKyAqIER1ZSB0byBiaW5hcnkgY29tcGF0aWJpbGl0eSwgdGhlIGFjdHVhbCByZXNvdXJjZSBudW1iZXJzCisgKiBtYXkgYmUgZGlmZmVyZW50IGZvciBkaWZmZXJlbnQgbGludXggdmVyc2lvbnMuLgorICovCisjaW5jbHVkZSA8YXNtL3Jlc291cmNlLmg+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ybWFwLmggYi9pbmNsdWRlL2xpbnV4L3JtYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWI0ODRlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9ybWFwLmgKQEAgLTAsMCArMSwxMTggQEAKKyNpZm5kZWYgX0xJTlVYX1JNQVBfSAorI2RlZmluZSBfTElOVVhfUk1BUF9ICisvKgorICogRGVjbGFyYXRpb25zIGZvciBSZXZlcnNlIE1hcHBpbmcgZnVuY3Rpb25zIGluIG1tL3JtYXAuYworICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKworLyoKKyAqIFRoZSBhbm9uX3ZtYSBoZWFkcyBhIGxpc3Qgb2YgcHJpdmF0ZSAicmVsYXRlZCIgdm1hcywgdG8gc2NhbiBpZgorICogYW4gYW5vbnltb3VzIHBhZ2UgcG9pbnRpbmcgdG8gdGhpcyBhbm9uX3ZtYSBuZWVkcyB0byBiZSB1bm1hcHBlZDoKKyAqIHRoZSB2bWFzIG9uIHRoZSBsaXN0IHdpbGwgYmUgcmVsYXRlZCBieSBmb3JraW5nLCBvciBieSBzcGxpdHRpbmcuCisgKgorICogU2luY2Ugdm1hcyBjb21lIGFuZCBnbyBhcyB0aGV5IGFyZSBzcGxpdCBhbmQgbWVyZ2VkIChwYXJ0aWN1bGFybHkKKyAqIGluIG1wcm90ZWN0KSwgdGhlIG1hcHBpbmcgZmllbGQgb2YgYW4gYW5vbnltb3VzIHBhZ2UgY2Fubm90IHBvaW50CisgKiBkaXJlY3RseSB0byBhIHZtYTogaW5zdGVhZCBpdCBwb2ludHMgdG8gYW4gYW5vbl92bWEsIG9uIHdob3NlIGxpc3QKKyAqIHRoZSByZWxhdGVkIHZtYXMgY2FuIGJlIGVhc2lseSBsaW5rZWQgb3IgdW5saW5rZWQuCisgKgorICogQWZ0ZXIgdW5saW5raW5nIHRoZSBsYXN0IHZtYSBvbiB0aGUgbGlzdCwgd2UgbXVzdCBnYXJiYWdlIGNvbGxlY3QKKyAqIHRoZSBhbm9uX3ZtYSBvYmplY3QgaXRzZWxmOiB3ZSdyZSBndWFyYW50ZWVkIG5vIHBhZ2UgY2FuIGJlCisgKiBwb2ludGluZyB0byB0aGlzIGFub25fdm1hIG9uY2UgaXRzIHZtYSBsaXN0IGlzIGVtcHR5LgorICovCitzdHJ1Y3QgYW5vbl92bWEgeworCXNwaW5sb2NrX3QgbG9jazsJLyogU2VyaWFsaXplIGFjY2VzcyB0byB2bWEgbGlzdCAqLworCXN0cnVjdCBsaXN0X2hlYWQgaGVhZDsJLyogTGlzdCBvZiBwcml2YXRlICJyZWxhdGVkIiB2bWFzICovCit9OworCisjaWZkZWYgQ09ORklHX01NVQorCitleHRlcm4ga21lbV9jYWNoZV90ICphbm9uX3ZtYV9jYWNoZXA7CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGFub25fdm1hICphbm9uX3ZtYV9hbGxvYyh2b2lkKQoreworCXJldHVybiBrbWVtX2NhY2hlX2FsbG9jKGFub25fdm1hX2NhY2hlcCwgU0xBQl9LRVJORUwpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYW5vbl92bWFfZnJlZShzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hKQoreworCWttZW1fY2FjaGVfZnJlZShhbm9uX3ZtYV9jYWNoZXAsIGFub25fdm1hKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFub25fdm1hX2xvY2soc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSA9IHZtYS0+YW5vbl92bWE7CisJaWYgKGFub25fdm1hKQorCQlzcGluX2xvY2soJmFub25fdm1hLT5sb2NrKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFub25fdm1hX3VubG9jayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hID0gdm1hLT5hbm9uX3ZtYTsKKwlpZiAoYW5vbl92bWEpCisJCXNwaW5fdW5sb2NrKCZhbm9uX3ZtYS0+bG9jayk7Cit9CisKKy8qCisgKiBhbm9uX3ZtYSBoZWxwZXIgZnVuY3Rpb25zLgorICovCit2b2lkIGFub25fdm1hX2luaXQodm9pZCk7CS8qIGNyZWF0ZSBhbm9uX3ZtYV9jYWNoZXAgKi8KK2ludCAgYW5vbl92bWFfcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7Cit2b2lkIF9fYW5vbl92bWFfbWVyZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKTsKK3ZvaWQgYW5vbl92bWFfdW5saW5rKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKTsKK3ZvaWQgYW5vbl92bWFfbGluayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7Cit2b2lkIF9fYW5vbl92bWFfbGluayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7CisKKy8qCisgKiBybWFwIGludGVyZmFjZXMgY2FsbGVkIHdoZW4gYWRkaW5nIG9yIHJlbW92aW5nIHB0ZSBvZiBwYWdlCisgKi8KK3ZvaWQgcGFnZV9hZGRfYW5vbl9ybWFwKHN0cnVjdCBwYWdlICosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nKTsKK3ZvaWQgcGFnZV9hZGRfZmlsZV9ybWFwKHN0cnVjdCBwYWdlICopOwordm9pZCBwYWdlX3JlbW92ZV9ybWFwKHN0cnVjdCBwYWdlICopOworCisvKioKKyAqIHBhZ2VfZHVwX3JtYXAgLSBkdXBsaWNhdGUgcHRlIG1hcHBpbmcgdG8gYSBwYWdlCisgKiBAcGFnZToJdGhlIHBhZ2UgdG8gYWRkIHRoZSBtYXBwaW5nIHRvCisgKgorICogRm9yIGNvcHlfcGFnZV9yYW5nZSBvbmx5OiBtaW5pbWFsIGV4dHJhY3QgZnJvbSBwYWdlX2FkZF9ybWFwLAorICogYXZvaWRpbmcgdW5uZWNlc3NhcnkgdGVzdHMgKGFscmVhZHkgY2hlY2tlZCkgc28gaXQncyBxdWlja2VyLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgcGFnZV9kdXBfcm1hcChzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlhdG9taWNfaW5jKCZwYWdlLT5fbWFwY291bnQpOworfQorCisvKgorICogQ2FsbGVkIGZyb20gbW0vdm1zY2FuLmMgdG8gaGFuZGxlIHBhZ2luZyBvdXQKKyAqLworaW50IHBhZ2VfcmVmZXJlbmNlZChzdHJ1Y3QgcGFnZSAqLCBpbnQgaXNfbG9ja2VkLCBpbnQgaWdub3JlX3Rva2VuKTsKK2ludCB0cnlfdG9fdW5tYXAoc3RydWN0IHBhZ2UgKik7CisKKy8qCisgKiBVc2VkIGJ5IHN3YXBvZmYgdG8gaGVscCBsb2NhdGUgd2hlcmUgcGFnZSBpcyBleHBlY3RlZCBpbiB2bWEuCisgKi8KK3Vuc2lnbmVkIGxvbmcgcGFnZV9hZGRyZXNzX2luX3ZtYShzdHJ1Y3QgcGFnZSAqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7CisKKyNlbHNlCS8qICFDT05GSUdfTU1VICovCisKKyNkZWZpbmUgYW5vbl92bWFfaW5pdCgpCQlkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgYW5vbl92bWFfcHJlcGFyZSh2bWEpCSgwKQorI2RlZmluZSBhbm9uX3ZtYV9saW5rKHZtYSkJZG8ge30gd2hpbGUgKDApCisKKyNkZWZpbmUgcGFnZV9yZWZlcmVuY2VkKHBhZ2UsbCxpKSBUZXN0Q2xlYXJQYWdlUmVmZXJlbmNlZChwYWdlKQorI2RlZmluZSB0cnlfdG9fdW5tYXAocGFnZSkJU1dBUF9GQUlMCisKKyNlbmRpZgkvKiBDT05GSUdfTU1VICovCisKKy8qCisgKiBSZXR1cm4gdmFsdWVzIG9mIHRyeV90b191bm1hcAorICovCisjZGVmaW5lIFNXQVBfU1VDQ0VTUwkwCisjZGVmaW5lIFNXQVBfQUdBSU4JMQorI2RlZmluZSBTV0FQX0ZBSUwJMgorCisjZW5kaWYJLyogX0xJTlVYX1JNQVBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yb21mc19mcy5oIGIvaW5jbHVkZS9saW51eC9yb21mc19mcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyMGJiZjkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3JvbWZzX2ZzLmgKQEAgLTAsMCArMSw2MSBAQAorI2lmbmRlZiBfX0xJTlVYX1JPTUZTX0ZTX0gKKyNkZWZpbmUgX19MSU5VWF9ST01GU19GU19ICisKKy8qIFRoZSBiYXNpYyBzdHJ1Y3R1cmVzIG9mIHRoZSByb21mcyBmaWxlc3lzdGVtICovCisKKyNkZWZpbmUgUk9NQlNJWkUgQkxPQ0tfU0laRQorI2RlZmluZSBST01CU0JJVFMgQkxPQ0tfU0laRV9CSVRTCisjZGVmaW5lIFJPTUJNQVNLIChST01CU0laRS0xKQorI2RlZmluZSBST01GU19NQUdJQyAweDcyNzUKKworI2RlZmluZSBST01GU19NQVhGTiAxMjgKKworI2RlZmluZSBfX21rdyhoLGwpICgoKGgpJjB4MDBmZik8PCA4fCgobCkmMHgwMGZmKSkKKyNkZWZpbmUgX19ta2woaCxsKSAoKChoKSYweGZmZmYpPDwxNnwoKGwpJjB4ZmZmZikpCisjZGVmaW5lIF9fbWs0KGEsYixjLGQpIGNwdV90b19iZTMyKF9fbWtsKF9fbWt3KGEsYiksX19ta3coYyxkKSkpCisjZGVmaW5lIFJPTVNCX1dPUkQwIF9fbWs0KCctJywncicsJ28nLCdtJykKKyNkZWZpbmUgUk9NU0JfV09SRDEgX19tazQoJzEnLCdmJywncycsJy0nKQorCisvKiBPbi1kaXNrICJzdXBlciBibG9jayIgKi8KKworc3RydWN0IHJvbWZzX3N1cGVyX2Jsb2NrIHsKKwlfX2JlMzIgd29yZDA7CisJX19iZTMyIHdvcmQxOworCV9fYmUzMiBzaXplOworCV9fYmUzMiBjaGVja3N1bTsKKwljaGFyIG5hbWVbMF07CQkvKiB2b2x1bWUgbmFtZSAqLworfTsKKworLyogT24gZGlzayBpbm9kZSAqLworCitzdHJ1Y3Qgcm9tZnNfaW5vZGUgeworCV9fYmUzMiBuZXh0OwkJLyogbG93IDQgYml0cyBzZWUgUk9NRkhfICovCisJX19iZTMyIHNwZWM7CisJX19iZTMyIHNpemU7CisJX19iZTMyIGNoZWNrc3VtOworCWNoYXIgbmFtZVswXTsKK307CisKKyNkZWZpbmUgUk9NRkhfVFlQRSA3CisjZGVmaW5lIFJPTUZIX0hSRCAwCisjZGVmaW5lIFJPTUZIX0RJUiAxCisjZGVmaW5lIFJPTUZIX1JFRyAyCisjZGVmaW5lIFJPTUZIX1NZTSAzCisjZGVmaW5lIFJPTUZIX0JMSyA0CisjZGVmaW5lIFJPTUZIX0NIUiA1CisjZGVmaW5lIFJPTUZIX1NDSyA2CisjZGVmaW5lIFJPTUZIX0ZJRiA3CisjZGVmaW5lIFJPTUZIX0VYRUMgOAorCisvKiBBbGlnbm1lbnQgKi8KKworI2RlZmluZSBST01GSF9TSVpFIDE2CisjZGVmaW5lIFJPTUZIX1BBRCAoUk9NRkhfU0laRS0xKQorI2RlZmluZSBST01GSF9NQVNLICh+Uk9NRkhfUEFEKQorCisjaWZkZWYgX19LRVJORUxfXworCisvKiBOb3QgbXVjaCBub3cgKi8KKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yb290X2Rldi5oIGIvaW5jbHVkZS9saW51eC9yb290X2Rldi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNGJjOWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3Jvb3RfZGV2LmgKQEAgLTAsMCArMSwyMSBAQAorI2lmbmRlZiBfUk9PVF9ERVZfSF8KKyNkZWZpbmUgX1JPT1RfREVWX0hfCisKKyNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgorCitlbnVtIHsKKwlSb290X05GUyA9IE1LREVWKFVOTkFNRURfTUFKT1IsIDI1NSksCisJUm9vdF9SQU0wID0gTUtERVYoUkFNRElTS19NQUpPUiwgMCksCisJUm9vdF9SQU0xID0gTUtERVYoUkFNRElTS19NQUpPUiwgMSksCisJUm9vdF9GRDAgPSBNS0RFVihGTE9QUFlfTUFKT1IsIDApLAorCVJvb3RfSERBMSA9IE1LREVWKElERTBfTUFKT1IsIDEpLAorCVJvb3RfSERBMiA9IE1LREVWKElERTBfTUFKT1IsIDIpLAorCVJvb3RfU0RBMSA9IE1LREVWKFNDU0lfRElTSzBfTUFKT1IsIDEpLAorCVJvb3RfU0RBMiA9IE1LREVWKFNDU0lfRElTSzBfTUFKT1IsIDIpLAorCVJvb3RfSERDMSA9IE1LREVWKElERTFfTUFKT1IsIDEpLAorCVJvb3RfU1IwID0gTUtERVYoU0NTSV9DRFJPTV9NQUpPUiwgMCksCit9OworCitleHRlcm4gZGV2X3QgUk9PVF9ERVY7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yb3NlLmggYi9pbmNsdWRlL2xpbnV4L3Jvc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2I0YjE4NAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvcm9zZS5oCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBUaGVzZSBhcmUgdGhlIHB1YmxpYyBlbGVtZW50cyBvZiB0aGUgTGludXgga2VybmVsIFJvc2UgaW1wbGVtZW50YXRpb24uCisgKiBGb3Iga2VybmVsIEFYLjI1IHNlZSB0aGUgZmlsZSBheDI1LmguIFRoaXMgZmlsZSByZXF1aXJlcyBheDI1LmggZm9yIHRoZQorICogZGVmaW5pdGlvbiBvZiB0aGUgYXgyNV9hZGRyZXNzIHN0cnVjdHVyZS4KKyAqLworCisjaWZuZGVmCVJPU0VfS0VSTkVMX0gKKyNkZWZpbmUJUk9TRV9LRVJORUxfSAorCisjZGVmaW5lIFJPU0VfTVRVCTI1MQorCisjZGVmaW5lIFJPU0VfTUFYX0RJR0lTIDYKKworI2RlZmluZQlST1NFX0RFRkVSCTEKKyNkZWZpbmUgUk9TRV9UMQkJMgorI2RlZmluZQlST1NFX1QyCQkzCisjZGVmaW5lCVJPU0VfVDMJCTQKKyNkZWZpbmUJUk9TRV9JRExFCTUKKyNkZWZpbmUJUk9TRV9RQklUSU5DTAk2CisjZGVmaW5lCVJPU0VfSE9MREJBQ0sJNworCisjZGVmaW5lCVNJT0NSU0dDQVVTRQkJKFNJT0NQUk9UT1BSSVZBVEUrMCkKKyNkZWZpbmUJU0lPQ1JTU0NBVVNFCQkoU0lPQ1BST1RPUFJJVkFURSsxKQorI2RlZmluZQlTSU9DUlNMMkNBTEwJCShTSU9DUFJPVE9QUklWQVRFKzIpCisjZGVmaW5lCVNJT0NSU1NMMkNBTEwJCShTSU9DUFJPVE9QUklWQVRFKzIpCisjZGVmaW5lCVNJT0NSU0FDQ0VQVAkJKFNJT0NQUk9UT1BSSVZBVEUrMykKKyNkZWZpbmUJU0lPQ1JTQ0xSUlQJCShTSU9DUFJPVE9QUklWQVRFKzQpCisjZGVmaW5lCVNJT0NSU0dMMkNBTEwJCShTSU9DUFJPVE9QUklWQVRFKzUpCisjZGVmaW5lCVNJT0NSU0dGQUNJTElUSUVTCShTSU9DUFJPVE9QUklWQVRFKzYpCisKKyNkZWZpbmUJUk9TRV9EVEVfT1JJR0lOQVRFRAkweDAwCisjZGVmaW5lCVJPU0VfTlVNQkVSX0JVU1kJMHgwMQorI2RlZmluZQlST1NFX0lOVkFMSURfRkFDSUxJVFkJMHgwMworI2RlZmluZQlST1NFX05FVFdPUktfQ09OR0VTVElPTgkweDA1CisjZGVmaW5lCVJPU0VfT1VUX09GX09SREVSCTB4MDkKKyNkZWZpbmUJUk9TRV9BQ0NFU1NfQkFSUkVECTB4MEIKKyNkZWZpbmUJUk9TRV9OT1RfT0JUQUlOQUJMRQkweDBECisjZGVmaW5lCVJPU0VfUkVNT1RFX1BST0NFRFVSRQkweDExCisjZGVmaW5lCVJPU0VfTE9DQUxfUFJPQ0VEVVJFCTB4MTMKKyNkZWZpbmUJUk9TRV9TSElQX0FCU0VOVAkweDM5CisKK3R5cGVkZWYgc3RydWN0IHsKKwljaGFyCQlyb3NlX2FkZHJbNV07Cit9IHJvc2VfYWRkcmVzczsKKworc3RydWN0IHNvY2thZGRyX3Jvc2UgeworCXNhX2ZhbWlseV90CXNyb3NlX2ZhbWlseTsKKwlyb3NlX2FkZHJlc3MJc3Jvc2VfYWRkcjsKKwlheDI1X2FkZHJlc3MJc3Jvc2VfY2FsbDsKKwlpbnQJCXNyb3NlX25kaWdpczsKKwlheDI1X2FkZHJlc3MJc3Jvc2VfZGlnaTsKK307CisKK3N0cnVjdCBmdWxsX3NvY2thZGRyX3Jvc2UgeworCXNhX2ZhbWlseV90CXNyb3NlX2ZhbWlseTsKKwlyb3NlX2FkZHJlc3MJc3Jvc2VfYWRkcjsKKwlheDI1X2FkZHJlc3MJc3Jvc2VfY2FsbDsKKwl1bnNpZ25lZCBpbnQJc3Jvc2VfbmRpZ2lzOworCWF4MjVfYWRkcmVzcwlzcm9zZV9kaWdpc1tST1NFX01BWF9ESUdJU107Cit9OworCitzdHJ1Y3Qgcm9zZV9yb3V0ZV9zdHJ1Y3QgeworCXJvc2VfYWRkcmVzcwlhZGRyZXNzOworCXVuc2lnbmVkIHNob3J0CW1hc2s7CisJYXgyNV9hZGRyZXNzCW5laWdoYm91cjsKKwljaGFyCQlkZXZpY2VbMTZdOworCXVuc2lnbmVkIGNoYXIJbmRpZ2lzOworCWF4MjVfYWRkcmVzcwlkaWdpcGVhdGVyc1tBWDI1X01BWF9ESUdJU107Cit9OworCitzdHJ1Y3Qgcm9zZV9jYXVzZV9zdHJ1Y3QgeworCXVuc2lnbmVkIGNoYXIJY2F1c2U7CisJdW5zaWduZWQgY2hhcglkaWFnbm9zdGljOworfTsKKworc3RydWN0IHJvc2VfZmFjaWxpdGllc19zdHJ1Y3QgeworCXJvc2VfYWRkcmVzcwlzb3VyY2VfYWRkciwgICBkZXN0X2FkZHI7CisJYXgyNV9hZGRyZXNzCXNvdXJjZV9jYWxsLCAgIGRlc3RfY2FsbDsKKwl1bnNpZ25lZCBjaGFyCXNvdXJjZV9uZGlnaXMsIGRlc3RfbmRpZ2lzOworCWF4MjVfYWRkcmVzcwlzb3VyY2VfZGlnaXNbUk9TRV9NQVhfRElHSVNdOworCWF4MjVfYWRkcmVzcwlkZXN0X2RpZ2lzW1JPU0VfTUFYX0RJR0lTXTsKKwl1bnNpZ25lZCBpbnQJcmFuZDsKKwlyb3NlX2FkZHJlc3MJZmFpbF9hZGRyOworCWF4MjVfYWRkcmVzcwlmYWlsX2NhbGw7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcm91dGUuaCBiL2luY2x1ZGUvbGludXgvcm91dGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2VkMzVkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9yb3V0ZS5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBJTkVUCQlBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgVENQL0lQIHByb3RvY29sIHN1aXRlIGZvciB0aGUgTElOVVgKKyAqCQlvcGVyYXRpbmcgc3lzdGVtLiAgSU5FVCBpcyBpbXBsZW1lbnRlZCB1c2luZyB0aGUgIEJTRCBTb2NrZXQKKyAqCQlpbnRlcmZhY2UgYXMgdGhlIG1lYW5zIG9mIGNvbW11bmljYXRpb24gd2l0aCB0aGUgdXNlciBsZXZlbC4KKyAqCisgKgkJR2xvYmFsIGRlZmluaXRpb25zIGZvciB0aGUgSVAgcm91dGVyIGludGVyZmFjZS4KKyAqCisgKiBWZXJzaW9uOglAKCMpcm91dGUuaAkxLjAuMwkwNS8yNy85MworICoKKyAqIEF1dGhvcnM6CU9yaWdpbmFsIHRha2VuIGZyb20gQmVya2VsZXkgVU5JWCA0LjMsIChjKSBVQ0IgMTk4Ni0xOTg4CisgKgkJZm9yIHRoZSBwdXJwb3NlcyBvZiBjb21wYXRpYmlsaXR5IG9ubHkuCisgKgorICoJCUZyZWQgTi4gdmFuIEtlbXBlbiwgPHdhbHRqZUB1V2FsdC5OTC5NdWduZXQuT1JHPgorICoKKyAqIENoYW5nZXM6CisgKiAgICAgICAgICAgICAgTWlrZSBNY0xhZ2FuICAgIDogICAgICAgUm91dGluZyBieSBzb3VyY2UKKyAqCisgKgkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKgkJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKgkJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2lmbmRlZiBfTElOVVhfUk9VVEVfSAorI2RlZmluZSBfTElOVVhfUk9VVEVfSAorCisjaW5jbHVkZSA8bGludXgvaWYuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorCisvKiBUaGlzIHN0cnVjdHVyZSBnZXRzIHBhc3NlZCBieSB0aGUgU0lPQ0FERFJUIGFuZCBTSU9DREVMUlQgY2FsbHMuICovCitzdHJ1Y3QgcnRlbnRyeSAKK3sKKwl1bnNpZ25lZCBsb25nCXJ0X3BhZDE7CisJc3RydWN0IHNvY2thZGRyCXJ0X2RzdDsJCS8qIHRhcmdldCBhZGRyZXNzCQkqLworCXN0cnVjdCBzb2NrYWRkcglydF9nYXRld2F5OwkvKiBnYXRld2F5IGFkZHIgKFJURl9HQVRFV0FZKQkqLworCXN0cnVjdCBzb2NrYWRkcglydF9nZW5tYXNrOwkvKiB0YXJnZXQgbmV0d29yayBtYXNrIChJUCkJKi8KKwl1bnNpZ25lZCBzaG9ydAlydF9mbGFnczsKKwlzaG9ydAkJcnRfcGFkMjsKKwl1bnNpZ25lZCBsb25nCXJ0X3BhZDM7CisJdm9pZAkJKnJ0X3BhZDQ7CisJc2hvcnQJCXJ0X21ldHJpYzsJLyogKzEgZm9yIGJpbmFyeSBjb21wYXRpYmlsaXR5IQkqLworCWNoYXIgX191c2VyCSpydF9kZXY7CS8qIGZvcmNpbmcgdGhlIGRldmljZSBhdCBhZGQJKi8KKwl1bnNpZ25lZCBsb25nCXJ0X210dTsJCS8qIHBlciByb3V0ZSBNVFUvV2luZG93IAkqLworI2lmbmRlZiBfX0tFUk5FTF9fCisjZGVmaW5lIHJ0X21zcwlydF9tdHUJCQkvKiBDb21wYXRpYmlsaXR5IDotKCAgICAgICAgICAgICovCisjZW5kaWYKKwl1bnNpZ25lZCBsb25nCXJ0X3dpbmRvdzsJLyogV2luZG93IGNsYW1waW5nIAkJKi8KKwl1bnNpZ25lZCBzaG9ydAlydF9pcnR0OwkvKiBJbml0aWFsIFJUVAkJCSovCit9OworCisKKyNkZWZpbmUJUlRGX1VQCQkweDAwMDEJCS8qIHJvdXRlIHVzYWJsZQkJICAJKi8KKyNkZWZpbmUJUlRGX0dBVEVXQVkJMHgwMDAyCQkvKiBkZXN0aW5hdGlvbiBpcyBhIGdhdGV3YXkJKi8KKyNkZWZpbmUJUlRGX0hPU1QJMHgwMDA0CQkvKiBob3N0IGVudHJ5IChuZXQgb3RoZXJ3aXNlKQkqLworI2RlZmluZSBSVEZfUkVJTlNUQVRFCTB4MDAwOAkJLyogcmVpbnN0YXRlIHJvdXRlIGFmdGVyIHRtb3V0CSovCisjZGVmaW5lCVJURl9EWU5BTUlDCTB4MDAxMAkJLyogY3JlYXRlZCBkeW4uIChieSByZWRpcmVjdCkJKi8KKyNkZWZpbmUJUlRGX01PRElGSUVECTB4MDAyMAkJLyogbW9kaWZpZWQgZHluLiAoYnkgcmVkaXJlY3QpCSovCisjZGVmaW5lIFJURl9NVFUJCTB4MDA0MAkJLyogc3BlY2lmaWMgTVRVIGZvciB0aGlzIHJvdXRlCSovCisjZGVmaW5lIFJURl9NU1MJCVJURl9NVFUJCS8qIENvbXBhdGliaWxpdHkgOi0oCQkqLworI2RlZmluZSBSVEZfV0lORE9XCTB4MDA4MAkJLyogcGVyIHJvdXRlIHdpbmRvdyBjbGFtcGluZwkqLworI2RlZmluZSBSVEZfSVJUVAkweDAxMDAJCS8qIEluaXRpYWwgcm91bmQgdHJpcCB0aW1lCSovCisjZGVmaW5lIFJURl9SRUpFQ1QJMHgwMjAwCQkvKiBSZWplY3Qgcm91dGUJCQkqLworCisvKgorICoJPGxpbnV4L2lwdjZfcm91dGUuaD4gdXNlcyBSVEYgdmFsdWVzID49IDY0aworICovCisKKworCisjZW5kaWYJLyogX0xJTlVYX1JPVVRFX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yc2xpYi5oIGIvaW5jbHVkZS9saW51eC9yc2xpYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4MGM4ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3JzbGliLmgKQEAgLTAsMCArMSwxMDUgQEAKKy8qIAorICogaW5jbHVkZS9saW51eC9yc2xpYi5oCisgKgorICogT3ZlcnZpZXc6CisgKiAgIEdlbmVyaWMgUmVlZCBTb2xvbW9uIGVuY29kZXIgLyBkZWNvZGVyIGxpYnJhcnkKKyAqICAgCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgVGhvbWFzIEdsZWl4bmVyICh0Z2x4QGxpbnV0cm9uaXguZGUpCisgKgorICogUlMgY29kZSBsaWZ0ZWQgZnJvbSByZWVkIHNvbG9tb24gbGlicmFyeSB3cml0dGVuIGJ5IFBoaWwgS2FybgorICogQ29weXJpZ2h0IDIwMDIgUGhpbCBLYXJuLCBLQTlRCisgKgorICogJElkOiByc2xpYi5oLHYgMS4zIDIwMDQvMTAvMDUgMjI6MDg6MjIgZ2xlaXhuZXIgRXhwICQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX1JTTElCX0hfCisjZGVmaW5lIF9SU0xJQl9IXworCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorCisvKiogCisgKiBzdHJ1Y3QgcnNfY29udHJvbCAtIHJzIGNvbnRyb2wgc3RydWN0dXJlCisgKiAKKyAqIEBtbToJCUJpdHMgcGVyIHN5bWJvbAorICogQG5uOgkJU3ltYm9scyBwZXIgYmxvY2sgKD0gKDE8PG1tKS0xKQorICogQGFscGhhX3RvOglsb2cgbG9va3VwIHRhYmxlCisgKiBAaW5kZXhfb2Y6CUFudGlsb2cgbG9va3VwIHRhYmxlCisgKiBAZ2VucG9seToJR2VuZXJhdG9yIHBvbHlub21pYWwgCisgKiBAbnJvb3RzOglOdW1iZXIgb2YgZ2VuZXJhdG9yIHJvb3RzID0gbnVtYmVyIG9mIHBhcml0eSBzeW1ib2xzCisgKiBAZmNyOglGaXJzdCBjb25zZWN1dGl2ZSByb290LCBpbmRleCBmb3JtCisgKiBAcHJpbToJUHJpbWl0aXZlIGVsZW1lbnQsIGluZGV4IGZvcm0gCisgKiBAaXByaW06CXByaW0tdGggcm9vdCBvZiAxLCBpbmRleCBmb3JtIAorICogQGdmcG9seToJVGhlIHByaW1pdGl2ZSBnZW5lcmF0b3IgcG9seW5vbWluYWwgCisgKiBAdXNlcnM6CVVzZXJzIG9mIHRoaXMgc3RydWN0dXJlIAorICogQGxpc3Q6CUxpc3QgZW50cnkgZm9yIHRoZSBycyBjb250cm9sIGxpc3QKKyovCitzdHJ1Y3QgcnNfY29udHJvbCB7CisJaW50IAkJbW07CisJaW50IAkJbm47CisJdWludDE2X3QJKmFscGhhX3RvOworCXVpbnQxNl90CSppbmRleF9vZjsKKwl1aW50MTZfdAkqZ2VucG9seTsKKwlpbnQgCQlucm9vdHM7CisJaW50IAkJZmNyOworCWludCAJCXByaW07CisJaW50IAkJaXByaW07CisJaW50CQlnZnBvbHk7CisJaW50CQl1c2VyczsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Cit9OworCisvKiBHZW5lcmFsIHB1cnBvc2UgUlMgY29kZWMsIDgtYml0IGRhdGEgd2lkdGgsIHN5bWJvbCB3aWR0aCAxLTE1IGJpdCAgKi8KKyNpZmRlZiBDT05GSUdfUkVFRF9TT0xPTU9OX0VOQzgKK2ludCBlbmNvZGVfcnM4KHN0cnVjdCByc19jb250cm9sICpycywgdWludDhfdCAqZGF0YSwgaW50IGxlbiwgdWludDE2X3QgKnBhciwKKwkgICAgICAgdWludDE2X3QgaW52bXNrKTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19SRUVEX1NPTE9NT05fREVDOAoraW50IGRlY29kZV9yczgoc3RydWN0IHJzX2NvbnRyb2wgKnJzLCB1aW50OF90ICpkYXRhLCB1aW50MTZfdCAqcGFyLCBpbnQgbGVuLCAKKwkJdWludDE2X3QgKnMsIGludCBub19lcmFzLCBpbnQgKmVyYXNfcG9zLCB1aW50MTZfdCBpbnZtc2ssCisJICAgICAgIHVpbnQxNl90ICpjb3JyKTsKKyNlbmRpZgorCisvKiBHZW5lcmFsIHB1cnBvc2UgUlMgY29kZWMsIDE2LWJpdCBkYXRhIHdpZHRoLCBzeW1ib2wgd2lkdGggMS0xNSBiaXQgICovCisjaWZkZWYgQ09ORklHX1JFRURfU09MT01PTl9FTkMxNgoraW50IGVuY29kZV9yczE2KHN0cnVjdCByc19jb250cm9sICpycywgdWludDE2X3QgKmRhdGEsIGludCBsZW4sIHVpbnQxNl90ICpwYXIsCisJCXVpbnQxNl90IGludm1zayk7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfUkVFRF9TT0xPTU9OX0RFQzE2CitpbnQgZGVjb2RlX3JzMTYoc3RydWN0IHJzX2NvbnRyb2wgKnJzLCB1aW50MTZfdCAqZGF0YSwgdWludDE2X3QgKnBhciwgaW50IGxlbiwKKwkJdWludDE2X3QgKnMsIGludCBub19lcmFzLCBpbnQgKmVyYXNfcG9zLCB1aW50MTZfdCBpbnZtc2ssCisJCXVpbnQxNl90ICpjb3JyKTsKKyNlbmRpZgorCisvKiBDcmVhdGUgb3IgZ2V0IGEgbWF0Y2hpbmcgcnMgY29udHJvbCBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCByc19jb250cm9sICppbml0X3JzKGludCBzeW1zaXplLCBpbnQgZ2Zwb2x5LCBpbnQgZmNyLCBpbnQgcHJpbSwgCisJCQkgICBpbnQgbnJvb3RzKTsKKworLyogUmVsZWFzZSBhIHJzIGNvbnRyb2wgc3RydWN0dXJlICovCit2b2lkIGZyZWVfcnMoc3RydWN0IHJzX2NvbnRyb2wgKnJzKTsKKworLyoqIG1vZHVsbyByZXBsYWNlbWVudCBmb3IgZ2Fsb2lzIGZpZWxkIGFyaXRobWV0aWNzCisgKgorICogIEByczoJdGhlIHJzIGNvbnRyb2wgc3RydWN0dXJlCisgKiAgQHg6CQl0aGUgdmFsdWUgdG8gcmVkdWNlCisgKgorICogIHdoZXJlCisgKiAgcnMtPm1tID0gbnVtYmVyIG9mIGJpdHMgcGVyIHN5bWJvbAkKKyAqICBycy0+bm4gPSAoMl5ycy0+bW0pIC0gMQorICogIAorICogIFNpbXBsZSBhcml0aG1ldGljIG1vZHVsbyB3b3VsZCByZXR1cm4gYSB3cm9uZyByZXN1bHQgZm9yIHZhbHVlcworICogID49IDMgKiBycy0+bm4KKyovCitzdGF0aWMgaW5saW5lIGludCByc19tb2RubihzdHJ1Y3QgcnNfY29udHJvbCAqcnMsIGludCB4KQoreworCXdoaWxlICh4ID49IHJzLT5ubikgeworCQl4IC09IHJzLT5ubjsKKwkJeCA9ICh4ID4+IHJzLT5tbSkgKyAoeCAmIHJzLT5ubik7CisJfQorCXJldHVybiB4OworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcnRjLmggYi9pbmNsdWRlL2xpbnV4L3J0Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxYWFmMWYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3J0Yy5oCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICogR2VuZXJpYyBSVEMgaW50ZXJmYWNlLgorICogVGhpcyB2ZXJzaW9uIGNvbnRhaW5zIHRoZSBwYXJ0IG9mIHRoZSB1c2VyIGludGVyZmFjZSB0byB0aGUgUmVhbCBUaW1lIENsb2NrCisgKiBzZXJ2aWNlLiBJdCBpcyB1c2VkIHdpdGggYm90aCB0aGUgbGVnYWN5IG1jMTQ2ODE4IGFuZCBhbHNvICBFRkkKKyAqIFN0cnVjdCBydGNfdGltZSBhbmQgZmlyc3QgMTIgaW9jdGwgYnkgUGF1bCBHb3J0bWFrZXIsIDE5OTYgLSBzZXBhcmF0ZWQgb3V0CisgKiBmcm9tIDxsaW51eC9tYzE0NjgxOHJ0Yy5oPiB0byB0aGlzIGZpbGUgZm9yIDIuNCBrZXJuZWxzLgorICogCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgSGV3bGV0dC1QYWNrYXJkIENvLgorICogQ29weXJpZ2h0IChDKSAxOTk5IFN0ZXBoYW5lIEVyYW5pYW4gPGVyYW5pYW5AaHBsLmhwLmNvbT4KKyAqLworI2lmbmRlZiBfTElOVVhfUlRDX0hfCisjZGVmaW5lIF9MSU5VWF9SVENfSF8KKworLyoKKyAqIFRoZSBzdHJ1Y3QgdXNlZCB0byBwYXNzIGRhdGEgdmlhIHRoZSBmb2xsb3dpbmcgaW9jdGwuIFNpbWlsYXIgdG8gdGhlCisgKiBzdHJ1Y3QgdG0gaW4gPHRpbWUuaD4sIGJ1dCBpdCBuZWVkcyB0byBiZSBoZXJlIHNvIHRoYXQgdGhlIGtlcm5lbCAKKyAqIHNvdXJjZSBpcyBzZWxmIGNvbnRhaW5lZCwgYWxsb3dpbmcgY3Jvc3MtY29tcGlsZXMsIGV0Yy4gZXRjLgorICovCisKK3N0cnVjdCBydGNfdGltZSB7CisJaW50IHRtX3NlYzsKKwlpbnQgdG1fbWluOworCWludCB0bV9ob3VyOworCWludCB0bV9tZGF5OworCWludCB0bV9tb247CisJaW50IHRtX3llYXI7CisJaW50IHRtX3dkYXk7CisJaW50IHRtX3lkYXk7CisJaW50IHRtX2lzZHN0OworfTsKKworLyoKKyAqIFRoaXMgZGF0YSBzdHJ1Y3R1cmUgaXMgaW5zcGlyZWQgYnkgdGhlIEVGSSAodjAuOTIpIHdha2V1cAorICogYWxhcm0gQVBJLgorICovCitzdHJ1Y3QgcnRjX3drYWxybSB7CisJdW5zaWduZWQgY2hhciBlbmFibGVkOwkvKiAwID0gYWxhcm0gZGlzYWJsZSwgMSA9IGFsYXJtIGRpc2FibGVkICovCisJdW5zaWduZWQgY2hhciBwZW5kaW5nOyAgLyogMCA9IGFsYXJtIHBlbmRpbmcsIDEgPSBhbGFybSBub3QgcGVuZGluZyAqLworCXN0cnVjdCBydGNfdGltZSB0aW1lOwkvKiB0aW1lIHRoZSBhbGFybSBpcyBzZXQgdG8gKi8KK307CisKKy8qCisgKiBEYXRhIHN0cnVjdHVyZSB0byBjb250cm9sIFBMTCBjb3JyZWN0aW9uIHNvbWUgYmV0dGVyIFJUQyBmZWF0dXJlCisgKiBwbGxfdmFsdWUgaXMgdXNlZCB0byBnZXQgb3Igc2V0IGN1cnJlbnQgdmFsdWUgb2YgY29ycmVjdGlvbiwKKyAqIHRoZSByZXN0IG9mIHRoZSBzdHJ1Y3QgaXMgdXNlZCB0byBxdWVyeSBIVyBjYXBhYmlsaXRpZXMuCisgKiBUaGlzIGlzIG1vZGVsZWQgYWZ0ZXIgdGhlIFJUQyB1c2VkIGluIFE0MC9RNjAgY29tcHV0ZXJzIGJ1dAorICogc2hvdWxkIGJlIHN1ZmZpY2llbnRseSBmbGV4aWJsZSBmb3Igb3RoZXIgZGV2aWNlcworICoKKyAqICt2ZSBwbGxfdmFsdWUgbWVhbnMgY2xvY2sgd2lsbCBydW4gZmFzdGVyIGJ5CisgKiAgIHBsbF92YWx1ZSpwbGxfcG9zbXVsdC9wbGxfY2xvY2sKKyAqIC12ZSBwbGxfdmFsdWUgbWVhbnMgY2xvY2sgd2lsbCBydW4gc2xvd2VyIGJ5CisgKiAgIHBsbF92YWx1ZSpwbGxfbmVnbXVsdC9wbGxfY2xvY2sKKyAqLyAKKworc3RydWN0IHJ0Y19wbGxfaW5mbyB7CisJaW50IHBsbF9jdHJsOyAgICAgICAvKiBwbGFjZWhvbGRlciBmb3IgZmFuY2llciBjb250cm9sICovCisJaW50IHBsbF92YWx1ZTsgICAgICAvKiBnZXQvc2V0IGNvcnJlY3Rpb24gdmFsdWUgKi8KKwlpbnQgcGxsX21heDsgICAgICAgIC8qIG1heCArdmUgKGZhc3RlcikgYWRqdXN0bWVudCB2YWx1ZSAqLworCWludCBwbGxfbWluOyAgICAgICAgLyogbWF4IC12ZSAoc2xvd2VyKSBhZGp1c3RtZW50IHZhbHVlICovCisJaW50IHBsbF9wb3NtdWx0OyAgICAvKiBmYWN0b3IgZm9yICt2ZSBjb3JyZWN0aW9uICovCisJaW50IHBsbF9uZWdtdWx0OyAgICAvKiBmYWN0b3IgZm9yIC12ZSBjb3JyZWN0aW9uICovCisJbG9uZyBwbGxfY2xvY2s7ICAgICAvKiBiYXNlIFBMTCBmcmVxdWVuY3kgKi8KK307CisKKy8qCisgKiBpb2N0bCBjYWxscyB0aGF0IGFyZSBwZXJtaXR0ZWQgdG8gdGhlIC9kZXYvcnRjIGludGVyZmFjZSwgaWYKKyAqIGFueSBvZiB0aGUgUlRDIGRyaXZlcnMgYXJlIGVuYWJsZWQuCisgKi8KKworI2RlZmluZSBSVENfQUlFX09OCV9JTygncCcsIDB4MDEpCS8qIEFsYXJtIGludC4gZW5hYmxlIG9uCQkqLworI2RlZmluZSBSVENfQUlFX09GRglfSU8oJ3AnLCAweDAyKQkvKiAuLi4gb2ZmCQkJKi8KKyNkZWZpbmUgUlRDX1VJRV9PTglfSU8oJ3AnLCAweDAzKQkvKiBVcGRhdGUgaW50LiBlbmFibGUgb24JKi8KKyNkZWZpbmUgUlRDX1VJRV9PRkYJX0lPKCdwJywgMHgwNCkJLyogLi4uIG9mZgkJCSovCisjZGVmaW5lIFJUQ19QSUVfT04JX0lPKCdwJywgMHgwNSkJLyogUGVyaW9kaWMgaW50LiBlbmFibGUgb24JKi8KKyNkZWZpbmUgUlRDX1BJRV9PRkYJX0lPKCdwJywgMHgwNikJLyogLi4uIG9mZgkJCSovCisjZGVmaW5lIFJUQ19XSUVfT04JX0lPKCdwJywgMHgwZikgIC8qIFdhdGNoZG9nIGludC4gZW5hYmxlIG9uCSovCisjZGVmaW5lIFJUQ19XSUVfT0ZGCV9JTygncCcsIDB4MTApICAvKiAuLi4gb2ZmCQkJKi8KKworI2RlZmluZSBSVENfQUxNX1NFVAlfSU9XKCdwJywgMHgwNywgc3RydWN0IHJ0Y190aW1lKSAvKiBTZXQgYWxhcm0gdGltZSAgKi8KKyNkZWZpbmUgUlRDX0FMTV9SRUFECV9JT1IoJ3AnLCAweDA4LCBzdHJ1Y3QgcnRjX3RpbWUpIC8qIFJlYWQgYWxhcm0gdGltZSAqLworI2RlZmluZSBSVENfUkRfVElNRQlfSU9SKCdwJywgMHgwOSwgc3RydWN0IHJ0Y190aW1lKSAvKiBSZWFkIFJUQyB0aW1lICAgKi8KKyNkZWZpbmUgUlRDX1NFVF9USU1FCV9JT1coJ3AnLCAweDBhLCBzdHJ1Y3QgcnRjX3RpbWUpIC8qIFNldCBSVEMgdGltZSAgICAqLworI2RlZmluZSBSVENfSVJRUF9SRUFECV9JT1IoJ3AnLCAweDBiLCB1bnNpZ25lZCBsb25nKQkgLyogUmVhZCBJUlEgcmF0ZSAgICovCisjZGVmaW5lIFJUQ19JUlFQX1NFVAlfSU9XKCdwJywgMHgwYywgdW5zaWduZWQgbG9uZykJIC8qIFNldCBJUlEgcmF0ZSAgICAqLworI2RlZmluZSBSVENfRVBPQ0hfUkVBRAlfSU9SKCdwJywgMHgwZCwgdW5zaWduZWQgbG9uZykJIC8qIFJlYWQgZXBvY2ggICAgICAqLworI2RlZmluZSBSVENfRVBPQ0hfU0VUCV9JT1coJ3AnLCAweDBlLCB1bnNpZ25lZCBsb25nKQkgLyogU2V0IGVwb2NoICAgICAgICovCisKKyNkZWZpbmUgUlRDX1dLQUxNX1NFVAlfSU9XKCdwJywgMHgwZiwgc3RydWN0IHJ0Y193a2Fscm0pLyogU2V0IHdha2V1cCBhbGFybSovCisjZGVmaW5lIFJUQ19XS0FMTV9SRAlfSU9SKCdwJywgMHgxMCwgc3RydWN0IHJ0Y193a2Fscm0pLyogR2V0IHdha2V1cCBhbGFybSovCisKKyNkZWZpbmUgUlRDX1BMTF9HRVQJX0lPUigncCcsIDB4MTEsIHN0cnVjdCBydGNfcGxsX2luZm8pICAvKiBHZXQgUExMIGNvcnJlY3Rpb24gKi8KKyNkZWZpbmUgUlRDX1BMTF9TRVQJX0lPVygncCcsIDB4MTIsIHN0cnVjdCBydGNfcGxsX2luZm8pICAvKiBTZXQgUExMIGNvcnJlY3Rpb24gKi8KKworI2lmZGVmIF9fS0VSTkVMX18KKwordHlwZWRlZiBzdHJ1Y3QgcnRjX3Rhc2sgeworCXZvaWQgKCpmdW5jKSh2b2lkICpwcml2YXRlX2RhdGEpOworCXZvaWQgKnByaXZhdGVfZGF0YTsKK30gcnRjX3Rhc2tfdDsKKworaW50IHJ0Y19yZWdpc3RlcihydGNfdGFza190ICp0YXNrKTsKK2ludCBydGNfdW5yZWdpc3RlcihydGNfdGFza190ICp0YXNrKTsKK2ludCBydGNfY29udHJvbChydGNfdGFza190ICp0LCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7Cit2b2lkIHJ0Y19nZXRfcnRjX3RpbWUoc3RydWN0IHJ0Y190aW1lICpydGNfdG0pOworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX0xJTlVYX1JUQ19IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaCBiL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJlNTI3NgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmgKQEAgLTAsMCArMSw4NDIgQEAKKyNpZm5kZWYgX19MSU5VWF9SVE5FVExJTktfSAorI2RlZmluZSBfX0xJTlVYX1JUTkVUTElOS19ICisKKyNpbmNsdWRlIDxsaW51eC9uZXRsaW5rLmg+CisKKy8qKioqCisgKgkJUm91dGluZy9uZWlnaGJvdXIgZGlzY292ZXJ5IG1lc3NhZ2VzLgorICoqKiovCisKKy8qIFR5cGVzIG9mIG1lc3NhZ2VzICovCisKK2VudW0geworCVJUTV9CQVNFCT0gMTYsCisjZGVmaW5lIFJUTV9CQVNFCVJUTV9CQVNFCisKKwlSVE1fTkVXTElOSwk9IDE2LAorI2RlZmluZSBSVE1fTkVXTElOSwlSVE1fTkVXTElOSworCVJUTV9ERUxMSU5LLAorI2RlZmluZSBSVE1fREVMTElOSwlSVE1fREVMTElOSworCVJUTV9HRVRMSU5LLAorI2RlZmluZSBSVE1fR0VUTElOSwlSVE1fR0VUTElOSworCVJUTV9TRVRMSU5LLAorI2RlZmluZSBSVE1fU0VUTElOSwlSVE1fU0VUTElOSworCisJUlRNX05FV0FERFIJPSAyMCwKKyNkZWZpbmUgUlRNX05FV0FERFIJUlRNX05FV0FERFIKKwlSVE1fREVMQUREUiwKKyNkZWZpbmUgUlRNX0RFTEFERFIJUlRNX0RFTEFERFIKKwlSVE1fR0VUQUREUiwKKyNkZWZpbmUgUlRNX0dFVEFERFIJUlRNX0dFVEFERFIKKworCVJUTV9ORVdST1VURQk9IDI0LAorI2RlZmluZSBSVE1fTkVXUk9VVEUJUlRNX05FV1JPVVRFCisJUlRNX0RFTFJPVVRFLAorI2RlZmluZSBSVE1fREVMUk9VVEUJUlRNX0RFTFJPVVRFCisJUlRNX0dFVFJPVVRFLAorI2RlZmluZSBSVE1fR0VUUk9VVEUJUlRNX0dFVFJPVVRFCisKKwlSVE1fTkVXTkVJR0gJPSAyOCwKKyNkZWZpbmUgUlRNX05FV05FSUdICVJUTV9ORVdORUlHSAorCVJUTV9ERUxORUlHSCwKKyNkZWZpbmUgUlRNX0RFTE5FSUdICVJUTV9ERUxORUlHSAorCVJUTV9HRVRORUlHSCwKKyNkZWZpbmUgUlRNX0dFVE5FSUdICVJUTV9HRVRORUlHSAorCisJUlRNX05FV1JVTEUJPSAzMiwKKyNkZWZpbmUgUlRNX05FV1JVTEUJUlRNX05FV1JVTEUKKwlSVE1fREVMUlVMRSwKKyNkZWZpbmUgUlRNX0RFTFJVTEUJUlRNX0RFTFJVTEUKKwlSVE1fR0VUUlVMRSwKKyNkZWZpbmUgUlRNX0dFVFJVTEUJUlRNX0dFVFJVTEUKKworCVJUTV9ORVdRRElTQwk9IDM2LAorI2RlZmluZSBSVE1fTkVXUURJU0MJUlRNX05FV1FESVNDCisJUlRNX0RFTFFESVNDLAorI2RlZmluZSBSVE1fREVMUURJU0MJUlRNX0RFTFFESVNDCisJUlRNX0dFVFFESVNDLAorI2RlZmluZSBSVE1fR0VUUURJU0MJUlRNX0dFVFFESVNDCisKKwlSVE1fTkVXVENMQVNTCT0gNDAsCisjZGVmaW5lIFJUTV9ORVdUQ0xBU1MJUlRNX05FV1RDTEFTUworCVJUTV9ERUxUQ0xBU1MsCisjZGVmaW5lIFJUTV9ERUxUQ0xBU1MJUlRNX0RFTFRDTEFTUworCVJUTV9HRVRUQ0xBU1MsCisjZGVmaW5lIFJUTV9HRVRUQ0xBU1MJUlRNX0dFVFRDTEFTUworCisJUlRNX05FV1RGSUxURVIJPSA0NCwKKyNkZWZpbmUgUlRNX05FV1RGSUxURVIJUlRNX05FV1RGSUxURVIKKwlSVE1fREVMVEZJTFRFUiwKKyNkZWZpbmUgUlRNX0RFTFRGSUxURVIJUlRNX0RFTFRGSUxURVIKKwlSVE1fR0VUVEZJTFRFUiwKKyNkZWZpbmUgUlRNX0dFVFRGSUxURVIJUlRNX0dFVFRGSUxURVIKKworCVJUTV9ORVdBQ1RJT04JPSA0OCwKKyNkZWZpbmUgUlRNX05FV0FDVElPTiAgIFJUTV9ORVdBQ1RJT04KKwlSVE1fREVMQUNUSU9OLAorI2RlZmluZSBSVE1fREVMQUNUSU9OICAgUlRNX0RFTEFDVElPTgorCVJUTV9HRVRBQ1RJT04sCisjZGVmaW5lIFJUTV9HRVRBQ1RJT04gICBSVE1fR0VUQUNUSU9OCisKKwlSVE1fTkVXUFJFRklYCT0gNTIsCisjZGVmaW5lIFJUTV9ORVdQUkVGSVgJUlRNX05FV1BSRUZJWAorCVJUTV9HRVRQUkVGSVgJPSA1NCwKKyNkZWZpbmUgUlRNX0dFVFBSRUZJWAlSVE1fR0VUUFJFRklYCisKKwlSVE1fR0VUTVVMVElDQVNUID0gNTgsCisjZGVmaW5lIFJUTV9HRVRNVUxUSUNBU1QgUlRNX0dFVE1VTFRJQ0FTVAorCisJUlRNX0dFVEFOWUNBU1QJPSA2MiwKKyNkZWZpbmUgUlRNX0dFVEFOWUNBU1QJUlRNX0dFVEFOWUNBU1QKKworCVJUTV9NQVgsCisjZGVmaW5lIFJUTV9NQVgJCVJUTV9NQVgKK307CisKKy8qIAorICAgR2VuZXJpYyBzdHJ1Y3R1cmUgZm9yIGVuY2Fwc3VsYXRpb24gb2Ygb3B0aW9uYWwgcm91dGUgaW5mb3JtYXRpb24uCisgICBJdCBpcyByZW1pbmlzY2VudCBvZiBzb2NrYWRkciwgYnV0IHdpdGggc2FfZmFtaWx5IHJlcGxhY2VkCisgICB3aXRoIGF0dHJpYnV0ZSB0eXBlLgorICovCisKK3N0cnVjdCBydGF0dHIKK3sKKwl1bnNpZ25lZCBzaG9ydAlydGFfbGVuOworCXVuc2lnbmVkIHNob3J0CXJ0YV90eXBlOworfTsKKworLyogTWFjcm9zIHRvIGhhbmRsZSBydGF0dHJpYnV0ZXMgKi8KKworI2RlZmluZSBSVEFfQUxJR05UTwk0CisjZGVmaW5lIFJUQV9BTElHTihsZW4pICggKChsZW4pK1JUQV9BTElHTlRPLTEpICYgfihSVEFfQUxJR05UTy0xKSApCisjZGVmaW5lIFJUQV9PSyhydGEsbGVuKSAoKGxlbikgPj0gKGludClzaXplb2Yoc3RydWN0IHJ0YXR0cikgJiYgXAorCQkJIChydGEpLT5ydGFfbGVuID49IHNpemVvZihzdHJ1Y3QgcnRhdHRyKSAmJiBcCisJCQkgKHJ0YSktPnJ0YV9sZW4gPD0gKGxlbikpCisjZGVmaW5lIFJUQV9ORVhUKHJ0YSxhdHRybGVuKQkoKGF0dHJsZW4pIC09IFJUQV9BTElHTigocnRhKS0+cnRhX2xlbiksIFwKKwkJCQkgKHN0cnVjdCBydGF0dHIqKSgoKGNoYXIqKShydGEpKSArIFJUQV9BTElHTigocnRhKS0+cnRhX2xlbikpKQorI2RlZmluZSBSVEFfTEVOR1RIKGxlbikJKFJUQV9BTElHTihzaXplb2Yoc3RydWN0IHJ0YXR0cikpICsgKGxlbikpCisjZGVmaW5lIFJUQV9TUEFDRShsZW4pCVJUQV9BTElHTihSVEFfTEVOR1RIKGxlbikpCisjZGVmaW5lIFJUQV9EQVRBKHJ0YSkgICAoKHZvaWQqKSgoKGNoYXIqKShydGEpKSArIFJUQV9MRU5HVEgoMCkpKQorI2RlZmluZSBSVEFfUEFZTE9BRChydGEpICgoaW50KSgocnRhKS0+cnRhX2xlbikgLSBSVEFfTEVOR1RIKDApKQorCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgkJRGVmaW5pdGlvbnMgdXNlZCBpbiByb3V0aW5nIHRhYmxlIGFkbWluaXN0cmF0aW9uLgorICoqKiovCisKK3N0cnVjdCBydG1zZworeworCXVuc2lnbmVkIGNoYXIJCXJ0bV9mYW1pbHk7CisJdW5zaWduZWQgY2hhcgkJcnRtX2RzdF9sZW47CisJdW5zaWduZWQgY2hhcgkJcnRtX3NyY19sZW47CisJdW5zaWduZWQgY2hhcgkJcnRtX3RvczsKKworCXVuc2lnbmVkIGNoYXIJCXJ0bV90YWJsZTsJLyogUm91dGluZyB0YWJsZSBpZCAqLworCXVuc2lnbmVkIGNoYXIJCXJ0bV9wcm90b2NvbDsJLyogUm91dGluZyBwcm90b2NvbDsgc2VlIGJlbG93CSovCisJdW5zaWduZWQgY2hhcgkJcnRtX3Njb3BlOwkvKiBTZWUgYmVsb3cgKi8JCisJdW5zaWduZWQgY2hhcgkJcnRtX3R5cGU7CS8qIFNlZSBiZWxvdwkqLworCisJdW5zaWduZWQJCXJ0bV9mbGFnczsKK307CisKKy8qIHJ0bV90eXBlICovCisKK2VudW0KK3sKKwlSVE5fVU5TUEVDLAorCVJUTl9VTklDQVNULAkJLyogR2F0ZXdheSBvciBkaXJlY3Qgcm91dGUJKi8KKwlSVE5fTE9DQUwsCQkvKiBBY2NlcHQgbG9jYWxseQkJKi8KKwlSVE5fQlJPQURDQVNULAkJLyogQWNjZXB0IGxvY2FsbHkgYXMgYnJvYWRjYXN0LAorCQkJCSAgIHNlbmQgYXMgYnJvYWRjYXN0ICovCisJUlROX0FOWUNBU1QsCQkvKiBBY2NlcHQgbG9jYWxseSBhcyBicm9hZGNhc3QsCisJCQkJICAgYnV0IHNlbmQgYXMgdW5pY2FzdCAqLworCVJUTl9NVUxUSUNBU1QsCQkvKiBNdWx0aWNhc3Qgcm91dGUJCSovCisJUlROX0JMQUNLSE9MRSwJCS8qIERyb3AJCQkJKi8KKwlSVE5fVU5SRUFDSEFCTEUsCS8qIERlc3RpbmF0aW9uIGlzIHVucmVhY2hhYmxlICAgKi8KKwlSVE5fUFJPSElCSVQsCQkvKiBBZG1pbmlzdHJhdGl2ZWx5IHByb2hpYml0ZWQJKi8KKwlSVE5fVEhST1csCQkvKiBOb3QgaW4gdGhpcyB0YWJsZQkJKi8KKwlSVE5fTkFULAkJLyogVHJhbnNsYXRlIHRoaXMgYWRkcmVzcwkqLworCVJUTl9YUkVTT0xWRSwJCS8qIFVzZSBleHRlcm5hbCByZXNvbHZlcgkqLworCV9fUlROX01BWAorfTsKKworI2RlZmluZSBSVE5fTUFYIChfX1JUTl9NQVggLSAxKQorCisKKy8qIHJ0bV9wcm90b2NvbCAqLworCisjZGVmaW5lIFJUUFJPVF9VTlNQRUMJMAorI2RlZmluZSBSVFBST1RfUkVESVJFQ1QJMQkvKiBSb3V0ZSBpbnN0YWxsZWQgYnkgSUNNUCByZWRpcmVjdHM7CisJCQkJICAgbm90IHVzZWQgYnkgY3VycmVudCBJUHY0ICovCisjZGVmaW5lIFJUUFJPVF9LRVJORUwJMgkvKiBSb3V0ZSBpbnN0YWxsZWQgYnkga2VybmVsCQkqLworI2RlZmluZSBSVFBST1RfQk9PVAkzCS8qIFJvdXRlIGluc3RhbGxlZCBkdXJpbmcgYm9vdAkJKi8KKyNkZWZpbmUgUlRQUk9UX1NUQVRJQwk0CS8qIFJvdXRlIGluc3RhbGxlZCBieSBhZG1pbmlzdHJhdG9yCSovCisKKy8qIFZhbHVlcyBvZiBwcm90b2NvbCA+PSBSVFBST1RfU1RBVElDIGFyZSBub3QgaW50ZXJwcmV0ZWQgYnkga2VybmVsOworICAgdGhleSBhcmUganVzdCBwYXNzZWQgZnJvbSB1c2VyIGFuZCBiYWNrIGFzIGlzLgorICAgSXQgd2lsbCBiZSB1c2VkIGJ5IGh5cG90aGV0aWNhbCBtdWx0aXBsZSByb3V0aW5nIGRhZW1vbnMuCisgICBOb3RlIHRoYXQgcHJvdG9jb2wgdmFsdWVzIHNob3VsZCBiZSBzdGFuZGFyZGl6ZWQgaW4gb3JkZXIgdG8KKyAgIGF2b2lkIGNvbmZsaWN0cy4KKyAqLworCisjZGVmaW5lIFJUUFJPVF9HQVRFRAk4CS8qIEFwcGFyZW50bHksIEdhdGVEICovCisjZGVmaW5lIFJUUFJPVF9SQQk5CS8qIFJESVNDL05EIHJvdXRlciBhZHZlcnRpc2VtZW50cyAqLworI2RlZmluZSBSVFBST1RfTVJUCTEwCS8qIE1lcml0IE1SVCAqLworI2RlZmluZSBSVFBST1RfWkVCUkEJMTEJLyogWmVicmEgKi8KKyNkZWZpbmUgUlRQUk9UX0JJUkQJMTIJLyogQklSRCAqLworI2RlZmluZSBSVFBST1RfRE5ST1VURUQJMTMJLyogREVDbmV0IHJvdXRpbmcgZGFlbW9uICovCisjZGVmaW5lIFJUUFJPVF9YT1JQCTE0CS8qIFhPUlAgKi8KKworLyogcnRtX3Njb3BlCisKKyAgIFJlYWxseSBpdCBpcyBub3Qgc2NvcGUsIGJ1dCBzb3J0IG9mIGRpc3RhbmNlIHRvIHRoZSBkZXN0aW5hdGlvbi4KKyAgIE5PV0hFUkUgYXJlIHJlc2VydmVkIGZvciBub3QgZXhpc3RpbmcgZGVzdGluYXRpb25zLCBIT1NUIGlzIG91cgorICAgbG9jYWwgYWRkcmVzc2VzLCBMSU5LIGFyZSBkZXN0aW5hdGlvbnMsIGxvY2F0ZWQgb24gZGlyZWN0bHkgYXR0YWNoZWQKKyAgIGxpbmsgYW5kIFVOSVZFUlNFIGlzIGV2ZXJ5d2hlcmUgaW4gdGhlIFVuaXZlcnNlLgorCisgICBJbnRlcm1lZGlhdGUgdmFsdWVzIGFyZSBhbHNvIHBvc3NpYmxlIGYuZS4gaW50ZXJpb3Igcm91dGVzCisgICBjb3VsZCBiZSBhc3NpZ25lZCBhIHZhbHVlIGJldHdlZW4gVU5JVkVSU0UgYW5kIExJTksuCisqLworCitlbnVtIHJ0X3Njb3BlX3QKK3sKKwlSVF9TQ09QRV9VTklWRVJTRT0wLAorLyogVXNlciBkZWZpbmVkIHZhbHVlcyAgKi8KKwlSVF9TQ09QRV9TSVRFPTIwMCwKKwlSVF9TQ09QRV9MSU5LPTI1MywKKwlSVF9TQ09QRV9IT1NUPTI1NCwKKwlSVF9TQ09QRV9OT1dIRVJFPTI1NQorfTsKKworLyogcnRtX2ZsYWdzICovCisKKyNkZWZpbmUgUlRNX0ZfTk9USUZZCQkweDEwMAkvKiBOb3RpZnkgdXNlciBvZiByb3V0ZSBjaGFuZ2UJKi8KKyNkZWZpbmUgUlRNX0ZfQ0xPTkVECQkweDIwMAkvKiBUaGlzIHJvdXRlIGlzIGNsb25lZAkJKi8KKyNkZWZpbmUgUlRNX0ZfRVFVQUxJWkUJCTB4NDAwCS8qIE11bHRpcGF0aCBlcXVhbGl6ZXI6IE5JCSovCisjZGVmaW5lIFJUTV9GX1BSRUZJWAkJMHg4MDAJLyogUHJlZml4IGFkZHJlc3NlcwkJKi8KKworLyogUmVzZXJ2ZWQgdGFibGUgaWRlbnRpZmllcnMgKi8KKworZW51bSBydF9jbGFzc190Cit7CisJUlRfVEFCTEVfVU5TUEVDPTAsCisvKiBVc2VyIGRlZmluZWQgdmFsdWVzICovCisJUlRfVEFCTEVfREVGQVVMVD0yNTMsCisJUlRfVEFCTEVfTUFJTj0yNTQsCisJUlRfVEFCTEVfTE9DQUw9MjU1LAorCV9fUlRfVEFCTEVfTUFYCit9OworI2RlZmluZSBSVF9UQUJMRV9NQVggKF9fUlRfVEFCTEVfTUFYIC0gMSkKKworCisKKy8qIFJvdXRpbmcgbWVzc2FnZSBhdHRyaWJ1dGVzICovCisKK2VudW0gcnRhdHRyX3R5cGVfdAoreworCVJUQV9VTlNQRUMsCisJUlRBX0RTVCwKKwlSVEFfU1JDLAorCVJUQV9JSUYsCisJUlRBX09JRiwKKwlSVEFfR0FURVdBWSwKKwlSVEFfUFJJT1JJVFksCisJUlRBX1BSRUZTUkMsCisJUlRBX01FVFJJQ1MsCisJUlRBX01VTFRJUEFUSCwKKwlSVEFfUFJPVE9JTkZPLAorCVJUQV9GTE9XLAorCVJUQV9DQUNIRUlORk8sCisJUlRBX1NFU1NJT04sCisJUlRBX01QX0FMR08sCisJX19SVEFfTUFYCit9OworCisjZGVmaW5lIFJUQV9NQVggKF9fUlRBX01BWCAtIDEpCisKKyNkZWZpbmUgUlRNX1JUQShyKSAgKChzdHJ1Y3QgcnRhdHRyKikoKChjaGFyKikocikpICsgTkxNU0dfQUxJR04oc2l6ZW9mKHN0cnVjdCBydG1zZykpKSkKKyNkZWZpbmUgUlRNX1BBWUxPQUQobikgTkxNU0dfUEFZTE9BRChuLHNpemVvZihzdHJ1Y3QgcnRtc2cpKQorCisvKiBSVE1fTVVMVElQQVRIIC0tLSBhcnJheSBvZiBzdHJ1Y3QgcnRuZXh0aG9wLgorICoKKyAqICJzdHJ1Y3QgcnRuZXh0aG9wIiBkZXNjcmliZXMgYWxsIG5lY2Vzc2FyeSBuZXh0aG9wIGluZm9ybWF0aW9uLAorICogaS5lLiBwYXJhbWV0ZXJzIG9mIHBhdGggdG8gYSBkZXN0aW5hdGlvbiB2aWEgdGhpcyBuZXh0aG9wLgorICoKKyAqIEF0IHRoZSBtb21lbnQgaXQgaXMgaW1wb3NzaWJsZSB0byBzZXQgZGlmZmVyZW50IHByZWZzcmMsIG10dSwgd2luZG93CisgKiBhbmQgcnR0IGZvciBkaWZmZXJlbnQgcGF0aHMgZnJvbSBtdWx0aXBhdGguCisgKi8KKworc3RydWN0IHJ0bmV4dGhvcAoreworCXVuc2lnbmVkIHNob3J0CQlydG5oX2xlbjsKKwl1bnNpZ25lZCBjaGFyCQlydG5oX2ZsYWdzOworCXVuc2lnbmVkIGNoYXIJCXJ0bmhfaG9wczsKKwlpbnQJCQlydG5oX2lmaW5kZXg7Cit9OworCisvKiBydG5oX2ZsYWdzICovCisKKyNkZWZpbmUgUlROSF9GX0RFQUQJCTEJLyogTmV4dGhvcCBpcyBkZWFkICh1c2VkIGJ5IG11bHRpcGF0aCkJKi8KKyNkZWZpbmUgUlROSF9GX1BFUlZBU0lWRQkyCS8qIERvIHJlY3Vyc2l2ZSBnYXRld2F5IGxvb2t1cAkqLworI2RlZmluZSBSVE5IX0ZfT05MSU5LCQk0CS8qIEdhdGV3YXkgaXMgZm9yY2VkIG9uIGxpbmsJKi8KKworLyogTWFjcm9zIHRvIGhhbmRsZSBoZXh0aG9wcyAqLworCisjZGVmaW5lIFJUTkhfQUxJR05UTwk0CisjZGVmaW5lIFJUTkhfQUxJR04obGVuKSAoICgobGVuKStSVE5IX0FMSUdOVE8tMSkgJiB+KFJUTkhfQUxJR05UTy0xKSApCisjZGVmaW5lIFJUTkhfT0socnRuaCxsZW4pICgocnRuaCktPnJ0bmhfbGVuID49IHNpemVvZihzdHJ1Y3QgcnRuZXh0aG9wKSAmJiBcCisJCQkgICAoKGludCkocnRuaCktPnJ0bmhfbGVuKSA8PSAobGVuKSkKKyNkZWZpbmUgUlROSF9ORVhUKHJ0bmgpCSgoc3RydWN0IHJ0bmV4dGhvcCopKCgoY2hhciopKHJ0bmgpKSArIFJUTkhfQUxJR04oKHJ0bmgpLT5ydG5oX2xlbikpKQorI2RlZmluZSBSVE5IX0xFTkdUSChsZW4pIChSVE5IX0FMSUdOKHNpemVvZihzdHJ1Y3QgcnRuZXh0aG9wKSkgKyAobGVuKSkKKyNkZWZpbmUgUlROSF9TUEFDRShsZW4pCVJUTkhfQUxJR04oUlROSF9MRU5HVEgobGVuKSkKKyNkZWZpbmUgUlROSF9EQVRBKHJ0bmgpICAgKChzdHJ1Y3QgcnRhdHRyKikoKChjaGFyKikocnRuaCkpICsgUlROSF9MRU5HVEgoMCkpKQorCisvKiBSVE1fQ0FDSEVJTkZPICovCisKK3N0cnVjdCBydGFfY2FjaGVpbmZvCit7CisJX191MzIJcnRhX2NsbnRyZWY7CisJX191MzIJcnRhX2xhc3R1c2U7CisJX19zMzIJcnRhX2V4cGlyZXM7CisJX191MzIJcnRhX2Vycm9yOworCV9fdTMyCXJ0YV91c2VkOworCisjZGVmaW5lIFJUTkVUTElOS19IQVZFX1BFRVJJTkZPIDEKKwlfX3UzMglydGFfaWQ7CisJX191MzIJcnRhX3RzOworCV9fdTMyCXJ0YV90c2FnZTsKK307CisKKy8qIFJUTV9NRVRSSUNTIC0tLSBhcnJheSBvZiBzdHJ1Y3QgcnRhdHRyIHdpdGggdHlwZXMgb2YgUlRBWF8qICovCisKK2VudW0KK3sKKwlSVEFYX1VOU1BFQywKKyNkZWZpbmUgUlRBWF9VTlNQRUMgUlRBWF9VTlNQRUMKKwlSVEFYX0xPQ0ssCisjZGVmaW5lIFJUQVhfTE9DSyBSVEFYX0xPQ0sKKwlSVEFYX01UVSwKKyNkZWZpbmUgUlRBWF9NVFUgUlRBWF9NVFUKKwlSVEFYX1dJTkRPVywKKyNkZWZpbmUgUlRBWF9XSU5ET1cgUlRBWF9XSU5ET1cKKwlSVEFYX1JUVCwKKyNkZWZpbmUgUlRBWF9SVFQgUlRBWF9SVFQKKwlSVEFYX1JUVFZBUiwKKyNkZWZpbmUgUlRBWF9SVFRWQVIgUlRBWF9SVFRWQVIKKwlSVEFYX1NTVEhSRVNILAorI2RlZmluZSBSVEFYX1NTVEhSRVNIIFJUQVhfU1NUSFJFU0gKKwlSVEFYX0NXTkQsCisjZGVmaW5lIFJUQVhfQ1dORCBSVEFYX0NXTkQKKwlSVEFYX0FEVk1TUywKKyNkZWZpbmUgUlRBWF9BRFZNU1MgUlRBWF9BRFZNU1MKKwlSVEFYX1JFT1JERVJJTkcsCisjZGVmaW5lIFJUQVhfUkVPUkRFUklORyBSVEFYX1JFT1JERVJJTkcKKwlSVEFYX0hPUExJTUlULAorI2RlZmluZSBSVEFYX0hPUExJTUlUIFJUQVhfSE9QTElNSVQKKwlSVEFYX0lOSVRDV05ELAorI2RlZmluZSBSVEFYX0lOSVRDV05EIFJUQVhfSU5JVENXTkQKKwlSVEFYX0ZFQVRVUkVTLAorI2RlZmluZSBSVEFYX0ZFQVRVUkVTIFJUQVhfRkVBVFVSRVMKKwlfX1JUQVhfTUFYCit9OworCisjZGVmaW5lIFJUQVhfTUFYIChfX1JUQVhfTUFYIC0gMSkKKworI2RlZmluZSBSVEFYX0ZFQVRVUkVfRUNOCTB4MDAwMDAwMDEKKyNkZWZpbmUgUlRBWF9GRUFUVVJFX1NBQ0sJMHgwMDAwMDAwMgorI2RlZmluZSBSVEFYX0ZFQVRVUkVfVElNRVNUQU1QCTB4MDAwMDAwMDQKKyNkZWZpbmUgUlRBWF9GRUFUVVJFX0FMTEZSQUcJMHgwMDAwMDAwOAorCitzdHJ1Y3QgcnRhX3Nlc3Npb24KK3sKKwlfX3U4CXByb3RvOworCisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJX191MTYJc3BvcnQ7CisJCQlfX3UxNglkcG9ydDsKKwkJfSBwb3J0czsKKworCQlzdHJ1Y3QgeworCQkJX191OAl0eXBlOworCQkJX191OAljb2RlOworCQkJX191MTYJaWRlbnQ7CisJCX0gaWNtcHQ7CisKKwkJX191MzIJCXNwaTsKKwl9IHU7Cit9OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCQlJbnRlcmZhY2UgYWRkcmVzcy4KKyAqKioqLworCitzdHJ1Y3QgaWZhZGRybXNnCit7CisJdW5zaWduZWQgY2hhcglpZmFfZmFtaWx5OworCXVuc2lnbmVkIGNoYXIJaWZhX3ByZWZpeGxlbjsJLyogVGhlIHByZWZpeCBsZW5ndGgJCSovCisJdW5zaWduZWQgY2hhcglpZmFfZmxhZ3M7CS8qIEZsYWdzCQkJKi8KKwl1bnNpZ25lZCBjaGFyCWlmYV9zY29wZTsJLyogU2VlIGFib3ZlCQkJKi8KKwlpbnQJCWlmYV9pbmRleDsJLyogTGluayBpbmRleAkJCSovCit9OworCitlbnVtCit7CisJSUZBX1VOU1BFQywKKwlJRkFfQUREUkVTUywKKwlJRkFfTE9DQUwsCisJSUZBX0xBQkVMLAorCUlGQV9CUk9BRENBU1QsCisJSUZBX0FOWUNBU1QsCisJSUZBX0NBQ0hFSU5GTywKKwlJRkFfTVVMVElDQVNULAorCV9fSUZBX01BWAorfTsKKworI2RlZmluZSBJRkFfTUFYIChfX0lGQV9NQVggLSAxKQorCisvKiBpZmFfZmxhZ3MgKi8KKworI2RlZmluZSBJRkFfRl9TRUNPTkRBUlkJCTB4MDEKKyNkZWZpbmUgSUZBX0ZfVEVNUE9SQVJZCQlJRkFfRl9TRUNPTkRBUlkKKworI2RlZmluZSBJRkFfRl9ERVBSRUNBVEVECTB4MjAKKyNkZWZpbmUgSUZBX0ZfVEVOVEFUSVZFCQkweDQwCisjZGVmaW5lIElGQV9GX1BFUk1BTkVOVAkJMHg4MAorCitzdHJ1Y3QgaWZhX2NhY2hlaW5mbworeworCV9fdTMyCWlmYV9wcmVmZXJlZDsKKwlfX3UzMglpZmFfdmFsaWQ7CisJX191MzIJY3N0YW1wOyAvKiBjcmVhdGVkIHRpbWVzdGFtcCwgaHVuZHJlZHRocyBvZiBzZWNvbmRzICovCisJX191MzIJdHN0YW1wOyAvKiB1cGRhdGVkIHRpbWVzdGFtcCwgaHVuZHJlZHRocyBvZiBzZWNvbmRzICovCit9OworCisKKyNkZWZpbmUgSUZBX1JUQShyKSAgKChzdHJ1Y3QgcnRhdHRyKikoKChjaGFyKikocikpICsgTkxNU0dfQUxJR04oc2l6ZW9mKHN0cnVjdCBpZmFkZHJtc2cpKSkpCisjZGVmaW5lIElGQV9QQVlMT0FEKG4pIE5MTVNHX1BBWUxPQUQobixzaXplb2Yoc3RydWN0IGlmYWRkcm1zZykpCisKKy8qCisgICBJbXBvcnRhbnQgY29tbWVudDoKKyAgIElGQV9BRERSRVNTIGlzIHByZWZpeCBhZGRyZXNzLCByYXRoZXIgdGhhbiBsb2NhbCBpbnRlcmZhY2UgYWRkcmVzcy4KKyAgIEl0IG1ha2VzIG5vIGRpZmZlcmVuY2UgZm9yIG5vcm1hbGx5IGNvbmZpZ3VyZWQgYnJvYWRjYXN0IGludGVyZmFjZXMsCisgICBidXQgZm9yIHBvaW50LXRvLXBvaW50IElGQV9BRERSRVNTIGlzIERFU1RJTkFUSU9OIGFkZHJlc3MsCisgICBsb2NhbCBhZGRyZXNzIGlzIHN1cHBsaWVkIGluIElGQV9MT0NBTCBhdHRyaWJ1dGUuCisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgkJTmVpZ2hib3VyIGRpc2NvdmVyeS4KKyAqKioqLworCitzdHJ1Y3QgbmRtc2cKK3sKKwl1bnNpZ25lZCBjaGFyCW5kbV9mYW1pbHk7CisJdW5zaWduZWQgY2hhcgluZG1fcGFkMTsKKwl1bnNpZ25lZCBzaG9ydAluZG1fcGFkMjsKKwlpbnQJCW5kbV9pZmluZGV4OwkvKiBMaW5rIGluZGV4CQkJKi8KKwlfX3UxNgkJbmRtX3N0YXRlOworCV9fdTgJCW5kbV9mbGFnczsKKwlfX3U4CQluZG1fdHlwZTsKK307CisKK2VudW0KK3sKKwlOREFfVU5TUEVDLAorCU5EQV9EU1QsCisJTkRBX0xMQUREUiwKKwlOREFfQ0FDSEVJTkZPLAorCU5EQV9QUk9CRVMsCisJX19OREFfTUFYCit9OworCisjZGVmaW5lIE5EQV9NQVggKF9fTkRBX01BWCAtIDEpCisKKyNkZWZpbmUgTkRBX1JUQShyKSAgKChzdHJ1Y3QgcnRhdHRyKikoKChjaGFyKikocikpICsgTkxNU0dfQUxJR04oc2l6ZW9mKHN0cnVjdCBuZG1zZykpKSkKKyNkZWZpbmUgTkRBX1BBWUxPQUQobikgTkxNU0dfUEFZTE9BRChuLHNpemVvZihzdHJ1Y3QgbmRtc2cpKQorCisvKgorICoJTmVpZ2hib3IgQ2FjaGUgRW50cnkgRmxhZ3MKKyAqLworCisjZGVmaW5lIE5URl9QUk9YWQkweDA4CS8qID09IEFURl9QVUJMICovCisjZGVmaW5lIE5URl9ST1VURVIJMHg4MAorCisvKgorICoJTmVpZ2hib3IgQ2FjaGUgRW50cnkgU3RhdGVzLgorICovCisKKyNkZWZpbmUgTlVEX0lOQ09NUExFVEUJMHgwMQorI2RlZmluZSBOVURfUkVBQ0hBQkxFCTB4MDIKKyNkZWZpbmUgTlVEX1NUQUxFCTB4MDQKKyNkZWZpbmUgTlVEX0RFTEFZCTB4MDgKKyNkZWZpbmUgTlVEX1BST0JFCTB4MTAKKyNkZWZpbmUgTlVEX0ZBSUxFRAkweDIwCisKKy8qIER1bW15IHN0YXRlcyAqLworI2RlZmluZSBOVURfTk9BUlAJMHg0MAorI2RlZmluZSBOVURfUEVSTUFORU5UCTB4ODAKKyNkZWZpbmUgTlVEX05PTkUJMHgwMAorCisKK3N0cnVjdCBuZGFfY2FjaGVpbmZvCit7CisJX191MzIJCW5kbV9jb25maXJtZWQ7CisJX191MzIJCW5kbV91c2VkOworCV9fdTMyCQluZG1fdXBkYXRlZDsKKwlfX3UzMgkJbmRtX3JlZmNudDsKK307CisKKy8qKioqCisgKgkJR2VuZXJhbCBmb3JtIG9mIGFkZHJlc3MgZmFtaWx5IGRlcGVuZGVudCBtZXNzYWdlLgorICoqKiovCisKK3N0cnVjdCBydGdlbm1zZworeworCXVuc2lnbmVkIGNoYXIJCXJ0Z2VuX2ZhbWlseTsKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoJCUxpbmsgbGF5ZXIgc3BlY2lmaWMgbWVzc2FnZXMuCisgKioqKi8KKworLyogc3RydWN0IGlmaW5mb21zZworICogcGFzc2VzIGxpbmsgbGV2ZWwgc3BlY2lmaWMgaW5mb3JtYXRpb24sIG5vdCBkZXBlbmRlbnQKKyAqIG9uIG5ldHdvcmsgcHJvdG9jb2wuCisgKi8KKworc3RydWN0IGlmaW5mb21zZworeworCXVuc2lnbmVkIGNoYXIJaWZpX2ZhbWlseTsKKwl1bnNpZ25lZCBjaGFyCV9faWZpX3BhZDsKKwl1bnNpZ25lZCBzaG9ydAlpZmlfdHlwZTsJCS8qIEFSUEhSRF8qICovCisJaW50CQlpZmlfaW5kZXg7CQkvKiBMaW5rIGluZGV4CSovCisJdW5zaWduZWQJaWZpX2ZsYWdzOwkJLyogSUZGXyogZmxhZ3MJKi8KKwl1bnNpZ25lZAlpZmlfY2hhbmdlOwkJLyogSUZGXyogY2hhbmdlIG1hc2sgKi8KK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoJCXByZWZpeCBpbmZvcm1hdGlvbiAKKyAqKioqLworCitzdHJ1Y3QgcHJlZml4bXNnCit7CisJdW5zaWduZWQgY2hhcglwcmVmaXhfZmFtaWx5OworCWludAkJcHJlZml4X2lmaW5kZXg7CisJdW5zaWduZWQgY2hhcglwcmVmaXhfdHlwZTsKKwl1bnNpZ25lZCBjaGFyCXByZWZpeF9sZW47CisJdW5zaWduZWQgY2hhcglwcmVmaXhfZmxhZ3M7Cit9OworCitlbnVtIAoreworCVBSRUZJWF9VTlNQRUMsCisJUFJFRklYX0FERFJFU1MsCisJUFJFRklYX0NBQ0hFSU5GTywKKwlfX1BSRUZJWF9NQVgKK307CisKKyNkZWZpbmUgUFJFRklYX01BWAkoX19QUkVGSVhfTUFYIC0gMSkKKworc3RydWN0IHByZWZpeF9jYWNoZWluZm8KK3sKKwlfX3UzMglwcmVmZXJyZWRfdGltZTsKKwlfX3UzMgl2YWxpZF90aW1lOworfTsKKworLyogVGhlIHN0cnVjdCBzaG91bGQgYmUgaW4gc3luYyB3aXRoIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICovCitzdHJ1Y3QgcnRubF9saW5rX3N0YXRzCit7CisJX191MzIJcnhfcGFja2V0czsJCS8qIHRvdGFsIHBhY2tldHMgcmVjZWl2ZWQJKi8KKwlfX3UzMgl0eF9wYWNrZXRzOwkJLyogdG90YWwgcGFja2V0cyB0cmFuc21pdHRlZAkqLworCV9fdTMyCXJ4X2J5dGVzOwkJLyogdG90YWwgYnl0ZXMgcmVjZWl2ZWQgCSovCisJX191MzIJdHhfYnl0ZXM7CQkvKiB0b3RhbCBieXRlcyB0cmFuc21pdHRlZAkqLworCV9fdTMyCXJ4X2Vycm9yczsJCS8qIGJhZCBwYWNrZXRzIHJlY2VpdmVkCQkqLworCV9fdTMyCXR4X2Vycm9yczsJCS8qIHBhY2tldCB0cmFuc21pdCBwcm9ibGVtcwkqLworCV9fdTMyCXJ4X2Ryb3BwZWQ7CQkvKiBubyBzcGFjZSBpbiBsaW51eCBidWZmZXJzCSovCisJX191MzIJdHhfZHJvcHBlZDsJCS8qIG5vIHNwYWNlIGF2YWlsYWJsZSBpbiBsaW51eAkqLworCV9fdTMyCW11bHRpY2FzdDsJCS8qIG11bHRpY2FzdCBwYWNrZXRzIHJlY2VpdmVkCSovCisJX191MzIJY29sbGlzaW9uczsKKworCS8qIGRldGFpbGVkIHJ4X2Vycm9yczogKi8KKwlfX3UzMglyeF9sZW5ndGhfZXJyb3JzOworCV9fdTMyCXJ4X292ZXJfZXJyb3JzOwkJLyogcmVjZWl2ZXIgcmluZyBidWZmIG92ZXJmbG93CSovCisJX191MzIJcnhfY3JjX2Vycm9yczsJCS8qIHJlY3ZlZCBwa3Qgd2l0aCBjcmMgZXJyb3IJKi8KKwlfX3UzMglyeF9mcmFtZV9lcnJvcnM7CS8qIHJlY3YnZCBmcmFtZSBhbGlnbm1lbnQgZXJyb3IgKi8KKwlfX3UzMglyeF9maWZvX2Vycm9yczsJCS8qIHJlY3YnciBmaWZvIG92ZXJydW4JCSovCisJX191MzIJcnhfbWlzc2VkX2Vycm9yczsJLyogcmVjZWl2ZXIgbWlzc2VkIHBhY2tldAkqLworCisJLyogZGV0YWlsZWQgdHhfZXJyb3JzICovCisJX191MzIJdHhfYWJvcnRlZF9lcnJvcnM7CisJX191MzIJdHhfY2Fycmllcl9lcnJvcnM7CisJX191MzIJdHhfZmlmb19lcnJvcnM7CisJX191MzIJdHhfaGVhcnRiZWF0X2Vycm9yczsKKwlfX3UzMgl0eF93aW5kb3dfZXJyb3JzOworCQorCS8qIGZvciBjc2xpcCBldGMgKi8KKwlfX3UzMglyeF9jb21wcmVzc2VkOworCV9fdTMyCXR4X2NvbXByZXNzZWQ7Cit9OworCisvKiBUaGUgc3RydWN0IHNob3VsZCBiZSBpbiBzeW5jIHdpdGggc3RydWN0IGlmbWFwICovCitzdHJ1Y3QgcnRubF9saW5rX2lmbWFwCit7CisJX191NjQJbWVtX3N0YXJ0OworCV9fdTY0CW1lbV9lbmQ7CisJX191NjQJYmFzZV9hZGRyOworCV9fdTE2CWlycTsKKwlfX3U4CWRtYTsKKwlfX3U4CXBvcnQ7Cit9OworCitlbnVtCit7CisJSUZMQV9VTlNQRUMsCisJSUZMQV9BRERSRVNTLAorCUlGTEFfQlJPQURDQVNULAorCUlGTEFfSUZOQU1FLAorCUlGTEFfTVRVLAorCUlGTEFfTElOSywKKwlJRkxBX1FESVNDLAorCUlGTEFfU1RBVFMsCisJSUZMQV9DT1NULAorI2RlZmluZSBJRkxBX0NPU1QgSUZMQV9DT1NUCisJSUZMQV9QUklPUklUWSwKKyNkZWZpbmUgSUZMQV9QUklPUklUWSBJRkxBX1BSSU9SSVRZCisJSUZMQV9NQVNURVIsCisjZGVmaW5lIElGTEFfTUFTVEVSIElGTEFfTUFTVEVSCisJSUZMQV9XSVJFTEVTUywJCS8qIFdpcmVsZXNzIEV4dGVuc2lvbiBldmVudCAtIHNlZSB3aXJlbGVzcy5oICovCisjZGVmaW5lIElGTEFfV0lSRUxFU1MgSUZMQV9XSVJFTEVTUworCUlGTEFfUFJPVElORk8sCQkvKiBQcm90b2NvbCBzcGVjaWZpYyBpbmZvcm1hdGlvbiBmb3IgYSBsaW5rICovCisjZGVmaW5lIElGTEFfUFJPVElORk8gSUZMQV9QUk9USU5GTworCUlGTEFfVFhRTEVOLAorI2RlZmluZSBJRkxBX1RYUUxFTiBJRkxBX1RYUUxFTgorCUlGTEFfTUFQLAorI2RlZmluZSBJRkxBX01BUCBJRkxBX01BUAorCUlGTEFfV0VJR0hULAorI2RlZmluZSBJRkxBX1dFSUdIVCBJRkxBX1dFSUdIVAorCV9fSUZMQV9NQVgKK307CisKKworI2RlZmluZSBJRkxBX01BWCAoX19JRkxBX01BWCAtIDEpCisKKyNkZWZpbmUgSUZMQV9SVEEocikgICgoc3RydWN0IHJ0YXR0ciopKCgoY2hhciopKHIpKSArIE5MTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgaWZpbmZvbXNnKSkpKQorI2RlZmluZSBJRkxBX1BBWUxPQUQobikgTkxNU0dfUEFZTE9BRChuLHNpemVvZihzdHJ1Y3QgaWZpbmZvbXNnKSkKKworLyogaWZpX2ZsYWdzLgorCisgICBJRkZfKiBmbGFncy4KKworICAgVGhlIG9ubHkgY2hhbmdlIGlzOgorICAgSUZGX0xPT1BCQUNLLCBJRkZfQlJPQURDQVNUIGFuZCBJRkZfUE9JTlRPUE9JTlQgYXJlCisgICBtb3JlIG5vdCBjaGFuZ2VhYmxlIGJ5IHVzZXIuIFRoZXkgZGVzY3JpYmUgbGluayBtZWRpYQorICAgY2hhcmFjdGVyaXN0aWNzIGFuZCBzZXQgYnkgZGV2aWNlIGRyaXZlci4KKworICAgQ29tbWVudHM6CisgICAtIENvbWJpbmF0aW9uIElGRl9CUk9BRENBU1R8SUZGX1BPSU5UT1BPSU5UIGlzIGludmFsaWQKKyAgIC0gSWYgbmVpdGhlciBvZiB0aGVzZSB0aHJlZSBmbGFncyBhcmUgc2V0OworICAgICB0aGUgaW50ZXJmYWNlIGlzIE5CTUEuCisKKyAgIC0gSUZGX01VTFRJQ0FTVCBkb2VzIG5vdCBtZWFuIGFueXRoaW5nIHNwZWNpYWw6CisgICBtdWx0aWNhc3RzIGNhbiBiZSB1c2VkIG9uIGFsbCBub3QtTkJNQSBsaW5rcy4KKyAgIElGRl9NVUxUSUNBU1QgbWVhbnMgdGhhdCB0aGlzIG1lZGlhIHVzZXMgc3BlY2lhbCBlbmNhcHN1bGF0aW9uCisgICBmb3IgbXVsdGljYXN0IGZyYW1lcy4gQXBwYXJlbnRseSwgYWxsIElGRl9QT0lOVE9QT0lOVCBhbmQKKyAgIElGRl9CUk9BRENBU1QgZGV2aWNlcyBhcmUgYWJsZSB0byB1c2UgbXVsdGljYXN0cyB0b28uCisgKi8KKworLyogSUZMQV9MSU5LLgorICAgRm9yIHVzdWFsIGRldmljZXMgaXQgaXMgZXF1YWwgaWZpX2luZGV4LgorICAgSWYgaXQgaXMgYSAidmlydHVhbCBpbnRlcmZhY2UiIChmLmUuIHR1bm5lbCksIGlmaV9saW5rCisgICBjYW4gcG9pbnQgdG8gcmVhbCBwaHlzaWNhbCBpbnRlcmZhY2UgKGYuZS4gZm9yIGJhbmR3aWR0aCBjYWxjdWxhdGlvbnMpLAorICAgb3IgbWF5YmUgMCwgd2hhdCBtZWFucywgdGhhdCByZWFsIG1lZGlhIGlzIHVua25vd24gKHVzdWFsCisgICBmb3IgSVBJUCB0dW5uZWxzLCB3aGVuIHJvdXRlIHRvIGVuZHBvaW50IGlzIGFsbG93ZWQgdG8gY2hhbmdlKQorICovCisKKy8qIFN1YnR5cGUgYXR0cmlidXRlcyBmb3IgSUZMQV9QUk9USU5GTyAqLworZW51bQoreworCUlGTEFfSU5FVDZfVU5TUEVDLAorCUlGTEFfSU5FVDZfRkxBR1MsCS8qIGxpbmsgZmxhZ3MJCQkqLworCUlGTEFfSU5FVDZfQ09ORiwJLyogc3lzY3RsIHBhcmFtZXRlcnMJCSovCisJSUZMQV9JTkVUNl9TVEFUUywJLyogc3RhdGlzdGljcwkJCSovCisJSUZMQV9JTkVUNl9NQ0FTVCwJLyogTUMgdGhpbmdzLiBXaGF0IG9mIHRoZW0/CSovCisJSUZMQV9JTkVUNl9DQUNIRUlORk8sCS8qIHRpbWUgdmFsdWVzIGFuZCBtYXggcmVhc20gc2l6ZSAqLworCV9fSUZMQV9JTkVUNl9NQVgKK307CisKKyNkZWZpbmUgSUZMQV9JTkVUNl9NQVgJKF9fSUZMQV9JTkVUNl9NQVggLSAxKQorCitzdHJ1Y3QgaWZsYV9jYWNoZWluZm8KK3sKKwlfX3UzMgltYXhfcmVhc21fbGVuOworCV9fdTMyCXRzdGFtcDsJCS8qIGlwdjZJbnRlcmZhY2VUYWJsZSB1cGRhdGVkIHRpbWVzdGFtcCAqLworCV9fdTMyCXJlYWNoYWJsZV90aW1lOworCV9fdTMyCXJldHJhbnNfdGltZTsKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoJCVRyYWZmaWMgY29udHJvbCBtZXNzYWdlcy4KKyAqKioqLworCitzdHJ1Y3QgdGNtc2cKK3sKKwl1bnNpZ25lZCBjaGFyCXRjbV9mYW1pbHk7CisJdW5zaWduZWQgY2hhcgl0Y21fX3BhZDE7CisJdW5zaWduZWQgc2hvcnQJdGNtX19wYWQyOworCWludAkJdGNtX2lmaW5kZXg7CisJX191MzIJCXRjbV9oYW5kbGU7CisJX191MzIJCXRjbV9wYXJlbnQ7CisJX191MzIJCXRjbV9pbmZvOworfTsKKworZW51bQoreworCVRDQV9VTlNQRUMsCisJVENBX0tJTkQsCisJVENBX09QVElPTlMsCisJVENBX1NUQVRTLAorCVRDQV9YU1RBVFMsCisJVENBX1JBVEUsCisJVENBX0ZDTlQsCisJVENBX1NUQVRTMiwKKwlfX1RDQV9NQVgKK307CisKKyNkZWZpbmUgVENBX01BWCAoX19UQ0FfTUFYIC0gMSkKKworI2RlZmluZSBUQ0FfUlRBKHIpICAoKHN0cnVjdCBydGF0dHIqKSgoKGNoYXIqKShyKSkgKyBOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IHRjbXNnKSkpKQorI2RlZmluZSBUQ0FfUEFZTE9BRChuKSBOTE1TR19QQVlMT0FEKG4sc2l6ZW9mKHN0cnVjdCB0Y21zZykpCisKKworLyogUlRuZXRsaW5rIG11bHRpY2FzdCBncm91cHMgKi8KKworI2RlZmluZSBSVE1HUlBfTElOSwkJMQorI2RlZmluZSBSVE1HUlBfTk9USUZZCQkyCisjZGVmaW5lIFJUTUdSUF9ORUlHSAkJNAorI2RlZmluZSBSVE1HUlBfVEMJCTgKKworI2RlZmluZSBSVE1HUlBfSVBWNF9JRkFERFIJMHgxMAorI2RlZmluZSBSVE1HUlBfSVBWNF9NUk9VVEUJMHgyMAorI2RlZmluZSBSVE1HUlBfSVBWNF9ST1VURQkweDQwCisKKyNkZWZpbmUgUlRNR1JQX0lQVjZfSUZBRERSCTB4MTAwCisjZGVmaW5lIFJUTUdSUF9JUFY2X01ST1VURQkweDIwMAorI2RlZmluZSBSVE1HUlBfSVBWNl9ST1VURQkweDQwMAorI2RlZmluZSBSVE1HUlBfSVBWNl9JRklORk8JMHg4MDAKKworI2RlZmluZSBSVE1HUlBfREVDbmV0X0lGQUREUiAgICAweDEwMDAKKyNkZWZpbmUgUlRNR1JQX0RFQ25ldF9ST1VURSAgICAgMHg0MDAwCisKKyNkZWZpbmUgUlRNR1JQX0lQVjZfUFJFRklYCTB4MjAwMDAKKworLyogVEMgYWN0aW9uIHBpZWNlICovCitzdHJ1Y3QgdGNhbXNnCit7CisJdW5zaWduZWQgY2hhcgl0Y2FfZmFtaWx5OworCXVuc2lnbmVkIGNoYXIJdGNhX19wYWQxOworCXVuc2lnbmVkIHNob3J0CXRjYV9fcGFkMjsKK307CisjZGVmaW5lIFRBX1JUQShyKSAgKChzdHJ1Y3QgcnRhdHRyKikoKChjaGFyKikocikpICsgTkxNU0dfQUxJR04oc2l6ZW9mKHN0cnVjdCB0Y2Ftc2cpKSkpCisjZGVmaW5lIFRBX1BBWUxPQUQobikgTkxNU0dfUEFZTE9BRChuLHNpemVvZihzdHJ1Y3QgdGNhbXNnKSkKKyNkZWZpbmUgVENBX0FDVF9UQUIgMSAvKiBhdHRyIHR5cGUgbXVzdCBiZSA+PTEgKi8JCisjZGVmaW5lIFRDQUFfTUFYIDEKKworLyogRW5kIG9mIGluZm9ybWF0aW9uIGV4cG9ydGVkIHRvIHVzZXIgbGV2ZWwgKi8KKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCitleHRlcm4gc2l6ZV90IHJ0YXR0cl9zdHJsY3B5KGNoYXIgKmRlc3QsIGNvbnN0IHN0cnVjdCBydGF0dHIgKnJ0YSwgc2l6ZV90IHNpemUpOworc3RhdGljIF9faW5saW5lX18gaW50IHJ0YXR0cl9zdHJjbXAoY29uc3Qgc3RydWN0IHJ0YXR0ciAqcnRhLCBjb25zdCBjaGFyICpzdHIpCit7CisJaW50IGxlbiA9IHN0cmxlbihzdHIpICsgMTsKKwlyZXR1cm4gbGVuID4gcnRhLT5ydGFfbGVuIHx8IG1lbWNtcChSVEFfREFUQShydGEpLCBzdHIsIGxlbik7Cit9CisKK2V4dGVybiBpbnQgcnRhdHRyX3BhcnNlKHN0cnVjdCBydGF0dHIgKnRiW10sIGludCBtYXhhdHRyLCBzdHJ1Y3QgcnRhdHRyICpydGEsIGludCBsZW4pOworCisjZGVmaW5lIHJ0YXR0cl9wYXJzZV9uZXN0ZWQodGIsIG1heCwgcnRhKSBcCisJcnRhdHRyX3BhcnNlKCh0YiksIChtYXgpLCBSVEFfREFUQSgocnRhKSksIFJUQV9QQVlMT0FEKChydGEpKSkKKworZXh0ZXJuIHN0cnVjdCBzb2NrICpydG5sOworCitzdHJ1Y3QgcnRuZXRsaW5rX2xpbmsKK3sKKwlpbnQgKCpkb2l0KShzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3Qgbmxtc2doZHIqLCB2b2lkICphdHRyKTsKKwlpbnQgKCpkdW1waXQpKHN0cnVjdCBza19idWZmICosIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7Cit9OworCitleHRlcm4gc3RydWN0IHJ0bmV0bGlua19saW5rICogcnRuZXRsaW5rX2xpbmtzW05QUk9UT107CitleHRlcm4gaW50IHJ0bmV0bGlua19zZW5kKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBncm91cCwgaW50IGVjaG8pOworZXh0ZXJuIGludCBydG5ldGxpbmtfcHV0X21ldHJpY3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyICptZXRyaWNzKTsKKworZXh0ZXJuIHZvaWQgX19ydGFfZmlsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYXR0cnR5cGUsIGludCBhdHRybGVuLCBjb25zdCB2b2lkICpkYXRhKTsKKworI2RlZmluZSBSVEFfUFVUKHNrYiwgYXR0cnR5cGUsIGF0dHJsZW4sIGRhdGEpIFwKKyh7CWlmICh1bmxpa2VseShza2JfdGFpbHJvb20oc2tiKSA8IChpbnQpUlRBX1NQQUNFKGF0dHJsZW4pKSkgXAorCQkgZ290byBydGF0dHJfZmFpbHVyZTsgXAorICAgCV9fcnRhX2ZpbGwoc2tiLCBhdHRydHlwZSwgYXR0cmxlbiwgZGF0YSk7IH0pIAorCisjZGVmaW5lIFJUQV9QVVRfTk9IRFIoc2tiLCBhdHRybGVuLCBkYXRhKSBcCisoewlpZiAodW5saWtlbHkoc2tiX3RhaWxyb29tKHNrYikgPCAoaW50KShhdHRybGVuKSkpIFwKKwkJZ290byBydGF0dHJfZmFpbHVyZTsgXAorCW1lbWNweShza2JfcHV0KHNrYiwgUlRBX0FMSUdOKGF0dHJsZW4pKSwgZGF0YSwgYXR0cmxlbik7IH0pCisJCQorc3RhdGljIGlubGluZSBzdHJ1Y3QgcnRhdHRyICoKK19fcnRhX3Jlc2VydmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJ0eXBlLCBpbnQgYXR0cmxlbikKK3sKKwlzdHJ1Y3QgcnRhdHRyICpydGE7CisJaW50IHNpemUgPSBSVEFfTEVOR1RIKGF0dHJsZW4pOworCisJcnRhID0gKHN0cnVjdCBydGF0dHIqKXNrYl9wdXQoc2tiLCBSVEFfQUxJR04oc2l6ZSkpOworCXJ0YS0+cnRhX3R5cGUgPSBhdHRydHlwZTsKKwlydGEtPnJ0YV9sZW4gPSBzaXplOworCXJldHVybiBydGE7Cit9CisKKyNkZWZpbmUgX19SVEFfUFVUKHNrYiwgYXR0cnR5cGUsIGF0dHJsZW4pIFwKKyh7IAlpZiAodW5saWtlbHkoc2tiX3RhaWxyb29tKHNrYikgPCAoaW50KVJUQV9TUEFDRShhdHRybGVuKSkpIFwKKwkJZ290byBydGF0dHJfZmFpbHVyZTsgXAorICAgCV9fcnRhX3Jlc2VydmUoc2tiLCBhdHRydHlwZSwgYXR0cmxlbik7IH0pCisKK2V4dGVybiB2b2lkIHJ0bXNnX2lmaW5mbyhpbnQgdHlwZSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgY2hhbmdlKTsKKworZXh0ZXJuIHN0cnVjdCBzZW1hcGhvcmUgcnRubF9zZW07CisKKyNkZWZpbmUgcnRubF9zaGxvY2soKQkJZG93bigmcnRubF9zZW0pCisjZGVmaW5lIHJ0bmxfc2hsb2NrX25vd2FpdCgpCWRvd25fdHJ5bG9jaygmcnRubF9zZW0pCisKKyNkZWZpbmUgcnRubF9zaHVubG9jaygpCWRvIHsgdXAoJnJ0bmxfc2VtKTsgXAorCQkgICAgICAgICAgICAgaWYgKHJ0bmwgJiYgcnRubC0+c2tfcmVjZWl2ZV9xdWV1ZS5xbGVuKSBcCisJCQkJICAgICBydG5sLT5za19kYXRhX3JlYWR5KHJ0bmwsIDApOyBcCisJCSAgICAgICAgfSB3aGlsZSgwKQorCitleHRlcm4gdm9pZCBydG5sX2xvY2sodm9pZCk7CitleHRlcm4gaW50IHJ0bmxfbG9ja19pbnRlcnJ1cHRpYmxlKHZvaWQpOworZXh0ZXJuIHZvaWQgcnRubF91bmxvY2sodm9pZCk7CitleHRlcm4gdm9pZCBydG5ldGxpbmtfaW5pdCh2b2lkKTsKKworI2RlZmluZSBBU1NFUlRfUlROTCgpIGRvIHsgXAorCWlmICh1bmxpa2VseShkb3duX3RyeWxvY2soJnJ0bmxfc2VtKSA9PSAwKSkgeyBcCisJCXVwKCZydG5sX3NlbSk7IFwKKwkJcHJpbnRrKEtFUk5fRVJSICJSVE5MOiBhc3NlcnRpb24gZmFpbGVkIGF0ICVzICglZClcbiIsIFwKKwkJICAgICAgIF9fRklMRV9fLCAgX19MSU5FX18pOyBcCisJCWR1bXBfc3RhY2soKTsgXAorCX0gXAorfSB3aGlsZSgwKQorCisjZGVmaW5lIEJVR19UUkFQKHgpIGRvIHsgXAorCWlmICh1bmxpa2VseSghKHgpKSkgeyBcCisJCXByaW50ayhLRVJOX0VSUiAiS0VSTkVMOiBhc3NlcnRpb24gKCVzKSBmYWlsZWQgYXQgJXMgKCVkKVxuIiwgXAorCQkJI3gsICBfX0ZJTEVfXyAsIF9fTElORV9fKTsgXAorCX0gXAorfSB3aGlsZSgwKQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisKKyNlbmRpZgkvKiBfX0xJTlVYX1JUTkVUTElOS19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3J3c2VtLXNwaW5sb2NrLmggYi9pbmNsdWRlL2xpbnV4L3J3c2VtLXNwaW5sb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjUyYTJhZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvcndzZW0tc3BpbmxvY2suaApAQCAtMCwwICsxLDY1IEBACisvKiByd3NlbS1zcGlubG9jay5oOiBmYWxsYmFjayBDIGltcGxlbWVudGF0aW9uCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAxICAgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkuCisgKiAtIERlcml2ZWQgcGFydGlhbGx5IGZyb20gaWRlYXMgYnkgQW5kcmVhIEFyY2FuZ2VsaSA8YW5kcmVhQHN1c2UuZGU+CisgKiAtIERlcml2ZWQgYWxzbyBmcm9tIGNvbW1lbnRzIGJ5IExpbnVzCisgKi8KKworI2lmbmRlZiBfTElOVVhfUldTRU1fU1BJTkxPQ0tfSAorI2RlZmluZSBfTElOVVhfUldTRU1fU1BJTkxPQ0tfSAorCisjaWZuZGVmIF9MSU5VWF9SV1NFTV9ICisjZXJyb3IgInBsZWFzZSBkb24ndCBpbmNsdWRlIGxpbnV4L3J3c2VtLXNwaW5sb2NrLmggZGlyZWN0bHksIHVzZSBsaW51eC9yd3NlbS5oIGluc3RlYWQiCisjZW5kaWYKKworI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IHJ3c2VtX3dhaXRlcjsKKworLyoKKyAqIHRoZSBydy1zZW1hcGhvcmUgZGVmaW5pdGlvbgorICogLSBpZiBhY3Rpdml0eSBpcyAwIHRoZW4gdGhlcmUgYXJlIG5vIGFjdGl2ZSByZWFkZXJzIG9yIHdyaXRlcnMKKyAqIC0gaWYgYWN0aXZpdHkgaXMgK3ZlIHRoZW4gdGhhdCBpcyB0aGUgbnVtYmVyIG9mIGFjdGl2ZSByZWFkZXJzCisgKiAtIGlmIGFjdGl2aXR5IGlzIC0xIHRoZW4gdGhlcmUgaXMgb25lIGFjdGl2ZSB3cml0ZXIKKyAqIC0gaWYgd2FpdF9saXN0IGlzIG5vdCBlbXB0eSwgdGhlbiB0aGVyZSBhcmUgcHJvY2Vzc2VzIHdhaXRpbmcgZm9yIHRoZSBzZW1hcGhvcmUKKyAqLworc3RydWN0IHJ3X3NlbWFwaG9yZSB7CisJX19zMzIJCQlhY3Rpdml0eTsKKwlzcGlubG9ja190CQl3YWl0X2xvY2s7CisJc3RydWN0IGxpc3RfaGVhZAl3YWl0X2xpc3Q7CisjaWYgUldTRU1fREVCVUcKKwlpbnQJCQlkZWJ1ZzsKKyNlbmRpZgorfTsKKworLyoKKyAqIGluaXRpYWxpc2F0aW9uCisgKi8KKyNpZiBSV1NFTV9ERUJVRworI2RlZmluZSBfX1JXU0VNX0RFQlVHX0lOSVQgICAgICAsIDAKKyNlbHNlCisjZGVmaW5lIF9fUldTRU1fREVCVUdfSU5JVAkvKiAqLworI2VuZGlmCisKKyNkZWZpbmUgX19SV1NFTV9JTklUSUFMSVpFUihuYW1lKSBcCit7IDAsIFNQSU5fTE9DS19VTkxPQ0tFRCwgTElTVF9IRUFEX0lOSVQoKG5hbWUpLndhaXRfbGlzdCkgX19SV1NFTV9ERUJVR19JTklUIH0KKworI2RlZmluZSBERUNMQVJFX1JXU0VNKG5hbWUpIFwKKwlzdHJ1Y3Qgcndfc2VtYXBob3JlIG5hbWUgPSBfX1JXU0VNX0lOSVRJQUxJWkVSKG5hbWUpCisKK2V4dGVybiB2b2lkIEZBU1RDQUxMKGluaXRfcndzZW0oc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKSk7CitleHRlcm4gdm9pZCBGQVNUQ0FMTChfX2Rvd25fcmVhZChzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pKTsKK2V4dGVybiBpbnQgRkFTVENBTEwoX19kb3duX3JlYWRfdHJ5bG9jayhzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pKTsKK2V4dGVybiB2b2lkIEZBU1RDQUxMKF9fZG93bl93cml0ZShzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pKTsKK2V4dGVybiBpbnQgRkFTVENBTEwoX19kb3duX3dyaXRlX3RyeWxvY2soc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKSk7CitleHRlcm4gdm9pZCBGQVNUQ0FMTChfX3VwX3JlYWQoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKSk7CitleHRlcm4gdm9pZCBGQVNUQ0FMTChfX3VwX3dyaXRlKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkpOworZXh0ZXJuIHZvaWQgRkFTVENBTEwoX19kb3duZ3JhZGVfd3JpdGUoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKSk7CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYgLyogX0xJTlVYX1JXU0VNX1NQSU5MT0NLX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcndzZW0uaCBiL2luY2x1ZGUvbGludXgvcndzZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmI5ODg4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9yd3NlbS5oCkBAIC0wLDAgKzEsMTE1IEBACisvKiByd3NlbS5oOiBSL1cgc2VtYXBob3JlcywgcHVibGljIGludGVyZmFjZQorICoKKyAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkuCisgKiBEZXJpdmVkIGZyb20gYXNtLWkzODYvc2VtYXBob3JlLmgKKyAqLworCisjaWZuZGVmIF9MSU5VWF9SV1NFTV9ICisjZGVmaW5lIF9MSU5VWF9SV1NFTV9ICisKKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisKKyNkZWZpbmUgUldTRU1fREVCVUcgMAorCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorCitzdHJ1Y3Qgcndfc2VtYXBob3JlOworCisjaWZkZWYgQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0sKKyNpbmNsdWRlIDxsaW51eC9yd3NlbS1zcGlubG9jay5oPiAvKiB1c2UgYSBnZW5lcmljIGltcGxlbWVudGF0aW9uICovCisjZWxzZQorI2luY2x1ZGUgPGFzbS9yd3NlbS5oPiAvKiB1c2UgYW4gYXJjaC1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiAqLworI2VuZGlmCisKKyNpZm5kZWYgcndzZW10cmFjZQorI2lmIFJXU0VNX0RFQlVHCitleHRlcm4gdm9pZCBGQVNUQ0FMTChyd3NlbXRyYWNlKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSwgY29uc3QgY2hhciAqc3RyKSk7CisjZWxzZQorI2RlZmluZSByd3NlbXRyYWNlKFNFTSxGTVQpCisjZW5kaWYKKyNlbmRpZgorCisvKgorICogbG9jayBmb3IgcmVhZGluZworICovCitzdGF0aWMgaW5saW5lIHZvaWQgZG93bl9yZWFkKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKK3sKKwltaWdodF9zbGVlcCgpOworCXJ3c2VtdHJhY2Uoc2VtLCJFbnRlcmluZyBkb3duX3JlYWQiKTsKKwlfX2Rvd25fcmVhZChzZW0pOworCXJ3c2VtdHJhY2Uoc2VtLCJMZWF2aW5nIGRvd25fcmVhZCIpOworfQorCisvKgorICogdHJ5bG9jayBmb3IgcmVhZGluZyAtLSByZXR1cm5zIDEgaWYgc3VjY2Vzc2Z1bCwgMCBpZiBjb250ZW50aW9uCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGRvd25fcmVhZF90cnlsb2NrKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKK3sKKwlpbnQgcmV0OworCXJ3c2VtdHJhY2Uoc2VtLCJFbnRlcmluZyBkb3duX3JlYWRfdHJ5bG9jayIpOworCXJldCA9IF9fZG93bl9yZWFkX3RyeWxvY2soc2VtKTsKKwlyd3NlbXRyYWNlKHNlbSwiTGVhdmluZyBkb3duX3JlYWRfdHJ5bG9jayIpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBsb2NrIGZvciB3cml0aW5nCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBkb3duX3dyaXRlKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKK3sKKwltaWdodF9zbGVlcCgpOworCXJ3c2VtdHJhY2Uoc2VtLCJFbnRlcmluZyBkb3duX3dyaXRlIik7CisJX19kb3duX3dyaXRlKHNlbSk7CisJcndzZW10cmFjZShzZW0sIkxlYXZpbmcgZG93bl93cml0ZSIpOworfQorCisvKgorICogdHJ5bG9jayBmb3Igd3JpdGluZyAtLSByZXR1cm5zIDEgaWYgc3VjY2Vzc2Z1bCwgMCBpZiBjb250ZW50aW9uCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGRvd25fd3JpdGVfdHJ5bG9jayhzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCit7CisJaW50IHJldDsKKwlyd3NlbXRyYWNlKHNlbSwiRW50ZXJpbmcgZG93bl93cml0ZV90cnlsb2NrIik7CisJcmV0ID0gX19kb3duX3dyaXRlX3RyeWxvY2soc2VtKTsKKwlyd3NlbXRyYWNlKHNlbSwiTGVhdmluZyBkb3duX3dyaXRlX3RyeWxvY2siKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogcmVsZWFzZSBhIHJlYWQgbG9jaworICovCitzdGF0aWMgaW5saW5lIHZvaWQgdXBfcmVhZChzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCit7CisJcndzZW10cmFjZShzZW0sIkVudGVyaW5nIHVwX3JlYWQiKTsKKwlfX3VwX3JlYWQoc2VtKTsKKwlyd3NlbXRyYWNlKHNlbSwiTGVhdmluZyB1cF9yZWFkIik7Cit9CisKKy8qCisgKiByZWxlYXNlIGEgd3JpdGUgbG9jaworICovCitzdGF0aWMgaW5saW5lIHZvaWQgdXBfd3JpdGUoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQoreworCXJ3c2VtdHJhY2Uoc2VtLCJFbnRlcmluZyB1cF93cml0ZSIpOworCV9fdXBfd3JpdGUoc2VtKTsKKwlyd3NlbXRyYWNlKHNlbSwiTGVhdmluZyB1cF93cml0ZSIpOworfQorCisvKgorICogZG93bmdyYWRlIHdyaXRlIGxvY2sgdG8gcmVhZCBsb2NrCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBkb3duZ3JhZGVfd3JpdGUoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQoreworCXJ3c2VtdHJhY2Uoc2VtLCJFbnRlcmluZyBkb3duZ3JhZGVfd3JpdGUiKTsKKwlfX2Rvd25ncmFkZV93cml0ZShzZW0pOworCXJ3c2VtdHJhY2Uoc2VtLCJMZWF2aW5nIGRvd25ncmFkZV93cml0ZSIpOworfQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9MSU5VWF9SV1NFTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjMjYxOTguaCBiL2luY2x1ZGUvbGludXgvc2MyNjE5OC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjYTM1YWIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3NjMjYxOTguaApAQCAtMCwwICsxLDUzMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICoJc2MyNjE5OC5oICAtLSBTQzI2MTk4IFVBUlQgaGFyZHdhcmUgaW5mby4KKyAqCisgKglDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCAgU3RhbGxpb24gVGVjaG5vbG9naWVzCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKgl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICoJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqCWJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKglNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKglHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqCVlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKglhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICoJRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZglfU0MyNjE5OF9ICisjZGVmaW5lCV9TQzI2MTk4X0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCURlZmluZSB0aGUgbnVtYmVyIG9mIGFzeW5jIHBvcnRzIHBlciBzYzI2MTk4IHVhcnQgZGV2aWNlLgorICovCisjZGVmaW5lCVNDMjYxOThfUE9SVFMJCTgKKworLyoKKyAqCUJhdWQgcmF0ZSB0aW1pbmcgY2xvY2tzLiBBbGwgZGVyaXZlZCBmcm9tIGEgbWFzdGVyIDE0Ljc0NTYgTUh6IGNsb2NrLgorICovCisjZGVmaW5lCVNDMjYxOThfTUFTVEVSQ0xPQ0sJMTQ3NDU2MDBMCisjZGVmaW5lCVNDMjYxOThfRENMSwkJKFNDMjYxOThfTUFTVEVSQ0xPQ0spCisjZGVmaW5lCVNDMjYxOThfQ0NMSwkJKFNDMjYxOThfTUFTVEVSQ0xPQ0sgLyAyKQorI2RlZmluZQlTQzI2MTk4X0JDTEsJCShTQzI2MTk4X01BU1RFUkNMT0NLIC8gNCkKKworLyoKKyAqCURlZmluZSBpbnRlcm5hbCBGSUZPIHNpemVzIGZvciB0aGUgMjYxOTggcG9ydHMuCisgKi8KKyNkZWZpbmUJU0MyNjE5OF9UWEZJRk9TSVpFCTE2CisjZGVmaW5lCVNDMjYxOThfUlhGSUZPU0laRQkxNgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKglHbG9iYWwgcmVnaXN0ZXIgZGVmaW5pdGlvbnMuIFRoZXNlIHJlZ2lzdGVycyBhcmUgZ2xvYmFsIHRvIGVhY2ggMjYxOTgKKyAqCWRldmljZSwgbm90IHNwZWNpZmljIHBvcnRzIG9uIGl0LgorICovCisjZGVmaW5lCVRTVFIJCTB4MGQKKyNkZWZpbmUJR0NDUgkJMHgwZgorI2RlZmluZQlJQ1IJCTB4MWIKKyNkZWZpbmUJV0RUUkNSCQkweDFkCisjZGVmaW5lCUlWUgkJMHgxZgorI2RlZmluZQlCUkdUUlVBCQkweDg0CisjZGVmaW5lCUdQT1NSCQkweDg3CisjZGVmaW5lCUdQT0MJCTB4OGIKKyNkZWZpbmUJVUNJUgkJMHg4YworI2RlZmluZQlDSVIJCTB4OGMKKyNkZWZpbmUJQlJHVFJVQgkJMHg4ZAorI2RlZmluZQlHUlhGSUZPCQkweDhlCisjZGVmaW5lCUdUWEZJRk8JCTB4OGUKKyNkZWZpbmUJR0NDUjIJCTB4OGYKKyNkZWZpbmUJQlJHVFJMQQkJMHg5NAorI2RlZmluZQlHUE9SCQkweDk3CisjZGVmaW5lCUdQT0QJCTB4OWIKKyNkZWZpbmUJQlJHVENSCQkweDljCisjZGVmaW5lCUdJQ1IJCTB4OWMKKyNkZWZpbmUJQlJHVFJMQgkJMHg5ZAorI2RlZmluZQlHSUJDUgkJMHg5ZAorI2RlZmluZQlHSVRSCQkweDlmCisKKy8qCisgKglQZXIgcG9ydCBjaGFubmVsIHJlZ2lzdGVycy4gVGhlc2UgYXJlIHRoZSByZWdpc3RlciBvZmZzZXRzIHdpdGhpbgorICoJdGhlIHBvcnQgYWRkcmVzcyBzcGFjZSwgc28gbmVlZCB0byBoYXZlIHRoZSBwb3J0IGFkZHJlc3MgKDAgdG8gNykKKyAqCWluc2VydGVkIGluIGJpdCBwb3NpdGlvbnMgNDo2LgorICovCisjZGVmaW5lCU1SMAkJMHgwMAorI2RlZmluZQlNUjEJCTB4MDEKKyNkZWZpbmUJSU9QQ1IJCTB4MDIKKyNkZWZpbmUJQkNSQlJLCQkweDAzCisjZGVmaW5lCUJDUkNPUwkJMHgwNAorI2RlZmluZQlCQ1JYCQkweDA2CisjZGVmaW5lCUJDUkEJCTB4MDcKKyNkZWZpbmUJWE9OQ1IJCTB4MDgKKyNkZWZpbmUJWE9GRkNSCQkweDA5CisjZGVmaW5lCUFSQ1IJCTB4MGEKKyNkZWZpbmUJUlhDU1IJCTB4MGMKKyNkZWZpbmUJVFhDU1IJCTB4MGUKKyNkZWZpbmUJTVIyCQkweDgwCisjZGVmaW5lCVNSCQkweDgxCisjZGVmaW5lIFNDQ1IJCTB4ODEKKyNkZWZpbmUJSVNSCQkweDgyCisjZGVmaW5lCUlNUgkJMHg4MgorI2RlZmluZQlUWEZJRk8JCTB4ODMKKyNkZWZpbmUJUlhGSUZPCQkweDgzCisjZGVmaW5lCUlQUgkJMHg4NAorI2RlZmluZQlJT1BJT1IJCTB4ODUKKyNkZWZpbmUJWElTUgkJMHg4NgorCisvKgorICoJRm9yIGFueSBnaXZlbiBwb3J0IGNhbGN1bGF0ZSB0aGUgYWRkcmVzcyB0byB1c2UgdG8gYWNjZXNzIGEgc3BlY2lmaWVkCisgKglyZWdpc3Rlci4gVGhpcyBpcyBvbmx5IHVzZWQgZm9yIHVudXN1YWwgYWNjZXNzLCBtb3N0bHkgdGhpcyBpcyBkb25lCisgKgl0aHJvdWdoIHRoZSBhc3NlbWJsZXIgYWNjZXNzIHJvdXRpbmVzLgorICovCisjZGVmaW5lCVNDMjYxOThfUE9SVFJFRyhwb3J0LHJlZykJKCgoKHBvcnQpICYgMHgwNykgPDwgNCkgfCAocmVnKSkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICoJR2xvYmFsIGNvbmZpZ3VyYXRpb24gY29udHJvbCByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMuCisgKi8KKyNkZWZpbmUJR0NDUl9OT0FDSwkJMHgwMAorI2RlZmluZQlHQ0NSX0lWUkFDSwkJMHgwMgorI2RlZmluZQlHQ0NSX0lWUkNIQU5BQ0sJCTB4MDQKKyNkZWZpbmUJR0NDUl9JVlJUWVBDSEFOQUNLCTB4MDYKKyNkZWZpbmUJR0NDUl9BU1lOQ0NZQ0xFCQkweDAwCisjZGVmaW5lCUdDQ1JfU1lOQ0NZQ0xFCQkweDQwCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCU1vZGUgcmVnaXN0ZXIgMCBiaXQgZGVmaW5pdGlvbnMuCisgKi8KKyNkZWZpbmUJTVIwX0FERFJOT05FCQkweDAwCisjZGVmaW5lCU1SMF9BVVRPV0FLRQkJMHgwMQorI2RlZmluZQlNUjBfQVVUT0RPWkUJCTB4MDIKKyNkZWZpbmUJTVIwX0FVVE9XQUtFRE9aRQkweDAzCisjZGVmaW5lCU1SMF9TV0ZOT05FCQkweDAwCisjZGVmaW5lCU1SMF9TV0ZUWAkJMHgwNAorI2RlZmluZQlNUjBfU1dGUlgJCTB4MDgKKyNkZWZpbmUJTVIwX1NXRlJYVFgJCTB4MGMKKyNkZWZpbmUJTVIwX1RYTUFTSwkJMHgzMAorI2RlZmluZQlNUjBfVFhFTVBUWQkJMHgwMAorI2RlZmluZQlNUjBfVFhISUdICQkweDEwCisjZGVmaW5lCU1SMF9UWEhBTEYJCTB4MjAKKyNkZWZpbmUJTVIwX1RYUkRZCQkweDAwCisjZGVmaW5lCU1SMF9BRERSTlQJCTB4MDAKKyNkZWZpbmUJTVIwX0FERFJUCQkweDQwCisjZGVmaW5lCU1SMF9TV0ZOVAkJMHgwMAorI2RlZmluZQlNUjBfU1dGVAkJMHg4MAorCisvKgorICoJTW9kZSByZWdpc3RlciAxIGJpdCBkZWZpbml0aW9ucy4KKyAqLworI2RlZmluZQlNUjFfQ1M1CQkJMHgwMAorI2RlZmluZQlNUjFfQ1M2CQkJMHgwMQorI2RlZmluZQlNUjFfQ1M3CQkJMHgwMgorI2RlZmluZQlNUjFfQ1M4CQkJMHgwMworI2RlZmluZQlNUjFfUEFSRVZFTgkJMHgwMAorI2RlZmluZQlNUjFfUEFST0RECQkweDA0CisjZGVmaW5lCU1SMV9QQVJFTkIJCTB4MDAKKyNkZWZpbmUJTVIxX1BBUkZPUkNFCQkweDA4CisjZGVmaW5lCU1SMV9QQVJOT05FCQkweDEwCisjZGVmaW5lCU1SMV9QQVJTUEVDSUFMCQkweDE4CisjZGVmaW5lCU1SMV9FUlJDSEFSCQkweDAwCisjZGVmaW5lCU1SMV9FUlJCTE9DSwkJMHgyMAorI2RlZmluZQlNUjFfSVNSVU5NQVNLRUQJCTB4MDAKKyNkZWZpbmUJTVIxX0lTUk1BU0tFRAkJMHg0MAorI2RlZmluZQlNUjFfQVVUT1JUUwkJMHg4MAorCisvKgorICoJTW9kZSByZWdpc3RlciAyIGJpdCBkZWZpbml0aW9ucy4KKyAqLworI2RlZmluZQlNUjJfU1RPUDEJCTB4MDAKKyNkZWZpbmUJTVIyX1NUT1AxNQkJMHgwMQorI2RlZmluZQlNUjJfU1RPUDIJCTB4MDIKKyNkZWZpbmUJTVIyX1NUT1A5MTYJCTB4MDMKKyNkZWZpbmUJTVIyX1JYRklGT1JEWQkJMHgwMAorI2RlZmluZQlNUjJfUlhGSUZPSEFMRgkJMHgwNAorI2RlZmluZQlNUjJfUlhGSUZPSElHSAkJMHgwOAorI2RlZmluZQlNUjJfUlhGSUZPRlVMTAkJMHgwYworI2RlZmluZQlNUjJfQVVUT0NUUwkJMHgxMAorI2RlZmluZQlNUjJfVFhSVFMJCTB4MjAKKyNkZWZpbmUJTVIyX01PREVOT1JNCQkweDAwCisjZGVmaW5lCU1SMl9NT0RFQVVUT0VDSE8JMHg0MAorI2RlZmluZQlNUjJfTU9ERUxPT1AJCTB4ODAKKyNkZWZpbmUJTVIyX01PREVSRU1FQ0hPCQkweGMwCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCUJhdWQgUmF0ZSBHZW5lcmF0b3IgKEJSRykgc2VsZWN0b3IgdmFsdWVzLgorICovCisjZGVmaW5lCUJSR181MAkJCTB4MDAKKyNkZWZpbmUJQlJHXzc1CQkJMHgwMQorI2RlZmluZQlCUkdfMTUwCQkJMHgwMgorI2RlZmluZQlCUkdfMjAwCQkJMHgwMworI2RlZmluZQlCUkdfMzAwCQkJMHgwNAorI2RlZmluZQlCUkdfNDUwCQkJMHgwNQorI2RlZmluZQlCUkdfNjAwCQkJMHgwNgorI2RlZmluZQlCUkdfOTAwCQkJMHgwNworI2RlZmluZQlCUkdfMTIwMAkJMHgwOAorI2RlZmluZQlCUkdfMTgwMAkJMHgwOQorI2RlZmluZQlCUkdfMjQwMAkJMHgwYQorI2RlZmluZQlCUkdfMzYwMAkJMHgwYgorI2RlZmluZQlCUkdfNDgwMAkJMHgwYworI2RlZmluZQlCUkdfNzIwMAkJMHgwZAorI2RlZmluZQlCUkdfOTYwMAkJMHgwZQorI2RlZmluZQlCUkdfMTQ0MDAJCTB4MGYKKyNkZWZpbmUJQlJHXzE5MjAwCQkweDEwCisjZGVmaW5lCUJSR18yODIwMAkJMHgxMQorI2RlZmluZQlCUkdfMzg0MDAJCTB4MTIKKyNkZWZpbmUJQlJHXzU3NjAwCQkweDEzCisjZGVmaW5lCUJSR18xMTUyMDAJCTB4MTQKKyNkZWZpbmUJQlJHXzIzMDQwMAkJMHgxNQorI2RlZmluZQlCUkdfR0lOMAkJMHgxNgorI2RlZmluZQlCUkdfR0lOMQkJMHgxNworI2RlZmluZQlCUkdfQ1QwCQkJMHgxOAorI2RlZmluZQlCUkdfQ1QxCQkJMHgxOQorI2RlZmluZQlCUkdfUlgyVFgzMTYJCTB4MWIKKyNkZWZpbmUJQlJHX1JYMlRYMzEJCTB4MWMKKworI2RlZmluZQlTQzI2MTk4X01BWEJBVUQJCTkyMTYwMAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKglDb21tYW5kIHJlZ2lzdGVyIGNvbW1hbmQgZGVmaW5pdGlvbnMuCisgKi8KKyNkZWZpbmUJQ1JfTlVMTAkJCTB4MDQKKyNkZWZpbmUJQ1JfQUREUk5PUk1BTAkJMHgwYworI2RlZmluZQlDUl9SWFJFU0VUCQkweDE0CisjZGVmaW5lCUNSX1RYUkVTRVQJCTB4MWMKKyNkZWZpbmUJQ1JfQ0xFQVJSWEVSUgkJMHgyNAorI2RlZmluZQlDUl9CUkVBS1JFU0VUCQkweDJjCisjZGVmaW5lCUNSX1RYU1RBUlRCUkVBSwkJMHgzNAorI2RlZmluZQlDUl9UWFNUT1BCUkVBSwkJMHgzYworI2RlZmluZQlDUl9SVFNPTgkJMHg0NAorI2RlZmluZQlDUl9SVFNPRkYJCTB4NGMKKyNkZWZpbmUJQ1JfQUREUklOSVQJCTB4NWMKKyNkZWZpbmUJQ1JfUlhFUlJCTE9DSwkJMHg2YworI2RlZmluZQlDUl9UWFNFTkRYT04JCTB4ODQKKyNkZWZpbmUJQ1JfVFhTRU5EWE9GRgkJMHg4YworI2RlZmluZQlDUl9HQU5HWE9OU0VUCQkweDk0CisjZGVmaW5lCUNSX0dBTkdYT0ZGU0VUCQkweDljCisjZGVmaW5lCUNSX0dBTkdYT05JTklUCQkweGE0CisjZGVmaW5lCUNSX0dBTkdYT0ZGSU5JVAkJMHhhYworI2RlZmluZQlDUl9IT1NUWE9OCQkweGI0CisjZGVmaW5lCUNSX0hPU1RYT0ZGCQkweGJjCisjZGVmaW5lCUNSX0NBTkNFTFhPRkYJCTB4YzQKKyNkZWZpbmUJQ1JfQUREUlJFU0VUCQkweGRjCisjZGVmaW5lCUNSX1JFU0VUQUxMUE9SVFMJMHhmNAorI2RlZmluZQlDUl9SRVNFVEFMTAkJMHhmYworCisjZGVmaW5lCUNSX1JYRU5BQkxFCQkweDAxCisjZGVmaW5lCUNSX1RYRU5BQkxFCQkweDAyCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCUNoYW5uZWwgc3RhdHVzIHJlZ2lzdGVyLgorICovCisjZGVmaW5lCVNSX1JYUkRZCQkweDAxCisjZGVmaW5lCVNSX1JYRlVMTAkJMHgwMgorI2RlZmluZQlTUl9UWFJEWQkJMHgwNAorI2RlZmluZQlTUl9UWEVNUFRZCQkweDA4CisjZGVmaW5lCVNSX1JYT1ZFUlJVTgkJMHgxMAorI2RlZmluZQlTUl9SWFBBUklUWQkJMHgyMAorI2RlZmluZQlTUl9SWEZSQU1JTkcJCTB4NDAKKyNkZWZpbmUJU1JfUlhCUkVBSwkJMHg4MAorCisjZGVmaW5lCVNSX1JYRVJSUwkJKFNSX1JYUEFSSVRZIHwgU1JfUlhGUkFNSU5HIHwgU1JfUlhPVkVSUlVOKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKglJbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyIGFuZCBpbnRlcnJ1cHQgbWFzayByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMuCisgKi8KKyNkZWZpbmUJSVJfVFhSRFkJCTB4MDEKKyNkZWZpbmUJSVJfUlhSRFkJCTB4MDIKKyNkZWZpbmUJSVJfUlhCUkVBSwkJMHgwNAorI2RlZmluZQlJUl9YT05YT0ZGCQkweDEwCisjZGVmaW5lCUlSX0FERFJSRUNPRwkJMHgyMAorI2RlZmluZQlJUl9SWFdBVENIRE9HCQkweDQwCisjZGVmaW5lCUlSX0lPUE9SVAkJMHg4MAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKglJbnRlcnJ1cHQgdmVjdG9yIHJlZ2lzdGVyIGZpZWxkIGRlZmluaXRpb25zLgorICovCisjZGVmaW5lCUlWUl9DSEFOTUFTSwkJMHgwNworI2RlZmluZQlJVlJfVFlQRU1BU0sJCTB4MTgKKyNkZWZpbmUJSVZSX0NPTlNUTUFTSwkJMHhjMAorCisjZGVmaW5lCUlWUl9SWERBVEEJCTB4MTAKKyNkZWZpbmUJSVZSX1JYQkFEREFUQQkJMHgxOAorI2RlZmluZQlJVlJfVFhEQVRBCQkweDA4CisjZGVmaW5lCUlWUl9PVEhFUgkJMHgwMAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKglCUkcgdGltZXIgY29udHJvbCByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMuCisgKi8KKyNkZWZpbmUJQlJHQ1RDUl9ESVNBQkNMSzAJMHgwMAorI2RlZmluZQlCUkdDVENSX0VOQUJDTEswCTB4MDgKKyNkZWZpbmUJQlJHQ1RDUl9ESVNBQkNMSzEJMHgwMAorI2RlZmluZQlCUkdDVENSX0VOQUJDTEsxCTB4ODAKKworI2RlZmluZQlCUkdDVENSXzBTQ0xLMTYJCTB4MDAKKyNkZWZpbmUJQlJHQ1RDUl8wU0NMSzMyCQkweDAxCisjZGVmaW5lCUJSR0NUQ1JfMFNDTEs2NAkJMHgwMgorI2RlZmluZQlCUkdDVENSXzBTQ0xLMTI4CTB4MDMKKyNkZWZpbmUJQlJHQ1RDUl8wWDEJCTB4MDQKKyNkZWZpbmUJQlJHQ1RDUl8wWDEyCQkweDA1CisjZGVmaW5lCUJSR0NUQ1JfMElPMUEJCTB4MDYKKyNkZWZpbmUJQlJHQ1RDUl8wR0lOMAkJMHgwNworCisjZGVmaW5lCUJSR0NUQ1JfMVNDTEsxNgkJMHgwMAorI2RlZmluZQlCUkdDVENSXzFTQ0xLMzIJCTB4MTAKKyNkZWZpbmUJQlJHQ1RDUl8xU0NMSzY0CQkweDIwCisjZGVmaW5lCUJSR0NUQ1JfMVNDTEsxMjgJMHgzMAorI2RlZmluZQlCUkdDVENSXzFYMQkJMHg0MAorI2RlZmluZQlCUkdDVENSXzFYMTIJCTB4NTAKKyNkZWZpbmUJQlJHQ1RDUl8xSU8xQgkJMHg2MAorI2RlZmluZQlCUkdDVENSXzFHSU4xCQkweDcwCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCVdhdGNoIGRvZyB0aW1lciBlbmFibGUgcmVnaXN0ZXIuCisgKi8KKyNkZWZpbmUJV0RUUkNSX0VOQUJBTEwJCTB4ZmYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICoJWE9OL1hPRkYgaW50ZXJydXB0IHN0YXR1cyByZWdpc3Rlci4KKyAqLworI2RlZmluZQlYSVNSX1RYQ0hBUk1BU0sJCTB4MDMKKyNkZWZpbmUJWElTUl9UWENIQVJOT1JNQUwJMHgwMAorI2RlZmluZQlYSVNSX1RYV0FJVAkJMHgwMQorI2RlZmluZQlYSVNSX1RYWE9GRlBFTkQJCTB4MDIKKyNkZWZpbmUJWElTUl9UWFhPTlBFTkQJCTB4MDMKKworI2RlZmluZQlYSVNSX1RYRkxPV01BU0sJCTB4MGMKKyNkZWZpbmUJWElTUl9UWE5PUk1BTAkJMHgwMAorI2RlZmluZQlYSVNSX1RYU1RPUFBFTkQJCTB4MDQKKyNkZWZpbmUJWElTUl9UWFNUQVJURUQJCTB4MDgKKyNkZWZpbmUJWElTUl9UWFNUT1BQRUQJCTB4MGMKKworI2RlZmluZQlYSVNSX1JYRkxPV01BU0sJCTB4MzAKKyNkZWZpbmUJWElTUl9SWEZMT1dOT05FCQkweDAwCisjZGVmaW5lCVhJU1JfUlhYT05TRU5UCQkweDEwCisjZGVmaW5lCVhJU1JfUlhYT0ZGU0VOVAkJMHgyMAorCisjZGVmaW5lCVhJU1JfUlhYT05HT1QJCTB4NDAKKyNkZWZpbmUJWElTUl9SWFhPRkZHT1QJCTB4ODAKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICoJQ3VycmVudCBpbnRlcnJ1cHQgcmVnaXN0ZXIuCisgKi8KKyNkZWZpbmUJQ0lSX1RZUEVNQVNLCQkweGMwCisjZGVmaW5lCUNJUl9UWVBFT1RIRVIJCTB4MDAKKyNkZWZpbmUJQ0lSX1RZUEVUWAkJMHg0MAorI2RlZmluZQlDSVJfVFlQRVJYR09PRAkJMHg4MAorI2RlZmluZQlDSVJfVFlQRVJYQkFECQkweGMwCisKKyNkZWZpbmUJQ0lSX1JYREFUQQkJMHg4MAorI2RlZmluZQlDSVJfUlhCQUREQVRBCQkweDQwCisjZGVmaW5lCUNJUl9UWERBVEEJCTB4NDAKKworI2RlZmluZQlDSVJfQ0hBTk1BU0sJCTB4MDcKKyNkZWZpbmUJQ0lSX0NOVE1BU0sJCTB4MzgKKworI2RlZmluZQlDSVJfU1VCVFlQRU1BU0sJCTB4MzgKKyNkZWZpbmUJQ0lSX1NVQk5PTkUJCTB4MDAKKyNkZWZpbmUJQ0lSX1NVQkNPUwkJMHgwOAorI2RlZmluZQlDSVJfU1VCQUREUgkJMHgxMAorI2RlZmluZQlDSVJfU1VCWE9OWE9GRgkJMHgxOAorI2RlZmluZQlDSVJfU1VCQlJFQUsJCTB4MjgKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICoJR2xvYmFsIGludGVycnVwdGluZyBjaGFubmVsIHJlZ2lzdGVyLgorICovCisjZGVmaW5lCUdJQ1JfQ0hBTk1BU0sJCTB4MDcKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICoJR2xvYmFsIGludGVycnVwdGluZyBieXRlIGNvdW50IHJlZ2lzdGVyLgorICovCisjZGVmaW5lCUdJQ1JfQ09VTlRNQVNLCQkweDBmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCUdsb2JhbCBpbnRlcnJ1cHRpbmcgdHlwZSByZWdpc3Rlci4KKyAqLworI2RlZmluZQlHSVRSX1JYTUFTSwkJMHhjMAorI2RlZmluZQlHSVRSX1JYTk9ORQkJMHgwMAorI2RlZmluZQlHSVRSX1JYQkFEREFUQQkJMHg4MAorI2RlZmluZQlHSVRSX1JYR09PRERBVEEJCTB4YzAKKyNkZWZpbmUJR0lUUl9UWERBVEEJCTB4MjAKKworI2RlZmluZQlHSVRSX1NVQlRZUEVNQVNLCTB4MDcKKyNkZWZpbmUJR0lUUl9TVUJOT05FCQkweDAwCisjZGVmaW5lCUdJVFJfU1VCQ09TCQkweDAxCisjZGVmaW5lCUdJVFJfU1VCQUREUgkJMHgwMgorI2RlZmluZQlHSVRSX1NVQlhPTlhPRkYJCTB4MDMKKyNkZWZpbmUJR0lUUl9TVUJCUkVBSwkJMHgwNQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKglJbnB1dCBwb3J0IGNoYW5nZSByZWdpc3Rlci4KKyAqLworI2RlZmluZQlJUFJfQ1RTCQkJMHgwMQorI2RlZmluZQlJUFJfRFRSCQkJMHgwMgorI2RlZmluZQlJUFJfUlRTCQkJMHgwNAorI2RlZmluZQlJUFJfRENECQkJMHgwOAorI2RlZmluZQlJUFJfQ1RTQ0hBTkdFCQkweDEwCisjZGVmaW5lCUlQUl9EVFJDSEFOR0UJCTB4MjAKKyNkZWZpbmUJSVBSX1JUU0NIQU5HRQkJMHg0MAorI2RlZmluZQlJUFJfRENEQ0hBTkdFCQkweDgwCisKKyNkZWZpbmUJSVBSX0NIQU5HRU1BU0sJCTB4ZjAKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICoJSU8gcG9ydCBpbnRlcnJ1cHQgYW5kIG91dHB1dCByZWdpc3Rlci4KKyAqLworI2RlZmluZQlJT1BSX0NUUwkJMHgwMQorI2RlZmluZQlJT1BSX0RUUgkJMHgwMgorI2RlZmluZQlJT1BSX1JUUwkJMHgwNAorI2RlZmluZQlJT1BSX0RDRAkJMHgwOAorI2RlZmluZQlJT1BSX0NUU0NPUwkJMHgxMAorI2RlZmluZQlJT1BSX0RUUkNPUwkJMHgyMAorI2RlZmluZQlJT1BSX1JUU0NPUwkJMHg0MAorI2RlZmluZQlJT1BSX0RDRENPUwkJMHg4MAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKglJTyBwb3J0IGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIuCisgKi8KKyNkZWZpbmUJSU9QQ1JfU0VUQ1RTCQkweDAwCisjZGVmaW5lCUlPUENSX1NFVERUUgkJMHgwNAorI2RlZmluZQlJT1BDUl9TRVRSVFMJCTB4MTAKKyNkZWZpbmUJSU9QQ1JfU0VURENECQkweDAwCisKKyNkZWZpbmUJSU9QQ1JfU0VUU0lHUwkJKElPUENSX1NFVFJUUyB8IElPUENSX1NFVFJUUyB8IElPUENSX1NFVERUUiB8IElPUENSX1NFVERDRCkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICoJR2VuZXJhbCBwdXJwb3NlIG91dHB1dCBzZWxlY3QgcmVnaXN0ZXIuCisgKi8KKyNkZWZpbmUJR1BPUlNfVFhDMVhBCQkweDA4CisjZGVmaW5lCUdQT1JTX1RYQzE2WEEJCTB4MDkKKyNkZWZpbmUJR1BPUlNfUlhDMTZYQQkJMHgwYQorI2RlZmluZQlHUE9SU19UWEMxNlhCCQkweDBiCisjZGVmaW5lCUdQT1JTX0dQT1IzCQkweDBjCisjZGVmaW5lCUdQT1JTX0dQT1IyCQkweDBkCisjZGVmaW5lCUdQT1JTX0dQT1IxCQkweDBlCisjZGVmaW5lCUdQT1JTX0dQT1IwCQkweDBmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCUdlbmVyYWwgcHVycG9zZSBvdXRwdXQgcmVnaXN0ZXIuCisgKi8KKyNkZWZpbmUJR1BPUl8wCQkJMHgwMQorI2RlZmluZQlHUE9SXzEJCQkweDAyCisjZGVmaW5lCUdQT1JfMgkJCTB4MDQKKyNkZWZpbmUJR1BPUl8zCQkJMHgwOAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKglHZW5lcmFsIHB1cnBvc2Ugb3V0cHV0IGNsb2NrIHJlZ2lzdGVyLgorICovCisjZGVmaW5lCUdQT1JDXzBOT05FCQkweDAwCisjZGVmaW5lCUdQT1JDXzBHSU4wCQkweDAxCisjZGVmaW5lCUdQT1JDXzBHSU4xCQkweDAyCisjZGVmaW5lCUdQT1JDXzBJTzNBCQkweDAyCisKKyNkZWZpbmUJR1BPUkNfMU5PTkUJCTB4MDAKKyNkZWZpbmUJR1BPUkNfMUdJTjAJCTB4MDQKKyNkZWZpbmUJR1BPUkNfMUdJTjEJCTB4MDgKKyNkZWZpbmUJR1BPUkNfMUlPM0MJCTB4MGMKKworI2RlZmluZQlHUE9SQ18yTk9ORQkJMHgwMAorI2RlZmluZQlHUE9SQ18yR0lOMAkJMHgxMAorI2RlZmluZQlHUE9SQ18yR0lOMQkJMHgyMAorI2RlZmluZQlHUE9SQ18ySU8zRQkJMHgyMAorCisjZGVmaW5lCUdQT1JDXzNOT05FCQkweDAwCisjZGVmaW5lCUdQT1JDXzNHSU4wCQkweDQwCisjZGVmaW5lCUdQT1JDXzNHSU4xCQkweDgwCisjZGVmaW5lCUdQT1JDXzNJTzNHCQkweGMwCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCUdlbmVyYWwgcHVycG9zZSBvdXRwdXQgZGF0YSByZWdpc3Rlci4KKyAqLworI2RlZmluZQlHUE9EXzBNQVNLCQkweDAzCisjZGVmaW5lCUdQT0RfMFNFVDEJCTB4MDAKKyNkZWZpbmUJR1BPRF8wU0VUMAkJMHgwMQorI2RlZmluZQlHUE9EXzBTRVRSMAkJMHgwMgorI2RlZmluZQlHUE9EXzBTRVRJTzNCCQkweDAzCisKKyNkZWZpbmUJR1BPRF8xTUFTSwkJMHgwYworI2RlZmluZQlHUE9EXzFTRVQxCQkweDAwCisjZGVmaW5lCUdQT0RfMVNFVDAJCTB4MDQKKyNkZWZpbmUJR1BPRF8xU0VUUjAJCTB4MDgKKyNkZWZpbmUJR1BPRF8xU0VUSU8zRAkJMHgwYworCisjZGVmaW5lCUdQT0RfMk1BU0sJCTB4MzAKKyNkZWZpbmUJR1BPRF8yU0VUMQkJMHgwMAorI2RlZmluZQlHUE9EXzJTRVQwCQkweDEwCisjZGVmaW5lCUdQT0RfMlNFVFIwCQkweDIwCisjZGVmaW5lCUdQT0RfMlNFVElPM0YJCTB4MzAKKworI2RlZmluZQlHUE9EXzNNQVNLCQkweGMwCisjZGVmaW5lCUdQT0RfM1NFVDEJCTB4MDAKKyNkZWZpbmUJR1BPRF8zU0VUMAkJMHg0MAorI2RlZmluZQlHUE9EXzNTRVRSMAkJMHg4MAorI2RlZmluZQlHUE9EXzNTRVRJTzNICQkweGMwCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2F0dGVybGlzdC5oIGIvaW5jbHVkZS9saW51eC9zY2F0dGVybGlzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmNzE3ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3NjYXR0ZXJsaXN0LmgKQEAgLTAsMCArMSwxNCBAQAorI2lmbmRlZiBfTElOVVhfU0NBVFRFUkxJU1RfSAorI2RlZmluZSBfTElOVVhfU0NBVFRFUkxJU1RfSAorCitzdGF0aWMgaW5saW5lIHZvaWQgc2dfaW5pdF9vbmUoc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwkJCSAgICAgICB1OCAqYnVmLCB1bnNpZ25lZCBpbnQgYnVmbGVuKQoreworCW1lbXNldChzZywgMCwgc2l6ZW9mKCpzZykpOworCisJc2ctPnBhZ2UgPSB2aXJ0X3RvX3BhZ2UoYnVmKTsKKwlzZy0+b2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2UoYnVmKTsKKwlzZy0+bGVuZ3RoID0gYnVmbGVuOworfQorCisjZW5kaWYgLyogX0xJTlVYX1NDQVRURVJMSVNUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NjLmggYi9pbmNsdWRlL2xpbnV4L3NjYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4NWE0YTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3NjYy5oCkBAIC0wLDAgKzEsMjUzIEBACisvKiAkSWQ6IHNjYy5oLHYgMS4yOSAxOTk3LzA0LzAyIDE0OjU2OjQ1IGpyZXV0ZXIgRXhwIGpyZXV0ZXIgJCAqLworCisjaWZuZGVmCV9TQ0NfSAorI2RlZmluZQlfU0NDX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisvKiBzZWxlY3Rpb24gb2YgaGFyZHdhcmUgdHlwZXMgKi8KKworI2RlZmluZSBQQTBIWlAJCTB4MDAJLyogaGFyZHdhcmUgdHlwZSBmb3IgUEEwSFpQIFNDQyBjYXJkIGFuZCBjb21wYXRpYmxlICovCisjZGVmaW5lIEVBR0xFCQkweDAxICAgIC8qIGhhcmR3YXJlIHR5cGUgZm9yIEVBR0xFIGNhcmQgKi8KKyNkZWZpbmUgUEMxMDAJCTB4MDIJLyogaGFyZHdhcmUgdHlwZSBmb3IgUEMxMDAgY2FyZCAqLworI2RlZmluZSBQUklNVVMJCTB4MDQJLyogaGFyZHdhcmUgdHlwZSBmb3IgUFJJTVVTLVBDIChERzlCTCkgY2FyZCAqLworI2RlZmluZSBEUlNJCQkweDA4CS8qIGhhcmR3YXJlIHR5cGUgZm9yIERSU0kgUEMqUGFja2V0IGNhcmQgKi8KKyNkZWZpbmUgQkFZQ09NCQkweDEwCS8qIGhhcmR3YXJlIHR5cGUgZm9yIEJheUNvbSAoVSlTQ0MgKi8KKworLyogREVWIGlvY3RsKCkgY29tbWFuZHMgKi8KKworZW51bSBTQ0NfaW9jdGxfY21kcyB7CisJU0lPQ1NDQ1JFU0VSVkVEID0gU0lPQ0RFVlBSSVZBVEUsCisJU0lPQ1NDQ0NGRywKKwlTSU9DU0NDSU5JLAorCVNJT0NTQ0NDSEFOSU5JLAorCVNJT0NTQ0NTTUVNLAorCVNJT0NTQ0NHS0lTUywKKwlTSU9DU0NDU0tJU1MsCisJU0lPQ1NDQ0dTVEFULAorCVNJT0NTQ0NDQUwKK307CisKKy8qIERldmljZSBwYXJhbWV0ZXIgY29udHJvbCAoZnJvbSBXQU1QRVMpICovCisKK2VudW0gTDFfcGFyYW1zIHsKKwlQQVJBTV9EQVRBLAorCVBBUkFNX1RYREVMQVksCisJUEFSQU1fUEVSU0lTVCwKKwlQQVJBTV9TTE9UVElNRSwKKwlQQVJBTV9UWFRBSUwsCisJUEFSQU1fRlVMTERVUCwKKwlQQVJBTV9TT0ZURENELAkJLyogd2FzOiBQQVJBTV9IVyAqLworCVBBUkFNX01VVEUsCQkvKiA/Pz8gKi8KKwlQQVJBTV9EVFIsCisJUEFSQU1fUlRTLAorCVBBUkFNX1NQRUVELAorCVBBUkFNX0VORERFTEFZLAkJLyogPz8/ICovCisJUEFSQU1fR1JPVVAsCisJUEFSQU1fSURMRSwKKwlQQVJBTV9NSU4sCisJUEFSQU1fTUFYS0VZLAorCVBBUkFNX1dBSVQsCisJUEFSQU1fTUFYREVGRVIsCisJUEFSQU1fVFgsCisJUEFSQU1fSFdFVkVOVCA9IDMxLAorCVBBUkFNX1JFVFVSTiA9IDI1NQkvKiByZXNldCBraXNzIG1vZGUgKi8KK307CisKKy8qIGZ1bGxkdXAgcGFyYW1ldGVyICovCisKK2VudW0gRlVMTERVUF9tb2RlcyB7CisJS0lTU19EVVBMRVhfSEFMRiwJLyogbm9ybWFsIENTTUEgb3BlcmF0aW9uICovCisJS0lTU19EVVBMRVhfRlVMTCwJLyogZnVsbGR1cGxleCwga2V5IGRvd24gdHJ4IGFmdGVyIHRyYW5zbWlzc2lvbiAqLworCUtJU1NfRFVQTEVYX0xJTkssCS8qIGZ1bGxkdXBsZXgsIGtleSBkb3duIHRyeCBhZnRlciAnaWRsZXRpbWUnIHNlYyAqLworCUtJU1NfRFVQTEVYX09QVElNQQkvKiBmdWxsZHVwbGV4LCBsZXQgdGhlIHByb3RvY29sIGxheWVyIGNvbnRyb2wgdGhlIGh3ICovCit9OworCisvKiBtaXNjLiBwYXJhbWV0ZXJzICovCisKKyNkZWZpbmUgVElNRVJfT0ZGCTY1NTM1VQkvKiB0byBzd2l0Y2ggb2ZmIHRpbWVycyAqLworI2RlZmluZSBOT19TVUNIX1BBUkFNCTY1NTM0VQkvKiBwYXJhbSBub3QgaW1wbGVtZW50ZWQgKi8KKworLyogSFdFVkVOVCBwYXJhbWV0ZXIgKi8KKworZW51bSBIV0VWRU5UX29wdHMgeworCUhXRVZfRENEX09OLAorCUhXRVZfRENEX09GRiwKKwlIV0VWX0FMTF9TRU5UCit9OworCisvKiBjaGFubmVsIGdyb3VwaW5nICovCisKKyNkZWZpbmUgUlhHUk9VUAkJMDEwMAkvKiBpZiBzZXQsIG9ubHkgdHggd2hlbiBhbGwgY2hhbm5lbHMgY2xlYXIgKi8KKyNkZWZpbmUgVFhHUk9VUAkJMDIwMAkvKiBpZiBzZXQsIGRvbid0IHRyYW5zbWl0IHNpbXVsdGFuZW91c2x5ICovCisKKy8qIFR4L1J4IGNsb2NrIHNvdXJjZXMgKi8KKworZW51bSBDTE9DS19zb3VyY2VzIHsKKwlDTEtfRFBMTCwJLyogbm9ybWFsIGhhbGZkdXBsZXggb3BlcmF0aW9uICovCisJQ0xLX0VYVEVSTkFMLAkvKiBleHRlcm5hbCBjbG9ja2luZyAoRzNSVUgvREY5SUMgbW9kZW1zKSAqLworCUNMS19ESVZJREVSLAkvKiBSeCA9IERQTEwsIFR4ID0gZGl2aWRlciAoZnVsbGR1cGxleCB3aXRoICovCisJCQkvKiBtb2RlbXMgd2l0aG91dCBjbG9jayByZWdlbmVyYXRpb24gKi8KKwlDTEtfQlJHCQkvKiBleHBlcmltZW50YWwgZnVsbGR1cGxleCBtb2RlIHdpdGggRFBMTC9CUkcgZm9yICovCisJCQkvKiBNT0RFTXMgd2l0aG91dCBjbG9jayByZWNvdmVyeSAqLworfTsKKworLyogVHggc3RhdGUgKi8KKworZW51bSBUWF9zdGF0ZSB7CisJVFhTX0lETEUsCS8qIFRyYW5zbWl0dGVyIG9mZiwgbm8gZGF0YSBwZW5kaW5nICovCisJVFhTX0JVU1ksCS8qIHdhaXRpbmcgZm9yIHBlcm1pc3Npb24gdG8gc2VuZCAvIHRhaWx0aW1lICovCisJVFhTX0FDVElWRSwJLyogVHJhbnNtaXR0ZXIgb24sIHNlbmRpbmcgZGF0YSAqLworCVRYU19ORVdGUkFNRSwJLyogcmVzZXQgQ1JDIGFuZCBzZW5kIChuZXh0KSBmcmFtZSAqLworCVRYU19JRExFMiwJLyogVHJhbnNtaXR0ZXIgb24sIG5vIGRhdGEgcGVuZGluZyAqLworCVRYU19XQUlULAkvKiBXYWl0aW5nIGZvciBNaW50aW1lIHRvIGV4cGlyZSAqLworCVRYU19USU1FT1VUCS8qIFdlIGhhZCBhIHRyYW5zbWlzc2lvbiB0aW1lb3V0ICovCit9OworCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW9fcG9ydDsJLyogdHlwZSBkZWZpbml0aW9uIGZvciBhbiAnaW8gcG9ydCBhZGRyZXNzJyAqLworCisvKiBTQ0Mgc3RhdGlzdGljYWwgaW5mb3JtYXRpb24gKi8KKworc3RydWN0IHNjY19zdGF0IHsKKyAgICAgICAgbG9uZyByeGludHM7ICAgICAgICAgICAgLyogUmVjZWl2ZXIgaW50ZXJydXB0cyAqLworICAgICAgICBsb25nIHR4aW50czsgICAgICAgICAgICAvKiBUcmFuc21pdHRlciBpbnRlcnJ1cHRzICovCisgICAgICAgIGxvbmcgZXhpbnRzOyAgICAgICAgICAgIC8qIEV4dGVybmFsL3N0YXR1cyBpbnRlcnJ1cHRzICovCisgICAgICAgIGxvbmcgc3BpbnRzOyAgICAgICAgICAgIC8qIFNwZWNpYWwgcmVjZWl2ZXIgaW50ZXJydXB0cyAqLworCisgICAgICAgIGxvbmcgdHhmcmFtZXM7ICAgICAgICAgIC8qIFBhY2tldHMgc2VudCAqLworICAgICAgICBsb25nIHJ4ZnJhbWVzOyAgICAgICAgICAvKiBOdW1iZXIgb2YgRnJhbWVzIEFjdHVhbGx5IFJlY2VpdmVkICovCisgICAgICAgIGxvbmcgcnhlcnJzOyAgICAgICAgICAgIC8qIENSQyBFcnJvcnMgKi8KKyAgICAgICAgbG9uZyB0eGVycnM7CQkvKiBLSVNTIGVycm9ycyAqLworICAgICAgICAKKwl1bnNpZ25lZCBpbnQgbm9zcGFjZTsJLyogIk91dCBvZiBidWZmZXJzIiAqLworCXVuc2lnbmVkIGludCByeF9vdmVyOwkvKiBSZWNlaXZlciBPdmVycnVucyAqLworCXVuc2lnbmVkIGludCB0eF91bmRlcjsJLyogVHJhbnNtaXR0ZXIgVW5kZXJydW5zICovCisKKwl1bnNpZ25lZCBpbnQgdHhfc3RhdGU7CS8qIFRyYW5zbWl0dGVyIHN0YXRlICovCisJaW50IHR4X3F1ZXVlZDsJCS8qIHR4IGZyYW1lcyBlbnF1ZXVlZCAqLworCisJdW5zaWduZWQgaW50IG1heHF1ZXVlOwkvKiBhbGxvY2F0ZWQgdHhfYnVmZmVycyAqLworCXVuc2lnbmVkIGludCBidWZzaXplOwkvKiB1c2VkIGJ1ZmZlcnNpemUgKi8KK307CisKK3N0cnVjdCBzY2NfbW9kZW0geworCWxvbmcgc3BlZWQ7CQkvKiBMaW5lIHNwZWVkLCBicHMgKi8KKwljaGFyIGNsb2Nrc3JjOwkJLyogMCA9IERQTEwsIDEgPSBleHRlcm5hbCwgMiA9IGRpdmlkZXIgKi8KKwljaGFyIG5yejsJCS8qIE5SWiBpbnN0ZWFkIG9mIE5SWkkgKi8JCit9OworCitzdHJ1Y3Qgc2NjX2tpc3NfY21kIHsKKwlpbnQgIAkgY29tbWFuZDsJLyogb25lIG9mIHRoZSBLSVNTLUNvbW1hbmRzIGRlZmluZWQgYWJvdmUgKi8KKwl1bnNpZ25lZCBwYXJhbTsJCS8qIEtJU1MtUGFyYW0gKi8KK307CisKK3N0cnVjdCBzY2NfaHdfY29uZmlnIHsKKwlpb19wb3J0IGRhdGFfYTsJCS8qIGRhdGEgcG9ydCBjaGFubmVsIEEgKi8KKwlpb19wb3J0IGN0cmxfYTsJCS8qIGNvbnRyb2wgcG9ydCBjaGFubmVsIEEgKi8KKwlpb19wb3J0IGRhdGFfYjsJCS8qIGRhdGEgcG9ydCBjaGFubmVsIEIgKi8KKwlpb19wb3J0IGN0cmxfYjsJCS8qIGNvbnRyb2wgcG9ydCBjaGFubmVsIEIgKi8KKwlpb19wb3J0IHZlY3Rvcl9sYXRjaDsJLyogSU5UQUNLLUxhdGNoICgjKSAqLworCWlvX3BvcnQJc3BlY2lhbDsJLyogc3BlY2lhbCBmdW5jdGlvbiBwb3J0ICovCisKKwlpbnQJaXJxOwkJLyogaXJxICovCisJbG9uZwljbG9jazsJCS8qIGNsb2NrICovCisJY2hhcglvcHRpb247CQkvKiBjb21tYW5kIGZvciBmdW5jdGlvbiBwb3J0ICovCisKKwljaGFyIGJyYW5kOwkJLyogaGFyZHdhcmUgdHlwZSAqLworCWNoYXIgZXNjYzsJCS8qIHVzZSBleHQuIGZlYXR1cmVzIG9mIGEgODU4MC84NTE4MC84NTI4MCAqLworfTsKKworLyogKCMpIG9ubHkgb25lIElOVEFDSyBsYXRjaCBhbGxvd2VkLiAqLworCisKK3N0cnVjdCBzY2NfbWVtX2NvbmZpZyB7CisJdW5zaWduZWQgaW50IGR1bW15OworCXVuc2lnbmVkIGludCBidWZzaXplOworfTsKKworc3RydWN0IHNjY19jYWxpYnJhdGUgeworCXVuc2lnbmVkIGludCB0aW1lOworCXVuc2lnbmVkIGNoYXIgcGF0dGVybjsKK307CisKKyNpZmRlZiBfX0tFUk5FTF9fCisKK2VudW0ge1RYX09GRiwgVFhfT059OwkvKiBjb21tYW5kIGZvciBzY2Nfa2V5X3RyeCgpICovCisKKy8qIFZlY3RvciBtYXNrcyBpbiBSUjJCICovCisKKyNkZWZpbmUgVkVDVE9SX01BU0sJMHgwNgorI2RlZmluZSBUWElOVAkJMHgwMAorI2RlZmluZSBFWElOVAkJMHgwMgorI2RlZmluZSBSWElOVAkJMHgwNAorI2RlZmluZSBTUElOVAkJMHgwNgorCisjaWZkZWYgQ09ORklHX1NDQ19ERUxBWQorI2RlZmluZSBJbmIocG9ydCkJaW5iX3AocG9ydCkKKyNkZWZpbmUgT3V0Yihwb3J0LCB2YWwpCW91dGJfcCh2YWwsIHBvcnQpCisjZWxzZQorI2RlZmluZSBJbmIocG9ydCkJaW5iKHBvcnQpCisjZGVmaW5lIE91dGIocG9ydCwgdmFsKQlvdXRiKHZhbCwgcG9ydCkKKyNlbmRpZgorCisvKiBTQ0MgY2hhbm5lbCBjb250cm9sIHN0cnVjdHVyZSBmb3IgS0lTUyAqLworCitzdHJ1Y3Qgc2NjX2tpc3MgeworCXVuc2lnbmVkIGNoYXIgdHhkZWxheTsJCS8qIFRyYW5zbWl0IERlbGF5IDEwIG1zL2NudCAqLworCXVuc2lnbmVkIGNoYXIgcGVyc2lzdDsJCS8qIFBlcnNpc3RlbmNlICgwLTI1NSkgYXMgYSAlICovCisJdW5zaWduZWQgY2hhciBzbG90dGltZTsJCS8qIERlbGF5IHRvIHdhaXQgb24gcGVyc2lzdGVuY2UgaGl0ICovCisJdW5zaWduZWQgY2hhciB0YWlsdGltZTsJCS8qIERlbGF5IGFmdGVyIGxhc3QgYnl0ZSB3cml0dGVuICovCisJdW5zaWduZWQgY2hhciBmdWxsZHVwOwkJLyogRnVsbCBEdXBsZXggbW9kZSAwPUNTTUEgMT1EVVAgMj1BTFdBWVMgS0VZRUQgKi8KKwl1bnNpZ25lZCBjaGFyIHdhaXR0aW1lOwkJLyogV2FpdHRpbWUgYmVmb3JlIGFueSB0cmFuc21pdCBhdHRlbXB0ICovCisJdW5zaWduZWQgaW50ICBtYXhrZXl1cDsJCS8qIE1heGltdW0gdGltZSB0byB0cmFuc21pdCAoc2Vjb25kcykgKi8KKwl1bnNpZ25lZCBpbnQgIG1pbnRpbWU7CQkvKiBNaW5pbWFsIG9mZnRpbWUgYWZ0ZXIgTUFYS0VZVVAgdGltZW91dCAoc2Vjb25kcykgKi8KKwl1bnNpZ25lZCBpbnQgIGlkbGV0aW1lOwkJLyogTWF4aW11bSBpZGxlIHRpbWUgaW4gQUxXQVlTIEtFWUVEIG1vZGUgKHNlY29uZHMpICovCisJdW5zaWduZWQgaW50ICBtYXhkZWZlcjsJCS8qIFRpbWVyIGZvciBDU01BIGNoYW5uZWwgYnVzeSBsaW1pdCAqLworCXVuc2lnbmVkIGNoYXIgdHhfaW5oaWJpdDsJLyogVHJhbnNtaXQgaXMgbm90IGFsbG93ZWQgd2hlbiBzZXQgKi8JCisJdW5zaWduZWQgY2hhciBncm91cDsJCS8qIEdyb3VwIElEIGZvciBBWC4yNSBUWCBpbnRlcmxvY2tpbmcgKi8KKwl1bnNpZ25lZCBjaGFyIG1vZGU7CQkvKiAnbm9ybWFsJyBvciAnaHdjdHJsJyBtb2RlICh1bnVzZWQpICovCisJdW5zaWduZWQgY2hhciBzb2Z0ZGNkOwkJLyogVXNlIERQTEwgaW5zdGVhZCBvZiBEQ0QgcGluIGZvciBjYXJyaWVyIGRldGVjdCAqLworfTsKKworCisvKiBTQ0MgY2hhbm5lbCBzdHJ1Y3R1cmUgKi8KKworc3RydWN0IHNjY19jaGFubmVsIHsKKwlpbnQgaW5pdDsJCQkvKiBjaGFubmVsIGV4aXN0cz8gKi8KKworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CQkvKiBsaW5rIHRvIGRldmljZSBjb250cm9sIHN0cnVjdHVyZSAqLworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIGRldl9zdGF0Oy8qIGRldmljZSBzdGF0aXN0aWNzICovCisKKwljaGFyIGJyYW5kOwkJCS8qIG1hbnVmYWN0dXJlciBvZiB0aGUgYm9hcmQgKi8KKwlsb25nIGNsb2NrOwkJCS8qIHVzZWQgY2xvY2sgKi8KKworCWlvX3BvcnQgY3RybDsJCQkvKiBJL08gYWRkcmVzcyBvZiBDT05UUk9MIHJlZ2lzdGVyICovCisJaW9fcG9ydAlkYXRhOwkJCS8qIEkvTyBhZGRyZXNzIG9mIERBVEEgcmVnaXN0ZXIgKi8KKwlpb19wb3J0IHNwZWNpYWw7CQkvKiBJL08gYWRkcmVzcyBvZiBzcGVjaWFsIGZ1bmN0aW9uIHBvcnQgKi8KKwlpbnQgaXJxOwkJCS8qIE51bWJlciBvZiBJbnRlcnJ1cHQgKi8KKworCWNoYXIgb3B0aW9uOworCWNoYXIgZW5oYW5jZWQ7CQkJLyogRW5oYW5jZWQgU0NDIHN1cHBvcnQgKi8KKworCXVuc2lnbmVkIGNoYXIgd3JlZ1sxNl07IAkvKiBDb3B5IG9mIGxhc3Qgd3JpdHRlbiB2YWx1ZSBpbiBXUnggKi8KKwl1bnNpZ25lZCBjaGFyIHN0YXR1czsJCS8qIENvcHkgb2YgUjAgYXQgbGFzdCBleHRlcm5hbCBpbnRlcnJ1cHQgKi8KKwl1bnNpZ25lZCBjaGFyIGRjZDsJCS8qIERDRCBzdGF0dXMgKi8KKworICAgICAgICBzdHJ1Y3Qgc2NjX2tpc3Mga2lzczsJCS8qIGNvbnRyb2wgc3RydWN0dXJlIGZvciBLSVNTIHBhcmFtcyAqLworICAgICAgICBzdHJ1Y3Qgc2NjX3N0YXQgc3RhdDsJCS8qIHN0YXRpc3RpY2FsIGluZm9ybWF0aW9uICovCisgICAgICAgIHN0cnVjdCBzY2NfbW9kZW0gbW9kZW07IAkvKiBtb2RlbSBpbmZvcm1hdGlvbiAqLworCisgICAgICAgIHN0cnVjdCBza19idWZmX2hlYWQgdHhfcXVldWU7CS8qIG5leHQgdHggYnVmZmVyICovCisgICAgICAgIHN0cnVjdCBza19idWZmICpyeF9idWZmOwkvKiBwb2ludGVyIHRvIGZyYW1lIGN1cnJlbnRseSByZWNlaXZlZCAqLworICAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqdHhfYnVmZjsJLyogcG9pbnRlciB0byBmcmFtZSBjdXJyZW50bHkgdHJhbnNtaXR0ZWQgKi8KKworCS8qIFRpbWVyICovCisJc3RydWN0IHRpbWVyX2xpc3QgdHhfdDsJCS8qIHR4IHRpbWVyIGZvciB0aGlzIGNoYW5uZWwgKi8KKwlzdHJ1Y3QgdGltZXJfbGlzdCB0eF93ZG9nOwkvKiB0eCB3YXRjaGRvZ3MgKi8KKwkKKwkvKiBDaGFubmVsIGxvY2sgKi8KKwlzcGlubG9ja190CWxvY2s7CQkvKiBDaGFubmVsIGd1YXJkIGxvY2sgKi8KK307CisKKyNlbmRpZiAvKiBkZWZpbmVkKF9fS0VSTkVMX18pICovCisjZW5kaWYgLyogZGVmaW5lZChfU0NDX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmggYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMwZTkxZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvc2NoZWQuaApAQCAtMCwwICsxLDEyNzMgQEAKKyNpZm5kZWYgX0xJTlVYX1NDSEVEX0gKKyNkZWZpbmUgX0xJTlVYX1NDSEVEX0gKKworI2luY2x1ZGUgPGFzbS9wYXJhbS5oPgkvKiBmb3IgSFogKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1leC5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KKyNpbmNsdWRlIDxsaW51eC90aHJlYWRfaW5mby5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L25vZGVtYXNrLmg+CisKKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS9tbXUuaD4KKyNpbmNsdWRlIDxhc20vY3B1dGltZS5oPgorCisjaW5jbHVkZSA8bGludXgvc21wLmg+CisjaW5jbHVkZSA8bGludXgvc2VtLmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CisjaW5jbHVkZSA8bGludXgvc2VjdXJlYml0cy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzX3N0cnVjdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgorI2luY2x1ZGUgPGxpbnV4L3BpZC5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorI2luY2x1ZGUgPGxpbnV4L3RvcG9sb2d5Lmg+CisjaW5jbHVkZSA8bGludXgvc2VjY29tcC5oPgorCitzdHJ1Y3QgZXhlY19kb21haW47CisKKy8qCisgKiBjbG9uaW5nIGZsYWdzOgorICovCisjZGVmaW5lIENTSUdOQUwJCTB4MDAwMDAwZmYJLyogc2lnbmFsIG1hc2sgdG8gYmUgc2VudCBhdCBleGl0ICovCisjZGVmaW5lIENMT05FX1ZNCTB4MDAwMDAxMDAJLyogc2V0IGlmIFZNIHNoYXJlZCBiZXR3ZWVuIHByb2Nlc3NlcyAqLworI2RlZmluZSBDTE9ORV9GUwkweDAwMDAwMjAwCS8qIHNldCBpZiBmcyBpbmZvIHNoYXJlZCBiZXR3ZWVuIHByb2Nlc3NlcyAqLworI2RlZmluZSBDTE9ORV9GSUxFUwkweDAwMDAwNDAwCS8qIHNldCBpZiBvcGVuIGZpbGVzIHNoYXJlZCBiZXR3ZWVuIHByb2Nlc3NlcyAqLworI2RlZmluZSBDTE9ORV9TSUdIQU5ECTB4MDAwMDA4MDAJLyogc2V0IGlmIHNpZ25hbCBoYW5kbGVycyBhbmQgYmxvY2tlZCBzaWduYWxzIHNoYXJlZCAqLworI2RlZmluZSBDTE9ORV9QVFJBQ0UJMHgwMDAwMjAwMAkvKiBzZXQgaWYgd2Ugd2FudCB0byBsZXQgdHJhY2luZyBjb250aW51ZSBvbiB0aGUgY2hpbGQgdG9vICovCisjZGVmaW5lIENMT05FX1ZGT1JLCTB4MDAwMDQwMDAJLyogc2V0IGlmIHRoZSBwYXJlbnQgd2FudHMgdGhlIGNoaWxkIHRvIHdha2UgaXQgdXAgb24gbW1fcmVsZWFzZSAqLworI2RlZmluZSBDTE9ORV9QQVJFTlQJMHgwMDAwODAwMAkvKiBzZXQgaWYgd2Ugd2FudCB0byBoYXZlIHRoZSBzYW1lIHBhcmVudCBhcyB0aGUgY2xvbmVyICovCisjZGVmaW5lIENMT05FX1RIUkVBRAkweDAwMDEwMDAwCS8qIFNhbWUgdGhyZWFkIGdyb3VwPyAqLworI2RlZmluZSBDTE9ORV9ORVdOUwkweDAwMDIwMDAwCS8qIE5ldyBuYW1lc3BhY2UgZ3JvdXA/ICovCisjZGVmaW5lIENMT05FX1NZU1ZTRU0JMHgwMDA0MDAwMAkvKiBzaGFyZSBzeXN0ZW0gViBTRU1fVU5ETyBzZW1hbnRpY3MgKi8KKyNkZWZpbmUgQ0xPTkVfU0VUVExTCTB4MDAwODAwMDAJLyogY3JlYXRlIGEgbmV3IFRMUyBmb3IgdGhlIGNoaWxkICovCisjZGVmaW5lIENMT05FX1BBUkVOVF9TRVRUSUQJMHgwMDEwMDAwMAkvKiBzZXQgdGhlIFRJRCBpbiB0aGUgcGFyZW50ICovCisjZGVmaW5lIENMT05FX0NISUxEX0NMRUFSVElECTB4MDAyMDAwMDAJLyogY2xlYXIgdGhlIFRJRCBpbiB0aGUgY2hpbGQgKi8KKyNkZWZpbmUgQ0xPTkVfREVUQUNIRUQJCTB4MDA0MDAwMDAJLyogVW51c2VkLCBpZ25vcmVkICovCisjZGVmaW5lIENMT05FX1VOVFJBQ0VECQkweDAwODAwMDAwCS8qIHNldCBpZiB0aGUgdHJhY2luZyBwcm9jZXNzIGNhbid0IGZvcmNlIENMT05FX1BUUkFDRSBvbiB0aGlzIGNsb25lICovCisjZGVmaW5lIENMT05FX0NISUxEX1NFVFRJRAkweDAxMDAwMDAwCS8qIHNldCB0aGUgVElEIGluIHRoZSBjaGlsZCAqLworI2RlZmluZSBDTE9ORV9TVE9QUEVECQkweDAyMDAwMDAwCS8qIFN0YXJ0IGluIHN0b3BwZWQgc3RhdGUgKi8KKworLyoKKyAqIExpc3Qgb2YgZmxhZ3Mgd2Ugd2FudCB0byBzaGFyZSBmb3Iga2VybmVsIHRocmVhZHMsCisgKiBpZiBvbmx5IGJlY2F1c2UgdGhleSBhcmUgbm90IHVzZWQgYnkgdGhlbSBhbnl3YXkuCisgKi8KKyNkZWZpbmUgQ0xPTkVfS0VSTkVMCShDTE9ORV9GUyB8IENMT05FX0ZJTEVTIHwgQ0xPTkVfU0lHSEFORCkKKworLyoKKyAqIFRoZXNlIGFyZSB0aGUgY29uc3RhbnQgdXNlZCB0byBmYWtlIHRoZSBmaXhlZC1wb2ludCBsb2FkLWF2ZXJhZ2UKKyAqIGNvdW50aW5nLiBTb21lIG5vdGVzOgorICogIC0gMTEgYml0IGZyYWN0aW9ucyBleHBhbmQgdG8gMjIgYml0cyBieSB0aGUgbXVsdGlwbGllczogdGhpcyBnaXZlcworICogICAgYSBsb2FkLWF2ZXJhZ2UgcHJlY2lzaW9uIG9mIDEwIGJpdHMgaW50ZWdlciArIDExIGJpdHMgZnJhY3Rpb25hbAorICogIC0gaWYgeW91IHdhbnQgdG8gY291bnQgbG9hZC1hdmVyYWdlcyBtb3JlIG9mdGVuLCB5b3UgbmVlZCBtb3JlCisgKiAgICBwcmVjaXNpb24sIG9yIHJvdW5kaW5nIHdpbGwgZ2V0IHlvdS4gV2l0aCAyLXNlY29uZCBjb3VudGluZyBmcmVxLAorICogICAgdGhlIEVYUF9uIHZhbHVlcyB3b3VsZCBiZSAxOTgxLCAyMDM0IGFuZCAyMDQzIGlmIHN0aWxsIHVzaW5nIG9ubHkKKyAqICAgIDExIGJpdCBmcmFjdGlvbnMuCisgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIGF2ZW5ydW5bXTsJCS8qIExvYWQgYXZlcmFnZXMgKi8KKworI2RlZmluZSBGU0hJRlQJCTExCQkvKiBuciBvZiBiaXRzIG9mIHByZWNpc2lvbiAqLworI2RlZmluZSBGSVhFRF8xCQkoMTw8RlNISUZUKQkvKiAxLjAgYXMgZml4ZWQtcG9pbnQgKi8KKyNkZWZpbmUgTE9BRF9GUkVRCSg1KkhaKQkJLyogNSBzZWMgaW50ZXJ2YWxzICovCisjZGVmaW5lIEVYUF8xCQkxODg0CQkvKiAxL2V4cCg1c2VjLzFtaW4pIGFzIGZpeGVkLXBvaW50ICovCisjZGVmaW5lIEVYUF81CQkyMDE0CQkvKiAxL2V4cCg1c2VjLzVtaW4pICovCisjZGVmaW5lIEVYUF8xNQkJMjAzNwkJLyogMS9leHAoNXNlYy8xNW1pbikgKi8KKworI2RlZmluZSBDQUxDX0xPQUQobG9hZCxleHAsbikgXAorCWxvYWQgKj0gZXhwOyBcCisJbG9hZCArPSBuKihGSVhFRF8xLWV4cCk7IFwKKwlsb2FkID4+PSBGU0hJRlQ7CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIHRvdGFsX2ZvcmtzOworZXh0ZXJuIGludCBucl90aHJlYWRzOworZXh0ZXJuIGludCBsYXN0X3BpZDsKK0RFQ0xBUkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCBwcm9jZXNzX2NvdW50cyk7CitleHRlcm4gaW50IG5yX3Byb2Nlc3Nlcyh2b2lkKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIG5yX3J1bm5pbmcodm9pZCk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBucl91bmludGVycnVwdGlibGUodm9pZCk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBucl9pb3dhaXQodm9pZCk7CisKKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9yZXNvdXJjZS5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisKKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisKKyNkZWZpbmUgVEFTS19SVU5OSU5HCQkwCisjZGVmaW5lIFRBU0tfSU5URVJSVVBUSUJMRQkxCisjZGVmaW5lIFRBU0tfVU5JTlRFUlJVUFRJQkxFCTIKKyNkZWZpbmUgVEFTS19TVE9QUEVECQk0CisjZGVmaW5lIFRBU0tfVFJBQ0VECQk4CisjZGVmaW5lIEVYSVRfWk9NQklFCQkxNgorI2RlZmluZSBFWElUX0RFQUQJCTMyCisKKyNkZWZpbmUgX19zZXRfdGFza19zdGF0ZSh0c2ssIHN0YXRlX3ZhbHVlKQkJXAorCWRvIHsgKHRzayktPnN0YXRlID0gKHN0YXRlX3ZhbHVlKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgc2V0X3Rhc2tfc3RhdGUodHNrLCBzdGF0ZV92YWx1ZSkJCVwKKwlzZXRfbWIoKHRzayktPnN0YXRlLCAoc3RhdGVfdmFsdWUpKQorCisjZGVmaW5lIF9fc2V0X2N1cnJlbnRfc3RhdGUoc3RhdGVfdmFsdWUpCQkJXAorCWRvIHsgY3VycmVudC0+c3RhdGUgPSAoc3RhdGVfdmFsdWUpOyB9IHdoaWxlICgwKQorI2RlZmluZSBzZXRfY3VycmVudF9zdGF0ZShzdGF0ZV92YWx1ZSkJCVwKKwlzZXRfbWIoY3VycmVudC0+c3RhdGUsIChzdGF0ZV92YWx1ZSkpCisKKy8qIFRhc2sgY29tbWFuZCBuYW1lIGxlbmd0aCAqLworI2RlZmluZSBUQVNLX0NPTU1fTEVOIDE2CisKKy8qCisgKiBTY2hlZHVsaW5nIHBvbGljaWVzCisgKi8KKyNkZWZpbmUgU0NIRURfTk9STUFMCQkwCisjZGVmaW5lIFNDSEVEX0ZJRk8JCTEKKyNkZWZpbmUgU0NIRURfUlIJCTIKKworc3RydWN0IHNjaGVkX3BhcmFtIHsKKwlpbnQgc2NoZWRfcHJpb3JpdHk7Cit9OworCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKworLyoKKyAqIFRoaXMgc2VyaWFsaXplcyAic2NoZWR1bGUoKSIgYW5kIGFsc28gcHJvdGVjdHMKKyAqIHRoZSBydW4tcXVldWUgZnJvbSBkZWxldGlvbnMvbW9kaWZpY2F0aW9ucyAoYnV0CisgKiBfYWRkaW5nXyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBydW4tcXVldWUgaGFzCisgKiBhIHNlcGFyYXRlIGxvY2spLgorICovCitleHRlcm4gcndsb2NrX3QgdGFza2xpc3RfbG9jazsKK2V4dGVybiBzcGlubG9ja190IG1tbGlzdF9sb2NrOworCit0eXBlZGVmIHN0cnVjdCB0YXNrX3N0cnVjdCB0YXNrX3Q7CisKK2V4dGVybiB2b2lkIHNjaGVkX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBzY2hlZF9pbml0X3NtcCh2b2lkKTsKK2V4dGVybiB2b2lkIGluaXRfaWRsZSh0YXNrX3QgKmlkbGUsIGludCBjcHUpOworCitleHRlcm4gY3B1bWFza190IG5vaHpfY3B1X21hc2s7CisKK2V4dGVybiB2b2lkIHNob3dfc3RhdGUodm9pZCk7CitleHRlcm4gdm9pZCBzaG93X3JlZ3Moc3RydWN0IHB0X3JlZ3MgKik7CisKKy8qCisgKiBUQVNLIGlzIGEgcG9pbnRlciB0byB0aGUgdGFzayB3aG9zZSBiYWNrdHJhY2Ugd2Ugd2FudCB0byBzZWUgKG9yIE5VTEwgZm9yIGN1cnJlbnQKKyAqIHRhc2spLCBTUCBpcyB0aGUgc3RhY2sgcG9pbnRlciBvZiB0aGUgZmlyc3QgZnJhbWUgdGhhdCBzaG91bGQgYmUgc2hvd24gaW4gdGhlIGJhY2sKKyAqIHRyYWNlIChvciBOVUxMIGlmIHRoZSBlbnRpcmUgY2FsbC1jaGFpbiBvZiB0aGUgdGFzayBzaG91bGQgYmUgc2hvd24pLgorICovCitleHRlcm4gdm9pZCBzaG93X3N0YWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdW5zaWduZWQgbG9uZyAqc3ApOworCit2b2lkIGlvX3NjaGVkdWxlKHZvaWQpOworbG9uZyBpb19zY2hlZHVsZV90aW1lb3V0KGxvbmcgdGltZW91dCk7CisKK2V4dGVybiB2b2lkIGNwdV9pbml0ICh2b2lkKTsKK2V4dGVybiB2b2lkIHRyYXBfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIHVwZGF0ZV9wcm9jZXNzX3RpbWVzKGludCB1c2VyKTsKK2V4dGVybiB2b2lkIHNjaGVkdWxlcl90aWNrKHZvaWQpOworCisvKiBBdHRhY2ggdG8gYW55IGZ1bmN0aW9ucyB3aGljaCBzaG91bGQgYmUgaWdub3JlZCBpbiB3Y2hhbiBvdXRwdXQuICovCisjZGVmaW5lIF9fc2NoZWQJCV9fYXR0cmlidXRlX18oKF9fc2VjdGlvbl9fKCIuc2NoZWQudGV4dCIpKSkKKy8qIElzIHRoaXMgYWRkcmVzcyBpbiB0aGUgX19zY2hlZCBmdW5jdGlvbnM/ICovCitleHRlcm4gaW50IGluX3NjaGVkX2Z1bmN0aW9ucyh1bnNpZ25lZCBsb25nIGFkZHIpOworCisjZGVmaW5lCU1BWF9TQ0hFRFVMRV9USU1FT1VUCUxPTkdfTUFYCitleHRlcm4gc2lnbmVkIGxvbmcgRkFTVENBTEwoc2NoZWR1bGVfdGltZW91dChzaWduZWQgbG9uZyB0aW1lb3V0KSk7Cithc21saW5rYWdlIHZvaWQgc2NoZWR1bGUodm9pZCk7CisKK3N0cnVjdCBuYW1lc3BhY2U7CisKKy8qIE1heGltdW0gbnVtYmVyIG9mIGFjdGl2ZSBtYXAgYXJlYXMuLiBUaGlzIGlzIGEgcmFuZG9tIChsYXJnZSkgbnVtYmVyICovCisjZGVmaW5lIERFRkFVTFRfTUFYX01BUF9DT1VOVAk2NTUzNgorCitleHRlcm4gaW50IHN5c2N0bF9tYXhfbWFwX2NvdW50OworCisjaW5jbHVkZSA8bGludXgvYWlvLmg+CisKK2V4dGVybiB1bnNpZ25lZCBsb25nCithcmNoX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsCisJCSAgICAgICB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nCithcmNoX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd24oc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCSAgdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsCisJCQkgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOworZXh0ZXJuIHZvaWQgYXJjaF91bm1hcF9hcmVhKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqYXJlYSk7CitleHRlcm4gdm9pZCBhcmNoX3VubWFwX2FyZWFfdG9wZG93bihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmFyZWEpOworCisjZGVmaW5lIHNldF9tbV9jb3VudGVyKG1tLCBtZW1iZXIsIHZhbHVlKSAobW0pLT5fIyNtZW1iZXIgPSAodmFsdWUpCisjZGVmaW5lIGdldF9tbV9jb3VudGVyKG1tLCBtZW1iZXIpICgobW0pLT5fIyNtZW1iZXIpCisjZGVmaW5lIGFkZF9tbV9jb3VudGVyKG1tLCBtZW1iZXIsIHZhbHVlKSAobW0pLT5fIyNtZW1iZXIgKz0gKHZhbHVlKQorI2RlZmluZSBpbmNfbW1fY291bnRlcihtbSwgbWVtYmVyKSAobW0pLT5fIyNtZW1iZXIrKworI2RlZmluZSBkZWNfbW1fY291bnRlcihtbSwgbWVtYmVyKSAobW0pLT5fIyNtZW1iZXItLQordHlwZWRlZiB1bnNpZ25lZCBsb25nIG1tX2NvdW50ZXJfdDsKKworc3RydWN0IG1tX3N0cnVjdCB7CisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICogbW1hcDsJCS8qIGxpc3Qgb2YgVk1BcyAqLworCXN0cnVjdCByYl9yb290IG1tX3JiOworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIG1tYXBfY2FjaGU7CS8qIGxhc3QgZmluZF92bWEgcmVzdWx0ICovCisJdW5zaWduZWQgbG9uZyAoKmdldF91bm1hcHBlZF9hcmVhKSAoc3RydWN0IGZpbGUgKmZpbHAsCisJCQkJdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwKKwkJCQl1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKKwl2b2lkICgqdW5tYXBfYXJlYSkgKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqYXJlYSk7CisJdW5zaWduZWQgbG9uZyBtbWFwX2Jhc2U7CQkvKiBiYXNlIG9mIG1tYXAgYXJlYSAqLworCXVuc2lnbmVkIGxvbmcgZnJlZV9hcmVhX2NhY2hlOwkJLyogZmlyc3QgaG9sZSAqLworCXBnZF90ICogcGdkOworCWF0b21pY190IG1tX3VzZXJzOwkJCS8qIEhvdyBtYW55IHVzZXJzIHdpdGggdXNlciBzcGFjZT8gKi8KKwlhdG9taWNfdCBtbV9jb3VudDsJCQkvKiBIb3cgbWFueSByZWZlcmVuY2VzIHRvICJzdHJ1Y3QgbW1fc3RydWN0IiAodXNlcnMgY291bnQgYXMgMSkgKi8KKwlpbnQgbWFwX2NvdW50OwkJCQkvKiBudW1iZXIgb2YgVk1BcyAqLworCXN0cnVjdCByd19zZW1hcGhvcmUgbW1hcF9zZW07CisJc3BpbmxvY2tfdCBwYWdlX3RhYmxlX2xvY2s7CQkvKiBQcm90ZWN0cyBwYWdlIHRhYmxlcyBhbmQgc29tZSBjb3VudGVycyAqLworCisJc3RydWN0IGxpc3RfaGVhZCBtbWxpc3Q7CQkvKiBMaXN0IG9mIG1heWJlIHN3YXBwZWQgbW0ncy4gIFRoZXNlIGFyZSBnbG9iYWxseSBzdHJ1bmcKKwkJCQkJCSAqIHRvZ2V0aGVyIG9mZiBpbml0X21tLm1tbGlzdCwgYW5kIGFyZSBwcm90ZWN0ZWQKKwkJCQkJCSAqIGJ5IG1tbGlzdF9sb2NrCisJCQkJCQkgKi8KKworCXVuc2lnbmVkIGxvbmcgc3RhcnRfY29kZSwgZW5kX2NvZGUsIHN0YXJ0X2RhdGEsIGVuZF9kYXRhOworCXVuc2lnbmVkIGxvbmcgc3RhcnRfYnJrLCBicmssIHN0YXJ0X3N0YWNrOworCXVuc2lnbmVkIGxvbmcgYXJnX3N0YXJ0LCBhcmdfZW5kLCBlbnZfc3RhcnQsIGVudl9lbmQ7CisJdW5zaWduZWQgbG9uZyB0b3RhbF92bSwgbG9ja2VkX3ZtLCBzaGFyZWRfdm07CisJdW5zaWduZWQgbG9uZyBleGVjX3ZtLCBzdGFja192bSwgcmVzZXJ2ZWRfdm0sIGRlZl9mbGFncywgbnJfcHRlczsKKworCS8qIFNwZWNpYWwgY291bnRlcnMgcHJvdGVjdGVkIGJ5IHRoZSBwYWdlX3RhYmxlX2xvY2sgKi8KKwltbV9jb3VudGVyX3QgX3JzczsKKwltbV9jb3VudGVyX3QgX2Fub25fcnNzOworCisJdW5zaWduZWQgbG9uZyBzYXZlZF9hdXh2WzQyXTsgLyogZm9yIC9wcm9jL1BJRC9hdXh2ICovCisKKwl1bnNpZ25lZCBkdW1wYWJsZToxOworCWNwdW1hc2tfdCBjcHVfdm1fbWFzazsKKworCS8qIEFyY2hpdGVjdHVyZS1zcGVjaWZpYyBNTSBjb250ZXh0ICovCisJbW1fY29udGV4dF90IGNvbnRleHQ7CisKKwkvKiBUb2tlbiBiYXNlZCB0aHJhc2hpbmcgcHJvdGVjdGlvbi4gKi8KKwl1bnNpZ25lZCBsb25nIHN3YXBfdG9rZW5fdGltZTsKKwljaGFyIHJlY2VudF9wYWdlaW47CisKKwkvKiBjb3JlZHVtcGluZyBzdXBwb3J0ICovCisJaW50IGNvcmVfd2FpdGVyczsKKwlzdHJ1Y3QgY29tcGxldGlvbiAqY29yZV9zdGFydHVwX2RvbmUsIGNvcmVfZG9uZTsKKworCS8qIGFpbyBiaXRzICovCisJcndsb2NrX3QJCWlvY3R4X2xpc3RfbG9jazsKKwlzdHJ1Y3Qga2lvY3R4CQkqaW9jdHhfbGlzdDsKKworCXN0cnVjdCBraW9jdHgJCWRlZmF1bHRfa2lvY3R4OworCisJdW5zaWduZWQgbG9uZyBoaXdhdGVyX3JzczsJLyogSGlnaC13YXRlciBSU1MgdXNhZ2UgKi8KKwl1bnNpZ25lZCBsb25nIGhpd2F0ZXJfdm07CS8qIEhpZ2gtd2F0ZXIgdmlydHVhbCBtZW1vcnkgdXNhZ2UgKi8KK307CisKK3N0cnVjdCBzaWdoYW5kX3N0cnVjdCB7CisJYXRvbWljX3QJCWNvdW50OworCXN0cnVjdCBrX3NpZ2FjdGlvbglhY3Rpb25bX05TSUddOworCXNwaW5sb2NrX3QJCXNpZ2xvY2s7Cit9OworCisvKgorICogTk9URSEgInNpZ25hbF9zdHJ1Y3QiIGRvZXMgbm90IGhhdmUgaXQncyBvd24KKyAqIGxvY2tpbmcsIGJlY2F1c2UgYSBzaGFyZWQgc2lnbmFsX3N0cnVjdCBhbHdheXMKKyAqIGltcGxpZXMgYSBzaGFyZWQgc2lnaGFuZF9zdHJ1Y3QsIHNvIGxvY2tpbmcKKyAqIHNpZ2hhbmRfc3RydWN0IGlzIGFsd2F5cyBhIHByb3BlciBzdXBlcnNldCBvZgorICogdGhlIGxvY2tpbmcgb2Ygc2lnbmFsX3N0cnVjdC4KKyAqLworc3RydWN0IHNpZ25hbF9zdHJ1Y3QgeworCWF0b21pY190CQljb3VudDsKKwlhdG9taWNfdAkJbGl2ZTsKKworCXdhaXRfcXVldWVfaGVhZF90CXdhaXRfY2hsZGV4aXQ7CS8qIGZvciB3YWl0NCgpICovCisKKwkvKiBjdXJyZW50IHRocmVhZCBncm91cCBzaWduYWwgbG9hZC1iYWxhbmNpbmcgdGFyZ2V0OiAqLworCXRhc2tfdAkJCSpjdXJyX3RhcmdldDsKKworCS8qIHNoYXJlZCBzaWduYWwgaGFuZGxpbmc6ICovCisJc3RydWN0IHNpZ3BlbmRpbmcJc2hhcmVkX3BlbmRpbmc7CisKKwkvKiB0aHJlYWQgZ3JvdXAgZXhpdCBzdXBwb3J0ICovCisJaW50CQkJZ3JvdXBfZXhpdF9jb2RlOworCS8qIG92ZXJsb2FkZWQ6CisJICogLSBub3RpZnkgZ3JvdXBfZXhpdF90YXNrIHdoZW4gLT5jb3VudCBpcyBlcXVhbCB0byBub3RpZnlfY291bnQKKwkgKiAtIGV2ZXJ5b25lIGV4Y2VwdCBncm91cF9leGl0X3Rhc2sgaXMgc3RvcHBlZCBkdXJpbmcgc2lnbmFsIGRlbGl2ZXJ5CisJICogICBvZiBmYXRhbCBzaWduYWxzLCBncm91cF9leGl0X3Rhc2sgcHJvY2Vzc2VzIHRoZSBzaWduYWwuCisJICovCisJc3RydWN0IHRhc2tfc3RydWN0CSpncm91cF9leGl0X3Rhc2s7CisJaW50CQkJbm90aWZ5X2NvdW50OworCisJLyogdGhyZWFkIGdyb3VwIHN0b3Agc3VwcG9ydCwgb3ZlcmxvYWRzIGdyb3VwX2V4aXRfY29kZSB0b28gKi8KKwlpbnQJCQlncm91cF9zdG9wX2NvdW50OworCXVuc2lnbmVkIGludAkJZmxhZ3M7IC8qIHNlZSBTSUdOQUxfKiBmbGFncyBiZWxvdyAqLworCisJLyogUE9TSVguMWIgSW50ZXJ2YWwgVGltZXJzICovCisJc3RydWN0IGxpc3RfaGVhZCBwb3NpeF90aW1lcnM7CisKKwkvKiBJVElNRVJfUkVBTCB0aW1lciBmb3IgdGhlIHByb2Nlc3MgKi8KKwlzdHJ1Y3QgdGltZXJfbGlzdCByZWFsX3RpbWVyOworCXVuc2lnbmVkIGxvbmcgaXRfcmVhbF92YWx1ZSwgaXRfcmVhbF9pbmNyOworCisJLyogSVRJTUVSX1BST0YgYW5kIElUSU1FUl9WSVJUVUFMIHRpbWVycyBmb3IgdGhlIHByb2Nlc3MgKi8KKwljcHV0aW1lX3QgaXRfcHJvZl9leHBpcmVzLCBpdF92aXJ0X2V4cGlyZXM7CisJY3B1dGltZV90IGl0X3Byb2ZfaW5jciwgaXRfdmlydF9pbmNyOworCisJLyogam9iIGNvbnRyb2wgSURzICovCisJcGlkX3QgcGdycDsKKwlwaWRfdCB0dHlfb2xkX3BncnA7CisJcGlkX3Qgc2Vzc2lvbjsKKwkvKiBib29sZWFuIHZhbHVlIGZvciBzZXNzaW9uIGdyb3VwIGxlYWRlciAqLworCWludCBsZWFkZXI7CisKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OyAvKiBOVUxMIGlmIG5vIHR0eSAqLworCisJLyoKKwkgKiBDdW11bGF0aXZlIHJlc291cmNlIGNvdW50ZXJzIGZvciBkZWFkIHRocmVhZHMgaW4gdGhlIGdyb3VwLAorCSAqIGFuZCBmb3IgcmVhcGVkIGRlYWQgY2hpbGQgcHJvY2Vzc2VzIGZvcmtlZCBieSB0aGlzIGdyb3VwLgorCSAqIExpdmUgdGhyZWFkcyBtYWludGFpbiB0aGVpciBvd24gY291bnRlcnMgYW5kIGFkZCB0byB0aGVzZQorCSAqIGluIF9fZXhpdF9zaWduYWwsIGV4Y2VwdCBmb3IgdGhlIGdyb3VwIGxlYWRlci4KKwkgKi8KKwljcHV0aW1lX3QgdXRpbWUsIHN0aW1lLCBjdXRpbWUsIGNzdGltZTsKKwl1bnNpZ25lZCBsb25nIG52Y3N3LCBuaXZjc3csIGNudmNzdywgY25pdmNzdzsKKwl1bnNpZ25lZCBsb25nIG1pbl9mbHQsIG1hal9mbHQsIGNtaW5fZmx0LCBjbWFqX2ZsdDsKKworCS8qCisJICogQ3VtdWxhdGl2ZSBucyBvZiBzY2hlZHVsZWQgQ1BVIHRpbWUgZm9yIGRlYWQgdGhyZWFkcyBpbiB0aGUKKwkgKiBncm91cCwgbm90IGluY2x1ZGluZyBhIHpvbWJpZSBncm91cCBsZWFkZXIuICAoVGhpcyBvbmx5IGRpZmZlcnMKKwkgKiBmcm9tIGppZmZpZXNfdG9fbnModXRpbWUgKyBzdGltZSkgaWYgc2NoZWRfY2xvY2sgdXNlcyBzb21ldGhpbmcKKwkgKiBvdGhlciB0aGFuIGppZmZpZXMuKQorCSAqLworCXVuc2lnbmVkIGxvbmcgbG9uZyBzY2hlZF90aW1lOworCisJLyoKKwkgKiBXZSBkb24ndCBib3RoZXIgdG8gc3luY2hyb25pemUgbW9zdCByZWFkZXJzIG9mIHRoaXMgYXQgYWxsLAorCSAqIGJlY2F1c2UgdGhlcmUgaXMgbm8gcmVhZGVyIGNoZWNraW5nIGEgbGltaXQgdGhhdCBhY3R1YWxseSBuZWVkcworCSAqIHRvIGdldCBib3RoIHJsaW1fY3VyIGFuZCBybGltX21heCBhdG9taWNhbGx5LCBhbmQgZWl0aGVyIG9uZQorCSAqIGFsb25lIGlzIGEgc2luZ2xlIHdvcmQgdGhhdCBjYW4gc2FmZWx5IGJlIHJlYWQgbm9ybWFsbHkuCisJICogZ2V0cmxpbWl0L3NldHJsaW1pdCB1c2UgdGFza19sb2NrKGN1cnJlbnQtPmdyb3VwX2xlYWRlcikgdG8KKwkgKiBwcm90ZWN0IHRoaXMgaW5zdGVhZCBvZiB0aGUgc2lnbG9jaywgYmVjYXVzZSB0aGV5IHJlYWxseQorCSAqIGhhdmUgbm8gbmVlZCB0byBkaXNhYmxlIGlycXMuCisJICovCisJc3RydWN0IHJsaW1pdCBybGltW1JMSU1fTkxJTUlUU107CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIGNwdV90aW1lcnNbM107CisKKwkvKiBrZWVwIHRoZSBwcm9jZXNzLXNoYXJlZCBrZXlyaW5ncyBoZXJlIHNvIHRoYXQgdGhleSBkbyB0aGUgcmlnaHQKKwkgKiB0aGluZyBpbiB0aHJlYWRzIGNyZWF0ZWQgd2l0aCBDTE9ORV9USFJFQUQgKi8KKyNpZmRlZiBDT05GSUdfS0VZUworCXN0cnVjdCBrZXkgKnNlc3Npb25fa2V5cmluZzsJLyoga2V5cmluZyBpbmhlcml0ZWQgb3ZlciBmb3JrICovCisJc3RydWN0IGtleSAqcHJvY2Vzc19rZXlyaW5nOwkvKiBrZXlyaW5nIHByaXZhdGUgdG8gdGhpcyBwcm9jZXNzICovCisjZW5kaWYKK307CisKKy8qCisgKiBCaXRzIGluIGZsYWdzIGZpZWxkIG9mIHNpZ25hbF9zdHJ1Y3QuCisgKi8KKyNkZWZpbmUgU0lHTkFMX1NUT1BfU1RPUFBFRAkweDAwMDAwMDAxIC8qIGpvYiBjb250cm9sIHN0b3AgaW4gZWZmZWN0ICovCisjZGVmaW5lIFNJR05BTF9TVE9QX0RFUVVFVUVECTB4MDAwMDAwMDIgLyogc3RvcCBzaWduYWwgZGVxdWV1ZWQgKi8KKyNkZWZpbmUgU0lHTkFMX1NUT1BfQ09OVElOVUVECTB4MDAwMDAwMDQgLyogU0lHQ09OVCBzaW5jZSBXQ09OVElOVUVEIHJlYXAgKi8KKyNkZWZpbmUgU0lHTkFMX0dST1VQX0VYSVQJMHgwMDAwMDAwOCAvKiBncm91cCBleGl0IGluIHByb2dyZXNzICovCisKKworLyoKKyAqIFByaW9yaXR5IG9mIGEgcHJvY2VzcyBnb2VzIGZyb20gMC4uTUFYX1BSSU8tMSwgdmFsaWQgUlQKKyAqIHByaW9yaXR5IGlzIDAuLk1BWF9SVF9QUklPLTEsIGFuZCBTQ0hFRF9OT1JNQUwgdGFza3MgYXJlCisgKiBpbiB0aGUgcmFuZ2UgTUFYX1JUX1BSSU8uLk1BWF9QUklPLTEuIFByaW9yaXR5IHZhbHVlcworICogYXJlIGludmVydGVkOiBsb3dlciBwLT5wcmlvIHZhbHVlIG1lYW5zIGhpZ2hlciBwcmlvcml0eS4KKyAqCisgKiBUaGUgTUFYX1VTRVJfUlRfUFJJTyB2YWx1ZSBhbGxvd3MgdGhlIGFjdHVhbCBtYXhpbXVtCisgKiBSVCBwcmlvcml0eSB0byBiZSBzZXBhcmF0ZSBmcm9tIHRoZSB2YWx1ZSBleHBvcnRlZCB0bworICogdXNlci1zcGFjZS4gIFRoaXMgYWxsb3dzIGtlcm5lbCB0aHJlYWRzIHRvIHNldCB0aGVpcgorICogcHJpb3JpdHkgdG8gYSB2YWx1ZSBoaWdoZXIgdGhhbiBhbnkgdXNlciB0YXNrLiBOb3RlOgorICogTUFYX1JUX1BSSU8gbXVzdCBub3QgYmUgc21hbGxlciB0aGFuIE1BWF9VU0VSX1JUX1BSSU8uCisgKi8KKworI2RlZmluZSBNQVhfVVNFUl9SVF9QUklPCTEwMAorI2RlZmluZSBNQVhfUlRfUFJJTwkJTUFYX1VTRVJfUlRfUFJJTworCisjZGVmaW5lIE1BWF9QUklPCQkoTUFYX1JUX1BSSU8gKyA0MCkKKworI2RlZmluZSBydF90YXNrKHApCQkodW5saWtlbHkoKHApLT5wcmlvIDwgTUFYX1JUX1BSSU8pKQorCisvKgorICogU29tZSBkYXkgdGhpcyB3aWxsIGJlIGEgZnVsbC1mbGVkZ2VkIHVzZXIgdHJhY2tpbmcgc3lzdGVtLi4KKyAqLworc3RydWN0IHVzZXJfc3RydWN0IHsKKwlhdG9taWNfdCBfX2NvdW50OwkvKiByZWZlcmVuY2UgY291bnQgKi8KKwlhdG9taWNfdCBwcm9jZXNzZXM7CS8qIEhvdyBtYW55IHByb2Nlc3NlcyBkb2VzIHRoaXMgdXNlciBoYXZlPyAqLworCWF0b21pY190IGZpbGVzOwkJLyogSG93IG1hbnkgb3BlbiBmaWxlcyBkb2VzIHRoaXMgdXNlciBoYXZlPyAqLworCWF0b21pY190IHNpZ3BlbmRpbmc7CS8qIEhvdyBtYW55IHBlbmRpbmcgc2lnbmFscyBkb2VzIHRoaXMgdXNlciBoYXZlPyAqLworCS8qIHByb3RlY3RlZCBieSBtcV9sb2NrCSovCisJdW5zaWduZWQgbG9uZyBtcV9ieXRlczsJLyogSG93IG1hbnkgYnl0ZXMgY2FuIGJlIGFsbG9jYXRlZCB0byBtcXVldWU/ICovCisJdW5zaWduZWQgbG9uZyBsb2NrZWRfc2htOyAvKiBIb3cgbWFueSBwYWdlcyBvZiBtbG9ja2VkIHNobSA/ICovCisKKyNpZmRlZiBDT05GSUdfS0VZUworCXN0cnVjdCBrZXkgKnVpZF9rZXlyaW5nOwkvKiBVSUQgc3BlY2lmaWMga2V5cmluZyAqLworCXN0cnVjdCBrZXkgKnNlc3Npb25fa2V5cmluZzsJLyogVUlEJ3MgZGVmYXVsdCBzZXNzaW9uIGtleXJpbmcgKi8KKyNlbmRpZgorCisJLyogSGFzaCB0YWJsZSBtYWludGVuYW5jZSBpbmZvcm1hdGlvbiAqLworCXN0cnVjdCBsaXN0X2hlYWQgdWlkaGFzaF9saXN0OworCXVpZF90IHVpZDsKK307CisKK2V4dGVybiBzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKmZpbmRfdXNlcih1aWRfdCk7CisKK2V4dGVybiBzdHJ1Y3QgdXNlcl9zdHJ1Y3Qgcm9vdF91c2VyOworI2RlZmluZSBJTklUX1VTRVIgKCZyb290X3VzZXIpCisKK3R5cGVkZWYgc3RydWN0IHByaW9fYXJyYXkgcHJpb19hcnJheV90Oworc3RydWN0IGJhY2tpbmdfZGV2X2luZm87CitzdHJ1Y3QgcmVjbGFpbV9zdGF0ZTsKKworI2lmZGVmIENPTkZJR19TQ0hFRFNUQVRTCitzdHJ1Y3Qgc2NoZWRfaW5mbyB7CisJLyogY3VtdWxhdGl2ZSBjb3VudGVycyAqLworCXVuc2lnbmVkIGxvbmcJY3B1X3RpbWUsCS8qIHRpbWUgc3BlbnQgb24gdGhlIGNwdSAqLworCQkJcnVuX2RlbGF5LAkvKiB0aW1lIHNwZW50IHdhaXRpbmcgb24gYSBydW5xdWV1ZSAqLworCQkJcGNudDsJCS8qICMgb2YgdGltZXNsaWNlcyBydW4gb24gdGhpcyBjcHUgKi8KKworCS8qIHRpbWVzdGFtcHMgKi8KKwl1bnNpZ25lZCBsb25nCWxhc3RfYXJyaXZhbCwJLyogd2hlbiB3ZSBsYXN0IHJhbiBvbiBhIGNwdSAqLworCQkJbGFzdF9xdWV1ZWQ7CS8qIHdoZW4gd2Ugd2VyZSBsYXN0IHF1ZXVlZCB0byBydW4gKi8KK307CisKK2V4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2Nfc2NoZWRzdGF0X29wZXJhdGlvbnM7CisjZW5kaWYKKworZW51bSBpZGxlX3R5cGUKK3sKKwlTQ0hFRF9JRExFLAorCU5PVF9JRExFLAorCU5FV0xZX0lETEUsCisJTUFYX0lETEVfVFlQRVMKK307CisKKy8qCisgKiBzY2hlZC1kb21haW5zIChtdWx0aXByb2Nlc3NvciBiYWxhbmNpbmcpIGRlY2xhcmF0aW9uczoKKyAqLworI2lmZGVmIENPTkZJR19TTVAKKyNkZWZpbmUgU0NIRURfTE9BRF9TQ0FMRQkxMjhVTAkvKiBpbmNyZWFzZSByZXNvbHV0aW9uIG9mIGxvYWQgKi8KKworI2RlZmluZSBTRF9MT0FEX0JBTEFOQ0UJCTEJLyogRG8gbG9hZCBiYWxhbmNpbmcgb24gdGhpcyBkb21haW4uICovCisjZGVmaW5lIFNEX0JBTEFOQ0VfTkVXSURMRQkyCS8qIEJhbGFuY2Ugd2hlbiBhYm91dCB0byBiZWNvbWUgaWRsZSAqLworI2RlZmluZSBTRF9CQUxBTkNFX0VYRUMJCTQJLyogQmFsYW5jZSBvbiBleGVjICovCisjZGVmaW5lIFNEX1dBS0VfSURMRQkJOAkvKiBXYWtlIHRvIGlkbGUgQ1BVIG9uIHRhc2sgd2FrZXVwICovCisjZGVmaW5lIFNEX1dBS0VfQUZGSU5FCQkxNgkvKiBXYWtlIHRhc2sgdG8gd2FraW5nIENQVSAqLworI2RlZmluZSBTRF9XQUtFX0JBTEFOQ0UJCTMyCS8qIFBlcmZvcm0gYmFsYW5jaW5nIGF0IHRhc2sgd2FrZXVwICovCisjZGVmaW5lIFNEX1NIQVJFX0NQVVBPV0VSCTY0CS8qIERvbWFpbiBtZW1iZXJzIHNoYXJlIGNwdSBwb3dlciAqLworCitzdHJ1Y3Qgc2NoZWRfZ3JvdXAgeworCXN0cnVjdCBzY2hlZF9ncm91cCAqbmV4dDsJLyogTXVzdCBiZSBhIGNpcmN1bGFyIGxpc3QgKi8KKwljcHVtYXNrX3QgY3B1bWFzazsKKworCS8qCisJICogQ1BVIHBvd2VyIG9mIHRoaXMgZ3JvdXAsIFNDSEVEX0xPQURfU0NBTEUgYmVpbmcgbWF4IHBvd2VyIGZvciBhCisJICogc2luZ2xlIENQVS4gVGhpcyBpcyByZWFkIG9ubHkgKGV4Y2VwdCBmb3Igc2V0dXAsIGhvdHBsdWcgQ1BVKS4KKwkgKi8KKwl1bnNpZ25lZCBsb25nIGNwdV9wb3dlcjsKK307CisKK3N0cnVjdCBzY2hlZF9kb21haW4geworCS8qIFRoZXNlIGZpZWxkcyBtdXN0IGJlIHNldHVwICovCisJc3RydWN0IHNjaGVkX2RvbWFpbiAqcGFyZW50OwkvKiB0b3AgZG9tYWluIG11c3QgYmUgbnVsbCB0ZXJtaW5hdGVkICovCisJc3RydWN0IHNjaGVkX2dyb3VwICpncm91cHM7CS8qIHRoZSBiYWxhbmNpbmcgZ3JvdXBzIG9mIHRoZSBkb21haW4gKi8KKwljcHVtYXNrX3Qgc3BhbjsJCQkvKiBzcGFuIG9mIGFsbCBDUFVzIGluIHRoaXMgZG9tYWluICovCisJdW5zaWduZWQgbG9uZyBtaW5faW50ZXJ2YWw7CS8qIE1pbmltdW0gYmFsYW5jZSBpbnRlcnZhbCBtcyAqLworCXVuc2lnbmVkIGxvbmcgbWF4X2ludGVydmFsOwkvKiBNYXhpbXVtIGJhbGFuY2UgaW50ZXJ2YWwgbXMgKi8KKwl1bnNpZ25lZCBpbnQgYnVzeV9mYWN0b3I7CS8qIGxlc3MgYmFsYW5jaW5nIGJ5IGZhY3RvciBpZiBidXN5ICovCisJdW5zaWduZWQgaW50IGltYmFsYW5jZV9wY3Q7CS8qIE5vIGJhbGFuY2UgdW50aWwgb3ZlciB3YXRlcm1hcmsgKi8KKwl1bnNpZ25lZCBsb25nIGxvbmcgY2FjaGVfaG90X3RpbWU7IC8qIFRhc2sgY29uc2lkZXJlZCBjYWNoZSBob3QgKG5zKSAqLworCXVuc2lnbmVkIGludCBjYWNoZV9uaWNlX3RyaWVzOwkvKiBMZWF2ZSBjYWNoZSBob3QgdGFza3MgZm9yICMgdHJpZXMgKi8KKwl1bnNpZ25lZCBpbnQgcGVyX2NwdV9nYWluOwkvKiBDUFUgJSBnYWluZWQgYnkgYWRkaW5nIGRvbWFpbiBjcHVzICovCisJaW50IGZsYWdzOwkJCS8qIFNlZSBTRF8qICovCisKKwkvKiBSdW50aW1lIGZpZWxkcy4gKi8KKwl1bnNpZ25lZCBsb25nIGxhc3RfYmFsYW5jZTsJLyogaW5pdCB0byBqaWZmaWVzLiB1bml0cyBpbiBqaWZmaWVzICovCisJdW5zaWduZWQgaW50IGJhbGFuY2VfaW50ZXJ2YWw7CS8qIGluaXRpYWxpc2UgdG8gMS4gdW5pdHMgaW4gbXMuICovCisJdW5zaWduZWQgaW50IG5yX2JhbGFuY2VfZmFpbGVkOyAvKiBpbml0aWFsaXNlIHRvIDAgKi8KKworI2lmZGVmIENPTkZJR19TQ0hFRFNUQVRTCisJLyogbG9hZF9iYWxhbmNlKCkgc3RhdHMgKi8KKwl1bnNpZ25lZCBsb25nIGxiX2NudFtNQVhfSURMRV9UWVBFU107CisJdW5zaWduZWQgbG9uZyBsYl9mYWlsZWRbTUFYX0lETEVfVFlQRVNdOworCXVuc2lnbmVkIGxvbmcgbGJfYmFsYW5jZWRbTUFYX0lETEVfVFlQRVNdOworCXVuc2lnbmVkIGxvbmcgbGJfaW1iYWxhbmNlW01BWF9JRExFX1RZUEVTXTsKKwl1bnNpZ25lZCBsb25nIGxiX2dhaW5lZFtNQVhfSURMRV9UWVBFU107CisJdW5zaWduZWQgbG9uZyBsYl9ob3RfZ2FpbmVkW01BWF9JRExFX1RZUEVTXTsKKwl1bnNpZ25lZCBsb25nIGxiX25vYnVzeWdbTUFYX0lETEVfVFlQRVNdOworCXVuc2lnbmVkIGxvbmcgbGJfbm9idXN5cVtNQVhfSURMRV9UWVBFU107CisKKwkvKiBBY3RpdmUgbG9hZCBiYWxhbmNpbmcgKi8KKwl1bnNpZ25lZCBsb25nIGFsYl9jbnQ7CisJdW5zaWduZWQgbG9uZyBhbGJfZmFpbGVkOworCXVuc2lnbmVkIGxvbmcgYWxiX3B1c2hlZDsKKworCS8qIHNjaGVkX2JhbGFuY2VfZXhlYygpIHN0YXRzICovCisJdW5zaWduZWQgbG9uZyBzYmVfYXR0ZW1wdHM7CisJdW5zaWduZWQgbG9uZyBzYmVfcHVzaGVkOworCisJLyogdHJ5X3RvX3dha2VfdXAoKSBzdGF0cyAqLworCXVuc2lnbmVkIGxvbmcgdHR3dV93YWtlX3JlbW90ZTsKKwl1bnNpZ25lZCBsb25nIHR0d3VfbW92ZV9hZmZpbmU7CisJdW5zaWduZWQgbG9uZyB0dHd1X21vdmVfYmFsYW5jZTsKKyNlbmRpZgorfTsKKworI2lmZGVmIEFSQ0hfSEFTX1NDSEVEX0RPTUFJTgorLyogVXNlZnVsIGhlbHBlcnMgdGhhdCBhcmNoIHNldHVwIGNvZGUgbWF5IHVzZS4gRGVmaW5lZCBpbiBrZXJuZWwvc2NoZWQuYyAqLworZXh0ZXJuIGNwdW1hc2tfdCBjcHVfaXNvbGF0ZWRfbWFwOworZXh0ZXJuIHZvaWQgaW5pdF9zY2hlZF9idWlsZF9ncm91cHMoc3RydWN0IHNjaGVkX2dyb3VwIGdyb3Vwc1tdLAorCSAgICAgICAgICAgICAgICAgICAgICAgIGNwdW1hc2tfdCBzcGFuLCBpbnQgKCpncm91cF9mbikoaW50IGNwdSkpOworZXh0ZXJuIHZvaWQgY3B1X2F0dGFjaF9kb21haW4oc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGludCBjcHUpOworI2VuZGlmIC8qIEFSQ0hfSEFTX1NDSEVEX0RPTUFJTiAqLworI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KKworCitzdHJ1Y3QgaW9fY29udGV4dDsJCQkvKiBTZWUgYmxrZGV2LmggKi8KK3ZvaWQgZXhpdF9pb19jb250ZXh0KHZvaWQpOworc3RydWN0IGNwdXNldDsKKworI2RlZmluZSBOR1JPVVBTX1NNQUxMCQkzMgorI2RlZmluZSBOR1JPVVBTX1BFUl9CTE9DSwkoKGludCkoUEFHRV9TSVpFIC8gc2l6ZW9mKGdpZF90KSkpCitzdHJ1Y3QgZ3JvdXBfaW5mbyB7CisJaW50IG5ncm91cHM7CisJYXRvbWljX3QgdXNhZ2U7CisJZ2lkX3Qgc21hbGxfYmxvY2tbTkdST1VQU19TTUFMTF07CisJaW50IG5ibG9ja3M7CisJZ2lkX3QgKmJsb2Nrc1swXTsKK307CisKKy8qCisgKiBnZXRfZ3JvdXBfaW5mbygpIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG93bmluZyB0YXNrIGxvY2tlZCAodmlhIHRhc2tfbG9jaygpKQorICogd2hlbiB0YXNrICE9IGN1cnJlbnQuICBUaGUgcmVhc29uIGJlaW5nIHRoYXQgdGhlIHZhc3QgbWFqb3JpdHkgb2YgY2FsbGVycyBhcmUKKyAqIGxvb2tpbmcgYXQgY3VycmVudC0+Z3JvdXBfaW5mbywgd2hpY2ggY2FuIG5vdCBiZSBjaGFuZ2VkIGV4Y2VwdCBieSB0aGUKKyAqIGN1cnJlbnQgdGFzay4gIENoYW5naW5nIGN1cnJlbnQtPmdyb3VwX2luZm8gcmVxdWlyZXMgdGhlIHRhc2sgbG9jaywgdG9vLgorICovCisjZGVmaW5lIGdldF9ncm91cF9pbmZvKGdyb3VwX2luZm8pIGRvIHsgXAorCWF0b21pY19pbmMoJihncm91cF9pbmZvKS0+dXNhZ2UpOyBcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIHB1dF9ncm91cF9pbmZvKGdyb3VwX2luZm8pIGRvIHsgXAorCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCYoZ3JvdXBfaW5mbyktPnVzYWdlKSkgXAorCQlncm91cHNfZnJlZShncm91cF9pbmZvKTsgXAorfSB3aGlsZSAoMCkKKworc3RydWN0IGdyb3VwX2luZm8gKmdyb3Vwc19hbGxvYyhpbnQgZ2lkc2V0c2l6ZSk7Cit2b2lkIGdyb3Vwc19mcmVlKHN0cnVjdCBncm91cF9pbmZvICpncm91cF9pbmZvKTsKK2ludCBzZXRfY3VycmVudF9ncm91cHMoc3RydWN0IGdyb3VwX2luZm8gKmdyb3VwX2luZm8pOworLyogYWNjZXNzIHRoZSBncm91cHMgImFycmF5IiB3aXRoIHRoaXMgbWFjcm8gKi8KKyNkZWZpbmUgR1JPVVBfQVQoZ2ksIGkpIFwKKyAgICAoKGdpKS0+YmxvY2tzWyhpKS9OR1JPVVBTX1BFUl9CTE9DS11bKGkpJU5HUk9VUFNfUEVSX0JMT0NLXSkKKworCitzdHJ1Y3QgYXVkaXRfY29udGV4dDsJCS8qIFNlZSBhdWRpdC5jICovCitzdHJ1Y3QgbWVtcG9saWN5OworCitzdHJ1Y3QgdGFza19zdHJ1Y3QgeworCXZvbGF0aWxlIGxvbmcgc3RhdGU7CS8qIC0xIHVucnVubmFibGUsIDAgcnVubmFibGUsID4wIHN0b3BwZWQgKi8KKwlzdHJ1Y3QgdGhyZWFkX2luZm8gKnRocmVhZF9pbmZvOworCWF0b21pY190IHVzYWdlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CS8qIHBlciBwcm9jZXNzIGZsYWdzLCBkZWZpbmVkIGJlbG93ICovCisJdW5zaWduZWQgbG9uZyBwdHJhY2U7CisKKwlpbnQgbG9ja19kZXB0aDsJCS8qIExvY2sgZGVwdGggKi8KKworCWludCBwcmlvLCBzdGF0aWNfcHJpbzsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHJ1bl9saXN0OworCXByaW9fYXJyYXlfdCAqYXJyYXk7CisKKwl1bnNpZ25lZCBsb25nIHNsZWVwX2F2ZzsKKwl1bnNpZ25lZCBsb25nIGxvbmcgdGltZXN0YW1wLCBsYXN0X3JhbjsKKwl1bnNpZ25lZCBsb25nIGxvbmcgc2NoZWRfdGltZTsgLyogc2NoZWRfY2xvY2sgdGltZSBzcGVudCBydW5uaW5nICovCisJaW50IGFjdGl2YXRlZDsKKworCXVuc2lnbmVkIGxvbmcgcG9saWN5OworCWNwdW1hc2tfdCBjcHVzX2FsbG93ZWQ7CisJdW5zaWduZWQgaW50IHRpbWVfc2xpY2UsIGZpcnN0X3RpbWVfc2xpY2U7CisKKyNpZmRlZiBDT05GSUdfU0NIRURTVEFUUworCXN0cnVjdCBzY2hlZF9pbmZvIHNjaGVkX2luZm87CisjZW5kaWYKKworCXN0cnVjdCBsaXN0X2hlYWQgdGFza3M7CisJLyoKKwkgKiBwdHJhY2VfbGlzdC9wdHJhY2VfY2hpbGRyZW4gZm9ybXMgdGhlIGxpc3Qgb2YgbXkgY2hpbGRyZW4KKwkgKiB0aGF0IHdlcmUgc3RvbGVuIGJ5IGEgcHRyYWNlci4KKwkgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHB0cmFjZV9jaGlsZHJlbjsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHB0cmFjZV9saXN0OworCisJc3RydWN0IG1tX3N0cnVjdCAqbW0sICphY3RpdmVfbW07CisKKy8qIHRhc2sgc3RhdGUgKi8KKwlzdHJ1Y3QgbGludXhfYmluZm10ICpiaW5mbXQ7CisJbG9uZyBleGl0X3N0YXRlOworCWludCBleGl0X2NvZGUsIGV4aXRfc2lnbmFsOworCWludCBwZGVhdGhfc2lnbmFsOyAgLyogIFRoZSBzaWduYWwgc2VudCB3aGVuIHRoZSBwYXJlbnQgZGllcyAgKi8KKwkvKiA/Pz8gKi8KKwl1bnNpZ25lZCBsb25nIHBlcnNvbmFsaXR5OworCXVuc2lnbmVkIGRpZF9leGVjOjE7CisJcGlkX3QgcGlkOworCXBpZF90IHRnaWQ7CisJLyogCisJICogcG9pbnRlcnMgdG8gKG9yaWdpbmFsKSBwYXJlbnQgcHJvY2VzcywgeW91bmdlc3QgY2hpbGQsIHlvdW5nZXIgc2libGluZywKKwkgKiBvbGRlciBzaWJsaW5nLCByZXNwZWN0aXZlbHkuICAocC0+ZmF0aGVyIGNhbiBiZSByZXBsYWNlZCB3aXRoIAorCSAqIHAtPnBhcmVudC0+cGlkKQorCSAqLworCXN0cnVjdCB0YXNrX3N0cnVjdCAqcmVhbF9wYXJlbnQ7IC8qIHJlYWwgcGFyZW50IHByb2Nlc3MgKHdoZW4gYmVpbmcgZGVidWdnZWQpICovCisJc3RydWN0IHRhc2tfc3RydWN0ICpwYXJlbnQ7CS8qIHBhcmVudCBwcm9jZXNzICovCisJLyoKKwkgKiBjaGlsZHJlbi9zaWJsaW5nIGZvcm1zIHRoZSBsaXN0IG9mIG15IGNoaWxkcmVuIHBsdXMgdGhlCisJICogdGFza3MgSSdtIHB0cmFjaW5nLgorCSAqLworCXN0cnVjdCBsaXN0X2hlYWQgY2hpbGRyZW47CS8qIGxpc3Qgb2YgbXkgY2hpbGRyZW4gKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHNpYmxpbmc7CS8qIGxpbmthZ2UgaW4gbXkgcGFyZW50J3MgY2hpbGRyZW4gbGlzdCAqLworCXN0cnVjdCB0YXNrX3N0cnVjdCAqZ3JvdXBfbGVhZGVyOwkvKiB0aHJlYWRncm91cCBsZWFkZXIgKi8KKworCS8qIFBJRC9QSUQgaGFzaCB0YWJsZSBsaW5rYWdlLiAqLworCXN0cnVjdCBwaWQgcGlkc1tQSURUWVBFX01BWF07CisKKwlzdHJ1Y3QgY29tcGxldGlvbiAqdmZvcmtfZG9uZTsJCS8qIGZvciB2Zm9yaygpICovCisJaW50IF9fdXNlciAqc2V0X2NoaWxkX3RpZDsJCS8qIENMT05FX0NISUxEX1NFVFRJRCAqLworCWludCBfX3VzZXIgKmNsZWFyX2NoaWxkX3RpZDsJCS8qIENMT05FX0NISUxEX0NMRUFSVElEICovCisKKwl1bnNpZ25lZCBsb25nIHJ0X3ByaW9yaXR5OworCWNwdXRpbWVfdCB1dGltZSwgc3RpbWU7CisJdW5zaWduZWQgbG9uZyBudmNzdywgbml2Y3N3OyAvKiBjb250ZXh0IHN3aXRjaCBjb3VudHMgKi8KKwlzdHJ1Y3QgdGltZXNwZWMgc3RhcnRfdGltZTsKKy8qIG1tIGZhdWx0IGFuZCBzd2FwIGluZm86IHRoaXMgY2FuIGFyZ3VhYmx5IGJlIHNlZW4gYXMgZWl0aGVyIG1tLXNwZWNpZmljIG9yIHRocmVhZC1zcGVjaWZpYyAqLworCXVuc2lnbmVkIGxvbmcgbWluX2ZsdCwgbWFqX2ZsdDsKKworICAJY3B1dGltZV90IGl0X3Byb2ZfZXhwaXJlcywgaXRfdmlydF9leHBpcmVzOworCXVuc2lnbmVkIGxvbmcgbG9uZyBpdF9zY2hlZF9leHBpcmVzOworCXN0cnVjdCBsaXN0X2hlYWQgY3B1X3RpbWVyc1szXTsKKworLyogcHJvY2VzcyBjcmVkZW50aWFscyAqLworCXVpZF90IHVpZCxldWlkLHN1aWQsZnN1aWQ7CisJZ2lkX3QgZ2lkLGVnaWQsc2dpZCxmc2dpZDsKKwlzdHJ1Y3QgZ3JvdXBfaW5mbyAqZ3JvdXBfaW5mbzsKKwlrZXJuZWxfY2FwX3QgICBjYXBfZWZmZWN0aXZlLCBjYXBfaW5oZXJpdGFibGUsIGNhcF9wZXJtaXR0ZWQ7CisJdW5zaWduZWQga2VlcF9jYXBhYmlsaXRpZXM6MTsKKwlzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXI7CisjaWZkZWYgQ09ORklHX0tFWVMKKwlzdHJ1Y3Qga2V5ICp0aHJlYWRfa2V5cmluZzsJLyoga2V5cmluZyBwcml2YXRlIHRvIHRoaXMgdGhyZWFkICovCisjZW5kaWYKKwlpbnQgb29ta2lsbGFkajsgLyogT09NIGtpbGwgc2NvcmUgYWRqdXN0bWVudCAoYml0IHNoaWZ0KS4gKi8KKwljaGFyIGNvbW1bVEFTS19DT01NX0xFTl07CisvKiBmaWxlIHN5c3RlbSBpbmZvICovCisJaW50IGxpbmtfY291bnQsIHRvdGFsX2xpbmtfY291bnQ7CisvKiBpcGMgc3R1ZmYgKi8KKwlzdHJ1Y3Qgc3lzdl9zZW0gc3lzdnNlbTsKKy8qIENQVS1zcGVjaWZpYyBzdGF0ZSBvZiB0aGlzIHRhc2sgKi8KKwlzdHJ1Y3QgdGhyZWFkX3N0cnVjdCB0aHJlYWQ7CisvKiBmaWxlc3lzdGVtIGluZm9ybWF0aW9uICovCisJc3RydWN0IGZzX3N0cnVjdCAqZnM7CisvKiBvcGVuIGZpbGUgaW5mb3JtYXRpb24gKi8KKwlzdHJ1Y3QgZmlsZXNfc3RydWN0ICpmaWxlczsKKy8qIG5hbWVzcGFjZSAqLworCXN0cnVjdCBuYW1lc3BhY2UgKm5hbWVzcGFjZTsKKy8qIHNpZ25hbCBoYW5kbGVycyAqLworCXN0cnVjdCBzaWduYWxfc3RydWN0ICpzaWduYWw7CisJc3RydWN0IHNpZ2hhbmRfc3RydWN0ICpzaWdoYW5kOworCisJc2lnc2V0X3QgYmxvY2tlZCwgcmVhbF9ibG9ja2VkOworCXN0cnVjdCBzaWdwZW5kaW5nIHBlbmRpbmc7CisKKwl1bnNpZ25lZCBsb25nIHNhc19zc19zcDsKKwlzaXplX3Qgc2FzX3NzX3NpemU7CisJaW50ICgqbm90aWZpZXIpKHZvaWQgKnByaXYpOworCXZvaWQgKm5vdGlmaWVyX2RhdGE7CisJc2lnc2V0X3QgKm5vdGlmaWVyX21hc2s7CisJCisJdm9pZCAqc2VjdXJpdHk7CisJc3RydWN0IGF1ZGl0X2NvbnRleHQgKmF1ZGl0X2NvbnRleHQ7CisJc2VjY29tcF90IHNlY2NvbXA7CisKKy8qIFRocmVhZCBncm91cCB0cmFja2luZyAqLworICAgCXUzMiBwYXJlbnRfZXhlY19pZDsKKyAgIAl1MzIgc2VsZl9leGVjX2lkOworLyogUHJvdGVjdGlvbiBvZiAoZGUtKWFsbG9jYXRpb246IG1tLCBmaWxlcywgZnMsIHR0eSwga2V5cmluZ3MgKi8KKwlzcGlubG9ja190IGFsbG9jX2xvY2s7CisvKiBQcm90ZWN0aW9uIG9mIHByb2NfZGVudHJ5OiBuZXN0aW5nIHByb2NfbG9jaywgZGNhY2hlX2xvY2ssIHdyaXRlX2xvY2tfaXJxKCZ0YXNrbGlzdF9sb2NrKTsgKi8KKwlzcGlubG9ja190IHByb2NfbG9jazsKKy8qIGNvbnRleHQtc3dpdGNoIGxvY2sgKi8KKwlzcGlubG9ja190IHN3aXRjaF9sb2NrOworCisvKiBqb3VybmFsbGluZyBmaWxlc3lzdGVtIGluZm8gKi8KKwl2b2lkICpqb3VybmFsX2luZm87CisKKy8qIFZNIHN0YXRlICovCisJc3RydWN0IHJlY2xhaW1fc3RhdGUgKnJlY2xhaW1fc3RhdGU7CisKKwlzdHJ1Y3QgZGVudHJ5ICpwcm9jX2RlbnRyeTsKKwlzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmFja2luZ19kZXZfaW5mbzsKKworCXN0cnVjdCBpb19jb250ZXh0ICppb19jb250ZXh0OworCisJdW5zaWduZWQgbG9uZyBwdHJhY2VfbWVzc2FnZTsKKwlzaWdpbmZvX3QgKmxhc3Rfc2lnaW5mbzsgLyogRm9yIHB0cmFjZSB1c2UuICAqLworLyoKKyAqIGN1cnJlbnQgaW8gd2FpdCBoYW5kbGU6IHdhaXQgcXVldWUgZW50cnkgdG8gdXNlIGZvciBpbyB3YWl0cworICogSWYgdGhpcyB0aHJlYWQgaXMgcHJvY2Vzc2luZyBhaW8sIHRoaXMgcG9pbnRzIGF0IHRoZSB3YWl0cXVldWUKKyAqIGluc2lkZSB0aGUgY3VycmVudGx5IGhhbmRsZWQga2lvY2IuIEl0IG1heSBiZSBOVUxMIChpLmUuIGRlZmF1bHQKKyAqIHRvIGEgc3RhY2sgYmFzZWQgc3luY2hyb25vdXMgd2FpdCkgaWYgaXRzIGRvaW5nIHN5bmMgSU8uCisgKi8KKwl3YWl0X3F1ZXVlX3QgKmlvX3dhaXQ7CisvKiBpL28gY291bnRlcnMoYnl0ZXMgcmVhZC93cml0dGVuLCAjc3lzY2FsbHMgKi8KKwl1NjQgcmNoYXIsIHdjaGFyLCBzeXNjciwgc3lzY3c7CisjaWYgZGVmaW5lZChDT05GSUdfQlNEX1BST0NFU1NfQUNDVCkKKwl1NjQgYWNjdF9yc3NfbWVtMTsJLyogYWNjdW11bGF0ZWQgcnNzIHVzYWdlICovCisJdTY0IGFjY3Rfdm1fbWVtMTsJLyogYWNjdW11bGF0ZWQgdmlydHVhbCBtZW1vcnkgdXNhZ2UgKi8KKwljbG9ja190IGFjY3Rfc3RpbWV4cGQ7CS8qIGNsb2NrX3QtY29udmVydGVkIHN0aW1lIHNpbmNlIGxhc3QgdXBkYXRlICovCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfTlVNQQorICAJc3RydWN0IG1lbXBvbGljeSAqbWVtcG9saWN5OworCXNob3J0IGlsX25leHQ7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQ1BVU0VUUworCXN0cnVjdCBjcHVzZXQgKmNwdXNldDsKKwlub2RlbWFza190IG1lbXNfYWxsb3dlZDsKKwlpbnQgY3B1c2V0X21lbXNfZ2VuZXJhdGlvbjsKKyNlbmRpZgorfTsKKworc3RhdGljIGlubGluZSBwaWRfdCBwcm9jZXNzX2dyb3VwKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCXJldHVybiB0c2stPnNpZ25hbC0+cGdycDsKK30KKworLyoqCisgKiBwaWRfYWxpdmUgLSBjaGVjayB0aGF0IGEgdGFzayBzdHJ1Y3R1cmUgaXMgbm90IHN0YWxlCisgKiBAcDogVGFzayBzdHJ1Y3R1cmUgdG8gYmUgY2hlY2tlZC4KKyAqCisgKiBUZXN0IGlmIGEgcHJvY2VzcyBpcyBub3QgeWV0IGRlYWQgKGF0IG1vc3Qgem9tYmllIHN0YXRlKQorICogSWYgcGlkX2FsaXZlIGZhaWxzLCB0aGVuIHBvaW50ZXJzIHdpdGhpbiB0aGUgdGFzayBzdHJ1Y3R1cmUKKyAqIGNhbiBiZSBzdGFsZSBhbmQgbXVzdCBub3QgYmUgZGVyZWZlcmVuY2VkLgorICovCitzdGF0aWMgaW5saW5lIGludCBwaWRfYWxpdmUoc3RydWN0IHRhc2tfc3RydWN0ICpwKQoreworCXJldHVybiBwLT5waWRzW1BJRFRZUEVfUElEXS5uciAhPSAwOworfQorCitleHRlcm4gdm9pZCBmcmVlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0c2spOworZXh0ZXJuIHZvaWQgX19wdXRfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spOworI2RlZmluZSBnZXRfdGFza19zdHJ1Y3QodHNrKSBkbyB7IGF0b21pY19pbmMoJih0c2spLT51c2FnZSk7IH0gd2hpbGUoMCkKKyNkZWZpbmUgcHV0X3Rhc2tfc3RydWN0KHRzaykgXAorZG8geyBpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmKHRzayktPnVzYWdlKSkgX19wdXRfdGFza19zdHJ1Y3QodHNrKTsgfSB3aGlsZSgwKQorCisvKgorICogUGVyIHByb2Nlc3MgZmxhZ3MKKyAqLworI2RlZmluZSBQRl9BTElHTldBUk4JMHgwMDAwMDAwMQkvKiBQcmludCBhbGlnbm1lbnQgd2FybmluZyBtc2dzICovCisJCQkJCS8qIE5vdCBpbXBsZW1lbnRlZCB5ZXQsIG9ubHkgZm9yIDQ4NiovCisjZGVmaW5lIFBGX1NUQVJUSU5HCTB4MDAwMDAwMDIJLyogYmVpbmcgY3JlYXRlZCAqLworI2RlZmluZSBQRl9FWElUSU5HCTB4MDAwMDAwMDQJLyogZ2V0dGluZyBzaHV0IGRvd24gKi8KKyNkZWZpbmUgUEZfREVBRAkJMHgwMDAwMDAwOAkvKiBEZWFkICovCisjZGVmaW5lIFBGX0ZPUktOT0VYRUMJMHgwMDAwMDA0MAkvKiBmb3JrZWQgYnV0IGRpZG4ndCBleGVjICovCisjZGVmaW5lIFBGX1NVUEVSUFJJVgkweDAwMDAwMTAwCS8qIHVzZWQgc3VwZXItdXNlciBwcml2aWxlZ2VzICovCisjZGVmaW5lIFBGX0RVTVBDT1JFCTB4MDAwMDAyMDAJLyogZHVtcGVkIGNvcmUgKi8KKyNkZWZpbmUgUEZfU0lHTkFMRUQJMHgwMDAwMDQwMAkvKiBraWxsZWQgYnkgYSBzaWduYWwgKi8KKyNkZWZpbmUgUEZfTUVNQUxMT0MJMHgwMDAwMDgwMAkvKiBBbGxvY2F0aW5nIG1lbW9yeSAqLworI2RlZmluZSBQRl9GTFVTSEVSCTB4MDAwMDEwMDAJLyogcmVzcG9uc2libGUgZm9yIGRpc2sgd3JpdGViYWNrICovCisjZGVmaW5lIFBGX1VTRURfTUFUSAkweDAwMDAyMDAwCS8qIGlmIHVuc2V0IHRoZSBmcHUgbXVzdCBiZSBpbml0aWFsaXplZCBiZWZvcmUgdXNlICovCisjZGVmaW5lIFBGX0ZSRUVaRQkweDAwMDA0MDAwCS8qIHRoaXMgdGFzayBpcyBiZWluZyBmcm96ZW4gZm9yIHN1c3BlbmQgbm93ICovCisjZGVmaW5lIFBGX05PRlJFRVpFCTB4MDAwMDgwMDAJLyogdGhpcyB0aHJlYWQgc2hvdWxkIG5vdCBiZSBmcm96ZW4gKi8KKyNkZWZpbmUgUEZfRlJPWkVOCTB4MDAwMTAwMDAJLyogZnJvemVuIGZvciBzeXN0ZW0gc3VzcGVuZCAqLworI2RlZmluZSBQRl9GU1RSQU5TCTB4MDAwMjAwMDAJLyogaW5zaWRlIGEgZmlsZXN5c3RlbSB0cmFuc2FjdGlvbiAqLworI2RlZmluZSBQRl9LU1dBUEQJMHgwMDA0MDAwMAkvKiBJIGFtIGtzd2FwZCAqLworI2RlZmluZSBQRl9TV0FQT0ZGCTB4MDAwODAwMDAJLyogSSBhbSBpbiBzd2Fwb2ZmICovCisjZGVmaW5lIFBGX0xFU1NfVEhST1RUTEUgMHgwMDEwMDAwMAkvKiBUaHJvdHRsZSBtZSBsZXNzOiBJIGNsZWFuIG1lbW9yeSAqLworI2RlZmluZSBQRl9TWU5DV1JJVEUJMHgwMDIwMDAwMAkvKiBJIGFtIGRvaW5nIGEgc3luYyB3cml0ZSAqLworI2RlZmluZSBQRl9CT1JST1dFRF9NTQkweDAwNDAwMDAwCS8qIEkgYW0gYSBrdGhyZWFkIGRvaW5nIHVzZV9tbSAqLworI2RlZmluZSBQRl9SQU5ET01JWkUJMHgwMDgwMDAwMAkvKiByYW5kb21pemUgdmlydHVhbCBhZGRyZXNzIHNwYWNlICovCisKKy8qCisgKiBPbmx5IHRoZSBfY3VycmVudF8gdGFzayBjYW4gcmVhZC93cml0ZSB0byB0c2stPmZsYWdzLCBidXQgb3RoZXIKKyAqIHRhc2tzIGNhbiBhY2Nlc3MgdHNrLT5mbGFncyBpbiByZWFkb25seSBtb2RlIGZvciBleGFtcGxlCisgKiB3aXRoIHRza191c2VkX21hdGggKGxpa2UgZHVyaW5nIHRocmVhZGVkIGNvcmUgZHVtcGluZykuCisgKiBUaGVyZSBpcyBob3dldmVyIGFuIGV4Y2VwdGlvbiB0byB0aGlzIHJ1bGUgZHVyaW5nIHB0cmFjZQorICogb3IgZHVyaW5nIGZvcms6IHRoZSBwdHJhY2VyIHRhc2sgaXMgYWxsb3dlZCB0byB3cml0ZSB0byB0aGUKKyAqIGNoaWxkLT5mbGFncyBvZiBpdHMgdHJhY2VkIGNoaWxkIChzYW1lIGdvZXMgZm9yIGZvcmssIHRoZSBwYXJlbnQKKyAqIGNhbiB3cml0ZSB0byB0aGUgY2hpbGQtPmZsYWdzKSwgYmVjYXVzZSB3ZSdyZSBndWFyYW50ZWVkIHRoZQorICogY2hpbGQgaXMgbm90IHJ1bm5pbmcgYW5kIGluIHR1cm4gbm90IGNoYW5naW5nIGNoaWxkLT5mbGFncworICogYXQgdGhlIHNhbWUgdGltZSB0aGUgcGFyZW50IGRvZXMgaXQuCisgKi8KKyNkZWZpbmUgY2xlYXJfc3RvcHBlZF9jaGlsZF91c2VkX21hdGgoY2hpbGQpIGRvIHsgKGNoaWxkKS0+ZmxhZ3MgJj0gflBGX1VTRURfTUFUSDsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgc2V0X3N0b3BwZWRfY2hpbGRfdXNlZF9tYXRoKGNoaWxkKSBkbyB7IChjaGlsZCktPmZsYWdzIHw9IFBGX1VTRURfTUFUSDsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgY2xlYXJfdXNlZF9tYXRoKCkgY2xlYXJfc3RvcHBlZF9jaGlsZF91c2VkX21hdGgoY3VycmVudCkKKyNkZWZpbmUgc2V0X3VzZWRfbWF0aCgpIHNldF9zdG9wcGVkX2NoaWxkX3VzZWRfbWF0aChjdXJyZW50KQorI2RlZmluZSBjb25kaXRpb25hbF9zdG9wcGVkX2NoaWxkX3VzZWRfbWF0aChjb25kaXRpb24sIGNoaWxkKSBcCisJZG8geyAoY2hpbGQpLT5mbGFncyAmPSB+UEZfVVNFRF9NQVRILCAoY2hpbGQpLT5mbGFncyB8PSAoY29uZGl0aW9uKSA/IFBGX1VTRURfTUFUSCA6IDA7IH0gd2hpbGUgKDApCisjZGVmaW5lIGNvbmRpdGlvbmFsX3VzZWRfbWF0aChjb25kaXRpb24pIFwKKwljb25kaXRpb25hbF9zdG9wcGVkX2NoaWxkX3VzZWRfbWF0aChjb25kaXRpb24sIGN1cnJlbnQpCisjZGVmaW5lIGNvcHlfdG9fc3RvcHBlZF9jaGlsZF91c2VkX21hdGgoY2hpbGQpIFwKKwlkbyB7IChjaGlsZCktPmZsYWdzICY9IH5QRl9VU0VEX01BVEgsIChjaGlsZCktPmZsYWdzIHw9IGN1cnJlbnQtPmZsYWdzICYgUEZfVVNFRF9NQVRIOyB9IHdoaWxlICgwKQorLyogTk9URTogdGhpcyB3aWxsIHJldHVybiAwIG9yIFBGX1VTRURfTUFUSCwgaXQgd2lsbCBuZXZlciByZXR1cm4gMSAqLworI2RlZmluZSB0c2tfdXNlZF9tYXRoKHApICgocCktPmZsYWdzICYgUEZfVVNFRF9NQVRIKQorI2RlZmluZSB1c2VkX21hdGgoKSB0c2tfdXNlZF9tYXRoKGN1cnJlbnQpCisKKyNpZmRlZiBDT05GSUdfU01QCitleHRlcm4gaW50IHNldF9jcHVzX2FsbG93ZWQodGFza190ICpwLCBjcHVtYXNrX3QgbmV3X21hc2spOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IHNldF9jcHVzX2FsbG93ZWQodGFza190ICpwLCBjcHVtYXNrX3QgbmV3X21hc2spCit7CisJaWYgKCFjcHVzX2ludGVyc2VjdHMobmV3X21hc2ssIGNwdV9vbmxpbmVfbWFwKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBzY2hlZF9jbG9jayh2b2lkKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgY3VycmVudF9zY2hlZF90aW1lKGNvbnN0IHRhc2tfdCAqY3VycmVudF90YXNrKTsKKworLyogc2NoZWRfZXhlYyBpcyBjYWxsZWQgYnkgcHJvY2Vzc2VzIHBlcmZvcm1pbmcgYW4gZXhlYyAqLworI2lmZGVmIENPTkZJR19TTVAKK2V4dGVybiB2b2lkIHNjaGVkX2V4ZWModm9pZCk7CisjZWxzZQorI2RlZmluZSBzY2hlZF9leGVjKCkgICB7fQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKK2V4dGVybiB2b2lkIGlkbGVfdGFza19leGl0KHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBpZGxlX3Rhc2tfZXhpdCh2b2lkKSB7fQorI2VuZGlmCisKK2V4dGVybiB2b2lkIHNjaGVkX2lkbGVfbmV4dCh2b2lkKTsKK2V4dGVybiB2b2lkIHNldF91c2VyX25pY2UodGFza190ICpwLCBsb25nIG5pY2UpOworZXh0ZXJuIGludCB0YXNrX3ByaW8oY29uc3QgdGFza190ICpwKTsKK2V4dGVybiBpbnQgdGFza19uaWNlKGNvbnN0IHRhc2tfdCAqcCk7CitleHRlcm4gaW50IHRhc2tfY3Vycihjb25zdCB0YXNrX3QgKnApOworZXh0ZXJuIGludCBpZGxlX2NwdShpbnQgY3B1KTsKK2V4dGVybiBpbnQgc2NoZWRfc2V0c2NoZWR1bGVyKHN0cnVjdCB0YXNrX3N0cnVjdCAqLCBpbnQsIHN0cnVjdCBzY2hlZF9wYXJhbSAqKTsKK2V4dGVybiB0YXNrX3QgKmlkbGVfdGFzayhpbnQgY3B1KTsKKwordm9pZCB5aWVsZCh2b2lkKTsKKworLyoKKyAqIFRoZSBkZWZhdWx0IChMaW51eCkgZXhlY3V0aW9uIGRvbWFpbi4KKyAqLworZXh0ZXJuIHN0cnVjdCBleGVjX2RvbWFpbglkZWZhdWx0X2V4ZWNfZG9tYWluOworCit1bmlvbiB0aHJlYWRfdW5pb24geworCXN0cnVjdCB0aHJlYWRfaW5mbyB0aHJlYWRfaW5mbzsKKwl1bnNpZ25lZCBsb25nIHN0YWNrW1RIUkVBRF9TSVpFL3NpemVvZihsb25nKV07Cit9OworCisjaWZuZGVmIF9fSEFWRV9BUkNIX0tTVEFDS19FTkQKK3N0YXRpYyBpbmxpbmUgaW50IGtzdGFja19lbmQodm9pZCAqYWRkcikKK3sKKwkvKiBSZWxpYWJsZSBlbmQgb2Ygc3RhY2sgZGV0ZWN0aW9uOgorCSAqIFNvbWUgQVBNIGJpb3MgdmVyc2lvbnMgbWlzYWxpZ24gdGhlIHN0YWNrCisJICovCisJcmV0dXJuICEoKCh1bnNpZ25lZCBsb25nKWFkZHIrc2l6ZW9mKHZvaWQqKS0xKSAmIChUSFJFQURfU0laRS1zaXplb2Yodm9pZCopKSk7Cit9CisjZW5kaWYKKworZXh0ZXJuIHVuaW9uIHRocmVhZF91bmlvbiBpbml0X3RocmVhZF91bmlvbjsKK2V4dGVybiBzdHJ1Y3QgdGFza19zdHJ1Y3QgaW5pdF90YXNrOworCitleHRlcm4gc3RydWN0ICAgbW1fc3RydWN0IGluaXRfbW07CisKKyNkZWZpbmUgZmluZF90YXNrX2J5X3BpZChucikJZmluZF90YXNrX2J5X3BpZF90eXBlKFBJRFRZUEVfUElELCBucikKK2V4dGVybiBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmZpbmRfdGFza19ieV9waWRfdHlwZShpbnQgdHlwZSwgaW50IHBpZCk7CitleHRlcm4gdm9pZCBzZXRfc3BlY2lhbF9waWRzKHBpZF90IHNlc3Npb24sIHBpZF90IHBncnApOworZXh0ZXJuIHZvaWQgX19zZXRfc3BlY2lhbF9waWRzKHBpZF90IHNlc3Npb24sIHBpZF90IHBncnApOworCisvKiBwZXItVUlEIHByb2Nlc3MgY2hhcmdpbmcuICovCitleHRlcm4gc3RydWN0IHVzZXJfc3RydWN0ICogYWxsb2NfdWlkKHVpZF90KTsKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHVzZXJfc3RydWN0ICpnZXRfdWlkKHN0cnVjdCB1c2VyX3N0cnVjdCAqdSkKK3sKKwlhdG9taWNfaW5jKCZ1LT5fX2NvdW50KTsKKwlyZXR1cm4gdTsKK30KK2V4dGVybiB2b2lkIGZyZWVfdWlkKHN0cnVjdCB1c2VyX3N0cnVjdCAqKTsKK2V4dGVybiB2b2lkIHN3aXRjaF91aWQoc3RydWN0IHVzZXJfc3RydWN0ICopOworCisjaW5jbHVkZSA8YXNtL2N1cnJlbnQuaD4KKworZXh0ZXJuIHZvaWQgZG9fdGltZXIoc3RydWN0IHB0X3JlZ3MgKik7CisKK2V4dGVybiBpbnQgRkFTVENBTEwod2FrZV91cF9zdGF0ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKiB0c2ssIHVuc2lnbmVkIGludCBzdGF0ZSkpOworZXh0ZXJuIGludCBGQVNUQ0FMTCh3YWtlX3VwX3Byb2Nlc3Moc3RydWN0IHRhc2tfc3RydWN0ICogdHNrKSk7CitleHRlcm4gdm9pZCBGQVNUQ0FMTCh3YWtlX3VwX25ld190YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqIHRzaywKKwkJCQkJCXVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MpKTsKKyNpZmRlZiBDT05GSUdfU01QCisgZXh0ZXJuIHZvaWQga2lja19wcm9jZXNzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKKyNlbHNlCisgc3RhdGljIGlubGluZSB2b2lkIGtpY2tfcHJvY2VzcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykgeyB9CisjZW5kaWYKK2V4dGVybiB2b2lkIEZBU1RDQUxMKHNjaGVkX2ZvcmsodGFza190ICogcCkpOworZXh0ZXJuIHZvaWQgRkFTVENBTEwoc2NoZWRfZXhpdCh0YXNrX3QgKiBwKSk7CisKK2V4dGVybiBpbnQgaW5fZ3JvdXBfcChnaWRfdCk7CitleHRlcm4gaW50IGluX2Vncm91cF9wKGdpZF90KTsKKworZXh0ZXJuIHZvaWQgcHJvY19jYWNoZXNfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIGZsdXNoX3NpZ25hbHMoc3RydWN0IHRhc2tfc3RydWN0ICopOworZXh0ZXJuIHZvaWQgZmx1c2hfc2lnbmFsX2hhbmRsZXJzKHN0cnVjdCB0YXNrX3N0cnVjdCAqLCBpbnQgZm9yY2VfZGVmYXVsdCk7CitleHRlcm4gaW50IGRlcXVldWVfc2lnbmFsKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzaWdzZXRfdCAqbWFzaywgc2lnaW5mb190ICppbmZvKTsKKworc3RhdGljIGlubGluZSBpbnQgZGVxdWV1ZV9zaWduYWxfbG9jayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc2lnc2V0X3QgKm1hc2ssIHNpZ2luZm9fdCAqaW5mbykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdHNrLT5zaWdoYW5kLT5zaWdsb2NrLCBmbGFncyk7CisJcmV0ID0gZGVxdWV1ZV9zaWduYWwodHNrLCBtYXNrLCBpbmZvKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0c2stPnNpZ2hhbmQtPnNpZ2xvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXQ7Cit9CQorCitleHRlcm4gdm9pZCBibG9ja19hbGxfc2lnbmFscyhpbnQgKCpub3RpZmllcikodm9pZCAqcHJpdiksIHZvaWQgKnByaXYsCisJCQkgICAgICBzaWdzZXRfdCAqbWFzayk7CitleHRlcm4gdm9pZCB1bmJsb2NrX2FsbF9zaWduYWxzKHZvaWQpOworZXh0ZXJuIHZvaWQgcmVsZWFzZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqIHApOworZXh0ZXJuIGludCBzZW5kX3NpZ19pbmZvKGludCwgc3RydWN0IHNpZ2luZm8gKiwgc3RydWN0IHRhc2tfc3RydWN0ICopOworZXh0ZXJuIGludCBzZW5kX2dyb3VwX3NpZ19pbmZvKGludCwgc3RydWN0IHNpZ2luZm8gKiwgc3RydWN0IHRhc2tfc3RydWN0ICopOworZXh0ZXJuIGludCBmb3JjZV9zaWdzZWd2KGludCwgc3RydWN0IHRhc2tfc3RydWN0ICopOworZXh0ZXJuIGludCBmb3JjZV9zaWdfaW5mbyhpbnQsIHN0cnVjdCBzaWdpbmZvICosIHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKK2V4dGVybiBpbnQgX19raWxsX3BnX2luZm8oaW50IHNpZywgc3RydWN0IHNpZ2luZm8gKmluZm8sIHBpZF90IHBncnApOworZXh0ZXJuIGludCBraWxsX3BnX2luZm8oaW50LCBzdHJ1Y3Qgc2lnaW5mbyAqLCBwaWRfdCk7CitleHRlcm4gaW50IGtpbGxfcHJvY19pbmZvKGludCwgc3RydWN0IHNpZ2luZm8gKiwgcGlkX3QpOworZXh0ZXJuIHZvaWQgZG9fbm90aWZ5X3BhcmVudChzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgaW50KTsKK2V4dGVybiB2b2lkIGZvcmNlX3NpZyhpbnQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKK2V4dGVybiB2b2lkIGZvcmNlX3NpZ19zcGVjaWZpYyhpbnQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKK2V4dGVybiBpbnQgc2VuZF9zaWcoaW50LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgaW50KTsKK2V4dGVybiB2b2lkIHphcF9vdGhlcl90aHJlYWRzKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7CitleHRlcm4gaW50IGtpbGxfcGcocGlkX3QsIGludCwgaW50KTsKK2V4dGVybiBpbnQga2lsbF9zbChwaWRfdCwgaW50LCBpbnQpOworZXh0ZXJuIGludCBraWxsX3Byb2MocGlkX3QsIGludCwgaW50KTsKK2V4dGVybiBzdHJ1Y3Qgc2lncXVldWUgKnNpZ3F1ZXVlX2FsbG9jKHZvaWQpOworZXh0ZXJuIHZvaWQgc2lncXVldWVfZnJlZShzdHJ1Y3Qgc2lncXVldWUgKik7CitleHRlcm4gaW50IHNlbmRfc2lncXVldWUoaW50LCBzdHJ1Y3Qgc2lncXVldWUgKiwgIHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKK2V4dGVybiBpbnQgc2VuZF9ncm91cF9zaWdxdWV1ZShpbnQsIHN0cnVjdCBzaWdxdWV1ZSAqLCAgc3RydWN0IHRhc2tfc3RydWN0ICopOworZXh0ZXJuIGludCBkb19zaWdhY3Rpb24oaW50LCBjb25zdCBzdHJ1Y3Qga19zaWdhY3Rpb24gKiwgc3RydWN0IGtfc2lnYWN0aW9uICopOworZXh0ZXJuIGludCBkb19zaWdhbHRzdGFjayhjb25zdCBzdGFja190IF9fdXNlciAqLCBzdGFja190IF9fdXNlciAqLCB1bnNpZ25lZCBsb25nKTsKKworLyogVGhlc2UgY2FuIGJlIHRoZSBzZWNvbmQgYXJnIHRvIHNlbmRfc2lnX2luZm8vc2VuZF9ncm91cF9zaWdfaW5mby4gICovCisjZGVmaW5lIFNFTkRfU0lHX05PSU5GTyAoKHN0cnVjdCBzaWdpbmZvICopIDApCisjZGVmaW5lIFNFTkRfU0lHX1BSSVYJKChzdHJ1Y3Qgc2lnaW5mbyAqKSAxKQorI2RlZmluZSBTRU5EX1NJR19GT1JDRUQJKChzdHJ1Y3Qgc2lnaW5mbyAqKSAyKQorCisvKiBUcnVlIGlmIHdlIGFyZSBvbiB0aGUgYWx0ZXJuYXRlIHNpZ25hbCBzdGFjay4gICovCisKK3N0YXRpYyBpbmxpbmUgaW50IG9uX3NpZ19zdGFjayh1bnNpZ25lZCBsb25nIHNwKQoreworCXJldHVybiAoc3AgLSBjdXJyZW50LT5zYXNfc3Nfc3AgPCBjdXJyZW50LT5zYXNfc3Nfc2l6ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNhc19zc19mbGFncyh1bnNpZ25lZCBsb25nIHNwKQoreworCXJldHVybiAoY3VycmVudC0+c2FzX3NzX3NpemUgPT0gMCA/IFNTX0RJU0FCTEUKKwkJOiBvbl9zaWdfc3RhY2soc3ApID8gU1NfT05TVEFDSyA6IDApOworfQorCisKKyNpZmRlZiBDT05GSUdfU0VDVVJJVFkKKy8qIGNvZGUgaXMgaW4gc2VjdXJpdHkuYyAqLworZXh0ZXJuIGludCBjYXBhYmxlKGludCBjYXApOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IGNhcGFibGUoaW50IGNhcCkKK3sKKwlpZiAoY2FwX3JhaXNlZChjdXJyZW50LT5jYXBfZWZmZWN0aXZlLCBjYXApKSB7CisJCWN1cnJlbnQtPmZsYWdzIHw9IFBGX1NVUEVSUFJJVjsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorI2VuZGlmCisKKy8qCisgKiBSb3V0aW5lcyBmb3IgaGFuZGxpbmcgbW1fc3RydWN0cworICovCitleHRlcm4gc3RydWN0IG1tX3N0cnVjdCAqIG1tX2FsbG9jKHZvaWQpOworCisvKiBtbWRyb3AgZHJvcHMgdGhlIG1tIGFuZCB0aGUgcGFnZSB0YWJsZXMgKi8KK2V4dGVybiB2b2lkIEZBU1RDQUxMKF9fbW1kcm9wKHN0cnVjdCBtbV9zdHJ1Y3QgKikpOworc3RhdGljIGlubGluZSB2b2lkIG1tZHJvcChzdHJ1Y3QgbW1fc3RydWN0ICogbW0pCit7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJm1tLT5tbV9jb3VudCkpCisJCV9fbW1kcm9wKG1tKTsKK30KKworLyogbW1wdXQgZ2V0cyByaWQgb2YgdGhlIG1hcHBpbmdzIGFuZCBhbGwgdXNlci1zcGFjZSAqLworZXh0ZXJuIHZvaWQgbW1wdXQoc3RydWN0IG1tX3N0cnVjdCAqKTsKKy8qIEdyYWIgYSByZWZlcmVuY2UgdG8gYSB0YXNrJ3MgbW0sIGlmIGl0IGlzIG5vdCBhbHJlYWR5IGdvaW5nIGF3YXkgKi8KK2V4dGVybiBzdHJ1Y3QgbW1fc3RydWN0ICpnZXRfdGFza19tbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOworLyogUmVtb3ZlIHRoZSBjdXJyZW50IHRhc2tzIHN0YWxlIHJlZmVyZW5jZXMgdG8gdGhlIG9sZCBtbV9zdHJ1Y3QgKi8KK2V4dGVybiB2b2lkIG1tX3JlbGVhc2Uoc3RydWN0IHRhc2tfc3RydWN0ICosIHN0cnVjdCBtbV9zdHJ1Y3QgKik7CisKK2V4dGVybiBpbnQgIGNvcHlfdGhyZWFkKGludCwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgc3RydWN0IHRhc2tfc3RydWN0ICosIHN0cnVjdCBwdF9yZWdzICopOworZXh0ZXJuIHZvaWQgZmx1c2hfdGhyZWFkKHZvaWQpOworZXh0ZXJuIHZvaWQgZXhpdF90aHJlYWQodm9pZCk7CisKK2V4dGVybiB2b2lkIGV4aXRfbW0oc3RydWN0IHRhc2tfc3RydWN0ICopOworZXh0ZXJuIHZvaWQgZXhpdF9maWxlcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CitleHRlcm4gdm9pZCBleGl0X3NpZ25hbChzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CitleHRlcm4gdm9pZCBfX2V4aXRfc2lnbmFsKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKK2V4dGVybiB2b2lkIGV4aXRfc2lnaGFuZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CitleHRlcm4gdm9pZCBfX2V4aXRfc2lnaGFuZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CitleHRlcm4gdm9pZCBleGl0X2l0aW1lcnMoc3RydWN0IHNpZ25hbF9zdHJ1Y3QgKik7CisKK2V4dGVybiBOT1JFVF9UWVBFIHZvaWQgZG9fZ3JvdXBfZXhpdChpbnQpOworCitleHRlcm4gdm9pZCByZXBhcmVudF90b19pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgZGFlbW9uaXplKGNvbnN0IGNoYXIgKiwgLi4uKTsKK2V4dGVybiBpbnQgYWxsb3dfc2lnbmFsKGludCk7CitleHRlcm4gaW50IGRpc2FsbG93X3NpZ25hbChpbnQpOworZXh0ZXJuIHRhc2tfdCAqY2hpbGRfcmVhcGVyOworCitleHRlcm4gaW50IGRvX2V4ZWN2ZShjaGFyICosIGNoYXIgX191c2VyICogX191c2VyICosIGNoYXIgX191c2VyICogX191c2VyICosIHN0cnVjdCBwdF9yZWdzICopOworZXh0ZXJuIGxvbmcgZG9fZm9yayh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBzdHJ1Y3QgcHRfcmVncyAqLCB1bnNpZ25lZCBsb25nLCBpbnQgX191c2VyICosIGludCBfX3VzZXIgKik7Cit0YXNrX3QgKmZvcmtfaWRsZShpbnQpOworCitleHRlcm4gdm9pZCBzZXRfdGFza19jb21tKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBjaGFyICpmcm9tKTsKK2V4dGVybiB2b2lkIGdldF90YXNrX2NvbW0oY2hhciAqdG8sIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKKworI2lmZGVmIENPTkZJR19TTVAKK2V4dGVybiB2b2lkIHdhaXRfdGFza19pbmFjdGl2ZSh0YXNrX3QgKiBwKTsKKyNlbHNlCisjZGVmaW5lIHdhaXRfdGFza19pbmFjdGl2ZShwKQlkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKworI2RlZmluZSByZW1vdmVfcGFyZW50KHApCWxpc3RfZGVsX2luaXQoJihwKS0+c2libGluZykKKyNkZWZpbmUgYWRkX3BhcmVudChwLCBwYXJlbnQpCWxpc3RfYWRkX3RhaWwoJihwKS0+c2libGluZywmKHBhcmVudCktPmNoaWxkcmVuKQorCisjZGVmaW5lIFJFTU9WRV9MSU5LUyhwKSBkbyB7CQkJCQlcCisJaWYgKHRocmVhZF9ncm91cF9sZWFkZXIocCkpCQkJCVwKKwkJbGlzdF9kZWxfaW5pdCgmKHApLT50YXNrcyk7CQkJXAorCXJlbW92ZV9wYXJlbnQocCk7CQkJCQlcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBTRVRfTElOS1MocCkgZG8gewkJCQkJXAorCWlmICh0aHJlYWRfZ3JvdXBfbGVhZGVyKHApKQkJCQlcCisJCWxpc3RfYWRkX3RhaWwoJihwKS0+dGFza3MsJmluaXRfdGFzay50YXNrcyk7CVwKKwlhZGRfcGFyZW50KHAsIChwKS0+cGFyZW50KTsJCQkJXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgbmV4dF90YXNrKHApCWxpc3RfZW50cnkoKHApLT50YXNrcy5uZXh0LCBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRhc2tzKQorI2RlZmluZSBwcmV2X3Rhc2socCkJbGlzdF9lbnRyeSgocCktPnRhc2tzLnByZXYsIHN0cnVjdCB0YXNrX3N0cnVjdCwgdGFza3MpCisKKyNkZWZpbmUgZm9yX2VhY2hfcHJvY2VzcyhwKSBcCisJZm9yIChwID0gJmluaXRfdGFzayA7IChwID0gbmV4dF90YXNrKHApKSAhPSAmaW5pdF90YXNrIDsgKQorCisvKgorICogQ2FyZWZ1bDogZG9fZWFjaF90aHJlYWQvd2hpbGVfZWFjaF90aHJlYWQgaXMgYSBkb3VibGUgbG9vcCBzbworICogICAgICAgICAgJ2JyZWFrJyB3aWxsIG5vdCB3b3JrIGFzIGV4cGVjdGVkIC0gdXNlIGdvdG8gaW5zdGVhZC4KKyAqLworI2RlZmluZSBkb19lYWNoX3RocmVhZChnLCB0KSBcCisJZm9yIChnID0gdCA9ICZpbml0X3Rhc2sgOyAoZyA9IHQgPSBuZXh0X3Rhc2soZykpICE9ICZpbml0X3Rhc2sgOyApIGRvCisKKyNkZWZpbmUgd2hpbGVfZWFjaF90aHJlYWQoZywgdCkgXAorCXdoaWxlICgodCA9IG5leHRfdGhyZWFkKHQpKSAhPSBnKQorCitleHRlcm4gdGFza190ICogRkFTVENBTEwobmV4dF90aHJlYWQoY29uc3QgdGFza190ICpwKSk7CisKKyNkZWZpbmUgdGhyZWFkX2dyb3VwX2xlYWRlcihwKQkocC0+cGlkID09IHAtPnRnaWQpCisKK3N0YXRpYyBpbmxpbmUgaW50IHRocmVhZF9ncm91cF9lbXB0eSh0YXNrX3QgKnApCit7CisJcmV0dXJuIGxpc3RfZW1wdHkoJnAtPnBpZHNbUElEVFlQRV9UR0lEXS5waWRfbGlzdCk7Cit9CisKKyNkZWZpbmUgZGVsYXlfZ3JvdXBfbGVhZGVyKHApIFwKKwkJKHRocmVhZF9ncm91cF9sZWFkZXIocCkgJiYgIXRocmVhZF9ncm91cF9lbXB0eShwKSkKKworZXh0ZXJuIHZvaWQgdW5oYXNoX3Byb2Nlc3Moc3RydWN0IHRhc2tfc3RydWN0ICpwKTsKKworLyoKKyAqIFByb3RlY3RzIC0+ZnMsIC0+ZmlsZXMsIC0+bW0sIC0+cHRyYWNlLCAtPmdyb3VwX2luZm8sIC0+Y29tbSwga2V5cmluZworICogc3Vic2NyaXB0aW9ucyBhbmQgc3luY2hyb25pc2VzIHdpdGggd2FpdDQoKS4gIEFsc28gdXNlZCBpbiBwcm9jZnMuCisgKgorICogTmVzdHMgYm90aCBpbnNpZGUgYW5kIG91dHNpZGUgb2YgcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKS4KKyAqIEl0IG11c3Qgbm90IGJlIG5lc3RlZCB3aXRoIHdyaXRlX2xvY2tfaXJxKCZ0YXNrbGlzdF9sb2NrKSwKKyAqIG5laXRoZXIgaW5zaWRlIG5vciBvdXRzaWRlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgdGFza19sb2NrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3sKKwlzcGluX2xvY2soJnAtPmFsbG9jX2xvY2spOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdGFza191bmxvY2soc3RydWN0IHRhc2tfc3RydWN0ICpwKQoreworCXNwaW5fdW5sb2NrKCZwLT5hbGxvY19sb2NrKTsKK30KKworLyogc2V0IHRocmVhZCBmbGFncyBpbiBvdGhlciB0YXNrJ3Mgc3RydWN0dXJlcworICogLSBzZWUgYXNtL3RocmVhZF9pbmZvLmggZm9yIFRJRl94eHh4IGZsYWdzIGF2YWlsYWJsZQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3Rza190aHJlYWRfZmxhZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgaW50IGZsYWcpCit7CisJc2V0X3RpX3RocmVhZF9mbGFnKHRzay0+dGhyZWFkX2luZm8sZmxhZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl90c2tfdGhyZWFkX2ZsYWcoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGludCBmbGFnKQoreworCWNsZWFyX3RpX3RocmVhZF9mbGFnKHRzay0+dGhyZWFkX2luZm8sZmxhZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHRlc3RfYW5kX3NldF90c2tfdGhyZWFkX2ZsYWcoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGludCBmbGFnKQoreworCXJldHVybiB0ZXN0X2FuZF9zZXRfdGlfdGhyZWFkX2ZsYWcodHNrLT50aHJlYWRfaW5mbyxmbGFnKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgdGVzdF9hbmRfY2xlYXJfdHNrX3RocmVhZF9mbGFnKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBpbnQgZmxhZykKK3sKKwlyZXR1cm4gdGVzdF9hbmRfY2xlYXJfdGlfdGhyZWFkX2ZsYWcodHNrLT50aHJlYWRfaW5mbyxmbGFnKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgdGVzdF90c2tfdGhyZWFkX2ZsYWcoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGludCBmbGFnKQoreworCXJldHVybiB0ZXN0X3RpX3RocmVhZF9mbGFnKHRzay0+dGhyZWFkX2luZm8sZmxhZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfdHNrX25lZWRfcmVzY2hlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwlzZXRfdHNrX3RocmVhZF9mbGFnKHRzayxUSUZfTkVFRF9SRVNDSEVEKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3Rza19uZWVkX3Jlc2NoZWQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJY2xlYXJfdHNrX3RocmVhZF9mbGFnKHRzayxUSUZfTkVFRF9SRVNDSEVEKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2lnbmFsX3BlbmRpbmcoc3RydWN0IHRhc2tfc3RydWN0ICpwKQoreworCXJldHVybiB1bmxpa2VseSh0ZXN0X3Rza190aHJlYWRfZmxhZyhwLFRJRl9TSUdQRU5ESU5HKSk7Cit9CisgIAorc3RhdGljIGlubGluZSBpbnQgbmVlZF9yZXNjaGVkKHZvaWQpCit7CisJcmV0dXJuIHVubGlrZWx5KHRlc3RfdGhyZWFkX2ZsYWcoVElGX05FRURfUkVTQ0hFRCkpOworfQorCisvKgorICogY29uZF9yZXNjaGVkKCkgYW5kIGNvbmRfcmVzY2hlZF9sb2NrKCk6IGxhdGVuY3kgcmVkdWN0aW9uIHZpYQorICogZXhwbGljaXQgcmVzY2hlZHVsaW5nIGluIHBsYWNlcyB0aGF0IGFyZSBzYWZlLiBUaGUgcmV0dXJuCisgKiB2YWx1ZSBpbmRpY2F0ZXMgd2hldGhlciBhIHJlc2NoZWR1bGUgd2FzIGRvbmUgaW4gZmFjdC4KKyAqIGNvbmRfcmVzY2hlZF9sb2NrKCkgd2lsbCBkcm9wIHRoZSBzcGlubG9jayBiZWZvcmUgc2NoZWR1bGluZywKKyAqIGNvbmRfcmVzY2hlZF9zb2Z0aXJxKCkgd2lsbCBlbmFibGUgYmhzIGJlZm9yZSBzY2hlZHVsaW5nLgorICovCitleHRlcm4gaW50IGNvbmRfcmVzY2hlZCh2b2lkKTsKK2V4dGVybiBpbnQgY29uZF9yZXNjaGVkX2xvY2soc3BpbmxvY2tfdCAqIGxvY2spOworZXh0ZXJuIGludCBjb25kX3Jlc2NoZWRfc29mdGlycSh2b2lkKTsKKworLyoKKyAqIERvZXMgYSBjcml0aWNhbCBzZWN0aW9uIG5lZWQgdG8gYmUgYnJva2VuIGR1ZSB0byBhbm90aGVyCisgKiB0YXNrIHdhaXRpbmc/OgorICovCisjaWYgZGVmaW5lZChDT05GSUdfUFJFRU1QVCkgJiYgZGVmaW5lZChDT05GSUdfU01QKQorIyBkZWZpbmUgbmVlZF9sb2NrYnJlYWsobG9jaykgKChsb2NrKS0+YnJlYWtfbG9jaykKKyNlbHNlCisjIGRlZmluZSBuZWVkX2xvY2ticmVhayhsb2NrKSAwCisjZW5kaWYKKworLyoKKyAqIERvZXMgYSBjcml0aWNhbCBzZWN0aW9uIG5lZWQgdG8gYmUgYnJva2VuIGR1ZSB0byBhbm90aGVyCisgKiB0YXNrIHdhaXRpbmcgb3IgcHJlZW1wdGlvbiBiZWluZyBzaWduYWxsZWQ6CisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGxvY2tfbmVlZF9yZXNjaGVkKHNwaW5sb2NrX3QgKmxvY2spCit7CisJaWYgKG5lZWRfbG9ja2JyZWFrKGxvY2spIHx8IG5lZWRfcmVzY2hlZCgpKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworLyogUmVldmFsdWF0ZSB3aGV0aGVyIHRoZSB0YXNrIGhhcyBzaWduYWxzIHBlbmRpbmcgZGVsaXZlcnkuCisgICBUaGlzIGlzIHJlcXVpcmVkIGV2ZXJ5IHRpbWUgdGhlIGJsb2NrZWQgc2lnc2V0X3QgY2hhbmdlcy4KKyAgIGNhbGxlcnMgbXVzdCBob2xkIHNpZ2hhbmQtPnNpZ2xvY2suICAqLworCitleHRlcm4gRkFTVENBTEwodm9pZCByZWNhbGNfc2lncGVuZGluZ190c2soc3RydWN0IHRhc2tfc3RydWN0ICp0KSk7CitleHRlcm4gdm9pZCByZWNhbGNfc2lncGVuZGluZyh2b2lkKTsKKworZXh0ZXJuIHZvaWQgc2lnbmFsX3dha2VfdXAoc3RydWN0IHRhc2tfc3RydWN0ICp0LCBpbnQgcmVzdW1lX3N0b3BwZWQpOworCisvKgorICogV3JhcHBlcnMgZm9yIHAtPnRocmVhZF9pbmZvLT5jcHUgYWNjZXNzLiBOby1vcCBvbiBVUC4KKyAqLworI2lmZGVmIENPTkZJR19TTVAKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgdGFza19jcHUoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICpwKQoreworCXJldHVybiBwLT50aHJlYWRfaW5mby0+Y3B1OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3Rhc2tfY3B1KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgdW5zaWduZWQgaW50IGNwdSkKK3sKKwlwLT50aHJlYWRfaW5mby0+Y3B1ID0gY3B1OworfQorCisjZWxzZQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB0YXNrX2NwdShjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfdGFza19jcHUoc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1bnNpZ25lZCBpbnQgY3B1KQoreworfQorCisjZW5kaWYgLyogQ09ORklHX1NNUCAqLworCisjaWZkZWYgSEFWRV9BUkNIX1BJQ0tfTU1BUF9MQVlPVVQKK2V4dGVybiB2b2lkIGFyY2hfcGlja19tbWFwX2xheW91dChzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcGlja19tbWFwX2xheW91dChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwltbS0+bW1hcF9iYXNlID0gVEFTS19VTk1BUFBFRF9CQVNFOworCW1tLT5nZXRfdW5tYXBwZWRfYXJlYSA9IGFyY2hfZ2V0X3VubWFwcGVkX2FyZWE7CisJbW0tPnVubWFwX2FyZWEgPSBhcmNoX3VubWFwX2FyZWE7Cit9CisjZW5kaWYKKworZXh0ZXJuIGxvbmcgc2NoZWRfc2V0YWZmaW5pdHkocGlkX3QgcGlkLCBjcHVtYXNrX3QgbmV3X21hc2spOworZXh0ZXJuIGxvbmcgc2NoZWRfZ2V0YWZmaW5pdHkocGlkX3QgcGlkLCBjcHVtYXNrX3QgKm1hc2spOworCisjaWZkZWYgQ09ORklHX01BR0lDX1NZU1JRCisKK2V4dGVybiB2b2lkIG5vcm1hbGl6ZV9ydF90YXNrcyh2b2lkKTsKKworI2VuZGlmCisKKy8qIHRyeV90b19mcmVlemUKKyAqCisgKiBDaGVja3Mgd2hldGhlciB3ZSBuZWVkIHRvIGVudGVyIHRoZSByZWZyaWdlcmF0b3IKKyAqIGFuZCByZXR1cm5zIDEgaWYgd2UgZGlkIHNvLgorICovCisjaWZkZWYgQ09ORklHX1BNCitleHRlcm4gdm9pZCByZWZyaWdlcmF0b3IodW5zaWduZWQgbG9uZyk7CitleHRlcm4gaW50IGZyZWV6ZV9wcm9jZXNzZXModm9pZCk7CitleHRlcm4gdm9pZCB0aGF3X3Byb2Nlc3Nlcyh2b2lkKTsKKworc3RhdGljIGlubGluZSBpbnQgdHJ5X3RvX2ZyZWV6ZSh1bnNpZ25lZCBsb25nIHJlZnJpZ2VyYXRvcl9mbGFncykKK3sKKwlpZiAodW5saWtlbHkoY3VycmVudC0+ZmxhZ3MgJiBQRl9GUkVFWkUpKSB7CisJCXJlZnJpZ2VyYXRvcihyZWZyaWdlcmF0b3JfZmxhZ3MpOworCQlyZXR1cm4gMTsKKwl9IGVsc2UKKwkJcmV0dXJuIDA7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHJlZnJpZ2VyYXRvcih1bnNpZ25lZCBsb25nIGZsYWcpIHt9CitzdGF0aWMgaW5saW5lIGludCBmcmVlemVfcHJvY2Vzc2VzKHZvaWQpIHsgQlVHKCk7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgdGhhd19wcm9jZXNzZXModm9pZCkge30KKworc3RhdGljIGlubGluZSBpbnQgdHJ5X3RvX2ZyZWV6ZSh1bnNpZ25lZCBsb25nIHJlZnJpZ2VyYXRvcl9mbGFncykKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBDT05GSUdfUE0gKi8KKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY3RwLmggYi9pbmNsdWRlL2xpbnV4L3NjdHAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWM2NmRlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9zY3RwLmgKQEAgLTAsMCArMSw1OTQgQEAKKy8qIFNDVFAga2VybmVsIHJlZmVyZW5jZSBJbXBsZW1lbnRhdGlvbgorICogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwMSwgMjAwNAorICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDAgQ2lzY28sIEluYy4KKyAqIENvcHlyaWdodCAoYykgMTk5OS0yMDAxIE1vdG9yb2xhLCBJbmMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoYykgMjAwMSBOb2tpYSwgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDAxIExhIE1vbnRlIEguUC4gWWFycm9sbAorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTQ1RQIGtlcm5lbCByZWZlcmVuY2UgSW1wbGVtZW50YXRpb24KKyAqCisgKiBWYXJpb3VzIHByb3RvY29sIGRlZmluZWQgc3RydWN0dXJlcy4KKyAqCisgKiBUaGUgU0NUUCByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gaXMgZnJlZSBzb2Z0d2FyZTsKKyAqIHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mCisgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGUgU0NUUCByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdAorICogd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkCisgKiAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqCisgKiB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggR05VIENDOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqIFBsZWFzZSBzZW5kIGFueSBidWcgcmVwb3J0cyBvciBmaXhlcyB5b3UgbWFrZSB0byB0aGUKKyAqIGVtYWlsIGFkZHJlc3MoZXMpOgorICogICAgbGtzY3RwIGRldmVsb3BlcnMgPGxrc2N0cC1kZXZlbG9wZXJzdEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+CisgKgorICogT3Igc3VibWl0IGEgYnVnIHJlcG9ydCB0aHJvdWdoIHRoZSBmb2xsb3dpbmcgd2Vic2l0ZToKKyAqICAgIGh0dHA6Ly93d3cuc2YubmV0L3Byb2plY3RzL2xrc2N0cAorICoKKyAqIFdyaXR0ZW4gb3IgbW9kaWZpZWQgYnk6CisgKiAgICBMYSBNb250ZSBILlAuIFlhcnJvbGwgPHBpZ2d5QGFjbS5vcmc+CisgKiAgICBLYXJsIEtudXRzb24gPGthcmxAYXRoZW5hLmNoaWNhZ28uaWwudXM+CisgKiAgICBKb24gR3JpbW0gPGpncmltbUB1cy5pYm0uY29tPgorICogICAgWGluZ2FuZyBHdW8gPHhpbmdhbmcuZ3VvQGludGVsLmNvbT4KKyAqICAgIHJhbmRhbGxAc2N0cC5jaGljYWdvLmlsLnVzCisgKiAgICBrbW9ybmVhdUBjaXNjby5jb20KKyAqICAgIHF4aWUxQGVtYWlsLm1vdC5jb20KKyAqICAgIFNyaWRoYXIgU2FtdWRyYWxhIDxzcmlAdXMuaWJtLmNvbT4KKyAqICAgIEtldmluIEdhbyA8a2V2aW4uZ2FvQGludGVsLmNvbT4KKyAqCisgKiBBbnkgYnVncyByZXBvcnRlZCBnaXZlbiB0byB1cyB3ZSB3aWxsIHRyeSB0byBmaXguLi4gYW55IGZpeGVzIHNoYXJlZCB3aWxsCisgKiBiZSBpbmNvcnBvcmF0ZWQgaW50byB0aGUgbmV4dCBTQ1RQIHJlbGVhc2UuCisgKi8KKyNpZm5kZWYgX19MSU5VWF9TQ1RQX0hfXworI2RlZmluZSBfX0xJTlVYX1NDVFBfSF9fCisKKyNpbmNsdWRlIDxsaW51eC9pbi5oPgkJLyogV2UgbmVlZCBpbl9hZGRyLiAgKi8KKyNpbmNsdWRlIDxsaW51eC9pbjYuaD4JCS8qIFdlIG5lZWQgaW42X2FkZHIuICAqLworCisKKy8qIFNlY3Rpb24gMy4xLiAgU0NUUCBDb21tb24gSGVhZGVyIEZvcm1hdCAqLwordHlwZWRlZiBzdHJ1Y3Qgc2N0cGhkciB7CisJX191MTYgc291cmNlOworCV9fdTE2IGRlc3Q7CisJX191MzIgdnRhZzsKKwlfX3UzMiBjaGVja3N1bTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgc2N0cF9zY3RwaGRyX3Q7CisKKy8qIFNlY3Rpb24gMy4yLiAgQ2h1bmsgRmllbGQgRGVzY3JpcHRpb25zLiAqLwordHlwZWRlZiBzdHJ1Y3Qgc2N0cF9jaHVua2hkciB7CisJX191OCB0eXBlOworCV9fdTggZmxhZ3M7CisJX191MTYgbGVuZ3RoOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBzY3RwX2NodW5raGRyX3Q7CisKKworLyogU2VjdGlvbiAzLjIuICBDaHVuayBUeXBlIFZhbHVlcy4KKyAqIFtDaHVuayBUeXBlXSBpZGVudGlmaWVzIHRoZSB0eXBlIG9mIGluZm9ybWF0aW9uIGNvbnRhaW5lZCBpbiB0aGUgQ2h1bmsKKyAqIFZhbHVlIGZpZWxkLiBJdCB0YWtlcyBhIHZhbHVlIGZyb20gMCB0byAyNTQuIFRoZSB2YWx1ZSBvZiAyNTUgaXMKKyAqIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlIGFzIGFuIGV4dGVuc2lvbiBmaWVsZC4KKyAqLwordHlwZWRlZiBlbnVtIHsKKwlTQ1RQX0NJRF9EQVRBCQkJPSAwLAorICAgICAgICBTQ1RQX0NJRF9JTklUCQkJPSAxLAorICAgICAgICBTQ1RQX0NJRF9JTklUX0FDSwkJPSAyLAorICAgICAgICBTQ1RQX0NJRF9TQUNLCQkJPSAzLAorICAgICAgICBTQ1RQX0NJRF9IRUFSVEJFQVQJCT0gNCwKKyAgICAgICAgU0NUUF9DSURfSEVBUlRCRUFUX0FDSwkJPSA1LAorICAgICAgICBTQ1RQX0NJRF9BQk9SVAkJCT0gNiwKKyAgICAgICAgU0NUUF9DSURfU0hVVERPV04JCT0gNywKKyAgICAgICAgU0NUUF9DSURfU0hVVERPV05fQUNLCQk9IDgsCisgICAgICAgIFNDVFBfQ0lEX0VSUk9SCQkJPSA5LAorICAgICAgICBTQ1RQX0NJRF9DT09LSUVfRUNITwkJPSAxMCwKKyAgICAgICAgU0NUUF9DSURfQ09PS0lFX0FDSwkgICAgICAgID0gMTEsCisgICAgICAgIFNDVFBfQ0lEX0VDTl9FQ05FCQk9IDEyLAorICAgICAgICBTQ1RQX0NJRF9FQ05fQ1dSCQk9IDEzLAorICAgICAgICBTQ1RQX0NJRF9TSFVURE9XTl9DT01QTEVURQk9IDE0LAorCisJLyogUFItU0NUUCBTZWMgMy4yICovCisJU0NUUF9DSURfRldEX1RTTgkJPSAweEMwLAorCisJLyogVXNlIGhleCwgYXMgZGVmaW5lZCBpbiBBRERJUCBzZWMuIDMuMSAqLworCVNDVFBfQ0lEX0FTQ09ORgkJCT0gMHhDMSwKKwlTQ1RQX0NJRF9BU0NPTkZfQUNLCQk9IDB4ODAsCit9IHNjdHBfY2lkX3Q7IC8qIGVudW0gKi8KKworCisvKiBTZWN0aW9uIDMuMgorICogIENodW5rIFR5cGVzIGFyZSBlbmNvZGVkIHN1Y2ggdGhhdCB0aGUgaGlnaGVzdC1vcmRlciB0d28gYml0cyBzcGVjaWZ5CisgKiAgdGhlIGFjdGlvbiB0aGF0IG11c3QgYmUgdGFrZW4gaWYgdGhlIHByb2Nlc3NpbmcgZW5kcG9pbnQgZG9lcyBub3QKKyAqICByZWNvZ25pemUgdGhlIENodW5rIFR5cGUuCisgKi8KK3R5cGVkZWYgZW51bSB7CisJU0NUUF9DSURfQUNUSU9OX0RJU0NBUkQgICAgID0gMHgwMCwKKwlTQ1RQX0NJRF9BQ1RJT05fRElTQ0FSRF9FUlIgPSAweDQwLAorCVNDVFBfQ0lEX0FDVElPTl9TS0lQICAgICAgICA9IDB4ODAsCisJU0NUUF9DSURfQUNUSU9OX1NLSVBfRVJSICAgID0gMHhjMCwKK30gc2N0cF9jaWRfYWN0aW9uX3Q7CisKK2VudW0geyBTQ1RQX0NJRF9BQ1RJT05fTUFTSyA9IDB4YzAsIH07CisKKy8qIFRoaXMgZmxhZyBpcyB1c2VkIGluIENodW5rIEZsYWdzIGZvciBBQk9SVCBhbmQgU0hVVERPV04gQ09NUExFVEUuCisgKgorICogMy4zLjcgQWJvcnQgQXNzb2NpYXRpb24gKEFCT1JUKSAoNik6CisgKiAgICBUaGUgVCBiaXQgaXMgc2V0IHRvIDAgaWYgdGhlIHNlbmRlciBoYWQgYSBUQ0IgdGhhdCBpdCBkZXN0cm95ZWQuCisgKiAgICBJZiB0aGUgc2VuZGVyIGRpZCBub3QgaGF2ZSBhIFRDQiBpdCBzaG91bGQgc2V0IHRoaXMgYml0IHRvIDEuCisgKi8KK2VudW0geyBTQ1RQX0NIVU5LX0ZMQUdfVCA9IDB4MDEgfTsKKworLyoKKyAqICBTZXQgdGhlIFQgYml0CisgKgorICogICAgICAwICAgICAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICAgICAgICAgICAzCisgKiAgICAgIDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMQorICogICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgKiAgICAgfCAgIFR5cGUgPSAxNCAgIHxSZXNlcnZlZCAgICAgfFR8ICAgICAgTGVuZ3RoID0gNCAgICAgICAgICAgICAgIHwKKyAqICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICoKKyAqIENodW5rIEZsYWdzOiA4IGJpdHMKKyAqCisgKiAgIFJlc2VydmVkOiAgNyBiaXRzCisgKiAgICAgU2V0IHRvIDAgb24gdHJhbnNtaXQgYW5kIGlnbm9yZWQgb24gcmVjZWlwdC4KKyAqCisgKiAgIFQgYml0OiAgMSBiaXQKKyAqICAgICBUaGUgVCBiaXQgaXMgc2V0IHRvIDAgaWYgdGhlIHNlbmRlciBoYWQgYSBUQ0IgdGhhdCBpdCBkZXN0cm95ZWQuIElmCisgKiAgICAgdGhlIHNlbmRlciBkaWQgTk9UIGhhdmUgYSBUQ0IgaXQgc2hvdWxkIHNldCB0aGlzIGJpdCB0byAxLgorICoKKyAqIE5vdGU6IFNwZWNpYWwgcnVsZXMgYXBwbHkgdG8gdGhpcyBjaHVuayBmb3IgdmVyaWZpY2F0aW9uLCBwbGVhc2UKKyAqIHNlZSBTZWN0aW9uIDguNS4xIGZvciBkZXRhaWxzLgorICovCisKKyNkZWZpbmUgc2N0cF90ZXN0X1RfYml0KGMpICAgICgoYyktPmNodW5rX2hkci0+ZmxhZ3MgJiBTQ1RQX0NIVU5LX0ZMQUdfVCkKKworLyogUkZDIDI5NjAKKyAqIFNlY3Rpb24gMy4yLjEgT3B0aW9uYWwvVmFyaWFibGUtbGVuZ3RoIFBhcm1hZXRlciBGb3JtYXQuCisgKi8KKwordHlwZWRlZiBzdHJ1Y3Qgc2N0cF9wYXJhbWhkciB7CisJX191MTYgdHlwZTsKKwlfX3UxNiBsZW5ndGg7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHNjdHBfcGFyYW1oZHJfdDsKKwordHlwZWRlZiBlbnVtIHsKKworCS8qIFJGQyAyOTYwIFNlY3Rpb24gMy4zLjUgKi8KKwlTQ1RQX1BBUkFNX0hFQVJUQkVBVF9JTkZPCQk9IF9fY29uc3RhbnRfaHRvbnMoMSksCisJLyogUkZDIDI5NjAgU2VjdGlvbiAzLjMuMi4xICovCisJU0NUUF9QQVJBTV9JUFY0X0FERFJFU1MJCQk9IF9fY29uc3RhbnRfaHRvbnMoNSksCisJU0NUUF9QQVJBTV9JUFY2X0FERFJFU1MJCQk9IF9fY29uc3RhbnRfaHRvbnMoNiksCisJU0NUUF9QQVJBTV9TVEFURV9DT09LSUUJCQk9IF9fY29uc3RhbnRfaHRvbnMoNyksCisJU0NUUF9QQVJBTV9VTlJFQ09HTklaRURfUEFSQU1FVEVSUwk9IF9fY29uc3RhbnRfaHRvbnMoOCksCisJU0NUUF9QQVJBTV9DT09LSUVfUFJFU0VSVkFUSVZFCQk9IF9fY29uc3RhbnRfaHRvbnMoOSksCisJU0NUUF9QQVJBTV9IT1NUX05BTUVfQUREUkVTUwkJPSBfX2NvbnN0YW50X2h0b25zKDExKSwKKwlTQ1RQX1BBUkFNX1NVUFBPUlRFRF9BRERSRVNTX1RZUEVTCT0gX19jb25zdGFudF9odG9ucygxMiksCisJU0NUUF9QQVJBTV9FQ05fQ0FQQUJMRQkJCT0gX19jb25zdGFudF9odG9ucygweDgwMDApLAorCisJLyogUFItU0NUUCBTZWMgMy4xICovCisJU0NUUF9QQVJBTV9GV0RfVFNOX1NVUFBPUlQJPSBfX2NvbnN0YW50X2h0b25zKDB4YzAwMCksCisKKwkvKiBBZGQtSVAgRXh0ZW5zaW9uLiBTZWN0aW9uIDMuMiAqLworCVNDVFBfUEFSQU1fQUREX0lQCQk9IF9fY29uc3RhbnRfaHRvbnMoMHhjMDAxKSwKKwlTQ1RQX1BBUkFNX0RFTF9JUAkJPSBfX2NvbnN0YW50X2h0b25zKDB4YzAwMiksCisJU0NUUF9QQVJBTV9FUlJfQ0FVU0UJCT0gX19jb25zdGFudF9odG9ucygweGMwMDMpLAorCVNDVFBfUEFSQU1fU0VUX1BSSU1BUlkJCT0gX19jb25zdGFudF9odG9ucygweGMwMDQpLAorCVNDVFBfUEFSQU1fU1VDQ0VTU19SRVBPUlQJPSBfX2NvbnN0YW50X2h0b25zKDB4YzAwNSksCisJU0NUUF9QQVJBTV9BREFQVElPTl9MQVlFUl9JTkQgICA9IF9fY29uc3RhbnRfaHRvbnMoMHhjMDA2KSwKKworfSBzY3RwX3BhcmFtX3Q7IC8qIGVudW0gKi8KKworCisvKiBSRkMgMjk2MCBTZWN0aW9uIDMuMi4xCisgKiAgVGhlIFBhcmFtZXRlciBUeXBlcyBhcmUgZW5jb2RlZCBzdWNoIHRoYXQgdGhlIGhpZ2hlc3Qtb3JkZXIgdHdvIGJpdHMKKyAqICBzcGVjaWZ5IHRoZSBhY3Rpb24gdGhhdCBtdXN0IGJlIHRha2VuIGlmIHRoZSBwcm9jZXNzaW5nIGVuZHBvaW50IGRvZXMKKyAqICBub3QgcmVjb2duaXplIHRoZSBQYXJhbWV0ZXIgVHlwZS4KKyAqCisgKi8KK3R5cGVkZWYgZW51bSB7CisJU0NUUF9QQVJBTV9BQ1RJT05fRElTQ0FSRCAgICAgPSBfX2NvbnN0YW50X2h0b25zKDB4MDAwMCksCisJU0NUUF9QQVJBTV9BQ1RJT05fRElTQ0FSRF9FUlIgPSBfX2NvbnN0YW50X2h0b25zKDB4NDAwMCksCisJU0NUUF9QQVJBTV9BQ1RJT05fU0tJUCAgICAgICAgPSBfX2NvbnN0YW50X2h0b25zKDB4ODAwMCksCisJU0NUUF9QQVJBTV9BQ1RJT05fU0tJUF9FUlIgICAgPSBfX2NvbnN0YW50X2h0b25zKDB4YzAwMCksCit9IHNjdHBfcGFyYW1fYWN0aW9uX3Q7CisKK2VudW0geyBTQ1RQX1BBUkFNX0FDVElPTl9NQVNLID0gX19jb25zdGFudF9odG9ucygweGMwMDApLCB9OworCisvKiBSRkMgMjk2MCBTZWN0aW9uIDMuMy4xIFBheWxvYWQgRGF0YSAoREFUQSkgKDApICovCisKK3R5cGVkZWYgc3RydWN0IHNjdHBfZGF0YWhkciB7CisJX191MzIgdHNuOworCV9fdTE2IHN0cmVhbTsKKwlfX3UxNiBzc247CisJX191MzIgcHBpZDsKKwlfX3U4ICBwYXlsb2FkWzBdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBzY3RwX2RhdGFoZHJfdDsKKwordHlwZWRlZiBzdHJ1Y3Qgc2N0cF9kYXRhX2NodW5rIHsKKyAgICAgICAgc2N0cF9jaHVua2hkcl90IGNodW5rX2hkcjsKKyAgICAgICAgc2N0cF9kYXRhaGRyX3QgIGRhdGFfaGRyOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBzY3RwX2RhdGFfY2h1bmtfdDsKKworLyogREFUQSBDaHVjayBTcGVjaWZpYyBGbGFncyAqLworZW51bSB7CisJU0NUUF9EQVRBX01JRERMRV9GUkFHCT0gMHgwMCwKKwlTQ1RQX0RBVEFfTEFTVF9GUkFHCT0gMHgwMSwKKwlTQ1RQX0RBVEFfRklSU1RfRlJBRwk9IDB4MDIsCisJU0NUUF9EQVRBX05PVF9GUkFHCT0gMHgwMywKKwlTQ1RQX0RBVEFfVU5PUkRFUkVECT0gMHgwNCwKK307CitlbnVtIHsgU0NUUF9EQVRBX0ZSQUdfTUFTSyA9IDB4MDMsIH07CisKKworLyogUkZDIDI5NjAgU2VjdGlvbiAzLjMuMiBJbml0aWF0aW9uIChJTklUKSAoMSkKKyAqCisgKiAgVGhpcyBjaHVuayBpcyB1c2VkIHRvIGluaXRpYXRlIGEgU0NUUCBhc3NvY2lhdGlvbiBiZXR3ZWVuIHR3bworICogIGVuZHBvaW50cy4KKyAqLwordHlwZWRlZiBzdHJ1Y3Qgc2N0cF9pbml0aGRyIHsKKwlfX3UzMiBpbml0X3RhZzsKKwlfX3UzMiBhX3J3bmQ7CisJX191MTYgbnVtX291dGJvdW5kX3N0cmVhbXM7CisJX191MTYgbnVtX2luYm91bmRfc3RyZWFtczsKKwlfX3UzMiBpbml0aWFsX3RzbjsKKwlfX3U4ICBwYXJhbXNbMF07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHNjdHBfaW5pdGhkcl90OworCit0eXBlZGVmIHN0cnVjdCBzY3RwX2luaXRfY2h1bmsgeworCXNjdHBfY2h1bmtoZHJfdCBjaHVua19oZHI7CisJc2N0cF9pbml0aGRyX3QgaW5pdF9oZHI7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHNjdHBfaW5pdF9jaHVua190OworCisKKy8qIFNlY3Rpb24gMy4zLjIuMS4gSVB2NCBBZGRyZXNzIFBhcmFtZXRlciAoNSkgKi8KK3R5cGVkZWYgc3RydWN0IHNjdHBfaXB2NGFkZHJfcGFyYW0geworCXNjdHBfcGFyYW1oZHJfdCBwYXJhbV9oZHI7CisJc3RydWN0IGluX2FkZHIgIGFkZHI7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHNjdHBfaXB2NGFkZHJfcGFyYW1fdDsKKworLyogU2VjdGlvbiAzLjMuMi4xLiBJUHY2IEFkZHJlc3MgUGFyYW1ldGVyICg2KSAqLwordHlwZWRlZiBzdHJ1Y3Qgc2N0cF9pcHY2YWRkcl9wYXJhbSB7CisJc2N0cF9wYXJhbWhkcl90IHBhcmFtX2hkcjsKKwlzdHJ1Y3QgaW42X2FkZHIgYWRkcjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgc2N0cF9pcHY2YWRkcl9wYXJhbV90OworCisvKiBTZWN0aW9uIDMuMy4yLjEgQ29va2llIFByZXNlcnZhdGl2ZSAoOSkgKi8KK3R5cGVkZWYgc3RydWN0IHNjdHBfY29va2llX3ByZXNlcnZlX3BhcmFtIHsKKwlzY3RwX3BhcmFtaGRyX3QgcGFyYW1faGRyOworCXVpbnQzMl90ICAgICAgICBsaWZlc3Bhbl9pbmNyZW1lbnQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHNjdHBfY29va2llX3ByZXNlcnZlX3BhcmFtX3Q7CisKKy8qIFNlY3Rpb24gMy4zLjIuMSBIb3N0IE5hbWUgQWRkcmVzcyAoMTEpICovCit0eXBlZGVmIHN0cnVjdCBzY3RwX2hvc3RuYW1lX3BhcmFtIHsKKwlzY3RwX3BhcmFtaGRyX3QgcGFyYW1faGRyOworCXVpbnQ4X3QgaG9zdG5hbWVbMF07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHNjdHBfaG9zdG5hbWVfcGFyYW1fdDsKKworLyogU2VjdGlvbiAzLjMuMi4xIFN1cHBvcnRlZCBBZGRyZXNzIFR5cGVzICgxMikgKi8KK3R5cGVkZWYgc3RydWN0IHNjdHBfc3VwcG9ydGVkX2FkZHJzX3BhcmFtIHsKKwlzY3RwX3BhcmFtaGRyX3QgcGFyYW1faGRyOworCXVpbnQxNl90IHR5cGVzWzBdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBzY3RwX3N1cHBvcnRlZF9hZGRyc19wYXJhbV90OworCisvKiBBcHBlbmRpeCBBLiBFQ04gQ2FwYWJsZSAoMzI3NjgpICovCit0eXBlZGVmIHN0cnVjdCBzY3RwX2Vjbl9jYXBhYmxlX3BhcmFtIHsKKwlzY3RwX3BhcmFtaGRyX3QgcGFyYW1faGRyOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBzY3RwX2Vjbl9jYXBhYmxlX3BhcmFtX3Q7CisKKy8qIEFERElQIFNlY3Rpb24gMy4yLjYgQWRhcHRpb24gTGF5ZXIgSW5kaWNhdGlvbiAqLwordHlwZWRlZiBzdHJ1Y3Qgc2N0cF9hZGFwdGlvbl9pbmRfcGFyYW0geworCXN0cnVjdCBzY3RwX3BhcmFtaGRyIHBhcmFtX2hkcjsKKwlfX3UzMiBhZGFwdGlvbl9pbmQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHNjdHBfYWRhcHRpb25faW5kX3BhcmFtX3Q7CisKKy8qIFJGQyAyOTYwLiAgU2VjdGlvbiAzLjMuMyBJbml0aWF0aW9uIEFja25vd2xlZGdlbWVudCAoSU5JVCBBQ0spICgyKToKKyAqICAgVGhlIElOSVQgQUNLIGNodW5rIGlzIHVzZWQgdG8gYWNrbm93bGVkZ2UgdGhlIGluaXRpYXRpb24gb2YgYW4gU0NUUAorICogICBhc3NvY2lhdGlvbi4KKyAqLwordHlwZWRlZiBzY3RwX2luaXRfY2h1bmtfdCBzY3RwX2luaXRhY2tfY2h1bmtfdDsKKworLyogU2VjdGlvbiAzLjMuMy4xIFN0YXRlIENvb2tpZSAoNykgKi8KK3R5cGVkZWYgc3RydWN0IHNjdHBfY29va2llX3BhcmFtIHsKKwlzY3RwX3BhcmFtaGRyX3QgcDsKKwlfX3U4IGJvZHlbMF07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHNjdHBfY29va2llX3BhcmFtX3Q7CisKKy8qIFNlY3Rpb24gMy4zLjMuMSBVbnJlY29nbml6ZWQgUGFyYW1ldGVycyAoOCkgKi8KK3R5cGVkZWYgc3RydWN0IHNjdHBfdW5yZWNvZ25pemVkX3BhcmFtIHsKKwlzY3RwX3BhcmFtaGRyX3QgcGFyYW1faGRyOworCXNjdHBfcGFyYW1oZHJfdCB1bnJlY29nbml6ZWQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHNjdHBfdW5yZWNvZ25pemVkX3BhcmFtX3Q7CisKKworCisvKgorICogMy4zLjQgU2VsZWN0aXZlIEFja25vd2xlZGdlbWVudCAoU0FDSykgKDMpOgorICoKKyAqICBUaGlzIGNodW5rIGlzIHNlbnQgdG8gdGhlIHBlZXIgZW5kcG9pbnQgdG8gYWNrbm93bGVkZ2UgcmVjZWl2ZWQgREFUQQorICogIGNodW5rcyBhbmQgdG8gaW5mb3JtIHRoZSBwZWVyIGVuZHBvaW50IG9mIGdhcHMgaW4gdGhlIHJlY2VpdmVkCisgKiAgc3Vic2VxdWVuY2VzIG9mIERBVEEgY2h1bmtzIGFzIHJlcHJlc2VudGVkIGJ5IHRoZWlyIFRTTnMuCisgKi8KKwordHlwZWRlZiBzdHJ1Y3Qgc2N0cF9nYXBfYWNrX2Jsb2NrIHsKKwlfX3UxNiBzdGFydDsKKwlfX3UxNiBlbmQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHNjdHBfZ2FwX2Fja19ibG9ja190OworCit0eXBlZGVmIHVpbnQzMl90IHNjdHBfZHVwX3Rzbl90OworCit0eXBlZGVmIHVuaW9uIHsKKwlzY3RwX2dhcF9hY2tfYmxvY2tfdAlnYWI7CisgICAgICAgIHNjdHBfZHVwX3Rzbl90CQlkdXA7Cit9IHNjdHBfc2Fja192YXJpYWJsZV90OworCit0eXBlZGVmIHN0cnVjdCBzY3RwX3NhY2toZHIgeworCV9fdTMyIGN1bV90c25fYWNrOworCV9fdTMyIGFfcnduZDsKKwlfX3UxNiBudW1fZ2FwX2Fja19ibG9ja3M7CisJX191MTYgbnVtX2R1cF90c25zOworCXNjdHBfc2Fja192YXJpYWJsZV90IHZhcmlhYmxlWzBdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBzY3RwX3NhY2toZHJfdDsKKwordHlwZWRlZiBzdHJ1Y3Qgc2N0cF9zYWNrX2NodW5rIHsKKwlzY3RwX2NodW5raGRyX3QgY2h1bmtfaGRyOworCXNjdHBfc2Fja2hkcl90IHNhY2tfaGRyOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBzY3RwX3NhY2tfY2h1bmtfdDsKKworCisvKiBSRkMgMjk2MC4gIFNlY3Rpb24gMy4zLjUgSGVhcnRiZWF0IFJlcXVlc3QgKEhFQVJUQkVBVCkgKDQpOgorICoKKyAqICBBbiBlbmRwb2ludCBzaG91bGQgc2VuZCB0aGlzIGNodW5rIHRvIGl0cyBwZWVyIGVuZHBvaW50IHRvIHByb2JlIHRoZQorICogIHJlYWNoYWJpbGl0eSBvZiBhIHBhcnRpY3VsYXIgZGVzdGluYXRpb24gdHJhbnNwb3J0IGFkZHJlc3MgZGVmaW5lZCBpbgorICogIHRoZSBwcmVzZW50IGFzc29jaWF0aW9uLgorICovCisKK3R5cGVkZWYgc3RydWN0IHNjdHBfaGVhcnRiZWF0aGRyIHsKKwlzY3RwX3BhcmFtaGRyX3QgaW5mbzsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgc2N0cF9oZWFydGJlYXRoZHJfdDsKKwordHlwZWRlZiBzdHJ1Y3Qgc2N0cF9oZWFydGJlYXRfY2h1bmsgeworCXNjdHBfY2h1bmtoZHJfdCBjaHVua19oZHI7CisJc2N0cF9oZWFydGJlYXRoZHJfdCBoYl9oZHI7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHNjdHBfaGVhcnRiZWF0X2NodW5rX3Q7CisKKworLyogRm9yIHRoZSBhYm9ydCBhbmQgc2h1dGRvd24gQUNLIHdlIG11c3QgY2FycnkgdGhlIGluaXQgdGFnIGluIHRoZQorICogY29tbW9uIGhlYWRlci4gSnVzdCB0aGUgY29tbW9uIGhlYWRlciBpcyBhbGwgdGhhdCBpcyBuZWVkZWQgd2l0aCBhCisgKiBjaHVuayBkZXNjcmlwdG9yLgorICovCit0eXBlZGVmIHN0cnVjdCBzY3RwX2Fib3J0X2NodW5rIHsKKyAgICAgICAgc2N0cF9jaHVua2hkcl90IHVoOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBzY3RwX2Fib3J0X2NodW5rX3Q7CisKKworLyogRm9yIHRoZSBncmFjZWZ1bCBzaHV0ZG93biB3ZSBtdXN0IGNhcnJ5IHRoZSB0YWcgKGluIGNvbW1vbiBoZWFkZXIpCisgKiBhbmQgdGhlIGhpZ2hlc3QgY29uc2VjdXRpdmUgYWNraW5nIHZhbHVlLgorICovCit0eXBlZGVmIHN0cnVjdCBzY3RwX3NodXRkb3duaGRyIHsKKwlfX3UzMiBjdW1fdHNuX2FjazsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgc2N0cF9zaHV0ZG93bmhkcl90OworCitzdHJ1Y3Qgc2N0cF9zaHV0ZG93bl9jaHVua190IHsKKyAgICAgICAgc2N0cF9jaHVua2hkcl90ICAgIGNodW5rX2hkcjsKKyAgICAgICAgc2N0cF9zaHV0ZG93bmhkcl90IHNodXRkb3duX2hkcjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKiBSRkMgMjk2MC4gIFNlY3Rpb24gMy4zLjEwIE9wZXJhdGlvbiBFcnJvciAoRVJST1IpICg5KSAqLworCit0eXBlZGVmIHN0cnVjdCBzY3RwX2VycmhkciB7CisJX191MTYgY2F1c2U7CisJX191MTYgbGVuZ3RoOworCV9fdTggIHZhcmlhYmxlWzBdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBzY3RwX2Vycmhkcl90OworCit0eXBlZGVmIHN0cnVjdCBzY3RwX29wZXJyX2NodW5rIHsKKyAgICAgICAgc2N0cF9jaHVua2hkcl90IGNodW5rX2hkcjsKKwlzY3RwX2Vycmhkcl90ICAgZXJyX2hkcjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgc2N0cF9vcGVycl9jaHVua190OworCisvKiBSRkMgMjk2MCAzLjMuMTAgLSBPcGVyYXRpb24gRXJyb3IKKyAqCisgKiBDYXVzZSBDb2RlOiAxNiBiaXRzICh1bnNpZ25lZCBpbnRlZ2VyKQorICoKKyAqICAgICBEZWZpbmVzIHRoZSB0eXBlIG9mIGVycm9yIGNvbmRpdGlvbnMgYmVpbmcgcmVwb3J0ZWQuCisgKiAgICBDYXVzZSBDb2RlCisgKiAgICAgVmFsdWUgICAgICAgICAgIENhdXNlIENvZGUKKyAqICAgICAtLS0tLS0tLS0gICAgICAtLS0tLS0tLS0tLS0tLS0tCisgKiAgICAgIDEgICAgICAgICAgICAgIEludmFsaWQgU3RyZWFtIElkZW50aWZpZXIKKyAqICAgICAgMiAgICAgICAgICAgICAgTWlzc2luZyBNYW5kYXRvcnkgUGFyYW1ldGVyCisgKiAgICAgIDMgICAgICAgICAgICAgIFN0YWxlIENvb2tpZSBFcnJvcgorICogICAgICA0ICAgICAgICAgICAgICBPdXQgb2YgUmVzb3VyY2UKKyAqICAgICAgNSAgICAgICAgICAgICAgVW5yZXNvbHZhYmxlIEFkZHJlc3MKKyAqICAgICAgNiAgICAgICAgICAgICAgVW5yZWNvZ25pemVkIENodW5rIFR5cGUKKyAqICAgICAgNyAgICAgICAgICAgICAgSW52YWxpZCBNYW5kYXRvcnkgUGFyYW1ldGVyCisgKiAgICAgIDggICAgICAgICAgICAgIFVucmVjb2duaXplZCBQYXJhbWV0ZXJzCisgKiAgICAgIDkgICAgICAgICAgICAgIE5vIFVzZXIgRGF0YQorICogICAgIDEwICAgICAgICAgICAgICBDb29raWUgUmVjZWl2ZWQgV2hpbGUgU2h1dHRpbmcgRG93bgorICovCit0eXBlZGVmIGVudW0geworCisJU0NUUF9FUlJPUl9OT19FUlJPUgkgICA9IF9fY29uc3RhbnRfaHRvbnMoMHgwMCksCisJU0NUUF9FUlJPUl9JTlZfU1RSTQkgICA9IF9fY29uc3RhbnRfaHRvbnMoMHgwMSksCisJU0NUUF9FUlJPUl9NSVNTX1BBUkFNIAkgICA9IF9fY29uc3RhbnRfaHRvbnMoMHgwMiksCisJU0NUUF9FUlJPUl9TVEFMRV9DT09LSUUJICAgPSBfX2NvbnN0YW50X2h0b25zKDB4MDMpLAorCVNDVFBfRVJST1JfTk9fUkVTT1VSQ0UgCSAgID0gX19jb25zdGFudF9odG9ucygweDA0KSwKKwlTQ1RQX0VSUk9SX0ROU19GQUlMRUQgICAgICA9IF9fY29uc3RhbnRfaHRvbnMoMHgwNSksCisJU0NUUF9FUlJPUl9VTktOT1dOX0NIVU5LICAgPSBfX2NvbnN0YW50X2h0b25zKDB4MDYpLAorCVNDVFBfRVJST1JfSU5WX1BBUkFNICAgICAgID0gX19jb25zdGFudF9odG9ucygweDA3KSwKKwlTQ1RQX0VSUk9SX1VOS05PV05fUEFSQU0gICA9IF9fY29uc3RhbnRfaHRvbnMoMHgwOCksCisJU0NUUF9FUlJPUl9OT19EQVRBICAgICAgICAgPSBfX2NvbnN0YW50X2h0b25zKDB4MDkpLAorCVNDVFBfRVJST1JfQ09PS0lFX0lOX1NIVVRET1dOID0gX19jb25zdGFudF9odG9ucygweDBhKSwKKworCisJLyogU0NUUCBJbXBsZW1lbnRhdGlvbiBHdWlkZToKKwkgKiAgMTEgIFJlc3RhcnQgb2YgYW4gYXNzb2NpYXRpb24gd2l0aCBuZXcgYWRkcmVzc2VzCisJICogIDEyICBVc2VyIEluaXRpYXRlZCBBYm9ydAorCSAqICAxMyAgUHJvdG9jb2wgVmlvbGF0aW9uCisJICovCisKKwlTQ1RQX0VSUk9SX1JFU1RBUlQgICAgICAgICA9IF9fY29uc3RhbnRfaHRvbnMoMHgwYiksCisJU0NUUF9FUlJPUl9VU0VSX0FCT1JUICAgICAgPSBfX2NvbnN0YW50X2h0b25zKDB4MGMpLAorCVNDVFBfRVJST1JfUFJPVE9fVklPTEFUSU9OID0gX19jb25zdGFudF9odG9ucygweDBkKSwKKworCS8qIEFERElQIFNlY3Rpb24gMy4zICBOZXcgRXJyb3IgQ2F1c2VzCisJICoKKwkgKiBGb3VyIG5ldyBFcnJvciBDYXVzZXMgYXJlIGFkZGVkIHRvIHRoZSBTQ1RQIE9wZXJhdGlvbmFsIEVycm9ycywKKwkgKiBwcmltYXJpbHkgZm9yIHVzZSBpbiB0aGUgQVNDT05GLUFDSyBjaHVuay4KKwkgKgorCSAqIFZhbHVlICAgICAgICAgIENhdXNlIENvZGUKKwkgKiAtLS0tLS0tLS0gICAgICAtLS0tLS0tLS0tLS0tLS0tCisJICogMHgwMTAwICAgICAgICAgIFJlcXVlc3QgdG8gRGVsZXRlIExhc3QgUmVtYWluaW5nIElQIEFkZHJlc3MuCisJICogMHgwMTAxICAgICAgICAgIE9wZXJhdGlvbiBSZWZ1c2VkIER1ZSB0byBSZXNvdXJjZSBTaG9ydGFnZS4KKwkgKiAweDAxMDIgICAgICAgICAgUmVxdWVzdCB0byBEZWxldGUgU291cmNlIElQIEFkZHJlc3MuCisJICogMHgwMTAzICAgICAgICAgIEFzc29jaWF0aW9uIEFib3J0ZWQgZHVlIHRvIGlsbGVnYWwgQVNDT05GLUFDSworCSAqIDB4MDEwNCAgICAgICAgICBSZXF1ZXN0IHJlZnVzZWQgLSBubyBhdXRob3JpemF0aW9uLgorCSAqLworCVNDVFBfRVJST1JfREVMX0xBU1RfSVAJPSBfX2NvbnN0YW50X2h0b25zKDB4MDEwMCksCisJU0NUUF9FUlJPUl9SU1JDX0xPVwk9IF9fY29uc3RhbnRfaHRvbnMoMHgwMTAxKSwKKwlTQ1RQX0VSUk9SX0RFTF9TUkNfSVAJPSBfX2NvbnN0YW50X2h0b25zKDB4MDEwMiksCisJU0NUUF9FUlJPUl9BU0NPTkZfQUNLICAgPSBfX2NvbnN0YW50X2h0b25zKDB4MDEwMyksCisJU0NUUF9FUlJPUl9SRVFfUkVGVVNFRAk9IF9fY29uc3RhbnRfaHRvbnMoMHgwMTA0KQorfSBzY3RwX2Vycm9yX3Q7CisKKworCisvKiBSRkMgMjk2MC4gIEFwcGVuZGl4IEEuICBFeHBsaWNpdCBDb25nZXN0aW9uIE5vdGlmaWNhdGlvbi4KKyAqICAgRXhwbGljaXQgQ29uZ2VzdGlvbiBOb3RpZmljYXRpb24gRWNobyAoRUNORSkgKDEyKQorICovCit0eXBlZGVmIHN0cnVjdCBzY3RwX2VjbmVoZHIgeworCV9fdTMyIGxvd2VzdF90c247Cit9IHNjdHBfZWNuZWhkcl90OworCit0eXBlZGVmIHN0cnVjdCBzY3RwX2VjbmVfY2h1bmsgeworCXNjdHBfY2h1bmtoZHJfdCBjaHVua19oZHI7CisJc2N0cF9lY25laGRyX3QgZW5jZV9oZHI7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHNjdHBfZWNuZV9jaHVua190OworCisvKiBSRkMgMjk2MC4gIEFwcGVuZGl4IEEuICBFeHBsaWNpdCBDb25nZXN0aW9uIE5vdGlmaWNhdGlvbi4KKyAqICAgQ29uZ2VzdGlvbiBXaW5kb3cgUmVkdWNlZCAoQ1dSKSAoMTMpCisgKi8KK3R5cGVkZWYgc3RydWN0IHNjdHBfY3dyaGRyIHsKKwlfX3UzMiBsb3dlc3RfdHNuOworfSBzY3RwX2N3cmhkcl90OworCit0eXBlZGVmIHN0cnVjdCBzY3RwX2N3cl9jaHVuayB7CisJc2N0cF9jaHVua2hkcl90IGNodW5rX2hkcjsKKwlzY3RwX2N3cmhkcl90IGN3cl9oZHI7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHNjdHBfY3dyX2NodW5rX3Q7CisKKy8qIFBSLVNDVFAKKyAqIDMuMiBGb3J3YXJkIEN1bXVsYXRpdmUgVFNOIENodW5rIERlZmluaXRpb24gKEZPUldBUkQgVFNOKQorICoKKyAqIEZvcndhcmQgQ3VtdWxhdGl2ZSBUU04gY2h1bmsgaGFzIHRoZSBmb2xsb3dpbmcgZm9ybWF0OgorICoKKyAqICAgICAgICAwICAgICAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICAgICAgICAgICAzCisgKiAgICAgICAgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxCisgKiAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgKiAgICAgIHwgICBUeXBlID0gMTkyICB8ICBGbGFncyA9IDB4MDAgfCAgICAgICAgTGVuZ3RoID0gVmFyaWFibGUgICAgICB8CisgKiAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgKiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgTmV3IEN1bXVsYXRpdmUgVFNOICAgICAgICAgICAgICAgICAgICAgICB8CisgKiAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgKiAgICAgIHwgICAgICAgICBTdHJlYW0tMSAgICAgICAgICAgICAgfCAgICAgICBTdHJlYW0gU2VxdWVuY2UtMSAgICAgICB8CisgKiAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgKiAgICAgIFwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvCisgKiAgICAgIC8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgKiAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgKiAgICAgIHwgICAgICAgICBTdHJlYW0tTiAgICAgICAgICAgICAgfCAgICAgICBTdHJlYW0gU2VxdWVuY2UtTiAgICAgICB8CisgKiAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgKgorICogICAgICBDaHVuayBGbGFnczoKKyAqCisgKiAgICAgICAgU2V0IHRvIGFsbCB6ZXJvcyBvbiB0cmFuc21pdCBhbmQgaWdub3JlZCBvbiByZWNlaXB0LgorICoKKyAqICAgICAgTmV3IEN1bXVsYXRpdmUgVFNOOiAzMiBiaXQgdV9pbnQKKyAqCisgKiAgICAgICBUaGlzIGluZGljYXRlcyB0aGUgbmV3IGN1bXVsYXRpdmUgVFNOIHRvIHRoZSBkYXRhIHJlY2VpdmVyLiBVcG9uCisgKiAgICAgICB0aGUgcmVjZXB0aW9uIG9mIHRoaXMgdmFsdWUsIHRoZSBkYXRhIHJlY2VpdmVyIE1VU1QgY29uc2lkZXIKKyAqICAgICAgIGFueSBtaXNzaW5nIFRTTnMgZWFybGllciB0aGFuIG9yIGVxdWFsIHRvIHRoaXMgdmFsdWUgYXMgcmVjZWl2ZWQKKyAqICAgICAgIGFuZCBzdG9wIHJlcG9ydGluZyB0aGVtIGFzIGdhcHMgaW4gYW55IHN1YnNlcXVlbnQgU0FDS3MuCisgKgorICogICAgICBTdHJlYW0tTjogMTYgYml0IHVfaW50CisgKgorICogICAgICAgVGhpcyBmaWVsZCBob2xkcyBhIHN0cmVhbSBudW1iZXIgdGhhdCB3YXMgc2tpcHBlZCBieSB0aGlzCisgKiAgICAgICBGV0QtVFNOLgorICoKKyAqICAgICAgU3RyZWFtIFNlcXVlbmNlLU46IDE2IGJpdCB1X2ludAorICogICAgICAgVGhpcyBmaWVsZCBob2xkcyB0aGUgc2VxdWVuY2UgbnVtYmVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3RyZWFtCisgKiAgICAgICB0aGF0IHdhcyBza2lwcGVkLiBUaGUgc3RyZWFtIHNlcXVlbmNlIGZpZWxkIGhvbGRzIHRoZSBsYXJnZXN0IHN0cmVhbQorICogICAgICAgc2VxdWVuY2UgbnVtYmVyIGluIHRoaXMgc3RyZWFtIGJlaW5nIHNraXBwZWQuICBUaGUgcmVjZWl2ZXIgb2YKKyAqICAgICAgIHRoZSBGV0QtVFNOJ3MgY2FuIHVzZSB0aGUgU3RyZWFtLU4gYW5kIFN0cmVhbSBTZXF1ZW5jZS1OIGZpZWxkcworICogICAgICAgdG8gZW5hYmxlIGRlbGl2ZXJ5IG9mIGFueSBzdHJhbmRlZCBUU04ncyB0aGF0IHJlbWFpbiBvbiB0aGUgc3RyZWFtCisgKiAgICAgICByZS1vcmRlcmluZyBxdWV1ZXMuIFRoaXMgZmllbGQgTVVTVCBOT1QgcmVwb3J0IFRTTidzIGNvcnJlc3BvbmRpbmcKKyAqICAgICAgIHRvIERBVEEgY2h1bmsgdGhhdCBhcmUgbWFya2VkIGFzIHVub3JkZXJlZC4gRm9yIG9yZGVyZWQgREFUQQorICogICAgICAgY2h1bmtzIHRoaXMgZmllbGQgTVVTVCBiZSBmaWxsZWQgaW4uCisgKi8KK3N0cnVjdCBzY3RwX2Z3ZHRzbl9za2lwIHsKKwlfX3UxNiBzdHJlYW07CisJX191MTYgc3NuOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IHNjdHBfZndkdHNuX2hkciB7CisJX191MzIgbmV3X2N1bV90c247CisJc3RydWN0IHNjdHBfZndkdHNuX3NraXAgc2tpcFswXTsKK30gX19hdHRyaWJ1dGUoKHBhY2tlZCkpOworCitzdHJ1Y3Qgc2N0cF9md2R0c25fY2h1bmsgeworCXN0cnVjdCBzY3RwX2NodW5raGRyIGNodW5rX2hkcjsKKwlzdHJ1Y3Qgc2N0cF9md2R0c25faGRyIGZ3ZHRzbl9oZHI7Cit9IF9fYXR0cmlidXRlKChwYWNrZWQpKTsKKworCisvKiBBRERJUAorICogU2VjdGlvbiAzLjEuMSBBZGRyZXNzIENvbmZpZ3VyYXRpb24gQ2hhbmdlIENodW5rIChBU0NPTkYpCisgKgorICogCVNlcmlhbCBOdW1iZXI6IDMyIGJpdHMgKHVuc2lnbmVkIGludGVnZXIpCisgKglUaGlzIHZhbHVlIHJlcHJlc2VudHMgYSBTZXJpYWwgTnVtYmVyIGZvciB0aGUgQVNDT05GIENodW5rLiBUaGUKKyAqCXZhbGlkIHJhbmdlIG9mIFNlcmlhbCBOdW1iZXIgaXMgZnJvbSAwIHRvIDJeMzItMS4KKyAqCVNlcmlhbCBOdW1iZXJzIHdyYXAgYmFjayB0byAwIGFmdGVyIHJlYWNoaW5nIDJeMzIgLTEuCisgKgorICoJQWRkcmVzcyBQYXJhbWV0ZXI6IDggb3IgMjAgYnl0ZXMgKGRlcGVuZGluZyBvbiB0eXBlKQorICoJVGhlIGFkZHJlc3MgaXMgYW4gYWRkcmVzcyBvZiB0aGUgc2VuZGVyIG9mIHRoZSBBU0NPTkYgY2h1bmssCisgKgl0aGUgYWRkcmVzcyBNVVNUIGJlIGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgYXNzb2NpYXRpb24gYnkgdGhlCisgKglwZWVyIGVuZHBvaW50LiBUaGlzIGZpZWxkIG1heSBiZSB1c2VkIGJ5IHRoZSByZWNlaXZlciBvZiB0aGUgCisgKglBU0NPTkYgdG8gaGVscCBpbiBmaW5kaW5nIHRoZSBhc3NvY2lhdGlvbi4gVGhpcyBwYXJhbWV0ZXIgTVVTVAorICoJYmUgcHJlc2VudCBpbiBldmVyeSBBU0NPTkYgbWVzc2FnZSBpLmUuIGl0IGlzIGEgbWFuZGF0b3J5IFRMVgorICoJcGFyYW1ldGVyLgorICoKKyAqCUFTQ09ORiBQYXJhbWV0ZXI6IFRMViBmb3JtYXQKKyAqCUVhY2ggQWRkcmVzcyBjb25maWd1cmF0aW9uIGNoYW5nZSBpcyByZXByZXNlbnRlZCBieSBhIFRMVgorICoJcGFyYW1ldGVyIGFzIGRlZmluZWQgaW4gU2VjdGlvbiAzLjIuIE9uZSBvciBtb3JlIHJlcXVlc3RzIG1heQorICoJYmUgcHJlc2VudCBpbiBhbiBBU0NPTkYgQ2h1bmsuCisgKgorICogU2VjdGlvbiAzLjEuMiBBZGRyZXNzIENvbmZpZ3VyYXRpb24gQWNrbm93bGVkZ2VtZW50IENodW5rIChBU0NPTkYtQUNLKQorICogCisgKglTZXJpYWwgTnVtYmVyOiAzMiBiaXRzICh1bnNpZ25lZCBpbnRlZ2VyKQorICoJVGhpcyB2YWx1ZSByZXByZXNlbnRzIHRoZSBTZXJpYWwgTnVtYmVyIGZvciB0aGUgcmVjZWl2ZWQgQVNDT05GCisgKglDaHVuayB0aGF0IGlzIGFja25vd2xlZGdlZCBieSB0aGlzIGNodW5rLiBUaGlzIHZhbHVlIGlzIGNvcGllZAorICoJZnJvbSB0aGUgcmVjZWl2ZWQgQVNDT05GIENodW5rLiAKKyAqCisgKglBU0NPTkYgUGFyYW1ldGVyIFJlc3BvbnNlOiBUTFYgZm9ybWF0CisgKglUaGUgQVNDT05GIFBhcmFtZXRlciBSZXNwb25zZSBpcyB1c2VkIGluIHRoZSBBU0NPTkYtQUNLIHRvCisgKglyZXBvcnQgc3RhdHVzIG9mIEFTQ09ORiBwcm9jZXNzaW5nLgorICovCit0eXBlZGVmIHN0cnVjdCBzY3RwX2FkZGlwX3BhcmFtIHsKKwlzY3RwX3BhcmFtaGRyX3QJcGFyYW1faGRyOworCV9fdTMyCQljcnJfaWQ7CQorfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBzY3RwX2FkZGlwX3BhcmFtX3Q7CisKK3R5cGVkZWYgc3RydWN0IHNjdHBfYWRkaXBoZHIgeworCV9fdTMyCXNlcmlhbDsKKwlfX3U4CXBhcmFtc1swXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgc2N0cF9hZGRpcGhkcl90OworCit0eXBlZGVmIHN0cnVjdCBzY3RwX2FkZGlwX2NodW5rIHsKKwlzY3RwX2NodW5raGRyX3QgY2h1bmtfaGRyOworCXNjdHBfYWRkaXBoZHJfdCBhZGRpcF9oZHI7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHNjdHBfYWRkaXBfY2h1bmtfdDsKKworI2VuZGlmIC8qIF9fTElOVVhfU0NUUF9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2N4MjAwLmggYi9pbmNsdWRlL2xpbnV4L3NjeDIwMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyMmY5ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3NjeDIwMC5oCkBAIC0wLDAgKzEsNTggQEAKKy8qIGxpbnV4L2luY2x1ZGUvbGludXgvc2N4MjAwLmgKKworICAgQ29weXJpZ2h0IChjKSAyMDAxLDIwMDIgQ2hyaXN0ZXIgV2VpbmlnZWwgPHdpbmdlbEBuYW5vLXN5c3RlbS5jb20+CisKKyAgIERlZmluZXMgZm9yIHRoZSBOYXRpb25hbCBTZW1pY29uZHVjdG9yIFNDeDIwMCBQcm9jZXNzb3JzCisqLworCisvKiBJbnRlcmVzdGluZyBzdHVmZiBmb3IgdGhlIE5hdGlvbmFsIFNlbWljb25kdWN0b3IgU0N4MjAwIENQVSAqLworCitleHRlcm4gdW5zaWduZWQgc2N4MjAwX2NiX2Jhc2U7CisKKyNkZWZpbmUgc2N4MjAwX2NiX3ByZXNlbnQoKSAoc2N4MjAwX2NiX2Jhc2UhPTApCisKKy8qIEYwIFBDSSBIZWFkZXIvQnJpZGdlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXJzICovCisjZGVmaW5lIFNDeDIwMF9ET0NDU19CQVNFIDB4NzgJLyogRE9DQ1MgQmFzZSBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lIFNDeDIwMF9ET0NDU19DVFJMIDB4N2MJLyogRE9DQ1MgQ29udHJvbCBSZWdpc3RlciAqLworCisvKiBHUElPIFJlZ2lzdGVyIEJsb2NrICovCisjZGVmaW5lIFNDeDIwMF9HUElPX1NJWkUgMHgyYwkvKiBTaXplIG9mIEdQSU8gcmVnaXN0ZXIgYmxvY2sgKi8KKworLyogR2VuZXJhbCBDb25maWd1cmF0aW9uIEJsb2NrICovCisjZGVmaW5lIFNDeDIwMF9DQl9CQVNFX0ZJWEVEIDB4OTAwMAkvKiBCYXNlIGZpeGVkIGF0IDB4OTAwMCBhY2NvcmRpbmcgdG8gZXJyYXRhPyAqLworCisvKiBXYXRjaGRvZyBUaW1lciAqLworI2RlZmluZSBTQ3gyMDBfV0RUX09GRlNFVCAweDAwCS8qIG9mZnNldCB3aXRoaW4gY29uZmlndXJhdGlvbiBibG9jayAqLworI2RlZmluZSBTQ3gyMDBfV0RUX1NJWkUgMHgwNQkvKiBzaXplICovCisKKyNkZWZpbmUgU0N4MjAwX1dEVF9XRFRPIDB4MDAJLyogVGltZS1PdXQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU0N4MjAwX1dEVF9XRENORkcgMHgwMgkvKiBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lIFNDeDIwMF9XRFRfV0RTVFMgMHgwNAkvKiBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU0N4MjAwX1dEVF9XRFNUU19XRE9WRiAoMTw8MCkgLyogT3ZlcmZsb3cgYml0ICovCisKKy8qIEhpZ2ggUmVzb2x1dGlvbiBUaW1lciAqLworI2RlZmluZSBTQ3gyMDBfVElNRVJfT0ZGU0VUIDB4MDgKKyNkZWZpbmUgU0N4MjAwX1RJTUVSX1NJWkUgMHgwNQorCisvKiBDbG9jayBHZW5lcmF0b3JzICovCisjZGVmaW5lIFNDeDIwMF9DTE9DS0dFTl9PRkZTRVQgMHgxMAorI2RlZmluZSBTQ3gyMDBfQ0xPQ0tHRU5fU0laRSAweDEwCisKKy8qIFBpbiBNdWx0aXBsZXhpbmcgYW5kIE1pc2NlbGxhbmVvdXMgQ29uZmlndXJhdGlvbiBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgU0N4MjAwX01JU0NfT0ZGU0VUIDB4MzAKKyNkZWZpbmUgU0N4MjAwX01JU0NfU0laRSAweDEwCisKKyNkZWZpbmUgU0N4MjAwX1BNUiAweDMwCQkvKiBQaW4gTXVsdGlwbGV4aW5nIFJlZ2lzdGVyICovCisjZGVmaW5lIFNDeDIwMF9NQ1IgMHgzNAkJLyogTWlzY2VsbGFuZW91cyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lIFNDeDIwMF9JTlRTRUwgMHgzOAkvKiBJbnRlcnJ1cHQgU2VsZWN0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lIFNDeDIwMF9JSUQgMHgzYwkJLyogSUEgT24gYSBDaGlwIElkZW50aWZpY2F0aW9uIE51bWJlciBSZWcgKi8KKyNkZWZpbmUgU0N4MjAwX1JFViAweDNkCQkvKiBSZXZpc2lvbiBSZWdpc3RlciAqLworI2RlZmluZSBTQ3gyMDBfQ0JBIDB4M2UJCS8qIENvbmZpZ3VyYXRpb24gQmFzZSBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lIFNDeDIwMF9DQkFfU0NSQVRDSCAweDY0CS8qIENvbmZpZ3VyYXRpb24gQmFzZSBBZGRyZXNzIFNjcmF0Y2hwYWQgKi8KKworLyoKKyAgICBMb2NhbCB2YXJpYWJsZXM6CisgICAgICAgIGNvbXBpbGUtY29tbWFuZDogIm1ha2UgLUMgLi4vLi4gYnpJbWFnZSBtb2R1bGVzIgorICAgICAgICBjLWJhc2ljLW9mZnNldDogOAorICAgIEVuZDoKKyovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjeDIwMF9ncGlvLmggYi9pbmNsdWRlL2xpbnV4L3NjeDIwMF9ncGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBjZGQ2NAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvc2N4MjAwX2dwaW8uaApAQCAtMCwwICsxLDk2IEBACisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKwordTMyIHNjeDIwMF9ncGlvX2NvbmZpZ3VyZShpbnQgaW5kZXgsIHUzMiBzZXQsIHUzMiBjbGVhcik7CisKK2V4dGVybiB1bnNpZ25lZCBzY3gyMDBfZ3Bpb19iYXNlOworZXh0ZXJuIGxvbmcgc2N4MjAwX2dwaW9fc2hhZG93WzJdOworCisjZGVmaW5lIHNjeDIwMF9ncGlvX3ByZXNlbnQoKSAoc2N4MjAwX2dwaW9fYmFzZSE9MCkKKworLyogRGVmaW5pdGlvbnMgdG8gbWFrZSBzdXJlIEkgZG8gdGhlIHNhbWUgdGhpbmcgaW4gYWxsIGZ1bmN0aW9ucyAqLworI2RlZmluZSBfX1NDeDIwMF9HUElPX0JBTksgdW5zaWduZWQgYmFuayA9IGluZGV4Pj41CisjZGVmaW5lIF9fU0N4MjAwX0dQSU9fSU9BRERSIHVuc2lnbmVkIHNob3J0IGlvYWRkciA9IHNjeDIwMF9ncGlvX2Jhc2UrMHgxMCpiYW5rCisjZGVmaW5lIF9fU0N4MjAwX0dQSU9fU0hBRE9XIGxvbmcgKnNoYWRvdyA9IHNjeDIwMF9ncGlvX3NoYWRvdytiYW5rCisjZGVmaW5lIF9fU0N4MjAwX0dQSU9fSU5ERVggaW5kZXggJj0gMzEKKworI2RlZmluZSBfX1NDeDIwMF9HUElPX09VVCBfX2FzbV9fIF9fdm9sYXRpbGVfXygib3V0c2wiOiI9bVMiIChzaGFkb3cpOiJkIiAoaW9hZGRyKSwgIjAiIChzaGFkb3cpKQorCisvKiByZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgR1BJTyBwaW4gKi8KKworc3RhdGljIGlubGluZSBpbnQgc2N4MjAwX2dwaW9fZ2V0KGludCBpbmRleCkgeworCV9fU0N4MjAwX0dQSU9fQkFOSzsKKwlfX1NDeDIwMF9HUElPX0lPQUREUiArIDB4MDQ7CisJX19TQ3gyMDBfR1BJT19JTkRFWDsKKwkJCisJcmV0dXJuIChpbmwoaW9hZGRyKSAmICgxPDxpbmRleCkpID8gMSA6IDA7Cit9CisKKy8qIHJldHVybiB0aGUgdmFsdWUgZHJpdmVuIG9uIHRoZSBHUElPIHNpZ25hbCAodGhlIHZhbHVlIHRoYXQgd2lsbCBiZQorICAgZHJpdmVuIGlmIHRoZSBHUElPIGlzIGNvbmZpZ3VyZWQgYXMgYW4gb3V0cHV0LCBpdCBtaWdodCBub3QgYmUgdGhlCisgICBzdGF0ZSBvZiB0aGUgR1BJTyByaWdodCBub3cgaWYgdGhlIEdQSU8gaXMgY29uZmlndXJlZCBhcyBhbiBpbnB1dCkgKi8KKworc3RhdGljIGlubGluZSBpbnQgc2N4MjAwX2dwaW9fY3VycmVudChpbnQgaW5kZXgpIHsKKyAgICAgICAgX19TQ3gyMDBfR1BJT19CQU5LOworCV9fU0N4MjAwX0dQSU9fSU5ERVg7CisJCQorCXJldHVybiAoc2N4MjAwX2dwaW9fc2hhZG93W2JhbmtdICYgKDE8PGluZGV4KSkgPyAxIDogMDsKK30KKworLyogZHJpdmUgdGhlIEdQSU8gc2lnbmFsIGhpZ2ggKi8KKworc3RhdGljIGlubGluZSB2b2lkIHNjeDIwMF9ncGlvX3NldF9oaWdoKGludCBpbmRleCkgeworCV9fU0N4MjAwX0dQSU9fQkFOSzsKKwlfX1NDeDIwMF9HUElPX0lPQUREUjsKKwlfX1NDeDIwMF9HUElPX1NIQURPVzsKKwlfX1NDeDIwMF9HUElPX0lOREVYOworCXNldF9iaXQoaW5kZXgsIHNoYWRvdyk7CisJX19TQ3gyMDBfR1BJT19PVVQ7Cit9CisKKy8qIGRyaXZlIHRoZSBHUElPIHNpZ25hbCBsb3cgKi8KKworc3RhdGljIGlubGluZSB2b2lkIHNjeDIwMF9ncGlvX3NldF9sb3coaW50IGluZGV4KSB7CisJX19TQ3gyMDBfR1BJT19CQU5LOworCV9fU0N4MjAwX0dQSU9fSU9BRERSOworCV9fU0N4MjAwX0dQSU9fU0hBRE9XOworCV9fU0N4MjAwX0dQSU9fSU5ERVg7CisJY2xlYXJfYml0KGluZGV4LCBzaGFkb3cpOworCV9fU0N4MjAwX0dQSU9fT1VUOworfQorCisvKiBkcml2ZSB0aGUgR1BJTyBzaWduYWwgdG8gc3RhdGUgKi8KKworc3RhdGljIGlubGluZSB2b2lkIHNjeDIwMF9ncGlvX3NldChpbnQgaW5kZXgsIGludCBzdGF0ZSkgeworCV9fU0N4MjAwX0dQSU9fQkFOSzsKKwlfX1NDeDIwMF9HUElPX0lPQUREUjsKKwlfX1NDeDIwMF9HUElPX1NIQURPVzsKKwlfX1NDeDIwMF9HUElPX0lOREVYOworCWlmIChzdGF0ZSkKKwkJc2V0X2JpdChpbmRleCwgc2hhZG93KTsKKwllbHNlCisJCWNsZWFyX2JpdChpbmRleCwgc2hhZG93KTsKKwlfX1NDeDIwMF9HUElPX09VVDsKK30KKworLyogdG9nZ2xlIHRoZSBHUElPIHNpZ25hbCAqLworc3RhdGljIGlubGluZSB2b2lkIHNjeDIwMF9ncGlvX2NoYW5nZShpbnQgaW5kZXgpIHsKKwlfX1NDeDIwMF9HUElPX0JBTks7CisJX19TQ3gyMDBfR1BJT19JT0FERFI7CisJX19TQ3gyMDBfR1BJT19TSEFET1c7CisJX19TQ3gyMDBfR1BJT19JTkRFWDsKKwljaGFuZ2VfYml0KGluZGV4LCBzaGFkb3cpOworCV9fU0N4MjAwX0dQSU9fT1VUOworfQorCisjdW5kZWYgX19TQ3gyMDBfR1BJT19CQU5LCisjdW5kZWYgX19TQ3gyMDBfR1BJT19JT0FERFIKKyN1bmRlZiBfX1NDeDIwMF9HUElPX1NIQURPVworI3VuZGVmIF9fU0N4MjAwX0dQSU9fSU5ERVgKKyN1bmRlZiBfX1NDeDIwMF9HUElPX09VVAorCisvKgorICAgIExvY2FsIHZhcmlhYmxlczoKKyAgICAgICAgY29tcGlsZS1jb21tYW5kOiAibWFrZSAtQyAuLi8uLiBiekltYWdlIG1vZHVsZXMiCisgICAgICAgIGMtYmFzaWMtb2Zmc2V0OiA4CisgICAgRW5kOgorKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2RsYS5oIGIvaW5jbHVkZS9saW51eC9zZGxhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I2YWZiOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvc2RsYS5oCkBAIC0wLDAgKzEsMzM5IEBACisvKgorICogSU5FVAkJQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIFRDUC9JUCBwcm90b2NvbCBzdWl0ZSBmb3IgdGhlIExJTlVYCisgKgkJb3BlcmF0aW5nIHN5c3RlbS4gIElORVQgaXMgaW1wbGVtZW50ZWQgdXNpbmcgdGhlICBCU0QgU29ja2V0CisgKgkJaW50ZXJmYWNlIGFzIHRoZSBtZWFucyBvZiBjb21tdW5pY2F0aW9uIHdpdGggdGhlIHVzZXIgbGV2ZWwuCisgKgorICoJCUdsb2JhbCBkZWZpbml0aW9ucyBmb3IgdGhlIEZyYW1lIHJlbGF5IGludGVyZmFjZS4KKyAqCisgKiBWZXJzaW9uOglAKCMpaWZfaWZyYWQuaAkwLjIwCTEzIEFwciA5NgorICoKKyAqIEF1dGhvcjoJTWlrZSBNY0xhZ2FuIDxtaWtlLm1jbGFnYW5AbGludXgub3JnPgorICoKKyAqIENoYW5nZXM6CisgKgkJMC4xNQlNaWtlIE1jTGFnYW4JU3RydWN0dXJlIHBhY2tpbmcKKyAqCisgKgkJMC4yMAlNaWtlIE1jTGFnYW4JTmV3IGZsYWdzIGZvciBTNTA4IGJ1ZmZlciBoYW5kbGluZworICoKKyAqCQlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgkJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqCQlhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqCQkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgU0RMQV9ICisjZGVmaW5lIFNETEFfSAorCisvKiBhZGFwdGVyIHR5cGUgKi8KKyNkZWZpbmUgU0RMQV9UWVBFUworI2RlZmluZSBTRExBX1M1MDJBCQkJNTAyMAorI2RlZmluZSBTRExBX1M1MDJFCQkJNTAyMQorI2RlZmluZSBTRExBX1M1MDMJCQk1MDMwCisjZGVmaW5lIFNETEFfUzUwNwkJCTUwNzAKKyNkZWZpbmUgU0RMQV9TNTA4CQkJNTA4MAorI2RlZmluZSBTRExBX1M1MDkJCQk1MDkwCisjZGVmaW5lIFNETEFfVU5LTk9XTgkJCS0xCisKKy8qIHBvcnQgc2VsZWN0aW9uIGZsYWdzIGZvciB0aGUgUzUwOCAqLworI2RlZmluZSBTRExBX1M1MDhfUE9SVF9WMzUJCTB4MDAKKyNkZWZpbmUgU0RMQV9TNTA4X1BPUlRfUlMyMzIJCTB4MDIKKworLyogWjgwIENQVSBzcGVlZHMgKi8KKyNkZWZpbmUgU0RMQV9DUFVfM00JCQkweDAwCisjZGVmaW5lIFNETEFfQ1BVXzVNCQkJMHgwMQorI2RlZmluZSBTRExBX0NQVV83TQkJCTB4MDIKKyNkZWZpbmUgU0RMQV9DUFVfOE0JCQkweDAzCisjZGVmaW5lIFNETEFfQ1BVXzEwTQkJCTB4MDQKKyNkZWZpbmUgU0RMQV9DUFVfMTZNCQkJMHgwNQorI2RlZmluZSBTRExBX0NQVV8xMk0JCQkweDA2CisKKy8qIHNvbWUgcHJpdmF0ZSBJT0NUTHMgKi8KKyNkZWZpbmUgU0RMQV9JREVOVElGWQkJCShGUkFEX0xBU1RfSU9DVEwgKyAxKQorI2RlZmluZSBTRExBX0NQVVNQRUVECQkJKEZSQURfTEFTVF9JT0NUTCArIDIpCisjZGVmaW5lIFNETEFfUFJPVE9DT0wJCQkoRlJBRF9MQVNUX0lPQ1RMICsgMykKKworI2RlZmluZSBTRExBX0NMRUFSTUVNCQkJKEZSQURfTEFTVF9JT0NUTCArIDQpCisjZGVmaW5lIFNETEFfV1JJVEVNRU0JCQkoRlJBRF9MQVNUX0lPQ1RMICsgNSkKKyNkZWZpbmUgU0RMQV9SRUFETUVNCQkJKEZSQURfTEFTVF9JT0NUTCArIDYpCisKK3N0cnVjdCBzZGxhX21lbSB7CisgICBpbnQgIGFkZHI7CisgICBpbnQgIGxlbjsKKyAgIHZvaWQgX191c2VyICpkYXRhOworfTsKKworI2RlZmluZSBTRExBX1NUQVJUCQkJKEZSQURfTEFTVF9JT0NUTCArIDcpCisjZGVmaW5lIFNETEFfU1RPUAkJCShGUkFEX0xBU1RfSU9DVEwgKyA4KQorCisvKiBzb21lIG9mZnNldHMgaW4gdGhlIFo4MCdzIG1lbW9yeSBzcGFjZSAqLworI2RlZmluZSBTRExBX05NSUFERFIJCQkweDAwMDAKKyNkZWZpbmUgU0RMQV9DT05GX0FERFIJCQkweDAwMTAKKyNkZWZpbmUgU0RMQV9TNTAyQV9OTUlBRERSCQkweDAwNjYKKyNkZWZpbmUgU0RMQV9DT0RFX0JBU0VBRERSCQkweDAxMDAKKyNkZWZpbmUgU0RMQV9XSU5ET1dfU0laRQkJMHgyMDAwCisjZGVmaW5lIFNETEFfQUREUl9NQVNLCQkJMHgxRkZGCisKKy8qIGxhcmdlc3QgaGFuZGxlYWJsZSBibG9jayBvZiBkYXRhICovCisjZGVmaW5lIFNETEFfTUFYX0RBVEEJCQk0MDgwCisjZGVmaW5lIFNETEFfTUFYX01UVQkJCTQwNzIJLyogTUFYX0RBVEEgLSBzaXplb2YoZnJhZGhkcikgKi8KKyNkZWZpbmUgU0RMQV9NQVhfRExDSQkJCTI0CisKKy8qIHRoaXMgc2hvdWxkIGJlIHRoZSBzYW1lIGFzIGZyYWRfY29uZiAqLworc3RydWN0IHNkbGFfY29uZiB7CisgICBzaG9ydCBzdGF0aW9uOworICAgc2hvcnQgY29uZmlnOworICAgc2hvcnQga2JhdWQ7CisgICBzaG9ydCBjbG9ja2luZzsKKyAgIHNob3J0IG1heF9mcm07CisgICBzaG9ydCBUMzkxOworICAgc2hvcnQgVDM5MjsKKyAgIHNob3J0IE4zOTE7CisgICBzaG9ydCBOMzkyOworICAgc2hvcnQgTjM5MzsKKyAgIHNob3J0IENJUl9md2Q7CisgICBzaG9ydCBCY19md2Q7CisgICBzaG9ydCBCZV9md2Q7CisgICBzaG9ydCBDSVJfYndkOworICAgc2hvcnQgQmNfYndkOworICAgc2hvcnQgQmVfYndkOworfTsKKworLyogdGhpcyBzaG91bGQgYmUgdGhlIHNhbWUgYXMgZGxjaV9jb25mICovCitzdHJ1Y3Qgc2RsYV9kbGNpX2NvbmYgeworICAgc2hvcnQgY29uZmlnOworICAgc2hvcnQgQ0lSX2Z3ZDsKKyAgIHNob3J0IEJjX2Z3ZDsKKyAgIHNob3J0IEJlX2Z3ZDsKKyAgIHNob3J0IENJUl9id2Q7CisgICBzaG9ydCBCY19id2Q7CisgICBzaG9ydCBCZV9id2Q7IAorICAgc2hvcnQgVGNfZndkOworICAgc2hvcnQgVGNfYndkOworICAgc2hvcnQgVGZfbWF4OworICAgc2hvcnQgVGJfbWF4OworfTsKKworI2lmbmRlZiBfX0tFUk5FTF9fCisKK3ZvaWQgc2RsYSh2b2lkICpjZmdfaW5mbywgY2hhciAqZGV2LCBzdHJ1Y3QgZnJhZF9jb25mICpjb25mLCBpbnQgcXVpZXQpOworCisjZWxzZQorCisvKiBpbXBvcnRhbnQgWjgwIHdpbmRvdyBhZGRyZXNzZXMgKi8KKyNkZWZpbmUgU0RMQV9DT05UUk9MX1dORAkJMHhFMDAwCisKKyNkZWZpbmUgU0RMQV81MDJfQ01EX0JVRgkJMHhFRjYwCisjZGVmaW5lIFNETEFfNTAyX1JDVl9CVUYJCTB4QTkwMAorI2RlZmluZQlTRExBXzUwMl9UWE5fQVZBSUwJCTB4RkZGMQorI2RlZmluZSBTRExBXzUwMl9SQ1ZfQVZBSUwJCTB4RkZGMgorI2RlZmluZSBTRExBXzUwMl9FVkVOVF9GTEFHUwkJMHhGRkYzCisjZGVmaW5lIFNETEFfNTAyX01ETV9TVEFUVVMJCTB4RkZGNAorI2RlZmluZSBTRExBXzUwMl9JUlFfSU5URVJGQUNFCQkweEZGRkQKKyNkZWZpbmUgU0RMQV81MDJfSVJRX1BFUk1JU1NJT04JCTB4RkZGRQorI2RlZmluZSBTRExBXzUwMl9EQVRBX09GUwkJMHgwMDEwCisKKyNkZWZpbmUgU0RMQV81MDhfQ01EX0JVRgkJMHhFMDAwCisjZGVmaW5lIFNETEFfNTA4X1RYQlVGX0lORk8JCTB4RjEwMAorI2RlZmluZSBTRExBXzUwOF9SWEJVRl9JTkZPCQkweEYxMjAKKyNkZWZpbmUgU0RMQV81MDhfRVZFTlRfRkxBR1MJCTB4RjAwMworI2RlZmluZSBTRExBXzUwOF9NRE1fU1RBVFVTCQkweEYwMDQKKyNkZWZpbmUgU0RMQV81MDhfSVJRX0lOVEVSRkFDRQkJMHhGMDEwCisjZGVmaW5lIFNETEFfNTA4X0lSUV9QRVJNSVNTSU9OCQkweEYwMTEKKyNkZWZpbmUgU0RMQV81MDhfVFNFX09GRlNFVAkJMHhGMDEyCisKKy8qIEV2ZW50IGZsYWdzICovCisjZGVmaW5lIFNETEFfRVZFTlRfU1RBVFVTCQkweDAxCisjZGVmaW5lIFNETEFfRVZFTlRfRExDSV9TVEFUVVMJCTB4MDIKKyNkZWZpbmUgU0RMQV9FVkVOVF9CQURfRExDSQkJMHgwNAorI2RlZmluZSBTRExBX0VWRU5UX0xJTktfRE9XTgkJMHg0MAorCisvKiBJUlEgVHJpZ2dlciBmbGFncyAqLworI2RlZmluZSBTRExBX0lOVFJfUlgJCQkweDAxCisjZGVmaW5lIFNETEFfSU5UUl9UWAkJCTB4MDIKKyNkZWZpbmUgU0RMQV9JTlRSX01PREVNCQkJMHgwNAorI2RlZmluZSBTRExBX0lOVFJfQ09NUExFVEUJCTB4MDgKKyNkZWZpbmUgU0RMQV9JTlRSX1NUQVRVUwkJMHgxMAorI2RlZmluZSBTRExBX0lOVFJfVElNRVIJCQkweDIwCisKKy8qIERMQ0kgc3RhdHVzIGJpdHMgKi8KKyNkZWZpbmUgU0RMQV9ETENJX0RFTEVURUQJCTB4MDEKKyNkZWZpbmUgU0RMQV9ETENJX0FDVElWRQkJMHgwMgorI2RlZmluZSBTRExBX0RMQ0lfV0FJVElORwkJMHgwNAorI2RlZmluZSBTRExBX0RMQ0lfTkVXCQkJMHgwOAorI2RlZmluZSBTRExBX0RMQ0lfSU5DTFVERUQJCTB4NDAKKworLyogdmFsaWQgY29tbWFuZCBjb2RlcyAqLworI2RlZmluZQlTRExBX0lORk9STUFUSU9OX1dSSVRFCQkweDAxCisjZGVmaW5lCVNETEFfSU5GT1JNQVRJT05fUkVBRAkJMHgwMgorI2RlZmluZSBTRExBX0lTU1VFX0lOX0NIQU5ORUxfU0lHTkFMCTB4MDMKKyNkZWZpbmUJU0RMQV9TRVRfRExDSV9DT05GSUdVUkFUSU9OCTB4MTAKKyNkZWZpbmUJU0RMQV9SRUFEX0RMQ0lfQ09ORklHVVJBVElPTgkweDExCisjZGVmaW5lCVNETEFfRElTQUJMRV9DT01NVU5JQ0FUSU9OUwkweDEyCisjZGVmaW5lCVNETEFfRU5BQkxFX0NPTU1VTklDQVRJT05TCTB4MTMKKyNkZWZpbmUJU0RMQV9SRUFEX0RMQ19TVEFUVVMJCTB4MTQKKyNkZWZpbmUJU0RMQV9SRUFEX0RMQ19TVEFUSVNUSUNTCTB4MTUKKyNkZWZpbmUJU0RMQV9GTFVTSF9ETENfU1RBVElTVElDUwkweDE2CisjZGVmaW5lCVNETEFfTElTVF9BQ1RJVkVfRExDSQkJMHgxNworI2RlZmluZQlTRExBX0ZMVVNIX0lORk9STUFUSU9OX0JVRkZFUlMJMHgxOAorI2RlZmluZQlTRExBX0FERF9ETENJCQkJMHgyMAorI2RlZmluZQlTRExBX0RFTEVURV9ETENJCQkweDIxCisjZGVmaW5lCVNETEFfQUNUSVZBVEVfRExDSQkJMHgyMgorI2RlZmluZQlTRExBX0RFQUNUSVZBVEVfRExDSQkJMHgyMworI2RlZmluZQlTRExBX1JFQURfTU9ERU1fU1RBVFVTCQkweDMwCisjZGVmaW5lCVNETEFfU0VUX01PREVNX1NUQVRVUwkJMHgzMQorI2RlZmluZQlTRExBX1JFQURfQ09NTVNfRVJSX1NUQVRTCTB4MzIKKyNkZWZpbmUgU0RMQV9GTFVTSF9DT01NU19FUlJfU1RBVFMJMHgzMworI2RlZmluZQlTRExBX1JFQURfQ09ERV9WRVJTSU9OCQkweDQwCisjZGVmaW5lIFNETEFfU0VUX0lSUV9UUklHR0VSCQkweDUwCisjZGVmaW5lIFNETEFfR0VUX0lSUV9UUklHR0VSCQkweDUxCisKKy8qIEluIGNoYW5uZWwgc2lnbmFsIHR5cGVzICovCisjZGVmaW5lIFNETEFfSUNTX0xJTktfVkVSSUZZCQkweDAyCisjZGVmaW5lIFNETEFfSUNTX1NUQVRVU19FTlEJCTB4MDMKKworLyogbW9kZW0gc3RhdHVzIGZsYWdzICovCisjZGVmaW5lIFNETEFfTU9ERU1fRFRSX0hJR0gJCTB4MDEKKyNkZWZpbmUgU0RMQV9NT0RFTV9SVFNfSElHSAkJMHgwMgorI2RlZmluZSBTRExBX01PREVNX0RDRF9ISUdICQkweDA4CisjZGVmaW5lIFNETEFfTU9ERU1fQ1RTX0hJR0gJCTB4MjAKKworLyogdXNlZCBmb3IgUkVUX01PREVNIGludGVycHJldGF0aW9uICovCisjZGVmaW5lIFNETEFfTU9ERU1fRENEX0xPVwkJMHgwMQorI2RlZmluZSBTRExBX01PREVNX0NUU19MT1cJCTB4MDIKKworLyogcmV0dXJuIGNvZGVzICovCisjZGVmaW5lIFNETEFfUkVUX09LCQkJMHgwMAorI2RlZmluZSBTRExBX1JFVF9DT01NVU5JQ0FUSU9OUwkJMHgwMQorI2RlZmluZSBTRExBX1JFVF9DSEFOTkVMX0lOQUNUSVZFCTB4MDIKKyNkZWZpbmUgU0RMQV9SRVRfRExDSV9JTkFDVElWRQkJMHgwMworI2RlZmluZSBTRExBX1JFVF9ETENJX0NPTkZJRwkJMHgwNAorI2RlZmluZSBTRExBX1JFVF9CVUZfVE9PX0JJRwkJMHgwNQorI2RlZmluZSBTRExBX1JFVF9OT19EQVRBCQkweDA1CisjZGVmaW5lIFNETEFfUkVUX0JVRl9PVkVSU0laRQkJMHgwNgorI2RlZmluZSBTRExBX1JFVF9DSVJfT1ZFUkZMT1cJCTB4MDcKKyNkZWZpbmUgU0RMQV9SRVRfTk9fQlVGUwkJMHgwOAorI2RlZmluZSBTRExBX1JFVF9USU1FT1VUCQkweDBBCisjZGVmaW5lIFNETEFfUkVUX01PREVNCQkJMHgxMAorI2RlZmluZSBTRExBX1JFVF9DSEFOTkVMX09GRgkJMHgxMQorI2RlZmluZSBTRExBX1JFVF9DSEFOTkVMX09OCQkweDEyCisjZGVmaW5lIFNETEFfUkVUX0RMQ0lfU1RBVFVTCQkweDEzCisjZGVmaW5lIFNETEFfUkVUX0RMQ0lfVU5LTk9XTiAgICAgICAJMHgxNAorI2RlZmluZSBTRExBX1JFVF9DT01NQU5EX0lOVkFMSUQgICAgCTB4MUYKKworLyogQ29uZmlndXJhdGlvbiBmbGFncyAqLworI2RlZmluZSBTRExBX0RJUkVDVF9SRUNWCQkweDAwODAKKyNkZWZpbmUgU0RMQV9UWF9OT19FWENFUFQJCTB4MDAyMAorI2RlZmluZSBTRExBX05PX0lDRl9NU0dTCQkweDEwMDAKKyNkZWZpbmUgU0RMQV9UWDUwX1JYNTAJCQkweDAwMDAKKyNkZWZpbmUgU0RMQV9UWDcwX1JYMzAJCQkweDIwMDAKKyNkZWZpbmUgU0RMQV9UWDMwX1JYNzAJCQkweDQwMDAKKworLyogSVJRIHNlbGVjdGlvbiBmbGFncyAqLworI2RlZmluZSBTRExBX0lSUV9SRUNFSVZFCQkweDAxCisjZGVmaW5lIFNETEFfSVJRX1RSQU5TTUlUCQkweDAyCisjZGVmaW5lIFNETEFfSVJRX01PREVNX1NUQVQJCTB4MDQKKyNkZWZpbmUgU0RMQV9JUlFfQ09NTUFORAkJMHgwOAorI2RlZmluZSBTRExBX0lSUV9DSEFOTkVMCQkweDEwCisjZGVmaW5lIFNETEFfSVJRX1RJTUVSCQkJMHgyMAorCisvKiBkZWZpbml0aW9ucyBmb3IgUEMgbWVtb3J5IG1hcHBpbmcgKi8KKyNkZWZpbmUgU0RMQV84S19XSU5ET1cJCQkweDAxCisjZGVmaW5lIFNETEFfUzUwMl9TRUdfQQkJCTB4MTAKKyNkZWZpbmUgU0RMQV9TNTAyX1NFR19DCQkJMHgyMAorI2RlZmluZSBTRExBX1M1MDJfU0VHX0QJCQkweDAwCisjZGVmaW5lIFNETEFfUzUwMl9TRUdfRQkJCTB4MzAKKyNkZWZpbmUgU0RMQV9TNTA3X1NFR19BCQkJMHgwMAorI2RlZmluZSBTRExBX1M1MDdfU0VHX0IJCQkweDQwCisjZGVmaW5lIFNETEFfUzUwN19TRUdfQwkJCTB4ODAKKyNkZWZpbmUgU0RMQV9TNTA3X1NFR19FCQkJMHhDMAorI2RlZmluZSBTRExBX1M1MDhfU0VHX0EJCQkweDAwCisjZGVmaW5lIFNETEFfUzUwOF9TRUdfQwkJCTB4MTAKKyNkZWZpbmUgU0RMQV9TNTA4X1NFR19ECQkJMHgwOAorI2RlZmluZSBTRExBX1M1MDhfU0VHX0UJCQkweDE4CisKKy8qIFNETEEgYWRhcHRlciBwb3J0IGNvbnN0YW50cyAqLworI2RlZmluZSBTRExBX0lPX0VYVEVOVFMJCQkweDA0CisJCisjZGVmaW5lIFNETEFfUkVHX0NPTlRST0wJCTB4MDAKKyNkZWZpbmUgU0RMQV9SRUdfUENfV0lORE9XCQkweDAxCS8qIG9mZnNldCBmb3IgUEMgd2luZG93IHNlbGVjdCBsYXRjaCAqLworI2RlZmluZSBTRExBX1JFR19aODBfV0lORE9XIAkJMHgwMgkvKiBvZmZzZXQgZm9yIFo4MCB3aW5kb3cgc2VsZWN0IGxhdGNoICovCisjZGVmaW5lIFNETEFfUkVHX1o4MF9DT05UUk9MCQkweDAzCS8qIG9mZnNldCBmb3IgWjgwIGNvbnRyb2wgbGF0Y2ggKi8KKwkKKyNkZWZpbmUgU0RMQV9TNTAyX1NUUwkJCTB4MDAJLyogc3RhdHVzIHJlZyBmb3IgNTAyLCA1MDJFLCA1MDcgKi8KKyNkZWZpbmUgU0RMQV9TNTA4X0dOUkwJCQkweDAwCS8qIGdlbmVyYWwgcHVycC4gcmVnIGZvciA1MDggKi8KKyNkZWZpbmUgU0RMQV9TNTA4X1NUUwkJCTB4MDEJLyogc3RhdHVzIHJlZyBmb3IgNTA4ICovCisjZGVmaW5lIFNETEFfUzUwOF9JRFIJCQkweDAyCS8qIElEIHJlZyBmb3IgNTA4ICovCisJCisvKiBjb250cm9sIHJlZ2lzdGVyIGZsYWdzICovCisjZGVmaW5lIFNETEFfUzUwMkFfU1RBUlQJCTB4MDAJLyogc3RhcnQgdGhlIENQVSAqLworI2RlZmluZSBTRExBX1M1MDJBX0lOVFJFUQkJMHgwMgorI2RlZmluZSBTRExBX1M1MDJBX0lOVEVOCQkweDA0CisjZGVmaW5lIFNETEFfUzUwMkFfSEFMVAkJCTB4MDgJLyogaGFsdCB0aGUgQ1BVICovCQorI2RlZmluZSBTRExBX1M1MDJBX05NSQkJCTB4MTAJLyogaXNzdWUgYW4gTk1JIHRvIHRoZSBDUFUgKi8KKworI2RlZmluZSBTRExBX1M1MDJFX0NQVUVOCQkweDAxCisjZGVmaW5lIFNETEFfUzUwMkVfRU5BQkxFCQkweDAyCisjZGVmaW5lIFNETEFfUzUwMkVfSU5UQUNLCQkweDA0CisJCisjZGVmaW5lIFNETEFfUzUwN19FTkFCTEUJCTB4MDEKKyNkZWZpbmUgU0RMQV9TNTA3X0lSUTMJCQkweDAwCisjZGVmaW5lIFNETEFfUzUwN19JUlE0CQkJMHgyMAorI2RlZmluZSBTRExBX1M1MDdfSVJRNQkJCTB4NDAKKyNkZWZpbmUgU0RMQV9TNTA3X0lSUTcJCQkweDYwCisjZGVmaW5lIFNETEFfUzUwN19JUlExMAkJCTB4ODAKKyNkZWZpbmUgU0RMQV9TNTA3X0lSUTExCQkJMHhBMAorI2RlZmluZSBTRExBX1M1MDdfSVJRMTIJCQkweEMwCisjZGVmaW5lIFNETEFfUzUwN19JUlExNQkJCTB4RTAKKwkKKyNkZWZpbmUgU0RMQV9IQUxUCQkJMHgwMAorI2RlZmluZSBTRExBX0NQVUVOCQkJMHgwMgorI2RlZmluZSBTRExBX01FTUVOCQkJMHgwNAorI2RlZmluZSBTRExBX1M1MDdfRVBST01XUgkJMHgwOAorI2RlZmluZSBTRExBX1M1MDdfRVBST01DTEsJCTB4MTAKKyNkZWZpbmUgU0RMQV9TNTA4X0lOVFJRCQkJMHgwOAorI2RlZmluZSBTRExBX1M1MDhfSU5URU4JCQkweDEwCisKK3N0cnVjdCBzZGxhX2NtZCB7CisgICBjaGFyICBvcHBfZmxhZwkJX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisgICBjaGFyICBjbWQJCQlfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKyAgIHNob3J0IGxlbmd0aAkJCV9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworICAgY2hhciAgcmV0dmFsCQkJX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisgICBzaG9ydCBkbGNpCQkJX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisgICBjaGFyICBmbGFncwkJCV9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworICAgc2hvcnQgcnhsb3N0X2ludAkJX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisgICBsb25nICByeGxvc3RfYXBwCQlfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKyAgIGNoYXIgIHJlc2VydmVbMl0JCV9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworICAgY2hhciAgZGF0YVtTRExBX01BWF9EQVRBXQlfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsJLyogdHJhbnNmZXIgZGF0YSBidWZmZXIgKi8KK307CisKK3N0cnVjdCBpbnRyX2luZm8geworICAgY2hhciAgZmxhZ3MJCV9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworICAgc2hvcnQgdHhsZW4JCV9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworICAgY2hhciAgaXJxCQlfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKyAgIGNoYXIgIGZsYWdzMgkJX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisgICBzaG9ydCB0aW1lb3V0CV9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfTsKKworLyogZm91bmQgaW4gdGhlIDUwOCdzIGNvbnRyb2wgd2luZG93IGF0IFJYQlVGX0lORk8gKi8KK3N0cnVjdCBidWZfaW5mbyB7CisgICB1bnNpZ25lZCBzaG9ydCByc2VfbnVtCV9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworICAgdW5zaWduZWQgbG9uZyAgcnNlX2Jhc2UJX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisgICB1bnNpZ25lZCBsb25nICByc2VfbmV4dAlfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKyAgIHVuc2lnbmVkIGxvbmcgIGJ1Zl9iYXNlCV9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworICAgdW5zaWduZWQgc2hvcnQgcmVzZXJ2ZWQJX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisgICB1bnNpZ25lZCBsb25nICBidWZfdG9wCV9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfTsKKworLyogc3RydWN0dXJlIHBvaW50ZWQgdG8gYnkgcnNlX2Jhc2UgaW4gUlhCVUZfSU5GTyBzdHJ1Y3QgKi8KK3N0cnVjdCBidWZfZW50cnkgeworICAgY2hhciAgb3BwX2ZsYWcJX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisgICBzaG9ydCBsZW5ndGgJCV9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworICAgc2hvcnQgZGxjaQkJX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisgICBjaGFyICBmbGFncwkJX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisgICBzaG9ydCB0aW1lc3RhbXAJX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisgICBzaG9ydCByZXNlcnZlZFsyXQlfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKyAgIGxvbmcgIGJ1Zl9hZGRyCV9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfTsKKworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZGxhX2FzeS5oIGIvaW5jbHVkZS9saW51eC9zZGxhX2FzeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2MjI0MjUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3NkbGFfYXN5LmgKQEAgLTAsMCArMSwyMjYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBzZGxhX2FzeS5oCUhlYWRlciBmaWxlIGZvciB0aGUgU2FuZ29tYSBTNTA4L1M1MTQgYXN5bmNocm9ub3VzIGNvZGUgQVBJCQorKgorKiBBdXRob3I6IAlHaWRlb24gSGFjayAJCisqCisqIENvcHlyaWdodDoJKGMpIDIwMDAgU2FuZ29tYSBUZWNobm9sb2dpZXMgSW5jLgorKgorKgkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKgkJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyoJCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorKgkJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKgorKiBKYW4gMjgsIDIwMDAJR2lkZW9uIEhhY2sgCUluaXRpYWwgVmVyc2lvbgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfV0FOUElQRV9BU1lOQ19ICisjZGVmaW5lIF9XQU5QSVBFX0FTWU5DX0gKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogICAgICAgICAgICAgICAgICAgICAgICBJbnRlcmZhY2UgY29tbWFuZHMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZSBTRVRfQVNZX0NPTkZJR1VSQVRJT04JCTB4RTIJLyogc2V0IHRoZSBhc3ljaHJvbm91cyBvcGVyYXRpb25hbCBjb25maWd1cmF0aW9uICovCisjZGVmaW5lIFJFQURfQVNZX0NPTkZJR1VSQVRJT04JCTB4RTMJLyogcmVhZCB0aGUgY3VycmVudCBhc3ljaHJvbm91cyBvcGVyYXRpb25hbCBjb25maWd1cmF0aW9uICovCisjZGVmaW5lIEVOQUJMRV9BU1lfQ09NTVVOSUNBVElPTlMJMHhFNAkvKiBlbmFibGUgYXN5Y2hyb25vdXMgY29tbXVuaWNhdGlvbnMgKi8KKyNkZWZpbmUgRElTQUJMRV9BU1lfQ09NTVVOSUNBVElPTlMJMHhFNQkvKiBkaXNhYmxlIGFzeWNocm9ub3VzIGNvbW11bmljYXRpb25zICovCisjZGVmaW5lIFJFQURfQVNZX09QRVJBVElPTkFMX1NUQVRTCTB4RTcJLyogcmV0cmlldmUgdGhlIGFzeWNocm9ub3VzIG9wZXJhdGlvbmFsIHN0YXRpc3RpY3MgKi8KKyNkZWZpbmUgRkxVU0hfQVNZX09QRVJBVElPTkFMX1NUQVRTCTB4RTgJLyogZmx1c2ggdGhlIGFzeWNocm9ub3VzIG9wZXJhdGlvbmFsIHN0YXRpc3RpY3MgKi8KKyNkZWZpbmUgVFJBTlNNSVRfQVNZX0JSRUFLX1NJR05BTAkweEVDCS8qIHRyYW5zbWl0IGFuIGFzeWNocm9ub3VzIGJyZWFrIHNpZ25hbCAqLworCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogICAgICAgICAgICAgICAgICAgICBSZXR1cm4gY29kZXMgZnJvbSBpbnRlcmZhY2UgY29tbWFuZHMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZSBDT01NQU5EX0lOVkFMSURfRk9SX1BPUlQJMHg1MAkvKiB0aGUgY29tbWFuZCBpcyBpbnZhbGlkIGZvciB0aGUgc2VsZWN0ZWQgcG9ydCAqLworI2RlZmluZSBESVNBQkxFX0FTWV9DT01NU19CRUZPUkVfQ0ZHIAkweEUxCS8qIGNvbW11bmljYXRpb25zIG11c3QgYmUgZGlzYWJsZWQgYmVmb3JlIHNldHRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgQVNZX0NPTU1TX0VOQUJMRUQJCTB4RTEJLyogY29tbXVuaWNhdGlvbnMgYXJlIGN1cnJlbnRseSBlbmFibGVkICovCisjZGVmaW5lIEFTWV9DT01NU19ESVNBQkxFRAkJMHhFMQkvKiBjb21tdW5pY2F0aW9ucyBhcmUgY3VycmVudGx5IGRpc2FibGVkICovCisjZGVmaW5lIEFTWV9DRkdfQkVGT1JFX0NPTU1TX0VOQUJMRUQJMHhFMgkvKiBwZXJmb3JtIGEgU0VUX0FTWV9DT05GSUdVUkFUSU9OIGJlZm9yZSBlbmFibGluZyBjb21tcyAqLworI2RlZmluZSBMR1RIX0FTWV9DRkdfREFUQV9JTlZBTElEICAJMHhFMgkvKiB0aGUgbGVuZ3RoIG9mIHRoZSBwYXNzZWQgY29uZmlndXJhdGlvbiBkYXRhIGlzIGludmFsaWQgKi8KKyNkZWZpbmUgSU5WQUxJRF9BU1lfQ0ZHX0RBVEEJCTB4RTMJLyogdGhlIHBhc3NlZCBjb25maWd1cmF0aW9uIGRhdGEgaXMgaW52YWxpZCAqLworI2RlZmluZSBBU1lfQlJFQUtfU0lHTkFMX0JVU1kJCTB4RUMJLyogYSBicmVhayBzaWduYWwgaXMgYmVpbmcgdHJhbnNtaXR0ZWQgKi8KKworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgQ29uc3RhbnRzIGZvciB0aGUgU0VUX0FTWV9DT05GSUdVUkFUSU9OL1JFQURfQVNZX0NPTkZJR1VSQVRJT04gY29tbWFuZAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiB0aGUgYXN5bmNocm9ub3VzIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlICovCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgbG9uZyBiYXVkX3JhdGUJCQlQQUNLRUQ7CQkJCQkJCS8qIHRoZSBiYXVkIHJhdGUgKi8JCisJdW5zaWduZWQgc2hvcnQgbGluZV9jb25maWdfb3B0aW9ucwlQQUNLRUQ7CS8qIGxpbmUgY29uZmlndXJhdGlvbiBvcHRpb25zICovCisJdW5zaWduZWQgc2hvcnQgbW9kZW1fY29uZmlnX29wdGlvbnMJUEFDS0VEOwkvKiBtb2RlbSBjb25maWd1cmF0aW9uIG9wdGlvbnMgKi8KKwl1bnNpZ25lZCBzaG9ydCBhc3lfQVBJX29wdGlvbnMJCVBBQ0tFRDsJLyogYXN5bmNocm9ub3VzIEFQSSBvcHRpb25zICovCisJdW5zaWduZWQgc2hvcnQgYXN5X3Byb3RvY29sX29wdGlvbnMJUEFDS0VEOyAvKiBhc3luY2hyb25vdXMgcHJvdG9jb2wgb3B0aW9ucyAqLworCXVuc2lnbmVkIHNob3J0IFR4X2JpdHNfcGVyX2NoYXIJCVBBQ0tFRDsJLyogbnVtYmVyIG9mIGJpdHMgcGVyIHR4IGNoYXJhY3RlciAqLworCXVuc2lnbmVkIHNob3J0IFJ4X2JpdHNfcGVyX2NoYXIJCVBBQ0tFRDsJLyogbnVtYmVyIG9mIGJpdHMgcGVyIHJlY2VpdmVkIGNoYXJhY3RlciAqLworCXVuc2lnbmVkIHNob3J0IHN0b3BfYml0cwkJUEFDS0VEOwkvKiBudW1iZXIgb2Ygc3RvcCBiaXRzIHBlciBjaGFyYWN0ZXIgKi8KKwl1bnNpZ25lZCBzaG9ydCBwYXJpdHkJCQlQQUNLRUQ7CS8qIHBhcml0eSBkZWZpbml0aW9uICovCisJdW5zaWduZWQgc2hvcnQgYnJlYWtfdGltZXIJCVBBQ0tFRDsJLyogdGhlIGJyZWFrIHNpZ25hbCB0aW1lciAqLworCXVuc2lnbmVkIHNob3J0IGFzeV9SeF9pbnRlcl9jaGFyX3RpbWVyCVBBQ0tFRDsJLyogdGhlIHJlY2VpdmUgaW50ZXItY2hhcmFjdGVyIHRpbWVyICovCisJdW5zaWduZWQgc2hvcnQgYXN5X1J4X2NvbXBsZXRlX2xlbmd0aAlQQUNLRUQ7CS8qIHRoZSByZWNlaXZlICdidWZmZXIgY29tcGxldGUnIGxlbmd0aCAqLworCXVuc2lnbmVkIHNob3J0IFhPTl9jaGFyCQkJUEFDS0VEOwkvKiB0aGUgWE9OIGNoYXJhY3RlciAqLworCXVuc2lnbmVkIHNob3J0IFhPRkZfY2hhcgkJUEFDS0VEOwkvKiB0aGUgWE9GRiBjaGFyYWN0ZXIgKi8KKwl1bnNpZ25lZCBzaG9ydCBhc3lfc3RhdGlzdGljc19vcHRpb25zCVBBQ0tFRDsJLyogYXN5bmMgb3BlcmF0aW9uYWwgc3RhdCBvcHRpb25zICovCisJdW5zaWduZWQgbG9uZyBwdHJfc2hhcmVkX21lbV9pbmZvX3N0cnVjdCAgICBQQUNLRUQ7LyogcHRyIHRvIHRoZSBzaGFyZWQgbWVtb3J5IGFyZWEgaW5mb3JtYXRpb24gc3RydWN0dXJlICovCisJdW5zaWduZWQgbG9uZyBwdHJfYXN5X1R4X3N0YXRfZWxfY2ZnX3N0cnVjdCBQQUNLRUQ7LyogcHRyIHRvIHRoZSB0cmFuc21pdCBzdGF0dXMgZWxlbWVudCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSAqLworCXVuc2lnbmVkIGxvbmcgcHRyX2FzeV9SeF9zdGF0X2VsX2NmZ19zdHJ1Y3QgUEFDS0VEOy8qIHB0ciB0byB0aGUgcmVjZWl2ZSBzdGF0dXMgZWxlbWVudCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSAqLworfSBBU1lfQ09ORklHVVJBVElPTl9TVFJVQ1Q7CisKKy8qIHBlcm1pdHRlZCBtaW5pbXVtIGFuZCBtYXhpbXVtIHZhbHVlcyBmb3Igc2V0dGluZyB0aGUgYXN5bmNocm9ub3VzIGNvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgTUlOX0FTWV9CQVVEX1JBVEUJCTUwCS8qIG1heGltdW0gYmF1ZCByYXRlICovCisjZGVmaW5lIE1BWF9BU1lfQkFVRF9SQVRFCQkyNTAwMDAJLyogbWluaW11bSBiYXVkIHJhdGUgKi8KKyNkZWZpbmUgTUlOX0FTWV9CSVRTX1BFUl9DSEFSCQk1CS8qIG1pbmltdW0gbnVtYmVyIG9mIGJpdHMgcGVyIGNoYXJhY3RlciAqLworI2RlZmluZSBNQVhfQVNZX0JJVFNfUEVSX0NIQVIJCTgJLyogbWF4aW11bSBudW1iZXIgb2YgYml0cyBwZXIgY2hhcmFjdGVyICovCisjZGVmaW5lIE1JTl9CUkVBS19UTVJfVkFMCQkwCS8qIG1pbmltdW0gYnJlYWsgc2lnbmFsIHRpbWVyICovCisjZGVmaW5lIE1BWF9CUkVBS19UTVJfVkFMCQk1MDAwCS8qIG1heGltdW0gYnJlYWsgc2lnbmFsIHRpbWVyICovCisjZGVmaW5lIE1JTl9BU1lfUlhfSU5URVJfQ0hBUl9UTVIJMAkvKiBtaW5pbXVtIHJlY2VpdmUgaW50ZXItY2hhcmFjdGVyIHRpbWVyICovCisjZGVmaW5lIE1BWF9BU1lfUlhfSU5URVJfQ0hBUl9UTVIJMzAwMDAJLyogbWF4aW11bSByZWNlaXZlIGludGVyLWNoYXJhY3RlciB0aW1lciAqLworI2RlZmluZSBNSU5fQVNZX1JYX0NQTFRfTEVOR1RICQkwCS8qIG1pbmltdW0gcmVjZWl2ZSAnbGVuZ3RoIGNvbXBsZXRlJyB2YWx1ZSAqLworI2RlZmluZSBNQVhfQVNZX1JYX0NQTFRfTEVOR1RICQkyMDAwCS8qIG1heGltdW0gcmVjZWl2ZSAnbGVuZ3RoIGNvbXBsZXRlJyB2YWx1ZSAqLworCisvKiBiaXQgc2V0dGluZ3MgZm9yIHRoZSAnYXN5X0FQSV9vcHRpb25zJyAqLworI2RlZmluZSBBU1lfUlhfREFUQV9UUkFOU1BBUkVOVAkJMHgwMDAxCS8qIGRvIG5vdCBzdHJpcCBwYXJpdHkgYW5kIHVudXNlZCBiaXRzIGZyb20gcmVjZWl2ZWQgY2hhcmFjdGVycyAqLworCisvKiBiaXQgc2V0dGluZ3MgZm9yIHRoZSAnYXN5X3Byb3RvY29sX29wdGlvbnMnICovCisjZGVmaW5lIEFTWV9SVFNfSFNfRk9SX1JYCQkweDAwMDEJLyogUlRTIGhhbmRzaGFraW5nIGlzIHVzZWQgZm9yIHJlY2VwdGlvbiBjb250cm9sICovCisjZGVmaW5lIEFTWV9YT05fWE9GRl9IU19GT1JfUlgJCTB4MDAwMgkvKiBYT04vWE9GRiBoYW5kc2hha2luZyBpcyB1c2VkIGZvciByZWNlcHRpb24gY29udHJvbCAqLworI2RlZmluZSBBU1lfWE9OX1hPRkZfSFNfRk9SX1RYCQkweDAwMDQJLyogWE9OL1hPRkYgaGFuZHNoYWtpbmcgaXMgdXNlZCBmb3IgdHJhbnNtaXNzaW9uIGNvbnRyb2wgKi8KKyNkZWZpbmUgQVNZX0RDRF9IU19GT1JfVFgJCTB4MDAwOAkvKiBEQ0QgaGFuZHNoYWtpbmcgaXMgdXNlZCBmb3IgdHJhbnNtaXNzaW9uIGNvbnRyb2wgKi8KKyNkZWZpbmUgQVNZX0NUU19IU19GT1JfVFgJCTB4MDAyMAkvKiBDVFMgaGFuZHNoYWtpbmcgaXMgdXNlZCBmb3IgdHJhbnNtaXNzaW9uIGNvbnRyb2wgKi8KKworLyogYml0IHNldHRpbmdzIGZvciB0aGUgJ3N0b3BfYml0cycgZGVmaW5pdGlvbiAqLworI2RlZmluZSBPTkVfU1RPUF9CSVQJCQkxCQkJLyogcmVwcmVzZW50YXRpb24gZm9yIDEgc3RvcCBiaXQgKi8KKyNkZWZpbmUgVFdPX1NUT1BfQklUUwkJCTIJCQkvKiByZXByZXNlbnRhdGlvbiBmb3IgMiBzdG9wIGJpdHMgKi8KKyNkZWZpbmUgT05FX0FORF9BX0hBTEZfU1RPUF9CSVRTCTMJCQkvKiByZXByZXNlbnRhdGlvbiBmb3IgMS41IHN0b3AgYml0cyAqLworCisvKiBiaXQgc2V0dGluZ3MgZm9yIHRoZSAncGFyaXR5JyBkZWZpbml0aW9uICovCisjZGVmaW5lIE5PX1BBUklUWQkJCTAJCQkvKiByZXByZXNlbnRhdGlvbiBmb3Igbm8gcGFyaXR5ICovCisjZGVmaW5lIE9ERF9QQVJJVFkJCQkxCQkJLyogcmVwcmVzZW50YXRpb24gZm9yIG9kZCBwYXJpdHkgKi8KKyNkZWZpbmUgRVZFTl9QQVJJVFkJCQkyCQkJLyogcmVwcmVzZW50YXRpb24gZm9yIGV2ZW4gcGFyaXR5ICovCisKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgICBDb25zdGFudHMgZm9yIHRoZSBSRUFEX0NPTU1TX0VSUk9SX1NUQVRTIGNvbW1hbmQgKGFzeW5jaHJvbm91cyBtb2RlKQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiB0aGUgY29tbXVuaWNhdGlvbnMgZXJyb3Igc3RhdGlzdGljcyBzdHJ1Y3R1cmUgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydCBSeF9vdmVycnVuX2Vycl9jb3VudCAgIAlQQUNLRUQ7CS8qIHJlY2VpdmVyIG92ZXJydW4gZXJyb3IgY291bnQgKi8KKwl1bnNpZ25lZCBzaG9ydCBSeF9wYXJpdHlfZXJyX2NvdW50CVBBQ0tFRDsJLyogcGFyaXR5IGVycm9ycyByZWNlaXZlZCBjb3VudCAqLworCXVuc2lnbmVkIHNob3J0IFJ4X2ZyYW1pbmdfZXJyX2NvdW50CVBBQ0tFRDsJLyogZnJhbWluZyBlcnJvcnMgcmVjZWl2ZWQgY291bnQgKi8KKwl1bnNpZ25lZCBzaG9ydCBjb21tc19lcnJfc3RhdF9yZXNlcnZlZF8xIFBBQ0tFRDsvKiByZXNlcnZlZCBmb3IgbGF0ZXIgdXNlICovCisJdW5zaWduZWQgc2hvcnQgY29tbXNfZXJyX3N0YXRfcmVzZXJ2ZWRfMiBQQUNLRUQ7LyogcmVzZXJ2ZWQgZm9yIGxhdGVyIHVzZSAqLworCXVuc2lnbmVkIHNob3J0IGNvbW1zX2Vycl9zdGF0X3Jlc2VydmVkXzMgUEFDS0VEOy8qIHJlc2VydmVkIGZvciBsYXRlciB1c2UgKi8KKwl1bnNpZ25lZCBzaG9ydCBjb21tc19lcnJfc3RhdF9yZXNlcnZlZF80IFBBQ0tFRDsvKiByZXNlcnZlZCBmb3IgbGF0ZXIgdXNlICovCisJdW5zaWduZWQgc2hvcnQgY29tbXNfZXJyX3N0YXRfcmVzZXJ2ZWRfNSBQQUNLRUQ7LyogcmVzZXJ2ZWQgZm9yIGxhdGVyIHVzZSAqLworCXVuc2lnbmVkIHNob3J0IERDRF9zdGF0ZV9jaGFuZ2VfY291bnQgCVBBQ0tFRDsJLyogRENEIHN0YXRlIGNoYW5nZSBjb3VudCAqLworCXVuc2lnbmVkIHNob3J0IENUU19zdGF0ZV9jaGFuZ2VfY291bnQJUEFDS0VEOwkvKiBDVFMgc3RhdGUgY2hhbmdlIGNvdW50ICovCit9IEFTWV9DT01NU19FUlJPUl9TVEFUU19TVFJVQ1Q7CisKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgICAgICAgIENvbnN0YW50cyBmb3IgdGhlIFJFQURfQVNZX09QRVJBVElPTkFMX1NUQVRTIGNvbW1hbmQKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogdGhlIGFzeW5jaHJvbm91cyBvcGVyYXRpb25hbCBzdGF0aXN0aWNzIHN0cnVjdHVyZSAqLwordHlwZWRlZiBzdHJ1Y3QgeworCisJLyogRGF0YSB0cmFuc21pc3Npb24gc3RhdGlzdGljcyAqLworCXVuc2lnbmVkIGxvbmcgRGF0YV9ibG9ja3NfVHhfY291bnQgUEFDS0VEOy8qIG51bWJlciBvZiBibG9ja3MgdHJhbnNtaXR0ZWQgKi8KKwl1bnNpZ25lZCBsb25nIERhdGFfYnl0ZXNfVHhfY291bnQgIFBBQ0tFRDsvKiBudW1iZXIgb2YgYnl0ZXMgdHJhbnNtaXR0ZWQgKi8KKwl1bnNpZ25lZCBsb25nIERhdGFfVHhfdGhyb3VnaHB1dCAgIFBBQ0tFRDsvKiB0cmFuc21pdCB0aHJvdWdocHV0ICovCisJdW5zaWduZWQgbG9uZyBub19tc19mb3JfRGF0YV9UeF90aHJ1cHV0X2NvbXAgUEFDS0VEOy8qIG1pbGxpc2Vjb25kIHRpbWUgdXNlZCBmb3IgdGhlIFR4IHRocm91Z2hwdXQgY29tcHV0YXRpb24gKi8KKwl1bnNpZ25lZCBsb25nIFR4X0RhdGFfZGlzY2FyZF9sZ3RoX2Vycl9jb3VudCBQQUNLRUQ7LyogbnVtYmVyIG9mIERhdGEgYmxvY2tzIGRpc2NhcmRlZCAobGVuZ3RoIGVycm9yKSAqLworCXVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfRGF0YV9mcm1fVHhfc3RhdDEgUEFDS0VEOy8qIHJlc2VydmVkIGZvciBsYXRlciB1c2UgKi8KKwl1bnNpZ25lZCBsb25nIHJlc2VydmVkX0RhdGFfZnJtX1R4X3N0YXQyIFBBQ0tFRDsvKiByZXNlcnZlZCBmb3IgbGF0ZXIgdXNlICovCisJdW5zaWduZWQgbG9uZyByZXNlcnZlZF9EYXRhX2ZybV9UeF9zdGF0MyBQQUNLRUQ7LyogcmVzZXJ2ZWQgZm9yIGxhdGVyIHVzZSAqLworCisJLyogRGF0YSByZWNlcHRpb24gc3RhdGlzdGljcyAqLworCXVuc2lnbmVkIGxvbmcgRGF0YV9ibG9ja3NfUnhfY291bnQgUEFDS0VEOy8qIG51bWJlciBvZiBibG9ja3MgcmVjZWl2ZWQgKi8KKwl1bnNpZ25lZCBsb25nIERhdGFfYnl0ZXNfUnhfY291bnQgIFBBQ0tFRDsvKiBudW1iZXIgb2YgYnl0ZXMgcmVjZWl2ZWQgKi8KKwl1bnNpZ25lZCBsb25nIERhdGFfUnhfdGhyb3VnaHB1dCAgIFBBQ0tFRDsvKiByZWNlaXZlIHRocm91Z2hwdXQgKi8KKwl1bnNpZ25lZCBsb25nIG5vX21zX2Zvcl9EYXRhX1J4X3RocnVwdXRfY29tcCBQQUNLRUQ7LyogbWlsbGlzZWNvbmQgdGltZSB1c2VkIGZvciB0aGUgUnggdGhyb3VnaHB1dCBjb21wdXRhdGlvbiAqLworCXVuc2lnbmVkIGxvbmcgUnhfRGF0YV9ieXRlc19kaXNjYXJkX2NvdW50ICAgIFBBQ0tFRDsvKiByZWNlaXZlZCBEYXRhIGJ5dGVzIGRpc2NhcmRlZCAqLworCXVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfRGF0YV9mcm1fUnhfc3RhdDEgICAgIFBBQ0tFRDsvKiByZXNlcnZlZCBmb3IgbGF0ZXIgdXNlICovCisKKwkvKiBoYW5kc2hha2luZyBwcm90b2NvbCBzdGF0aXN0aWNzICovCisJdW5zaWduZWQgc2hvcnQgWE9OX2NoYXJzX1R4X2NvdW50CVBBQ0tFRDsJLyogbnVtYmVyIG9mIFhPTiBjaGFyYWN0ZXJzIHRyYW5zbWl0dGVkICovCisJdW5zaWduZWQgc2hvcnQgWE9GRl9jaGFyc19UeF9jb3VudAlQQUNLRUQ7CS8qIG51bWJlciBvZiBYT0ZGIGNoYXJhY3RlcnMgdHJhbnNtaXR0ZWQgKi8KKwl1bnNpZ25lZCBzaG9ydCBYT05fY2hhcnNfUnhfY291bnQJUEFDS0VEOwkvKiBudW1iZXIgb2YgWE9OIGNoYXJhY3RlcnMgcmVjZWl2ZWQgKi8KKwl1bnNpZ25lZCBzaG9ydCBYT0ZGX2NoYXJzX1J4X2NvdW50CVBBQ0tFRDsJLyogbnVtYmVyIG9mIFhPRkYgY2hhcmFjdGVycyByZWNlaXZlZCAqLworCXVuc2lnbmVkIHNob3J0IFR4X2hhbHRfbW9kZW1fbG93X2NvdW50CVBBQ0tFRDsgLyogbnVtYmVyIG9mIHRpbWVzIFR4IGhhbHRlZCAobW9kZW0gbGluZSBsb3cpICovCisJdW5zaWduZWQgc2hvcnQgUnhfaGFsdF9SVFNfbG93X2NvdW50CVBBQ0tFRDsJLyogbnVtYmVyIG9mIHRpbWVzIFJ4IGhhbHRlZCBieSBzZXR0aW5nIFJUUyBsb3cgKi8KKwl1bnNpZ25lZCBsb25nIHJlc2VydmVkX2hhbmRzaGFraW5nX3N0YXQxIFBBQ0tFRDsvKiByZXNlcnZlZCBmb3IgbGF0ZXIgdXNlICovCisKKwkvKiBicmVhayBzdGF0aXN0aWNzICovCisJdW5zaWduZWQgc2hvcnQgYnJlYWtfVHhfY291bnQJUEFDS0VEOwkvKiBudW1iZXIgb2YgYnJlYWsgc2VxdWVuY2VzIHRyYW5zbWl0dGVkICovCisJdW5zaWduZWQgc2hvcnQgYnJlYWtfUnhfY291bnQJUEFDS0VEOwkvKiBudW1iZXIgb2YgYnJlYWsgc2VxdWVuY2VzIHJlY2VpdmVkICovCisJdW5zaWduZWQgbG9uZyByZXNlcnZlZF9icmVha19zdGF0MSBQQUNLRUQ7LyogcmVzZXJ2ZWQgZm9yIGxhdGVyIHVzZSAqLworCisJLyogbWlzY2VsbGFuZW91cyBzdGF0aXN0aWNzICovCisJdW5zaWduZWQgbG9uZyByZXNlcnZlZF9taXNjX3N0YXQxCVBBQ0tFRDsJLyogcmVzZXJ2ZWQgZm9yIGxhdGVyIHVzZSAqLworCXVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfbWlzY19zdGF0MglQQUNLRUQ7CS8qIHJlc2VydmVkIGZvciBsYXRlciB1c2UgKi8KKworfSBBU1lfT1BFUkFUSU9OQUxfU1RBVFNfU1RSVUNUOworCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogICAgICAgICAgICAgICAgICAgICAgQ29uc3RhbnRzIGZvciBEYXRhIHRyYW5zbWlzc2lvbgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiB0aGUgRGF0YSBibG9jayB0cmFuc21pdCBzdGF0dXMgZWxlbWVudCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSAqLwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIHNob3J0IG51bWJlcl9UeF9zdGF0dXNfZWxlbWVudHMgUEFDS0VEOwkJLyogbnVtYmVyIG9mIHRyYW5zbWl0IHN0YXR1cyBlbGVtZW50cyAqLworCXVuc2lnbmVkIGxvbmcgYmFzZV9hZGRyX1R4X3N0YXR1c19lbGVtZW50cyBQQUNLRUQ7CS8qIGJhc2UgYWRkcmVzcyBvZiB0aGUgdHJhbnNtaXQgZWxlbWVudCBsaXN0ICovCisJdW5zaWduZWQgbG9uZyBuZXh0X1R4X3N0YXR1c19lbGVtZW50X3RvX3VzZSBQQUNLRUQ7CS8qIHBvaW50ZXIgdG8gdGhlIG5leHQgdHJhbnNtaXQgZWxlbWVudCB0byBiZSB1c2VkICovCit9IEFTWV9UWF9TVEFUVVNfRUxfQ0ZHX1NUUlVDVDsKKworCisvKiB0aGUgRGF0YSBibG9jayB0cmFuc21pdCBzdGF0dXMgZWxlbWVudCBzdHJ1Y3R1cmUgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBjaGFyIG9wcF9mbGFnIFBBQ0tFRDsJCQkJCQkJCS8qIG9wcCBmbGFnICovCisJdW5zaWduZWQgc2hvcnQgZGF0YV9sZW5ndGggUEFDS0VEOwkJCQkJCS8qIGxlbmd0aCBvZiB0aGUgYmxvY2sgdG8gYmUgdHJhbnNtaXR0ZWQgKi8KKwl1bnNpZ25lZCBjaGFyIHJlc2VydmVkXzEgUEFDS0VEOwkJCQkJCQkvKiByZXNlcnZlZCBmb3IgaW50ZXJuYWwgdXNlICovCisJdW5zaWduZWQgbG9uZyByZXNlcnZlZF8yIFBBQ0tFRDsJCQkJCQkJLyogcmVzZXJ2ZWQgZm9yIGludGVybmFsIHVzZSAqLworCXVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfMyBQQUNLRUQ7CQkJCQkJCS8qIHJlc2VydmVkIGZvciBpbnRlcm5hbCB1c2UgKi8KKwl1bnNpZ25lZCBsb25nIHB0cl9kYXRhX2JmciBQQUNLRUQ7CQkJCQkJLyogcG9pbnRlciB0byB0aGUgZGF0YSBhcmVhICovCit9IEFTWV9EQVRBX1RYX1NUQVRVU19FTF9TVFJVQ1Q7CisKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgICAgICAgICAgICAgICAgICAgICBDb25zdGFudHMgZm9yIERhdGEgcmVjZXB0aW9uCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIHRoZSBEYXRhIGJsb2NrIHJlY2VpdmUgc3RhdHVzIGVsZW1lbnQgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydCBudW1iZXJfUnhfc3RhdHVzX2VsZW1lbnRzICAgIFBBQ0tFRDsvKiBudW1iZXIgb2YgcmVjZWl2ZSBzdGF0dXMgZWxlbWVudHMgKi8KKwl1bnNpZ25lZCBsb25nIGJhc2VfYWRkcl9SeF9zdGF0dXNfZWxlbWVudHMgIFBBQ0tFRDsvKiBiYXNlIGFkZHJlc3Mgb2YgdGhlIHJlY2VpdmUgZWxlbWVudCBsaXN0ICovCisJdW5zaWduZWQgbG9uZyBuZXh0X1J4X3N0YXR1c19lbGVtZW50X3RvX3VzZSBQQUNLRUQ7LyogcG9pbnRlciB0byB0aGUgbmV4dCByZWNlaXZlIGVsZW1lbnQgdG8gYmUgdXNlZCAqLworCXVuc2lnbmVkIGxvbmcgYmFzZV9hZGRyX1J4X2J1ZmZlcglQQUNLRUQ7LyogYmFzZSBhZGRyZXNzIG9mIHRoZSByZWNlaXZlIGRhdGEgYnVmZmVyICovCisJdW5zaWduZWQgbG9uZyBlbmRfYWRkcl9SeF9idWZmZXIgCVBBQ0tFRDsvKiBlbmQgYWRkcmVzcyBvZiB0aGUgcmVjZWl2ZSBkYXRhIGJ1ZmZlciAqLworfSBBU1lfUlhfU1RBVFVTX0VMX0NGR19TVFJVQ1Q7CisKKy8qIHRoZSBEYXRhIGJsb2NrIHJlY2VpdmUgc3RhdHVzIGVsZW1lbnQgc3RydWN0dXJlICovCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgY2hhciBvcHBfZmxhZyAJCVBBQ0tFRDsJLyogb3BwIGZsYWcgKi8KKwl1bnNpZ25lZCBzaG9ydCBkYXRhX2xlbmd0aCAJUEFDS0VEOwkvKiBsZW5ndGggb2YgdGhlIHJlY2VpdmVkIGRhdGEgYmxvY2sgKi8KKwl1bnNpZ25lZCBjaGFyIHJlc2VydmVkXzEgCVBBQ0tFRDsJLyogcmVzZXJ2ZWQgZm9yIGludGVybmFsIHVzZSAqLworCXVuc2lnbmVkIHNob3J0IHRpbWVfc3RhbXAgCVBBQ0tFRDsgLyogcmVjZWl2ZSB0aW1lIHN0YW1wIChIRExDX1NUUkVBTUlOR19NT0RFKSAqLworCXVuc2lnbmVkIHNob3J0IGRhdGFfYnVmZmVyZWQgCVBBQ0tFRDsJLyogdGhlIG51bWJlciBvZiBkYXRhIGJ5dGVzIHN0aWxsIGJ1ZmZlcmVkICovCisJdW5zaWduZWQgbG9uZyByZXNlcnZlZF8yIAlQQUNLRUQ7CS8qIHJlc2VydmVkIGZvciBpbnRlcm5hbCB1c2UgKi8KKwl1bnNpZ25lZCBsb25nIHB0cl9kYXRhX2JmciAJUEFDS0VEOwkvKiBwb2ludGVyIHRvIHRoZSBkYXRhIGFyZWEgKi8KK30gQVNZX0RBVEFfUlhfU1RBVFVTX0VMX1NUUlVDVDsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NkbGFfY2hkbGMuaCBiL2luY2x1ZGUvbGludXgvc2RsYV9jaGRsYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyZTM1YTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3NkbGFfY2hkbGMuaApAQCAtMCwwICsxLDgxMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBzZGxhX2NoZGxjLmgJU2FuZ29tYSBDaXNjbyBIRExDIGZpcm13YXJlIEFQSSBkZWZpbml0aW9ucworCisgQXV0aG9yOiAgICAgIAlHaWRlb24gSGFjaworCQlOZW5hZCBDb3JiaWMgPG5jb3JiaWNAc2FuZ29tYS5jb20+CQorCisgQ29weXJpZ2h0OgkoYykgMTk5NS0yMDAwIFNhbmdvbWEgVGVjaG5vbG9naWVzIEluYy4KKworCQlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisJCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKwkJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisJCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBPY3QgMDQsIDE5OTkgIE5lbmFkIENvcmJpYyAgICBVcGRhdGVkIEFQSSBzdXBwb3J0CisgIEp1biAwMiwgMTk5OSAgR2lkZW9uIEhhY2sgICAgIENoYW5nZXMgZm9yIFM1MTQgdXNhZ2UuCisgIE9jdCAyOCwgMTk5OAlKYXNwcmVldCBTaW5naAlNYWRlIGNoYW5nZXMgZm9yIER1YWwgUG9ydCBDSERMQy4KKyAgSnVuIDExLCAxOTk4CURhdmlkIEZvbmcJSW5pdGlhbCB2ZXJzaW9uLgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyBPcmdhbml6YXRpb24KKwktIENvbXBhdGliaWxpdHkgbm90ZXMKKwktIENvbnN0YW50cyBkZWZpbmluZyB0aGUgc2hhcmVkIG1lbW9yeSBjb250cm9sIGJsb2NrIChtYWlsYm94KQorCS0gSW50ZXJmYWNlIGNvbW1hbmRzCisJLSBSZXR1cm4gY29kZSBmcm9tIGludGVyZmFjZSBjb21tYW5kcworCS0gQ29uc3RhbnRzIGZvciB0aGUgY29tbWFuZHMgKHN0cnVjdHVyZXMgZm9yIGNhc3RpbmcgZGF0YSkKKwktIFVEUCBNYW5hZ2VtZW50IGNvbnN0YW50cyBhbmQgc3RydWN0dXJlcworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9TRExBX0NIRExDX0gKKyMgIGRlZmluZSBfU0RMQ19DSERMQ19ICisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBOb3RlczoKKworCUFsbCBzdHJ1Y3RyZXMgZGVmaW5lZCBpbiB0aGlzIGZpbGUgYXJlIGJ5dGUtYWxpZ25lZC4gIAorCisJQ29tcGlsZXIJUGxhdGZvcm0KKwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlHTlUgQwkJTGludXgKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmbmRlZglQQUNLRUQKKyNkZWZpbmUJUEFDS0VEIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpCisjZW5kaWYJLyogUEFDS0VEICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogICAgICAgIENvbnN0YW50cyBkZWZpbmluZyB0aGUgc2hhcmVkIG1lbW9yeSBjb250cm9sIGJsb2NrIChtYWlsYm94KQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZGVmaW5lIFBSSV9CQVNFX0FERFJfTUJfU1RSVUNUIAkweEUwMDAgCS8qIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIG1haWxib3ggc3RydWN0dXJlIG9uIHRoZSBhZGFwdGVyICovCisjZGVmaW5lIFNFQ19CQVNFX0FERFJfTUJfU1RSVUNUIAkweEU4MDAgCS8qIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIG1haWxib3ggc3RydWN0dXJlIG9uIHRoZSBhZGFwdGVyICovCisjZGVmaW5lIFNJWkVPRl9NQl9EQVRBX0JGUgkJMjAzMgkvKiB0aGUgc2l6ZSBvZiB0aGUgYWN0dWFsIG1haWxib3ggZGF0YSBhcmVhICovCisjZGVmaW5lIE5VTUJFUl9NQl9SRVNFUlZFRF9CWVRFUwkweDBCCS8qIHRoZSBudW1iZXIgb2YgcmVzZXJ2ZWQgYnl0ZXMgaW4gdGhlIG1haWxib3ggaGVhZGVyIGFyZWEgKi8KKworCisjZGVmaW5lIE1JTl9MR1RIX0NIRExDX0RBVEFfQ0ZHICAJMzAwIAkvKiBtaW4gbGVuZ3RoIG9mIHRoZSBDSERMQyBkYXRhIGZpZWxkIChmb3IgY29uZmlndXJhdGlvbiBwdXJwb3NlcykgKi8KKyNkZWZpbmUgUFJJX01BWF9OT19EQVRBX0JZVEVTX0lOX0ZSQU1FICAxNTM1NCAvKiBQUklNQVJZIC0gbWF4IGxlbmd0aCBvZiB0aGUgQ0hETEMgZGF0YSBmaWVsZCAqLworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgY2hhciBvcHBfZmxhZyBQQUNLRUQ7CQkJLyogdGhlIG9wcCBmbGFnICovCisJdW5zaWduZWQgY2hhciBjb21tYW5kIFBBQ0tFRDsJCQkvKiB0aGUgdXNlciBjb21tYW5kICovCisJdW5zaWduZWQgc2hvcnQgYnVmZmVyX2xlbmd0aCBQQUNLRUQ7CQkvKiB0aGUgZGF0YSBsZW5ndGggKi8KKyAgCXVuc2lnbmVkIGNoYXIgcmV0dXJuX2NvZGUgUEFDS0VEOwkJLyogdGhlIHJldHVybiBjb2RlICovCisJdW5zaWduZWQgY2hhciBNQl9yZXNlcnZlZFtOVU1CRVJfTUJfUkVTRVJWRURfQllURVNdIFBBQ0tFRDsJLyogcmVzZXJ2ZWQgZm9yIGxhdGVyICovCisJdW5zaWduZWQgY2hhciBkYXRhW1NJWkVPRl9NQl9EQVRBX0JGUl0gUEFDS0VEOwkvKiB0aGUgZGF0YSBhcmVhICovCit9IENIRExDX01BSUxCT1hfU1RSVUNUOworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgICAgIHBpZF90ICAgICAgICAgICAgICAgICAgIHBpZF9udW0gUEFDS0VEOworICAgICAgICBDSERMQ19NQUlMQk9YX1NUUlVDVCAgICAgY21kYXJlYSBQQUNLRUQ7CisKK30gQ01EQkxPQ0tfU1RSVUNUOworCisKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgICAgICAgICAgICAgICAgICAgICAgIEludGVyZmFjZSBjb21tYW5kcworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBnbG9iYWwgaW50ZXJmYWNlIGNvbW1hbmRzICovCisjZGVmaW5lIFJFQURfR0xPQkFMX0VYQ0VQVElPTl9DT05ESVRJT04JMHgwMQorI2RlZmluZSBTRVRfR0xPQkFMX0NPTkZJR1VSQVRJT04JMHgwMgorI2RlZmluZSBSRUFEX0dMT0JBTF9DT05GSUdVUkFUSU9OCTB4MDMKKyNkZWZpbmUgUkVBRF9HTE9CQUxfU1RBVElTVElDUwkJMHgwNAorI2RlZmluZSBGTFVTSF9HTE9CQUxfU1RBVElTVElDUwkJMHgwNQorI2RlZmluZSBTRVRfTU9ERU1fU1RBVFVTCQkweDA2CS8qIHNldCBzdGF0dXMgb2YgRFRSIG9yIFJUUyAqLworI2RlZmluZSBSRUFEX01PREVNX1NUQVRVUwkJMHgwNwkvKiByZWFkIHN0YXR1cyBvZiBDVFMgYW5kIERDRCAqLworI2RlZmluZSBSRUFEX0NPTU1TX0VSUk9SX1NUQVRTCQkweDA4CQorI2RlZmluZSBGTFVTSF9DT01NU19FUlJPUl9TVEFUUwkJMHgwOQorI2RlZmluZSBTRVRfVFJBQ0VfQ09ORklHVVJBVElPTgkJMHgwQQkvKiBzZXQgdGhlIGxpbmUgdHJhY2UgY29uZmlnICovCisjZGVmaW5lIFJFQURfVFJBQ0VfQ09ORklHVVJBVElPTgkweDBCCS8qIHJlYWQgdGhlIGxpbmUgdHJhY2UgY29uZmlnICovCisjZGVmaW5lIFJFQURfVFJBQ0VfU1RBVElTVElDUwkJMHgwQwkvKiByZWFkIHRoZSB0cmFjZSBzdGF0aXN0aWNzICovCisjZGVmaW5lIEZMVVNIX1RSQUNFX1NUQVRJU1RJQ1MJCTB4MEQJLyogZmx1c2ggdGhlIHRyYWNlIHN0YXRpc3RpY3MgKi8KKyNkZWZpbmUgRlQxX01PTklUT1JfU1RBVFVTX0NUUkwJCTB4MUMJLyogc2V0IHRoZSBzdGF0dXMgb2YgdGhlIFM1MDgvRlQxIG1vbml0b3JpbmcgKi8KKyNkZWZpbmUgU0VUX0ZUMV9DT05GSUdVUkFUSU9OCQkweDE4CS8qIHNldCB0aGUgRlQxIGNvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgUkVBRF9GVDFfQ09ORklHVVJBVElPTgkJMHgxOQkvKiByZWFkIHRoZSBGVDEgY29uZmlndXJhdGlvbiAqLworI2RlZmluZSBUUkFOU01JVF9BU1lOQ19EQVRBX1RPX0ZUMQkweDFBCS8qIG91dHB1dCBhc3luY2hyb25vdXMgZGF0YSB0byB0aGUgRlQxICovCisjZGVmaW5lIFJFQ0VJVkVfQVNZTkNfREFUQV9GUk9NX0ZUMQkweDFCCS8qIHJlY2VpdmUgYXN5bmNocm9ub3VzIGRhdGEgZnJvbSB0aGUgRlQxICovCisjZGVmaW5lIEZUMV9NT05JVE9SX1NUQVRVU19DVFJMCQkweDFDCS8qIHNldCB0aGUgc3RhdHVzIG9mIHRoZSBGVDEgbW9uaXRvcmluZyAqLworCisjZGVmaW5lIFJFQURfRlQxX09QRVJBVElPTkFMX1NUQVRTCTB4MUQJLyogcmVhZCB0aGUgUzUwOC9GVDEgb3BlcmF0aW9uYWwgc3RhdGlzdGljcyAqLworI2RlZmluZSBTRVRfRlQxX01PREUJCQkweDFFCS8qIHNldCB0aGUgb3BlcmF0aW9uYWwgbW9kZSBvZiB0aGUgUzUwOC9GVDEgbW9kdWxlICovCisKKy8qIENIRExDLWxldmVsIGludGVyZmFjZSBjb21tYW5kcyAqLworI2RlZmluZSBSRUFEX0NIRExDX0NPREVfVkVSU0lPTgkJMHgyMAkKKyNkZWZpbmUgUkVBRF9DSERMQ19FWENFUFRJT05fQ09ORElUSU9OCTB4MjEJLyogcmVhZCBleGNlcHRpb24gY29uZGl0aW9uIGZyb20gdGhlIGFkYXB0ZXIgKi8KKyNkZWZpbmUgU0VUX0NIRExDX0NPTkZJR1VSQVRJT04JCTB4MjIKKyNkZWZpbmUgUkVBRF9DSERMQ19DT05GSUdVUkFUSU9OCTB4MjMKKyNkZWZpbmUgRU5BQkxFX0NIRExDX0NPTU1VTklDQVRJT05TCTB4MjQKKyNkZWZpbmUgRElTQUJMRV9DSERMQ19DT01NVU5JQ0FUSU9OUwkweDI1CisjZGVmaW5lIFJFQURfQ0hETENfTElOS19TVEFUVVMJCTB4MjYKKyNkZWZpbmUgUkVBRF9DSERMQ19PUEVSQVRJT05BTF9TVEFUUwkweDI3CisjZGVmaW5lIEZMVVNIX0NIRExDX09QRVJBVElPTkFMX1NUQVRTCTB4MjgKKyNkZWZpbmUgU0VUX0NIRExDX0lOVEVSUlVQVF9UUklHR0VSUwkweDMwCS8qIHNldCBhcHBsaWNhdGlvbiBpbnRlcnJ1cHQgdHJpZ2dlcnMgKi8KKyNkZWZpbmUgUkVBRF9DSERMQ19JTlRFUlJVUFRfVFJJR0dFUlMJMHgzMQkvKiByZWFkIGFwcGxpY2F0aW9uIGludGVycnVwdCB0cmlnZ2VyIGNvbmZpZ3VyYXRpb24gKi8KKworLyogU3BlY2lhbCBVRFAgZHJpdmVycyBtYW5hZ2VtZW50IGNvbW1hbmRzICovCisjZGVmaW5lIENQSVBFX0VOQUJMRV9UUkFDSU5HCQkJCTB4NTAKKyNkZWZpbmUgQ1BJUEVfRElTQUJMRV9UUkFDSU5HCQkJCTB4NTEKKyNkZWZpbmUgQ1BJUEVfR0VUX1RSQUNFX0lORk8JCQkJMHg1MgorI2RlZmluZSBDUElQRV9HRVRfSUJBX0RBVEEJCQkJMHg1MworI2RlZmluZSBDUElQRV9GVDFfUkVBRF9TVEFUVVMJCQkJMHg1NAorI2RlZmluZSBDUElQRV9EUklWRVJfU1RBVF9JRlNFTkQJCQkweDU1CisjZGVmaW5lIENQSVBFX0RSSVZFUl9TVEFUX0lOVFIJCQkJMHg1NgorI2RlZmluZSBDUElQRV9EUklWRVJfU1RBVF9HRU4JCQkJMHg1NworI2RlZmluZSBDUElQRV9GTFVTSF9EUklWRVJfU1RBVFMJCQkweDU4CisjZGVmaW5lIENQSVBFX1JPVVRFUl9VUF9USU1FCQkJCTB4NTkKKworLyogRHJpdmVyIHNwZWNpZmljIGNvbW1hbmRzIGZvciBBUEkgKi8KKyNkZWZpbmUJQ0hETENfUkVBRF9UUkFDRV9EQVRBCQkweEU0CS8qIHJlYWQgdHJhY2UgZGF0YSAqLworI2RlZmluZSBUUkFDRV9BTEwgICAgICAgICAgICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgVFJBQ0VfUFJPVAkJCTB4MDEKKyNkZWZpbmUgVFJBQ0VfREFUQQkJCTB4MDIKKworI2RlZmluZSBESVNDQVJEX1JYX0VSUk9SX0ZSQU1FUwkweDAwMDEKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogICAgICAgICAgICAgICAgICAgICBSZXR1cm4gY29kZXMgZnJvbSBpbnRlcmZhY2UgY29tbWFuZHMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZSBDT01NQU5EX09LCQkJCTB4MDAKKworLyogcmV0dXJuIGNvZGVzIGZyb20gZ2xvYmFsIGludGVyZmFjZSBjb21tYW5kcyAqLworI2RlZmluZSBOT19HTE9CQUxfRVhDRVBfQ09ORF9UT19SRVBPUlQJCTB4MDEJLyogdGhlcmUgaXMgbm8gQ0hETEMgZXhjZXB0aW9uIGNvbmRpdGlvbiB0byByZXBvcnQgKi8KKyNkZWZpbmUgTEdUSF9HTE9CQUxfQ0ZHX0RBVEFfSU5WQUxJRAkJMHgwMQkvKiB0aGUgbGVuZ3RoIG9mIHRoZSBwYXNzZWQgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gZGF0YSBpcyBpbnZhbGlkICovCisjZGVmaW5lIExHVEhfVFJBQ0VfQ0ZHX0RBVEFfSU5WQUxJRAkJMHgwMQkvKiB0aGUgbGVuZ3RoIG9mIHRoZSBwYXNzZWQgdHJhY2UgY29uZmlndXJhdGlvbiBkYXRhIGlzIGludmFsaWQgKi8KKyNkZWZpbmUgSVJRX1RJTUVPVVRfVkFMVUVfSU5WQUxJRAkJMHgwMgkvKiBhbiBpbnZhbGlkIGFwcGxpY2F0aW9uIElSUSB0aW1lb3V0IHZhbHVlIHdhcyBzZWxlY3RlZCAqLworI2RlZmluZSBUUkFDRV9DT05GSUdfSU5WQUxJRAkJCTB4MDIJLyogdGhlIHBhc3NlZCBsaW5lIHRyYWNlIGNvbmZpZ3VyYXRpb24gaXMgaW52YWxpZCAqLworI2RlZmluZSBBREFQVEVSX09QRVJBVElOR19GUkVRX0lOVkFMSUQJCTB4MDMJLyogYW4gaW52YWxpZCBhZGFwdGVyIG9wZXJhdGluZyBmcmVxdWVuY3kgd2FzIHNlbGVjdGVkICovCisjZGVmaW5lIFRSQ19ERUFDX1RNUl9JTlZBTElECQkJMHgwMwkvKiB0aGUgdHJhY2UgZGVhY3RpdmF0aW9uIHRpbWVyIGlzIGludmFsaWQgKi8KKyNkZWZpbmUgUzUwOF9GVDFfQURQVFJfTk9UX1BSRVNFTlQJCTB4MEMJLyogdGhlIFM1MDgvRlQxIGFkYXB0ZXIgaXMgbm90IHByZXNlbnQgKi8KKyNkZWZpbmUgSU5WQUxJRF9GVDFfU1RBVFVTX1NFTEVDVElPTiAgICAgICAgICAgIDB4MEQgICAgLyogdGhlIFM1MDgvRlQxIHN0YXR1cyBzZWxlY3Rpb24gaXMgaW52YWxpZCAqLworI2RlZmluZSBGVDFfT1BfU1RBVFNfTk9UX0VOQUJMRUQJCTB4MEQgICAgLyogdGhlIEZUMSBvcGVyYXRpb25hbCBzdGF0aXN0aWNzIGhhdmUgbm90IGJlZW4gZW5hYmxlZCAqLworI2RlZmluZSBGVDFfT1BfU1RBVFNfTk9UX0FWQUlMQUJMRQkJMHgwRSAgICAvKiB0aGUgRlQxIG9wZXJhdGlvbmFsIHN0YXRpc3RpY3MgYXJlIG5vdCBjdXJyZW50bHkgYXZhaWxhYmxlICovCisjZGVmaW5lIFM1MDhfRlQxX01PREVfU0VMRUNUSU9OX0JVU1kJCTB4MEUJLyogdGhlIFM1MDgvRlQxIGFkYXB0ZXIgaXMgYnVzeSBzZWxlY3RpbmcgdGhlIG9wZXJhdGlvbmFsIG1vZGUgKi8KKworLyogcmV0dXJuIGNvZGVzIGZyb20gY29tbWFuZCBSRUFEX0dMT0JBTF9FWENFUFRJT05fQ09ORElUSU9OICovCisjZGVmaW5lIEVYQ0VQX01PREVNX1NUQVRVU19DSEFOR0UJCTB4MTAJCS8qIGEgbW9kZW0gc3RhdHVzIGNoYW5nZSBvY2N1cnJlZCAqLworI2RlZmluZSBFWENFUF9UUkNfRElTQUJMRUQJCQkweDExCQkvKiB0aGUgdHJhY2UgaGFzIGJlZW4gZGlzYWJsZWQgKi8KKyNkZWZpbmUgRVhDRVBfSVJRX1RJTUVPVVQJCQkweDEyCQkvKiBJUlEgdGltZW91dCAqLworCisvKiByZXR1cm4gY29kZXMgZnJvbSBDSERMQy1sZXZlbCBpbnRlcmZhY2UgY29tbWFuZHMgKi8KKyNkZWZpbmUgTk9fQ0hETENfRVhDRVBfQ09ORF9UT19SRVBPUlQJCTB4MjEJLyogdGhlcmUgaXMgbm8gQ0hETEMgZXhjZXB0aW9uIGNvbmRpdGlvbiB0byByZXBvcnQgKi8KKyNkZWZpbmUgQ0hETENfQ09NTVNfRElTQUJMRUQJCQkweDIxCS8qIGNvbW11bmljYXRpb25zIGFyZSBub3QgY3VycmVudGx5IGVuYWJsZWQgKi8KKyNkZWZpbmUgQ0hETENfQ09NTVNfRU5BQkxFRAkJCTB4MjEJLyogY29tbXVuaWNhdGlvbnMgYXJlIGN1cnJlbnRseSBlbmFibGVkICovCisjZGVmaW5lIERJU0FCTEVfQ0hETENfQ09NTVNfQkVGT1JFX0NGRwkJMHgyMQkvKiBDSERMQyBjb21tdW5pY2F0aW9ucyBtdXN0IGJlIGRpc2FibGVkIGJlZm9yZSBzZXR0aW5nIHRoZSBjb25maWd1cmF0aW9uICovCisjZGVmaW5lIEVOQUJMRV9DSERMQ19DT01NU19CRUZPUkVfQ09OTgkJMHgyMQkvKiBjb21tdW5pY2F0aW9ucyBtdXN0IGJlIGVuYWJsZWQgYmVmb3JlIHVzaW5nIHRoZSBDSERMQ19DT05ORUNUIGNvbm1tYW5kICovCisjZGVmaW5lIENIRExDX0NGR19CRUZPUkVfQ09NTVNfRU5BQkxFRAkJMHgyMgkvKiBwZXJmb3JtIGEgU0VUX0NIRExDX0NPTkZJR1VSQVRJT04gYmVmb3JlIGVuYWJsaW5nIGNvbW1zICovCisjZGVmaW5lIExHVEhfQ0hETENfQ0ZHX0RBVEFfSU5WQUxJRCAJCTB4MjIJLyogdGhlIGxlbmd0aCBvZiB0aGUgcGFzc2VkIENIRExDIGNvbmZpZ3VyYXRpb24gZGF0YSBpcyBpbnZhbGlkICovCisjZGVmaW5lIExHVEhfSU5UX1RSSUdHRVJTX0RBVEFfSU5WQUxJRAkJMHgyMgkvKiB0aGUgbGVuZ3RoIG9mIHRoZSBwYXNzZWQgaW50ZXJydXB0IHRyaWdnZXIgZGF0YSBpcyBpbnZhbGlkICovCisjZGVmaW5lIElOVkFMSURfSVJRX1NFTEVDVEVECQkJMHgyMwkvKiBpbiBpbnZhbGlkIElSUSB3YXMgc2VsZWN0ZWQgaW4gdGhlIFNFVF9DSERMQ19JTlRFUlJVUFRfVFJJR0dFUlMgKi8KKyNkZWZpbmUgSU5WQUxJRF9DSERMQ19DRkdfREFUQQkJCTB4MjMJLyogdGhlIHBhc3NlZCBDSERMQyBjb25maWd1cmF0aW9uIGRhdGEgaXMgaW52YWxpZCAqLworI2RlZmluZSBJUlFfVE1SX1ZBTFVFX0lOVkFMSUQJCQkweDI0CS8qIGFuIGludmFsaWQgYXBwbGljYXRpb24gSVJRIHRpbWVyIHZhbHVlIHdhcyBzZWxlY3RlZCAqLworI2RlZmluZSBMQVJHRVJfUEVSQ0VOVF9UWF9CRlJfUkVRVUlSRUQJCTB4MjQJLyogYSBsYXJnZXIgVHggYnVmZmVyIHBlcmNlbnRhZ2UgaXMgcmVxdWlyZWQgKi8KKyNkZWZpbmUgTEFSR0VSX1BFUkNFTlRfUlhfQkZSX1JFUVVJUkVECQkweDI1CS8qIGEgbGFyZ2VyIFJ4IGJ1ZmZlciBwZXJjZW50YWdlIGlzIHJlcXVpcmVkICovCisjZGVmaW5lIFM1MTRfQk9USF9QT1JUU19TQU1FX0NMS19NT0RFCQkweDI2CS8qIFM1MTQgLSBib3RoIHBvcnRzIG11c3QgaGF2ZSBzYW1lIGNsb2NrIG1vZGUgKi8KKyNkZWZpbmUgSU5WQUxJRF9DTU5EX0hETENfU1RSRUFNX01PREUgICAgICAgICAgIDB4NEUgICAgLyogdGhlIENIRExDIGludGVyZmFjZSBjb21tYW5kIGlzIGludmFsaWQgZm9yIEhETEMgc3RyZWFtaW5nIG1vZGUgKi8KKyNkZWZpbmUgSU5WQUxJRF9DSERMQ19DT01NQU5ECQkJMHg0RgkvKiB0aGUgZGVmaW5lZCBDSERMQyBpbnRlcmZhY2UgY29tbWFuZCBpcyBpbnZhbGlkICovCisKKy8qIHJldHVybiBjb2RlcyBmcm9tIGNvbW1hbmQgUkVBRF9DSERMQ19FWENFUFRJT05fQ09ORElUSU9OICovCisjZGVmaW5lIEVYQ0VQX0xJTktfQUNUSVZFCQkJMHgzMAkvKiB0aGUgQ0hETEMgbGluayBoYXMgYmVjb21lIGFjdGl2ZSAqLworI2RlZmluZSBFWENFUF9MSU5LX0lOQUNUSVZFX01PREVNCQkweDMxCS8qIHRoZSBDSERMQyBsaW5rIGhhcyBiZWNvbWUgaW5hY3RpdmUgKG1vZGVtIHN0YXR1cykgKi8KKyNkZWZpbmUgRVhDRVBfTElOS19JTkFDVElWRV9LUEFMVgkJMHgzMgkvKiB0aGUgQ0hETEMgbGluayBoYXMgYmVjb21lIGluYWN0aXZlIChrZWVwYWxpdmUgc3RhdHVzKSAqLworI2RlZmluZSBFWENFUF9JUF9BRERSRVNTX0RJU0NPVkVSRUQJCTB4MzMJLyogdGhlIElQIGFkZHJlc3MgaGFzIGJlZW4gZGlzY292ZXJlZCAqLworI2RlZmluZSBFWENFUF9MT09QQkFDS19DT05ESVRJT04JCTB4MzQJLyogYSBsb29wYmFjayBjb25kaXRpb24gaGFzIG9jY3VycmVkICovCisKKworLyogcmV0dXJuIGNvZGUgZnJvbSBjb21tYW5kIENIRExDX1NFTkRfV0FJVCBhbmQgQ0hETENfU0VORF9OT19XQUlUICovCisjZGVmaW5lIExJTktfRElTQ09OTkVDVEVECQkJMHgyMQorI2RlZmluZSBOT19UWF9CRlJTX0FWQUlMCQkJMHgyNAorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIENvbnN0YW50cyBmb3IgdGhlIFNFVF9HTE9CQUxfQ09ORklHVVJBVElPTi9SRUFEX0dMT0JBTF9DT05GSUdVUkFUSU9OIGNvbW1hbmRzCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIHRoZSBnbG9iYWwgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydCBhZGFwdGVyX2NvbmZpZ19vcHRpb25zIFBBQ0tFRDsJLyogYWRhcHRlciBjb25maWcgb3B0aW9ucyAqLworCXVuc2lnbmVkIHNob3J0IGFwcF9JUlFfdGltZW91dCBQQUNLRUQ7CQkvKiBhcHBsaWNhdGlvbiBJUlEgdGltZW91dCAqLworCXVuc2lnbmVkIGxvbmcgYWRhcHRlcl9vcGVyYXRpbmdfZnJlcXVlbmN5IFBBQ0tFRDsJLyogYWRhcHRlciBvcGVyYXRpbmcgZnJlcXVlbmN5ICovCit9IEdMT0JBTF9DT05GSUdVUkFUSU9OX1NUUlVDVDsKKworLyogc2V0dGluZ3MgZm9yIHRoZSAnYXBwX0lSUV90aW1lb3V0JyAqLworI2RlZmluZSBNQVhfQVBQX0lSUV9USU1FT1VUX1ZBTFVFCTUwMDAJLyogdGhlIG1heGltdW0gcGVybWl0dGVkIElSUSB0aW1lb3V0ICovCisKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgICAgICAgICAgICBDb25zdGFudHMgZm9yIHRoZSBSRUFEX0dMT0JBTF9TVEFUSVNUSUNTIGNvbW1hbmQKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogdGhlIGdsb2JhbCBzdGF0aXN0aWNzIHN0cnVjdHVyZSAqLwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIHNob3J0IGFwcF9JUlFfdGltZW91dF9jb3VudCBQQUNLRUQ7Cit9IEdMT0JBTF9TVEFUU19TVFJVQ1Q7CisKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgICAgICAgICAgICBDb25zdGFudHMgZm9yIHRoZSBSRUFEX0NPTU1TX0VSUk9SX1NUQVRTIGNvbW1hbmQKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogdGhlIGNvbW11bmljYXRpb25zIGVycm9yIHN0YXRpc3RpY3Mgc3RydWN0dXJlICovCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgc2hvcnQgUnhfb3ZlcnJ1bl9lcnJfY291bnQgUEFDS0VEOworCXVuc2lnbmVkIHNob3J0IENSQ19lcnJfY291bnQgUEFDS0VEOwkvKiByZWNlaXZlciBDUkMgZXJyb3IgY291bnQgKi8KKwl1bnNpZ25lZCBzaG9ydCBSeF9hYm9ydF9jb3VudCBQQUNLRUQ7IAkvKiBhYm9ydCBmcmFtZXMgcmVjdmQgY291bnQgKi8KKwl1bnNpZ25lZCBzaG9ydCBSeF9kaXNfcHJpX2JmcnNfZnVsbF9jb3VudCBQQUNLRUQ7LyogcmVjZWl2ZXIgZGlzYWJsZWQgKi8KKwl1bnNpZ25lZCBzaG9ydCBjb21tc19lcnJfc3RhdF9yZXNlcnZlZF8xIFBBQ0tFRDsvKiByZXNlcnZlZCBmb3IgbGF0ZXIgKi8KKwl1bnNpZ25lZCBzaG9ydCBzZWNfVHhfYWJvcnRfbXNkX1R4X2ludF9jb3VudCBQQUNLRUQ7IC8qIHNlY29uZGFyeSAtIGFib3J0IGZyYW1lcyB0cmFuc21pdHRlZCBjb3VudCAobWlzc2VkIFR4IGludGVycnVwdCkgKi8KKwl1bnNpZ25lZCBzaG9ydCBtaXNzZWRfVHhfdW5kX2ludF9jb3VudCBQQUNLRUQ7CS8qIG1pc3NlZCB0eCB1bmRlcnJ1biBpbnRlcnJ1cHQgY291bnQgKi8KKyAgICAgICAgdW5zaWduZWQgc2hvcnQgc2VjX1R4X2Fib3J0X2NvdW50IFBBQ0tFRDsgICAvKnNlY29uZGFyeS1hYm9ydCBmcmFtZXMgdHggY291bnQgKi8KKwl1bnNpZ25lZCBzaG9ydCBEQ0Rfc3RhdGVfY2hhbmdlX2NvdW50IFBBQ0tFRDsgLyogRENEIHN0YXRlIGNoYW5nZSAqLworCXVuc2lnbmVkIHNob3J0IENUU19zdGF0ZV9jaGFuZ2VfY291bnQgUEFDS0VEOyAvKiBDVFMgc3RhdGUgY2hhbmdlICovCit9IENPTU1TX0VSUk9SX1NUQVRTX1NUUlVDVDsKKworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgICAgICAgICAgICAgICAgQ29uc3RhbnRzIHVzZWQgZm9yIGxpbmUgdHJhY2luZworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiB0aGUgdHJhY2UgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgKFNFVF9UUkFDRV9DT05GSUdVUkFUSU9OL1JFQURfVFJBQ0VfQ09ORklHVVJBVElPTiBjb21tYW5kcykgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBjaGFyIHRyYWNlX2NvbmZpZyBQQUNLRUQ7CQkvKiB0cmFjZSBjb25maWd1cmF0aW9uICovCisJdW5zaWduZWQgc2hvcnQgdHJhY2VfZGVhY3RpdmF0aW9uX3RpbWVyIFBBQ0tFRDsJLyogdHJhY2UgZGVhY3RpdmF0aW9uIHRpbWVyICovCisJdW5zaWduZWQgbG9uZyBwdHJfdHJhY2Vfc3RhdF9lbF9jZmdfc3RydWN0IFBBQ0tFRDsJLyogYSBwb2ludGVyIHRvIHRoZSBsaW5lIHRyYWNlIGVsZW1lbnQgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgKi8KK30gTElORV9UUkFDRV9DT05GSUdfU1RSVUNUOworCisvKiAndHJhY2VfY29uZmlnJyBiaXQgc2V0dGluZ3MgKi8KKyNkZWZpbmUgVFJBQ0VfSU5BQ1RJVkUJCTB4MDAJLyogdHJhY2UgaXMgaW5hY3RpdmUgKi8KKyNkZWZpbmUgVFJBQ0VfQUNUSVZFCQkweDAxCS8qIHRyYWNlIGlzIGFjdGl2ZSAqLworI2RlZmluZSBUUkFDRV9ERUxBWV9NT0RFCTB4MDQJLyogb3BlcmF0ZSB0aGUgdHJhY2UgaW4gZGVsYXkgbW9kZSAqLworI2RlZmluZSBUUkFDRV9EQVRBX0ZSQU1FUwkweDA4CS8qIHRyYWNlIERhdGEgZnJhbWVzICovCisjZGVmaW5lIFRSQUNFX1NMQVJQX0ZSQU1FUwkweDEwCS8qIHRyYWNlIFNMQVJQIGZyYW1lcyAqLworI2RlZmluZSBUUkFDRV9DRFBfRlJBTUVTCTB4MjAJLyogdHJhY2UgQ0RQIGZyYW1lcyAqLworCisvKiB0aGUgbGluZSB0cmFjZSBzdGF0dXMgZWxlbWVudCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSAqLwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIHNob3J0IG51bWJlcl90cmFjZV9zdGF0dXNfZWxlbWVudHMgUEFDS0VEOwkvKiBudW1iZXIgb2YgbGluZSB0cmFjZSBlbGVtZW50cyAqLworCXVuc2lnbmVkIGxvbmcgYmFzZV9hZGRyX3RyYWNlX3N0YXR1c19lbGVtZW50cyBQQUNLRUQ7CS8qIGJhc2UgYWRkcmVzcyBvZiB0aGUgdHJhY2UgZWxlbWVudCBsaXN0ICovCisJdW5zaWduZWQgbG9uZyBuZXh0X3RyYWNlX2VsZW1lbnRfdG9fdXNlIFBBQ0tFRDsJLyogcG9pbnRlciB0byB0aGUgbmV4dCB0cmFjZSBlbGVtZW50IHRvIGJlIHVzZWQgKi8KKwl1bnNpZ25lZCBsb25nIGJhc2VfYWRkcl90cmFjZV9idWZmZXIgUEFDS0VEOwkJLyogYmFzZSBhZGRyZXNzIG9mIHRoZSB0cmFjZSBkYXRhIGJ1ZmZlciAqLworCXVuc2lnbmVkIGxvbmcgZW5kX2FkZHJfdHJhY2VfYnVmZmVyIFBBQ0tFRDsJCS8qIGVuZCBhZGRyZXNzIG9mIHRoZSB0cmFjZSBkYXRhIGJ1ZmZlciAqLworfSBUUkFDRV9TVEFUVVNfRUxfQ0ZHX1NUUlVDVDsKKworLyogdGhlIGxpbmUgdHJhY2Ugc3RhdHVzIGVsZW1lbnQgc3RydWN0dXJlICovCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgY2hhciBvcHBfZmxhZyBQQUNLRUQ7CQkJLyogb3BwIGZsYWcgKi8KKwl1bnNpZ25lZCBzaG9ydCB0cmFjZV9sZW5ndGggUEFDS0VEOwkJLyogdHJhY2UgbGVuZ3RoICovCisJdW5zaWduZWQgY2hhciB0cmFjZV90eXBlIFBBQ0tFRDsJCS8qIHRyYWNlIHR5cGUgKi8KKwl1bnNpZ25lZCBzaG9ydCB0cmFjZV90aW1lX3N0YW1wIFBBQ0tFRDsJLyogdGltZSBzdGFtcCAqLworCXVuc2lnbmVkIHNob3J0IHRyYWNlX3Jlc2VydmVkXzEgUEFDS0VEOwkvKiByZXNlcnZlZCBmb3IgbGF0ZXIgdXNlICovCisJdW5zaWduZWQgbG9uZyB0cmFjZV9yZXNlcnZlZF8yIFBBQ0tFRDsJCS8qIHJlc2VydmVkIGZvciBsYXRlciB1c2UgKi8KKwl1bnNpZ25lZCBsb25nIHB0cl9kYXRhX2JmciBQQUNLRUQ7CQkvKiBwdHIgdG8gdGhlIHRyYWNlIGRhdGEgYnVmZmVyICovCit9IFRSQUNFX1NUQVRVU19FTEVNRU5UX1NUUlVDVDsKKworLyogInRyYWNlX3R5cGUiIGJpdCBzZXR0aW5ncyAqLworI2RlZmluZSBUUkFDRV9JTkNPTUlORyAJCQkweDAwCisjZGVmaW5lIFRSQUNFX09VVEdPSU5HSU5HIAkJMHgwMQorI2RlZmluZSBUUkFDRV9JTkNPTUlOR19BQk9SVEVEIAkJMHgxMAorI2RlZmluZSBUUkFDRV9JTkNPTUlOR19DUkNfRVJST1IgCTB4MjAKKyNkZWZpbmUgVFJBQ0VfSU5DT01JTkdfT1ZFUlJVTl9FUlJPUiAJMHg0MAorCisKKworLyogdGhlIGxpbmUgdHJhY2Ugc3RhdGlzdGljcyBzdHJ1Y3R1cmUgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBsb25nIGZyYW1lc190cmFjZWRfY291bnQgUEFDS0VEOwkvKiBudW1iZXIgb2YgZnJhbWVzIHRyYWNlZCAqLworCXVuc2lnbmVkIGxvbmcgdHJjX2ZybXNfbm90X3JlY29yZGVkX2NvdW50IFBBQ0tFRDsJLyogbnVtYmVyIG9mIHRyYWNlIGZyYW1lcyBkaXNjYXJkZWQgKi8KK30gTElORV9UUkFDRV9TVEFUU19TVFJVQ1Q7CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogICAgICAgICAgICAgICBDb25zdGFudHMgZm9yIHRoZSBGVDFfTU9OSVRPUl9TVEFUVVNfQ1RSTCBjb21tYW5kCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUgRElTQUJMRV9GVDFfU1RBVFVTX1NUQVRJU1RJQ1MJMHgwMCAgICAvKiBkaXNhYmxlIHRoZSBGVDEgc3RhdHVzIGFuZCBzdGF0aXN0aWNzIG1vbml0b3JpbmcgKi8KKyNkZWZpbmUgRU5BQkxFX1JFQURfRlQxX1NUQVRVUwkJMHgwMSAgICAvKiByZWFkIHRoZSBGVDEgb3BlcmF0aW9uYWwgc3RhdHVzICovCisjZGVmaW5lIEVOQUJMRV9SRUFEX0ZUMV9PUF9TVEFUUwkweDAyICAgIC8qIHJlYWQgdGhlIEZUMSBvcGVyYXRpb25hbCBzdGF0aXN0aWNzICovCisjZGVmaW5lIEZMVVNIX0ZUMV9PUF9TVEFUUwkJMHgwNCAJLyogZmx1c2ggdGhlIEZUMSBvcGVyYXRpb25hbCBzdGF0aXN0aWNzICovCisKKworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgICAgICAgICAgICAgQ29uc3RhbnRzIGZvciB0aGUgU0VUX0NIRExDX0NPTkZJR1VSQVRJT04gY29tbWFuZAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiB0aGUgQ0hETEMgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBsb25nIGJhdWRfcmF0ZSBQQUNLRUQ7CQkvKiB0aGUgYmF1ZCByYXRlICovCQorCXVuc2lnbmVkIHNob3J0IGxpbmVfY29uZmlnX29wdGlvbnMgUEFDS0VEOwkvKiBsaW5lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyAqLworCXVuc2lnbmVkIHNob3J0IG1vZGVtX2NvbmZpZ19vcHRpb25zIFBBQ0tFRDsJLyogbW9kZW0gY29uZmlncmF0aW9uIG9wdGlvbnMgKi8KKwl1bnNpZ25lZCBzaG9ydCBtb2RlbV9zdGF0dXNfdGltZXIgUEFDS0VEOwkvKiB0aW1lciBmb3IgbW9uaXRvcmluZyBtb2RlbSBzdGF0dXMgY2hhbmdlcyAqLworCXVuc2lnbmVkIHNob3J0IENIRExDX0FQSV9vcHRpb25zIFBBQ0tFRDsJLyogQ0hETEMgQVBJIG9wdGlvbnMgKi8KKwl1bnNpZ25lZCBzaG9ydCBDSERMQ19wcm90b2NvbF9vcHRpb25zIFBBQ0tFRDsJLyogQ0hETEMgcHJvdG9jb2wgb3B0aW9ucyAqLworCXVuc2lnbmVkIHNob3J0IHBlcmNlbnRfZGF0YV9idWZmZXJfZm9yX1R4IFBBQ0tFRDsJLyogcGVyY2VudGFnZSBkYXRhIGJ1ZmZlcmluZyB1c2VkIGZvciBUeCAqLworCXVuc2lnbmVkIHNob3J0IENIRExDX3N0YXRpc3RpY3Nfb3B0aW9ucyBQQUNLRUQ7CS8qIENIRExDIG9wZXJhdGlvbmFsIHN0YXRpc3RpY3Mgb3B0aW9ucyAqLworCXVuc2lnbmVkIHNob3J0IG1heF9DSERMQ19kYXRhX2ZpZWxkX2xlbmd0aCBQQUNLRUQ7CS8qIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiB0aGUgQ0hETEMgRGF0YSBmaWVsZCAqLworCXVuc2lnbmVkIHNob3J0IHRyYW5zbWl0X2tlZXBhbGl2ZV90aW1lciBQQUNLRUQ7CQkvKiB0aGUgdHJhbnNtaXQga2VlcGFsaXZlIHRpbWVyICovCisJdW5zaWduZWQgc2hvcnQgcmVjZWl2ZV9rZWVwYWxpdmVfdGltZXIgUEFDS0VEOwkJLyogdGhlIHJlY2VpdmUga2VlcGFsaXZlIHRpbWVyICovCisJdW5zaWduZWQgc2hvcnQga2VlcGFsaXZlX2Vycm9yX3RvbGVyYW5jZSBQQUNLRUQ7CS8qIHRoZSByZWNlaXZlIGtlZXBhbGl2ZSBlcnJvciB0b2xlcmFuY2UgKi8KKwl1bnNpZ25lZCBzaG9ydCBTTEFSUF9yZXF1ZXN0X3RpbWVyIFBBQ0tFRDsJCS8qIHRoZSBTTEFSUCByZXF1ZXN0IHRpbWVyICovCisJdW5zaWduZWQgbG9uZyBJUF9hZGRyZXNzIFBBQ0tFRDsJCQkvKiB0aGUgSVAgYWRkcmVzcyAqLworCXVuc2lnbmVkIGxvbmcgSVBfbmV0bWFzayBQQUNLRUQ7CQkJLyogdGhlIElQIG5ldG1hc2sgKi8KKwl1bnNpZ25lZCBsb25nIHB0cl9zaGFyZWRfbWVtX2luZm9fc3RydWN0IFBBQ0tFRDsJLyogYSBwb2ludGVyIHRvIHRoZSBzaGFyZWQgbWVtb3J5IGFyZWEgaW5mb3JtYXRpb24gc3RydWN0dXJlICovCisJdW5zaWduZWQgbG9uZyBwdHJfQ0hETENfVHhfc3RhdF9lbF9jZmdfc3RydWN0IFBBQ0tFRDsJLyogYSBwb2ludGVyIHRvIHRoZSB0cmFuc21pdCBzdGF0dXMgZWxlbWVudCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSAqLworCXVuc2lnbmVkIGxvbmcgcHRyX0NIRExDX1J4X3N0YXRfZWxfY2ZnX3N0cnVjdCBQQUNLRUQ7CS8qIGEgcG9pbnRlciB0byB0aGUgcmVjZWl2ZSBzdGF0dXMgZWxlbWVudCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSAqLworfSBDSERMQ19DT05GSUdVUkFUSU9OX1NUUlVDVDsKKworLyogc2V0dGluZ3MgZm9yIHRoZSAnbGluZV9jb25maWdfb3B0aW9ucycgKi8KKyNkZWZpbmUgSU5URVJGQUNFX0xFVkVMX1YzNQkJCQkJMHgwMDAwIC8qIFYuMzUgaW50ZXJmYWNlIGxldmVsICovCisjZGVmaW5lIElOVEVSRkFDRV9MRVZFTF9SUzIzMgkJCQkJMHgwMDAxIC8qIFJTLTIzMiBpbnRlcmZhY2UgbGV2ZWwgKi8KKworLyogc2V0dGluZ3MgZm9yIHRoZSAnbW9kZW1fY29uZmlnX29wdGlvbnMnICovCisKKyNkZWZpbmUgRE9OVF9SQUlTRV9EVFJfUlRTX09OX0VOX0NPTU1TCQkweDAwMDEKKy8qIGRvbid0IGF1dG9tYXRpY2FsbHkgcmFpc2UgRFRSIGFuZCBSVFMgd2hlbiBwZXJmb3JtaW5nIGFuCisgICBFTkFCTEVfQ0hETENfQ09NTVVOSUNBVElPTlMgY29tbWFuZCAqLworCisjZGVmaW5lIERPTlRfUkVQT1JUX0NIR19JTl9NT0RFTV9TVEFUIAkJMHgwMDAyCisvKiBkb24ndCByZXBvcnQgY2hhbmdlcyBpbiBtb2RlbSBzdGF0dXMgdG8gdGhlIGFwcGxpY2F0aW9uICovCisKKworLyogYml0IHNldHRpbmdzIGZvciB0aGUgJ0NIRExDX3Byb3RvY29sX29wdGlvbnMnIGJ5dGUgKi8KKworI2RlZmluZSBJR05PUkVfRENEX0ZPUl9MSU5LX1NUQVQJCTB4MDAwMQorLyogaWdub3JlIERDRCBpbiBkZXRlcm1pbmluZyB0aGUgQ0hETEMgbGluayBzdGF0dXMgKi8KKworI2RlZmluZSBJR05PUkVfQ1RTX0ZPUl9MSU5LX1NUQVQJCTB4MDAwMgorLyogaWdub3JlIENUUyBpbiBkZXRlcm1pbmluZyB0aGUgQ0hETEMgbGluayBzdGF0dXMgKi8KKworI2RlZmluZSBJR05PUkVfS1BBTFZfRk9SX0xJTktfU1RBVAkJMHgwMDA0CisvKiBpZ25vcmUga2VlcGFsaXZlIGZyYW1lcyBpbiBkZXRlcm1pbmluZyB0aGUgQ0hETEMgbGluayBzdGF0dXMgKi8gCisKKyNkZWZpbmUgU0lOR0xFX1RYX0JVRkZFUgkJCTB4NDAwMCAKKy8qIGNvbmZpZ3VyZSBhIHNpbmdsZSB0cmFuc21pdCBidWZmZXIgKi8KKworI2RlZmluZSBIRExDX1NUUkVBTUlOR19NT0RFCQkJMHg4MDAwCisKKy8qICAgc2V0dGluZ3MgZm9yIHRoZSAnQ0hETENfc3RhdGlzdGljc19vcHRpb25zJyAqLworCisjZGVmaW5lIENIRExDX1RYX0RBVEFfQllURV9DT1VOVF9TVEFUCQkweDAwMDEKKy8qIHJlY29yZCB0aGUgbnVtYmVyIG9mIERhdGEgYnl0ZXMgdHJhbnNtaXR0ZWQgKi8KKworI2RlZmluZSBDSERMQ19SWF9EQVRBX0JZVEVfQ09VTlRfU1RBVAkJMHgwMDAyCisvKiByZWNvcmQgdGhlIG51bWJlciBvZiBEYXRhIGJ5dGVzIHJlY2VpdmVkICovCisKKyNkZWZpbmUgQ0hETENfVFhfVEhST1VHSFBVVF9TVEFUCQkweDAwMDQKKy8qIGNvbXB1dGUgdGhlIERhdGEgZnJhbWUgdHJhbnNtaXQgdGhyb3VnaHB1dCAqLworCisjZGVmaW5lIENIRExDX1JYX1RIUk9VR0hQVVRfU1RBVAkJMHgwMDA4CisvKiBjb21wdXRlIHRoZSBEYXRhIGZyYW1lIHJlY2VpdmUgdGhyb3VnaHB1dCAqLworCisKKy8qIHBlcm1pdHRlZCBtaW5pbXVtIGFuZCBtYXhpbXVtIHZhbHVlcyBmb3Igc2V0dGluZyB0aGUgQ0hETEMgY29uZmlndXJhdGlvbiAqLworI2RlZmluZSBQUklfTUFYX0JBVURfUkFURV9TNTA4CTI2NjY2NjYgLyogUFJJTUFSWSAgIC0gbWF4aW11bSBiYXVkIHJhdGUgKFM1MDgpICovCisjZGVmaW5lIFNFQ19NQVhfQkFVRF9SQVRFX1M1MDgJMjU4MDY0IAkvKiBTRUNPTkRBUlkgLSBtYXhpbXVtIGJhdWQgcmF0ZSAoUzUwOCkgKi8KKyNkZWZpbmUgUFJJX01BWF9CQVVEX1JBVEVfUzUxNCAgMjc1MDAwMCAvKiBQUklNQVJZICAgLSBtYXhpbXVtIGJhdWQgcmF0ZSAoUzUwOCkgKi8KKyNkZWZpbmUgU0VDX01BWF9CQVVEX1JBVEVfUzUxNCAgNTE1NjI1ICAvKiBTRUNPTkRBUlkgLSBtYXhpbXVtIGJhdWQgcmF0ZSAoUzUwOCkgKi8KKyAKKyNkZWZpbmUgTUlOX01PREVNX1RJTUVSCTAJCQkvKiBtaW5pbXVtIG1vZGVtIHN0YXR1cyB0aW1lciAqLworI2RlZmluZSBNQVhfTU9ERU1fVElNRVIJNTAwMAkJCS8qIG1heGltdW0gbW9kZW0gc3RhdHVzIHRpbWVyICovCisKKyNkZWZpbmUgU0VDX01BWF9OT19EQVRBX0JZVEVTX0lOX0ZSQU1FICAyMDQ4IC8qIFNFQ09OREFSWSAtIG1heCBsZW5ndGggb2YgdGhlIENIRExDIGRhdGEgZmllbGQgKi8KKworI2RlZmluZSBNSU5fVHhfS1BBTFZfVElNRVIJMAkgIC8qIG1pbmltdW0gdHJhbnNtaXQga2VlcGFsaXZlIHRpbWVyICovCisjZGVmaW5lIE1BWF9UeF9LUEFMVl9USU1FUgk2MDAwMAkgIC8qIG1heGltdW0gdHJhbnNtaXQga2VlcGFsaXZlIHRpbWVyICovCisjZGVmaW5lIERFRkFVTFRfVHhfS1BBTFZfVElNRVIJMTAwMDAJICAvKiBkZWZhdWx0IHRyYW5zbWl0IGtlZXBhbGl2ZSB0aW1lciAqLworCisjZGVmaW5lIE1JTl9SeF9LUEFMVl9USU1FUgkxMAkgIC8qIG1pbmltdW0gcmVjZWl2ZSBrZWVwYWxpdmUgdGltZXIgKi8KKyNkZWZpbmUgTUFYX1J4X0tQQUxWX1RJTUVSCTYwMDAwCSAgLyogbWF4aW11bSByZWNlaXZlIGtlZXBhbGl2ZSB0aW1lciAqLworI2RlZmluZSBERUZBVUxUX1J4X0tQQUxWX1RJTUVSCTEwMDAwCSAgLyogZGVmYXVsdCByZWNlaXZlIGtlZXBhbGl2ZSB0aW1lciAqLworCisjZGVmaW5lIE1JTl9LUEFMVl9FUlJfVE9MCTEJICAvKiBtaW4ga3BhbHYgZXJyb3IgdG9sZXJhbmNlIGNvdW50ICovCisjZGVmaW5lIE1BWF9LUEFMVl9FUlJfVE9MCTIwCSAgLyogbWF4IGtwYWx2IGVycm9yIHRvbGVyYW5jZSBjb3VudCAqLworI2RlZmluZSBERUZBVUxUX0tQQUxWX0VSUl9UT0wJMwkgIC8qIGRlZmF1bHQgdmFsdWUgKi8KKworI2RlZmluZSBNSU5fU0xBUlBfUkVRX1RJTUVSCTAJICAvKiBtaW4gdHJhbnNtaXQgU0xBUlAgUmVxdWVzdCB0aW1lciAqLworI2RlZmluZSBNQVhfU0xBUlBfUkVRX1RJTUVSCTYwMDAwCSAgLyogbWF4IHRyYW5zbWl0IFNMQVJQIFJlcXVlc3QgdGltZXIgKi8KKyNkZWZpbmUgREVGQVVMVF9TTEFSUF9SRVFfVElNRVIJMAkgIC8qIGRlZmF1bHQgdmFsdWUgLS0gbm8gU0xBUlAgKi8KKworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgICAgICAgICAgIENvbnN0YW50cyBmb3IgdGhlIFJFQURfQ0hETENfTElOS19TVEFUVVMgY29tbWFuZAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiB0aGUgQ0hETEMgc3RhdHVzIHN0cnVjdHVyZSAqLwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGNoYXIgQ0hETENfbGlua19zdGF0dXMgUEFDS0VEOwkvKiBDSERMQyBsaW5rIHN0YXR1cyAqLworCXVuc2lnbmVkIGNoYXIgbm9fRGF0YV9mcm1zX2Zvcl9hcHAgUEFDS0VEOwkvKiBudW1iZXIgb2YgRGF0YSBmcmFtZXMgYXZhaWxhYmxlIGZvciB0aGUgYXBwbGljYXRpb24gKi8KKwl1bnNpZ25lZCBjaGFyIHJlY2VpdmVyX3N0YXR1cyBQQUNLRUQ7CS8qIGVuYWJsZWQvZGlzYWJsZWQgKi8KKwl1bnNpZ25lZCBjaGFyIFNMQVJQX3N0YXRlIFBBQ0tFRDsJLyogaW50ZXJuYWwgU0xBUlAgc3RhdGUgKi8KK30gQ0hETENfTElOS19TVEFUVVNfU1RSVUNUOworCisvKiBzZXR0aW5ncyBmb3IgdGhlICdDSERMQ19saW5rX3N0YXR1cycgdmFyaWFibGUgKi8KKyNkZWZpbmUgQ0hETENfTElOS19JTkFDVElWRQkJMHgwMAkvKiB0aGUgQ0hETEMgbGluayBpcyBpbmFjdGl2ZSAqLworI2RlZmluZSBDSERMQ19MSU5LX0FDVElWRQkJMHgwMQkvKiB0aGUgQ0hETEMgbGluayBpcyBhY3RpdmUgKi8KKworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgICAgICAgICBDb25zdGFudHMgZm9yIHRoZSBSRUFEX0NIRExDX09QRVJBVElPTkFMX1NUQVRTIGNvbW1hbmQKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogdGhlIENIRExDIG9wZXJhdGlvbmFsIHN0YXRpc3RpY3Mgc3RydWN0dXJlICovCit0eXBlZGVmIHN0cnVjdCB7CisKKwkvKiBEYXRhIGZyYW1lIHRyYW5zbWlzc2lvbiBzdGF0aXN0aWNzICovCisJdW5zaWduZWQgbG9uZyBEYXRhX2ZyYW1lc19UeF9jb3VudCBQQUNLRUQ7CS8qICMgb2YgZnJhbWVzIHRyYW5zbWl0dGVkICovCisJdW5zaWduZWQgbG9uZyBEYXRhX2J5dGVzX1R4X2NvdW50IFBBQ0tFRDsgCS8qICMgb2YgYnl0ZXMgdHJhbnNtaXR0ZWQgKi8KKwl1bnNpZ25lZCBsb25nIERhdGFfVHhfdGhyb3VnaHB1dCBQQUNLRUQ7CS8qIHRyYW5zbWl0IHRocm91Z2hwdXQgKi8KKwl1bnNpZ25lZCBsb25nIG5vX21zX2Zvcl9EYXRhX1R4X3RocnVwdXRfY29tcCBQQUNLRUQ7CS8qIG1pbGxpc2Vjb25kIHRpbWUgdXNlZCBmb3IgdGhlIFR4IHRocm91Z2hwdXQgY29tcHV0YXRpb24gKi8KKwl1bnNpZ25lZCBsb25nIFR4X0RhdGFfZGlzY2FyZF9sZ3RoX2Vycl9jb3VudCBQQUNLRUQ7CS8qIG51bWJlciBvZiBEYXRhIGZyYW1lcyBkaXNjYXJkZWQgKGxlbmd0aCBlcnJvcikgKi8KKwl1bnNpZ25lZCBsb25nIHJlc2VydmVkX0RhdGFfZnJtX1R4X3N0YXQxIFBBQ0tFRDsJLyogcmVzZXJ2ZWQgZm9yIGxhdGVyICovCisJdW5zaWduZWQgbG9uZyByZXNlcnZlZF9EYXRhX2ZybV9UeF9zdGF0MiBQQUNLRUQ7CS8qIHJlc2VydmVkIGZvciBsYXRlciAqLworCXVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfRGF0YV9mcm1fVHhfc3RhdDMgUEFDS0VEOwkvKiByZXNlcnZlZCBmb3IgbGF0ZXIgKi8KKworCS8qIERhdGEgZnJhbWUgcmVjZXB0aW9uIHN0YXRpc3RpY3MgKi8KKwl1bnNpZ25lZCBsb25nIERhdGFfZnJhbWVzX1J4X2NvdW50IFBBQ0tFRDsJLyogbnVtYmVyIG9mIGZyYW1lcyByZWNlaXZlZCAqLworCXVuc2lnbmVkIGxvbmcgRGF0YV9ieXRlc19SeF9jb3VudCBQQUNLRUQ7CS8qIG51bWJlciBvZiBieXRlcyByZWNlaXZlZCAqLworCXVuc2lnbmVkIGxvbmcgRGF0YV9SeF90aHJvdWdocHV0IFBBQ0tFRDsJLyogcmVjZWl2ZSB0aHJvdWdocHV0ICovCisJdW5zaWduZWQgbG9uZyBub19tc19mb3JfRGF0YV9SeF90aHJ1cHV0X2NvbXAgUEFDS0VEOwkvKiBtaWxsaXNlY29uZCB0aW1lIHVzZWQgZm9yIHRoZSBSeCB0aHJvdWdocHV0IGNvbXB1dGF0aW9uICovCisJdW5zaWduZWQgbG9uZyBSeF9EYXRhX2Rpc2NhcmRfc2hvcnRfY291bnQgUEFDS0VEOwkvKiByZWNlaXZlZCBEYXRhIGZyYW1lcyBkaXNjYXJkZWQgKHRvbyBzaG9ydCkgKi8KKwl1bnNpZ25lZCBsb25nIFJ4X0RhdGFfZGlzY2FyZF9sb25nX2NvdW50IFBBQ0tFRDsJLyogcmVjZWl2ZWQgRGF0YSBmcmFtZXMgZGlzY2FyZGVkICh0b28gbG9uZykgKi8KKwl1bnNpZ25lZCBsb25nIFJ4X0RhdGFfZGlzY2FyZF9pbmFjdGl2ZV9jb3VudCBQQUNLRUQ7CS8qIHJlY2VpdmVkIERhdGEgZnJhbWVzIGRpc2NhcmRlZCAobGluayBpbmFjdGl2ZSkgKi8KKwl1bnNpZ25lZCBsb25nIHJlc2VydmVkX0RhdGFfZnJtX1J4X3N0YXQxIFBBQ0tFRDsJLyogcmVzZXJ2ZWQgZm9yIGxhdGVyICovCisKKwkvKiBTTEFSUCBmcmFtZSB0cmFuc21pc3Npb24vcmVjZXB0aW9uIHN0YXRpc3RpY3MgKi8KKwl1bnNpZ25lZCBsb25nIENIRExDX1NMQVJQX1JFUV9UeF9jb3VudCBQQUNLRUQ7CQkvKiBudW1iZXIgb2YgU0xBUlAgUmVxdWVzdCBmcmFtZXMgdHJhbnNtaXR0ZWQgKi8KKwl1bnNpZ25lZCBsb25nIENIRExDX1NMQVJQX1JFUV9SeF9jb3VudCBQQUNLRUQ7CQkvKiBudW1iZXIgb2YgU0xBUlAgUmVxdWVzdCBmcmFtZXMgcmVjZWl2ZWQgKi8KKwl1bnNpZ25lZCBsb25nIENIRExDX1NMQVJQX1JFUExZX1R4X2NvdW50IFBBQ0tFRDsJLyogbnVtYmVyIG9mIFNMQVJQIFJlcGx5IGZyYW1lcyB0cmFuc21pdHRlZCAqLworCXVuc2lnbmVkIGxvbmcgQ0hETENfU0xBUlBfUkVQTFlfUnhfY291bnQgUEFDS0VEOwkvKiBudW1iZXIgb2YgU0xBUlAgUmVwbHkgZnJhbWVzIHJlY2VpdmVkICovCisJdW5zaWduZWQgbG9uZyBDSERMQ19TTEFSUF9LUEFMVl9UeF9jb3VudCBQQUNLRUQ7CS8qIG51bWJlciBvZiBTTEFSUCBrZWVwYWxpdmUgZnJhbWVzIHRyYW5zbWl0dGVkICovCisJdW5zaWduZWQgbG9uZyBDSERMQ19TTEFSUF9LUEFMVl9SeF9jb3VudCBQQUNLRUQ7CS8qIG51bWJlciBvZiBTTEFSUCBrZWVwYWxpdmUgZnJhbWVzIHJlY2VpdmVkICovCisJdW5zaWduZWQgbG9uZyByZXNlcnZlZF9TTEFSUF9zdGF0MSBQQUNLRUQ7CQkvKiByZXNlcnZlZCBmb3IgbGF0ZXIgKi8KKwl1bnNpZ25lZCBsb25nIHJlc2VydmVkX1NMQVJQX3N0YXQyIFBBQ0tFRDsJCS8qIHJlc2VydmVkIGZvciBsYXRlciAqLworCisJLyogQ0RQIGZyYW1lIHRyYW5zbWlzc2lvbi9yZWNlcHRpb24gc3RhdGlzdGljcyAqLworCXVuc2lnbmVkIGxvbmcgQ0hETENfQ0RQX1R4X2NvdW50IFBBQ0tFRDsJCS8qIG51bWJlciBvZiBDRFAgZnJhbWVzIHRyYW5zbWl0dGVkICovCisJdW5zaWduZWQgbG9uZyBDSERMQ19DRFBfUnhfY291bnQgUEFDS0VEOwkJLyogbnVtYmVyIG9mIENEUCBmcmFtZXMgcmVjZWl2ZWQgKi8KKwl1bnNpZ25lZCBsb25nIHJlc2VydmVkX0NEUF9zdGF0MSBQQUNLRUQ7CQkvKiByZXNlcnZlZCBmb3IgbGF0ZXIgKi8KKwl1bnNpZ25lZCBsb25nIHJlc2VydmVkX0NEUF9zdGF0MiBQQUNLRUQ7CQkvKiByZXNlcnZlZCBmb3IgbGF0ZXIgKi8KKwl1bnNpZ25lZCBsb25nIHJlc2VydmVkX0NEUF9zdGF0MyBQQUNLRUQ7CQkvKiByZXNlcnZlZCBmb3IgbGF0ZXIgKi8KKwl1bnNpZ25lZCBsb25nIHJlc2VydmVkX0NEUF9zdGF0NCBQQUNLRUQ7CQkvKiByZXNlcnZlZCBmb3IgbGF0ZXIgKi8KKwl1bnNpZ25lZCBsb25nIHJlc2VydmVkX0NEUF9zdGF0NSBQQUNLRUQ7CQkvKiByZXNlcnZlZCBmb3IgbGF0ZXIgKi8KKwl1bnNpZ25lZCBsb25nIHJlc2VydmVkX0NEUF9zdGF0NiBQQUNLRUQ7CQkvKiByZXNlcnZlZCBmb3IgbGF0ZXIgKi8KKworCS8qIEluY29taW5nIGZyYW1lcyB3aXRoIGEgZm9ybWF0IGVycm9yIHN0YXRpc3RpY3MgKi8KKwl1bnNpZ25lZCBzaG9ydCBSeF9mcm1faW5jb21wX0NIRExDX2hkcl9jb3VudCBQQUNLRUQ7CS8qIGZyYW1lcyByZWNlaXZlZCBvZiB3aXRoIGluY29tcGxldGUgQ2lzY28gSERMQyBoZWFkZXIgKi8KKwl1bnNpZ25lZCBzaG9ydCBSeF9mcm1zX3Rvb19sb25nX2NvdW50IFBBQ0tFRDsJCS8qIGZyYW1lcyByZWNlaXZlZCBvZiBleGNlc3NpdmUgbGVuZ3RoIGNvdW50ICovCisJdW5zaWduZWQgc2hvcnQgUnhfaW52YWxpZF9DSERMQ19hZGRyX2NvdW50IFBBQ0tFRDsJLyogZnJhbWVzIHJlY2VpdmVkIHdpdGggYW4gaW52YWxpZCBDSERMQyBhZGRyZXNzIGNvdW50ICovCisJdW5zaWduZWQgc2hvcnQgUnhfaW52YWxpZF9DSERMQ19jdHJsX2NvdW50IFBBQ0tFRDsJLyogZnJhbWVzIHJlY2VpdmVkIHdpdGggYW4gaW52YWxpZCBDSERMQyBjb250cm9sIGZpZWxkIGNvdW50ICovCisJdW5zaWduZWQgc2hvcnQgUnhfaW52YWxpZF9DSERMQ190eXBlX2NvdW50IFBBQ0tFRDsJLyogZnJhbWVzIHJlY2VpdmVkIG9mIGFuIGludmFsaWQgQ0hETEMgZnJhbWUgdHlwZSBjb3VudCAqLworCXVuc2lnbmVkIHNob3J0IFJ4X1NMQVJQX2ludmFsaWRfY29kZV9jb3VudCBQQUNLRUQ7CS8qIFNMQVJQIGZyYW1lIHJlY2VpdmVkIHdpdGggYW4gaW52YWxpZCBwYWNrZXQgY29kZSAqLworCXVuc2lnbmVkIHNob3J0IFJ4X1NMQVJQX1JlcGx5X2JhZF9JUF9hZGRyIFBBQ0tFRDsJLyogU0xBUlAgUmVwbHkgcmVjZWl2ZWQgLSBiYWQgSVAgYWRkcmVzcyAqLworCXVuc2lnbmVkIHNob3J0IFJ4X1NMQVJQX1JlcGx5X2JhZF9uZXRtYXNrIFBBQ0tFRDsJLyogU0xBUlAgUmVwbHkgcmVjZWl2ZWQgLSBiYWQgbmV0bWFzayAqLworCXVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfZnJtX2Zvcm1hdF9lcnIxIFBBQ0tFRDsJCS8qIHJlc2VydmVkIGZvciBsYXRlciAqLworCXVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfZnJtX2Zvcm1hdF9lcnIyIFBBQ0tFRDsJCS8qIHJlc2VydmVkIGZvciBsYXRlciAqLworCXVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfZnJtX2Zvcm1hdF9lcnIzIFBBQ0tFRDsJCS8qIHJlc2VydmVkIGZvciBsYXRlciAqLworCXVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfZnJtX2Zvcm1hdF9lcnI0IFBBQ0tFRDsJCS8qIHJlc2VydmVkIGZvciBsYXRlciAqLworCisJLyogQ0hETEMgdGltZW91dC9yZXRyeSBzdGF0aXN0aWNzICovCisJdW5zaWduZWQgc2hvcnQgU0xBUlBfUnhfa2VlcGFsaXZlX1RPX2NvdW50IFBBQ0tFRDsJLyogdGltZW91dCBjb3VudCBmb3IgaW5jb21pbmcgU0xBUlAgZnJhbWVzICovCisJdW5zaWduZWQgc2hvcnQgU0xBUlBfUmVxdWVzdF9UT19jb3VudCBQQUNLRUQ7CQkvKiB0aW1lb3V0IGNvdW50IGZvciBTTEFSUCBSZXF1ZXN0IGZyYW1lcyAqLworCXVuc2lnbmVkIGxvbmcgVG9fcmV0cnlfcmVzZXJ2ZWRfc3RhdDEgUEFDS0VEOwkJLyogcmVzZXJ2ZWQgZm9yIGxhdGVyICovCisJdW5zaWduZWQgbG9uZyBUb19yZXRyeV9yZXNlcnZlZF9zdGF0MiBQQUNLRUQ7CQkvKiByZXNlcnZlZCBmb3IgbGF0ZXIgKi8KKwl1bnNpZ25lZCBsb25nIFRvX3JldHJ5X3Jlc2VydmVkX3N0YXQzIFBBQ0tFRDsJCS8qIHJlc2VydmVkIGZvciBsYXRlciAqLworCisJLyogQ0hETEMgbGluayBhY3RpdmUvaW5hY3RpdmUgYW5kIGxvb3BiYWNrIHN0YXRpc3RpY3MgKi8KKwl1bnNpZ25lZCBzaG9ydCBsaW5rX2FjdGl2ZV9jb3VudCBQQUNLRUQ7CQkvKiBudW1iZXIgb2YgdGltZXMgdGhhdCB0aGUgbGluayB3ZW50IGFjdGl2ZSAqLworCXVuc2lnbmVkIHNob3J0IGxpbmtfaW5hY3RpdmVfbW9kZW1fY291bnQgUEFDS0VEOwkvKiBudW1iZXIgb2YgdGltZXMgdGhhdCB0aGUgbGluayB3ZW50IGluYWN0aXZlIChtb2RlbSBmYWlsdXJlKSAqLworCXVuc2lnbmVkIHNob3J0IGxpbmtfaW5hY3RpdmVfa2VlcGFsaXZlX2NvdW50IFBBQ0tFRDsJLyogbnVtYmVyIG9mIHRpbWVzIHRoYXQgdGhlIGxpbmsgd2VudCBpbmFjdGl2ZSAoa2VlcGFsaXZlIGZhaWx1cmUpICovCisJdW5zaWduZWQgc2hvcnQgbGlua19sb29wZWRfY291bnQgUEFDS0VEOwkJLyogbGluayBsb29wZWQgY291bnQgKi8KKwl1bnNpZ25lZCBsb25nIGxpbmtfc3RhdHVzX3Jlc2VydmVkX3N0YXQxIFBBQ0tFRDsJLyogcmVzZXJ2ZWQgZm9yIGxhdGVyIHVzZSAqLworCXVuc2lnbmVkIGxvbmcgbGlua19zdGF0dXNfcmVzZXJ2ZWRfc3RhdDIgUEFDS0VEOwkvKiByZXNlcnZlZCBmb3IgbGF0ZXIgdXNlICovCisKKwkvKiBtaXNjZWxsYW5lb3VzIHN0YXRpc3RpY3MgKi8KKwl1bnNpZ25lZCBsb25nIHJlc2VydmVkX21pc2Nfc3RhdDEgUEFDS0VEOwkJLyogcmVzZXJ2ZWQgZm9yIGxhdGVyICovCisJdW5zaWduZWQgbG9uZyByZXNlcnZlZF9taXNjX3N0YXQyIFBBQ0tFRDsJCS8qIHJlc2VydmVkIGZvciBsYXRlciAqLworCXVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfbWlzY19zdGF0MyBQQUNLRUQ7CQkvKiByZXNlcnZlZCBmb3IgbGF0ZXIgKi8KKwl1bnNpZ25lZCBsb25nIHJlc2VydmVkX21pc2Nfc3RhdDQgUEFDS0VEOwkJLyogcmVzZXJ2ZWQgZm9yIGxhdGVyICovCisKK30gQ0hETENfT1BFUkFUSU9OQUxfU1RBVFNfU1RSVUNUOworCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogICAgICAgICAgICAgICAgIENvbnN0YW50cyBmb3IgdXNpbmcgYXBwbGljYXRpb24gaW50ZXJydXB0cworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiB0aGUgc3RydWN0dXJlIHVzZWQgZm9yIHRoZSBTRVRfQ0hETENfSU5URVJSVVBUX1RSSUdHRVJTL1JFQURfQ0hETENfSU5URVJSVVBUX1RSSUdHRVJTIGNvbW1hbmQgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBjaGFyIENIRExDX2ludGVycnVwdF90cmlnZ2VycyBQQUNLRUQ7CS8qIENIRExDIGludGVycnVwdCB0cmlnZ2VyIGNvbmZpZ3VyYXRpb24gKi8KKwl1bnNpZ25lZCBjaGFyIElSUSBQQUNLRUQ7CQkJLyogSVJRIHRvIGJlIHVzZWQgKi8KKwl1bnNpZ25lZCBzaG9ydCBpbnRlcnJ1cHRfdGltZXIgUEFDS0VEOwkJLyogaW50ZXJydXB0IHRpbWVyICovCisJdW5zaWduZWQgc2hvcnQgbWlzY19pbnRlcnJ1cHRfYml0cyBQQUNLRUQ7CS8qIG1pc2NlbGxhbmVvdXMgYml0cyAqLworfSBDSERMQ19JTlRfVFJJR0dFUlNfU1RSVUNUOworCisvKiAnQ0hETENfaW50ZXJydXB0X3RyaWdnZXJzJyBiaXQgc2V0dGluZ3MgKi8KKyNkZWZpbmUgQVBQX0lOVF9PTl9SWF9GUkFNRQkJMHgwMQkvKiBpbnRlcnJ1cHQgb24gRGF0YSBmcmFtZSByZWNlcHRpb24gKi8KKyNkZWZpbmUgQVBQX0lOVF9PTl9UWF9GUkFNRQkJMHgwMgkvKiBpbnRlcnJ1cHQgd2hlbiBhbiBEYXRhIGZyYW1lIG1heSBiZSB0cmFuc21pdHRlZCAqLworI2RlZmluZSBBUFBfSU5UX09OX0NPTU1BTkRfQ09NUExFVEUJMHgwNAkvKiBpbnRlcnJ1cHQgd2hlbiBhbiBpbnRlcmZhY2UgY29tbWFuZCBpcyBjb21wbGV0ZSAqLworI2RlZmluZSBBUFBfSU5UX09OX1RJTUVSCQkweDA4CS8qIGludGVycnVwdCBvbiBhIGRlZmluZWQgbWlsbGlzZWNvbmQgdGltZW91dCAqLworI2RlZmluZSBBUFBfSU5UX09OX0dMT0JBTF9FWENFUF9DT05EIAkweDEwCS8qIGludGVycnVwdCBvbiBhIGdsb2JhbCBleGNlcHRpb24gY29uZGl0aW9uICovCisjZGVmaW5lIEFQUF9JTlRfT05fQ0hETENfRVhDRVBfQ09ORAkweDIwCS8qIGludGVycnVwdCBvbiBhbiBDSERMQyBleGNlcHRpb24gY29uZGl0aW9uICovCisjZGVmaW5lIEFQUF9JTlRfT05fVFJBQ0VfREFUQV9BVkFJTAkweDgwCS8qIGludGVycnVwdCB3aGVuIHRyYWNlIGRhdGEgaXMgYXZhaWxhYmxlICovCisKKy8qIGludGVycnVwdCB0eXBlcyBpbmRpY2F0ZWQgYXQgJ2ludGVycnVwdF90eXBlJyBieXRlIG9mIHRoZSBJTlRFUlJVUFRfSU5GT1JNQVRJT05fU1RSVUNUICovCisjZGVmaW5lIE5PX0FQUF9JTlRTX1BFTkQJCTB4MDAJLyogbm8gaW50ZXJydXBzIGFyZSBwZW5kaW5nICovCisjZGVmaW5lIFJYX0FQUF9JTlRfUEVORAkJCTB4MDEJLyogYSByZWNlaXZlIGludGVycnVwdCBpcyBwZW5kaW5nICovCisjZGVmaW5lIFRYX0FQUF9JTlRfUEVORAkJCTB4MDIJLyogYSB0cmFuc21pdCBpbnRlcnJ1cHQgaXMgcGVuZGluZyAqLworI2RlZmluZSBDT01NQU5EX0NPTVBMRVRFX0FQUF9JTlRfUEVORAkweDA0CS8qIGEgJ2NvbW1hbmQgY29tcGxldGUnIGludGVycnVwdCBpcyBwZW5kaW5nICovCisjZGVmaW5lIFRJTUVSX0FQUF9JTlRfUEVORAkJMHgwOAkvKiBhIHRpbWVyIGludGVycnVwdCBpcyBwZW5kaW5nICovCisjZGVmaW5lIEdMT0JBTF9FWENFUF9DT05EX0FQUF9JTlRfUEVORCAJMHgxMAkvKiBhIGdsb2JhbCBleGNlcHRpb24gY29uZGl0aW9uIGludGVycnVwdCBpcyBwZW5kaW5nICovCisjZGVmaW5lIENIRExDX0VYQ0VQX0NPTkRfQVBQX0lOVF9QRU5EIAkweDIwCS8qIGFuIENIRExDIGV4Y2VwdGlvbiBjb25kaXRpb24gaW50ZXJydXB0IGlzIHBlbmRpbmcgKi8KKyNkZWZpbmUgVFJBQ0VfREFUQV9BVkFJTF9BUFBfSU5UX1BFTkQJMHg4MAkvKiBhIHRyYWNlIGRhdGEgYXZhaWxhYmxlIGludGVycnVwdCBpcyBwZW5kaW5nICovCisKKworLyogbW9kZW0gc3RhdHVzIGNoYW5nZXMgKi8KKyNkZWZpbmUgRENEX0hJR0gJCQkweDA4CisjZGVmaW5lIENUU19ISUdICQkJMHgyMAorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgICAgICAgICAgICAgICAgIENvbnN0YW50cyBmb3IgRGF0YSBmcmFtZSB0cmFuc21pc3Npb24KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogdGhlIERhdGEgZnJhbWUgdHJhbnNtaXQgc3RhdHVzIGVsZW1lbnQgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydCBudW1iZXJfVHhfc3RhdHVzX2VsZW1lbnRzIFBBQ0tFRDsJLyogbnVtYmVyIG9mIHRyYW5zbWl0IHN0YXR1cyBlbGVtZW50cyAqLworCXVuc2lnbmVkIGxvbmcgYmFzZV9hZGRyX1R4X3N0YXR1c19lbGVtZW50cyBQQUNLRUQ7CS8qIGJhc2UgYWRkcmVzcyBvZiB0aGUgdHJhbnNtaXQgZWxlbWVudCBsaXN0ICovCisJdW5zaWduZWQgbG9uZyBuZXh0X1R4X3N0YXR1c19lbGVtZW50X3RvX3VzZSBQQUNLRUQ7CS8qIHBvaW50ZXIgdG8gdGhlIG5leHQgdHJhbnNtaXQgZWxlbWVudCB0byBiZSB1c2VkICovCit9IENIRExDX1RYX1NUQVRVU19FTF9DRkdfU1RSVUNUOworCisvKiB0aGUgRGF0YSBmcmFtZSB0cmFuc21pdCBzdGF0dXMgZWxlbWVudCBzdHJ1Y3R1cmUgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBjaGFyIG9wcF9mbGFnIFBBQ0tFRDsJCS8qIG9wcCBmbGFnICovCisJdW5zaWduZWQgc2hvcnQgZnJhbWVfbGVuZ3RoIFBBQ0tFRDsJLyogbGVuZ3RoIG9mIHRoZSBmcmFtZSB0byBiZSB0cmFuc21pdHRlZCAqLworCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRfMSBQQUNLRUQ7CS8qIHJlc2VydmVkIGZvciBpbnRlcm5hbCB1c2UgKi8KKwl1bnNpZ25lZCBsb25nIHJlc2VydmVkXzIgUEFDS0VEOwkvKiByZXNlcnZlZCBmb3IgaW50ZXJuYWwgdXNlICovCisJdW5zaWduZWQgbG9uZyByZXNlcnZlZF8zIFBBQ0tFRDsJLyogcmVzZXJ2ZWQgZm9yIGludGVybmFsIHVzZSAqLworCXVuc2lnbmVkIGxvbmcgcHRyX2RhdGFfYmZyIFBBQ0tFRDsJLyogcG9pbnRlciB0byB0aGUgZGF0YSBhcmVhICovCit9IENIRExDX0RBVEFfVFhfU1RBVFVTX0VMX1NUUlVDVDsKKworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgICAgICAgICAgICAgICAgIENvbnN0YW50cyBmb3IgRGF0YSBmcmFtZSByZWNlcHRpb24KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogdGhlIERhdGEgZnJhbWUgcmVjZWl2ZSBzdGF0dXMgZWxlbWVudCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSAqLwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIHNob3J0IG51bWJlcl9SeF9zdGF0dXNfZWxlbWVudHMgUEFDS0VEOwkvKiBudW1iZXIgb2YgcmVjZWl2ZSBzdGF0dXMgZWxlbWVudHMgKi8KKwl1bnNpZ25lZCBsb25nIGJhc2VfYWRkcl9SeF9zdGF0dXNfZWxlbWVudHMgUEFDS0VEOwkvKiBiYXNlIGFkZHJlc3Mgb2YgdGhlIHJlY2VpdmUgZWxlbWVudCBsaXN0ICovCisJdW5zaWduZWQgbG9uZyBuZXh0X1J4X3N0YXR1c19lbGVtZW50X3RvX3VzZSBQQUNLRUQ7CS8qIHBvaW50ZXIgdG8gdGhlIG5leHQgcmVjZWl2ZSBlbGVtZW50IHRvIGJlIHVzZWQgKi8KKwl1bnNpZ25lZCBsb25nIGJhc2VfYWRkcl9SeF9idWZmZXIgUEFDS0VEOwkJLyogYmFzZSBhZGRyZXNzIG9mIHRoZSByZWNlaXZlIGRhdGEgYnVmZmVyICovCisJdW5zaWduZWQgbG9uZyBlbmRfYWRkcl9SeF9idWZmZXIgUEFDS0VEOwkJLyogZW5kIGFkZHJlc3Mgb2YgdGhlIHJlY2VpdmUgZGF0YSBidWZmZXIgKi8KK30gQ0hETENfUlhfU1RBVFVTX0VMX0NGR19TVFJVQ1Q7CisKKy8qIHRoZSBEYXRhIGZyYW1lIHJlY2VpdmUgc3RhdHVzIGVsZW1lbnQgc3RydWN0dXJlICovCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgY2hhciBvcHBfZmxhZyBQQUNLRUQ7CQkvKiBvcHAgZmxhZyAqLworCXVuc2lnbmVkIHNob3J0IGZyYW1lX2xlbmd0aCBQQUNLRUQ7ICAgLyogbGVuZ3RoIG9mIHRoZSByZWNlaXZlZCBmcmFtZSAqLworICAgICAgICB1bnNpZ25lZCBjaGFyIGVycm9yX2ZsYWcgUEFDS0VEOyAvKiBmcmFtZSBlcnJvcnMgKEhETENfU1RSRUFNSU5HX01PREUpKi8KKyAgICAgICAgdW5zaWduZWQgc2hvcnQgdGltZV9zdGFtcCBQQUNLRUQ7IC8qIHJlY2VpdmUgdGltZSBzdGFtcCAoSERMQ19TVFJFQU1JTkdfTU9ERSkgKi8KKyAgICAgICAgdW5zaWduZWQgbG9uZyByZXNlcnZlZF8xIFBBQ0tFRDsgCS8qIHJlc2VydmVkIGZvciBpbnRlcm5hbCB1c2UgKi8KKyAgICAgICAgdW5zaWduZWQgc2hvcnQgcmVzZXJ2ZWRfMiBQQUNLRUQ7IAkvKiByZXNlcnZlZCBmb3IgaW50ZXJuYWwgdXNlICovCisgICAgICAgIHVuc2lnbmVkIGxvbmcgcHRyX2RhdGFfYmZyIFBBQ0tFRDsJLyogcG9pbnRlciB0byB0aGUgZGF0YSBhcmVhICovCit9IENIRExDX0RBVEFfUlhfU1RBVFVTX0VMX1NUUlVDVDsKKworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgICAgICAgQ29uc3RhbnRzIGRlZmluaW5nIHRoZSBzaGFyZWQgbWVtb3J5IGluZm9ybWF0aW9uIGFyZWEKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogdGhlIGdsb2JhbCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAJdW5zaWduZWQgY2hhciBnbG9iYWxfc3RhdHVzIFBBQ0tFRDsJCS8qIGdsb2JhbCBzdGF0dXMgKi8KKyAJdW5zaWduZWQgY2hhciBtb2RlbV9zdGF0dXMgUEFDS0VEOwkJLyogY3VycmVudCBtb2RlbSBzdGF0dXMgKi8KKyAJdW5zaWduZWQgY2hhciBnbG9iYWxfZXhjZXBfY29uZGl0aW9ucyBQQUNLRUQ7CS8qIGdsb2JhbCBleGNlcHRpb24gY29uZGl0aW9ucyAqLworCXVuc2lnbmVkIGNoYXIgZ2xvYl9pbmZvX3Jlc2VydmVkWzVdIFBBQ0tFRDsJLyogcmVzZXJ2ZWQgKi8KKwl1bnNpZ25lZCBjaGFyIGNvZGVuYW1lWzRdIFBBQ0tFRDsJCS8qIEZpcm13YXJlIG5hbWUgKi8KKwl1bnNpZ25lZCBjaGFyIGNvZGV2ZXJzaW9uWzRdIFBBQ0tFRDsJCS8qIEZpcm13YXJlIHZlcnNpb24gKi8KK30gR0xPQkFMX0lORk9STUFUSU9OX1NUUlVDVDsKKworLyogdGhlIENIRExDIGluZm9ybWF0aW9uIHN0cnVjdHVyZSAqLwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGNoYXIgQ0hETENfc3RhdHVzIFBBQ0tFRDsJCS8qIENIRExDIHN0YXR1cyAqLworIAl1bnNpZ25lZCBjaGFyIENIRExDX2V4Y2VwX2NvbmRpdGlvbnMgUEFDS0VEOwkvKiBDSERMQyBleGNlcHRpb24gY29uZGl0aW9ucyAqLworCXVuc2lnbmVkIGNoYXIgQ0hETENfaW5mb19yZXNlcnZlZFsxNF0gUEFDS0VEOwkvKiByZXNlcnZlZCAqLworfSBDSERMQ19JTkZPUk1BVElPTl9TVFJVQ1Q7CisKKy8qIHRoZSBpbnRlcnJ1cHQgaW5mb3JtYXRpb24gc3RydWN0dXJlICovCit0eXBlZGVmIHN0cnVjdCB7CisgCXVuc2lnbmVkIGNoYXIgaW50ZXJydXB0X3R5cGUgUEFDS0VEOwkJLyogdHlwZSBvZiBpbnRlcnJ1cHQgdHJpZ2dlcmVkICovCisgCXVuc2lnbmVkIGNoYXIgaW50ZXJydXB0X3Blcm1pc3Npb24gUEFDS0VEOwkvKiBpbnRlcnJ1cHQgcGVybWlzc2lvbiBtYXNrICovCisJdW5zaWduZWQgY2hhciBpbnRfaW5mb19yZXNlcnZlZFsxNF0gUEFDS0VEOwkvKiByZXNlcnZlZCAqLworfSBJTlRFUlJVUFRfSU5GT1JNQVRJT05fU1RSVUNUOworCisvKiB0aGUgUzUwOC9GVDEgaW5mb3JtYXRpb24gc3RydWN0dXJlICovCit0eXBlZGVmIHN0cnVjdCB7CisgCXVuc2lnbmVkIGNoYXIgcGFyYWxsZWxfcG9ydF9BX2lucHV0IFBBQ0tFRDsJLyogaW5wdXQgLSBwYXJhbGxlbCBwb3J0IEEgKi8KKyAJdW5zaWduZWQgY2hhciBwYXJhbGxlbF9wb3J0X0JfaW5wdXQgUEFDS0VEOwkvKiBpbnB1dCAtIHBhcmFsbGVsIHBvcnQgQiAqLworCXVuc2lnbmVkIGNoYXIgRlQxX2luZm9fcmVzZXJ2ZWRbMTRdIFBBQ0tFRDsJLyogcmVzZXJ2ZWQgKi8KK30gRlQxX0lORk9STUFUSU9OX1NUUlVDVDsKKworLyogdGhlIHNoYXJlZCBtZW1vcnkgYXJlYSBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwlHTE9CQUxfSU5GT1JNQVRJT05fU1RSVUNUIGdsb2JhbF9pbmZvX3N0cnVjdCBQQUNLRUQ7CQkvKiB0aGUgZ2xvYmFsIGluZm9ybWF0aW9uIHN0cnVjdHVyZSAqLworCUNIRExDX0lORk9STUFUSU9OX1NUUlVDVCBDSERMQ19pbmZvX3N0cnVjdCBQQUNLRUQ7CQkvKiB0aGUgQ0hETEMgaW5mb3JtYXRpb24gc3RydWN0dXJlICovCisJSU5URVJSVVBUX0lORk9STUFUSU9OX1NUUlVDVCBpbnRlcnJ1cHRfaW5mb19zdHJ1Y3QgUEFDS0VEOwkvKiB0aGUgaW50ZXJydXB0IGluZm9ybWF0aW9uIHN0cnVjdHVyZSAqLworCUZUMV9JTkZPUk1BVElPTl9TVFJVQ1QgRlQxX2luZm9fc3RydWN0IFBBQ0tFRDsJCQkvKiB0aGUgUzUwOC9GVDEgaW5mb3JtYXRpb24gc3RydWN0dXJlICovCit9IFNIQVJFRF9NRU1PUllfSU5GT19TVFJVQ1Q7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgICAgICBVRFAgTWFuYWdlbWVudCBjb25zdGFudHMgYW5kIHN0cnVjdHVyZXMgCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIFRoZSBlbWJlZGRlZCBjb250cm9sIGJsb2NrIGZvciBVRFAgbWdtdCAKKyAgIFRoaXMgaXMgZXNzZW50aWFsbHkgYSBtYWlsYm94IHN0cnVjdHVyZSwgd2l0aG91dCB0aGUgbGFyZ2UgZGF0YSBmaWVsZCAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgIG9wcF9mbGFnIFBBQ0tFRDsgICAgICAgICAgICAgICAgICAvKiB0aGUgb3BwIGZsYWcgKi8KKyAgICAgICAgdW5zaWduZWQgY2hhciAgY29tbWFuZCBQQUNLRUQ7ICAgICAgICAgICAgICAgICAgIC8qIHRoZSB1c2VyIGNvbW1hbmQgKi8KKyAgICAgICAgdW5zaWduZWQgc2hvcnQgYnVmZmVyX2xlbmd0aCBQQUNLRUQ7ICAgICAgICAgICAgIC8qIHRoZSBkYXRhIGxlbmd0aCAqLworICAgICAgICB1bnNpZ25lZCBjaGFyICByZXR1cm5fY29kZSBQQUNLRUQ7ICAgICAgICAgICAgICAgLyogdGhlIHJldHVybiBjb2RlICovCisJdW5zaWduZWQgY2hhciAgTUJfcmVzZXJ2ZWRbTlVNQkVSX01CX1JFU0VSVkVEX0JZVEVTXSBQQUNLRUQ7CS8qIHJlc2VydmVkIGZvciBsYXRlciAqLworfSBjYmxvY2tfdDsKKworCisvKiBVRFAgbWFuYWdlbWVudCBwYWNrZXQgbGF5b3V0IChkYXRhIGFyZWEgb2YgaXAgcGFja2V0KSAqLworLyoKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBjaGFyCQlzaWduYXR1cmVbOF0JUEFDS0VEOworCXVuc2lnbmVkIGNoYXIJCXJlcXVlc3RfcmVwbHkJUEFDS0VEOworCXVuc2lnbmVkIGNoYXIJCWlkCQlQQUNLRUQ7CisJdW5zaWduZWQgY2hhcgkJcmVzZXJ2ZWRbNl0JUEFDS0VEOworCWNibG9ja190CQljYmxvY2sJCVBBQ0tFRDsKKwl1bnNpZ25lZCBjaGFyCQludW1fZnJhbWVzCVBBQ0tFRDsKKwl1bnNpZ25lZCBjaGFyCQlpc21vcmVkYXRhCVBBQ0tFRDsKKwl1bnNpZ25lZCBjaGFyIAkJZGF0YVtTSVpFT0ZfTUJfREFUQV9CRlJdIAlQQUNLRUQ7Cit9IHVkcF9tYW5hZ2VtZW50X3BhY2tldF90OworCisqLworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgY2hhcgkJbnVtX2ZyYW1lcwlQQUNLRUQ7CisJdW5zaWduZWQgY2hhcgkJaXNtb3JlZGF0YQlQQUNLRUQ7Cit9IHRyYWNlX2luZm9fdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCWlwX3BrdF90IAkJaXBfcGt0CQlQQUNLRUQ7CisJdWRwX3BrdF90CQl1ZHBfcGt0CQlQQUNLRUQ7CisJd3BfbWdtdF90CQl3cF9tZ210CQlQQUNLRUQ7CisJY2Jsb2NrX3QgICAgICAgICAgICAgICAgY2Jsb2NrICAgICAgICAgIFBBQ0tFRDsKKwl0cmFjZV9pbmZvX3QgICAgICAgCXRyYWNlX2luZm8gICAgICBQQUNLRUQ7CisJdW5zaWduZWQgY2hhciAgICAgICAgICAgZGF0YVtTSVpFT0ZfTUJfREFUQV9CRlJdICAgICAgUEFDS0VEOworfSBjaGRsY191ZHBfcGt0X3Q7CisKK3R5cGVkZWYgc3RydWN0IGZ0MV9leGVjX2NtZHsKKwl1bnNpZ25lZCBjaGFyICBjb21tYW5kIFBBQ0tFRDsgICAgICAgICAgICAgICAgICAgLyogdGhlIHVzZXIgY29tbWFuZCAqLworICAgICAgICB1bnNpZ25lZCBzaG9ydCBidWZmZXJfbGVuZ3RoIFBBQ0tFRDsgICAgICAgICAgICAgLyogdGhlIGRhdGEgbGVuZ3RoICovCisgICAgICAgIHVuc2lnbmVkIGNoYXIgIHJldHVybl9jb2RlIFBBQ0tFRDsgICAgICAgICAgICAgICAvKiB0aGUgcmV0dXJuIGNvZGUgKi8KKwl1bnNpZ25lZCBjaGFyICBNQl9yZXNlcnZlZFtOVU1CRVJfTUJfUkVTRVJWRURfQllURVNdIFBBQ0tFRDsKK30gZnQxX2V4ZWNfY21kX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBjaGFyICBvcHBfZmxhZyAJCQlQQUNLRUQ7CisJZnQxX2V4ZWNfY21kX3QgY21kCQkJCVBBQ0tFRDsKKwl1bnNpZ25lZCBjaGFyICBkYXRhW1NJWkVPRl9NQl9EQVRBX0JGUl0gICAgICAJUEFDS0VEOworfSBmdDFfZXhlY190OworCisjZGVmaW5lIFVEUE1HTVRfU0lHTkFUVVJFCSJDVFBJUEVBQiIKKworCisvKiBVRFAvSVAgcGFja2V0IChmb3IgVURQIG1hbmFnZW1lbnQpIGxheW91dCAqLworLyoKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBjaGFyCXJlc2VydmVkWzJdCVBBQ0tFRDsKKwl1bnNpZ25lZCBzaG9ydAlpcF9sZW5ndGgJUEFDS0VEOworCXVuc2lnbmVkIGNoYXIJcmVzZXJ2ZWQyWzRdCVBBQ0tFRDsKKwl1bnNpZ25lZCBjaGFyCWlwX3R0bAkJUEFDS0VEOworCXVuc2lnbmVkIGNoYXIJaXBfcHJvdG9jb2wJUEFDS0VEOworCXVuc2lnbmVkIHNob3J0CWlwX2NoZWNrc3VtCVBBQ0tFRDsKKwl1bnNpZ25lZCBsb25nCWlwX3NyY19hZGRyZXNzCVBBQ0tFRDsKKwl1bnNpZ25lZCBsb25nCWlwX2RzdF9hZGRyZXNzCVBBQ0tFRDsKKwl1bnNpZ25lZCBzaG9ydAl1ZHBfc3JjX3BvcnQJUEFDS0VEOworCXVuc2lnbmVkIHNob3J0CXVkcF9kc3RfcG9ydAlQQUNLRUQ7CisJdW5zaWduZWQgc2hvcnQJdWRwX2xlbmd0aAlQQUNLRUQ7CisJdW5zaWduZWQgc2hvcnQJdWRwX2NoZWNrc3VtCVBBQ0tFRDsKKwl1ZHBfbWFuYWdlbWVudF9wYWNrZXRfdCB1bV9wYWNrZXQgUEFDS0VEOworfSBpcF9wYWNrZXRfdDsKKyovCisKKy8qIHZhbGlkIGlwX3Byb3RvY29sIGZvciBVRFAgbWFuYWdlbWVudCAqLworI2RlZmluZSBVRFBNR01UX1VEUF9QUk9UT0NPTCAweDExCisKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGNoYXIJc3RhdHVzCQlQQUNLRUQ7CisJdW5zaWduZWQgY2hhcglkYXRhX2F2YWlsCVBBQ0tFRDsKKwl1bnNpZ25lZCBzaG9ydAlyZWFsX2xlbmd0aAlQQUNLRUQ7CisJdW5zaWduZWQgc2hvcnQJdGltZV9zdGFtcAlQQUNLRUQ7CisJdW5zaWduZWQgY2hhcglkYXRhWzFdCQlQQUNLRUQ7Cit9IHRyYWNlX3BrdF90OworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgY2hhcgllcnJvcl9mbGFnCVBBQ0tFRDsKKwl1bnNpZ25lZCBzaG9ydAl0aW1lX3N0YW1wCVBBQ0tFRDsKKwl1bnNpZ25lZCBjaGFyCXJlc2VydmVkWzEzXQlQQUNLRUQ7Cit9IGFwaV9yeF9oZHJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgICAgICBhcGlfcnhfaGRyX3QJYXBpX3J4X2hkciAgICAgIFBBQ0tFRDsKKyAgICAgICAgdm9pZCAqICAgCWRhdGEgICAgCVBBQ0tFRDsKK30gYXBpX3J4X2VsZW1lbnRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGNoYXIgCWF0dHIJCVBBQ0tFRDsKKwl1bnNpZ25lZCBjaGFyICAJcmVzZXJ2ZWRbMTVdCVBBQ0tFRDsKK30gYXBpX3R4X2hkcl90OworCit0eXBlZGVmIHN0cnVjdCB7CisJYXBpX3R4X2hkcl90IAlhcGlfdHhfaGRyCVBBQ0tFRDsKKwl2b2lkICoJCWRhdGEJCVBBQ0tFRDsKK30gYXBpX3R4X2VsZW1lbnRfdDsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogICBDb25zdGFudHMgZm9yIHRoZSBTRVRfRlQxX0NPTkZJR1VSQVRJT04vUkVBRF9GVDFfQ09ORklHVVJBVElPTiBjb21tYW5kCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIHRoZSBGVDEgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydCBmcmFtaW5nX21vZGU7CisJdW5zaWduZWQgc2hvcnQgZW5jb2RpbmdfbW9kZTsKKwl1bnNpZ25lZCBzaG9ydCBsaW5lX2J1aWxkX291dDsKKwl1bnNpZ25lZCBzaG9ydCBjaGFubmVsX2Jhc2U7CisJdW5zaWduZWQgc2hvcnQgYmF1ZF9yYXRlX2ticHM7CQkJCQkvKiB0aGUgYmF1ZCByYXRlIChpbiBrYnBzKSAqLwkKKwl1bnNpZ25lZCBzaG9ydCBjbG9ja19tb2RlOworfSBmdDFfY29uZmlnX3Q7CisKKy8qIHNldHRpbmdzIGZvciB0aGUgJ2ZyYW1pbmdfbW9kZScgKi8KKyNkZWZpbmUgRVNGX0ZSQU1JTkcgCTB4MDAJLyogRVNGIGZyYW1pbmcgKi8KKyNkZWZpbmUgRDRfRlJBTUlORyAgCTB4MDEJLyogRDQgZnJhbWluZyAqLworCisvKiBzZXR0aW5ncyBmb3IgdGhlICdlbmNvZGluZ19tb2RlJyAqLworI2RlZmluZSBCOFpTX0VOQ09ESU5HIAkweDAwCS8qIEI4WlMgZW5jb2RpbmcgKi8KKyNkZWZpbmUgQU1JX0VOQ09ESU5HCTB4MDEJLyogQU1JIGVuY29kaW5nICovCisKKy8qIHNldHRpbmdzIGZvciB0aGUgJ2xpbmVfYnVpbGRfb3V0JyAqLworI2RlZmluZSBMTl9CTERfQ1NVXzBkQl9EU1gxXzBfdG9fMTMzCTB4MDAJLyogc2V0IGJ1aWxkIG91dCB0byBDU1UgKDBkYikgb3IgRFNYLTEgKDAtMTMzZnQpICovCisjZGVmaW5lIExOX0JMRF9EU1gxXzEzM190b18yNjYJCTB4MDEJLyogc2V0IGJ1aWxkIG91dCBEU1gtMSAoMTMzLTI2NmZ0KSAqLworI2RlZmluZSBMTl9CTERfRFNYMV8yNjZfdG9fMzk5CQkweDAyCS8qIHNldCBidWlsZCBvdXQgRFNYLTEgKDI2Ni0zOTlmdCkgKi8KKyNkZWZpbmUgTE5fQkxEX0RTWDFfMzk5X3RvXzUzMwkJMHgwMwkvKiBzZXQgYnVpbGQgb3V0IERTWC0xICgzOTktNTMzZnQpICovCisjZGVmaW5lIExOX0JMRF9EU1gxXzUzM190b182NTUJCTB4MDQJLyogc2V0IGJ1aWxkIG91dCBEU1gtMSAoNTMzLTY1NWZ0KSAqLworI2RlZmluZSBMTl9CTERfQ1NVX05FR183ZEIJCTB4MDUJLyogc2V0IGJ1aWxkIG91dCB0byBDU1UgKC03LjVkYikgKi8KKyNkZWZpbmUgTE5fQkxEX0NTVV9ORUdfMTVkQgkJMHgwNgkvKiBzZXQgYnVpbGQgb3V0IHRvIENTVSAoLTE1ZGIpICovCisjZGVmaW5lIExOX0JMRF9DU1VfTkVHXzIyZEIJCTB4MDcJLyogc2V0IGJ1aWxkIG91dCB0byBDU1UgKC0yMi41ZGIpICovCisKKy8qIHNldHRpbmdzIGZvciB0aGUgJ2NoYW5uZWxfYmFzZScgKi8KKyNkZWZpbmUgTUlOX0NIQU5ORUxfQkFTRV9WQUxVRQkJMQkJLyogdGhlIG1pbmltdW0gcGVybWl0dGVkIGNoYW5uZWwgYmFzZSB2YWx1ZSAqLworI2RlZmluZSBNQVhfQ0hBTk5FTF9CQVNFX1ZBTFVFCQkyNAkJLyogdGhlIG1heGltdW0gcGVybWl0dGVkIGNoYW5uZWwgYmFzZSB2YWx1ZSAqLworCisvKiBzZXR0aW5ncyBmb3IgdGhlICdiYXVkX3JhdGVfa2JwcycgKi8KKyNkZWZpbmUgTUlOX0JBVURfUkFURV9LQlBTCQkwCQkvKiB0aGUgbWluaW11bSBwZXJtaXR0ZWQgYmF1ZCByYXRlIChrYnBzKSAqLworI2RlZmluZSBNQVhfQkFVRF9SQVRFX0tCUFMgCQkxNTM2CS8qIHRoZSBtYXhpbXVtIHBlcm1pdHRlZCBiYXVkIHJhdGUgKGticHMpICovCisjZGVmaW5lIEJBVURfUkFURV9GVDFfQVVUT19DT05GSUcJMHhGRkZGIC8qIHRoZSBiYXVkIHJhdGUgdXNlZCB0byB0cmlnZ2VyIGFuIGF1dG9tYXRpYyBGVDEgY29uZmlndXJhdGlvbiAqLworCisvKiBzZXR0aW5ncyBmb3IgdGhlICdjbG9ja19tb2RlJyAqLworI2RlZmluZSBDTE9DS19NT0RFX05PUk1BTAkJMHgwMAkvKiBjbG9jayBtb2RlIHNldCB0byBub3JtYWwgKHNsYXZlKSAqLworI2RlZmluZSBDTE9DS19NT0RFX01BU1RFUgkJMHgwMQkvKiBjbG9jayBtb2RlIHNldCB0byBtYXN0ZXIgKi8KKworCisjZGVmaW5lIEJBVURfUkFURV9GVDFfQVVUT19DT05GSUcgICAJMHhGRkZGCisjZGVmaW5lIEFVVE9fRlQxX0NPTkZJR19OT1RfQ09NUExFVEUJMHgwOAorI2RlZmluZSBBVVRPX0ZUMV9DRkdfRkFJTF9PUF9NT0RFCTB4MEMKKyNkZWZpbmUgQVVUT19GVDFfQ0ZHX0ZBSUxfSU5WQUxJRF9MSU5FIAkweDBECisKKyAKKyNpZmRlZgkJX01TQ18KKyMgIHByYWdtYQlwYWNrKCkKKyNlbmRpZgorI2VuZGlmCS8qIF9TRExBX0NIRExDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2RsYV9mci5oIGIvaW5jbHVkZS9saW51eC9zZGxhX2ZyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RmYTc3ZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvc2RsYV9mci5oCkBAIC0wLDAgKzEsNjM4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogc2RsYV9mci5oCVNhbmdvbWEgZnJhbWUgcmVsYXkgZmlybXdhcmUgQVBJIGRlZmluaXRpb25zLgorKgorKiBBdXRob3I6ICAgICAgIEdpZGVvbiBIYWNrICAJCisqCQlOZW5hZCBDb3JiaWMgPG5jb3JiaWNAc2FuZ29tYS5jb20+IAkKKyoKKyogQ29weXJpZ2h0OgkoYykgMTk5NS0yMDAwIFNhbmdvbWEgVGVjaG5vbG9naWVzIEluYy4KKyoKKyoJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyoJCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisqCQlhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyoJCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyogT2N0IDA0LCAxOTk5ICBHaWRlb24gSGFjayAgICAgVXBkYXRlZCBBUEkgc3RydWN0dXJlcworKiBKdW4gMDIsIDE5OTkgIEdpZGVvbiBIYWNrIAlNb2RpZmljYXRpb25zIGZvciBTNTE0IHN1cHBvcnQKKyogT2N0IDEyLCAxOTk3CUphc3ByZWV0IFNpbmdoCUFkZGVkIEZSX1JFQURfRExDSV9JQl9NQVBQSU5HCisqIEp1bCAyMSwgMTk5NyAJSmFzcHJlZXQgU2luZ2gJQ2hhbmdlZCBGUlJFU19UT09fTE9ORyBhbmQgRlJSRVNfVE9PX01BTlkgdG8gCisqCQkJCTB4MDUgYW5kIDB4MDYgcmVzcGVjdGl2ZWx5LgorKiBEZWMgMjMsIDE5OTYJR2VuZSBLb3ppbgl2Mi4wCisqIEFwciAyOSwgMTk5NglHZW5lIEtvemluCXYxLjAgKG1lcmdlZCB2ZXJzaW9uIFM1MDIgJiBTNTA4IGRlZmluaXRpb25zKS4KKyogU2VwIDI2LCAxOTk1CUdlbmUgS296aW4JSW5pdGlhbCB2ZXJzaW9uLgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmCV9TRExBX0ZSX0gKKyNkZWZpbmUJX1NETEFfRlJfSAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIE5vdGVzOgorICogLS0tLS0tCisgKiAxLiBBbGwgc3RydWN0dXJlcyBkZWZpbmVkIGluIHRoaXMgZmlsZSBhcmUgYnl0ZS1hbGluZWQuICAKKyAqCisgKglDb21waWxlcglQbGF0Zm9ybQorICoJLS0tLS0tLS0JLS0tLS0tLS0KKyAqCUdOVSBDCQlMaW51eAorICovCisKKyNpZm5kZWYJUEFDS0VECisjICAgIGRlZmluZQlQQUNLRUQJX19hdHRyaWJ1dGVfXygocGFja2VkKSkKKyNlbmRpZgkvKiBQQUNLRUQgKi8KKworLyogQWRhcHRlciBtZW1vcnkgbGF5b3V0ICovCisjZGVmaW5lCUZSX01CX1ZFQ1RPUgkweEUwMDAJLyogbWFpbGJveCB3aW5kb3cgdmVjdG9yICovCisjZGVmaW5lCUZSNTAyX1JYX1ZFQ1RPUgkweEEwMDAJLyogUzUwMiBkaXJlY3QgcmVjZWl2ZSB3aW5kb3cgdmVjdG9yICovCisjZGVmaW5lCUZSNTAyX01CT1hfT0ZGUwkweEY2MAkvKiBTNTAyIG1haWxib3ggb2Zmc2V0ICovCisjZGVmaW5lCUZSNTA4X01CT1hfT0ZGUwkwCS8qIFM1MDggbWFpbGJveCBvZmZzZXQgKi8KKyNkZWZpbmUJRlI1MDJfRkxBR19PRkZTCTB4MUZGMAkvKiBTNTAyIHN0YXR1cyBmbGFncyBvZmZzZXQgKi8KKyNkZWZpbmUJRlI1MDhfRkxBR19PRkZTCTB4MTAwMAkvKiBTNTA4IHN0YXR1cyBmbGFncyBvZmZzZXQgKi8KKyNkZWZpbmUJRlI1MDJfUlhNQl9PRkZTCTB4OTAwCS8qIFM1MDIgZGlyZWN0IHJlY2VpdmUgbWFpbGJveCBvZmZzZXQgKi8KKyNkZWZpbmUJRlI1MDhfVFhCQ19PRkZTCTB4MTEwMAkvKiBTNTA4IFR4IGJ1ZmZlciBpbmZvIG9mZnNldCAqLworI2RlZmluZQlGUjUwOF9SWEJDX09GRlMJMHgxMTIwCS8qIFM1MDggUnggYnVmZmVyIGluZm8gb2Zmc2V0ICovCisKKy8qIEltcG9ydGFudCBjb25zdGFudHMgKi8KKyNkZWZpbmUgRlI1MDJfTUFYX0RBVEEJNDA5NgkvKiBtYXhpbXVtIGRhdGEgYnVmZmVyIGxlbmd0aCAqLworI2RlZmluZSBGUjUwOF9NQVhfREFUQQk0MDgwCS8qIG1heGltdW0gZGF0YSBidWZmZXIgbGVuZ3RoICovCisjZGVmaW5lIE1JTl9MR1RIX0ZSX0RBVEFfQ0ZHICAgICAgICAgMzAwICAgICAvKiBtaW4gSW5mb3JtYXRpb24gZnJhbWUgbGVuZ3RoCisoZm9yIGNvbmZpZ3VyYXRpb24gcHVycG9zZXMpICovCisjZGVmaW5lIEZSX01BWF9OT19EQVRBX0JZVEVTX0lOX0ZSQU1FICAxNTM1NCAJLyogbWF4IEluZm9ybWF0aW9uIGZyYW1lIGxlbmd0aCAqLworIAorI2RlZmluZSBISUdIRVNUX1ZBTElEX0RMQ0kJOTkxCisKKy8qKioqKiogRGF0YSBTdHJ1Y3R1cmVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEZyYW1lIHJlbGF5IGNvbW1hbmQgYmxvY2suCisgKi8KK3R5cGVkZWYgc3RydWN0IGZyX2NtZAoreworCXVuc2lnbmVkIGNoYXIgIGNvbW1hbmQJUEFDS0VEOwkvKiBjb21tYW5kIGNvZGUgKi8KKwl1bnNpZ25lZCBzaG9ydCBsZW5ndGgJUEFDS0VEOwkvKiBsZW5ndGggb2YgZGF0YSBidWZmZXIgKi8KKwl1bnNpZ25lZCBjaGFyICByZXN1bHQJUEFDS0VEOwkvKiByZXR1cm4gY29kZSAqLworCXVuc2lnbmVkIHNob3J0IGRsY2kJUEFDS0VEOwkvKiBETENJIG51bWJlciAqLworCXVuc2lnbmVkIGNoYXIgIGF0dHIJUEFDS0VEOwkvKiBGRUNOLCBCRUNOLCBERSBhbmQgQy9SIGJpdHMgKi8KKwl1bnNpZ25lZCBzaG9ydCByeGxvc3QxCVBBQ0tFRDsJLyogZnJhbWVzIGRpc2NhcmRlZCBhdCBpbnQuIGxldmVsICovCisJdW5zaWduZWQgbG9uZyAgcnhsb3N0MglQQUNLRUQ7CS8qIGZyYW1lcyBkaXNjYXJkZWQgYXQgYXBwLiBsZXZlbCAqLworCXVuc2lnbmVkIGNoYXIgIHJzcnZbMl0JUEFDS0VEOwkvKiByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqLworfSBmcl9jbWRfdDsKKworLyogJ2NvbW1hbmQnIGZpZWxkIGRlZmluZXMgKi8KKyNkZWZpbmUJRlJfV1JJVEUJCTB4MDEKKyNkZWZpbmUJRlJfUkVBRAkJCTB4MDIKKyNkZWZpbmUJRlJfSVNTVUVfSVNfRlJBTUUJMHgwMworI2RlZmluZSBGUl9TRVRfQ09ORklHCQkweDEwCisjZGVmaW5lIEZSX1JFQURfQ09ORklHCQkweDExCisjZGVmaW5lIEZSX0NPTU1fRElTQUJMRQkJMHgxMgorI2RlZmluZSBGUl9DT01NX0VOQUJMRQkJMHgxMworI2RlZmluZSBGUl9SRUFEX1NUQVRVUwkJMHgxNAorI2RlZmluZSBGUl9SRUFEX1NUQVRJU1RJQ1MJMHgxNQorI2RlZmluZSBGUl9GTFVTSF9TVEFUSVNUSUNTCTB4MTYKKyNkZWZpbmUJRlJfTElTVF9BQ1RJVkVfRExDSQkweDE3CisjZGVmaW5lIEZSX0ZMVVNIX0RBVEFfQlVGRkVSUwkweDE4CisjZGVmaW5lIEZSX1JFQURfQUREX0RMQ19TVEFUUwkweDE5CisjZGVmaW5lCUZSX0FERF9ETENJCQkweDIwCisjZGVmaW5lCUZSX0RFTEVURV9ETENJCQkweDIxCisjZGVmaW5lCUZSX0FDVElWQVRFX0RMQ0kJMHgyMgorI2RlZmluZQlGUl9ERUFDVElWQVRFX0RMQ0kJMHgyMgorI2RlZmluZSBGUl9SRUFEX01PREVNX1NUQVRVUwkweDMwCisjZGVmaW5lIEZSX1NFVF9NT0RFTV9TVEFUVVMJMHgzMQorI2RlZmluZSBGUl9SRUFEX0VSUk9SX1NUQVRTCTB4MzIKKyNkZWZpbmUgRlJfRkxVU0hfRVJST1JfU1RBVFMJMHgzMworI2RlZmluZSBGUl9SRUFEX0RMQ0lfSUJfTUFQUElORyAweDM0CisjZGVmaW5lIEZSX1JFQURfQ09ERV9WRVJTSU9OCTB4NDAKKyNkZWZpbmUJRlJfU0VUX0lOVFJfTU9ERQkweDUwCisjZGVmaW5lCUZSX1JFQURfSU5UUl9NT0RFCTB4NTEKKyNkZWZpbmUgRlJfU0VUX1RSQUNFX0NPTkZJRwkweDYwCisjZGVmaW5lIEZSX0ZUMV9TVEFUVVNfQ1RSTCAJMHg4MAorI2RlZmluZSBGUl9TRVRfRlQxX01PREUJCTB4ODEKKworLyogU3BlY2lhbCBVRFAgZHJpdmVycyBtYW5hZ2VtZW50IGNvbW1hbmRzICovCisjZGVmaW5lIEZQSVBFX0VOQUJMRV9UUkFDSU5HICAgICAgICAgIAkweDQxCisjZGVmaW5lIEZQSVBFX0RJU0FCTEVfVFJBQ0lORwkJMHg0MgorI2RlZmluZSBGUElQRV9HRVRfVFJBQ0VfSU5GTyAgICAgICAgICAgIDB4NDMKKyNkZWZpbmUgRlBJUEVfRlQxX1JFQURfU1RBVFVTICAgICAgICAgICAweDQ0CisjZGVmaW5lIEZQSVBFX0RSSVZFUl9TVEFUX0lGU0VORCAgICAgICAgMHg0NQorI2RlZmluZSBGUElQRV9EUklWRVJfU1RBVF9JTlRSICAgICAgICAgIDB4NDYKKyNkZWZpbmUgRlBJUEVfRFJJVkVSX1NUQVRfR0VOICAgICAgICAgICAweDQ3CisjZGVmaW5lIEZQSVBFX0ZMVVNIX0RSSVZFUl9TVEFUUyAgICAgICAgMHg0OAorI2RlZmluZSBGUElQRV9ST1VURVJfVVBfVElNRSAgICAgICAgICAgIDB4NDkKKworLyogJ3Jlc3VsdCcgZmllbGQgZGVmaW5lcyAqLworI2RlZmluZSBGUlJFU19PSwkJMHgwMAkvKiBjb21tYW5kIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseSAqLworI2RlZmluZQlGUlJFU19ESVNBQkxFRAkJMHgwMQkvKiBjb21tdW5pY2F0aW9ucyBub3QgZW5hYmxlZCAqLworI2RlZmluZQlGUlJFU19JTk9QRVJBVElWRQkweDAyCS8qIGNoYW5uZWwgaW5vcGVyYXRpdmUgKi8KKyNkZWZpbmUJRlJSRVNfRExDSV9JTkFDVElWRQkweDAzCS8qIERMQ0kgaXMgaW5hY3RpdmUgKi8KKyNkZWZpbmUJRlJSRVNfRExDSV9JTlZBTElECTB4MDQJLyogRExDSSBpcyBub3QgY29uZmlndXJlZCAqLworI2RlZmluZQlGUlJFU19UT09fTE9ORwkJMHgwNQorI2RlZmluZQlGUlJFU19UT09fTUFOWQkJMHgwNgorI2RlZmluZQlGUlJFU19DSVJfT1ZFUkZMT1cJMHgwNwkvKiBUeCB0aHJvdWdocHV0IGhhcyBleGNlZWRlZCBDSVIgKi8KKyNkZWZpbmUJRlJSRVNfQlVGRkVSX09WRVJGTE9XCTB4MDgKKyNkZWZpbmUJRlJSRVNfTU9ERU1fRkFJTFVSRQkweDEwCS8qIERDRCBhbmQvb3IgQ1RTIGRyb3BwZWQgKi8KKyNkZWZpbmUJRlJSRVNfQ0hBTk5FTF9ET1dOCTB4MTEJLyogY2hhbm5lbCBiZWNhbWUgaW5vcGVyYXRpdmUgKi8KKyNkZWZpbmUJRlJSRVNfQ0hBTk5FTF9VUAkweDEyCS8qIGNoYW5uZWwgYmVjYW1lIG9wZXJhdGl2ZSAqLworI2RlZmluZQlGUlJFU19ETENJX0NIQU5HRQkweDEzCS8qIERMQ0kgc3RhdHVzIChvciBudW1iZXIpIGNoYW5nZWQgKi8KKyNkZWZpbmUJRlJSRVNfRExDSV9NSVNNQVRDSAkweDE0CisjZGVmaW5lCUZSUkVTX0lOVkFMSURfQ01ECTB4MUYJLyogaW52YWxpZCBjb21tYW5kICovCisKKy8qICdhdHRyJyBmaWVsZCBkZWZpbmVzICovCisjZGVmaW5lCUZSQVRUUl8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBGcmFtZSByZWxheSBtYWlsYm94LgorICoJVGhpcyBzdHJ1Y3R1cmUgaXMgbG9jYXRlZCBhdCBvZmZzZXQgRlI1MD9fTUJPWF9PRkZTIGludG8gRlJfTUJfVkVDVE9SLgorICoJRm9yIFM1MDIgaXQgaXMgYWxzbyBsb2NhdGVkIGF0IG9mZnNldCBGUjUwMl9SWE1CX09GRlMgaW50bworICoJRlI1MDJfUlhfVkVDVE9SLgorICovCit0eXBlZGVmIHN0cnVjdCBmcl9tYm94Cit7CisJdW5zaWduZWQgY2hhciBvcGZsYWcJUEFDS0VEOwkvKiAwMGg6IGV4ZWN1dGlvbiBmbGFnICovCisJZnJfY21kX3QgY21kCQlQQUNLRUQ7CS8qIDAxaDogY29tbWFuZCBibG9jayAqLworCXVuc2lnbmVkIGNoYXIgZGF0YVsxXQlQQUNLRUQ7CS8qIDEwaDogdmFyaWFibGUgbGVuZ3RoIGRhdGEgYnVmZmVyICovCit9IGZyX21ib3hfdDsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBTNTAyIGZyYW1lIHJlbGF5IHN0YXR1cyBmbGFncy4KKyAqCVRoaXMgc3RydWN0dXJlIGlzIGxvY2F0ZWQgYXQgb2Zmc2V0IEZSNTAyX0ZMQUdfT0ZGUyBpbnRvIEZSX01CX1ZFQ1RPUi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QJZnI1MDJfZmxhZ3MKK3sJCisJdW5zaWduZWQgY2hhciByc3J2MVsxXQlQQUNLRUQ7CS8qIDAwaDogKi8KKwl1bnNpZ25lZCBjaGFyIHR4X3JlYWR5CVBBQ0tFRDsJLyogMDFoOiBUeCBidWZmZXIgYXZhaWxhYmxlICovCisJdW5zaWduZWQgY2hhciByeF9yZWFkeQlQQUNLRUQ7CS8qIDAyaDogUnggZnJhbWUgYXZhaWxhYmxlICovCisJdW5zaWduZWQgY2hhciBldmVudAlQQUNLRUQ7CS8qIDAzaDogYXN5bmNocm9ub3VzIGV2ZW50ICovCisJdW5zaWduZWQgY2hhciBtc3RhdHVzCVBBQ0tFRDsJLyogMDRoOiBtb2RlbSBzdGF0dXMgKi8KKwl1bnNpZ25lZCBjaGFyIHJzcnYyWzhdCVBBQ0tFRDsJLyogMDVoOiAqLworCXVuc2lnbmVkIGNoYXIgaWZsYWcJUEFDS0VEOwkvKiAwRGg6IGludGVycnVwdCBmbGFnICovCisJdW5zaWduZWQgY2hhciBpbWFzawlQQUNLRUQ7CS8qIDBFaDogaW50ZXJydXB0IG1hc2sgKi8KK30gZnI1MDJfZmxhZ3NfdDsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBTNTA4IGZyYW1lIHJlbGF5IHN0YXR1cyBmbGFncy4KKyAqCVRoaXMgc3RydWN0dXJlIGlzIGxvY2F0ZWQgYXQgb2Zmc2V0IEZSNTA4X0ZMQUdfT0ZGUyBpbnRvIEZSX01CX1ZFQ1RPUi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QJZnI1MDhfZmxhZ3MKK3sKKwl1bnNpZ25lZCBjaGFyIHJzcnYxWzNdCVBBQ0tFRDsJLyogMDBoOiByZXNlcnZlZCAqLworCXVuc2lnbmVkIGNoYXIgZXZlbnQJUEFDS0VEOwkvKiAwM2g6IGFzeW5jaHJvbm91cyBldmVudCAqLworCXVuc2lnbmVkIGNoYXIgbXN0YXR1cwlQQUNLRUQ7CS8qIDA0aDogbW9kZW0gc3RhdHVzICovCisJdW5zaWduZWQgY2hhciByc3J2MlsxMV0JUEFDS0VEOwkvKiAwNWg6IHJlc2VydmVkICovCisJdW5zaWduZWQgY2hhciBpZmxhZwlQQUNLRUQ7CS8qIDEwaDogaW50ZXJydXB0IGZsYWcgKi8KKwl1bnNpZ25lZCBjaGFyIGltYXNrCVBBQ0tFRDsJLyogMTFoOiBpbnRlcnJ1cHQgbWFzayAqLworCXVuc2lnbmVkIGxvbmcgdHNlX29mZnMJUEFDS0VEOwkvKiAxMmg6IFR4IHN0YXR1cyBlbGVtZW50ICovCisJdW5zaWduZWQgc2hvcnQgZGxjaQlQQUNLRUQ7IC8qIDE2aDogRExDSSBOVU1CRVIgKi8KK30gZnI1MDhfZmxhZ3NfdDsKKworLyogJ2V2ZW50JyBmaWVsZCBkZWZpbmVzICovCisjZGVmaW5lCUZSX0VWRU5UX1NUQVRVUwkJMHgwMQkvKiBjaGFubmVsIHN0YXR1cyBjaGFuZ2UgKi8KKyNkZWZpbmUJRlJfRVZFTlRfRExDX1NUQVRVUwkweDAyCS8qIERMQyBzdGF0dXMgY2hhbmdlICovCisjZGVmaW5lCUZSX0VWRU5UX0JBRF9ETENJCTB4MDQJLyogRlNSIGluY2x1ZGVkIHdyb25nIERMQ0kgKi8KKyNkZWZpbmUJRlJfRVZFTlRfTElOS19ET1dOCTB4NDAJLyogRENEIG9yIENUUyBsb3cgKi8KKworLyogJ21zdGF0dXMnIGZpZWxkIGRlZmluZXMgKi8KKyNkZWZpbmUJRlJfTURNX0RDRAkJMHgwOAkvKiBtZG1fc3RhdHVzOiBEQ0QgKi8KKyNkZWZpbmUJRlJfTURNX0NUUwkJMHgyMAkvKiBtZG1fc3RhdHVzOiBDVFMgKi8KKworLyogJ2lmbGFnJyAmICdpbWFzaycgZmllbGRzIGRlZmluZXMgKi8KKyNkZWZpbmUJRlJfSU5UUl9SWFJEWQkJMHgwMQkvKiBSeCByZWFkeSAqLworI2RlZmluZQlGUl9JTlRSX1RYUkRZCQkweDAyCS8qIFR4IHJlYWR5ICovCisjZGVmaW5lCUZSX0lOVFJfTU9ERU0JCTB4MDQJLyogbW9kZW0gc3RhdHVzIGNoYW5nZSAoRENELCBDVFMpICovCisjZGVmaW5lCUZSX0lOVFJfUkVBRFkJCTB4MDgJLyogaW50ZXJmYWNlIGNvbW1hbmQgY29tcGxldGVkICovCisjZGVmaW5lCUZSX0lOVFJfRExDCQkweDEwCS8qIERMQyBzdGF0dXMgY2hhbmdlICovCisjZGVmaW5lCUZSX0lOVFJfVElNRVIJCTB4MjAJLyogbWlsbGlzZWNvbmQgdGltZXIgKi8KKyNkZWZpbmUgRlJfSU5UUl9UWF9NVUxUX0RMQ0lzCTB4ODAJLyogVHggaW50ZXJydXB0IG9uIG11bHRpcGxlIERMQ0lzICovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBSZWNlaXZlIEJ1ZmZlciBDb25maWd1cmF0aW9uIEluZm8uIFM1MDggb25seSEKKyAqCVRoaXMgc3RydWN0dXJlIGlzIGxvY2F0ZWQgYXQgb2Zmc2V0IEZSNTA4X1JYQkNfT0ZGUyBpbnRvIEZSX01CX1ZFQ1RPUi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QJZnJfYnVmX2luZm8KK3sKKwl1bnNpZ25lZCBzaG9ydCByc2VfbnVtCVBBQ0tFRDsJLyogMDBoOiBudW1iZXIgb2Ygc3RhdHVzIGVsZW1lbnRzICovCisJdW5zaWduZWQgbG9uZyByc2VfYmFzZQlQQUNLRUQ7CS8qIDAyaDogcmVjZWl2ZSBzdGF0dXMgYXJyYXkgYmFzZSAqLworCXVuc2lnbmVkIGxvbmcgcnNlX25leHQJUEFDS0VEOwkvKiAwNmg6IG5leHQgc3RhdHVzIGVsZW1lbnQgKi8KKwl1bnNpZ25lZCBsb25nIGJ1Zl9iYXNlCVBBQ0tFRDsJLyogMEFoOiByb3RhdGlvbmFsIGJ1ZmZlciBiYXNlICovCisJdW5zaWduZWQgc2hvcnQgcmVzZXJ2ZWQJUEFDS0VEOwkvKiAwRWg6ICAqLworCXVuc2lnbmVkIGxvbmcgYnVmX3RvcAlQQUNLRUQ7CS8qIDEwaDogcm90YXRpb25hbCBidWZmZXIgdG9wICovCit9IGZyX2J1Zl9pbmZvX3Q7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogQnVmZmVyIFN0YXR1cyBFbGVtZW50LiBTNTA4IG9ubHkhCisgKglBcnJheSBvZiBzdHJ1Y3R1cmVzIG9mIHRoaXMgdHlwZSBpcyBsb2NhdGVkIGF0IG9mZnNldCBkZWZpbmVkIGJ5IHRoZQorICoJJ3JzZV9iYXNlJyBmaWVsZCBvZiB0aGUgZnJCdWZJbmZvX3Qgc3RydWN0dXJlIGludG8gYWJzb2x1dGUgYWRhcHRlcgorICoJbWVtb3J5IGFkZHJlc3Mgc3BhY2UuCisgKi8KK3R5cGVkZWYgc3RydWN0CWZyX3J4X2J1Zl9jdGwKK3sKKwl1bnNpZ25lZCBjaGFyIGZsYWcJUEFDS0VEOwkvKiAwMGg6IHJlYWR5IGZsYWcgKi8KKwl1bnNpZ25lZCBzaG9ydCBsZW5ndGgJUEFDS0VEOwkvKiAwMWg6IGZyYW1lIGxlbmd0aCAqLworCXVuc2lnbmVkIHNob3J0IGRsY2kJUEFDS0VEOwkvKiAwM2g6IERMQ0kgKi8KKwl1bnNpZ25lZCBjaGFyIGF0dHIJUEFDS0VEOwkvKiAwNWg6IEZFQ04vQkVDTi9ERS9DUiAqLworCXVuc2lnbmVkIHNob3J0IHRtc3RhbXAJUEFDS0VEOwkvKiAwNmg6IHRpbWUgc3RhbXAgKi8KKwl1bnNpZ25lZCBzaG9ydCByc3J2WzJdCVBBQ0tFRDsgLyogMDhoOiAgKi8KKwl1bnNpZ25lZCBsb25nIG9mZnNldAlQQUNLRUQ7CS8qIDBDaDogYnVmZmVyIGFic29sdXRlIGFkZHJlc3MgKi8KK30gZnJfcnhfYnVmX2N0bF90OworCit0eXBlZGVmIHN0cnVjdCAgZnJfdHhfYnVmX2N0bAoreworICAgICAgICB1bnNpZ25lZCBjaGFyIGZsYWcgICAgICBQQUNLRUQ7IC8qIDAwaDogcmVhZHkgZmxhZyAqLworCXVuc2lnbmVkIHNob3J0IHJzcnYwWzJdCVBBQ0tFRDsJLyogMDFoOiAqLworICAgICAgICB1bnNpZ25lZCBzaG9ydCBsZW5ndGggICBQQUNLRUQ7IC8qIDA1aDogZnJhbWUgbGVuZ3RoICovCisgICAgICAgIHVuc2lnbmVkIHNob3J0IGRsY2kgICAgIFBBQ0tFRDsgLyogMDdoOiBETENJICovCisgICAgICAgIHVuc2lnbmVkIGNoYXIgYXR0ciAgICAgIFBBQ0tFRDsgLyogMDloOiBGRUNOL0JFQ04vREUvQ1IgKi8KKyAgICAgICAgdW5zaWduZWQgc2hvcnQgcnNydjEgCVBBQ0tFRDsgLyogMEFoOiAgKi8KKyAgICAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQgICAgUEFDS0VEOyAvKiAwQ2g6IGJ1ZmZlciBhYnNvbHV0ZSBhZGRyZXNzICovCit9IGZyX3R4X2J1Zl9jdGxfdDsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBHbG9iYWwgQ29uZmlndXJhdGlvbiBCbG9jay4gUGFzc2VkIHRvIEZSX1NFVF9DT05GSUcgY29tbWFuZCB3aGVuIGRsY2kgPT0gMC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QJZnJfY29uZgoreworCXVuc2lnbmVkIHNob3J0IHN0YXRpb24JUEFDS0VEOwkvKiAwMGg6IENQRS9Ob2RlICovCisJdW5zaWduZWQgc2hvcnQgb3B0aW9ucwlQQUNLRUQ7CS8qIDAyaDogY29uZmlndXJhdGlvbiBvcHRpb25zICovCisJdW5zaWduZWQgc2hvcnQga2JwcwlQQUNLRUQ7CS8qIDA0aDogYmF1ZCByYXRlIGluIGticHMgKi8KKwl1bnNpZ25lZCBzaG9ydCBwb3J0CVBBQ0tFRDsJLyogMDZoOiBSUy0yMzIvVi4zNSAqLworCXVuc2lnbmVkIHNob3J0IG10dQlQQUNLRUQ7CS8qIDA4aDogbWF4LiB0cmFuc21pdCBsZW5ndGggKi8KKwl1bnNpZ25lZCBzaG9ydCB0MzkxCVBBQ0tFRDsJLyogMEFoOiAgKi8KKwl1bnNpZ25lZCBzaG9ydCB0MzkyCVBBQ0tFRDsJLyogMENoOiAgKi8KKwl1bnNpZ25lZCBzaG9ydCBuMzkxCVBBQ0tFRDsJLyogMEVoOiAgKi8KKwl1bnNpZ25lZCBzaG9ydCBuMzkyCVBBQ0tFRDsJLyogMTBoOiAgKi8KKwl1bnNpZ25lZCBzaG9ydCBuMzkzCVBBQ0tFRDsJLyogMTJoOiAgKi8KKwl1bnNpZ25lZCBzaG9ydCBjaXJfZndkCVBBQ0tFRDsJLyogMTRoOiAgKi8KKwl1bnNpZ25lZCBzaG9ydCBiY19md2QJUEFDS0VEOwkvKiAxNmg6ICAqLworCXVuc2lnbmVkIHNob3J0IGJlX2Z3ZAlQQUNLRUQ7CS8qIDE4aDogICovCisJdW5zaWduZWQgc2hvcnQgY2lyX2J3ZAlQQUNLRUQ7CS8qIDFBaDogICovCisJdW5zaWduZWQgc2hvcnQgYmNfYndkCVBBQ0tFRDsJLyogMUNoOiAgKi8KKwl1bnNpZ25lZCBzaG9ydCBiZV9id2QJUEFDS0VEOwkvKiAxRWg6ICAqLworCXVuc2lnbmVkIHNob3J0IGRsY2lbMF0JUEFDS0VEOwkvKiAyMGg6ICAqLworfSBmcl9jb25mX3Q7CisKKy8qICdzdGF0aW9uX3R5cGUnIGRlZmluZXMgKi8KKyNkZWZpbmUJRlJDRkdfU1RBVElPTl9DUEUJMAorI2RlZmluZQlGUkNGR19TVEFUSU9OX05PREUJMQorCisvKiAnY29uZl9mbGFncycgZGVmaW5lcyAqLworI2RlZmluZQlGUkNGR19JR05PUkVfVFhfQ0lSCTB4MDAwMQorI2RlZmluZQlGUkNGR19JR05PUkVfUlhfQ0lSCTB4MDAwMgorI2RlZmluZQlGUkNGR19ET05UX1JFVFJBTlNNSVQJMHgwMDA0CisjZGVmaW5lCUZSQ0ZHX0lHTk9SRV9DQlMJMHgwMDA4CisjZGVmaW5lCUZSQ0ZHX1RIUk9VR0hQVVQJMHgwMDEwCS8qIGVuYWJsZSB0aHJvdWdocHV0IGNhbGN1bGF0aW9uICovCisjZGVmaW5lCUZSQ0ZHX0RJUkVDVF9SWAkJMHgwMDgwCS8qIGVuYWJsZSBkaXJlY3QgcmVjZWl2ZSBidWZmZXIgKi8KKyNkZWZpbmUJRlJDRkdfQVVUT19DT05GSUcJMHg4MDAwCS8qIGVuYWJsZSAgYXV0byBETENJIGNvbmZpZ3VyYXRpb24gKi8KKworLyogJ2JhdWRfcmF0ZScgZGVmaW5lcyAqLworI2RlZmluZQlGUkNGR19CQVVEXzEyMDAJCTEyCisjZGVmaW5lCUZSQ0ZHX0JBVURfMjQwMAkJMjQKKyNkZWZpbmUJRlJDRkdfQkFVRF80ODAwCQk0OAorI2RlZmluZQlGUkNGR19CQVVEXzk2MDAJCTk2CisjZGVmaW5lCUZSQ0ZHX0JBVURfMTkyMDAJMTkKKyNkZWZpbmUJRlJDRkdfQkFVRF8zODQwMAkzOAorI2RlZmluZQlGUkNGR19CQVVEXzU2MDAwCTU2CisjZGVmaW5lCUZSQ0ZHX0JBVURfNjQwMDAJNjQKKyNkZWZpbmUJRlJDRkdfQkFVRF8xMjgwMDAJMTI4CisKKy8qICdwb3J0X21vZGUnIGRlZmluZXMgKi8KKyNkZWZpbmUJRlJDRkdfTU9ERV9FWFRfQ0xLCTB4MDAwMAorI2RlZmluZQlGUkNGR19NT0RFX0lOVF9DTEsJMHgwMDAxCisjZGVmaW5lCUZSQ0ZHX01PREVfVjM1CQkweDAwMDAJLyogUzUwOCBvbmx5ICovCisjZGVmaW5lCUZSQ0ZHX01PREVfUlMyMzIJMHgwMDAyCS8qIFM1MDggb25seSAqLworCisvKiBkZWZpbmVzIGZvciBsaW5lIHRyYWNpbmcgKi8KKworLyogdGhlIGxpbmUgdHJhY2Ugc3RhdHVzIGVsZW1lbnQgcHJlc2VudGVkIGJ5IHRoZSBmcmFtZSByZWxheSBjb2RlICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgZmxhZyAgICAgIFBBQ0tFRDsgLyogcmVhZHkgZmxhZyAqLworICAgICAgICB1bnNpZ25lZCBzaG9ydCBsZW5ndGggICBQQUNLRUQ7IC8qIHRyYWNlIGxlbmd0aCAqLworICAgICAgICB1bnNpZ25lZCBjaGFyIHJzcnYwWzJdICBQQUNLRUQ7IC8qIHJlc2VydmVkICovCisgICAgICAgIHVuc2lnbmVkIGNoYXIgYXR0ciAgICAgIFBBQ0tFRDsgLyogdHJhY2UgYXR0cmlidXRlcyAqLworICAgICAgICB1bnNpZ25lZCBzaG9ydCB0bXN0YW1wICBQQUNLRUQ7IC8qIHRpbWUgc3RhbXAgKi8KKyAgICAgICAgdW5zaWduZWQgY2hhciByc3J2MVs0XSAgUEFDS0VEOyAvKiByZXNlcnZlZCAqLworICAgICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCAgICBQQUNLRUQ7IC8qIGJ1ZmZlciBhYnNvbHV0ZSBhZGRyZXNzICovCit9IGZyX3RyY19lbF90OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgc3RhdHVzICAgIAlQQUNLRUQ7IC8qIHN0YXR1cyBmbGFnICovCisJdW5zaWduZWQgY2hhciBkYXRhX3Bhc3NlZAlQQUNLRUQ7CS8qIDAgaWYgbm8gZGF0YSBwYXNzZWQsIDEgaWYgKi8KKwkJCQkJCS8qIGRhdGEgcGFzc2VkICovCisgICAgICAgIHVuc2lnbmVkIHNob3J0IGxlbmd0aCAgIAlQQUNLRUQ7IC8qIGZyYW1lIGxlbmd0aCAqLworICAgICAgICB1bnNpZ25lZCBzaG9ydCB0bXN0YW1wICAJUEFDS0VEOyAvKiB0aW1lIHN0YW1wICovCit9IGZwaXBlbW9uX3RyY19oZHJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCWZwaXBlbW9uX3RyY19oZHJfdCBmcGlwZW1vbl90cmNfaGRyCQkJUEFDS0VEOworICAgICAgICB1bnNpZ25lZCBjaGFyIGRhdGFbRlJfTUFYX05PX0RBVEFfQllURVNfSU5fRlJBTUVdCVBBQ0tFRDsKK30gZnBpcGVtb25fdHJjX3Q7CisKKy8qIGJpdCBzZXR0aW5ncyBmb3IgdGhlICdzdGF0dXMnIGJ5dGUgIC0gbm90ZSB0aGF0IGJpdHMgMSwgMiBhbmQgMyBhcmUgdXNlZCAqLworLyogZm9yIHJldHVybmluZyB0aGUgbnVtYmVyIG9mIGZyYW1lcyBiZWluZyBwYXNzZWQgdG8gZnBpcGVtb24gKi8KKyNkZWZpbmUgVFJDX09VVEdPSU5HX0ZSTQkweDAxCisjZGVmaW5lIFRSQ19BQk9SVF9FUlJPUiAgICAgICAgIDB4MTAKKyNkZWZpbmUgVFJDX0NSQ19FUlJPUiAgICAgICAgICAgMHgyMAorI2RlZmluZSBUUkNfT1ZFUlJVTl9FUlJPUiAgICAgICAweDQwCisjZGVmaW5lIE1PUkVfVFJDX0RBVEEJCTB4ODAKKworI2RlZmluZSBNQVhfRlJNU19UUkFDRUQJCTB4MDcKKworI2RlZmluZSBOT19UUkNfRUxFTUVOVFNfT0ZGCQkweDkwMDAKKyNkZWZpbmUgQkFTRV9UUkNfRUxFTUVOVFNfT0ZGCQkweDkwMDIKKyNkZWZpbmUgVFJDX0FDVElWRQkJCTB4MDEKKyNkZWZpbmUgRkxVU0hfVFJDX0JVRkZFUlMgCQkweDAyCisjZGVmaW5lIEZMVVNIX1RSQ19TVEFUSVNUSUNTCQkweDA0CisjZGVmaW5lIFRSQ19TSUdOQUxMSU5HX0ZSTVMJCTB4MTAKKyNkZWZpbmUgVFJDX0lORk9fRlJNUwkJCTB4MjAKKyNkZWZpbmUgQUNUSVZBVEVfVFJDCShUUkNfQUNUSVZFIHwgVFJDX1NJR05BTExJTkdfRlJNUyB8IFRSQ19JTkZPX0ZSTVMpCisjZGVmaW5lIFJFU0VUX1RSQwkoRkxVU0hfVFJDX0JVRkZFUlMgfCBGTFVTSF9UUkNfU1RBVElTVElDUykKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBDaGFubmVsIGNvbmZpZ3VyYXRpb24uCisgKglUaGlzIHN0cnVjdHVyZSBpcyBwYXNzZWQgdG8gdGhlIEZSX1NFVF9DT05GSUcgY29tbWFuZCB3aGVuIGRsY2kgIT0gMC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QJZnJfZGxjX2NvbmYKK3sKKwl1bnNpZ25lZCBzaG9ydCBjb25mX2ZsYWdzCVBBQ0tFRDsJLyogMDBoOiBjb25maWd1cmF0aW9uIGJpdHMgKi8KKwl1bnNpZ25lZCBzaG9ydCBjaXJfZndkCQlQQUNLRUQ7CS8qIDAyaDogICovCisJdW5zaWduZWQgc2hvcnQgYmNfZndkCQlQQUNLRUQ7CS8qIDA0aDogICovCisJdW5zaWduZWQgc2hvcnQgYmVfZndkCQlQQUNLRUQ7CS8qIDA2aDogICovCisJdW5zaWduZWQgc2hvcnQgY2lyX2J3ZAkJUEFDS0VEOwkvKiAwOGg6ICAqLworCXVuc2lnbmVkIHNob3J0IGJjX2J3ZAkJUEFDS0VEOwkvKiAwQWg6ICAqLworCXVuc2lnbmVkIHNob3J0IGJlX2J3ZAkJUEFDS0VEOwkvKiAwQ2g6ICAqLworfSBmcl9kbGNfY29uZl90OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFM1MDIgaW50ZXJydXB0IG1vZGUgY29udHJvbCBibG9jay4KKyAqCVRoaXMgc3RydWN0dXJlIGlzIHBhc3NlZCB0byB0aGUgRlJfU0VUX0lOVFJfRkxBR1MgYW5kIHJldHVybmVkIGJ5IHRoZQorICoJRlJfUkVBRF9JTlRSX0ZMQUdTIGNvbW1hbmRzLgorICovCit0eXBlZGVmIHN0cnVjdCBmcjUwMl9pbnRyX2N0bAoreworCXVuc2lnbmVkIGNoYXIgbW9kZQlQQUNLRUQ7CS8qIDAwaDogaW50ZXJydXB0IGVuYWJsZSBmbGFncyAqLworCXVuc2lnbmVkIHNob3J0IHR4X2xlbglQQUNLRUQ7CS8qIDAxaDogcmVxdWlyZWQgVHggYnVmZmVyIHNpemUgKi8KK30gZnI1MDJfaW50cl9jdGxfdDsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBTNTA4IGludGVycnVwdCBtb2RlIGNvbnRyb2wgYmxvY2suCisgKglUaGlzIHN0cnVjdHVyZSBpcyBwYXNzZWQgdG8gdGhlIEZSX1NFVF9JTlRSX0ZMQUdTIGFuZCByZXR1cm5lZCBieSB0aGUKKyAqCUZSX1JFQURfSU5UUl9GTEFHUyBjb21tYW5kcy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgZnI1MDhfaW50cl9jdGwKK3sKKwl1bnNpZ25lZCBjaGFyIG1vZGUJUEFDS0VEOwkvKiAwMGg6IGludGVycnVwdCBlbmFibGUgZmxhZ3MgKi8KKwl1bnNpZ25lZCBzaG9ydCB0eF9sZW4JUEFDS0VEOwkvKiAwMWg6IHJlcXVpcmVkIFR4IGJ1ZmZlciBzaXplICovCisJdW5zaWduZWQgY2hhciBpcnEJUEFDS0VEOwkvKiAwM2g6IElSUSBsZXZlbCB0byBhY3RpdmF0ZSAqLworCXVuc2lnbmVkIGNoYXIgZmxhZ3MJUEFDS0VEOwkvKiAwNGg6ID8/ICovCisJdW5zaWduZWQgc2hvcnQgdGltZW91dAlQQUNLRUQ7CS8qIDA1aDogbXMsIGZvciB0aW1lciBpbnRlcnJ1cHQgKi8KK30gZnI1MDhfaW50cl9jdGxfdDsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBDaGFubmVsIHN0YXR1cy4KKyAqCVRoaXMgc3RydWN0dXJlIGlzIHJldHVybmVkIGJ5IHRoZSBGUl9SRUFEX1NUQVRVUyBjb21tYW5kLgorICovCit0eXBlZGVmIHN0cnVjdAlmcl9kbGNfU3RhdHVzCit7CisJdW5zaWduZWQgY2hhciBzdGF0dXMJCVBBQ0tFRDsJLyogMDBoOiBsaW5rL0RMQ0kgc3RhdHVzICovCisJc3RydWN0CisJeworCQl1bnNpZ25lZCBzaG9ydCBkbGNpCVBBQ0tFRDsJLyogMDFoOiBETENJIG51bWJlciAqLworCQl1bnNpZ25lZCBjaGFyIHN0YXR1cwlQQUNLRUQ7CS8qIDAzaDogRExDSSBzdGF0dXMgKi8KKwl9IGNpcmN1aXRbMV0JCQlQQUNLRUQ7Cit9IGZyX2RsY19zdGF0dXNfdDsKKworLyogJ3N0YXR1cycgZGVmaW5lcyAqLworI2RlZmluZQlGUl9MSU5LX0lOT1BFUgkweDAwCQkvKiBmb3IgZ2xvYmFsIHN0YXR1cyAoRExDSSA9PSAwKSAqLworI2RlZmluZQlGUl9MSU5LX09QRVIJMHgwMQorI2RlZmluZQlGUl9ETENJX0RFTEVURUQJMHgwMQkJLyogZm9yIGNpcmN1aXQgc3RhdHVzIChETENJICE9IDApICovCisjZGVmaW5lCUZSX0RMQ0lfQUNUSVZFCTB4MDIKKyNkZWZpbmUJRlJfRExDSV9XQUlUSU5HCTB4MDQKKyNkZWZpbmUJRlJfRExDSV9ORVcJMHgwOAorI2RlZmluZQlGUl9ETENJX1JFUE9SVAkweDQwCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogR2xvYmFsIFN0YXRpc3RpY3MgQmxvY2suCisgKglUaGlzIHN0cnVjdHVyZSBpcyByZXR1cm5lZCBieSB0aGUgRlJfUkVBRF9TVEFUSVNUSUNTIGNvbW1hbmQgd2hlbgorICoJZGNsaSA9PSAwLgorICovCit0eXBlZGVmIHN0cnVjdAlmcl9saW5rX3N0YXQKK3sKKwl1bnNpZ25lZCBzaG9ydCByeF90b29fbG9uZwlQQUNLRUQ7CS8qIDAwaDogICovCisJdW5zaWduZWQgc2hvcnQgcnhfZHJvcHBlZAlQQUNLRUQ7CS8qIDAyaDogICovCisJdW5zaWduZWQgc2hvcnQgcnhfZHJvcHBlZDIJUEFDS0VEOwkvKiAwNGg6ICAqLworCXVuc2lnbmVkIHNob3J0IHJ4X2JhZF9kbGNpCVBBQ0tFRDsJLyogMDZoOiAgKi8KKwl1bnNpZ25lZCBzaG9ydCByeF9iYWRfZm9ybWF0CVBBQ0tFRDsJLyogMDhoOiAgKi8KKwl1bnNpZ25lZCBzaG9ydCByZXRyYW5zbWl0dGVkCVBBQ0tFRDsJLyogMEFoOiAgKi8KKwl1bnNpZ25lZCBzaG9ydCBjcGVfdHhfRlNFCVBBQ0tFRDsJLyogMENoOiAgKi8KKwl1bnNpZ25lZCBzaG9ydCBjcGVfdHhfTElWCVBBQ0tFRDsJLyogMEVoOiAgKi8KKwl1bnNpZ25lZCBzaG9ydCBjcGVfcnhfRlNSCVBBQ0tFRDsJLyogMTBoOiAgKi8KKwl1bnNpZ25lZCBzaG9ydCBjcGVfcnhfTElWCVBBQ0tFRDsJLyogMTJoOiAgKi8KKwl1bnNpZ25lZCBzaG9ydCBub2RlX3J4X0ZTRQlQQUNLRUQ7CS8qIDE0aDogICovCisJdW5zaWduZWQgc2hvcnQgbm9kZV9yeF9MSVYJUEFDS0VEOwkvKiAxNmg6ICAqLworCXVuc2lnbmVkIHNob3J0IG5vZGVfdHhfRlNSCVBBQ0tFRDsJLyogMThoOiAgKi8KKwl1bnNpZ25lZCBzaG9ydCBub2RlX3R4X0xJVglQQUNLRUQ7CS8qIDFBaDogICovCisJdW5zaWduZWQgc2hvcnQgcnhfSVNGX2VycglQQUNLRUQ7CS8qIDFDaDogICovCisJdW5zaWduZWQgc2hvcnQgcnhfdW5zb2xpY2l0ZWQJUEFDS0VEOwkvKiAxRWg6ICAqLworCXVuc2lnbmVkIHNob3J0IHJ4X1NTTl9lcnIJUEFDS0VEOwkvKiAyMGg6ICAqLworCXVuc2lnbmVkIHNob3J0IHJ4X1JTTl9lcnIJUEFDS0VEOwkvKiAyMmg6ICAqLworCXVuc2lnbmVkIHNob3J0IFQzOTFfdGltZW91dHMJUEFDS0VEOwkvKiAyNGg6ICAqLworCXVuc2lnbmVkIHNob3J0IFQzOTJfdGltZW91dHMJUEFDS0VEOwkvKiAyNmg6ICAqLworCXVuc2lnbmVkIHNob3J0IE4zOTJfcmVhY2hlZAlQQUNLRUQ7CS8qIDI4aDogICovCisJdW5zaWduZWQgc2hvcnQgY3BlX1NTTl9SU04JUEFDS0VEOwkvKiAyQWg6ICAqLworCXVuc2lnbmVkIHNob3J0IGN1cnJlbnRfU1NOCVBBQ0tFRDsJLyogMkNoOiAgKi8KKwl1bnNpZ25lZCBzaG9ydCBjdXJyZW50X1JTTglQQUNLRUQ7CS8qIDJFaDogICovCisJdW5zaWduZWQgc2hvcnQgY3VycmVueV9UMzkxCVBBQ0tFRDsJLyogMzBoOiAgKi8KKwl1bnNpZ25lZCBzaG9ydCBjdXJyZW50X1QzOTIJUEFDS0VEOwkvKiAzMmg6ICAqLworCXVuc2lnbmVkIHNob3J0IGN1cnJlbnRfTjM5MglQQUNLRUQ7CS8qIDM0aDogICovCisJdW5zaWduZWQgc2hvcnQgY3VycmVudF9OMzkzCVBBQ0tFRDsJLyogMzZoOiAgKi8KK30gZnJfbGlua19zdGF0X3Q7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRExDSSBzdGF0aXN0aWNzLgorICoJVGhpcyBzdHJ1Y3R1cmUgaXMgcmV0dXJuZWQgYnkgdGhlIEZSX1JFQURfU1RBVElTVElDUyBjb21tYW5kIHdoZW4KKyAqCWRsY2kgIT0gMC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QJZnJfZGxjaV9zdGF0Cit7CisJdW5zaWduZWQgbG9uZyB0eF9mcmFtZXMJCVBBQ0tFRDsJLyogMDBoOiAgKi8KKwl1bnNpZ25lZCBsb25nIHR4X2J5dGVzCQlQQUNLRUQ7CS8qIDA0aDogICovCisJdW5zaWduZWQgbG9uZyByeF9mcmFtZXMJCVBBQ0tFRDsJLyogMDhoOiAgKi8KKwl1bnNpZ25lZCBsb25nIHJ4X2J5dGVzCQlQQUNLRUQ7CS8qIDBDaDogICovCisJdW5zaWduZWQgbG9uZyByeF9kcm9wcGVkCVBBQ0tFRDsJLyogMTBoOiAgKi8KKwl1bnNpZ25lZCBsb25nIHJ4X2luYWN0aXZlCVBBQ0tFRDsJLyogMTRoOiAgKi8KKwl1bnNpZ25lZCBsb25nIHJ4X2V4Y2VlZF9DSVIJUEFDS0VEOwkvKiAxOGg6ICAqLworCXVuc2lnbmVkIGxvbmcgcnhfREVfc2V0CQlQQUNLRUQ7CS8qIDFDaDogICovCisJdW5zaWduZWQgbG9uZyB0eF90aHJvdWdocHV0CVBBQ0tFRDsJLyogMjBoOiAgKi8KKwl1bnNpZ25lZCBsb25nIHR4X2NhbGNfdGltZXIJUEFDS0VEOwkvKiAyNGg6ICAqLworCXVuc2lnbmVkIGxvbmcgcnhfdGhyb3VnaHB1dAlQQUNLRUQ7CS8qIDI4aDogICovCisJdW5zaWduZWQgbG9uZyByeF9jYWxjX3RpbWVyCVBBQ0tFRDsJLyogMkNoOiAgKi8KK30gZnJfZGxjaV9zdGF0X3Q7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogQ29tbXVuaWNhdGlvbnMgZXJyb3Igc3RhdGlzdGljcy4KKyAqCVRoaXMgc3RydWN0dXJlIGlzIHJldHVybmVkIGJ5IHRoZSBGUl9SRUFEX0VSUk9SX1NUQVRTIGNvbW1hbmQuCisgKi8KK3R5cGVkZWYgc3RydWN0CWZyX2NvbW1fc3RhdAoreworCXVuc2lnbmVkIGNoYXIgcnhfb3ZlcnJ1bnMJUEFDS0VEOwkvKiAwMGg6ICAqLworCXVuc2lnbmVkIGNoYXIgcnhfYmFkX2NyYwlQQUNLRUQ7CS8qIDAxaDogICovCisJdW5zaWduZWQgY2hhciByeF9hYm9ydHMJCVBBQ0tFRDsJLyogMDJoOiAgKi8KKwl1bnNpZ25lZCBjaGFyIHJ4X3Rvb19sb25nCVBBQ0tFRDsJLyogMDNoOiAgKi8KKwl1bnNpZ25lZCBjaGFyIHR4X2Fib3J0cwkJUEFDS0VEOwkvKiAwNGg6ICAqLworCXVuc2lnbmVkIGNoYXIgdHhfdW5kZXJydW5zCVBBQ0tFRDsJLyogMDVoOiAgKi8KKwl1bnNpZ25lZCBjaGFyIHR4X21pc3NlZF91bmRyCVBBQ0tFRDsJLyogMDZoOiAgKi8KKwl1bnNpZ25lZCBjaGFyIGRjZF9kcm9wcGVkCVBBQ0tFRDsJLyogMDdoOiAgKi8KKwl1bnNpZ25lZCBjaGFyIGN0c19kcm9wcGVkCVBBQ0tFRDsJLyogMDhoOiAgKi8KK30gZnJfY29tbV9zdGF0X3Q7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRGVmaW5lcyBmb3IgdGhlIEZSX0lTU1VFX0lTX0ZSQU1FIGNvbW1hbmQuCisgKi8KKyNkZWZpbmUJRlJfSVNGX0xWRQkyCQkvKiBpc3N1ZSBMaW5rIFZlcmlmaWNhdGlvbiBFbnF1aXJ5ICovCisjZGVmaW5lCUZSX0lTRl9GU0UJMwkJLyogaXNzdWUgRnVsbCBTdGF0dXMgRW5xdWlyeSAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEZyYW1lIFJlbGF5IEFSUCBIZWFkZXIgLS0gVXNlZCBmb3IgRHluYW1pYyByb3V0ZSBjcmVhdGlvbiB3aXRoIEludkFSUCAKKyAqLworCit0eXBlZGVmIHN0cnVjdCBhcnBoZHJfZnIKKwl7CisJdW5zaWduZWQgc2hvcnQgYXJfaHJkIFBBQ0tFRDsJCS8qIGZvcm1hdCBvZiBoYXJkd2FyZSBhZGRyICovCisJdW5zaWduZWQgc2hvcnQgYXJfcHJvIFBBQ0tFRDsJCS8qIGZvcm1hdCBvZiBwcm90b2NvbCBhZGRyICovCisJdW5zaWduZWQgY2hhciAgYXJfaGxuIFBBQ0tFRDsJCS8qIGxlbmd0aCBvZiBoYXJkd2FyZSBhZGRyICovCQorCXVuc2lnbmVkIGNoYXIgIGFyX3BsbiBQQUNLRUQ7CQkvKiBsZW5ndGggb2YgcHJvdG9jb2wgYWRkciAqLworCXVuc2lnbmVkIHNob3J0IGFyX29wICBQQUNLRUQ7CQkvKiBBUlAgb3Bjb2RlCQkgICAqLworCXVuc2lnbmVkIHNob3J0IGFyX3NoYSBQQUNLRUQ7CQkvKiBTZW5kZXIgRExDSSBhZGRyIDIgYnl0ZXMgKi8KKwl1bnNpZ25lZCBsb25nICBhcl9zaXAgUEFDS0VEOwkJLyogU2VuZGVyIElQICAgYWRkciA0IGJ5dGVzICovCisJdW5zaWduZWQgc2hvcnQgYXJfdGhhIFBBQ0tFRDsJCS8qIFRhcmdldCBETENJIGFkZHIgMiBieXRlcyAqLworCXVuc2lnbmVkIGxvbmcgIGFyX3RpcCBQQUNLRUQ7CQkvKiBUYXJnZXQgSVAgICBhZGRyIDQgYnl0ZXMgKi8KKwl9IGFycGhkcl9mcl90OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEZyYW1lIFJlbGF5IFJGQyAxNDkwIFNOQVAgSGVhZGVyIC0tIFVzZWQgdG8gY2hlY2sgZm9yIEFSUCBwYWNrZXRzCisgKi8KK3R5cGVkZWYgc3RydWN0IGFycGhkcl8xNDkwCisJeworCXVuc2lnbmVkIGNoYXIgY29udHJvbCBQQUNLRUQ7CQkvKiBVSSwgZXRjLi4uICAqLworCXVuc2lnbmVkIGNoYXIgcGFkICAgICBQQUNLRUQ7CQkvKiBQYWQgKi8KKwl1bnNpZ25lZCBjaGFyIE5MUElEICAgUEFDS0VEOwkJLyogU05BUCAqLworCXVuc2lnbmVkIGNoYXIgT1VJWzNdICBQQUNLRUQ7CQkvKiBFdGhlcnR5cGUsIGV0Yy4uLiAqLworCXVuc2lnbmVkIHNob3J0IFBJRCAgICBQQUNLRUQ7CQkvKiBBUlAsIElQLCBldGMuLi4gKi8KKwl9ICBhcnBoZHJfMTQ5MF90OworCisvKiBVRFAvSVAgcGFja2V0IChmb3IgVURQIG1hbmFnZW1lbnQpIGxheW91dCAqLworCisvKiBUaGUgZW1iZWRkZWQgY29udHJvbCBibG9jayBmb3IgVURQIG1nbXQKKyAgIFRoaXMgaXMgZXNzZW50aWFsbHkgYSBtYWlsYm94IHN0cnVjdHVyZSwgd2l0aG91dCB0aGUgbGFyZ2UgZGF0YSBmaWVsZCAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgIG9wcF9mbGFnIFBBQ0tFRDsgLyogdGhlIG9wcCBmbGFnICovCisgICAgICAgIHVuc2lnbmVkIGNoYXIgIGNvbW1hbmQgIFBBQ0tFRDsgLyogY29tbWFuZCBjb2RlICovCisgICAgICAgIHVuc2lnbmVkIHNob3J0IGxlbmd0aCAgIFBBQ0tFRDsgLyogbGVuZ3RoIG9mIGRhdGEgYnVmZmVyICovCisgICAgICAgIHVuc2lnbmVkIGNoYXIgIHJlc3VsdCAgIFBBQ0tFRDsgLyogcmV0dXJuIGNvZGUgKi8KKyAgICAgICAgdW5zaWduZWQgc2hvcnQgZGxjaSAgICAgUEFDS0VEOyAvKiBETENJIG51bWJlciAqLworICAgICAgICB1bnNpZ25lZCBjaGFyICBhdHRyICAgICBQQUNLRUQ7IC8qIEZFQ04sIEJFQ04sIERFIGFuZCBDL1IgYml0cyAqLworICAgICAgICB1bnNpZ25lZCBzaG9ydCByeGxvc3QxICBQQUNLRUQ7IC8qIGZyYW1lcyBkaXNjYXJkZWQgYXQgaW50LiBsZXZlbCAqLworICAgICAgICB1bnNpZ25lZCBsb25nICByeGxvc3QyICBQQUNLRUQ7IC8qIGZyYW1lcyBkaXNjYXJkZWQgYXQgYXBwLiBsZXZlbCAqLworICAgICAgICB1bnNpZ25lZCBjaGFyICByc3J2WzJdICBQQUNLRUQ7IC8qIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovCit9IGNibG9ja190OworCisKKy8qIFVEUCBtYW5hZ2VtZW50IHBhY2tldCBsYXlvdXQgKGRhdGEgYXJlYSBvZiBpcCBwYWNrZXQpICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICAgICAgdW5zaWduZWQgY2hhciAgIGNvbnRyb2wgICAgICAgICAgICAgICAgIFBBQ0tFRDsKKyAgICAgICAgdW5zaWduZWQgY2hhciAgIE5MUElEICAgICAgICAgICAgICAgICAgIFBBQ0tFRDsKK30gZnJfZW5jYXBfaGRyX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKy8vCWZyX2VuY2FwX2hkcl90IAkJZnJfZW5jYXBfaGRyCVBBQ0tFRDsKKwlpcF9wa3RfdCAJCWlwX3BrdAkJUEFDS0VEOworCXVkcF9wa3RfdAkJdWRwX3BrdAkJUEFDS0VEOworCXdwX21nbXRfdCAJCXdwX21nbXQgICAgICAgCVBBQ0tFRDsKKyAgICAgICAgY2Jsb2NrX3QgICAgICAgICAgICAgICAgY2Jsb2NrICAgICAgICAgIFBBQ0tFRDsKKyAgICAgICAgdW5zaWduZWQgY2hhciAgICAgICAgICAgZGF0YVs0MDgwXSAgICAgIFBBQ0tFRDsKK30gZnJfdWRwX3BrdF90OworCisKKy8qIHZhbGlkIGlwX3Byb3RvY29sIGZvciBVRFAgbWFuYWdlbWVudCAqLworI2RlZmluZSBVRFBNR01UX1VEUF9QUk9UT0NPTCAweDExCisKKyNkZWZpbmUgVURQTUdNVF9GUElQRV9TSUdOQVRVUkUgICAgICAgICAiRlBJUEU4TkQiCisjZGVmaW5lIFVEUE1HTVRfRFJWUlNUQVRTX1NJR05BVFVSRSAgICAgIkRSVlNUQVRTIgorCisvKiB2YWx1ZXMgZm9yIHJlcXVlc3QvcmVwbHkgYnl0ZSAqLworI2RlZmluZSBVRFBNR01UX1JFUVVFU1QJMHgwMQorI2RlZmluZSBVRFBNR01UX1JFUExZCTB4MDIKKyNkZWZpbmUgVURQX09GRlNFVAkxMgorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgaWZfc2VuZF9lbnRyeTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBpZl9zZW5kX3NrYl9udWxsOworICAgICAgICB1bnNpZ25lZCBsb25nIGlmX3NlbmRfYnJvYWRjYXN0OworICAgICAgICB1bnNpZ25lZCBsb25nIGlmX3NlbmRfbXVsdGljYXN0OworICAgICAgICB1bnNpZ25lZCBsb25nIGlmX3NlbmRfY3JpdGljYWxfSVNSOworICAgICAgICB1bnNpZ25lZCBsb25nIGlmX3NlbmRfY3JpdGljYWxfbm9uX0lTUjsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBpZl9zZW5kX2J1c3k7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgaWZfc2VuZF9idXN5X3RpbWVvdXQ7CisJdW5zaWduZWQgbG9uZyBpZl9zZW5kX0RSVlNUQVRTX3JlcXVlc3Q7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgaWZfc2VuZF9GUElQRV9yZXF1ZXN0OworICAgICAgICB1bnNpZ25lZCBsb25nIGlmX3NlbmRfd2FuX2Rpc2Nvbm5lY3RlZDsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBpZl9zZW5kX2RsY2lfZGlzY29ubmVjdGVkOworICAgICAgICB1bnNpZ25lZCBsb25nIGlmX3NlbmRfbm9fYmZyczsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBpZl9zZW5kX2FkcHRyX2JmcnNfZnVsbDsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBpZl9zZW5kX2JmcnNfcGFzc2VkX3RvX2FkcHRyOworCXVuc2lnbmVkIGxvbmcgaWZfc2VuZF9jb25zZWNfc2VuZF9mYWlsOworfSBkcnZzdGF0c19pZl9zZW5kX3Q7IAorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgcnhfaW50cl9ub19zb2NrZXQ7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgcnhfaW50cl9kZXZfbm90X3N0YXJ0ZWQ7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgcnhfaW50cl9EUlZTVEFUU19yZXF1ZXN0OworICAgICAgICB1bnNpZ25lZCBsb25nIHJ4X2ludHJfRlBJUEVfcmVxdWVzdDsKKyAgICAgICAgdW5zaWduZWQgbG9uZyByeF9pbnRyX2Jmcl9ub3RfcGFzc2VkX3RvX3N0YWNrOworICAgICAgICB1bnNpZ25lZCBsb25nIHJ4X2ludHJfYmZyX3Bhc3NlZF90b19zdGFjazsKKyB9IGRydnN0YXRzX3J4X2ludHJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgICAgICB1bnNpZ25lZCBsb25nIFVEUF9GUElQRV9tZ210X2ttYWxsb2NfZXJyOworICAgICAgICB1bnNpZ25lZCBsb25nIFVEUF9GUElQRV9tZ210X2RpcmVjdGlvbl9lcnI7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgVURQX0ZQSVBFX21nbXRfYWRwdHJfdHlwZV9lcnI7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgVURQX0ZQSVBFX21nbXRfYWRwdHJfY21uZF9PSzsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBVRFBfRlBJUEVfbWdtdF9hZHB0cl9jbW5kX3RpbWVvdXQ7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgVURQX0ZQSVBFX21nbXRfYWRwdHJfc2VuZF9wYXNzZWQ7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgVURQX0ZQSVBFX21nbXRfYWRwdHJfc2VuZF9mYWlsZWQ7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgVURQX0ZQSVBFX21nbXRfbm90X3Bhc3NlZF90b19zdGFjazsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBVRFBfRlBJUEVfbWdtdF9wYXNzZWRfdG9fc3RhY2s7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgVURQX0ZQSVBFX21nbXRfbm9fc29ja2V0OworICAgICAgICB1bnNpZ25lZCBsb25nIFVEUF9EUlZTVEFUU19tZ210X2ttYWxsb2NfZXJyOworICAgICAgICB1bnNpZ25lZCBsb25nIFVEUF9EUlZTVEFUU19tZ210X2FkcHRyX2NtbmRfT0s7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgVURQX0RSVlNUQVRTX21nbXRfYWRwdHJfY21uZF90aW1lb3V0OworICAgICAgICB1bnNpZ25lZCBsb25nIFVEUF9EUlZTVEFUU19tZ210X2FkcHRyX3NlbmRfcGFzc2VkOworICAgICAgICB1bnNpZ25lZCBsb25nIFVEUF9EUlZTVEFUU19tZ210X2FkcHRyX3NlbmRfZmFpbGVkOworICAgICAgICB1bnNpZ25lZCBsb25nIFVEUF9EUlZTVEFUU19tZ210X25vdF9wYXNzZWRfdG9fc3RhY2s7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgVURQX0RSVlNUQVRTX21nbXRfcGFzc2VkX3RvX3N0YWNrOworICAgICAgICB1bnNpZ25lZCBsb25nIFVEUF9EUlZTVEFUU19tZ210X25vX3NvY2tldDsKK30gZHJ2c3RhdHNfZ2VuX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICAgICAgdW5zaWduZWQgY2hhciAgIGF0dHIgICAgICAJUEFDS0VEOworICAgICAgICB1bnNpZ25lZCBzaG9ydCAgdGltZV9zdGFtcCAgICAgIFBBQ0tFRDsKKyAgICAgICAgdW5zaWduZWQgY2hhciAgIHJlc2VydmVkWzEzXSAgICBQQUNLRUQ7Cit9IGFwaV9yeF9oZHJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgICAgICBhcGlfcnhfaGRyX3QgICAgYXBpX3J4X2hkciAgICAgIFBBQ0tFRDsKKyAgICAgICAgdm9pZCAqICAgICAgICAgIGRhdGEgICAgICAgICAgICBQQUNLRUQ7Cit9IGFwaV9yeF9lbGVtZW50X3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICAgICAgdW5zaWduZWQgY2hhciAgIGF0dHIgICAgICAgICAgICBQQUNLRUQ7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgICByZXNlcnZlZFsxNV0gICAgUEFDS0VEOworfSBhcGlfdHhfaGRyX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICAgICAgYXBpX3R4X2hkcl90ICAgIGFwaV90eF9oZHIgICAgICBQQUNLRUQ7CisgICAgICAgIHZvaWQgKiAgICAgICAgICBkYXRhICAgICAgICAgICAgUEFDS0VEOworfSBhcGlfdHhfZWxlbWVudF90OworCisjaWZkZWYJCV9NU0NfCisjICBwcmFnbWEJcGFjaygpCisjZW5kaWYKKyNlbmRpZgkvKiBfU0RMQV9GUl9IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2RsYV9wcHAuaCBiL2luY2x1ZGUvbGludXgvc2RsYV9wcHAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjM5MjMxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9zZGxhX3BwcC5oCkBAIC0wLDAgKzEsNTc1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogc2RsYV9wcHAuaAlTYW5nb21hIFBQUCBmaXJtd2FyZSBBUEkgZGVmaW5pdGlvbnMuCisqCisqIEF1dGhvcjoJTmVuYWQgQ29yYmljCTxuY29yYmljQHNhbmdvbWEuY29tPgorKgorKiBDb3B5cmlnaHQ6CShjKSAxOTk1LTE5OTcgU2FuZ29tYSBUZWNobm9sb2dpZXMgSW5jLgorKgorKgkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKgkJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyoJCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorKgkJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKiBGZWIgMjQsIDIwMDAgIE5lbmFkIENvcmJpYyAgICB2Mi4xLjIKKyogSmFuIDA2LCAxOTk3CUdlbmUgS296aW4JdjIuMAorKiBBcHIgMTEsIDE5OTYJR2VuZSBLb3ppbglJbml0aWFsIHZlcnNpb24uCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYJX1NETEFfUFBQX0gKKyNkZWZpbmUJX1NETEFfUFBQX0gKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBOb3RlczoKKyAqIC0tLS0tLQorICogMS4gQWxsIHN0cnVjdHVyZXMgZGVmaW5lZCBpbiB0aGlzIGZpbGUgYXJlIGJ5dGUtYWxpbmVkLiAgCisgKgorICoJQ29tcGlsZXIJUGxhdGZvcm0KKyAqCS0tLS0tLS0tCS0tLS0tLS0tCisgKglHTlUgQwkJTGludXgJCQorICovCisKKyNpZm5kZWYJUEFDS0VECisjICAgIGRlZmluZQlQQUNLRUQJX19hdHRyaWJ1dGVfXygocGFja2VkKSkKKyNlbmRpZgkvKiBQQUNLRUQgKi8KKworLyogQWRhcHRlciBtZW1vcnkgbGF5b3V0IGFuZCBpbXBvcnRhbnQgY29uc3RhbnRzICovCisjZGVmaW5lCVBQUDUwOF9NQl9WRUNUCTB4RTAwMAkvKiBtYWlsYm94IHdpbmRvdyB2ZWN0b3IgKi8KKyNkZWZpbmUJUFBQNTA4X01CX09GRlMJMAkJLyogbWFpbGJveCBvZmZzZXQgKi8KKyNkZWZpbmUJUFBQNTA4X0ZMR19PRkZTCTB4MTAwMAkvKiBzdGF0dXMgZmxhZ3Mgb2Zmc2V0ICovCisjZGVmaW5lCVBQUDUwOF9CVUZfT0ZGUwkweDExMDAJLyogYnVmZmVyIGluZm8gYmxvY2sgb2Zmc2V0ICovCisjZGVmaW5lIFBQUDUxNF9NQl9PRkZTICAweEUwMDAgIC8qIG1haWxib3ggb2Zmc2V0ICovCisjZGVmaW5lIFBQUDUxNF9GTEdfT0ZGUyAweEYwMDAgIC8qIHN0YXR1cyBmbGFncyBvZmZzZXQgKi8KKyNkZWZpbmUgUFBQNTE0X0JVRl9PRkZTIDB4RjEwMCAgLyogYnVmZmVyIGluZm8gYmxvY2sgb2Zmc2V0ICovCisKKyNkZWZpbmUgUFBQX01BWF9EQVRBCTEwMDgJLyogY29tbWFuZCBibG9jayBkYXRhIGJ1ZmZlciBsZW5ndGggKi8KKworLyoqKioqKiBEYXRhIFN0cnVjdHVyZXMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUFBQIENvbW1hbmQgQmxvY2suCisgKi8KK3R5cGVkZWYgc3RydWN0IHBwcF9jbWR7CisJdW5zaWduZWQgY2hhciAgY29tbWFuZAlQQUNLRUQ7CS8qIGNvbW1hbmQgY29kZSAqLworCXVuc2lnbmVkIHNob3J0IGxlbmd0aAlQQUNLRUQ7CS8qIGxlbmd0aCBvZiBkYXRhIGJ1ZmZlciAqLworCXVuc2lnbmVkIGNoYXIgIHJlc3VsdAlQQUNLRUQ7CS8qIHJldHVybiBjb2RlICovCisJdW5zaWduZWQgY2hhciAgcnNydlsxMV0JUEFDS0VEOwkvKiByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqLworfSBwcHBfY21kX3Q7CisKK3R5cGVkZWYgc3RydWN0IGNibG9ja3sKKwl1bnNpZ25lZCBjaGFyICBvcHBfZmxhZwlQQUNLRUQ7CisJdW5zaWduZWQgY2hhciAgY29tbWFuZAlQQUNLRUQ7CS8qIGNvbW1hbmQgY29kZSAqLworCXVuc2lnbmVkIHNob3J0IGxlbmd0aAlQQUNLRUQ7CS8qIGxlbmd0aCBvZiBkYXRhIGJ1ZmZlciAqLworCXVuc2lnbmVkIGNoYXIgIHJlc3VsdAlQQUNLRUQ7CS8qIHJldHVybiBjb2RlICovCisJdW5zaWduZWQgY2hhciAgcnNydlsxMV0JUEFDS0VEOwkvKiByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqLworfSBjYmxvY2tfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcHBwX3VkcF9wa3R7CisJaXBfcGt0X3QgCWlwX3BrdAlQQUNLRUQ7CisJdWRwX3BrdF90CXVkcF9wa3QJUEFDS0VEOworCXdwX21nbXRfdAl3cF9tZ210IFBBQ0tFRDsKKwljYmxvY2tfdAljYmxvY2sgIFBBQ0tFRDsKKwl1bnNpZ25lZCBjaGFyICAgZGF0YVtNQVhfTEdUSF9VRFBfTUdOVF9QS1RdIFBBQ0tFRDsKK30gcHBwX3VkcF9wa3RfdDsJCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBjaGFyCXN0YXR1cwkJUEFDS0VEOworCXVuc2lnbmVkIGNoYXIJZGF0YV9hdmFpbAlQQUNLRUQ7CisJdW5zaWduZWQgc2hvcnQJcmVhbF9sZW5ndGgJUEFDS0VEOworCXVuc2lnbmVkIHNob3J0CXRpbWVfc3RhbXAJUEFDS0VEOworCXVuc2lnbmVkIGNoYXIJZGF0YVsxXQkJUEFDS0VEOworfSB0cmFjZV9wa3RfdDsKKworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgY2hhciAJb3BwX2ZsYWcJUEFDS0VEOworCXVuc2lnbmVkIGNoYXIJdHJhY2VfdHlwZQlQQUNLRUQ7CisJdW5zaWduZWQgc2hvcnQgCXRyYWNlX2xlbmd0aAlQQUNLRUQ7CisJdW5zaWduZWQgc2hvcnQgCXRyYWNlX2RhdGFfcHRyCVBBQ0tFRDsKKwl1bnNpZ25lZCBzaG9ydCAgdHJhY2VfdGltZV9zdGFtcCBQQUNLRUQ7Cit9IHRyYWNlX2VsZW1lbnRfdDsKKworLyogJ2NvbW1hbmQnIGZpZWxkIGRlZmluZXMgKi8KKyNkZWZpbmUgUFBQX1JFQURfQ09ERV9WRVJTSU9OCTB4MTAJLyogY29uZmlndXJhdGlvbiBjb21tYW5kcyAqLworI2RlZmluZSBQUFBfU0VUX0NPTkZJRwkJMHgwNQorI2RlZmluZSBQUFBfUkVBRF9DT05GSUcJCTB4MDYKKyNkZWZpbmUJUFBQX1NFVF9JTlRSX0ZMQUdTCTB4MjAKKyNkZWZpbmUJUFBQX1JFQURfSU5UUl9GTEFHUwkweDIxCisjZGVmaW5lCVBQUF9TRVRfSU5CT1VORF9BVVRICTB4MzAKKyNkZWZpbmUJUFBQX1NFVF9PVVRCT1VORF9BVVRICTB4MzEKKyNkZWZpbmUJUFBQX0dFVF9DT05ORUNUSU9OX0lORk8JMHgzMgorCisjZGVmaW5lIFBQUF9DT01NX0VOQUJMRQkJMHgwMwkvKiBvcGVyYXRpb25hbCBjb21tYW5kcyAqLworI2RlZmluZSBQUFBfQ09NTV9ESVNBQkxFCTB4MDQKKyNkZWZpbmUJUFBQX1NFTkRfU0lHTl9GUkFNRQkweDIzCisjZGVmaW5lCVBQUF9SRUFEX1NJR05fUkVTUE9OU0UJMHgyNAorI2RlZmluZQlQUFBfREFUQUxJTkVfTU9OSVRPUgkweDMzCisKKyNkZWZpbmUgUFBQX1JFQURfU1RBVElTVElDUwkweDA3CS8qIHN0YXRpc3RpY3MgY29tbWFuZHMgKi8KKyNkZWZpbmUgUFBQX0ZMVVNIX1NUQVRJU1RJQ1MJMHgwOAorI2RlZmluZSBQUFBfUkVBRF9FUlJPUl9TVEFUUwkweDA5CisjZGVmaW5lIFBQUF9GTFVTSF9FUlJPUl9TVEFUUwkweDBBCisjZGVmaW5lIFBQUF9SRUFEX1BBQ0tFVF9TVEFUUwkweDEyCisjZGVmaW5lIFBQUF9GTFVTSF9QQUNLRVRfU1RBVFMJMHgxMworI2RlZmluZSBQUFBfUkVBRF9MQ1BfU1RBVFMJMHgxNAorI2RlZmluZSBQUFBfRkxVU0hfTENQX1NUQVRTCTB4MTUKKyNkZWZpbmUgUFBQX1JFQURfTFBCS19TVEFUUwkweDE2CisjZGVmaW5lIFBQUF9GTFVTSF9MUEJLX1NUQVRTCTB4MTcKKyNkZWZpbmUgUFBQX1JFQURfSVBDUF9TVEFUUwkweDE4CisjZGVmaW5lIFBQUF9GTFVTSF9JUENQX1NUQVRTCTB4MTkKKyNkZWZpbmUgUFBQX1JFQURfSVBYQ1BfU1RBVFMJMHgxQQorI2RlZmluZSBQUFBfRkxVU0hfSVBYQ1BfU1RBVFMJMHgxQgorI2RlZmluZSBQUFBfUkVBRF9QQVBfU1RBVFMJMHgxQworI2RlZmluZSBQUFBfRkxVU0hfUEFQX1NUQVRTCTB4MUQKKyNkZWZpbmUgUFBQX1JFQURfQ0hBUF9TVEFUUwkweDFFCisjZGVmaW5lIFBQUF9GTFVTSF9DSEFQX1NUQVRTCTB4MUYKKworLyogJ3Jlc3VsdCcgZmllbGQgZGVmaW5lcyAqLworI2RlZmluZSBQUFBSRVNfT0sJCTB4MDAJLyogY29tbWFuZCBleGVjdXRlZCBzdWNjZXNzZnVsbHkgKi8KKyNkZWZpbmUJUFBQUkVTX0lOVkFMSURfU1RBVEUJMHgwOQkvKiBpbnZhbGlkIGNvbW1hbmQgaW4gdGhpcyBjb250ZXh0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUFBQIE1haWxib3guCisgKglUaGlzIHN0cnVjdHVyZSBpcyBsb2NhdGVkIGF0IG9mZnNldCBQUFA/Pz9fTUJfT0ZGUyBpbnRvIFBQUD8/P19NQl9WRUNUCisgKi8KK3R5cGVkZWYgc3RydWN0IHBwcF9tYm94Cit7CisJdW5zaWduZWQgY2hhciBmbGFnCVBBQ0tFRDsJLyogMDBoOiBjb21tYW5kIGV4ZWN1dGlvbiBmbGFnICovCisJcHBwX2NtZF90ICAgICBjbWQJUEFDS0VEOyAvKiAwMWg6IGNvbW1hbmQgYmxvY2sgKi8KKwl1bnNpZ25lZCBjaGFyIGRhdGFbMV0JUEFDS0VEOwkvKiAxMGg6IHZhcmlhYmxlIGxlbmd0aCBkYXRhIGJ1ZmZlciAqLworfSBwcHBfbWJveF90OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFBQUCBTdGF0dXMgRmxhZ3MuCisgKglUaGlzIHN0cnVjdHVyZSBpcyBsb2NhdGVkIGF0IG9mZnNldCBQUFA/Pz9fRkxHX09GRlMgaW50bworICoJUFBQPz8/X01CX1ZFQ1QuCisgKi8KK3R5cGVkZWYgc3RydWN0CXBwcF9mbGFncworeworCXVuc2lnbmVkIGNoYXIgaWZsYWcJCVBBQ0tFRDsJLyogMDA6IGludGVycnVwdCBmbGFnICovCisJdW5zaWduZWQgY2hhciBpbWFzawkJUEFDS0VEOwkvKiAwMTogaW50ZXJydXB0IG1hc2sgKi8KKwl1bnNpZ25lZCBjaGFyIHJlc3J2CQlQQUNLRUQ7CisJdW5zaWduZWQgY2hhciBtc3RhdHVzCQlQQUNLRUQ7CS8qIDAzOiBtb2RlbSBzdGF0dXMgKi8KKwl1bnNpZ25lZCBjaGFyIGxjcF9zdGF0ZQkJUEFDS0VEOyAvKiAwNDogTENQIHN0YXRlICovCisJdW5zaWduZWQgY2hhciBwcHBfcGhhc2UJCVBBQ0tFRDsJLyogMDU6IFBQUCBwaGFzZSAqLworCXVuc2lnbmVkIGNoYXIgaXBfc3RhdGUJCVBBQ0tFRDsgLyogMDY6IElQQ1Agc3RhdGUgKi8KKwl1bnNpZ25lZCBjaGFyIGlweF9zdGF0ZQkJUEFDS0VEOyAvKiAwNzogSVBYQ1Agc3RhdGUgKi8KKwl1bnNpZ25lZCBjaGFyIHBhcF9zdGF0ZQkJUEFDS0VEOyAvKiAwODogUEFQIHN0YXRlICovCisJdW5zaWduZWQgY2hhciBjaGFwX3N0YXRlCVBBQ0tFRDsgLyogMDk6IENIQVAgc3RhdGUgKi8KKwl1bnNpZ25lZCBzaG9ydCBkaXNjX2NhdXNlCVBBQ0tFRDsJLyogMEE6IGRpc2Nvbm5lY3Rpb24gY2F1c2UgKi8KK30gcHBwX2ZsYWdzX3Q7CisKKy8qICdpZmxhZycgZGVmaW5lcyAqLworI2RlZmluZQlQUFBfSU5UUl9SWFJEWQkJMHgwMQkvKiBSeCByZWFkeSAqLworI2RlZmluZQlQUFBfSU5UUl9UWFJEWQkJMHgwMgkvKiBUeCByZWFkeSAqLworI2RlZmluZQlQUFBfSU5UUl9NT0RFTQkJMHgwNAkvKiBtb2RlbSBzdGF0dXMgY2hhbmdlIChEQ0QsIENUUykgKi8KKyNkZWZpbmUJUFBQX0lOVFJfQ01ECQkweDA4CS8qIGludGVyZmFjZSBjb21tYW5kIGNvbXBsZXRlZCAqLworI2RlZmluZQlQUFBfSU5UUl9ESVNDCQkweDEwCS8qIGRhdGEgbGluayBkaXNjb25uZWN0ZWQgKi8KKyNkZWZpbmUJUFBQX0lOVFJfT1BFTgkJMHgyMAkvKiBkYXRhIGxpbmsgb3BlbiAqLworI2RlZmluZQlQUFBfSU5UUl9EUk9QX0RUUgkweDQwCS8qIERUUiBkcm9wIHRpbWVvdXQgZXhwaXJlZCAqLworI2RlZmluZSBQUFBfSU5UUl9USU1FUiAgICAgICAgICAweDgwICAgIC8qIHRpbWVyIGludGVycnVwdCAqLworCisKKy8qICdtc3RhdHVzJyBkZWZpbmVzICovCisjZGVmaW5lCVBQUF9NRE1fRENECQkweDA4CS8qIG1kbV9zdGF0dXM6IERDRCAqLworI2RlZmluZQlQUFBfTURNX0NUUwkJMHgyMAkvKiBtZG1fc3RhdHVzOiBDVFMgKi8KKworLyogJ2Rpc2NfY2F1c2UnIGRlZmluZXMgKi8KKyNkZWZpbmUgUFBQX0xPQ0FMX1RFUk1JTkFUSU9OICAgMHgwMDAxCS8qIExvY2FsIFJlcXVlc3QgYnkgUFBQIHRlcm1pbmF0aW9uIHBoYXNlICovCisjZGVmaW5lIFBQUF9EQ0RfQ1RTX0RST1AgICAgICAgIDB4MDAwMiAgLyogRENEIGFuZC9vciBDVFMgZHJvcHBlZC4gTGluayBkb3duICovCisjZGVmaW5lIFBQUF9SRU1PVEVfVEVSTUlOQVRJT04JMHgwODAwCS8qIFJlbW90ZSBSZXF1ZXN0IGJ5IFBQUCB0ZXJtaW5hdGlvbiBwaGFzZSAqLworCisvKiAnbWlzY19jb25maWdfYml0cycgZGVmaW5lcyAqLworI2RlZmluZSBET05UX1JFX1RYX0FCT1JURURfSV9GUkFNRVMgCTB4MDEKKyNkZWZpbmUgVFhfRlJNX0JZVEVfQ09VTlRfU1RBVFMgICAgICAgICAweDAyCisjZGVmaW5lIFJYX0ZSTV9CWVRFX0NPVU5UX1NUQVRTICAgICAgICAgMHgwNAorI2RlZmluZSBUSU1FX1NUQU1QX0lOX1JYX0ZSQU1FUyAgICAgICAgIDB4MDgKKyNkZWZpbmUgTk9OX1NURF9BRFBUUl9GUkVRICAgICAgICAgICAgICAweDEwCisjZGVmaW5lIElOVEVSRkFDRV9MRVZFTF9SUzIzMiAgICAgICAgICAgMHgyMAorI2RlZmluZSBBVVRPX0xJTktfUkVDT1ZFUlkgICAgICAgICAgICAgIDB4MTAwCisjZGVmaW5lIERPTlRfVEVSTUlOQVRFX0xOS19NQVhfQ09ORklHICAgMHgyMDAgICAgICAgICAgICAgICAgICAgIAorCisvKiAnYXV0aGVudGljYXRpb24gb3B0aW9ucycgZGVmaW5lcyAqLworI2RlZmluZSBOT19BVVRIRU5USUNBVElPTgkweDAwCisjZGVmaW5lIElOQk9VTkRfQVVUSAkJMHg4MAorI2RlZmluZSBQQVBfQVVUSAkJMHgwMQorI2RlZmluZSBDSEFQX0FVVEgJCTB4MDIJCQorCisvKiAnaXAgb3B0aW9ucycgZGVmaW5lcyAqLworI2RlZmluZSBMX0FORF9SX0lQX05PX0FTU0lHCTB4MDAKKyNkZWZpbmUgTF9JUF9MT0NBTF9BU1NJRyAgICAJMHgwMQorI2RlZmluZSBMX0lQX1JFTU9URV9BU1NJRyAgIAkweDAyCisjZGVmaW5lIFJfSVBfTE9DQUxfQVNTSUcgICAgICAgIDB4MDQKKyNkZWZpbmUgUl9JUF9SRU1PVEVfQVNTSUcgICAgICAgMHgwOAorI2RlZmluZSBFTkFCTEVfSVAJCTB4ODAKKworLyogJ2lweCBvcHRpb25zJyBkZWZpbmVzICovCisjZGVmaW5lIFJPVVRJTkdfUFJPVF9ERUZBVUxUICAgIDB4MjAKKyNkZWZpbmUgRU5BQkxFX0lQWAkJMHg4MAorI2RlZmluZSBESVNBQkxFX0lQWAkJMHgwMAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFBQUCBCdWZmZXIgSW5mby4KKyAqCVRoaXMgc3RydWN0dXJlIGlzIGxvY2F0ZWQgYXQgb2Zmc2V0IFBQUDUwOF9CVUZfT0ZGUyBpbnRvCisgKglQUFA1MDhfTUJfVkVDVC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QJcHBwNTA4X2J1Zl9pbmZvCit7CisJdW5zaWduZWQgc2hvcnQgdHhiX251bQlQQUNLRUQ7CS8qIDAwOiBudW1iZXIgb2YgdHJhbnNtaXQgYnVmZmVycyAqLworCXVuc2lnbmVkIGxvbmcgIHR4Yl9wdHIJUEFDS0VEOwkvKiAwMjogcG9pbnRlciB0byB0aGUgYnVmZmVyIGN0bC4gKi8KKwl1bnNpZ25lZCBsb25nICB0eGJfbnh0ICBQQUNLRUQ7CisJdW5zaWduZWQgY2hhciAgcnNydjFbMjJdIFBBQ0tFRDsKKwl1bnNpZ25lZCBzaG9ydCByeGJfbnVtCVBBQ0tFRDsJLyogMjA6IG51bWJlciBvZiByZWNlaXZlIGJ1ZmZlcnMgKi8KKwl1bnNpZ25lZCBsb25nICByeGJfcHRyCVBBQ0tFRDsJLyogMjI6IHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciBjdGwuICovCisJdW5zaWduZWQgbG9uZyAgcnhiMV9wdHIJUEFDS0VEOwkvKiAyNjogcG9pbnRlciB0byB0aGUgZmlyc3QgYnVmLmN0bC4gKi8KKwl1bnNpZ25lZCBsb25nICByeGJfYmFzZQlQQUNLRUQ7CS8qIDJBOiBwb2ludGVyIHRvIHRoZSBidWZmZXIgYmFzZSAqLworCXVuc2lnbmVkIGNoYXIgIHJzcnYyWzJdCVBBQ0tFRDsKKwl1bnNpZ25lZCBsb25nICByeGJfZW5kCVBBQ0tFRDsJLyogMzA6IHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciBlbmQgKi8KK30gcHBwNTA4X2J1Zl9pbmZvX3Q7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVHJhbnNtaXQvUmVjZWl2ZSBCdWZmZXIgQ29udHJvbCBCbG9jay4KKyAqLwordHlwZWRlZiBzdHJ1Y3QJcHBwX2J1Zl9jdGwKK3sKKwl1bnNpZ25lZCBjaGFyICBmbGFnCQlQQUNLRUQ7CS8qIDAwOiAnYnVmZmVyIHJlYWR5JyBmbGFnICovCisJdW5zaWduZWQgc2hvcnQgbGVuZ3RoCQlQQUNLRUQ7CS8qIDAxOiBsZW5ndGggb2YgZGF0YSAqLworCXVuc2lnbmVkIGNoYXIgIHJlc2VydmVkMVsxXQlQQUNLRUQ7CS8qIDAzOiAqLworCXVuc2lnbmVkIGNoYXIgIHByb3RvCQlQQUNLRUQ7CS8qIDA0OiBwcm90b2NvbCAqLworCXVuc2lnbmVkIHNob3J0IHRpbWVzdGFtcAlQQUNLRUQ7CS8qIDA1OiB0aW1lIHN0YW1wIChSeCBvbmx5KSAqLworCXVuc2lnbmVkIGNoYXIgIHJlc2VydmVkMls1XQlQQUNLRUQ7CS8qIDA3OiAqLworCXVuaW9uCisJeworCQl1bnNpZ25lZCBzaG9ydCBvX3BbMl07CS8qIDFDOiBidWZmZXIgb2Zmc2V0ICYgcGFnZSAoUzUwMikgKi8KKwkJdW5zaWduZWQgbG9uZyAgcHRyOwkvKiAxQzogYnVmZmVyIHBvaW50ZXIgKFM1MDgpICovCisJfSBidWYJCQkJUEFDS0VEOworfSBwcHBfYnVmX2N0bF90OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFM1MDggQWRhcHRlciBDb25maWd1cmF0aW9uIEJsb2NrIChwYXNzZWQgdG8gdGhlIFBQUF9TRVRfQ09ORklHIGNvbW1hbmQpLgorICovCit0eXBlZGVmIHN0cnVjdAlwcHA1MDhfY29uZgoreworCXVuc2lnbmVkIGxvbmcgIGxpbmVfc3BlZWQJUEFDS0VEOwkvKiAwMDogYmF1ZCByYXRlLCBicHMgKi8KKwl1bnNpZ25lZCBzaG9ydCB0eGJ1Zl9wZXJjZW50CVBBQ0tFRDsJLyogMDQ6ICUgb2YgVHggYnVmZmVyICovCisJdW5zaWduZWQgc2hvcnQgY29uZl9mbGFncwlQQUNLRUQ7CS8qIDA2OiBjb25maWd1cmF0aW9uIGJpdHMgKi8KKwl1bnNpZ25lZCBzaG9ydCBtdHVfbG9jYWwJUEFDS0VEOwkvKiAwODogbG9jYWwgTVRVICovCisJdW5zaWduZWQgc2hvcnQgbXR1X3JlbW90ZQlQQUNLRUQ7CS8qIDBBOiByZW1vdGUgTVRVICovCisJdW5zaWduZWQgc2hvcnQgcmVzdGFydF90bXIJUEFDS0VEOwkvKiAwQzogcmVzdGFydCB0aW1lciAqLworCXVuc2lnbmVkIHNob3J0IGF1dGhfcnNydF90bXIJUEFDS0VEOwkvKiAwRTogYXV0aGVudGljYXRpb24gdGltZXIgKi8KKwl1bnNpZ25lZCBzaG9ydCBhdXRoX3dhaXRfdG1yCVBBQ0tFRDsJLyogMTA6IGF1dGhlbnRpY2F0aW9uIHRpbWVyICovCisJdW5zaWduZWQgc2hvcnQgbWRtX2ZhaWxfdG1yCVBBQ0tFRDsJLyogMTI6IG1vZGVtIGZhaWx1cmUgdGltZXIgKi8KKwl1bnNpZ25lZCBzaG9ydCBkdHJfZHJvcF90bXIJUEFDS0VEOwkvKiAxNDogRFRSIGRyb3AgdGltZXIgKi8KKwl1bnNpZ25lZCBzaG9ydCBjb25uZWN0X3Rtb3V0CVBBQ0tFRDsJLyogMTY6IGNvbm5lY3Rpb24gdGltZW91dCAqLworCXVuc2lnbmVkIHNob3J0IGNvbmZfcmV0cnkJUEFDS0VEOwkvKiAxODogbWF4LiByZXRyeSAqLworCXVuc2lnbmVkIHNob3J0IHRlcm1fcmV0cnkJUEFDS0VEOwkvKiAxQTogbWF4LiByZXRyeSAqLworCXVuc2lnbmVkIHNob3J0IGZhaWxfcmV0cnkJUEFDS0VEOwkvKiAxQzogbWF4LiByZXRyeSAqLworCXVuc2lnbmVkIHNob3J0IGF1dGhfcmV0cnkJUEFDS0VEOwkvKiAxRTogbWF4LiByZXRyeSAqLworCXVuc2lnbmVkIGNoYXIgIGF1dGhfb3B0aW9ucwlQQUNLRUQ7CS8qIDIwOiBhdXRoZW50aWNhdGlvbiBvcHQuICovCisJdW5zaWduZWQgY2hhciAgaXBfb3B0aW9ucwlQQUNLRUQ7CS8qIDIxOiBJUCBvcHRpb25zICovCisJdW5zaWduZWQgbG9uZyAgaXBfbG9jYWwJCVBBQ0tFRDsJLyogMjI6IGxvY2FsIElQIGFkZHJlc3MgKi8KKwl1bnNpZ25lZCBsb25nICBpcF9yZW1vdGUJUEFDS0VEOwkvKiAyNjogcmVtb3RlIElQIGFkZHJlc3MgKi8KKwl1bnNpZ25lZCBjaGFyICBpcHhfb3B0aW9ucwlQQUNLRUQ7CS8qIDJBOiBJUFggb3B0aW9ucyAqLworCXVuc2lnbmVkIGNoYXIgIGlweF9uZXRub1s0XQlQQUNLRUQ7CS8qIDJCOiBJUFggbmV0IG51bWJlciAqLworCXVuc2lnbmVkIGNoYXIgIGlweF9sb2NhbFs2XQlQQUNLRUQ7CS8qIDJGOiBsb2NhbCBJUFggbm9kZSBudW1iZXIqLworCXVuc2lnbmVkIGNoYXIgIGlweF9yZW1vdGVbNl0JUEFDS0VEOwkvKiAzNTogcmVtb3RlIElQWCBub2RlIG51bS4qLworCXVuc2lnbmVkIGNoYXIgIGlweF9yb3V0ZXJbNDhdCVBBQ0tFRDsJLyogM0I6IElQWCByb3V0ZXIgbmFtZSovCisJdW5zaWduZWQgbG9uZyAgYWx0X2NwdV9jbG9jawlQQUNLRUQ7CS8qIDZCOiAgKi8KK30gcHBwNTA4X2NvbmZfdDsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBTNTA4IEFkYXB0ZXIgUmVhZCBDb25uZWN0aW9uIEluZm9ybWF0aW9uIEJsb2NrIAorICogICAgUmV0dXJuZWQgYnkgdGhlIFBQUF9HRVRfQ09OTkVDVElPTl9JTkZPIGNvbW1hbmQKKyAqLwordHlwZWRlZiBzdHJ1Y3QJcHBwNTA4X2Nvbm5lY3RfaW5mbworeworCXVuc2lnbmVkIHNob3J0IAltcnUJCVBBQ0tFRDsJLyogMDAtMDEgUmVtb3RlIE1heCBSZWMnIFVuaXQgKi8KKwl1bnNpZ25lZCBjaGFyICAJaXBfb3B0aW9ucyAJUEFDS0VEOyAvKiAwMjogTmVnb3RpYXRlZCBpcCBvcHRpb25zICAqLworCXVuc2lnbmVkIGxvbmcgIAlpcF9sb2NhbAlQQUNLRUQ7CS8qIDAzLTA2OiBsb2NhbCBJUCBhZGRyZXNzICAgICovCisJdW5zaWduZWQgbG9uZyAgCWlwX3JlbW90ZQlQQUNLRUQ7CS8qIDA3LTBBOiByZW1vdGUgSVAgYWRkcmVzcyAgICovCisJdW5zaWduZWQgY2hhcglpcHhfb3B0aW9ucwlQQUNLRUQ7IC8qIDBCOiBOZWdvdGlhdGVkIGlweCBvcHRpb25zICovCisJdW5zaWduZWQgY2hhciAgCWlweF9uZXRub1s0XQlQQUNLRUQ7CS8qIDBDLTBGOiBJUFggbmV0IG51bWJlciAgICAgICovCisJdW5zaWduZWQgY2hhciAgCWlweF9sb2NhbFs2XQlQQUNLRUQ7CS8qIDEwLTFGOiBsb2NhbCBJUFggbm9kZSAjICAgICovCisJdW5zaWduZWQgY2hhciAgCWlweF9yZW1vdGVbNl0JUEFDS0VEOwkvKiAxNi0xQjogcmVtb3RlIElQWCBub2RlICMgICAqLworCXVuc2lnbmVkIGNoYXIgIAlpcHhfcm91dGVyWzQ4XQlQQUNLRUQ7CS8qIDFDLTRCOiBJUFggcm91dGVyIG5hbWUgICAgICovCisJdW5zaWduZWQgY2hhcglhdXRoX3N0YXR1cwlQQUNLRUQ7IC8qIDRDOiBBdXRoZW50aWNhdGlvbiBTdGF0dXMgICovCisJdW5zaWduZWQgY2hhciAJaW5iZF9hdXRoX3BlZXJJRFsxXSBQQUNLRUQ7IC8qIDREOiB2YXJpYWJsZSBsZW5ndGggaW5ib3VuZCBhdXRoZW50aWNhdGVkIHBlZXIgSUQgKi8KK30gcHBwNTA4X2Nvbm5lY3RfaW5mb190OworCisvKiAnbGluZV9zcGVlZCcgZmllbGQgKi8KKyNkZWZpbmUJUFBQX0JJVFJBVEVfMTIwMAkweDAxCisjZGVmaW5lCVBQUF9CSVRSQVRFXzI0MDAJMHgwMgorI2RlZmluZQlQUFBfQklUUkFURV80ODAwCTB4MDMKKyNkZWZpbmUJUFBQX0JJVFJBVEVfOTYwMAkweDA0CisjZGVmaW5lCVBQUF9CSVRSQVRFXzE5MjAwCTB4MDUKKyNkZWZpbmUJUFBQX0JJVFJBVEVfMzg0MDAJMHgwNgorI2RlZmluZQlQUFBfQklUUkFURV80NTAwMAkweDA3CisjZGVmaW5lCVBQUF9CSVRSQVRFXzU2MDAwCTB4MDgKKyNkZWZpbmUJUFBQX0JJVFJBVEVfNjQwMDAJMHgwOQorI2RlZmluZQlQUFBfQklUUkFURV83NDAwMAkweDBBCisjZGVmaW5lCVBQUF9CSVRSQVRFXzExMjAwMAkweDBCCisjZGVmaW5lCVBQUF9CSVRSQVRFXzEyODAwMAkweDBDCisjZGVmaW5lCVBQUF9CSVRSQVRFXzE1NjAwMAkweDBECisKKy8qIERlZmluZXMgZm9yIHRoZSAnY29uZl9mbGFncycgZmllbGQgKi8KKyNkZWZpbmUJUFBQX0lHTk9SRV9UWF9BQk9SVAkweDAxCS8qIGRvbid0IHJlLXRyYW5zbWl0IGFib3J0ZWQgZnJhbWVzICovCisjZGVmaW5lCVBQUF9FTkFCTEVfVFhfU1RBVFMJMHgwMgkvKiBlbmFibGUgVHggc3RhdGlzdGljcyAqLworI2RlZmluZQlQUFBfRU5BQkxFX1JYX1NUQVRTCTB4MDQJLyogZW5hYmxlIFJ4IHN0YXRpc3RpY3MgKi8KKyNkZWZpbmUJUFBQX0VOQUJMRV9USU1FU1RBTVAJMHgwOAkvKiBlbmFibGUgdGltZXN0YW1wICovCisKKy8qICdpcF9vcHRpb25zJyBkZWZpbmVzICovCisjZGVmaW5lCVBQUF9MT0NBTF9JUF9MT0NBTAkweDAxCisjZGVmaW5lCVBQUF9MT0NBTF9JUF9SRU1PVEUJMHgwMgorI2RlZmluZQlQUFBfUkVNT1RFX0lQX0xPQ0FMCTB4MDQKKyNkZWZpbmUJUFBQX1JFTU9URV9JUF9SRU1PVEUJMHgwOAorCisvKiAnaXB4X29wdGlvbnMnIGRlZmluZXMgKi8KKyNkZWZpbmUJUFBQX1JFTU9URV9JUFhfTkVUTk8JMHgwMQorI2RlZmluZQlQUFBfUkVNT1RFX0lQWF9MT0NBTAkweDAyCisjZGVmaW5lCVBQUF9SRU1PVEVfSVBYX1JFTU9URQkweDA0CisjZGVmaW5lCVBQUF9JUFhfUk9VVEVfUklQX1NBUAkweDA4CisjZGVmaW5lCVBQUF9JUFhfUk9VVEVfTkxTUAkweDEwCisjZGVmaW5lCVBQUF9JUFhfUk9VVEVfREVGQVVMVAkweDIwCisjZGVmaW5lCVBQUF9JUFhfQ09ORl9DT01QTEVURQkweDQwCisjZGVmaW5lCVBQUF9JUFhfRU5BQkxFCQkweDgwCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUzUwOCBBZGFwdGVyIENvbmZpZ3VyYXRpb24gQmxvY2sgKHJldHVybmVkIGJ5IHRoZSBQUFBfUkVBRF9DT05GSUcgY29tbWFuZCkuCisgKi8KK3R5cGVkZWYgc3RydWN0CXBwcDUwOF9nZXRfY29uZgoreworCXVuc2lnbmVkIGxvbmcgIGJwcwlQQUNLRUQ7CS8qIDAwOiBiYXVkIHJhdGUsIGJwcyAqLworCXBwcDUwOF9jb25mX3QgIGNvbmYJUEFDS0VEOwkvKiAwNDogcmVxdWVzdGVkIGNvbmZpZy4gKi8KKwl1bnNpZ25lZCBzaG9ydCB0eGJfbnVtCVBBQ0tFRDsJLyogNkY6IG51bWJlciBvZiBUeCBidWZmZXJzICovCisJdW5zaWduZWQgc2hvcnQgcnhiX251bQlQQUNLRUQ7CS8qIDcxOiBudW1iZXIgb2YgUnggYnVmZmVycyAqLworfSBwcHA1MDhfZ2V0X2NvbmZfdDsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBTNTA4IE9wZXJhdGlvbmFsIFN0YXRpc3RpY3MgKHJldHVybmVkIGJ5IHRoZSBQUFBfUkVBRF9TVEFUSVNUSUMgY29tbWFuZCkuCisgKi8KK3R5cGVkZWYgc3RydWN0IHBwcDUwOF9zdGF0cworeworCXVuc2lnbmVkIHNob3J0IHJlc2VydmVkMQlQQUNLRUQ7CS8qIDAwOiAqLworCXVuc2lnbmVkIHNob3J0IHJ4X2JhZF9sZW4JUEFDS0VEOwkvKiAwMjogKi8KKwl1bnNpZ25lZCBzaG9ydCByZXNlcnZlZDIJUEFDS0VEOwkvKiAwNDogKi8KKwl1bnNpZ25lZCBsb25nICB0eF9mcmFtZXMJUEFDS0VEOwkvKiAwNjogKi8KKwl1bnNpZ25lZCBsb25nICB0eF9ieXRlcwlQQUNLRUQ7CS8qIDBBOiAqLworCXVuc2lnbmVkIGxvbmcgIHJ4X2ZyYW1lcwlQQUNLRUQ7CS8qIDBFOiAqLworCXVuc2lnbmVkIGxvbmcgIHJ4X2J5dGVzCVBBQ0tFRDsJLyogMTI6ICovCit9IHBwcDUwOF9zdGF0c190OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEFkYXB0ZXIgRXJyb3IgU3RhdGlzdGljcyAocmV0dXJuZWQgYnkgdGhlIFBQUF9SRUFEX0VSUk9SX1NUQVRTIGNvbW1hbmQpLgorICovCit0eXBlZGVmIHN0cnVjdAlwcHBfZXJyX3N0YXRzCit7CisJdW5zaWduZWQgY2hhcgkgcnhfb3ZlcnJ1bglQQUNLRUQ7CS8qIDAwOiBSeCBvdmVycnVuIGVycm9ycyAqLworCXVuc2lnbmVkIGNoYXIJIHJ4X2JhZF9jcmMJUEFDS0VEOwkvKiAwMTogUnggQ1JDIGVycm9ycyAqLworCXVuc2lnbmVkIGNoYXIJIHJ4X2Fib3J0CVBBQ0tFRDsJLyogMDI6IFJ4IGFib3J0ZWQgZnJhbWVzICovCisJdW5zaWduZWQgY2hhcgkgcnhfbG9zdAlQQUNLRUQ7CS8qIDAzOiBSeCBmcmFtZXMgbG9zdCAqLworCXVuc2lnbmVkIGNoYXIJIHR4X2Fib3J0CVBBQ0tFRDsJLyogMDQ6IFR4IGFib3J0ZWQgZnJhbWVzICovCisJdW5zaWduZWQgY2hhcgkgdHhfdW5kZXJydW4JUEFDS0VEOwkvKiAwNTogVHggdW5kZXJydW4gZXJyb3JzICovCisJdW5zaWduZWQgY2hhcgkgdHhfbWlzc2VkX2ludHIJUEFDS0VEOwkvKiAwNjogVHggdW5kZXJydW5zIG1pc3NlZCAqLworCXVuc2lnbmVkIGNoYXIJIHJlc2VydmVkCVBBQ0tFRDsJLyogMDc6IFR4IHVuZGVycnVucyBtaXNzZWQgKi8KKwl1bnNpZ25lZCBjaGFyCSBkY2RfdHJhbnMJUEFDS0VEOwkvKiAwODogRENEIHRyYW5zaXRpb25zICovCisJdW5zaWduZWQgY2hhcgkgY3RzX3RyYW5zCVBBQ0tFRDsJLyogMDk6IENUUyB0cmFuc2l0aW9ucyAqLworfSBwcHBfZXJyX3N0YXRzX3Q7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUGFja2V0IFN0YXRpc3RpY3MgKHJldHVybmVkIGJ5IHRoZSBQUFBfUkVBRF9QQUNLRVRfU1RBVFMgY29tbWFuZCkuCisgKi8KK3R5cGVkZWYgc3RydWN0CXBwcF9wa3Rfc3RhdHMKK3sKKwl1bnNpZ25lZCBzaG9ydCByeF9iYWRfaGVhZGVyCVBBQ0tFRDsJLyogMDA6ICovCisJdW5zaWduZWQgc2hvcnQgcnhfcHJvdF91bmtud24JUEFDS0VEOwkvKiAwMjogKi8KKwl1bnNpZ25lZCBzaG9ydCByeF90b29fbGFyZ2UJUEFDS0VEOwkvKiAwNDogKi8KKwl1bnNpZ25lZCBzaG9ydCByeF9sY3AJCVBBQ0tFRDsJLyogMDY6ICovCisJdW5zaWduZWQgc2hvcnQgdHhfbGNwCQlQQUNLRUQ7CS8qIDA4OiAqLworCXVuc2lnbmVkIHNob3J0IHJ4X2lwY3AJCVBBQ0tFRDsJLyogMEE6ICovCisJdW5zaWduZWQgc2hvcnQgdHhfaXBjcAkJUEFDS0VEOwkvKiAwQzogKi8KKwl1bnNpZ25lZCBzaG9ydCByeF9pcHhjcAkJUEFDS0VEOwkvKiAwRTogKi8KKwl1bnNpZ25lZCBzaG9ydCB0eF9pcHhjcAkJUEFDS0VEOwkvKiAxMDogKi8KKwl1bnNpZ25lZCBzaG9ydCByeF9wYXAJCVBBQ0tFRDsJLyogMTI6ICovCisJdW5zaWduZWQgc2hvcnQgdHhfcGFwCQlQQUNLRUQ7CS8qIDE0OiAqLworCXVuc2lnbmVkIHNob3J0IHJ4X2NoYXAJCVBBQ0tFRDsJLyogMTY6ICovCisJdW5zaWduZWQgc2hvcnQgdHhfY2hhcAkJUEFDS0VEOwkvKiAxODogKi8KKwl1bnNpZ25lZCBzaG9ydCByeF9scXIJCVBBQ0tFRDsJLyogMUE6ICovCisJdW5zaWduZWQgc2hvcnQgdHhfbHFyCQlQQUNLRUQ7CS8qIDFDOiAqLworCXVuc2lnbmVkIHNob3J0IHJ4X2lwCQlQQUNLRUQ7CS8qIDFFOiAqLworCXVuc2lnbmVkIHNob3J0IHR4X2lwCQlQQUNLRUQ7CS8qIDIwOiAqLworCXVuc2lnbmVkIHNob3J0IHJ4X2lweAkJUEFDS0VEOwkvKiAyMjogKi8KKwl1bnNpZ25lZCBzaG9ydCB0eF9pcHgJCVBBQ0tFRDsJLyogMjQ6ICovCit9IHBwcF9wa3Rfc3RhdHNfdDsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBMQ1AgU3RhdGlzdGljcyAocmV0dXJuZWQgYnkgdGhlIFBQUF9SRUFEX0xDUF9TVEFUUyBjb21tYW5kKS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QJcHBwX2xjcF9zdGF0cworeworCXVuc2lnbmVkIHNob3J0IHJ4X3Vua25vd24JUEFDS0VEOwkvKiAwMDogdW5rbm93biBMQ1AgdHlwZSAqLworCXVuc2lnbmVkIHNob3J0IHJ4X2NvbmZfcnFzdAlQQUNLRUQ7CS8qIDAyOiBDb25maWd1cmUtUmVxdWVzdCAqLworCXVuc2lnbmVkIHNob3J0IHJ4X2NvbmZfYWNrCVBBQ0tFRDsJLyogMDQ6IENvbmZpZ3VyZS1BY2sgKi8KKwl1bnNpZ25lZCBzaG9ydCByeF9jb25mX25hawlQQUNLRUQ7CS8qIDA2OiBDb25maWd1cmUtTmFrICovCisJdW5zaWduZWQgc2hvcnQgcnhfY29uZl9yZWoJUEFDS0VEOwkvKiAwODogQ29uZmlndXJlLVJlamVjdCAqLworCXVuc2lnbmVkIHNob3J0IHJ4X3Rlcm1fcnFzdAlQQUNLRUQ7CS8qIDBBOiBUZXJtaW5hdGUtUmVxdWVzdCAqLworCXVuc2lnbmVkIHNob3J0IHJ4X3Rlcm1fYWNrCVBBQ0tFRDsJLyogMEM6IFRlcm1pbmF0ZS1BY2sgKi8KKwl1bnNpZ25lZCBzaG9ydCByeF9jb2RlX3JlaglQQUNLRUQ7CS8qIDBFOiBDb2RlLVJlamVjdCAqLworCXVuc2lnbmVkIHNob3J0IHJ4X3Byb3RvX3JlaglQQUNLRUQ7CS8qIDEwOiBQcm90b2NvbC1SZWplY3QgKi8KKwl1bnNpZ25lZCBzaG9ydCByeF9lY2hvX3Jxc3QJUEFDS0VEOwkvKiAxMjogRWNoby1SZXF1ZXN0ICovCisJdW5zaWduZWQgc2hvcnQgcnhfZWNob19yZXBseQlQQUNLRUQ7CS8qIDE0OiBFY2hvLVJlcGx5ICovCisJdW5zaWduZWQgc2hvcnQgcnhfZGlzY19ycXN0CVBBQ0tFRDsJLyogMTY6IERpc2NhcmQtUmVxdWVzdCAqLworCXVuc2lnbmVkIHNob3J0IHR4X2NvbmZfcnFzdAlQQUNLRUQ7CS8qIDE4OiBDb25maWd1cmUtUmVxdWVzdCAqLworCXVuc2lnbmVkIHNob3J0IHR4X2NvbmZfYWNrCVBBQ0tFRDsJLyogMUE6IENvbmZpZ3VyZS1BY2sgKi8KKwl1bnNpZ25lZCBzaG9ydCB0eF9jb25mX25hawlQQUNLRUQ7CS8qIDFDOiBDb25maWd1cmUtTmFrICovCisJdW5zaWduZWQgc2hvcnQgdHhfY29uZl9yZWoJUEFDS0VEOwkvKiAxRTogQ29uZmlndXJlLVJlamVjdCAqLworCXVuc2lnbmVkIHNob3J0IHR4X3Rlcm1fcnFzdAlQQUNLRUQ7CS8qIDIwOiBUZXJtaW5hdGUtUmVxdWVzdCAqLworCXVuc2lnbmVkIHNob3J0IHR4X3Rlcm1fYWNrCVBBQ0tFRDsJLyogMjI6IFRlcm1pbmF0ZS1BY2sgKi8KKwl1bnNpZ25lZCBzaG9ydCB0eF9jb2RlX3JlaglQQUNLRUQ7CS8qIDI0OiBDb2RlLVJlamVjdCAqLworCXVuc2lnbmVkIHNob3J0IHR4X3Byb3RvX3JlaglQQUNLRUQ7CS8qIDI2OiBQcm90b2NvbC1SZWplY3QgKi8KKwl1bnNpZ25lZCBzaG9ydCB0eF9lY2hvX3Jxc3QJUEFDS0VEOwkvKiAyODogRWNoby1SZXF1ZXN0ICovCisJdW5zaWduZWQgc2hvcnQgdHhfZWNob19yZXBseQlQQUNLRUQ7CS8qIDJBOiBFY2hvLVJlcGx5ICovCisJdW5zaWduZWQgc2hvcnQgdHhfZGlzY19ycXN0CVBBQ0tFRDsJLyogMkU6IERpc2NhcmQtUmVxdWVzdCAqLworCXVuc2lnbmVkIHNob3J0IHJ4X3Rvb19sYXJnZQlQQUNLRUQ7CS8qIDMwOiBwYWNrZXRzIHRvbyBsYXJnZSAqLworCXVuc2lnbmVkIHNob3J0IHJ4X2Fja19pbnZhbAlQQUNLRUQ7CS8qIDMyOiBpbnZhbGlkIENvbmYtQWNrICovCisJdW5zaWduZWQgc2hvcnQgcnhfcmVqX2ludmFsCVBBQ0tFRDsJLyogMzQ6IGludmFsaWQgQ29uZi1SZWplY3QgKi8KKwl1bnNpZ25lZCBzaG9ydCByeF9yZWpfYmFkaWQJUEFDS0VEOwkvKiAzNjogQ29uZi1SZWplY3Qgdy9iYWQgSUQgKi8KK30gcHBwX2xjcF9zdGF0c190OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIExvb3BiYWNrIEVycm9yIFN0YXRpc3RpY3MgKHJldHVybmVkIGJ5IHRoZSBQUFBfUkVBRF9MUEJLX1NUQVRTIGNvbW1hbmQpLgorICovCit0eXBlZGVmIHN0cnVjdAlwcHBfbHBia19zdGF0cworeworCXVuc2lnbmVkIHNob3J0IGNvbmZfbWFnaWMJUEFDS0VEOwkvKiAwMDogICovCisJdW5zaWduZWQgc2hvcnQgbG9jX2VjaG9fcnFzdAlQQUNLRUQ7CS8qIDAyOiAgKi8KKwl1bnNpZ25lZCBzaG9ydCByZW1fZWNob19ycXN0CVBBQ0tFRDsJLyogMDQ6ICAqLworCXVuc2lnbmVkIHNob3J0IGxvY19lY2hvX3JlcGx5CVBBQ0tFRDsJLyogMDY6ICAqLworCXVuc2lnbmVkIHNob3J0IHJlbV9lY2hvX3JlcGx5CVBBQ0tFRDsJLyogMDg6ICAqLworCXVuc2lnbmVkIHNob3J0IGxvY19kaXNjX3Jxc3QJUEFDS0VEOwkvKiAwQTogICovCisJdW5zaWduZWQgc2hvcnQgcmVtX2Rpc2NfcnFzdAlQQUNLRUQ7CS8qIDBDOiAgKi8KKwl1bnNpZ25lZCBzaG9ydCBlY2hvX3R4X2NvbGxzbglQQUNLRUQ7CS8qIDBFOiAgKi8KKwl1bnNpZ25lZCBzaG9ydCBlY2hvX3J4X2NvbGxzbglQQUNLRUQ7CS8qIDEwOiAgKi8KK30gcHBwX2xwYmtfc3RhdHNfdDsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBQcm90b2NvbCBTdGF0aXN0aWNzIChyZXR1cm5lZCBieSB0aGUgUFBQX1JFQURfSVBDUF9TVEFUUyBhbmQKKyAqIFBQUF9SRUFEX0lQWENQX1NUQVRTIGNvbW1hbmRzKS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QJcHBwX3Byb3Rfc3RhdHMKK3sKKwl1bnNpZ25lZCBzaG9ydCByeF91bmtub3duCVBBQ0tFRDsJLyogMDA6IHVua25vd24gdHlwZSAqLworCXVuc2lnbmVkIHNob3J0IHJ4X2NvbmZfcnFzdAlQQUNLRUQ7CS8qIDAyOiBDb25maWd1cmUtUmVxdWVzdCAqLworCXVuc2lnbmVkIHNob3J0IHJ4X2NvbmZfYWNrCVBBQ0tFRDsJLyogMDQ6IENvbmZpZ3VyZS1BY2sgKi8KKwl1bnNpZ25lZCBzaG9ydCByeF9jb25mX25hawlQQUNLRUQ7CS8qIDA2OiBDb25maWd1cmUtTmFrICovCisJdW5zaWduZWQgc2hvcnQgcnhfY29uZl9yZWoJUEFDS0VEOwkvKiAwODogQ29uZmlndXJlLVJlamVjdCAqLworCXVuc2lnbmVkIHNob3J0IHJ4X3Rlcm1fcnFzdAlQQUNLRUQ7CS8qIDBBOiBUZXJtaW5hdGUtUmVxdWVzdCAqLworCXVuc2lnbmVkIHNob3J0IHJ4X3Rlcm1fYWNrCVBBQ0tFRDsJLyogMEM6IFRlcm1pbmF0ZS1BY2sgKi8KKwl1bnNpZ25lZCBzaG9ydCByeF9jb2RlX3JlaglQQUNLRUQ7CS8qIDBFOiBDb2RlLVJlamVjdCAqLworCXVuc2lnbmVkIHNob3J0IHJlc2VydmVkCQlQQUNLRUQ7CS8qIDEwOiAqLworCXVuc2lnbmVkIHNob3J0IHR4X2NvbmZfcnFzdAlQQUNLRUQ7CS8qIDEyOiBDb25maWd1cmUtUmVxdWVzdCAqLworCXVuc2lnbmVkIHNob3J0IHR4X2NvbmZfYWNrCVBBQ0tFRDsJLyogMTQ6IENvbmZpZ3VyZS1BY2sgKi8KKwl1bnNpZ25lZCBzaG9ydCB0eF9jb25mX25hawlQQUNLRUQ7CS8qIDE2OiBDb25maWd1cmUtTmFrICovCisJdW5zaWduZWQgc2hvcnQgdHhfY29uZl9yZWoJUEFDS0VEOwkvKiAxODogQ29uZmlndXJlLVJlamVjdCAqLworCXVuc2lnbmVkIHNob3J0IHR4X3Rlcm1fcnFzdAlQQUNLRUQ7CS8qIDFBOiBUZXJtaW5hdGUtUmVxdWVzdCAqLworCXVuc2lnbmVkIHNob3J0IHR4X3Rlcm1fYWNrCVBBQ0tFRDsJLyogMUM6IFRlcm1pbmF0ZS1BY2sgKi8KKwl1bnNpZ25lZCBzaG9ydCB0eF9jb2RlX3JlaglQQUNLRUQ7CS8qIDFFOiBDb2RlLVJlamVjdCAqLworCXVuc2lnbmVkIHNob3J0IHJ4X3Rvb19sYXJnZQlQQUNLRUQ7CS8qIDIwOiBwYWNrZXRzIHRvbyBsYXJnZSAqLworCXVuc2lnbmVkIHNob3J0IHJ4X2Fja19pbnZhbAlQQUNLRUQ7CS8qIDIyOiBpbnZhbGlkIENvbmYtQWNrICovCisJdW5zaWduZWQgc2hvcnQgcnhfcmVqX2ludmFsCVBBQ0tFRDsJLyogMjQ6IGludmFsaWQgQ29uZi1SZWplY3QgKi8KKwl1bnNpZ25lZCBzaG9ydCByeF9yZWpfYmFkaWQJUEFDS0VEOwkvKiAyNjogQ29uZi1SZWplY3Qgdy9iYWQgSUQgKi8KK30gcHBwX3Byb3Rfc3RhdHNfdDsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBQQVAgU3RhdGlzdGljcyAocmV0dXJuZWQgYnkgdGhlIFBQUF9SRUFEX1BBUF9TVEFUUyBjb21tYW5kKS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QJcHBwX3BhcF9zdGF0cworeworCXVuc2lnbmVkIHNob3J0IHJ4X3Vua25vd24JUEFDS0VEOwkvKiAwMDogdW5rbm93biB0eXBlICovCisJdW5zaWduZWQgc2hvcnQgcnhfYXV0aF9ycXN0CVBBQ0tFRDsJLyogMDI6IEF1dGhlbnRpY2F0ZS1SZXF1ZXN0ICovCisJdW5zaWduZWQgc2hvcnQgcnhfYXV0aF9hY2sJUEFDS0VEOwkvKiAwNDogQXV0aGVudGljYXRlLUFjayAqLworCXVuc2lnbmVkIHNob3J0IHJ4X2F1dGhfbmFrCVBBQ0tFRDsJLyogMDY6IEF1dGhlbnRpY2F0ZS1OYWsgKi8KKwl1bnNpZ25lZCBzaG9ydCByZXNlcnZlZAkJUEFDS0VEOwkvKiAwODogKi8KKwl1bnNpZ25lZCBzaG9ydCB0eF9hdXRoX3Jxc3QJUEFDS0VEOwkvKiAwQTogQXV0aGVudGljYXRlLVJlcXVlc3QgKi8KKwl1bnNpZ25lZCBzaG9ydCB0eF9hdXRoX2FjawlQQUNLRUQ7CS8qIDBDOiBBdXRoZW50aWNhdGUtQWNrICovCisJdW5zaWduZWQgc2hvcnQgdHhfYXV0aF9uYWsJUEFDS0VEOwkvKiAwRTogQXV0aGVudGljYXRlLU5hayAqLworCXVuc2lnbmVkIHNob3J0IHJ4X3Rvb19sYXJnZQlQQUNLRUQ7CS8qIDEwOiBwYWNrZXRzIHRvbyBsYXJnZSAqLworCXVuc2lnbmVkIHNob3J0IHJ4X2JhZF9wZWVyaWQJUEFDS0VEOwkvKiAxMjogaW52YWxpZCBwZWVyIElEICovCisJdW5zaWduZWQgc2hvcnQgcnhfYmFkX3Bhc3N3ZAlQQUNLRUQ7CS8qIDE0OiBpbnZhbGlkIHBhc3N3b3JkICovCit9IHBwcF9wYXBfc3RhdHNfdDsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBDSEFQIFN0YXRpc3RpY3MgKHJldHVybmVkIGJ5IHRoZSBQUFBfUkVBRF9DSEFQX1NUQVRTIGNvbW1hbmQpLgorICovCit0eXBlZGVmIHN0cnVjdAlwcHBfY2hhcF9zdGF0cworeworCXVuc2lnbmVkIHNob3J0IHJ4X3Vua25vd24JUEFDS0VEOwkvKiAwMDogdW5rbm93biB0eXBlICovCisJdW5zaWduZWQgc2hvcnQgcnhfY2hhbGxlbmdlCVBBQ0tFRDsJLyogMDI6IEF1dGhlbnRpY2F0ZS1SZXF1ZXN0ICovCisJdW5zaWduZWQgc2hvcnQgcnhfcmVzcG9uc2UJUEFDS0VEOwkvKiAwNDogQXV0aGVudGljYXRlLUFjayAqLworCXVuc2lnbmVkIHNob3J0IHJ4X3N1Y2Nlc3MJUEFDS0VEOwkvKiAwNjogQXV0aGVudGljYXRlLU5hayAqLworCXVuc2lnbmVkIHNob3J0IHJ4X2ZhaWx1cmUJUEFDS0VEOwkvKiAwODogQXV0aGVudGljYXRlLU5hayAqLworCXVuc2lnbmVkIHNob3J0IHJlc2VydmVkCQlQQUNLRUQ7CS8qIDBBOiAqLworCXVuc2lnbmVkIHNob3J0IHR4X2NoYWxsZW5nZQlQQUNLRUQ7CS8qIDBDOiBBdXRoZW50aWNhdGUtUmVxdWVzdCAqLworCXVuc2lnbmVkIHNob3J0IHR4X3Jlc3BvbnNlCVBBQ0tFRDsJLyogMEU6IEF1dGhlbnRpY2F0ZS1BY2sgKi8KKwl1bnNpZ25lZCBzaG9ydCB0eF9zdWNjZXNzCVBBQ0tFRDsJLyogMTA6IEF1dGhlbnRpY2F0ZS1OYWsgKi8KKwl1bnNpZ25lZCBzaG9ydCB0eF9mYWlsdXJlCVBBQ0tFRDsJLyogMTI6IEF1dGhlbnRpY2F0ZS1OYWsgKi8KKwl1bnNpZ25lZCBzaG9ydCByeF90b29fbGFyZ2UJUEFDS0VEOwkvKiAxNDogcGFja2V0cyB0b28gbGFyZ2UgKi8KKwl1bnNpZ25lZCBzaG9ydCByeF9iYWRfcGVlcmlkCVBBQ0tFRDsJLyogMTY6IGludmFsaWQgcGVlciBJRCAqLworCXVuc2lnbmVkIHNob3J0IHJ4X2JhZF9wYXNzd2QJUEFDS0VEOwkvKiAxODogaW52YWxpZCBwYXNzd29yZCAqLworCXVuc2lnbmVkIHNob3J0IHJ4X2JhZF9tZDUJUEFDS0VEOwkvKiAxQTogaW52YWxpZCBNRDUgZm9ybWF0ICovCisJdW5zaWduZWQgc2hvcnQgcnhfYmFkX3Jlc3AJUEFDS0VEOwkvKiAxQzogaW52YWxpZCByZXNwb25zZSAqLworfSBwcHBfY2hhcF9zdGF0c190OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIENvbm5lY3Rpb24gSW5mb3JtYXRpb24gKHJldHVybmVkIGJ5IHRoZSBQUFBfR0VUX0NPTk5FQ1RJT05fSU5GTyBjb21tYW5kKS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QJcHBwX2Nvbm5faW5mbworeworCXVuc2lnbmVkIHNob3J0IHJlbW90ZV9tcnUJUEFDS0VEOwkvKiAwMDogICovCisJdW5zaWduZWQgY2hhciAgaXBfb3B0aW9ucwlQQUNLRUQ7CS8qIDAyOiAgKi8KKwl1bnNpZ25lZCBjaGFyICBpcF9sb2NhbFs0XQlQQUNLRUQ7CS8qIDAzOiAgKi8KKwl1bnNpZ25lZCBjaGFyICBpcF9yZW1vdGVbNF0JUEFDS0VEOwkvKiAwNzogICovCisJdW5zaWduZWQgY2hhciAgaXB4X29wdGlvbnMJUEFDS0VEOwkvKiAwQjogICovCisJdW5zaWduZWQgY2hhciAgaXB4X25ldHdvcmtbNF0JUEFDS0VEOwkvKiAwQzogICovCisJdW5zaWduZWQgY2hhciAgaXB4X2xvY2FsWzZdCVBBQ0tFRDsJLyogMTA6ICAqLworCXVuc2lnbmVkIGNoYXIgIGlweF9yZW1vdGVbNl0JUEFDS0VEOwkvKiAxNjogICovCisJdW5zaWduZWQgY2hhciAgaXB4X3JvdXRlcls0OF0JUEFDS0VEOwkvKiAxQzogICovCisJdW5zaWduZWQgY2hhciAgYXV0aF9zdGF0dXMJUEFDS0VEOwkvKiA0QzogICovCisJdW5zaWduZWQgY2hhciAgcGVlcl9pZFswXQlQQUNLRUQ7CS8qIDREOiAgKi8KK30gcHBwX2Nvbm5faW5mb190OworCisvKiBEYXRhIHN0cnVjdHVyZSBmb3IgU0VUX1RSSUdHRVJfSU5UUiBjb21tYW5kCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgcHBwX2ludHJfaW5mb3sKKwl1bnNpZ25lZCBjaGFyICBpX2VuYWJsZQkJUEFDS0VEOyAvKiAwIEludGVycnVwdCBlbmFibGUgYml0cyAqLworCXVuc2lnbmVkIGNoYXIgIGlycSAgICAgICAgICAgICAgUEFDS0VEOyAvKiAxIElycSBudW1iZXIgKi8KKwl1bnNpZ25lZCBzaG9ydCB0aW1lcl9sZW4gICAgICAgIFBBQ0tFRDsgLyogMiBUaW1lciBkZWxheSAqLworfSBwcHBfaW50cl9pbmZvX3Q7CisKKworI2RlZmluZSBGVDFfTU9OSVRPUl9TVEFUVVNfQ1RSTCAgICAgICAgICAgICAgICAgICAgICAgICAweDgwCisjZGVmaW5lIFNFVF9GVDFfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODEKKworCisKKy8qIFNwZWNpYWwgVURQIGRyaXZlcnMgbWFuYWdlbWVudCBjb21tYW5kcyAqLworI2RlZmluZSBQUElQRV9FTkFCTEVfVFJBQ0lORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwCisjZGVmaW5lIFBQSVBFX0RJU0FCTEVfVFJBQ0lORyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjEKKyNkZWZpbmUgUFBJUEVfR0VUX1RSQUNFX0lORk8gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMgorI2RlZmluZSBQUElQRV9HRVRfSUJBX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIzCisjZGVmaW5lIFBQSVBFX0tJTExfQk9BUkQgICAgIAkJCQkweDI0CisjZGVmaW5lIFBQSVBFX0ZUMV9SRUFEX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjUKKyNkZWZpbmUgUFBJUEVfRFJJVkVSX1NUQVRfSUZTRU5EICAgICAgICAgICAgICAgICAgICAgICAgMHgyNgorI2RlZmluZSBQUElQRV9EUklWRVJfU1RBVF9JTlRSICAgICAgICAgICAgICAgICAgICAgICAgICAweDI3CisjZGVmaW5lIFBQSVBFX0RSSVZFUl9TVEFUX0dFTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjgKKyNkZWZpbmUgUFBJUEVfRkxVU0hfRFJJVkVSX1NUQVRTICAgICAgICAgICAgICAgICAgICAgICAgMHgyOQorI2RlZmluZSBQUElQRV9ST1VURVJfVVBfVElNRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDMwCisKKyNkZWZpbmUgRElTQUJMRV9UUkFDSU5HIAkJCQkweDAwCisjZGVmaW5lIFRSQUNFX1NJR05BTExJTkdfRlJBTUVTCQkJCTB4MDEKKyNkZWZpbmUgVFJBQ0VfREFUQV9GUkFNRVMJCQkJMHgwMgorCisKKworI2lmZGVmCQlfTVNDXworIyAgcHJhZ21hCXBhY2soKQorI2VuZGlmCisjZW5kaWYJLyogX1NETEFfUFBQX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2RsYV94MjUuaCBiL2luY2x1ZGUvbGludXgvc2RsYV94MjUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2RiOTgwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9zZGxhX3gyNS5oCkBAIC0wLDAgKzEsNzcyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogc2RsYV94MjUuaAlTYW5nb21hIFguMjUgZmlybXdhcmUgQVBJIGRlZmluaXRpb25zLgorKgorKiBBdXRob3I6CU5lbmFkIENvcmJpYwk8bmNvcmJpY0BzYW5nb21hLmNvbT4KKyoKKyogQ29weXJpZ2h0OgkoYykgMTk5NS0yMDAwIFNhbmdvbWEgVGVjaG5vbG9naWVzIEluYy4KKyoKKyoJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyoJCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisqCQlhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKwkJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKiBGZWIgMjgsIDIwMDAgIE5lbmFkIENvcmJpYyAgICBVcGRhdGVkIGZvciBzb2NrZXQgYmFzZWQgeDI1YXBpCisqIERlYyAxMywgMTk5NglHZW5lIEtvemluCUluaXRpYWwgdmVyc2lvbgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmCV9TRExBX1gyNV9ICisjZGVmaW5lCV9TRExBX1gyNV9ICisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogTm90ZXM6CisgKiAtLS0tLS0KKyAqIDEuIEFsbCBzdHJ1Y3R1cmVzIGRlZmluZWQgaW4gdGhpcyBmaWxlIGFyZSBieXRlLWFsaW5lZC4gIAorICoJQ29tcGlsZXIJUGxhdGZvcm0JCisgKgktLS0tLS0tLQktLS0tLS0tLQorICoJR05VIEMJCUxpbnV4CisgKgorICovCisKKyNpZm5kZWYJUEFDS0VECisjCWRlZmluZQlQQUNLRUQJX19hdHRyaWJ1dGVfXygocGFja2VkKSkKKyNlbmRpZgkvKiBQQUNLRUQgKi8KKworLyoqKioqKglDT05TVEFOVFMgREVGSU5JVElPTlMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUJWDI1X01BWF9DSEFOCTI1NQkvKiBtYXggbnVtYmVyIG9mIG9wZW4gWC4yNSBjaXJjdWl0cyAqLworI2RlZmluZQlYMjVfTUFYX0RBVEEJMTAyNAkvKiBtYXggbGVuZ3RoIG9mIFguMjUgZGF0YSBidWZmZXIgKi8KKy8qCisgKiBYLjI1IHNoYXJlZCBtZW1vcnkgbGF5b3V0LgorICovCisjZGVmaW5lCVgyNV9NQk9YX09GRlMJMHgxNkIwCS8qIGdlbmVyYWwgbWFpbGJveCBibG9jayAqLworI2RlZmluZQlYMjVfUlhNQk9YX09GRlMJMHgxQUQwCS8qIHJlY2VpdmUgbWFpbGJveCAqLworI2RlZmluZQlYMjVfU1RBVFVTX09GRlMJMHgxRUYwCS8qIFguMjUgc3RhdHVzIHN0cnVjdHVyZSAqLworI2RlZmluZSBYMjVfTUJfVkVDVE9SCTB4RTAwMAkvKiBTNTE0IG1haWxib3ggd2luZG93IHZlY290ciAqLworI2RlZmluZSBYMjVfTUlTQ19IRExDX0JJVFMgMHgxRjAwIC8qWC4yNSBtaXNjYWxsYW5lb3VzIEhETEMgYml0cyAqLworCisvKiBjb2RlIGxldmVscyAqLworI2RlZmluZSBIRExDX0xFVkVMIDB4MDEKKyNkZWZpbmUgWDI1X0xFVkVMICAweDAyCisjZGVmaW5lIFgyNV9BTkRfSERMQ19MRVZFTCAweDAzCisjZGVmaW5lIERPX0hETENfTEVWRUxfRVJST1JfQ0hFQ0tJTkcgMHgwNAorCisvKioqKioqIERBVEEgU1RSVUNUVVJFUyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBYLjI1IENvbW1hbmQgQmxvY2suCisgKi8KK3R5cGVkZWYgc3RydWN0IFgyNUNtZAoreworCXVuc2lnbmVkIGNoYXIgY29tbWFuZAlQQUNLRUQ7CS8qIGNvbW1hbmQgY29kZSAqLworCXVuc2lnbmVkIHNob3J0IGxlbmd0aAlQQUNLRUQ7CS8qIHRyYW5zZmVyIGRhdGEgbGVuZ3RoICovCisJdW5zaWduZWQgY2hhciByZXN1bHQJUEFDS0VEOwkvKiByZXR1cm4gY29kZSAqLworCXVuc2lnbmVkIGNoYXIgcGYJUEFDS0VEOwkvKiBQL0YgYml0ICovCisJdW5zaWduZWQgc2hvcnQgbGNuCVBBQ0tFRDsJLyogbG9naWNhbCBjaGFubmVsICovCisJdW5zaWduZWQgY2hhciBxZG0JUEFDS0VEOwkvKiBRL0QvTSBiaXRzICovCisJdW5zaWduZWQgY2hhciBjYXVzZQlQQUNLRUQ7CS8qIGNhdXNlIGZpZWxkICovCisJdW5zaWduZWQgY2hhciBkaWFnbglQQUNLRUQ7CS8qIGRpYWdub3N0aWNzICovCisJdW5zaWduZWQgY2hhciBwa3RUeXBlCVBBQ0tFRDsJLyogcGFja2V0IHR5cGUgKi8KKwl1bnNpZ25lZCBjaGFyIHJlc3J2WzRdCVBBQ0tFRDsJLyogcmVzZXJ2ZWQgKi8KK30gVFgyNUNtZDsKKworLyoKKyAqIERlZmluZXMgZm9yIHRoZSAnY29tbWFuZCcgZmllbGQuCisgKi8KKy8qLS0tLS0gR2VuZXJhbCBjb21tYW5kcyAtLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFgyNV9TRVRfR0xPQkFMX1ZBUlMJMHgwQiAgIAkvKiBzZXQgZ2xvYmFsIHZhcmlhYmxlcyAqLyAKKyNkZWZpbmUgWDI1X1JFQURfTU9ERU1fU1RBVFVTCTB4MEMgCS8qIHJlYWQgbW9kZW0gc3RhdHVzICovCisjZGVmaW5lIFgyNV9SRUFEX0NPREVfVkVSU0lPTgkweDE1CS8qIHJlYWQgZmlybXdhcmUgdmVyc2lvbiBudW1iZXIgKi8KKyNkZWZpbmUgWDI1X1RSQUNFX0NPTkZJR1VSRQkweDE0CS8qIGNvbmZpZ3VyZSB0cmFjZSBmYWNpbGl0eSAqLworI2RlZmluZSBYMjVfUkVBRF9UUkFDRV9EQVRBCTB4MTYJLyogcmVhZCB0cmFjZSBkYXRhICovCisjZGVmaW5lCVgyNV9TRVRfSU5URVJSVVBUX01PREUJMHgxNwkvKiBzZXQgaW50ZXJydXB0IGdlbmVyYXRpb24gbW9kZSAqLworI2RlZmluZQlYMjVfUkVBRF9JTlRFUlJVUFRfTU9ERQkweDE4CS8qIHJlYWQgaW50ZXJydXB0IGdlbmVyYXRpb24gbW9kZSAqLworLyotLS0tLSBIRExDLWxldmVsIGNvbW1hbmRzIC0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgWDI1X0hETENfTElOS19DT05GSUdVUkUJMHgwMQkvKiBjb25maWd1cmUgSERMQyBsaW5rIGxldmVsICovICAgCisjZGVmaW5lIFgyNV9IRExDX0xJTktfT1BFTgkweDAyCS8qIG9wZW4gSERMQyBsaW5rICovICAgICAgICAgCQorI2RlZmluZSBYMjVfSERMQ19MSU5LX0NMT1NFCTB4MDMJLyogY2xvc2UgSERMQyBsaW5rICovCisjZGVmaW5lIFgyNV9IRExDX0xJTktfU0VUVVAJMHgwNAkvKiBzZXQgdXAgSERMQyBsaW5rICovIAorI2RlZmluZSBYMjVfSERMQ19MSU5LX0RJU0MJMHgwNQkvKiBkaXNjb25uZWN0IERITEMgbGluayAqLworI2RlZmluZSBYMjVfSERMQ19MSU5LX1NUQVRVUwkweDA2CS8qIHJlYWQgREhMQyBsaW5rIHN0YXR1cyAqLworI2RlZmluZSBYMjVfSERMQ19SRUFEX1NUQVRTCTB4MDcJLyogcmVhZCBvcGVyYXRpb25hbCBzdGF0aXN0aWNzICovCisjZGVmaW5lIFgyNV9IRExDX0ZMVVNIX1NUQVRTCTB4MDggCS8qIGZsdXNoIG9wZXJhdGlvbmFsIHN0YXRpc3RpY3MgKi8KKyNkZWZpbmUgWDI1X0hETENfUkVBRF9DT01NX0VSUgkweDA5IAkvKiByZWFkIGVycm9yIHN0YXRpc3RpY3MgKi8KKyNkZWZpbmUgWDI1X0hETENfRkxVU0hfQ09NTV9FUlIJMHgwQQkvKiBmbHVzaCBlcnJvciBzdGF0aXN0aWNzICovCisjZGVmaW5lIFgyNV9IRExDX0ZMVVNIX0JVRkZFUlMJMHgwRAkvKiBmbHVzaCBIRExDLWxldmVsIGRhdGEgYnVmZmVycyAqLworI2RlZmluZSBYMjVfSERMQ19TUFJWU19DTlRfU1RBVCAweDBGCS8qIHJlYWQgc3VyZXJ2aXNvcnkgY291bnQgc3RhdHVzICovCisjZGVmaW5lIFgyNV9IRExDX1NFTkRfVUlfRlJBTUUJMHgxMAkvKiBzZW5kIHVubnVtYmVyZWQgaW5mb3JtYXRpb24gZnJhbWUgKi8KKyNkZWZpbmUgWDI1X0hETENfV1JJVEUJCTB4MTEJLyogc2VuZCBIRExDIGluZm9ybWF0aW9uIGZyYW1lICovCisjZGVmaW5lIFgyNV9IRExDX1JFQUQJCTB4MjEJLyogcmVhZCBIRExDIGluZm9ybWF0aW9uIGZyYW1lICovCisjZGVmaW5lIFgyNV9IRExDX1JFQURfQ09ORklHCTB4MTIJLyogcmVhZCBIRExDIGNvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgWDI1X0hETENfU0VUX0NPTkZJRwkweDEzCS8qIHNldCBIRExDIGNvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgU0VUX1BST1RPQ09MX0xFVkVMCTB4MUYJLyogc2V0IHByb3RvY29sIGxldmVsICovCisvKi0tLS0tIFguMjUtbGV2ZWwgY29tbWFuZHMgLS0tLS0tLS0tLS0qLworI2RlZmluZSBYMjVfUkVBRAkJMHgyMgkvKiByZWFkIFguMjUgcGFja2V0ICovCisjZGVmaW5lIFgyNV9XUklURQkJMHgyMwkvKiBzZW5kIFguMjUgcGFja2V0ICovCisjZGVmaW5lIFgyNV9QTEFDRV9DQUxMCQkweDMwCS8qIHBsYWNlIGEgY2FsbCBvbiBTVkMgKi8KKyNkZWZpbmUgWDI1X0FDQ0VQVF9DQUxMCQkweDMxCS8qIGFjY2VwdCBpbmNvbW1pbmcgY2FsbCAqLworI2RlZmluZSBYMjVfQ0xFQVJfQ0FMTAkJMHgzMgkvKiBjbGVhciBjYWxsICovCisjZGVmaW5lIFgyNV9DTEVBUl9DT05GUk0JMHgzMwkvKiBzZW5kIGNsZWFyIGNvbmZpcm1hdGlvbiBwYWNrZXQgKi8KKyNkZWZpbmUgWDI1X1JFU0VUCQkweDM0CS8qIHNlbmQgcmVzZXQgcmVxdWVzdCBwYWNrZXQgKi8KKyNkZWZpbmUgWDI1X1JFU0VUX0NPTkZSTQkweDM1CS8qIHNlbmQgcmVzZXQgY29uZmlybWF0aW9uIHBhY2tldCAqLworI2RlZmluZSBYMjVfUkVTVEFSVAkJMHgzNgkvKiBzZW5kIHJlc3RhcnQgcmVxdWVzdCBwYWNrZXQgKi8KKyNkZWZpbmUgWDI1X1JFU1RBUlRfQ09ORlJNCTB4MzcJLyogc2VuZCByZXN0YXJ0IGNvbmZpcm1hdGlvbiBwYWNrZXQgKi8KKyNkZWZpbmUgWDI1X0lOVEVSUlVQVAkJMHgzOAkvKiBzZW5kIGludGVycnVwdCByZXF1ZXN0IHBhY2tldCAqLworI2RlZmluZSBYMjVfSU5URVJSVVBUX0NPTkZSTQkweDM5CS8qIHNlbmQgaW50ZXJydXB0IGNvbmZpcm1hdGlvbiBwa3QgKi8KKyNkZWZpbmUgWDI1X1JFR0lTVFJBVElPTl9SUVNUCTB4M0EJLyogc2VuZCByZWdpc3RyYXRpb24gcmVxdWVzdCBwYWNrZXQgKi8KKyNkZWZpbmUgWDI1X1JFR0lTVFJBVElPTl9DT05GUk0JMHgzQgkvKiBzZW5kIHJlZ2lzdHJhdGlvbiBjb25maXJtYXRpb24gKi8KKyNkZWZpbmUgWDI1X0lTX0RBVEFfQVZBSUxBQkxFCTB4NDAJLyogcXVlcnJ5IHJlY2VpdmUgcXVldWUgKi8KKyNkZWZpbmUgWDI1X0lOQ09NTUlOR19DQUxMX0NUTAkweDQxCS8qIHNlbGVjdCBpbmNvbW1pbmcgY2FsbCBvcHRpb25zICovCisjZGVmaW5lIFgyNV9DT05GSUdVUkVfUFZDCTB4NDIJLyogY29uZmlndXJlIFBWQyAqLworI2RlZmluZSBYMjVfR0VUX0FDVElWRV9DSEFOTkVMUwkweDQzCS8qIGdldCBhIGxpc3Qgb2YgYWN0aXZlIGNpcmN1aXRzICovCisjZGVmaW5lIFgyNV9SRUFEX0NIQU5ORUxfQ09ORklHCTB4NDQJLyogcmVhZCB2aXJ0LiBjaXJjdWl0IGNvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgWDI1X0ZMVVNIX0RBVEFfQlVGRkVSUwkweDQ1CS8qIGZsdXNoIFguMjUtbGV2ZWwgZGF0YSBidWZmZXJzICovCisjZGVmaW5lIFgyNV9SRUFEX0hJU1RPUllfVEFCTEUJMHg0NgkvKiByZWFkIGFzeW5jaHJvbm91cyBldmVudCBsb2cgKi8KKyNkZWZpbmUgWDI1X0hJU1RPUllfVEFCTEVfQ1RMCTB4NDcJLyogY29udHJvbCBhc3luY2hyb25vdXMgZXZlbnQgbG9nICovCisjZGVmaW5lCVgyNV9HRVRfVFhfRF9CSVRfU1RBVFVTCTB4NDgJLyogaXMgcGFja2V0IHdpdGggRC1iaXQgYWNrbm93bGVnZWQgKi8KKyNkZWZpbmUJWDI1X1JFQURfU1RBVElTVElDUwkweDQ5CS8qIHJlYWQgWC4yNS1sZXZlbCBzdGF0aXN0aWNzICovCisjZGVmaW5lCVgyNV9GTFVTSF9TVEFUSVNUSUNTCTB4NEEJLyogZmx1c2ggWC4yNS1sZXZlbCBzdGF0aXN0aWNzICovCisjZGVmaW5lCVgyNV9SRUFEX0NPTkZJR1VSQVRJT04JMHg1MAkvKiByZWFkIEhETEMgJiBYLjI1IGNvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUJWDI1X1NFVF9DT05GSUdVUkFUSU9OCTB4NTEJLyogc2V0IEhETEMgJiBYLjI1IGNvbmZpZ3VyYXRpb24gKi8KKworLyoKKyAqIERlZmluZXMgZm9yIHRoZSAncmVzdWx0JyBmaWVsZC4KKyAqLworLyotLS0tLSBHZW5lcmFsIHJlc3VsdHMgLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgWDI1UkVTX09LCQkweDAwCisjZGVmaW5lIFgyNVJFU19FUlJPUgkJMHgwMQorI2RlZmluZSBYMjVSRVNfTElOS19OT1RfSU5fQUJNCTB4MDIJLyogbGluayBpcyBub3QgaW4gQUJNIG1vZGUgKi8KKyNkZWZpbmUgWDI1UkVTX0xJTktfQ0xPU0VECTB4MDMKKyNkZWZpbmUgWDI1UkVTX0lOVkFMX0xFTkdUSAkweDA0CisjZGVmaW5lIFgyNVJFU19JTlZBTF9DTUQJMHgwNQorI2RlZmluZSBYMjVSRVNfVU5OVU1CRVJFRF9GUkFNRQkweDA2CS8qIHVubnVuYmVyZWQgZnJhbWUgcmVjZWl2ZWQgKi8KKyNkZWZpbmUgWDI1UkVTX0ZSTV9SRUpFQ1RfTU9ERQkweDA3CS8qIGxpbmsgaXMgaW4gRnJhbWUgUmVqZWN0IG1vZGUgKi8KKyNkZWZpbmUgWDI1UkVTX01PREVNX0ZBSUxVUkUJMHgwOAkvKiBEQ0QgYW5kL29yIENUUyBkcm9wcGVkICovCisjZGVmaW5lIFgyNVJFU19OMl9SRVRSWV9MSU1JVAkweDA5CS8qIE4yIHJldHJ5IGxpbWl0IGhhcyBiZWVuIGV4Y2VlZGVkICovCisjZGVmaW5lIFgyNVJFU19JTlZBTF9MQ04JMHgzMAkvKiBpbnZhbGlkIGxvZ2ljYWwgY2hhbm5lbCBudW1iZXIgKi8KKyNkZWZpbmUgWDI1UkVTX0lOVkFMX1NUQVRFCTB4MzEJLyogY2hhbm5lbCBpcyBub3QgaW4gZGF0YSB4ZmVyIG1vZGUgKi8KKyNkZWZpbmUgWDI1UkVTX0lOVkFMX0RBVEFfTEVOCTB4MzIJLyogaW52YWxpZCBkYXRhIGxlbmd0aCAqLworI2RlZmluZSBYMjVSRVNfTk9UX1JFQURZCTB4MzMJLyogbm8gZGF0YSBhdmFpbGFibGUgLyBidWZmZXJzIGZ1bGwgKi8KKyNkZWZpbmUgWDI1UkVTX05FVFdPUktfRE9XTgkweDM0CisjZGVmaW5lIFgyNVJFU19DSEFOTkVMX0lOX1VTRQkweDM1CS8qIHRoZXJlIGlzIGRhdGEgcXVldWVkIG9uIHRoaXMgTENOICovCisjZGVmaW5lIFgyNVJFU19SRUdTVF9OT1RfU1VQUFJUCTB4MzYJLyogcmVnaXN0cmF0aW9uIG5vdCBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUgWDI1UkVTX0lOVkFMX0ZPUk1BVAkweDM3CS8qIGludmFsaWQgcGFja2V0IGZvcm1hdCAqLworI2RlZmluZSBYMjVSRVNfRF9CSVRfTk9UX1NVUFBSVAkweDM4CS8qIEQtYml0IHByYWdtYXRpY3Mgbm90IHN1cHBvcnRlZCAqLworI2RlZmluZSBYMjVSRVNfRkFDSUxfTk9UX1NVUFBSVAkweDM5CS8qIENhbGwgZmFjaWxpdHkgbm90IHN1cHBvcnRlZCAqLworI2RlZmluZSBYMjVSRVNfSU5WQUxfQ0FMTF9BUkcJMHgzQQkvKiBlcnJvcm5lb3VzIGNhbGwgYXJndW1lbnRzICovCisjZGVmaW5lIFgyNVJFU19JTlZBTF9DQUxMX0RBVEEJMHgzQgkvKiBlcnJvcm5lb3VzIGNhbGwgdXNlciBkYXRhICovCisjZGVmaW5lIFgyNVJFU19BU1lOQ19QQUNLRVQJMHg0MAkvKiBhc3luY2hyb25vdXMgcGFja2V0IHJlY2VpdmVkICovCisjZGVmaW5lIFgyNVJFU19QUk9UT19WSU9MQVRJT04JMHg0MQkvKiBwcm90b2NvbCB2aW9sYXRpb24gb2NjdXJyZWQgKi8KKyNkZWZpbmUgWDI1UkVTX1BLVF9USU1FT1VUCTB4NDIJLyogWC4yNSBwYWNrZXQgdGltZSBvdXQgKi8KKyNkZWZpbmUgWDI1UkVTX1BLVF9SRVRSWV9MSU1JVAkweDQzCS8qIFguMjUgcGFja2V0IHJldHJ5IGxpbWl0IGV4Y2VlZGVkICovCisvKi0tLS0tIENvbW1hbmQtZGVwZW5kZW50IHJlc3VsdHMgLS0tLS0qLworI2RlZmluZSBYMjVSRVNfTElOS19ESVNDCTB4MDAJLyogSERMQ19MSU5LX1NUQVRVUyAqLworI2RlZmluZSBYMjVSRVNfTElOS19JTl9BQk0JMHgwMQkvKiBIRExDX0xJTktfU1RBVFVTICovCisjZGVmaW5lIFgyNVJFU19OT19EQVRBCQkweDAxCS8qIEhETENfUkVBRC9SRUFEX1RSQUNFX0RBVEEqLworI2RlZmluZSBYMjVSRVNfVFJBQ0VfSU5BQ1RJVkUJMHgwMgkvKiBSRUFEX1RSQUNFX0RBVEEgKi8KKyNkZWZpbmUgWDI1UkVTX0xJTktfSVNfT1BFTgkweDAxCS8qIEhETENfTElOS19PUEVOICovCisjZGVmaW5lIFgyNVJFU19MSU5LX0lTX0RJU0MJMHgwMgkvKiBIRExDX0xJTktfRElTQyAqLworI2RlZmluZSBYMjVSRVNfTElOS19JU19DTE9TRUQJMHgwMwkvKiBIRExDX0xJTktfQ0xPU0UgKi8KKyNkZWZpbmUgWDI1UkVTX0lOVkFMX1BBUkFNCTB4MzEJLyogSU5DT01NSU5HX0NBTExfQ1RMICovCisjZGVmaW5lIFgyNVJFU19JTlZBTF9DT05GSUcJMHgzNQkvKiBSRUdJU1RSX1JRU1QvQ09ORlJNICovCisKKy8qCisgKiBEZWZpbmVzIGZvciB0aGUgJ3FkbV9iaXRzJyBmaWVsZC4KKyAqLworI2RlZmluZSBYMjVDTURfUV9CSVRfTUFTSwkweDA0CisjZGVmaW5lIFgyNUNNRF9EX0JJVF9NQVNLCTB4MDIKKyNkZWZpbmUgWDI1Q01EX01fQklUX01BU0sJMHgwMQorCisvKgorICogRGVmaW5lcyBmb3IgdGhlICdwa3RfdHlwZScgZmllbGQuCisgKi8KKy8qLS0tLS0gQXN5bmNocm9ub3VzIGV2ZW50cyAtLS0tLS0qLworI2RlZmluZSBBU0VfQ0xFQVJfUlFTVAkJMHgwMgorI2RlZmluZSBBU0VfUkVTRVRfUlFTVAkJMHgwNAorI2RlZmluZSBBU0VfUkVTVEFSVF9SUVNUCTB4MDgKKyNkZWZpbmUgQVNFX0lOVEVSUlVQVAkJMHgxMAorI2RlZmluZSBBU0VfRFRFX1JFR0lTVFJfUlFTVAkweDIwCisjZGVmaW5lIEFTRV9DQUxMX1JRU1QJCTB4MzAKKyNkZWZpbmUgQVNFX0NBTExfQUNDRVBURUQJMHgzMQorI2RlZmluZSBBU0VfQ0xFQVJfQ09ORlJNCTB4MzIKKyNkZWZpbmUgQVNFX1JFU0VUX0NPTkZSTQkweDMzCisjZGVmaW5lIEFTRV9SRVNUQVJUX0NPTkZSTQkweDM0CisjZGVmaW5lIEFTRV9JTlRFUlJVUFRfQ09ORlJNCTB4MzUKKyNkZWZpbmUgQVNFX0RDRV9SRUdJU1RSX0NPTkZSTQkweDM2CisjZGVmaW5lIEFTRV9ESUFHTk9TVElDCQkweDM3CisjZGVmaW5lIEFTRV9DQUxMX0FVVE9fQ0xFQVIJMHgzOAorI2RlZmluZSBBVVRPX1JFU1BPTlNFX0ZMQUcJMHg4MAorLyotLS0tLSBUaW1lLU91dCBldmVudHMgLS0tLS0tLS0tLSovCisjZGVmaW5lIFRPRV9SRVNUQVJUX1JRU1QJMHgwMworI2RlZmluZSBUT0VfQ0FMTF9SUVNUCQkweDA1CisjZGVmaW5lIFRPRV9DTEVBUl9SUVNUCQkweDA4CisjZGVmaW5lIFRPRV9SRVNFVF9SUVNUCQkweDBBCisvKi0tLS0tIFByb3RvY29sIFZpb2xhdGlvbiBldmVudHMgKi8KKyNkZWZpbmUgUFZFX0NMRUFSX1JRU1QJCTB4MzIKKyNkZWZpbmUgUFZFX1JFU0VUX1JRU1QJCTB4MzMKKyNkZWZpbmUgUFZFX1JFU1RBUlRfUlFTVAkweDM0CisjZGVmaW5lIFBWRV9ESUFHTk9TVElDCQkweDM3CisKKyNkZWZpbmUgSU5UUl9PTl9SWF9GUkFNRSAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgSU5UUl9PTl9UWF9GUkFNRSAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgSU5UUl9PTl9NT0RFTV9TVEFUVVNfQ0hBTkdFIDB4MDQKKyNkZWZpbmUgSU5UUl9PTl9DT01NQU5EX0NPTVBMRVRFICAgIDB4MDgKKyNkZWZpbmUgSU5UUl9PTl9YMjVfQVNZX1RSQU5TQUNUSU9OIDB4MTAKKyNkZWZpbmUgSU5UUl9PTl9USU1FUgkJICAgIDB4NDAKKyNkZWZpbmUgRElSRUNUX1JYX0lOVFJfVVNBR0UgICAgICAgIDB4ODAKKworI2RlZmluZSBOT19JTlRSX1BFTkRJTkcgIAkgICAgICAgIDB4MDAKKyNkZWZpbmUgUlhfSU5UUl9QRU5ESU5HCQkJMHgwMQkKKyNkZWZpbmUgVFhfSU5UUl9QRU5ESU5HCQkJMHgwMgorI2RlZmluZSBNT0RFTV9JTlRSX1BFTkRJTkcJCTB4MDQKKyNkZWZpbmUgQ09NTUFORF9DT01QTEVURV9JTlRSX1BFTkRJTkcgCTB4MDgKKyNkZWZpbmUgWDI1X0FTWV9UUkFOU19JTlRSX1BFTkRJTkcJMHgxMAorI2RlZmluZSBUSU1FUl9JTlRSX1BFTkRJTkcJCTB4NDAKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBYLjI1IE1haWxib3guCisgKglUaGlzIHN0cnVjdHVyZSBpcyBsb2NhdGVkIGF0IG9mZnNldHMgWDI1X01CT1hfT0ZGUyBhbmQgWDI1X1JYTUJPWF9PRkZTCisgKglpbnRvIHNoYXJlZCBtZW1vcnkgd2luZG93LgorICovCit0eXBlZGVmIHN0cnVjdCBYMjVNYm94Cit7CisJdW5zaWduZWQgY2hhciBvcGZsYWcJUEFDS0VEOwkvKiAwMGg6IGV4ZWN1dGlvbiBmbGFnICovCisJVFgyNUNtZCBjbWQJCVBBQ0tFRDsJLyogMDFoOiBjb21tYW5kIGJsb2NrICovCisJdW5zaWduZWQgY2hhciBkYXRhWzFdCVBBQ0tFRDsJLyogMTBoOiBkYXRhIGJ1ZmZlciAqLworfSBUWDI1TWJveDsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBYLjI1IFRpbWUgU3RhbXAgU3RydWN0dXJlLgorICovCit0eXBlZGVmIHN0cnVjdCBYMjVUaW1lU3RhbXAKK3sKKwl1bnNpZ25lZCBjaGFyIG1vbnRoCVBBQ0tFRDsKKwl1bnNpZ25lZCBjaGFyIGRhdGUJUEFDS0VEOworCXVuc2lnbmVkIGNoYXIgc2VjCVBBQ0tFRDsKKwl1bnNpZ25lZCBjaGFyIG1pbglQQUNLRUQ7CisJdW5zaWduZWQgY2hhciBob3VyCVBBQ0tFRDsKK30gVFgyNVRpbWVTdGFtcDsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBYLjI1IFN0YXR1cyBCbG9jay4KKyAqCVRoaXMgc3RydWN0dXJlIGlzIGxvY2F0ZWQgYXQgb2Zmc2V0IFgyNV9TVEFUVVNfT0ZGIGludG8gc2hhcmVkIG1lbW9yeQorICoJd2luZG93LgorICovCit0eXBlZGVmIHN0cnVjdCBYMjVTdGF0dXMKK3sKKwl1bnNpZ25lZCBzaG9ydCBwdmNfbWFwCVBBQ0tFRDsJLyogMDBoOiBQVkMgbWFwICovCisJdW5zaWduZWQgc2hvcnQgaWNjX21hcAlQQUNLRUQ7CS8qIDAyaDogSW5jb21taW5nIENoYW4uIG1hcCAqLworCXVuc2lnbmVkIHNob3J0IHR3Y19tYXAJUEFDS0VEOwkvKiAwNGg6IFR3by13YXkgQ25hbi4gbWFwICovCisJdW5zaWduZWQgc2hvcnQgb2djX21hcAlQQUNLRUQ7CS8qIDA2aDogT3V0Z29pbmcgQ2hhbi4gbWFwICovCisJVFgyNVRpbWVTdGFtcCB0c3RhbXAJUEFDS0VEOwkvKiAwOGg6IHRpbWVzdGFtcCAoQkNEKSAqLworCXVuc2lnbmVkIGNoYXIgaWZsYWdzCVBBQ0tFRDsJLyogMERoOiBpbnRlcnJ1cHQgZmxhZ3MgKi8KKwl1bnNpZ25lZCBjaGFyIGltYXNrICAgICBQQUNLRUQ7IC8qIDBFaDogaW50ZXJydXB0IG1hc2sgICovCisJdW5zaWduZWQgY2hhciByZXNydglQQUNLRUQ7CS8qIDBFaDogKi8KKwl1bnNpZ25lZCBjaGFyIGdmbGFncwlQQUNLRUQ7CS8qIDEwaDogbWlzYy4gSERMQy9YMjUgZmxhZ3MgKi8KKwl1bnNpZ25lZCBjaGFyIGNmbGFnc1tYMjVfTUFYX0NIQU5dIFBBQ0tFRDsgLyogY2hhbm5lbCBzdGF0dXMgYnl0ZXMgKi8KK30gVFgyNVN0YXR1czsKKworLyoKKyAqIEJpdG1hc2tzIGZvciB0aGUgJ2lmbGFncycgZmllbGQuCisgKi8KKyNkZWZpbmUgWDI1X1JYX0lOVFIJMHgwMQkvKiByZWNlaXZlIGludGVycnVwdCAqLworI2RlZmluZSBYMjVfVFhfSU5UUgkweDAyCS8qIHRyYW5zbWl0IGludGVycnVwdCAqLworI2RlZmluZSBYMjVfTU9ERU1fSU5UUgkweDA0CS8qIG1vZGVtIHN0YXR1cyBpbnRlcnJ1cHQgKENUUy9EQ0QpICovCisjZGVmaW5lIFgyNV9FVkVOVF9JTlRSCTB4MTAJLyogYXN5bmNyb25vdXMgZXZlbnQgZW5jb3VudGVyZWQgKi8KKyNkZWZpbmUgWDI1X0NNRF9JTlRSCTB4MDgJLyogaW50ZXJmYWNlIGNvbW1hbmQgY29tcGxldGUgKi8KKworLyoKKyAqIEJpdG1hc2tzIGZvciB0aGUgJ2dmbGFncycgZmllbGQuCisgKi8KKyNkZWZpbmUgWDI1X0hETENfQUJNCTB4MDEJLyogSERMQyBpcyBpbiBBQk0gbW9kZSAqLworI2RlZmluZSBYMjVfUlhfUkVBRFkJMHgwMgkvKiBYLjI1IGRhdGEgYXZhaWxhYmxlICovCisjZGVmaW5lIFgyNV9UUkFDRV9SRUFEWQkweDA4CS8qIHRyYWNlIGRhdGEgYXZhaWxhYmxlICovCisjZGVmaW5lIFgyNV9FVkVOVF9JTkQJMHgyMAkvKiBhc3luY2hyb25vdXMgZXZlbnQgaW5kaWNhdG9yICovCisjZGVmaW5lIFgyNV9UWF9SRUFEWQkweDQwCS8qIHNwYWNlIGlzIGF2YWlsYWJsZSBpbiBUeCBidWYuKi8KKworLyoKKyAqIEJpdG1hc2tzIGZvciB0aGUgJ2NmbGFncycgZmllbGQuCisgKi8KKyNkZWZpbmUgWDI1X1hGRVJfTU9ERQkweDgwCS8qIGNoYW5uZWwgaXMgaW4gZGF0YSB0cmFuc2ZlciBtb2RlICovCisjZGVmaW5lIFgyNV9UWFdJTl9PUEVOCTB4NDAJLyogdHJhbnNtaXQgd2luZG93IG9wZW4gKi8KKyNkZWZpbmUgWDI1X1JYQlVGX01BU0sJMHgzRgkvKiBudW1iZXIgb2YgZGF0YSBidWZmZXJzIGF2YWlsYWJsZSAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZvbGxvd2luZyBkZWZpbml0aW9ucyBzdHJ1Y3R1cml6ZSBjb250ZW50cyBvZiB0aGUgVFgyNU1ib3guZGF0YSBmaWVsZCBmb3IKKyAqIGRpZmZlcmVudCBYLjI1IGludGVyZmFjZSBjb21tYW5kcy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFgyNV9TRVRfR0xPQkFMX1ZBUlMgQ29tbWFuZC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgWDI1R2xvYmFsVmFycworeworCXVuc2lnbmVkIGNoYXIgcmVzcnYJUEFDS0VEOwkvKiAwMGg6IHJlc2VydmVkICovCisJdW5zaWduZWQgY2hhciBkdHJDdGwJUEFDS0VEOwkvKiAwMWg6IERUUiBjb250cm9sIGNvZGUgKi8KKwl1bnNpZ25lZCBjaGFyIHJlc0VycglQQUNLRUQ7CS8qIDAxaDogJzEnIC0gcmVzZXQgbW9kZW0gZXJyb3IgKi8KK30gVFgyNUdsb2JhbFZhcnM7CisKKy8qCisgKiBEZWZpbmVzIGZvciB0aGUgJ2R0ckN0bCcgZmllbGQuCisgKi8KKyNkZWZpbmUgWDI1X1JBSVNFX0RUUgkweDAxCisjZGVmaW5lIFgyNV9EUk9QX0RUUgkweDAyCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogWDI1X1JFQURfTU9ERU1fU1RBVFVTIENvbW1hbmQuCisgKi8KK3R5cGVkZWYgc3RydWN0IFgyNU1vZGVtU3RhdHVzCit7CisJdW5zaWduZWQgY2hhcglzdGF0dXMJUEFDS0VEOwkJLyogMDBoOiBtb2RlbSBzdGF0dXMgKi8KK30gVFgyNU1vZGVtU3RhdHVzOworCisvKgorICogRGVmaW5lcyBmb3IgdGhlICdzdGF0dXMnIGZpZWxkLgorICovCisjZGVmaW5lIFgyNV9DVFNfTUFTSwkweDIwCisjZGVmaW5lIFgyNV9EQ0RfTUFTSwkweDA4CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogWDI1X0hETENfTElOS19TVEFUVVMgQ29tbWFuZC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgWDI1TGlua1N0YXR1cworeworCXVuc2lnbmVkIGNoYXIgdHhRdWV1ZWQJUEFDS0VEOwkvKiAwMGg6IHF1ZXVlZCBUeCBJLWZyYW1lcyovCisJdW5zaWduZWQgY2hhciByeFF1ZXVlZAlQQUNLRUQ7CS8qIDAxaDogcXVldWVkIFJ4IEktZnJhbWVzKi8KKwl1bnNpZ25lZCBjaGFyIHN0YXRpb24JUEFDS0VEOwkvKiAwMmg6IERURS9EQ0UgY29uZmlnLiAqLworCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWQJUEFDS0VEOwkvKiAwM2g6IHJlc2VydmVkICovCisJdW5zaWduZWQgY2hhciBzZlRhbGx5CVBBQ0tFRDsJLyogMDRoOiBzdXBlcnZpc29yeSBmcmFtZSB0YWxseSAqLworfSBUWDI1TGlua1N0YXR1czsKKworLyoKKyAqIERlZmluZXMgZm9yIHRoZSAnc3RhdGlvbicgZmllbGQuCisgKi8KKyNkZWZpbmUJWDI1X1NUQVRJT05fRFRFCTB4MDEJLyogc3RhdGlvbiBjb25maWd1cmVkIGFzIERURSAqLworI2RlZmluZSBYMjVfU1RBVElPTl9EQ0UJMHgwMgkvKiBzdGF0aW9uIGNvbmZpZ3VyZWQgYXMgRENFICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogWDI1X0hETENfUkVBRF9TVEFUUyBDb21tYW5kLgorICovCit0eXBlZGVmIHN0cnVjdCBIZGxjU3RhdHMKK3sJCQkJCQkvKglhIG51bWJlciBvZiAuLi4gKi8KKwl1bnNpZ25lZCBzaG9ydCByeElGcmFtZXMJUEFDS0VEOwkvKiAwMGg6IHJlYWR5IFJ4IEktZnJhbWVzICovCisJdW5zaWduZWQgc2hvcnQgcnhOb3NlcQkJUEFDS0VEOwkvKiAwMmg6IGZybXMgb3V0LW9mLXNlcXVlbmNlICovCisJdW5zaWduZWQgc2hvcnQgcnhOb2RhdGEJCVBBQ0tFRDsJLyogMDRoOiBJLWZybXMgd2l0aG91dCBkYXRhICovCisJdW5zaWduZWQgc2hvcnQgcnhEaXNjYXJkZWQJUEFDS0VEOwkvKiAwNmg6IGRpc2NhcmRlZCBmcmFtZXMgKi8KKwl1bnNpZ25lZCBzaG9ydCByeFRvb0xvbmcJUEFDS0VEOwkvKiAwOGg6IGZyYW1lcyB0b28gbG9uZyAqLworCXVuc2lnbmVkIHNob3J0IHJ4QmFkQWRkcglQQUNLRUQ7CS8qIDBBaDogZnJtcyB3aXRoIGludmFsLmFkZHIqLworCXVuc2lnbmVkIHNob3J0IHR4QWNrZWQJCVBBQ0tFRDsJLyogMENoOiBhY2tub3dsZWRnZWQgSS1mcm1zICovCisJdW5zaWduZWQgc2hvcnQgdHhSZXRyYW5zbQlQQUNLRUQ7CS8qIDBFaDogcmUtdHJhbnNtaXQuIEktZnJtcyAqLworCXVuc2lnbmVkIHNob3J0IHQxVGltZW91dAlQQUNLRUQ7CS8qIDEwaDogVDEgdGltZW91dHMgKi8KKwl1bnNpZ25lZCBzaG9ydCByeFNBQk0JCVBBQ0tFRDsJLyogMTJoOiByZWNlaXZlZCBTQUJNIGZyYW1lcyAqLworCXVuc2lnbmVkIHNob3J0IHJ4RElTQwkJUEFDS0VEOwkvKiAxNGg6IHJlY2VpdmVkIERJU0MgZnJhbWVzICovCisJdW5zaWduZWQgc2hvcnQgcnhETQkJUEFDS0VEOwkvKiAxNmg6IHJlY2VpdmVkIERNIGZyYW1lcyAqLworCXVuc2lnbmVkIHNob3J0IHJ4RlJNUgkJUEFDS0VEOwkvKiAxOGg6IEZSTVIgZnJhbWVzIHJlY2VpdmVkICovCisJdW5zaWduZWQgc2hvcnQgdHhTQUJNCQlQQUNLRUQ7CS8qIDFBaDogdHJhbnNtLiBTQUJNIGZyYW1lcyovCisJdW5zaWduZWQgc2hvcnQgdHhESVNDCQlQQUNLRUQ7CS8qIDFDaDogdHJhbnNtLiBESVNDIGZyYW1lcyovCisJdW5zaWduZWQgc2hvcnQgdHhETQkJUEFDS0VEOwkvKiAxRWg6IHRyYW5zbS4gRE0gZnJhbWVzICovCisJdW5zaWduZWQgc2hvcnQgdHhGUk1SCQlQQUNLRUQ7CS8qIDIwaDogdHJhbnNtLiBGUk1SIGZyYW1lcyovCit9IFRIZGxjU3RhdHM7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogWDI1X0hETENfUkVBRF9DT01NX0VSUiBDb21tYW5kLgorICovCit0eXBlZGVmIHN0cnVjdCBIZGxjQ29tbUVycgorewkJCQkJCS8qCWEgbnVtYmVyIG9mIC4uLiAqLworCXVuc2lnbmVkIGNoYXIgcnhPdmVycnVuCQlQQUNLRUQ7CS8qIDAwaDogUnggb3ZlcnJ1biBlcnJvcnMgKi8KKwl1bnNpZ25lZCBjaGFyIHJ4QmFkQ3JjCQlQQUNLRUQ7CS8qIDAxaDogUnggQ1JDIGVycm9ycyAqLworCXVuc2lnbmVkIGNoYXIgcnhBYm9ydGVkCQlQQUNLRUQ7CS8qIDAyaDogUnggYWJvcnRlZCBmcmFtZXMgKi8KKwl1bnNpZ25lZCBjaGFyIHJ4RHJvcHBlZAkJUEFDS0VEOwkvKiAwM2g6IGZyYW1lcyBsb3N0ICovCisJdW5zaWduZWQgY2hhciB0eEFib3J0ZWQJCVBBQ0tFRDsJLyogMDRoOiBUeCBhYm9ydGVkIGZyYW1lcyAqLworCXVuc2lnbmVkIGNoYXIgdHhVbmRlcnJ1bglQQUNLRUQ7CS8qIDA1aDogVHggdW5kZXJydW4gZXJyb3JzICovCisJdW5zaWduZWQgY2hhciB0eE1pc3NJbnRyCVBBQ0tFRDsJLyogMDZoOiBtaXNzZWQgdW5kZXJydW4gaW50cyAqLworCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWQJCVBBQ0tFRDsJLyogMDdoOiByZXNlcnZlZCAqLworCXVuc2lnbmVkIGNoYXIgZHJvcHBlZERDRAlQQUNLRUQ7CS8qIDA4aDogdGltZXMgRENEIGRyb3BwZWQgKi8KKwl1bnNpZ25lZCBjaGFyIGRyb3BwZWRDVFMJUEFDS0VEOwkvKiAwOWg6IHRpbWVzIENUUyBkcm9wcGVkICovCit9IFRIZGxjQ29tbUVycjsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBYMjVfU0VUX0NPTkZJR1VSQVRJT04gJiBYMjVfUkVBRF9DT05GSUdVUkFUSU9OIENvbW1hbmRzLgorICovCit0eXBlZGVmIHN0cnVjdCBYMjVDb25maWcKK3sKK3Vuc2lnbmVkIGNoYXIgYmF1ZFJhdGUJCVBBQ0tFRDsJLyogMDBoOiAgKi8KKwl1bnNpZ25lZCBjaGFyIHQxCQlQQUNLRUQ7CS8qIDAxaDogICovCisJdW5zaWduZWQgY2hhciB0MgkJUEFDS0VEOwkvKiAwMmg6ICAqLworCXVuc2lnbmVkIGNoYXIgbjIJCVBBQ0tFRDsJLyogMDNoOiAgKi8KKwl1bnNpZ25lZCBzaG9ydCBoZGxjTVRVCQlQQUNLRUQ7CS8qIDA0aDogICovCisJdW5zaWduZWQgY2hhciBoZGxjV2luZG93CVBBQ0tFRDsJLyogMDZoOiAgKi8KKwl1bnNpZ25lZCBjaGFyIHQ0CQlQQUNLRUQ7CS8qIDA3aDogICovCisJdW5zaWduZWQgY2hhciBhdXRvTW9kZW0JCVBBQ0tFRDsJLyogMDhoOiAgKi8KKwl1bnNpZ25lZCBjaGFyIGF1dG9IZGxjCQlQQUNLRUQ7CS8qIDA5aDogICovCisJdW5zaWduZWQgY2hhciBoZGxjT3B0aW9ucwlQQUNLRUQ7CS8qIDBBaDogICovCisJdW5zaWduZWQgY2hhciBzdGF0aW9uCQlQQUNLRUQ7CS8qIDBCaDogICovCisJdW5zaWduZWQgY2hhciBwa3RXaW5kb3cJCVBBQ0tFRDsJLyogMENoOiAgKi8KKwl1bnNpZ25lZCBzaG9ydCBkZWZQa3RTaXplCVBBQ0tFRDsJLyogMERoOiAgKi8KKwl1bnNpZ25lZCBzaG9ydCBwa3RNVFUJCVBBQ0tFRDsJLyogMEZoOiAgKi8KKwl1bnNpZ25lZCBzaG9ydCBsb1BWQwkJUEFDS0VEOwkvKiAxMWg6ICAqLworCXVuc2lnbmVkIHNob3J0IGhpUFZDCQlQQUNLRUQ7CS8qIDEzaDogICovCisJdW5zaWduZWQgc2hvcnQgbG9JbmNvbW1pbmdTVkMJUEFDS0VEOwkvKiAxNWg6ICAqLworCXVuc2lnbmVkIHNob3J0IGhpSW5jb21taW5nU1ZDCVBBQ0tFRDsJLyogMTdoOiAgKi8KKwl1bnNpZ25lZCBzaG9ydCBsb1R3b1dheVNWQwlQQUNLRUQ7CS8qIDE5aDogICovCisJdW5zaWduZWQgc2hvcnQgaGlUd29XYXlTVkMJUEFDS0VEOwkvKiAxQmg6ICAqLworCXVuc2lnbmVkIHNob3J0IGxvT3V0Z29pbmdTVkMJUEFDS0VEOwkvKiAxRGg6ICAqLworCXVuc2lnbmVkIHNob3J0IGhpT3V0Z29pbmdTVkMJUEFDS0VEOwkvKiAxRmg6ICAqLworCXVuc2lnbmVkIHNob3J0IG9wdGlvbnMJCVBBQ0tFRDsJLyogMjFoOiAgKi8KKwl1bnNpZ25lZCBjaGFyIHJlc3BvbnNlT3B0CVBBQ0tFRDsJLyogMjNoOiAgKi8KKwl1bnNpZ25lZCBzaG9ydCBmYWNpbDEJCVBBQ0tFRDsJLyogMjRoOiAgKi8KKwl1bnNpZ25lZCBzaG9ydCBmYWNpbDIJCVBBQ0tFRDsJLyogMjZoOiAgKi8KKwl1bnNpZ25lZCBzaG9ydCBjY2l0dEZhY2lsCVBBQ0tFRDsJLyogMjhoOiAgKi8KKwl1bnNpZ25lZCBzaG9ydCBvdGhlckZhY2lsCVBBQ0tFRDsJLyogMkFoOiAgKi8KKwl1bnNpZ25lZCBzaG9ydCBjY2l0dENvbXBhdAlQQUNLRUQ7CS8qIDJDaDogICovCisJdW5zaWduZWQgY2hhciB0MTB0MjAJCVBBQ0tFRDsJLyogMkVoOiAgKi8KKwl1bnNpZ25lZCBjaGFyIHQxMXQyMQkJUEFDS0VEOwkvKiAyRmg6ICAqLworCXVuc2lnbmVkIGNoYXIgdDEydDIyCQlQQUNLRUQ7CS8qIDMwaDogICovCisJdW5zaWduZWQgY2hhciB0MTN0MjMJCVBBQ0tFRDsJLyogMzFoOiAgKi8KKwl1bnNpZ25lZCBjaGFyIHQxNnQyNgkJUEFDS0VEOwkvKiAzMkg6ICAqLworCXVuc2lnbmVkIGNoYXIgdDI4CQlQQUNLRUQ7CS8qIDMzaDogICovCisJdW5zaWduZWQgY2hhciByMTByMjAJCVBBQ0tFRDsJLyogMzRoOiAgKi8KKwl1bnNpZ25lZCBjaGFyIHIxMnIyMgkJUEFDS0VEOwkvKiAzNWg6ICAqLworCXVuc2lnbmVkIGNoYXIgcjEzcjIzCQlQQUNLRUQ7CS8qIDM2aDogICovCit9IFRYMjVDb25maWc7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogWDI1X1JFQURfQ0hBTk5FTF9DT05GSUcgQ29tbWFuZC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgWDI1Q2hhbkFsbG9jCQkJLyotLS0tLSBDaGFubmVsIGFsbG9jYXRpb24gLSovCit7CisJdW5zaWduZWQgc2hvcnQgbG9QVkMJCVBBQ0tFRDsJLyogMDBoOiBsb3dlc3QgUFZDIG51bWJlciAqLworCXVuc2lnbmVkIHNob3J0IGhpUFZDCQlQQUNLRUQ7CS8qIDAyaDogaGlnaGVzdCBQVkMgbnVtYmVyICovCisJdW5zaWduZWQgc2hvcnQgbG9JbmNvbW1pbmdTVkMJUEFDS0VEOwkvKiAwNGg6IGxvd2VzdCBpbmNvbWluZyBTVkMgKi8KKwl1bnNpZ25lZCBzaG9ydCBoaUluY29tbWluZ1NWQwlQQUNLRUQ7CS8qIDA2aDogaGlnaGVzdCBpbmNvbWluZyBTVkMgKi8KKwl1bnNpZ25lZCBzaG9ydCBsb1R3b1dheVNWQwlQQUNLRUQ7CS8qIDA4aDogbG93ZXN0IHR3by13YXkgU1ZDICovCisJdW5zaWduZWQgc2hvcnQgaGlUd29XYXlTVkMJUEFDS0VEOwkvKiAwQWg6IGhpZ2hlc3QgdHdvLXdheSBTVkMgKi8KKwl1bnNpZ25lZCBzaG9ydCBsb091dGdvaW5nU1ZDCVBBQ0tFRDsJLyogMENoOiBsb3dlc3Qgb3V0Z29pbmcgU1ZDICovCisJdW5zaWduZWQgc2hvcnQgaGlPdXRnb2luZ1NWQwlQQUNLRUQ7CS8qIDBFaDogaGlnaGVzdCBvdXRnb2luZyBTVkMgKi8KK30gVFgyNUNoYW5BbGxvYzsKKwordHlwZWRlZiBzdHJ1Y3QgWDI1Q2hhbkNmZwkJLyotLS0tLS0gQ2hhbm5lbCBjb25maWd1cmF0aW9uIC0tLS0tKi8KK3sKKwl1bnNpZ25lZCBjaGFyIHR5cGUJUEFDS0VEOwkvKiAwMGg6IGNoYW5uZWwgdHlwZSAqLworCXVuc2lnbmVkIGNoYXIgdHhDb25mCVBBQ0tFRDsJLyogMDFoOiBUeCBwYWNrZXQgYW5kIHdpbmRvdyBzaXplcyAqLworCXVuc2lnbmVkIGNoYXIgcnhDb25mCVBBQ0tFRDsJLyogMDFoOiBSeCBwYWNrZXQgYW5kIHdpbmRvdyBzaXplcyAqLworfSBUWDI1Q2hhbkNmZzsKKworLyoKKyAqIERlZmluZXMgZm9yIHRoZSAndHlwZScgZmllbGQuCisgKi8KKyNkZWZpbmUJWDI1X1BWQyAgCTB4MDEJLyogUFZDICovCisjZGVmaW5lCVgyNV9TVkNfSU4JMHgwMwkvKiBJbmNvbWluZyBTVkMgKi8KKyNkZWZpbmUJWDI1X1NWQ19UV09XQVkJMHgwNwkvKiBUd28td2F5IFNWQyAqLworI2RlZmluZQlYMjVfU1ZDX09VVAkweDBCCS8qIE91dGdvaW5nIFNWQyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFgyNV9SRUFEX1NUQVRJU1RJQ1MgQ29tbWFuZC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgWDI1U3RhdHMKK3sJCQkJCQkvKiBudW1iZXIgb2YgcGFja2V0cyBUeC9SeCdlZCAqLworCXVuc2lnbmVkIHNob3J0IHR4UmVzdGFydFJxc3QJUEFDS0VEOwkvKiAwMGg6IFJlc3RhcnQgUmVxdWVzdCAqLworCXVuc2lnbmVkIHNob3J0IHJ4UmVzdGFydFJxc3QJUEFDS0VEOwkvKiAwMmg6IFJlc3RhcnQgUmVxdWVzdCAqLworCXVuc2lnbmVkIHNob3J0IHR4UmVzdGFydENvbmYJUEFDS0VEOwkvKiAwNGg6IFJlc3RhcnQgQ29uZmlybWF0aW9uICovCisJdW5zaWduZWQgc2hvcnQgcnhSZXN0YXJ0Q29uZglQQUNLRUQ7CS8qIDA2aDogUmVzdGFydCBDb25maXJtYXRpb24gKi8KKwl1bnNpZ25lZCBzaG9ydCB0eFJlc2V0UnFzdAlQQUNLRUQ7CS8qIDA4aDogUmVzZXQgUmVxdWVzdCAqLworCXVuc2lnbmVkIHNob3J0IHJ4UmVzZXRScXN0CVBBQ0tFRDsJLyogMEFoOiBSZXNldCBSZXF1ZXN0ICovCisJdW5zaWduZWQgc2hvcnQgdHhSZXNldENvbmYJUEFDS0VEOwkvKiAwQ2g6IFJlc2V0IENvbmZpcm1hdGlvbiAqLworCXVuc2lnbmVkIHNob3J0IHJ4UmVzZXRDb25mCVBBQ0tFRDsJLyogMEVoOiBSZXNldCBDb25maXJtYXRpb24gKi8KKwl1bnNpZ25lZCBzaG9ydCB0eENhbGxSZXF1ZXN0CVBBQ0tFRDsJLyogMTBoOiBDYWxsIFJlcXVlc3QgKi8KKwl1bnNpZ25lZCBzaG9ydCByeENhbGxSZXF1ZXN0CVBBQ0tFRDsJLyogMTJoOiBDYWxsIFJlcXVlc3QgKi8KKwl1bnNpZ25lZCBzaG9ydCB0eENhbGxBY2NlcHQJUEFDS0VEOwkvKiAxNGg6IENhbGwgQWNjZXB0ICovCisJdW5zaWduZWQgc2hvcnQgcnhDYWxsQWNjZXB0CVBBQ0tFRDsJLyogMTZoOiBDYWxsIEFjY2VwdCAqLworCXVuc2lnbmVkIHNob3J0IHR4Q2xlYXJScXN0CVBBQ0tFRDsJLyogMThoOiBDbGVhciBSZXF1ZXN0ICovCisJdW5zaWduZWQgc2hvcnQgcnhDbGVhclJxc3QJUEFDS0VEOwkvKiAxQWg6IENsZWFyIFJlcXVlc3QgKi8KKwl1bnNpZ25lZCBzaG9ydCB0eENsZWFyQ29uZglQQUNLRUQ7CS8qIDFDaDogQ2xlYXIgQ29uZmlybWF0aW9uICovCisJdW5zaWduZWQgc2hvcnQgcnhDbGVhckNvbmYJUEFDS0VEOwkvKiAxRWg6IENsZWFyIENvbmZpcm1hdGlvbiAqLworCXVuc2lnbmVkIHNob3J0IHR4RGlhZ25vc3RpYwlQQUNLRUQ7CS8qIDIwaDogRGlhZ25vc3RpYyAqLworCXVuc2lnbmVkIHNob3J0IHJ4RGlhZ25vc3RpYwlQQUNLRUQ7CS8qIDIyaDogRGlhZ25vc3RpYyAqLworCXVuc2lnbmVkIHNob3J0IHR4UmVnUnFzdAlQQUNLRUQ7CS8qIDI0aDogUmVnaXN0cmF0aW9uIFJlcXVlc3QgKi8KKwl1bnNpZ25lZCBzaG9ydCByeFJlZ1Jxc3QJUEFDS0VEOwkvKiAyNmg6IFJlZ2lzdHJhdGlvbiBSZXF1ZXN0ICovCisJdW5zaWduZWQgc2hvcnQgdHhSZWdDb25mCVBBQ0tFRDsJLyogMjhoOiBSZWdpc3RyYXRpb24gQ29uZmlybS4qLworCXVuc2lnbmVkIHNob3J0IHJ4UmVnQ29uZglQQUNLRUQ7CS8qIDJBaDogUmVnaXN0cmF0aW9uIENvbmZpcm0uKi8KKwl1bnNpZ25lZCBzaG9ydCB0eEludGVycnVwdAlQQUNLRUQ7CS8qIDJDaDogSW50ZXJydXB0ICovCisJdW5zaWduZWQgc2hvcnQgcnhJbnRlcnJ1cHQJUEFDS0VEOwkvKiAyRWg6IEludGVycnVwdCAqLworCXVuc2lnbmVkIHNob3J0IHR4SW50ckNvbmYJUEFDS0VEOwkvKiAzMGg6IEludGVycnVwdCBDb25maXJtLiAqLworCXVuc2lnbmVkIHNob3J0IHJ4SW50ckNvbmYJUEFDS0VEOwkvKiAzMmg6IEludGVycnVwdCBDb25maXJtLiAqLworCXVuc2lnbmVkIHNob3J0IHR4RGF0YQkJUEFDS0VEOwkvKiAzNGg6IERhdGEgKi8KKwl1bnNpZ25lZCBzaG9ydCByeERhdGEJCVBBQ0tFRDsJLyogMzZoOiBEYXRhICovCisJdW5zaWduZWQgc2hvcnQgdHhSUgkJUEFDS0VEOwkvKiAzOGg6IFJSICovCisJdW5zaWduZWQgc2hvcnQgcnhSUgkJUEFDS0VEOwkvKiAzQWg6IFJSICovCisJdW5zaWduZWQgc2hvcnQgdHhSTlIJCVBBQ0tFRDsJLyogM0NoOiBSTlIgKi8KKwl1bnNpZ25lZCBzaG9ydCByeFJOUgkJUEFDS0VEOwkvKiAzRWg6IFJOUiAqLworfSBUWDI1U3RhdHM7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogWDI1X1JFQURfSElTVE9SWV9UQUJMRSBDb21tYW5kLgorICovCit0eXBlZGVmIHN0cnVjdCBYMjVFdmVudExvZworeworCXVuc2lnbmVkIGNoYXIJdHlwZQlQQUNLRUQ7CS8qIDAwaDogdHJhbnNhY3Rpb24gdHlwZSAqLworCXVuc2lnbmVkIHNob3J0CWxjbglQQUNLRUQ7CS8qIDAxaDogbG9naWNhbCBjaGFubmVsIG51bSAqLworCXVuc2lnbmVkIGNoYXIJcGFja2V0CVBBQ0tFRDsJLyogMDNoOiBhc3luYyBwYWNrZXQgdHlwZSAqLworCXVuc2lnbmVkIGNoYXIJY2F1c2UJUEFDS0VEOwkvKiAwNGg6IFguMjUgY2F1c2UgZmllbGQgKi8KKwl1bnNpZ25lZCBjaGFyCWRpYWcJUEFDS0VEOwkvKiAwNWg6IFguMjUgZGlhZyBmaWVsZCAqLworCVRYMjVUaW1lU3RhbXAJdHMJUEFDS0VEOwkvKiAwNmg6IHRpbWUgc3RhbXAgKi8KK30gVFgyNUV2ZW50TG9nOworCisvKgorICogRGVmaW5lcyBmb3IgdGhlICd0eXBlJyBmaWVsZC4KKyAqLworI2RlZmluZSBYMjVMT0dfSU5DT01NSU5HCTB4MDAKKyNkZWZpbmUgWDI1TE9HX0FQUExJQ0FUSU9OIAkweDAxCisjZGVmaW5lIFgyNUxPR19BVVRPTUFUSUMJMHgwMgorI2RlZmluZSBYMjVMT0dfRVJST1IJCTB4MDQKKyNkZWZpbmUgWDI1TE9HX1RJTUVPVVQJCTB4MDgKKyNkZWZpbmUgWDI1TE9HX1JFQ09WRVJZCQkweDEwCisKKy8qCisgKiBEZWZpbmVzIGZvciB0aGUgJ3BhY2tldCcgZmllbGQuCisgKi8KKyNkZWZpbmUgWDI1TE9HX0NBTExfUlFTVAkweDBCCisjZGVmaW5lIFgyNUxPR19DQUxMX0FDQ0VQVEVECTB4MEYKKyNkZWZpbmUgWDI1TE9HX0NMRUFSX1JRU1QJMHgxMworI2RlZmluZSBYMjVMT0dfQ0xFQVJfQ09ORlJNCTB4MTcKKyNkZWZpbmUgWDI1TE9HX1JFU0VUX1JRU1QJMHgxQgorI2RlZmluZSBYMjVMT0dfUkVTRVRfQ09ORlJNCTB4MUYKKyNkZWZpbmUgWDI1TE9HX1JFU1RBUlRfUlFTVAkweEZCCisjZGVmaW5lIFgyNUxPR19SRVNUQVJUX0NPTUZSTQkweEZGCisjZGVmaW5lIFgyNUxPR19ESUFHTk9TVElDCTB4RjEKKyNkZWZpbmUgWDI1TE9HX0RURV9SRUdfUlFTVAkweEYzCisjZGVmaW5lIFgyNUxPR19EVEVfUkVHX0NPTUZSTQkweEY3CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogWDI1X1RSQUNFX0NPTkZJR1VSRSBDb21tYW5kLgorICovCit0eXBlZGVmIHN0cnVjdCBYMjVUcmFjZUNmZworeworCXVuc2lnbmVkIGNoYXIgZmxhZ3MJUEFDS0VEOwkvKiAwMGg6IHRyYWNlIGNvbmZpZ3VyYXRpb24gZmxhZ3MgKi8KKwl1bnNpZ25lZCBjaGFyIHRpbWVvdXQJUEFDS0VEOwkvKiAwMWg6IHRpbWVvdXQgZm9yIHRyYWNlIGRlbGF5IG1vZGUqLworfSBUWDI1VHJhY2VDZmc7CisKKy8qCisgKiBEZWZpbmVzIGZvciB0aGUgJ2ZsYWdzJyBmaWVsZC4KKyAqLworI2RlZmluZSBYMjVfVFJDX0VOQUJMRQkJMHgwMQkvKiBiaXQwOiAnMScgLSB0cmFjZSBlbmFibGVkICovCisjZGVmaW5lIFgyNV9UUkNfVElNRVNUQU1QCTB4MDIJLyogYml0MTogJzEnIC0gdGltZSBzdGFtcGluZyBlbmFibGVkKi8KKyNkZWZpbmUgWDI1X1RSQ19ERUxBWQkJMHgwNAkvKiBiaXQyOiAnMScgLSB0cmFjZSBkZWxheSBlbmFibGVkICovCisjZGVmaW5lIFgyNV9UUkNfREFUQQkJMHgwOAkvKiBiaXQzOiAnMScgLSB0cmFjZSBkYXRhIHBhY2tldHMgKi8KKyNkZWZpbmUgWDI1X1RSQ19TVVBFUlZJU09SWQkweDEwICAgIC8qIGJpdDQ6ICcxJyAtIHRyYWNlIHN1cHJ2aXNvcnkgcGt0cyovCisjZGVmaW5lIFgyNV9UUkNfQVNZTkNIUk9OT1VTCTB4MjAJLyogYml0NTogJzEnIC0gdHJhY2UgYXN5bmNoLiBwYWNrZXRzKi8KKyNkZWZpbmUgWDI1X1RSQ19IRExDCQkweDQwCS8qIGJpdDY6ICcxJyAtIHRyYWNlIGFsbCBwYWNrZXRzICovCisjZGVmaW5lIFgyNV9UUkNfUkVBRAkJMHg4MAkvKiBiaXQ3OiAnMScgLSBnZXQgY3VycmVudCBjb25maWcuICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogWDI1X1JFQURfVFJBQ0VfREFUQSBDb21tYW5kLgorICovCit0eXBlZGVmIHN0cnVjdCBYMjVUcmFjZQkJCS8qLS0tLS0gVHJhY2UgZGF0YSBzdHJ1Y3R1cmUgLS0tLS0tLSovCit7CisJdW5zaWduZWQgc2hvcnQgbGVuZ3RoCVBBQ0tFRDsJLyogMDBoOiB0cmFjZSBkYXRhIGxlbmd0aCAqLworCXVuc2lnbmVkIGNoYXIgdHlwZQlQQUNLRUQ7CS8qIDAyaDogdHJhY2UgdHlwZSAqLworCXVuc2lnbmVkIGNoYXIgbG9zdF9jbnQJUEFDS0VEOwkvKiAwM2g6IE4gb2YgdHJhY2VzIGxvc3QgKi8KKwlUWDI1VGltZVN0YW1wIHRzdGFtcAlQQUNLRUQ7CS8qIDA0aDogbW9uL2RhdGUvc2VjL21pbi9ob3VyICovCisJdW5zaWduZWQgc2hvcnQgbWlsbGlzZWMJUEFDS0VEOwkvKiAwOWg6IG1zIHRpbWUgc3RhbXAgKi8KKwl1bnNpZ25lZCBjaGFyIGRhdGFbMF0JUEFDS0VEOwkvKiAwQmg6IHRyYWNlZCBmcmFtZSAqLworfSBUWDI1VHJhY2U7CisKKy8qCisgKiBEZWZpbmVzIGZvciB0aGUgJ3R5cGUnIGZpZWxkLgorICovCisjZGVmaW5lIFgyNV9UUkNfVFlQRV9NQVNLCTB4MEYJLyogYml0cyAwLi4zOiB0cmFjZSB0eXBlICovCisjZGVmaW5lIFgyNV9UUkNfVFlQRV9SWF9GUkFNRQkweDAwCS8qIHJlY2VpdmVkIGZyYW1lIHRyYWNlICovCisjZGVmaW5lIFgyNV9UUkNfVFlQRV9UWF9GUkFNRQkweDAxCS8qIHRyYW5zbWl0dGVkIGZyYW1lICovCisjZGVmaW5lIFgyNV9UUkNfVFlQRV9FUlJfRlJBTUUJMHgwMgkvKiBlcnJvciBmcmFtZSAqLworCisjZGVmaW5lIFgyNV9UUkNfRVJST1JfTUFTSwkweEYwCS8qIGJpdHMgNC4uNzogZXJyb3IgY29kZSAqLworI2RlZmluZSBYMjVfVFJDRVJSX1JYX0FCT1JUCTB4MTAJLyogcmVjZWl2ZSBhYm9ydCBlcnJvciAqLworI2RlZmluZSBYMjVfVFJDRVJSX1JYX0JBRENSQwkweDIwCS8qIHJlY2VpdmUgQ1JDIGVycm9yICovCisjZGVmaW5lIFgyNV9UUkNFUlJfUlhfT1ZFUlJVTgkweDMwCS8qIHJlY2VpdmVyIG92ZXJydW4gZXJyb3IgKi8KKyNkZWZpbmUgWDI1X1RSQ0VSUl9SWF9UT09fTE9ORwkweDQwCS8qIGV4Y2Vzc2l2ZSBmcmFtZSBsZW5ndGggZXJyb3IgKi8KKyNkZWZpbmUgWDI1X1RSQ0VSUl9UWF9BQk9SVAkweDcwCS8qIGFib3J0ZWQgZnJhbWUgdHJhbnNtaXR0aW9uIGVycm9yICovCisjZGVmaW5lIFgyNV9UUkNFUlJfVFhfVU5ERVJSVU4JMHg4MAkvKiB0cmFuc21pdCB1bmRlcnJ1biBlcnJvciAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZvbGxvd2luZyBkZWZpbml0aW9ucyBkZXNjcmliZSBIRExDIGZyYW1lIGFuZCBYLjI1IHBhY2tldCBmb3JtYXRzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgc3RydWN0IEhETENGcmFtZQkJLyotLS0tLSBESExDIEZyYW1lIEZvcm1hdCAtLS0tLS0tLS0tKi8KK3sKKwl1bnNpZ25lZCBjaGFyIGFkZHIJUEFDS0VEOwkvKiBhZGRyZXNzIGZpZWxkICovCisJdW5zaWduZWQgY2hhciBjbnRsCVBBQ0tFRDsJLyogY29udHJvbCBmaWVsZCAqLworCXVuc2lnbmVkIGNoYXIgZGF0YVswXQlQQUNLRUQ7Cit9IFRIRExDRnJhbWU7CisKK3R5cGVkZWYgc3RydWN0IFgyNVBrdAkJCS8qLS0tLS0gWC4yNSBQYWtldCBGb3JtYXQgLS0tLS0tLS0tLSovCit7CisJdW5zaWduZWQgY2hhciBsY25faGkJUEFDS0VEOwkvKiA0IE1TQiBvZiBMb2dpY2FsIENoYW5uZWwgTnVtYmVyICovCisJdW5zaWduZWQgY2hhciBsY25fbG8JUEFDS0VEOwkvKiA4IExTQiBvZiBMb2dpY2FsIENoYW5uZWwgTnVtYmVyICovCisJdW5zaWduZWQgY2hhciB0eXBlCVBBQ0tFRDsKKwl1bnNpZ25lZCBjaGFyIGRhdGFbMF0JUEFDS0VEOworfSBUWDI1UGt0OworCisvKgorICogRGVmaW5lcyBmb3IgdGhlICdsY25faGknIGZpZWxkLgorICovCisjZGVmaW5lCVgyNV9RX0JJVF9NQVNLCQkweDgwCS8qIERhdGEgUXVhbGlmaWVyIEJpdCBtYXNrICovCisjZGVmaW5lCVgyNV9EX0JJVF9NQVNLCQkweDQwCS8qIERlbGl2ZXJ5IENvbmZpcm1hdGlvbiBCaXQgbWFzayAqLworI2RlZmluZQlYMjVfTV9CSVRTX01BU0sJCTB4MzAJLyogTW9kdWxvIEJpdHMgbWFzayAqLworI2RlZmluZQlYMjVfTENOX01TQl9NQVNLCTB4MEYJLyogTENOIG1vc3Qgc2lnbmlmaWNhbnQgYml0cyBtYXNrICovCisKKy8qCisgKiBEZWZpbmVzIGZvciB0aGUgJ3R5cGUnIGZpZWxkLgorICovCisjZGVmaW5lCVgyNVBLVF9EQVRBCQkweDAxCS8qIERhdGEgcGFja2V0IG1hc2sgKi8KKyNkZWZpbmUJWDI1UEtUX1NVUEVSVklTT1JZCTB4MDIJLyogU3VwZXJ2aXNvcnkgcGFja2V0IG1hc2sgKi8KKyNkZWZpbmUJWDI1UEtUX0NBTExfUlFTVAkweDBCCS8qIENhbGwgUmVxdWVzdC9JbmNvbWluZyAqLworI2RlZmluZQlYMjVQS1RfQ0FMTF9BQ0NFUFRFRAkweDBGCS8qIENhbGwgQWNjZXB0ZWQvQ29ubmVjdGVkICovCisjZGVmaW5lCVgyNVBLVF9DTEVBUl9SUVNUCTB4MTMJLyogQ2xlYXIgUmVxdWVzdC9JbmRpY2F0aW9uICovCisjZGVmaW5lCVgyNVBLVF9DTEVBUl9DT05GUk0JMHgxNwkvKiBDbGVhciBDb25maXJtYXRpb24gKi8KKyNkZWZpbmUJWDI1UEtUX1JFU0VUX1JRU1QJMHgxQgkvKiBSZXNldCBSZXF1ZXN0L0luZGljYXRpb24gKi8KKyNkZWZpbmUJWDI1UEtUX1JFU0VUX0NPTkZSTQkweDFGCS8qIFJlc2V0IENvbmZpcm1hdGlvbiAqLworI2RlZmluZQlYMjVQS1RfUkVTVEFSVF9SUVNUCTB4RkIJLyogUmVzdGFydCBSZXF1ZXN0L0luZGljYXRpb24gKi8KKyNkZWZpbmUJWDI1UEtUX1JFU1RBUlRfQ09ORlJNCTB4RkYJLyogUmVzdGFydCBDb25maXJtYXRpb24gKi8KKyNkZWZpbmUJWDI1UEtUX0lOVEVSUlVQVAkweDIzCS8qIEludGVycnVwdCAqLworI2RlZmluZQlYMjVQS1RfSU5URVJSVVBUX0NPTkZSTQkweDI3CS8qIEludGVycnVwdCBDb25maXJtYXRpb24gKi8KKyNkZWZpbmUJWDI1UEtUX0RJQUdOT1NUSUMJMHhGMQkvKiBEaWFnbm9zdGljICovCisjZGVmaW5lCVgyNVBLVF9SRUdJU1RSX1JRU1QJMHhGMwkvKiBSZWdpc3RyYXRpb24gUmVxdWVzdCAqLworI2RlZmluZQlYMjVQS1RfUkVHSVNUUl9DT05GUk0JMHhGNwkvKiBSZWdpc3RyYXRpb24gQ29uZmlybWF0aW9uICovCisjZGVmaW5lCVgyNVBLVF9SUl9NQVNLRUQJMHgwMQkvKiBSZWNlaXZlIFJlYWR5IHBhY2tldCBhZnRlciBtYXNraW5nICovCisjZGVmaW5lCVgyNVBLVF9STlJfTUFTS0VECTB4MDUJLyogUmVjZWl2ZSBOb3QgUmVhZHkgYWZ0ZXIgbWFza2luZyAgKi8KKworCit0eXBlZGVmIHN0cnVjdCB7CisJVFgyNUNtZCBjbWQJCVBBQ0tFRDsKKwljaGFyIGRhdGFbWDI1X01BWF9EQVRBXQlQQUNLRUQ7Cit9IG1ib3hfY21kX3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGNoYXIgIHFkbQlQQUNLRUQ7CS8qIFEvRC9NIGJpdHMgKi8KKwl1bnNpZ25lZCBjaGFyICBjYXVzZQlQQUNLRUQ7CS8qIGNhdXNlIGZpZWxkICovCisJdW5zaWduZWQgY2hhciAgZGlhZ24JUEFDS0VEOwkvKiBkaWFnbm9zdGljcyAqLworCXVuc2lnbmVkIGNoYXIgIHBrdFR5cGUgIFBBQ0tFRDsKKwl1bnNpZ25lZCBzaG9ydCBsZW5ndGggICBQQUNLRUQ7CisJdW5zaWduZWQgY2hhciAgcmVzdWx0CVBBQ0tFRDsKKwl1bnNpZ25lZCBzaG9ydCBsY24JUEFDS0VEOworCWNoYXIgcmVzZXJ2ZWRbN10JUEFDS0VEOworfXgyNWFwaV9oZHJfdDsKKworCit0eXBlZGVmIHN0cnVjdCB7CisJeDI1YXBpX2hkcl90IGhkcglQQUNLRUQ7CisJY2hhciBkYXRhW1gyNV9NQVhfREFUQV0JUEFDS0VEOworfXgyNWFwaV90OworCisKKy8qIAorICogWFBJUEVNT04gRGVmaW5pdGlvbnMKKyAqLworCisvKiB2YWxpZCBpcF9wcm90b2NvbCBmb3IgVURQIG1hbmFnZW1lbnQgKi8KKyNkZWZpbmUgVURQTUdNVF9VRFBfUFJPVE9DT0wgMHgxMQorI2RlZmluZSBVRFBNR01UX1hQSVBFX1NJR05BVFVSRSAgICAgICAgICJYTElOSzhORCIKKyNkZWZpbmUgVURQTUdNVF9EUlZSU1RBVFNfU0lHTkFUVVJFICAgICAiRFJWU1RBVFMiCisKKy8qIHZhbHVlcyBmb3IgcmVxdWVzdC9yZXBseSBieXRlICovCisjZGVmaW5lIFVEUE1HTVRfUkVRVUVTVAkweDAxCisjZGVmaW5lIFVEUE1HTVRfUkVQTFkJMHgwMgorI2RlZmluZSBVRFBfT0ZGU0VUCTEyCisKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGNoYXIgb3BwX2ZsYWcgIFBBQ0tFRDsgLyogdGhlIG9wcCBmbGFnICovCisJdW5zaWduZWQgY2hhciBjb21tYW5kCVBBQ0tFRDsJLyogY29tbWFuZCBjb2RlICovCisJdW5zaWduZWQgc2hvcnQgbGVuZ3RoCVBBQ0tFRDsJLyogdHJhbnNmZXIgZGF0YSBsZW5ndGggKi8KKwl1bnNpZ25lZCBjaGFyIHJlc3VsdAlQQUNLRUQ7CS8qIHJldHVybiBjb2RlICovCisJdW5zaWduZWQgY2hhciBwZglQQUNLRUQ7CS8qIFAvRiBiaXQgKi8KKwl1bnNpZ25lZCBzaG9ydCBsY24JUEFDS0VEOwkvKiBsb2dpY2FsIGNoYW5uZWwgKi8KKwl1bnNpZ25lZCBjaGFyIHFkbQlQQUNLRUQ7CS8qIFEvRC9NIGJpdHMgKi8KKwl1bnNpZ25lZCBjaGFyIGNhdXNlCVBBQ0tFRDsJLyogY2F1c2UgZmllbGQgKi8KKwl1bnNpZ25lZCBjaGFyIGRpYWduCVBBQ0tFRDsJLyogZGlhZ25vc3RpY3MgKi8KKwl1bnNpZ25lZCBjaGFyIHBrdFR5cGUJUEFDS0VEOwkvKiBwYWNrZXQgdHlwZSAqLworCXVuc2lnbmVkIGNoYXIgcmVzcnZbNF0JUEFDS0VEOwkvKiByZXNlcnZlZCAqLworfSBjYmxvY2tfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCWlwX3BrdF90IAkJaXBfcGt0CQlQQUNLRUQ7CisJdWRwX3BrdF90CQl1ZHBfcGt0CQlQQUNLRUQ7CisJd3BfbWdtdF90IAkJd3BfbWdtdCAgICAgICAJUEFDS0VEOworICAgICAgICBjYmxvY2tfdCAgICAgICAgICAgICAgICBjYmxvY2sgICAgICAgICAgUEFDS0VEOworICAgICAgICB1bnNpZ25lZCBjaGFyICAgICAgICAgICBkYXRhWzQwODBdICAgICAgUEFDS0VEOworfSB4MjVfdWRwX3BrdF90OworCisKK3R5cGVkZWYgc3RydWN0IHJlYWRfaGRsY19zdGF0IHsKKwl1bnNpZ25lZCBzaG9ydCBpbmZfZnJhbWVzX3J4X29rIFBBQ0tFRDsKKyAgICAgICAgdW5zaWduZWQgc2hvcnQgaW5mX2ZyYW1lc19yeF9vdXRfb2Zfc2VxIFBBQ0tFRDsKKwl1bnNpZ25lZCBzaG9ydCBpbmZfZnJhbWVzX3J4X25vX2RhdGEgUEFDS0VEOworCXVuc2lnbmVkIHNob3J0IGluZl9mcmFtZXNfcnhfZHJvcHBlZCBQQUNLRUQ7CisJdW5zaWduZWQgc2hvcnQgaW5mX2ZyYW1lc19yeF9kYXRhX3Rvb19sb25nIFBBQ0tFRDsKKwl1bnNpZ25lZCBzaG9ydCBpbmZfZnJhbWVzX3J4X2ludmFsaWRfYWRkciBQQUNLRUQ7CisJdW5zaWduZWQgc2hvcnQgaW5mX2ZyYW1lc190eF9vayBQQUNLRUQ7CisgICAgICAgIHVuc2lnbmVkIHNob3J0IGluZl9mcmFtZXNfdHhfcmV0cmFuc21pdCBQQUNLRUQ7CisgICAgICAgCXVuc2lnbmVkIHNob3J0IFQxX3RpbWVvdXRzIFBBQ0tFRDsKKwl1bnNpZ25lZCBzaG9ydCBTQUJNX2ZyYW1lc19yeCBQQUNLRUQ7CisJdW5zaWduZWQgc2hvcnQgRElTQ19mcmFtZXNfcnggUEFDS0VEOworCXVuc2lnbmVkIHNob3J0IERNX2ZyYW1lc19yeCBQQUNLRUQ7CisJdW5zaWduZWQgc2hvcnQgRlJNUl9mcmFtZXNfcnggUEFDS0VEOworCXVuc2lnbmVkIHNob3J0IFNBQk1fZnJhbWVzX3R4IFBBQ0tFRDsKKwl1bnNpZ25lZCBzaG9ydCBESVNDX2ZyYW1lc190eCBQQUNLRUQ7CisJdW5zaWduZWQgc2hvcnQgRE1fZnJhbWVzX3R4IFBBQ0tFRDsKKwl1bnNpZ25lZCBzaG9ydCBGUk1SX2ZyYW1lc190eCBQQUNLRUQ7Cit9IHJlYWRfaGRsY19zdGF0X3Q7CisKK3R5cGVkZWYgc3RydWN0IHJlYWRfY29tbXNfZXJyX3N0YXRzeworCXVuc2lnbmVkIGNoYXIgb3ZlcnJ1bl9lcnJfcnggUEFDS0VEOworCXVuc2lnbmVkIGNoYXIgQ1JDX2VyciBQQUNLRUQ7CisJdW5zaWduZWQgY2hhciBhYm9ydF9mcmFtZXNfcnggUEFDS0VEOworCXVuc2lnbmVkIGNoYXIgZnJhbWVzX2Ryb3BwZWRfYnVmX2Z1bGwgUEFDS0VEOworCXVuc2lnbmVkIGNoYXIgYWJvcnRfZnJhbWVzX3R4IFBBQ0tFRDsKKwl1bnNpZ25lZCBjaGFyIHRyYW5zbWl0X3VuZGVycnVucyBQQUNLRUQ7CisJdW5zaWduZWQgY2hhciBtaXNzZWRfdHhfdW5kZXJydW5zX2ludHIgUEFDS0VEOworCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWQgUEFDS0VEOworCXVuc2lnbmVkIGNoYXIgRENEX2Ryb3AgUEFDS0VEOworCXVuc2lnbmVkIGNoYXIgQ1RTX2Ryb3AgUEFDS0VEOworfSByZWFkX2NvbW1zX2Vycl9zdGF0c190OworCit0eXBlZGVmIHN0cnVjdCB0cmFjZV9kYXRhIHsKKwl1bnNpZ25lZCBzaG9ydCBsZW5ndGggUEFDS0VEOworCXVuc2lnbmVkIGNoYXIgIHR5cGUgUEFDS0VEOworCXVuc2lnbmVkIGNoYXIgIHRyYWNlX2Ryb3BwZWQgUEFDS0VEOworCXVuc2lnbmVkIGNoYXIgIHJlc2VydmVkWzVdIFBBQ0tFRDsKKwl1bnNpZ25lZCBzaG9ydCB0aW1lc3RhbXAgUEFDS0VEOworICAgICAgICB1bnNpZ25lZCBjaGFyICBkYXRhIFBBQ0tFRDsKK30gdHJhY2VfZGF0YV90OworCitlbnVtIHtVRFBfWFBJUEVfVFlQRX07CisKKyNkZWZpbmUgWFBJUEVfRU5BQkxFX1RSQUNJTkcgICAgICAgICAgICAgICAgICAgIDB4MTQKKyNkZWZpbmUgWFBJUEVfRElTQUJMRV9UUkFDSU5HICAgICAgICAgICAgICAgICAgIDB4MTQKKyNkZWZpbmUgWFBJUEVfR0VUX1RSQUNFX0lORk8gICAgICAgICAgICAgICAgICAgIDB4MTYKKyNkZWZpbmUgWFBJUEVfRlQxX1JFQURfU1RBVFVTICAgICAgICAgICAgICAgICAgIDB4NzQKKyNkZWZpbmUgWFBJUEVfRFJJVkVSX1NUQVRfSUZTRU5EICAgICAgICAgICAgICAgIDB4NzUKKyNkZWZpbmUgWFBJUEVfRFJJVkVSX1NUQVRfSU5UUiAgICAgICAgICAgICAgICAgIDB4NzYKKyNkZWZpbmUgWFBJUEVfRFJJVkVSX1NUQVRfR0VOICAgICAgICAgICAgICAgICAgIDB4NzcKKyNkZWZpbmUgWFBJUEVfRkxVU0hfRFJJVkVSX1NUQVRTICAgICAgICAgICAgICAgIDB4NzgKKyNkZWZpbmUgWFBJUEVfUk9VVEVSX1VQX1RJTUUgICAgICAgICAgICAgICAgICAgIDB4NzkgICAgICAgIAorI2RlZmluZSBYUElQRV9TRVRfRlQxX01PREUJCQkweDgxCisjZGVmaW5lIFhQSVBFX0ZUMV9TVEFUVVNfQ1RSTAkJCTB4ODAKKworCisvKiBlcnJvciBtZXNzYWdlcyAqLworI2RlZmluZSBOT19CVUZGU19PUl9DTE9TRURfV0lOICAweDMzCisjZGVmaW5lIERBVEFfTEVOR1RIX1RPT19CSUcgICAgIDB4MzIKKyNkZWZpbmUgTk9fREFUQV9BVkFJTEFCTEUgICAgICAgMHgzMworI2RlZmluZSBaODBfVElNRU9VVF9FUlJPUiAgICAgICAweDBhICAgCisjZGVmaW5lCU5PX0JVRkZTCQkweDA4CisKKworLyogVHJhY2Ugb3B0aW9ucyAqLworI2RlZmluZSBUUkFDRV9ERUZBVUxUCQkweDAzCisjZGVmaW5lIFRSQUNFX1NVUEVSVklTT1JfRlJNUwkweDEwCisjZGVmaW5lIFRSQUNFX0FTWU5DX0ZSTVMJMHgyMAorI2RlZmluZSBUUkFDRV9BTExfSERMQ19GUk1TCTB4NDAKKyNkZWZpbmUgVFJBQ0VfREFUQV9GUk1TCQkweDA4CisKKworI2VuZGlmCS8qIF9TRExBX1gyNV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NkbGFkcnYuaCBiL2luY2x1ZGUvbGludXgvc2RsYWRydi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4ZjYzNDAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3NkbGFkcnYuaApAQCAtMCwwICsxLDcwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogc2RsYWRydi5oCVNETEEgU3VwcG9ydCBNb2R1bGUuICBLZXJuZWwgQVBJIERlZmluaXRpb25zLgorKgorKiBBdXRob3I6IAlHaWRlb24gSGFjawkKKyoKKyogQ29weXJpZ2h0OgkoYykgMTk5NS0yMDAwIFNhbmdvbWEgVGVjaG5vbG9naWVzIEluYy4KKyoKKyoJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyoJCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisqCQlhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyoJCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyogSnVuIDAyLCAxOTk5IAlHaWRlb24gSGFjawlBZGRlZCBzdXBwb3J0IGZvciB0aGUgUzUxNCBQQ0kgYWRhcHRlci4KKyogRGVjIDExLCAxOTk2CUdlbmUgS296aW4JQ29tcGxldGUgb3ZlcmhhdWwuCisqIE9jdCAxNywgMTk5NglHZW5lIEtvemluCU1pbm9yIGJ1ZyBmaXhlcy4KKyogSnVuIDEyLCAxOTk2CUdlbmUgS296aW4gCUFkZGVkIHN1cHBvcnQgZm9yIFM1MDMgY2FyZC4KKyogRGVjIDA2LCAxOTk1CUdlbmUgS296aW4JSW5pdGlhbCB2ZXJzaW9uLgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmCV9TRExBRFJWX0gKKyNkZWZpbmUJX1NETEFEUlZfSAorCisKKyNkZWZpbmUJU0RMQV9NQVhJT1JBTkdFCTQJLyogbWF4aW11bSBJL08gcG9ydCByYW5nZSAqLworI2RlZmluZQlTRExBX1dJTkRPV1NJWkUJMHgyMDAwCS8qIGRlZmF1bHQgZHVhbC1wb3J0IG1lbW9yeSB3aW5kb3cgc2l6ZSAqLworLyoqKioqKiBEYXRhIFN0cnVjdHVyZXMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogQWRhcHRlciBoYXJkd2FyZSBjb25maWd1cmF0aW9uLiBQb2ludGVyIHRvIHRoaXMgc3RydWN0dXJlIGlzIHBhc3NlZCB0byBhbGwKKyAqIEFQSXMuCisgKi8KK3R5cGVkZWYgc3RydWN0IHNkbGFodworeworCXVuc2lnbmVkIHR5cGU7CQkJLyogYWRhcHRlciB0eXBlICovCisJdW5zaWduZWQgZndpZDsJCQkvKiBmaXJtd2FyZSBJRCAqLworCXVuc2lnbmVkIHBvcnQ7CQkJLyogYWRhcHRlciBJL08gcG9ydCBiYXNlICovCisJaW50IGlycTsJCQkvKiBpbnRlcnJ1cHQgcmVxdWVzdCBsZXZlbCAqLworCWNoYXIgUzUxNF9jcHVfbm9bMV07CQkvKiBQQ0kgQ1BVIE51bWJlciAqLworCXVuc2lnbmVkIGNoYXIgUzUxNF9zbG90X25vOwkvKiBQQ0kgU2xvdCBOdW1iZXIgKi8KKwljaGFyIGF1dG9fcGNpX2NmZzsJCS8qIEF1dG9kZXRlY3QgUENJIFNsb3QgKi8KKwlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsJLyogUENJIGRldmljZSAqLworCXZvaWQgKiBkcG1iYXNlOwkJCS8qIGR1YWwtcG9ydCBtZW1vcnkgYmFzZSAqLworCXVuc2lnbmVkIGRwbXNpemU7CQkvKiBkdWFsLXBvcnQgbWVtb3J5IHNpemUgKi8KKwl1bnNpZ25lZCBwY2xrOwkJCS8qIENQVSBjbG9jayByYXRlLCBrSHogKi8KKwl1bnNpZ25lZCBsb25nIG1lbW9yeTsJCS8qIG1lbW9yeSBzaXplICovCisJdW5zaWduZWQgbG9uZyB2ZWN0b3I7CQkvKiBsb2NhbCBvZmZzZXQgb2YgdGhlIERQTSB3aW5kb3cgKi8KKwl1bnNpZ25lZCBpb19yYW5nZTsJCS8qIEkvTyBwb3J0IHJhbmdlICovCisJdW5zaWduZWQgY2hhciByZWdzW1NETEFfTUFYSU9SQU5HRV07IC8qIHdhcyB3cml0dGVuIHRvIHJlZ2lzdGVycyAqLworCXVuc2lnbmVkIHJlc2VydmVkWzVdOworfSBzZGxhaHdfdDsKKworLyoqKioqKiBGdW5jdGlvbiBQcm90b3R5cGVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2V4dGVybiBpbnQgc2RsYV9zZXR1cAkoc2RsYWh3X3QqIGh3LCB2b2lkKiBzZm0sIHVuc2lnbmVkIGxlbik7CitleHRlcm4gaW50IHNkbGFfZG93bgkoc2RsYWh3X3QqIGh3KTsKK2V4dGVybiBpbnQgc2RsYV9pbnRlbgkoc2RsYWh3X3QqIGh3KTsKK2V4dGVybiBpbnQgc2RsYV9pbnRkZQkoc2RsYWh3X3QqIGh3KTsKK2V4dGVybiBpbnQgc2RsYV9pbnRhY2sJKHNkbGFod190KiBodyk7CitleHRlcm4gdm9pZCBTNTE0X2ludGFjayAgKHNkbGFod190KiBodywgdTMyIGludF9zdGF0dXMpOworZXh0ZXJuIHZvaWQgcmVhZF9TNTE0X2ludF9zdGF0IChzZGxhaHdfdCogaHcsIHUzMiogaW50X3N0YXR1cyk7CitleHRlcm4gaW50IHNkbGFfaW50cgkoc2RsYWh3X3QqIGh3KTsKK2V4dGVybiBpbnQgc2RsYV9tYXBtZW0JKHNkbGFod190KiBodywgdW5zaWduZWQgbG9uZyBhZGRyKTsKK2V4dGVybiBpbnQgc2RsYV9wZWVrCShzZGxhaHdfdCogaHcsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCogYnVmLAorCQkJIHVuc2lnbmVkIGxlbik7CitleHRlcm4gaW50IHNkbGFfcG9rZQkoc2RsYWh3X3QqIGh3LCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQqIGJ1ZiwKKwkJCSB1bnNpZ25lZCBsZW4pOworZXh0ZXJuIGludCBzZGxhX2V4ZWMJKHZvaWQqIG9wZmxhZyk7CisKK2V4dGVybiB1bnNpZ25lZCB3YW5waXBlX2h3X3Byb2JlKHZvaWQpOworCisjZW5kaWYJLyogX1NETEFEUlZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZGxhcGNpLmggYi9pbmNsdWRlL2xpbnV4L3NkbGFwY2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjdjOTA0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9zZGxhcGNpLmgKQEAgLTAsMCArMSw3MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIHNkbGFwY2kuaAlXQU5QSVBFKHRtKSBNdWx0aXByb3RvY29sIFdBTiBMaW5rIERyaXZlci4KKyoJCURlZmluaXRpb25zIGZvciB0aGUgU0RMQSBQQ0kgYWRhcHRlci4KKyoKKyogQXV0aG9yOglHaWRlb24gSGFjawk8Z2hhY2tAc2FuZ29tYS5jb20+CisqCisqIENvcHlyaWdodDoJKGMpIDE5OTktMjAwMCBTYW5nb21hIFRlY2hub2xvZ2llcyBJbmMuCisqCisqCQlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisqCQltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKgkJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisqCQkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqIEp1biAwMiwgMTk5OQlHaWRlb24gSGFjawlJbml0aWFsIHZlcnNpb24uCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYJX1NETEFQQ0lfSAorI2RlZmluZQlfU0RMQVBDSV9ICisKKy8qKioqKiogRGVmaW5lcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBEZWZpbml0aW9ucyBmb3IgaWRlbnRpZnlpbmcgYW5kIGZpbmRpbmcgUzUxNCBQQ0kgYWRhcHRlcnMgKi8KKyNkZWZpbmUgVjNfVkVORE9SX0lECQkweDExQjAJCS8qIFYzIHZlbmRvciBJRCBudW1iZXIgKi8KKyNkZWZpbmUgVjNfREVWSUNFX0lEICAJCTB4MDAwMgkJLyogVjMgZGV2aWNlIElEIG51bWJlciAqLworI2RlZmluZSBTQU5HT01BX1NVQlNZU19WRU5ET1IgCTB4NDc1MwkJLyogSUQgZm9yIFNhbmdvbWEgKi8KKyNkZWZpbmUgUENJX0RFVl9TTE9UX01BU0sJMHgxRgkJLyogbWFzayBmb3Igc2xvdCBudW1iZXJpbmcgKi8KKyNkZWZpbmUgUENJX0lSUV9OT1RfQUxMT0NBVEVECTB4RkYJCS8qIGludGVycnVwdCBsaW5lIGZvciBubyBJUlEgKi8KKworLyogTG9jYWwgUENJIHJlZ2lzdGVyIG9mZnNldHMgKi8gCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfV09SRAkweDAwCQkvKiB2ZW5kb3IgSUQgKi8KKyNkZWZpbmUgUENJX0lPX0JBU0VfRFdPUkQJMHgxMAkJLyogSU8gYmFzZSAqLwkKKyNkZWZpbmUgUENJX01FTV9CQVNFMF9EV09SRAkweDE0CQkvKiBtZW1vcnkgYmFzZSAtIGFwcGVydHVyZSAwICovCisjZGVmaW5lIFBDSV9NRU1fQkFTRTFfRFdPUkQgICAgIDB4MTgJCS8qIG1lbW9yeSBiYXNlIC0gYXBwZXJ0dXJlIDEgKi8KKyNkZWZpbmUgUENJX1NVQlNZU19WRU5ET1JfV09SRCAJMHgyQwkJLyogc3Vic3lzdGVtIHZlbmRvciBJRCAqLworI2RlZmluZSBQQ0lfSU5UX0xJTkVfQllURQkweDNDCQkvKiBpbnRlcnJ1cHQgbGluZSAqLworI2RlZmluZSBQQ0lfSU5UX1BJTl9CWVRFCTB4M0QJCS8qIGludGVycnVwdCBwaW4gKi8KKyNkZWZpbmUgUENJX01BUDBfRFdPUkQJCTB4NDAJCS8qIFBDSSB0byBsb2NhbCBidXMgYWRkcmVzcyAwICovCisjZGVmaW5lIFBDSV9NQVAxX0RXT1JEICAgICAgICAgIDB4NDQJCS8qIFBDSSB0byBsb2NhbCBidXMgYWRkcmVzcyAxICovCisjZGVmaW5lIFBDSV9JTlRfU1RBVFVTICAgICAgICAgIDB4NDgJCS8qIGludGVycnVwdCBzdGF0dXMgKi8KKyNkZWZpbmUgUENJX0lOVF9DT05GSUcJCTB4NEMJCS8qIGludGVycnVwdCBjb25maWd1cmF0aW9uICovCisgIAorLyogTG9jYWwgUENJIHJlZ2lzdGVyIHVzYWdlICovCisjZGVmaW5lIFBDSV9NRU1PUllfRU5BQkxFCTB4MDAwMDAwMDMJLyogZW5hYmxlIFBDSSBtZW1vcnkgKi8KKyNkZWZpbmUgUENJX0NQVV9BX01FTV9ESVNBQkxFCTB4MDAwMDAwMDIJLyogZGlzYWJsZSBDUFUgQSBtZW1vcnkgKi8KKyNkZWZpbmUgUENJX0NQVV9CX01FTV9ESVNBQkxFICAJMHgwMDEwMDAwMgkvKiBkaXNhYmxlIENQVSBCIG1lbW9yeSAqLworI2RlZmluZSBQQ0lfRU5BQkxFX0lSUV9DUFVfQQkweDAwNUEwMDA0CS8qIGVuYWJsZSBJUlEgZm9yIENQVSBBICovCisjZGVmaW5lIFBDSV9FTkFCTEVfSVJRX0NQVV9CICAgIDB4MDA1QTAwMDgJLyogZW5hYmxlIElSUSBmb3IgQ1BVIEIgKi8KKyNkZWZpbmUgUENJX0RJU0FCTEVfSVJRX0NQVV9BICAgMHgwMDAwMDAwNAkvKiBkaXNhYmxlIElSUSBmb3IgQ1BVIEEgKi8KKyNkZWZpbmUgUENJX0RJU0FCTEVfSVJRX0NQVV9CICAgMHgwMDAwMDAwOAkvKiBkaXNhYmxlIElSUSBmb3IgQ1BVIEIgKi8KKyAKKy8qIFNldHRpbmcgZm9yIHRoZSBJbnRlcnJ1cHQgU3RhdHVzIHJlZ2lzdGVyICovICAKKyNkZWZpbmUgSVJRX0NQVV9BICAgICAgICAgICAgICAgMHgwNCAgICAgICAgICAgIC8qIElSUSBmb3IgQ1BVIEEgKi8KKyNkZWZpbmUgSVJRX0NQVV9CICAgICAgICAgICAgICAgMHgwOAkJLyogSVJRIGZvciBDUFUgQiAqLworCisvKiBUaGUgbWF4aW11bSBzaXplIG9mIHRoZSBTNTE0IG1lbW9yeSAqLworI2RlZmluZSBNQVhfU0laRU9GX1M1MTRfTUVNT1JZCSgyNTYgKiAxMDI0KQorCisvKiBTNTE0IGNvbnRyb2wgcmVnaXN0ZXIgb2Zmc2V0cyB3aXRoaW4gdGhlIG1lbW9yeSBhZGRyZXNzIHNwYWNlICovCisjZGVmaW5lIFM1MTRfQ1RSTF9SRUdfQllURQkweDgwMDAwCisgCisvKiBTNTE0IGFkYXB0ZXIgY29udHJvbCBieXRlcyAqLworI2RlZmluZSBTNTE0X0NQVV9IQUxUIAkJMHgwMAorI2RlZmluZSBTNTE0X0NQVV9TVEFSVAkJMHgwMQorCisvKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgUzUxNCBhZGFwdGVycyBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUgTUFYX1M1MTRfQ0FSRFMJCTIwCQorCisjZGVmaW5lIFBDSV9DQVJEX1RZUEUJCTB4MkUKKyNkZWZpbmUgUzUxNF9EVUFMX0NQVQkJMHgxMgorI2RlZmluZSBTNTE0X1NJTkdMRV9DUFUJCTB4MTEKKworI2VuZGlmCS8qIF9TRExBUENJX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZGxhc2ZtLmggYi9pbmNsdWRlL2xpbnV4L3NkbGFzZm0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGFhYThhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9zZGxhc2ZtLmgKQEAgLTAsMCArMSwxMDQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBzZGxhc2ZtLmgJV0FOUElQRSh0bSkgTXVsdGlwcm90b2NvbCBXQU4gTGluayBEcml2ZXIuCisqCQlEZWZpbml0aW9ucyBmb3IgdGhlIFNETEEgRmlybXdhcmUgTW9kdWxlIChTRk0pLgorKgorKiBBdXRob3I6IAlHaWRlb24gSGFjayAJCisqCisqIENvcHlyaWdodDoJKGMpIDE5OTUtMTk5OSBTYW5nb21hIFRlY2hub2xvZ2llcyBJbmMuCisqCisqCQlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisqCQltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKgkJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisqCQkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqIEp1biAwMiwgMTk5OSAgR2lkZW9uIEhhY2sJQWRkZWQgc3VwcG9ydCBmb3IgdGhlIFM1MTQgYWRhcHRlci4KKyogRGVjIDExLCAxOTk2CUdlbmUgS296aW4JQ29zbWV0aWMgY2hhbmdlcworKiBBcHIgMTYsIDE5OTYJR2VuZSBLb3ppbglDaGFuZ2VkIGFkYXB0ZXIgJiBmaXJtd2FyZSBJRHMuIFZlcnNpb24gMgorKiBEZWMgMTUsIDE5OTUJR2VuZSBLb3ppbglTdHJ1Y3R1cmVzIGNoYW5lZAorKiBOb3YgMDksIDE5OTUJR2VuZSBLb3ppbglJbml0aWFsIHZlcnNpb24uCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYJX1NETEFTRk1fSAorI2RlZmluZQlfU0RMQVNGTV9ICisKKy8qKioqKiogRGVmaW5lcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lCVNGTV9WRVJTSU9OCTIKKyNkZWZpbmUJU0ZNX1NJR05BVFVSRQkiU0ZNIC0gU2FuZ29tYSBTRExBIEZpcm13YXJlIE1vZHVsZSIKKworLyogbWluL21heCAqLworI2RlZmluZQlTRk1fSU1BR0VfU0laRQkweDgwMDAJLyogbWF4IHNpemUgb2YgU0RMQSBjb2RlIGltYWdlIGZpbGUgKi8KKyNkZWZpbmUJU0ZNX0RFU0NSX0xFTgkyNTYJLyogbWF4IGxlbmd0aCBvZiBkZXNjcmlwdGlvbiBzdHJpbmcgKi8KKyNkZWZpbmUJU0ZNX01BWF9TRExBCTE2CS8qIG1heCBudW1iZXIgb2YgY29tcGF0aWJsZSBhZGFwdGVycyAqLworCisvKiBBZGFwdGVyIHR5cGVzICovCisjZGVmaW5lIFNETEFfUzUwMkEJNTAyMAorI2RlZmluZSBTRExBX1M1MDJFCTUwMjEKKyNkZWZpbmUgU0RMQV9TNTAzCTUwMzAKKyNkZWZpbmUgU0RMQV9TNTA4CTUwODAKKyNkZWZpbmUgU0RMQV9TNTA3CTUwNzAKKyNkZWZpbmUgU0RMQV9TNTA5CTUwOTAKKyNkZWZpbmUgU0RMQV9TNTE0CTUxNDAKKworLyogUzUxNCBQQ0kgYWRhcHRlciBDUFUgbnVtYmVycyAqLworI2RlZmluZSBTNTE0X0NQVV9BCSdBJworI2RlZmluZSBTNTE0X0NQVV9CCSdCJworCisKKy8qIEZpcm13YXJlIGlkZW50aWZpY2F0aW9uIG51bWJlcnM6CisgKiAgICAwICAuLiAgOTk5CVRlc3QgJiBEaWFnbm9zdGljcworICogIDEwMDAgLi4gMTk5OQlTdHJlYW1pbmcgSERMQworICogIDIwMDAgLi4gMjk5OQlCaXN5bmMKKyAqICAzMDAwIC4uIDM5OTkJU0RMQworICogIDQwMDAgLi4gNDk5OQlIRExDCisgKiAgNTAwMCAuLiA1OTk5CVguMjUKKyAqICA2MDAwIC4uIDY5OTkJRnJhbWUgUmVsYXkKKyAqICA3MDAwIC4uIDc5OTkJUFBQCisgKiAgODAwMCAuLiA4OTk5ICAgICAgICBDaXNjbyBIRExDCisgKi8KKyNkZWZpbmUJU0ZJRF9DQUxJQjUwMgkgMjAwCisjZGVmaW5lCVNGSURfU1RSTTUwMgkxMjAwCisjZGVmaW5lCVNGSURfU1RSTTUwOAkxODAwCisjZGVmaW5lCVNGSURfQlNDNTAyCTIyMDAKKyNkZWZpbmUJU0ZJRF9TRExDNTAyCTMyMDAKKyNkZWZpbmUJU0ZJRF9IRExDNTAyCTQyMDAKKyNkZWZpbmUJU0ZJRF9IRExDNTA4CTQ4MDAKKyNkZWZpbmUJU0ZJRF9YMjVfNTAyCTUyMDAKKyNkZWZpbmUJU0ZJRF9YMjVfNTA4CTU4MDAKKyNkZWZpbmUJU0ZJRF9GUjUwMgk2MjAwCisjZGVmaW5lCVNGSURfRlI1MDgJNjgwMAorI2RlZmluZQlTRklEX1BQUDUwMgk3MjAwCisjZGVmaW5lCVNGSURfUFBQNTA4CTc4MDAKKyNkZWZpbmUgU0ZJRF9QUFA1MTQJNzE0MAorI2RlZmluZQlTRklEX0NIRExDNTA4CTg4MDAKKyNkZWZpbmUgU0ZJRF9DSERMQzUxNAk4MTQwCisKKy8qKioqKiogRGF0YSBUeXBlcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIHN0cnVjdAlzZm1faW5mbwkJLyogZmlybXdhcmUgbW9kdWxlIGluZm9ybWF0aW9uICovCit7CisJdW5zaWduZWQgc2hvcnQJY29kZWlkOwkJLyogZmlybXdhcmUgSUQgKi8KKwl1bnNpZ25lZCBzaG9ydAl2ZXJzaW9uOwkvKiBmaXJtYXdhcmUgdmVyc2lvbiBudW1iZXIgKi8KKwl1bnNpZ25lZCBzaG9ydAlhZGFwdGVyW1NGTV9NQVhfU0RMQV07IC8qIGNvbXBhdGlibGUgYWRhcHRlciB0eXBlcyAqLworCXVuc2lnbmVkIGxvbmcJbWVtc2l6ZTsJLyogbWluaW11bSBtZW1vcnkgc2l6ZSAqLworCXVuc2lnbmVkIHNob3J0CXJlc2VydmVkWzJdOwkvKiByZXNlcnZlZCAqLworCXVuc2lnbmVkIHNob3J0CXN0YXJ0b2ZmczsJLyogZW50cnkgcG9pbnQgb2Zmc2V0ICovCisJdW5zaWduZWQgc2hvcnQJd2lub2ZmczsJLyogZHVhbC1wb3J0IG1lbW9yeSB3aW5kb3cgb2Zmc2V0ICovCisJdW5zaWduZWQgc2hvcnQJY29kZW9mZnM7CS8qIGNvZGUgbG9hZCBvZmZzZXQgKi8KKwl1bnNpZ25lZCBzaG9ydAljb2Rlc2l6ZTsJLyogY29kZSBzaXplICovCisJdW5zaWduZWQgc2hvcnQJZGF0YW9mZnM7CS8qIGNvbmZpZ3VyYXRpb24gZGF0YSBsb2FkIG9mZnNldCAqLworCXVuc2lnbmVkIHNob3J0CWRhdGFzaXplOwkvKiBjb25maWd1cmF0aW9uIGRhdGEgc2l6ZSAqLworfSBzZm1faW5mb190OworCit0eXBlZGVmIHN0cnVjdCBzZm0JCQkvKiBTRExBIGZpcm13YXJlIGZpbGUgc3RydWN0aXJlICovCit7CisJY2hhcgkJc2lnbmF0dXJlWzgwXTsJLyogU0ZNIGZpbGUgc2lnbmF0dXJlICovCisJdW5zaWduZWQgc2hvcnQJdmVyc2lvbjsJLyogZmlsZSBmb3JtYXQgdmVyc2lvbiAqLworCXVuc2lnbmVkIHNob3J0CWNoZWNrc3VtOwkvKiBpbmZvICsgaW1hZ2UgKi8KKwl1bnNpZ25lZCBzaG9ydAlyZXNlcnZlZFs2XTsJLyogcmVzZXJ2ZWQgKi8KKwljaGFyCQlkZXNjcltTRk1fREVTQ1JfTEVOXTsgLyogZGVzY3JpcHRpb24gc3RyaW5nICovCisJc2ZtX2luZm9fdAlpbmZvOwkJLyogZmlybXdhcmUgbW9kdWxlIGluZm8gKi8KKwl1bnNpZ25lZCBjaGFyCWltYWdlWzFdOwkvKiBjb2RlIGltYWdlICh2YXJpYWJsZSBzaXplKSAqLworfSBzZm1fdDsKKworI2VuZGlmCS8qIF9TRExBU0ZNX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZWNjb21wLmggYi9pbmNsdWRlL2xpbnV4L3NlY2NvbXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTI3MDJiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9zZWNjb21wLmgKQEAgLTAsMCArMSwzNCBAQAorI2lmbmRlZiBfTElOVVhfU0VDQ09NUF9ICisjZGVmaW5lIF9MSU5VWF9TRUNDT01QX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjaWZkZWYgQ09ORklHX1NFQ0NPTVAKKworI2RlZmluZSBOUl9TRUNDT01QX01PREVTIDEKKworI2luY2x1ZGUgPGxpbnV4L3RocmVhZF9pbmZvLmg+CisjaW5jbHVkZSA8YXNtL3NlY2NvbXAuaD4KKwordHlwZWRlZiBzdHJ1Y3QgeyBpbnQgbW9kZTsgfSBzZWNjb21wX3Q7CisKK2V4dGVybiB2b2lkIF9fc2VjdXJlX2NvbXB1dGluZyhpbnQpOworc3RhdGljIGlubGluZSB2b2lkIHNlY3VyZV9jb21wdXRpbmcoaW50IHRoaXNfc3lzY2FsbCkKK3sKKwlpZiAodW5saWtlbHkodGVzdF90aHJlYWRfZmxhZyhUSUZfU0VDQ09NUCkpKQorCQlfX3NlY3VyZV9jb21wdXRpbmcodGhpc19zeXNjYWxsKTsKK30KKworI2Vsc2UgLyogQ09ORklHX1NFQ0NPTVAgKi8KKworI2lmIChfX0dOVUNfXyA+IDIpCisgIHR5cGVkZWYgc3RydWN0IHsgfSBzZWNjb21wX3Q7CisjZWxzZQorICB0eXBlZGVmIHN0cnVjdCB7IGludCBnY2NfaXNfYnVnZ3k7IH0gc2VjY29tcF90OworI2VuZGlmCisKKyNkZWZpbmUgc2VjdXJlX2NvbXB1dGluZyh4KSBkbyB7IH0gd2hpbGUgKDApCisKKyNlbmRpZiAvKiBDT05GSUdfU0VDQ09NUCAqLworCisjZW5kaWYgLyogX0xJTlVYX1NFQ0NPTVBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZWN1cmViaXRzLmggYi9pbmNsdWRlL2xpbnV4L3NlY3VyZWJpdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjA2MTc4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9zZWN1cmViaXRzLmgKQEAgLTAsMCArMSwzMCBAQAorI2lmbmRlZiBfTElOVVhfU0VDVVJFQklUU19ICisjZGVmaW5lIF9MSU5VWF9TRUNVUkVCSVRTX0ggMQorCisjZGVmaW5lIFNFQ1VSRUJJVFNfREVGQVVMVCAweDAwMDAwMDAwCisKK2V4dGVybiB1bnNpZ25lZCBzZWN1cmViaXRzOworCisvKiBXaGVuIHNldCBVSUQgMCBoYXMgbm8gc3BlY2lhbCBwcml2aWxlZ2VzLiBXaGVuIHVuc2V0LCB3ZSBzdXBwb3J0CisgICBpbmhlcml0YW5jZSBvZiByb290LXBlcm1pc3Npb25zIGFuZCBzdWlkLXJvb3QgZXhlY3V0YWJsZSB1bmRlcgorICAgY29tcGF0aWJpbGl0eSBtb2RlLiBXZSByYWlzZSB0aGUgZWZmZWN0aXZlIGFuZCBpbmhlcml0YWJsZSBiaXRtYXNrcworICAgKm9mIHRoZSBleGVjdXRhYmxlIGZpbGUqIGlmIHRoZSBlZmZlY3RpdmUgdWlkIG9mIHRoZSBuZXcgcHJvY2VzcyBpcworICAgMC4gSWYgdGhlIHJlYWwgdWlkIGlzIDAsIHdlIHJhaXNlIHRoZSBpbmhlcml0YWJsZSBiaXRtYXNrIG9mIHRoZQorICAgZXhlY3V0YWJsZSBmaWxlLiAqLworI2RlZmluZSBTRUNVUkVfTk9ST09UICAgICAgICAgICAgMAorCisvKiBXaGVuIHNldCwgc2V0dWlkIHRvL2Zyb20gdWlkIDAgZG9lcyBub3QgdHJpZ2dlciBjYXBhYmlsaXR5LSJmaXhlcyIKKyAgIHRvIGJlIGNvbXBhdGlibGUgd2l0aCBvbGQgcHJvZ3JhbXMgcmVseWluZyBvbiBzZXQqdWlkIHRvIGxvb3NlCisgICBwcml2aWxlZ2VzLiBXaGVuIHVuc2V0LCBzZXR1aWQgZG9lc24ndCBjaGFuZ2UgcHJpdmlsZWdlcy4gKi8KKyNkZWZpbmUgU0VDVVJFX05PX1NFVFVJRF9GSVhVUCAgIDIKKworLyogRWFjaCBzZWN1cmVzZXR0aW5nIGlzIGltcGxlbWVudGVkIHVzaW5nIHR3byBiaXRzLiBPbmUgYml0IHNwZWNpZnkKKyAgIHdoZXRoZXIgdGhlIHNldHRpbmcgaXMgb24gb3Igb2ZmLiBUaGUgb3RoZXIgYml0IHNwZWNpZnkgd2hldGhlciB0aGUKKyAgIHNldHRpbmcgaXMgZml4ZWQgb3Igbm90LiBBIHNldHRpbmcgd2hpY2ggaXMgZml4ZWQgY2Fubm90IGJlIGNoYW5nZWQKKyAgIGZyb20gdXNlci1sZXZlbC4gKi8KKworI2RlZmluZSBpc3NlY3VyZShYKSAoICgxIDw8IChYKzEpKSAmIFNFQ1VSRUJJVFNfREVGQVVMVCA/IAlcCisJCSAgICAgICgxIDw8IChYKSkgJiBTRUNVUkVCSVRTX0RFRkFVTFQgOgkJXAorCQkgICAgICAoMSA8PCAoWCkpICYgc2VjdXJlYml0cyApCisKKyNlbmRpZiAvKiAhX0xJTlVYX1NFQ1VSRUJJVFNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0MjA5NWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKQEAgLTAsMCArMSwyODU4IEBACisvKgorICogTGludXggU2VjdXJpdHkgcGx1ZworICoKKyAqIENvcHlyaWdodCAoQykgMjAwMSBXaXJlWCBDb21tdW5pY2F0aW9ucywgSW5jIDxjaHJpc0B3aXJleC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwMSBOZXR3b3JrcyBBc3NvY2lhdGVzIFRlY2hub2xvZ3ksIEluYyA8c3NtYWxsZXlAbmFpLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwMSBKYW1lcyBNb3JyaXMgPGptb3JyaXNAaW50ZXJjb2RlLmNvbS5hdT4KKyAqIENvcHlyaWdodCAoQykgMjAwMSBTaWxpY29uIEdyYXBoaWNzLCBJbmMuIChUcnVzdCBUZWNobm9sb2d5IEdyb3VwKQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKglpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICoJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqCShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICoJRHVlIHRvIHRoaXMgZmlsZSBiZWluZyBsaWNlbnNlZCB1bmRlciB0aGUgR1BMIHRoZXJlIGlzIGNvbnRyb3ZlcnN5IG92ZXIKKyAqCXdoZXRoZXIgdGhpcyBwZXJtaXRzIHlvdSB0byB3cml0ZSBhIG1vZHVsZSB0aGF0ICNpbmNsdWRlcyB0aGlzIGZpbGUKKyAqCXdpdGhvdXQgcGxhY2luZyB5b3VyIG1vZHVsZSB1bmRlciB0aGUgR1BMLiAgUGxlYXNlIGNvbnN1bHQgYSBsYXd5ZXIgZm9yCisgKglhZHZpY2UgYmVmb3JlIGRvaW5nIHRoaXMuCisgKgorICovCisKKyNpZm5kZWYgX19MSU5VWF9TRUNVUklUWV9ICisjZGVmaW5lIF9fTElOVVhfU0VDVVJJVFlfSAorCisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9iaW5mbXRzLmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CisjaW5jbHVkZSA8bGludXgvcmVzb3VyY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zaG0uaD4KKyNpbmNsdWRlIDxsaW51eC9tc2cuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorCitzdHJ1Y3QgY3RsX3RhYmxlOworCisvKgorICogVGhlc2UgZnVuY3Rpb25zIGFyZSBpbiBzZWN1cml0eS9jYXBhYmlsaXR5LmMgYW5kIGFyZSB1c2VkCisgKiBhcyB0aGUgZGVmYXVsdCBjYXBhYmlsaXRpZXMgZnVuY3Rpb25zCisgKi8KK2V4dGVybiBpbnQgY2FwX2NhcGFibGUgKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBpbnQgY2FwKTsKK2V4dGVybiBpbnQgY2FwX3NldHRpbWUgKHN0cnVjdCB0aW1lc3BlYyAqdHMsIHN0cnVjdCB0aW1lem9uZSAqdHopOworZXh0ZXJuIGludCBjYXBfcHRyYWNlIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudCwgc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCk7CitleHRlcm4gaW50IGNhcF9jYXBnZXQgKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LCBrZXJuZWxfY2FwX3QgKmVmZmVjdGl2ZSwga2VybmVsX2NhcF90ICppbmhlcml0YWJsZSwga2VybmVsX2NhcF90ICpwZXJtaXR0ZWQpOworZXh0ZXJuIGludCBjYXBfY2Fwc2V0X2NoZWNrIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwga2VybmVsX2NhcF90ICplZmZlY3RpdmUsIGtlcm5lbF9jYXBfdCAqaW5oZXJpdGFibGUsIGtlcm5lbF9jYXBfdCAqcGVybWl0dGVkKTsKK2V4dGVybiB2b2lkIGNhcF9jYXBzZXRfc2V0IChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwga2VybmVsX2NhcF90ICplZmZlY3RpdmUsIGtlcm5lbF9jYXBfdCAqaW5oZXJpdGFibGUsIGtlcm5lbF9jYXBfdCAqcGVybWl0dGVkKTsKK2V4dGVybiBpbnQgY2FwX2Jwcm1fc2V0X3NlY3VyaXR5IChzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKTsKK2V4dGVybiB2b2lkIGNhcF9icHJtX2FwcGx5X2NyZWRzIChzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLCBpbnQgdW5zYWZlKTsKK2V4dGVybiBpbnQgY2FwX2Jwcm1fc2VjdXJlZXhlYyhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKTsKK2V4dGVybiBpbnQgY2FwX2lub2RlX3NldHhhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciAqbmFtZSwgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpOworZXh0ZXJuIGludCBjYXBfaW5vZGVfcmVtb3ZleGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjaGFyICpuYW1lKTsKK2V4dGVybiBpbnQgY2FwX3Rhc2tfcG9zdF9zZXR1aWQgKHVpZF90IG9sZF9ydWlkLCB1aWRfdCBvbGRfZXVpZCwgdWlkX3Qgb2xkX3N1aWQsIGludCBmbGFncyk7CitleHRlcm4gdm9pZCBjYXBfdGFza19yZXBhcmVudF90b19pbml0IChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApOworZXh0ZXJuIGludCBjYXBfc3lzbG9nIChpbnQgdHlwZSk7CitleHRlcm4gaW50IGNhcF92bV9lbm91Z2hfbWVtb3J5IChsb25nIHBhZ2VzKTsKKworc3RydWN0IG1zZ2hkcjsKK3N0cnVjdCBza19idWZmOworc3RydWN0IHNvY2s7CitzdHJ1Y3Qgc29ja2FkZHI7CitzdHJ1Y3Qgc29ja2V0OworCitleHRlcm4gaW50IGNhcF9uZXRsaW5rX3NlbmQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQgY2FwX25ldGxpbmtfcmVjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKworLyoKKyAqIFZhbHVlcyB1c2VkIGluIHRoZSB0YXNrX3NlY3VyaXR5X29wcyBjYWxscworICovCisvKiBzZXR1aWQgb3Igc2V0Z2lkLCBpZDAgPT0gdWlkIG9yIGdpZCAqLworI2RlZmluZSBMU01fU0VUSURfSUQJMQorCisvKiBzZXRyZXVpZCBvciBzZXRyZWdpZCwgaWQwID09IHJlYWwsIGlkMSA9PSBlZmYgKi8KKyNkZWZpbmUgTFNNX1NFVElEX1JFCTIKKworLyogc2V0cmVzdWlkIG9yIHNldHJlc2dpZCwgaWQwID09IHJlYWwsIGlkMSA9PSBlZmYsIHVpZDIgPT0gc2F2ZWQgKi8KKyNkZWZpbmUgTFNNX1NFVElEX1JFUwk0CisKKy8qIHNldGZzdWlkIG9yIHNldGZzZ2lkLCBpZDAgPT0gZnN1aWQgb3IgZnNnaWQgKi8KKyNkZWZpbmUgTFNNX1NFVElEX0ZTCTgKKworLyogZm9yd2FyZCBkZWNsYXJlcyB0byBhdm9pZCB3YXJuaW5ncyAqLworc3RydWN0IG5mc2N0bF9hcmc7CitzdHJ1Y3Qgc2NoZWRfcGFyYW07CitzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdDsKKworLyogYnBybV9hcHBseV9jcmVkcyB1bnNhZmUgcmVhc29ucyAqLworI2RlZmluZSBMU01fVU5TQUZFX1NIQVJFCTEKKyNkZWZpbmUgTFNNX1VOU0FGRV9QVFJBQ0UJMgorI2RlZmluZSBMU01fVU5TQUZFX1BUUkFDRV9DQVAJNAorCisjaWZkZWYgQ09ORklHX1NFQ1VSSVRZCisKKy8qKgorICogc3RydWN0IHNlY3VyaXR5X29wZXJhdGlvbnMgLSBtYWluIHNlY3VyaXR5IHN0cnVjdHVyZQorICoKKyAqIFNlY3VyaXR5IGhvb2tzIGZvciBwcm9ncmFtIGV4ZWN1dGlvbiBvcGVyYXRpb25zLgorICoKKyAqIEBicHJtX2FsbG9jX3NlY3VyaXR5OgorICoJQWxsb2NhdGUgYW5kIGF0dGFjaCBhIHNlY3VyaXR5IHN0cnVjdHVyZSB0byB0aGUgQGJwcm0tPnNlY3VyaXR5IGZpZWxkLgorICoJVGhlIHNlY3VyaXR5IGZpZWxkIGlzIGluaXRpYWxpemVkIHRvIE5VTEwgd2hlbiB0aGUgYnBybSBzdHJ1Y3R1cmUgaXMKKyAqCWFsbG9jYXRlZC4KKyAqCUBicHJtIGNvbnRhaW5zIHRoZSBsaW51eF9iaW5wcm0gc3RydWN0dXJlIHRvIGJlIG1vZGlmaWVkLgorICoJUmV0dXJuIDAgaWYgb3BlcmF0aW9uIHdhcyBzdWNjZXNzZnVsLgorICogQGJwcm1fZnJlZV9zZWN1cml0eToKKyAqCUBicHJtIGNvbnRhaW5zIHRoZSBsaW51eF9iaW5wcm0gc3RydWN0dXJlIHRvIGJlIG1vZGlmaWVkLgorICoJRGVhbGxvY2F0ZSBhbmQgY2xlYXIgdGhlIEBicHJtLT5zZWN1cml0eSBmaWVsZC4KKyAqIEBicHJtX2FwcGx5X2NyZWRzOgorICoJQ29tcHV0ZSBhbmQgc2V0IHRoZSBzZWN1cml0eSBhdHRyaWJ1dGVzIG9mIGEgcHJvY2VzcyBiZWluZyB0cmFuc2Zvcm1lZAorICoJYnkgYW4gZXhlY3ZlIG9wZXJhdGlvbiBiYXNlZCBvbiB0aGUgb2xkIGF0dHJpYnV0ZXMgKGN1cnJlbnQtPnNlY3VyaXR5KQorICoJYW5kIHRoZSBpbmZvcm1hdGlvbiBzYXZlZCBpbiBAYnBybS0+c2VjdXJpdHkgYnkgdGhlIHNldF9zZWN1cml0eSBob29rLgorICoJU2luY2UgdGhpcyBob29rIGZ1bmN0aW9uIChhbmQgaXRzIGNhbGxlcikgYXJlIHZvaWQsIHRoaXMgaG9vayBjYW4gbm90CisgKglyZXR1cm4gYW4gZXJyb3IuICBIb3dldmVyLCBpdCBjYW4gbGVhdmUgdGhlIHNlY3VyaXR5IGF0dHJpYnV0ZXMgb2YgdGhlCisgKglwcm9jZXNzIHVuY2hhbmdlZCBpZiBhbiBhY2Nlc3MgZmFpbHVyZSBvY2N1cnMgYXQgdGhpcyBwb2ludC4KKyAqCWJwcm1fYXBwbHlfY3JlZHMgaXMgY2FsbGVkIHVuZGVyIHRhc2tfbG9jay4gIEB1bnNhZmUgaW5kaWNhdGVzIHZhcmlvdXMKKyAqCXJlYXNvbnMgd2h5IGl0IG1heSBiZSB1bnNhZmUgdG8gY2hhbmdlIHNlY3VyaXR5IHN0YXRlLgorICoJQGJwcm0gY29udGFpbnMgdGhlIGxpbnV4X2JpbnBybSBzdHJ1Y3R1cmUuCisgKiBAYnBybV9wb3N0X2FwcGx5X2NyZWRzOgorICoJUnVucyBhZnRlciBicHJtX2FwcGx5X2NyZWRzIHdpdGggdGhlIHRhc2tfbG9jayBkcm9wcGVkLCBzbyB0aGF0CisgKglmdW5jdGlvbnMgd2hpY2ggY2Fubm90IGJlIGNhbGxlZCBzYWZlbHkgdW5kZXIgdGhlIHRhc2tfbG9jayBjYW4KKyAqCWJlIHVzZWQuICBUaGlzIGhvb2sgaXMgYSBnb29kIHBsYWNlIHRvIHBlcmZvcm0gc3RhdGUgY2hhbmdlcyBvbgorICoJdGhlIHByb2Nlc3Mgc3VjaCBhcyBjbG9zaW5nIG9wZW4gZmlsZSBkZXNjcmlwdG9ycyB0byB3aGljaCBhY2Nlc3MKKyAqCWlzIG5vIGxvbmdlciBncmFudGVkIGlmIHRoZSBhdHRyaWJ1dGVzIHdlcmUgY2hhbmdlZC4KKyAqCU5vdGUgdGhhdCBhIHNlY3VyaXR5IG1vZHVsZSBtaWdodCBuZWVkIHRvIHNhdmUgc3RhdGUgYmV0d2VlbgorICoJYnBybV9hcHBseV9jcmVkcyBhbmQgYnBybV9wb3N0X2FwcGx5X2NyZWRzIHRvIHN0b3JlIHRoZSBkZWNpc2lvbgorICoJb24gd2hldGhlciB0aGUgcHJvY2VzcyBtYXkgcHJvY2VlZC4KKyAqCUBicHJtIGNvbnRhaW5zIHRoZSBsaW51eF9iaW5wcm0gc3RydWN0dXJlLgorICogQGJwcm1fc2V0X3NlY3VyaXR5OgorICoJU2F2ZSBzZWN1cml0eSBpbmZvcm1hdGlvbiBpbiB0aGUgYnBybS0+c2VjdXJpdHkgZmllbGQsIHR5cGljYWxseSBiYXNlZAorICoJb24gaW5mb3JtYXRpb24gYWJvdXQgdGhlIGJwcm0tPmZpbGUsIGZvciBsYXRlciB1c2UgYnkgdGhlIGFwcGx5X2NyZWRzCisgKglob29rLiAgVGhpcyBob29rIG1heSBhbHNvIG9wdGlvbmFsbHkgY2hlY2sgcGVybWlzc2lvbnMgKGUuZy4gZm9yCisgKgl0cmFuc2l0aW9ucyBiZXR3ZWVuIHNlY3VyaXR5IGRvbWFpbnMpLgorICoJVGhpcyBob29rIG1heSBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgZHVyaW5nIGEgc2luZ2xlIGV4ZWN2ZSwgZS5nLiBmb3IKKyAqCWludGVycHJldGVycy4gIFRoZSBob29rIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQgYnkKKyAqCWNoZWNraW5nIHRvIHNlZSBpZiBAYnBybS0+c2VjdXJpdHkgaXMgbm9uLU5VTEwuICBJZiBzbywgdGhlbiB0aGUgaG9vaworICoJbWF5IGRlY2lkZSBlaXRoZXIgdG8gcmV0YWluIHRoZSBzZWN1cml0eSBpbmZvcm1hdGlvbiBzYXZlZCBlYXJsaWVyIG9yCisgKgl0byByZXBsYWNlIGl0LgorICoJQGJwcm0gY29udGFpbnMgdGhlIGxpbnV4X2JpbnBybSBzdHJ1Y3R1cmUuCisgKglSZXR1cm4gMCBpZiB0aGUgaG9vayBpcyBzdWNjZXNzZnVsIGFuZCBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuCisgKiBAYnBybV9jaGVja19zZWN1cml0eToKKyAqIAlUaGlzIGhvb2sgbWVkaWF0ZXMgdGhlIHBvaW50IHdoZW4gYSBzZWFyY2ggZm9yIGEgYmluYXJ5IGhhbmRsZXIJd2lsbAorICogCWJlZ2luLiAgSXQgYWxsb3dzIGEgY2hlY2sgdGhlIEBicHJtLT5zZWN1cml0eSB2YWx1ZSB3aGljaCBpcyBzZXQgaW4KKyAqIAl0aGUgcHJlY2VkaW5nIHNldF9zZWN1cml0eSBjYWxsLiAgVGhlIHByaW1hcnkgZGlmZmVyZW5jZSBmcm9tCisgKiAJc2V0X3NlY3VyaXR5IGlzIHRoYXQgdGhlIGFyZ3YgbGlzdCBhbmQgZW52cCBsaXN0IGFyZSByZWxpYWJseQorICogCWF2YWlsYWJsZSBpbiBAYnBybS4gIFRoaXMgaG9vayBtYXkgYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzCisgKiAJZHVyaW5nIGEgc2luZ2xlIGV4ZWN2ZTsgYW5kIGluIGVhY2ggcGFzcyBzZXRfc2VjdXJpdHkgaXMgY2FsbGVkCisgKiAJZmlyc3QuCisgKiAJQGJwcm0gY29udGFpbnMgdGhlIGxpbnV4X2JpbnBybSBzdHJ1Y3R1cmUuCisgKglSZXR1cm4gMCBpZiB0aGUgaG9vayBpcyBzdWNjZXNzZnVsIGFuZCBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuCisgKiBAYnBybV9zZWN1cmVleGVjOgorICogICAgICBSZXR1cm4gYSBib29sZWFuIHZhbHVlICgwIG9yIDEpIGluZGljYXRpbmcgd2hldGhlciBhICJzZWN1cmUgZXhlYyIgCisgKiAgICAgIGlzIHJlcXVpcmVkLiAgVGhlIGZsYWcgaXMgcGFzc2VkIGluIHRoZSBhdXhpbGlhcnkgdGFibGUKKyAqICAgICAgb24gdGhlIGluaXRpYWwgc3RhY2sgdG8gdGhlIEVMRiBpbnRlcnByZXRlciB0byBpbmRpY2F0ZSB3aGV0aGVyIGxpYmMgCisgKiAgICAgIHNob3VsZCBlbmFibGUgc2VjdXJlIG1vZGUuCisgKiAgICAgIEBicHJtIGNvbnRhaW5zIHRoZSBsaW51eF9iaW5wcm0gc3RydWN0dXJlLgorICoKKyAqIFNlY3VyaXR5IGhvb2tzIGZvciBmaWxlc3lzdGVtIG9wZXJhdGlvbnMuCisgKgorICogQHNiX2FsbG9jX3NlY3VyaXR5OgorICoJQWxsb2NhdGUgYW5kIGF0dGFjaCBhIHNlY3VyaXR5IHN0cnVjdHVyZSB0byB0aGUgc2ItPnNfc2VjdXJpdHkgZmllbGQuCisgKglUaGUgc19zZWN1cml0eSBmaWVsZCBpcyBpbml0aWFsaXplZCB0byBOVUxMIHdoZW4gdGhlIHN0cnVjdHVyZSBpcworICoJYWxsb2NhdGVkLgorICoJQHNiIGNvbnRhaW5zIHRoZSBzdXBlcl9ibG9jayBzdHJ1Y3R1cmUgdG8gYmUgbW9kaWZpZWQuCisgKglSZXR1cm4gMCBpZiBvcGVyYXRpb24gd2FzIHN1Y2Nlc3NmdWwuCisgKiBAc2JfZnJlZV9zZWN1cml0eToKKyAqCURlYWxsb2NhdGUgYW5kIGNsZWFyIHRoZSBzYi0+c19zZWN1cml0eSBmaWVsZC4KKyAqCUBzYiBjb250YWlucyB0aGUgc3VwZXJfYmxvY2sgc3RydWN0dXJlIHRvIGJlIG1vZGlmaWVkLgorICogQHNiX3N0YXRmczoKKyAqCUNoZWNrIHBlcm1pc3Npb24gYmVmb3JlIG9idGFpbmluZyBmaWxlc3lzdGVtIHN0YXRpc3RpY3MgZm9yIHRoZSBAc2IKKyAqCWZpbGVzeXN0ZW0uCisgKglAc2IgY29udGFpbnMgdGhlIHN1cGVyX2Jsb2NrIHN0cnVjdHVyZSBmb3IgdGhlIGZpbGVzeXN0ZW0uCisgKglSZXR1cm4gMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuICAKKyAqIEBzYl9tb3VudDoKKyAqCUNoZWNrIHBlcm1pc3Npb24gYmVmb3JlIGFuIG9iamVjdCBzcGVjaWZpZWQgYnkgQGRldl9uYW1lIGlzIG1vdW50ZWQgb24KKyAqCXRoZSBtb3VudCBwb2ludCBuYW1lZCBieSBAbmQuICBGb3IgYW4gb3JkaW5hcnkgbW91bnQsIEBkZXZfbmFtZQorICoJaWRlbnRpZmllcyBhIGRldmljZSBpZiB0aGUgZmlsZSBzeXN0ZW0gdHlwZSByZXF1aXJlcyBhIGRldmljZS4gIEZvciBhCisgKglyZW1vdW50IChAZmxhZ3MgJiBNU19SRU1PVU5UKSwgQGRldl9uYW1lIGlzIGlycmVsZXZhbnQuICBGb3IgYQorICoJbG9vcGJhY2svYmluZCBtb3VudCAoQGZsYWdzICYgTVNfQklORCksIEBkZXZfbmFtZSBpZGVudGlmaWVzIHRoZQorICoJcGF0aG5hbWUgb2YgdGhlIG9iamVjdCBiZWluZyBtb3VudGVkLgorICoJQGRldl9uYW1lIGNvbnRhaW5zIHRoZSBuYW1lIGZvciBvYmplY3QgYmVpbmcgbW91bnRlZC4KKyAqCUBuZCBjb250YWlucyB0aGUgbmFtZWlkYXRhIHN0cnVjdHVyZSBmb3IgbW91bnQgcG9pbnQgb2JqZWN0LgorICoJQHR5cGUgY29udGFpbnMgdGhlIGZpbGVzeXN0ZW0gdHlwZS4KKyAqCUBmbGFncyBjb250YWlucyB0aGUgbW91bnQgZmxhZ3MuCisgKglAZGF0YSBjb250YWlucyB0aGUgZmlsZXN5c3RlbS1zcGVjaWZpYyBkYXRhLgorICoJUmV0dXJuIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLgorICogQHNiX2NvcHlfZGF0YToKKyAqCUFsbG93IG1vdW50IG9wdGlvbiBkYXRhIHRvIGJlIGNvcGllZCBwcmlvciB0byBwYXJzaW5nIGJ5IHRoZSBmaWxlc3lzdGVtLAorICoJc28gdGhhdCB0aGUgc2VjdXJpdHkgbW9kdWxlIGNhbiBleHRyYWN0IHNlY3VyaXR5LXNwZWNpZmljIG1vdW50CisgKglvcHRpb25zIGNsZWFubHkgKGEgZmlsZXN5c3RlbSBtYXkgbW9kaWZ5IHRoZSBkYXRhIGUuZy4gd2l0aCBzdHJzZXAoKSkuCisgKglUaGlzIGFsc28gYWxsb3dzIHRoZSBvcmlnaW5hbCBtb3VudCBkYXRhIHRvIGJlIHN0cmlwcGVkIG9mIHNlY3VyaXR5LQorICoJc3BlY2lmaWMgb3B0aW9ucyB0byBhdm9pZCBoYXZpbmcgdG8gbWFrZSBmaWxlc3lzdGVtcyBhd2FyZSBvZiB0aGVtLgorICoJQHR5cGUgdGhlIHR5cGUgb2YgZmlsZXN5c3RlbSBiZWluZyBtb3VudGVkLgorICoJQG9yaWcgdGhlIG9yaWdpbmFsIG1vdW50IGRhdGEgY29waWVkIGZyb20gdXNlcnNwYWNlLgorICoJQGNvcHkgY29waWVkIGRhdGEgd2hpY2ggd2lsbCBiZSBwYXNzZWQgdG8gdGhlIHNlY3VyaXR5IG1vZHVsZS4KKyAqCVJldHVybnMgMCBpZiB0aGUgY29weSB3YXMgc3VjY2Vzc2Z1bC4KKyAqIEBzYl9jaGVja19zYjoKKyAqCUNoZWNrIHBlcm1pc3Npb24gYmVmb3JlIHRoZSBkZXZpY2Ugd2l0aCBzdXBlcmJsb2NrIEBtbnQtPnNiIGlzIG1vdW50ZWQKKyAqCW9uIHRoZSBtb3VudCBwb2ludCBuYW1lZCBieSBAbmQuCisgKglAbW50IGNvbnRhaW5zIHRoZSB2ZnNtb3VudCBmb3IgZGV2aWNlIGJlaW5nIG1vdW50ZWQuCisgKglAbmQgY29udGFpbnMgdGhlIG5hbWVpZGF0YSBvYmplY3QgZm9yIHRoZSBtb3VudCBwb2ludC4KKyAqCVJldHVybiAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KKyAqIEBzYl91bW91bnQ6CisgKglDaGVjayBwZXJtaXNzaW9uIGJlZm9yZSB0aGUgQG1udCBmaWxlIHN5c3RlbSBpcyB1bm1vdW50ZWQuCisgKglAbW50IGNvbnRhaW5zIHRoZSBtb3VudGVkIGZpbGUgc3lzdGVtLgorICoJQGZsYWdzIGNvbnRhaW5zIHRoZSB1bm1vdW50IGZsYWdzLCBlLmcuIE1OVF9GT1JDRS4KKyAqCVJldHVybiAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KKyAqIEBzYl91bW91bnRfY2xvc2U6CisgKglDbG9zZSBhbnkgZmlsZXMgaW4gdGhlIEBtbnQgbW91bnRlZCBmaWxlc3lzdGVtIHRoYXQgYXJlIGhlbGQgb3BlbiBieQorICoJdGhlIHNlY3VyaXR5IG1vZHVsZS4gIFRoaXMgaG9vayBpcyBjYWxsZWQgZHVyaW5nIGFuIHVtb3VudCBvcGVyYXRpb24KKyAqCXByaW9yIHRvIGNoZWNraW5nIHdoZXRoZXIgdGhlIGZpbGVzeXN0ZW0gaXMgc3RpbGwgYnVzeS4KKyAqCUBtbnQgY29udGFpbnMgdGhlIG1vdW50ZWQgZmlsZXN5c3RlbS4KKyAqIEBzYl91bW91bnRfYnVzeToKKyAqCUhhbmRsZSBhIGZhaWxlZCB1bW91bnQgb2YgdGhlIEBtbnQgbW91bnRlZCBmaWxlc3lzdGVtLCBlLmcuICByZS1vcGVuaW5nCisgKglhbnkgZmlsZXMgdGhhdCB3ZXJlIGNsb3NlZCBieSB1bW91bnRfY2xvc2UuICBUaGlzIGhvb2sgaXMgY2FsbGVkIGR1cmluZworICoJYW4gdW1vdW50IG9wZXJhdGlvbiBpZiB0aGUgdW1vdW50IGZhaWxzIGFmdGVyIGEgY2FsbCB0byB0aGUKKyAqCXVtb3VudF9jbG9zZSBob29rLgorICoJQG1udCBjb250YWlucyB0aGUgbW91bnRlZCBmaWxlc3lzdGVtLgorICogQHNiX3Bvc3RfcmVtb3VudDoKKyAqCVVwZGF0ZSB0aGUgc2VjdXJpdHkgbW9kdWxlJ3Mgc3RhdGUgd2hlbiBhIGZpbGVzeXN0ZW0gaXMgcmVtb3VudGVkLgorICoJVGhpcyBob29rIGlzIG9ubHkgY2FsbGVkIGlmIHRoZSByZW1vdW50IHdhcyBzdWNjZXNzZnVsLgorICoJQG1udCBjb250YWlucyB0aGUgbW91bnRlZCBmaWxlIHN5c3RlbS4KKyAqCUBmbGFncyBjb250YWlucyB0aGUgbmV3IGZpbGVzeXN0ZW0gZmxhZ3MuCisgKglAZGF0YSBjb250YWlucyB0aGUgZmlsZXN5c3RlbS1zcGVjaWZpYyBkYXRhLgorICogQHNiX3Bvc3RfbW91bnRyb290OgorICoJVXBkYXRlIHRoZSBzZWN1cml0eSBtb2R1bGUncyBzdGF0ZSB3aGVuIHRoZSByb290IGZpbGVzeXN0ZW0gaXMgbW91bnRlZC4KKyAqCVRoaXMgaG9vayBpcyBvbmx5IGNhbGxlZCBpZiB0aGUgbW91bnQgd2FzIHN1Y2Nlc3NmdWwuCisgKiBAc2JfcG9zdF9hZGRtb3VudDoKKyAqCVVwZGF0ZSB0aGUgc2VjdXJpdHkgbW9kdWxlJ3Mgc3RhdGUgd2hlbiBhIGZpbGVzeXN0ZW0gaXMgbW91bnRlZC4KKyAqCVRoaXMgaG9vayBpcyBjYWxsZWQgYW55IHRpbWUgYSBtb3VudCBpcyBzdWNjZXNzZnVsbHkgZ3JhZmV0ZCB0bworICoJdGhlIHRyZWUuCisgKglAbW50IGNvbnRhaW5zIHRoZSBtb3VudGVkIGZpbGVzeXN0ZW0uCisgKglAbW91bnRwb2ludF9uZCBjb250YWlucyB0aGUgbmFtZWlkYXRhIHN0cnVjdHVyZSBmb3IgdGhlIG1vdW50IHBvaW50LgorICogQHNiX3Bpdm90cm9vdDoKKyAqCUNoZWNrIHBlcm1pc3Npb24gYmVmb3JlIHBpdm90aW5nIHRoZSByb290IGZpbGVzeXN0ZW0uCisgKglAb2xkX25kIGNvbnRhaW5zIHRoZSBuYW1laWRhdGEgc3RydWN0dXJlIGZvciB0aGUgbmV3IGxvY2F0aW9uIG9mIHRoZSBjdXJyZW50IHJvb3QgKHB1dF9vbGQpLgorICogICAgICBAbmV3X25kIGNvbnRhaW5zIHRoZSBuYW1laWRhdGEgc3RydWN0dXJlIGZvciB0aGUgbmV3IHJvb3QgKG5ld19yb290KS4KKyAqCVJldHVybiAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KKyAqIEBzYl9wb3N0X3Bpdm90cm9vdDoKKyAqCVVwZGF0ZSBtb2R1bGUgc3RhdGUgYWZ0ZXIgYSBzdWNjZXNzZnVsIHBpdm90LgorICoJQG9sZF9uZCBjb250YWlucyB0aGUgbmFtZWlkYXRhIHN0cnVjdHVyZSBmb3IgdGhlIG9sZCByb290LgorICogICAgICBAbmV3X25kIGNvbnRhaW5zIHRoZSBuYW1laWRhdGEgc3RydWN0dXJlIGZvciB0aGUgbmV3IHJvb3QuCisgKgorICogU2VjdXJpdHkgaG9va3MgZm9yIGlub2RlIG9wZXJhdGlvbnMuCisgKgorICogQGlub2RlX2FsbG9jX3NlY3VyaXR5OgorICoJQWxsb2NhdGUgYW5kIGF0dGFjaCBhIHNlY3VyaXR5IHN0cnVjdHVyZSB0byBAaW5vZGUtPmlfc2VjdXJpdHkuICBUaGUKKyAqCWlfc2VjdXJpdHkgZmllbGQgaXMgaW5pdGlhbGl6ZWQgdG8gTlVMTCB3aGVuIHRoZSBpbm9kZSBzdHJ1Y3R1cmUgaXMKKyAqCWFsbG9jYXRlZC4KKyAqCUBpbm9kZSBjb250YWlucyB0aGUgaW5vZGUgc3RydWN0dXJlLgorICoJUmV0dXJuIDAgaWYgb3BlcmF0aW9uIHdhcyBzdWNjZXNzZnVsLgorICogQGlub2RlX2ZyZWVfc2VjdXJpdHk6CisgKglAaW5vZGUgY29udGFpbnMgdGhlIGlub2RlIHN0cnVjdHVyZS4KKyAqCURlYWxsb2NhdGUgdGhlIGlub2RlIHNlY3VyaXR5IHN0cnVjdHVyZSBhbmQgc2V0IEBpbm9kZS0+aV9zZWN1cml0eSB0bworICoJTlVMTC4gCisgKiBAaW5vZGVfY3JlYXRlOgorICoJQ2hlY2sgcGVybWlzc2lvbiB0byBjcmVhdGUgYSByZWd1bGFyIGZpbGUuCisgKglAZGlyIGNvbnRhaW5zIGlub2RlIHN0cnVjdHVyZSBvZiB0aGUgcGFyZW50IG9mIHRoZSBuZXcgZmlsZS4KKyAqCUBkZW50cnkgY29udGFpbnMgdGhlIGRlbnRyeSBzdHJ1Y3R1cmUgZm9yIHRoZSBmaWxlIHRvIGJlIGNyZWF0ZWQuCisgKglAbW9kZSBjb250YWlucyB0aGUgZmlsZSBtb2RlIG9mIHRoZSBmaWxlIHRvIGJlIGNyZWF0ZWQuCisgKglSZXR1cm4gMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuCisgKiBAaW5vZGVfcG9zdF9jcmVhdGU6CisgKglTZXQgdGhlIHNlY3VyaXR5IGF0dHJpYnV0ZXMgb24gYSBuZXdseSBjcmVhdGVkIHJlZ3VsYXIgZmlsZS4gIFRoaXMgaG9vaworICoJaXMgY2FsbGVkIGFmdGVyIGEgZmlsZSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgY3JlYXRlZC4KKyAqCUBkaXIgY29udGFpbnMgdGhlIGlub2RlIHN0cnVjdHVyZSBvZiB0aGUgcGFyZW50IGRpcmVjdG9yeSBvZiB0aGUgbmV3IGZpbGUuCisgKglAZGVudHJ5IGNvbnRhaW5zIHRoZSB0aGUgZGVudHJ5IHN0cnVjdHVyZSBmb3IgdGhlIG5ld2x5IGNyZWF0ZWQgZmlsZS4KKyAqCUBtb2RlIGNvbnRhaW5zIHRoZSBmaWxlIG1vZGUuCisgKiBAaW5vZGVfbGluazoKKyAqCUNoZWNrIHBlcm1pc3Npb24gYmVmb3JlIGNyZWF0aW5nIGEgbmV3IGhhcmQgbGluayB0byBhIGZpbGUuCisgKglAb2xkX2RlbnRyeSBjb250YWlucyB0aGUgZGVudHJ5IHN0cnVjdHVyZSBmb3IgYW4gZXhpc3RpbmcgbGluayB0byB0aGUgZmlsZS4KKyAqCUBkaXIgY29udGFpbnMgdGhlIGlub2RlIHN0cnVjdHVyZSBvZiB0aGUgcGFyZW50IGRpcmVjdG9yeSBvZiB0aGUgbmV3IGxpbmsuCisgKglAbmV3X2RlbnRyeSBjb250YWlucyB0aGUgZGVudHJ5IHN0cnVjdHVyZSBmb3IgdGhlIG5ldyBsaW5rLgorICoJUmV0dXJuIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLgorICogQGlub2RlX3Bvc3RfbGluazoKKyAqCVNldCBzZWN1cml0eSBhdHRyaWJ1dGVzIGZvciBhIG5ldyBoYXJkIGxpbmsgdG8gYSBmaWxlLgorICoJQG9sZF9kZW50cnkgY29udGFpbnMgdGhlIGRlbnRyeSBzdHJ1Y3R1cmUgZm9yIHRoZSBleGlzdGluZyBsaW5rLgorICoJQGRpciBjb250YWlucyB0aGUgaW5vZGUgc3RydWN0dXJlIG9mIHRoZSBwYXJlbnQgZGlyZWN0b3J5IG9mIHRoZSBuZXcgZmlsZS4KKyAqCUBuZXdfZGVudHJ5IGNvbnRhaW5zIHRoZSBkZW50cnkgc3RydWN0dXJlIGZvciB0aGUgbmV3IGZpbGUgbGluay4KKyAqIEBpbm9kZV91bmxpbms6CisgKglDaGVjayB0aGUgcGVybWlzc2lvbiB0byByZW1vdmUgYSBoYXJkIGxpbmsgdG8gYSBmaWxlLiAKKyAqCUBkaXIgY29udGFpbnMgdGhlIGlub2RlIHN0cnVjdHVyZSBvZiBwYXJlbnQgZGlyZWN0b3J5IG9mIHRoZSBmaWxlLgorICoJQGRlbnRyeSBjb250YWlucyB0aGUgZGVudHJ5IHN0cnVjdHVyZSBmb3IgZmlsZSB0byBiZSB1bmxpbmtlZC4KKyAqCVJldHVybiAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KKyAqIEBpbm9kZV9zeW1saW5rOgorICoJQ2hlY2sgdGhlIHBlcm1pc3Npb24gdG8gY3JlYXRlIGEgc3ltYm9saWMgbGluayB0byBhIGZpbGUuCisgKglAZGlyIGNvbnRhaW5zIHRoZSBpbm9kZSBzdHJ1Y3R1cmUgb2YgcGFyZW50IGRpcmVjdG9yeSBvZiB0aGUgc3ltYm9saWMgbGluay4KKyAqCUBkZW50cnkgY29udGFpbnMgdGhlIGRlbnRyeSBzdHJ1Y3R1cmUgb2YgdGhlIHN5bWJvbGljIGxpbmsuCisgKglAb2xkX25hbWUgY29udGFpbnMgdGhlIHBhdGhuYW1lIG9mIGZpbGUuCisgKglSZXR1cm4gMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuCisgKiBAaW5vZGVfcG9zdF9zeW1saW5rOgorICoJQGRpciBjb250YWlucyB0aGUgaW5vZGUgc3RydWN0dXJlIG9mIHRoZSBwYXJlbnQgZGlyZWN0b3J5IG9mIHRoZSBuZXcgbGluay4KKyAqCUBkZW50cnkgY29udGFpbnMgdGhlIGRlbnRyeSBzdHJ1Y3R1cmUgb2YgbmV3IHN5bWJvbGljIGxpbmsuCisgKglAb2xkX25hbWUgY29udGFpbnMgdGhlIHBhdGhuYW1lIG9mIGZpbGUuCisgKglTZXQgc2VjdXJpdHkgYXR0cmlidXRlcyBmb3IgYSBuZXdseSBjcmVhdGVkIHN5bWJvbGljIGxpbmsuICBOb3RlIHRoYXQKKyAqCUBkZW50cnktPmRfaW5vZGUgbWF5IGJlIE5VTEwsIHNpbmNlIHRoZSBmaWxlc3lzdGVtIG1pZ2h0IG5vdAorICoJaW5zdGFudGlhdGUgdGhlIGRlbnRyeSAoZS5nLiBORlMpLgorICogQGlub2RlX21rZGlyOgorICoJQ2hlY2sgcGVybWlzc2lvbnMgdG8gY3JlYXRlIGEgbmV3IGRpcmVjdG9yeSBpbiB0aGUgZXhpc3RpbmcgZGlyZWN0b3J5CisgKglhc3NvY2lhdGVkIHdpdGggaW5vZGUgc3RyY3R1cmUgQGRpci4gCisgKglAZGlyIGNvbnRhaW5zdCB0aGUgaW5vZGUgc3RydWN0dXJlIG9mIHBhcmVudCBvZiB0aGUgZGlyZWN0b3J5IHRvIGJlIGNyZWF0ZWQuCisgKglAZGVudHJ5IGNvbnRhaW5zIHRoZSBkZW50cnkgc3RydWN0dXJlIG9mIG5ldyBkaXJlY3RvcnkuCisgKglAbW9kZSBjb250YWlucyB0aGUgbW9kZSBvZiBuZXcgZGlyZWN0b3J5LgorICoJUmV0dXJuIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLgorICogQGlub2RlX3Bvc3RfbWtkaXI6CisgKglTZXQgc2VjdXJpdHkgYXR0cmlidXRlcyBvbiBhIG5ld2x5IGNyZWF0ZWQgZGlyZWN0b3J5LgorICoJQGRpciBjb250YWlucyB0aGUgaW5vZGUgc3RydWN0dXJlIG9mIHBhcmVudCBvZiB0aGUgZGlyZWN0b3J5IHRvIGJlIGNyZWF0ZWQuCisgKglAZGVudHJ5IGNvbnRhaW5zIHRoZSBkZW50cnkgc3RydWN0dXJlIG9mIG5ldyBkaXJlY3RvcnkuCisgKglAbW9kZSBjb250YWlucyB0aGUgbW9kZSBvZiBuZXcgZGlyZWN0b3J5LgorICogQGlub2RlX3JtZGlyOgorICoJQ2hlY2sgdGhlIHBlcm1pc3Npb24gdG8gcmVtb3ZlIGEgZGlyZWN0b3J5LgorICoJQGRpciBjb250YWlucyB0aGUgaW5vZGUgc3RydWN0dXJlIG9mIHBhcmVudCBvZiB0aGUgZGlyZWN0b3J5IHRvIGJlIHJlbW92ZWQuCisgKglAZGVudHJ5IGNvbnRhaW5zIHRoZSBkZW50cnkgc3RydWN0dXJlIG9mIGRpcmVjdG9yeSB0byBiZSByZW1vdmVkLgorICoJUmV0dXJuIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLgorICogQGlub2RlX21rbm9kOgorICoJQ2hlY2sgcGVybWlzc2lvbnMgd2hlbiBjcmVhdGluZyBhIHNwZWNpYWwgZmlsZSAob3IgYSBzb2NrZXQgb3IgYSBmaWZvCisgKglmaWxlIGNyZWF0ZWQgdmlhIHRoZSBta25vZCBzeXN0ZW0gY2FsbCkuICBOb3RlIHRoYXQgaWYgbWtub2Qgb3BlcmF0aW9uCisgKglpcyBiZWluZyBkb25lIGZvciBhIHJlZ3VsYXIgZmlsZSwgdGhlbiB0aGUgY3JlYXRlIGhvb2sgd2lsbCBiZSBjYWxsZWQKKyAqCWFuZCBub3QgdGhpcyBob29rLgorICoJQGRpciBjb250YWlucyB0aGUgaW5vZGUgc3RydWN0dXJlIG9mIHBhcmVudCBvZiB0aGUgbmV3IGZpbGUuCisgKglAZGVudHJ5IGNvbnRhaW5zIHRoZSBkZW50cnkgc3RydWN0dXJlIG9mIHRoZSBuZXcgZmlsZS4KKyAqCUBtb2RlIGNvbnRhaW5zIHRoZSBtb2RlIG9mIHRoZSBuZXcgZmlsZS4KKyAqCUBkZXYgY29udGFpbnMgdGhlIHRoZSBkZXZpY2UgbnVtYmVyLgorICoJUmV0dXJuIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLgorICogQGlub2RlX3Bvc3RfbWtub2Q6CisgKglTZXQgc2VjdXJpdHkgYXR0cmlidXRlcyBvbiBhIG5ld2x5IGNyZWF0ZWQgc3BlY2lhbCBmaWxlIChvciBzb2NrZXQgb3IKKyAqCWZpZm8gZmlsZSBjcmVhdGVkIHZpYSB0aGUgbWtub2Qgc3lzdGVtIGNhbGwpLgorICoJQGRpciBjb250YWlucyB0aGUgaW5vZGUgc3RydWN0dXJlIG9mIHBhcmVudCBvZiB0aGUgbmV3IG5vZGUuCisgKglAZGVudHJ5IGNvbnRhaW5zIHRoZSBkZW50cnkgc3RydWN0dXJlIG9mIHRoZSBuZXcgbm9kZS4KKyAqCUBtb2RlIGNvbnRhaW5zIHRoZSBtb2RlIG9mIHRoZSBuZXcgbm9kZS4KKyAqCUBkZXYgY29udGFpbnMgdGhlIHRoZSBkZXZpY2UgbnVtYmVyLgorICogQGlub2RlX3JlbmFtZToKKyAqCUNoZWNrIGZvciBwZXJtaXNzaW9uIHRvIHJlbmFtZSBhIGZpbGUgb3IgZGlyZWN0b3J5LgorICoJQG9sZF9kaXIgY29udGFpbnMgdGhlIGlub2RlIHN0cnVjdHVyZSBmb3IgcGFyZW50IG9mIHRoZSBvbGQgbGluay4KKyAqCUBvbGRfZGVudHJ5IGNvbnRhaW5zIHRoZSBkZW50cnkgc3RydWN0dXJlIG9mIHRoZSBvbGQgbGluay4KKyAqCUBuZXdfZGlyIGNvbnRhaW5zIHRoZSBpbm9kZSBzdHJ1Y3R1cmUgZm9yIHBhcmVudCBvZiB0aGUgbmV3IGxpbmsuCisgKglAbmV3X2RlbnRyeSBjb250YWlucyB0aGUgZGVudHJ5IHN0cnVjdHVyZSBvZiB0aGUgbmV3IGxpbmsuCisgKglSZXR1cm4gMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuCisgKiBAaW5vZGVfcG9zdF9yZW5hbWU6CisgKglTZXQgc2VjdXJpdHkgYXR0cmlidXRlcyBvbiBhIHJlbmFtZWQgZmlsZSBvciBkaXJlY3RvcnkuCisgKglAb2xkX2RpciBjb250YWlucyB0aGUgaW5vZGUgc3RydWN0dXJlIGZvciBwYXJlbnQgb2YgdGhlIG9sZCBsaW5rLgorICoJQG9sZF9kZW50cnkgY29udGFpbnMgdGhlIGRlbnRyeSBzdHJ1Y3R1cmUgb2YgdGhlIG9sZCBsaW5rLgorICoJQG5ld19kaXIgY29udGFpbnMgdGhlIGlub2RlIHN0cnVjdHVyZSBmb3IgcGFyZW50IG9mIHRoZSBuZXcgbGluay4KKyAqCUBuZXdfZGVudHJ5IGNvbnRhaW5zIHRoZSBkZW50cnkgc3RydWN0dXJlIG9mIHRoZSBuZXcgbGluay4KKyAqIEBpbm9kZV9yZWFkbGluazoKKyAqCUNoZWNrIHRoZSBwZXJtaXNzaW9uIHRvIHJlYWQgdGhlIHN5bWJvbGljIGxpbmsuCisgKglAZGVudHJ5IGNvbnRhaW5zIHRoZSBkZW50cnkgc3RydWN0dXJlIGZvciB0aGUgZmlsZSBsaW5rLgorICoJUmV0dXJuIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLgorICogQGlub2RlX2ZvbGxvd19saW5rOgorICoJQ2hlY2sgcGVybWlzc2lvbiB0byBmb2xsb3cgYSBzeW1ib2xpYyBsaW5rIHdoZW4gbG9va2luZyB1cCBhIHBhdGhuYW1lLgorICoJQGRlbnRyeSBjb250YWlucyB0aGUgZGVudHJ5IHN0cnVjdHVyZSBmb3IgdGhlIGxpbmsuCisgKglAbmQgY29udGFpbnMgdGhlIG5hbWVpZGF0YSBzdHJ1Y3R1cmUgZm9yIHRoZSBwYXJlbnQgZGlyZWN0b3J5LgorICoJUmV0dXJuIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLgorICogQGlub2RlX3Blcm1pc3Npb246CisgKglDaGVjayBwZXJtaXNzaW9uIGJlZm9yZSBhY2Nlc3NpbmcgYW4gaW5vZGUuICBUaGlzIGhvb2sgaXMgY2FsbGVkIGJ5IHRoZQorICoJZXhpc3RpbmcgTGludXggcGVybWlzc2lvbiBmdW5jdGlvbiwgc28gYSBzZWN1cml0eSBtb2R1bGUgY2FuIHVzZSBpdCB0bworICoJcHJvdmlkZSBhZGRpdGlvbmFsIGNoZWNraW5nIGZvciBleGlzdGluZyBMaW51eCBwZXJtaXNzaW9uIGNoZWNrcy4KKyAqCU5vdGljZSB0aGF0IHRoaXMgaG9vayBpcyBjYWxsZWQgd2hlbiBhIGZpbGUgaXMgb3BlbmVkIChhcyB3ZWxsIGFzIG1hbnkKKyAqCW90aGVyIG9wZXJhdGlvbnMpLCB3aGVyZWFzIHRoZSBmaWxlX3NlY3VyaXR5X29wcyBwZXJtaXNzaW9uIGhvb2sgaXMKKyAqCWNhbGxlZCB3aGVuIHRoZSBhY3R1YWwgcmVhZC93cml0ZSBvcGVyYXRpb25zIGFyZSBwZXJmb3JtZWQuCisgKglAaW5vZGUgY29udGFpbnMgdGhlIGlub2RlIHN0cnVjdHVyZSB0byBjaGVjay4KKyAqCUBtYXNrIGNvbnRhaW5zIHRoZSBwZXJtaXNzaW9uIG1hc2suCisgKiAgICAgQG5kIGNvbnRhaW5zIHRoZSBuYW1laWRhdGEgKG1heSBiZSBOVUxMKS4KKyAqCVJldHVybiAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KKyAqIEBpbm9kZV9zZXRhdHRyOgorICoJQ2hlY2sgcGVybWlzc2lvbiBiZWZvcmUgc2V0dGluZyBmaWxlIGF0dHJpYnV0ZXMuICBOb3RlIHRoYXQgdGhlIGtlcm5lbAorICoJY2FsbCB0byBub3RpZnlfY2hhbmdlIGlzIHBlcmZvcm1lZCBmcm9tIHNldmVyYWwgbG9jYXRpb25zLCB3aGVuZXZlcgorICoJZmlsZSBhdHRyaWJ1dGVzIGNoYW5nZSAoc3VjaCBhcyB3aGVuIGEgZmlsZSBpcyB0cnVuY2F0ZWQsIGNob3duL2NobW9kCisgKglvcGVyYXRpb25zLCB0cmFuc2ZlcnJpbmcgZGlzayBxdW90YXMsIGV0YykuCisgKglAZGVudHJ5IGNvbnRhaW5zIHRoZSBkZW50cnkgc3RydWN0dXJlIGZvciB0aGUgZmlsZS4KKyAqCUBhdHRyIGlzIHRoZSBpYXR0ciBzdHJ1Y3R1cmUgY29udGFpbmluZyB0aGUgbmV3IGZpbGUgYXR0cmlidXRlcy4KKyAqCVJldHVybiAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KKyAqIEBpbm9kZV9nZXRhdHRyOgorICoJQ2hlY2sgcGVybWlzc2lvbiBiZWZvcmUgb2J0YWluaW5nIGZpbGUgYXR0cmlidXRlcy4KKyAqCUBtbnQgaXMgdGhlIHZmc21vdW50IHdoZXJlIHRoZSBkZW50cnkgd2FzIGxvb2tlZCB1cAorICoJQGRlbnRyeSBjb250YWlucyB0aGUgZGVudHJ5IHN0cnVjdHVyZSBmb3IgdGhlIGZpbGUuCisgKglSZXR1cm4gMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuCisgKiBAaW5vZGVfZGVsZXRlOgorICoJQGlub2RlIGNvbnRhaW5zIHRoZSBpbm9kZSBzdHJ1Y3R1cmUgZm9yIGRlbGV0ZWQgaW5vZGUuCisgKglUaGlzIGhvb2sgaXMgY2FsbGVkIHdoZW4gYSBkZWxldGVkIGlub2RlIGlzIHJlbGVhc2VkIChpLmUuIGFuIGlub2RlCisgKgl3aXRoIG5vIGhhcmQgbGlua3MgaGFzIGl0cyB1c2UgY291bnQgZHJvcCB0byB6ZXJvKS4gIEEgc2VjdXJpdHkgbW9kdWxlCisgKgljYW4gdXNlIHRoaXMgaG9vayB0byByZWxlYXNlIGFueSBwZXJzaXN0ZW50IGxhYmVsIGFzc29jaWF0ZWQgd2l0aCB0aGUKKyAqCWlub2RlLgorICogQGlub2RlX3NldHhhdHRyOgorICogCUNoZWNrIHBlcm1pc3Npb24gYmVmb3JlIHNldHRpbmcgdGhlIGV4dGVuZGVkIGF0dHJpYnV0ZXMKKyAqIAlAdmFsdWUgaWRlbnRpZmllZCBieSBAbmFtZSBmb3IgQGRlbnRyeS4KKyAqIAlSZXR1cm4gMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuCisgKiBAaW5vZGVfcG9zdF9zZXR4YXR0cjoKKyAqIAlVcGRhdGUgaW5vZGUgc2VjdXJpdHkgZmllbGQgYWZ0ZXIgc3VjY2Vzc2Z1bCBzZXR4YXR0ciBvcGVyYXRpb24uCisgKiAJQHZhbHVlIGlkZW50aWZpZWQgYnkgQG5hbWUgZm9yIEBkZW50cnkuCisgKiBAaW5vZGVfZ2V0eGF0dHI6CisgKiAJQ2hlY2sgcGVybWlzc2lvbiBiZWZvcmUgb2J0YWluaW5nIHRoZSBleHRlbmRlZCBhdHRyaWJ1dGVzCisgKiAJaWRlbnRpZmllZCBieSBAbmFtZSBmb3IgQGRlbnRyeS4KKyAqIAlSZXR1cm4gMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuCisgKiBAaW5vZGVfbGlzdHhhdHRyOgorICogCUNoZWNrIHBlcm1pc3Npb24gYmVmb3JlIG9idGFpbmluZyB0aGUgbGlzdCBvZiBleHRlbmRlZCBhdHRyaWJ1dGUgCisgKiAJbmFtZXMgZm9yIEBkZW50cnkuCisgKiAJUmV0dXJuIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLgorICogQGlub2RlX3JlbW92ZXhhdHRyOgorICogCUNoZWNrIHBlcm1pc3Npb24gYmVmb3JlIHJlbW92aW5nIHRoZSBleHRlbmRlZCBhdHRyaWJ1dGUKKyAqIAlpZGVudGlmaWVkIGJ5IEBuYW1lIGZvciBAZGVudHJ5LgorICogCVJldHVybiAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KKyAqIEBpbm9kZV9nZXRzZWN1cml0eToKKyAqCUNvcHkgdGhlIGV4dGVuZGVkIGF0dHJpYnV0ZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc2VjdXJpdHkgbGFiZWwgCisgKglhc3NvY2lhdGVkIHdpdGggQG5hbWUgZm9yIEBpbm9kZSBpbnRvIEBidWZmZXIuICBAYnVmZmVyIG1heSBiZQorICoJTlVMTCB0byByZXF1ZXN0IHRoZSBzaXplIG9mIHRoZSBidWZmZXIgcmVxdWlyZWQuICBAc2l6ZSBpbmRpY2F0ZXMKKyAqCXRoZSBzaXplIG9mIEBidWZmZXIgaW4gYnl0ZXMuICBOb3RlIHRoYXQgQG5hbWUgaXMgdGhlIHJlbWFpbmRlcgorICoJb2YgdGhlIGF0dHJpYnV0ZSBuYW1lIGFmdGVyIHRoZSBzZWN1cml0eS4gcHJlZml4IGhhcyBiZWVuIHJlbW92ZWQuCisgKglSZXR1cm4gbnVtYmVyIG9mIGJ5dGVzIHVzZWQvcmVxdWlyZWQgb24gc3VjY2Vzcy4KKyAqIEBpbm9kZV9zZXRzZWN1cml0eToKKyAqCVNldCB0aGUgc2VjdXJpdHkgbGFiZWwgYXNzb2NpYXRlZCB3aXRoIEBuYW1lIGZvciBAaW5vZGUgZnJvbSB0aGUKKyAqCWV4dGVuZGVkIGF0dHJpYnV0ZSB2YWx1ZSBAdmFsdWUuICBAc2l6ZSBpbmRpY2F0ZXMgdGhlIHNpemUgb2YgdGhlCisgKglAdmFsdWUgaW4gYnl0ZXMuICBAZmxhZ3MgbWF5IGJlIFhBVFRSX0NSRUFURSwgWEFUVFJfUkVQTEFDRSwgb3IgMC4KKyAqCU5vdGUgdGhhdCBAbmFtZSBpcyB0aGUgcmVtYWluZGVyIG9mIHRoZSBhdHRyaWJ1dGUgbmFtZSBhZnRlciB0aGUgCisgKglzZWN1cml0eS4gcHJlZml4IGhhcyBiZWVuIHJlbW92ZWQuCisgKglSZXR1cm4gMCBvbiBzdWNjZXNzLgorICogQGlub2RlX2xpc3RzZWN1cml0eToKKyAqCUNvcHkgdGhlIGV4dGVuZGVkIGF0dHJpYnV0ZSBuYW1lcyBmb3IgdGhlIHNlY3VyaXR5IGxhYmVscworICoJYXNzb2NpYXRlZCB3aXRoIEBpbm9kZSBpbnRvIEBidWZmZXIuICBUaGUgbWF4aW11bSBzaXplIG9mIEBidWZmZXIKKyAqCWlzIHNwZWNpZmllZCBieSBAYnVmZmVyX3NpemUuICBAYnVmZmVyIG1heSBiZSBOVUxMIHRvIHJlcXVlc3QKKyAqCXRoZSBzaXplIG9mIHRoZSBidWZmZXIgcmVxdWlyZWQuCisgKglSZXR1cm5zIG51bWJlciBvZiBieXRlcyB1c2VkL3JlcXVpcmVkIG9uIHN1Y2Nlc3MuCisgKgorICogU2VjdXJpdHkgaG9va3MgZm9yIGZpbGUgb3BlcmF0aW9ucworICoKKyAqIEBmaWxlX3Blcm1pc3Npb246CisgKglDaGVjayBmaWxlIHBlcm1pc3Npb25zIGJlZm9yZSBhY2Nlc3NpbmcgYW4gb3BlbiBmaWxlLiAgVGhpcyBob29rIGlzCisgKgljYWxsZWQgYnkgdmFyaW91cyBvcGVyYXRpb25zIHRoYXQgcmVhZCBvciB3cml0ZSBmaWxlcy4gIEEgc2VjdXJpdHkKKyAqCW1vZHVsZSBjYW4gdXNlIHRoaXMgaG9vayB0byBwZXJmb3JtIGFkZGl0aW9uYWwgY2hlY2tpbmcgb24gdGhlc2UKKyAqCW9wZXJhdGlvbnMsIGUuZy4gIHRvIHJldmFsaWRhdGUgcGVybWlzc2lvbnMgb24gdXNlIHRvIHN1cHBvcnQgcHJpdmlsZWdlCisgKglicmFja2V0aW5nIG9yIHBvbGljeSBjaGFuZ2VzLiAgTm90aWNlIHRoYXQgdGhpcyBob29rIGlzIHVzZWQgd2hlbiB0aGUKKyAqCWFjdHVhbCByZWFkL3dyaXRlIG9wZXJhdGlvbnMgYXJlIHBlcmZvcm1lZCwgd2hlcmVhcyB0aGUKKyAqCWlub2RlX3NlY3VyaXR5X29wcyBob29rIGlzIGNhbGxlZCB3aGVuIGEgZmlsZSBpcyBvcGVuZWQgKGFzIHdlbGwgYXMKKyAqCW1hbnkgb3RoZXIgb3BlcmF0aW9ucykuCisgKglDYXZlYXQ6ICBBbHRob3VnaCB0aGlzIGhvb2sgY2FuIGJlIHVzZWQgdG8gcmV2YWxpZGF0ZSBwZXJtaXNzaW9ucyBmb3IKKyAqCXZhcmlvdXMgc3lzdGVtIGNhbGwgb3BlcmF0aW9ucyB0aGF0IHJlYWQgb3Igd3JpdGUgZmlsZXMsIGl0IGRvZXMgbm90CisgKglhZGRyZXNzIHRoZSByZXZhbGlkYXRpb24gb2YgcGVybWlzc2lvbnMgZm9yIG1lbW9yeS1tYXBwZWQgZmlsZXMuCisgKglTZWN1cml0eSBtb2R1bGVzIG11c3QgaGFuZGxlIHRoaXMgc2VwYXJhdGVseSBpZiB0aGV5IG5lZWQgc3VjaAorICoJcmV2YWxpZGF0aW9uLgorICoJQGZpbGUgY29udGFpbnMgdGhlIGZpbGUgc3RydWN0dXJlIGJlaW5nIGFjY2Vzc2VkLgorICoJQG1hc2sgY29udGFpbnMgdGhlIHJlcXVlc3RlZCBwZXJtaXNzaW9ucy4KKyAqCVJldHVybiAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KKyAqIEBmaWxlX2FsbG9jX3NlY3VyaXR5OgorICoJQWxsb2NhdGUgYW5kIGF0dGFjaCBhIHNlY3VyaXR5IHN0cnVjdHVyZSB0byB0aGUgZmlsZS0+Zl9zZWN1cml0eSBmaWVsZC4KKyAqCVRoZSBzZWN1cml0eSBmaWVsZCBpcyBpbml0aWFsaXplZCB0byBOVUxMIHdoZW4gdGhlIHN0cnVjdHVyZSBpcyBmaXJzdAorICoJY3JlYXRlZC4KKyAqCUBmaWxlIGNvbnRhaW5zIHRoZSBmaWxlIHN0cnVjdHVyZSB0byBzZWN1cmUuCisgKglSZXR1cm4gMCBpZiB0aGUgaG9vayBpcyBzdWNjZXNzZnVsIGFuZCBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuCisgKiBAZmlsZV9mcmVlX3NlY3VyaXR5OgorICoJRGVhbGxvY2F0ZSBhbmQgZnJlZSBhbnkgc2VjdXJpdHkgc3RydWN0dXJlcyBzdG9yZWQgaW4gZmlsZS0+Zl9zZWN1cml0eS4KKyAqCUBmaWxlIGNvbnRhaW5zIHRoZSBmaWxlIHN0cnVjdHVyZSBiZWluZyBtb2RpZmllZC4KKyAqIEBmaWxlX2lvY3RsOgorICoJQGZpbGUgY29udGFpbnMgdGhlIGZpbGUgc3RydWN0dXJlLgorICoJQGNtZCBjb250YWlucyB0aGUgb3BlcmF0aW9uIHRvIHBlcmZvcm0uCisgKglAYXJnIGNvbnRhaW5zIHRoZSBvcGVyYXRpb25hbCBhcmd1bWVudHMuCisgKglDaGVjayBwZXJtaXNzaW9uIGZvciBhbiBpb2N0bCBvcGVyYXRpb24gb24gQGZpbGUuICBOb3RlIHRoYXQgQGFyZyBjYW4KKyAqCXNvbWV0aW1lcyByZXByZXNlbnRzIGEgdXNlciBzcGFjZSBwb2ludGVyOyBpbiBvdGhlciBjYXNlcywgaXQgbWF5IGJlIGEKKyAqCXNpbXBsZSBpbnRlZ2VyIHZhbHVlLiAgV2hlbiBAYXJnIHJlcHJlc2VudHMgYSB1c2VyIHNwYWNlIHBvaW50ZXIsIGl0CisgKglzaG91bGQgbmV2ZXIgYmUgdXNlZCBieSB0aGUgc2VjdXJpdHkgbW9kdWxlLgorICoJUmV0dXJuIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLgorICogQGZpbGVfbW1hcCA6CisgKglDaGVjayBwZXJtaXNzaW9ucyBmb3IgYSBtbWFwIG9wZXJhdGlvbi4gIFRoZSBAZmlsZSBtYXkgYmUgTlVMTCwgZS5nLgorICoJaWYgbWFwcGluZyBhbm9ueW1vdXMgbWVtb3J5LgorICoJQGZpbGUgY29udGFpbnMgdGhlIGZpbGUgc3RydWN0dXJlIGZvciBmaWxlIHRvIG1hcCAobWF5IGJlIE5VTEwpLgorICoJQHJlcXByb3QgY29udGFpbnMgdGhlIHByb3RlY3Rpb24gcmVxdWVzdGVkIGJ5IHRoZSBhcHBsaWNhdGlvbi4KKyAqCUBwcm90IGNvbnRhaW5zIHRoZSBwcm90ZWN0aW9uIHRoYXQgd2lsbCBiZSBhcHBsaWVkIGJ5IHRoZSBrZXJuZWwuCisgKglAZmxhZ3MgY29udGFpbnMgdGhlIG9wZXJhdGlvbmFsIGZsYWdzLgorICoJUmV0dXJuIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLgorICogQGZpbGVfbXByb3RlY3Q6CisgKglDaGVjayBwZXJtaXNzaW9ucyBiZWZvcmUgY2hhbmdpbmcgbWVtb3J5IGFjY2VzcyBwZXJtaXNzaW9ucy4KKyAqCUB2bWEgY29udGFpbnMgdGhlIG1lbW9yeSByZWdpb24gdG8gbW9kaWZ5LgorICoJQHJlcXByb3QgY29udGFpbnMgdGhlIHByb3RlY3Rpb24gcmVxdWVzdGVkIGJ5IHRoZSBhcHBsaWNhdGlvbi4KKyAqCUBwcm90IGNvbnRhaW5zIHRoZSBwcm90ZWN0aW9uIHRoYXQgd2lsbCBiZSBhcHBsaWVkIGJ5IHRoZSBrZXJuZWwuCisgKglSZXR1cm4gMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuCisgKiBAZmlsZV9sb2NrOgorICoJQ2hlY2sgcGVybWlzc2lvbiBiZWZvcmUgcGVyZm9ybWluZyBmaWxlIGxvY2tpbmcgb3BlcmF0aW9ucy4KKyAqCU5vdGU6IHRoaXMgaG9vayBtZWRpYXRlcyBib3RoIGZsb2NrIGFuZCBmY250bCBzdHlsZSBsb2Nrcy4KKyAqCUBmaWxlIGNvbnRhaW5zIHRoZSBmaWxlIHN0cnVjdHVyZS4KKyAqCUBjbWQgY29udGFpbnMgdGhlIHBvc2l4LXRyYW5zbGF0ZWQgbG9jayBvcGVyYXRpb24gdG8gcGVyZm9ybQorICoJKGUuZy4gRl9SRExDSywgRl9XUkxDSykuCisgKglSZXR1cm4gMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuCisgKiBAZmlsZV9mY250bDoKKyAqCUNoZWNrIHBlcm1pc3Npb24gYmVmb3JlIGFsbG93aW5nIHRoZSBmaWxlIG9wZXJhdGlvbiBzcGVjaWZpZWQgYnkgQGNtZAorICoJZnJvbSBiZWluZyBwZXJmb3JtZWQgb24gdGhlIGZpbGUgQGZpbGUuICBOb3RlIHRoYXQgQGFyZyBjYW4gc29tZXRpbWVzCisgKglyZXByZXNlbnRzIGEgdXNlciBzcGFjZSBwb2ludGVyOyBpbiBvdGhlciBjYXNlcywgaXQgbWF5IGJlIGEgc2ltcGxlCisgKglpbnRlZ2VyIHZhbHVlLiAgV2hlbiBAYXJnIHJlcHJlc2VudHMgYSB1c2VyIHNwYWNlIHBvaW50ZXIsIGl0IHNob3VsZAorICoJbmV2ZXIgYmUgdXNlZCBieSB0aGUgc2VjdXJpdHkgbW9kdWxlLgorICoJQGZpbGUgY29udGFpbnMgdGhlIGZpbGUgc3RydWN0dXJlLgorICoJQGNtZCBjb250YWlucyB0aGUgb3BlcmF0aW9uIHRvIGJlIHBlcmZvcm1lZC4KKyAqCUBhcmcgY29udGFpbnMgdGhlIG9wZXJhdGlvbmFsIGFyZ3VtZW50cy4KKyAqCVJldHVybiAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KKyAqIEBmaWxlX3NldF9mb3duZXI6CisgKglTYXZlIG93bmVyIHNlY3VyaXR5IGluZm9ybWF0aW9uICh0eXBpY2FsbHkgZnJvbSBjdXJyZW50LT5zZWN1cml0eSkgaW4KKyAqCWZpbGUtPmZfc2VjdXJpdHkgZm9yIGxhdGVyIHVzZSBieSB0aGUgc2VuZF9zaWdpb3Rhc2sgaG9vay4KKyAqCUBmaWxlIGNvbnRhaW5zIHRoZSBmaWxlIHN0cnVjdHVyZSB0byB1cGRhdGUuCisgKglSZXR1cm4gMCBvbiBzdWNjZXNzLgorICogQGZpbGVfc2VuZF9zaWdpb3Rhc2s6CisgKglDaGVjayBwZXJtaXNzaW9uIGZvciB0aGUgZmlsZSBvd25lciBAZm93biB0byBzZW5kIFNJR0lPIG9yIFNJR1VSRyB0byB0aGUKKyAqCXByb2Nlc3MgQHRzay4gIE5vdGUgdGhhdCB0aGlzIGhvb2sgaXMgc29tZXRpbWVzIGNhbGxlZCBmcm9tIGludGVycnVwdC4KKyAqCU5vdGUgdGhhdCB0aGUgZm93bl9zdHJ1Y3QsIEBmb3duLCBpcyBuZXZlciBvdXRzaWRlIHRoZSBjb250ZXh0IG9mIGEKKyAqCXN0cnVjdCBmaWxlLCBzbyB0aGUgZmlsZSBzdHJ1Y3R1cmUgKGFuZCBhc3NvY2lhdGVkIHNlY3VyaXR5IGluZm9ybWF0aW9uKQorICoJY2FuIGFsd2F5cyBiZSBvYnRhaW5lZDoKKyAqCQkoc3RydWN0IGZpbGUgKikoKGxvbmcpZm93biAtIG9mZnNldG9mKHN0cnVjdCBmaWxlLGZfb3duZXIpKTsKKyAqIAlAdHNrIGNvbnRhaW5zIHRoZSBzdHJ1Y3R1cmUgb2YgdGFzayByZWNlaXZpbmcgc2lnbmFsLgorICoJQGZvd24gY29udGFpbnMgdGhlIGZpbGUgb3duZXIgaW5mb3JtYXRpb24uCisgKglAc2lnIGlzIHRoZSBzaWduYWwgdGhhdCB3aWxsIGJlIHNlbnQuICBXaGVuIDAsIGtlcm5lbCBzZW5kcyBTSUdJTy4KKyAqCVJldHVybiAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KKyAqIEBmaWxlX3JlY2VpdmU6CisgKglUaGlzIGhvb2sgYWxsb3dzIHNlY3VyaXR5IG1vZHVsZXMgdG8gY29udHJvbCB0aGUgYWJpbGl0eSBvZiBhIHByb2Nlc3MKKyAqCXRvIHJlY2VpdmUgYW4gb3BlbiBmaWxlIGRlc2NyaXB0b3IgdmlhIHNvY2tldCBJUEMuCisgKglAZmlsZSBjb250YWlucyB0aGUgZmlsZSBzdHJ1Y3R1cmUgYmVpbmcgcmVjZWl2ZWQuCisgKglSZXR1cm4gMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuCisgKgorICogU2VjdXJpdHkgaG9va3MgZm9yIHRhc2sgb3BlcmF0aW9ucy4KKyAqCisgKiBAdGFza19jcmVhdGU6CisgKglDaGVjayBwZXJtaXNzaW9uIGJlZm9yZSBjcmVhdGluZyBhIGNoaWxkIHByb2Nlc3MuICBTZWUgdGhlIGNsb25lKDIpCisgKgltYW51YWwgcGFnZSBmb3IgZGVmaW5pdGlvbnMgb2YgdGhlIEBjbG9uZV9mbGFncy4KKyAqCUBjbG9uZV9mbGFncyBjb250YWlucyB0aGUgZmxhZ3MgaW5kaWNhdGluZyB3aGF0IHNob3VsZCBiZSBzaGFyZWQuCisgKglSZXR1cm4gMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuCisgKiBAdGFza19hbGxvY19zZWN1cml0eToKKyAqCUBwIGNvbnRhaW5zIHRoZSB0YXNrX3N0cnVjdCBmb3IgY2hpbGQgcHJvY2Vzcy4KKyAqCUFsbG9jYXRlIGFuZCBhdHRhY2ggYSBzZWN1cml0eSBzdHJ1Y3R1cmUgdG8gdGhlIHAtPnNlY3VyaXR5IGZpZWxkLiBUaGUKKyAqCXNlY3VyaXR5IGZpZWxkIGlzIGluaXRpYWxpemVkIHRvIE5VTEwgd2hlbiB0aGUgdGFzayBzdHJ1Y3R1cmUgaXMKKyAqCWFsbG9jYXRlZC4KKyAqCVJldHVybiAwIGlmIG9wZXJhdGlvbiB3YXMgc3VjY2Vzc2Z1bC4KKyAqIEB0YXNrX2ZyZWVfc2VjdXJpdHk6CisgKglAcCBjb250YWlucyB0aGUgdGFza19zdHJ1Y3QgZm9yIHByb2Nlc3MuCisgKglEZWFsbG9jYXRlIGFuZCBjbGVhciB0aGUgcC0+c2VjdXJpdHkgZmllbGQuCisgKiBAdGFza19zZXR1aWQ6CisgKglDaGVjayBwZXJtaXNzaW9uIGJlZm9yZSBzZXR0aW5nIG9uZSBvciBtb3JlIG9mIHRoZSB1c2VyIGlkZW50aXR5CisgKglhdHRyaWJ1dGVzIG9mIHRoZSBjdXJyZW50IHByb2Nlc3MuICBUaGUgQGZsYWdzIHBhcmFtZXRlciBpbmRpY2F0ZXMKKyAqCXdoaWNoIG9mIHRoZSBzZXQqdWlkIHN5c3RlbSBjYWxscyBpbnZva2VkIHRoaXMgaG9vayBhbmQgaG93IHRvCisgKglpbnRlcnByZXQgdGhlIEBpZDAsIEBpZDEsIGFuZCBAaWQyIHBhcmFtZXRlcnMuICBTZWUgdGhlIExTTV9TRVRJRAorICoJZGVmaW5pdGlvbnMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGlzIGZpbGUgZm9yIHRoZSBAZmxhZ3MgdmFsdWVzIGFuZAorICoJdGhlaXIgbWVhbmluZ3MuCisgKglAaWQwIGNvbnRhaW5zIGEgdWlkLgorICoJQGlkMSBjb250YWlucyBhIHVpZC4KKyAqCUBpZDIgY29udGFpbnMgYSB1aWQuCisgKglAZmxhZ3MgY29udGFpbnMgb25lIG9mIHRoZSBMU01fU0VUSURfKiB2YWx1ZXMuCisgKglSZXR1cm4gMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuCisgKiBAdGFza19wb3N0X3NldHVpZDoKKyAqCVVwZGF0ZSB0aGUgbW9kdWxlJ3Mgc3RhdGUgYWZ0ZXIgc2V0dGluZyBvbmUgb3IgbW9yZSBvZiB0aGUgdXNlcgorICoJaWRlbnRpdHkgYXR0cmlidXRlcyBvZiB0aGUgY3VycmVudCBwcm9jZXNzLiAgVGhlIEBmbGFncyBwYXJhbWV0ZXIKKyAqCWluZGljYXRlcyB3aGljaCBvZiB0aGUgc2V0KnVpZCBzeXN0ZW0gY2FsbHMgaW52b2tlZCB0aGlzIGhvb2suICBJZgorICoJQGZsYWdzIGlzIExTTV9TRVRJRF9GUywgdGhlbiBAb2xkX3J1aWQgaXMgdGhlIG9sZCBmcyB1aWQgYW5kIHRoZSBvdGhlcgorICoJcGFyYW1ldGVycyBhcmUgbm90IHVzZWQuCisgKglAb2xkX3J1aWQgY29udGFpbnMgdGhlIG9sZCByZWFsIHVpZCAob3IgZnMgdWlkIGlmIExTTV9TRVRJRF9GUykuCisgKglAb2xkX2V1aWQgY29udGFpbnMgdGhlIG9sZCBlZmZlY3RpdmUgdWlkIChvciAtMSBpZiBMU01fU0VUSURfRlMpLgorICoJQG9sZF9zdWlkIGNvbnRhaW5zIHRoZSBvbGQgc2F2ZWQgdWlkIChvciAtMSBpZiBMU01fU0VUSURfRlMpLgorICoJQGZsYWdzIGNvbnRhaW5zIG9uZSBvZiB0aGUgTFNNX1NFVElEXyogdmFsdWVzLgorICoJUmV0dXJuIDAgb24gc3VjY2Vzcy4KKyAqIEB0YXNrX3NldGdpZDoKKyAqCUNoZWNrIHBlcm1pc3Npb24gYmVmb3JlIHNldHRpbmcgb25lIG9yIG1vcmUgb2YgdGhlIGdyb3VwIGlkZW50aXR5CisgKglhdHRyaWJ1dGVzIG9mIHRoZSBjdXJyZW50IHByb2Nlc3MuICBUaGUgQGZsYWdzIHBhcmFtZXRlciBpbmRpY2F0ZXMKKyAqCXdoaWNoIG9mIHRoZSBzZXQqZ2lkIHN5c3RlbSBjYWxscyBpbnZva2VkIHRoaXMgaG9vayBhbmQgaG93IHRvCisgKglpbnRlcnByZXQgdGhlIEBpZDAsIEBpZDEsIGFuZCBAaWQyIHBhcmFtZXRlcnMuICBTZWUgdGhlIExTTV9TRVRJRAorICoJZGVmaW5pdGlvbnMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGlzIGZpbGUgZm9yIHRoZSBAZmxhZ3MgdmFsdWVzIGFuZAorICoJdGhlaXIgbWVhbmluZ3MuCisgKglAaWQwIGNvbnRhaW5zIGEgZ2lkLgorICoJQGlkMSBjb250YWlucyBhIGdpZC4KKyAqCUBpZDIgY29udGFpbnMgYSBnaWQuCisgKglAZmxhZ3MgY29udGFpbnMgb25lIG9mIHRoZSBMU01fU0VUSURfKiB2YWx1ZXMuCisgKglSZXR1cm4gMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuCisgKiBAdGFza19zZXRwZ2lkOgorICoJQ2hlY2sgcGVybWlzc2lvbiBiZWZvcmUgc2V0dGluZyB0aGUgcHJvY2VzcyBncm91cCBpZGVudGlmaWVyIG9mIHRoZQorICoJcHJvY2VzcyBAcCB0byBAcGdpZC4KKyAqCUBwIGNvbnRhaW5zIHRoZSB0YXNrX3N0cnVjdCBmb3IgcHJvY2VzcyBiZWluZyBtb2RpZmllZC4KKyAqCUBwZ2lkIGNvbnRhaW5zIHRoZSBuZXcgcGdpZC4KKyAqCVJldHVybiAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KKyAqIEB0YXNrX2dldHBnaWQ6CisgKglDaGVjayBwZXJtaXNzaW9uIGJlZm9yZSBnZXR0aW5nIHRoZSBwcm9jZXNzIGdyb3VwIGlkZW50aWZpZXIgb2YgdGhlCisgKglwcm9jZXNzIEBwLgorICoJQHAgY29udGFpbnMgdGhlIHRhc2tfc3RydWN0IGZvciB0aGUgcHJvY2Vzcy4KKyAqCVJldHVybiAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KKyAqIEB0YXNrX2dldHNpZDoKKyAqCUNoZWNrIHBlcm1pc3Npb24gYmVmb3JlIGdldHRpbmcgdGhlIHNlc3Npb24gaWRlbnRpZmllciBvZiB0aGUgcHJvY2VzcworICoJQHAuCisgKglAcCBjb250YWlucyB0aGUgdGFza19zdHJ1Y3QgZm9yIHRoZSBwcm9jZXNzLgorICoJUmV0dXJuIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLgorICogQHRhc2tfc2V0Z3JvdXBzOgorICoJQ2hlY2sgcGVybWlzc2lvbiBiZWZvcmUgc2V0dGluZyB0aGUgc3VwcGxlbWVudGFyeSBncm91cCBzZXQgb2YgdGhlCisgKgljdXJyZW50IHByb2Nlc3MuCisgKglAZ3JvdXBfaW5mbyBjb250YWlucyB0aGUgbmV3IGdyb3VwIGluZm9ybWF0aW9uLgorICoJUmV0dXJuIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLgorICogQHRhc2tfc2V0bmljZToKKyAqCUNoZWNrIHBlcm1pc3Npb24gYmVmb3JlIHNldHRpbmcgdGhlIG5pY2UgdmFsdWUgb2YgQHAgdG8gQG5pY2UuCisgKglAcCBjb250YWlucyB0aGUgdGFza19zdHJ1Y3Qgb2YgcHJvY2Vzcy4KKyAqCUBuaWNlIGNvbnRhaW5zIHRoZSBuZXcgbmljZSB2YWx1ZS4KKyAqCVJldHVybiAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KKyAqIEB0YXNrX3NldHJsaW1pdDoKKyAqCUNoZWNrIHBlcm1pc3Npb24gYmVmb3JlIHNldHRpbmcgdGhlIHJlc291cmNlIGxpbWl0cyBvZiB0aGUgY3VycmVudAorICoJcHJvY2VzcyBmb3IgQHJlc291cmNlIHRvIEBuZXdfcmxpbS4gIFRoZSBvbGQgcmVzb3VyY2UgbGltaXQgdmFsdWVzIGNhbgorICoJYmUgZXhhbWluZWQgYnkgZGVyZWZlcmVuY2luZyAoY3VycmVudC0+c2lnbmFsLT5ybGltICsgcmVzb3VyY2UpLgorICoJQHJlc291cmNlIGNvbnRhaW5zIHRoZSByZXNvdXJjZSB3aG9zZSBsaW1pdCBpcyBiZWluZyBzZXQuCisgKglAbmV3X3JsaW0gY29udGFpbnMgdGhlIG5ldyBsaW1pdHMgZm9yIEByZXNvdXJjZS4KKyAqCVJldHVybiAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KKyAqIEB0YXNrX3NldHNjaGVkdWxlcjoKKyAqCUNoZWNrIHBlcm1pc3Npb24gYmVmb3JlIHNldHRpbmcgc2NoZWR1bGluZyBwb2xpY3kgYW5kL29yIHBhcmFtZXRlcnMgb2YKKyAqCXByb2Nlc3MgQHAgYmFzZWQgb24gQHBvbGljeSBhbmQgQGxwLgorICoJQHAgY29udGFpbnMgdGhlIHRhc2tfc3RydWN0IGZvciBwcm9jZXNzLgorICoJQHBvbGljeSBjb250YWlucyB0aGUgc2NoZWR1bGluZyBwb2xpY3kuCisgKglAbHAgY29udGFpbnMgdGhlIHNjaGVkdWxpbmcgcGFyYW1ldGVycy4KKyAqCVJldHVybiAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KKyAqIEB0YXNrX2dldHNjaGVkdWxlcjoKKyAqCUNoZWNrIHBlcm1pc3Npb24gYmVmb3JlIG9idGFpbmluZyBzY2hlZHVsaW5nIGluZm9ybWF0aW9uIGZvciBwcm9jZXNzCisgKglAcC4KKyAqCUBwIGNvbnRhaW5zIHRoZSB0YXNrX3N0cnVjdCBmb3IgcHJvY2Vzcy4KKyAqCVJldHVybiAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KKyAqIEB0YXNrX2tpbGw6CisgKglDaGVjayBwZXJtaXNzaW9uIGJlZm9yZSBzZW5kaW5nIHNpZ25hbCBAc2lnIHRvIEBwLiAgQGluZm8gY2FuIGJlIE5VTEwsCisgKgl0aGUgY29uc3RhbnQgMSwgb3IgYSBwb2ludGVyIHRvIGEgc2lnaW5mbyBzdHJ1Y3R1cmUuICBJZiBAaW5mbyBpcyAxIG9yCisgKglTSV9GUk9NS0VSTkVMKGluZm8pIGlzIHRydWUsIHRoZW4gdGhlIHNpZ25hbCBzaG91bGQgYmUgdmlld2VkIGFzIGNvbWluZworICoJZnJvbSB0aGUga2VybmVsIGFuZCBzaG91bGQgdHlwaWNhbGx5IGJlIHBlcm1pdHRlZC4KKyAqCVNJR0lPIHNpZ25hbHMgYXJlIGhhbmRsZWQgc2VwYXJhdGVseSBieSB0aGUgc2VuZF9zaWdpb3Rhc2sgaG9vayBpbgorICoJZmlsZV9zZWN1cml0eV9vcHMuCisgKglAcCBjb250YWlucyB0aGUgdGFza19zdHJ1Y3QgZm9yIHByb2Nlc3MuCisgKglAaW5mbyBjb250YWlucyB0aGUgc2lnbmFsIGluZm9ybWF0aW9uLgorICoJQHNpZyBjb250YWlucyB0aGUgc2lnbmFsIHZhbHVlLgorICoJUmV0dXJuIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLgorICogQHRhc2tfd2FpdDoKKyAqCUNoZWNrIHBlcm1pc3Npb24gYmVmb3JlIGFsbG93aW5nIGEgcHJvY2VzcyB0byByZWFwIGEgY2hpbGQgcHJvY2VzcyBAcAorICoJYW5kIGNvbGxlY3QgaXRzIHN0YXR1cyBpbmZvcm1hdGlvbi4KKyAqCUBwIGNvbnRhaW5zIHRoZSB0YXNrX3N0cnVjdCBmb3IgcHJvY2Vzcy4KKyAqCVJldHVybiAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KKyAqIEB0YXNrX3ByY3RsOgorICoJQ2hlY2sgcGVybWlzc2lvbiBiZWZvcmUgcGVyZm9ybWluZyBhIHByb2Nlc3MgY29udHJvbCBvcGVyYXRpb24gb24gdGhlCisgKgljdXJyZW50IHByb2Nlc3MuCisgKglAb3B0aW9uIGNvbnRhaW5zIHRoZSBvcGVyYXRpb24uCisgKglAYXJnMiBjb250YWlucyBhIGFyZ3VtZW50LgorICoJQGFyZzMgY29udGFpbnMgYSBhcmd1bWVudC4KKyAqCUBhcmc0IGNvbnRhaW5zIGEgYXJndW1lbnQuCisgKglAYXJnNSBjb250YWlucyBhIGFyZ3VtZW50LgorICoJUmV0dXJuIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLgorICogQHRhc2tfcmVwYXJlbnRfdG9faW5pdDoKKyAqIAlTZXQgdGhlIHNlY3VyaXR5IGF0dHJpYnV0ZXMgaW4gQHAtPnNlY3VyaXR5IGZvciBhIGtlcm5lbCB0aHJlYWQgdGhhdAorICogCWlzIGJlaW5nIHJlcGFyZW50ZWQgdG8gdGhlIGluaXQgdGFzay4KKyAqCUBwIGNvbnRhaW5zIHRoZSB0YXNrX3N0cnVjdCBmb3IgdGhlIGtlcm5lbCB0aHJlYWQuCisgKiBAdGFza190b19pbm9kZToKKyAqIAlTZXQgdGhlIHNlY3VyaXR5IGF0dHJpYnV0ZXMgZm9yIGFuIGlub2RlIGJhc2VkIG9uIGFuIGFzc29jaWF0ZWQgdGFzaydzCisgKiAJc2VjdXJpdHkgYXR0cmlidXRlcywgZS5nLiBmb3IgL3Byb2MvcGlkIGlub2Rlcy4KKyAqCUBwIGNvbnRhaW5zIHRoZSB0YXNrX3N0cnVjdCBmb3IgdGhlIHRhc2suCisgKglAaW5vZGUgY29udGFpbnMgdGhlIGlub2RlIHN0cnVjdHVyZSBmb3IgdGhlIGlub2RlLgorICoKKyAqIFNlY3VyaXR5IGhvb2tzIGZvciBOZXRsaW5rIG1lc3NhZ2luZy4KKyAqCisgKiBAbmV0bGlua19zZW5kOgorICoJU2F2ZSBzZWN1cml0eSBpbmZvcm1hdGlvbiBmb3IgYSBuZXRsaW5rIG1lc3NhZ2Ugc28gdGhhdCBwZXJtaXNzaW9uCisgKgljaGVja2luZyBjYW4gYmUgcGVyZm9ybWVkIHdoZW4gdGhlIG1lc3NhZ2UgaXMgcHJvY2Vzc2VkLiAgVGhlIHNlY3VyaXR5CisgKglpbmZvcm1hdGlvbiBjYW4gYmUgc2F2ZWQgdXNpbmcgdGhlIGVmZl9jYXAgZmllbGQgb2YgdGhlCisgKiAgICAgIG5ldGxpbmtfc2tiX3Bhcm1zIHN0cnVjdHVyZS4gIEFsc28gbWF5IGJlIHVzZWQgdG8gcHJvdmlkZSBmaW5lCisgKglncmFpbmVkIGNvbnRyb2wgb3ZlciBtZXNzYWdlIHRyYW5zbWlzc2lvbi4KKyAqCUBzayBhc3NvY2lhdGVkIHNvY2sgb2YgdGFzayBzZW5kaW5nIHRoZSBtZXNzYWdlLiwKKyAqCUBza2IgY29udGFpbnMgdGhlIHNrX2J1ZmYgc3RydWN0dXJlIGZvciB0aGUgbmV0bGluayBtZXNzYWdlLgorICoJUmV0dXJuIDAgaWYgdGhlIGluZm9ybWF0aW9uIHdhcyBzdWNjZXNzZnVsbHkgc2F2ZWQgYW5kIG1lc3NhZ2UKKyAqCWlzIGFsbG93ZWQgdG8gYmUgdHJhbnNtaXR0ZWQuCisgKiBAbmV0bGlua19yZWN2OgorICoJQ2hlY2sgcGVybWlzc2lvbiBiZWZvcmUgcHJvY2Vzc2luZyB0aGUgcmVjZWl2ZWQgbmV0bGluayBtZXNzYWdlIGluCisgKglAc2tiLgorICoJQHNrYiBjb250YWlucyB0aGUgc2tfYnVmZiBzdHJ1Y3R1cmUgZm9yIHRoZSBuZXRsaW5rIG1lc3NhZ2UuCisgKglSZXR1cm4gMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuCisgKgorICogU2VjdXJpdHkgaG9va3MgZm9yIFVuaXggZG9tYWluIG5ldHdvcmtpbmcuCisgKgorICogQHVuaXhfc3RyZWFtX2Nvbm5lY3Q6CisgKglDaGVjayBwZXJtaXNzaW9ucyBiZWZvcmUgZXN0YWJsaXNoaW5nIGEgVW5peCBkb21haW4gc3RyZWFtIGNvbm5lY3Rpb24KKyAqCWJldHdlZW4gQHNvY2sgYW5kIEBvdGhlci4KKyAqCUBzb2NrIGNvbnRhaW5zIHRoZSBzb2NrZXQgc3RydWN0dXJlLgorICoJQG90aGVyIGNvbnRhaW5zIHRoZSBwZWVyIHNvY2tldCBzdHJ1Y3R1cmUuCisgKglSZXR1cm4gMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuCisgKiBAdW5peF9tYXlfc2VuZDoKKyAqCUNoZWNrIHBlcm1pc3Npb25zIGJlZm9yZSBjb25uZWN0aW5nIG9yIHNlbmRpbmcgZGF0YWdyYW1zIGZyb20gQHNvY2sgdG8KKyAqCUBvdGhlci4KKyAqCUBzb2NrIGNvbnRhaW5zIHRoZSBzb2NrZXQgc3RydWN0dXJlLgorICoJQHNvY2sgY29udGFpbnMgdGhlIHBlZXIgc29ja2V0IHN0cnVjdHVyZS4KKyAqCVJldHVybiAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KKyAqCisgKiBUaGUgQHVuaXhfc3RyZWFtX2Nvbm5lY3QgYW5kIEB1bml4X21heV9zZW5kIGhvb2tzIHdlcmUgbmVjZXNzYXJ5IGJlY2F1c2UKKyAqIExpbnV4IHByb3ZpZGVzIGFuIGFsdGVybmF0aXZlIHRvIHRoZSBjb252ZW50aW9uYWwgZmlsZSBuYW1lIHNwYWNlIGZvciBVbml4CisgKiBkb21haW4gc29ja2V0cy4gIFdoZXJlYXMgYmluZGluZyBhbmQgY29ubmVjdGluZyB0byBzb2NrZXRzIGluIHRoZSBmaWxlIG5hbWUKKyAqIHNwYWNlIGlzIG1lZGlhdGVkIGJ5IHRoZSB0eXBpY2FsIGZpbGUgcGVybWlzc2lvbnMgKGFuZCBjYXVnaHQgYnkgdGhlIG1rbm9kCisgKiBhbmQgcGVybWlzc2lvbiBob29rcyBpbiBpbm9kZV9zZWN1cml0eV9vcHMpLCBiaW5kaW5nIGFuZCBjb25uZWN0aW5nIHRvCisgKiBzb2NrZXRzIGluIHRoZSBhYnN0cmFjdCBuYW1lIHNwYWNlIGlzIGNvbXBsZXRlbHkgdW5tZWRpYXRlZC4gIFN1ZmZpY2llbnQKKyAqIGNvbnRyb2wgb2YgVW5peCBkb21haW4gc29ja2V0cyBpbiB0aGUgYWJzdHJhY3QgbmFtZSBzcGFjZSBpc24ndCBwb3NzaWJsZQorICogdXNpbmcgb25seSB0aGUgc29ja2V0IGxheWVyIGhvb2tzLCBzaW5jZSB3ZSBuZWVkIHRvIGtub3cgdGhlIGFjdHVhbCB0YXJnZXQKKyAqIHNvY2tldCwgd2hpY2ggaXMgbm90IGxvb2tlZCB1cCB1bnRpbCB3ZSBhcmUgaW5zaWRlIHRoZSBhZl91bml4IGNvZGUuCisgKgorICogU2VjdXJpdHkgaG9va3MgZm9yIHNvY2tldCBvcGVyYXRpb25zLgorICoKKyAqIEBzb2NrZXRfY3JlYXRlOgorICoJQ2hlY2sgcGVybWlzc2lvbnMgcHJpb3IgdG8gY3JlYXRpbmcgYSBuZXcgc29ja2V0LgorICoJQGZhbWlseSBjb250YWlucyB0aGUgcmVxdWVzdGVkIHByb3RvY29sIGZhbWlseS4KKyAqCUB0eXBlIGNvbnRhaW5zIHRoZSByZXF1ZXN0ZWQgY29tbXVuaWNhdGlvbnMgdHlwZS4KKyAqCUBwcm90b2NvbCBjb250YWlucyB0aGUgcmVxdWVzdGVkIHByb3RvY29sLgorICoJQGtlcm4gc2V0IHRvIDEgaWYgYSBrZXJuZWwgc29ja2V0LgorICoJUmV0dXJuIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLgorICogQHNvY2tldF9wb3N0X2NyZWF0ZToKKyAqCVRoaXMgaG9vayBhbGxvd3MgYSBtb2R1bGUgdG8gdXBkYXRlIG9yIGFsbG9jYXRlIGEgcGVyLXNvY2tldCBzZWN1cml0eQorICoJc3RydWN0dXJlLiBOb3RlIHRoYXQgdGhlIHNlY3VyaXR5IGZpZWxkIHdhcyBub3QgYWRkZWQgZGlyZWN0bHkgdG8gdGhlCisgKglzb2NrZXQgc3RydWN0dXJlLCBidXQgcmF0aGVyLCB0aGUgc29ja2V0IHNlY3VyaXR5IGluZm9ybWF0aW9uIGlzIHN0b3JlZAorICoJaW4gdGhlIGFzc29jaWF0ZWQgaW5vZGUuICBUeXBpY2FsbHksIHRoZSBpbm9kZSBhbGxvY19zZWN1cml0eSBob29rIHdpbGwKKyAqCWFsbG9jYXRlIGFuZCBhbmQgYXR0YWNoIHNlY3VyaXR5IGluZm9ybWF0aW9uIHRvCisgKglzb2NrLT5pbm9kZS0+aV9zZWN1cml0eS4gIFRoaXMgaG9vayBtYXkgYmUgdXNlZCB0byB1cGRhdGUgdGhlCisgKglzb2NrLT5pbm9kZS0+aV9zZWN1cml0eSBmaWVsZCB3aXRoIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gdGhhdCB3YXNuJ3QKKyAqCWF2YWlsYWJsZSB3aGVuIHRoZSBpbm9kZSB3YXMgYWxsb2NhdGVkLgorICoJQHNvY2sgY29udGFpbnMgdGhlIG5ld2x5IGNyZWF0ZWQgc29ja2V0IHN0cnVjdHVyZS4KKyAqCUBmYW1pbHkgY29udGFpbnMgdGhlIHJlcXVlc3RlZCBwcm90b2NvbCBmYW1pbHkuCisgKglAdHlwZSBjb250YWlucyB0aGUgcmVxdWVzdGVkIGNvbW11bmljYXRpb25zIHR5cGUuCisgKglAcHJvdG9jb2wgY29udGFpbnMgdGhlIHJlcXVlc3RlZCBwcm90b2NvbC4KKyAqCUBrZXJuIHNldCB0byAxIGlmIGEga2VybmVsIHNvY2tldC4KKyAqIEBzb2NrZXRfYmluZDoKKyAqCUNoZWNrIHBlcm1pc3Npb24gYmVmb3JlIHNvY2tldCBwcm90b2NvbCBsYXllciBiaW5kIG9wZXJhdGlvbiBpcworICoJcGVyZm9ybWVkIGFuZCB0aGUgc29ja2V0IEBzb2NrIGlzIGJvdW5kIHRvIHRoZSBhZGRyZXNzIHNwZWNpZmllZCBpbiB0aGUKKyAqCUBhZGRyZXNzIHBhcmFtZXRlci4KKyAqCUBzb2NrIGNvbnRhaW5zIHRoZSBzb2NrZXQgc3RydWN0dXJlLgorICoJQGFkZHJlc3MgY29udGFpbnMgdGhlIGFkZHJlc3MgdG8gYmluZCB0by4KKyAqCUBhZGRybGVuIGNvbnRhaW5zIHRoZSBsZW5ndGggb2YgYWRkcmVzcy4KKyAqCVJldHVybiAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4gIAorICogQHNvY2tldF9jb25uZWN0OgorICoJQ2hlY2sgcGVybWlzc2lvbiBiZWZvcmUgc29ja2V0IHByb3RvY29sIGxheWVyIGNvbm5lY3Qgb3BlcmF0aW9uCisgKglhdHRlbXB0cyB0byBjb25uZWN0IHNvY2tldCBAc29jayB0byBhIHJlbW90ZSBhZGRyZXNzLCBAYWRkcmVzcy4KKyAqCUBzb2NrIGNvbnRhaW5zIHRoZSBzb2NrZXQgc3RydWN0dXJlLgorICoJQGFkZHJlc3MgY29udGFpbnMgdGhlIGFkZHJlc3Mgb2YgcmVtb3RlIGVuZHBvaW50LgorICoJQGFkZHJsZW4gY29udGFpbnMgdGhlIGxlbmd0aCBvZiBhZGRyZXNzLgorICoJUmV0dXJuIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLiAgCisgKiBAc29ja2V0X2xpc3RlbjoKKyAqCUNoZWNrIHBlcm1pc3Npb24gYmVmb3JlIHNvY2tldCBwcm90b2NvbCBsYXllciBsaXN0ZW4gb3BlcmF0aW9uLgorICoJQHNvY2sgY29udGFpbnMgdGhlIHNvY2tldCBzdHJ1Y3R1cmUuCisgKglAYmFja2xvZyBjb250YWlucyB0aGUgbWF4aW11bSBsZW5ndGggZm9yIHRoZSBwZW5kaW5nIGNvbm5lY3Rpb24gcXVldWUuCisgKglSZXR1cm4gMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuCisgKiBAc29ja2V0X2FjY2VwdDoKKyAqCUNoZWNrIHBlcm1pc3Npb24gYmVmb3JlIGFjY2VwdGluZyBhIG5ldyBjb25uZWN0aW9uLiAgTm90ZSB0aGF0IHRoZSBuZXcKKyAqCXNvY2tldCwgQG5ld3NvY2ssIGhhcyBiZWVuIGNyZWF0ZWQgYW5kIHNvbWUgaW5mb3JtYXRpb24gY29waWVkIHRvIGl0LAorICoJYnV0IHRoZSBhY2NlcHQgb3BlcmF0aW9uIGhhcyBub3QgYWN0dWFsbHkgYmVlbiBwZXJmb3JtZWQuCisgKglAc29jayBjb250YWlucyB0aGUgbGlzdGVuaW5nIHNvY2tldCBzdHJ1Y3R1cmUuCisgKglAbmV3c29jayBjb250YWlucyB0aGUgbmV3bHkgY3JlYXRlZCBzZXJ2ZXIgc29ja2V0IGZvciBjb25uZWN0aW9uLgorICoJUmV0dXJuIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLgorICogQHNvY2tldF9wb3N0X2FjY2VwdDoKKyAqCVRoaXMgaG9vayBhbGxvd3MgYSBzZWN1cml0eSBtb2R1bGUgdG8gY29weSBzZWN1cml0eQorICoJaW5mb3JtYXRpb24gaW50byB0aGUgbmV3bHkgY3JlYXRlZCBzb2NrZXQncyBpbm9kZS4KKyAqCUBzb2NrIGNvbnRhaW5zIHRoZSBsaXN0ZW5pbmcgc29ja2V0IHN0cnVjdHVyZS4KKyAqCUBuZXdzb2NrIGNvbnRhaW5zIHRoZSBuZXdseSBjcmVhdGVkIHNlcnZlciBzb2NrZXQgZm9yIGNvbm5lY3Rpb24uCisgKiBAc29ja2V0X3NlbmRtc2c6CisgKglDaGVjayBwZXJtaXNzaW9uIGJlZm9yZSB0cmFuc21pdHRpbmcgYSBtZXNzYWdlIHRvIGFub3RoZXIgc29ja2V0LgorICoJQHNvY2sgY29udGFpbnMgdGhlIHNvY2tldCBzdHJ1Y3R1cmUuCisgKglAbXNnIGNvbnRhaW5zIHRoZSBtZXNzYWdlIHRvIGJlIHRyYW5zbWl0dGVkLgorICoJQHNpemUgY29udGFpbnMgdGhlIHNpemUgb2YgbWVzc2FnZS4KKyAqCVJldHVybiAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KKyAqIEBzb2NrZXRfcmVjdm1zZzoKKyAqCUNoZWNrIHBlcm1pc3Npb24gYmVmb3JlIHJlY2VpdmluZyBhIG1lc3NhZ2UgZnJvbSBhIHNvY2tldC4KKyAqCUBzb2NrIGNvbnRhaW5zIHRoZSBzb2NrZXQgc3RydWN0dXJlLgorICoJQG1zZyBjb250YWlucyB0aGUgbWVzc2FnZSBzdHJ1Y3R1cmUuCisgKglAc2l6ZSBjb250YWlucyB0aGUgc2l6ZSBvZiBtZXNzYWdlIHN0cnVjdHVyZS4KKyAqCUBmbGFncyBjb250YWlucyB0aGUgb3BlcmF0aW9uYWwgZmxhZ3MuCisgKglSZXR1cm4gMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuICAKKyAqIEBzb2NrZXRfZ2V0c29ja25hbWU6CisgKglDaGVjayBwZXJtaXNzaW9uIGJlZm9yZSB0aGUgbG9jYWwgYWRkcmVzcyAobmFtZSkgb2YgdGhlIHNvY2tldCBvYmplY3QKKyAqCUBzb2NrIGlzIHJldHJpZXZlZC4KKyAqCUBzb2NrIGNvbnRhaW5zIHRoZSBzb2NrZXQgc3RydWN0dXJlLgorICoJUmV0dXJuIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLgorICogQHNvY2tldF9nZXRwZWVybmFtZToKKyAqCUNoZWNrIHBlcm1pc3Npb24gYmVmb3JlIHRoZSByZW1vdGUgYWRkcmVzcyAobmFtZSkgb2YgYSBzb2NrZXQgb2JqZWN0CisgKglAc29jayBpcyByZXRyaWV2ZWQuCisgKglAc29jayBjb250YWlucyB0aGUgc29ja2V0IHN0cnVjdHVyZS4KKyAqCVJldHVybiAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KKyAqIEBzb2NrZXRfZ2V0c29ja29wdDoKKyAqCUNoZWNrIHBlcm1pc3Npb25zIGJlZm9yZSByZXRyaWV2aW5nIHRoZSBvcHRpb25zIGFzc29jaWF0ZWQgd2l0aCBzb2NrZXQKKyAqCUBzb2NrLgorICoJQHNvY2sgY29udGFpbnMgdGhlIHNvY2tldCBzdHJ1Y3R1cmUuCisgKglAbGV2ZWwgY29udGFpbnMgdGhlIHByb3RvY29sIGxldmVsIHRvIHJldHJpZXZlIG9wdGlvbiBmcm9tLgorICoJQG9wdG5hbWUgY29udGFpbnMgdGhlIG5hbWUgb2Ygb3B0aW9uIHRvIHJldHJpZXZlLgorICoJUmV0dXJuIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLgorICogQHNvY2tldF9zZXRzb2Nrb3B0OgorICoJQ2hlY2sgcGVybWlzc2lvbnMgYmVmb3JlIHNldHRpbmcgdGhlIG9wdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHNvY2tldAorICoJQHNvY2suCisgKglAc29jayBjb250YWlucyB0aGUgc29ja2V0IHN0cnVjdHVyZS4KKyAqCUBsZXZlbCBjb250YWlucyB0aGUgcHJvdG9jb2wgbGV2ZWwgdG8gc2V0IG9wdGlvbnMgZm9yLgorICoJQG9wdG5hbWUgY29udGFpbnMgdGhlIG5hbWUgb2YgdGhlIG9wdGlvbiB0byBzZXQuCisgKglSZXR1cm4gMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuICAKKyAqIEBzb2NrZXRfc2h1dGRvd246CisgKglDaGVja3MgcGVybWlzc2lvbiBiZWZvcmUgYWxsIG9yIHBhcnQgb2YgYSBjb25uZWN0aW9uIG9uIHRoZSBzb2NrZXQKKyAqCUBzb2NrIGlzIHNodXQgZG93bi4KKyAqCUBzb2NrIGNvbnRhaW5zIHRoZSBzb2NrZXQgc3RydWN0dXJlLgorICoJQGhvdyBjb250YWlucyB0aGUgZmxhZyBpbmRpY2F0aW5nIGhvdyBmdXR1cmUgc2VuZHMgYW5kIHJlY2VpdmVzIGFyZSBoYW5kbGVkLgorICoJUmV0dXJuIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLgorICogQHNvY2tldF9zb2NrX3Jjdl9za2I6CisgKglDaGVjayBwZXJtaXNzaW9ucyBvbiBpbmNvbWluZyBuZXR3b3JrIHBhY2tldHMuICBUaGlzIGhvb2sgaXMgZGlzdGluY3QKKyAqCWZyb20gTmV0ZmlsdGVyJ3MgSVAgaW5wdXQgaG9va3Mgc2luY2UgaXQgaXMgdGhlIGZpcnN0IHRpbWUgdGhhdCB0aGUKKyAqCWluY29taW5nIHNrX2J1ZmYgQHNrYiBoYXMgYmVlbiBhc3NvY2lhdGVkIHdpdGggYSBwYXJ0aWN1bGFyIHNvY2tldCwgQHNrLgorICoJQHNrIGNvbnRhaW5zIHRoZSBzb2NrIChub3Qgc29ja2V0KSBhc3NvY2lhdGVkIHdpdGggdGhlIGluY29taW5nIHNrX2J1ZmYuCisgKglAc2tiIGNvbnRhaW5zIHRoZSBpbmNvbWluZyBuZXR3b3JrIGRhdGEuCisgKiBAc29ja2V0X2dldHBlZXJzZWM6CisgKglUaGlzIGhvb2sgYWxsb3dzIHRoZSBzZWN1cml0eSBtb2R1bGUgdG8gcHJvdmlkZSBwZWVyIHNvY2tldCBzZWN1cml0eQorICoJc3RhdGUgdG8gdXNlcnNwYWNlIHZpYSBnZXRzb2Nrb3B0IFNPX0dFVFBFRVJTRUMuCisgKglAc29jayBpcyB0aGUgbG9jYWwgc29ja2V0LgorICoJQG9wdHZhbCB1c2Vyc3BhY2UgbWVtb3J5IHdoZXJlIHRoZSBzZWN1cml0eSBzdGF0ZSBpcyB0byBiZSBjb3BpZWQuCisgKglAb3B0bGVuIHVzZXJzcGFjZSBpbnQgd2hlcmUgdGhlIG1vZHVsZSBzaG91bGQgY29weSB0aGUgYWN0dWFsIGxlbmd0aAorICoJb2YgdGhlIHNlY3VyaXR5IHN0YXRlLgorICoJQGxlbiBhcyBpbnB1dCBpcyB0aGUgbWF4aW11bSBsZW5ndGggdG8gY29weSB0byB1c2Vyc3BhY2UgcHJvdmlkZWQKKyAqCWJ5IHRoZSBjYWxsZXIuCisgKglSZXR1cm4gMCBpZiBhbGwgaXMgd2VsbCwgb3RoZXJ3aXNlLCB0eXBpY2FsIGdldHNvY2tvcHQgcmV0dXJuCisgKgl2YWx1ZXMuCisgKiBAc2tfYWxsb2Nfc2VjdXJpdHk6CisgKiAgICAgIEFsbG9jYXRlIGFuZCBhdHRhY2ggYSBzZWN1cml0eSBzdHJ1Y3R1cmUgdG8gdGhlIHNrLT5za19zZWN1cml0eSBmaWVsZCwKKyAqICAgICAgd2hpY2ggaXMgdXNlZCB0byBjb3B5IHNlY3VyaXR5IGF0dHJpYnV0ZXMgYmV0d2VlbiBsb2NhbCBzdHJlYW0gc29ja2V0cy4KKyAqIEBza19mcmVlX3NlY3VyaXR5OgorICoJRGVhbGxvY2F0ZSBzZWN1cml0eSBzdHJ1Y3R1cmUuCisgKgorICogU2VjdXJpdHkgaG9va3MgYWZmZWN0aW5nIGFsbCBTeXN0ZW0gViBJUEMgb3BlcmF0aW9ucy4KKyAqCisgKiBAaXBjX3Blcm1pc3Npb246CisgKglDaGVjayBwZXJtaXNzaW9ucyBmb3IgYWNjZXNzIHRvIElQQworICoJQGlwY3AgY29udGFpbnMgdGhlIGtlcm5lbCBJUEMgcGVybWlzc2lvbiBzdHJ1Y3R1cmUKKyAqCUBmbGFnIGNvbnRhaW5zIHRoZSBkZXNpcmVkIChyZXF1ZXN0ZWQpIHBlcm1pc3Npb24gc2V0CisgKglSZXR1cm4gMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuCisgKgorICogU2VjdXJpdHkgaG9va3MgZm9yIGluZGl2aWR1YWwgbWVzc2FnZXMgaGVsZCBpbiBTeXN0ZW0gViBJUEMgbWVzc2FnZSBxdWV1ZXMKKyAqIEBtc2dfbXNnX2FsbG9jX3NlY3VyaXR5OgorICoJQWxsb2NhdGUgYW5kIGF0dGFjaCBhIHNlY3VyaXR5IHN0cnVjdHVyZSB0byB0aGUgbXNnLT5zZWN1cml0eSBmaWVsZC4KKyAqCVRoZSBzZWN1cml0eSBmaWVsZCBpcyBpbml0aWFsaXplZCB0byBOVUxMIHdoZW4gdGhlIHN0cnVjdHVyZSBpcyBmaXJzdAorICoJY3JlYXRlZC4KKyAqCUBtc2cgY29udGFpbnMgdGhlIG1lc3NhZ2Ugc3RydWN0dXJlIHRvIGJlIG1vZGlmaWVkLgorICoJUmV0dXJuIDAgaWYgb3BlcmF0aW9uIHdhcyBzdWNjZXNzZnVsIGFuZCBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuCisgKiBAbXNnX21zZ19mcmVlX3NlY3VyaXR5OgorICoJRGVhbGxvY2F0ZSB0aGUgc2VjdXJpdHkgc3RydWN0dXJlIGZvciB0aGlzIG1lc3NhZ2UuCisgKglAbXNnIGNvbnRhaW5zIHRoZSBtZXNzYWdlIHN0cnVjdHVyZSB0byBiZSBtb2RpZmllZC4KKyAqCisgKiBTZWN1cml0eSBob29rcyBmb3IgU3lzdGVtIFYgSVBDIE1lc3NhZ2UgUXVldWVzCisgKgorICogQG1zZ19xdWV1ZV9hbGxvY19zZWN1cml0eToKKyAqCUFsbG9jYXRlIGFuZCBhdHRhY2ggYSBzZWN1cml0eSBzdHJ1Y3R1cmUgdG8gdGhlCisgKgltc3EtPnFfcGVybS5zZWN1cml0eSBmaWVsZC4gVGhlIHNlY3VyaXR5IGZpZWxkIGlzIGluaXRpYWxpemVkIHRvCisgKglOVUxMIHdoZW4gdGhlIHN0cnVjdHVyZSBpcyBmaXJzdCBjcmVhdGVkLgorICoJQG1zcSBjb250YWlucyB0aGUgbWVzc2FnZSBxdWV1ZSBzdHJ1Y3R1cmUgdG8gYmUgbW9kaWZpZWQuCisgKglSZXR1cm4gMCBpZiBvcGVyYXRpb24gd2FzIHN1Y2Nlc3NmdWwgYW5kIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KKyAqIEBtc2dfcXVldWVfZnJlZV9zZWN1cml0eToKKyAqCURlYWxsb2NhdGUgc2VjdXJpdHkgc3RydWN0dXJlIGZvciB0aGlzIG1lc3NhZ2UgcXVldWUuCisgKglAbXNxIGNvbnRhaW5zIHRoZSBtZXNzYWdlIHF1ZXVlIHN0cnVjdHVyZSB0byBiZSBtb2RpZmllZC4KKyAqIEBtc2dfcXVldWVfYXNzb2NpYXRlOgorICoJQ2hlY2sgcGVybWlzc2lvbiB3aGVuIGEgbWVzc2FnZSBxdWV1ZSBpcyByZXF1ZXN0ZWQgdGhyb3VnaCB0aGUKKyAqCW1zZ2dldCBzeXN0ZW0gY2FsbC4gIFRoaXMgaG9vayBpcyBvbmx5IGNhbGxlZCB3aGVuIHJldHVybmluZyB0aGUKKyAqCW1lc3NhZ2UgcXVldWUgaWRlbnRpZmllciBmb3IgYW4gZXhpc3RpbmcgbWVzc2FnZSBxdWV1ZSwgbm90IHdoZW4gYQorICoJbmV3IG1lc3NhZ2UgcXVldWUgaXMgY3JlYXRlZC4KKyAqCUBtc3EgY29udGFpbnMgdGhlIG1lc3NhZ2UgcXVldWUgdG8gYWN0IHVwb24uCisgKglAbXNxZmxnIGNvbnRhaW5zIHRoZSBvcGVyYXRpb24gY29udHJvbCBmbGFncy4KKyAqCVJldHVybiAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KKyAqIEBtc2dfcXVldWVfbXNnY3RsOgorICoJQ2hlY2sgcGVybWlzc2lvbiB3aGVuIGEgbWVzc2FnZSBjb250cm9sIG9wZXJhdGlvbiBzcGVjaWZpZWQgYnkgQGNtZAorICoJaXMgdG8gYmUgcGVyZm9ybWVkIG9uIHRoZSBtZXNzYWdlIHF1ZXVlIEBtc3EuCisgKglUaGUgQG1zcSBtYXkgYmUgTlVMTCwgZS5nLiBmb3IgSVBDX0lORk8gb3IgTVNHX0lORk8uCisgKglAbXNxIGNvbnRhaW5zIHRoZSBtZXNzYWdlIHF1ZXVlIHRvIGFjdCB1cG9uLiAgTWF5IGJlIE5VTEwuCisgKglAY21kIGNvbnRhaW5zIHRoZSBvcGVyYXRpb24gdG8gYmUgcGVyZm9ybWVkLgorICoJUmV0dXJuIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLiAgCisgKiBAbXNnX3F1ZXVlX21zZ3NuZDoKKyAqCUNoZWNrIHBlcm1pc3Npb24gYmVmb3JlIGEgbWVzc2FnZSwgQG1zZywgaXMgZW5xdWV1ZWQgb24gdGhlIG1lc3NhZ2UKKyAqCXF1ZXVlLCBAbXNxLgorICoJQG1zcSBjb250YWlucyB0aGUgbWVzc2FnZSBxdWV1ZSB0byBzZW5kIG1lc3NhZ2UgdG8uCisgKglAbXNnIGNvbnRhaW5zIHRoZSBtZXNzYWdlIHRvIGJlIGVucXVldWVkLgorICoJQG1zcWZsZyBjb250YWlucyBvcGVyYXRpb25hbCBmbGFncy4KKyAqCVJldHVybiAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KKyAqIEBtc2dfcXVldWVfbXNncmN2OgorICoJQ2hlY2sgcGVybWlzc2lvbiBiZWZvcmUgYSBtZXNzYWdlLCBAbXNnLCBpcyByZW1vdmVkIGZyb20gdGhlIG1lc3NhZ2UKKyAqCXF1ZXVlLCBAbXNxLiAgVGhlIEB0YXJnZXQgdGFzayBzdHJ1Y3R1cmUgY29udGFpbnMgYSBwb2ludGVyIHRvIHRoZSAKKyAqCXByb2Nlc3MgdGhhdCB3aWxsIGJlIHJlY2VpdmluZyB0aGUgbWVzc2FnZSAobm90IGVxdWFsIHRvIHRoZSBjdXJyZW50IAorICoJcHJvY2VzcyB3aGVuIGlubGluZSByZWNlaXZlcyBhcmUgYmVpbmcgcGVyZm9ybWVkKS4KKyAqCUBtc3EgY29udGFpbnMgdGhlIG1lc3NhZ2UgcXVldWUgdG8gcmV0cmlldmUgbWVzc2FnZSBmcm9tLgorICoJQG1zZyBjb250YWlucyB0aGUgbWVzc2FnZSBkZXN0aW5hdGlvbi4KKyAqCUB0YXJnZXQgY29udGFpbnMgdGhlIHRhc2sgc3RydWN0dXJlIGZvciByZWNpcGllbnQgcHJvY2Vzcy4KKyAqCUB0eXBlIGNvbnRhaW5zIHRoZSB0eXBlIG9mIG1lc3NhZ2UgcmVxdWVzdGVkLgorICoJQG1vZGUgY29udGFpbnMgdGhlIG9wZXJhdGlvbmFsIGZsYWdzLgorICoJUmV0dXJuIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLgorICoKKyAqIFNlY3VyaXR5IGhvb2tzIGZvciBTeXN0ZW0gViBTaGFyZWQgTWVtb3J5IFNlZ21lbnRzCisgKgorICogQHNobV9hbGxvY19zZWN1cml0eToKKyAqCUFsbG9jYXRlIGFuZCBhdHRhY2ggYSBzZWN1cml0eSBzdHJ1Y3R1cmUgdG8gdGhlIHNocC0+c2htX3Blcm0uc2VjdXJpdHkKKyAqCWZpZWxkLiAgVGhlIHNlY3VyaXR5IGZpZWxkIGlzIGluaXRpYWxpemVkIHRvIE5VTEwgd2hlbiB0aGUgc3RydWN0dXJlIGlzCisgKglmaXJzdCBjcmVhdGVkLgorICoJQHNocCBjb250YWlucyB0aGUgc2hhcmVkIG1lbW9yeSBzdHJ1Y3R1cmUgdG8gYmUgbW9kaWZpZWQuCisgKglSZXR1cm4gMCBpZiBvcGVyYXRpb24gd2FzIHN1Y2Nlc3NmdWwgYW5kIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KKyAqIEBzaG1fZnJlZV9zZWN1cml0eToKKyAqCURlYWxsb2NhdGUgdGhlIHNlY3VyaXR5IHN0cnVjdCBmb3IgdGhpcyBtZW1vcnkgc2VnbWVudC4KKyAqCUBzaHAgY29udGFpbnMgdGhlIHNoYXJlZCBtZW1vcnkgc3RydWN0dXJlIHRvIGJlIG1vZGlmaWVkLgorICogQHNobV9hc3NvY2lhdGU6CisgKglDaGVjayBwZXJtaXNzaW9uIHdoZW4gYSBzaGFyZWQgbWVtb3J5IHJlZ2lvbiBpcyByZXF1ZXN0ZWQgdGhyb3VnaCB0aGUKKyAqCXNobWdldCBzeXN0ZW0gY2FsbC4gIFRoaXMgaG9vayBpcyBvbmx5IGNhbGxlZCB3aGVuIHJldHVybmluZyB0aGUgc2hhcmVkCisgKgltZW1vcnkgcmVnaW9uIGlkZW50aWZpZXIgZm9yIGFuIGV4aXN0aW5nIHJlZ2lvbiwgbm90IHdoZW4gYSBuZXcgc2hhcmVkCisgKgltZW1vcnkgcmVnaW9uIGlzIGNyZWF0ZWQuCisgKglAc2hwIGNvbnRhaW5zIHRoZSBzaGFyZWQgbWVtb3J5IHN0cnVjdHVyZSB0byBiZSBtb2RpZmllZC4KKyAqCUBzaG1mbGcgY29udGFpbnMgdGhlIG9wZXJhdGlvbiBjb250cm9sIGZsYWdzLgorICoJUmV0dXJuIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLgorICogQHNobV9zaG1jdGw6CisgKglDaGVjayBwZXJtaXNzaW9uIHdoZW4gYSBzaGFyZWQgbWVtb3J5IGNvbnRyb2wgb3BlcmF0aW9uIHNwZWNpZmllZCBieQorICoJQGNtZCBpcyB0byBiZSBwZXJmb3JtZWQgb24gdGhlIHNoYXJlZCBtZW1vcnkgcmVnaW9uIEBzaHAuCisgKglUaGUgQHNocCBtYXkgYmUgTlVMTCwgZS5nLiBmb3IgSVBDX0lORk8gb3IgU0hNX0lORk8uCisgKglAc2hwIGNvbnRhaW5zIHNoYXJlZCBtZW1vcnkgc3RydWN0dXJlIHRvIGJlIG1vZGlmaWVkLgorICoJQGNtZCBjb250YWlucyB0aGUgb3BlcmF0aW9uIHRvIGJlIHBlcmZvcm1lZC4KKyAqCVJldHVybiAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KKyAqIEBzaG1fc2htYXQ6CisgKglDaGVjayBwZXJtaXNzaW9ucyBwcmlvciB0byBhbGxvd2luZyB0aGUgc2htYXQgc3lzdGVtIGNhbGwgdG8gYXR0YWNoIHRoZQorICoJc2hhcmVkIG1lbW9yeSBzZWdtZW50IEBzaHAgdG8gdGhlIGRhdGEgc2VnbWVudCBvZiB0aGUgY2FsbGluZyBwcm9jZXNzLgorICoJVGhlIGF0dGFjaGluZyBhZGRyZXNzIGlzIHNwZWNpZmllZCBieSBAc2htYWRkci4KKyAqCUBzaHAgY29udGFpbnMgdGhlIHNoYXJlZCBtZW1vcnkgc3RydWN0dXJlIHRvIGJlIG1vZGlmaWVkLgorICoJQHNobWFkZHIgY29udGFpbnMgdGhlIGFkZHJlc3MgdG8gYXR0YWNoIG1lbW9yeSByZWdpb24gdG8uCisgKglAc2htZmxnIGNvbnRhaW5zIHRoZSBvcGVyYXRpb25hbCBmbGFncy4KKyAqCVJldHVybiAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KKyAqCisgKiBTZWN1cml0eSBob29rcyBmb3IgU3lzdGVtIFYgU2VtYXBob3JlcworICoKKyAqIEBzZW1fYWxsb2Nfc2VjdXJpdHk6CisgKglBbGxvY2F0ZSBhbmQgYXR0YWNoIGEgc2VjdXJpdHkgc3RydWN0dXJlIHRvIHRoZSBzbWEtPnNlbV9wZXJtLnNlY3VyaXR5CisgKglmaWVsZC4gIFRoZSBzZWN1cml0eSBmaWVsZCBpcyBpbml0aWFsaXplZCB0byBOVUxMIHdoZW4gdGhlIHN0cnVjdHVyZSBpcworICoJZmlyc3QgY3JlYXRlZC4KKyAqCUBzbWEgY29udGFpbnMgdGhlIHNlbWFwaG9yZSBzdHJ1Y3R1cmUKKyAqCVJldHVybiAwIGlmIG9wZXJhdGlvbiB3YXMgc3VjY2Vzc2Z1bCBhbmQgcGVybWlzc2lvbiBpcyBncmFudGVkLgorICogQHNlbV9mcmVlX3NlY3VyaXR5OgorICoJZGVhbGxvY2F0ZSBzZWN1cml0eSBzdHJ1Y3QgZm9yIHRoaXMgc2VtYXBob3JlCisgKglAc21hIGNvbnRhaW5zIHRoZSBzZW1hcGhvcmUgc3RydWN0dXJlLgorICogQHNlbV9hc3NvY2lhdGU6CisgKglDaGVjayBwZXJtaXNzaW9uIHdoZW4gYSBzZW1hcGhvcmUgaXMgcmVxdWVzdGVkIHRocm91Z2ggdGhlIHNlbWdldAorICoJc3lzdGVtIGNhbGwuICBUaGlzIGhvb2sgaXMgb25seSBjYWxsZWQgd2hlbiByZXR1cm5pbmcgdGhlIHNlbWFwaG9yZQorICoJaWRlbnRpZmllciBmb3IgYW4gZXhpc3Rpbmcgc2VtYXBob3JlLCBub3Qgd2hlbiBhIG5ldyBvbmUgbXVzdCBiZQorICoJY3JlYXRlZC4KKyAqCUBzbWEgY29udGFpbnMgdGhlIHNlbWFwaG9yZSBzdHJ1Y3R1cmUuCisgKglAc2VtZmxnIGNvbnRhaW5zIHRoZSBvcGVyYXRpb24gY29udHJvbCBmbGFncy4KKyAqCVJldHVybiAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KKyAqIEBzZW1fc2VtY3RsOgorICoJQ2hlY2sgcGVybWlzc2lvbiB3aGVuIGEgc2VtYXBob3JlIG9wZXJhdGlvbiBzcGVjaWZpZWQgYnkgQGNtZCBpcyB0byBiZQorICoJcGVyZm9ybWVkIG9uIHRoZSBzZW1hcGhvcmUgQHNtYS4gIFRoZSBAc21hIG1heSBiZSBOVUxMLCBlLmcuIGZvciAKKyAqCUlQQ19JTkZPIG9yIFNFTV9JTkZPLgorICoJQHNtYSBjb250YWlucyB0aGUgc2VtYXBob3JlIHN0cnVjdHVyZS4gIE1heSBiZSBOVUxMLgorICoJQGNtZCBjb250YWlucyB0aGUgb3BlcmF0aW9uIHRvIGJlIHBlcmZvcm1lZC4KKyAqCVJldHVybiAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KKyAqIEBzZW1fc2Vtb3AKKyAqCUNoZWNrIHBlcm1pc3Npb25zIGJlZm9yZSBwZXJmb3JtaW5nIG9wZXJhdGlvbnMgb24gbWVtYmVycyBvZiB0aGUKKyAqCXNlbWFwaG9yZSBzZXQgQHNtYS4gIElmIHRoZSBAYWx0ZXIgZmxhZyBpcyBub256ZXJvLCB0aGUgc2VtYXBob3JlIHNldCAKKyAqICAgICAgbWF5IGJlIG1vZGlmaWVkLgorICoJQHNtYSBjb250YWlucyB0aGUgc2VtYXBob3JlIHN0cnVjdHVyZS4KKyAqCUBzb3BzIGNvbnRhaW5zIHRoZSBvcGVyYXRpb25zIHRvIHBlcmZvcm0uCisgKglAbnNvcHMgY29udGFpbnMgdGhlIG51bWJlciBvZiBvcGVyYXRpb25zIHRvIHBlcmZvcm0uCisgKglAYWx0ZXIgY29udGFpbnMgdGhlIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIGNoYW5nZXMgYXJlIHRvIGJlIG1hZGUuCisgKglSZXR1cm4gMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuCisgKgorICogQHB0cmFjZToKKyAqCUNoZWNrIHBlcm1pc3Npb24gYmVmb3JlIGFsbG93aW5nIHRoZSBAcGFyZW50IHByb2Nlc3MgdG8gdHJhY2UgdGhlCisgKglAY2hpbGQgcHJvY2Vzcy4KKyAqCVNlY3VyaXR5IG1vZHVsZXMgbWF5IGFsc28gd2FudCB0byBwZXJmb3JtIGEgcHJvY2VzcyB0cmFjaW5nIGNoZWNrCisgKglkdXJpbmcgYW4gZXhlY3ZlIGluIHRoZSBzZXRfc2VjdXJpdHkgb3IgYXBwbHlfY3JlZHMgaG9va3Mgb2YKKyAqCWJpbnBybV9zZWN1cml0eV9vcHMgaWYgdGhlIHByb2Nlc3MgaXMgYmVpbmcgdHJhY2VkIGFuZCBpdHMgc2VjdXJpdHkKKyAqCWF0dHJpYnV0ZXMgd291bGQgYmUgY2hhbmdlZCBieSB0aGUgZXhlY3ZlLgorICoJQHBhcmVudCBjb250YWlucyB0aGUgdGFza19zdHJ1Y3Qgc3RydWN0dXJlIGZvciBwYXJlbnQgcHJvY2Vzcy4KKyAqCUBjaGlsZCBjb250YWlucyB0aGUgdGFza19zdHJ1Y3Qgc3RydWN0dXJlIGZvciBjaGlsZCBwcm9jZXNzLgorICoJUmV0dXJuIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLgorICogQGNhcGdldDoKKyAqCUdldCB0aGUgQGVmZmVjdGl2ZSwgQGluaGVyaXRhYmxlLCBhbmQgQHBlcm1pdHRlZCBjYXBhYmlsaXR5IHNldHMgZm9yCisgKgl0aGUgQHRhcmdldCBwcm9jZXNzLiAgVGhlIGhvb2sgbWF5IGFsc28gcGVyZm9ybSBwZXJtaXNzaW9uIGNoZWNraW5nIHRvCisgKglkZXRlcm1pbmUgaWYgdGhlIGN1cnJlbnQgcHJvY2VzcyBpcyBhbGxvd2VkIHRvIHNlZSB0aGUgY2FwYWJpbGl0eSBzZXRzCisgKglvZiB0aGUgQHRhcmdldCBwcm9jZXNzLgorICoJQHRhcmdldCBjb250YWlucyB0aGUgdGFza19zdHJ1Y3Qgc3RydWN0dXJlIGZvciB0YXJnZXQgcHJvY2Vzcy4KKyAqCUBlZmZlY3RpdmUgY29udGFpbnMgdGhlIGVmZmVjdGl2ZSBjYXBhYmlsaXR5IHNldC4KKyAqCUBpbmhlcml0YWJsZSBjb250YWlucyB0aGUgaW5oZXJpdGFibGUgY2FwYWJpbGl0eSBzZXQuCisgKglAcGVybWl0dGVkIGNvbnRhaW5zIHRoZSBwZXJtaXR0ZWQgY2FwYWJpbGl0eSBzZXQuCisgKglSZXR1cm4gMCBpZiB0aGUgY2FwYWJpbGl0eSBzZXRzIHdlcmUgc3VjY2Vzc2Z1bGx5IG9idGFpbmVkLgorICogQGNhcHNldF9jaGVjazoKKyAqCUNoZWNrIHBlcm1pc3Npb24gYmVmb3JlIHNldHRpbmcgdGhlIEBlZmZlY3RpdmUsIEBpbmhlcml0YWJsZSwgYW5kCisgKglAcGVybWl0dGVkIGNhcGFiaWxpdHkgc2V0cyBmb3IgdGhlIEB0YXJnZXQgcHJvY2Vzcy4KKyAqCUNhdmVhdDogIEB0YXJnZXQgaXMgYWxzbyBzZXQgdG8gY3VycmVudCBpZiBhIHNldCBvZiBwcm9jZXNzZXMgaXMKKyAqCXNwZWNpZmllZCAoaS5lLiBhbGwgcHJvY2Vzc2VzIG90aGVyIHRoYW4gY3VycmVudCBhbmQgaW5pdCBvciBhCisgKglwYXJ0aWN1bGFyIHByb2Nlc3MgZ3JvdXApLiAgSGVuY2UsIHRoZSBjYXBzZXRfc2V0IGhvb2sgbWF5IG5lZWQgdG8KKyAqCXJldmFsaWRhdGUgcGVybWlzc2lvbiB0byB0aGUgYWN0dWFsIHRhcmdldCBwcm9jZXNzLgorICoJQHRhcmdldCBjb250YWlucyB0aGUgdGFza19zdHJ1Y3Qgc3RydWN0dXJlIGZvciB0YXJnZXQgcHJvY2Vzcy4KKyAqCUBlZmZlY3RpdmUgY29udGFpbnMgdGhlIGVmZmVjdGl2ZSBjYXBhYmlsaXR5IHNldC4KKyAqCUBpbmhlcml0YWJsZSBjb250YWlucyB0aGUgaW5oZXJpdGFibGUgY2FwYWJpbGl0eSBzZXQuCisgKglAcGVybWl0dGVkIGNvbnRhaW5zIHRoZSBwZXJtaXR0ZWQgY2FwYWJpbGl0eSBzZXQuCisgKglSZXR1cm4gMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuCisgKiBAY2Fwc2V0X3NldDoKKyAqCVNldCB0aGUgQGVmZmVjdGl2ZSwgQGluaGVyaXRhYmxlLCBhbmQgQHBlcm1pdHRlZCBjYXBhYmlsaXR5IHNldHMgZm9yCisgKgl0aGUgQHRhcmdldCBwcm9jZXNzLiAgU2luY2UgY2Fwc2V0X2NoZWNrIGNhbm5vdCBhbHdheXMgY2hlY2sgcGVybWlzc2lvbgorICoJdG8gdGhlIHJlYWwgQHRhcmdldCBwcm9jZXNzLCB0aGlzIGhvb2sgbWF5IGFsc28gcGVyZm9ybSBwZXJtaXNzaW9uCisgKgljaGVja2luZyB0byBkZXRlcm1pbmUgaWYgdGhlIGN1cnJlbnQgcHJvY2VzcyBpcyBhbGxvd2VkIHRvIHNldCB0aGUKKyAqCWNhcGFiaWxpdHkgc2V0cyBvZiB0aGUgQHRhcmdldCBwcm9jZXNzLiAgSG93ZXZlciwgdGhpcyBob29rIGhhcyBubyB3YXkKKyAqCW9mIHJldHVybmluZyBhbiBlcnJvciBkdWUgdG8gdGhlIHN0cnVjdHVyZSBvZiB0aGUgc3lzX2NhcHNldCBjb2RlLgorICoJQHRhcmdldCBjb250YWlucyB0aGUgdGFza19zdHJ1Y3Qgc3RydWN0dXJlIGZvciB0YXJnZXQgcHJvY2Vzcy4KKyAqCUBlZmZlY3RpdmUgY29udGFpbnMgdGhlIGVmZmVjdGl2ZSBjYXBhYmlsaXR5IHNldC4KKyAqCUBpbmhlcml0YWJsZSBjb250YWlucyB0aGUgaW5oZXJpdGFibGUgY2FwYWJpbGl0eSBzZXQuCisgKglAcGVybWl0dGVkIGNvbnRhaW5zIHRoZSBwZXJtaXR0ZWQgY2FwYWJpbGl0eSBzZXQuCisgKiBAYWNjdDoKKyAqCUNoZWNrIHBlcm1pc3Npb24gYmVmb3JlIGVuYWJsaW5nIG9yIGRpc2FibGluZyBwcm9jZXNzIGFjY291bnRpbmcuICBJZgorICoJYWNjb3VudGluZyBpcyBiZWluZyBlbmFibGVkLCB0aGVuIEBmaWxlIHJlZmVycyB0byB0aGUgb3BlbiBmaWxlIHVzZWQgdG8KKyAqCXN0b3JlIGFjY291bnRpbmcgcmVjb3Jkcy4gIElmIGFjY291bnRpbmcgaXMgYmVpbmcgZGlzYWJsZWQsIHRoZW4gQGZpbGUKKyAqCWlzIE5VTEwuCisgKglAZmlsZSBjb250YWlucyB0aGUgZmlsZSBzdHJ1Y3R1cmUgZm9yIHRoZSBhY2NvdW50aW5nIGZpbGUgKG1heSBiZSBOVUxMKS4KKyAqCVJldHVybiAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KKyAqIEBzeXNjdGw6CisgKglDaGVjayBwZXJtaXNzaW9uIGJlZm9yZSBhY2Nlc3NpbmcgdGhlIEB0YWJsZSBzeXNjdGwgdmFyaWFibGUgaW4gdGhlCisgKgltYW5uZXIgc3BlY2lmaWVkIGJ5IEBvcC4KKyAqCUB0YWJsZSBjb250YWlucyB0aGUgY3RsX3RhYmxlIHN0cnVjdHVyZSBmb3IgdGhlIHN5c2N0bCB2YXJpYWJsZS4KKyAqCUBvcCBjb250YWlucyB0aGUgb3BlcmF0aW9uICgwMDEgPSBzZWFyY2gsIDAwMiA9IHdyaXRlLCAwMDQgPSByZWFkKS4KKyAqCVJldHVybiAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KKyAqIEBjYXBhYmxlOgorICoJQ2hlY2sgd2hldGhlciB0aGUgQHRzayBwcm9jZXNzIGhhcyB0aGUgQGNhcCBjYXBhYmlsaXR5LgorICoJQHRzayBjb250YWlucyB0aGUgdGFza19zdHJ1Y3QgZm9yIHRoZSBwcm9jZXNzLgorICoJQGNhcCBjb250YWlucyB0aGUgY2FwYWJpbGl0eSA8aW5jbHVkZS9saW51eC9jYXBhYmlsaXR5Lmg+LgorICoJUmV0dXJuIDAgaWYgdGhlIGNhcGFiaWxpdHkgaXMgZ3JhbnRlZCBmb3IgQHRzay4KKyAqIEBzeXNsb2c6CisgKglDaGVjayBwZXJtaXNzaW9uIGJlZm9yZSBhY2Nlc3NpbmcgdGhlIGtlcm5lbCBtZXNzYWdlIHJpbmcgb3IgY2hhbmdpbmcKKyAqCWxvZ2dpbmcgdG8gdGhlIGNvbnNvbGUuCisgKglTZWUgdGhlIHN5c2xvZygyKSBtYW51YWwgcGFnZSBmb3IgYW4gZXhwbGFuYXRpb24gb2YgdGhlIEB0eXBlIHZhbHVlcy4gIAorICoJQHR5cGUgY29udGFpbnMgdGhlIHR5cGUgb2YgYWN0aW9uLgorICoJUmV0dXJuIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLgorICogQHNldHRpbWU6CisgKglDaGVjayBwZXJtaXNzaW9uIHRvIGNoYW5nZSB0aGUgc3lzdGVtIHRpbWUuCisgKglzdHJ1Y3QgdGltZXNwZWMgYW5kIHRpbWV6b25lIGFyZSBkZWZpbmVkIGluIGluY2x1ZGUvbGludXgvdGltZS5oCisgKglAdHMgY29udGFpbnMgbmV3IHRpbWUKKyAqCUB0eiBjb250YWlucyBuZXcgdGltZXpvbmUKKyAqCVJldHVybiAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KKyAqIEB2bV9lbm91Z2hfbWVtb3J5OgorICoJQ2hlY2sgcGVybWlzc2lvbnMgZm9yIGFsbG9jYXRpbmcgYSBuZXcgdmlydHVhbCBtYXBwaW5nLgorICogICAgICBAcGFnZXMgY29udGFpbnMgdGhlIG51bWJlciBvZiBwYWdlcy4KKyAqCVJldHVybiAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KKyAqCisgKiBAcmVnaXN0ZXJfc2VjdXJpdHk6CisgKiAJYWxsb3cgbW9kdWxlIHN0YWNraW5nLgorICogCUBuYW1lIGNvbnRhaW5zIHRoZSBuYW1lIG9mIHRoZSBzZWN1cml0eSBtb2R1bGUgYmVpbmcgc3RhY2tlZC4KKyAqIAlAb3BzIGNvbnRhaW5zIGEgcG9pbnRlciB0byB0aGUgc3RydWN0IHNlY3VyaXR5X29wZXJhdGlvbnMgb2YgdGhlIG1vZHVsZSB0byBzdGFjay4KKyAqIEB1bnJlZ2lzdGVyX3NlY3VyaXR5OgorICoJcmVtb3ZlIGEgc3RhY2tlZCBtb2R1bGUuCisgKglAbmFtZSBjb250YWlucyB0aGUgbmFtZSBvZiB0aGUgc2VjdXJpdHkgbW9kdWxlIGJlaW5nIHVuc3RhY2tlZC4KKyAqCUBvcHMgY29udGFpbnMgYSBwb2ludGVyIHRvIHRoZSBzdHJ1Y3Qgc2VjdXJpdHlfb3BlcmF0aW9ucyBvZiB0aGUgbW9kdWxlIHRvIHVuc3RhY2suCisgKiAKKyAqIFRoaXMgaXMgdGhlIG1haW4gc2VjdXJpdHkgc3RydWN0dXJlLgorICovCitzdHJ1Y3Qgc2VjdXJpdHlfb3BlcmF0aW9ucyB7CisJaW50ICgqcHRyYWNlKSAoc3RydWN0IHRhc2tfc3RydWN0ICogcGFyZW50LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBjaGlsZCk7CisJaW50ICgqY2FwZ2V0KSAoc3RydWN0IHRhc2tfc3RydWN0ICogdGFyZ2V0LAorCQkgICAgICAga2VybmVsX2NhcF90ICogZWZmZWN0aXZlLAorCQkgICAgICAga2VybmVsX2NhcF90ICogaW5oZXJpdGFibGUsIGtlcm5lbF9jYXBfdCAqIHBlcm1pdHRlZCk7CisJaW50ICgqY2Fwc2V0X2NoZWNrKSAoc3RydWN0IHRhc2tfc3RydWN0ICogdGFyZ2V0LAorCQkJICAgICBrZXJuZWxfY2FwX3QgKiBlZmZlY3RpdmUsCisJCQkgICAgIGtlcm5lbF9jYXBfdCAqIGluaGVyaXRhYmxlLAorCQkJICAgICBrZXJuZWxfY2FwX3QgKiBwZXJtaXR0ZWQpOworCXZvaWQgKCpjYXBzZXRfc2V0KSAoc3RydWN0IHRhc2tfc3RydWN0ICogdGFyZ2V0LAorCQkJICAgIGtlcm5lbF9jYXBfdCAqIGVmZmVjdGl2ZSwKKwkJCSAgICBrZXJuZWxfY2FwX3QgKiBpbmhlcml0YWJsZSwKKwkJCSAgICBrZXJuZWxfY2FwX3QgKiBwZXJtaXR0ZWQpOworCWludCAoKmFjY3QpIChzdHJ1Y3QgZmlsZSAqIGZpbGUpOworCWludCAoKnN5c2N0bCkgKHN0cnVjdCBjdGxfdGFibGUgKiB0YWJsZSwgaW50IG9wKTsKKwlpbnQgKCpjYXBhYmxlKSAoc3RydWN0IHRhc2tfc3RydWN0ICogdHNrLCBpbnQgY2FwKTsKKwlpbnQgKCpxdW90YWN0bCkgKGludCBjbWRzLCBpbnQgdHlwZSwgaW50IGlkLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzYik7CisJaW50ICgqcXVvdGFfb24pIChzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5KTsKKwlpbnQgKCpzeXNsb2cpIChpbnQgdHlwZSk7CisJaW50ICgqc2V0dGltZSkgKHN0cnVjdCB0aW1lc3BlYyAqdHMsIHN0cnVjdCB0aW1lem9uZSAqdHopOworCWludCAoKnZtX2Vub3VnaF9tZW1vcnkpIChsb25nIHBhZ2VzKTsKKworCWludCAoKmJwcm1fYWxsb2Nfc2VjdXJpdHkpIChzdHJ1Y3QgbGludXhfYmlucHJtICogYnBybSk7CisJdm9pZCAoKmJwcm1fZnJlZV9zZWN1cml0eSkgKHN0cnVjdCBsaW51eF9iaW5wcm0gKiBicHJtKTsKKwl2b2lkICgqYnBybV9hcHBseV9jcmVkcykgKHN0cnVjdCBsaW51eF9iaW5wcm0gKiBicHJtLCBpbnQgdW5zYWZlKTsKKwl2b2lkICgqYnBybV9wb3N0X2FwcGx5X2NyZWRzKSAoc3RydWN0IGxpbnV4X2JpbnBybSAqIGJwcm0pOworCWludCAoKmJwcm1fc2V0X3NlY3VyaXR5KSAoc3RydWN0IGxpbnV4X2JpbnBybSAqIGJwcm0pOworCWludCAoKmJwcm1fY2hlY2tfc2VjdXJpdHkpIChzdHJ1Y3QgbGludXhfYmlucHJtICogYnBybSk7CisJaW50ICgqYnBybV9zZWN1cmVleGVjKSAoc3RydWN0IGxpbnV4X2JpbnBybSAqIGJwcm0pOworCisJaW50ICgqc2JfYWxsb2Nfc2VjdXJpdHkpIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzYik7CisJdm9pZCAoKnNiX2ZyZWVfc2VjdXJpdHkpIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzYik7CisJaW50ICgqc2JfY29weV9kYXRhKShzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqdHlwZSwKKwkJCSAgICB2b2lkICpvcmlnLCB2b2lkICpjb3B5KTsKKwlpbnQgKCpzYl9rZXJuX21vdW50KSAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdm9pZCAqZGF0YSk7CisJaW50ICgqc2Jfc3RhdGZzKSAoc3RydWN0IHN1cGVyX2Jsb2NrICogc2IpOworCWludCAoKnNiX21vdW50KSAoY2hhciAqZGV2X25hbWUsIHN0cnVjdCBuYW1laWRhdGEgKiBuZCwKKwkJCSBjaGFyICp0eXBlLCB1bnNpZ25lZCBsb25nIGZsYWdzLCB2b2lkICpkYXRhKTsKKwlpbnQgKCpzYl9jaGVja19zYikgKHN0cnVjdCB2ZnNtb3VudCAqIG1udCwgc3RydWN0IG5hbWVpZGF0YSAqIG5kKTsKKwlpbnQgKCpzYl91bW91bnQpIChzdHJ1Y3QgdmZzbW91bnQgKiBtbnQsIGludCBmbGFncyk7CisJdm9pZCAoKnNiX3Vtb3VudF9jbG9zZSkgKHN0cnVjdCB2ZnNtb3VudCAqIG1udCk7CisJdm9pZCAoKnNiX3Vtb3VudF9idXN5KSAoc3RydWN0IHZmc21vdW50ICogbW50KTsKKwl2b2lkICgqc2JfcG9zdF9yZW1vdW50KSAoc3RydWN0IHZmc21vdW50ICogbW50LAorCQkJCSB1bnNpZ25lZCBsb25nIGZsYWdzLCB2b2lkICpkYXRhKTsKKwl2b2lkICgqc2JfcG9zdF9tb3VudHJvb3QpICh2b2lkKTsKKwl2b2lkICgqc2JfcG9zdF9hZGRtb3VudCkgKHN0cnVjdCB2ZnNtb3VudCAqIG1udCwKKwkJCQkgIHN0cnVjdCBuYW1laWRhdGEgKiBtb3VudHBvaW50X25kKTsKKwlpbnQgKCpzYl9waXZvdHJvb3QpIChzdHJ1Y3QgbmFtZWlkYXRhICogb2xkX25kLAorCQkJICAgICBzdHJ1Y3QgbmFtZWlkYXRhICogbmV3X25kKTsKKwl2b2lkICgqc2JfcG9zdF9waXZvdHJvb3QpIChzdHJ1Y3QgbmFtZWlkYXRhICogb2xkX25kLAorCQkJCSAgIHN0cnVjdCBuYW1laWRhdGEgKiBuZXdfbmQpOworCisJaW50ICgqaW5vZGVfYWxsb2Nfc2VjdXJpdHkpIChzdHJ1Y3QgaW5vZGUgKmlub2RlKTsJCisJdm9pZCAoKmlub2RlX2ZyZWVfc2VjdXJpdHkpIChzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKKwlpbnQgKCppbm9kZV9jcmVhdGUpIChzdHJ1Y3QgaW5vZGUgKmRpciwKKwkgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBtb2RlKTsKKwl2b2lkICgqaW5vZGVfcG9zdF9jcmVhdGUpIChzdHJ1Y3QgaW5vZGUgKmRpciwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBtb2RlKTsKKwlpbnQgKCppbm9kZV9saW5rKSAoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKKwkgICAgICAgICAgICAgICAgICAgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpOworCXZvaWQgKCppbm9kZV9wb3N0X2xpbmspIChzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LAorCSAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSk7CisJaW50ICgqaW5vZGVfdW5saW5rKSAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7CisJaW50ICgqaW5vZGVfc3ltbGluaykgKHN0cnVjdCBpbm9kZSAqZGlyLAorCSAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm9sZF9uYW1lKTsKKwl2b2lkICgqaW5vZGVfcG9zdF9zeW1saW5rKSAoc3RydWN0IGlub2RlICpkaXIsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqb2xkX25hbWUpOworCWludCAoKmlub2RlX21rZGlyKSAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IG1vZGUpOworCXZvaWQgKCppbm9kZV9wb3N0X21rZGlyKSAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgCisJCQkgICAgaW50IG1vZGUpOworCWludCAoKmlub2RlX3JtZGlyKSAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7CisJaW50ICgqaW5vZGVfbWtub2QpIChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAorCSAgICAgICAgICAgICAgICAgICAgaW50IG1vZGUsIGRldl90IGRldik7CisJdm9pZCAoKmlub2RlX3Bvc3RfbWtub2QpIChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1vZGUsIGRldl90IGRldik7CisJaW50ICgqaW5vZGVfcmVuYW1lKSAoc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LAorCSAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpbm9kZSAqbmV3X2Rpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSk7CisJdm9pZCAoKmlub2RlX3Bvc3RfcmVuYW1lKSAoc3RydWN0IGlub2RlICpvbGRfZGlyLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGlub2RlICpuZXdfZGlyLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpOworCWludCAoKmlub2RlX3JlYWRsaW5rKSAoc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKKwlpbnQgKCppbm9kZV9mb2xsb3dfbGluaykgKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IG5hbWVpZGF0YSAqbmQpOworCWludCAoKmlub2RlX3Blcm1pc3Npb24pIChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaywgc3RydWN0IG5hbWVpZGF0YSAqbmQpOworCWludCAoKmlub2RlX3NldGF0dHIpCShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpYXR0ciAqYXR0cik7CisJaW50ICgqaW5vZGVfZ2V0YXR0cikgKHN0cnVjdCB2ZnNtb3VudCAqbW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOworICAgICAgICB2b2lkICgqaW5vZGVfZGVsZXRlKSAoc3RydWN0IGlub2RlICppbm9kZSk7CisJaW50ICgqaW5vZGVfc2V0eGF0dHIpIChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNoYXIgKm5hbWUsIHZvaWQgKnZhbHVlLAorCQkJICAgICAgIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpOworCXZvaWQgKCppbm9kZV9wb3N0X3NldHhhdHRyKSAoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjaGFyICpuYW1lLCB2b2lkICp2YWx1ZSwKKwkJCQkgICAgIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpOworCWludCAoKmlub2RlX2dldHhhdHRyKSAoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjaGFyICpuYW1lKTsKKwlpbnQgKCppbm9kZV9saXN0eGF0dHIpIChzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOworCWludCAoKmlub2RlX3JlbW92ZXhhdHRyKSAoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjaGFyICpuYW1lKTsKKyAgCWludCAoKmlub2RlX2dldHNlY3VyaXR5KShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKTsKKyAgCWludCAoKmlub2RlX3NldHNlY3VyaXR5KShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCB2b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUsIGludCBmbGFncyk7CisgIAlpbnQgKCppbm9kZV9saXN0c2VjdXJpdHkpKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmZlcl9zaXplKTsKKworCWludCAoKmZpbGVfcGVybWlzc2lvbikgKHN0cnVjdCBmaWxlICogZmlsZSwgaW50IG1hc2spOworCWludCAoKmZpbGVfYWxsb2Nfc2VjdXJpdHkpIChzdHJ1Y3QgZmlsZSAqIGZpbGUpOworCXZvaWQgKCpmaWxlX2ZyZWVfc2VjdXJpdHkpIChzdHJ1Y3QgZmlsZSAqIGZpbGUpOworCWludCAoKmZpbGVfaW9jdGwpIChzdHJ1Y3QgZmlsZSAqIGZpbGUsIHVuc2lnbmVkIGludCBjbWQsCisJCQkgICB1bnNpZ25lZCBsb25nIGFyZyk7CisJaW50ICgqZmlsZV9tbWFwKSAoc3RydWN0IGZpbGUgKiBmaWxlLAorCQkJICB1bnNpZ25lZCBsb25nIHJlcXByb3QsCisJCQkgIHVuc2lnbmVkIGxvbmcgcHJvdCwgdW5zaWduZWQgbG9uZyBmbGFncyk7CisJaW50ICgqZmlsZV9tcHJvdGVjdCkgKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIHZtYSwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgcmVxcHJvdCwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgcHJvdCk7CisJaW50ICgqZmlsZV9sb2NrKSAoc3RydWN0IGZpbGUgKiBmaWxlLCB1bnNpZ25lZCBpbnQgY21kKTsKKwlpbnQgKCpmaWxlX2ZjbnRsKSAoc3RydWN0IGZpbGUgKiBmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAorCQkJICAgdW5zaWduZWQgbG9uZyBhcmcpOworCWludCAoKmZpbGVfc2V0X2Zvd25lcikgKHN0cnVjdCBmaWxlICogZmlsZSk7CisJaW50ICgqZmlsZV9zZW5kX3NpZ2lvdGFzaykgKHN0cnVjdCB0YXNrX3N0cnVjdCAqIHRzaywKKwkJCQkgICAgc3RydWN0IGZvd25fc3RydWN0ICogZm93biwgaW50IHNpZyk7CisJaW50ICgqZmlsZV9yZWNlaXZlKSAoc3RydWN0IGZpbGUgKiBmaWxlKTsKKworCWludCAoKnRhc2tfY3JlYXRlKSAodW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncyk7CisJaW50ICgqdGFza19hbGxvY19zZWN1cml0eSkgKHN0cnVjdCB0YXNrX3N0cnVjdCAqIHApOworCXZvaWQgKCp0YXNrX2ZyZWVfc2VjdXJpdHkpIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBwKTsKKwlpbnQgKCp0YXNrX3NldHVpZCkgKHVpZF90IGlkMCwgdWlkX3QgaWQxLCB1aWRfdCBpZDIsIGludCBmbGFncyk7CisJaW50ICgqdGFza19wb3N0X3NldHVpZCkgKHVpZF90IG9sZF9ydWlkIC8qIG9yIGZzdWlkICovICwKKwkJCQkgdWlkX3Qgb2xkX2V1aWQsIHVpZF90IG9sZF9zdWlkLCBpbnQgZmxhZ3MpOworCWludCAoKnRhc2tfc2V0Z2lkKSAoZ2lkX3QgaWQwLCBnaWRfdCBpZDEsIGdpZF90IGlkMiwgaW50IGZsYWdzKTsKKwlpbnQgKCp0YXNrX3NldHBnaWQpIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBwLCBwaWRfdCBwZ2lkKTsKKwlpbnQgKCp0YXNrX2dldHBnaWQpIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBwKTsKKwlpbnQgKCp0YXNrX2dldHNpZCkgKHN0cnVjdCB0YXNrX3N0cnVjdCAqIHApOworCWludCAoKnRhc2tfc2V0Z3JvdXBzKSAoc3RydWN0IGdyb3VwX2luZm8gKmdyb3VwX2luZm8pOworCWludCAoKnRhc2tfc2V0bmljZSkgKHN0cnVjdCB0YXNrX3N0cnVjdCAqIHAsIGludCBuaWNlKTsKKwlpbnQgKCp0YXNrX3NldHJsaW1pdCkgKHVuc2lnbmVkIGludCByZXNvdXJjZSwgc3RydWN0IHJsaW1pdCAqIG5ld19ybGltKTsKKwlpbnQgKCp0YXNrX3NldHNjaGVkdWxlcikgKHN0cnVjdCB0YXNrX3N0cnVjdCAqIHAsIGludCBwb2xpY3ksCisJCQkJICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKiBscCk7CisJaW50ICgqdGFza19nZXRzY2hlZHVsZXIpIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBwKTsKKwlpbnQgKCp0YXNrX2tpbGwpIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBwLAorCQkJICBzdHJ1Y3Qgc2lnaW5mbyAqIGluZm8sIGludCBzaWcpOworCWludCAoKnRhc2tfd2FpdCkgKHN0cnVjdCB0YXNrX3N0cnVjdCAqIHApOworCWludCAoKnRhc2tfcHJjdGwpIChpbnQgb3B0aW9uLCB1bnNpZ25lZCBsb25nIGFyZzIsCisJCQkgICB1bnNpZ25lZCBsb25nIGFyZzMsIHVuc2lnbmVkIGxvbmcgYXJnNCwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgYXJnNSk7CisJdm9pZCAoKnRhc2tfcmVwYXJlbnRfdG9faW5pdCkgKHN0cnVjdCB0YXNrX3N0cnVjdCAqIHApOworCXZvaWQgKCp0YXNrX3RvX2lub2RlKShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpOworCisJaW50ICgqaXBjX3Blcm1pc3Npb24pIChzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqIGlwY3AsIHNob3J0IGZsYWcpOworCisJaW50ICgqbXNnX21zZ19hbGxvY19zZWN1cml0eSkgKHN0cnVjdCBtc2dfbXNnICogbXNnKTsKKwl2b2lkICgqbXNnX21zZ19mcmVlX3NlY3VyaXR5KSAoc3RydWN0IG1zZ19tc2cgKiBtc2cpOworCisJaW50ICgqbXNnX3F1ZXVlX2FsbG9jX3NlY3VyaXR5KSAoc3RydWN0IG1zZ19xdWV1ZSAqIG1zcSk7CisJdm9pZCAoKm1zZ19xdWV1ZV9mcmVlX3NlY3VyaXR5KSAoc3RydWN0IG1zZ19xdWV1ZSAqIG1zcSk7CisJaW50ICgqbXNnX3F1ZXVlX2Fzc29jaWF0ZSkgKHN0cnVjdCBtc2dfcXVldWUgKiBtc3EsIGludCBtc3FmbGcpOworCWludCAoKm1zZ19xdWV1ZV9tc2djdGwpIChzdHJ1Y3QgbXNnX3F1ZXVlICogbXNxLCBpbnQgY21kKTsKKwlpbnQgKCptc2dfcXVldWVfbXNnc25kKSAoc3RydWN0IG1zZ19xdWV1ZSAqIG1zcSwKKwkJCQkgc3RydWN0IG1zZ19tc2cgKiBtc2csIGludCBtc3FmbGcpOworCWludCAoKm1zZ19xdWV1ZV9tc2dyY3YpIChzdHJ1Y3QgbXNnX3F1ZXVlICogbXNxLAorCQkJCSBzdHJ1Y3QgbXNnX21zZyAqIG1zZywKKwkJCQkgc3RydWN0IHRhc2tfc3RydWN0ICogdGFyZ2V0LAorCQkJCSBsb25nIHR5cGUsIGludCBtb2RlKTsKKworCWludCAoKnNobV9hbGxvY19zZWN1cml0eSkgKHN0cnVjdCBzaG1pZF9rZXJuZWwgKiBzaHApOworCXZvaWQgKCpzaG1fZnJlZV9zZWN1cml0eSkgKHN0cnVjdCBzaG1pZF9rZXJuZWwgKiBzaHApOworCWludCAoKnNobV9hc3NvY2lhdGUpIChzdHJ1Y3Qgc2htaWRfa2VybmVsICogc2hwLCBpbnQgc2htZmxnKTsKKwlpbnQgKCpzaG1fc2htY3RsKSAoc3RydWN0IHNobWlkX2tlcm5lbCAqIHNocCwgaW50IGNtZCk7CisJaW50ICgqc2htX3NobWF0KSAoc3RydWN0IHNobWlkX2tlcm5lbCAqIHNocCwgCisJCQkgIGNoYXIgX191c2VyICpzaG1hZGRyLCBpbnQgc2htZmxnKTsKKworCWludCAoKnNlbV9hbGxvY19zZWN1cml0eSkgKHN0cnVjdCBzZW1fYXJyYXkgKiBzbWEpOworCXZvaWQgKCpzZW1fZnJlZV9zZWN1cml0eSkgKHN0cnVjdCBzZW1fYXJyYXkgKiBzbWEpOworCWludCAoKnNlbV9hc3NvY2lhdGUpIChzdHJ1Y3Qgc2VtX2FycmF5ICogc21hLCBpbnQgc2VtZmxnKTsKKwlpbnQgKCpzZW1fc2VtY3RsKSAoc3RydWN0IHNlbV9hcnJheSAqIHNtYSwgaW50IGNtZCk7CisJaW50ICgqc2VtX3NlbW9wKSAoc3RydWN0IHNlbV9hcnJheSAqIHNtYSwgCisJCQkgIHN0cnVjdCBzZW1idWYgKiBzb3BzLCB1bnNpZ25lZCBuc29wcywgaW50IGFsdGVyKTsKKworCWludCAoKm5ldGxpbmtfc2VuZCkgKHN0cnVjdCBzb2NrICogc2ssIHN0cnVjdCBza19idWZmICogc2tiKTsKKwlpbnQgKCpuZXRsaW5rX3JlY3YpIChzdHJ1Y3Qgc2tfYnVmZiAqIHNrYik7CisKKwkvKiBhbGxvdyBtb2R1bGUgc3RhY2tpbmcgKi8KKwlpbnQgKCpyZWdpc3Rlcl9zZWN1cml0eSkgKGNvbnN0IGNoYXIgKm5hbWUsCisJICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2VjdXJpdHlfb3BlcmF0aW9ucyAqb3BzKTsKKwlpbnQgKCp1bnJlZ2lzdGVyX3NlY3VyaXR5KSAoY29uc3QgY2hhciAqbmFtZSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNlY3VyaXR5X29wZXJhdGlvbnMgKm9wcyk7CisKKwl2b2lkICgqZF9pbnN0YW50aWF0ZSkgKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSk7CisKKyAJaW50ICgqZ2V0cHJvY2F0dHIpKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgY2hhciAqbmFtZSwgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplKTsKKyAJaW50ICgqc2V0cHJvY2F0dHIpKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgY2hhciAqbmFtZSwgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplKTsKKworI2lmZGVmIENPTkZJR19TRUNVUklUWV9ORVRXT1JLCisJaW50ICgqdW5peF9zdHJlYW1fY29ubmVjdCkgKHN0cnVjdCBzb2NrZXQgKiBzb2NrLAorCQkJCSAgICBzdHJ1Y3Qgc29ja2V0ICogb3RoZXIsIHN0cnVjdCBzb2NrICogbmV3c2spOworCWludCAoKnVuaXhfbWF5X3NlbmQpIChzdHJ1Y3Qgc29ja2V0ICogc29jaywgc3RydWN0IHNvY2tldCAqIG90aGVyKTsKKworCWludCAoKnNvY2tldF9jcmVhdGUpIChpbnQgZmFtaWx5LCBpbnQgdHlwZSwgaW50IHByb3RvY29sLCBpbnQga2Vybik7CisJdm9pZCAoKnNvY2tldF9wb3N0X2NyZWF0ZSkgKHN0cnVjdCBzb2NrZXQgKiBzb2NrLCBpbnQgZmFtaWx5LAorCQkJCSAgICBpbnQgdHlwZSwgaW50IHByb3RvY29sLCBpbnQga2Vybik7CisJaW50ICgqc29ja2V0X2JpbmQpIChzdHJ1Y3Qgc29ja2V0ICogc29jaywKKwkJCSAgICBzdHJ1Y3Qgc29ja2FkZHIgKiBhZGRyZXNzLCBpbnQgYWRkcmxlbik7CisJaW50ICgqc29ja2V0X2Nvbm5lY3QpIChzdHJ1Y3Qgc29ja2V0ICogc29jaywKKwkJCSAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKiBhZGRyZXNzLCBpbnQgYWRkcmxlbik7CisJaW50ICgqc29ja2V0X2xpc3RlbikgKHN0cnVjdCBzb2NrZXQgKiBzb2NrLCBpbnQgYmFja2xvZyk7CisJaW50ICgqc29ja2V0X2FjY2VwdCkgKHN0cnVjdCBzb2NrZXQgKiBzb2NrLCBzdHJ1Y3Qgc29ja2V0ICogbmV3c29jayk7CisJdm9pZCAoKnNvY2tldF9wb3N0X2FjY2VwdCkgKHN0cnVjdCBzb2NrZXQgKiBzb2NrLAorCQkJCSAgICBzdHJ1Y3Qgc29ja2V0ICogbmV3c29jayk7CisJaW50ICgqc29ja2V0X3NlbmRtc2cpIChzdHJ1Y3Qgc29ja2V0ICogc29jaywKKwkJCSAgICAgICBzdHJ1Y3QgbXNnaGRyICogbXNnLCBpbnQgc2l6ZSk7CisJaW50ICgqc29ja2V0X3JlY3Ztc2cpIChzdHJ1Y3Qgc29ja2V0ICogc29jaywKKwkJCSAgICAgICBzdHJ1Y3QgbXNnaGRyICogbXNnLCBpbnQgc2l6ZSwgaW50IGZsYWdzKTsKKwlpbnQgKCpzb2NrZXRfZ2V0c29ja25hbWUpIChzdHJ1Y3Qgc29ja2V0ICogc29jayk7CisJaW50ICgqc29ja2V0X2dldHBlZXJuYW1lKSAoc3RydWN0IHNvY2tldCAqIHNvY2spOworCWludCAoKnNvY2tldF9nZXRzb2Nrb3B0KSAoc3RydWN0IHNvY2tldCAqIHNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUpOworCWludCAoKnNvY2tldF9zZXRzb2Nrb3B0KSAoc3RydWN0IHNvY2tldCAqIHNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUpOworCWludCAoKnNvY2tldF9zaHV0ZG93bikgKHN0cnVjdCBzb2NrZXQgKiBzb2NrLCBpbnQgaG93KTsKKwlpbnQgKCpzb2NrZXRfc29ja19yY3Zfc2tiKSAoc3RydWN0IHNvY2sgKiBzaywgc3RydWN0IHNrX2J1ZmYgKiBza2IpOworCWludCAoKnNvY2tldF9nZXRwZWVyc2VjKSAoc3RydWN0IHNvY2tldCAqc29jaywgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuLCB1bnNpZ25lZCBsZW4pOworCWludCAoKnNrX2FsbG9jX3NlY3VyaXR5KSAoc3RydWN0IHNvY2sgKnNrLCBpbnQgZmFtaWx5LCBpbnQgcHJpb3JpdHkpOworCXZvaWQgKCpza19mcmVlX3NlY3VyaXR5KSAoc3RydWN0IHNvY2sgKnNrKTsKKyNlbmRpZgkvKiBDT05GSUdfU0VDVVJJVFlfTkVUV09SSyAqLworfTsKKworLyogZ2xvYmFsIHZhcmlhYmxlcyAqLworZXh0ZXJuIHN0cnVjdCBzZWN1cml0eV9vcGVyYXRpb25zICpzZWN1cml0eV9vcHM7CisKKy8qIGlubGluZSBzdHVmZiAqLworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfcHRyYWNlIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBwYXJlbnQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqIGNoaWxkKQoreworCXJldHVybiBzZWN1cml0eV9vcHMtPnB0cmFjZSAocGFyZW50LCBjaGlsZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2NhcGdldCAoc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsCisJCQkJICAga2VybmVsX2NhcF90ICplZmZlY3RpdmUsCisJCQkJICAga2VybmVsX2NhcF90ICppbmhlcml0YWJsZSwKKwkJCQkgICBrZXJuZWxfY2FwX3QgKnBlcm1pdHRlZCkKK3sKKwlyZXR1cm4gc2VjdXJpdHlfb3BzLT5jYXBnZXQgKHRhcmdldCwgZWZmZWN0aXZlLCBpbmhlcml0YWJsZSwgcGVybWl0dGVkKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfY2Fwc2V0X2NoZWNrIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwKKwkJCQkJIGtlcm5lbF9jYXBfdCAqZWZmZWN0aXZlLAorCQkJCQkga2VybmVsX2NhcF90ICppbmhlcml0YWJsZSwKKwkJCQkJIGtlcm5lbF9jYXBfdCAqcGVybWl0dGVkKQoreworCXJldHVybiBzZWN1cml0eV9vcHMtPmNhcHNldF9jaGVjayAodGFyZ2V0LCBlZmZlY3RpdmUsIGluaGVyaXRhYmxlLCBwZXJtaXR0ZWQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2VjdXJpdHlfY2Fwc2V0X3NldCAoc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsCisJCQkJCWtlcm5lbF9jYXBfdCAqZWZmZWN0aXZlLAorCQkJCQlrZXJuZWxfY2FwX3QgKmluaGVyaXRhYmxlLAorCQkJCQlrZXJuZWxfY2FwX3QgKnBlcm1pdHRlZCkKK3sKKwlzZWN1cml0eV9vcHMtPmNhcHNldF9zZXQgKHRhcmdldCwgZWZmZWN0aXZlLCBpbmhlcml0YWJsZSwgcGVybWl0dGVkKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfYWNjdCAoc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNlY3VyaXR5X29wcy0+YWNjdCAoZmlsZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3N5c2N0bChzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IG9wKQoreworCXJldHVybiBzZWN1cml0eV9vcHMtPnN5c2N0bCh0YWJsZSwgb3ApOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9xdW90YWN0bCAoaW50IGNtZHMsIGludCB0eXBlLCBpbnQgaWQsCisJCQkJICAgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCXJldHVybiBzZWN1cml0eV9vcHMtPnF1b3RhY3RsIChjbWRzLCB0eXBlLCBpZCwgc2IpOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9xdW90YV9vbiAoc3RydWN0IGRlbnRyeSAqIGRlbnRyeSkKK3sKKwlyZXR1cm4gc2VjdXJpdHlfb3BzLT5xdW90YV9vbiAoZGVudHJ5KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfc3lzbG9nKGludCB0eXBlKQoreworCXJldHVybiBzZWN1cml0eV9vcHMtPnN5c2xvZyh0eXBlKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfc2V0dGltZShzdHJ1Y3QgdGltZXNwZWMgKnRzLCBzdHJ1Y3QgdGltZXpvbmUgKnR6KQoreworCXJldHVybiBzZWN1cml0eV9vcHMtPnNldHRpbWUodHMsIHR6KTsKK30KKworCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV92bV9lbm91Z2hfbWVtb3J5KGxvbmcgcGFnZXMpCit7CisJcmV0dXJuIHNlY3VyaXR5X29wcy0+dm1fZW5vdWdoX21lbW9yeShwYWdlcyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2Jwcm1fYWxsb2MgKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pCit7CisJcmV0dXJuIHNlY3VyaXR5X29wcy0+YnBybV9hbGxvY19zZWN1cml0eSAoYnBybSk7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgc2VjdXJpdHlfYnBybV9mcmVlIChzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKQoreworCXNlY3VyaXR5X29wcy0+YnBybV9mcmVlX3NlY3VyaXR5IChicHJtKTsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBzZWN1cml0eV9icHJtX2FwcGx5X2NyZWRzIChzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLCBpbnQgdW5zYWZlKQoreworCXNlY3VyaXR5X29wcy0+YnBybV9hcHBseV9jcmVkcyAoYnBybSwgdW5zYWZlKTsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBzZWN1cml0eV9icHJtX3Bvc3RfYXBwbHlfY3JlZHMgKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pCit7CisJc2VjdXJpdHlfb3BzLT5icHJtX3Bvc3RfYXBwbHlfY3JlZHMgKGJwcm0pOworfQorc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfYnBybV9zZXQgKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pCit7CisJcmV0dXJuIHNlY3VyaXR5X29wcy0+YnBybV9zZXRfc2VjdXJpdHkgKGJwcm0pOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9icHJtX2NoZWNrIChzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKQoreworCXJldHVybiBzZWN1cml0eV9vcHMtPmJwcm1fY2hlY2tfc2VjdXJpdHkgKGJwcm0pOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9icHJtX3NlY3VyZWV4ZWMgKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pCit7CisJcmV0dXJuIHNlY3VyaXR5X29wcy0+YnBybV9zZWN1cmVleGVjIChicHJtKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfc2JfYWxsb2MgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJcmV0dXJuIHNlY3VyaXR5X29wcy0+c2JfYWxsb2Nfc2VjdXJpdHkgKHNiKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNlY3VyaXR5X3NiX2ZyZWUgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJc2VjdXJpdHlfb3BzLT5zYl9mcmVlX3NlY3VyaXR5IChzYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3NiX2NvcHlfZGF0YSAoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKnR5cGUsCisJCQkJCSB2b2lkICpvcmlnLCB2b2lkICpjb3B5KQoreworCXJldHVybiBzZWN1cml0eV9vcHMtPnNiX2NvcHlfZGF0YSAodHlwZSwgb3JpZywgY29weSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3NiX2tlcm5fbW91bnQgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHZvaWQgKmRhdGEpCit7CisJcmV0dXJuIHNlY3VyaXR5X29wcy0+c2Jfa2Vybl9tb3VudCAoc2IsIGRhdGEpOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9zYl9zdGF0ZnMgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJcmV0dXJuIHNlY3VyaXR5X29wcy0+c2Jfc3RhdGZzIChzYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3NiX21vdW50IChjaGFyICpkZXZfbmFtZSwgc3RydWN0IG5hbWVpZGF0YSAqbmQsCisJCQkJICAgIGNoYXIgKnR5cGUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCisJCQkJICAgIHZvaWQgKmRhdGEpCit7CisJcmV0dXJuIHNlY3VyaXR5X29wcy0+c2JfbW91bnQgKGRldl9uYW1lLCBuZCwgdHlwZSwgZmxhZ3MsIGRhdGEpOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9zYl9jaGVja19zYiAoc3RydWN0IHZmc21vdW50ICptbnQsCisJCQkJCXN0cnVjdCBuYW1laWRhdGEgKm5kKQoreworCXJldHVybiBzZWN1cml0eV9vcHMtPnNiX2NoZWNrX3NiIChtbnQsIG5kKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfc2JfdW1vdW50IChzdHJ1Y3QgdmZzbW91bnQgKm1udCwgaW50IGZsYWdzKQoreworCXJldHVybiBzZWN1cml0eV9vcHMtPnNiX3Vtb3VudCAobW50LCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZWN1cml0eV9zYl91bW91bnRfY2xvc2UgKHN0cnVjdCB2ZnNtb3VudCAqbW50KQoreworCXNlY3VyaXR5X29wcy0+c2JfdW1vdW50X2Nsb3NlIChtbnQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2VjdXJpdHlfc2JfdW1vdW50X2J1c3kgKHN0cnVjdCB2ZnNtb3VudCAqbW50KQoreworCXNlY3VyaXR5X29wcy0+c2JfdW1vdW50X2J1c3kgKG1udCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZWN1cml0eV9zYl9wb3N0X3JlbW91bnQgKHN0cnVjdCB2ZnNtb3VudCAqbW50LAorCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZvaWQgKmRhdGEpCit7CisJc2VjdXJpdHlfb3BzLT5zYl9wb3N0X3JlbW91bnQgKG1udCwgZmxhZ3MsIGRhdGEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2VjdXJpdHlfc2JfcG9zdF9tb3VudHJvb3QgKHZvaWQpCit7CisJc2VjdXJpdHlfb3BzLT5zYl9wb3N0X21vdW50cm9vdCAoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNlY3VyaXR5X3NiX3Bvc3RfYWRkbW91bnQgKHN0cnVjdCB2ZnNtb3VudCAqbW50LAorCQkJCQkgICAgICBzdHJ1Y3QgbmFtZWlkYXRhICptb3VudHBvaW50X25kKQoreworCXNlY3VyaXR5X29wcy0+c2JfcG9zdF9hZGRtb3VudCAobW50LCBtb3VudHBvaW50X25kKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfc2JfcGl2b3Ryb290IChzdHJ1Y3QgbmFtZWlkYXRhICpvbGRfbmQsCisJCQkJCSBzdHJ1Y3QgbmFtZWlkYXRhICpuZXdfbmQpCit7CisJcmV0dXJuIHNlY3VyaXR5X29wcy0+c2JfcGl2b3Ryb290IChvbGRfbmQsIG5ld19uZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZWN1cml0eV9zYl9wb3N0X3Bpdm90cm9vdCAoc3RydWN0IG5hbWVpZGF0YSAqb2xkX25kLAorCQkJCQkgICAgICAgc3RydWN0IG5hbWVpZGF0YSAqbmV3X25kKQoreworCXNlY3VyaXR5X29wcy0+c2JfcG9zdF9waXZvdHJvb3QgKG9sZF9uZCwgbmV3X25kKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfYWxsb2MgKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJaWYgKHVubGlrZWx5IChJU19QUklWQVRFIChpbm9kZSkpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gc2VjdXJpdHlfb3BzLT5pbm9kZV9hbGxvY19zZWN1cml0eSAoaW5vZGUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2VjdXJpdHlfaW5vZGVfZnJlZSAoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlpZiAodW5saWtlbHkgKElTX1BSSVZBVEUgKGlub2RlKSkpCisJCXJldHVybjsKKwlzZWN1cml0eV9vcHMtPmlub2RlX2ZyZWVfc2VjdXJpdHkgKGlub2RlKTsKK30KKwkKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZSAoc3RydWN0IGlub2RlICpkaXIsCisJCQkJCSBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCisJCQkJCSBpbnQgbW9kZSkKK3sKKwlpZiAodW5saWtlbHkgKElTX1BSSVZBVEUgKGRpcikpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gc2VjdXJpdHlfb3BzLT5pbm9kZV9jcmVhdGUgKGRpciwgZGVudHJ5LCBtb2RlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNlY3VyaXR5X2lub2RlX3Bvc3RfY3JlYXRlIChzdHJ1Y3QgaW5vZGUgKmRpciwKKwkJCQkJICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKKwkJCQkJICAgICAgIGludCBtb2RlKQoreworCWlmIChkZW50cnktPmRfaW5vZGUgJiYgdW5saWtlbHkgKElTX1BSSVZBVEUgKGRlbnRyeS0+ZF9pbm9kZSkpKQorCQlyZXR1cm47CisJc2VjdXJpdHlfb3BzLT5pbm9kZV9wb3N0X2NyZWF0ZSAoZGlyLCBkZW50cnksIG1vZGUpOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9saW5rIChzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LAorCQkJCSAgICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwKKwkJCQkgICAgICAgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKK3sKKwlpZiAodW5saWtlbHkgKElTX1BSSVZBVEUgKG9sZF9kZW50cnktPmRfaW5vZGUpKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHNlY3VyaXR5X29wcy0+aW5vZGVfbGluayAob2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNlY3VyaXR5X2lub2RlX3Bvc3RfbGluayAoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKKwkJCQkJICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwKKwkJCQkJICAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQoreworCWlmIChuZXdfZGVudHJ5LT5kX2lub2RlICYmIHVubGlrZWx5IChJU19QUklWQVRFIChuZXdfZGVudHJ5LT5kX2lub2RlKSkpCisJCXJldHVybjsKKwlzZWN1cml0eV9vcHMtPmlub2RlX3Bvc3RfbGluayAob2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfdW5saW5rIChzdHJ1Y3QgaW5vZGUgKmRpciwKKwkJCQkJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwlpZiAodW5saWtlbHkgKElTX1BSSVZBVEUgKGRlbnRyeS0+ZF9pbm9kZSkpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gc2VjdXJpdHlfb3BzLT5pbm9kZV91bmxpbmsgKGRpciwgZGVudHJ5KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayAoc3RydWN0IGlub2RlICpkaXIsCisJCQkJCSAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAorCQkJCQkgIGNvbnN0IGNoYXIgKm9sZF9uYW1lKQoreworCWlmICh1bmxpa2VseSAoSVNfUFJJVkFURSAoZGlyKSkpCisJCXJldHVybiAwOworCXJldHVybiBzZWN1cml0eV9vcHMtPmlub2RlX3N5bWxpbmsgKGRpciwgZGVudHJ5LCBvbGRfbmFtZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X3N5bWxpbmsgKHN0cnVjdCBpbm9kZSAqZGlyLAorCQkJCQkJc3RydWN0IGRlbnRyeSAqZGVudHJ5LAorCQkJCQkJY29uc3QgY2hhciAqb2xkX25hbWUpCit7CisJaWYgKGRlbnRyeS0+ZF9pbm9kZSAmJiB1bmxpa2VseSAoSVNfUFJJVkFURSAoZGVudHJ5LT5kX2lub2RlKSkpCisJCXJldHVybjsKKwlzZWN1cml0eV9vcHMtPmlub2RlX3Bvc3Rfc3ltbGluayAoZGlyLCBkZW50cnksIG9sZF9uYW1lKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIgKHN0cnVjdCBpbm9kZSAqZGlyLAorCQkJCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCisJCQkJCWludCBtb2RlKQoreworCWlmICh1bmxpa2VseSAoSVNfUFJJVkFURSAoZGlyKSkpCisJCXJldHVybiAwOworCXJldHVybiBzZWN1cml0eV9vcHMtPmlub2RlX21rZGlyIChkaXIsIGRlbnRyeSwgbW9kZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X21rZGlyIChzdHJ1Y3QgaW5vZGUgKmRpciwKKwkJCQkJICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAorCQkJCQkgICAgICBpbnQgbW9kZSkKK3sKKwlpZiAoZGVudHJ5LT5kX2lub2RlICYmIHVubGlrZWx5IChJU19QUklWQVRFIChkZW50cnktPmRfaW5vZGUpKSkKKwkJcmV0dXJuOworCXNlY3VyaXR5X29wcy0+aW5vZGVfcG9zdF9ta2RpciAoZGlyLCBkZW50cnksIG1vZGUpOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ybWRpciAoc3RydWN0IGlub2RlICpkaXIsCisJCQkJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwlpZiAodW5saWtlbHkgKElTX1BSSVZBVEUgKGRlbnRyeS0+ZF9pbm9kZSkpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gc2VjdXJpdHlfb3BzLT5pbm9kZV9ybWRpciAoZGlyLCBkZW50cnkpOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ta25vZCAoc3RydWN0IGlub2RlICpkaXIsCisJCQkJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSwKKwkJCQkJaW50IG1vZGUsIGRldl90IGRldikKK3sKKwlpZiAodW5saWtlbHkgKElTX1BSSVZBVEUgKGRpcikpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gc2VjdXJpdHlfb3BzLT5pbm9kZV9ta25vZCAoZGlyLCBkZW50cnksIG1vZGUsIGRldik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X21rbm9kIChzdHJ1Y3QgaW5vZGUgKmRpciwKKwkJCQkJICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAorCQkJCQkgICAgICBpbnQgbW9kZSwgZGV2X3QgZGV2KQoreworCWlmIChkZW50cnktPmRfaW5vZGUgJiYgdW5saWtlbHkgKElTX1BSSVZBVEUgKGRlbnRyeS0+ZF9pbm9kZSkpKQorCQlyZXR1cm47CisJc2VjdXJpdHlfb3BzLT5pbm9kZV9wb3N0X21rbm9kIChkaXIsIGRlbnRyeSwgbW9kZSwgZGV2KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfcmVuYW1lIChzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsCisJCQkJCSBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LAorCQkJCQkgc3RydWN0IGlub2RlICpuZXdfZGlyLAorCQkJCQkgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKK3sKKyAgICAgICAgaWYgKHVubGlrZWx5IChJU19QUklWQVRFIChvbGRfZGVudHJ5LT5kX2lub2RlKSB8fAorICAgICAgICAgICAgKG5ld19kZW50cnktPmRfaW5vZGUgJiYgSVNfUFJJVkFURSAobmV3X2RlbnRyeS0+ZF9pbm9kZSkpKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHNlY3VyaXR5X29wcy0+aW5vZGVfcmVuYW1lIChvbGRfZGlyLCBvbGRfZGVudHJ5LAorCQkJCQkgICBuZXdfZGlyLCBuZXdfZGVudHJ5KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNlY3VyaXR5X2lub2RlX3Bvc3RfcmVuYW1lIChzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsCisJCQkJCSAgICAgICBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LAorCQkJCQkgICAgICAgc3RydWN0IGlub2RlICpuZXdfZGlyLAorCQkJCQkgICAgICAgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKK3sKKwlpZiAodW5saWtlbHkgKElTX1BSSVZBVEUgKG9sZF9kZW50cnktPmRfaW5vZGUpIHx8CisJICAgIChuZXdfZGVudHJ5LT5kX2lub2RlICYmIElTX1BSSVZBVEUgKG5ld19kZW50cnktPmRfaW5vZGUpKSkpCisJCXJldHVybjsKKwlzZWN1cml0eV9vcHMtPmlub2RlX3Bvc3RfcmVuYW1lIChvbGRfZGlyLCBvbGRfZGVudHJ5LAorCQkJCQkJbmV3X2RpciwgbmV3X2RlbnRyeSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3JlYWRsaW5rIChzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJaWYgKHVubGlrZWx5IChJU19QUklWQVRFIChkZW50cnktPmRfaW5vZGUpKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHNlY3VyaXR5X29wcy0+aW5vZGVfcmVhZGxpbmsgKGRlbnRyeSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rIChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCisJCQkJCSAgICAgIHN0cnVjdCBuYW1laWRhdGEgKm5kKQoreworCWlmICh1bmxpa2VseSAoSVNfUFJJVkFURSAoZGVudHJ5LT5kX2lub2RlKSkpCisJCXJldHVybiAwOworCXJldHVybiBzZWN1cml0eV9vcHMtPmlub2RlX2ZvbGxvd19saW5rIChkZW50cnksIG5kKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbiAoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2ssCisJCQkJCSAgICAgc3RydWN0IG5hbWVpZGF0YSAqbmQpCit7CisJaWYgKHVubGlrZWx5IChJU19QUklWQVRFIChpbm9kZSkpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gc2VjdXJpdHlfb3BzLT5pbm9kZV9wZXJtaXNzaW9uIChpbm9kZSwgbWFzaywgbmQpOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9zZXRhdHRyIChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCisJCQkJCSAgc3RydWN0IGlhdHRyICphdHRyKQoreworCWlmICh1bmxpa2VseSAoSVNfUFJJVkFURSAoZGVudHJ5LT5kX2lub2RlKSkpCisJCXJldHVybiAwOworCXJldHVybiBzZWN1cml0eV9vcHMtPmlub2RlX3NldGF0dHIgKGRlbnRyeSwgYXR0cik7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2dldGF0dHIgKHN0cnVjdCB2ZnNtb3VudCAqbW50LAorCQkJCQkgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwlpZiAodW5saWtlbHkgKElTX1BSSVZBVEUgKGRlbnRyeS0+ZF9pbm9kZSkpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gc2VjdXJpdHlfb3BzLT5pbm9kZV9nZXRhdHRyIChtbnQsIGRlbnRyeSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZWN1cml0eV9pbm9kZV9kZWxldGUgKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJaWYgKHVubGlrZWx5IChJU19QUklWQVRFIChpbm9kZSkpKQorCQlyZXR1cm47CisJc2VjdXJpdHlfb3BzLT5pbm9kZV9kZWxldGUgKGlub2RlKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfc2V0eGF0dHIgKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciAqbmFtZSwKKwkJCQkJICAgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCit7CisJaWYgKHVubGlrZWx5IChJU19QUklWQVRFIChkZW50cnktPmRfaW5vZGUpKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHNlY3VyaXR5X29wcy0+aW5vZGVfc2V0eGF0dHIgKGRlbnRyeSwgbmFtZSwgdmFsdWUsIHNpemUsIGZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNlY3VyaXR5X2lub2RlX3Bvc3Rfc2V0eGF0dHIgKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciAqbmFtZSwKKwkJCQkJCXZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQoreworCWlmICh1bmxpa2VseSAoSVNfUFJJVkFURSAoZGVudHJ5LT5kX2lub2RlKSkpCisJCXJldHVybjsKKwlzZWN1cml0eV9vcHMtPmlub2RlX3Bvc3Rfc2V0eGF0dHIgKGRlbnRyeSwgbmFtZSwgdmFsdWUsIHNpemUsIGZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfZ2V0eGF0dHIgKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciAqbmFtZSkKK3sKKwlpZiAodW5saWtlbHkgKElTX1BSSVZBVEUgKGRlbnRyeS0+ZF9pbm9kZSkpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gc2VjdXJpdHlfb3BzLT5pbm9kZV9nZXR4YXR0ciAoZGVudHJ5LCBuYW1lKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfbGlzdHhhdHRyIChzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJaWYgKHVubGlrZWx5IChJU19QUklWQVRFIChkZW50cnktPmRfaW5vZGUpKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHNlY3VyaXR5X29wcy0+aW5vZGVfbGlzdHhhdHRyIChkZW50cnkpOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9yZW1vdmV4YXR0ciAoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjaGFyICpuYW1lKQoreworCWlmICh1bmxpa2VseSAoSVNfUFJJVkFURSAoZGVudHJ5LT5kX2lub2RlKSkpCisJCXJldHVybiAwOworCXJldHVybiBzZWN1cml0eV9vcHMtPmlub2RlX3JlbW92ZXhhdHRyIChkZW50cnksIG5hbWUpOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9nZXRzZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQoreworCWlmICh1bmxpa2VseSAoSVNfUFJJVkFURSAoaW5vZGUpKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHNlY3VyaXR5X29wcy0+aW5vZGVfZ2V0c2VjdXJpdHkoaW5vZGUsIG5hbWUsIGJ1ZmZlciwgc2l6ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3NldHNlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQoreworCWlmICh1bmxpa2VseSAoSVNfUFJJVkFURSAoaW5vZGUpKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHNlY3VyaXR5X29wcy0+aW5vZGVfc2V0c2VjdXJpdHkoaW5vZGUsIG5hbWUsIHZhbHVlLCBzaXplLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2xpc3RzZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjaGFyICpidWZmZXIsIHNpemVfdCBidWZmZXJfc2l6ZSkKK3sKKwlpZiAodW5saWtlbHkgKElTX1BSSVZBVEUgKGlub2RlKSkpCisJCXJldHVybiAwOworCXJldHVybiBzZWN1cml0eV9vcHMtPmlub2RlX2xpc3RzZWN1cml0eShpbm9kZSwgYnVmZmVyLCBidWZmZXJfc2l6ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2ZpbGVfcGVybWlzc2lvbiAoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtYXNrKQoreworCXJldHVybiBzZWN1cml0eV9vcHMtPmZpbGVfcGVybWlzc2lvbiAoZmlsZSwgbWFzayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2ZpbGVfYWxsb2MgKHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzZWN1cml0eV9vcHMtPmZpbGVfYWxsb2Nfc2VjdXJpdHkgKGZpbGUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2VjdXJpdHlfZmlsZV9mcmVlIChzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzZWN1cml0eV9vcHMtPmZpbGVfZnJlZV9zZWN1cml0eSAoZmlsZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2ZpbGVfaW9jdGwgKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAorCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlyZXR1cm4gc2VjdXJpdHlfb3BzLT5maWxlX2lvY3RsIChmaWxlLCBjbWQsIGFyZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2ZpbGVfbW1hcCAoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgcmVxcHJvdCwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIHByb3QsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlyZXR1cm4gc2VjdXJpdHlfb3BzLT5maWxlX21tYXAgKGZpbGUsIHJlcXByb3QsIHByb3QsIGZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfZmlsZV9tcHJvdGVjdCAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQkJCSAgdW5zaWduZWQgbG9uZyByZXFwcm90LAorCQkJCQkgIHVuc2lnbmVkIGxvbmcgcHJvdCkKK3sKKwlyZXR1cm4gc2VjdXJpdHlfb3BzLT5maWxlX21wcm90ZWN0ICh2bWEsIHJlcXByb3QsIHByb3QpOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9maWxlX2xvY2sgKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kKQoreworCXJldHVybiBzZWN1cml0eV9vcHMtPmZpbGVfbG9jayAoZmlsZSwgY21kKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfZmlsZV9mY250bCAoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXJldHVybiBzZWN1cml0eV9vcHMtPmZpbGVfZmNudGwgKGZpbGUsIGNtZCwgYXJnKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfZmlsZV9zZXRfZm93bmVyIChzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2VjdXJpdHlfb3BzLT5maWxlX3NldF9mb3duZXIgKGZpbGUpOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9maWxlX3NlbmRfc2lnaW90YXNrIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywKKwkJCQkJCXN0cnVjdCBmb3duX3N0cnVjdCAqZm93biwKKwkJCQkJCWludCBzaWcpCit7CisJcmV0dXJuIHNlY3VyaXR5X29wcy0+ZmlsZV9zZW5kX3NpZ2lvdGFzayAodHNrLCBmb3duLCBzaWcpOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9maWxlX3JlY2VpdmUgKHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzZWN1cml0eV9vcHMtPmZpbGVfcmVjZWl2ZSAoZmlsZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3Rhc2tfY3JlYXRlICh1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzKQoreworCXJldHVybiBzZWN1cml0eV9vcHMtPnRhc2tfY3JlYXRlIChjbG9uZV9mbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3Rhc2tfYWxsb2MgKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3sKKwlyZXR1cm4gc2VjdXJpdHlfb3BzLT50YXNrX2FsbG9jX3NlY3VyaXR5IChwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNlY3VyaXR5X3Rhc2tfZnJlZSAoc3RydWN0IHRhc2tfc3RydWN0ICpwKQoreworCXNlY3VyaXR5X29wcy0+dGFza19mcmVlX3NlY3VyaXR5IChwKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfdGFza19zZXR1aWQgKHVpZF90IGlkMCwgdWlkX3QgaWQxLCB1aWRfdCBpZDIsCisJCQkJCWludCBmbGFncykKK3sKKwlyZXR1cm4gc2VjdXJpdHlfb3BzLT50YXNrX3NldHVpZCAoaWQwLCBpZDEsIGlkMiwgZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV90YXNrX3Bvc3Rfc2V0dWlkICh1aWRfdCBvbGRfcnVpZCwgdWlkX3Qgb2xkX2V1aWQsCisJCQkJCSAgICAgdWlkX3Qgb2xkX3N1aWQsIGludCBmbGFncykKK3sKKwlyZXR1cm4gc2VjdXJpdHlfb3BzLT50YXNrX3Bvc3Rfc2V0dWlkIChvbGRfcnVpZCwgb2xkX2V1aWQsIG9sZF9zdWlkLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3Rhc2tfc2V0Z2lkIChnaWRfdCBpZDAsIGdpZF90IGlkMSwgZ2lkX3QgaWQyLAorCQkJCQlpbnQgZmxhZ3MpCit7CisJcmV0dXJuIHNlY3VyaXR5X29wcy0+dGFza19zZXRnaWQgKGlkMCwgaWQxLCBpZDIsIGZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfdGFza19zZXRwZ2lkIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHBpZF90IHBnaWQpCit7CisJcmV0dXJuIHNlY3VyaXR5X29wcy0+dGFza19zZXRwZ2lkIChwLCBwZ2lkKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfdGFza19nZXRwZ2lkIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCit7CisJcmV0dXJuIHNlY3VyaXR5X29wcy0+dGFza19nZXRwZ2lkIChwKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfdGFza19nZXRzaWQgKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3sKKwlyZXR1cm4gc2VjdXJpdHlfb3BzLT50YXNrX2dldHNpZCAocCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3Rhc2tfc2V0Z3JvdXBzIChzdHJ1Y3QgZ3JvdXBfaW5mbyAqZ3JvdXBfaW5mbykKK3sKKwlyZXR1cm4gc2VjdXJpdHlfb3BzLT50YXNrX3NldGdyb3VwcyAoZ3JvdXBfaW5mbyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3Rhc2tfc2V0bmljZSAoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgbmljZSkKK3sKKwlyZXR1cm4gc2VjdXJpdHlfb3BzLT50YXNrX3NldG5pY2UgKHAsIG5pY2UpOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV90YXNrX3NldHJsaW1pdCAodW5zaWduZWQgaW50IHJlc291cmNlLAorCQkJCQkgICBzdHJ1Y3QgcmxpbWl0ICpuZXdfcmxpbSkKK3sKKwlyZXR1cm4gc2VjdXJpdHlfb3BzLT50YXNrX3NldHJsaW1pdCAocmVzb3VyY2UsIG5ld19ybGltKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfdGFza19zZXRzY2hlZHVsZXIgKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwKKwkJCQkJICAgICAgaW50IHBvbGljeSwKKwkJCQkJICAgICAgc3RydWN0IHNjaGVkX3BhcmFtICpscCkKK3sKKwlyZXR1cm4gc2VjdXJpdHlfb3BzLT50YXNrX3NldHNjaGVkdWxlciAocCwgcG9saWN5LCBscCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3Rhc2tfZ2V0c2NoZWR1bGVyIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCit7CisJcmV0dXJuIHNlY3VyaXR5X29wcy0+dGFza19nZXRzY2hlZHVsZXIgKHApOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV90YXNrX2tpbGwgKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwKKwkJCQkgICAgICBzdHJ1Y3Qgc2lnaW5mbyAqaW5mbywgaW50IHNpZykKK3sKKwlyZXR1cm4gc2VjdXJpdHlfb3BzLT50YXNrX2tpbGwgKHAsIGluZm8sIHNpZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3Rhc2tfd2FpdCAoc3RydWN0IHRhc2tfc3RydWN0ICpwKQoreworCXJldHVybiBzZWN1cml0eV9vcHMtPnRhc2tfd2FpdCAocCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3Rhc2tfcHJjdGwgKGludCBvcHRpb24sIHVuc2lnbmVkIGxvbmcgYXJnMiwKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBhcmczLAorCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGFyZzQsCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgYXJnNSkKK3sKKwlyZXR1cm4gc2VjdXJpdHlfb3BzLT50YXNrX3ByY3RsIChvcHRpb24sIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2VjdXJpdHlfdGFza19yZXBhcmVudF90b19pbml0IChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCit7CisJc2VjdXJpdHlfb3BzLT50YXNrX3JlcGFyZW50X3RvX2luaXQgKHApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2VjdXJpdHlfdGFza190b19pbm9kZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJc2VjdXJpdHlfb3BzLT50YXNrX3RvX2lub2RlKHAsIGlub2RlKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaXBjX3Blcm1pc3Npb24gKHN0cnVjdCBrZXJuX2lwY19wZXJtICppcGNwLAorCQkJCQkgICBzaG9ydCBmbGFnKQoreworCXJldHVybiBzZWN1cml0eV9vcHMtPmlwY19wZXJtaXNzaW9uIChpcGNwLCBmbGFnKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfbXNnX21zZ19hbGxvYyAoc3RydWN0IG1zZ19tc2cgKiBtc2cpCit7CisJcmV0dXJuIHNlY3VyaXR5X29wcy0+bXNnX21zZ19hbGxvY19zZWN1cml0eSAobXNnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNlY3VyaXR5X21zZ19tc2dfZnJlZSAoc3RydWN0IG1zZ19tc2cgKiBtc2cpCit7CisJc2VjdXJpdHlfb3BzLT5tc2dfbXNnX2ZyZWVfc2VjdXJpdHkobXNnKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfbXNnX3F1ZXVlX2FsbG9jIChzdHJ1Y3QgbXNnX3F1ZXVlICptc3EpCit7CisJcmV0dXJuIHNlY3VyaXR5X29wcy0+bXNnX3F1ZXVlX2FsbG9jX3NlY3VyaXR5IChtc3EpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2VjdXJpdHlfbXNnX3F1ZXVlX2ZyZWUgKHN0cnVjdCBtc2dfcXVldWUgKm1zcSkKK3sKKwlzZWN1cml0eV9vcHMtPm1zZ19xdWV1ZV9mcmVlX3NlY3VyaXR5IChtc3EpOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9tc2dfcXVldWVfYXNzb2NpYXRlIChzdHJ1Y3QgbXNnX3F1ZXVlICogbXNxLCAKKwkJCQkJCWludCBtc3FmbGcpCit7CisJcmV0dXJuIHNlY3VyaXR5X29wcy0+bXNnX3F1ZXVlX2Fzc29jaWF0ZSAobXNxLCBtc3FmbGcpOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9tc2dfcXVldWVfbXNnY3RsIChzdHJ1Y3QgbXNnX3F1ZXVlICogbXNxLCBpbnQgY21kKQoreworCXJldHVybiBzZWN1cml0eV9vcHMtPm1zZ19xdWV1ZV9tc2djdGwgKG1zcSwgY21kKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfbXNnX3F1ZXVlX21zZ3NuZCAoc3RydWN0IG1zZ19xdWV1ZSAqIG1zcSwKKwkJCQkJICAgICBzdHJ1Y3QgbXNnX21zZyAqIG1zZywgaW50IG1zcWZsZykKK3sKKwlyZXR1cm4gc2VjdXJpdHlfb3BzLT5tc2dfcXVldWVfbXNnc25kIChtc3EsIG1zZywgbXNxZmxnKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfbXNnX3F1ZXVlX21zZ3JjdiAoc3RydWN0IG1zZ19xdWV1ZSAqIG1zcSwKKwkJCQkJICAgICBzdHJ1Y3QgbXNnX21zZyAqIG1zZywKKwkJCQkJICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiB0YXJnZXQsCisJCQkJCSAgICAgbG9uZyB0eXBlLCBpbnQgbW9kZSkKK3sKKwlyZXR1cm4gc2VjdXJpdHlfb3BzLT5tc2dfcXVldWVfbXNncmN2IChtc3EsIG1zZywgdGFyZ2V0LCB0eXBlLCBtb2RlKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfc2htX2FsbG9jIChzdHJ1Y3Qgc2htaWRfa2VybmVsICpzaHApCit7CisJcmV0dXJuIHNlY3VyaXR5X29wcy0+c2htX2FsbG9jX3NlY3VyaXR5IChzaHApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2VjdXJpdHlfc2htX2ZyZWUgKHN0cnVjdCBzaG1pZF9rZXJuZWwgKnNocCkKK3sKKwlzZWN1cml0eV9vcHMtPnNobV9mcmVlX3NlY3VyaXR5IChzaHApOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9zaG1fYXNzb2NpYXRlIChzdHJ1Y3Qgc2htaWRfa2VybmVsICogc2hwLCAKKwkJCQkJICBpbnQgc2htZmxnKQoreworCXJldHVybiBzZWN1cml0eV9vcHMtPnNobV9hc3NvY2lhdGUoc2hwLCBzaG1mbGcpOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9zaG1fc2htY3RsIChzdHJ1Y3Qgc2htaWRfa2VybmVsICogc2hwLCBpbnQgY21kKQoreworCXJldHVybiBzZWN1cml0eV9vcHMtPnNobV9zaG1jdGwgKHNocCwgY21kKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfc2htX3NobWF0IChzdHJ1Y3Qgc2htaWRfa2VybmVsICogc2hwLCAKKwkJCQkgICAgICBjaGFyIF9fdXNlciAqc2htYWRkciwgaW50IHNobWZsZykKK3sKKwlyZXR1cm4gc2VjdXJpdHlfb3BzLT5zaG1fc2htYXQoc2hwLCBzaG1hZGRyLCBzaG1mbGcpOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9zZW1fYWxsb2MgKHN0cnVjdCBzZW1fYXJyYXkgKnNtYSkKK3sKKwlyZXR1cm4gc2VjdXJpdHlfb3BzLT5zZW1fYWxsb2Nfc2VjdXJpdHkgKHNtYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZWN1cml0eV9zZW1fZnJlZSAoc3RydWN0IHNlbV9hcnJheSAqc21hKQoreworCXNlY3VyaXR5X29wcy0+c2VtX2ZyZWVfc2VjdXJpdHkgKHNtYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3NlbV9hc3NvY2lhdGUgKHN0cnVjdCBzZW1fYXJyYXkgKiBzbWEsIGludCBzZW1mbGcpCit7CisJcmV0dXJuIHNlY3VyaXR5X29wcy0+c2VtX2Fzc29jaWF0ZSAoc21hLCBzZW1mbGcpOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9zZW1fc2VtY3RsIChzdHJ1Y3Qgc2VtX2FycmF5ICogc21hLCBpbnQgY21kKQoreworCXJldHVybiBzZWN1cml0eV9vcHMtPnNlbV9zZW1jdGwoc21hLCBjbWQpOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9zZW1fc2Vtb3AgKHN0cnVjdCBzZW1fYXJyYXkgKiBzbWEsIAorCQkJCSAgICAgIHN0cnVjdCBzZW1idWYgKiBzb3BzLCB1bnNpZ25lZCBuc29wcywgCisJCQkJICAgICAgaW50IGFsdGVyKQoreworCXJldHVybiBzZWN1cml0eV9vcHMtPnNlbV9zZW1vcChzbWEsIHNvcHMsIG5zb3BzLCBhbHRlcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZWN1cml0eV9kX2luc3RhbnRpYXRlIChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJaWYgKHVubGlrZWx5IChpbm9kZSAmJiBJU19QUklWQVRFIChpbm9kZSkpKQorCQlyZXR1cm47CisJc2VjdXJpdHlfb3BzLT5kX2luc3RhbnRpYXRlIChkZW50cnksIGlub2RlKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfZ2V0cHJvY2F0dHIoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBjaGFyICpuYW1lLCB2b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUpCit7CisJcmV0dXJuIHNlY3VyaXR5X29wcy0+Z2V0cHJvY2F0dHIocCwgbmFtZSwgdmFsdWUsIHNpemUpOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9zZXRwcm9jYXR0cihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGNoYXIgKm5hbWUsIHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSkKK3sKKwlyZXR1cm4gc2VjdXJpdHlfb3BzLT5zZXRwcm9jYXR0cihwLCBuYW1lLCB2YWx1ZSwgc2l6ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X25ldGxpbmtfc2VuZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICogc2tiKQoreworCXJldHVybiBzZWN1cml0eV9vcHMtPm5ldGxpbmtfc2VuZChzaywgc2tiKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfbmV0bGlua19yZWN2KHN0cnVjdCBza19idWZmICogc2tiKQoreworCXJldHVybiBzZWN1cml0eV9vcHMtPm5ldGxpbmtfcmVjdihza2IpOworfQorCisvKiBwcm90b3R5cGVzICovCitleHRlcm4gaW50IHNlY3VyaXR5X2luaXQJKHZvaWQpOworZXh0ZXJuIGludCByZWdpc3Rlcl9zZWN1cml0eQkoc3RydWN0IHNlY3VyaXR5X29wZXJhdGlvbnMgKm9wcyk7CitleHRlcm4gaW50IHVucmVnaXN0ZXJfc2VjdXJpdHkJKHN0cnVjdCBzZWN1cml0eV9vcGVyYXRpb25zICpvcHMpOworZXh0ZXJuIGludCBtb2RfcmVnX3NlY3VyaXR5CShjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgc2VjdXJpdHlfb3BlcmF0aW9ucyAqb3BzKTsKK2V4dGVybiBpbnQgbW9kX3VucmVnX3NlY3VyaXR5CShjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgc2VjdXJpdHlfb3BlcmF0aW9ucyAqb3BzKTsKKworCisjZWxzZSAvKiBDT05GSUdfU0VDVVJJVFkgKi8KKworLyoKKyAqIFRoaXMgaXMgdGhlIGRlZmF1bHQgY2FwYWJpbGl0aWVzIGZ1bmN0aW9uYWxpdHkuICBNb3N0IG9mIHRoZXNlIGZ1bmN0aW9ucworICogYXJlIGp1c3Qgc3R1YmJlZCBvdXQsIGJ1dCBhIGZldyBtdXN0IGNhbGwgdGhlIHByb3BlciBjYXBhYmxlIGNvZGUuCisgKi8KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5pdCh2b2lkKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9wdHJhY2UgKHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBjaGlsZCkKK3sKKwlyZXR1cm4gY2FwX3B0cmFjZSAocGFyZW50LCBjaGlsZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2NhcGdldCAoc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsCisJCQkJICAga2VybmVsX2NhcF90ICplZmZlY3RpdmUsCisJCQkJICAga2VybmVsX2NhcF90ICppbmhlcml0YWJsZSwKKwkJCQkgICBrZXJuZWxfY2FwX3QgKnBlcm1pdHRlZCkKK3sKKwlyZXR1cm4gY2FwX2NhcGdldCAodGFyZ2V0LCBlZmZlY3RpdmUsIGluaGVyaXRhYmxlLCBwZXJtaXR0ZWQpOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9jYXBzZXRfY2hlY2sgKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LAorCQkJCQkga2VybmVsX2NhcF90ICplZmZlY3RpdmUsCisJCQkJCSBrZXJuZWxfY2FwX3QgKmluaGVyaXRhYmxlLAorCQkJCQkga2VybmVsX2NhcF90ICpwZXJtaXR0ZWQpCit7CisJcmV0dXJuIGNhcF9jYXBzZXRfY2hlY2sgKHRhcmdldCwgZWZmZWN0aXZlLCBpbmhlcml0YWJsZSwgcGVybWl0dGVkKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNlY3VyaXR5X2NhcHNldF9zZXQgKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LAorCQkJCQlrZXJuZWxfY2FwX3QgKmVmZmVjdGl2ZSwKKwkJCQkJa2VybmVsX2NhcF90ICppbmhlcml0YWJsZSwKKwkJCQkJa2VybmVsX2NhcF90ICpwZXJtaXR0ZWQpCit7CisJY2FwX2NhcHNldF9zZXQgKHRhcmdldCwgZWZmZWN0aXZlLCBpbmhlcml0YWJsZSwgcGVybWl0dGVkKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfYWNjdCAoc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3N5c2N0bChzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IG9wKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9xdW90YWN0bCAoaW50IGNtZHMsIGludCB0eXBlLCBpbnQgaWQsCisJCQkJICAgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzYikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfcXVvdGFfb24gKHN0cnVjdCBkZW50cnkgKiBkZW50cnkpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3N5c2xvZyhpbnQgdHlwZSkKK3sKKwlyZXR1cm4gY2FwX3N5c2xvZyh0eXBlKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfc2V0dGltZShzdHJ1Y3QgdGltZXNwZWMgKnRzLCBzdHJ1Y3QgdGltZXpvbmUgKnR6KQoreworCXJldHVybiBjYXBfc2V0dGltZSh0cywgdHopOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV92bV9lbm91Z2hfbWVtb3J5KGxvbmcgcGFnZXMpCit7CisJcmV0dXJuIGNhcF92bV9lbm91Z2hfbWVtb3J5KHBhZ2VzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfYnBybV9hbGxvYyAoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNlY3VyaXR5X2Jwcm1fZnJlZSAoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKK3sgfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2VjdXJpdHlfYnBybV9hcHBseV9jcmVkcyAoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwgaW50IHVuc2FmZSkKK3sgCisJY2FwX2Jwcm1fYXBwbHlfY3JlZHMgKGJwcm0sIHVuc2FmZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZWN1cml0eV9icHJtX3Bvc3RfYXBwbHlfY3JlZHMgKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pCit7CisJcmV0dXJuOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9icHJtX3NldCAoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKK3sKKwlyZXR1cm4gY2FwX2Jwcm1fc2V0X3NlY3VyaXR5IChicHJtKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfYnBybV9jaGVjayAoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfYnBybV9zZWN1cmVleGVjIChzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKQoreworCXJldHVybiBjYXBfYnBybV9zZWN1cmVleGVjKGJwcm0pOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9zYl9hbGxvYyAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNlY3VyaXR5X3NiX2ZyZWUgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7IH0KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfc2JfY29weV9kYXRhIChzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqdHlwZSwKKwkJCQkJIHZvaWQgKm9yaWcsIHZvaWQgKmNvcHkpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3NiX2tlcm5fbW91bnQgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHZvaWQgKmRhdGEpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3NiX3N0YXRmcyAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfc2JfbW91bnQgKGNoYXIgKmRldl9uYW1lLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCwKKwkJCQkgICAgY2hhciAqdHlwZSwgdW5zaWduZWQgbG9uZyBmbGFncywKKwkJCQkgICAgdm9pZCAqZGF0YSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfc2JfY2hlY2tfc2IgKHN0cnVjdCB2ZnNtb3VudCAqbW50LAorCQkJCQlzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfc2JfdW1vdW50IChzdHJ1Y3QgdmZzbW91bnQgKm1udCwgaW50IGZsYWdzKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2VjdXJpdHlfc2JfdW1vdW50X2Nsb3NlIChzdHJ1Y3QgdmZzbW91bnQgKm1udCkKK3sgfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2VjdXJpdHlfc2JfdW1vdW50X2J1c3kgKHN0cnVjdCB2ZnNtb3VudCAqbW50KQoreyB9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZWN1cml0eV9zYl9wb3N0X3JlbW91bnQgKHN0cnVjdCB2ZnNtb3VudCAqbW50LAorCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZvaWQgKmRhdGEpCit7IH0KKworc3RhdGljIGlubGluZSB2b2lkIHNlY3VyaXR5X3NiX3Bvc3RfbW91bnRyb290ICh2b2lkKQoreyB9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZWN1cml0eV9zYl9wb3N0X2FkZG1vdW50IChzdHJ1Y3QgdmZzbW91bnQgKm1udCwKKwkJCQkJICAgICAgc3RydWN0IG5hbWVpZGF0YSAqbW91bnRwb2ludF9uZCkKK3sgfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9zYl9waXZvdHJvb3QgKHN0cnVjdCBuYW1laWRhdGEgKm9sZF9uZCwKKwkJCQkJIHN0cnVjdCBuYW1laWRhdGEgKm5ld19uZCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNlY3VyaXR5X3NiX3Bvc3RfcGl2b3Ryb290IChzdHJ1Y3QgbmFtZWlkYXRhICpvbGRfbmQsCisJCQkJCSAgICAgICBzdHJ1Y3QgbmFtZWlkYXRhICpuZXdfbmQpCit7IH0KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfYWxsb2MgKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZWN1cml0eV9pbm9kZV9mcmVlIChzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreyB9CisJCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUgKHN0cnVjdCBpbm9kZSAqZGlyLAorCQkJCQkgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAorCQkJCQkgaW50IG1vZGUpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X2NyZWF0ZSAoc3RydWN0IGlub2RlICpkaXIsCisJCQkJCSAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCisJCQkJCSAgICAgICBpbnQgbW9kZSkKK3sgfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9saW5rIChzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LAorCQkJCSAgICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwKKwkJCQkgICAgICAgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNlY3VyaXR5X2lub2RlX3Bvc3RfbGluayAoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKKwkJCQkJICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwKKwkJCQkJICAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQoreyB9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3VubGluayAoc3RydWN0IGlub2RlICpkaXIsCisJCQkJCSBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsgKHN0cnVjdCBpbm9kZSAqZGlyLAorCQkJCQkgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKKwkJCQkJICBjb25zdCBjaGFyICpvbGRfbmFtZSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNlY3VyaXR5X2lub2RlX3Bvc3Rfc3ltbGluayAoc3RydWN0IGlub2RlICpkaXIsCisJCQkJCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCisJCQkJCQljb25zdCBjaGFyICpvbGRfbmFtZSkKK3sgfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ta2RpciAoc3RydWN0IGlub2RlICpkaXIsCisJCQkJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSwKKwkJCQkJaW50IG1vZGUpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X21rZGlyIChzdHJ1Y3QgaW5vZGUgKmRpciwKKwkJCQkJICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAorCQkJCQkgICAgICBpbnQgbW9kZSkKK3sgfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ybWRpciAoc3RydWN0IGlub2RlICpkaXIsCisJCQkJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfbWtub2QgKHN0cnVjdCBpbm9kZSAqZGlyLAorCQkJCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCisJCQkJCWludCBtb2RlLCBkZXZfdCBkZXYpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X21rbm9kIChzdHJ1Y3QgaW5vZGUgKmRpciwKKwkJCQkJICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAorCQkJCQkgICAgICBpbnQgbW9kZSwgZGV2X3QgZGV2KQoreyB9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3JlbmFtZSAoc3RydWN0IGlub2RlICpvbGRfZGlyLAorCQkJCQkgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKKwkJCQkJIHN0cnVjdCBpbm9kZSAqbmV3X2RpciwKKwkJCQkJIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X3JlbmFtZSAoc3RydWN0IGlub2RlICpvbGRfZGlyLAorCQkJCQkgICAgICAgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKKwkJCQkJICAgICAgIHN0cnVjdCBpbm9kZSAqbmV3X2RpciwKKwkJCQkJICAgICAgIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCit7IH0KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfcmVhZGxpbmsgKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfZm9sbG93X2xpbmsgKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKKwkJCQkJICAgICAgc3RydWN0IG5hbWVpZGF0YSAqbmQpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24gKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrLAorCQkJCQkgICAgIHN0cnVjdCBuYW1laWRhdGEgKm5kKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9zZXRhdHRyIChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCisJCQkJCSAgc3RydWN0IGlhdHRyICphdHRyKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9nZXRhdHRyIChzdHJ1Y3QgdmZzbW91bnQgKm1udCwKKwkJCQkJICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZWN1cml0eV9pbm9kZV9kZWxldGUgKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7IH0KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfc2V0eGF0dHIgKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciAqbmFtZSwKKwkJCQkJICAgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCit7CisJcmV0dXJuIGNhcF9pbm9kZV9zZXR4YXR0cihkZW50cnksIG5hbWUsIHZhbHVlLCBzaXplLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X3NldHhhdHRyIChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNoYXIgKm5hbWUsCisJCQkJCQkgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCit7IH0KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfZ2V0eGF0dHIgKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciAqbmFtZSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfbGlzdHhhdHRyIChzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3JlbW92ZXhhdHRyIChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNoYXIgKm5hbWUpCit7CisJcmV0dXJuIGNhcF9pbm9kZV9yZW1vdmV4YXR0cihkZW50cnksIG5hbWUpOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9nZXRzZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQoreworCXJldHVybiAtRU9QTk9UU1VQUDsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfc2V0c2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCit7CisJcmV0dXJuIC1FT1BOT1RTVVBQOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9saXN0c2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgY2hhciAqYnVmZmVyLCBzaXplX3QgYnVmZmVyX3NpemUpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2ZpbGVfcGVybWlzc2lvbiAoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtYXNrKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9maWxlX2FsbG9jIChzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNlY3VyaXR5X2ZpbGVfZnJlZSAoc3RydWN0IGZpbGUgKmZpbGUpCit7IH0KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfZmlsZV9pb2N0bCAoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9maWxlX21tYXAgKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIHJlcXByb3QsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBwcm90LAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2ZpbGVfbXByb3RlY3QgKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJCQkgIHVuc2lnbmVkIGxvbmcgcmVxcHJvdCwKKwkJCQkJICB1bnNpZ25lZCBsb25nIHByb3QpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2ZpbGVfbG9jayAoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2ZpbGVfZmNudGwgKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAorCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfZmlsZV9zZXRfZm93bmVyIChzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfZmlsZV9zZW5kX3NpZ2lvdGFzayAoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssCisJCQkJCQlzdHJ1Y3QgZm93bl9zdHJ1Y3QgKmZvd24sCisJCQkJCQlpbnQgc2lnKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9maWxlX3JlY2VpdmUgKHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV90YXNrX2NyZWF0ZSAodW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncykKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfdGFza19hbGxvYyAoc3RydWN0IHRhc2tfc3RydWN0ICpwKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2VjdXJpdHlfdGFza19mcmVlIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCit7IH0KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfdGFza19zZXR1aWQgKHVpZF90IGlkMCwgdWlkX3QgaWQxLCB1aWRfdCBpZDIsCisJCQkJCWludCBmbGFncykKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfdGFza19wb3N0X3NldHVpZCAodWlkX3Qgb2xkX3J1aWQsIHVpZF90IG9sZF9ldWlkLAorCQkJCQkgICAgIHVpZF90IG9sZF9zdWlkLCBpbnQgZmxhZ3MpCit7CisJcmV0dXJuIGNhcF90YXNrX3Bvc3Rfc2V0dWlkIChvbGRfcnVpZCwgb2xkX2V1aWQsIG9sZF9zdWlkLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3Rhc2tfc2V0Z2lkIChnaWRfdCBpZDAsIGdpZF90IGlkMSwgZ2lkX3QgaWQyLAorCQkJCQlpbnQgZmxhZ3MpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3Rhc2tfc2V0cGdpZCAoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBwaWRfdCBwZ2lkKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV90YXNrX2dldHBnaWQgKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfdGFza19nZXRzaWQgKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfdGFza19zZXRncm91cHMgKHN0cnVjdCBncm91cF9pbmZvICpncm91cF9pbmZvKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV90YXNrX3NldG5pY2UgKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IG5pY2UpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3Rhc2tfc2V0cmxpbWl0ICh1bnNpZ25lZCBpbnQgcmVzb3VyY2UsCisJCQkJCSAgIHN0cnVjdCBybGltaXQgKm5ld19ybGltKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV90YXNrX3NldHNjaGVkdWxlciAoc3RydWN0IHRhc2tfc3RydWN0ICpwLAorCQkJCQkgICAgICBpbnQgcG9saWN5LAorCQkJCQkgICAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKmxwKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV90YXNrX2dldHNjaGVkdWxlciAoc3RydWN0IHRhc2tfc3RydWN0ICpwKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV90YXNrX2tpbGwgKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwKKwkJCQkgICAgICBzdHJ1Y3Qgc2lnaW5mbyAqaW5mbywgaW50IHNpZykKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfdGFza193YWl0IChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3Rhc2tfcHJjdGwgKGludCBvcHRpb24sIHVuc2lnbmVkIGxvbmcgYXJnMiwKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBhcmczLAorCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGFyZzQsCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgYXJnNSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNlY3VyaXR5X3Rhc2tfcmVwYXJlbnRfdG9faW5pdCAoc3RydWN0IHRhc2tfc3RydWN0ICpwKQoreworCWNhcF90YXNrX3JlcGFyZW50X3RvX2luaXQgKHApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2VjdXJpdHlfdGFza190b19pbm9kZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7IH0KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaXBjX3Blcm1pc3Npb24gKHN0cnVjdCBrZXJuX2lwY19wZXJtICppcGNwLAorCQkJCQkgICBzaG9ydCBmbGFnKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9tc2dfbXNnX2FsbG9jIChzdHJ1Y3QgbXNnX21zZyAqIG1zZykKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNlY3VyaXR5X21zZ19tc2dfZnJlZSAoc3RydWN0IG1zZ19tc2cgKiBtc2cpCit7IH0KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfbXNnX3F1ZXVlX2FsbG9jIChzdHJ1Y3QgbXNnX3F1ZXVlICptc3EpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZWN1cml0eV9tc2dfcXVldWVfZnJlZSAoc3RydWN0IG1zZ19xdWV1ZSAqbXNxKQoreyB9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X21zZ19xdWV1ZV9hc3NvY2lhdGUgKHN0cnVjdCBtc2dfcXVldWUgKiBtc3EsIAorCQkJCQkJaW50IG1zcWZsZykKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfbXNnX3F1ZXVlX21zZ2N0bCAoc3RydWN0IG1zZ19xdWV1ZSAqIG1zcSwgaW50IGNtZCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfbXNnX3F1ZXVlX21zZ3NuZCAoc3RydWN0IG1zZ19xdWV1ZSAqIG1zcSwKKwkJCQkJICAgICBzdHJ1Y3QgbXNnX21zZyAqIG1zZywgaW50IG1zcWZsZykKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfbXNnX3F1ZXVlX21zZ3JjdiAoc3RydWN0IG1zZ19xdWV1ZSAqIG1zcSwKKwkJCQkJICAgICBzdHJ1Y3QgbXNnX21zZyAqIG1zZywKKwkJCQkJICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiB0YXJnZXQsCisJCQkJCSAgICAgbG9uZyB0eXBlLCBpbnQgbW9kZSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfc2htX2FsbG9jIChzdHJ1Y3Qgc2htaWRfa2VybmVsICpzaHApCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZWN1cml0eV9zaG1fZnJlZSAoc3RydWN0IHNobWlkX2tlcm5lbCAqc2hwKQoreyB9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3NobV9hc3NvY2lhdGUgKHN0cnVjdCBzaG1pZF9rZXJuZWwgKiBzaHAsIAorCQkJCQkgIGludCBzaG1mbGcpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3NobV9zaG1jdGwgKHN0cnVjdCBzaG1pZF9rZXJuZWwgKiBzaHAsIGludCBjbWQpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3NobV9zaG1hdCAoc3RydWN0IHNobWlkX2tlcm5lbCAqIHNocCwgCisJCQkJICAgICAgY2hhciBfX3VzZXIgKnNobWFkZHIsIGludCBzaG1mbGcpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3NlbV9hbGxvYyAoc3RydWN0IHNlbV9hcnJheSAqc21hKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2VjdXJpdHlfc2VtX2ZyZWUgKHN0cnVjdCBzZW1fYXJyYXkgKnNtYSkKK3sgfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9zZW1fYXNzb2NpYXRlIChzdHJ1Y3Qgc2VtX2FycmF5ICogc21hLCBpbnQgc2VtZmxnKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9zZW1fc2VtY3RsIChzdHJ1Y3Qgc2VtX2FycmF5ICogc21hLCBpbnQgY21kKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9zZW1fc2Vtb3AgKHN0cnVjdCBzZW1fYXJyYXkgKiBzbWEsIAorCQkJCSAgICAgIHN0cnVjdCBzZW1idWYgKiBzb3BzLCB1bnNpZ25lZCBuc29wcywgCisJCQkJICAgICAgaW50IGFsdGVyKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2VjdXJpdHlfZF9pbnN0YW50aWF0ZSAoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreyB9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2dldHByb2NhdHRyKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgY2hhciAqbmFtZSwgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplKQoreworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9zZXRwcm9jYXR0cihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGNoYXIgKm5hbWUsIHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSkKK3sKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfbmV0bGlua19zZW5kIChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCit7CisJcmV0dXJuIGNhcF9uZXRsaW5rX3NlbmQgKHNrLCBza2IpOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9uZXRsaW5rX3JlY3YgKHN0cnVjdCBza19idWZmICpza2IpCit7CisJcmV0dXJuIGNhcF9uZXRsaW5rX3JlY3YgKHNrYik7Cit9CisKKyNlbmRpZgkvKiBDT05GSUdfU0VDVVJJVFkgKi8KKworI2lmZGVmIENPTkZJR19TRUNVUklUWV9ORVRXT1JLCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV91bml4X3N0cmVhbV9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKiBzb2NrLAorCQkJCQkgICAgICAgc3RydWN0IHNvY2tldCAqIG90aGVyLCAKKwkJCQkJICAgICAgIHN0cnVjdCBzb2NrICogbmV3c2spCit7CisJcmV0dXJuIHNlY3VyaXR5X29wcy0+dW5peF9zdHJlYW1fY29ubmVjdChzb2NrLCBvdGhlciwgbmV3c2spOworfQorCisKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3VuaXhfbWF5X3NlbmQoc3RydWN0IHNvY2tldCAqIHNvY2ssIAorCQkJCQkgc3RydWN0IHNvY2tldCAqIG90aGVyKQoreworCXJldHVybiBzZWN1cml0eV9vcHMtPnVuaXhfbWF5X3NlbmQoc29jaywgb3RoZXIpOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9zb2NrZXRfY3JlYXRlIChpbnQgZmFtaWx5LCBpbnQgdHlwZSwKKwkJCQkJICBpbnQgcHJvdG9jb2wsIGludCBrZXJuKQoreworCXJldHVybiBzZWN1cml0eV9vcHMtPnNvY2tldF9jcmVhdGUoZmFtaWx5LCB0eXBlLCBwcm90b2NvbCwga2Vybik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZWN1cml0eV9zb2NrZXRfcG9zdF9jcmVhdGUoc3RydWN0IHNvY2tldCAqIHNvY2ssIAorCQkJCQkgICAgICAgaW50IGZhbWlseSwKKwkJCQkJICAgICAgIGludCB0eXBlLCAKKwkJCQkJICAgICAgIGludCBwcm90b2NvbCwgaW50IGtlcm4pCit7CisJc2VjdXJpdHlfb3BzLT5zb2NrZXRfcG9zdF9jcmVhdGUoc29jaywgZmFtaWx5LCB0eXBlLAorCQkJCQkgcHJvdG9jb2wsIGtlcm4pOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9zb2NrZXRfYmluZChzdHJ1Y3Qgc29ja2V0ICogc29jaywgCisJCQkJICAgICAgIHN0cnVjdCBzb2NrYWRkciAqIGFkZHJlc3MsIAorCQkJCSAgICAgICBpbnQgYWRkcmxlbikKK3sKKwlyZXR1cm4gc2VjdXJpdHlfb3BzLT5zb2NrZXRfYmluZChzb2NrLCBhZGRyZXNzLCBhZGRybGVuKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfc29ja2V0X2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqIHNvY2ssIAorCQkJCQkgIHN0cnVjdCBzb2NrYWRkciAqIGFkZHJlc3MsIAorCQkJCQkgIGludCBhZGRybGVuKQoreworCXJldHVybiBzZWN1cml0eV9vcHMtPnNvY2tldF9jb25uZWN0KHNvY2ssIGFkZHJlc3MsIGFkZHJsZW4pOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9zb2NrZXRfbGlzdGVuKHN0cnVjdCBzb2NrZXQgKiBzb2NrLCBpbnQgYmFja2xvZykKK3sKKwlyZXR1cm4gc2VjdXJpdHlfb3BzLT5zb2NrZXRfbGlzdGVuKHNvY2ssIGJhY2tsb2cpOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9zb2NrZXRfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKiBzb2NrLCAKKwkJCQkJIHN0cnVjdCBzb2NrZXQgKiBuZXdzb2NrKQoreworCXJldHVybiBzZWN1cml0eV9vcHMtPnNvY2tldF9hY2NlcHQoc29jaywgbmV3c29jayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZWN1cml0eV9zb2NrZXRfcG9zdF9hY2NlcHQoc3RydWN0IHNvY2tldCAqIHNvY2ssIAorCQkJCQkgICAgICAgc3RydWN0IHNvY2tldCAqIG5ld3NvY2spCit7CisJc2VjdXJpdHlfb3BzLT5zb2NrZXRfcG9zdF9hY2NlcHQoc29jaywgbmV3c29jayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3NvY2tldF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKiBzb2NrLCAKKwkJCQkJICBzdHJ1Y3QgbXNnaGRyICogbXNnLCBpbnQgc2l6ZSkKK3sKKwlyZXR1cm4gc2VjdXJpdHlfb3BzLT5zb2NrZXRfc2VuZG1zZyhzb2NrLCBtc2csIHNpemUpOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9zb2NrZXRfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICogc29jaywgCisJCQkJCSAgc3RydWN0IG1zZ2hkciAqIG1zZywgaW50IHNpemUsIAorCQkJCQkgIGludCBmbGFncykKK3sKKwlyZXR1cm4gc2VjdXJpdHlfb3BzLT5zb2NrZXRfcmVjdm1zZyhzb2NrLCBtc2csIHNpemUsIGZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfc29ja2V0X2dldHNvY2tuYW1lKHN0cnVjdCBzb2NrZXQgKiBzb2NrKQoreworCXJldHVybiBzZWN1cml0eV9vcHMtPnNvY2tldF9nZXRzb2NrbmFtZShzb2NrKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfc29ja2V0X2dldHBlZXJuYW1lKHN0cnVjdCBzb2NrZXQgKiBzb2NrKQoreworCXJldHVybiBzZWN1cml0eV9vcHMtPnNvY2tldF9nZXRwZWVybmFtZShzb2NrKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfc29ja2V0X2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqIHNvY2ssIAorCQkJCQkgICAgIGludCBsZXZlbCwgaW50IG9wdG5hbWUpCit7CisJcmV0dXJuIHNlY3VyaXR5X29wcy0+c29ja2V0X2dldHNvY2tvcHQoc29jaywgbGV2ZWwsIG9wdG5hbWUpOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9zb2NrZXRfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICogc29jaywgCisJCQkJCSAgICAgaW50IGxldmVsLCBpbnQgb3B0bmFtZSkKK3sKKwlyZXR1cm4gc2VjdXJpdHlfb3BzLT5zb2NrZXRfc2V0c29ja29wdChzb2NrLCBsZXZlbCwgb3B0bmFtZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3NvY2tldF9zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICogc29jaywgaW50IGhvdykKK3sKKwlyZXR1cm4gc2VjdXJpdHlfb3BzLT5zb2NrZXRfc2h1dGRvd24oc29jaywgaG93KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfc29ja19yY3Zfc2tiIChzdHJ1Y3Qgc29jayAqIHNrLCAKKwkJCQkJIHN0cnVjdCBza19idWZmICogc2tiKQoreworCXJldHVybiBzZWN1cml0eV9vcHMtPnNvY2tldF9zb2NrX3Jjdl9za2IgKHNrLCBza2IpOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9zb2NrZXRfZ2V0cGVlcnNlYyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBjaGFyIF9fdXNlciAqb3B0dmFsLAorCQkJCQkgICAgIGludCBfX3VzZXIgKm9wdGxlbiwgdW5zaWduZWQgbGVuKQoreworCXJldHVybiBzZWN1cml0eV9vcHMtPnNvY2tldF9nZXRwZWVyc2VjKHNvY2ssIG9wdHZhbCwgb3B0bGVuLCBsZW4pOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9za19hbGxvYyhzdHJ1Y3Qgc29jayAqc2ssIGludCBmYW1pbHksIGludCBwcmlvcml0eSkKK3sKKwlyZXR1cm4gc2VjdXJpdHlfb3BzLT5za19hbGxvY19zZWN1cml0eShzaywgZmFtaWx5LCBwcmlvcml0eSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZWN1cml0eV9za19mcmVlKHN0cnVjdCBzb2NrICpzaykKK3sKKwlyZXR1cm4gc2VjdXJpdHlfb3BzLT5za19mcmVlX3NlY3VyaXR5KHNrKTsKK30KKyNlbHNlCS8qIENPTkZJR19TRUNVUklUWV9ORVRXT1JLICovCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV91bml4X3N0cmVhbV9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKiBzb2NrLAorCQkJCQkgICAgICAgc3RydWN0IHNvY2tldCAqIG90aGVyLCAKKwkJCQkJICAgICAgIHN0cnVjdCBzb2NrICogbmV3c2spCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3VuaXhfbWF5X3NlbmQoc3RydWN0IHNvY2tldCAqIHNvY2ssIAorCQkJCQkgc3RydWN0IHNvY2tldCAqIG90aGVyKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9zb2NrZXRfY3JlYXRlIChpbnQgZmFtaWx5LCBpbnQgdHlwZSwKKwkJCQkJICBpbnQgcHJvdG9jb2wsIGludCBrZXJuKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2VjdXJpdHlfc29ja2V0X3Bvc3RfY3JlYXRlKHN0cnVjdCBzb2NrZXQgKiBzb2NrLCAKKwkJCQkJICAgICAgIGludCBmYW1pbHksCisJCQkJCSAgICAgICBpbnQgdHlwZSwgCisJCQkJCSAgICAgICBpbnQgcHJvdG9jb2wsIGludCBrZXJuKQoreworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9zb2NrZXRfYmluZChzdHJ1Y3Qgc29ja2V0ICogc29jaywgCisJCQkJICAgICAgIHN0cnVjdCBzb2NrYWRkciAqIGFkZHJlc3MsIAorCQkJCSAgICAgICBpbnQgYWRkcmxlbikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfc29ja2V0X2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqIHNvY2ssIAorCQkJCQkgIHN0cnVjdCBzb2NrYWRkciAqIGFkZHJlc3MsIAorCQkJCQkgIGludCBhZGRybGVuKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9zb2NrZXRfbGlzdGVuKHN0cnVjdCBzb2NrZXQgKiBzb2NrLCBpbnQgYmFja2xvZykKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfc29ja2V0X2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICogc29jaywgCisJCQkJCSBzdHJ1Y3Qgc29ja2V0ICogbmV3c29jaykKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNlY3VyaXR5X3NvY2tldF9wb3N0X2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICogc29jaywgCisJCQkJCSAgICAgICBzdHJ1Y3Qgc29ja2V0ICogbmV3c29jaykKK3sKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfc29ja2V0X3NlbmRtc2coc3RydWN0IHNvY2tldCAqIHNvY2ssIAorCQkJCQkgIHN0cnVjdCBtc2doZHIgKiBtc2csIGludCBzaXplKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9zb2NrZXRfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICogc29jaywgCisJCQkJCSAgc3RydWN0IG1zZ2hkciAqIG1zZywgaW50IHNpemUsIAorCQkJCQkgIGludCBmbGFncykKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfc29ja2V0X2dldHNvY2tuYW1lKHN0cnVjdCBzb2NrZXQgKiBzb2NrKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9zb2NrZXRfZ2V0cGVlcm5hbWUoc3RydWN0IHNvY2tldCAqIHNvY2spCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3NvY2tldF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKiBzb2NrLCAKKwkJCQkJICAgICBpbnQgbGV2ZWwsIGludCBvcHRuYW1lKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9zb2NrZXRfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICogc29jaywgCisJCQkJCSAgICAgaW50IGxldmVsLCBpbnQgb3B0bmFtZSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfc29ja2V0X3NodXRkb3duKHN0cnVjdCBzb2NrZXQgKiBzb2NrLCBpbnQgaG93KQoreworCXJldHVybiAwOworfQorc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfc29ja19yY3Zfc2tiIChzdHJ1Y3Qgc29jayAqIHNrLCAKKwkJCQkJIHN0cnVjdCBza19idWZmICogc2tiKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9zb2NrZXRfZ2V0cGVlcnNlYyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBjaGFyIF9fdXNlciAqb3B0dmFsLAorCQkJCQkgICAgIGludCBfX3VzZXIgKm9wdGxlbiwgdW5zaWduZWQgbGVuKQoreworCXJldHVybiAtRU5PUFJPVE9PUFQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3NrX2FsbG9jKHN0cnVjdCBzb2NrICpzaywgaW50IGZhbWlseSwgaW50IHByaW9yaXR5KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2VjdXJpdHlfc2tfZnJlZShzdHJ1Y3Qgc29jayAqc2spCit7Cit9CisjZW5kaWYJLyogQ09ORklHX1NFQ1VSSVRZX05FVFdPUksgKi8KKworI2VuZGlmIC8qICEgX19MSU5VWF9TRUNVUklUWV9IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VsZWN0aW9uLmggYi9pbmNsdWRlL2xpbnV4L3NlbGVjdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkMzQwOGIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3NlbGVjdGlvbi5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBzZWxlY3Rpb24uaAorICoKKyAqIEludGVyZmFjZSBiZXR3ZWVuIGNvbnNvbGUuYywgdHR5X2lvLmMsIHZ0LmMsIHZjX3NjcmVlbi5jIGFuZCBzZWxlY3Rpb24uYworICovCisKKyNpZm5kZWYgX0xJTlVYX1NFTEVDVElPTl9IXworI2RlZmluZSBfTElOVVhfU0VMRUNUSU9OX0hfCisKKyNpbmNsdWRlIDxsaW51eC90aW9jbC5oPgorI2luY2x1ZGUgPGxpbnV4L3Z0X2J1ZmZlci5oPgorCitleHRlcm4gc3RydWN0IHZjX2RhdGEgKnNlbF9jb25zOworCitleHRlcm4gdm9pZCBjbGVhcl9zZWxlY3Rpb24odm9pZCk7CitleHRlcm4gaW50IHNldF9zZWxlY3Rpb24oY29uc3Qgc3RydWN0IHRpb2NsX3NlbGVjdGlvbiBfX3VzZXIgKnNlbCwgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CitleHRlcm4gaW50IHBhc3RlX3NlbGVjdGlvbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKK2V4dGVybiBpbnQgc2VsX2xvYWRsdXQoY2hhciBfX3VzZXIgKnApOworZXh0ZXJuIGludCBtb3VzZV9yZXBvcnRpbmcodm9pZCk7CitleHRlcm4gdm9pZCBtb3VzZV9yZXBvcnQoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHksIGludCBidXR0LCBpbnQgbXJ4LCBpbnQgbXJ5KTsKKworZXh0ZXJuIGludCBjb25zb2xlX2JsYW5rZWQ7CisKK2V4dGVybiB1bnNpZ25lZCBjaGFyIGNvbG9yX3RhYmxlW107CitleHRlcm4gaW50IGRlZmF1bHRfcmVkW107CitleHRlcm4gaW50IGRlZmF1bHRfZ3JuW107CitleHRlcm4gaW50IGRlZmF1bHRfYmx1W107CisKK2V4dGVybiB1bnNpZ25lZCBzaG9ydCAqc2NyZWVuX3BvcyhzdHJ1Y3QgdmNfZGF0YSAqdmMsIGludCB3X29mZnNldCwgaW50IHZpZXdlZCk7CitleHRlcm4gdTE2IHNjcmVlbl9nbHlwaChzdHJ1Y3QgdmNfZGF0YSAqdmMsIGludCBvZmZzZXQpOworZXh0ZXJuIHZvaWQgY29tcGxlbWVudF9wb3Moc3RydWN0IHZjX2RhdGEgKnZjLCBpbnQgb2Zmc2V0KTsKK2V4dGVybiB2b2lkIGludmVydF9zY3JlZW4oc3RydWN0IHZjX2RhdGEgKnZjLCBpbnQgb2Zmc2V0LCBpbnQgY291bnQsIGludCBzaGlmdCk7CisKK2V4dGVybiB2b2lkIGdldGNvbnN4eShzdHJ1Y3QgdmNfZGF0YSAqdmMsIHVuc2lnbmVkIGNoYXIgKnApOworZXh0ZXJuIHZvaWQgcHV0Y29uc3h5KHN0cnVjdCB2Y19kYXRhICp2YywgdW5zaWduZWQgY2hhciAqcCk7CisKK2V4dGVybiB1MTYgdmNzX3Njcl9yZWFkdyhzdHJ1Y3QgdmNfZGF0YSAqdmMsIGNvbnN0IHUxNiAqb3JnKTsKK2V4dGVybiB2b2lkIHZjc19zY3Jfd3JpdGV3KHN0cnVjdCB2Y19kYXRhICp2YywgdTE2IHZhbCwgdTE2ICpvcmcpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VsaW51eF9uZXRsaW5rLmggYi9pbmNsdWRlL2xpbnV4L3NlbGludXhfbmV0bGluay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1N2U2ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3NlbGludXhfbmV0bGluay5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBOZXRsaW5rIGV2ZW50IG5vdGlmaWNhdGlvbnMgZm9yIFNFTGludXguCisgKgorICogQXV0aG9yOiBKYW1lcyBNb3JyaXMgPGptb3JyaXNAcmVkaGF0LmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgUmVkIEhhdCwgSW5jLiwgSmFtZXMgTW9ycmlzIDxqbW9ycmlzQHJlZGhhdC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLAorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpZm5kZWYgX0xJTlVYX1NFTElOVVhfTkVUTElOS19ICisjZGVmaW5lIF9MSU5VWF9TRUxJTlVYX05FVExJTktfSAorCisvKiBNZXNzYWdlIHR5cGVzLiAqLworI2RlZmluZSBTRUxOTF9NU0dfQkFTRSAweDEwCitlbnVtIHsKKwlTRUxOTF9NU0dfU0VURU5GT1JDRSA9IFNFTE5MX01TR19CQVNFLAorCVNFTE5MX01TR19QT0xJQ1lMT0FELAorCVNFTE5MX01TR19NQVgKK307CisKKy8qIE11bHRpY2FzdCBncm91cHMgKi8KKyNkZWZpbmUgU0VMTkxfR1JQX05PTkUJCTB4MDAwMDAwMDAKKyNkZWZpbmUgU0VMTkxfR1JQX0FWQwkJMHgwMDAwMDAwMQkvKiBBVkMgbm90aWZpY2F0aW9ucyAqLworI2RlZmluZSBTRUxOTF9HUlBfQUxMCQkweGZmZmZmZmZmCisKKy8qIE1lc3NhZ2Ugc3RydWN0dXJlcyAqLworc3RydWN0IHNlbG5sX21zZ19zZXRlbmZvcmNlIHsKKwlpbnQzMl90CQl2YWw7Cit9OworCitzdHJ1Y3Qgc2VsbmxfbXNnX3BvbGljeWxvYWQgeworCXVfaW50MzJfdAlzZXFubzsKK307CisKKyNlbmRpZiAvKiBfTElOVVhfU0VMSU5VWF9ORVRMSU5LX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VtLmggYi9pbmNsdWRlL2xpbnV4L3NlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkODUxNmIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3NlbS5oCkBAIC0wLDAgKzEsMTU3IEBACisjaWZuZGVmIF9MSU5VWF9TRU1fSAorI2RlZmluZSBfTElOVVhfU0VNX0gKKworI2luY2x1ZGUgPGxpbnV4L2lwYy5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKworLyogc2Vtb3AgZmxhZ3MgKi8KKyNkZWZpbmUgU0VNX1VORE8gICAgICAgIDB4MTAwMCAgLyogdW5kbyB0aGUgb3BlcmF0aW9uIG9uIGV4aXQgKi8KKworLyogc2VtY3RsIENvbW1hbmQgRGVmaW5pdGlvbnMuICovCisjZGVmaW5lIEdFVFBJRCAgMTEgICAgICAgLyogZ2V0IHNlbXBpZCAqLworI2RlZmluZSBHRVRWQUwgIDEyICAgICAgIC8qIGdldCBzZW12YWwgKi8KKyNkZWZpbmUgR0VUQUxMICAxMyAgICAgICAvKiBnZXQgYWxsIHNlbXZhbCdzICovCisjZGVmaW5lIEdFVE5DTlQgMTQgICAgICAgLyogZ2V0IHNlbW5jbnQgKi8KKyNkZWZpbmUgR0VUWkNOVCAxNSAgICAgICAvKiBnZXQgc2VtemNudCAqLworI2RlZmluZSBTRVRWQUwgIDE2ICAgICAgIC8qIHNldCBzZW12YWwgKi8KKyNkZWZpbmUgU0VUQUxMICAxNyAgICAgICAvKiBzZXQgYWxsIHNlbXZhbCdzICovCisKKy8qIGlwY3MgY3RsIGNtZHMgKi8KKyNkZWZpbmUgU0VNX1NUQVQgMTgKKyNkZWZpbmUgU0VNX0lORk8gMTkKKworLyogT2Jzb2xldGUsIHVzZWQgb25seSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgYW5kIGxpYmM1IGNvbXBpbGVzICovCitzdHJ1Y3Qgc2VtaWRfZHMgeworCXN0cnVjdCBpcGNfcGVybQlzZW1fcGVybTsJCS8qIHBlcm1pc3Npb25zIC4uIHNlZSBpcGMuaCAqLworCV9fa2VybmVsX3RpbWVfdAlzZW1fb3RpbWU7CQkvKiBsYXN0IHNlbW9wIHRpbWUgKi8KKwlfX2tlcm5lbF90aW1lX3QJc2VtX2N0aW1lOwkJLyogbGFzdCBjaGFuZ2UgdGltZSAqLworCXN0cnVjdCBzZW0JKnNlbV9iYXNlOwkJLyogcHRyIHRvIGZpcnN0IHNlbWFwaG9yZSBpbiBhcnJheSAqLworCXN0cnVjdCBzZW1fcXVldWUgKnNlbV9wZW5kaW5nOwkJLyogcGVuZGluZyBvcGVyYXRpb25zIHRvIGJlIHByb2Nlc3NlZCAqLworCXN0cnVjdCBzZW1fcXVldWUgKipzZW1fcGVuZGluZ19sYXN0OwkvKiBsYXN0IHBlbmRpbmcgb3BlcmF0aW9uICovCisJc3RydWN0IHNlbV91bmRvCSp1bmRvOwkJCS8qIHVuZG8gcmVxdWVzdHMgb24gdGhpcyBhcnJheSAqLworCXVuc2lnbmVkIHNob3J0CXNlbV9uc2VtczsJCS8qIG5vLiBvZiBzZW1hcGhvcmVzIGluIGFycmF5ICovCit9OworCisvKiBJbmNsdWRlIHRoZSBkZWZpbml0aW9uIG9mIHNlbWlkNjRfZHMgKi8KKyNpbmNsdWRlIDxhc20vc2VtYnVmLmg+CisKKy8qIHNlbW9wIHN5c3RlbSBjYWxscyB0YWtlcyBhbiBhcnJheSBvZiB0aGVzZS4gKi8KK3N0cnVjdCBzZW1idWYgeworCXVuc2lnbmVkIHNob3J0ICBzZW1fbnVtOwkvKiBzZW1hcGhvcmUgaW5kZXggaW4gYXJyYXkgKi8KKwlzaG9ydAkJc2VtX29wOwkJLyogc2VtYXBob3JlIG9wZXJhdGlvbiAqLworCXNob3J0CQlzZW1fZmxnOwkvKiBvcGVyYXRpb24gZmxhZ3MgKi8KK307CisKKy8qIGFyZyBmb3Igc2VtY3RsIHN5c3RlbSBjYWxscy4gKi8KK3VuaW9uIHNlbXVuIHsKKwlpbnQgdmFsOwkJCS8qIHZhbHVlIGZvciBTRVRWQUwgKi8KKwlzdHJ1Y3Qgc2VtaWRfZHMgX191c2VyICpidWY7CS8qIGJ1ZmZlciBmb3IgSVBDX1NUQVQgJiBJUENfU0VUICovCisJdW5zaWduZWQgc2hvcnQgX191c2VyICphcnJheTsJLyogYXJyYXkgZm9yIEdFVEFMTCAmIFNFVEFMTCAqLworCXN0cnVjdCBzZW1pbmZvIF9fdXNlciAqX19idWY7CS8qIGJ1ZmZlciBmb3IgSVBDX0lORk8gKi8KKwl2b2lkIF9fdXNlciAqX19wYWQ7Cit9OworCitzdHJ1Y3QgIHNlbWluZm8geworCWludCBzZW1tYXA7CisJaW50IHNlbW1uaTsKKwlpbnQgc2VtbW5zOworCWludCBzZW1tbnU7CisJaW50IHNlbW1zbDsKKwlpbnQgc2Vtb3BtOworCWludCBzZW11bWU7CisJaW50IHNlbXVzejsKKwlpbnQgc2Vtdm14OworCWludCBzZW1hZW07Cit9OworCisjZGVmaW5lIFNFTU1OSSAgMTI4ICAgICAgICAgICAgIC8qIDw9IElQQ01OSSAgbWF4ICMgb2Ygc2VtYXBob3JlIGlkZW50aWZpZXJzICovCisjZGVmaW5lIFNFTU1TTCAgMjUwICAgICAgICAgICAgIC8qIDw9IDggMDAwIG1heCBudW0gb2Ygc2VtYXBob3JlcyBwZXIgaWQgKi8KKyNkZWZpbmUgU0VNTU5TICAoU0VNTU5JKlNFTU1TTCkgLyogPD0gSU5UX01BWCBtYXggIyBvZiBzZW1hcGhvcmVzIGluIHN5c3RlbSAqLworI2RlZmluZSBTRU1PUE0gIDMyCSAgICAgICAgLyogPD0gMSAwMDAgbWF4IG51bSBvZiBvcHMgcGVyIHNlbW9wIGNhbGwgKi8KKyNkZWZpbmUgU0VNVk1YICAzMjc2NyAgICAgICAgICAgLyogPD0gMzI3Njcgc2VtYXBob3JlIG1heGltdW0gdmFsdWUgKi8KKyNkZWZpbmUgU0VNQUVNICBTRU1WTVggICAgICAgICAgLyogYWRqdXN0IG9uIGV4aXQgbWF4IHZhbHVlICovCisKKy8qIHVudXNlZCAqLworI2RlZmluZSBTRU1VTUUgIFNFTU9QTSAgICAgICAgICAvKiBtYXggbnVtIG9mIHVuZG8gZW50cmllcyBwZXIgcHJvY2VzcyAqLworI2RlZmluZSBTRU1NTlUgIFNFTU1OUyAgICAgICAgICAvKiBudW0gb2YgdW5kbyBzdHJ1Y3R1cmVzIHN5c3RlbSB3aWRlICovCisjZGVmaW5lIFNFTU1BUCAgU0VNTU5TICAgICAgICAgIC8qICMgb2YgZW50cmllcyBpbiBzZW1hcGhvcmUgbWFwICovCisjZGVmaW5lIFNFTVVTWiAgMjAJCS8qIHNpemVvZiBzdHJ1Y3Qgc2VtX3VuZG8gKi8KKworI2lmZGVmIF9fS0VSTkVMX18KKworLyogT25lIHNlbWFwaG9yZSBzdHJ1Y3R1cmUgZm9yIGVhY2ggc2VtYXBob3JlIGluIHRoZSBzeXN0ZW0uICovCitzdHJ1Y3Qgc2VtIHsKKwlpbnQJc2VtdmFsOwkJLyogY3VycmVudCB2YWx1ZSAqLworCWludAlzZW1waWQ7CQkvKiBwaWQgb2YgbGFzdCBvcGVyYXRpb24gKi8KK307CisKKy8qIE9uZSBzZW1fYXJyYXkgZGF0YSBzdHJ1Y3R1cmUgZm9yIGVhY2ggc2V0IG9mIHNlbWFwaG9yZXMgaW4gdGhlIHN5c3RlbS4gKi8KK3N0cnVjdCBzZW1fYXJyYXkgeworCXN0cnVjdCBrZXJuX2lwY19wZXJtCXNlbV9wZXJtOwkvKiBwZXJtaXNzaW9ucyAuLiBzZWUgaXBjLmggKi8KKwl0aW1lX3QJCQlzZW1fb3RpbWU7CS8qIGxhc3Qgc2Vtb3AgdGltZSAqLworCXRpbWVfdAkJCXNlbV9jdGltZTsJLyogbGFzdCBjaGFuZ2UgdGltZSAqLworCXN0cnVjdCBzZW0JCSpzZW1fYmFzZTsJLyogcHRyIHRvIGZpcnN0IHNlbWFwaG9yZSBpbiBhcnJheSAqLworCXN0cnVjdCBzZW1fcXVldWUJKnNlbV9wZW5kaW5nOwkvKiBwZW5kaW5nIG9wZXJhdGlvbnMgdG8gYmUgcHJvY2Vzc2VkICovCisJc3RydWN0IHNlbV9xdWV1ZQkqKnNlbV9wZW5kaW5nX2xhc3Q7IC8qIGxhc3QgcGVuZGluZyBvcGVyYXRpb24gKi8KKwlzdHJ1Y3Qgc2VtX3VuZG8JCSp1bmRvOwkJLyogdW5kbyByZXF1ZXN0cyBvbiB0aGlzIGFycmF5ICovCisJdW5zaWduZWQgbG9uZwkJc2VtX25zZW1zOwkvKiBuby4gb2Ygc2VtYXBob3JlcyBpbiBhcnJheSAqLworfTsKKworLyogT25lIHF1ZXVlIGZvciBlYWNoIHNsZWVwaW5nIHByb2Nlc3MgaW4gdGhlIHN5c3RlbS4gKi8KK3N0cnVjdCBzZW1fcXVldWUgeworCXN0cnVjdCBzZW1fcXVldWUgKgluZXh0OwkgLyogbmV4dCBlbnRyeSBpbiB0aGUgcXVldWUgKi8KKwlzdHJ1Y3Qgc2VtX3F1ZXVlICoqCXByZXY7CSAvKiBwcmV2aW91cyBlbnRyeSBpbiB0aGUgcXVldWUsICoocS0+cHJldikgPT0gcSAqLworCXN0cnVjdCB0YXNrX3N0cnVjdCoJc2xlZXBlcjsgLyogdGhpcyBwcm9jZXNzICovCisJc3RydWN0IHNlbV91bmRvICoJdW5kbzsJIC8qIHVuZG8gc3RydWN0dXJlICovCisJaW50ICAgIAkJCXBpZDsJIC8qIHByb2Nlc3MgaWQgb2YgcmVxdWVzdGluZyBwcm9jZXNzICovCisJaW50ICAgIAkJCXN0YXR1czsJIC8qIGNvbXBsZXRpb24gc3RhdHVzIG9mIG9wZXJhdGlvbiAqLworCXN0cnVjdCBzZW1fYXJyYXkgKglzbWE7CSAvKiBzZW1hcGhvcmUgYXJyYXkgZm9yIG9wZXJhdGlvbnMgKi8KKwlpbnQJCQlpZDsJIC8qIGludGVybmFsIHNlbSBpZCAqLworCXN0cnVjdCBzZW1idWYgKgkJc29wczsJIC8qIGFycmF5IG9mIHBlbmRpbmcgb3BlcmF0aW9ucyAqLworCWludAkJCW5zb3BzOwkgLyogbnVtYmVyIG9mIG9wZXJhdGlvbnMgKi8KKwlpbnQJCQlhbHRlcjsgICAvKiBkb2VzIHRoZSBvcGVyYXRpb24gYWx0ZXIgdGhlIGFycmF5PyAqLworfTsKKworLyogRWFjaCB0YXNrIGhhcyBhIGxpc3Qgb2YgdW5kbyByZXF1ZXN0cy4gVGhleSBhcmUgZXhlY3V0ZWQgYXV0b21hdGljYWxseQorICogd2hlbiB0aGUgcHJvY2VzcyBleGl0cy4KKyAqLworc3RydWN0IHNlbV91bmRvIHsKKwlzdHJ1Y3Qgc2VtX3VuZG8gKglwcm9jX25leHQ7CS8qIG5leHQgZW50cnkgb24gdGhpcyBwcm9jZXNzICovCisJc3RydWN0IHNlbV91bmRvICoJaWRfbmV4dDsJLyogbmV4dCBlbnRyeSBvbiB0aGlzIHNlbWFwaG9yZSBzZXQgKi8KKwlpbnQJCQlzZW1pZDsJCS8qIHNlbWFwaG9yZSBzZXQgaWRlbnRpZmllciAqLworCXNob3J0ICoJCQlzZW1hZGo7CQkvKiBhcnJheSBvZiBhZGp1c3RtZW50cywgb25lIHBlciBzZW1hcGhvcmUgKi8KK307CisKKy8qIHNlbV91bmRvX2xpc3QgY29udHJvbHMgc2hhcmVkIGFjY2VzcyB0byB0aGUgbGlzdCBvZiBzZW1fdW5kbyBzdHJ1Y3R1cmVzCisgKiB0aGF0IG1heSBiZSBzaGFyZWQgYW1vbmcgYWxsIGEgQ0xPTkVfU1lTVlNFTSB0YXNrIGdyb3VwLgorICovIAorc3RydWN0IHNlbV91bmRvX2xpc3QgeworCWF0b21pY190CXJlZmNudDsKKwlzcGlubG9ja190CWxvY2s7CisJc3RydWN0IHNlbV91bmRvCSpwcm9jX2xpc3Q7Cit9OworCitzdHJ1Y3Qgc3lzdl9zZW0geworCXN0cnVjdCBzZW1fdW5kb19saXN0ICp1bmRvX2xpc3Q7Cit9OworCisjaWZkZWYgQ09ORklHX1NZU1ZJUEMKKworZXh0ZXJuIGludCBjb3B5X3NlbXVuZG8odW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spOworZXh0ZXJuIHZvaWQgZXhpdF9zZW0oc3RydWN0IHRhc2tfc3RydWN0ICp0c2spOworCisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgY29weV9zZW11bmRvKHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZXhpdF9zZW0oc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJcmV0dXJuOworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfTElOVVhfU0VNX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VxX2ZpbGUuaCBiL2luY2x1ZGUvbGludXgvc2VxX2ZpbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTBhOTc0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9zZXFfZmlsZS5oCkBAIC0wLDAgKzEsNTQgQEAKKyNpZm5kZWYgX0xJTlVYX1NFUV9GSUxFX0gKKyNkZWZpbmUgX0xJTlVYX1NFUV9GSUxFX0gKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KKworc3RydWN0IHNlcV9vcGVyYXRpb25zOworc3RydWN0IGZpbGU7CitzdHJ1Y3QgdmZzbW91bnQ7CitzdHJ1Y3QgZGVudHJ5Oworc3RydWN0IGlub2RlOworCitzdHJ1Y3Qgc2VxX2ZpbGUgeworCWNoYXIgKmJ1ZjsKKwlzaXplX3Qgc2l6ZTsKKwlzaXplX3QgZnJvbTsKKwlzaXplX3QgY291bnQ7CisJbG9mZl90IGluZGV4OworCWxvZmZfdCB2ZXJzaW9uOworCXN0cnVjdCBzZW1hcGhvcmUgc2VtOworCXN0cnVjdCBzZXFfb3BlcmF0aW9ucyAqb3A7CisJdm9pZCAqcHJpdmF0ZTsKK307CisKK3N0cnVjdCBzZXFfb3BlcmF0aW9ucyB7CisJdm9pZCAqICgqc3RhcnQpIChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcG9zKTsKKwl2b2lkICgqc3RvcCkgKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdik7CisJdm9pZCAqICgqbmV4dCkgKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpOworCWludCAoKnNob3cpIChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpOworfTsKKworaW50IHNlcV9vcGVuKHN0cnVjdCBmaWxlICosIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyAqKTsKK3NzaXplX3Qgc2VxX3JlYWQoc3RydWN0IGZpbGUgKiwgY2hhciBfX3VzZXIgKiwgc2l6ZV90LCBsb2ZmX3QgKik7Citsb2ZmX3Qgc2VxX2xzZWVrKHN0cnVjdCBmaWxlICosIGxvZmZfdCwgaW50KTsKK2ludCBzZXFfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7CitpbnQgc2VxX2VzY2FwZShzdHJ1Y3Qgc2VxX2ZpbGUgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworaW50IHNlcV9wdXRjKHN0cnVjdCBzZXFfZmlsZSAqbSwgY2hhciBjKTsKK2ludCBzZXFfcHV0cyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGNvbnN0IGNoYXIgKnMpOworCitpbnQgc2VxX3ByaW50ZihzdHJ1Y3Qgc2VxX2ZpbGUgKiwgY29uc3QgY2hhciAqLCAuLi4pCisJX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLDIsMykpKTsKKworaW50IHNlcV9wYXRoKHN0cnVjdCBzZXFfZmlsZSAqLCBzdHJ1Y3QgdmZzbW91bnQgKiwgc3RydWN0IGRlbnRyeSAqLCBjaGFyICopOworCitpbnQgc2luZ2xlX29wZW4oc3RydWN0IGZpbGUgKiwgaW50ICgqKShzdHJ1Y3Qgc2VxX2ZpbGUgKiwgdm9pZCAqKSwgdm9pZCAqKTsKK2ludCBzaW5nbGVfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7CitpbnQgc2VxX3JlbGVhc2VfcHJpdmF0ZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7CisKKyNkZWZpbmUgU0VRX1NUQVJUX1RPS0VOICgodm9pZCAqKTEpCisKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlcWxvY2suaCBiL2luY2x1ZGUvbGludXgvc2VxbG9jay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjYTliMGYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3NlcWxvY2suaApAQCAtMCwwICsxLDE3NSBAQAorI2lmbmRlZiBfX0xJTlVYX1NFUUxPQ0tfSAorI2RlZmluZSBfX0xJTlVYX1NFUUxPQ0tfSAorLyoKKyAqIFJlYWRlci93cml0ZXIgY29uc2lzdGVudCBtZWNoYW5pc20gd2l0aG91dCBzdGFydmluZyB3cml0ZXJzLiBUaGlzIHR5cGUgb2YKKyAqIGxvY2sgZm9yIGRhdGEgd2hlcmUgdGhlIHJlYWRlciB3YW50cyBhIGNvbnNpdGVudCBzZXQgb2YgaW5mb3JtYXRpb24KKyAqIGFuZCBpcyB3aWxsaW5nIHRvIHJldHJ5IGlmIHRoZSBpbmZvcm1hdGlvbiBjaGFuZ2VzLiAgUmVhZGVycyBuZXZlcgorICogYmxvY2sgYnV0IHRoZXkgbWF5IGhhdmUgdG8gcmV0cnkgaWYgYSB3cml0ZXIgaXMgaW4KKyAqIHByb2dyZXNzLiBXcml0ZXJzIGRvIG5vdCB3YWl0IGZvciByZWFkZXJzLiAKKyAqCisgKiBUaGlzIGlzIG5vdCBhcyBjYWNoZSBmcmllbmRseSBhcyBicmxvY2suIEFsc28sIHRoaXMgd2lsbCBub3Qgd29yaworICogZm9yIGRhdGEgdGhhdCBjb250YWlucyBwb2ludGVycywgYmVjYXVzZSBhbnkgd3JpdGVyIGNvdWxkCisgKiBpbnZhbGlkYXRlIGEgcG9pbnRlciB0aGF0IGEgcmVhZGVyIHdhcyBmb2xsb3dpbmcuCisgKgorICogRXhwZWN0ZWQgcmVhZGVyIHVzYWdlOgorICogCWRvIHsKKyAqCSAgICBzZXEgPSByZWFkX3NlcWJlZ2luKCZmb28pOworICogCS4uLgorICogICAgICB9IHdoaWxlIChyZWFkX3NlcXJldHJ5KCZmb28sIHNlcSkpOworICoKKyAqCisgKiBPbiBub24tU01QIHRoZSBzcGluIGxvY2tzIGRpc2FwcGVhciBidXQgdGhlIHdyaXRlciBzdGlsbCBuZWVkcworICogdG8gaW5jcmVtZW50IHRoZSBzZXF1ZW5jZSB2YXJpYWJsZXMgYmVjYXVzZSBhbiBpbnRlcnJ1cHQgcm91dGluZSBjb3VsZAorICogY2hhbmdlIHRoZSBzdGF0ZSBvZiB0aGUgZGF0YS4KKyAqCisgKiBCYXNlZCBvbiB4ODZfNjQgdnN5c2NhbGwgZ2V0dGltZW9mZGF5IAorICogYnkgS2VpdGggT3dlbnMgYW5kIEFuZHJlYSBBcmNhbmdlbGkKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVlbXB0Lmg+CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBzZXF1ZW5jZTsKKwlzcGlubG9ja190IGxvY2s7Cit9IHNlcWxvY2tfdDsKKworLyoKKyAqIFRoZXNlIG1hY3JvcyB0cmlnZ2VyZWQgZ2NjLTMueCBjb21waWxlLXRpbWUgcHJvYmxlbXMuICBXZSB0aGluayB0aGVzZSBhcmUKKyAqIE9LIG5vdy4gIEJlIGNhdXRpb3VzLgorICovCisjZGVmaW5lIFNFUUxPQ0tfVU5MT0NLRUQgeyAwLCBTUElOX0xPQ0tfVU5MT0NLRUQgfQorI2RlZmluZSBzZXFsb2NrX2luaXQoeCkJZG8geyAqKHgpID0gKHNlcWxvY2tfdCkgU0VRTE9DS19VTkxPQ0tFRDsgfSB3aGlsZSAoMCkKKworCisvKiBMb2NrIG91dCBvdGhlciB3cml0ZXJzIGFuZCB1cGRhdGUgdGhlIGNvdW50LgorICogQWN0cyBsaWtlIGEgbm9ybWFsIHNwaW5fbG9jay91bmxvY2suCisgKiBEb24ndCBuZWVkIHByZWVtcHRfZGlzYWJsZSgpIGJlY2F1c2UgdGhhdCBpcyBpbiB0aGUgc3Bpbl9sb2NrIGFscmVhZHkuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZV9zZXFsb2NrKHNlcWxvY2tfdCAqc2wpCit7CisJc3Bpbl9sb2NrKCZzbC0+bG9jayk7CisJKytzbC0+c2VxdWVuY2U7CisJc21wX3dtYigpOwkJCQorfQkKKworc3RhdGljIGlubGluZSB2b2lkIHdyaXRlX3NlcXVubG9jayhzZXFsb2NrX3QgKnNsKSAKK3sKKwlzbXBfd21iKCk7CisJc2wtPnNlcXVlbmNlKys7CisJc3Bpbl91bmxvY2soJnNsLT5sb2NrKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgd3JpdGVfdHJ5c2VxbG9jayhzZXFsb2NrX3QgKnNsKQoreworCWludCByZXQgPSBzcGluX3RyeWxvY2soJnNsLT5sb2NrKTsKKworCWlmIChyZXQpIHsKKwkJKytzbC0+c2VxdWVuY2U7CisJCXNtcF93bWIoKTsJCQkKKwl9CisJcmV0dXJuIHJldDsKK30KKworLyogU3RhcnQgb2YgcmVhZCBjYWxjdWxhdGlvbiAtLSBmZXRjaCBsYXN0IGNvbXBsZXRlIHdyaXRlciB0b2tlbiAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCByZWFkX3NlcWJlZ2luKGNvbnN0IHNlcWxvY2tfdCAqc2wpCit7CisJdW5zaWduZWQgcmV0ID0gc2wtPnNlcXVlbmNlOworCXNtcF9ybWIoKTsKKwlyZXR1cm4gcmV0OworfQorCisvKiBUZXN0IGlmIHJlYWRlciBwcm9jZXNzZWQgaW52YWxpZCBkYXRhLgorICogSWYgaW5pdGlhbCB2YWx1ZXMgaXMgb2RkLCAKKyAqCXRoZW4gd3JpdGVyIGhhZCBhbHJlYWR5IHN0YXJ0ZWQgd2hlbiBzZWN0aW9uIHdhcyBlbnRlcmVkCisgKiBJZiBzZXF1ZW5jZSB2YWx1ZSBjaGFuZ2VkCisgKgl0aGVuIHdyaXRlciBjaGFuZ2VkIGRhdGEgd2hpbGUgaW4gc2VjdGlvbgorICogICAgCisgKiBVc2luZyB4b3Igc2F2ZXMgb25lIGNvbmRpdGlvbmFsIGJyYW5jaC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgcmVhZF9zZXFyZXRyeShjb25zdCBzZXFsb2NrX3QgKnNsLCB1bnNpZ25lZCBpdikKK3sKKwlzbXBfcm1iKCk7CisJcmV0dXJuIChpdiAmIDEpIHwgKHNsLT5zZXF1ZW5jZSBeIGl2KTsKK30KKworCisvKgorICogVmVyc2lvbiB1c2luZyBzZXF1ZW5jZSBjb3VudGVyIG9ubHkuCisgKiBUaGlzIGNhbiBiZSB1c2VkIHdoZW4gY29kZSBoYXMgaXRzIG93biBtdXRleCBwcm90ZWN0aW5nIHRoZQorICogdXBkYXRpbmcgc3RhcnRpbmcgYmVmb3JlIHRoZSB3cml0ZV9zZXFjb3VudGJlcWluKCkgYW5kIGVuZGluZworICogYWZ0ZXIgdGhlIHdyaXRlX3NlcWNvdW50X2VuZCgpLgorICovCisKK3R5cGVkZWYgc3RydWN0IHNlcWNvdW50IHsKKwl1bnNpZ25lZCBzZXF1ZW5jZTsKK30gc2VxY291bnRfdDsKKworI2RlZmluZSBTRVFDTlRfWkVSTyB7IDAgfQorI2RlZmluZSBzZXFjb3VudF9pbml0KHgpCWRvIHsgKih4KSA9IChzZXFjb3VudF90KSBTRVFDTlRfWkVSTzsgfSB3aGlsZSAoMCkKKworLyogU3RhcnQgb2YgcmVhZCB1c2luZyBwb2ludGVyIHRvIGEgc2VxdWVuY2UgY291bnRlciBvbmx5LiAgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgcmVhZF9zZXFjb3VudF9iZWdpbihjb25zdCBzZXFjb3VudF90ICpzKQoreworCXVuc2lnbmVkIHJldCA9IHMtPnNlcXVlbmNlOworCXNtcF9ybWIoKTsKKwlyZXR1cm4gcmV0OworfQorCisvKiBUZXN0IGlmIHJlYWRlciBwcm9jZXNzZWQgaW52YWxpZCBkYXRhLgorICogRXF1aXZhbGVudCB0bzogaXYgaXMgb2RkIG9yIHNlcXVlbmNlIG51bWJlciBoYXMgY2hhbmdlZC4KKyAqICAgICAgICAgICAgICAgIChpdiAmIDEpIHx8ICgqcyAhPSBpdikKKyAqIFVzaW5nIHhvciBzYXZlcyBvbmUgY29uZGl0aW9uYWwgYnJhbmNoLgorICovCitzdGF0aWMgaW5saW5lIGludCByZWFkX3NlcWNvdW50X3JldHJ5KGNvbnN0IHNlcWNvdW50X3QgKnMsIHVuc2lnbmVkIGl2KQoreworCXNtcF9ybWIoKTsKKwlyZXR1cm4gKGl2ICYgMSkgfCAocy0+c2VxdWVuY2UgXiBpdik7Cit9CisKKworLyoKKyAqIFNlcXVlbmNlIGNvdW50ZXIgb25seSB2ZXJzaW9uIGFzc3VtZXMgdGhhdCBjYWxsZXJzIGFyZSB1c2luZyB0aGVpcgorICogb3duIG11dGV4aW5nLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVfc2VxY291bnRfYmVnaW4oc2VxY291bnRfdCAqcykKK3sKKwlzLT5zZXF1ZW5jZSsrOworCXNtcF93bWIoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHdyaXRlX3NlcWNvdW50X2VuZChzZXFjb3VudF90ICpzKQoreworCXNtcF93bWIoKTsKKwlzLT5zZXF1ZW5jZSsrOworfQorCisvKgorICogUG9zc2libGUgc3cvaHcgSVJRIHByb3RlY3RlZCB2ZXJzaW9ucyBvZiB0aGUgaW50ZXJmYWNlcy4KKyAqLworI2RlZmluZSB3cml0ZV9zZXFsb2NrX2lycXNhdmUobG9jaywgZmxhZ3MpCQkJCVwKKwlkbyB7IGxvY2FsX2lycV9zYXZlKGZsYWdzKTsgd3JpdGVfc2VxbG9jayhsb2NrKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgd3JpdGVfc2VxbG9ja19pcnEobG9jaykJCQkJCQlcCisJZG8geyBsb2NhbF9pcnFfZGlzYWJsZSgpOyAgIHdyaXRlX3NlcWxvY2sobG9jayk7IH0gd2hpbGUgKDApCisjZGVmaW5lIHdyaXRlX3NlcWxvY2tfYmgobG9jaykJCQkJCQlcCisgICAgICAgIGRvIHsgbG9jYWxfYmhfZGlzYWJsZSgpOyAgICB3cml0ZV9zZXFsb2NrKGxvY2spOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIHdyaXRlX3NlcXVubG9ja19pcnFyZXN0b3JlKGxvY2ssIGZsYWdzKQkJCQlcCisJZG8geyB3cml0ZV9zZXF1bmxvY2sobG9jayk7IGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsgfSB3aGlsZSgwKQorI2RlZmluZSB3cml0ZV9zZXF1bmxvY2tfaXJxKGxvY2spCQkJCQlcCisJZG8geyB3cml0ZV9zZXF1bmxvY2sobG9jayk7IGxvY2FsX2lycV9lbmFibGUoKTsgfSB3aGlsZSgwKQorI2RlZmluZSB3cml0ZV9zZXF1bmxvY2tfYmgobG9jaykJCQkJCVwKKwlkbyB7IHdyaXRlX3NlcXVubG9jayhsb2NrKTsgbG9jYWxfYmhfZW5hYmxlKCk7IH0gd2hpbGUoMCkKKworI2RlZmluZSByZWFkX3NlcWJlZ2luX2lycXNhdmUobG9jaywgZmxhZ3MpCQkJCVwKKwkoeyBsb2NhbF9pcnFfc2F2ZShmbGFncyk7ICAgcmVhZF9zZXFiZWdpbihsb2NrKTsgfSkKKworI2RlZmluZSByZWFkX3NlcXJldHJ5X2lycXJlc3RvcmUobG9jaywgaXYsIGZsYWdzKQkJCVwKKwkoewkJCQkJCQkJXAorCQlpbnQgcmV0ID0gcmVhZF9zZXFyZXRyeShsb2NrLCBpdik7CQkJXAorCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CQkJCVwKKwkJcmV0OwkJCQkJCQlcCisJfSkKKworI2VuZGlmIC8qIF9fTElOVVhfU0VRTE9DS19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlcmlhbC5oIGIvaW5jbHVkZS9saW51eC9zZXJpYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDE0NTgyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9zZXJpYWwuaApAQCAtMCwwICsxLDE4OCBAQAorLyoKKyAqIGluY2x1ZGUvbGludXgvc2VyaWFsLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTIgYnkgVGhlb2RvcmUgVHMnby4KKyAqIAorICogUmVkaXN0cmlidXRpb24gb2YgdGhpcyBmaWxlIGlzIHBlcm1pdHRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSAKKyAqIFB1YmxpYyBMaWNlbnNlIChHUEwpCisgKi8KKworI2lmbmRlZiBfTElOVVhfU0VSSUFMX0gKKyNkZWZpbmUgX0xJTlVYX1NFUklBTF9ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKworLyoKKyAqIENvdW50ZXJzIG9mIHRoZSBpbnB1dCBsaW5lcyAoQ1RTLCBEU1IsIFJJLCBDRCkgaW50ZXJydXB0cworICovCisKK3N0cnVjdCBhc3luY19pY291bnQgeworCV9fdTMyCWN0cywgZHNyLCBybmcsIGRjZCwgdHgsIHJ4OworCV9fdTMyCWZyYW1lLCBwYXJpdHksIG92ZXJydW4sIGJyazsKKwlfX3UzMglidWZfb3ZlcnJ1bjsKK307CisKKy8qCisgKiBUaGUgc2l6ZSBvZiB0aGUgc2VyaWFsIHhtaXQgYnVmZmVyIGlzIDEgcGFnZSwgb3IgNDA5NiBieXRlcworICovCisjZGVmaW5lIFNFUklBTF9YTUlUX1NJWkUgUEFHRV9TSVpFCisKKyNlbmRpZgorCitzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCB7CisJaW50CXR5cGU7CisJaW50CWxpbmU7CisJdW5zaWduZWQgaW50CXBvcnQ7CisJaW50CWlycTsKKwlpbnQJZmxhZ3M7CisJaW50CXhtaXRfZmlmb19zaXplOworCWludAljdXN0b21fZGl2aXNvcjsKKwlpbnQJYmF1ZF9iYXNlOworCXVuc2lnbmVkIHNob3J0CWNsb3NlX2RlbGF5OworCWNoYXIJaW9fdHlwZTsKKwljaGFyCXJlc2VydmVkX2NoYXJbMV07CisJaW50CWh1YjY7CisJdW5zaWduZWQgc2hvcnQJY2xvc2luZ193YWl0OyAvKiB0aW1lIHRvIHdhaXQgYmVmb3JlIGNsb3NpbmcgKi8KKwl1bnNpZ25lZCBzaG9ydAljbG9zaW5nX3dhaXQyOyAvKiBubyBsb25nZXIgdXNlZC4uLiAqLworCXVuc2lnbmVkIGNoYXIJKmlvbWVtX2Jhc2U7CisJdW5zaWduZWQgc2hvcnQJaW9tZW1fcmVnX3NoaWZ0OworCXVuc2lnbmVkIGludAlwb3J0X2hpZ2g7CisJdW5zaWduZWQgbG9uZwlpb21hcF9iYXNlOwkvKiBjb29raWUgcGFzc2VkIGludG8gaW9yZW1hcCAqLworfTsKKworLyoKKyAqIEZvciB0aGUgY2xvc2Ugd2FpdCB0aW1lcywgMCBtZWFucyB3YWl0IGZvcmV2ZXIgZm9yIHNlcmlhbCBwb3J0IHRvCisgKiBmbHVzaCBpdHMgb3V0cHV0LiAgNjU1MzUgbWVhbnMgZG9uJ3Qgd2FpdCBhdCBhbGwuCisgKi8KKyNkZWZpbmUgQVNZTkNfQ0xPU0lOR19XQUlUX0lORgkwCisjZGVmaW5lIEFTWU5DX0NMT1NJTkdfV0FJVF9OT05FCTY1NTM1CisKKy8qCisgKiBUaGVzZSBhcmUgdGhlIHN1cHBvcnRlZCBzZXJpYWwgdHlwZXMuCisgKi8KKyNkZWZpbmUgUE9SVF9VTktOT1dOCTAKKyNkZWZpbmUgUE9SVF84MjUwCTEKKyNkZWZpbmUgUE9SVF8xNjQ1MAkyCisjZGVmaW5lIFBPUlRfMTY1NTAJMworI2RlZmluZSBQT1JUXzE2NTUwQQk0CisjZGVmaW5lIFBPUlRfQ0lSUlVTICAgICA1CS8qIHVzdXJwZWQgYnkgY3ljbGFkZXMuYyAqLworI2RlZmluZSBQT1JUXzE2NjUwCTYKKyNkZWZpbmUgUE9SVF8xNjY1MFYyCTcKKyNkZWZpbmUgUE9SVF8xNjc1MAk4CisjZGVmaW5lIFBPUlRfU1RBUlRFQ0gJOQkvKiB1c3VycGVkIGJ5IGN5Y2xhZGVzLmMgKi8KKyNkZWZpbmUgUE9SVF8xNkM5NTAJMTAJLyogT3hmb3JkIFNlbWljb25kdWN0b3IgKi8KKyNkZWZpbmUgUE9SVF8xNjY1NAkxMQorI2RlZmluZSBQT1JUXzE2ODUwCTEyCisjZGVmaW5lIFBPUlRfUlNBCTEzCS8qIFJTQS1EViBJSS9TIGNhcmQgKi8KKyNkZWZpbmUgUE9SVF9NQVgJMTMKKworI2RlZmluZSBTRVJJQUxfSU9fUE9SVAkwCisjZGVmaW5lIFNFUklBTF9JT19IVUI2CTEKKyNkZWZpbmUgU0VSSUFMX0lPX01FTQkyCisKK3N0cnVjdCBzZXJpYWxfdWFydF9jb25maWcgeworCWNoYXIJKm5hbWU7CisJaW50CWRmbF94bWl0X2ZpZm9fc2l6ZTsKKwlpbnQJZmxhZ3M7Cit9OworCisjZGVmaW5lIFVBUlRfQ0xFQVJfRklGTwkJMHgwMQorI2RlZmluZSBVQVJUX1VTRV9GSUZPCQkweDAyCisjZGVmaW5lIFVBUlRfU1RBUlRFQ0gJCTB4MDQKKyNkZWZpbmUgVUFSVF9OQVRTRU1JCQkweDA4CisKKy8qCisgKiBEZWZpbml0aW9ucyBmb3IgYXN5bmNfc3RydWN0IChhbmQgc2VyaWFsX3N0cnVjdCkgZmxhZ3MgZmllbGQKKyAqLworI2RlZmluZSBBU1lOQ19IVVBfTk9USUZZIDB4MDAwMSAvKiBOb3RpZnkgZ2V0dHkgb24gaGFuZ3VwcyBhbmQgY2xvc2VzIAorCQkJCSAgIG9uIHRoZSBjYWxsb3V0IHBvcnQgKi8KKyNkZWZpbmUgQVNZTkNfRk9VUlBPUlQgIDB4MDAwMgkvKiBTZXQgT1UxLCBPVVQyIHBlciBBU1QgRm91cnBvcnQgc2V0dGluZ3MgKi8KKyNkZWZpbmUgQVNZTkNfU0FLCTB4MDAwNAkvKiBTZWN1cmUgQXR0ZW50aW9uIEtleSAoT3JhbmdlIGJvb2spICovCisjZGVmaW5lIEFTWU5DX1NQTElUX1RFUk1JT1MgMHgwMDA4IC8qIFNlcGFyYXRlIHRlcm1pb3MgZm9yIGRpYWxpbi9jYWxsb3V0ICovCisKKyNkZWZpbmUgQVNZTkNfU1BEX01BU0sJMHgxMDMwCisjZGVmaW5lIEFTWU5DX1NQRF9ISQkweDAwMTAJLyogVXNlIDU2MDAwIGluc3RlYWQgb2YgMzg0MDAgYnBzICovCisKKyNkZWZpbmUgQVNZTkNfU1BEX1ZISQkweDAwMjAgIC8qIFVzZSAxMTUyMDAgaW5zdGVhZCBvZiAzODQwMCBicHMgKi8KKyNkZWZpbmUgQVNZTkNfU1BEX0NVU1QJMHgwMDMwICAvKiBVc2UgdXNlci1zcGVjaWZpZWQgZGl2aXNvciAqLworCisjZGVmaW5lIEFTWU5DX1NLSVBfVEVTVAkweDAwNDAgLyogU2tpcCBVQVJUIHRlc3QgZHVyaW5nIGF1dG9jb25maWd1cmF0aW9uICovCisjZGVmaW5lIEFTWU5DX0FVVE9fSVJRICAweDAwODAgLyogRG8gYXV0b21hdGljIElSUSBkdXJpbmcgYXV0b2NvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgQVNZTkNfU0VTU0lPTl9MT0NLT1VUIDB4MDEwMCAvKiBMb2NrIG91dCBjdWEgb3BlbnMgYmFzZWQgb24gc2Vzc2lvbiAqLworI2RlZmluZSBBU1lOQ19QR1JQX0xPQ0tPVVQgICAgMHgwMjAwIC8qIExvY2sgb3V0IGN1YSBvcGVucyBiYXNlZCBvbiBwZ3JwICovCisjZGVmaW5lIEFTWU5DX0NBTExPVVRfTk9IVVAgICAweDA0MDAgLyogRG9uJ3QgZG8gaGFuZ3VwcyBmb3IgY3VhIGRldmljZSAqLworCisjZGVmaW5lIEFTWU5DX0hBUkRQUFNfQ0QJMHgwODAwCS8qIENhbGwgaGFyZHBwcyB3aGVuIENEIGdvZXMgaGlnaCAgKi8KKworI2RlZmluZSBBU1lOQ19TUERfU0hJCTB4MTAwMAkvKiBVc2UgMjMwNDAwIGluc3RlYWQgb2YgMzg0MDAgYnBzICovCisjZGVmaW5lIEFTWU5DX1NQRF9XQVJQCTB4MTAxMAkvKiBVc2UgNDYwODAwIGluc3RlYWQgb2YgMzg0MDAgYnBzICovCisKKyNkZWZpbmUgQVNZTkNfTE9XX0xBVEVOQ1kgMHgyMDAwIC8qIFJlcXVlc3QgbG93IGxhdGVuY3kgYmVoYXZpb3VyICovCisKKyNkZWZpbmUgQVNZTkNfQlVHR1lfVUFSVCAgMHg0MDAwIC8qIFRoaXMgaXMgYSBidWdneSBVQVJULCBza2lwIHNvbWUgc2FmZXR5CisJCQkJICAqIGNoZWNrcy4gIE5vdGU6IGNhbiBiZSBkYW5nZXJvdXMhICovCisKKyNkZWZpbmUgQVNZTkNfQVVUT1BST0JFCSAweDgwMDAgLyogUG9ydCB3YXMgYXV0b3Byb2JlZCBieSBQQ0kgb3IgUE5QIGNvZGUgKi8KKworI2RlZmluZSBBU1lOQ19GTEFHUwkweDdGRkYJLyogUG9zc2libGUgbGVnYWwgYXN5bmMgZmxhZ3MgKi8KKyNkZWZpbmUgQVNZTkNfVVNSX01BU0sJMHgzNDMwCS8qIExlZ2FsIGZsYWdzIHRoYXQgbm9uLXByaXZpbGVnZWQKKwkJCQkgKiB1c2VycyBjYW4gc2V0IG9yIHJlc2V0ICovCisKKy8qIEludGVybmFsIGZsYWdzIHVzZWQgb25seSBieSBrZXJuZWwvY2hyX2Rydi9zZXJpYWwuYyAqLworI2RlZmluZSBBU1lOQ19JTklUSUFMSVpFRAkweDgwMDAwMDAwIC8qIFNlcmlhbCBwb3J0IHdhcyBpbml0aWFsaXplZCAqLworI2RlZmluZSBBU1lOQ19OT1JNQUxfQUNUSVZFCTB4MjAwMDAwMDAgLyogTm9ybWFsIGRldmljZSBpcyBhY3RpdmUgKi8KKyNkZWZpbmUgQVNZTkNfQk9PVF9BVVRPQ09ORgkweDEwMDAwMDAwIC8qIEF1dG9jb25maWd1cmUgcG9ydCBvbiBib290dXAgKi8KKyNkZWZpbmUgQVNZTkNfQ0xPU0lORwkJMHgwODAwMDAwMCAvKiBTZXJpYWwgcG9ydCBpcyBjbG9zaW5nICovCisjZGVmaW5lIEFTWU5DX0NUU19GTE9XCQkweDA0MDAwMDAwIC8qIERvIENUUyBmbG93IGNvbnRyb2wgKi8KKyNkZWZpbmUgQVNZTkNfQ0hFQ0tfQ0QJCTB4MDIwMDAwMDAgLyogaS5lLiwgQ0xPQ0FMICovCisjZGVmaW5lIEFTWU5DX1NIQVJFX0lSUQkJMHgwMTAwMDAwMCAvKiBmb3IgbXVsdGlmdW5jdGlvbiBjYXJkcworCQkJCQkgICAgIC0tLSBubyBsb25nZXIgdXNlZCAqLworI2RlZmluZSBBU1lOQ19DT05TX0ZMT1cJCTB4MDA4MDAwMDAgLyogZmxvdyBjb250cm9sIGZvciBjb25zb2xlICAqLworCisjZGVmaW5lIEFTWU5DX0JPT1RfT05MWU1DQQkweDAwNDAwMDAwIC8qIFByb2JlIG9ubHkgaWYgTUNBIGJ1cyAqLworI2RlZmluZSBBU1lOQ19JTlRFUk5BTF9GTEFHUwkweEZGQzAwMDAwIC8qIEludGVybmFsIGZsYWdzICovCisKKy8qCisgKiBNdWx0aXBvcnQgc2VyaWFsIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIC0tLSBleHRlcm5hbCBzdHJ1Y3R1cmUKKyAqLworc3RydWN0IHNlcmlhbF9tdWx0aXBvcnRfc3RydWN0IHsKKwlpbnQJCWlycTsKKwlpbnQJCXBvcnQxOworCXVuc2lnbmVkIGNoYXIJbWFzazEsIG1hdGNoMTsKKwlpbnQJCXBvcnQyOworCXVuc2lnbmVkIGNoYXIJbWFzazIsIG1hdGNoMjsKKwlpbnQJCXBvcnQzOworCXVuc2lnbmVkIGNoYXIJbWFzazMsIG1hdGNoMzsKKwlpbnQJCXBvcnQ0OworCXVuc2lnbmVkIGNoYXIJbWFzazQsIG1hdGNoNDsKKwlpbnQJCXBvcnRfbW9uaXRvcjsKKwlpbnQJcmVzZXJ2ZWRbMzJdOworfTsKKworLyoKKyAqIFNlcmlhbCBpbnB1dCBpbnRlcnJ1cHQgbGluZSBjb3VudGVycyAtLSBleHRlcm5hbCBzdHJ1Y3R1cmUKKyAqIEZvdXIgbGluZXMgY2FuIGludGVycnVwdDogQ1RTLCBEU1IsIFJJLCBEQ0QKKyAqLworc3RydWN0IHNlcmlhbF9pY291bnRlcl9zdHJ1Y3QgeworCWludCBjdHMsIGRzciwgcm5nLCBkY2Q7CisJaW50IHJ4LCB0eDsKKwlpbnQgZnJhbWUsIG92ZXJydW4sIHBhcml0eSwgYnJrOworCWludCBidWZfb3ZlcnJ1bjsKKwlpbnQgcmVzZXJ2ZWRbOV07Cit9OworCisKKyNpZmRlZiBfX0tFUk5FTF9fCisvKiBFeHBvcnQgdG8gYWxsb3cgUENNQ0lBIHRvIHVzZSB0aGlzIC0gRGF2ZSBIaW5kcyAqLworZXh0ZXJuIGludCByZWdpc3Rlcl9zZXJpYWwoc3RydWN0IHNlcmlhbF9zdHJ1Y3QgKnJlcSk7CitleHRlcm4gdm9pZCB1bnJlZ2lzdGVyX3NlcmlhbChpbnQgbGluZSk7CisKKy8qIEFsbG93IGFyY2hpdGVjdHVyZXMgdG8gb3ZlcnJpZGUgZW50cmllcyBpbiBzZXJpYWw4MjUwX3BvcnRzW10gYXQgcnVuIHRpbWU6ICovCitzdHJ1Y3QgdWFydF9wb3J0OwkvKiBmb3J3YXJkIGRlY2xhcmF0aW9uICovCitleHRlcm4gaW50IGVhcmx5X3NlcmlhbF9zZXR1cChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KTsKK2V4dGVybiBpbnQgZWFybHlfc2VyaWFsX2NvbnNvbGVfaW5pdChjaGFyICpvcHRpb25zKTsKK2V4dGVybiBpbnQgc2VyaWFsODI1MF9zdGFydF9jb25zb2xlKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIGNoYXIgKm9wdGlvbnMpOworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9MSU5VWF9TRVJJQUxfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZXJpYWwxNjcuaCBiL2luY2x1ZGUvbGludXgvc2VyaWFsMTY3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFiNmRmMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvc2VyaWFsMTY3LmgKQEAgLTAsMCArMSwxNzEgQEAKKy8qCisgKiBzZXJpYWwxNjcuaAorICoKKyAqIFJpY2hhcmQgSGlyc3QgW3JpY2hhcmRAc2xlZXBpZS5kZW1vbi5jby51a10KKyAqCisgKiBCYXNlZCBvbiBjeWNsYWRlcy5oCisgKi8KKworc3RydWN0IGN5Y2xhZGVzX21vbml0b3IgeworICAgICAgICB1bnNpZ25lZCBsb25nICAgICAgICAgICBpbnRfY291bnQ7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgICAgICAgICAgIGNoYXJfY291bnQ7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgICAgICAgICAgIGNoYXJfbWF4OworICAgICAgICB1bnNpZ25lZCBsb25nICAgICAgICAgICBjaGFyX2xhc3Q7Cit9OworCisvKgorICogVGhpcyBpcyBvdXIgaW50ZXJuYWwgc3RydWN0dXJlIGZvciBlYWNoIHNlcmlhbCBwb3J0J3Mgc3RhdGUuCisgKiAKKyAqIE1hbnkgZmllbGRzIGFyZSBwYXJhbGxlbGVkIGJ5IHRoZSBzdHJ1Y3R1cmUgdXNlZCBieSB0aGUgc2VyaWFsX3N0cnVjdAorICogc3RydWN0dXJlLgorICoKKyAqIEZvciBkZWZpbml0aW9ucyBvZiB0aGUgZmxhZ3MgZmllbGQsIHNlZSB0dHkuaAorICovCisKK3N0cnVjdCBjeWNsYWRlc19wb3J0IHsKKwlpbnQgICAgICAgICAgICAgICAgICAgICBtYWdpYzsKKwlpbnQgICAgICAgICAgICAgICAgICAgICB0eXBlOworCWludAkJCWNhcmQ7CisJaW50CQkJbGluZTsKKwlpbnQJCQlmbGFnczsgCQkvKiBkZWZpbmVkIGluIHR0eS5oICovCisJc3RydWN0IHR0eV9zdHJ1Y3QgCSp0dHk7CisJaW50CQkJcmVhZF9zdGF0dXNfbWFzazsKKwlpbnQJCQl0aW1lb3V0OworCWludAkJCXhtaXRfZmlmb19zaXplOworCWludCAgICAgICAgICAgICAgICAgICAgIGNvcjEsY29yMixjb3IzLGNvcjQsY29yNSxjb3I2LGNvcjc7CisJaW50ICAgICAgICAgICAgICAgICAgICAgdGJwcix0Y28scmJwcixyY287CisJaW50CQkJaWdub3JlX3N0YXR1c19tYXNrOworCWludAkJCWNsb3NlX2RlbGF5OworCWludAkJCUlFUjsgCS8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8KKwl1bnNpZ25lZCBsb25nCQlldmVudDsKKwl1bnNpZ25lZCBsb25nCQlsYXN0X2FjdGl2ZTsKKwlpbnQJCQljb3VudDsJLyogIyBvZiBmZCBvbiBkZXZpY2UgKi8KKwlpbnQgICAgICAgICAgICAgICAgICAgICB4X2NoYXI7IC8qIHRvIGJlIHB1c2hlZCBvdXQgQVNBUCAqLworCWludCAgICAgICAgICAgICAgICAgICAgIHhfYnJlYWs7CisJaW50CQkJYmxvY2tlZF9vcGVuOyAvKiAjIG9mIGJsb2NrZWQgb3BlbnMgKi8KKwl1bnNpZ25lZCBjaGFyIAkJKnhtaXRfYnVmOworCWludAkJCXhtaXRfaGVhZDsKKwlpbnQJCQl4bWl0X3RhaWw7CisJaW50CQkJeG1pdF9jbnQ7CisgICAgICAgIGludCAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRfdGhyZXNob2xkOworICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0X3RpbWVvdXQ7CisJc3RydWN0IHdvcmtfc3RydWN0CXRxdWV1ZTsKKwl3YWl0X3F1ZXVlX2hlYWRfdAlvcGVuX3dhaXQ7CisJd2FpdF9xdWV1ZV9oZWFkX3QJY2xvc2Vfd2FpdDsKKyAgICAgICAgc3RydWN0IGN5Y2xhZGVzX21vbml0b3IgbW9uOworfTsKKworI2RlZmluZSBDWUNMQURFU19NQUdJQyAgMHg0MzU5CisKKyNkZWZpbmUgQ1lHRVRNT04gICAgICAgICAgICAgICAgMHg0MzU5MDEKKyNkZWZpbmUgQ1lHRVRUSFJFU0ggICAgICAgICAgICAgMHg0MzU5MDIKKyNkZWZpbmUgQ1lTRVRUSFJFU0ggICAgICAgICAgICAgMHg0MzU5MDMKKyNkZWZpbmUgQ1lHRVRERUZUSFJFU0ggICAgICAgICAgMHg0MzU5MDQKKyNkZWZpbmUgQ1lTRVRERUZUSFJFU0ggICAgICAgICAgMHg0MzU5MDUKKyNkZWZpbmUgQ1lHRVRUSU1FT1VUICAgICAgICAgICAgMHg0MzU5MDYKKyNkZWZpbmUgQ1lTRVRUSU1FT1VUICAgICAgICAgICAgMHg0MzU5MDcKKyNkZWZpbmUgQ1lHRVRERUZUSU1FT1VUICAgICAgICAgMHg0MzU5MDgKKyNkZWZpbmUgQ1lTRVRERUZUSU1FT1VUICAgICAgICAgMHg0MzU5MDkKKworLyoKKyAqIEV2ZW50cyBhcmUgdXNlZCB0byBzY2hlZHVsZSB0aGluZ3MgdG8gaGFwcGVuIGF0IHRpbWVyLWludGVycnVwdAorICogdGltZSwgaW5zdGVhZCBvZiBhdCBjeSBpbnRlcnJ1cHQgdGltZS4KKyAqLworI2RlZmluZSBDeV9FVkVOVF9SRUFEX1BST0NFU1MJMAorI2RlZmluZSBDeV9FVkVOVF9XUklURV9XQUtFVVAJMQorI2RlZmluZSBDeV9FVkVOVF9IQU5HVVAJCTIKKyNkZWZpbmUgQ3lfRVZFTlRfQlJFQUsJCTMKKyNkZWZpbmUgQ3lfRVZFTlRfT1BFTl9XQUtFVVAJNAorCisKKworI2RlZmluZSBDeU1heENoaXBzUGVyQ2FyZCAxCisKKy8qKioqIGNkMjQwMSByZWdpc3RlcnMgKioqKi8KKworI2RlZmluZSBDeUdGUkNSICAgICAgICAgKDB4ODEpCisjZGVmaW5lIEN5Q0NSCQkoMHgxMykKKyNkZWZpbmUgICAgICBDeUNMUl9DSEFOCQkoMHg0MCkKKyNkZWZpbmUgICAgICBDeUlOSVRfQ0hBTgkoMHgyMCkKKyNkZWZpbmUgICAgICBDeUNISVBfUkVTRVQJKDB4MTApCisjZGVmaW5lICAgICAgQ3lFTkJfWE1UUgkJKDB4MDgpCisjZGVmaW5lICAgICAgQ3lESVNfWE1UUgkJKDB4MDQpCisjZGVmaW5lICAgICAgQ3lFTkJfUkNWUgkJKDB4MDIpCisjZGVmaW5lICAgICAgQ3lESVNfUkNWUgkJKDB4MDEpCisjZGVmaW5lIEN5Q0FSCQkoMHhlZSkKKyNkZWZpbmUgQ3lJRVIJCSgweDExKQorI2RlZmluZSAgICAgIEN5TWRtQ2gJCSgweDgwKQorI2RlZmluZSAgICAgIEN5UnhFeGMJCSgweDIwKQorI2RlZmluZSAgICAgIEN5UnhEYXRhCQkoMHgwOCkKKyNkZWZpbmUgICAgICBDeVR4TXB0eQkJKDB4MDIpCisjZGVmaW5lICAgICAgQ3lUeFJkeQkJKDB4MDEpCisjZGVmaW5lIEN5TElDUgkJKDB4MjYpCisjZGVmaW5lIEN5UklTUgkJKDB4ODkpCisjZGVmaW5lICAgICAgQ3lUSU1FT1VUCQkoMHg4MCkKKyNkZWZpbmUgICAgICBDeVNQRUNIQVIJCSgweDcwKQorI2RlZmluZSAgICAgIEN5T1ZFUlJVTgkJKDB4MDgpCisjZGVmaW5lICAgICAgQ3lQQVJJVFkJCSgweDA0KQorI2RlZmluZSAgICAgIEN5RlJBTUUJCSgweDAyKQorI2RlZmluZSAgICAgIEN5QlJFQUsJCSgweDAxKQorI2RlZmluZSBDeVJFT0lSCQkoMHg4NCkKKyNkZWZpbmUgQ3lURU9JUgkJKDB4ODUpCisjZGVmaW5lIEN5TUVPSVIJCSgweDg2KQorI2RlZmluZSAgICAgIEN5Tk9UUkFOUwkJKDB4MDgpCisjZGVmaW5lIEN5UkZPQwkJKDB4MzApCisjZGVmaW5lIEN5UkRSCQkoMHhmOCkKKyNkZWZpbmUgQ3lURFIJCSgweGY4KQorI2RlZmluZSBDeU1JU1IJCSgweDhiKQorI2RlZmluZSBDeVJJU1IJCSgweDg5KQorI2RlZmluZSBDeVRJU1IJCSgweDhhKQorI2RlZmluZSBDeU1TVlIxCQkoMHhkZSkKKyNkZWZpbmUgQ3lNU1ZSMgkJKDB4ZGYpCisjZGVmaW5lICAgICAgQ3lEU1IJCSgweDgwKQorI2RlZmluZSAgICAgIEN5RENECQkoMHg0MCkKKyNkZWZpbmUgICAgICBDeUNUUwkJKDB4MjApCisjZGVmaW5lICAgICAgQ3lEVFIJCSgweDAyKQorI2RlZmluZSAgICAgIEN5UlRTCQkoMHgwMSkKKyNkZWZpbmUgQ3lSVFBSTAkJKDB4MjUpCisjZGVmaW5lIEN5UlRQUkgJCSgweDI0KQorI2RlZmluZSBDeUNPUjEJCSgweDEwKQorI2RlZmluZSAgICAgIEN5UEFSSVRZX05PTkUJKDB4MDApCisjZGVmaW5lICAgICAgQ3lQQVJJVFlfRQkJKDB4NDApCisjZGVmaW5lICAgICAgQ3lQQVJJVFlfTwkJKDB4QzApCisjZGVmaW5lICAgICAgQ3lfNV9CSVRTCQkoMHgwNCkKKyNkZWZpbmUgICAgICBDeV82X0JJVFMJCSgweDA1KQorI2RlZmluZSAgICAgIEN5XzdfQklUUwkJKDB4MDYpCisjZGVmaW5lICAgICAgQ3lfOF9CSVRTCQkoMHgwNykKKyNkZWZpbmUgQ3lDT1IyCQkoMHgxNykKKyNkZWZpbmUgICAgICBDeUVUQwkJKDB4MjApCisjZGVmaW5lICAgICAgQ3lDdHNBRQkJKDB4MDIpCisjZGVmaW5lIEN5Q09SMwkJKDB4MTYpCisjZGVmaW5lICAgICAgQ3lfMV9TVE9QCQkoMHgwMikKKyNkZWZpbmUgICAgICBDeV8yX1NUT1AJCSgweDA0KQorI2RlZmluZSBDeUNPUjQJCSgweDE1KQorI2RlZmluZSAgICAgIEN5UkVDX0ZJRk8JCSgweDBGKSAgLyogUmVjZWl2ZSBGSUZPIHRocmVzaG9sZCAqLworI2RlZmluZSBDeUNPUjUJCSgweDE0KQorI2RlZmluZSBDeUNPUjYJCSgweDE4KQorI2RlZmluZSBDeUNPUjcJCSgweDA3KQorI2RlZmluZSBDeVJCUFIJCSgweGNiKQorI2RlZmluZSBDeVJDT1IJCSgweGM4KQorI2RlZmluZSBDeVRCUFIJCSgweGMzKQorI2RlZmluZSBDeVRDT1IJCSgweGMwKQorI2RlZmluZSBDeVNDSFIxCQkoMHgxZikKKyNkZWZpbmUgQ3lTQ0hSMiAJKDB4MWUpCisjZGVmaW5lIEN5VFBSCQkoMHhkYSkKKyNkZWZpbmUgQ3lQSUxSMQkJKDB4ZTMpCisjZGVmaW5lIEN5UElMUjIJCSgweGUwKQorI2RlZmluZSBDeVBJTFIzCQkoMHhlMSkKKyNkZWZpbmUgQ3lDTVIJCSgweDFiKQorI2RlZmluZSAgICAgIEN5QVNZTkMJCSgweDAyKQorI2RlZmluZSBDeUxJQ1IgICAgICAgICAgKDB4MjYpCisjZGVmaW5lIEN5TElWUiAgICAgICAgICAoMHgwOSkKKyNkZWZpbmUgQ3lTQ1JMCQkoMHgyMykKKyNkZWZpbmUgQ3lTQ1JICQkoMHgyMikKKyNkZWZpbmUgQ3lURlRDCQkoMHg4MCkKKworCisvKiBtYXggbnVtYmVyIG9mIGNoYXJzIGluIHRoZSBGSUZPICovCisKKyNkZWZpbmUgQ3lNQVhfQ0hBUl9GSUZPCTEyCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlcmlhbFAuaCBiL2luY2x1ZGUvbGludXgvc2VyaWFsUC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzMDdmMTEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3NlcmlhbFAuaApAQCAtMCwwICsxLDE4NCBAQAorLyoKKyAqIFByaXZhdGUgaGVhZGVyIGZpbGUgZm9yIHRoZSAoZHVtYikgc2VyaWFsIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NyBieSBUaGVvZG9yZSBUcydvLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpbGUgaXMgcGVybWl0dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIAorICogUHVibGljIExpY2Vuc2UgKEdQTCkKKyAqLworCisjaWZuZGVmIF9MSU5VWF9TRVJJQUxQX0gKKyNkZWZpbmUgX0xJTlVYX1NFUklBTFBfSAorCisvKgorICogVGhpcyBpcyBvdXIgaW50ZXJuYWwgc3RydWN0dXJlIGZvciBlYWNoIHNlcmlhbCBwb3J0J3Mgc3RhdGUuCisgKiAKKyAqIE1hbnkgZmllbGRzIGFyZSBwYXJhbGxlbGVkIGJ5IHRoZSBzdHJ1Y3R1cmUgdXNlZCBieSB0aGUgc2VyaWFsX3N0cnVjdAorICogc3RydWN0dXJlLgorICoKKyAqIEZvciBkZWZpbml0aW9ucyBvZiB0aGUgZmxhZ3MgZmllbGQsIHNlZSB0dHkuaAorICovCisKKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvdGVybWlvcy5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NpcmNfYnVmLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorCitzdHJ1Y3Qgc2VyaWFsX3N0YXRlIHsKKwlpbnQJbWFnaWM7CisJaW50CWJhdWRfYmFzZTsKKwl1bnNpZ25lZCBsb25nCXBvcnQ7CisJaW50CWlycTsKKwlpbnQJZmxhZ3M7CisJaW50CWh1YjY7CisJaW50CXR5cGU7CisJaW50CWxpbmU7CisJaW50CXJldmlzaW9uOwkvKiBDaGlwIHJldmlzaW9uICg5NTApICovCisJaW50CXhtaXRfZmlmb19zaXplOworCWludAljdXN0b21fZGl2aXNvcjsKKwlpbnQJY291bnQ7CisJdTgJKmlvbWVtX2Jhc2U7CisJdTE2CWlvbWVtX3JlZ19zaGlmdDsKKwl1bnNpZ25lZCBzaG9ydAljbG9zZV9kZWxheTsKKwl1bnNpZ25lZCBzaG9ydAljbG9zaW5nX3dhaXQ7IC8qIHRpbWUgdG8gd2FpdCBiZWZvcmUgY2xvc2luZyAqLworCXN0cnVjdCBhc3luY19pY291bnQJaWNvdW50OwkKKwlpbnQJaW9fdHlwZTsKKwlzdHJ1Y3QgYXN5bmNfc3RydWN0ICppbmZvOworCXN0cnVjdCBwY2lfZGV2CSpkZXY7Cit9OworCitzdHJ1Y3QgYXN5bmNfc3RydWN0IHsKKwlpbnQJCQltYWdpYzsKKwl1bnNpZ25lZCBsb25nCQlwb3J0OworCWludAkJCWh1YjY7CisJaW50CQkJZmxhZ3M7CisJaW50CQkJeG1pdF9maWZvX3NpemU7CisJc3RydWN0IHNlcmlhbF9zdGF0ZQkqc3RhdGU7CisJc3RydWN0IHR0eV9zdHJ1Y3QgCSp0dHk7CisJaW50CQkJcmVhZF9zdGF0dXNfbWFzazsKKwlpbnQJCQlpZ25vcmVfc3RhdHVzX21hc2s7CisJaW50CQkJdGltZW91dDsKKwlpbnQJCQlxdW90OworCWludAkJCXhfY2hhcjsJLyogeG9uL3hvZmYgY2hhcmFjdGVyICovCisJaW50CQkJY2xvc2VfZGVsYXk7CisJdW5zaWduZWQgc2hvcnQJCWNsb3Npbmdfd2FpdDsKKwl1bnNpZ25lZCBzaG9ydAkJY2xvc2luZ193YWl0MjsgLyogb2Jzb2xldGUgKi8KKwlpbnQJCQlJRVI7IAkvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovCisJaW50CQkJTUNSOyAJLyogTW9kZW0gY29udHJvbCByZWdpc3RlciAqLworCWludAkJCUxDUjsgCS8qIExpbmUgY29udHJvbCByZWdpc3RlciAqLworCWludAkJCUFDUjsJIC8qIDE2OTUwIEFkZGl0aW9uYWwgQ29udHJvbCBSZWcuICovCisJdW5zaWduZWQgbG9uZwkJZXZlbnQ7CisJdW5zaWduZWQgbG9uZwkJbGFzdF9hY3RpdmU7CisJaW50CQkJbGluZTsKKwlpbnQJCQlibG9ja2VkX29wZW47IC8qICMgb2YgYmxvY2tlZCBvcGVucyAqLworIAlzdHJ1Y3QgY2lyY19idWYJCXhtaXQ7CisgCXNwaW5sb2NrX3QJCXhtaXRfbG9jazsKKwl1OAkJCSppb21lbV9iYXNlOworCXUxNgkJCWlvbWVtX3JlZ19zaGlmdDsKKwlpbnQJCQlpb190eXBlOworCXN0cnVjdCB3b3JrX3N0cnVjdAkJCXdvcms7CisJc3RydWN0IHRhc2tsZXRfc3RydWN0CXRsZXQ7CisjaWZkZWYgREVDTEFSRV9XQUlUUVVFVUUKKwl3YWl0X3F1ZXVlX2hlYWRfdAlvcGVuX3dhaXQ7CisJd2FpdF9xdWV1ZV9oZWFkX3QJY2xvc2Vfd2FpdDsKKwl3YWl0X3F1ZXVlX2hlYWRfdAlkZWx0YV9tc3Jfd2FpdDsKKyNlbHNlCQorCXN0cnVjdCB3YWl0X3F1ZXVlCSpvcGVuX3dhaXQ7CisJc3RydWN0IHdhaXRfcXVldWUJKmNsb3NlX3dhaXQ7CisJc3RydWN0IHdhaXRfcXVldWUJKmRlbHRhX21zcl93YWl0OworI2VuZGlmCQorCXN0cnVjdCBhc3luY19zdHJ1Y3QJKm5leHRfcG9ydDsgLyogRm9yIHRoZSBsaW5rZWQgbGlzdCAqLworCXN0cnVjdCBhc3luY19zdHJ1Y3QJKnByZXZfcG9ydDsKK307CisKKyNkZWZpbmUgQ09ORklHVVJFRF9TRVJJQUxfUE9SVChpbmZvKSAoKGluZm8pLT5wb3J0IHx8ICgoaW5mbyktPmlvbWVtX2Jhc2UpKQorCisjZGVmaW5lIFNFUklBTF9NQUdJQyAweDUzMDEKKyNkZWZpbmUgU1NUQVRFX01BR0lDIDB4NTMwMgorCisvKgorICogRXZlbnRzIGFyZSB1c2VkIHRvIHNjaGVkdWxlIHRoaW5ncyB0byBoYXBwZW4gYXQgdGltZXItaW50ZXJydXB0CisgKiB0aW1lLCBpbnN0ZWFkIG9mIGF0IHJzIGludGVycnVwdCB0aW1lLgorICovCisjZGVmaW5lIFJTX0VWRU5UX1dSSVRFX1dBS0VVUAkwCisKKy8qCisgKiBNdWx0aXBvcnQgc2VyaWFsIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIC0tLSBpbnRlcm5hbCBzdHJ1Y3R1cmUKKyAqLworc3RydWN0IHJzX211bHRpcG9ydF9zdHJ1Y3QgeworCWludAkJcG9ydDE7CisJdW5zaWduZWQgY2hhcgltYXNrMSwgbWF0Y2gxOworCWludAkJcG9ydDI7CisJdW5zaWduZWQgY2hhcgltYXNrMiwgbWF0Y2gyOworCWludAkJcG9ydDM7CisJdW5zaWduZWQgY2hhcgltYXNrMywgbWF0Y2gzOworCWludAkJcG9ydDQ7CisJdW5zaWduZWQgY2hhcgltYXNrNCwgbWF0Y2g0OworCWludAkJcG9ydF9tb25pdG9yOworfTsKKworI2lmIGRlZmluZWQoX19hbHBoYV9fKSAmJiAhZGVmaW5lZChDT05GSUdfUENJKQorLyoKKyAqIERpZ2l0YWwgZGlkIHNvbWV0aGluZyByZWFsbHkgaG9ycmlibHkgd3Jvbmcgd2l0aCB0aGUgT1VUMSBhbmQgT1VUMgorICogbGluZXMgb24gYXQgbGVhc3Qgc29tZSBBTFBIQSdzLiAgVGhlIGZhaWx1cmUgbW9kZSBpcyB0aGF0IGlmIGVpdGhlcgorICogaXMgY2xlYXJlZCwgdGhlIG1hY2hpbmUgbG9ja3MgdXAgd2l0aCBlbmRsZXNzIGludGVycnVwdHMuCisgKgorICogVGhpcyBpcyBzdGlsbCB1c2VkIGJ5IGFyY2gvbWlwcy9hdTEwMDAvY29tbW9uL3NlcmlhbC5jIGZvciBzb21lIHdlaXJkCisgKiByZWFzb24gKG1pcHMgIT0gYWxwaGEhKQorICovCisjZGVmaW5lIEFMUEhBX0tMVURHRV9NQ1IgIChVQVJUX01DUl9PVVQyIHwgVUFSVF9NQ1JfT1VUMSkKKyNlbGlmIGRlZmluZWQoQ09ORklHX1NCQzg1NjApCisvKgorICogV2luZFJpdmVyIGRpZCBzb21ldGhpbmcgc2ltaWxhcmx5IGJyb2tlbiBvbiB0aGVpciBTQkM4NTYwIGJvYXJkLiBUaGUKKyAqIFVBUlQgdHJpc3RhdGVzIGl0cyBJUlEgb3V0cHV0IHdoaWxlIE9VVDIgaXMgY2xlYXIsIGJ1dCB0aGV5IHB1bGxlZAorICogdGhlIGludGVycnVwdCBsaW5lIF91cF8gaW5zdGVhZCBvZiBkb3duLCBzbyBpZiB3ZSByZWdpc3RlciB0aGUgSVJRCisgKiB3aGlsZSB0aGUgVUFSVCBpcyBpbiB0aGF0IHN0YXRlLCB3ZSBkaWUgaW4gYW4gSVJRIHN0b3JtLiAqLworI2RlZmluZSBBTFBIQV9LTFVER0VfTUNSIChVQVJUX01DUl9PVVQyKQorI2Vsc2UKKyNkZWZpbmUgQUxQSEFfS0xVREdFX01DUiAwCisjZW5kaWYKKworLyoKKyAqIERlZmluaXRpb25zIGZvciBQQ0kgc3VwcG9ydC4KKyAqLworI2RlZmluZSBTUENJX0ZMX0JBU0VfTUFTSwkweDAwMDcKKyNkZWZpbmUgU1BDSV9GTF9CQVNFMAkweDAwMDAKKyNkZWZpbmUgU1BDSV9GTF9CQVNFMQkweDAwMDEKKyNkZWZpbmUgU1BDSV9GTF9CQVNFMgkweDAwMDIKKyNkZWZpbmUgU1BDSV9GTF9CQVNFMwkweDAwMDMKKyNkZWZpbmUgU1BDSV9GTF9CQVNFNAkweDAwMDQKKyNkZWZpbmUgU1BDSV9GTF9HRVRfQkFTRSh4KQkoeCAmIFNQQ0lfRkxfQkFTRV9NQVNLKQorCisjZGVmaW5lIFNQQ0lfRkxfSVJRX01BU0sgICAgICAgKDB4MDAwNyA8PCA0KQorI2RlZmluZSBTUENJX0ZMX0lSUUJBU0UwICAgICAgICgweDAwMDAgPDwgNCkKKyNkZWZpbmUgU1BDSV9GTF9JUlFCQVNFMSAgICAgICAoMHgwMDAxIDw8IDQpCisjZGVmaW5lIFNQQ0lfRkxfSVJRQkFTRTIgICAgICAgKDB4MDAwMiA8PCA0KQorI2RlZmluZSBTUENJX0ZMX0lSUUJBU0UzICAgICAgICgweDAwMDMgPDwgNCkKKyNkZWZpbmUgU1BDSV9GTF9JUlFCQVNFNCAgICAgICAoMHgwMDA0IDw8IDQpCisjZGVmaW5lIFNQQ0lfRkxfR0VUX0lSUUJBU0UoeCkgICAgICAgICgoeCAmIFNQQ0lfRkxfSVJRX01BU0spID4+IDQpCisKKy8qIFVzZSBzdWNjZXNzaXZlIEJBUnMgKFBDSSBiYXNlIGFkZHJlc3MgcmVnaXN0ZXJzKSwgCisgICBlbHNlIHVzZSBvZmZzZXQgaW50byBzb21lIHNwZWNpZmllZCBCQVIgKi8KKyNkZWZpbmUgU1BDSV9GTF9CQVNFX1RBQkxFCTB4MDEwMAorCisvKiBVc2Ugc3VjY2Vzc2l2ZSBlbnRyaWVzIGluIHRoZSBpcnEgcmVzb3VyY2UgdGFibGUgKi8KKyNkZWZpbmUgU1BDSV9GTF9JUlFfVEFCTEUJMHgwMjAwCisKKy8qIFVzZSB0aGUgaXJxIHJlc291cmNlIHRhYmxlIGluc3RlYWQgb2YgZGV2LT5pcnEgKi8KKyNkZWZpbmUgU1BDSV9GTF9JUlFSRVNPVVJDRQkweDA0MDAKKworLyogVXNlIHRoZSBCYXNlIGFkZHJlc3MgcmVnaXN0ZXIgc2l6ZSB0byBjYXAgbnVtYmVyIG9mIHBvcnRzICovCisjZGVmaW5lIFNQQ0lfRkxfUkVHSU9OX1NaX0NBUAkweDA4MDAKKworLyogRG8gbm90IHVzZSBpcnEgc2hhcmluZyBmb3IgdGhpcyBkZXZpY2UgKi8KKyNkZWZpbmUgU1BDSV9GTF9OT19TSElSUQkweDEwMDAKKworLyogVGhpcyBpcyBhIFBOUCBkZXZpY2UgKi8KKyNkZWZpbmUgU1BDSV9GTF9JU1BOUAkJMHgyMDAwCisKKyNkZWZpbmUgU1BDSV9GTF9QTlBERUZBVUxUCShTUENJX0ZMX0lSUVJFU09VUkNFfFNQQ0lfRkxfSVNQTlApCisKKyNlbmRpZiAvKiBfTElOVVhfU0VSSUFMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VyaWFsXzgyNTAuaCBiL2luY2x1ZGUvbGludXgvc2VyaWFsXzgyNTAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjMxODFhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9zZXJpYWxfODI1MC5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9saW51eC9zZXJpYWxfODI1MC5oCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNCBSdXNzZWxsIEtpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisjaWZuZGVmIF9MSU5VWF9TRVJJQUxfODI1MF9ICisjZGVmaW5lIF9MSU5VWF9TRVJJQUxfODI1MF9ICisKKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorCitzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgeworCXVuc2lnbmVkIGxvbmcJaW9iYXNlOwkJLyogaW8gYmFzZSBhZGRyZXNzICovCisJdm9pZCBfX2lvbWVtCSptZW1iYXNlOwkvKiBpb3JlbWFwIGNvb2tpZSBvciBOVUxMICovCisJdW5zaWduZWQgbG9uZwltYXBiYXNlOwkvKiByZXNvdXJjZSBiYXNlICovCisJdW5zaWduZWQgaW50CWlycTsJCS8qIGludGVycnVwdCBudW1iZXIgKi8KKwl1bnNpZ25lZCBpbnQJdWFydGNsazsJLyogVUFSVCBjbG9jayByYXRlICovCisJdW5zaWduZWQgY2hhcglyZWdzaGlmdDsJLyogcmVnaXN0ZXIgc2hpZnQgKi8KKwl1bnNpZ25lZCBjaGFyCWlvdHlwZTsJCS8qIFVQSU9fKiAqLworCXVuc2lnbmVkIGludAlmbGFnczsJCS8qIFVQRl8qIGZsYWdzICovCit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VyaWFsX2NvcmUuaCBiL2luY2x1ZGUvbGludXgvc2VyaWFsX2NvcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2ZiNTk4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9zZXJpYWxfY29yZS5oCkBAIC0wLDAgKzEsNDkxIEBACisvKgorICogIGxpbnV4L2RyaXZlcnMvY2hhci9zZXJpYWxfY29yZS5oCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMCBEZWVwIEJsdWUgU29sdXRpb25zIEx0ZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKyNpZm5kZWYgTElOVVhfU0VSSUFMX0NPUkVfSAorI2RlZmluZSBMSU5VWF9TRVJJQUxfQ09SRV9ICisKKy8qCisgKiBUaGUgdHlwZSBkZWZpbml0aW9ucy4gIFRoZXNlIGFyZSBmcm9tIFRlZCBUcydvJ3Mgc2VyaWFsLmgKKyAqLworI2RlZmluZSBQT1JUX1VOS05PV04JMAorI2RlZmluZSBQT1JUXzgyNTAJMQorI2RlZmluZSBQT1JUXzE2NDUwCTIKKyNkZWZpbmUgUE9SVF8xNjU1MAkzCisjZGVmaW5lIFBPUlRfMTY1NTBBCTQKKyNkZWZpbmUgUE9SVF9DSVJSVVMJNQorI2RlZmluZSBQT1JUXzE2NjUwCTYKKyNkZWZpbmUgUE9SVF8xNjY1MFYyCTcKKyNkZWZpbmUgUE9SVF8xNjc1MAk4CisjZGVmaW5lIFBPUlRfU1RBUlRFQ0gJOQorI2RlZmluZSBQT1JUXzE2Qzk1MAkxMAorI2RlZmluZSBQT1JUXzE2NjU0CTExCisjZGVmaW5lIFBPUlRfMTY4NTAJMTIKKyNkZWZpbmUgUE9SVF9SU0EJMTMKKyNkZWZpbmUgUE9SVF9OUzE2NTUwQQkxNAorI2RlZmluZSBQT1JUX1hTQ0FMRQkxNQorI2RlZmluZSBQT1JUX01BWF84MjUwCTE1CS8qIG1heCBwb3J0IElEICovCisKKy8qCisgKiBBUk0gc3BlY2lmaWMgdHlwZSBudW1iZXJzLiAgVGhlc2UgYXJlIG5vdCBjdXJyZW50bHkgZ3VhcmFudGVlZAorICogdG8gYmUgaW1wbGVtZW50ZWQsIGFuZCB3aWxsIGNoYW5nZSBpbiB0aGUgZnV0dXJlLiAgVGhlc2UgYXJlCisgKiBzZXBhcmF0ZSBzbyBhbnkgYWRkaXRpb25zIHRvIHRoZSBvbGQgc2VyaWFsLmMgdGhhdCBvY2N1ciBiZWZvcmUKKyAqIHdlIGFyZSBtZXJnZWQgY2FuIGJlIGVhc2lseSBtZXJnZWQgaGVyZS4KKyAqLworI2RlZmluZSBQT1JUX1BYQQkzMQorI2RlZmluZSBQT1JUX0FNQkEJMzIKKyNkZWZpbmUgUE9SVF9DTFBTNzExWAkzMworI2RlZmluZSBQT1JUX1NBMTEwMAkzNAorI2RlZmluZSBQT1JUX1VBUlQwMAkzNQorI2RlZmluZSBQT1JUXzIxMjg1CTM3CisKKy8qIFNwYXJjIHR5cGUgbnVtYmVycy4gICovCisjZGVmaW5lIFBPUlRfU1VOWklMT0cJMzgKKyNkZWZpbmUgUE9SVF9TVU5TQUIJMzkKKworLyogTkVDIHY4NTAuICAqLworI2RlZmluZSBQT1JUX1Y4NTBFX1VBUlQJNDAKKworLyogRFogKi8KKyNkZWZpbmUgUE9SVF9EWgkJNDcKKworLyogUGFyaXNjIHR5cGUgbnVtYmVycy4gKi8KKyNkZWZpbmUgUE9SVF9NVVgJNDgKKworLyogTWFjaW50b3NoIFppbG9nIHR5cGUgbnVtYmVycyAqLworI2RlZmluZSBQT1JUX01BQ19aSUxPRwk1MAkvKiBtNjhrIDogbm90IHlldCBpbXBsZW1lbnRlZCAqLworI2RlZmluZSBQT1JUX1BNQUNfWklMT0cJNTEKKworLyogU0gtU0NJICovCisjZGVmaW5lIFBPUlRfU0NJCTUyCisjZGVmaW5lIFBPUlRfU0NJRgk1MworI2RlZmluZSBQT1JUX0lSREEJNTQKKworLyogU2Ftc3VuZyBTM0MyNDEwIFNvQyBhbmQgZGVyaXZhdGl2ZXMgdGhlcmVvZiAqLworI2RlZmluZSBQT1JUX1MzQzI0MTAgICAgNTUKKworLyogU0dJIElQMjIgYWthIEluZHkgLyBDaGFsbGVuZ2UgUyAvIEluZGlnbyAyICovCisjZGVmaW5lIFBPUlRfSVAyMlpJTE9HCTU2CisKKy8qIFNoYXJwIExIN2E0MHggLS0gYW4gQVJNOSBTb0Mgc2VyaWVzICovCisjZGVmaW5lIFBPUlRfTEg3QTQwWAk1NworCisvKiBQUEMgQ1BNIHR5cGUgbnVtYmVyICovCisjZGVmaW5lIFBPUlRfQ1BNICAgICAgICA1OAorCisvKiBNUEM1Mnh4IHR5cGUgbnVtYmVycyAqLworI2RlZmluZSBQT1JUX01QQzUyeHgJNTkKKworLyogSUJNIGljb20gKi8KKyNkZWZpbmUgUE9SVF9JQ09NCTYwCisKKy8qIFNhbXN1bmcgUzNDMjQ0MCBTb0MgKi8KKyNkZWZpbmUgUE9SVF9TM0MyNDQwCTYxCisKKy8qIE1vdG9yb2xhIGkuTVggU29DICovCisjZGVmaW5lIFBPUlRfSU1YCTYyCisKKy8qIE1hcnZlbGwgTVBTQyAqLworI2RlZmluZSBQT1JUX01QU0MJNjMKKworLyogVFhYOSB0eXBlIG51bWJlciAqLworI2RlZmluZSBQT1JUX1RYWDkgICAgICAgNjQKKworLyogTkVDIFZSNDEwMCBzZXJpZXMgU0lVL0RTSVUgKi8KKyNkZWZpbmUgUE9SVF9WUjQxWFhfU0lVCQk2NQorI2RlZmluZSBQT1JUX1ZSNDFYWF9EU0lVCTY2CisKKy8qIFNhbXN1bmcgUzNDMjQwMCBTb0MgKi8KKyNkZWZpbmUgUE9SVF9TM0MyNDAwCTY3CisKKy8qIE0zMlIgU0lPICovCisjZGVmaW5lIFBPUlRfTTMyUl9TSU8JNjgKKworLypEaWdpIGpzbSAqLworI2RlZmluZSBQT1JUX0pTTSAgICAgICAgNjUKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NpcmNfYnVmLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorCitzdHJ1Y3QgdWFydF9wb3J0Oworc3RydWN0IHVhcnRfaW5mbzsKK3N0cnVjdCBzZXJpYWxfc3RydWN0Oworc3RydWN0IGRldmljZTsKKworLyoKKyAqIFRoaXMgc3RydWN0dXJlIGRlc2NyaWJlcyBhbGwgdGhlIG9wZXJhdGlvbnMgdGhhdCBjYW4gYmUKKyAqIGRvbmUgb24gdGhlIHBoeXNpY2FsIGhhcmR3YXJlLgorICovCitzdHJ1Y3QgdWFydF9vcHMgeworCXVuc2lnbmVkIGludAkoKnR4X2VtcHR5KShzdHJ1Y3QgdWFydF9wb3J0ICopOworCXZvaWQJCSgqc2V0X21jdHJsKShzdHJ1Y3QgdWFydF9wb3J0ICosIHVuc2lnbmVkIGludCBtY3RybCk7CisJdW5zaWduZWQgaW50CSgqZ2V0X21jdHJsKShzdHJ1Y3QgdWFydF9wb3J0ICopOworCXZvaWQJCSgqc3RvcF90eCkoc3RydWN0IHVhcnRfcG9ydCAqLCB1bnNpZ25lZCBpbnQgdHR5X3N0b3ApOworCXZvaWQJCSgqc3RhcnRfdHgpKHN0cnVjdCB1YXJ0X3BvcnQgKiwgdW5zaWduZWQgaW50IHR0eV9zdGFydCk7CisJdm9pZAkJKCpzZW5kX3hjaGFyKShzdHJ1Y3QgdWFydF9wb3J0ICosIGNoYXIgY2gpOworCXZvaWQJCSgqc3RvcF9yeCkoc3RydWN0IHVhcnRfcG9ydCAqKTsKKwl2b2lkCQkoKmVuYWJsZV9tcykoc3RydWN0IHVhcnRfcG9ydCAqKTsKKwl2b2lkCQkoKmJyZWFrX2N0bCkoc3RydWN0IHVhcnRfcG9ydCAqLCBpbnQgY3RsKTsKKwlpbnQJCSgqc3RhcnR1cCkoc3RydWN0IHVhcnRfcG9ydCAqKTsKKwl2b2lkCQkoKnNodXRkb3duKShzdHJ1Y3QgdWFydF9wb3J0ICopOworCXZvaWQJCSgqc2V0X3Rlcm1pb3MpKHN0cnVjdCB1YXJ0X3BvcnQgKiwgc3RydWN0IHRlcm1pb3MgKm5ldywKKwkJCQkgICAgICAgc3RydWN0IHRlcm1pb3MgKm9sZCk7CisJdm9pZAkJKCpwbSkoc3RydWN0IHVhcnRfcG9ydCAqLCB1bnNpZ25lZCBpbnQgc3RhdGUsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgb2xkc3RhdGUpOworCWludAkJKCpzZXRfd2FrZSkoc3RydWN0IHVhcnRfcG9ydCAqLCB1bnNpZ25lZCBpbnQgc3RhdGUpOworCisJLyoKKwkgKiBSZXR1cm4gYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgdHlwZSBvZiB0aGUgcG9ydAorCSAqLworCWNvbnN0IGNoYXIgKigqdHlwZSkoc3RydWN0IHVhcnRfcG9ydCAqKTsKKworCS8qCisJICogUmVsZWFzZSBJTyBhbmQgbWVtb3J5IHJlc291cmNlcyB1c2VkIGJ5IHRoZSBwb3J0LgorCSAqIFRoaXMgaW5jbHVkZXMgaW91bm1hcCBpZiBuZWNlc3NhcnkuCisJICovCisJdm9pZAkJKCpyZWxlYXNlX3BvcnQpKHN0cnVjdCB1YXJ0X3BvcnQgKik7CisKKwkvKgorCSAqIFJlcXVlc3QgSU8gYW5kIG1lbW9yeSByZXNvdXJjZXMgdXNlZCBieSB0aGUgcG9ydC4KKwkgKiBUaGlzIGluY2x1ZGVzIGlvbWFwcGluZyB0aGUgcG9ydCBpZiBuZWNlc3NhcnkuCisJICovCisJaW50CQkoKnJlcXVlc3RfcG9ydCkoc3RydWN0IHVhcnRfcG9ydCAqKTsKKwl2b2lkCQkoKmNvbmZpZ19wb3J0KShzdHJ1Y3QgdWFydF9wb3J0ICosIGludCk7CisJaW50CQkoKnZlcmlmeV9wb3J0KShzdHJ1Y3QgdWFydF9wb3J0ICosIHN0cnVjdCBzZXJpYWxfc3RydWN0ICopOworCWludAkJKCppb2N0bCkoc3RydWN0IHVhcnRfcG9ydCAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpOworfTsKKworI2RlZmluZSBVQVJUX0NPTkZJR19UWVBFCSgxIDw8IDApCisjZGVmaW5lIFVBUlRfQ09ORklHX0lSUQkJKDEgPDwgMSkKKworc3RydWN0IHVhcnRfaWNvdW50IHsKKwlfX3UzMgljdHM7CisJX191MzIJZHNyOworCV9fdTMyCXJuZzsKKwlfX3UzMglkY2Q7CisJX191MzIJcng7CisJX191MzIJdHg7CisJX191MzIJZnJhbWU7CisJX191MzIJb3ZlcnJ1bjsKKwlfX3UzMglwYXJpdHk7CisJX191MzIJYnJrOworCV9fdTMyCWJ1Zl9vdmVycnVuOworfTsKKworc3RydWN0IHVhcnRfcG9ydCB7CisJc3BpbmxvY2tfdAkJbG9jazsJCQkvKiBwb3J0IGxvY2sgKi8KKwl1bnNpZ25lZCBpbnQJCWlvYmFzZTsJCQkvKiBpbi9vdXRbYndsXSAqLworCXVuc2lnbmVkIGNoYXIgX19pb21lbQkqbWVtYmFzZTsJCS8qIHJlYWQvd3JpdGVbYndsXSAqLworCXVuc2lnbmVkIGludAkJaXJxOwkJCS8qIGlycSBudW1iZXIgKi8KKwl1bnNpZ25lZCBpbnQJCXVhcnRjbGs7CQkvKiBiYXNlIHVhcnQgY2xvY2sgKi8KKwl1bnNpZ25lZCBjaGFyCQlmaWZvc2l6ZTsJCS8qIHR4IGZpZm8gc2l6ZSAqLworCXVuc2lnbmVkIGNoYXIJCXhfY2hhcjsJCQkvKiB4b24veG9mZiBjaGFyICovCisJdW5zaWduZWQgY2hhcgkJcmVnc2hpZnQ7CQkvKiByZWcgb2Zmc2V0IHNoaWZ0ICovCisJdW5zaWduZWQgY2hhcgkJaW90eXBlOwkJCS8qIGlvIGFjY2VzcyBzdHlsZSAqLworCisjZGVmaW5lIFVQSU9fUE9SVAkJKDApCisjZGVmaW5lIFVQSU9fSFVCNgkJKDEpCisjZGVmaW5lIFVQSU9fTUVNCQkoMikKKyNkZWZpbmUgVVBJT19NRU0zMgkJKDMpCisKKwl1bnNpZ25lZCBpbnQJCXJlYWRfc3RhdHVzX21hc2s7CS8qIGRyaXZlciBzcGVjaWZpYyAqLworCXVuc2lnbmVkIGludAkJaWdub3JlX3N0YXR1c19tYXNrOwkvKiBkcml2ZXIgc3BlY2lmaWMgKi8KKwlzdHJ1Y3QgdWFydF9pbmZvCSppbmZvOwkJCS8qIHBvaW50ZXIgdG8gcGFyZW50IGluZm8gKi8KKwlzdHJ1Y3QgdWFydF9pY291bnQJaWNvdW50OwkJCS8qIHN0YXRpc3RpY3MgKi8KKworCXN0cnVjdCBjb25zb2xlCQkqY29uczsJCQkvKiBzdHJ1Y3QgY29uc29sZSwgaWYgYW55ICovCisjaWZkZWYgQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEUKKwl1bnNpZ25lZCBsb25nCQlzeXNycTsJCQkvKiBzeXNycSB0aW1lb3V0ICovCisjZW5kaWYKKworCXVuc2lnbmVkIGludAkJZmxhZ3M7CisKKyNkZWZpbmUgVVBGX0ZPVVJQT1JUCQkoMSA8PCAxKQorI2RlZmluZSBVUEZfU0FLCQkJKDEgPDwgMikKKyNkZWZpbmUgVVBGX1NQRF9NQVNLCQkoMHgxMDMwKQorI2RlZmluZSBVUEZfU1BEX0hJCQkoMHgwMDEwKQorI2RlZmluZSBVUEZfU1BEX1ZISQkJKDB4MDAyMCkKKyNkZWZpbmUgVVBGX1NQRF9DVVNUCQkoMHgwMDMwKQorI2RlZmluZSBVUEZfU1BEX1NISQkJKDB4MTAwMCkKKyNkZWZpbmUgVVBGX1NQRF9XQVJQCQkoMHgxMDEwKQorI2RlZmluZSBVUEZfU0tJUF9URVNUCQkoMSA8PCA2KQorI2RlZmluZSBVUEZfQVVUT19JUlEJCSgxIDw8IDcpCisjZGVmaW5lIFVQRl9IQVJEUFBTX0NECQkoMSA8PCAxMSkKKyNkZWZpbmUgVVBGX0xPV19MQVRFTkNZCQkoMSA8PCAxMykKKyNkZWZpbmUgVVBGX0JVR0dZX1VBUlQJCSgxIDw8IDE0KQorI2RlZmluZSBVUEZfQVVUT1BST0JFCQkoMSA8PCAxNSkKKyNkZWZpbmUgVVBGX01BR0lDX01VTFRJUExJRVIJKDEgPDwgMTYpCisjZGVmaW5lIFVQRl9CT09UX09OTFlNQ0EJKDEgPDwgMjIpCisjZGVmaW5lIFVQRl9DT05TX0ZMT1cJCSgxIDw8IDIzKQorI2RlZmluZSBVUEZfU0hBUkVfSVJRCQkoMSA8PCAyNCkKKyNkZWZpbmUgVVBGX0JPT1RfQVVUT0NPTkYJKDEgPDwgMjgpCisjZGVmaW5lIFVQRl9JT1JFTUFQCQkoMSA8PCAzMSkKKworI2RlZmluZSBVUEZfQ0hBTkdFX01BU0sJCSgweDE3ZmZmKQorI2RlZmluZSBVUEZfVVNSX01BU0sJCShVUEZfU1BEX01BU0t8VVBGX0xPV19MQVRFTkNZKQorCisJdW5zaWduZWQgaW50CQltY3RybDsJCQkvKiBjdXJyZW50IG1vZGVtIGN0cmwgc2V0dGluZ3MgKi8KKwl1bnNpZ25lZCBpbnQJCXRpbWVvdXQ7CQkvKiBjaGFyYWN0ZXItYmFzZWQgdGltZW91dCAqLworCXVuc2lnbmVkIGludAkJdHlwZTsJCQkvKiBwb3J0IHR5cGUgKi8KKwlzdHJ1Y3QgdWFydF9vcHMJCSpvcHM7CisJdW5zaWduZWQgaW50CQljdXN0b21fZGl2aXNvcjsKKwl1bnNpZ25lZCBpbnQJCWxpbmU7CQkJLyogcG9ydCBpbmRleCAqLworCXVuc2lnbmVkIGxvbmcJCW1hcGJhc2U7CQkvKiBmb3IgaW9yZW1hcCAqLworCXN0cnVjdCBkZXZpY2UJCSpkZXY7CQkJLyogcGFyZW50IGRldmljZSAqLworCXVuc2lnbmVkIGNoYXIJCWh1YjY7CQkJLyogdGhpcyBzaG91bGQgYmUgaW4gdGhlIDgyNTAgZHJpdmVyICovCisJdW5zaWduZWQgY2hhcgkJdW51c2VkWzNdOworfTsKKworLyoKKyAqIFRoaXMgaXMgdGhlIHN0YXRlIGluZm9ybWF0aW9uIHdoaWNoIGlzIHBlcnNpc3RlbnQgYWNyb3NzIG9wZW5zLgorICogVGhlIGxvdyBsZXZlbCBkcml2ZXIgbXVzdCBub3QgdG8gdG91Y2ggYW55IGVsZW1lbnRzIGNvbnRhaW5lZAorICogd2l0aGluLgorICovCitzdHJ1Y3QgdWFydF9zdGF0ZSB7CisJdW5zaWduZWQgaW50CQljbG9zZV9kZWxheTsJCS8qIG1zZWMgKi8KKwl1bnNpZ25lZCBpbnQJCWNsb3Npbmdfd2FpdDsJCS8qIG1zZWMgKi8KKworI2RlZmluZSBVU0ZfQ0xPU0lOR19XQUlUX0lORgkoMCkKKyNkZWZpbmUgVVNGX0NMT1NJTkdfV0FJVF9OT05FCSh+MFUpCisKKwlpbnQJCQljb3VudDsKKwlpbnQJCQlwbV9zdGF0ZTsKKwlzdHJ1Y3QgdWFydF9pbmZvCSppbmZvOworCXN0cnVjdCB1YXJ0X3BvcnQJKnBvcnQ7CisKKwlzdHJ1Y3Qgc2VtYXBob3JlCXNlbTsKK307CisKKyNkZWZpbmUgVUFSVF9YTUlUX1NJWkUJUEFHRV9TSVpFCisvKgorICogVGhpcyBpcyB0aGUgc3RhdGUgaW5mb3JtYXRpb24gd2hpY2ggaXMgb25seSB2YWxpZCB3aGVuIHRoZSBwb3J0CisgKiBpcyBvcGVuOyBpdCBtYXkgYmUgZnJlZWQgYnkgdGhlIGNvcmUgZHJpdmVyIG9uY2UgdGhlIGRldmljZSBoYXMKKyAqIGJlZW4gY2xvc2VkLiAgRWl0aGVyIHRoZSBsb3cgbGV2ZWwgZHJpdmVyIG9yIHRoZSBjb3JlIGNhbiBtb2RpZnkKKyAqIHN0dWZmIGhlcmUuCisgKi8KK3N0cnVjdCB1YXJ0X2luZm8geworCXN0cnVjdCB0dHlfc3RydWN0CSp0dHk7CisJc3RydWN0IGNpcmNfYnVmCQl4bWl0OworCXVuc2lnbmVkIGludAkJZmxhZ3M7CisKKy8qCisgKiBUaGVzZSBhcmUgdGhlIGZsYWdzIHRoYXQgc3BlY2lmaWMgdG8gaW5mby0+ZmxhZ3MsIGFuZCByZWZsZWN0IG91cgorICogaW50ZXJuYWwgc3RhdGUuICBUaGV5IGNhbiBub3QgYmUgYWNjZXNzZWQgdmlhIHBvcnQtPmZsYWdzLiAgTG93CisgKiBsZXZlbCBkcml2ZXJzIG11c3Qgbm90IGNoYW5nZSB0aGVzZSwgYnV0IG1heSBxdWVyeSB0aGVtIGluc3RlYWQuCisgKi8KKyNkZWZpbmUgVUlGX0NIRUNLX0NECQkoMSA8PCAyNSkKKyNkZWZpbmUgVUlGX0NUU19GTE9XCQkoMSA8PCAyNikKKyNkZWZpbmUgVUlGX05PUk1BTF9BQ1RJVkUJKDEgPDwgMjkpCisjZGVmaW5lIFVJRl9JTklUSUFMSVpFRAkJKDEgPDwgMzEpCisKKwlpbnQJCQlibG9ja2VkX29wZW47CisKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QJdGxldDsKKworCXdhaXRfcXVldWVfaGVhZF90CW9wZW5fd2FpdDsKKwl3YWl0X3F1ZXVlX2hlYWRfdAlkZWx0YV9tc3Jfd2FpdDsKK307CisKKy8qIG51bWJlciBvZiBjaGFyYWN0ZXJzIGxlZnQgaW4geG1pdCBidWZmZXIgYmVmb3JlIHdlIGFzayBmb3IgbW9yZSAqLworI2RlZmluZSBXQUtFVVBfQ0hBUlMJCTI1NgorCitzdHJ1Y3QgbW9kdWxlOworc3RydWN0IHR0eV9kcml2ZXI7CisKK3N0cnVjdCB1YXJ0X2RyaXZlciB7CisJc3RydWN0IG1vZHVsZQkJKm93bmVyOworCWNvbnN0IGNoYXIJCSpkcml2ZXJfbmFtZTsKKwljb25zdCBjaGFyCQkqZGV2X25hbWU7CisJY29uc3QgY2hhcgkJKmRldmZzX25hbWU7CisJaW50CQkJIG1ham9yOworCWludAkJCSBtaW5vcjsKKwlpbnQJCQkgbnI7CisJc3RydWN0IGNvbnNvbGUJCSpjb25zOworCisJLyoKKwkgKiB0aGVzZSBhcmUgcHJpdmF0ZTsgdGhlIGxvdyBsZXZlbCBkcml2ZXIgc2hvdWxkIG5vdAorCSAqIHRvdWNoIHRoZXNlOyB0aGV5IHNob3VsZCBiZSBpbml0aWFsaXNlZCB0byBOVUxMCisJICovCisJc3RydWN0IHVhcnRfc3RhdGUJKnN0YXRlOworCXN0cnVjdCB0dHlfZHJpdmVyCSp0dHlfZHJpdmVyOworfTsKKwordm9pZCB1YXJ0X3dyaXRlX3dha2V1cChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KTsKKworLyoKKyAqIEJhdWQgcmF0ZSBoZWxwZXJzLgorICovCit2b2lkIHVhcnRfdXBkYXRlX3RpbWVvdXQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgdW5zaWduZWQgaW50IGNmbGFnLAorCQkJIHVuc2lnbmVkIGludCBiYXVkKTsKK3Vuc2lnbmVkIGludCB1YXJ0X2dldF9iYXVkX3JhdGUoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgc3RydWN0IHRlcm1pb3MgKnRlcm1pb3MsCisJCQkJc3RydWN0IHRlcm1pb3MgKm9sZCwgdW5zaWduZWQgaW50IG1pbiwKKwkJCQl1bnNpZ25lZCBpbnQgbWF4KTsKK3Vuc2lnbmVkIGludCB1YXJ0X2dldF9kaXZpc29yKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHVuc2lnbmVkIGludCBiYXVkKTsKKworLyoKKyAqIENvbnNvbGUgaGVscGVycy4KKyAqLworc3RydWN0IHVhcnRfcG9ydCAqdWFydF9nZXRfY29uc29sZShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0cywgaW50IG5yLAorCQkJCSAgIHN0cnVjdCBjb25zb2xlICpjKTsKK3ZvaWQgdWFydF9wYXJzZV9vcHRpb25zKGNoYXIgKm9wdGlvbnMsIGludCAqYmF1ZCwgaW50ICpwYXJpdHksIGludCAqYml0cywKKwkJCWludCAqZmxvdyk7CitpbnQgdWFydF9zZXRfb3B0aW9ucyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBzdHJ1Y3QgY29uc29sZSAqY28sIGludCBiYXVkLAorCQkgICAgIGludCBwYXJpdHksIGludCBiaXRzLCBpbnQgZmxvdyk7CitzdHJ1Y3QgdHR5X2RyaXZlciAqdWFydF9jb25zb2xlX2RldmljZShzdHJ1Y3QgY29uc29sZSAqY28sIGludCAqaW5kZXgpOworCisvKgorICogUG9ydC9kcml2ZXIgcmVnaXN0cmF0aW9uL3JlbW92YWwKKyAqLworaW50IHVhcnRfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCB1YXJ0X2RyaXZlciAqdWFydCk7Cit2b2lkIHVhcnRfdW5yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHVhcnRfZHJpdmVyICp1YXJ0KTsKK3ZvaWQgdWFydF91bnJlZ2lzdGVyX3BvcnQoc3RydWN0IHVhcnRfZHJpdmVyICpyZWcsIGludCBsaW5lKTsKK2ludCB1YXJ0X3JlZ2lzdGVyX3BvcnQoc3RydWN0IHVhcnRfZHJpdmVyICpyZWcsIHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpOworaW50IHVhcnRfYWRkX29uZV9wb3J0KHN0cnVjdCB1YXJ0X2RyaXZlciAqcmVnLCBzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KTsKK2ludCB1YXJ0X3JlbW92ZV9vbmVfcG9ydChzdHJ1Y3QgdWFydF9kcml2ZXIgKnJlZywgc3RydWN0IHVhcnRfcG9ydCAqcG9ydCk7CitpbnQgdWFydF9tYXRjaF9wb3J0KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQxLCBzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0Mik7CisKKy8qCisgKiBQb3dlciBNYW5hZ2VtZW50CisgKi8KK2ludCB1YXJ0X3N1c3BlbmRfcG9ydChzdHJ1Y3QgdWFydF9kcml2ZXIgKnJlZywgc3RydWN0IHVhcnRfcG9ydCAqcG9ydCk7CitpbnQgdWFydF9yZXN1bWVfcG9ydChzdHJ1Y3QgdWFydF9kcml2ZXIgKnJlZywgc3RydWN0IHVhcnRfcG9ydCAqcG9ydCk7CisKKyNkZWZpbmUgdWFydF9jaXJjX2VtcHR5KGNpcmMpCQkoKGNpcmMpLT5oZWFkID09IChjaXJjKS0+dGFpbCkKKyNkZWZpbmUgdWFydF9jaXJjX2NsZWFyKGNpcmMpCQkoKGNpcmMpLT5oZWFkID0gKGNpcmMpLT50YWlsID0gMCkKKworI2RlZmluZSB1YXJ0X2NpcmNfY2hhcnNfcGVuZGluZyhjaXJjKQlcCisJKENJUkNfQ05UKChjaXJjKS0+aGVhZCwgKGNpcmMpLT50YWlsLCBVQVJUX1hNSVRfU0laRSkpCisKKyNkZWZpbmUgdWFydF9jaXJjX2NoYXJzX2ZyZWUoY2lyYykJXAorCShDSVJDX1NQQUNFKChjaXJjKS0+aGVhZCwgKGNpcmMpLT50YWlsLCBVQVJUX1hNSVRfU0laRSkpCisKKyNkZWZpbmUgdWFydF90eF9zdG9wcGVkKHBvcnQpCQlcCisJKChwb3J0KS0+aW5mby0+dHR5LT5zdG9wcGVkIHx8IChwb3J0KS0+aW5mby0+dHR5LT5od19zdG9wcGVkKQorCisvKgorICogVGhlIGZvbGxvd2luZyBhcmUgaGVscGVyIGZ1bmN0aW9ucyBmb3IgdGhlIGxvdyBsZXZlbCBkcml2ZXJzLgorICovCisjaWZkZWYgU1VQUE9SVF9TWVNSUQorc3RhdGljIGlubGluZSBpbnQKK3VhcnRfaGFuZGxlX3N5c3JxX2NoYXIoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgdW5zaWduZWQgaW50IGNoLAorCQkgICAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaWYgKHBvcnQtPnN5c3JxKSB7CisJCWlmIChjaCAmJiB0aW1lX2JlZm9yZShqaWZmaWVzLCBwb3J0LT5zeXNycSkpIHsKKwkJCWhhbmRsZV9zeXNycShjaCwgcmVncywgTlVMTCk7CisJCQlwb3J0LT5zeXNycSA9IDA7CisJCQlyZXR1cm4gMTsKKwkJfQorCQlwb3J0LT5zeXNycSA9IDA7CisJfQorCXJldHVybiAwOworfQorI2Vsc2UKKyNkZWZpbmUgdWFydF9oYW5kbGVfc3lzcnFfY2hhcihwb3J0LGNoLHJlZ3MpCSgwKQorI2VuZGlmCisKKy8qCisgKiBXZSBkbyB0aGUgU3lzUlEgYW5kIFNBSyBjaGVja2luZyBsaWtlIHRoaXMuLi4KKyAqLworc3RhdGljIGlubGluZSBpbnQgdWFydF9oYW5kbGVfYnJlYWsoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgdWFydF9pbmZvICppbmZvID0gcG9ydC0+aW5mbzsKKyNpZmRlZiBTVVBQT1JUX1NZU1JRCisJaWYgKHBvcnQtPmNvbnMgJiYgcG9ydC0+Y29ucy0+aW5kZXggPT0gcG9ydC0+bGluZSkgeworCQlpZiAoIXBvcnQtPnN5c3JxKSB7CisJCQlwb3J0LT5zeXNycSA9IGppZmZpZXMgKyBIWio1OworCQkJcmV0dXJuIDE7CisJCX0KKwkJcG9ydC0+c3lzcnEgPSAwOworCX0KKyNlbmRpZgorCWlmIChpbmZvLT5mbGFncyAmIFVQRl9TQUspCisJCWRvX1NBSyhpbmZvLT50dHkpOworCXJldHVybiAwOworfQorCisvKioKKyAqCXVhcnRfaGFuZGxlX2RjZF9jaGFuZ2UgLSBoYW5kbGUgYSBjaGFuZ2Ugb2YgY2FycmllciBkZXRlY3Qgc3RhdGUKKyAqCUBwb3J0OiB1YXJ0X3BvcnQgc3RydWN0dXJlIGZvciB0aGUgb3BlbiBwb3J0CisgKglAc3RhdHVzOiBuZXcgY2FycmllciBkZXRlY3Qgc3RhdHVzLCBub256ZXJvIGlmIGFjdGl2ZQorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK3VhcnRfaGFuZGxlX2RjZF9jaGFuZ2Uoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgdW5zaWduZWQgaW50IHN0YXR1cykKK3sKKwlzdHJ1Y3QgdWFydF9pbmZvICppbmZvID0gcG9ydC0+aW5mbzsKKworCXBvcnQtPmljb3VudC5kY2QrKzsKKworI2lmZGVmIENPTkZJR19IQVJEX1BQUworCWlmICgocG9ydC0+ZmxhZ3MgJiBVUEZfSEFSRFBQU19DRCkgJiYgc3RhdHVzKQorCQloYXJkcHBzKCk7CisjZW5kaWYKKworCWlmIChpbmZvLT5mbGFncyAmIFVJRl9DSEVDS19DRCkgeworCQlpZiAoc3RhdHVzKQorCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbmZvLT5vcGVuX3dhaXQpOworCQllbHNlIGlmIChpbmZvLT50dHkpCisJCQl0dHlfaGFuZ3VwKGluZm8tPnR0eSk7CisJfQorfQorCisvKioKKyAqCXVhcnRfaGFuZGxlX2N0c19jaGFuZ2UgLSBoYW5kbGUgYSBjaGFuZ2Ugb2YgY2xlYXItdG8tc2VuZCBzdGF0ZQorICoJQHBvcnQ6IHVhcnRfcG9ydCBzdHJ1Y3R1cmUgZm9yIHRoZSBvcGVuIHBvcnQKKyAqCUBzdGF0dXM6IG5ldyBjbGVhciB0byBzZW5kIHN0YXR1cywgbm9uemVybyBpZiBhY3RpdmUKKyAqLworc3RhdGljIGlubGluZSB2b2lkCit1YXJ0X2hhbmRsZV9jdHNfY2hhbmdlKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHVuc2lnbmVkIGludCBzdGF0dXMpCit7CisJc3RydWN0IHVhcnRfaW5mbyAqaW5mbyA9IHBvcnQtPmluZm87CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IGluZm8tPnR0eTsKKworCXBvcnQtPmljb3VudC5jdHMrKzsKKworCWlmIChpbmZvLT5mbGFncyAmIFVJRl9DVFNfRkxPVykgeworCQlpZiAodHR5LT5od19zdG9wcGVkKSB7CisJCQlpZiAoc3RhdHVzKSB7CisJCQkJdHR5LT5od19zdG9wcGVkID0gMDsKKwkJCQlwb3J0LT5vcHMtPnN0YXJ0X3R4KHBvcnQsIDApOworCQkJCXVhcnRfd3JpdGVfd2FrZXVwKHBvcnQpOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKCFzdGF0dXMpIHsKKwkJCQl0dHktPmh3X3N0b3BwZWQgPSAxOworCQkJCXBvcnQtPm9wcy0+c3RvcF90eChwb3J0LCAwKTsKKwkJCX0KKwkJfQorCX0KK30KKworLyoKKyAqCVVBUlRfRU5BQkxFX01TIC0gZGV0ZXJtaW5lIGlmIHBvcnQgc2hvdWxkIGVuYWJsZSBtb2RlbSBzdGF0dXMgaXJxcworICovCisjZGVmaW5lIFVBUlRfRU5BQkxFX01TKHBvcnQsY2ZsYWcpCSgocG9ydCktPmZsYWdzICYgVVBGX0hBUkRQUFNfQ0QgfHwgXAorCQkJCQkgKGNmbGFnKSAmIENSVFNDVFMgfHwgXAorCQkJCQkgISgoY2ZsYWcpICYgQ0xPQ0FMKSkKKworI2VuZGlmCisKKyNlbmRpZiAvKiBMSU5VWF9TRVJJQUxfQ09SRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlcmlhbF9yZWcuaCBiL2luY2x1ZGUvbGludXgvc2VyaWFsX3JlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhMmJiOTUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3NlcmlhbF9yZWcuaApAQCAtMCwwICsxLDMyNSBAQAorLyoKKyAqIGluY2x1ZGUvbGludXgvc2VyaWFsX3JlZy5oCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkyLCAxOTk0IGJ5IFRoZW9kb3JlIFRzJ28uCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlsZSBpcyBwZXJtaXR0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgCisgKiBQdWJsaWMgTGljZW5zZSAoR1BMKQorICogCisgKiBUaGVzZSBhcmUgdGhlIFVBUlQgcG9ydCBhc3NpZ25tZW50cywgZXhwcmVzc2VkIGFzIG9mZnNldHMgZnJvbSB0aGUgYmFzZQorICogcmVnaXN0ZXIuICBUaGVzZSBhc3NpZ25tZW50cyBzaG91bGQgaG9sZCBmb3IgYW55IHNlcmlhbCBwb3J0IGJhc2VkIG9uCisgKiBhIDgyNTAsIDE2NDUwLCBvciAxNjU1MChBKS4KKyAqLworCisjaWZuZGVmIF9MSU5VWF9TRVJJQUxfUkVHX0gKKyNkZWZpbmUgX0xJTlVYX1NFUklBTF9SRUdfSAorCisvKgorICogRExBQj0wCisgKi8KKyNkZWZpbmUgVUFSVF9SWAkJMAkvKiBJbjogIFJlY2VpdmUgYnVmZmVyICovCisjZGVmaW5lIFVBUlRfVFgJCTAJLyogT3V0OiBUcmFuc21pdCBidWZmZXIgKi8KKworI2RlZmluZSBVQVJUX0lFUgkxCS8qIE91dDogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLworI2RlZmluZSBVQVJUX0lFUl9NU0kJCTB4MDggLyogRW5hYmxlIE1vZGVtIHN0YXR1cyBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgVUFSVF9JRVJfUkxTSQkJMHgwNCAvKiBFbmFibGUgcmVjZWl2ZXIgbGluZSBzdGF0dXMgaW50ZXJydXB0ICovCisjZGVmaW5lIFVBUlRfSUVSX1RIUkkJCTB4MDIgLyogRW5hYmxlIFRyYW5zbWl0dGVyIGhvbGRpbmcgcmVnaXN0ZXIgaW50LiAqLworI2RlZmluZSBVQVJUX0lFUl9SREkJCTB4MDEgLyogRW5hYmxlIHJlY2VpdmVyIGRhdGEgaW50ZXJydXB0ICovCisvKgorICogU2xlZXAgbW9kZSBmb3IgU1QxNjY1MCBhbmQgVEkxNjc1MC4gIEZvciB0aGUgU1QxNjY1MCwgRUZSWzRdPTEKKyAqLworI2RlZmluZSBVQVJUX0lFUlhfU0xFRVAJCTB4MTAgLyogRW5hYmxlIHNsZWVwIG1vZGUgKi8KKworI2RlZmluZSBVQVJUX0lJUgkyCS8qIEluOiAgSW50ZXJydXB0IElEIFJlZ2lzdGVyICovCisjZGVmaW5lIFVBUlRfSUlSX05PX0lOVAkJMHgwMSAvKiBObyBpbnRlcnJ1cHRzIHBlbmRpbmcgKi8KKyNkZWZpbmUgVUFSVF9JSVJfSUQJCTB4MDYgLyogTWFzayBmb3IgdGhlIGludGVycnVwdCBJRCAqLworI2RlZmluZSBVQVJUX0lJUl9NU0kJCTB4MDAgLyogTW9kZW0gc3RhdHVzIGludGVycnVwdCAqLworI2RlZmluZSBVQVJUX0lJUl9USFJJCQkweDAyIC8qIFRyYW5zbWl0dGVyIGhvbGRpbmcgcmVnaXN0ZXIgZW1wdHkgKi8KKyNkZWZpbmUgVUFSVF9JSVJfUkRJCQkweDA0IC8qIFJlY2VpdmVyIGRhdGEgaW50ZXJydXB0ICovCisjZGVmaW5lIFVBUlRfSUlSX1JMU0kJCTB4MDYgLyogUmVjZWl2ZXIgbGluZSBzdGF0dXMgaW50ZXJydXB0ICovCisKKyNkZWZpbmUgVUFSVF9GQ1IJMgkvKiBPdXQ6IEZJRk8gQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBVQVJUX0ZDUl9FTkFCTEVfRklGTwkweDAxIC8qIEVuYWJsZSB0aGUgRklGTyAqLworI2RlZmluZSBVQVJUX0ZDUl9DTEVBUl9SQ1ZSCTB4MDIgLyogQ2xlYXIgdGhlIFJDVlIgRklGTyAqLworI2RlZmluZSBVQVJUX0ZDUl9DTEVBUl9YTUlUCTB4MDQgLyogQ2xlYXIgdGhlIFhNSVQgRklGTyAqLworI2RlZmluZSBVQVJUX0ZDUl9ETUFfU0VMRUNUCTB4MDggLyogRm9yIERNQSBhcHBsaWNhdGlvbnMgKi8KKy8qCisgKiBOb3RlOiBUaGUgRklGTyB0cmlnZ2VyIGxldmVscyBhcmUgY2hpcCBzcGVjaWZpYzoKKyAqCVJYOjc2ID0gMDAgIDAxICAxMCAgMTEJVFg6NTQgPSAwMCAgMDEgIDEwICAxMQorICogUEMxNjU1MEQ6CSAxICAgNCAgIDggIDE0CQl4eCAgeHggIHh4ICB4eAorICogVEkxNkM1NTBBOgkgMSAgIDQgICA4ICAxNCAgICAgICAgICB4eCAgeHggIHh4ICB4eAorICogVEkxNkM1NTBDOgkgMSAgIDQgICA4ICAxNCAgICAgICAgICB4eCAgeHggIHh4ICB4eAorICogU1QxNkM1NTA6CSAxICAgNCAgIDggIDE0CQl4eCAgeHggIHh4ICB4eAorICogU1QxNkM2NTA6CSA4ICAxNiAgMjQgIDI4CQkxNiAgIDggIDI0ICAzMAlQT1JUXzE2NjUwVjIKKyAqIE5TMTZDNTUyOgkgMSAgIDQgICA4ICAxNAkJeHggIHh4ICB4eCAgeHgKKyAqIFNUMTZDNjU0OgkgOCAgMTYgIDU2ICA2MAkJIDggIDE2ICAzMiAgNTYJUE9SVF8xNjY1NAorICogVEkxNkM3NTA6CSAxICAxNiAgMzIgIDU2CQl4eCAgeHggIHh4ICB4eAlQT1JUXzE2NzUwCisgKiBUSTE2Qzc1MjoJIDggIDE2ICA1NiAgNjAJCSA4ICAxNiAgMzIgIDU2CisgKi8KKyNkZWZpbmUgVUFSVF9GQ1JfUl9UUklHXzAwCTB4MDAKKyNkZWZpbmUgVUFSVF9GQ1JfUl9UUklHXzAxCTB4NDAKKyNkZWZpbmUgVUFSVF9GQ1JfUl9UUklHXzEwCTB4ODAKKyNkZWZpbmUgVUFSVF9GQ1JfUl9UUklHXzExCTB4YzAKKyNkZWZpbmUgVUFSVF9GQ1JfVF9UUklHXzAwCTB4MDAKKyNkZWZpbmUgVUFSVF9GQ1JfVF9UUklHXzAxCTB4MTAKKyNkZWZpbmUgVUFSVF9GQ1JfVF9UUklHXzEwCTB4MjAKKyNkZWZpbmUgVUFSVF9GQ1JfVF9UUklHXzExCTB4MzAKKworI2RlZmluZSBVQVJUX0ZDUl9UUklHR0VSX01BU0sJMHhDMCAvKiBNYXNrIGZvciB0aGUgRklGTyB0cmlnZ2VyIHJhbmdlICovCisjZGVmaW5lIFVBUlRfRkNSX1RSSUdHRVJfMQkweDAwIC8qIE1hc2sgZm9yIHRyaWdnZXIgc2V0IGF0IDEgKi8KKyNkZWZpbmUgVUFSVF9GQ1JfVFJJR0dFUl80CTB4NDAgLyogTWFzayBmb3IgdHJpZ2dlciBzZXQgYXQgNCAqLworI2RlZmluZSBVQVJUX0ZDUl9UUklHR0VSXzgJMHg4MCAvKiBNYXNrIGZvciB0cmlnZ2VyIHNldCBhdCA4ICovCisjZGVmaW5lIFVBUlRfRkNSX1RSSUdHRVJfMTQJMHhDMCAvKiBNYXNrIGZvciB0cmlnZ2VyIHNldCBhdCAxNCAqLworLyogMTY2NTAgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgVUFSVF9GQ1I2X1JfVFJJR0dFUl84CTB4MDAgLyogTWFzayBmb3IgcmVjZWl2ZSB0cmlnZ2VyIHNldCBhdCAxICovCisjZGVmaW5lIFVBUlRfRkNSNl9SX1RSSUdHRVJfMTYJMHg0MCAvKiBNYXNrIGZvciByZWNlaXZlIHRyaWdnZXIgc2V0IGF0IDQgKi8KKyNkZWZpbmUgVUFSVF9GQ1I2X1JfVFJJR0dFUl8yNCAgMHg4MCAvKiBNYXNrIGZvciByZWNlaXZlIHRyaWdnZXIgc2V0IGF0IDggKi8KKyNkZWZpbmUgVUFSVF9GQ1I2X1JfVFJJR0dFUl8yOAkweEMwIC8qIE1hc2sgZm9yIHJlY2VpdmUgdHJpZ2dlciBzZXQgYXQgMTQgKi8KKyNkZWZpbmUgVUFSVF9GQ1I2X1RfVFJJR0dFUl8xNgkweDAwIC8qIE1hc2sgZm9yIHRyYW5zbWl0IHRyaWdnZXIgc2V0IGF0IDE2ICovCisjZGVmaW5lIFVBUlRfRkNSNl9UX1RSSUdHRVJfOAkweDEwIC8qIE1hc2sgZm9yIHRyYW5zbWl0IHRyaWdnZXIgc2V0IGF0IDggKi8KKyNkZWZpbmUgVUFSVF9GQ1I2X1RfVFJJR0dFUl8yNCAgMHgyMCAvKiBNYXNrIGZvciB0cmFuc21pdCB0cmlnZ2VyIHNldCBhdCAyNCAqLworI2RlZmluZSBVQVJUX0ZDUjZfVF9UUklHR0VSXzMwCTB4MzAgLyogTWFzayBmb3IgdHJhbnNtaXQgdHJpZ2dlciBzZXQgYXQgMzAgKi8KKyNkZWZpbmUgVUFSVF9GQ1I3XzY0QllURQkweDIwIC8qIEdvIGludG8gNjQgYnl0ZSBtb2RlIChUSTE2Qzc1MCkgKi8KKworI2RlZmluZSBVQVJUX0xDUgkzCS8qIE91dDogTGluZSBDb250cm9sIFJlZ2lzdGVyICovCisvKgorICogTm90ZTogaWYgdGhlIHdvcmQgbGVuZ3RoIGlzIDUgYml0cyAoVUFSVF9MQ1JfV0xFTjUpLCB0aGVuIHNldHRpbmcgCisgKiBVQVJUX0xDUl9TVE9QIHdpbGwgc2VsZWN0IDEuNSBzdG9wIGJpdHMsIG5vdCAyIHN0b3AgYml0cy4KKyAqLworI2RlZmluZSBVQVJUX0xDUl9ETEFCCQkweDgwIC8qIERpdmlzb3IgbGF0Y2ggYWNjZXNzIGJpdCAqLworI2RlZmluZSBVQVJUX0xDUl9TQkMJCTB4NDAgLyogU2V0IGJyZWFrIGNvbnRyb2wgKi8KKyNkZWZpbmUgVUFSVF9MQ1JfU1BBUgkJMHgyMCAvKiBTdGljayBwYXJpdHkgKD8pICovCisjZGVmaW5lIFVBUlRfTENSX0VQQVIJCTB4MTAgLyogRXZlbiBwYXJpdHkgc2VsZWN0ICovCisjZGVmaW5lIFVBUlRfTENSX1BBUklUWQkJMHgwOCAvKiBQYXJpdHkgRW5hYmxlICovCisjZGVmaW5lIFVBUlRfTENSX1NUT1AJCTB4MDQgLyogU3RvcCBiaXRzOiAwPTEgYml0LCAxPTIgYml0cyAqLworI2RlZmluZSBVQVJUX0xDUl9XTEVONQkJMHgwMCAvKiBXb3JkbGVuZ3RoOiA1IGJpdHMgKi8KKyNkZWZpbmUgVUFSVF9MQ1JfV0xFTjYJCTB4MDEgLyogV29yZGxlbmd0aDogNiBiaXRzICovCisjZGVmaW5lIFVBUlRfTENSX1dMRU43CQkweDAyIC8qIFdvcmRsZW5ndGg6IDcgYml0cyAqLworI2RlZmluZSBVQVJUX0xDUl9XTEVOOAkJMHgwMyAvKiBXb3JkbGVuZ3RoOiA4IGJpdHMgKi8KKworI2RlZmluZSBVQVJUX01DUgk0CS8qIE91dDogTW9kZW0gQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBVQVJUX01DUl9DTEtTRUwJCTB4ODAgLyogRGl2aWRlIGNsb2NrIGJ5IDQgKFRJMTZDNzUyLCBFRlJbNF09MSkgKi8KKyNkZWZpbmUgVUFSVF9NQ1JfVENSVExSCQkweDQwIC8qIEFjY2VzcyBUQ1IvVExSIChUSTE2Qzc1MiwgRUZSWzRdPTEpICovCisjZGVmaW5lIFVBUlRfTUNSX1hPTkFOWQkJMHgyMCAvKiBFbmFibGUgWG9uIEFueSAoVEkxNkM3NTIsIEVGUls0XT0xKSAqLworI2RlZmluZSBVQVJUX01DUl9BRkUJCTB4MjAgLyogRW5hYmxlIGF1dG8tUlRTL0NUUyAoVEkxNkM1NTBDL1RJMTZDNzUwKSAqLworI2RlZmluZSBVQVJUX01DUl9MT09QCQkweDEwIC8qIEVuYWJsZSBsb29wYmFjayB0ZXN0IG1vZGUgKi8KKyNkZWZpbmUgVUFSVF9NQ1JfT1VUMgkJMHgwOCAvKiBPdXQyIGNvbXBsZW1lbnQgKi8KKyNkZWZpbmUgVUFSVF9NQ1JfT1VUMQkJMHgwNCAvKiBPdXQxIGNvbXBsZW1lbnQgKi8KKyNkZWZpbmUgVUFSVF9NQ1JfUlRTCQkweDAyIC8qIFJUUyBjb21wbGVtZW50ICovCisjZGVmaW5lIFVBUlRfTUNSX0RUUgkJMHgwMSAvKiBEVFIgY29tcGxlbWVudCAqLworCisjZGVmaW5lIFVBUlRfTFNSCTUJLyogSW46ICBMaW5lIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBVQVJUX0xTUl9URU1UCQkweDQwIC8qIFRyYW5zbWl0dGVyIGVtcHR5ICovCisjZGVmaW5lIFVBUlRfTFNSX1RIUkUJCTB4MjAgLyogVHJhbnNtaXQtaG9sZC1yZWdpc3RlciBlbXB0eSAqLworI2RlZmluZSBVQVJUX0xTUl9CSQkJMHgxMCAvKiBCcmVhayBpbnRlcnJ1cHQgaW5kaWNhdG9yICovCisjZGVmaW5lIFVBUlRfTFNSX0ZFCQkweDA4IC8qIEZyYW1lIGVycm9yIGluZGljYXRvciAqLworI2RlZmluZSBVQVJUX0xTUl9QRQkJMHgwNCAvKiBQYXJpdHkgZXJyb3IgaW5kaWNhdG9yICovCisjZGVmaW5lIFVBUlRfTFNSX09FCQkweDAyIC8qIE92ZXJydW4gZXJyb3IgaW5kaWNhdG9yICovCisjZGVmaW5lIFVBUlRfTFNSX0RSCQkweDAxIC8qIFJlY2VpdmVyIGRhdGEgcmVhZHkgKi8KKworI2RlZmluZSBVQVJUX01TUgk2CS8qIEluOiAgTW9kZW0gU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIFVBUlRfTVNSX0RDRAkJMHg4MCAvKiBEYXRhIENhcnJpZXIgRGV0ZWN0ICovCisjZGVmaW5lIFVBUlRfTVNSX1JJCQkweDQwIC8qIFJpbmcgSW5kaWNhdG9yICovCisjZGVmaW5lIFVBUlRfTVNSX0RTUgkJMHgyMCAvKiBEYXRhIFNldCBSZWFkeSAqLworI2RlZmluZSBVQVJUX01TUl9DVFMJCTB4MTAgLyogQ2xlYXIgdG8gU2VuZCAqLworI2RlZmluZSBVQVJUX01TUl9ERENECQkweDA4IC8qIERlbHRhIERDRCAqLworI2RlZmluZSBVQVJUX01TUl9URVJJCQkweDA0IC8qIFRyYWlsaW5nIGVkZ2UgcmluZyBpbmRpY2F0b3IgKi8KKyNkZWZpbmUgVUFSVF9NU1JfRERTUgkJMHgwMiAvKiBEZWx0YSBEU1IgKi8KKyNkZWZpbmUgVUFSVF9NU1JfRENUUwkJMHgwMSAvKiBEZWx0YSBDVFMgKi8KKyNkZWZpbmUgVUFSVF9NU1JfQU5ZX0RFTFRBCTB4MEYgLyogQW55IG9mIHRoZSBkZWx0YSBiaXRzISAqLworCisjZGVmaW5lIFVBUlRfU0NSCTcJLyogSS9POiBTY3JhdGNoIFJlZ2lzdGVyICovCisKKy8qCisgKiBETEFCPTEKKyAqLworI2RlZmluZSBVQVJUX0RMTAkwCS8qIE91dDogRGl2aXNvciBMYXRjaCBMb3cgKi8KKyNkZWZpbmUgVUFSVF9ETE0JMQkvKiBPdXQ6IERpdmlzb3IgTGF0Y2ggSGlnaCAqLworCisvKgorICogTENSPTB4QkYgKG9yIERMQUI9MSBmb3IgMTZDNjYwKQorICovCisjZGVmaW5lIFVBUlRfRUZSCTIJLyogSS9POiBFeHRlbmRlZCBGZWF0dXJlcyBSZWdpc3RlciAqLworI2RlZmluZSBVQVJUX0VGUl9DVFMJCTB4ODAgLyogQ1RTIGZsb3cgY29udHJvbCAqLworI2RlZmluZSBVQVJUX0VGUl9SVFMJCTB4NDAgLyogUlRTIGZsb3cgY29udHJvbCAqLworI2RlZmluZSBVQVJUX0VGUl9TQ0QJCTB4MjAgLyogU3BlY2lhbCBjaGFyYWN0ZXIgZGV0ZWN0ICovCisjZGVmaW5lIFVBUlRfRUZSX0VDQgkJMHgxMCAvKiBFbmhhbmNlZCBjb250cm9sIGJpdCAqLworLyoKKyAqIHRoZSBsb3cgZm91ciBiaXRzIGNvbnRyb2wgc29mdHdhcmUgZmxvdyBjb250cm9sCisgKi8KKworLyoKKyAqIExDUj0weEJGLCBUSTE2Qzc1MiwgU1QxNjY1MCwgU1QxNjY1MEEsIFNUMTY2NTQKKyAqLworI2RlZmluZSBVQVJUX1hPTjEJNAkvKiBJL086IFhvbiBjaGFyYWN0ZXIgMSAqLworI2RlZmluZSBVQVJUX1hPTjIJNQkvKiBJL086IFhvbiBjaGFyYWN0ZXIgMiAqLworI2RlZmluZSBVQVJUX1hPRkYxCTYJLyogSS9POiBYb2ZmIGNoYXJhY3RlciAxICovCisjZGVmaW5lIFVBUlRfWE9GRjIJNwkvKiBJL086IFhvZmYgY2hhcmFjdGVyIDIgKi8KKworLyoKKyAqIEVGUls0XT0xIE1DUls2XT0xLCBUSTE2Qzc1MgorICovCisjZGVmaW5lIFVBUlRfVEk3NTJfVENSCTYJLyogSS9POiB0cmFuc21pc3Npb24gY29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBVQVJUX1RJNzUyX1RMUgk3CS8qIEkvTzogdHJpZ2dlciBsZXZlbCByZWdpc3RlciAqLworCisvKgorICogTENSPTB4QkYsIFhSMTZDODV4CisgKi8KKyNkZWZpbmUgVUFSVF9UUkcJMAkvKiBGQ1RSIGJpdCA3IHNlbGVjdHMgUnggb3IgVHgKKwkJCQkgKiBJbjogRmlmbyBjb3VudAorCQkJCSAqIE91dDogRmlmbyBjdXN0b20gdHJpZ2dlciBsZXZlbHMgKi8KKy8qCisgKiBUaGVzZSBhcmUgdGhlIGRlZmluaXRpb25zIGZvciB0aGUgUHJvZ3JhbW1hYmxlIFRyaWdnZXIgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBVQVJUX1RSR18xCQkweDAxCisjZGVmaW5lIFVBUlRfVFJHXzQJCTB4MDQKKyNkZWZpbmUgVUFSVF9UUkdfOAkJMHgwOAorI2RlZmluZSBVQVJUX1RSR18xNgkJMHgxMAorI2RlZmluZSBVQVJUX1RSR18zMgkJMHgyMAorI2RlZmluZSBVQVJUX1RSR182NAkJMHg0MAorI2RlZmluZSBVQVJUX1RSR185NgkJMHg2MAorI2RlZmluZSBVQVJUX1RSR18xMjAJCTB4NzgKKyNkZWZpbmUgVUFSVF9UUkdfMTI4CQkweDgwCisKKyNkZWZpbmUgVUFSVF9GQ1RSCTEJLyogRmVhdHVyZSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFVBUlRfRkNUUl9SVFNfTk9ERUxBWQkweDAwICAvKiBSVFMgZmxvdyBjb250cm9sIGRlbGF5ICovCisjZGVmaW5lIFVBUlRfRkNUUl9SVFNfNERFTEFZCTB4MDEKKyNkZWZpbmUgVUFSVF9GQ1RSX1JUU182REVMQVkJMHgwMgorI2RlZmluZSBVQVJUX0ZDVFJfUlRTXzhERUxBWQkweDAzCisjZGVmaW5lIFVBUlRfRkNUUl9JUkRBCQkweDA0ICAvKiBJckRhIGRhdGEgZW5jb2RlIHNlbGVjdCAqLworI2RlZmluZSBVQVJUX0ZDVFJfVFhfSU5UCTB4MDggIC8qIFR4IGludGVycnVwdCB0eXBlIHNlbGVjdCAqLworI2RlZmluZSBVQVJUX0ZDVFJfVFJHQQkJMHgwMCAgLyogVHgvUnggNTUwIHRyaWdnZXIgdGFibGUgc2VsZWN0ICovCisjZGVmaW5lIFVBUlRfRkNUUl9UUkdCCQkweDEwICAvKiBUeC9SeCA2NTAgdHJpZ2dlciB0YWJsZSBzZWxlY3QgKi8KKyNkZWZpbmUgVUFSVF9GQ1RSX1RSR0MJCTB4MjAgIC8qIFR4L1J4IDY1NCB0cmlnZ2VyIHRhYmxlIHNlbGVjdCAqLworI2RlZmluZSBVQVJUX0ZDVFJfVFJHRAkJMHgzMCAgLyogVHgvUnggODUwIHByb2dyYW1tYWJsZSB0cmlnZ2VyIHNlbGVjdCAqLworI2RlZmluZSBVQVJUX0ZDVFJfU0NSX1NXQVAJMHg0MCAgLyogU2NyYXRjaCBwYWQgcmVnaXN0ZXIgc3dhcCAqLworI2RlZmluZSBVQVJUX0ZDVFJfUlgJCTB4MDAgIC8qIFByb2dyYW1tYWJsZSB0cmlnZ2VyIG1vZGUgc2VsZWN0ICovCisjZGVmaW5lIFVBUlRfRkNUUl9UWAkJMHg4MCAgLyogUHJvZ3JhbW1hYmxlIHRyaWdnZXIgbW9kZSBzZWxlY3QgKi8KKworLyoKKyAqIExDUj0weEJGLCBGQ1RSWzZdPTEKKyAqLworI2RlZmluZSBVQVJUX0VNU1IJNwkvKiBFeHRlbmRlZCBNb2RlIFNlbGVjdCBSZWdpc3RlciAqLworI2RlZmluZSBVQVJUX0VNU1JfRklGT19DT1VOVAkweDAxICAvKiBSeC9UeCBzZWxlY3QgKi8KKyNkZWZpbmUgVUFSVF9FTVNSX0FMVF9DT1VOVAkweDAyICAvKiBBbHRlcm5hdGluZyBjb3VudCBzZWxlY3QgKi8KKworLyoKKyAqIFRoZSBJbnRlbCBYU2NhbGUgb24tY2hpcCBVQVJUcyBkZWZpbmUgdGhlc2UgYml0cworICovCisjZGVmaW5lIFVBUlRfSUVSX0RNQUUJMHg4MAkvKiBETUEgUmVxdWVzdHMgRW5hYmxlICovCisjZGVmaW5lIFVBUlRfSUVSX1VVRQkweDQwCS8qIFVBUlQgVW5pdCBFbmFibGUgKi8KKyNkZWZpbmUgVUFSVF9JRVJfTlJaRQkweDIwCS8qIE5SWiBjb2RpbmcgRW5hYmxlICovCisjZGVmaW5lIFVBUlRfSUVSX1JUT0lFCTB4MTAJLyogUmVjZWl2ZXIgVGltZSBPdXQgSW50ZXJydXB0IEVuYWJsZSAqLworCisjZGVmaW5lIFVBUlRfSUlSX1RPRAkweDA4CS8qIENoYXJhY3RlciBUaW1lb3V0IEluZGljYXRpb24gRGV0ZWN0ZWQgKi8KKworI2RlZmluZSBVQVJUX0ZDUl9QWEFSMQkweDAwCS8qIHJlY2VpdmUgRklGTyB0cmVzaG9sZCA9IDEgKi8KKyNkZWZpbmUgVUFSVF9GQ1JfUFhBUjgJMHg0MAkvKiByZWNlaXZlIEZJRk8gdHJlc2hvbGQgPSA4ICovCisjZGVmaW5lIFVBUlRfRkNSX1BYQVIxNgkweDgwCS8qIHJlY2VpdmUgRklGTyB0cmVzaG9sZCA9IDE2ICovCisjZGVmaW5lIFVBUlRfRkNSX1BYQVIzMgkweGMwCS8qIHJlY2VpdmUgRklGTyB0cmVzaG9sZCA9IDMyICovCisKKworCisKKy8qCisgKiBUaGVzZSByZWdpc3RlciBkZWZpbml0aW9ucyBhcmUgZm9yIHRoZSAxNkM5NTAKKyAqLworI2RlZmluZSBVQVJUX0FTUgkweDAxCS8qIEFkZGl0aW9uYWwgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIFVBUlRfUkZMCTB4MDMJLyogUmVjZWl2ZXIgRklGTyBsZXZlbCAqLworI2RlZmluZSBVQVJUX1RGTCAJMHgwNAkvKiBUcmFuc21pdHRlciBGSUZPIGxldmVsICovCisjZGVmaW5lIFVBUlRfSUNSCTB4MDUJLyogSW5kZXggQ29udHJvbCBSZWdpc3RlciAqLworCisvKiBUaGUgMTY5NTAgSUNSIHJlZ2lzdGVycyAqLworI2RlZmluZSBVQVJUX0FDUgkweDAwCS8qIEFkZGl0aW9uYWwgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBVQVJUX0NQUgkweDAxCS8qIENsb2NrIFByZXNjYWxhciBSZWdpc3RlciAqLworI2RlZmluZSBVQVJUX1RDUgkweDAyCS8qIFRpbWVzIENsb2NrIFJlZ2lzdGVyICovCisjZGVmaW5lIFVBUlRfQ0tTCTB4MDMJLyogQ2xvY2sgU2VsZWN0IFJlZ2lzdGVyICovCisjZGVmaW5lIFVBUlRfVFRMCTB4MDQJLyogVHJhbnNtaXR0ZXIgSW50ZXJydXB0IFRyaWdnZXIgTGV2ZWwgKi8KKyNkZWZpbmUgVUFSVF9SVEwJMHgwNQkvKiBSZWNlaXZlciBJbnRlcnJ1cHQgVHJpZ2dlciBMZXZlbCAqLworI2RlZmluZSBVQVJUX0ZDTAkweDA2CS8qIEZsb3cgQ29udHJvbCBMZXZlbCBMb3dlciAqLworI2RlZmluZSBVQVJUX0ZDSAkweDA3CS8qIEZsb3cgQ29udHJvbCBMZXZlbCBIaWdoZXIgKi8KKyNkZWZpbmUgVUFSVF9JRDEJMHgwOAkvKiBJRCAjMSAqLworI2RlZmluZSBVQVJUX0lEMgkweDA5CS8qIElEICMyICovCisjZGVmaW5lIFVBUlRfSUQzCTB4MEEJLyogSUQgIzMgKi8KKyNkZWZpbmUgVUFSVF9SRVYJMHgwQgkvKiBSZXZpc2lvbiAqLworI2RlZmluZSBVQVJUX0NTUgkweDBDCS8qIENoYW5uZWwgU29mdHdhcmUgUmVzZXQgKi8KKyNkZWZpbmUgVUFSVF9OTVIJMHgwRAkvKiBOaW5lLWJpdCBNb2RlIFJlZ2lzdGVyICovCisjZGVmaW5lIFVBUlRfQ1RSCTB4RkYKKworLyoKKyAqIFRoZSAxNkM5NTAgQWRkaXRpb25hbCBDb250cm9sIFJlaWdzdGVyCisgKi8KKyNkZWZpbmUgVUFSVF9BQ1JfUlhESVMJMHgwMQkvKiBSZWNlaXZlciBkaXNhYmxlICovCisjZGVmaW5lIFVBUlRfQUNSX1RYRElTCTB4MDIJLyogUmVjZWl2ZXIgZGlzYWJsZSAqLworI2RlZmluZSBVQVJUX0FDUl9EU1JGQwkweDA0CS8qIERTUiBGbG93IENvbnRyb2wgKi8KKyNkZWZpbmUgVUFSVF9BQ1JfVExFTkIJMHgyMAkvKiA5NTAgdHJpZ2dlciBsZXZlbHMgZW5hYmxlICovCisjZGVmaW5lIFVBUlRfQUNSX0lDUlJECTB4NDAJLyogSUNSIFJlYWQgZW5hYmxlICovCisjZGVmaW5lIFVBUlRfQUNSX0FTUkVOCTB4ODAJLyogQWRkaXRpb25hbCBzdGF0dXMgZW5hYmxlICovCisKKworCisvKgorICogVGhlc2UgZGVmaW5pdGlvbnMgYXJlIGZvciB0aGUgUlNBLURWIElJL1MgY2FyZCwgZnJvbQorICoKKyAqIEtpeW9rYXp1IFNVVE8gPHN1dG9Aa3MtYW5kLWtzLm5lLmpwPgorICovCisKKyNkZWZpbmUgVUFSVF9SU0FfQkFTRSAoLTgpCisKKyNkZWZpbmUgVUFSVF9SU0FfTVNSICgoVUFSVF9SU0FfQkFTRSkgKyAwKSAvKiBJL086IE1vZGUgU2VsZWN0IFJlZ2lzdGVyICovCisKKyNkZWZpbmUgVUFSVF9SU0FfTVNSX1NXQVAgKDEgPDwgMCkgLyogU3dhcCBsb3cvaGlnaCA4IGJ5dGVzIGluIEkvTyBwb3J0IGFkZHIgKi8KKyNkZWZpbmUgVUFSVF9SU0FfTVNSX0ZJRk8gKDEgPDwgMikgLyogRW5hYmxlIHRoZSBleHRlcm5hbCBGSUZPICovCisjZGVmaW5lIFVBUlRfUlNBX01TUl9GTE9XICgxIDw8IDMpIC8qIEVuYWJsZSB0aGUgYXV0byBSVFMvQ1RTIGZsb3cgY29udHJvbCAqLworI2RlZmluZSBVQVJUX1JTQV9NU1JfSVRZUCAoMSA8PCA0KSAvKiBMZXZlbCAoMSkgLyBFZGdlIHRyaWdlciAoMCkgKi8KKworI2RlZmluZSBVQVJUX1JTQV9JRVIgKChVQVJUX1JTQV9CQVNFKSArIDEpIC8qIEkvTzogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLworCisjZGVmaW5lIFVBUlRfUlNBX0lFUl9SeF9GSUZPX0ggKDEgPDwgMCkgLyogRW5hYmxlIFJ4IEZJRk8gaGFsZiBmdWxsIGludC4gKi8KKyNkZWZpbmUgVUFSVF9SU0FfSUVSX1R4X0ZJRk9fSCAoMSA8PCAxKSAvKiBFbmFibGUgVHggRklGTyBoYWxmIGZ1bGwgaW50LiAqLworI2RlZmluZSBVQVJUX1JTQV9JRVJfVHhfRklGT19FICgxIDw8IDIpIC8qIEVuYWJsZSBUeCBGSUZPIGVtcHR5IGludC4gKi8KKyNkZWZpbmUgVUFSVF9SU0FfSUVSX1J4X1RPVVQgKDEgPDwgMykgLyogRW5hYmxlIGNoYXIgcmVjZWl2ZSB0aW1lb3V0IGludCAqLworI2RlZmluZSBVQVJUX1JTQV9JRVJfVElNRVIgKDEgPDwgNCkgLyogRW5hYmxlIHRpbWVyIGludGVycnVwdCAqLworCisjZGVmaW5lIFVBUlRfUlNBX1NSUiAoKFVBUlRfUlNBX0JBU0UpICsgMikgLyogSU46IFN0YXR1cyBSZWFkIFJlZ2lzdGVyICovCisKKyNkZWZpbmUgVUFSVF9SU0FfU1JSX1R4X0ZJRk9fTkVNUCAoMSA8PCAwKSAvKiBUeCBGSUZPIGlzIG5vdCBlbXB0eSAoMSkgKi8KKyNkZWZpbmUgVUFSVF9SU0FfU1JSX1R4X0ZJRk9fTkhGTCAoMSA8PCAxKSAvKiBUeCBGSUZPIGlzIG5vdCBoYWxmIGZ1bGwgKDEpICovCisjZGVmaW5lIFVBUlRfUlNBX1NSUl9UeF9GSUZPX05GVUwgKDEgPDwgMikgLyogVHggRklGTyBpcyBub3QgZnVsbCAoMSkgKi8KKyNkZWZpbmUgVUFSVF9SU0FfU1JSX1J4X0ZJRk9fTkVNUCAoMSA8PCAzKSAvKiBSeCBGSUZPIGlzIG5vdCBlbXB0eSAoMSkgKi8KKyNkZWZpbmUgVUFSVF9SU0FfU1JSX1J4X0ZJRk9fTkhGTCAoMSA8PCA0KSAvKiBSeCBGSUZPIGlzIG5vdCBoYWxmIGZ1bGwgKDEpICovCisjZGVmaW5lIFVBUlRfUlNBX1NSUl9SeF9GSUZPX05GVUwgKDEgPDwgNSkgLyogUnggRklGTyBpcyBub3QgZnVsbCAoMSkgKi8KKyNkZWZpbmUgVUFSVF9SU0FfU1JSX1J4X1RPVVQgKDEgPDwgNikgLyogQ2hhcmFjdGVyIHJlY2VwdGlvbiB0aW1lb3V0IG9jY3VycmVkICgxKSAqLworI2RlZmluZSBVQVJUX1JTQV9TUlJfVElNRVIgKDEgPDwgNykgLyogVGltZXIgaW50ZXJydXB0IG9jY3VycmVkICovCisKKyNkZWZpbmUgVUFSVF9SU0FfRlJSICgoVUFSVF9SU0FfQkFTRSkgKyAyKSAvKiBPVVQ6IEZJRk8gUmVzZXQgUmVnaXN0ZXIgKi8KKworI2RlZmluZSBVQVJUX1JTQV9USVZTUiAoKFVBUlRfUlNBX0JBU0UpICsgMykgLyogSS9POiBUaW1lciBJbnRlcnZhbCBWYWx1ZSBTZXQgUmVnaXN0ZXIgKi8KKworI2RlZmluZSBVQVJUX1JTQV9UQ1IgKChVQVJUX1JTQV9CQVNFKSArIDQpIC8qIE9VVDogVGltZXIgQ29udHJvbCBSZWdpc3RlciAqLworCisjZGVmaW5lIFVBUlRfUlNBX1RDUl9TV0lUQ0ggKDEgPDwgMCkgLyogVGltZXIgb24gKi8KKworLyoKKyAqIFRoZSBSU0EgRFNWL0lJIGJvYXJkIGhhcyB0d28gZml4ZWQgY2xvY2sgZnJlcXVlbmNpZXMuICBPbmUgaXMgdGhlCisgKiBzdGFuZGFyZCByYXRlLCBhbmQgdGhlIG90aGVyIGlzIDggdGltZXMgZmFzdGVyLgorICovCisjZGVmaW5lIFNFUklBTF9SU0FfQkFVRF9CQVNFICg5MjE2MDApCisjZGVmaW5lIFNFUklBTF9SU0FfQkFVRF9CQVNFX0xPIChTRVJJQUxfUlNBX0JBVURfQkFTRSAvIDgpCisKKy8qCisgKiBFeHRyYSBzZXJpYWwgcmVnaXN0ZXIgZGVmaW5pdGlvbnMgZm9yIHRoZSBpbnRlcm5hbCBVQVJUcworICogaW4gVEkgT01BUCBwcm9jZXNzb3JzLgorICovCisjZGVmaW5lIFVBUlRfT01BUF9NRFIxCQkweDA4CS8qIE1vZGUgZGVmaW5pdGlvbiByZWdpc3RlciAqLworI2RlZmluZSBVQVJUX09NQVBfTURSMgkJMHgwOQkvKiBNb2RlIGRlZmluaXRpb24gcmVnaXN0ZXIgMiAqLworI2RlZmluZSBVQVJUX09NQVBfU0NSCQkweDEwCS8qIFN1cHBsZW1lbnRhcnkgY29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBVQVJUX09NQVBfU1NSCQkweDExCS8qIFN1cHBsZW1lbnRhcnkgc3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIFVBUlRfT01BUF9FQkxSCQkweDEyCS8qIEJPRiBsZW5ndGggcmVnaXN0ZXIgKi8KKyNkZWZpbmUgVUFSVF9PTUFQX09TQ18xMk1fU0VMCTB4MTMJLyogT01BUDE1MTAgMTJNSHogb3NjIHNlbGVjdCAqLworI2RlZmluZSBVQVJUX09NQVBfTVZFUgkJMHgxNAkvKiBNb2R1bGUgdmVyc2lvbiByZWdpc3RlciAqLworI2RlZmluZSBVQVJUX09NQVBfU1lTQwkJMHgxNQkvKiBTeXN0ZW0gY29uZmlndXJhdGlvbiByZWdpc3RlciAqLworI2RlZmluZSBVQVJUX09NQVBfU1lTUwkJMHgxNgkvKiBTeXN0ZW0gc3RhdHVzIHJlZ2lzdGVyICovCisKKyNlbmRpZiAvKiBfTElOVVhfU0VSSUFMX1JFR19IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VyaW8uaCBiL2luY2x1ZGUvbGludXgvc2VyaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmQzYjlhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9zZXJpby5oCkBAIC0wLDAgKzEsMjE0IEBACisjaWZuZGVmIF9TRVJJT19ICisjZGVmaW5lIF9TRVJJT19ICisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMiBWb2p0ZWNoIFBhdmxpaworKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKworI2RlZmluZSBTUElPQ1NUWVBFCV9JT1coJ3EnLCAweDAxLCB1bnNpZ25lZCBsb25nKQorCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kX2RldmljZXRhYmxlLmg+CisKK3N0cnVjdCBzZXJpbyB7CisJdm9pZCAqcG9ydF9kYXRhOworCisJY2hhciBuYW1lWzMyXTsKKwljaGFyIHBoeXNbMzJdOworCisJdW5zaWduZWQgaW50IG1hbnVhbF9iaW5kOworCisJc3RydWN0IHNlcmlvX2RldmljZV9pZCBpZDsKKworCXNwaW5sb2NrX3QgbG9jazsJCS8qIHByb3RlY3RzIGNyaXRpY2FsIHNlY3Rpb25zIGZyb20gcG9ydCdzIGludGVycnVwdCBoYW5kbGVyICovCisKKwlpbnQgKCp3cml0ZSkoc3RydWN0IHNlcmlvICosIHVuc2lnbmVkIGNoYXIpOworCWludCAoKm9wZW4pKHN0cnVjdCBzZXJpbyAqKTsKKwl2b2lkICgqY2xvc2UpKHN0cnVjdCBzZXJpbyAqKTsKKwlpbnQgKCpzdGFydCkoc3RydWN0IHNlcmlvICopOworCXZvaWQgKCpzdG9wKShzdHJ1Y3Qgc2VyaW8gKik7CisKKwlzdHJ1Y3Qgc2VyaW8gKnBhcmVudCwgKmNoaWxkOworCisJc3RydWN0IHNlcmlvX2RyaXZlciAqZHJ2OwkvKiBhY2Nlc3NlZCBmcm9tIGludGVycnVwdCwgbXVzdCBiZSBwcm90ZWN0ZWQgYnkgc2VyaW8tPmxvY2sgYW5kIHNlcmlvLT5zZW0gKi8KKwlzdHJ1Y3Qgc2VtYXBob3JlIGRydl9zZW07CS8qIHByb3RlY3RzIHNlcmlvLT5kcnYgc28gYXR0cmlidXRlcyBjYW4gcGluIGRyaXZlciAqLworCisJc3RydWN0IGRldmljZSBkZXY7CisJdW5zaWduZWQgaW50IHJlZ2lzdGVyZWQ7CS8qIHBvcnQgaGFzIGJlZW4gZnVsbHkgcmVnaXN0ZXJlZCB3aXRoIGRyaXZlciBjb3JlICovCisKKwlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7Cit9OworI2RlZmluZSB0b19zZXJpb19wb3J0KGQpCWNvbnRhaW5lcl9vZihkLCBzdHJ1Y3Qgc2VyaW8sIGRldikKKworc3RydWN0IHNlcmlvX2RyaXZlciB7CisJdm9pZCAqcHJpdmF0ZTsKKwljaGFyICpkZXNjcmlwdGlvbjsKKworCXN0cnVjdCBzZXJpb19kZXZpY2VfaWQgKmlkX3RhYmxlOworCXVuc2lnbmVkIGludCBtYW51YWxfYmluZDsKKworCXZvaWQgKCp3cml0ZV93YWtldXApKHN0cnVjdCBzZXJpbyAqKTsKKwlpcnFyZXR1cm5fdCAoKmludGVycnVwdCkoc3RydWN0IHNlcmlvICosIHVuc2lnbmVkIGNoYXIsCisJCQl1bnNpZ25lZCBpbnQsIHN0cnVjdCBwdF9yZWdzICopOworCWludCAgKCpjb25uZWN0KShzdHJ1Y3Qgc2VyaW8gKiwgc3RydWN0IHNlcmlvX2RyaXZlciAqZHJ2KTsKKwlpbnQgICgqcmVjb25uZWN0KShzdHJ1Y3Qgc2VyaW8gKik7CisJdm9pZCAoKmRpc2Nvbm5lY3QpKHN0cnVjdCBzZXJpbyAqKTsKKwl2b2lkICgqY2xlYW51cCkoc3RydWN0IHNlcmlvICopOworCisJc3RydWN0IGRldmljZV9kcml2ZXIgZHJpdmVyOworfTsKKyNkZWZpbmUgdG9fc2VyaW9fZHJpdmVyKGQpCWNvbnRhaW5lcl9vZihkLCBzdHJ1Y3Qgc2VyaW9fZHJpdmVyLCBkcml2ZXIpCisKK2ludCBzZXJpb19vcGVuKHN0cnVjdCBzZXJpbyAqc2VyaW8sIHN0cnVjdCBzZXJpb19kcml2ZXIgKmRydik7Cit2b2lkIHNlcmlvX2Nsb3NlKHN0cnVjdCBzZXJpbyAqc2VyaW8pOwordm9pZCBzZXJpb19yZXNjYW4oc3RydWN0IHNlcmlvICpzZXJpbyk7Cit2b2lkIHNlcmlvX3JlY29ubmVjdChzdHJ1Y3Qgc2VyaW8gKnNlcmlvKTsKK2lycXJldHVybl90IHNlcmlvX2ludGVycnVwdChzdHJ1Y3Qgc2VyaW8gKnNlcmlvLCB1bnNpZ25lZCBjaGFyIGRhdGEsIHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCit2b2lkIF9fc2VyaW9fcmVnaXN0ZXJfcG9ydChzdHJ1Y3Qgc2VyaW8gKnNlcmlvLCBzdHJ1Y3QgbW9kdWxlICpvd25lcik7CitzdGF0aWMgaW5saW5lIHZvaWQgc2VyaW9fcmVnaXN0ZXJfcG9ydChzdHJ1Y3Qgc2VyaW8gKnNlcmlvKQoreworCV9fc2VyaW9fcmVnaXN0ZXJfcG9ydChzZXJpbywgVEhJU19NT0RVTEUpOworfQorCit2b2lkIHNlcmlvX3VucmVnaXN0ZXJfcG9ydChzdHJ1Y3Qgc2VyaW8gKnNlcmlvKTsKK3ZvaWQgX19zZXJpb191bnJlZ2lzdGVyX3BvcnRfZGVsYXllZChzdHJ1Y3Qgc2VyaW8gKnNlcmlvLCBzdHJ1Y3QgbW9kdWxlICpvd25lcik7CitzdGF0aWMgaW5saW5lIHZvaWQgc2VyaW9fdW5yZWdpc3Rlcl9wb3J0X2RlbGF5ZWQoc3RydWN0IHNlcmlvICpzZXJpbykKK3sKKwlfX3NlcmlvX3VucmVnaXN0ZXJfcG9ydF9kZWxheWVkKHNlcmlvLCBUSElTX01PRFVMRSk7Cit9CisKK3ZvaWQgX19zZXJpb19yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHNlcmlvX2RyaXZlciAqZHJ2LCBzdHJ1Y3QgbW9kdWxlICpvd25lcik7CitzdGF0aWMgaW5saW5lIHZvaWQgc2VyaW9fcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBzZXJpb19kcml2ZXIgKmRydikKK3sKKwlfX3NlcmlvX3JlZ2lzdGVyX2RyaXZlcihkcnYsIFRISVNfTU9EVUxFKTsKK30KKwordm9pZCBzZXJpb191bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3Qgc2VyaW9fZHJpdmVyICpkcnYpOworCitzdGF0aWMgaW5saW5lIGludCBzZXJpb193cml0ZShzdHJ1Y3Qgc2VyaW8gKnNlcmlvLCB1bnNpZ25lZCBjaGFyIGRhdGEpCit7CisJaWYgKHNlcmlvLT53cml0ZSkKKwkJcmV0dXJuIHNlcmlvLT53cml0ZShzZXJpbywgZGF0YSk7CisJZWxzZQorCQlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXJpb19kcnZfd3JpdGVfd2FrZXVwKHN0cnVjdCBzZXJpbyAqc2VyaW8pCit7CisJaWYgKHNlcmlvLT5kcnYgJiYgc2VyaW8tPmRydi0+d3JpdGVfd2FrZXVwKQorCQlzZXJpby0+ZHJ2LT53cml0ZV93YWtldXAoc2VyaW8pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2VyaW9fY2xlYW51cChzdHJ1Y3Qgc2VyaW8gKnNlcmlvKQoreworCWlmIChzZXJpby0+ZHJ2ICYmIHNlcmlvLT5kcnYtPmNsZWFudXApCisJCXNlcmlvLT5kcnYtPmNsZWFudXAoc2VyaW8pOworfQorCisvKgorICogVXNlIHRoZSBmb2xsb3dpbmcgZnVjbnRpb25zIHRvIG1hbmlwdWxhdGUgc2VyaW8ncyBwZXItcG9ydAorICogZHJpdmVyLXNwZWNpZmljIGRhdGEuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCAqc2VyaW9fZ2V0X2RydmRhdGEoc3RydWN0IHNlcmlvICpzZXJpbykKK3sKKwlyZXR1cm4gZGV2X2dldF9kcnZkYXRhKCZzZXJpby0+ZGV2KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNlcmlvX3NldF9kcnZkYXRhKHN0cnVjdCBzZXJpbyAqc2VyaW8sIHZvaWQgKmRhdGEpCit7CisJZGV2X3NldF9kcnZkYXRhKCZzZXJpby0+ZGV2LCBkYXRhKTsKK30KKworLyoKKyAqIFVzZSB0aGUgZm9sbG93aW5nIGZ1Y250aW9ucyB0byBwcm90ZWN0IGNyaXRpY2FsIHNlY3Rpb25zIGluCisgKiBkcml2ZXIgY29kZSBmcm9tIHBvcnQncyBpbnRlcnJ1cHQgaGFuZGxlcgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgc2VyaW9fcGF1c2Vfcngoc3RydWN0IHNlcmlvICpzZXJpbykKK3sKKwlzcGluX2xvY2tfaXJxKCZzZXJpby0+bG9jayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXJpb19jb250aW51ZV9yeChzdHJ1Y3Qgc2VyaW8gKnNlcmlvKQoreworCXNwaW5fdW5sb2NrX2lycSgmc2VyaW8tPmxvY2spOworfQorCisvKgorICogVXNlIHRoZSBmb2xsb3dpbmcgZnVjbnRpb25zIHRvIHBpbiBzZXJpbydzIGRyaXZlciBpbiBwcm9jZXNzIGNvbnRleHQKKyAqLworc3RhdGljIGlubGluZSBpbnQgc2VyaW9fcGluX2RyaXZlcihzdHJ1Y3Qgc2VyaW8gKnNlcmlvKQoreworCXJldHVybiBkb3duX2ludGVycnVwdGlibGUoJnNlcmlvLT5kcnZfc2VtKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNlcmlvX3VucGluX2RyaXZlcihzdHJ1Y3Qgc2VyaW8gKnNlcmlvKQoreworCXVwKCZzZXJpby0+ZHJ2X3NlbSk7Cit9CisKKworI2VuZGlmCisKKy8qCisgKiBiaXQgbWFza3MgZm9yIHVzZSBpbiAiaW50ZXJydXB0IiBmbGFncyAoM3JkIGFyZ3VtZW50KQorICovCisjZGVmaW5lIFNFUklPX1RJTUVPVVQJMQorI2RlZmluZSBTRVJJT19QQVJJVFkJMgorI2RlZmluZSBTRVJJT19GUkFNRQk0CisKKy8qCisgKiBTZXJpbyB0eXBlcworICovCisjZGVmaW5lIFNFUklPX1hUCTB4MDAKKyNkZWZpbmUgU0VSSU9fODA0MgkweDAxCisjZGVmaW5lIFNFUklPX1JTMjMyCTB4MDIKKyNkZWZpbmUgU0VSSU9fSElMX01MQwkweDAzCisjZGVmaW5lIFNFUklPX1BTX1BTVEhSVQkweDA1CisjZGVmaW5lIFNFUklPXzgwNDJfWEwJMHgwNgorCisvKgorICogU2VyaW8gdHlwZXMKKyAqLworI2RlZmluZSBTRVJJT19VTktOT1dOCTB4MDAKKyNkZWZpbmUgU0VSSU9fTVNDCTB4MDEKKyNkZWZpbmUgU0VSSU9fU1VOCTB4MDIKKyNkZWZpbmUgU0VSSU9fTVMJMHgwMworI2RlZmluZSBTRVJJT19NUAkweDA0CisjZGVmaW5lIFNFUklPX01aCTB4MDUKKyNkZWZpbmUgU0VSSU9fTVpQCTB4MDYKKyNkZWZpbmUgU0VSSU9fTVpQUAkweDA3CisjZGVmaW5lIFNFUklPX1ZTWFhYQUEJMHgwOAorI2RlZmluZSBTRVJJT19TVU5LQkQJMHgxMAorI2RlZmluZSBTRVJJT19XQVJSSU9SCTB4MTgKKyNkZWZpbmUgU0VSSU9fU1BBQ0VPUkIJMHgxOQorI2RlZmluZSBTRVJJT19NQUdFTExBTgkweDFhCisjZGVmaW5lIFNFUklPX1NQQUNFQkFMTAkweDFiCisjZGVmaW5lIFNFUklPX0dVTlpFCTB4MWMKKyNkZWZpbmUgU0VSSU9fSUZPUkNFCTB4MWQKKyNkZWZpbmUgU0VSSU9fU1RJTkdFUgkweDFlCisjZGVmaW5lIFNFUklPX05FV1RPTgkweDFmCisjZGVmaW5lIFNFUklPX1NUT1dBV0FZCTB4MjAKKyNkZWZpbmUgU0VSSU9fSDM2MDAJMHgyMQorI2RlZmluZSBTRVJJT19QUzJTRVIJMHgyMgorI2RlZmluZSBTRVJJT19UV0lES0JECTB4MjMKKyNkZWZpbmUgU0VSSU9fVFdJREpPWQkweDI0CisjZGVmaW5lIFNFUklPX0hJTAkweDI1CisjZGVmaW5lIFNFUklPX1NORVMyMzIJMHgyNgorI2RlZmluZSBTRVJJT19TRU1URUNICTB4MjcKKyNkZWZpbmUgU0VSSU9fTEtLQkQJMHgyOAorI2RlZmluZSBTRVJJT19FTE8JMHgyOQorI2RlZmluZSBTRVJJT19NSUNST1RPVUNICTB4MzAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NobS5oIGIvaW5jbHVkZS9saW51eC9zaG0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDExM2ExCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9zaG0uaApAQCAtMCwwICsxLDEwOCBAQAorI2lmbmRlZiBfTElOVVhfU0hNX0hfCisjZGVmaW5lIF9MSU5VWF9TSE1fSF8KKworI2luY2x1ZGUgPGxpbnV4L2lwYy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKworLyoKKyAqIFNITU1BWCwgU0hNTU5JIGFuZCBTSE1BTEwgYXJlIHVwcGVyIGxpbWl0cyBhcmUgZGVmYXVsdHMgd2hpY2ggY2FuCisgKiBiZSBpbmNyZWFzZWQgYnkgc3lzY3RsCisgKi8KKworI2RlZmluZSBTSE1NQVggMHgyMDAwMDAwCQkgLyogbWF4IHNoYXJlZCBzZWcgc2l6ZSAoYnl0ZXMpICovCisjZGVmaW5lIFNITU1JTiAxCQkJIC8qIG1pbiBzaGFyZWQgc2VnIHNpemUgKGJ5dGVzKSAqLworI2RlZmluZSBTSE1NTkkgNDA5NgkJCSAvKiBtYXggbnVtIG9mIHNlZ3Mgc3lzdGVtIHdpZGUgKi8KKyNkZWZpbmUgU0hNQUxMIChTSE1NQVgvUEFHRV9TSVpFKihTSE1NTkkvMTYpKSAvKiBtYXggc2htIHN5c3RlbSB3aWRlIChwYWdlcykgKi8KKyNkZWZpbmUgU0hNU0VHIFNITU1OSQkJCSAvKiBtYXggc2hhcmVkIHNlZ3MgcGVyIHByb2Nlc3MgKi8KKworI2luY2x1ZGUgPGFzbS9zaG1wYXJhbS5oPgorCisvKiBPYnNvbGV0ZSwgdXNlZCBvbmx5IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBhbmQgbGliYzUgY29tcGlsZXMgKi8KK3N0cnVjdCBzaG1pZF9kcyB7CisJc3RydWN0IGlwY19wZXJtCQlzaG1fcGVybTsJLyogb3BlcmF0aW9uIHBlcm1zICovCisJaW50CQkJc2htX3NlZ3N6OwkvKiBzaXplIG9mIHNlZ21lbnQgKGJ5dGVzKSAqLworCV9fa2VybmVsX3RpbWVfdAkJc2htX2F0aW1lOwkvKiBsYXN0IGF0dGFjaCB0aW1lICovCisJX19rZXJuZWxfdGltZV90CQlzaG1fZHRpbWU7CS8qIGxhc3QgZGV0YWNoIHRpbWUgKi8KKwlfX2tlcm5lbF90aW1lX3QJCXNobV9jdGltZTsJLyogbGFzdCBjaGFuZ2UgdGltZSAqLworCV9fa2VybmVsX2lwY19waWRfdAlzaG1fY3BpZDsJLyogcGlkIG9mIGNyZWF0b3IgKi8KKwlfX2tlcm5lbF9pcGNfcGlkX3QJc2htX2xwaWQ7CS8qIHBpZCBvZiBsYXN0IG9wZXJhdG9yICovCisJdW5zaWduZWQgc2hvcnQJCXNobV9uYXR0Y2g7CS8qIG5vLiBvZiBjdXJyZW50IGF0dGFjaGVzICovCisJdW5zaWduZWQgc2hvcnQgCQlzaG1fdW51c2VkOwkvKiBjb21wYXRpYmlsaXR5ICovCisJdm9pZCAJCQkqc2htX3VudXNlZDI7CS8qIGRpdHRvIC0gdXNlZCBieSBESVBDICovCisJdm9pZAkJCSpzaG1fdW51c2VkMzsJLyogdW51c2VkICovCit9OworCisvKiBJbmNsdWRlIHRoZSBkZWZpbml0aW9uIG9mIHNobWlkNjRfZHMgYW5kIHNobWluZm82NCAqLworI2luY2x1ZGUgPGFzbS9zaG1idWYuaD4KKworLyogcGVybWlzc2lvbiBmbGFnIGZvciBzaG1nZXQgKi8KKyNkZWZpbmUgU0hNX1IJCTA0MDAJLyogb3IgU19JUlVHTyBmcm9tIDxsaW51eC9zdGF0Lmg+ICovCisjZGVmaW5lIFNITV9XCQkwMjAwCS8qIG9yIFNfSVdVR08gZnJvbSA8bGludXgvc3RhdC5oPiAqLworCisvKiBtb2RlIGZvciBhdHRhY2ggKi8KKyNkZWZpbmUJU0hNX1JET05MWQkwMTAwMDAJLyogcmVhZC1vbmx5IGFjY2VzcyAqLworI2RlZmluZQlTSE1fUk5ECQkwMjAwMDAJLyogcm91bmQgYXR0YWNoIGFkZHJlc3MgdG8gU0hNTEJBIGJvdW5kYXJ5ICovCisjZGVmaW5lCVNITV9SRU1BUAkwNDAwMDAJLyogdGFrZS1vdmVyIHJlZ2lvbiBvbiBhdHRhY2ggKi8KKyNkZWZpbmUJU0hNX0VYRUMJMDEwMDAwMAkvKiBleGVjdXRpb24gYWNjZXNzICovCisKKy8qIHN1cGVyIHVzZXIgc2htY3RsIGNvbW1hbmRzICovCisjZGVmaW5lIFNITV9MT0NLIAkxMQorI2RlZmluZSBTSE1fVU5MT0NLIAkxMgorCisvKiBpcGNzIGN0bCBjb21tYW5kcyAqLworI2RlZmluZSBTSE1fU1RBVCAJMTMKKyNkZWZpbmUgU0hNX0lORk8gCTE0CisKKy8qIE9ic29sZXRlLCB1c2VkIG9ubHkgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5ICovCitzdHJ1Y3QJc2htaW5mbyB7CisJaW50IHNobW1heDsKKwlpbnQgc2htbWluOworCWludCBzaG1tbmk7CisJaW50IHNobXNlZzsKKwlpbnQgc2htYWxsOworfTsKKworc3RydWN0IHNobV9pbmZvIHsKKwlpbnQgdXNlZF9pZHM7CisJdW5zaWduZWQgbG9uZyBzaG1fdG90OwkvKiB0b3RhbCBhbGxvY2F0ZWQgc2htICovCisJdW5zaWduZWQgbG9uZyBzaG1fcnNzOwkvKiB0b3RhbCByZXNpZGVudCBzaG0gKi8KKwl1bnNpZ25lZCBsb25nIHNobV9zd3A7CS8qIHRvdGFsIHN3YXBwZWQgc2htICovCisJdW5zaWduZWQgbG9uZyBzd2FwX2F0dGVtcHRzOworCXVuc2lnbmVkIGxvbmcgc3dhcF9zdWNjZXNzZXM7Cit9OworCisjaWZkZWYgX19LRVJORUxfXworc3RydWN0IHNobWlkX2tlcm5lbCAvKiBwcml2YXRlIHRvIHRoZSBrZXJuZWwgKi8KK3sJCisJc3RydWN0IGtlcm5faXBjX3Blcm0Jc2htX3Blcm07CisJc3RydWN0IGZpbGUgKgkJc2htX2ZpbGU7CisJaW50CQkJaWQ7CisJdW5zaWduZWQgbG9uZwkJc2htX25hdHRjaDsKKwl1bnNpZ25lZCBsb25nCQlzaG1fc2Vnc3o7CisJdGltZV90CQkJc2htX2F0aW07CisJdGltZV90CQkJc2htX2R0aW07CisJdGltZV90CQkJc2htX2N0aW07CisJcGlkX3QJCQlzaG1fY3ByaWQ7CisJcGlkX3QJCQlzaG1fbHByaWQ7CisJc3RydWN0IHVzZXJfc3RydWN0CSptbG9ja191c2VyOworfTsKKworLyogc2htX21vZGUgdXBwZXIgYnl0ZSBmbGFncyAqLworI2RlZmluZQlTSE1fREVTVAkwMTAwMAkvKiBzZWdtZW50IHdpbGwgYmUgZGVzdHJveWVkIG9uIGxhc3QgZGV0YWNoICovCisjZGVmaW5lIFNITV9MT0NLRUQgICAgICAwMjAwMCAgIC8qIHNlZ21lbnQgd2lsbCBub3QgYmUgc3dhcHBlZCAqLworI2RlZmluZSBTSE1fSFVHRVRMQiAgICAgMDQwMDAgICAvKiBzZWdtZW50IHdpbGwgdXNlIGh1Z2UgVExCIHBhZ2VzICovCisKKyNpZmRlZiBDT05GSUdfU1lTVklQQworbG9uZyBkb19zaG1hdChpbnQgc2htaWQsIGNoYXIgX191c2VyICpzaG1hZGRyLCBpbnQgc2htZmxnLCB1bnNpZ25lZCBsb25nICphZGRyKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGxvbmcgZG9fc2htYXQoaW50IHNobWlkLCBjaGFyIF9fdXNlciAqc2htYWRkciwKKwkJCQlpbnQgc2htZmxnLCB1bnNpZ25lZCBsb25nICphZGRyKQoreworCXJldHVybiAtRU5PU1lTOworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfTElOVVhfU0hNX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmggYi9pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNlNTk4MgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvc2htZW1fZnMuaApAQCAtMCwwICsxLDM3IEBACisjaWZuZGVmIF9fU0hNRU1fRlNfSAorI2RlZmluZSBfX1NITUVNX0ZTX0gKKworI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tZW1wb2xpY3kuaD4KKworLyogaW5vZGUgaW4ta2VybmVsIGRhdGEgKi8KKworI2RlZmluZSBTSE1FTV9OUl9ESVJFQ1QgMTYKKworc3RydWN0IHNobWVtX2lub2RlX2luZm8geworCXNwaW5sb2NrX3QJCWxvY2s7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisJdW5zaWduZWQgbG9uZwkJYWxsb2NlZDsJLyogZGF0YSBwYWdlcyBhbGxvY2VkIHRvIGZpbGUgKi8KKwl1bnNpZ25lZCBsb25nCQlzd2FwcGVkOwkvKiBzdWJ0b3RhbCBhc3NpZ25lZCB0byBzd2FwICovCisJdW5zaWduZWQgbG9uZwkJbmV4dF9pbmRleDsJLyogaGlnaGVzdCBhbGxvY2VkIGluZGV4ICsgMSAqLworCXN0cnVjdCBzaGFyZWRfcG9saWN5CXBvbGljeTsJCS8qIE5VTUEgbWVtb3J5IGFsbG9jIHBvbGljeSAqLworCXN0cnVjdCBwYWdlCQkqaV9pbmRpcmVjdDsJLyogdG9wIGluZGlyZWN0IGJsb2NrcyBwYWdlICovCisJc3dwX2VudHJ5X3QJCWlfZGlyZWN0W1NITUVNX05SX0RJUkVDVF07IC8qIGZpcnN0IGJsb2NrcyAqLworCXN0cnVjdCBsaXN0X2hlYWQJc3dhcGxpc3Q7CS8qIGNoYWluIG9mIG1heWJlcyBvbiBzd2FwICovCisJc3RydWN0IGlub2RlCQl2ZnNfaW5vZGU7Cit9OworCitzdHJ1Y3Qgc2htZW1fc2JfaW5mbyB7CisJdW5zaWduZWQgbG9uZyBtYXhfYmxvY2tzOyAgIC8qIEhvdyBtYW55IGJsb2NrcyBhcmUgYWxsb3dlZCAqLworCXVuc2lnbmVkIGxvbmcgZnJlZV9ibG9ja3M7ICAvKiBIb3cgbWFueSBhcmUgbGVmdCBmb3IgYWxsb2NhdGlvbiAqLworCXVuc2lnbmVkIGxvbmcgbWF4X2lub2RlczsgICAvKiBIb3cgbWFueSBpbm9kZXMgYXJlIGFsbG93ZWQgKi8KKwl1bnNpZ25lZCBsb25nIGZyZWVfaW5vZGVzOyAgLyogSG93IG1hbnkgYXJlIGxlZnQgZm9yIGFsbG9jYXRpb24gKi8KKwlzcGlubG9ja190ICAgIHN0YXRfbG9jazsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNobWVtX2lub2RlX2luZm8gKlNITUVNX0koc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGlub2RlLCBzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbywgdmZzX2lub2RlKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NpZ25hbC5oIGIvaW5jbHVkZS9saW51eC9zaWduYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWM5N2FkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9zaWduYWwuaApAQCAtMCwwICsxLDIyNCBAQAorI2lmbmRlZiBfTElOVVhfU0lHTkFMX0gKKyNkZWZpbmUgX0xJTlVYX1NJR05BTF9ICisKKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxhc20vc2lnbmFsLmg+CisjaW5jbHVkZSA8YXNtL3NpZ2luZm8uaD4KKworI2lmZGVmIF9fS0VSTkVMX18KKworLyoKKyAqIFJlYWwgVGltZSBzaWduYWxzIG1heSBiZSBxdWV1ZWQuCisgKi8KKworc3RydWN0IHNpZ3F1ZXVlIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3BpbmxvY2tfdCAqbG9jazsKKwlpbnQgZmxhZ3M7CisJc2lnaW5mb190IGluZm87CisJc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyOworfTsKKworLyogZmxhZ3MgdmFsdWVzLiAqLworI2RlZmluZSBTSUdRVUVVRV9QUkVBTExPQwkxCisKK3N0cnVjdCBzaWdwZW5kaW5nIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc2lnc2V0X3Qgc2lnbmFsOworfTsKKworLyoKKyAqIERlZmluZSBzb21lIHByaW1pdGl2ZXMgdG8gbWFuaXB1bGF0ZSBzaWdzZXRfdC4KKyAqLworCisjaWZuZGVmIF9fSEFWRV9BUkNIX1NJR19CSVRPUFMKKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKworLyogV2UgZG9uJ3QgdXNlIDxsaW51eC9iaXRvcHMuaD4gZm9yIHRoZXNlIGJlY2F1c2UgdGhlcmUgaXMgbm8gbmVlZCB0bworICAgYmUgYXRvbWljLiAgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzaWdhZGRzZXQoc2lnc2V0X3QgKnNldCwgaW50IF9zaWcpCit7CisJdW5zaWduZWQgbG9uZyBzaWcgPSBfc2lnIC0gMTsKKwlpZiAoX05TSUdfV09SRFMgPT0gMSkKKwkJc2V0LT5zaWdbMF0gfD0gMVVMIDw8IHNpZzsKKwllbHNlCisJCXNldC0+c2lnW3NpZyAvIF9OU0lHX0JQV10gfD0gMVVMIDw8IChzaWcgJSBfTlNJR19CUFcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2lnZGVsc2V0KHNpZ3NldF90ICpzZXQsIGludCBfc2lnKQoreworCXVuc2lnbmVkIGxvbmcgc2lnID0gX3NpZyAtIDE7CisJaWYgKF9OU0lHX1dPUkRTID09IDEpCisJCXNldC0+c2lnWzBdICY9IH4oMVVMIDw8IHNpZyk7CisJZWxzZQorCQlzZXQtPnNpZ1tzaWcgLyBfTlNJR19CUFddICY9IH4oMVVMIDw8IChzaWcgJSBfTlNJR19CUFcpKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2lnaXNtZW1iZXIoc2lnc2V0X3QgKnNldCwgaW50IF9zaWcpCit7CisJdW5zaWduZWQgbG9uZyBzaWcgPSBfc2lnIC0gMTsKKwlpZiAoX05TSUdfV09SRFMgPT0gMSkKKwkJcmV0dXJuIDEgJiAoc2V0LT5zaWdbMF0gPj4gc2lnKTsKKwllbHNlCisJCXJldHVybiAxICYgKHNldC0+c2lnW3NpZyAvIF9OU0lHX0JQV10gPj4gKHNpZyAlIF9OU0lHX0JQVykpOworfQorCitzdGF0aWMgaW5saW5lIGludCBzaWdmaW5kaW53b3JkKHVuc2lnbmVkIGxvbmcgd29yZCkKK3sKKwlyZXR1cm4gZmZ6KH53b3JkKTsKK30KKworI2VuZGlmIC8qIF9fSEFWRV9BUkNIX1NJR19CSVRPUFMgKi8KKworI2RlZmluZSBzaWdtYXNrKHNpZykJKDFVTCA8PCAoKHNpZykgLSAxKSkKKworI2lmbmRlZiBfX0hBVkVfQVJDSF9TSUdfU0VUT1BTCisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisKKyNkZWZpbmUgX1NJR19TRVRfQklOT1AobmFtZSwgb3ApCQkJCQlcCitzdGF0aWMgaW5saW5lIHZvaWQgbmFtZShzaWdzZXRfdCAqciwgY29uc3Qgc2lnc2V0X3QgKmEsIGNvbnN0IHNpZ3NldF90ICpiKSBcCit7CQkJCQkJCQkJXAorCWV4dGVybiB2b2lkIF9OU0lHX1dPUkRTX2lzX3Vuc3VwcG9ydGVkX3NpemUodm9pZCk7CQlcCisJdW5zaWduZWQgbG9uZyBhMCwgYTEsIGEyLCBhMywgYjAsIGIxLCBiMiwgYjM7CQkJXAorCQkJCQkJCQkJXAorCXN3aXRjaCAoX05TSUdfV09SRFMpIHsJCQkJCQlcCisJICAgIGNhc2UgNDoJCQkJCQkJXAorCQlhMyA9IGEtPnNpZ1szXTsgYTIgPSBhLT5zaWdbMl07CQkJCVwKKwkJYjMgPSBiLT5zaWdbM107IGIyID0gYi0+c2lnWzJdOwkJCQlcCisJCXItPnNpZ1szXSA9IG9wKGEzLCBiMyk7CQkJCQlcCisJCXItPnNpZ1syXSA9IG9wKGEyLCBiMik7CQkJCQlcCisJICAgIGNhc2UgMjoJCQkJCQkJXAorCQlhMSA9IGEtPnNpZ1sxXTsgYjEgPSBiLT5zaWdbMV07CQkJCVwKKwkJci0+c2lnWzFdID0gb3AoYTEsIGIxKTsJCQkJCVwKKwkgICAgY2FzZSAxOgkJCQkJCQlcCisJCWEwID0gYS0+c2lnWzBdOyBiMCA9IGItPnNpZ1swXTsJCQkJXAorCQlyLT5zaWdbMF0gPSBvcChhMCwgYjApOwkJCQkJXAorCQlicmVhazsJCQkJCQkJXAorCSAgICBkZWZhdWx0OgkJCQkJCQlcCisJCV9OU0lHX1dPUkRTX2lzX3Vuc3VwcG9ydGVkX3NpemUoKTsJCQlcCisJfQkJCQkJCQkJXAorfQorCisjZGVmaW5lIF9zaWdfb3IoeCx5KQkoKHgpIHwgKHkpKQorX1NJR19TRVRfQklOT1Aoc2lnb3JzZXRzLCBfc2lnX29yKQorCisjZGVmaW5lIF9zaWdfYW5kKHgseSkJKCh4KSAmICh5KSkKK19TSUdfU0VUX0JJTk9QKHNpZ2FuZHNldHMsIF9zaWdfYW5kKQorCisjZGVmaW5lIF9zaWdfbmFuZCh4LHkpCSgoeCkgJiB+KHkpKQorX1NJR19TRVRfQklOT1Aoc2lnbmFuZHNldHMsIF9zaWdfbmFuZCkKKworI3VuZGVmIF9TSUdfU0VUX0JJTk9QCisjdW5kZWYgX3NpZ19vcgorI3VuZGVmIF9zaWdfYW5kCisjdW5kZWYgX3NpZ19uYW5kCisKKyNkZWZpbmUgX1NJR19TRVRfT1AobmFtZSwgb3ApCQkJCQkJXAorc3RhdGljIGlubGluZSB2b2lkIG5hbWUoc2lnc2V0X3QgKnNldCkJCQkJCVwKK3sJCQkJCQkJCQlcCisJZXh0ZXJuIHZvaWQgX05TSUdfV09SRFNfaXNfdW5zdXBwb3J0ZWRfc2l6ZSh2b2lkKTsJCVwKKwkJCQkJCQkJCVwKKwlzd2l0Y2ggKF9OU0lHX1dPUkRTKSB7CQkJCQkJXAorCSAgICBjYXNlIDQ6IHNldC0+c2lnWzNdID0gb3Aoc2V0LT5zaWdbM10pOwkJCVwKKwkJICAgIHNldC0+c2lnWzJdID0gb3Aoc2V0LT5zaWdbMl0pOwkJCVwKKwkgICAgY2FzZSAyOiBzZXQtPnNpZ1sxXSA9IG9wKHNldC0+c2lnWzFdKTsJCQlcCisJICAgIGNhc2UgMTogc2V0LT5zaWdbMF0gPSBvcChzZXQtPnNpZ1swXSk7CQkJXAorCQkgICAgYnJlYWs7CQkJCQkJXAorCSAgICBkZWZhdWx0OgkJCQkJCQlcCisJCV9OU0lHX1dPUkRTX2lzX3Vuc3VwcG9ydGVkX3NpemUoKTsJCQlcCisJfQkJCQkJCQkJXAorfQorCisjZGVmaW5lIF9zaWdfbm90KHgpCSh+KHgpKQorX1NJR19TRVRfT1Aoc2lnbm90c2V0LCBfc2lnX25vdCkKKworI3VuZGVmIF9TSUdfU0VUX09QCisjdW5kZWYgX3NpZ19ub3QKKworc3RhdGljIGlubGluZSB2b2lkIHNpZ2VtcHR5c2V0KHNpZ3NldF90ICpzZXQpCit7CisJc3dpdGNoIChfTlNJR19XT1JEUykgeworCWRlZmF1bHQ6CisJCW1lbXNldChzZXQsIDAsIHNpemVvZihzaWdzZXRfdCkpOworCQlicmVhazsKKwljYXNlIDI6IHNldC0+c2lnWzFdID0gMDsKKwljYXNlIDE6CXNldC0+c2lnWzBdID0gMDsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2lnZmlsbHNldChzaWdzZXRfdCAqc2V0KQoreworCXN3aXRjaCAoX05TSUdfV09SRFMpIHsKKwlkZWZhdWx0OgorCQltZW1zZXQoc2V0LCAtMSwgc2l6ZW9mKHNpZ3NldF90KSk7CisJCWJyZWFrOworCWNhc2UgMjogc2V0LT5zaWdbMV0gPSAtMTsKKwljYXNlIDE6CXNldC0+c2lnWzBdID0gLTE7CisJCWJyZWFrOworCX0KK30KKworLyogU29tZSBleHRlbnNpb25zIGZvciBtYW5pcHVsYXRpbmcgdGhlIGxvdyAzMiBzaWduYWxzIGluIHBhcnRpY3VsYXIuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgc2lnYWRkc2V0bWFzayhzaWdzZXRfdCAqc2V0LCB1bnNpZ25lZCBsb25nIG1hc2spCit7CisJc2V0LT5zaWdbMF0gfD0gbWFzazsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNpZ2RlbHNldG1hc2soc2lnc2V0X3QgKnNldCwgdW5zaWduZWQgbG9uZyBtYXNrKQoreworCXNldC0+c2lnWzBdICY9IH5tYXNrOworfQorCitzdGF0aWMgaW5saW5lIGludCBzaWd0ZXN0c2V0bWFzayhzaWdzZXRfdCAqc2V0LCB1bnNpZ25lZCBsb25nIG1hc2spCit7CisJcmV0dXJuIChzZXQtPnNpZ1swXSAmIG1hc2spICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzaWdpbml0c2V0KHNpZ3NldF90ICpzZXQsIHVuc2lnbmVkIGxvbmcgbWFzaykKK3sKKwlzZXQtPnNpZ1swXSA9IG1hc2s7CisJc3dpdGNoIChfTlNJR19XT1JEUykgeworCWRlZmF1bHQ6CisJCW1lbXNldCgmc2V0LT5zaWdbMV0sIDAsIHNpemVvZihsb25nKSooX05TSUdfV09SRFMtMSkpOworCQlicmVhazsKKwljYXNlIDI6IHNldC0+c2lnWzFdID0gMDsKKwljYXNlIDE6IDsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzaWdpbml0c2V0aW52KHNpZ3NldF90ICpzZXQsIHVuc2lnbmVkIGxvbmcgbWFzaykKK3sKKwlzZXQtPnNpZ1swXSA9IH5tYXNrOworCXN3aXRjaCAoX05TSUdfV09SRFMpIHsKKwlkZWZhdWx0OgorCQltZW1zZXQoJnNldC0+c2lnWzFdLCAtMSwgc2l6ZW9mKGxvbmcpKihfTlNJR19XT1JEUy0xKSk7CisJCWJyZWFrOworCWNhc2UgMjogc2V0LT5zaWdbMV0gPSAtMTsKKwljYXNlIDE6IDsKKwl9Cit9CisKKyNlbmRpZiAvKiBfX0hBVkVfQVJDSF9TSUdfU0VUT1BTICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3NpZ3BlbmRpbmcoc3RydWN0IHNpZ3BlbmRpbmcgKnNpZykKK3sKKwlzaWdlbXB0eXNldCgmc2lnLT5zaWduYWwpOworCUlOSVRfTElTVF9IRUFEKCZzaWctPmxpc3QpOworfQorCitleHRlcm4gaW50IGdyb3VwX3NlbmRfc2lnX2luZm8oaW50IHNpZywgc3RydWN0IHNpZ2luZm8gKmluZm8sIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7CitleHRlcm4gaW50IF9fZ3JvdXBfc2VuZF9zaWdfaW5mbyhpbnQsIHN0cnVjdCBzaWdpbmZvICosIHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKK2V4dGVybiBsb25nIGRvX3NpZ3BlbmRpbmcodm9pZCBfX3VzZXIgKiwgdW5zaWduZWQgbG9uZyk7CitleHRlcm4gaW50IHNpZ3Byb2NtYXNrKGludCwgc2lnc2V0X3QgKiwgc2lnc2V0X3QgKik7CisKKyNpZm5kZWYgSEFWRV9BUkNIX0dFVF9TSUdOQUxfVE9fREVMSVZFUgorc3RydWN0IHB0X3JlZ3M7CitleHRlcm4gaW50IGdldF9zaWduYWxfdG9fZGVsaXZlcihzaWdpbmZvX3QgKmluZm8sIHN0cnVjdCBrX3NpZ2FjdGlvbiAqcmV0dXJuX2thLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgdm9pZCAqY29va2llKTsKKyNlbmRpZgorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX0xJTlVYX1NJR05BTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTM1Nzk3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaApAQCAtMCwwICsxLDEyNTMgQEAKKy8qCisgKglEZWZpbml0aW9ucyBmb3IgdGhlICdzdHJ1Y3Qgc2tfYnVmZicgbWVtb3J5IGhhbmRsZXJzLgorICoKKyAqCUF1dGhvcnM6CisgKgkJQWxhbiBDb3gsIDxndzRwdHNAZ3c0cHRzLmFtcHIub3JnPgorICoJCUZsb3JpYW4gTGEgUm9jaGUsIDxyenNmbEByei51bmktc2IuZGU+CisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICoJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9MSU5VWF9TS0JVRkZfSAorI2RlZmluZSBfTElOVVhfU0tCVUZGX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CisKKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvbmV0Lmg+CisjaW5jbHVkZSA8bmV0L2NoZWNrc3VtLmg+CisKKyNkZWZpbmUgSEFWRV9BTExPQ19TS0IJCS8qIEZvciB0aGUgZHJpdmVycyB0byBrbm93ICovCisjZGVmaW5lIEhBVkVfQUxJR05BQkxFX1NLQgkvKiBEaXR0byA4KQkJICAgKi8KKyNkZWZpbmUgU0xBQl9TS0IgCQkvKiBTbGFiaWZpZWQgc2tidWZmcyAJICAgKi8KKworI2RlZmluZSBDSEVDS1NVTV9OT05FIDAKKyNkZWZpbmUgQ0hFQ0tTVU1fSFcgMQorI2RlZmluZSBDSEVDS1NVTV9VTk5FQ0VTU0FSWSAyCisKKyNkZWZpbmUgU0tCX0RBVEFfQUxJR04oWCkJKCgoWCkgKyAoU01QX0NBQ0hFX0JZVEVTIC0gMSkpICYgXAorCQkJCSB+KFNNUF9DQUNIRV9CWVRFUyAtIDEpKQorI2RlZmluZSBTS0JfTUFYX09SREVSKFgsIE9SREVSKQkoKChQQUdFX1NJWkUgPDwgKE9SREVSKSkgLSAoWCkgLSBcCisJCQkJICBzaXplb2Yoc3RydWN0IHNrYl9zaGFyZWRfaW5mbykpICYgXAorCQkJCSAgfihTTVBfQ0FDSEVfQllURVMgLSAxKSkKKyNkZWZpbmUgU0tCX01BWF9IRUFEKFgpCQkoU0tCX01BWF9PUkRFUigoWCksIDApKQorI2RlZmluZSBTS0JfTUFYX0FMTE9DCQkoU0tCX01BWF9PUkRFUigwLCAyKSkKKworLyogQS4gQ2hlY2tzdW1taW5nIG9mIHJlY2VpdmVkIHBhY2tldHMgYnkgZGV2aWNlLgorICoKKyAqCU5PTkU6IGRldmljZSBmYWlsZWQgdG8gY2hlY2tzdW0gdGhpcyBwYWNrZXQuCisgKgkJc2tiLT5jc3VtIGlzIHVuZGVmaW5lZC4KKyAqCisgKglVTk5FQ0VTU0FSWTogZGV2aWNlIHBhcnNlZCBwYWNrZXQgYW5kIHdvdWxkYmUgdmVyaWZpZWQgY2hlY2tzdW0uCisgKgkJc2tiLT5jc3VtIGlzIHVuZGVmaW5lZC4KKyAqCSAgICAgIEl0IGlzIGJhZCBvcHRpb24sIGJ1dCwgdW5mb3J0dW5hdGVseSwgbWFueSBvZiB2ZW5kb3JzIGRvIHRoaXMuCisgKgkgICAgICBBcHBhcmVudGx5IHdpdGggc2VjcmV0IGdvYWwgdG8gc2VsbCB5b3UgbmV3IGRldmljZSwgd2hlbiB5b3UKKyAqCSAgICAgIHdpbGwgYWRkIG5ldyBwcm90b2NvbCB0byB5b3VyIGhvc3QuIEYuZS4gSVB2Ni4gOCkKKyAqCisgKglIVzogdGhlIG1vc3QgZ2VuZXJpYyB3YXkuIERldmljZSBzdXBwbGllZCBjaGVja3N1bSBvZiBfYWxsXworICoJICAgIHRoZSBwYWNrZXQgYXMgc2VlbiBieSBuZXRpZl9yeCBpbiBza2ItPmNzdW0uCisgKgkgICAgTk9URTogRXZlbiBpZiBkZXZpY2Ugc3VwcG9ydHMgb25seSBzb21lIHByb3RvY29scywgYnV0CisgKgkgICAgaXMgYWJsZSB0byBwcm9kdWNlIHNvbWUgc2tiLT5jc3VtLCBpdCBNVVNUIHVzZSBIVywKKyAqCSAgICBub3QgVU5ORUNFU1NBUlkuCisgKgorICogQi4gQ2hlY2tzdW1taW5nIG9uIG91dHB1dC4KKyAqCisgKglOT05FOiBza2IgaXMgY2hlY2tzdW1tZWQgYnkgcHJvdG9jb2wgb3IgY3N1bSBpcyBub3QgcmVxdWlyZWQuCisgKgorICoJSFc6IGRldmljZSBpcyByZXF1aXJlZCB0byBjc3VtIHBhY2tldCBhcyBzZWVuIGJ5IGhhcmRfc3RhcnRfeG1pdAorICoJZnJvbSBza2ItPmgucmF3IHRvIHRoZSBlbmQgYW5kIHRvIHJlY29yZCB0aGUgY2hlY2tzdW0KKyAqCWF0IHNrYi0+aC5yYXcrc2tiLT5jc3VtLgorICoKKyAqCURldmljZSBtdXN0IHNob3cgaXRzIGNhcGFiaWxpdGllcyBpbiBkZXYtPmZlYXR1cmVzLCBzZXQKKyAqCWF0IGRldmljZSBzZXR1cCB0aW1lLgorICoJTkVUSUZfRl9IV19DU1VNCS0gaXQgaXMgY2xldmVyIGRldmljZSwgaXQgaXMgYWJsZSB0byBjaGVja3N1bQorICoJCQkgIGV2ZXJ5dGhpbmcuCisgKglORVRJRl9GX05PX0NTVU0gLSBsb29wYmFjayBvciByZWxpYWJsZSBzaW5nbGUgaG9wIG1lZGlhLgorICoJTkVUSUZfRl9JUF9DU1VNIC0gZGV2aWNlIGlzIGR1bWIuIEl0IGlzIGFibGUgdG8gY3N1bSBvbmx5CisgKgkJCSAgVENQL1VEUCBvdmVyIElQdjQuIFNpZ2guIFZlbmRvcnMgbGlrZSB0aGlzCisgKgkJCSAgd2F5IGJ5IGFuIHVua25vd24gcmVhc29uLiBUaG91Z2gsIHNlZSBjb21tZW50IGFib3ZlCisgKgkJCSAgYWJvdXQgQ0hFQ0tTVU1fVU5ORUNFU1NBUlkuIDgpCisgKgorICoJQW55IHF1ZXN0aW9ucz8gTm8gcXVlc3Rpb25zLCBnb29kLiAJCS0tQU5LCisgKi8KKworI2lmZGVmIF9faTM4Nl9fCisjZGVmaW5lIE5FVF9DQUxMRVIoYXJnKSAoKigoKHZvaWQgKiopJmFyZykgLSAxKSkKKyNlbHNlCisjZGVmaW5lIE5FVF9DQUxMRVIoYXJnKSBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkKKyNlbmRpZgorCitzdHJ1Y3QgbmV0X2RldmljZTsKKworI2lmZGVmIENPTkZJR19ORVRGSUxURVIKK3N0cnVjdCBuZl9jb25udHJhY2sgeworCWF0b21pY190IHVzZTsKKwl2b2lkICgqZGVzdHJveSkoc3RydWN0IG5mX2Nvbm50cmFjayAqKTsKK307CisKKyNpZmRlZiBDT05GSUdfQlJJREdFX05FVEZJTFRFUgorc3RydWN0IG5mX2JyaWRnZV9pbmZvIHsKKwlhdG9taWNfdCB1c2U7CisJc3RydWN0IG5ldF9kZXZpY2UgKnBoeXNpbmRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqcGh5c291dGRldjsKKyNpZiBkZWZpbmVkKENPTkZJR19WTEFOXzgwMjFRKSB8fCBkZWZpbmVkKENPTkZJR19WTEFOXzgwMjFRX01PRFVMRSkKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0b3V0ZGV2OworI2VuZGlmCisJdW5zaWduZWQgaW50IG1hc2s7CisJdW5zaWduZWQgbG9uZyBkYXRhWzMyIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpXTsKK307CisjZW5kaWYKKworI2VuZGlmCisKK3N0cnVjdCBza19idWZmX2hlYWQgeworCS8qIFRoZXNlIHR3byBtZW1iZXJzIG11c3QgYmUgZmlyc3QuICovCisJc3RydWN0IHNrX2J1ZmYJKm5leHQ7CisJc3RydWN0IHNrX2J1ZmYJKnByZXY7CisKKwlfX3UzMgkJcWxlbjsKKwlzcGlubG9ja190CWxvY2s7Cit9OworCitzdHJ1Y3Qgc2tfYnVmZjsKKworLyogVG8gYWxsb3cgNjRLIGZyYW1lIHRvIGJlIHBhY2tlZCBhcyBzaW5nbGUgc2tiIHdpdGhvdXQgZnJhZ19saXN0ICovCisjZGVmaW5lIE1BWF9TS0JfRlJBR1MgKDY1NTM2L1BBR0VfU0laRSArIDIpCisKK3R5cGVkZWYgc3RydWN0IHNrYl9mcmFnX3N0cnVjdCBza2JfZnJhZ190OworCitzdHJ1Y3Qgc2tiX2ZyYWdfc3RydWN0IHsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlfX3UxNiBwYWdlX29mZnNldDsKKwlfX3UxNiBzaXplOworfTsKKworLyogVGhpcyBkYXRhIGlzIGludmFyaWFudCBhY3Jvc3MgY2xvbmVzIGFuZCBsaXZlcyBhdAorICogdGhlIGVuZCBvZiB0aGUgaGVhZGVyIGRhdGEsIGllLiBhdCBza2ItPmVuZC4KKyAqLworc3RydWN0IHNrYl9zaGFyZWRfaW5mbyB7CisJYXRvbWljX3QJZGF0YXJlZjsKKwl1bnNpZ25lZCBpbnQJbnJfZnJhZ3M7CisJdW5zaWduZWQgc2hvcnQJdHNvX3NpemU7CisJdW5zaWduZWQgc2hvcnQJdHNvX3NlZ3M7CisJc3RydWN0IHNrX2J1ZmYJKmZyYWdfbGlzdDsKKwlza2JfZnJhZ190CWZyYWdzW01BWF9TS0JfRlJBR1NdOworfTsKKworLyogV2UgZGl2aWRlIGRhdGFyZWYgaW50byB0d28gaGFsdmVzLiAgVGhlIGhpZ2hlciAxNiBiaXRzIGhvbGQgcmVmZXJlbmNlcworICogdG8gdGhlIHBheWxvYWQgcGFydCBvZiBza2ItPmRhdGEuICBUaGUgbG93ZXIgMTYgYml0cyBob2xkIHJlZmVyZW5jZXMgdG8KKyAqIHRoZSBlbnRpcmUgc2tiLT5kYXRhLiAgSXQgaXMgdXAgdG8gdGhlIHVzZXJzIG9mIHRoZSBza2IgdG8gYWdyZWUgb24KKyAqIHdoZXJlIHRoZSBwYXlsb2FkIHN0YXJ0cy4KKyAqCisgKiBBbGwgdXNlcnMgbXVzdCBvYmV5IHRoZSBydWxlIHRoYXQgdGhlIHNrYi0+ZGF0YSByZWZlcmVuY2UgY291bnQgbXVzdCBiZQorICogZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBwYXlsb2FkIHJlZmVyZW5jZSBjb3VudC4KKyAqCisgKiBIb2xkaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBwYXlsb2FkIHBhcnQgbWVhbnMgdGhhdCB0aGUgdXNlciBkb2VzIG5vdAorICogY2FyZSBhYm91dCBtb2RpZmljYXRpb25zIHRvIHRoZSBoZWFkZXIgcGFydCBvZiBza2ItPmRhdGEuCisgKi8KKyNkZWZpbmUgU0tCX0RBVEFSRUZfU0hJRlQgMTYKKyNkZWZpbmUgU0tCX0RBVEFSRUZfTUFTSyAoKDEgPDwgU0tCX0RBVEFSRUZfU0hJRlQpIC0gMSkKKworLyoqIAorICoJc3RydWN0IHNrX2J1ZmYgLSBzb2NrZXQgYnVmZmVyCisgKglAbmV4dDogTmV4dCBidWZmZXIgaW4gbGlzdAorICoJQHByZXY6IFByZXZpb3VzIGJ1ZmZlciBpbiBsaXN0CisgKglAbGlzdDogTGlzdCB3ZSBhcmUgb24KKyAqCUBzazogU29ja2V0IHdlIGFyZSBvd25lZCBieQorICoJQHN0YW1wOiBUaW1lIHdlIGFycml2ZWQKKyAqCUBkZXY6IERldmljZSB3ZSBhcnJpdmVkIG9uL2FyZSBsZWF2aW5nIGJ5CisgKglAaW5wdXRfZGV2OiBEZXZpY2Ugd2UgYXJyaXZlZCBvbgorICogICAgICBAcmVhbF9kZXY6IFRoZSByZWFsIGRldmljZSB3ZSBhcmUgdXNpbmcKKyAqCUBoOiBUcmFuc3BvcnQgbGF5ZXIgaGVhZGVyCisgKglAbmg6IE5ldHdvcmsgbGF5ZXIgaGVhZGVyCisgKglAbWFjOiBMaW5rIGxheWVyIGhlYWRlcgorICoJQGRzdDogRklYTUU6IERlc2NyaWJlIHRoaXMgZmllbGQKKyAqCUBjYjogQ29udHJvbCBidWZmZXIuIEZyZWUgZm9yIHVzZSBieSBldmVyeSBsYXllci4gUHV0IHByaXZhdGUgdmFycyBoZXJlCisgKglAbGVuOiBMZW5ndGggb2YgYWN0dWFsIGRhdGEKKyAqCUBkYXRhX2xlbjogRGF0YSBsZW5ndGgKKyAqCUBtYWNfbGVuOiBMZW5ndGggb2YgbGluayBsYXllciBoZWFkZXIKKyAqCUBjc3VtOiBDaGVja3N1bQorICoJQF9fdW51c2VkOiBEZWFkIGZpZWxkLCBtYXkgYmUgcmV1c2VkCisgKglAY2xvbmVkOiBIZWFkIG1heSBiZSBjbG9uZWQgKGNoZWNrIHJlZmNudCB0byBiZSBzdXJlKQorICoJQG5vaGRyOiBQYXlsb2FkIHJlZmVyZW5jZSBvbmx5LCBtdXN0IG5vdCBtb2RpZnkgaGVhZGVyCisgKglAcGt0X3R5cGU6IFBhY2tldCBjbGFzcworICoJQGlwX3N1bW1lZDogRHJpdmVyIGZlZCB1cyBhbiBJUCBjaGVja3N1bQorICoJQHByaW9yaXR5OiBQYWNrZXQgcXVldWVpbmcgcHJpb3JpdHkKKyAqCUB1c2VyczogVXNlciBjb3VudCAtIHNlZSB7ZGF0YWdyYW0sdGNwfS5jCisgKglAcHJvdG9jb2w6IFBhY2tldCBwcm90b2NvbCBmcm9tIGRyaXZlcgorICoJQHNlY3VyaXR5OiBTZWN1cml0eSBsZXZlbCBvZiBwYWNrZXQKKyAqCUB0cnVlc2l6ZTogQnVmZmVyIHNpemUgCisgKglAaGVhZDogSGVhZCBvZiBidWZmZXIKKyAqCUBkYXRhOiBEYXRhIGhlYWQgcG9pbnRlcgorICoJQHRhaWw6IFRhaWwgcG9pbnRlcgorICoJQGVuZDogRW5kIHBvaW50ZXIKKyAqCUBkZXN0cnVjdG9yOiBEZXN0cnVjdCBmdW5jdGlvbgorICoJQG5mbWFyazogQ2FuIGJlIHVzZWQgZm9yIGNvbW11bmljYXRpb24gYmV0d2VlbiBob29rcworICoJQG5mY2FjaGU6IENhY2hlIGluZm8KKyAqCUBuZmN0OiBBc3NvY2lhdGVkIGNvbm5lY3Rpb24sIGlmIGFueQorICoJQG5mY3RpbmZvOiBSZWxhdGlvbnNoaXAgb2YgdGhpcyBza2IgdG8gdGhlIGNvbm5lY3Rpb24KKyAqCUBuZl9kZWJ1ZzogTmV0ZmlsdGVyIGRlYnVnZ2luZworICoJQG5mX2JyaWRnZTogU2F2ZWQgZGF0YSBhYm91dCBhIGJyaWRnZWQgZnJhbWUgLSBzZWUgYnJfbmV0ZmlsdGVyLmMKKyAqICAgICAgQHByaXZhdGU6IERhdGEgd2hpY2ggaXMgcHJpdmF0ZSB0byB0aGUgSElQUEkgaW1wbGVtZW50YXRpb24KKyAqCUB0Y19pbmRleDogVHJhZmZpYyBjb250cm9sIGluZGV4CisgKglAdGNfdmVyZDogdHJhZmZpYyBjb250cm9sIHZlcmRpY3QKKyAqCUB0Y19jbGFzc2lkOiB0cmFmZmljIGNvbnRyb2wgY2xhc3NpZAorICovCisKK3N0cnVjdCBza19idWZmIHsKKwkvKiBUaGVzZSB0d28gbWVtYmVycyBtdXN0IGJlIGZpcnN0LiAqLworCXN0cnVjdCBza19idWZmCQkqbmV4dDsKKwlzdHJ1Y3Qgc2tfYnVmZgkJKnByZXY7CisKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkCSpsaXN0OworCXN0cnVjdCBzb2NrCQkqc2s7CisJc3RydWN0IHRpbWV2YWwJCXN0YW1wOworCXN0cnVjdCBuZXRfZGV2aWNlCSpkZXY7CisJc3RydWN0IG5ldF9kZXZpY2UJKmlucHV0X2RldjsKKwlzdHJ1Y3QgbmV0X2RldmljZQkqcmVhbF9kZXY7CisKKwl1bmlvbiB7CisJCXN0cnVjdCB0Y3BoZHIJKnRoOworCQlzdHJ1Y3QgdWRwaGRyCSp1aDsKKwkJc3RydWN0IGljbXBoZHIJKmljbXBoOworCQlzdHJ1Y3QgaWdtcGhkcgkqaWdtcGg7CisJCXN0cnVjdCBpcGhkcgkqaXBpcGg7CisJCXN0cnVjdCBpcHY2aGRyCSppcHY2aDsKKwkJdW5zaWduZWQgY2hhcgkqcmF3OworCX0gaDsKKworCXVuaW9uIHsKKwkJc3RydWN0IGlwaGRyCSppcGg7CisJCXN0cnVjdCBpcHY2aGRyCSppcHY2aDsKKwkJc3RydWN0IGFycGhkcgkqYXJwaDsKKwkJdW5zaWduZWQgY2hhcgkqcmF3OworCX0gbmg7CisKKwl1bmlvbiB7CisJICAJdW5zaWduZWQgY2hhciAJKnJhdzsKKwl9IG1hYzsKKworCXN0cnVjdCAgZHN0X2VudHJ5CSpkc3Q7CisJc3RydWN0CXNlY19wYXRoCSpzcDsKKworCS8qCisJICogVGhpcyBpcyB0aGUgY29udHJvbCBidWZmZXIuIEl0IGlzIGZyZWUgdG8gdXNlIGZvciBldmVyeQorCSAqIGxheWVyLiBQbGVhc2UgcHV0IHlvdXIgcHJpdmF0ZSB2YXJpYWJsZXMgdGhlcmUuIElmIHlvdQorCSAqIHdhbnQgdG8ga2VlcCB0aGVtIGFjcm9zcyBsYXllcnMgeW91IGhhdmUgdG8gZG8gYSBza2JfY2xvbmUoKQorCSAqIGZpcnN0LiBUaGlzIGlzIG93bmVkIGJ5IHdob2V2ZXIgaGFzIHRoZSBza2IgcXVldWVkIEFUTS4KKwkgKi8KKwljaGFyCQkJY2JbNDBdOworCisJdW5zaWduZWQgaW50CQlsZW4sCisJCQkJZGF0YV9sZW4sCisJCQkJbWFjX2xlbiwKKwkJCQljc3VtOworCXVuc2lnbmVkIGNoYXIJCWxvY2FsX2RmLAorCQkJCWNsb25lZDoxLAorCQkJCW5vaGRyOjEsCisJCQkJcGt0X3R5cGUsCisJCQkJaXBfc3VtbWVkOworCV9fdTMyCQkJcHJpb3JpdHk7CisJdW5zaWduZWQgc2hvcnQJCXByb3RvY29sLAorCQkJCXNlY3VyaXR5OworCisJdm9pZAkJCSgqZGVzdHJ1Y3Rvcikoc3RydWN0IHNrX2J1ZmYgKnNrYik7CisjaWZkZWYgQ09ORklHX05FVEZJTFRFUgorICAgICAgICB1bnNpZ25lZCBsb25nCQluZm1hcms7CisJX191MzIJCQluZmNhY2hlOworCV9fdTMyCQkJbmZjdGluZm87CisJc3RydWN0IG5mX2Nvbm50cmFjawkqbmZjdDsKKyNpZmRlZiBDT05GSUdfTkVURklMVEVSX0RFQlVHCisgICAgICAgIHVuc2lnbmVkIGludAkJbmZfZGVidWc7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQlJJREdFX05FVEZJTFRFUgorCXN0cnVjdCBuZl9icmlkZ2VfaW5mbwkqbmZfYnJpZGdlOworI2VuZGlmCisjZW5kaWYgLyogQ09ORklHX05FVEZJTFRFUiAqLworI2lmIGRlZmluZWQoQ09ORklHX0hJUFBJKQorCXVuaW9uIHsKKwkJX191MzIJCWlmaWVsZDsKKwl9IHByaXZhdGU7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfTkVUX1NDSEVECisgICAgICAgX191MzIJCQl0Y19pbmRleDsgICAgICAgIC8qIHRyYWZmaWMgY29udHJvbCBpbmRleCAqLworI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVAorCV9fdTMyICAgICAgICAgICB0Y192ZXJkOyAgICAgICAgICAgICAgIC8qIHRyYWZmaWMgY29udHJvbCB2ZXJkaWN0ICovCisJX191MzIgICAgICAgICAgIHRjX2NsYXNzaWQ7ICAgICAgICAgICAgLyogdHJhZmZpYyBjb250cm9sIGNsYXNzaWQgKi8KKyNlbmRpZgorCisjZW5kaWYKKworCisJLyogVGhlc2UgZWxlbWVudHMgbXVzdCBiZSBhdCB0aGUgZW5kLCBzZWUgYWxsb2Nfc2tiKCkgZm9yIGRldGFpbHMuICAqLworCXVuc2lnbmVkIGludAkJdHJ1ZXNpemU7CisJYXRvbWljX3QJCXVzZXJzOworCXVuc2lnbmVkIGNoYXIJCSpoZWFkLAorCQkJCSpkYXRhLAorCQkJCSp0YWlsLAorCQkJCSplbmQ7Cit9OworCisjaWZkZWYgX19LRVJORUxfXworLyoKKyAqCUhhbmRsaW5nIHJvdXRpbmVzIGFyZSBvbmx5IG9mIGludGVyZXN0IHRvIHRoZSBrZXJuZWwKKyAqLworI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKworZXh0ZXJuIHZvaWQJICAgICAgIF9fa2ZyZWVfc2tiKHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIHN0cnVjdCBza19idWZmICphbGxvY19za2IodW5zaWduZWQgaW50IHNpemUsIGludCBwcmlvcml0eSk7CitleHRlcm4gc3RydWN0IHNrX2J1ZmYgKmFsbG9jX3NrYl9mcm9tX2NhY2hlKGttZW1fY2FjaGVfdCAqY3AsCisJCQkJCSAgICB1bnNpZ25lZCBpbnQgc2l6ZSwgaW50IHByaW9yaXR5KTsKK2V4dGVybiB2b2lkCSAgICAgICBrZnJlZV9za2JtZW0oc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gc3RydWN0IHNrX2J1ZmYgKnNrYl9jbG9uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcHJpb3JpdHkpOworZXh0ZXJuIHN0cnVjdCBza19idWZmICpza2JfY29weShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcHJpb3JpdHkpOworZXh0ZXJuIHN0cnVjdCBza19idWZmICpwc2tiX2NvcHkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGdmcF9tYXNrKTsKK2V4dGVybiBpbnQJICAgICAgIHBza2JfZXhwYW5kX2hlYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJaW50IG5oZWFkLCBpbnQgbnRhaWwsIGludCBnZnBfbWFzayk7CitleHRlcm4gc3RydWN0IHNrX2J1ZmYgKnNrYl9yZWFsbG9jX2hlYWRyb29tKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSAgICB1bnNpZ25lZCBpbnQgaGVhZHJvb20pOworZXh0ZXJuIHN0cnVjdCBza19idWZmICpza2JfY29weV9leHBhbmQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgICAgaW50IG5ld2hlYWRyb29tLCBpbnQgbmV3dGFpbHJvb20sCisJCQkJICAgICAgIGludCBwcmlvcml0eSk7CitleHRlcm4gc3RydWN0IHNrX2J1ZmYgKgkJc2tiX3BhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcGFkKTsKKyNkZWZpbmUgZGV2X2tmcmVlX3NrYihhKQlrZnJlZV9za2IoYSkKK2V4dGVybiB2b2lkCSAgICAgIHNrYl9vdmVyX3BhbmljKHN0cnVjdCBza19idWZmICpza2IsIGludCBsZW4sCisJCQkJICAgICB2b2lkICpoZXJlKTsKK2V4dGVybiB2b2lkCSAgICAgIHNrYl91bmRlcl9wYW5pYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbGVuLAorCQkJCSAgICAgIHZvaWQgKmhlcmUpOworCisvKiBJbnRlcm5hbCAqLworI2RlZmluZSBza2Jfc2hpbmZvKFNLQikJCSgoc3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqKSgoU0tCKS0+ZW5kKSkKKworLyoqCisgKglza2JfcXVldWVfZW1wdHkgLSBjaGVjayBpZiBhIHF1ZXVlIGlzIGVtcHR5CisgKglAbGlzdDogcXVldWUgaGVhZAorICoKKyAqCVJldHVybnMgdHJ1ZSBpZiB0aGUgcXVldWUgaXMgZW1wdHksIGZhbHNlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgc2tiX3F1ZXVlX2VtcHR5KGNvbnN0IHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QpCit7CisJcmV0dXJuIGxpc3QtPm5leHQgPT0gKHN0cnVjdCBza19idWZmICopbGlzdDsKK30KKworLyoqCisgKglza2JfZ2V0IC0gcmVmZXJlbmNlIGJ1ZmZlcgorICoJQHNrYjogYnVmZmVyIHRvIHJlZmVyZW5jZQorICoKKyAqCU1ha2VzIGFub3RoZXIgcmVmZXJlbmNlIHRvIGEgc29ja2V0IGJ1ZmZlciBhbmQgcmV0dXJucyBhIHBvaW50ZXIKKyAqCXRvIHRoZSBidWZmZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKnNrYl9nZXQoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlhdG9taWNfaW5jKCZza2ItPnVzZXJzKTsKKwlyZXR1cm4gc2tiOworfQorCisvKgorICogSWYgdXNlcnMgPT0gMSwgd2UgYXJlIHRoZSBvbmx5IG93bmVyIGFuZCBhcmUgY2FuIGF2b2lkIHJlZHVuZGFudAorICogYXRvbWljIGNoYW5nZS4KKyAqLworCisvKioKKyAqCWtmcmVlX3NrYiAtIGZyZWUgYW4gc2tfYnVmZgorICoJQHNrYjogYnVmZmVyIHRvIGZyZWUKKyAqCisgKglEcm9wIGEgcmVmZXJlbmNlIHRvIHRoZSBidWZmZXIgYW5kIGZyZWUgaXQgaWYgdGhlIHVzYWdlIGNvdW50IGhhcworICoJaGl0IHplcm8uCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBrZnJlZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlpZiAobGlrZWx5KGF0b21pY19yZWFkKCZza2ItPnVzZXJzKSA9PSAxKSkKKwkJc21wX3JtYigpOworCWVsc2UgaWYgKGxpa2VseSghYXRvbWljX2RlY19hbmRfdGVzdCgmc2tiLT51c2VycykpKQorCQlyZXR1cm47CisJX19rZnJlZV9za2Ioc2tiKTsKK30KKworLyoqCisgKglza2JfY2xvbmVkIC0gaXMgdGhlIGJ1ZmZlciBhIGNsb25lCisgKglAc2tiOiBidWZmZXIgdG8gY2hlY2sKKyAqCisgKglSZXR1cm5zIHRydWUgaWYgdGhlIGJ1ZmZlciB3YXMgZ2VuZXJhdGVkIHdpdGggc2tiX2Nsb25lKCkgYW5kIGlzCisgKglvbmUgb2YgbXVsdGlwbGUgc2hhcmVkIGNvcGllcyBvZiB0aGUgYnVmZmVyLiBDbG9uZWQgYnVmZmVycyBhcmUKKyAqCXNoYXJlZCBkYXRhIHNvIG11c3Qgbm90IGJlIHdyaXR0ZW4gdG8gdW5kZXIgbm9ybWFsIGNpcmN1bXN0YW5jZXMuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHNrYl9jbG9uZWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlyZXR1cm4gc2tiLT5jbG9uZWQgJiYKKwkgICAgICAgKGF0b21pY19yZWFkKCZza2Jfc2hpbmZvKHNrYiktPmRhdGFyZWYpICYgU0tCX0RBVEFSRUZfTUFTSykgIT0gMTsKK30KKworLyoqCisgKglza2JfaGVhZGVyX2Nsb25lZCAtIGlzIHRoZSBoZWFkZXIgYSBjbG9uZQorICoJQHNrYjogYnVmZmVyIHRvIGNoZWNrCisgKgorICoJUmV0dXJucyB0cnVlIGlmIG1vZGlmeWluZyB0aGUgaGVhZGVyIHBhcnQgb2YgdGhlIGJ1ZmZlciByZXF1aXJlcworICoJdGhlIGRhdGEgdG8gYmUgY29waWVkLgorICovCitzdGF0aWMgaW5saW5lIGludCBza2JfaGVhZGVyX2Nsb25lZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWludCBkYXRhcmVmOworCisJaWYgKCFza2ItPmNsb25lZCkKKwkJcmV0dXJuIDA7CisKKwlkYXRhcmVmID0gYXRvbWljX3JlYWQoJnNrYl9zaGluZm8oc2tiKS0+ZGF0YXJlZik7CisJZGF0YXJlZiA9IChkYXRhcmVmICYgU0tCX0RBVEFSRUZfTUFTSykgLSAoZGF0YXJlZiA+PiBTS0JfREFUQVJFRl9TSElGVCk7CisJcmV0dXJuIGRhdGFyZWYgIT0gMTsKK30KKworLyoqCisgKglza2JfaGVhZGVyX3JlbGVhc2UgLSByZWxlYXNlIHJlZmVyZW5jZSB0byBoZWFkZXIKKyAqCUBza2I6IGJ1ZmZlciB0byBvcGVyYXRlIG9uCisgKgorICoJRHJvcCBhIHJlZmVyZW5jZSB0byB0aGUgaGVhZGVyIHBhcnQgb2YgdGhlIGJ1ZmZlci4gIFRoaXMgaXMgZG9uZQorICoJYnkgYWNxdWlyaW5nIGEgcGF5bG9hZCByZWZlcmVuY2UuICBZb3UgbXVzdCBub3QgcmVhZCBmcm9tIHRoZSBoZWFkZXIKKyAqCXBhcnQgb2Ygc2tiLT5kYXRhIGFmdGVyIHRoaXMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBza2JfaGVhZGVyX3JlbGVhc2Uoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlCVUdfT04oc2tiLT5ub2hkcik7CisJc2tiLT5ub2hkciA9IDE7CisJYXRvbWljX2FkZCgxIDw8IFNLQl9EQVRBUkVGX1NISUZULCAmc2tiX3NoaW5mbyhza2IpLT5kYXRhcmVmKTsKK30KKworLyoqCisgKglza2Jfc2hhcmVkIC0gaXMgdGhlIGJ1ZmZlciBzaGFyZWQKKyAqCUBza2I6IGJ1ZmZlciB0byBjaGVjaworICoKKyAqCVJldHVybnMgdHJ1ZSBpZiBtb3JlIHRoYW4gb25lIHBlcnNvbiBoYXMgYSByZWZlcmVuY2UgdG8gdGhpcworICoJYnVmZmVyLgorICovCitzdGF0aWMgaW5saW5lIGludCBza2Jfc2hhcmVkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCit7CisJcmV0dXJuIGF0b21pY19yZWFkKCZza2ItPnVzZXJzKSAhPSAxOworfQorCisvKioKKyAqCXNrYl9zaGFyZV9jaGVjayAtIGNoZWNrIGlmIGJ1ZmZlciBpcyBzaGFyZWQgYW5kIGlmIHNvIGNsb25lIGl0CisgKglAc2tiOiBidWZmZXIgdG8gY2hlY2sKKyAqCUBwcmk6IHByaW9yaXR5IGZvciBtZW1vcnkgYWxsb2NhdGlvbgorICoKKyAqCUlmIHRoZSBidWZmZXIgaXMgc2hhcmVkIHRoZSBidWZmZXIgaXMgY2xvbmVkIGFuZCB0aGUgb2xkIGNvcHkKKyAqCWRyb3BzIGEgcmVmZXJlbmNlLiBBIG5ldyBjbG9uZSB3aXRoIGEgc2luZ2xlIHJlZmVyZW5jZSBpcyByZXR1cm5lZC4KKyAqCUlmIHRoZSBidWZmZXIgaXMgbm90IHNoYXJlZCB0aGUgb3JpZ2luYWwgYnVmZmVyIGlzIHJldHVybmVkLiBXaGVuCisgKgliZWluZyBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgc3RhdHVzIG9yIHdpdGggc3BpbmxvY2tzIGhlbGQgcHJpIG11c3QKKyAqCWJlIEdGUF9BVE9NSUMuCisgKgorICoJTlVMTCBpcyByZXR1cm5lZCBvbiBhIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKnNrYl9zaGFyZV9jaGVjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcHJpKQoreworCW1pZ2h0X3NsZWVwX2lmKHByaSAmIF9fR0ZQX1dBSVQpOworCWlmIChza2Jfc2hhcmVkKHNrYikpIHsKKwkJc3RydWN0IHNrX2J1ZmYgKm5za2IgPSBza2JfY2xvbmUoc2tiLCBwcmkpOworCQlrZnJlZV9za2Ioc2tiKTsKKwkJc2tiID0gbnNrYjsKKwl9CisJcmV0dXJuIHNrYjsKK30KKworLyoKKyAqCUNvcHkgc2hhcmVkIGJ1ZmZlcnMgaW50byBhIG5ldyBza19idWZmLiBXZSBlZmZlY3RpdmVseSBkbyBDT1cgb24KKyAqCXBhY2tldHMgdG8gaGFuZGxlIGNhc2VzIHdoZXJlIHdlIGhhdmUgYSBsb2NhbCByZWFkZXIgYW5kIGZvcndhcmQKKyAqCWFuZCBhIGNvdXBsZSBvZiBvdGhlciBtZXNzeSBvbmVzLiBUaGUgbm9ybWFsIG9uZSBpcyB0Y3BkdW1waW5nCisgKglhIHBhY2tldCB0aGF0cyBiZWluZyBmb3J3YXJkZWQuCisgKi8KKworLyoqCisgKglza2JfdW5zaGFyZSAtIG1ha2UgYSBjb3B5IG9mIGEgc2hhcmVkIGJ1ZmZlcgorICoJQHNrYjogYnVmZmVyIHRvIGNoZWNrCisgKglAcHJpOiBwcmlvcml0eSBmb3IgbWVtb3J5IGFsbG9jYXRpb24KKyAqCisgKglJZiB0aGUgc29ja2V0IGJ1ZmZlciBpcyBhIGNsb25lIHRoZW4gdGhpcyBmdW5jdGlvbiBjcmVhdGVzIGEgbmV3CisgKgljb3B5IG9mIHRoZSBkYXRhLCBkcm9wcyBhIHJlZmVyZW5jZSBjb3VudCBvbiB0aGUgb2xkIGNvcHkgYW5kIHJldHVybnMKKyAqCXRoZSBuZXcgY29weSB3aXRoIHRoZSByZWZlcmVuY2UgY291bnQgYXQgMS4gSWYgdGhlIGJ1ZmZlciBpcyBub3QgYSBjbG9uZQorICoJdGhlIG9yaWdpbmFsIGJ1ZmZlciBpcyByZXR1cm5lZC4gV2hlbiBjYWxsZWQgd2l0aCBhIHNwaW5sb2NrIGhlbGQgb3IKKyAqCWZyb20gaW50ZXJydXB0IHN0YXRlIEBwcmkgbXVzdCBiZSAlR0ZQX0FUT01JQworICoKKyAqCSVOVUxMIGlzIHJldHVybmVkIG9uIGEgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZS4KKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX3Vuc2hhcmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHByaSkKK3sKKwltaWdodF9zbGVlcF9pZihwcmkgJiBfX0dGUF9XQUlUKTsKKwlpZiAoc2tiX2Nsb25lZChza2IpKSB7CisJCXN0cnVjdCBza19idWZmICpuc2tiID0gc2tiX2NvcHkoc2tiLCBwcmkpOworCQlrZnJlZV9za2Ioc2tiKTsJLyogRnJlZSBvdXIgc2hhcmVkIGNvcHkgKi8KKwkJc2tiID0gbnNrYjsKKwl9CisJcmV0dXJuIHNrYjsKK30KKworLyoqCisgKglza2JfcGVlaworICoJQGxpc3RfOiBsaXN0IHRvIHBlZWsgYXQKKyAqCisgKglQZWVrIGFuICZza19idWZmLiBVbmxpa2UgbW9zdCBvdGhlciBvcGVyYXRpb25zIHlvdSBfTVVTVF8KKyAqCWJlIGNhcmVmdWwgd2l0aCB0aGlzIG9uZS4gQSBwZWVrIGxlYXZlcyB0aGUgYnVmZmVyIG9uIHRoZQorICoJbGlzdCBhbmQgc29tZW9uZSBlbHNlIG1heSBydW4gb2ZmIHdpdGggaXQuIFlvdSBtdXN0IGhvbGQKKyAqCXRoZSBhcHByb3ByaWF0ZSBsb2NrcyBvciBoYXZlIGEgcHJpdmF0ZSBxdWV1ZSB0byBkbyB0aGlzLgorICoKKyAqCVJldHVybnMgJU5VTEwgZm9yIGFuIGVtcHR5IGxpc3Qgb3IgYSBwb2ludGVyIHRvIHRoZSBoZWFkIGVsZW1lbnQuCisgKglUaGUgcmVmZXJlbmNlIGNvdW50IGlzIG5vdCBpbmNyZW1lbnRlZCBhbmQgdGhlIHJlZmVyZW5jZSBpcyB0aGVyZWZvcmUKKyAqCXZvbGF0aWxlLiBVc2Ugd2l0aCBjYXV0aW9uLgorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpza2JfcGVlayhzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0XykKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqbGlzdCA9ICgoc3RydWN0IHNrX2J1ZmYgKilsaXN0XyktPm5leHQ7CisJaWYgKGxpc3QgPT0gKHN0cnVjdCBza19idWZmICopbGlzdF8pCisJCWxpc3QgPSBOVUxMOworCXJldHVybiBsaXN0OworfQorCisvKioKKyAqCXNrYl9wZWVrX3RhaWwKKyAqCUBsaXN0XzogbGlzdCB0byBwZWVrIGF0CisgKgorICoJUGVlayBhbiAmc2tfYnVmZi4gVW5saWtlIG1vc3Qgb3RoZXIgb3BlcmF0aW9ucyB5b3UgX01VU1RfCisgKgliZSBjYXJlZnVsIHdpdGggdGhpcyBvbmUuIEEgcGVlayBsZWF2ZXMgdGhlIGJ1ZmZlciBvbiB0aGUKKyAqCWxpc3QgYW5kIHNvbWVvbmUgZWxzZSBtYXkgcnVuIG9mZiB3aXRoIGl0LiBZb3UgbXVzdCBob2xkCisgKgl0aGUgYXBwcm9wcmlhdGUgbG9ja3Mgb3IgaGF2ZSBhIHByaXZhdGUgcXVldWUgdG8gZG8gdGhpcy4KKyAqCisgKglSZXR1cm5zICVOVUxMIGZvciBhbiBlbXB0eSBsaXN0IG9yIGEgcG9pbnRlciB0byB0aGUgdGFpbCBlbGVtZW50LgorICoJVGhlIHJlZmVyZW5jZSBjb3VudCBpcyBub3QgaW5jcmVtZW50ZWQgYW5kIHRoZSByZWZlcmVuY2UgaXMgdGhlcmVmb3JlCisgKgl2b2xhdGlsZS4gVXNlIHdpdGggY2F1dGlvbi4KKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX3BlZWtfdGFpbChzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0XykKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqbGlzdCA9ICgoc3RydWN0IHNrX2J1ZmYgKilsaXN0XyktPnByZXY7CisJaWYgKGxpc3QgPT0gKHN0cnVjdCBza19idWZmICopbGlzdF8pCisJCWxpc3QgPSBOVUxMOworCXJldHVybiBsaXN0OworfQorCisvKioKKyAqCXNrYl9xdWV1ZV9sZW4JLSBnZXQgcXVldWUgbGVuZ3RoCisgKglAbGlzdF86IGxpc3QgdG8gbWVhc3VyZQorICoKKyAqCVJldHVybiB0aGUgbGVuZ3RoIG9mIGFuICZza19idWZmIHF1ZXVlLgorICovCitzdGF0aWMgaW5saW5lIF9fdTMyIHNrYl9xdWV1ZV9sZW4oY29uc3Qgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdF8pCit7CisJcmV0dXJuIGxpc3RfLT5xbGVuOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3F1ZXVlX2hlYWRfaW5pdChzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0KQoreworCXNwaW5fbG9ja19pbml0KCZsaXN0LT5sb2NrKTsKKwlsaXN0LT5wcmV2ID0gbGlzdC0+bmV4dCA9IChzdHJ1Y3Qgc2tfYnVmZiAqKWxpc3Q7CisJbGlzdC0+cWxlbiA9IDA7Cit9CisKKy8qCisgKglJbnNlcnQgYW4gc2tfYnVmZiBhdCB0aGUgc3RhcnQgb2YgYSBsaXN0LgorICoKKyAqCVRoZSAiX19za2JfeHh4eCgpIiBmdW5jdGlvbnMgYXJlIHRoZSBub24tYXRvbWljIG9uZXMgdGhhdAorICoJY2FuIG9ubHkgYmUgY2FsbGVkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC4KKyAqLworCisvKioKKyAqCV9fc2tiX3F1ZXVlX2hlYWQgLSBxdWV1ZSBhIGJ1ZmZlciBhdCB0aGUgbGlzdCBoZWFkCisgKglAbGlzdDogbGlzdCB0byB1c2UKKyAqCUBuZXdzazogYnVmZmVyIHRvIHF1ZXVlCisgKgorICoJUXVldWUgYSBidWZmZXIgYXQgdGhlIHN0YXJ0IG9mIGEgbGlzdC4gVGhpcyBmdW5jdGlvbiB0YWtlcyBubyBsb2NrcworICoJYW5kIHlvdSBtdXN0IHRoZXJlZm9yZSBob2xkIHJlcXVpcmVkIGxvY2tzIGJlZm9yZSBjYWxsaW5nIGl0LgorICoKKyAqCUEgYnVmZmVyIGNhbm5vdCBiZSBwbGFjZWQgb24gdHdvIGxpc3RzIGF0IHRoZSBzYW1lIHRpbWUuCisgKi8KK2V4dGVybiB2b2lkIHNrYl9xdWV1ZV9oZWFkKHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsIHN0cnVjdCBza19idWZmICpuZXdzayk7CitzdGF0aWMgaW5saW5lIHZvaWQgX19za2JfcXVldWVfaGVhZChzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0LAorCQkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqbmV3c2spCit7CisJc3RydWN0IHNrX2J1ZmYgKnByZXYsICpuZXh0OworCisJbmV3c2stPmxpc3QgPSBsaXN0OworCWxpc3QtPnFsZW4rKzsKKwlwcmV2ID0gKHN0cnVjdCBza19idWZmICopbGlzdDsKKwluZXh0ID0gcHJldi0+bmV4dDsKKwluZXdzay0+bmV4dCA9IG5leHQ7CisJbmV3c2stPnByZXYgPSBwcmV2OworCW5leHQtPnByZXYgID0gcHJldi0+bmV4dCA9IG5ld3NrOworfQorCisvKioKKyAqCV9fc2tiX3F1ZXVlX3RhaWwgLSBxdWV1ZSBhIGJ1ZmZlciBhdCB0aGUgbGlzdCB0YWlsCisgKglAbGlzdDogbGlzdCB0byB1c2UKKyAqCUBuZXdzazogYnVmZmVyIHRvIHF1ZXVlCisgKgorICoJUXVldWUgYSBidWZmZXIgYXQgdGhlIGVuZCBvZiBhIGxpc3QuIFRoaXMgZnVuY3Rpb24gdGFrZXMgbm8gbG9ja3MKKyAqCWFuZCB5b3UgbXVzdCB0aGVyZWZvcmUgaG9sZCByZXF1aXJlZCBsb2NrcyBiZWZvcmUgY2FsbGluZyBpdC4KKyAqCisgKglBIGJ1ZmZlciBjYW5ub3QgYmUgcGxhY2VkIG9uIHR3byBsaXN0cyBhdCB0aGUgc2FtZSB0aW1lLgorICovCitleHRlcm4gdm9pZCBza2JfcXVldWVfdGFpbChzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0LCBzdHJ1Y3Qgc2tfYnVmZiAqbmV3c2spOworc3RhdGljIGlubGluZSB2b2lkIF9fc2tiX3F1ZXVlX3RhaWwoc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCwKKwkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqbmV3c2spCit7CisJc3RydWN0IHNrX2J1ZmYgKnByZXYsICpuZXh0OworCisJbmV3c2stPmxpc3QgPSBsaXN0OworCWxpc3QtPnFsZW4rKzsKKwluZXh0ID0gKHN0cnVjdCBza19idWZmICopbGlzdDsKKwlwcmV2ID0gbmV4dC0+cHJldjsKKwluZXdzay0+bmV4dCA9IG5leHQ7CisJbmV3c2stPnByZXYgPSBwcmV2OworCW5leHQtPnByZXYgID0gcHJldi0+bmV4dCA9IG5ld3NrOworfQorCisKKy8qKgorICoJX19za2JfZGVxdWV1ZSAtIHJlbW92ZSBmcm9tIHRoZSBoZWFkIG9mIHRoZSBxdWV1ZQorICoJQGxpc3Q6IGxpc3QgdG8gZGVxdWV1ZSBmcm9tCisgKgorICoJUmVtb3ZlIHRoZSBoZWFkIG9mIHRoZSBsaXN0LiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHRha2UgYW55IGxvY2tzCisgKglzbyBtdXN0IGJlIHVzZWQgd2l0aCBhcHByb3ByaWF0ZSBsb2NrcyBoZWxkIG9ubHkuIFRoZSBoZWFkIGl0ZW0gaXMKKyAqCXJldHVybmVkIG9yICVOVUxMIGlmIHRoZSBsaXN0IGlzIGVtcHR5LgorICovCitleHRlcm4gc3RydWN0IHNrX2J1ZmYgKnNrYl9kZXF1ZXVlKHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QpOworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqX19za2JfZGVxdWV1ZShzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0KQoreworCXN0cnVjdCBza19idWZmICpuZXh0LCAqcHJldiwgKnJlc3VsdDsKKworCXByZXYgPSAoc3RydWN0IHNrX2J1ZmYgKikgbGlzdDsKKwluZXh0ID0gcHJldi0+bmV4dDsKKwlyZXN1bHQgPSBOVUxMOworCWlmIChuZXh0ICE9IHByZXYpIHsKKwkJcmVzdWx0CSAgICAgPSBuZXh0OworCQluZXh0CSAgICAgPSBuZXh0LT5uZXh0OworCQlsaXN0LT5xbGVuLS07CisJCW5leHQtPnByZXYgICA9IHByZXY7CisJCXByZXYtPm5leHQgICA9IG5leHQ7CisJCXJlc3VsdC0+bmV4dCA9IHJlc3VsdC0+cHJldiA9IE5VTEw7CisJCXJlc3VsdC0+bGlzdCA9IE5VTEw7CisJfQorCXJldHVybiByZXN1bHQ7Cit9CisKKworLyoKKyAqCUluc2VydCBhIHBhY2tldCBvbiBhIGxpc3QuCisgKi8KK2V4dGVybiB2b2lkICAgICAgICBza2JfaW5zZXJ0KHN0cnVjdCBza19idWZmICpvbGQsIHN0cnVjdCBza19idWZmICpuZXdzayk7CitzdGF0aWMgaW5saW5lIHZvaWQgX19za2JfaW5zZXJ0KHN0cnVjdCBza19idWZmICpuZXdzaywKKwkJCQlzdHJ1Y3Qgc2tfYnVmZiAqcHJldiwgc3RydWN0IHNrX2J1ZmYgKm5leHQsCisJCQkJc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCkKK3sKKwluZXdzay0+bmV4dCA9IG5leHQ7CisJbmV3c2stPnByZXYgPSBwcmV2OworCW5leHQtPnByZXYgID0gcHJldi0+bmV4dCA9IG5ld3NrOworCW5ld3NrLT5saXN0ID0gbGlzdDsKKwlsaXN0LT5xbGVuKys7Cit9CisKKy8qCisgKglQbGFjZSBhIHBhY2tldCBhZnRlciBhIGdpdmVuIHBhY2tldCBpbiBhIGxpc3QuCisgKi8KK2V4dGVybiB2b2lkCSAgIHNrYl9hcHBlbmQoc3RydWN0IHNrX2J1ZmYgKm9sZCwgc3RydWN0IHNrX2J1ZmYgKm5ld3NrKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3NrYl9hcHBlbmQoc3RydWN0IHNrX2J1ZmYgKm9sZCwgc3RydWN0IHNrX2J1ZmYgKm5ld3NrKQoreworCV9fc2tiX2luc2VydChuZXdzaywgb2xkLCBvbGQtPm5leHQsIG9sZC0+bGlzdCk7Cit9CisKKy8qCisgKiByZW1vdmUgc2tfYnVmZiBmcm9tIGxpc3QuIF9NdXN0XyBiZSBjYWxsZWQgYXRvbWljYWxseSwgYW5kIHdpdGgKKyAqIHRoZSBsaXN0IGtub3duLi4KKyAqLworZXh0ZXJuIHZvaWQJICAgc2tiX3VubGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3NrYl91bmxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqbmV4dCwgKnByZXY7CisKKwlsaXN0LT5xbGVuLS07CisJbmV4dAkgICA9IHNrYi0+bmV4dDsKKwlwcmV2CSAgID0gc2tiLT5wcmV2OworCXNrYi0+bmV4dCAgPSBza2ItPnByZXYgPSBOVUxMOworCXNrYi0+bGlzdCAgPSBOVUxMOworCW5leHQtPnByZXYgPSBwcmV2OworCXByZXYtPm5leHQgPSBuZXh0OworfQorCisKKy8qIFhYWDogbW9yZSBzdHJlYW1saW5lZCBpbXBsZW1lbnRhdGlvbiAqLworCisvKioKKyAqCV9fc2tiX2RlcXVldWVfdGFpbCAtIHJlbW92ZSBmcm9tIHRoZSB0YWlsIG9mIHRoZSBxdWV1ZQorICoJQGxpc3Q6IGxpc3QgdG8gZGVxdWV1ZSBmcm9tCisgKgorICoJUmVtb3ZlIHRoZSB0YWlsIG9mIHRoZSBsaXN0LiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHRha2UgYW55IGxvY2tzCisgKglzbyBtdXN0IGJlIHVzZWQgd2l0aCBhcHByb3ByaWF0ZSBsb2NrcyBoZWxkIG9ubHkuIFRoZSB0YWlsIGl0ZW0gaXMKKyAqCXJldHVybmVkIG9yICVOVUxMIGlmIHRoZSBsaXN0IGlzIGVtcHR5LgorICovCitleHRlcm4gc3RydWN0IHNrX2J1ZmYgKnNrYl9kZXF1ZXVlX3RhaWwoc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCk7CitzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpfX3NrYl9kZXF1ZXVlX3RhaWwoc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gc2tiX3BlZWtfdGFpbChsaXN0KTsKKwlpZiAoc2tiKQorCQlfX3NrYl91bmxpbmsoc2tiLCBsaXN0KTsKKwlyZXR1cm4gc2tiOworfQorCisKK3N0YXRpYyBpbmxpbmUgaW50IHNrYl9pc19ub25saW5lYXIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlyZXR1cm4gc2tiLT5kYXRhX2xlbjsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2tiX2hlYWRsZW4oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlyZXR1cm4gc2tiLT5sZW4gLSBza2ItPmRhdGFfbGVuOworfQorCitzdGF0aWMgaW5saW5lIGludCBza2JfcGFnZWxlbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWludCBpLCBsZW4gPSAwOworCisJZm9yIChpID0gKGludClza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzIC0gMTsgaSA+PSAwOyBpLS0pCisJCWxlbiArPSBza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldLnNpemU7CisJcmV0dXJuIGxlbiArIHNrYl9oZWFkbGVuKHNrYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBza2JfZmlsbF9wYWdlX2Rlc2Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGksCisJCQkJICAgICAgc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvZmYsIGludCBzaXplKQoreworCXNrYl9mcmFnX3QgKmZyYWcgPSAmc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXTsKKworCWZyYWctPnBhZ2UJCSAgPSBwYWdlOworCWZyYWctPnBhZ2Vfb2Zmc2V0CSAgPSBvZmY7CisJZnJhZy0+c2l6ZQkJICA9IHNpemU7CisJc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyA9IGkgKyAxOworfQorCisjZGVmaW5lIFNLQl9QQUdFX0FTU0VSVChza2IpIAlCVUdfT04oc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncykKKyNkZWZpbmUgU0tCX0ZSQUdfQVNTRVJUKHNrYikgCUJVR19PTihza2Jfc2hpbmZvKHNrYiktPmZyYWdfbGlzdCkKKyNkZWZpbmUgU0tCX0xJTkVBUl9BU1NFUlQoc2tiKSAgQlVHX09OKHNrYl9pc19ub25saW5lYXIoc2tiKSkKKworLyoKKyAqCUFkZCBkYXRhIHRvIGFuIHNrX2J1ZmYKKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyICpfX3NrYl9wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGxlbikKK3sKKwl1bnNpZ25lZCBjaGFyICp0bXAgPSBza2ItPnRhaWw7CisJU0tCX0xJTkVBUl9BU1NFUlQoc2tiKTsKKwlza2ItPnRhaWwgKz0gbGVuOworCXNrYi0+bGVuICArPSBsZW47CisJcmV0dXJuIHRtcDsKK30KKworLyoqCisgKglza2JfcHV0IC0gYWRkIGRhdGEgdG8gYSBidWZmZXIKKyAqCUBza2I6IGJ1ZmZlciB0byB1c2UKKyAqCUBsZW46IGFtb3VudCBvZiBkYXRhIHRvIGFkZAorICoKKyAqCVRoaXMgZnVuY3Rpb24gZXh0ZW5kcyB0aGUgdXNlZCBkYXRhIGFyZWEgb2YgdGhlIGJ1ZmZlci4gSWYgdGhpcyB3b3VsZAorICoJZXhjZWVkIHRoZSB0b3RhbCBidWZmZXIgc2l6ZSB0aGUga2VybmVsIHdpbGwgcGFuaWMuIEEgcG9pbnRlciB0byB0aGUKKyAqCWZpcnN0IGJ5dGUgb2YgdGhlIGV4dHJhIGRhdGEgaXMgcmV0dXJuZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciAqc2tiX3B1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbGVuKQoreworCXVuc2lnbmVkIGNoYXIgKnRtcCA9IHNrYi0+dGFpbDsKKwlTS0JfTElORUFSX0FTU0VSVChza2IpOworCXNrYi0+dGFpbCArPSBsZW47CisJc2tiLT5sZW4gICs9IGxlbjsKKwlpZiAodW5saWtlbHkoc2tiLT50YWlsPnNrYi0+ZW5kKSkKKwkJc2tiX292ZXJfcGFuaWMoc2tiLCBsZW4sIGN1cnJlbnRfdGV4dF9hZGRyKCkpOworCXJldHVybiB0bXA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciAqX19za2JfcHVzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbGVuKQoreworCXNrYi0+ZGF0YSAtPSBsZW47CisJc2tiLT5sZW4gICs9IGxlbjsKKwlyZXR1cm4gc2tiLT5kYXRhOworfQorCisvKioKKyAqCXNrYl9wdXNoIC0gYWRkIGRhdGEgdG8gdGhlIHN0YXJ0IG9mIGEgYnVmZmVyCisgKglAc2tiOiBidWZmZXIgdG8gdXNlCisgKglAbGVuOiBhbW91bnQgb2YgZGF0YSB0byBhZGQKKyAqCisgKglUaGlzIGZ1bmN0aW9uIGV4dGVuZHMgdGhlIHVzZWQgZGF0YSBhcmVhIG9mIHRoZSBidWZmZXIgYXQgdGhlIGJ1ZmZlcgorICoJc3RhcnQuIElmIHRoaXMgd291bGQgZXhjZWVkIHRoZSB0b3RhbCBidWZmZXIgaGVhZHJvb20gdGhlIGtlcm5lbCB3aWxsCisgKglwYW5pYy4gQSBwb2ludGVyIHRvIHRoZSBmaXJzdCBieXRlIG9mIHRoZSBleHRyYSBkYXRhIGlzIHJldHVybmVkLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgKnNrYl9wdXNoKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBsZW4pCit7CisJc2tiLT5kYXRhIC09IGxlbjsKKwlza2ItPmxlbiAgKz0gbGVuOworCWlmICh1bmxpa2VseShza2ItPmRhdGE8c2tiLT5oZWFkKSkKKwkJc2tiX3VuZGVyX3BhbmljKHNrYiwgbGVuLCBjdXJyZW50X3RleHRfYWRkcigpKTsKKwlyZXR1cm4gc2tiLT5kYXRhOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgKl9fc2tiX3B1bGwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGxlbikKK3sKKwlza2ItPmxlbiAtPSBsZW47CisJQlVHX09OKHNrYi0+bGVuIDwgc2tiLT5kYXRhX2xlbik7CisJcmV0dXJuIHNrYi0+ZGF0YSArPSBsZW47Cit9CisKKy8qKgorICoJc2tiX3B1bGwgLSByZW1vdmUgZGF0YSBmcm9tIHRoZSBzdGFydCBvZiBhIGJ1ZmZlcgorICoJQHNrYjogYnVmZmVyIHRvIHVzZQorICoJQGxlbjogYW1vdW50IG9mIGRhdGEgdG8gcmVtb3ZlCisgKgorICoJVGhpcyBmdW5jdGlvbiByZW1vdmVzIGRhdGEgZnJvbSB0aGUgc3RhcnQgb2YgYSBidWZmZXIsIHJldHVybmluZworICoJdGhlIG1lbW9yeSB0byB0aGUgaGVhZHJvb20uIEEgcG9pbnRlciB0byB0aGUgbmV4dCBkYXRhIGluIHRoZSBidWZmZXIKKyAqCWlzIHJldHVybmVkLiBPbmNlIHRoZSBkYXRhIGhhcyBiZWVuIHB1bGxlZCBmdXR1cmUgcHVzaGVzIHdpbGwgb3ZlcndyaXRlCisgKgl0aGUgb2xkIGRhdGEuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciAqc2tiX3B1bGwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGxlbikKK3sKKwlyZXR1cm4gdW5saWtlbHkobGVuID4gc2tiLT5sZW4pID8gTlVMTCA6IF9fc2tiX3B1bGwoc2tiLCBsZW4pOworfQorCitleHRlcm4gdW5zaWduZWQgY2hhciAqX19wc2tiX3B1bGxfdGFpbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZGVsdGEpOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgKl9fcHNrYl9wdWxsKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBsZW4pCit7CisJaWYgKGxlbiA+IHNrYl9oZWFkbGVuKHNrYikgJiYKKwkgICAgIV9fcHNrYl9wdWxsX3RhaWwoc2tiLCBsZW4tc2tiX2hlYWRsZW4oc2tiKSkpCisJCXJldHVybiBOVUxMOworCXNrYi0+bGVuIC09IGxlbjsKKwlyZXR1cm4gc2tiLT5kYXRhICs9IGxlbjsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyICpwc2tiX3B1bGwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGxlbikKK3sKKwlyZXR1cm4gdW5saWtlbHkobGVuID4gc2tiLT5sZW4pID8gTlVMTCA6IF9fcHNrYl9wdWxsKHNrYiwgbGVuKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcHNrYl9tYXlfcHVsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbGVuKQoreworCWlmIChsaWtlbHkobGVuIDw9IHNrYl9oZWFkbGVuKHNrYikpKQorCQlyZXR1cm4gMTsKKwlpZiAodW5saWtlbHkobGVuID4gc2tiLT5sZW4pKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gX19wc2tiX3B1bGxfdGFpbChza2IsIGxlbi1za2JfaGVhZGxlbihza2IpKSAhPSBOVUxMOworfQorCisvKioKKyAqCXNrYl9oZWFkcm9vbSAtIGJ5dGVzIGF0IGJ1ZmZlciBoZWFkCisgKglAc2tiOiBidWZmZXIgdG8gY2hlY2sKKyAqCisgKglSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBvZiBmcmVlIHNwYWNlIGF0IHRoZSBoZWFkIG9mIGFuICZza19idWZmLgorICovCitzdGF0aWMgaW5saW5lIGludCBza2JfaGVhZHJvb20oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlyZXR1cm4gc2tiLT5kYXRhIC0gc2tiLT5oZWFkOworfQorCisvKioKKyAqCXNrYl90YWlscm9vbSAtIGJ5dGVzIGF0IGJ1ZmZlciBlbmQKKyAqCUBza2I6IGJ1ZmZlciB0byBjaGVjaworICoKKyAqCVJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIG9mIGZyZWUgc3BhY2UgYXQgdGhlIHRhaWwgb2YgYW4gc2tfYnVmZgorICovCitzdGF0aWMgaW5saW5lIGludCBza2JfdGFpbHJvb20oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlyZXR1cm4gc2tiX2lzX25vbmxpbmVhcihza2IpID8gMCA6IHNrYi0+ZW5kIC0gc2tiLT50YWlsOworfQorCisvKioKKyAqCXNrYl9yZXNlcnZlIC0gYWRqdXN0IGhlYWRyb29tCisgKglAc2tiOiBidWZmZXIgdG8gYWx0ZXIKKyAqCUBsZW46IGJ5dGVzIHRvIG1vdmUKKyAqCisgKglJbmNyZWFzZSB0aGUgaGVhZHJvb20gb2YgYW4gZW1wdHkgJnNrX2J1ZmYgYnkgcmVkdWNpbmcgdGhlIHRhaWwKKyAqCXJvb20uIFRoaXMgaXMgb25seSBhbGxvd2VkIGZvciBhbiBlbXB0eSBidWZmZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBza2JfcmVzZXJ2ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbGVuKQoreworCXNrYi0+ZGF0YSArPSBsZW47CisJc2tiLT50YWlsICs9IGxlbjsKK30KKworLyoKKyAqIENQVXMgb2Z0ZW4gdGFrZSBhIHBlcmZvcm1hbmNlIGhpdCB3aGVuIGFjY2Vzc2luZyB1bmFsaWduZWQgbWVtb3J5CisgKiBsb2NhdGlvbnMuIFRoZSBhY3R1YWwgcGVyZm9ybWFuY2UgaGl0IHZhcmllcywgaXQgY2FuIGJlIHNtYWxsIGlmIHRoZQorICogaGFyZHdhcmUgaGFuZGxlcyBpdCBvciBsYXJnZSBpZiB3ZSBoYXZlIHRvIHRha2UgYW4gZXhjZXB0aW9uIGFuZCBmaXggaXQKKyAqIGluIHNvZnR3YXJlLgorICoKKyAqIFNpbmNlIGFuIGV0aGVybmV0IGhlYWRlciBpcyAxNCBieXRlcyBuZXR3b3JrIGRyaXZlcnMgb2Z0ZW4gZW5kIHVwIHdpdGgKKyAqIHRoZSBJUCBoZWFkZXIgYXQgYW4gdW5hbGlnbmVkIG9mZnNldC4gVGhlIElQIGhlYWRlciBjYW4gYmUgYWxpZ25lZCBieQorICogc2hpZnRpbmcgdGhlIHN0YXJ0IG9mIHRoZSBwYWNrZXQgYnkgMiBieXRlcy4gRHJpdmVycyBzaG91bGQgZG8gdGhpcworICogd2l0aDoKKyAqCisgKiBza2JfcmVzZXJ2ZShORVRfSVBfQUxJR04pOworICoKKyAqIFRoZSBkb3duc2lkZSB0byB0aGlzIGFsaWdubWVudCBvZiB0aGUgSVAgaGVhZGVyIGlzIHRoYXQgdGhlIERNQSBpcyBub3cKKyAqIHVuYWxpZ25lZC4gT24gc29tZSBhcmNoaXRlY3R1cmVzIHRoZSBjb3N0IG9mIGFuIHVuYWxpZ25lZCBETUEgaXMgaGlnaAorICogYW5kIHRoaXMgY29zdCBvdXR3ZWlnaHMgdGhlIGdhaW5zIG1hZGUgYnkgYWxpZ25pbmcgdGhlIElQIGhlYWRlci4KKyAqIAorICogU2luY2UgdGhpcyB0cmFkZSBvZmYgdmFyaWVzIGJldHdlZW4gYXJjaGl0ZWN0dXJlcywgd2UgYWxsb3cgTkVUX0lQX0FMSUdOCisgKiB0byBiZSBvdmVycmlkZGVuLgorICovCisjaWZuZGVmIE5FVF9JUF9BTElHTgorI2RlZmluZSBORVRfSVBfQUxJR04JMgorI2VuZGlmCisKK2V4dGVybiBpbnQgX19fcHNrYl90cmltKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBsZW4sIGludCByZWFsbG9jKTsKKworc3RhdGljIGlubGluZSB2b2lkIF9fc2tiX3RyaW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGxlbikKK3sKKwlpZiAoIXNrYi0+ZGF0YV9sZW4pIHsKKwkJc2tiLT5sZW4gID0gbGVuOworCQlza2ItPnRhaWwgPSBza2ItPmRhdGEgKyBsZW47CisJfSBlbHNlCisJCV9fX3Bza2JfdHJpbShza2IsIGxlbiwgMCk7Cit9CisKKy8qKgorICoJc2tiX3RyaW0gLSByZW1vdmUgZW5kIGZyb20gYSBidWZmZXIKKyAqCUBza2I6IGJ1ZmZlciB0byBhbHRlcgorICoJQGxlbjogbmV3IGxlbmd0aAorICoKKyAqCUN1dCB0aGUgbGVuZ3RoIG9mIGEgYnVmZmVyIGRvd24gYnkgcmVtb3ZpbmcgZGF0YSBmcm9tIHRoZSB0YWlsLiBJZgorICoJdGhlIGJ1ZmZlciBpcyBhbHJlYWR5IHVuZGVyIHRoZSBsZW5ndGggc3BlY2lmaWVkIGl0IGlzIG5vdCBtb2RpZmllZC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHNrYl90cmltKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBsZW4pCit7CisJaWYgKHNrYi0+bGVuID4gbGVuKQorCQlfX3NrYl90cmltKHNrYiwgbGVuKTsKK30KKworCitzdGF0aWMgaW5saW5lIGludCBfX3Bza2JfdHJpbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbGVuKQoreworCWlmICghc2tiLT5kYXRhX2xlbikgeworCQlza2ItPmxlbiAgPSBsZW47CisJCXNrYi0+dGFpbCA9IHNrYi0+ZGF0YStsZW47CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gX19fcHNrYl90cmltKHNrYiwgbGVuLCAxKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcHNrYl90cmltKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBsZW4pCit7CisJcmV0dXJuIChsZW4gPCBza2ItPmxlbikgPyBfX3Bza2JfdHJpbShza2IsIGxlbikgOiAwOworfQorCisvKioKKyAqCXNrYl9vcnBoYW4gLSBvcnBoYW4gYSBidWZmZXIKKyAqCUBza2I6IGJ1ZmZlciB0byBvcnBoYW4KKyAqCisgKglJZiBhIGJ1ZmZlciBjdXJyZW50bHkgaGFzIGFuIG93bmVyIHRoZW4gd2UgY2FsbCB0aGUgb3duZXIncworICoJZGVzdHJ1Y3RvciBmdW5jdGlvbiBhbmQgbWFrZSB0aGUgQHNrYiB1bm93bmVkLiBUaGUgYnVmZmVyIGNvbnRpbnVlcworICoJdG8gZXhpc3QgYnV0IGlzIG5vIGxvbmdlciBjaGFyZ2VkIHRvIGl0cyBmb3JtZXIgb3duZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBza2Jfb3JwaGFuKHN0cnVjdCBza19idWZmICpza2IpCit7CisJaWYgKHNrYi0+ZGVzdHJ1Y3RvcikKKwkJc2tiLT5kZXN0cnVjdG9yKHNrYik7CisJc2tiLT5kZXN0cnVjdG9yID0gTlVMTDsKKwlza2ItPnNrCQk9IE5VTEw7Cit9CisKKy8qKgorICoJX19za2JfcXVldWVfcHVyZ2UgLSBlbXB0eSBhIGxpc3QKKyAqCUBsaXN0OiBsaXN0IHRvIGVtcHR5CisgKgorICoJRGVsZXRlIGFsbCBidWZmZXJzIG9uIGFuICZza19idWZmIGxpc3QuIEVhY2ggYnVmZmVyIGlzIHJlbW92ZWQgZnJvbQorICoJdGhlIGxpc3QgYW5kIG9uZSByZWZlcmVuY2UgZHJvcHBlZC4gVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB0YWtlIHRoZQorICoJbGlzdCBsb2NrIGFuZCB0aGUgY2FsbGVyIG11c3QgaG9sZCB0aGUgcmVsZXZhbnQgbG9ja3MgdG8gdXNlIGl0LgorICovCitleHRlcm4gdm9pZCBza2JfcXVldWVfcHVyZ2Uoc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCk7CitzdGF0aWMgaW5saW5lIHZvaWQgX19za2JfcXVldWVfcHVyZ2Uoc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZShsaXN0KSkgIT0gTlVMTCkKKwkJa2ZyZWVfc2tiKHNrYik7Cit9CisKKy8qKgorICoJX19kZXZfYWxsb2Nfc2tiIC0gYWxsb2NhdGUgYW4gc2tidWZmIGZvciBzZW5kaW5nCisgKglAbGVuZ3RoOiBsZW5ndGggdG8gYWxsb2NhdGUKKyAqCUBnZnBfbWFzazogZ2V0X2ZyZWVfcGFnZXMgbWFzaywgcGFzc2VkIHRvIGFsbG9jX3NrYgorICoKKyAqCUFsbG9jYXRlIGEgbmV3ICZza19idWZmIGFuZCBhc3NpZ24gaXQgYSB1c2FnZSBjb3VudCBvZiBvbmUuIFRoZQorICoJYnVmZmVyIGhhcyB1bnNwZWNpZmllZCBoZWFkcm9vbSBidWlsdCBpbi4gVXNlcnMgc2hvdWxkIGFsbG9jYXRlCisgKgl0aGUgaGVhZHJvb20gdGhleSB0aGluayB0aGV5IG5lZWQgd2l0aG91dCBhY2NvdW50aW5nIGZvciB0aGUKKyAqCWJ1aWx0IGluIHNwYWNlLiBUaGUgYnVpbHQgaW4gc3BhY2UgaXMgdXNlZCBmb3Igb3B0aW1pc2F0aW9ucy4KKyAqCisgKgklTlVMTCBpcyByZXR1cm5lZCBpbiB0aGVyZSBpcyBubyBmcmVlIG1lbW9yeS4KKyAqLworI2lmbmRlZiBDT05GSUdfSEFWRV9BUkNIX0RFVl9BTExPQ19TS0IKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKl9fZGV2X2FsbG9jX3NrYih1bnNpZ25lZCBpbnQgbGVuZ3RoLAorCQkJCQkgICAgICBpbnQgZ2ZwX21hc2spCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGFsbG9jX3NrYihsZW5ndGggKyAxNiwgZ2ZwX21hc2spOworCWlmIChsaWtlbHkoc2tiKSkKKwkJc2tiX3Jlc2VydmUoc2tiLCAxNik7CisJcmV0dXJuIHNrYjsKK30KKyNlbHNlCitleHRlcm4gc3RydWN0IHNrX2J1ZmYgKl9fZGV2X2FsbG9jX3NrYih1bnNpZ25lZCBpbnQgbGVuZ3RoLCBpbnQgZ2ZwX21hc2spOworI2VuZGlmCisKKy8qKgorICoJZGV2X2FsbG9jX3NrYiAtIGFsbG9jYXRlIGFuIHNrYnVmZiBmb3Igc2VuZGluZworICoJQGxlbmd0aDogbGVuZ3RoIHRvIGFsbG9jYXRlCisgKgorICoJQWxsb2NhdGUgYSBuZXcgJnNrX2J1ZmYgYW5kIGFzc2lnbiBpdCBhIHVzYWdlIGNvdW50IG9mIG9uZS4gVGhlCisgKglidWZmZXIgaGFzIHVuc3BlY2lmaWVkIGhlYWRyb29tIGJ1aWx0IGluLiBVc2VycyBzaG91bGQgYWxsb2NhdGUKKyAqCXRoZSBoZWFkcm9vbSB0aGV5IHRoaW5rIHRoZXkgbmVlZCB3aXRob3V0IGFjY291bnRpbmcgZm9yIHRoZQorICoJYnVpbHQgaW4gc3BhY2UuIFRoZSBidWlsdCBpbiBzcGFjZSBpcyB1c2VkIGZvciBvcHRpbWlzYXRpb25zLgorICoKKyAqCSVOVUxMIGlzIHJldHVybmVkIGluIHRoZXJlIGlzIG5vIGZyZWUgbWVtb3J5LiBBbHRob3VnaCB0aGlzIGZ1bmN0aW9uCisgKglhbGxvY2F0ZXMgbWVtb3J5IGl0IGNhbiBiZSBjYWxsZWQgZnJvbSBhbiBpbnRlcnJ1cHQuCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKmRldl9hbGxvY19za2IodW5zaWduZWQgaW50IGxlbmd0aCkKK3sKKwlyZXR1cm4gX19kZXZfYWxsb2Nfc2tiKGxlbmd0aCwgR0ZQX0FUT01JQyk7Cit9CisKKy8qKgorICoJc2tiX2NvdyAtIGNvcHkgaGVhZGVyIG9mIHNrYiB3aGVuIGl0IGlzIHJlcXVpcmVkCisgKglAc2tiOiBidWZmZXIgdG8gY293CisgKglAaGVhZHJvb206IG5lZWRlZCBoZWFkcm9vbQorICoKKyAqCUlmIHRoZSBza2IgcGFzc2VkIGxhY2tzIHN1ZmZpY2llbnQgaGVhZHJvb20gb3IgaXRzIGRhdGEgcGFydAorICoJaXMgc2hhcmVkLCBkYXRhIGlzIHJlYWxsb2NhdGVkLiBJZiByZWFsbG9jYXRpb24gZmFpbHMsIGFuIGVycm9yCisgKglpcyByZXR1cm5lZCBhbmQgb3JpZ2luYWwgc2tiIGlzIG5vdCBjaGFuZ2VkLgorICoKKyAqCVRoZSByZXN1bHQgaXMgc2tiIHdpdGggd3JpdGFibGUgYXJlYSBza2ItPmhlYWQuLi5za2ItPnRhaWwKKyAqCWFuZCBhdCBsZWFzdCBAaGVhZHJvb20gb2Ygc3BhY2UgYXQgaGVhZC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgc2tiX2NvdyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaGVhZHJvb20pCit7CisJaW50IGRlbHRhID0gKGhlYWRyb29tID4gMTYgPyBoZWFkcm9vbSA6IDE2KSAtIHNrYl9oZWFkcm9vbShza2IpOworCisJaWYgKGRlbHRhIDwgMCkKKwkJZGVsdGEgPSAwOworCisJaWYgKGRlbHRhIHx8IHNrYl9jbG9uZWQoc2tiKSkKKwkJcmV0dXJuIHBza2JfZXhwYW5kX2hlYWQoc2tiLCAoZGVsdGEgKyAxNSkgJiB+MTUsIDAsIEdGUF9BVE9NSUMpOworCXJldHVybiAwOworfQorCisvKioKKyAqCXNrYl9wYWR0bwktIHBhZCBhbiBza2J1ZmYgdXAgdG8gYSBtaW5pbWFsIHNpemUKKyAqCUBza2I6IGJ1ZmZlciB0byBwYWQKKyAqCUBsZW46IG1pbmltYWwgbGVuZ3RoCisgKgorICoJUGFkcyB1cCBhIGJ1ZmZlciB0byBlbnN1cmUgdGhlIHRyYWlsaW5nIGJ5dGVzIGV4aXN0IGFuZCBhcmUKKyAqCWJsYW5rZWQuIElmIHRoZSBidWZmZXIgYWxyZWFkeSBjb250YWlucyBzdWZmaWNpZW50IGRhdGEgaXQKKyAqCWlzIHVudG91Y2hlZC4gUmV0dXJucyB0aGUgYnVmZmVyLCB3aGljaCBtYXkgYmUgYSByZXBsYWNlbWVudAorICoJZm9yIHRoZSBvcmlnaW5hbCwgb3IgTlVMTCBmb3Igb3V0IG9mIG1lbW9yeSAtIGluIHdoaWNoIGNhc2UKKyAqCXRoZSBvcmlnaW5hbCBidWZmZXIgaXMgc3RpbGwgZnJlZWQuCisgKi8KKyAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKnNrYl9wYWR0byhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbGVuKQoreworCXVuc2lnbmVkIGludCBzaXplID0gc2tiLT5sZW47CisJaWYgKGxpa2VseShzaXplID49IGxlbikpCisJCXJldHVybiBza2I7CisJcmV0dXJuIHNrYl9wYWQoc2tiLCBsZW4tc2l6ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNrYl9hZGRfZGF0YShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgICAgIGNoYXIgX191c2VyICpmcm9tLCBpbnQgY29weSkKK3sKKwljb25zdCBpbnQgb2ZmID0gc2tiLT5sZW47CisKKwlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fTk9ORSkgeworCQlpbnQgZXJyID0gMDsKKwkJdW5zaWduZWQgaW50IGNzdW0gPSBjc3VtX2FuZF9jb3B5X2Zyb21fdXNlcihmcm9tLAorCQkJCQkJCSAgICBza2JfcHV0KHNrYiwgY29weSksCisJCQkJCQkJICAgIGNvcHksIDAsICZlcnIpOworCQlpZiAoIWVycikgeworCQkJc2tiLT5jc3VtID0gY3N1bV9ibG9ja19hZGQoc2tiLT5jc3VtLCBjc3VtLCBvZmYpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9IGVsc2UgaWYgKCFjb3B5X2Zyb21fdXNlcihza2JfcHV0KHNrYiwgY29weSksIGZyb20sIGNvcHkpKQorCQlyZXR1cm4gMDsKKworCV9fc2tiX3RyaW0oc2tiLCBvZmYpOworCXJldHVybiAtRUZBVUxUOworfQorCitzdGF0aWMgaW5saW5lIGludCBza2JfY2FuX2NvYWxlc2NlKHN0cnVjdCBza19idWZmICpza2IsIGludCBpLAorCQkJCSAgIHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb2ZmKQoreworCWlmIChpKSB7CisJCXN0cnVjdCBza2JfZnJhZ19zdHJ1Y3QgKmZyYWcgPSAmc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpIC0gMV07CisKKwkJcmV0dXJuIHBhZ2UgPT0gZnJhZy0+cGFnZSAmJgorCQkgICAgICAgb2ZmID09IGZyYWctPnBhZ2Vfb2Zmc2V0ICsgZnJhZy0+c2l6ZTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICoJc2tiX2xpbmVhcml6ZSAtIGNvbnZlcnQgcGFnZWQgc2tiIHRvIGxpbmVhciBvbmUKKyAqCUBza2I6IGJ1ZmZlciB0byBsaW5hcml6ZQorICoJQGdmcDogYWxsb2NhdGlvbiBtb2RlCisgKgorICoJSWYgdGhlcmUgaXMgbm8gZnJlZSBtZW1vcnkgLUVOT01FTSBpcyByZXR1cm5lZCwgb3RoZXJ3aXNlIHplcm8KKyAqCWlzIHJldHVybmVkIGFuZCB0aGUgb2xkIHNrYiBkYXRhIHJlbGVhc2VkLgorICovCitleHRlcm4gaW50IF9fc2tiX2xpbmVhcml6ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZ2ZwKTsKK3N0YXRpYyBpbmxpbmUgaW50IHNrYl9saW5lYXJpemUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGdmcCkKK3sKKwlyZXR1cm4gX19za2JfbGluZWFyaXplKHNrYiwgZ2ZwKTsKK30KKworLyoqCisgKglza2JfcG9zdHB1bGxfcmNzdW0gLSB1cGRhdGUgY2hlY2tzdW0gZm9yIHJlY2VpdmVkIHNrYiBhZnRlciBwdWxsCisgKglAc2tiOiBidWZmZXIgdG8gdXBkYXRlCisgKglAc3RhcnQ6IHN0YXJ0IG9mIGRhdGEgYmVmb3JlIHB1bGwKKyAqCUBsZW46IGxlbmd0aCBvZiBkYXRhIHB1bGxlZAorICoKKyAqCUFmdGVyIGRvaW5nIGEgcHVsbCBvbiBhIHJlY2VpdmVkIHBhY2tldCwgeW91IG5lZWQgdG8gY2FsbCB0aGlzIHRvCisgKgl1cGRhdGUgdGhlIENIRUNLU1VNX0hXIGNoZWNrc3VtLCBvciBzZXQgaXBfc3VtbWVkIHRvIENIRUNLU1VNX05PTkUKKyAqCXNvIHRoYXQgaXQgY2FuIGJlIHJlY29tcHV0ZWQgZnJvbSBzY3JhdGNoLgorICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBza2JfcG9zdHB1bGxfcmNzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJIGNvbnN0IHZvaWQgKnN0YXJ0LCBpbnQgbGVuKQoreworCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9IVykKKwkJc2tiLT5jc3VtID0gY3N1bV9zdWIoc2tiLT5jc3VtLCBjc3VtX3BhcnRpYWwoc3RhcnQsIGxlbiwgMCkpOworfQorCisvKioKKyAqCXBza2JfdHJpbV9yY3N1bSAtIHRyaW0gcmVjZWl2ZWQgc2tiIGFuZCB1cGRhdGUgY2hlY2tzdW0KKyAqCUBza2I6IGJ1ZmZlciB0byB0cmltCisgKglAbGVuOiBuZXcgbGVuZ3RoCisgKgorICoJVGhpcyBpcyBleGFjdGx5IHRoZSBzYW1lIGFzIHBza2JfdHJpbSBleGNlcHQgdGhhdCBpdCBlbnN1cmVzIHRoZQorICoJY2hlY2tzdW0gb2YgcmVjZWl2ZWQgcGFja2V0cyBhcmUgc3RpbGwgdmFsaWQgYWZ0ZXIgdGhlIG9wZXJhdGlvbi4KKyAqLworCitzdGF0aWMgaW5saW5lIGludCBwc2tiX3RyaW1fcmNzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGxlbikKK3sKKwlpZiAobGVuID49IHNrYi0+bGVuKQorCQlyZXR1cm4gMDsKKwlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fSFcpCisJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKKwlyZXR1cm4gX19wc2tiX3RyaW0oc2tiLCBsZW4pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKmttYXBfc2tiX2ZyYWcoY29uc3Qgc2tiX2ZyYWdfdCAqZnJhZykKK3sKKyNpZmRlZiBDT05GSUdfSElHSE1FTQorCUJVR19PTihpbl9pcnEoKSk7CisKKwlsb2NhbF9iaF9kaXNhYmxlKCk7CisjZW5kaWYKKwlyZXR1cm4ga21hcF9hdG9taWMoZnJhZy0+cGFnZSwgS01fU0tCX0RBVEFfU09GVElSUSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBrdW5tYXBfc2tiX2ZyYWcodm9pZCAqdmFkZHIpCit7CisJa3VubWFwX2F0b21pYyh2YWRkciwgS01fU0tCX0RBVEFfU09GVElSUSk7CisjaWZkZWYgQ09ORklHX0hJR0hNRU0KKwlsb2NhbF9iaF9lbmFibGUoKTsKKyNlbmRpZgorfQorCisjZGVmaW5lIHNrYl9xdWV1ZV93YWxrKHF1ZXVlLCBza2IpIFwKKwkJZm9yIChza2IgPSAocXVldWUpLT5uZXh0OwkJCQkJXAorCQkgICAgIHByZWZldGNoKHNrYi0+bmV4dCksIChza2IgIT0gKHN0cnVjdCBza19idWZmICopKHF1ZXVlKSk7CVwKKwkJICAgICBza2IgPSBza2ItPm5leHQpCisKKworZXh0ZXJuIHN0cnVjdCBza19idWZmICpza2JfcmVjdl9kYXRhZ3JhbShzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGZsYWdzLAorCQkJCQkgaW50IG5vYmxvY2ssIGludCAqZXJyKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgICAgZGF0YWdyYW1fcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAqc29jaywKKwkJCQkgICAgIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqd2FpdCk7CitleHRlcm4gaW50CSAgICAgICBza2JfY29weV9kYXRhZ3JhbV9pb3ZlYyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSwKKwkJCQkJICAgICAgIGludCBvZmZzZXQsIHN0cnVjdCBpb3ZlYyAqdG8sCisJCQkJCSAgICAgICBpbnQgc2l6ZSk7CitleHRlcm4gaW50CSAgICAgICBza2JfY29weV9hbmRfY3N1bV9kYXRhZ3JhbV9pb3ZlYyhjb25zdAorCQkJCQkJCXN0cnVjdCBza19idWZmICpza2IsCisJCQkJCQkJaW50IGhsZW4sCisJCQkJCQkJc3RydWN0IGlvdmVjICppb3YpOworZXh0ZXJuIHZvaWQJICAgICAgIHNrYl9mcmVlX2RhdGFncmFtKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gdW5zaWduZWQgaW50ICAgIHNrYl9jaGVja3N1bShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0LAorCQkJCSAgICBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgY3N1bSk7CitleHRlcm4gaW50CSAgICAgICBza2JfY29weV9iaXRzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQsCisJCQkJICAgICB2b2lkICp0bywgaW50IGxlbik7CitleHRlcm4gdW5zaWduZWQgaW50ICAgIHNrYl9jb3B5X2FuZF9jc3VtX2JpdHMoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICAgICAgaW50IG9mZnNldCwgdTggKnRvLCBpbnQgbGVuLAorCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgY3N1bSk7CitleHRlcm4gdm9pZAkgICAgICAgc2tiX2NvcHlfYW5kX2NzdW1fZGV2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHU4ICp0byk7CitleHRlcm4gdm9pZAkgICAgICAgc2tiX3NwbGl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJIHN0cnVjdCBza19idWZmICpza2IxLCBjb25zdCB1MzIgbGVuKTsKKworc3RhdGljIGlubGluZSB2b2lkICpza2JfaGVhZGVyX3BvaW50ZXIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZnNldCwKKwkJCQkgICAgICAgaW50IGxlbiwgdm9pZCAqYnVmZmVyKQoreworCWludCBobGVuID0gc2tiX2hlYWRsZW4oc2tiKTsKKworCWlmIChvZmZzZXQgKyBsZW4gPD0gaGxlbikKKwkJcmV0dXJuIHNrYi0+ZGF0YSArIG9mZnNldDsKKworCWlmIChza2JfY29weV9iaXRzKHNrYiwgb2Zmc2V0LCBidWZmZXIsIGxlbikgPCAwKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBidWZmZXI7Cit9CisKK2V4dGVybiB2b2lkIHNrYl9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgc2tiX2FkZF9tdHUoaW50IG10dSk7CisKKyNpZmRlZiBDT05GSUdfTkVURklMVEVSCitzdGF0aWMgaW5saW5lIHZvaWQgbmZfY29ubnRyYWNrX3B1dChzdHJ1Y3QgbmZfY29ubnRyYWNrICpuZmN0KQoreworCWlmIChuZmN0ICYmIGF0b21pY19kZWNfYW5kX3Rlc3QoJm5mY3QtPnVzZSkpCisJCW5mY3QtPmRlc3Ryb3kobmZjdCk7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgbmZfY29ubnRyYWNrX2dldChzdHJ1Y3QgbmZfY29ubnRyYWNrICpuZmN0KQoreworCWlmIChuZmN0KQorCQlhdG9taWNfaW5jKCZuZmN0LT51c2UpOworfQorc3RhdGljIGlubGluZSB2b2lkIG5mX3Jlc2V0KHN0cnVjdCBza19idWZmICpza2IpCit7CisJbmZfY29ubnRyYWNrX3B1dChza2ItPm5mY3QpOworCXNrYi0+bmZjdCA9IE5VTEw7CisjaWZkZWYgQ09ORklHX05FVEZJTFRFUl9ERUJVRworCXNrYi0+bmZfZGVidWcgPSAwOworI2VuZGlmCit9CitzdGF0aWMgaW5saW5lIHZvaWQgbmZfcmVzZXRfZGVidWcoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKyNpZmRlZiBDT05GSUdfTkVURklMVEVSX0RFQlVHCisJc2tiLT5uZl9kZWJ1ZyA9IDA7CisjZW5kaWYKK30KKworI2lmZGVmIENPTkZJR19CUklER0VfTkVURklMVEVSCitzdGF0aWMgaW5saW5lIHZvaWQgbmZfYnJpZGdlX3B1dChzdHJ1Y3QgbmZfYnJpZGdlX2luZm8gKm5mX2JyaWRnZSkKK3sKKwlpZiAobmZfYnJpZGdlICYmIGF0b21pY19kZWNfYW5kX3Rlc3QoJm5mX2JyaWRnZS0+dXNlKSkKKwkJa2ZyZWUobmZfYnJpZGdlKTsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBuZl9icmlkZ2VfZ2V0KHN0cnVjdCBuZl9icmlkZ2VfaW5mbyAqbmZfYnJpZGdlKQoreworCWlmIChuZl9icmlkZ2UpCisJCWF0b21pY19pbmMoJm5mX2JyaWRnZS0+dXNlKTsKK30KKyNlbmRpZiAvKiBDT05GSUdfQlJJREdFX05FVEZJTFRFUiAqLworI2Vsc2UgLyogQ09ORklHX05FVEZJTFRFUiAqLworc3RhdGljIGlubGluZSB2b2lkIG5mX3Jlc2V0KHN0cnVjdCBza19idWZmICpza2IpIHt9CisjZW5kaWYgLyogQ09ORklHX05FVEZJTFRFUiAqLworCisjZW5kaWYJLyogX19LRVJORUxfXyAqLworI2VuZGlmCS8qIF9MSU5VWF9TS0JVRkZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zbGFiLmggYi9pbmNsdWRlL2xpbnV4L3NsYWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTNjM2FiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9zbGFiLmgKQEAgLTAsMCArMSwxMjkgQEAKKy8qCisgKiBsaW51eC9tbS9zbGFiLmgKKyAqIFdyaXR0ZW4gYnkgTWFyayBIZW1tZW50LCAxOTk2LgorICogKG1hcmtoZUBuZXh0ZC5kZW1vbi5jby51aykKKyAqLworCisjaWZuZGVmIF9MSU5VWF9TTEFCX0gKKyNkZWZpbmUJX0xJTlVYX1NMQUJfSAorCisjaWYJZGVmaW5lZChfX0tFUk5FTF9fKQorCit0eXBlZGVmIHN0cnVjdCBrbWVtX2NhY2hlX3Mga21lbV9jYWNoZV90OworCisjaW5jbHVkZQk8bGludXgvY29uZmlnLmg+CS8qIGttYWxsb2Nfc2l6ZXMuaCBuZWVkcyBDT05GSUdfIG9wdGlvbnMgKi8KKyNpbmNsdWRlCTxsaW51eC9nZnAuaD4KKyNpbmNsdWRlCTxsaW51eC9pbml0Lmg+CisjaW5jbHVkZQk8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlCTxhc20vcGFnZS5oPgkJLyoga21hbGxvY19zaXplcy5oIG5lZWRzIFBBR0VfU0laRSAqLworI2luY2x1ZGUJPGFzbS9jYWNoZS5oPgkJLyoga21hbGxvY19zaXplcy5oIG5lZWRzIEwxX0NBQ0hFX0JZVEVTICovCisKKy8qIGZsYWdzIGZvciBrbWVtX2NhY2hlX2FsbG9jKCkgKi8KKyNkZWZpbmUJU0xBQl9OT0ZTCQlHRlBfTk9GUworI2RlZmluZQlTTEFCX05PSU8JCUdGUF9OT0lPCisjZGVmaW5lCVNMQUJfQVRPTUlDCQlHRlBfQVRPTUlDCisjZGVmaW5lCVNMQUJfVVNFUgkJR0ZQX1VTRVIKKyNkZWZpbmUJU0xBQl9LRVJORUwJCUdGUF9LRVJORUwKKyNkZWZpbmUJU0xBQl9ETUEJCUdGUF9ETUEKKworI2RlZmluZSBTTEFCX0xFVkVMX01BU0sJCUdGUF9MRVZFTF9NQVNLCisKKyNkZWZpbmUJU0xBQl9OT19HUk9XCQlfX0dGUF9OT19HUk9XCS8qIGRvbid0IGdyb3cgYSBjYWNoZSAqLworCisvKiBmbGFncyB0byBwYXNzIHRvIGttZW1fY2FjaGVfY3JlYXRlKCkuCisgKiBUaGUgZmlyc3QgMyBhcmUgb25seSB2YWxpZCB3aGVuIHRoZSBhbGxvY2F0b3IgYXMgYmVlbiBidWlsZAorICogU0xBQl9ERUJVR19TVVBQT1JULgorICovCisjZGVmaW5lCVNMQUJfREVCVUdfRlJFRQkJMHgwMDAwMDEwMFVMCS8qIFBlZm9ybSAoZXhwZW5zaXZlKSBjaGVja3Mgb24gZnJlZSAqLworI2RlZmluZQlTTEFCX0RFQlVHX0lOSVRJQUwJMHgwMDAwMDIwMFVMCS8qIENhbGwgY29uc3RydWN0b3IgKGFzIHZlcmlmaWVyKSAqLworI2RlZmluZQlTTEFCX1JFRF9aT05FCQkweDAwMDAwNDAwVUwJLyogUmVkIHpvbmUgb2JqcyBpbiBhIGNhY2hlICovCisjZGVmaW5lCVNMQUJfUE9JU09OCQkweDAwMDAwODAwVUwJLyogUG9pc29uIG9iamVjdHMgKi8KKyNkZWZpbmUJU0xBQl9OT19SRUFQCQkweDAwMDAxMDAwVUwJLyogbmV2ZXIgcmVhcCBmcm9tIHRoZSBjYWNoZSAqLworI2RlZmluZQlTTEFCX0hXQ0FDSEVfQUxJR04JMHgwMDAwMjAwMFVMCS8qIGFsaWduIG9ianMgb24gYSBoL3cgY2FjaGUgbGluZXMgKi8KKyNkZWZpbmUgU0xBQl9DQUNIRV9ETUEJCTB4MDAwMDQwMDBVTAkvKiB1c2UgR0ZQX0RNQSBtZW1vcnkgKi8KKyNkZWZpbmUgU0xBQl9NVVNUX0hXQ0FDSEVfQUxJR04JMHgwMDAwODAwMFVMCS8qIGZvcmNlIGFsaWdubWVudCAqLworI2RlZmluZSBTTEFCX1NUT1JFX1VTRVIJCTB4MDAwMTAwMDBVTAkvKiBzdG9yZSB0aGUgbGFzdCBvd25lciBmb3IgYnVnIGh1bnRpbmcgKi8KKyNkZWZpbmUgU0xBQl9SRUNMQUlNX0FDQ09VTlQJMHgwMDAyMDAwMFVMCS8qIHRyYWNrIHBhZ2VzIGFsbG9jYXRlZCB0byBpbmRpY2F0ZQorCQkJCQkJICAgd2hhdCBpcyByZWNsYWltYWJsZSBsYXRlciovCisjZGVmaW5lIFNMQUJfUEFOSUMJCTB4MDAwNDAwMDBVTAkvKiBwYW5pYyBpZiBrbWVtX2NhY2hlX2NyZWF0ZSgpIGZhaWxzICovCisjZGVmaW5lIFNMQUJfREVTVFJPWV9CWV9SQ1UJMHgwMDA4MDAwMFVMCS8qIGRlZmVyIGZyZWVpbmcgcGFnZXMgdG8gUkNVICovCisKKy8qIGZsYWdzIHBhc3NlZCB0byBhIGNvbnN0cnVjdG9yIGZ1bmMgKi8KKyNkZWZpbmUJU0xBQl9DVE9SX0NPTlNUUlVDVE9SCTB4MDAxVUwJCS8qIGlmIG5vdCBzZXQsIHRoZW4gZGVjb25zdHJ1Y3RvciAqLworI2RlZmluZSBTTEFCX0NUT1JfQVRPTUlDCTB4MDAyVUwJCS8qIHRlbGwgY29uc3RydWN0b3IgaXQgY2FuJ3Qgc2xlZXAgKi8KKyNkZWZpbmUJU0xBQl9DVE9SX1ZFUklGWQkweDAwNFVMCQkvKiB0ZWxsIGNvbnN0cnVjdG9yIGl0J3MgYSB2ZXJpZnkgY2FsbCAqLworCisvKiBwcm90b3R5cGVzICovCitleHRlcm4gdm9pZCBfX2luaXQga21lbV9jYWNoZV9pbml0KHZvaWQpOworCitleHRlcm4ga21lbV9jYWNoZV90ICprbWVtX2NhY2hlX2NyZWF0ZShjb25zdCBjaGFyICosIHNpemVfdCwgc2l6ZV90LCB1bnNpZ25lZCBsb25nLAorCQkJCSAgICAgICB2b2lkICgqKSh2b2lkICosIGttZW1fY2FjaGVfdCAqLCB1bnNpZ25lZCBsb25nKSwKKwkJCQkgICAgICAgdm9pZCAoKikodm9pZCAqLCBrbWVtX2NhY2hlX3QgKiwgdW5zaWduZWQgbG9uZykpOworZXh0ZXJuIGludCBrbWVtX2NhY2hlX2Rlc3Ryb3koa21lbV9jYWNoZV90ICopOworZXh0ZXJuIGludCBrbWVtX2NhY2hlX3NocmluayhrbWVtX2NhY2hlX3QgKik7CitleHRlcm4gdm9pZCAqa21lbV9jYWNoZV9hbGxvYyhrbWVtX2NhY2hlX3QgKiwgdW5zaWduZWQgaW50IF9fbm9jYXN0KTsKKyNpZmRlZiBDT05GSUdfTlVNQQorZXh0ZXJuIHZvaWQgKmttZW1fY2FjaGVfYWxsb2Nfbm9kZShrbWVtX2NhY2hlX3QgKiwgaW50KTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgKmttZW1fY2FjaGVfYWxsb2Nfbm9kZShrbWVtX2NhY2hlX3QgKmNhY2hlcCwgaW50IG5vZGUpCit7CisJcmV0dXJuIGttZW1fY2FjaGVfYWxsb2MoY2FjaGVwLCBHRlBfS0VSTkVMKTsKK30KKyNlbmRpZgorZXh0ZXJuIHZvaWQga21lbV9jYWNoZV9mcmVlKGttZW1fY2FjaGVfdCAqLCB2b2lkICopOworZXh0ZXJuIHVuc2lnbmVkIGludCBrbWVtX2NhY2hlX3NpemUoa21lbV9jYWNoZV90ICopOworCisvKiBTaXplIGRlc2NyaXB0aW9uIHN0cnVjdCBmb3IgZ2VuZXJhbCBjYWNoZXMuICovCitzdHJ1Y3QgY2FjaGVfc2l6ZXMgeworCXNpemVfdAkJIGNzX3NpemU7CisJa21lbV9jYWNoZV90CSpjc19jYWNoZXA7CisJa21lbV9jYWNoZV90CSpjc19kbWFjYWNoZXA7Cit9OworZXh0ZXJuIHN0cnVjdCBjYWNoZV9zaXplcyBtYWxsb2Nfc2l6ZXNbXTsKK2V4dGVybiB2b2lkICpfX2ttYWxsb2Moc2l6ZV90LCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QpOworCitzdGF0aWMgaW5saW5lIHZvaWQgKmttYWxsb2Moc2l6ZV90IHNpemUsIHVuc2lnbmVkIGludCBfX25vY2FzdCBmbGFncykKK3sKKwlpZiAoX19idWlsdGluX2NvbnN0YW50X3Aoc2l6ZSkpIHsKKwkJaW50IGkgPSAwOworI2RlZmluZSBDQUNIRSh4KSBcCisJCWlmIChzaXplIDw9IHgpIFwKKwkJCWdvdG8gZm91bmQ7IFwKKwkJZWxzZSBcCisJCQlpKys7CisjaW5jbHVkZSAia21hbGxvY19zaXplcy5oIgorI3VuZGVmIENBQ0hFCisJCXsKKwkJCWV4dGVybiB2b2lkIF9feW91X2Nhbm5vdF9rbWFsbG9jX3RoYXRfbXVjaCh2b2lkKTsKKwkJCV9feW91X2Nhbm5vdF9rbWFsbG9jX3RoYXRfbXVjaCgpOworCQl9Citmb3VuZDoKKwkJcmV0dXJuIGttZW1fY2FjaGVfYWxsb2MoKGZsYWdzICYgR0ZQX0RNQSkgPworCQkJbWFsbG9jX3NpemVzW2ldLmNzX2RtYWNhY2hlcCA6CisJCQltYWxsb2Nfc2l6ZXNbaV0uY3NfY2FjaGVwLCBmbGFncyk7CisJfQorCXJldHVybiBfX2ttYWxsb2Moc2l6ZSwgZmxhZ3MpOworfQorCitleHRlcm4gdm9pZCAqa2NhbGxvYyhzaXplX3QsIHNpemVfdCwgdW5zaWduZWQgaW50IF9fbm9jYXN0KTsKK2V4dGVybiB2b2lkIGtmcmVlKGNvbnN0IHZvaWQgKik7CitleHRlcm4gdW5zaWduZWQgaW50IGtzaXplKGNvbnN0IHZvaWQgKik7CisKK2V4dGVybiBpbnQgRkFTVENBTEwoa21lbV9jYWNoZV9yZWFwKGludCkpOworZXh0ZXJuIGludCBGQVNUQ0FMTChrbWVtX3B0cl92YWxpZGF0ZShrbWVtX2NhY2hlX3QgKmNhY2hlcCwgdm9pZCAqcHRyKSk7CisKKy8qIFN5c3RlbSB3aWRlIGNhY2hlcyAqLworZXh0ZXJuIGttZW1fY2FjaGVfdAkqdm1fYXJlYV9jYWNoZXA7CitleHRlcm4ga21lbV9jYWNoZV90CSpuYW1lc19jYWNoZXA7CitleHRlcm4ga21lbV9jYWNoZV90CSpmaWxlc19jYWNoZXA7CitleHRlcm4ga21lbV9jYWNoZV90CSpmaWxwX2NhY2hlcDsKK2V4dGVybiBrbWVtX2NhY2hlX3QJKmZzX2NhY2hlcDsKK2V4dGVybiBrbWVtX2NhY2hlX3QJKnNpZ25hbF9jYWNoZXA7CitleHRlcm4ga21lbV9jYWNoZV90CSpzaWdoYW5kX2NhY2hlcDsKK2V4dGVybiBrbWVtX2NhY2hlX3QJKmJpb19jYWNoZXA7CisKK2V4dGVybiBhdG9taWNfdCBzbGFiX3JlY2xhaW1fcGFnZXM7CisKKyNlbmRpZgkvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZgkvKiBfTElOVVhfU0xBQl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NtYi5oIGIvaW5jbHVkZS9saW51eC9zbWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDE2MjIwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9zbWIuaApAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqICBzbWIuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYgYnkgUGFhbC1Lci4gRW5nc3RhZCBhbmQgVm9sa2VyIExlbmRlY2tlCisgKiAgQ29weXJpZ2h0IChDKSAxOTk3IGJ5IFZvbGtlciBMZW5kZWNrZQorICoKKyAqLworCisjaWZuZGVmIF9MSU5VWF9TTUJfSAorI2RlZmluZSBfTElOVVhfU01CX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK2VudW0gc21iX3Byb3RvY29sIHsgCisJU01CX1BST1RPQ09MX05PTkUsIAorCVNNQl9QUk9UT0NPTF9DT1JFLCAKKwlTTUJfUFJPVE9DT0xfQ09SRVBMVVMsIAorCVNNQl9QUk9UT0NPTF9MQU5NQU4xLCAKKwlTTUJfUFJPVE9DT0xfTEFOTUFOMiwgCisJU01CX1BST1RPQ09MX05UMSAKK307CisKK2VudW0gc21iX2Nhc2VfaG5kbCB7CisJU01CX0NBU0VfREVGQVVMVCwKKwlTTUJfQ0FTRV9MT1dFUiwKKwlTTUJfQ0FTRV9VUFBFUgorfTsKKworc3RydWN0IHNtYl9kc2thdHRyIHsKKyAgICAgICAgX191MTYgdG90YWw7CisgICAgICAgIF9fdTE2IGFsbG9jYmxvY2tzOworICAgICAgICBfX3UxNiBibG9ja3NpemU7CisgICAgICAgIF9fdTE2IGZyZWU7Cit9OworCitzdHJ1Y3Qgc21iX2Nvbm5fb3B0IHsKKworICAgICAgICAvKiBUaGUgc29ja2V0ICovCisJdW5zaWduZWQgaW50IGZkOworCisJZW51bSBzbWJfcHJvdG9jb2wgcHJvdG9jb2w7CisJZW51bSBzbWJfY2FzZV9obmRsIGNhc2VfaGFuZGxpbmc7CisKKwkvKiBDb25uZWN0aW9uLU9wdGlvbnMgKi8KKworCV9fdTMyICAgICAgICAgICAgICBtYXhfeG1pdDsKKwlfX3UxNiAgICAgICAgICAgICAgc2VydmVyX3VpZDsKKwlfX3UxNiAgICAgICAgICAgICAgdGlkOworCisgICAgICAgIC8qIFRoZSBmb2xsb3dpbmcgYXJlIExBTk1BTiAxLjAgb3B0aW9ucyAqLworICAgICAgICBfX3UxNiAgICAgICAgICAgICAgc2VjbW9kZTsKKyAgICAgICAgX191MTYgICAgICAgICAgICAgIG1heG11eDsKKyAgICAgICAgX191MTYgICAgICAgICAgICAgIG1heHZjczsKKyAgICAgICAgX191MTYgICAgICAgICAgICAgIHJhd21vZGU7CisgICAgICAgIF9fdTMyICAgICAgICAgICAgICBzZXNza2V5OworCisJLyogVGhlIGZvbGxvd2luZyBhcmUgTlQgTE0gMC4xMiBvcHRpb25zICovCisJX191MzIgICAgICAgICAgICAgIG1heHJhdzsKKwlfX3UzMiAgICAgICAgICAgICAgY2FwYWJpbGl0aWVzOworCV9fczE2ICAgICAgICAgICAgICBzZXJ2ZXJ6b25lOworfTsKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2RlZmluZSBTTUJfTkxTX01BWE5BTUVMRU4gMjAKK3N0cnVjdCBzbWJfbmxzX2NvZGVwYWdlIHsKKwljaGFyIGxvY2FsX25hbWVbU01CX05MU19NQVhOQU1FTEVOXTsKKwljaGFyIHJlbW90ZV9uYW1lW1NNQl9OTFNfTUFYTkFNRUxFTl07Cit9OworCisKKyNkZWZpbmUgU01CX01BWE5BTUVMRU4gMjU1CisjZGVmaW5lIFNNQl9NQVhQQVRITEVOIDEwMjQKKworLyoKKyAqIENvbnRhaW5zIGFsbCByZWxldmFudCBkYXRhIG9uIGEgU01CIG5ldHdvcmtlZCBmaWxlLgorICovCitzdHJ1Y3Qgc21iX2ZhdHRyIHsKKwlfX3UxNiBhdHRyOworCisJdW5zaWduZWQgbG9uZwlmX2lubzsKKwl1bW9kZV90CQlmX21vZGU7CisJbmxpbmtfdAkJZl9ubGluazsKKwl1aWRfdAkJZl91aWQ7CisJZ2lkX3QJCWZfZ2lkOworCWRldl90CQlmX3JkZXY7CisJbG9mZl90CQlmX3NpemU7CisJc3RydWN0IHRpbWVzcGVjCWZfYXRpbWU7CisJc3RydWN0IHRpbWVzcGVjIGZfbXRpbWU7CisJc3RydWN0IHRpbWVzcGVjIGZfY3RpbWU7CisJdW5zaWduZWQgbG9uZwlmX2Jsa3NpemU7CisJdW5zaWduZWQgbG9uZwlmX2Jsb2NrczsKKwlpbnQJCWZfdW5peDsKK307CisKK2VudW0gc21iX2Nvbm5fc3RhdGUgeworCUNPTk5fVkFMSUQsCQkvKiBldmVyeXRoaW5nJ3MgZmluZSAqLworCUNPTk5fSU5WQUxJRCwJCS8qIFNvbWV0aGluZyB3ZW50IHdyb25nLCBidXQgZGlkIG5vdAorCQkJCSAgIHRyeSB0byByZWNvbm5lY3QgeWV0LiAqLworCUNPTk5fUkVUUklFRCwJCS8qIFRyaWVkIGEgcmVjb25uZWN0aW9uLCBidXQgd2FzIHJlZnVzZWQgKi8KKwlDT05OX1JFVFJZSU5HCQkvKiBDdXJyZW50bHkgdHJ5aW5nIHRvIHJlY29ubmVjdCAqLworfTsKKworI2RlZmluZSBTTUJfU1VQRVJfTUFHSUMgICAgICAgICAgICAgICAweDUxN0IKKworI2RlZmluZSBTTUJfSEVBREVSX0xFTiAgIDM3ICAgICAvKiBpbmNsdWRlcyBldmVyeXRoaW5nIHVwIHRvLCBidXQgbm90CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGluY2x1ZGluZyBzbWJfYmNjICovCisKKyNkZWZpbmUgU01CX0lOSVRJQUxfUEFDS0VUX1NJWkUJCTQwMDAKKyNkZWZpbmUgU01CX01BWF9QQUNLRVRfU0laRQkJMzI3NjgKKworLyogcmVzZXJ2ZSB0aGlzIG11Y2ggc3BhY2UgZm9yIHRyYW5zMiBwYXJhbWV0ZXJzLiBTaG91bGRuJ3QgaGF2ZSB0byBiZSBtb3JlCisgICB0aGFuIDEwIG9yIHNvLCBidXQgT1MvMiBzZWVtcyBoYXBwaWVyIGxpa2UgdGhpcy4gKi8KKyNkZWZpbmUgU01CX1RSQU5TMl9NQVhfUEFSQU0gNjQKKworI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc21iX2ZzLmggYi9pbmNsdWRlL2xpbnV4L3NtYl9mcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0MTUzMTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3NtYl9mcy5oCkBAIC0wLDAgKzEsMjA0IEBACisvKgorICogIHNtYl9mcy5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NSBieSBQYWFsLUtyLiBFbmdzdGFkIGFuZCBWb2xrZXIgTGVuZGVja2UKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTcgYnkgVm9sa2VyIExlbmRlY2tlCisgKgorICovCisKKyNpZm5kZWYgX0xJTlVYX1NNQl9GU19ICisjZGVmaW5lIF9MSU5VWF9TTUJfRlNfSAorCisjaW5jbHVkZSA8bGludXgvc21iLmg+CisjaW5jbHVkZSA8bGludXgvc21iX2ZzX2kuaD4KKyNpbmNsdWRlIDxsaW51eC9zbWJfZnNfc2IuaD4KKworLyoKKyAqIGlvY3RsIGNvbW1hbmRzCisgKi8KKyNkZWZpbmUJU01CX0lPQ19HRVRNT1VOVFVJRAkJX0lPUigndScsIDEsIF9fa2VybmVsX29sZF91aWRfdCkKKyNkZWZpbmUgU01CX0lPQ19ORVdDT05OICAgICAgICAgICAgICAgICBfSU9XKCd1JywgMiwgc3RydWN0IHNtYl9jb25uX29wdCkKKworLyogX19rZXJuZWxfdWlkX3QgY2FuIG5ldmVyIGNoYW5nZSwgc28gd2UgaGF2ZSB0byB1c2UgX19rZXJuZWxfdWlkMzJfdCAqLworI2RlZmluZQlTTUJfSU9DX0dFVE1PVU5UVUlEMzIJCV9JT1IoJ3UnLCAzLCBfX2tlcm5lbF91aWQzMl90KQorCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvc21iX21vdW50Lmg+CisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzbWJfc2JfaW5mbyAqU01CX1NCKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJcmV0dXJuIHNiLT5zX2ZzX2luZm87Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNtYl9pbm9kZV9pbmZvICpTTUJfSShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXJldHVybiBjb250YWluZXJfb2YoaW5vZGUsIHN0cnVjdCBzbWJfaW5vZGVfaW5mbywgdmZzX2lub2RlKTsKK30KKworLyogbWFjcm8gbmFtZXMgYXJlIHNob3J0IGZvciB3b3JkLCBkb3VibGUtd29yZCwgbG9uZyB2YWx1ZSAoPykgKi8KKyNkZWZpbmUgV1ZBTChidWYscG9zKSBcCisJKGxlMTZfdG9fY3B1KGdldF91bmFsaWduZWQoKHUxNiAqKSgodTggKikoYnVmKSArIChwb3MpKSkpKQorI2RlZmluZSBEVkFMKGJ1Zixwb3MpIFwKKwkobGUzMl90b19jcHUoZ2V0X3VuYWxpZ25lZCgodTMyICopKCh1OCAqKShidWYpICsgKHBvcykpKSkpCisjZGVmaW5lIExWQUwoYnVmLHBvcykgXAorCShsZTY0X3RvX2NwdShnZXRfdW5hbGlnbmVkKCh1NjQgKikoKHU4ICopKGJ1ZikgKyAocG9zKSkpKSkKKyNkZWZpbmUgV1NFVChidWYscG9zLHZhbCkgXAorCXB1dF91bmFsaWduZWQoY3B1X3RvX2xlMTYoKHUxNikodmFsKSksICh1MTYgKikoKHU4ICopKGJ1ZikgKyAocG9zKSkpCisjZGVmaW5lIERTRVQoYnVmLHBvcyx2YWwpIFwKKwlwdXRfdW5hbGlnbmVkKGNwdV90b19sZTMyKCh1MzIpKHZhbCkpLCAodTMyICopKCh1OCAqKShidWYpICsgKHBvcykpKQorI2RlZmluZSBMU0VUKGJ1Zixwb3MsdmFsKSBcCisJcHV0X3VuYWxpZ25lZChjcHVfdG9fbGU2NCgodTY0KSh2YWwpKSwgKHU2NCAqKSgodTggKikoYnVmKSArIChwb3MpKSkKKworLyogd2hlcmUgdG8gZmluZCB0aGUgYmFzZSBvZiB0aGUgU01CIHBhY2tldCBwcm9wZXIgKi8KKyNkZWZpbmUgc21iX2Jhc2UoYnVmKSAoKHU4ICopKCgodTggKikoYnVmKSkrNCkpCisKKyNpZmRlZiBERUJVR19TTUJfTUFMTE9DCisKKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKK2V4dGVybiBpbnQgc21iX21hbGxvY2VkOworZXh0ZXJuIGludCBzbWJfY3VycmVudF92bWFsbG9jZWQ7CitleHRlcm4gaW50IHNtYl9jdXJyZW50X2ttYWxsb2NlZDsKKworc3RhdGljIGlubGluZSB2b2lkICoKK3NtYl92bWFsbG9jKHVuc2lnbmVkIGludCBzaXplKQoreworICAgICAgICBzbWJfbWFsbG9jZWQgKz0gMTsKKyAgICAgICAgc21iX2N1cnJlbnRfdm1hbGxvY2VkICs9IDE7CisgICAgICAgIHJldHVybiB2bWFsbG9jKHNpemUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3NtYl92ZnJlZSh2b2lkICpvYmopCit7CisgICAgICAgIHNtYl9jdXJyZW50X3ZtYWxsb2NlZCAtPSAxOworICAgICAgICB2ZnJlZShvYmopOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKgorc21iX2ttYWxsb2Moc2l6ZV90IHNpemUsIGludCBmbGFncykKK3sKKwlzbWJfbWFsbG9jZWQgKz0gMTsKKwlzbWJfY3VycmVudF9rbWFsbG9jZWQgKz0gMTsKKwlyZXR1cm4ga21hbGxvYyhzaXplLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorc21iX2tmcmVlKHZvaWQgKm9iaikKK3sKKwlzbWJfY3VycmVudF9rbWFsbG9jZWQgLT0gMTsKKwlrZnJlZShvYmopOworfQorCisjZWxzZSAvKiBERUJVR19TTUJfTUFMTE9DICovCisKKyNkZWZpbmUgc21iX2ttYWxsb2MocyxwKQlrbWFsbG9jKHMscCkKKyNkZWZpbmUgc21iX2tmcmVlKG8pCQlrZnJlZShvKQorI2RlZmluZSBzbWJfdm1hbGxvYyhzKQkJdm1hbGxvYyhzKQorI2RlZmluZSBzbWJfdmZyZWUobykJCXZmcmVlKG8pCisKKyNlbmRpZiAvKiBERUJVR19TTUJfTUFMTE9DICovCisKKy8qCisgKiBGbGFncyBmb3IgdGhlIGluLW1lbW9yeSBpbm9kZQorICovCisjZGVmaW5lIFNNQl9GX0xPQ0FMV1JJVEUJMHgwMgkvKiBmaWxlIG1vZGlmaWVkIGxvY2FsbHkgKi8KKworCisvKiBOVDEgcHJvdG9jb2wgY2FwYWJpbGl0eSBiaXRzICovCisjZGVmaW5lIFNNQl9DQVBfUkFXX01PREUgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNQl9DQVBfTVBYX01PREUgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFNNQl9DQVBfVU5JQ09ERSAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIFNNQl9DQVBfTEFSR0VfRklMRVMgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIFNNQl9DQVBfTlRfU01CUyAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIFNNQl9DQVBfUlBDX1JFTU9URV9BUElTICAweDAwMDAwMDIwCisjZGVmaW5lIFNNQl9DQVBfU1RBVFVTMzIgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIFNNQl9DQVBfTEVWRUxfSUlfT1BMT0NLUyAweDAwMDAwMDgwCisjZGVmaW5lIFNNQl9DQVBfTE9DS19BTkRfUkVBRCAgICAweDAwMDAwMTAwCisjZGVmaW5lIFNNQl9DQVBfTlRfRklORCAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIFNNQl9DQVBfREZTICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIFNNQl9DQVBfTEFSR0VfUkVBRFggICAgICAweDAwMDA0MDAwCisjZGVmaW5lIFNNQl9DQVBfTEFSR0VfV1JJVEVYICAgICAweDAwMDA4MDAwCisjZGVmaW5lIFNNQl9DQVBfVU5JWCAgICAgICAgICAgICAweDAwODAwMDAwCS8qIHVub2ZmaWNpYWwgLi4uICovCisKKworLyoKKyAqIFRoaXMgaXMgdGhlIHRpbWUgd2UgYWxsb3cgYW4gaW5vZGUsIGRlbnRyeSBvciBkaXIgY2FjaGUgdG8gbGl2ZS4gSXQgaXMgYmFkCisgKiBmb3IgcGVyZm9ybWFuY2UgdG8gaGF2ZSBzaG9ydGVyIHR0bCBvbiBhbiBpbm9kZSB0aGFuIG9uIHRoZSBjYWNoZS4gSXQgY2FuCisgKiBjYXVzZSByZWZyZXNoIG9uIGVhY2ggaW5vZGUgZm9yIGEgZGlyIGxpc3RpbmcgLi4uIG9uZS1ieS1vbmUKKyAqLworI2RlZmluZSBTTUJfTUFYX0FHRShzZXJ2ZXIpICgoKHNlcnZlciktPm1udC0+dHRsICogSFopIC8gMTAwMCkKKworc3RhdGljIGlubGluZSB2b2lkCitzbWJfYWdlX2RlbnRyeShzdHJ1Y3Qgc21iX3NiX2luZm8gKnNlcnZlciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworCWRlbnRyeS0+ZF90aW1lID0gamlmZmllcyAtIFNNQl9NQVhfQUdFKHNlcnZlcik7Cit9CisKK3N0cnVjdCBzbWJfY2FjaGVfaGVhZCB7CisJdGltZV90CQltdGltZTsJLyogdW51c2VkICovCisJdW5zaWduZWQgbG9uZwl0aW1lOwkvKiBjYWNoZSBhZ2UgKi8KKwl1bnNpZ25lZCBsb25nCWVuZDsJLyogbGFzdCB2YWxpZCBmcG9zIGluIGNhY2hlICovCisJaW50CQllb2Y7Cit9OworCisjZGVmaW5lIFNNQl9ESVJDQUNIRV9TSVpFCSgoaW50KShQQUdFX0NBQ0hFX1NJWkUvc2l6ZW9mKHN0cnVjdCBkZW50cnkgKikpKQordW5pb24gc21iX2Rpcl9jYWNoZSB7CisJc3RydWN0IHNtYl9jYWNoZV9oZWFkICAgaGVhZDsKKwlzdHJ1Y3QgZGVudHJ5ICAgICAgICAgICAqZGVudHJ5W1NNQl9ESVJDQUNIRV9TSVpFXTsKK307CisKKyNkZWZpbmUgU01CX0ZJUlNUQ0FDSEVfU0laRQkoKGludCkoKFNNQl9ESVJDQUNIRV9TSVpFICogXAorCXNpemVvZihzdHJ1Y3QgZGVudHJ5ICopIC0gc2l6ZW9mKHN0cnVjdCBzbWJfY2FjaGVfaGVhZCkpIC8gXAorCXNpemVvZihzdHJ1Y3QgZGVudHJ5ICopKSkKKworI2RlZmluZSBTTUJfRElSQ0FDSEVfU1RBUlQgICAgICAoU01CX0RJUkNBQ0hFX1NJWkUgLSBTTUJfRklSU1RDQUNIRV9TSVpFKQorCitzdHJ1Y3Qgc21iX2NhY2hlX2NvbnRyb2wgeworCXN0cnVjdCAgc21iX2NhY2hlX2hlYWQJCWhlYWQ7CisJc3RydWN0ICBwYWdlCQkJKnBhZ2U7CisJdW5pb24gICBzbWJfZGlyX2NhY2hlCQkqY2FjaGU7CisJdW5zaWduZWQgbG9uZwkJCWZwb3MsIG9mczsKKwlpbnQJCQkJZmlsbGVkLCB2YWxpZCwgaWR4OworfTsKKworI2RlZmluZSBTTUJfT1BTX05VTV9TVEFUSUMJNQorc3RydWN0IHNtYl9vcHMgeworCWludCAoKnJlYWQpKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGludCBjb3VudCwKKwkJICAgIGNoYXIgKmRhdGEpOworCWludCAoKndyaXRlKShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBpbnQgY291bnQsIGNvbnN0CisJCSAgICAgY2hhciAqZGF0YSk7CisJaW50ICgqcmVhZGRpcikoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKmRpcmVudCwgZmlsbGRpcl90IGZpbGxkaXIsCisJCSAgICAgICBzdHJ1Y3Qgc21iX2NhY2hlX2NvbnRyb2wgKmN0bCk7CisKKwlpbnQgKCpnZXRhdHRyKShzdHJ1Y3Qgc21iX3NiX2luZm8gKnNlcnZlciwgc3RydWN0IGRlbnRyeSAqZGlyLAorCQkgICAgICAgc3RydWN0IHNtYl9mYXR0ciAqZmF0dHIpOworCS8qIGludCAoKnNldGF0dHIpKC4uLik7ICovICAgICAgLyogc2V0YXR0ciBpcyByZWFsbHkgaWNreSEgKi8KKworCWludCAoKnRydW5jYXRlKShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgbGVuZ3RoKTsKKworCisJLyogLS0tIC0tLSAtLS0gZW5kIG9mICJzdGF0aWMiIGVudHJpZXMgLS0tIC0tLSAtLS0gKi8KKworCWludCAoKmNvbnZlcnQpKHVuc2lnbmVkIGNoYXIgKm91dHB1dCwgaW50IG9sZW4sCisJCSAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgaW50IGlsZW4sCisJCSAgICAgICBzdHJ1Y3QgbmxzX3RhYmxlICpubHNfZnJvbSwKKwkJICAgICAgIHN0cnVjdCBubHNfdGFibGUgKm5sc190byk7Cit9OworCitzdGF0aWMgaW5saW5lIGludAorc21iX2lzX29wZW4oc3RydWN0IGlub2RlICppKQoreworCXJldHVybiAoU01CX0koaSktPm9wZW4gPT0gc2VydmVyX2Zyb21faW5vZGUoaSktPmdlbmVyYXRpb24pOworfQorCitleHRlcm4gdm9pZCBzbWJfaW5zdGFsbF9udWxsX29wcyhzdHJ1Y3Qgc21iX29wcyAqKTsKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfTElOVVhfU01CX0ZTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc21iX2ZzX2kuaCBiL2luY2x1ZGUvbGludXgvc21iX2ZzX2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTE2OTU0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9zbWJfZnNfaS5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiAgc21iX2ZzX2kuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTUgYnkgUGFhbC1Lci4gRW5nc3RhZCBhbmQgVm9sa2VyIExlbmRlY2tlCisgKiAgQ29weXJpZ2h0IChDKSAxOTk3IGJ5IFZvbGtlciBMZW5kZWNrZQorICoKKyAqLworCisjaWZuZGVmIF9MSU5VWF9TTUJfRlNfSQorI2RlZmluZSBfTElOVVhfU01CX0ZTX0kKKworI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisKKy8qCisgKiBzbWIgZnMgaW5vZGUgZGF0YSAoaW4gbWVtb3J5IG9ubHkpCisgKi8KK3N0cnVjdCBzbWJfaW5vZGVfaW5mbyB7CisKKwkvKgorCSAqIGZpbGUgaGFuZGxlcyBhcmUgbG9jYWwgdG8gYSBjb25uZWN0aW9uLiBBIGZpbGUgaXMgb3BlbiBpZgorCSAqIChvcGVuID09IGdlbmVyYXRpb24pLgorCSAqLworICAgICAgICB1bnNpZ25lZCBpbnQgb3BlbjsJLyogb3BlbiBnZW5lcmF0aW9uICovCisJX191MTYgZmlsZWlkOwkJLyogV2hhdCBpZCB0byBoYW5kbGUgYSBmaWxlIHdpdGg/ICovCisJX191MTYgYXR0cjsJCS8qIEF0dHJpYnV0ZSBmaWVsZHMsIERPUyB2YWx1ZSAqLworCisJX191MTYgYWNjZXNzOwkJLyogQWNjZXNzIG1vZGUgKi8KKwlfX3UxNiBmbGFnczsKKwl1bnNpZ25lZCBsb25nIG9sZG10aW1lOwkvKiBsYXN0IHRpbWUgcmVmcmVzaGVkICovCisJdW5zaWduZWQgbG9uZyBjbG9zZWQ7CS8qIHRpbWVzdGFtcCB3aGVuIGNsb3NlZCAqLworCXVuc2lnbmVkIG9wZW5lcnM7CS8qIG51bWJlciBvZiBmaWxlaWQgdXNlcnMgKi8KKworCXN0cnVjdCBpbm9kZSB2ZnNfaW5vZGU7CS8qIG11c3QgYmUgYXQgdGhlIGVuZCAqLworfTsKKworI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc21iX2ZzX3NiLmggYi9pbmNsdWRlL2xpbnV4L3NtYl9mc19zYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViNGFlMmMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3NtYl9mc19zYi5oCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogIHNtYl9mc19zYi5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NSBieSBQYWFsLUtyLiBFbmdzdGFkIGFuZCBWb2xrZXIgTGVuZGVja2UKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTcgYnkgVm9sa2VyIExlbmRlY2tlCisgKgorICovCisKKyNpZm5kZWYgX1NNQl9GU19TQgorI2RlZmluZSBfU01CX0ZTX1NCCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NtYi5oPgorCisvKgorICogVXBwZXIgbGltaXQgb24gdGhlIHRvdGFsIG51bWJlciBvZiBhY3RpdmUgc21iX3JlcXVlc3Qgc3RydWN0cy4KKyAqLworI2RlZmluZSBNQVhfUkVRVUVTVF9IQVJEICAgICAgIDI1NgorCitlbnVtIHNtYl9yZWNlaXZlX3N0YXRlIHsKKwlTTUJfUkVDVl9TVEFSVCwJCS8qIE5vIGRhdGEgcmVhZCwgbG9va2luZyBmb3IgbGVuZ3RoICsgc2lnICovCisJU01CX1JFQ1ZfSEVBREVSLAkvKiBSZWFkaW5nIHRoZSBoZWFkZXIgZGF0YSAqLworCVNNQl9SRUNWX0hDT01QTEVURSwJLyogRG9uZSB3aXRoIHRoZSBoZWFkZXIgKi8KKwlTTUJfUkVDVl9QQVJBTSwJCS8qIFJlYWRpbmcgcGFyYW1ldGVyIHdvcmRzICovCisJU01CX1JFQ1ZfREFUQSwJCS8qIFJlYWRpbmcgZGF0YSBieXRlcyAqLworCVNNQl9SRUNWX0VORCwJCS8qIEVuZCBvZiByZXF1ZXN0ICovCisJU01CX1JFQ1ZfRFJPUCwJCS8qIERyb3BwaW5nIHRoaXMgU01CICovCisJU01CX1JFQ1ZfUkVRVUVTVCwJLyogUmVjZWl2ZWQgYSByZXF1ZXN0IGFuZCBub3QgYSByZXBseSAqLworfTsKKworLyogc3RydWN0dXJlIGFjY2VzcyBtYWNyb3MgKi8KKyNkZWZpbmUgc2VydmVyX2Zyb21faW5vZGUoaW5vZGUpIFNNQl9TQigoaW5vZGUpLT5pX3NiKQorI2RlZmluZSBzZXJ2ZXJfZnJvbV9kZW50cnkoZGVudHJ5KSBTTUJfU0IoKGRlbnRyeSktPmRfc2IpCisjZGVmaW5lIFNCX29mKHNlcnZlcikgKChzZXJ2ZXIpLT5zdXBlcl9ibG9jaykKKworc3RydWN0IHNtYl9zYl9pbmZvIHsKKwkvKiBMaXN0IG9mIGFsbCBzbWJmcyBzdXBlcmJsb2NrcyAqLworCXN0cnVjdCBsaXN0X2hlYWQgZW50cnk7CisKKyAgICAgICAgZW51bSBzbWJfY29ubl9zdGF0ZSBzdGF0ZTsKKwlzdHJ1Y3QgZmlsZSAqIHNvY2tfZmlsZTsKKwlpbnQgY29ubl9lcnJvcjsKKwllbnVtIHNtYl9yZWNlaXZlX3N0YXRlIHJzdGF0ZTsKKworCWF0b21pY190IG5yX3JlcXVlc3RzOworCXN0cnVjdCBsaXN0X2hlYWQgeG1pdHE7CisJc3RydWN0IGxpc3RfaGVhZCByZWN2cTsKKwl1MTYgbWlkOworCisgICAgICAgIHN0cnVjdCBzbWJfbW91bnRfZGF0YV9rZXJuZWwgKm1udDsKKworCS8qIENvbm5lY3Rpb25zIGFyZSBjb3VudGVkLiBFYWNoIHRpbWUgYSBuZXcgc29ja2V0IGFycml2ZXMsCisJICogZ2VuZXJhdGlvbiBpcyBpbmNyZW1lbnRlZC4KKwkgKi8KKwl1bnNpZ25lZCBpbnQgZ2VuZXJhdGlvbjsKKwlwaWRfdCBjb25uX3BpZDsKKwlzdHJ1Y3Qgc21iX2Nvbm5fb3B0IG9wdDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBjb25uX3dxOworCWludCBjb25uX2NvbXBsZXRlOworCXN0cnVjdCBzZW1hcGhvcmUgc2VtOworCisJdW5zaWduZWQgY2hhciAgICAgIGhlYWRlcltTTUJfSEVBREVSX0xFTiArIDIwKjIgKyAyXTsKKwl1MzIgICAgICAgICAgICAgICAgaGVhZGVyX2xlbjsKKwl1MzIgICAgICAgICAgICAgICAgc21iX2xlbjsKKwl1MzIgICAgICAgICAgICAgICAgc21iX3JlYWQ7CisKKyAgICAgICAgLyogV2UgdXNlIG91ciBvd24gZGF0YV9yZWFkeSBjYWxsYmFjaywgYnV0IG5lZWQgdGhlIG9yaWdpbmFsIG9uZSAqLworICAgICAgICB2b2lkICpkYXRhX3JlYWR5OworCisJLyogbmxzIHBvaW50ZXJzIGZvciBjb2RlcGFnZSBjb252ZXJzaW9ucyAqLworCXN0cnVjdCBubHNfdGFibGUgKnJlbW90ZV9ubHM7CisJc3RydWN0IG5sc190YWJsZSAqbG9jYWxfbmxzOworCisJc3RydWN0IHNtYl9vcHMgKm9wczsKKworCXN0cnVjdCBzdXBlcl9ibG9jayAqc3VwZXJfYmxvY2s7Cit9OworCitzdGF0aWMgaW5saW5lIGludAorc21iX2xvY2tfc2VydmVyX2ludGVycnVwdGlibGUoc3RydWN0IHNtYl9zYl9pbmZvICpzZXJ2ZXIpCit7CisJcmV0dXJuIGRvd25faW50ZXJydXB0aWJsZSgmKHNlcnZlci0+c2VtKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorc21iX2xvY2tfc2VydmVyKHN0cnVjdCBzbWJfc2JfaW5mbyAqc2VydmVyKQoreworCWRvd24oJihzZXJ2ZXItPnNlbSkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3NtYl91bmxvY2tfc2VydmVyKHN0cnVjdCBzbWJfc2JfaW5mbyAqc2VydmVyKQoreworCXVwKCYoc2VydmVyLT5zZW0pKTsKK30KKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NtYl9tb3VudC5oIGIvaW5jbHVkZS9saW51eC9zbWJfbW91bnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTBmMDBjYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvc21iX21vdW50LmgKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqICBzbWJfbW91bnQuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYgYnkgUGFhbC1Lci4gRW5nc3RhZCBhbmQgVm9sa2VyIExlbmRlY2tlCisgKiAgQ29weXJpZ2h0IChDKSAxOTk3IGJ5IFZvbGtlciBMZW5kZWNrZQorICoKKyAqLworCisjaWZuZGVmIF9MSU5VWF9TTUJfTU9VTlRfSAorI2RlZmluZSBfTElOVVhfU01CX01PVU5UX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNkZWZpbmUgU01CX01PVU5UX1ZFUlNJT04JNgorCitzdHJ1Y3Qgc21iX21vdW50X2RhdGEgeworCWludCB2ZXJzaW9uOworCV9fa2VybmVsX3VpZF90IG1vdW50ZWRfdWlkOyAvKiBXaG8gbWF5IHVtb3VudCgpIHRoaXMgZmlsZXN5c3RlbT8gKi8KKwlfX2tlcm5lbF91aWRfdCB1aWQ7CisJX19rZXJuZWxfZ2lkX3QgZ2lkOworCV9fa2VybmVsX21vZGVfdCBmaWxlX21vZGU7CisJX19rZXJuZWxfbW9kZV90IGRpcl9tb2RlOworfTsKKworCisjaWZkZWYgX19LRVJORUxfXworCisvKiAidmVycyIgaW4gYmlnLWVuZGlhbiAqLworI2RlZmluZSBTTUJfTU9VTlRfQVNDSUkgMHg3NjY1NzI3MworCisjZGVmaW5lIFNNQl9NT1VOVF9PTERWRVJTSU9OCTYKKyN1bmRlZiBTTUJfTU9VTlRfVkVSU0lPTgorI2RlZmluZSBTTUJfTU9VTlRfVkVSU0lPTgk3CisKKy8qIGZsYWdzICovCisjZGVmaW5lIFNNQl9NT1VOVF9XSU45NQkJMHgwMDAxCS8qIFdpbiA5NSBzZXJ2ZXIgKi8KKyNkZWZpbmUgU01CX01PVU5UX09MREFUVFIJMHgwMDAyCS8qIFVzZSBjb3JlIGdldGF0dHIgKFdpbiA5NSBzcGVlZHVwKSAqLworI2RlZmluZSBTTUJfTU9VTlRfRElSQVRUUgkweDAwMDQJLyogVXNlIGZpbmRfZmlyc3QgZm9yIGdldGF0dHIgKi8KKyNkZWZpbmUgU01CX01PVU5UX0NBU0UJCTB4MDAwOAkvKiBCZSBjYXNlIHNlbnNpdGl2ZSAqLworI2RlZmluZSBTTUJfTU9VTlRfVU5JQ09ERQkweDAwMTAJLyogU2VydmVyIHRhbGtzIHVuaWNvZGUgKi8KKyNkZWZpbmUgU01CX01PVU5UX1VJRAkJMHgwMDIwICAvKiBVc2UgdXNlciBzcGVjaWZpZWQgdWlkICovCisjZGVmaW5lIFNNQl9NT1VOVF9HSUQJCTB4MDA0MCAgLyogVXNlIHVzZXIgc3BlY2lmaWVkIGdpZCAqLworI2RlZmluZSBTTUJfTU9VTlRfRk1PREUJCTB4MDA4MCAgLyogVXNlIHVzZXIgc3BlY2lmaWVkIGZpbGUgbW9kZSAqLworI2RlZmluZSBTTUJfTU9VTlRfRE1PREUJCTB4MDEwMCAgLyogVXNlIHVzZXIgc3BlY2lmaWVkIGRpciBtb2RlICovCisKK3N0cnVjdCBzbWJfbW91bnRfZGF0YV9rZXJuZWwgeworCWludCB2ZXJzaW9uOworCisJdWlkX3QgbW91bnRlZF91aWQ7CS8qIFdobyBtYXkgdW1vdW50KCkgdGhpcyBmaWxlc3lzdGVtPyAqLworCXVpZF90IHVpZDsKKwlnaWRfdCBnaWQ7CisJbW9kZV90IGZpbGVfbW9kZTsKKwltb2RlX3QgZGlyX21vZGU7CisKKwl1MzIgZmxhZ3M7CisKKyAgICAgICAgLyogbWF4aW11bSBhZ2UgaW4gamlmZmllcyAoaW5vZGUsIGRlbnRyeSBhbmQgZGlyY2FjaGUpICovCisJaW50IHR0bDsKKworCXN0cnVjdCBzbWJfbmxzX2NvZGVwYWdlIGNvZGVwYWdlOworfTsKKworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zbWJuby5oIGIvaW5jbHVkZS9saW51eC9zbWJuby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5OWUwMmQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3NtYm5vLmgKQEAgLTAsMCArMSwzNjMgQEAKKyNpZm5kZWYgX1NNQk5PX0hfCisjZGVmaW5lIF9TTUJOT19IXworCisvKiB0aGVzZSBkZWZpbmUgdGhlIGF0dHJpYnV0ZSBieXRlIGFzIHNlZW4gYnkgRE9TICovCisjZGVmaW5lIGFST05MWQkoMUw8PDApCisjZGVmaW5lIGFISURERU4JKDFMPDwxKQorI2RlZmluZSBhU1lTVEVNCSgxTDw8MikKKyNkZWZpbmUgYVZPTElECSgxTDw8MykKKyNkZWZpbmUgYURJUgkoMUw8PDQpCisjZGVmaW5lIGFBUkNICSgxTDw8NSkKKworLyogZXJyb3IgY2xhc3NlcyAqLworI2RlZmluZSBTVUNDRVNTIDAgIC8qIFRoZSByZXF1ZXN0IHdhcyBzdWNjZXNzZnVsLiAqLworI2RlZmluZSBFUlJET1MgMHgwMSAvKiAgRXJyb3IgaXMgZnJvbSB0aGUgY29yZSBET1Mgb3BlcmF0aW5nIHN5c3RlbSBzZXQuICovCisjZGVmaW5lIEVSUlNSViAweDAyIC8qIEVycm9yIGlzIGdlbmVyYXRlZCBieSB0aGUgc2VydmVyIG5ldHdvcmsgZmlsZSBtYW5hZ2VyLiovCisjZGVmaW5lIEVSUkhSRCAweDAzICAvKiBFcnJvciBpcyBhbiBoYXJkd2FyZSBlcnJvci4gKi8KKyNkZWZpbmUgRVJSQ01EIDB4RkYgIC8qIENvbW1hbmQgd2FzIG5vdCBpbiB0aGUgIlNNQiIgZm9ybWF0LiAqLworCisvKiBTTUIgWC9PcGVuIGVycm9yIGNvZGVzIGZvciB0aGUgRVJSZG9zIGVycm9yIGNsYXNzICovCisKKyNkZWZpbmUgRVJSYmFkZnVuYyAxICAgICAgICAgICAgLyogSW52YWxpZCBmdW5jdGlvbiAob3Igc3lzdGVtIGNhbGwpICovCisjZGVmaW5lIEVSUmJhZGZpbGUgMiAgICAgICAgICAgIC8qIEZpbGUgbm90IGZvdW5kIChwYXRobmFtZSBlcnJvcikgKi8KKyNkZWZpbmUgRVJSYmFkcGF0aCAzICAgICAgICAgICAgLyogRGlyZWN0b3J5IG5vdCBmb3VuZCAqLworI2RlZmluZSBFUlJub2ZpZHMgNCAgICAgICAgICAgICAvKiBUb28gbWFueSBvcGVuIGZpbGVzICovCisjZGVmaW5lIEVSUm5vYWNjZXNzIDUgICAgICAgICAgIC8qIEFjY2VzcyBkZW5pZWQgKi8KKyNkZWZpbmUgRVJSYmFkZmlkIDYgICAgICAgICAgICAgLyogSW52YWxpZCBmaWQgKi8KKyNkZWZpbmUgRVJSYmFkbWNiIDcgICAgICAgICAgICAgLyogTWVtb3J5IGNvbnRyb2wgYmxvY2tzIGRlc3Ryb3llZCAqLworI2RlZmluZSBFUlJub21lbSA4ICAgICAgICAgICAgICAvKiBPdXQgb2YgbWVtb3J5ICovCisjZGVmaW5lIEVSUmJhZG1lbSA5ICAgICAgICAgICAgIC8qIEludmFsaWQgbWVtb3J5IGJsb2NrIGFkZHJlc3MgKi8KKyNkZWZpbmUgRVJSYmFkZW52IDEwICAgICAgICAgICAgLyogSW52YWxpZCBlbnZpcm9ubWVudCAqLworI2RlZmluZSBFUlJiYWRmb3JtYXQgMTEgICAgICAgICAvKiBJbnZhbGlkIGZvcm1hdCAqLworI2RlZmluZSBFUlJiYWRhY2Nlc3MgMTIgICAgICAgICAvKiBJbnZhbGlkIG9wZW4gbW9kZSAqLworI2RlZmluZSBFUlJiYWRkYXRhIDEzICAgICAgICAgICAvKiBJbnZhbGlkIGRhdGEgKG9ubHkgZnJvbSBpb2N0bCBjYWxsKSAqLworI2RlZmluZSBFUlJyZXMgMTQgICAgICAgICAgICAgICAvKiByZXNlcnZlZCAqLworI2RlZmluZSBFUlJiYWRkcml2ZSAxNSAgICAgICAgICAvKiBJbnZhbGlkIGRyaXZlICovCisjZGVmaW5lIEVSUnJlbWNkIDE2ICAgICAgICAgICAgIC8qIEF0dGVtcHQgdG8gZGVsZXRlIGN1cnJlbnQgZGlyZWN0b3J5ICovCisjZGVmaW5lIEVSUmRpZmZkZXZpY2UgMTcgICAgICAgIC8qIHJlbmFtZS9tb3ZlIGFjcm9zcyBkaWZmZXJlbnQgZmlsZXN5c3RlbXMgKi8KKyNkZWZpbmUgRVJSbm9maWxlcyAxOCAgICAgICAgICAgLyogbm8gbW9yZSBmaWxlcyBmb3VuZCBpbiBmaWxlIHNlYXJjaCAqLworI2RlZmluZSBFUlJiYWRzaGFyZSAzMiAgICAgICAgICAvKiBTaGFyZSBtb2RlIG9uIGZpbGUgY29uZmxpY3Qgd2l0aCBvcGVuIG1vZGUgKi8KKyNkZWZpbmUgRVJSbG9jayAzMyAgICAgICAgICAgICAgLyogTG9jayByZXF1ZXN0IGNvbmZsaWN0cyB3aXRoIGV4aXN0aW5nIGxvY2sgKi8KKyNkZWZpbmUgRVJSZmlsZXhpc3RzIDgwICAgICAgICAgLyogRmlsZSBpbiBvcGVyYXRpb24gYWxyZWFkeSBleGlzdHMgKi8KKyNkZWZpbmUgRVJSYmFkcGlwZSAyMzAgICAgICAgICAgLyogTmFtZWQgcGlwZSBpbnZhbGlkICovCisjZGVmaW5lIEVSUnBpcGVidXN5IDIzMSAgICAgICAgIC8qIEFsbCBpbnN0YW5jZXMgb2YgcGlwZSBhcmUgYnVzeSAqLworI2RlZmluZSBFUlJwaXBlY2xvc2luZyAyMzIgICAgICAvKiBuYW1lZCBwaXBlIGNsb3NlIGluIHByb2dyZXNzICovCisjZGVmaW5lIEVSUm5vdGNvbm5lY3RlZCAyMzMgICAgIC8qIE5vIHByb2Nlc3Mgb24gb3RoZXIgZW5kIG9mIG5hbWVkIHBpcGUgKi8KKyNkZWZpbmUgRVJSbW9yZWRhdGEgMjM0ICAgICAgICAgLyogTW9yZSBkYXRhIHRvIGJlIHJldHVybmVkICovCisKKyNkZWZpbmUgRVJST1JfSU5WQUxJRF9QQVJBTUVURVIJIDg3CisjZGVmaW5lIEVSUk9SX0RJU0tfRlVMTAkJMTEyCisjZGVmaW5lIEVSUk9SX0lOVkFMSURfTkFNRQkxMjMKKyNkZWZpbmUgRVJST1JfRElSX05PVF9FTVBUWQkxNDUKKyNkZWZpbmUgRVJST1JfTk9UX0xPQ0tFRAkxNTgKKyNkZWZpbmUgRVJST1JfQUxSRUFEWV9FWElTVFMJMTgzICAvKiBzZWUgYWxzbyA4MCA/ICovCisjZGVmaW5lIEVSUk9SX0VBU19ESUROVF9GSVQJMjc1IC8qIEV4dGVuZGVkIGF0dHJpYnV0ZXMgZGlkbid0IGZpdCAqLworI2RlZmluZSBFUlJPUl9FQVNfTk9UX1NVUFBPUlRFRAkyODIgLyogRXh0ZW5kZWQgYXR0cmlidXRlcyBub3Qgc3VwcG9ydGVkICovCisKKy8qIEVycm9yIGNvZGVzIGZvciB0aGUgRVJSU1JWIGNsYXNzICovCisKKyNkZWZpbmUgRVJSZXJyb3IgMSAgICAgICAgICAgICAgLyogTm9uIHNwZWNpZmljIGVycm9yIGNvZGUgKi8KKyNkZWZpbmUgRVJSYmFkcHcgMiAgICAgICAgICAgICAgLyogQmFkIHBhc3N3b3JkICovCisjZGVmaW5lIEVSUmJhZHR5cGUgMyAgICAgICAgICAgIC8qIHJlc2VydmVkICovCisjZGVmaW5lIEVSUmFjY2VzcyA0ICAgICAgICAgIC8qIE5vIHBlcm1pc3Npb25zIHRvIGRvIHRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uICovCisjZGVmaW5lIEVSUmludm5pZCA1ICAgICAgICAgICAgIC8qIHRpZCBpbnZhbGlkICovCisjZGVmaW5lIEVSUmludm5ldG5hbWUgNiAgICAgICAgIC8qIEludmFsaWQgc2VydmVybmFtZSAqLworI2RlZmluZSBFUlJpbnZkZXZpY2UgNyAgICAgICAgICAvKiBJbnZhbGlkIGRldmljZSAqLworI2RlZmluZSBFUlJxZnVsbCA0OSAgICAgICAgICAgICAvKiBQcmludCBxdWV1ZSBmdWxsICovCisjZGVmaW5lIEVSUnF0b29iaWcgNTAgICAgICAgICAgIC8qIFF1ZXVlZCBpdGVtIHRvbyBiaWcgKi8KKyNkZWZpbmUgRVJSaW52cGZpZCA1MiAgICAgICAgICAgLyogSW52YWxpZCBwcmludCBmaWxlIGluIHNtYl9maWQgKi8KKyNkZWZpbmUgRVJSc21iY21kIDY0ICAgICAgICAgICAgLyogVW5yZWNvZ25pc2VkIGNvbW1hbmQgKi8KKyNkZWZpbmUgRVJSc3J2ZXJyb3IgNjUgICAgICAgICAgLyogc21iIHNlcnZlciBpbnRlcm5hbCBlcnJvciAqLworI2RlZmluZSBFUlJmaWxlc3BlY3MgNjcgICAgICAgICAvKiBmaWQgYW5kIHBhdGhuYW1lIGludmFsaWQgY29tYmluYXRpb24gKi8KKyNkZWZpbmUgRVJSYmFkbGluayA2OCAgICAgICAgICAgLyogcmVzZXJ2ZWQgKi8KKyNkZWZpbmUgRVJSYmFkcGVybWl0cyA2OSAgICAgICAgLyogQWNjZXNzIHNwZWNpZmllZCBmb3IgYSBmaWxlIGlzIG5vdCB2YWxpZCAqLworI2RlZmluZSBFUlJiYWRwaWQgNzAgICAgICAgICAgICAvKiByZXNlcnZlZCAqLworI2RlZmluZSBFUlJzZXRhdHRybW9kZSA3MSAgICAgICAvKiBhdHRyaWJ1dGUgbW9kZSBpbnZhbGlkICovCisjZGVmaW5lIEVSUnBhdXNlZCA4MSAgICAgICAgICAgIC8qIE1lc3NhZ2Ugc2VydmVyIHBhdXNlZCAqLworI2RlZmluZSBFUlJtc2dvZmYgODIgICAgICAgICAgICAvKiBOb3QgcmVjZWl2aW5nIG1lc3NhZ2VzICovCisjZGVmaW5lIEVSUm5vcm9vbSA4MyAgICAgICAgICAgIC8qIE5vIHJvb20gZm9yIG1lc3NhZ2UgKi8KKyNkZWZpbmUgRVJScm11bnMgODcgICAgICAgICAgICAgLyogdG9vIG1hbnkgcmVtb3RlIHVzZXJuYW1lcyAqLworI2RlZmluZSBFUlJ0aW1lb3V0IDg4ICAgICAgICAgICAvKiBvcGVyYXRpb24gdGltZWQgb3V0ICovCisjZGVmaW5lIEVSUm5vcmVzb3VyY2UgIDg5ICAgLyogTm8gcmVzb3VyY2VzIGN1cnJlbnRseSBhdmFpbGFibGUgZm9yIHJlcXVlc3QuICovCisjZGVmaW5lIEVSUnRvb21hbnl1aWRzIDkwICAgICAgIC8qIHRvbyBtYW55IHVzZXJpZHMgKi8KKyNkZWZpbmUgRVJSYmFkdWlkIDkxICAgICAgICAgICAgLyogYmFkIHVzZXJpZCAqLworI2RlZmluZSBFUlJ1c2VNUFggMjUwICAgIC8qIHRlbXBvcmFyaWx5IHVuYWJsZSB0byB1c2UgcmF3IG1vZGUsIHVzZSBNUFggbW9kZSAqLworI2RlZmluZSBFUlJ1c2VTVEQgMjUxICAgIC8qIHRlbXBvcmFyaWx5IHVuYWJsZSB0byB1c2UgcmF3IG1vZGUsIHVzZSBzdGQubW9kZSAqLworI2RlZmluZSBFUlJjb250TVBYIDI1MiAgICAgICAgICAvKiByZXN1bWUgTVBYIG1vZGUgKi8KKyNkZWZpbmUgRVJSYmFkUFcgICAgICAgICAgICAgICAgLyogcmVzZXJ2ZWQgKi8KKyNkZWZpbmUgRVJSbm9zdXBwb3J0IDB4RkZGRgorCisvKiBFcnJvciBjb2RlcyBmb3IgdGhlIEVSUkhSRCBjbGFzcyAqLworCisjZGVmaW5lIEVSUm5vd3JpdGUgMTkgICAgICAgICAgIC8qIHJlYWQgb25seSBtZWRpYSAqLworI2RlZmluZSBFUlJiYWR1bml0IDIwICAgICAgICAgICAvKiBVbmtub3duIGRldmljZSAqLworI2RlZmluZSBFUlJub3RyZWFkeSAyMSAgICAgICAgICAvKiBEcml2ZSBub3QgcmVhZHkgKi8KKyNkZWZpbmUgRVJSYmFkY21kIDIyICAgICAgICAgICAgLyogVW5rbm93biBjb21tYW5kICovCisjZGVmaW5lIEVSUmRhdGEgMjMgICAgICAgICAgICAgIC8qIERhdGEgKENSQykgZXJyb3IgKi8KKyNkZWZpbmUgRVJSYmFkcmVxIDI0ICAgICAgICAgICAgLyogQmFkIHJlcXVlc3Qgc3RydWN0dXJlIGxlbmd0aCAqLworI2RlZmluZSBFUlJzZWVrIDI1CisjZGVmaW5lIEVSUmJhZG1lZGlhIDI2CisjZGVmaW5lIEVSUmJhZHNlY3RvciAyNworI2RlZmluZSBFUlJub3BhcGVyIDI4CisjZGVmaW5lIEVSUndyaXRlIDI5ICAgICAgICAgICAgIC8qIHdyaXRlIGZhdWx0ICovCisjZGVmaW5lIEVSUnJlYWQgMzAgICAgICAgICAgICAgIC8qIHJlYWQgZmF1bHQgKi8KKyNkZWZpbmUgRVJSZ2VuZXJhbCAzMSAgICAgICAgICAgLyogR2VuZXJhbCBoYXJkd2FyZSBmYWlsdXJlICovCisjZGVmaW5lIEVSUndyb25nZGlzayAzNAorI2RlZmluZSBFUlJGQ0J1bmF2YWlsIDM1CisjZGVmaW5lIEVSUnNoYXJlYnVmZXhjIDM2ICAgICAgIC8qIHNoYXJlIGJ1ZmZlciBleGNlZWRlZCAqLworI2RlZmluZSBFUlJkaXNrZnVsbCAzOQorCisvKgorICogQWNjZXNzIG1vZGVzIHdoZW4gb3BlbmluZyBhIGZpbGUKKyAqLworI2RlZmluZSBTTUJfQUNDTUFTSwkweDAwMDMKKyNkZWZpbmUgU01CX09fUkRPTkxZCTB4MDAwMAorI2RlZmluZSBTTUJfT19XUk9OTFkJMHgwMDAxCisjZGVmaW5lIFNNQl9PX1JEV1IJMHgwMDAyCisKKy8qIG9mZnNldHMgaW50byBtZXNzYWdlIGZvciBjb21tb24gaXRlbXMgKi8KKyNkZWZpbmUgc21iX2NvbSA4CisjZGVmaW5lIHNtYl9yY2xzIDkKKyNkZWZpbmUgc21iX3JlaCAxMAorI2RlZmluZSBzbWJfZXJyIDExCisjZGVmaW5lIHNtYl9mbGcgMTMKKyNkZWZpbmUgc21iX2ZsZzIgMTQKKyNkZWZpbmUgc21iX3JlYiAxMworI2RlZmluZSBzbWJfdGlkIDI4CisjZGVmaW5lIHNtYl9waWQgMzAKKyNkZWZpbmUgc21iX3VpZCAzMgorI2RlZmluZSBzbWJfbWlkIDM0CisjZGVmaW5lIHNtYl93Y3QgMzYKKyNkZWZpbmUgc21iX3Z3diAzNworI2RlZmluZSBzbWJfdnd2MCAzNworI2RlZmluZSBzbWJfdnd2MSAzOQorI2RlZmluZSBzbWJfdnd2MiA0MQorI2RlZmluZSBzbWJfdnd2MyA0MworI2RlZmluZSBzbWJfdnd2NCA0NQorI2RlZmluZSBzbWJfdnd2NSA0NworI2RlZmluZSBzbWJfdnd2NiA0OQorI2RlZmluZSBzbWJfdnd2NyA1MQorI2RlZmluZSBzbWJfdnd2OCA1MworI2RlZmluZSBzbWJfdnd2OSA1NQorI2RlZmluZSBzbWJfdnd2MTAgNTcKKyNkZWZpbmUgc21iX3Z3djExIDU5CisjZGVmaW5lIHNtYl92d3YxMiA2MQorI2RlZmluZSBzbWJfdnd2MTMgNjMKKyNkZWZpbmUgc21iX3Z3djE0IDY1CisKKy8qIHRoZXNlIGFyZSB0aGUgdHJhbnMyIHN1YiBmaWVsZHMgZm9yIHByaW1hcnkgcmVxdWVzdHMgKi8KKyNkZWZpbmUgc21iX3Rwc2NudCBzbWJfdnd2MAorI2RlZmluZSBzbWJfdGRzY250IHNtYl92d3YxCisjZGVmaW5lIHNtYl9tcHJjbnQgc21iX3Z3djIKKyNkZWZpbmUgc21iX21kcmNudCBzbWJfdnd2MworI2RlZmluZSBzbWJfbXNyY250IHNtYl92d3Y0CisjZGVmaW5lIHNtYl9mbGFncyBzbWJfdnd2NQorI2RlZmluZSBzbWJfdGltZW91dCBzbWJfdnd2NgorI2RlZmluZSBzbWJfcHNjbnQgc21iX3Z3djkKKyNkZWZpbmUgc21iX3Bzb2ZmIHNtYl92d3YxMAorI2RlZmluZSBzbWJfZHNjbnQgc21iX3Z3djExCisjZGVmaW5lIHNtYl9kc29mZiBzbWJfdnd2MTIKKyNkZWZpbmUgc21iX3N1d2NudCBzbWJfdnd2MTMKKyNkZWZpbmUgc21iX3NldHVwIHNtYl92d3YxNAorI2RlZmluZSBzbWJfc2V0dXAwIHNtYl9zZXR1cAorI2RlZmluZSBzbWJfc2V0dXAxIChzbWJfc2V0dXArMikKKyNkZWZpbmUgc21iX3NldHVwMiAoc21iX3NldHVwKzQpCisKKy8qIHRoZXNlIGFyZSBmb3IgdGhlIHNlY29uZGFyeSByZXF1ZXN0cyAqLworI2RlZmluZSBzbWJfc3BzY250IHNtYl92d3YyCisjZGVmaW5lIHNtYl9zcHNvZmYgc21iX3Z3djMKKyNkZWZpbmUgc21iX3Nwc2Rpc3Agc21iX3Z3djQKKyNkZWZpbmUgc21iX3Nkc2NudCBzbWJfdnd2NQorI2RlZmluZSBzbWJfc2Rzb2ZmIHNtYl92d3Y2CisjZGVmaW5lIHNtYl9zZHNkaXNwIHNtYl92d3Y3CisjZGVmaW5lIHNtYl9zZmlkIHNtYl92d3Y4CisKKy8qIGFuZCB0aGVzZSBmb3IgcmVzcG9uc2VzICovCisjZGVmaW5lIHNtYl90cHJjbnQgc21iX3Z3djAKKyNkZWZpbmUgc21iX3RkcmNudCBzbWJfdnd2MQorI2RlZmluZSBzbWJfcHJjbnQgc21iX3Z3djMKKyNkZWZpbmUgc21iX3Byb2ZmIHNtYl92d3Y0CisjZGVmaW5lIHNtYl9wcmRpc3Agc21iX3Z3djUKKyNkZWZpbmUgc21iX2RyY250IHNtYl92d3Y2CisjZGVmaW5lIHNtYl9kcm9mZiBzbWJfdnd2NworI2RlZmluZSBzbWJfZHJkaXNwIHNtYl92d3Y4CisKKy8qIHRoZSBjb21wbGV0ZSAqLworI2RlZmluZSBTTUJta2RpciAgICAgIDB4MDAgICAvKiBjcmVhdGUgZGlyZWN0b3J5ICovCisjZGVmaW5lIFNNQnJtZGlyICAgICAgMHgwMSAgIC8qIGRlbGV0ZSBkaXJlY3RvcnkgKi8KKyNkZWZpbmUgU01Cb3BlbiAgICAgICAweDAyICAgLyogb3BlbiBmaWxlICovCisjZGVmaW5lIFNNQmNyZWF0ZSAgICAgMHgwMyAgIC8qIGNyZWF0ZSBmaWxlICovCisjZGVmaW5lIFNNQmNsb3NlICAgICAgMHgwNCAgIC8qIGNsb3NlIGZpbGUgKi8KKyNkZWZpbmUgU01CZmx1c2ggICAgICAweDA1ICAgLyogZmx1c2ggZmlsZSAqLworI2RlZmluZSBTTUJ1bmxpbmsgICAgIDB4MDYgICAvKiBkZWxldGUgZmlsZSAqLworI2RlZmluZSBTTUJtdiAgICAgICAgIDB4MDcgICAvKiByZW5hbWUgZmlsZSAqLworI2RlZmluZSBTTUJnZXRhdHIgICAgIDB4MDggICAvKiBnZXQgZmlsZSBhdHRyaWJ1dGVzICovCisjZGVmaW5lIFNNQnNldGF0ciAgICAgMHgwOSAgIC8qIHNldCBmaWxlIGF0dHJpYnV0ZXMgKi8KKyNkZWZpbmUgU01CcmVhZCAgICAgICAweDBBICAgLyogcmVhZCBmcm9tIGZpbGUgKi8KKyNkZWZpbmUgU01Cd3JpdGUgICAgICAweDBCICAgLyogd3JpdGUgdG8gZmlsZSAqLworI2RlZmluZSBTTUJsb2NrICAgICAgIDB4MEMgICAvKiBsb2NrIGJ5dGUgcmFuZ2UgKi8KKyNkZWZpbmUgU01CdW5sb2NrICAgICAweDBEICAgLyogdW5sb2NrIGJ5dGUgcmFuZ2UgKi8KKyNkZWZpbmUgU01CY3RlbXAgICAgICAweDBFICAgLyogY3JlYXRlIHRlbXBvcmFyeSBmaWxlICovCisjZGVmaW5lIFNNQm1rbmV3ICAgICAgMHgwRiAgIC8qIG1ha2UgbmV3IGZpbGUgKi8KKyNkZWZpbmUgU01CY2hrcHRoICAgICAweDEwICAgLyogY2hlY2sgZGlyZWN0b3J5IHBhdGggKi8KKyNkZWZpbmUgU01CZXhpdCAgICAgICAweDExICAgLyogcHJvY2VzcyBleGl0ICovCisjZGVmaW5lIFNNQmxzZWVrICAgICAgMHgxMiAgIC8qIHNlZWsgKi8KKyNkZWZpbmUgU01CdGNvbiAgICAgICAweDcwICAgLyogdHJlZSBjb25uZWN0ICovCisjZGVmaW5lIFNNQnRjb25YICAgICAgMHg3NSAgIC8qIHRyZWUgY29ubmVjdCBhbmQgWCovCisjZGVmaW5lIFNNQnRkaXMgICAgICAgMHg3MSAgIC8qIHRyZWUgZGlzY29ubmVjdCAqLworI2RlZmluZSBTTUJuZWdwcm90ICAgIDB4NzIgICAvKiBuZWdvdGlhdGUgcHJvdG9jb2wgKi8KKyNkZWZpbmUgU01CZHNrYXR0ciAgICAweDgwICAgLyogZ2V0IGRpc2sgYXR0cmlidXRlcyAqLworI2RlZmluZSBTTUJzZWFyY2ggICAgIDB4ODEgICAvKiBzZWFyY2ggZGlyZWN0b3J5ICovCisjZGVmaW5lIFNNQnNwbG9wZW4gICAgMHhDMCAgIC8qIG9wZW4gcHJpbnQgc3Bvb2wgZmlsZSAqLworI2RlZmluZSBTTUJzcGx3ciAgICAgIDB4QzEgICAvKiB3cml0ZSB0byBwcmludCBzcG9vbCBmaWxlICovCisjZGVmaW5lIFNNQnNwbGNsb3NlICAgMHhDMiAgIC8qIGNsb3NlIHByaW50IHNwb29sIGZpbGUgKi8KKyNkZWZpbmUgU01Cc3BscmV0cSAgICAweEMzICAgLyogcmV0dXJuIHByaW50IHF1ZXVlICovCisjZGVmaW5lIFNNQnNlbmRzICAgICAgMHhEMCAgIC8qIHNlbmQgc2luZ2xlIGJsb2NrIG1lc3NhZ2UgKi8KKyNkZWZpbmUgU01Cc2VuZGIgICAgICAweEQxICAgLyogc2VuZCBicm9hZGNhc3QgbWVzc2FnZSAqLworI2RlZmluZSBTTUJmd2RuYW1lICAgIDB4RDIgICAvKiBmb3J3YXJkIHVzZXIgbmFtZSAqLworI2RlZmluZSBTTUJjYW5jZWxmICAgIDB4RDMgICAvKiBjYW5jZWwgZm9yd2FyZCAqLworI2RlZmluZSBTTUJnZXRtYWMgICAgIDB4RDQgICAvKiBnZXQgbWFjaGluZSBuYW1lICovCisjZGVmaW5lIFNNQnNlbmRzdHJ0ICAgMHhENSAgIC8qIHNlbmQgc3RhcnQgb2YgbXVsdGktYmxvY2sgbWVzc2FnZSAqLworI2RlZmluZSBTTUJzZW5kZW5kICAgIDB4RDYgICAvKiBzZW5kIGVuZCBvZiBtdWx0aS1ibG9jayBtZXNzYWdlICovCisjZGVmaW5lIFNNQnNlbmR0eHQgICAgMHhENyAgIC8qIHNlbmQgdGV4dCBvZiBtdWx0aS1ibG9jayBtZXNzYWdlICovCisKKy8qIENvcmUrIHByb3RvY29sICovCisjZGVmaW5lIFNNQmxvY2tyZWFkCSAgMHgxMyAgIC8qIExvY2sgYSByYW5nZSBhbmQgcmVhZCAqLworI2RlZmluZSBTTUJ3cml0ZXVubG9jayAweDE0IC8qIFVubG9jayBhIHJhbmdlIHRoZW4gd3JpdGUgKi8KKyNkZWZpbmUgU01CcmVhZGJyYXcgICAweDFhICAvKiByZWFkIGEgYmxvY2sgb2YgZGF0YSB3aXRoIG5vIHNtYiBoZWFkZXIgKi8KKyNkZWZpbmUgU01Cd3JpdGVicmF3ICAweDFkICAvKiB3cml0ZSBhIGJsb2NrIG9mIGRhdGEgd2l0aCBubyBzbWIgaGVhZGVyICovCisjZGVmaW5lIFNNQndyaXRlYyAgICAgMHgyMCAgLyogc2Vjb25kYXJ5IHdyaXRlIHJlcXVlc3QgKi8KKyNkZWZpbmUgU01Cd3JpdGVjbG9zZSAweDJjICAvKiB3cml0ZSBhIGZpbGUgdGhlbiBjbG9zZSBpdCAqLworCisvKiBkb3MgZXh0ZW5kZWQgcHJvdG9jb2wgKi8KKyNkZWZpbmUgU01CcmVhZEJyYXcgICAgICAweDFBICAgLyogcmVhZCBibG9jayByYXcgKi8KKyNkZWZpbmUgU01CcmVhZEJtcHggICAgICAweDFCICAgLyogcmVhZCBibG9jayBtdWx0aXBsZXhlZCAqLworI2RlZmluZSBTTUJyZWFkQnMgICAgICAgIDB4MUMgICAvKiByZWFkIGJsb2NrIChzZWNvbmRhcnkgcmVzcG9uc2UpICovCisjZGVmaW5lIFNNQndyaXRlQnJhdyAgICAgMHgxRCAgIC8qIHdyaXRlIGJsb2NrIHJhdyAqLworI2RlZmluZSBTTUJ3cml0ZUJtcHggICAgIDB4MUUgICAvKiB3cml0ZSBibG9jayBtdWx0aXBsZXhlZCAqLworI2RlZmluZSBTTUJ3cml0ZUJzICAgICAgIDB4MUYgICAvKiB3cml0ZSBibG9jayAoc2Vjb25kYXJ5IHJlcXVlc3QpICovCisjZGVmaW5lIFNNQndyaXRlQyAgICAgICAgMHgyMCAgIC8qIHdyaXRlIGNvbXBsZXRlIHJlc3BvbnNlICovCisjZGVmaW5lIFNNQnNldGF0dHJFICAgICAgMHgyMiAgIC8qIHNldCBmaWxlIGF0dHJpYnV0ZXMgZXhwYW5kZWQgKi8KKyNkZWZpbmUgU01CZ2V0YXR0ckUgICAgICAweDIzICAgLyogZ2V0IGZpbGUgYXR0cmlidXRlcyBleHBhbmRlZCAqLworI2RlZmluZSBTTUJsb2NraW5nWCAgICAgIDB4MjQgICAvKiBsb2NrL3VubG9jayBieXRlIHJhbmdlcyBhbmQgWCAqLworI2RlZmluZSBTTUJ0cmFucyAgICAgICAgIDB4MjUgICAvKiB0cmFuc2FjdGlvbiAtIG5hbWUsIGJ5dGVzIGluL291dCAqLworI2RlZmluZSBTTUJ0cmFuc3MgICAgICAgIDB4MjYgICAvKiB0cmFuc2FjdGlvbiAoc2Vjb25kYXJ5IHJlcXVlc3QvcmVzcG9uc2UpICovCisjZGVmaW5lIFNNQmlvY3RsICAgICAgICAgMHgyNyAgIC8qIElPQ1RMICovCisjZGVmaW5lIFNNQmlvY3RscyAgICAgICAgMHgyOCAgIC8qIElPQ1RMICAoc2Vjb25kYXJ5IHJlcXVlc3QvcmVzcG9uc2UpICovCisjZGVmaW5lIFNNQmNvcHkgICAgICAgICAgMHgyOSAgIC8qIGNvcHkgKi8KKyNkZWZpbmUgU01CbW92ZSAgICAgICAgICAweDJBICAgLyogbW92ZSAqLworI2RlZmluZSBTTUJlY2hvICAgICAgICAgIDB4MkIgICAvKiBlY2hvICovCisjZGVmaW5lIFNNQm9wZW5YICAgICAgICAgMHgyRCAgIC8qIG9wZW4gYW5kIFggKi8KKyNkZWZpbmUgU01CcmVhZFggICAgICAgICAweDJFICAgLyogcmVhZCBhbmQgWCAqLworI2RlZmluZSBTTUJ3cml0ZVggICAgICAgIDB4MkYgICAvKiB3cml0ZSBhbmQgWCAqLworI2RlZmluZSBTTUJzZXNzc2V0dXBYICAgIDB4NzMgICAvKiBTZXNzaW9uIFNldCBVcCAmIFggKGluY2x1ZGluZyBVc2VyIExvZ29uKSAqLworI2RlZmluZSBTTUJ0Y29uWCAgICAgICAgIDB4NzUgICAvKiB0cmVlIGNvbm5lY3QgYW5kIFggKi8KKyNkZWZpbmUgU01CZmZpcnN0ICAgICAgICAweDgyICAgLyogZmluZCBmaXJzdCAqLworI2RlZmluZSBTTUJmdW5pcXVlICAgICAgIDB4ODMgICAvKiBmaW5kIHVuaXF1ZSAqLworI2RlZmluZSBTTUJmY2xvc2UgICAgICAgIDB4ODQgICAvKiBmaW5kIGNsb3NlICovCisjZGVmaW5lIFNNQmludmFsaWQgICAgICAgMHhGRSAgIC8qIGludmFsaWQgY29tbWFuZCAqLworCisKKy8qIEV4dGVuZGVkIDIuMCBwcm90b2NvbCAqLworI2RlZmluZSBTTUJ0cmFuczIgICAgICAgIDB4MzIgICAvKiBUUkFOUzIgcHJvdG9jb2wgc2V0ICovCisjZGVmaW5lIFNNQnRyYW5zczIgICAgICAgMHgzMyAgIC8qIFRSQU5TMiBwcm90b2NvbCBzZXQsIHNlY29uZGFyeSBjb21tYW5kICovCisjZGVmaW5lIFNNQmZpbmRjbG9zZSAgICAgMHgzNCAgIC8qIFRlcm1pbmF0ZSBhIFRSQU5TQUNUMl9GSU5ERklSU1QgKi8KKyNkZWZpbmUgU01CZmluZG5jbG9zZSAgICAweDM1ICAgLyogVGVybWluYXRlIGEgVFJBTlNBQ1QyX0ZJTkROT1RJRllGSVJTVCAqLworI2RlZmluZSBTTUJ1bG9nb2ZmWCAgICAgIDB4NzQgICAvKiB1c2VyIGxvZ29mZiAqLworCisvKiB0aGVzZSBhcmUgdGhlIFRSQU5TMiBzdWIgY29tbWFuZHMgKi8KKyNkZWZpbmUgVFJBTlNBQ1QyX09QRU4gICAgICAgICAgMAorI2RlZmluZSBUUkFOU0FDVDJfRklOREZJUlNUICAgICAxCisjZGVmaW5lIFRSQU5TQUNUMl9GSU5ETkVYVCAgICAgIDIKKyNkZWZpbmUgVFJBTlNBQ1QyX1FGU0lORk8gICAgICAgMworI2RlZmluZSBUUkFOU0FDVDJfU0VURlNJTkZPICAgICA0CisjZGVmaW5lIFRSQU5TQUNUMl9RUEFUSElORk8gICAgIDUKKyNkZWZpbmUgVFJBTlNBQ1QyX1NFVFBBVEhJTkZPICAgNgorI2RlZmluZSBUUkFOU0FDVDJfUUZJTEVJTkZPICAgICA3CisjZGVmaW5lIFRSQU5TQUNUMl9TRVRGSUxFSU5GTyAgIDgKKyNkZWZpbmUgVFJBTlNBQ1QyX0ZTQ1RMICAgICAgICAgOQorI2RlZmluZSBUUkFOU0FDVDJfSU9DVEwgICAgICAgICAgIDEwCisjZGVmaW5lIFRSQU5TQUNUMl9GSU5ETk9USUZZRklSU1QgMTEKKyNkZWZpbmUgVFJBTlNBQ1QyX0ZJTkROT1RJRllORVhUICAxMgorI2RlZmluZSBUUkFOU0FDVDJfTUtESVIgICAgICAgICAgIDEzCisKKy8qIEluZm9ybWF0aW9uIExldmVscyAtICBTaGFyZWQ/ICovCisjZGVmaW5lIFNNQl9JTkZPX1NUQU5EQVJECQkxCisjZGVmaW5lIFNNQl9JTkZPX1FVRVJZX0VBX1NJWkUJCTIKKyNkZWZpbmUgU01CX0lORk9fUVVFUllfRUFTX0ZST01fTElTVAkzCisjZGVmaW5lIFNNQl9JTkZPX1FVRVJZX0FMTF9FQVMJCTQKKyNkZWZpbmUgU01CX0lORk9fSVNfTkFNRV9WQUxJRAkJNgorCisvKiBJbmZvcm1hdGlvbiBMZXZlbHMgLSAgVFJBTlNBQ1QyX0ZJTkRGSVJTVCAqLworI2RlZmluZSBTTUJfRklORF9GSUxFX0RJUkVDVE9SWV9JTkZPCQkweDEwMQorI2RlZmluZSBTTUJfRklORF9GSUxFX0ZVTExfRElSRUNUT1JZX0lORk8JMHgxMDIKKyNkZWZpbmUgU01CX0ZJTkRfRklMRV9OQU1FU19JTkZPCQkweDEwMworI2RlZmluZSBTTUJfRklORF9GSUxFX0JPVEhfRElSRUNUT1JZX0lORk8JMHgxMDQKKworLyogSW5mb3JtYXRpb24gTGV2ZWxzIC0gIFRSQU5TQUNUMl9RUEFUSElORk8gKi8KKyNkZWZpbmUgU01CX1FVRVJZX0ZJTEVfQkFTSUNfSU5GTwkweDEwMQorI2RlZmluZSBTTUJfUVVFUllfRklMRV9TVEFOREFSRF9JTkZPCTB4MTAyCisjZGVmaW5lIFNNQl9RVUVSWV9GSUxFX0VBX0lORk8JCTB4MTAzCisjZGVmaW5lIFNNQl9RVUVSWV9GSUxFX05BTUVfSU5GTwkweDEwNAorI2RlZmluZSBTTUJfUVVFUllfRklMRV9BTExfSU5GTwkJMHgxMDcKKyNkZWZpbmUgU01CX1FVRVJZX0ZJTEVfQUxUX05BTUVfSU5GTwkweDEwOAorI2RlZmluZSBTTUJfUVVFUllfRklMRV9TVFJFQU1fSU5GTwkweDEwOQorI2RlZmluZSBTTUJfUVVFUllfRklMRV9DT01QUkVTU0lPTl9JTkZPCTB4MTBiCisKKy8qIEluZm9ybWF0aW9uIExldmVscyAtIFRSQU5TQUNUMl9TRVRGSUxFSU5GTyAqLworI2RlZmluZSBTTUJfU0VUX0ZJTEVfQkFTSUNfSU5GTwkJMHgxMDEKKyNkZWZpbmUgU01CX1NFVF9GSUxFX0RJU1BPU0lUSU9OX0lORk8JMHgxMDIKKyNkZWZpbmUgU01CX1NFVF9GSUxFX0FMTE9DQVRJT05fSU5GTwkweDEwMworI2RlZmluZSBTTUJfU0VUX0ZJTEVfRU5EX09GX0ZJTEVfSU5GTwkweDEwNAorCisvKiBzbWJfZmxnIGZpZWxkIGZsYWdzICovCisjZGVmaW5lIFNNQl9GTEFHU19TVVBQT1JUX0xPQ0tSRUFECTB4MDEKKyNkZWZpbmUgU01CX0ZMQUdTX0NMSUVOVF9CVUZfQVZBSUwJMHgwMgorI2RlZmluZSBTTUJfRkxBR1NfUkVTRVJWRUQJCTB4MDQKKyNkZWZpbmUgU01CX0ZMQUdTX0NBU0VMRVNTX1BBVEhOQU1FUwkweDA4CisjZGVmaW5lIFNNQl9GTEFHU19DQU5PTklDQUxfUEFUSE5BTUVTCTB4MTAKKyNkZWZpbmUgU01CX0ZMQUdTX1JFUVVFU1RfT1BMT0NLCTB4MjAKKyNkZWZpbmUgU01CX0ZMQUdTX1JFUVVFU1RfQkFUQ0hfT1BMT0NLCTB4NDAKKyNkZWZpbmUgU01CX0ZMQUdTX1JFUExZCQkJMHg4MAorCisvKiBzbWJfZmxnMiBmaWVsZCBmbGFncyAoc2FtYmEtMi4yLjAvc291cmNlL2luY2x1ZGUvc21iLmgpICovCisjZGVmaW5lIFNNQl9GTEFHUzJfTE9OR19QQVRIX0NPTVBPTkVOVFMJCTB4MDAwMQorI2RlZmluZSBTTUJfRkxBR1MyX0VYVEVOREVEX0FUVFJJQlVURVMJCTB4MDAwMgorI2RlZmluZSBTTUJfRkxBR1MyX0RGU19QQVRITkFNRVMJCTB4MTAwMAorI2RlZmluZSBTTUJfRkxBR1MyX1JFQURfUEVSTUlUX05PX0VYRUNVVEUJMHgyMDAwCisjZGVmaW5lIFNNQl9GTEFHUzJfMzJfQklUX0VSUk9SX0NPREVTCQkweDQwMDAgCisjZGVmaW5lIFNNQl9GTEFHUzJfVU5JQ09ERV9TVFJJTkdTCQkweDgwMDAKKworCisvKgorICogVU5JWCBzdHVmZiAgKGZyb20gc2FtYmEgdHJhbnMyLmgpCisgKi8KKyNkZWZpbmUgTUlOX1VOSVhfSU5GT19MRVZFTAkJMHgyMDAKKyNkZWZpbmUgTUFYX1VOSVhfSU5GT19MRVZFTAkJMHgyRkYKKyNkZWZpbmUgU01CX0ZJTkRfRklMRV9VTklYCQkweDIwMgorI2RlZmluZSBTTUJfUVVFUllfRklMRV9VTklYX0JBU0lDCTB4MjAwCisjZGVmaW5lIFNNQl9RVUVSWV9GSUxFX1VOSVhfTElOSwkweDIwMQorI2RlZmluZSBTTUJfUVVFUllfRklMRV9VTklYX0hMSU5LCTB4MjAyCisjZGVmaW5lIFNNQl9TRVRfRklMRV9VTklYX0JBU0lDCQkweDIwMAorI2RlZmluZSBTTUJfU0VUX0ZJTEVfVU5JWF9MSU5LCQkweDIwMQorI2RlZmluZSBTTUJfU0VUX0ZJTEVfVU5JWF9ITElOSwkJMHgyMDMKKyNkZWZpbmUgU01CX1FVRVJZX0NJRlNfVU5JWF9JTkZPCTB4MjAwCisKKy8qIHZhbHVlcyB3aGljaCBtZWFucyAiZG9uJ3QgY2hhbmdlIGl0IiAqLworI2RlZmluZSBTTUJfTU9ERV9OT19DSEFOR0UJCTB4RkZGRkZGRkYKKyNkZWZpbmUgU01CX1VJRF9OT19DSEFOR0UJCTB4RkZGRkZGRkYKKyNkZWZpbmUgU01CX0dJRF9OT19DSEFOR0UJCTB4RkZGRkZGRkYKKyNkZWZpbmUgU01CX1RJTUVfTk9fQ0hBTkdFCQkweEZGRkZGRkZGRkZGRkZGRkZVTEwKKyNkZWZpbmUgU01CX1NJWkVfTk9fQ0hBTkdFCQkweEZGRkZGRkZGRkZGRkZGRkZVTEwKKworLyogVU5JWCBmaWxldHlwZSBtYXBwaW5ncy4gKi8KKyNkZWZpbmUgVU5JWF9UWVBFX0ZJTEUJCTAKKyNkZWZpbmUgVU5JWF9UWVBFX0RJUgkJMQorI2RlZmluZSBVTklYX1RZUEVfU1lNTElOSwkyCisjZGVmaW5lIFVOSVhfVFlQRV9DSEFSREVWCTMKKyNkZWZpbmUgVU5JWF9UWVBFX0JMS0RFVgk0CisjZGVmaW5lIFVOSVhfVFlQRV9GSUZPCQk1CisjZGVmaW5lIFVOSVhfVFlQRV9TT0NLRVQJNgorI2RlZmluZSBVTklYX1RZUEVfVU5LTk9XTgkweEZGRkZGRkZGCisKKyNlbmRpZiAvKiBfU01CTk9fSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc21wLmggYi9pbmNsdWRlL2xpbnV4L3NtcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjZjFkYjMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3NtcC5oCkBAIC0wLDAgKzEsMTM5IEBACisjaWZuZGVmIF9fTElOVVhfU01QX0gKKyNkZWZpbmUgX19MSU5VWF9TTVBfSAorCisvKgorICoJR2VuZXJpYyBTTVAgc3VwcG9ydAorICoJCUFsYW4gQ294LiA8YWxhbkByZWRoYXQuY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworZXh0ZXJuIHZvaWQgY3B1X2lkbGUodm9pZCk7CisKKyNpZmRlZiBDT05GSUdfU01QCisKKyNpbmNsdWRlIDxsaW51eC9wcmVlbXB0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90aHJlYWRfaW5mby5oPgorI2luY2x1ZGUgPGFzbS9zbXAuaD4KKyNpbmNsdWRlIDxhc20vYnVnLmg+CisKKy8qCisgKiBtYWluIGNyb3NzLUNQVSBpbnRlcmZhY2VzLCBoYW5kbGVzIElOSVQsIFRMQiBmbHVzaCwgU1RPUCwgZXRjLgorICogKGRlZmluZWQgaW4gYXNtIGhlYWRlcik6CisgKi8gCisKKy8qCisgKiBzdG9wcyBhbGwgQ1BVcyBidXQgdGhlIGN1cnJlbnQgb25lOgorICovCitleHRlcm4gdm9pZCBzbXBfc2VuZF9zdG9wKHZvaWQpOworCisvKgorICogc2VuZHMgYSAncmVzY2hlZHVsZScgZXZlbnQgdG8gYW5vdGhlciBDUFU6CisgKi8KK2V4dGVybiB2b2lkIHNtcF9zZW5kX3Jlc2NoZWR1bGUoaW50IGNwdSk7CisKKworLyoKKyAqIFByZXBhcmUgbWFjaGluZSBmb3IgYm9vdGluZyBvdGhlciBDUFVzLgorICovCitleHRlcm4gdm9pZCBzbXBfcHJlcGFyZV9jcHVzKHVuc2lnbmVkIGludCBtYXhfY3B1cyk7CisKKy8qCisgKiBCcmluZyBhIENQVSB1cAorICovCitleHRlcm4gaW50IF9fY3B1X3VwKHVuc2lnbmVkIGludCBjcHVudW0pOworCisvKgorICogRmluYWwgcG9saXNoaW5nIG9mIENQVXMKKyAqLworZXh0ZXJuIHZvaWQgc21wX2NwdXNfZG9uZSh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpOworCisvKgorICogQ2FsbCBhIGZ1bmN0aW9uIG9uIGFsbCBvdGhlciBwcm9jZXNzb3JzCisgKi8KK2V4dGVybiBpbnQgc21wX2NhbGxfZnVuY3Rpb24gKHZvaWQgKCpmdW5jKSAodm9pZCAqaW5mbyksIHZvaWQgKmluZm8sCisJCQkgICAgICBpbnQgcmV0cnksIGludCB3YWl0KTsKKworLyoKKyAqIENhbGwgYSBmdW5jdGlvbiBvbiBhbGwgcHJvY2Vzc29ycworICovCitzdGF0aWMgaW5saW5lIGludCBvbl9lYWNoX2NwdSh2b2lkICgqZnVuYykgKHZvaWQgKmluZm8pLCB2b2lkICppbmZvLAorCQkJICAgICAgaW50IHJldHJ5LCBpbnQgd2FpdCkKK3sKKwlpbnQgcmV0ID0gMDsKKworCXByZWVtcHRfZGlzYWJsZSgpOworCXJldCA9IHNtcF9jYWxsX2Z1bmN0aW9uKGZ1bmMsIGluZm8sIHJldHJ5LCB3YWl0KTsKKwlmdW5jKGluZm8pOworCXByZWVtcHRfZW5hYmxlKCk7CisJcmV0dXJuIHJldDsKK30KKworI2RlZmluZSBNU0dfQUxMX0JVVF9TRUxGCTB4ODAwMAkvKiBBc3N1bWUgPDMyNzY4IENQVSdzICovCisjZGVmaW5lIE1TR19BTEwJCQkweDgwMDEKKworI2RlZmluZSBNU0dfSU5WQUxJREFURV9UTEIJMHgwMDAxCS8qIFJlbW90ZSBwcm9jZXNzb3IgVExCIGludmFsaWRhdGUgKi8KKyNkZWZpbmUgTVNHX1NUT1BfQ1BVCQkweDAwMDIJLyogU2VudCB0byBzaHV0IGRvd24gc2xhdmUgQ1BVJ3MKKwkJCQkJICogd2hlbiByZWJvb3RpbmcKKwkJCQkJICovCisjZGVmaW5lIE1TR19SRVNDSEVEVUxFCQkweDAwMDMJLyogUmVzY2hlZHVsZSByZXF1ZXN0IGZyb20gbWFzdGVyIENQVSovCisjZGVmaW5lIE1TR19DQUxMX0ZVTkNUSU9OICAgICAgIDB4MDAwNCAgLyogQ2FsbCBmdW5jdGlvbiBvbiBhbGwgb3RoZXIgQ1BVcyAqLworCisvKgorICogTWFyayB0aGUgYm9vdCBjcHUgIm9ubGluZSIgc28gdGhhdCBpdCBjYW4gY2FsbCBjb25zb2xlIGRyaXZlcnMgaW4KKyAqIHByaW50aygpIGFuZCBjYW4gYWNjZXNzIGl0cyBwZXItY3B1IHN0b3JhZ2UuCisgKi8KK3ZvaWQgc21wX3ByZXBhcmVfYm9vdF9jcHUodm9pZCk7CisKKyNlbHNlIC8qICFTTVAgKi8KKworLyoKKyAqCVRoZXNlIG1hY3JvcyBmb2xkIHRoZSBTTVAgZnVuY3Rpb25hbGl0eSBpbnRvIGEgc2luZ2xlIENQVSBzeXN0ZW0KKyAqLworCisjaWYgIWRlZmluZWQoX19zbXBfcHJvY2Vzc29yX2lkKSB8fCAhZGVmaW5lZChDT05GSUdfUFJFRU1QVCkKKyMgZGVmaW5lIHNtcF9wcm9jZXNzb3JfaWQoKQkJCTAKKyNlbmRpZgorI2RlZmluZSBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKQkJCTAKKyNkZWZpbmUgc21wX2NhbGxfZnVuY3Rpb24oZnVuYyxpbmZvLHJldHJ5LHdhaXQpCSh7IDA7IH0pCisjZGVmaW5lIG9uX2VhY2hfY3B1KGZ1bmMsaW5mbyxyZXRyeSx3YWl0KQkoeyBmdW5jKGluZm8pOyAwOyB9KQorc3RhdGljIGlubGluZSB2b2lkIHNtcF9zZW5kX3Jlc2NoZWR1bGUoaW50IGNwdSkgeyB9CisjZGVmaW5lIG51bV9ib290aW5nX2NwdXMoKQkJCTEKKyNkZWZpbmUgc21wX3ByZXBhcmVfYm9vdF9jcHUoKQkJCWRvIHt9IHdoaWxlICgwKQorCisjZW5kaWYgLyogIVNNUCAqLworCisvKgorICogREVCVUdfUFJFRU1QVCBzdXBwb3J0OiBjaGVjayB3aGV0aGVyIHNtcF9wcm9jZXNzb3JfaWQoKSBpcyBiZWluZworICogdXNlZCBpbiBhIHByZWVtcHRpb24tc2FmZSB3YXkuCisgKgorICogQW4gYXJjaGl0ZWN0dXJlIGhhcyB0byBlbmFibGUgdGhpcyBkZWJ1Z2dpbmcgY29kZSBleHBsaWNpdGx5LgorICogSXQgY2FuIGRvIHNvIGJ5IHJlbmFtaW5nIHRoZSBzbXBfcHJvY2Vzc29yX2lkKCkgbWFjcm8gdG8KKyAqIF9fc21wX3Byb2Nlc3Nvcl9pZCgpLiAgVGhpcyBzaG91bGQgb25seSBiZSBkb25lIGFmdGVyIHNvbWUgbWluaW1hbAorICogdGVzdGluZywgYmVjYXVzZSB1c3VhbGx5IHRoZXJlIGFyZSBhIG51bWJlciBvZiBmYWxzZSBwb3NpdGl2ZXMKKyAqIHRoYXQgYW4gYXJjaGl0ZWN0dXJlIHdpbGwgdHJpZ2dlci4KKyAqCisgKiBUbyBmaXggYSBmYWxzZSBwb3NpdGl2ZSAoaS5lLiBzbXBfcHJvY2Vzc29yX2lkKCkgdXNlIHRoYXQgdGhlCisgKiBkZWJ1Z2dpbmcgY29kZSByZXBvcnRzIGJ1dCB3aGljaCB1c2UgZm9yIHNvbWUgcmVhc29uIGlzIGxlZ2FsKSwKKyAqIGNoYW5nZSB0aGUgc21wX3Byb2Nlc3Nvcl9pZCgpIHJlZmVyZW5jZSB0byBfc21wX3Byb2Nlc3Nvcl9pZCgpLAorICogd2hpY2ggaXMgdGhlIG5vbmRlYnVnIHZhcmlhbnQuICBOT1RFOiBkb24ndCB1c2UgdGhpcyB0byBoYWNrIGFyb3VuZAorICogcmVhbCBidWdzLgorICovCisjaWZkZWYgX19zbXBfcHJvY2Vzc29yX2lkCisjIGlmIGRlZmluZWQoQ09ORklHX1BSRUVNUFQpICYmIGRlZmluZWQoQ09ORklHX0RFQlVHX1BSRUVNUFQpCisgICBleHRlcm4gdW5zaWduZWQgaW50IHNtcF9wcm9jZXNzb3JfaWQodm9pZCk7CisjIGVsc2UKKyMgIGRlZmluZSBzbXBfcHJvY2Vzc29yX2lkKCkgX19zbXBfcHJvY2Vzc29yX2lkKCkKKyMgZW5kaWYKKyMgZGVmaW5lIF9zbXBfcHJvY2Vzc29yX2lkKCkgX19zbXBfcHJvY2Vzc29yX2lkKCkKKyNlbHNlCisjIGRlZmluZSBfc21wX3Byb2Nlc3Nvcl9pZCgpIHNtcF9wcm9jZXNzb3JfaWQoKQorI2VuZGlmCisKKyNkZWZpbmUgZ2V0X2NwdSgpCQkoeyBwcmVlbXB0X2Rpc2FibGUoKTsgc21wX3Byb2Nlc3Nvcl9pZCgpOyB9KQorI2RlZmluZSBwdXRfY3B1KCkJCXByZWVtcHRfZW5hYmxlKCkKKyNkZWZpbmUgcHV0X2NwdV9ub19yZXNjaGVkKCkJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpCisKKyNlbmRpZiAvKiBfX0xJTlVYX1NNUF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NtcF9sb2NrLmggYi9pbmNsdWRlL2xpbnV4L3NtcF9sb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYzY2U3MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvc21wX2xvY2suaApAQCAtMCwwICsxLDU0IEBACisjaWZuZGVmIF9fTElOVVhfU01QTE9DS19ICisjZGVmaW5lIF9fTElOVVhfU01QTE9DS19ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisKKyNpZmRlZiBDT05GSUdfTE9DS19LRVJORUwKKworI2RlZmluZSBrZXJuZWxfbG9ja2VkKCkJCShjdXJyZW50LT5sb2NrX2RlcHRoID49IDApCisKK2V4dGVybiBpbnQgX19sb2NrZnVuYyBfX3JlYWNxdWlyZV9rZXJuZWxfbG9jayh2b2lkKTsKK2V4dGVybiB2b2lkIF9fbG9ja2Z1bmMgX19yZWxlYXNlX2tlcm5lbF9sb2NrKHZvaWQpOworCisvKgorICogUmVsZWFzZS9yZS1hY3F1aXJlIGdsb2JhbCBrZXJuZWwgbG9jayBmb3IgdGhlIHNjaGVkdWxlcgorICovCisjZGVmaW5lIHJlbGVhc2Vfa2VybmVsX2xvY2sodHNrKSBkbyB7IAkJXAorCWlmICh1bmxpa2VseSgodHNrKS0+bG9ja19kZXB0aCA+PSAwKSkJXAorCQlfX3JlbGVhc2Vfa2VybmVsX2xvY2soKTsJXAorfSB3aGlsZSAoMCkKKworLyoKKyAqIE5vbi1TTVAga2VybmVscyB3aWxsIG5ldmVyIGJsb2NrIG9uIHRoZSBrZXJuZWwgbG9jaywKKyAqIHNvIHdlIGFyZSBiZXR0ZXIgb2ZmIHJldHVybmluZyBhIGNvbnN0YW50IHplcm8gZnJvbQorICogcmVhY3F1aXJlX2tlcm5lbF9sb2NrKCkgc28gdGhhdCB0aGUgY29tcGlsZXIgY2FuIHNlZQorICogaXQgYXQgY29tcGlsZS10aW1lLgorICovCisjaWYgZGVmaW5lZChDT05GSUdfU01QKSAmJiAhZGVmaW5lZChDT05GSUdfUFJFRU1QVF9CS0wpCisjIGRlZmluZSByZXR1cm5fdmFsdWVfb25fc21wIHJldHVybgorI2Vsc2UKKyMgZGVmaW5lIHJldHVybl92YWx1ZV9vbl9zbXAKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIGludCByZWFjcXVpcmVfa2VybmVsX2xvY2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQoreworCWlmICh1bmxpa2VseSh0YXNrLT5sb2NrX2RlcHRoID49IDApKQorCQlyZXR1cm5fdmFsdWVfb25fc21wIF9fcmVhY3F1aXJlX2tlcm5lbF9sb2NrKCk7CisJcmV0dXJuIDA7Cit9CisKK2V4dGVybiB2b2lkIF9fbG9ja2Z1bmMgbG9ja19rZXJuZWwodm9pZCkJX19hY3F1aXJlcyhrZXJuZWxfbG9jayk7CitleHRlcm4gdm9pZCBfX2xvY2tmdW5jIHVubG9ja19rZXJuZWwodm9pZCkJX19yZWxlYXNlcyhrZXJuZWxfbG9jayk7CisKKyNlbHNlCisKKyNkZWZpbmUgbG9ja19rZXJuZWwoKQkJCQlkbyB7IH0gd2hpbGUoMCkKKyNkZWZpbmUgdW5sb2NrX2tlcm5lbCgpCQkJCWRvIHsgfSB3aGlsZSgwKQorI2RlZmluZSByZWxlYXNlX2tlcm5lbF9sb2NrKHRhc2spCQlkbyB7IH0gd2hpbGUoMCkKKyNkZWZpbmUgcmVhY3F1aXJlX2tlcm5lbF9sb2NrKHRhc2spCQkwCisjZGVmaW5lIGtlcm5lbF9sb2NrZWQoKQkJCQkxCisKKyNlbmRpZiAvKiBDT05GSUdfTE9DS19LRVJORUwgKi8KKyNlbmRpZiAvKiBfX0xJTlVYX1NNUExPQ0tfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zbm1wLmggYi9pbmNsdWRlL2xpbnV4L3NubXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGIyNWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9zbm1wLmgKQEAgLTAsMCArMSwyNjYgQEAKKy8qCisgKiBEZWZpbml0aW9ucyBmb3IgTUlCcworICoKKyAqIEF1dGhvcjogSGlkZWFraSBZT1NISUZVSkkgPHlvc2hmdWppQGxpbnV4LWlwdjYub3JnPgorICovCisKKyNpZm5kZWYgX0xJTlVYX1NOTVBfSAorI2RlZmluZSBfTElOVVhfU05NUF9ICisKKy8qIGlwc3RhdHMgbWliIGRlZmluaXRpb25zICovCisvKgorICogUkZDIDEyMTM6ICBNSUItSUkKKyAqIFJGQyAyMDExICh1cGRhdGVzIDEyMTMpOiAgU05NUHYyLU1JQi1JUAorICogUkZDIDI4NjM6ICBJbnRlcmZhY2VzIEdyb3VwIE1JQgorICogUkZDIDI0NjU6ICBJUHY2IE1JQjogR2VuZXJhbCBHcm91cAorICogZHJhZnQtaWV0Zi1pcHY2LXJmYzIwMTEtdXBkYXRlLTEwLnR4dDogTUlCIGZvciBJUDogSVAgU3RhdGlzdGljcyBUYWJsZXMKKyAqLworZW51bQoreworCUlQU1RBVFNfTUlCX05VTSA9IDAsCisJSVBTVEFUU19NSUJfSU5SRUNFSVZFUywJCQkvKiBJblJlY2VpdmVzICovCisJSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMsCQkvKiBJbkhkckVycm9ycyAqLworCUlQU1RBVFNfTUlCX0lOVE9PQklHRVJST1JTLAkJLyogSW5Ub29CaWdFcnJvcnMgKi8KKwlJUFNUQVRTX01JQl9JTk5PUk9VVEVTLAkJCS8qIEluTm9Sb3V0ZXMgKi8KKwlJUFNUQVRTX01JQl9JTkFERFJFUlJPUlMsCQkvKiBJbkFkZHJFcnJvcnMgKi8KKwlJUFNUQVRTX01JQl9JTlVOS05PV05QUk9UT1MsCQkvKiBJblVua25vd25Qcm90b3MgKi8KKwlJUFNUQVRTX01JQl9JTlRSVU5DQVRFRFBLVFMsCQkvKiBJblRydW5jYXRlZFBrdHMgKi8KKwlJUFNUQVRTX01JQl9JTkRJU0NBUkRTLAkJCS8qIEluRGlzY2FyZHMgKi8KKwlJUFNUQVRTX01JQl9JTkRFTElWRVJTLAkJCS8qIEluRGVsaXZlcnMgKi8KKwlJUFNUQVRTX01JQl9PVVRGT1JXREFUQUdSQU1TLAkJLyogT3V0Rm9yd0RhdGFncmFtcyAqLworCUlQU1RBVFNfTUlCX09VVFJFUVVFU1RTLAkJLyogT3V0UmVxdWVzdHMgKi8KKwlJUFNUQVRTX01JQl9PVVRESVNDQVJEUywJCS8qIE91dERpc2NhcmRzICovCisJSVBTVEFUU19NSUJfT1VUTk9ST1VURVMsCQkvKiBPdXROb1JvdXRlcyAqLworCUlQU1RBVFNfTUlCX1JFQVNNVElNRU9VVCwJCS8qIFJlYXNtVGltZW91dCAqLworCUlQU1RBVFNfTUlCX1JFQVNNUkVRRFMsCQkJLyogUmVhc21SZXFkcyAqLworCUlQU1RBVFNfTUlCX1JFQVNNT0tTLAkJCS8qIFJlYXNtT0tzICovCisJSVBTVEFUU19NSUJfUkVBU01GQUlMUywJCQkvKiBSZWFzbUZhaWxzICovCisJSVBTVEFUU19NSUJfRlJBR09LUywJCQkvKiBGcmFnT0tzICovCisJSVBTVEFUU19NSUJfRlJBR0ZBSUxTLAkJCS8qIEZyYWdGYWlscyAqLworCUlQU1RBVFNfTUlCX0ZSQUdDUkVBVEVTLAkJLyogRnJhZ0NyZWF0ZXMgKi8KKwlJUFNUQVRTX01JQl9JTk1DQVNUUEtUUywJCS8qIEluTWNhc3RQa3RzICovCisJSVBTVEFUU19NSUJfT1VUTUNBU1RQS1RTLAkJLyogT3V0TWNhc3RQa3RzICovCisJX19JUFNUQVRTX01JQl9NQVgKK307CisKKy8qIGljbXAgbWliIGRlZmluaXRpb25zICovCisvKgorICogUkZDIDEyMTM6ICBNSUItSUkgSUNNUCBHcm91cAorICogUkZDIDIwMTEgKHVwZGF0ZXMgMTIxMyk6ICBTTk1QdjIgTUlCIGZvciBJUDogSUNNUCBncm91cAorICovCitlbnVtCit7CisJSUNNUF9NSUJfTlVNID0gMCwKKwlJQ01QX01JQl9JTk1TR1MsCQkJLyogSW5Nc2dzICovCisJSUNNUF9NSUJfSU5FUlJPUlMsCQkJLyogSW5FcnJvcnMgKi8KKwlJQ01QX01JQl9JTkRFU1RVTlJFQUNIUywJCS8qIEluRGVzdFVucmVhY2hzICovCisJSUNNUF9NSUJfSU5USU1FRVhDRFMsCQkJLyogSW5UaW1lRXhjZHMgKi8KKwlJQ01QX01JQl9JTlBBUk1QUk9CUywJCQkvKiBJblBhcm1Qcm9icyAqLworCUlDTVBfTUlCX0lOU1JDUVVFTkNIUywJCQkvKiBJblNyY1F1ZW5jaHMgKi8KKwlJQ01QX01JQl9JTlJFRElSRUNUUywJCQkvKiBJblJlZGlyZWN0cyAqLworCUlDTVBfTUlCX0lORUNIT1MsCQkJLyogSW5FY2hvcyAqLworCUlDTVBfTUlCX0lORUNIT1JFUFMsCQkJLyogSW5FY2hvUmVwcyAqLworCUlDTVBfTUlCX0lOVElNRVNUQU1QUywJCQkvKiBJblRpbWVzdGFtcHMgKi8KKwlJQ01QX01JQl9JTlRJTUVTVEFNUFJFUFMsCQkvKiBJblRpbWVzdGFtcFJlcHMgKi8KKwlJQ01QX01JQl9JTkFERFJNQVNLUywJCQkvKiBJbkFkZHJNYXNrcyAqLworCUlDTVBfTUlCX0lOQUREUk1BU0tSRVBTLAkJLyogSW5BZGRyTWFza1JlcHMgKi8KKwlJQ01QX01JQl9PVVRNU0dTLAkJCS8qIE91dE1zZ3MgKi8KKwlJQ01QX01JQl9PVVRFUlJPUlMsCQkJLyogT3V0RXJyb3JzICovCisJSUNNUF9NSUJfT1VUREVTVFVOUkVBQ0hTLAkJLyogT3V0RGVzdFVucmVhY2hzICovCisJSUNNUF9NSUJfT1VUVElNRUVYQ0RTLAkJCS8qIE91dFRpbWVFeGNkcyAqLworCUlDTVBfTUlCX09VVFBBUk1QUk9CUywJCQkvKiBPdXRQYXJtUHJvYnMgKi8KKwlJQ01QX01JQl9PVVRTUkNRVUVOQ0hTLAkJCS8qIE91dFNyY1F1ZW5jaHMgKi8KKwlJQ01QX01JQl9PVVRSRURJUkVDVFMsCQkJLyogT3V0UmVkaXJlY3RzICovCisJSUNNUF9NSUJfT1VURUNIT1MsCQkJLyogT3V0RWNob3MgKi8KKwlJQ01QX01JQl9PVVRFQ0hPUkVQUywJCQkvKiBPdXRFY2hvUmVwcyAqLworCUlDTVBfTUlCX09VVFRJTUVTVEFNUFMsCQkJLyogT3V0VGltZXN0YW1wcyAqLworCUlDTVBfTUlCX09VVFRJTUVTVEFNUFJFUFMsCQkvKiBPdXRUaW1lc3RhbXBSZXBzICovCisJSUNNUF9NSUJfT1VUQUREUk1BU0tTLAkJCS8qIE91dEFkZHJNYXNrcyAqLworCUlDTVBfTUlCX09VVEFERFJNQVNLUkVQUywJCS8qIE91dEFkZHJNYXNrUmVwcyAqLworCV9fSUNNUF9NSUJfTUFYCit9OworCisvKiBpY21wNiBtaWIgZGVmaW5pdGlvbnMgKi8KKy8qCisgKiBSRkMgMjQ2NjogIElDTVB2Ni1NSUIKKyAqLworZW51bQoreworCUlDTVA2X01JQl9OVU0gPSAwLAorCUlDTVA2X01JQl9JTk1TR1MsCQkJLyogSW5Nc2dzICovCisJSUNNUDZfTUlCX0lORVJST1JTLAkJCS8qIEluRXJyb3JzICovCisJSUNNUDZfTUlCX0lOREVTVFVOUkVBQ0hTLAkJLyogSW5EZXN0VW5yZWFjaHMgKi8KKwlJQ01QNl9NSUJfSU5QS1RUT09CSUdTLAkJCS8qIEluUGt0VG9vQmlncyAqLworCUlDTVA2X01JQl9JTlRJTUVFWENEUywJCQkvKiBJblRpbWVFeGNkcyAqLworCUlDTVA2X01JQl9JTlBBUk1QUk9CTEVNUywJCS8qIEluUGFybVByb2JsZW1zICovCisJSUNNUDZfTUlCX0lORUNIT1MsCQkJLyogSW5FY2hvcyAqLworCUlDTVA2X01JQl9JTkVDSE9SRVBMSUVTLAkJLyogSW5FY2hvUmVwbGllcyAqLworCUlDTVA2X01JQl9JTkdST1VQTUVNQlFVRVJJRVMsCQkvKiBJbkdyb3VwTWVtYlF1ZXJpZXMgKi8KKwlJQ01QNl9NSUJfSU5HUk9VUE1FTUJSRVNQT05TRVMsCQkvKiBJbkdyb3VwTWVtYlJlc3BvbnNlcyAqLworCUlDTVA2X01JQl9JTkdST1VQTUVNQlJFRFVDVElPTlMsCS8qIEluR3JvdXBNZW1iUmVkdWN0aW9ucyAqLworCUlDTVA2X01JQl9JTlJPVVRFUlNPTElDSVRTLAkJLyogSW5Sb3V0ZXJTb2xpY2l0cyAqLworCUlDTVA2X01JQl9JTlJPVVRFUkFEVkVSVElTRU1FTlRTLAkvKiBJblJvdXRlckFkdmVydGlzZW1lbnRzICovCisJSUNNUDZfTUlCX0lOTkVJR0hCT1JTT0xJQ0lUUywJCS8qIEluTmVpZ2hib3JTb2xpY2l0cyAqLworCUlDTVA2X01JQl9JTk5FSUdIQk9SQURWRVJUSVNFTUVOVFMsCS8qIEluTmVpZ2hib3JBZHZlcnRpc2VtZW50cyAqLworCUlDTVA2X01JQl9JTlJFRElSRUNUUywJCQkvKiBJblJlZGlyZWN0cyAqLworCUlDTVA2X01JQl9PVVRNU0dTLAkJCS8qIE91dE1zZ3MgKi8KKwlJQ01QNl9NSUJfT1VUREVTVFVOUkVBQ0hTLAkJLyogT3V0RGVzdFVucmVhY2hzICovCisJSUNNUDZfTUlCX09VVFBLVFRPT0JJR1MsCQkvKiBPdXRQa3RUb29CaWdzICovCisJSUNNUDZfTUlCX09VVFRJTUVFWENEUywJCQkvKiBPdXRUaW1lRXhjZHMgKi8KKwlJQ01QNl9NSUJfT1VUUEFSTVBST0JMRU1TLAkJLyogT3V0UGFybVByb2JsZW1zICovCisJSUNNUDZfTUlCX09VVEVDSE9SRVBMSUVTLAkJLyogT3V0RWNob1JlcGxpZXMgKi8KKwlJQ01QNl9NSUJfT1VUUk9VVEVSU09MSUNJVFMsCQkvKiBPdXRSb3V0ZXJTb2xpY2l0cyAqLworCUlDTVA2X01JQl9PVVRORUlHSEJPUlNPTElDSVRTLAkJLyogT3V0TmVpZ2hib3JTb2xpY2l0cyAqLworCUlDTVA2X01JQl9PVVRORUlHSEJPUkFEVkVSVElTRU1FTlRTLAkvKiBPdXROZWlnaGJvckFkdmVydGlzZW1lbnRzICovCisJSUNNUDZfTUlCX09VVFJFRElSRUNUUywJCQkvKiBPdXRSZWRpcmVjdHMgKi8KKwlJQ01QNl9NSUJfT1VUR1JPVVBNRU1CUkVTUE9OU0VTLAkvKiBPdXRHcm91cE1lbWJSZXNwb25zZXMgKi8KKwlJQ01QNl9NSUJfT1VUR1JPVVBNRU1CUkVEVUNUSU9OUywJLyogT3V0R3JvdXBNZW1iUmVkdWN0aW9ucyAqLworCV9fSUNNUDZfTUlCX01BWAorfTsKKworLyogdGNwIG1pYiBkZWZpbml0aW9ucyAqLworLyoKKyAqIFJGQyAxMjEzOiAgTUlCLUlJIFRDUCBncm91cAorICogUkZDIDIwMTIgKHVwZGF0ZXMgMTIxMyk6ICBTTk1QdjItTUlCLVRDUAorICovCitlbnVtCit7CisJVENQX01JQl9OVU0gPSAwLAorCVRDUF9NSUJfUlRPQUxHT1JJVEhNLAkJCS8qIFJ0b0FsZ29yaXRobSAqLworCVRDUF9NSUJfUlRPTUlOLAkJCQkvKiBSdG9NaW4gKi8KKwlUQ1BfTUlCX1JUT01BWCwJCQkJLyogUnRvTWF4ICovCisJVENQX01JQl9NQVhDT05OLAkJCS8qIE1heENvbm4gKi8KKwlUQ1BfTUlCX0FDVElWRU9QRU5TLAkJCS8qIEFjdGl2ZU9wZW5zICovCisJVENQX01JQl9QQVNTSVZFT1BFTlMsCQkJLyogUGFzc2l2ZU9wZW5zICovCisJVENQX01JQl9BVFRFTVBURkFJTFMsCQkJLyogQXR0ZW1wdEZhaWxzICovCisJVENQX01JQl9FU1RBQlJFU0VUUywJCQkvKiBFc3RhYlJlc2V0cyAqLworCVRDUF9NSUJfQ1VSUkVTVEFCLAkJCS8qIEN1cnJFc3RhYiAqLworCVRDUF9NSUJfSU5TRUdTLAkJCQkvKiBJblNlZ3MgKi8KKwlUQ1BfTUlCX09VVFNFR1MsCQkJLyogT3V0U2VncyAqLworCVRDUF9NSUJfUkVUUkFOU1NFR1MsCQkJLyogUmV0cmFuc1NlZ3MgKi8KKwlUQ1BfTUlCX0lORVJSUywJCQkJLyogSW5FcnJzICovCisJVENQX01JQl9PVVRSU1RTLAkJCS8qIE91dFJzdHMgKi8KKwlfX1RDUF9NSUJfTUFYCit9OworCisvKiB1ZHAgbWliIGRlZmluaXRpb25zICovCisvKgorICogUkZDIDEyMTM6ICBNSUItSUkgVURQIGdyb3VwCisgKiBSRkMgMjAxMyAodXBkYXRlcyAxMjEzKTogIFNOTVB2Mi1NSUItVURQCisgKi8KK2VudW0KK3sKKwlVRFBfTUlCX05VTSA9IDAsCisJVURQX01JQl9JTkRBVEFHUkFNUywJCQkvKiBJbkRhdGFncmFtcyAqLworCVVEUF9NSUJfTk9QT1JUUywJCQkvKiBOb1BvcnRzICovCisJVURQX01JQl9JTkVSUk9SUywJCQkvKiBJbkVycm9ycyAqLworCVVEUF9NSUJfT1VUREFUQUdSQU1TLAkJCS8qIE91dERhdGFncmFtcyAqLworCV9fVURQX01JQl9NQVgKK307CisKKy8qIHNjdHAgbWliIGRlZmluaXRpb25zICovCisvKgorICogZHJhZnQtaWV0Zi1zaWd0cmFuLXNjdHAtbWliLTA3LnR4dAorICovCitlbnVtCit7CisJU0NUUF9NSUJfTlVNID0gMCwKKwlTQ1RQX01JQl9DVVJSRVNUQUIsCQkJLyogQ3VyckVzdGFiICovCisJU0NUUF9NSUJfQUNUSVZFRVNUQUJTLAkJCS8qIEFjdGl2ZUVzdGFicyAqLworCVNDVFBfTUlCX1BBU1NJVkVFU1RBQlMsCQkJLyogUGFzc2l2ZUVzdGFicyAqLworCVNDVFBfTUlCX0FCT1JURURTLAkJCS8qIEFib3J0ZWRzICovCisJU0NUUF9NSUJfU0hVVERPV05TLAkJCS8qIFNodXRkb3ducyAqLworCVNDVFBfTUlCX09VVE9GQkxVRVMsCQkJLyogT3V0T2ZCbHVlcyAqLworCVNDVFBfTUlCX0NIRUNLU1VNRVJST1JTLAkJLyogQ2hlY2tzdW1FcnJvcnMgKi8KKwlTQ1RQX01JQl9PVVRDVFJMQ0hVTktTLAkJCS8qIE91dEN0cmxDaHVua3MgKi8KKwlTQ1RQX01JQl9PVVRPUkRFUkNIVU5LUywJCS8qIE91dE9yZGVyQ2h1bmtzICovCisJU0NUUF9NSUJfT1VUVU5PUkRFUkNIVU5LUywJCS8qIE91dFVub3JkZXJDaHVua3MgKi8KKwlTQ1RQX01JQl9JTkNUUkxDSFVOS1MsCQkJLyogSW5DdHJsQ2h1bmtzICovCisJU0NUUF9NSUJfSU5PUkRFUkNIVU5LUywJCQkvKiBJbk9yZGVyQ2h1bmtzICovCisJU0NUUF9NSUJfSU5VTk9SREVSQ0hVTktTLAkJLyogSW5Vbm9yZGVyQ2h1bmtzICovCisJU0NUUF9NSUJfRlJBR1VTUk1TR1MsCQkJLyogRnJhZ1Vzck1zZ3MgKi8KKwlTQ1RQX01JQl9SRUFTTVVTUk1TR1MsCQkJLyogUmVhc21Vc3JNc2dzICovCisJU0NUUF9NSUJfT1VUU0NUUFBBQ0tTLAkJCS8qIE91dFNDVFBQYWNrcyAqLworCVNDVFBfTUlCX0lOU0NUUFBBQ0tTLAkJCS8qIEluU0NUUFBhY2tzICovCisJU0NUUF9NSUJfUlRPQUxHT1JJVEhNLAkJCS8qIFJ0b0FsZ29yaXRobSAqLworCVNDVFBfTUlCX1JUT01JTiwJCQkvKiBSdG9NaW4gKi8KKwlTQ1RQX01JQl9SVE9NQVgsCQkJLyogUnRvTWF4ICovCisJU0NUUF9NSUJfUlRPSU5JVElBTCwJCQkvKiBSdG9Jbml0aWFsICovCisJU0NUUF9NSUJfVkFMQ09PS0lFTElGRSwJCQkvKiBWYWxDb29raWVMaWZlICovCisJU0NUUF9NSUJfTUFYSU5JVFJFVFIsCQkJLyogTWF4SW5pdFJldHIgKi8KKwlfX1NDVFBfTUlCX01BWAorfTsKKworLyogbGludXggbWliIGRlZmluaXRpb25zICovCitlbnVtCit7CisJTElOVVhfTUlCX05VTSA9IDAsCisJTElOVVhfTUlCX1NZTkNPT0tJRVNTRU5ULAkJLyogU3luY29va2llc1NlbnQgKi8KKwlMSU5VWF9NSUJfU1lOQ09PS0lFU1JFQ1YsCQkvKiBTeW5jb29raWVzUmVjdiAqLworCUxJTlVYX01JQl9TWU5DT09LSUVTRkFJTEVELAkJLyogU3luY29va2llc0ZhaWxlZCAqLworCUxJTlVYX01JQl9FTUJSWU9OSUNSU1RTLAkJLyogRW1icnlvbmljUnN0cyAqLworCUxJTlVYX01JQl9QUlVORUNBTExFRCwJCQkvKiBQcnVuZUNhbGxlZCAqLworCUxJTlVYX01JQl9SQ1ZQUlVORUQsCQkJLyogUmN2UHJ1bmVkICovCisJTElOVVhfTUlCX09GT1BSVU5FRCwJCQkvKiBPZm9QcnVuZWQgKi8KKwlMSU5VWF9NSUJfT1VUT0ZXSU5ET1dJQ01QUywJCS8qIE91dE9mV2luZG93SWNtcHMgKi8KKwlMSU5VWF9NSUJfTE9DS0RST1BQRURJQ01QUywJCS8qIExvY2tEcm9wcGVkSWNtcHMgKi8KKwlMSU5VWF9NSUJfQVJQRklMVEVSLAkJCS8qIEFycEZpbHRlciAqLworCUxJTlVYX01JQl9USU1FV0FJVEVELAkJCS8qIFRpbWVXYWl0ZWQgKi8KKwlMSU5VWF9NSUJfVElNRVdBSVRSRUNZQ0xFRCwJCS8qIFRpbWVXYWl0UmVjeWNsZWQgKi8KKwlMSU5VWF9NSUJfVElNRVdBSVRLSUxMRUQsCQkvKiBUaW1lV2FpdEtpbGxlZCAqLworCUxJTlVYX01JQl9QQVdTUEFTU0lWRVJFSkVDVEVELAkJLyogUEFXU1Bhc3NpdmVSZWplY3RlZCAqLworCUxJTlVYX01JQl9QQVdTQUNUSVZFUkVKRUNURUQsCQkvKiBQQVdTQWN0aXZlUmVqZWN0ZWQgKi8KKwlMSU5VWF9NSUJfUEFXU0VTVEFCUkVKRUNURUQsCQkvKiBQQVdTRXN0YWJSZWplY3RlZCAqLworCUxJTlVYX01JQl9ERUxBWUVEQUNLUywJCQkvKiBEZWxheWVkQUNLcyAqLworCUxJTlVYX01JQl9ERUxBWUVEQUNLTE9DS0VELAkJLyogRGVsYXllZEFDS0xvY2tlZCAqLworCUxJTlVYX01JQl9ERUxBWUVEQUNLTE9TVCwJCS8qIERlbGF5ZWRBQ0tMb3N0ICovCisJTElOVVhfTUlCX0xJU1RFTk9WRVJGTE9XUywJCS8qIExpc3Rlbk92ZXJmbG93cyAqLworCUxJTlVYX01JQl9MSVNURU5EUk9QUywJCQkvKiBMaXN0ZW5Ecm9wcyAqLworCUxJTlVYX01JQl9UQ1BQUkVRVUVVRUQsCQkJLyogVENQUHJlcXVldWVkICovCisJTElOVVhfTUlCX1RDUERJUkVDVENPUFlGUk9NQkFDS0xPRywJLyogVENQRGlyZWN0Q29weUZyb21CYWNrbG9nICovCisJTElOVVhfTUlCX1RDUERJUkVDVENPUFlGUk9NUFJFUVVFVUUsCS8qIFRDUERpcmVjdENvcHlGcm9tUHJlcXVldWUgKi8KKwlMSU5VWF9NSUJfVENQUFJFUVVFVUVEUk9QUEVELAkJLyogVENQUHJlcXVldWVEcm9wcGVkICovCisJTElOVVhfTUlCX1RDUEhQSElUUywJCQkvKiBUQ1BIUEhpdHMgKi8KKwlMSU5VWF9NSUJfVENQSFBISVRTVE9VU0VSLAkJLyogVENQSFBIaXRzVG9Vc2VyICovCisJTElOVVhfTUlCX1RDUFBVUkVBQ0tTLAkJCS8qIFRDUFB1cmVBY2tzICovCisJTElOVVhfTUlCX1RDUEhQQUNLUywJCQkvKiBUQ1BIUEFja3MgKi8KKwlMSU5VWF9NSUJfVENQUkVOT1JFQ09WRVJZLAkJLyogVENQUmVub1JlY292ZXJ5ICovCisJTElOVVhfTUlCX1RDUFNBQ0tSRUNPVkVSWSwJCS8qIFRDUFNhY2tSZWNvdmVyeSAqLworCUxJTlVYX01JQl9UQ1BTQUNLUkVORUdJTkcsCQkvKiBUQ1BTQUNLUmVuZWdpbmcgKi8KKwlMSU5VWF9NSUJfVENQRkFDS1JFT1JERVIsCQkvKiBUQ1BGQUNLUmVvcmRlciAqLworCUxJTlVYX01JQl9UQ1BTQUNLUkVPUkRFUiwJCS8qIFRDUFNBQ0tSZW9yZGVyICovCisJTElOVVhfTUlCX1RDUFJFTk9SRU9SREVSLAkJLyogVENQUmVub1Jlb3JkZXIgKi8KKwlMSU5VWF9NSUJfVENQVFNSRU9SREVSLAkJCS8qIFRDUFRTUmVvcmRlciAqLworCUxJTlVYX01JQl9UQ1BGVUxMVU5ETywJCQkvKiBUQ1BGdWxsVW5kbyAqLworCUxJTlVYX01JQl9UQ1BQQVJUSUFMVU5ETywJCS8qIFRDUFBhcnRpYWxVbmRvICovCisJTElOVVhfTUlCX1RDUERTQUNLVU5ETywJCQkvKiBUQ1BEU0FDS1VuZG8gKi8KKwlMSU5VWF9NSUJfVENQTE9TU1VORE8sCQkJLyogVENQTG9zc1VuZG8gKi8KKwlMSU5VWF9NSUJfVENQTE9TUywJCQkvKiBUQ1BMb3NzICovCisJTElOVVhfTUlCX1RDUExPU1RSRVRSQU5TTUlULAkJLyogVENQTG9zdFJldHJhbnNtaXQgKi8KKwlMSU5VWF9NSUJfVENQUkVOT0ZBSUxVUkVTLAkJLyogVENQUmVub0ZhaWx1cmVzICovCisJTElOVVhfTUlCX1RDUFNBQ0tGQUlMVVJFUywJCS8qIFRDUFNhY2tGYWlsdXJlcyAqLworCUxJTlVYX01JQl9UQ1BMT1NTRkFJTFVSRVMsCQkvKiBUQ1BMb3NzRmFpbHVyZXMgKi8KKwlMSU5VWF9NSUJfVENQRkFTVFJFVFJBTlMsCQkvKiBUQ1BGYXN0UmV0cmFucyAqLworCUxJTlVYX01JQl9UQ1BGT1JXQVJEUkVUUkFOUywJCS8qIFRDUEZvcndhcmRSZXRyYW5zICovCisJTElOVVhfTUlCX1RDUFNMT1dTVEFSVFJFVFJBTlMsCQkvKiBUQ1BTbG93U3RhcnRSZXRyYW5zICovCisJTElOVVhfTUlCX1RDUFRJTUVPVVRTLAkJCS8qIFRDUFRpbWVvdXRzICovCisJTElOVVhfTUlCX1RDUFJFTk9SRUNPVkVSWUZBSUwsCQkvKiBUQ1BSZW5vUmVjb3ZlcnlGYWlsICovCisJTElOVVhfTUlCX1RDUFNBQ0tSRUNPVkVSWUZBSUwsCQkvKiBUQ1BTYWNrUmVjb3ZlcnlGYWlsICovCisJTElOVVhfTUlCX1RDUFNDSEVEVUxFUkZBSUxFRCwJCS8qIFRDUFNjaGVkdWxlckZhaWxlZCAqLworCUxJTlVYX01JQl9UQ1BSQ1ZDT0xMQVBTRUQsCQkvKiBUQ1BSY3ZDb2xsYXBzZWQgKi8KKwlMSU5VWF9NSUJfVENQRFNBQ0tPTERTRU5ULAkJLyogVENQRFNBQ0tPbGRTZW50ICovCisJTElOVVhfTUlCX1RDUERTQUNLT0ZPU0VOVCwJCS8qIFRDUERTQUNLT2ZvU2VudCAqLworCUxJTlVYX01JQl9UQ1BEU0FDS1JFQ1YsCQkJLyogVENQRFNBQ0tSZWN2ICovCisJTElOVVhfTUlCX1RDUERTQUNLT0ZPUkVDViwJCS8qIFRDUERTQUNLT2ZvUmVjdiAqLworCUxJTlVYX01JQl9UQ1BBQk9SVE9OU1lOLAkJLyogVENQQWJvcnRPblN5biAqLworCUxJTlVYX01JQl9UQ1BBQk9SVE9OREFUQSwJCS8qIFRDUEFib3J0T25EYXRhICovCisJTElOVVhfTUlCX1RDUEFCT1JUT05DTE9TRSwJCS8qIFRDUEFib3J0T25DbG9zZSAqLworCUxJTlVYX01JQl9UQ1BBQk9SVE9OTUVNT1JZLAkJLyogVENQQWJvcnRPbk1lbW9yeSAqLworCUxJTlVYX01JQl9UQ1BBQk9SVE9OVElNRU9VVCwJCS8qIFRDUEFib3J0T25UaW1lb3V0ICovCisJTElOVVhfTUlCX1RDUEFCT1JUT05MSU5HRVIsCQkvKiBUQ1BBYm9ydE9uTGluZ2VyICovCisJTElOVVhfTUlCX1RDUEFCT1JURkFJTEVELAkJLyogVENQQWJvcnRGYWlsZWQgKi8KKwlMSU5VWF9NSUJfVENQTUVNT1JZUFJFU1NVUkVTLAkJLyogVENQTWVtb3J5UHJlc3N1cmVzICovCisJX19MSU5VWF9NSUJfTUFYCit9OworCisjZW5kaWYJLyogX0xJTlVYX1NOTVBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zb2NrZXQuaCBiL2luY2x1ZGUvbGludXgvc29ja2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTVjN2Q5NgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvc29ja2V0LmgKQEAgLTAsMCArMSwyOTUgQEAKKyNpZm5kZWYgX0xJTlVYX1NPQ0tFVF9ICisjZGVmaW5lIF9MSU5VWF9TT0NLRVRfSAorCisvKgorICogRGVzaXJlZCBkZXNpZ24gb2YgbWF4aW11bSBzaXplIGFuZCBhbGlnbm1lbnQgKHNlZSBSRkMyNTUzKQorICovCisjZGVmaW5lIF9LX1NTX01BWFNJWkUJMTI4CS8qIEltcGxlbWVudGF0aW9uIHNwZWNpZmljIG1heCBzaXplICovCisjZGVmaW5lIF9LX1NTX0FMSUdOU0laRQkoX19hbGlnbm9mX18gKHN0cnVjdCBzb2NrYWRkciAqKSkKKwkJCQkvKiBJbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyBkZXNpcmVkIGFsaWdubWVudCAqLworCitzdHJ1Y3QgX19rZXJuZWxfc29ja2FkZHJfc3RvcmFnZSB7CisJdW5zaWduZWQgc2hvcnQJc3NfZmFtaWx5OwkJLyogYWRkcmVzcyBmYW1pbHkgKi8KKwkvKiBGb2xsb3dpbmcgZmllbGQocykgYXJlIGltcGxlbWVudGF0aW9uIHNwZWNpZmljICovCisJY2hhcgkJX19kYXRhW19LX1NTX01BWFNJWkUgLSBzaXplb2YodW5zaWduZWQgc2hvcnQpXTsKKwkJCQkvKiBzcGFjZSB0byBhY2hpZXZlIGRlc2lyZWQgc2l6ZSwgKi8KKwkJCQkvKiBfU1NfTUFYU0laRSB2YWx1ZSBtaW51cyBzaXplIG9mIHNzX2ZhbWlseSAqLworfSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZChfS19TU19BTElHTlNJWkUpKSk7CS8qIGZvcmNlIGRlc2lyZWQgYWxpZ25tZW50ICovCisKKyNpZiBkZWZpbmVkKF9fS0VSTkVMX18pIHx8ICFkZWZpbmVkKF9fR0xJQkNfXykgfHwgKF9fR0xJQkNfXyA8IDIpCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4JCS8qIGZvciBDT05GSUdfQ09NUEFUICovCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGFzbS9zb2NrZXQuaD4JCQkvKiBhcmNoLWRlcGVuZGVudCBkZWZpbmVzCSovCisjaW5jbHVkZSA8bGludXgvc29ja2lvcy5oPgkJLyogdGhlIFNJT0N4eHggSS9PIGNvbnRyb2xzCSovCisjaW5jbHVkZSA8bGludXgvdWlvLmg+CQkJLyogaW92ZWMgc3VwcG9ydAkJKi8KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgkJLyogcGlkX3QJCQkqLworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CQkvKiBfX3VzZXIJCQkqLworCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CXNhX2ZhbWlseV90OworCisvKgorICoJMTAwMy4xZyByZXF1aXJlcyBzYV9mYW1pbHlfdCBhbmQgdGhhdCBzYV9kYXRhIGlzIGNoYXIuCisgKi8KKyAKK3N0cnVjdCBzb2NrYWRkciB7CisJc2FfZmFtaWx5X3QJc2FfZmFtaWx5OwkvKiBhZGRyZXNzIGZhbWlseSwgQUZfeHh4CSovCisJY2hhcgkJc2FfZGF0YVsxNF07CS8qIDE0IGJ5dGVzIG9mIHByb3RvY29sIGFkZHJlc3MJKi8KK307CisKK3N0cnVjdCBsaW5nZXIgeworCWludAkJbF9vbm9mZjsJLyogTGluZ2VyIGFjdGl2ZQkJKi8KKwlpbnQJCWxfbGluZ2VyOwkvKiBIb3cgbG9uZyB0byBsaW5nZXIgZm9yCSovCit9OworCisjZGVmaW5lIHNvY2thZGRyX3N0b3JhZ2UgX19rZXJuZWxfc29ja2FkZHJfc3RvcmFnZQorCisvKgorICoJQXMgd2UgZG8gNC40QlNEIG1lc3NhZ2UgcGFzc2luZyB3ZSB1c2UgYSA0LjRCU0QgbWVzc2FnZSBwYXNzaW5nCisgKglzeXN0ZW0sIG5vdCA0LjMuIFRodXMgbXNnX2FjY3JpZ2h0cyhsZW4pIGFyZSBub3cgbWlzc2luZy4gVGhleQorICoJYmVsb25nIGluIGFuIG9ic2N1cmUgbGliYyBlbXVsYXRpb24gb3IgdGhlIGJpbi4KKyAqLworIAorc3RydWN0IG1zZ2hkciB7CisJdm9pZAkqCW1zZ19uYW1lOwkvKiBTb2NrZXQgbmFtZQkJCSovCisJaW50CQltc2dfbmFtZWxlbjsJLyogTGVuZ3RoIG9mIG5hbWUJCSovCisJc3RydWN0IGlvdmVjICoJbXNnX2lvdjsJLyogRGF0YSBibG9ja3MJCQkqLworCV9fa2VybmVsX3NpemVfdAltc2dfaW92bGVuOwkvKiBOdW1iZXIgb2YgYmxvY2tzCQkqLworCXZvaWQgCSoJbXNnX2NvbnRyb2w7CS8qIFBlciBwcm90b2NvbCBtYWdpYyAoZWcgQlNEIGZpbGUgZGVzY3JpcHRvciBwYXNzaW5nKSAqLworCV9fa2VybmVsX3NpemVfdAltc2dfY29udHJvbGxlbjsJLyogTGVuZ3RoIG9mIGNtc2cgbGlzdCAqLworCXVuc2lnbmVkCW1zZ19mbGFnczsKK307CisKKy8qCisgKglQT1NJWCAxMDAzLjFnIC0gYW5jaWxsYXJ5IGRhdGEgb2JqZWN0IGluZm9ybWF0aW9uCisgKglBbmNpbGxhcnkgZGF0YSBjb25zaXRzIG9mIGEgc2VxdWVuY2Ugb2YgcGFpcnMgb2YKKyAqCShjbXNnaGRyLCBjbXNnX2RhdGFbXSkKKyAqLworCitzdHJ1Y3QgY21zZ2hkciB7CisJX19rZXJuZWxfc2l6ZV90CWNtc2dfbGVuOwkvKiBkYXRhIGJ5dGUgY291bnQsIGluY2x1ZGluZyBoZHIgKi8KKyAgICAgICAgaW50CQljbXNnX2xldmVsOwkvKiBvcmlnaW5hdGluZyBwcm90b2NvbCAqLworICAgICAgICBpbnQJCWNtc2dfdHlwZTsJLyogcHJvdG9jb2wtc3BlY2lmaWMgdHlwZSAqLworfTsKKworLyoKKyAqCUFuY2lsbGlhcnkgZGF0YSBvYmplY3QgaW5mb3JtYXRpb24gTUFDUk9TCisgKglUYWJsZSA1LTE0IG9mIFBPU0lYIDEwMDMuMWcKKyAqLworCisjZGVmaW5lIF9fQ01TR19OWFRIRFIoY3RsLCBsZW4sIGNtc2cpIF9fY21zZ19ueHRoZHIoKGN0bCksKGxlbiksKGNtc2cpKQorI2RlZmluZSBDTVNHX05YVEhEUihtaGRyLCBjbXNnKSBjbXNnX254dGhkcigobWhkciksIChjbXNnKSkKKworI2RlZmluZSBDTVNHX0FMSUdOKGxlbikgKCAoKGxlbikrc2l6ZW9mKGxvbmcpLTEpICYgfihzaXplb2YobG9uZyktMSkgKQorCisjZGVmaW5lIENNU0dfREFUQShjbXNnKQkoKHZvaWQgKikoKGNoYXIgKikoY21zZykgKyBDTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgY21zZ2hkcikpKSkKKyNkZWZpbmUgQ01TR19TUEFDRShsZW4pIChDTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgY21zZ2hkcikpICsgQ01TR19BTElHTihsZW4pKQorI2RlZmluZSBDTVNHX0xFTihsZW4pIChDTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgY21zZ2hkcikpICsgKGxlbikpCisKKyNkZWZpbmUgX19DTVNHX0ZJUlNUSERSKGN0bCxsZW4pICgobGVuKSA+PSBzaXplb2Yoc3RydWN0IGNtc2doZHIpID8gXAorCQkJCSAgKHN0cnVjdCBjbXNnaGRyICopKGN0bCkgOiBcCisJCQkJICAoc3RydWN0IGNtc2doZHIgKilOVUxMKQorI2RlZmluZSBDTVNHX0ZJUlNUSERSKG1zZykJX19DTVNHX0ZJUlNUSERSKChtc2cpLT5tc2dfY29udHJvbCwgKG1zZyktPm1zZ19jb250cm9sbGVuKQorI2RlZmluZSBDTVNHX09LKG1oZHIsIGNtc2cpICgoY21zZyktPmNtc2dfbGVuID49IHNpemVvZihzdHJ1Y3QgY21zZ2hkcikgJiYgXAorCQkJICAgICAoY21zZyktPmNtc2dfbGVuIDw9ICh1bnNpZ25lZCBsb25nKSBcCisJCQkgICAgICgobWhkciktPm1zZ19jb250cm9sbGVuIC0gXAorCQkJICAgICAgKChjaGFyICopKGNtc2cpIC0gKGNoYXIgKikobWhkciktPm1zZ19jb250cm9sKSkpCisKKy8qCisgKglUaGlzIG1lc3Mgd2lsbCBnbyBhd2F5IHdpdGggZ2xpYmMKKyAqLworIAorI2lmZGVmIF9fS0VSTkVMX18KKyNkZWZpbmUgX19LSU5MSU5FIHN0YXRpYyBpbmxpbmUKKyNlbGlmICBkZWZpbmVkKF9fR05VQ19fKSAKKyNkZWZpbmUgX19LSU5MSU5FIHN0YXRpYyBfX2lubGluZV9fCisjZWxpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorI2RlZmluZSBfX0tJTkxJTkUgc3RhdGljIGlubGluZQorI2Vsc2UKKyNkZWZpbmUgX19LSU5MSU5FIHN0YXRpYworI2VuZGlmCisKKworLyoKKyAqCUdldCB0aGUgbmV4dCBjbXNnIGhlYWRlcgorICoKKyAqCVBMRUFTRSwgZG8gbm90IHRvdWNoIHRoaXMgZnVuY3Rpb24uIElmIHlvdSB0aGluaywgdGhhdCBpdCBpcworICoJaW5jb3JyZWN0LCBncmVwIGtlcm5lbCBzb3VyY2VzIGFuZCB0aGluayBhYm91dCBjb25zZXF1ZW5jZXMKKyAqCWJlZm9yZSB0cnlpbmcgdG8gaW1wcm92ZSBpdC4KKyAqCisgKglOb3cgaXQgYWx3YXlzIHJldHVybnMgdmFsaWQsIG5vdCB0cnVuY2F0ZWQgYW5jaWxsYXJ5IG9iamVjdAorICoJSEVBREVSLiBCdXQgY2FsbGVyIHN0aWxsIE1VU1QgY2hlY2ssIHRoYXQgY21zZy0+Y21zZ19sZW4gaXMKKyAqCWluc2lkZSByYW5nZSwgZ2l2ZW4gYnkgbXNnLT5tc2dfY29udHJvbGxlbiBiZWZvcmUgdXNpbmcKKyAqCWFuY2lsbGFyeSBvYmplY3QgREFUQS4JCQkJLS1BTksgKDk4MDczMSkKKyAqLworIAorX19LSU5MSU5FIHN0cnVjdCBjbXNnaGRyICogX19jbXNnX254dGhkcih2b2lkICpfX2N0bCwgX19rZXJuZWxfc2l6ZV90IF9fc2l6ZSwKKwkJCQkJICAgICAgIHN0cnVjdCBjbXNnaGRyICpfX2Ntc2cpCit7CisJc3RydWN0IGNtc2doZHIgKiBfX3B0cjsKKworCV9fcHRyID0gKHN0cnVjdCBjbXNnaGRyKikoKCh1bnNpZ25lZCBjaGFyICopIF9fY21zZykgKyAgQ01TR19BTElHTihfX2Ntc2ctPmNtc2dfbGVuKSk7CisJaWYgKCh1bnNpZ25lZCBsb25nKSgoY2hhciopKF9fcHRyKzEpIC0gKGNoYXIgKikgX19jdGwpID4gX19zaXplKQorCQlyZXR1cm4gKHN0cnVjdCBjbXNnaGRyICopMDsKKworCXJldHVybiBfX3B0cjsKK30KKworX19LSU5MSU5FIHN0cnVjdCBjbXNnaGRyICogY21zZ19ueHRoZHIgKHN0cnVjdCBtc2doZHIgKl9fbXNnLCBzdHJ1Y3QgY21zZ2hkciAqX19jbXNnKQoreworCXJldHVybiBfX2Ntc2dfbnh0aGRyKF9fbXNnLT5tc2dfY29udHJvbCwgX19tc2ctPm1zZ19jb250cm9sbGVuLCBfX2Ntc2cpOworfQorCisvKiAiU29ja2V0Ii1sZXZlbCBjb250cm9sIG1lc3NhZ2UgdHlwZXM6ICovCisKKyNkZWZpbmUJU0NNX1JJR0hUUwkweDAxCQkvKiBydzogYWNjZXNzIHJpZ2h0cyAoYXJyYXkgb2YgaW50KSAqLworI2RlZmluZSBTQ01fQ1JFREVOVElBTFMgMHgwMgkJLyogcnc6IHN0cnVjdCB1Y3JlZAkJKi8KKworc3RydWN0IHVjcmVkIHsKKwlfX3UzMglwaWQ7CisJX191MzIJdWlkOworCV9fdTMyCWdpZDsKK307CisKKy8qIFN1cHBvcnRlZCBhZGRyZXNzIGZhbWlsaWVzLiAqLworI2RlZmluZSBBRl9VTlNQRUMJMAorI2RlZmluZSBBRl9VTklYCQkxCS8qIFVuaXggZG9tYWluIHNvY2tldHMgCQkqLworI2RlZmluZSBBRl9MT0NBTAkxCS8qIFBPU0lYIG5hbWUgZm9yIEFGX1VOSVgJKi8KKyNkZWZpbmUgQUZfSU5FVAkJMgkvKiBJbnRlcm5ldCBJUCBQcm90b2NvbCAJKi8KKyNkZWZpbmUgQUZfQVgyNQkJMwkvKiBBbWF0ZXVyIFJhZGlvIEFYLjI1IAkJKi8KKyNkZWZpbmUgQUZfSVBYCQk0CS8qIE5vdmVsbCBJUFggCQkJKi8KKyNkZWZpbmUgQUZfQVBQTEVUQUxLCTUJLyogQXBwbGVUYWxrIEREUCAJCSovCisjZGVmaW5lIEFGX05FVFJPTQk2CS8qIEFtYXRldXIgUmFkaW8gTkVUL1JPTSAJKi8KKyNkZWZpbmUgQUZfQlJJREdFCTcJLyogTXVsdGlwcm90b2NvbCBicmlkZ2UgCSovCisjZGVmaW5lIEFGX0FUTVBWQwk4CS8qIEFUTSBQVkNzCQkJKi8KKyNkZWZpbmUgQUZfWDI1CQk5CS8qIFJlc2VydmVkIGZvciBYLjI1IHByb2plY3QgCSovCisjZGVmaW5lIEFGX0lORVQ2CTEwCS8qIElQIHZlcnNpb24gNgkJCSovCisjZGVmaW5lIEFGX1JPU0UJCTExCS8qIEFtYXRldXIgUmFkaW8gWC4yNSBQTFAJKi8KKyNkZWZpbmUgQUZfREVDbmV0CTEyCS8qIFJlc2VydmVkIGZvciBERUNuZXQgcHJvamVjdAkqLworI2RlZmluZSBBRl9ORVRCRVVJCTEzCS8qIFJlc2VydmVkIGZvciA4MDIuMkxMQyBwcm9qZWN0Ki8KKyNkZWZpbmUgQUZfU0VDVVJJVFkJMTQJLyogU2VjdXJpdHkgY2FsbGJhY2sgcHNldWRvIEFGICovCisjZGVmaW5lIEFGX0tFWQkJMTUgICAgICAvKiBQRl9LRVkga2V5IG1hbmFnZW1lbnQgQVBJICovCisjZGVmaW5lIEFGX05FVExJTksJMTYKKyNkZWZpbmUgQUZfUk9VVEUJQUZfTkVUTElOSyAvKiBBbGlhcyB0byBlbXVsYXRlIDQuNEJTRCAqLworI2RlZmluZSBBRl9QQUNLRVQJMTcJLyogUGFja2V0IGZhbWlseQkJKi8KKyNkZWZpbmUgQUZfQVNICQkxOAkvKiBBc2gJCQkJKi8KKyNkZWZpbmUgQUZfRUNPTkVUCTE5CS8qIEFjb3JuIEVjb25ldAkJCSovCisjZGVmaW5lIEFGX0FUTVNWQwkyMAkvKiBBVE0gU1ZDcwkJCSovCisjZGVmaW5lIEFGX1NOQQkJMjIJLyogTGludXggU05BIFByb2plY3QgKG51dHRlcnMhKSAqLworI2RlZmluZSBBRl9JUkRBCQkyMwkvKiBJUkRBIHNvY2tldHMJCQkqLworI2RlZmluZSBBRl9QUFBPWAkyNAkvKiBQUFBvWCBzb2NrZXRzCQkqLworI2RlZmluZSBBRl9XQU5QSVBFCTI1CS8qIFdhbnBpcGUgQVBJIFNvY2tldHMgKi8KKyNkZWZpbmUgQUZfTExDCQkyNgkvKiBMaW51eCBMTEMJCQkqLworI2RlZmluZSBBRl9CTFVFVE9PVEgJMzEJLyogQmx1ZXRvb3RoIHNvY2tldHMgCQkqLworI2RlZmluZSBBRl9NQVgJCTMyCS8qIEZvciBub3cuLiAqLworCisvKiBQcm90b2NvbCBmYW1pbGllcywgc2FtZSBhcyBhZGRyZXNzIGZhbWlsaWVzLiAqLworI2RlZmluZSBQRl9VTlNQRUMJQUZfVU5TUEVDCisjZGVmaW5lIFBGX1VOSVgJCUFGX1VOSVgKKyNkZWZpbmUgUEZfTE9DQUwJQUZfTE9DQUwKKyNkZWZpbmUgUEZfSU5FVAkJQUZfSU5FVAorI2RlZmluZSBQRl9BWDI1CQlBRl9BWDI1CisjZGVmaW5lIFBGX0lQWAkJQUZfSVBYCisjZGVmaW5lIFBGX0FQUExFVEFMSwlBRl9BUFBMRVRBTEsKKyNkZWZpbmUJUEZfTkVUUk9NCUFGX05FVFJPTQorI2RlZmluZSBQRl9CUklER0UJQUZfQlJJREdFCisjZGVmaW5lIFBGX0FUTVBWQwlBRl9BVE1QVkMKKyNkZWZpbmUgUEZfWDI1CQlBRl9YMjUKKyNkZWZpbmUgUEZfSU5FVDYJQUZfSU5FVDYKKyNkZWZpbmUgUEZfUk9TRQkJQUZfUk9TRQorI2RlZmluZSBQRl9ERUNuZXQJQUZfREVDbmV0CisjZGVmaW5lIFBGX05FVEJFVUkJQUZfTkVUQkVVSQorI2RlZmluZSBQRl9TRUNVUklUWQlBRl9TRUNVUklUWQorI2RlZmluZSBQRl9LRVkJCUFGX0tFWQorI2RlZmluZSBQRl9ORVRMSU5LCUFGX05FVExJTksKKyNkZWZpbmUgUEZfUk9VVEUJQUZfUk9VVEUKKyNkZWZpbmUgUEZfUEFDS0VUCUFGX1BBQ0tFVAorI2RlZmluZSBQRl9BU0gJCUFGX0FTSAorI2RlZmluZSBQRl9FQ09ORVQJQUZfRUNPTkVUCisjZGVmaW5lIFBGX0FUTVNWQwlBRl9BVE1TVkMKKyNkZWZpbmUgUEZfU05BCQlBRl9TTkEKKyNkZWZpbmUgUEZfSVJEQQkJQUZfSVJEQQorI2RlZmluZSBQRl9QUFBPWAlBRl9QUFBPWAorI2RlZmluZSBQRl9XQU5QSVBFCUFGX1dBTlBJUEUKKyNkZWZpbmUgUEZfTExDCQlBRl9MTEMKKyNkZWZpbmUgUEZfQkxVRVRPT1RICUFGX0JMVUVUT09USAorI2RlZmluZSBQRl9NQVgJCUFGX01BWAorCisvKiBNYXhpbXVtIHF1ZXVlIGxlbmd0aCBzcGVjaWZpYWJsZSBieSBsaXN0ZW4uICAqLworI2RlZmluZSBTT01BWENPTk4JMTI4CisKKy8qIEZsYWdzIHdlIGNhbiB1c2Ugd2l0aCBzZW5kLyBhbmQgcmVjdi4gCisgICBBZGRlZCB0aG9zZSBmb3IgMTAwMy4xZyBub3QgYWxsIGFyZSBzdXBwb3J0ZWQgeWV0CisgKi8KKyAKKyNkZWZpbmUgTVNHX09PQgkJMQorI2RlZmluZSBNU0dfUEVFSwkyCisjZGVmaW5lIE1TR19ET05UUk9VVEUJNAorI2RlZmluZSBNU0dfVFJZSEFSRCAgICAgNCAgICAgICAvKiBTeW5vbnltIGZvciBNU0dfRE9OVFJPVVRFIGZvciBERUNuZXQgKi8KKyNkZWZpbmUgTVNHX0NUUlVOQwk4CisjZGVmaW5lIE1TR19QUk9CRQkweDEwCS8qIERvIG5vdCBzZW5kLiBPbmx5IHByb2JlIHBhdGggZi5lLiBmb3IgTVRVICovCisjZGVmaW5lIE1TR19UUlVOQwkweDIwCisjZGVmaW5lIE1TR19ET05UV0FJVAkweDQwCS8qIE5vbmJsb2NraW5nIGlvCQkgKi8KKyNkZWZpbmUgTVNHX0VPUiAgICAgICAgIDB4ODAJLyogRW5kIG9mIHJlY29yZCAqLworI2RlZmluZSBNU0dfV0FJVEFMTAkweDEwMAkvKiBXYWl0IGZvciBhIGZ1bGwgcmVxdWVzdCAqLworI2RlZmluZSBNU0dfRklOICAgICAgICAgMHgyMDAKKyNkZWZpbmUgTVNHX1NZTgkJMHg0MDAKKyNkZWZpbmUgTVNHX0NPTkZJUk0JMHg4MDAJLyogQ29uZmlybSBwYXRoIHZhbGlkaXR5ICovCisjZGVmaW5lIE1TR19SU1QJCTB4MTAwMAorI2RlZmluZSBNU0dfRVJSUVVFVUUJMHgyMDAwCS8qIEZldGNoIG1lc3NhZ2UgZnJvbSBlcnJvciBxdWV1ZSAqLworI2RlZmluZSBNU0dfTk9TSUdOQUwJMHg0MDAwCS8qIERvIG5vdCBnZW5lcmF0ZSBTSUdQSVBFICovCisjZGVmaW5lIE1TR19NT1JFCTB4ODAwMAkvKiBTZW5kZXIgd2lsbCBzZW5kIG1vcmUgKi8KKworI2RlZmluZSBNU0dfRU9GICAgICAgICAgTVNHX0ZJTgorCisjaWYgZGVmaW5lZChDT05GSUdfQ09NUEFUKQorI2RlZmluZSBNU0dfQ01TR19DT01QQVQJMHg4MDAwMDAwMAkvKiBUaGlzIG1lc3NhZ2UgbmVlZHMgMzIgYml0IGZpeHVwcyAqLworI2Vsc2UKKyNkZWZpbmUgTVNHX0NNU0dfQ09NUEFUCTAJCS8qIFdlIG5ldmVyIGhhdmUgMzIgYml0IGZpeHVwcyAqLworI2VuZGlmCisKKworLyogU2V0c29ja29wdGlvbnMoMikgbGV2ZWwuIFRoYW5rcyB0byBCU0QgdGhlc2UgbXVzdCBtYXRjaCBJUFBST1RPX3h4eCAqLworI2RlZmluZSBTT0xfSVAJCTAKKy8qICNkZWZpbmUgU09MX0lDTVAJMQlOby1uby1ubyEgRHVlIHRvIExpbnV4IDotKSB3ZSBjYW5ub3QgdXNlIFNPTF9JQ01QPTEgKi8KKyNkZWZpbmUgU09MX1RDUAkJNgorI2RlZmluZSBTT0xfVURQCQkxNworI2RlZmluZSBTT0xfSVBWNgk0MQorI2RlZmluZSBTT0xfSUNNUFY2CTU4CisjZGVmaW5lIFNPTF9TQ1RQCTEzMgorI2RlZmluZSBTT0xfUkFXCQkyNTUKKyNkZWZpbmUgU09MX0lQWAkJMjU2CisjZGVmaW5lIFNPTF9BWDI1CTI1NworI2RlZmluZSBTT0xfQVRBTEsJMjU4CisjZGVmaW5lIFNPTF9ORVRST00JMjU5CisjZGVmaW5lIFNPTF9ST1NFCTI2MAorI2RlZmluZSBTT0xfREVDTkVUCTI2MQorI2RlZmluZQlTT0xfWDI1CQkyNjIKKyNkZWZpbmUgU09MX1BBQ0tFVAkyNjMKKyNkZWZpbmUgU09MX0FUTQkJMjY0CS8qIEFUTSBsYXllciAoY2VsbCBsZXZlbCkgKi8KKyNkZWZpbmUgU09MX0FBTAkJMjY1CS8qIEFUTSBBZGFwdGlvbiBMYXllciAocGFja2V0IGxldmVsKSAqLworI2RlZmluZSBTT0xfSVJEQSAgICAgICAgMjY2CisjZGVmaW5lIFNPTF9ORVRCRVVJCTI2NworI2RlZmluZSBTT0xfTExDCQkyNjgKKworLyogSVBYIG9wdGlvbnMgKi8KKyNkZWZpbmUgSVBYX1RZUEUJMQorCisjaWZkZWYgX19LRVJORUxfXworZXh0ZXJuIGludCBtZW1jcHlfZnJvbWlvdmVjKHVuc2lnbmVkIGNoYXIgKmtkYXRhLCBzdHJ1Y3QgaW92ZWMgKmlvdiwgaW50IGxlbik7CitleHRlcm4gaW50IG1lbWNweV9mcm9taW92ZWNlbmQodW5zaWduZWQgY2hhciAqa2RhdGEsIHN0cnVjdCBpb3ZlYyAqaW92LCAKKwkJCQlpbnQgb2Zmc2V0LCBpbnQgbGVuKTsKK2V4dGVybiBpbnQgY3N1bV9wYXJ0aWFsX2NvcHlfZnJvbWlvdmVjZW5kKHVuc2lnbmVkIGNoYXIgKmtkYXRhLCAKKwkJCQkJICBzdHJ1Y3QgaW92ZWMgKmlvdiwgCisJCQkJCSAgaW50IG9mZnNldCwgCisJCQkJCSAgdW5zaWduZWQgaW50IGxlbiwgaW50ICpjc3VtcCk7CisKK2V4dGVybiBpbnQgdmVyaWZ5X2lvdmVjKHN0cnVjdCBtc2doZHIgKm0sIHN0cnVjdCBpb3ZlYyAqaW92LCBjaGFyICphZGRyZXNzLCBpbnQgbW9kZSk7CitleHRlcm4gaW50IG1lbWNweV90b2lvdmVjKHN0cnVjdCBpb3ZlYyAqdiwgdW5zaWduZWQgY2hhciAqa2RhdGEsIGludCBsZW4pOworZXh0ZXJuIGludCBtb3ZlX2FkZHJfdG9fdXNlcih2b2lkICprYWRkciwgaW50IGtsZW4sIHZvaWQgX191c2VyICp1YWRkciwgaW50IF9fdXNlciAqdWxlbik7CitleHRlcm4gaW50IG1vdmVfYWRkcl90b19rZXJuZWwodm9pZCBfX3VzZXIgKnVhZGRyLCBpbnQgdWxlbiwgdm9pZCAqa2FkZHIpOworZXh0ZXJuIGludCBwdXRfY21zZyhzdHJ1Y3QgbXNnaGRyKiwgaW50IGxldmVsLCBpbnQgdHlwZSwgaW50IGxlbiwgdm9pZCAqZGF0YSk7CisKKyNlbmRpZgorI2VuZGlmIC8qIG5vdCBrZXJuZWwgYW5kIG5vdCBnbGliYyAqLworI2VuZGlmIC8qIF9MSU5VWF9TT0NLRVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zb2NraW9zLmggYi9pbmNsdWRlL2xpbnV4L3NvY2tpb3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWIzMzIwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9zb2NraW9zLmgKQEAgLTAsMCArMSwxNDMgQEAKKy8qCisgKiBJTkVUCQlBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgVENQL0lQIHByb3RvY29sIHN1aXRlIGZvciB0aGUgTElOVVgKKyAqCQlvcGVyYXRpbmcgc3lzdGVtLiAgSU5FVCBpcyBpbXBsZW1lbnRlZCB1c2luZyB0aGUgIEJTRCBTb2NrZXQKKyAqCQlpbnRlcmZhY2UgYXMgdGhlIG1lYW5zIG9mIGNvbW11bmljYXRpb24gd2l0aCB0aGUgdXNlciBsZXZlbC4KKyAqCisgKgkJRGVmaW5pdGlvbnMgb2YgdGhlIHNvY2tldC1sZXZlbCBJL08gY29udHJvbCBjYWxscy4KKyAqCisgKiBWZXJzaW9uOglAKCMpc29ja2lvcy5oCTEuMC4yCTAzLzA5LzkzCisgKgorICogQXV0aG9yczoJUm9zcyBCaXJvLCA8YmlyN0BsZWxhbmQuU3RhbmZvcmQuRWR1PgorICoJCUZyZWQgTi4gdmFuIEtlbXBlbiwgPHdhbHRqZUB1V2FsdC5OTC5NdWduZXQuT1JHPgorICoKKyAqCQlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgkJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqCQlhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqCQkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisjaWZuZGVmIF9MSU5VWF9TT0NLSU9TX0gKKyNkZWZpbmUgX0xJTlVYX1NPQ0tJT1NfSAorCisjaW5jbHVkZSA8YXNtL3NvY2tpb3MuaD4KKworLyogTGludXgtc3BlY2lmaWMgc29ja2V0IGlvY3RscyAqLworI2RlZmluZSBTSU9DSU5RCQlGSU9OUkVBRAorI2RlZmluZSBTSU9DT1VUUQlUSU9DT1VUUQorCisvKiBSb3V0aW5nIHRhYmxlIGNhbGxzLiAqLworI2RlZmluZSBTSU9DQUREUlQJMHg4OTBCCQkvKiBhZGQgcm91dGluZyB0YWJsZSBlbnRyeQkqLworI2RlZmluZSBTSU9DREVMUlQJMHg4OTBDCQkvKiBkZWxldGUgcm91dGluZyB0YWJsZSBlbnRyeQkqLworI2RlZmluZSBTSU9DUlRNU0cJMHg4OTBECQkvKiBjYWxsIHRvIHJvdXRpbmcgc3lzdGVtCSovCisKKy8qIFNvY2tldCBjb25maWd1cmF0aW9uIGNvbnRyb2xzLiAqLworI2RlZmluZSBTSU9DR0lGTkFNRQkweDg5MTAJCS8qIGdldCBpZmFjZSBuYW1lCQkqLworI2RlZmluZSBTSU9DU0lGTElOSwkweDg5MTEJCS8qIHNldCBpZmFjZSBjaGFubmVsCQkqLworI2RlZmluZSBTSU9DR0lGQ09ORgkweDg5MTIJCS8qIGdldCBpZmFjZSBsaXN0CQkqLworI2RlZmluZSBTSU9DR0lGRkxBR1MJMHg4OTEzCQkvKiBnZXQgZmxhZ3MJCQkqLworI2RlZmluZSBTSU9DU0lGRkxBR1MJMHg4OTE0CQkvKiBzZXQgZmxhZ3MJCQkqLworI2RlZmluZSBTSU9DR0lGQUREUgkweDg5MTUJCS8qIGdldCBQQSBhZGRyZXNzCQkqLworI2RlZmluZSBTSU9DU0lGQUREUgkweDg5MTYJCS8qIHNldCBQQSBhZGRyZXNzCQkqLworI2RlZmluZSBTSU9DR0lGRFNUQUREUgkweDg5MTcJCS8qIGdldCByZW1vdGUgUEEgYWRkcmVzcwkqLworI2RlZmluZSBTSU9DU0lGRFNUQUREUgkweDg5MTgJCS8qIHNldCByZW1vdGUgUEEgYWRkcmVzcwkqLworI2RlZmluZSBTSU9DR0lGQlJEQUREUgkweDg5MTkJCS8qIGdldCBicm9hZGNhc3QgUEEgYWRkcmVzcwkqLworI2RlZmluZSBTSU9DU0lGQlJEQUREUgkweDg5MWEJCS8qIHNldCBicm9hZGNhc3QgUEEgYWRkcmVzcwkqLworI2RlZmluZSBTSU9DR0lGTkVUTUFTSwkweDg5MWIJCS8qIGdldCBuZXR3b3JrIFBBIG1hc2sJCSovCisjZGVmaW5lIFNJT0NTSUZORVRNQVNLCTB4ODkxYwkJLyogc2V0IG5ldHdvcmsgUEEgbWFzawkJKi8KKyNkZWZpbmUgU0lPQ0dJRk1FVFJJQwkweDg5MWQJCS8qIGdldCBtZXRyaWMJCQkqLworI2RlZmluZSBTSU9DU0lGTUVUUklDCTB4ODkxZQkJLyogc2V0IG1ldHJpYwkJCSovCisjZGVmaW5lIFNJT0NHSUZNRU0JMHg4OTFmCQkvKiBnZXQgbWVtb3J5IGFkZHJlc3MgKEJTRCkJKi8KKyNkZWZpbmUgU0lPQ1NJRk1FTQkweDg5MjAJCS8qIHNldCBtZW1vcnkgYWRkcmVzcyAoQlNEKQkqLworI2RlZmluZSBTSU9DR0lGTVRVCTB4ODkyMQkJLyogZ2V0IE1UVSBzaXplCQkJKi8KKyNkZWZpbmUgU0lPQ1NJRk1UVQkweDg5MjIJCS8qIHNldCBNVFUgc2l6ZQkJCSovCisjZGVmaW5lIFNJT0NTSUZOQU1FCTB4ODkyMwkJLyogc2V0IGludGVyZmFjZSBuYW1lICovCisjZGVmaW5lCVNJT0NTSUZIV0FERFIJMHg4OTI0CQkvKiBzZXQgaGFyZHdhcmUgYWRkcmVzcyAJKi8KKyNkZWZpbmUgU0lPQ0dJRkVOQ0FQCTB4ODkyNQkJLyogZ2V0L3NldCBlbmNhcHN1bGF0aW9ucyAgICAgICAqLworI2RlZmluZSBTSU9DU0lGRU5DQVAJMHg4OTI2CQkKKyNkZWZpbmUgU0lPQ0dJRkhXQUREUgkweDg5MjcJCS8qIEdldCBoYXJkd2FyZSBhZGRyZXNzCQkqLworI2RlZmluZSBTSU9DR0lGU0xBVkUJMHg4OTI5CQkvKiBEcml2ZXIgc2xhdmluZyBzdXBwb3J0CSovCisjZGVmaW5lIFNJT0NTSUZTTEFWRQkweDg5MzAKKyNkZWZpbmUgU0lPQ0FERE1VTFRJCTB4ODkzMQkJLyogTXVsdGljYXN0IGFkZHJlc3MgbGlzdHMJKi8KKyNkZWZpbmUgU0lPQ0RFTE1VTFRJCTB4ODkzMgorI2RlZmluZSBTSU9DR0lGSU5ERVgJMHg4OTMzCQkvKiBuYW1lIC0+IGlmX2luZGV4IG1hcHBpbmcJKi8KKyNkZWZpbmUgU0lPR0lGSU5ERVgJU0lPQ0dJRklOREVYCS8qIG1pc3ByaW50IGNvbXBhdGliaWxpdHkgOi0pCSovCisjZGVmaW5lIFNJT0NTSUZQRkxBR1MJMHg4OTM0CQkvKiBzZXQvZ2V0IGV4dGVuZGVkIGZsYWdzIHNldAkqLworI2RlZmluZSBTSU9DR0lGUEZMQUdTCTB4ODkzNQorI2RlZmluZSBTSU9DRElGQUREUgkweDg5MzYJCS8qIGRlbGV0ZSBQQSBhZGRyZXNzCQkqLworI2RlZmluZQlTSU9DU0lGSFdCUk9BRENBU1QJMHg4OTM3CS8qIHNldCBoYXJkd2FyZSBicm9hZGNhc3QgYWRkcgkqLworI2RlZmluZSBTSU9DR0lGQ09VTlQJMHg4OTM4CQkvKiBnZXQgbnVtYmVyIG9mIGRldmljZXMgKi8KKworI2RlZmluZSBTSU9DR0lGQlIJMHg4OTQwCQkvKiBCcmlkZ2luZyBzdXBwb3J0CQkqLworI2RlZmluZSBTSU9DU0lGQlIJMHg4OTQxCQkvKiBTZXQgYnJpZGdpbmcgb3B0aW9ucyAJKi8KKworI2RlZmluZSBTSU9DR0lGVFhRTEVOCTB4ODk0MgkJLyogR2V0IHRoZSB0eCBxdWV1ZSBsZW5ndGgJKi8KKyNkZWZpbmUgU0lPQ1NJRlRYUUxFTgkweDg5NDMJCS8qIFNldCB0aGUgdHggcXVldWUgbGVuZ3RoIAkqLworCisjZGVmaW5lIFNJT0NHSUZESVZFUlQJMHg4OTQ0CQkvKiBGcmFtZSBkaXZlcnNpb24gc3VwcG9ydCAqLworI2RlZmluZSBTSU9DU0lGRElWRVJUCTB4ODk0NQkJLyogU2V0IGZyYW1lIGRpdmVyc2lvbiBvcHRpb25zICovCisKKyNkZWZpbmUgU0lPQ0VUSFRPT0wJMHg4OTQ2CQkvKiBFdGh0b29sIGludGVyZmFjZQkJKi8KKworI2RlZmluZSBTSU9DR01JSVBIWQkweDg5NDcJCS8qIEdldCBhZGRyZXNzIG9mIE1JSSBQSFkgaW4gdXNlLiAqLworI2RlZmluZSBTSU9DR01JSVJFRwkweDg5NDgJCS8qIFJlYWQgTUlJIFBIWSByZWdpc3Rlci4JKi8KKyNkZWZpbmUgU0lPQ1NNSUlSRUcJMHg4OTQ5CQkvKiBXcml0ZSBNSUkgUEhZIHJlZ2lzdGVyLgkqLworCisjZGVmaW5lIFNJT0NXQU5ERVYJMHg4OTRBCQkvKiBnZXQvc2V0IG5ldGRldiBwYXJhbWV0ZXJzCSovCisKKy8qIEFSUCBjYWNoZSBjb250cm9sIGNhbGxzLiAqLworCQkgICAgLyogIDB4ODk1MCAtIDB4ODk1MiAgKiBvYnNvbGV0ZSBjYWxscywgZG9uJ3QgcmUtdXNlICovCisjZGVmaW5lIFNJT0NEQVJQCTB4ODk1MwkJLyogZGVsZXRlIEFSUCB0YWJsZSBlbnRyeQkqLworI2RlZmluZSBTSU9DR0FSUAkweDg5NTQJCS8qIGdldCBBUlAgdGFibGUgZW50cnkJCSovCisjZGVmaW5lIFNJT0NTQVJQCTB4ODk1NQkJLyogc2V0IEFSUCB0YWJsZSBlbnRyeQkJKi8KKworLyogUkFSUCBjYWNoZSBjb250cm9sIGNhbGxzLiAqLworI2RlZmluZSBTSU9DRFJBUlAJMHg4OTYwCQkvKiBkZWxldGUgUkFSUCB0YWJsZSBlbnRyeQkqLworI2RlZmluZSBTSU9DR1JBUlAJMHg4OTYxCQkvKiBnZXQgUkFSUCB0YWJsZSBlbnRyeQkJKi8KKyNkZWZpbmUgU0lPQ1NSQVJQCTB4ODk2MgkJLyogc2V0IFJBUlAgdGFibGUgZW50cnkJCSovCisKKy8qIERyaXZlciBjb25maWd1cmF0aW9uIGNhbGxzICovCisKKyNkZWZpbmUgU0lPQ0dJRk1BUAkweDg5NzAJCS8qIEdldCBkZXZpY2UgcGFyYW1ldGVycwkqLworI2RlZmluZSBTSU9DU0lGTUFQCTB4ODk3MQkJLyogU2V0IGRldmljZSBwYXJhbWV0ZXJzCSovCisKKy8qIERMQ0kgY29uZmlndXJhdGlvbiBjYWxscyAqLworCisjZGVmaW5lIFNJT0NBRERETENJCTB4ODk4MAkJLyogQ3JlYXRlIG5ldyBETENJIGRldmljZQkqLworI2RlZmluZSBTSU9DREVMRExDSQkweDg5ODEJCS8qIERlbGV0ZSBETENJIGRldmljZQkJKi8KKworI2RlZmluZSBTSU9DR0lGVkxBTgkweDg5ODIJCS8qIDgwMi4xUSBWTEFOIHN1cHBvcnQJCSovCisjZGVmaW5lIFNJT0NTSUZWTEFOCTB4ODk4MwkJLyogU2V0IDgwMi4xUSBWTEFOIG9wdGlvbnMgCSovCisKKy8qIGJvbmRpbmcgY2FsbHMgKi8KKworI2RlZmluZSBTSU9DQk9OREVOU0xBVkUJMHg4OTkwCQkvKiBlbnNsYXZlIGEgZGV2aWNlIHRvIHRoZSBib25kICovCisjZGVmaW5lIFNJT0NCT05EUkVMRUFTRSAweDg5OTEJCS8qIHJlbGVhc2UgYSBzbGF2ZSBmcm9tIHRoZSBib25kKi8KKyNkZWZpbmUgU0lPQ0JPTkRTRVRIV0FERFIgICAgICAweDg5OTIJLyogc2V0IHRoZSBodyBhZGRyIG9mIHRoZSBib25kICAqLworI2RlZmluZSBTSU9DQk9ORFNMQVZFSU5GT1FVRVJZIDB4ODk5MyAgIC8qIHJ0biBpbmZvIGFib3V0IHNsYXZlIHN0YXRlICAgKi8KKyNkZWZpbmUgU0lPQ0JPTkRJTkZPUVVFUlkgICAgICAweDg5OTQJLyogcnRuIGluZm8gYWJvdXQgYm9uZCBzdGF0ZSAgICAqLworI2RlZmluZSBTSU9DQk9ORENIQU5HRUFDVElWRSAgIDB4ODk5NSAgIC8qIHVwZGF0ZSB0byBhIG5ldyBhY3RpdmUgc2xhdmUgKi8KKwkJCQorLyogYnJpZGdlIGNhbGxzICovCisjZGVmaW5lIFNJT0NCUkFEREJSICAgICAweDg5YTAJCS8qIGNyZWF0ZSBuZXcgYnJpZGdlIGRldmljZSAgICAgKi8KKyNkZWZpbmUgU0lPQ0JSREVMQlIgICAgIDB4ODlhMQkJLyogcmVtb3ZlIGJyaWRnZSBkZXZpY2UgICAgICAgICAqLworI2RlZmluZSBTSU9DQlJBRERJRgkweDg5YTIJCS8qIGFkZCBpbnRlcmZhY2UgdG8gYnJpZGdlICAgICAgKi8KKyNkZWZpbmUgU0lPQ0JSREVMSUYJMHg4OWEzCQkvKiByZW1vdmUgaW50ZXJmYWNlIGZyb20gYnJpZGdlICovCisKKy8qIERldmljZSBwcml2YXRlIGlvY3RsIGNhbGxzICovCisKKy8qCisgKglUaGVzZSAxNiBpb2N0bHMgYXJlIGF2YWlsYWJsZSB0byBkZXZpY2VzIHZpYSB0aGUgZG9faW9jdGwoKSBkZXZpY2UKKyAqCXZlY3Rvci4gRWFjaCBkZXZpY2Ugc2hvdWxkIGluY2x1ZGUgdGhpcyBmaWxlIGFuZCByZWRlZmluZSB0aGVzZSBuYW1lcworICoJYXMgdGhlaXIgb3duLiBCZWNhdXNlIHRoZXNlIGFyZSBkZXZpY2UgZGVwZW5kZW50IGl0IGlzIGEgZ29vZCBpZGVhCisgKglfTk9UXyB0byBpc3N1ZSB0aGVtIHRvIHJhbmRvbSBvYmplY3RzIGFuZCBob3BlLgorICoKKyAqCVRIRVNFIElPQ1RMUyBBUkUgX0RFUFJFQ0FURURfIEFORCBXSUxMIERJU0FQUEVBUiBJTiAyLjUuWCAtRGF2ZU0KKyAqLworIAorI2RlZmluZSBTSU9DREVWUFJJVkFURQkweDg5RjAJLyogdG8gODlGRiAqLworCisvKgorICoJVGhlc2UgMTYgaW9jdGwgY2FsbHMgYXJlIHByb3RvY29sIHByaXZhdGUKKyAqLworIAorI2RlZmluZSBTSU9DUFJPVE9QUklWQVRFIDB4ODlFMCAvKiB0byA4OUVGICovCisjZW5kaWYJLyogX0xJTlVYX1NPQ0tJT1NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zb20uaCBiL2luY2x1ZGUvbGludXgvc29tLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY2NTk0ZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvc29tLmgKQEAgLTAsMCArMSwxNTQgQEAKKyNpZm5kZWYgX0xJTlVYX1NPTV9ICisjZGVmaW5lIF9MSU5VWF9TT01fSAorCisvKiBGaWxlIGZvcm1hdCBkZWZpbml0aW9uIGZvciBTT00gZXhlY3V0YWJsZXMgLyBzaGFyZWQgbGlicmFyaWVzICovCisKKy8qIHdlIG5lZWQgc3RydWN0IHRpbWVzcGVjICovCisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorCisjZGVmaW5lIFNPTV9QQUdFU0laRSA0MDk2CisKKy8qIHRoaXMgaXMgdGhlIFNPTSBoZWFkZXIgKi8KK3N0cnVjdCBzb21faGRyIHsKKwlzaG9ydAkJc3lzdGVtX2lkOwkJLyogbWFnaWMgbnVtYmVyIC0gc3lzdGVtICovCisJc2hvcnQJCWFfbWFnaWM7CQkvKiBtYWdpYyBudW1iZXIgLSBmaWxlIHR5cGUgKi8KKwl1bnNpZ25lZCBpbnQJdmVyc2lvbl9pZDsJCS8qIHZlcnNpb2QgSUQ6IFlZTU1EREhIICovCisJc3RydWN0IHRpbWVzcGVjCWZpbGVfdGltZTsJCS8qIHN5c3RlbSBjbG9jayAqLworCXVuc2lnbmVkIGludAllbnRyeV9zcGFjZTsJCS8qIHNwYWNlIGZvciBlbnRyeSBwb2ludCAqLworCXVuc2lnbmVkIGludAllbnRyeV9zdWJzcGFjZTsJCS8qIHN1YnNwYWNlIGZvciBlbnRyeSBwb2ludCAqLworCXVuc2lnbmVkIGludAllbnRyeV9vZmZzZXQ7CQkvKiBvZmZzZXQgb2YgZW50cnkgcG9pbnQgKi8KKwl1bnNpZ25lZCBpbnQJYXV4X2hlYWRlcl9sb2NhdGlvbjsJLyogYXV4aWxpYXJ5IGhlYWRlciBsb2NhdGlvbiAqLworCXVuc2lnbmVkIGludAlhdXhfaGVhZGVyX3NpemU7CS8qIGF1eGlsaWFyeSBoZWFkZXIgc2l6ZSAqLworCXVuc2lnbmVkIGludAlzb21fbGVuZ3RoOwkJLyogbGVuZ3RoIG9mIGVudGlyZSBTT00gKi8KKwl1bnNpZ25lZCBpbnQJcHJlc3VtZWRfZHA7CQkvKiBjb21waWxlcidzIERQIHZhbHVlICovCisJdW5zaWduZWQgaW50CXNwYWNlX2xvY2F0aW9uOwkJLyogc3BhY2UgZGljdGlvbmFyeSBsb2NhdGlvbiAqLworCXVuc2lnbmVkIGludAlzcGFjZV90b3RhbDsJCS8qIG51bWJlciBvZiBzcGFjZSBlbnRyaWVzICovCisJdW5zaWduZWQgaW50CXN1YnNwYWNlX2xvY2F0aW9uOwkvKiBzdWJzcGFjZSBlbnRyaWVzIGxvY2F0aW9uICovCisJdW5zaWduZWQgaW50CXN1YnNwYWNlX3RvdGFsOwkJLyogbnVtYmVyIG9mIHN1YnNwYWNlIGVudHJpZXMgKi8KKwl1bnNpZ25lZCBpbnQJbG9hZGVyX2ZpeHVwX2xvY2F0aW9uOwkvKiBNUEUvaVggbG9hZGVyIGZpeHVwICovCisJdW5zaWduZWQgaW50CWxvYWRlcl9maXh1cF90b3RhbDsJLyogbnVtYmVyIG9mIGZpeHVwIHJlY29yZHMgKi8KKwl1bnNpZ25lZCBpbnQJc3BhY2Vfc3RyaW5nc19sb2NhdGlvbjsJLyogKHN1YilzcGFjZSBuYW1lcyAqLworCXVuc2lnbmVkIGludAlzcGFjZV9zdHJpbmdzX3NpemU7CS8qIHNpemUgb2Ygc3RyaW5ncyBhcmVhICovCisJdW5zaWduZWQgaW50CWluaXRfYXJyYXlfbG9jYXRpb247CS8qIHJlc2VydmVkICovCisJdW5zaWduZWQgaW50CWluaXRfYXJyYXlfdG90YWw7CS8qIHJlc2VydmVkICovCisJdW5zaWduZWQgaW50CWNvbXBpbGVyX2xvY2F0aW9uOwkvKiBtb2R1bGUgZGljdGlvbmFyeSAqLworCXVuc2lnbmVkIGludAljb21waWxlcl90b3RhbDsJCS8qIG51bWJlciBvZiBtb2R1bGVzICovCisJdW5zaWduZWQgaW50CXN5bWJvbF9sb2NhdGlvbjsJLyogc3ltYm9sIGRpY3Rpb25hcnkgKi8KKwl1bnNpZ25lZCBpbnQJc3ltYm9sX3RvdGFsOwkJLyogbnVtYmVyIG9mIHN5bWJvbHMgKi8KKwl1bnNpZ25lZCBpbnQJZml4dXBfcmVxdWVzdF9sb2NhdGlvbjsJLyogZml4dXAgcmVxdWVzdHMgKi8KKwl1bnNpZ25lZCBpbnQJZml4dXBfcmVxdWVzdF90b3RhbDsJLyogbnVtYmVyIG9mIGZpeHVwIHJlcXVlc3RzICovCisJdW5zaWduZWQgaW50CXN5bWJvbF9zdHJpbmdzX2xvY2F0aW9uOy8qIG1vZHVsZSAmIHN5bWJvbCBuYW1lcyBhcmVhICovCisJdW5zaWduZWQgaW50CXN5bWJvbF9zdHJpbmdzX3NpemU7CS8qIHNpemUgb2Ygc3RyaW5ncyBhcmVhICovCisJdW5zaWduZWQgaW50CXVubG9hZGFibGVfc3BfbG9jYXRpb247CS8qIHVubG9hZGFibGUgc3BhY2VzIGxvY2F0aW9uICovCisJdW5zaWduZWQgaW50CXVubG9hZGFibGVfc3Bfc2l6ZTsJLyogc2l6ZSBvZiBkYXRhICovCisJdW5zaWduZWQgaW50CWNoZWNrc3VtOworfTsKKworLyogdmFsdWVzIGZvciBzeXN0ZW1faWQgKi8KKworI2RlZmluZSBTT01fU0lEX1BBUklTQ18xXzAJMHgwMjBiCisjZGVmaW5lIFNPTV9TSURfUEFSSVNDXzFfMQkweDAyMTAKKyNkZWZpbmUgU09NX1NJRF9QQVJJU0NfMl8wCTB4MDIxNAorCisvKiB2YWx1ZXMgZm9yIGFfbWFnaWMgKi8KKworI2RlZmluZSBTT01fTElCX0VYRUMJCTB4MDEwNAorI2RlZmluZSBTT01fUkVMT0NBVEFCTEUJCTB4MDEwNgorI2RlZmluZSBTT01fRVhFQ19OT05TSEFSRQkweDAxMDcKKyNkZWZpbmUgU09NX0VYRUNfU0hBUkUJCTB4MDEwOAorI2RlZmluZSBTT01fRVhFQ19ERU1BTkQJCTB4MDEwQgorI2RlZmluZSBTT01fTElCX0RZTgkJMHgwMTBECisjZGVmaW5lIFNPTV9MSUJfU0hBUkUJCTB4MDEwRQorI2RlZmluZSBTT01fTElCX1JFTE9DCQkweDA2MTkKKworLyogdmFsdWVzIGZvciB2ZXJzaW9uX2lkLiAgRGVjaW1hbCBub3QgaGV4LCB5ZXMuICBHcnIuICovCisKKyNkZWZpbmUgU09NX0lEX09MRAkJODUwODIxMTIKKyNkZWZpbmUgU09NX0lEX05FVwkJODcxMDI0MTIKKworc3RydWN0IGF1eF9pZCB7CisJdW5zaWduZWQgaW50CW1hbmRhdG9yeSA6MTsJLyogdGhlIGxpbmtlciBtdXN0IHVuZGVyc3RhbmQgdGhpcyAqLworCXVuc2lnbmVkIGludAljb3B5CSAgOjE7CS8qIE11c3QgYmUgY29waWVkIGJ5IHRoZSBsaW5rZXIgKi8KKwl1bnNpZ25lZCBpbnQJYXBwZW5kCSAgOjE7CS8qIE11c3QgYmUgbWVyZ2VkIGJ5IHRoZSBsaW5rZXIgKi8KKwl1bnNpZ25lZCBpbnQJaWdub3JlCSAgOjE7CS8qIERpc2NhcmQgc2VjdGlvbiBpZiB1bmtub3duICovCisJdW5zaWduZWQgaW50CXJlc2VydmVkICA6MTI7CisJdW5zaWduZWQgaW50CXR5cGUJICA6MTY7CS8qIEhlYWRlciB0eXBlICovCisJdW5zaWduZWQgaW50CWxlbmd0aDsJCS8qIGxlbmd0aCBvZiBfZm9sbG93aW5nXyBkYXRhICovCit9OworCisvKiBUaGUgRXhlYyBBdXhpbGlhcnkgSGVhZGVyLiAgQ2FsbGVkIFRoZSBIUC1VWCBIZWFkZXIgd2l0aGluIEhQIGFwcGFyZW50bHkuICovCitzdHJ1Y3Qgc29tX2V4ZWNfYXV4aGRyIHsKKwlzdHJ1Y3QgYXV4X2lkCXNvbV9hdXhoZHI7CisJaW50CQlleGVjX3RzaXplOwkvKiBUZXh0IHNpemUgaW4gYnl0ZXMgKi8KKwlpbnQJCWV4ZWNfdG1lbTsJLyogQWRkcmVzcyB0byBsb2FkIHRleHQgYXQgKi8KKwlpbnQJCWV4ZWNfdGZpbGU7CS8qIExvY2F0aW9uIG9mIHRleHQgaW4gZmlsZSAqLworCWludAkJZXhlY19kc2l6ZTsJLyogRGF0YSBzaXplIGluIGJ5dGVzICovCisJaW50CQlleGVjX2RtZW07CS8qIEFkZHJlc3MgdG8gbG9hZCBkYXRhIGF0ICovCisJaW50CQlleGVjX2RmaWxlOwkvKiBMb2NhdGlvbiBvZiBkYXRhIGluIGZpbGUgKi8KKwlpbnQJCWV4ZWNfYnNpemU7CS8qIFVuaW5pdGlhbGlzZWQgZGF0YSAoYnNzKSAqLworCWludAkJZXhlY19lbnRyeTsJLyogQWRkcmVzcyB0byBzdGFydCBleGVjdXRpbmcgKi8KKwlpbnQJCWV4ZWNfZmxhZ3M7CS8qIGxvYWRlciBmbGFncyAqLworCWludAkJZXhlY19iZmlsbDsJLyogaW5pdGlhbGlzYXRpb24gdmFsdWUgZm9yIGJzcyAqLworfTsKKworLyogT2gsIHRoZSB0aGluZ3MgcGVvcGxlIGRvIHRvIGF2b2lkIGNhc3RzLiAgU2hhbWUgaXQnbGwgYnJlYWsgd2l0aCBnY2MncworICogbmV3IGFsaWFzaW5nIHJ1bGVzIHJlYWxseS4KKyAqLwordW5pb24gbmFtZV9wdCB7CisJY2hhciAqCQluX25hbWU7CisJdW5zaWduZWQgaW50CW5fc3RyeDsKK307CisKKy8qIFRoZSBTcGFjZSBEaWN0aW9uYXJ5ICovCitzdHJ1Y3Qgc3BhY2VfZGljdGlvbmFyeV9yZWNvcmQgeworCXVuaW9uIG5hbWVfcHQJbmFtZTsJCQkvKiBpbmRleCB0byBzdWJzcGFjZSBuYW1lICovCisJdW5zaWduZWQgaW50CWlzX2xvYWRhYmxlCToxOwkvKiBsb2FkYWJsZSAqLworCXVuc2lnbmVkIGludAlpc19kZWZpbmVkCToxOwkvKiBkZWZpbmVkIHdpdGhpbiBmaWxlICovCisJdW5zaWduZWQgaW50CWlzX3ByaXZhdGUJOjE7CS8qIG5vdCBzaGFyYWJsZSAqLworCXVuc2lnbmVkIGludAloYXNfaW50ZXJtZWRpYXRlX2NvZGUgOjE7IC8qIGNvbnRhaW5zIGludGVybWVkaWF0ZSBjb2RlICovCisJdW5zaWduZWQgaW50CWlzX3RzcGVjaWZpYwk6MTsJLyogdGhyZWFkIHNwZWNpZmljICovCisJdW5zaWduZWQgaW50CXJlc2VydmVkCToxMTsJLyogZm9yIGZ1dHVyZSBleHBhbnNpb24gKi8KKwl1bnNpZ25lZCBpbnQJc29ydF9rZXkJOjg7CS8qIGZvciBsaW5rZXIgKi8KKwl1bnNpZ25lZCBpbnQJcmVzZXJ2ZWQyCTo4OwkvKiBmb3IgZnV0dXJlIGV4cGFuc2lvbiAqLworCisJaW50CQlzcGFjZV9udW1iZXI7CQkvKiBpbmRleCAqLworCWludAkJc3Vic3BhY2VfaW5kZXg7CQkvKiBpbmRleCBpbnRvIHN1YnNwYWNlIGRpY3QgKi8KKwl1bnNpZ25lZCBpbnQJc3Vic3BhY2VfcXVhbnRpdHk7CS8qIG51bWJlciBvZiBzdWJzcGFjZXMgKi8KKwlpbnQJCWxvYWRlcl9maXhfaW5kZXg7CS8qIGZvciBsb2FkZXIgKi8KKwl1bnNpZ25lZCBpbnQJbG9hZGVyX2ZpeF9xdWFudGl0eTsJLyogZm9yIGxvYWRlciAqLworCWludAkJaW5pdF9wb2ludGVyX2luZGV4OwkvKiBkYXRhIHBvaW50ZXIgYXJyYXkgaW5kZXggKi8KKwl1bnNpZ25lZCBpbnQJaW5pdF9wb2ludGVyX3F1YW50aXR5OwkvKiBudW1iZXIgb2YgZGF0YSBwb2ludGVycyAqLworfTsKKworLyogVGhlIFN1YnNwYWNlIERpY3Rpb25hcnkgKi8KK3N0cnVjdCBzdWJzcGFjZV9kaWN0aW9uYXJ5X3JlY29yZCB7CisJaW50CQlzcGFjZV9pbmRleDsKKwl1bnNpZ25lZCBpbnQJYWNjZXNzX2NvbnRyb2xfYml0cyA6NzsKKwl1bnNpZ25lZCBpbnQJbWVtb3J5X3Jlc2lkZW50CToxOworCXVuc2lnbmVkIGludAlkdXBfY29tbW9uCToxOworCXVuc2lnbmVkIGludAlpc19jb21tb24JOjE7CisJdW5zaWduZWQgaW50CXF1YWRyYW50CToyOworCXVuc2lnbmVkIGludAlpbml0aWFsbHlfZnJvemVuIDoxOworCXVuc2lnbmVkIGludAlpc19maXJzdAk6MTsKKwl1bnNpZ25lZCBpbnQJY29kZV9vbmx5CToxOworCXVuc2lnbmVkIGludAlzb3J0X2tleQk6ODsKKwl1bnNpZ25lZCBpbnQJcmVwbGljYXRlX2luaXQJOjE7CisJdW5zaWduZWQgaW50CWNvbnRpbnVhdGlvbgk6MTsKKwl1bnNpZ25lZCBpbnQJaXNfdHNwZWNpZmljCToxOworCXVuc2lnbmVkIGludAlpc19jb21kYXQJOjE7CisJdW5zaWduZWQgaW50CXJlc2VydmVkCTo0OworCisJaW50CQlmaWxlX2xvY19pbml0X3ZhbHVlOworCXVuc2lnbmVkIGludAlpbml0aWFsaXphdGlvbl9sZW5ndGg7CisJdW5zaWduZWQgaW50CXN1YnNwYWNlX3N0YXJ0OworCXVuc2lnbmVkIGludAlzdWJzcGFjZV9sZW5ndGg7CisKKwl1bnNpZ25lZCBpbnQJcmVzZXJ2ZWQyCTo1OworCXVuc2lnbmVkIGludAlhbGlnbm1lbnQJOjI3OworCisJdW5pb24gbmFtZV9wdAluYW1lOworCWludAkJZml4dXBfcmVxdWVzdF9pbmRleDsKKwl1bnNpZ25lZCBpbnQJZml4dXBfcmVxdWVzdF9xdWFudGl0eTsKK307CisKKyNlbmRpZiAvKiBfTElOVVhfU09NX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc29uZXQuaCBiL2luY2x1ZGUvbGludXgvc29uZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTM2ODAyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9zb25ldC5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qIHNvbmV0LmggLSBTT05FVC9TSEQgcGh5c2ljYWwgbGF5ZXIgY29udHJvbCAqLworIAorLyogV3JpdHRlbiAxOTk1LTIwMDAgYnkgV2VybmVyIEFsbWVzYmVyZ2VyLCBFUEZMIExSQy9JQ0EgKi8KKyAKKworI2lmbmRlZiBMSU5VWF9TT05FVF9ICisjZGVmaW5lIExJTlVYX1NPTkVUX0gKKworI2RlZmluZSBfX1NPTkVUX0lURU1TIFwKKyAgICBfX0hBTkRMRV9JVEVNKHNlY3Rpb25fYmlwKTsgCS8qIHNlY3Rpb24gcGFyaXR5IGVycm9ycyAoQjEpICovIFwKKyAgICBfX0hBTkRMRV9JVEVNKGxpbmVfYmlwKTsJCS8qIGxpbmUgcGFyaXR5IGVycm9ycyAoQjIpICovIFwKKyAgICBfX0hBTkRMRV9JVEVNKHBhdGhfYmlwKTsJCS8qIHBhdGggcGFyaXR5IGVycm9ycyAoQjMpICovIFwKKyAgICBfX0hBTkRMRV9JVEVNKGxpbmVfZmViZSk7CQkvKiBsaW5lIHBhcml0eSBlcnJvcnMgYXQgcmVtb3RlICovIFwKKyAgICBfX0hBTkRMRV9JVEVNKHBhdGhfZmViZSk7CQkvKiBwYXRoIHBhcml0eSBlcnJvcnMgYXQgcmVtb3RlICovIFwKKyAgICBfX0hBTkRMRV9JVEVNKGNvcnJfaGNzKTsJCS8qIGNvcnJlY3RhYmxlIGhlYWRlciBlcnJvcnMgKi8gXAorICAgIF9fSEFORExFX0lURU0odW5jb3JyX2hjcyk7CQkvKiB1bmNvcnJlY3RhYmxlIGhlYWRlciBlcnJvcnMgKi8gXAorICAgIF9fSEFORExFX0lURU0odHhfY2VsbHMpOwkJLyogY2VsbHMgc2VudCAqLyBcCisgICAgX19IQU5ETEVfSVRFTShyeF9jZWxscyk7CQkvKiBjZWxscyByZWNlaXZlZCAqLworCitzdHJ1Y3Qgc29uZXRfc3RhdHMgeworI2RlZmluZSBfX0hBTkRMRV9JVEVNKGkpIGludCBpCisJX19TT05FVF9JVEVNUworI3VuZGVmIF9fSEFORExFX0lURU0KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisKKyNkZWZpbmUgU09ORVRfR0VUU1RBVAlfSU9SKCdhJyxBVE1JT0NfUEhZVFlQLHN0cnVjdCBzb25ldF9zdGF0cykKKwkJCQkJLyogZ2V0IHN0YXRpc3RpY3MgKi8KKyNkZWZpbmUgU09ORVRfR0VUU1RBVFoJX0lPUignYScsQVRNSU9DX1BIWVRZUCsxLHN0cnVjdCBzb25ldF9zdGF0cykKKwkJCQkJLyogLi4uIGFuZCB6ZXJvIGNvdW50ZXJzICovCisjZGVmaW5lIFNPTkVUX1NFVERJQUcJX0lPV1IoJ2EnLEFUTUlPQ19QSFlUWVArMixpbnQpCisJCQkJCS8qIHNldCBlcnJvciBpbnNlcnRpb24gKi8KKyNkZWZpbmUgU09ORVRfQ0xSRElBRwlfSU9XUignYScsQVRNSU9DX1BIWVRZUCszLGludCkKKwkJCQkJLyogY2xlYXIgZXJyb3IgaW5zZXJ0aW9uICovCisjZGVmaW5lIFNPTkVUX0dFVERJQUcJX0lPUignYScsQVRNSU9DX1BIWVRZUCs0LGludCkKKwkJCQkJLyogcXVlcnkgZXJyb3IgaW5zZXJ0aW9uICovCisjZGVmaW5lIFNPTkVUX1NFVEZSQU1JTkcgX0lPKCdhJyxBVE1JT0NfUEhZVFlQKzUpCisJCQkJCS8qIHNldCBmcmFtaW5nIG1vZGUgKFNPTkVUL1NESCkgKi8KKyNkZWZpbmUgU09ORVRfR0VURlJBTUlORyBfSU9SKCdhJyxBVE1JT0NfUEhZVFlQKzYsaW50KQorCQkJCQkvKiBnZXQgZnJhbWluZyBtb2RlICovCisjZGVmaW5lIFNPTkVUX0dFVEZSU0VOU0UgX0lPUignYScsQVRNSU9DX1BIWVRZUCs3LCBcCisgIHVuc2lnbmVkIGNoYXJbU09ORVRfRlJTRU5TRV9TSVpFXSkJLyogZ2V0IGZyYW1pbmcgc2Vuc2UgaW5mb3JtYXRpb24gKi8KKworI2RlZmluZSBTT05FVF9JTlNfU0JJUAkgIDEJCS8qIHNlY3Rpb24gQklQICovCisjZGVmaW5lIFNPTkVUX0lOU19MQklQCSAgMgkJLyogbGluZSBCSVAgKi8KKyNkZWZpbmUgU09ORVRfSU5TX1BCSVAJICA0CQkvKiBwYXRoIEJJUCAqLworI2RlZmluZSBTT05FVF9JTlNfRlJBTUUJICA4CQkvKiBvdXQgb2YgZnJhbWUgKi8KKyNkZWZpbmUgU09ORVRfSU5TX0xPUwkgMTYJCS8qIHNldCBsaW5lIHRvIHplcm8gKi8KKyNkZWZpbmUgU09ORVRfSU5TX0xBSVMJIDMyCQkvKiBsaW5lIGFsYXJtIGluZGljYXRpb24gc2lnbmFsICovCisjZGVmaW5lIFNPTkVUX0lOU19QQUlTCSA2NAkJLyogcGF0aCBhbGFybSBpbmRpY2F0aW9uIHNpZ25hbCAqLworI2RlZmluZSBTT05FVF9JTlNfSENTCTEyOAkJLyogaW5zZXJ0IEhDUyBlcnJvciAqLworCisjZGVmaW5lIFNPTkVUX0ZSQU1FX1NPTkVUIDAJCS8qIFNPTkVUIFNUUy0zIGZyYW1pbmcgKi8KKyNkZWZpbmUgU09ORVRfRlJBTUVfU0RIICAgMQkJLyogU0RIIFNUTS0xIGZyYW1pbmcgKi8KKworI2RlZmluZSBTT05FVF9GUlNFTlNFX1NJWkUgNgkJLyogQzFbM10sSDFbM10gKDB4ZmYgZm9yIHVua25vd24pICovCisKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKworc3RydWN0IGtfc29uZXRfc3RhdHMgeworI2RlZmluZSBfX0hBTkRMRV9JVEVNKGkpIGF0b21pY190IGkKKwlfX1NPTkVUX0lURU1TCisjdW5kZWYgX19IQU5ETEVfSVRFTQorfTsKKworZXh0ZXJuIHZvaWQgc29uZXRfY29weV9zdGF0cyhzdHJ1Y3Qga19zb25ldF9zdGF0cyAqZnJvbSxzdHJ1Y3Qgc29uZXRfc3RhdHMgKnRvKTsKK2V4dGVybiB2b2lkIHNvbmV0X3N1YnRyYWN0X3N0YXRzKHN0cnVjdCBrX3NvbmV0X3N0YXRzICpmcm9tLAorICAgIHN0cnVjdCBzb25ldF9zdGF0cyAqdG8pOworCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NvbnlwaS5oIGIvaW5jbHVkZS9saW51eC9zb255cGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjhjYmJhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9zb255cGkuaApAQCAtMCwwICsxLDE1OCBAQAorLyoKKyAqIFNvbnkgUHJvZ3JhbW1hYmxlIEkvTyBDb250cm9sIERldmljZSBkcml2ZXIgZm9yIFZBSU8KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNSBTdGVsaWFuIFBvcCA8c3RlbGlhbkBwb3BpZXMubmV0PgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBOYXJheWFuYW4gUiBTIDxuYXJzQGthZGFtYmEub3JnPgorCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiBBbGP0dmUgPHd3dy5hbGNvdmUuY29tPgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMSBNaWNoYWVsIEFzaGxleSA8bS5hc2hsZXlAdW5zdy5lZHUuYXU+CisgKgorICogQ29weXJpZ2h0IChDKSAyMDAxIEp1bmljaGkgTW9yaXRhIDxqdW4xbUBtYXJzLmR0aS5uZS5qcD4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgVGFrYXlhIEtpbmpvIDx0LWtpbmpvQHRjNC5zby1uZXQubmUuanA+CisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwIEFuZHJldyBUcmlkZ2VsbCA8dHJpZGdlQHZhbGludXguY29tPgorICoKKyAqIEVhcmxpZXIgd29yayBieSBXZXJuZXIgQWxtZXNiZXJnZXIsIFBhdWwgYFJ1c3R5JyBSdXNzZWxsIGFuZCBQYXVsIE1hY2tlcnJhcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBfU09OWVBJX0hfCisjZGVmaW5lIF9TT05ZUElfSF8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qIGV2ZW50cyB0aGUgdXNlciBhcHBsaWNhdGlvbiByZWFkaW5nIC9kZXYvc29ueXBpIGNhbiB1c2UgKi8KKworI2RlZmluZSBTT05ZUElfRVZFTlRfSk9HRElBTF9ET1dOCQkgMQorI2RlZmluZSBTT05ZUElfRVZFTlRfSk9HRElBTF9VUAkJCSAyCisjZGVmaW5lIFNPTllQSV9FVkVOVF9KT0dESUFMX0RPV05fUFJFU1NFRAkgMworI2RlZmluZSBTT05ZUElfRVZFTlRfSk9HRElBTF9VUF9QUkVTU0VECQkgNAorI2RlZmluZSBTT05ZUElfRVZFTlRfSk9HRElBTF9QUkVTU0VECQkgNQorI2RlZmluZSBTT05ZUElfRVZFTlRfSk9HRElBTF9SRUxFQVNFRAkJIDYJLyogb2Jzb2xldGUgKi8KKyNkZWZpbmUgU09OWVBJX0VWRU5UX0NBUFRVUkVfUFJFU1NFRAkJIDcKKyNkZWZpbmUgU09OWVBJX0VWRU5UX0NBUFRVUkVfUkVMRUFTRUQJCSA4CS8qIG9ic29sZXRlICovCisjZGVmaW5lIFNPTllQSV9FVkVOVF9DQVBUVVJFX1BBUlRJQUxQUkVTU0VECSA5CisjZGVmaW5lIFNPTllQSV9FVkVOVF9DQVBUVVJFX1BBUlRJQUxSRUxFQVNFRAkxMAorI2RlZmluZSBTT05ZUElfRVZFTlRfRk5LRVlfRVNDCQkJMTEKKyNkZWZpbmUgU09OWVBJX0VWRU5UX0ZOS0VZX0YxCQkJMTIKKyNkZWZpbmUgU09OWVBJX0VWRU5UX0ZOS0VZX0YyCQkJMTMKKyNkZWZpbmUgU09OWVBJX0VWRU5UX0ZOS0VZX0YzCQkJMTQKKyNkZWZpbmUgU09OWVBJX0VWRU5UX0ZOS0VZX0Y0CQkJMTUKKyNkZWZpbmUgU09OWVBJX0VWRU5UX0ZOS0VZX0Y1CQkJMTYKKyNkZWZpbmUgU09OWVBJX0VWRU5UX0ZOS0VZX0Y2CQkJMTcKKyNkZWZpbmUgU09OWVBJX0VWRU5UX0ZOS0VZX0Y3CQkJMTgKKyNkZWZpbmUgU09OWVBJX0VWRU5UX0ZOS0VZX0Y4CQkJMTkKKyNkZWZpbmUgU09OWVBJX0VWRU5UX0ZOS0VZX0Y5CQkJMjAKKyNkZWZpbmUgU09OWVBJX0VWRU5UX0ZOS0VZX0YxMAkJCTIxCisjZGVmaW5lIFNPTllQSV9FVkVOVF9GTktFWV9GMTEJCQkyMgorI2RlZmluZSBTT05ZUElfRVZFTlRfRk5LRVlfRjEyCQkJMjMKKyNkZWZpbmUgU09OWVBJX0VWRU5UX0ZOS0VZXzEJCQkyNAorI2RlZmluZSBTT05ZUElfRVZFTlRfRk5LRVlfMgkJCTI1CisjZGVmaW5lIFNPTllQSV9FVkVOVF9GTktFWV9ECQkJMjYKKyNkZWZpbmUgU09OWVBJX0VWRU5UX0ZOS0VZX0UJCQkyNworI2RlZmluZSBTT05ZUElfRVZFTlRfRk5LRVlfRgkJCTI4CisjZGVmaW5lIFNPTllQSV9FVkVOVF9GTktFWV9TCQkJMjkKKyNkZWZpbmUgU09OWVBJX0VWRU5UX0ZOS0VZX0IJCQkzMAorI2RlZmluZSBTT05ZUElfRVZFTlRfQkxVRVRPT1RIX1BSRVNTRUQJCTMxCisjZGVmaW5lIFNPTllQSV9FVkVOVF9QS0VZX1AxCQkJMzIKKyNkZWZpbmUgU09OWVBJX0VWRU5UX1BLRVlfUDIJCQkzMworI2RlZmluZSBTT05ZUElfRVZFTlRfUEtFWV9QMwkJCTM0CisjZGVmaW5lIFNPTllQSV9FVkVOVF9CQUNLX1BSRVNTRUQJCTM1CisjZGVmaW5lIFNPTllQSV9FVkVOVF9MSURfQ0xPU0VECQkJMzYKKyNkZWZpbmUgU09OWVBJX0VWRU5UX0xJRF9PUEVORUQJCQkzNworI2RlZmluZSBTT05ZUElfRVZFTlRfQkxVRVRPT1RIX09OCQkzOAorI2RlZmluZSBTT05ZUElfRVZFTlRfQkxVRVRPT1RIX09GRgkJMzkKKyNkZWZpbmUgU09OWVBJX0VWRU5UX0hFTFBfUFJFU1NFRAkJNDAKKyNkZWZpbmUgU09OWVBJX0VWRU5UX0ZOS0VZX09OTFkJCQk0MQorI2RlZmluZSBTT05ZUElfRVZFTlRfSk9HRElBTF9GQVNUX0RPV04JCTQyCisjZGVmaW5lIFNPTllQSV9FVkVOVF9KT0dESUFMX0ZBU1RfVVAJCTQzCisjZGVmaW5lIFNPTllQSV9FVkVOVF9KT0dESUFMX0ZBU1RfRE9XTl9QUkVTU0VECTQ0CisjZGVmaW5lIFNPTllQSV9FVkVOVF9KT0dESUFMX0ZBU1RfVVBfUFJFU1NFRAk0NQorI2RlZmluZSBTT05ZUElfRVZFTlRfSk9HRElBTF9WRkFTVF9ET1dOCQk0NgorI2RlZmluZSBTT05ZUElfRVZFTlRfSk9HRElBTF9WRkFTVF9VUAkJNDcKKyNkZWZpbmUgU09OWVBJX0VWRU5UX0pPR0RJQUxfVkZBU1RfRE9XTl9QUkVTU0VECTQ4CisjZGVmaW5lIFNPTllQSV9FVkVOVF9KT0dESUFMX1ZGQVNUX1VQX1BSRVNTRUQJNDkKKyNkZWZpbmUgU09OWVBJX0VWRU5UX1pPT01fUFJFU1NFRAkJNTAKKyNkZWZpbmUgU09OWVBJX0VWRU5UX1RIVU1CUEhSQVNFX1BSRVNTRUQJNTEKKyNkZWZpbmUgU09OWVBJX0VWRU5UX01FWUVfRkFDRQkJCTUyCisjZGVmaW5lIFNPTllQSV9FVkVOVF9NRVlFX09QUE9TSVRFCQk1MworI2RlZmluZSBTT05ZUElfRVZFTlRfTUVNT1JZU1RJQ0tfSU5TRVJUCQk1NAorI2RlZmluZSBTT05ZUElfRVZFTlRfTUVNT1JZU1RJQ0tfRUpFQ1QJCTU1CisjZGVmaW5lIFNPTllQSV9FVkVOVF9BTllCVVRUT05fUkVMRUFTRUQJCTU2CisjZGVmaW5lIFNPTllQSV9FVkVOVF9CQVRURVJZX0lOU0VSVAkJNTcKKyNkZWZpbmUgU09OWVBJX0VWRU5UX0JBVFRFUllfUkVNT1ZFCQk1OAorI2RlZmluZSBTT05ZUElfRVZFTlRfRk5LRVlfUkVMRUFTRUQJCTU5CisKKy8qIGdldC9zZXQgYnJpZ2h0bmVzcyAqLworI2RlZmluZSBTT05ZUElfSU9DR0JSVAkJX0lPUigndicsIDAsIF9fdTgpCisjZGVmaW5lIFNPTllQSV9JT0NTQlJUCQlfSU9XKCd2JywgMCwgX191OCkKKworLyogZ2V0IGJhdHRlcnkgZnVsbCBjYXBhY2l0eS9yZW1haW5pbmcgY2FwYWNpdHkgKi8KKyNkZWZpbmUgU09OWVBJX0lPQ0dCQVQxQ0FQCV9JT1IoJ3YnLCAyLCBfX3UxNikKKyNkZWZpbmUgU09OWVBJX0lPQ0dCQVQxUkVNCV9JT1IoJ3YnLCAzLCBfX3UxNikKKyNkZWZpbmUgU09OWVBJX0lPQ0dCQVQyQ0FQCV9JT1IoJ3YnLCA0LCBfX3UxNikKKyNkZWZpbmUgU09OWVBJX0lPQ0dCQVQyUkVNCV9JT1IoJ3YnLCA1LCBfX3UxNikKKworLyogZ2V0IGJhdHRlcnkgZmxhZ3M6IGJhdHRlcnkxL2JhdHRlcnkyL2FjIGFkYXB0ZXIgcHJlc2VudCAqLworI2RlZmluZSBTT05ZUElfQkZMQUdTX0IxCTB4MDEKKyNkZWZpbmUgU09OWVBJX0JGTEFHU19CMgkweDAyCisjZGVmaW5lIFNPTllQSV9CRkxBR1NfQUMJMHgwNAorI2RlZmluZSBTT05ZUElfSU9DR0JBVEZMQUdTCV9JT1IoJ3YnLCA3LCBfX3U4KQorCisvKiBnZXQvc2V0IGJsdWV0b290aCBzdWJzeXN0ZW0gc3RhdGUgb24vb2ZmICovCisjZGVmaW5lIFNPTllQSV9JT0NHQkxVRQkJX0lPUigndicsIDgsIF9fdTgpCisjZGVmaW5lIFNPTllQSV9JT0NTQkxVRQkJX0lPVygndicsIDksIF9fdTgpCisKKy8qIGdldC9zZXQgZmFuIHN0YXRlIG9uL29mZiAqLworI2RlZmluZSBTT05ZUElfSU9DR0ZBTgkJX0lPUigndicsIDEwLCBfX3U4KQorI2RlZmluZSBTT05ZUElfSU9DU0ZBTgkJX0lPVygndicsIDExLCBfX3U4KQorCisvKiBnZXQgdGVtcGVyYXR1cmUgKEMpICovCisjZGVmaW5lIFNPTllQSV9JT0NHVEVNUAkJX0lPUigndicsIDEyLCBfX3U4KQorCisjaWZkZWYgX19LRVJORUxfXworCisvKiB1c2VkIG9ubHkgZm9yIGNvbW11bmljYXRpb24gYmV0d2VlbiB2NGwgYW5kIHNvbnlwaSAqLworCisjZGVmaW5lIFNPTllQSV9DT01NQU5EX0dFVENBTUVSQQkJIDEJLyogb2Jzb2xldGUgKi8KKyNkZWZpbmUgU09OWVBJX0NPTU1BTkRfU0VUQ0FNRVJBCQkgMgorI2RlZmluZSBTT05ZUElfQ09NTUFORF9HRVRDQU1FUkFCUklHSFRORVNTCSAzCS8qIG9ic29sZXRlICovCisjZGVmaW5lIFNPTllQSV9DT01NQU5EX1NFVENBTUVSQUJSSUdIVE5FU1MJIDQKKyNkZWZpbmUgU09OWVBJX0NPTU1BTkRfR0VUQ0FNRVJBQ09OVFJBU1QJIDUJLyogb2Jzb2xldGUgKi8KKyNkZWZpbmUgU09OWVBJX0NPTU1BTkRfU0VUQ0FNRVJBQ09OVFJBU1QJIDYKKyNkZWZpbmUgU09OWVBJX0NPTU1BTkRfR0VUQ0FNRVJBSFVFCQkgNwkvKiBvYnNvbGV0ZSAqLworI2RlZmluZSBTT05ZUElfQ09NTUFORF9TRVRDQU1FUkFIVUUJCSA4CisjZGVmaW5lIFNPTllQSV9DT01NQU5EX0dFVENBTUVSQUNPTE9SCQkgOQkvKiBvYnNvbGV0ZSAqLworI2RlZmluZSBTT05ZUElfQ09NTUFORF9TRVRDQU1FUkFDT0xPUgkJMTAKKyNkZWZpbmUgU09OWVBJX0NPTU1BTkRfR0VUQ0FNRVJBU0hBUlBORVNTCTExCS8qIG9ic29sZXRlICovCisjZGVmaW5lIFNPTllQSV9DT01NQU5EX1NFVENBTUVSQVNIQVJQTkVTUwkxMgorI2RlZmluZSBTT05ZUElfQ09NTUFORF9HRVRDQU1FUkFQSUNUVVJFCQkxMwkvKiBvYnNvbGV0ZSAqLworI2RlZmluZSBTT05ZUElfQ09NTUFORF9TRVRDQU1FUkFQSUNUVVJFCQkxNAorI2RlZmluZSBTT05ZUElfQ09NTUFORF9HRVRDQU1FUkFBR0MJCTE1CS8qIG9ic29sZXRlICovCisjZGVmaW5lIFNPTllQSV9DT01NQU5EX1NFVENBTUVSQUFHQwkJMTYKKyNkZWZpbmUgU09OWVBJX0NPTU1BTkRfR0VUQ0FNRVJBRElSRUNUSU9OCTE3CS8qIG9ic29sZXRlICovCisjZGVmaW5lIFNPTllQSV9DT01NQU5EX0dFVENBTUVSQVJPTVZFUlNJT04JMTgJLyogb2Jzb2xldGUgKi8KKyNkZWZpbmUgU09OWVBJX0NPTU1BTkRfR0VUQ0FNRVJBUkVWSVNJT04JMTkJLyogb2Jzb2xldGUgKi8KKworaW50IHNvbnlwaV9jYW1lcmFfY29tbWFuZChpbnQgY29tbWFuZCwgdTggdmFsdWUpOworCisjZW5kaWYJCQkJLyogX19LRVJORUxfXyAqLworCisjZW5kaWYJCQkJLyogX1NPTllQSV9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zb3J0LmggYi9pbmNsdWRlL2xpbnV4L3NvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTM0ZGEyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9zb3J0LmgKQEAgLTAsMCArMSwxMCBAQAorI2lmbmRlZiBfTElOVVhfU09SVF9ICisjZGVmaW5lIF9MSU5VWF9TT1JUX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3ZvaWQgc29ydCh2b2lkICpiYXNlLCBzaXplX3QgbnVtLCBzaXplX3Qgc2l6ZSwKKwkgIGludCAoKmNtcCkoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopLAorCSAgdm9pZCAoKnN3YXApKHZvaWQgKiwgdm9pZCAqLCBpbnQpKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NvdW5kLmggYi9pbmNsdWRlL2xpbnV4L3NvdW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI4ZjU5NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvc291bmQuaApAQCAtMCwwICsxLDQyIEBACisKKy8qCisgKiBNaW5vciBudW1iZXJzIGZvciB0aGUgc291bmQgZHJpdmVyLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorCisjZGVmaW5lIFNORF9ERVZfQ1RMCQkwCS8qIENvbnRyb2wgcG9ydCAvZGV2L21peGVyICovCisjZGVmaW5lIFNORF9ERVZfU0VRCQkxCS8qIFNlcXVlbmNlciBvdXRwdXQgL2Rldi9zZXF1ZW5jZXIgKEZNCisJCQkJCQlzeW50aGVzaXplciBhbmQgTUlESSBvdXRwdXQpICovCisjZGVmaW5lIFNORF9ERVZfTUlESU4JCTIJLyogUmF3IG1pZGkgYWNjZXNzICovCisjZGVmaW5lIFNORF9ERVZfRFNQCQkzCS8qIERpZ2l0aXplZCB2b2ljZSAvZGV2L2RzcCAqLworI2RlZmluZSBTTkRfREVWX0FVRElPCQk0CS8qIFNwYXJjIGNvbXBhdGlibGUgL2Rldi9hdWRpbyAqLworI2RlZmluZSBTTkRfREVWX0RTUDE2CQk1CS8qIExpa2UgL2Rldi9kc3AgYnV0IDE2IGJpdHMvc2FtcGxlICovCisvKiAjZGVmaW5lIFNORF9ERVZfU1RBVFVTCTYgKi8JLyogL2Rldi9zbmRzdGF0IChvYnNvbGV0ZSkgKi8KKyNkZWZpbmUgU05EX0RFVl9VTlVTRUQJCTYKKyNkZWZpbmUgU05EX0RFVl9BV0ZNCQk3CS8qIFJlc2VydmVkICovCisjZGVmaW5lIFNORF9ERVZfU0VRMgkJOAkvKiAvZGV2L3NlcXVlbmNlciwgbGV2ZWwgMiBpbnRlcmZhY2UgKi8KKy8qICNkZWZpbmUgU05EX0RFVl9TTkRQUk9DCTkgKi8JLyogL2Rldi9zbmRwcm9jIGZvciBwcm9ncmFtbWFibGUgZGV2aWNlcyAobm90IHVzZWQpICovCisvKiAjZGVmaW5lIFNORF9ERVZfRE1NSURJCTkgKi8KKyNkZWZpbmUgU05EX0RFVl9TWU5USAkJOQkvKiBSYXcgc3ludGggYWNjZXNzIC9kZXYvc3ludGggKHNhbWUgYXMgL2Rldi9kbWZtKSAqLworI2RlZmluZSBTTkRfREVWX0RNRk0JCTEwCS8qIFJhdyBzeW50aCBhY2Nlc3MgL2Rldi9kbWZtICovCisjZGVmaW5lIFNORF9ERVZfVU5LTk9XTjExCTExCisjZGVmaW5lIFNORF9ERVZfQURTUAkJMTIJLyogTGlrZSAvZGV2L2RzcCAob2Jzb2xldGUpICovCisjZGVmaW5lIFNORF9ERVZfQU1JREkJCTEzCS8qIExpa2UgL2Rldi9taWRpIChvYnNvbGV0ZSkgKi8KKyNkZWZpbmUgU05EX0RFVl9BRE1NSURJCQkxNAkvKiBMaWtlIC9kZXYvZG1taWRpIChvbnNvbGV0ZSkgKi8KKworLyoKKyAqCVNvdW5kIGNvcmUgaW50ZXJmYWNlIGZ1bmN0aW9ucworICovCisgCitleHRlcm4gaW50IHJlZ2lzdGVyX3NvdW5kX3NwZWNpYWwoc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZm9wcywgaW50IHVuaXQpOworZXh0ZXJuIGludCByZWdpc3Rlcl9zb3VuZF9taXhlcihzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmb3BzLCBpbnQgZGV2KTsKK2V4dGVybiBpbnQgcmVnaXN0ZXJfc291bmRfbWlkaShzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmb3BzLCBpbnQgZGV2KTsKK2V4dGVybiBpbnQgcmVnaXN0ZXJfc291bmRfZHNwKHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmZvcHMsIGludCBkZXYpOworZXh0ZXJuIGludCByZWdpc3Rlcl9zb3VuZF9zeW50aChzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmb3BzLCBpbnQgZGV2KTsKKworZXh0ZXJuIHZvaWQgdW5yZWdpc3Rlcl9zb3VuZF9zcGVjaWFsKGludCB1bml0KTsKK2V4dGVybiB2b2lkIHVucmVnaXN0ZXJfc291bmRfbWl4ZXIoaW50IHVuaXQpOworZXh0ZXJuIHZvaWQgdW5yZWdpc3Rlcl9zb3VuZF9taWRpKGludCB1bml0KTsKK2V4dGVybiB2b2lkIHVucmVnaXN0ZXJfc291bmRfZHNwKGludCB1bml0KTsKK2V4dGVybiB2b2lkIHVucmVnaXN0ZXJfc291bmRfc3ludGgoaW50IHVuaXQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zb3VuZGNhcmQuaCBiL2luY2x1ZGUvbGludXgvc291bmRjYXJkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhkMmQxOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvc291bmRjYXJkLmgKQEAgLTAsMCArMSwxMjk4IEBACisjaWZuZGVmIFNPVU5EQ0FSRF9ICisjZGVmaW5lIFNPVU5EQ0FSRF9ICisvKgorICogQ29weXJpZ2h0IGJ5IEhhbm51IFNhdm9sYWluZW4gMTk5My0xOTk3CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIDIuCisgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisKKy8qCisgKiBPU1MgaW50ZXJmYWNlIHZlcnNpb24uIFdpdGggdmVyc2lvbnMgZWFybGllciB0aGFuIDMuNiB0aGlzIHZhbHVlIGlzCisgKiBhbiBpbnRlZ2VyIHdpdGggdmFsdWUgbGVzcyB0aGFuIDM2MS4gSW4gdmVyc2lvbnMgMy42IGFuZCBsYXRlcgorICogaXQncyBhIHNpeCBkaWdpdCBoZXhhZGVjaW1hbCB2YWx1ZS4gRm9yIGV4YW1wbGUgdmFsdWUKKyAqIG9mIDB4MDMwNjAwIHJlcHJlc2VudHMgT1NTIHZlcnNpb24gMy42LjAuCisgKiBVc2UgaW9jdGwoZmQsIE9TU19HRVRWRVJTSU9OLCAmaW50KSB0byBnZXQgdGhlIHZlcnNpb24gbnVtYmVyIG9mCisgKiB0aGUgY3VycmVudGx5IGFjdGl2ZSBkcml2ZXIuCisgKi8KKyNkZWZpbmUgU09VTkRfVkVSU0lPTgkweDAzMDgwMgorI2RlZmluZSBPUEVOX1NPVU5EX1NZU1RFTQorCisvKiBJbiBMaW51eCB3ZSBuZWVkIHRvIGJlIHByZXBhcmVkIGZvciBjcm9zcyBjb21waWxpbmcgKi8KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorCisvKgorICoJU3VwcG9ydGVkIGNhcmQgSUQgbnVtYmVycyAoU2hvdWxkIGJlIHNvbWV3aGVyZSBlbHNlPykKKyAqLworCisjZGVmaW5lIFNORENBUkRfQURMSUIJCTEKKyNkZWZpbmUgU05EQ0FSRF9TQgkJMgorI2RlZmluZSBTTkRDQVJEX1BBUwkJMworI2RlZmluZSBTTkRDQVJEX0dVUwkJNAorI2RlZmluZSBTTkRDQVJEX01QVTQwMQkJNQorI2RlZmluZSBTTkRDQVJEX1NCMTYJCTYKKyNkZWZpbmUgU05EQ0FSRF9TQjE2TUlESQk3CisjZGVmaW5lIFNORENBUkRfVUFSVDY4NTAJOAorI2RlZmluZSBTTkRDQVJEX0dVUzE2CQk5CisjZGVmaW5lIFNORENBUkRfTVNTCQkxMAorI2RlZmluZSBTTkRDQVJEX1BTUyAgICAgCTExCisjZGVmaW5lIFNORENBUkRfU1NDQVBFCQkxMgorI2RlZmluZSBTTkRDQVJEX1BTU19NUFUgICAgIAkxMworI2RlZmluZSBTTkRDQVJEX1BTU19NU1MgICAgIAkxNAorI2RlZmluZSBTTkRDQVJEX1NTQ0FQRV9NU1MJMTUKKyNkZWZpbmUgU05EQ0FSRF9UUlhQUk8JCTE2CisjZGVmaW5lIFNORENBUkRfVFJYUFJPX1NCCTE3CisjZGVmaW5lIFNORENBUkRfVFJYUFJPX01QVQkxOAorI2RlZmluZSBTTkRDQVJEX01BRDE2CQkxOQorI2RlZmluZSBTTkRDQVJEX01BRDE2X01QVQkyMAorI2RlZmluZSBTTkRDQVJEX0NTNDIzMgkJMjEKKyNkZWZpbmUgU05EQ0FSRF9DUzQyMzJfTVBVCTIyCisjZGVmaW5lIFNORENBUkRfTUFVSQkJMjMKKyNkZWZpbmUgU05EQ0FSRF9QU0VVRE9fTVNTCTI0CisjZGVmaW5lIFNORENBUkRfR1VTUE5QCQkyNQorI2RlZmluZSBTTkRDQVJEX1VBUlQ0MDEJCTI2CisvKiBTb3VuZCBjYXJkIG51bWJlcnMgMjcgdG8gTiBhcmUgcmVzZXJ2ZWQuIERvbid0IGFkZCBtb3JlIG51bWJlcnMgaGVyZS4gKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBJT0NUTCBDb21tYW5kcyBmb3IgL2Rldi9zZXF1ZW5jZXIKKyAqLworCisjaWZuZGVmIF9TSU9XUgorI2lmIGRlZmluZWQoX0lPV1IpICYmIChkZWZpbmVkKF9BSVgpIHx8ICghZGVmaW5lZChzdW4pICYmICFkZWZpbmVkKHNwYXJjKSAmJiAhZGVmaW5lZChfX3NwYXJjX18pICYmICFkZWZpbmVkKF9fSU5DaW9jdGxoKSAmJiAhZGVmaW5lZChfX0x5bnhfXykpKQorLyogVXNlIGFscmVhZHkgZGVmaW5lZCBpb2N0bCBkZWZpbmVzIGlmIHRoZXkgZXhpc3QgKGV4Y2VwdCB3aXRoIFN1biBvciBTcGFyYykgKi8KKyNkZWZpbmUJU0lPQ1BBUk1fTUFTSwlJT0NQQVJNX01BU0sKKyNkZWZpbmUJU0lPQ19WT0lECUlPQ19WT0lECisjZGVmaW5lCVNJT0NfT1VUCUlPQ19PVVQKKyNkZWZpbmUJU0lPQ19JTgkJSU9DX0lOCisjZGVmaW5lCVNJT0NfSU5PVVQJSU9DX0lOT1VUCisjZGVmaW5lIF9TSU9DX1NJWkUJX0lPQ19TSVpFCisjZGVmaW5lIF9TSU9DX0RJUglfSU9DX0RJUgorI2RlZmluZSBfU0lPQ19OT05FCV9JT0NfTk9ORQorI2RlZmluZSBfU0lPQ19SRUFECV9JT0NfUkVBRAorI2RlZmluZSBfU0lPQ19XUklURQlfSU9DX1dSSVRFCisjZGVmaW5lCV9TSU8JCV9JTworI2RlZmluZQlfU0lPUgkJX0lPUgorI2RlZmluZQlfU0lPVwkJX0lPVworI2RlZmluZQlfU0lPV1IJCV9JT1dSCisjZWxzZQorCisvKiBJb2N0bCdzIGhhdmUgdGhlIGNvbW1hbmQgZW5jb2RlZCBpbiB0aGUgbG93ZXIgd29yZCwKKyAqIGFuZCB0aGUgc2l6ZSBvZiBhbnkgaW4gb3Igb3V0IHBhcmFtZXRlcnMgaW4gdGhlIHVwcGVyCisgKiB3b3JkLiAgVGhlIGhpZ2ggMiBiaXRzIG9mIHRoZSB1cHBlciB3b3JkIGFyZSB1c2VkCisgKiB0byBlbmNvZGUgdGhlIGluL291dCBzdGF0dXMgb2YgdGhlIHBhcmFtZXRlcjsgZm9yIG5vdworICogd2UgcmVzdHJpY3QgcGFyYW1ldGVycyB0byBhdCBtb3N0IDgxOTEgYnl0ZXMuCisgKi8KKy8qICNkZWZpbmUJU0lPQ1RZUEUJCSgweGZmPDw4KSAqLworI2RlZmluZQlTSU9DUEFSTV9NQVNLCTB4MWZmZgkJLyogcGFyYW1ldGVycyBtdXN0IGJlIDwgODE5MiBieXRlcyAqLworI2RlZmluZQlTSU9DX1ZPSUQJMHgwMDAwMDAwMAkvKiBubyBwYXJhbWV0ZXJzICovCisjZGVmaW5lCVNJT0NfT1VUCTB4MjAwMDAwMDAJLyogY29weSBvdXQgcGFyYW1ldGVycyAqLworI2RlZmluZQlTSU9DX0lOCQkweDQwMDAwMDAwCS8qIGNvcHkgaW4gcGFyYW1ldGVycyAqLworI2RlZmluZQlTSU9DX0lOT1VUCShTSU9DX0lOfFNJT0NfT1VUKQorLyogdGhlIDB4MjAwMDAwMDAgaXMgc28gd2UgY2FuIGRpc3Rpbmd1aXNoIG5ldyBpb2N0bCdzIGZyb20gb2xkICovCisjZGVmaW5lCV9TSU8oeCx5KQkoKGludCkoU0lPQ19WT0lEfCh4PDw4KXx5KSkKKyNkZWZpbmUJX1NJT1IoeCx5LHQpCSgoaW50KShTSU9DX09VVHwoKHNpemVvZih0KSZTSU9DUEFSTV9NQVNLKTw8MTYpfCh4PDw4KXx5KSkKKyNkZWZpbmUJX1NJT1coeCx5LHQpCSgoaW50KShTSU9DX0lOfCgoc2l6ZW9mKHQpJlNJT0NQQVJNX01BU0spPDwxNil8KHg8PDgpfHkpKQorLyogdGhpcyBzaG91bGQgYmUgX1NJT1JXLCBidXQgc3RkaW8gZ290IHRoZXJlIGZpcnN0ICovCisjZGVmaW5lCV9TSU9XUih4LHksdCkJKChpbnQpKFNJT0NfSU5PVVR8KChzaXplb2YodCkmU0lPQ1BBUk1fTUFTSyk8PDE2KXwoeDw8OCl8eSkpCisjZGVmaW5lIF9TSU9DX1NJWkUoeCkJKCh4Pj4xNikmU0lPQ1BBUk1fTUFTSykJCisjZGVmaW5lIF9TSU9DX0RJUih4KQkoeCAmIDB4ZjAwMDAwMDApCisjZGVmaW5lIF9TSU9DX05PTkUJU0lPQ19WT0lECisjZGVmaW5lIF9TSU9DX1JFQUQJU0lPQ19PVVQKKyNkZWZpbmUgX1NJT0NfV1JJVEUJU0lPQ19JTgorIyAgZW5kaWYgLyogX0lPV1IgKi8KKyNlbmRpZiAgLyogIV9TSU9XUiAqLworCisjZGVmaW5lIFNORENUTF9TRVFfUkVTRVQJCV9TSU8gICgnUScsIDApCisjZGVmaW5lIFNORENUTF9TRVFfU1lOQwkJCV9TSU8gICgnUScsIDEpCisjZGVmaW5lIFNORENUTF9TWU5USF9JTkZPCQlfU0lPV1IoJ1EnLCAyLCBzdHJ1Y3Qgc3ludGhfaW5mbykKKyNkZWZpbmUgU05EQ1RMX1NFUV9DVFJMUkFURQkJX1NJT1dSKCdRJywgMywgaW50KQkvKiBTZXQvZ2V0IHRpbWVyIHJlc29sdXRpb24gKEhaKSAqLworI2RlZmluZSBTTkRDVExfU0VRX0dFVE9VVENPVU5UCQlfU0lPUiAoJ1EnLCA0LCBpbnQpCisjZGVmaW5lIFNORENUTF9TRVFfR0VUSU5DT1VOVAkJX1NJT1IgKCdRJywgNSwgaW50KQorI2RlZmluZSBTTkRDVExfU0VRX1BFUkNNT0RFCQlfU0lPVyAoJ1EnLCA2LCBpbnQpCisjZGVmaW5lIFNORENUTF9GTV9MT0FEX0lOU1RSCQlfU0lPVyAoJ1EnLCA3LCBzdHJ1Y3Qgc2JpX2luc3RydW1lbnQpCS8qIE9ic29sZXRlLiBEb24ndCB1c2UhISEhISEgKi8KKyNkZWZpbmUgU05EQ1RMX1NFUV9URVNUTUlESQkJX1NJT1cgKCdRJywgOCwgaW50KQorI2RlZmluZSBTTkRDVExfU0VRX1JFU0VUU0FNUExFUwkJX1NJT1cgKCdRJywgOSwgaW50KQorI2RlZmluZSBTTkRDVExfU0VRX05SU1lOVEhTCQlfU0lPUiAoJ1EnLDEwLCBpbnQpCisjZGVmaW5lIFNORENUTF9TRVFfTlJNSURJUwkJX1NJT1IgKCdRJywxMSwgaW50KQorI2RlZmluZSBTTkRDVExfTUlESV9JTkZPCQlfU0lPV1IoJ1EnLDEyLCBzdHJ1Y3QgbWlkaV9pbmZvKQorI2RlZmluZSBTTkRDVExfU0VRX1RIUkVTSE9MRAkJX1NJT1cgKCdRJywxMywgaW50KQorI2RlZmluZSBTTkRDVExfU1lOVEhfTUVNQVZMCQlfU0lPV1IoJ1EnLDE0LCBpbnQpCS8qIGluPWRldiMsIG91dD1tZW1zaXplICovCisjZGVmaW5lIFNORENUTF9GTV80T1BfRU5BQkxFCQlfU0lPVyAoJ1EnLDE1LCBpbnQpCS8qIGluPWRldiMgKi8KKyNkZWZpbmUgU05EQ1RMX1NFUV9QQU5JQwkJX1NJTyAgKCdRJywxNykKKyNkZWZpbmUgU05EQ1RMX1NFUV9PVVRPRkJBTkQJCV9TSU9XICgnUScsMTgsIHN0cnVjdCBzZXFfZXZlbnRfcmVjKQorI2RlZmluZSBTTkRDVExfU0VRX0dFVFRJTUUJCV9TSU9SICgnUScsMTksIGludCkKKyNkZWZpbmUgU05EQ1RMX1NZTlRIX0lECQkJX1NJT1dSKCdRJywyMCwgc3RydWN0IHN5bnRoX2luZm8pCisjZGVmaW5lIFNORENUTF9TWU5USF9DT05UUk9MCQlfU0lPV1IoJ1EnLDIxLCBzdHJ1Y3Qgc3ludGhfY29udHJvbCkKKyNkZWZpbmUgU05EQ1RMX1NZTlRIX1JFTU9WRVNBTVBMRQlfU0lPV1IoJ1EnLDIyLCBzdHJ1Y3QgcmVtb3ZlX3NhbXBsZSkKKwordHlwZWRlZiBzdHJ1Y3Qgc3ludGhfY29udHJvbAoreworCWludCBkZXZubzsJLyogU3ludGhlc2l6ZXIgIyAqLworCWNoYXIgZGF0YVs0MDAwXTsgLyogRGV2aWNlIHNwZXNpZmljIGNvbW1hbmQvZGF0YSByZWNvcmQgKi8KK31zeW50aF9jb250cm9sOworCit0eXBlZGVmIHN0cnVjdCByZW1vdmVfc2FtcGxlCit7CisJaW50IGRldm5vOwkvKiBTeW50aGVzaXplciAjICovCisJaW50IGJhbmtubzsJLyogTUlESSBiYW5rICMgKDA9R2VuZXJhbCBNSURJKSAqLworCWludCBpbnN0cm5vOwkvKiBNSURJIGluc3RydW1lbnQgbnVtYmVyICovCit9IHJlbW92ZV9zYW1wbGU7CisKK3R5cGVkZWYgc3RydWN0IHNlcV9ldmVudF9yZWMgeworCQl1bnNpZ25lZCBjaGFyIGFycls4XTsKK30gc2VxX2V2ZW50X3JlYzsKKworI2RlZmluZSBTTkRDVExfVE1SX1RJTUVCQVNFCQlfU0lPV1IoJ1QnLCAxLCBpbnQpCisjZGVmaW5lIFNORENUTF9UTVJfU1RBUlQJCV9TSU8gICgnVCcsIDIpCisjZGVmaW5lIFNORENUTF9UTVJfU1RPUAkJCV9TSU8gICgnVCcsIDMpCisjZGVmaW5lIFNORENUTF9UTVJfQ09OVElOVUUJCV9TSU8gICgnVCcsIDQpCisjZGVmaW5lIFNORENUTF9UTVJfVEVNUE8JCV9TSU9XUignVCcsIDUsIGludCkKKyNkZWZpbmUgU05EQ1RMX1RNUl9TT1VSQ0UJCV9TSU9XUignVCcsIDYsIGludCkKKyMJZGVmaW5lIFRNUl9JTlRFUk5BTAkJMHgwMDAwMDAwMQorIwlkZWZpbmUgVE1SX0VYVEVSTkFMCQkweDAwMDAwMDAyCisjCQlkZWZpbmUgVE1SX01PREVfTUlESQkweDAwMDAwMDEwCisjCQlkZWZpbmUgVE1SX01PREVfRlNLCTB4MDAwMDAwMjAKKyMJCWRlZmluZSBUTVJfTU9ERV9DTFMJMHgwMDAwMDA0MAorIwkJZGVmaW5lIFRNUl9NT0RFX1NNUFRFCTB4MDAwMDAwODAKKyNkZWZpbmUgU05EQ1RMX1RNUl9NRVRST05PTUUJCV9TSU9XICgnVCcsIDcsIGludCkKKyNkZWZpbmUgU05EQ1RMX1RNUl9TRUxFQ1QJCV9TSU9XICgnVCcsIDgsIGludCkKKworLyoKKyAqIFNvbWUgYmlnIGVuZGlhbi9saXR0bGUgZW5kaWFuIGhhbmRsaW5nIG1hY3JvcworICovCisKKyNpZiBkZWZpbmVkKF9BSVgpIHx8IGRlZmluZWQoQUlYKSB8fCBkZWZpbmVkKHNwYXJjKSB8fCBkZWZpbmVkKF9fc3BhcmNfXykgfHwgZGVmaW5lZChIUFBBKSB8fCBkZWZpbmVkKFBQQykgfHwgZGVmaW5lZChfX21jNjgwMDBfXykKKy8qIEJpZyBlbmRpYW4gbWFjaGluZXMgKi8KKyMgIGRlZmluZSBfUEFUQ0hLRVkoaWQpICgweGZkMDB8aWQpCisjICBkZWZpbmUgQUZNVF9TMTZfTkUgQUZNVF9TMTZfQkUKKyNlbHNlCisjICBkZWZpbmUgX1BBVENIS0VZKGlkKSAoKGlkPDw4KXwweGZkKQorIyAgZGVmaW5lIEFGTVRfUzE2X05FIEFGTVRfUzE2X0xFCisjZW5kaWYKKworLyoKKyAqCVNhbXBsZSBsb2FkaW5nIG1lY2hhbmlzbSBmb3IgaW50ZXJuYWwgc3ludGhlc2l6ZXJzICgvZGV2L3NlcXVlbmNlcikKKyAqCVRoZSBmb2xsb3dpbmcgcGF0Y2hfaW5mbyBzdHJ1Y3R1cmUgaGFzIGJlZW4gZGVzaWduZWQgdG8gc3VwcG9ydAorICoJR3JhdmlzIFVsdHJhU291bmQuIEl0IHRyaWVzIHRvIGJlIHVuaXZlcnNhbCBmb3JtYXQgZm9yIHVwbG9hZGluZworICoJc2FtcGxlIGJhc2VkIHBhdGNoZXMgYnV0IGlzIHByb2JhYmx5IHRvbyBsaW1pdGVkLgorICoKKyAqICAgICAgKFBCRCkgQXMgSGFubnUgZ3Vlc3NlZCwgdGhlIEdVUyBzdHJ1Y3R1cmUgaXMgdG9vIGxpbWl0ZWQgZm9yIAorICogICAgICB0aGUgV2F2ZUZyb250LCBidXQgdGhpcyBpcyB0aGUgcmlnaHQgcGxhY2UgZm9yIGEgY29uc3RhbnQgZGVmaW5pdGlvbi4KKyAqLworCitzdHJ1Y3QgcGF0Y2hfaW5mbyB7CisJCXVuc2lnbmVkIHNob3J0IGtleTsJCS8qIFVzZSBXQVZFX1BBVENIIGhlcmUgKi8KKyNkZWZpbmUgV0FWRV9QQVRDSAkgICBfUEFUQ0hLRVkoMHgwNCkKKyNkZWZpbmUgR1VTX1BBVENICSAgIFdBVkVfUEFUQ0gKKyNkZWZpbmUgV0FWRUZST05UX1BBVENIICAgIF9QQVRDSEtFWSgweDA2KQorCisJCXNob3J0IGRldmljZV9ubzsJLyogU3ludGhlc2l6ZXIgbnVtYmVyICovCisJCXNob3J0IGluc3RyX25vOwkJLyogTWlkaSBwZ20jICovCisKKwkJdW5zaWduZWQgaW50IG1vZGU7CisvKgorICogVGhlIGxlYXN0IHNpZ25pZmljYW50IGJ5dGUgaGFzIHRoZSBzYW1lIGZvcm1hdCB0aGFuIHRoZSBHVVMgLlBBVAorICogZmlsZXMKKyAqLworI2RlZmluZSBXQVZFXzE2X0JJVFMJMHgwMQkvKiBiaXQgMCA9IDggb3IgMTYgYml0IHdhdmUgZGF0YS4gKi8KKyNkZWZpbmUgV0FWRV9VTlNJR05FRAkweDAyCS8qIGJpdCAxID0gU2lnbmVkIC0gVW5zaWduZWQgZGF0YS4gKi8KKyNkZWZpbmUgV0FWRV9MT09QSU5HCTB4MDQJLyogYml0IDIgPSBsb29waW5nIGVuYWJsZWQtMS4gKi8KKyNkZWZpbmUgV0FWRV9CSURJUl9MT09QCTB4MDgJLyogYml0IDMgPSBTZXQgaXMgYmlkaXJlY3Rpb25hbCBsb29waW5nLiAqLworI2RlZmluZSBXQVZFX0xPT1BfQkFDSwkweDEwCS8qIGJpdCA0ID0gU2V0IGlzIGxvb3BpbmcgYmFja3dhcmQuICovCisjZGVmaW5lIFdBVkVfU1VTVEFJTl9PTgkweDIwCS8qIGJpdCA1ID0gVHVybiBzdXN0YWluaW5nIG9uLiAoRW52LiBwdHMuIDMpKi8KKyNkZWZpbmUgV0FWRV9FTlZFTE9QRVMJMHg0MAkvKiBiaXQgNiA9IEVuYWJsZSBlbnZlbG9wZXMgLSAxICovCisjZGVmaW5lIFdBVkVfRkFTVF9SRUxFQVNFIDB4ODAJLyogYml0IDcgPSBTaHV0IG9mZiBpbW1lZGlhdGVseSBhZnRlciBub3RlIG9mZiAqLworCQkJCS8qIAkodXNlIHRoZSBlbnZfcmF0ZS9lbnZfb2ZmcyBmaWVsZHMpLiAqLworLyogTGludXggc3BlY2lmaWMgYml0cyAqLworI2RlZmluZSBXQVZFX1ZJQlJBVE8JMHgwMDAxMDAwMAkvKiBUaGUgdmlicmF0byBpbmZvIGlzIHZhbGlkICovCisjZGVmaW5lIFdBVkVfVFJFTU9MTwkweDAwMDIwMDAwCS8qIFRoZSB0cmVtb2xvIGluZm8gaXMgdmFsaWQgKi8KKyNkZWZpbmUgV0FWRV9TQ0FMRQkweDAwMDQwMDAwCS8qIFRoZSBzY2FsaW5nIGluZm8gaXMgdmFsaWQgKi8KKyNkZWZpbmUgV0FWRV9GUkFDVElPTlMJMHgwMDA4MDAwMAkvKiBGcmFjdGlvbiBpbmZvcm1hdGlvbiBpcyB2YWxpZCAqLworLyogUmVzZXJ2ZWQgYml0cyAqLworI2RlZmluZSBXQVZFX1JPTQkweDQwMDAwMDAwCS8qIEZvciBmdXR1cmUgdXNlICovCisjZGVmaW5lIFdBVkVfTVVMQVcJMHgyMDAwMDAwMAkvKiBGb3IgZnV0dXJlIHVzZSAqLworLyogT3RoZXIgYml0cyBtdXN0IGJlIHplcm9lZCAqLworCisJCWludCBsZW47CS8qIFNpemUgb2YgdGhlIHdhdmUgZGF0YSBpbiBieXRlcyAqLworCQlpbnQgbG9vcF9zdGFydCwgbG9vcF9lbmQ7IC8qIEJ5dGUgb2Zmc2V0cyBmcm9tIHRoZSBiZWdpbm5pbmcgKi8KKworLyogCisgKiBUaGUgYmFzZV9mcmVxIGFuZCBiYXNlX25vdGUgZmllbGRzIGFyZSB1c2VkIHdoZW4gY29tcHV0aW5nIHRoZQorICogcGxheWJhY2sgc3BlZWQgZm9yIGEgbm90ZS4gVGhlIGJhc2Vfbm90ZSBkZWZpbmVzIHRoZSB0b25lIGZyZXF1ZW5jeQorICogd2hpY2ggaXMgaGVhcmQgaWYgdGhlIHNhbXBsZSBpcyBwbGF5ZWQgdXNpbmcgdGhlIGJhc2VfZnJlcSBhcyB0aGUKKyAqIHBsYXliYWNrIHNwZWVkLgorICoKKyAqIFRoZSBsb3dfbm90ZSBhbmQgaGlnaF9ub3RlIGZpZWxkcyBkZWZpbmUgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gbm90ZQorICogZnJlcXVlbmNpZXMgZm9yIHdoaWNoIHRoaXMgc2FtcGxlIGlzIHZhbGlkLiBJdCBpcyBwb3NzaWJsZSB0byBkZWZpbmUKKyAqIG1vcmUgdGhhbiBvbmUgc2FtcGxlcyBmb3IgYW4gaW5zdHJ1bWVudCBudW1iZXIgYXQgdGhlIHNhbWUgdGltZS4gVGhlCisgKiBsb3dfbm90ZSBhbmQgaGlnaF9ub3RlIGZpZWxkcyBhcmUgdXNlZCB0byBzZWxlY3QgdGhlIG1vc3Qgc3VpdGFibGUgb25lLgorICoKKyAqIFRoZSBmaWVsZHMgYmFzZV9ub3RlLCBoaWdoX25vdGUgYW5kIGxvd19ub3RlIHNob3VsZCBjb250YWluCisgKiB0aGUgbm90ZSBmcmVxdWVuY3kgbXVsdGlwbGllZCBieSAxMDAwLiBGb3IgZXhhbXBsZSB2YWx1ZSBmb3IgdGhlCisgKiBtaWRkbGUgQSBpcyA0NDAqMTAwMC4KKyAqLworCisJCXVuc2lnbmVkIGludCBiYXNlX2ZyZXE7CisJCXVuc2lnbmVkIGludCBiYXNlX25vdGU7CisJCXVuc2lnbmVkIGludCBoaWdoX25vdGU7CisJCXVuc2lnbmVkIGludCBsb3dfbm90ZTsKKwkJaW50IHBhbm5pbmc7CS8qIC0xMjg9bGVmdCwgMTI3PXJpZ2h0ICovCisJCWludCBkZXR1bmluZzsKKworLyoJTmV3IGZpZWxkcyBpbnRyb2R1Y2VkIGluIHZlcnNpb24gMS45OS41CSovCisKKyAgICAgICAvKiBFbnZlbG9wZS4gRW5hYmxlZCBieSBtb2RlIGJpdCBXQVZFX0VOVkVMT1BFUwkqLworCQl1bnNpZ25lZCBjaGFyCWVudl9yYXRlWyA2IF07CSAvKiBHVVMgSFcgcmFtcGluZyByYXRlICovCisJCXVuc2lnbmVkIGNoYXIJZW52X29mZnNldFsgNiBdOyAvKiAyNTUgPT0gMTAwJSAqLworCisJLyogCisJICogVGhlIHRyZW1vbG8sIHZpYnJhdG8gYW5kIHNjYWxlIGluZm8gYXJlIG5vdCBzdXBwb3J0ZWQgeWV0LgorCSAqIEVuYWJsZSBieSBzZXR0aW5nIHRoZSBtb2RlIGJpdHMgV0FWRV9UUkVNT0xPLCBXQVZFX1ZJQlJBVE8gb3IKKwkgKiBXQVZFX1NDQUxFCisJICovCisKKwkJdW5zaWduZWQgY2hhcgl0cmVtb2xvX3N3ZWVwOworCQl1bnNpZ25lZCBjaGFyCXRyZW1vbG9fcmF0ZTsKKwkJdW5zaWduZWQgY2hhcgl0cmVtb2xvX2RlcHRoOworCQorCQl1bnNpZ25lZCBjaGFyCXZpYnJhdG9fc3dlZXA7CisJCXVuc2lnbmVkIGNoYXIJdmlicmF0b19yYXRlOworCQl1bnNpZ25lZCBjaGFyCXZpYnJhdG9fZGVwdGg7CisKKwkJaW50CQlzY2FsZV9mcmVxdWVuY3k7CisJCXVuc2lnbmVkIGludAlzY2FsZV9mYWN0b3I7CQkvKiBmcm9tIDAgdG8gMjA0OCBvciAwIHRvIDIgKi8KKwkKKwkgICAgICAgIGludAkJdm9sdW1lOworCQlpbnQJCWZyYWN0aW9uczsKKwkJaW50CQlyZXNlcnZlZDE7CisJICAgICAgICBpbnQJCXNwYXJlWzJdOworCQljaGFyIGRhdGFbMV07CS8qIFRoZSB3YXZlZm9ybSBkYXRhIHN0YXJ0cyBoZXJlICovCisJfTsKKworc3RydWN0IHN5c2V4X2luZm8geworCQlzaG9ydCBrZXk7CQkvKiBVc2UgU1lTRVhfUEFUQ0ggb3IgTUFVSV9QQVRDSCBoZXJlICovCisjZGVmaW5lIFNZU0VYX1BBVENICV9QQVRDSEtFWSgweDA1KQorI2RlZmluZSBNQVVJX1BBVENICV9QQVRDSEtFWSgweDA2KQorCQlzaG9ydCBkZXZpY2Vfbm87CS8qIFN5bnRoZXNpemVyIG51bWJlciAqLworCQlpbnQgbGVuOwkvKiBTaXplIG9mIHRoZSBzeXNleCBkYXRhIGluIGJ5dGVzICovCisJCXVuc2lnbmVkIGNoYXIgZGF0YVsxXTsJLyogU3lzZXggZGF0YSBzdGFydHMgaGVyZSAqLworCX07CisKKy8qCisgKiAvZGV2L3NlcXVlbmNlciBpbnB1dCBldmVudHMuCisgKgorICogVGhlIGRhdGEgd3JpdHRlbiB0byB0aGUgL2Rldi9zZXF1ZW5jZXIgaXMgYSBzdHJlYW0gb2YgZXZlbnRzLiBFdmVudHMKKyAqIGFyZSByZWNvcmRzIG9mIDQgb3IgOCBieXRlcy4gVGhlIGZpcnN0IGJ5dGUgZGVmaW5lcyB0aGUgc2l6ZS4gCisgKiBBbnkgbnVtYmVyIG9mIGV2ZW50cyBjYW4gYmUgd3JpdHRlbiB3aXRoIGEgd3JpdGUgY2FsbC4gVGhlcmUKKyAqIGlzIGEgc2V0IG9mIG1hY3JvcyBmb3Igc2VuZGluZyB0aGVzZSBldmVudHMuIFVzZSB0aGVzZSBtYWNyb3MgaWYgeW91CisgKiB3YW50IHRvIG1heGltaXplIHBvcnRhYmlsaXR5IG9mIHlvdXIgcHJvZ3JhbS4KKyAqCisgKiBFdmVudHMgU0VRX1dBSVQsIFNFUV9NSURJUFVUQyBhbmQgU0VRX0VDSE8uIEFyZSBhbHNvIGlucHV0IGV2ZW50cy4KKyAqIChBbGwgaW5wdXQgZXZlbnRzIGFyZSBjdXJyZW50bHkgNCBieXRlcyBsb25nLiBCZSBwcmVwYXJlZCB0byBzdXBwb3J0CisgKiA4IGJ5dGUgZXZlbnRzIGFsc28uIElmIHlvdSByZWNlaXZlIGFueSBldmVudCBoYXZpbmcgZmlyc3QgYnl0ZSA+PSAxMjgsCisgKiBpdCdzIGEgOCBieXRlIGV2ZW50LgorICoKKyAqIFRoZSBldmVudHMgYXJlIGRvY3VtZW50ZWQgYXQgdGhlIGVuZCBvZiB0aGlzIGZpbGUuCisgKgorICogTm9ybWFsIGV2ZW50cyAoNCBieXRlcykKKyAqIFRoZXJlIGlzIGFsc28gYSA4IGJ5dGUgdmVyc2lvbiBvZiBtb3N0IG9mIHRoZSA0IGJ5dGUgZXZlbnRzLiBUaGUKKyAqIDggYnl0ZSBvbmUgaXMgcmVjb21tZW5kZWQuCisgKi8KKyNkZWZpbmUgU0VRX05PVEVPRkYJCTAKKyNkZWZpbmUgU0VRX0ZNTk9URU9GRgkJU0VRX05PVEVPRkYJLyogSnVzdCBvbGQgbmFtZSAqLworI2RlZmluZSBTRVFfTk9URU9OCQkxCisjZGVmaW5lCVNFUV9GTU5PVEVPTgkJU0VRX05PVEVPTgorI2RlZmluZSBTRVFfV0FJVAkJVE1SX1dBSVRfQUJTCisjZGVmaW5lIFNFUV9QR01DSEFOR0UJCTMKKyNkZWZpbmUgU0VRX0ZNUEdNQ0hBTkdFCQlTRVFfUEdNQ0hBTkdFCisjZGVmaW5lIFNFUV9TWU5DVElNRVIJCVRNUl9TVEFSVAorI2RlZmluZSBTRVFfTUlESVBVVEMJCTUKKyNkZWZpbmUgU0VRX0RSVU1PTgkJNgkvKioqIE9CU09MRVRFICoqKi8KKyNkZWZpbmUgU0VRX0RSVU1PRkYJCTcJLyoqKiBPQlNPTEVURSAqKiovCisjZGVmaW5lIFNFUV9FQ0hPCQlUTVJfRUNITwkvKiBGb3Igc3luY2hpbmcgcHJvZ3JhbXMgd2l0aCBvdXRwdXQgKi8KKyNkZWZpbmUgU0VRX0FGVEVSVE9VQ0gJCTkKKyNkZWZpbmUgU0VRX0NPTlRST0xMRVIJCTEwCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKglNaWRpIGNvbnRyb2xsZXIgbnVtYmVycworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvbnRyb2xsZXJzIDAgdG8gMzEgKDB4MDAgdG8gMHgxZikgYW5kCisgKiAzMiB0byA2MyAoMHgyMCB0byAweDNmKSBhcmUgY29udGludW91cworICogY29udHJvbGxlcnMuCisgKiBJbiB0aGUgTUlESSAxLjAgdGhlc2UgY29udHJvbGxlcnMgYXJlIHNlbnQgdXNpbmcKKyAqIHR3byBtZXNzYWdlcy4gQ29udHJvbGxlciBudW1iZXJzIDAgdG8gMzEgYXJlIHVzZWQKKyAqIHRvIHNlbmQgdGhlIE1TQiBhbmQgdGhlIGNvbnRyb2xsZXIgbnVtYmVycyAzMiB0byA2MworICogYXJlIGZvciB0aGUgTFNCLiBOb3RlIHRoYXQganVzdCA3IGJpdHMgYXJlIHVzZWQgaW4gTUlESSBieXRlcy4KKyAqLworCisjZGVmaW5lCSAgIENUTF9CQU5LX1NFTEVDVAkJMHgwMAorI2RlZmluZQkgICBDVExfTU9EV0hFRUwJCQkweDAxCisjZGVmaW5lICAgIENUTF9CUkVBVEgJCQkweDAyCisvKgkJdW5kZWZpbmVkCQkweDAzICovCisjZGVmaW5lICAgIENUTF9GT09UCQkJMHgwNAorI2RlZmluZSAgICBDVExfUE9SVEFNRU5UT19USU1FCQkweDA1CisjZGVmaW5lICAgIENUTF9EQVRBX0VOVFJZCQkweDA2CisjZGVmaW5lICAgIENUTF9NQUlOX1ZPTFVNRQkJMHgwNworI2RlZmluZSAgICBDVExfQkFMQU5DRQkJCTB4MDgKKy8qCQl1bmRlZmluZWQJCTB4MDkgKi8KKyNkZWZpbmUgICAgQ1RMX1BBTgkJCTB4MGEKKyNkZWZpbmUgICAgQ1RMX0VYUFJFU1NJT04JCTB4MGIKKy8qCQl1bmRlZmluZWQJCTB4MGMgKi8KKy8qCQl1bmRlZmluZWQJCTB4MGQgKi8KKy8qCQl1bmRlZmluZWQJCTB4MGUgKi8KKy8qCQl1bmRlZmluZWQJCTB4MGYgKi8KKyNkZWZpbmUgICAgQ1RMX0dFTkVSQUxfUFVSUE9TRTEJMHgxMAorI2RlZmluZSAgICBDVExfR0VORVJBTF9QVVJQT1NFMgkweDExCisjZGVmaW5lICAgIENUTF9HRU5FUkFMX1BVUlBPU0UzCTB4MTIKKyNkZWZpbmUgICAgQ1RMX0dFTkVSQUxfUFVSUE9TRTQJMHgxMworLyoJCXVuZGVmaW5lZAkJMHgxNCAtIDB4MWYgKi8KKworLyoJCXVuZGVmaW5lZAkJMHgyMCAqLworLyogVGhlIGNvbnRyb2xsZXIgbnVtYmVycyAweDIxIHRvIDB4M2YgYXJlIHJlc2VydmVkIGZvciB0aGUgKi8KKy8qIGxlYXN0IHNpZ25pZmljYW50IGJ5dGVzIG9mIHRoZSBjb250cm9sbGVycyAweDAwIHRvIDB4MWYuICovCisvKiBUaGVzZSBjb250cm9sbGVycyBhcmUgbm90IHJlY29nbmlzZWQgYnkgdGhlIGRyaXZlci4gKi8KKworLyogQ29udHJvbGxlcnMgNjQgdG8gNjkgKDB4NDAgdG8gMHg0NSkgYXJlIG9uL29mZiBzd2l0Y2hlcy4gKi8KKy8qIDA9T0ZGIGFuZCAxMjc9T04gKGludGVybWVkaWF0ZSB2YWx1ZXMgYXJlIHBvc3NpYmxlKSAqLworI2RlZmluZSAgICBDVExfREFNUEVSX1BFREFMCQkweDQwCisjZGVmaW5lICAgIENUTF9TVVNUQUlOCQkJMHg0MAkvKiBBbGlhcyAqLworI2RlZmluZSAgICBDVExfSE9MRAkJCTB4NDAJLyogQWxpYXMgKi8KKyNkZWZpbmUgICAgQ1RMX1BPUlRBTUVOVE8JCTB4NDEKKyNkZWZpbmUgICAgQ1RMX1NPU1RFTlVUTwkJMHg0MgorI2RlZmluZSAgICBDVExfU09GVF9QRURBTAkJMHg0MworLyoJCXVuZGVmaW5lZAkJMHg0NCAqLworI2RlZmluZSAgICBDVExfSE9MRDIJCQkweDQ1CisvKgkJdW5kZWZpbmVkCQkweDQ2IC0gMHg0ZiAqLworCisjZGVmaW5lICAgIENUTF9HRU5FUkFMX1BVUlBPU0U1CTB4NTAKKyNkZWZpbmUgICAgQ1RMX0dFTkVSQUxfUFVSUE9TRTYJMHg1MQorI2RlZmluZSAgICBDVExfR0VORVJBTF9QVVJQT1NFNwkweDUyCisjZGVmaW5lICAgIENUTF9HRU5FUkFMX1BVUlBPU0U4CTB4NTMKKy8qCQl1bmRlZmluZWQJCTB4NTQgLSAweDVhICovCisjZGVmaW5lICAgIENUTF9FWFRfRUZGX0RFUFRICQkweDViCisjZGVmaW5lICAgIENUTF9UUkVNT0xPX0RFUFRICQkweDVjCisjZGVmaW5lICAgIENUTF9DSE9SVVNfREVQVEgJCTB4NWQKKyNkZWZpbmUgICAgQ1RMX0RFVFVORV9ERVBUSAkJMHg1ZQorI2RlZmluZSAgICBDVExfQ0VMRVNURV9ERVBUSAkJMHg1ZQkvKiBBbGlhcyBmb3IgdGhlIGFib3ZlIG9uZSAqLworI2RlZmluZSAgICBDVExfUEhBU0VSX0RFUFRICQkweDVmCisjZGVmaW5lICAgIENUTF9EQVRBX0lOQ1JFTUVOVAkJMHg2MAorI2RlZmluZSAgICBDVExfREFUQV9ERUNSRU1FTlQJCTB4NjEKKyNkZWZpbmUgICAgQ1RMX05PTlJFR19QQVJNX05VTV9MU0IJMHg2MgorI2RlZmluZSAgICBDVExfTk9OUkVHX1BBUk1fTlVNX01TQgkweDYzCisjZGVmaW5lICAgIENUTF9SRUdJU1RfUEFSTV9OVU1fTFNCCTB4NjQKKyNkZWZpbmUgICAgQ1RMX1JFR0lTVF9QQVJNX05VTV9NU0IJMHg2NQorLyoJCXVuZGVmaW5lZAkJMHg2NiAtIDB4NzggKi8KKy8qCQlyZXNlcnZlZAkJMHg3OSAtIDB4N2YgKi8KKworLyogUHNldWRvIGNvbnRyb2xsZXJzIChub3QgbWlkaSBjb21wYXRpYmxlKSAqLworI2RlZmluZSAgICBDVFJMX1BJVENIX0JFTkRFUgkJMjU1CisjZGVmaW5lICAgIENUUkxfUElUQ0hfQkVOREVSX1JBTkdFCTI1NAorI2RlZmluZSAgICBDVFJMX0VYUFJFU1NJT04JCTI1MwkvKiBPYnNvbGV0ZSAqLworI2RlZmluZSAgICBDVFJMX01BSU5fVk9MVU1FCQkyNTIJLyogT2Jzb2xldGUgKi8KKyNkZWZpbmUgU0VRX0JBTEFOQ0UJCTExCisjZGVmaW5lIFNFUV9WT0xNT0RFICAgICAgICAgICAgIDEyCisKKy8qCisgKiBWb2x1bWUgbW9kZSBkZWNpZGVzIGhvdyB2b2x1bWVzIGFyZSB1c2VkCisgKi8KKworI2RlZmluZSBWT0xfTUVUSE9EX0FEQUdJTwkxCisjZGVmaW5lIFZPTF9NRVRIT0RfTElORUFSCTIKKworLyoKKyAqIE5vdGUhIFNFUV9XQUlULCBTRVFfTUlESVBVVEMgYW5kIFNFUV9FQ0hPIGFyZSB1c2VkIGFsc28gYXMKKyAqCSBpbnB1dCBldmVudHMuCisgKi8KKworLyoKKyAqIEV2ZW50IGNvZGVzIDB4ZjAgdG8gMHhmYyBhcmUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSBleHRlbnNpb25zLgorICovCisKKyNkZWZpbmUgU0VRX0ZVTExTSVpFCQkweGZkCS8qIExvbmcgZXZlbnRzICovCisvKgorICoJU0VRX0ZVTExTSVpFIGV2ZW50cyBhcmUgdXNlZCBmb3IgbG9hZGluZyBwYXRjaGVzL3NhbXBsZXMgdG8gdGhlCisgKglzeW50aGVzaXplciBkZXZpY2VzLiBUaGVzZSBldmVudHMgYXJlIHBhc3NlZCBkaXJlY3RseSB0byB0aGUgZHJpdmVyCisgKglvZiB0aGUgYXNzb2NpYXRlZCBzeW50aGVzaXplciBkZXZpY2UuIFRoZXJlIGlzIG5vIGxpbWl0IHRvIHRoZSBzaXplCisgKglvZiB0aGUgZXh0ZW5kZWQgZXZlbnRzLiBUaGVzZSBldmVudHMgYXJlIG5vdCBxdWV1ZWQgYnV0IGV4ZWN1dGVkCisgKglpbW1lZGlhdGVseSB3aGVuIHRoZSB3cml0ZSgpIGlzIGNhbGxlZCAoZXhlY3V0aW9uIGNhbiB0YWtlIHNldmVyYWwKKyAqCXNlY29uZHMgb2YgdGltZSkuIAorICoKKyAqCVdoZW4gYSBTRVFfRlVMTFNJWkUgbWVzc2FnZSBpcyB3cml0dGVuIHRvIHRoZSBkZXZpY2UsIGl0IG11c3QKKyAqCWJlIHdyaXR0ZW4gdXNpbmcgZXhhY3RseSBvbmUgd3JpdGUoKSBjYWxsLiBPdGhlciBldmVudHMgY2Fubm90CisgKgliZSBtaXhlZCB0byB0aGUgc2FtZSB3cml0ZS4KKyAqCQorICoJRm9yIEZNIHN5bnRocyAoWU0zODEyL09QTDMpIHVzZSBzdHJ1Y3Qgc2JpX2luc3RydW1lbnQgYW5kIHdyaXRlIGl0IHRvIHRoZSAKKyAqCS9kZXYvc2VxdWVuY2VyLiBEb24ndCB3cml0ZSBvdGhlciBkYXRhIHRvZ2V0aGVyIHdpdGggdGhlIGluc3RydW1lbnQgc3RydWN0dXJlCisgKglTZXQgdGhlIGtleSBmaWVsZCBvZiB0aGUgc3RydWN0dXJlIHRvIEZNX1BBVENILiBUaGUgZGV2aWNlIGZpZWxkIGlzIHVzZWQgdG8KKyAqCXJvdXRlIHRoZSBwYXRjaCB0byB0aGUgY29ycmVzcG9uZGluZyBkZXZpY2UuCisgKgorICoJRm9yIHdhdmUgdGFibGUgdXNlIHN0cnVjdCBwYXRjaF9pbmZvLiBJbml0aWFsaXplIHRoZSBrZXkgZmllbGQKKyAqICAgICAgdG8gV0FWRV9QQVRDSC4KKyAqLworI2RlZmluZSBTRVFfUFJJVkFURQkJMHhmZQkvKiBMb3cgbGV2ZWwgSFcgZGVwZW5kZW50IGV2ZW50cyAoOCBieXRlcykgKi8KKyNkZWZpbmUgU0VRX0VYVEVOREVECQkweGZmCS8qIEV4dGVuZGVkIGV2ZW50cyAoOCBieXRlcykgT0JTT0xFVEUgKi8KKworLyoKKyAqIFJlY29yZCBmb3IgRk0gcGF0Y2hlcworICovCisKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBzYmlfaW5zdHJfZGF0YVszMl07CisKK3N0cnVjdCBzYmlfaW5zdHJ1bWVudCB7CisJCXVuc2lnbmVkIHNob3J0CWtleTsJLyogRk1fUEFUQ0ggb3IgT1BMM19QQVRDSCAqLworI2RlZmluZSBGTV9QQVRDSAlfUEFUQ0hLRVkoMHgwMSkKKyNkZWZpbmUgT1BMM19QQVRDSAlfUEFUQ0hLRVkoMHgwMykKKwkJc2hvcnQJCWRldmljZTsJCS8qCVN5bnRoIyAoMC00KQkqLworCQlpbnQgCQljaGFubmVsOwkvKglQcm9ncmFtIyB0byBiZSBpbml0aWFsaXplZCAJKi8KKwkJc2JpX2luc3RyX2RhdGEJb3BlcmF0b3JzOwkvKglSZWdpc3RlciBzZXR0aW5ncyBmb3Igb3BlcmF0b3IgY2VsbHMgKC5TQkkgZm9ybWF0KQkqLworCX07CisKK3N0cnVjdCBzeW50aF9pbmZvIHsJLyogUmVhZCBvbmx5ICovCisJCWNoYXIJbmFtZVszMF07CisJCWludAlkZXZpY2U7CQkvKiAwLU4uIElOSVRJQUxJWkUgQkVGT1JFIENBTExJTkcgKi8KKwkJaW50CXN5bnRoX3R5cGU7CisjZGVmaW5lIFNZTlRIX1RZUEVfRk0JCQkwCisjZGVmaW5lIFNZTlRIX1RZUEVfU0FNUExFCQkxCisjZGVmaW5lIFNZTlRIX1RZUEVfTUlESQkJCTIJLyogTWlkaSBpbnRlcmZhY2UgKi8KKworCQlpbnQJc3ludGhfc3VidHlwZTsKKyNkZWZpbmUgRk1fVFlQRV9BRExJQgkJCTB4MDAKKyNkZWZpbmUgRk1fVFlQRV9PUEwzCQkJMHgwMQorI2RlZmluZSBNSURJX1RZUEVfTVBVNDAxCQkweDQwMQorCisjZGVmaW5lIFNBTVBMRV9UWVBFX0JBU0lDCQkweDEwCisjZGVmaW5lIFNBTVBMRV9UWVBFX0dVUwkJCVNBTVBMRV9UWVBFX0JBU0lDCisjZGVmaW5lIFNBTVBMRV9UWVBFX1dBVkVGUk9OVCAgICAgICAgICAgMHgxMQorCisJCWludAlwZXJjX21vZGU7CS8qIE5vIGxvbmdlciBzdXBwb3J0ZWQgKi8KKwkJaW50CW5yX3ZvaWNlczsKKwkJaW50CW5yX2RydW1zOwkvKiBPYnNvbGV0ZSBmaWVsZCAqLworCQlpbnQJaW5zdHJfYmFua19zaXplOworCQl1bnNpZ25lZCBpbnQJY2FwYWJpbGl0aWVzOwkKKyNkZWZpbmUgU1lOVEhfQ0FQX1BFUkNNT0RFCQkweDAwMDAwMDAxIC8qIE5vIGxvbmdlciB1c2VkICovCisjZGVmaW5lIFNZTlRIX0NBUF9PUEwzCQkJMHgwMDAwMDAwMiAvKiBTZXQgaWYgT1BMMyBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUgU1lOVEhfQ0FQX0lOUFVUCQkJMHgwMDAwMDAwNCAvKiBJbnB1dCAoTUlESSkgZGV2aWNlICovCisJCWludAlkdW1taWVzWzE5XTsJLyogUmVzZXJ2ZSBzcGFjZSAqLworCX07CisKK3N0cnVjdCBzb3VuZF90aW1lcl9pbmZvIHsKKwkJY2hhciBuYW1lWzMyXTsKKwkJaW50IGNhcHM7CisJfTsKKworI2RlZmluZSBNSURJX0NBUF9NUFU0MDEJCTEJCS8qIE1QVS00MDEgaW50ZWxsaWdlbnQgbW9kZSAqLworCitzdHJ1Y3QgbWlkaV9pbmZvIHsKKwkJY2hhcgkJbmFtZVszMF07CisJCWludAkJZGV2aWNlOwkJLyogMC1OLiBJTklUSUFMSVpFIEJFRk9SRSBDQUxMSU5HICovCisJCXVuc2lnbmVkIGludAljYXBhYmlsaXRpZXM7CS8qIFRvIGJlIGRlZmluZWQgbGF0ZXIgKi8KKwkJaW50CQlkZXZfdHlwZTsKKwkJaW50CQlkdW1taWVzWzE4XTsJLyogUmVzZXJ2ZSBzcGFjZSAqLworCX07CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogaW9jdGwgY29tbWFuZHMgZm9yIHRoZSAvZGV2L21pZGkjIworICovCit0eXBlZGVmIHN0cnVjdCB7CisJCXVuc2lnbmVkIGNoYXIgY21kOworCQljaGFyIG5yX2FyZ3MsIG5yX3JldHVybnM7CisJCXVuc2lnbmVkIGNoYXIgZGF0YVszMF07CisJfSBtcHVfY29tbWFuZF9yZWM7CisKKyNkZWZpbmUgU05EQ1RMX01JRElfUFJFVElNRQkJX1NJT1dSKCdtJywgMCwgaW50KQorI2RlZmluZSBTTkRDVExfTUlESV9NUFVNT0RFCQlfU0lPV1IoJ20nLCAxLCBpbnQpCisjZGVmaW5lIFNORENUTF9NSURJX01QVUNNRAkJX1NJT1dSKCdtJywgMiwgbXB1X2NvbW1hbmRfcmVjKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIElPQ1RMIGNvbW1hbmRzIGZvciAvZGV2L2RzcCBhbmQgL2Rldi9hdWRpbworICovCisKKyNkZWZpbmUgU05EQ1RMX0RTUF9SRVNFVAkJX1NJTyAgKCdQJywgMCkKKyNkZWZpbmUgU05EQ1RMX0RTUF9TWU5DCQkJX1NJTyAgKCdQJywgMSkKKyNkZWZpbmUgU05EQ1RMX0RTUF9TUEVFRAkJX1NJT1dSKCdQJywgMiwgaW50KQorI2RlZmluZSBTTkRDVExfRFNQX1NURVJFTwkJX1NJT1dSKCdQJywgMywgaW50KQorI2RlZmluZSBTTkRDVExfRFNQX0dFVEJMS1NJWkUJCV9TSU9XUignUCcsIDQsIGludCkKKyNkZWZpbmUgU05EQ1RMX0RTUF9TQU1QTEVTSVpFCQlTTkRDVExfRFNQX1NFVEZNVAorI2RlZmluZSBTTkRDVExfRFNQX0NIQU5ORUxTCQlfU0lPV1IoJ1AnLCA2LCBpbnQpCisjZGVmaW5lIFNPVU5EX1BDTV9XUklURV9DSEFOTkVMUwlTTkRDVExfRFNQX0NIQU5ORUxTCisjZGVmaW5lIFNPVU5EX1BDTV9XUklURV9GSUxURVIJCV9TSU9XUignUCcsIDcsIGludCkKKyNkZWZpbmUgU05EQ1RMX0RTUF9QT1NUCQkJX1NJTyAgKCdQJywgOCkKKyNkZWZpbmUgU05EQ1RMX0RTUF9TVUJESVZJREUJCV9TSU9XUignUCcsIDksIGludCkKKyNkZWZpbmUgU05EQ1RMX0RTUF9TRVRGUkFHTUVOVAkJX1NJT1dSKCdQJywxMCwgaW50KQorCisvKglBdWRpbyBkYXRhIGZvcm1hdHMgKE5vdGUhIFU4PTggYW5kIFMxNl9MRT0xNiBmb3IgY29tcGF0aWJpbGl0eSkgKi8KKyNkZWZpbmUgU05EQ1RMX0RTUF9HRVRGTVRTCQlfU0lPUiAoJ1AnLDExLCBpbnQpIC8qIFJldHVybnMgYSBtYXNrICovCisjZGVmaW5lIFNORENUTF9EU1BfU0VURk1UCQlfU0lPV1IoJ1AnLDUsIGludCkgLyogU2VsZWN0cyBPTkUgZm10Ki8KKyMJZGVmaW5lIEFGTVRfUVVFUlkJCTB4MDAwMDAwMDAJLyogUmV0dXJuIGN1cnJlbnQgZm10ICovCisjCWRlZmluZSBBRk1UX01VX0xBVwkJMHgwMDAwMDAwMQorIwlkZWZpbmUgQUZNVF9BX0xBVwkJMHgwMDAwMDAwMgorIwlkZWZpbmUgQUZNVF9JTUFfQURQQ00JCTB4MDAwMDAwMDQKKyMJZGVmaW5lIEFGTVRfVTgJCQkweDAwMDAwMDA4CisjCWRlZmluZSBBRk1UX1MxNl9MRQkJMHgwMDAwMDAxMAkvKiBMaXR0bGUgZW5kaWFuIHNpZ25lZCAxNiovCisjCWRlZmluZSBBRk1UX1MxNl9CRQkJMHgwMDAwMDAyMAkvKiBCaWcgZW5kaWFuIHNpZ25lZCAxNiAqLworIwlkZWZpbmUgQUZNVF9TOAkJCTB4MDAwMDAwNDAKKyMJZGVmaW5lIEFGTVRfVTE2X0xFCQkweDAwMDAwMDgwCS8qIExpdHRsZSBlbmRpYW4gVTE2ICovCisjCWRlZmluZSBBRk1UX1UxNl9CRQkJMHgwMDAwMDEwMAkvKiBCaWcgZW5kaWFuIFUxNiAqLworIwlkZWZpbmUgQUZNVF9NUEVHCQkweDAwMDAwMjAwCS8qIE1QRUcgKDIpIGF1ZGlvICovCisjCWRlZmluZSBBRk1UX0FDMwkJMHgwMDAwMDQwMAkvKiBEb2xieSBEaWdpdGFsIEFDMyAqLworCisvKgorICogQnVmZmVyIHN0YXR1cyBxdWVyaWVzLgorICovCit0eXBlZGVmIHN0cnVjdCBhdWRpb19idWZfaW5mbyB7CisJCQlpbnQgZnJhZ21lbnRzOwkvKiAjIG9mIGF2YWlsYWJsZSBmcmFnbWVudHMgKHBhcnRpYWxseSB1c2VuZCBvbmVzIG5vdCBjb3VudGVkKSAqLworCQkJaW50IGZyYWdzdG90YWw7CS8qIFRvdGFsICMgb2YgZnJhZ21lbnRzIGFsbG9jYXRlZCAqLworCQkJaW50IGZyYWdzaXplOwkvKiBTaXplIG9mIGEgZnJhZ21lbnQgaW4gYnl0ZXMgKi8KKworCQkJaW50IGJ5dGVzOwkvKiBBdmFpbGFibGUgc3BhY2UgaW4gYnl0ZXMgKGluY2x1ZGVzIHBhcnRpYWxseSB1c2VkIGZyYWdtZW50cykgKi8KKwkJCS8qIE5vdGUhICdieXRlcycgY291bGQgYmUgbW9yZSB0aGFuIGZyYWdtZW50cypmcmFnc2l6ZSAqLworCQl9IGF1ZGlvX2J1Zl9pbmZvOworCisjZGVmaW5lIFNORENUTF9EU1BfR0VUT1NQQUNFCQlfU0lPUiAoJ1AnLDEyLCBhdWRpb19idWZfaW5mbykKKyNkZWZpbmUgU05EQ1RMX0RTUF9HRVRJU1BBQ0UJCV9TSU9SICgnUCcsMTMsIGF1ZGlvX2J1Zl9pbmZvKQorI2RlZmluZSBTTkRDVExfRFNQX05PTkJMT0NLCQlfU0lPICAoJ1AnLDE0KQorI2RlZmluZSBTTkRDVExfRFNQX0dFVENBUFMJCV9TSU9SICgnUCcsMTUsIGludCkKKyMJZGVmaW5lIERTUF9DQVBfUkVWSVNJT04JCTB4MDAwMDAwZmYJLyogQml0cyBmb3IgcmV2aXNpb24gbGV2ZWwgKDAgdG8gMjU1KSAqLworIwlkZWZpbmUgRFNQX0NBUF9EVVBMRVgJCTB4MDAwMDAxMDAJLyogRnVsbCBkdXBsZXggcmVjb3JkL3BsYXliYWNrICovCisjCWRlZmluZSBEU1BfQ0FQX1JFQUxUSU1FCQkweDAwMDAwMjAwCS8qIFJlYWwgdGltZSBjYXBhYmlsaXR5ICovCisjCWRlZmluZSBEU1BfQ0FQX0JBVENICQkweDAwMDAwNDAwCS8qIERldmljZSBoYXMgc29tZSBraW5kIG9mICovCisJCQkJCQkJLyogaW50ZXJuYWwgYnVmZmVycyB3aGljaCBtYXkgKi8KKwkJCQkJCQkvKiBjYXVzZSBzb21lIGRlbGF5cyBhbmQgKi8KKwkJCQkJCQkvKiBkZWNyZWFzZSBwcmVjaXNpb24gb2YgdGltaW5nICovCisjCWRlZmluZSBEU1BfQ0FQX0NPUFJPQwkJMHgwMDAwMDgwMAkvKiBIYXMgYSBjb3Byb2Nlc3NvciAqLworCQkJCQkJCS8qIFNvbWV0aW1lcyBpdCdzIGEgRFNQICovCisJCQkJCQkJLyogYnV0IHVzdWFsbHkgbm90ICovCisjCWRlZmluZSBEU1BfQ0FQX1RSSUdHRVIJCTB4MDAwMDEwMDAJLyogU3VwcG9ydHMgU0VUVFJJR0dFUiAqLworIwlkZWZpbmUgRFNQX0NBUF9NTUFQCQkweDAwMDAyMDAwCS8qIFN1cHBvcnRzIG1tYXAoKSAqLworIwlkZWZpbmUgRFNQX0NBUF9NVUxUSQkJMHgwMDAwNDAwMAkvKiBzdXBwb3J0IG11bHRpcGxlIG9wZW4gKi8KKyMJZGVmaW5lIERTUF9DQVBfQklORAkJMHgwMDAwODAwMAkvKiBjaGFubmVsIGJpbmRpbmcgdG8gZnJvbnQvcmVhci9jbmV0ZXIvbGZlICovCisKKworI2RlZmluZSBTTkRDVExfRFNQX0dFVFRSSUdHRVIJCV9TSU9SICgnUCcsMTYsIGludCkKKyNkZWZpbmUgU05EQ1RMX0RTUF9TRVRUUklHR0VSCQlfU0lPVyAoJ1AnLDE2LCBpbnQpCisjCWRlZmluZSBQQ01fRU5BQkxFX0lOUFVUCQkweDAwMDAwMDAxCisjCWRlZmluZSBQQ01fRU5BQkxFX09VVFBVVAkJMHgwMDAwMDAwMgorCit0eXBlZGVmIHN0cnVjdCBjb3VudF9pbmZvIHsKKwkJaW50IGJ5dGVzOwkvKiBUb3RhbCAjIG9mIGJ5dGVzIHByb2Nlc3NlZCAqLworCQlpbnQgYmxvY2tzOwkvKiAjIG9mIGZyYWdtZW50IHRyYW5zaXRpb25zIHNpbmNlIGxhc3QgdGltZSAqLworCQlpbnQgcHRyOwkvKiBDdXJyZW50IERNQSBwb2ludGVyIHZhbHVlICovCisJfSBjb3VudF9pbmZvOworCisjZGVmaW5lIFNORENUTF9EU1BfR0VUSVBUUgkJX1NJT1IgKCdQJywxNywgY291bnRfaW5mbykKKyNkZWZpbmUgU05EQ1RMX0RTUF9HRVRPUFRSCQlfU0lPUiAoJ1AnLDE4LCBjb3VudF9pbmZvKQorCit0eXBlZGVmIHN0cnVjdCBidWZmbWVtX2Rlc2MgeworCQl1bnNpZ25lZCAqYnVmZmVyOworCQlpbnQgc2l6ZTsKKwl9IGJ1ZmZtZW1fZGVzYzsKKyNkZWZpbmUgU05EQ1RMX0RTUF9NQVBJTkJVRgkJX1NJT1IgKCdQJywgMTksIGJ1ZmZtZW1fZGVzYykKKyNkZWZpbmUgU05EQ1RMX0RTUF9NQVBPVVRCVUYJCV9TSU9SICgnUCcsIDIwLCBidWZmbWVtX2Rlc2MpCisjZGVmaW5lIFNORENUTF9EU1BfU0VUU1lOQ1JPCQlfU0lPICAoJ1AnLCAyMSkKKyNkZWZpbmUgU05EQ1RMX0RTUF9TRVREVVBMRVgJCV9TSU8gICgnUCcsIDIyKQorI2RlZmluZSBTTkRDVExfRFNQX0dFVE9ERUxBWQkJX1NJT1IgKCdQJywgMjMsIGludCkKKworI2RlZmluZSBTTkRDVExfRFNQX0dFVENIQU5ORUxNQVNLCQlfU0lPV1IoJ1AnLCA2NCwgaW50KQorI2RlZmluZSBTTkRDVExfRFNQX0JJTkRfQ0hBTk5FTAkJX1NJT1dSKCdQJywgNjUsIGludCkKKyMJZGVmaW5lIERTUF9CSU5EX1FVRVJZCQkweDAwMDAwMDAwCisjCWRlZmluZSBEU1BfQklORF9GUk9OVAkJMHgwMDAwMDAwMQorIwlkZWZpbmUgRFNQX0JJTkRfU1VSUgkJMHgwMDAwMDAwMgorIwlkZWZpbmUgRFNQX0JJTkRfQ0VOVEVSX0xGRQkweDAwMDAwMDA0CisjCWRlZmluZSBEU1BfQklORF9IQU5EU0VUCQkweDAwMDAwMDA4CisjCWRlZmluZSBEU1BfQklORF9NSUMJCTB4MDAwMDAwMTAKKyMJZGVmaW5lIERTUF9CSU5EX01PREVNMQkJMHgwMDAwMDAyMAorIwlkZWZpbmUgRFNQX0JJTkRfTU9ERU0yCQkweDAwMDAwMDQwCisjCWRlZmluZSBEU1BfQklORF9JMlMJCTB4MDAwMDAwODAKKyMJZGVmaW5lIERTUF9CSU5EX1NQRElGCQkweDAwMDAwMTAwCisKKyNkZWZpbmUgU05EQ1RMX0RTUF9TRVRTUERJRgkJX1NJT1cgKCdQJywgNjYsIGludCkKKyNkZWZpbmUgU05EQ1RMX0RTUF9HRVRTUERJRgkJX1NJT1IgKCdQJywgNjcsIGludCkKKyMJZGVmaW5lIFNQRElGX1BSTwkweDAwMDEKKyMJZGVmaW5lIFNQRElGX05fQVVECTB4MDAwMgorIwlkZWZpbmUgU1BESUZfQ09QWQkweDAwMDQKKyMJZGVmaW5lIFNQRElGX1BSRQkweDAwMDgKKyMJZGVmaW5lIFNQRElGX0NDCQkweDA3ZjAKKyMJZGVmaW5lIFNQRElGX0wJCTB4MDgwMAorIwlkZWZpbmUgU1BESUZfRFJTCTB4NDAwMAorIwlkZWZpbmUgU1BESUZfVgkJMHg4MDAwCisKKy8qCisgKiBBcHBsaWNhdGlvbidzIHByb2ZpbGUgZGVmaW5lcyB0aGUgd2F5IGhvdyBwbGF5YmFjayB1bmRlcnJ1biBzaXR1YXRpb25zIHNob3VsZCBiZSBoYW5kbGVkLgorICogCisgKglBUEZfTk9STUFMICh0aGUgZGVmYXVsdCkgYW5kIEFQRl9ORVRXT1JLIG1ha2UgdGhlIGRyaXZlciB0byBjbGVhbnVwIHRoZQorICoJcGxheWJhY2sgYnVmZmVyIHdoZW5ldmVyIGFuIHVuZGVycnVuIG9jY3Vycy4gVGhpcyBjb25zdW1lcyBzb21lIHRpbWUKKyAqCXByZXZlbnRzIGxvb3BpbmcgdGhlIGV4aXN0aW5nIGJ1ZmZlci4KKyAqCUFQRl9DUFVJTlRFTlMgaXMgaW50ZW5kZWQgdG8gYmUgc2V0IGJ5IENQVSBpbnRlbnNpdmUgYXBwbGljYXRpb25zIHdoaWNoCisgKglhcmUgbGlrZWx5IHRvIHJ1biBvdXQgb2YgdGltZSBvY2Nhc2lvbmFsbHkuIEluIHRoaXMgbW9kZSB0aGUgYnVmZmVyIGNsZWFudXAgaXMKKyAqCWRpc2FibGVkIHdoaWNoIHNhdmVzIENQVSB0aW1lIGJ1dCBhbHNvIGxldCdzIHRoZSBwcmV2aW91cyBidWZmZXIgY29udGVudCB0bworICoJYmUgcGxheWVkIGR1cmluZyB0aGUgInBhdXNlIiBhZnRlciB0aGUgdW5kZXJydW4uCisgKi8KKyNkZWZpbmUgU05EQ1RMX0RTUF9QUk9GSUxFCQlfU0lPVyAoJ1AnLCAyMywgaW50KQorI2RlZmluZQkgIEFQRl9OT1JNQUwJMAkvKiBOb3JtYWwgYXBwbGljYXRpb25zICovCisjZGVmaW5lCSAgQVBGX05FVFdPUksJMQkvKiBVbmRlcnJ1bnMgcHJvYmFibHkgY2F1c2VkIGJ5IGFuICJleHRlcm5hbCIgZGVsYXkgKi8KKyNkZWZpbmUgICBBUEZfQ1BVSU5URU5TIDIJLyogVW5kZXJydW5zIHByb2JhYmx5IGNhdXNlZCBieSAib3ZlcmhlYXRpbmciIHRoZSBDUFUgKi8KKworI2RlZmluZSBTT1VORF9QQ01fUkVBRF9SQVRFCQlfU0lPUiAoJ1AnLCAyLCBpbnQpCisjZGVmaW5lIFNPVU5EX1BDTV9SRUFEX0NIQU5ORUxTCQlfU0lPUiAoJ1AnLCA2LCBpbnQpCisjZGVmaW5lIFNPVU5EX1BDTV9SRUFEX0JJVFMJCV9TSU9SICgnUCcsIDUsIGludCkKKyNkZWZpbmUgU09VTkRfUENNX1JFQURfRklMVEVSCQlfU0lPUiAoJ1AnLCA3LCBpbnQpCisKKy8qIFNvbWUgYWxpYXMgbmFtZXMgKi8KKyNkZWZpbmUgU09VTkRfUENNX1dSSVRFX0JJVFMJCVNORENUTF9EU1BfU0VURk1UCisjZGVmaW5lIFNPVU5EX1BDTV9XUklURV9SQVRFCQlTTkRDVExfRFNQX1NQRUVECisjZGVmaW5lIFNPVU5EX1BDTV9QT1NUCQkJU05EQ1RMX0RTUF9QT1NUCisjZGVmaW5lIFNPVU5EX1BDTV9SRVNFVAkJCVNORENUTF9EU1BfUkVTRVQKKyNkZWZpbmUgU09VTkRfUENNX1NZTkMJCQlTTkRDVExfRFNQX1NZTkMKKyNkZWZpbmUgU09VTkRfUENNX1NVQkRJVklERQkJU05EQ1RMX0RTUF9TVUJESVZJREUKKyNkZWZpbmUgU09VTkRfUENNX1NFVEZSQUdNRU5UCQlTTkRDVExfRFNQX1NFVEZSQUdNRU5UCisjZGVmaW5lIFNPVU5EX1BDTV9HRVRGTVRTCQlTTkRDVExfRFNQX0dFVEZNVFMKKyNkZWZpbmUgU09VTkRfUENNX1NFVEZNVAkJU05EQ1RMX0RTUF9TRVRGTVQKKyNkZWZpbmUgU09VTkRfUENNX0dFVE9TUEFDRQkJU05EQ1RMX0RTUF9HRVRPU1BBQ0UKKyNkZWZpbmUgU09VTkRfUENNX0dFVElTUEFDRQkJU05EQ1RMX0RTUF9HRVRJU1BBQ0UKKyNkZWZpbmUgU09VTkRfUENNX05PTkJMT0NLCQlTTkRDVExfRFNQX05PTkJMT0NLCisjZGVmaW5lIFNPVU5EX1BDTV9HRVRDQVBTCQlTTkRDVExfRFNQX0dFVENBUFMKKyNkZWZpbmUgU09VTkRfUENNX0dFVFRSSUdHRVIJCVNORENUTF9EU1BfR0VUVFJJR0dFUgorI2RlZmluZSBTT1VORF9QQ01fU0VUVFJJR0dFUgkJU05EQ1RMX0RTUF9TRVRUUklHR0VSCisjZGVmaW5lIFNPVU5EX1BDTV9TRVRTWU5DUk8JCVNORENUTF9EU1BfU0VUU1lOQ1JPCisjZGVmaW5lIFNPVU5EX1BDTV9HRVRJUFRSCQlTTkRDVExfRFNQX0dFVElQVFIKKyNkZWZpbmUgU09VTkRfUENNX0dFVE9QVFIJCVNORENUTF9EU1BfR0VUT1BUUgorI2RlZmluZSBTT1VORF9QQ01fTUFQSU5CVUYJCVNORENUTF9EU1BfTUFQSU5CVUYKKyNkZWZpbmUgU09VTkRfUENNX01BUE9VVEJVRgkJU05EQ1RMX0RTUF9NQVBPVVRCVUYKKworLyoKKyAqIGlvY3RsIGNhbGxzIHRvIGJlIHVzZWQgaW4gY29tbXVuaWNhdGlvbiB3aXRoIGNvcHJvY2Vzc29ycyBhbmQKKyAqIERTUCBjaGlwcy4KKyAqLworCit0eXBlZGVmIHN0cnVjdCBjb3ByX2J1ZmZlciB7CisJCWludCBjb21tYW5kOwkvKiBTZXQgdG8gMCBpZiBub3QgdXNlZCAqLworCQlpbnQgZmxhZ3M7CisjZGVmaW5lIENQRl9OT05FCQkweDAwMDAKKyNkZWZpbmUgQ1BGX0ZJUlNUCQkweDAwMDEJLyogRmlyc3QgYmxvY2sgKi8KKyNkZWZpbmUgQ1BGX0xBU1QJCTB4MDAwMgkvKiBMYXN0IGJsb2NrICovCisJCWludCBsZW47CisJCWludCBvZmZzOwkvKiBJZiByZXF1aXJlZCBieSB0aGUgZGV2aWNlICgwIGlmIG5vdCB1c2VkKSAqLworCisJCXVuc2lnbmVkIGNoYXIgZGF0YVs0MDAwXTsgLyogTk9URSEgNDAwMCBpcyBub3QgNGsgKi8KKwl9IGNvcHJfYnVmZmVyOworCit0eXBlZGVmIHN0cnVjdCBjb3ByX2RlYnVnX2J1ZiB7CisJCWludCBjb21tYW5kOwkvKiBVc2VkIGludGVybmFsbHkuIFNldCB0byAwICovCisJCWludCBwYXJtMTsKKwkJaW50IHBhcm0yOworCQlpbnQgZmxhZ3M7CQorCQlpbnQgbGVuOwkvKiBMZW5ndGggb2YgZGF0YSBpbiBieXRlcyAqLworCX0gY29wcl9kZWJ1Z19idWY7CisKK3R5cGVkZWYgc3RydWN0IGNvcHJfbXNnIHsKKwkJaW50IGxlbjsKKwkJdW5zaWduZWQgY2hhciBkYXRhWzQwMDBdOworCX0gY29wcl9tc2c7CisKKyNkZWZpbmUgU05EQ1RMX0NPUFJfUkVTRVQgICAgICAgICAgICAgX1NJTyAgKCdDJywgIDApCisjZGVmaW5lIFNORENUTF9DT1BSX0xPQUQJICAgICAgX1NJT1dSKCdDJywgIDEsIGNvcHJfYnVmZmVyKQorI2RlZmluZSBTTkRDVExfQ09QUl9SREFUQQkgICAgICBfU0lPV1IoJ0MnLCAgMiwgY29wcl9kZWJ1Z19idWYpCisjZGVmaW5lIFNORENUTF9DT1BSX1JDT0RFCSAgICAgIF9TSU9XUignQycsICAzLCBjb3ByX2RlYnVnX2J1ZikKKyNkZWZpbmUgU05EQ1RMX0NPUFJfV0RBVEEJICAgICAgX1NJT1cgKCdDJywgIDQsIGNvcHJfZGVidWdfYnVmKQorI2RlZmluZSBTTkRDVExfQ09QUl9XQ09ERQkgICAgICBfU0lPVyAoJ0MnLCAgNSwgY29wcl9kZWJ1Z19idWYpCisjZGVmaW5lIFNORENUTF9DT1BSX1JVTgkJICAgICAgX1NJT1dSKCdDJywgIDYsIGNvcHJfZGVidWdfYnVmKQorI2RlZmluZSBTTkRDVExfQ09QUl9IQUxUCSAgICAgIF9TSU9XUignQycsICA3LCBjb3ByX2RlYnVnX2J1ZikKKyNkZWZpbmUgU05EQ1RMX0NPUFJfU0VORE1TRwkgICAgICBfU0lPV1IoJ0MnLCAgOCwgY29wcl9tc2cpCisjZGVmaW5lIFNORENUTF9DT1BSX1JDVk1TRwkgICAgICBfU0lPUiAoJ0MnLCAgOSwgY29wcl9tc2cpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIElPQ1RMIGNvbW1hbmRzIGZvciAvZGV2L21peGVyCisgKi8KKwkKKy8qIAorICogTWl4ZXIgZGV2aWNlcworICoKKyAqIFRoZXJlIGNhbiBiZSB1cCB0byAyMCBkaWZmZXJlbnQgYW5hbG9nIG1peGVyIGNoYW5uZWxzLiBUaGUKKyAqIFNPVU5EX01JWEVSX05SREVWSUNFUyBnaXZlcyB0aGUgY3VycmVudGx5IHN1cHBvcnRlZCBtYXhpbXVtLiAKKyAqIFRoZSBTT1VORF9NSVhFUl9SRUFEX0RFVk1BU0sgcmV0dXJucyBhIGJpdG1hc2sgd2hpY2ggdGVsbHMKKyAqIHRoZSBkZXZpY2VzIHN1cHBvcnRlZCBieSB0aGUgcGFydGljdWxhciBtaXhlci4KKyAqLworCisjZGVmaW5lIFNPVU5EX01JWEVSX05SREVWSUNFUwkyNQorI2RlZmluZSBTT1VORF9NSVhFUl9WT0xVTUUJMAorI2RlZmluZSBTT1VORF9NSVhFUl9CQVNTCTEKKyNkZWZpbmUgU09VTkRfTUlYRVJfVFJFQkxFCTIKKyNkZWZpbmUgU09VTkRfTUlYRVJfU1lOVEgJMworI2RlZmluZSBTT1VORF9NSVhFUl9QQ00JCTQKKyNkZWZpbmUgU09VTkRfTUlYRVJfU1BFQUtFUgk1CisjZGVmaW5lIFNPVU5EX01JWEVSX0xJTkUJNgorI2RlZmluZSBTT1VORF9NSVhFUl9NSUMJCTcKKyNkZWZpbmUgU09VTkRfTUlYRVJfQ0QJCTgKKyNkZWZpbmUgU09VTkRfTUlYRVJfSU1JWAk5CS8qICBSZWNvcmRpbmcgbW9uaXRvciAgKi8KKyNkZWZpbmUgU09VTkRfTUlYRVJfQUxUUENNCTEwCisjZGVmaW5lIFNPVU5EX01JWEVSX1JFQ0xFVgkxMQkvKiBSZWNvcmRpbmcgbGV2ZWwgKi8KKyNkZWZpbmUgU09VTkRfTUlYRVJfSUdBSU4JMTIJLyogSW5wdXQgZ2FpbiAqLworI2RlZmluZSBTT1VORF9NSVhFUl9PR0FJTgkxMwkvKiBPdXRwdXQgZ2FpbiAqLworLyogCisgKiBUaGUgQUQxODQ4IGNvZGVjIGFuZCBjb21wYXRpYmxlcyBoYXZlIHRocmVlIGxpbmUgbGV2ZWwgaW5wdXRzCisgKiAobGluZSwgYXV4MSBhbmQgYXV4MikuIFNpbmNlIGVhY2ggY2FyZCBtYW51ZmFjdHVyZXIgaGF2ZSBhc3NpZ25lZAorICogZGlmZmVyZW50IG1lYW5pbmdzIHRvIHRoZXNlIGlucHV0cywgaXQncyBpbnByYWN0aWNhbCB0byBhc3NpZ24KKyAqIHNwZWNpZmljIG1lYW5pbmdzIChsaW5lLCBjZCwgc3ludGggZXRjLikgdG8gdGhlbS4KKyAqLworI2RlZmluZSBTT1VORF9NSVhFUl9MSU5FMQkxNAkvKiBJbnB1dCBzb3VyY2UgMSAgKGF1eDEpICovCisjZGVmaW5lIFNPVU5EX01JWEVSX0xJTkUyCTE1CS8qIElucHV0IHNvdXJjZSAyICAoYXV4MikgKi8KKyNkZWZpbmUgU09VTkRfTUlYRVJfTElORTMJMTYJLyogSW5wdXQgc291cmNlIDMgIChsaW5lKSAqLworI2RlZmluZSBTT1VORF9NSVhFUl9ESUdJVEFMMQkxNwkvKiBEaWdpdGFsIChpbnB1dCkgMSAqLworI2RlZmluZSBTT1VORF9NSVhFUl9ESUdJVEFMMgkxOAkvKiBEaWdpdGFsIChpbnB1dCkgMiAqLworI2RlZmluZSBTT1VORF9NSVhFUl9ESUdJVEFMMwkxOQkvKiBEaWdpdGFsIChpbnB1dCkgMyAqLworI2RlZmluZSBTT1VORF9NSVhFUl9QSE9ORUlOCTIwCS8qIFBob25lIGlucHV0ICovCisjZGVmaW5lIFNPVU5EX01JWEVSX1BIT05FT1VUCTIxCS8qIFBob25lIG91dHB1dCAqLworI2RlZmluZSBTT1VORF9NSVhFUl9WSURFTwkyMgkvKiBWaWRlby9UViAoYXVkaW8pIGluICovCisjZGVmaW5lIFNPVU5EX01JWEVSX1JBRElPCTIzCS8qIFJhZGlvIGluICovCisjZGVmaW5lIFNPVU5EX01JWEVSX01PTklUT1IJMjQJLyogTW9uaXRvciAodXN1YWxseSBtaWMpIHZvbHVtZSAqLworCisvKiBTb21lIG9uL29mZiBzZXR0aW5ncyAoU09VTkRfU1BFQ0lBTF9NSU4gLSBTT1VORF9TUEVDSUFMX01BWCkgKi8KKy8qIE5vdCBjb3VudGVkIHRvIFNPVU5EX01JWEVSX05SREVWSUNFUywgYnV0IHVzZSB0aGUgc2FtZSBudW1iZXIgc3BhY2UgKi8KKyNkZWZpbmUgU09VTkRfT05PRkZfTUlOCQkyOAorI2RlZmluZSBTT1VORF9PTk9GRl9NQVgJCTMwCisKKy8qIE5vdGUhCU51bWJlciAzMSBjYW5ub3QgYmUgdXNlZCBzaW5jZSB0aGUgc2lnbiBiaXQgaXMgcmVzZXJ2ZWQgKi8KKyNkZWZpbmUgU09VTkRfTUlYRVJfTk9ORQkzMQorCisvKgorICogVGhlIGZvbGxvd2luZyB1bnN1cHBvcnRlZCBtYWNyb3MgYXJlIG5vIGxvbmdlciBmdW5jdGlvbmFsLgorICogVXNlIFNPVU5EX01JWEVSX1BSSVZBVEUjIG1hY3JvcyBpbiBmdXR1cmUuCisgKi8KKyNkZWZpbmUgU09VTkRfTUlYRVJfRU5IQU5DRQlTT1VORF9NSVhFUl9OT05FCisjZGVmaW5lIFNPVU5EX01JWEVSX01VVEUJU09VTkRfTUlYRVJfTk9ORQorI2RlZmluZSBTT1VORF9NSVhFUl9MT1VECVNPVU5EX01JWEVSX05PTkUKKworCisjZGVmaW5lIFNPVU5EX0RFVklDRV9MQUJFTFMJeyJWb2wgICIsICJCYXNzICIsICJUcmVibCIsICJTeW50aCIsICJQY20gICIsICJTcGtyICIsICJMaW5lICIsIFwKKwkJCQkgIk1pYyAgIiwgIkNEICAgIiwgIk1peCAgIiwgIlBjbTIgIiwgIlJlYyAgIiwgIklHYWluIiwgIk9HYWluIiwgXAorCQkJCSAiTGluZTEiLCAiTGluZTIiLCAiTGluZTMiLCAiRGlnaXRhbDEiLCAiRGlnaXRhbDIiLCAiRGlnaXRhbDMiLCBcCisJCQkJICJQaG9uZUluIiwgIlBob25lT3V0IiwgIlZpZGVvIiwgIlJhZGlvIiwgIk1vbml0b3IifQorCisjZGVmaW5lIFNPVU5EX0RFVklDRV9OQU1FUwl7InZvbCIsICJiYXNzIiwgInRyZWJsZSIsICJzeW50aCIsICJwY20iLCAic3BlYWtlciIsICJsaW5lIiwgXAorCQkJCSAibWljIiwgImNkIiwgIm1peCIsICJwY20yIiwgInJlYyIsICJpZ2FpbiIsICJvZ2FpbiIsIFwKKwkJCQkgImxpbmUxIiwgImxpbmUyIiwgImxpbmUzIiwgImRpZzEiLCAiZGlnMiIsICJkaWczIiwgXAorCQkJCSAicGhpbiIsICJwaG91dCIsICJ2aWRlbyIsICJyYWRpbyIsICJtb25pdG9yIn0KKworLyoJRGV2aWNlIGJpdG1hc2sgaWRlbnRpZmllcnMJKi8KKworI2RlZmluZSBTT1VORF9NSVhFUl9SRUNTUkMJMHhmZgkvKiBBcmcgY29udGFpbnMgYSBiaXQgZm9yIGVhY2ggcmVjb3JkaW5nIHNvdXJjZSAqLworI2RlZmluZSBTT1VORF9NSVhFUl9ERVZNQVNLCTB4ZmUJLyogQXJnIGNvbnRhaW5zIGEgYml0IGZvciBlYWNoIHN1cHBvcnRlZCBkZXZpY2UgKi8KKyNkZWZpbmUgU09VTkRfTUlYRVJfUkVDTUFTSwkweGZkCS8qIEFyZyBjb250YWlucyBhIGJpdCBmb3IgZWFjaCBzdXBwb3J0ZWQgcmVjb3JkaW5nIHNvdXJjZSAqLworI2RlZmluZSBTT1VORF9NSVhFUl9DQVBTCTB4ZmMKKyMJZGVmaW5lIFNPVU5EX0NBUF9FWENMX0lOUFVUCTB4MDAwMDAwMDEJLyogT25seSBvbmUgcmVjb3JkaW5nIHNvdXJjZSBhdCBhIHRpbWUgKi8KKyNkZWZpbmUgU09VTkRfTUlYRVJfU1RFUkVPREVWUwkweGZiCS8qIE1peGVyIGNoYW5uZWxzIHN1cHBvcnRpbmcgc3RlcmVvICovCisjZGVmaW5lIFNPVU5EX01JWEVSX09VVFNSQwkweGZhCS8qIEFyZyBjb250YWlucyBhIGJpdCBmb3IgZWFjaCBpbnB1dCBzb3VyY2UgdG8gb3V0cHV0ICovCisjZGVmaW5lIFNPVU5EX01JWEVSX09VVE1BU0sJMHhmOQkvKiBBcmcgY29udGFpbnMgYSBiaXQgZm9yIGVhY2ggc3VwcG9ydGVkIGlucHV0IHNvdXJjZSB0byBvdXRwdXQgKi8KKworLyoJRGV2aWNlIG1hc2sgYml0cwkqLworCisjZGVmaW5lIFNPVU5EX01BU0tfVk9MVU1FCSgxIDw8IFNPVU5EX01JWEVSX1ZPTFVNRSkKKyNkZWZpbmUgU09VTkRfTUFTS19CQVNTCQkoMSA8PCBTT1VORF9NSVhFUl9CQVNTKQorI2RlZmluZSBTT1VORF9NQVNLX1RSRUJMRQkoMSA8PCBTT1VORF9NSVhFUl9UUkVCTEUpCisjZGVmaW5lIFNPVU5EX01BU0tfU1lOVEgJKDEgPDwgU09VTkRfTUlYRVJfU1lOVEgpCisjZGVmaW5lIFNPVU5EX01BU0tfUENNCQkoMSA8PCBTT1VORF9NSVhFUl9QQ00pCisjZGVmaW5lIFNPVU5EX01BU0tfU1BFQUtFUgkoMSA8PCBTT1VORF9NSVhFUl9TUEVBS0VSKQorI2RlZmluZSBTT1VORF9NQVNLX0xJTkUJCSgxIDw8IFNPVU5EX01JWEVSX0xJTkUpCisjZGVmaW5lIFNPVU5EX01BU0tfTUlDCQkoMSA8PCBTT1VORF9NSVhFUl9NSUMpCisjZGVmaW5lIFNPVU5EX01BU0tfQ0QJCSgxIDw8IFNPVU5EX01JWEVSX0NEKQorI2RlZmluZSBTT1VORF9NQVNLX0lNSVgJCSgxIDw8IFNPVU5EX01JWEVSX0lNSVgpCisjZGVmaW5lIFNPVU5EX01BU0tfQUxUUENNCSgxIDw8IFNPVU5EX01JWEVSX0FMVFBDTSkKKyNkZWZpbmUgU09VTkRfTUFTS19SRUNMRVYJKDEgPDwgU09VTkRfTUlYRVJfUkVDTEVWKQorI2RlZmluZSBTT1VORF9NQVNLX0lHQUlOCSgxIDw8IFNPVU5EX01JWEVSX0lHQUlOKQorI2RlZmluZSBTT1VORF9NQVNLX09HQUlOCSgxIDw8IFNPVU5EX01JWEVSX09HQUlOKQorI2RlZmluZSBTT1VORF9NQVNLX0xJTkUxCSgxIDw8IFNPVU5EX01JWEVSX0xJTkUxKQorI2RlZmluZSBTT1VORF9NQVNLX0xJTkUyCSgxIDw8IFNPVU5EX01JWEVSX0xJTkUyKQorI2RlZmluZSBTT1VORF9NQVNLX0xJTkUzCSgxIDw8IFNPVU5EX01JWEVSX0xJTkUzKQorI2RlZmluZSBTT1VORF9NQVNLX0RJR0lUQUwxCSgxIDw8IFNPVU5EX01JWEVSX0RJR0lUQUwxKQorI2RlZmluZSBTT1VORF9NQVNLX0RJR0lUQUwyCSgxIDw8IFNPVU5EX01JWEVSX0RJR0lUQUwyKQorI2RlZmluZSBTT1VORF9NQVNLX0RJR0lUQUwzCSgxIDw8IFNPVU5EX01JWEVSX0RJR0lUQUwzKQorI2RlZmluZSBTT1VORF9NQVNLX1BIT05FSU4JKDEgPDwgU09VTkRfTUlYRVJfUEhPTkVJTikKKyNkZWZpbmUgU09VTkRfTUFTS19QSE9ORU9VVAkoMSA8PCBTT1VORF9NSVhFUl9QSE9ORU9VVCkKKyNkZWZpbmUgU09VTkRfTUFTS19SQURJTwkoMSA8PCBTT1VORF9NSVhFUl9SQURJTykKKyNkZWZpbmUgU09VTkRfTUFTS19WSURFTwkoMSA8PCBTT1VORF9NSVhFUl9WSURFTykKKyNkZWZpbmUgU09VTkRfTUFTS19NT05JVE9SCSgxIDw8IFNPVU5EX01JWEVSX01PTklUT1IpCisKKy8qIE9ic29sZXRlIG1hY3JvcyAqLworI2RlZmluZSBTT1VORF9NQVNLX01VVEUJCSgxIDw8IFNPVU5EX01JWEVSX01VVEUpCisjZGVmaW5lIFNPVU5EX01BU0tfRU5IQU5DRQkoMSA8PCBTT1VORF9NSVhFUl9FTkhBTkNFKQorI2RlZmluZSBTT1VORF9NQVNLX0xPVUQJCSgxIDw8IFNPVU5EX01JWEVSX0xPVUQpCisKKyNkZWZpbmUgTUlYRVJfUkVBRChkZXYpCQlfU0lPUignTScsIGRldiwgaW50KQorI2RlZmluZSBTT1VORF9NSVhFUl9SRUFEX1ZPTFVNRQkJTUlYRVJfUkVBRChTT1VORF9NSVhFUl9WT0xVTUUpCisjZGVmaW5lIFNPVU5EX01JWEVSX1JFQURfQkFTUwkJTUlYRVJfUkVBRChTT1VORF9NSVhFUl9CQVNTKQorI2RlZmluZSBTT1VORF9NSVhFUl9SRUFEX1RSRUJMRQkJTUlYRVJfUkVBRChTT1VORF9NSVhFUl9UUkVCTEUpCisjZGVmaW5lIFNPVU5EX01JWEVSX1JFQURfU1lOVEgJCU1JWEVSX1JFQUQoU09VTkRfTUlYRVJfU1lOVEgpCisjZGVmaW5lIFNPVU5EX01JWEVSX1JFQURfUENNCQlNSVhFUl9SRUFEKFNPVU5EX01JWEVSX1BDTSkKKyNkZWZpbmUgU09VTkRfTUlYRVJfUkVBRF9TUEVBS0VSCU1JWEVSX1JFQUQoU09VTkRfTUlYRVJfU1BFQUtFUikKKyNkZWZpbmUgU09VTkRfTUlYRVJfUkVBRF9MSU5FCQlNSVhFUl9SRUFEKFNPVU5EX01JWEVSX0xJTkUpCisjZGVmaW5lIFNPVU5EX01JWEVSX1JFQURfTUlDCQlNSVhFUl9SRUFEKFNPVU5EX01JWEVSX01JQykKKyNkZWZpbmUgU09VTkRfTUlYRVJfUkVBRF9DRAkJTUlYRVJfUkVBRChTT1VORF9NSVhFUl9DRCkKKyNkZWZpbmUgU09VTkRfTUlYRVJfUkVBRF9JTUlYCQlNSVhFUl9SRUFEKFNPVU5EX01JWEVSX0lNSVgpCisjZGVmaW5lIFNPVU5EX01JWEVSX1JFQURfQUxUUENNCQlNSVhFUl9SRUFEKFNPVU5EX01JWEVSX0FMVFBDTSkKKyNkZWZpbmUgU09VTkRfTUlYRVJfUkVBRF9SRUNMRVYJCU1JWEVSX1JFQUQoU09VTkRfTUlYRVJfUkVDTEVWKQorI2RlZmluZSBTT1VORF9NSVhFUl9SRUFEX0lHQUlOCQlNSVhFUl9SRUFEKFNPVU5EX01JWEVSX0lHQUlOKQorI2RlZmluZSBTT1VORF9NSVhFUl9SRUFEX09HQUlOCQlNSVhFUl9SRUFEKFNPVU5EX01JWEVSX09HQUlOKQorI2RlZmluZSBTT1VORF9NSVhFUl9SRUFEX0xJTkUxCQlNSVhFUl9SRUFEKFNPVU5EX01JWEVSX0xJTkUxKQorI2RlZmluZSBTT1VORF9NSVhFUl9SRUFEX0xJTkUyCQlNSVhFUl9SRUFEKFNPVU5EX01JWEVSX0xJTkUyKQorI2RlZmluZSBTT1VORF9NSVhFUl9SRUFEX0xJTkUzCQlNSVhFUl9SRUFEKFNPVU5EX01JWEVSX0xJTkUzKQorCisvKiBPYnNvbGV0ZSBtYWNyb3MgKi8KKyNkZWZpbmUgU09VTkRfTUlYRVJfUkVBRF9NVVRFCQlNSVhFUl9SRUFEKFNPVU5EX01JWEVSX01VVEUpCisjZGVmaW5lIFNPVU5EX01JWEVSX1JFQURfRU5IQU5DRQlNSVhFUl9SRUFEKFNPVU5EX01JWEVSX0VOSEFOQ0UpCisjZGVmaW5lIFNPVU5EX01JWEVSX1JFQURfTE9VRAkJTUlYRVJfUkVBRChTT1VORF9NSVhFUl9MT1VEKQorCisjZGVmaW5lIFNPVU5EX01JWEVSX1JFQURfUkVDU1JDCQlNSVhFUl9SRUFEKFNPVU5EX01JWEVSX1JFQ1NSQykKKyNkZWZpbmUgU09VTkRfTUlYRVJfUkVBRF9ERVZNQVNLCU1JWEVSX1JFQUQoU09VTkRfTUlYRVJfREVWTUFTSykKKyNkZWZpbmUgU09VTkRfTUlYRVJfUkVBRF9SRUNNQVNLCU1JWEVSX1JFQUQoU09VTkRfTUlYRVJfUkVDTUFTSykKKyNkZWZpbmUgU09VTkRfTUlYRVJfUkVBRF9TVEVSRU9ERVZTCU1JWEVSX1JFQUQoU09VTkRfTUlYRVJfU1RFUkVPREVWUykKKyNkZWZpbmUgU09VTkRfTUlYRVJfUkVBRF9DQVBTCQlNSVhFUl9SRUFEKFNPVU5EX01JWEVSX0NBUFMpCisKKyNkZWZpbmUgTUlYRVJfV1JJVEUoZGV2KQkJX1NJT1dSKCdNJywgZGV2LCBpbnQpCisjZGVmaW5lIFNPVU5EX01JWEVSX1dSSVRFX1ZPTFVNRQlNSVhFUl9XUklURShTT1VORF9NSVhFUl9WT0xVTUUpCisjZGVmaW5lIFNPVU5EX01JWEVSX1dSSVRFX0JBU1MJCU1JWEVSX1dSSVRFKFNPVU5EX01JWEVSX0JBU1MpCisjZGVmaW5lIFNPVU5EX01JWEVSX1dSSVRFX1RSRUJMRQlNSVhFUl9XUklURShTT1VORF9NSVhFUl9UUkVCTEUpCisjZGVmaW5lIFNPVU5EX01JWEVSX1dSSVRFX1NZTlRICQlNSVhFUl9XUklURShTT1VORF9NSVhFUl9TWU5USCkKKyNkZWZpbmUgU09VTkRfTUlYRVJfV1JJVEVfUENNCQlNSVhFUl9XUklURShTT1VORF9NSVhFUl9QQ00pCisjZGVmaW5lIFNPVU5EX01JWEVSX1dSSVRFX1NQRUFLRVIJTUlYRVJfV1JJVEUoU09VTkRfTUlYRVJfU1BFQUtFUikKKyNkZWZpbmUgU09VTkRfTUlYRVJfV1JJVEVfTElORQkJTUlYRVJfV1JJVEUoU09VTkRfTUlYRVJfTElORSkKKyNkZWZpbmUgU09VTkRfTUlYRVJfV1JJVEVfTUlDCQlNSVhFUl9XUklURShTT1VORF9NSVhFUl9NSUMpCisjZGVmaW5lIFNPVU5EX01JWEVSX1dSSVRFX0NECQlNSVhFUl9XUklURShTT1VORF9NSVhFUl9DRCkKKyNkZWZpbmUgU09VTkRfTUlYRVJfV1JJVEVfSU1JWAkJTUlYRVJfV1JJVEUoU09VTkRfTUlYRVJfSU1JWCkKKyNkZWZpbmUgU09VTkRfTUlYRVJfV1JJVEVfQUxUUENNCU1JWEVSX1dSSVRFKFNPVU5EX01JWEVSX0FMVFBDTSkKKyNkZWZpbmUgU09VTkRfTUlYRVJfV1JJVEVfUkVDTEVWCU1JWEVSX1dSSVRFKFNPVU5EX01JWEVSX1JFQ0xFVikKKyNkZWZpbmUgU09VTkRfTUlYRVJfV1JJVEVfSUdBSU4JCU1JWEVSX1dSSVRFKFNPVU5EX01JWEVSX0lHQUlOKQorI2RlZmluZSBTT1VORF9NSVhFUl9XUklURV9PR0FJTgkJTUlYRVJfV1JJVEUoU09VTkRfTUlYRVJfT0dBSU4pCisjZGVmaW5lIFNPVU5EX01JWEVSX1dSSVRFX0xJTkUxCQlNSVhFUl9XUklURShTT1VORF9NSVhFUl9MSU5FMSkKKyNkZWZpbmUgU09VTkRfTUlYRVJfV1JJVEVfTElORTIJCU1JWEVSX1dSSVRFKFNPVU5EX01JWEVSX0xJTkUyKQorI2RlZmluZSBTT1VORF9NSVhFUl9XUklURV9MSU5FMwkJTUlYRVJfV1JJVEUoU09VTkRfTUlYRVJfTElORTMpCisKKy8qIE9ic29sZXRlIG1hY3JvcyAqLworI2RlZmluZSBTT1VORF9NSVhFUl9XUklURV9NVVRFCQlNSVhFUl9XUklURShTT1VORF9NSVhFUl9NVVRFKQorI2RlZmluZSBTT1VORF9NSVhFUl9XUklURV9FTkhBTkNFCU1JWEVSX1dSSVRFKFNPVU5EX01JWEVSX0VOSEFOQ0UpCisjZGVmaW5lIFNPVU5EX01JWEVSX1dSSVRFX0xPVUQJCU1JWEVSX1dSSVRFKFNPVU5EX01JWEVSX0xPVUQpCisKKyNkZWZpbmUgU09VTkRfTUlYRVJfV1JJVEVfUkVDU1JDCU1JWEVSX1dSSVRFKFNPVU5EX01JWEVSX1JFQ1NSQykKKwordHlwZWRlZiBzdHJ1Y3QgbWl4ZXJfaW5mbworeworICBjaGFyIGlkWzE2XTsKKyAgY2hhciBuYW1lWzMyXTsKKyAgaW50ICBtb2RpZnlfY291bnRlcjsKKyAgaW50IGZpbGxlcnNbMTBdOworfSBtaXhlcl9pbmZvOworCit0eXBlZGVmIHN0cnVjdCBfb2xkX21peGVyX2luZm8gLyogT2Jzb2xldGUgKi8KK3sKKyAgY2hhciBpZFsxNl07CisgIGNoYXIgbmFtZVszMl07Cit9IF9vbGRfbWl4ZXJfaW5mbzsKKworI2RlZmluZSBTT1VORF9NSVhFUl9JTkZPCQlfU0lPUiAoJ00nLCAxMDEsIG1peGVyX2luZm8pCisjZGVmaW5lIFNPVU5EX09MRF9NSVhFUl9JTkZPCQlfU0lPUiAoJ00nLCAxMDEsIF9vbGRfbWl4ZXJfaW5mbykKKworLyoKKyAqIEEgbWVjaGFuaXNtIGZvciBhY2Nlc3NpbmcgInByb3ByaWV0YXJ5IiBtaXhlciBmZWF0dXJlcy4gVGhpcyBtZXRob2QKKyAqIHBlcm1pdHMgcGFzc2luZyAxMjggYnl0ZXMgb2YgYXJiaXRyYXJ5IGRhdGEgYmV0d2VlbiBhIG1peGVyIGFwcGxpY2F0aW9uCisgKiBhbmQgdGhlIG1peGVyIGRyaXZlci4gSW50ZXJwcmV0YXRpb24gb2YgdGhlIHJlY29yZCBpcyBkZWZpbmVkIGJ5CisgKiB0aGUgcGFydGljdWxhciBtaXhlciBkcml2ZXIuCisgKi8KK3R5cGVkZWYgdW5zaWduZWQgY2hhciBtaXhlcl9yZWNvcmRbMTI4XTsKKworI2RlZmluZSBTT1VORF9NSVhFUl9BQ0NFU1MJCV9TSU9XUignTScsIDEwMiwgbWl4ZXJfcmVjb3JkKQorCisvKgorICogVHdvIGlvY3RscyBmb3Igc3BlY2lhbCBzb3VuY2FyZCBmdW5jdGlvbgorICovCisjZGVmaW5lIFNPVU5EX01JWEVSX0FHQyAgX1NJT1dSKCdNJywgMTAzLCBpbnQpCisjZGVmaW5lIFNPVU5EX01JWEVSXzNEU0UgIF9TSU9XUignTScsIDEwNCwgaW50KQorCisvKgorICogVGhlIFNPVU5EX01JWEVSX1BSSVZBVEUjIGNvbW1hbmRzIGNhbiBiZSByZWRlZmluZWQgYnkgbG93IGxldmVsIGRyaXZlcnMuCisgKiBUaGVzZSBmZWF0dXJlcyBjYW4gYmUgdXNlZCB3aGVuIGFjY2Vzc2luZyBkZXZpY2Ugc3BlY2lmaWMgZmVhdHVyZXMuCisgKi8KKyNkZWZpbmUgU09VTkRfTUlYRVJfUFJJVkFURTEJCV9TSU9XUignTScsIDExMSwgaW50KQorI2RlZmluZSBTT1VORF9NSVhFUl9QUklWQVRFMgkJX1NJT1dSKCdNJywgMTEyLCBpbnQpCisjZGVmaW5lIFNPVU5EX01JWEVSX1BSSVZBVEUzCQlfU0lPV1IoJ00nLCAxMTMsIGludCkKKyNkZWZpbmUgU09VTkRfTUlYRVJfUFJJVkFURTQJCV9TSU9XUignTScsIDExNCwgaW50KQorI2RlZmluZSBTT1VORF9NSVhFUl9QUklWQVRFNQkJX1NJT1dSKCdNJywgMTE1LCBpbnQpCisKKy8qCisgKiBTT1VORF9NSVhFUl9HRVRMRVZFTFMgYW5kIFNPVU5EX01JWEVSX1NFVExFVkVMUyBjYWxscyBjYW4gYmUgdXNlZAorICogZm9yIHF1ZXJ5aW5nIGN1cnJlbnQgbWl4ZXIgc2V0dGluZ3MgZnJvbSB0aGUgZHJpdmVyIGFuZCBmb3IgbG9hZGluZworICogZGVmYXVsdCB2b2x1bWUgc2V0dGluZ3MgX3ByaW9yXyBhY3RpdmF0aW5nIHRoZSBtaXhlciAobG9hZGluZworICogZG9lc24ndCBhZmZlY3QgY3VycmVudCBzdGF0ZSBvZiB0aGUgbWl4ZXIgaGFyZHdhcmUpLiBUaGVzZSBjYWxscworICogYXJlIGZvciBpbnRlcm5hbCB1c2Ugb25seS4KKyAqLworCit0eXBlZGVmIHN0cnVjdCBtaXhlcl92b2xfdGFibGUgeworICBpbnQgbnVtOwkvKiBJbmRleCB0byB2b2x1bWUgdGFibGUgKi8KKyAgY2hhciBuYW1lWzMyXTsKKyAgaW50IGxldmVsc1szMl07Cit9IG1peGVyX3ZvbF90YWJsZTsKKworI2RlZmluZSBTT1VORF9NSVhFUl9HRVRMRVZFTFMJCV9TSU9XUignTScsIDExNiwgbWl4ZXJfdm9sX3RhYmxlKQorI2RlZmluZSBTT1VORF9NSVhFUl9TRVRMRVZFTFMJCV9TSU9XUignTScsIDExNywgbWl4ZXJfdm9sX3RhYmxlKQorCisvKiAKKyAqIEFuIGlvY3RsIGZvciBpZGVudGlmeWluZyB0aGUgZHJpdmVyIHZlcnNpb24uIEl0IHdpbGwgcmV0dXJuIHZhbHVlCisgKiBvZiB0aGUgU09VTkRfVkVSU0lPTiBtYWNybyB1c2VkIHdoZW4gY29tcGlsaW5nIHRoZSBkcml2ZXIuCisgKiBUaGlzIGNhbGwgd2FzIGludHJvZHVjZWQgaW4gT1NTIHZlcnNpb24gMy42IGFuZCBpdCB3aWxsIG5vdCB3b3JrCisgKiB3aXRoIGVhcmxpZXIgdmVyc2lvbnMgKHJldHVybnMgRUlOVkFMKS4KKyAqLworI2RlZmluZSBPU1NfR0VUVkVSU0lPTgkJCV9TSU9SICgnTScsIDExOCwgaW50KQorCisvKgorICogTGV2ZWwgMiBldmVudCB0eXBlcyBmb3IgL2Rldi9zZXF1ZW5jZXIKKyAqLworCisvKgorICogVGhlIDQgbW9zdCBzaWduaWZpY2FudCBiaXRzIG9mIGJ5dGUgMCBzcGVjaWZ5IHRoZSBjbGFzcyBvZgorICogdGhlIGV2ZW50OiAKKyAqCisgKgkweDhYID0gc3lzdGVtIGxldmVsIGV2ZW50cywKKyAqCTB4OVggPSBkZXZpY2UvcG9ydCBzcGVjaWZpYyBldmVudHMsIGV2ZW50WzFdID0gZGV2aWNlL3BvcnQsCisgKgkJVGhlIGxhc3QgNCBiaXRzIGdpdmUgdGhlIHN1YnR5cGU6CisgKgkJCTB4MDIJPSBDaGFubmVsIGV2ZW50IChldmVudFszXSA9IGNobikuCisgKgkJCTB4MDEJPSBub3RlIGV2ZW50IChldmVudFs0XSA9IG5vdGUpLgorICoJCQkoMHgwMSBpcyBub3QgdXNlZCBhbG9uZSBidXQgYWx3YXlzIHdpdGggYml0IDB4MDIpLgorICoJICAgICAgIGV2ZW50WzJdID0gTUlESSBtZXNzYWdlIGNvZGUgKDB4ODA9bm90ZSBvZmYgZXRjLikKKyAqCisgKi8KKworI2RlZmluZSBFVl9TRVFfTE9DQUwJCTB4ODAKKyNkZWZpbmUgRVZfVElNSU5HCQkweDgxCisjZGVmaW5lIEVWX0NITl9DT01NT04JCTB4OTIKKyNkZWZpbmUgRVZfQ0hOX1ZPSUNFCQkweDkzCisjZGVmaW5lIEVWX1NZU0VYCQkweDk0CisvKgorICogRXZlbnQgdHlwZXMgMjAwIHRvIDIyMCBhcmUgcmVzZXJ2ZWQgZm9yIGFwcGxpY2F0aW9uIHVzZS4KKyAqIFRoZXNlIG51bWJlcnMgd2lsbCBub3QgYmUgdXNlZCBieSB0aGUgZHJpdmVyLgorICovCisKKy8qCisgKiBFdmVudHMgZm9yIGV2ZW50IHR5cGUgRVZfQ0hOX1ZPSUNFCisgKi8KKworI2RlZmluZSBNSURJX05PVEVPRkYJCTB4ODAKKyNkZWZpbmUgTUlESV9OT1RFT04JCTB4OTAKKyNkZWZpbmUgTUlESV9LRVlfUFJFU1NVUkUJMHhBMAorCisvKgorICogRXZlbnRzIGZvciBldmVudCB0eXBlIEVWX0NITl9DT01NT04KKyAqLworCisjZGVmaW5lIE1JRElfQ1RMX0NIQU5HRQkJMHhCMAorI2RlZmluZSBNSURJX1BHTV9DSEFOR0UJCTB4QzAKKyNkZWZpbmUgTUlESV9DSE5fUFJFU1NVUkUJMHhEMAorI2RlZmluZSBNSURJX1BJVENIX0JFTkQJCTB4RTAKKworI2RlZmluZSBNSURJX1NZU1RFTV9QUkVGSVgJMHhGMAorCisvKgorICogVGltZXIgZXZlbnQgdHlwZXMKKyAqLworI2RlZmluZSBUTVJfV0FJVF9SRUwJCTEJLyogVGltZSByZWxhdGl2ZSB0byB0aGUgcHJldiB0aW1lICovCisjZGVmaW5lIFRNUl9XQUlUX0FCUwkJMgkvKiBBYnNvbHV0ZSB0aW1lIHNpbmNlIFRNUl9TVEFSVCAqLworI2RlZmluZSBUTVJfU1RPUAkJMworI2RlZmluZSBUTVJfU1RBUlQJCTQKKyNkZWZpbmUgVE1SX0NPTlRJTlVFCQk1CisjZGVmaW5lIFRNUl9URU1QTwkJNgorI2RlZmluZSBUTVJfRUNITwkJOAorI2RlZmluZSBUTVJfQ0xPQ0sJCTkJLyogTUlESSBjbG9jayAqLworI2RlZmluZSBUTVJfU1BQCQkJMTAJLyogU29uZyBwb3NpdGlvbiBwb2ludGVyICovCisjZGVmaW5lIFRNUl9USU1FU0lHCQkxMQkvKiBUaW1lIHNpZ25hdHVyZSAqLworCisvKgorICoJTG9jYWwgZXZlbnQgdHlwZXMKKyAqLworI2RlZmluZSBMT0NMX1NUQVJUQVVESU8JCTEKKworI2lmICghZGVmaW5lZChfX0tFUk5FTF9fKSAmJiAhZGVmaW5lZChLRVJORUwpICYmICFkZWZpbmVkKElOS0VSTkVMKSAmJiAhZGVmaW5lZChfS0VSTkVMKSkgfHwgZGVmaW5lZChVU0VfU0VRX01BQ1JPUykgCisvKgorICoJU29tZSBjb252ZW5pZW5jZSBtYWNyb3MgdG8gc2ltcGxpZnkgcHJvZ3JhbW1pbmcgb2YgdGhlCisgKgkvZGV2L3NlcXVlbmNlciBpbnRlcmZhY2UKKyAqCisgKglUaGVzZSBtYWNyb3MgZGVmaW5lIHRoZSBBUEkgd2hpY2ggc2hvdWxkIGJlIHVzZWQgd2hlbiBwb3NzaWJsZS4KKyAqLworI2RlZmluZSBTRVFfREVDTEFSRUJVRigpCQlTRVFfVVNFX0VYVEJVRigpCisKK3ZvaWQgc2VxYnVmX2R1bXAodm9pZCk7CS8qIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBwcm92aWRlZCBieSBwcm9ncmFtcyAqLworCitleHRlcm4gaW50IE9TU19pbml0KGludCBzZXFmZCwgaW50IGJ1Zmxlbik7CitleHRlcm4gdm9pZCBPU1Nfc2VxYnVmX2R1bXAoaW50IGZkLCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBidWZsZW4pOworZXh0ZXJuIHZvaWQgT1NTX3NlcV9hZHZidWYoaW50IGxlbiwgaW50IGZkLCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBidWZsZW4pOworZXh0ZXJuIHZvaWQgT1NTX3NlcV9uZWVkYnVmKGludCBsZW4sIGludCBmZCwgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgYnVmbGVuKTsKK2V4dGVybiB2b2lkIE9TU19wYXRjaF9jYWNoaW5nKGludCBkZXYsIGludCBjaG4sIGludCBwYXRjaCwKKwkJCSAgICAgIGludCBmZCwgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgYnVmbGVuKTsKK2V4dGVybiB2b2lkIE9TU19kcnVtX2NhY2hpbmcoaW50IGRldiwgaW50IGNobiwgaW50IHBhdGNoLAorCQkJICAgICAgaW50IGZkLCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBidWZsZW4pOworZXh0ZXJuIHZvaWQgT1NTX3dyaXRlX3BhdGNoKGludCBmZCwgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgbGVuKTsKK2V4dGVybiBpbnQgT1NTX3dyaXRlX3BhdGNoMihpbnQgZmQsIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGxlbik7CisKKyNkZWZpbmUgU0VRX1BNX0RFRklORVMgaW50IF9fZm9vX2Jhcl9fXworI2lmZGVmIE9TU0xJQgorIyAgZGVmaW5lIFNFUV9VU0VfRVhUQlVGKCkgXAorCQlleHRlcm4gdW5zaWduZWQgY2hhciAqX3NlcWJ1ZjsgXAorCQlleHRlcm4gaW50IF9zZXFidWZsZW47ZXh0ZXJuIGludCBfc2VxYnVmcHRyCisjICBkZWZpbmUgU0VRX0RFRklORUJVRihsZW4pIFNFUV9VU0VfRVhUQlVGKCk7c3RhdGljIGludCBfcmVxdWVzdGVkX3NlcWJ1Zmxlbj1sZW4KKyMgIGRlZmluZSBfU0VRX0FEVkJVRihsZW4pIE9TU19zZXFfYWR2YnVmKGxlbiwgc2VxZmQsIF9zZXFidWYsIF9zZXFidWZsZW4pCisjICBkZWZpbmUgX1NFUV9ORUVEQlVGKGxlbikgT1NTX3NlcV9uZWVkYnVmKGxlbiwgc2VxZmQsIF9zZXFidWYsIF9zZXFidWZsZW4pCisjICBkZWZpbmUgU0VRX0RVTVBCVUYoKSBPU1Nfc2VxYnVmX2R1bXAoc2VxZmQsIF9zZXFidWYsIF9zZXFidWZsZW4pCisKKyMgIGRlZmluZSBTRVFfTE9BRF9HTUlOU1RSKGRldiwgaW5zdHIpIFwKKwkJT1NTX3BhdGNoX2NhY2hpbmcoZGV2LCAtMSwgaW5zdHIsIHNlcWZkLCBfc2VxYnVmLCBfc2VxYnVmbGVuKQorIyAgZGVmaW5lIFNFUV9MT0FEX0dNRFJVTShkZXYsIGRydW0pIFwKKwkJT1NTX2RydW1fY2FjaGluZyhkZXYsIC0xLCBkcnVtLCBzZXFmZCwgX3NlcWJ1ZiwgX3NlcWJ1ZmxlbikKKyNlbHNlIC8qICFPU1NMSUIgKi8KKworIyAgZGVmaW5lIFNFUV9MT0FEX0dNSU5TVFIoZGV2LCBpbnN0cikKKyMgIGRlZmluZSBTRVFfTE9BRF9HTURSVU0oZGV2LCBkcnVtKQorCisjICBkZWZpbmUgU0VRX1VTRV9FWFRCVUYoKSBcCisJCWV4dGVybiB1bnNpZ25lZCBjaGFyIF9zZXFidWZbXTsgXAorCQlleHRlcm4gaW50IF9zZXFidWZsZW47ZXh0ZXJuIGludCBfc2VxYnVmcHRyCisKKyNpZm5kZWYgVVNFX1NJTVBMRV9NQUNST1MKKy8qIFNhbXBsZSBzZXFidWZfZHVtcCgpIGltcGxlbWVudGF0aW9uOgorICoKKyAqCVNFUV9ERUZJTkVCVUYgKDIwNDgpOwktLSBEZWZpbmVzIGEgYnVmZmVyIGZvciAyMDQ4IGJ5dGVzCisgKgorICoJaW50IHNlcWZkOwkJLS0gVGhlIGZpbGUgZGVzY3JpcHRvciBmb3IgL2Rldi9zZXF1ZW5jZXIuCisgKgorICoJdm9pZAorICoJc2VxYnVmX2R1bXAgKCkKKyAqCXsKKyAqCSAgaWYgKF9zZXFidWZwdHIpCisgKgkgICAgaWYgKHdyaXRlIChzZXFmZCwgX3NlcWJ1ZiwgX3NlcWJ1ZnB0cikgPT0gLTEpCisgKgkgICAgICB7CisgKgkJcGVycm9yICgid3JpdGUgL2Rldi9zZXF1ZW5jZXIiKTsKKyAqCQlleGl0ICgtMSk7CisgKgkgICAgICB9CisgKgkgIF9zZXFidWZwdHIgPSAwOworICoJfQorICovCisKKyNkZWZpbmUgU0VRX0RFRklORUJVRihsZW4pCQl1bnNpZ25lZCBjaGFyIF9zZXFidWZbbGVuXTsgaW50IF9zZXFidWZsZW4gPSBsZW47aW50IF9zZXFidWZwdHIgPSAwCisjZGVmaW5lIF9TRVFfTkVFREJVRihsZW4pCQlpZiAoKF9zZXFidWZwdHIrKGxlbikpID4gX3NlcWJ1Zmxlbikgc2VxYnVmX2R1bXAoKQorI2RlZmluZSBfU0VRX0FEVkJVRihsZW4pCQlfc2VxYnVmcHRyICs9IGxlbgorI2RlZmluZSBTRVFfRFVNUEJVRgkJCXNlcWJ1Zl9kdW1wCisjZWxzZQorLyoKKyAqIFRoaXMgdmFyaWF0aW9uIG9mIHRoZSBzZXF1ZW5jZXIgbWFjcm9zIGlzIHVzZWQganVzdCB0byBmb3JtYXQgb25lIGV2ZW50CisgKiB1c2luZyBmaXhlZCBidWZmZXIuCisgKiAKKyAqIFRoZSBwcm9ncmFtIHVzaW5nIHRoZSBtYWNybyBsaWJyYXJ5IG11c3QgZGVmaW5lIHRoZSBmb2xsb3dpbmcgbWFjcm9zIGJlZm9yZQorICogdXNpbmcgdGhpcyBsaWJyYXJ5LgorICoKKyAqICNkZWZpbmUgX3NlcWJ1ZiAJCSBuYW1lIG9mIHRoZSBidWZmZXIgKHVuc2lnbmVkIGNoYXJbXSkgCisgKiAjZGVmaW5lIF9TRVFfQURWQlVGKGxlbikJIElmIHRoZSBhcHBsaWMgbmVlZHMgdG8ga25vdyB0aGUgZXhhY3QKKyAqCQkJCSBzaXplIG9mIHRoZSBldmVudCwgdGhpcyBtYWNybyBjYW4gYmUgdXNlZC4KKyAqCQkJCSBPdGhlcndpc2UgdGhpcyBtdXN0IGJlIGRlZmluZWQgYXMgZW1wdHkuCisgKiAjZGVmaW5lIF9zZXFidWZwdHIJCSBEZWZpbmUgdGhlIG5hbWUgb2YgaW5kZXggdmFyaWFibGUgb3IgMCBpZgorICoJCQkJIG5vdCByZXF1aXJlZC4gCisgKi8KKyNkZWZpbmUgX1NFUV9ORUVEQlVGKGxlbikJLyogZW1wdHkgKi8KKyNlbmRpZgorI2VuZGlmIC8qICFPU1NMSUIgKi8KKworI2RlZmluZSBTRVFfVk9MVU1FX01PREUoZGV2LCBtb2RlKQl7X1NFUV9ORUVEQlVGKDgpO1wKKwkJCQkJX3NlcWJ1Zltfc2VxYnVmcHRyXSA9IFNFUV9FWFRFTkRFRDtcCisJCQkJCV9zZXFidWZbX3NlcWJ1ZnB0cisxXSA9IFNFUV9WT0xNT0RFO1wKKwkJCQkJX3NlcWJ1Zltfc2VxYnVmcHRyKzJdID0gKGRldik7XAorCQkJCQlfc2VxYnVmW19zZXFidWZwdHIrM10gPSAobW9kZSk7XAorCQkJCQlfc2VxYnVmW19zZXFidWZwdHIrNF0gPSAwO1wKKwkJCQkJX3NlcWJ1Zltfc2VxYnVmcHRyKzVdID0gMDtcCisJCQkJCV9zZXFidWZbX3NlcWJ1ZnB0cis2XSA9IDA7XAorCQkJCQlfc2VxYnVmW19zZXFidWZwdHIrN10gPSAwO1wKKwkJCQkJX1NFUV9BRFZCVUYoOCk7fQorCisvKgorICogTWlkaSB2b2ljZSBtZXNzYWdlcworICovCisKKyNkZWZpbmUgX0NITl9WT0lDRShkZXYsIGV2ZW50LCBjaG4sIG5vdGUsIHBhcm0pIFwKKwkJCQkJe19TRVFfTkVFREJVRig4KTtcCisJCQkJCV9zZXFidWZbX3NlcWJ1ZnB0cl0gPSBFVl9DSE5fVk9JQ0U7XAorCQkJCQlfc2VxYnVmW19zZXFidWZwdHIrMV0gPSAoZGV2KTtcCisJCQkJCV9zZXFidWZbX3NlcWJ1ZnB0cisyXSA9IChldmVudCk7XAorCQkJCQlfc2VxYnVmW19zZXFidWZwdHIrM10gPSAoY2huKTtcCisJCQkJCV9zZXFidWZbX3NlcWJ1ZnB0cis0XSA9IChub3RlKTtcCisJCQkJCV9zZXFidWZbX3NlcWJ1ZnB0cis1XSA9IChwYXJtKTtcCisJCQkJCV9zZXFidWZbX3NlcWJ1ZnB0cis2XSA9ICgwKTtcCisJCQkJCV9zZXFidWZbX3NlcWJ1ZnB0cis3XSA9IDA7XAorCQkJCQlfU0VRX0FEVkJVRig4KTt9CisKKyNkZWZpbmUgU0VRX1NUQVJUX05PVEUoZGV2LCBjaG4sIG5vdGUsIHZvbCkgXAorCQlfQ0hOX1ZPSUNFKGRldiwgTUlESV9OT1RFT04sIGNobiwgbm90ZSwgdm9sKQorCisjZGVmaW5lIFNFUV9TVE9QX05PVEUoZGV2LCBjaG4sIG5vdGUsIHZvbCkgXAorCQlfQ0hOX1ZPSUNFKGRldiwgTUlESV9OT1RFT0ZGLCBjaG4sIG5vdGUsIHZvbCkKKworI2RlZmluZSBTRVFfS0VZX1BSRVNTVVJFKGRldiwgY2huLCBub3RlLCBwcmVzc3VyZSkgXAorCQlfQ0hOX1ZPSUNFKGRldiwgTUlESV9LRVlfUFJFU1NVUkUsIGNobiwgbm90ZSwgcHJlc3N1cmUpCisKKy8qCisgKiBNaWRpIGNoYW5uZWwgbWVzc2FnZXMKKyAqLworCisjZGVmaW5lIF9DSE5fQ09NTU9OKGRldiwgZXZlbnQsIGNobiwgcDEsIHAyLCB3MTQpIFwKKwkJCQkJe19TRVFfTkVFREJVRig4KTtcCisJCQkJCV9zZXFidWZbX3NlcWJ1ZnB0cl0gPSBFVl9DSE5fQ09NTU9OO1wKKwkJCQkJX3NlcWJ1Zltfc2VxYnVmcHRyKzFdID0gKGRldik7XAorCQkJCQlfc2VxYnVmW19zZXFidWZwdHIrMl0gPSAoZXZlbnQpO1wKKwkJCQkJX3NlcWJ1Zltfc2VxYnVmcHRyKzNdID0gKGNobik7XAorCQkJCQlfc2VxYnVmW19zZXFidWZwdHIrNF0gPSAocDEpO1wKKwkJCQkJX3NlcWJ1Zltfc2VxYnVmcHRyKzVdID0gKHAyKTtcCisJCQkJCSooc2hvcnQgKikmX3NlcWJ1Zltfc2VxYnVmcHRyKzZdID0gKHcxNCk7XAorCQkJCQlfU0VRX0FEVkJVRig4KTt9CisvKgorICogU0VRX1NZU0VYIHBlcm1pdHMgc2VuZGluZyBvZiBzeXNleCBtZXNzYWdlcy4gKEl0IG1heSBsb29rIHRoYXQgaXQgcGVybWl0cworICogc2VuZGluZyBhbnkgTUlESSBieXRlcyBidXQgaXQncyBhYnNvbHV0ZWx5IG5vdCBwb3NzaWJsZS4gVHJ5aW5nIHRvIGRvCisgKiBzbyBfd2lsbF8gY2F1c2UgcHJvYmxlbXMgd2l0aCBNUFU0MDEgaW50ZWxsaWdlbnQgbW9kZSkuCisgKgorICogU3lzZXggbWVzc2FnZXMgYXJlIHNlbnQgaW4gYmxvY2tzIG9mIDEgdG8gNiBieXRlcy4gTG9uZ2VyIG1lc3NhZ2VzIG11c3QgYmUgCisgKiBzZW50IGJ5IGNhbGxpbmcgU0VRX1NZU0VYKCkgc2V2ZXJhbCB0aW1lcyAodGhlcmUgbXVzdCBiZSBubyBvdGhlciBldmVudHMKKyAqIGJldHdlZW4gdGhlbSkuIEZpcnN0IHN5c2V4IGZyYWdtZW50IG11c3QgaGF2ZSAweGYwIGluIHRoZSBmaXJzdCBieXRlCisgKiBhbmQgdGhlIGxhc3QgYnl0ZSAoYnVmW2xlbi0xXSBvZiB0aGUgbGFzdCBmcmFnbWVudCBtdXN0IGJlIDB4ZjcuIE5vIGJ5dGUKKyAqIGJldHdlZW4gdGhlc2Ugc3lzZXggc3RhcnQgYW5kIGVuZCBtYXJrZXJzIGNhbm5vdCBiZSBsYXJnZXIgdGhhbiAweDdmLiBBbHNvCisgKiBsZW5ndGhzIG9mIGVhY2ggZnJhZ21lbnRzIChleGNlcHQgdGhlIGxhc3Qgb25lKSBtdXN0IGJlIDYuCisgKgorICogQnJlYWtpbmcgdGhlIGFib3ZlIHJ1bGVzIG1heSB3b3JrIHdpdGggc29tZSBNSURJIHBvcnRzIGJ1dCBpcyBsaWtlbHkgdG8KKyAqIGNhdXNlIGZhdGFsIHByb2JsZW1zIHdpdGggc29tZSBvdGhlciBkZXZpY2VzIChzdWNoIGFzIE1QVTQwMSkuCisgKi8KKyNkZWZpbmUgU0VRX1NZU0VYKGRldiwgYnVmLCBsZW4pIFwKKwkJCQkJe2ludCBpaSwgbGw9KGxlbik7IFwKKwkJCQkJIHVuc2lnbmVkIGNoYXIgKmJ1ZnA9YnVmO1wKKwkJCQkJIGlmIChsbD42KWxsPTY7XAorCQkJCQlfU0VRX05FRURCVUYoOCk7XAorCQkJCQlfc2VxYnVmW19zZXFidWZwdHJdID0gRVZfU1lTRVg7XAorCQkJCQlfc2VxYnVmW19zZXFidWZwdHIrMV0gPSAoZGV2KTtcCisJCQkJCWZvcihpaT0wO2lpPGxsO2lpKyspXAorCQkJCQkgICBfc2VxYnVmW19zZXFidWZwdHIraWkrMl0gPSBidWZwW2lpXTtcCisJCQkJCWZvcihpaT1sbDtpaTw2O2lpKyspXAorCQkJCQkgICBfc2VxYnVmW19zZXFidWZwdHIraWkrMl0gPSAweGZmO1wKKwkJCQkJX1NFUV9BRFZCVUYoOCk7fQorCisjZGVmaW5lIFNFUV9DSE5fUFJFU1NVUkUoZGV2LCBjaG4sIHByZXNzdXJlKSBcCisJCV9DSE5fQ09NTU9OKGRldiwgTUlESV9DSE5fUFJFU1NVUkUsIGNobiwgcHJlc3N1cmUsIDAsIDApCisKKyNkZWZpbmUgU0VRX1NFVF9QQVRDSCBTRVFfUEdNX0NIQU5HRQorI2lmZGVmIE9TU0xJQgorIyAgIGRlZmluZSBTRVFfUEdNX0NIQU5HRShkZXYsIGNobiwgcGF0Y2gpIFwKKwkJe09TU19wYXRjaF9jYWNoaW5nKGRldiwgY2huLCBwYXRjaCwgc2VxZmQsIF9zZXFidWYsIF9zZXFidWZsZW4pOyBcCisJCSBfQ0hOX0NPTU1PTihkZXYsIE1JRElfUEdNX0NIQU5HRSwgY2huLCBwYXRjaCwgMCwgMCk7fQorI2Vsc2UKKyMgICBkZWZpbmUgU0VRX1BHTV9DSEFOR0UoZGV2LCBjaG4sIHBhdGNoKSBcCisJCV9DSE5fQ09NTU9OKGRldiwgTUlESV9QR01fQ0hBTkdFLCBjaG4sIHBhdGNoLCAwLCAwKQorI2VuZGlmCisKKyNkZWZpbmUgU0VRX0NPTlRST0woZGV2LCBjaG4sIGNvbnRyb2xsZXIsIHZhbHVlKSBcCisJCV9DSE5fQ09NTU9OKGRldiwgTUlESV9DVExfQ0hBTkdFLCBjaG4sIGNvbnRyb2xsZXIsIDAsIHZhbHVlKQorCisjZGVmaW5lIFNFUV9CRU5ERVIoZGV2LCBjaG4sIHZhbHVlKSBcCisJCV9DSE5fQ09NTU9OKGRldiwgTUlESV9QSVRDSF9CRU5ELCBjaG4sIDAsIDAsIHZhbHVlKQorCisKKyNkZWZpbmUgU0VRX1YyX1hfQ09OVFJPTChkZXYsIHZvaWNlLCBjb250cm9sbGVyLCB2YWx1ZSkJe19TRVFfTkVFREJVRig4KTtcCisJCQkJCV9zZXFidWZbX3NlcWJ1ZnB0cl0gPSBTRVFfRVhURU5ERUQ7XAorCQkJCQlfc2VxYnVmW19zZXFidWZwdHIrMV0gPSBTRVFfQ09OVFJPTExFUjtcCisJCQkJCV9zZXFidWZbX3NlcWJ1ZnB0cisyXSA9IChkZXYpO1wKKwkJCQkJX3NlcWJ1Zltfc2VxYnVmcHRyKzNdID0gKHZvaWNlKTtcCisJCQkJCV9zZXFidWZbX3NlcWJ1ZnB0cis0XSA9IChjb250cm9sbGVyKTtcCisJCQkJCV9zZXFidWZbX3NlcWJ1ZnB0cis1XSA9ICgodmFsdWUpJjB4ZmYpO1wKKwkJCQkJX3NlcWJ1Zltfc2VxYnVmcHRyKzZdID0gKCh2YWx1ZT4+OCkmMHhmZik7XAorCQkJCQlfc2VxYnVmW19zZXFidWZwdHIrN10gPSAwO1wKKwkJCQkJX1NFUV9BRFZCVUYoOCk7fQorLyoKKyAqIFRoZSBmb2xsb3dpbmcgNSBtYWNyb3MgYXJlIGluY29ycmVjdGx5IGltcGxlbWVudGVkIGFuZCBvYnNvbGV0ZS4KKyAqIFVzZSBTRVFfQkVOREVSIGFuZCBTRVFfQ09OVFJPTCAod2l0aCBwcm9wZXIgY29udHJvbGxlcikgaW5zdGVhZC4KKyAqLworI2RlZmluZSBTRVFfUElUQ0hCRU5EKGRldiwgdm9pY2UsIHZhbHVlKSBTRVFfVjJfWF9DT05UUk9MKGRldiwgdm9pY2UsIENUUkxfUElUQ0hfQkVOREVSLCB2YWx1ZSkKKyNkZWZpbmUgU0VRX0JFTkRFUl9SQU5HRShkZXYsIHZvaWNlLCB2YWx1ZSkgU0VRX1YyX1hfQ09OVFJPTChkZXYsIHZvaWNlLCBDVFJMX1BJVENIX0JFTkRFUl9SQU5HRSwgdmFsdWUpCisjZGVmaW5lIFNFUV9FWFBSRVNTSU9OKGRldiwgdm9pY2UsIHZhbHVlKSBTRVFfQ09OVFJPTChkZXYsIHZvaWNlLCBDVExfRVhQUkVTU0lPTiwgdmFsdWUqMTI4KQorI2RlZmluZSBTRVFfTUFJTl9WT0xVTUUoZGV2LCB2b2ljZSwgdmFsdWUpIFNFUV9DT05UUk9MKGRldiwgdm9pY2UsIENUTF9NQUlOX1ZPTFVNRSwgKHZhbHVlKjE2MzgzKS8xMDApCisjZGVmaW5lIFNFUV9QQU5OSU5HKGRldiwgdm9pY2UsIHBvcykgU0VRX0NPTlRST0woZGV2LCB2b2ljZSwgQ1RMX1BBTiwgKHBvcysxMjgpIC8gMikKKworLyoKKyAqIFRpbWluZyBhbmQgc3luY3Jvbml6YXRpb24gbWFjcm9zCisgKi8KKworI2RlZmluZSBfVElNRVJfRVZFTlQoZXYsIHBhcm0pCQl7X1NFUV9ORUVEQlVGKDgpO1wKKwkJCQkgCV9zZXFidWZbX3NlcWJ1ZnB0ciswXSA9IEVWX1RJTUlORzsgXAorCQkJCSAJX3NlcWJ1Zltfc2VxYnVmcHRyKzFdID0gKGV2KTsgXAorCQkJCQlfc2VxYnVmW19zZXFidWZwdHIrMl0gPSAwO1wKKwkJCQkJX3NlcWJ1Zltfc2VxYnVmcHRyKzNdID0gMDtcCisJCQkJIAkqKHVuc2lnbmVkIGludCAqKSZfc2VxYnVmW19zZXFidWZwdHIrNF0gPSAocGFybSk7IFwKKwkJCQkJX1NFUV9BRFZCVUYoOCk7fQorCisjZGVmaW5lIFNFUV9TVEFSVF9USU1FUigpCQlfVElNRVJfRVZFTlQoVE1SX1NUQVJULCAwKQorI2RlZmluZSBTRVFfU1RPUF9USU1FUigpCQlfVElNRVJfRVZFTlQoVE1SX1NUT1AsIDApCisjZGVmaW5lIFNFUV9DT05USU5VRV9USU1FUigpCQlfVElNRVJfRVZFTlQoVE1SX0NPTlRJTlVFLCAwKQorI2RlZmluZSBTRVFfV0FJVF9USU1FKHRpY2tzKQkJX1RJTUVSX0VWRU5UKFRNUl9XQUlUX0FCUywgdGlja3MpCisjZGVmaW5lIFNFUV9ERUxUQV9USU1FKHRpY2tzKQkJX1RJTUVSX0VWRU5UKFRNUl9XQUlUX1JFTCwgdGlja3MpCisjZGVmaW5lIFNFUV9FQ0hPX0JBQ0soa2V5KQkJX1RJTUVSX0VWRU5UKFRNUl9FQ0hPLCBrZXkpCisjZGVmaW5lIFNFUV9TRVRfVEVNUE8odmFsdWUpCQlfVElNRVJfRVZFTlQoVE1SX1RFTVBPLCB2YWx1ZSkKKyNkZWZpbmUgU0VRX1NPTkdQT1MocG9zKQkJX1RJTUVSX0VWRU5UKFRNUl9TUFAsIHBvcykKKyNkZWZpbmUgU0VRX1RJTUVfU0lHTkFUVVJFKHNpZykJCV9USU1FUl9FVkVOVChUTVJfVElNRVNJRywgc2lnKQorCisvKgorICogTG9jYWwgY29udHJvbCBldmVudHMKKyAqLworCisjZGVmaW5lIF9MT0NBTF9FVkVOVChldiwgcGFybSkJCXtfU0VRX05FRURCVUYoOCk7XAorCQkJCSAJX3NlcWJ1Zltfc2VxYnVmcHRyKzBdID0gRVZfU0VRX0xPQ0FMOyBcCisJCQkJIAlfc2VxYnVmW19zZXFidWZwdHIrMV0gPSAoZXYpOyBcCisJCQkJCV9zZXFidWZbX3NlcWJ1ZnB0cisyXSA9IDA7XAorCQkJCQlfc2VxYnVmW19zZXFidWZwdHIrM10gPSAwO1wKKwkJCQkgCSoodW5zaWduZWQgaW50ICopJl9zZXFidWZbX3NlcWJ1ZnB0cis0XSA9IChwYXJtKTsgXAorCQkJCQlfU0VRX0FEVkJVRig4KTt9CisKKyNkZWZpbmUgU0VRX1BMQVlBVURJTyhkZXZtYXNrKQkJX0xPQ0FMX0VWRU5UKExPQ0xfU1RBUlRBVURJTywgZGV2bWFzaykKKy8qCisgKiBFdmVudHMgZm9yIHRoZSBsZXZlbCAxIGludGVyZmFjZSBvbmx5IAorICovCisKKyNkZWZpbmUgU0VRX01JRElPVVQoZGV2aWNlLCBieXRlKQl7X1NFUV9ORUVEQlVGKDQpO1wKKwkJCQkJX3NlcWJ1Zltfc2VxYnVmcHRyXSA9IFNFUV9NSURJUFVUQztcCisJCQkJCV9zZXFidWZbX3NlcWJ1ZnB0cisxXSA9IChieXRlKTtcCisJCQkJCV9zZXFidWZbX3NlcWJ1ZnB0cisyXSA9IChkZXZpY2UpO1wKKwkJCQkJX3NlcWJ1Zltfc2VxYnVmcHRyKzNdID0gMDtcCisJCQkJCV9TRVFfQURWQlVGKDQpO30KKworLyoKKyAqIFBhdGNoIGxvYWRpbmcuCisgKi8KKyNpZmRlZiBPU1NMSUIKKyMgICBkZWZpbmUgU0VRX1dSUEFUQ0gocGF0Y2h4LCBsZW4pIFwKKwkJT1NTX3dyaXRlX3BhdGNoKHNlcWZkLCAoY2hhciopKHBhdGNoeCksIGxlbikKKyMgICBkZWZpbmUgU0VRX1dSUEFUQ0gyKHBhdGNoeCwgbGVuKSBcCisJCU9TU193cml0ZV9wYXRjaDIoc2VxZmQsIChjaGFyKikocGF0Y2h4KSwgbGVuKQorI2Vsc2UKKyMgICBkZWZpbmUgU0VRX1dSUEFUQ0gocGF0Y2h4LCBsZW4pIFwKKwkJe2lmIChfc2VxYnVmcHRyKSBTRVFfRFVNUEJVRigpO1wKKwkJIGlmICh3cml0ZShzZXFmZCwgKGNoYXIqKShwYXRjaHgpLCBsZW4pPT0tMSkgXAorCQkgICAgcGVycm9yKCJXcml0ZSBwYXRjaDogL2Rldi9zZXF1ZW5jZXIiKTt9CisjICAgZGVmaW5lIFNFUV9XUlBBVENIMihwYXRjaHgsIGxlbikgXAorCQkoU0VRX0RVTVBCVUYoKSwgd3JpdGUoc2VxZmQsIChjaGFyKikocGF0Y2h4KSwgbGVuKSkKKyNlbmRpZgorCisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcGlubG9jay5oIGIvaW5jbHVkZS9saW51eC9zcGlubG9jay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4OTVmM2UKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3NwaW5sb2NrLmgKQEAgLTAsMCArMSw2MDYgQEAKKyNpZm5kZWYgX19MSU5VWF9TUElOTE9DS19ICisjZGVmaW5lIF9fTElOVVhfU1BJTkxPQ0tfSAorCisvKgorICogaW5jbHVkZS9saW51eC9zcGlubG9jay5oIC0gZ2VuZXJpYyBsb2NraW5nIGRlY2xhcmF0aW9ucworICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVlbXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvdGhyZWFkX2luZm8uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KKworI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4JLyogZm9yIGNwdSByZWxheCAqLworI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKworLyoKKyAqIE11c3QgZGVmaW5lIHRoZXNlIGJlZm9yZSBpbmNsdWRpbmcgb3RoZXIgZmlsZXMsIGlubGluZSBmdW5jdGlvbnMgbmVlZCB0aGVtCisgKi8KKyNkZWZpbmUgTE9DS19TRUNUSU9OX05BTUUgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgIi50ZXh0LmxvY2suIiBfX3N0cmluZ2lmeShLQlVJTERfQkFTRU5BTUUpCisKKyNkZWZpbmUgTE9DS19TRUNUSU9OX1NUQVJUKGV4dHJhKSAgICAgICAgICAgICAgIFwKKyAgICAgICAgIi5zdWJzZWN0aW9uIDFcblx0IiAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZXh0cmEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgIi5pZm5kZWYgIiBMT0NLX1NFQ1RJT05fTkFNRSAiXG5cdCIgICAgIFwKKyAgICAgICAgTE9DS19TRUNUSU9OX05BTUUgIjpcblx0IiAgICAgICAgICAgICAgIFwKKyAgICAgICAgIi5lbmRpZlxuIgorCisjZGVmaW5lIExPQ0tfU0VDVElPTl9FTkQgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICIucHJldmlvdXNcblx0IgorCisjZGVmaW5lIF9fbG9ja2Z1bmMgZmFzdGNhbGwgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiLnNwaW5sb2NrLnRleHQiKSkpCisKKy8qCisgKiBJZiBDT05GSUdfU01QIGlzIHNldCwgcHVsbCBpbiB0aGUgX3Jhd18qIGRlZmluaXRpb25zCisgKi8KKyNpZmRlZiBDT05GSUdfU01QCisKKyNkZWZpbmUgYXNzZXJ0X3NwaW5fbG9ja2VkKHgpCUJVR19PTighc3Bpbl9pc19sb2NrZWQoeCkpCisjaW5jbHVkZSA8YXNtL3NwaW5sb2NrLmg+CisKK2ludCBfX2xvY2tmdW5jIF9zcGluX3RyeWxvY2soc3BpbmxvY2tfdCAqbG9jayk7CitpbnQgX19sb2NrZnVuYyBfcmVhZF90cnlsb2NrKHJ3bG9ja190ICpsb2NrKTsKK2ludCBfX2xvY2tmdW5jIF93cml0ZV90cnlsb2NrKHJ3bG9ja190ICpsb2NrKTsKKwordm9pZCBfX2xvY2tmdW5jIF9zcGluX2xvY2soc3BpbmxvY2tfdCAqbG9jaykJX19hY3F1aXJlcyhzcGlubG9ja190KTsKK3ZvaWQgX19sb2NrZnVuYyBfcmVhZF9sb2NrKHJ3bG9ja190ICpsb2NrKQlfX2FjcXVpcmVzKHJ3bG9ja190KTsKK3ZvaWQgX19sb2NrZnVuYyBfd3JpdGVfbG9jayhyd2xvY2tfdCAqbG9jaykJX19hY3F1aXJlcyhyd2xvY2tfdCk7CisKK3ZvaWQgX19sb2NrZnVuYyBfc3Bpbl91bmxvY2soc3BpbmxvY2tfdCAqbG9jaykJX19yZWxlYXNlcyhzcGlubG9ja190KTsKK3ZvaWQgX19sb2NrZnVuYyBfcmVhZF91bmxvY2socndsb2NrX3QgKmxvY2spCV9fcmVsZWFzZXMocndsb2NrX3QpOwordm9pZCBfX2xvY2tmdW5jIF93cml0ZV91bmxvY2socndsb2NrX3QgKmxvY2spCV9fcmVsZWFzZXMocndsb2NrX3QpOworCit1bnNpZ25lZCBsb25nIF9fbG9ja2Z1bmMgX3NwaW5fbG9ja19pcnFzYXZlKHNwaW5sb2NrX3QgKmxvY2spCV9fYWNxdWlyZXMoc3BpbmxvY2tfdCk7Cit1bnNpZ25lZCBsb25nIF9fbG9ja2Z1bmMgX3JlYWRfbG9ja19pcnFzYXZlKHJ3bG9ja190ICpsb2NrKQlfX2FjcXVpcmVzKHJ3bG9ja190KTsKK3Vuc2lnbmVkIGxvbmcgX19sb2NrZnVuYyBfd3JpdGVfbG9ja19pcnFzYXZlKHJ3bG9ja190ICpsb2NrKQlfX2FjcXVpcmVzKHJ3bG9ja190KTsKKwordm9pZCBfX2xvY2tmdW5jIF9zcGluX2xvY2tfaXJxKHNwaW5sb2NrX3QgKmxvY2spCV9fYWNxdWlyZXMoc3BpbmxvY2tfdCk7Cit2b2lkIF9fbG9ja2Z1bmMgX3NwaW5fbG9ja19iaChzcGlubG9ja190ICpsb2NrKQkJX19hY3F1aXJlcyhzcGlubG9ja190KTsKK3ZvaWQgX19sb2NrZnVuYyBfcmVhZF9sb2NrX2lycShyd2xvY2tfdCAqbG9jaykJCV9fYWNxdWlyZXMocndsb2NrX3QpOwordm9pZCBfX2xvY2tmdW5jIF9yZWFkX2xvY2tfYmgocndsb2NrX3QgKmxvY2spCQlfX2FjcXVpcmVzKHJ3bG9ja190KTsKK3ZvaWQgX19sb2NrZnVuYyBfd3JpdGVfbG9ja19pcnEocndsb2NrX3QgKmxvY2spCQlfX2FjcXVpcmVzKHJ3bG9ja190KTsKK3ZvaWQgX19sb2NrZnVuYyBfd3JpdGVfbG9ja19iaChyd2xvY2tfdCAqbG9jaykJCV9fYWNxdWlyZXMocndsb2NrX3QpOworCit2b2lkIF9fbG9ja2Z1bmMgX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoc3BpbmxvY2tfdCAqbG9jaywgdW5zaWduZWQgbG9uZyBmbGFncykJX19yZWxlYXNlcyhzcGlubG9ja190KTsKK3ZvaWQgX19sb2NrZnVuYyBfc3Bpbl91bmxvY2tfaXJxKHNwaW5sb2NrX3QgKmxvY2spCQkJCV9fcmVsZWFzZXMoc3BpbmxvY2tfdCk7Cit2b2lkIF9fbG9ja2Z1bmMgX3NwaW5fdW5sb2NrX2JoKHNwaW5sb2NrX3QgKmxvY2spCQkJCV9fcmVsZWFzZXMoc3BpbmxvY2tfdCk7Cit2b2lkIF9fbG9ja2Z1bmMgX3JlYWRfdW5sb2NrX2lycXJlc3RvcmUocndsb2NrX3QgKmxvY2ssIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCV9fcmVsZWFzZXMocndsb2NrX3QpOwordm9pZCBfX2xvY2tmdW5jIF9yZWFkX3VubG9ja19pcnEocndsb2NrX3QgKmxvY2spCQkJCV9fcmVsZWFzZXMocndsb2NrX3QpOwordm9pZCBfX2xvY2tmdW5jIF9yZWFkX3VubG9ja19iaChyd2xvY2tfdCAqbG9jaykJCQkJCV9fcmVsZWFzZXMocndsb2NrX3QpOwordm9pZCBfX2xvY2tmdW5jIF93cml0ZV91bmxvY2tfaXJxcmVzdG9yZShyd2xvY2tfdCAqbG9jaywgdW5zaWduZWQgbG9uZyBmbGFncykJX19yZWxlYXNlcyhyd2xvY2tfdCk7Cit2b2lkIF9fbG9ja2Z1bmMgX3dyaXRlX3VubG9ja19pcnEocndsb2NrX3QgKmxvY2spCQkJCV9fcmVsZWFzZXMocndsb2NrX3QpOwordm9pZCBfX2xvY2tmdW5jIF93cml0ZV91bmxvY2tfYmgocndsb2NrX3QgKmxvY2spCQkJCV9fcmVsZWFzZXMocndsb2NrX3QpOworCitpbnQgX19sb2NrZnVuYyBfc3Bpbl90cnlsb2NrX2JoKHNwaW5sb2NrX3QgKmxvY2spOworaW50IF9fbG9ja2Z1bmMgZ2VuZXJpY19yYXdfcmVhZF90cnlsb2NrKHJ3bG9ja190ICpsb2NrKTsKK2ludCBpbl9sb2NrX2Z1bmN0aW9ucyh1bnNpZ25lZCBsb25nIGFkZHIpOworCisjZWxzZQorCisjZGVmaW5lIGluX2xvY2tfZnVuY3Rpb25zKEFERFIpIDAKKworI2lmICFkZWZpbmVkKENPTkZJR19QUkVFTVBUKSAmJiAhZGVmaW5lZChDT05GSUdfREVCVUdfU1BJTkxPQ0spCisjIGRlZmluZSBfYXRvbWljX2RlY19hbmRfbG9jayhhdG9taWMsbG9jaykgYXRvbWljX2RlY19hbmRfdGVzdChhdG9taWMpCisjIGRlZmluZSBBVE9NSUNfREVDX0FORF9MT0NLCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19ERUJVR19TUElOTE9DSworIAorI2RlZmluZSBTUElOTE9DS19NQUdJQwkweDFEMjQ0QjNDCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgbG9uZyBtYWdpYzsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGxvY2s7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50IGJhYmJsZTsKKwljb25zdCBjaGFyICptb2R1bGU7CisJY2hhciAqb3duZXI7CisJaW50IG9saW5lOworfSBzcGlubG9ja190OworI2RlZmluZSBTUElOX0xPQ0tfVU5MT0NLRUQgKHNwaW5sb2NrX3QpIHsgU1BJTkxPQ0tfTUFHSUMsIDAsIDEwLCBfX0ZJTEVfXyAsIE5VTEwsIDB9CisKKyNkZWZpbmUgc3Bpbl9sb2NrX2luaXQoeCkgXAorCWRvIHsgXAorCQkoeCktPm1hZ2ljID0gU1BJTkxPQ0tfTUFHSUM7IFwKKwkJKHgpLT5sb2NrID0gMDsgXAorCQkoeCktPmJhYmJsZSA9IDU7IFwKKwkJKHgpLT5tb2R1bGUgPSBfX0ZJTEVfXzsgXAorCQkoeCktPm93bmVyID0gTlVMTDsgXAorCQkoeCktPm9saW5lID0gMDsgXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgQ0hFQ0tfTE9DSyh4KSBcCisJZG8geyBcCisJIAlpZiAoKHgpLT5tYWdpYyAhPSBTUElOTE9DS19NQUdJQykgeyBcCisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiVkOiBzcGluX2lzX2xvY2tlZCBvbiB1bmluaXRpYWxpemVkIHNwaW5sb2NrICVwLlxuIiwgXAorCQkJCQlfX0ZJTEVfXywgX19MSU5FX18sICh4KSk7IFwKKwkJfSBcCisJfSB3aGlsZSgwKQorCisjZGVmaW5lIF9yYXdfc3Bpbl9sb2NrKHgpCQlcCisJZG8geyBcCisJIAlDSEVDS19MT0NLKHgpOyBcCisJCWlmICgoeCktPmxvY2smJih4KS0+YmFiYmxlKSB7IFwKKwkJCSh4KS0+YmFiYmxlLS07IFwKKwkJCXByaW50aygiJXM6JWQ6IHNwaW5fbG9jayglczolcCkgYWxyZWFkeSBsb2NrZWQgYnkgJXMvJWRcbiIsIFwKKwkJCQkJX19GSUxFX18sX19MSU5FX18sICh4KS0+bW9kdWxlLCBcCisJCQkJCSh4KSwgKHgpLT5vd25lciwgKHgpLT5vbGluZSk7IFwKKwkJfSBcCisJCSh4KS0+bG9jayA9IDE7IFwKKwkJKHgpLT5vd25lciA9IF9fRklMRV9fOyBcCisJCSh4KS0+b2xpbmUgPSBfX0xJTkVfXzsgXAorCX0gd2hpbGUgKDApCisKKy8qIHdpdGhvdXQgZGVidWdnaW5nLCBzcGluX2lzX2xvY2tlZCBvbiBVUCBhbHdheXMgc2F5cworICogRkFMU0UuIC0tPiBwcmludGsgaWYgYWxyZWFkeSBsb2NrZWQuICovCisjZGVmaW5lIHNwaW5faXNfbG9ja2VkKHgpIFwKKwkoeyBcCisJIAlDSEVDS19MT0NLKHgpOyBcCisJCWlmICgoeCktPmxvY2smJih4KS0+YmFiYmxlKSB7IFwKKwkJCSh4KS0+YmFiYmxlLS07IFwKKwkJCXByaW50aygiJXM6JWQ6IHNwaW5faXNfbG9ja2VkKCVzOiVwKSBhbHJlYWR5IGxvY2tlZCBieSAlcy8lZFxuIiwgXAorCQkJCQlfX0ZJTEVfXyxfX0xJTkVfXywgKHgpLT5tb2R1bGUsIFwKKwkJCQkJKHgpLCAoeCktPm93bmVyLCAoeCktPm9saW5lKTsgXAorCQl9IFwKKwkJMDsgXAorCX0pCisKKy8qIHdpdGggZGVidWdnaW5nLCBhc3NlcnRfc3Bpbl9sb2NrZWQoKSBvbiBVUCBkb2VzIGNoZWNrCisgKiB0aGUgbG9jayB2YWx1ZSBwcm9wZXJseSAqLworI2RlZmluZSBhc3NlcnRfc3Bpbl9sb2NrZWQoeCkgXAorCSh7IFwKKwkJQ0hFQ0tfTE9DSyh4KTsgXAorCQlCVUdfT04oISh4KS0+bG9jayk7IFwKKwl9KQorCisvKiB3aXRob3V0IGRlYnVnZ2luZywgc3Bpbl90cnlsb2NrIG9uIFVQIGFsd2F5cyBzYXlzCisgKiBUUlVFLiAtLT4gcHJpbnRrIGlmIGFscmVhZHkgbG9ja2VkLiAqLworI2RlZmluZSBfcmF3X3NwaW5fdHJ5bG9jayh4KSBcCisJKHsgXAorCSAJQ0hFQ0tfTE9DSyh4KTsgXAorCQlpZiAoKHgpLT5sb2NrJiYoeCktPmJhYmJsZSkgeyBcCisJCQkoeCktPmJhYmJsZS0tOyBcCisJCQlwcmludGsoIiVzOiVkOiBzcGluX3RyeWxvY2soJXM6JXApIGFscmVhZHkgbG9ja2VkIGJ5ICVzLyVkXG4iLCBcCisJCQkJCV9fRklMRV9fLF9fTElORV9fLCAoeCktPm1vZHVsZSwgXAorCQkJCQkoeCksICh4KS0+b3duZXIsICh4KS0+b2xpbmUpOyBcCisJCX0gXAorCQkoeCktPmxvY2sgPSAxOyBcCisJCSh4KS0+b3duZXIgPSBfX0ZJTEVfXzsgXAorCQkoeCktPm9saW5lID0gX19MSU5FX187IFwKKwkJMTsgXAorCX0pCisKKyNkZWZpbmUgc3Bpbl91bmxvY2tfd2FpdCh4KQlcCisJZG8geyBcCisJIAlDSEVDS19MT0NLKHgpOyBcCisJCWlmICgoeCktPmxvY2smJih4KS0+YmFiYmxlKSB7IFwKKwkJCSh4KS0+YmFiYmxlLS07IFwKKwkJCXByaW50aygiJXM6JWQ6IHNwaW5fdW5sb2NrX3dhaXQoJXM6JXApIG93bmVkIGJ5ICVzLyVkXG4iLCBcCisJCQkJCV9fRklMRV9fLF9fTElORV9fLCAoeCktPm1vZHVsZSwgKHgpLCBcCisJCQkJCSh4KS0+b3duZXIsICh4KS0+b2xpbmUpOyBcCisJCX1cCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBfcmF3X3NwaW5fdW5sb2NrKHgpIFwKKwlkbyB7IFwKKwkgCUNIRUNLX0xPQ0soeCk7IFwKKwkJaWYgKCEoeCktPmxvY2smJih4KS0+YmFiYmxlKSB7IFwKKwkJCSh4KS0+YmFiYmxlLS07IFwKKwkJCXByaW50aygiJXM6JWQ6IHNwaW5fdW5sb2NrKCVzOiVwKSBub3QgbG9ja2VkXG4iLCBcCisJCQkJCV9fRklMRV9fLF9fTElORV9fLCAoeCktPm1vZHVsZSwgKHgpKTtcCisJCX0gXAorCQkoeCktPmxvY2sgPSAwOyBcCisJfSB3aGlsZSAoMCkKKyNlbHNlCisvKgorICogZ2NjIHZlcnNpb25zIGJlZm9yZSB+Mi45NSBoYXZlIGEgbmFzdHkgYnVnIHdpdGggZW1wdHkgaW5pdGlhbGl6ZXJzLgorICovCisjaWYgKF9fR05VQ19fID4gMikKKyAgdHlwZWRlZiBzdHJ1Y3QgeyB9IHNwaW5sb2NrX3Q7CisgICNkZWZpbmUgU1BJTl9MT0NLX1VOTE9DS0VEIChzcGlubG9ja190KSB7IH0KKyNlbHNlCisgIHR5cGVkZWYgc3RydWN0IHsgaW50IGdjY19pc19idWdneTsgfSBzcGlubG9ja190OworICAjZGVmaW5lIFNQSU5fTE9DS19VTkxPQ0tFRCAoc3BpbmxvY2tfdCkgeyAwIH0KKyNlbmRpZgorCisvKgorICogSWYgQ09ORklHX1NNUCBpcyB1bnNldCwgZGVjbGFyZSB0aGUgX3Jhd18qIGRlZmluaXRpb25zIGFzIG5vcHMKKyAqLworI2RlZmluZSBzcGluX2xvY2tfaW5pdChsb2NrKQlkbyB7ICh2b2lkKShsb2NrKTsgfSB3aGlsZSgwKQorI2RlZmluZSBfcmF3X3NwaW5fbG9jayhsb2NrKQlkbyB7ICh2b2lkKShsb2NrKTsgfSB3aGlsZSgwKQorI2RlZmluZSBzcGluX2lzX2xvY2tlZChsb2NrKQkoKHZvaWQpKGxvY2spLCAwKQorI2RlZmluZSBhc3NlcnRfc3Bpbl9sb2NrZWQobG9jaykJZG8geyAodm9pZCkobG9jayk7IH0gd2hpbGUoMCkKKyNkZWZpbmUgX3Jhd19zcGluX3RyeWxvY2sobG9jaykJKCgodm9pZCkobG9jayksIDEpKQorI2RlZmluZSBzcGluX3VubG9ja193YWl0KGxvY2spCSh2b2lkKShsb2NrKQorI2RlZmluZSBfcmF3X3NwaW5fdW5sb2NrKGxvY2spIGRvIHsgKHZvaWQpKGxvY2spOyB9IHdoaWxlKDApCisjZW5kaWYgLyogQ09ORklHX0RFQlVHX1NQSU5MT0NLICovCisKKy8qIFJXIHNwaW5sb2NrczogTm8gZGVidWcgdmVyc2lvbiAqLworCisjaWYgKF9fR05VQ19fID4gMikKKyAgdHlwZWRlZiBzdHJ1Y3QgeyB9IHJ3bG9ja190OworICAjZGVmaW5lIFJXX0xPQ0tfVU5MT0NLRUQgKHJ3bG9ja190KSB7IH0KKyNlbHNlCisgIHR5cGVkZWYgc3RydWN0IHsgaW50IGdjY19pc19idWdneTsgfSByd2xvY2tfdDsKKyAgI2RlZmluZSBSV19MT0NLX1VOTE9DS0VEIChyd2xvY2tfdCkgeyAwIH0KKyNlbmRpZgorCisjZGVmaW5lIHJ3bG9ja19pbml0KGxvY2spCWRvIHsgKHZvaWQpKGxvY2spOyB9IHdoaWxlKDApCisjZGVmaW5lIF9yYXdfcmVhZF9sb2NrKGxvY2spCWRvIHsgKHZvaWQpKGxvY2spOyB9IHdoaWxlKDApCisjZGVmaW5lIF9yYXdfcmVhZF91bmxvY2sobG9jaykJZG8geyAodm9pZCkobG9jayk7IH0gd2hpbGUoMCkKKyNkZWZpbmUgX3Jhd193cml0ZV9sb2NrKGxvY2spCWRvIHsgKHZvaWQpKGxvY2spOyB9IHdoaWxlKDApCisjZGVmaW5lIF9yYXdfd3JpdGVfdW5sb2NrKGxvY2spCWRvIHsgKHZvaWQpKGxvY2spOyB9IHdoaWxlKDApCisjZGVmaW5lIHJlYWRfY2FuX2xvY2sobG9jaykJKCgodm9pZCkobG9jayksIDEpKQorI2RlZmluZSB3cml0ZV9jYW5fbG9jayhsb2NrKQkoKCh2b2lkKShsb2NrKSwgMSkpCisjZGVmaW5lIF9yYXdfcmVhZF90cnlsb2NrKGxvY2spICh7ICh2b2lkKShsb2NrKTsgKDEpOyB9KQorI2RlZmluZSBfcmF3X3dyaXRlX3RyeWxvY2sobG9jaykgKHsgKHZvaWQpKGxvY2spOyAoMSk7IH0pCisKKyNkZWZpbmUgX3NwaW5fdHJ5bG9jayhsb2NrKQkoe3ByZWVtcHRfZGlzYWJsZSgpOyBfcmF3X3NwaW5fdHJ5bG9jayhsb2NrKSA/IFwKKwkJCQkxIDogKHtwcmVlbXB0X2VuYWJsZSgpOyAwO30pO30pCisKKyNkZWZpbmUgX3JlYWRfdHJ5bG9jayhsb2NrKQkoe3ByZWVtcHRfZGlzYWJsZSgpO19yYXdfcmVhZF90cnlsb2NrKGxvY2spID8gXAorCQkJCTEgOiAoe3ByZWVtcHRfZW5hYmxlKCk7IDA7fSk7fSkKKworI2RlZmluZSBfd3JpdGVfdHJ5bG9jayhsb2NrKQkoe3ByZWVtcHRfZGlzYWJsZSgpOyBfcmF3X3dyaXRlX3RyeWxvY2sobG9jaykgPyBcCisJCQkJMSA6ICh7cHJlZW1wdF9lbmFibGUoKTsgMDt9KTt9KQorCisjZGVmaW5lIF9zcGluX3RyeWxvY2tfYmgobG9jaykJKHtwcmVlbXB0X2Rpc2FibGUoKTsgbG9jYWxfYmhfZGlzYWJsZSgpOyBcCisJCQkJX3Jhd19zcGluX3RyeWxvY2sobG9jaykgPyBcCisJCQkJMSA6ICh7cHJlZW1wdF9lbmFibGUoKTsgbG9jYWxfYmhfZW5hYmxlKCk7IDA7fSk7fSkKKworI2RlZmluZSBfc3Bpbl9sb2NrKGxvY2spCVwKK2RvIHsgXAorCXByZWVtcHRfZGlzYWJsZSgpOyBcCisJX3Jhd19zcGluX2xvY2sobG9jayk7IFwKKwlfX2FjcXVpcmUobG9jayk7IFwKK30gd2hpbGUoMCkKKworI2RlZmluZSBfd3JpdGVfbG9jayhsb2NrKSBcCitkbyB7IFwKKwlwcmVlbXB0X2Rpc2FibGUoKTsgXAorCV9yYXdfd3JpdGVfbG9jayhsb2NrKTsgXAorCV9fYWNxdWlyZShsb2NrKTsgXAorfSB3aGlsZSgwKQorIAorI2RlZmluZSBfcmVhZF9sb2NrKGxvY2spCVwKK2RvIHsgXAorCXByZWVtcHRfZGlzYWJsZSgpOyBcCisJX3Jhd19yZWFkX2xvY2sobG9jayk7IFwKKwlfX2FjcXVpcmUobG9jayk7IFwKK30gd2hpbGUoMCkKKworI2RlZmluZSBfc3Bpbl91bmxvY2sobG9jaykgXAorZG8geyBcCisJX3Jhd19zcGluX3VubG9jayhsb2NrKTsgXAorCXByZWVtcHRfZW5hYmxlKCk7IFwKKwlfX3JlbGVhc2UobG9jayk7IFwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgX3dyaXRlX3VubG9jayhsb2NrKSBcCitkbyB7IFwKKwlfcmF3X3dyaXRlX3VubG9jayhsb2NrKTsgXAorCXByZWVtcHRfZW5hYmxlKCk7IFwKKwlfX3JlbGVhc2UobG9jayk7IFwKK30gd2hpbGUoMCkKKworI2RlZmluZSBfcmVhZF91bmxvY2sobG9jaykgXAorZG8geyBcCisJX3Jhd19yZWFkX3VubG9jayhsb2NrKTsgXAorCXByZWVtcHRfZW5hYmxlKCk7IFwKKwlfX3JlbGVhc2UobG9jayk7IFwKK30gd2hpbGUoMCkKKworI2RlZmluZSBfc3Bpbl9sb2NrX2lycXNhdmUobG9jaywgZmxhZ3MpIFwKK2RvIHsJXAorCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsgXAorCXByZWVtcHRfZGlzYWJsZSgpOyBcCisJX3Jhd19zcGluX2xvY2sobG9jayk7IFwKKwlfX2FjcXVpcmUobG9jayk7IFwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgX3NwaW5fbG9ja19pcnEobG9jaykgXAorZG8geyBcCisJbG9jYWxfaXJxX2Rpc2FibGUoKTsgXAorCXByZWVtcHRfZGlzYWJsZSgpOyBcCisJX3Jhd19zcGluX2xvY2sobG9jayk7IFwKKwlfX2FjcXVpcmUobG9jayk7IFwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgX3NwaW5fbG9ja19iaChsb2NrKSBcCitkbyB7IFwKKwlsb2NhbF9iaF9kaXNhYmxlKCk7IFwKKwlwcmVlbXB0X2Rpc2FibGUoKTsgXAorCV9yYXdfc3Bpbl9sb2NrKGxvY2spOyBcCisJX19hY3F1aXJlKGxvY2spOyBcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIF9yZWFkX2xvY2tfaXJxc2F2ZShsb2NrLCBmbGFncykgXAorZG8gewlcCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOyBcCisJcHJlZW1wdF9kaXNhYmxlKCk7IFwKKwlfcmF3X3JlYWRfbG9jayhsb2NrKTsgXAorCV9fYWNxdWlyZShsb2NrKTsgXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBfcmVhZF9sb2NrX2lycShsb2NrKSBcCitkbyB7IFwKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOyBcCisJcHJlZW1wdF9kaXNhYmxlKCk7IFwKKwlfcmF3X3JlYWRfbG9jayhsb2NrKTsgXAorCV9fYWNxdWlyZShsb2NrKTsgXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBfcmVhZF9sb2NrX2JoKGxvY2spIFwKK2RvIHsgXAorCWxvY2FsX2JoX2Rpc2FibGUoKTsgXAorCXByZWVtcHRfZGlzYWJsZSgpOyBcCisJX3Jhd19yZWFkX2xvY2sobG9jayk7IFwKKwlfX2FjcXVpcmUobG9jayk7IFwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgX3dyaXRlX2xvY2tfaXJxc2F2ZShsb2NrLCBmbGFncykgXAorZG8gewlcCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOyBcCisJcHJlZW1wdF9kaXNhYmxlKCk7IFwKKwlfcmF3X3dyaXRlX2xvY2sobG9jayk7IFwKKwlfX2FjcXVpcmUobG9jayk7IFwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgX3dyaXRlX2xvY2tfaXJxKGxvY2spIFwKK2RvIHsgXAorCWxvY2FsX2lycV9kaXNhYmxlKCk7IFwKKwlwcmVlbXB0X2Rpc2FibGUoKTsgXAorCV9yYXdfd3JpdGVfbG9jayhsb2NrKTsgXAorCV9fYWNxdWlyZShsb2NrKTsgXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBfd3JpdGVfbG9ja19iaChsb2NrKSBcCitkbyB7IFwKKwlsb2NhbF9iaF9kaXNhYmxlKCk7IFwKKwlwcmVlbXB0X2Rpc2FibGUoKTsgXAorCV9yYXdfd3JpdGVfbG9jayhsb2NrKTsgXAorCV9fYWNxdWlyZShsb2NrKTsgXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShsb2NrLCBmbGFncykgXAorZG8geyBcCisJX3Jhd19zcGluX3VubG9jayhsb2NrKTsgXAorCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsgXAorCXByZWVtcHRfZW5hYmxlKCk7IFwKKwlfX3JlbGVhc2UobG9jayk7IFwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgX3NwaW5fdW5sb2NrX2lycShsb2NrKSBcCitkbyB7IFwKKwlfcmF3X3NwaW5fdW5sb2NrKGxvY2spOyBcCisJbG9jYWxfaXJxX2VuYWJsZSgpOyBcCisJcHJlZW1wdF9lbmFibGUoKTsgXAorCV9fcmVsZWFzZShsb2NrKTsgXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBfc3Bpbl91bmxvY2tfYmgobG9jaykgXAorZG8geyBcCisJX3Jhd19zcGluX3VubG9jayhsb2NrKTsgXAorCXByZWVtcHRfZW5hYmxlKCk7IFwKKwlsb2NhbF9iaF9lbmFibGUoKTsgXAorCV9fcmVsZWFzZShsb2NrKTsgXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBfd3JpdGVfdW5sb2NrX2JoKGxvY2spIFwKK2RvIHsgXAorCV9yYXdfd3JpdGVfdW5sb2NrKGxvY2spOyBcCisJcHJlZW1wdF9lbmFibGUoKTsgXAorCWxvY2FsX2JoX2VuYWJsZSgpOyBcCisJX19yZWxlYXNlKGxvY2spOyBcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIF9yZWFkX3VubG9ja19pcnFyZXN0b3JlKGxvY2ssIGZsYWdzKSBcCitkbyB7IFwKKwlfcmF3X3JlYWRfdW5sb2NrKGxvY2spOyBcCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOyBcCisJcHJlZW1wdF9lbmFibGUoKTsgXAorCV9fcmVsZWFzZShsb2NrKTsgXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBfd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUobG9jaywgZmxhZ3MpIFwKK2RvIHsgXAorCV9yYXdfd3JpdGVfdW5sb2NrKGxvY2spOyBcCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOyBcCisJcHJlZW1wdF9lbmFibGUoKTsgXAorCV9fcmVsZWFzZShsb2NrKTsgXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBfcmVhZF91bmxvY2tfaXJxKGxvY2spCVwKK2RvIHsgXAorCV9yYXdfcmVhZF91bmxvY2sobG9jayk7CVwKKwlsb2NhbF9pcnFfZW5hYmxlKCk7CVwKKwlwcmVlbXB0X2VuYWJsZSgpOwlcCisJX19yZWxlYXNlKGxvY2spOyBcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIF9yZWFkX3VubG9ja19iaChsb2NrKQlcCitkbyB7IFwKKwlfcmF3X3JlYWRfdW5sb2NrKGxvY2spOwlcCisJbG9jYWxfYmhfZW5hYmxlKCk7CVwKKwlwcmVlbXB0X2VuYWJsZSgpOwlcCisJX19yZWxlYXNlKGxvY2spOyBcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIF93cml0ZV91bmxvY2tfaXJxKGxvY2spCVwKK2RvIHsgXAorCV9yYXdfd3JpdGVfdW5sb2NrKGxvY2spOwlcCisJbG9jYWxfaXJxX2VuYWJsZSgpOwlcCisJcHJlZW1wdF9lbmFibGUoKTsJXAorCV9fcmVsZWFzZShsb2NrKTsgXAorfSB3aGlsZSAoMCkKKworI2VuZGlmIC8qICFTTVAgKi8KKworLyoKKyAqIERlZmluZSB0aGUgdmFyaW91cyBzcGluX2xvY2sgYW5kIHJ3X2xvY2sgbWV0aG9kcy4gIE5vdGUgd2UgZGVmaW5lIHRoZXNlCisgKiByZWdhcmRsZXNzIG9mIHdoZXRoZXIgQ09ORklHX1NNUCBvciBDT05GSUdfUFJFRU1QVCBhcmUgc2V0LiBUaGUgdmFyaW91cworICogbWV0aG9kcyBhcmUgZGVmaW5lZCBhcyBub3BzIGluIHRoZSBjYXNlIHRoZXkgYXJlIG5vdCByZXF1aXJlZC4KKyAqLworI2RlZmluZSBzcGluX3RyeWxvY2sobG9jaykJX19jb25kX2xvY2soX3NwaW5fdHJ5bG9jayhsb2NrKSkKKyNkZWZpbmUgcmVhZF90cnlsb2NrKGxvY2spCV9fY29uZF9sb2NrKF9yZWFkX3RyeWxvY2sobG9jaykpCisjZGVmaW5lIHdyaXRlX3RyeWxvY2sobG9jaykJX19jb25kX2xvY2soX3dyaXRlX3RyeWxvY2sobG9jaykpCisKKyNkZWZpbmUgc3Bpbl9sb2NrKGxvY2spCQlfc3Bpbl9sb2NrKGxvY2spCisjZGVmaW5lIHdyaXRlX2xvY2sobG9jaykJX3dyaXRlX2xvY2sobG9jaykKKyNkZWZpbmUgcmVhZF9sb2NrKGxvY2spCQlfcmVhZF9sb2NrKGxvY2spCisKKyNpZmRlZiBDT05GSUdfU01QCisjZGVmaW5lIHNwaW5fbG9ja19pcnFzYXZlKGxvY2ssIGZsYWdzKQlmbGFncyA9IF9zcGluX2xvY2tfaXJxc2F2ZShsb2NrKQorI2RlZmluZSByZWFkX2xvY2tfaXJxc2F2ZShsb2NrLCBmbGFncykJZmxhZ3MgPSBfcmVhZF9sb2NrX2lycXNhdmUobG9jaykKKyNkZWZpbmUgd3JpdGVfbG9ja19pcnFzYXZlKGxvY2ssIGZsYWdzKQlmbGFncyA9IF93cml0ZV9sb2NrX2lycXNhdmUobG9jaykKKyNlbHNlCisjZGVmaW5lIHNwaW5fbG9ja19pcnFzYXZlKGxvY2ssIGZsYWdzKQlfc3Bpbl9sb2NrX2lycXNhdmUobG9jaywgZmxhZ3MpCisjZGVmaW5lIHJlYWRfbG9ja19pcnFzYXZlKGxvY2ssIGZsYWdzKQlfcmVhZF9sb2NrX2lycXNhdmUobG9jaywgZmxhZ3MpCisjZGVmaW5lIHdyaXRlX2xvY2tfaXJxc2F2ZShsb2NrLCBmbGFncykJX3dyaXRlX2xvY2tfaXJxc2F2ZShsb2NrLCBmbGFncykKKyNlbmRpZgorCisjZGVmaW5lIHNwaW5fbG9ja19pcnEobG9jaykJCV9zcGluX2xvY2tfaXJxKGxvY2spCisjZGVmaW5lIHNwaW5fbG9ja19iaChsb2NrKQkJX3NwaW5fbG9ja19iaChsb2NrKQorCisjZGVmaW5lIHJlYWRfbG9ja19pcnEobG9jaykJCV9yZWFkX2xvY2tfaXJxKGxvY2spCisjZGVmaW5lIHJlYWRfbG9ja19iaChsb2NrKQkJX3JlYWRfbG9ja19iaChsb2NrKQorCisjZGVmaW5lIHdyaXRlX2xvY2tfaXJxKGxvY2spCQlfd3JpdGVfbG9ja19pcnEobG9jaykKKyNkZWZpbmUgd3JpdGVfbG9ja19iaChsb2NrKQkJX3dyaXRlX2xvY2tfYmgobG9jaykKKworI2RlZmluZSBzcGluX3VubG9jayhsb2NrKQlfc3Bpbl91bmxvY2sobG9jaykKKyNkZWZpbmUgd3JpdGVfdW5sb2NrKGxvY2spCV93cml0ZV91bmxvY2sobG9jaykKKyNkZWZpbmUgcmVhZF91bmxvY2sobG9jaykJX3JlYWRfdW5sb2NrKGxvY2spCisKKyNkZWZpbmUgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShsb2NrLCBmbGFncykJX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUobG9jaywgZmxhZ3MpCisjZGVmaW5lIHNwaW5fdW5sb2NrX2lycShsb2NrKQkJX3NwaW5fdW5sb2NrX2lycShsb2NrKQorI2RlZmluZSBzcGluX3VubG9ja19iaChsb2NrKQkJX3NwaW5fdW5sb2NrX2JoKGxvY2spCisKKyNkZWZpbmUgcmVhZF91bmxvY2tfaXJxcmVzdG9yZShsb2NrLCBmbGFncykJX3JlYWRfdW5sb2NrX2lycXJlc3RvcmUobG9jaywgZmxhZ3MpCisjZGVmaW5lIHJlYWRfdW5sb2NrX2lycShsb2NrKQkJCV9yZWFkX3VubG9ja19pcnEobG9jaykKKyNkZWZpbmUgcmVhZF91bmxvY2tfYmgobG9jaykJCQlfcmVhZF91bmxvY2tfYmgobG9jaykKKworI2RlZmluZSB3cml0ZV91bmxvY2tfaXJxcmVzdG9yZShsb2NrLCBmbGFncykJX3dyaXRlX3VubG9ja19pcnFyZXN0b3JlKGxvY2ssIGZsYWdzKQorI2RlZmluZSB3cml0ZV91bmxvY2tfaXJxKGxvY2spCQkJX3dyaXRlX3VubG9ja19pcnEobG9jaykKKyNkZWZpbmUgd3JpdGVfdW5sb2NrX2JoKGxvY2spCQkJX3dyaXRlX3VubG9ja19iaChsb2NrKQorCisjZGVmaW5lIHNwaW5fdHJ5bG9ja19iaChsb2NrKQkJCV9fY29uZF9sb2NrKF9zcGluX3RyeWxvY2tfYmgobG9jaykpCisKKyNkZWZpbmUgc3Bpbl90cnlsb2NrX2lycShsb2NrKSBcCisoeyBcCisJbG9jYWxfaXJxX2Rpc2FibGUoKTsgXAorCV9zcGluX3RyeWxvY2sobG9jaykgPyBcCisJMSA6ICh7bG9jYWxfaXJxX2VuYWJsZSgpOyAwOyB9KTsgXAorfSkKKworI2RlZmluZSBzcGluX3RyeWxvY2tfaXJxc2F2ZShsb2NrLCBmbGFncykgXAorKHsgXAorCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsgXAorCV9zcGluX3RyeWxvY2sobG9jaykgPyBcCisJMSA6ICh7bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOyAwO30pOyBcCit9KQorCisjaWZkZWYgQ09ORklHX0xPQ0tNRVRFUgorZXh0ZXJuIHZvaWQgX21ldGVyZWRfc3Bpbl9sb2NrICAgKHNwaW5sb2NrX3QgKmxvY2spOworZXh0ZXJuIHZvaWQgX21ldGVyZWRfc3Bpbl91bmxvY2sgKHNwaW5sb2NrX3QgKmxvY2spOworZXh0ZXJuIGludCAgX21ldGVyZWRfc3Bpbl90cnlsb2NrKHNwaW5sb2NrX3QgKmxvY2spOworZXh0ZXJuIHZvaWQgX21ldGVyZWRfcmVhZF9sb2NrICAgIChyd2xvY2tfdCAqbG9jayk7CitleHRlcm4gdm9pZCBfbWV0ZXJlZF9yZWFkX3VubG9jayAgKHJ3bG9ja190ICpsb2NrKTsKK2V4dGVybiB2b2lkIF9tZXRlcmVkX3dyaXRlX2xvY2sgICAocndsb2NrX3QgKmxvY2spOworZXh0ZXJuIHZvaWQgX21ldGVyZWRfd3JpdGVfdW5sb2NrIChyd2xvY2tfdCAqbG9jayk7CitleHRlcm4gaW50ICBfbWV0ZXJlZF9yZWFkX3RyeWxvY2sgKHJ3bG9ja190ICpsb2NrKTsKK2V4dGVybiBpbnQgIF9tZXRlcmVkX3dyaXRlX3RyeWxvY2socndsb2NrX3QgKmxvY2spOworI2VuZGlmCisKKy8qICJsb2NrIG9uIHJlZmVyZW5jZSBjb3VudCB6ZXJvIiAqLworI2lmbmRlZiBBVE9NSUNfREVDX0FORF9MT0NLCisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorZXh0ZXJuIGludCBfYXRvbWljX2RlY19hbmRfbG9jayhhdG9taWNfdCAqYXRvbWljLCBzcGlubG9ja190ICpsb2NrKTsKKyNlbmRpZgorCisjZGVmaW5lIGF0b21pY19kZWNfYW5kX2xvY2soYXRvbWljLGxvY2spIF9fY29uZF9sb2NrKF9hdG9taWNfZGVjX2FuZF9sb2NrKGF0b21pYyxsb2NrKSkKKworLyoKKyAqICBiaXQtYmFzZWQgc3Bpbl9sb2NrKCkKKyAqCisgKiBEb24ndCB1c2UgdGhpcyB1bmxlc3MgeW91IHJlYWxseSBuZWVkIHRvOiBzcGluX2xvY2soKSBhbmQgc3Bpbl91bmxvY2soKQorICogYXJlIHNpZ25pZmljYW50bHkgZmFzdGVyLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgYml0X3NwaW5fbG9jayhpbnQgYml0bnVtLCB1bnNpZ25lZCBsb25nICphZGRyKQoreworCS8qCisJICogQXNzdW1pbmcgdGhlIGxvY2sgaXMgdW5jb250ZW5kZWQsIHRoaXMgbmV2ZXIgZW50ZXJzCisJICogdGhlIGJvZHkgb2YgdGhlIG91dGVyIGxvb3AuIElmIGl0IGlzIGNvbnRlbmRlZCwgdGhlbgorCSAqIHdpdGhpbiB0aGUgaW5uZXIgbG9vcCBhIG5vbi1hdG9taWMgdGVzdCBpcyB1c2VkIHRvCisJICogYnVzeXdhaXQgd2l0aCBsZXNzIGJ1cyBjb250ZW50aW9uIGZvciBhIGdvb2QgdGltZSB0bworCSAqIGF0dGVtcHQgdG8gYWNxdWlyZSB0aGUgbG9jayBiaXQuCisJICovCisJcHJlZW1wdF9kaXNhYmxlKCk7CisjaWYgZGVmaW5lZChDT05GSUdfU01QKSB8fCBkZWZpbmVkKENPTkZJR19ERUJVR19TUElOTE9DSykKKwl3aGlsZSAodGVzdF9hbmRfc2V0X2JpdChiaXRudW0sIGFkZHIpKSB7CisJCXdoaWxlICh0ZXN0X2JpdChiaXRudW0sIGFkZHIpKSB7CisJCQlwcmVlbXB0X2VuYWJsZSgpOworCQkJY3B1X3JlbGF4KCk7CisJCQlwcmVlbXB0X2Rpc2FibGUoKTsKKwkJfQorCX0KKyNlbmRpZgorCV9fYWNxdWlyZShiaXRsb2NrKTsKK30KKworLyoKKyAqIFJldHVybiB0cnVlIGlmIGl0IHdhcyBhY3F1aXJlZAorICovCitzdGF0aWMgaW5saW5lIGludCBiaXRfc3Bpbl90cnlsb2NrKGludCBiaXRudW0sIHVuc2lnbmVkIGxvbmcgKmFkZHIpCit7CisJcHJlZW1wdF9kaXNhYmxlKCk7CQorI2lmIGRlZmluZWQoQ09ORklHX1NNUCkgfHwgZGVmaW5lZChDT05GSUdfREVCVUdfU1BJTkxPQ0spCisJaWYgKHRlc3RfYW5kX3NldF9iaXQoYml0bnVtLCBhZGRyKSkgeworCQlwcmVlbXB0X2VuYWJsZSgpOworCQlyZXR1cm4gMDsKKwl9CisjZW5kaWYKKwlfX2FjcXVpcmUoYml0bG9jayk7CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiAgYml0LWJhc2VkIHNwaW5fdW5sb2NrKCkKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGJpdF9zcGluX3VubG9jayhpbnQgYml0bnVtLCB1bnNpZ25lZCBsb25nICphZGRyKQoreworI2lmIGRlZmluZWQoQ09ORklHX1NNUCkgfHwgZGVmaW5lZChDT05GSUdfREVCVUdfU1BJTkxPQ0spCisJQlVHX09OKCF0ZXN0X2JpdChiaXRudW0sIGFkZHIpKTsKKwlzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKTsKKwljbGVhcl9iaXQoYml0bnVtLCBhZGRyKTsKKyNlbmRpZgorCXByZWVtcHRfZW5hYmxlKCk7CisJX19yZWxlYXNlKGJpdGxvY2spOworfQorCisvKgorICogUmV0dXJuIHRydWUgaWYgdGhlIGxvY2sgaXMgaGVsZC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgYml0X3NwaW5faXNfbG9ja2VkKGludCBiaXRudW0sIHVuc2lnbmVkIGxvbmcgKmFkZHIpCit7CisjaWYgZGVmaW5lZChDT05GSUdfU01QKSB8fCBkZWZpbmVkKENPTkZJR19ERUJVR19TUElOTE9DSykKKwlyZXR1cm4gdGVzdF9iaXQoYml0bnVtLCBhZGRyKTsKKyNlbGlmIGRlZmluZWQgQ09ORklHX1BSRUVNUFQKKwlyZXR1cm4gcHJlZW1wdF9jb3VudCgpOworI2Vsc2UKKwlyZXR1cm4gMTsKKyNlbmRpZgorfQorCisjZGVmaW5lIERFRklORV9TUElOTE9DSyh4KSBzcGlubG9ja190IHggPSBTUElOX0xPQ0tfVU5MT0NLRUQKKyNkZWZpbmUgREVGSU5FX1JXTE9DSyh4KSByd2xvY2tfdCB4ID0gUldfTE9DS19VTkxPQ0tFRAorCisvKioKKyAqIHNwaW5fY2FuX2xvY2sgLSB3b3VsZCBzcGluX3RyeWxvY2soKSBzdWNjZWVkPworICogQGxvY2s6IHRoZSBzcGlubG9jayBpbiBxdWVzdGlvbi4KKyAqLworI2RlZmluZSBzcGluX2Nhbl9sb2NrKGxvY2spCQkoIXNwaW5faXNfbG9ja2VkKGxvY2spKQorCisjZW5kaWYgLyogX19MSU5VWF9TUElOTE9DS19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N0YWxsaW9uLmggYi9pbmNsdWRlL2xpbnV4L3N0YWxsaW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg5Yjc3YgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvc3RhbGxpb24uaApAQCAtMCwwICsxLDE1NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICoJc3RhbGxpb24uaCAgLS0gc3RhbGxpb24gbXVsdGlwb3J0IHNlcmlhbCBkcml2ZXIuCisgKgorICoJQ29weXJpZ2h0IChDKSAxOTk2LTE5OTggIFN0YWxsaW9uIFRlY2hub2xvZ2llcworICoJQ29weXJpZ2h0IChDKSAxOTk0LTE5OTYgIEdyZWcgVW5nZXJlci4KKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKgkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICoJYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqCU1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCUdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICoJWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqCWFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKglGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmCV9TVEFMTElPTl9ICisjZGVmaW5lCV9TVEFMTElPTl9ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKglEZWZpbmUgaW1wb3J0YW50IGRyaXZlciBjb25zdGFudHMgaGVyZS4KKyAqLworI2RlZmluZQlTVExfTUFYQlJEUwkJNAorI2RlZmluZQlTVExfTUFYUEFORUxTCQk0CisjZGVmaW5lCVNUTF9NQVhCQU5LUwkJOAorI2RlZmluZQlTVExfUE9SVFNQRVJQQU5FTAkxNgorI2RlZmluZQlTVExfTUFYUE9SVFMJCTY0CisjZGVmaW5lCVNUTF9NQVhERVZTCQkoU1RMX01BWEJSRFMgKiBTVExfTUFYUE9SVFMpCisKKworLyoKKyAqCURlZmluZSBhIHNldCBvZiBzdHJ1Y3R1cmVzIHRvIGhvbGQgYWxsIHRoZSBib2FyZC9wYW5lbC9wb3J0IGluZm8KKyAqCWZvciBvdXIgcG9ydHMuIFRoZXNlIHdpbGwgYmUgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGFzIHJlcXVpcmVkLgorICovCisKKy8qCisgKglEZWZpbmUgYSByaW5nIHF1ZXVlIHN0cnVjdHVyZSBmb3IgZWFjaCBwb3J0LiBUaGlzIHdpbGwgaG9sZCB0aGUKKyAqCVRYIGRhdGEgd2FpdGluZyB0byBiZSBvdXRwdXQuIENoYXJhY3RlcnMgYXJlIGZlZCBpbnRvIHRoaXMgYnVmZmVyCisgKglmcm9tIHRoZSBsaW5lIGRpc2NpcGxpbmUgKG9yIGV2ZW4gZGlyZWN0IGZyb20gdXNlciBzcGFjZSEpIGFuZAorICoJdGhlbiBmZWQgaW50byB0aGUgVUFSVHMgZHVyaW5nIGludGVycnVwdHMuIFdpbGwgdXNlIGEgY2xhc3NpYyByaW5nCisgKglxdWV1ZSBoZXJlIGZvciB0aGlzLiBUaGUgZ29vZCB0aGluZyBhYm91dCB0aGlzIHR5cGUgb2YgcmluZyBxdWV1ZQorICoJaXMgdGhhdCB0aGUgaGVhZCBhbmQgdGFpbCBwb2ludGVycyBjYW4gYmUgdXBkYXRlZCB3aXRob3V0IGludGVycnVwdAorICoJcHJvdGVjdGlvbiAtIHNpbmNlICJ3cml0ZSIgY29kZSBvbmx5IG5lZWRzIHRvIGNoYW5nZSB0aGUgaGVhZCwgYW5kCisgKglpbnRlcnJ1cHQgY29kZSBvbmx5IG5lZWRzIHRvIGNoYW5nZSB0aGUgdGFpbC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCWNoYXIJKmJ1ZjsKKwljaGFyCSpoZWFkOworCWNoYXIJKnRhaWw7Cit9IHN0bHJxX3Q7CisKKy8qCisgKglQb3J0LCBwYW5lbCBhbmQgYm9hcmQgc3RydWN0dXJlcyB0byBob2xkIHN0YXR1cyBpbmZvIGFib3V0IGVhY2guCisgKglUaGUgYm9hcmQgc3RydWN0dXJlIGNvbnRhaW5zIHBvaW50ZXJzIHRvIHN0cnVjdHVyZXMgZm9yIGVhY2ggcGFuZWwKKyAqCWNvbm5lY3RlZCB0byBpdCwgYW5kIGluIHR1cm4gZWFjaCBwYW5lbCBzdHJ1Y3R1cmUgY29udGFpbnMgcG9pbnRlcnMKKyAqCWZvciBlYWNoIHBvcnQgc3RydWN0dXJlIGZvciBlYWNoIHBvcnQgb24gdGhhdCBwYW5lbC4gTm90ZSB0aGF0CisgKgl0aGUgcG9ydCBzdHJ1Y3R1cmUgYWxzbyBjb250YWlucyB0aGUgYm9hcmQgYW5kIHBhbmVsIG51bWJlciB0aGF0IGl0CisgKglpcyBhc3NvY2lhdGVkIHdpdGgsIHRoaXMgbWFrZXMgaXQgKGZhaXJseSkgZWFzeSB0byBnZXQgYmFjayB0byB0aGUKKyAqCWJvYXJkL3BhbmVsIGluZm8gZm9yIGEgcG9ydC4KKyAqLwordHlwZWRlZiBzdHJ1Y3Qgc3RscG9ydCB7CisJdW5zaWduZWQgbG9uZwkJbWFnaWM7CisJaW50CQkJcG9ydG5yOworCWludAkJCXBhbmVsbnI7CisJaW50CQkJYnJkbnI7CisJaW50CQkJaW9hZGRyOworCWludAkJCXVhcnRhZGRyOworCWludAkJCXBhZ2VucjsKKwlsb25nCQkJaXN0YXRlOworCWludAkJCWZsYWdzOworCWludAkJCWJhdWRfYmFzZTsKKwlpbnQJCQljdXN0b21fZGl2aXNvcjsKKwlpbnQJCQljbG9zZV9kZWxheTsKKwlpbnQJCQljbG9zaW5nX3dhaXQ7CisJaW50CQkJcmVmY291bnQ7CisJaW50CQkJb3BlbndhaXRjbnQ7CisJaW50CQkJYnJrbGVuOworCXVuc2lnbmVkIGludAkJc2lnczsKKwl1bnNpZ25lZCBpbnQJCXJ4aWdub3JlbXNrOworCXVuc2lnbmVkIGludAkJcnhtYXJrbXNrOworCXVuc2lnbmVkIGludAkJaW1yOworCXVuc2lnbmVkIGludAkJY3JlbmFibGU7CisJdW5zaWduZWQgbG9uZwkJY2xrOworCXVuc2lnbmVkIGxvbmcJCWh3aWQ7CisJdm9pZAkJCSp1YXJ0cDsKKwlzdHJ1Y3QgdHR5X3N0cnVjdAkqdHR5OworCXdhaXRfcXVldWVfaGVhZF90CW9wZW5fd2FpdDsKKwl3YWl0X3F1ZXVlX2hlYWRfdAljbG9zZV93YWl0OworCXN0cnVjdCB3b3JrX3N0cnVjdAl0cXVldWU7CisJY29tc3RhdHNfdAkJc3RhdHM7CisJc3RscnFfdAkJCXR4OworfSBzdGxwb3J0X3Q7CisKK3R5cGVkZWYgc3RydWN0IHN0bHBhbmVsIHsKKwl1bnNpZ25lZCBsb25nCW1hZ2ljOworCWludAkJcGFuZWxucjsKKwlpbnQJCWJyZG5yOworCWludAkJcGFnZW5yOworCWludAkJbnJwb3J0czsKKwlpbnQJCWlvYmFzZTsKKwl2b2lkCQkqdWFydHA7CisJdm9pZAkJKCppc3IpKHN0cnVjdCBzdGxwYW5lbCAqcGFuZWxwLCB1bnNpZ25lZCBpbnQgaW9iYXNlKTsKKwl1bnNpZ25lZCBpbnQJaHdpZDsKKwl1bnNpZ25lZCBpbnQJYWNrbWFzazsKKwlzdGxwb3J0X3QJKnBvcnRzW1NUTF9QT1JUU1BFUlBBTkVMXTsKK30gc3RscGFuZWxfdDsKKwordHlwZWRlZiBzdHJ1Y3Qgc3RsYnJkIHsKKwl1bnNpZ25lZCBsb25nCW1hZ2ljOworCWludAkJYnJkbnI7CisJaW50CQlicmR0eXBlOworCWludAkJc3RhdGU7CisJaW50CQlucnBhbmVsczsKKwlpbnQJCW5ycG9ydHM7CisJaW50CQlucmJua3M7CisJaW50CQlpcnE7CisJaW50CQlpcnF0eXBlOworCWludAkJKCppc3IpKHN0cnVjdCBzdGxicmQgKmJyZHApOworCXVuc2lnbmVkIGludAlpb2FkZHIxOworCXVuc2lnbmVkIGludAlpb2FkZHIyOworCXVuc2lnbmVkIGludAlpb3NpemUxOworCXVuc2lnbmVkIGludAlpb3NpemUyOworCXVuc2lnbmVkIGludAlpb3N0YXR1czsKKwl1bnNpZ25lZCBpbnQJaW9jdHJsOworCXVuc2lnbmVkIGludAlpb2N0cmx2YWw7CisJdW5zaWduZWQgaW50CWh3aWQ7CisJdW5zaWduZWQgbG9uZwljbGs7CisJdW5zaWduZWQgaW50CWJua3BhZ2VhZGRyW1NUTF9NQVhCQU5LU107CisJdW5zaWduZWQgaW50CWJua3N0YXRhZGRyW1NUTF9NQVhCQU5LU107CisJc3RscGFuZWxfdAkqYm5rMnBhbmVsW1NUTF9NQVhCQU5LU107CisJc3RscGFuZWxfdAkqcGFuZWxzW1NUTF9NQVhQQU5FTFNdOworfSBzdGxicmRfdDsKKworCisvKgorICoJRGVmaW5lIE1BR0lDIG51bWJlcnMgdXNlZCBmb3IgYWJvdmUgc3RydWN0dXJlcy4KKyAqLworI2RlZmluZQlTVExfUE9SVE1BR0lDCTB4NWE3MTgyYzkKKyNkZWZpbmUJU1RMX1BBTkVMTUFHSUMJMHg3ZWY2MjFhMQorI2RlZmluZQlTVExfQk9BUkRNQUdJQwkweGEyMjY3ZjUyCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdGF0LmggYi9pbmNsdWRlL2xpbnV4L3N0YXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmYyYTEyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9zdGF0LmgKQEAgLTAsMCArMSw3NyBAQAorI2lmbmRlZiBfTElOVVhfU1RBVF9ICisjZGVmaW5lIF9MSU5VWF9TVEFUX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGFzbS9zdGF0Lmg+CisKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX0tFUk5FTF9fKSB8fCAhZGVmaW5lZChfX0dMSUJDX18pIHx8IChfX0dMSUJDX18gPCAyKQorCisjZGVmaW5lIFNfSUZNVCAgMDAxNzAwMDAKKyNkZWZpbmUgU19JRlNPQ0sgMDE0MDAwMAorI2RlZmluZSBTX0lGTE5LCSAwMTIwMDAwCisjZGVmaW5lIFNfSUZSRUcgIDAxMDAwMDAKKyNkZWZpbmUgU19JRkJMSyAgMDA2MDAwMAorI2RlZmluZSBTX0lGRElSICAwMDQwMDAwCisjZGVmaW5lIFNfSUZDSFIgIDAwMjAwMDAKKyNkZWZpbmUgU19JRklGTyAgMDAxMDAwMAorI2RlZmluZSBTX0lTVUlEICAwMDA0MDAwCisjZGVmaW5lIFNfSVNHSUQgIDAwMDIwMDAKKyNkZWZpbmUgU19JU1ZUWCAgMDAwMTAwMAorCisjZGVmaW5lIFNfSVNMTksobSkJKCgobSkgJiBTX0lGTVQpID09IFNfSUZMTkspCisjZGVmaW5lIFNfSVNSRUcobSkJKCgobSkgJiBTX0lGTVQpID09IFNfSUZSRUcpCisjZGVmaW5lIFNfSVNESVIobSkJKCgobSkgJiBTX0lGTVQpID09IFNfSUZESVIpCisjZGVmaW5lIFNfSVNDSFIobSkJKCgobSkgJiBTX0lGTVQpID09IFNfSUZDSFIpCisjZGVmaW5lIFNfSVNCTEsobSkJKCgobSkgJiBTX0lGTVQpID09IFNfSUZCTEspCisjZGVmaW5lIFNfSVNGSUZPKG0pCSgoKG0pICYgU19JRk1UKSA9PSBTX0lGSUZPKQorI2RlZmluZSBTX0lTU09DSyhtKQkoKChtKSAmIFNfSUZNVCkgPT0gU19JRlNPQ0spCisKKyNkZWZpbmUgU19JUldYVSAwMDcwMAorI2RlZmluZSBTX0lSVVNSIDAwNDAwCisjZGVmaW5lIFNfSVdVU1IgMDAyMDAKKyNkZWZpbmUgU19JWFVTUiAwMDEwMAorCisjZGVmaW5lIFNfSVJXWEcgMDAwNzAKKyNkZWZpbmUgU19JUkdSUCAwMDA0MAorI2RlZmluZSBTX0lXR1JQIDAwMDIwCisjZGVmaW5lIFNfSVhHUlAgMDAwMTAKKworI2RlZmluZSBTX0lSV1hPIDAwMDA3CisjZGVmaW5lIFNfSVJPVEggMDAwMDQKKyNkZWZpbmUgU19JV09USCAwMDAwMgorI2RlZmluZSBTX0lYT1RIIDAwMDAxCisKKyNlbmRpZgorCisjaWZkZWYgX19LRVJORUxfXworI2RlZmluZSBTX0lSV1hVR08JKFNfSVJXWFV8U19JUldYR3xTX0lSV1hPKQorI2RlZmluZSBTX0lBTExVR08JKFNfSVNVSUR8U19JU0dJRHxTX0lTVlRYfFNfSVJXWFVHTykKKyNkZWZpbmUgU19JUlVHTwkJKFNfSVJVU1J8U19JUkdSUHxTX0lST1RIKQorI2RlZmluZSBTX0lXVUdPCQkoU19JV1VTUnxTX0lXR1JQfFNfSVdPVEgpCisjZGVmaW5lIFNfSVhVR08JCShTX0lYVVNSfFNfSVhHUlB8U19JWE9USCkKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorCitzdHJ1Y3Qga3N0YXQgeworCXVuc2lnbmVkIGxvbmcJaW5vOworCWRldl90CQlkZXY7CisJdW1vZGVfdAkJbW9kZTsKKwl1bnNpZ25lZCBpbnQJbmxpbms7CisJdWlkX3QJCXVpZDsKKwlnaWRfdAkJZ2lkOworCWRldl90CQlyZGV2OworCWxvZmZfdAkJc2l6ZTsKKwlzdHJ1Y3QgdGltZXNwZWMgIGF0aW1lOworCXN0cnVjdCB0aW1lc3BlYwltdGltZTsKKwlzdHJ1Y3QgdGltZXNwZWMJY3RpbWU7CisJdW5zaWduZWQgbG9uZwlibGtzaXplOworCXVuc2lnbmVkIGxvbmcJYmxvY2tzOworfTsKKworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdGF0ZnMuaCBiL2luY2x1ZGUvbGludXgvc3RhdGZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ4M2EyYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvc3RhdGZzLmgKQEAgLTAsMCArMSwyMiBAQAorI2lmbmRlZiBfTElOVVhfU1RBVEZTX0gKKyNkZWZpbmUgX0xJTlVYX1NUQVRGU19ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjaW5jbHVkZSA8YXNtL3N0YXRmcy5oPgorCitzdHJ1Y3Qga3N0YXRmcyB7CisJbG9uZyBmX3R5cGU7CisJbG9uZyBmX2JzaXplOworCXNlY3Rvcl90IGZfYmxvY2tzOworCXNlY3Rvcl90IGZfYmZyZWU7CisJc2VjdG9yX3QgZl9iYXZhaWw7CisJc2VjdG9yX3QgZl9maWxlczsKKwlzZWN0b3JfdCBmX2ZmcmVlOworCV9fa2VybmVsX2ZzaWRfdCBmX2ZzaWQ7CisJbG9uZyBmX25hbWVsZW47CisJbG9uZyBmX2Zyc2l6ZTsKKwlsb25nIGZfc3BhcmVbNV07Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3RkZGVmLmggYi9pbmNsdWRlL2xpbnV4L3N0ZGRlZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzYTJjYWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3N0ZGRlZi5oCkBAIC0wLDAgKzEsMjAgQEAKKyNpZm5kZWYgX0xJTlVYX1NURERFRl9ICisjZGVmaW5lIF9MSU5VWF9TVERERUZfSAorCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKworI3VuZGVmIE5VTEwKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorI2RlZmluZSBOVUxMIDAKKyNlbHNlCisjZGVmaW5lIE5VTEwgKCh2b2lkICopMCkKKyNlbmRpZgorCisjdW5kZWYgb2Zmc2V0b2YKKyNpZmRlZiBfX2NvbXBpbGVyX29mZnNldG9mCisjZGVmaW5lIG9mZnNldG9mKFRZUEUsTUVNQkVSKSBfX2NvbXBpbGVyX29mZnNldG9mKFRZUEUsTUVNQkVSKQorI2Vsc2UKKyNkZWZpbmUgb2Zmc2V0b2YoVFlQRSwgTUVNQkVSKSAoKHNpemVfdCkgJigoVFlQRSAqKTApLT5NRU1CRVIpCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N0b3BfbWFjaGluZS5oIGIvaW5jbHVkZS9saW51eC9zdG9wX21hY2hpbmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTFhODAzZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvc3RvcF9tYWNoaW5lLmgKQEAgLTAsMCArMSw1MiBAQAorI2lmbmRlZiBfTElOVVhfU1RPUF9NQUNISU5FCisjZGVmaW5lIF9MSU5VWF9TVE9QX01BQ0hJTkUKKy8qICJCb2dvbG9jayI6IHN0b3AgdGhlIGVudGlyZSBtYWNoaW5lLCBkaXNhYmxlIGludGVycnVwdHMuICBUaGlzIGlzIGEKKyAgIHZlcnkgaGVhdnkgbG9jaywgd2hpY2ggaXMgZXF1aXZhbGVudCB0byBncmFiYmluZyBldmVyeSBzcGlubG9jaworICAgKGFuZCBtb3JlKS4gIFNvIHRoZSAicmVhZCIgc2lkZSB0byBzdWNoIGEgbG9jayBpcyBhbnl0aGluZyB3aGljaAorICAgZGlhYmxlcyBwcmVlZW1wdC4gKi8KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisKKyNpZiBkZWZpbmVkKENPTkZJR19TVE9QX01BQ0hJTkUpICYmIGRlZmluZWQoQ09ORklHX1NNUCkKKy8qKgorICogc3RvcF9tYWNoaW5lX3J1bjogZnJlZXplIHRoZSBtYWNoaW5lIG9uIGFsbCBDUFVzIGFuZCBydW4gdGhpcyBmdW5jdGlvbgorICogQGZuOiB0aGUgZnVuY3Rpb24gdG8gcnVuCisgKiBAZGF0YTogdGhlIGRhdGEgcHRyIGZvciB0aGUgQGZuKCkKKyAqIEBjcHU6IHRoZSBjcHUgdG8gcnVuIEBmbigpIG9uIChvciBhbnksIGlmIEBjcHUgPT0gTlJfQ1BVUy4KKyAqCisgKiBEZXNjcmlwdGlvbjogVGhpcyBjYXVzZXMgYSB0aHJlYWQgdG8gYmUgc2NoZWR1bGVkIG9uIGV2ZXJ5IG90aGVyIGNwdSwKKyAqIGVhY2ggb2Ygd2hpY2ggZGlzYWJsZXMgaW50ZXJydXB0cywgYW5kIGZpbmFsbHkgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQKKyAqIG9uIHRoZSBjdXJyZW50IENQVS4gIFRoZSByZXN1bHQgaXMgdGhhdCBub29uZSBpcyBob2xkaW5nIGEgc3BpbmxvY2sKKyAqIG9yIGluc2lkZSBhbnkgb3RoZXIgcHJlZW1wdC1kaXNhYmxlZCByZWdpb24gd2hlbiBAZm4oKSBydW5zLgorICoKKyAqIFRoaXMgY2FuIGJlIHRob3VnaHQgb2YgYXMgYSB2ZXJ5IGhlYXZ5IHdyaXRlIGxvY2ssIGVxdWl2YWxlbnQgdG8KKyAqIGdyYWJiaW5nIGV2ZXJ5IHNwaW5sb2NrIGluIHRoZSBrZXJuZWwuICovCitpbnQgc3RvcF9tYWNoaW5lX3J1bihpbnQgKCpmbikodm9pZCAqKSwgdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IGNwdSk7CisKKy8qKgorICogX19zdG9wX21hY2hpbmVfcnVuOiBmcmVlemUgdGhlIG1hY2hpbmUgb24gYWxsIENQVXMgYW5kIHJ1biB0aGlzIGZ1bmN0aW9uCisgKiBAZm46IHRoZSBmdW5jdGlvbiB0byBydW4KKyAqIEBkYXRhOiB0aGUgZGF0YSBwdHIgZm9yIHRoZSBAZm4KKyAqIEBjcHU6IHRoZSBjcHUgdG8gcnVuIEBmbiBvbiAob3IgYW55LCBpZiBAY3B1ID09IE5SX0NQVVMuCisgKgorICogRGVzY3JpcHRpb246IFRoaXMgaXMgYSBzcGVjaWFsIHZlcnNpb24gb2YgdGhlIGFib3ZlLCB3aGljaCByZXR1cm5zIHRoZQorICogdGhyZWFkIHdoaWNoIGhhcyBydW4gQGZuKCk6IGt0aHJlYWRfc3RvcCB3aWxsIHJldHVybiB0aGUgcmV0dXJuIHZhbHVlCisgKiBvZiBAZm4oKS4gIFVzZWQgYnkgaG90cGx1ZyBjcHUuCisgKi8KK3N0cnVjdCB0YXNrX3N0cnVjdCAqX19zdG9wX21hY2hpbmVfcnVuKGludCAoKmZuKSh2b2lkICopLCB2b2lkICpkYXRhLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgY3B1KTsKKworI2Vsc2UKKworc3RhdGljIGlubGluZSBpbnQgc3RvcF9tYWNoaW5lX3J1bihpbnQgKCpmbikodm9pZCAqKSwgdm9pZCAqZGF0YSwKKwkJCQkgICB1bnNpZ25lZCBpbnQgY3B1KQoreworCWludCByZXQ7CisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwlyZXQgPSBmbihkYXRhKTsKKwlsb2NhbF9pcnFfZW5hYmxlKCk7CisJcmV0dXJuIHJldDsKK30KKyNlbmRpZiAvKiBDT05GSUdfU01QICovCisjZW5kaWYgLyogX0xJTlVYX1NUT1BfTUFDSElORSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdHJpbmcuaCBiL2luY2x1ZGUvbGludXgvc3RyaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjlmYzU5NAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvc3RyaW5nLmgKQEAgLTAsMCArMSw5NiBAQAorI2lmbmRlZiBfTElOVVhfU1RSSU5HX0hfCisjZGVmaW5lIF9MSU5VWF9TVFJJTkdfSF8KKworLyogV2UgZG9uJ3Qgd2FudCBzdHJpbmdzLmggc3R1ZmYgYmVpbmcgdXNlciBieSB1c2VyIHN0dWZmIGJ5IGFjY2lkZW50ICovCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgkvKiBmb3IgaW5saW5lICovCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4JLyogZm9yIHNpemVfdCAqLworI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgkvKiBmb3IgTlVMTCAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK2V4dGVybiBjaGFyICogc3RycGJyayhjb25zdCBjaGFyICosY29uc3QgY2hhciAqKTsKK2V4dGVybiBjaGFyICogc3Ryc2VwKGNoYXIgKiosY29uc3QgY2hhciAqKTsKK2V4dGVybiBfX2tlcm5lbF9zaXplX3Qgc3Ryc3BuKGNvbnN0IGNoYXIgKixjb25zdCBjaGFyICopOworZXh0ZXJuIF9fa2VybmVsX3NpemVfdCBzdHJjc3BuKGNvbnN0IGNoYXIgKixjb25zdCBjaGFyICopOworCisvKgorICogSW5jbHVkZSBtYWNoaW5lIHNwZWNpZmljIGlubGluZSByb3V0aW5lcworICovCisjaW5jbHVkZSA8YXNtL3N0cmluZy5oPgorCisjaWZuZGVmIF9fSEFWRV9BUkNIX1NUUkNQWQorZXh0ZXJuIGNoYXIgKiBzdHJjcHkoY2hhciAqLGNvbnN0IGNoYXIgKik7CisjZW5kaWYKKyNpZm5kZWYgX19IQVZFX0FSQ0hfU1RSTkNQWQorZXh0ZXJuIGNoYXIgKiBzdHJuY3B5KGNoYXIgKixjb25zdCBjaGFyICosIF9fa2VybmVsX3NpemVfdCk7CisjZW5kaWYKKyNpZm5kZWYgX19IQVZFX0FSQ0hfU1RSTENQWQorc2l6ZV90IHN0cmxjcHkoY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CisjZW5kaWYKKyNpZm5kZWYgX19IQVZFX0FSQ0hfU1RSQ0FUCitleHRlcm4gY2hhciAqIHN0cmNhdChjaGFyICosIGNvbnN0IGNoYXIgKik7CisjZW5kaWYKKyNpZm5kZWYgX19IQVZFX0FSQ0hfU1RSTkNBVAorZXh0ZXJuIGNoYXIgKiBzdHJuY2F0KGNoYXIgKiwgY29uc3QgY2hhciAqLCBfX2tlcm5lbF9zaXplX3QpOworI2VuZGlmCisjaWZuZGVmIF9fSEFWRV9BUkNIX1NUUkxDQVQKK2V4dGVybiBzaXplX3Qgc3RybGNhdChjaGFyICosIGNvbnN0IGNoYXIgKiwgX19rZXJuZWxfc2l6ZV90KTsKKyNlbmRpZgorI2lmbmRlZiBfX0hBVkVfQVJDSF9TVFJDTVAKK2V4dGVybiBpbnQgc3RyY21wKGNvbnN0IGNoYXIgKixjb25zdCBjaGFyICopOworI2VuZGlmCisjaWZuZGVmIF9fSEFWRV9BUkNIX1NUUk5DTVAKK2V4dGVybiBpbnQgc3RybmNtcChjb25zdCBjaGFyICosY29uc3QgY2hhciAqLF9fa2VybmVsX3NpemVfdCk7CisjZW5kaWYKKyNpZm5kZWYgX19IQVZFX0FSQ0hfU1RSTklDTVAKK2V4dGVybiBpbnQgc3RybmljbXAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIF9fa2VybmVsX3NpemVfdCk7CisjZW5kaWYKKyNpZm5kZWYgX19IQVZFX0FSQ0hfU1RSQ0hSCitleHRlcm4gY2hhciAqIHN0cmNocihjb25zdCBjaGFyICosaW50KTsKKyNlbmRpZgorI2lmbmRlZiBfX0hBVkVfQVJDSF9TVFJOQ0hSCitleHRlcm4gY2hhciAqIHN0cm5jaHIoY29uc3QgY2hhciAqLCBzaXplX3QsIGludCk7CisjZW5kaWYKKyNpZm5kZWYgX19IQVZFX0FSQ0hfU1RSUkNIUgorZXh0ZXJuIGNoYXIgKiBzdHJyY2hyKGNvbnN0IGNoYXIgKixpbnQpOworI2VuZGlmCisjaWZuZGVmIF9fSEFWRV9BUkNIX1NUUlNUUgorZXh0ZXJuIGNoYXIgKiBzdHJzdHIoY29uc3QgY2hhciAqLGNvbnN0IGNoYXIgKik7CisjZW5kaWYKKyNpZm5kZWYgX19IQVZFX0FSQ0hfU1RSTEVOCitleHRlcm4gX19rZXJuZWxfc2l6ZV90IHN0cmxlbihjb25zdCBjaGFyICopOworI2VuZGlmCisjaWZuZGVmIF9fSEFWRV9BUkNIX1NUUk5MRU4KK2V4dGVybiBfX2tlcm5lbF9zaXplX3Qgc3Rybmxlbihjb25zdCBjaGFyICosX19rZXJuZWxfc2l6ZV90KTsKKyNlbmRpZgorCisjaWZuZGVmIF9fSEFWRV9BUkNIX01FTVNFVAorZXh0ZXJuIHZvaWQgKiBtZW1zZXQodm9pZCAqLGludCxfX2tlcm5lbF9zaXplX3QpOworI2VuZGlmCisjaWZuZGVmIF9fSEFWRV9BUkNIX01FTUNQWQorZXh0ZXJuIHZvaWQgKiBtZW1jcHkodm9pZCAqLGNvbnN0IHZvaWQgKixfX2tlcm5lbF9zaXplX3QpOworI2VuZGlmCisjaWZuZGVmIF9fSEFWRV9BUkNIX01FTU1PVkUKK2V4dGVybiB2b2lkICogbWVtbW92ZSh2b2lkICosY29uc3Qgdm9pZCAqLF9fa2VybmVsX3NpemVfdCk7CisjZW5kaWYKKyNpZm5kZWYgX19IQVZFX0FSQ0hfTUVNU0NBTgorZXh0ZXJuIHZvaWQgKiBtZW1zY2FuKHZvaWQgKixpbnQsX19rZXJuZWxfc2l6ZV90KTsKKyNlbmRpZgorI2lmbmRlZiBfX0hBVkVfQVJDSF9NRU1DTVAKK2V4dGVybiBpbnQgbWVtY21wKGNvbnN0IHZvaWQgKixjb25zdCB2b2lkICosX19rZXJuZWxfc2l6ZV90KTsKKyNlbmRpZgorI2lmbmRlZiBfX0hBVkVfQVJDSF9NRU1DSFIKK2V4dGVybiB2b2lkICogbWVtY2hyKGNvbnN0IHZvaWQgKixpbnQsX19rZXJuZWxfc2l6ZV90KTsKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYKKyNlbmRpZiAvKiBfTElOVVhfU1RSSU5HX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N0cmluZ2lmeS5oIGIvaW5jbHVkZS9saW51eC9zdHJpbmdpZnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjQzODgzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9zdHJpbmdpZnkuaApAQCAtMCwwICsxLDEyIEBACisjaWZuZGVmIF9fTElOVVhfU1RSSU5HSUZZX0gKKyNkZWZpbmUgX19MSU5VWF9TVFJJTkdJRllfSAorCisvKiBJbmRpcmVjdCBzdHJpbmdpZmljYXRpb24uICBEb2luZyB0d28gbGV2ZWxzIGFsbG93cyB0aGUgcGFyYW1ldGVyIHRvIGJlIGEKKyAqIG1hY3JvIGl0c2VsZi4gIEZvciBleGFtcGxlLCBjb21waWxlIHdpdGggLURGT089YmFyLCBfX3N0cmluZ2lmeShGT08pCisgKiBjb252ZXJ0cyB0byAiYmFyIi4KKyAqLworCisjZGVmaW5lIF9fc3RyaW5naWZ5XzEoeCkJI3gKKyNkZWZpbmUgX19zdHJpbmdpZnkoeCkJCV9fc3RyaW5naWZ5XzEoeCkKKworI2VuZGlmCS8qICFfX0xJTlVYX1NUUklOR0lGWV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9hdXRoLmggYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9hdXRoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRlYmMyNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL2F1dGguaApAQCAtMCwwICsxLDE0OSBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvbGludXgvc3VucnBjL2F1dGguaAorICoKKyAqIERlY2xhcmF0aW9ucyBmb3IgdGhlIFJQQyBjbGllbnQgYXV0aGVudGljYXRpb24gbWFjaGluZXJ5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NiwgT2xhZiBLaXJjaCA8b2tpckBtb25hZC5zd2IuZGU+CisgKi8KKworI2lmbmRlZiBfTElOVVhfU1VOUlBDX0FVVEhfSAorI2RlZmluZSBfTElOVVhfU1VOUlBDX0FVVEhfSAorCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvc3VucnBjL3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc3VucnBjL21zZ19wcm90Lmg+CisjaW5jbHVkZSA8bGludXgvc3VucnBjL3hkci5oPgorCisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorCisvKiBzaXplIG9mIHRoZSBub2RlbmFtZSBidWZmZXIgKi8KKyNkZWZpbmUgVU5YX01BWE5PREVOQU1FCTMyCisKKy8qIE1heGltdW0gc2l6ZSAoaW4gYnl0ZXMpIG9mIGFuIHJwYyBjcmVkZW50aWFsIG9yIHZlcmlmaWVyICovCisjZGVmaW5lIFJQQ19NQVhfQVVUSF9TSVpFICg0MDApCisKKy8qIFdvcmsgYXJvdW5kIHRoZSBsYWNrIG9mIGEgVkZTIGNyZWRlbnRpYWwgKi8KK3N0cnVjdCBhdXRoX2NyZWQgeworCXVpZF90CXVpZDsKKwlnaWRfdAlnaWQ7CisJc3RydWN0IGdyb3VwX2luZm8gKmdyb3VwX2luZm87Cit9OworCisvKgorICogQ2xpZW50IHVzZXIgY3JlZGVudGlhbHMKKyAqLworc3RydWN0IHJwY19jcmVkIHsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZQljcl9oYXNoOwkvKiBoYXNoIGNoYWluICovCisJc3RydWN0IHJwY19jcmVkb3BzICoJY3Jfb3BzOworCXVuc2lnbmVkIGxvbmcJCWNyX2V4cGlyZTsJLyogd2hlbiB0byBnYyAqLworCWF0b21pY190CQljcl9jb3VudDsJLyogcmVmIGNvdW50ICovCisJdW5zaWduZWQgc2hvcnQJCWNyX2ZsYWdzOwkvKiB2YXJpb3VzIGZsYWdzICovCisjaWZkZWYgUlBDX0RFQlVHCisJdW5zaWduZWQgbG9uZwkJY3JfbWFnaWM7CS8qIDB4MGY0YWE0ZjAgKi8KKyNlbmRpZgorCisJdWlkX3QJCQljcl91aWQ7CisKKwkvKiBwZXItZmxhdm9yIGRhdGEgKi8KK307CisjZGVmaW5lIFJQQ0FVVEhfQ1JFRF9MT0NLRUQJMHgwMDAxCisjZGVmaW5lIFJQQ0FVVEhfQ1JFRF9VUFRPREFURQkweDAwMDIKKworI2RlZmluZSBSUENBVVRIX0NSRURfTUFHSUMJMHgwZjRhYTRmMAorCisvKgorICogQ2xpZW50IGF1dGhlbnRpY2F0aW9uIGhhbmRsZQorICovCisjZGVmaW5lIFJQQ19DUkVEQ0FDSEVfTlIJOAorI2RlZmluZSBSUENfQ1JFRENBQ0hFX01BU0sJKFJQQ19DUkVEQ0FDSEVfTlIgLSAxKQorc3RydWN0IHJwY19jcmVkX2NhY2hlIHsKKwlzdHJ1Y3QgaGxpc3RfaGVhZAloYXNodGFibGVbUlBDX0NSRURDQUNIRV9OUl07CisJdW5zaWduZWQgbG9uZwkJbmV4dGdjOwkJLyogbmV4dCBnYXJiYWdlIGNvbGxlY3Rpb24gKi8KKwl1bnNpZ25lZCBsb25nCQlleHBpcmU7CQkvKiBjYWNoZSBleHBpcnkgaW50ZXJ2YWwgKi8KK307CisKK3N0cnVjdCBycGNfYXV0aCB7CisJdW5zaWduZWQgaW50CQlhdV9jc2xhY2s7CS8qIGNhbGwgY3JlZCBzaXplIGVzdGltYXRlICovCisJdW5zaWduZWQgaW50CQlhdV9yc2xhY2s7CS8qIHJlcGx5IHZlcmYgc2l6ZSBndWVzcyAqLworCXVuc2lnbmVkIGludAkJYXVfZmxhZ3M7CS8qIHZhcmlvdXMgZmxhZ3MgKi8KKwlzdHJ1Y3QgcnBjX2F1dGhvcHMgKglhdV9vcHM7CQkvKiBvcGVyYXRpb25zICovCisJcnBjX2F1dGhmbGF2b3JfdAlhdV9mbGF2b3I7CS8qIHBzZXVkb2ZsYXZvciAobm90ZSBtYXkKKwkJCQkJCSAqIGRpZmZlciBmcm9tIHRoZSBmbGF2b3IgaW4KKwkJCQkJCSAqIGF1X29wcy0+YXVfZmxhdm9yIGluIGdzcworCQkJCQkJICogY2FzZSkgKi8KKwlhdG9taWNfdAkJYXVfY291bnQ7CS8qIFJlZmVyZW5jZSBjb3VudGVyICovCisKKwlzdHJ1Y3QgcnBjX2NyZWRfY2FjaGUgKglhdV9jcmVkY2FjaGU7CisJLyogcGVyLWZsYXZvciBkYXRhICovCit9OworI2RlZmluZSBSUENfQVVUSF9QUk9DX0NSRURTCTB4MDAxMAkJLyogcHJvY2VzcyBjcmVkcyAoaW5jbHVkaW5nCisJCQkJCQkgKiB1aWQvZ2lkLCBmc1t1Z11pZCwgZ2lkcykKKwkJCQkJCSAqLworCisvKgorICogQ2xpZW50IGF1dGhlbnRpY2F0aW9uIG9wcworICovCitzdHJ1Y3QgcnBjX2F1dGhvcHMgeworCXN0cnVjdCBtb2R1bGUJCSpvd25lcjsKKwlycGNfYXV0aGZsYXZvcl90CWF1X2ZsYXZvcjsJLyogZmxhdm9yIChSUENfQVVUSF8qKSAqLworI2lmZGVmIFJQQ19ERUJVRworCWNoYXIgKgkJCWF1X25hbWU7CisjZW5kaWYKKwlzdHJ1Y3QgcnBjX2F1dGggKgkoKmNyZWF0ZSkoc3RydWN0IHJwY19jbG50ICosIHJwY19hdXRoZmxhdm9yX3QpOworCXZvaWQJCQkoKmRlc3Ryb3kpKHN0cnVjdCBycGNfYXV0aCAqKTsKKworCXN0cnVjdCBycGNfY3JlZCAqCSgqbG9va3VwX2NyZWQpKHN0cnVjdCBycGNfYXV0aCAqLCBzdHJ1Y3QgYXV0aF9jcmVkICosIGludCk7CisJc3RydWN0IHJwY19jcmVkICoJKCpjcmNyZWF0ZSkoc3RydWN0IHJwY19hdXRoKiwgc3RydWN0IGF1dGhfY3JlZCAqLCBpbnQpOworfTsKKworc3RydWN0IHJwY19jcmVkb3BzIHsKKwljb25zdCBjaGFyICoJCWNyX25hbWU7CS8qIE5hbWUgb2YgdGhlIGF1dGggZmxhdm91ciAqLworCXZvaWQJCQkoKmNyZGVzdHJveSkoc3RydWN0IHJwY19jcmVkICopOworCisJaW50CQkJKCpjcm1hdGNoKShzdHJ1Y3QgYXV0aF9jcmVkICosIHN0cnVjdCBycGNfY3JlZCAqLCBpbnQpOworCXUzMiAqCQkJKCpjcm1hcnNoYWwpKHN0cnVjdCBycGNfdGFzayAqLCB1MzIgKik7CisJaW50CQkJKCpjcnJlZnJlc2gpKHN0cnVjdCBycGNfdGFzayAqKTsKKwl1MzIgKgkJCSgqY3J2YWxpZGF0ZSkoc3RydWN0IHJwY190YXNrICosIHUzMiAqKTsKKwlpbnQJCQkoKmNyd3JhcF9yZXEpKHN0cnVjdCBycGNfdGFzayAqLCBreGRycHJvY190LAorCQkJCQkJdm9pZCAqLCB1MzIgKiwgdm9pZCAqKTsKKwlpbnQJCQkoKmNydW53cmFwX3Jlc3ApKHN0cnVjdCBycGNfdGFzayAqLCBreGRycHJvY190LAorCQkJCQkJdm9pZCAqLCB1MzIgKiwgdm9pZCAqKTsKK307CisKK2V4dGVybiBzdHJ1Y3QgcnBjX2F1dGhvcHMJYXV0aHVuaXhfb3BzOworZXh0ZXJuIHN0cnVjdCBycGNfYXV0aG9wcwlhdXRobnVsbF9vcHM7CisjaWZkZWYgQ09ORklHX1NVTlJQQ19TRUNVUkUKK2V4dGVybiBzdHJ1Y3QgcnBjX2F1dGhvcHMJYXV0aGRlc19vcHM7CisjZW5kaWYKKworaW50CQkJcnBjYXV0aF9yZWdpc3RlcihzdHJ1Y3QgcnBjX2F1dGhvcHMgKik7CitpbnQJCQlycGNhdXRoX3VucmVnaXN0ZXIoc3RydWN0IHJwY19hdXRob3BzICopOworc3RydWN0IHJwY19hdXRoICoJcnBjYXV0aF9jcmVhdGUocnBjX2F1dGhmbGF2b3JfdCwgc3RydWN0IHJwY19jbG50ICopOwordm9pZAkJCXJwY2F1dGhfZGVzdHJveShzdHJ1Y3QgcnBjX2F1dGggKik7CitzdHJ1Y3QgcnBjX2NyZWQgKglycGNhdXRoX2xvb2t1cF9jcmVkY2FjaGUoc3RydWN0IHJwY19hdXRoICosIHN0cnVjdCBhdXRoX2NyZWQgKiwgaW50KTsKK3N0cnVjdCBycGNfY3JlZCAqCXJwY2F1dGhfbG9va3VwY3JlZChzdHJ1Y3QgcnBjX2F1dGggKiwgaW50KTsKK3N0cnVjdCBycGNfY3JlZCAqCXJwY2F1dGhfYmluZGNyZWQoc3RydWN0IHJwY190YXNrICopOwordm9pZAkJCXJwY2F1dGhfaG9sZGNyZWQoc3RydWN0IHJwY190YXNrICopOwordm9pZAkJCXB1dF9ycGNjcmVkKHN0cnVjdCBycGNfY3JlZCAqKTsKK3ZvaWQJCQlycGNhdXRoX3VuYmluZGNyZWQoc3RydWN0IHJwY190YXNrICopOwordTMyICoJCQlycGNhdXRoX21hcnNoY3JlZChzdHJ1Y3QgcnBjX3Rhc2sgKiwgdTMyICopOwordTMyICoJCQlycGNhdXRoX2NoZWNrdmVyZihzdHJ1Y3QgcnBjX3Rhc2sgKiwgdTMyICopOworaW50CQkJcnBjYXV0aF93cmFwX3JlcShzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2ssIGt4ZHJwcm9jX3QgZW5jb2RlLCB2b2lkICpycXN0cCwgdTMyICpkYXRhLCB2b2lkICpvYmopOworaW50CQkJcnBjYXV0aF91bndyYXBfcmVzcChzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2ssIGt4ZHJwcm9jX3QgZGVjb2RlLCB2b2lkICpycXN0cCwgdTMyICpkYXRhLCB2b2lkICpvYmopOworaW50CQkJcnBjYXV0aF9yZWZyZXNoY3JlZChzdHJ1Y3QgcnBjX3Rhc2sgKik7Cit2b2lkCQkJcnBjYXV0aF9pbnZhbGNyZWQoc3RydWN0IHJwY190YXNrICopOworaW50CQkJcnBjYXV0aF91cHRvZGF0ZWNyZWQoc3RydWN0IHJwY190YXNrICopOworaW50CQkJcnBjYXV0aF9pbml0X2NyZWRjYWNoZShzdHJ1Y3QgcnBjX2F1dGggKiwgdW5zaWduZWQgbG9uZyk7Cit2b2lkCQkJcnBjYXV0aF9mcmVlX2NyZWRjYWNoZShzdHJ1Y3QgcnBjX2F1dGggKik7CisKK3N0YXRpYyBpbmxpbmUKK3N0cnVjdCBycGNfY3JlZCAqCWdldF9ycGNjcmVkKHN0cnVjdCBycGNfY3JlZCAqY3JlZCkKK3sKKwlhdG9taWNfaW5jKCZjcmVkLT5jcl9jb3VudCk7CisJcmV0dXJuIGNyZWQ7Cit9CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYgLyogX0xJTlVYX1NVTlJQQ19BVVRIX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VucnBjL2F1dGhfZ3NzLmggYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9hdXRoX2dzcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzMDg0ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9hdXRoX2dzcy5oCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2xpbnV4L2F1dGhfZ3NzLmgKKyAqCisgKiBEZWNsYXJhdGlvbnMgZm9yIFJQQ1NFQ19HU1MKKyAqCisgKiBEdWcgU29uZyA8ZHVnc29uZ0Btb25rZXkub3JnPgorICogQW5keSBBZGFtc29uIDxhbmRyb3NAdW1pY2guZWR1PgorICogQnJ1Y2UgRmllbGRzIDxiZmllbGRzQHVtaWNoLmVkdT4KKyAqIENvcHlyaWdodCAoYykgMjAwMCBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBNaWNoaWdhbgorICoKKyAqICRJZCQKKyAqLworCisjaWZuZGVmIF9MSU5VWF9TVU5SUENfQVVUSF9HU1NfSAorI2RlZmluZSBfTElOVVhfU1VOUlBDX0FVVEhfR1NTX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxsaW51eC9zdW5ycGMvYXV0aC5oPgorI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9zdmMuaD4KKyNpbmNsdWRlIDxsaW51eC9zdW5ycGMvZ3NzX2FwaS5oPgorCisjZGVmaW5lIFJQQ19HU1NfVkVSU0lPTgkJMQorCisjZGVmaW5lIE1BWFNFUSAweDgwMDAwMDAwIC8qIG1heGltdW0gbGVnYWwgc2VxdWVuY2UgbnVtYmVyLCBmcm9tIHJmYyAyMjAzICovCisKK2VudW0gcnBjX2dzc19wcm9jIHsKKwlSUENfR1NTX1BST0NfREFUQSA9IDAsCisJUlBDX0dTU19QUk9DX0lOSVQgPSAxLAorCVJQQ19HU1NfUFJPQ19DT05USU5VRV9JTklUID0gMiwKKwlSUENfR1NTX1BST0NfREVTVFJPWSA9IDMKK307CisKK2VudW0gcnBjX2dzc19zdmMgeworCVJQQ19HU1NfU1ZDX05PTkUgPSAxLAorCVJQQ19HU1NfU1ZDX0lOVEVHUklUWSA9IDIsCisJUlBDX0dTU19TVkNfUFJJVkFDWSA9IDMKK307CisKKy8qIG9uLXRoZS13aXJlIGdzcyBjcmVkOiAqLworc3RydWN0IHJwY19nc3Nfd2lyZV9jcmVkIHsKKwl1MzIJCQlnY192OwkJLyogdmVyc2lvbiAqLworCXUzMgkJCWdjX3Byb2M7CS8qIGNvbnRyb2wgcHJvY2VkdXJlICovCisJdTMyCQkJZ2Nfc2VxOwkJLyogc2VxdWVuY2UgbnVtYmVyICovCisJdTMyCQkJZ2Nfc3ZjOwkJLyogc2VydmljZSAqLworCXN0cnVjdCB4ZHJfbmV0b2JqCWdjX2N0eDsJCS8qIGNvbnRleHQgaGFuZGxlICovCit9OworCisvKiBvbi10aGUtd2lyZSBnc3MgdmVyaWZpZXI6ICovCitzdHJ1Y3QgcnBjX2dzc193aXJlX3ZlcmYgeworCXUzMgkJCWd2X2ZsYXZvcjsKKwlzdHJ1Y3QgeGRyX25ldG9iaglndl92ZXJmOworfTsKKworLyogcmV0dXJuIGZyb20gZ3NzIE5VTEwgUFJPQyBpbml0IHNlYyBjb250ZXh0ICovCitzdHJ1Y3QgcnBjX2dzc19pbml0X3JlcyB7CisJc3RydWN0IHhkcl9uZXRvYmoJZ3JfY3R4OwkJLyogY29udGV4dCBoYW5kbGUgKi8KKwl1MzIJCQlncl9tYWpvcjsJLyogbWFqb3Igc3RhdHVzICovCisJdTMyCQkJZ3JfbWlub3I7CS8qIG1pbm9yIHN0YXR1cyAqLworCXUzMgkJCWdyX3dpbjsJCS8qIHNlcXVlbmNlIHdpbmRvdyAqLworCXN0cnVjdCB4ZHJfbmV0b2JqCWdyX3Rva2VuOwkvKiB0b2tlbiAqLworfTsKKworLyogVGhlIGdzc19jbF9jdHggc3RydWN0IGhvbGRzIGFsbCB0aGUgaW5mb3JtYXRpb24gdGhlIHJwY3NlY19nc3MgY2xpZW50CisgKiBjb2RlIG5lZWRzIHRvIGtub3cgYWJvdXQgYSBzaW5nbGUgc2VjdXJpdHkgY29udGV4dC4gIEluIHBhcnRpY3VsYXIsCisgKiBnY19nc3NfY3R4IGlzIHRoZSBjb250ZXh0IGhhbmRsZSB0aGF0IGlzIHVzZWQgdG8gZG8gZ3NzLWFwaSBjYWxscywgd2hpbGUKKyAqIGdjX3dpcmVfY3R4IGlzIHRoZSBjb250ZXh0IGhhbmRsZSB0aGF0IGlzIHVzZWQgdG8gaWRlbnRpZnkgdGhlIGNvbnRleHQgb24KKyAqIHRoZSB3aXJlIHdoZW4gY29tbXVuaWNhdGluZyB3aXRoIGEgc2VydmVyLiAqLworCitzdHJ1Y3QgZ3NzX2NsX2N0eCB7CisJYXRvbWljX3QJCWNvdW50OworCWVudW0gcnBjX2dzc19wcm9jCWdjX3Byb2M7CisJdTMyCQkJZ2Nfc2VxOworCXNwaW5sb2NrX3QJCWdjX3NlcV9sb2NrOworCXN0cnVjdCBnc3NfY3R4CQkqZ2NfZ3NzX2N0eDsKKwlzdHJ1Y3QgeGRyX25ldG9iaglnY193aXJlX2N0eDsKKwl1MzIJCQlnY193aW47CisJdW5zaWduZWQgbG9uZwkJZ2NfZXhwaXJ5OworfTsKKworc3RydWN0IGdzc191cGNhbGxfbXNnOworc3RydWN0IGdzc19jcmVkIHsKKwlzdHJ1Y3QgcnBjX2NyZWQJCWdjX2Jhc2U7CisJZW51bSBycGNfZ3NzX3N2YwlnY19zZXJ2aWNlOworCXN0cnVjdCBnc3NfY2xfY3R4CSpnY19jdHg7CisJc3RydWN0IGdzc191cGNhbGxfbXNnCSpnY191cGNhbGw7Cit9OworCisjZGVmaW5lIGdjX3VpZAkJCWdjX2Jhc2UuY3JfdWlkCisjZGVmaW5lIGdjX2NvdW50CQlnY19iYXNlLmNyX2NvdW50CisjZGVmaW5lIGdjX2ZsYWdzCQlnY19iYXNlLmNyX2ZsYWdzCisjZGVmaW5lIGdjX2V4cGlyZQkJZ2NfYmFzZS5jcl9leHBpcmUKKwordm9pZCBwcmludF9oZXhsKHUzMiAqcCwgdV9pbnQgbGVuZ3RoLCB1X2ludCBvZmZzZXQpOworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9MSU5VWF9TVU5SUENfQVVUSF9HU1NfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9jYWNoZS5oIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvY2FjaGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODY0MDYzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvY2FjaGUuaApAQCAtMCwwICsxLDMxMiBAQAorLyoKKyAqIGluY2x1ZGUvbGludXgvc3VucnBjL2NhY2hlLmgKKyAqCisgKiBHZW5lcmljIGNvZGUgZm9yIHZhcmlvdXMgYXV0aGVudGljYXRpb24tcmVsYXRlZCBjYWNoZXMKKyAqIHVzZWQgYnkgc3VucnBjIGNsaWVudHMgYW5kIHNlcnZlcnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAyIE5laWwgQnJvd24gPG5laWxiQGNzZS51bnN3LmVkdS5hdT4KKyAqCisgKiBSZWxlYXNlZCB1bmRlciB0ZXJtcyBpbiBHUEwgdmVyc2lvbiAyLiAgU2VlIENPUFlJTkcuCisgKgorICovCisKKyNpZm5kZWYgX0xJTlVYX1NVTlJQQ19DQUNIRV9IXworI2RlZmluZSBfTElOVVhfU1VOUlBDX0NBQ0hFX0hfCisKKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKworLyoKKyAqIEVhY2ggY2FjaGUgcmVxdWlyZXM6CisgKiAgLSBBICdzdHJ1Y3QgY2FjaGVfZGV0YWlsJyB3aGljaCBjb250YWlucyBpbmZvcm1hdGlvbiBzcGVjaWZpYyB0byB0aGUgY2FjaGUKKyAqICAgIGZvciBjb21tb24gY29kZSB0byB1c2UuCisgKiAgLSBBbiBpdGVtIHN0cnVjdHVyZSB0aGF0IG11c3QgY29udGFpbiBhICJzdHJ1Y3QgY2FjaGVfaGVhZCIKKyAqICAtIEEgbG9va3VwIGZ1bmN0aW9uIGRlZmluZWQgdXNpbmcgRGVmaW5lQ2FjaGVMb29rdXAKKyAqICAtIEEgJ3B1dCcgZnVuY3Rpb24gdGhhdCBjYW4gcmVsZWFzZSBhIGNhY2hlIGl0ZW0uIEl0IHdpbGwgb25seQorICogICAgYmUgY2FsbGVkIGFmdGVyIGNhY2hlX3B1dCBoYXMgc3VjY2VlZCwgc28gdGhlcmUgYXJlIGd1YXJhbnRlZQorICogICAgdG8gYmUgbm8gcmVmZXJlbmNlcy4KKyAqICAtIEEgZnVuY3Rpb24gdG8gY2FsY3VsYXRlIGEgaGFzaCBvZiBhbiBpdGVtJ3Mga2V5LgorICoKKyAqIGFzIHdlbGwgYXMgYXNzb3J0ZWQgY29kZSBmcmFnbWVudHMgKGUuZy4gY29tcGFyZSBrZXlzKSBhbmQgbnVtYmVycworICogKGUuZy4gaGFzaCBzaXplLCBnb2FsX2FnZSwgZXRjKS4KKyAqCisgKiBFYWNoIGNhY2hlIG11c3QgYmUgcmVnaXN0ZXJlZCBzbyB0aGF0IGl0IGNhbiBiZSBjbGVhbmVkIHJlZ3VsYXJseS4KKyAqIFdoZW4gdGhlIGNhY2hlIGlzIHVucmVnaXN0ZXJlZCwgaXQgaXMgZmx1c2hlZCBjb21wbGV0ZWx5LgorICoKKyAqIEVudHJpZXMgaGF2ZSBhIHJlZiBjb3VudCBhbmQgYSAnaGFzaGVkJyBmbGFnIHdoaWNoIGNvdW50cyB0aGUgZXhpc3RhbmNlCisgKiBpbiB0aGUgaGFzaCB0YWJsZS4KKyAqIFdlIG9ubHkgZXhwaXJlIGVudHJpZXMgd2hlbiByZWZjb3VudCBpcyB6ZXJvLgorICogRXhpc3RhbmNlIGluIHRoZSBjYWNoZSBpcyBjb3VudGVkICB0aGUgcmVmY291bnQuCisgKi8KKworLyogRXZlcnkgY2FjaGUgaXRlbSBoYXMgYSBjb21tb24gaGVhZGVyIHRoYXQgaXMgdXNlZAorICogZm9yIGV4cGlyaW5nIGFuZCByZWZyZXNoaW5nIGVudHJpZXMuCisgKiAKKyAqLworc3RydWN0IGNhY2hlX2hlYWQgeworCXN0cnVjdCBjYWNoZV9oZWFkICogbmV4dDsKKwl0aW1lX3QJCWV4cGlyeV90aW1lOwkvKiBBZnRlciB0aW1lIHRpbWUsIGRvbid0IHVzZSB0aGUgZGF0YSAqLworCXRpbWVfdAkJbGFzdF9yZWZyZXNoOyAgIC8qIElmIENBQ0hFX1BFTkRJTkcsIHRoaXMgaXMgd2hlbiB1cGNhbGwgCisJCQkJCSAqIHdhcyBzZW50LCBlbHNlIHRoaXMgaXMgd2hlbiB1cGRhdGUgd2FzIHJlY2VpdmVkCisJCQkJCSAqLworCWF0b21pY190IAlyZWZjbnQ7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKK307CisjZGVmaW5lCUNBQ0hFX1ZBTElECTAJLyogRW50cnkgY29udGFpbnMgdmFsaWQgZGF0YSAqLworI2RlZmluZQlDQUNIRV9ORUdBVElWRQkxCS8qIE5lZ2F0aXZlIGVudHJ5IC0gdGhlcmUgaXMgbm8gbWF0Y2ggZm9yIHRoZSBrZXkgKi8KKyNkZWZpbmUJQ0FDSEVfUEVORElORwkyCS8qIEFuIHVwY2FsbCBoYXMgYmVlbiBzZW50IGJ1dCBubyByZXBseSByZWNlaXZlZCB5ZXQqLworCisjZGVmaW5lCUNBQ0hFX05FV19FWFBJUlkgMTIwCS8qIGtlZXAgbmV3IHRoaW5ncyBwZW5kaW5nIGNvbmZpcm1hdGlvbiBmb3IgMTIwIHNlY29uZHMgKi8KKworc3RydWN0IGNhY2hlX2RldGFpbCB7CisJaW50CQkJaGFzaF9zaXplOworCXN0cnVjdCBjYWNoZV9oZWFkICoqCWhhc2hfdGFibGU7CisJcndsb2NrX3QJCWhhc2hfbG9jazsKKworCWF0b21pY190CQlpbnVzZTsgLyogYWN0aXZlIHVzZXItc3BhY2UgdXBkYXRlIG9yIGxvb2t1cCAqLworCisJY2hhcgkJCSpuYW1lOworCXZvaWQJCQkoKmNhY2hlX3B1dCkoc3RydWN0IGNhY2hlX2hlYWQgKiwKKwkJCQkJICAgICBzdHJ1Y3QgY2FjaGVfZGV0YWlsKik7CisKKwl2b2lkCQkJKCpjYWNoZV9yZXF1ZXN0KShzdHJ1Y3QgY2FjaGVfZGV0YWlsICpjZCwKKwkJCQkJCSBzdHJ1Y3QgY2FjaGVfaGVhZCAqaCwKKwkJCQkJCSBjaGFyICoqYnBwLCBpbnQgKmJsZW4pOworCWludAkJCSgqY2FjaGVfcGFyc2UpKHN0cnVjdCBjYWNoZV9kZXRhaWwgKiwKKwkJCQkJICAgICAgIGNoYXIgKmJ1ZiwgaW50IGxlbik7CisKKwlpbnQJCQkoKmNhY2hlX3Nob3cpKHN0cnVjdCBzZXFfZmlsZSAqbSwKKwkJCQkJICAgICAgc3RydWN0IGNhY2hlX2RldGFpbCAqY2QsCisJCQkJCSAgICAgIHN0cnVjdCBjYWNoZV9oZWFkICpoKTsKKworCS8qIGZpZWxkcyBiZWxvdyB0aGlzIGNvbW1lbnQgYXJlIGZvciBpbnRlcm5hbCB1c2UKKwkgKiBhbmQgc2hvdWxkIG5vdCBiZSB0b3VjaGVkIGJ5IGNhY2hlIG93bmVycworCSAqLworCXRpbWVfdAkJCWZsdXNoX3RpbWU7CQkvKiBmbHVzaCBhbGwgY2FjaGUgaXRlbXMgd2l0aCBsYXN0X3JlZnJlc2gKKwkJCQkJCQkgKiBlYXJsaWVyIHRoYW4gdGhpcyAqLworCXN0cnVjdCBsaXN0X2hlYWQJb3RoZXJzOworCXRpbWVfdAkJCW5leHRjaGVjazsKKwlpbnQJCQllbnRyaWVzOworCisJLyogZmllbGRzIGZvciBjb21tdW5pY2F0aW9uIG92ZXIgY2hhbm5lbCAqLworCXN0cnVjdCBsaXN0X2hlYWQJcXVldWU7CisJc3RydWN0IHByb2NfZGlyX2VudHJ5CSpwcm9jX2VudDsKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgICAqZmx1c2hfZW50LCAqY2hhbm5lbF9lbnQsICpjb250ZW50X2VudDsKKworCWF0b21pY190CQlyZWFkZXJzOwkJLyogaG93IG1hbnkgdGltZSBpcyAvY2hlbm5lbCBvcGVuICovCisJdGltZV90CQkJbGFzdF9jbG9zZTsJCS8qIGlmIG5vIHJlYWRlcnMsIHdoZW4gZGlkIGxhc3QgY2xvc2UgKi8KKwl0aW1lX3QJCQlsYXN0X3dhcm47CQkvKiB3aGVuIHdlIGxhc3Qgd2FybmVkIGFib3V0IG5vIHJlYWRlcnMgKi8KKwl2b2lkCQkJKCp3YXJuX25vX2xpc3RlbmVyKShzdHJ1Y3QgY2FjaGVfZGV0YWlsICpjZCk7Cit9OworCisKKy8qIHRoaXMgbXVzdCBiZSBlbWJlZGRlZCBpbiBhbnkgcmVxdWVzdCBzdHJ1Y3R1cmUgdGhhdAorICogaWRlbnRpZmllcyBhbiBvYmplY3QgdGhhdCB3aWxsIHdhbnQgYSBjYWxsYmFjayBvbgorICogYSBjYWNoZSBmaWxsCisgKi8KK3N0cnVjdCBjYWNoZV9yZXEgeworCXN0cnVjdCBjYWNoZV9kZWZlcnJlZF9yZXEgKigqZGVmZXIpKHN0cnVjdCBjYWNoZV9yZXEgKnJlcSk7Cit9OworLyogdGhpcyBtdXN0IGJlIGVtYmVkZGVkIGluIGEgZGVmZXJyZWRfcmVxdWVzdCB0aGF0IGlzIGJlaW5nCisgKiBkZWxheWVkIGF3YWl0aW5nIGNhY2hlLWZpbGwKKyAqLworc3RydWN0IGNhY2hlX2RlZmVycmVkX3JlcSB7CisJc3RydWN0IGxpc3RfaGVhZAloYXNoOwkvKiBvbiBoYXNoIGNoYWluICovCisJc3RydWN0IGxpc3RfaGVhZAlyZWNlbnQ7IC8qIG9uIGZpZm8gKi8KKwlzdHJ1Y3QgY2FjaGVfaGVhZAkqaXRlbTsgIC8qIGNhY2hlIGl0ZW0gd2Ugd2FpdCBvbiAqLworCXRpbWVfdAkJCXJlY3ZfdGltZTsKKwl2b2lkCQkJKm93bmVyOyAvKiB3ZSBtaWdodCBuZWVkIHRvIGRpc2NhcmQgYWxsIGRlZmVyZWQgcmVxdWVzdHMKKwkJCQkJICogb3duZWQgYnkgc29tZW9uZSAqLworCXZvaWQJCQkoKnJldmlzaXQpKHN0cnVjdCBjYWNoZV9kZWZlcnJlZF9yZXEgKnJlcSwKKwkJCQkJICAgaW50IHRvb19tYW55KTsKK307CisKKy8qCisgKiBqdXN0IGxpa2UgYSB0ZW1wbGF0ZSBpbiBDKyssIHRoaXMgbWFjcm8gZG9lcyBjYWNoZSBsb29rdXAKKyAqIGZvciB1cy4KKyAqIFRoZSBmdW5jdGlvbiBpcyBwYXNzZWQgc29tZSBzb3J0IG9mIEhBTkRMRSBmcm9tIHdoaWNoIGEgY2FjaGVfZGV0YWlsCisgKiBzdHJ1Y3R1cmUgY2FuIGJlIGRldGVybWluZWQgKHZpYSBTRVRVUCwgREVUQUlMKSwgYSB0ZW1wbGF0ZQorICogY2FjaGUgZW50cnkgKHR5cGUgUlROKiksIGFuZCBhICJzZXQiIGZsYWcuICBVc2luZyB0aGUgSEFTSEZOIGFuZCB0aGUgCisgKiBURVNULCB0aGUgZnVuY3Rpb24gd2lsbCB0cnkgdG8gZmluZCBhIG1hdGNoaW5nIGNhY2hlIGVudHJ5IGluIHRoZSBjYWNoZS4KKyAqIElmICJzZXQiID09IDAgOgorICogICAgSWYgYW4gZW50cnkgaXMgZm91bmQsIGl0IGlzIHJldHVybmVkCisgKiAgICBJZiBubyBlbnRyeSBpcyBmb3VuZCwgYSBuZXcgbm9uLVZBTElEIGVudHJ5IGlzIGNyZWF0ZWQuCisgKiBJZiAic2V0IiA9PSAxIGFuZCBJTlBMQUNFID09IDAgOgorICogICAgSWYgbm8gZW50cnkgaXMgZm91bmQgYSBuZXcgb25lIGlzIGluc2VydGVkIHdpdGggZGF0YSBmcm9tICJ0ZW1wbGF0ZSIKKyAqICAgIElmIGEgbm9uLUNBQ0hFX1ZBTElEIGVudHJ5IGlzIGZvdW5kLCBpdCBpcyB1cGRhdGVkIGZyb20gdGVtcGxhdGUgdXNpbmcgVVBEQVRFCisgKiAgICBJZiBhIENBQ0hFX1ZBTElEIGVudHJ5IGlzIGZvdW5kLCBhIG5ldyBlbnRyeSBpcyBzd2FwcGVkIGluIHdpdGggZGF0YQorICogICAgICAgZnJvbSAidGVtcGxhdGUiCisgKiBJZiBzZXQgPT0gMSwgYW5kIElOUExBQ0UgPT0gMSA6CisgKiAgICBBcyBhYm92ZSwgZXhjZXB0IHRoYXQgaWYgYSBDQUNIRV9WQUxJRCBlbnRyeSBpcyBmb3VuZCwgd2UgVVBEQVRFIGluIHBsYWNlCisgKiAgICAgICBpbnN0ZWFkIG9mIHN3YXBwaW5nIGluIGEgbmV3IGVudHJ5LgorICoKKyAqIElmIHRoZSBwYXNzZWQgaGFuZGxlIGhhcyB0aGUgQ0FDSEVfTkVHQVRJVkUgZmxhZyBzZXQsIHRoZW4gVVBEQVRFIGlzIG5vdAorICogcnVuIGJ1dCBpbnN0ZWVhZCBDQUNIRV9ORUdBVElWRSBpcyBzZXQgaW4gYW55IG5ldyBpdGVtLgorCisgKiAgSW4gYW55IGNhc2UsIHRoZSBuZXcgZW50cnkgaXMgcmV0dXJuZWQgd2l0aCBhIHJlZmVyZW5jZSBjb3VudC4KKyAqCisgKiAgICAKKyAqIFJUTiBpcyBhIHN0cnVjdCB0eXBlIGZvciBhIGNhY2hlIGVudHJ5CisgKiBNRU1CRVIgaXMgdGhlIG1lbWJlciBvZiB0aGUgY2FjaGUgd2hpY2ggaXMgY2FjaGVfaGVhZCwgd2hpY2ggbXVzdCBiZSBmaXJzdAorICogRk5BTUUgaXMgdGhlIG5hbWUgZm9yIHRoZSBmdW5jdGlvbgkKKyAqIEFSR1MgYXJlIGFyZ3VtZW50cyB0byBmdW5jdGlvbiBhbmQgbXVzdCBjb250YWluIFJUTiAqaXRlbSwgaW50IHNldC4gIE1heQorICogICBhbHNvIGNvbnRhaW4gc29tZXRoaW5nIHRvIGJlIHVzZWRieSBTRVRVUCBvciBERVRBSUwgdG8gZmluZCBjYWNoZV9kZXRhaWwuCisgKiBTRVRVUCAgbG9jYXRlcyB0aGUgY2FjaGUgZGV0YWlsIGFuZCBtYWtlcyBpdCBhdmFpbGFibGUgYXMuLi4KKyAqIERFVEFJTCBpZGVudGlmaWVzIHRoZSBjYWNoZSBkZXRhaWwsIHBvc3NpYmx5IHNldCB1cCBieSBTRVRVUAorICogSEFTSEZOIHJldHVybnMgYSBoYXNoIHZhbHVlIG9mIHRoZSBjYWNoZSBlbnRyeSAiaXRlbSIKKyAqIFRFU1QgIHRlc3RzIGlmICJ0bXAiIG1hdGNoZXMgIml0ZW0iCisgKiBJTklUIGNvcGllcyBrZXkgaW5mb3JtYXRpb24gZnJvbSAiaXRlbSIgdG8gIm5ldyIKKyAqIFVQREFURSBjb3BpZXMgY29udGVudCBpbmZvcm1hdGlvbiBmcm9tICJpdGVtIiB0byAidG1wIgorICogSU5QTEFDRSBpcyB0cnVlIGlmIHVwZGF0ZXMgY2FuIGhhcHBlbiBpbnBsYWNlIHJhdGhlciB0aGFuIGFsbG9jYXRpbmcgYSBuZXcgc3RydWN0dXJlCisgKgorICogV0FSTklORzogYW55IHN1YnN0YW50aWFsIGNoYW5nZXMgdG8gdGhpcyBtdXN0IGJlIHJlZmxlY3RlZCBpbgorICogICBuZXQvc3VucnBjL3N2Y2F1dGguYyhhdXRoX2RvbWFpbl9sb29rdXApCisgKiAgd2hpY2ggaXMgYSBzaW1pbGFyIHJvdXRpbmUgdGhhdCBpcyBvcGVuLWNvZGVkLgorICovCisjZGVmaW5lIERlZmluZUNhY2hlTG9va3VwKFJUTixNRU1CRVIsRk5BTUUsQVJHUyxTRVRVUCxERVRBSUwsSEFTSEZOLFRFU1QsSU5JVCxVUERBVEUsSU5QTEFDRSkJXAorUlROICpGTkFNRSBBUkdTCQkJCQkJCQkJCVwKK3sJCQkJCQkJCQkJCVwKKwlSVE4gKnRtcCwgKm5ldz1OVUxMOwkJCQkJCQkJXAorCXN0cnVjdCBjYWNoZV9oZWFkICoqaHAsICoqaGVhZDsJCQkJCQkJXAorCVNFVFVQOwkJCQkJCQkJCQlcCisJaGVhZCA9ICYoREVUQUlMKS0+aGFzaF90YWJsZVtIQVNIRk5dOwkJCQkJCVwKKyByZXRyeToJCQkJCQkJCQkJCVwKKwlpZiAoc2V0fHxuZXcpIHdyaXRlX2xvY2soJihERVRBSUwpLT5oYXNoX2xvY2spOwkJCQkJXAorCWVsc2UgcmVhZF9sb2NrKCYoREVUQUlMKS0+aGFzaF9sb2NrKTsJCQkJCQlcCisJZm9yKGhwPWhlYWQ7ICpocCAhPSBOVUxMOyBocCA9ICZ0bXAtPk1FTUJFUi5uZXh0KSB7CQkJCVwKKwkJdG1wID0gY29udGFpbmVyX29mKCpocCwgUlROLCBNRU1CRVIpOwkJCQkJXAorCQlpZiAoVEVTVCkgeyAvKiBmb3VuZCBhIG1hdGNoICovCQkJCQkJXAorCQkJCQkJCQkJCQlcCisJCQlpZiAoc2V0ICYmICFJTlBMQUNFICYmIHRlc3RfYml0KENBQ0hFX1ZBTElELCAmdG1wLT5NRU1CRVIuZmxhZ3MpICYmICFuZXcpIFwKKwkJCQlicmVhazsJCQkJCQkJXAorCQkJCQkJCQkJCQlcCisJCQlpZiAobmV3KQkJCQkJCQlcCisJCQkJe0lOSVQ7fQkJCQkJCQlcCisJCQlpZiAoc2V0KSB7CQkJCQkJCVwKKwkJCQlpZiAoIUlOUExBQ0UgJiYgdGVzdF9iaXQoQ0FDSEVfVkFMSUQsICZ0bXAtPk1FTUJFUi5mbGFncykpXAorCQkJCXsgLyogbmVlZCB0byBzd2FwIGluIG5ldyAqLwkJCQlcCisJCQkJCVJUTiAqdDI7CQkJCQlcCisJCQkJCQkJCQkJCVwKKwkJCQkJbmV3LT5NRU1CRVIubmV4dCA9IHRtcC0+TUVNQkVSLm5leHQ7CQlcCisJCQkJCSpocCA9ICZuZXctPk1FTUJFUjsJCQkJXAorCQkJCQl0bXAtPk1FTUJFUi5uZXh0ID0gTlVMTDsJCQlcCisJCQkJCXQyID0gdG1wOyB0bXAgPSBuZXc7IG5ldyA9IHQyOwkJCVwKKwkJCQl9CQkJCQkJCVwKKwkJCQlpZiAodGVzdF9iaXQoQ0FDSEVfTkVHQVRJVkUsICAmaXRlbS0+TUVNQkVSLmZsYWdzKSkJXAorCQkJCQlzZXRfYml0KENBQ0hFX05FR0FUSVZFLCAmdG1wLT5NRU1CRVIuZmxhZ3MpOwlcCisJCQkJZWxzZSB7CQkJCQkJCVwKKwkJCQkJVVBEQVRFOwkJCQkJCVwKKwkJCQkJY2xlYXJfYml0KENBQ0hFX05FR0FUSVZFLCAmdG1wLT5NRU1CRVIuZmxhZ3MpOwlcCisJCQkJfQkJCQkJCQlcCisJCQl9CQkJCQkJCQlcCisJCQljYWNoZV9nZXQoJnRtcC0+TUVNQkVSKTsJCQkJCVwKKwkJCWlmIChzZXR8fG5ldykgd3JpdGVfdW5sb2NrKCYoREVUQUlMKS0+aGFzaF9sb2NrKTsJCVwKKwkJCWVsc2UgcmVhZF91bmxvY2soJihERVRBSUwpLT5oYXNoX2xvY2spOwkJCQlcCisJCQlpZiAoc2V0KQkJCQkJCQlcCisJCQkJY2FjaGVfZnJlc2goREVUQUlMLCAmdG1wLT5NRU1CRVIsIGl0ZW0tPk1FTUJFUi5leHBpcnlfdGltZSk7IFwKKwkJCWlmIChzZXQgJiYgIUlOUExBQ0UgJiYgbmV3KSBjYWNoZV9mcmVzaChERVRBSUwsICZuZXctPk1FTUJFUiwgMCk7CVwKKwkJCWlmIChuZXcpIChERVRBSUwpLT5jYWNoZV9wdXQoJm5ldy0+TUVNQkVSLCBERVRBSUwpOwkJXAorCQkJcmV0dXJuIHRtcDsJCQkJCQkJXAorCQl9CQkJCQkJCQkJXAorCX0JCQkJCQkJCQkJXAorCS8qIERpZG4ndCBmaW5kIGFueXRoaW5nICovCQkJCQkJCVwKKwlpZiAobmV3KSB7CQkJCQkJCQkJXAorCQlJTklUOwkJCQkJCQkJCVwKKwkJbmV3LT5NRU1CRVIubmV4dCA9ICpoZWFkOwkJCQkJCVwKKwkJKmhlYWQgPSAmbmV3LT5NRU1CRVI7CQkJCQkJCVwKKwkJKERFVEFJTCktPmVudHJpZXMgKys7CQkJCQkJCVwKKwkJY2FjaGVfZ2V0KCZuZXctPk1FTUJFUik7CQkJCQkJXAorCQlpZiAoc2V0KSB7CQkJCQkJCQlcCisJCQl0bXAgPSBuZXc7CQkJCQkJCVwKKwkJCWlmICh0ZXN0X2JpdChDQUNIRV9ORUdBVElWRSwgJml0ZW0tPk1FTUJFUi5mbGFncykpCQlcCisJCQkJc2V0X2JpdChDQUNIRV9ORUdBVElWRSwgJnRtcC0+TUVNQkVSLmZsYWdzKTsJCVwKKwkJCWVsc2Uge1VQREFURTt9CQkJCQkJCVwKKwkJfQkJCQkJCQkJCVwKKwl9CQkJCQkJCQkJCVwKKwlpZiAoc2V0fHxuZXcpIHdyaXRlX3VubG9jaygmKERFVEFJTCktPmhhc2hfbG9jayk7CQkJCVwKKwllbHNlIHJlYWRfdW5sb2NrKCYoREVUQUlMKS0+aGFzaF9sb2NrKTsJCQkJCQlcCisJaWYgKG5ldyAmJiBzZXQpCQkJCQkJCQkJXAorCQljYWNoZV9mcmVzaChERVRBSUwsICZuZXctPk1FTUJFUiwgaXRlbS0+TUVNQkVSLmV4cGlyeV90aW1lKTsJCVwKKwlpZiAobmV3KQkJCQkgICAgICAgCQkJCQlcCisJCXJldHVybiBuZXc7CQkJCQkJCQlcCisJbmV3ID0ga21hbGxvYyhzaXplb2YoKm5ldyksIEdGUF9LRVJORUwpOwkJCQkJXAorCWlmIChuZXcpIHsJCQkJCQkJCQlcCisJCWNhY2hlX2luaXQoJm5ldy0+TUVNQkVSKTsJCQkJCQlcCisJCWdvdG8gcmV0cnk7CQkJCQkJCQlcCisJfQkJCQkJCQkJCQlcCisJcmV0dXJuIE5VTEw7CQkJCQkJCQkJXAorfQorCisjZGVmaW5lIERlZmluZVNpbXBsZUNhY2hlTG9va3VwKFNUUlVDVCxJTlBMQUNFKQlcCisJRGVmaW5lQ2FjaGVMb29rdXAoc3RydWN0IFNUUlVDVCwgaCwgU1RSVUNUIyNfbG9va3VwLCAoc3RydWN0IFNUUlVDVCAqaXRlbSwgaW50IHNldCksIC8qbm8gc2V0dXAgKi8sCVwKKwkJCSAgJiBTVFJVQ1QjI19jYWNoZSwgU1RSVUNUIyNfaGFzaChpdGVtKSwgU1RSVUNUIyNfbWF0Y2goaXRlbSwgdG1wKSxcCisJCQkgIFNUUlVDVCMjX2luaXQobmV3LCBpdGVtKSwgU1RSVUNUIyNfdXBkYXRlKHRtcCwgaXRlbSksSU5QTEFDRSkKKworI2RlZmluZSBjYWNoZV9mb3JfZWFjaChwb3MsIGRldGFpbCwgaW5kZXgsIG1lbWJlcikgCQkJCQkJXAorCWZvciAoKHtyZWFkX2xvY2soJihkZXRhaWwpLT5oYXNoX2xvY2spOyBpbmRleCA9IChkZXRhaWwpLT5oYXNoX3NpemU7fSkgOwkJXAorCSAgICAgKHtpZiAoaW5kZXg9PTApcmVhZF91bmxvY2soJihkZXRhaWwpLT5oYXNoX2xvY2spOyBpbmRleC0tO30pOwkJCVwKKwkJKQkJCQkJCQkJCQlcCisJCWZvciAocG9zID0gY29udGFpbmVyX29mKChkZXRhaWwpLT5oYXNoX3RhYmxlW2luZGV4XSwgdHlwZW9mKCpwb3MpLCBtZW1iZXIpOwlcCisJCSAgICAgJnBvcy0+bWVtYmVyOwkJCQkJCQkJXAorCQkgICAgIHBvcyA9IGNvbnRhaW5lcl9vZihwb3MtPm1lbWJlci5uZXh0LCB0eXBlb2YoKnBvcyksIG1lbWJlcikpCisKKwkgICAgIAorCitleHRlcm4gdm9pZCBjYWNoZV9jbGVhbl9kZWZlcnJlZCh2b2lkICpvd25lcik7CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNhY2hlX2hlYWQgICpjYWNoZV9nZXQoc3RydWN0IGNhY2hlX2hlYWQgKmgpCit7CisJYXRvbWljX2luYygmaC0+cmVmY250KTsKKwlyZXR1cm4gaDsKK30KKworCitzdGF0aWMgaW5saW5lIGludCBjYWNoZV9wdXQoc3RydWN0IGNhY2hlX2hlYWQgKmgsIHN0cnVjdCBjYWNoZV9kZXRhaWwgKmNkKQoreworCWlmIChhdG9taWNfcmVhZCgmaC0+cmVmY250KSA8PSAyICYmCisJICAgIGgtPmV4cGlyeV90aW1lIDwgY2QtPm5leHRjaGVjaykKKwkJY2QtPm5leHRjaGVjayA9IGgtPmV4cGlyeV90aW1lOworCXJldHVybiBhdG9taWNfZGVjX2FuZF90ZXN0KCZoLT5yZWZjbnQpOworfQorCitleHRlcm4gdm9pZCBjYWNoZV9pbml0KHN0cnVjdCBjYWNoZV9oZWFkICpoKTsKK2V4dGVybiB2b2lkIGNhY2hlX2ZyZXNoKHN0cnVjdCBjYWNoZV9kZXRhaWwgKmRldGFpbCwKKwkJCXN0cnVjdCBjYWNoZV9oZWFkICpoZWFkLCB0aW1lX3QgZXhwaXJ5KTsKK2V4dGVybiBpbnQgY2FjaGVfY2hlY2soc3RydWN0IGNhY2hlX2RldGFpbCAqZGV0YWlsLAorCQkgICAgICAgc3RydWN0IGNhY2hlX2hlYWQgKmgsIHN0cnVjdCBjYWNoZV9yZXEgKnJxc3RwKTsKK2V4dGVybiB2b2lkIGNhY2hlX2ZsdXNoKHZvaWQpOworZXh0ZXJuIHZvaWQgY2FjaGVfcHVyZ2Uoc3RydWN0IGNhY2hlX2RldGFpbCAqZGV0YWlsKTsKKyNkZWZpbmUgTkVWRVIgKDB4N0ZGRkZGRkYpCitleHRlcm4gdm9pZCBjYWNoZV9yZWdpc3RlcihzdHJ1Y3QgY2FjaGVfZGV0YWlsICpjZCk7CitleHRlcm4gaW50IGNhY2hlX3VucmVnaXN0ZXIoc3RydWN0IGNhY2hlX2RldGFpbCAqY2QpOworCitleHRlcm4gdm9pZCBxd29yZF9hZGQoY2hhciAqKmJwcCwgaW50ICpscCwgY2hhciAqc3RyKTsKK2V4dGVybiB2b2lkIHF3b3JkX2FkZGhleChjaGFyICoqYnBwLCBpbnQgKmxwLCBjaGFyICpidWYsIGludCBibGVuKTsKK2V4dGVybiBpbnQgcXdvcmRfZ2V0KGNoYXIgKipicHAsIGNoYXIgKmRlc3QsIGludCBidWZzaXplKTsKKworc3RhdGljIGlubGluZSBpbnQgZ2V0X2ludChjaGFyICoqYnBwLCBpbnQgKmFuaW50KQoreworCWNoYXIgYnVmWzUwXTsKKwljaGFyICplcDsKKwlpbnQgcnY7CisJaW50IGxlbiA9IHF3b3JkX2dldChicHAsIGJ1ZiwgNTApOworCWlmIChsZW4gPCAwKSByZXR1cm4gLUVJTlZBTDsKKwlpZiAobGVuID09MCkgcmV0dXJuIC1FTk9FTlQ7CisJcnYgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgJmVwLCAwKTsKKwlpZiAoKmVwKSByZXR1cm4gLUVJTlZBTDsKKwkqYW5pbnQgPSBydjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB0aW1lX3QgZ2V0X2V4cGlyeShjaGFyICoqYnBwKQoreworCWludCBydjsKKwlpZiAoZ2V0X2ludChicHAsICZydikpCisJCXJldHVybiAwOworCWlmIChydiA8IDApCisJCXJldHVybiAwOworCXJldHVybiBydjsKK30KKworI2VuZGlmIC8qICBfTElOVVhfU1VOUlBDX0NBQ0hFX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9jbG50LmggYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9jbG50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjcwOWNhZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL2NsbnQuaApAQCAtMCwwICsxLDE1MyBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2xpbnV4L3N1bnJwYy9jbG50LmgKKyAqCisgKiAgRGVjbGFyYXRpb25zIGZvciB0aGUgaGlnaC1sZXZlbCBSUEMgY2xpZW50IGludGVyZmFjZQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIE9sYWYgS2lyY2ggPG9raXJAbW9uYWQuc3diLmRlPgorICovCisKKyNpZm5kZWYgX0xJTlVYX1NVTlJQQ19DTE5UX0gKKyNkZWZpbmUgX0xJTlVYX1NVTlJQQ19DTE5UX0gKKworI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9tc2dfcHJvdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy94cHJ0Lmg+CisjaW5jbHVkZSA8bGludXgvc3VucnBjL2F1dGguaD4KKyNpbmNsdWRlIDxsaW51eC9zdW5ycGMvc3RhdHMuaD4KKyNpbmNsdWRlIDxsaW51eC9zdW5ycGMveGRyLmg+CisjaW5jbHVkZSA8bGludXgvc3VucnBjL3RpbWVyLmg+CisjaW5jbHVkZSA8YXNtL3NpZ25hbC5oPgorCisvKgorICogVGhpcyBkZWZpbmVzIGFuIFJQQyBwb3J0IG1hcHBpbmcKKyAqLworc3RydWN0IHJwY19wb3J0bWFwIHsKKwlfX3UzMgkJCXBtX3Byb2c7CisJX191MzIJCQlwbV92ZXJzOworCV9fdTMyCQkJcG1fcHJvdDsKKwlfX3UxNgkJCXBtX3BvcnQ7CisJdW5zaWduZWQgY2hhcgkJcG1fYmluZGluZyA6IDE7CS8qIGRvaW5nIGEgZ2V0cG9ydCgpICovCisJc3RydWN0IHJwY193YWl0X3F1ZXVlCXBtX2JpbmR3YWl0OwkvKiB3YWl0aW5nIG9uIGdldHBvcnQoKSAqLworfTsKKworc3RydWN0IHJwY19pbm9kZTsKKworLyoKKyAqIFRoZSBoaWdoLWxldmVsIGNsaWVudCBoYW5kbGUKKyAqLworc3RydWN0IHJwY19jbG50IHsKKwlhdG9taWNfdAkJY2xfY291bnQ7CS8qIE51bWJlciBvZiBjbG9uZXMgKi8KKwlhdG9taWNfdAkJY2xfdXNlcnM7CS8qIG51bWJlciBvZiByZWZlcmVuY2VzICovCisJc3RydWN0IHJwY194cHJ0ICoJY2xfeHBydDsJLyogdHJhbnNwb3J0ICovCisJc3RydWN0IHJwY19wcm9jaW5mbyAqCWNsX3Byb2NpbmZvOwkvKiBwcm9jZWR1cmUgaW5mbyAqLworCXUzMgkJCWNsX21heHByb2M7CS8qIG1heCBwcm9jZWR1cmUgbnVtYmVyICovCisKKwljaGFyICoJCQljbF9zZXJ2ZXI7CS8qIHNlcnZlciBtYWNoaW5lIG5hbWUgKi8KKwljaGFyICoJCQljbF9wcm90bmFtZTsJLyogcHJvdG9jb2wgbmFtZSAqLworCXN0cnVjdCBycGNfYXV0aCAqCWNsX2F1dGg7CS8qIGF1dGhlbnRpY2F0b3IgKi8KKwlzdHJ1Y3QgcnBjX3N0YXQgKgljbF9zdGF0czsJLyogc3RhdGlzdGljcyAqLworCisJdW5zaWduZWQgaW50CQljbF9zb2Z0cnRyeSA6IDEsLyogc29mdCB0aW1lb3V0cyAqLworCQkJCWNsX2ludHIgICAgIDogMSwvKiBpbnRlcnJ1cHRpYmxlICovCisJCQkJY2xfY2hhdHR5ICAgOiAxLC8qIGJlIHZlcmJvc2UgKi8KKwkJCQljbF9hdXRvYmluZCA6IDEsLyogdXNlIGdldHBvcnQoKSAqLworCQkJCWNsX29uZXNob3QgIDogMSwvKiBkaXNwb3NlIGFmdGVyIHVzZSAqLworCQkJCWNsX2RlYWQgICAgIDogMTsvKiBhYmFuZG9uZWQgKi8KKworCXN0cnVjdCBycGNfcnR0ICoJY2xfcnR0OwkJLyogUlRPIGVzdGltYXRvciBkYXRhICovCisJc3RydWN0IHJwY19wb3J0bWFwICoJY2xfcG1hcDsJLyogcG9ydCBtYXBwaW5nICovCisKKwlpbnQJCQljbF9ub2RlbGVuOwkvKiBub2RlbmFtZSBsZW5ndGggKi8KKwljaGFyIAkJCWNsX25vZGVuYW1lW1VOWF9NQVhOT0RFTkFNRV07CisJY2hhcgkJCWNsX3BhdGhuYW1lWzMwXTsvKiBQYXRoIGluIHJwY19waXBlX2ZzICovCisJc3RydWN0IGRlbnRyeSAqCQljbF9kZW50cnk7CS8qIGlub2RlICovCisJc3RydWN0IHJwY19jbG50ICoJY2xfcGFyZW50OwkvKiBQb2ludHMgdG8gcGFyZW50IG9mIGNsb25lcyAqLworCXN0cnVjdCBycGNfcnR0CQljbF9ydHRfZGVmYXVsdDsKKwlzdHJ1Y3QgcnBjX3BvcnRtYXAJY2xfcG1hcF9kZWZhdWx0OworCWNoYXIJCQljbF9pbmxpbmVfbmFtZVszMl07Cit9OworI2RlZmluZSBjbF90aW1lb3V0CQljbF94cHJ0LT50aW1lb3V0CisjZGVmaW5lIGNsX3Byb2cJCQljbF9wbWFwLT5wbV9wcm9nCisjZGVmaW5lIGNsX3ZlcnMJCQljbF9wbWFwLT5wbV92ZXJzCisjZGVmaW5lIGNsX3BvcnQJCQljbF9wbWFwLT5wbV9wb3J0CisjZGVmaW5lIGNsX3Byb3QJCQljbF9wbWFwLT5wbV9wcm90CisKKy8qCisgKiBHZW5lcmFsIFJQQyBwcm9ncmFtIGluZm8KKyAqLworI2RlZmluZSBSUENfTUFYVkVSU0lPTgkJNAorc3RydWN0IHJwY19wcm9ncmFtIHsKKwljaGFyICoJCQluYW1lOwkJLyogcHJvdG9jb2wgbmFtZSAqLworCXUzMgkJCW51bWJlcjsJCS8qIHByb2dyYW0gbnVtYmVyICovCisJdW5zaWduZWQgaW50CQlucnZlcnM7CQkvKiBudW1iZXIgb2YgdmVyc2lvbnMgKi8KKwlzdHJ1Y3QgcnBjX3ZlcnNpb24gKioJdmVyc2lvbjsJLyogdmVyc2lvbiBhcnJheSAqLworCXN0cnVjdCBycGNfc3RhdCAqCXN0YXRzOwkJLyogc3RhdGlzdGljcyAqLworCWNoYXIgKgkJCXBpcGVfZGlyX25hbWU7CS8qIHBhdGggdG8gcnBjX3BpcGVmcyBkaXIgKi8KK307CisKK3N0cnVjdCBycGNfdmVyc2lvbiB7CisJdTMyCQkJbnVtYmVyOwkJLyogdmVyc2lvbiBudW1iZXIgKi8KKwl1bnNpZ25lZCBpbnQJCW5ycHJvY3M7CS8qIG51bWJlciBvZiBwcm9jcyAqLworCXN0cnVjdCBycGNfcHJvY2luZm8gKglwcm9jczsJCS8qIHByb2NlZHVyZSBhcnJheSAqLworfTsKKworLyoKKyAqIFByb2NlZHVyZSBpbmZvcm1hdGlvbgorICovCitzdHJ1Y3QgcnBjX3Byb2NpbmZvIHsKKwl1MzIJCQlwX3Byb2M7CQkvKiBSUEMgcHJvY2VkdXJlIG51bWJlciAqLworCWt4ZHJwcm9jX3QJCXBfZW5jb2RlOwkvKiBYRFIgZW5jb2RlIGZ1bmN0aW9uICovCisJa3hkcnByb2NfdAkJcF9kZWNvZGU7CS8qIFhEUiBkZWNvZGUgZnVuY3Rpb24gKi8KKwl1bnNpZ25lZCBpbnQJCXBfYnVmc2l6OwkvKiByZXEuIGJ1ZmZlciBzaXplICovCisJdW5zaWduZWQgaW50CQlwX2NvdW50OwkvKiBjYWxsIGNvdW50ICovCisJdW5zaWduZWQgaW50CQlwX3RpbWVyOwkvKiBXaGljaCBSVFQgdGltZXIgdG8gdXNlICovCit9OworCisjZGVmaW5lIFJQQ19DT05HRVNURUQoY2xudCkJKFJQQ1hQUlRfQ09OR0VTVEVEKChjbG50KS0+Y2xfeHBydCkpCisjZGVmaW5lIFJQQ19QRUVSQUREUihjbG50KQkoJihjbG50KS0+Y2xfeHBydC0+YWRkcikKKworI2lmZGVmIF9fS0VSTkVMX18KKworc3RydWN0IHJwY19jbG50ICpycGNfY3JlYXRlX2NsaWVudChzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQsIGNoYXIgKnNlcnZuYW1lLAorCQkJCXN0cnVjdCBycGNfcHJvZ3JhbSAqaW5mbywKKwkJCQl1MzIgdmVyc2lvbiwgcnBjX2F1dGhmbGF2b3JfdCBhdXRoZmxhdm9yKTsKK3N0cnVjdCBycGNfY2xudCAqcnBjX2Nsb25lX2NsaWVudChzdHJ1Y3QgcnBjX2NsbnQgKik7CitpbnQJCXJwY19zaHV0ZG93bl9jbGllbnQoc3RydWN0IHJwY19jbG50ICopOworaW50CQlycGNfZGVzdHJveV9jbGllbnQoc3RydWN0IHJwY19jbG50ICopOwordm9pZAkJcnBjX3JlbGVhc2VfY2xpZW50KHN0cnVjdCBycGNfY2xudCAqKTsKK3ZvaWQJCXJwY19nZXRwb3J0KHN0cnVjdCBycGNfdGFzayAqLCBzdHJ1Y3QgcnBjX2NsbnQgKik7CitpbnQJCXJwY19yZWdpc3Rlcih1MzIsIHUzMiwgaW50LCB1bnNpZ25lZCBzaG9ydCwgaW50ICopOworCit2b2lkCQlycGNfY2FsbF9zZXR1cChzdHJ1Y3QgcnBjX3Rhc2sgKiwgc3RydWN0IHJwY19tZXNzYWdlICosIGludCk7CisKK2ludAkJcnBjX2NhbGxfYXN5bmMoc3RydWN0IHJwY19jbG50ICpjbG50LCBzdHJ1Y3QgcnBjX21lc3NhZ2UgKm1zZywKKwkJCSAgICAgICBpbnQgZmxhZ3MsIHJwY19hY3Rpb24gY2FsbGJhY2ssIHZvaWQgKmNsbnRkYXRhKTsKK2ludAkJcnBjX2NhbGxfc3luYyhzdHJ1Y3QgcnBjX2NsbnQgKmNsbnQsIHN0cnVjdCBycGNfbWVzc2FnZSAqbXNnLAorCQkJICAgICAgaW50IGZsYWdzKTsKK3ZvaWQJCXJwY19yZXN0YXJ0X2NhbGwoc3RydWN0IHJwY190YXNrICopOwordm9pZAkJcnBjX2NsbnRfc2lnbWFzayhzdHJ1Y3QgcnBjX2NsbnQgKmNsbnQsIHNpZ3NldF90ICpvbGRzZXQpOwordm9pZAkJcnBjX2NsbnRfc2lndW5tYXNrKHN0cnVjdCBycGNfY2xudCAqY2xudCwgc2lnc2V0X3QgKm9sZHNldCk7Cit2b2lkCQlycGNfc2V0YnVmc2l6ZShzdHJ1Y3QgcnBjX2NsbnQgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOworc2l6ZV90CQlycGNfbWF4X3BheWxvYWQoc3RydWN0IHJwY19jbG50ICopOworCitzdGF0aWMgX19pbmxpbmVfXworaW50IHJwY19jYWxsKHN0cnVjdCBycGNfY2xudCAqY2xudCwgdTMyIHByb2MsIHZvaWQgKmFyZ3AsIHZvaWQgKnJlc3AsIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgcnBjX21lc3NhZ2UgbXNnID0geworCQkucnBjX3Byb2MJPSAmY2xudC0+Y2xfcHJvY2luZm9bcHJvY10sCisJCS5ycGNfYXJncAk9IGFyZ3AsCisJCS5ycGNfcmVzcAk9IHJlc3AsCisJCS5ycGNfY3JlZAk9IE5VTEwKKwl9OworCXJldHVybiBycGNfY2FsbF9zeW5jKGNsbnQsICZtc2csIGZsYWdzKTsKK30KKwkJCitleHRlcm4gdm9pZCBycGNpb2Rfd2FrZV91cCh2b2lkKTsKKworLyoKKyAqIEhlbHBlciBmdW5jdGlvbiBmb3IgTkZTcm9vdCBzdXBwb3J0CisgKi8KK2ludAkJcnBjX2dldHBvcnRfZXh0ZXJuYWwoc3RydWN0IHNvY2thZGRyX2luICosIF9fdTMyLCBfX3UzMiwgaW50KTsKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAvKiBfTElOVVhfU1VOUlBDX0NMTlRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdW5ycGMvZGVidWcuaCBiL2luY2x1ZGUvbGludXgvc3VucnBjL2RlYnVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFkYjMxZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL2RlYnVnLmgKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvbGludXgvc3VucnBjL2RlYnVnLmgKKyAqCisgKiBEZWJ1Z2dpbmcgc3VwcG9ydCBmb3Igc3VucnBjIG1vZHVsZQorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NiwgT2xhZiBLaXJjaCA8b2tpckBtb25hZC5zd2IuZGU+CisgKi8KKworI2lmbmRlZiBfTElOVVhfU1VOUlBDX0RFQlVHX0hfCisjZGVmaW5lIF9MSU5VWF9TVU5SUENfREVCVUdfSF8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKworLyoKKyAqIEVuYWJsZSBSUEMgZGVidWdnaW5nL3Byb2ZpbGluZy4KKyAqLworI2lmZGVmIENPTkZJR19TWVNDVEwKKyNkZWZpbmUgIFJQQ19ERUJVRworI2VuZGlmCisvKiAjZGVmaW5lICBSUENfUFJPRklMRSAqLworCisvKgorICogUlBDIGRlYnVnIGZhY2lsaXRpZXMKKyAqLworI2RlZmluZSBSUENEQkdfWFBSVAkJMHgwMDAxCisjZGVmaW5lIFJQQ0RCR19DQUxMCQkweDAwMDIKKyNkZWZpbmUgUlBDREJHX0RFQlVHCQkweDAwMDQKKyNkZWZpbmUgUlBDREJHX05GUwkJMHgwMDA4CisjZGVmaW5lIFJQQ0RCR19BVVRICQkweDAwMTAKKyNkZWZpbmUgUlBDREJHX1BNQVAJCTB4MDAyMAorI2RlZmluZSBSUENEQkdfU0NIRUQJCTB4MDA0MAorI2RlZmluZSBSUENEQkdfU1ZDU09DSwkJMHgwMTAwCisjZGVmaW5lIFJQQ0RCR19TVkNEU1AJCTB4MDIwMAorI2RlZmluZSBSUENEQkdfTUlTQwkJMHgwNDAwCisjZGVmaW5lIFJQQ0RCR19DQUNIRQkJMHgwODAwCisjZGVmaW5lIFJQQ0RCR19BTEwJCTB4N2ZmZgorCisjaWZkZWYgX19LRVJORUxfXworCisvKgorICogRGVidWdnaW5nIG1hY3JvcyBldGMKKyAqLworI2lmZGVmIFJQQ19ERUJVRworZXh0ZXJuIHVuc2lnbmVkIGludAkJcnBjX2RlYnVnOworZXh0ZXJuIHVuc2lnbmVkIGludAkJbmZzX2RlYnVnOworZXh0ZXJuIHVuc2lnbmVkIGludAkJbmZzZF9kZWJ1ZzsKK2V4dGVybiB1bnNpZ25lZCBpbnQJCW5sbV9kZWJ1ZzsKKyNlbmRpZgorCisjZGVmaW5lIGRwcmludGsoYXJncy4uLikJZGZwcmludGsoRkFDSUxJVFksICMjIGFyZ3MpCisKKyN1bmRlZiBpZmRlYnVnCisjaWZkZWYgUlBDX0RFQlVHCQkJCisjIGRlZmluZSBpZmRlYnVnKGZhYykJCWlmICh1bmxpa2VseShycGNfZGVidWcgJiBSUENEQkdfIyNmYWMpKQorIyBkZWZpbmUgZGZwcmludGsoZmFjLCBhcmdzLi4uKQlkbyB7IGlmZGVidWcoZmFjKSBwcmludGsoYXJncyk7IH0gd2hpbGUoMCkKKyMgZGVmaW5lIFJQQ19JRkRFQlVHKHgpCQl4CisjZWxzZQorIyBkZWZpbmUgaWZkZWJ1ZyhmYWMpCQlpZiAoMCkKKyMgZGVmaW5lIGRmcHJpbnRrKGZhYywgYXJncy4uLikJZG8gOyB3aGlsZSAoMCkKKyMgZGVmaW5lIFJQQ19JRkRFQlVHKHgpCisjZW5kaWYKKworI2lmZGVmIFJQQ19QUk9GSUxFCisjIGRlZmluZSBwcHJpbnRrKGFyZ3MuLi4pCXByaW50aygjIyBhcmdzKQorI2Vsc2UKKyMgZGVmaW5lIHBwcmludGsoYXJncy4uLikJZG8gOyB3aGlsZSAoMCkKKyNlbmRpZgorCisvKgorICogU3lzY3RsIGludGVyZmFjZSBmb3IgUlBDIGRlYnVnZ2luZworICovCisjaWZkZWYgUlBDX0RFQlVHCit2b2lkCQlycGNfcmVnaXN0ZXJfc3lzY3RsKHZvaWQpOwordm9pZAkJcnBjX3VucmVnaXN0ZXJfc3lzY3RsKHZvaWQpOworI2VuZGlmCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKy8qCisgKiBEZWNsYXJhdGlvbnMgZm9yIHRoZSBzeXNjdGwgZGVidWcgaW50ZXJmYWNlLCB3aGljaCBhbGxvd3MgdG8gcmVhZCBvcgorICogY2hhbmdlIHRoZSBkZWJ1ZyBmbGFncyBmb3IgcnBjLCBuZnMsIG5mc2QsIGFuZCBsb2NrZC4gU2luY2UgdGhlIHN1bnJwYworICogbW9kdWxlIGN1cnJlbnRseSByZWdpc3RlcnMgaXRzIHN5c2N0bCB0YWJsZSBkeW5hbWljYWxseSwgdGhlIHN5c2N0bCBwYXRoCisgKiBmb3IgbW9kdWxlIEZPTyBpcyA8Q1RMX1NVTlJQQywgQ1RMX0ZPT0RFQlVHPi4KKyAqLworI2RlZmluZSBDVExfU1VOUlBDCTcyNDkJLyogYXJiaXRyYXJ5IGFuZCBob3BlZnVsbHkgdW51c2VkICovCisKK2VudW0geworCUNUTF9SUENERUJVRyA9IDEsCisJQ1RMX05GU0RFQlVHLAorCUNUTF9ORlNEREVCVUcsCisJQ1RMX05MTURFQlVHLAorCUNUTF9TTE9UVEFCTEVfVURQLAorCUNUTF9TTE9UVEFCTEVfVENQLAorfTsKKworI2VuZGlmIC8qIF9MSU5VWF9TVU5SUENfREVCVUdfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VucnBjL2dzc19hcGkuaCBiL2luY2x1ZGUvbGludXgvc3VucnBjL2dzc19hcGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODkyNjJmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvZ3NzX2FwaS5oCkBAIC0wLDAgKzEsMTIyIEBACisvKgorICogbGludXgvaW5jbHVkZS9saW51eC9nc3NfYXBpLmgKKyAqCisgKiBTb21ld2hhdCBzaW1wbGlmaWVkIHZlcnNpb24gb2YgdGhlIGdzcyBhcGkuCisgKgorICogRHVnIFNvbmcgPGR1Z3NvbmdAbW9ua2V5Lm9yZz4KKyAqIEFuZHkgQWRhbXNvbiA8YW5kcm9zQHVtaWNoLmVkdT4KKyAqIEJydWNlIEZpZWxkcyA8YmZpZWxkc0B1bWljaC5lZHU+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgTWljaGlnYW4KKyAqCisgKiAkSWQkCisgKi8KKworI2lmbmRlZiBfTElOVVhfU1VOUlBDX0dTU19BUElfSAorI2RlZmluZSBfTElOVVhfU1VOUlBDX0dTU19BUElfSAorCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy94ZHIuaD4KKyNpbmNsdWRlIDxsaW51eC91aW8uaD4KKworLyogVGhlIG1lY2hhbmlzbS1pbmRlcGVuZGVudCBnc3MtYXBpIGNvbnRleHQ6ICovCitzdHJ1Y3QgZ3NzX2N0eCB7CisJc3RydWN0IGdzc19hcGlfbWVjaAkqbWVjaF90eXBlOworCXZvaWQJCQkqaW50ZXJuYWxfY3R4X2lkOworfTsKKworI2RlZmluZSBHU1NfQ19OT19CVUZGRVIJCSgoc3RydWN0IHhkcl9uZXRvYmopIDApCisjZGVmaW5lIEdTU19DX05PX0NPTlRFWFQJKChzdHJ1Y3QgZ3NzX2N0eCAqKSAwKQorI2RlZmluZSBHU1NfQ19OVUxMX09JRAkJKChzdHJ1Y3QgeGRyX25ldG9iaikgMCkKKworLypYWFggIGFyYml0cmFyeSBsZW5ndGggLSBpcyB0aGlzIHNldCBzb21ld2hlcmU/ICovCisjZGVmaW5lIEdTU19PSURfTUFYX0xFTiAzMgorCisvKiBnc3MtYXBpIHByb3RvdHlwZXM7IG5vdGUgdGhhdCB0aGVzZSBhcmUgc29tZXdoYXQgc2ltcGxpZmllZCB2ZXJzaW9ucyBvZgorICogdGhlIHByb3RvdHlwZXMgc3BlY2lmaWVkIGluIFJGQyAyNzQ0LiAqLworaW50IGdzc19pbXBvcnRfc2VjX2NvbnRleHQoCisJCWNvbnN0IHZvaWQqCQlpbnB1dF90b2tlbiwKKwkJc2l6ZV90CQkJYnVmc2l6ZSwKKwkJc3RydWN0IGdzc19hcGlfbWVjaAkqbWVjaCwKKwkJc3RydWN0IGdzc19jdHgJCSoqY3R4X2lkKTsKK3UzMiBnc3NfZ2V0X21pYygKKwkJc3RydWN0IGdzc19jdHgJCSpjdHhfaWQsCisJCXUzMgkJCXFvcCwKKwkJc3RydWN0IHhkcl9idWYJCSptZXNzYWdlLAorCQlzdHJ1Y3QgeGRyX25ldG9iagkqbWljX3Rva2VuKTsKK3UzMiBnc3NfdmVyaWZ5X21pYygKKwkJc3RydWN0IGdzc19jdHgJCSpjdHhfaWQsCisJCXN0cnVjdCB4ZHJfYnVmCQkqbWVzc2FnZSwKKwkJc3RydWN0IHhkcl9uZXRvYmoJKm1pY190b2tlbiwKKwkJdTMyCQkJKnFzdGF0ZSk7Cit1MzIgZ3NzX2RlbGV0ZV9zZWNfY29udGV4dCgKKwkJc3RydWN0IGdzc19jdHgJCSoqY3R4X2lkKTsKKwordTMyIGdzc19wc2V1ZG9mbGF2b3JfdG9fc2VydmljZShzdHJ1Y3QgZ3NzX2FwaV9tZWNoICosIHUzMiBwc2V1ZG9mbGF2b3IpOworY2hhciAqZ3NzX3NlcnZpY2VfdG9fYXV0aF9kb21haW5fbmFtZShzdHJ1Y3QgZ3NzX2FwaV9tZWNoICosIHUzMiBzZXJ2aWNlKTsKKworc3RydWN0IHBmX2Rlc2MgeworCXUzMglwc2V1ZG9mbGF2b3I7CisJdTMyCXFvcDsKKwl1MzIJc2VydmljZTsKKwljaGFyCSpuYW1lOworCWNoYXIJKmF1dGhfZG9tYWluX25hbWU7Cit9OworCisvKiBEaWZmZXJlbnQgbWVjaGFuaXNtcyAoZS5nLiwga3JiNSBvciBzcGttMykgbWF5IGltcGxlbWVudCBnc3MtYXBpLCBhbmQKKyAqIG1lY2hhbmlzbXMgbWF5IGJlIGR5bmFtaWNhbGx5IHJlZ2lzdGVyZWQgb3IgdW5yZWdpc3RlcmVkIGJ5IG1vZHVsZXMuICovCisKKy8qIEVhY2ggbWVjaGFuaXNtIGlzIGRlc2NyaWJlZCBieSB0aGUgZm9sbG93aW5nIHN0cnVjdDogKi8KK3N0cnVjdCBnc3NfYXBpX21lY2ggeworCXN0cnVjdCBsaXN0X2hlYWQJZ21fbGlzdDsKKwlzdHJ1Y3QgbW9kdWxlCQkqZ21fb3duZXI7CisJc3RydWN0IHhkcl9uZXRvYmoJZ21fb2lkOworCWNoYXIJCQkqZ21fbmFtZTsKKwlzdHJ1Y3QgZ3NzX2FwaV9vcHMJKmdtX29wczsKKwkvKiBwc2V1ZG9mbGF2b3JzIHN1cHBvcnRlZCBieSB0aGlzIG1lY2hhbmlzbTogKi8KKwlpbnQJCQlnbV9wZl9udW07CisJc3RydWN0IHBmX2Rlc2MgKglnbV9wZnM7Cit9OworCisvKiBhbmQgbXVzdCBwcm92aWRlIHRoZSBmb2xsb3dpbmcgb3BlcmF0aW9uczogKi8KK3N0cnVjdCBnc3NfYXBpX29wcyB7CisJaW50ICgqZ3NzX2ltcG9ydF9zZWNfY29udGV4dCkoCisJCQljb25zdCB2b2lkCQkqaW5wdXRfdG9rZW4sCisJCQlzaXplX3QJCQlidWZzaXplLAorCQkJc3RydWN0IGdzc19jdHgJCSpjdHhfaWQpOworCXUzMiAoKmdzc19nZXRfbWljKSgKKwkJCXN0cnVjdCBnc3NfY3R4CQkqY3R4X2lkLAorCQkJdTMyCQkJcW9wLCAKKwkJCXN0cnVjdCB4ZHJfYnVmCQkqbWVzc2FnZSwKKwkJCXN0cnVjdCB4ZHJfbmV0b2JqCSptaWNfdG9rZW4pOworCXUzMiAoKmdzc192ZXJpZnlfbWljKSgKKwkJCXN0cnVjdCBnc3NfY3R4CQkqY3R4X2lkLAorCQkJc3RydWN0IHhkcl9idWYJCSptZXNzYWdlLAorCQkJc3RydWN0IHhkcl9uZXRvYmoJKm1pY190b2tlbiwKKwkJCXUzMgkJCSpxc3RhdGUpOworCXZvaWQgKCpnc3NfZGVsZXRlX3NlY19jb250ZXh0KSgKKwkJCXZvaWQJCQkqaW50ZXJuYWxfY3R4X2lkKTsKK307CisKK2ludCBnc3NfbWVjaF9yZWdpc3RlcihzdHJ1Y3QgZ3NzX2FwaV9tZWNoICopOwordm9pZCBnc3NfbWVjaF91bnJlZ2lzdGVyKHN0cnVjdCBnc3NfYXBpX21lY2ggKik7CisKKy8qIHJldHVybnMgYSBtZWNoYW5pc20gZGVzY3JpcHRvciBnaXZlbiBhbiBPSUQsIGFuZCBpbmNyZW1lbnRzIHRoZSBtZWNoYW5pc20ncworICogcmVmZXJlbmNlIGNvdW50LiAqLworc3RydWN0IGdzc19hcGlfbWVjaCAqIGdzc19tZWNoX2dldF9ieV9PSUQoc3RydWN0IHhkcl9uZXRvYmogKik7CisKKy8qIFJldHVybnMgYSByZWZlcmVuY2UgdG8gYSBtZWNoYW5pc20sIGdpdmVuIGEgbmFtZSBsaWtlICJrcmI1IiBldGMuICovCitzdHJ1Y3QgZ3NzX2FwaV9tZWNoICpnc3NfbWVjaF9nZXRfYnlfbmFtZShjb25zdCBjaGFyICopOworCisvKiBTaW1pbGFyLCBidXQgZ2V0IGJ5IHBzZXVkb2ZsYXZvci4gKi8KK3N0cnVjdCBnc3NfYXBpX21lY2ggKmdzc19tZWNoX2dldF9ieV9wc2V1ZG9mbGF2b3IodTMyKTsKKworLyogSnVzdCBpbmNyZW1lbnRzIHRoZSBtZWNoYW5pc20ncyByZWZlcmVuY2UgY291bnQgYW5kIHJldHVybnMgaXRzIGlucHV0OiAqLworc3RydWN0IGdzc19hcGlfbWVjaCAqIGdzc19tZWNoX2dldChzdHJ1Y3QgZ3NzX2FwaV9tZWNoICopOworCisvKiBGb3IgZXZlcnkgc3VjY2VzZnVsIGdzc19tZWNoX2dldCBvciBnc3NfbWVjaF9nZXRfYnlfKiBjYWxsIHRoZXJlIG11c3QgYmUgYQorICogY29ycmVzcG9uZGluZyBjYWxsIHRvIGdzc19tZWNoX3B1dC4gKi8KK3ZvaWQgZ3NzX21lY2hfcHV0KHN0cnVjdCBnc3NfYXBpX21lY2ggKik7CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYgLyogX0xJTlVYX1NVTlJQQ19HU1NfQVBJX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdW5ycGMvZ3NzX2FzbjEuaCBiL2luY2x1ZGUvbGludXgvc3VucnBjL2dzc19hc24xLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NjZWNkMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL2dzc19hc24xLmgKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2xpbnV4L3N1bnJwYy9nc3NfYXNuMS5oCisgKgorICogIG1pbmltYWwgYXNuMSBmb3IgZ2VuZXJpYyBlbmNvZGluZy9kZWNvZGluZyBvZiBnc3MgdG9rZW5zCisgKgorICogIEFkYXB0ZWQgZnJvbSBNSVQgS2VyYmVyb3MgNS0xLjIuMSBsaWIvaW5jbHVkZS9rcmI1LmgsCisgKiAgbGliL2dzc2FwaS9rcmI1L2dzc2FwaVBfa3JiNS5oLCBhbmQgb3RoZXJzCisgKgorICogIENvcHlyaWdodCAoYykgMjAwMCBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBNaWNoaWdhbi4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBBbmR5IEFkYW1zb24gICA8YW5kcm9zQHVtaWNoLmVkdT4KKyAqLworCisvKgorICogQ29weXJpZ2h0IDE5OTUgYnkgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIEV4cG9ydCBvZiB0aGlzIHNvZnR3YXJlIGZyb20gdGhlIFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYSBtYXkKKyAqICAgcmVxdWlyZSBhIHNwZWNpZmljIGxpY2Vuc2UgZnJvbSB0aGUgVW5pdGVkIFN0YXRlcyBHb3Zlcm5tZW50LgorICogICBJdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgYW55IHBlcnNvbiBvciBvcmdhbml6YXRpb24gY29udGVtcGxhdGluZworICogICBleHBvcnQgdG8gb2J0YWluIHN1Y2ggYSBsaWNlbnNlIGJlZm9yZSBleHBvcnRpbmcuCisgKgorICogV0lUSElOIFRIQVQgQ09OU1RSQUlOVCwgcGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kCisgKiBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQKKyAqIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQKKyAqIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQKKyAqIHRoZSBuYW1lIG9mIE0uSS5ULiBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZworICogdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yCisgKiBwZXJtaXNzaW9uLiAgRnVydGhlcm1vcmUgaWYgeW91IG1vZGlmeSB0aGlzIHNvZnR3YXJlIHlvdSBtdXN0IGxhYmVsCisgKiB5b3VyIHNvZnR3YXJlIGFzIG1vZGlmaWVkIHNvZnR3YXJlIGFuZCBub3QgZGlzdHJpYnV0ZSBpdCBpbiBzdWNoIGEKKyAqIGZhc2hpb24gdGhhdCBpdCBtaWdodCBiZSBjb25mdXNlZCB3aXRoIHRoZSBvcmlnaW5hbCBNLkkuVC4gc29mdHdhcmUuCisgKiBNLkkuVC4gbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZgorICogdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcworICogb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqCisgKi8KKworCisjaW5jbHVkZSA8bGludXgvc3VucnBjL2dzc19hcGkuaD4KKworI2RlZmluZSBTSVpFT0ZfSU5UIDQKKworLyogZnJvbSBnc3NhcGlfZXJyX2dlbmVyaWMuaCAqLworI2RlZmluZSBHX0JBRF9TRVJWSUNFX05BTUUgICAgICAgICAgICAgICAgICAgICAgICgtMjA0NTAyMjk3NkwpCisjZGVmaW5lIEdfQkFEX1NUUklOR19VSUQgICAgICAgICAgICAgICAgICAgICAgICAgKC0yMDQ1MDIyOTc1TCkKKyNkZWZpbmUgR19OT1VTRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLTIwNDUwMjI5NzRMKQorI2RlZmluZSBHX1ZBTElEQVRFX0ZBSUxFRCAgICAgICAgICAgICAgICAgICAgICAgICgtMjA0NTAyMjk3M0wpCisjZGVmaW5lIEdfQlVGRkVSX0FMTE9DICAgICAgICAgICAgICAgICAgICAgICAgICAgKC0yMDQ1MDIyOTcyTCkKKyNkZWZpbmUgR19CQURfTVNHX0NUWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLTIwNDUwMjI5NzFMKQorI2RlZmluZSBHX1dST05HX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtMjA0NTAyMjk3MEwpCisjZGVmaW5lIEdfQkFEX1VTQUdFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKC0yMDQ1MDIyOTY5TCkKKyNkZWZpbmUgR19VTktOT1dOX1FPUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLTIwNDUwMjI5NjhMKQorI2RlZmluZSBHX05PX0hPU1ROQU1FICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtMjA0NTAyMjk2N0wpCisjZGVmaW5lIEdfQkFEX0hPU1ROQU1FICAgICAgICAgICAgICAgICAgICAgICAgICAgKC0yMDQ1MDIyOTY2TCkKKyNkZWZpbmUgR19XUk9OR19NRUNIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLTIwNDUwMjI5NjVMKQorI2RlZmluZSBHX0JBRF9UT0tfSEVBREVSICAgICAgICAgICAgICAgICAgICAgICAgICgtMjA0NTAyMjk2NEwpCisjZGVmaW5lIEdfQkFEX0RJUkVDVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgKC0yMDQ1MDIyOTYzTCkKKyNkZWZpbmUgR19UT0tfVFJVTkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLTIwNDUwMjI5NjJMKQorI2RlZmluZSBHX1JFRkxFQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtMjA0NTAyMjk2MUwpCisjZGVmaW5lIEdfV1JPTkdfVE9LSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKC0yMDQ1MDIyOTYwTCkKKworI2RlZmluZSBnX09JRF9lcXVhbChvMSxvMikgXAorICAgKCgobzEpLT5sZW4gPT0gKG8yKS0+bGVuKSAmJiBcCisgICAgKG1lbWNtcCgobzEpLT5kYXRhLChvMiktPmRhdGEsKGludCkgKG8xKS0+bGVuKSA9PSAwKSkKKwordTMyIGdfdmVyaWZ5X3Rva2VuX2hlYWRlcigKKyAgICAgc3RydWN0IHhkcl9uZXRvYmogKm1lY2gsCisgICAgIGludCAqYm9keV9zaXplLAorICAgICB1bnNpZ25lZCBjaGFyICoqYnVmX2luLAorICAgICBpbnQgdG9rc2l6ZSk7CisKK2ludCBnX3Rva2VuX3NpemUoCisgICAgIHN0cnVjdCB4ZHJfbmV0b2JqICptZWNoLAorICAgICB1bnNpZ25lZCBpbnQgYm9keV9zaXplKTsKKwordm9pZCBnX21ha2VfdG9rZW5faGVhZGVyKAorICAgICBzdHJ1Y3QgeGRyX25ldG9iaiAqbWVjaCwKKyAgICAgaW50IGJvZHlfc2l6ZSwKKyAgICAgdW5zaWduZWQgY2hhciAqKmJ1Zik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9nc3NfZXJyLmggYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9nc3NfZXJyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI2MDhhMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL2dzc19lcnIuaApAQCAtMCwwICsxLDE3NyBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL3N1bnJwYy9nc3NfZXJyLmgKKyAqCisgKiAgQWRhcHRlZCBmcm9tIE1JVCBLZXJiZXJvcyA1LTEuMi4xIGluY2x1ZGUvZ3NzYXBpL2dzc2FwaS5oCisgKgorICogIENvcHlyaWdodCAoYykgMjAwMiBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBNaWNoaWdhbi4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBBbmR5IEFkYW1zb24gICA8YW5kcm9zQHVtaWNoLmVkdT4KKyAqLworCisvKgorICogQ29weXJpZ2h0IDE5OTMgYnkgT3BlblZpc2lvbiBUZWNobm9sb2dpZXMsIEluYy4KKyAqIAorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSwgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4KKyAqIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgT3BlblZpc2lvbiBub3QgYmUgdXNlZAorICogaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZQorICogd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiBPcGVuVmlzaW9uIG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKiAKKyAqIE9QRU5WSVNJT04gRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsCisgKiBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MsIElOIE5PCisgKiBFVkVOVCBTSEFMTCBPUEVOVklTSU9OIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNUIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GCisgKiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IKKyAqIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IKKyAqIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2lmbmRlZiBfTElOVVhfU1VOUlBDX0dTU19FUlJfSAorI2RlZmluZSBfTElOVVhfU1VOUlBDX0dTU19FUlJfSAorCisjaWZkZWYgX19LRVJORUxfXworCit0eXBlZGVmIHVuc2lnbmVkIGludCBPTV91aW50MzI7CisKKy8qCisgKiBGbGFnIGJpdHMgZm9yIGNvbnRleHQtbGV2ZWwgc2VydmljZXMuCisgKi8KKyNkZWZpbmUgR1NTX0NfREVMRUdfRkxBRyAxCisjZGVmaW5lIEdTU19DX01VVFVBTF9GTEFHIDIKKyNkZWZpbmUgR1NTX0NfUkVQTEFZX0ZMQUcgNAorI2RlZmluZSBHU1NfQ19TRVFVRU5DRV9GTEFHIDgKKyNkZWZpbmUgR1NTX0NfQ09ORl9GTEFHIDE2CisjZGVmaW5lIEdTU19DX0lOVEVHX0ZMQUcgMzIKKyNkZWZpbmUJR1NTX0NfQU5PTl9GTEFHIDY0CisjZGVmaW5lIEdTU19DX1BST1RfUkVBRFlfRkxBRyAxMjgKKyNkZWZpbmUgR1NTX0NfVFJBTlNfRkxBRyAyNTYKKworLyoKKyAqIENyZWRlbnRpYWwgdXNhZ2Ugb3B0aW9ucworICovCisjZGVmaW5lIEdTU19DX0JPVEggMAorI2RlZmluZSBHU1NfQ19JTklUSUFURSAxCisjZGVmaW5lIEdTU19DX0FDQ0VQVCAyCisKKy8qCisgKiBTdGF0dXMgY29kZSB0eXBlcyBmb3IgZ3NzX2Rpc3BsYXlfc3RhdHVzCisgKi8KKyNkZWZpbmUgR1NTX0NfR1NTX0NPREUgMQorI2RlZmluZSBHU1NfQ19NRUNIX0NPREUgMgorCisKKy8qCisgKiBEZWZpbmUgdGhlIGRlZmF1bHQgUXVhbGl0eSBvZiBQcm90ZWN0aW9uIGZvciBwZXItbWVzc2FnZSBzZXJ2aWNlcy4gIE5vdGUKKyAqIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gdGhhdCBvZmZlcnMgbXVsdGlwbGUgbGV2ZWxzIG9mIFFPUCBtYXkgZWl0aGVyIHJlc2VydmUKKyAqIGEgdmFsdWUgKGZvciBleGFtcGxlIHplcm8sIGFzIGFzc3VtZWQgaGVyZSkgdG8gbWVhbiAiZGVmYXVsdCBwcm90ZWN0aW9uIiwgb3IKKyAqIGFsdGVybmF0aXZlbHkgbWF5IHNpbXBseSBlcXVhdGUgR1NTX0NfUU9QX0RFRkFVTFQgdG8gYSBzcGVjaWZpYyBleHBsaWNpdAorICogUU9QIHZhbHVlLiAgSG93ZXZlciBhIHZhbHVlIG9mIDAgc2hvdWxkIGFsd2F5cyBiZSBpbnRlcnByZXRlZCBieSBhIEdTU0FQSQorICogaW1wbGVtZW50YXRpb24gYXMgYSByZXF1ZXN0IGZvciB0aGUgZGVmYXVsdCBwcm90ZWN0aW9uIGxldmVsLgorICovCisjZGVmaW5lIEdTU19DX1FPUF9ERUZBVUxUIDAKKworLyoKKyAqIEV4cGlyYXRpb24gdGltZSBvZiAyXjMyLTEgc2Vjb25kcyBtZWFucyBpbmZpbml0ZSBsaWZldGltZSBmb3IgYQorICogY3JlZGVudGlhbCBvciBzZWN1cml0eSBjb250ZXh0CisgKi8KKyNkZWZpbmUgR1NTX0NfSU5ERUZJTklURSAoKE9NX3VpbnQzMikgMHhmZmZmZmZmZnVsKQorCisKKy8qIE1ham9yIHN0YXR1cyBjb2RlcyAqLworCisjZGVmaW5lIEdTU19TX0NPTVBMRVRFIDAKKworLyoKKyAqIFNvbWUgImhlbHBlciIgZGVmaW5pdGlvbnMgdG8gbWFrZSB0aGUgc3RhdHVzIGNvZGUgbWFjcm9zIG9idmlvdXMuCisgKi8KKyNkZWZpbmUgR1NTX0NfQ0FMTElOR19FUlJPUl9PRkZTRVQgMjQKKyNkZWZpbmUgR1NTX0NfUk9VVElORV9FUlJPUl9PRkZTRVQgMTYKKyNkZWZpbmUgR1NTX0NfU1VQUExFTUVOVEFSWV9PRkZTRVQgMAorI2RlZmluZSBHU1NfQ19DQUxMSU5HX0VSUk9SX01BU0sgKChPTV91aW50MzIpIDAzNzd1bCkKKyNkZWZpbmUgR1NTX0NfUk9VVElORV9FUlJPUl9NQVNLICgoT01fdWludDMyKSAwMzc3dWwpCisjZGVmaW5lIEdTU19DX1NVUFBMRU1FTlRBUllfTUFTSyAoKE9NX3VpbnQzMikgMDE3Nzc3N3VsKQorCisvKgorICogVGhlIG1hY3JvcyB0aGF0IHRlc3Qgc3RhdHVzIGNvZGVzIGZvciBlcnJvciBjb25kaXRpb25zLiAgTm90ZSB0aGF0IHRoZQorICogR1NTX0VSUk9SKCkgbWFjcm8gaGFzIGNoYW5nZWQgc2xpZ2h0bHkgZnJvbSB0aGUgVjEgR1NTQVBJIHNvIHRoYXQgaXQgbm93CisgKiBldmFsdWF0ZXMgaXRzIGFyZ3VtZW50IG9ubHkgb25jZS4KKyAqLworI2RlZmluZSBHU1NfQ0FMTElOR19FUlJPUih4KSBcCisgICgoeCkgJiAoR1NTX0NfQ0FMTElOR19FUlJPUl9NQVNLIDw8IEdTU19DX0NBTExJTkdfRVJST1JfT0ZGU0VUKSkKKyNkZWZpbmUgR1NTX1JPVVRJTkVfRVJST1IoeCkgXAorICAoKHgpICYgKEdTU19DX1JPVVRJTkVfRVJST1JfTUFTSyA8PCBHU1NfQ19ST1VUSU5FX0VSUk9SX09GRlNFVCkpCisjZGVmaW5lIEdTU19TVVBQTEVNRU5UQVJZX0lORk8oeCkgXAorICAoKHgpICYgKEdTU19DX1NVUFBMRU1FTlRBUllfTUFTSyA8PCBHU1NfQ19TVVBQTEVNRU5UQVJZX09GRlNFVCkpCisjZGVmaW5lIEdTU19FUlJPUih4KSBcCisgICgoeCkgJiAoKEdTU19DX0NBTExJTkdfRVJST1JfTUFTSyA8PCBHU1NfQ19DQUxMSU5HX0VSUk9SX09GRlNFVCkgfCBcCisJICAoR1NTX0NfUk9VVElORV9FUlJPUl9NQVNLIDw8IEdTU19DX1JPVVRJTkVfRVJST1JfT0ZGU0VUKSkpCisKKy8qCisgKiBOb3cgdGhlIGFjdHVhbCBzdGF0dXMgY29kZSBkZWZpbml0aW9ucworICovCisKKy8qCisgKiBDYWxsaW5nIGVycm9yczoKKyAqLworI2RlZmluZSBHU1NfU19DQUxMX0lOQUNDRVNTSUJMRV9SRUFEIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoT01fdWludDMyKSAxdWwpIDw8IEdTU19DX0NBTExJTkdfRVJST1JfT0ZGU0VUKQorI2RlZmluZSBHU1NfU19DQUxMX0lOQUNDRVNTSUJMRV9XUklURSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE9NX3VpbnQzMikgMnVsKSA8PCBHU1NfQ19DQUxMSU5HX0VSUk9SX09GRlNFVCkKKyNkZWZpbmUgR1NTX1NfQ0FMTF9CQURfU1RSVUNUVVJFIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoT01fdWludDMyKSAzdWwpIDw8IEdTU19DX0NBTExJTkdfRVJST1JfT0ZGU0VUKQorCisvKgorICogUm91dGluZSBlcnJvcnM6CisgKi8KKyNkZWZpbmUgR1NTX1NfQkFEX01FQ0ggKCgoT01fdWludDMyKSAxdWwpIDw8IEdTU19DX1JPVVRJTkVfRVJST1JfT0ZGU0VUKQorI2RlZmluZSBHU1NfU19CQURfTkFNRSAoKChPTV91aW50MzIpIDJ1bCkgPDwgR1NTX0NfUk9VVElORV9FUlJPUl9PRkZTRVQpCisjZGVmaW5lIEdTU19TX0JBRF9OQU1FVFlQRSAoKChPTV91aW50MzIpIDN1bCkgPDwgR1NTX0NfUk9VVElORV9FUlJPUl9PRkZTRVQpCisjZGVmaW5lIEdTU19TX0JBRF9CSU5ESU5HUyAoKChPTV91aW50MzIpIDR1bCkgPDwgR1NTX0NfUk9VVElORV9FUlJPUl9PRkZTRVQpCisjZGVmaW5lIEdTU19TX0JBRF9TVEFUVVMgKCgoT01fdWludDMyKSA1dWwpIDw8IEdTU19DX1JPVVRJTkVfRVJST1JfT0ZGU0VUKQorI2RlZmluZSBHU1NfU19CQURfU0lHICgoKE9NX3VpbnQzMikgNnVsKSA8PCBHU1NfQ19ST1VUSU5FX0VSUk9SX09GRlNFVCkKKyNkZWZpbmUgR1NTX1NfTk9fQ1JFRCAoKChPTV91aW50MzIpIDd1bCkgPDwgR1NTX0NfUk9VVElORV9FUlJPUl9PRkZTRVQpCisjZGVmaW5lIEdTU19TX05PX0NPTlRFWFQgKCgoT01fdWludDMyKSA4dWwpIDw8IEdTU19DX1JPVVRJTkVfRVJST1JfT0ZGU0VUKQorI2RlZmluZSBHU1NfU19ERUZFQ1RJVkVfVE9LRU4gKCgoT01fdWludDMyKSA5dWwpIDw8IEdTU19DX1JPVVRJTkVfRVJST1JfT0ZGU0VUKQorI2RlZmluZSBHU1NfU19ERUZFQ1RJVkVfQ1JFREVOVElBTCBcCisgICAgICgoKE9NX3VpbnQzMikgMTB1bCkgPDwgR1NTX0NfUk9VVElORV9FUlJPUl9PRkZTRVQpCisjZGVmaW5lIEdTU19TX0NSRURFTlRJQUxTX0VYUElSRUQgXAorICAgICAoKChPTV91aW50MzIpIDExdWwpIDw8IEdTU19DX1JPVVRJTkVfRVJST1JfT0ZGU0VUKQorI2RlZmluZSBHU1NfU19DT05URVhUX0VYUElSRUQgXAorICAgICAoKChPTV91aW50MzIpIDEydWwpIDw8IEdTU19DX1JPVVRJTkVfRVJST1JfT0ZGU0VUKQorI2RlZmluZSBHU1NfU19GQUlMVVJFICgoKE9NX3VpbnQzMikgMTN1bCkgPDwgR1NTX0NfUk9VVElORV9FUlJPUl9PRkZTRVQpCisjZGVmaW5lIEdTU19TX0JBRF9RT1AgKCgoT01fdWludDMyKSAxNHVsKSA8PCBHU1NfQ19ST1VUSU5FX0VSUk9SX09GRlNFVCkKKyNkZWZpbmUgR1NTX1NfVU5BVVRIT1JJWkVEICgoKE9NX3VpbnQzMikgMTV1bCkgPDwgR1NTX0NfUk9VVElORV9FUlJPUl9PRkZTRVQpCisjZGVmaW5lIEdTU19TX1VOQVZBSUxBQkxFICgoKE9NX3VpbnQzMikgMTZ1bCkgPDwgR1NTX0NfUk9VVElORV9FUlJPUl9PRkZTRVQpCisjZGVmaW5lIEdTU19TX0RVUExJQ0FURV9FTEVNRU5UIFwKKyAgICAgKCgoT01fdWludDMyKSAxN3VsKSA8PCBHU1NfQ19ST1VUSU5FX0VSUk9SX09GRlNFVCkKKyNkZWZpbmUgR1NTX1NfTkFNRV9OT1RfTU4gXAorICAgICAoKChPTV91aW50MzIpIDE4dWwpIDw8IEdTU19DX1JPVVRJTkVfRVJST1JfT0ZGU0VUKQorCisvKgorICogU3VwcGxlbWVudGFyeSBpbmZvIGJpdHM6CisgKi8KKyNkZWZpbmUgR1NTX1NfQ09OVElOVUVfTkVFREVEICgxIDw8IChHU1NfQ19TVVBQTEVNRU5UQVJZX09GRlNFVCArIDApKQorI2RlZmluZSBHU1NfU19EVVBMSUNBVEVfVE9LRU4gKDEgPDwgKEdTU19DX1NVUFBMRU1FTlRBUllfT0ZGU0VUICsgMSkpCisjZGVmaW5lIEdTU19TX09MRF9UT0tFTiAoMSA8PCAoR1NTX0NfU1VQUExFTUVOVEFSWV9PRkZTRVQgKyAyKSkKKyNkZWZpbmUgR1NTX1NfVU5TRVFfVE9LRU4gKDEgPDwgKEdTU19DX1NVUFBMRU1FTlRBUllfT0ZGU0VUICsgMykpCisjZGVmaW5lIEdTU19TX0dBUF9UT0tFTiAoMSA8PCAoR1NTX0NfU1VQUExFTUVOVEFSWV9PRkZTRVQgKyA0KSkKKworLyogWFhYWCB0aGVzZSBhcmUgbm90IHBhcnQgb2YgdGhlIEdTU0FQSSBDIGJpbmRpbmdzISAgKGJ1dCBzaG91bGQgYmUpICovCisKKyNkZWZpbmUgR1NTX0NBTExJTkdfRVJST1JfRklFTEQoeCkgXAorICAgKCgoeCkgPj4gR1NTX0NfQ0FMTElOR19FUlJPUl9PRkZTRVQpICYgR1NTX0NfQ0FMTElOR19FUlJPUl9NQVNLKQorI2RlZmluZSBHU1NfUk9VVElORV9FUlJPUl9GSUVMRCh4KSBcCisgICAoKCh4KSA+PiBHU1NfQ19ST1VUSU5FX0VSUk9SX09GRlNFVCkgJiBHU1NfQ19ST1VUSU5FX0VSUk9SX01BU0spCisjZGVmaW5lIEdTU19TVVBQTEVNRU5UQVJZX0lORk9fRklFTEQoeCkgXAorICAgKCgoeCkgPj4gR1NTX0NfU1VQUExFTUVOVEFSWV9PRkZTRVQpICYgR1NTX0NfU1VQUExFTUVOVEFSWV9NQVNLKQorCisvKiBYWFhYIFRoaXMgaXMgYSBuZWNlc3NhcnkgZXZpbCB1bnRpbCB0aGUgc3BlYyBpcyBmaXhlZCAqLworI2RlZmluZSBHU1NfU19DUkVEX1VOQVZBSUwgR1NTX1NfRkFJTFVSRQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9fTElOVVhfU1VOUlBDX0dTU19FUlJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdW5ycGMvZ3NzX2tyYjUuaCBiL2luY2x1ZGUvbGludXgvc3VucnBjL2dzc19rcmI1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZlMzFkMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL2dzc19rcmI1LmgKQEAgLTAsMCArMSwxNDggQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9saW51eC9zdW5ycGMvZ3NzX2tyYjVfdHlwZXMuaAorICoKKyAqICBBZGFwdGVkIGZyb20gTUlUIEtlcmJlcm9zIDUtMS4yLjEgbGliL2luY2x1ZGUva3JiNS5oLAorICogIGxpYi9nc3NhcGkva3JiNS9nc3NhcGlQX2tyYjUuaCwgYW5kIG90aGVycworICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgTWljaGlnYW4uCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgQW5keSBBZGFtc29uICAgPGFuZHJvc0B1bWljaC5lZHU+CisgKiAgQnJ1Y2UgRmllbGRzICAgPGJmaWVsZHNAdW1pY2guZWR1PgorICovCisKKy8qCisgKiBDb3B5cmlnaHQgMTk5NSBieSB0aGUgTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neS4KKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogRXhwb3J0IG9mIHRoaXMgc29mdHdhcmUgZnJvbSB0aGUgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhIG1heQorICogICByZXF1aXJlIGEgc3BlY2lmaWMgbGljZW5zZSBmcm9tIHRoZSBVbml0ZWQgU3RhdGVzIEdvdmVybm1lbnQuCisgKiAgIEl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiBhbnkgcGVyc29uIG9yIG9yZ2FuaXphdGlvbiBjb250ZW1wbGF0aW5nCisgKiAgIGV4cG9ydCB0byBvYnRhaW4gc3VjaCBhIGxpY2Vuc2UgYmVmb3JlIGV4cG9ydGluZy4KKyAqCisgKiBXSVRISU4gVEhBVCBDT05TVFJBSU5ULCBwZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQKKyAqIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZAorICogd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZAorICogdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdAorICogdGhlIG5hbWUgb2YgTS5JLlQuIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nCisgKiB0byBkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IKKyAqIHBlcm1pc3Npb24uICBGdXJ0aGVybW9yZSBpZiB5b3UgbW9kaWZ5IHRoaXMgc29mdHdhcmUgeW91IG11c3QgbGFiZWwKKyAqIHlvdXIgc29mdHdhcmUgYXMgbW9kaWZpZWQgc29mdHdhcmUgYW5kIG5vdCBkaXN0cmlidXRlIGl0IGluIHN1Y2ggYQorICogZmFzaGlvbiB0aGF0IGl0IG1pZ2h0IGJlIGNvbmZ1c2VkIHdpdGggdGhlIG9yaWdpbmFsIE0uSS5ULiBzb2Z0d2FyZS4KKyAqIE0uSS5ULiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mCisgKiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzCisgKiBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvc3VucnBjL2F1dGhfZ3NzLmg+CisjaW5jbHVkZSA8bGludXgvc3VucnBjL2dzc19lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9zdW5ycGMvZ3NzX2FzbjEuaD4KKworc3RydWN0IGtyYjVfY3R4IHsKKwlpbnQJCQlpbml0aWF0ZTsgLyogMSA9IGluaXRpYXRpbmcsIDAgPSBhY2NlcHRpbmcgKi8KKwlpbnQJCQlzZWVkX2luaXQ7CisJdW5zaWduZWQgY2hhcgkJc2VlZFsxNl07CisJaW50CQkJc2lnbmFsZzsKKwlpbnQJCQlzZWFsYWxnOworCXN0cnVjdCBjcnlwdG9fdGZtCSplbmM7CisJc3RydWN0IGNyeXB0b190Zm0JKnNlcTsKKwlzMzIJCQllbmR0aW1lOworCXUzMgkJCXNlcV9zZW5kOworCXN0cnVjdCB4ZHJfbmV0b2JqCW1lY2hfdXNlZDsKK307CisKKyNkZWZpbmUgS0dfVE9LX01JQ19NU0cgICAgMHgwMTAxCisjZGVmaW5lIEtHX1RPS19XUkFQX01TRyAgIDB4MDIwMQorCitlbnVtIHNnbl9hbGcgeworCVNHTl9BTEdfREVTX01BQ19NRDUgPSAweDAwMDAsCisJU0dOX0FMR19NRDJfNSA9IDB4MDAwMSwKKwlTR05fQUxHX0RFU19NQUMgPSAweDAwMDIsCisJU0dOX0FMR18zID0gMHgwMDAzLAkJLyogbm90IHB1Ymxpc2hlZCAqLworCVNHTl9BTEdfSE1BQ19NRDUgPSAweDAwMTEsCS8qIG1pY3Jvc29mdCB3Mms7IG5vIHN1cHBvcnQgKi8KKwlTR05fQUxHX0hNQUNfU0hBMV9ERVMzX0tEID0gMHgwMDA0Cit9OworZW51bSBzZWFsX2FsZyB7CisJU0VBTF9BTEdfTk9ORSA9IDB4ZmZmZiwKKwlTRUFMX0FMR19ERVMgPSAweDAwMDAsCisJU0VBTF9BTEdfMSA9IDB4MDAwMSwJCS8qIG5vdCBwdWJsaXNoZWQgKi8KKwlTRUFMX0FMR19NSUNST1NPRlRfUkM0ID0gMHgwMDEwLC8qIG1pY3Jvc29mdCB3Mms7IG5vIHN1cHBvcnQgKi8KKwlTRUFMX0FMR19ERVMzS0QgPSAweDAwMDIKK307CisKKyNkZWZpbmUgS1JCNV9DS1NVTV9MRU5HVEggOAorCisjZGVmaW5lIENLU1VNVFlQRV9DUkMzMgkJCTB4MDAwMQorI2RlZmluZSBDS1NVTVRZUEVfUlNBX01ENAkJMHgwMDAyCisjZGVmaW5lIENLU1VNVFlQRV9SU0FfTUQ0X0RFUwkJMHgwMDAzCisjZGVmaW5lIENLU1VNVFlQRV9ERVNDQkMJCTB4MDAwNAorI2RlZmluZSBDS1NVTVRZUEVfUlNBX01ENQkJMHgwMDA3CisjZGVmaW5lIENLU1VNVFlQRV9SU0FfTUQ1X0RFUwkJMHgwMDA4CisjZGVmaW5lIENLU1VNVFlQRV9OSVNUX1NIQQkJMHgwMDA5CisjZGVmaW5lIENLU1VNVFlQRV9ITUFDX1NIQTFfREVTMwkweDAwMGMKKworLyogZnJvbSBnc3NhcGlfZXJyX2tyYjUuaCAqLworI2RlZmluZSBLR19DQ0FDSEVfTk9NQVRDSCAgICAgICAgICAgICAgICAgICAgICAgICgzOTc1NjAzMkwpCisjZGVmaW5lIEtHX0tFWVRBQl9OT01BVENIICAgICAgICAgICAgICAgICAgICAgICAgKDM5NzU2MDMzTCkKKyNkZWZpbmUgS0dfVEdUX01JU1NJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAoMzk3NTYwMzRMKQorI2RlZmluZSBLR19OT19TVUJLRVkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgzOTc1NjAzNUwpCisjZGVmaW5lIEtHX0NPTlRFWFRfRVNUQUJMSVNIRUQgICAgICAgICAgICAgICAgICAgKDM5NzU2MDM2TCkKKyNkZWZpbmUgS0dfQkFEX1NJR05fVFlQRSAgICAgICAgICAgICAgICAgICAgICAgICAoMzk3NTYwMzdMKQorI2RlZmluZSBLR19CQURfTEVOR1RIICAgICAgICAgICAgICAgICAgICAgICAgICAgICgzOTc1NjAzOEwpCisjZGVmaW5lIEtHX0NUWF9JTkNPTVBMRVRFICAgICAgICAgICAgICAgICAgICAgICAgKDM5NzU2MDM5TCkKKyNkZWZpbmUgS0dfQ09OVEVYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMzk3NTYwNDBMKQorI2RlZmluZSBLR19DUkVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgzOTc1NjA0MUwpCisjZGVmaW5lIEtHX0VOQ19ERVNDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDM5NzU2MDQyTCkKKyNkZWZpbmUgS0dfQkFEX1NFUSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMzk3NTYwNDNMKQorI2RlZmluZSBLR19FTVBUWV9DQ0FDSEUgICAgICAgICAgICAgICAgICAgICAgICAgICgzOTc1NjA0NEwpCisjZGVmaW5lIEtHX05PX0NUWVBFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDM5NzU2MDQ1TCkKKworLyogcGVyIEtlcmJlcm9zIHY1IHByb3RvY29sIHNwZWMgY3J5cHRvIHR5cGVzIGZyb20gdGhlIHdpcmUuIAorICogdGhlc2UgZ2V0IG1hcHBlZCB0byBsaW51eCBrZXJuZWwgY3J5cHRvIHJvdXRpbmVzLiAgCisgKi8KKyNkZWZpbmUgRU5DVFlQRV9OVUxMICAgICAgICAgICAgMHgwMDAwCisjZGVmaW5lIEVOQ1RZUEVfREVTX0NCQ19DUkMgICAgIDB4MDAwMQkvKiBERVMgY2JjIG1vZGUgd2l0aCBDUkMtMzIgKi8KKyNkZWZpbmUgRU5DVFlQRV9ERVNfQ0JDX01ENCAgICAgMHgwMDAyCS8qIERFUyBjYmMgbW9kZSB3aXRoIFJTQS1NRDQgKi8KKyNkZWZpbmUgRU5DVFlQRV9ERVNfQ0JDX01ENSAgICAgMHgwMDAzCS8qIERFUyBjYmMgbW9kZSB3aXRoIFJTQS1NRDUgKi8KKyNkZWZpbmUgRU5DVFlQRV9ERVNfQ0JDX1JBVyAgICAgMHgwMDA0CS8qIERFUyBjYmMgbW9kZSByYXcgKi8KKy8qIFhYWCBkZXByZWNhdGVkPyAqLworI2RlZmluZSBFTkNUWVBFX0RFUzNfQ0JDX1NIQSAgICAweDAwMDUJLyogREVTLTMgY2JjIG1vZGUgd2l0aCBOSVNULVNIQSAqLworI2RlZmluZSBFTkNUWVBFX0RFUzNfQ0JDX1JBVyAgICAweDAwMDYJLyogREVTLTMgY2JjIG1vZGUgcmF3ICovCisjZGVmaW5lIEVOQ1RZUEVfREVTX0hNQUNfU0hBMSAgIDB4MDAwOAorI2RlZmluZSBFTkNUWVBFX0RFUzNfQ0JDX1NIQTEgICAweDAwMTAKKyNkZWZpbmUgRU5DVFlQRV9VTktOT1dOICAgICAgICAgMHgwMWZmCisKK3MzMgorbWFrZV9jaGVja3N1bShzMzIgY2tzdW10eXBlLCBjaGFyICpoZWFkZXIsIGludCBoZHJsZW4sIHN0cnVjdCB4ZHJfYnVmICpib2R5LAorCQkgICBzdHJ1Y3QgeGRyX25ldG9iaiAqY2tzdW0pOworCit1MzIKK2tyYjVfbWFrZV90b2tlbihzdHJ1Y3Qga3JiNV9jdHggKmNvbnRleHRfaGFuZGxlLCBpbnQgcW9wX3JlcSwKKwlzdHJ1Y3QgeGRyX2J1ZiAqaW5wdXRfbWVzc2FnZV9idWZmZXIsCisJc3RydWN0IHhkcl9uZXRvYmogKm91dHB1dF9tZXNzYWdlX2J1ZmZlciwgaW50IHRva3R5cGUpOworCit1MzIKK2tyYjVfcmVhZF90b2tlbihzdHJ1Y3Qga3JiNV9jdHggKmNvbnRleHRfaGFuZGxlLAorCSAgc3RydWN0IHhkcl9uZXRvYmogKmlucHV0X3Rva2VuX2J1ZmZlciwKKwkgIHN0cnVjdCB4ZHJfYnVmICptZXNzYWdlX2J1ZmZlciwKKwkgIGludCAqcW9wX3N0YXRlLCBpbnQgdG9rdHlwZSk7CisKK3UzMgora3JiNV9lbmNyeXB0KHN0cnVjdCBjcnlwdG9fdGZtICoga2V5LAorCSAgICAgdm9pZCAqaXYsIHZvaWQgKmluLCB2b2lkICpvdXQsIGludCBsZW5ndGgpOworCit1MzIKK2tyYjVfZGVjcnlwdChzdHJ1Y3QgY3J5cHRvX3RmbSAqIGtleSwKKwkgICAgIHZvaWQgKml2LCB2b2lkICppbiwgdm9pZCAqb3V0LCBpbnQgbGVuZ3RoKTsgCisKK3MzMgora3JiNV9tYWtlX3NlcV9udW0oc3RydWN0IGNyeXB0b190Zm0gKiBrZXksCisJCWludCBkaXJlY3Rpb24sCisJCXMzMiBzZXFudW0sIHVuc2lnbmVkIGNoYXIgKmNrc3VtLCB1bnNpZ25lZCBjaGFyICpidWYpOworCitzMzIKK2tyYjVfZ2V0X3NlcV9udW0oc3RydWN0IGNyeXB0b190Zm0gKiBrZXksCisJICAgICAgIHVuc2lnbmVkIGNoYXIgKmNrc3VtLAorCSAgICAgICB1bnNpZ25lZCBjaGFyICpidWYsIGludCAqZGlyZWN0aW9uLCBzMzIgKiBzZXFudW0pOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdW5ycGMvZ3NzX3Nwa20zLmggYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9nc3Nfc3BrbTMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWM5OTY4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvZ3NzX3Nwa20zLmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2xpbnV4L3N1bnJwYy9nc3Nfc3BrbTMuaAorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgTWljaGlnYW4uCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgQW5keSBBZGFtc29uICAgPGFuZHJvc0B1bWljaC5lZHU+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9hdXRoX2dzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9nc3NfZXJyLmg+CisjaW5jbHVkZSA8bGludXgvc3VucnBjL2dzc19hc24xLmg+CisKK3N0cnVjdCBzcGttM19jdHggeworCXN0cnVjdCB4ZHJfbmV0b2JqCWN0eF9pZDsgLyogcGVyIG1lc3NhZ2UgY29udGV4dCBpZCAqLworCWludAkJCXFvcDsgICAgICAgICAvKiBuZWdvdGlhdGVkIHFvcCAqLworCXN0cnVjdCB4ZHJfbmV0b2JqCW1lY2hfdXNlZDsKKwl1bnNpZ25lZCBpbnQJCXJldF9mbGFncyA7CisJdW5zaWduZWQgaW50CQlyZXFfZmxhZ3MgOworCXN0cnVjdCB4ZHJfbmV0b2JqCXNoYXJlX2tleTsKKwlpbnQJCQljb25mX2FsZzsKKwlzdHJ1Y3QgY3J5cHRvX3RmbSoJZGVyaXZlZF9jb25mX2tleTsKKwlpbnQJCQlpbnRnX2FsZzsKKwlzdHJ1Y3QgY3J5cHRvX3RmbSoJZGVyaXZlZF9pbnRlZ19rZXk7CisJaW50CQkJa2V5ZXN0Yl9hbGc7ICAgLyogYWxnIHVzZWQgdG8gZ2V0IHNoYXJlX2tleSAqLworCWludAkJCW93Zl9hbGc7ICAgLyogb25lIHdheSBmdW5jdGlvbiAqLworfTsKKworLyogZnJvbSBvcGVuc3NsL29iamVjdHMuaCAqLworLyogWFhYIG5lZWQgU0VBTF9BTEdfTk9ORSAqLworI2RlZmluZSBOSURfbWQ1CQk0CisjZGVmaW5lIE5JRF9kaEtleUFncmVlbWVudAkyOCAKKyNkZWZpbmUgTklEX2Rlc19jYmMJCTMxIAorI2RlZmluZSBOSURfc2hhMQkJNjQKKyNkZWZpbmUgTklEX2Nhc3Q1X2NiYwkJMTA4CisKKy8qIFNQS00gSW5uZXJDb250ZXh0IFRva2VuIHR5cGVzICovCisKKyNkZWZpbmUgU1BLTV9FUlJPUl9UT0sJMworI2RlZmluZSBTUEtNX01JQ19UT0sJNAorI2RlZmluZSBTUEtNX1dSQVBfVE9LCTUKKyNkZWZpbmUgU1BLTV9ERUxfVE9LCTYKKwordTMyIHNwa20zX21ha2VfdG9rZW4oc3RydWN0IHNwa20zX2N0eCAqY3R4LCBpbnQgcW9wX3JlcSwgc3RydWN0IHhkcl9idWYgKiB0ZXh0LCBzdHJ1Y3QgeGRyX25ldG9iaiAqIHRva2VuLCBpbnQgdG9rdHlwZSk7CisKK3UzMiBzcGttM19yZWFkX3Rva2VuKHN0cnVjdCBzcGttM19jdHggKmN0eCwgc3RydWN0IHhkcl9uZXRvYmogKnJlYWRfdG9rZW4sIHN0cnVjdCB4ZHJfYnVmICptZXNzYWdlX2J1ZmZlciwgaW50ICpxb3Bfc3RhdGUsIGludCB0b2t0eXBlKTsKKworI2RlZmluZSBDS1NVTVRZUEVfUlNBX01ENSAgICAgICAgICAgIDB4MDAwNworCitzMzIgbWFrZV9jaGVja3N1bShzMzIgY2tzdW10eXBlLCBjaGFyICpoZWFkZXIsIGludCBoZHJsZW4sIHN0cnVjdCB4ZHJfYnVmICpib2R5LAorICAgICAgICAgICAgICAgICAgIHN0cnVjdCB4ZHJfbmV0b2JqICpja3N1bSk7Cit2b2lkIGFzbjFfYml0c3RyaW5nX2xlbihzdHJ1Y3QgeGRyX25ldG9iaiAqaW4sIGludCAqZW5jbGVuLCBpbnQgKnplcm9iaXRzKTsKK2ludCBkZWNvZGVfYXNuMV9iaXRzdHJpbmcoc3RydWN0IHhkcl9uZXRvYmogKm91dCwgY2hhciAqaW4sIGludCBlbmNsZW4sIAorICAgICAgICAgICAgICAgICAgIGludCBleHBsZW4pOwordm9pZCBzcGttM19taWNfaGVhZGVyKHVuc2lnbmVkIGNoYXIgKipoZHJidWYsIHVuc2lnbmVkIGludCAqaGRybGVuLCAKKyAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpjdHhoZHIsIGludCBlbGVuLCBpbnQgemJpdCk7Cit2b2lkIHNwa20zX21ha2VfbWljX3Rva2VuKHVuc2lnbmVkICBjaGFyICoqdG9rcCwgaW50IHRva2xlbiwgCisgICAgICAgICAgICAgICAgICAgc3RydWN0IHhkcl9uZXRvYmogKm1pY19oZHIsCisgICAgICAgICAgICAgICAgICAgc3RydWN0IHhkcl9uZXRvYmogKm1kNWNrc3VtLCBpbnQgbWQ1ZWxlbiwgaW50IG1kNXpiaXQpOwordTMyIHNwa20zX3ZlcmlmeV9taWNfdG9rZW4odW5zaWduZWQgY2hhciAqKnRva3AsIGludCAqbWljX2hkcmxlbiwgCisgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqKmNrc3VtKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VucnBjL21zZ19wcm90LmggYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9tc2dfcHJvdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1ZjExNTMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9tc2dfcHJvdC5oCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL25ldC9zdW5ycGMvbXNnX3Byb3QuaAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NiwgT2xhZiBLaXJjaCA8b2tpckBtb25hZC5zd2IuZGU+CisgKi8KKworI2lmbmRlZiBfTElOVVhfU1VOUlBDX01TR1BST1RfSF8KKyNkZWZpbmUgX0xJTlVYX1NVTlJQQ19NU0dQUk9UX0hfCisKKyNpZmRlZiBfX0tFUk5FTF9fIC8qIHVzZXIgcHJvZ3JhbXMgc2hvdWxkIGdldCB0aGVzZSBmcm9tIHRoZSBycGMgaGVhZGVyIGZpbGVzICovCisKKyNkZWZpbmUgUlBDX1ZFUlNJT04gMgorCisvKiBzcGVjIGRlZmluZXMgYXV0aGVudGljYXRpb24gZmxhdm9yIGFzIGFuIHVuc2lnbmVkIDMyIGJpdCBpbnRlZ2VyICovCit0eXBlZGVmIHUzMglycGNfYXV0aGZsYXZvcl90OworCitlbnVtIHJwY19hdXRoX2ZsYXZvcnMgeworCVJQQ19BVVRIX05VTEwgID0gMCwKKwlSUENfQVVUSF9VTklYICA9IDEsCisJUlBDX0FVVEhfU0hPUlQgPSAyLAorCVJQQ19BVVRIX0RFUyAgID0gMywKKwlSUENfQVVUSF9LUkIgICA9IDQsCisJUlBDX0FVVEhfR1NTICAgPSA2LAorCVJQQ19BVVRIX01BWEZMQVZPUiA9IDgsCisJLyogcHNldWRvZmxhdm9yczogKi8KKwlSUENfQVVUSF9HU1NfS1JCNSAgPSAzOTAwMDMsCisJUlBDX0FVVEhfR1NTX0tSQjVJID0gMzkwMDA0LAorCVJQQ19BVVRIX0dTU19LUkI1UCA9IDM5MDAwNSwKKwlSUENfQVVUSF9HU1NfTEtFWSAgPSAzOTAwMDYsCisJUlBDX0FVVEhfR1NTX0xLRVlJID0gMzkwMDA3LAorCVJQQ19BVVRIX0dTU19MS0VZUCA9IDM5MDAwOCwKKwlSUENfQVVUSF9HU1NfU1BLTSAgPSAzOTAwMDksCisJUlBDX0FVVEhfR1NTX1NQS01JID0gMzkwMDEwLAorCVJQQ19BVVRIX0dTU19TUEtNUCA9IDM5MDAxMSwKK307CisKK2VudW0gcnBjX21zZ190eXBlIHsKKwlSUENfQ0FMTCA9IDAsCisJUlBDX1JFUExZID0gMQorfTsKKworZW51bSBycGNfcmVwbHlfc3RhdCB7CisJUlBDX01TR19BQ0NFUFRFRCA9IDAsCisJUlBDX01TR19ERU5JRUQgPSAxCit9OworCitlbnVtIHJwY19hY2NlcHRfc3RhdCB7CisJUlBDX1NVQ0NFU1MgPSAwLAorCVJQQ19QUk9HX1VOQVZBSUwgPSAxLAorCVJQQ19QUk9HX01JU01BVENIID0gMiwKKwlSUENfUFJPQ19VTkFWQUlMID0gMywKKwlSUENfR0FSQkFHRV9BUkdTID0gNCwKKwlSUENfU1lTVEVNX0VSUiA9IDUKK307CisKK2VudW0gcnBjX3JlamVjdF9zdGF0IHsKKwlSUENfTUlTTUFUQ0ggPSAwLAorCVJQQ19BVVRIX0VSUk9SID0gMQorfTsKKworZW51bSBycGNfYXV0aF9zdGF0IHsKKwlSUENfQVVUSF9PSyA9IDAsCisJUlBDX0FVVEhfQkFEQ1JFRCA9IDEsCisJUlBDX0FVVEhfUkVKRUNURURDUkVEID0gMiwKKwlSUENfQVVUSF9CQURWRVJGID0gMywKKwlSUENfQVVUSF9SRUpFQ1RFRFZFUkYgPSA0LAorCVJQQ19BVVRIX1RPT1dFQUsgPSA1LAorCS8qIFJQQ1NFQ19HU1MgZXJyb3JzICovCisJUlBDU0VDX0dTU19DUkVEUFJPQkxFTSA9IDEzLAorCVJQQ1NFQ19HU1NfQ1RYUFJPQkxFTSA9IDE0Cit9OworCisjZGVmaW5lIFJQQ19QTUFQX1BST0dSQU0JMTAwMDAwCisjZGVmaW5lIFJQQ19QTUFQX1ZFUlNJT04JMgorI2RlZmluZSBSUENfUE1BUF9QT1JUCQkxMTEKKworI2RlZmluZSBSUENfTUFYTkVUTkFNRUxFTgkyNTYKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAvKiBfTElOVVhfU1VOUlBDX01TR1BST1RfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VucnBjL3JwY19waXBlX2ZzLmggYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9ycGNfcGlwZV9mcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzOTI5MzQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9ycGNfcGlwZV9mcy5oCkBAIC0wLDAgKzEsNTAgQEAKKyNpZm5kZWYgX0xJTlVYX1NVTlJQQ19SUENfUElQRV9GU19ICisjZGVmaW5lIF9MSU5VWF9TVU5SUENfUlBDX1BJUEVfRlNfSAorCisjaWZkZWYgX19LRVJORUxfXworCitzdHJ1Y3QgcnBjX3BpcGVfbXNnIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJdm9pZCAqZGF0YTsKKwlzaXplX3QgbGVuOworCXNpemVfdCBjb3BpZWQ7CisJaW50IGVycm5vOworfTsKKworc3RydWN0IHJwY19waXBlX29wcyB7CisJc3NpemVfdCAoKnVwY2FsbCkoc3RydWN0IGZpbGUgKiwgc3RydWN0IHJwY19waXBlX21zZyAqLCBjaGFyIF9fdXNlciAqLCBzaXplX3QpOworCXNzaXplX3QgKCpkb3duY2FsbCkoc3RydWN0IGZpbGUgKiwgY29uc3QgY2hhciBfX3VzZXIgKiwgc2l6ZV90KTsKKwl2b2lkICgqcmVsZWFzZV9waXBlKShzdHJ1Y3QgaW5vZGUgKik7CisJdm9pZCAoKmRlc3Ryb3lfbXNnKShzdHJ1Y3QgcnBjX3BpcGVfbXNnICopOworfTsKKworc3RydWN0IHJwY19pbm9kZSB7CisJc3RydWN0IGlub2RlIHZmc19pbm9kZTsKKwl2b2lkICpwcml2YXRlOworCXN0cnVjdCBsaXN0X2hlYWQgcGlwZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGluX3VwY2FsbDsKKwlpbnQgcGlwZWxlbjsKKwlpbnQgbnJlYWRlcnM7CisJaW50IG53cml0ZXJzOworCXdhaXRfcXVldWVfaGVhZF90IHdhaXRxOworI2RlZmluZSBSUENfUElQRV9XQUlUX0ZPUl9PUEVOCTEKKwlpbnQgZmxhZ3M7CisJc3RydWN0IHJwY19waXBlX29wcyAqb3BzOworCXN0cnVjdCB3b3JrX3N0cnVjdCBxdWV1ZV90aW1lb3V0OworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcnBjX2lub2RlICoKK1JQQ19JKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihpbm9kZSwgc3RydWN0IHJwY19pbm9kZSwgdmZzX2lub2RlKTsKK30KKworZXh0ZXJuIGludCBycGNfcXVldWVfdXBjYWxsKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgcnBjX3BpcGVfbXNnICopOworCitleHRlcm4gc3RydWN0IGRlbnRyeSAqcnBjX21rZGlyKGNoYXIgKiwgc3RydWN0IHJwY19jbG50ICopOworZXh0ZXJuIGludCBycGNfcm1kaXIoY2hhciAqKTsKK2V4dGVybiBzdHJ1Y3QgZGVudHJ5ICpycGNfbWtwaXBlKGNoYXIgKiwgdm9pZCAqLCBzdHJ1Y3QgcnBjX3BpcGVfb3BzICosIGludCBmbGFncyk7CitleHRlcm4gaW50IHJwY191bmxpbmsoY2hhciAqKTsKKworI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VucnBjL3NjaGVkLmggYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zY2hlZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5ZDE3ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zY2hlZC5oCkBAIC0wLDAgKzEsMjczIEBACisvKgorICogbGludXgvaW5jbHVkZS9saW51eC9zdW5ycGMvc2NoZWQuaAorICoKKyAqIFNjaGVkdWxpbmcgcHJpbWl0aXZlcyBmb3Iga2VybmVsIFN1biBSUEMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk2LCBPbGFmIEtpcmNoIDxva2lyQG1vbmFkLnN3Yi5kZT4KKyAqLworCisjaWZuZGVmIF9MSU5VWF9TVU5SUENfU0NIRURfSF8KKyNkZWZpbmUgX0xJTlVYX1NVTlJQQ19TQ0hFRF9IXworCisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9zdW5ycGMvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdW5ycGMveGRyLmg+CisKKy8qCisgKiBUaGlzIGlzIHRoZSBhY3R1YWwgUlBDIHByb2NlZHVyZSBjYWxsIGluZm8uCisgKi8KK3N0cnVjdCBycGNfcHJvY2luZm87CitzdHJ1Y3QgcnBjX21lc3NhZ2UgeworCXN0cnVjdCBycGNfcHJvY2luZm8gKglycGNfcHJvYzsJLyogUHJvY2VkdXJlIGluZm9ybWF0aW9uICovCisJdm9pZCAqCQkJcnBjX2FyZ3A7CS8qIEFyZ3VtZW50cyAqLworCXZvaWQgKgkJCXJwY19yZXNwOwkvKiBSZXN1bHQgKi8KKwlzdHJ1Y3QgcnBjX2NyZWQgKglycGNfY3JlZDsJLyogQ3JlZGVudGlhbHMgKi8KK307CisKK3N0cnVjdCBycGNfd2FpdF9xdWV1ZTsKK3N0cnVjdCBycGNfd2FpdCB7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OwkJLyogd2FpdCBxdWV1ZSBsaW5rcyAqLworCXN0cnVjdCBsaXN0X2hlYWQJbGlua3M7CQkvKiBMaW5rcyB0byByZWxhdGVkIHRhc2tzICovCisJd2FpdF9xdWV1ZV9oZWFkX3QJd2FpdHE7CQkvKiBzeW5jOiBzbGVlcCBvbiB0aGlzIHEgKi8KKwlzdHJ1Y3QgcnBjX3dhaXRfcXVldWUgKglycGNfd2FpdHE7CS8qIFJQQyB3YWl0IHF1ZXVlIHdlJ3JlIG9uICovCit9OworCisvKgorICogVGhpcyBpcyB0aGUgUlBDIHRhc2sgc3RydWN0CisgKi8KK3N0cnVjdCBycGNfdGFzayB7CisjaWZkZWYgUlBDX0RFQlVHCisJdW5zaWduZWQgbG9uZwkJdGtfbWFnaWM7CS8qIDB4ZjAwYmFhICovCisjZW5kaWYKKwlzdHJ1Y3QgbGlzdF9oZWFkCXRrX3Rhc2s7CS8qIGdsb2JhbCBsaXN0IG9mIHRhc2tzICovCisJc3RydWN0IHJwY19jbG50ICoJdGtfY2xpZW50OwkvKiBSUEMgY2xpZW50ICovCisJc3RydWN0IHJwY19ycXN0ICoJdGtfcnFzdHA7CS8qIFJQQyByZXF1ZXN0ICovCisJaW50CQkJdGtfc3RhdHVzOwkvKiByZXN1bHQgb2YgbGFzdCBvcGVyYXRpb24gKi8KKworCS8qCisJICogUlBDIGNhbGwgc3RhdGUKKwkgKi8KKwlzdHJ1Y3QgcnBjX21lc3NhZ2UJdGtfbXNnOwkJLyogUlBDIGNhbGwgaW5mbyAqLworCV9fdTMyICoJCQl0a19idWZmZXI7CS8qIFhEUiBidWZmZXIgKi8KKwlzaXplX3QJCQl0a19idWZzaXplOworCV9fdTgJCQl0a19nYXJiX3JldHJ5OworCV9fdTgJCQl0a19jcmVkX3JldHJ5OworCisJdW5zaWduZWQgbG9uZwkJdGtfY29va2llOwkvKiBDb29raWUgZm9yIGJhdGNoaW5nIHRhc2tzICovCisKKwkvKgorCSAqIHRpbWVvdXRfZm4gICB0byBiZSBleGVjdXRlZCBieSB0aW1lciBib3R0b20gaGFsZgorCSAqIGNhbGxiYWNrCXRvIGJlIGV4ZWN1dGVkIGFmdGVyIHdha2luZyB1cAorCSAqIGFjdGlvbgluZXh0IHByb2NlZHVyZSBmb3IgYXN5bmMgdGFza3MKKwkgKiBleGl0CQlleGl0IGFzeW5jIHRhc2sgYW5kIHJlcG9ydCB0byBjYWxsZXIKKwkgKi8KKwl2b2lkCQkJKCp0a190aW1lb3V0X2ZuKShzdHJ1Y3QgcnBjX3Rhc2sgKik7CisJdm9pZAkJCSgqdGtfY2FsbGJhY2spKHN0cnVjdCBycGNfdGFzayAqKTsKKwl2b2lkCQkJKCp0a19hY3Rpb24pKHN0cnVjdCBycGNfdGFzayAqKTsKKwl2b2lkCQkJKCp0a19leGl0KShzdHJ1Y3QgcnBjX3Rhc2sgKik7CisJdm9pZAkJCSgqdGtfcmVsZWFzZSkoc3RydWN0IHJwY190YXNrICopOworCXZvaWQgKgkJCXRrX2NhbGxkYXRhOworCisJLyoKKwkgKiB0a190aW1lciBpcyB1c2VkIGZvciBhc3luYyBwcm9jZXNzaW5nIGJ5IHRoZSBSUEMgc2NoZWR1bGluZworCSAqIHByaW1pdGl2ZXMuIFlvdSBzaG91bGQgbm90IGFjY2VzcyB0aGlzIGRpcmVjdGx5IHVubGVzcworCSAqIHlvdSBoYXZlIGEgcGF0aG9sb2dpY2FsIGludGVyZXN0IGluIGtlcm5lbCBvb3BzZXMuCisJICovCisJc3RydWN0IHRpbWVyX2xpc3QJdGtfdGltZXI7CS8qIGtlcm5lbCB0aW1lciAqLworCXVuc2lnbmVkIGxvbmcJCXRrX3RpbWVvdXQ7CS8qIHRpbWVvdXQgZm9yIHJwY19zbGVlcCgpICovCisJdW5zaWduZWQgc2hvcnQJCXRrX2ZsYWdzOwkvKiBtaXNjIGZsYWdzICovCisJdW5zaWduZWQgY2hhcgkJdGtfYWN0aXZlICAgOiAxOy8qIFRhc2sgaGFzIGJlZW4gYWN0aXZhdGVkICovCisJdW5zaWduZWQgY2hhcgkJdGtfcHJpb3JpdHkgOiAyOy8qIFRhc2sgcHJpb3JpdHkgKi8KKwl1bnNpZ25lZCBsb25nCQl0a19ydW5zdGF0ZTsJLyogVGFzayBydW4gc3RhdHVzICovCisJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QJKnRrX3dvcmtxdWV1ZTsJLyogTm9ybWFsbHkgcnBjaW9kLCBidXQgY291bGQKKwkJCQkJCSAqIGJlIGFueSB3b3JrcXVldWUKKwkJCQkJCSAqLworCXVuaW9uIHsKKwkJc3RydWN0IHdvcmtfc3RydWN0CXRrX3dvcms7CS8qIEFzeW5jIHRhc2sgd29yayBxdWV1ZSAqLworCQlzdHJ1Y3QgcnBjX3dhaXQJCXRrX3dhaXQ7CS8qIFJQQyB3YWl0ICovCisJfSB1OworI2lmZGVmIFJQQ19ERUJVRworCXVuc2lnbmVkIHNob3J0CQl0a19waWQ7CQkvKiBkZWJ1Z2dpbmcgYWlkICovCisjZW5kaWYKK307CisjZGVmaW5lIHRrX2F1dGgJCQl0a19jbGllbnQtPmNsX2F1dGgKKyNkZWZpbmUgdGtfeHBydAkJCXRrX2NsaWVudC0+Y2xfeHBydAorCisvKiBzdXBwb3J0IHdhbGtpbmcgYSBsaXN0IG9mIHRhc2tzIG9uIGEgd2FpdCBxdWV1ZSAqLworI2RlZmluZQl0YXNrX2Zvcl9lYWNoKHRhc2ssIHBvcywgaGVhZCkgXAorCWxpc3RfZm9yX2VhY2gocG9zLCBoZWFkKSBcCisJCWlmICgodGFzaz1saXN0X2VudHJ5KHBvcywgc3RydWN0IHJwY190YXNrLCB1LnRrX3dhaXQubGlzdCkpLDEpCisKKyNkZWZpbmUJdGFza19mb3JfZmlyc3QodGFzaywgaGVhZCkgXAorCWlmICghbGlzdF9lbXB0eShoZWFkKSAmJiAgXAorCSAgICAoKHRhc2s9bGlzdF9lbnRyeSgoaGVhZCktPm5leHQsIHN0cnVjdCBycGNfdGFzaywgdS50a193YWl0Lmxpc3QpKSwxKSkKKworLyogLi4gYW5kIHdhbGtpbmcgbGlzdCBvZiBhbGwgdGFza3MgKi8KKyNkZWZpbmUJYWxsdGFza19mb3JfZWFjaCh0YXNrLCBwb3MsIGhlYWQpIFwKKwlsaXN0X2Zvcl9lYWNoKHBvcywgaGVhZCkgXAorCQlpZiAoKHRhc2s9bGlzdF9lbnRyeShwb3MsIHN0cnVjdCBycGNfdGFzaywgdGtfdGFzaykpLDEpCisKK3R5cGVkZWYgdm9pZAkJCSgqcnBjX2FjdGlvbikoc3RydWN0IHJwY190YXNrICopOworCisvKgorICogUlBDIHRhc2sgZmxhZ3MKKyAqLworI2RlZmluZSBSUENfVEFTS19BU1lOQwkJMHgwMDAxCQkvKiBpcyBhbiBhc3luYyB0YXNrICovCisjZGVmaW5lIFJQQ19UQVNLX1NXQVBQRVIJMHgwMDAyCQkvKiBpcyBzd2FwcGluZyBpbi9vdXQgKi8KKyNkZWZpbmUgUlBDX1RBU0tfQ0hJTEQJCTB4MDAwOAkJLyogaXMgY2hpbGQgb2Ygb3RoZXIgdGFzayAqLworI2RlZmluZSBSUENfQ0FMTF9NQUpPUlNFRU4JMHgwMDIwCQkvKiBtYWpvciB0aW1lb3V0IHNlZW4gKi8KKyNkZWZpbmUgUlBDX1RBU0tfUk9PVENSRURTCTB4MDA0MAkJLyogZm9yY2Ugcm9vdCBjcmVkcyAqLworI2RlZmluZSBSUENfVEFTS19EWU5BTUlDCTB4MDA4MAkJLyogdGFzayB3YXMga21hbGxvYydlZCAqLworI2RlZmluZSBSUENfVEFTS19LSUxMRUQJCTB4MDEwMAkJLyogdGFzayB3YXMga2lsbGVkICovCisjZGVmaW5lIFJQQ19UQVNLX1NPRlQJCTB4MDIwMAkJLyogVXNlIHNvZnQgdGltZW91dHMgKi8KKyNkZWZpbmUgUlBDX1RBU0tfTk9JTlRSCQkweDA0MDAJCS8qIHVuaW50ZXJydXB0aWJsZSB0YXNrICovCisKKyNkZWZpbmUgUlBDX0lTX0FTWU5DKHQpCQkoKHQpLT50a19mbGFncyAmIFJQQ19UQVNLX0FTWU5DKQorI2RlZmluZSBSUENfSVNfQ0hJTEQodCkJCSgodCktPnRrX2ZsYWdzICYgUlBDX1RBU0tfQ0hJTEQpCisjZGVmaW5lIFJQQ19JU19TV0FQUEVSKHQpCSgodCktPnRrX2ZsYWdzICYgUlBDX1RBU0tfU1dBUFBFUikKKyNkZWZpbmUgUlBDX0RPX1JPT1RPVkVSUklERSh0KQkoKHQpLT50a19mbGFncyAmIFJQQ19UQVNLX1JPT1RDUkVEUykKKyNkZWZpbmUgUlBDX0FTU0FTU0lOQVRFRCh0KQkoKHQpLT50a19mbGFncyAmIFJQQ19UQVNLX0tJTExFRCkKKyNkZWZpbmUgUlBDX0lTX0FDVElWQVRFRCh0KQkoKHQpLT50a19hY3RpdmUpCisjZGVmaW5lIFJQQ19ET19DQUxMQkFDSyh0KQkoKHQpLT50a19jYWxsYmFjayAhPSBOVUxMKQorI2RlZmluZSBSUENfSVNfU09GVCh0KQkJKCh0KS0+dGtfZmxhZ3MgJiBSUENfVEFTS19TT0ZUKQorI2RlZmluZSBSUENfVEFTS19VTklOVEVSUlVQVElCTEUodCkgKCh0KS0+dGtfZmxhZ3MgJiBSUENfVEFTS19OT0lOVFIpCisKKyNkZWZpbmUgUlBDX1RBU0tfUlVOTklORwkwCisjZGVmaW5lIFJQQ19UQVNLX1FVRVVFRAkJMQorI2RlZmluZSBSUENfVEFTS19XQUtFVVAJCTIKKyNkZWZpbmUgUlBDX1RBU0tfSEFTX1RJTUVSCTMKKworI2RlZmluZSBSUENfSVNfUlVOTklORyh0KQkodGVzdF9iaXQoUlBDX1RBU0tfUlVOTklORywgJih0KS0+dGtfcnVuc3RhdGUpKQorI2RlZmluZSBycGNfc2V0X3J1bm5pbmcodCkJKHNldF9iaXQoUlBDX1RBU0tfUlVOTklORywgJih0KS0+dGtfcnVuc3RhdGUpKQorI2RlZmluZSBycGNfdGVzdF9hbmRfc2V0X3J1bm5pbmcodCkgXAorCQkJCSh0ZXN0X2FuZF9zZXRfYml0KFJQQ19UQVNLX1JVTk5JTkcsICYodCktPnRrX3J1bnN0YXRlKSkKKyNkZWZpbmUgcnBjX2NsZWFyX3J1bm5pbmcodCkJXAorCWRvIHsgXAorCQlzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKTsgXAorCQljbGVhcl9iaXQoUlBDX1RBU0tfUlVOTklORywgJih0KS0+dGtfcnVuc3RhdGUpOyBcCisJCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7IFwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIFJQQ19JU19RVUVVRUQodCkJKHRlc3RfYml0KFJQQ19UQVNLX1FVRVVFRCwgJih0KS0+dGtfcnVuc3RhdGUpKQorI2RlZmluZSBycGNfc2V0X3F1ZXVlZCh0KQkoc2V0X2JpdChSUENfVEFTS19RVUVVRUQsICYodCktPnRrX3J1bnN0YXRlKSkKKyNkZWZpbmUgcnBjX2NsZWFyX3F1ZXVlZCh0KQlcCisJZG8geyBcCisJCXNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpOyBcCisJCWNsZWFyX2JpdChSUENfVEFTS19RVUVVRUQsICYodCktPnRrX3J1bnN0YXRlKTsgXAorCQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOyBcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBycGNfc3RhcnRfd2FrZXVwKHQpIFwKKwkodGVzdF9hbmRfc2V0X2JpdChSUENfVEFTS19XQUtFVVAsICYodCktPnRrX3J1bnN0YXRlKSA9PSAwKQorI2RlZmluZSBycGNfZmluaXNoX3dha2V1cCh0KSBcCisJZG8geyBcCisJCXNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpOyBcCisJCWNsZWFyX2JpdChSUENfVEFTS19XQUtFVVAsICYodCktPnRrX3J1bnN0YXRlKTsgXAorCQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOyBcCisJfSB3aGlsZSAoMCkKKworLyoKKyAqIFRhc2sgcHJpb3JpdGllcy4KKyAqIE5vdGU6IGlmIHlvdSBjaGFuZ2UgdGhlc2UsIHlvdSBtdXN0IGFsc28gY2hhbmdlCisgKiB0aGUgdGFzayBpbml0aWFsaXphdGlvbiBkZWZpbml0aW9ucyBiZWxvdy4KKyAqLworI2RlZmluZSBSUENfUFJJT1JJVFlfTE9XCTAKKyNkZWZpbmUgUlBDX1BSSU9SSVRZX05PUk1BTAkxCisjZGVmaW5lIFJQQ19QUklPUklUWV9ISUdICTIKKyNkZWZpbmUgUlBDX05SX1BSSU9SSVRZCQkoUlBDX1BSSU9SSVRZX0hJR0grMSkKKworLyoKKyAqIFJQQyBzeW5jaHJvbml6YXRpb24gb2JqZWN0cworICovCitzdHJ1Y3QgcnBjX3dhaXRfcXVldWUgeworCXNwaW5sb2NrX3QJCWxvY2s7CisJc3RydWN0IGxpc3RfaGVhZAl0YXNrc1tSUENfTlJfUFJJT1JJVFldOwkvKiB0YXNrIHF1ZXVlIGZvciBlYWNoIHByaW9yaXR5IGxldmVsICovCisJdW5zaWduZWQgbG9uZwkJY29va2llOwkJCS8qIGNvb2tpZSBvZiBsYXN0IHRhc2sgc2VydmljZWQgKi8KKwl1bnNpZ25lZCBjaGFyCQltYXhwcmlvcml0eTsJCS8qIG1heGltdW0gcHJpb3JpdHkgKDAgaWYgcXVldWUgaXMgbm90IGEgcHJpb3JpdHkgcXVldWUpICovCisJdW5zaWduZWQgY2hhcgkJcHJpb3JpdHk7CQkvKiBjdXJyZW50IHByaW9yaXR5ICovCisJdW5zaWduZWQgY2hhcgkJY291bnQ7CQkJLyogIyB0YXNrIGdyb3VwcyByZW1haW5pbmcgc2VydmljZWQgc28gZmFyICovCisJdW5zaWduZWQgY2hhcgkJbnI7CQkJLyogIyB0YXNrcyByZW1haW5pbmcgZm9yIGNvb2tpZSAqLworI2lmZGVmIFJQQ19ERUJVRworCWNvbnN0IGNoYXIgKgkJbmFtZTsKKyNlbmRpZgorfTsKKworLyoKKyAqIFRoaXMgaXMgdGhlICMgcmVxdWVzdHMgdG8gc2VuZCBjb25zZWN1dGl2ZWx5CisgKiBmcm9tIGEgc2luZ2xlIGNvb2tpZS4gIFRoZSBhaW0gaXMgdG8gaW1wcm92ZQorICogcGVyZm9ybWFuY2Ugb2YgTkZTIG9wZXJhdGlvbnMgc3VjaCBhcyByZWFkL3dyaXRlLgorICovCisjZGVmaW5lIFJQQ19CQVRDSF9DT1VOVAkJCTE2CisKKyNpZm5kZWYgUlBDX0RFQlVHCisjIGRlZmluZSBSUENfV0FJVFFfSU5JVCh2YXIscW5hbWUpIHsgXAorCQkubG9jayA9IFNQSU5fTE9DS19VTkxPQ0tFRCwgXAorCQkudGFza3MgPSB7IFwKKwkJCVswXSA9IExJU1RfSEVBRF9JTklUKHZhci50YXNrc1swXSksIFwKKwkJCVsxXSA9IExJU1RfSEVBRF9JTklUKHZhci50YXNrc1sxXSksIFwKKwkJCVsyXSA9IExJU1RfSEVBRF9JTklUKHZhci50YXNrc1syXSksIFwKKwkJfSwgXAorCX0KKyNlbHNlCisjIGRlZmluZSBSUENfV0FJVFFfSU5JVCh2YXIscW5hbWUpIHsgXAorCQkubG9jayA9IFNQSU5fTE9DS19VTkxPQ0tFRCwgXAorCQkudGFza3MgPSB7IFwKKwkJCVswXSA9IExJU1RfSEVBRF9JTklUKHZhci50YXNrc1swXSksIFwKKwkJCVsxXSA9IExJU1RfSEVBRF9JTklUKHZhci50YXNrc1sxXSksIFwKKwkJCVsyXSA9IExJU1RfSEVBRF9JTklUKHZhci50YXNrc1syXSksIFwKKwkJfSwgXAorCQkubmFtZSA9IHFuYW1lLCBcCisJfQorI2VuZGlmCisjIGRlZmluZSBSUENfV0FJVFEodmFyLHFuYW1lKSAgICAgIHN0cnVjdCBycGNfd2FpdF9xdWV1ZSB2YXIgPSBSUENfV0FJVFFfSU5JVCh2YXIscW5hbWUpCisKKyNkZWZpbmUgUlBDX0lTX1BSSU9SSVRZKHEpCQkoKHEpLT5tYXhwcmlvcml0eSA+IDApCisKKy8qCisgKiBGdW5jdGlvbiBwcm90b3R5cGVzCisgKi8KK3N0cnVjdCBycGNfdGFzayAqcnBjX25ld190YXNrKHN0cnVjdCBycGNfY2xudCAqLCBycGNfYWN0aW9uLCBpbnQgZmxhZ3MpOworc3RydWN0IHJwY190YXNrICpycGNfbmV3X2NoaWxkKHN0cnVjdCBycGNfY2xudCAqLCBzdHJ1Y3QgcnBjX3Rhc2sgKnBhcmVudCk7Cit2b2lkCQlycGNfaW5pdF90YXNrKHN0cnVjdCBycGNfdGFzayAqLCBzdHJ1Y3QgcnBjX2NsbnQgKiwKKwkJCQkJcnBjX2FjdGlvbiBleGl0ZnVuYywgaW50IGZsYWdzKTsKK3ZvaWQJCXJwY19yZWxlYXNlX3Rhc2soc3RydWN0IHJwY190YXNrICopOwordm9pZAkJcnBjX2tpbGxhbGxfdGFza3Moc3RydWN0IHJwY19jbG50ICopOworaW50CQlycGNfZXhlY3V0ZShzdHJ1Y3QgcnBjX3Rhc2sgKik7Cit2b2lkCQlycGNfcnVuX2NoaWxkKHN0cnVjdCBycGNfdGFzayAqcGFyZW50LCBzdHJ1Y3QgcnBjX3Rhc2sgKmNoaWxkLAorCQkJCQlycGNfYWN0aW9uIGFjdGlvbik7Cit2b2lkCQlycGNfaW5pdF9wcmlvcml0eV93YWl0X3F1ZXVlKHN0cnVjdCBycGNfd2FpdF9xdWV1ZSAqLCBjb25zdCBjaGFyICopOwordm9pZAkJcnBjX2luaXRfd2FpdF9xdWV1ZShzdHJ1Y3QgcnBjX3dhaXRfcXVldWUgKiwgY29uc3QgY2hhciAqKTsKK3ZvaWQJCXJwY19zbGVlcF9vbihzdHJ1Y3QgcnBjX3dhaXRfcXVldWUgKiwgc3RydWN0IHJwY190YXNrICosCisJCQkJCXJwY19hY3Rpb24gYWN0aW9uLCBycGNfYWN0aW9uIHRpbWVyKTsKK3ZvaWQJCXJwY193YWtlX3VwX3Rhc2soc3RydWN0IHJwY190YXNrICopOwordm9pZAkJcnBjX3dha2VfdXAoc3RydWN0IHJwY193YWl0X3F1ZXVlICopOworc3RydWN0IHJwY190YXNrICpycGNfd2FrZV91cF9uZXh0KHN0cnVjdCBycGNfd2FpdF9xdWV1ZSAqKTsKK3ZvaWQJCXJwY193YWtlX3VwX3N0YXR1cyhzdHJ1Y3QgcnBjX3dhaXRfcXVldWUgKiwgaW50KTsKK3ZvaWQJCXJwY19kZWxheShzdHJ1Y3QgcnBjX3Rhc2sgKiwgdW5zaWduZWQgbG9uZyk7Cit2b2lkICoJCXJwY19tYWxsb2Moc3RydWN0IHJwY190YXNrICosIHNpemVfdCk7CitpbnQJCXJwY2lvZF91cCh2b2lkKTsKK3ZvaWQJCXJwY2lvZF9kb3duKHZvaWQpOwordm9pZAkJcnBjaW9kX3dha2VfdXAodm9pZCk7CisjaWZkZWYgUlBDX0RFQlVHCit2b2lkCQlycGNfc2hvd190YXNrcyh2b2lkKTsKKyNlbmRpZgoraW50CQlycGNfaW5pdF9tZW1wb29sKHZvaWQpOwordm9pZAkJcnBjX2Rlc3Ryb3lfbWVtcG9vbCh2b2lkKTsKKworc3RhdGljIGlubGluZSB2b2lkIHJwY19leGl0KHN0cnVjdCBycGNfdGFzayAqdGFzaywgaW50IHN0YXR1cykKK3sKKwl0YXNrLT50a19zdGF0dXMgPSBzdGF0dXM7CisJdGFzay0+dGtfYWN0aW9uID0gTlVMTDsKK30KKworI2lmZGVmIFJQQ19ERUJVRworc3RhdGljIGlubGluZSBjb25zdCBjaGFyICogcnBjX3FuYW1lKHN0cnVjdCBycGNfd2FpdF9xdWV1ZSAqcSkKK3sKKwlyZXR1cm4gKChxICYmIHEtPm5hbWUpID8gcS0+bmFtZSA6ICJ1bmtub3duIik7Cit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9MSU5VWF9TVU5SUENfU0NIRURfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VucnBjL3N0YXRzLmggYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdGF0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkNmVkM2MKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdGF0cy5oCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdGF0cy5oCisgKgorICogQ2xpZW50IHN0YXRpc3RpY3MgY29sbGVjdGlvbiBmb3IgU1VOIFJQQworICoKKyAqIENvcHlyaWdodCAoQykgMTk5NiBPbGFmIEtpcmNoIDxva2lyQG1vbmFkLnN3Yi5kZT4KKyAqLworCisjaWZuZGVmIF9MSU5VWF9TVU5SUENfU1RBVFNfSAorI2RlZmluZSBfTElOVVhfU1VOUlBDX1NUQVRTX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKworc3RydWN0IHJwY19zdGF0IHsKKwlzdHJ1Y3QgcnBjX3Byb2dyYW0gKglwcm9ncmFtOworCisJdW5zaWduZWQgaW50CQluZXRjbnQsCisJCQkJbmV0dWRwY250LAorCQkJCW5ldHRjcGNudCwKKwkJCQluZXR0Y3Bjb25uLAorCQkJCW5ldHJlY29ubjsKKwl1bnNpZ25lZCBpbnQJCXJwY2NudCwKKwkJCQlycGNyZXRyYW5zLAorCQkJCXJwY2F1dGhyZWZyZXNoLAorCQkJCXJwY2dhcmJhZ2U7Cit9OworCitzdHJ1Y3Qgc3ZjX3N0YXQgeworCXN0cnVjdCBzdmNfcHJvZ3JhbSAqCXByb2dyYW07CisKKwl1bnNpZ25lZCBpbnQJCW5ldGNudCwKKwkJCQluZXR1ZHBjbnQsCisJCQkJbmV0dGNwY250LAorCQkJCW5ldHRjcGNvbm47CisJdW5zaWduZWQgaW50CQlycGNjbnQsCisJCQkJcnBjYmFkZm10LAorCQkJCXJwY2JhZGF1dGgsCisJCQkJcnBjYmFkY2xudDsKK307CisKK3ZvaWQJCQlycGNfcHJvY19pbml0KHZvaWQpOwordm9pZAkJCXJwY19wcm9jX2V4aXQodm9pZCk7CisjaWZkZWYgTU9EVUxFCit2b2lkCQkJcnBjX21vZGNvdW50KHN0cnVjdCBpbm9kZSAqLCBpbnQpOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworc3RydWN0IHByb2NfZGlyX2VudHJ5ICoJcnBjX3Byb2NfcmVnaXN0ZXIoc3RydWN0IHJwY19zdGF0ICopOwordm9pZAkJCXJwY19wcm9jX3VucmVnaXN0ZXIoY29uc3QgY2hhciAqKTsKK3ZvaWQJCQlycGNfcHJvY196ZXJvKHN0cnVjdCBycGNfcHJvZ3JhbSAqKTsKK3N0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqCXN2Y19wcm9jX3JlZ2lzdGVyKHN0cnVjdCBzdmNfc3RhdCAqLAorCQkJCQkgIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKik7Cit2b2lkCQkJc3ZjX3Byb2NfdW5yZWdpc3Rlcihjb25zdCBjaGFyICopOworCit2b2lkCQkJc3ZjX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqLAorCQkJCSAgICAgY29uc3Qgc3RydWN0IHN2Y19zdGF0ICopOworCitleHRlcm4gc3RydWN0IHByb2NfZGlyX2VudHJ5CSpwcm9jX25ldF9ycGM7CisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpycGNfcHJvY19yZWdpc3RlcihzdHJ1Y3QgcnBjX3N0YXQgKnMpIHsgcmV0dXJuIE5VTEw7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBycGNfcHJvY191bnJlZ2lzdGVyKGNvbnN0IGNoYXIgKnApIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgcnBjX3Byb2NfemVybyhzdHJ1Y3QgcnBjX3Byb2dyYW0gKnApIHt9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpzdmNfcHJvY19yZWdpc3RlcihzdHJ1Y3Qgc3ZjX3N0YXQgKnMsCisJCQkJCQkgICAgICAgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZikgeyByZXR1cm4gTlVMTDsgfQorc3RhdGljIGlubGluZSB2b2lkIHN2Y19wcm9jX3VucmVnaXN0ZXIoY29uc3QgY2hhciAqcCkge30KKworc3RhdGljIGlubGluZSB2b2lkIHN2Y19zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwKKwkJCQljb25zdCBzdHJ1Y3Qgc3ZjX3N0YXQgKnN0KSB7fQorCisjZGVmaW5lIHByb2NfbmV0X3JwYyBOVUxMCisKKyNlbmRpZgorCisjZW5kaWYgLyogX0xJTlVYX1NVTlJQQ19TVEFUU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmMuaCBiL2luY2x1ZGUvbGludXgvc3VucnBjL3N2Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3MDAzOTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmMuaApAQCAtMCwwICsxLDMwNiBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvbGludXgvc3VucnBjL3N2Yy5oCisgKgorICogUlBDIHNlcnZlciBkZWNsYXJhdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2IE9sYWYgS2lyY2ggPG9raXJAbW9uYWQuc3diLmRlPgorICovCisKKworI2lmbmRlZiBTVU5SUENfU1ZDX0gKKyNkZWZpbmUgU1VOUlBDX1NWQ19ICisKKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy94ZHIuaD4KKyNpbmNsdWRlIDxsaW51eC9zdW5ycGMvc3ZjYXV0aC5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorCisvKgorICogUlBDIHNlcnZpY2UuCisgKgorICogQW4gUlBDIHNlcnZpY2UgaXMgYSBgYGRhZW1vbiwnJyBwb3NzaWJseSBtdWx0aXRocmVhZGVkLCB3aGljaAorICogcmVjZWl2ZXMgYW5kIHByb2Nlc3NlcyBpbmNvbWluZyBSUEMgbWVzc2FnZXMuCisgKiBJdCBoYXMgb25lIG9yIG1vcmUgdHJhbnNwb3J0IHNvY2tldHMgYXNzb2NpYXRlZCB3aXRoIGl0LCBhbmQgbWFpbnRhaW5zCisgKiBhIGxpc3Qgb2YgaWRsZSB0aHJlYWRzIHdhaXRpbmcgZm9yIGlucHV0LgorICoKKyAqIFdlIGN1cnJlbnRseSBkbyBub3Qgc3VwcG9ydCBtb3JlIHRoYW4gb25lIFJQQyBwcm9ncmFtIHBlciBkYWVtb24uCisgKi8KK3N0cnVjdCBzdmNfc2VydiB7CisJc3RydWN0IGxpc3RfaGVhZAlzdl90aHJlYWRzOwkvKiBpZGxlIHNlcnZlciB0aHJlYWRzICovCisJc3RydWN0IGxpc3RfaGVhZAlzdl9zb2NrZXRzOwkvKiBwZW5kaW5nIHNvY2tldHMgKi8KKwlzdHJ1Y3Qgc3ZjX3Byb2dyYW0gKglzdl9wcm9ncmFtOwkvKiBSUEMgcHJvZ3JhbSAqLworCXN0cnVjdCBzdmNfc3RhdCAqCXN2X3N0YXRzOwkvKiBSUEMgc3RhdGlzdGljcyAqLworCXNwaW5sb2NrX3QJCXN2X2xvY2s7CisJdW5zaWduZWQgaW50CQlzdl9ucnRocmVhZHM7CS8qICMgb2Ygc2VydmVyIHRocmVhZHMgKi8KKwl1bnNpZ25lZCBpbnQJCXN2X2J1ZnN6OwkvKiBkYXRhZ3JhbSBidWZmZXIgc2l6ZSAqLworCXVuc2lnbmVkIGludAkJc3ZfeGRyc2l6ZTsJLyogWERSIGJ1ZmZlciBzaXplICovCisKKwlzdHJ1Y3QgbGlzdF9oZWFkCXN2X3Blcm1zb2NrczsJLyogYWxsIHBlcm1hbmVudCBzb2NrZXRzICovCisJc3RydWN0IGxpc3RfaGVhZAlzdl90ZW1wc29ja3M7CS8qIGFsbCB0ZW1wb3Jhcnkgc29ja2V0cyAqLworCWludAkJCXN2X3RtcGNudDsJLyogY291bnQgb2YgdGVtcG9yYXJ5IHNvY2tldHMgKi8KKworCWNoYXIgKgkJCXN2X25hbWU7CS8qIHNlcnZpY2UgbmFtZSAqLworfTsKKworLyoKKyAqIE1heGltdW0gcGF5bG9hZCBzaXplIHN1cHBvcnRlZCBieSBhIGtlcm5lbCBSUEMgc2VydmVyLgorICogVGhpcyBpcyB1c2UgdG8gZGV0ZXJtaW5lIHRoZSBtYXggbnVtYmVyIG9mIHBhZ2VzIG5mc2QgaXMKKyAqIHdpbGxpbmcgdG8gcmV0dXJuIGluIGEgc2luZ2xlIFJFQUQgb3BlcmF0aW9uLgorICovCisjZGVmaW5lIFJQQ1NWQ19NQVhQQVlMT0FECSg2NCoxMDI0dSkKKworLyoKKyAqIFJQQyBSZXF1c3RzIGFuZCByZXBsaWVzIGFyZSBzdG9yZWQgaW4gb25lIG9yIG1vcmUgcGFnZXMuCisgKiBXZSBtYWludGFpbiBhbiBhcnJheSBvZiBwYWdlcyBmb3IgZWFjaCBzZXJ2ZXIgdGhyZWFkLgorICogUmVxdWVzdHMgYXJlIGNvcGllZCBpbnRvIHRoZXNlIHBhZ2VzIGFzIHRoZXkgYXJyaXZlLiAgUmVtYWluaW5nCisgKiBwYWdlcyBhcmUgYXZhaWxhYmxlIHRvIHdyaXRlIHRoZSByZXBseSBpbnRvLgorICoKKyAqIFBhZ2VzIGFyZSBzZW50IHVzaW5nIC0+c2VuZHBhZ2Ugc28gZWFjaCBzZXJ2ZXIgdGhyZWFkIG5lZWRzIHRvCisgKiBhbGxvY2F0ZSBtb3JlIHRvIHJlcGxhY2UgdGhvc2UgdXNlZCBpbiBzZW5kaW5nLiAgVG8gaGVscCBrZWVwIHRyYWNrCisgKiBvZiB0aGVzZSBwYWdlcyB3ZSBoYXZlIGEgcmVjZWl2ZSBsaXN0IHdoZXJlIGFsbCBwYWdlcyBpbml0aWFseSBsaXZlLAorICogYW5kIGEgc2VuZCBsaXN0IHdoZXJlIHBhZ2VzIGFyZSBtb3ZlZCB0byB3aGVuIHRoZXJlIGFyZSB0byBiZSBwYXJ0CisgKiBvZiBhIHJlcGx5LgorICoKKyAqIFdlIHVzZSB4ZHJfYnVmIGZvciBob2xkaW5nIHJlc3BvbnNlcyBhcyBpdCBmaXRzIHdlbGwgd2l0aCBORlMKKyAqIHJlYWQgcmVzcG9uc2VzICh0aGF0IGhhdmUgYSBoZWFkZXIsIGFuZCBzb21lIGRhdGEgcGFnZXMsIGFuZCBwb3NzaWJseQorICogYSB0YWlsKSBhbmQgbWVhbnMgd2UgY2FuIHNoYXJlIHNvbWUgY2xpZW50IHNpZGUgcm91dGluZXMuCisgKgorICogVGhlIHhkcl9idWYuaGVhZCBrdmVjIGFsd2F5cyBwb2ludHMgdG8gdGhlIGZpcnN0IHBhZ2UgaW4gdGhlIHJxXypwYWdlcworICogbGlzdC4gIFRoZSB4ZHJfYnVmLnBhZ2VzIHBvaW50ZXIgcG9pbnRzIHRvIHRoZSBzZWNvbmQgcGFnZSBvbiB0aGF0CisgKiBsaXN0LiAgeGRyX2J1Zi50YWlsIHBvaW50cyB0byB0aGUgZW5kIG9mIHRoZSBmaXJzdCBwYWdlLgorICogVGhpcyBhc3N1bWVzIHRoYXQgdGhlIG5vbi1wYWdlIHBhcnQgb2YgYW4gcnBjIHJlcGx5IHdpbGwgZml0CisgKiBpbiBhIHBhZ2UgLSBORlNkIGVuc3VyZXMgdGhpcy4gIGxvY2tkIGFsc28gaGFzIG5vIHRyb3VibGUuCisgKgorICogRWFjaCByZXF1ZXN0L3JlcGx5IHBhaXIgY2FuIGhhdmUgYXQgbW9zdCBvbmUgInBheWxvYWQiLCBwbHVzIHR3byBwYWdlcywKKyAqIG9uZSBmb3IgdGhlIHJlcXVlc3QsIGFuZCBvbmUgZm9yIHRoZSByZXBseS4KKyAqLworI2RlZmluZSBSUENTVkNfTUFYUEFHRVMJCSgoUlBDU1ZDX01BWFBBWUxPQUQrUEFHRV9TSVpFLTEpL1BBR0VfU0laRSArIDIpCisKK3N0YXRpYyBpbmxpbmUgdTMyIHN2Y19nZXR1MzIoc3RydWN0IGt2ZWMgKmlvdikKK3sKKwl1MzIgdmFsLCAqdnA7CisJdnAgPSBpb3YtPmlvdl9iYXNlOworCXZhbCA9ICp2cCsrOworCWlvdi0+aW92X2Jhc2UgPSAodm9pZCopdnA7CisJaW92LT5pb3ZfbGVuIC09IHNpemVvZih1MzIpOworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzdmNfdW5nZXR1MzIoc3RydWN0IGt2ZWMgKmlvdikKK3sKKwl1MzIgKnZwID0gKHUzMiAqKWlvdi0+aW92X2Jhc2U7CisJaW92LT5pb3ZfYmFzZSA9ICh2b2lkICopKHZwIC0gMSk7CisJaW92LT5pb3ZfbGVuICs9IHNpemVvZigqdnApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3ZjX3B1dHUzMihzdHJ1Y3Qga3ZlYyAqaW92LCB1MzIgdmFsKQoreworCXUzMiAqdnAgPSBpb3YtPmlvdl9iYXNlICsgaW92LT5pb3ZfbGVuOworCSp2cCA9IHZhbDsKKwlpb3YtPmlvdl9sZW4gKz0gc2l6ZW9mKHUzMik7Cit9CisKKwkKKy8qCisgKiBUaGUgY29udGV4dCBvZiBhIHNpbmdsZSB0aHJlYWQsIGluY2x1ZGluZyB0aGUgcmVxdWVzdCBjdXJyZW50bHkgYmVpbmcKKyAqIHByb2Nlc3NlZC4KKyAqIE5PVEU6IEZpcnN0IHR3byBpdGVtcyBtdXN0IGJlIHByZXYvbmV4dC4KKyAqLworc3RydWN0IHN2Y19ycXN0IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXJxX2xpc3Q7CS8qIGlkbGUgbGlzdCAqLworCXN0cnVjdCBzdmNfc29jayAqCXJxX3NvY2s7CS8qIHNvY2tldCAqLworCXN0cnVjdCBzb2NrYWRkcl9pbglycV9hZGRyOwkvKiBwZWVyIGFkZHJlc3MgKi8KKwlpbnQJCQlycV9hZGRybGVuOworCisJc3RydWN0IHN2Y19zZXJ2ICoJcnFfc2VydmVyOwkvKiBSUEMgc2VydmljZSBkZWZpbml0aW9uICovCisJc3RydWN0IHN2Y19wcm9jZWR1cmUgKglycV9wcm9jaW5mbzsJLyogcHJvY2VkdXJlIGluZm8gKi8KKwlzdHJ1Y3QgYXV0aF9vcHMgKglycV9hdXRob3A7CS8qIGF1dGhlbnRpY2F0aW9uIGZsYXZvdXIgKi8KKwlzdHJ1Y3Qgc3ZjX2NyZWQJCXJxX2NyZWQ7CS8qIGF1dGggaW5mbyAqLworCXN0cnVjdCBza19idWZmICoJcnFfc2tidWZmOwkvKiBmYXN0IHJlY3YgaW5ldCBidWZmZXIgKi8KKwlzdHJ1Y3Qgc3ZjX2RlZmVycmVkX3JlcSpycV9kZWZlcnJlZDsJLyogZGVmZXJyZWQgcmVxdWVzdCB3ZSBhcmUgcmVwbGF5aW5nICovCisKKwlzdHJ1Y3QgeGRyX2J1ZgkJcnFfYXJnOworCXN0cnVjdCB4ZHJfYnVmCQlycV9yZXM7CisJc3RydWN0IHBhZ2UgKgkJcnFfYXJncGFnZXNbUlBDU1ZDX01BWFBBR0VTXTsKKwlzdHJ1Y3QgcGFnZSAqCQlycV9yZXNwYWdlc1tSUENTVkNfTUFYUEFHRVNdOworCWludAkJCXJxX3Jlc3RhaWxwYWdlOworCXNob3J0CQkJcnFfYXJndXNlZDsJLyogcGFnZXMgdXNlZCBmb3IgYXJndW1lbnQgKi8KKwlzaG9ydAkJCXJxX2FyZ2hpOwkvKiBwYWdlcyBhdmFpbGFibGUgaW4gYXJndW1lbnQgcGFnZSBsaXN0ICovCisJc2hvcnQJCQlycV9yZXN1c2VkOwkvKiBwYWdlcyB1c2VkIGZvciByZXN1bHQgKi8KKworCXUzMgkJCXJxX3hpZDsJCS8qIHRyYW5zbWlzc2lvbiBpZCAqLworCXUzMgkJCXJxX3Byb2c7CS8qIHByb2dyYW0gbnVtYmVyICovCisJdTMyCQkJcnFfdmVyczsJLyogcHJvZ3JhbSB2ZXJzaW9uICovCisJdTMyCQkJcnFfcHJvYzsJLyogcHJvY2VkdXJlIG51bWJlciAqLworCXUzMgkJCXJxX3Byb3Q7CS8qIElQIHByb3RvY29sICovCisJdW5zaWduZWQgc2hvcnQKKwkJCQlycV9zZWN1cmUgIDogMTsJLyogc2VjdXJlIHBvcnQgKi8KKworCisJX191MzIJCQlycV9kYWRkcjsJLyogZGVzdCBhZGRyIG9mIHJlcXVlc3QgLSByZXBseSBmcm9tIGhlcmUgKi8KKworCXZvaWQgKgkJCXJxX2FyZ3A7CS8qIGRlY29kZWQgYXJndW1lbnRzICovCisJdm9pZCAqCQkJcnFfcmVzcDsJLyogeGRyJ2QgcmVzdWx0cyAqLworCXZvaWQgKgkJCXJxX2F1dGhfZGF0YTsJLyogZmxhdm9yLXNwZWNpZmljIGRhdGEgKi8KKworCWludAkJCXJxX3Jlc2VydmVkOwkvKiBzcGFjZSBvbiBzb2NrZXQgb3V0cQorCQkJCQkJICogcmVzZXJ2ZWQgZm9yIHRoaXMgcmVxdWVzdAorCQkJCQkJICovCisKKwlzdHJ1Y3QgY2FjaGVfcmVxCXJxX2NoYW5kbGU7CS8qIGhhbmRsZSBwYXNzZWQgdG8gY2FjaGVzIGZvciAKKwkJCQkJCSAqIHJlcXVlc3QgZGVsYXlpbmcgCisJCQkJCQkgKi8KKwkvKiBDYXRlcmluZyB0byBuZnNkICovCisJc3RydWN0IGF1dGhfZG9tYWluICoJcnFfY2xpZW50OwkvKiBSUEMgcGVlciBpbmZvICovCisJc3RydWN0IHN2Y19jYWNoZXJlcCAqCXJxX2NhY2hlcmVwOwkvKiBjYWNoZSBpbmZvICovCisJc3RydWN0IGtuZnNkX2ZoICoJcnFfcmVmZmg7CS8qIFJlZmVycmVuY2UgZmlsZWhhbmRsZSwgdXNlZCB0bworCQkJCQkJICogZGV0ZXJtaW5lIHdoYXQgZGV2aWNlIG51bWJlcgorCQkJCQkJICogdG8gcmVwb3J0IChyZWFsIG9yIHZpcnR1YWwpCisJCQkJCQkgKi8KKworCXdhaXRfcXVldWVfaGVhZF90CXJxX3dhaXQ7CS8qIHN5bmNocm9uaXphdGlvbiAqLworfTsKKworLyoKKyAqIENoZWNrIGJ1ZmZlciBib3VuZHMgYWZ0ZXIgZGVjb2RpbmcgYXJndW1lbnRzCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50Cit4ZHJfYXJnc2l6ZV9jaGVjayhzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCB1MzIgKnApCit7CisJY2hhciAqY3AgPSAoY2hhciAqKXA7CisJc3RydWN0IGt2ZWMgKnZlYyA9ICZycXN0cC0+cnFfYXJnLmhlYWRbMF07CisJcmV0dXJuIGNwIC0gKGNoYXIqKXZlYy0+aW92X2Jhc2UgPD0gdmVjLT5pb3ZfbGVuOworfQorCitzdGF0aWMgaW5saW5lIGludAoreGRyX3Jlc3NpemVfY2hlY2soc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgdTMyICpwKQoreworCXN0cnVjdCBrdmVjICp2ZWMgPSAmcnFzdHAtPnJxX3Jlcy5oZWFkWzBdOworCWNoYXIgKmNwID0gKGNoYXIqKXA7CisKKwl2ZWMtPmlvdl9sZW4gPSBjcCAtIChjaGFyKil2ZWMtPmlvdl9iYXNlOworCisJcmV0dXJuIHZlYy0+aW92X2xlbiA8PSBQQUdFX1NJWkU7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHN2Y190YWtlX3BhZ2Uoc3RydWN0IHN2Y19ycXN0ICpycXN0cCkKK3sKKwlpZiAocnFzdHAtPnJxX2FyZ2hpIDw9IHJxc3RwLT5ycV9hcmd1c2VkKQorCQlyZXR1cm4gLUVOT01FTTsKKwlycXN0cC0+cnFfYXJnaGktLTsKKwlycXN0cC0+cnFfcmVzcGFnZXNbcnFzdHAtPnJxX3Jlc3VzZWRdID0KKwkJcnFzdHAtPnJxX2FyZ3BhZ2VzW3Jxc3RwLT5ycV9hcmdoaV07CisJcnFzdHAtPnJxX3Jlc3VzZWQrKzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN2Y19wdXNoYmFja19hbGxwYWdlcyhzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwKQoreworICAgICAgICB3aGlsZSAocnFzdHAtPnJxX3Jlc3VzZWQpIHsKKwkJaWYgKHJxc3RwLT5ycV9yZXNwYWdlc1stLXJxc3RwLT5ycV9yZXN1c2VkXSA9PSBOVUxMKQorCQkJY29udGludWU7CisJCXJxc3RwLT5ycV9hcmdwYWdlc1tycXN0cC0+cnFfYXJnaGkrK10gPQorCQkJcnFzdHAtPnJxX3Jlc3BhZ2VzW3Jxc3RwLT5ycV9yZXN1c2VkXTsKKwkJcnFzdHAtPnJxX3Jlc3BhZ2VzW3Jxc3RwLT5ycV9yZXN1c2VkXSA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3ZjX3B1c2hiYWNrX3VudXNlZF9wYWdlcyhzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwKQoreworCXdoaWxlIChycXN0cC0+cnFfcmVzdXNlZCAmJgorCSAgICAgICBycXN0cC0+cnFfcmVzLnBhZ2VzICE9ICZycXN0cC0+cnFfcmVzcGFnZXNbcnFzdHAtPnJxX3Jlc3VzZWRdKSB7CisKKwkJaWYgKHJxc3RwLT5ycV9yZXNwYWdlc1stLXJxc3RwLT5ycV9yZXN1c2VkXSAhPSBOVUxMKSB7CisJCQlycXN0cC0+cnFfYXJncGFnZXNbcnFzdHAtPnJxX2FyZ2hpKytdID0KKwkJCQlycXN0cC0+cnFfcmVzcGFnZXNbcnFzdHAtPnJxX3Jlc3VzZWRdOworCQkJcnFzdHAtPnJxX3Jlc3BhZ2VzW3Jxc3RwLT5ycV9yZXN1c2VkXSA9IE5VTEw7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzdmNfZnJlZV9hbGxwYWdlcyhzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwKQoreworICAgICAgICB3aGlsZSAocnFzdHAtPnJxX3Jlc3VzZWQpIHsKKwkJaWYgKHJxc3RwLT5ycV9yZXNwYWdlc1stLXJxc3RwLT5ycV9yZXN1c2VkXSA9PSBOVUxMKQorCQkJY29udGludWU7CisJCXB1dF9wYWdlKHJxc3RwLT5ycV9yZXNwYWdlc1tycXN0cC0+cnFfcmVzdXNlZF0pOworCQlycXN0cC0+cnFfcmVzcGFnZXNbcnFzdHAtPnJxX3Jlc3VzZWRdID0gTlVMTDsKKwl9Cit9CisKK3N0cnVjdCBzdmNfZGVmZXJyZWRfcmVxIHsKKwl1MzIJCQlwcm90OwkvKiBwcm90b2NvbCAoVURQIG9yIFRDUCkgKi8KKwlzdHJ1Y3Qgc29ja2FkZHJfaW4JYWRkcjsKKwlzdHJ1Y3Qgc3ZjX3NvY2sJCSpzdnNrOwkvKiB3aGVyZSByZXBseSBtdXN0IGdvICovCisJc3RydWN0IGNhY2hlX2RlZmVycmVkX3JlcSBoYW5kbGU7CisJaW50CQkJYXJnc2xlbjsKKwl1MzIJCQlhcmdzWzBdOworfTsKKworLyoKKyAqIFJQQyBwcm9ncmFtCisgKi8KK3N0cnVjdCBzdmNfcHJvZ3JhbSB7CisJdTMyCQkJcGdfcHJvZzsJLyogcHJvZ3JhbSBudW1iZXIgKi8KKwl1bnNpZ25lZCBpbnQJCXBnX2xvdmVyczsJLyogbG93ZXN0IHZlcnNpb24gKi8KKwl1bnNpZ25lZCBpbnQJCXBnX2hpdmVyczsJLyogbG93ZXN0IHZlcnNpb24gKi8KKwl1bnNpZ25lZCBpbnQJCXBnX252ZXJzOwkvKiBudW1iZXIgb2YgdmVyc2lvbnMgKi8KKwlzdHJ1Y3Qgc3ZjX3ZlcnNpb24gKioJcGdfdmVyczsJLyogdmVyc2lvbiBhcnJheSAqLworCWNoYXIgKgkJCXBnX25hbWU7CS8qIHNlcnZpY2UgbmFtZSAqLworCWNoYXIgKgkJCXBnX2NsYXNzOwkvKiBjbGFzcyBuYW1lOiBzZXJ2aWNlcyBzaGFyaW5nIGF1dGhlbnRpY2F0aW9uICovCisJc3RydWN0IHN2Y19zdGF0ICoJcGdfc3RhdHM7CS8qIHJwYyBzdGF0aXN0aWNzICovCisJaW50CQkJKCpwZ19hdXRoZW50aWNhdGUpKHN0cnVjdCBzdmNfcnFzdCAqKTsKK307CisKKy8qCisgKiBSUEMgcHJvZ3JhbSB2ZXJzaW9uCisgKi8KK3N0cnVjdCBzdmNfdmVyc2lvbiB7CisJdTMyCQkJdnNfdmVyczsJLyogdmVyc2lvbiBudW1iZXIgKi8KKwl1MzIJCQl2c19ucHJvYzsJLyogbnVtYmVyIG9mIHByb2NlZHVyZXMgKi8KKwlzdHJ1Y3Qgc3ZjX3Byb2NlZHVyZSAqCXZzX3Byb2M7CS8qIHBlci1wcm9jZWR1cmUgaW5mbyAqLworCXUzMgkJCXZzX3hkcnNpemU7CS8qIHhkcnNpemUgbmVlZGVkIGZvciB0aGlzIHZlcnNpb24gKi8KKworCS8qIE92ZXJyaWRlIGRpc3BhdGNoIGZ1bmN0aW9uIChlLmcuIHdoZW4gY2FjaGluZyByZXBsaWVzKS4KKwkgKiBBIHJldHVybiB2YWx1ZSBvZiAwIG1lYW5zIGRyb3AgdGhlIHJlcXVlc3QuIAorCSAqIHZzX2Rpc3BhdGNoID09IE5VTEwgbWVhbnMgdXNlIGRlZmF1bHQgZGlzcGF0Y2hlci4KKwkgKi8KKwlpbnQJCQkoKnZzX2Rpc3BhdGNoKShzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgdTMyICopOworfTsKKworLyoKKyAqIFJQQyBwcm9jZWR1cmUgaW5mbworICovCit0eXBlZGVmIGludAkoKnN2Y19wcm9jZnVuYykoc3RydWN0IHN2Y19ycXN0ICosIHZvaWQgKmFyZ3AsIHZvaWQgKnJlc3ApOworc3RydWN0IHN2Y19wcm9jZWR1cmUgeworCXN2Y19wcm9jZnVuYwkJcGNfZnVuYzsJLyogcHJvY2VzcyB0aGUgcmVxdWVzdCAqLworCWt4ZHJwcm9jX3QJCXBjX2RlY29kZTsJLyogWERSIGRlY29kZSBhcmdzICovCisJa3hkcnByb2NfdAkJcGNfZW5jb2RlOwkvKiBYRFIgZW5jb2RlIHJlc3VsdCAqLworCWt4ZHJwcm9jX3QJCXBjX3JlbGVhc2U7CS8qIFhEUiBmcmVlIHJlc3VsdCAqLworCXVuc2lnbmVkIGludAkJcGNfYXJnc2l6ZTsJLyogYXJndW1lbnQgc3RydWN0IHNpemUgKi8KKwl1bnNpZ25lZCBpbnQJCXBjX3Jlc3NpemU7CS8qIHJlc3VsdCBzdHJ1Y3Qgc2l6ZSAqLworCXVuc2lnbmVkIGludAkJcGNfY291bnQ7CS8qIGNhbGwgY291bnQgKi8KKwl1bnNpZ25lZCBpbnQJCXBjX2NhY2hldHlwZTsJLyogY2FjaGUgaW5mbyAoTkZTKSAqLworCXVuc2lnbmVkIGludAkJcGNfeGRycmVzc2l6ZTsJLyogbWF4aW11bSBzaXplIG9mIFhEUiByZXBseSAqLworfTsKKworLyoKKyAqIFRoaXMgaXMgdGhlIFJQQyBzZXJ2ZXIgdGhyZWFkIGZ1bmN0aW9uIHByb3RvdHlwZQorICovCit0eXBlZGVmIHZvaWQJCSgqc3ZjX3RocmVhZF9mbikoc3RydWN0IHN2Y19ycXN0ICopOworCisvKgorICogRnVuY3Rpb24gcHJvdG90eXBlcy4KKyAqLworc3RydWN0IHN2Y19zZXJ2ICogIHN2Y19jcmVhdGUoc3RydWN0IHN2Y19wcm9ncmFtICosIHVuc2lnbmVkIGludCk7CitpbnQJCSAgIHN2Y19jcmVhdGVfdGhyZWFkKHN2Y190aHJlYWRfZm4sIHN0cnVjdCBzdmNfc2VydiAqKTsKK3ZvaWQJCSAgIHN2Y19leGl0X3RocmVhZChzdHJ1Y3Qgc3ZjX3Jxc3QgKik7Cit2b2lkCQkgICBzdmNfZGVzdHJveShzdHJ1Y3Qgc3ZjX3NlcnYgKik7CitpbnQJCSAgIHN2Y19wcm9jZXNzKHN0cnVjdCBzdmNfc2VydiAqLCBzdHJ1Y3Qgc3ZjX3Jxc3QgKik7CitpbnQJCSAgIHN2Y19yZWdpc3RlcihzdHJ1Y3Qgc3ZjX3NlcnYgKiwgaW50LCB1bnNpZ25lZCBzaG9ydCk7Cit2b2lkCQkgICBzdmNfd2FrZV91cChzdHJ1Y3Qgc3ZjX3NlcnYgKik7Cit2b2lkCQkgICBzdmNfcmVzZXJ2ZShzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBpbnQgc3BhY2UpOworCisjZW5kaWYgLyogU1VOUlBDX1NWQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNhdXRoLmggYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNhdXRoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzExOWNlNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL3N2Y2F1dGguaApAQCAtMCwwICsxLDE2NyBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvbGludXgvc3VucnBjL3N2Y2F1dGguaAorICoKKyAqIFJQQyBzZXJ2ZXItc2lkZSBhdXRoZW50aWNhdGlvbiBzdHVmZi4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYgT2xhZiBLaXJjaCA8b2tpckBtb25hZC5zd2IuZGU+CisgKi8KKworI2lmbmRlZiBfTElOVVhfU1VOUlBDX1NWQ0FVVEhfSF8KKyNkZWZpbmUgX0xJTlVYX1NVTlJQQ19TVkNBVVRIX0hfCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9zdW5ycGMvbXNnX3Byb3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zdW5ycGMvY2FjaGUuaD4KKyNpbmNsdWRlIDxsaW51eC9oYXNoLmg+CisKKyNkZWZpbmUgU1ZDX0NSRURfTkdST1VQUwkzMgorc3RydWN0IHN2Y19jcmVkIHsKKwl1aWRfdAkJCWNyX3VpZDsKKwlnaWRfdAkJCWNyX2dpZDsKKwlzdHJ1Y3QgZ3JvdXBfaW5mbwkqY3JfZ3JvdXBfaW5mbzsKK307CisKK3N0cnVjdCBzdmNfcnFzdDsJCS8qIGZvcndhcmQgZGVjbCAqLworCisvKiBBdXRoZW50aWNhdGlvbiBpcyBkb25lIGluIHRoZSBjb250ZXh0IG9mIGEgZG9tYWluLgorICoKKyAqIEN1cnJlbnRseSwgdGhlIG5mcyBzZXJ2ZXIgdXNlcyB0aGUgYXV0aF9kb21haW4gdG8gc3RhbmQKKyAqIGZvciB0aGUgImNsaWVudCIgbGlzdGVkIGluIC9ldGMvZXhwb3J0cy4KKyAqCisgKiBNb3JlIGdlbmVyYWxseSwgYSBkb21haW4gbWlnaHQgcmVwcmVzZW50IGEgZ3JvdXAgb2YgY2xpZW50cyB1c2luZworICogYSBjb21tb24gbWVjaGFuaXNtIGZvciBhdXRoZW50aWNhdGlvbiBhbmQgaGF2aW5nIGEgY29tbW9uIG1hcHBpbmcKKyAqIGJldHdlZW4gbG9jYWwgaWRlbnRpdHkgKHVpZCkgYW5kIG5ldHdvcmsgaWRlbnRpdHkuICBBbGwgY2xpZW50cworICogaW4gYSBkb21haW4gaGF2ZSBzaW1pbGFyIGdlbmVyYWwgYWNjZXNzIHJpZ2h0cy4gIEVhY2ggZG9tYWluIGNhbgorICogY29udGFpbiBtdWx0aXBsZSBwcmluY2lwYWxzIHdoaWNoIHdpbGwgaGF2ZSBkaWZmZXJlbnQgc3BlY2lmaWMgcmlnaHQKKyAqIGJhc2VkIG9uIG5vcm1hbCBEaXNjcmV0aW9uYXJ5IEFjY2VzcyBDb250cm9sLgorICoKKyAqIEEgZG9tYWluIGlzIGNyZWF0ZWQgYnkgYW4gYXV0aGVudGljYXRpb24gZmxhdm91ciBtb2R1bGUgYmFzZWQgb24gbmFtZQorICogb25seS4gIFVzZXJzcGFjZSB0aGVuIGZpbGxzIGluIGRldGFpbCBvbiBkZW1hbmQuCisgKgorICogSW4gdGhlIGNhc2Ugb2YgYXV0aF91bml4IGFuZCBhdXRoX251bGwsIHRoZSBhdXRoX2RvbWFpbiBpcyBhbHNvCisgKiBhc3NvY2lhdGVkIHdpdGggZW50cmllcyBpbiBhbm90aGVyIGNhY2hlIHJlcHJlc2VudGluZyB0aGUgbWFwcGluZworICogb2YgaXAgYWRkcmVzc2VzIHRvIHRoZSBnaXZlbiBjbGllbnQuCisgKi8KK3N0cnVjdCBhdXRoX2RvbWFpbiB7CisJc3RydWN0CWNhY2hlX2hlYWQJaDsKKwljaGFyCQkJKm5hbWU7CisJaW50CQkJZmxhdm91cjsKK307CisKKy8qCisgKiBFYWNoIGF1dGhlbnRpY2F0aW9uIGZsYXZvdXIgcmVnaXN0ZXJzIGFuIGF1dGhfb3BzCisgKiBzdHJ1Y3R1cmUuCisgKiBuYW1lIGlzIHNpbXBseSB0aGUgbmFtZS4KKyAqIGZsYXZvdXIgZ2l2ZXMgdGhlIGF1dGggZmxhdm91ci4gSXQgZGV0ZXJtaW5lcyB3aGVyZSB0aGUgZmxhdm91ciBpcyByZWdpc3RlcmVkCisgKiBhY2NlcHQoKSBpcyBnaXZlbiBhIHJlcXVlc3QgYW5kIHNob3VsZCB2ZXJpZnkgaXQuCisgKiAgIEl0IHNob3VsZCBpbnNwZWN0IHRoZSBhdXRoZW50aWNhdG9yIGFuZCB2ZXJpZmllciwgYW5kIHBvc3NpYmx5IHRoZSBkYXRhLgorICogICAgSWYgdGhlcmUgaXMgYSBwcm9ibGVtIHdpdGggdGhlIGF1dGhlbnRpY2F0aW9uICphdXRocCBzaG91bGQgYmUgc2V0LgorICogICAgVGhlIHJldHVybiB2YWx1ZSBvZiBhY2NlcHQoKSBjYW4gaW5kaWNhdGU6CisgKiAgICAgIE9LIC0gYXV0aG9yaXNlZC4gY2xpZW50IGFuZCBjcmVkZW50aWFsIGFyZSBzZXQgaW4gcnFzdHAuCisgKiAgICAgICAgICAgcmVxYnVmIHBvaW50cyB0byBhcmd1bWVudHMKKyAqICAgICAgICAgICByZXNidWYgcG9pbnRzIHRvIGdvb2QgcGxhY2UgZm9yIHJlc3VsdHMuICB2ZXJmaWVyCisgKiAgICAgICAgICAgICBpcyAocHJvYmFibHkpIGFscmVhZHkgaW4gcGxhY2UuICBDZXJ0YWlubHkgc3BhY2UgaXMKKyAqCSAgICAgICByZXNlcnZlZCBmb3IgaXQuCisgKiAgICAgIERST1AgLSBzaW1wbHkgZHJvcCB0aGUgcmVxdWVzdC4gSXQgbWF5IGhhdmUgYmVlbiBkZWZlcnJlZAorICogICAgICBHQVJCQUdFIC0gcnBjIGdhcmJhZ2VfYXJncyBlcnJvcgorICogICAgICBTWVNFUlIgLSBycGMgc3lzdGVtX2VyciBlcnJvcgorICogICAgICBERU5JRUQgLSBhdXRocCBob2xkcyByZWFzb24gZm9yIGRlbmlhbC4KKyAqICAgICAgQ09NUExFVEUgLSB0aGUgcmVwbHkgaXMgZW5jb2RlZCBhbHJlYWR5IGFuZCByZWFkeSB0byBiZSBzZW50OyBubworICoJCWZ1cnRoZXIgcHJvY2Vzc2luZyBpcyBuZWNlc3NhcnkuICAoVGhpcyBpcyB1c2VkIGZvciBwcm9jZXNzaW5nCisgKgkJbnVsbCBwcm9jZWR1cmUgY2FsbHMgd2hpY2ggYXJlIHVzZWQgdG8gc2V0IHVwIGVuY3J5cHRpb24KKyAqCQljb250ZXh0cy4pCisgKgorICogICBhY2NlcHQgaXMgcGFzc2VkIHRoZSBwcm9jIG51bWJlciBzbyB0aGF0IGl0IGNhbiBhY2NlcHQgTlVMTCBycGMgcmVxdWVzdHMKKyAqICAgZXZlbiBpZiBpdCBjYW5ub3QgYXV0aGVudGljYXRlIHRoZSBjbGllbnQgKGFzIGlzIHNvbWV0aW1lcyBhcHByb3ByaWF0ZSkuCisgKgorICogcmVsZWFzZSgpIGlzIGdpdmVuIGEgcmVxdWVzdCBhZnRlciB0aGUgcHJvY2VkdXJlIGhhcyBiZWVuIHJ1bi4KKyAqICBJdCBzaG91bGQgc2lnbi9lbmNyeXB0IHRoZSByZXN1bHRzIGlmIG5lZWRlZAorICogSXQgc2hvdWxkIHJldHVybjoKKyAqICAgIE9LIC0gdGhlIHJlc2J1ZiBpcyByZWFkeSB0byBiZSBzZW50CisgKiAgICBEUk9QIC0gdGhlIHJlcGx5IHNob3VsZCBiZSBxdWl0ZWx5IGRyb3BwZWQKKyAqICAgIERFTklFRCAtIGF1dGhwIGhvbGRzIGEgcmVhc29uIGZvciBNU0dfREVOSUVECisgKiAgICBTWVNFUlIgLSBycGMgc3lzdGVtX2VycgorICoKKyAqIGRvbWFpbl9yZWxlYXNlKCkKKyAqICAgVGhpcyBjYWxsIHJlbGVhc2VzIGEgZG9tYWluLgorICovCitzdHJ1Y3QgYXV0aF9vcHMgeworCWNoYXIgKgluYW1lOworCXN0cnVjdCBtb2R1bGUgKm93bmVyOworCWludAlmbGF2b3VyOworCWludAkoKmFjY2VwdCkoc3RydWN0IHN2Y19ycXN0ICpycSwgdTMyICphdXRocCk7CisJaW50CSgqcmVsZWFzZSkoc3RydWN0IHN2Y19ycXN0ICpycSk7CisJdm9pZAkoKmRvbWFpbl9yZWxlYXNlKShzdHJ1Y3QgYXV0aF9kb21haW4gKik7CisJaW50CSgqc2V0X2NsaWVudCkoc3RydWN0IHN2Y19ycXN0ICpycSk7Cit9OworCisjZGVmaW5lCVNWQ19HQVJCQUdFCTEKKyNkZWZpbmUJU1ZDX1NZU0VSUgkyCisjZGVmaW5lCVNWQ19WQUxJRAkzCisjZGVmaW5lCVNWQ19ORUdBVElWRQk0CisjZGVmaW5lCVNWQ19PSwkJNQorI2RlZmluZQlTVkNfRFJPUAk2CisjZGVmaW5lCVNWQ19ERU5JRUQJNworI2RlZmluZQlTVkNfUEVORElORwk4CisjZGVmaW5lCVNWQ19DT01QTEVURQk5CisKKworZXh0ZXJuIGludAlzdmNfYXV0aGVudGljYXRlKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHUzMiAqYXV0aHApOworZXh0ZXJuIGludAlzdmNfYXV0aG9yaXNlKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApOworZXh0ZXJuIGludAlzdmNfc2V0X2NsaWVudChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwKTsKK2V4dGVybiBpbnQJc3ZjX2F1dGhfcmVnaXN0ZXIocnBjX2F1dGhmbGF2b3JfdCBmbGF2b3IsIHN0cnVjdCBhdXRoX29wcyAqYW9wcyk7CitleHRlcm4gdm9pZAlzdmNfYXV0aF91bnJlZ2lzdGVyKHJwY19hdXRoZmxhdm9yX3QgZmxhdm9yKTsKKworZXh0ZXJuIHN0cnVjdCBhdXRoX2RvbWFpbiAqdW5peF9kb21haW5fZmluZChjaGFyICpuYW1lKTsKK2V4dGVybiB2b2lkIGF1dGhfZG9tYWluX3B1dChzdHJ1Y3QgYXV0aF9kb21haW4gKml0ZW0pOworZXh0ZXJuIGludCBhdXRoX3VuaXhfYWRkX2FkZHIoc3RydWN0IGluX2FkZHIgYWRkciwgc3RydWN0IGF1dGhfZG9tYWluICpkb20pOworZXh0ZXJuIHN0cnVjdCBhdXRoX2RvbWFpbiAqYXV0aF9kb21haW5fbG9va3VwKHN0cnVjdCBhdXRoX2RvbWFpbiAqaXRlbSwgaW50IHNldCk7CitleHRlcm4gc3RydWN0IGF1dGhfZG9tYWluICphdXRoX2RvbWFpbl9maW5kKGNoYXIgKm5hbWUpOworZXh0ZXJuIHN0cnVjdCBhdXRoX2RvbWFpbiAqYXV0aF91bml4X2xvb2t1cChzdHJ1Y3QgaW5fYWRkciBhZGRyKTsKK2V4dGVybiBpbnQgYXV0aF91bml4X2ZvcmdldF9vbGQoc3RydWN0IGF1dGhfZG9tYWluICpkb20pOworZXh0ZXJuIHZvaWQgc3ZjYXV0aF91bml4X3B1cmdlKHZvaWQpOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaGFzaF9zdHIoY2hhciAqbmFtZSwgaW50IGJpdHMpCit7CisJdW5zaWduZWQgbG9uZyBoYXNoID0gMDsKKwl1bnNpZ25lZCBsb25nIGwgPSAwOworCWludCBsZW4gPSAwOworCXVuc2lnbmVkIGNoYXIgYzsKKwlkbyB7CisJCWlmICh1bmxpa2VseSghKGMgPSAqbmFtZSsrKSkpIHsKKwkJCWMgPSAoY2hhcilsZW47IGxlbiA9IC0xOworCQl9CisJCWwgPSAobCA8PCA4KSB8IGM7CisJCWxlbisrOworCQlpZiAoKGxlbiAmIChCSVRTX1BFUl9MT05HLzgtMSkpPT0wKQorCQkJaGFzaCA9IGhhc2hfbG9uZyhoYXNoXmwsIEJJVFNfUEVSX0xPTkcpOworCX0gd2hpbGUgKGxlbik7CisJcmV0dXJuIGhhc2ggPj4gKEJJVFNfUEVSX0xPTkcgLSBiaXRzKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGhhc2hfbWVtKGNoYXIgKmJ1ZiwgaW50IGxlbmd0aCwgaW50IGJpdHMpCit7CisJdW5zaWduZWQgbG9uZyBoYXNoID0gMDsKKwl1bnNpZ25lZCBsb25nIGwgPSAwOworCWludCBsZW4gPSAwOworCXVuc2lnbmVkIGNoYXIgYzsKKwlkbyB7CisJCWlmIChsZW4gPT0gbGVuZ3RoKSB7CisJCQljID0gKGNoYXIpbGVuOyBsZW4gPSAtMTsKKwkJfSBlbHNlCisJCQljID0gKmJ1ZisrOworCQlsID0gKGwgPDwgOCkgfCBjOworCQlsZW4rKzsKKwkJaWYgKChsZW4gJiAoQklUU19QRVJfTE9ORy84LTEpKT09MCkKKwkJCWhhc2ggPSBoYXNoX2xvbmcoaGFzaF5sLCBCSVRTX1BFUl9MT05HKTsKKwl9IHdoaWxlIChsZW4pOworCXJldHVybiBoYXNoID4+IChCSVRTX1BFUl9MT05HIC0gYml0cyk7Cit9CisKK2V4dGVybiBzdHJ1Y3QgY2FjaGVfZGV0YWlsIGF1dGhfZG9tYWluX2NhY2hlLCBpcF9tYXBfY2FjaGU7CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfTElOVVhfU1VOUlBDX1NWQ0FVVEhfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VucnBjL3N2Y2F1dGhfZ3NzLmggYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNhdXRoX2dzcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhMjIwNmYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNhdXRoX2dzcy5oCkBAIC0wLDAgKzEsMjcgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2xpbnV4L3N2Y2F1dGhfZ3NzLmgKKyAqCisgKiBCcnVjZSBGaWVsZHMgPGJmaWVsZHNAdW1pY2guZWR1PgorICogQ29weXJpZ2h0IChjKSAyMDAyIFRoZSBSZWdlbnRzIG9mIHRoZSBVbnZpZXJzaXR5IG9mIE1pY2hpZ2FuCisgKgorICogJElkJAorICoKKyAqLworCisjaWZuZGVmIF9MSU5VWF9TVU5SUENfU1ZDQVVUSF9HU1NfSAorI2RlZmluZSBfTElOVVhfU1VOUlBDX1NWQ0FVVEhfR1NTX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy94ZHIuaD4KKyNpbmNsdWRlIDxsaW51eC9zdW5ycGMvc3ZjYXV0aC5oPgorI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9zdmNzb2NrLmg+CisjaW5jbHVkZSA8bGludXgvc3VucnBjL2F1dGhfZ3NzLmg+CisKK2ludCBnc3Nfc3ZjX2luaXQodm9pZCk7Cit2b2lkIGdzc19zdmNfc2h1dGRvd24odm9pZCk7CitpbnQgc3ZjYXV0aF9nc3NfcmVnaXN0ZXJfcHNldWRvZmxhdm9yKHUzMiBwc2V1ZG9mbGF2b3IsIGNoYXIgKiBuYW1lKTsKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAvKiBfTElOVVhfU1VOUlBDX1NWQ0FVVEhfR1NTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VucnBjL3N2Y3NvY2suaCBiL2luY2x1ZGUvbGludXgvc3VucnBjL3N2Y3NvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzNjNmZhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvc3Zjc29jay5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNzb2NrLmgKKyAqCisgKiBSUEMgc2VydmVyIHNvY2tldCBJL08uCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2IE9sYWYgS2lyY2ggPG9raXJAbW9uYWQuc3diLmRlPgorICovCisKKyNpZm5kZWYgU1VOUlBDX1NWQ1NPQ0tfSAorI2RlZmluZSBTVU5SUENfU1ZDU09DS19ICisKKyNpbmNsdWRlIDxsaW51eC9zdW5ycGMvc3ZjLmg+CisKKy8qCisgKiBSUEMgc2VydmVyIHNvY2tldC4KKyAqLworc3RydWN0IHN2Y19zb2NrIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXNrX3JlYWR5OwkvKiBsaXN0IG9mIHJlYWR5IHNvY2tldHMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCXNrX2xpc3Q7CS8qIGxpc3Qgb2YgYWxsIHNvY2tldHMgKi8KKwlzdHJ1Y3Qgc29ja2V0ICoJCXNrX3NvY2s7CS8qIGJlcmtlbGV5IHNvY2tldCBsYXllciAqLworCXN0cnVjdCBzb2NrICoJCXNrX3NrOwkJLyogSU5FVCBsYXllciAqLworCisJc3RydWN0IHN2Y19zZXJ2ICoJc2tfc2VydmVyOwkvKiBzZXJ2aWNlIGZvciB0aGlzIHNvY2tldCAqLworCXVuc2lnbmVkIGludAkJc2tfaW51c2U7CS8qIHVzZSBjb3VudCAqLworCXVuc2lnbmVkIGxvbmcJCXNrX2ZsYWdzOworI2RlZmluZQlTS19CVVNZCQkwCQkJLyogZW5xdWV1ZWQvcmVjZWl2aW5nICovCisjZGVmaW5lCVNLX0NPTk4JCTEJCQkvKiBjb25uIHBlbmRpbmcgKi8KKyNkZWZpbmUJU0tfQ0xPU0UJMgkJCS8qIGRlYWQgb3IgZHlpbmcgKi8KKyNkZWZpbmUJU0tfREFUQQkJMwkJCS8qIGRhdGEgcGVuZGluZyAqLworI2RlZmluZQlTS19URU1QCQk0CQkJLyogdGVtcCAoVENQKSBzb2NrZXQgKi8KKyNkZWZpbmUJU0tfREVBRAkJNgkJCS8qIHNvY2tldCBjbG9zZWQgKi8KKyNkZWZpbmUJU0tfQ0hOR0JVRgk3CQkJLyogbmVlZCB0byBjaGFuZ2Ugc25kL3JjdiBidWZmZXIgc2l6ZXMgKi8KKyNkZWZpbmUJU0tfREVGRVJSRUQJOAkJCS8qIHJlcXVlc3Qgb24gc2tfZGVmZXJyZWQgKi8KKworCWludAkJCXNrX3Jlc2VydmVkOwkvKiBzcGFjZSBvbiBvdXRxIHRoYXQgaXMgcmVzZXJ2ZWQgKi8KKworCXN0cnVjdCBsaXN0X2hlYWQJc2tfZGVmZXJyZWQ7CS8qIGRlZmVycmVkIHJlcXVlc3RzIHRoYXQgbmVlZCB0bworCQkJCQkJICogYmUgcmV2aXN0ZWQgKi8KKwlzdHJ1Y3Qgc2VtYXBob3JlICAgICAgICBza19zZW07CQkvKiB0byBzZXJpYWxpemUgc2VuZGluZyBkYXRhICovCisKKwlpbnQJCQkoKnNrX3JlY3Zmcm9tKShzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwKTsKKwlpbnQJCQkoKnNrX3NlbmR0bykoc3RydWN0IHN2Y19ycXN0ICpycXN0cCk7CisKKwkvKiBXZSBrZWVwIHRoZSBvbGQgc3RhdGVfY2hhbmdlIGFuZCBkYXRhX3JlYWR5IENCJ3MgaGVyZSAqLworCXZvaWQJCQkoKnNrX29zdGF0ZSkoc3RydWN0IHNvY2sgKik7CisJdm9pZAkJCSgqc2tfb2RhdGEpKHN0cnVjdCBzb2NrICosIGludCBieXRlcyk7CisJdm9pZAkJCSgqc2tfb3dzcGFjZSkoc3RydWN0IHNvY2sgKik7CisKKwkvKiBwcml2YXRlIFRDUCBwYXJ0ICovCisJaW50CQkJc2tfcmVjbGVuOwkvKiBsZW5ndGggb2YgcmVjb3JkICovCisJaW50CQkJc2tfdGNwbGVuOwkvKiBjdXJyZW50IHJlYWQgbGVuZ3RoICovCisJdGltZV90CQkJc2tfbGFzdHJlY3Y7CS8qIHRpbWUgb2YgbGFzdCByZWNlaXZlZCByZXF1ZXN0ICovCit9OworCisvKgorICogRnVuY3Rpb24gcHJvdG90eXBlcy4KKyAqLworaW50CQlzdmNfbWFrZXNvY2soc3RydWN0IHN2Y19zZXJ2ICosIGludCwgdW5zaWduZWQgc2hvcnQpOwordm9pZAkJc3ZjX2RlbGV0ZV9zb2NrZXQoc3RydWN0IHN2Y19zb2NrICopOworaW50CQlzdmNfcmVjdihzdHJ1Y3Qgc3ZjX3NlcnYgKiwgc3RydWN0IHN2Y19ycXN0ICosIGxvbmcpOworaW50CQlzdmNfc2VuZChzdHJ1Y3Qgc3ZjX3Jxc3QgKik7Cit2b2lkCQlzdmNfZHJvcChzdHJ1Y3Qgc3ZjX3Jxc3QgKik7Cit2b2lkCQlzdmNfc29ja191cGRhdGVfYnVmcyhzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYpOworCisjZW5kaWYgLyogU1VOUlBDX1NWQ1NPQ0tfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdW5ycGMvdGltZXIuaCBiL2luY2x1ZGUvbGludXgvc3VucnBjL3RpbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY3ZmQ3MwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL3RpbWVyLmgKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2xpbnV4L3N1bnJwYy90aW1lci5oCisgKgorICogIERlY2xhcmF0aW9ucyBmb3IgdGhlIFJQQyB0cmFuc3BvcnQgdGltZXIuCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMiBUcm9uZCBNeWtsZWJ1c3QgPHRyb25kLm15a2xlYnVzdEBmeXMudWlvLm5vPgorICovCisKKyNpZm5kZWYgX0xJTlVYX1NVTlJQQ19USU1FUl9ICisjZGVmaW5lIF9MSU5VWF9TVU5SUENfVElNRVJfSAorCisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorCitzdHJ1Y3QgcnBjX3J0dCB7CisJdW5zaWduZWQgbG9uZyB0aW1lbzsJLyogZGVmYXVsdCB0aW1lb3V0IHZhbHVlICovCisJdW5zaWduZWQgbG9uZyBzcnR0WzVdOwkvKiBzbW9vdGhlZCByb3VuZCB0cmlwIHRpbWUgPDwgMyAqLworCXVuc2lnbmVkIGxvbmcgc2RydHRbNV07CS8qIHNtb290aGVkIG1lZGl1bSBkZXZpYXRpb24gb2YgUlRUICovCisJaW50IG50aW1lb3V0c1s1XTsJLyogTnVtYmVyIG9mIHRpbWVvdXRzIGZvciB0aGUgbGFzdCByZXF1ZXN0ICovCit9OworCisKK2V4dGVybiB2b2lkIHJwY19pbml0X3J0dChzdHJ1Y3QgcnBjX3J0dCAqcnQsIHVuc2lnbmVkIGxvbmcgdGltZW8pOworZXh0ZXJuIHZvaWQgcnBjX3VwZGF0ZV9ydHQoc3RydWN0IHJwY19ydHQgKnJ0LCB1bnNpZ25lZCB0aW1lciwgbG9uZyBtKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHJwY19jYWxjX3J0byhzdHJ1Y3QgcnBjX3J0dCAqcnQsIHVuc2lnbmVkIHRpbWVyKTsKKworc3RhdGljIGlubGluZSB2b2lkIHJwY19zZXRfdGltZW8oc3RydWN0IHJwY19ydHQgKnJ0LCBpbnQgdGltZXIsIGludCBudGltZW8pCit7CisJaW50ICp0OworCWlmICghdGltZXIpCisJCXJldHVybjsKKwl0ID0gJnJ0LT5udGltZW91dHNbdGltZXItMV07CisJaWYgKG50aW1lbyA8ICp0KSB7CisJCWlmICgqdCA+IDApCisJCQkoKnQpLS07CisJfSBlbHNlIHsKKwkJaWYgKG50aW1lbyA+IDgpCisJCQludGltZW8gPSA4OworCQkqdCA9IG50aW1lbzsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHJwY19udGltZW8oc3RydWN0IHJwY19ydHQgKnJ0LCBpbnQgdGltZXIpCit7CisJaWYgKCF0aW1lcikKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHJ0LT5udGltZW91dHNbdGltZXItMV07Cit9CisKKyNlbmRpZiAvKiBfTElOVVhfU1VOUlBDX1RJTUVSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VucnBjL3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyMjJmNDcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy90eXBlcy5oCkBAIC0wLDAgKzEsMjIgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2xpbnV4L3N1bnJwYy90eXBlcy5oCisgKgorICogR2VuZXJpYyB0eXBlcyBhbmQgbWlzYyBzdHVmZiBmb3IgUlBDLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NiwgT2xhZiBLaXJjaCA8b2tpckBtb25hZC5zd2IuZGU+CisgKi8KKworI2lmbmRlZiBfTElOVVhfU1VOUlBDX1RZUEVTX0hfCisjZGVmaW5lIF9MSU5VWF9TVU5SUENfVFlQRVNfSF8KKworI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvc3VucnBjL2RlYnVnLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorCisvKgorICogU2hvcnRoYW5kcworICovCisjZGVmaW5lIHNpZ25hbGxlZCgpCQkoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisKKyNlbmRpZiAvKiBfTElOVVhfU1VOUlBDX1RZUEVTX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy94ZHIuaCBiL2luY2x1ZGUvbGludXgvc3VucnBjL3hkci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0MWRjZjgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy94ZHIuaApAQCAtMCwwICsxLDE5MiBAQAorLyoKKyAqIGluY2x1ZGUvbGludXgvc3VucnBjL3hkci5oCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTcgT2xhZiBLaXJjaCA8b2tpckBtb25hZC5zd2IuZGU+CisgKi8KKworI2lmbmRlZiBfU1VOUlBDX1hEUl9IXworI2RlZmluZSBfU1VOUlBDX1hEUl9IXworCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvdWlvLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorCisvKgorICogQnVmZmVyIGFkanVzdG1lbnQKKyAqLworI2RlZmluZSBYRFJfUVVBRExFTihsKQkJKCgobCkgKyAzKSA+PiAyKQorCisvKgorICogR2VuZXJpYyBvcGFxdWUgYG5ldHdvcmsgb2JqZWN0LicgQXQgdGhlIGtlcm5lbCBsZXZlbCwgdGhpcyB0eXBlCisgKiBpcyB1c2VkIG9ubHkgYnkgbG9ja2QuCisgKi8KKyNkZWZpbmUgWERSX01BWF9ORVRPQkoJCTEwMjQKK3N0cnVjdCB4ZHJfbmV0b2JqIHsKKwl1bnNpZ25lZCBpbnQJCWxlbjsKKwl1OCAqCQkJZGF0YTsKK307CisKKy8qCisgKiBUaGlzIGlzIHRoZSBnZW5lcmljIFhEUiBmdW5jdGlvbi4gcnFzdHAgaXMgZWl0aGVyIGEgcnBjX3Jxc3QgKGNsaWVudAorICogc2lkZSkgb3Igc3ZjX3Jxc3QgcG9pbnRlciAoc2VydmVyIHNpZGUpLgorICogRW5jb2RlIGZ1bmN0aW9ucyBhbHdheXMgYXNzdW1lIHRoZXJlJ3MgZW5vdWdoIHJvb20gaW4gdGhlIGJ1ZmZlci4KKyAqLwordHlwZWRlZiBpbnQJKCpreGRycHJvY190KSh2b2lkICpycXN0cCwgdTMyICpkYXRhLCB2b2lkICpvYmopOworCisvKgorICogQmFzaWMgc3RydWN0dXJlIGZvciB0cmFuc21pc3Npb24vcmVjZXB0aW9uIG9mIGEgY2xpZW50IFhEUiBtZXNzYWdlLgorICogRmVhdHVyZXMgYSBoZWFkZXIgKGZvciBhIGxpbmVhciBidWZmZXIgY29udGFpbmluZyBSUEMgaGVhZGVycworICogYW5kIHRoZSBkYXRhIHBheWxvYWQgZm9yIHNob3J0IG1lc3NhZ2VzKSwgYW5kIHRoZW4gYW4gYXJyYXkgb2YKKyAqIHBhZ2VzLgorICogVGhlIHRhaWwgaW92ZWMgYWxsb3dzIHlvdSB0byBhcHBlbmQgZGF0YSBhZnRlciB0aGUgcGFnZSBhcnJheS4gSXRzCisgKiBtYWluIGludGVyZXN0IGlzIGZvciBhcHBlbmRpbmcgcGFkZGluZyB0byB0aGUgcGFnZXMgaW4gb3JkZXIgdG8KKyAqIHNhdGlzZnkgdGhlIGludF8zMi1hbGlnbm1lbnQgcmVxdWlyZW1lbnRzIGluIFJGQzE4MzIuCisgKgorICogRm9yIHRoZSBmdXR1cmUsIHdlIG1pZ2h0IHdhbnQgdG8gc3RyaW5nIHNldmVyYWwgb2YgdGhlc2UgdG9nZXRoZXIKKyAqIGluIGEgbGlzdCBpZiBhbnlib2R5IHdhbnRzIHRvIG1ha2UgdXNlIG9mIE5GU3Y0IENPTVBPVU5ECisgKiBvcGVyYXRpb25zIGFuZC9vciBoYXMgYSBuZWVkIGZvciBzY2F0dGVyL2dhdGhlciBpbnZvbHZpbmcgcGFnZXMuCisgKi8KK3N0cnVjdCB4ZHJfYnVmIHsKKwlzdHJ1Y3Qga3ZlYwloZWFkWzFdLAkvKiBSUEMgaGVhZGVyICsgbm9uLXBhZ2UgZGF0YSAqLworCQkJdGFpbFsxXTsJLyogQXBwZW5kZWQgYWZ0ZXIgcGFnZSBkYXRhICovCisKKwlzdHJ1Y3QgcGFnZSAqKglwYWdlczsJCS8qIEFycmF5IG9mIGNvbnRpZ3VvdXMgcGFnZXMgKi8KKwl1bnNpZ25lZCBpbnQJcGFnZV9iYXNlLAkvKiBTdGFydCBvZiBwYWdlIGRhdGEgKi8KKwkJCXBhZ2VfbGVuOwkvKiBMZW5ndGggb2YgcGFnZSBkYXRhICovCisKKwl1bnNpZ25lZCBpbnQJYnVmbGVuLAkJLyogVG90YWwgbGVuZ3RoIG9mIHN0b3JhZ2UgYnVmZmVyICovCisJCQlsZW47CQkvKiBMZW5ndGggb2YgWERSIGVuY29kZWQgbWVzc2FnZSAqLworCit9OworCisvKgorICogcHJlLXhkcidlZCBtYWNyb3MuCisgKi8KKworI2RlZmluZQl4ZHJfemVybwlfX2NvbnN0YW50X2h0b25sKDApCisjZGVmaW5lCXhkcl9vbmUJCV9fY29uc3RhbnRfaHRvbmwoMSkKKyNkZWZpbmUJeGRyX3R3bwkJX19jb25zdGFudF9odG9ubCgyKQorCisjZGVmaW5lCXJwY19zdWNjZXNzCQlfX2NvbnN0YW50X2h0b25sKFJQQ19TVUNDRVNTKQorI2RlZmluZQlycGNfcHJvZ191bmF2YWlsCV9fY29uc3RhbnRfaHRvbmwoUlBDX1BST0dfVU5BVkFJTCkKKyNkZWZpbmUJcnBjX3Byb2dfbWlzbWF0Y2gJX19jb25zdGFudF9odG9ubChSUENfUFJPR19NSVNNQVRDSCkKKyNkZWZpbmUJcnBjX3Byb2NfdW5hdmFpbAlfX2NvbnN0YW50X2h0b25sKFJQQ19QUk9DX1VOQVZBSUwpCisjZGVmaW5lCXJwY19nYXJiYWdlX2FyZ3MJX19jb25zdGFudF9odG9ubChSUENfR0FSQkFHRV9BUkdTKQorI2RlZmluZQlycGNfc3lzdGVtX2VycgkJX19jb25zdGFudF9odG9ubChSUENfU1lTVEVNX0VSUikKKworI2RlZmluZQlycGNfYXV0aF9vawkJX19jb25zdGFudF9odG9ubChSUENfQVVUSF9PSykKKyNkZWZpbmUJcnBjX2F1dGhlcnJfYmFkY3JlZAlfX2NvbnN0YW50X2h0b25sKFJQQ19BVVRIX0JBRENSRUQpCisjZGVmaW5lCXJwY19hdXRoZXJyX3JlamVjdGVkY3JlZCBfX2NvbnN0YW50X2h0b25sKFJQQ19BVVRIX1JFSkVDVEVEQ1JFRCkKKyNkZWZpbmUJcnBjX2F1dGhlcnJfYmFkdmVyZglfX2NvbnN0YW50X2h0b25sKFJQQ19BVVRIX0JBRFZFUkYpCisjZGVmaW5lCXJwY19hdXRoZXJyX3JlamVjdGVkdmVyZiBfX2NvbnN0YW50X2h0b25sKFJQQ19BVVRIX1JFSkVDVEVEVkVSRikKKyNkZWZpbmUJcnBjX2F1dGhlcnJfdG9vd2VhawlfX2NvbnN0YW50X2h0b25sKFJQQ19BVVRIX1RPT1dFQUspCisjZGVmaW5lCXJwY3NlY19nc3NlcnJfY3JlZHByb2JsZW0JX19jb25zdGFudF9odG9ubChSUENTRUNfR1NTX0NSRURQUk9CTEVNKQorI2RlZmluZQlycGNzZWNfZ3NzZXJyX2N0eHByb2JsZW0JX19jb25zdGFudF9odG9ubChSUENTRUNfR1NTX0NUWFBST0JMRU0pCisjZGVmaW5lCXJwY19hdXRoZXJyX29sZHNlcW51bQlfX2NvbnN0YW50X2h0b25sKDEwMSkKKworLyoKKyAqIE1pc2NlbGxhbmVvdXMgWERSIGhlbHBlciBmdW5jdGlvbnMKKyAqLwordTMyICoJeGRyX2VuY29kZV9vcGFxdWVfZml4ZWQodTMyICpwLCBjb25zdCB2b2lkICpwdHIsIHVuc2lnbmVkIGludCBsZW4pOwordTMyICoJeGRyX2VuY29kZV9vcGFxdWUodTMyICpwLCBjb25zdCB2b2lkICpwdHIsIHVuc2lnbmVkIGludCBsZW4pOwordTMyICoJeGRyX2VuY29kZV9zdHJpbmcodTMyICpwLCBjb25zdCBjaGFyICpzKTsKK3UzMiAqCXhkcl9kZWNvZGVfc3RyaW5nKHUzMiAqcCwgY2hhciAqKnNwLCBpbnQgKmxlbnAsIGludCBtYXhsZW4pOwordTMyICoJeGRyX2RlY29kZV9zdHJpbmdfaW5wbGFjZSh1MzIgKnAsIGNoYXIgKipzcCwgaW50ICpsZW5wLCBpbnQgbWF4bGVuKTsKK3UzMiAqCXhkcl9lbmNvZGVfbmV0b2JqKHUzMiAqcCwgY29uc3Qgc3RydWN0IHhkcl9uZXRvYmogKik7Cit1MzIgKgl4ZHJfZGVjb2RlX25ldG9iaih1MzIgKnAsIHN0cnVjdCB4ZHJfbmV0b2JqICopOworCit2b2lkCXhkcl9lbmNvZGVfcGFnZXMoc3RydWN0IHhkcl9idWYgKiwgc3RydWN0IHBhZ2UgKiosIHVuc2lnbmVkIGludCwKKwkJCSB1bnNpZ25lZCBpbnQpOwordm9pZAl4ZHJfaW5saW5lX3BhZ2VzKHN0cnVjdCB4ZHJfYnVmICosIHVuc2lnbmVkIGludCwKKwkJCSBzdHJ1Y3QgcGFnZSAqKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOworCitzdGF0aWMgaW5saW5lIHUzMiAqeGRyX2VuY29kZV9hcnJheSh1MzIgKnAsIGNvbnN0IHZvaWQgKnMsIHVuc2lnbmVkIGludCBsZW4pCit7CisJcmV0dXJuIHhkcl9lbmNvZGVfb3BhcXVlKHAsIHMsIGxlbik7Cit9CisKKy8qCisgKiBEZWNvZGUgNjRiaXQgcXVhbnRpdGllcyAoTkZTdjMgc3VwcG9ydCkKKyAqLworc3RhdGljIGlubGluZSB1MzIgKgoreGRyX2VuY29kZV9oeXBlcih1MzIgKnAsIF9fdTY0IHZhbCkKK3sKKwkqcCsrID0gaHRvbmwodmFsID4+IDMyKTsKKwkqcCsrID0gaHRvbmwodmFsICYgMHhGRkZGRkZGRik7CisJcmV0dXJuIHA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyICoKK3hkcl9kZWNvZGVfaHlwZXIodTMyICpwLCBfX3U2NCAqdmFscCkKK3sKKwkqdmFscCAgPSAoKF9fdTY0KSBudG9obCgqcCsrKSkgPDwgMzI7CisJKnZhbHAgfD0gbnRvaGwoKnArKyk7CisJcmV0dXJuIHA7Cit9CisKKy8qCisgKiBBZGp1c3Qga3ZlYyB0byByZWZsZWN0IGVuZCBvZiB4ZHInZWQgZGF0YSAoUlBDIGNsaWVudCBYRFIpCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50Cit4ZHJfYWRqdXN0X2lvdmVjKHN0cnVjdCBrdmVjICppb3YsIHUzMiAqcCkKK3sKKwlyZXR1cm4gaW92LT5pb3ZfbGVuID0gKCh1OCAqKSBwIC0gKHU4ICopIGlvdi0+aW92X2Jhc2UpOworfQorCisvKgorICogTWF4aW11bSBudW1iZXIgb2YgaW92J3Mgd2UgdXNlLgorICovCisjZGVmaW5lIE1BWF9JT1ZFQwkoMTIpCisKKy8qCisgKiBYRFIgYnVmZmVyIGhlbHBlciBmdW5jdGlvbnMKKyAqLworZXh0ZXJuIHZvaWQgeGRyX3NoaWZ0X2J1ZihzdHJ1Y3QgeGRyX2J1ZiAqLCBzaXplX3QpOworZXh0ZXJuIHZvaWQgeGRyX2J1Zl9mcm9tX2lvdihzdHJ1Y3Qga3ZlYyAqLCBzdHJ1Y3QgeGRyX2J1ZiAqKTsKK2V4dGVybiBpbnQgeGRyX2J1Zl9zdWJzZWdtZW50KHN0cnVjdCB4ZHJfYnVmICosIHN0cnVjdCB4ZHJfYnVmICosIGludCwgaW50KTsKK2V4dGVybiBpbnQgeGRyX2J1Zl9yZWFkX25ldG9iaihzdHJ1Y3QgeGRyX2J1ZiAqLCBzdHJ1Y3QgeGRyX25ldG9iaiAqLCBpbnQpOworZXh0ZXJuIGludCByZWFkX2J5dGVzX2Zyb21feGRyX2J1ZihzdHJ1Y3QgeGRyX2J1ZiAqYnVmLCBpbnQgYmFzZSwgdm9pZCAqb2JqLCBpbnQgbGVuKTsKKworLyoKKyAqIEhlbHBlciBzdHJ1Y3R1cmUgZm9yIGNvcHlpbmcgZnJvbSBhbiBza19idWZmLgorICovCit0eXBlZGVmIHN0cnVjdCB7CisJc3RydWN0IHNrX2J1ZmYJKnNrYjsKKwl1bnNpZ25lZCBpbnQJb2Zmc2V0OworCXNpemVfdAkJY291bnQ7CisJdW5zaWduZWQgaW50CWNzdW07Cit9IHNrYl9yZWFkZXJfdDsKKwordHlwZWRlZiBzaXplX3QgKCpza2JfcmVhZF9hY3Rvcl90KShza2JfcmVhZGVyX3QgKmRlc2MsIHZvaWQgKnRvLCBzaXplX3QgbGVuKTsKKworZXh0ZXJuIHZvaWQgeGRyX3BhcnRpYWxfY29weV9mcm9tX3NrYihzdHJ1Y3QgeGRyX2J1ZiAqLCB1bnNpZ25lZCBpbnQsCisJCXNrYl9yZWFkZXJfdCAqLCBza2JfcmVhZF9hY3Rvcl90KTsKKworc3RydWN0IHNvY2tldDsKK3N0cnVjdCBzb2NrYWRkcjsKK2V4dGVybiBpbnQgeGRyX3NlbmRwYWdlcyhzdHJ1Y3Qgc29ja2V0ICosIHN0cnVjdCBzb2NrYWRkciAqLCBpbnQsCisJCXN0cnVjdCB4ZHJfYnVmICosIHVuc2lnbmVkIGludCwgaW50KTsKKworLyoKKyAqIFByb3ZpZGUgc29tZSBzaW1wbGUgdG9vbHMgZm9yIFhEUiBidWZmZXIgb3ZlcmZsb3ctY2hlY2tpbmcgZXRjLgorICovCitzdHJ1Y3QgeGRyX3N0cmVhbSB7CisJdWludDMyX3QgKnA7CQkvKiBzdGFydCBvZiBhdmFpbGFibGUgYnVmZmVyICovCisJc3RydWN0IHhkcl9idWYgKmJ1ZjsJLyogWERSIGJ1ZmZlciB0byByZWFkL3dyaXRlICovCisKKwl1aW50MzJfdCAqZW5kOwkJLyogZW5kIG9mIGF2YWlsYWJsZSBidWZmZXIgc3BhY2UgKi8KKwlzdHJ1Y3Qga3ZlYyAqaW92OwkvKiBwb2ludGVyIHRvIHRoZSBjdXJyZW50IGt2ZWMgKi8KK307CisKK2V4dGVybiB2b2lkIHhkcl9pbml0X2VuY29kZShzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCBzdHJ1Y3QgeGRyX2J1ZiAqYnVmLCB1aW50MzJfdCAqcCk7CitleHRlcm4gdWludDMyX3QgKnhkcl9yZXNlcnZlX3NwYWNlKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHNpemVfdCBuYnl0ZXMpOworZXh0ZXJuIHZvaWQgeGRyX3dyaXRlX3BhZ2VzKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHN0cnVjdCBwYWdlICoqcGFnZXMsCisJCXVuc2lnbmVkIGludCBiYXNlLCB1bnNpZ25lZCBpbnQgbGVuKTsKK2V4dGVybiB2b2lkIHhkcl9pbml0X2RlY29kZShzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCBzdHJ1Y3QgeGRyX2J1ZiAqYnVmLCB1aW50MzJfdCAqcCk7CitleHRlcm4gdWludDMyX3QgKnhkcl9pbmxpbmVfZGVjb2RlKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHNpemVfdCBuYnl0ZXMpOworZXh0ZXJuIHZvaWQgeGRyX3JlYWRfcGFnZXMoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgdW5zaWduZWQgaW50IGxlbik7CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfU1VOUlBDX1hEUl9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdW5ycGMveHBydC5oIGIvaW5jbHVkZS9saW51eC9zdW5ycGMveHBydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2MThjMTYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy94cHJ0LmgKQEAgLTAsMCArMSwyMzIgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9saW51eC9zdW5ycGMvY2xudF94cHJ0LmgKKyAqCisgKiAgRGVjbGFyYXRpb25zIGZvciB0aGUgUlBDIHRyYW5zcG9ydCBpbnRlcmZhY2UuCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiBPbGFmIEtpcmNoIDxva2lyQG1vbmFkLnN3Yi5kZT4KKyAqLworCisjaWZuZGVmIF9MSU5VWF9TVU5SUENfWFBSVF9ICisjZGVmaW5lIF9MSU5VWF9TVU5SUENfWFBSVF9ICisKKyNpbmNsdWRlIDxsaW51eC91aW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy94ZHIuaD4KKworLyoKKyAqIFRoZSB0cmFuc3BvcnQgY29kZSBtYWludGFpbnMgYW4gZXN0aW1hdGUgb24gdGhlIG1heGltdW0gbnVtYmVyIG9mIG91dC0KKyAqIHN0YW5kaW5nIFJQQyByZXF1ZXN0cywgdXNpbmcgYSBzbW9vdGhlZCB2ZXJzaW9uIG9mIHRoZSBjb25nZXN0aW9uCisgKiBhdm9pZGFuY2UgaW1wbGVtZW50ZWQgaW4gNDRCU0QuIFRoaXMgaXMgYmFzaWNhbGx5IHRoZSBWYW4gSmFjb2Jzb24KKyAqIGNvbmdlc3Rpb24gYWxnb3JpdGhtOiBJZiBhIHJldHJhbnNtaXQgb2NjdXJzLCB0aGUgY29uZ2VzdGlvbiB3aW5kb3cgaXMKKyAqIGhhbHZlZDsgb3RoZXJ3aXNlLCBpdCBpcyBpbmNyZW1lbnRlZCBieSAxL2N3bmQgd2hlbgorICoKKyAqCS0JYSByZXBseSBpcyByZWNlaXZlZCBhbmQKKyAqCS0JYSBmdWxsIG51bWJlciBvZiByZXF1ZXN0cyBhcmUgb3V0c3RhbmRpbmcgYW5kCisgKgktCXRoZSBjb25nZXN0aW9uIHdpbmRvdyBoYXNuJ3QgYmVlbiB1cGRhdGVkIHJlY2VudGx5LgorICoKKyAqIFVwcGVyIHByb2NlZHVyZXMgbWF5IGNoZWNrIHdoZXRoZXIgYSByZXF1ZXN0IHdvdWxkIGJsb2NrIHdhaXRpbmcgZm9yCisgKiBhIGZyZWUgUlBDIHNsb3QgYnkgdXNpbmcgdGhlIFJQQ19DT05HRVNURUQoKSBtYWNyby4KKyAqLworZXh0ZXJuIHVuc2lnbmVkIGludCB4cHJ0X3VkcF9zbG90X3RhYmxlX2VudHJpZXM7CitleHRlcm4gdW5zaWduZWQgaW50IHhwcnRfdGNwX3Nsb3RfdGFibGVfZW50cmllczsKKworI2RlZmluZSBSUENfTUlOX1NMT1RfVEFCTEUJKDJVKQorI2RlZmluZSBSUENfREVGX1NMT1RfVEFCTEUJKDE2VSkKKyNkZWZpbmUgUlBDX01BWF9TTE9UX1RBQkxFCSgxMjhVKQorCisjZGVmaW5lIFJQQ19DV05EU0hJRlQJCSg4VSkKKyNkZWZpbmUgUlBDX0NXTkRTQ0FMRQkJKDFVIDw8IFJQQ19DV05EU0hJRlQpCisjZGVmaW5lIFJQQ19JTklUQ1dORAkJUlBDX0NXTkRTQ0FMRQorI2RlZmluZSBSUENfTUFYQ1dORCh4cHJ0KQkoKHhwcnQpLT5tYXhfcmVxcyA8PCBSUENfQ1dORFNISUZUKQorI2RlZmluZSBSUENYUFJUX0NPTkdFU1RFRCh4cHJ0KSAoKHhwcnQpLT5jb25nID49ICh4cHJ0KS0+Y3duZCkKKworLyogRGVmYXVsdCB0aW1lb3V0IHZhbHVlcyAqLworI2RlZmluZSBSUENfTUFYX1VEUF9USU1FT1VUCSg2MCpIWikKKyNkZWZpbmUgUlBDX01BWF9UQ1BfVElNRU9VVAkoNjAwKkhaKQorCisvKgorICogV2FpdCBkdXJhdGlvbiBmb3IgYW4gUlBDIFRDUCBjb25uZWN0aW9uIHRvIGJlIGVzdGFibGlzaGVkLiAgU29sYXJpcworICogTkZTIG92ZXIgVENQIHVzZXMgNjAgc2Vjb25kcywgZm9yIGV4YW1wbGUsIHdoaWNoIGlzIGluIGxpbmUgd2l0aCBob3cKKyAqIGxvbmcgYSBzZXJ2ZXIgdGFrZXMgdG8gcmVib290LgorICovCisjZGVmaW5lIFJQQ19DT05ORUNUX1RJTUVPVVQJKDYwKkhaKQorCisvKgorICogRGVsYXkgYW4gYXJiaXRyYXJ5IG51bWJlciBvZiBzZWNvbmRzIGJlZm9yZSBhdHRlbXB0aW5nIHRvIHJlY29ubmVjdAorICogYWZ0ZXIgYW4gZXJyb3IuCisgKi8KKyNkZWZpbmUgUlBDX1JFRVNUQUJMSVNIX1RJTUVPVVQJKDE1KkhaKQorCisvKiBSUEMgY2FsbCBhbmQgcmVwbHkgaGVhZGVyIHNpemUgYXMgbnVtYmVyIG9mIDMyYml0IHdvcmRzICh2ZXJpZmllcgorICogc2l6ZSBjb21wdXRlZCBzZXBhcmF0ZWx5KQorICovCisjZGVmaW5lIFJQQ19DQUxMSERSU0laRQkJNgorI2RlZmluZSBSUENfUkVQSERSU0laRQkJNAorCisvKgorICogVGhpcyBkZXNjcmliZXMgYSB0aW1lb3V0IHN0cmF0ZWd5CisgKi8KK3N0cnVjdCBycGNfdGltZW91dCB7CisJdW5zaWduZWQgbG9uZwkJdG9faW5pdHZhbCwJCS8qIGluaXRpYWwgdGltZW91dCAqLworCQkJCXRvX21heHZhbCwJCS8qIG1heCB0aW1lb3V0ICovCisJCQkJdG9faW5jcmVtZW50OwkJLyogaWYgIWV4cG9uZW50aWFsICovCisJdW5zaWduZWQgaW50CQl0b19yZXRyaWVzOwkJLyogbWF4ICMgb2YgcmV0cmllcyAqLworCXVuc2lnbmVkIGNoYXIJCXRvX2V4cG9uZW50aWFsOworfTsKKworLyoKKyAqIFRoaXMgZGVzY3JpYmVzIGEgY29tcGxldGUgUlBDIHJlcXVlc3QKKyAqLworc3RydWN0IHJwY19ycXN0IHsKKwkvKgorCSAqIFRoaXMgaXMgdGhlIHVzZXItdmlzaWJsZSBwYXJ0CisJICovCisJc3RydWN0IHJwY194cHJ0ICoJcnFfeHBydDsJCS8qIFJQQyBjbGllbnQgKi8KKwlzdHJ1Y3QgeGRyX2J1ZgkJcnFfc25kX2J1ZjsJCS8qIHNlbmQgYnVmZmVyICovCisJc3RydWN0IHhkcl9idWYJCXJxX3Jjdl9idWY7CQkvKiByZWN2IGJ1ZmZlciAqLworCisJLyoKKwkgKiBUaGlzIGlzIHRoZSBwcml2YXRlIHBhcnQKKwkgKi8KKwlzdHJ1Y3QgcnBjX3Rhc2sgKglycV90YXNrOwkvKiBSUEMgdGFzayBkYXRhICovCisJX191MzIJCQlycV94aWQ7CQkvKiByZXF1ZXN0IFhJRCAqLworCWludAkJCXJxX2Nvbmc7CS8qIGhhcyBpbmNyZW1lbnRlZCB4cHJ0LT5jb25nICovCisJaW50CQkJcnFfcmVjZWl2ZWQ7CS8qIHJlY2VpdmUgY29tcGxldGVkICovCisJdTMyCQkJcnFfc2Vxbm87CS8qIGdzcyBzZXEgbm8uIHVzZWQgb24gcmVxLiAqLworCisJc3RydWN0IGxpc3RfaGVhZAlycV9saXN0OworCisJc3RydWN0IHhkcl9idWYJCXJxX3ByaXZhdGVfYnVmOwkJLyogVGhlIHJlY2VpdmUgYnVmZmVyCisJCQkJCQkJICogdXNlZCBpbiB0aGUgc29mdGlycS4KKwkJCQkJCQkgKi8KKwl1bnNpZ25lZCBsb25nCQlycV9tYWpvcnRpbWVvOwkvKiBtYWpvciB0aW1lb3V0IGFsYXJtICovCisJdW5zaWduZWQgbG9uZwkJcnFfdGltZW91dDsJLyogQ3VycmVudCB0aW1lb3V0IHZhbHVlICovCisJdW5zaWduZWQgaW50CQlycV9yZXRyaWVzOwkvKiAjIG9mIHJldHJpZXMgKi8KKwkvKgorCSAqIEZvciBhdXRoZW50aWNhdGlvbiAoZS5nLiBhdXRoX2RlcykKKwkgKi8KKwl1MzIJCQlycV9jcmVkZGF0YVsyXTsKKwkKKwkvKgorCSAqIFBhcnRpYWwgc2VuZCBoYW5kbGluZworCSAqLworCQorCXUzMgkJCXJxX2J5dGVzX3NlbnQ7CS8qIEJ5dGVzIHdlIGhhdmUgc2VudCAqLworCisJdW5zaWduZWQgbG9uZwkJcnFfeHRpbWU7CS8qIHdoZW4gdHJhbnNtaXR0ZWQgKi8KKwlpbnQJCQlycV9udHJhbnM7Cit9OworI2RlZmluZSBycV9zdmVjCQkJcnFfc25kX2J1Zi5oZWFkCisjZGVmaW5lIHJxX3NsZW4JCQlycV9zbmRfYnVmLmxlbgorCisjZGVmaW5lIFhQUlRfTEFTVF9GUkFHCQkoMSA8PCAwKQorI2RlZmluZSBYUFJUX0NPUFlfUkVDTQkJKDEgPDwgMSkKKyNkZWZpbmUgWFBSVF9DT1BZX1hJRAkJKDEgPDwgMikKKyNkZWZpbmUgWFBSVF9DT1BZX0RBVEEJCSgxIDw8IDMpCisKK3N0cnVjdCBycGNfeHBydCB7CisJc3RydWN0IHNvY2tldCAqCQlzb2NrOwkJLyogQlNEIHNvY2tldCBsYXllciAqLworCXN0cnVjdCBzb2NrICoJCWluZXQ7CQkvKiBJTkVUIGxheWVyICovCisKKwlzdHJ1Y3QgcnBjX3RpbWVvdXQJdGltZW91dDsJLyogdGltZW91dCBwYXJtcyAqLworCXN0cnVjdCBzb2NrYWRkcl9pbglhZGRyOwkJLyogc2VydmVyIGFkZHJlc3MgKi8KKwlpbnQJCQlwcm90OwkJLyogSVAgcHJvdG9jb2wgKi8KKworCXVuc2lnbmVkIGxvbmcJCWNvbmc7CQkvKiBjdXJyZW50IGNvbmdlc3Rpb24gKi8KKwl1bnNpZ25lZCBsb25nCQljd25kOwkJLyogY29uZ2VzdGlvbiB3aW5kb3cgKi8KKworCXVuc2lnbmVkIGludAkJcmN2c2l6ZSwJLyogc29ja2V0IHJlY2VpdmUgYnVmZmVyIHNpemUgKi8KKwkJCQlzbmRzaXplOwkvKiBzb2NrZXQgc2VuZCBidWZmZXIgc2l6ZSAqLworCisJc2l6ZV90CQkJbWF4X3BheWxvYWQ7CS8qIGxhcmdlc3QgUlBDIHBheWxvYWQgc2l6ZSwKKwkJCQkJCSAgIGluIGJ5dGVzICovCisKKwlzdHJ1Y3QgcnBjX3dhaXRfcXVldWUJc2VuZGluZzsJLyogcmVxdWVzdHMgd2FpdGluZyB0byBzZW5kICovCisJc3RydWN0IHJwY193YWl0X3F1ZXVlCXJlc2VuZDsJCS8qIHJlcXVlc3RzIHdhaXRpbmcgdG8gcmVzZW5kICovCisJc3RydWN0IHJwY193YWl0X3F1ZXVlCXBlbmRpbmc7CS8qIHJlcXVlc3RzIGluIGZsaWdodCAqLworCXN0cnVjdCBycGNfd2FpdF9xdWV1ZQliYWNrbG9nOwkvKiB3YWl0aW5nIGZvciBzbG90ICovCisJc3RydWN0IGxpc3RfaGVhZAlmcmVlOwkJLyogZnJlZSBzbG90cyAqLworCXN0cnVjdCBycGNfcnFzdCAqCXNsb3Q7CQkvKiBzbG90IHRhYmxlIHN0b3JhZ2UgKi8KKwl1bnNpZ25lZCBpbnQJCW1heF9yZXFzOwkvKiB0b3RhbCBzbG90cyAqLworCXVuc2lnbmVkIGxvbmcJCXNvY2tzdGF0ZTsJLyogU29ja2V0IHN0YXRlICovCisJdW5zaWduZWQgY2hhcgkJc2h1dGRvd24gICA6IDEsCS8qIGJlaW5nIHNodXQgZG93biAqLworCQkJCW5vY29uZwkgICA6IDEsCS8qIG5vIGNvbmdlc3Rpb24gY29udHJvbCAqLworCQkJCXJlc3Zwb3J0ICAgOiAxLCAvKiB1c2UgYSByZXNlcnZlZCBwb3J0ICovCisJCQkJc3RyZWFtICAgICA6IDE7CS8qIFRDUCAqLworCisJLyoKKwkgKiBYSUQKKwkgKi8KKwlfX3UzMgkJCXhpZDsJCS8qIE5leHQgWElEIHZhbHVlIHRvIHVzZSAqLworCisJLyoKKwkgKiBTdGF0ZSBvZiBUQ1AgcmVwbHkgcmVjZWl2ZSBzdHVmZgorCSAqLworCXUzMgkJCXRjcF9yZWNtLAkvKiBGcmFnbWVudCBoZWFkZXIgKi8KKwkJCQl0Y3BfeGlkLAkvKiBDdXJyZW50IFhJRCAqLworCQkJCXRjcF9yZWNsZW4sCS8qIGZyYWdtZW50IGxlbmd0aCAqLworCQkJCXRjcF9vZmZzZXQ7CS8qIGZyYWdtZW50IG9mZnNldCAqLworCXVuc2lnbmVkIGxvbmcJCXRjcF9jb3BpZWQsCS8qIGNvcGllZCB0byByZXF1ZXN0ICovCisJCQkJdGNwX2ZsYWdzOworCS8qCisJICogQ29ubmVjdGlvbiBvZiBzb2NrZXRzCisJICovCisJc3RydWN0IHdvcmtfc3RydWN0CXNvY2tfY29ubmVjdDsKKwl1bnNpZ25lZCBzaG9ydAkJcG9ydDsKKwkvKgorCSAqIERpc2Nvbm5lY3Rpb24gb2YgaWRsZSBzb2NrZXRzCisJICovCisJc3RydWN0IHdvcmtfc3RydWN0CXRhc2tfY2xlYW51cDsKKwlzdHJ1Y3QgdGltZXJfbGlzdAl0aW1lcjsKKwl1bnNpZ25lZCBsb25nCQlsYXN0X3VzZWQ7CisKKwkvKgorCSAqIFNlbmQgc3R1ZmYKKwkgKi8KKwlzcGlubG9ja190CQlzb2NrX2xvY2s7CS8qIGxvY2sgc29ja2V0IGluZm8gKi8KKwlzcGlubG9ja190CQl4cHJ0X2xvY2s7CS8qIGxvY2sgeHBydCBpbmZvICovCisJc3RydWN0IHJwY190YXNrICoJc25kX3Rhc2s7CS8qIFRhc2sgYmxvY2tlZCBpbiBzZW5kICovCisKKwlzdHJ1Y3QgbGlzdF9oZWFkCXJlY3Y7CisKKworCXZvaWQJCQkoKm9sZF9kYXRhX3JlYWR5KShzdHJ1Y3Qgc29jayAqLCBpbnQpOworCXZvaWQJCQkoKm9sZF9zdGF0ZV9jaGFuZ2UpKHN0cnVjdCBzb2NrICopOworCXZvaWQJCQkoKm9sZF93cml0ZV9zcGFjZSkoc3RydWN0IHNvY2sgKik7CisKKwl3YWl0X3F1ZXVlX2hlYWRfdAljb25nX3dhaXQ7Cit9OworCisjaWZkZWYgX19LRVJORUxfXworCitzdHJ1Y3QgcnBjX3hwcnQgKgl4cHJ0X2NyZWF0ZV9wcm90byhpbnQgcHJvdG8sIHN0cnVjdCBzb2NrYWRkcl9pbiAqYWRkciwKKwkJCQkJc3RydWN0IHJwY190aW1lb3V0ICp0b3Bhcm1zKTsKK2ludAkJCXhwcnRfZGVzdHJveShzdHJ1Y3QgcnBjX3hwcnQgKik7Cit2b2lkCQkJeHBydF9zZXRfdGltZW91dChzdHJ1Y3QgcnBjX3RpbWVvdXQgKiwgdW5zaWduZWQgaW50LAorCQkJCQl1bnNpZ25lZCBsb25nKTsKKwordm9pZAkJCXhwcnRfcmVzZXJ2ZShzdHJ1Y3QgcnBjX3Rhc2sgKik7CitpbnQJCQl4cHJ0X3ByZXBhcmVfdHJhbnNtaXQoc3RydWN0IHJwY190YXNrICopOwordm9pZAkJCXhwcnRfdHJhbnNtaXQoc3RydWN0IHJwY190YXNrICopOwordm9pZAkJCXhwcnRfcmVjZWl2ZShzdHJ1Y3QgcnBjX3Rhc2sgKik7CitpbnQJCQl4cHJ0X2FkanVzdF90aW1lb3V0KHN0cnVjdCBycGNfcnFzdCAqcmVxKTsKK3ZvaWQJCQl4cHJ0X3JlbGVhc2Uoc3RydWN0IHJwY190YXNrICopOwordm9pZAkJCXhwcnRfY29ubmVjdChzdHJ1Y3QgcnBjX3Rhc2sgKik7Cit2b2lkCQkJeHBydF9zb2NrX3NldGJ1ZnNpemUoc3RydWN0IHJwY194cHJ0ICopOworCisjZGVmaW5lIFhQUlRfTE9DS0VECTAKKyNkZWZpbmUgWFBSVF9DT05ORUNUCTEKKyNkZWZpbmUgWFBSVF9DT05ORUNUSU5HCTIKKworI2RlZmluZSB4cHJ0X2Nvbm5lY3RlZCh4cCkJCSh0ZXN0X2JpdChYUFJUX0NPTk5FQ1QsICYoeHApLT5zb2Nrc3RhdGUpKQorI2RlZmluZSB4cHJ0X3NldF9jb25uZWN0ZWQoeHApCQkoc2V0X2JpdChYUFJUX0NPTk5FQ1QsICYoeHApLT5zb2Nrc3RhdGUpKQorI2RlZmluZSB4cHJ0X3Rlc3RfYW5kX3NldF9jb25uZWN0ZWQoeHApCSh0ZXN0X2FuZF9zZXRfYml0KFhQUlRfQ09OTkVDVCwgJih4cCktPnNvY2tzdGF0ZSkpCisjZGVmaW5lIHhwcnRfdGVzdF9hbmRfY2xlYXJfY29ubmVjdGVkKHhwKSBcCisJCQkJCSh0ZXN0X2FuZF9jbGVhcl9iaXQoWFBSVF9DT05ORUNULCAmKHhwKS0+c29ja3N0YXRlKSkKKyNkZWZpbmUgeHBydF9jbGVhcl9jb25uZWN0ZWQoeHApCShjbGVhcl9iaXQoWFBSVF9DT05ORUNULCAmKHhwKS0+c29ja3N0YXRlKSkKKworI2VuZGlmIC8qIF9fS0VSTkVMX18qLworCisjZW5kaWYgLyogX0xJTlVYX1NVTlJQQ19YUFJUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VwZXJoeXdheS5oIGIvaW5jbHVkZS9saW51eC9zdXBlcmh5d2F5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkwNmM1YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvc3VwZXJoeXdheS5oCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBpbmNsdWRlL2xpbnV4L3N1cGVyaHl3YXkuaAorICoKKyAqIFN1cGVySHl3YXkgQnVzIGRlZmluaXRpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1ICBQYXVsIE11bmR0IDxsZXRoYWxAbGludXgtc2gub3JnPgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9fTElOVVhfU1VQRVJIWVdBWV9ICisjZGVmaW5lIF9fTElOVVhfU1VQRVJIWVdBWV9ICisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKworLyoKKyAqIFN1cGVySHl3YXkgSURzCisgKi8KKyNkZWZpbmUgU1VQRVJIWVdBWV9ERVZJQ0VfSURfU0g1X0RNQUMJMHgwMTgzCisKK3N0cnVjdCB2Y3JfaW5mbyB7CisJdTgJcGVycl9mbGFnczsJLyogUC1wb3J0IEVycm9yIGZsYWdzICovCisJdTgJbWVycl9mbGFnczsJLyogTW9kdWxlIEVycm9yIGZsYWdzICovCisJdTE2CW1vZF92ZXJzOwkvKiBNb2R1bGUgVmVyc2lvbiAqLworCXUxNgltb2RfaWQ7CQkvKiBNb2R1bGUgSUQgKi8KKwl1OAlib3RfbWI7CQkvKiBCb3R0b20gTWVtb3J5IGJsb2NrICovCisJdTgJdG9wX21iOwkJLyogVG9wIE1lbW9yeSBibG9jayAqLworfTsKKworc3RydWN0IHN1cGVyaHl3YXlfZGV2aWNlX2lkIHsKKwl1bnNpZ25lZCBpbnQgaWQ7CisJdW5zaWduZWQgbG9uZyBkcml2ZXJfZGF0YTsKK307CisKK3N0cnVjdCBzdXBlcmh5d2F5X2RldmljZTsKK2V4dGVybiBzdHJ1Y3QgYnVzX3R5cGUgc3VwZXJoeXdheV9idXNfdHlwZTsKKworc3RydWN0IHN1cGVyaHl3YXlfZHJpdmVyIHsKKwljaGFyICpuYW1lOworCisJY29uc3Qgc3RydWN0IHN1cGVyaHl3YXlfZGV2aWNlX2lkICppZF90YWJsZTsKKwlzdHJ1Y3QgZGV2aWNlX2RyaXZlciBkcnY7CisKKwlpbnQgKCpwcm9iZSkoc3RydWN0IHN1cGVyaHl3YXlfZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBzdXBlcmh5d2F5X2RldmljZV9pZCAqaWQpOworCXZvaWQgKCpyZW1vdmUpKHN0cnVjdCBzdXBlcmh5d2F5X2RldmljZSAqZGV2KTsKK307CisKKyNkZWZpbmUgdG9fc3VwZXJoeXdheV9kcml2ZXIoZCkJY29udGFpbmVyX29mKChkKSwgc3RydWN0IHN1cGVyaHl3YXlfZHJpdmVyLCBkcnYpCisKK3N0cnVjdCBzdXBlcmh5d2F5X2RldmljZSB7CisJY2hhciBuYW1lWzMyXTsKKworCXN0cnVjdCBkZXZpY2UgZGV2OworCisJc3RydWN0IHN1cGVyaHl3YXlfZGV2aWNlX2lkIGlkOworCXN0cnVjdCBzdXBlcmh5d2F5X2RyaXZlciAqZHJ2OworCisJc3RydWN0IHJlc291cmNlIHJlc291cmNlOworCXN0cnVjdCB2Y3JfaW5mbyB2Y3I7Cit9OworCisjZGVmaW5lIHRvX3N1cGVyaHl3YXlfZGV2aWNlKGQpCWNvbnRhaW5lcl9vZigoZCksIHN0cnVjdCBzdXBlcmh5d2F5X2RldmljZSwgZGV2KQorCisjZGVmaW5lIHN1cGVyaHl3YXlfZ2V0X2RydmRhdGEoZCkJZGV2X2dldF9kcnZkYXRhKCYoZCktPmRldikKKyNkZWZpbmUgc3VwZXJoeXdheV9zZXRfZHJ2ZGF0YShkLHApCWRldl9zZXRfZHJ2ZGF0YSgmKGQpLT5kZXYsIChwKSkKKworZXh0ZXJuIGludCBzdXBlcmh5d2F5X3NjYW5fYnVzKHZvaWQpOworCisvKiBkcml2ZXJzL3NoL3N1cGVyaHl3YXkvc3VwZXJoeXdheS5jICovCitpbnQgc3VwZXJoeXdheV9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHN1cGVyaHl3YXlfZHJpdmVyICopOwordm9pZCBzdXBlcmh5d2F5X3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBzdXBlcmh5d2F5X2RyaXZlciAqKTsKK2ludCBzdXBlcmh5d2F5X2FkZF9kZXZpY2UodW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nIGxvbmcpOworCisvKiBkcml2ZXJzL3NoL3N1cGVyaHl3YXkvc3VwZXJoeXdheS1zeXNmcy5jICovCitleHRlcm4gc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgc3VwZXJoeXdheV9kZXZfYXR0cnNbXTsKKworI2VuZGlmIC8qIF9fTElOVVhfU1VQRVJIWVdBWV9IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VzcGVuZC5oIGIvaW5jbHVkZS9saW51eC9zdXNwZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJmMGQ1ZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvc3VzcGVuZC5oCkBAIC0wLDAgKzEsNzUgQEAKKyNpZm5kZWYgX0xJTlVYX1NXU1VTUF9ICisjZGVmaW5lIF9MSU5VWF9TV1NVU1BfSAorCisjaWYgZGVmaW5lZChDT05GSUdfWDg2KSB8fCBkZWZpbmVkKENPTkZJR19GUlYpIHx8IGRlZmluZWQoQ09ORklHX1BQQzMyKQorI2luY2x1ZGUgPGFzbS9zdXNwZW5kLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CisjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKworLyogcGFnZSBiYWNrdXAgZW50cnkgKi8KK3R5cGVkZWYgc3RydWN0IHBiZSB7CisJdW5zaWduZWQgbG9uZyBhZGRyZXNzOwkJLyogYWRkcmVzcyBvZiB0aGUgY29weSAqLworCXVuc2lnbmVkIGxvbmcgb3JpZ19hZGRyZXNzOwkvKiBvcmlnaW5hbCBhZGRyZXNzIG9mIHBhZ2UgKi8KKwlzd3BfZW50cnlfdCBzd2FwX2FkZHJlc3M7CQorCisJc3RydWN0IHBiZSAqbmV4dDsJLyogYWxzbyB1c2VkIGFzIHNjcmF0Y2ggc3BhY2UgYXQKKwkJCQkgKiBlbmQgb2YgcGFnZSAoc2VlIGxpbmssIGRpc2twYWdlKQorCQkJCSAqLworfSBzdXNwZW5kX3BhZ2VkaXJfdDsKKworI2RlZmluZSBmb3JfZWFjaF9wYmUocGJlLCBwYmxpc3QpIFwKKwlmb3IgKHBiZSA9IHBibGlzdCA7IHBiZSA7IHBiZSA9IHBiZS0+bmV4dCkKKworI2RlZmluZSBQQkVTX1BFUl9QQUdFICAgICAgKFBBR0VfU0laRS9zaXplb2Yoc3RydWN0IHBiZSkpCisjZGVmaW5lIFBCX1BBR0VfU0tJUCAgICAgICAoUEJFU19QRVJfUEFHRS0xKQorCisjZGVmaW5lIGZvcl9lYWNoX3BiX3BhZ2UocGJlLCBwYmxpc3QpIFwKKwlmb3IgKHBiZSA9IHBibGlzdCA7IHBiZSA7IHBiZSA9IChwYmUrUEJfUEFHRV9TS0lQKS0+bmV4dCkKKworCisjZGVmaW5lIFNXQVBfRklMRU5BTUVfTUFYTEVOR1RICTMyCisKKworZXh0ZXJuIGRldl90IHN3c3VzcF9yZXN1bWVfZGV2aWNlOworICAgCisvKiBtbS92bXNjYW4uYyAqLworZXh0ZXJuIGludCBzaHJpbmtfbWVtKHZvaWQpOworCisvKiBtbS9wYWdlX2FsbG9jLmMgKi8KK2V4dGVybiB2b2lkIGRyYWluX2xvY2FsX3BhZ2VzKHZvaWQpOworZXh0ZXJuIHZvaWQgbWFya19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lKTsKKworI2lmZGVmIENPTkZJR19QTQorLyoga2VybmVsL3Bvd2VyL3N3c3VzcC5jICovCitleHRlcm4gaW50IHNvZnR3YXJlX3N1c3BlbmQodm9pZCk7CisKK2V4dGVybiBpbnQgcG1fcHJlcGFyZV9jb25zb2xlKHZvaWQpOworZXh0ZXJuIHZvaWQgcG1fcmVzdG9yZV9jb25zb2xlKHZvaWQpOworCisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgc29mdHdhcmVfc3VzcGVuZCh2b2lkKQoreworCXByaW50aygiV2FybmluZzogZmFrZSBzdXNwZW5kIGNhbGxlZFxuIik7CisJcmV0dXJuIC1FUEVSTTsKK30KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1NNUAorZXh0ZXJuIHZvaWQgZGlzYWJsZV9ub25ib290X2NwdXModm9pZCk7CitleHRlcm4gdm9pZCBlbmFibGVfbm9uYm9vdF9jcHVzKHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBkaXNhYmxlX25vbmJvb3RfY3B1cyh2b2lkKSB7fQorc3RhdGljIGlubGluZSB2b2lkIGVuYWJsZV9ub25ib290X2NwdXModm9pZCkge30KKyNlbmRpZgorCit2b2lkIHNhdmVfcHJvY2Vzc29yX3N0YXRlKHZvaWQpOwordm9pZCByZXN0b3JlX3Byb2Nlc3Nvcl9zdGF0ZSh2b2lkKTsKK3N0cnVjdCBzYXZlZF9jb250ZXh0Owordm9pZCBfX3NhdmVfcHJvY2Vzc29yX3N0YXRlKHN0cnVjdCBzYXZlZF9jb250ZXh0ICpjdHh0KTsKK3ZvaWQgX19yZXN0b3JlX3Byb2Nlc3Nvcl9zdGF0ZShzdHJ1Y3Qgc2F2ZWRfY29udGV4dCAqY3R4dCk7CisKKyNlbmRpZiAvKiBfTElOVVhfU1dTVVNQX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcC5oIGIvaW5jbHVkZS9saW51eC9zd2FwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JiYzQxYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvc3dhcC5oCkBAIC0wLDAgKzEsMjkzIEBACisjaWZuZGVmIF9MSU5VWF9TV0FQX0gKKyNkZWZpbmUgX0xJTlVYX1NXQVBfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8bGludXgvbW16b25lLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisKKyNkZWZpbmUgU1dBUF9GTEFHX1BSRUZFUgkweDgwMDAJLyogc2V0IGlmIHN3YXAgcHJpb3JpdHkgc3BlY2lmaWVkICovCisjZGVmaW5lIFNXQVBfRkxBR19QUklPX01BU0sJMHg3ZmZmCisjZGVmaW5lIFNXQVBfRkxBR19QUklPX1NISUZUCTAKKworc3RhdGljIGlubGluZSBpbnQgY3VycmVudF9pc19rc3dhcGQodm9pZCkKK3sKKwlyZXR1cm4gY3VycmVudC0+ZmxhZ3MgJiBQRl9LU1dBUEQ7Cit9CisKKy8qCisgKiBNQVhfU1dBUEZJTEVTIGRlZmluZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHN3YXB0eXBlczogdGhpbmdzIHdoaWNoIGNhbgorICogYmUgc3dhcHBlZCB0by4gIFRoZSBzd2FwIHR5cGUgYW5kIHRoZSBvZmZzZXQgaW50byB0aGF0IHN3YXAgdHlwZSBhcmUKKyAqIGVuY29kZWQgaW50byBwdGUncyBhbmQgaW50byBwZ29mZl90J3MgaW4gdGhlIHN3YXBjYWNoZS4gIFVzaW5nIGZpdmUgYml0cworICogZm9yIHRoZSB0eXBlIG1lYW5zIHRoYXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIHN3YXBjYWNoZSBwYWdlcyBpcyAyNyBiaXRzCisgKiBvbiAzMi1iaXQtcGdvZmZfdCBhcmNoaXRlY3R1cmVzLiAgQW5kIHRoYXQgYXNzdW1lcyB0aGF0IHRoZSBhcmNoaXRlY3R1cmUgcGFja3MKKyAqIHRoZSB0eXBlL29mZnNldCBpbnRvIHRoZSBwdGUgYXMgNS8yNyBhcyB3ZWxsLgorICovCisjZGVmaW5lIE1BWF9TV0FQRklMRVNfU0hJRlQJNQorI2RlZmluZSBNQVhfU1dBUEZJTEVTCQkoMSA8PCBNQVhfU1dBUEZJTEVTX1NISUZUKQorCisvKgorICogTWFnaWMgaGVhZGVyIGZvciBhIHN3YXAgYXJlYS4gVGhlIGZpcnN0IHBhcnQgb2YgdGhlIHVuaW9uIGlzCisgKiB3aGF0IHRoZSBzd2FwIG1hZ2ljIGxvb2tzIGxpa2UgZm9yIHRoZSBvbGQgKGxpbWl0ZWQgdG8gMTI4TUIpCisgKiBzd2FwIGFyZWEgZm9ybWF0LCB0aGUgc2Vjb25kIHBhcnQgb2YgdGhlIHVuaW9uIGFkZHMgLSBpbiB0aGUKKyAqIG9sZCByZXNlcnZlZCBhcmVhIC0gc29tZSBleHRyYSBpbmZvcm1hdGlvbi4gTm90ZSB0aGF0IHRoZSBmaXJzdAorICoga2lsb2J5dGUgaXMgcmVzZXJ2ZWQgZm9yIGJvb3QgbG9hZGVyIG9yIGRpc2sgbGFiZWwgc3R1ZmYuLi4KKyAqCisgKiBIYXZpbmcgdGhlIG1hZ2ljIGF0IHRoZSBlbmQgb2YgdGhlIFBBR0VfU0laRSBtYWtlcyBkZXRlY3Rpbmcgc3dhcAorICogYXJlYXMgc29tZXdoYXQgdHJpY2t5IG9uIG1hY2hpbmVzIHRoYXQgc3VwcG9ydCBtdWx0aXBsZSBwYWdlIHNpemVzLgorICogRm9yIDIuNSB3ZSdsbCBwcm9iYWJseSB3YW50IHRvIG1vdmUgdGhlIG1hZ2ljIHRvIGp1c3QgYmV5b25kIHRoZQorICogYm9vdGJpdHMuLi4KKyAqLwordW5pb24gc3dhcF9oZWFkZXIgeworCXN0cnVjdCB7CisJCWNoYXIgcmVzZXJ2ZWRbUEFHRV9TSVpFIC0gMTBdOworCQljaGFyIG1hZ2ljWzEwXTsJCQkvKiBTV0FQLVNQQUNFIG9yIFNXQVBTUEFDRTIgKi8KKwl9IG1hZ2ljOworCXN0cnVjdCB7CisJCWNoYXIJICAgICBib290Yml0c1sxMDI0XTsJLyogU3BhY2UgZm9yIGRpc2tsYWJlbCBldGMuICovCisJCXVuc2lnbmVkIGludCB2ZXJzaW9uOworCQl1bnNpZ25lZCBpbnQgbGFzdF9wYWdlOworCQl1bnNpZ25lZCBpbnQgbnJfYmFkcGFnZXM7CisJCXVuc2lnbmVkIGludCBwYWRkaW5nWzEyNV07CisJCXVuc2lnbmVkIGludCBiYWRwYWdlc1sxXTsKKwl9IGluZm87Cit9OworCisgLyogQSBzd2FwIGVudHJ5IGhhcyB0byBmaXQgaW50byBhICJ1bnNpZ25lZCBsb25nIiwgYXMKKyAgKiB0aGUgZW50cnkgaXMgaGlkZGVuIGluIHRoZSAiaW5kZXgiIGZpZWxkIG9mIHRoZQorICAqIHN3YXBwZXIgYWRkcmVzcyBzcGFjZS4KKyAgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBsb25nIHZhbDsKK30gc3dwX2VudHJ5X3Q7CisKKy8qCisgKiBjdXJyZW50LT5yZWNsYWltX3N0YXRlIHBvaW50cyB0byBvbmUgb2YgdGhlc2Ugd2hlbiBhIHRhc2sgaXMgcnVubmluZworICogbWVtb3J5IHJlY2xhaW0KKyAqLworc3RydWN0IHJlY2xhaW1fc3RhdGUgeworCXVuc2lnbmVkIGxvbmcgcmVjbGFpbWVkX3NsYWI7Cit9OworCisjaWZkZWYgX19LRVJORUxfXworCitzdHJ1Y3QgYWRkcmVzc19zcGFjZTsKK3N0cnVjdCBzeXNpbmZvOworc3RydWN0IHdyaXRlYmFja19jb250cm9sOworc3RydWN0IHpvbmU7CisKKy8qCisgKiBBIHN3YXAgZXh0ZW50IG1hcHMgYSByYW5nZSBvZiBhIHN3YXBmaWxlJ3MgUEFHRV9TSVpFIHBhZ2VzIG9udG8gYSByYW5nZSBvZgorICogZGlzayBibG9ja3MuICBBIGxpc3Qgb2Ygc3dhcCBleHRlbnRzIG1hcHMgdGhlIGVudGlyZSBzd2FwZmlsZS4gIChXaGVyZSB0aGUKKyAqIHRlcm0gYHN3YXBmaWxlJyByZWZlcnMgdG8gZWl0aGVyIGEgYmxvY2tkZXZpY2Ugb3IgYW4gSVNfUkVHIGZpbGUuICBBcGFydAorICogZnJvbSBzZXR1cCwgdGhleSdyZSBoYW5kbGVkIGlkZW50aWNhbGx5LgorICoKKyAqIFdlIGFsd2F5cyBhc3N1bWUgdGhhdCBibG9ja3MgYXJlIG9mIHNpemUgUEFHRV9TSVpFLgorICovCitzdHJ1Y3Qgc3dhcF9leHRlbnQgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlwZ29mZl90IHN0YXJ0X3BhZ2U7CisJcGdvZmZfdCBucl9wYWdlczsKKwlzZWN0b3JfdCBzdGFydF9ibG9jazsKK307CisKKy8qCisgKiBNYXggYmFkIHBhZ2VzIGluIHRoZSBuZXcgZm9ybWF0Li4KKyAqLworI2RlZmluZSBfX3N3YXBvZmZzZXQoeCkgKCh1bnNpZ25lZCBsb25nKSYoKHVuaW9uIHN3YXBfaGVhZGVyICopMCktPngpCisjZGVmaW5lIE1BWF9TV0FQX0JBRFBBR0VTIFwKKwkoKF9fc3dhcG9mZnNldChtYWdpYy5tYWdpYykgLSBfX3N3YXBvZmZzZXQoaW5mby5iYWRwYWdlcykpIC8gc2l6ZW9mKGludCkpCisKK2VudW0geworCVNXUF9VU0VECT0gKDEgPDwgMCksCS8qIGlzIHNsb3QgaW4gc3dhcF9pbmZvW10gdXNlZD8gKi8KKwlTV1BfV1JJVEVPSwk9ICgxIDw8IDEpLAkvKiBvayB0byB3cml0ZSB0byB0aGlzIHN3YXA/CSovCisJU1dQX0FDVElWRQk9IChTV1BfVVNFRCB8IFNXUF9XUklURU9LKSwKK307CisKKyNkZWZpbmUgU1dBUF9DTFVTVEVSX01BWCAzMgorCisjZGVmaW5lIFNXQVBfTUFQX01BWAkweDdmZmYKKyNkZWZpbmUgU1dBUF9NQVBfQkFECTB4ODAwMAorCisvKgorICogVGhlIGluLW1lbW9yeSBzdHJ1Y3R1cmUgdXNlZCB0byB0cmFjayBzd2FwIGFyZWFzLgorICogZXh0ZW50X2xpc3QucHJldiBwb2ludHMgYXQgdGhlIGxvd2VzdC1pbmRleCBleHRlbnQuICBUaGF0IGxpc3QgaXMKKyAqIHNvcnRlZC4KKyAqLworc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgeworCXVuc2lnbmVkIGludCBmbGFnczsKKwlzcGlubG9ja190IHNkZXZfbG9jazsKKwlzdHJ1Y3QgZmlsZSAqc3dhcF9maWxlOworCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXY7CisJc3RydWN0IGxpc3RfaGVhZCBleHRlbnRfbGlzdDsKKwlpbnQgbnJfZXh0ZW50czsKKwlzdHJ1Y3Qgc3dhcF9leHRlbnQgKmN1cnJfc3dhcF9leHRlbnQ7CisJdW5zaWduZWQgb2xkX2Jsb2NrX3NpemU7CisJdW5zaWduZWQgc2hvcnQgKiBzd2FwX21hcDsKKwl1bnNpZ25lZCBpbnQgbG93ZXN0X2JpdDsKKwl1bnNpZ25lZCBpbnQgaGlnaGVzdF9iaXQ7CisJdW5zaWduZWQgaW50IGNsdXN0ZXJfbmV4dDsKKwl1bnNpZ25lZCBpbnQgY2x1c3Rlcl9ucjsKKwlpbnQgcHJpbzsJCQkvKiBzd2FwIHByaW9yaXR5ICovCisJaW50IHBhZ2VzOworCXVuc2lnbmVkIGxvbmcgbWF4OworCXVuc2lnbmVkIGxvbmcgaW51c2VfcGFnZXM7CisJaW50IG5leHQ7CQkJLyogbmV4dCBlbnRyeSBvbiBzd2FwIGxpc3QgKi8KK307CisKK3N0cnVjdCBzd2FwX2xpc3RfdCB7CisJaW50IGhlYWQ7CS8qIGhlYWQgb2YgcHJpb3JpdHktb3JkZXJlZCBzd2FwZmlsZSBsaXN0ICovCisJaW50IG5leHQ7CS8qIHN3YXBmaWxlIHRvIGJlIHVzZWQgbmV4dCAqLworfTsKKworLyogU3dhcCA1MCUgZnVsbD8gUmVsZWFzZSBzd2FwY2FjaGUgbW9yZSBhZ2dyZXNzaXZlbHkuLiAqLworI2RlZmluZSB2bV9zd2FwX2Z1bGwoKSAobnJfc3dhcF9wYWdlcyoyIDwgdG90YWxfc3dhcF9wYWdlcykKKworLyogbGludXgvbW0vb29tX2tpbGwuYyAqLworZXh0ZXJuIHZvaWQgb3V0X29mX21lbW9yeSh1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZ2ZwX21hc2spOworCisvKiBsaW51eC9tbS9tZW1vcnkuYyAqLworZXh0ZXJuIHZvaWQgc3dhcGluX3JlYWRhaGVhZChzd3BfZW50cnlfdCwgdW5zaWduZWQgbG9uZywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICopOworCisvKiBsaW51eC9tbS9wYWdlX2FsbG9jLmMgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIHRvdGFscmFtX3BhZ2VzOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdG90YWxoaWdoX3BhZ2VzOworZXh0ZXJuIGxvbmcgbnJfc3dhcF9wYWdlczsKK2V4dGVybiB1bnNpZ25lZCBpbnQgbnJfZnJlZV9wYWdlcyh2b2lkKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgbnJfZnJlZV9wYWdlc19wZ2RhdChwZ19kYXRhX3QgKnBnZGF0KTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgbnJfZnJlZV9idWZmZXJfcGFnZXModm9pZCk7CitleHRlcm4gdW5zaWduZWQgaW50IG5yX2ZyZWVfcGFnZWNhY2hlX3BhZ2VzKHZvaWQpOworCisvKiBsaW51eC9tbS9zd2FwLmMgKi8KK2V4dGVybiB2b2lkIEZBU1RDQUxMKGxydV9jYWNoZV9hZGQoc3RydWN0IHBhZ2UgKikpOworZXh0ZXJuIHZvaWQgRkFTVENBTEwobHJ1X2NhY2hlX2FkZF9hY3RpdmUoc3RydWN0IHBhZ2UgKikpOworZXh0ZXJuIHZvaWQgRkFTVENBTEwoYWN0aXZhdGVfcGFnZShzdHJ1Y3QgcGFnZSAqKSk7CitleHRlcm4gdm9pZCBGQVNUQ0FMTChtYXJrX3BhZ2VfYWNjZXNzZWQoc3RydWN0IHBhZ2UgKikpOworZXh0ZXJuIHZvaWQgbHJ1X2FkZF9kcmFpbih2b2lkKTsKK2V4dGVybiBpbnQgcm90YXRlX3JlY2xhaW1hYmxlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpOworZXh0ZXJuIHZvaWQgc3dhcF9zZXR1cCh2b2lkKTsKKworLyogbGludXgvbW0vdm1zY2FuLmMgKi8KK2V4dGVybiBpbnQgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmUgKiosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKK2V4dGVybiBpbnQgc2hyaW5rX2FsbF9tZW1vcnkoaW50KTsKK2V4dGVybiBpbnQgdm1fc3dhcHBpbmVzczsKKworI2lmZGVmIENPTkZJR19NTVUKKy8qIGxpbnV4L21tL3NobWVtLmMgKi8KK2V4dGVybiBpbnQgc2htZW1fdW51c2Uoc3dwX2VudHJ5X3QgZW50cnksIHN0cnVjdCBwYWdlICpwYWdlKTsKKyNlbmRpZiAvKiBDT05GSUdfTU1VICovCisKK2V4dGVybiB2b2lkIHN3YXBfdW5wbHVnX2lvX2ZuKHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICosIHN0cnVjdCBwYWdlICopOworCisjaWZkZWYgQ09ORklHX1NXQVAKKy8qIGxpbnV4L21tL3BhZ2VfaW8uYyAqLworZXh0ZXJuIGludCBzd2FwX3JlYWRwYWdlKHN0cnVjdCBmaWxlICosIHN0cnVjdCBwYWdlICopOworZXh0ZXJuIGludCBzd2FwX3dyaXRlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpOworZXh0ZXJuIGludCByd19zd2FwX3BhZ2Vfc3luYyhpbnQsIHN3cF9lbnRyeV90LCBzdHJ1Y3QgcGFnZSAqKTsKKworLyogbGludXgvbW0vc3dhcF9zdGF0ZS5jICovCitleHRlcm4gc3RydWN0IGFkZHJlc3Nfc3BhY2Ugc3dhcHBlcl9zcGFjZTsKKyNkZWZpbmUgdG90YWxfc3dhcGNhY2hlX3BhZ2VzICBzd2FwcGVyX3NwYWNlLm5ycGFnZXMKK2V4dGVybiB2b2lkIHNob3dfc3dhcF9jYWNoZV9pbmZvKHZvaWQpOworZXh0ZXJuIGludCBhZGRfdG9fc3dhcChzdHJ1Y3QgcGFnZSAqKTsKK2V4dGVybiB2b2lkIF9fZGVsZXRlX2Zyb21fc3dhcF9jYWNoZShzdHJ1Y3QgcGFnZSAqKTsKK2V4dGVybiB2b2lkIGRlbGV0ZV9mcm9tX3N3YXBfY2FjaGUoc3RydWN0IHBhZ2UgKik7CitleHRlcm4gaW50IG1vdmVfdG9fc3dhcF9jYWNoZShzdHJ1Y3QgcGFnZSAqLCBzd3BfZW50cnlfdCk7CitleHRlcm4gaW50IG1vdmVfZnJvbV9zd2FwX2NhY2hlKHN0cnVjdCBwYWdlICosIHVuc2lnbmVkIGxvbmcsCisJCXN0cnVjdCBhZGRyZXNzX3NwYWNlICopOworZXh0ZXJuIHZvaWQgZnJlZV9wYWdlX2FuZF9zd2FwX2NhY2hlKHN0cnVjdCBwYWdlICopOworZXh0ZXJuIHZvaWQgZnJlZV9wYWdlc19hbmRfc3dhcF9jYWNoZShzdHJ1Y3QgcGFnZSAqKiwgaW50KTsKK2V4dGVybiBzdHJ1Y3QgcGFnZSAqIGxvb2t1cF9zd2FwX2NhY2hlKHN3cF9lbnRyeV90KTsKK2V4dGVybiBzdHJ1Y3QgcGFnZSAqIHJlYWRfc3dhcF9jYWNoZV9hc3luYyhzd3BfZW50cnlfdCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQkJCSAgIHVuc2lnbmVkIGxvbmcgYWRkcik7CisvKiBsaW51eC9tbS9zd2FwZmlsZS5jICovCitleHRlcm4gbG9uZyB0b3RhbF9zd2FwX3BhZ2VzOworZXh0ZXJuIHVuc2lnbmVkIGludCBucl9zd2FwZmlsZXM7CitleHRlcm4gc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3Qgc3dhcF9pbmZvW107CitleHRlcm4gdm9pZCBzaV9zd2FwaW5mbyhzdHJ1Y3Qgc3lzaW5mbyAqKTsKK2V4dGVybiBzd3BfZW50cnlfdCBnZXRfc3dhcF9wYWdlKHZvaWQpOworZXh0ZXJuIGludCBzd2FwX2R1cGxpY2F0ZShzd3BfZW50cnlfdCk7CitleHRlcm4gaW50IHZhbGlkX3N3YXBoYW5kbGVzKHN3cF9lbnRyeV90LCB1bnNpZ25lZCBsb25nICopOworZXh0ZXJuIHZvaWQgc3dhcF9mcmVlKHN3cF9lbnRyeV90KTsKK2V4dGVybiB2b2lkIGZyZWVfc3dhcF9hbmRfY2FjaGUoc3dwX2VudHJ5X3QpOworZXh0ZXJuIHNlY3Rvcl90IG1hcF9zd2FwX3BhZ2Uoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKiwgcGdvZmZfdCk7CitleHRlcm4gc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKmdldF9zd2FwX2luZm9fc3RydWN0KHVuc2lnbmVkKTsKK2V4dGVybiBpbnQgY2FuX3NoYXJlX3N3YXBfcGFnZShzdHJ1Y3QgcGFnZSAqKTsKK2V4dGVybiBpbnQgcmVtb3ZlX2V4Y2x1c2l2ZV9zd2FwX3BhZ2Uoc3RydWN0IHBhZ2UgKik7CitzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbzsKKworZXh0ZXJuIHN0cnVjdCBzd2FwX2xpc3RfdCBzd2FwX2xpc3Q7CitleHRlcm4gc3BpbmxvY2tfdCBzd2FwbG9jazsKKworI2RlZmluZSBzd2FwX2xpc3RfbG9jaygpCXNwaW5fbG9jaygmc3dhcGxvY2spCisjZGVmaW5lIHN3YXBfbGlzdF91bmxvY2soKQlzcGluX3VubG9jaygmc3dhcGxvY2spCisjZGVmaW5lIHN3YXBfZGV2aWNlX2xvY2socCkJc3Bpbl9sb2NrKCZwLT5zZGV2X2xvY2spCisjZGVmaW5lIHN3YXBfZGV2aWNlX3VubG9jayhwKQlzcGluX3VubG9jaygmcC0+c2Rldl9sb2NrKQorCisvKiBsaW51eC9tbS90aHJhc2guYyAqLworZXh0ZXJuIHN0cnVjdCBtbV9zdHJ1Y3QgKiBzd2FwX3Rva2VuX21tOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3dhcF90b2tlbl9kZWZhdWx0X3RpbWVvdXQ7CitleHRlcm4gdm9pZCBncmFiX3N3YXBfdG9rZW4odm9pZCk7CitleHRlcm4gdm9pZCBfX3B1dF9zd2FwX3Rva2VuKHN0cnVjdCBtbV9zdHJ1Y3QgKik7CisKK3N0YXRpYyBpbmxpbmUgaW50IGhhc19zd2FwX3Rva2VuKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCXJldHVybiAobW0gPT0gc3dhcF90b2tlbl9tbSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdXRfc3dhcF90b2tlbihzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlpZiAoaGFzX3N3YXBfdG9rZW4obW0pKQorCQlfX3B1dF9zd2FwX3Rva2VuKG1tKTsKK30KKworI2Vsc2UgLyogQ09ORklHX1NXQVAgKi8KKworI2RlZmluZSB0b3RhbF9zd2FwX3BhZ2VzCQkJMAorI2RlZmluZSB0b3RhbF9zd2FwY2FjaGVfcGFnZXMJCQkwVUwKKworI2RlZmluZSBzaV9zd2FwaW5mbyh2YWwpIFwKKwlkbyB7ICh2YWwpLT5mcmVlc3dhcCA9ICh2YWwpLT50b3RhbHN3YXAgPSAwOyB9IHdoaWxlICgwKQorI2RlZmluZSBmcmVlX3BhZ2VfYW5kX3N3YXBfY2FjaGUocGFnZSkgXAorCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKQorI2RlZmluZSBmcmVlX3BhZ2VzX2FuZF9zd2FwX2NhY2hlKHBhZ2VzLCBucikgXAorCXJlbGVhc2VfcGFnZXMoKHBhZ2VzKSwgKG5yKSwgMCk7CisKKyNkZWZpbmUgc2hvd19zd2FwX2NhY2hlX2luZm8oKQkJCS8qTk9USElORyovCisjZGVmaW5lIGZyZWVfc3dhcF9hbmRfY2FjaGUoc3dwKQkJLypOT1RISU5HKi8KKyNkZWZpbmUgc3dhcF9kdXBsaWNhdGUoc3dwKQkJCS8qTk9USElORyovCisjZGVmaW5lIHN3YXBfZnJlZShzd3ApCQkJCS8qTk9USElORyovCisjZGVmaW5lIHJlYWRfc3dhcF9jYWNoZV9hc3luYyhzd3Asdm1hLGFkZHIpCU5VTEwKKyNkZWZpbmUgbG9va3VwX3N3YXBfY2FjaGUoc3dwKQkJCU5VTEwKKyNkZWZpbmUgdmFsaWRfc3dhcGhhbmRsZXMoc3dwLCBvZmYpCQkwCisjZGVmaW5lIGNhbl9zaGFyZV9zd2FwX3BhZ2UocCkJCQkwCisjZGVmaW5lIG1vdmVfdG9fc3dhcF9jYWNoZShwLCBzd3ApCQkxCisjZGVmaW5lIG1vdmVfZnJvbV9zd2FwX2NhY2hlKHAsIGksIG0pCQkxCisjZGVmaW5lIF9fZGVsZXRlX2Zyb21fc3dhcF9jYWNoZShwKQkJLypOT1RISU5HKi8KKyNkZWZpbmUgZGVsZXRlX2Zyb21fc3dhcF9jYWNoZShwKQkJLypOT1RISU5HKi8KKyNkZWZpbmUgc3dhcF90b2tlbl9kZWZhdWx0X3RpbWVvdXQJCTAKKworc3RhdGljIGlubGluZSBpbnQgcmVtb3ZlX2V4Y2x1c2l2ZV9zd2FwX3BhZ2Uoc3RydWN0IHBhZ2UgKnApCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3dwX2VudHJ5X3QgZ2V0X3N3YXBfcGFnZSh2b2lkKQoreworCXN3cF9lbnRyeV90IGVudHJ5OworCWVudHJ5LnZhbCA9IDA7CisJcmV0dXJuIGVudHJ5OworfQorCisvKiBsaW51eC9tbS90aHJhc2guYyAqLworI2RlZmluZSBwdXRfc3dhcF90b2tlbih4KSBkbyB7IH0gd2hpbGUoMCkKKyNkZWZpbmUgZ3JhYl9zd2FwX3Rva2VuKCkgIGRvIHsgfSB3aGlsZSgwKQorI2RlZmluZSBoYXNfc3dhcF90b2tlbih4KSAwCisKKyNlbmRpZiAvKiBDT05GSUdfU1dBUCAqLworI2VuZGlmIC8qIF9fS0VSTkVMX18qLworI2VuZGlmIC8qIF9MSU5VWF9TV0FQX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcG9wcy5oIGIvaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRjN2RiMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvc3dhcG9wcy5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBzd2FwY2FjaGUgcGFnZXMgYXJlIHN0b3JlZCBpbiB0aGUgc3dhcHBlcl9zcGFjZSByYWRpeCB0cmVlLiAgV2Ugd2FudCB0bworICogZ2V0IGdvb2QgcGFja2luZyBkZW5zaXR5IGluIHRoYXQgdHJlZSwgc28gdGhlIGluZGV4IHNob3VsZCBiZSBkZW5zZSBpbgorICogdGhlIGxvdy1vcmRlciBiaXRzLgorICoKKyAqIFdlIGFycmFuZ2UgdGhlIGB0eXBlJyBhbmQgYG9mZnNldCcgZmllbGRzIHNvIHRoYXQgYHR5cGUnIGlzIGF0IHRoZSBmaXZlCisgKiBoaWdoLW9yZGVyIGJpdHMgb2YgdGhlIHNtcF9lbnRyeV90IGFuZCBgb2Zmc2V0JyBpcyByaWdodC1hbGlnbmVkIGluIHRoZQorICogcmVtYWluaW5nIGJpdHMuCisgKgorICogc3dwX2VudHJ5X3QncyBhcmUgKm5ldmVyKiBzdG9yZWQgYW55d2hlcmUgaW4gdGhlaXIgYXJjaC1kZXBlbmRlbnQgZm9ybWF0LgorICovCisjZGVmaW5lIFNXUF9UWVBFX1NISUZUKGUpCShzaXplb2YoZS52YWwpICogOCAtIE1BWF9TV0FQRklMRVNfU0hJRlQpCisjZGVmaW5lIFNXUF9PRkZTRVRfTUFTSyhlKQkoKDFVTCA8PCBTV1BfVFlQRV9TSElGVChlKSkgLSAxKQorCisvKgorICogU3RvcmUgYSB0eXBlK29mZnNldCBpbnRvIGEgc3dwX2VudHJ5X3QgaW4gYW4gYXJjaC1pbmRlcGVuZGVudCBmb3JtYXQKKyAqLworc3RhdGljIGlubGluZSBzd3BfZW50cnlfdCBzd3BfZW50cnkodW5zaWduZWQgbG9uZyB0eXBlLCBwZ29mZl90IG9mZnNldCkKK3sKKwlzd3BfZW50cnlfdCByZXQ7CisKKwlyZXQudmFsID0gKHR5cGUgPDwgU1dQX1RZUEVfU0hJRlQocmV0KSkgfAorCQkJKG9mZnNldCAmIFNXUF9PRkZTRVRfTUFTSyhyZXQpKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRXh0cmFjdCB0aGUgYHR5cGUnIGZpZWxkIGZyb20gYSBzd3BfZW50cnlfdC4gIFRoZSBzd3BfZW50cnlfdCBpcyBpbgorICogYXJjaC1pbmRlcGVuZGVudCBmb3JtYXQKKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBzd3BfdHlwZShzd3BfZW50cnlfdCBlbnRyeSkKK3sKKwlyZXR1cm4gKGVudHJ5LnZhbCA+PiBTV1BfVFlQRV9TSElGVChlbnRyeSkpOworfQorCisvKgorICogRXh0cmFjdCB0aGUgYG9mZnNldCcgZmllbGQgZnJvbSBhIHN3cF9lbnRyeV90LiAgVGhlIHN3cF9lbnRyeV90IGlzIGluCisgKiBhcmNoLWluZGVwZW5kZW50IGZvcm1hdAorICovCitzdGF0aWMgaW5saW5lIHBnb2ZmX3Qgc3dwX29mZnNldChzd3BfZW50cnlfdCBlbnRyeSkKK3sKKwlyZXR1cm4gZW50cnkudmFsICYgU1dQX09GRlNFVF9NQVNLKGVudHJ5KTsKK30KKworLyoKKyAqIENvbnZlcnQgdGhlIGFyY2gtZGVwZW5kZW50IHB0ZSByZXByZXNlbnRhdGlvbiBvZiBhIHN3cF9lbnRyeV90IGludG8gYW4KKyAqIGFyY2gtaW5kZXBlbmRlbnQgc3dwX2VudHJ5X3QuCisgKi8KK3N0YXRpYyBpbmxpbmUgc3dwX2VudHJ5X3QgcHRlX3RvX3N3cF9lbnRyeShwdGVfdCBwdGUpCit7CisJc3dwX2VudHJ5X3QgYXJjaF9lbnRyeTsKKworCUJVR19PTihwdGVfZmlsZShwdGUpKTsKKwlhcmNoX2VudHJ5ID0gX19wdGVfdG9fc3dwX2VudHJ5KHB0ZSk7CisJcmV0dXJuIHN3cF9lbnRyeShfX3N3cF90eXBlKGFyY2hfZW50cnkpLCBfX3N3cF9vZmZzZXQoYXJjaF9lbnRyeSkpOworfQorCisvKgorICogQ29udmVydCB0aGUgYXJjaC1pbmRlcGVuZGVudCByZXByZXNlbnRhdGlvbiBvZiBhIHN3cF9lbnRyeV90IGludG8gdGhlCisgKiBhcmNoLWRlcGVuZGVudCBwdGUgcmVwcmVzZW50YXRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgcHRlX3Qgc3dwX2VudHJ5X3RvX3B0ZShzd3BfZW50cnlfdCBlbnRyeSkKK3sKKwlzd3BfZW50cnlfdCBhcmNoX2VudHJ5OworCisJYXJjaF9lbnRyeSA9IF9fc3dwX2VudHJ5KHN3cF90eXBlKGVudHJ5KSwgc3dwX29mZnNldChlbnRyeSkpOworCUJVR19PTihwdGVfZmlsZShfX3N3cF9lbnRyeV90b19wdGUoYXJjaF9lbnRyeSkpKTsKKwlyZXR1cm4gX19zd3BfZW50cnlfdG9fcHRlKGFyY2hfZW50cnkpOworfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zeW5jbGluay5oIGIvaW5jbHVkZS9saW51eC9zeW5jbGluay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2M2JkMjkwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9zeW5jbGluay5oCkBAIC0wLDAgKzEsMjczIEBACisvKgorICogU3luY0xpbmsgTXVsdGlwcm90b2NvbCBTZXJpYWwgQWRhcHRlciBEcml2ZXIKKyAqCisgKiAkSWQ6IHN5bmNsaW5rLmgsdiAzLjYgMjAwMi8wMi8yMCAyMTo1ODoyMCBwYXVsa2YgRXhwICQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwMCBieSBNaWNyb2dhdGUgQ29ycG9yYXRpb24KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpbGUgaXMgcGVybWl0dGVkIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZSAoR1BMKQorICovCisKKyNpZm5kZWYgX1NZTkNMSU5LX0hfCisjZGVmaW5lIF9TWU5DTElOS19IXworI2RlZmluZSBTWU5DTElOS19IX1ZFUlNJT04gMy42CisKKyNkZWZpbmUgQk9PTEVBTiBpbnQKKyNkZWZpbmUgVFJVRSAxCisjZGVmaW5lIEZBTFNFIDAKKworI2RlZmluZSBCSVQwCTB4MDAwMQorI2RlZmluZSBCSVQxCTB4MDAwMgorI2RlZmluZSBCSVQyCTB4MDAwNAorI2RlZmluZSBCSVQzCTB4MDAwOAorI2RlZmluZSBCSVQ0CTB4MDAxMAorI2RlZmluZSBCSVQ1CTB4MDAyMAorI2RlZmluZSBCSVQ2CTB4MDA0MAorI2RlZmluZSBCSVQ3CTB4MDA4MAorI2RlZmluZSBCSVQ4CTB4MDEwMAorI2RlZmluZSBCSVQ5CTB4MDIwMAorI2RlZmluZSBCSVQxMAkweDA0MDAKKyNkZWZpbmUgQklUMTEJMHgwODAwCisjZGVmaW5lIEJJVDEyCTB4MTAwMAorI2RlZmluZSBCSVQxMwkweDIwMDAKKyNkZWZpbmUgQklUMTQJMHg0MDAwCisjZGVmaW5lIEJJVDE1CTB4ODAwMAorI2RlZmluZSBCSVQxNgkweDAwMDEwMDAwCisjZGVmaW5lIEJJVDE3CTB4MDAwMjAwMDAKKyNkZWZpbmUgQklUMTgJMHgwMDA0MDAwMAorI2RlZmluZSBCSVQxOQkweDAwMDgwMDAwCisjZGVmaW5lIEJJVDIwCTB4MDAxMDAwMDAKKyNkZWZpbmUgQklUMjEJMHgwMDIwMDAwMAorI2RlZmluZSBCSVQyMgkweDAwNDAwMDAwCisjZGVmaW5lIEJJVDIzCTB4MDA4MDAwMDAKKyNkZWZpbmUgQklUMjQJMHgwMTAwMDAwMAorI2RlZmluZSBCSVQyNQkweDAyMDAwMDAwCisjZGVmaW5lIEJJVDI2CTB4MDQwMDAwMDAKKyNkZWZpbmUgQklUMjcJMHgwODAwMDAwMAorI2RlZmluZSBCSVQyOAkweDEwMDAwMDAwCisjZGVmaW5lIEJJVDI5CTB4MjAwMDAwMDAKKyNkZWZpbmUgQklUMzAJMHg0MDAwMDAwMAorI2RlZmluZSBCSVQzMQkweDgwMDAwMDAwCisKKworI2RlZmluZSBIRExDX01BWF9GUkFNRV9TSVpFCTY1NTM1CisjZGVmaW5lIE1BWF9BU1lOQ19UUkFOU01JVAk0MDk2CisjZGVmaW5lIE1BWF9BU1lOQ19CVUZGRVJfU0laRQk0MDk2CisKKyNkZWZpbmUgQVNZTkNfUEFSSVRZX05PTkUJCTAKKyNkZWZpbmUgQVNZTkNfUEFSSVRZX0VWRU4JCTEKKyNkZWZpbmUgQVNZTkNfUEFSSVRZX09ERAkJMgorI2RlZmluZSBBU1lOQ19QQVJJVFlfU1BBQ0UJCTMKKworI2RlZmluZSBIRExDX0ZMQUdfVU5ERVJSVU5fQUJPUlQ3CTB4MDAwMAorI2RlZmluZSBIRExDX0ZMQUdfVU5ERVJSVU5fQUJPUlQxNQkweDAwMDEKKyNkZWZpbmUgSERMQ19GTEFHX1VOREVSUlVOX0ZMQUcJCTB4MDAwMgorI2RlZmluZSBIRExDX0ZMQUdfVU5ERVJSVU5fQ1JDCQkweDAwMDQKKyNkZWZpbmUgSERMQ19GTEFHX1NIQVJFX1pFUk8JCTB4MDAxMAorI2RlZmluZSBIRExDX0ZMQUdfQVVUT19DVFMJCTB4MDAyMAorI2RlZmluZSBIRExDX0ZMQUdfQVVUT19EQ0QJCTB4MDA0MAorI2RlZmluZSBIRExDX0ZMQUdfQVVUT19SVFMJCTB4MDA4MAorI2RlZmluZSBIRExDX0ZMQUdfUlhDX0RQTEwJCTB4MDEwMAorI2RlZmluZSBIRExDX0ZMQUdfUlhDX0JSRwkJMHgwMjAwCisjZGVmaW5lIEhETENfRkxBR19SWENfVFhDUElOCQkweDgwMDAKKyNkZWZpbmUgSERMQ19GTEFHX1JYQ19SWENQSU4JCTB4MDAwMAorI2RlZmluZSBIRExDX0ZMQUdfVFhDX0RQTEwJCTB4MDQwMAorI2RlZmluZSBIRExDX0ZMQUdfVFhDX0JSRwkJMHgwODAwCisjZGVmaW5lIEhETENfRkxBR19UWENfVFhDUElOCQkweDAwMDAKKyNkZWZpbmUgSERMQ19GTEFHX1RYQ19SWENQSU4JCTB4MDAwOAorI2RlZmluZSBIRExDX0ZMQUdfRFBMTF9ESVY4CQkweDEwMDAKKyNkZWZpbmUgSERMQ19GTEFHX0RQTExfRElWMTYJCTB4MjAwMAorI2RlZmluZSBIRExDX0ZMQUdfRFBMTF9ESVYzMgkJMHgwMDAwCisjZGVmaW5lIEhETENfRkxBR19IRExDX0xPT1BNT0RFCQkweDQwMDAKKworI2RlZmluZSBIRExDX0NSQ19OT05FCQkJMAorI2RlZmluZSBIRExDX0NSQ18xNl9DQ0lUVAkJMQorI2RlZmluZSBIRExDX0NSQ18zMl9DQ0lUVAkJMgorI2RlZmluZSBIRExDX0NSQ19NQVNLCQkJMHgwMGZmCisjZGVmaW5lIEhETENfQ1JDX1JFVFVSTl9FWAkJMHg4MDAwCisKKyNkZWZpbmUgUlhfT0sJCQkJMAorI2RlZmluZSBSWF9DUkNfRVJST1IJCQkxCisKKyNkZWZpbmUgSERMQ19UWElETEVfRkxBR1MJCTAKKyNkZWZpbmUgSERMQ19UWElETEVfQUxUX1pFUk9TX09ORVMJMQorI2RlZmluZSBIRExDX1RYSURMRV9aRVJPUwkJMgorI2RlZmluZSBIRExDX1RYSURMRV9PTkVTCQkzCisjZGVmaW5lIEhETENfVFhJRExFX0FMVF9NQVJLX1NQQUNFCTQKKyNkZWZpbmUgSERMQ19UWElETEVfU1BBQ0UJCTUKKyNkZWZpbmUgSERMQ19UWElETEVfTUFSSwkJNgorCisjZGVmaW5lIEhETENfRU5DT0RJTkdfTlJaCQkJMAorI2RlZmluZSBIRExDX0VOQ09ESU5HX05SWkIJCQkxCisjZGVmaW5lIEhETENfRU5DT0RJTkdfTlJaSV9NQVJLCQkJMgorI2RlZmluZSBIRExDX0VOQ09ESU5HX05SWklfU1BBQ0UJCTMKKyNkZWZpbmUgSERMQ19FTkNPRElOR19OUlpJCQkJSERMQ19FTkNPRElOR19OUlpJX1NQQUNFCisjZGVmaW5lIEhETENfRU5DT0RJTkdfQklQSEFTRV9NQVJLCQk0CisjZGVmaW5lIEhETENfRU5DT0RJTkdfQklQSEFTRV9TUEFDRQkJNQorI2RlZmluZSBIRExDX0VOQ09ESU5HX0JJUEhBU0VfTEVWRUwJCTYKKyNkZWZpbmUgSERMQ19FTkNPRElOR19ESUZGX0JJUEhBU0VfTEVWRUwJNworCisjZGVmaW5lIEhETENfUFJFQU1CTEVfTEVOR1RIXzhCSVRTCTAKKyNkZWZpbmUgSERMQ19QUkVBTUJMRV9MRU5HVEhfMTZCSVRTCTEKKyNkZWZpbmUgSERMQ19QUkVBTUJMRV9MRU5HVEhfMzJCSVRTCTIKKyNkZWZpbmUgSERMQ19QUkVBTUJMRV9MRU5HVEhfNjRCSVRTCTMKKworI2RlZmluZSBIRExDX1BSRUFNQkxFX1BBVFRFUk5fTk9ORQkwCisjZGVmaW5lIEhETENfUFJFQU1CTEVfUEFUVEVSTl9aRVJPUwkxCisjZGVmaW5lIEhETENfUFJFQU1CTEVfUEFUVEVSTl9GTEFHUwkyCisjZGVmaW5lIEhETENfUFJFQU1CTEVfUEFUVEVSTl8xMAkzCisjZGVmaW5lIEhETENfUFJFQU1CTEVfUEFUVEVSTl8wMQk0CisjZGVmaW5lIEhETENfUFJFQU1CTEVfUEFUVEVSTl9PTkVTCTUKKworI2RlZmluZSBNR1NMX01PREVfQVNZTkMJCTEKKyNkZWZpbmUgTUdTTF9NT0RFX0hETEMJCTIKKyNkZWZpbmUgTUdTTF9NT0RFX1JBVwkJNgorCisjZGVmaW5lIE1HU0xfQlVTX1RZUEVfSVNBCTEKKyNkZWZpbmUgTUdTTF9CVVNfVFlQRV9FSVNBCTIKKyNkZWZpbmUgTUdTTF9CVVNfVFlQRV9QQ0kJNQorCisjZGVmaW5lIE1HU0xfSU5URVJGQUNFX0RJU0FCTEUgIDAKKyNkZWZpbmUgTUdTTF9JTlRFUkZBQ0VfUlMyMzIgICAgMQorI2RlZmluZSBNR1NMX0lOVEVSRkFDRV9WMzUgICAgICAyCisjZGVmaW5lIE1HU0xfSU5URVJGQUNFX1JTNDIyICAgIDMKKwordHlwZWRlZiBzdHJ1Y3QgX01HU0xfUEFSQU1TCit7CisJLyogQ29tbW9uICovCisKKwl1bnNpZ25lZCBsb25nCW1vZGU7CQkvKiBBc3luY2hyb25vdXMgb3IgSERMQyAqLworCXVuc2lnbmVkIGNoYXIJbG9vcGJhY2s7CS8qIGludGVybmFsIGxvb3BiYWNrIG1vZGUgKi8KKworCS8qIEhETEMgT25seSAqLworCisJdW5zaWduZWQgc2hvcnQJZmxhZ3M7CisJdW5zaWduZWQgY2hhcgllbmNvZGluZzsJLyogTlJaLCBOUlpJLCBldGMuICovCisJdW5zaWduZWQgbG9uZwljbG9ja19zcGVlZDsJLyogZXh0ZXJuYWwgY2xvY2sgc3BlZWQgaW4gYml0cyBwZXIgc2Vjb25kICovCisJdW5zaWduZWQgY2hhcglhZGRyX2ZpbHRlcjsJLyogcmVjZWl2ZSBIRExDIGFkZHJlc3MgZmlsdGVyLCAweEZGID0gZGlzYWJsZSAqLworCXVuc2lnbmVkIHNob3J0CWNyY190eXBlOwkvKiBOb25lLCBDUkMxNi1DQ0lUVCwgb3IgQ1JDMzItQ0NJVFQgKi8KKwl1bnNpZ25lZCBjaGFyCXByZWFtYmxlX2xlbmd0aDsKKwl1bnNpZ25lZCBjaGFyCXByZWFtYmxlOworCisJLyogQXN5bmMgT25seSAqLworCisJdW5zaWduZWQgbG9uZwlkYXRhX3JhdGU7CS8qIGJpdHMgcGVyIHNlY29uZCAqLworCXVuc2lnbmVkIGNoYXIJZGF0YV9iaXRzOwkvKiA3IG9yIDggZGF0YSBiaXRzICovCisJdW5zaWduZWQgY2hhcglzdG9wX2JpdHM7CS8qIDEgb3IgMiBzdG9wIGJpdHMgKi8KKwl1bnNpZ25lZCBjaGFyCXBhcml0eTsJCS8qIG5vbmUsIGV2ZW4sIG9yIG9kZCAqLworCit9IE1HU0xfUEFSQU1TLCAqUE1HU0xfUEFSQU1TOworCisjZGVmaW5lIE1JQ1JPR0FURV9WRU5ET1JfSUQgMHgxM2MwCisjZGVmaW5lIFNZTkNMSU5LX0RFVklDRV9JRCAweDAwMTAKKyNkZWZpbmUgTUdTQ0NfREVWSUNFX0lEIDB4MDAyMAorI2RlZmluZSBTWU5DTElOS19TQ0FfREVWSUNFX0lEIDB4MDAzMAorI2RlZmluZSBNR1NMX01BWF9TRVJJQUxfTlVNQkVSIDMwCisKKy8qCisqKiBkZXZpY2UgZGlhZ25vc3RpY3Mgc3RhdHVzCisqLworCisjZGVmaW5lIERpYWdTdGF0dXNfT0sJCQkJMAorI2RlZmluZSBEaWFnU3RhdHVzX0FkZHJlc3NGYWlsdXJlCQkxCisjZGVmaW5lIERpYWdTdGF0dXNfQWRkcmVzc0NvbmZsaWN0CQkyCisjZGVmaW5lIERpYWdTdGF0dXNfSXJxRmFpbHVyZQkJCTMKKyNkZWZpbmUgRGlhZ1N0YXR1c19JcnFDb25mbGljdAkJCTQKKyNkZWZpbmUgRGlhZ1N0YXR1c19EbWFGYWlsdXJlCQkJNQorI2RlZmluZSBEaWFnU3RhdHVzX0RtYUNvbmZsaWN0CQkJNgorI2RlZmluZSBEaWFnU3RhdHVzX1BjaUFkYXB0ZXJOb3RGb3VuZAkJNworI2RlZmluZSBEaWFnU3RhdHVzX0NhbnRBc3NpZ25QY2lSZXNvdXJjZXMJOAorI2RlZmluZSBEaWFnU3RhdHVzX0NhbnRBc3NpZ25QY2lNZW1BZGRyCQk5CisjZGVmaW5lIERpYWdTdGF0dXNfQ2FudEFzc2lnblBjaUlvQWRkcgkJMTAKKyNkZWZpbmUgRGlhZ1N0YXR1c19DYW50QXNzaWduUGNpSXJxCQkxMQorI2RlZmluZSBEaWFnU3RhdHVzX01lbW9yeUVycm9yCQkJMTIKKworI2RlZmluZSBTZXJpYWxTaWduYWxfRENEICAgICAgICAgICAgMHgwMSAgICAgLyogRGF0YSBDYXJyaWVyIERldGVjdCAqLworI2RlZmluZSBTZXJpYWxTaWduYWxfVFhEICAgICAgICAgICAgMHgwMiAgICAgLyogVHJhbnNtaXQgRGF0YSAqLworI2RlZmluZSBTZXJpYWxTaWduYWxfUkkgICAgICAgICAgICAgMHgwNCAgICAgLyogUmluZyBJbmRpY2F0b3IgKi8KKyNkZWZpbmUgU2VyaWFsU2lnbmFsX1JYRCAgICAgICAgICAgIDB4MDggICAgIC8qIFJlY2VpdmUgRGF0YSAqLworI2RlZmluZSBTZXJpYWxTaWduYWxfQ1RTICAgICAgICAgICAgMHgxMCAgICAgLyogQ2xlYXIgdG8gU2VuZCAqLworI2RlZmluZSBTZXJpYWxTaWduYWxfUlRTICAgICAgICAgICAgMHgyMCAgICAgLyogUmVxdWVzdCB0byBTZW5kICovCisjZGVmaW5lIFNlcmlhbFNpZ25hbF9EU1IgICAgICAgICAgICAweDQwICAgICAvKiBEYXRhIFNldCBSZWFkeSAqLworI2RlZmluZSBTZXJpYWxTaWduYWxfRFRSICAgICAgICAgICAgMHg4MCAgICAgLyogRGF0YSBUZXJtaW5hbCBSZWFkeSAqLworCisKKy8qCisgKiBDb3VudGVycyBvZiB0aGUgaW5wdXQgbGluZXMgKENUUywgRFNSLCBSSSwgQ0QpIGludGVycnVwdHMKKyAqLworc3RydWN0IG1nc2xfaWNvdW50IHsKKwlfX3UzMgljdHMsIGRzciwgcm5nLCBkY2QsIHR4LCByeDsKKwlfX3UzMglmcmFtZSwgcGFyaXR5LCBvdmVycnVuLCBicms7CisJX191MzIJYnVmX292ZXJydW47CisJX191MzIJdHhvazsKKwlfX3UzMgl0eHVuZGVyOworCV9fdTMyCXR4YWJvcnQ7CisJX191MzIJdHh0aW1lb3V0OworCV9fdTMyCXJ4c2hvcnQ7CisJX191MzIJcnhsb25nOworCV9fdTMyCXJ4YWJvcnQ7CisJX191MzIJcnhvdmVyOworCV9fdTMyCXJ4Y3JjOworCV9fdTMyCXJ4b2s7CisJX191MzIJZXhpdGh1bnQ7CisJX191MzIJcnhpZGxlOworfTsKKworCisjZGVmaW5lIERFQlVHX0xFVkVMX0RBVEEJMQorI2RlZmluZSBERUJVR19MRVZFTF9FUlJPUiAJMgorI2RlZmluZSBERUJVR19MRVZFTF9JTkZPICAJMworI2RlZmluZSBERUJVR19MRVZFTF9CSCAgICAJNAorI2RlZmluZSBERUJVR19MRVZFTF9JU1IJCTUKKworLyoKKyoqIEV2ZW50IGJpdCBmbGFncyBmb3IgdXNlIHdpdGggTWdzbFdhaXRFdmVudAorKi8KKworI2RlZmluZSBNZ3NsRXZlbnRfRHNyQWN0aXZlCTB4MDAwMQorI2RlZmluZSBNZ3NsRXZlbnRfRHNySW5hY3RpdmUJMHgwMDAyCisjZGVmaW5lIE1nc2xFdmVudF9Ec3IJCTB4MDAwMworI2RlZmluZSBNZ3NsRXZlbnRfQ3RzQWN0aXZlCTB4MDAwNAorI2RlZmluZSBNZ3NsRXZlbnRfQ3RzSW5hY3RpdmUJMHgwMDA4CisjZGVmaW5lIE1nc2xFdmVudF9DdHMJCTB4MDAwYworI2RlZmluZSBNZ3NsRXZlbnRfRGNkQWN0aXZlCTB4MDAxMAorI2RlZmluZSBNZ3NsRXZlbnRfRGNkSW5hY3RpdmUJMHgwMDIwCisjZGVmaW5lIE1nc2xFdmVudF9EY2QJCTB4MDAzMAorI2RlZmluZSBNZ3NsRXZlbnRfUmlBY3RpdmUJMHgwMDQwCisjZGVmaW5lIE1nc2xFdmVudF9SaUluYWN0aXZlCTB4MDA4MAorI2RlZmluZSBNZ3NsRXZlbnRfUmkJCTB4MDBjMAorI2RlZmluZSBNZ3NsRXZlbnRfRXhpdEh1bnRNb2RlCTB4MDEwMAorI2RlZmluZSBNZ3NsRXZlbnRfSWRsZVJlY2VpdmVkCTB4MDIwMAorCisvKiBQcml2YXRlIElPQ1RMIGNvZGVzOgorICoKKyAqIE1HU0xfSU9DU1BBUkFNUwlzZXQgTUdTTF9QQVJBTVMgc3RydWN0dXJlIHZhbHVlcworICogTUdTTF9JT0NHUEFSQU1TCWdldCBjdXJyZW50IE1HU0xfUEFSQU1TIHN0cnVjdHVyZSB2YWx1ZXMKKyAqIE1HU0xfSU9DU1RYSURMRQlzZXQgY3VycmVudCB0cmFuc21pdCBpZGxlIG1vZGUKKyAqIE1HU0xfSU9DR1RYSURMRQlnZXQgY3VycmVudCB0cmFuc21pdCBpZGxlIG1vZGUKKyAqIE1HU0xfSU9DVFhFTkFCTEUJZW5hYmxlIG9yIGRpc2FibGUgdHJhbnNtaXR0ZXIKKyAqIE1HU0xfSU9DUlhFTkFCTEUJZW5hYmxlIG9yIGRpc2FibGUgcmVjZWl2ZXIKKyAqIE1HU0xfSU9DVFhBQk9SVAlhYm9ydCB0cmFuc21pdHRpbmcgZnJhbWUgKEhETEMpCisgKiBNR1NMX0lPQ0dTVEFUUwlyZXR1cm4gY3VycmVudCBzdGF0aXN0aWNzCisgKiBNR1NMX0lPQ1dBSVRFVkVOVAl3YWl0IGZvciBzcGVjaWZpZWQgZXZlbnQgdG8gb2NjdXIKKyAqIE1HU0xfTE9PUFRYRE9ORQl0cmFuc21pdCBpbiBIRExDIExvb3BNb2RlIGRvbmUKKyAqIE1HU0xfSU9DU0lGICAgICAgICAgIHNldCB0aGUgc2VyaWFsIGludGVyZmFjZSB0eXBlCisgKiBNR1NMX0lPQ0dJRiAgICAgICAgICBnZXQgdGhlIHNlcmlhbCBpbnRlcmZhY2UgdHlwZQorICovCisjZGVmaW5lIE1HU0xfTUFHSUNfSU9DCSdtJworI2RlZmluZSBNR1NMX0lPQ1NQQVJBTVMJCV9JT1coTUdTTF9NQUdJQ19JT0MsMCxzdHJ1Y3QgX01HU0xfUEFSQU1TKQorI2RlZmluZSBNR1NMX0lPQ0dQQVJBTVMJCV9JT1IoTUdTTF9NQUdJQ19JT0MsMSxzdHJ1Y3QgX01HU0xfUEFSQU1TKQorI2RlZmluZSBNR1NMX0lPQ1NUWElETEUJCV9JTyhNR1NMX01BR0lDX0lPQywyKQorI2RlZmluZSBNR1NMX0lPQ0dUWElETEUJCV9JTyhNR1NMX01BR0lDX0lPQywzKQorI2RlZmluZSBNR1NMX0lPQ1RYRU5BQkxFCV9JTyhNR1NMX01BR0lDX0lPQyw0KQorI2RlZmluZSBNR1NMX0lPQ1JYRU5BQkxFCV9JTyhNR1NMX01BR0lDX0lPQyw1KQorI2RlZmluZSBNR1NMX0lPQ1RYQUJPUlQJCV9JTyhNR1NMX01BR0lDX0lPQyw2KQorI2RlZmluZSBNR1NMX0lPQ0dTVEFUUwkJX0lPKE1HU0xfTUFHSUNfSU9DLDcpCisjZGVmaW5lIE1HU0xfSU9DV0FJVEVWRU5UCV9JT1dSKE1HU0xfTUFHSUNfSU9DLDgsaW50KQorI2RlZmluZSBNR1NMX0lPQ0NMUk1PRENPVU5UCV9JTyhNR1NMX01BR0lDX0lPQywxNSkKKyNkZWZpbmUgTUdTTF9JT0NMT09QVFhET05FCV9JTyhNR1NMX01BR0lDX0lPQyw5KQorI2RlZmluZSBNR1NMX0lPQ1NJRgkJX0lPKE1HU0xfTUFHSUNfSU9DLDEwKQorI2RlZmluZSBNR1NMX0lPQ0dJRgkJX0lPKE1HU0xfTUFHSUNfSU9DLDExKQorCisjZW5kaWYgLyogX1NZTkNMSU5LX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N5cy5oIGIvaW5jbHVkZS9saW51eC9zeXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWE2MDA4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9zeXMuaApAQCAtMCwwICsxLDI5IEBACisjaWZuZGVmIF9MSU5VWF9TWVNfSAorI2RlZmluZSBfTElOVVhfU1lTX0gKKworLyoKKyAqIFRoaXMgZmlsZSBpcyBubyBsb25nZXIgdXNlZCBvciBuZWVkZWQKKyAqLworCisvKgorICogVGhlc2UgYXJlIHN5c3RlbSBjYWxscyB0aGF0IHdpbGwgYmUgcmVtb3ZlZCBhdCBzb21lIHRpbWUKKyAqIGR1ZSB0byBuZXdlciB2ZXJzaW9ucyBleGlzdGluZy4uCisgKiAocGxlYXNlIGJlIGNhcmVmdWwgLSBpYmNzMiBtYXkgbmVlZCBzb21lIG9mIHRoZXNlKS4KKyAqLworI2lmZGVmIG5vdGRlZgorI2RlZmluZSBfc3lzX3dhaXRwaWQJX3N5c19vbGRfc3lzY2FsbAkvKiBfc3lzX3dhaXQ0ICovCisjZGVmaW5lIF9zeXNfb2xkdW5hbWUJX3N5c19vbGRfc3lzY2FsbAkvKiBfc3lzX25ld3VuYW1lICovCisjZGVmaW5lIF9zeXNfdW5hbWUJX3N5c19vbGRfc3lzY2FsbAkvKiBfc3lzX25ld3VuYW1lICovCisjZGVmaW5lIF9zeXNfc3RhdAlfc3lzX29sZF9zeXNjYWxsCS8qIF9zeXNfbmV3c3RhdCAqLworI2RlZmluZSBfc3lzX2ZzdGF0CV9zeXNfb2xkX3N5c2NhbGwJLyogX3N5c19uZXdmc3RhdCAqLworI2RlZmluZSBfc3lzX2xzdGF0CV9zeXNfb2xkX3N5c2NhbGwJLyogX3N5c19uZXdsc3RhdCAqLworI2RlZmluZSBfc3lzX3NpZ25hbAlfc3lzX29sZF9zeXNjYWxsCS8qIF9zeXNfc2lnYWN0aW9uICovCisjZGVmaW5lIF9zeXNfc2dldG1hc2sJX3N5c19vbGRfc3lzY2FsbAkvKiBfc3lzX3NpZ3Byb2NtYXNrICovCisjZGVmaW5lIF9zeXNfc3NldG1hc2sJX3N5c19vbGRfc3lzY2FsbAkvKiBfc3lzX3NpZ3Byb2NtYXNrICovCisjZW5kaWYKKworLyoKKyAqIFRoZXNlIGFyZSBzeXN0ZW0gY2FsbHMgdGhhdCBoYXZlbid0IGJlZW4gaW1wbGVtZW50ZWQgeWV0CisgKiBidXQgaGF2ZSBhbiBlbnRyeSBpbiB0aGUgdGFibGUgZm9yIGZ1dHVyZSBleHBhbnNpb24uLgorICovCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaCBiL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTdjZDliCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oCkBAIC0wLDAgKzEsNTA5IEBACisvKgorICogc3lzY2FsbHMuaCAtIExpbnV4IHN5c2NhbGwgaW50ZXJmYWNlcyAobm9uLWFyY2gtc3BlY2lmaWMpCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA0IFJhbmR5IER1bmxhcAorICogQ29weXJpZ2h0IChjKSAyMDA0IE9wZW4gU291cmNlIERldmVsb3BtZW50IExhYnMKKyAqCisgKiBUaGlzIGZpbGUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIEdQTHYyLgorICogU2VlIHRoZSBmaWxlIENPUFlJTkcgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9MSU5VWF9TWVNDQUxMU19ICisjZGVmaW5lIF9MSU5VWF9TWVNDQUxMU19ICisKK3N0cnVjdCBlcG9sbF9ldmVudDsKK3N0cnVjdCBpYXR0cjsKK3N0cnVjdCBpbm9kZTsKK3N0cnVjdCBpb2NiOworc3RydWN0IGlvX2V2ZW50Oworc3RydWN0IGlvdmVjOworc3RydWN0IGl0aW1lcnNwZWM7CitzdHJ1Y3QgaXRpbWVydmFsOworc3RydWN0IGtleGVjX3NlZ21lbnQ7CitzdHJ1Y3QgbGludXhfZGlyZW50Oworc3RydWN0IGxpbnV4X2RpcmVudDY0Oworc3RydWN0IGxpc3RfaGVhZDsKK3N0cnVjdCBtc2didWY7CitzdHJ1Y3QgbXNnaGRyOworc3RydWN0IG1zcWlkX2RzOworc3RydWN0IG5ld191dHNuYW1lOworc3RydWN0IG5mc2N0bF9hcmc7CitzdHJ1Y3QgX19vbGRfa2VybmVsX3N0YXQ7CitzdHJ1Y3QgcG9sbGZkOworc3RydWN0IHJsaW1pdDsKK3N0cnVjdCBydXNhZ2U7CitzdHJ1Y3Qgc2NoZWRfcGFyYW07CitzdHJ1Y3Qgc2VtYXBob3JlOworc3RydWN0IHNlbWJ1ZjsKK3N0cnVjdCBzaG1pZF9kczsKK3N0cnVjdCBzb2NrYWRkcjsKK3N0cnVjdCBzdGF0Oworc3RydWN0IHN0YXQ2NDsKK3N0cnVjdCBzdGF0ZnM7CitzdHJ1Y3Qgc3RhdGZzNjQ7CitzdHJ1Y3QgX19zeXNjdGxfYXJnczsKK3N0cnVjdCBzeXNpbmZvOworc3RydWN0IHRpbWVzcGVjOworc3RydWN0IHRpbWV2YWw7CitzdHJ1Y3QgdGltZXg7CitzdHJ1Y3QgdGltZXpvbmU7CitzdHJ1Y3QgdG1zOworc3RydWN0IHV0aW1idWY7CitzdHJ1Y3QgbXFfYXR0cjsKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvYWlvX2FiaS5oPgorI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc2VtLmg+CisjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGFzbS9zaWdpbmZvLmg+CisjaW5jbHVkZSA8YXNtL3NpZ25hbC5oPgorI2luY2x1ZGUgPGxpbnV4L3F1b3RhLmg+CisjaW5jbHVkZSA8bGludXgva2V5Lmg+CisKK2FzbWxpbmthZ2UgbG9uZyBzeXNfdGltZSh0aW1lX3QgX191c2VyICp0bG9jKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfc3RpbWUodGltZV90IF9fdXNlciAqdHB0cik7Cithc21saW5rYWdlIGxvbmcgc3lzX2dldHRpbWVvZmRheShzdHJ1Y3QgdGltZXZhbCBfX3VzZXIgKnR2LAorCQkJCXN0cnVjdCB0aW1lem9uZSBfX3VzZXIgKnR6KTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfc2V0dGltZW9mZGF5KHN0cnVjdCB0aW1ldmFsIF9fdXNlciAqdHYsCisJCQkJc3RydWN0IHRpbWV6b25lIF9fdXNlciAqdHopOworYXNtbGlua2FnZSBsb25nIHN5c19hZGp0aW1leChzdHJ1Y3QgdGltZXggX191c2VyICp0eGNfcCk7CisKK2FzbWxpbmthZ2UgbG9uZyBzeXNfdGltZXMoc3RydWN0IHRtcyBfX3VzZXIgKnRidWYpOworCithc21saW5rYWdlIGxvbmcgc3lzX2dldHRpZCh2b2lkKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfbmFub3NsZWVwKHN0cnVjdCB0aW1lc3BlYyBfX3VzZXIgKnJxdHAsIHN0cnVjdCB0aW1lc3BlYyBfX3VzZXIgKnJtdHApOworYXNtbGlua2FnZSB1bnNpZ25lZCBsb25nIHN5c19hbGFybSh1bnNpZ25lZCBpbnQgc2Vjb25kcyk7Cithc21saW5rYWdlIGxvbmcgc3lzX2dldHBpZCh2b2lkKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfZ2V0cHBpZCh2b2lkKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfZ2V0dWlkKHZvaWQpOworYXNtbGlua2FnZSBsb25nIHN5c19nZXRldWlkKHZvaWQpOworYXNtbGlua2FnZSBsb25nIHN5c19nZXRnaWQodm9pZCk7Cithc21saW5rYWdlIGxvbmcgc3lzX2dldGVnaWQodm9pZCk7Cithc21saW5rYWdlIGxvbmcgc3lzX2dldHJlc3VpZCh1aWRfdCBfX3VzZXIgKnJ1aWQsIHVpZF90IF9fdXNlciAqZXVpZCwgdWlkX3QgX191c2VyICpzdWlkKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfZ2V0cmVzZ2lkKGdpZF90IF9fdXNlciAqcmdpZCwgZ2lkX3QgX191c2VyICplZ2lkLCBnaWRfdCBfX3VzZXIgKnNnaWQpOworYXNtbGlua2FnZSBsb25nIHN5c19nZXRwZ2lkKHBpZF90IHBpZCk7Cithc21saW5rYWdlIGxvbmcgc3lzX2dldHBncnAodm9pZCk7Cithc21saW5rYWdlIGxvbmcgc3lzX2dldHNpZChwaWRfdCBwaWQpOworYXNtbGlua2FnZSBsb25nIHN5c19nZXRncm91cHMoaW50IGdpZHNldHNpemUsIGdpZF90IF9fdXNlciAqZ3JvdXBsaXN0KTsKKworYXNtbGlua2FnZSBsb25nIHN5c19zZXRyZWdpZChnaWRfdCByZ2lkLCBnaWRfdCBlZ2lkKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfc2V0Z2lkKGdpZF90IGdpZCk7Cithc21saW5rYWdlIGxvbmcgc3lzX3NldHJldWlkKHVpZF90IHJ1aWQsIHVpZF90IGV1aWQpOworYXNtbGlua2FnZSBsb25nIHN5c19zZXR1aWQodWlkX3QgdWlkKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfc2V0cmVzdWlkKHVpZF90IHJ1aWQsIHVpZF90IGV1aWQsIHVpZF90IHN1aWQpOworYXNtbGlua2FnZSBsb25nIHN5c19zZXRyZXNnaWQoZ2lkX3QgcmdpZCwgZ2lkX3QgZWdpZCwgZ2lkX3Qgc2dpZCk7Cithc21saW5rYWdlIGxvbmcgc3lzX3NldGZzdWlkKHVpZF90IHVpZCk7Cithc21saW5rYWdlIGxvbmcgc3lzX3NldGZzZ2lkKGdpZF90IGdpZCk7Cithc21saW5rYWdlIGxvbmcgc3lzX3NldHBnaWQocGlkX3QgcGlkLCBwaWRfdCBwZ2lkKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfc2V0c2lkKHZvaWQpOworYXNtbGlua2FnZSBsb25nIHN5c19zZXRncm91cHMoaW50IGdpZHNldHNpemUsIGdpZF90IF9fdXNlciAqZ3JvdXBsaXN0KTsKKworYXNtbGlua2FnZSBsb25nIHN5c19hY2N0KGNvbnN0IGNoYXIgX191c2VyICpuYW1lKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfY2FwZ2V0KGNhcF91c2VyX2hlYWRlcl90IGhlYWRlciwKKwkJCQljYXBfdXNlcl9kYXRhX3QgZGF0YXB0cik7Cithc21saW5rYWdlIGxvbmcgc3lzX2NhcHNldChjYXBfdXNlcl9oZWFkZXJfdCBoZWFkZXIsCisJCQkJY29uc3QgY2FwX3VzZXJfZGF0YV90IGRhdGEpOworYXNtbGlua2FnZSBsb25nIHN5c19wZXJzb25hbGl0eSh1X2xvbmcgcGVyc29uYWxpdHkpOworCithc21saW5rYWdlIGxvbmcgc3lzX3NpZ3BlbmRpbmcob2xkX3NpZ3NldF90IF9fdXNlciAqc2V0KTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfc2lncHJvY21hc2soaW50IGhvdywgb2xkX3NpZ3NldF90IF9fdXNlciAqc2V0LAorCQkJCW9sZF9zaWdzZXRfdCBfX3VzZXIgKm9zZXQpOworYXNtbGlua2FnZSBsb25nIHN5c19nZXRpdGltZXIoaW50IHdoaWNoLCBzdHJ1Y3QgaXRpbWVydmFsIF9fdXNlciAqdmFsdWUpOworYXNtbGlua2FnZSBsb25nIHN5c19zZXRpdGltZXIoaW50IHdoaWNoLAorCQkJCXN0cnVjdCBpdGltZXJ2YWwgX191c2VyICp2YWx1ZSwKKwkJCQlzdHJ1Y3QgaXRpbWVydmFsIF9fdXNlciAqb3ZhbHVlKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfdGltZXJfY3JlYXRlKGNsb2NraWRfdCB3aGljaF9jbG9jaywKKwkJCQkgc3RydWN0IHNpZ2V2ZW50IF9fdXNlciAqdGltZXJfZXZlbnRfc3BlYywKKwkJCQkgdGltZXJfdCBfX3VzZXIgKiBjcmVhdGVkX3RpbWVyX2lkKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfdGltZXJfZ2V0dGltZSh0aW1lcl90IHRpbWVyX2lkLAorCQkJCXN0cnVjdCBpdGltZXJzcGVjIF9fdXNlciAqc2V0dGluZyk7Cithc21saW5rYWdlIGxvbmcgc3lzX3RpbWVyX2dldG92ZXJydW4odGltZXJfdCB0aW1lcl9pZCk7Cithc21saW5rYWdlIGxvbmcgc3lzX3RpbWVyX3NldHRpbWUodGltZXJfdCB0aW1lcl9pZCwgaW50IGZsYWdzLAorCQkJCWNvbnN0IHN0cnVjdCBpdGltZXJzcGVjIF9fdXNlciAqbmV3X3NldHRpbmcsCisJCQkJc3RydWN0IGl0aW1lcnNwZWMgX191c2VyICpvbGRfc2V0dGluZyk7Cithc21saW5rYWdlIGxvbmcgc3lzX3RpbWVyX2RlbGV0ZSh0aW1lcl90IHRpbWVyX2lkKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfY2xvY2tfc2V0dGltZShjbG9ja2lkX3Qgd2hpY2hfY2xvY2ssCisJCQkJY29uc3Qgc3RydWN0IHRpbWVzcGVjIF9fdXNlciAqdHApOworYXNtbGlua2FnZSBsb25nIHN5c19jbG9ja19nZXR0aW1lKGNsb2NraWRfdCB3aGljaF9jbG9jaywKKwkJCQlzdHJ1Y3QgdGltZXNwZWMgX191c2VyICp0cCk7Cithc21saW5rYWdlIGxvbmcgc3lzX2Nsb2NrX2dldHJlcyhjbG9ja2lkX3Qgd2hpY2hfY2xvY2ssCisJCQkJc3RydWN0IHRpbWVzcGVjIF9fdXNlciAqdHApOworYXNtbGlua2FnZSBsb25nIHN5c19jbG9ja19uYW5vc2xlZXAoY2xvY2tpZF90IHdoaWNoX2Nsb2NrLCBpbnQgZmxhZ3MsCisJCQkJY29uc3Qgc3RydWN0IHRpbWVzcGVjIF9fdXNlciAqcnF0cCwKKwkJCQlzdHJ1Y3QgdGltZXNwZWMgX191c2VyICpybXRwKTsKKworYXNtbGlua2FnZSBsb25nIHN5c19uaWNlKGludCBpbmNyZW1lbnQpOworYXNtbGlua2FnZSBsb25nIHN5c19zY2hlZF9zZXRzY2hlZHVsZXIocGlkX3QgcGlkLCBpbnQgcG9saWN5LAorCQkJCQlzdHJ1Y3Qgc2NoZWRfcGFyYW0gX191c2VyICpwYXJhbSk7Cithc21saW5rYWdlIGxvbmcgc3lzX3NjaGVkX3NldHBhcmFtKHBpZF90IHBpZCwKKwkJCQkJc3RydWN0IHNjaGVkX3BhcmFtIF9fdXNlciAqcGFyYW0pOworYXNtbGlua2FnZSBsb25nIHN5c19zY2hlZF9nZXRzY2hlZHVsZXIocGlkX3QgcGlkKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfc2NoZWRfZ2V0cGFyYW0ocGlkX3QgcGlkLAorCQkJCQlzdHJ1Y3Qgc2NoZWRfcGFyYW0gX191c2VyICpwYXJhbSk7Cithc21saW5rYWdlIGxvbmcgc3lzX3NjaGVkX3NldGFmZmluaXR5KHBpZF90IHBpZCwgdW5zaWduZWQgaW50IGxlbiwKKwkJCQkJdW5zaWduZWQgbG9uZyBfX3VzZXIgKnVzZXJfbWFza19wdHIpOworYXNtbGlua2FnZSBsb25nIHN5c19zY2hlZF9nZXRhZmZpbml0eShwaWRfdCBwaWQsIHVuc2lnbmVkIGludCBsZW4sCisJCQkJCXVuc2lnbmVkIGxvbmcgX191c2VyICp1c2VyX21hc2tfcHRyKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfc2NoZWRfeWllbGQodm9pZCk7Cithc21saW5rYWdlIGxvbmcgc3lzX3NjaGVkX2dldF9wcmlvcml0eV9tYXgoaW50IHBvbGljeSk7Cithc21saW5rYWdlIGxvbmcgc3lzX3NjaGVkX2dldF9wcmlvcml0eV9taW4oaW50IHBvbGljeSk7Cithc21saW5rYWdlIGxvbmcgc3lzX3NjaGVkX3JyX2dldF9pbnRlcnZhbChwaWRfdCBwaWQsCisJCQkJCXN0cnVjdCB0aW1lc3BlYyBfX3VzZXIgKmludGVydmFsKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfc2V0cHJpb3JpdHkoaW50IHdoaWNoLCBpbnQgd2hvLCBpbnQgbmljZXZhbCk7Cithc21saW5rYWdlIGxvbmcgc3lzX2dldHByaW9yaXR5KGludCB3aGljaCwgaW50IHdobyk7CisKK2FzbWxpbmthZ2UgbG9uZyBzeXNfc2h1dGRvd24oaW50LCBpbnQpOworYXNtbGlua2FnZSBsb25nIHN5c19yZWJvb3QoaW50IG1hZ2ljMSwgaW50IG1hZ2ljMiwgdW5zaWduZWQgaW50IGNtZCwKKwkJCQl2b2lkIF9fdXNlciAqYXJnKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfcmVzdGFydF9zeXNjYWxsKHZvaWQpOworYXNtbGlua2FnZSBsb25nIHN5c19rZXhlY19sb2FkKHZvaWQgKmVudHJ5LCB1bnNpZ25lZCBsb25nIG5yX3NlZ21lbnRzLAorCQkJc3RydWN0IGtleGVjX3NlZ21lbnQgKnNlZ21lbnRzLCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKKworYXNtbGlua2FnZSBsb25nIHN5c19leGl0KGludCBlcnJvcl9jb2RlKTsKK2FzbWxpbmthZ2Ugdm9pZCBzeXNfZXhpdF9ncm91cChpbnQgZXJyb3JfY29kZSk7Cithc21saW5rYWdlIGxvbmcgc3lzX3dhaXQ0KHBpZF90IHBpZCwgaW50IF9fdXNlciAqc3RhdF9hZGRyLAorCQkJCWludCBvcHRpb25zLCBzdHJ1Y3QgcnVzYWdlIF9fdXNlciAqcnUpOworYXNtbGlua2FnZSBsb25nIHN5c193YWl0aWQoaW50IHdoaWNoLCBwaWRfdCBwaWQsCisJCQkgICBzdHJ1Y3Qgc2lnaW5mbyBfX3VzZXIgKmluZm9wLAorCQkJICAgaW50IG9wdGlvbnMsIHN0cnVjdCBydXNhZ2UgX191c2VyICpydSk7Cithc21saW5rYWdlIGxvbmcgc3lzX3dhaXRwaWQocGlkX3QgcGlkLCBpbnQgX191c2VyICpzdGF0X2FkZHIsIGludCBvcHRpb25zKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfc2V0X3RpZF9hZGRyZXNzKGludCBfX3VzZXIgKnRpZHB0cik7Cithc21saW5rYWdlIGxvbmcgc3lzX2Z1dGV4KHUzMiBfX3VzZXIgKnVhZGRyLCBpbnQgb3AsIGludCB2YWwsCisJCQlzdHJ1Y3QgdGltZXNwZWMgX191c2VyICp1dGltZSwgdTMyIF9fdXNlciAqdWFkZHIyLAorCQkJaW50IHZhbDMpOworCithc21saW5rYWdlIGxvbmcgc3lzX2luaXRfbW9kdWxlKHZvaWQgX191c2VyICp1bW9kLCB1bnNpZ25lZCBsb25nIGxlbiwKKwkJCQljb25zdCBjaGFyIF9fdXNlciAqdWFyZ3MpOworYXNtbGlua2FnZSBsb25nIHN5c19kZWxldGVfbW9kdWxlKGNvbnN0IGNoYXIgX191c2VyICpuYW1lX3VzZXIsCisJCQkJdW5zaWduZWQgaW50IGZsYWdzKTsKKworYXNtbGlua2FnZSBsb25nIHN5c19ydF9zaWdwcm9jbWFzayhpbnQgaG93LCBzaWdzZXRfdCBfX3VzZXIgKnNldCwKKwkJCQlzaWdzZXRfdCBfX3VzZXIgKm9zZXQsIHNpemVfdCBzaWdzZXRzaXplKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfcnRfc2lncGVuZGluZyhzaWdzZXRfdCBfX3VzZXIgKnNldCwgc2l6ZV90IHNpZ3NldHNpemUpOworYXNtbGlua2FnZSBsb25nIHN5c19ydF9zaWd0aW1lZHdhaXQoY29uc3Qgc2lnc2V0X3QgX191c2VyICp1dGhlc2UsCisJCQkJc2lnaW5mb190IF9fdXNlciAqdWluZm8sCisJCQkJY29uc3Qgc3RydWN0IHRpbWVzcGVjIF9fdXNlciAqdXRzLAorCQkJCXNpemVfdCBzaWdzZXRzaXplKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfa2lsbChpbnQgcGlkLCBpbnQgc2lnKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfdGdraWxsKGludCB0Z2lkLCBpbnQgcGlkLCBpbnQgc2lnKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfdGtpbGwoaW50IHBpZCwgaW50IHNpZyk7Cithc21saW5rYWdlIGxvbmcgc3lzX3J0X3NpZ3F1ZXVlaW5mbyhpbnQgcGlkLCBpbnQgc2lnLCBzaWdpbmZvX3QgX191c2VyICp1aW5mbyk7Cithc21saW5rYWdlIGxvbmcgc3lzX3NnZXRtYXNrKHZvaWQpOworYXNtbGlua2FnZSBsb25nIHN5c19zc2V0bWFzayhpbnQgbmV3bWFzayk7Cithc21saW5rYWdlIHVuc2lnbmVkIGxvbmcgc3lzX3NpZ25hbChpbnQgc2lnLCBfX3NpZ2hhbmRsZXJfdCBoYW5kbGVyKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfcGF1c2Uodm9pZCk7CisKK2FzbWxpbmthZ2UgbG9uZyBzeXNfc3luYyh2b2lkKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfZnN5bmModW5zaWduZWQgaW50IGZkKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfZmRhdGFzeW5jKHVuc2lnbmVkIGludCBmZCk7Cithc21saW5rYWdlIGxvbmcgc3lzX2JkZmx1c2goaW50IGZ1bmMsIGxvbmcgZGF0YSk7Cithc21saW5rYWdlIGxvbmcgc3lzX21vdW50KGNoYXIgX191c2VyICpkZXZfbmFtZSwgY2hhciBfX3VzZXIgKmRpcl9uYW1lLAorCQkJCWNoYXIgX191c2VyICp0eXBlLCB1bnNpZ25lZCBsb25nIGZsYWdzLAorCQkJCXZvaWQgX191c2VyICpkYXRhKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfdW1vdW50KGNoYXIgX191c2VyICpuYW1lLCBpbnQgZmxhZ3MpOworYXNtbGlua2FnZSBsb25nIHN5c19vbGR1bW91bnQoY2hhciBfX3VzZXIgKm5hbWUpOworYXNtbGlua2FnZSBsb25nIHN5c190cnVuY2F0ZShjb25zdCBjaGFyIF9fdXNlciAqcGF0aCwKKwkJCQl1bnNpZ25lZCBsb25nIGxlbmd0aCk7Cithc21saW5rYWdlIGxvbmcgc3lzX2Z0cnVuY2F0ZSh1bnNpZ25lZCBpbnQgZmQsIHVuc2lnbmVkIGxvbmcgbGVuZ3RoKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfc3RhdChjaGFyIF9fdXNlciAqZmlsZW5hbWUsCisJCQlzdHJ1Y3QgX19vbGRfa2VybmVsX3N0YXQgX191c2VyICpzdGF0YnVmKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfc3RhdGZzKGNvbnN0IGNoYXIgX191c2VyICogcGF0aCwKKwkJCQlzdHJ1Y3Qgc3RhdGZzIF9fdXNlciAqYnVmKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfc3RhdGZzNjQoY29uc3QgY2hhciBfX3VzZXIgKnBhdGgsIHNpemVfdCBzeiwKKwkJCQlzdHJ1Y3Qgc3RhdGZzNjQgX191c2VyICpidWYpOworYXNtbGlua2FnZSBsb25nIHN5c19mc3RhdGZzKHVuc2lnbmVkIGludCBmZCwgc3RydWN0IHN0YXRmcyBfX3VzZXIgKmJ1Zik7Cithc21saW5rYWdlIGxvbmcgc3lzX2ZzdGF0ZnM2NCh1bnNpZ25lZCBpbnQgZmQsIHNpemVfdCBzeiwKKwkJCQlzdHJ1Y3Qgc3RhdGZzNjQgX191c2VyICpidWYpOworYXNtbGlua2FnZSBsb25nIHN5c19sc3RhdChjaGFyIF9fdXNlciAqZmlsZW5hbWUsCisJCQlzdHJ1Y3QgX19vbGRfa2VybmVsX3N0YXQgX191c2VyICpzdGF0YnVmKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfZnN0YXQodW5zaWduZWQgaW50IGZkLAorCQkJc3RydWN0IF9fb2xkX2tlcm5lbF9zdGF0IF9fdXNlciAqc3RhdGJ1Zik7Cithc21saW5rYWdlIGxvbmcgc3lzX25ld3N0YXQoY2hhciBfX3VzZXIgKmZpbGVuYW1lLAorCQkJCXN0cnVjdCBzdGF0IF9fdXNlciAqc3RhdGJ1Zik7Cithc21saW5rYWdlIGxvbmcgc3lzX25ld2xzdGF0KGNoYXIgX191c2VyICpmaWxlbmFtZSwKKwkJCQlzdHJ1Y3Qgc3RhdCBfX3VzZXIgKnN0YXRidWYpOworYXNtbGlua2FnZSBsb25nIHN5c19uZXdmc3RhdCh1bnNpZ25lZCBpbnQgZmQsIHN0cnVjdCBzdGF0IF9fdXNlciAqc3RhdGJ1Zik7Cithc21saW5rYWdlIGxvbmcgc3lzX3VzdGF0KHVuc2lnbmVkIGRldiwgc3RydWN0IHVzdGF0IF9fdXNlciAqdWJ1Zik7CisjaWYgQklUU19QRVJfTE9ORyA9PSAzMgorYXNtbGlua2FnZSBsb25nIHN5c19zdGF0NjQoY2hhciBfX3VzZXIgKmZpbGVuYW1lLAorCQkJCXN0cnVjdCBzdGF0NjQgX191c2VyICpzdGF0YnVmKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfZnN0YXQ2NCh1bnNpZ25lZCBsb25nIGZkLCBzdHJ1Y3Qgc3RhdDY0IF9fdXNlciAqc3RhdGJ1Zik7Cithc21saW5rYWdlIGxvbmcgc3lzX2xzdGF0NjQoY2hhciBfX3VzZXIgKmZpbGVuYW1lLAorCQkJCXN0cnVjdCBzdGF0NjQgX191c2VyICpzdGF0YnVmKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfdHJ1bmNhdGU2NChjb25zdCBjaGFyIF9fdXNlciAqcGF0aCwgbG9mZl90IGxlbmd0aCk7Cithc21saW5rYWdlIGxvbmcgc3lzX2Z0cnVuY2F0ZTY0KHVuc2lnbmVkIGludCBmZCwgbG9mZl90IGxlbmd0aCk7CisjZW5kaWYKKworYXNtbGlua2FnZSBsb25nIHN5c19zZXR4YXR0cihjaGFyIF9fdXNlciAqcGF0aCwgY2hhciBfX3VzZXIgKm5hbWUsCisJCQkJdm9pZCBfX3VzZXIgKnZhbHVlLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfbHNldHhhdHRyKGNoYXIgX191c2VyICpwYXRoLCBjaGFyIF9fdXNlciAqbmFtZSwKKwkJCQl2b2lkIF9fdXNlciAqdmFsdWUsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpOworYXNtbGlua2FnZSBsb25nIHN5c19mc2V0eGF0dHIoaW50IGZkLCBjaGFyIF9fdXNlciAqbmFtZSwgdm9pZCBfX3VzZXIgKnZhbHVlLAorCQkJCXNpemVfdCBzaXplLCBpbnQgZmxhZ3MpOworYXNtbGlua2FnZSBzc2l6ZV90IHN5c19nZXR4YXR0cihjaGFyIF9fdXNlciAqcGF0aCwgY2hhciBfX3VzZXIgKm5hbWUsCisJCQkJdm9pZCBfX3VzZXIgKnZhbHVlLCBzaXplX3Qgc2l6ZSk7Cithc21saW5rYWdlIHNzaXplX3Qgc3lzX2xnZXR4YXR0cihjaGFyIF9fdXNlciAqcGF0aCwgY2hhciBfX3VzZXIgKm5hbWUsCisJCQkJdm9pZCBfX3VzZXIgKnZhbHVlLCBzaXplX3Qgc2l6ZSk7Cithc21saW5rYWdlIHNzaXplX3Qgc3lzX2ZnZXR4YXR0cihpbnQgZmQsIGNoYXIgX191c2VyICpuYW1lLAorCQkJCXZvaWQgX191c2VyICp2YWx1ZSwgc2l6ZV90IHNpemUpOworYXNtbGlua2FnZSBzc2l6ZV90IHN5c19saXN0eGF0dHIoY2hhciBfX3VzZXIgKnBhdGgsIGNoYXIgX191c2VyICpsaXN0LAorCQkJCXNpemVfdCBzaXplKTsKK2FzbWxpbmthZ2Ugc3NpemVfdCBzeXNfbGxpc3R4YXR0cihjaGFyIF9fdXNlciAqcGF0aCwgY2hhciBfX3VzZXIgKmxpc3QsCisJCQkJc2l6ZV90IHNpemUpOworYXNtbGlua2FnZSBzc2l6ZV90IHN5c19mbGlzdHhhdHRyKGludCBmZCwgY2hhciBfX3VzZXIgKmxpc3QsIHNpemVfdCBzaXplKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfcmVtb3ZleGF0dHIoY2hhciBfX3VzZXIgKnBhdGgsIGNoYXIgX191c2VyICpuYW1lKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfbHJlbW92ZXhhdHRyKGNoYXIgX191c2VyICpwYXRoLCBjaGFyIF9fdXNlciAqbmFtZSk7Cithc21saW5rYWdlIGxvbmcgc3lzX2ZyZW1vdmV4YXR0cihpbnQgZmQsIGNoYXIgX191c2VyICpuYW1lKTsKKworYXNtbGlua2FnZSB1bnNpZ25lZCBsb25nIHN5c19icmsodW5zaWduZWQgbG9uZyBicmspOworYXNtbGlua2FnZSBsb25nIHN5c19tcHJvdGVjdCh1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3QgbGVuLAorCQkJCXVuc2lnbmVkIGxvbmcgcHJvdCk7Cithc21saW5rYWdlIHVuc2lnbmVkIGxvbmcgc3lzX21yZW1hcCh1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkJdW5zaWduZWQgbG9uZyBvbGRfbGVuLCB1bnNpZ25lZCBsb25nIG5ld19sZW4sCisJCQkJdW5zaWduZWQgbG9uZyBmbGFncywgdW5zaWduZWQgbG9uZyBuZXdfYWRkcik7Cithc21saW5rYWdlIGxvbmcgc3lzX3JlbWFwX2ZpbGVfcGFnZXModW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJdW5zaWduZWQgbG9uZyBwcm90LCB1bnNpZ25lZCBsb25nIHBnb2ZmLAorCQkJdW5zaWduZWQgbG9uZyBmbGFncyk7Cithc21saW5rYWdlIGxvbmcgc3lzX21zeW5jKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW4sIGludCBmbGFncyk7Cithc21saW5rYWdlIGxvbmcgc3lzX2ZhZHZpc2U2NChpbnQgZmQsIGxvZmZfdCBvZmZzZXQsIHNpemVfdCBsZW4sIGludCBhZHZpY2UpOworYXNtbGlua2FnZSBsb25nIHN5c19mYWR2aXNlNjRfNjQoaW50IGZkLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuLCBpbnQgYWR2aWNlKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfbXVubWFwKHVuc2lnbmVkIGxvbmcgYWRkciwgc2l6ZV90IGxlbik7Cithc21saW5rYWdlIGxvbmcgc3lzX21sb2NrKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW4pOworYXNtbGlua2FnZSBsb25nIHN5c19tdW5sb2NrKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW4pOworYXNtbGlua2FnZSBsb25nIHN5c19tbG9ja2FsbChpbnQgZmxhZ3MpOworYXNtbGlua2FnZSBsb25nIHN5c19tdW5sb2NrYWxsKHZvaWQpOworYXNtbGlua2FnZSBsb25nIHN5c19tYWR2aXNlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW4sIGludCBiZWhhdmlvcik7Cithc21saW5rYWdlIGxvbmcgc3lzX21pbmNvcmUodW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbiwKKwkJCQl1bnNpZ25lZCBjaGFyIF9fdXNlciAqIHZlYyk7CisKK2FzbWxpbmthZ2UgbG9uZyBzeXNfcGl2b3Rfcm9vdChjb25zdCBjaGFyIF9fdXNlciAqbmV3X3Jvb3QsCisJCQkJY29uc3QgY2hhciBfX3VzZXIgKnB1dF9vbGQpOworYXNtbGlua2FnZSBsb25nIHN5c19jaHJvb3QoY29uc3QgY2hhciBfX3VzZXIgKmZpbGVuYW1lKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfbWtub2QoY29uc3QgY2hhciBfX3VzZXIgKmZpbGVuYW1lLCBpbnQgbW9kZSwKKwkJCQl1bnNpZ25lZCBkZXYpOworYXNtbGlua2FnZSBsb25nIHN5c19saW5rKGNvbnN0IGNoYXIgX191c2VyICpvbGRuYW1lLAorCQkJCWNvbnN0IGNoYXIgX191c2VyICpuZXduYW1lKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfc3ltbGluayhjb25zdCBjaGFyIF9fdXNlciAqb2xkLCBjb25zdCBjaGFyIF9fdXNlciAqbmV3KTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfdW5saW5rKGNvbnN0IGNoYXIgX191c2VyICpwYXRobmFtZSk7Cithc21saW5rYWdlIGxvbmcgc3lzX3JlbmFtZShjb25zdCBjaGFyIF9fdXNlciAqb2xkbmFtZSwKKwkJCQljb25zdCBjaGFyIF9fdXNlciAqbmV3bmFtZSk7Cithc21saW5rYWdlIGxvbmcgc3lzX2NobW9kKGNvbnN0IGNoYXIgX191c2VyICpmaWxlbmFtZSwgbW9kZV90IG1vZGUpOworYXNtbGlua2FnZSBsb25nIHN5c19mY2htb2QodW5zaWduZWQgaW50IGZkLCBtb2RlX3QgbW9kZSk7CisKK2FzbWxpbmthZ2UgbG9uZyBzeXNfZmNudGwodW5zaWduZWQgaW50IGZkLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CisjaWYgQklUU19QRVJfTE9ORyA9PSAzMgorYXNtbGlua2FnZSBsb25nIHN5c19mY250bDY0KHVuc2lnbmVkIGludCBmZCwKKwkJCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CisjZW5kaWYKK2FzbWxpbmthZ2UgbG9uZyBzeXNfZHVwKHVuc2lnbmVkIGludCBmaWxkZXMpOworYXNtbGlua2FnZSBsb25nIHN5c19kdXAyKHVuc2lnbmVkIGludCBvbGRmZCwgdW5zaWduZWQgaW50IG5ld2ZkKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfaW9wZXJtKHVuc2lnbmVkIGxvbmcgZnJvbSwgdW5zaWduZWQgbG9uZyBudW0sIGludCBvbik7Cithc21saW5rYWdlIGxvbmcgc3lzX2lvY3RsKHVuc2lnbmVkIGludCBmZCwgdW5zaWduZWQgaW50IGNtZCwKKwkJCQl1bnNpZ25lZCBsb25nIGFyZyk7Cithc21saW5rYWdlIGxvbmcgc3lzX2Zsb2NrKHVuc2lnbmVkIGludCBmZCwgdW5zaWduZWQgaW50IGNtZCk7Cithc21saW5rYWdlIGxvbmcgc3lzX2lvX3NldHVwKHVuc2lnbmVkIG5yX3JlcXMsIGFpb19jb250ZXh0X3QgX191c2VyICpjdHgpOworYXNtbGlua2FnZSBsb25nIHN5c19pb19kZXN0cm95KGFpb19jb250ZXh0X3QgY3R4KTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfaW9fZ2V0ZXZlbnRzKGFpb19jb250ZXh0X3QgY3R4X2lkLAorCQkJCWxvbmcgbWluX25yLAorCQkJCWxvbmcgbnIsCisJCQkJc3RydWN0IGlvX2V2ZW50IF9fdXNlciAqZXZlbnRzLAorCQkJCXN0cnVjdCB0aW1lc3BlYyBfX3VzZXIgKnRpbWVvdXQpOworYXNtbGlua2FnZSBsb25nIHN5c19pb19zdWJtaXQoYWlvX2NvbnRleHRfdCwgbG9uZywKKwkJCQlzdHJ1Y3QgaW9jYiBfX3VzZXIgKiBfX3VzZXIgKik7Cithc21saW5rYWdlIGxvbmcgc3lzX2lvX2NhbmNlbChhaW9fY29udGV4dF90IGN0eF9pZCwgc3RydWN0IGlvY2IgX191c2VyICppb2NiLAorCQkJICAgICAgc3RydWN0IGlvX2V2ZW50IF9fdXNlciAqcmVzdWx0KTsKK2FzbWxpbmthZ2Ugc3NpemVfdCBzeXNfc2VuZGZpbGUoaW50IG91dF9mZCwgaW50IGluX2ZkLAorCQkJCW9mZl90IF9fdXNlciAqb2Zmc2V0LCBzaXplX3QgY291bnQpOworYXNtbGlua2FnZSBzc2l6ZV90IHN5c19zZW5kZmlsZTY0KGludCBvdXRfZmQsIGludCBpbl9mZCwKKwkJCQlsb2ZmX3QgX191c2VyICpvZmZzZXQsIHNpemVfdCBjb3VudCk7Cithc21saW5rYWdlIGxvbmcgc3lzX3JlYWRsaW5rKGNvbnN0IGNoYXIgX191c2VyICpwYXRoLAorCQkJCWNoYXIgX191c2VyICpidWYsIGludCBidWZzaXopOworYXNtbGlua2FnZSBsb25nIHN5c19jcmVhdChjb25zdCBjaGFyIF9fdXNlciAqcGF0aG5hbWUsIGludCBtb2RlKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfb3Blbihjb25zdCBjaGFyIF9fdXNlciAqZmlsZW5hbWUsCisJCQkJaW50IGZsYWdzLCBpbnQgbW9kZSk7Cithc21saW5rYWdlIGxvbmcgc3lzX2Nsb3NlKHVuc2lnbmVkIGludCBmZCk7Cithc21saW5rYWdlIGxvbmcgc3lzX2FjY2Vzcyhjb25zdCBjaGFyIF9fdXNlciAqZmlsZW5hbWUsIGludCBtb2RlKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfdmhhbmd1cCh2b2lkKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfY2hvd24oY29uc3QgY2hhciBfX3VzZXIgKmZpbGVuYW1lLAorCQkJCXVpZF90IHVzZXIsIGdpZF90IGdyb3VwKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfbGNob3duKGNvbnN0IGNoYXIgX191c2VyICpmaWxlbmFtZSwKKwkJCQl1aWRfdCB1c2VyLCBnaWRfdCBncm91cCk7Cithc21saW5rYWdlIGxvbmcgc3lzX2ZjaG93bih1bnNpZ25lZCBpbnQgZmQsIHVpZF90IHVzZXIsIGdpZF90IGdyb3VwKTsKKyNpZmRlZiBDT05GSUdfVUlEMTYKK2FzbWxpbmthZ2UgbG9uZyBzeXNfY2hvd24xNihjb25zdCBjaGFyIF9fdXNlciAqZmlsZW5hbWUsCisJCQkJb2xkX3VpZF90IHVzZXIsIG9sZF9naWRfdCBncm91cCk7Cithc21saW5rYWdlIGxvbmcgc3lzX2xjaG93bjE2KGNvbnN0IGNoYXIgX191c2VyICpmaWxlbmFtZSwKKwkJCQlvbGRfdWlkX3QgdXNlciwgb2xkX2dpZF90IGdyb3VwKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfZmNob3duMTYodW5zaWduZWQgaW50IGZkLCBvbGRfdWlkX3QgdXNlciwgb2xkX2dpZF90IGdyb3VwKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfc2V0cmVnaWQxNihvbGRfZ2lkX3QgcmdpZCwgb2xkX2dpZF90IGVnaWQpOworYXNtbGlua2FnZSBsb25nIHN5c19zZXRnaWQxNihvbGRfZ2lkX3QgZ2lkKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfc2V0cmV1aWQxNihvbGRfdWlkX3QgcnVpZCwgb2xkX3VpZF90IGV1aWQpOworYXNtbGlua2FnZSBsb25nIHN5c19zZXR1aWQxNihvbGRfdWlkX3QgdWlkKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfc2V0cmVzdWlkMTYob2xkX3VpZF90IHJ1aWQsIG9sZF91aWRfdCBldWlkLCBvbGRfdWlkX3Qgc3VpZCk7Cithc21saW5rYWdlIGxvbmcgc3lzX2dldHJlc3VpZDE2KG9sZF91aWRfdCBfX3VzZXIgKnJ1aWQsCisJCQkJb2xkX3VpZF90IF9fdXNlciAqZXVpZCwgb2xkX3VpZF90IF9fdXNlciAqc3VpZCk7Cithc21saW5rYWdlIGxvbmcgc3lzX3NldHJlc2dpZDE2KG9sZF9naWRfdCByZ2lkLCBvbGRfZ2lkX3QgZWdpZCwgb2xkX2dpZF90IHNnaWQpOworYXNtbGlua2FnZSBsb25nIHN5c19nZXRyZXNnaWQxNihvbGRfZ2lkX3QgX191c2VyICpyZ2lkLAorCQkJCW9sZF9naWRfdCBfX3VzZXIgKmVnaWQsIG9sZF9naWRfdCBfX3VzZXIgKnNnaWQpOworYXNtbGlua2FnZSBsb25nIHN5c19zZXRmc3VpZDE2KG9sZF91aWRfdCB1aWQpOworYXNtbGlua2FnZSBsb25nIHN5c19zZXRmc2dpZDE2KG9sZF9naWRfdCBnaWQpOworYXNtbGlua2FnZSBsb25nIHN5c19nZXRncm91cHMxNihpbnQgZ2lkc2V0c2l6ZSwgb2xkX2dpZF90IF9fdXNlciAqZ3JvdXBsaXN0KTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfc2V0Z3JvdXBzMTYoaW50IGdpZHNldHNpemUsIG9sZF9naWRfdCBfX3VzZXIgKmdyb3VwbGlzdCk7Cithc21saW5rYWdlIGxvbmcgc3lzX2dldHVpZDE2KHZvaWQpOworYXNtbGlua2FnZSBsb25nIHN5c19nZXRldWlkMTYodm9pZCk7Cithc21saW5rYWdlIGxvbmcgc3lzX2dldGdpZDE2KHZvaWQpOworYXNtbGlua2FnZSBsb25nIHN5c19nZXRlZ2lkMTYodm9pZCk7CisjZW5kaWYKKworYXNtbGlua2FnZSBsb25nIHN5c191dGltZShjaGFyIF9fdXNlciAqZmlsZW5hbWUsCisJCQkJc3RydWN0IHV0aW1idWYgX191c2VyICp0aW1lcyk7Cithc21saW5rYWdlIGxvbmcgc3lzX3V0aW1lcyhjaGFyIF9fdXNlciAqZmlsZW5hbWUsCisJCQkJc3RydWN0IHRpbWV2YWwgX191c2VyICp1dGltZXMpOworYXNtbGlua2FnZSBvZmZfdCBzeXNfbHNlZWsodW5zaWduZWQgaW50IGZkLCBvZmZfdCBvZmZzZXQsCisJCQkJdW5zaWduZWQgaW50IG9yaWdpbik7Cithc21saW5rYWdlIGxvbmcgc3lzX2xsc2Vlayh1bnNpZ25lZCBpbnQgZmQsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0X2hpZ2gsCisJCQl1bnNpZ25lZCBsb25nIG9mZnNldF9sb3csIGxvZmZfdCBfX3VzZXIgKnJlc3VsdCwKKwkJCXVuc2lnbmVkIGludCBvcmlnaW4pOworYXNtbGlua2FnZSBzc2l6ZV90IHN5c19yZWFkKHVuc2lnbmVkIGludCBmZCwgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCQlzaXplX3QgY291bnQpOworYXNtbGlua2FnZSBzc2l6ZV90IHN5c19yZWFkYWhlYWQoaW50IGZkLCBsb2ZmX3Qgb2Zmc2V0LCBzaXplX3QgY291bnQpOworYXNtbGlua2FnZSBzc2l6ZV90IHN5c19yZWFkdih1bnNpZ25lZCBsb25nIGZkLAorCQkJCWNvbnN0IHN0cnVjdCBpb3ZlYyBfX3VzZXIgKnZlYywKKwkJCQl1bnNpZ25lZCBsb25nIHZsZW4pOworYXNtbGlua2FnZSBzc2l6ZV90IHN5c193cml0ZSh1bnNpZ25lZCBpbnQgZmQsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCQkJc2l6ZV90IGNvdW50KTsKK2FzbWxpbmthZ2Ugc3NpemVfdCBzeXNfd3JpdGV2KHVuc2lnbmVkIGxvbmcgZmQsCisJCQkJY29uc3Qgc3RydWN0IGlvdmVjIF9fdXNlciAqdmVjLAorCQkJCXVuc2lnbmVkIGxvbmcgdmxlbik7Cithc21saW5rYWdlIHNzaXplX3Qgc3lzX3ByZWFkNjQodW5zaWduZWQgaW50IGZkLCBjaGFyIF9fdXNlciAqYnVmLAorCQkJCXNpemVfdCBjb3VudCwgbG9mZl90IHBvcyk7Cithc21saW5rYWdlIHNzaXplX3Qgc3lzX3B3cml0ZTY0KHVuc2lnbmVkIGludCBmZCwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCQlzaXplX3QgY291bnQsIGxvZmZfdCBwb3MpOworYXNtbGlua2FnZSBsb25nIHN5c19nZXRjd2QoY2hhciBfX3VzZXIgKmJ1ZiwgdW5zaWduZWQgbG9uZyBzaXplKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfbWtkaXIoY29uc3QgY2hhciBfX3VzZXIgKnBhdGhuYW1lLCBpbnQgbW9kZSk7Cithc21saW5rYWdlIGxvbmcgc3lzX2NoZGlyKGNvbnN0IGNoYXIgX191c2VyICpmaWxlbmFtZSk7Cithc21saW5rYWdlIGxvbmcgc3lzX2ZjaGRpcih1bnNpZ25lZCBpbnQgZmQpOworYXNtbGlua2FnZSBsb25nIHN5c19ybWRpcihjb25zdCBjaGFyIF9fdXNlciAqcGF0aG5hbWUpOworYXNtbGlua2FnZSBsb25nIHN5c19sb29rdXBfZGNvb2tpZSh1NjQgY29va2llNjQsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBsZW4pOworYXNtbGlua2FnZSBsb25nIHN5c19xdW90YWN0bCh1bnNpZ25lZCBpbnQgY21kLCBjb25zdCBjaGFyIF9fdXNlciAqc3BlY2lhbCwKKwkJCQlxaWRfdCBpZCwgdm9pZCBfX3VzZXIgKmFkZHIpOworYXNtbGlua2FnZSBsb25nIHN5c19nZXRkZW50cyh1bnNpZ25lZCBpbnQgZmQsCisJCQkJc3RydWN0IGxpbnV4X2RpcmVudCBfX3VzZXIgKmRpcmVudCwKKwkJCQl1bnNpZ25lZCBpbnQgY291bnQpOworYXNtbGlua2FnZSBsb25nIHN5c19nZXRkZW50czY0KHVuc2lnbmVkIGludCBmZCwKKwkJCQlzdHJ1Y3QgbGludXhfZGlyZW50NjQgX191c2VyICpkaXJlbnQsCisJCQkJdW5zaWduZWQgaW50IGNvdW50KTsKKworYXNtbGlua2FnZSBsb25nIHN5c19zZXRzb2Nrb3B0KGludCBmZCwgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKKwkJCQljaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgb3B0bGVuKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfZ2V0c29ja29wdChpbnQgZmQsIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCisJCQkJY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfYmluZChpbnQsIHN0cnVjdCBzb2NrYWRkciBfX3VzZXIgKiwgaW50KTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfY29ubmVjdChpbnQsIHN0cnVjdCBzb2NrYWRkciBfX3VzZXIgKiwgaW50KTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfYWNjZXB0KGludCwgc3RydWN0IHNvY2thZGRyIF9fdXNlciAqLCBpbnQgX191c2VyICopOworYXNtbGlua2FnZSBsb25nIHN5c19nZXRzb2NrbmFtZShpbnQsIHN0cnVjdCBzb2NrYWRkciBfX3VzZXIgKiwgaW50IF9fdXNlciAqKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfZ2V0cGVlcm5hbWUoaW50LCBzdHJ1Y3Qgc29ja2FkZHIgX191c2VyICosIGludCBfX3VzZXIgKik7Cithc21saW5rYWdlIGxvbmcgc3lzX3NlbmQoaW50LCB2b2lkIF9fdXNlciAqLCBzaXplX3QsIHVuc2lnbmVkKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfc2VuZHRvKGludCwgdm9pZCBfX3VzZXIgKiwgc2l6ZV90LCB1bnNpZ25lZCwKKwkJCQlzdHJ1Y3Qgc29ja2FkZHIgX191c2VyICosIGludCk7Cithc21saW5rYWdlIGxvbmcgc3lzX3NlbmRtc2coaW50IGZkLCBzdHJ1Y3QgbXNnaGRyIF9fdXNlciAqbXNnLCB1bnNpZ25lZCBmbGFncyk7Cithc21saW5rYWdlIGxvbmcgc3lzX3JlY3YoaW50LCB2b2lkIF9fdXNlciAqLCBzaXplX3QsIHVuc2lnbmVkKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfcmVjdmZyb20oaW50LCB2b2lkIF9fdXNlciAqLCBzaXplX3QsIHVuc2lnbmVkLAorCQkJCXN0cnVjdCBzb2NrYWRkciBfX3VzZXIgKiwgaW50IF9fdXNlciAqKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfcmVjdm1zZyhpbnQgZmQsIHN0cnVjdCBtc2doZHIgX191c2VyICptc2csIHVuc2lnbmVkIGZsYWdzKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfc29ja2V0KGludCwgaW50LCBpbnQpOworYXNtbGlua2FnZSBsb25nIHN5c19zb2NrZXRwYWlyKGludCwgaW50LCBpbnQsIGludCBfX3VzZXIgKik7Cithc21saW5rYWdlIGxvbmcgc3lzX3NvY2tldGNhbGwoaW50IGNhbGwsIHVuc2lnbmVkIGxvbmcgX191c2VyICphcmdzKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfbGlzdGVuKGludCwgaW50KTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfcG9sbChzdHJ1Y3QgcG9sbGZkIF9fdXNlciAqdWZkcywgdW5zaWduZWQgaW50IG5mZHMsCisJCQkJbG9uZyB0aW1lb3V0KTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfc2VsZWN0KGludCBuLCBmZF9zZXQgX191c2VyICppbnAsIGZkX3NldCBfX3VzZXIgKm91dHAsCisJCQlmZF9zZXQgX191c2VyICpleHAsIHN0cnVjdCB0aW1ldmFsIF9fdXNlciAqdHZwKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfZXBvbGxfY3JlYXRlKGludCBzaXplKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfZXBvbGxfY3RsKGludCBlcGZkLCBpbnQgb3AsIGludCBmZCwKKwkJCQlzdHJ1Y3QgZXBvbGxfZXZlbnQgX191c2VyICpldmVudCk7Cithc21saW5rYWdlIGxvbmcgc3lzX2Vwb2xsX3dhaXQoaW50IGVwZmQsIHN0cnVjdCBlcG9sbF9ldmVudCBfX3VzZXIgKmV2ZW50cywKKwkJCQlpbnQgbWF4ZXZlbnRzLCBpbnQgdGltZW91dCk7Cithc21saW5rYWdlIGxvbmcgc3lzX2dldGhvc3RuYW1lKGNoYXIgX191c2VyICpuYW1lLCBpbnQgbGVuKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfc2V0aG9zdG5hbWUoY2hhciBfX3VzZXIgKm5hbWUsIGludCBsZW4pOworYXNtbGlua2FnZSBsb25nIHN5c19zZXRkb21haW5uYW1lKGNoYXIgX191c2VyICpuYW1lLCBpbnQgbGVuKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfbmV3dW5hbWUoc3RydWN0IG5ld191dHNuYW1lIF9fdXNlciAqbmFtZSk7CisKK2FzbWxpbmthZ2UgbG9uZyBzeXNfZ2V0cmxpbWl0KHVuc2lnbmVkIGludCByZXNvdXJjZSwKKwkJCQlzdHJ1Y3QgcmxpbWl0IF9fdXNlciAqcmxpbSk7CisjaWYgZGVmaW5lZChDT01QQVRfUkxJTV9PTERfSU5GSU5JVFkpIHx8ICEoZGVmaW5lZChDT05GSUdfSUE2NCkgfHwgZGVmaW5lZChDT05GSUdfVjg1MCkpCithc21saW5rYWdlIGxvbmcgc3lzX29sZF9nZXRybGltaXQodW5zaWduZWQgaW50IHJlc291cmNlLCBzdHJ1Y3QgcmxpbWl0IF9fdXNlciAqcmxpbSk7CisjZW5kaWYKK2FzbWxpbmthZ2UgbG9uZyBzeXNfc2V0cmxpbWl0KHVuc2lnbmVkIGludCByZXNvdXJjZSwKKwkJCQlzdHJ1Y3QgcmxpbWl0IF9fdXNlciAqcmxpbSk7Cithc21saW5rYWdlIGxvbmcgc3lzX2dldHJ1c2FnZShpbnQgd2hvLCBzdHJ1Y3QgcnVzYWdlIF9fdXNlciAqcnUpOworYXNtbGlua2FnZSBsb25nIHN5c191bWFzayhpbnQgbWFzayk7CisKK2FzbWxpbmthZ2UgbG9uZyBzeXNfbXNnZ2V0KGtleV90IGtleSwgaW50IG1zZ2ZsZyk7Cithc21saW5rYWdlIGxvbmcgc3lzX21zZ3NuZChpbnQgbXNxaWQsIHN0cnVjdCBtc2didWYgX191c2VyICptc2dwLAorCQkJCXNpemVfdCBtc2dzeiwgaW50IG1zZ2ZsZyk7Cithc21saW5rYWdlIGxvbmcgc3lzX21zZ3JjdihpbnQgbXNxaWQsIHN0cnVjdCBtc2didWYgX191c2VyICptc2dwLAorCQkJCXNpemVfdCBtc2dzeiwgbG9uZyBtc2d0eXAsIGludCBtc2dmbGcpOworYXNtbGlua2FnZSBsb25nIHN5c19tc2djdGwoaW50IG1zcWlkLCBpbnQgY21kLCBzdHJ1Y3QgbXNxaWRfZHMgX191c2VyICpidWYpOworCithc21saW5rYWdlIGxvbmcgc3lzX3NlbWdldChrZXlfdCBrZXksIGludCBuc2VtcywgaW50IHNlbWZsZyk7Cithc21saW5rYWdlIGxvbmcgc3lzX3NlbW9wKGludCBzZW1pZCwgc3RydWN0IHNlbWJ1ZiBfX3VzZXIgKnNvcHMsCisJCQkJdW5zaWduZWQgbnNvcHMpOworYXNtbGlua2FnZSBsb25nIHN5c19zZW1jdGwoaW50IHNlbWlkLCBpbnQgc2VtbnVtLCBpbnQgY21kLCB1bmlvbiBzZW11biBhcmcpOworYXNtbGlua2FnZSBsb25nIHN5c19zZW10aW1lZG9wKGludCBzZW1pZCwgc3RydWN0IHNlbWJ1ZiBfX3VzZXIgKnNvcHMsCisJCQkJdW5zaWduZWQgbnNvcHMsCisJCQkJY29uc3Qgc3RydWN0IHRpbWVzcGVjIF9fdXNlciAqdGltZW91dCk7Cithc21saW5rYWdlIGxvbmcgc3lzX3NobWF0KGludCBzaG1pZCwgY2hhciBfX3VzZXIgKnNobWFkZHIsCisJCQkJaW50IHNobWZsZywgdW5zaWduZWQgbG9uZyBfX3VzZXIgKmFkZHIpOworYXNtbGlua2FnZSBsb25nIHN5c19zaG1nZXQoa2V5X3Qga2V5LCBzaXplX3Qgc2l6ZSwgaW50IGZsYWcpOworYXNtbGlua2FnZSBsb25nIHN5c19zaG1kdChjaGFyIF9fdXNlciAqc2htYWRkcik7Cithc21saW5rYWdlIGxvbmcgc3lzX3NobWN0bChpbnQgc2htaWQsIGludCBjbWQsIHN0cnVjdCBzaG1pZF9kcyBfX3VzZXIgKmJ1Zik7CisKK2FzbWxpbmthZ2UgbG9uZyBzeXNfbXFfb3Blbihjb25zdCBjaGFyIF9fdXNlciAqbmFtZSwgaW50IG9mbGFnLCBtb2RlX3QgbW9kZSwgc3RydWN0IG1xX2F0dHIgX191c2VyICphdHRyKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfbXFfdW5saW5rKGNvbnN0IGNoYXIgX191c2VyICpuYW1lKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfbXFfdGltZWRzZW5kKG1xZF90IG1xZGVzLCBjb25zdCBjaGFyIF9fdXNlciAqbXNnX3B0ciwgc2l6ZV90IG1zZ19sZW4sIHVuc2lnbmVkIGludCBtc2dfcHJpbywgY29uc3Qgc3RydWN0IHRpbWVzcGVjIF9fdXNlciAqYWJzX3RpbWVvdXQpOworYXNtbGlua2FnZSBzc2l6ZV90IHN5c19tcV90aW1lZHJlY2VpdmUobXFkX3QgbXFkZXMsIGNoYXIgX191c2VyICptc2dfcHRyLCBzaXplX3QgbXNnX2xlbiwgdW5zaWduZWQgaW50IF9fdXNlciAqbXNnX3ByaW8sIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyBfX3VzZXIgKmFic190aW1lb3V0KTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfbXFfbm90aWZ5KG1xZF90IG1xZGVzLCBjb25zdCBzdHJ1Y3Qgc2lnZXZlbnQgX191c2VyICpub3RpZmljYXRpb24pOworYXNtbGlua2FnZSBsb25nIHN5c19tcV9nZXRzZXRhdHRyKG1xZF90IG1xZGVzLCBjb25zdCBzdHJ1Y3QgbXFfYXR0ciBfX3VzZXIgKm1xc3RhdCwgc3RydWN0IG1xX2F0dHIgX191c2VyICpvbXFzdGF0KTsKKworYXNtbGlua2FnZSBsb25nIHN5c19wY2ljb25maWdfaW9iYXNlKGxvbmcgd2hpY2gsIHVuc2lnbmVkIGxvbmcgYnVzLCB1bnNpZ25lZCBsb25nIGRldmZuKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfcGNpY29uZmlnX3JlYWQodW5zaWduZWQgbG9uZyBidXMsIHVuc2lnbmVkIGxvbmcgZGZuLAorCQkJCXVuc2lnbmVkIGxvbmcgb2ZmLCB1bnNpZ25lZCBsb25nIGxlbiwKKwkJCQl2b2lkIF9fdXNlciAqYnVmKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfcGNpY29uZmlnX3dyaXRlKHVuc2lnbmVkIGxvbmcgYnVzLCB1bnNpZ25lZCBsb25nIGRmbiwKKwkJCQl1bnNpZ25lZCBsb25nIG9mZiwgdW5zaWduZWQgbG9uZyBsZW4sCisJCQkJdm9pZCBfX3VzZXIgKmJ1Zik7CisKK2FzbWxpbmthZ2UgbG9uZyBzeXNfcHJjdGwoaW50IG9wdGlvbiwgdW5zaWduZWQgbG9uZyBhcmcyLCB1bnNpZ25lZCBsb25nIGFyZzMsCisJCQl1bnNpZ25lZCBsb25nIGFyZzQsIHVuc2lnbmVkIGxvbmcgYXJnNSk7Cithc21saW5rYWdlIGxvbmcgc3lzX3N3YXBvbihjb25zdCBjaGFyIF9fdXNlciAqc3BlY2lhbGZpbGUsIGludCBzd2FwX2ZsYWdzKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfc3dhcG9mZihjb25zdCBjaGFyIF9fdXNlciAqc3BlY2lhbGZpbGUpOworYXNtbGlua2FnZSBsb25nIHN5c19zeXNjdGwoc3RydWN0IF9fc3lzY3RsX2FyZ3MgX191c2VyICphcmdzKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfc3lzaW5mbyhzdHJ1Y3Qgc3lzaW5mbyBfX3VzZXIgKmluZm8pOworYXNtbGlua2FnZSBsb25nIHN5c19zeXNmcyhpbnQgb3B0aW9uLAorCQkJCXVuc2lnbmVkIGxvbmcgYXJnMSwgdW5zaWduZWQgbG9uZyBhcmcyKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfbmZzc2VydmN0bChpbnQgY21kLAorCQkJCXN0cnVjdCBuZnNjdGxfYXJnIF9fdXNlciAqYXJnLAorCQkJCXZvaWQgX191c2VyICpyZXMpOworYXNtbGlua2FnZSBsb25nIHN5c19zeXNsb2coaW50IHR5cGUsIGNoYXIgX191c2VyICpidWYsIGludCBsZW4pOworYXNtbGlua2FnZSBsb25nIHN5c191c2VsaWIoY29uc3QgY2hhciBfX3VzZXIgKmxpYnJhcnkpOworYXNtbGlua2FnZSBsb25nIHN5c19uaV9zeXNjYWxsKHZvaWQpOworCithc21saW5rYWdlIGxvbmcgc3lzX2FkZF9rZXkoY29uc3QgY2hhciBfX3VzZXIgKl90eXBlLAorCQkJICAgIGNvbnN0IGNoYXIgX191c2VyICpfZGVzY3JpcHRpb24sCisJCQkgICAgY29uc3Qgdm9pZCBfX3VzZXIgKl9wYXlsb2FkLAorCQkJICAgIHNpemVfdCBwbGVuLAorCQkJICAgIGtleV9zZXJpYWxfdCBkZXN0cmluZ2lkKTsKKworYXNtbGlua2FnZSBsb25nIHN5c19yZXF1ZXN0X2tleShjb25zdCBjaGFyIF9fdXNlciAqX3R5cGUsCisJCQkJY29uc3QgY2hhciBfX3VzZXIgKl9kZXNjcmlwdGlvbiwKKwkJCQljb25zdCBjaGFyIF9fdXNlciAqX2NhbGxvdXRfaW5mbywKKwkJCQlrZXlfc2VyaWFsX3QgZGVzdHJpbmdpZCk7CisKK2FzbWxpbmthZ2UgbG9uZyBzeXNfa2V5Y3RsKGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczLAorCQkJICAgdW5zaWduZWQgbG9uZyBhcmc0LCB1bnNpZ25lZCBsb25nIGFyZzUpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3lzY3RsLmggYi9pbmNsdWRlL2xpbnV4L3N5c2N0bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1OGQ1MmIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3N5c2N0bC5oCkBAIC0wLDAgKzEsODk4IEBACisvKgorICogc3lzY3RsLmg6IEdlbmVyYWwgbGludXggc3lzdGVtIGNvbnRyb2wgaW50ZXJmYWNlCisgKgorICogQmVndW4gMjQgTWFyY2ggMTk5NSwgU3RlcGhlbiBUd2VlZGllCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioKKyAqKiAgVGhlIHZhbHVlcyBpbiB0aGlzIGZpbGUgYXJlIGV4cG9ydGVkIHRvIHVzZXIgc3BhY2UgdmlhIAorICoqICB0aGUgc3lzY3RsKCkgYmluYXJ5IGludGVyZmFjZS4gIEhvd2V2ZXIgdGhpcyBpbnRlcmZhY2UKKyAqKiAgaXMgdW5zdGFibGUgYW5kIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiAKKyAqKiAgRm9yIGEgc3RhYmxlIGludGVyZmFjZSB1c2UgL3Byb2Mvc3lzLgorICoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisjaWZuZGVmIF9MSU5VWF9TWVNDVExfSAorI2RlZmluZSBfTElOVVhfU1lTQ1RMX0gKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisKK3N0cnVjdCBmaWxlOworCisjZGVmaW5lIENUTF9NQVhOQU1FIDEwCQkvKiBob3cgbWFueSBwYXRoIGNvbXBvbmVudHMgZG8gd2UgYWxsb3cgaW4gYQorCQkJCSAgIGNhbGwgdG8gc3lzY3RsPyAgIEluIG90aGVyIHdvcmRzLCB3aGF0IGlzCisJCQkJICAgdGhlIGxhcmdlc3QgYWNjZXB0YWJsZSB2YWx1ZSBmb3IgdGhlIG5sZW4KKwkJCQkgICBtZW1iZXIgb2YgYSBzdHJ1Y3QgX19zeXNjdGxfYXJncyB0byBoYXZlPyAqLworCitzdHJ1Y3QgX19zeXNjdGxfYXJncyB7CisJaW50IF9fdXNlciAqbmFtZTsKKwlpbnQgbmxlbjsKKwl2b2lkIF9fdXNlciAqb2xkdmFsOworCXNpemVfdCBfX3VzZXIgKm9sZGxlbnA7CisJdm9pZCBfX3VzZXIgKm5ld3ZhbDsKKwlzaXplX3QgbmV3bGVuOworCXVuc2lnbmVkIGxvbmcgX191bnVzZWRbNF07Cit9OworCisvKiBEZWZpbmUgc3lzY3RsIG5hbWVzIGZpcnN0ICovCisKKy8qIFRvcC1sZXZlbCBuYW1lczogKi8KKworLyogRm9yIGludGVybmFsIHBhdHRlcm4tbWF0Y2hpbmcgdXNlIG9ubHk6ICovCisjaWZkZWYgX19LRVJORUxfXworI2RlZmluZSBDVExfQU5ZCQktMQkvKiBNYXRjaGVzIGFueSBuYW1lICovCisjZGVmaW5lIENUTF9OT05FCTAKKyNlbmRpZgorCitlbnVtCit7CisJQ1RMX0tFUk49MSwJCS8qIEdlbmVyYWwga2VybmVsIGluZm8gYW5kIGNvbnRyb2wgKi8KKwlDVExfVk09MiwJCS8qIFZNIG1hbmFnZW1lbnQgKi8KKwlDVExfTkVUPTMsCQkvKiBOZXR3b3JraW5nICovCisJQ1RMX1BST0M9NCwJCS8qIFByb2Nlc3MgaW5mbyAqLworCUNUTF9GUz01LAkJLyogRmlsZXN5c3RlbXMgKi8KKwlDVExfREVCVUc9NiwJCS8qIERlYnVnZ2luZyAqLworCUNUTF9ERVY9NywJCS8qIERldmljZXMgKi8KKwlDVExfQlVTPTgsCQkvKiBCdXNzZXMgKi8KKwlDVExfQUJJPTksCQkvKiBCaW5hcnkgZW11bGF0aW9uICovCisJQ1RMX0NQVT0xMAkJLyogQ1BVIHN0dWZmIChzcGVlZCBzY2FsaW5nLCBldGMpICovCit9OworCisvKiBDVExfQlVTIG5hbWVzOiAqLworZW51bQoreworCUNUTF9CVVNfSVNBPTEJCS8qIElTQSAqLworfTsKKworLyogQ1RMX0tFUk4gbmFtZXM6ICovCitlbnVtCit7CisJS0VSTl9PU1RZUEU9MSwJCS8qIHN0cmluZzogc3lzdGVtIHZlcnNpb24gKi8KKwlLRVJOX09TUkVMRUFTRT0yLAkvKiBzdHJpbmc6IHN5c3RlbSByZWxlYXNlICovCisJS0VSTl9PU1JFVj0zLAkJLyogaW50OiBzeXN0ZW0gcmV2aXNpb24gKi8KKwlLRVJOX1ZFUlNJT049NCwJCS8qIHN0cmluZzogY29tcGlsZSB0aW1lIGluZm8gKi8KKwlLRVJOX1NFQ1VSRU1BU0s9NSwJLyogc3RydWN0OiBtYXhpbXVtIHJpZ2h0cyBtYXNrICovCisJS0VSTl9QUk9GPTYsCQkvKiB0YWJsZTogcHJvZmlsaW5nIGluZm9ybWF0aW9uICovCisJS0VSTl9OT0RFTkFNRT03LAorCUtFUk5fRE9NQUlOTkFNRT04LAorCisJS0VSTl9DQVBfQlNFVD0xNCwJLyogaW50OiBjYXBhYmlsaXR5IGJvdW5kaW5nIHNldCAqLworCUtFUk5fUEFOSUM9MTUsCQkvKiBpbnQ6IHBhbmljIHRpbWVvdXQgKi8KKwlLRVJOX1JFQUxST09UREVWPTE2LAkvKiByZWFsIHJvb3QgZGV2aWNlIHRvIG1vdW50IGFmdGVyIGluaXRyZCAqLworCisJS0VSTl9TUEFSQ19SRUJPT1Q9MjEsCS8qIHJlYm9vdCBjb21tYW5kIG9uIFNwYXJjICovCisJS0VSTl9DVExBTFRERUw9MjIsCS8qIGludDogYWxsb3cgY3RsLWFsdC1kZWwgdG8gcmVib290ICovCisJS0VSTl9QUklOVEs9MjMsCQkvKiBzdHJ1Y3Q6IGNvbnRyb2wgcHJpbnRrIGxvZ2dpbmcgcGFyYW1ldGVycyAqLworCUtFUk5fTkFNRVRSQU5TPTI0LAkvKiBOYW1lIHRyYW5zbGF0aW9uICovCisJS0VSTl9QUENfSFRBQlJFQ0xBSU09MjUsIC8qIHR1cm4gaHRhYiByZWNsYWltYXRpb24gb24vb2ZmIG9uIFBQQyAqLworCUtFUk5fUFBDX1pFUk9QQUdFRD0yNiwJLyogdHVybiBpZGxlIHBhZ2UgemVyb2luZyBvbi9vZmYgb24gUFBDICovCisJS0VSTl9QUENfUE9XRVJTQVZFX05BUD0yNywgLyogdXNlIG5hcCBtb2RlIGZvciBwb3dlciBzYXZpbmcgKi8KKwlLRVJOX01PRFBST0JFPTI4LAorCUtFUk5fU0dfQklHX0JVRkY9MjksCisJS0VSTl9BQ0NUPTMwLAkJLyogQlNEIHByb2Nlc3MgYWNjb3VudGluZyBwYXJhbWV0ZXJzICovCisJS0VSTl9QUENfTDJDUj0zMSwJLyogbDJjciByZWdpc3RlciBvbiBQUEMgKi8KKworCUtFUk5fUlRTSUdOUj0zMiwJLyogTnVtYmVyIG9mIHJ0IHNpZ3MgcXVldWVkICovCisJS0VSTl9SVFNJR01BWD0zMywJLyogTWF4IHF1ZXVhYmxlICovCisJCisJS0VSTl9TSE1NQVg9MzQsICAgICAgICAgLyogbG9uZzogTWF4aW11bSBzaGFyZWQgbWVtb3J5IHNlZ21lbnQgKi8KKwlLRVJOX01TR01BWD0zNSwgICAgICAgICAvKiBpbnQ6IE1heGltdW0gc2l6ZSBvZiBhIG1lc3NlZ2UgKi8KKwlLRVJOX01TR01OQj0zNiwgICAgICAgICAvKiBpbnQ6IE1heGltdW0gbWVzc2FnZSBxdWV1ZSBzaXplICovCisJS0VSTl9NU0dQT09MPTM3LCAgICAgICAgLyogaW50OiBNYXhpbXVtIHN5c3RlbSBtZXNzYWdlIHBvb2wgc2l6ZSAqLworCUtFUk5fU1lTUlE9MzgsCQkvKiBpbnQ6IFN5c3JlcSBlbmFibGUgKi8KKwlLRVJOX01BWF9USFJFQURTPTM5LAkvKiBpbnQ6IE1heGltdW0gbnIgb2YgdGhyZWFkcyBpbiB0aGUgc3lzdGVtICovCisgCUtFUk5fUkFORE9NPTQwLAkJLyogUmFuZG9tIGRyaXZlciAqLworIAlLRVJOX1NITUFMTD00MSwJCS8qIGludDogTWF4aW11bSBzaXplIG9mIHNoYXJlZCBtZW1vcnkgKi8KKyAJS0VSTl9NU0dNTkk9NDIsCQkvKiBpbnQ6IG1zZyBxdWV1ZSBpZGVudGlmaWVycyAqLworIAlLRVJOX1NFTT00MywJCS8qIHN0cnVjdDogc3lzdiBzZW1hcGhvcmUgbGltaXRzICovCisgCUtFUk5fU1BBUkNfU1RPUF9BPTQ0LAkvKiBpbnQ6IFNwYXJjIFN0b3AtQSBlbmFibGUgKi8KKyAJS0VSTl9TSE1NTkk9NDUsCQkvKiBpbnQ6IHNobSBhcnJheSBpZGVudGlmaWVycyAqLworCUtFUk5fT1ZFUkZMT1dVSUQ9NDYsCS8qIGludDogb3ZlcmZsb3cgVUlEICovCisJS0VSTl9PVkVSRkxPV0dJRD00NywJLyogaW50OiBvdmVyZmxvdyBHSUQgKi8KKwlLRVJOX1NITVBBVEg9NDgsCS8qIHN0cmluZzogcGF0aCB0byBzaG0gZnMgKi8KKwlLRVJOX0hPVFBMVUc9NDksCS8qIHN0cmluZzogcGF0aCB0byBob3RwbHVnIHBvbGljeSBhZ2VudCAqLworCUtFUk5fSUVFRV9FTVVMQVRJT05fV0FSTklOR1M9NTAsIC8qIGludDogdW5pbXBsZW1lbnRlZCBpZWVlIGluc3RydWN0aW9ucyAqLworCUtFUk5fUzM5MF9VU0VSX0RFQlVHX0xPR0dJTkc9NTEsICAvKiBpbnQ6IGR1bXBzIG9mIHVzZXIgZmF1bHRzICovCisJS0VSTl9DT1JFX1VTRVNfUElEPTUyLAkJLyogaW50OiB1c2UgY29yZSBvciBjb3JlLiVwaWQgKi8KKwlLRVJOX1RBSU5URUQ9NTMsCS8qIGludDogdmFyaW91cyBrZXJuZWwgdGFpbnRlZCBmbGFncyAqLworCUtFUk5fQ0FEUElEPTU0LAkJLyogaW50OiBQSUQgb2YgdGhlIHByb2Nlc3MgdG8gbm90aWZ5IG9uIENBRCAqLworCUtFUk5fUElETUFYPTU1LAkJLyogaW50OiBQSUQgIyBsaW1pdCAqLworICAJS0VSTl9DT1JFX1BBVFRFUk49NTYsCS8qIHN0cmluZzogcGF0dGVybiBmb3IgY29yZS1maWxlIG5hbWVzICovCisJS0VSTl9QQU5JQ19PTl9PT1BTPTU3LCAgLyogaW50OiB3aGV0aGVyIHdlIHdpbGwgcGFuaWMgb24gYW4gb29wcyAqLworCUtFUk5fSFBQQV9QV1JTVz01OCwJLyogaW50OiBocHBhIHNvZnQtcG93ZXIgZW5hYmxlICovCisJS0VSTl9IUFBBX1VOQUxJR05FRD01OSwJLyogaW50OiBocHBhIHVuYWxpZ25lZC10cmFwIGVuYWJsZSAqLworCUtFUk5fUFJJTlRLX1JBVEVMSU1JVD02MCwgLyogaW50OiB0dW5lIHByaW50ayByYXRlbGltaXRpbmcgKi8KKwlLRVJOX1BSSU5US19SQVRFTElNSVRfQlVSU1Q9NjEsCS8qIGludDogdHVuZSBwcmludGsgcmF0ZWxpbWl0aW5nICovCisJS0VSTl9QVFk9NjIsCQkvKiBkaXI6IHB0eSBkcml2ZXIgKi8KKwlLRVJOX05HUk9VUFNfTUFYPTYzLAkvKiBpbnQ6IE5HUk9VUFNfTUFYICovCisJS0VSTl9TUEFSQ19TQ09OU19QV1JPRkY9NjQsIC8qIGludDogc2VyaWFsIGNvbnNvbGUgcG93ZXItb2ZmIGhhbHQgKi8KKwlLRVJOX0haX1RJTUVSPTY1LAkvKiBpbnQ6IGh6IHRpbWVyIG9uIG9yIG9mZiAqLworCUtFUk5fVU5LTk9XTl9OTUlfUEFOSUM9NjYsIC8qIGludDogdW5rbm93biBubWkgcGFuaWMgZmxhZyAqLworCUtFUk5fQk9PVExPQURFUl9UWVBFPTY3LCAvKiBpbnQ6IGJvb3QgbG9hZGVyIHR5cGUgKi8KKwlLRVJOX1JBTkRPTUlaRT02OCwgLyogaW50OiByYW5kb21pemUgdmlydHVhbCBhZGRyZXNzIHNwYWNlICovCit9OworCisKKy8qIENUTF9WTSBuYW1lczogKi8KK2VudW0KK3sKKwlWTV9VTlVTRUQxPTEsCQkvKiB3YXM6IHN0cnVjdDogU2V0IHZtIHN3YXBwaW5nIGNvbnRyb2wgKi8KKwlWTV9VTlVTRUQyPTIsCQkvKiB3YXM7IGludDogTGluZWFyIG9yIHNxcnQoKSBzd2Fwb3V0IGZvciBob2dzICovCisJVk1fVU5VU0VEMz0zLAkJLyogd2FzOiBzdHJ1Y3Q6IFNldCBmcmVlIHBhZ2UgdGhyZXNob2xkcyAqLworCVZNX1VOVVNFRDQ9NCwJCS8qIFNwYXJlICovCisJVk1fT1ZFUkNPTU1JVF9NRU1PUlk9NSwJLyogVHVybiBvZmYgdGhlIHZpcnR1YWwgbWVtb3J5IHNhZmV0eSBsaW1pdCAqLworCVZNX1VOVVNFRDU9NiwJCS8qIHdhczogc3RydWN0OiBTZXQgYnVmZmVyIG1lbW9yeSB0aHJlc2hvbGRzICovCisJVk1fVU5VU0VENz03LAkJLyogd2FzOiBzdHJ1Y3Q6IFNldCBjYWNoZSBtZW1vcnkgdGhyZXNob2xkcyAqLworCVZNX1VOVVNFRDg9OCwJCS8qIHdhczogc3RydWN0OiBDb250cm9sIGtzd2FwZCBiZWhhdmlvdXIgKi8KKwlWTV9VTlVTRUQ5PTksCQkvKiB3YXM6IHN0cnVjdDogU2V0IHBhZ2UgdGFibGUgY2FjaGUgcGFyYW1ldGVycyAqLworCVZNX1BBR0VfQ0xVU1RFUj0xMCwJLyogaW50OiBzZXQgbnVtYmVyIG9mIHBhZ2VzIHRvIHN3YXAgdG9nZXRoZXIgKi8KKwlWTV9ESVJUWV9CQUNLR1JPVU5EPTExLAkvKiBkaXJ0eV9iYWNrZ3JvdW5kX3JhdGlvICovCisJVk1fRElSVFlfUkFUSU89MTIsCS8qIGRpcnR5X3JhdGlvICovCisJVk1fRElSVFlfV0JfQ1M9MTMsCS8qIGRpcnR5X3dyaXRlYmFja19jZW50aXNlY3MgKi8KKwlWTV9ESVJUWV9FWFBJUkVfQ1M9MTQsCS8qIGRpcnR5X2V4cGlyZV9jZW50aXNlY3MgKi8KKwlWTV9OUl9QREZMVVNIX1RIUkVBRFM9MTUsIC8qIG5yX3BkZmx1c2hfdGhyZWFkcyAqLworCVZNX09WRVJDT01NSVRfUkFUSU89MTYsIC8qIHBlcmNlbnQgb2YgUkFNIHRvIGFsbG93IG92ZXJjb21taXQgaW4gKi8KKwlWTV9QQUdFQlVGPTE3LAkJLyogc3RydWN0OiBDb250cm9sIHBhZ2VidWYgcGFyYW1ldGVycyAqLworCVZNX0hVR0VUTEJfUEFHRVM9MTgsCS8qIGludDogTnVtYmVyIG9mIGF2YWlsYWJsZSBIdWdlIFBhZ2VzICovCisJVk1fU1dBUFBJTkVTUz0xOSwJLyogVGVuZGVuY3kgdG8gc3RlYWwgbWFwcGVkIG1lbW9yeSAqLworCVZNX0xPV01FTV9SRVNFUlZFX1JBVElPPTIwLC8qIHJlc2VydmF0aW9uIHJhdGlvIGZvciBsb3dlciBtZW1vcnkgem9uZXMgKi8KKwlWTV9NSU5fRlJFRV9LQllURVM9MjEsCS8qIE1pbmltdW0gZnJlZSBraWxvYnl0ZXMgdG8gbWFpbnRhaW4gKi8KKwlWTV9NQVhfTUFQX0NPVU5UPTIyLAkvKiBpbnQ6IE1heGltdW0gbnVtYmVyIG9mIG1tYXBzL2FkZHJlc3Mtc3BhY2UgKi8KKwlWTV9MQVBUT1BfTU9ERT0yMywJLyogdm0gbGFwdG9wIG1vZGUgKi8KKwlWTV9CTE9DS19EVU1QPTI0LAkvKiBibG9jayBkdW1wIG1vZGUgKi8KKwlWTV9IVUdFVExCX0dST1VQPTI1LAkvKiBwZXJtaXR0ZWQgaHVnZXRsYiBncm91cCAqLworCVZNX1ZGU19DQUNIRV9QUkVTU1VSRT0yNiwgLyogZGNhY2hlL2ljYWNoZSByZWNsYWltIHByZXNzdXJlICovCisJVk1fTEVHQUNZX1ZBX0xBWU9VVD0yNywgLyogbGVnYWN5L2NvbXBhdGliaWxpdHkgdmlydHVhbCBhZGRyZXNzIHNwYWNlIGxheW91dCAqLworCVZNX1NXQVBfVE9LRU5fVElNRU9VVD0yOCwgLyogZGVmYXVsdCB0aW1lIGZvciB0b2tlbiB0aW1lIG91dCAqLworfTsKKworCisvKiBDVExfTkVUIG5hbWVzOiAqLworZW51bQoreworCU5FVF9DT1JFPTEsCisJTkVUX0VUSEVSPTIsCisJTkVUXzgwMj0zLAorCU5FVF9VTklYPTQsCisJTkVUX0lQVjQ9NSwKKwlORVRfSVBYPTYsCisJTkVUX0FUQUxLPTcsCisJTkVUX05FVFJPTT04LAorCU5FVF9BWDI1PTksCisJTkVUX0JSSURHRT0xMCwKKwlORVRfUk9TRT0xMSwKKwlORVRfSVBWNj0xMiwKKwlORVRfWDI1PTEzLAorCU5FVF9UUj0xNCwKKwlORVRfREVDTkVUPTE1LAorCU5FVF9FQ09ORVQ9MTYsCisJTkVUX1NDVFA9MTcsIAorfTsKKworLyogL3Byb2Mvc3lzL2tlcm5lbC9yYW5kb20gKi8KK2VudW0KK3sKKwlSQU5ET01fUE9PTFNJWkU9MSwKKwlSQU5ET01fRU5UUk9QWV9DT1VOVD0yLAorCVJBTkRPTV9SRUFEX1RIUkVTSD0zLAorCVJBTkRPTV9XUklURV9USFJFU0g9NCwKKwlSQU5ET01fQk9PVF9JRD01LAorCVJBTkRPTV9VVUlEPTYKK307CisKKy8qIC9wcm9jL3N5cy9rZXJuZWwvcHR5ICovCitlbnVtCit7CisJUFRZX01BWD0xLAorCVBUWV9OUj0yCit9OworCisvKiAvcHJvYy9zeXMvYnVzL2lzYSAqLworZW51bQoreworCUJVU19JU0FfTUVNX0JBU0U9MSwKKwlCVVNfSVNBX1BPUlRfQkFTRT0yLAorCUJVU19JU0FfUE9SVF9TSElGVD0zCit9OworCisvKiAvcHJvYy9zeXMvbmV0L2NvcmUgKi8KK2VudW0KK3sKKwlORVRfQ09SRV9XTUVNX01BWD0xLAorCU5FVF9DT1JFX1JNRU1fTUFYPTIsCisJTkVUX0NPUkVfV01FTV9ERUZBVUxUPTMsCisJTkVUX0NPUkVfUk1FTV9ERUZBVUxUPTQsCisvKiB3YXMJTkVUX0NPUkVfREVTVFJPWV9ERUxBWSAqLworCU5FVF9DT1JFX01BWF9CQUNLTE9HPTYsCisJTkVUX0NPUkVfRkFTVFJPVVRFPTcsCisJTkVUX0NPUkVfTVNHX0NPU1Q9OCwKKwlORVRfQ09SRV9NU0dfQlVSU1Q9OSwKKwlORVRfQ09SRV9PUFRNRU1fTUFYPTEwLAorCU5FVF9DT1JFX0hPVF9MSVNUX0xFTkdUSD0xMSwKKwlORVRfQ09SRV9ESVZFUlRfVkVSU0lPTj0xMiwKKwlORVRfQ09SRV9OT19DT05HX1RIUkVTSD0xMywKKwlORVRfQ09SRV9OT19DT05HPTE0LAorCU5FVF9DT1JFX0xPX0NPTkc9MTUsCisJTkVUX0NPUkVfTU9EX0NPTkc9MTYsCisJTkVUX0NPUkVfREVWX1dFSUdIVD0xNywKKwlORVRfQ09SRV9TT01BWENPTk49MTgsCit9OworCisvKiAvcHJvYy9zeXMvbmV0L2V0aGVybmV0ICovCisKKy8qIC9wcm9jL3N5cy9uZXQvODAyICovCisKKy8qIC9wcm9jL3N5cy9uZXQvdW5peCAqLworCitlbnVtCit7CisJTkVUX1VOSVhfREVTVFJPWV9ERUxBWT0xLAorCU5FVF9VTklYX0RFTEVURV9ERUxBWT0yLAorCU5FVF9VTklYX01BWF9ER1JBTV9RTEVOPTMsCit9OworCisvKiAvcHJvYy9zeXMvbmV0L2lwdjQgKi8KK2VudW0KK3sKKwkvKiB2Mi4wIGNvbXBhdGliaWxlIHZhcmlhYmxlcyAqLworCU5FVF9JUFY0X0ZPUldBUkQ9OCwKKwlORVRfSVBWNF9EWU5BRERSPTksCisKKwlORVRfSVBWNF9DT05GPTE2LAorCU5FVF9JUFY0X05FSUdIPTE3LAorCU5FVF9JUFY0X1JPVVRFPTE4LAorCU5FVF9JUFY0X0ZJQl9IQVNIPTE5LAorCU5FVF9JUFY0X05FVEZJTFRFUj0yMCwKKworCU5FVF9JUFY0X1RDUF9USU1FU1RBTVBTPTMzLAorCU5FVF9JUFY0X1RDUF9XSU5ET1dfU0NBTElORz0zNCwKKwlORVRfSVBWNF9UQ1BfU0FDSz0zNSwKKwlORVRfSVBWNF9UQ1BfUkVUUkFOU19DT0xMQVBTRT0zNiwKKwlORVRfSVBWNF9ERUZBVUxUX1RUTD0zNywKKwlORVRfSVBWNF9BVVRPQ09ORklHPTM4LAorCU5FVF9JUFY0X05PX1BNVFVfRElTQz0zOSwKKwlORVRfSVBWNF9UQ1BfU1lOX1JFVFJJRVM9NDAsCisJTkVUX0lQVjRfSVBGUkFHX0hJR0hfVEhSRVNIPTQxLAorCU5FVF9JUFY0X0lQRlJBR19MT1dfVEhSRVNIPTQyLAorCU5FVF9JUFY0X0lQRlJBR19USU1FPTQzLAorCU5FVF9JUFY0X1RDUF9NQVhfS0FfUFJPQkVTPTQ0LAorCU5FVF9JUFY0X1RDUF9LRUVQQUxJVkVfVElNRT00NSwKKwlORVRfSVBWNF9UQ1BfS0VFUEFMSVZFX1BST0JFUz00NiwKKwlORVRfSVBWNF9UQ1BfUkVUUklFUzE9NDcsCisJTkVUX0lQVjRfVENQX1JFVFJJRVMyPTQ4LAorCU5FVF9JUFY0X1RDUF9GSU5fVElNRU9VVD00OSwKKwlORVRfSVBWNF9JUF9NQVNRX0RFQlVHPTUwLAorCU5FVF9UQ1BfU1lOQ09PS0lFUz01MSwKKwlORVRfVENQX1NURFVSRz01MiwKKwlORVRfVENQX1JGQzEzMzc9NTMsCisJTkVUX1RDUF9TWU5fVEFJTERST1A9NTQsCisJTkVUX1RDUF9NQVhfU1lOX0JBQ0tMT0c9NTUsCisJTkVUX0lQVjRfTE9DQUxfUE9SVF9SQU5HRT01NiwKKwlORVRfSVBWNF9JQ01QX0VDSE9fSUdOT1JFX0FMTD01NywKKwlORVRfSVBWNF9JQ01QX0VDSE9fSUdOT1JFX0JST0FEQ0FTVFM9NTgsCisJTkVUX0lQVjRfSUNNUF9TT1VSQ0VRVUVOQ0hfUkFURT01OSwKKwlORVRfSVBWNF9JQ01QX0RFU1RVTlJFQUNIX1JBVEU9NjAsCisJTkVUX0lQVjRfSUNNUF9USU1FRVhDRUVEX1JBVEU9NjEsCisJTkVUX0lQVjRfSUNNUF9QQVJBTVBST0JfUkFURT02MiwKKwlORVRfSVBWNF9JQ01QX0VDSE9SRVBMWV9SQVRFPTYzLAorCU5FVF9JUFY0X0lDTVBfSUdOT1JFX0JPR1VTX0VSUk9SX1JFU1BPTlNFUz02NCwKKwlORVRfSVBWNF9JR01QX01BWF9NRU1CRVJTSElQUz02NSwKKwlORVRfVENQX1RXX1JFQ1lDTEU9NjYsCisJTkVUX0lQVjRfQUxXQVlTX0RFRlJBRz02NywKKwlORVRfSVBWNF9UQ1BfS0VFUEFMSVZFX0lOVFZMPTY4LAorCU5FVF9JUFY0X0lORVRfUEVFUl9USFJFU0hPTEQ9NjksCisJTkVUX0lQVjRfSU5FVF9QRUVSX01JTlRUTD03MCwKKwlORVRfSVBWNF9JTkVUX1BFRVJfTUFYVFRMPTcxLAorCU5FVF9JUFY0X0lORVRfUEVFUl9HQ19NSU5USU1FPTcyLAorCU5FVF9JUFY0X0lORVRfUEVFUl9HQ19NQVhUSU1FPTczLAorCU5FVF9UQ1BfT1JQSEFOX1JFVFJJRVM9NzQsCisJTkVUX1RDUF9BQk9SVF9PTl9PVkVSRkxPVz03NSwKKwlORVRfVENQX1NZTkFDS19SRVRSSUVTPTc2LAorCU5FVF9UQ1BfTUFYX09SUEhBTlM9NzcsCisJTkVUX1RDUF9NQVhfVFdfQlVDS0VUUz03OCwKKwlORVRfVENQX0ZBQ0s9NzksCisJTkVUX1RDUF9SRU9SREVSSU5HPTgwLAorCU5FVF9UQ1BfRUNOPTgxLAorCU5FVF9UQ1BfRFNBQ0s9ODIsCisJTkVUX1RDUF9NRU09ODMsCisJTkVUX1RDUF9XTUVNPTg0LAorCU5FVF9UQ1BfUk1FTT04NSwKKwlORVRfVENQX0FQUF9XSU49ODYsCisJTkVUX1RDUF9BRFZfV0lOX1NDQUxFPTg3LAorCU5FVF9JUFY0X05PTkxPQ0FMX0JJTkQ9ODgsCisJTkVUX0lQVjRfSUNNUF9SQVRFTElNSVQ9ODksCisJTkVUX0lQVjRfSUNNUF9SQVRFTUFTSz05MCwKKwlORVRfVENQX1RXX1JFVVNFPTkxLAorCU5FVF9UQ1BfRlJUTz05MiwKKwlORVRfVENQX0xPV19MQVRFTkNZPTkzLAorCU5FVF9JUFY0X0lQRlJBR19TRUNSRVRfSU5URVJWQUw9OTQsCisJTkVUX1RDUF9XRVNUV09PRD05NSwKKwlORVRfSVBWNF9JR01QX01BWF9NU0Y9OTYsCisJTkVUX1RDUF9OT19NRVRSSUNTX1NBVkU9OTcsCisJTkVUX1RDUF9WRUdBUz05OCwKKwlORVRfVENQX1ZFR0FTX0FMUEhBPTk5LAorCU5FVF9UQ1BfVkVHQVNfQkVUQT0xMDAsCisJTkVUX1RDUF9WRUdBU19HQU1NQT0xMDEsCisgCU5FVF9UQ1BfQklDPTEwMiwKKyAJTkVUX1RDUF9CSUNfRkFTVF9DT05WRVJHRU5DRT0xMDMsCisJTkVUX1RDUF9CSUNfTE9XX1dJTkRPVz0xMDQsCisJTkVUX1RDUF9ERUZBVUxUX1dJTl9TQ0FMRT0xMDUsCisJTkVUX1RDUF9NT0RFUkFURV9SQ1ZCVUY9MTA2LAorCU5FVF9UQ1BfVFNPX1dJTl9ESVZJU09SPTEwNywKKwlORVRfVENQX0JJQ19CRVRBPTEwOCwKK307CisKK2VudW0geworCU5FVF9JUFY0X1JPVVRFX0ZMVVNIPTEsCisJTkVUX0lQVjRfUk9VVEVfTUlOX0RFTEFZPTIsCisJTkVUX0lQVjRfUk9VVEVfTUFYX0RFTEFZPTMsCisJTkVUX0lQVjRfUk9VVEVfR0NfVEhSRVNIPTQsCisJTkVUX0lQVjRfUk9VVEVfTUFYX1NJWkU9NSwKKwlORVRfSVBWNF9ST1VURV9HQ19NSU5fSU5URVJWQUw9NiwKKwlORVRfSVBWNF9ST1VURV9HQ19USU1FT1VUPTcsCisJTkVUX0lQVjRfUk9VVEVfR0NfSU5URVJWQUw9OCwKKwlORVRfSVBWNF9ST1VURV9SRURJUkVDVF9MT0FEPTksCisJTkVUX0lQVjRfUk9VVEVfUkVESVJFQ1RfTlVNQkVSPTEwLAorCU5FVF9JUFY0X1JPVVRFX1JFRElSRUNUX1NJTEVOQ0U9MTEsCisJTkVUX0lQVjRfUk9VVEVfRVJST1JfQ09TVD0xMiwKKwlORVRfSVBWNF9ST1VURV9FUlJPUl9CVVJTVD0xMywKKwlORVRfSVBWNF9ST1VURV9HQ19FTEFTVElDSVRZPTE0LAorCU5FVF9JUFY0X1JPVVRFX01UVV9FWFBJUkVTPTE1LAorCU5FVF9JUFY0X1JPVVRFX01JTl9QTVRVPTE2LAorCU5FVF9JUFY0X1JPVVRFX01JTl9BRFZNU1M9MTcsCisJTkVUX0lQVjRfUk9VVEVfU0VDUkVUX0lOVEVSVkFMPTE4LAorCU5FVF9JUFY0X1JPVVRFX0dDX01JTl9JTlRFUlZBTF9NUz0xOSwKK307CisKK2VudW0KK3sKKwlORVRfUFJPVE9fQ09ORl9BTEw9LTIsCisJTkVUX1BST1RPX0NPTkZfREVGQVVMVD0tMworCisJLyogQW5kIGRldmljZSBpZmluZGljZXMgLi4uICovCit9OworCitlbnVtCit7CisJTkVUX0lQVjRfQ09ORl9GT1JXQVJESU5HPTEsCisJTkVUX0lQVjRfQ09ORl9NQ19GT1JXQVJESU5HPTIsCisJTkVUX0lQVjRfQ09ORl9QUk9YWV9BUlA9MywKKwlORVRfSVBWNF9DT05GX0FDQ0VQVF9SRURJUkVDVFM9NCwKKwlORVRfSVBWNF9DT05GX1NFQ1VSRV9SRURJUkVDVFM9NSwKKwlORVRfSVBWNF9DT05GX1NFTkRfUkVESVJFQ1RTPTYsCisJTkVUX0lQVjRfQ09ORl9TSEFSRURfTUVESUE9NywKKwlORVRfSVBWNF9DT05GX1JQX0ZJTFRFUj04LAorCU5FVF9JUFY0X0NPTkZfQUNDRVBUX1NPVVJDRV9ST1VURT05LAorCU5FVF9JUFY0X0NPTkZfQk9PVFBfUkVMQVk9MTAsCisJTkVUX0lQVjRfQ09ORl9MT0dfTUFSVElBTlM9MTEsCisJTkVUX0lQVjRfQ09ORl9UQUc9MTIsCisJTkVUX0lQVjRfQ09ORl9BUlBGSUxURVI9MTMsCisJTkVUX0lQVjRfQ09ORl9NRURJVU1fSUQ9MTQsCisJTkVUX0lQVjRfQ09ORl9OT1hGUk09MTUsCisJTkVUX0lQVjRfQ09ORl9OT1BPTElDWT0xNiwKKwlORVRfSVBWNF9DT05GX0ZPUkNFX0lHTVBfVkVSU0lPTj0xNywKKwlORVRfSVBWNF9DT05GX0FSUF9BTk5PVU5DRT0xOCwKKwlORVRfSVBWNF9DT05GX0FSUF9JR05PUkU9MTksCisJX19ORVRfSVBWNF9DT05GX01BWAorfTsKKworLyogL3Byb2Mvc3lzL25ldC9pcHY0L25ldGZpbHRlciAqLworZW51bQoreworCU5FVF9JUFY0X05GX0NPTk5UUkFDS19NQVg9MSwKKwlORVRfSVBWNF9ORl9DT05OVFJBQ0tfVENQX1RJTUVPVVRfU1lOX1NFTlQ9MiwKKwlORVRfSVBWNF9ORl9DT05OVFJBQ0tfVENQX1RJTUVPVVRfU1lOX1JFQ1Y9MywKKwlORVRfSVBWNF9ORl9DT05OVFJBQ0tfVENQX1RJTUVPVVRfRVNUQUJMSVNIRUQ9NCwKKwlORVRfSVBWNF9ORl9DT05OVFJBQ0tfVENQX1RJTUVPVVRfRklOX1dBSVQ9NSwKKwlORVRfSVBWNF9ORl9DT05OVFJBQ0tfVENQX1RJTUVPVVRfQ0xPU0VfV0FJVD02LAorCU5FVF9JUFY0X05GX0NPTk5UUkFDS19UQ1BfVElNRU9VVF9MQVNUX0FDSz03LAorCU5FVF9JUFY0X05GX0NPTk5UUkFDS19UQ1BfVElNRU9VVF9USU1FX1dBSVQ9OCwKKwlORVRfSVBWNF9ORl9DT05OVFJBQ0tfVENQX1RJTUVPVVRfQ0xPU0U9OSwKKwlORVRfSVBWNF9ORl9DT05OVFJBQ0tfVURQX1RJTUVPVVQ9MTAsCisJTkVUX0lQVjRfTkZfQ09OTlRSQUNLX1VEUF9USU1FT1VUX1NUUkVBTT0xMSwKKwlORVRfSVBWNF9ORl9DT05OVFJBQ0tfSUNNUF9USU1FT1VUPTEyLAorCU5FVF9JUFY0X05GX0NPTk5UUkFDS19HRU5FUklDX1RJTUVPVVQ9MTMsCisJTkVUX0lQVjRfTkZfQ09OTlRSQUNLX0JVQ0tFVFM9MTQsCisJTkVUX0lQVjRfTkZfQ09OTlRSQUNLX0xPR19JTlZBTElEPTE1LAorCU5FVF9JUFY0X05GX0NPTk5UUkFDS19UQ1BfVElNRU9VVF9NQVhfUkVUUkFOUz0xNiwKKwlORVRfSVBWNF9ORl9DT05OVFJBQ0tfVENQX0xPT1NFPTE3LAorCU5FVF9JUFY0X05GX0NPTk5UUkFDS19UQ1BfQkVfTElCRVJBTD0xOCwKKwlORVRfSVBWNF9ORl9DT05OVFJBQ0tfVENQX01BWF9SRVRSQU5TPTE5LAorIAlORVRfSVBWNF9ORl9DT05OVFJBQ0tfU0NUUF9USU1FT1VUX0NMT1NFRD0yMCwKKyAJTkVUX0lQVjRfTkZfQ09OTlRSQUNLX1NDVFBfVElNRU9VVF9DT09LSUVfV0FJVD0yMSwKKyAJTkVUX0lQVjRfTkZfQ09OTlRSQUNLX1NDVFBfVElNRU9VVF9DT09LSUVfRUNIT0VEPTIyLAorIAlORVRfSVBWNF9ORl9DT05OVFJBQ0tfU0NUUF9USU1FT1VUX0VTVEFCTElTSEVEPTIzLAorIAlORVRfSVBWNF9ORl9DT05OVFJBQ0tfU0NUUF9USU1FT1VUX1NIVVRET1dOX1NFTlQ9MjQsCisgCU5FVF9JUFY0X05GX0NPTk5UUkFDS19TQ1RQX1RJTUVPVVRfU0hVVERPV05fUkVDRD0yNSwKKyAJTkVUX0lQVjRfTkZfQ09OTlRSQUNLX1NDVFBfVElNRU9VVF9TSFVURE9XTl9BQ0tfU0VOVD0yNiwKKwlORVRfSVBWNF9ORl9DT05OVFJBQ0tfQ09VTlQ9MjcsCit9OworIAorLyogL3Byb2Mvc3lzL25ldC9pcHY2ICovCitlbnVtIHsKKwlORVRfSVBWNl9DT05GPTE2LAorCU5FVF9JUFY2X05FSUdIPTE3LAorCU5FVF9JUFY2X1JPVVRFPTE4LAorCU5FVF9JUFY2X0lDTVA9MTksCisJTkVUX0lQVjZfQklORFY2T05MWT0yMCwKKwlORVRfSVBWNl9JUDZGUkFHX0hJR0hfVEhSRVNIPTIxLAorCU5FVF9JUFY2X0lQNkZSQUdfTE9XX1RIUkVTSD0yMiwKKwlORVRfSVBWNl9JUDZGUkFHX1RJTUU9MjMsCisJTkVUX0lQVjZfSVA2RlJBR19TRUNSRVRfSU5URVJWQUw9MjQsCisJTkVUX0lQVjZfTUxEX01BWF9NU0Y9MjUsCit9OworCitlbnVtIHsKKwlORVRfSVBWNl9ST1VURV9GTFVTSD0xLAorCU5FVF9JUFY2X1JPVVRFX0dDX1RIUkVTSD0yLAorCU5FVF9JUFY2X1JPVVRFX01BWF9TSVpFPTMsCisJTkVUX0lQVjZfUk9VVEVfR0NfTUlOX0lOVEVSVkFMPTQsCisJTkVUX0lQVjZfUk9VVEVfR0NfVElNRU9VVD01LAorCU5FVF9JUFY2X1JPVVRFX0dDX0lOVEVSVkFMPTYsCisJTkVUX0lQVjZfUk9VVEVfR0NfRUxBU1RJQ0lUWT03LAorCU5FVF9JUFY2X1JPVVRFX01UVV9FWFBJUkVTPTgsCisJTkVUX0lQVjZfUk9VVEVfTUlOX0FEVk1TUz05LAorCU5FVF9JUFY2X1JPVVRFX0dDX01JTl9JTlRFUlZBTF9NUz0xMAorfTsKKworZW51bSB7CisJTkVUX0lQVjZfRk9SV0FSRElORz0xLAorCU5FVF9JUFY2X0hPUF9MSU1JVD0yLAorCU5FVF9JUFY2X01UVT0zLAorCU5FVF9JUFY2X0FDQ0VQVF9SQT00LAorCU5FVF9JUFY2X0FDQ0VQVF9SRURJUkVDVFM9NSwKKwlORVRfSVBWNl9BVVRPQ09ORj02LAorCU5FVF9JUFY2X0RBRF9UUkFOU01JVFM9NywKKwlORVRfSVBWNl9SVFJfU09MSUNJVFM9OCwKKwlORVRfSVBWNl9SVFJfU09MSUNJVF9JTlRFUlZBTD05LAorCU5FVF9JUFY2X1JUUl9TT0xJQ0lUX0RFTEFZPTEwLAorCU5FVF9JUFY2X1VTRV9URU1QQUREUj0xMSwKKwlORVRfSVBWNl9URU1QX1ZBTElEX0xGVD0xMiwKKwlORVRfSVBWNl9URU1QX1BSRUZFUkVEX0xGVD0xMywKKwlORVRfSVBWNl9SRUdFTl9NQVhfUkVUUlk9MTQsCisJTkVUX0lQVjZfTUFYX0RFU1lOQ19GQUNUT1I9MTUsCisJTkVUX0lQVjZfTUFYX0FERFJFU1NFUz0xNiwKKwlORVRfSVBWNl9GT1JDRV9NTERfVkVSU0lPTj0xNywKKwlfX05FVF9JUFY2X01BWAorfTsKKworLyogL3Byb2Mvc3lzL25ldC9pcHY2L2ljbXAgKi8KK2VudW0geworCU5FVF9JUFY2X0lDTVBfUkFURUxJTUlUPTEKK307CisKKy8qIC9wcm9jL3N5cy9uZXQvPHByb3RvY29sPi9uZWlnaC88ZGV2PiAqLworZW51bSB7CisJTkVUX05FSUdIX01DQVNUX1NPTElDSVQ9MSwKKwlORVRfTkVJR0hfVUNBU1RfU09MSUNJVD0yLAorCU5FVF9ORUlHSF9BUFBfU09MSUNJVD0zLAorCU5FVF9ORUlHSF9SRVRSQU5TX1RJTUU9NCwKKwlORVRfTkVJR0hfUkVBQ0hBQkxFX1RJTUU9NSwKKwlORVRfTkVJR0hfREVMQVlfUFJPQkVfVElNRT02LAorCU5FVF9ORUlHSF9HQ19TVEFMRV9USU1FPTcsCisJTkVUX05FSUdIX1VOUkVTX1FMRU49OCwKKwlORVRfTkVJR0hfUFJPWFlfUUxFTj05LAorCU5FVF9ORUlHSF9BTllDQVNUX0RFTEFZPTEwLAorCU5FVF9ORUlHSF9QUk9YWV9ERUxBWT0xMSwKKwlORVRfTkVJR0hfTE9DS1RJTUU9MTIsCisJTkVUX05FSUdIX0dDX0lOVEVSVkFMPTEzLAorCU5FVF9ORUlHSF9HQ19USFJFU0gxPTE0LAorCU5FVF9ORUlHSF9HQ19USFJFU0gyPTE1LAorCU5FVF9ORUlHSF9HQ19USFJFU0gzPTE2LAorCU5FVF9ORUlHSF9SRVRSQU5TX1RJTUVfTVM9MTcsCisJTkVUX05FSUdIX1JFQUNIQUJMRV9USU1FX01TPTE4LAorCV9fTkVUX05FSUdIX01BWAorfTsKKworLyogL3Byb2Mvc3lzL25ldC9pcHggKi8KK2VudW0geworCU5FVF9JUFhfUFBST1BfQlJPQURDQVNUSU5HPTEsCisJTkVUX0lQWF9GT1JXQVJESU5HPTIKK307CisKKworLyogL3Byb2Mvc3lzL25ldC9hcHBsZXRhbGsgKi8KK2VudW0geworCU5FVF9BVEFMS19BQVJQX0VYUElSWV9USU1FPTEsCisJTkVUX0FUQUxLX0FBUlBfVElDS19USU1FPTIsCisJTkVUX0FUQUxLX0FBUlBfUkVUUkFOU01JVF9MSU1JVD0zLAorCU5FVF9BVEFMS19BQVJQX1JFU09MVkVfVElNRT00Cit9OworCisKKy8qIC9wcm9jL3N5cy9uZXQvbmV0cm9tICovCitlbnVtIHsKKwlORVRfTkVUUk9NX0RFRkFVTFRfUEFUSF9RVUFMSVRZPTEsCisJTkVUX05FVFJPTV9PQlNPTEVTQ0VOQ0VfQ09VTlRfSU5JVElBTElTRVI9MiwKKwlORVRfTkVUUk9NX05FVFdPUktfVFRMX0lOSVRJQUxJU0VSPTMsCisJTkVUX05FVFJPTV9UUkFOU1BPUlRfVElNRU9VVD00LAorCU5FVF9ORVRST01fVFJBTlNQT1JUX01BWElNVU1fVFJJRVM9NSwKKwlORVRfTkVUUk9NX1RSQU5TUE9SVF9BQ0tOT1dMRURHRV9ERUxBWT02LAorCU5FVF9ORVRST01fVFJBTlNQT1JUX0JVU1lfREVMQVk9NywKKwlORVRfTkVUUk9NX1RSQU5TUE9SVF9SRVFVRVNURURfV0lORE9XX1NJWkU9OCwKKwlORVRfTkVUUk9NX1RSQU5TUE9SVF9OT19BQ1RJVklUWV9USU1FT1VUPTksCisJTkVUX05FVFJPTV9ST1VUSU5HX0NPTlRST0w9MTAsCisJTkVUX05FVFJPTV9MSU5LX0ZBSUxTX0NPVU5UPTExCit9OworCisvKiAvcHJvYy9zeXMvbmV0L2F4MjUgKi8KK2VudW0geworCU5FVF9BWDI1X0lQX0RFRkFVTFRfTU9ERT0xLAorCU5FVF9BWDI1X0RFRkFVTFRfTU9ERT0yLAorCU5FVF9BWDI1X0JBQ0tPRkZfVFlQRT0zLAorCU5FVF9BWDI1X0NPTk5FQ1RfTU9ERT00LAorCU5FVF9BWDI1X1NUQU5EQVJEX1dJTkRPVz01LAorCU5FVF9BWDI1X0VYVEVOREVEX1dJTkRPVz02LAorCU5FVF9BWDI1X1QxX1RJTUVPVVQ9NywKKwlORVRfQVgyNV9UMl9USU1FT1VUPTgsCisJTkVUX0FYMjVfVDNfVElNRU9VVD05LAorCU5FVF9BWDI1X0lETEVfVElNRU9VVD0xMCwKKwlORVRfQVgyNV9OMj0xMSwKKwlORVRfQVgyNV9QQUNMRU49MTIsCisJTkVUX0FYMjVfUFJPVE9DT0w9MTMsCisJTkVUX0FYMjVfREFNQV9TTEFWRV9USU1FT1VUPTE0Cit9OworCisvKiAvcHJvYy9zeXMvbmV0L3Jvc2UgKi8KK2VudW0geworCU5FVF9ST1NFX1JFU1RBUlRfUkVRVUVTVF9USU1FT1VUPTEsCisJTkVUX1JPU0VfQ0FMTF9SRVFVRVNUX1RJTUVPVVQ9MiwKKwlORVRfUk9TRV9SRVNFVF9SRVFVRVNUX1RJTUVPVVQ9MywKKwlORVRfUk9TRV9DTEVBUl9SRVFVRVNUX1RJTUVPVVQ9NCwKKwlORVRfUk9TRV9BQ0tfSE9MRF9CQUNLX1RJTUVPVVQ9NSwKKwlORVRfUk9TRV9ST1VUSU5HX0NPTlRST0w9NiwKKwlORVRfUk9TRV9MSU5LX0ZBSUxfVElNRU9VVD03LAorCU5FVF9ST1NFX01BWF9WQ1M9OCwKKwlORVRfUk9TRV9XSU5ET1dfU0laRT05LAorCU5FVF9ST1NFX05PX0FDVElWSVRZX1RJTUVPVVQ9MTAKK307CisKKy8qIC9wcm9jL3N5cy9uZXQveDI1ICovCitlbnVtIHsKKwlORVRfWDI1X1JFU1RBUlRfUkVRVUVTVF9USU1FT1VUPTEsCisJTkVUX1gyNV9DQUxMX1JFUVVFU1RfVElNRU9VVD0yLAorCU5FVF9YMjVfUkVTRVRfUkVRVUVTVF9USU1FT1VUPTMsCisJTkVUX1gyNV9DTEVBUl9SRVFVRVNUX1RJTUVPVVQ9NCwKKwlORVRfWDI1X0FDS19IT0xEX0JBQ0tfVElNRU9VVD01Cit9OworCisvKiAvcHJvYy9zeXMvbmV0L3Rva2VuLXJpbmcgKi8KK2VudW0KK3sKKwlORVRfVFJfUklGX1RJTUVPVVQ9MQorfTsKKworLyogL3Byb2Mvc3lzL25ldC9kZWNuZXQvICovCitlbnVtIHsKKwlORVRfREVDTkVUX05PREVfVFlQRSA9IDEsCisJTkVUX0RFQ05FVF9OT0RFX0FERFJFU1MgPSAyLAorCU5FVF9ERUNORVRfTk9ERV9OQU1FID0gMywKKwlORVRfREVDTkVUX0RFRkFVTFRfREVWSUNFID0gNCwKKwlORVRfREVDTkVUX1RJTUVfV0FJVCA9IDUsCisJTkVUX0RFQ05FVF9ETl9DT1VOVCA9IDYsCisJTkVUX0RFQ05FVF9ESV9DT1VOVCA9IDcsCisJTkVUX0RFQ05FVF9EUl9DT1VOVCA9IDgsCisJTkVUX0RFQ05FVF9EU1RfR0NfSU5URVJWQUwgPSA5LAorCU5FVF9ERUNORVRfQ09ORiA9IDEwLAorCU5FVF9ERUNORVRfTk9fRkNfTUFYX0NXTkQgPSAxMSwKKwlORVRfREVDTkVUX0RFQlVHX0xFVkVMID0gMjU1Cit9OworCisvKiAvcHJvYy9zeXMvbmV0L2RlY25ldC9jb25mLzxkZXY+ICovCitlbnVtIHsKKwlORVRfREVDTkVUX0NPTkZfTE9PUEJBQ0sgPSAtMiwKKwlORVRfREVDTkVUX0NPTkZfRERDTVAgPSAtMywKKwlORVRfREVDTkVUX0NPTkZfUFBQID0gLTQsCisJTkVUX0RFQ05FVF9DT05GX1gyNSA9IC01LAorCU5FVF9ERUNORVRfQ09ORl9HUkUgPSAtNiwKKwlORVRfREVDTkVUX0NPTkZfRVRIRVIgPSAtNworCisJLyogLi4uIGFuZCBpZmluZGV4IG9mIGRldmljZXMgKi8KK307CisKKy8qIC9wcm9jL3N5cy9uZXQvZGVjbmV0L2NvbmYvPGRldj4vICovCitlbnVtIHsKKwlORVRfREVDTkVUX0NPTkZfREVWX1BSSU9SSVRZID0gMSwKKwlORVRfREVDTkVUX0NPTkZfREVWX1QxID0gMiwKKwlORVRfREVDTkVUX0NPTkZfREVWX1QyID0gMywKKwlORVRfREVDTkVUX0NPTkZfREVWX1QzID0gNCwKKwlORVRfREVDTkVUX0NPTkZfREVWX0ZPUldBUkRJTkcgPSA1LAorCU5FVF9ERUNORVRfQ09ORl9ERVZfQkxLU0laRSA9IDYsCisJTkVUX0RFQ05FVF9DT05GX0RFVl9TVEFURSA9IDcKK307CisKKy8qIC9wcm9jL3N5cy9uZXQvc2N0cCAqLworZW51bSB7CisJTkVUX1NDVFBfUlRPX0lOSVRJQUwgPSAxLAorCU5FVF9TQ1RQX1JUT19NSU4gICAgID0gMiwKKwlORVRfU0NUUF9SVE9fTUFYICAgICA9IDMsCisJTkVUX1NDVFBfUlRPX0FMUEhBICAgPSA0LAorCU5FVF9TQ1RQX1JUT19CRVRBICAgID0gNSwKKwlORVRfU0NUUF9WQUxJRF9DT09LSUVfTElGRSAgICAgICA9ICA2LAorCU5FVF9TQ1RQX0FTU09DSUFUSU9OX01BWF9SRVRSQU5TID0gIDcsCisJTkVUX1NDVFBfUEFUSF9NQVhfUkVUUkFOUyAgICAgICAgPSAgOCwKKwlORVRfU0NUUF9NQVhfSU5JVF9SRVRSQU5TTUlUUyAgICA9ICA5LAorCU5FVF9TQ1RQX0hCX0lOVEVSVkFMICAgICAgICAgICAgID0gMTAsCisJTkVUX1NDVFBfUFJFU0VSVkVfRU5BQkxFICAgICAgICAgPSAxMSwKKwlORVRfU0NUUF9NQVhfQlVSU1QgICAgICAgICAgICAgICA9IDEyLAorCU5FVF9TQ1RQX0FERElQX0VOQUJMRQkJID0gMTMsCisJTkVUX1NDVFBfUFJTQ1RQX0VOQUJMRQkJID0gMTQsCit9OworCisvKiAvcHJvYy9zeXMvbmV0L2JyaWRnZSAqLworZW51bSB7CisJTkVUX0JSSURHRV9ORl9DQUxMX0FSUFRBQkxFUyA9IDEsCisJTkVUX0JSSURHRV9ORl9DQUxMX0lQVEFCTEVTID0gMiwKKwlORVRfQlJJREdFX05GX0NBTExfSVA2VEFCTEVTID0gMywKKwlORVRfQlJJREdFX05GX0ZJTFRFUl9WTEFOX1RBR0dFRCA9IDQsCit9OworCisvKiBDVExfUFJPQyBuYW1lczogKi8KKworLyogQ1RMX0ZTIG5hbWVzOiAqLworZW51bQoreworCUZTX05SSU5PREU9MSwJLyogaW50OmN1cnJlbnQgbnVtYmVyIG9mIGFsbG9jYXRlZCBpbm9kZXMgKi8KKwlGU19TVEFUSU5PREU9MiwKKwlGU19NQVhJTk9ERT0zLAkvKiBpbnQ6bWF4aW11bSBudW1iZXIgb2YgaW5vZGVzIHRoYXQgY2FuIGJlIGFsbG9jYXRlZCAqLworCUZTX05SRFFVT1Q9NCwJLyogaW50OmN1cnJlbnQgbnVtYmVyIG9mIGFsbG9jYXRlZCBkcXVvdHMgKi8KKwlGU19NQVhEUVVPVD01LAkvKiBpbnQ6bWF4aW11bSBudW1iZXIgb2YgZHF1b3RzIHRoYXQgY2FuIGJlIGFsbG9jYXRlZCAqLworCUZTX05SRklMRT02LAkvKiBpbnQ6Y3VycmVudCBudW1iZXIgb2YgYWxsb2NhdGVkIGZpbGVkZXNjcmlwdG9ycyAqLworCUZTX01BWEZJTEU9NywJLyogaW50Om1heGltdW0gbnVtYmVyIG9mIGZpbGVkZXNjcmlwdG9ycyB0aGF0IGNhbiBiZSBhbGxvY2F0ZWQgKi8KKwlGU19ERU5UUlk9OCwKKwlGU19OUlNVUEVSPTksCS8qIGludDpjdXJyZW50IG51bWJlciBvZiBhbGxvY2F0ZWQgc3VwZXJfYmxvY2tzICovCisJRlNfTUFYU1VQRVI9MTAsCS8qIGludDptYXhpbXVtIG51bWJlciBvZiBzdXBlcl9ibG9ja3MgdGhhdCBjYW4gYmUgYWxsb2NhdGVkICovCisJRlNfT1ZFUkZMT1dVSUQ9MTEsCS8qIGludDogb3ZlcmZsb3cgVUlEICovCisJRlNfT1ZFUkZMT1dHSUQ9MTIsCS8qIGludDogb3ZlcmZsb3cgR0lEICovCisJRlNfTEVBU0VTPTEzLAkvKiBpbnQ6IGxlYXNlcyBlbmFibGVkICovCisJRlNfRElSX05PVElGWT0xNCwJLyogaW50OiBkaXJlY3Rvcnkgbm90aWZpY2F0aW9uIGVuYWJsZWQgKi8KKwlGU19MRUFTRV9USU1FPTE1LAkvKiBpbnQ6IG1heGltdW0gdGltZSB0byB3YWl0IGZvciBhIGxlYXNlIGJyZWFrICovCisJRlNfRFFTVEFUUz0xNiwJLyogZGlzYyBxdW90YSB1c2FnZSBzdGF0aXN0aWNzIGFuZCBjb250cm9sICovCisJRlNfWEZTPTE3LAkvKiBzdHJ1Y3Q6IGNvbnRyb2wgeGZzIHBhcmFtZXRlcnMgKi8KKwlGU19BSU9fTlI9MTgsCS8qIGN1cnJlbnQgc3lzdGVtLXdpZGUgbnVtYmVyIG9mIGFpbyByZXF1ZXN0cyAqLworCUZTX0FJT19NQVhfTlI9MTksCS8qIHN5c3RlbS13aWRlIG1heGltdW0gbnVtYmVyIG9mIGFpbyByZXF1ZXN0cyAqLworfTsKKworLyogL3Byb2Mvc3lzL2ZzL3F1b3RhLyAqLworZW51bSB7CisJRlNfRFFfTE9PS1VQUyA9IDEsCisJRlNfRFFfRFJPUFMgPSAyLAorCUZTX0RRX1JFQURTID0gMywKKwlGU19EUV9XUklURVMgPSA0LAorCUZTX0RRX0NBQ0hFX0hJVFMgPSA1LAorCUZTX0RRX0FMTE9DQVRFRCA9IDYsCisJRlNfRFFfRlJFRSA9IDcsCisJRlNfRFFfU1lOQ1MgPSA4LAorCUZTX0RRX1dBUk5JTkdTID0gOSwKK307CisKKy8qIENUTF9ERUJVRyBuYW1lczogKi8KKworLyogQ1RMX0RFViBuYW1lczogKi8KK2VudW0geworCURFVl9DRFJPTT0xLAorCURFVl9IV01PTj0yLAorCURFVl9QQVJQT1JUPTMsCisJREVWX1JBSUQ9NCwKKwlERVZfTUFDX0hJRD01LAorCURFVl9TQ1NJPTYsCit9OworCisvKiAvcHJvYy9zeXMvZGV2L2Nkcm9tICovCitlbnVtIHsKKwlERVZfQ0RST01fSU5GTz0xLAorCURFVl9DRFJPTV9BVVRPQ0xPU0U9MiwKKwlERVZfQ0RST01fQVVUT0VKRUNUPTMsCisJREVWX0NEUk9NX0RFQlVHPTQsCisJREVWX0NEUk9NX0xPQ0s9NSwKKwlERVZfQ0RST01fQ0hFQ0tfTUVESUE9NgorfTsKKworLyogL3Byb2Mvc3lzL2Rldi9wYXJwb3J0ICovCitlbnVtIHsKKwlERVZfUEFSUE9SVF9ERUZBVUxUPS0zCit9OworCisvKiAvcHJvYy9zeXMvZGV2L3JhaWQgKi8KK2VudW0geworCURFVl9SQUlEX1NQRUVEX0xJTUlUX01JTj0xLAorCURFVl9SQUlEX1NQRUVEX0xJTUlUX01BWD0yCit9OworCisvKiAvcHJvYy9zeXMvZGV2L3BhcnBvcnQvZGVmYXVsdCAqLworZW51bSB7CisJREVWX1BBUlBPUlRfREVGQVVMVF9USU1FU0xJQ0U9MSwKKwlERVZfUEFSUE9SVF9ERUZBVUxUX1NQSU5USU1FPTIKK307CisKKy8qIC9wcm9jL3N5cy9kZXYvcGFycG9ydC9wYXJwb3J0IG4gKi8KK2VudW0geworCURFVl9QQVJQT1JUX1NQSU5USU1FPTEsCisJREVWX1BBUlBPUlRfQkFTRV9BRERSPTIsCisJREVWX1BBUlBPUlRfSVJRPTMsCisJREVWX1BBUlBPUlRfRE1BPTQsCisJREVWX1BBUlBPUlRfTU9ERVM9NSwKKwlERVZfUEFSUE9SVF9ERVZJQ0VTPTYsCisJREVWX1BBUlBPUlRfQVVUT1BST0JFPTE2Cit9OworCisvKiAvcHJvYy9zeXMvZGV2L3BhcnBvcnQvcGFycG9ydCBuL2RldmljZXMvICovCitlbnVtIHsKKwlERVZfUEFSUE9SVF9ERVZJQ0VTX0FDVElWRT0tMywKK307CisKKy8qIC9wcm9jL3N5cy9kZXYvcGFycG9ydC9wYXJwb3J0IG4vZGV2aWNlcy9kZXZpY2UgbiAqLworZW51bSB7CisJREVWX1BBUlBPUlRfREVWSUNFX1RJTUVTTElDRT0xLAorfTsKKworLyogL3Byb2Mvc3lzL2Rldi9tYWNfaGlkICovCitlbnVtIHsKKwlERVZfTUFDX0hJRF9LRVlCT0FSRF9TRU5EU19MSU5VWF9LRVlDT0RFUz0xLAorCURFVl9NQUNfSElEX0tFWUJPQVJEX0xPQ0tfS0VZQ09ERVM9MiwKKwlERVZfTUFDX0hJRF9NT1VTRV9CVVRUT05fRU1VTEFUSU9OPTMsCisJREVWX01BQ19ISURfTU9VU0VfQlVUVE9OMl9LRVlDT0RFPTQsCisJREVWX01BQ19ISURfTU9VU0VfQlVUVE9OM19LRVlDT0RFPTUsCisJREVWX01BQ19ISURfQURCX01PVVNFX1NFTkRTX0tFWUNPREVTPTYKK307CisKKy8qIC9wcm9jL3N5cy9kZXYvc2NzaSAqLworZW51bSB7CisJREVWX1NDU0lfTE9HR0lOR19MRVZFTD0xLAorfTsKKworLyogL3Byb2Mvc3lzL2FiaSAqLworZW51bQoreworCUFCSV9ERUZIQU5ETEVSX0NPRkY9MSwJLyogZGVmYXVsdCBoYW5kbGVyIGZvciBjb2ZmIGJpbmFyaWVzICovCisJQUJJX0RFRkhBTkRMRVJfRUxGPTIsIAkvKiBkZWZhdWx0IGhhbmRsZXIgZm9yIEVMRiBiaW5hcmllcyAqLworCUFCSV9ERUZIQU5ETEVSX0xDQUxMNz0zLC8qIGRlZmF1bHQgaGFuZGxlciBmb3IgcHJvY3MgdXNpbmcgbGNhbGw3ICovCisJQUJJX0RFRkhBTkRMRVJfTElCQ1NPPTQsLyogZGVmYXVsdCBoYW5kbGVyIGZvciBhbiBsaWJjLnNvIEVMRiBpbnRlcnAgKi8KKwlBQklfVFJBQ0U9NSwJCS8qIHRyYWNpbmcgZmxhZ3MgKi8KKwlBQklfRkFLRV9VVFNOQU1FPTYsCS8qIGZha2UgdGFyZ2V0IHV0c25hbWUgaW5mb3JtYXRpb24gKi8KK307CisKKyNpZmRlZiBfX0tFUk5FTF9fCisKK2V4dGVybiB2b2lkIHN5c2N0bF9pbml0KHZvaWQpOworCit0eXBlZGVmIHN0cnVjdCBjdGxfdGFibGUgY3RsX3RhYmxlOworCit0eXBlZGVmIGludCBjdGxfaGFuZGxlciAoY3RsX3RhYmxlICp0YWJsZSwgaW50IF9fdXNlciAqbmFtZSwgaW50IG5sZW4sCisJCQkgdm9pZCBfX3VzZXIgKm9sZHZhbCwgc2l6ZV90IF9fdXNlciAqb2xkbGVucCwKKwkJCSB2b2lkIF9fdXNlciAqbmV3dmFsLCBzaXplX3QgbmV3bGVuLCAKKwkJCSB2b2lkICoqY29udGV4dCk7CisKK3R5cGVkZWYgaW50IHByb2NfaGFuZGxlciAoY3RsX3RhYmxlICpjdGwsIGludCB3cml0ZSwgc3RydWN0IGZpbGUgKiBmaWxwLAorCQkJICB2b2lkIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcyk7CisKK2V4dGVybiBpbnQgcHJvY19kb3N0cmluZyhjdGxfdGFibGUgKiwgaW50LCBzdHJ1Y3QgZmlsZSAqLAorCQkJIHZvaWQgX191c2VyICosIHNpemVfdCAqLCBsb2ZmX3QgKik7CitleHRlcm4gaW50IHByb2NfZG9pbnR2ZWMoY3RsX3RhYmxlICosIGludCwgc3RydWN0IGZpbGUgKiwKKwkJCSB2b2lkIF9fdXNlciAqLCBzaXplX3QgKiwgbG9mZl90ICopOworZXh0ZXJuIGludCBwcm9jX2RvaW50dmVjX2JzZXQoY3RsX3RhYmxlICosIGludCwgc3RydWN0IGZpbGUgKiwKKwkJCSAgICAgIHZvaWQgX191c2VyICosIHNpemVfdCAqLCBsb2ZmX3QgKik7CitleHRlcm4gaW50IHByb2NfZG9pbnR2ZWNfbWlubWF4KGN0bF90YWJsZSAqLCBpbnQsIHN0cnVjdCBmaWxlICosCisJCQkJdm9pZCBfX3VzZXIgKiwgc2l6ZV90ICosIGxvZmZfdCAqKTsKK2V4dGVybiBpbnQgcHJvY19kb2ludHZlY19qaWZmaWVzKGN0bF90YWJsZSAqLCBpbnQsIHN0cnVjdCBmaWxlICosCisJCQkJIHZvaWQgX191c2VyICosIHNpemVfdCAqLCBsb2ZmX3QgKik7CitleHRlcm4gaW50IHByb2NfZG9pbnR2ZWNfdXNlcmh6X2ppZmZpZXMoY3RsX3RhYmxlICosIGludCwgc3RydWN0IGZpbGUgKiwKKwkJCQkJdm9pZCBfX3VzZXIgKiwgc2l6ZV90ICosIGxvZmZfdCAqKTsKK2V4dGVybiBpbnQgcHJvY19kb2ludHZlY19tc19qaWZmaWVzKGN0bF90YWJsZSAqLCBpbnQsIHN0cnVjdCBmaWxlICosCisJCQkJICAgIHZvaWQgX191c2VyICosIHNpemVfdCAqLCBsb2ZmX3QgKik7CitleHRlcm4gaW50IHByb2NfZG91bG9uZ3ZlY19taW5tYXgoY3RsX3RhYmxlICosIGludCwgc3RydWN0IGZpbGUgKiwKKwkJCQkgIHZvaWQgX191c2VyICosIHNpemVfdCAqLCBsb2ZmX3QgKik7CitleHRlcm4gaW50IHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heChjdGxfdGFibGUgKnRhYmxlLCBpbnQsCisJCQkJICAgICAgc3RydWN0IGZpbGUgKiwgdm9pZCBfX3VzZXIgKiwgc2l6ZV90ICosIGxvZmZfdCAqKTsKKworZXh0ZXJuIGludCBkb19zeXNjdGwgKGludCBfX3VzZXIgKm5hbWUsIGludCBubGVuLAorCQkgICAgICB2b2lkIF9fdXNlciAqb2xkdmFsLCBzaXplX3QgX191c2VyICpvbGRsZW5wLAorCQkgICAgICB2b2lkIF9fdXNlciAqbmV3dmFsLCBzaXplX3QgbmV3bGVuKTsKKworZXh0ZXJuIGludCBkb19zeXNjdGxfc3RyYXRlZ3kgKGN0bF90YWJsZSAqdGFibGUsIAorCQkJICAgICAgIGludCBfX3VzZXIgKm5hbWUsIGludCBubGVuLAorCQkJICAgICAgIHZvaWQgX191c2VyICpvbGR2YWwsIHNpemVfdCBfX3VzZXIgKm9sZGxlbnAsCisJCQkgICAgICAgdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbiwgdm9pZCAqKiBjb250ZXh0KTsKKworZXh0ZXJuIGN0bF9oYW5kbGVyIHN5c2N0bF9zdHJpbmc7CitleHRlcm4gY3RsX2hhbmRsZXIgc3lzY3RsX2ludHZlYzsKK2V4dGVybiBjdGxfaGFuZGxlciBzeXNjdGxfamlmZmllczsKK2V4dGVybiBjdGxfaGFuZGxlciBzeXNjdGxfbXNfamlmZmllczsKKworCisvKgorICogUmVnaXN0ZXIgYSBzZXQgb2Ygc3lzY3RsIG5hbWVzIGJ5IGNhbGxpbmcgcmVnaXN0ZXJfc3lzY3RsX3RhYmxlCisgKiB3aXRoIGFuIGluaXRpYWxpc2VkIGFycmF5IG9mIGN0bF90YWJsZSdzLiAgQW4gZW50cnkgd2l0aCB6ZXJvCisgKiBjdGxfbmFtZSB0ZXJtaW5hdGVzIHRoZSB0YWJsZS4gIHRhYmxlLT5kZSB3aWxsIGJlIHNldCB1cCBieSB0aGUKKyAqIHJlZ2lzdHJhdGlvbiBhbmQgbmVlZCBub3QgYmUgaW5pdGlhbGlzZWQgaW4gYWR2YW5jZS4KKyAqCisgKiBzeXNjdGwgbmFtZXMgY2FuIGJlIG1pcnJvcmVkIGF1dG9tYXRpY2FsbHkgdW5kZXIgL3Byb2Mvc3lzLiAgVGhlCisgKiBwcm9jbmFtZSBzdXBwbGllZCBjb250cm9scyAvcHJvYyBuYW1pbmcuCisgKgorICogVGhlIHRhYmxlJ3MgbW9kZSB3aWxsIGJlIGhvbm91cmVkIGJvdGggZm9yIHN5c19zeXNjdGwoMikgYW5kCisgKiBwcm9jLWZzIGFjY2Vzcy4KKyAqCisgKiBMZWFmIG5vZGVzIGluIHRoZSBzeXNjdGwgdHJlZSB3aWxsIGJlIHJlcHJlc2VudGVkIGJ5IGEgc2luZ2xlIGZpbGUKKyAqIHVuZGVyIC9wcm9jOyBub24tbGVhZiBub2RlcyB3aWxsIGJlIHJlcHJlc2VudGVkIGJ5IGRpcmVjdG9yaWVzLiAgQQorICogbnVsbCBwcm9jbmFtZSBkaXNhYmxlcyAvcHJvYyBtaXJyb3JpbmcgYXQgdGhpcyBub2RlLgorICogCisgKiBzeXNjdGwoMikgY2FuIGF1dG9tYXRpY2FsbHkgbWFuYWdlIHJlYWQgYW5kIHdyaXRlIHJlcXVlc3RzIHRocm91Z2gKKyAqIHRoZSBzeXNjdGwgdGFibGUuICBUaGUgZGF0YSBhbmQgbWF4bGVuIGZpZWxkcyBvZiB0aGUgY3RsX3RhYmxlCisgKiBzdHJ1Y3QgZW5hYmxlIG1pbmltYWwgdmFsaWRhdGlvbiBvZiB0aGUgdmFsdWVzIGJlaW5nIHdyaXR0ZW4gdG8gYmUKKyAqIHBlcmZvcm1lZCwgYW5kIHRoZSBtb2RlIGZpZWxkIGFsbG93cyBtaW5pbWFsIGF1dGhlbnRpY2F0aW9uLgorICogCisgKiBNb3JlIHNvcGhpc3RpY2F0ZWQgbWFuYWdlbWVudCBjYW4gYmUgZW5hYmxlZCBieSB0aGUgcHJvdmlzaW9uIG9mIGEKKyAqIHN0cmF0ZWd5IHJvdXRpbmUgd2l0aCB0aGUgdGFibGUgZW50cnkuICBUaGlzIHdpbGwgYmUgY2FsbGVkIGJlZm9yZQorICogYW55IGF1dG9tYXRpYyByZWFkIG9yIHdyaXRlIG9mIHRoZSBkYXRhIGlzIHBlcmZvcm1lZC4KKyAqIAorICogVGhlIHN0cmF0ZWd5IHJvdXRpbmUgbWF5IHJldHVybjoKKyAqIDwwOiBFcnJvciBvY2N1cnJlZCAoZXJyb3IgaXMgcGFzc2VkIHRvIHVzZXIgcHJvY2VzcykKKyAqIDA6ICBPSyAtIHByb2NlZWQgd2l0aCBhdXRvbWF0aWMgcmVhZCBvciB3cml0ZS4KKyAqID4wOiBPSyAtIHJlYWQgb3Igd3JpdGUgaGFzIGJlZW4gZG9uZSBieSB0aGUgc3RyYXRlZ3kgcm91dGluZSwgc28gCisgKiAgICAgcmV0dXJuIGltbWVkaWF0ZWx5LgorICogCisgKiBUaGVyZSBtdXN0IGJlIGEgcHJvY19oYW5kbGVyIHJvdXRpbmUgZm9yIGFueSB0ZXJtaW5hbCBub2RlcworICogbWlycm9yZWQgdW5kZXIgL3Byb2Mvc3lzIChub24tdGVybWluYWxzIGFyZSBoYW5kbGVkIGJ5IGEgYnVpbHQtaW4KKyAqIGRpcmVjdG9yeSBoYW5kbGVyKS4gIFNldmVyYWwgZGVmYXVsdCBoYW5kbGVycyBhcmUgYXZhaWxhYmxlIHRvCisgKiBjb3ZlciBjb21tb24gY2FzZXMuCisgKi8KKworLyogQSBzeXNjdGwgdGFibGUgaXMgYW4gYXJyYXkgb2Ygc3RydWN0IGN0bF90YWJsZTogKi8KK3N0cnVjdCBjdGxfdGFibGUgCit7CisJaW50IGN0bF9uYW1lOwkJCS8qIEJpbmFyeSBJRCAqLworCWNvbnN0IGNoYXIgKnByb2NuYW1lOwkJLyogVGV4dCBJRCBmb3IgL3Byb2Mvc3lzLCBvciB6ZXJvICovCisJdm9pZCAqZGF0YTsKKwlpbnQgbWF4bGVuOworCW1vZGVfdCBtb2RlOworCWN0bF90YWJsZSAqY2hpbGQ7CisJcHJvY19oYW5kbGVyICpwcm9jX2hhbmRsZXI7CS8qIENhbGxiYWNrIGZvciB0ZXh0IGZvcm1hdHRpbmcgKi8KKwljdGxfaGFuZGxlciAqc3RyYXRlZ3k7CQkvKiBDYWxsYmFjayBmdW5jdGlvbiBmb3IgYWxsIHIvdyAqLworCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZGU7CS8qIC9wcm9jIGNvbnRyb2wgYmxvY2sgKi8KKwl2b2lkICpleHRyYTE7CisJdm9pZCAqZXh0cmEyOworfTsKKworLyogc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgaXMgdXNlZCB0byBtYWludGFpbiBkeW5hbWljIGxpc3RzIG9mCisgICBjdGxfdGFibGUgdHJlZXMuICovCitzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlcgoreworCWN0bF90YWJsZSAqY3RsX3RhYmxlOworCXN0cnVjdCBsaXN0X2hlYWQgY3RsX2VudHJ5OworfTsKKworc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKiByZWdpc3Rlcl9zeXNjdGxfdGFibGUoY3RsX3RhYmxlICogdGFibGUsIAorCQkJCQkJaW50IGluc2VydF9hdF9oZWFkKTsKK3ZvaWQgdW5yZWdpc3Rlcl9zeXNjdGxfdGFibGUoc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKiB0YWJsZSk7CisKKyNlbHNlIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9MSU5VWF9TWVNDVExfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zeXNkZXYuaCBiL2luY2x1ZGUvbGludXgvc3lzZGV2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM1ZGIxZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvc3lzZGV2LmgKQEAgLTAsMCArMSw5NCBAQAorLyoqCisgKiBTeXN0ZW0gZGV2aWNlcyBmb2xsb3cgYSBzbGlnaHRseSBkaWZmZXJlbnQgZHJpdmVyIG1vZGVsLiAKKyAqIFRoZXkgZG9uJ3QgbmVlZCB0byBkbyBkeW5hbW1pYyBkcml2ZXIgYmluZGluZywgY2FuJ3QgYmUgcHJvYmVkLCAKKyAqIGFuZCBkb24ndCByZXNpZGUgb24gYW55IHR5cGUgb2YgcGVyaXBoZXJhbCBidXMuIAorICogU28sIHdlIHJlcHJlc2VudCBhbmQgdHJlYXQgdGhlbSBhIGxpdHRsZSBkaWZmZXJlbnRseS4KKyAqIAorICogV2Ugc3RpbGwgaGF2ZSBhIG5vdGlvbiBvZiBhIGRyaXZlciBmb3IgYSBzeXN0ZW0gZGV2aWNlLCBiZWNhdXNlIHdlIHN0aWxsCisgKiB3YW50IHRvIHBlcmZvcm0gYmFzaWMgb3BlcmF0aW9ucyBvbiB0aGVzZSBkZXZpY2VzLiAKKyAqCisgKiBXZSBhbHNvIHN1cHBvcnQgYXV4aWxsYXJ5IGRyaXZlcnMgYmluZGluZyB0byBkZXZpY2VzIG9mIGEgY2VydGFpbiBjbGFzcy4KKyAqIAorICogVGhpcyBhbGxvd3MgY29uZmlndXJhYmxlIGRyaXZlcnMgdG8gcmVnaXN0ZXIgdGhlbXNlbHZlcyBmb3IgZGV2aWNlcyBvZgorICogYSBjZXJ0YWluIHR5cGUuIEFuZCwgaXQgYWxsb3dzIGNsYXNzIGRlZmluaXRpb25zIHRvIHJlc2lkZSBpbiBnZW5lcmljCisgKiBjb2RlIHdoaWxlIGFyY2gtc3BlY2lmaWMgY29kZSBjYW4gcmVnaXN0ZXIgc3BlY2lmaWMgZHJpdmVycy4KKyAqCisgKiBBdXhpbGxhcnkgZHJpdmVycyByZWdpc3RlcmVkIHdpdGggYSBOVUxMIGNscyBhcmUgcmVnaXN0ZXJlZCBhcyBkcml2ZXJzCisgKiBmb3IgYWxsIHN5c3RlbSBkZXZpY2VzLCBhbmQgZ2V0IG5vdGlmaWNhdGlvbiBjYWxscyBmb3IgZWFjaCBkZXZpY2UuIAorICovCisKKworI2lmbmRlZiBfU1lTREVWX0hfCisjZGVmaW5lIF9TWVNERVZfSF8KKworI2luY2x1ZGUgPGxpbnV4L2tvYmplY3QuaD4KKworCitzdHJ1Y3Qgc3lzX2RldmljZTsKKworc3RydWN0IHN5c2Rldl9jbGFzcyB7CisJc3RydWN0IGxpc3RfaGVhZAlkcml2ZXJzOworCisJLyogRGVmYXVsdCBvcGVyYXRpb25zIGZvciB0aGVzZSB0eXBlcyBvZiBkZXZpY2VzICovCisJaW50CSgqc2h1dGRvd24pKHN0cnVjdCBzeXNfZGV2aWNlICopOworCWludAkoKnN1c3BlbmQpKHN0cnVjdCBzeXNfZGV2aWNlICosIHUzMiBzdGF0ZSk7CisJaW50CSgqcmVzdW1lKShzdHJ1Y3Qgc3lzX2RldmljZSAqKTsKKwlzdHJ1Y3Qga3NldAkJa3NldDsKK307CisKKworZXh0ZXJuIGludCBzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoc3RydWN0IHN5c2Rldl9jbGFzcyAqKTsKK2V4dGVybiB2b2lkIHN5c2Rldl9jbGFzc191bnJlZ2lzdGVyKHN0cnVjdCBzeXNkZXZfY2xhc3MgKik7CisKKworLyoqCisgKiBBdXhpbGxhcnkgc3lzdGVtIGRldmljZSBkcml2ZXJzLgorICovCisKK3N0cnVjdCBzeXNkZXZfZHJpdmVyIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWVudHJ5OworCWludAkoKmFkZCkoc3RydWN0IHN5c19kZXZpY2UgKik7CisJaW50CSgqcmVtb3ZlKShzdHJ1Y3Qgc3lzX2RldmljZSAqKTsKKwlpbnQJKCpzaHV0ZG93bikoc3RydWN0IHN5c19kZXZpY2UgKik7CisJaW50CSgqc3VzcGVuZCkoc3RydWN0IHN5c19kZXZpY2UgKiwgdTMyIHN0YXRlKTsKKwlpbnQJKCpyZXN1bWUpKHN0cnVjdCBzeXNfZGV2aWNlICopOworfTsKKworCitleHRlcm4gaW50IHN5c2Rldl9kcml2ZXJfcmVnaXN0ZXIoc3RydWN0IHN5c2Rldl9jbGFzcyAqLCBzdHJ1Y3Qgc3lzZGV2X2RyaXZlciAqKTsKK2V4dGVybiB2b2lkIHN5c2Rldl9kcml2ZXJfdW5yZWdpc3RlcihzdHJ1Y3Qgc3lzZGV2X2NsYXNzICosIHN0cnVjdCBzeXNkZXZfZHJpdmVyICopOworCisKKy8qKgorICogc3lzX2RldmljZXMgY2FuIGJlIHNpbXBsaWZpZWQgYSBsb3QgZnJvbSByZWd1bGFyIGRldmljZXMsIGJlY2F1c2UgdGhleSdyZQorICogc2ltcGx5IG5vdCBhcyB2ZXJzYXRpbGUuIAorICovCisKK3N0cnVjdCBzeXNfZGV2aWNlIHsKKwl1MzIJCWlkOworCXN0cnVjdCBzeXNkZXZfY2xhc3MJKiBjbHM7CisJc3RydWN0IGtvYmplY3QJCWtvYmo7Cit9OworCitleHRlcm4gaW50IHN5c2Rldl9yZWdpc3RlcihzdHJ1Y3Qgc3lzX2RldmljZSAqKTsKK2V4dGVybiB2b2lkIHN5c2Rldl91bnJlZ2lzdGVyKHN0cnVjdCBzeXNfZGV2aWNlICopOworCisKK3N0cnVjdCBzeXNkZXZfYXR0cmlidXRlIHsgCisJc3RydWN0IGF0dHJpYnV0ZQlhdHRyOworCXNzaXplX3QgKCpzaG93KShzdHJ1Y3Qgc3lzX2RldmljZSAqLCBjaGFyICopOworCXNzaXplX3QgKCpzdG9yZSkoc3RydWN0IHN5c19kZXZpY2UgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOworfTsKKworCisjZGVmaW5lIFNZU0RFVl9BVFRSKF9uYW1lLF9tb2RlLF9zaG93LF9zdG9yZSkgCQlcCitzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSBhdHRyXyMjX25hbWUgPSB7IAkJCVwKKwkuYXR0ciA9IHsubmFtZSA9IF9fc3RyaW5naWZ5KF9uYW1lKSwgLm1vZGUgPSBfbW9kZSB9LAlcCisJLnNob3cJPSBfc2hvdywJCQkJCVwKKwkuc3RvcmUJPSBfc3RvcmUsCQkJCQlcCit9OworCitleHRlcm4gaW50IHN5c2Rldl9jcmVhdGVfZmlsZShzdHJ1Y3Qgc3lzX2RldmljZSAqLCBzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqKTsKK2V4dGVybiB2b2lkIHN5c2Rldl9yZW1vdmVfZmlsZShzdHJ1Y3Qgc3lzX2RldmljZSAqLCBzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqKTsKKworI2VuZGlmIC8qIF9TWVNERVZfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3lzZnMuaCBiL2luY2x1ZGUvbGludXgvc3lzZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjUwMmZmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9zeXNmcy5oCkBAIC0wLDAgKzEsMTgyIEBACisvKgorICogc3lzZnMuaCAtIGRlZmluaXRpb25zIGZvciB0aGUgZGV2aWNlIGRyaXZlciBmaWxlc3lzdGVtCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAxLDIwMDIgUGF0cmljayBNb2NoZWwKKyAqIENvcHlyaWdodCAoYykgMjAwNCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCisgKgorICogUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3N5c2ZzLnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAqLworCisjaWZuZGVmIF9TWVNGU19IXworI2RlZmluZSBfU1lTRlNfSF8KKworI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKworc3RydWN0IGtvYmplY3Q7CitzdHJ1Y3QgbW9kdWxlOworCitzdHJ1Y3QgYXR0cmlidXRlIHsKKwljaGFyCQkJKiBuYW1lOworCXN0cnVjdCBtb2R1bGUgCQkqIG93bmVyOworCW1vZGVfdAkJCW1vZGU7Cit9OworCitzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHsKKwljaGFyCQkJKiBuYW1lOworCXN0cnVjdCBhdHRyaWJ1dGUJKiogYXR0cnM7Cit9OworCisKKworLyoqCisgKiBVc2UgdGhlc2UgbWFjcm9zIHRvIG1ha2UgZGVmaW5pbmcgYXR0cmlidXRlcyBlYXNpZXIuIFNlZSBpbmNsdWRlL2xpbnV4L2RldmljZS5oCisgKiBmb3IgZXhhbXBsZXMuLgorICovCisKKyNkZWZpbmUgX19BVFRSKF9uYW1lLF9tb2RlLF9zaG93LF9zdG9yZSkgeyBcCisJLmF0dHIgPSB7Lm5hbWUgPSBfX3N0cmluZ2lmeShfbmFtZSksIC5tb2RlID0gX21vZGUsIC5vd25lciA9IFRISVNfTU9EVUxFIH0sCVwKKwkuc2hvdwk9IF9zaG93LAkJCQkJXAorCS5zdG9yZQk9IF9zdG9yZSwJCQkJCVwKK30KKworI2RlZmluZSBfX0FUVFJfUk8oX25hbWUpIHsgXAorCS5hdHRyCT0geyAubmFtZSA9IF9fc3RyaW5naWZ5KF9uYW1lKSwgLm1vZGUgPSAwNDQ0LCAub3duZXIgPSBUSElTX01PRFVMRSB9LAlcCisJLnNob3cJPSBfbmFtZSMjX3Nob3csCVwKK30KKworI2RlZmluZSBfX0FUVFJfTlVMTCB7IC5hdHRyID0geyAubmFtZSA9IE5VTEwgfSB9CisKKyNkZWZpbmUgYXR0cl9uYW1lKF9hdHRyKSAoX2F0dHIpLmF0dHIubmFtZQorCitzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Q7CisKK3N0cnVjdCBiaW5fYXR0cmlidXRlIHsKKwlzdHJ1Y3QgYXR0cmlidXRlCWF0dHI7CisJc2l6ZV90CQkJc2l6ZTsKKwl2b2lkCQkJKnByaXZhdGU7CisJc3NpemVfdCAoKnJlYWQpKHN0cnVjdCBrb2JqZWN0ICosIGNoYXIgKiwgbG9mZl90LCBzaXplX3QpOworCXNzaXplX3QgKCp3cml0ZSkoc3RydWN0IGtvYmplY3QgKiwgY2hhciAqLCBsb2ZmX3QsIHNpemVfdCk7CisJaW50ICgqbW1hcCkoc3RydWN0IGtvYmplY3QgKiwgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIsCisJCSAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7Cit9OworCitzdHJ1Y3Qgc3lzZnNfb3BzIHsKKwlzc2l6ZV90CSgqc2hvdykoc3RydWN0IGtvYmplY3QgKiwgc3RydWN0IGF0dHJpYnV0ZSAqLGNoYXIgKik7CisJc3NpemVfdAkoKnN0b3JlKShzdHJ1Y3Qga29iamVjdCAqLHN0cnVjdCBhdHRyaWJ1dGUgKixjb25zdCBjaGFyICosIHNpemVfdCk7Cit9OworCitzdHJ1Y3Qgc3lzZnNfZGlyZW50IHsKKwlhdG9taWNfdAkJc19jb3VudDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXNfc2libGluZzsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXNfY2hpbGRyZW47CisJdm9pZCAJCQkqIHNfZWxlbWVudDsKKwlpbnQJCQlzX3R5cGU7CisJdW1vZGVfdAkJCXNfbW9kZTsKKwlzdHJ1Y3QgZGVudHJ5CQkqIHNfZGVudHJ5OworfTsKKworI2RlZmluZSBTWVNGU19ST09UCQkweDAwMDEKKyNkZWZpbmUgU1lTRlNfRElSCQkweDAwMDIKKyNkZWZpbmUgU1lTRlNfS09CSl9BVFRSIAkweDAwMDQKKyNkZWZpbmUgU1lTRlNfS09CSl9CSU5fQVRUUgkweDAwMDgKKyNkZWZpbmUgU1lTRlNfS09CSl9MSU5LIAkweDAwMjAKKyNkZWZpbmUgU1lTRlNfTk9UX1BJTk5FRAkoU1lTRlNfS09CSl9BVFRSIHwgU1lTRlNfS09CSl9CSU5fQVRUUiB8IFNZU0ZTX0tPQkpfTElOSykKKworI2lmZGVmIENPTkZJR19TWVNGUworCitleHRlcm4gaW50CitzeXNmc19jcmVhdGVfZGlyKHN0cnVjdCBrb2JqZWN0ICopOworCitleHRlcm4gdm9pZAorc3lzZnNfcmVtb3ZlX2RpcihzdHJ1Y3Qga29iamVjdCAqKTsKKworZXh0ZXJuIGludAorc3lzZnNfcmVuYW1lX2RpcihzdHJ1Y3Qga29iamVjdCAqLCBjb25zdCBjaGFyICpuZXdfbmFtZSk7CisKK2V4dGVybiBpbnQKK3N5c2ZzX2NyZWF0ZV9maWxlKHN0cnVjdCBrb2JqZWN0ICosIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGUgKik7CisKK2V4dGVybiBpbnQKK3N5c2ZzX3VwZGF0ZV9maWxlKHN0cnVjdCBrb2JqZWN0ICosIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGUgKik7CisKK2V4dGVybiB2b2lkCitzeXNmc19yZW1vdmVfZmlsZShzdHJ1Y3Qga29iamVjdCAqLCBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlICopOworCitleHRlcm4gaW50IAorc3lzZnNfY3JlYXRlX2xpbmsoc3RydWN0IGtvYmplY3QgKiBrb2JqLCBzdHJ1Y3Qga29iamVjdCAqIHRhcmdldCwgY2hhciAqIG5hbWUpOworCitleHRlcm4gdm9pZAorc3lzZnNfcmVtb3ZlX2xpbmsoc3RydWN0IGtvYmplY3QgKiwgY2hhciAqIG5hbWUpOworCitpbnQgc3lzZnNfY3JlYXRlX2Jpbl9maWxlKHN0cnVjdCBrb2JqZWN0ICoga29iaiwgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKiBhdHRyKTsKK2ludCBzeXNmc19yZW1vdmVfYmluX2ZpbGUoc3RydWN0IGtvYmplY3QgKiBrb2JqLCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqIGF0dHIpOworCitpbnQgc3lzZnNfY3JlYXRlX2dyb3VwKHN0cnVjdCBrb2JqZWN0ICosIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKik7Cit2b2lkIHN5c2ZzX3JlbW92ZV9ncm91cChzdHJ1Y3Qga29iamVjdCAqLCBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICopOworCisjZWxzZSAvKiBDT05GSUdfU1lTRlMgKi8KKworc3RhdGljIGlubGluZSBpbnQgc3lzZnNfY3JlYXRlX2RpcihzdHJ1Y3Qga29iamVjdCAqIGspCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzeXNmc19yZW1vdmVfZGlyKHN0cnVjdCBrb2JqZWN0ICogaykKK3sKKwk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHN5c2ZzX3JlbmFtZV9kaXIoc3RydWN0IGtvYmplY3QgKiBrLCBjb25zdCBjaGFyICpuZXdfbmFtZSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgc3lzZnNfY3JlYXRlX2ZpbGUoc3RydWN0IGtvYmplY3QgKiBrLCBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlICogYSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgc3lzZnNfdXBkYXRlX2ZpbGUoc3RydWN0IGtvYmplY3QgKiBrLCBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlICogYSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN5c2ZzX3JlbW92ZV9maWxlKHN0cnVjdCBrb2JqZWN0ICogaywgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZSAqIGEpCit7CisJOworfQorCitzdGF0aWMgaW5saW5lIGludCBzeXNmc19jcmVhdGVfbGluayhzdHJ1Y3Qga29iamVjdCAqIGssIHN0cnVjdCBrb2JqZWN0ICogdCwgY2hhciAqIG4pCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzeXNmc19yZW1vdmVfbGluayhzdHJ1Y3Qga29iamVjdCAqIGssIGNoYXIgKiBuYW1lKQoreworCTsKK30KKworCitzdGF0aWMgaW5saW5lIGludCBzeXNmc19jcmVhdGVfYmluX2ZpbGUoc3RydWN0IGtvYmplY3QgKiBrLCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqIGEpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHN5c2ZzX3JlbW92ZV9iaW5fZmlsZShzdHJ1Y3Qga29iamVjdCAqIGssIHN0cnVjdCBiaW5fYXR0cmlidXRlICogYSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgc3lzZnNfY3JlYXRlX2dyb3VwKHN0cnVjdCBrb2JqZWN0ICogaywgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqZykKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN5c2ZzX3JlbW92ZV9ncm91cChzdHJ1Y3Qga29iamVjdCAqIGssIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKiBnKQoreworCTsKK30KKworI2VuZGlmIC8qIENPTkZJR19TWVNGUyAqLworCisjZW5kaWYgLyogX1NZU0ZTX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N5c3JxLmggYi9pbmNsdWRlL2xpbnV4L3N5c3JxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE4MTliOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvc3lzcnEuaApAQCAtMCwwICsxLDYwIEBACisvKiAtKi0gbGludXgtYyAtKi0KKyAqCisgKgkkSWQ6IHN5c3JxLmgsdiAxLjMgMTk5Ny8wNy8xNyAxMTo1NDozMyBtaiBFeHAgJAorICoKKyAqCUxpbnV4IE1hZ2ljIFN5c3RlbSBSZXF1ZXN0IEtleSBIYWNrcworICoKKyAqCShjKSAxOTk3IE1hcnRpbiBNYXJlcyA8bWpAYXRyZXkua2FybGluLm1mZi5jdW5pLmN6PgorICoKKyAqCShjKSAyMDAwIENydXRjaGVyIER1bm5hdmFudCA8Y3J1dGNoZXIra2VybmVsQGRhdGFzdGFja3MuY29tPgorICoJb3ZlcmhhdWxlZCB0byB1c2Uga2V5IHJlZ2lzdHJhdGlvbgorICoJYmFzZWQgdXBvbiBkaXNjdXNpb25zIGluIGlyYzovL2lyYy5vcGVucHJvamVjdHMubmV0LyNrZXJuZWxuZXdiaWVzCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCitzdHJ1Y3QgcHRfcmVnczsKK3N0cnVjdCB0dHlfc3RydWN0OworCisvKiBQb3NzaWJsZSB2YWx1ZXMgb2YgYml0bWFzayBmb3IgZW5hYmxpbmcgc3lzcnEgZnVuY3Rpb25zICovCisvKiAweDAwMDEgaXMgcmVzZXJ2ZWQgZm9yIGVuYWJsZSBldmVyeXRoaW5nICovCisjZGVmaW5lIFNZU1JRX0VOQUJMRV9MT0cJMHgwMDAyCisjZGVmaW5lIFNZU1JRX0VOQUJMRV9LRVlCT0FSRAkweDAwMDQKKyNkZWZpbmUgU1lTUlFfRU5BQkxFX0RVTVAJMHgwMDA4CisjZGVmaW5lIFNZU1JRX0VOQUJMRV9TWU5DCTB4MDAxMAorI2RlZmluZSBTWVNSUV9FTkFCTEVfUkVNT1VOVAkweDAwMjAKKyNkZWZpbmUgU1lTUlFfRU5BQkxFX1NJR05BTAkweDAwNDAKKyNkZWZpbmUgU1lTUlFfRU5BQkxFX0JPT1QJMHgwMDgwCisjZGVmaW5lIFNZU1JRX0VOQUJMRV9SVE5JQ0UJMHgwMTAwCisKK3N0cnVjdCBzeXNycV9rZXlfb3AgeworCXZvaWQgKCpoYW5kbGVyKShpbnQsIHN0cnVjdCBwdF9yZWdzICosIHN0cnVjdCB0dHlfc3RydWN0ICopOworCWNoYXIgKmhlbHBfbXNnOworCWNoYXIgKmFjdGlvbl9tc2c7CisJaW50IGVuYWJsZV9tYXNrOworfTsKKworI2lmZGVmIENPTkZJR19NQUdJQ19TWVNSUQorCisvKiBHZW5lcmljIFN5c1JxIGludGVyZmFjZSAtLSB5b3UgbWF5IGNhbGwgaXQgZnJvbSBhbnkgZGV2aWNlIGRyaXZlciwgc3VwcGx5aW5nCisgKiBBU0NJSSBjb2RlIG9mIHRoZSBrZXksIHBvaW50ZXIgdG8gcmVnaXN0ZXJzIGFuZCBrYmQvdHR5IHN0cnVjdHMgKGlmIHRoZXkKKyAqIGFyZSBhdmFpbGFibGUgLS0gZWxzZSBOVUxMJ3MpLgorICovCisKK3ZvaWQgaGFuZGxlX3N5c3JxKGludCwgc3RydWN0IHB0X3JlZ3MgKiwgc3RydWN0IHR0eV9zdHJ1Y3QgKik7Cit2b2lkIF9faGFuZGxlX3N5c3JxKGludCwgc3RydWN0IHB0X3JlZ3MgKiwgc3RydWN0IHR0eV9zdHJ1Y3QgKiwgaW50IGNoZWNrX21hc2spOworaW50IHJlZ2lzdGVyX3N5c3JxX2tleShpbnQsIHN0cnVjdCBzeXNycV9rZXlfb3AgKik7CitpbnQgdW5yZWdpc3Rlcl9zeXNycV9rZXkoaW50LCBzdHJ1Y3Qgc3lzcnFfa2V5X29wICopOworc3RydWN0IHN5c3JxX2tleV9vcCAqX19zeXNycV9nZXRfa2V5X29wKGludCBrZXkpOworCisjZWxzZQorCitzdGF0aWMgaW5saW5lIGludCBfX3JldGVycih2b2lkKQoreworCXJldHVybiAtRUlOVkFMOworfQorCisjZGVmaW5lIHJlZ2lzdGVyX3N5c3JxX2tleShpZyxub3JlKSBfX3JldGVycigpCisjZGVmaW5lIHVucmVnaXN0ZXJfc3lzcnFfa2V5KGlnLG5vcmUpIF9fcmV0ZXJyKCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N5c3ZfZnMuaCBiL2luY2x1ZGUvbGludXgvc3lzdl9mcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwMjQ4NjMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3N5c3ZfZnMuaApAQCAtMCwwICsxLDIwNiBAQAorI2lmbmRlZiBfTElOVVhfU1lTVl9GU19ICisjZGVmaW5lIF9MSU5VWF9TWVNWX0ZTX0gKKworI2lmIGRlZmluZWQoX19HTlVDX18pCisjIGRlZmluZSBfX3BhY2tlZDJfXwlfX2F0dHJpYnV0ZV9fKChwYWNrZWQsIGFsaWduZWQoMikpKQorI2Vsc2UKKz4+IEkgd2FudCB0byBzY3JlYW0hIDw8CisjZW5kaWYKKworCisjaWZuZGVmIF9fS0VSTkVMX18KK3R5cGVkZWYgdTE2IF9fZnMxNjsKK3R5cGVkZWYgdTMyIF9fZnMxNjsKKyNlbmRpZgorCisvKiBpbm9kZSBudW1iZXJzIGFyZSAxNiBiaXQgKi8KK3R5cGVkZWYgX19mczE2IHN5c3ZfaW5vX3Q7CisKKy8qIEJsb2NrIG51bWJlcnMgYXJlIDI0IGJpdCwgc29tZXRpbWVzIHN0b3JlZCBpbiAzMiBiaXQuCisgICBPbiBDb2hlcmVudCBGUywgdGhleSBhcmUgYWx3YXlzIHN0b3JlZCBpbiBQRFAtMTEgbWFubmVyOiB0aGUgbGVhc3QKKyAgIHNpZ25pZmljYW50IDE2IGJpdHMgY29tZSBsYXN0LiAqLwordHlwZWRlZiBfX2ZzMzIgc3lzdl96b25lX3Q7CisKKy8qIDAgaXMgbm9uLWV4aXN0ZW50ICovCisjZGVmaW5lIFNZU1ZfQkFEQkxfSU5PCTEJLyogaW5vZGUgb2YgYmFkIGJsb2NrcyBmaWxlICovCisjZGVmaW5lIFNZU1ZfUk9PVF9JTk8JMgkvKiBpbm9kZSBvZiByb290IGRpcmVjdG9yeSAqLworCisKKy8qIFhlbml4IHN1cGVyLWJsb2NrIGRhdGEgb24gZGlzayAqLworI2RlZmluZSBYRU5JWF9OSUNJTk9ECTEwMAkvKiBudW1iZXIgb2YgaW5vZGUgY2FjaGUgZW50cmllcyAqLworI2RlZmluZSBYRU5JWF9OSUNGUkVFCTEwMAkvKiBudW1iZXIgb2YgZnJlZSBibG9jayBsaXN0IGNodW5rIGVudHJpZXMgKi8KK3N0cnVjdCB4ZW5peF9zdXBlcl9ibG9jayB7CisJX19mczE2CQlzX2lzaXplOyAvKiBpbmRleCBvZiBmaXJzdCBkYXRhIHpvbmUgKi8KKwlfX2ZzMzIJCXNfZnNpemUgX19wYWNrZWQyX187IC8qIHRvdGFsIG51bWJlciBvZiB6b25lcyBvZiB0aGlzIGZzICovCisJLyogdGhlIHN0YXJ0IG9mIHRoZSBmcmVlIGJsb2NrIGxpc3Q6ICovCisJX19mczE2CQlzX25mcmVlOwkvKiBudW1iZXIgb2YgZnJlZSBibG9ja3MgaW4gc19mcmVlLCA8PSBYRU5JWF9OSUNGUkVFICovCisJc3lzdl96b25lX3QJc19mcmVlW1hFTklYX05JQ0ZSRUVdOyAvKiBmaXJzdCBmcmVlIGJsb2NrIGxpc3QgY2h1bmsgKi8KKwkvKiB0aGUgY2FjaGUgb2YgZnJlZSBpbm9kZXM6ICovCisJX19mczE2CQlzX25pbm9kZTsgLyogbnVtYmVyIG9mIGZyZWUgaW5vZGVzIGluIHNfaW5vZGUsIDw9IFhFTklYX05JQ0lOT0QgKi8KKwlzeXN2X2lub190CXNfaW5vZGVbWEVOSVhfTklDSU5PRF07IC8qIHNvbWUgZnJlZSBpbm9kZXMgKi8KKwkvKiBsb2Nrcywgbm90IHVzZWQgYnkgTGludXg6ICovCisJY2hhcgkJc19mbG9jazsJLyogbG9jayBkdXJpbmcgZnJlZSBibG9jayBsaXN0IG1hbmlwdWxhdGlvbiAqLworCWNoYXIJCXNfaWxvY2s7CS8qIGxvY2sgZHVyaW5nIGlub2RlIGNhY2hlIG1hbmlwdWxhdGlvbiAqLworCWNoYXIJCXNfZm1vZDsJCS8qIHN1cGVyLWJsb2NrIG1vZGlmaWVkIGZsYWcgKi8KKwljaGFyCQlzX3Jvbmx5OwkvKiBmbGFnIHdoZXRoZXIgZnMgaXMgbW91bnRlZCByZWFkLW9ubHkgKi8KKwlfX2ZzMzIJCXNfdGltZSBfX3BhY2tlZDJfXzsgLyogdGltZSBvZiBsYXN0IHN1cGVyIGJsb2NrIHVwZGF0ZSAqLworCV9fZnMzMgkJc190ZnJlZSBfX3BhY2tlZDJfXzsgLyogdG90YWwgbnVtYmVyIG9mIGZyZWUgem9uZXMgKi8KKwlfX2ZzMTYJCXNfdGlub2RlOwkvKiB0b3RhbCBudW1iZXIgb2YgZnJlZSBpbm9kZXMgKi8KKwlfX2ZzMTYJCXNfZGluZm9bNF07CS8qIGRldmljZSBpbmZvcm1hdGlvbiA/PyAqLworCWNoYXIJCXNfZm5hbWVbNl07CS8qIGZpbGUgc3lzdGVtIHZvbHVtZSBuYW1lICovCisJY2hhcgkJc19mcGFja1s2XTsJLyogZmlsZSBzeXN0ZW0gcGFjayBuYW1lICovCisJY2hhcgkJc19jbGVhbjsJLyogc2V0IHRvIDB4NDYgd2hlbiBmaWxlc3lzdGVtIGlzIHByb3Blcmx5IHVubW91bnRlZCAqLworCWNoYXIJCXNfZmlsbFszNzFdOworCXMzMgkJc19tYWdpYzsJLyogdmVyc2lvbiBvZiBmaWxlIHN5c3RlbSAqLworCV9fZnMzMgkJc190eXBlOwkJLyogdHlwZSBvZiBmaWxlIHN5c3RlbTogMSBmb3IgNTEyIGJ5dGUgYmxvY2tzCisJCQkJCQkJCTIgZm9yIDEwMjQgYnl0ZSBibG9ja3MKKwkJCQkJCQkJMyBmb3IgMjA0OCBieXRlIGJsb2NrcyAqLworCQkJCQkJCQkKK307CisKKy8qCisgKiBTeXN0ZW1WIEZTIGNvbWVzIGluIHR3byB2YXJpYW50czoKKyAqIHN5c3YyOiBTeXN0ZW0gViBSZWxlYXNlIDIgKGUuZy4gTWljcm9wb3J0KSwgc3RydWN0dXJlIGVsZW1lbnRzIGFsaWduZWQoMikuCisgKiBzeXN2NDogU3lzdGVtIFYgUmVsZWFzZSA0IChlLmcuIENvbnNlbnN5cyksIHN0cnVjdHVyZSBlbGVtZW50cyBhbGlnbmVkKDQpLgorICovCisjZGVmaW5lIFNZU1ZfTklDSU5PRAkxMDAJLyogbnVtYmVyIG9mIGlub2RlIGNhY2hlIGVudHJpZXMgKi8KKyNkZWZpbmUgU1lTVl9OSUNGUkVFCTUwCS8qIG51bWJlciBvZiBmcmVlIGJsb2NrIGxpc3QgY2h1bmsgZW50cmllcyAqLworCisvKiBTeXN0ZW1WNCBzdXBlci1ibG9jayBkYXRhIG9uIGRpc2sgKi8KK3N0cnVjdCBzeXN2NF9zdXBlcl9ibG9jayB7CisJX19mczE2CXNfaXNpemU7CS8qIGluZGV4IG9mIGZpcnN0IGRhdGEgem9uZSAqLworCXUxNglzX3BhZDA7CisJX19mczMyCXNfZnNpemU7CS8qIHRvdGFsIG51bWJlciBvZiB6b25lcyBvZiB0aGlzIGZzICovCisJLyogdGhlIHN0YXJ0IG9mIHRoZSBmcmVlIGJsb2NrIGxpc3Q6ICovCisJX19mczE2CXNfbmZyZWU7CS8qIG51bWJlciBvZiBmcmVlIGJsb2NrcyBpbiBzX2ZyZWUsIDw9IFNZU1ZfTklDRlJFRSAqLworCXUxNglzX3BhZDE7CisJc3lzdl96b25lX3QJc19mcmVlW1NZU1ZfTklDRlJFRV07IC8qIGZpcnN0IGZyZWUgYmxvY2sgbGlzdCBjaHVuayAqLworCS8qIHRoZSBjYWNoZSBvZiBmcmVlIGlub2RlczogKi8KKwlfX2ZzMTYJc19uaW5vZGU7CS8qIG51bWJlciBvZiBmcmVlIGlub2RlcyBpbiBzX2lub2RlLCA8PSBTWVNWX05JQ0lOT0QgKi8KKwl1MTYJc19wYWQyOworCXN5c3ZfaW5vX3QgICAgIHNfaW5vZGVbU1lTVl9OSUNJTk9EXTsgLyogc29tZSBmcmVlIGlub2RlcyAqLworCS8qIGxvY2tzLCBub3QgdXNlZCBieSBMaW51eDogKi8KKwljaGFyCXNfZmxvY2s7CS8qIGxvY2sgZHVyaW5nIGZyZWUgYmxvY2sgbGlzdCBtYW5pcHVsYXRpb24gKi8KKwljaGFyCXNfaWxvY2s7CS8qIGxvY2sgZHVyaW5nIGlub2RlIGNhY2hlIG1hbmlwdWxhdGlvbiAqLworCWNoYXIJc19mbW9kOwkJLyogc3VwZXItYmxvY2sgbW9kaWZpZWQgZmxhZyAqLworCWNoYXIJc19yb25seTsJLyogZmxhZyB3aGV0aGVyIGZzIGlzIG1vdW50ZWQgcmVhZC1vbmx5ICovCisJX19mczMyCXNfdGltZTsJCS8qIHRpbWUgb2YgbGFzdCBzdXBlciBibG9jayB1cGRhdGUgKi8KKwlfX2ZzMTYJc19kaW5mb1s0XTsJLyogZGV2aWNlIGluZm9ybWF0aW9uID8/ICovCisJX19mczMyCXNfdGZyZWU7CS8qIHRvdGFsIG51bWJlciBvZiBmcmVlIHpvbmVzICovCisJX19mczE2CXNfdGlub2RlOwkvKiB0b3RhbCBudW1iZXIgb2YgZnJlZSBpbm9kZXMgKi8KKwl1MTYJc19wYWQzOworCWNoYXIJc19mbmFtZVs2XTsJLyogZmlsZSBzeXN0ZW0gdm9sdW1lIG5hbWUgKi8KKwljaGFyCXNfZnBhY2tbNl07CS8qIGZpbGUgc3lzdGVtIHBhY2sgbmFtZSAqLworCXMzMglzX2ZpbGxbMTJdOworCV9fZnMzMglzX3N0YXRlOwkvKiBmaWxlIHN5c3RlbSBzdGF0ZTogMHg3YzI2OWQzOC1zX3RpbWUgbWVhbnMgY2xlYW4gKi8KKwlzMzIJc19tYWdpYzsJLyogdmVyc2lvbiBvZiBmaWxlIHN5c3RlbSAqLworCV9fZnMzMglzX3R5cGU7CQkvKiB0eXBlIG9mIGZpbGUgc3lzdGVtOiAxIGZvciA1MTIgYnl0ZSBibG9ja3MKKwkJCQkJCQkJMiBmb3IgMTAyNCBieXRlIGJsb2NrcyAqLworfTsKKworLyogU3lzdGVtVjIgc3VwZXItYmxvY2sgZGF0YSBvbiBkaXNrICovCitzdHJ1Y3Qgc3lzdjJfc3VwZXJfYmxvY2sgeworCV9fZnMxNglzX2lzaXplOyAJCS8qIGluZGV4IG9mIGZpcnN0IGRhdGEgem9uZSAqLworCV9fZnMzMglzX2ZzaXplIF9fcGFja2VkMl9fOwkvKiB0b3RhbCBudW1iZXIgb2Ygem9uZXMgb2YgdGhpcyBmcyAqLworCS8qIHRoZSBzdGFydCBvZiB0aGUgZnJlZSBibG9jayBsaXN0OiAqLworCV9fZnMxNglzX25mcmVlOwkJLyogbnVtYmVyIG9mIGZyZWUgYmxvY2tzIGluIHNfZnJlZSwgPD0gU1lTVl9OSUNGUkVFICovCisJc3lzdl96b25lX3Qgc19mcmVlW1NZU1ZfTklDRlJFRV07CS8qIGZpcnN0IGZyZWUgYmxvY2sgbGlzdCBjaHVuayAqLworCS8qIHRoZSBjYWNoZSBvZiBmcmVlIGlub2RlczogKi8KKwlfX2ZzMTYJc19uaW5vZGU7CQkvKiBudW1iZXIgb2YgZnJlZSBpbm9kZXMgaW4gc19pbm9kZSwgPD0gU1lTVl9OSUNJTk9EICovCisJc3lzdl9pbm9fdCAgICAgc19pbm9kZVtTWVNWX05JQ0lOT0RdOyAvKiBzb21lIGZyZWUgaW5vZGVzICovCisJLyogbG9ja3MsIG5vdCB1c2VkIGJ5IExpbnV4OiAqLworCWNoYXIJc19mbG9jazsJCS8qIGxvY2sgZHVyaW5nIGZyZWUgYmxvY2sgbGlzdCBtYW5pcHVsYXRpb24gKi8KKwljaGFyCXNfaWxvY2s7CQkvKiBsb2NrIGR1cmluZyBpbm9kZSBjYWNoZSBtYW5pcHVsYXRpb24gKi8KKwljaGFyCXNfZm1vZDsJCQkvKiBzdXBlci1ibG9jayBtb2RpZmllZCBmbGFnICovCisJY2hhcglzX3Jvbmx5OwkJLyogZmxhZyB3aGV0aGVyIGZzIGlzIG1vdW50ZWQgcmVhZC1vbmx5ICovCisJX19mczMyCXNfdGltZSBfX3BhY2tlZDJfXzsJLyogdGltZSBvZiBsYXN0IHN1cGVyIGJsb2NrIHVwZGF0ZSAqLworCV9fZnMxNglzX2RpbmZvWzRdOwkJLyogZGV2aWNlIGluZm9ybWF0aW9uID8/ICovCisJX19mczMyCXNfdGZyZWUgX19wYWNrZWQyX187CS8qIHRvdGFsIG51bWJlciBvZiBmcmVlIHpvbmVzICovCisJX19mczE2CXNfdGlub2RlOwkJLyogdG90YWwgbnVtYmVyIG9mIGZyZWUgaW5vZGVzICovCisJY2hhcglzX2ZuYW1lWzZdOwkJLyogZmlsZSBzeXN0ZW0gdm9sdW1lIG5hbWUgKi8KKwljaGFyCXNfZnBhY2tbNl07CQkvKiBmaWxlIHN5c3RlbSBwYWNrIG5hbWUgKi8KKwlzMzIJc19maWxsWzE0XTsKKwlfX2ZzMzIJc19zdGF0ZTsJCS8qIGZpbGUgc3lzdGVtIHN0YXRlOiAweGNiMDk2ZjQzIG1lYW5zIGNsZWFuICovCisJczMyCXNfbWFnaWM7CQkvKiB2ZXJzaW9uIG9mIGZpbGUgc3lzdGVtICovCisJX19mczMyCXNfdHlwZTsJCQkvKiB0eXBlIG9mIGZpbGUgc3lzdGVtOiAxIGZvciA1MTIgYnl0ZSBibG9ja3MKKwkJCQkJCQkJMiBmb3IgMTAyNCBieXRlIGJsb2NrcyAqLworfTsKKworLyogVjcgc3VwZXItYmxvY2sgZGF0YSBvbiBkaXNrICovCisjZGVmaW5lIFY3X05JQ0lOT0QgICAgIDEwMCAgICAgLyogbnVtYmVyIG9mIGlub2RlIGNhY2hlIGVudHJpZXMgKi8KKyNkZWZpbmUgVjdfTklDRlJFRSAgICAgNTAgICAgICAvKiBudW1iZXIgb2YgZnJlZSBibG9jayBsaXN0IGNodW5rIGVudHJpZXMgKi8KK3N0cnVjdCB2N19zdXBlcl9ibG9jayB7CisJX19mczE2IHNfaXNpemU7ICAgICAgICAvKiBpbmRleCBvZiBmaXJzdCBkYXRhIHpvbmUgKi8KKwlfX2ZzMzIgc19mc2l6ZSBfX3BhY2tlZDJfXzsgLyogdG90YWwgbnVtYmVyIG9mIHpvbmVzIG9mIHRoaXMgZnMgKi8KKwkvKiB0aGUgc3RhcnQgb2YgdGhlIGZyZWUgYmxvY2sgbGlzdDogKi8KKwlfX2ZzMTYgc19uZnJlZTsgICAgICAgIC8qIG51bWJlciBvZiBmcmVlIGJsb2NrcyBpbiBzX2ZyZWUsIDw9IFY3X05JQ0ZSRUUgKi8KKwlzeXN2X3pvbmVfdCBzX2ZyZWVbVjdfTklDRlJFRV07IC8qIGZpcnN0IGZyZWUgYmxvY2sgbGlzdCBjaHVuayAqLworCS8qIHRoZSBjYWNoZSBvZiBmcmVlIGlub2RlczogKi8KKwlfX2ZzMTYgc19uaW5vZGU7ICAgICAgIC8qIG51bWJlciBvZiBmcmVlIGlub2RlcyBpbiBzX2lub2RlLCA8PSBWN19OSUNJTk9EICovCisJc3lzdl9pbm9fdCAgICAgIHNfaW5vZGVbVjdfTklDSU5PRF07IC8qIHNvbWUgZnJlZSBpbm9kZXMgKi8KKwkvKiBsb2Nrcywgbm90IHVzZWQgYnkgTGludXggb3IgVjc6ICovCisJY2hhciAgICBzX2Zsb2NrOyAgICAgICAgLyogbG9jayBkdXJpbmcgZnJlZSBibG9jayBsaXN0IG1hbmlwdWxhdGlvbiAqLworCWNoYXIgICAgc19pbG9jazsgICAgICAgIC8qIGxvY2sgZHVyaW5nIGlub2RlIGNhY2hlIG1hbmlwdWxhdGlvbiAqLworCWNoYXIgICAgc19mbW9kOyAgICAgICAgIC8qIHN1cGVyLWJsb2NrIG1vZGlmaWVkIGZsYWcgKi8KKwljaGFyICAgIHNfcm9ubHk7ICAgICAgICAvKiBmbGFnIHdoZXRoZXIgZnMgaXMgbW91bnRlZCByZWFkLW9ubHkgKi8KKwlfX2ZzMzIgIHNfdGltZSBfX3BhY2tlZDJfXzsgLyogdGltZSBvZiBsYXN0IHN1cGVyIGJsb2NrIHVwZGF0ZSAqLworCS8qIHRoZSBmb2xsb3dpbmcgZmllbGRzIGFyZSBub3QgbWFpbnRhaW5lZCBieSBWNzogKi8KKwlfX2ZzMzIgIHNfdGZyZWUgX19wYWNrZWQyX187IC8qIHRvdGFsIG51bWJlciBvZiBmcmVlIHpvbmVzICovCisJX19mczE2ICBzX3Rpbm9kZTsgICAgICAgLyogdG90YWwgbnVtYmVyIG9mIGZyZWUgaW5vZGVzICovCisJX19mczE2ICBzX207ICAgICAgICAgICAgLyogaW50ZXJsZWF2ZSBmYWN0b3IgKi8KKwlfX2ZzMTYgIHNfbjsgICAgICAgICAgICAvKiBpbnRlcmxlYXZlIGZhY3RvciAqLworCWNoYXIgICAgc19mbmFtZVs2XTsgICAgIC8qIGZpbGUgc3lzdGVtIG5hbWUgKi8KKwljaGFyICAgIHNfZnBhY2tbNl07ICAgICAvKiBmaWxlIHN5c3RlbSBwYWNrIG5hbWUgKi8KK307CisKKy8qIENvaGVyZW50IHN1cGVyLWJsb2NrIGRhdGEgb24gZGlzayAqLworI2RlZmluZSBDT0hfTklDSU5PRAkxMDAJLyogbnVtYmVyIG9mIGlub2RlIGNhY2hlIGVudHJpZXMgKi8KKyNkZWZpbmUgQ09IX05JQ0ZSRUUJNjQJLyogbnVtYmVyIG9mIGZyZWUgYmxvY2sgbGlzdCBjaHVuayBlbnRyaWVzICovCitzdHJ1Y3QgY29oX3N1cGVyX2Jsb2NrIHsKKwlfX2ZzMTYJCXNfaXNpemU7CS8qIGluZGV4IG9mIGZpcnN0IGRhdGEgem9uZSAqLworCV9fZnMzMgkJc19mc2l6ZSBfX3BhY2tlZDJfXzsgLyogdG90YWwgbnVtYmVyIG9mIHpvbmVzIG9mIHRoaXMgZnMgKi8KKwkvKiB0aGUgc3RhcnQgb2YgdGhlIGZyZWUgYmxvY2sgbGlzdDogKi8KKwlfX2ZzMTYgc19uZnJlZTsJLyogbnVtYmVyIG9mIGZyZWUgYmxvY2tzIGluIHNfZnJlZSwgPD0gQ09IX05JQ0ZSRUUgKi8KKwlzeXN2X3pvbmVfdAlzX2ZyZWVbQ09IX05JQ0ZSRUVdIF9fcGFja2VkMl9fOyAvKiBmaXJzdCBmcmVlIGJsb2NrIGxpc3QgY2h1bmsgKi8KKwkvKiB0aGUgY2FjaGUgb2YgZnJlZSBpbm9kZXM6ICovCisJX19mczE2CQlzX25pbm9kZTsJLyogbnVtYmVyIG9mIGZyZWUgaW5vZGVzIGluIHNfaW5vZGUsIDw9IENPSF9OSUNJTk9EICovCisJc3lzdl9pbm9fdAlzX2lub2RlW0NPSF9OSUNJTk9EXTsgLyogc29tZSBmcmVlIGlub2RlcyAqLworCS8qIGxvY2tzLCBub3QgdXNlZCBieSBMaW51eDogKi8KKwljaGFyCQlzX2Zsb2NrOwkvKiBsb2NrIGR1cmluZyBmcmVlIGJsb2NrIGxpc3QgbWFuaXB1bGF0aW9uICovCisJY2hhcgkJc19pbG9jazsJLyogbG9jayBkdXJpbmcgaW5vZGUgY2FjaGUgbWFuaXB1bGF0aW9uICovCisJY2hhcgkJc19mbW9kOwkJLyogc3VwZXItYmxvY2sgbW9kaWZpZWQgZmxhZyAqLworCWNoYXIJCXNfcm9ubHk7CS8qIGZsYWcgd2hldGhlciBmcyBpcyBtb3VudGVkIHJlYWQtb25seSAqLworCV9fZnMzMgkJc190aW1lIF9fcGFja2VkMl9fOyAvKiB0aW1lIG9mIGxhc3Qgc3VwZXIgYmxvY2sgdXBkYXRlICovCisJX19mczMyCQlzX3RmcmVlIF9fcGFja2VkMl9fOyAvKiB0b3RhbCBudW1iZXIgb2YgZnJlZSB6b25lcyAqLworCV9fZnMxNgkJc190aW5vZGU7CS8qIHRvdGFsIG51bWJlciBvZiBmcmVlIGlub2RlcyAqLworCV9fZnMxNgkJc19pbnRlcmxlYXZlX207CS8qIGludGVybGVhdmUgZmFjdG9yICovCisJX19mczE2CQlzX2ludGVybGVhdmVfbjsKKwljaGFyCQlzX2ZuYW1lWzZdOwkvKiBmaWxlIHN5c3RlbSB2b2x1bWUgbmFtZSAqLworCWNoYXIJCXNfZnBhY2tbNl07CS8qIGZpbGUgc3lzdGVtIHBhY2sgbmFtZSAqLworCV9fZnMzMgkJc191bmlxdWU7CS8qIHplcm8sIG5vdCB1c2VkICovCit9OworCisvKiBTeXN0ZW1WL0NvaGVyZW50IGlub2RlIGRhdGEgb24gZGlzayAqLworc3RydWN0IHN5c3ZfaW5vZGUgeworCV9fZnMxNiBpX21vZGU7CisJX19mczE2IGlfbmxpbms7CisJX19mczE2IGlfdWlkOworCV9fZnMxNiBpX2dpZDsKKwlfX2ZzMzIgaV9zaXplOworCXU4ICBpX2RhdGFbMyooMTArMSsxKzEpXTsKKwl1OCAgaV9nZW47CisJX19mczMyIGlfYXRpbWU7CS8qIHRpbWUgb2YgbGFzdCBhY2Nlc3MgKi8KKwlfX2ZzMzIgaV9tdGltZTsJLyogdGltZSBvZiBsYXN0IG1vZGlmaWNhdGlvbiAqLworCV9fZnMzMiBpX2N0aW1lOwkvKiB0aW1lIG9mIGNyZWF0aW9uICovCit9OworCisvKiBTeXN0ZW1WL0NvaGVyZW50IGRpcmVjdG9yeSBlbnRyeSBvbiBkaXNrICovCisjZGVmaW5lIFNZU1ZfTkFNRUxFTgkxNAkvKiBtYXggc2l6ZSBvZiBuYW1lIGluIHN0cnVjdCBzeXN2X2Rpcl9lbnRyeSAqLworc3RydWN0IHN5c3ZfZGlyX2VudHJ5IHsKKwlzeXN2X2lub190IGlub2RlOworCWNoYXIgbmFtZVtTWVNWX05BTUVMRU5dOyAvKiB1cCB0byAxNCBjaGFyYWN0ZXJzLCB0aGUgcmVzdCBhcmUgemVyb2VzICovCit9OworCisjZGVmaW5lIFNZU1ZfRElSU0laRQlzaXplb2Yoc3RydWN0IHN5c3ZfZGlyX2VudHJ5KQkvKiBzaXplIG9mIGV2ZXJ5IGRpcmVjdG9yeSBlbnRyeSAqLworCisjZW5kaWYgLyogX0xJTlVYX1NZU1ZfRlNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90Y19hY3QvdGNfZ2FjdC5oIGIvaW5jbHVkZS9saW51eC90Y19hY3QvdGNfZ2FjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzYTAzZWI2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC90Y19hY3QvdGNfZ2FjdC5oCkBAIC0wLDAgKzEsMzQgQEAKKyNpZm5kZWYgX19MSU5VWF9UQ19HQUNUX0gKKyNkZWZpbmUgX19MSU5VWF9UQ19HQUNUX0gKKworI2luY2x1ZGUgPGxpbnV4L3BrdF9jbHMuaD4KKworI2RlZmluZSBUQ0FfQUNUX0dBQ1QgNQorc3RydWN0IHRjX2dhY3QKK3sKKwl0Y19nZW47CisKK307CisKK3N0cnVjdCB0Y19nYWN0X3AKK3sKKyNkZWZpbmUgUEdBQ1RfTk9ORSAgICAgICAgICAgICAgMAorI2RlZmluZSBQR0FDVF9ORVRSQU5EICAgICAgICAgICAxCisjZGVmaW5lIFBHQUNUX0RFVEVSTSAgICAgICAgICAgIDIKKyNkZWZpbmUgTUFYX1JBTkQgICAgICAgICAgICAgICAgKFBHQUNUX0RFVEVSTSArIDEgKQorCV9fdTE2ICAgICAgICAgICAgICAgICBwdHlwZTsKKwlfX3UxNiAgICAgICAgICAgICAgICAgcHZhbDsKKwlpbnQgICAgICAgICAgICAgICAgICAgcGFjdGlvbjsKK307CisgCitlbnVtCit7CisJVENBX0dBQ1RfVU5TUEVDLAorCVRDQV9HQUNUX1RNLAorCVRDQV9HQUNUX1BBUk1TLAorCVRDQV9HQUNUX1BST0IsCisJX19UQ0FfR0FDVF9NQVgKK307CisjZGVmaW5lIFRDQV9HQUNUX01BWCAoX19UQ0FfR0FDVF9NQVggLSAxKQorIAorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RjX2FjdC90Y19pcHQuaCBiL2luY2x1ZGUvbGludXgvdGNfYWN0L3RjX2lwdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiNmY3YjYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3RjX2FjdC90Y19pcHQuaApAQCAtMCwwICsxLDIxIEBACisjaWZuZGVmIF9fTElOVVhfVENfSVBUX0gKKyNkZWZpbmUgX19MSU5VWF9UQ19JUFRfSAorCisjaW5jbHVkZSA8bGludXgvcGt0X2Nscy5oPgorCisjZGVmaW5lIFRDQV9BQ1RfSVBUIDYKKworZW51bQoreworCVRDQV9JUFRfVU5TUEVDLAorCVRDQV9JUFRfVEFCTEUsCisJVENBX0lQVF9IT09LLAorCVRDQV9JUFRfSU5ERVgsCisJVENBX0lQVF9DTlQsCisJVENBX0lQVF9UTSwKKwlUQ0FfSVBUX1RBUkcsCisJX19UQ0FfSVBUX01BWAorfTsKKyNkZWZpbmUgVENBX0lQVF9NQVggKF9fVENBX0lQVF9NQVggLSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90Y19hY3QvdGNfbWlycmVkLmggYi9pbmNsdWRlL2xpbnV4L3RjX2FjdC90Y19taXJyZWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWQ2MzQwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC90Y19hY3QvdGNfbWlycmVkLmgKQEAgLTAsMCArMSwyOCBAQAorI2lmbmRlZiBfX0xJTlVYX1RDX01JUl9ICisjZGVmaW5lIF9fTElOVVhfVENfTUlSX0gKKworI2luY2x1ZGUgPGxpbnV4L3BrdF9jbHMuaD4KKworI2RlZmluZSBUQ0FfQUNUX01JUlJFRCA4CisjZGVmaW5lIFRDQV9FR1JFU1NfUkVESVIgMSAgLyogcGFja2V0IHJlZGlyZWN0IHRvIEVHUkVTUyovCisjZGVmaW5lIFRDQV9FR1JFU1NfTUlSUk9SIDIgLyogbWlycm9yIHBhY2tldCB0byBFR1JFU1MgKi8KKyNkZWZpbmUgVENBX0lOR1JFU1NfUkVESVIgMyAgLyogcGFja2V0IHJlZGlyZWN0IHRvIElOR1JFU1MqLworI2RlZmluZSBUQ0FfSU5HUkVTU19NSVJST1IgNCAvKiBtaXJyb3IgcGFja2V0IHRvIElOR1JFU1MgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitzdHJ1Y3QgdGNfbWlycmVkCit7CisJdGNfZ2VuOworCWludCAgICAgICAgICAgICAgICAgICAgIGVhY3Rpb247ICAgLyogb25lIG9mIElOL0VHUkVTU19NSVJST1IvUkVESVIgKi8KKwlfX3UzMiAgICAgICAgICAgICAgICAgICBpZmluZGV4OyAgLyogaWZpbmRleCBvZiBlZ3Jlc3MgcG9ydCAqLworfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitlbnVtCit7CisJVENBX01JUlJFRF9VTlNQRUMsCisJVENBX01JUlJFRF9UTSwKKwlUQ0FfTUlSUkVEX1BBUk1TLAorCV9fVENBX01JUlJFRF9NQVgKK307CisjZGVmaW5lIFRDQV9NSVJSRURfTUFYIChfX1RDQV9NSVJSRURfTUFYIC0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGNfYWN0L3RjX3BlZGl0LmggYi9pbmNsdWRlL2xpbnV4L3RjX2FjdC90Y19wZWRpdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzZTU2ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3RjX2FjdC90Y19wZWRpdC5oCkBAIC0wLDAgKzEsMzYgQEAKKyNpZm5kZWYgX19MSU5VWF9UQ19QRURfSAorI2RlZmluZSBfX0xJTlVYX1RDX1BFRF9ICisKKyNpbmNsdWRlIDxsaW51eC9wa3RfY2xzLmg+CisKKyNkZWZpbmUgVENBX0FDVF9QRURJVCA3CisKK2VudW0KK3sKKwlUQ0FfUEVESVRfVU5TUEVDLAorCVRDQV9QRURJVF9UTSwKKwlUQ0FfUEVESVRfUEFSTVMsCisJX19UQ0FfUEVESVRfTUFYCit9OworI2RlZmluZSBUQ0FfUEVESVRfTUFYIChfX1RDQV9QRURJVF9NQVggLSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK3N0cnVjdCB0Y19wZWRpdF9rZXkKK3sKKwlfX3UzMiAgICAgICAgICAgbWFzazsgIC8qIEFORCAqLworCV9fdTMyICAgICAgICAgICB2YWw7ICAgLypYT1IgKi8KKwlfX3UzMiAgICAgICAgICAgb2ZmOyAgLypvZmZzZXQgKi8KKwlfX3UzMiAgICAgICAgICAgYXQ7CisJX191MzIgICAgICAgICAgIG9mZm1hc2s7CisJX191MzIgICAgICAgICAgIHNoaWZ0OworfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitzdHJ1Y3QgdGNfcGVkaXRfc2VsCit7CisJdGNfZ2VuOworCXVuc2lnbmVkIGNoYXIgICAgICAgICAgIG5rZXlzOworCXVuc2lnbmVkIGNoYXIgICAgICAgICAgIGZsYWdzOworCXN0cnVjdCB0Y19wZWRpdF9rZXkgICAgIGtleXNbMF07Cit9OworI2RlZmluZSB0Y19wZWRpdCB0Y19wZWRpdF9zZWwKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RjX2VtYXRjaC90Y19lbV9jbXAuaCBiL2luY2x1ZGUvbGludXgvdGNfZW1hdGNoL3RjX2VtX2NtcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3ZjRkNDM2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC90Y19lbWF0Y2gvdGNfZW1fY21wLmgKQEAgLTAsMCArMSwyNiBAQAorI2lmbmRlZiBfX0xJTlVYX1RDX0VNX0NNUF9ICisjZGVmaW5lIF9fTElOVVhfVENfRU1fQ01QX0gKKworI2luY2x1ZGUgPGxpbnV4L3BrdF9jbHMuaD4KKworc3RydWN0IHRjZl9lbV9jbXAKK3sKKwlfX3UzMgkJdmFsOworCV9fdTMyCQltYXNrOworCV9fdTE2CQlvZmY7CisJX191OAkJYWxpZ246NDsKKwlfX3U4CQlmbGFnczo0OworCV9fdTgJCWxheWVyOjQ7CisJX191OAkJb3BuZDo0OworfTsKKworZW51bQoreworCVRDRl9FTV9BTElHTl9VOCAgPSAxLAorCVRDRl9FTV9BTElHTl9VMTYgPSAyLAorCVRDRl9FTV9BTElHTl9VMzIgPSA0Cit9OworCisjZGVmaW5lIFRDRl9FTV9DTVBfVFJBTlMJMQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGNfZW1hdGNoL3RjX2VtX21ldGEuaCBiL2luY2x1ZGUvbGludXgvdGNfZW1hdGNoL3RjX2VtX21ldGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTZiNDhiYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvdGNfZW1hdGNoL3RjX2VtX21ldGEuaApAQCAtMCwwICsxLDY5IEBACisjaWZuZGVmIF9fTElOVVhfVENfRU1fTUVUQV9ICisjZGVmaW5lIF9fTElOVVhfVENfRU1fTUVUQV9ICisKKyNpbmNsdWRlIDxsaW51eC9wa3RfY2xzLmg+CisKK2VudW0KK3sKKwlUQ0FfRU1fTUVUQV9VTlNQRUMsCisJVENBX0VNX01FVEFfSERSLAorCVRDQV9FTV9NRVRBX0xWQUxVRSwKKwlUQ0FfRU1fTUVUQV9SVkFMVUUsCisJX19UQ0FfRU1fTUVUQV9NQVgKK307CisjZGVmaW5lIFRDQV9FTV9NRVRBX01BWCAoX19UQ0FfRU1fTUVUQV9NQVggLSAxKQorCitzdHJ1Y3QgdGNmX21ldGFfdmFsCit7CisJX191MTYJCQlraW5kOworCV9fdTgJCQlzaGlmdDsKKwlfX3U4CQkJb3A7Cit9OworCisjZGVmaW5lIFRDRl9NRVRBX1RZUEVfTUFTSwkoMHhmIDw8IDEyKQorI2RlZmluZSBUQ0ZfTUVUQV9UWVBFKGtpbmQpCSgoKGtpbmQpICYgVENGX01FVEFfVFlQRV9NQVNLKSA+PiAxMikKKyNkZWZpbmUgVENGX01FVEFfSURfTUFTSwkweDdmZgorI2RlZmluZSBUQ0ZfTUVUQV9JRChraW5kKQkoKGtpbmQpICYgVENGX01FVEFfSURfTUFTSykKKworZW51bQoreworCVRDRl9NRVRBX1RZUEVfVkFSLAorCVRDRl9NRVRBX1RZUEVfSU5ULAorCV9fVENGX01FVEFfVFlQRV9NQVgKK307CisjZGVmaW5lIFRDRl9NRVRBX1RZUEVfTUFYIChfX1RDRl9NRVRBX1RZUEVfTUFYIC0gMSkKKworZW51bQoreworCVRDRl9NRVRBX0lEX1ZBTFVFLAorCVRDRl9NRVRBX0lEX1JBTkRPTSwKKwlUQ0ZfTUVUQV9JRF9MT0FEQVZHXzAsCisJVENGX01FVEFfSURfTE9BREFWR18xLAorCVRDRl9NRVRBX0lEX0xPQURBVkdfMiwKKwlUQ0ZfTUVUQV9JRF9ERVYsCisJVENGX01FVEFfSURfSU5ERVYsCisJVENGX01FVEFfSURfUkVBTERFViwKKwlUQ0ZfTUVUQV9JRF9QUklPUklUWSwKKwlUQ0ZfTUVUQV9JRF9QUk9UT0NPTCwKKwlUQ0ZfTUVUQV9JRF9TRUNVUklUWSwKKwlUQ0ZfTUVUQV9JRF9QS1RUWVBFLAorCVRDRl9NRVRBX0lEX1BLVExFTiwKKwlUQ0ZfTUVUQV9JRF9EQVRBTEVOLAorCVRDRl9NRVRBX0lEX01BQ0xFTiwKKwlUQ0ZfTUVUQV9JRF9ORk1BUkssCisJVENGX01FVEFfSURfVENJTkRFWCwKKwlUQ0ZfTUVUQV9JRF9UQ1ZFUkRJQ1QsCisJVENGX01FVEFfSURfVENDTEFTU0lELAorCVRDRl9NRVRBX0lEX1JUQ0xBU1NJRCwKKwlUQ0ZfTUVUQV9JRF9SVElJRiwKKwlfX1RDRl9NRVRBX0lEX01BWAorfTsKKyNkZWZpbmUgVENGX01FVEFfSURfTUFYIChfX1RDRl9NRVRBX0lEX01BWCAtIDEpCisKK3N0cnVjdCB0Y2ZfbWV0YV9oZHIKK3sKKwlzdHJ1Y3QgdGNmX21ldGFfdmFsCWxlZnQ7CisJc3RydWN0IHRjZl9tZXRhX3ZhbAlyaWdodDsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90Y19lbWF0Y2gvdGNfZW1fbmJ5dGUuaCBiL2luY2x1ZGUvbGludXgvdGNfZW1hdGNoL3RjX2VtX25ieXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE5ZDFmNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvdGNfZW1hdGNoL3RjX2VtX25ieXRlLmgKQEAgLTAsMCArMSwxMyBAQAorI2lmbmRlZiBfX0xJTlVYX1RDX0VNX05CWVRFX0gKKyNkZWZpbmUgX19MSU5VWF9UQ19FTV9OQllURV9ICisKKyNpbmNsdWRlIDxsaW51eC9wa3RfY2xzLmg+CisKK3N0cnVjdCB0Y2ZfZW1fbmJ5dGUKK3sKKwlfX3UxNgkJb2ZmOworCV9fdTE2CQlsZW46MTI7CisJX191OAkJbGF5ZXI6NDsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90Y3AuaCBiL2luY2x1ZGUvbGludXgvdGNwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRhNTVlMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvdGNwLmgKQEAgLTAsMCArMSw0NDggQEAKKy8qCisgKiBJTkVUCQlBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgVENQL0lQIHByb3RvY29sIHN1aXRlIGZvciB0aGUgTElOVVgKKyAqCQlvcGVyYXRpbmcgc3lzdGVtLiAgSU5FVCBpcyBpbXBsZW1lbnRlZCB1c2luZyB0aGUgIEJTRCBTb2NrZXQKKyAqCQlpbnRlcmZhY2UgYXMgdGhlIG1lYW5zIG9mIGNvbW11bmljYXRpb24gd2l0aCB0aGUgdXNlciBsZXZlbC4KKyAqCisgKgkJRGVmaW5pdGlvbnMgZm9yIHRoZSBUQ1AgcHJvdG9jb2wuCisgKgorICogVmVyc2lvbjoJQCgjKXRjcC5oCTEuMC4yCTA0LzI4LzkzCisgKgorICogQXV0aG9yOglGcmVkIE4uIHZhbiBLZW1wZW4sIDx3YWx0amVAdVdhbHQuTkwuTXVnbmV0Lk9SRz4KKyAqCisgKgkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKgkJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKgkJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2lmbmRlZiBfTElOVVhfVENQX0gKKyNkZWZpbmUgX0xJTlVYX1RDUF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKworc3RydWN0IHRjcGhkciB7CisJX191MTYJc291cmNlOworCV9fdTE2CWRlc3Q7CisJX191MzIJc2VxOworCV9fdTMyCWFja19zZXE7CisjaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fQklURklFTEQpCisJX191MTYJcmVzMTo0LAorCQlkb2ZmOjQsCisJCWZpbjoxLAorCQlzeW46MSwKKwkJcnN0OjEsCisJCXBzaDoxLAorCQlhY2s6MSwKKwkJdXJnOjEsCisJCWVjZToxLAorCQljd3I6MTsKKyNlbGlmIGRlZmluZWQoX19CSUdfRU5ESUFOX0JJVEZJRUxEKQorCV9fdTE2CWRvZmY6NCwKKwkJcmVzMTo0LAorCQljd3I6MSwKKwkJZWNlOjEsCisJCXVyZzoxLAorCQlhY2s6MSwKKwkJcHNoOjEsCisJCXJzdDoxLAorCQlzeW46MSwKKwkJZmluOjE7CisjZWxzZQorI2Vycm9yCSJBZGp1c3QgeW91ciA8YXNtL2J5dGVvcmRlci5oPiBkZWZpbmVzIgorI2VuZGlmCQorCV9fdTE2CXdpbmRvdzsKKwlfX3UxNgljaGVjazsKKwlfX3UxNgl1cmdfcHRyOworfTsKKworCitlbnVtIHsKKyAgVENQX0VTVEFCTElTSEVEID0gMSwKKyAgVENQX1NZTl9TRU5ULAorICBUQ1BfU1lOX1JFQ1YsCisgIFRDUF9GSU5fV0FJVDEsCisgIFRDUF9GSU5fV0FJVDIsCisgIFRDUF9USU1FX1dBSVQsCisgIFRDUF9DTE9TRSwKKyAgVENQX0NMT1NFX1dBSVQsCisgIFRDUF9MQVNUX0FDSywKKyAgVENQX0xJU1RFTiwKKyAgVENQX0NMT1NJTkcsCSAvKiBub3cgYSB2YWxpZCBzdGF0ZSAqLworCisgIFRDUF9NQVhfU1RBVEVTIC8qIExlYXZlIGF0IHRoZSBlbmQhICovCit9OworCisjZGVmaW5lIFRDUF9TVEFURV9NQVNLCTB4RgorI2RlZmluZSBUQ1BfQUNUSU9OX0ZJTgkoMSA8PCA3KQorCitlbnVtIHsKKyAgVENQRl9FU1RBQkxJU0hFRCA9ICgxIDw8IDEpLAorICBUQ1BGX1NZTl9TRU5UICA9ICgxIDw8IDIpLAorICBUQ1BGX1NZTl9SRUNWICA9ICgxIDw8IDMpLAorICBUQ1BGX0ZJTl9XQUlUMSA9ICgxIDw8IDQpLAorICBUQ1BGX0ZJTl9XQUlUMiA9ICgxIDw8IDUpLAorICBUQ1BGX1RJTUVfV0FJVCA9ICgxIDw8IDYpLAorICBUQ1BGX0NMT1NFICAgICA9ICgxIDw8IDcpLAorICBUQ1BGX0NMT1NFX1dBSVQgPSAoMSA8PCA4KSwKKyAgVENQRl9MQVNUX0FDSyAgPSAoMSA8PCA5KSwKKyAgVENQRl9MSVNURU4gICAgPSAoMSA8PCAxMCksCisgIFRDUEZfQ0xPU0lORyAgID0gKDEgPDwgMTEpIAorfTsKKworLyoKKyAqCVRoZSB1bmlvbiBjYXN0IHVzZXMgYSBnY2MgZXh0ZW5zaW9uIHRvIGF2b2lkIGFsaWFzaW5nIHByb2JsZW1zCisgKiAgKHVuaW9uIGlzIGNvbXBhdGlibGUgdG8gYW55IG9mIGl0cyBtZW1iZXJzKQorICogIFRoaXMgbWVhbnMgdGhpcyBwYXJ0IG9mIHRoZSBjb2RlIGlzIC1mc3RyaWN0LWFsaWFzaW5nIHNhZmUgbm93LgorICovCit1bmlvbiB0Y3Bfd29yZF9oZHIgeyAKKwlzdHJ1Y3QgdGNwaGRyIGhkcjsKKwlfX3UzMiAJCSAgd29yZHNbNV07Cit9OyAKKworI2RlZmluZSB0Y3BfZmxhZ193b3JkKHRwKSAoICgodW5pb24gdGNwX3dvcmRfaGRyICopKHRwKSktPndvcmRzIFszXSkgCisKK2VudW0geyAKKwlUQ1BfRkxBR19DV1IgPSBfX2NvbnN0YW50X2h0b25sKDB4MDA4MDAwMDApLCAKKwlUQ1BfRkxBR19FQ0UgPSBfX2NvbnN0YW50X2h0b25sKDB4MDA0MDAwMDApLCAKKwlUQ1BfRkxBR19VUkcgPSBfX2NvbnN0YW50X2h0b25sKDB4MDAyMDAwMDApLCAKKwlUQ1BfRkxBR19BQ0sgPSBfX2NvbnN0YW50X2h0b25sKDB4MDAxMDAwMDApLCAKKwlUQ1BfRkxBR19QU0ggPSBfX2NvbnN0YW50X2h0b25sKDB4MDAwODAwMDApLCAKKwlUQ1BfRkxBR19SU1QgPSBfX2NvbnN0YW50X2h0b25sKDB4MDAwNDAwMDApLCAKKwlUQ1BfRkxBR19TWU4gPSBfX2NvbnN0YW50X2h0b25sKDB4MDAwMjAwMDApLCAKKwlUQ1BfRkxBR19GSU4gPSBfX2NvbnN0YW50X2h0b25sKDB4MDAwMTAwMDApLAorCVRDUF9SRVNFUlZFRF9CSVRTID0gX19jb25zdGFudF9odG9ubCgweDBGMDAwMDAwKSwKKwlUQ1BfREFUQV9PRkZTRVQgPSBfX2NvbnN0YW50X2h0b25sKDB4RjAwMDAwMDApCit9OyAKKworLyogVENQIHNvY2tldCBvcHRpb25zICovCisjZGVmaW5lIFRDUF9OT0RFTEFZCQkxCS8qIFR1cm4gb2ZmIE5hZ2xlJ3MgYWxnb3JpdGhtLiAqLworI2RlZmluZSBUQ1BfTUFYU0VHCQkyCS8qIExpbWl0IE1TUyAqLworI2RlZmluZSBUQ1BfQ09SSwkJMwkvKiBOZXZlciBzZW5kIHBhcnRpYWxseSBjb21wbGV0ZSBzZWdtZW50cyAqLworI2RlZmluZSBUQ1BfS0VFUElETEUJCTQJLyogU3RhcnQga2VlcGxpdmVzIGFmdGVyIHRoaXMgcGVyaW9kICovCisjZGVmaW5lIFRDUF9LRUVQSU5UVkwJCTUJLyogSW50ZXJ2YWwgYmV0d2VlbiBrZWVwYWxpdmVzICovCisjZGVmaW5lIFRDUF9LRUVQQ05UCQk2CS8qIE51bWJlciBvZiBrZWVwYWxpdmVzIGJlZm9yZSBkZWF0aCAqLworI2RlZmluZSBUQ1BfU1lOQ05UCQk3CS8qIE51bWJlciBvZiBTWU4gcmV0cmFuc21pdHMgKi8KKyNkZWZpbmUgVENQX0xJTkdFUjIJCTgJLyogTGlmZSB0aW1lIG9mIG9ycGhhbmVkIEZJTi1XQUlULTIgc3RhdGUgKi8KKyNkZWZpbmUgVENQX0RFRkVSX0FDQ0VQVAk5CS8qIFdha2UgdXAgbGlzdGVuZXIgb25seSB3aGVuIGRhdGEgYXJyaXZlICovCisjZGVmaW5lIFRDUF9XSU5ET1dfQ0xBTVAJMTAJLyogQm91bmQgYWR2ZXJ0aXNlZCB3aW5kb3cgKi8KKyNkZWZpbmUgVENQX0lORk8JCTExCS8qIEluZm9ybWF0aW9uIGFib3V0IHRoaXMgY29ubmVjdGlvbi4gKi8KKyNkZWZpbmUgVENQX1FVSUNLQUNLCQkxMgkvKiBCbG9jay9yZWVuYWJsZSBxdWljayBhY2tzICovCisKKyNkZWZpbmUgVENQSV9PUFRfVElNRVNUQU1QUwkxCisjZGVmaW5lIFRDUElfT1BUX1NBQ0sJCTIKKyNkZWZpbmUgVENQSV9PUFRfV1NDQUxFCQk0CisjZGVmaW5lIFRDUElfT1BUX0VDTgkJOAorCitlbnVtIHRjcF9jYV9zdGF0ZQoreworCVRDUF9DQV9PcGVuID0gMCwKKyNkZWZpbmUgVENQRl9DQV9PcGVuCSgxPDxUQ1BfQ0FfT3BlbikKKwlUQ1BfQ0FfRGlzb3JkZXIgPSAxLAorI2RlZmluZSBUQ1BGX0NBX0Rpc29yZGVyICgxPDxUQ1BfQ0FfRGlzb3JkZXIpCisJVENQX0NBX0NXUiA9IDIsCisjZGVmaW5lIFRDUEZfQ0FfQ1dSCSgxPDxUQ1BfQ0FfQ1dSKQorCVRDUF9DQV9SZWNvdmVyeSA9IDMsCisjZGVmaW5lIFRDUEZfQ0FfUmVjb3ZlcnkgKDE8PFRDUF9DQV9SZWNvdmVyeSkKKwlUQ1BfQ0FfTG9zcyA9IDQKKyNkZWZpbmUgVENQRl9DQV9Mb3NzCSgxPDxUQ1BfQ0FfTG9zcykKK307CisKK3N0cnVjdCB0Y3BfaW5mbworeworCV9fdTgJdGNwaV9zdGF0ZTsKKwlfX3U4CXRjcGlfY2Ffc3RhdGU7CisJX191OAl0Y3BpX3JldHJhbnNtaXRzOworCV9fdTgJdGNwaV9wcm9iZXM7CisJX191OAl0Y3BpX2JhY2tvZmY7CisJX191OAl0Y3BpX29wdGlvbnM7CisJX191OAl0Y3BpX3NuZF93c2NhbGUgOiA0LCB0Y3BpX3Jjdl93c2NhbGUgOiA0OworCisJX191MzIJdGNwaV9ydG87CisJX191MzIJdGNwaV9hdG87CisJX191MzIJdGNwaV9zbmRfbXNzOworCV9fdTMyCXRjcGlfcmN2X21zczsKKworCV9fdTMyCXRjcGlfdW5hY2tlZDsKKwlfX3UzMgl0Y3BpX3NhY2tlZDsKKwlfX3UzMgl0Y3BpX2xvc3Q7CisJX191MzIJdGNwaV9yZXRyYW5zOworCV9fdTMyCXRjcGlfZmFja2V0czsKKworCS8qIFRpbWVzLiAqLworCV9fdTMyCXRjcGlfbGFzdF9kYXRhX3NlbnQ7CisJX191MzIJdGNwaV9sYXN0X2Fja19zZW50OyAgICAgLyogTm90IHJlbWVtYmVyZWQsIHNvcnJ5LiAqLworCV9fdTMyCXRjcGlfbGFzdF9kYXRhX3JlY3Y7CisJX191MzIJdGNwaV9sYXN0X2Fja19yZWN2OworCisJLyogTWV0cmljcy4gKi8KKwlfX3UzMgl0Y3BpX3BtdHU7CisJX191MzIJdGNwaV9yY3Zfc3N0aHJlc2g7CisJX191MzIJdGNwaV9ydHQ7CisJX191MzIJdGNwaV9ydHR2YXI7CisJX191MzIJdGNwaV9zbmRfc3N0aHJlc2g7CisJX191MzIJdGNwaV9zbmRfY3duZDsKKwlfX3UzMgl0Y3BpX2Fkdm1zczsKKwlfX3UzMgl0Y3BpX3Jlb3JkZXJpbmc7CisKKwlfX3UzMgl0Y3BpX3Jjdl9ydHQ7CisJX191MzIJdGNwaV9yY3Zfc3BhY2U7CisKKwlfX3UzMgl0Y3BpX3RvdGFsX3JldHJhbnM7Cit9OworCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvaXAuaD4KKyNpbmNsdWRlIDxuZXQvc29jay5oPgorCisvKiBUaGlzIGRlZmluZXMgYSBzZWxlY3RpdmUgYWNrbm93bGVkZ2VtZW50IGJsb2NrLiAqLworc3RydWN0IHRjcF9zYWNrX2Jsb2NrIHsKKwlfX3UzMglzdGFydF9zZXE7CisJX191MzIJZW5kX3NlcTsKK307CisKK2VudW0gdGNwX2Nvbmdlc3Rpb25fYWxnbyB7CisJVENQX1JFTk89MCwKKwlUQ1BfVkVHQVMsCisJVENQX1dFU1RXT09ELAorCVRDUF9CSUMsCit9OworCitzdHJ1Y3QgdGNwX29wdGlvbnNfcmVjZWl2ZWQgeworLyoJUEFXUy9SVFRNIGRhdGEJKi8KKwlsb25nCXRzX3JlY2VudF9zdGFtcDsvKiBUaW1lIHdlIHN0b3JlZCB0c19yZWNlbnQgKGZvciBhZ2luZykgKi8KKwlfX3UzMgl0c19yZWNlbnQ7CS8qIFRpbWUgc3RhbXAgdG8gZWNobyBuZXh0CQkqLworCV9fdTMyCXJjdl90c3ZhbDsJLyogVGltZSBzdGFtcCB2YWx1ZSAgICAgICAgICAgICAJKi8KKwlfX3UzMglyY3ZfdHNlY3I7CS8qIFRpbWUgc3RhbXAgZWNobyByZXBseSAgICAgICAgCSovCisJX191MTYgCXNhd190c3RhbXAgOiAxLAkvKiBTYXcgVElNRVNUQU1QIG9uIGxhc3QgcGFja2V0CQkqLworCQl0c3RhbXBfb2sgOiAxLAkvKiBUSU1FU1RBTVAgc2VlbiBvbiBTWU4gcGFja2V0CQkqLworCQlkc2FjayA6IDEsCS8qIEQtU0FDSyBpcyBzY2hlZHVsZWQJCQkqLworCQl3c2NhbGVfb2sgOiAxLAkvKiBXc2NhbGUgc2VlbiBvbiBTWU4gcGFja2V0CQkqLworCQlzYWNrX29rIDogNCwJLyogU0FDSyBzZWVuIG9uIFNZTiBwYWNrZXQJCSovCisJCXNuZF93c2NhbGUgOiA0LAkvKiBXaW5kb3cgc2NhbGluZyByZWNlaXZlZCBmcm9tIHNlbmRlcgkqLworCQlyY3Zfd3NjYWxlIDogNDsJLyogV2luZG93IHNjYWxpbmcgdG8gc2VuZCB0byByZWNlaXZlcgkqLworLyoJU0FDS3MgZGF0YQkqLworCV9fdTgJZWZmX3NhY2tzOwkvKiBTaXplIG9mIFNBQ0sgYXJyYXkgdG8gc2VuZCB3aXRoIG5leHQgcGFja2V0ICovCisJX191OAludW1fc2Fja3M7CS8qIE51bWJlciBvZiBTQUNLIGJsb2NrcwkJKi8KKwlfX3UxNgl1c2VyX21zczsgIAkvKiBtc3MgcmVxdWVzdGVkIGJ5IHVzZXIgaW4gaW9jdGwgKi8KKwlfX3UxNgltc3NfY2xhbXA7CS8qIE1heGltYWwgbXNzLCBuZWdvdGlhdGVkIGF0IGNvbm5lY3Rpb24gc2V0dXAgKi8KK307CisKK3N0cnVjdCB0Y3Bfc29jayB7CisJLyogaW5ldF9zb2NrIGhhcyB0byBiZSB0aGUgZmlyc3QgbWVtYmVyIG9mIHRjcF9zb2NrICovCisJc3RydWN0IGluZXRfc29jawlpbmV0OworCWludAl0Y3BfaGVhZGVyX2xlbjsJLyogQnl0ZXMgb2YgdGNwIGhlYWRlciB0byBzZW5kCQkqLworCisvKgorICoJSGVhZGVyIHByZWRpY3Rpb24gZmxhZ3MKKyAqCTB4NT8xMCA8PCAxNiArIHNuZF93bmQgaW4gbmV0IGJ5dGUgb3JkZXIKKyAqLworCV9fdTMyCXByZWRfZmxhZ3M7CisKKy8qCisgKglSRkM3OTMgdmFyaWFibGVzIGJ5IHRoZWlyIHByb3BlciBuYW1lcy4gVGhpcyBtZWFucyB5b3UgY2FuCisgKglyZWFkIHRoZSBjb2RlIGFuZCB0aGUgc3BlYyBzaWRlIGJ5IHNpZGUgKGFuZCBsYXVnaCAuLi4pCisgKglTZWUgUkZDNzkzIGFuZCBSRkMxMTIyLiBUaGUgUkZDIHdyaXRlcyB0aGVzZSBpbiBjYXBpdGFscy4KKyAqLworIAlfX3UzMglyY3Zfbnh0OwkvKiBXaGF0IHdlIHdhbnQgdG8gcmVjZWl2ZSBuZXh0IAkqLworIAlfX3UzMglzbmRfbnh0OwkvKiBOZXh0IHNlcXVlbmNlIHdlIHNlbmQJCSovCisKKyAJX191MzIJc25kX3VuYTsJLyogRmlyc3QgYnl0ZSB3ZSB3YW50IGFuIGFjayBmb3IJKi8KKyAJX191MzIJc25kX3NtbDsJLyogTGFzdCBieXRlIG9mIHRoZSBtb3N0IHJlY2VudGx5IHRyYW5zbWl0dGVkIHNtYWxsIHBhY2tldCAqLworCV9fdTMyCXJjdl90c3RhbXA7CS8qIHRpbWVzdGFtcCBvZiBsYXN0IHJlY2VpdmVkIEFDSyAoZm9yIGtlZXBhbGl2ZXMpICovCisJX191MzIJbHNuZHRpbWU7CS8qIHRpbWVzdGFtcCBvZiBsYXN0IHNlbnQgZGF0YSBwYWNrZXQgKGZvciByZXN0YXJ0IHdpbmRvdykgKi8KKwlzdHJ1Y3QgdGNwX2JpbmRfYnVja2V0ICpiaW5kX2hhc2g7CisJLyogRGVsYXllZCBBQ0sgY29udHJvbCBkYXRhICovCisJc3RydWN0IHsKKwkJX191OAlwZW5kaW5nOwkvKiBBQ0sgaXMgcGVuZGluZyAqLworCQlfX3U4CXF1aWNrOwkJLyogU2NoZWR1bGVkIG51bWJlciBvZiBxdWljayBhY2tzCSovCisJCV9fdTgJcGluZ3Bvbmc7CS8qIFRoZSBzZXNzaW9uIGlzIGludGVyYWN0aXZlCQkqLworCQlfX3U4CWJsb2NrZWQ7CS8qIERlbGF5ZWQgQUNLIHdhcyBibG9ja2VkIGJ5IHNvY2tldCBsb2NrKi8KKwkJX191MzIJYXRvOwkJLyogUHJlZGljdGVkIHRpY2sgb2Ygc29mdCBjbG9jawkJKi8KKwkJdW5zaWduZWQgbG9uZyB0aW1lb3V0OwkvKiBDdXJyZW50bHkgc2NoZWR1bGVkIHRpbWVvdXQJCSovCisJCV9fdTMyCWxyY3Z0aW1lOwkvKiB0aW1lc3RhbXAgb2YgbGFzdCByZWNlaXZlZCBkYXRhIHBhY2tldCovCisJCV9fdTE2CWxhc3Rfc2VnX3NpemU7CS8qIFNpemUgb2YgbGFzdCBpbmNvbWluZyBzZWdtZW50CSovCisJCV9fdTE2CXJjdl9tc3M7CS8qIE1TUyB1c2VkIGZvciBkZWxheWVkIEFDSyBkZWNpc2lvbnMJKi8gCisJfSBhY2s7CisKKwkvKiBEYXRhIGZvciBkaXJlY3QgY29weSB0byB1c2VyICovCisJc3RydWN0IHsKKwkJc3RydWN0IHNrX2J1ZmZfaGVhZAlwcmVxdWV1ZTsKKwkJc3RydWN0IHRhc2tfc3RydWN0CSp0YXNrOworCQlzdHJ1Y3QgaW92ZWMJCSppb3Y7CisJCWludAkJCW1lbW9yeTsKKwkJaW50CQkJbGVuOworCX0gdWNvcHk7CisKKwlfX3UzMglzbmRfd2wxOwkvKiBTZXF1ZW5jZSBmb3Igd2luZG93IHVwZGF0ZQkJKi8KKwlfX3UzMglzbmRfd25kOwkvKiBUaGUgd2luZG93IHdlIGV4cGVjdCB0byByZWNlaXZlCSovCisJX191MzIJbWF4X3dpbmRvdzsJLyogTWF4aW1hbCB3aW5kb3cgZXZlciBzZWVuIGZyb20gcGVlcgkqLworCV9fdTMyCXBtdHVfY29va2llOwkvKiBMYXN0IHBtdHUgc2VlbiBieSBzb2NrZXQJCSovCisJX191MzIJbXNzX2NhY2hlOwkvKiBDYWNoZWQgZWZmZWN0aXZlIG1zcywgbm90IGluY2x1ZGluZyBTQUNLUyAqLworCV9fdTE2CW1zc19jYWNoZV9zdGQ7CS8qIExpa2UgbXNzX2NhY2hlLCBidXQgd2l0aG91dCBUU08gKi8KKwlfX3UxNglleHRfaGVhZGVyX2xlbjsJLyogTmV0d29yayBwcm90b2NvbCBvdmVyaGVhZCAoSVAvSVB2NiBvcHRpb25zKSAqLworCV9fdTgJY2Ffc3RhdGU7CS8qIFN0YXRlIG9mIGZhc3QtcmV0cmFuc21pdCBtYWNoaW5lIAkqLworCV9fdTgJcmV0cmFuc21pdHM7CS8qIE51bWJlciBvZiB1bnJlY292ZXJlZCBSVE8gdGltZW91dHMuCSovCisKKwlfX3UxNglhZHZtc3M7CQkvKiBBZHZlcnRpc2VkIE1TUwkJCSovCisJX191MzIJd2luZG93X2NsYW1wOwkvKiBNYXhpbWFsIHdpbmRvdyB0byBhZHZlcnRpc2UJCSovCisJX191MzIJcmN2X3NzdGhyZXNoOwkvKiBDdXJyZW50IHdpbmRvdyBjbGFtcAkJCSovCisKKwlfX3UzMglmcnRvX2hpZ2htYXJrOwkvKiBzbmRfbnh0IHdoZW4gUlRPIG9jY3VycmVkICovCisJX191OAlyZW9yZGVyaW5nOwkvKiBQYWNrZXQgcmVvcmRlcmluZyBtZXRyaWMuCQkqLworCV9fdTgJZnJ0b19jb3VudGVyOwkvKiBOdW1iZXIgb2YgbmV3IGFja3MgYWZ0ZXIgUlRPICovCisKKwlfX3U4CWFkdl9jb25nOwkvKiBVc2luZyBWZWdhcywgV2VzdHdvb2QsIG9yIEJJQyAqLworCV9fdTgJZGVmZXJfYWNjZXB0OwkvKiBVc2VyIHdhaXRzIGZvciBzb21lIGRhdGEgYWZ0ZXIgYWNjZXB0KCkgKi8KKworLyogUlRUIG1lYXN1cmVtZW50ICovCisJX191MzIJc3J0dDsJCS8qIHNtb290aGVkIHJvdW5kIHRyaXAgdGltZSA8PCAzCSovCisJX191MzIJbWRldjsJCS8qIG1lZGl1bSBkZXZpYXRpb24JCQkqLworCV9fdTMyCW1kZXZfbWF4OwkvKiBtYXhpbWFsIG1kZXYgZm9yIHRoZSBsYXN0IHJ0dCBwZXJpb2QJKi8KKwlfX3UzMglydHR2YXI7CQkvKiBzbW9vdGhlZCBtZGV2X21heAkJCSovCisJX191MzIJcnR0X3NlcTsJLyogc2VxdWVuY2UgbnVtYmVyIHRvIHVwZGF0ZSBydHR2YXIJKi8KKwlfX3UzMglydG87CQkvKiByZXRyYW5zbWl0IHRpbWVvdXQJCQkqLworCisJX191MzIJcGFja2V0c19vdXQ7CS8qIFBhY2tldHMgd2hpY2ggYXJlICJpbiBmbGlnaHQiCSovCisJX191MzIJbGVmdF9vdXQ7CS8qIFBhY2tldHMgd2hpY2ggbGVhdmVkIG5ldHdvcmsJKi8KKwlfX3UzMglyZXRyYW5zX291dDsJLyogUmV0cmFuc21pdHRlZCBwYWNrZXRzIG91dAkJKi8KKwlfX3U4CWJhY2tvZmY7CS8qIGJhY2tvZmYJCQkJKi8KKy8qCisgKiAgICAgIE9wdGlvbnMgcmVjZWl2ZWQgKHVzdWFsbHkgb24gbGFzdCBwYWNrZXQsIHNvbWUgb25seSBvbiBTWU4gcGFja2V0cykuCisgKi8KKwlfX3U4CW5vbmFnbGU7CS8qIERpc2FibGUgTmFnbGUgYWxnb3JpdGhtPyAgICAgICAgICAgICAqLworCV9fdTgJa2VlcGFsaXZlX3Byb2JlczsgLyogbnVtIG9mIGFsbG93ZWQga2VlcCBhbGl2ZSBwcm9iZXMJKi8KKworCV9fdTgJcHJvYmVzX291dDsJLyogdW5hbnN3ZXJlZCAwIHdpbmRvdyBwcm9iZXMJCSovCisJc3RydWN0IHRjcF9vcHRpb25zX3JlY2VpdmVkIHJ4X29wdDsKKworLyoKKyAqCVNsb3cgc3RhcnQgYW5kIGNvbmdlc3Rpb24gY29udHJvbCAoc2VlIGFsc28gTmFnbGUsIGFuZCBLYXJuICYgUGFydHJpZGdlKQorICovCisgCV9fdTMyCXNuZF9zc3RocmVzaDsJLyogU2xvdyBzdGFydCBzaXplIHRocmVzaG9sZAkJKi8KKyAJX191MzIJc25kX2N3bmQ7CS8qIFNlbmRpbmcgY29uZ2VzdGlvbiB3aW5kb3cJCSovCisgCV9fdTE2CXNuZF9jd25kX2NudDsJLyogTGluZWFyIGluY3JlYXNlIGNvdW50ZXIJCSovCisJX191MTYJc25kX2N3bmRfY2xhbXA7IC8qIERvIG5vdCBhbGxvdyBzbmRfY3duZCB0byBncm93IGFib3ZlIHRoaXMgKi8KKwlfX3UzMglzbmRfY3duZF91c2VkOworCV9fdTMyCXNuZF9jd25kX3N0YW1wOworCisJLyogVHdvIGNvbW1vbmx5IHVzZWQgdGltZXJzIGluIGJvdGggc2VuZGVyIGFuZCByZWNlaXZlciBwYXRocy4gKi8KKwl1bnNpZ25lZCBsb25nCQl0aW1lb3V0OworIAlzdHJ1Y3QgdGltZXJfbGlzdAlyZXRyYW5zbWl0X3RpbWVyOwkvKiBSZXNlbmQgKG5vIGFjaykJKi8KKyAJc3RydWN0IHRpbWVyX2xpc3QJZGVsYWNrX3RpbWVyOwkJLyogQWNrIGRlbGF5IAkJKi8KKworCXN0cnVjdCBza19idWZmX2hlYWQJb3V0X29mX29yZGVyX3F1ZXVlOyAvKiBPdXQgb2Ygb3JkZXIgc2VnbWVudHMgZ28gaGVyZSAqLworCisJc3RydWN0IHRjcF9mdW5jCQkqYWZfc3BlY2lmaWM7CS8qIE9wZXJhdGlvbnMgd2hpY2ggYXJlIEFGX0lORVR7NCw2fSBzcGVjaWZpYwkqLworCisgCV9fdTMyCXJjdl93bmQ7CS8qIEN1cnJlbnQgcmVjZWl2ZXIgd2luZG93CQkqLworCV9fdTMyCXJjdl93dXA7CS8qIHJjdl9ueHQgb24gbGFzdCB3aW5kb3cgdXBkYXRlIHNlbnQJKi8KKwlfX3UzMgl3cml0ZV9zZXE7CS8qIFRhaWwoKzEpIG9mIGRhdGEgaGVsZCBpbiB0Y3Agc2VuZCBidWZmZXIgKi8KKwlfX3UzMglwdXNoZWRfc2VxOwkvKiBMYXN0IHB1c2hlZCBzZXEsIHJlcXVpcmVkIHRvIHRhbGsgdG8gd2luZG93cyAqLworCV9fdTMyCWNvcGllZF9zZXE7CS8qIEhlYWQgb2YgeWV0IHVucmVhZCBkYXRhCQkqLworCisvKglTQUNLcyBkYXRhCSovCisJc3RydWN0IHRjcF9zYWNrX2Jsb2NrIGR1cGxpY2F0ZV9zYWNrWzFdOyAvKiBELVNBQ0sgYmxvY2sgKi8KKwlzdHJ1Y3QgdGNwX3NhY2tfYmxvY2sgc2VsZWN0aXZlX2Fja3NbNF07IC8qIFRoZSBTQUNLUyB0aGVtc2VsdmVzKi8KKworCV9fdTgJc3luX3JldHJpZXM7CS8qIG51bSBvZiBhbGxvd2VkIHN5biByZXRyaWVzICovCisJX191OAllY25fZmxhZ3M7CS8qIEVDTiBzdGF0dXMgYml0cy4JCQkqLworCV9fdTE2CXByaW9yX3NzdGhyZXNoOyAvKiBzc3RocmVzaCBzYXZlZCBhdCByZWNvdmVyeSBzdGFydAkqLworCV9fdTMyCWxvc3Rfb3V0OwkvKiBMb3N0IHBhY2tldHMJCQkqLworCV9fdTMyCXNhY2tlZF9vdXQ7CS8qIFNBQ0snZCBwYWNrZXRzCQkJKi8KKwlfX3UzMglmYWNrZXRzX291dDsJLyogRkFDSydkIHBhY2tldHMJCQkqLworCV9fdTMyCWhpZ2hfc2VxOwkvKiBzbmRfbnh0IGF0IG9uc2V0IG9mIGNvbmdlc3Rpb24JKi8KKworCV9fdTMyCXJldHJhbnNfc3RhbXA7CS8qIFRpbWVzdGFtcCBvZiB0aGUgbGFzdCByZXRyYW5zbWl0LAorCQkJCSAqIGFsc28gdXNlZCBpbiBTWU4tU0VOVCB0byByZW1lbWJlciBzdGFtcCBvZgorCQkJCSAqIHRoZSBmaXJzdCBTWU4uICovCisJX191MzIJdW5kb19tYXJrZXI7CS8qIHRyYWNraW5nIHJldHJhbnMgc3RhcnRlZCBoZXJlLiAqLworCWludAl1bmRvX3JldHJhbnM7CS8qIG51bWJlciBvZiB1bmRvYWJsZSByZXRyYW5zbWlzc2lvbnMuICovCisJX191MzIJdXJnX3NlcTsJLyogU2VxIG9mIHJlY2VpdmVkIHVyZ2VudCBwb2ludGVyICovCisJX191MTYJdXJnX2RhdGE7CS8qIFNhdmVkIG9jdGV0IG9mIE9PQiBkYXRhIGFuZCBjb250cm9sIGZsYWdzICovCisJX191OAlwZW5kaW5nOwkvKiBTY2hlZHVsZWQgdGltZXIgZXZlbnQJKi8KKwlfX3U4CXVyZ19tb2RlOwkvKiBJbiB1cmdlbnQgbW9kZQkJKi8KKwlfX3UzMglzbmRfdXA7CQkvKiBVcmdlbnQgcG9pbnRlcgkJKi8KKworCV9fdTMyCXRvdGFsX3JldHJhbnM7CS8qIFRvdGFsIHJldHJhbnNtaXRzIGZvciBlbnRpcmUgY29ubmVjdGlvbiAqLworCisJLyogVGhlIHN5bl93YWl0X2xvY2sgaXMgbmVjZXNzYXJ5IG9ubHkgdG8gYXZvaWQgcHJvYyBpbnRlcmZhY2UgaGF2aW5nCisJICogdG8gZ3JhYiB0aGUgbWFpbiBsb2NrIHNvY2sgd2hpbGUgYnJvd3NpbmcgdGhlIGxpc3RlbmluZyBoYXNoCisJICogKG90aGVyd2lzZSBpdCdzIGRlYWRsb2NrIHByb25lKS4KKwkgKiBUaGlzIGxvY2sgaXMgYWNxdWlyZWQgaW4gcmVhZCBtb2RlIG9ubHkgZnJvbSBsaXN0ZW5pbmdfZ2V0X25leHQoKQorCSAqIGFuZCBpdCdzIGFjcXVpcmVkIGluIHdyaXRlIG1vZGUgX29ubHlfIGZyb20gY29kZSB0aGF0IGlzIGFjdGl2ZWx5CisJICogY2hhbmdpbmcgdGhlIHN5bl93YWl0X3F1ZXVlLiBBbGwgcmVhZGVycyB0aGF0IGFyZSBob2xkaW5nCisJICogdGhlIG1hc3RlciBzb2NrIGxvY2sgZG9uJ3QgbmVlZCB0byBncmFiIHRoaXMgbG9jayBpbiByZWFkIG1vZGUKKwkgKiB0b28gYXMgdGhlIHN5bl93YWl0X3F1ZXVlIHdyaXRlcyBhcmUgYWx3YXlzIHByb3RlY3RlZCBmcm9tCisJICogdGhlIG1haW4gc29jayBsb2NrLgorCSAqLworCXJ3bG9ja190CQlzeW5fd2FpdF9sb2NrOworCXN0cnVjdCB0Y3BfbGlzdGVuX29wdAkqbGlzdGVuX29wdDsKKworCS8qIEZJRk8gb2YgZXN0YWJsaXNoZWQgY2hpbGRyZW4gKi8KKwlzdHJ1Y3Qgb3Blbl9yZXF1ZXN0CSphY2NlcHRfcXVldWU7CisJc3RydWN0IG9wZW5fcmVxdWVzdAkqYWNjZXB0X3F1ZXVlX3RhaWw7CisKKwl1bnNpZ25lZCBpbnQJCWtlZXBhbGl2ZV90aW1lOwkgIC8qIHRpbWUgYmVmb3JlIGtlZXAgYWxpdmUgdGFrZXMgcGxhY2UgKi8KKwl1bnNpZ25lZCBpbnQJCWtlZXBhbGl2ZV9pbnR2bDsgIC8qIHRpbWUgaW50ZXJ2YWwgYmV0d2VlbiBrZWVwIGFsaXZlIHByb2JlcyAqLworCWludAkJCWxpbmdlcjI7CisKKwl1bnNpZ25lZCBsb25nIGxhc3Rfc3lucV9vdmVyZmxvdzsgCisKKy8qIFJlY2VpdmVyIHNpZGUgUlRUIGVzdGltYXRpb24gKi8KKwlzdHJ1Y3QgeworCQlfX3UzMglydHQ7CisJCV9fdTMyCXNlcTsKKwkJX191MzIJdGltZTsKKwl9IHJjdl9ydHRfZXN0OworCisvKiBSZWNlaXZlciBxdWV1ZSBzcGFjZSAqLworCXN0cnVjdCB7CisJCWludAlzcGFjZTsKKwkJX191MzIJc2VxOworCQlfX3UzMgl0aW1lOworCX0gcmN2cV9zcGFjZTsKKworLyogVENQIFdlc3R3b29kIHN0cnVjdHVyZSAqLworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgICAgIF9fdTMyICAgIGJ3X25zX2VzdDsgICAgICAgIC8qIGZpcnN0IGJhbmR3aWR0aCBlc3RpbWF0aW9uLi5ub3QgdG9vIHNtb290aGVkIDgpICovCisgICAgICAgICAgICAgICAgX191MzIgICAgYndfZXN0OyAgICAgICAgICAgLyogYmFuZHdpZHRoIGVzdGltYXRlICovCisgICAgICAgICAgICAgICAgX191MzIgICAgcnR0X3dpbl9zeDsgICAgICAgLyogaGVyZSBzdGFydHMgYSBuZXcgZXZhbHVhdGlvbi4uLiAqLworICAgICAgICAgICAgICAgIF9fdTMyICAgIGJrOworICAgICAgICAgICAgICAgIF9fdTMyICAgIHNuZF91bmE7ICAgICAgICAgIC8qIHVzZWQgZm9yIGV2YWx1YXRpbmcgdGhlIG51bWJlciBvZiBhY2tlZCBieXRlcyAqLworICAgICAgICAgICAgICAgIF9fdTMyICAgIGN1bXVsX2FjazsKKyAgICAgICAgICAgICAgICBfX3UzMiAgICBhY2NvdW50ZWQ7CisgICAgICAgICAgICAgICAgX191MzIgICAgcnR0OworICAgICAgICAgICAgICAgIF9fdTMyICAgIHJ0dF9taW47ICAgICAgICAgIC8qIG1pbmltdW0gb2JzZXJ2ZWQgUlRUICovCisgICAgICAgIH0gd2VzdHdvb2Q7CisKKy8qIFZlZ2FzIHZhcmlhYmxlcyAqLworCXN0cnVjdCB7CisJCV9fdTMyCWJlZ19zbmRfbnh0OwkvKiByaWdodCBlZGdlIGR1cmluZyBsYXN0IFJUVCAqLworCQlfX3UzMgliZWdfc25kX3VuYTsJLyogbGVmdCBlZGdlICBkdXJpbmcgbGFzdCBSVFQgKi8KKwkJX191MzIJYmVnX3NuZF9jd25kOwkvKiBzYXZlcyB0aGUgc2l6ZSBvZiB0aGUgY3duZCAqLworCQlfX3U4CWRvaW5nX3ZlZ2FzX25vdzsvKiBpZiB0cnVlLCBkbyB2ZWdhcyBmb3IgdGhpcyBSVFQgKi8KKwkJX191MTYJY250UlRUOwkJLyogIyBvZiBSVFRzIG1lYXN1cmVkIHdpdGhpbiBsYXN0IFJUVCAqLworCQlfX3UzMgltaW5SVFQ7CQkvKiBtaW4gb2YgUlRUcyBtZWFzdXJlZCB3aXRoaW4gbGFzdCBSVFQgKGluIHVzZWMpICovCisJCV9fdTMyCWJhc2VSVFQ7CS8qIHRoZSBtaW4gb2YgYWxsIFZlZ2FzIFJUVCBtZWFzdXJlbWVudHMgc2VlbiAoaW4gdXNlYykgKi8KKwl9IHZlZ2FzOworCisJLyogQkkgVENQIFBhcmFtZXRlcnMgKi8KKwlzdHJ1Y3QgeworCQlfX3UzMgljbnQ7CQkvKiBpbmNyZWFzZSBjd25kIGJ5IDEgYWZ0ZXIgdGhpcyBudW1iZXIgb2YgQUNLcyAqLworCQlfX3UzMiAJbGFzdF9tYXhfY3duZDsJLyogbGFzdCBtYXhpbWl1bSBzbmRfY3duZCAqLworCQlfX3UzMglsYXN0X2N3bmQ7CS8qIHRoZSBsYXN0IHNuZF9jd25kICovCisJCV9fdTMyICAgbGFzdF9zdGFtcDsgICAgIC8qIHRpbWUgd2hlbiB1cGRhdGVkIGxhc3RfY3duZCAqLworCX0gYmljdGNwOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdGNwX3NvY2sgKnRjcF9zayhjb25zdCBzdHJ1Y3Qgc29jayAqc2spCit7CisJcmV0dXJuIChzdHJ1Y3QgdGNwX3NvY2sgKilzazsKK30KKworI2VuZGlmCisKKyNlbmRpZgkvKiBfTElOVVhfVENQX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGNwX2RpYWcuaCBiL2luY2x1ZGUvbGludXgvdGNwX2RpYWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWVlOTYyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC90Y3BfZGlhZy5oCkBAIC0wLDAgKzEsMTI3IEBACisjaWZuZGVmIF9UQ1BfRElBR19IXworI2RlZmluZSBfVENQX0RJQUdfSF8gMQorCisvKiBKdXN0IHNvbWUgcmFuZG9tIG51bWJlciAqLworI2RlZmluZSBUQ1BESUFHX0dFVFNPQ0sgMTgKKworLyogU29ja2V0IGlkZW50aXR5ICovCitzdHJ1Y3QgdGNwZGlhZ19zb2NraWQKK3sKKwlfX3UxNgl0Y3BkaWFnX3Nwb3J0OworCV9fdTE2CXRjcGRpYWdfZHBvcnQ7CisJX191MzIJdGNwZGlhZ19zcmNbNF07CisJX191MzIJdGNwZGlhZ19kc3RbNF07CisJX191MzIJdGNwZGlhZ19pZjsKKwlfX3UzMgl0Y3BkaWFnX2Nvb2tpZVsyXTsKKyNkZWZpbmUgVENQRElBR19OT0NPT0tJRSAofjBVKQorfTsKKworLyogUmVxdWVzdCBzdHJ1Y3R1cmUgKi8KKworc3RydWN0IHRjcGRpYWdyZXEKK3sKKwlfX3U4CXRjcGRpYWdfZmFtaWx5OwkJLyogRmFtaWx5IG9mIGFkZHJlc3Nlcy4gKi8KKwlfX3U4CXRjcGRpYWdfc3JjX2xlbjsKKwlfX3U4CXRjcGRpYWdfZHN0X2xlbjsKKwlfX3U4CXRjcGRpYWdfZXh0OwkJLyogUXVlcnkgZXh0ZW5kZWQgaW5mb3JtYXRpb24gKi8KKworCXN0cnVjdCB0Y3BkaWFnX3NvY2tpZCBpZDsKKworCV9fdTMyCXRjcGRpYWdfc3RhdGVzOwkJLyogU3RhdGVzIHRvIGR1bXAgKi8KKwlfX3UzMgl0Y3BkaWFnX2RiczsJCS8qIFRhYmxlcyB0byBkdW1wIChOSSkgKi8KK307CisKK2VudW0KK3sKKwlUQ1BESUFHX1JFUV9OT05FLAorCVRDUERJQUdfUkVRX0JZVEVDT0RFLAorfTsKKworI2RlZmluZSBUQ1BESUFHX1JFUV9NQVggVENQRElBR19SRVFfQllURUNPREUKKworLyogQnl0ZWNvZGUgaXMgc2VxdWVuY2Ugb2YgNCBieXRlIGNvbW1hbmRzIGZvbGxvd2VkIGJ5IHZhcmlhYmxlIGFyZ3VtZW50cy4KKyAqIEFsbCB0aGUgY29tbWFuZHMgaWRlbnRpZmllZCBieSAiY29kZSIgYXJlIGNvbmRpdGlvbmFsIGp1bXBzIGZvcndhcmQ6CisgKiB0byBvZmZzZXQgY2MrInllcyIgb3IgdG8gb2Zmc2V0IGNjKyJubyIuICJ5ZXMiIGlzIHN1cHBvc2VkIHRvIGJlCisgKiBsZW5ndGggb2YgdGhlIGNvbW1hbmQgYW5kIGl0cyBhcmd1bWVudHMuCisgKi8KKyAKK3N0cnVjdCB0Y3BkaWFnX2JjX29wCit7CisJdW5zaWduZWQgY2hhcgljb2RlOworCXVuc2lnbmVkIGNoYXIJeWVzOworCXVuc2lnbmVkIHNob3J0CW5vOworfTsKKworZW51bQoreworCVRDUERJQUdfQkNfTk9QLAorCVRDUERJQUdfQkNfSk1QLAorCVRDUERJQUdfQkNfU19HRSwKKwlUQ1BESUFHX0JDX1NfTEUsCisJVENQRElBR19CQ19EX0dFLAorCVRDUERJQUdfQkNfRF9MRSwKKwlUQ1BESUFHX0JDX0FVVE8sCisJVENQRElBR19CQ19TX0NPTkQsCisJVENQRElBR19CQ19EX0NPTkQsCit9OworCitzdHJ1Y3QgdGNwZGlhZ19ob3N0Y29uZAoreworCV9fdTgJZmFtaWx5OworCV9fdTgJcHJlZml4X2xlbjsKKwlpbnQJcG9ydDsKKwlfX3UzMglhZGRyWzBdOworfTsKKworLyogQmFzZSBpbmZvIHN0cnVjdHVyZS4gSXQgY29udGFpbnMgc29ja2V0IGlkZW50aXR5IChhZGRycy9wb3J0cy9jb29raWUpCisgKiBhbmQsIGFsYXMsIHRoZSBpbmZvcm1hdGlvbiBzaG93biBieSBuZXRzdGF0LiAqLworc3RydWN0IHRjcGRpYWdtc2cKK3sKKwlfX3U4CXRjcGRpYWdfZmFtaWx5OworCV9fdTgJdGNwZGlhZ19zdGF0ZTsKKwlfX3U4CXRjcGRpYWdfdGltZXI7CisJX191OAl0Y3BkaWFnX3JldHJhbnM7CisKKwlzdHJ1Y3QgdGNwZGlhZ19zb2NraWQgaWQ7CisKKwlfX3UzMgl0Y3BkaWFnX2V4cGlyZXM7CisJX191MzIJdGNwZGlhZ19ycXVldWU7CisJX191MzIJdGNwZGlhZ193cXVldWU7CisJX191MzIJdGNwZGlhZ191aWQ7CisJX191MzIJdGNwZGlhZ19pbm9kZTsKK307CisKKy8qIEV4dGVuc2lvbnMgKi8KKworZW51bQoreworCVRDUERJQUdfTk9ORSwKKwlUQ1BESUFHX01FTUlORk8sCisJVENQRElBR19JTkZPLAorCVRDUERJQUdfVkVHQVNJTkZPLAorfTsKKworI2RlZmluZSBUQ1BESUFHX01BWCBUQ1BESUFHX1ZFR0FTSU5GTworCisKKy8qIFRDUERJQUdfTUVNICovCisKK3N0cnVjdCB0Y3BkaWFnX21lbWluZm8KK3sKKwlfX3UzMgl0Y3BkaWFnX3JtZW07CisJX191MzIJdGNwZGlhZ193bWVtOworCV9fdTMyCXRjcGRpYWdfZm1lbTsKKwlfX3UzMgl0Y3BkaWFnX3RtZW07Cit9OworCisvKiBUQ1BESUFHX1ZFR0FTSU5GTyAqLworCitzdHJ1Y3QgdGNwdmVnYXNfaW5mbyB7CisJX191MzIJdGNwdl9lbmFibGVkOworCV9fdTMyCXRjcHZfcnR0Y250OworCV9fdTMyCXRjcHZfcnR0OworCV9fdTMyCXRjcHZfbWlucnR0OworfTsKKworCisjZW5kaWYgLyogX1RDUF9ESUFHX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RlbGVwaG9ueS5oIGIvaW5jbHVkZS9saW51eC90ZWxlcGhvbnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDBjZjJhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC90ZWxlcGhvbnkuaApAQCAtMCwwICsxLDI2NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqCQl0ZWxlcGhvbnkuaAorICoKKyAqCQlCYXNpYyBMaW51eCBUZWxlcGhvbnkgSW50ZXJmYWNlCisgKgorICoJCShjKSBDb3B5cmlnaHQgMTk5OS0yMDAxIFF1aWNrbmV0IFRlY2hub2xvZ2llcywgSW5jLgorICoKKyAqCQlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgkJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqCQlhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqCQkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgIEF1dGhvcnM6ICAgICAgIEVkIE9rZXJzb24sIDxlb2tlcnNvbkBxdWlja25ldC5uZXQ+CisgKiAgICAgICAgICAgICAgICAgICBHcmVnIEhlcmxlaW4sIDxnaGVybGVpbkBxdWlja25ldC5uZXQ+CisgKgorICogICAgQ29udHJpYnV0b3JzOiAgQWxhbiBDb3gsIDxhbGFuQHJlZGhhdC5jb20+CisgKiAgICAgICAgICAgICAgICAgICBEYXZpZCBXLiBFcmhhcnQsIDxkZXJoYXJ0QHF1aWNrbmV0Lm5ldD4KKyAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBRVUlDS05FVCBURUNITk9MT0dJRVMsIElOQy4gQkUgTElBQkxFIFRPIEFOWSBQQVJUWSBGT1IKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTiwgRVZFTiBJRiBRVUlDS05FVAorICogVEVDSE5PTE9HSUVTLCBJTkMuIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqIFFVSUNLTkVUIFRFQ0hOT0xPR0lFUywgSU5DLiBTUEVDSUZJQ0FMTFkgRElTQ0xBSU1TIEFOWSBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZCisgKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUgU09GVFdBUkUgUFJPVklERUQgSEVSRVVOREVSIElTCisgKiBPTiBBTiAiQVMgSVMiIEJBU0lTLCBBTkQgUVVJQ0tORVQgVEVDSE5PTE9HSUVTLCBJTkMuIEhBUyBOTyBPQkxJR0FUSU9OCisgKiBUTyBQUk9WSURFIE1BSU5URU5BTkNFLCBTVVBQT1JULCBVUERBVEVTLCBFTkhBTkNFTUVOVFMsIE9SIE1PRElGSUNBVElPTlMuCisgKgorICogVmVyc2lvbjogICAgICAgJFJldmlzaW9uOiA0LjIgJAorICoKKyAqICRJZDogdGVsZXBob255LmgsdiA0LjIgMjAwMS8wOC8wNiAwNzowOTo0MyBjcmFpZ3MgRXhwICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgVEVMRVBIT05ZX0gKKyNkZWZpbmUgVEVMRVBIT05ZX0gKKworI2RlZmluZSBURUxFUEhPTllfVkVSU0lPTiAzMDEzCisKKyNkZWZpbmUgUEhPTkVfVkVORE9SX0lYSiAgICAgICAgICAxCisjZGVmaW5lIFBIT05FX1ZFTkRPUl9RVUlDS05FVAkgIFBIT05FX1ZFTkRPUl9JWEoKKyNkZWZpbmUgUEhPTkVfVkVORE9SX1ZPSUNFVFJPTklYICAyCisjZGVmaW5lIFBIT05FX1ZFTkRPUl9BQ1VMQUIgICAgICAgMworI2RlZmluZSBQSE9ORV9WRU5ET1JfRElHSSAgICAgICAgIDQKKyNkZWZpbmUgUEhPTkVfVkVORE9SX0ZSQU5LTElOICAgICA1CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBWZW5kb3IgU3VtbWFyeSBJbmZvcm1hdGlvbiBBcmVhCisgKgorICogIFF1aWNrbmV0IFRlY2hub2xvZ2llcywgSW5jLiAtIG1ha2VzIGxvdyBkZW5zaXR5IGFuYWxvZyB0ZWxlcGhvbnkgY2FyZHMKKyAqICAgIHdpdGggYXVkaW8gY29tcHJlc3Npb24sIFBPVFMgYW5kIFBTVE4gaW50ZXJmYWNlcyAod3d3LnF1aWNrbmV0Lm5ldCkKKyAqCisgKiAgKG90aGVyIHZlbmRvcnMgZm9sbG93aW5nIHRoaXMgQVBJIHNodWxkIGFkZCBhIHNob3J0IGRlc2NyaXB0aW9uIG9mCisgKiAgdGhlIHRlbGVwaG9ueSBwcm9kdWN0cyB0aGV5IHN1cHBvcnQgdW5kZXIgTGludXgpCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBRVElfUEhPTkVKQUNLCQkxMDAKKyNkZWZpbmUgUVRJX0xJTkVKQUNLCQkzMDAKKyNkZWZpbmUgUVRJX1BIT05FSkFDS19MSVRFCTQwMAorI2RlZmluZSBRVElfUEhPTkVKQUNLX1BDSQk1MDAKKyNkZWZpbmUgUVRJX1BIT05FQ0FSRAkJNjAwCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogVGhlIGNhcGFiaWxpdGllcyBpb2N0bHMgY2FuIGluZm9ybSB5b3Ugb2YgdGhlIGNhcGFiaWxpdGllcyBvZiBlYWNoIHBob25lCisqIGRldmljZSBpbnN0YWxsZWQgaW4geW91ciBzeXN0ZW0uICBUaGUgUEhPTkVDVExfQ0FQQUJJTElUSUVTIGlvY3RsCisqIHJldHVybnMgYW4gaW50ZWdlciB2YWx1ZSBpbmRpY2F0aW5nIHRoZSBudW1iZXIgb2YgY2FwYWJpbGl0aWVzIHRoZSAgIAorKiBkZXZpY2UgaGFzLiAgVGhlIFBIT05FQ1RMX0NBUEFCSUxJVElFU19MSVNUIHdpbGwgZmlsbCBhbiBhcnJheSBvZiAKKyogY2FwYWJpbGl0eSBzdHJ1Y3RzIHdpdGggYWxsIG9mIGl0cyBjYXBhYmlsaXRpZXMuICBUaGUKKyogUEhPTkVDVExfQ0FQQUJJTElUSUVTX0NIRUNLIHRha2VzIGEgc2luZ2xlIGNhcGFiaWxpdHkgc3RydWN0IGFuZCByZXR1cm5zCisqIGEgVFJVRSBpZiB0aGUgZGV2aWNlIGhhcyB0aGF0IGNhcGFiaWxpdHksIG90aGVyd2lzZSBpdCByZXR1cm5zIGZhbHNlLgorKiAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgZW51bSB7CisJdmVuZG9yID0gMCwKKwlkZXZpY2UsCisJcG9ydCwKKwljb2RlYywKKwlkc3AKK30gcGhvbmVfY2FwOworCitzdHJ1Y3QgcGhvbmVfY2FwYWJpbGl0eSB7CisJY2hhciBkZXNjWzgwXTsKKwlwaG9uZV9jYXAgY2FwdHlwZTsKKwlpbnQgY2FwOworCWludCBoYW5kbGU7Cit9OworCit0eXBlZGVmIGVudW0geworCXBvdHMgPSAwLAorCXBzdG4sCisJaGFuZHNldCwKKwlzcGVha2VyCit9IHBob25lX3BvcnRzOworCisjZGVmaW5lIFBIT05FX0NBUEFCSUxJVElFUyAgICAgICAgICAgICAgX0lPICAoJ3EnLCAweDgwKQorI2RlZmluZSBQSE9ORV9DQVBBQklMSVRJRVNfTElTVCAgICAgICAgIF9JT1IgKCdxJywgMHg4MSwgc3RydWN0IHBob25lX2NhcGFiaWxpdHkgKikKKyNkZWZpbmUgUEhPTkVfQ0FQQUJJTElUSUVTX0NIRUNLICAgICAgICBfSU9XICgncScsIDB4ODIsIHN0cnVjdCBwaG9uZV9jYXBhYmlsaXR5ICopCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICAgICAgY2hhciBtb250aFszXTsKKyAgICAgICAgY2hhciBkYXlbM107CisgICAgICAgIGNoYXIgaG91clszXTsKKyAgICAgICAgY2hhciBtaW5bM107CisgICAgICAgIGludCBudW1sZW47CisgICAgICAgIGNoYXIgbnVtYmVyWzExXTsKKyAgICAgICAgaW50IG5hbWVsZW47CisgICAgICAgIGNoYXIgbmFtZVs4MF07Cit9IFBIT05FX0NJRDsKKyAKKyNkZWZpbmUgUEhPTkVfUklORwkJCV9JTyAgKCdxJywgMHg4MykKKyNkZWZpbmUgUEhPTkVfSE9PS1NUQVRFCQkJX0lPICAoJ3EnLCAweDg0KQorI2RlZmluZSBQSE9ORV9NQVhSSU5HUwkJCV9JT1cgKCdxJywgMHg4NSwgY2hhcikKKyNkZWZpbmUgUEhPTkVfUklOR19DQURFTkNFCQlfSU9XICgncScsIDB4ODYsIHNob3J0KQorI2RlZmluZSBPTERfUEhPTkVfUklOR19TVEFSVCAgICAgICAgICAgIF9JTyAgKCdxJywgMHg4NykKKyNkZWZpbmUgUEhPTkVfUklOR19TVEFSVAkJX0lPVyAoJ3EnLCAweDg3LCBQSE9ORV9DSUQgKikKKyNkZWZpbmUgUEhPTkVfUklOR19TVE9QCQkJX0lPICAoJ3EnLCAweDg4KQorCisjZGVmaW5lIFVTQV9SSU5HX0NBREVOQ0UJIDB4QzBDMAorCisjZGVmaW5lIFBIT05FX1JFQ19DT0RFQwkJCV9JT1cgKCdxJywgMHg4OSwgaW50KQorI2RlZmluZSBQSE9ORV9SRUNfU1RBUlQJCQlfSU8gICgncScsIDB4OEEpCisjZGVmaW5lIFBIT05FX1JFQ19TVE9QCQkJX0lPICAoJ3EnLCAweDhCKQorI2RlZmluZSBQSE9ORV9SRUNfREVQVEgJCQlfSU9XICgncScsIDB4OEMsIGludCkKKyNkZWZpbmUgUEhPTkVfRlJBTUUJCQlfSU9XICgncScsIDB4OEQsIGludCkKKyNkZWZpbmUgUEhPTkVfUkVDX1ZPTFVNRQkJX0lPVyAoJ3EnLCAweDhFLCBpbnQpCisjZGVmaW5lIFBIT05FX1JFQ19WT0xVTUVfTElORUFSCQlfSU9XICgncScsIDB4REIsIGludCkKKyNkZWZpbmUgUEhPTkVfUkVDX0xFVkVMCQkJX0lPICAoJ3EnLCAweDhGKQorCisjZGVmaW5lIFBIT05FX1BMQVlfQ09ERUMJCV9JT1cgKCdxJywgMHg5MCwgaW50KQorI2RlZmluZSBQSE9ORV9QTEFZX1NUQVJUCQlfSU8gICgncScsIDB4OTEpCisjZGVmaW5lIFBIT05FX1BMQVlfU1RPUAkJCV9JTyAgKCdxJywgMHg5MikKKyNkZWZpbmUgUEhPTkVfUExBWV9ERVBUSAkJX0lPVyAoJ3EnLCAweDkzLCBpbnQpCisjZGVmaW5lIFBIT05FX1BMQVlfVk9MVU1FCQlfSU9XICgncScsIDB4OTQsIGludCkKKyNkZWZpbmUgUEhPTkVfUExBWV9WT0xVTUVfTElORUFSCV9JT1cgKCdxJywgMHhEQywgaW50KQorI2RlZmluZSBQSE9ORV9QTEFZX0xFVkVMCQlfSU8gICgncScsIDB4OTUpCisjZGVmaW5lIFBIT05FX0RUTUZfUkVBRFkJCV9JT1IgKCdxJywgMHg5NiwgaW50KQorI2RlZmluZSBQSE9ORV9HRVRfRFRNRgkJCV9JT1IgKCdxJywgMHg5NywgaW50KQorI2RlZmluZSBQSE9ORV9HRVRfRFRNRl9BU0NJSQkJX0lPUiAoJ3EnLCAweDk4LCBpbnQpCisjZGVmaW5lIFBIT05FX0RUTUZfT09CCQkJX0lPVyAoJ3EnLCAweDk5LCBpbnQpCisjZGVmaW5lIFBIT05FX0VYQ0VQVElPTgkJCV9JT1IgKCdxJywgMHg5QSwgaW50KQorI2RlZmluZSBQSE9ORV9QTEFZX1RPTkUJCQlfSU9XICgncScsIDB4OUIsIGNoYXIpCisjZGVmaW5lIFBIT05FX1NFVF9UT05FX09OX1RJTUUJCV9JT1cgKCdxJywgMHg5QywgaW50KQorI2RlZmluZSBQSE9ORV9TRVRfVE9ORV9PRkZfVElNRQkJX0lPVyAoJ3EnLCAweDlELCBpbnQpCisjZGVmaW5lIFBIT05FX0dFVF9UT05FX09OX1RJTUUJCV9JTyAgKCdxJywgMHg5RSkKKyNkZWZpbmUgUEhPTkVfR0VUX1RPTkVfT0ZGX1RJTUUJCV9JTyAgKCdxJywgMHg5RikKKyNkZWZpbmUgUEhPTkVfR0VUX1RPTkVfU1RBVEUJCV9JTyAgKCdxJywgMHhBMCkKKyNkZWZpbmUgUEhPTkVfQlVTWQkJCV9JTyAgKCdxJywgMHhBMSkKKyNkZWZpbmUgUEhPTkVfUklOR0JBQ0sJCQlfSU8gICgncScsIDB4QTIpCisjZGVmaW5lIFBIT05FX0RJQUxUT05FCQkJX0lPICAoJ3EnLCAweEEzKQorI2RlZmluZSBQSE9ORV9DUFRfU1RPUAkJCV9JTyAgKCdxJywgMHhBNCkKKworI2RlZmluZSBQSE9ORV9QU1ROX1NFVF9TVEFURQkJX0lPVyAoJ3EnLCAweEE0LCBpbnQpCisjZGVmaW5lIFBIT05FX1BTVE5fR0VUX1NUQVRFCQlfSU8gICgncScsIDB4QTUpCisKKyNkZWZpbmUgUFNUTl9PTl9IT09LCQkwCisjZGVmaW5lIFBTVE5fUklOR0lORwkJMQorI2RlZmluZSBQU1ROX09GRl9IT09LCQkyCisjZGVmaW5lIFBTVE5fUFVMU0VfRElBTAkJMworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIAorKiBUaGUgd2luayBkdXJhdGlvbiBpcyB0dW5hYmxlIHdpdGggdGhpcyBpb2N0bC4gIFRoZSBkZWZhdWx0IHdpbmsgZHVyYXRpb24gIAorKiBpcyAzMjBtcy4gIFlvdSBkbyBub3QgbmVlZCB0byB1c2UgdGhpcyBpb2N0bCBpZiB5b3UgZG8gbm90IHJlcXVpcmUgYQorKiBkaWZmZXJlbnQgd2luayBkdXJhdGlvbi4KKyogCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFBIT05FX1dJTktfRFVSQVRJT04JCV9JT1cgKCdxJywgMHhBNiwgaW50KQorI2RlZmluZSBQSE9ORV9XSU5LCQkJX0lPVyAoJ3EnLCAweEFBLCBpbnQpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogCisqICBDb2RlYyBEZWZpbml0aW9ucworKiAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgZW51bSB7CisJRzcyM182MyA9IDEsCisJRzcyM181MyA9IDIsCisJVFM4NSA9IDMsCisJVFM0OCA9IDQsCisJVFM0MSA9IDUsCisJRzcyOCA9IDYsCisJRzcyOSA9IDcsCisJVUxBVyA9IDgsCisJQUxBVyA9IDksCisJTElORUFSMTYgPSAxMCwKKwlMSU5FQVI4ID0gMTEsCisJV1NTID0gMTIsCisJRzcyOUIgPSAxMworfSBwaG9uZV9jb2RlYzsKKworc3RydWN0IHBob25lX2NvZGVjX2RhdGEKK3sKKyAgICAgICAgcGhvbmVfY29kZWMgdHlwZTsKKyAgICAgICAgdW5zaWduZWQgc2hvcnQgYnVmX21pbiwgYnVmX29wdCwgYnVmX21heDsKK307CisKKyNkZWZpbmUgUEhPTkVfUVVFUllfQ09ERUMgICAgICAgICAgICAgICBfSU9XUiAoJ3EnLCAweEE3LCBzdHJ1Y3QgcGhvbmVfY29kZWNfZGF0YSAqKQorI2RlZmluZSBQSE9ORV9QU1ROX0xJTkVURVNUICAgICAgICAgICAgIF9JTyAoJ3EnLCAweEE4KQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIAorKiBUaGlzIGNvbnRyb2xzIHRoZSBWQUQvQ05HIGZ1bmN0aW9uYWxpdHkgb2YgRy43MjMuMS4gIFRoZSBkcml2ZXIgd2lsbAorKiBhbHdheXMgcGFzcyBmdWxsIHNpemUgZnJhbWVzLCBhbnkgdW51c2VkIGJ5dGVzIHdpbGwgYmUgcGFkZGVkIHdpdGggemVyb3MsCisqIGFuZCBmcmFtZXMgcGFzc2VkIHRvIHRoZSBkcml2ZXIgc2hvdWxkIGFsc28gYmUgcGFkZGVkIHdpdGggemVyb3MuICBUaGUKKyogZnJhbWUgdHlwZSBpcyBlbmNvZGVkIGluIHRoZSBsZWFzdCBzaWduaWZpY2FudCB0d28gYml0cyBvZiB0aGUgZmlyc3QKKyogV09SRCBvZiB0aGUgZnJhbWUgYXMgZm9sbG93czoKKyoKKyogYml0cyAxLTAJRnJhbWUgVHlwZQlEYXRhIFJhdGUJCVNpZ25pZmljYW50IFdvcmRzCisqIDAwCQkwCQlHLjcyMy4xIDYuMwkJMTIKKyogMDEJCTEJCUcuNzIzLjEgNS4zCQkxMAorKiAxMAkJMgkJVkFEL0NORwkJCSAyCisqIDExCQkzCQlSZXBlYXQgbGFzdCBDTkcJCSAyIGJpdHMKKyogCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFBIT05FX1ZBRAkJCV9JT1cgKCdxJywgMHhBOSwgaW50KQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogVGhlIGV4Y2VwdGlvbiBzdHJ1Y3R1cmUgYWxsb3dzIHVzIHRvIG11bHRpcGxleCBtdWx0aXBsZSBldmVudHMgb250byB0aGUKKyogc2VsZWN0KCkgZXhjZXB0aW9uIHNldC4gIElmIGFueSBvZiB0aGVzZSBmbGFncyBhcmUgc2V0IHNlbGVjdCgpIHdpbGwKKyogcmV0dXJuIHdpdGggYSBwb3NpdGl2ZSBpbmRpY2F0aW9uIG9uIHRoZSBleGNlcHRpb24gc2V0LiAgVGhlIGR0bWZfcmVhZHkKKyogYml0IGluZGljYXRlcyBpZiB0aGVyZSBpcyBkYXRhIHdhaXRpbmcgaW4gdGhlIERUTUYgYnVmZmVyLiAgVGhlCisqIGhvb2tzdGF0ZSBiaXQgaXMgc2V0IGlmIHRoZXJlIGlzIGEgY2hhbmdlIGluIGhvb2tzdGF0ZSBzdGF0dXMsIGl0IGRvZXMgbm90CisqIGluZGljYXRlIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBob29rc3dpdGNoLiAgVGhlIHBzdG5fcmluZyBiaXQKKyogaW5kaWNhdGVzIHRoYXQgdGhlIERBQSBvbiBhIExpbmVKQUNLIGNhcmQgaGFzIGRldGVjdGVkIHJpbmcgdm9sdGFnZSBvbgorKiB0aGUgUFNUTiBwb3J0LiAgVGhlIGNhbGxlcl9pZCBiaXQgaW5kaWNhdGVzIHRoYXQgY2FsbGVyX2lkIGRhdGEgaGFzIGJlZW4KKyogcmVjZWl2ZWQgYW5kIGlzIGF2YWlsYWJsZS4gIFRoZSBwc3RuX3dpbmsgYml0IGluZGljYXRlcyB0aGF0IHRoZSBEQUEgb24KKyogdGhlIExpbmVKQUNLIGhhcyByZWNlaXZlZCBhIHdpbmsgZnJvbSB0aGUgdGVsY28gc3dpdGNoLiAgVGhlIGYwLCBmMSwgZjIKKyogYW5kIGYzIGJpdHMgaW5kaWNhdGUgdGhhdCB0aGUgZmlsdGVyIGhhcyBiZWVuIHRyaWdnZXJlZCBieSBkZXRlY3RpbmcgdGhlCisqIGZyZXF1ZW5jeSBwcm9ncmFtbWVkIGludG8gdGhhdCBmaWx0ZXIuCisqCisqIFRoZSByZW1haW5pbmcgYml0cyBzaG91bGQgYmUgc2V0IHRvIHplcm8uIFRoZXkgd2lsbCBiZWNvbWUgZGVmaW5lZCBvdmVyIHRpbWUKKyogZm9yIG90aGVyIGludGVyZmFjZSBjYXJkcyBhbmQgdGhlaXIgbmVlZHMuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdHJ1Y3QgcGhvbmVfZXhjZXB0Cit7CisJdW5zaWduZWQgaW50IGR0bWZfcmVhZHk6MTsKKwl1bnNpZ25lZCBpbnQgaG9va3N0YXRlOjE7CisJdW5zaWduZWQgaW50IHBzdG5fcmluZzoxOworCXVuc2lnbmVkIGludCBjYWxsZXJfaWQ6MTsKKwl1bnNpZ25lZCBpbnQgcHN0bl93aW5rOjE7CisJdW5zaWduZWQgaW50IGYwOjE7CisJdW5zaWduZWQgaW50IGYxOjE7CisJdW5zaWduZWQgaW50IGYyOjE7CisJdW5zaWduZWQgaW50IGYzOjE7CisJdW5zaWduZWQgaW50IGZsYXNoOjE7CisJdW5zaWduZWQgaW50IGZjMDoxOworCXVuc2lnbmVkIGludCBmYzE6MTsKKwl1bnNpZ25lZCBpbnQgZmMyOjE7CisJdW5zaWduZWQgaW50IGZjMzoxOworCXVuc2lnbmVkIGludCByZXNlcnZlZDoxODsKK307CisKK3VuaW9uIHRlbGVwaG9ueV9leGNlcHRpb24geworCXN0cnVjdCBwaG9uZV9leGNlcHQgYml0czsKKwl1bnNpZ25lZCBpbnQgYnl0ZXM7Cit9OworCisKKyNlbmRpZgkJLyogVEVMRVBIT05ZX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90ZXJtaW9zLmggYi9pbmNsdWRlL2xpbnV4L3Rlcm1pb3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Nzg2NjI4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC90ZXJtaW9zLmgKQEAgLTAsMCArMSw3IEBACisjaWZuZGVmIF9MSU5VWF9URVJNSU9TX0gKKyNkZWZpbmUgX0xJTlVYX1RFUk1JT1NfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vdGVybWlvcy5oPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGhyZWFkX2luZm8uaCBiL2luY2x1ZGUvbGludXgvdGhyZWFkX2luZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjUyZjQ1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC90aHJlYWRfaW5mby5oCkBAIC0wLDAgKzEsOTIgQEAKKy8qIHRocmVhZF9pbmZvLmg6IGNvbW1vbiBsb3ctbGV2ZWwgdGhyZWFkIGluZm9ybWF0aW9uIGFjY2Vzc29ycworICoKKyAqIENvcHlyaWdodCAoQykgMjAwMiAgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqIC0gSW5jb3Jwb3JhdGluZyBzdWdnZXN0aW9ucyBtYWRlIGJ5IExpbnVzIFRvcnZhbGRzCisgKi8KKworI2lmbmRlZiBfTElOVVhfVEhSRUFEX0lORk9fSAorI2RlZmluZSBfTElOVVhfVEhSRUFEX0lORk9fSAorCisvKgorICogU3lzdGVtIGNhbGwgcmVzdGFydCBibG9jay4gCisgKi8KK3N0cnVjdCByZXN0YXJ0X2Jsb2NrIHsKKwlsb25nICgqZm4pKHN0cnVjdCByZXN0YXJ0X2Jsb2NrICopOworCXVuc2lnbmVkIGxvbmcgYXJnMCwgYXJnMSwgYXJnMiwgYXJnMzsKK307CisKK2V4dGVybiBsb25nIGRvX25vX3Jlc3RhcnRfc3lzY2FsbChzdHJ1Y3QgcmVzdGFydF9ibG9jayAqcGFybSk7CisKKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KKworI2lmZGVmIF9fS0VSTkVMX18KKworLyoKKyAqIGZsYWcgc2V0L2NsZWFyL3Rlc3Qgd3JhcHBlcnMKKyAqIC0gcGFzcyBUSUZfeHh4eCBjb25zdGFudHMgdG8gdGhlc2UgZnVuY3Rpb25zCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkIHNldF90aHJlYWRfZmxhZyhpbnQgZmxhZykKK3sKKwlzZXRfYml0KGZsYWcsJmN1cnJlbnRfdGhyZWFkX2luZm8oKS0+ZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfdGhyZWFkX2ZsYWcoaW50IGZsYWcpCit7CisJY2xlYXJfYml0KGZsYWcsJmN1cnJlbnRfdGhyZWFkX2luZm8oKS0+ZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIGludCB0ZXN0X2FuZF9zZXRfdGhyZWFkX2ZsYWcoaW50IGZsYWcpCit7CisJcmV0dXJuIHRlc3RfYW5kX3NldF9iaXQoZmxhZywmY3VycmVudF90aHJlYWRfaW5mbygpLT5mbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHRlc3RfYW5kX2NsZWFyX3RocmVhZF9mbGFnKGludCBmbGFnKQoreworCXJldHVybiB0ZXN0X2FuZF9jbGVhcl9iaXQoZmxhZywmY3VycmVudF90aHJlYWRfaW5mbygpLT5mbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHRlc3RfdGhyZWFkX2ZsYWcoaW50IGZsYWcpCit7CisJcmV0dXJuIHRlc3RfYml0KGZsYWcsJmN1cnJlbnRfdGhyZWFkX2luZm8oKS0+ZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3RpX3RocmVhZF9mbGFnKHN0cnVjdCB0aHJlYWRfaW5mbyAqdGksIGludCBmbGFnKQoreworCXNldF9iaXQoZmxhZywmdGktPmZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3RpX3RocmVhZF9mbGFnKHN0cnVjdCB0aHJlYWRfaW5mbyAqdGksIGludCBmbGFnKQoreworCWNsZWFyX2JpdChmbGFnLCZ0aS0+ZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIGludCB0ZXN0X2FuZF9zZXRfdGlfdGhyZWFkX2ZsYWcoc3RydWN0IHRocmVhZF9pbmZvICp0aSwgaW50IGZsYWcpCit7CisJcmV0dXJuIHRlc3RfYW5kX3NldF9iaXQoZmxhZywmdGktPmZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgdGVzdF9hbmRfY2xlYXJfdGlfdGhyZWFkX2ZsYWcoc3RydWN0IHRocmVhZF9pbmZvICp0aSwgaW50IGZsYWcpCit7CisJcmV0dXJuIHRlc3RfYW5kX2NsZWFyX2JpdChmbGFnLCZ0aS0+ZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIGludCB0ZXN0X3RpX3RocmVhZF9mbGFnKHN0cnVjdCB0aHJlYWRfaW5mbyAqdGksIGludCBmbGFnKQoreworCXJldHVybiB0ZXN0X2JpdChmbGFnLCZ0aS0+ZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X25lZWRfcmVzY2hlZCh2b2lkKQoreworCXNldF90aHJlYWRfZmxhZyhUSUZfTkVFRF9SRVNDSEVEKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX25lZWRfcmVzY2hlZCh2b2lkKQoreworCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9ORUVEX1JFU0NIRUQpOworfQorCisjZW5kaWYKKworI2VuZGlmIC8qIF9MSU5VWF9USFJFQURfSU5GT19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RocmVhZHMuaCBiL2luY2x1ZGUvbGludXgvdGhyZWFkcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1OTczOGEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3RocmVhZHMuaApAQCAtMCwwICsxLDM2IEBACisjaWZuZGVmIF9MSU5VWF9USFJFQURTX0gKKyNkZWZpbmUgX0xJTlVYX1RIUkVBRFNfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKy8qCisgKiBUaGUgZGVmYXVsdCBsaW1pdCBmb3IgdGhlIG5yIG9mIHRocmVhZHMgaXMgbm93IGluCisgKiAvcHJvYy9zeXMva2VybmVsL3RocmVhZHMtbWF4LgorICovCisKKy8qCisgKiBNYXhpbXVtIHN1cHBvcnRlZCBwcm9jZXNzb3JzIHRoYXQgY2FuIHJ1biB1bmRlciBTTVAuICBUaGlzIHZhbHVlIGlzCisgKiBzZXQgdmlhIGNvbmZpZ3VyZSBzZXR0aW5nLiAgVGhlIG1heGltdW0gaXMgZXF1YWwgdG8gdGhlIHNpemUgb2YgdGhlCisgKiBiaXRtYXNrcyB1c2VkIG9uIHRoYXQgcGxhdGZvcm0sIGkuZS4gMzIgb3IgNjQuICBTZXR0aW5nIHRoaXMgc21hbGxlcgorICogc2F2ZXMgcXVpdGUgYSBiaXQgb2YgbWVtb3J5LgorICovCisjaWZkZWYgQ09ORklHX1NNUAorI2RlZmluZSBOUl9DUFVTCQlDT05GSUdfTlJfQ1BVUworI2Vsc2UKKyNkZWZpbmUgTlJfQ1BVUwkJMQorI2VuZGlmCisKKyNkZWZpbmUgTUlOX1RIUkVBRFNfTEVGVF9GT1JfUk9PVCA0CisKKy8qCisgKiBUaGlzIGNvbnRyb2xzIHRoZSBkZWZhdWx0IG1heGltdW0gcGlkIGFsbG9jYXRlZCB0byBhIHByb2Nlc3MKKyAqLworI2RlZmluZSBQSURfTUFYX0RFRkFVTFQgKENPTkZJR19CQVNFX1NNQUxMID8gMHgxMDAwIDogMHg4MDAwKQorCisvKgorICogQSBtYXhpbXVtIG9mIDQgbWlsbGlvbiBQSURzIHNob3VsZCBiZSBlbm91Z2ggZm9yIGEgd2hpbGU6CisgKi8KKyNkZWZpbmUgUElEX01BWF9MSU1JVCAoQ09ORklHX0JBU0VfU01BTEwgPyBQQUdFX1NJWkUgKiA4IDogXAorCShzaXplb2YobG9uZykgPiA0ID8gNCAqIDEwMjQgKiAxMDI0IDogUElEX01BWF9ERUZBVUxUKSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RpY2FibGUuaCBiL2luY2x1ZGUvbGludXgvdGljYWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjMjIxMjAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3RpY2FibGUuaApAQCAtMCwwICsxLDQ0IEBACisvKiBIZXkgRU1BQ1MgLSotIGxpbnV4LWMgLSotCisgKgorICogdGlwYXIvdGlzZXIvdGl1c2IgLSBsb3cgbGV2ZWwgZHJpdmVyIGZvciBoYW5kbGluZyBsaW5rIGNhYmxlcworICogZGVzaWduZWQgZm9yIFRleGFzIEluc3RydW1lbnRzIGdyYXBoaW5nIGNhbGN1bGF0b3JzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMC0yMDAyLCBSb21haW4gTGlldmluIDxyb21zQGxwZy50aWNhbGMub3JnPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlsZSBpcyBwZXJtaXR0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIFB1YmxpYyBMaWNlbnNlIChHUEwpCisgKi8KKworI2lmbmRlZiBfVElDQUJMRV9IIAorI2RlZmluZSBfVElDQUJMRV9IIDEKKworLyogSW50ZXJuYWwgZGVmYXVsdCBjb25zdGFudHMgZm9yIHRoZSBrZXJuZWwgbW9kdWxlICovCisjZGVmaW5lIFRJTUFYVElNRSAxNSAgICAgIC8qIDEuNSBzZWNvbmRzICAgICAgICovCisjZGVmaW5lIElPX0RFTEFZICAxMCAgICAgIC8qIDEwIG1pY3JvLXNlY29uZHMgICovCisKKy8qIE1ham9yICYgbWlub3IgbnVtYmVyIGZvciBjaGFyYWN0ZXIgZGV2aWNlcyAqLworI2RlZmluZSBUSVBBUl9NQUpPUiAgMTE1IC8qIDAgdG8gNyAqLworI2RlZmluZSBUSVBBUl9NSU5PUiAgICAwCisKKyNkZWZpbmUgVElTRVJfTUFKT1IgIDExNSAvKiA4IHRvIDE1ICovCisjZGVmaW5lIFRJU0VSX01JTk9SICAgIDgKKworI2RlZmluZSBUSVVTQl9NQUpPUiAgMTE1ICAvKiAxNiB0byAzMSAqLworI2RlZmluZSBUSVVTQl9NSU5PUiAgIDE2CisKKy8qCisgKiBSZXF1ZXN0IHZhbHVlcyBmb3IgdGhlICdpb2N0bCcgZnVuY3Rpb24uCisgKi8KKyNkZWZpbmUgSU9DVExfVElQQVJfREVMQVkgICAgIF9JT1coJ3AnLCAweGE4LCBpbnQpIC8qIHNldCBkZWxheSAgICovCisjZGVmaW5lIElPQ1RMX1RJUEFSX1RJTUVPVVQgICBfSU9XKCdwJywgMHhhOSwgaW50KSAvKiBzZXQgdGltZW91dCAqLworCisjZGVmaW5lIElPQ1RMX1RJU0VSX0RFTEFZICAgICBfSU9XKCdwJywgMHhhMCwgaW50KSAvKiBzZXQgZGVsYXkgICAqLworI2RlZmluZSBJT0NUTF9USVNFUl9USU1FT1VUICAgX0lPVygncCcsIDB4YTEsIGludCkgLyogc2V0IHRpbWVvdXQgKi8KKworI2RlZmluZSBJT0NUTF9USVVTQl9USU1FT1VUICAgICAgICBfSU9XKCdOJywgMHgyMCwgaW50KSAvKiBzZXQgdGltZW91dCAqLworI2RlZmluZSBJT0NUTF9USVVTQl9SRVNFVF9ERVZJQ0UgICBfSU9XKCdOJywgMHgyMSwgaW50KSAvKiByZXNldCBkZXZpY2UgKi8KKyNkZWZpbmUgSU9DVExfVElVU0JfUkVTRVRfUElQRVMgICAgX0lPVygnTicsIDB4MjIsIGludCkgLyogcmVzZXQgYm90aCBwaXBlcyovCisjZGVmaW5lIElPQ1RMX1RJVVNCX0dFVF9NQVhQUyAgICAgIF9JT1IoJ04nLCAweDIzLCBpbnQpIC8qIG1heCBwYWNrZXQgc2l6ZSAqLworI2RlZmluZSBJT0NUTF9USVVTQl9HRVRfREVWSUQgICAgICBfSU9SKCdOJywgMHgyNCwgaW50KSAvKiBnZXQgZGV2aWNlIHR5cGUgKi8KKworI2VuZGlmIC8qIFRJQ0FCTEVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90aW1lLmggYi9pbmNsdWRlL2xpbnV4L3RpbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjM0NDk3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC90aW1lLmgKQEAgLTAsMCArMSwxODEgQEAKKyNpZm5kZWYgX0xJTlVYX1RJTUVfSAorI2RlZmluZSBfTElOVVhfVElNRV9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGxpbnV4L3NlcWxvY2suaD4KKyNlbmRpZgorCisjaWZuZGVmIF9TVFJVQ1RfVElNRVNQRUMKKyNkZWZpbmUgX1NUUlVDVF9USU1FU1BFQworc3RydWN0IHRpbWVzcGVjIHsKKwl0aW1lX3QJdHZfc2VjOwkJLyogc2Vjb25kcyAqLworCWxvbmcJdHZfbnNlYzsJLyogbmFub3NlY29uZHMgKi8KK307CisjZW5kaWYgLyogX1NUUlVDVF9USU1FU1BFQyAqLworCitzdHJ1Y3QgdGltZXZhbCB7CisJdGltZV90CQl0dl9zZWM7CQkvKiBzZWNvbmRzICovCisJc3VzZWNvbmRzX3QJdHZfdXNlYzsJLyogbWljcm9zZWNvbmRzICovCit9OworCitzdHJ1Y3QgdGltZXpvbmUgeworCWludAl0el9taW51dGVzd2VzdDsJLyogbWludXRlcyB3ZXN0IG9mIEdyZWVud2ljaCAqLworCWludAl0el9kc3R0aW1lOwkvKiB0eXBlIG9mIGRzdCBjb3JyZWN0aW9uICovCit9OworCisjaWZkZWYgX19LRVJORUxfXworCisvKiBQYXJhbWV0ZXJzIHVzZWQgdG8gY29udmVydCB0aGUgdGltZXNwZWMgdmFsdWVzICovCisjaWZuZGVmIFVTRUNfUEVSX1NFQworI2RlZmluZSBVU0VDX1BFUl9TRUMgKDEwMDAwMDBMKQorI2VuZGlmCisKKyNpZm5kZWYgTlNFQ19QRVJfU0VDCisjZGVmaW5lIE5TRUNfUEVSX1NFQyAoMTAwMDAwMDAwMEwpCisjZW5kaWYKKworI2lmbmRlZiBOU0VDX1BFUl9VU0VDCisjZGVmaW5lIE5TRUNfUEVSX1VTRUMgKDEwMDBMKQorI2VuZGlmCisKK3N0YXRpYyBfX2lubGluZV9fIGludCB0aW1lc3BlY19lcXVhbChzdHJ1Y3QgdGltZXNwZWMgKmEsIHN0cnVjdCB0aW1lc3BlYyAqYikgCit7IAorCXJldHVybiAoYS0+dHZfc2VjID09IGItPnR2X3NlYykgJiYgKGEtPnR2X25zZWMgPT0gYi0+dHZfbnNlYyk7Cit9IAorCisvKiBDb252ZXJ0cyBHcmVnb3JpYW4gZGF0ZSB0byBzZWNvbmRzIHNpbmNlIDE5NzAtMDEtMDEgMDA6MDA6MDAuCisgKiBBc3N1bWVzIGlucHV0IGluIG5vcm1hbCBkYXRlIGZvcm1hdCwgaS5lLiAxOTgwLTEyLTMxIDIzOjU5OjU5CisgKiA9PiB5ZWFyPTE5ODAsIG1vbj0xMiwgZGF5PTMxLCBob3VyPTIzLCBtaW49NTksIHNlYz01OS4KKyAqCisgKiBbRm9yIHRoZSBKdWxpYW4gY2FsZW5kYXIgKHdoaWNoIHdhcyB1c2VkIGluIFJ1c3NpYSBiZWZvcmUgMTkxNywKKyAqIEJyaXRhaW4gJiBjb2xvbmllcyBiZWZvcmUgMTc1MiwgYW55d2hlcmUgZWxzZSBiZWZvcmUgMTU4MiwKKyAqIGFuZCBpcyBzdGlsbCBpbiB1c2UgYnkgc29tZSBjb21tdW5pdGllcykgbGVhdmUgb3V0IHRoZQorICogLXllYXIvMTAwK3llYXIvNDAwIHRlcm1zLCBhbmQgYWRkIDEwLl0KKyAqCisgKiBUaGlzIGFsZ29yaXRobSB3YXMgZmlyc3QgcHVibGlzaGVkIGJ5IEdhdXNzIChJIHRoaW5rKS4KKyAqCisgKiBXQVJOSU5HOiB0aGlzIGZ1bmN0aW9uIHdpbGwgb3ZlcmZsb3cgb24gMjEwNi0wMi0wNyAwNjoyODoxNiBvbgorICogbWFjaGluZXMgd2VyZSBsb25nIGlzIDMyLWJpdCEgKEhvd2V2ZXIsIGFzIHRpbWVfdCBpcyBzaWduZWQsIHdlCisgKiB3aWxsIGFscmVhZHkgZ2V0IHByb2JsZW1zIGF0IG90aGVyIHBsYWNlcyBvbiAyMDM4LTAxLTE5IDAzOjE0OjA4KQorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK21rdGltZSAodW5zaWduZWQgaW50IHllYXIsIHVuc2lnbmVkIGludCBtb24sCisJdW5zaWduZWQgaW50IGRheSwgdW5zaWduZWQgaW50IGhvdXIsCisJdW5zaWduZWQgaW50IG1pbiwgdW5zaWduZWQgaW50IHNlYykKK3sKKwlpZiAoMCA+PSAoaW50KSAobW9uIC09IDIpKSB7CS8qIDEuLjEyIC0+IDExLDEyLDEuLjEwICovCisJCW1vbiArPSAxMjsJCS8qIFB1dHMgRmViIGxhc3Qgc2luY2UgaXQgaGFzIGxlYXAgZGF5ICovCisJCXllYXIgLT0gMTsKKwl9CisKKwlyZXR1cm4gKCgoCisJCSh1bnNpZ25lZCBsb25nKSAoeWVhci80IC0geWVhci8xMDAgKyB5ZWFyLzQwMCArIDM2Nyptb24vMTIgKyBkYXkpICsKKwkJCXllYXIqMzY1IC0gNzE5NDk5CisJICAgICkqMjQgKyBob3VyIC8qIG5vdyBoYXZlIGhvdXJzICovCisJICApKjYwICsgbWluIC8qIG5vdyBoYXZlIG1pbnV0ZXMgKi8KKwkpKjYwICsgc2VjOyAvKiBmaW5hbGx5IHNlY29uZHMgKi8KK30KKworZXh0ZXJuIHN0cnVjdCB0aW1lc3BlYyB4dGltZTsKK2V4dGVybiBzdHJ1Y3QgdGltZXNwZWMgd2FsbF90b19tb25vdG9uaWM7CitleHRlcm4gc2VxbG9ja190IHh0aW1lX2xvY2s7CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfc2Vjb25kcyh2b2lkKQoreyAKKwlyZXR1cm4geHRpbWUudHZfc2VjOworfQorCitzdHJ1Y3QgdGltZXNwZWMgY3VycmVudF9rZXJuZWxfdGltZSh2b2lkKTsKKworI2RlZmluZSBDVVJSRU5UX1RJTUUgKGN1cnJlbnRfa2VybmVsX3RpbWUoKSkKKyNkZWZpbmUgQ1VSUkVOVF9USU1FX1NFQyAoKHN0cnVjdCB0aW1lc3BlYykgeyB4dGltZS50dl9zZWMsIDAgfSkKKworZXh0ZXJuIHZvaWQgZG9fZ2V0dGltZW9mZGF5KHN0cnVjdCB0aW1ldmFsICp0dik7CitleHRlcm4gaW50IGRvX3NldHRpbWVvZmRheShzdHJ1Y3QgdGltZXNwZWMgKnR2KTsKK2V4dGVybiBpbnQgZG9fc3lzX3NldHRpbWVvZmRheShzdHJ1Y3QgdGltZXNwZWMgKnR2LCBzdHJ1Y3QgdGltZXpvbmUgKnR6KTsKK2V4dGVybiB2b2lkIGNsb2NrX3dhc19zZXQodm9pZCk7IC8vIGNhbGwgd2hlbiBldmVyIHRoZSBjbG9jayBpcyBzZXQKK2V4dGVybiBpbnQgZG9fcG9zaXhfY2xvY2tfbW9ub3RvbmljX2dldHRpbWUoc3RydWN0IHRpbWVzcGVjICp0cCk7CitleHRlcm4gbG9uZyBkb19uYW5vc2xlZXAoc3RydWN0IHRpbWVzcGVjICp0KTsKK2V4dGVybiBsb25nIGRvX3V0aW1lcyhjaGFyIF9fdXNlciAqIGZpbGVuYW1lLCBzdHJ1Y3QgdGltZXZhbCAqIHRpbWVzKTsKK3N0cnVjdCBpdGltZXJ2YWw7CitleHRlcm4gaW50IGRvX3NldGl0aW1lcihpbnQgd2hpY2gsIHN0cnVjdCBpdGltZXJ2YWwgKnZhbHVlLCBzdHJ1Y3QgaXRpbWVydmFsICpvdmFsdWUpOworZXh0ZXJuIGludCBkb19nZXRpdGltZXIoaW50IHdoaWNoLCBzdHJ1Y3QgaXRpbWVydmFsICp2YWx1ZSk7CitleHRlcm4gdm9pZCBnZXRuc3RpbWVvZmRheSAoc3RydWN0IHRpbWVzcGVjICp0dik7CisKK2V4dGVybiBzdHJ1Y3QgdGltZXNwZWMgdGltZXNwZWNfdHJ1bmMoc3RydWN0IHRpbWVzcGVjIHQsIHVuc2lnbmVkIGdyYW4pOworCitzdGF0aWMgaW5saW5lIHZvaWQKK3NldF9ub3JtYWxpemVkX3RpbWVzcGVjIChzdHJ1Y3QgdGltZXNwZWMgKnRzLCB0aW1lX3Qgc2VjLCBsb25nIG5zZWMpCit7CisJd2hpbGUgKG5zZWMgPiBOU0VDX1BFUl9TRUMpIHsKKwkJbnNlYyAtPSBOU0VDX1BFUl9TRUM7CisJCSsrc2VjOworCX0KKwl3aGlsZSAobnNlYyA8IDApIHsKKwkJbnNlYyArPSBOU0VDX1BFUl9TRUM7CisJCS0tc2VjOworCX0KKwl0cy0+dHZfc2VjID0gc2VjOworCXRzLT50dl9uc2VjID0gbnNlYzsKK30KKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2RlZmluZSBORkRCSVRTCQkJX19ORkRCSVRTCisKKyNkZWZpbmUgRkRfU0VUU0laRQkJX19GRF9TRVRTSVpFCisjZGVmaW5lIEZEX1NFVChmZCxmZHNldHApCV9fRkRfU0VUKGZkLGZkc2V0cCkKKyNkZWZpbmUgRkRfQ0xSKGZkLGZkc2V0cCkJX19GRF9DTFIoZmQsZmRzZXRwKQorI2RlZmluZSBGRF9JU1NFVChmZCxmZHNldHApCV9fRkRfSVNTRVQoZmQsZmRzZXRwKQorI2RlZmluZSBGRF9aRVJPKGZkc2V0cCkJCV9fRkRfWkVSTyhmZHNldHApCisKKy8qCisgKiBOYW1lcyBvZiB0aGUgaW50ZXJ2YWwgdGltZXJzLCBhbmQgc3RydWN0dXJlCisgKiBkZWZpbmluZyBhIHRpbWVyIHNldHRpbmcuCisgKi8KKyNkZWZpbmUJSVRJTUVSX1JFQUwJMAorI2RlZmluZQlJVElNRVJfVklSVFVBTAkxCisjZGVmaW5lCUlUSU1FUl9QUk9GCTIKKworc3RydWN0ICBpdGltZXJzcGVjIHsKKyAgICAgICAgc3RydWN0ICB0aW1lc3BlYyBpdF9pbnRlcnZhbDsgICAgLyogdGltZXIgcGVyaW9kICovCisgICAgICAgIHN0cnVjdCAgdGltZXNwZWMgaXRfdmFsdWU7ICAgICAgIC8qIHRpbWVyIGV4cGlyYXRpb24gKi8KK307CisKK3N0cnVjdAlpdGltZXJ2YWwgeworCXN0cnVjdAl0aW1ldmFsIGl0X2ludGVydmFsOwkvKiB0aW1lciBpbnRlcnZhbCAqLworCXN0cnVjdAl0aW1ldmFsIGl0X3ZhbHVlOwkvKiBjdXJyZW50IHZhbHVlICovCit9OworCisKKy8qCisgKiBUaGUgSURzIG9mIHRoZSB2YXJpb3VzIHN5c3RlbSBjbG9ja3MgKGZvciBQT1NJWC4xYiBpbnRlcnZhbCB0aW1lcnMpLgorICovCisjZGVmaW5lIENMT0NLX1JFQUxUSU1FCQkgIDAKKyNkZWZpbmUgQ0xPQ0tfTU9OT1RPTklDCSAgMQorI2RlZmluZSBDTE9DS19QUk9DRVNTX0NQVVRJTUVfSUQgMgorI2RlZmluZSBDTE9DS19USFJFQURfQ1BVVElNRV9JRAkgMworI2RlZmluZSBDTE9DS19SRUFMVElNRV9IUgkgNAorI2RlZmluZSBDTE9DS19NT05PVE9OSUNfSFIJICA1CisKKy8qCisgKiBUaGUgSURzIG9mIHZhcmlvdXMgaGFyZHdhcmUgY2xvY2tzCisgKi8KKworCisjZGVmaW5lIENMT0NLX1NHSV9DWUNMRSAxMAorI2RlZmluZSBNQVhfQ0xPQ0tTIDE2CisjZGVmaW5lIENMT0NLU19NQVNLICAoQ0xPQ0tfUkVBTFRJTUUgfCBDTE9DS19NT05PVE9OSUMgfCBcCisgICAgICAgICAgICAgICAgICAgICBDTE9DS19SRUFMVElNRV9IUiB8IENMT0NLX01PTk9UT05JQ19IUikKKyNkZWZpbmUgQ0xPQ0tTX01PTk8gKENMT0NLX01PTk9UT05JQyAmIENMT0NLX01PTk9UT05JQ19IUikKKworLyoKKyAqIFRoZSB2YXJpb3VzIGZsYWdzIGZvciBzZXR0aW5nIFBPU0lYLjFiIGludGVydmFsIHRpbWVycy4KKyAqLworCisjZGVmaW5lIFRJTUVSX0FCU1RJTUUgMHgwMQorCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90aW1lci5oIGIvaW5jbHVkZS9saW51eC90aW1lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwZGIxY2MKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3RpbWVyLmgKQEAgLTAsMCArMSwxMDIgQEAKKyNpZm5kZWYgX0xJTlVYX1RJTUVSX0gKKyNkZWZpbmUgX0xJTlVYX1RJTUVSX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgorCitzdHJ1Y3QgdHZlY190X2Jhc2VfczsKKworc3RydWN0IHRpbWVyX2xpc3QgeworCXN0cnVjdCBsaXN0X2hlYWQgZW50cnk7CisJdW5zaWduZWQgbG9uZyBleHBpcmVzOworCisJc3BpbmxvY2tfdCBsb2NrOworCXVuc2lnbmVkIGxvbmcgbWFnaWM7CisKKwl2b2lkICgqZnVuY3Rpb24pKHVuc2lnbmVkIGxvbmcpOworCXVuc2lnbmVkIGxvbmcgZGF0YTsKKworCXN0cnVjdCB0dmVjX3RfYmFzZV9zICpiYXNlOworfTsKKworI2RlZmluZSBUSU1FUl9NQUdJQwkweDRiODdhZDZlCisKKyNkZWZpbmUgVElNRVJfSU5JVElBTElaRVIoX2Z1bmN0aW9uLCBfZXhwaXJlcywgX2RhdGEpIHsJCVwKKwkJLmZ1bmN0aW9uID0gKF9mdW5jdGlvbiksCQkJXAorCQkuZXhwaXJlcyA9IChfZXhwaXJlcyksCQkJCVwKKwkJLmRhdGEgPSAoX2RhdGEpLAkJCQlcCisJCS5iYXNlID0gTlVMTCwJCQkJCVwKKwkJLm1hZ2ljID0gVElNRVJfTUFHSUMsCQkJCVwKKwkJLmxvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQsCQkJXAorCX0KKworLyoqKgorICogaW5pdF90aW1lciAtIGluaXRpYWxpemUgYSB0aW1lci4KKyAqIEB0aW1lcjogdGhlIHRpbWVyIHRvIGJlIGluaXRpYWxpemVkCisgKgorICogaW5pdF90aW1lcigpIG11c3QgYmUgZG9uZSB0byBhIHRpbWVyIHByaW9yIGNhbGxpbmcgKmFueSogb2YgdGhlCisgKiBvdGhlciB0aW1lciBmdW5jdGlvbnMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICogdGltZXIpCit7CisJdGltZXItPmJhc2UgPSBOVUxMOworCXRpbWVyLT5tYWdpYyA9IFRJTUVSX01BR0lDOworCXNwaW5fbG9ja19pbml0KCZ0aW1lci0+bG9jayk7Cit9CisKKy8qKioKKyAqIHRpbWVyX3BlbmRpbmcgLSBpcyBhIHRpbWVyIHBlbmRpbmc/CisgKiBAdGltZXI6IHRoZSB0aW1lciBpbiBxdWVzdGlvbgorICoKKyAqIHRpbWVyX3BlbmRpbmcgd2lsbCB0ZWxsIHdoZXRoZXIgYSBnaXZlbiB0aW1lciBpcyBjdXJyZW50bHkgcGVuZGluZywKKyAqIG9yIG5vdC4gQ2FsbGVycyBtdXN0IGVuc3VyZSBzZXJpYWxpemF0aW9uIHdydC4gb3RoZXIgb3BlcmF0aW9ucyBkb25lCisgKiB0byB0aGlzIHRpbWVyLCBlZy4gaW50ZXJydXB0IGNvbnRleHRzLCBvciBvdGhlciBDUFVzIG9uIFNNUC4KKyAqCisgKiByZXR1cm4gdmFsdWU6IDEgaWYgdGhlIHRpbWVyIGlzIHBlbmRpbmcsIDAgaWYgbm90LgorICovCitzdGF0aWMgaW5saW5lIGludCB0aW1lcl9wZW5kaW5nKGNvbnN0IHN0cnVjdCB0aW1lcl9saXN0ICogdGltZXIpCit7CisJcmV0dXJuIHRpbWVyLT5iYXNlICE9IE5VTEw7Cit9CisKK2V4dGVybiB2b2lkIGFkZF90aW1lcl9vbihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIsIGludCBjcHUpOworZXh0ZXJuIGludCBkZWxfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKiB0aW1lcik7CitleHRlcm4gaW50IF9fbW9kX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciwgdW5zaWduZWQgbG9uZyBleHBpcmVzKTsKK2V4dGVybiBpbnQgbW9kX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciwgdW5zaWduZWQgbG9uZyBleHBpcmVzKTsKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbmV4dF90aW1lcl9pbnRlcnJ1cHQodm9pZCk7CisKKy8qKioKKyAqIGFkZF90aW1lciAtIHN0YXJ0IGEgdGltZXIKKyAqIEB0aW1lcjogdGhlIHRpbWVyIHRvIGJlIGFkZGVkCisgKgorICogVGhlIGtlcm5lbCB3aWxsIGRvIGEgLT5mdW5jdGlvbigtPmRhdGEpIGNhbGxiYWNrIGZyb20gdGhlCisgKiB0aW1lciBpbnRlcnJ1cHQgYXQgdGhlIC0+ZXhwaXJlZCBwb2ludCBpbiB0aGUgZnV0dXJlLiBUaGUKKyAqIGN1cnJlbnQgdGltZSBpcyAnamlmZmllcycuCisgKgorICogVGhlIHRpbWVyJ3MgLT5leHBpcmVkLCAtPmZ1bmN0aW9uIChhbmQgaWYgdGhlIGhhbmRsZXIgdXNlcyBpdCwgLT5kYXRhKQorICogZmllbGRzIG11c3QgYmUgc2V0IHByaW9yIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKyAqCisgKiBUaW1lcnMgd2l0aCBhbiAtPmV4cGlyZWQgZmllbGQgaW4gdGhlIHBhc3Qgd2lsbCBiZSBleGVjdXRlZCBpbiB0aGUgbmV4dAorICogdGltZXIgdGljay4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGFkZF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqIHRpbWVyKQoreworCV9fbW9kX3RpbWVyKHRpbWVyLCB0aW1lci0+ZXhwaXJlcyk7Cit9CisKKyNpZmRlZiBDT05GSUdfU01QCisgIGV4dGVybiBpbnQgZGVsX3RpbWVyX3N5bmMoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKTsKKyAgZXh0ZXJuIGludCBkZWxfc2luZ2xlc2hvdF90aW1lcl9zeW5jKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcik7CisjZWxzZQorIyBkZWZpbmUgZGVsX3RpbWVyX3N5bmModCkgZGVsX3RpbWVyKHQpCisjIGRlZmluZSBkZWxfc2luZ2xlc2hvdF90aW1lcl9zeW5jKHQpIGRlbF90aW1lcih0KQorI2VuZGlmCisKK2V4dGVybiB2b2lkIGluaXRfdGltZXJzKHZvaWQpOworZXh0ZXJuIHZvaWQgcnVuX2xvY2FsX3RpbWVycyh2b2lkKTsKK2V4dGVybiB2b2lkIGl0X3JlYWxfZm4odW5zaWduZWQgbG9uZyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90aW1lcy5oIGIvaW5jbHVkZS9saW51eC90aW1lcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyZDMwMjAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3RpbWVzLmgKQEAgLTAsMCArMSwxMyBAQAorI2lmbmRlZiBfTElOVVhfVElNRVNfSAorI2RlZmluZSBfTElOVVhfVElNRVNfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IHRtcyB7CisJY2xvY2tfdCB0bXNfdXRpbWU7CisJY2xvY2tfdCB0bXNfc3RpbWU7CisJY2xvY2tfdCB0bXNfY3V0aW1lOworCWNsb2NrX3QgdG1zX2NzdGltZTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90aW1leC5oIGIvaW5jbHVkZS9saW51eC90aW1leC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0ZmRkMDcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3RpbWV4LmgKQEAgLTAsMCArMSwzMjAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBDb3B5cmlnaHQgKGMpIERhdmlkIEwuIE1pbGxzIDE5OTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzICAgICAqCisgKiBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkICoKKyAqIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhlICAgKgorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyAgICAgICAgICAqCisgKiBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBVbml2ZXJzaXR5IG9mIERlbGF3YXJlIG5vdCBiZSB1c2VkIGluICAgICoKKyAqIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgICAgICAgKgorICogd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAgVGhlIFVuaXZlcnNpdHkgb2YgRGVsYXdhcmUgICAqCisgKiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IHRoaXMgc29mdHdhcmUgZm9yIGFueSAgICAgICoKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LiAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBNb2RpZmljYXRpb24gaGlzdG9yeSB0aW1leC5oCisgKgorICogMjkgRGVjIDk3CVJ1c3NlbGwgS2luZworICoJTW92ZWQgQ0xPQ0tfVElDS19SQVRFLCBDTE9DS19USUNLX0ZBQ1RPUiBhbmQgRklORVRVTkUgdG8gYXNtL3RpbWV4LmgKKyAqCWZvciBBUk0gbWFjaGluZXMKKyAqCisgKiAgOSBKYW4gOTcgICAgQWRyaWFuIFN1bgorICogICAgICBTaGlmdGVkIExBVENIIGRlZmluZSB0byBhbGxvdyBhY2Nlc3MgdG8gYWxwaGEgbWFjaGluZXMuCisgKgorICogMjYgU2VwIDk0CURhdmlkIEwuIE1pbGxzCisgKglBZGRlZCBkZWZpbmVzIGZvciBoeWJyaWQgcGhhc2UvZnJlcXVlbmN5LWxvY2sgbG9vcC4KKyAqCisgKiAxOSBNYXIgOTQJRGF2aWQgTC4gTWlsbHMKKyAqCU1vdmVkIGRlZmluZXMgZnJvbSBrZXJuZWwgcm91dGluZXMgdG8gaGVhZGVyIGZpbGUgYW5kIGFkZGVkIG5ldworICoJZGVmaW5lcyBmb3IgUFBTIHBoYXNlLWxvY2sgbG9vcC4KKyAqCisgKiAyMCBGZWIgOTQJRGF2aWQgTC4gTWlsbHMKKyAqCVJldmlzZWQgc3RhdHVzIGNvZGVzIGFuZCBzdHJ1Y3R1cmVzIGZvciBleHRlcm5hbCBjbG9jayBhbmQgUFBTCisgKglzaWduYWwgZGlzY2lwbGluZS4KKyAqCisgKiAyOCBOb3YgOTMJRGF2aWQgTC4gTWlsbHMKKyAqCUFkanVzdGVkIHBhcmFtZXRlcnMgdG8gaW1wcm92ZSBzdGFiaWxpdHkgYW5kIGluY3JlYXNlIHBvbGwKKyAqCWludGVydmFsLgorICoKKyAqIDE3IFNlcCA5MyAgICBEYXZpZCBMLiBNaWxscworICogICAgICBDcmVhdGVkIGZpbGUgJE5UUC9pbmNsdWRlL3N5cy90aW1leC5oCisgKiAwNyBPY3QgOTMgICAgVG9yc3RlbiBEdXdlCisgKiAgICAgIERlcml2ZWQgbGludXgvdGltZXguaAorICogMTk5NS0wOC0xMyAgICBUb3JzdGVuIER1d2UKKyAqICAgICAga2VybmVsIFBMTCB1cGRhdGVkIHRvIDE5OTQtMTItMTMgc3BlY3MgKHJmYy0xNTg5KQorICogMTk5Ny0wOC0zMCAgICBVbHJpY2ggV2luZGwKKyAqICAgICAgQWRkZWQgbmV3IGNvbnN0YW50IE5UUF9QSEFTRV9MSU1JVAorICogMjAwNC0wOC0xMiAgICBDaHJpc3RvcGggTGFtZXRlcgorICogICAgICBSZXdvcmtlZCB0aW1lIGludGVycG9sYXRpb24gbG9naWMKKyAqLworI2lmbmRlZiBfTElOVVhfVElNRVhfSAorI2RlZmluZSBfTElOVVhfVElNRVhfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisKKyNpbmNsdWRlIDxhc20vcGFyYW0uaD4KKyNpbmNsdWRlIDxhc20vdGltZXguaD4KKworLyoKKyAqIFNISUZUX0tHIGFuZCBTSElGVF9LRiBlc3RhYmxpc2ggdGhlIGRhbXBpbmcgb2YgdGhlIFBMTCBhbmQgYXJlIGNob3NlbgorICogZm9yIGEgc2xpZ2h0bHkgdW5kZXJkYW1wZWQgY29udmVyZ2VuY2UgY2hhcmFjdGVyaXN0aWMuIFNISUZUX0tICisgKiBlc3RhYmxpc2hlcyB0aGUgZGFtcGluZyBvZiB0aGUgRkxMIGFuZCBpcyBjaG9zZW4gYnkgd2lzZG9tIGFuZCBibGFjaworICogYXJ0LgorICoKKyAqIE1BWFRDIGVzdGFibGlzaGVzIHRoZSBtYXhpbXVtIHRpbWUgY29uc3RhbnQgb2YgdGhlIFBMTC4gV2l0aCB0aGUKKyAqIFNISUZUX0tHIGFuZCBTSElGVF9LRiB2YWx1ZXMgZ2l2ZW4gYW5kIGEgdGltZSBjb25zdGFudCByYW5nZSBmcm9tCisgKiB6ZXJvIHRvIE1BWFRDLCB0aGUgUExMIHdpbGwgY29udmVyZ2UgaW4gMTUgbWludXRlcyB0byAxNiBob3VycywKKyAqIHJlc3BlY3RpdmVseS4KKyAqLworI2RlZmluZSBTSElGVF9LRyA2CQkvKiBwaGFzZSBmYWN0b3IgKHNoaWZ0KSAqLworI2RlZmluZSBTSElGVF9LRiAxNgkJLyogUExMIGZyZXF1ZW5jeSBmYWN0b3IgKHNoaWZ0KSAqLworI2RlZmluZSBTSElGVF9LSCAyCQkvKiBGTEwgZnJlcXVlbmN5IGZhY3RvciAoc2hpZnQpICovCisjZGVmaW5lIE1BWFRDIDYJCQkvKiBtYXhpbXVtIHRpbWUgY29uc3RhbnQgKHNoaWZ0KSAqLworCisvKgorICogVGhlIFNISUZUX1NDQUxFIGRlZmluZSBlc3RhYmxpc2hlcyB0aGUgZGVjaW1hbCBwb2ludCBvZiB0aGUgdGltZV9waGFzZQorICogdmFyaWFibGUgd2hpY2ggc2VydmVzIGFzIGFuIGV4dGVuc2lvbiB0byB0aGUgbG93LW9yZGVyIGJpdHMgb2YgdGhlCisgKiBzeXN0ZW0gY2xvY2sgdmFyaWFibGUuIFRoZSBTSElGVF9VUERBVEUgZGVmaW5lIGVzdGFibGlzaGVzIHRoZSBkZWNpbWFsCisgKiBwb2ludCBvZiB0aGUgdGltZV9vZmZzZXQgdmFyaWFibGUgd2hpY2ggcmVwcmVzZW50cyB0aGUgY3VycmVudCBvZmZzZXQKKyAqIHdpdGggcmVzcGVjdCB0byBzdGFuZGFyZCB0aW1lLiBUaGUgRklORU5TRUMgZGVmaW5lIHJlcHJlc2VudHMgMSBuc2VjIGluCisgKiBzY2FsZWQgdW5pdHMuCisgKgorICogU0hJRlRfVVNFQyBkZWZpbmVzIHRoZSBzY2FsaW5nIChzaGlmdCkgb2YgdGhlIHRpbWVfZnJlcSBhbmQKKyAqIHRpbWVfdG9sZXJhbmNlIHZhcmlhYmxlcywgd2hpY2ggcmVwcmVzZW50IHRoZSBjdXJyZW50IGZyZXF1ZW5jeQorICogb2Zmc2V0IGFuZCBtYXhpbXVtIGZyZXF1ZW5jeSB0b2xlcmFuY2UuCisgKgorICogRklORU5TRUMgaXMgMSBucyBpbiBTSElGVF9VUERBVEUgdW5pdHMgb2YgdGhlIHRpbWVfcGhhc2UgdmFyaWFibGUuCisgKi8KKyNkZWZpbmUgU0hJRlRfU0NBTEUgMjIJCS8qIHBoYXNlIHNjYWxlIChzaGlmdCkgKi8KKyNkZWZpbmUgU0hJRlRfVVBEQVRFIChTSElGVF9LRyArIE1BWFRDKSAvKiB0aW1lIG9mZnNldCBzY2FsZSAoc2hpZnQpICovCisjZGVmaW5lIFNISUZUX1VTRUMgMTYJCS8qIGZyZXF1ZW5jeSBvZmZzZXQgc2NhbGUgKHNoaWZ0KSAqLworI2RlZmluZSBGSU5FTlNFQyAoMUwgPDwgKFNISUZUX1NDQUxFIC0gMTApKSAvKiB+MSBucyBpbiBwaGFzZSB1bml0cyAqLworCisjZGVmaW5lIE1BWFBIQVNFIDUxMjAwMEwgICAgICAgIC8qIG1heCBwaGFzZSBlcnJvciAodXMpICovCisjZGVmaW5lIE1BWEZSRVEgKDUxMkwgPDwgU0hJRlRfVVNFQykgIC8qIG1heCBmcmVxdWVuY3kgZXJyb3IgKHBwbSkgKi8KKyNkZWZpbmUgTUFYVElNRSAoMjAwTCA8PCBQUFNfQVZHKSAvKiBtYXggUFBTIGVycm9yIChqaXR0ZXIpICgyMDAgdXMpICovCisjZGVmaW5lIE1JTlNFQyAxNkwgICAgICAgICAgICAgIC8qIG1pbiBpbnRlcnZhbCBiZXR3ZWVuIHVwZGF0ZXMgKHMpICovCisjZGVmaW5lIE1BWFNFQyAxMjAwTCAgICAgICAgICAgIC8qIG1heCBpbnRlcnZhbCBiZXR3ZWVuIHVwZGF0ZXMgKHMpICovCisjZGVmaW5lCU5UUF9QSEFTRV9MSU1JVAkoTUFYUEhBU0UgPDwgNSkJLyogYmV5b25kIG1heC4gZGlzcGVyc2lvbiAqLworCisvKgorICogVGhlIGZvbGxvd2luZyBkZWZpbmVzIGFyZSB1c2VkIG9ubHkgaWYgYSBwdWxzZS1wZXItc2Vjb25kIChQUFMpCisgKiBzaWduYWwgaXMgYXZhaWxhYmxlIGFuZCBjb25uZWN0ZWQgdmlhIGEgbW9kZW0gY29udHJvbCBsZWFkLCBzdWNoIGFzCisgKiBwcm9kdWNlZCBieSB0aGUgb3B0aW9uYWwgcHBzY2xvY2sgZmVhdHVyZSBpbmNvcnBvcmF0ZWQgaW4gdGhlIFN1bgorICogYXN5bmNoIGRyaXZlci4gVGhleSBlc3RhYmxpc2ggdGhlIGRlc2lnbiBwYXJhbWV0ZXJzIG9mIHRoZSBmcmVxdWVuY3ktCisgKiBsb2NrIGxvb3AgdXNlZCB0byBkaXNjaXBsaW5lIHRoZSBDUFUgY2xvY2sgb3NjaWxsYXRvciB0byB0aGUgUFBTCisgKiBzaWduYWwuCisgKgorICogUFBTX0FWRyBpcyB0aGUgYXZlcmFnaW5nIGZhY3RvciBmb3IgdGhlIGZyZXF1ZW5jeSBsb29wLCBhcyB3ZWxsIGFzCisgKiB0aGUgdGltZSBhbmQgZnJlcXVlbmN5IGRpc3BlcnNpb24uCisgKgorICogUFBTX1NISUZUIGFuZCBQUFNfU0hJRlRNQVggc3BlY2lmeSB0aGUgbWluaW11bSBhbmQgbWF4aW11bQorICogY2FsaWJyYXRpb24gaW50ZXJ2YWxzLCByZXNwZWN0aXZlbHksIGluIHNlY29uZHMgYXMgYSBwb3dlciBvZiB0d28uCisgKgorICogUFBTX1ZBTElEIGlzIHRoZSBtYXhpbXVtIGludGVydmFsIGJlZm9yZSB0aGUgUFBTIHNpZ25hbCBpcyBjb25zaWRlcmVkCisgKiBpbnZhbGlkIGFuZCBwcm90b2NvbCB1cGRhdGVzIHVzZWQgZGlyZWN0bHkgaW5zdGVhZC4KKyAqCisgKiBNQVhHTElUQ0ggaXMgdGhlIG1heGltdW0gaW50ZXJ2YWwgYmVmb3JlIGEgdGltZSBvZmZzZXQgb2YgbW9yZSB0aGFuCisgKiBNQVhUSU1FIGlzIGJlbGlldmVkLgorICovCisjZGVmaW5lIFBQU19BVkcgMgkJLyogcHBzIGF2ZXJhZ2luZyBjb25zdGFudCAoc2hpZnQpICovCisjZGVmaW5lIFBQU19TSElGVCAyCQkvKiBtaW4gaW50ZXJ2YWwgZHVyYXRpb24gKHMpIChzaGlmdCkgKi8KKyNkZWZpbmUgUFBTX1NISUZUTUFYIDgJCS8qIG1heCBpbnRlcnZhbCBkdXJhdGlvbiAocykgKHNoaWZ0KSAqLworI2RlZmluZSBQUFNfVkFMSUQgMTIwCQkvKiBwcHMgc2lnbmFsIHdhdGNoZG9nIG1heCAocykgKi8KKyNkZWZpbmUgTUFYR0xJVENIIDMwCQkvKiBwcHMgc2lnbmFsIGdsaXRjaCBtYXggKHMpICovCisKKy8qCisgKiBzeXNjYWxsIGludGVyZmFjZSAtIHVzZWQgKG1haW5seSBieSBOVFAgZGFlbW9uKQorICogdG8gZGlzY2lwbGluZSBrZXJuZWwgY2xvY2sgb3NjaWxsYXRvcgorICovCitzdHJ1Y3QgdGltZXggeworCXVuc2lnbmVkIGludCBtb2RlczsJLyogbW9kZSBzZWxlY3RvciAqLworCWxvbmcgb2Zmc2V0OwkJLyogdGltZSBvZmZzZXQgKHVzZWMpICovCisJbG9uZyBmcmVxOwkJLyogZnJlcXVlbmN5IG9mZnNldCAoc2NhbGVkIHBwbSkgKi8KKwlsb25nIG1heGVycm9yOwkJLyogbWF4aW11bSBlcnJvciAodXNlYykgKi8KKwlsb25nIGVzdGVycm9yOwkJLyogZXN0aW1hdGVkIGVycm9yICh1c2VjKSAqLworCWludCBzdGF0dXM7CQkvKiBjbG9jayBjb21tYW5kL3N0YXR1cyAqLworCWxvbmcgY29uc3RhbnQ7CQkvKiBwbGwgdGltZSBjb25zdGFudCAqLworCWxvbmcgcHJlY2lzaW9uOwkJLyogY2xvY2sgcHJlY2lzaW9uICh1c2VjKSAocmVhZCBvbmx5KSAqLworCWxvbmcgdG9sZXJhbmNlOwkJLyogY2xvY2sgZnJlcXVlbmN5IHRvbGVyYW5jZSAocHBtKQorCQkJCSAqIChyZWFkIG9ubHkpCisJCQkJICovCisJc3RydWN0IHRpbWV2YWwgdGltZTsJLyogKHJlYWQgb25seSkgKi8KKwlsb25nIHRpY2s7CQkvKiAobW9kaWZpZWQpIHVzZWNzIGJldHdlZW4gY2xvY2sgdGlja3MgKi8KKworCWxvbmcgcHBzZnJlcTsgICAgICAgICAgIC8qIHBwcyBmcmVxdWVuY3kgKHNjYWxlZCBwcG0pIChybykgKi8KKwlsb25nIGppdHRlcjsgICAgICAgICAgICAvKiBwcHMgaml0dGVyICh1cykgKHJvKSAqLworCWludCBzaGlmdDsgICAgICAgICAgICAgIC8qIGludGVydmFsIGR1cmF0aW9uIChzKSAoc2hpZnQpIChybykgKi8KKwlsb25nIHN0YWJpbDsgICAgICAgICAgICAvKiBwcHMgc3RhYmlsaXR5IChzY2FsZWQgcHBtKSAocm8pICovCisJbG9uZyBqaXRjbnQ7ICAgICAgICAgICAgLyogaml0dGVyIGxpbWl0IGV4Y2VlZGVkIChybykgKi8KKwlsb25nIGNhbGNudDsgICAgICAgICAgICAvKiBjYWxpYnJhdGlvbiBpbnRlcnZhbHMgKHJvKSAqLworCWxvbmcgZXJyY250OyAgICAgICAgICAgIC8qIGNhbGlicmF0aW9uIGVycm9ycyAocm8pICovCisJbG9uZyBzdGJjbnQ7ICAgICAgICAgICAgLyogc3RhYmlsaXR5IGxpbWl0IGV4Y2VlZGVkIChybykgKi8KKworCWludCAgOjMyOyBpbnQgIDozMjsgaW50ICA6MzI7IGludCAgOjMyOworCWludCAgOjMyOyBpbnQgIDozMjsgaW50ICA6MzI7IGludCAgOjMyOworCWludCAgOjMyOyBpbnQgIDozMjsgaW50ICA6MzI7IGludCAgOjMyOworfTsKKworLyoKKyAqIE1vZGUgY29kZXMgKHRpbWV4Lm1vZGUpCisgKi8KKyNkZWZpbmUgQURKX09GRlNFVAkJMHgwMDAxCS8qIHRpbWUgb2Zmc2V0ICovCisjZGVmaW5lIEFESl9GUkVRVUVOQ1kJCTB4MDAwMgkvKiBmcmVxdWVuY3kgb2Zmc2V0ICovCisjZGVmaW5lIEFESl9NQVhFUlJPUgkJMHgwMDA0CS8qIG1heGltdW0gdGltZSBlcnJvciAqLworI2RlZmluZSBBREpfRVNURVJST1IJCTB4MDAwOAkvKiBlc3RpbWF0ZWQgdGltZSBlcnJvciAqLworI2RlZmluZSBBREpfU1RBVFVTCQkweDAwMTAJLyogY2xvY2sgc3RhdHVzICovCisjZGVmaW5lIEFESl9USU1FQ09OU1QJCTB4MDAyMAkvKiBwbGwgdGltZSBjb25zdGFudCAqLworI2RlZmluZSBBREpfVElDSwkJMHg0MDAwCS8qIHRpY2sgdmFsdWUgKi8KKyNkZWZpbmUgQURKX09GRlNFVF9TSU5HTEVTSE9UCTB4ODAwMQkvKiBvbGQtZmFzaGlvbmVkIGFkanRpbWUgKi8KKworLyogeG50cCAzLjQgY29tcGF0aWJpbGl0eSBuYW1lcyAqLworI2RlZmluZSBNT0RfT0ZGU0VUCUFESl9PRkZTRVQKKyNkZWZpbmUgTU9EX0ZSRVFVRU5DWQlBREpfRlJFUVVFTkNZCisjZGVmaW5lIE1PRF9NQVhFUlJPUglBREpfTUFYRVJST1IKKyNkZWZpbmUgTU9EX0VTVEVSUk9SCUFESl9FU1RFUlJPUgorI2RlZmluZSBNT0RfU1RBVFVTCUFESl9TVEFUVVMKKyNkZWZpbmUgTU9EX1RJTUVDT05TVAlBREpfVElNRUNPTlNUCisjZGVmaW5lIE1PRF9DTEtCCUFESl9USUNLCisjZGVmaW5lIE1PRF9DTEtBCUFESl9PRkZTRVRfU0lOR0xFU0hPVCAvKiAweDgwMDAgaW4gb3JpZ2luYWwgKi8KKworCisvKgorICogU3RhdHVzIGNvZGVzICh0aW1leC5zdGF0dXMpCisgKi8KKyNkZWZpbmUgU1RBX1BMTAkJMHgwMDAxCS8qIGVuYWJsZSBQTEwgdXBkYXRlcyAocncpICovCisjZGVmaW5lIFNUQV9QUFNGUkVRCTB4MDAwMgkvKiBlbmFibGUgUFBTIGZyZXEgZGlzY2lwbGluZSAocncpICovCisjZGVmaW5lIFNUQV9QUFNUSU1FCTB4MDAwNAkvKiBlbmFibGUgUFBTIHRpbWUgZGlzY2lwbGluZSAocncpICovCisjZGVmaW5lIFNUQV9GTEwJCTB4MDAwOAkvKiBzZWxlY3QgZnJlcXVlbmN5LWxvY2sgbW9kZSAocncpICovCisKKyNkZWZpbmUgU1RBX0lOUwkJMHgwMDEwCS8qIGluc2VydCBsZWFwIChydykgKi8KKyNkZWZpbmUgU1RBX0RFTAkJMHgwMDIwCS8qIGRlbGV0ZSBsZWFwIChydykgKi8KKyNkZWZpbmUgU1RBX1VOU1lOQwkweDAwNDAJLyogY2xvY2sgdW5zeW5jaHJvbml6ZWQgKHJ3KSAqLworI2RlZmluZSBTVEFfRlJFUUhPTEQJMHgwMDgwCS8qIGhvbGQgZnJlcXVlbmN5IChydykgKi8KKworI2RlZmluZSBTVEFfUFBTU0lHTkFMCTB4MDEwMAkvKiBQUFMgc2lnbmFsIHByZXNlbnQgKHJvKSAqLworI2RlZmluZSBTVEFfUFBTSklUVEVSCTB4MDIwMAkvKiBQUFMgc2lnbmFsIGppdHRlciBleGNlZWRlZCAocm8pICovCisjZGVmaW5lIFNUQV9QUFNXQU5ERVIJMHgwNDAwCS8qIFBQUyBzaWduYWwgd2FuZGVyIGV4Y2VlZGVkIChybykgKi8KKyNkZWZpbmUgU1RBX1BQU0VSUk9SCTB4MDgwMAkvKiBQUFMgc2lnbmFsIGNhbGlicmF0aW9uIGVycm9yIChybykgKi8KKworI2RlZmluZSBTVEFfQ0xPQ0tFUlIJMHgxMDAwCS8qIGNsb2NrIGhhcmR3YXJlIGZhdWx0IChybykgKi8KKworI2RlZmluZSBTVEFfUk9OTFkgKFNUQV9QUFNTSUdOQUwgfCBTVEFfUFBTSklUVEVSIHwgU1RBX1BQU1dBTkRFUiB8IFwKKyAgICBTVEFfUFBTRVJST1IgfCBTVEFfQ0xPQ0tFUlIpIC8qIHJlYWQtb25seSBiaXRzICovCisKKy8qCisgKiBDbG9jayBzdGF0ZXMgKHRpbWVfc3RhdGUpCisgKi8KKyNkZWZpbmUgVElNRV9PSwkJMAkvKiBjbG9jayBzeW5jaHJvbml6ZWQsIG5vIGxlYXAgc2Vjb25kICovCisjZGVmaW5lIFRJTUVfSU5TCTEJLyogaW5zZXJ0IGxlYXAgc2Vjb25kICovCisjZGVmaW5lIFRJTUVfREVMCTIJLyogZGVsZXRlIGxlYXAgc2Vjb25kICovCisjZGVmaW5lIFRJTUVfT09QCTMJLyogbGVhcCBzZWNvbmQgaW4gcHJvZ3Jlc3MgKi8KKyNkZWZpbmUgVElNRV9XQUlUCTQJLyogbGVhcCBzZWNvbmQgaGFzIG9jY3VycmVkICovCisjZGVmaW5lIFRJTUVfRVJST1IJNQkvKiBjbG9jayBub3Qgc3luY2hyb25pemVkICovCisjZGVmaW5lIFRJTUVfQkFECVRJTUVfRVJST1IgLyogYncgY29tcGF0ICovCisKKyNpZmRlZiBfX0tFUk5FTF9fCisvKgorICoga2VybmVsIHZhcmlhYmxlcworICogTm90ZTogbWF4aW11bSBlcnJvciA9IE5UUCBzeW5jaCBkaXN0YW5jZSA9IGRpc3BlcnNpb24gKyBkZWxheSAvIDI7CisgKiBlc3RpbWF0ZWQgZXJyb3IgPSBOVFAgZGlzcGVyc2lvbi4KKyAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdGlja191c2VjOwkJLyogVVNFUl9IWiBwZXJpb2QgKHVzZWMpICovCitleHRlcm4gdW5zaWduZWQgbG9uZyB0aWNrX25zZWM7CQkvKiBBQ1RIWiAgICAgICAgICBwZXJpb2QgKG5zZWMpICovCitleHRlcm4gaW50IHRpY2thZGo7CQkJLyogYW1vdW50IG9mIGFkanVzdG1lbnQgcGVyIHRpY2sgKi8KKworLyoKKyAqIHBoYXNlLWxvY2sgbG9vcCB2YXJpYWJsZXMKKyAqLworZXh0ZXJuIGludCB0aW1lX3N0YXRlOwkJLyogY2xvY2sgc3RhdHVzICovCitleHRlcm4gaW50IHRpbWVfc3RhdHVzOwkJLyogY2xvY2sgc3luY2hyb25pemF0aW9uIHN0YXR1cyBiaXRzICovCitleHRlcm4gbG9uZyB0aW1lX29mZnNldDsJLyogdGltZSBhZGp1c3RtZW50ICh1cykgKi8KK2V4dGVybiBsb25nIHRpbWVfY29uc3RhbnQ7CS8qIHBsbCB0aW1lIGNvbnN0YW50ICovCitleHRlcm4gbG9uZyB0aW1lX3RvbGVyYW5jZTsJLyogZnJlcXVlbmN5IHRvbGVyYW5jZSAocHBtKSAqLworZXh0ZXJuIGxvbmcgdGltZV9wcmVjaXNpb247CS8qIGNsb2NrIHByZWNpc2lvbiAodXMpICovCitleHRlcm4gbG9uZyB0aW1lX21heGVycm9yOwkvKiBtYXhpbXVtIGVycm9yICovCitleHRlcm4gbG9uZyB0aW1lX2VzdGVycm9yOwkvKiBlc3RpbWF0ZWQgZXJyb3IgKi8KKworZXh0ZXJuIGxvbmcgdGltZV9mcmVxOwkJLyogZnJlcXVlbmN5IG9mZnNldCAoc2NhbGVkIHBwbSkgKi8KK2V4dGVybiBsb25nIHRpbWVfcmVmdGltZTsJLyogdGltZSBhdCBsYXN0IGFkanVzdG1lbnQgKHMpICovCisKK2V4dGVybiBsb25nIHRpbWVfYWRqdXN0OwkvKiBUaGUgYW1vdW50IG9mIGFkanRpbWUgbGVmdCAqLworZXh0ZXJuIGxvbmcgdGltZV9uZXh0X2FkanVzdDsJLyogVmFsdWUgZm9yIHRpbWVfYWRqdXN0IGF0IG5leHQgdGljayAqLworCisvKiBpbnRlcmZhY2UgdmFyaWFibGVzIHBwcy0+dGltZXIgaW50ZXJydXB0ICovCitleHRlcm4gbG9uZyBwcHNfb2Zmc2V0OwkJLyogcHBzIHRpbWUgb2Zmc2V0ICh1cykgKi8KK2V4dGVybiBsb25nIHBwc19qaXR0ZXI7CQkvKiB0aW1lIGRpc3BlcnNpb24gKGppdHRlcikgKHVzKSAqLworZXh0ZXJuIGxvbmcgcHBzX2ZyZXE7CQkvKiBmcmVxdWVuY3kgb2Zmc2V0IChzY2FsZWQgcHBtKSAqLworZXh0ZXJuIGxvbmcgcHBzX3N0YWJpbDsJCS8qIGZyZXF1ZW5jeSBkaXNwZXJzaW9uIChzY2FsZWQgcHBtKSAqLworZXh0ZXJuIGxvbmcgcHBzX3ZhbGlkOwkJLyogcHBzIHNpZ25hbCB3YXRjaGRvZyBjb3VudGVyICovCisKKy8qIGludGVyZmFjZSB2YXJpYWJsZXMgcHBzLT5hZGp0aW1leCAqLworZXh0ZXJuIGludCBwcHNfc2hpZnQ7CQkvKiBpbnRlcnZhbCBkdXJhdGlvbiAocykgKHNoaWZ0KSAqLworZXh0ZXJuIGxvbmcgcHBzX2ppdGNudDsJCS8qIGppdHRlciBsaW1pdCBleGNlZWRlZCAqLworZXh0ZXJuIGxvbmcgcHBzX2NhbGNudDsJCS8qIGNhbGlicmF0aW9uIGludGVydmFscyAqLworZXh0ZXJuIGxvbmcgcHBzX2VycmNudDsJCS8qIGNhbGlicmF0aW9uIGVycm9ycyAqLworZXh0ZXJuIGxvbmcgcHBzX3N0YmNudDsJCS8qIHN0YWJpbGl0eSBsaW1pdCBleGNlZWRlZCAqLworCisjaWZkZWYgQ09ORklHX1RJTUVfSU5URVJQT0xBVElPTgorCisjZGVmaW5lIFRJTUVfU09VUkNFX0NQVSAwCisjZGVmaW5lIFRJTUVfU09VUkNFX01NSU82NCAxCisjZGVmaW5lIFRJTUVfU09VUkNFX01NSU8zMiAyCisjZGVmaW5lIFRJTUVfU09VUkNFX0ZVTkNUSU9OIDMKKworLyogRm9yIHByb3BlciBvcGVyYXRpb25zIHRpbWVfaW50ZXJwb2xhdG9yIGNsb2NrcyBtdXN0IHJ1biBzbGlnaHRseSBzbG93ZXIKKyAqIHRoYW4gdGhlIHN0YW5kYXJkIGNsb2NrIHNpbmNlIHRoZSBpbnRlcnBvbGF0b3IgbWF5IG9ubHkgY29ycmVjdCBieSBoYXZpbmcKKyAqIHRpbWUganVtcCBmb3J3YXJkIGR1cmluZyBhIHRpY2suIEEgc2xvd2VyIGNsb2NrIGlzIHVzdWFsbHkgYSBzaWRlIGVmZmVjdAorICogb2YgdGhlIGludGVnZXIgZGl2aWRlIG9mIHRoZSBuYW5vc2Vjb25kcyBpbiBhIHNlY29uZCBieSB0aGUgZnJlcXVlbmN5LgorICogVGhlIGFjY3VyYWN5IG9mIHRoZSBkaXZpc2lvbiBjYW4gYmUgaW5jcmVhc2VkIGJ5IHNwZWNpZnlpbmcgYSBzaGlmdC4KKyAqIEhvd2V2ZXIsIHRoaXMgbWF5IGNhdXNlIHRoZSBjbG9jayBub3QgdG8gYmUgc2xvdyBlbm91Z2guCisgKiBUaGUgaW50ZXJwb2xhdG9yIHdpbGwgc2VsZi10dW5lIHRoZSBjbG9jayBieSBzbG93aW5nIGRvd24gaWYgbm8KKyAqIHJlc2V0cyBvY2N1ciBvciBzcGVlZGluZyB1cCBpZiB0aGUgdGltZSBqdW1wcyBwZXIgYW5hbHlzaXMgY3ljbGUKKyAqIGJlY29tZSB0b28gaGlnaC4KKyAqCisgKiBTZXR0aW5nIGppdHRlciBjb21wZW5zYXRlcyBmb3IgYSBmbHVjdHVhdGluZyB0aW1lc291cmNlIGJ5IGNvbXBhcmluZworICogdG8gdGhlIGxhc3QgdmFsdWUgcmVhZCBmcm9tIHRoZSB0aW1lc291cmNlIHRvIGluc3VyZSB0aGF0IGFuIGVhcmxpZXIgdmFsdWUKKyAqIGlzIG5vdCByZXR1cm5lZCBieSBhIGxhdGVyIGNhbGwuIFRoZSBwcmljZSB0byBwYXkKKyAqIGZvciB0aGUgY29tcGVuc2F0aW9uIGlzIHRoYXQgdGhlIHRpbWVyIHJvdXRpbmVzIGFyZSBub3QgYXMgc2NhbGFibGUgYW55bW9yZS4KKyAqLworCitzdHJ1Y3QgdGltZV9pbnRlcnBvbGF0b3IgeworCXUxNiBzb3VyY2U7CQkJLyogdGltZSBzb3VyY2UgZmxhZ3MgKi8KKwl1OCBzaGlmdDsJCQkvKiBpbmNyZWFzZXMgYWNjdXJhY3kgb2YgbXVsdGlwbHkgYnkgc2hpZnRpbmcuICovCisJCQkJLyogTm90ZSB0aGF0IGJpdHMgbWF5IGJlIGxvc3QgaWYgc2hpZnQgaXMgc2V0IHRvbyBoaWdoICovCisJdTggaml0dGVyOwkJCS8qIGlmIHNldCBjb21wZW5zYXRlIGZvciBmbHVjdHVhdGlvbnMgKi8KKwl1MzIgbnNlY19wZXJfY3ljOwkJLyogc2V0IGJ5IHJlZ2lzdGVyX3RpbWVfaW50ZXJwb2xhdG9yKCkgKi8KKwl2b2lkICphZGRyOwkJCS8qIGFkZHJlc3Mgb2YgY291bnRlciBvciBmdW5jdGlvbiAqLworCXU2NCBtYXNrOwkJCS8qIG1hc2sgdGhlIHZhbGlkIGJpdHMgb2YgdGhlIGNvdW50ZXIgKi8KKwl1bnNpZ25lZCBsb25nIG9mZnNldDsJCS8qIG5zZWMgb2Zmc2V0IGF0IGxhc3QgdXBkYXRlIG9mIGludGVycG9sYXRvciAqLworCXU2NCBsYXN0X2NvdW50ZXI7CQkvKiBjb3VudGVyIHZhbHVlIGluIHVuaXRzIG9mIHRoZSBjb3VudGVyIGF0IGxhc3QgdXBkYXRlICovCisJdTY0IGxhc3RfY3ljbGU7CQkJLyogTGFzdCB0aW1lciB2YWx1ZSBpZiBUSU1FX1NPVVJDRV9KSVRURVIgaXMgc2V0ICovCisJdTY0IGZyZXF1ZW5jeTsJCQkvKiBmcmVxdWVuY3kgaW4gY291bnRzL3NlY29uZCAqLworCWxvbmcgZHJpZnQ7CQkJLyogZHJpZnQgaW4gcGFydHMtcGVyLW1pbGxpb24gKG9yIC0xKSAqLworCXVuc2lnbmVkIGxvbmcgc2tpcHM7CQkvKiBza2lwcyBmb3J3YXJkICovCisJdW5zaWduZWQgbG9uZyBuc19za2lwcGVkOwkvKiBuYW5vc2Vjb25kcyBza2lwcGVkICovCisJc3RydWN0IHRpbWVfaW50ZXJwb2xhdG9yICpuZXh0OworfTsKKworZXh0ZXJuIHZvaWQgcmVnaXN0ZXJfdGltZV9pbnRlcnBvbGF0b3Ioc3RydWN0IHRpbWVfaW50ZXJwb2xhdG9yICopOworZXh0ZXJuIHZvaWQgdW5yZWdpc3Rlcl90aW1lX2ludGVycG9sYXRvcihzdHJ1Y3QgdGltZV9pbnRlcnBvbGF0b3IgKik7CitleHRlcm4gdm9pZCB0aW1lX2ludGVycG9sYXRvcl9yZXNldCh2b2lkKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHRpbWVfaW50ZXJwb2xhdG9yX2dldF9vZmZzZXQodm9pZCk7CisKKyNlbHNlIC8qICFDT05GSUdfVElNRV9JTlRFUlBPTEFUSU9OICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAordGltZV9pbnRlcnBvbGF0b3JfcmVzZXQodm9pZCkKK3sKK30KKworI2VuZGlmIC8qICFDT05GSUdfVElNRV9JTlRFUlBPTEFUSU9OICovCisKKyNlbmRpZiAvKiBLRVJORUwgKi8KKworI2VuZGlmIC8qIExJTlVYX1RJTUVYX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGlvY2wuaCBiL2luY2x1ZGUvbGludXgvdGlvY2wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzllODQ3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC90aW9jbC5oCkBAIC0wLDAgKzEsMzggQEAKKyNpZm5kZWYgX0xJTlVYX1RJT0NMX0gKKyNkZWZpbmUgX0xJTlVYX1RJT0NMX0gKKworI2RlZmluZSBUSU9DTF9TRVRTRUwJMgkvKiBzZXQgYSBzZWxlY3Rpb24gKi8KKyNkZWZpbmUgCVRJT0NMX1NFTENIQVIJMAkvKiBzZWxlY3QgY2hhcmFjdGVycyAqLworI2RlZmluZSAJVElPQ0xfU0VMV09SRAkxCS8qIHNlbGVjdCB3aG9sZSB3b3JkcyAqLworI2RlZmluZSAJVElPQ0xfU0VMTElORQkyCS8qIHNlbGVjdCB3aG9sZSBsaW5lcyAqLworI2RlZmluZSAJVElPQ0xfU0VMUE9JTlRFUgkzCS8qIHNob3cgdGhlIHBvaW50ZXIgKi8KKyNkZWZpbmUgCVRJT0NMX1NFTENMRUFSCTQJLyogY2xlYXIgdmlzaWJpbGl0eSBvZiBzZWxlY3Rpb24gKi8KKyNkZWZpbmUgCVRJT0NMX1NFTE1PVVNFUkVQT1JUCTE2CS8qIHJlcG9ydCBiZWdpbm5pbmcgb2Ygc2VsZWN0aW9uICovCisjZGVmaW5lIAlUSU9DTF9TRUxCVVRUT05NQVNLCTE1CS8qIGJ1dHRvbiBtYXNrIGZvciByZXBvcnQgKi8KKy8qIHNlbGVjdGlvbiBleHRlbnQgKi8KK3N0cnVjdCB0aW9jbF9zZWxlY3Rpb24geworCXVuc2lnbmVkIHNob3J0IHhzOwkvKiBYIHN0YXJ0ICovCisJdW5zaWduZWQgc2hvcnQgeXM7CS8qIFkgc3RhcnQgKi8KKwl1bnNpZ25lZCBzaG9ydCB4ZTsJLyogWCBlbmQgKi8KKwl1bnNpZ25lZCBzaG9ydCB5ZTsJLyogWSBlbmQgKi8KKwl1bnNpZ25lZCBzaG9ydCBzZWxfbW9kZTsJLyogc2VsZWN0aW9uIG1vZGUgKi8KK307CisKKyNkZWZpbmUgVElPQ0xfUEFTVEVTRUwJMwkvKiBwYXN0ZSBwcmV2aW91cyBzZWxlY3Rpb24gKi8KKyNkZWZpbmUgVElPQ0xfVU5CTEFOS1NDUkVFTgk0CS8qIHVuYmxhbmsgc2NyZWVuICovCisKKyNkZWZpbmUgVElPQ0xfU0VMTE9BRExVVAk1CisJLyogc2V0IGNoYXJhY3RlcnMgdG8gYmUgY29uc2lkZXJlZCBhbHBoYWJldGljIHdoZW4gc2VsZWN0aW5nICovCisJLyogdTMyWzhdIGJpdCBhcnJheSwgNCBieXRlcy1hbGlnbmVkIHdpdGggdHlwZSAqLworCisvKiB0aGVzZSB0d28gZG9uJ3QgcmV0dXJuIGEgdmFsdWU6IHRoZXkgd3JpdGUgaXQgYmFjayBpbiB0aGUgdHlwZSAqLworI2RlZmluZSBUSU9DTF9HRVRTSElGVFNUQVRFCTYJLyogd3JpdGUgc2hpZnQgc3RhdGUgKi8KKyNkZWZpbmUgVElPQ0xfR0VUTU9VU0VSRVBPUlRJTkcJNwkvKiB3cml0ZSB3aGV0aGVyIG1vdXNlIGV2ZW50IGFyZSByZXBvcnRlZCAqLworI2RlZmluZSBUSU9DTF9TRVRWRVNBQkxBTksJMTAJLyogc2V0IHZlc2EgYmxhbmtpbmcgbW9kZSAqLworI2RlZmluZSBUSU9DTF9TRVRLTVNHUkVESVJFQ1QJMTEJLyogcmVzdHJpY3Qga2VybmVsIG1lc3NhZ2VzIHRvIGEgdnQgKi8KKyNkZWZpbmUgVElPQ0xfR0VURkdDT05TT0xFCTEyCS8qIGdldCBmb3JlZ3JvdW5kIHZ0ICovCisjZGVmaW5lIFRJT0NMX1NDUk9MTENPTlNPTEUJMTMJLyogc2Nyb2xsIGNvbnNvbGUgKi8KKyNkZWZpbmUgVElPQ0xfQkxBTktTQ1JFRU4JMTQJLyoga2VlcCBzY3JlZW4gYmxhbmsgZXZlbiBpZiBhIGtleSBpcyBwcmVzc2VkICovCisjZGVmaW5lIFRJT0NMX0JMQU5LRURTQ1JFRU4JMTUJLyogcmV0dXJuIHdoaWNoIHZ0IHdhcyBibGFua2VkICovCisKKyNlbmRpZiAvKiBfTElOVVhfVElPQ0xfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90b3BvbG9neS5oIGIvaW5jbHVkZS9saW51eC90b3BvbG9neS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3MGU4OTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3RvcG9sb2d5LmgKQEAgLTAsMCArMSwxMzYgQEAKKy8qCisgKiBpbmNsdWRlL2xpbnV4L3RvcG9sb2d5LmgKKyAqCisgKiBXcml0dGVuIGJ5OiBNYXR0aGV3IERvYnNvbiwgSUJNIENvcnBvcmF0aW9uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAyLCBJQk0gQ29ycC4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUKKyAqIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKiBTZW5kIGZlZWRiYWNrIHRvIDxjb2xwYXRjaEB1cy5pYm0uY29tPgorICovCisjaWZuZGVmIF9MSU5VWF9UT1BPTE9HWV9ICisjZGVmaW5lIF9MSU5VWF9UT1BPTE9HWV9ICisKKyNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvbW16b25lLmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CisjaW5jbHVkZSA8YXNtL3RvcG9sb2d5Lmg+CisKKyNpZm5kZWYgbm9kZV9oYXNfb25saW5lX21lbQorI2RlZmluZSBub2RlX2hhc19vbmxpbmVfbWVtKG5pZCkgKDEpCisjZW5kaWYKKworI2lmbmRlZiBucl9jcHVzX25vZGUKKyNkZWZpbmUgbnJfY3B1c19ub2RlKG5vZGUpCQkJCQkJCVwKKwkoewkJCQkJCQkJCVwKKwkJY3B1bWFza190IF9fdG1wX187CQkJCQkJXAorCQlfX3RtcF9fID0gbm9kZV90b19jcHVtYXNrKG5vZGUpOwkJCQlcCisJCWNwdXNfd2VpZ2h0KF9fdG1wX18pOwkJCQkJCVwKKwl9KQorI2VuZGlmCisKKyNkZWZpbmUgZm9yX2VhY2hfbm9kZV93aXRoX2NwdXMobm9kZSkJCQkJCQlcCisJZm9yX2VhY2hfb25saW5lX25vZGUobm9kZSkJCQkJCQlcCisJCWlmIChucl9jcHVzX25vZGUobm9kZSkpCisKKyNpZm5kZWYgbm9kZV9kaXN0YW5jZQorLyogQ29uZm9ybSB0byBBQ1BJIDIuMCBTTElUIGRpc3RhbmNlIGRlZmluaXRpb25zICovCisjZGVmaW5lIExPQ0FMX0RJU1RBTkNFCQkxMAorI2RlZmluZSBSRU1PVEVfRElTVEFOQ0UJCTIwCisjZGVmaW5lIG5vZGVfZGlzdGFuY2UoZnJvbSx0bykJKChmcm9tKSA9PSAodG8pID8gTE9DQUxfRElTVEFOQ0UgOiBSRU1PVEVfRElTVEFOQ0UpCisjZW5kaWYKKyNpZm5kZWYgUEVOQUxUWV9GT1JfTk9ERV9XSVRIX0NQVVMKKyNkZWZpbmUgUEVOQUxUWV9GT1JfTk9ERV9XSVRIX0NQVVMJKDEpCisjZW5kaWYKKworLyoKKyAqIEJlbG93IGFyZSB0aGUgMyBtYWpvciBpbml0aWFsaXplcnMgdXNlZCBpbiBidWlsZGluZyBzY2hlZF9kb21haW5zOgorICogU0RfU0lCTElOR19JTklULCBmb3IgU01UIGRvbWFpbnMKKyAqIFNEX0NQVV9JTklULCBmb3IgU01QIGRvbWFpbnMKKyAqIFNEX05PREVfSU5JVCwgZm9yIE5VTUEgZG9tYWlucworICoKKyAqIEFueSBhcmNoaXRlY3R1cmUgdGhhdCBjYXJlcyB0byBkbyBhbnkgdHVuaW5nIHRvIHRoZXNlIHZhbHVlcyBzaG91bGQgZG8gc28KKyAqIGJ5IGRlZmluaW5nIHRoZWlyIG93biBhcmNoLXNwZWNpZmljIGluaXRpYWxpemVyIGluIGluY2x1ZGUvYXNtL3RvcG9sb2d5LmguCisgKiBBIGRlZmluaXRpb24gdGhlcmUgd2lsbCBhdXRvbWFnaWNhbGx5IG92ZXJyaWRlIHRoZXNlIGRlZmF1bHQgaW5pdGlhbGl6ZXJzCisgKiBhbmQgYWxsb3cgYXJjaC1zcGVjaWZpYyBwZXJmb3JtYW5jZSB0dW5pbmcgb2Ygc2NoZWRfZG9tYWlucy4KKyAqLworI2lmZGVmIENPTkZJR19TQ0hFRF9TTVQKKy8qIE1DRCAtIERvIHdlIHJlYWxseSBuZWVkIHRoaXM/ICBJdCBpcyBhbHdheXMgb24gaWYgQ09ORklHX1NDSEVEX1NNVCBpcywKKyAqIHNvIGNhbid0IHdlIGRyb3AgdGhpcyBpbiBmYXZvciBvZiBDT05GSUdfU0NIRURfU01UPworICovCisjZGVmaW5lIEFSQ0hfSEFTX1NDSEVEX1dBS0VfSURMRQorLyogQ29tbW9uIHZhbHVlcyBmb3IgU01UIHNpYmxpbmdzICovCisjaWZuZGVmIFNEX1NJQkxJTkdfSU5JVAorI2RlZmluZSBTRF9TSUJMSU5HX0lOSVQgKHN0cnVjdCBzY2hlZF9kb21haW4pIHsJCVwKKwkuc3BhbgkJCT0gQ1BVX01BU0tfTk9ORSwJXAorCS5wYXJlbnQJCQk9IE5VTEwsCQkJXAorCS5ncm91cHMJCQk9IE5VTEwsCQkJXAorCS5taW5faW50ZXJ2YWwJCT0gMSwJCQlcCisJLm1heF9pbnRlcnZhbAkJPSAyLAkJCVwKKwkuYnVzeV9mYWN0b3IJCT0gOCwJCQlcCisJLmltYmFsYW5jZV9wY3QJCT0gMTEwLAkJCVwKKwkuY2FjaGVfaG90X3RpbWUJCT0gMCwJCQlcCisJLmNhY2hlX25pY2VfdHJpZXMJPSAwLAkJCVwKKwkucGVyX2NwdV9nYWluCQk9IDI1LAkJCVwKKwkuZmxhZ3MJCQk9IFNEX0xPQURfQkFMQU5DRQlcCisJCQkJfCBTRF9CQUxBTkNFX05FV0lETEUJXAorCQkJCXwgU0RfQkFMQU5DRV9FWEVDCVwKKwkJCQl8IFNEX1dBS0VfQUZGSU5FCVwKKwkJCQl8IFNEX1dBS0VfSURMRQkJXAorCQkJCXwgU0RfU0hBUkVfQ1BVUE9XRVIsCVwKKwkubGFzdF9iYWxhbmNlCQk9IGppZmZpZXMsCQlcCisJLmJhbGFuY2VfaW50ZXJ2YWwJPSAxLAkJCVwKKwkubnJfYmFsYW5jZV9mYWlsZWQJPSAwLAkJCVwKK30KKyNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19TQ0hFRF9TTVQgKi8KKworLyogQ29tbW9uIHZhbHVlcyBmb3IgQ1BVcyAqLworI2lmbmRlZiBTRF9DUFVfSU5JVAorI2RlZmluZSBTRF9DUFVfSU5JVCAoc3RydWN0IHNjaGVkX2RvbWFpbikgewkJXAorCS5zcGFuCQkJPSBDUFVfTUFTS19OT05FLAlcCisJLnBhcmVudAkJCT0gTlVMTCwJCQlcCisJLmdyb3VwcwkJCT0gTlVMTCwJCQlcCisJLm1pbl9pbnRlcnZhbAkJPSAxLAkJCVwKKwkubWF4X2ludGVydmFsCQk9IDQsCQkJXAorCS5idXN5X2ZhY3RvcgkJPSA2NCwJCQlcCisJLmltYmFsYW5jZV9wY3QJCT0gMTI1LAkJCVwKKwkuY2FjaGVfaG90X3RpbWUJCT0gKDUqMTAwMDAwMC8yKSwJXAorCS5jYWNoZV9uaWNlX3RyaWVzCT0gMSwJCQlcCisJLnBlcl9jcHVfZ2FpbgkJPSAxMDAsCQkJXAorCS5mbGFncwkJCT0gU0RfTE9BRF9CQUxBTkNFCVwKKwkJCQl8IFNEX0JBTEFOQ0VfTkVXSURMRQlcCisJCQkJfCBTRF9CQUxBTkNFX0VYRUMJXAorCQkJCXwgU0RfV0FLRV9BRkZJTkUJXAorCQkJCXwgU0RfV0FLRV9JRExFCQlcCisJCQkJfCBTRF9XQUtFX0JBTEFOQ0UsCVwKKwkubGFzdF9iYWxhbmNlCQk9IGppZmZpZXMsCQlcCisJLmJhbGFuY2VfaW50ZXJ2YWwJPSAxLAkJCVwKKwkubnJfYmFsYW5jZV9mYWlsZWQJPSAwLAkJCVwKK30KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX05VTUEKKyNpZm5kZWYgU0RfTk9ERV9JTklUCisjZXJyb3IgUGxlYXNlIGRlZmluZSBhbiBhcHByb3ByaWF0ZSBTRF9OT0RFX0lOSVQgaW4gaW5jbHVkZS9hc20vdG9wb2xvZ3kuaCEhIQorI2VuZGlmCisjZW5kaWYgLyogQ09ORklHX05VTUEgKi8KKworI2VuZGlmIC8qIF9MSU5VWF9UT1BPTE9HWV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Rvc2hpYmEuaCBiL2luY2x1ZGUvbGludXgvdG9zaGliYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNmU1ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3Rvc2hpYmEuaApAQCAtMCwwICsxLDM2IEBACisvKiB0b3NoaWJhLmggLS0gTGludXggZHJpdmVyIGZvciBhY2Nlc3NpbmcgdGhlIFNNTSBvbiBUb3NoaWJhIGxhcHRvcHMgCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk2LTIwMDAgIEpvbmF0aGFuIEEuIEJ1enphcmQgKGpvbmF0aGFuQGJ1enphcmQub3JnLnVrKQorICoKKyAqIFRoYW5rcyB0byBKdWVyZ2VuIEhlaW56bCA8anVlcmdlbkBtb25vY2VydXMuZGVtb24uY28udWs+IGZvciB0aGUgcG9pbnRlcnMKKyAqIG9uIG1ha2luZyBzdXJlIHRoZSBzdHJ1Y3R1cmUgaXMgYWxpZ25lZCBhbmQgcGFja2VkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworI2lmbmRlZiBfTElOVVhfVE9TSElCQV9ICisjZGVmaW5lIF9MSU5VWF9UT1NISUJBX0gKKworI2RlZmluZSBUT1NIX1BST0MgIi9wcm9jL3Rvc2hpYmEiCisjZGVmaW5lIFRPU0hfREVWSUNFICIvZGV2L3Rvc2hpYmEiCisjZGVmaW5lIFRPU0hfU01NIF9JT1dSKCd0JywgMHg5MCwgaW50KQkvKiBicm9rZW46IG1lYW50IDI0IGJ5dGVzICovCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQgZWF4OworCXVuc2lnbmVkIGludCBlYnggX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCXVuc2lnbmVkIGludCBlY3ggX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCXVuc2lnbmVkIGludCBlZHggX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCXVuc2lnbmVkIGludCBlc2kgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCXVuc2lnbmVkIGludCBlZGkgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBTTU1SZWdpc3RlcnM7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90cmFuc3BvcnRfY2xhc3MuaCBiL2luY2x1ZGUvbGludXgvdHJhbnNwb3J0X2NsYXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdkOThkMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvdHJhbnNwb3J0X2NsYXNzLmgKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqIHRyYW5zcG9ydF9jbGFzcy5oIC0gYSBnZW5lcmljIGNvbnRhaW5lciBmb3IgYWxsIHRyYW5zcG9ydCBjbGFzc2VzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA1IC0gSmFtZXMgQm90dG9tbGV5IDxKYW1lcy5Cb3R0b21sZXlAc3RlZWxleWUuY29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciBHUEx2MgorICovCisKKyNpZm5kZWYgX1RSQU5TUE9SVF9DTEFTU19IXworI2RlZmluZSBfVFJBTlNQT1JUX0NMQVNTX0hfCisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9hdHRyaWJ1dGVfY29udGFpbmVyLmg+CisKK3N0cnVjdCB0cmFuc3BvcnRfY2xhc3MgeworCXN0cnVjdCBjbGFzcyBjbGFzczsKKwlpbnQgKCpzZXR1cCkoc3RydWN0IGRldmljZSAqKTsKKwlpbnQgKCpjb25maWd1cmUpKHN0cnVjdCBkZXZpY2UgKik7CisJaW50ICgqcmVtb3ZlKShzdHJ1Y3QgZGV2aWNlICopOworfTsKKworI2RlZmluZSBERUNMQVJFX1RSQU5TUE9SVF9DTEFTUyhjbHMsIG5tLCBzdSwgcm0sIGNmZykJCQlcCitzdHJ1Y3QgdHJhbnNwb3J0X2NsYXNzIGNscyA9IHsJCQkJCQlcCisJLmNsYXNzID0gewkJCQkJCQlcCisJCS5uYW1lID0gbm0sCQkJCQkJXAorCX0sCQkJCQkJCQlcCisJLnNldHVwID0gc3UsCQkJCQkJCVwKKwkucmVtb3ZlID0gcm0sCQkJCQkJCVwKKwkuY29uZmlndXJlID0gY2ZnLAkJCQkJCVwKK30KKworCitzdHJ1Y3QgYW5vbl90cmFuc3BvcnRfY2xhc3MgeworCXN0cnVjdCB0cmFuc3BvcnRfY2xhc3MgdGNsYXNzOworCXN0cnVjdCBhdHRyaWJ1dGVfY29udGFpbmVyIGNvbnRhaW5lcjsKK307CisKKyNkZWZpbmUgREVDTEFSRV9BTk9OX1RSQU5TUE9SVF9DTEFTUyhjbHMsIG10Y2gsIGNmZykJCVwKK3N0cnVjdCBhbm9uX3RyYW5zcG9ydF9jbGFzcyBjbHMgPSB7CQkJCVwKKwkudGNsYXNzID0gewkJCQkJCVwKKwkJLmNvbmZpZ3VyZSA9IGNmZywJCQkJXAorCX0sCQkJCQkJCVwKKwkuIGNvbnRhaW5lciA9IHsJCQkJCQlcCisJCS5tYXRjaCA9IG10Y2gsCQkJCQlcCisJfSwJCQkJCQkJXAorfQorCisjZGVmaW5lIGNsYXNzX3RvX3RyYW5zcG9ydF9jbGFzcyh4KSBcCisJY29udGFpbmVyX29mKHgsIHN0cnVjdCB0cmFuc3BvcnRfY2xhc3MsIGNsYXNzKQorCitzdHJ1Y3QgdHJhbnNwb3J0X2NvbnRhaW5lciB7CisJc3RydWN0IGF0dHJpYnV0ZV9jb250YWluZXIgYWM7CisJc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqc3RhdGlzdGljczsKK307CisKKyNkZWZpbmUgYXR0cmlidXRlX2NvbnRhaW5lcl90b190cmFuc3BvcnRfY29udGFpbmVyKHgpIFwKKwljb250YWluZXJfb2YoeCwgc3RydWN0IHRyYW5zcG9ydF9jb250YWluZXIsIGFjKQorCit2b2lkIHRyYW5zcG9ydF9yZW1vdmVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKik7Cit2b2lkIHRyYW5zcG9ydF9hZGRfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKik7Cit2b2lkIHRyYW5zcG9ydF9zZXR1cF9kZXZpY2Uoc3RydWN0IGRldmljZSAqKTsKK3ZvaWQgdHJhbnNwb3J0X2NvbmZpZ3VyZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqKTsKK3ZvaWQgdHJhbnNwb3J0X2Rlc3Ryb3lfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKik7CisKK3N0YXRpYyBpbmxpbmUgdm9pZAordHJhbnNwb3J0X3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJdHJhbnNwb3J0X3NldHVwX2RldmljZShkZXYpOworCXRyYW5zcG9ydF9hZGRfZGV2aWNlKGRldik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAordHJhbnNwb3J0X3VucmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwl0cmFuc3BvcnRfcmVtb3ZlX2RldmljZShkZXYpOworCXRyYW5zcG9ydF9kZXN0cm95X2RldmljZShkZXYpOworfQorCitzdGF0aWMgaW5saW5lIGludCB0cmFuc3BvcnRfY29udGFpbmVyX3JlZ2lzdGVyKHN0cnVjdCB0cmFuc3BvcnRfY29udGFpbmVyICp0YykKK3sKKwlyZXR1cm4gYXR0cmlidXRlX2NvbnRhaW5lcl9yZWdpc3RlcigmdGMtPmFjKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgdHJhbnNwb3J0X2NvbnRhaW5lcl91bnJlZ2lzdGVyKHN0cnVjdCB0cmFuc3BvcnRfY29udGFpbmVyICp0YykKK3sKKwlyZXR1cm4gYXR0cmlidXRlX2NvbnRhaW5lcl91bnJlZ2lzdGVyKCZ0Yy0+YWMpOworfQorCitpbnQgdHJhbnNwb3J0X2NsYXNzX3JlZ2lzdGVyKHN0cnVjdCB0cmFuc3BvcnRfY2xhc3MgKik7CitpbnQgYW5vbl90cmFuc3BvcnRfY2xhc3NfcmVnaXN0ZXIoc3RydWN0IGFub25fdHJhbnNwb3J0X2NsYXNzICopOwordm9pZCB0cmFuc3BvcnRfY2xhc3NfdW5yZWdpc3RlcihzdHJ1Y3QgdHJhbnNwb3J0X2NsYXNzICopOwordm9pZCBhbm9uX3RyYW5zcG9ydF9jbGFzc191bnJlZ2lzdGVyKHN0cnVjdCBhbm9uX3RyYW5zcG9ydF9jbGFzcyAqKTsKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdHJkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvdHJkZXZpY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWExZjMzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC90cmRldmljZS5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBJTkVUCQlBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgVENQL0lQIHByb3RvY29sIHN1aXRlIGZvciB0aGUgTElOVVgKKyAqCQlvcGVyYXRpbmcgc3lzdGVtLiAgTkVUICBpcyBpbXBsZW1lbnRlZCB1c2luZyB0aGUgIEJTRCBTb2NrZXQKKyAqCQlpbnRlcmZhY2UgYXMgdGhlIG1lYW5zIG9mIGNvbW11bmljYXRpb24gd2l0aCB0aGUgdXNlciBsZXZlbC4KKyAqCisgKgkJRGVmaW5pdGlvbnMgZm9yIHRoZSBUb2tlbi1yaW5nIGhhbmRsZXJzLgorICoKKyAqIFZlcnNpb246CUAoIylldGguaAkxLjAuNAkwNS8xMy85MworICoKKyAqIEF1dGhvcnM6CVJvc3MgQmlybywgPGJpcjdAbGVsYW5kLlN0YW5mb3JkLkVkdT4KKyAqCQlGcmVkIE4uIHZhbiBLZW1wZW4sIDx3YWx0amVAdVdhbHQuTkwuTXVnbmV0Lk9SRz4KKyAqCisgKgkJUmVsb2NhdGVkIHRvIGluY2x1ZGUvbGludXggd2hlcmUgaXQgYmVsb25ncyBieSBBbGFuIENveCAKKyAqCQkJCQkJCTxndzRwdHNAZ3c0cHRzLmFtcHIub3JnPgorICoKKyAqCQlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgkJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqCQlhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqCQkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqCVdBUk5JTkc6IFRoaXMgbW92ZSBtYXkgd2VsbCBiZSB0ZW1wb3JhcnkuIFRoaXMgZmlsZSB3aWxsIGdldCBtZXJnZWQgd2l0aCBvdGhlcnMgUlNOLgorICoKKyAqLworI2lmbmRlZiBfTElOVVhfVFJERVZJQ0VfSAorI2RlZmluZSBfTElOVVhfVFJERVZJQ0VfSAorCisKKyNpbmNsdWRlIDxsaW51eC9pZl90ci5oPgorCisjaWZkZWYgX19LRVJORUxfXworZXh0ZXJuIHVuc2lnbmVkIHNob3J0CXRyX3R5cGVfdHJhbnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitleHRlcm4gdm9pZCB0cl9zb3VyY2Vfcm91dGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRyaF9oZHIgKnRyaCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitleHRlcm4gc3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX3RyZGV2KGludCBzaXplb2ZfcHJpdik7CisKKyNlbmRpZgorCisjZW5kaWYJLyogX0xJTlVYX1RSREVWSUNFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdHR5LmggYi9pbmNsdWRlL2xpbnV4L3R0eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNzYxMDYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3R0eS5oCkBAIC0wLDAgKzEsNDEyIEBACisjaWZuZGVmIF9MSU5VWF9UVFlfSAorI2RlZmluZSBfTElOVVhfVFRZX0gKKworLyoKKyAqICd0dHkuaCcgZGVmaW5lcyBzb21lIHN0cnVjdHVyZXMgdXNlZCBieSB0dHlfaW8uYyBhbmQgc29tZSBkZWZpbmVzLgorICovCisKKy8qCisgKiBUaGVzZSBjb25zdGFudHMgYXJlIGFsc28gdXNlZnVsIGZvciB1c2VyLWxldmVsIGFwcHMgKGUuZy4sIFZDCisgKiByZXNpemluZykuCisgKi8KKyNkZWZpbmUgTUlOX05SX0NPTlNPTEVTIDEgICAgICAgLyogbXVzdCBiZSBhdCBsZWFzdCAxICovCisjZGVmaW5lIE1BWF9OUl9DT05TT0xFUwk2MwkvKiBzZXJpYWwgbGluZXMgc3RhcnQgYXQgNjQgKi8KKyNkZWZpbmUgTUFYX05SX1VTRVJfQ09OU09MRVMgNjMJLyogbXVzdCBiZSByb290IHRvIGFsbG9jYXRlIGFib3ZlIHRoaXMgKi8KKwkJLyogTm90ZTogdGhlIGlvY3RsIFZUX0dFVFNUQVRFIGRvZXMgbm90IHdvcmsgZm9yCisJCSAgIGNvbnNvbGVzIDE2IGFuZCBoaWdoZXIgKHNpbmNlIGl0IHJldHVybnMgYSBzaG9ydCkgKi8KKworI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CisjaW5jbHVkZSA8bGludXgvdGVybWlvcy5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfbGRpc2MuaD4KKworI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKworCisvKgorICogKE5vdGU6IHRoZSAqX2RyaXZlci5taW5vcl9zdGFydCB2YWx1ZXMgMSwgNjQsIDEyOCwgMTkyIGFyZQorICogaGFyZGNvZGVkIGF0IHByZXNlbnQuKQorICovCisjZGVmaW5lIE5SX1BUWVMJQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQgICAvKiBOdW1iZXIgb2YgbGVnYWN5IHB0eXMgKi8KKyNkZWZpbmUgTlJfVU5JWDk4X1BUWV9ERUZBVUxUCTQwOTYgICAgICAvKiBEZWZhdWx0IG1heGltdW0gZm9yIFVuaXg5OCBwdHlzICovCisjZGVmaW5lIE5SX1VOSVg5OF9QVFlfTUFYCSgxIDw8IE1JTk9SQklUUykgLyogQWJzb2x1dGUgbGltaXQgKi8KKyNkZWZpbmUgTlJfTERJU0NTCQkxNgorCisvKgorICogVGhlc2UgYXJlIHNldCB1cCBieSB0aGUgc2V0dXAtcm91dGluZSBhdCBib290LXRpbWU6CisgKi8KKworc3RydWN0IHNjcmVlbl9pbmZvIHsKKwl1OCAgb3JpZ194OwkJLyogMHgwMCAqLworCXU4ICBvcmlnX3k7CQkvKiAweDAxICovCisJdTE2IGRvbnR1c2UxOwkJLyogMHgwMiAtLSBFWFRfTUVNX0sgc2l0cyBoZXJlICovCisJdTE2IG9yaWdfdmlkZW9fcGFnZTsJLyogMHgwNCAqLworCXU4ICBvcmlnX3ZpZGVvX21vZGU7CS8qIDB4MDYgKi8KKwl1OCAgb3JpZ192aWRlb19jb2xzOwkvKiAweDA3ICovCisJdTE2IHVudXNlZDI7CQkvKiAweDA4ICovCisJdTE2IG9yaWdfdmlkZW9fZWdhX2J4OwkvKiAweDBhICovCisJdTE2IHVudXNlZDM7CQkvKiAweDBjICovCisJdTggIG9yaWdfdmlkZW9fbGluZXM7CS8qIDB4MGUgKi8KKwl1OCAgb3JpZ192aWRlb19pc1ZHQTsJLyogMHgwZiAqLworCXUxNiBvcmlnX3ZpZGVvX3BvaW50czsJLyogMHgxMCAqLworCisJLyogVkVTQSBncmFwaGljIG1vZGUgLS0gbGluZWFyIGZyYW1lIGJ1ZmZlciAqLworCXUxNiBsZmJfd2lkdGg7CQkvKiAweDEyICovCisJdTE2IGxmYl9oZWlnaHQ7CQkvKiAweDE0ICovCisJdTE2IGxmYl9kZXB0aDsJCS8qIDB4MTYgKi8KKwl1MzIgbGZiX2Jhc2U7CQkvKiAweDE4ICovCisJdTMyIGxmYl9zaXplOwkJLyogMHgxYyAqLworCXUxNiBkb250dXNlMiwgZG9udHVzZTM7CS8qIDB4MjAgLS0gQ0xfTUFHSUMgYW5kIENMX09GRlNFVCBoZXJlICovCisJdTE2IGxmYl9saW5lbGVuZ3RoOwkvKiAweDI0ICovCisJdTggIHJlZF9zaXplOwkJLyogMHgyNiAqLworCXU4ICByZWRfcG9zOwkJLyogMHgyNyAqLworCXU4ICBncmVlbl9zaXplOwkJLyogMHgyOCAqLworCXU4ICBncmVlbl9wb3M7CQkvKiAweDI5ICovCisJdTggIGJsdWVfc2l6ZTsJCS8qIDB4MmEgKi8KKwl1OCAgYmx1ZV9wb3M7CQkvKiAweDJiICovCisJdTggIHJzdmRfc2l6ZTsJCS8qIDB4MmMgKi8KKwl1OCAgcnN2ZF9wb3M7CQkvKiAweDJkICovCisJdTE2IHZlc2FwbV9zZWc7CQkvKiAweDJlICovCisJdTE2IHZlc2FwbV9vZmY7CQkvKiAweDMwICovCisJdTE2IHBhZ2VzOwkJLyogMHgzMiAqLworCXUxNiB2ZXNhX2F0dHJpYnV0ZXM7CS8qIDB4MzQgKi8KKwkJCQkvKiAweDM2IC0tIDB4M2YgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSBleHBhbnNpb24gKi8KK307CisKK2V4dGVybiBzdHJ1Y3Qgc2NyZWVuX2luZm8gc2NyZWVuX2luZm87CisKKyNkZWZpbmUgT1JJR19YCQkJKHNjcmVlbl9pbmZvLm9yaWdfeCkKKyNkZWZpbmUgT1JJR19ZCQkJKHNjcmVlbl9pbmZvLm9yaWdfeSkKKyNkZWZpbmUgT1JJR19WSURFT19NT0RFCQkoc2NyZWVuX2luZm8ub3JpZ192aWRlb19tb2RlKQorI2RlZmluZSBPUklHX1ZJREVPX0NPTFMgCShzY3JlZW5faW5mby5vcmlnX3ZpZGVvX2NvbHMpCisjZGVmaW5lIE9SSUdfVklERU9fRUdBX0JYCShzY3JlZW5faW5mby5vcmlnX3ZpZGVvX2VnYV9ieCkKKyNkZWZpbmUgT1JJR19WSURFT19MSU5FUwkoc2NyZWVuX2luZm8ub3JpZ192aWRlb19saW5lcykKKyNkZWZpbmUgT1JJR19WSURFT19JU1ZHQQkoc2NyZWVuX2luZm8ub3JpZ192aWRlb19pc1ZHQSkKKyNkZWZpbmUgT1JJR19WSURFT19QT0lOVFMgICAgICAgKHNjcmVlbl9pbmZvLm9yaWdfdmlkZW9fcG9pbnRzKQorCisjZGVmaW5lIFZJREVPX1RZUEVfTURBCQkweDEwCS8qIE1vbm9jaHJvbWUgVGV4dCBEaXNwbGF5CSovCisjZGVmaW5lIFZJREVPX1RZUEVfQ0dBCQkweDExCS8qIENHQSBEaXNwbGF5IAkJCSovCisjZGVmaW5lIFZJREVPX1RZUEVfRUdBTQkJMHgyMAkvKiBFR0EvVkdBIGluIE1vbm9jaHJvbWUgTW9kZQkqLworI2RlZmluZSBWSURFT19UWVBFX0VHQUMJCTB4MjEJLyogRUdBIGluIENvbG9yIE1vZGUJCSovCisjZGVmaW5lIFZJREVPX1RZUEVfVkdBQwkJMHgyMgkvKiBWR0ErIGluIENvbG9yIE1vZGUJCSovCisjZGVmaW5lIFZJREVPX1RZUEVfVkxGQgkJMHgyMwkvKiBWRVNBIFZHQSBpbiBncmFwaGljIG1vZGUJKi8KKworI2RlZmluZSBWSURFT19UWVBFX1BJQ0FfUzMJMHgzMAkvKiBBQ0VSIFBJQ0EtNjEgbG9jYWwgUzMgdmlkZW8JKi8KKyNkZWZpbmUgVklERU9fVFlQRV9NSVBTX0czNjQJMHgzMSAgICAvKiBNSVBTIE1hZ251bSA0MDAwIEczNjQgdmlkZW8gICovCisjZGVmaW5lIFZJREVPX1RZUEVfU0dJICAgICAgICAgIDB4MzMgICAgLyogVmFyaW91cyBTR0kgZ3JhcGhpY3MgaGFyZHdhcmUgKi8KKworI2RlZmluZSBWSURFT19UWVBFX1RHQUMJCTB4NDAJLyogREVDIFRHQSAqLworCisjZGVmaW5lIFZJREVPX1RZUEVfU1VOICAgICAgICAgIDB4NTAgICAgLyogU3VuIGZyYW1lIGJ1ZmZlci4gKi8KKyNkZWZpbmUgVklERU9fVFlQRV9TVU5QQ0kgICAgICAgMHg1MSAgICAvKiBTdW4gUENJIGJhc2VkIGZyYW1lIGJ1ZmZlci4gKi8KKworI2RlZmluZSBWSURFT19UWVBFX1BNQUMJCTB4NjAJLyogUG93ZXJNYWNpbnRvc2ggZnJhbWUgYnVmZmVyLiAqLworCisvKgorICogVGhpcyBjaGFyYWN0ZXIgaXMgdGhlIHNhbWUgYXMgX1BPU0lYX1ZESVNBQkxFOiBpdCBjYW5ub3QgYmUgdXNlZCBhcworICogYSBjX2NjW10gY2hhcmFjdGVyLCBidXQgaW5kaWNhdGVzIHRoYXQgYSBwYXJ0aWN1bGFyIHNwZWNpYWwgY2hhcmFjdGVyCisgKiBpc24ndCBpbiB1c2UgKGVnIFZJTlRSIGhhcyBubyBjaGFyYWN0ZXIgZXRjKQorICovCisjZGVmaW5lIF9fRElTQUJMRURfQ0hBUiAnXDAnCisKKy8qCisgKiBUaGlzIGlzIHRoZSBmbGlwIGJ1ZmZlciB1c2VkIGZvciB0aGUgdHR5IGRyaXZlci4gIFRoZSBidWZmZXIgaXMKKyAqIGxvY2F0ZWQgaW4gdGhlIHR0eSBzdHJ1Y3R1cmUsIGFuZCBpcyB1c2VkIGFzIGEgaGlnaCBzcGVlZCBpbnRlcmZhY2UKKyAqIGJldHdlZW4gdGhlIHR0eSBkcml2ZXIgYW5kIHRoZSB0dHkgbGluZSBkaXNjaXBsaW5lLgorICovCisjZGVmaW5lIFRUWV9GTElQQlVGX1NJWkUgNTEyCisKK3N0cnVjdCB0dHlfZmxpcF9idWZmZXIgeworCXN0cnVjdCB3b3JrX3N0cnVjdAkJd29yazsKKwlzdHJ1Y3Qgc2VtYXBob3JlIHB0eV9zZW07CisJY2hhcgkJKmNoYXJfYnVmX3B0cjsKKwl1bnNpZ25lZCBjaGFyCSpmbGFnX2J1Zl9wdHI7CisJaW50CQljb3VudDsKKwlpbnQJCWJ1Zl9udW07CisJdW5zaWduZWQgY2hhcgljaGFyX2J1ZlsyKlRUWV9GTElQQlVGX1NJWkVdOworCWNoYXIJCWZsYWdfYnVmWzIqVFRZX0ZMSVBCVUZfU0laRV07CisJdW5zaWduZWQgY2hhcglzbG9wWzRdOyAvKiBOLkIuIGJ1ZyBvdmVyd3JpdGVzIGJ1ZmZlciBieSAxICovCit9OworLyoKKyAqIFRoZSBwdHkgdXNlcyBjaGFyX2J1ZiBhbmQgZmxhZ19idWYgYXMgYSBjb250aWd1b3VzIGJ1ZmZlcgorICovCisjZGVmaW5lIFBUWV9CVUZfU0laRQk0KlRUWV9GTElQQlVGX1NJWkUKKworLyoKKyAqIFdoZW4gYSBicmVhaywgZnJhbWUgZXJyb3IsIG9yIHBhcml0eSBlcnJvciBoYXBwZW5zLCB0aGVzZSBjb2RlcyBhcmUKKyAqIHN0dWZmZWQgaW50byB0aGUgZmxhZ3MgYnVmZmVyLgorICovCisjZGVmaW5lIFRUWV9OT1JNQUwJMAorI2RlZmluZSBUVFlfQlJFQUsJMQorI2RlZmluZSBUVFlfRlJBTUUJMgorI2RlZmluZSBUVFlfUEFSSVRZCTMKKyNkZWZpbmUgVFRZX09WRVJSVU4JNAorCisjZGVmaW5lIElOVFJfQ0hBUih0dHkpICgodHR5KS0+dGVybWlvcy0+Y19jY1tWSU5UUl0pCisjZGVmaW5lIFFVSVRfQ0hBUih0dHkpICgodHR5KS0+dGVybWlvcy0+Y19jY1tWUVVJVF0pCisjZGVmaW5lIEVSQVNFX0NIQVIodHR5KSAoKHR0eSktPnRlcm1pb3MtPmNfY2NbVkVSQVNFXSkKKyNkZWZpbmUgS0lMTF9DSEFSKHR0eSkgKCh0dHkpLT50ZXJtaW9zLT5jX2NjW1ZLSUxMXSkKKyNkZWZpbmUgRU9GX0NIQVIodHR5KSAoKHR0eSktPnRlcm1pb3MtPmNfY2NbVkVPRl0pCisjZGVmaW5lIFRJTUVfQ0hBUih0dHkpICgodHR5KS0+dGVybWlvcy0+Y19jY1tWVElNRV0pCisjZGVmaW5lIE1JTl9DSEFSKHR0eSkgKCh0dHkpLT50ZXJtaW9zLT5jX2NjW1ZNSU5dKQorI2RlZmluZSBTV1RDX0NIQVIodHR5KSAoKHR0eSktPnRlcm1pb3MtPmNfY2NbVlNXVENdKQorI2RlZmluZSBTVEFSVF9DSEFSKHR0eSkgKCh0dHkpLT50ZXJtaW9zLT5jX2NjW1ZTVEFSVF0pCisjZGVmaW5lIFNUT1BfQ0hBUih0dHkpICgodHR5KS0+dGVybWlvcy0+Y19jY1tWU1RPUF0pCisjZGVmaW5lIFNVU1BfQ0hBUih0dHkpICgodHR5KS0+dGVybWlvcy0+Y19jY1tWU1VTUF0pCisjZGVmaW5lIEVPTF9DSEFSKHR0eSkgKCh0dHkpLT50ZXJtaW9zLT5jX2NjW1ZFT0xdKQorI2RlZmluZSBSRVBSSU5UX0NIQVIodHR5KSAoKHR0eSktPnRlcm1pb3MtPmNfY2NbVlJFUFJJTlRdKQorI2RlZmluZSBESVNDQVJEX0NIQVIodHR5KSAoKHR0eSktPnRlcm1pb3MtPmNfY2NbVkRJU0NBUkRdKQorI2RlZmluZSBXRVJBU0VfQ0hBUih0dHkpICgodHR5KS0+dGVybWlvcy0+Y19jY1tWV0VSQVNFXSkKKyNkZWZpbmUgTE5FWFRfQ0hBUih0dHkpCSgodHR5KS0+dGVybWlvcy0+Y19jY1tWTE5FWFRdKQorI2RlZmluZSBFT0wyX0NIQVIodHR5KSAoKHR0eSktPnRlcm1pb3MtPmNfY2NbVkVPTDJdKQorCisjZGVmaW5lIF9JX0ZMQUcodHR5LGYpCSgodHR5KS0+dGVybWlvcy0+Y19pZmxhZyAmIChmKSkKKyNkZWZpbmUgX09fRkxBRyh0dHksZikJKCh0dHkpLT50ZXJtaW9zLT5jX29mbGFnICYgKGYpKQorI2RlZmluZSBfQ19GTEFHKHR0eSxmKQkoKHR0eSktPnRlcm1pb3MtPmNfY2ZsYWcgJiAoZikpCisjZGVmaW5lIF9MX0ZMQUcodHR5LGYpCSgodHR5KS0+dGVybWlvcy0+Y19sZmxhZyAmIChmKSkKKworI2RlZmluZSBJX0lHTkJSSyh0dHkpCV9JX0ZMQUcoKHR0eSksSUdOQlJLKQorI2RlZmluZSBJX0JSS0lOVCh0dHkpCV9JX0ZMQUcoKHR0eSksQlJLSU5UKQorI2RlZmluZSBJX0lHTlBBUih0dHkpCV9JX0ZMQUcoKHR0eSksSUdOUEFSKQorI2RlZmluZSBJX1BBUk1SSyh0dHkpCV9JX0ZMQUcoKHR0eSksUEFSTVJLKQorI2RlZmluZSBJX0lOUENLKHR0eSkJX0lfRkxBRygodHR5KSxJTlBDSykKKyNkZWZpbmUgSV9JU1RSSVAodHR5KQlfSV9GTEFHKCh0dHkpLElTVFJJUCkKKyNkZWZpbmUgSV9JTkxDUih0dHkpCV9JX0ZMQUcoKHR0eSksSU5MQ1IpCisjZGVmaW5lIElfSUdOQ1IodHR5KQlfSV9GTEFHKCh0dHkpLElHTkNSKQorI2RlZmluZSBJX0lDUk5MKHR0eSkJX0lfRkxBRygodHR5KSxJQ1JOTCkKKyNkZWZpbmUgSV9JVUNMQyh0dHkpCV9JX0ZMQUcoKHR0eSksSVVDTEMpCisjZGVmaW5lIElfSVhPTih0dHkpCV9JX0ZMQUcoKHR0eSksSVhPTikKKyNkZWZpbmUgSV9JWEFOWSh0dHkpCV9JX0ZMQUcoKHR0eSksSVhBTlkpCisjZGVmaW5lIElfSVhPRkYodHR5KQlfSV9GTEFHKCh0dHkpLElYT0ZGKQorI2RlZmluZSBJX0lNQVhCRUwodHR5KQlfSV9GTEFHKCh0dHkpLElNQVhCRUwpCisjZGVmaW5lIElfSVVURjgodHR5KQlfSV9GTEFHKCh0dHkpLElVVEY4KQorCisjZGVmaW5lIE9fT1BPU1QodHR5KQlfT19GTEFHKCh0dHkpLE9QT1NUKQorI2RlZmluZSBPX09MQ1VDKHR0eSkJX09fRkxBRygodHR5KSxPTENVQykKKyNkZWZpbmUgT19PTkxDUih0dHkpCV9PX0ZMQUcoKHR0eSksT05MQ1IpCisjZGVmaW5lIE9fT0NSTkwodHR5KQlfT19GTEFHKCh0dHkpLE9DUk5MKQorI2RlZmluZSBPX09OT0NSKHR0eSkJX09fRkxBRygodHR5KSxPTk9DUikKKyNkZWZpbmUgT19PTkxSRVQodHR5KQlfT19GTEFHKCh0dHkpLE9OTFJFVCkKKyNkZWZpbmUgT19PRklMTCh0dHkpCV9PX0ZMQUcoKHR0eSksT0ZJTEwpCisjZGVmaW5lIE9fT0ZERUwodHR5KQlfT19GTEFHKCh0dHkpLE9GREVMKQorI2RlZmluZSBPX05MRExZKHR0eSkJX09fRkxBRygodHR5KSxOTERMWSkKKyNkZWZpbmUgT19DUkRMWSh0dHkpCV9PX0ZMQUcoKHR0eSksQ1JETFkpCisjZGVmaW5lIE9fVEFCRExZKHR0eSkJX09fRkxBRygodHR5KSxUQUJETFkpCisjZGVmaW5lIE9fQlNETFkodHR5KQlfT19GTEFHKCh0dHkpLEJTRExZKQorI2RlZmluZSBPX1ZURExZKHR0eSkJX09fRkxBRygodHR5KSxWVERMWSkKKyNkZWZpbmUgT19GRkRMWSh0dHkpCV9PX0ZMQUcoKHR0eSksRkZETFkpCisKKyNkZWZpbmUgQ19CQVVEKHR0eSkJX0NfRkxBRygodHR5KSxDQkFVRCkKKyNkZWZpbmUgQ19DU0laRSh0dHkpCV9DX0ZMQUcoKHR0eSksQ1NJWkUpCisjZGVmaW5lIENfQ1NUT1BCKHR0eSkJX0NfRkxBRygodHR5KSxDU1RPUEIpCisjZGVmaW5lIENfQ1JFQUQodHR5KQlfQ19GTEFHKCh0dHkpLENSRUFEKQorI2RlZmluZSBDX1BBUkVOQih0dHkpCV9DX0ZMQUcoKHR0eSksUEFSRU5CKQorI2RlZmluZSBDX1BBUk9ERCh0dHkpCV9DX0ZMQUcoKHR0eSksUEFST0REKQorI2RlZmluZSBDX0hVUENMKHR0eSkJX0NfRkxBRygodHR5KSxIVVBDTCkKKyNkZWZpbmUgQ19DTE9DQUwodHR5KQlfQ19GTEFHKCh0dHkpLENMT0NBTCkKKyNkZWZpbmUgQ19DSUJBVUQodHR5KQlfQ19GTEFHKCh0dHkpLENJQkFVRCkKKyNkZWZpbmUgQ19DUlRTQ1RTKHR0eSkJX0NfRkxBRygodHR5KSxDUlRTQ1RTKQorCisjZGVmaW5lIExfSVNJRyh0dHkpCV9MX0ZMQUcoKHR0eSksSVNJRykKKyNkZWZpbmUgTF9JQ0FOT04odHR5KQlfTF9GTEFHKCh0dHkpLElDQU5PTikKKyNkZWZpbmUgTF9YQ0FTRSh0dHkpCV9MX0ZMQUcoKHR0eSksWENBU0UpCisjZGVmaW5lIExfRUNITyh0dHkpCV9MX0ZMQUcoKHR0eSksRUNITykKKyNkZWZpbmUgTF9FQ0hPRSh0dHkpCV9MX0ZMQUcoKHR0eSksRUNIT0UpCisjZGVmaW5lIExfRUNIT0sodHR5KQlfTF9GTEFHKCh0dHkpLEVDSE9LKQorI2RlZmluZSBMX0VDSE9OTCh0dHkpCV9MX0ZMQUcoKHR0eSksRUNIT05MKQorI2RlZmluZSBMX05PRkxTSCh0dHkpCV9MX0ZMQUcoKHR0eSksTk9GTFNIKQorI2RlZmluZSBMX1RPU1RPUCh0dHkpCV9MX0ZMQUcoKHR0eSksVE9TVE9QKQorI2RlZmluZSBMX0VDSE9DVEwodHR5KQlfTF9GTEFHKCh0dHkpLEVDSE9DVEwpCisjZGVmaW5lIExfRUNIT1BSVCh0dHkpCV9MX0ZMQUcoKHR0eSksRUNIT1BSVCkKKyNkZWZpbmUgTF9FQ0hPS0UodHR5KQlfTF9GTEFHKCh0dHkpLEVDSE9LRSkKKyNkZWZpbmUgTF9GTFVTSE8odHR5KQlfTF9GTEFHKCh0dHkpLEZMVVNITykKKyNkZWZpbmUgTF9QRU5ESU4odHR5KQlfTF9GTEFHKCh0dHkpLFBFTkRJTikKKyNkZWZpbmUgTF9JRVhURU4odHR5KQlfTF9GTEFHKCh0dHkpLElFWFRFTikKKworc3RydWN0IGRldmljZTsKKy8qCisgKiBXaGVyZSBhbGwgb2YgdGhlIHN0YXRlIGFzc29jaWF0ZWQgd2l0aCBhIHR0eSBpcyBrZXB0IHdoaWxlIHRoZSB0dHkKKyAqIGlzIG9wZW4uICBTaW5jZSB0aGUgdGVybWlvcyBzdGF0ZSBzaG91bGQgYmUga2VwdCBldmVuIGlmIHRoZSB0dHkKKyAqIGhhcyBiZWVuIGNsb3NlZCAtLS0gZm9yIHRoaW5ncyBsaWtlIHRoZSBiYXVkIHJhdGUsIGV0YyAtLS0gaXQgaXMKKyAqIG5vdCBzdG9yZWQgaGVyZSwgYnV0IHJhdGhlciBhIHBvaW50ZXIgdG8gdGhlIHJlYWwgc3RhdGUgaXMgc3RvcmVkCisgKiBoZXJlLiAgUG9zc2libGUgdGhlIHdpbnNpemUgc3RydWN0dXJlIHNob3VsZCBoYXZlIHRoZSBzYW1lCisgKiB0cmVhdG1lbnQsIGJ1dCAoMSkgdGhlIGRlZmF1bHQgODB4MjQgaXMgdXN1YWxseSByaWdodCBhbmQgKDIpIGl0J3MKKyAqIG1vc3Qgb2Z0ZW4gdXNlZCBieSBhIHdpbmRvd2luZyBzeXN0ZW0sIHdoaWNoIHdpbGwgc2V0IHRoZSBjb3JyZWN0CisgKiBzaXplIGVhY2ggdGltZSB0aGUgd2luZG93IGlzIGNyZWF0ZWQgb3IgcmVzaXplZCBhbnl3YXkuCisgKiAJCQkJCQktIFRZVCwgOS8xNC85MgorICovCitzdHJ1Y3QgdHR5X3N0cnVjdCB7CisJaW50CW1hZ2ljOworCXN0cnVjdCB0dHlfZHJpdmVyICpkcml2ZXI7CisJaW50IGluZGV4OworCXN0cnVjdCB0dHlfbGRpc2MgbGRpc2M7CisJc3RydWN0IHNlbWFwaG9yZSB0ZXJtaW9zX3NlbTsKKwlzdHJ1Y3QgdGVybWlvcyAqdGVybWlvcywgKnRlcm1pb3NfbG9ja2VkOworCWNoYXIgbmFtZVs2NF07CisJaW50IHBncnA7CisJaW50IHNlc3Npb247CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgY291bnQ7CisJc3RydWN0IHdpbnNpemUgd2luc2l6ZTsKKwl1bnNpZ25lZCBjaGFyIHN0b3BwZWQ6MSwgaHdfc3RvcHBlZDoxLCBmbG93X3N0b3BwZWQ6MSwgcGFja2V0OjE7CisJdW5zaWduZWQgY2hhciBsb3dfbGF0ZW5jeToxLCB3YXJuZWQ6MTsKKwl1bnNpZ25lZCBjaGFyIGN0cmxfc3RhdHVzOworCisJc3RydWN0IHR0eV9zdHJ1Y3QgKmxpbms7CisJc3RydWN0IGZhc3luY19zdHJ1Y3QgKmZhc3luYzsKKwlzdHJ1Y3QgdHR5X2ZsaXBfYnVmZmVyIGZsaXA7CisJaW50IG1heF9mbGlwX2NudDsKKwlpbnQgYWx0X3NwZWVkOwkJLyogRm9yIG1hZ2ljIHN1YnN0aXR1dGlvbiBvZiAzODQwMCBicHMgKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdCB3cml0ZV93YWl0OworCXdhaXRfcXVldWVfaGVhZF90IHJlYWRfd2FpdDsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgaGFuZ3VwX3dvcms7CisJdm9pZCAqZGlzY19kYXRhOworCXZvaWQgKmRyaXZlcl9kYXRhOworCXN0cnVjdCBsaXN0X2hlYWQgdHR5X2ZpbGVzOworCisjZGVmaW5lIE5fVFRZX0JVRl9TSVpFIDQwOTYKKwkKKwkvKgorCSAqIFRoZSBmb2xsb3dpbmcgaXMgZGF0YSBmb3IgdGhlIE5fVFRZIGxpbmUgZGlzY2lwbGluZS4gIEZvcgorCSAqIGhpc3RvcmljYWwgcmVhc29ucywgdGhpcyBpcyBpbmNsdWRlZCBpbiB0aGUgdHR5IHN0cnVjdHVyZS4KKwkgKi8KKwl1bnNpZ25lZCBpbnQgY29sdW1uOworCXVuc2lnbmVkIGNoYXIgbG5leHQ6MSwgZXJhc2luZzoxLCByYXc6MSwgcmVhbF9yYXc6MSwgaWNhbm9uOjE7CisJdW5zaWduZWQgY2hhciBjbG9zaW5nOjE7CisJdW5zaWduZWQgc2hvcnQgbWluaW11bV90b193YWtlOworCXVuc2lnbmVkIGxvbmcgb3ZlcnJ1bl90aW1lOworCWludCBudW1fb3ZlcnJ1bjsKKwl1bnNpZ25lZCBsb25nIHByb2Nlc3NfY2hhcl9tYXBbMjU2Lyg4KnNpemVvZih1bnNpZ25lZCBsb25nKSldOworCWNoYXIgKnJlYWRfYnVmOworCWludCByZWFkX2hlYWQ7CisJaW50IHJlYWRfdGFpbDsKKwlpbnQgcmVhZF9jbnQ7CisJdW5zaWduZWQgbG9uZyByZWFkX2ZsYWdzW05fVFRZX0JVRl9TSVpFLyg4KnNpemVvZih1bnNpZ25lZCBsb25nKSldOworCWludCBjYW5vbl9kYXRhOworCXVuc2lnbmVkIGxvbmcgY2Fub25faGVhZDsKKwl1bnNpZ25lZCBpbnQgY2Fub25fY29sdW1uOworCXN0cnVjdCBzZW1hcGhvcmUgYXRvbWljX3JlYWQ7CisJc3RydWN0IHNlbWFwaG9yZSBhdG9taWNfd3JpdGU7CisJdW5zaWduZWQgY2hhciAqd3JpdGVfYnVmOworCWludCB3cml0ZV9jbnQ7CisJc3BpbmxvY2tfdCByZWFkX2xvY2s7CisJLyogSWYgdGhlIHR0eSBoYXMgYSBwZW5kaW5nIGRvX1NBSywgcXVldWUgaXQgaGVyZSAtIGFrcG0gKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgU0FLX3dvcms7Cit9OworCisvKiB0dHkgbWFnaWMgbnVtYmVyICovCisjZGVmaW5lIFRUWV9NQUdJQwkJMHg1NDAxCisKKy8qCisgKiBUaGVzZSBiaXRzIGFyZSB1c2VkIGluIHRoZSBmbGFncyBmaWVsZCBvZiB0aGUgdHR5IHN0cnVjdHVyZS4KKyAqIAorICogU28gdGhhdCBpbnRlcnJ1cHRzIHdvbid0IGJlIGFibGUgdG8gbWVzcyB1cCB0aGUgcXVldWVzLAorICogY29weV90b19jb29rZWQgbXVzdCBiZSBhdG9taWMgd2l0aCByZXNwZWN0IHRvIGl0c2VsZiwgYXMgbXVzdAorICogdHR5LT53cml0ZS4gIFRodXMsIHlvdSBtdXN0IHVzZSB0aGUgaW5saW5lIGZ1bmN0aW9ucyBzZXRfYml0KCkgYW5kCisgKiBjbGVhcl9iaXQoKSB0byBtYWtlIHRoaW5ncyBhdG9taWMuCisgKi8KKyNkZWZpbmUgVFRZX1RIUk9UVExFRCAJCTAJLyogQ2FsbCB1bnRocm90dGxlKCkgYXQgdGhyZXNob2xkIG1pbiAqLworI2RlZmluZSBUVFlfSU9fRVJST1IgCQkxCS8qIENhbnNlIGFuIEkvTyBlcnJvciAobWF5IGJlIG5vIGxkaXNjIHRvbykgKi8KKyNkZWZpbmUgVFRZX09USEVSX0NMT1NFRCAJMgkvKiBPdGhlciBzaWRlIChpZiBhbnkpIGhhcyBjbG9zZWQgKi8KKyNkZWZpbmUgVFRZX0VYQ0xVU0lWRSAJCTMJLyogRXhjbHVzaXZlIG9wZW4gbW9kZSAqLworI2RlZmluZSBUVFlfREVCVUcgCQk0CS8qIERlYnVnZ2luZyAqLworI2RlZmluZSBUVFlfRE9fV1JJVEVfV0FLRVVQIAk1CS8qIENhbGwgd3JpdGVfd2FrZXVwIGFmdGVyIHF1ZXVpbmcgbmV3ICovCisjZGVmaW5lIFRUWV9QVVNIIAkJNgkvKiBuX3R0eSBwcml2YXRlICovCisjZGVmaW5lIFRUWV9DTE9TSU5HIAkJNwkvKiAtPmNsb3NlKCkgaW4gcHJvZ3Jlc3MgKi8KKyNkZWZpbmUgVFRZX0RPTlRfRkxJUCAJCTgJLyogRGVmZXIgYnVmZmVyIGZsaXAgKi8KKyNkZWZpbmUgVFRZX0xESVNDIAkJOQkvKiBMaW5lIGRpc2NpcGxpbmUgYXR0YWNoZWQgKi8KKyNkZWZpbmUgVFRZX0hXX0NPT0tfT1VUIAkxNAkvKiBIYXJkd2FyZSBjYW4gZG8gb3V0cHV0IGNvb2tpbmcgKi8KKyNkZWZpbmUgVFRZX0hXX0NPT0tfSU4gCQkxNQkvKiBIYXJkd2FyZSBjYW4gZG8gaW5wdXQgY29va2luZyAqLworI2RlZmluZSBUVFlfUFRZX0xPQ0sgCQkxNgkvKiBwdHkgcHJpdmF0ZSAqLworI2RlZmluZSBUVFlfTk9fV1JJVEVfU1BMSVQgCTE3CS8qIFByZXNlcnZlIHdyaXRlIGJvdW5kYXJpZXMgdG8gZHJpdmVyICovCisjZGVmaW5lIFRUWV9IVVBQRUQgCQkxOAkvKiBQb3N0IGRyaXZlci0+aGFuZ3VwKCkgKi8KKworI2RlZmluZSBUVFlfV1JJVEVfRkxVU0godHR5KSB0dHlfd3JpdGVfZmx1c2goKHR0eSkpCisKK2V4dGVybiB2b2lkIHR0eV93cml0ZV9mbHVzaChzdHJ1Y3QgdHR5X3N0cnVjdCAqKTsKKworZXh0ZXJuIHN0cnVjdCB0ZXJtaW9zIHR0eV9zdGRfdGVybWlvczsKK2V4dGVybiBpbnQgZmdfY29uc29sZSwgbGFzdF9jb25zb2xlLCB3YW50X2NvbnNvbGU7CisKK2V4dGVybiBpbnQga21zZ19yZWRpcmVjdDsKKworZXh0ZXJuIHZvaWQgY29uc29sZV9pbml0KHZvaWQpOworZXh0ZXJuIGludCB2Y3NfaW5pdCh2b2lkKTsKKworZXh0ZXJuIGludCB0dHlfcGFyYW5vaWFfY2hlY2soc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKnJvdXRpbmUpOworZXh0ZXJuIGNoYXIgKnR0eV9uYW1lKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNoYXIgKmJ1Zik7CitleHRlcm4gdm9pZCB0dHlfd2FpdF91bnRpbF9zZW50KHN0cnVjdCB0dHlfc3RydWN0ICogdHR5LCBsb25nIHRpbWVvdXQpOworZXh0ZXJuIGludCB0dHlfY2hlY2tfY2hhbmdlKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5KTsKK2V4dGVybiB2b2lkIHN0b3BfdHR5KHN0cnVjdCB0dHlfc3RydWN0ICogdHR5KTsKK2V4dGVybiB2b2lkIHN0YXJ0X3R0eShzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSk7CitleHRlcm4gaW50IHR0eV9yZWdpc3Rlcl9sZGlzYyhpbnQgZGlzYywgc3RydWN0IHR0eV9sZGlzYyAqbmV3X2xkaXNjKTsKK2V4dGVybiBpbnQgdHR5X3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgdHR5X2RyaXZlciAqZHJpdmVyKTsKK2V4dGVybiBpbnQgdHR5X3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCB0dHlfZHJpdmVyICpkcml2ZXIpOworZXh0ZXJuIHZvaWQgdHR5X3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgdHR5X2RyaXZlciAqZHJpdmVyLCB1bnNpZ25lZCBpbmRleCwgc3RydWN0IGRldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIHR0eV91bnJlZ2lzdGVyX2RldmljZShzdHJ1Y3QgdHR5X2RyaXZlciAqZHJpdmVyLCB1bnNpZ25lZCBpbmRleCk7CitleHRlcm4gaW50IHR0eV9yZWFkX3Jhd19kYXRhKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHVuc2lnbmVkIGNoYXIgKmJ1ZnAsCisJCQkgICAgIGludCBidWZsZW4pOworZXh0ZXJuIHZvaWQgdHR5X3dyaXRlX21lc3NhZ2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY2hhciAqbXNnKTsKKworZXh0ZXJuIGludCBpc19vcnBoYW5lZF9wZ3JwKGludCBwZ3JwKTsKK2V4dGVybiBpbnQgaXNfaWdub3JlZChpbnQgc2lnKTsKK2V4dGVybiBpbnQgdHR5X3NpZ25hbChpbnQgc2lnLCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKK2V4dGVybiB2b2lkIHR0eV9oYW5ndXAoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHkpOworZXh0ZXJuIHZvaWQgdHR5X3ZoYW5ndXAoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHkpOworZXh0ZXJuIHZvaWQgdHR5X3VuaGFuZ3VwKHN0cnVjdCBmaWxlICpmaWxwKTsKK2V4dGVybiBpbnQgdHR5X2h1bmdfdXBfcChzdHJ1Y3QgZmlsZSAqIGZpbHApOworZXh0ZXJuIHZvaWQgZG9fU0FLKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOworZXh0ZXJuIHZvaWQgZGlzYXNzb2NpYXRlX2N0dHkoaW50IHByaXYpOworZXh0ZXJuIHZvaWQgdHR5X2ZsaXBfYnVmZmVyX3B1c2goc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CitleHRlcm4gaW50IHR0eV9nZXRfYmF1ZF9yYXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOworZXh0ZXJuIGludCB0dHlfdGVybWlvc19iYXVkX3JhdGUoc3RydWN0IHRlcm1pb3MgKnRlcm1pb3MpOworCitleHRlcm4gc3RydWN0IHR0eV9sZGlzYyAqdHR5X2xkaXNjX3JlZihzdHJ1Y3QgdHR5X3N0cnVjdCAqKTsKK2V4dGVybiB2b2lkIHR0eV9sZGlzY19kZXJlZihzdHJ1Y3QgdHR5X2xkaXNjICopOworZXh0ZXJuIHN0cnVjdCB0dHlfbGRpc2MgKnR0eV9sZGlzY19yZWZfd2FpdChzdHJ1Y3QgdHR5X3N0cnVjdCAqKTsKKworZXh0ZXJuIHN0cnVjdCB0dHlfbGRpc2MgKnR0eV9sZGlzY19nZXQoaW50KTsKK2V4dGVybiB2b2lkIHR0eV9sZGlzY19wdXQoaW50KTsKKworZXh0ZXJuIHZvaWQgdHR5X3dha2V1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKK2V4dGVybiB2b2lkIHR0eV9sZGlzY19mbHVzaChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKKworc3RydWN0IHNlbWFwaG9yZTsKK2V4dGVybiBzdHJ1Y3Qgc2VtYXBob3JlIHR0eV9zZW07CisKKy8qIG5fdHR5LmMgKi8KK2V4dGVybiBzdHJ1Y3QgdHR5X2xkaXNjIHR0eV9sZGlzY19OX1RUWTsKKworLyogdHR5X2lvY3RsLmMgKi8KK2V4dGVybiBpbnQgbl90dHlfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHksIHN0cnVjdCBmaWxlICogZmlsZSwKKwkJICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKKworLyogc2VyaWFsLmMgKi8KKworZXh0ZXJuIHZvaWQgc2VyaWFsX2NvbnNvbGVfaW5pdCh2b2lkKTsKKyAKKy8qIHBjeHguYyAqLworCitleHRlcm4gaW50IHBjeGVfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CisKKy8qIHByaW50ay5jICovCisKK2V4dGVybiB2b2lkIGNvbnNvbGVfcHJpbnQoY29uc3QgY2hhciAqKTsKKworLyogdnQuYyAqLworCitleHRlcm4gaW50IHZ0X2lvY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICogZmlsZSwKKwkJICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKKworc3RhdGljIGlubGluZSBkZXZfdCB0dHlfZGV2bnVtKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJcmV0dXJuIE1LREVWKHR0eS0+ZHJpdmVyLT5tYWpvciwgdHR5LT5kcml2ZXItPm1pbm9yX3N0YXJ0KSArIHR0eS0+aW5kZXg7Cit9CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdHR5X2RyaXZlci5oIGIvaW5jbHVkZS9saW51eC90dHlfZHJpdmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM2OGIyOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvdHR5X2RyaXZlci5oCkBAIC0wLDAgKzEsMjc5IEBACisjaWZuZGVmIF9MSU5VWF9UVFlfRFJJVkVSX0gKKyNkZWZpbmUgX0xJTlVYX1RUWV9EUklWRVJfSAorCisvKgorICogVGhpcyBzdHJ1Y3R1cmUgZGVmaW5lcyB0aGUgaW50ZXJmYWNlIGJldHdlZW4gdGhlIGxvdy1sZXZlbCB0dHkKKyAqIGRyaXZlciBhbmQgdGhlIHR0eSByb3V0aW5lcy4gIFRoZSBmb2xsb3dpbmcgcm91dGluZXMgY2FuIGJlCisgKiBkZWZpbmVkOyB1bmxlc3Mgbm90ZWQgb3RoZXJ3aXNlLCB0aGV5IGFyZSBvcHRpb25hbCwgYW5kIGNhbiBiZQorICogZmlsbGVkIGluIHdpdGggYSBudWxsIHBvaW50ZXIuCisgKgorICogaW50ICAoKm9wZW4pKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5LCBzdHJ1Y3QgZmlsZSAqIGZpbHApOworICoKKyAqIAlUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIHdoZW4gYSBwYXJ0aWN1bGFyIHR0eSBkZXZpY2UgaXMgb3BlbmVkLgorICogCVRoaXMgcm91dGluZSBpcyBtYW5kYXRvcnk7IGlmIHRoaXMgcm91dGluZSBpcyBub3QgZmlsbGVkIGluLAorICogCXRoZSBhdHRlbXB0ZWQgb3BlbiB3aWxsIGZhaWwgd2l0aCBFTk9ERVYuCisgKiAgICAgCisgKiB2b2lkICgqY2xvc2UpKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5LCBzdHJ1Y3QgZmlsZSAqIGZpbHApOworICoKKyAqIAlUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIHdoZW4gYSBwYXJ0aWN1bGFyIHR0eSBkZXZpY2UgaXMgY2xvc2VkLgorICoKKyAqIGludCAoKndyaXRlKShzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSwKKyAqIAkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KTsKKyAqCisgKiAJVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBieSB0aGUga2VybmVsIHRvIHdyaXRlIGEgc2VyaWVzIG9mCisgKiAJY2hhcmFjdGVycyB0byB0aGUgdHR5IGRldmljZS4gIFRoZSBjaGFyYWN0ZXJzIG1heSBjb21lIGZyb20KKyAqIAl1c2VyIHNwYWNlIG9yIGtlcm5lbCBzcGFjZS4gIFRoaXMgcm91dGluZSB3aWxsIHJldHVybiB0aGUKKyAqCW51bWJlciBvZiBjaGFyYWN0ZXJzIGFjdHVhbGx5IGFjY2VwdGVkIGZvciB3cml0aW5nLiAgVGhpcworICoJcm91dGluZSBpcyBtYW5kYXRvcnkuCisgKgorICogdm9pZCAoKnB1dF9jaGFyKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCB1bnNpZ25lZCBjaGFyIGNoKTsKKyAqCisgKiAJVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBieSB0aGUga2VybmVsIHRvIHdyaXRlIGEgc2luZ2xlCisgKiAJY2hhcmFjdGVyIHRvIHRoZSB0dHkgZGV2aWNlLiAgSWYgdGhlIGtlcm5lbCB1c2VzIHRoaXMgcm91dGluZSwKKyAqIAlpdCBtdXN0IGNhbGwgdGhlIGZsdXNoX2NoYXJzKCkgcm91dGluZSAoaWYgZGVmaW5lZCkgd2hlbiBpdCBpcworICogCWRvbmUgc3R1ZmZpbmcgY2hhcmFjdGVycyBpbnRvIHRoZSBkcml2ZXIuICBJZiB0aGVyZSBpcyBubyByb29tCisgKiAJaW4gdGhlIHF1ZXVlLCB0aGUgY2hhcmFjdGVyIGlzIGlnbm9yZWQuCisgKgorICogdm9pZCAoKmZsdXNoX2NoYXJzKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKKyAqCisgKiAJVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBieSB0aGUga2VybmVsIGFmdGVyIGl0IGhhcyB3cml0dGVuIGEKKyAqIAlzZXJpZXMgb2YgY2hhcmFjdGVycyB0byB0aGUgdHR5IGRldmljZSB1c2luZyBwdXRfY2hhcigpLiAgCisgKiAKKyAqIGludCAgKCp3cml0ZV9yb29tKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKKyAqCisgKiAJVGhpcyByb3V0aW5lIHJldHVybnMgdGhlIG51bWJlcnMgb2YgY2hhcmFjdGVycyB0aGUgdHR5IGRyaXZlcgorICogCXdpbGwgYWNjZXB0IGZvciBxdWV1aW5nIHRvIGJlIHdyaXR0ZW4uICBUaGlzIG51bWJlciBpcyBzdWJqZWN0CisgKiAJdG8gY2hhbmdlIGFzIG91dHB1dCBidWZmZXJzIGdldCBlbXB0aWVkLCBvciBpZiB0aGUgb3V0cHV0IGZsb3cKKyAqCWNvbnRyb2wgaXMgYWN0ZWQuCisgKiAKKyAqIGludCAgKCppb2N0bCkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKiBmaWxlLAorICogCSAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CisgKgorICogCVRoaXMgcm91dGluZSBhbGxvd3MgdGhlIHR0eSBkcml2ZXIgdG8gaW1wbGVtZW50CisgKglkZXZpY2Utc3BlY2lmaWMgaW9jdGwncy4gIElmIHRoZSBpb2N0bCBudW1iZXIgcGFzc2VkIGluIGNtZAorICogCWlzIG5vdCByZWNvZ25pemVkIGJ5IHRoZSBkcml2ZXIsIGl0IHNob3VsZCByZXR1cm4gRU5PSU9DVExDTUQuCisgKiAKKyAqIHZvaWQgKCpzZXRfdGVybWlvcykoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHRlcm1pb3MgKiBvbGQpOworICoKKyAqIAlUaGlzIHJvdXRpbmUgYWxsb3dzIHRoZSB0dHkgZHJpdmVyIHRvIGJlIG5vdGlmaWVkIHdoZW4KKyAqIAlkZXZpY2UncyB0ZXJtaW9zIHNldHRpbmdzIGhhdmUgY2hhbmdlZC4gIE5vdGUgdGhhdCBhCisgKiAJd2VsbC1kZXNpZ25lZCB0dHkgZHJpdmVyIHNob3VsZCBiZSBwcmVwYXJlZCB0byBhY2NlcHQgdGhlIGNhc2UKKyAqIAl3aGVyZSBvbGQgPT0gTlVMTCwgYW5kIHRyeSB0byBkbyBzb21ldGhpbmcgcmF0aW9uYWwuCisgKgorICogdm9pZCAoKnNldF9sZGlzYykoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CisgKgorICogCVRoaXMgcm91dGluZSBhbGxvd3MgdGhlIHR0eSBkcml2ZXIgdG8gYmUgbm90aWZpZWQgd2hlbiB0aGUKKyAqIAlkZXZpY2UncyB0ZXJtaW9zIHNldHRpbmdzIGhhdmUgY2hhbmdlZC4KKyAqIAorICogdm9pZCAoKnRocm90dGxlKShzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSk7CisgKgorICogCVRoaXMgcm91dGluZSBub3RpZmllcyB0aGUgdHR5IGRyaXZlciB0aGF0IGlucHV0IGJ1ZmZlcnMgZm9yCisgKiAJdGhlIGxpbmUgZGlzY2lwbGluZSBhcmUgY2xvc2UgdG8gZnVsbCwgYW5kIGl0IHNob3VsZCBzb21laG93CisgKiAJc2lnbmFsIHRoYXQgbm8gbW9yZSBjaGFyYWN0ZXJzIHNob3VsZCBiZSBzZW50IHRvIHRoZSB0dHkuCisgKiAKKyAqIHZvaWQgKCp1bnRocm90dGxlKShzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSk7CisgKgorICogCVRoaXMgcm91dGluZSBub3RpZmllcyB0aGUgdHR5IGRyaXZlcnMgdGhhdCBpdCBzaG91bGQgc2lnbmFscworICogCXRoYXQgY2hhcmFjdGVycyBjYW4gbm93IGJlIHNlbnQgdG8gdGhlIHR0eSB3aXRob3V0IGZlYXIgb2YKKyAqIAlvdmVycnVubmluZyB0aGUgaW5wdXQgYnVmZmVycyBvZiB0aGUgbGluZSBkaXNjaXBsaW5lcy4KKyAqIAorICogdm9pZCAoKnN0b3ApKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOworICoKKyAqIAlUaGlzIHJvdXRpbmUgbm90aWZpZXMgdGhlIHR0eSBkcml2ZXIgdGhhdCBpdCBzaG91bGQgc3RvcAorICogCW91dHB1dHRpbmcgY2hhcmFjdGVycyB0byB0aGUgdHR5IGRldmljZS4gIAorICogCisgKiB2b2lkICgqc3RhcnQpKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOworICoKKyAqIAlUaGlzIHJvdXRpbmUgbm90aWZpZXMgdGhlIHR0eSBkcml2ZXIgdGhhdCBpdCByZXN1bWUgc2VuZGluZworICoJY2hhcmFjdGVycyB0byB0aGUgdHR5IGRldmljZS4KKyAqIAorICogdm9pZCAoKmhhbmd1cCkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CisgKgorICogCVRoaXMgcm91dGluZSBub3RpZmllcyB0aGUgdHR5IGRyaXZlciB0aGF0IGl0IHNob3VsZCBoYW5ndXAgdGhlCisgKiAJdHR5IGRldmljZS4KKyAqCisgKiB2b2lkICgqYnJlYWtfY3RsKShzdHJ1Y3QgdHR5X3N0dWN0ICp0dHksIGludCBzdGF0ZSk7CisgKgorICogCVRoaXMgb3B0aW9uYWwgcm91dGluZSByZXF1ZXN0cyB0aGUgdHR5IGRyaXZlciB0byB0dXJuIG9uIG9yCisgKiAJb2ZmIEJSRUFLIHN0YXR1cyBvbiB0aGUgUlMtMjMyIHBvcnQuICBJZiBzdGF0ZSBpcyAtMSwKKyAqIAl0aGVuIHRoZSBCUkVBSyBzdGF0dXMgc2hvdWxkIGJlIHR1cm5lZCBvbjsgaWYgc3RhdGUgaXMgMCwgdGhlbgorICogCUJSRUFLIHNob3VsZCBiZSB0dXJuZWQgb2ZmLgorICoKKyAqIAlJZiB0aGlzIHJvdXRpbmUgaXMgaW1wbGVtZW50ZWQsIHRoZSBoaWdoLWxldmVsIHR0eSBkcml2ZXIgd2lsbAorICogCWhhbmRsZSB0aGUgZm9sbG93aW5nIGlvY3RsczogVENTQlJLLCBUQ1NCUktQLCBUSU9DU0JSSywKKyAqIAlUSU9DQ0JSSy4gIE90aGVyd2lzZSwgdGhlc2UgaW9jdGxzIHdpbGwgYmUgcGFzc2VkIGRvd24gdG8gdGhlCisgKiAJZHJpdmVyIHRvIGhhbmRsZS4KKyAqCisgKiB2b2lkICgqd2FpdF91bnRpbF9zZW50KShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgdGltZW91dCk7CisgKiAKKyAqIAlUaGlzIHJvdXRpbmUgd2FpdHMgdW50aWwgdGhlIGRldmljZSBoYXMgd3JpdHRlbiBvdXQgYWxsIG9mIHRoZQorICogCWNoYXJhY3RlcnMgaW4gaXRzIHRyYW5zbWl0dGVyIEZJRk8uCisgKgorICogdm9pZCAoKnNlbmRfeGNoYXIpKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNoYXIgY2gpOworICoKKyAqIAlUaGlzIHJvdXRpbmUgaXMgdXNlZCB0byBzZW5kIGEgaGlnaC1wcmlvcml0eSBYT04vWE9GRgorICogCWNoYXJhY3RlciB0byB0aGUgZGV2aWNlLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+CisKK3N0cnVjdCB0dHlfc3RydWN0OworCitzdHJ1Y3QgdHR5X29wZXJhdGlvbnMgeworCWludCAgKCpvcGVuKShzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSwgc3RydWN0IGZpbGUgKiBmaWxwKTsKKwl2b2lkICgqY2xvc2UpKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5LCBzdHJ1Y3QgZmlsZSAqIGZpbHApOworCWludCAgKCp3cml0ZSkoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHksCisJCSAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KTsKKwl2b2lkICgqcHV0X2NoYXIpKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHVuc2lnbmVkIGNoYXIgY2gpOworCXZvaWQgKCpmbHVzaF9jaGFycykoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CisJaW50ICAoKndyaXRlX3Jvb20pKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOworCWludCAgKCpjaGFyc19pbl9idWZmZXIpKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOworCWludCAgKCppb2N0bCkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKiBmaWxlLAorCQkgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworCXZvaWQgKCpzZXRfdGVybWlvcykoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHRlcm1pb3MgKiBvbGQpOworCXZvaWQgKCp0aHJvdHRsZSkoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHkpOworCXZvaWQgKCp1bnRocm90dGxlKShzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSk7CisJdm9pZCAoKnN0b3ApKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOworCXZvaWQgKCpzdGFydCkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CisJdm9pZCAoKmhhbmd1cCkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CisJdm9pZCAoKmJyZWFrX2N0bCkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IHN0YXRlKTsKKwl2b2lkICgqZmx1c2hfYnVmZmVyKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKKwl2b2lkICgqc2V0X2xkaXNjKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKKwl2b2lkICgqd2FpdF91bnRpbF9zZW50KShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgdGltZW91dCk7CisJdm9pZCAoKnNlbmRfeGNoYXIpKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNoYXIgY2gpOworCWludCAoKnJlYWRfcHJvYykoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCisJCQkgIGludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpOworCWludCAoKndyaXRlX3Byb2MpKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAorCQkJICB1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lkICpkYXRhKTsKKwlpbnQgKCp0aW9jbWdldCkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpOworCWludCAoKnRpb2Ntc2V0KShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCXVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcik7Cit9OworCitzdHJ1Y3QgdHR5X2RyaXZlciB7CisJaW50CW1hZ2ljOwkJLyogbWFnaWMgbnVtYmVyIGZvciB0aGlzIHN0cnVjdHVyZSAqLworCXN0cnVjdCBjZGV2IGNkZXY7CisJc3RydWN0IG1vZHVsZQkqb3duZXI7CisJY29uc3QgY2hhcgkqZHJpdmVyX25hbWU7CisJY29uc3QgY2hhcgkqZGV2ZnNfbmFtZTsKKwljb25zdCBjaGFyCSpuYW1lOworCWludAluYW1lX2Jhc2U7CS8qIG9mZnNldCBvZiBwcmludGVkIG5hbWUgKi8KKwlpbnQJbWFqb3I7CQkvKiBtYWpvciBkZXZpY2UgbnVtYmVyICovCisJaW50CW1pbm9yX3N0YXJ0OwkvKiBzdGFydCBvZiBtaW5vciBkZXZpY2UgbnVtYmVyICovCisJaW50CW1pbm9yX251bTsJLyogbnVtYmVyIG9mICpwb3NzaWJsZSogZGV2aWNlcyAqLworCWludAludW07CQkvKiBudW1iZXIgb2YgZGV2aWNlcyBhbGxvY2F0ZWQgKi8KKwlzaG9ydAl0eXBlOwkJLyogdHlwZSBvZiB0dHkgZHJpdmVyICovCisJc2hvcnQJc3VidHlwZTsJLyogc3VidHlwZSBvZiB0dHkgZHJpdmVyICovCisJc3RydWN0IHRlcm1pb3MgaW5pdF90ZXJtaW9zOyAvKiBJbml0aWFsIHRlcm1pb3MgKi8KKwlpbnQJZmxhZ3M7CQkvKiB0dHkgZHJpdmVyIGZsYWdzICovCisJaW50CXJlZmNvdW50OwkvKiBmb3IgbG9hZGFibGUgdHR5IGRyaXZlcnMgKi8KKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NfZW50cnk7IC8qIC9wcm9jIGZzIGVudHJ5ICovCisJc3RydWN0IHR0eV9kcml2ZXIgKm90aGVyOyAvKiBvbmx5IHVzZWQgZm9yIHRoZSBQVFkgZHJpdmVyICovCisKKwkvKgorCSAqIFBvaW50ZXIgdG8gdGhlIHR0eSBkYXRhIHN0cnVjdHVyZXMKKwkgKi8KKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqKnR0eXM7CisJc3RydWN0IHRlcm1pb3MgKip0ZXJtaW9zOworCXN0cnVjdCB0ZXJtaW9zICoqdGVybWlvc19sb2NrZWQ7CisJdm9pZCAqZHJpdmVyX3N0YXRlOwkvKiBvbmx5IHVzZWQgZm9yIHRoZSBQVFkgZHJpdmVyICovCisJCisJLyoKKwkgKiBJbnRlcmZhY2Ugcm91dGluZXMgZnJvbSB0aGUgdXBwZXIgdHR5IGxheWVyIHRvIHRoZSB0dHkKKwkgKiBkcml2ZXIuCVdpbGwgYmUgcmVwbGFjZWQgd2l0aCBzdHJ1Y3QgdHR5X29wZXJhdGlvbnMuCisJICovCisJaW50ICAoKm9wZW4pKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5LCBzdHJ1Y3QgZmlsZSAqIGZpbHApOworCXZvaWQgKCpjbG9zZSkoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHksIHN0cnVjdCBmaWxlICogZmlscCk7CisJaW50ICAoKndyaXRlKShzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSwKKwkJICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpOworCXZvaWQgKCpwdXRfY2hhcikoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgdW5zaWduZWQgY2hhciBjaCk7CisJdm9pZCAoKmZsdXNoX2NoYXJzKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKKwlpbnQgICgqd3JpdGVfcm9vbSkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CisJaW50ICAoKmNoYXJzX2luX2J1ZmZlcikoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CisJaW50ICAoKmlvY3RsKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsCisJCSAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CisJdm9pZCAoKnNldF90ZXJtaW9zKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdGVybWlvcyAqIG9sZCk7CisJdm9pZCAoKnRocm90dGxlKShzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSk7CisJdm9pZCAoKnVudGhyb3R0bGUpKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5KTsKKwl2b2lkICgqc3RvcCkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CisJdm9pZCAoKnN0YXJ0KShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKKwl2b2lkICgqaGFuZ3VwKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKKwl2b2lkICgqYnJlYWtfY3RsKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgc3RhdGUpOworCXZvaWQgKCpmbHVzaF9idWZmZXIpKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOworCXZvaWQgKCpzZXRfbGRpc2MpKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOworCXZvaWQgKCp3YWl0X3VudGlsX3NlbnQpKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCB0aW1lb3V0KTsKKwl2b2lkICgqc2VuZF94Y2hhcikoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY2hhciBjaCk7CisJaW50ICgqcmVhZF9wcm9jKShjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwKKwkJCSAgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSk7CisJaW50ICgqd3JpdGVfcHJvYykoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCisJCQkgIHVuc2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKmRhdGEpOworCWludCAoKnRpb2NtZ2V0KShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CisJaW50ICgqdGlvY21zZXQpKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKTsKKworCXN0cnVjdCBsaXN0X2hlYWQgdHR5X2RyaXZlcnM7Cit9OworCitleHRlcm4gc3RydWN0IGxpc3RfaGVhZCB0dHlfZHJpdmVyczsKKworc3RydWN0IHR0eV9kcml2ZXIgKmFsbG9jX3R0eV9kcml2ZXIoaW50IGxpbmVzKTsKK3ZvaWQgcHV0X3R0eV9kcml2ZXIoc3RydWN0IHR0eV9kcml2ZXIgKmRyaXZlcik7Cit2b2lkIHR0eV9zZXRfb3BlcmF0aW9ucyhzdHJ1Y3QgdHR5X2RyaXZlciAqZHJpdmVyLCBzdHJ1Y3QgdHR5X29wZXJhdGlvbnMgKm9wKTsKKworLyogdHR5IGRyaXZlciBtYWdpYyBudW1iZXIgKi8KKyNkZWZpbmUgVFRZX0RSSVZFUl9NQUdJQwkJMHg1NDAyCisKKy8qCisgKiB0dHkgZHJpdmVyIGZsYWdzCisgKiAKKyAqIFRUWV9EUklWRVJfUkVTRVRfVEVSTUlPUyAtLS0gcmVxdWVzdHMgdGhlIHR0eSBsYXllciB0byByZXNldCB0aGUKKyAqIAl0ZXJtaW9zIHNldHRpbmcgd2hlbiB0aGUgbGFzdCBwcm9jZXNzIGhhcyBjbG9zZWQgdGhlIGRldmljZS4KKyAqIAlVc2VkIGZvciBQVFkncywgaW4gcGFydGljdWxhci4KKyAqIAorICogVFRZX0RSSVZFUl9SRUFMX1JBVyAtLS0gaWYgc2V0LCBpbmRpY2F0ZXMgdGhhdCB0aGUgZHJpdmVyIHdpbGwKKyAqIAlndWFyYW50ZWUgbmV2ZXIgbm90IHRvIHNldCBhbnkgc3BlY2lhbCBjaGFyYWN0ZXIgaGFuZGxpbmcKKyAqIAlmbGFncyBpZiAoKElHTkJSSyB8fCAoIUJSS0lOVCAmJiAhUEFSTVJLKSkgJiYgKElHTlBBUiB8fAorICogCSFJTlBDSykpLiAgVGhhdCBpcywgaWYgdGhlcmUgaXMgbm8gcmVhc29uIGZvciB0aGUgZHJpdmVyIHRvCisgKiAJc2VuZCBub3RpZmljYXRpb25zIG9mIHBhcml0eSBhbmQgYnJlYWsgY2hhcmFjdGVycyB1cCB0byB0aGUKKyAqIAlsaW5lIGRyaXZlciwgaXQgd29uJ3QgZG8gc28uICBUaGlzIGFsbG93cyB0aGUgbGluZSBkcml2ZXIgdG8KKyAqCW9wdGltaXplIGZvciB0aGlzIGNhc2UgaWYgdGhpcyBmbGFnIGlzIHNldC4gIChOb3RlIHRoYXQgdGhlcmUKKyAqIAlpcyBhbHNvIGEgcHJvbWlzZSwgaWYgdGhlIGFib3ZlIGNhc2UgaXMgdHJ1ZSwgbm90IHRvIHNpZ25hbAorICogCW92ZXJydW5zLCBlaXRoZXIuKQorICoKKyAqIFRUWV9EUklWRVJfTk9fREVWRlMgLS0tIGlmIHNldCwgZG8gbm90IGNyZWF0ZSBkZXZmcyBlbnRyaWVzLiBUaGlzCisgKglpcyBvbmx5IHVzZWQgYnkgdHR5X3JlZ2lzdGVyX2RyaXZlcigpLgorICoKKyAqIFRUWV9EUklWRVJfREVWUFRTX01FTSAtLSBkb24ndCB1c2UgdGhlIHN0YW5kYXJkIGFycmF5cywgaW5zdGVhZAorICoJdXNlIGR5bmFtaWMgbWVtb3J5IGtleWVkIHRocm91Z2ggdGhlIGRldnB0cyBmaWxlc3lzdGVtLiAgVGhpcworICoJaXMgb25seSBhcHBsaWNhYmxlIHRvIHRoZSBwdHkgZHJpdmVyLgorICovCisjZGVmaW5lIFRUWV9EUklWRVJfSU5TVEFMTEVECQkweDAwMDEKKyNkZWZpbmUgVFRZX0RSSVZFUl9SRVNFVF9URVJNSU9TCTB4MDAwMgorI2RlZmluZSBUVFlfRFJJVkVSX1JFQUxfUkFXCQkweDAwMDQKKyNkZWZpbmUgVFRZX0RSSVZFUl9OT19ERVZGUwkJMHgwMDA4CisjZGVmaW5lIFRUWV9EUklWRVJfREVWUFRTX01FTQkJMHgwMDEwCisKKy8qIHR0eSBkcml2ZXIgdHlwZXMgKi8KKyNkZWZpbmUgVFRZX0RSSVZFUl9UWVBFX1NZU1RFTQkJMHgwMDAxCisjZGVmaW5lIFRUWV9EUklWRVJfVFlQRV9DT05TT0xFCQkweDAwMDIKKyNkZWZpbmUgVFRZX0RSSVZFUl9UWVBFX1NFUklBTAkJMHgwMDAzCisjZGVmaW5lIFRUWV9EUklWRVJfVFlQRV9QVFkJCTB4MDAwNAorI2RlZmluZSBUVFlfRFJJVkVSX1RZUEVfU0NDCQkweDAwMDUJLyogc2NjIGRyaXZlciAqLworI2RlZmluZSBUVFlfRFJJVkVSX1RZUEVfU1lTQ09OUwkJMHgwMDA2CisKKy8qIHN5c3RlbSBzdWJ0eXBlcyAobWFnaWMsIHVzZWQgYnkgdHR5X2lvLmMpICovCisjZGVmaW5lIFNZU1RFTV9UWVBFX1RUWQkJCTB4MDAwMQorI2RlZmluZSBTWVNURU1fVFlQRV9DT05TT0xFCQkweDAwMDIKKyNkZWZpbmUgU1lTVEVNX1RZUEVfU1lTQ09OUwkJMHgwMDAzCisjZGVmaW5lIFNZU1RFTV9UWVBFX1NZU1BUTVgJCTB4MDAwNAorCisvKiBwdHkgc3VidHlwZXMgKG1hZ2ljLCB1c2VkIGJ5IHR0eV9pby5jKSAqLworI2RlZmluZSBQVFlfVFlQRV9NQVNURVIJCQkweDAwMDEKKyNkZWZpbmUgUFRZX1RZUEVfU0xBVkUJCQkweDAwMDIKKworLyogc2VyaWFsIHN1YnR5cGUgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0VSSUFMX1RZUEVfTk9STUFMCTEKKworI2VuZGlmIC8qICNpZmRlZiBfTElOVVhfVFRZX0RSSVZFUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3R0eV9mbGlwLmggYi9pbmNsdWRlL2xpbnV4L3R0eV9mbGlwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJlOWJmYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvdHR5X2ZsaXAuaApAQCAtMCwwICsxLDM1IEBACisjaWZuZGVmIF9MSU5VWF9UVFlfRkxJUF9ICisjZGVmaW5lIF9MSU5VWF9UVFlfRkxJUF9ICisKKyNpZmRlZiBJTkNMVURFX0lOTElORV9GVU5DUworI2RlZmluZSBfSU5MSU5FXyBleHRlcm4KKyNlbHNlCisjZGVmaW5lIF9JTkxJTkVfIHN0YXRpYyBfX2lubGluZV9fCisjZW5kaWYKKworX0lOTElORV8gdm9pZCB0dHlfaW5zZXJ0X2ZsaXBfY2hhcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQkJCSAgIHVuc2lnbmVkIGNoYXIgY2gsIGNoYXIgZmxhZykKK3sKKwlpZiAodHR5LT5mbGlwLmNvdW50IDwgVFRZX0ZMSVBCVUZfU0laRSkgeworCQl0dHktPmZsaXAuY291bnQrKzsKKwkJKnR0eS0+ZmxpcC5mbGFnX2J1Zl9wdHIrKyA9IGZsYWc7CisJCSp0dHktPmZsaXAuY2hhcl9idWZfcHRyKysgPSBjaDsKKwl9Cit9CisKK19JTkxJTkVfIHZvaWQgdHR5X3NjaGVkdWxlX2ZsaXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnR0eS0+ZmxpcC53b3JrLCAxKTsKK30KKworI3VuZGVmIF9JTkxJTkVfCisKKworI2VuZGlmIC8qIF9MSU5VWF9UVFlfRkxJUF9IICovCisKKworCisKKworCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdHR5X2xkaXNjLmggYi9pbmNsdWRlL2xpbnV4L3R0eV9sZGlzYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwNjZhZmQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3R0eV9sZGlzYy5oCkBAIC0wLDAgKzEsMTU0IEBACisjaWZuZGVmIF9MSU5VWF9UVFlfTERJU0NfSAorI2RlZmluZSBfTElOVVhfVFRZX0xESVNDX0gKKworLyoKKyAqIFRoaXMgc3RydWN0dXJlIGRlZmluZXMgdGhlIGludGVyZmFjZSBiZXR3ZWVuIHRoZSB0dHkgbGluZSBkaXNjaXBsaW5lCisgKiBpbXBsZW1lbnRhdGlvbiBhbmQgdGhlIHR0eSByb3V0aW5lcy4gIFRoZSBmb2xsb3dpbmcgcm91dGluZXMgY2FuIGJlCisgKiBkZWZpbmVkOyB1bmxlc3Mgbm90ZWQgb3RoZXJ3aXNlLCB0aGV5IGFyZSBvcHRpb25hbCwgYW5kIGNhbiBiZQorICogZmlsbGVkIGluIHdpdGggYSBudWxsIHBvaW50ZXIuCisgKgorICogaW50CSgqb3Blbikoc3RydWN0IHR0eV9zdHJ1Y3QgKik7CisgKgorICogCVRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIGxpbmUgZGlzY2lwbGluZSBpcyBhc3NvY2lhdGVkCisgKiAJd2l0aCB0aGUgdHR5LiAgVGhlIGxpbmUgZGlzY2lwbGluZSBjYW4gdXNlIHRoaXMgYXMgYW4KKyAqIAlvcHBvcnR1bml0eSB0byBpbml0aWFsaXplIGFueSBzdGF0ZSBuZWVkZWQgYnkgdGhlIGxkaXNjIHJvdXRpbmVzLgorICogCisgKiB2b2lkCSgqY2xvc2UpKHN0cnVjdCB0dHlfc3RydWN0ICopOworICoKKyAqCVRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIGxpbmUgZGlzY2lwbGluZSBpcyBiZWluZworICogCXNodXRkb3duLCBlaXRoZXIgYmVjYXVzZSB0aGUgdHR5IGlzIGJlaW5nIGNsb3NlZCBvciBiZWNhdXNlCisgKiAJdGhlIHR0eSBpcyBiZWluZyBjaGFuZ2VkIHRvIHVzZSBhIG5ldyBsaW5lIGRpc2NpcGxpbmUKKyAqIAorICogdm9pZAkoKmZsdXNoX2J1ZmZlcikoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CisgKgorICogCVRoaXMgZnVuY3Rpb24gaW5zdHJ1Y3RzIHRoZSBsaW5lIGRpc2NpcGxpbmUgdG8gY2xlYXIgaXRzCisgKiAJYnVmZmVycyBvZiBhbnkgaW5wdXQgY2hhcmFjdGVycyBpdCBtYXkgaGF2ZSBxdWV1ZWQgdG8gYmUKKyAqIAlkZWxpdmVyZWQgdG8gdGhlIHVzZXIgbW9kZSBwcm9jZXNzLgorICogCisgKiBzc2l6ZV90ICgqY2hhcnNfaW5fYnVmZmVyKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKKyAqCisgKiAJVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBudW1iZXIgb2YgaW5wdXQgY2hhcmFjdGVycyB0aGUgbGluZQorICoJZGlzY2lwbGluZSBtYXkgaGF2ZSBxdWV1ZWQgdXAgdG8gYmUgZGVsaXZlcmVkIHRvIHRoZSB1c2VyIG1vZGUKKyAqCXByb2Nlc3MuCisgKiAKKyAqIHNzaXplX3QgKCpyZWFkKShzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSwgc3RydWN0IGZpbGUgKiBmaWxlLAorICoJCSAgIHVuc2lnbmVkIGNoYXIgKiBidWYsIHNpemVfdCBucik7CisgKgorICogCVRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIHVzZXIgcmVxdWVzdHMgdG8gcmVhZCBmcm9tCisgKiAJdGhlIHR0eS4gIFRoZSBsaW5lIGRpc2NpcGxpbmUgd2lsbCByZXR1cm4gd2hhdGV2ZXIgY2hhcmFjdGVycworICogCWl0IGhhcyBidWZmZXJlZCB1cCBmb3IgdGhlIHVzZXIuICBJZiB0aGlzIGZ1bmN0aW9uIGlzIG5vdAorICogCWRlZmluZWQsIHRoZSB1c2VyIHdpbGwgcmVjZWl2ZSBhbiBFSU8gZXJyb3IuCisgKiAKKyAqIHNzaXplX3QgKCp3cml0ZSkoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHksIHN0cnVjdCBmaWxlICogZmlsZSwKKyAqIAkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiBidWYsIHNpemVfdCBucik7CisgKgorICogCVRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIHVzZXIgcmVxdWVzdHMgdG8gd3JpdGUgdG8gdGhlCisgKiAJdHR5LiAgVGhlIGxpbmUgZGlzY2lwbGluZSB3aWxsIGRlbGl2ZXIgdGhlIGNoYXJhY3RlcnMgdG8gdGhlCisgKiAJbG93LWxldmVsIHR0eSBkZXZpY2UgZm9yIHRyYW5zbWlzc2lvbiwgb3B0aW9uYWxseSBwZXJmb3JtaW5nCisgKiAJc29tZSBwcm9jZXNzaW5nIG9uIHRoZSBjaGFyYWN0ZXJzIGZpcnN0LiAgSWYgdGhpcyBmdW5jdGlvbiBpcworICogCW5vdCBkZWZpbmVkLCB0aGUgdXNlciB3aWxsIHJlY2VpdmUgYW4gRUlPIGVycm9yLgorICogCisgKiBpbnQJKCppb2N0bCkoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHksIHN0cnVjdCBmaWxlICogZmlsZSwKKyAqIAkJIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKKyAqCisgKglUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSB1c2VyIHJlcXVlc3RzIGFuIGlvY3RsIHdoaWNoCisgKiAJaXMgbm90IGhhbmRsZWQgYnkgdGhlIHR0eSBsYXllciBvciB0aGUgbG93LWxldmVsIHR0eSBkcml2ZXIuCisgKiAJSXQgaXMgaW50ZW5kZWQgZm9yIGlvY3RscyB3aGljaCBhZmZlY3QgbGluZSBkaXNjcGxpbmUKKyAqIAlvcGVyYXRpb24uICBOb3RlIHRoYXQgdGhlIHNlYXJjaCBvcmRlciBmb3IgaW9jdGxzIGlzICgxKSB0dHkKKyAqIAlsYXllciwgKDIpIHR0eSBsb3ctbGV2ZWwgZHJpdmVyLCAoMykgbGluZSBkaXNjcGxpbmUuICBTbyBhCisgKiAJbG93LWxldmVsIGRyaXZlciBjYW4gImdyYWIiIGFuIGlvY3RsIHJlcXVlc3QgYmVmb3JlIHRoZSBsaW5lCisgKiAJZGlzY3BsaW5lIGhhcyBhIGNoYW5jZSB0byBzZWUgaXQuCisgKiAKKyAqIHZvaWQJKCpzZXRfdGVybWlvcykoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHRlcm1pb3MgKiBvbGQpOworICoKKyAqIAlUaGlzIGZ1bmN0aW9uIG5vdGlmaWVzIHRoZSBsaW5lIGRpc2NwbGluZSB0aGF0IGEgY2hhbmdlIGhhcworICogCWJlZW4gbWFkZSB0byB0aGUgdGVybWlvcyBzdHJ1Y3R1cmUuCisgKiAKKyAqIGludAkoKnBvbGwpKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsCisgKiAJCSAgcG9sbF90YWJsZSAqd2FpdCk7CisgKgorICogCVRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYSB1c2VyIGF0dGVtcHRzIHRvIHNlbGVjdC9wb2xsIG9uIGEKKyAqIAl0dHkgZGV2aWNlLiAgSXQgaXMgc29sZWx5IHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgbGluZQorICogCWRpc2NpcGxpbmUgdG8gaGFuZGxlIHBvbGwgcmVxdWVzdHMuCisgKgorICogdm9pZAkoKnJlY2VpdmVfYnVmKShzdHJ1Y3QgdHR5X3N0cnVjdCAqLCBjb25zdCB1bnNpZ25lZCBjaGFyICpjcCwKKyAqIAkJICAgICAgIGNoYXIgKmZwLCBpbnQgY291bnQpOworICoKKyAqIAlUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgbG93LWxldmVsIHR0eSBkcml2ZXIgdG8gc2VuZAorICogCWNoYXJhY3RlcnMgcmVjZWl2ZWQgYnkgdGhlIGhhcmR3YXJlIHRvIHRoZSBsaW5lIGRpc2NwbGluZSBmb3IKKyAqIAlwcm9jZXNzaW5nLiAgPGNwPiBpcyBhIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciBvZiBpbnB1dAorICogCWNoYXJhY3RlciByZWNlaXZlZCBieSB0aGUgZGV2aWNlLiAgPGZwPiBpcyBhIHBvaW50ZXIgdG8gYQorICogCXBvaW50ZXIgb2YgZmxhZyBieXRlcyB3aGljaCBpbmRpY2F0ZSB3aGV0aGVyIGEgY2hhcmFjdGVyIHdhcworICogCXJlY2VpdmVkIHdpdGggYSBwYXJpdHkgZXJyb3IsIGV0Yy4KKyAqIAorICogaW50CSgqcmVjZWl2ZV9yb29tKShzdHJ1Y3QgdHR5X3N0cnVjdCAqKTsKKyAqCisgKiAJVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIGxvdy1sZXZlbCB0dHkgZHJpdmVyIHRvCisgKiAJZGV0ZXJtaW5lIGhvdyBtYW55IGNoYXJhY3RlcnMgdGhlIGxpbmUgZGlzY3BsaW5lIGNhbiBhY2NlcHQuCisgKiAJVGhlIGxvdy1sZXZlbCBkcml2ZXIgbXVzdCBub3Qgc2VuZCBtb3JlIGNoYXJhY3RlcnMgdGhhbiB3YXMKKyAqIAlpbmRpY2F0ZWQgYnkgcmVjZWl2ZV9yb29tLCBvciB0aGUgbGluZSBkaXNjcGxpbmUgbWF5IGRyb3AKKyAqIAl0aG9zZSBjaGFyYWN0ZXJzLgorICogCisgKiB2b2lkCSgqd3JpdGVfd2FrZXVwKShzdHJ1Y3QgdHR5X3N0cnVjdCAqKTsKKyAqCisgKiAJVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIGxvdy1sZXZlbCB0dHkgZHJpdmVyIHRvIHNpZ25hbAorICogCXRoYXQgbGluZSBkaXNjcGxpbmUgc2hvdWxkIHRyeSB0byBzZW5kIG1vcmUgY2hhcmFjdGVycyB0byB0aGUKKyAqIAlsb3ctbGV2ZWwgZHJpdmVyIGZvciB0cmFuc21pc3Npb24uICBJZiB0aGUgbGluZSBkaXNjcGxpbmUgZG9lcworICogCW5vdCBoYXZlIGFueSBtb3JlIGRhdGEgdG8gc2VuZCwgaXQgY2FuIGp1c3QgcmV0dXJuLgorICoKKyAqIGludCAoKmhhbmd1cCkoc3RydWN0IHR0eV9zdHJ1Y3QgKikKKyAqCisgKglDYWxsZWQgb24gYSBoYW5ndXAuIFRlbGxzIHRoZSBkaXNjaXBsaW5lIHRoYXQgaXQgc2hvdWxkCisgKgljZWFzZSBJL08gdG8gdGhlIHR0eSBkcml2ZXIuIENhbiBzbGVlcC4gVGhlIGRyaXZlciBzaG91bGQKKyAqCXNlZWsgdG8gcGVyZm9ybSB0aGlzIGFjdGlvbiBxdWlja2x5IGJ1dCBzaG91bGQgd2FpdCB1bnRpbAorICoJYW55IHBlbmRpbmcgZHJpdmVyIEkvTyBpcyBjb21wbGV0ZWQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorCitzdHJ1Y3QgdHR5X2xkaXNjIHsKKwlpbnQJbWFnaWM7CisJY2hhcgkqbmFtZTsKKwlpbnQJbnVtOworCWludAlmbGFnczsKKwkKKwkvKgorCSAqIFRoZSBmb2xsb3dpbmcgcm91dGluZXMgYXJlIGNhbGxlZCBmcm9tIGFib3ZlLgorCSAqLworCWludAkoKm9wZW4pKHN0cnVjdCB0dHlfc3RydWN0ICopOworCXZvaWQJKCpjbG9zZSkoc3RydWN0IHR0eV9zdHJ1Y3QgKik7CisJdm9pZAkoKmZsdXNoX2J1ZmZlcikoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CisJc3NpemVfdAkoKmNoYXJzX2luX2J1ZmZlcikoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CisJc3NpemVfdAkoKnJlYWQpKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsCisJCQl1bnNpZ25lZCBjaGFyIF9fdXNlciAqIGJ1Ziwgc2l6ZV90IG5yKTsKKwlzc2l6ZV90CSgqd3JpdGUpKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsCisJCQkgY29uc3QgdW5zaWduZWQgY2hhciAqIGJ1Ziwgc2l6ZV90IG5yKTsJCisJaW50CSgqaW9jdGwpKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsCisJCQkgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworCXZvaWQJKCpzZXRfdGVybWlvcykoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHRlcm1pb3MgKiBvbGQpOworCXVuc2lnbmVkIGludCAoKnBvbGwpKHN0cnVjdCB0dHlfc3RydWN0ICosIHN0cnVjdCBmaWxlICosCisJCQkgICAgIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqKTsKKwlpbnQJKCpoYW5ndXApKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOworCQorCS8qCisJICogVGhlIGZvbGxvd2luZyByb3V0aW5lcyBhcmUgY2FsbGVkIGZyb20gYmVsb3cuCisJICovCisJdm9pZAkoKnJlY2VpdmVfYnVmKShzdHJ1Y3QgdHR5X3N0cnVjdCAqLCBjb25zdCB1bnNpZ25lZCBjaGFyICpjcCwKKwkJCSAgICAgICBjaGFyICpmcCwgaW50IGNvdW50KTsKKwlpbnQJKCpyZWNlaXZlX3Jvb20pKHN0cnVjdCB0dHlfc3RydWN0ICopOworCXZvaWQJKCp3cml0ZV93YWtldXApKHN0cnVjdCB0dHlfc3RydWN0ICopOworCisJc3RydWN0ICBtb2R1bGUgKm93bmVyOworCQorCWludCByZWZjb3VudDsKK307CisKKyNkZWZpbmUgVFRZX0xESVNDX01BR0lDCTB4NTQwMworCisjZGVmaW5lIExESVNDX0ZMQUdfREVGSU5FRAkweDAwMDAwMDAxCisKKyNkZWZpbmUgTU9EVUxFX0FMSUFTX0xESVNDKGxkaXNjKSBcCisJTU9EVUxFX0FMSUFTKCJ0dHktbGRpc2MtIiBfX3N0cmluZ2lmeShsZGlzYykpCisKKyNlbmRpZiAvKiBfTElOVVhfVFRZX0xESVNDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2IxM2Y4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC90eXBlcy5oCkBAIC0wLDAgKzEsMTcyIEBACisjaWZuZGVmIF9MSU5VWF9UWVBFU19ICisjZGVmaW5lIF9MSU5VWF9UWVBFU19ICisKKyNpZmRlZglfX0tFUk5FTF9fCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNkZWZpbmUgQklUU19UT19MT05HUyhiaXRzKSBcCisJKCgoYml0cykrQklUU19QRVJfTE9ORy0xKS9CSVRTX1BFUl9MT05HKQorI2RlZmluZSBERUNMQVJFX0JJVE1BUChuYW1lLGJpdHMpIFwKKwl1bnNpZ25lZCBsb25nIG5hbWVbQklUU19UT19MT05HUyhiaXRzKV0KKyNlbmRpZgorCisjaW5jbHVkZSA8bGludXgvcG9zaXhfdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKworI2lmbmRlZiBfX0tFUk5FTF9TVFJJQ1RfTkFNRVMKKwordHlwZWRlZiBfX3UzMiBfX2tlcm5lbF9kZXZfdDsKKwordHlwZWRlZiBfX2tlcm5lbF9mZF9zZXQJCWZkX3NldDsKK3R5cGVkZWYgX19rZXJuZWxfZGV2X3QJCWRldl90OwordHlwZWRlZiBfX2tlcm5lbF9pbm9fdAkJaW5vX3Q7Cit0eXBlZGVmIF9fa2VybmVsX21vZGVfdAkJbW9kZV90OwordHlwZWRlZiBfX2tlcm5lbF9ubGlua190CW5saW5rX3Q7Cit0eXBlZGVmIF9fa2VybmVsX29mZl90CQlvZmZfdDsKK3R5cGVkZWYgX19rZXJuZWxfcGlkX3QJCXBpZF90OwordHlwZWRlZiBfX2tlcm5lbF9kYWRkcl90CWRhZGRyX3Q7Cit0eXBlZGVmIF9fa2VybmVsX2tleV90CQlrZXlfdDsKK3R5cGVkZWYgX19rZXJuZWxfc3VzZWNvbmRzX3QJc3VzZWNvbmRzX3Q7Cit0eXBlZGVmIF9fa2VybmVsX3RpbWVyX3QJdGltZXJfdDsKK3R5cGVkZWYgX19rZXJuZWxfY2xvY2tpZF90CWNsb2NraWRfdDsKK3R5cGVkZWYgX19rZXJuZWxfbXFkX3QJCW1xZF90OworCisjaWZkZWYgX19LRVJORUxfXwordHlwZWRlZiBfX2tlcm5lbF91aWQzMl90CXVpZF90OwordHlwZWRlZiBfX2tlcm5lbF9naWQzMl90CWdpZF90OwordHlwZWRlZiBfX2tlcm5lbF91aWQxNl90ICAgICAgICB1aWQxNl90OwordHlwZWRlZiBfX2tlcm5lbF9naWQxNl90ICAgICAgICBnaWQxNl90OworCisjaWZkZWYgQ09ORklHX1VJRDE2CisvKiBUaGlzIGlzIGRlZmluZWQgYnkgaW5jbHVkZS9hc20te2FyY2h9L3Bvc2l4X3R5cGVzLmggKi8KK3R5cGVkZWYgX19rZXJuZWxfb2xkX3VpZF90CW9sZF91aWRfdDsKK3R5cGVkZWYgX19rZXJuZWxfb2xkX2dpZF90CW9sZF9naWRfdDsKKyNlbmRpZiAvKiBDT05GSUdfVUlEMTYgKi8KKworLyogbGliYzUgaW5jbHVkZXMgdGhpcyBmaWxlIHRvIGRlZmluZSB1aWRfdCwgdGh1cyB1aWRfdCBjYW4gbmV2ZXIgY2hhbmdlCisgKiB3aGVuIGl0IGlzIGluY2x1ZGVkIGJ5IG5vbi1rZXJuZWwgY29kZQorICovCisjZWxzZQordHlwZWRlZiBfX2tlcm5lbF91aWRfdAkJdWlkX3Q7Cit0eXBlZGVmIF9fa2VybmVsX2dpZF90CQlnaWRfdDsKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAhZGVmaW5lZChfX1NUUklDVF9BTlNJX18pCit0eXBlZGVmIF9fa2VybmVsX2xvZmZfdAkJbG9mZl90OworI2VuZGlmCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIHR5cGVkZWZzIGFyZSBhbHNvIHByb3RlY3RlZCBieSBpbmRpdmlkdWFsIGlmZGVmcyBmb3IKKyAqIGhpc3RvcmljYWwgcmVhc29uczoKKyAqLworI2lmbmRlZiBfU0laRV9UCisjZGVmaW5lIF9TSVpFX1QKK3R5cGVkZWYgX19rZXJuZWxfc2l6ZV90CQlzaXplX3Q7CisjZW5kaWYKKworI2lmbmRlZiBfU1NJWkVfVAorI2RlZmluZSBfU1NJWkVfVAordHlwZWRlZiBfX2tlcm5lbF9zc2l6ZV90CXNzaXplX3Q7CisjZW5kaWYKKworI2lmbmRlZiBfUFRSRElGRl9UCisjZGVmaW5lIF9QVFJESUZGX1QKK3R5cGVkZWYgX19rZXJuZWxfcHRyZGlmZl90CXB0cmRpZmZfdDsKKyNlbmRpZgorCisjaWZuZGVmIF9USU1FX1QKKyNkZWZpbmUgX1RJTUVfVAordHlwZWRlZiBfX2tlcm5lbF90aW1lX3QJCXRpbWVfdDsKKyNlbmRpZgorCisjaWZuZGVmIF9DTE9DS19UCisjZGVmaW5lIF9DTE9DS19UCit0eXBlZGVmIF9fa2VybmVsX2Nsb2NrX3QJY2xvY2tfdDsKKyNlbmRpZgorCisjaWZuZGVmIF9DQUREUl9UCisjZGVmaW5lIF9DQUREUl9UCit0eXBlZGVmIF9fa2VybmVsX2NhZGRyX3QJY2FkZHJfdDsKKyNlbmRpZgorCisvKiBic2QgKi8KK3R5cGVkZWYgdW5zaWduZWQgY2hhcgkJdV9jaGFyOwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAkJdV9zaG9ydDsKK3R5cGVkZWYgdW5zaWduZWQgaW50CQl1X2ludDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZwkJdV9sb25nOworCisvKiBzeXN2ICovCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIJCXVuY2hhcjsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJCXVzaG9ydDsKK3R5cGVkZWYgdW5zaWduZWQgaW50CQl1aW50OwordHlwZWRlZiB1bnNpZ25lZCBsb25nCQl1bG9uZzsKKworI2lmbmRlZiBfX0JJVF9UWVBFU19ERUZJTkVEX18KKyNkZWZpbmUgX19CSVRfVFlQRVNfREVGSU5FRF9fCisKK3R5cGVkZWYJCV9fdTgJCXVfaW50OF90OwordHlwZWRlZgkJX19zOAkJaW50OF90OwordHlwZWRlZgkJX191MTYJCXVfaW50MTZfdDsKK3R5cGVkZWYJCV9fczE2CQlpbnQxNl90OwordHlwZWRlZgkJX191MzIJCXVfaW50MzJfdDsKK3R5cGVkZWYJCV9fczMyCQlpbnQzMl90OworCisjZW5kaWYgLyogIShfX0JJVF9UWVBFU19ERUZJTkVEX18pICovCisKK3R5cGVkZWYJCV9fdTgJCXVpbnQ4X3Q7Cit0eXBlZGVmCQlfX3UxNgkJdWludDE2X3Q7Cit0eXBlZGVmCQlfX3UzMgkJdWludDMyX3Q7CisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAhZGVmaW5lZChfX1NUUklDVF9BTlNJX18pCit0eXBlZGVmCQlfX3U2NAkJdWludDY0X3Q7Cit0eXBlZGVmCQlfX3U2NAkJdV9pbnQ2NF90OwordHlwZWRlZgkJX19zNjQJCWludDY0X3Q7CisjZW5kaWYKKworLyoKKyAqIFRoZSB0eXBlIHVzZWQgZm9yIGluZGV4aW5nIG9udG8gYSBkaXNjIG9yIGRpc2MgcGFydGl0aW9uLgorICogSWYgcmVxdWlyZWQsIGFzbS90eXBlcy5oIGNhbiBvdmVycmlkZSBpdCBhbmQgZGVmaW5lCisgKiBIQVZFX1NFQ1RPUl9UCisgKi8KKyNpZm5kZWYgSEFWRV9TRUNUT1JfVAordHlwZWRlZiB1bnNpZ25lZCBsb25nIHNlY3Rvcl90OworI2VuZGlmCisKKy8qCisgKiBUaGUgdHlwZSBvZiBhbiBpbmRleCBpbnRvIHRoZSBwYWdlY2FjaGUuICBVc2UgYSAjZGVmaW5lIHNvIGFzbS90eXBlcy5oCisgKiBjYW4gb3ZlcnJpZGUgaXQuCisgKi8KKyNpZm5kZWYgcGdvZmZfdAorI2RlZmluZSBwZ29mZl90IHVuc2lnbmVkIGxvbmcKKyNlbmRpZgorCisjZW5kaWYgLyogX19LRVJORUxfU1RSSUNUX05BTUVTICovCisKKy8qCisgKiBCZWxvdyBhcmUgdHJ1bHkgTGludXgtc3BlY2lmaWMgdHlwZXMgdGhhdCBzaG91bGQgbmV2ZXIgY29sbGlkZSB3aXRoCisgKiBhbnkgYXBwbGljYXRpb24vbGlicmFyeSB0aGF0IHdhbnRzIGxpbnV4L3R5cGVzLmguCisgKi8KKworI2lmZGVmIF9fQ0hFQ0tFUl9fCisjZGVmaW5lIF9fYml0d2lzZSBfX2F0dHJpYnV0ZV9fKChiaXR3aXNlKSkKKyNlbHNlCisjZGVmaW5lIF9fYml0d2lzZQorI2VuZGlmCisKK3R5cGVkZWYgX191MTYgX19iaXR3aXNlIF9fbGUxNjsKK3R5cGVkZWYgX191MTYgX19iaXR3aXNlIF9fYmUxNjsKK3R5cGVkZWYgX191MzIgX19iaXR3aXNlIF9fbGUzMjsKK3R5cGVkZWYgX191MzIgX19iaXR3aXNlIF9fYmUzMjsKKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAhZGVmaW5lZChfX1NUUklDVF9BTlNJX18pCit0eXBlZGVmIF9fdTY0IF9fYml0d2lzZSBfX2xlNjQ7Cit0eXBlZGVmIF9fdTY0IF9fYml0d2lzZSBfX2JlNjQ7CisjZW5kaWYKKworc3RydWN0IHVzdGF0IHsKKwlfX2tlcm5lbF9kYWRkcl90CWZfdGZyZWU7CisJX19rZXJuZWxfaW5vX3QJCWZfdGlub2RlOworCWNoYXIJCQlmX2ZuYW1lWzZdOworCWNoYXIJCQlmX2ZwYWNrWzZdOworfTsKKworI2VuZGlmIC8qIF9MSU5VWF9UWVBFU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VkZl9mcy5oIGIvaW5jbHVkZS9saW51eC91ZGZfZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmUyYmI5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC91ZGZfZnMuaApAQCAtMCwwICsxLDU5IEBACisvKgorICogdWRmX2ZzLmgKKyAqCisgKiBQVVJQT1NFCisgKiAgSW5jbHVkZWQgYnkgZnMvZmlsZXN5c3RlbXMuYworICoKKyAqIERFU0NSSVBUSU9OCisgKiAgT1NUQS1VREYodG0pID0gT3B0aWNhbCBTdG9yYWdlIFRlY2hub2xvZ3kgQXNzb2NpYXRpb24KKyAqICBVbml2ZXJzYWwgRGlzayBGb3JtYXQuCisgKgorICogIFRoaXMgY29kZSBpcyBiYXNlZCBvbiB2ZXJzaW9uIDIuNTAgb2YgdGhlIFVERiBzcGVjaWZpY2F0aW9uLAorICogIGFuZCByZXZpc2lvbiAzIG9mIHRoZSBFQ01BIDE2NyBzdGFuZGFyZCBbZXF1aXZhbGVudCB0byBJU08gMTMzNDZdLgorICogICAgaHR0cDovL3d3dy5vc3RhLm9yZy8gKiAgICBodHRwOi8vd3d3LmVjbWEuY2gvCisgKiAgICBodHRwOi8vd3d3Lmlzby5vcmcvCisgKgorICogQ09OVEFDVFMKKyAqCUUtbWFpbCByZWdhcmRpbmcgYW55IHBvcnRpb24gb2YgdGhlIExpbnV4IFVERiBmaWxlIHN5c3RlbSBzaG91bGQgYmUKKyAqCWRpcmVjdGVkIHRvIHRoZSBkZXZlbG9wbWVudCB0ZWFtIG1haWxpbmcgbGlzdCAocnVuIGJ5IG1ham9yZG9tbyk6CisgKgkJbGludXhfdWRmQGhwZXNqcm8uZmMuaHAuY29tCisgKgorICogQ09QWVJJR0hUCisgKglUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqCUxpY2Vuc2UgKEdQTCkuIENvcGllcyBvZiB0aGUgR1BMIGNhbiBiZSBvYnRhaW5lZCBmcm9tOgorICoJCWZ0cDovL3ByZXAuYWkubWl0LmVkdS9wdWIvZ251L0dQTAorICoJRWFjaCBjb250cmlidXRpbmcgYXV0aG9yIHJldGFpbnMgYWxsIHJpZ2h0cyB0byB0aGVpciBvd24gd29yay4KKyAqCisgKiAgKEMpIDE5OTktMjAwNCBCZW4gRmVubmVtYQorICogIChDKSAxOTk5LTIwMDAgU3RlbGlhcyBDb21wdXRpbmcgSW5jCisgKgorICogSElTVE9SWQorICoKKyAqLworCisjaWZuZGVmIF9VREZfRlNfSAorI2RlZmluZSBfVURGX0ZTX0ggMQorCisjZGVmaW5lIFVERl9QUkVBTExPQ0FURQorI2RlZmluZSBVREZfREVGQVVMVF9QUkVBTExPQ19CTE9DS1MJOAorCisjZGVmaW5lIFVERkZTX0RBVEUJCQkiMjAwNC8yOS8wOSIKKyNkZWZpbmUgVURGRlNfVkVSU0lPTgkJCSIwLjkuOC4xIgorCisjdW5kZWYgVURGRlNfREVCVUcKKworI2lmZGVmIFVERkZTX0RFQlVHCisjZGVmaW5lIHVkZl9kZWJ1ZyhmLCBhLi4uKSBcCisJeyBcCisJCXByaW50ayAoS0VSTl9ERUJVRyAiVURGLWZzIERFQlVHICVzOiVkOiVzOiAiLCBcCisJCQlfX0ZJTEVfXywgX19MSU5FX18sIF9fRlVOQ1RJT05fXyk7IFwKKwkJcHJpbnRrIChmLCAjI2EpOyBcCisJfQorI2Vsc2UKKyNkZWZpbmUgdWRmX2RlYnVnKGYsIGEuLi4pIC8qKi8KKyNlbmRpZgorCisjZGVmaW5lIHVkZl9pbmZvKGYsIGEuLi4pIFwKKwkJcHJpbnRrIChLRVJOX0lORk8gIlVERi1mcyBJTkZPICIgZiwgIyNhKTsKKworI2VuZGlmIC8qIF9VREZfRlNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91ZGZfZnNfaS5oIGIvaW5jbHVkZS9saW51eC91ZGZfZnNfaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyYjE1YTQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3VkZl9mc19pLmgKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIHVkZl9mc19pLmgKKyAqCisgKiBUaGlzIGZpbGUgaXMgaW50ZW5kZWQgZm9yIHRoZSBMaW51eCBrZXJuZWwvbW9kdWxlLiAKKyAqCisgKiBDT05UQUNUUworICoJRS1tYWlsIHJlZ2FyZGluZyBhbnkgcG9ydGlvbiBvZiB0aGUgTGludXggVURGIGZpbGUgc3lzdGVtIHNob3VsZCBiZQorICoJZGlyZWN0ZWQgdG8gdGhlIGRldmVsb3BtZW50IHRlYW0gbWFpbGluZyBsaXN0IChydW4gYnkgbWFqb3Jkb21vKToKKyAqCQlsaW51eF91ZGZAaHBlc2pyby5mYy5ocC5jb20KKyAqCisgKiBDT1BZUklHSFQKKyAqCVRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICoJTGljZW5zZSAoR1BMKS4gQ29waWVzIG9mIHRoZSBHUEwgY2FuIGJlIG9idGFpbmVkIGZyb206CisgKgkJZnRwOi8vcHJlcC5haS5taXQuZWR1L3B1Yi9nbnUvR1BMCisgKglFYWNoIGNvbnRyaWJ1dGluZyBhdXRob3IgcmV0YWlucyBhbGwgcmlnaHRzIHRvIHRoZWlyIG93biB3b3JrLgorICovCisKKyNpZm5kZWYgX1VERl9GU19JX0gKKyNkZWZpbmUgX1VERl9GU19JX0ggMQorCisjaWZkZWYgX19LRVJORUxfXworCisjaWZuZGVmIF9FQ01BXzE2N19ICit0eXBlZGVmIHN0cnVjdAoreworCV9fdTMyCQkJbG9naWNhbEJsb2NrTnVtOworCV9fdTE2CQkJcGFydGl0aW9uUmVmZXJlbmNlTnVtOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgbGJfYWRkcjsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlfX3UzMgkJCWV4dExlbmd0aDsKKwlfX3UzMgkJCWV4dFBvc2l0aW9uOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgc2hvcnRfYWQ7CisKK3R5cGVkZWYgc3RydWN0Cit7CisJX191MzIJCQlleHRMZW5ndGg7CisJbGJfYWRkcgkJCWV4dExvY2F0aW9uOworCV9fdTgJCQlpbXBVc2VbNl07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBsb25nX2FkOworI2VuZGlmCisKK3N0cnVjdCB1ZGZfaW5vZGVfaW5mbworeworCXN0cnVjdCB0aW1lc3BlYwkJaV9jcnRpbWU7CisJLyogUGh5c2ljYWwgYWRkcmVzcyBvZiBpbm9kZSAqLworCWtlcm5lbF9sYl9hZGRyCQlpX2xvY2F0aW9uOworCV9fdTY0CQkJaV91bmlxdWU7CisJX191MzIJCQlpX2xlbkVBdHRyOworCV9fdTMyCQkJaV9sZW5BbGxvYzsKKwlfX3U2NAkJCWlfbGVuRXh0ZW50czsKKwlfX3UzMgkJCWlfbmV4dF9hbGxvY19ibG9jazsKKwlfX3UzMgkJCWlfbmV4dF9hbGxvY19nb2FsOworCXVuc2lnbmVkCQlpX2FsbG9jX3R5cGUgOiAzOworCXVuc2lnbmVkCQlpX2VmZSA6IDE7CisJdW5zaWduZWQJCWlfdXNlIDogMTsKKwl1bnNpZ25lZAkJaV9zdHJhdDQwOTYgOiAxOworCXVuc2lnbmVkCQlyZXNlcnZlZCA6IDI2OworCXVuaW9uCisJeworCQlzaG9ydF9hZAkqaV9zYWQ7CisJCWxvbmdfYWQJCSppX2xhZDsKKwkJX191OAkJKmlfZGF0YTsKKwl9IGlfZXh0OworCXN0cnVjdCBpbm9kZSB2ZnNfaW5vZGU7Cit9OworCisjZW5kaWYKKworLyogZXhwb3J0ZWQgSU9DVExzLCB3ZSBoYXZlICdsJywgMHg0MC0weDdmICovCisKKyNkZWZpbmUgVURGX0dFVEVBU0laRSAgIF9JT1IoJ2wnLCAweDQwLCBpbnQpCisjZGVmaW5lIFVERl9HRVRFQUJMT0NLICBfSU9SKCdsJywgMHg0MSwgdm9pZCAqKQorI2RlZmluZSBVREZfR0VUVk9MSURFTlQgX0lPUignbCcsIDB4NDIsIHZvaWQgKikKKyNkZWZpbmUgVURGX1JFTE9DQVRFX0JMT0NLUyBfSU9XUignbCcsIDB4NDMsIGxvbmcpCisKKyNlbmRpZiAvKiBfVURGX0ZTX0lfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91ZGZfZnNfc2IuaCBiL2luY2x1ZGUvbGludXgvdWRmX2ZzX3NiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk2NmE2ZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvdWRmX2ZzX3NiLmgKQEAgLTAsMCArMSwxMjIgQEAKKy8qCisgKiB1ZGZfZnNfc2IuaAorICogCisgKiBUaGlzIGluY2x1ZGUgZmlsZSBpcyBmb3IgdGhlIExpbnV4IGtlcm5lbC9tb2R1bGUuCisgKgorICogQ09OVEFDVFMKKyAqCUUtbWFpbCByZWdhcmRpbmcgYW55IHBvcnRpb24gb2YgdGhlIExpbnV4IFVERiBmaWxlIHN5c3RlbSBzaG91bGQgYmUKKyAqCWRpcmVjdGVkIHRvIHRoZSBkZXZlbG9wbWVudCB0ZWFtIG1haWxpbmcgbGlzdCAocnVuIGJ5IG1ham9yZG9tbyk6CisgKgkJbGludXhfdWRmQGhwZXNqcm8uZmMuaHAuY29tCisgKgorICogQ09QWVJJR0hUCisgKglUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqCUxpY2Vuc2UgKEdQTCkuIENvcGllcyBvZiB0aGUgR1BMIGNhbiBiZSBvYnRhaW5lZCBmcm9tOgorICoJCWZ0cDovL3ByZXAuYWkubWl0LmVkdS9wdWIvZ251L0dQTAorICoJRWFjaCBjb250cmlidXRpbmcgYXV0aG9yIHJldGFpbnMgYWxsIHJpZ2h0cyB0byB0aGVpciBvd24gd29yay4KKyAqLworCisjaWZuZGVmIF9VREZfRlNfU0JfSAorI2RlZmluZSBfVURGX0ZTX1NCX0ggMQorCisjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgorCisjcHJhZ21hIHBhY2soMSkKKworI2RlZmluZSBVREZfTUFYX0JMT0NLX0xPQURFRAk4CisKKyNkZWZpbmUgVURGX1RZUEUxX01BUDE1CQkJMHgxNTExVQorI2RlZmluZSBVREZfVklSVFVBTF9NQVAxNQkJMHgxNTEyVQorI2RlZmluZSBVREZfVklSVFVBTF9NQVAyMAkJMHgyMDEyVQorI2RlZmluZSBVREZfU1BBUkFCTEVfTUFQMTUJCTB4MTUyMlUKKworc3RydWN0IHVkZl9zcGFyaW5nX2RhdGEKK3sKKwlfX3UxNglzX3BhY2tldF9sZW47CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpzX3NwYXJfbWFwWzRdOworfTsKKworc3RydWN0IHVkZl92aXJ0dWFsX2RhdGEKK3sKKwlfX3UzMglzX251bV9lbnRyaWVzOworCV9fdTE2CXNfc3RhcnRfb2Zmc2V0OworfTsKKworc3RydWN0IHVkZl9iaXRtYXAKK3sKKwlfX3UzMgkJCXNfZXh0TGVuZ3RoOworCV9fdTMyCQkJc19leHRQb3NpdGlvbjsKKwlfX3UxNgkJCXNfbnJfZ3JvdXBzOworCXN0cnVjdCBidWZmZXJfaGVhZCAJKipzX2Jsb2NrX2JpdG1hcDsKK307CisKK3N0cnVjdCB1ZGZfcGFydF9tYXAKK3sKKwl1bmlvbgorCXsKKwkJc3RydWN0IHVkZl9iaXRtYXAJKnNfYml0bWFwOworCQlzdHJ1Y3QgaW5vZGUJCSpzX3RhYmxlOworCX0gc191c3BhY2U7CisJdW5pb24KKwl7CisJCXN0cnVjdCB1ZGZfYml0bWFwCSpzX2JpdG1hcDsKKwkJc3RydWN0IGlub2RlCQkqc190YWJsZTsKKwl9IHNfZnNwYWNlOworCV9fdTMyCXNfcGFydGl0aW9uX3Jvb3Q7CisJX191MzIJc19wYXJ0aXRpb25fbGVuOworCV9fdTE2CXNfcGFydGl0aW9uX3R5cGU7CisJX191MTYJc19wYXJ0aXRpb25fbnVtOworCXVuaW9uCisJeworCQlzdHJ1Y3QgdWRmX3NwYXJpbmdfZGF0YSBzX3NwYXJpbmc7CisJCXN0cnVjdCB1ZGZfdmlydHVhbF9kYXRhIHNfdmlydHVhbDsKKwl9IHNfdHlwZV9zcGVjaWZpYzsKKwlfX3UzMgkoKnNfcGFydGl0aW9uX2Z1bmMpKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBfX3UzMiwgX191MTYsIF9fdTMyKTsKKwlfX3UxNglzX3ZvbHVtZXNlcW51bTsKKwlfX3UxNglzX3BhcnRpdGlvbl9mbGFnczsKK307CisKKyNwcmFnbWEgcGFjaygpCisKK3N0cnVjdCB1ZGZfc2JfaW5mbworeworCXN0cnVjdCB1ZGZfcGFydF9tYXAJKnNfcGFydG1hcHM7CisJX191OAkJCXNfdm9saWRlbnRbMzJdOworCisJLyogT3ZlcmFsbCBpbmZvICovCisJX191MTYJCQlzX3BhcnRpdGlvbnM7CisJX191MTYJCQlzX3BhcnRpdGlvbjsKKworCS8qIFNlY3RvciBoZWFkZXJzICovCisJX19zMzIJCQlzX3Nlc3Npb247CisJX191MzIJCQlzX2FuY2hvcls0XTsKKwlfX3UzMgkJCXNfbGFzdGJsb2NrOworCisJc3RydWN0IGJ1ZmZlcl9oZWFkCSpzX2x2aWRiaDsKKworCS8qIERlZmF1bHQgcGVybWlzc2lvbnMgKi8KKwltb2RlX3QJCQlzX3VtYXNrOworCWdpZF90CQkJc19naWQ7CisJdWlkX3QJCQlzX3VpZDsKKworCS8qIFJvb3QgSW5mbyAqLworCXN0cnVjdCB0aW1lc3BlYwkJc19yZWNvcmR0aW1lOworCisJLyogRmlsZXNldCBJbmZvICovCisJX191MTYJCQlzX3NlcmlhbG51bTsKKworCS8qIGhpZ2hlc3QgVURGIHJldmlzaW9uIHdlIGhhdmUgcmVjb3JkZWQgdG8gdGhpcyBtZWRpYSAqLworCV9fdTE2CQkJc191ZGZyZXY7CisKKwkvKiBNaXNjZWxsYW5lb3VzIGZsYWdzICovCisJX191MzIJCQlzX2ZsYWdzOworCisJLyogRW5jb2RpbmcgaW5mbyAqLworCXN0cnVjdCBubHNfdGFibGUJKnNfbmxzX21hcDsKKworCS8qIFZBVCBpbm9kZSAqLworCXN0cnVjdCBpbm9kZQkJKnNfdmF0OworCisJc3RydWN0IHNlbWFwaG9yZQlzX2FsbG9jX3NlbTsKK307CisKKyNlbmRpZiAvKiBfVURGX0ZTX1NCX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdWRwLmggYi9pbmNsdWRlL2xpbnV4L3VkcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2MGUwYjQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3VkcC5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBJTkVUCQlBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgVENQL0lQIHByb3RvY29sIHN1aXRlIGZvciB0aGUgTElOVVgKKyAqCQlvcGVyYXRpbmcgc3lzdGVtLiAgSU5FVCBpcyBpbXBsZW1lbnRlZCB1c2luZyB0aGUgIEJTRCBTb2NrZXQKKyAqCQlpbnRlcmZhY2UgYXMgdGhlIG1lYW5zIG9mIGNvbW11bmljYXRpb24gd2l0aCB0aGUgdXNlciBsZXZlbC4KKyAqCisgKgkJRGVmaW5pdGlvbnMgZm9yIHRoZSBVRFAgcHJvdG9jb2wuCisgKgorICogVmVyc2lvbjoJQCgjKXVkcC5oCTEuMC4yCTA0LzI4LzkzCisgKgorICogQXV0aG9yOglGcmVkIE4uIHZhbiBLZW1wZW4sIDx3YWx0amVAdVdhbHQuTkwuTXVnbmV0Lk9SRz4KKyAqCisgKgkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKgkJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKgkJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2lmbmRlZiBfTElOVVhfVURQX0gKKyNkZWZpbmUgX0xJTlVYX1VEUF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3QgdWRwaGRyIHsKKwlfX3UxNglzb3VyY2U7CisJX191MTYJZGVzdDsKKwlfX3UxNglsZW47CisJX191MTYJY2hlY2s7Cit9OworCisvKiBVRFAgc29ja2V0IG9wdGlvbnMgKi8KKyNkZWZpbmUgVURQX0NPUksJMQkvKiBOZXZlciBzZW5kIHBhcnRpYWxseSBjb21wbGV0ZSBzZWdtZW50cyAqLworI2RlZmluZSBVRFBfRU5DQVAJMTAwCS8qIFNldCB0aGUgc29ja2V0IHRvIGFjY2VwdCBlbmNhcHN1bGF0ZWQgcGFja2V0cyAqLworCisvKiBVRFAgZW5jYXBzdWxhdGlvbiB0eXBlcyAqLworI2RlZmluZSBVRFBfRU5DQVBfRVNQSU5VRFBfTk9OX0lLRQkxIC8qIGRyYWZ0LWlldGYtaXBzZWMtbmF0LXQtaWtlLTAwLzAxICovCisjZGVmaW5lIFVEUF9FTkNBUF9FU1BJTlVEUAkyIC8qIGRyYWZ0LWlldGYtaXBzZWMtdWRwLWVuY2Fwcy0wNiAqLworCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0L3NvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9pcC5oPgorCitzdHJ1Y3QgdWRwX3NvY2sgeworCS8qIGluZXRfc29jayBoYXMgdG8gYmUgdGhlIGZpcnN0IG1lbWJlciAqLworCXN0cnVjdCBpbmV0X3NvY2sgaW5ldDsKKwlpbnQJCSBwZW5kaW5nOwkvKiBBbnkgcGVuZGluZyBmcmFtZXMgPyAqLworCXVuc2lnbmVkIGludAkgY29ya2ZsYWc7CS8qIENvcmsgaXMgcmVxdWlyZWQgKi8KKyAgCV9fdTE2CQkgZW5jYXBfdHlwZTsJLyogSXMgdGhpcyBhbiBFbmNhcHN1bGF0aW9uIHNvY2tldD8gKi8KKwkvKgorCSAqIEZvbGxvd2luZyBtZW1iZXIgcmV0YWlucyB0aGUgaW5mb21hdGlvbiB0byBjcmVhdGUgYSBVRFAgaGVhZGVyCisJICogd2hlbiB0aGUgc29ja2V0IGlzIHVuY29ya2VkLgorCSAqLworCV9fdTE2CQkgbGVuOwkJLyogdG90YWwgbGVuZ3RoIG9mIHBlbmRpbmcgZnJhbWVzICovCit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCB1ZHBfc29jayAqdWRwX3NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaykKK3sKKwlyZXR1cm4gKHN0cnVjdCB1ZHBfc29jayAqKXNrOworfQorCisjZW5kaWYKKworI2VuZGlmCS8qIF9MSU5VWF9VRFBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91ZnNfZnMuaCBiL2luY2x1ZGUvbGludXgvdWZzX2ZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E2YmFiZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvdWZzX2ZzLmgKQEAgLTAsMCArMSw5NDMgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9saW51eC91ZnNfZnMuaAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NgorICogQWRyaWFuIFJvZHJpZ3VleiAoYWRyaWFuQGZyYW5rbGlucy10b3dlci5ydXRnZXJzLmVkdSkKKyAqIExhYm9yYXRvcnkgZm9yIENvbXB1dGVyIFNjaWVuY2UgUmVzZWFyY2ggQ29tcHV0aW5nIEZhY2lsaXR5CisgKiBSdXRnZXJzLCBUaGUgU3RhdGUgVW5pdmVyc2l0eSBvZiBOZXcgSmVyc2V5CisgKgorICogQ2xlYW4gc3dhYiBzdXBwb3J0IGJ5IEZhcmUgPGZhcmVAdHVuZXMub3JnPgorICoganVzdCBob3BlIG5vIG9uZSBpcyB1c2luZyBOTlVVWFhJIG9uIF9fPzY0IHN0cnVjdHVyZSBlbGVtZW50cworICogNjQtYml0IGNsZWFuIHRoYW5rcyB0byBNYWNpZWogVy4gUm96eWNraSA8bWFjcm9AZHMyLnBnLmdkYS5wbD4KKyAqCisgKiA0LjRCU0QgKEZyZWVCU0QpIHN1cHBvcnQgYWRkZWQgb24gRmVicnVhcnkgMXN0IDE5OTggYnkKKyAqIE5pZWxzIEtyaXN0aWFuIEJlY2ggSmVuc2VuIDxua2JqQGltYWdlLmRrPiBwYXJ0aWFsbHkgYmFzZWQKKyAqIG9uIGNvZGUgYnkgTWFydGluIHZvbiBMb2V3aXMgPG1hcnRpbkBtaXJhLmlzZG4uY3MudHUtYmVybGluLmRlPi4KKyAqCisgKiBOZVhUc3RlcCBzdXBwb3J0IGFkZGVkIG9uIEZlYnJ1YXJ5IDV0aCAxOTk4IGJ5CisgKiBOaWVscyBLcmlzdGlhbiBCZWNoIEplbnNlbiA8bmtiakBpbWFnZS5kaz4uCisgKgorICogV3JpdGUgc3VwcG9ydCBieSBEYW5pZWwgUGlya2wgPGRhbmllbC5waXJrbEBlbWFpbC5jej4KKyAqCisgKiBIUC9VWCBoZnMgZmlsZXN5c3RlbSBzdXBwb3J0IGFkZGVkIGJ5CisgKiBNYXJ0aW4gSy4gUGV0ZXJzZW4gPG1rcEBta3AubmV0PiwgQXVndXN0IDE5OTkKKyAqCisgKiBVRlMyIChvZiBGcmVlQlNEIDUueCkgc3VwcG9ydCBhZGRlZCBieQorICogTmlyYWogS3VtYXIgPG5pcmFqMTdAaWl0Ym9tYmF5Lm9yZz4gICwgSmFuIDIwMDQKKyAqCisgKi8KKworI2lmbmRlZiBfX0xJTlVYX1VGU19GU19ICisjZGVmaW5lIF9fTElOVVhfVUZTX0ZTX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorCisjaWZuZGVmIF9fS0VSTkVMX18KK3R5cGVkZWYgX191NjQgX19mczY0OwordHlwZWRlZiBfX3UzMiBfX2ZzMzI7Cit0eXBlZGVmIF9fdTE2IF9fZnMxNjsKKyNlbHNlCit0eXBlZGVmIF9fdTY0IF9fYml0d2lzZSBfX2ZzNjQ7Cit0eXBlZGVmIF9fdTMyIF9fYml0d2lzZSBfX2ZzMzI7Cit0eXBlZGVmIF9fdTE2IF9fYml0d2lzZSBfX2ZzMTY7CisjZW5kaWYKKworI2luY2x1ZGUgPGxpbnV4L3Vmc19mc19pLmg+CisjaW5jbHVkZSA8bGludXgvdWZzX2ZzX3NiLmg+CisKKyNkZWZpbmUgVUZTX0JCTE9DSyAwCisjZGVmaW5lIFVGU19CQlNJWkUgODE5MgorI2RlZmluZSBVRlNfU0JMT0NLIDgxOTIKKyNkZWZpbmUgVUZTX1NCU0laRSA4MTkyCisKKyNkZWZpbmUgVUZTX1NFQ1RPUl9TSVpFIDUxMgorI2RlZmluZSBVRlNfU0VDVE9SX0JJVFMgOQorI2RlZmluZSBVRlNfTUFHSUMgIDB4MDAwMTE5NTQKKyNkZWZpbmUgVUZTMl9NQUdJQyAweDE5NTQwMTE5CisjZGVmaW5lIFVGU19DSUdBTSAgMHg1NDE5MDEwMCAvKiBieXRlc3dhcHBlZCBNQUdJQyAqLworCisvKiBDb3BpZWQgZnJvbSBGcmVlQlNEICovCisvKgorICogRWFjaCBkaXNrIGRyaXZlIGNvbnRhaW5zIHNvbWUgbnVtYmVyIG9mIGZpbGVzeXN0ZW1zLgorICogQSBmaWxlc3lzdGVtIGNvbnNpc3RzIG9mIGEgbnVtYmVyIG9mIGN5bGluZGVyIGdyb3Vwcy4KKyAqIEVhY2ggY3lsaW5kZXIgZ3JvdXAgaGFzIGlub2RlcyBhbmQgZGF0YS4KKyAqCisgKiBBIGZpbGVzeXN0ZW0gaXMgZGVzY3JpYmVkIGJ5IGl0cyBzdXBlci1ibG9jaywgd2hpY2ggaW4gdHVybgorICogZGVzY3JpYmVzIHRoZSBjeWxpbmRlciBncm91cHMuICBUaGUgc3VwZXItYmxvY2sgaXMgY3JpdGljYWwKKyAqIGRhdGEgYW5kIGlzIHJlcGxpY2F0ZWQgaW4gZWFjaCBjeWxpbmRlciBncm91cCB0byBwcm90ZWN0IGFnYWluc3QKKyAqIGNhdGFzdHJvcGhpYyBsb3NzLiAgVGhpcyBpcyBkb25lIGF0IGBuZXdmcycgdGltZSBhbmQgdGhlIGNyaXRpY2FsCisgKiBzdXBlci1ibG9jayBkYXRhIGRvZXMgbm90IGNoYW5nZSwgc28gdGhlIGNvcGllcyBuZWVkIG5vdCBiZQorICogcmVmZXJlbmNlZCBmdXJ0aGVyIHVubGVzcyBkaXNhc3RlciBzdHJpa2VzLgorICoKKyAqIEZvciBmaWxlc3lzdGVtIGZzLCB0aGUgb2Zmc2V0cyBvZiB0aGUgdmFyaW91cyBibG9ja3Mgb2YgaW50ZXJlc3QKKyAqIGFyZSBnaXZlbiBpbiB0aGUgc3VwZXIgYmxvY2sgYXM6CisgKiAgICAgIFtmcy0+ZnNfc2Jsa25vXSAgICAgICAgIFN1cGVyLWJsb2NrCisgKiAgICAgIFtmcy0+ZnNfY2Jsa25vXSAgICAgICAgIEN5bGluZGVyIGdyb3VwIGJsb2NrCisgKiAgICAgIFtmcy0+ZnNfaWJsa25vXSAgICAgICAgIElub2RlIGJsb2NrcworICogICAgICBbZnMtPmZzX2RibGtub10gICAgICAgICBEYXRhIGJsb2NrcworICogVGhlIGJlZ2lubmluZyBvZiBjeWxpbmRlciBncm91cCBjZyBpbiBmcywgaXMgZ2l2ZW4gYnkKKyAqIHRoZSBgYGNnYmFzZShmcywgY2cpJycgbWFjcm8uCisgKgorICogRGVwZW5kaW5nIG9uIHRoZSBhcmNoaXRlY3R1cmUgYW5kIHRoZSBtZWRpYSwgdGhlIHN1cGVyYmxvY2sgbWF5CisgKiByZXNpZGUgaW4gYW55IG9uZSBvZiBmb3VyIHBsYWNlcy4gRm9yIHRpbnkgbWVkaWEgd2hlcmUgZXZlcnkgYmxvY2sKKyAqIGNvdW50cywgaXQgaXMgcGxhY2VkIGF0IHRoZSB2ZXJ5IGZyb250IG9mIHRoZSBwYXJ0aXRpb24uIEhpc3RvcmljYWxseSwKKyAqIFVGUzEgcGxhY2VkIGl0IDhLIGZyb20gdGhlIGZyb250IHRvIGxlYXZlIHJvb20gZm9yIHRoZSBkaXNrIGxhYmVsIGFuZAorICogYSBzbWFsbCBib290c3RyYXAuIEZvciBVRlMyIGl0IGdvdCBtb3ZlZCB0byA2NEsgZnJvbSB0aGUgZnJvbnQgdG8gbGVhdmUKKyAqIHJvb20gZm9yIHRoZSBkaXNrIGxhYmVsIGFuZCBhIGJpZ2dlciBib290c3RyYXAsIGFuZCBmb3IgcmVhbGx5IHBpZ2d5CisgKiBzeXN0ZW1zIHdlIGNoZWNrIGF0IDI1NksgZnJvbSB0aGUgZnJvbnQgaWYgdGhlIGZpcnN0IHRocmVlIGZhaWwuIEluCisgKiBhbGwgY2FzZXMgdGhlIHNpemUgb2YgdGhlIHN1cGVyYmxvY2sgd2lsbCBiZSBTQkxPQ0tTSVpFLiBBbGwgdmFsdWVzIGFyZQorICogZ2l2ZW4gaW4gYnl0ZS1vZmZzZXQgZm9ybSwgc28gdGhleSBkbyBub3QgaW1wbHkgYSBzZWN0b3Igc2l6ZS4gVGhlCisgKiBTQkxPQ0tTRUFSQ0ggc3BlY2lmaWVzIHRoZSBvcmRlciBpbiB3aGljaCB0aGUgbG9jYXRpb25zIHNob3VsZCBiZSBzZWFyY2hlZC4KKyAqLworI2RlZmluZSBTQkxPQ0tfRkxPUFBZICAgICAgICAwCisjZGVmaW5lIFNCTE9DS19VRlMxICAgICAgIDgxOTIKKyNkZWZpbmUgU0JMT0NLX1VGUzIgICAgICA2NTUzNgorI2RlZmluZSBTQkxPQ0tfUElHR1kgICAgMjYyMTQ0CisjZGVmaW5lIFNCTE9DS1NJWkUgICAgICAgIDgxOTIKKyNkZWZpbmUgU0JMT0NLU0VBUkNIIFwKKyAgICAgICAgeyBTQkxPQ0tfVUZTMiwgU0JMT0NLX1VGUzEsIFNCTE9DS19GTE9QUFksIFNCTE9DS19QSUdHWSwgLTEgfQorCisKKy8qIEhQIHNwZWNpZmljIE1BR0lDIHZhbHVlcyAqLworCisjZGVmaW5lIFVGU19NQUdJQ19MRk4gICAweDAwMDk1MDE0IC8qIGZzIHN1cHBvcnRzIGZpbGVuYW1lcyA+IDE0IGNoYXJzICovCisjZGVmaW5lIFVGU19DSUdBTV9MRk4gICAweDE0NTAwOTAwIC8qIHNyYWhjIDQxIDwgc2VtYW5lbGlmIHN0cm9wcHVzIHNmICovCisKKyNkZWZpbmUgVUZTX01BR0lDX1NFQyAgIDB4MDA2MTIxOTUgLyogQjEgc2VjdXJpdHkgZnMgKi8KKyNkZWZpbmUgVUZTX0NJR0FNX1NFQyAgIDB4OTUyMTYxMDAKKworI2RlZmluZSBVRlNfTUFHSUNfRkVBICAgMHgwMDE5NTYxMiAvKiBmc19mZWF0dXJlYml0cyBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUgVUZTX0NJR0FNX0ZFQSAgIDB4MTI1NjE5MDAKKworI2RlZmluZSBVRlNfTUFHSUNfNEdCICAgMHgwNTIzMTk5NCAvKiBmcyA+IDQgR0IgJiYgZnNfZmVhdHVyZWJpdHMgKi8KKyNkZWZpbmUgVUZTX0NJR0FNXzRHQiAgIDB4OTQxOTIzMDUKKworLyogU2VlbXMgc29tZWJvZHkgYXQgSFAgZ29vZmVkIGhlcmUuIEIxIGFuZCBsZnMgYXJlIGJvdGggMHgyICE/ISAqLworI2RlZmluZSBVRlNfRlNGX0xGTiAgICAgMHgwMDAwMDAwMSAvKiBsb25nIGZpbGUgbmFtZXMgKi8KKyNkZWZpbmUgVUZTX0ZTRl9CMSAgICAgIDB4MDAwMDAwMDIgLyogQjEgc2VjdXJpdHkgKi8KKyNkZWZpbmUgVUZTX0ZTRl9MRlMgICAgIDB4MDAwMDAwMDIgLyogbGFyZ2UgZmlsZXMgKi8KKyNkZWZpbmUgVUZTX0ZTRl9MVUlEICAgIDB4MDAwMDAwMDQgLyogbGFyZ2UgVUlEcyAqLworCisvKiBFbmQgb2YgSFAgc3R1ZmYgKi8KKworCisjZGVmaW5lIFVGU19CU0laRQk4MTkyCisjZGVmaW5lIFVGU19NSU5CU0laRQk0MDk2CisjZGVmaW5lIFVGU19GU0laRQkxMDI0CisjZGVmaW5lIFVGU19NQVhGUkFHCShVRlNfQlNJWkUgLyBVRlNfRlNJWkUpCisKKyNkZWZpbmUgVUZTX05EQUREUiAxMgorI2RlZmluZSBVRlNfTklORElSIDMKKworI2RlZmluZSBVRlNfSU5EX0JMT0NLCShVRlNfTkRBRERSICsgMCkKKyNkZWZpbmUgVUZTX0RJTkRfQkxPQ0sJKFVGU19OREFERFIgKyAxKQorI2RlZmluZSBVRlNfVElORF9CTE9DSwkoVUZTX05EQUREUiArIDIpCisKKyNkZWZpbmUgVUZTX05ESVJfRlJBR01FTlQgKFVGU19OREFERFIgPDwgdXNwaS0+c19mcGJzaGlmdCkKKyNkZWZpbmUgVUZTX0lORF9GUkFHTUVOVCAoVUZTX0lORF9CTE9DSyA8PCB1c3BpLT5zX2ZwYnNoaWZ0KQorI2RlZmluZSBVRlNfRElORF9GUkFHTUVOVCAoVUZTX0RJTkRfQkxPQ0sgPDwgdXNwaS0+c19mcGJzaGlmdCkKKyNkZWZpbmUgVUZTX1RJTkRfRlJBR01FTlQgKFVGU19USU5EX0JMT0NLIDw8IHVzcGktPnNfZnBic2hpZnQpCisKKyNkZWZpbmUgVUZTX1JPT1RJTk8gMgorI2RlZmluZSBVRlNfRklSU1RfSU5PIChVRlNfUk9PVElOTyArIDEpCisKKyNkZWZpbmUgVUZTX1VTRUVGVCAgKChfX3UxNik2NTUzNSkKKworI2RlZmluZSBVRlNfRlNPSyAgICAgIDB4N2MyNjlkMzgKKyNkZWZpbmUgVUZTX0ZTQUNUSVZFICAoKGNoYXIpMHgwMCkKKyNkZWZpbmUgVUZTX0ZTQ0xFQU4gICAoKGNoYXIpMHgwMSkKKyNkZWZpbmUgVUZTX0ZTU1RBQkxFICAoKGNoYXIpMHgwMikKKyNkZWZpbmUgVUZTX0ZTT1NGMSAgICAoKGNoYXIpMHgwMykJLyogaXMgdGhpcyBjb3JyZWN0IGZvciBERUMgT1NGLzE/ICovCisjZGVmaW5lIFVGU19GU0JBRCAgICAgKChjaGFyKTB4ZmYpCisKKy8qIEZyb20gaGVyZSB0byBuZXh0IGJsYW5rIGxpbmUsIHNfZmxhZ3MgZm9yIHVmc19zYl9pbmZvICovCisvKiBkaXJlY3RvcnkgZW50cnkgZW5jb2RpbmcgKi8KKyNkZWZpbmUgVUZTX0RFX01BU0sJCTB4MDAwMDAwMTAJLyogbWFzayBmb3IgdGhlIGZvbGxvd2luZyAqLworI2RlZmluZSBVRlNfREVfT0xECQkweDAwMDAwMDAwCisjZGVmaW5lIFVGU19ERV80NEJTRAkJMHgwMDAwMDAxMAorLyogdWlkIGVuY29kaW5nICovCisjZGVmaW5lIFVGU19VSURfTUFTSwkJMHgwMDAwMDA2MAkvKiBtYXNrIGZvciB0aGUgZm9sbG93aW5nICovCisjZGVmaW5lIFVGU19VSURfT0xECQkweDAwMDAwMDAwCisjZGVmaW5lIFVGU19VSURfNDRCU0QJCTB4MDAwMDAwMjAKKyNkZWZpbmUgVUZTX1VJRF9FRlQJCTB4MDAwMDAwNDAKKy8qIHN1cGVyYmxvY2sgc3RhdGUgZW5jb2RpbmcgKi8KKyNkZWZpbmUgVUZTX1NUX01BU0sJCTB4MDAwMDA3MDAJLyogbWFzayBmb3IgdGhlIGZvbGxvd2luZyAqLworI2RlZmluZSBVRlNfU1RfT0xECQkweDAwMDAwMDAwCisjZGVmaW5lIFVGU19TVF80NEJTRAkJMHgwMDAwMDEwMAorI2RlZmluZSBVRlNfU1RfU1VOCQkweDAwMDAwMjAwCisjZGVmaW5lIFVGU19TVF9TVU54ODYJCTB4MDAwMDA0MDAKKy8qY3lsaW5kZXIgZ3JvdXAgZW5jb2RpbmcgKi8KKyNkZWZpbmUgVUZTX0NHX01BU0sJCTB4MDAwMDMwMDAJLyogbWFzayBmb3IgdGhlIGZvbGxvd2luZyAqLworI2RlZmluZSBVRlNfQ0dfT0xECQkweDAwMDAwMDAwCisjZGVmaW5lIFVGU19DR180NEJTRAkJMHgwMDAwMjAwMAorI2RlZmluZSBVRlNfQ0dfU1VOCQkweDAwMDAxMDAwCisvKiBmaWxlc3lzdGVtIHR5cGUgZW5jb2RpbmcgKi8KKyNkZWZpbmUgVUZTX1RZUEVfTUFTSwkJMHgwMDAxMDAwMAkvKiBtYXNrIGZvciB0aGUgZm9sbG93aW5nICovCisjZGVmaW5lIFVGU19UWVBFX1VGUzEJCTB4MDAwMDAwMDAKKyNkZWZpbmUgVUZTX1RZUEVfVUZTMgkJMHgwMDAxMDAwMAorCisKKy8qIGZzX2lub2RlZm10IG9wdGlvbnMgKi8KKyNkZWZpbmUgVUZTXzQySU5PREVGTVQJLTEKKyNkZWZpbmUgVUZTXzQ0SU5PREVGTVQJMgorCisvKiBtb3VudCBvcHRpb25zICovCisjZGVmaW5lIFVGU19NT1VOVF9PTkVSUk9SCQkweDAwMDAwMDBGCisjZGVmaW5lIFVGU19NT1VOVF9PTkVSUk9SX1BBTklDCQkweDAwMDAwMDAxCisjZGVmaW5lIFVGU19NT1VOVF9PTkVSUk9SX0xPQ0sJCTB4MDAwMDAwMDIKKyNkZWZpbmUgVUZTX01PVU5UX09ORVJST1JfVU1PVU5UCTB4MDAwMDAwMDQKKyNkZWZpbmUgVUZTX01PVU5UX09ORVJST1JfUkVQQUlSCTB4MDAwMDAwMDgKKworI2RlZmluZSBVRlNfTU9VTlRfVUZTVFlQRQkJMHgwMDAwRkZGMAorI2RlZmluZSBVRlNfTU9VTlRfVUZTVFlQRV9PTEQJCTB4MDAwMDAwMTAKKyNkZWZpbmUgVUZTX01PVU5UX1VGU1RZUEVfNDRCU0QJCTB4MDAwMDAwMjAKKyNkZWZpbmUgVUZTX01PVU5UX1VGU1RZUEVfU1VOCQkweDAwMDAwMDQwCisjZGVmaW5lIFVGU19NT1VOVF9VRlNUWVBFX05FWFRTVEVQCTB4MDAwMDAwODAKKyNkZWZpbmUgVUZTX01PVU5UX1VGU1RZUEVfTkVYVFNURVBfQ0QJMHgwMDAwMDEwMAorI2RlZmluZSBVRlNfTU9VTlRfVUZTVFlQRV9PUEVOU1RFUAkweDAwMDAwMjAwCisjZGVmaW5lIFVGU19NT1VOVF9VRlNUWVBFX1NVTng4NgkweDAwMDAwNDAwCisjZGVmaW5lIFVGU19NT1VOVF9VRlNUWVBFX0hQCSAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBVRlNfTU9VTlRfVUZTVFlQRV9VRlMyCQkweDAwMDAxMDAwCisKKyNkZWZpbmUgdWZzX2NsZWFyX29wdChvLG9wdCkJbyAmPSB+VUZTX01PVU5UXyMjb3B0CisjZGVmaW5lIHVmc19zZXRfb3B0KG8sb3B0KQlvIHw9IFVGU19NT1VOVF8jI29wdAorI2RlZmluZSB1ZnNfdGVzdF9vcHQobyxvcHQpCSgobykgJiBVRlNfTU9VTlRfIyNvcHQpCisKKy8qCisgKiBNSU5GUkVFIGdpdmVzIHRoZSBtaW5pbXVtIGFjY2VwdGFibGUgcGVyY2VudGFnZSBvZiBmaWxlIHN5c3RlbQorICogYmxvY2tzIHdoaWNoIG1heSBiZSBmcmVlLiBJZiB0aGUgZnJlZWxpc3QgZHJvcHMgYmVsb3cgdGhpcyBsZXZlbAorICogb25seSB0aGUgc3VwZXJ1c2VyIG1heSBjb250aW51ZSB0byBhbGxvY2F0ZSBibG9ja3MuIFRoaXMgbWF5CisgKiBiZSBzZXQgdG8gMCBpZiBubyByZXNlcnZlIG9mIGZyZWUgYmxvY2tzIGlzIGRlZW1lZCBuZWNlc3NhcnksCisgKiBob3dldmVyIHRocm91Z2hwdXQgZHJvcHMgYnkgZmlmdHkgcGVyY2VudCBpZiB0aGUgZmlsZSBzeXN0ZW0KKyAqIGlzIHJ1biBhdCBiZXR3ZWVuIDk1JSBhbmQgMTAwJSBmdWxsOyB0aHVzIHRoZSBtaW5pbXVtIGRlZmF1bHQKKyAqIHZhbHVlIG9mIGZzX21pbmZyZWUgaXMgNSUuIEhvd2V2ZXIsIHRvIGdldCBnb29kIGNsdXN0ZXJpbmcKKyAqIHBlcmZvcm1hbmNlLCAxMCUgaXMgYSBiZXR0ZXIgY2hvaWNlLiBoZW5jZSB3ZSB1c2UgMTAlIGFzIG91cgorICogZGVmYXVsdCB2YWx1ZS4gV2l0aCAxMCUgZnJlZSBzcGFjZSwgZnJhZ21lbnRhdGlvbiBpcyBub3QgYQorICogcHJvYmxlbSwgc28gd2UgY2hvb3NlIHRvIG9wdGltaXplIGZvciB0aW1lLgorICovCisjZGVmaW5lIFVGU19NSU5GUkVFICAgICAgICAgNQorI2RlZmluZSBVRlNfREVGQVVMVE9QVCAgICAgIFVGU19PUFRUSU1FCisgICAgICAgICAgICAKKy8qCisgKiBUdXJuIGZpbGUgc3lzdGVtIGJsb2NrIG51bWJlcnMgaW50byBkaXNrIGJsb2NrIGFkZHJlc3Nlcy4KKyAqIFRoaXMgbWFwcyBmaWxlIHN5c3RlbSBibG9ja3MgdG8gZGV2aWNlIHNpemUgYmxvY2tzLgorICovCisjZGVmaW5lIHVmc19mc2J0b2RiKHVzcGksIGIpCSgoYikgPDwgKHVzcGkpLT5zX2ZzYnRvZGIpCisjZGVmaW5lCXVmc19kYnRvZnNiKHVzcGksIGIpCSgoYikgPj4gKHVzcGkpLT5zX2ZzYnRvZGIpCisKKy8qCisgKiBDeWxpbmRlciBncm91cCBtYWNyb3MgdG8gbG9jYXRlIHRoaW5ncyBpbiBjeWxpbmRlciBncm91cHMuCisgKiBUaGV5IGNhbGMgZmlsZSBzeXN0ZW0gYWRkcmVzc2VzIG9mIGN5bGluZGVyIGdyb3VwIGRhdGEgc3RydWN0dXJlcy4KKyAqLworI2RlZmluZQl1ZnNfY2diYXNlKGMpCSh1c3BpLT5zX2ZwZyAqIChjKSkKKyNkZWZpbmUgdWZzX2Nnc3RhcnQoYykJKCh1c3BpKS0+ZnNfbWFnaWMgPT0gVUZTMl9NQUdJQyA/ICB1ZnNfY2diYXNlKGMpIDogXAorCSh1ZnNfY2diYXNlKGMpICArIHVzcGktPnNfY2dvZmZzZXQgKiAoKGMpICYgfnVzcGktPnNfY2dtYXNrKSkpCisjZGVmaW5lCXVmc19jZ3NibG9jayhjKQkodWZzX2Nnc3RhcnQoYykgKyB1c3BpLT5zX3NibGtubykJLyogc3VwZXIgYmxrICovCisjZGVmaW5lCXVmc19jZ2NtaW4oYykJKHVmc19jZ3N0YXJ0KGMpICsgdXNwaS0+c19jYmxrbm8pCS8qIGNnIGJsb2NrICovCisjZGVmaW5lCXVmc19jZ2ltaW4oYykJKHVmc19jZ3N0YXJ0KGMpICsgdXNwaS0+c19pYmxrbm8pCS8qIGlub2RlIGJsayAqLworI2RlZmluZQl1ZnNfY2dkbWluKGMpCSh1ZnNfY2dzdGFydChjKSArIHVzcGktPnNfZGJsa25vKQkvKiAxc3QgZGF0YSAqLworCisvKgorICogTWFjcm9zIGZvciBoYW5kbGluZyBpbm9kZSBudW1iZXJzOgorICogICAgIGlub2RlIG51bWJlciB0byBmaWxlIHN5c3RlbSBibG9jayBvZmZzZXQuCisgKiAgICAgaW5vZGUgbnVtYmVyIHRvIGN5bGluZGVyIGdyb3VwIG51bWJlci4KKyAqICAgICBpbm9kZSBudW1iZXIgdG8gZmlsZSBzeXN0ZW0gYmxvY2sgYWRkcmVzcy4KKyAqLworI2RlZmluZQl1ZnNfaW5vdG9jZyh4KQkJKCh4KSAvIHVzcGktPnNfaXBnKQorI2RlZmluZQl1ZnNfaW5vdG9jZ29mZih4KQkoKHgpICUgdXNwaS0+c19pcGcpCisjZGVmaW5lCXVmc19pbm90b2ZzYmEoeCkJKHVmc19jZ2ltaW4odWZzX2lub3RvY2coeCkpICsgdWZzX2lub3RvY2dvZmYoeCkgLyB1c3BpLT5zX2lub3BmKQorI2RlZmluZQl1ZnNfaW5vdG9mc2JvKHgpCSgoeCkgJSB1c3BpLT5zX2lub3BmKQorCisvKgorICogR2l2ZSBjeWxpbmRlciBncm91cCBudW1iZXIgZm9yIGEgZmlsZSBzeXN0ZW0gYmxvY2suCisgKiBHaXZlIGN5bGluZGVyIGdyb3VwIGJsb2NrIG51bWJlciBmb3IgYSBmaWxlIHN5c3RlbSBibG9jay4KKyAqLworI2RlZmluZQl1ZnNfZHRvZyhkKQkoKGQpIC8gdXNwaS0+c19mcGcpCisjZGVmaW5lCXVmc19kdG9nZChkKQkoKGQpICUgdXNwaS0+c19mcGcpCisKKy8qCisgKiBDb21wdXRlIHRoZSBjeWxpbmRlciBhbmQgcm90YXRpb25hbCBwb3NpdGlvbiBvZiBhIGN5bCBibG9jayBhZGRyLgorICovCisjZGVmaW5lIHVmc19jYnRvY3lsbm8oYm5vKSBcCisJKChibm8pICogdXNwaS0+c19uc3BmIC8gdXNwaS0+c19zcGMpCisjZGVmaW5lIHVmc19jYnRvcnBvcyhibm8pIFwKKwkoKCgoYm5vKSAqIHVzcGktPnNfbnNwZiAlIHVzcGktPnNfc3BjIC8gdXNwaS0+c19uc2VjdCBcCisJKiB1c3BpLT5zX3RyYWNrc2tldyArIChibm8pICogdXNwaS0+c19uc3BmICUgdXNwaS0+c19zcGMgXAorCSUgdXNwaS0+c19uc2VjdCAqIHVzcGktPnNfaW50ZXJsZWF2ZSkgJSB1c3BpLT5zX25zZWN0IFwKKwkqIHVzcGktPnNfbnJwb3MpIC8gdXNwaS0+c19ucHNlY3QpCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIG1hY3JvcyBvcHRpbWl6ZSBjZXJ0YWluIGZyZXF1ZW50bHkgY2FsY3VsYXRlZAorICogcXVhbnRpdGllcyBieSB1c2luZyBzaGlmdHMgYW5kIG1hc2tzIGluIHBsYWNlIG9mIGRpdmlzaW9ucworICogbW9kdWxvcyBhbmQgbXVsdGlwbGljYXRpb25zLgorICovCisjZGVmaW5lIHVmc19ibGtvZmYobG9jKQkJKChsb2MpICYgdXNwaS0+c19xYm1hc2spCisjZGVmaW5lIHVmc19mcmFnb2ZmKGxvYykJKChsb2MpICYgdXNwaS0+c19xZm1hc2spCisjZGVmaW5lIHVmc19sYmxrdG9zaXplKGJsaykJKChibGspIDw8IHVzcGktPnNfYnNoaWZ0KQorI2RlZmluZSB1ZnNfbGJsa25vKGxvYykJCSgobG9jKSA+PiB1c3BpLT5zX2JzaGlmdCkKKyNkZWZpbmUgdWZzX251bWZyYWdzKGxvYykJKChsb2MpID4+IHVzcGktPnNfZnNoaWZ0KQorI2RlZmluZSB1ZnNfYmxrcm91bmR1cChzaXplKQkoKChzaXplKSArIHVzcGktPnNfcWJtYXNrKSAmIHVzcGktPnNfYm1hc2spCisjZGVmaW5lIHVmc19mcmFncm91bmR1cChzaXplKQkoKChzaXplKSArIHVzcGktPnNfcWZtYXNrKSAmIHVzcGktPnNfZm1hc2spCisjZGVmaW5lIHVmc19mcmFnc3RvYmxrcyhmcmFncykJKChmcmFncykgPj4gdXNwaS0+c19mcGJzaGlmdCkKKyNkZWZpbmUgdWZzX2Jsa3N0b2ZyYWdzKGJsa3MpCSgoYmxrcykgPDwgdXNwaS0+c19mcGJzaGlmdCkKKyNkZWZpbmUgdWZzX2ZyYWdudW0oZnNiKQkoKGZzYikgJiB1c3BpLT5zX2ZwYm1hc2spCisjZGVmaW5lIHVmc19ibGtudW0oZnNiKQkJKChmc2IpICYgfnVzcGktPnNfZnBibWFzaykKKworI2RlZmluZQlVRlNfTUFYTkFNTEVOIDI1NQorI2RlZmluZSBVRlNfTUFYTU5UTEVOIDUxMgorI2RlZmluZSBVRlMyX01BWE1OVExFTiA0NjgKKyNkZWZpbmUgVUZTMl9NQVhWT0xMRU4gMzIKKy8qICNkZWZpbmUgVUZTX01BWENTQlVGUyAzMSAqLworI2RlZmluZSBVRlNfTElOS19NQVggMzIwMDAKKy8qCisjZGVmaW5lCVVGUzJfTk9DU1BUUlMJKCgxMjggLyBzaXplb2Yodm9pZCAqKSkgLSA0KQorKi8KKyNkZWZpbmUJVUZTMl9OT0NTUFRSUwkyOAorCisvKgorICogVUZTX0RJUl9QQUQgZGVmaW5lcyB0aGUgZGlyZWN0b3J5IGVudHJpZXMgYm91bmRhcmllcworICogKG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0KQorICovCisjZGVmaW5lIFVGU19ESVJfUEFECQkJNAorI2RlZmluZSBVRlNfRElSX1JPVU5ECQkJKFVGU19ESVJfUEFEIC0gMSkKKyNkZWZpbmUgVUZTX0RJUl9SRUNfTEVOKG5hbWVfbGVuKQkoKChuYW1lX2xlbikgKyAxICsgOCArIFVGU19ESVJfUk9VTkQpICYgflVGU19ESVJfUk9VTkQpCisKK3N0cnVjdCB1ZnNfdGltZXZhbCB7CisJX19mczMyCXR2X3NlYzsKKwlfX2ZzMzIJdHZfdXNlYzsKK307CisKK3N0cnVjdCB1ZnNfZGlyX2VudHJ5IHsKKwlfX2ZzMzIgIGRfaW5vOwkJCS8qIGlub2RlIG51bWJlciBvZiB0aGlzIGVudHJ5ICovCisJX19mczE2ICBkX3JlY2xlbjsJCS8qIGxlbmd0aCBvZiB0aGlzIGVudHJ5ICovCisJdW5pb24geworCQlfX2ZzMTYJZF9uYW1sZW47CQkvKiBhY3R1YWwgbGVuZ3RoIG9mIGRfbmFtZSAqLworCQlzdHJ1Y3QgeworCQkJX191OAlkX3R5cGU7CQkvKiBmaWxlIHR5cGUgKi8KKwkJCV9fdTgJZF9uYW1sZW47CS8qIGxlbmd0aCBvZiBzdHJpbmcgaW4gZF9uYW1lICovCisJCX0gZF80NDsKKwl9IGRfdTsKKwlfX3U4CWRfbmFtZVtVRlNfTUFYTkFNTEVOICsgMV07CS8qIGZpbGUgbmFtZSAqLworfTsKKworc3RydWN0IHVmc19jc3VtIHsKKwlfX2ZzMzIJY3NfbmRpcjsJLyogbnVtYmVyIG9mIGRpcmVjdG9yaWVzICovCisJX19mczMyCWNzX25iZnJlZTsJLyogbnVtYmVyIG9mIGZyZWUgYmxvY2tzICovCisJX19mczMyCWNzX25pZnJlZTsJLyogbnVtYmVyIG9mIGZyZWUgaW5vZGVzICovCisJX19mczMyCWNzX25mZnJlZTsJLyogbnVtYmVyIG9mIGZyZWUgZnJhZ3MgKi8KK307CitzdHJ1Y3QgdWZzMl9jc3VtX3RvdGFsIHsKKwlfX2ZzNjQJY3NfbmRpcjsJLyogbnVtYmVyIG9mIGRpcmVjdG9yaWVzICovCisJX19mczY0CWNzX25iZnJlZTsJLyogbnVtYmVyIG9mIGZyZWUgYmxvY2tzICovCisJX19mczY0CWNzX25pZnJlZTsJLyogbnVtYmVyIG9mIGZyZWUgaW5vZGVzICovCisJX19mczY0CWNzX25mZnJlZTsJLyogbnVtYmVyIG9mIGZyZWUgZnJhZ3MgKi8KKwlfX2ZzNjQgICBjc19udW1jbHVzdGVyczsJLyogbnVtYmVyIG9mIGZyZWUgY2x1c3RlcnMgKi8KKwlfX2ZzNjQgICBjc19zcGFyZVszXTsJLyogZnV0dXJlIGV4cGFuc2lvbiAqLworfTsKKworLyoKKyAqIFRoaXMgaXMgdGhlIGFjdHVhbCBzdXBlcmJsb2NrLCBhcyBpdCBpcyBsYWlkIG91dCBvbiB0aGUgZGlzay4KKyAqLworc3RydWN0IHVmc19zdXBlcl9ibG9jayB7CisJX19mczMyCWZzX2xpbms7CS8qIFVOVVNFRCAqLworCV9fZnMzMglmc19ybGluazsJLyogVU5VU0VEICovCisJX19mczMyCWZzX3NibGtubzsJLyogYWRkciBvZiBzdXBlci1ibG9jayBpbiBmaWxlc3lzICovCisJX19mczMyCWZzX2NibGtubzsJLyogb2Zmc2V0IG9mIGN5bC1ibG9jayBpbiBmaWxlc3lzICovCisJX19mczMyCWZzX2libGtubzsJLyogb2Zmc2V0IG9mIGlub2RlLWJsb2NrcyBpbiBmaWxlc3lzICovCisJX19mczMyCWZzX2RibGtubzsJLyogb2Zmc2V0IG9mIGZpcnN0IGRhdGEgYWZ0ZXIgY2cgKi8KKwlfX2ZzMzIJZnNfY2dvZmZzZXQ7CS8qIGN5bGluZGVyIGdyb3VwIG9mZnNldCBpbiBjeWxpbmRlciAqLworCV9fZnMzMglmc19jZ21hc2s7CS8qIHVzZWQgdG8gY2FsYyBtb2QgZnNfbnRyYWsgKi8KKwlfX2ZzMzIJZnNfdGltZTsJLyogbGFzdCB0aW1lIHdyaXR0ZW4gLS0gdGltZV90ICovCisJX19mczMyCWZzX3NpemU7CS8qIG51bWJlciBvZiBibG9ja3MgaW4gZnMgKi8KKwlfX2ZzMzIJZnNfZHNpemU7CS8qIG51bWJlciBvZiBkYXRhIGJsb2NrcyBpbiBmcyAqLworCV9fZnMzMglmc19uY2c7CQkvKiBudW1iZXIgb2YgY3lsaW5kZXIgZ3JvdXBzICovCisJX19mczMyCWZzX2JzaXplOwkvKiBzaXplIG9mIGJhc2ljIGJsb2NrcyBpbiBmcyAqLworCV9fZnMzMglmc19mc2l6ZTsJLyogc2l6ZSBvZiBmcmFnIGJsb2NrcyBpbiBmcyAqLworCV9fZnMzMglmc19mcmFnOwkvKiBudW1iZXIgb2YgZnJhZ3MgaW4gYSBibG9jayBpbiBmcyAqLworLyogdGhlc2UgYXJlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyAqLworCV9fZnMzMglmc19taW5mcmVlOwkvKiBtaW5pbXVtIHBlcmNlbnRhZ2Ugb2YgZnJlZSBibG9ja3MgKi8KKwlfX2ZzMzIJZnNfcm90ZGVsYXk7CS8qIG51bSBvZiBtcyBmb3Igb3B0aW1hbCBuZXh0IGJsb2NrICovCisJX19mczMyCWZzX3JwczsJCS8qIGRpc2sgcmV2b2x1dGlvbnMgcGVyIHNlY29uZCAqLworLyogdGhlc2UgZmllbGRzIGNhbiBiZSBjb21wdXRlZCBmcm9tIHRoZSBvdGhlcnMgKi8KKwlfX2ZzMzIJZnNfYm1hc2s7CS8qIGBgYmxrb2ZmJycgY2FsYyBvZiBibGsgb2Zmc2V0cyAqLworCV9fZnMzMglmc19mbWFzazsJLyogYGBmcmFnb2ZmJycgY2FsYyBvZiBmcmFnIG9mZnNldHMgKi8KKwlfX2ZzMzIJZnNfYnNoaWZ0OwkvKiBgYGxibGtubycnIGNhbGMgb2YgbG9naWNhbCBibGtubyAqLworCV9fZnMzMglmc19mc2hpZnQ7CS8qIGBgbnVtZnJhZ3MnJyBjYWxjIG51bWJlciBvZiBmcmFncyAqLworLyogdGhlc2UgYXJlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyAqLworCV9fZnMzMglmc19tYXhjb250aWc7CS8qIG1heCBudW1iZXIgb2YgY29udGlndW91cyBibGtzICovCisJX19mczMyCWZzX21heGJwZzsJLyogbWF4IG51bWJlciBvZiBibGtzIHBlciBjeWwgZ3JvdXAgKi8KKy8qIHRoZXNlIGZpZWxkcyBjYW4gYmUgY29tcHV0ZWQgZnJvbSB0aGUgb3RoZXJzICovCisJX19mczMyCWZzX2ZyYWdzaGlmdDsJLyogYmxvY2sgdG8gZnJhZyBzaGlmdCAqLworCV9fZnMzMglmc19mc2J0b2RiOwkvKiBmc2J0b2RiIGFuZCBkYnRvZnNiIHNoaWZ0IGNvbnN0YW50ICovCisJX19mczMyCWZzX3Nic2l6ZTsJLyogYWN0dWFsIHNpemUgb2Ygc3VwZXIgYmxvY2sgKi8KKwlfX2ZzMzIJZnNfY3NtYXNrOwkvKiBjc3VtIGJsb2NrIG9mZnNldCAqLworCV9fZnMzMglmc19jc3NoaWZ0OwkvKiBjc3VtIGJsb2NrIG51bWJlciAqLworCV9fZnMzMglmc19uaW5kaXI7CS8qIHZhbHVlIG9mIE5JTkRJUiAqLworCV9fZnMzMglmc19pbm9wYjsJLyogdmFsdWUgb2YgSU5PUEIgKi8KKwlfX2ZzMzIJZnNfbnNwZjsJLyogdmFsdWUgb2YgTlNQRiAqLworLyogeWV0IGFub3RoZXIgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgKi8KKwlfX2ZzMzIJZnNfb3B0aW07CS8qIG9wdGltaXphdGlvbiBwcmVmZXJlbmNlLCBzZWUgYmVsb3cgKi8KKy8qIHRoZXNlIGZpZWxkcyBhcmUgZGVyaXZlZCBmcm9tIHRoZSBoYXJkd2FyZSAqLworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCV9fZnMzMglmc19ucHNlY3Q7CS8qICMgc2VjdG9ycy90cmFjayBpbmNsdWRpbmcgc3BhcmVzICovCisJCX0gZnNfc3VuOworCQlzdHJ1Y3QgeworCQkJX19mczMyCWZzX3N0YXRlOwkvKiBmaWxlIHN5c3RlbSBzdGF0ZSB0aW1lIHN0YW1wICovCisJCX0gZnNfc3VueDg2OworCX0gZnNfdTE7CisJX19mczMyCWZzX2ludGVybGVhdmU7CS8qIGhhcmR3YXJlIHNlY3RvciBpbnRlcmxlYXZlICovCisJX19mczMyCWZzX3RyYWNrc2tldzsJLyogc2VjdG9yIDAgc2tldywgcGVyIHRyYWNrICovCisvKiBhIHVuaXF1ZSBpZCBmb3IgdGhpcyBmaWxlc3lzdGVtIChjdXJyZW50bHkgdW51c2VkIGFuZCB1bm1haW50YWluZWQpICovCisvKiBJbiA0LjMgVGFob2UgdGhpcyBzcGFjZSBpcyB1c2VkIGJ5IGZzX2hlYWRzd2l0Y2ggYW5kIGZzX3Rya3NlZWsgKi8KKy8qIE5laXRoZXIgb2YgdGhvc2UgZmllbGRzIGlzIHVzZWQgaW4gdGhlIFRhaG9lIGNvZGUgcmlnaHQgbm93IGJ1dCAqLworLyogdGhlcmUgY291bGQgYmUgcHJvYmxlbXMgaWYgdGhleSBhcmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJX19mczMyCWZzX2lkWzJdOwkvKiBmaWxlIHN5c3RlbSBpZCAqLworLyogc2l6ZXMgZGV0ZXJtaW5lZCBieSBudW1iZXIgb2YgY3lsaW5kZXIgZ3JvdXBzIGFuZCB0aGVpciBzaXplcyAqLworCV9fZnMzMglmc19jc2FkZHI7CS8qIGJsayBhZGRyIG9mIGN5bCBncnAgc3VtbWFyeSBhcmVhICovCisJX19mczMyCWZzX2Nzc2l6ZTsJLyogc2l6ZSBvZiBjeWwgZ3JwIHN1bW1hcnkgYXJlYSAqLworCV9fZnMzMglmc19jZ3NpemU7CS8qIGN5bGluZGVyIGdyb3VwIHNpemUgKi8KKy8qIHRoZXNlIGZpZWxkcyBhcmUgZGVyaXZlZCBmcm9tIHRoZSBoYXJkd2FyZSAqLworCV9fZnMzMglmc19udHJhazsJLyogdHJhY2tzIHBlciBjeWxpbmRlciAqLworCV9fZnMzMglmc19uc2VjdDsJLyogc2VjdG9ycyBwZXIgdHJhY2sgKi8KKwlfX2ZzMzIJZnNfc3BjOwkJLyogc2VjdG9ycyBwZXIgY3lsaW5kZXIgKi8KKy8qIHRoaXMgY29tZXMgZnJvbSB0aGUgZGlzayBkcml2ZXIgcGFydGl0aW9uaW5nICovCisJX19mczMyCWZzX25jeWw7CS8qIGN5bGluZGVycyBpbiBmaWxlIHN5c3RlbSAqLworLyogdGhlc2UgZmllbGRzIGNhbiBiZSBjb21wdXRlZCBmcm9tIHRoZSBvdGhlcnMgKi8KKwlfX2ZzMzIJZnNfY3BnOwkJLyogY3lsaW5kZXJzIHBlciBncm91cCAqLworCV9fZnMzMglmc19pcGc7CQkvKiBpbm9kZXMgcGVyIGN5bGluZGVyIGdyb3VwICovCisJX19mczMyCWZzX2ZwZzsJCS8qIGJsb2NrcyBwZXIgZ3JvdXAgKiBmc19mcmFnICovCisvKiB0aGlzIGRhdGEgbXVzdCBiZSByZS1jb21wdXRlZCBhZnRlciBjcmFzaGVzICovCisJc3RydWN0IHVmc19jc3VtIGZzX2NzdG90YWw7CS8qIGN5bGluZGVyIHN1bW1hcnkgaW5mb3JtYXRpb24gKi8KKy8qIHRoZXNlIGZpZWxkcyBhcmUgY2xlYXJlZCBhdCBtb3VudCB0aW1lICovCisJX19zOAlmc19mbW9kOwkvKiBzdXBlciBibG9jayBtb2RpZmllZCBmbGFnICovCisJX19zOAlmc19jbGVhbjsJLyogZmlsZSBzeXN0ZW0gaXMgY2xlYW4gZmxhZyAqLworCV9fczgJZnNfcm9ubHk7CS8qIG1vdW50ZWQgcmVhZC1vbmx5IGZsYWcgKi8KKwlfX3M4CWZzX2ZsYWdzOwkvKiBjdXJyZW50bHkgdW51c2VkIGZsYWcgKi8KKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQlfX3M4CWZzX2ZzbW50W1VGU19NQVhNTlRMRU5dOy8qIG5hbWUgbW91bnRlZCBvbiAqLworCQkJX19mczMyCWZzX2Nncm90b3I7CS8qIGxhc3QgY2cgc2VhcmNoZWQgKi8KKwkJCV9fZnMzMglmc19jc3BbVUZTX01BWENTQlVGU107LypsaXN0IG9mIGZzX2NzIGluZm8gYnVmZmVycyAqLworCQkJX19mczMyCWZzX21heGNsdXN0ZXI7CisJCQlfX2ZzMzIJZnNfY3BjOwkJLyogY3lsIHBlciBjeWNsZSBpbiBwb3N0YmwgKi8KKwkJCV9fZnMxNglmc19vcG9zdGJsWzE2XVs4XTsgLyogb2xkIHJvdGF0aW9uIGJsb2NrIGxpc3QgaGVhZCAqLworCQl9IGZzX3UxOworCQlzdHJ1Y3QgeworCQkJX19zOCAgZnNfZnNtbnRbVUZTMl9NQVhNTlRMRU5dOwkvKiBuYW1lIG1vdW50ZWQgb24gKi8KKwkJCV9fdTggICBmc192b2xuYW1lW1VGUzJfTUFYVk9MTEVOXTsgLyogdm9sdW1lIG5hbWUgKi8KKwkJCV9fZnM2NCAgZnNfc3d1aWQ7CQkvKiBzeXN0ZW0td2lkZSB1aWQgKi8KKwkJCV9fZnMzMiAgZnNfcGFkOwkvKiBkdWUgdG8gYWxpZ25tZW50IG9mIGZzX3N3dWlkICovCisJCQlfX2ZzMzIgICBmc19jZ3JvdG9yOyAgICAgLyogbGFzdCBjZyBzZWFyY2hlZCAqLworCQkJX19mczMyICAgZnNfb2NzcFtVRlMyX05PQ1NQVFJTXTsgLypsaXN0IG9mIGZzX2NzIGluZm8gYnVmZmVycyAqLworCQkJX19mczMyICAgZnNfY29udGlnZGlyczsvKiMgb2YgY29udGlndW91c2x5IGFsbG9jYXRlZCBkaXJzICovCisJCQlfX2ZzMzIgICBmc19jc3A7CS8qIGNnIHN1bW1hcnkgaW5mbyBidWZmZXIgZm9yIGZzX2NzICovCisJCQlfX2ZzMzIgICBmc19tYXhjbHVzdGVyOworCQkJX19mczMyICAgZnNfYWN0aXZlOy8qIHVzZWQgYnkgc25hcHNob3RzIHRvIHRyYWNrIGZzICovCisJCQlfX2ZzMzIgICBmc19vbGRfY3BjOwkvKiBjeWwgcGVyIGN5Y2xlIGluIHBvc3RibCAqLworCQkJX19mczMyICAgZnNfbWF4YnNpemU7LyptYXhpbXVtIGJsb2NraW5nIGZhY3RvciBwZXJtaXR0ZWQgKi8KKwkJCV9fZnM2NCAgIGZzX3NwYXJlY29uNjRbMTddOy8qb2xkIHJvdGF0aW9uIGJsb2NrIGxpc3QgaGVhZCAqLworCQkJX19mczY0ICAgZnNfc2Jsb2NrbG9jOyAvKiBieXRlIG9mZnNldCBvZiBzdGFuZGFyZCBzdXBlcmJsb2NrICovCisJCQlzdHJ1Y3QgIHVmczJfY3N1bV90b3RhbCBmc19jc3RvdGFsOy8qY3lsaW5kZXIgc3VtbWFyeSBpbmZvcm1hdGlvbiovCisJCQlzdHJ1Y3QgIHVmc190aW1ldmFsICAgIGZzX3RpbWU7CQkvKiBsYXN0IHRpbWUgd3JpdHRlbiAqLworCQkJX19mczY0ICAgIGZzX3NpemU7CQkvKiBudW1iZXIgb2YgYmxvY2tzIGluIGZzICovCisJCQlfX2ZzNjQgICAgZnNfZHNpemU7CS8qIG51bWJlciBvZiBkYXRhIGJsb2NrcyBpbiBmcyAqLworCQkJX19mczY0ICAgZnNfY3NhZGRyOwkvKiBibGsgYWRkciBvZiBjeWwgZ3JwIHN1bW1hcnkgYXJlYSAqLworCQkJX19mczY0ICAgIGZzX3BlbmRpbmdibG9ja3M7LyogYmxvY2tzIGluIHByb2Nlc3Mgb2YgYmVpbmcgZnJlZWQgKi8KKwkJCV9fZnMzMiAgICBmc19wZW5kaW5naW5vZGVzOy8qaW5vZGVzIGluIHByb2Nlc3Mgb2YgYmVpbmcgZnJlZWQgKi8KKwkJfSBmc191MjsKKwl9ICBmc191MTE7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJX19mczMyCWZzX3NwYXJlY29uWzUzXTsvKiByZXNlcnZlZCBmb3IgZnV0dXJlIGNvbnN0YW50cyAqLworCQkJX19mczMyCWZzX3JlY2xhaW07CisJCQlfX2ZzMzIJZnNfc3BhcmVjb24yWzFdOworCQkJX19mczMyCWZzX3N0YXRlOwkvKiBmaWxlIHN5c3RlbSBzdGF0ZSB0aW1lIHN0YW1wICovCisJCQlfX2ZzMzIJZnNfcWJtYXNrWzJdOwkvKiB+dXNiX2JtYXNrICovCisJCQlfX2ZzMzIJZnNfcWZtYXNrWzJdOwkvKiB+dXNiX2ZtYXNrICovCisJCX0gZnNfc3VuOworCQlzdHJ1Y3QgeworCQkJX19mczMyCWZzX3NwYXJlY29uWzUzXTsvKiByZXNlcnZlZCBmb3IgZnV0dXJlIGNvbnN0YW50cyAqLworCQkJX19mczMyCWZzX3JlY2xhaW07CisJCQlfX2ZzMzIJZnNfc3BhcmVjb24yWzFdOworCQkJX19mczMyCWZzX25wc2VjdDsJLyogIyBzZWN0b3JzL3RyYWNrIGluY2x1ZGluZyBzcGFyZXMgKi8KKwkJCV9fZnMzMglmc19xYm1hc2tbMl07CS8qIH51c2JfYm1hc2sgKi8KKwkJCV9fZnMzMglmc19xZm1hc2tbMl07CS8qIH51c2JfZm1hc2sgKi8KKwkJfSBmc19zdW54ODY7CisJCXN0cnVjdCB7CisJCQlfX2ZzMzIJZnNfc3BhcmVjb25bNTBdOy8qIHJlc2VydmVkIGZvciBmdXR1cmUgY29uc3RhbnRzICovCisJCQlfX2ZzMzIJZnNfY29udGlnc3Vtc2l6ZTsvKiBzaXplIG9mIGNsdXN0ZXIgc3VtbWFyeSBhcnJheSAqLworCQkJX19mczMyCWZzX21heHN5bWxpbmtsZW47LyogbWF4IGxlbmd0aCBvZiBhbiBpbnRlcm5hbCBzeW1saW5rICovCisJCQlfX2ZzMzIJZnNfaW5vZGVmbXQ7CS8qIGZvcm1hdCBvZiBvbi1kaXNrIGlub2RlcyAqLworCQkJX19mczMyCWZzX21heGZpbGVzaXplWzJdOwkvKiBtYXggcmVwcmVzZW50YWJsZSBmaWxlIHNpemUgKi8KKwkJCV9fZnMzMglmc19xYm1hc2tbMl07CS8qIH51c2JfYm1hc2sgKi8KKwkJCV9fZnMzMglmc19xZm1hc2tbMl07CS8qIH51c2JfZm1hc2sgKi8KKwkJCV9fZnMzMglmc19zdGF0ZTsJLyogZmlsZSBzeXN0ZW0gc3RhdGUgdGltZSBzdGFtcCAqLworCQl9IGZzXzQ0OworCX0gZnNfdTI7CisJX19mczMyCWZzX3Bvc3RibGZvcm1hdDsJLyogZm9ybWF0IG9mIHBvc2l0aW9uYWwgbGF5b3V0IHRhYmxlcyAqLworCV9fZnMzMglmc19ucnBvczsJCS8qIG51bWJlciBvZiByb3RhdGlvbmFsIHBvc2l0aW9ucyAqLworCV9fZnMzMglmc19wb3N0YmxvZmY7CQkvKiAoX19zMTYpIHJvdGF0aW9uIGJsb2NrIGxpc3QgaGVhZCAqLworCV9fZnMzMglmc19yb3RibG9mZjsJCS8qIChfX3U4KSBibG9ja3MgZm9yIGVhY2ggcm90YXRpb24gKi8KKwlfX2ZzMzIJZnNfbWFnaWM7CQkvKiBtYWdpYyBudW1iZXIgKi8KKwlfX3U4CWZzX3NwYWNlWzFdOwkJLyogbGlzdCBvZiBibG9ja3MgZm9yIGVhY2ggcm90YXRpb24gKi8KK307CisKKy8qCisgKiBQcmVmZXJlbmNlIGZvciBvcHRpbWl6YXRpb24uCisgKi8KKyNkZWZpbmUgVUZTX09QVFRJTUUJMAkvKiBtaW5pbWl6ZSBhbGxvY2F0aW9uIHRpbWUgKi8KKyNkZWZpbmUgVUZTX09QVFNQQUNFCTEJLyogbWluaW1pemUgZGlzayBmcmFnbWVudGF0aW9uICovCisKKy8qCisgKiBSb3RhdGlvbmFsIGxheW91dCB0YWJsZSBmb3JtYXQgdHlwZXMKKyAqLworI2RlZmluZSBVRlNfNDJQT1NUQkxGTVQJCS0xCS8qIDQuMkJTRCByb3RhdGlvbmFsIHRhYmxlIGZvcm1hdCAqLworI2RlZmluZSBVRlNfRFlOQU1JQ1BPU1RCTEZNVAkxCS8qIGR5bmFtaWMgcm90YXRpb25hbCB0YWJsZSBmb3JtYXQgKi8KKworLyoKKyAqIENvbnZlcnQgY3lsaW5kZXIgZ3JvdXAgdG8gYmFzZSBhZGRyZXNzIG9mIGl0cyBnbG9iYWwgc3VtbWFyeSBpbmZvLgorICovCisjZGVmaW5lIGZzX2NzKGluZHgpIFwKKwlzX2NzcFsoaW5keCkgPj4gdXNwaS0+c19jc3NoaWZ0XVsoaW5keCkgJiB+dXNwaS0+c19jc21hc2tdCisKKy8qCisgKiBDeWxpbmRlciBncm91cCBibG9jayBmb3IgYSBmaWxlIHN5c3RlbS4KKyAqCisgKiBXcml0YWJsZSBmaWVsZHMgaW4gdGhlIGN5bGluZGVyIGdyb3VwIGFyZSBwcm90ZWN0ZWQgYnkgdGhlIGFzc29jaWF0ZWQKKyAqIHN1cGVyIGJsb2NrIGxvY2sgZnMtPmZzX2xvY2suCisgKi8KKyNkZWZpbmUJQ0dfTUFHSUMJMHgwOTAyNTUKKyNkZWZpbmUgdWZzX2NnX2Noa21hZ2ljKHNiLCB1Y2cpIFwKKwkoZnMzMl90b19jcHUoKHNiKSwgKHVjZyktPmNnX21hZ2ljKSA9PSBDR19NQUdJQykKKworLyoKKyAqIHNpemUgb2YgdGhpcyBzdHJ1Y3R1cmUgaXMgMTcyIEIKKyAqLworc3RydWN0CXVmc19jeWxpbmRlcl9ncm91cCB7CisJX19mczMyCWNnX2xpbms7CQkvKiBsaW5rZWQgbGlzdCBvZiBjeWwgZ3JvdXBzICovCisJX19mczMyCWNnX21hZ2ljOwkJLyogbWFnaWMgbnVtYmVyICovCisJX19mczMyCWNnX3RpbWU7CQkvKiB0aW1lIGxhc3Qgd3JpdHRlbiAqLworCV9fZnMzMgljZ19jZ3g7CQkJLyogd2UgYXJlIHRoZSBjZ3gndGggY3lsaW5kZXIgZ3JvdXAgKi8KKwlfX2ZzMTYJY2dfbmN5bDsJCS8qIG51bWJlciBvZiBjeWwncyB0aGlzIGNnICovCisJX19mczE2CWNnX25pYmxrOwkJLyogbnVtYmVyIG9mIGlub2RlIGJsb2NrcyB0aGlzIGNnICovCisJX19mczMyCWNnX25kYmxrOwkJLyogbnVtYmVyIG9mIGRhdGEgYmxvY2tzIHRoaXMgY2cgKi8KKwlzdHJ1Y3QJdWZzX2NzdW0gY2dfY3M7CQkvKiBjeWxpbmRlciBzdW1tYXJ5IGluZm9ybWF0aW9uICovCisJX19mczMyCWNnX3JvdG9yOwkJLyogcG9zaXRpb24gb2YgbGFzdCB1c2VkIGJsb2NrICovCisJX19mczMyCWNnX2Zyb3RvcjsJCS8qIHBvc2l0aW9uIG9mIGxhc3QgdXNlZCBmcmFnICovCisJX19mczMyCWNnX2lyb3RvcjsJCS8qIHBvc2l0aW9uIG9mIGxhc3QgdXNlZCBpbm9kZSAqLworCV9fZnMzMgljZ19mcnN1bVtVRlNfTUFYRlJBR107CS8qIGNvdW50cyBvZiBhdmFpbGFibGUgZnJhZ3MgKi8KKwlfX2ZzMzIJY2dfYnRvdG9mZjsJCS8qIChfX3UzMikgYmxvY2sgdG90YWxzIHBlciBjeWxpbmRlciAqLworCV9fZnMzMgljZ19ib2ZmOwkJLyogKHNob3J0KSBmcmVlIGJsb2NrIHBvc2l0aW9ucyAqLworCV9fZnMzMgljZ19pdXNlZG9mZjsJCS8qIChjaGFyKSB1c2VkIGlub2RlIG1hcCAqLworCV9fZnMzMgljZ19mcmVlb2ZmOwkJLyogKHVfY2hhcikgZnJlZSBibG9jayBtYXAgKi8KKwlfX2ZzMzIJY2dfbmV4dGZyZWVvZmY7CQkvKiAodV9jaGFyKSBuZXh0IGF2YWlsYWJsZSBzcGFjZSAqLworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCV9fZnMzMgljZ19jbHVzdGVyc3Vtb2ZmOwkvKiAodV9pbnQzMikgY291bnRzIG9mIGF2YWlsIGNsdXN0ZXJzICovCisJCQlfX2ZzMzIJY2dfY2x1c3Rlcm9mZjsJCS8qICh1X2ludDgpIGZyZWUgY2x1c3RlciBtYXAgKi8KKwkJCV9fZnMzMgljZ19uY2x1c3RlcmJsa3M7CS8qIG51bWJlciBvZiBjbHVzdGVycyB0aGlzIGNnICovCisJCQlfX2ZzMzIJY2dfc3BhcmVjb25bMTNdOwkvKiByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqLworCQl9IGNnXzQ0OworCQlzdHJ1Y3QgeworCQkJX19mczMyCWNnX2NsdXN0ZXJzdW1vZmY7LyogKHVfaW50MzIpIGNvdW50cyBvZiBhdmFpbCBjbHVzdGVycyAqLworCQkJX19mczMyCWNnX2NsdXN0ZXJvZmY7CS8qICh1X2ludDgpIGZyZWUgY2x1c3RlciBtYXAgKi8KKwkJCV9fZnMzMgljZ19uY2x1c3RlcmJsa3M7LyogbnVtYmVyIG9mIGNsdXN0ZXJzIHRoaXMgY2cgKi8KKwkJCV9fZnMzMiAgIGNnX25pYmxrOyAvKiBudW1iZXIgb2YgaW5vZGUgYmxvY2tzIHRoaXMgY2cgKi8KKwkJCV9fZnMzMiAgIGNnX2luaXRlZGlibGs7CS8qIGxhc3QgaW5pdGlhbGl6ZWQgaW5vZGUgKi8KKwkJCV9fZnMzMiAgIGNnX3NwYXJlY29uMzJbM107LyogcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKi8KKwkJCV9fZnM2NCAgIGNnX3RpbWU7CS8qIHRpbWUgbGFzdCB3cml0dGVuICovCisJCQlfX2ZzNjQJY2dfc3BhcmVjb25bM107CS8qIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovCisJCX0gY2dfdTI7CisJCV9fZnMzMgljZ19zcGFyZWNvblsxNl07CS8qIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovCisJfSBjZ191OworCV9fdTgJY2dfc3BhY2VbMV07CQkvKiBzcGFjZSBmb3IgY3lsaW5kZXIgZ3JvdXAgbWFwcyAqLworLyogYWN0dWFsbHkgbG9uZ2VyICovCit9OworCisvKgorICogc3RydWN0dXJlIG9mIGFuIG9uLWRpc2sgaW5vZGUKKyAqLworc3RydWN0IHVmc19pbm9kZSB7CisJX19mczE2CXVpX21vZGU7CQkvKiAgMHgwICovCisJX19mczE2CXVpX25saW5rOwkJLyogIDB4MiAqLworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCV9fZnMxNgl1aV9zdWlkOwkvKiAgMHg0ICovCisJCQlfX2ZzMTYJdWlfc2dpZDsJLyogIDB4NiAqLworCQl9IG9sZGlkczsKKwkJX19mczMyCXVpX2ludW1iZXI7CQkvKiAgMHg0IGxzZjogaW5vZGUgbnVtYmVyICovCisJCV9fZnMzMgl1aV9hdXRob3I7CQkvKiAgMHg0IEdOVSBIVVJEOiBhdXRob3IgKi8KKwl9IHVpX3UxOworCV9fZnM2NAl1aV9zaXplOwkJLyogIDB4OCAqLworCXN0cnVjdCB1ZnNfdGltZXZhbCB1aV9hdGltZTsJLyogMHgxMCBhY2Nlc3MgKi8KKwlzdHJ1Y3QgdWZzX3RpbWV2YWwgdWlfbXRpbWU7CS8qIDB4MTggbW9kaWZpY2F0aW9uICovCisJc3RydWN0IHVmc190aW1ldmFsIHVpX2N0aW1lOwkvKiAweDIwIGNyZWF0aW9uICovCisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJX19mczMyCXVpX2RiW1VGU19OREFERFJdOy8qIDB4MjggZGF0YSBibG9ja3MgKi8KKwkJCV9fZnMzMgl1aV9pYltVRlNfTklORElSXTsvKiAweDU4IGluZGlyZWN0IGJsb2NrcyAqLworCQl9IHVpX2FkZHI7CisJCV9fdTgJdWlfc3ltbGlua1s0KihVRlNfTkRBRERSK1VGU19OSU5ESVIpXTsvKiAweDI4IGZhc3Qgc3ltbGluayAqLworCX0gdWlfdTI7CisJX19mczMyCXVpX2ZsYWdzOwkJLyogMHg2NCBpbW11dGFibGUsIGFwcGVuZC1vbmx5Li4uICovCisJX19mczMyCXVpX2Jsb2NrczsJCS8qIDB4NjggYmxvY2tzIGluIHVzZSAqLworCV9fZnMzMgl1aV9nZW47CQkJLyogMHg2YyBsaWtlIGV4dDIgaV92ZXJzaW9uLCBmb3IgTkZTIHN1cHBvcnQgKi8KKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQlfX2ZzMzIJdWlfc2hhZG93OwkvKiAweDcwIHNoYWRvdyBpbm9kZSB3aXRoIHNlY3VyaXR5IGRhdGEgKi8KKwkJCV9fZnMzMgl1aV91aWQ7CQkvKiAweDc0IGxvbmcgRUZUIHZlcnNpb24gb2YgdWlkICovCisJCQlfX2ZzMzIJdWlfZ2lkOwkJLyogMHg3OCBsb25nIEVGVCB2ZXJzaW9uIG9mIGdpZCAqLworCQkJX19mczMyCXVpX29lZnRmbGFnOwkvKiAweDdjIHJlc2VydmVkICovCisJCX0gdWlfc3VuOworCQlzdHJ1Y3QgeworCQkJX19mczMyCXVpX3VpZDsJCS8qIDB4NzAgRmlsZSBvd25lciAqLworCQkJX19mczMyCXVpX2dpZDsJCS8qIDB4NzQgRmlsZSBncm91cCAqLworCQkJX19mczMyCXVpX3NwYXJlWzJdOwkvKiAweDc4IHJlc2VydmVkICovCisJCX0gdWlfNDQ7CisJCXN0cnVjdCB7CisJCQlfX2ZzMzIJdWlfdWlkOwkJLyogMHg3MCAqLworCQkJX19mczMyCXVpX2dpZDsJCS8qIDB4NzQgKi8KKwkJCV9fZnMxNgl1aV9tb2RlaDsJLyogMHg3OCBtb2RlIGhpZ2ggYml0cyAqLworCQkJX19mczE2CXVpX3NwYXJlOwkvKiAweDdBIHVudXNlZCAqLworCQkJX19mczMyCXVpX3RyYW5zOwkvKiAweDdjIGZpbGVzeXN0ZW0gdHJhbnNsYXRvciAqLworCQl9IHVpX2h1cmQ7CisJfSB1aV91MzsKK307CisKKyNkZWZpbmUgVUZTX05YQUREUiAgMiAgICAgICAgICAgIC8qIEV4dGVybmFsIGFkZHJlc3NlcyBpbiBpbm9kZS4gKi8KK3N0cnVjdCB1ZnMyX2lub2RlIHsKKwlfX2ZzMTYgICAgIHVpX21vZGU7ICAgICAgICAvKiAgIDA6IElGTVQsIHBlcm1pc3Npb25zOyBzZWUgYmVsb3cuICovCisJX19mczE2ICAgICB1aV9ubGluazsgICAgICAgLyogICAyOiBGaWxlIGxpbmsgY291bnQuICovCisJX19mczMyICAgICB1aV91aWQ7ICAgICAgICAgLyogICA0OiBGaWxlIG93bmVyLiAqLworCV9fZnMzMiAgICAgdWlfZ2lkOyAgICAgICAgIC8qICAgODogRmlsZSBncm91cC4gKi8KKwlfX2ZzMzIgICAgIHVpX2Jsa3NpemU7ICAgICAvKiAgMTI6IElub2RlIGJsb2Nrc2l6ZS4gKi8KKwlfX2ZzNjQgICAgIHVpX3NpemU7ICAgICAgICAvKiAgMTY6IEZpbGUgYnl0ZSBjb3VudC4gKi8KKwlfX2ZzNjQgICAgIHVpX2Jsb2NrczsgICAgICAvKiAgMjQ6IEJ5dGVzIGFjdHVhbGx5IGhlbGQuICovCisJc3RydWN0IHVmc190aW1ldmFsICAgdWlfYXRpbWU7ICAgICAgIC8qICAzMjogTGFzdCBhY2Nlc3MgdGltZS4gKi8KKwlzdHJ1Y3QgdWZzX3RpbWV2YWwgICB1aV9tdGltZTsgICAgICAgLyogIDQwOiBMYXN0IG1vZGlmaWVkIHRpbWUuICovCisJc3RydWN0IHVmc190aW1ldmFsICAgdWlfY3RpbWU7ICAgICAgIC8qICA0ODogTGFzdCBpbm9kZSBjaGFuZ2UgdGltZS4gKi8KKwlzdHJ1Y3QgdWZzX3RpbWV2YWwgICB1aV9iaXJ0aHRpbWU7ICAgLyogIDU2OiBJbm9kZSBjcmVhdGlvbiB0aW1lLiAqLworCV9fZnMzMiAgICAgdWlfbXRpbWVuc2VjOyAgIC8qICA2NDogTGFzdCBtb2RpZmllZCB0aW1lLiAqLworCV9fZnMzMiAgICAgdWlfYXRpbWVuc2VjOyAgIC8qICA2ODogTGFzdCBhY2Nlc3MgdGltZS4gKi8KKwlfX2ZzMzIgICAgIHVpX2N0aW1lbnNlYzsgICAvKiAgNzI6IExhc3QgaW5vZGUgY2hhbmdlIHRpbWUuICovCisJX19mczMyICAgICB1aV9iaXJ0aG5zZWM7ICAgLyogIDc2OiBJbm9kZSBjcmVhdGlvbiB0aW1lLiAqLworCV9fZnMzMiAgICAgdWlfZ2VuOyAgICAgICAgIC8qICA4MDogR2VuZXJhdGlvbiBudW1iZXIuICovCisJX19mczMyICAgICB1aV9rZXJuZmxhZ3M7ICAgLyogIDg0OiBLZXJuZWwgZmxhZ3MuICovCisJX19mczMyICAgICB1aV9mbGFnczsgICAgICAgLyogIDg4OiBTdGF0dXMgZmxhZ3MgKGNoZmxhZ3MpLiAqLworCV9fZnMzMiAgICAgdWlfZXh0c2l6ZTsgICAgIC8qICA5MjogRXh0ZXJuYWwgYXR0cmlidXRlcyBibG9jay4gKi8KKwlfX2ZzNjQgICAgIHVpX2V4dGJbVUZTX05YQUREUl07LyogIDk2OiBFeHRlcm5hbCBhdHRyaWJ1dGVzIGJsb2NrLiAqLworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCV9fZnM2NCAgICAgdWlfZGJbVUZTX05EQUREUl07IC8qIDExMjogRGlyZWN0IGRpc2sgYmxvY2tzLiAqLworCQkJX19mczY0ICAgICB1aV9pYltVRlNfTklORElSXTsvKiAyMDg6IEluZGlyZWN0IGRpc2sgYmxvY2tzLiovCisJCX0gdWlfYWRkcjsKKwlfX3U4CXVpX3N5bWxpbmtbMio0KihVRlNfTkRBRERSK1VGU19OSU5ESVIpXTsvKiAweDI4IGZhc3Qgc3ltbGluayAqLworCX0gdWlfdTI7CisJX19mczY0ICAgICB1aV9zcGFyZVszXTsgICAgLyogMjMyOiBSZXNlcnZlZDsgY3VycmVudGx5IHVudXNlZCAqLworfTsKKworCisvKiBGcmVlQlNEIGhhcyB0aGVzZSBpbiBzeXMvc3RhdC5oICovCisvKiB1aV9mbGFncyB0aGF0IGNhbiBiZSBzZXQgYnkgYSBmaWxlIG93bmVyICovCisjZGVmaW5lIFVGU19VRl9TRVRUQUJMRSAgIDB4MDAwMGZmZmYKKyNkZWZpbmUgVUZTX1VGX05PRFVNUCAgICAgMHgwMDAwMDAwMSAgLyogZG8gbm90IGR1bXAgKi8KKyNkZWZpbmUgVUZTX1VGX0lNTVVUQUJMRSAgMHgwMDAwMDAwMiAgLyogaW1tdXRhYmxlIChjYW4ndCAiY2hhbmdlIikgKi8KKyNkZWZpbmUgVUZTX1VGX0FQUEVORCAgICAgMHgwMDAwMDAwNCAgLyogYXBwZW5kLW9ubHkgKi8KKyNkZWZpbmUgVUZTX1VGX09QQVFVRSAgICAgMHgwMDAwMDAwOCAgLyogZGlyZWN0b3J5IGlzIG9wYXF1ZSAodW5pb25mcykgKi8KKyNkZWZpbmUgVUZTX1VGX05PVU5MSU5LICAgMHgwMDAwMDAxMCAgLyogY2FuJ3QgYmUgcmVtb3ZlZCBvciByZW5hbWVkICovCisvKiB1aV9mbGFncyB0aGF0IG9ubHkgcm9vdCBjYW4gc2V0ICovCisjZGVmaW5lIFVGU19TRl9TRVRUQUJMRSAgIDB4ZmZmZjAwMDAKKyNkZWZpbmUgVUZTX1NGX0FSQ0hJVkVEICAgMHgwMDAxMDAwMCAgLyogYXJjaGl2ZWQgKi8KKyNkZWZpbmUgVUZTX1NGX0lNTVVUQUJMRSAgMHgwMDAyMDAwMCAgLyogaW1tdXRhYmxlIChjYW4ndCAiY2hhbmdlIikgKi8KKyNkZWZpbmUgVUZTX1NGX0FQUEVORCAgICAgMHgwMDA0MDAwMCAgLyogYXBwZW5kLW9ubHkgKi8KKyNkZWZpbmUgVUZTX1NGX05PVU5MSU5LICAgMHgwMDEwMDAwMCAgLyogY2FuJ3QgYmUgcmVtb3ZlZCBvciByZW5hbWVkICovCisKKy8qCisgKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIGZvciByZWFkaW5nIGRpc2sgc3RydWN0dXJlcyBsYXJnZXIKKyAqIHRoYW4gdGhlIHNpemUgb2YgZnJhZ21lbnQuCisgKi8KK3N0cnVjdCB1ZnNfYnVmZmVyX2hlYWQgeworCV9fdTY0IGZyYWdtZW50OwkJCS8qIGZpcnN0IGZyYWdtZW50ICovCisJX191NjQgY291bnQ7CQkJCS8qIG51bWJlciBvZiBmcmFnbWVudHMgKi8KKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBiaFtVRlNfTUFYRlJBR107CS8qIGJ1ZmZlcnMgKi8KK307CisKK3N0cnVjdCB1ZnNfY2dfcHJpdmF0ZV9pbmZvIHsKKwlzdHJ1Y3QgdWZzX2N5bGluZGVyX2dyb3VwIHVjZzsKKwlfX3UzMgljX2NneDsJCS8qIG51bWJlciBvZiBjeWxpZG5lciBncm91cCAqLworCV9fdTE2CWNfbmN5bDsJCS8qIG51bWJlciBvZiBjeWwncyB0aGlzIGNnICovCisJX191MTYJY19uaWJsazsJLyogbnVtYmVyIG9mIGlub2RlIGJsb2NrcyB0aGlzIGNnICovCisJX191MzIJY19uZGJsazsJLyogbnVtYmVyIG9mIGRhdGEgYmxvY2tzIHRoaXMgY2cgKi8KKwlfX3UzMgljX3JvdG9yOwkvKiBwb3NpdGlvbiBvZiBsYXN0IHVzZWQgYmxvY2sgKi8KKwlfX3UzMgljX2Zyb3RvcjsJLyogcG9zaXRpb24gb2YgbGFzdCB1c2VkIGZyYWcgKi8KKwlfX3UzMgljX2lyb3RvcjsJLyogcG9zaXRpb24gb2YgbGFzdCB1c2VkIGlub2RlICovCisJX191MzIJY19idG90b2ZmOwkvKiAoX191MzIpIGJsb2NrIHRvdGFscyBwZXIgY3lsaW5kZXIgKi8KKwlfX3UzMgljX2JvZmY7CQkvKiAoc2hvcnQpIGZyZWUgYmxvY2sgcG9zaXRpb25zICovCisJX191MzIJY19pdXNlZG9mZjsJLyogKGNoYXIpIHVzZWQgaW5vZGUgbWFwICovCisJX191MzIJY19mcmVlb2ZmOwkvKiAodV9jaGFyKSBmcmVlIGJsb2NrIG1hcCAqLworCV9fdTMyCWNfbmV4dGZyZWVvZmY7CS8qICh1X2NoYXIpIG5leHQgYXZhaWxhYmxlIHNwYWNlICovCisJX191MzIJY19jbHVzdGVyc3Vtb2ZmOy8qICh1X2ludDMyKSBjb3VudHMgb2YgYXZhaWwgY2x1c3RlcnMgKi8KKwlfX3UzMgljX2NsdXN0ZXJvZmY7CS8qICh1X2ludDgpIGZyZWUgY2x1c3RlciBtYXAgKi8KKwlfX3UzMgljX25jbHVzdGVyYmxrczsJLyogbnVtYmVyIG9mIGNsdXN0ZXJzIHRoaXMgY2cgKi8KK307CQorCitzdHJ1Y3QgdWZzX3NiX3ByaXZhdGVfaW5mbyB7CisJc3RydWN0IHVmc19idWZmZXJfaGVhZCBzX3ViaDsgLyogYnVmZmVyIGNvbnRhaW5pbmcgc3VwZXIgYmxvY2sgKi8KKwlfX3UzMglzX3NibGtubzsJLyogb2Zmc2V0IG9mIHN1cGVyLWJsb2NrcyBpbiBmaWxlc3lzICovCisJX191MzIJc19jYmxrbm87CS8qIG9mZnNldCBvZiBjZy1ibG9jayBpbiBmaWxlc3lzICovCisJX191MzIJc19pYmxrbm87CS8qIG9mZnNldCBvZiBpbm9kZS1ibG9ja3MgaW4gZmlsZXN5cyAqLworCV9fdTMyCXNfZGJsa25vOwkvKiBvZmZzZXQgb2YgZmlyc3QgZGF0YSBhZnRlciBjZyAqLworCV9fdTMyCXNfY2dvZmZzZXQ7CS8qIGN5bGluZGVyIGdyb3VwIG9mZnNldCBpbiBjeWxpbmRlciAqLworCV9fdTMyCXNfY2dtYXNrOwkvKiB1c2VkIHRvIGNhbGMgbW9kIGZzX250cmFrICovCisJX191MzIJc19zaXplOwkJLyogbnVtYmVyIG9mIGJsb2NrcyAoZnJhZ21lbnRzKSBpbiBmcyAqLworCV9fdTMyCXNfZHNpemU7CS8qIG51bWJlciBvZiBkYXRhIGJsb2NrcyBpbiBmcyAqLworCV9fdTY0CXNfdTJfc2l6ZTsJLyogdWZzMjogbnVtYmVyIG9mIGJsb2NrcyAoZnJhZ21lbnRzKSBpbiBmcyAqLworCV9fdTY0CXNfdTJfZHNpemU7CS8qdWZzMjogIG51bWJlciBvZiBkYXRhIGJsb2NrcyBpbiBmcyAqLworCV9fdTMyCXNfbmNnOwkJLyogbnVtYmVyIG9mIGN5bGluZGVyIGdyb3VwcyAqLworCV9fdTMyCXNfYnNpemU7CS8qIHNpemUgb2YgYmFzaWMgYmxvY2tzICovCisJX191MzIJc19mc2l6ZTsJLyogc2l6ZSBvZiBmcmFnbWVudHMgKi8KKwlfX3UzMglzX2ZwYjsJCS8qIGZyYWdtZW50cyBwZXIgYmxvY2sgKi8KKwlfX3UzMglzX21pbmZyZWU7CS8qIG1pbmltdW0gcGVyY2VudGFnZSBvZiBmcmVlIGJsb2NrcyAqLworCV9fdTMyCXNfYm1hc2s7CS8qIGBibGtvZmYnJyBjYWxjIG9mIGJsayBvZmZzZXRzICovCisJX191MzIJc19mbWFzazsJLyogc19mc2l6ZSBtYXNrICovCisJX191MzIJc19ic2hpZnQ7CS8qIGBsYmxrbm8nJyBjYWxjIG9mIGxvZ2ljYWwgYmxrbm8gKi8KKwlfX3UzMiAgIHNfZnNoaWZ0OwkvKiBzX2ZzaXplIHNoaWZ0ICovCisJX191MzIJc19mcGJzaGlmdDsJLyogZnJhZ21lbnRzIHBlciBibG9jayBzaGlmdCAqLworCV9fdTMyCXNfZnNidG9kYjsJLyogZnNidG9kYiBhbmQgZGJ0b2ZzYiBzaGlmdCBjb25zdGFudCAqLworCV9fdTMyCXNfc2JzaXplOwkvKiBhY3R1YWwgc2l6ZSBvZiBzdXBlciBibG9jayAqLworCV9fdTMyICAgc19jc21hc2s7CS8qIGNzdW0gYmxvY2sgb2Zmc2V0ICovCisJX191MzIJc19jc3NoaWZ0OwkvKiBjc3VtIGJsb2NrIG51bWJlciAqLworCV9fdTMyCXNfbmluZGlyOwkvKiB2YWx1ZSBvZiBOSU5ESVIgKi8KKwlfX3UzMglzX2lub3BiOwkvKiB2YWx1ZSBvZiBJTk9QQiAqLworCV9fdTMyCXNfbnNwZjsJCS8qIHZhbHVlIG9mIE5TUEYgKi8KKwlfX3UzMglzX25wc2VjdDsJLyogIyBzZWN0b3JzL3RyYWNrIGluY2x1ZGluZyBzcGFyZXMgKi8KKwlfX3UzMglzX2ludGVybGVhdmU7CS8qIGhhcmR3YXJlIHNlY3RvciBpbnRlcmxlYXZlICovCisJX191MzIJc190cmFja3NrZXc7CS8qIHNlY3RvciAwIHNrZXcsIHBlciB0cmFjayAqLworCV9fdTMyCXNfY3NhZGRyOwkvKiBibGsgYWRkciBvZiBjeWwgZ3JwIHN1bW1hcnkgYXJlYSAqLworCV9fdTMyCXNfY3NzaXplOwkvKiBzaXplIG9mIGN5bCBncnAgc3VtbWFyeSBhcmVhICovCisJX191MzIJc19jZ3NpemU7CS8qIGN5bGluZGVyIGdyb3VwIHNpemUgKi8KKwlfX3UzMglzX250cmFrOwkvKiB0cmFja3MgcGVyIGN5bGluZGVyICovCisJX191MzIJc19uc2VjdDsJLyogc2VjdG9ycyBwZXIgdHJhY2sgKi8KKwlfX3UzMglzX3NwYzsJCS8qIHNlY3RvcnMgcGVyIGN5bGluZGVyICovCisJX191MzIJc19pcGc7CQkvKiBpbm9kZXMgcGVyIGN5bGluZGVyIGdyb3VwICovCisJX191MzIJc19mcGc7CQkvKiBmcmFnbWVudHMgcGVyIGdyb3VwICovCisJX191MzIJc19jcGM7CQkvKiBjeWwgcGVyIGN5Y2xlIGluIHBvc3RibCAqLworCV9fczMyCXNfY29udGlnc3Vtc2l6ZTsvKiBzaXplIG9mIGNsdXN0ZXIgc3VtbWFyeSBhcnJheSwgNDRic2QgKi8KKwlfX3M2NAlzX3FibWFzazsJLyogfnVzYl9ibWFzayAqLworCV9fczY0CXNfcWZtYXNrOwkvKiB+dXNiX2ZtYXNrICovCisJX19zMzIJc19wb3N0Ymxmb3JtYXQ7CS8qIGZvcm1hdCBvZiBwb3NpdGlvbmFsIGxheW91dCB0YWJsZXMgKi8KKwlfX3MzMglzX25ycG9zOwkvKiBudW1iZXIgb2Ygcm90YXRpb25hbCBwb3NpdGlvbnMgKi8KKyAgICAgICAgX19zMzIJc19wb3N0YmxvZmY7CS8qIChfX3MxNikgcm90YXRpb24gYmxvY2sgbGlzdCBoZWFkICovCisJX19zMzIJc19yb3RibG9mZjsJLyogKF9fdTgpIGJsb2NrcyBmb3IgZWFjaCByb3RhdGlvbiAqLworCisJX191MzIJc19mcGJtYXNrOwkvKiBmcmFnbWVudHMgcGVyIGJsb2NrIG1hc2sgKi8KKwlfX3UzMglzX2FwYjsJCS8qIGFkZHJlc3MgcGVyIGJsb2NrICovCisJX191MzIJc18yYXBiOwkJLyogYWRkcmVzcyBwZXIgYmxvY2teMiAqLworCV9fdTMyCXNfM2FwYjsJCS8qIGFkZHJlc3MgcGVyIGJsb2NrXjMgKi8KKwlfX3UzMglzX2FwYm1hc2s7CS8qIGFkZHJlc3MgcGVyIGJsb2NrIG1hc2sgKi8KKwlfX3UzMglzX2FwYnNoaWZ0OwkvKiBhZGRyZXNzIHBlciBibG9jayBzaGlmdCAqLworCV9fdTMyCXNfMmFwYnNoaWZ0OwkvKiBhZGRyZXNzIHBlciBibG9jayBzaGlmdCAqIDIgKi8KKwlfX3UzMglzXzNhcGJzaGlmdDsJLyogYWRkcmVzcyBwZXIgYmxvY2sgc2hpZnQgKiAzICovCisJX191MzIJc19uc3Bmc2hpZnQ7CS8qIG51bWJlciBvZiBzZWN0b3IgcGVyIGZyYWdtZW50IHNoaWZ0ICovCisJX191MzIJc19uc3BiOwkJLyogbnVtYmVyIG9mIHNlY3RvciBwZXIgYmxvY2sgKi8KKwlfX3UzMglzX2lub3BmOwkvKiBpbm9kZXMgcGVyIGZyYWdtZW50ICovCisJX191MzIJc19zYmJhc2U7CS8qIG9mZnNldCBvZiBOZVhUc3RlcCBzdXBlcmJsb2NrICovCisJX191MzIJc19icGY7CQkvKiBiaXRzIHBlciBmcmFnbWVudCAqLworCV9fdTMyCXNfYnBmc2hpZnQ7CS8qIGJpdHMgcGVyIGZyYWdtZW50IHNoaWZ0Ki8KKwlfX3UzMglzX2JwZm1hc2s7CS8qIGJpdHMgcGVyIGZyYWdtZW50IG1hc2sgKi8KKworCV9fdTMyCXNfbWF4c3ltbGlua2xlbjsvKiB1cHBlciBsaW1pdCBvbiBmYXN0IHN5bWxpbmtzJyBzaXplICovCisJX19zMzIJZnNfbWFnaWM7ICAgICAgIC8qIGZpbGVzeXN0ZW0gbWFnaWMgKi8KK307CisKKy8qCisgKiBTaXplcyBvZiB0aGlzIHN0cnVjdHVyZXMgYXJlOgorICoJdWZzX3N1cGVyX2Jsb2NrX2ZpcnN0CTUxMgorICoJdWZzX3N1cGVyX2Jsb2NrX3NlY29uZAk1MTIKKyAqCXVmc19zdXBlcl9ibG9ja190aGlyZAkzNTYKKyAqLworc3RydWN0IHVmc19zdXBlcl9ibG9ja19maXJzdCB7CisJX19mczMyCWZzX2xpbms7CisJX19mczMyCWZzX3JsaW5rOworCV9fZnMzMglmc19zYmxrbm87CisJX19mczMyCWZzX2NibGtubzsKKwlfX2ZzMzIJZnNfaWJsa25vOworCV9fZnMzMglmc19kYmxrbm87CisJX19mczMyCWZzX2Nnb2Zmc2V0OworCV9fZnMzMglmc19jZ21hc2s7CisJX19mczMyCWZzX3RpbWU7CisJX19mczMyCWZzX3NpemU7CisJX19mczMyCWZzX2RzaXplOworCV9fZnMzMglmc19uY2c7CisJX19mczMyCWZzX2JzaXplOworCV9fZnMzMglmc19mc2l6ZTsKKwlfX2ZzMzIJZnNfZnJhZzsKKwlfX2ZzMzIJZnNfbWluZnJlZTsKKwlfX2ZzMzIJZnNfcm90ZGVsYXk7CisJX19mczMyCWZzX3JwczsKKwlfX2ZzMzIJZnNfYm1hc2s7CisJX19mczMyCWZzX2ZtYXNrOworCV9fZnMzMglmc19ic2hpZnQ7CisJX19mczMyCWZzX2ZzaGlmdDsKKwlfX2ZzMzIJZnNfbWF4Y29udGlnOworCV9fZnMzMglmc19tYXhicGc7CisJX19mczMyCWZzX2ZyYWdzaGlmdDsKKwlfX2ZzMzIJZnNfZnNidG9kYjsKKwlfX2ZzMzIJZnNfc2JzaXplOworCV9fZnMzMglmc19jc21hc2s7CisJX19mczMyCWZzX2Nzc2hpZnQ7CisJX19mczMyCWZzX25pbmRpcjsKKwlfX2ZzMzIJZnNfaW5vcGI7CisJX19mczMyCWZzX25zcGY7CisJX19mczMyCWZzX29wdGltOworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCV9fZnMzMglmc19ucHNlY3Q7CisJCX0gZnNfc3VuOworCQlzdHJ1Y3QgeworCQkJX19mczMyCWZzX3N0YXRlOworCQl9IGZzX3N1bng4NjsKKwl9IGZzX3UxOworCV9fZnMzMglmc19pbnRlcmxlYXZlOworCV9fZnMzMglmc190cmFja3NrZXc7CisJX19mczMyCWZzX2lkWzJdOworCV9fZnMzMglmc19jc2FkZHI7CisJX19mczMyCWZzX2Nzc2l6ZTsKKwlfX2ZzMzIJZnNfY2dzaXplOworCV9fZnMzMglmc19udHJhazsKKwlfX2ZzMzIJZnNfbnNlY3Q7CisJX19mczMyCWZzX3NwYzsKKwlfX2ZzMzIJZnNfbmN5bDsKKwlfX2ZzMzIJZnNfY3BnOworCV9fZnMzMglmc19pcGc7CisJX19mczMyCWZzX2ZwZzsKKwlzdHJ1Y3QgdWZzX2NzdW0gZnNfY3N0b3RhbDsKKwlfX3M4CWZzX2Ztb2Q7CisJX19zOAlmc19jbGVhbjsKKwlfX3M4CWZzX3Jvbmx5OworCV9fczgJZnNfZmxhZ3M7CisJX19zOAlmc19mc21udFtVRlNfTUFYTU5UTEVOIC0gMjEyXTsKKworfTsKKworc3RydWN0IHVmc19zdXBlcl9ibG9ja19zZWNvbmQgeworCV9fczgJZnNfZnNtbnRbMjEyXTsKKwlfX2ZzMzIJZnNfY2dyb3RvcjsKKwlfX2ZzMzIJZnNfY3NwW1VGU19NQVhDU0JVRlNdOworCV9fZnMzMglmc19tYXhjbHVzdGVyOworCV9fZnMzMglmc19jcGM7CisJX19mczE2CWZzX29wb3N0YmxbODJdOworfTsJCisKK3N0cnVjdCB1ZnNfc3VwZXJfYmxvY2tfdGhpcmQgeworCV9fZnMxNglmc19vcG9zdGJsWzQ2XTsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQlfX2ZzMzIJZnNfc3BhcmVjb25bNTNdOy8qIHJlc2VydmVkIGZvciBmdXR1cmUgY29uc3RhbnRzICovCisJCQlfX2ZzMzIJZnNfcmVjbGFpbTsKKwkJCV9fZnMzMglmc19zcGFyZWNvbjJbMV07CisJCQlfX2ZzMzIJZnNfc3RhdGU7CS8qIGZpbGUgc3lzdGVtIHN0YXRlIHRpbWUgc3RhbXAgKi8KKwkJCV9fZnMzMglmc19xYm1hc2tbMl07CS8qIH51c2JfYm1hc2sgKi8KKwkJCV9fZnMzMglmc19xZm1hc2tbMl07CS8qIH51c2JfZm1hc2sgKi8KKwkJfSBmc19zdW47CisJCXN0cnVjdCB7CisJCQlfX2ZzMzIJZnNfc3BhcmVjb25bNTNdOy8qIHJlc2VydmVkIGZvciBmdXR1cmUgY29uc3RhbnRzICovCisJCQlfX2ZzMzIJZnNfcmVjbGFpbTsKKwkJCV9fZnMzMglmc19zcGFyZWNvbjJbMV07CisJCQlfX2ZzMzIJZnNfbnBzZWN0OwkvKiAjIHNlY3RvcnMvdHJhY2sgaW5jbHVkaW5nIHNwYXJlcyAqLworCQkJX19mczMyCWZzX3FibWFza1syXTsJLyogfnVzYl9ibWFzayAqLworCQkJX19mczMyCWZzX3FmbWFza1syXTsJLyogfnVzYl9mbWFzayAqLworCQl9IGZzX3N1bng4NjsKKwkJc3RydWN0IHsKKwkJCV9fZnMzMglmc19zcGFyZWNvbls1MF07LyogcmVzZXJ2ZWQgZm9yIGZ1dHVyZSBjb25zdGFudHMgKi8KKwkJCV9fZnMzMglmc19jb250aWdzdW1zaXplOy8qIHNpemUgb2YgY2x1c3RlciBzdW1tYXJ5IGFycmF5ICovCisJCQlfX2ZzMzIJZnNfbWF4c3ltbGlua2xlbjsvKiBtYXggbGVuZ3RoIG9mIGFuIGludGVybmFsIHN5bWxpbmsgKi8KKwkJCV9fZnMzMglmc19pbm9kZWZtdDsJLyogZm9ybWF0IG9mIG9uLWRpc2sgaW5vZGVzICovCisJCQlfX2ZzMzIJZnNfbWF4ZmlsZXNpemVbMl07CS8qIG1heCByZXByZXNlbnRhYmxlIGZpbGUgc2l6ZSAqLworCQkJX19mczMyCWZzX3FibWFza1syXTsJLyogfnVzYl9ibWFzayAqLworCQkJX19mczMyCWZzX3FmbWFza1syXTsJLyogfnVzYl9mbWFzayAqLworCQkJX19mczMyCWZzX3N0YXRlOwkvKiBmaWxlIHN5c3RlbSBzdGF0ZSB0aW1lIHN0YW1wICovCisJCX0gZnNfNDQ7CisJfSBmc191MjsKKwlfX2ZzMzIJZnNfcG9zdGJsZm9ybWF0OworCV9fZnMzMglmc19ucnBvczsKKwlfX2ZzMzIJZnNfcG9zdGJsb2ZmOworCV9fZnMzMglmc19yb3RibG9mZjsKKwlfX2ZzMzIJZnNfbWFnaWM7CisJX191OAlmc19zcGFjZVsxXTsKK307CisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKy8qIGJhbGxvYy5jICovCitleHRlcm4gdm9pZCB1ZnNfZnJlZV9mcmFnbWVudHMgKHN0cnVjdCBpbm9kZSAqLCB1bnNpZ25lZCwgdW5zaWduZWQpOworZXh0ZXJuIHZvaWQgdWZzX2ZyZWVfYmxvY2tzIChzdHJ1Y3QgaW5vZGUgKiwgdW5zaWduZWQsIHVuc2lnbmVkKTsKK2V4dGVybiB1bnNpZ25lZCB1ZnNfbmV3X2ZyYWdtZW50cyAoc3RydWN0IGlub2RlICosIF9fZnMzMiAqLCB1bnNpZ25lZCwgdW5zaWduZWQsIHVuc2lnbmVkLCBpbnQgKik7CisKKy8qIGN5bGluZGVyLmMgKi8KK2V4dGVybiBzdHJ1Y3QgdWZzX2NnX3ByaXZhdGVfaW5mbyAqIHVmc19sb2FkX2N5bGluZGVyIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdW5zaWduZWQpOworZXh0ZXJuIHZvaWQgdWZzX3B1dF9jeWxpbmRlciAoc3RydWN0IHN1cGVyX2Jsb2NrICosIHVuc2lnbmVkKTsKKworLyogZGlyLmMgKi8KK2V4dGVybiBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyB1ZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7CitleHRlcm4gaW50IHVmc19hZGRfbGluayAoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgaW5vZGUgKik7CitleHRlcm4gaW5vX3QgdWZzX2lub2RlX2J5X25hbWUoc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKik7CitleHRlcm4gaW50IHVmc19tYWtlX2VtcHR5KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgaW5vZGUgKik7CitleHRlcm4gc3RydWN0IHVmc19kaXJfZW50cnkgKiB1ZnNfZmluZF9lbnRyeSAoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiopOworZXh0ZXJuIGludCB1ZnNfZGVsZXRlX2VudHJ5IChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHVmc19kaXJfZW50cnkgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICopOworZXh0ZXJuIGludCB1ZnNfZW1wdHlfZGlyIChzdHJ1Y3QgaW5vZGUgKik7CitleHRlcm4gc3RydWN0IHVmc19kaXJfZW50cnkgKiB1ZnNfZG90ZG90IChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICoqKTsKK2V4dGVybiB2b2lkIHVmc19zZXRfbGluayhzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHVmc19kaXJfZW50cnkgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICosIHN0cnVjdCBpbm9kZSAqKTsKKworLyogZmlsZS5jICovCitleHRlcm4gc3RydWN0IGlub2RlX29wZXJhdGlvbnMgdWZzX2ZpbGVfaW5vZGVfb3BlcmF0aW9uczsKK2V4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVmc19maWxlX29wZXJhdGlvbnM7CisKK2V4dGVybiBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHVmc19hb3BzOworCisvKiBpYWxsb2MuYyAqLworZXh0ZXJuIHZvaWQgdWZzX2ZyZWVfaW5vZGUgKHN0cnVjdCBpbm9kZSAqaW5vZGUpOworZXh0ZXJuIHN0cnVjdCBpbm9kZSAqIHVmc19uZXdfaW5vZGUgKHN0cnVjdCBpbm9kZSAqLCBpbnQpOworCisvKiBpbm9kZS5jICovCitleHRlcm4gdTY0ICB1ZnNfZnJhZ19tYXAgKHN0cnVjdCBpbm9kZSAqLCBzZWN0b3JfdCk7CitleHRlcm4gdm9pZCB1ZnNfcmVhZF9pbm9kZSAoc3RydWN0IGlub2RlICopOworZXh0ZXJuIHZvaWQgdWZzX3B1dF9pbm9kZSAoc3RydWN0IGlub2RlICopOworZXh0ZXJuIGludCB1ZnNfd3JpdGVfaW5vZGUgKHN0cnVjdCBpbm9kZSAqLCBpbnQpOworZXh0ZXJuIGludCB1ZnNfc3luY19pbm9kZSAoc3RydWN0IGlub2RlICopOworZXh0ZXJuIHZvaWQgdWZzX2RlbGV0ZV9pbm9kZSAoc3RydWN0IGlub2RlICopOworZXh0ZXJuIHN0cnVjdCBidWZmZXJfaGVhZCAqIHVmc19nZXRmcmFnIChzdHJ1Y3QgaW5vZGUgKiwgdW5zaWduZWQsIGludCwgaW50ICopOworZXh0ZXJuIHN0cnVjdCBidWZmZXJfaGVhZCAqIHVmc19icmVhZCAoc3RydWN0IGlub2RlICosIHVuc2lnbmVkLCBpbnQsIGludCAqKTsKKworLyogbmFtZWkuYyAqLworZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdWZzX2Rpcl9vcGVyYXRpb25zOworICAgICAgICAKKy8qIHN1cGVyLmMgKi8KK2V4dGVybiB2b2lkIHVmc193YXJuaW5nIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIC4uLikgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAzLCA0KSkpOworZXh0ZXJuIHZvaWQgdWZzX2Vycm9yIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIC4uLikgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAzLCA0KSkpOworZXh0ZXJuIHZvaWQgdWZzX3BhbmljIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIC4uLikgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAzLCA0KSkpOworCisvKiBzeW1saW5rLmMgKi8KK2V4dGVybiBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyB1ZnNfZmFzdF9zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7CisKKy8qIHRydW5jYXRlLmMgKi8KK2V4dGVybiB2b2lkIHVmc190cnVuY2F0ZSAoc3RydWN0IGlub2RlICopOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCB1ZnNfc2JfaW5mbyAqVUZTX1NCKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJcmV0dXJuIHNiLT5zX2ZzX2luZm87Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHVmc19pbm9kZV9pbmZvICpVRlNfSShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXJldHVybiBjb250YWluZXJfb2YoaW5vZGUsIHN0cnVjdCB1ZnNfaW5vZGVfaW5mbywgdmZzX2lub2RlKTsKK30KKworI2VuZGlmCS8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9fTElOVVhfVUZTX0ZTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdWZzX2ZzX2kuaCBiL2luY2x1ZGUvbGludXgvdWZzX2ZzX2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTY2NWE5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC91ZnNfZnNfaS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9saW51eC91ZnNfZnNfaS5oCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk2CisgKiBBZHJpYW4gUm9kcmlndWV6IChhZHJpYW5AZnJhbmtsaW5zLXRvd2VyLnJ1dGdlcnMuZWR1KQorICogTGFib3JhdG9yeSBmb3IgQ29tcHV0ZXIgU2NpZW5jZSBSZXNlYXJjaCBDb21wdXRpbmcgRmFjaWxpdHkKKyAqIFJ1dGdlcnMsIFRoZSBTdGF0ZSBVbml2ZXJzaXR5IG9mIE5ldyBKZXJzZXkKKyAqCisgKiBOZVhUc3RlcCBzdXBwb3J0IGFkZGVkIG9uIEZlYnJ1YXJ5IDV0aCAxOTk4IGJ5CisgKiBOaWVscyBLcmlzdGlhbiBCZWNoIEplbnNlbiA8bmtiakBpbWFnZS5kaz4uCisgKi8KKworI2lmbmRlZiBfTElOVVhfVUZTX0ZTX0lfSAorI2RlZmluZSBfTElOVVhfVUZTX0ZTX0lfSAorCitzdHJ1Y3QgdWZzX2lub2RlX2luZm8geworCXVuaW9uIHsKKwkJX19mczMyCWlfZGF0YVsxNV07CisJCV9fdTgJaV9zeW1saW5rWzQqMTVdOworCQlfX2ZzNjQJdTJfaV9kYXRhWzE1XTsKKwl9IGlfdTE7CisJX191MzIJaV9mbGFnczsKKwlfX3UzMglpX2dlbjsKKwlfX3UzMglpX3NoYWRvdzsKKwlfX3UzMglpX3VudXNlZDE7CisJX191MzIJaV91bnVzZWQyOworCV9fdTMyCWlfb2VmdGZsYWc7CisJX191MTYJaV9vc3luYzsKKwlfX3UzMglpX2xhc3RmcmFnOworCXN0cnVjdCBpbm9kZSB2ZnNfaW5vZGU7Cit9OworCisjZW5kaWYgLyogX0xJTlVYX1VGU19GU19JX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdWZzX2ZzX3NiLmggYi9pbmNsdWRlL2xpbnV4L3Vmc19mc19zYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxYmU0YzIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3Vmc19mc19zYi5oCkBAIC0wLDAgKzEsMzggQEAKKy8qIAorICogIGxpbnV4L2luY2x1ZGUvbGludXgvdWZzX2ZzX3NiLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYKKyAqIEFkcmlhbiBSb2RyaWd1ZXogKGFkcmlhbkBmcmFua2xpbnMtdG93ZXIucnV0Z2Vycy5lZHUpCisgKiBMYWJvcmF0b3J5IGZvciBDb21wdXRlciBTY2llbmNlIFJlc2VhcmNoIENvbXB1dGluZyBGYWNpbGl0eQorICogUnV0Z2VycywgVGhlIFN0YXRlIFVuaXZlcnNpdHkgb2YgTmV3IEplcnNleQorICoKKyAqICRJZDogdWZzX2ZzX3NiLmgsdiAxLjggMTk5OC8wNS8wNiAxMjowNDo0MCBqaiBFeHAgJAorICoKKyAqIFdyaXRlIHN1cHBvcnQgYnkgRGFuaWVsIFBpcmtsIDxkYW5pZWwucGlya2xAZW1haWwuY3o+CisgKi8KKworI2lmbmRlZiBfX0xJTlVYX1VGU19GU19TQl9ICisjZGVmaW5lIF9fTElOVVhfVUZTX0ZTX1NCX0gKKworCisjZGVmaW5lIFVGU19NQVhfR1JPVVBfTE9BREVEIDgKKyNkZWZpbmUgVUZTX0NHTk9fRU1QVFkgKCh1bnNpZ25lZCktMSkKKworc3RydWN0IHVmc19zYl9wcml2YXRlX2luZm87CitzdHJ1Y3QgdWZzX2NnX3ByaXZhdGVfaW5mbzsKK3N0cnVjdCB1ZnNfY3N1bTsKKyNkZWZpbmUgVUZTX01BWENTQlVGUyAzMQorCitzdHJ1Y3QgdWZzX3NiX2luZm8geworCXN0cnVjdCB1ZnNfc2JfcHJpdmF0ZV9pbmZvICogc191c3BpOwkKKwlzdHJ1Y3QgdWZzX2NzdW0JKiBzX2NzcFtVRlNfTUFYQ1NCVUZTXTsKKwl1bnNpZ25lZCBzX2J5dGVzZXg7CisJdW5zaWduZWQgc19mbGFnczsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKiogc191Y2c7CisJc3RydWN0IHVmc19jZ19wcml2YXRlX2luZm8gKiBzX3VjcGlbVUZTX01BWF9HUk9VUF9MT0FERURdOyAKKwl1bnNpZ25lZCBzX2Nnbm9bVUZTX01BWF9HUk9VUF9MT0FERURdOworCXVuc2lnbmVkIHNob3J0IHNfY2dfbG9hZGVkOworCXVuc2lnbmVkIHNfbW91bnRfb3B0OworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VpbnB1dC5oIGIvaW5jbHVkZS9saW51eC91aW5wdXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzJjODIzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC91aW5wdXQuaApAQCAtMCwwICsxLDE2NyBAQAorI2lmbmRlZiBfX1VJTlBVVF9IXworI2RlZmluZSBfX1VJTlBVVF9IXworLyoKKyAqICBVc2VyIGxldmVsIGRyaXZlciBzdXBwb3J0IGZvciBpbnB1dCBzdWJzeXN0ZW0KKyAqCisgKiBIZWF2aWx5IGJhc2VkIG9uIGV2ZGV2LmMgYnkgVm9qdGVjaCBQYXZsaWsKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICoKKyAqIEF1dGhvcjogQXJpc3RldSBTZXJnaW8gUm96YW5za2kgRmlsaG8gPGFyaXNAY2F0aGVkcmFsbGFicy5vcmc+CisgKiAKKyAqIENoYW5nZXMvUmV2aXNpb25zOgorICoJMC4yCTE2LzEwLzIwMDQgKE1pY2FoIERvd3R5IDxtaWNhaEBuYXZpLmN4PikKKyAqCQktIGFkZGVkIGZvcmNlIGZlZWRiYWNrIHN1cHBvcnQKKyAqICAgICAgICAgICAgIC0gYWRkZWQgVUlfU0VUX1BIWVMKKyAqCTAuMQkyMC8wNi8yMDAyCisgKgkJLSBmaXJzdCBwdWJsaWMgdmVyc2lvbgorICovCisjaWZkZWYgX19LRVJORUxfXworI2RlZmluZSBVSU5QVVRfTUlOT1IJCTIyMworI2RlZmluZSBVSU5QVVRfTkFNRQkJInVpbnB1dCIKKyNkZWZpbmUgVUlOUFVUX0JVRkZFUl9TSVpFCTE2CisjZGVmaW5lIFVJTlBVVF9OVU1fUkVRVUVTVFMJMTYKKworLyogc3RhdGUgZmxhZ3MgPT4gYml0IGluZGV4IGZvciB7c2V0fGNsZWFyfHRlc3R9X2JpdCBvcHMgKi8KKyNkZWZpbmUgVUlTVF9DUkVBVEVECQkwCisKK3N0cnVjdCB1aW5wdXRfcmVxdWVzdCB7CisJaW50CQkJaWQ7CisJaW50CQkJY29kZTsJLyogVUlfRkZfVVBMT0FELCBVSV9GRl9FUkFTRSAqLworCisJaW50CQkJcmV0dmFsOworCXdhaXRfcXVldWVfaGVhZF90CXdhaXRxOworCWludAkJCWNvbXBsZXRlZDsKKworCXVuaW9uIHsKKwkJaW50CQllZmZlY3RfaWQ7CisJCXN0cnVjdCBmZl9lZmZlY3QqIGVmZmVjdDsKKwl9IHU7Cit9OworCitzdHJ1Y3QgdWlucHV0X2RldmljZSB7CisJc3RydWN0IGlucHV0X2RldgkqZGV2OworCXVuc2lnbmVkIGxvbmcJCXN0YXRlOworCXdhaXRfcXVldWVfaGVhZF90CXdhaXRxOworCXVuc2lnbmVkIGNoYXIJCXJlYWR5LAorCQkJCWhlYWQsCisJCQkJdGFpbDsKKwlzdHJ1Y3QgaW5wdXRfZXZlbnQJYnVmZltVSU5QVVRfQlVGRkVSX1NJWkVdOworCisJc3RydWN0IHVpbnB1dF9yZXF1ZXN0CSpyZXF1ZXN0c1tVSU5QVVRfTlVNX1JFUVVFU1RTXTsKKwl3YWl0X3F1ZXVlX2hlYWRfdAlyZXF1ZXN0c193YWl0cTsKKwlzdHJ1Y3Qgc2VtYXBob3JlCXJlcXVlc3RzX3NlbTsKK307CisjZW5kaWYJLyogX19LRVJORUxfXyAqLworCitzdHJ1Y3QgdWlucHV0X2ZmX3VwbG9hZCB7CisJaW50CQkJcmVxdWVzdF9pZDsKKwlpbnQJCQlyZXR2YWw7CisJc3RydWN0IGZmX2VmZmVjdAllZmZlY3Q7Cit9OworCitzdHJ1Y3QgdWlucHV0X2ZmX2VyYXNlIHsKKwlpbnQJCQlyZXF1ZXN0X2lkOworCWludAkJCXJldHZhbDsKKwlpbnQJCQllZmZlY3RfaWQ7Cit9OworCisvKiBpb2N0bCAqLworI2RlZmluZSBVSU5QVVRfSU9DVExfQkFTRQknVScKKyNkZWZpbmUgVUlfREVWX0NSRUFURQkJX0lPKFVJTlBVVF9JT0NUTF9CQVNFLCAxKQorI2RlZmluZSBVSV9ERVZfREVTVFJPWQkJX0lPKFVJTlBVVF9JT0NUTF9CQVNFLCAyKQorCisjZGVmaW5lIFVJX1NFVF9FVkJJVAkJX0lPVyhVSU5QVVRfSU9DVExfQkFTRSwgMTAwLCBpbnQpCisjZGVmaW5lIFVJX1NFVF9LRVlCSVQJCV9JT1coVUlOUFVUX0lPQ1RMX0JBU0UsIDEwMSwgaW50KQorI2RlZmluZSBVSV9TRVRfUkVMQklUCQlfSU9XKFVJTlBVVF9JT0NUTF9CQVNFLCAxMDIsIGludCkKKyNkZWZpbmUgVUlfU0VUX0FCU0JJVAkJX0lPVyhVSU5QVVRfSU9DVExfQkFTRSwgMTAzLCBpbnQpCisjZGVmaW5lIFVJX1NFVF9NU0NCSVQJCV9JT1coVUlOUFVUX0lPQ1RMX0JBU0UsIDEwNCwgaW50KQorI2RlZmluZSBVSV9TRVRfTEVEQklUCQlfSU9XKFVJTlBVVF9JT0NUTF9CQVNFLCAxMDUsIGludCkKKyNkZWZpbmUgVUlfU0VUX1NOREJJVAkJX0lPVyhVSU5QVVRfSU9DVExfQkFTRSwgMTA2LCBpbnQpCisjZGVmaW5lIFVJX1NFVF9GRkJJVAkJX0lPVyhVSU5QVVRfSU9DVExfQkFTRSwgMTA3LCBpbnQpCisjZGVmaW5lIFVJX1NFVF9QSFlTCQlfSU9XKFVJTlBVVF9JT0NUTF9CQVNFLCAxMDgsIGNoYXIqKQorCisjZGVmaW5lIFVJX0JFR0lOX0ZGX1VQTE9BRAlfSU9XUihVSU5QVVRfSU9DVExfQkFTRSwgMjAwLCBzdHJ1Y3QgdWlucHV0X2ZmX3VwbG9hZCkKKyNkZWZpbmUgVUlfRU5EX0ZGX1VQTE9BRAlfSU9XKFVJTlBVVF9JT0NUTF9CQVNFLCAyMDEsIHN0cnVjdCB1aW5wdXRfZmZfdXBsb2FkKQorI2RlZmluZSBVSV9CRUdJTl9GRl9FUkFTRQlfSU9XUihVSU5QVVRfSU9DVExfQkFTRSwgMjAyLCBzdHJ1Y3QgdWlucHV0X2ZmX2VyYXNlKQorI2RlZmluZSBVSV9FTkRfRkZfRVJBU0UJCV9JT1coVUlOUFVUX0lPQ1RMX0JBU0UsIDIwMywgc3RydWN0IHVpbnB1dF9mZl9lcmFzZSkKKworLyogVG8gd3JpdGUgYSBmb3JjZS1mZWVkYmFjay1jYXBhYmxlIGRyaXZlciwgdGhlIHVwbG9hZF9lZmZlY3QKKyAqIGFuZCBlcmFzZV9lZmZlY3QgY2FsbGJhY2tzIGluIGlucHV0X2RldiBtdXN0IGJlIGltcGxlbWVudGVkLgorICogVGhlIHVpbnB1dCBkcml2ZXIgd2lsbCBnZW5lcmF0ZSBhIGZha2UgaW5wdXQgZXZlbnQgd2hlbiBvbmUgb2YKKyAqIHRoZXNlIGNhbGxiYWNrcyBhcmUgaW52b2tlZC4gVGhlIHVzZXJzcGFjZSBjb2RlIHRoZW4gdXNlcworICogaW9jdGxzIHRvIHJldHJpZXZlIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBhbmQgc2VuZCB0aGUgcmV0dXJuIGNvZGUuCisgKiBUaGUgY2FsbGJhY2sgYmxvY2tzIHVudGlsIHRoaXMgcmV0dXJuIGNvZGUgaXMgc2VudC4KKyAqCisgKiBUaGUgZGVzY3JpYmVkIGNhbGxiYWNrIG1lY2hhbmlzbSBpcyBvbmx5IHVzZWQgaWYgRVZfRkYgaXMgc2V0LgorICogT3RoZXJ3aXNlLCBkZWZhdWx0IGltcGxlbWVudGF0aW9ucyBvZiB1cGxvYWRfZWZmZWN0IGFuZCBlcmFzZV9lZmZlY3QKKyAqIGFyZSB1c2VkLgorICoKKyAqIFRvIGltcGxlbWVudCB1cGxvYWRfZWZmZWN0KCk6CisgKiAgIDEuIFdhaXQgZm9yIGFuIGV2ZW50IHdpdGggdHlwZT09RVZfVUlOUFVUIGFuZCBjb2RlPT1VSV9GRl9VUExPQUQuCisgKiAgICAgIEEgcmVxdWVzdCBJRCB3aWxsIGJlIGdpdmVuIGluICd2YWx1ZScuCisgKiAgIDIuIEFsbG9jYXRlIGEgdWlucHV0X2ZmX3VwbG9hZCBzdHJ1Y3QsIGZpbGwgaW4gcmVxdWVzdF9pZCB3aXRoCisgKiAgICAgIHRoZSAndmFsdWUnIGZyb20gdGhlIEVWX1VJTlBVVCBldmVudC4KKyAqICAgMy4gSXNzdWUgYSBVSV9CRUdJTl9GRl9VUExPQUQgaW9jdGwsIGdpdmluZyBpdCB0aGUKKyAqICAgICAgdWlucHV0X2ZmX3VwbG9hZCBzdHJ1Y3QuIEl0IHdpbGwgYmUgZmlsbGVkIGluIHdpdGggdGhlCisgKiAgICAgIGZmX2VmZmVjdCBwYXNzZWQgdG8gdXBsb2FkX2VmZmVjdCgpLgorICogICA0LiBQZXJmb3JtIHRoZSBlZmZlY3QgdXBsb2FkLCBhbmQgcGxhY2UgdGhlIG1vZGlmaWVkIGZmX2VmZmVjdAorICogICAgICBhbmQgYSByZXR1cm4gY29kZSBiYWNrIGludG8gdGhlIHVpbnB1dF9mZl91cGxvYWQgc3RydWN0LgorICogICA1LiBJc3N1ZSBhIFVJX0VORF9GRl9VUExPQUQgaW9jdGwsIGFsc28gZ2l2aW5nIGl0IHRoZQorICogICAgICB1aW5wdXRfZmZfdXBsb2FkX2VmZmVjdCBzdHJ1Y3QuIFRoaXMgd2lsbCBjb21wbGV0ZSBleGVjdXRpb24KKyAqICAgICAgb2Ygb3VyIHVwbG9hZF9lZmZlY3QoKSBoYW5kbGVyLgorICoKKyAqIFRvIGltcGxlbWVudCBlcmFzZV9lZmZlY3QoKToKKyAqICAgMS4gV2FpdCBmb3IgYW4gZXZlbnQgd2l0aCB0eXBlPT1FVl9VSU5QVVQgYW5kIGNvZGU9PVVJX0ZGX0VSQVNFLgorICogICAgICBBIHJlcXVlc3QgSUQgd2lsbCBiZSBnaXZlbiBpbiAndmFsdWUnLgorICogICAyLiBBbGxvY2F0ZSBhIHVpbnB1dF9mZl9lcmFzZSBzdHJ1Y3QsIGZpbGwgaW4gcmVxdWVzdF9pZCB3aXRoCisgKiAgICAgIHRoZSAndmFsdWUnIGZyb20gdGhlIEVWX1VJTlBVVCBldmVudC4KKyAqICAgMy4gSXNzdWUgYSBVSV9CRUdJTl9GRl9FUkFTRSBpb2N0bCwgZ2l2aW5nIGl0IHRoZQorICogICAgICB1aW5wdXRfZmZfZXJhc2Ugc3RydWN0LiBJdCB3aWxsIGJlIGZpbGxlZCBpbiB3aXRoIHRoZQorICogICAgICBlZmZlY3QgSUQgcGFzc2VkIHRvIGVyYXNlX2VmZmVjdCgpLgorICogICA0LiBQZXJmb3JtIHRoZSBlZmZlY3QgZXJhc3VyZSwgYW5kIHBsYWNlIGEgcmV0dXJuIGNvZGUgYmFjaworICogICAgICBpbnRvIHRoZSB1aW5wdXRfZmZfZXJhc2Ugc3RydWN0LgorICogICAgICBhbmQgYSByZXR1cm4gY29kZSBiYWNrIGludG8gdGhlIHVpbnB1dF9mZl9lcmFzZSBzdHJ1Y3QuCisgKiAgIDUuIElzc3VlIGEgVUlfRU5EX0ZGX0VSQVNFIGlvY3RsLCBhbHNvIGdpdmluZyBpdCB0aGUKKyAqICAgICAgdWlucHV0X2ZmX2VyYXNlX2VmZmVjdCBzdHJ1Y3QuIFRoaXMgd2lsbCBjb21wbGV0ZSBleGVjdXRpb24KKyAqICAgICAgb2Ygb3VyIGVyYXNlX2VmZmVjdCgpIGhhbmRsZXIuCisgKi8KKworLyogVGhpcyBpcyB0aGUgbmV3IGV2ZW50IHR5cGUsIHVzZWQgb25seSBieSB1aW5wdXQuCisgKiAnY29kZScgaXMgVUlfRkZfVVBMT0FEIG9yIFVJX0ZGX0VSQVNFLCBhbmQgJ3ZhbHVlJworICogaXMgdGhlIHVuaXF1ZSByZXF1ZXN0IElELiBUaGlzIG51bWJlciB3YXMgcGlja2VkCisgKiBhcmJpdHJhcmlseSwgYWJvdmUgRVZfTUFYIChzaW5jZSB0aGUgaW5wdXQgc3lzdGVtCisgKiBuZXZlciBzZWVzIGl0KSBidXQgaW4gdGhlIHJhbmdlIG9mIGEgMTYtYml0IGludC4KKyAqLworI2RlZmluZSBFVl9VSU5QVVQJCTB4MDEwMQorI2RlZmluZSBVSV9GRl9VUExPQUQJCTEKKyNkZWZpbmUgVUlfRkZfRVJBU0UJCTIKKworI2lmbmRlZiBOQklUUworI2RlZmluZSBOQklUUyh4KSAoKCgoeCktMSkvKHNpemVvZihsb25nKSo4KSkrMSkKKyNlbmRpZgkvKiBOQklUUyAqLworCisjZGVmaW5lIFVJTlBVVF9NQVhfTkFNRV9TSVpFCTgwCitzdHJ1Y3QgdWlucHV0X3VzZXJfZGV2IHsKKwljaGFyIG5hbWVbVUlOUFVUX01BWF9OQU1FX1NJWkVdOworCXN0cnVjdCBpbnB1dF9pZCBpZDsKKyAgICAgICAgaW50IGZmX2VmZmVjdHNfbWF4OworICAgICAgICBpbnQgYWJzbWF4W0FCU19NQVggKyAxXTsKKyAgICAgICAgaW50IGFic21pbltBQlNfTUFYICsgMV07CisgICAgICAgIGludCBhYnNmdXp6W0FCU19NQVggKyAxXTsKKyAgICAgICAgaW50IGFic2ZsYXRbQUJTX01BWCArIDFdOworfTsKKyNlbmRpZgkvKiBfX1VJTlBVVF9IXyAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Vpby5oIGIvaW5jbHVkZS9saW51eC91aW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWY4YmJjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC91aW8uaApAQCAtMCwwICsxLDY2IEBACisjaWZuZGVmIF9fTElOVVhfVUlPX0gKKyNkZWZpbmUgX19MSU5VWF9VSU9fSAorCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKgorICoJQmVya2VsZXkgc3R5bGUgVUlPIHN0cnVjdHVyZXMJLQlBbGFuIENveCAxOTk0LgorICoKKyAqCQlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgkJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqCQlhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqCQkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKworLyogQSB3b3JkIG9mIHdhcm5pbmc6IE91ciB1aW8gc3RydWN0dXJlIHdpbGwgY2xhc2ggd2l0aCB0aGUgQyBsaWJyYXJ5IG9uZSAod2hpY2ggaXMgbm93IG9ic29sZXRlKS4gUmVtb3ZlIHRoZSBDCisgICBsaWJyYXJ5IG9uZSBmcm9tIHN5cy91aW8uaCBpZiB5b3UgaGF2ZSBhIHZlcnkgb2xkIGxpYnJhcnkgc2V0ICovCisKK3N0cnVjdCBpb3ZlYworeworCXZvaWQgX191c2VyICppb3ZfYmFzZTsJLyogQlNEIHVzZXMgY2FkZHJfdCAoMTAwMy4xZyByZXF1aXJlcyB2b2lkICopICovCisJX19rZXJuZWxfc2l6ZV90IGlvdl9sZW47IC8qIE11c3QgYmUgc2l6ZV90ICgxMDAzLjFnKSAqLworfTsKKworI2lmZGVmIF9fS0VSTkVMX18KKworc3RydWN0IGt2ZWMgeworCXZvaWQgKmlvdl9iYXNlOyAvKiBhbmQgdGhhdCBzaG91bGQgKm5ldmVyKiBob2xkIGEgdXNlcmxhbmQgcG9pbnRlciAqLworCXNpemVfdCBpb3ZfbGVuOworfTsKKworI2VuZGlmCisKKy8qCisgKglVSU9fTUFYSU9WIHNoYWxsIGJlIGF0IGxlYXN0IDE2IDEwMDMuMWcgKDUuNC4xLjEpCisgKi8KKyAKKyNkZWZpbmUgVUlPX0ZBU1RJT1YJOAorI2RlZmluZSBVSU9fTUFYSU9WCTEwMjQKKyNpZiAwCisjZGVmaW5lIFVJT19NQVhJT1YJMTYJLyogTWF4aW11bSBpb3ZlYydzIGluIG9uZSBvcGVyYXRpb24gCisJCQkJICAgMTYgbWF0Y2hlcyBCU0QgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQmVnIHBhcmRvbjogQlNEIGhhcyAxMDI0IC0tQU5LICovCisjZW5kaWYKKworLyoKKyAqIFRvdGFsIG51bWJlciBvZiBieXRlcyBjb3ZlcmVkIGJ5IGFuIGlvdmVjLgorICoKKyAqIE5PVEUgdGhhdCBpdCBpcyBub3Qgc2FmZSB0byB1c2UgdGhpcyBmdW5jdGlvbiB1bnRpbCBhbGwgdGhlIGlvdmVjJ3MKKyAqIHNlZ21lbnQgbGVuZ3RocyBoYXZlIGJlZW4gdmFsaWRhdGVkLiAgQmVjYXVzZSB0aGUgaW5kaXZpZHVhbCBsZW5ndGhzIGNhbgorICogb3ZlcmZsb3cgYSBzaXplX3Qgd2hlbiBhZGRlZCB0b2dldGhlci4KKyAqLworc3RhdGljIGlubGluZSBzaXplX3QgaW92X2xlbmd0aChjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwgdW5zaWduZWQgbG9uZyBucl9zZWdzKQoreworCXVuc2lnbmVkIGxvbmcgc2VnOworCXNpemVfdCByZXQgPSAwOworCisJZm9yIChzZWcgPSAwOyBzZWcgPCBucl9zZWdzOyBzZWcrKykKKwkJcmV0ICs9IGlvdltzZWddLmlvdl9sZW47CisJcmV0dXJuIHJldDsKK30KKwordW5zaWduZWQgbG9uZyBpb3Zfc2hvcnRlbihzdHJ1Y3QgaW92ZWMgKmlvdiwgdW5zaWduZWQgbG9uZyBucl9zZWdzLCBzaXplX3QgdG8pOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdWx0cmFzb3VuZC5oIGIvaW5jbHVkZS9saW51eC91bHRyYXNvdW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI3NzAzZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvdWx0cmFzb3VuZC5oCkBAIC0wLDAgKzEsMTAzIEBACisjaWZuZGVmIF9VTFRSQVNPVU5EX0hfCisjZGVmaW5lIF9VTFRSQVNPVU5EX0hfCisvKgorICoJdWx0cmFzb3VuZC5oIC0gTWFjcm9zIGZvciBwcm9ncmFtbWluZyB0aGUgR3JhdmlzIFVsdHJhc291bmQKKyAqCQkJVGhlc2UgbWFjcm9zIGFyZSBleHRyZW1lbHkgZGV2aWNlIGRlcGVuZGVudAorICoJCQlhbmQgbm90IHBvcnRhYmxlLgorICovCisvKgorICogQ29weXJpZ2h0IChDKSBieSBIYW5udSBTYXZvbGFpbmVuIDE5OTMtMTk5NworICoKKyAqIE9TUy9GcmVlIGZvciBMaW51eCBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UgKEdQTCkKKyAqIFZlcnNpb24gMiAoSnVuZSAxOTkxKS4gU2VlIHRoZSAiQ09QWUlORyIgZmlsZSBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc29mdHdhcmUKKyAqIGZvciBtb3JlIGluZm8uCisgKi8KKworCisvKgorICoJUHJpdmF0ZSBldmVudHMgZm9yIEdyYXZpcyBVbHRyYXNvdW5kIChHVVMpCisgKgorICoJRm9ybWF0OgorICoJCWJ5dGUgMCAJCS0gU0VRX1BSSVZBVEUgKDB4ZmUpCisgKgkJYnl0ZSAxIAkJLSBTeW50aGVzaXplciBkZXZpY2UgbnVtYmVyICgwLU4pCisgKgkJYnl0ZSAyIAkJLSBDb21tYW5kIChzZWUgYmVsb3cpCisgKgkJYnl0ZSAzIAkJLSBWb2ljZSBudW1iZXIgKDAtMzEpCisgKgkJYnl0ZXMgNCBhbmQgNQktIHBhcmFtZXRlciBQMSAodW5zaWduZWQgc2hvcnQpCisgKgkJYnl0ZXMgNiBhbmQgNwktIHBhcmFtZXRlciBQMiAodW5zaWduZWQgc2hvcnQpCisgKgorICoJQ29tbWFuZHM6CisgKgkJRWFjaCBjb21tYW5kIGFmZmVjdHMgb25lIHZvaWNlIGRlZmluZWQgaW4gYnl0ZSAzLgorICoJCVVudXNlZCBwYXJhbWV0ZXJzIChQMSBhbmQvb3IgUDIgKk1VU1QqIGJlIGluaXRpYWxpemVkIHRvIHplcm8pLgorICoJCV9HVVNfTlVNVk9JQ0VTCS0gU2V0cyBtYXguIG51bWJlciBvZiBjb25jdXJyZW50IHZvaWNlcyAoUDE9MTQtMzEsIGRlZmF1bHQgMTYpCisgKgkJX0dVU19WT0lDRVNBTVBMRS0gKioqKioqKioqKioqIE9CU09MRVRFICoqKioqKioqKioqKioKKyAqCQlfR1VTX1ZPSUNFT04JLSBTdGFydHMgdm9pY2UgKFAxPXZvaWNlIG1vZGUpCisgKgkJX0dVU19WT0lDRU9GRgktIFN0b3BzIHZvaWNlIChubyBwYXJhbWV0ZXJzKQorICoJCV9HVVNfVk9JQ0VGQURFCS0gU3RvcHMgdGhlIHZvaWNlIHNtb290aGx5LgorICoJCV9HVVNfVk9JQ0VNT0RFCS0gQWx0ZXJzIHRoZSB2b2ljZSBtb2RlLCBkb24ndCBzdGFydCBvciBzdG9wIHZvaWNlIChQMT12b2ljZSBtb2RlKQorICoJCV9HVVNfVk9JQ0VCQUxBCS0gU2V0cyB2b2ljZSBiYWxlbmNlIChQMSwgMD1sZWZ0LCA3PW1pZGRsZSBhbmQgMTU9cmlnaHQsIGRlZmF1bHQgNykKKyAqCQlfR1VTX1ZPSUNFRlJFUQktIFNldHMgdm9pY2UgKHNhbXBsZSkgcGxheWJhY2sgZnJlcXVlbmN5IChQMT1IeikKKyAqCQlfR1VTX1ZPSUNFVk9MCS0gU2V0cyB2b2ljZSB2b2x1bWUgKFAxPXZvbHVtZSwgMHhmZmY9bWF4LCAweGVmZj1oYWxmLCAweDAwMD1vZmYpCisgKgkJX0dVU19WT0lDRVZPTDIJLSBTZXRzIHZvaWNlIHZvbHVtZSAoUDE9dm9sdW1lLCAweGZmZj1tYXgsIDB4ZWZmPWhhbGYsIDB4MDAwPW9mZikKKyAqCQkJCSAgKExpa2UgR1VTX1ZPSUNFVk9MIGJ1dCBkb2Vzbid0IGNoYW5nZSB0aGUgaHcKKyAqCQkJCSAgdm9sdW1lLiBJdCBqdXN0IHVwZGF0ZXMgdm9sdW1lIGluIHRoZSB2b2ljZSB0YWJsZSkuCisgKgorICoJCV9HVVNfUkFNUFJBTkdFCS0gU2V0cyBsaW1pdHMgZm9yIHZvbHVtZSByYW1waW5nIChQMT1sb3cgdm9sdW1lLCBQMj1oaWdoIHZvbHVtZSkKKyAqCQlfR1VTX1JBTVBSQVRFCS0gU2V0cyB0aGUgc3BlZWQgZm9yIHZvbHVtZSByYW1waW5nIChQMT1zY2FsZSwgUDI9cmF0ZSkKKyAqCQlfR1VTX1JBTVBNT0RFCS0gU2V0cyB0aGUgdm9sdW1lIHJhbXBpbmcgbW9kZSAoUDE9cmFtcGluZyBtb2RlKQorICoJCV9HVVNfUkFNUE9OCS0gU3RhcnRzIHZvbHVtZSByYW1waW5nIChubyBwYXJhbWV0ZXJzKQorICoJCV9HVVNfUkFNUE9GRgktIFN0b3BzIHZvbHVtZSByYW1waW5nIChubyBwYXJhbWV0ZXJzKQorICoJCV9HVVNfVk9MVU1FX1NDQUxFIC0gQ2hhbmdlcyB0aGUgdm9sdW1lIGNhbGN1bGF0aW9uIGNvbnN0YW50cworICoJCQkJICBmb3IgYWxsIHZvaWNlcy4KKyAqLworCisjZGVmaW5lIF9HVVNfTlVNVk9JQ0VTCQkweDAwCisjZGVmaW5lIF9HVVNfVk9JQ0VTQU1QTEUJMHgwMQkvKiBPQlNPTEVURSAqLworI2RlZmluZSBfR1VTX1ZPSUNFT04JCTB4MDIKKyNkZWZpbmUgX0dVU19WT0lDRU9GRgkJMHgwMworI2RlZmluZSBfR1VTX1ZPSUNFTU9ERQkJMHgwNAorI2RlZmluZSBfR1VTX1ZPSUNFQkFMQQkJMHgwNQorI2RlZmluZSBfR1VTX1ZPSUNFRlJFUQkJMHgwNgorI2RlZmluZSBfR1VTX1ZPSUNFVk9MCQkweDA3CisjZGVmaW5lIF9HVVNfUkFNUFJBTkdFCQkweDA4CisjZGVmaW5lIF9HVVNfUkFNUFJBVEUJCTB4MDkKKyNkZWZpbmUgX0dVU19SQU1QTU9ERQkJMHgwYQorI2RlZmluZSBfR1VTX1JBTVBPTgkJMHgwYgorI2RlZmluZSBfR1VTX1JBTVBPRkYJCTB4MGMKKyNkZWZpbmUgX0dVU19WT0lDRUZBREUJCTB4MGQKKyNkZWZpbmUgX0dVU19WT0xVTUVfU0NBTEUJMHgwZQorI2RlZmluZSBfR1VTX1ZPSUNFVk9MMgkJMHgwZgorI2RlZmluZSBfR1VTX1ZPSUNFX1BPUwkJMHgxMAorCisvKgorICoJR1VTIEFQSSBtYWNyb3MKKyAqLworCisjZGVmaW5lIF9HVVNfQ01EKGNobiwgdm9pY2UsIGNtZCwgcDEsIHAyKSBcCisJCQkJCXtfU0VRX05FRURCVUYoOCk7IF9zZXFidWZbX3NlcWJ1ZnB0cl0gPSBTRVFfUFJJVkFURTtcCisJCQkJCV9zZXFidWZbX3NlcWJ1ZnB0cisxXSA9IChjaG4pOyBfc2VxYnVmW19zZXFidWZwdHIrMl0gPSBjbWQ7XAorCQkJCQlfc2VxYnVmW19zZXFidWZwdHIrM10gPSB2b2ljZTtcCisJCQkJCSoodW5zaWduZWQgc2hvcnQqKSZfc2VxYnVmW19zZXFidWZwdHIrNF0gPSBwMTtcCisJCQkJCSoodW5zaWduZWQgc2hvcnQqKSZfc2VxYnVmW19zZXFidWZwdHIrNl0gPSBwMjtcCisJCQkJCV9TRVFfQURWQlVGKDgpO30KKworI2RlZmluZSBHVVNfTlVNVk9JQ0VTKGNobiwgcDEpCQkJX0dVU19DTUQoY2huLCAwLCBfR1VTX05VTVZPSUNFUywgKHAxKSwgMCkKKyNkZWZpbmUgR1VTX1ZPSUNFU0FNUExFKGNobiwgdm9pY2UsIHAxKQkJX0dVU19DTUQoY2huLCB2b2ljZSwgX0dVU19WT0lDRVNBTVBMRSwgKHAxKSwgMCkJLyogT0JTT0xFVEUgKi8KKyNkZWZpbmUgR1VTX1ZPSUNFT04oY2huLCB2b2ljZSwgcDEpCQlfR1VTX0NNRChjaG4sIHZvaWNlLCBfR1VTX1ZPSUNFT04sIChwMSksIDApCisjZGVmaW5lIEdVU19WT0lDRU9GRihjaG4sIHZvaWNlKQkJX0dVU19DTUQoY2huLCB2b2ljZSwgX0dVU19WT0lDRU9GRiwgMCwgMCkKKyNkZWZpbmUgR1VTX1ZPSUNFRkFERShjaG4sIHZvaWNlKQkJX0dVU19DTUQoY2huLCB2b2ljZSwgX0dVU19WT0lDRUZBREUsIDAsIDApCisjZGVmaW5lIEdVU19WT0lDRU1PREUoY2huLCB2b2ljZSwgcDEpCQlfR1VTX0NNRChjaG4sIHZvaWNlLCBfR1VTX1ZPSUNFTU9ERSwgKHAxKSwgMCkKKyNkZWZpbmUgR1VTX1ZPSUNFQkFMQShjaG4sIHZvaWNlLCBwMSkJCV9HVVNfQ01EKGNobiwgdm9pY2UsIF9HVVNfVk9JQ0VCQUxBLCAocDEpLCAwKQorI2RlZmluZSBHVVNfVk9JQ0VGUkVRKGNobiwgdm9pY2UsIHApCQlfR1VTX0NNRChjaG4sIHZvaWNlLCBfR1VTX1ZPSUNFRlJFUSwgXAorCQkJCQkJCShwKSAmIDB4ZmZmZiwgKChwKSA+PiAxNikgJiAweGZmZmYpCisjZGVmaW5lIEdVU19WT0lDRVZPTChjaG4sIHZvaWNlLCBwMSkJCV9HVVNfQ01EKGNobiwgdm9pY2UsIF9HVVNfVk9JQ0VWT0wsIChwMSksIDApCisjZGVmaW5lIEdVU19WT0lDRVZPTDIoY2huLCB2b2ljZSwgcDEpCQlfR1VTX0NNRChjaG4sIHZvaWNlLCBfR1VTX1ZPSUNFVk9MMiwgKHAxKSwgMCkKKyNkZWZpbmUgR1VTX1JBTVBSQU5HRShjaG4sIHZvaWNlLCBsb3csIGhpZ2gpCV9HVVNfQ01EKGNobiwgdm9pY2UsIF9HVVNfUkFNUFJBTkdFLCAobG93KSwgKGhpZ2gpKQorI2RlZmluZSBHVVNfUkFNUFJBVEUoY2huLCB2b2ljZSwgcDEsIHAyKQlfR1VTX0NNRChjaG4sIHZvaWNlLCBfR1VTX1JBTVBSQVRFLCAocDEpLCAocDIpKQorI2RlZmluZSBHVVNfUkFNUE1PREUoY2huLCB2b2ljZSwgcDEpCQlfR1VTX0NNRChjaG4sIHZvaWNlLCBfR1VTX1JBTVBNT0RFLCAocDEpLCAwKQorI2RlZmluZSBHVVNfUkFNUE9OKGNobiwgdm9pY2UsIHAxKQkJX0dVU19DTUQoY2huLCB2b2ljZSwgX0dVU19SQU1QT04sIChwMSksIDApCisjZGVmaW5lIEdVU19SQU1QT0ZGKGNobiwgdm9pY2UpCQkJX0dVU19DTUQoY2huLCB2b2ljZSwgX0dVU19SQU1QT0ZGLCAwLCAwKQorI2RlZmluZSBHVVNfVk9MVU1FX1NDQUxFKGNobiwgdm9pY2UsIHAxLCBwMikJX0dVU19DTUQoY2huLCB2b2ljZSwgX0dVU19WT0xVTUVfU0NBTEUsIChwMSksIChwMikpCisjZGVmaW5lIEdVU19WT0lDRV9QT1MoY2huLCB2b2ljZSwgcCkJCV9HVVNfQ01EKGNobiwgdm9pY2UsIF9HVVNfVk9JQ0VfUE9TLCBcCisJCQkJCQkJKHApICYgMHhmZmZmLCAoKHApID4+IDE2KSAmIDB4ZmZmZikKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VtZW0uaCBiL2luY2x1ZGUvbGludXgvdW1lbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzNmViZmMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3VtZW0uaApAQCAtMCwwICsxLDEzOCBAQAorCisvKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIGRlZmluZXMgZm9yIHRoZQorICogICBNaWNybyBNZW1vcnkgTU01NDE1CisgKiBmYW1pbHkgUENJIE1lbW9yeSBNb2R1bGUgd2l0aCBCYXR0ZXJ5IEJhY2t1cC4KKyAqCisgKiBDb3B5cmlnaHQgTWljcm8gTWVtb3J5IElOQyAyMDAxLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFJlbGVhc2UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRSB2ZXJzaW9uIDIuCisgKiBTZWUgdGhlIGZpbGUgQ09QWUlORy4KKyAqLworCisjaWZuZGVmIF9EUklWRVJTX0JMT0NLX01NX0gKKyNkZWZpbmUgX0RSSVZFUlNfQkxPQ0tfTU1fSAorCisKKyNkZWZpbmUgSVJRX1RJTUVPVVQgKDEgKiBIWikKKworLyogQ1NSIHJlZ2lzdGVyIGRlZmluaXRpb24gKi8KKyNkZWZpbmUgTUVNQ1RSTFNUQVRVU19NQUdJQwkweDAwCisjZGVmaW5lICBNTV9NQUdJQ19WQUxVRQkJKHVuc2lnbmVkIGNoYXIpMHg1OQorCisjZGVmaW5lIE1FTUNUUkxTVEFUVVNfQkFUVEVSWQkweDA0CisjZGVmaW5lICBCQVRURVJZXzFfRElTQUJMRUQJMHgwMQorI2RlZmluZSAgQkFUVEVSWV8xX0ZBSUxVUkUJMHgwMgorI2RlZmluZSAgQkFUVEVSWV8yX0RJU0FCTEVECTB4MDQKKyNkZWZpbmUgIEJBVFRFUllfMl9GQUlMVVJFCTB4MDgKKworI2RlZmluZSBNRU1DVFJMU1RBVFVTX01FTU9SWQkweDA3CisjZGVmaW5lICBNRU1fMTI4X01CCQkweGZlCisjZGVmaW5lICBNRU1fMjU2X01CCQkweGZjCisjZGVmaW5lICBNRU1fNTEyX01CCQkweGY4CisjZGVmaW5lICBNRU1fMV9HQgkJMHhmMAorI2RlZmluZSAgTUVNXzJfR0IJCTB4ZTAKKworI2RlZmluZSBNRU1DVFJMQ01EX0xFRENUUkwJMHgwOAorI2RlZmluZSAgTEVEX1JFTU9WRQkJMgorI2RlZmluZSAgTEVEX0ZBVUxUCQk0CisjZGVmaW5lICBMRURfUE9XRVIJCTYKKyNkZWZpbmUJIExFRF9GTElQCQkyNTUKKyNkZWZpbmUgIExFRF9PRkYJCTB4MDAKKyNkZWZpbmUgIExFRF9PTgkJCTB4MDEKKyNkZWZpbmUgIExFRF9GTEFTSF8zXzUJCTB4MDIKKyNkZWZpbmUgIExFRF9GTEFTSF83XzAJCTB4MDMKKyNkZWZpbmUgIExFRF9QT1dFUl9PTgkJMHgwMAorI2RlZmluZSAgTEVEX1BPV0VSX09GRgkJMHgwMQorI2RlZmluZSAgVVNFUl9CSVQxCQkweDAxCisjZGVmaW5lICBVU0VSX0JJVDIJCTB4MDIKKworI2RlZmluZSBNRU1PUllfSU5JVElBTElaRUQJVVNFUl9CSVQxCisKKyNkZWZpbmUgTUVNQ1RSTENNRF9FUlJDVFJMCTB4MEMKKyNkZWZpbmUgIEVEQ19OT05FX0RFRkFVTFQJMHgwMAorI2RlZmluZSAgRURDX05PTkUJCTB4MDEKKyNkZWZpbmUgIEVEQ19TVE9SRV9SRUFECQkweDAyCisjZGVmaW5lICBFRENfU1RPUkVfQ09SUkVDVAkweDAzCisKKyNkZWZpbmUgTUVNQ1RSTENNRF9FUlJDTlQJMHgwRAorI2RlZmluZSBNRU1DVFJMQ01EX0VSUlNUQVRVUwkweDBFCisKKyNkZWZpbmUgRVJST1JfREFUQV9MT0cJCTB4MjAKKyNkZWZpbmUgRVJST1JfQUREUl9MT0cJCTB4MjgKKyNkZWZpbmUgRVJST1JfQ09VTlQJCTB4M0QKKyNkZWZpbmUgRVJST1JfU1lORFJPTUUJCTB4M0UKKyNkZWZpbmUgRVJST1JfQ0hFQ0sJCTB4M0YKKworI2RlZmluZSBETUFfUENJX0FERFIJCTB4NDAKKyNkZWZpbmUgRE1BX0xPQ0FMX0FERFIJCTB4NDgKKyNkZWZpbmUgRE1BX1RSQU5TRkVSX1NJWkUJMHg1MAorI2RlZmluZSBETUFfREVTQ1JJUFRPUl9BRERSCTB4NTgKKyNkZWZpbmUgRE1BX1NFTUFQSE9SRV9BRERSCTB4NjAKKyNkZWZpbmUgRE1BX1NUQVRVU19DVFJMCQkweDY4CisjZGVmaW5lICBETUFTQ1JfR08JCTB4MDAwMDEKKyNkZWZpbmUgIERNQVNDUl9UUkFOU0ZFUl9SRUFECTB4MDAwMDIKKyNkZWZpbmUgIERNQVNDUl9DSEFJTl9FTgkweDAwMDA0CisjZGVmaW5lICBETUFTQ1JfU0VNX0VOCQkweDAwMDEwCisjZGVmaW5lICBETUFTQ1JfRE1BX0NPTVBfRU4JMHgwMDAyMAorI2RlZmluZSAgRE1BU0NSX0NIQUlOX0NPTVBfRU4JMHgwMDA0MAorI2RlZmluZSAgRE1BU0NSX0VSUl9JTlRfRU4JMHgwMDA4MAorI2RlZmluZSAgRE1BU0NSX1BBUklUWV9JTlRfRU4JMHgwMDEwMAorI2RlZmluZSAgRE1BU0NSX0FOWV9FUlIJCTB4MDA4MDAKKyNkZWZpbmUgIERNQVNDUl9NQkVfRVJSCQkweDAxMDAwCisjZGVmaW5lICBETUFTQ1JfUEFSSVRZX0VSUl9SRVAJMHgwMjAwMAorI2RlZmluZSAgRE1BU0NSX1BBUklUWV9FUlJfREVUCTB4MDQwMDAKKyNkZWZpbmUgIERNQVNDUl9TWVNURU1fRVJSX1NJRwkweDA4MDAwCisjZGVmaW5lICBETUFTQ1JfVEFSR0VUX0FCVAkweDEwMDAwCisjZGVmaW5lICBETUFTQ1JfTUFTVEVSX0FCVAkweDIwMDAwCisjZGVmaW5lICBETUFTQ1JfRE1BX0NPTVBMRVRFCTB4NDAwMDAKKyNkZWZpbmUgIERNQVNDUl9DSEFJTl9DT01QTEVURQkweDgwMDAwCisKKy8qIAorMy5TT01FIFBDcyBIQVZFIEhPU1QgQlJJREdFUyBXSElDSCBBUFBBUkVOVExZIERPIE5PVCBDT1JSRUNUTFkgSEFORExFIAorUkVBRC1MSU5FICgweEUpIE9SIFJFQUQtTVVMVElQTEUgKDB4QykgUENJIENPTU1BTkQgQ09ERVMgRFVSSU5HIERNQSAKK1RSQU5TRkVSUy4gSU4gT1RIRVIgU1lTVEVNUyBUSEVTRSBDT01NQU5EIENPREVTIFdJTEwgQ0FVU0UgVEhFIEhPU1QgQlJJREdFIAorVE8gQUxMT1cgTE9OR0VSIEJVUlNUUyBEVVJJTkcgRE1BIFJFQUQgT1BFUkFUSU9OUy4gVEhFIFVQUEVSIEZPVVIgQklUUyAKKygzMS4uMjgpIE9GIFRIRSBETUEgQ1NSIEhBVkUgQkVFTiBNQURFIFBST0dSQU1NQUJMRSwgU08gVEhBVCBFSVRIRVIgQSAweDYsIAorQU4gMHhFIE9SIEEgMHhDIENBTiBCRSBXUklUVEVOIFRPIFRIRU0gVE8gU0VUIFRIRSBDT01NQU5EIENPREUgVVNFRCBEVVJJTkcgCitETUEgUkVBRCBPUEVSQVRJT05TLgorKi8KKyNkZWZpbmUgICAgICAgIERNQVNDUl9SRUFEICAgMHg2MDAwMDAwMAorI2RlZmluZSAgICAgICAgRE1BU0NSX1JFQURMSU5FICAgMHhFMDAwMDAwMAorI2RlZmluZSAgICAgICAgRE1BU0NSX1JFQURNVUxUSSAgIDB4QzAwMDAwMDAKKworCisjZGVmaW5lIERNQVNDUl9FUlJPUl9NQVNLCShETUFTQ1JfTUFTVEVSX0FCVCB8IERNQVNDUl9UQVJHRVRfQUJUIHwgRE1BU0NSX1NZU1RFTV9FUlJfU0lHIHwgRE1BU0NSX1BBUklUWV9FUlJfREVUIHwgRE1BU0NSX01CRV9FUlIgfCBETUFTQ1JfQU5ZX0VSUikKKyNkZWZpbmUgRE1BU0NSX0hBUkRfRVJST1IJKERNQVNDUl9NQVNURVJfQUJUIHwgRE1BU0NSX1RBUkdFVF9BQlQgfCBETUFTQ1JfU1lTVEVNX0VSUl9TSUcgfCBETUFTQ1JfUEFSSVRZX0VSUl9ERVQgfCBETUFTQ1JfTUJFX0VSUikKKworI2RlZmluZSBXSU5ET1dNQVBfV0lOTlVNCTB4N0IKKworI2RlZmluZSBETUFfUkVBRF9GUk9NX0hPU1QgMAorI2RlZmluZSBETUFfV1JJVEVfVE9fSE9TVCAxCisKK3N0cnVjdCBtbV9kbWFfZGVzYyB7CisJX19sZTY0CXBjaV9hZGRyOworCV9fbGU2NAlsb2NhbF9hZGRyOworCV9fbGUzMgl0cmFuc2Zlcl9zaXplOworCXUzMgl6ZXJvMTsKKwlfX2xlNjQJbmV4dF9kZXNjX2FkZHI7CisJX19sZTY0CXNlbV9hZGRyOworCV9fbGUzMgljb250cm9sX2JpdHM7CisJdTMyCXplcm8yOworCisJZG1hX2FkZHJfdCBkYXRhX2RtYV9oYW5kbGU7CisKKwkvKiBDb3B5IG9mIHRoZSBiaXRzICovCisJX19sZTY0CXNlbV9jb250cm9sX2JpdHM7Cit9IF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKTsKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX01JQ1JPX01FTU9SWQkJMHgxMzMyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUlDUk9fTUVNT1JZXzU0MTVDTgkweDU0MTUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NSUNST19NRU1PUllfNTQyNUNOCTB4NTQyNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01JQ1JPX01FTU9SWV82MTU1CQkweDYxNTUKKworLyogYml0cyBmb3IgY2FyZC0+ZmxhZ3MgKi8KKyNkZWZpbmUgVU1fRkxBR19ETUFfSU5fUkVHUwkJMQorI2RlZmluZSBVTV9GTEFHX05PX0JZVEVfU1RBVFVTCQkyCisjZGVmaW5lIFVNX0ZMQUdfTk9fQkFUVFJFRwkJNAorI2RlZmluZQlVTV9GTEFHX05PX0JBVFQJCQk4CisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdW4uaCBiL2luY2x1ZGUvbGludXgvdW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTU2MWM1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC91bi5oCkBAIC0wLDAgKzEsMTEgQEAKKyNpZm5kZWYgX0xJTlVYX1VOX0gKKyNkZWZpbmUgX0xJTlVYX1VOX0gKKworI2RlZmluZSBVTklYX1BBVEhfTUFYCTEwOAorCitzdHJ1Y3Qgc29ja2FkZHJfdW4geworCXNhX2ZhbWlseV90IHN1bl9mYW1pbHk7CS8qIEFGX1VOSVggKi8KKwljaGFyIHN1bl9wYXRoW1VOSVhfUEFUSF9NQVhdOwkvKiBwYXRobmFtZSAqLworfTsKKworI2VuZGlmIC8qIF9MSU5VWF9VTl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VuaXN0ZC5oIGIvaW5jbHVkZS9saW51eC91bmlzdGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGVkOTgzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC91bmlzdGQuaApAQCAtMCwwICsxLDExIEBACisjaWZuZGVmIF9MSU5VWF9VTklTVERfSF8KKyNkZWZpbmUgX0xJTlVYX1VOSVNURF9IXworCitleHRlcm4gaW50IGVycm5vOworCisvKgorICogSW5jbHVkZSBtYWNoaW5lIHNwZWNpZmljIHN5c2NhbGxYIG1hY3JvcworICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorCisjZW5kaWYgLyogX0xJTlVYX1VOSVNURF9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IuaCBiL2luY2x1ZGUvbGludXgvdXNiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk2NzI4NAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvdXNiLmgKQEAgLTAsMCArMSwxMTU3IEBACisjaWZuZGVmIF9fTElOVVhfVVNCX0gKKyNkZWZpbmUgX19MSU5VWF9VU0JfSAorCisjaW5jbHVkZSA8bGludXgvbW9kX2RldmljZXRhYmxlLmg+CisjaW5jbHVkZSA8bGludXgvdXNiX2NoOS5oPgorCisjZGVmaW5lIFVTQl9NQUpPUgkJCTE4MAorCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPiAgICAgICAgLyogZm9yIC1FTk9ERVYgKi8KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgkvKiBmb3IgbWRlbGF5KCkgKi8KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4JLyogZm9yIGluX2ludGVycnVwdCgpICovCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgkJLyogZm9yIHN0cnVjdCBsaXN0X2hlYWQgKi8KKyNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CQkvKiBmb3Igc3RydWN0IGtyZWYgKi8KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4JLyogZm9yIHN0cnVjdCBkZXZpY2UgKi8KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgkJLyogZm9yIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKi8KKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CS8qIGZvciBzdHJ1Y3QgY29tcGxldGlvbiAqLworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CS8qIGZvciBjdXJyZW50ICYmIHNjaGVkdWxlX3RpbWVvdXQgKi8KKworc3RydWN0IHVzYl9kZXZpY2U7CitzdHJ1Y3QgdXNiX2RyaXZlcjsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIEhvc3Qtc2lkZSB3cmFwcGVycyBmb3Igc3RhbmRhcmQgVVNCIGRlc2NyaXB0b3JzIC4uLiB0aGVzZSBhcmUgcGFyc2VkCisgKiBmcm9tIHRoZSBkYXRhIHByb3ZpZGVkIGJ5IGRldmljZXMuICBQYXJzaW5nIHR1cm5zIHRoZW0gZnJvbSBhIGZsYXQKKyAqIHNlcXVlbmNlIG9mIGRlc2NyaXB0b3JzIGludG8gYSBoaWVyYXJjaHk6CisgKgorICogIC0gZGV2aWNlcyBoYXZlIG9uZSAodXN1YWxseSkgb3IgbW9yZSBjb25maWdzOworICogIC0gY29uZmlncyBoYXZlIG9uZSAob2Z0ZW4pIG9yIG1vcmUgaW50ZXJmYWNlczsKKyAqICAtIGludGVyZmFjZXMgaGF2ZSBvbmUgKHVzdWFsbHkpIG9yIG1vcmUgc2V0dGluZ3M7CisgKiAgLSBlYWNoIGludGVyZmFjZSBzZXR0aW5nIGhhcyB6ZXJvIG9yICh1c3VhbGx5KSBtb3JlIGVuZHBvaW50cy4KKyAqCisgKiBBbmQgdGhlcmUgbWlnaHQgYmUgb3RoZXIgZGVzY3JpcHRvcnMgbWl4ZWQgaW4gd2l0aCB0aG9zZS4KKyAqCisgKiBEZXZpY2VzIG1heSBhbHNvIGhhdmUgY2xhc3Mtc3BlY2lmaWMgb3IgdmVuZG9yLXNwZWNpZmljIGRlc2NyaXB0b3JzLgorICovCisKKy8qKgorICogc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50IC0gaG9zdC1zaWRlIGVuZHBvaW50IGRlc2NyaXB0b3IgYW5kIHF1ZXVlCisgKiBAZGVzYzogZGVzY3JpcHRvciBmb3IgdGhpcyBlbmRwb2ludCwgd01heFBhY2tldFNpemUgaW4gbmF0aXZlIGJ5dGVvcmRlcgorICogQHVyYl9saXN0OiB1cmJzIHF1ZXVlZCB0byB0aGlzIGVuZHBvaW50OyBtYWludGFpbmVkIGJ5IHVzYmNvcmUKKyAqIEBoY3ByaXY6IGZvciB1c2UgYnkgSENEOyB0eXBpY2FsbHkgaG9sZHMgaGFyZHdhcmUgZG1hIHF1ZXVlIGhlYWQgKFFIKQorICoJd2l0aCBvbmUgb3IgbW9yZSB0cmFuc2ZlciBkZXNjcmlwdG9ycyAoVERzKSBwZXIgdXJiCisgKiBAZXh0cmE6IGRlc2NyaXB0b3JzIGZvbGxvd2luZyB0aGlzIGVuZHBvaW50IGluIHRoZSBjb25maWd1cmF0aW9uCisgKiBAZXh0cmFsZW46IGhvdyBtYW55IGJ5dGVzIG9mICJleHRyYSIgYXJlIHZhbGlkCisgKgorICogVVNCIHJlcXVlc3RzIGFyZSBhbHdheXMgcXVldWVkIHRvIGEgZ2l2ZW4gZW5kcG9pbnQsIGlkZW50aWZpZWQgYnkgYQorICogZGVzY3JpcHRvciB3aXRoaW4gYW4gYWN0aXZlIGludGVyZmFjZSBpbiBhIGdpdmVuIFVTQiBjb25maWd1cmF0aW9uLgorICovCitzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgeworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcglkZXNjOworCXN0cnVjdCBsaXN0X2hlYWQJCXVyYl9saXN0OworCXZvaWQJCQkJKmhjcHJpdjsKKworCXVuc2lnbmVkIGNoYXIgKmV4dHJhOyAgIC8qIEV4dHJhIGRlc2NyaXB0b3JzICovCisJaW50IGV4dHJhbGVuOworfTsKKworLyogaG9zdC1zaWRlIHdyYXBwZXIgZm9yIG9uZSBpbnRlcmZhY2Ugc2V0dGluZydzIHBhcnNlZCBkZXNjcmlwdG9ycyAqLworc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSB7CisJc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvcglkZXNjOworCisJLyogYXJyYXkgb2YgZGVzYy5iTnVtRW5kcG9pbnQgZW5kcG9pbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGlzCisJICogaW50ZXJmYWNlIHNldHRpbmcuICB0aGVzZSB3aWxsIGJlIGluIG5vIHBhcnRpY3VsYXIgb3JkZXIuCisJICovCisJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplbmRwb2ludDsKKworCWNoYXIgKnN0cmluZzsJCS8qIGlJbnRlcmZhY2Ugc3RyaW5nLCBpZiBwcmVzZW50ICovCisJdW5zaWduZWQgY2hhciAqZXh0cmE7ICAgLyogRXh0cmEgZGVzY3JpcHRvcnMgKi8KKwlpbnQgZXh0cmFsZW47Cit9OworCitlbnVtIHVzYl9pbnRlcmZhY2VfY29uZGl0aW9uIHsKKwlVU0JfSU5URVJGQUNFX1VOQk9VTkQgPSAwLAorCVVTQl9JTlRFUkZBQ0VfQklORElORywKKwlVU0JfSU5URVJGQUNFX0JPVU5ELAorCVVTQl9JTlRFUkZBQ0VfVU5CSU5ESU5HLAorfTsKKworLyoqCisgKiBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAtIHdoYXQgdXNiIGRldmljZSBkcml2ZXJzIHRhbGsgdG8KKyAqIEBhbHRzZXR0aW5nOiBhcnJheSBvZiBpbnRlcmZhY2Ugc3RydWN0dXJlcywgb25lIGZvciBlYWNoIGFsdGVybmF0ZQorICogCXNldHRpbmcgdGhhdCBtYXkgYmUgc2VsZWN0ZWQuICBFYWNoIG9uZSBpbmNsdWRlcyBhIHNldCBvZgorICogCWVuZHBvaW50IGNvbmZpZ3VyYXRpb25zLiAgVGhleSB3aWxsIGJlIGluIG5vIHBhcnRpY3VsYXIgb3JkZXIuCisgKiBAbnVtX2FsdHNldHRpbmc6IG51bWJlciBvZiBhbHRzZXR0aW5ncyBkZWZpbmVkLgorICogQGN1cl9hbHRzZXR0aW5nOiB0aGUgY3VycmVudCBhbHRzZXR0aW5nLgorICogQGRyaXZlcjogdGhlIFVTQiBkcml2ZXIgdGhhdCBpcyBib3VuZCB0byB0aGlzIGludGVyZmFjZS4KKyAqIEBtaW5vcjogdGhlIG1pbm9yIG51bWJlciBhc3NpZ25lZCB0byB0aGlzIGludGVyZmFjZSwgaWYgdGhpcworICoJaW50ZXJmYWNlIGlzIGJvdW5kIHRvIGEgZHJpdmVyIHRoYXQgdXNlcyB0aGUgVVNCIG1ham9yIG51bWJlci4KKyAqCUlmIHRoaXMgaW50ZXJmYWNlIGRvZXMgbm90IHVzZSB0aGUgVVNCIG1ham9yLCB0aGlzIGZpZWxkIHNob3VsZAorICoJYmUgdW51c2VkLiAgVGhlIGRyaXZlciBzaG91bGQgc2V0IHRoaXMgdmFsdWUgaW4gdGhlIHByb2JlKCkKKyAqCWZ1bmN0aW9uIG9mIHRoZSBkcml2ZXIsIGFmdGVyIGl0IGhhcyBiZWVuIGFzc2lnbmVkIGEgbWlub3IKKyAqCW51bWJlciBmcm9tIHRoZSBVU0IgY29yZSBieSBjYWxsaW5nIHVzYl9yZWdpc3Rlcl9kZXYoKS4KKyAqIEBjb25kaXRpb246IGJpbmRpbmcgc3RhdGUgb2YgdGhlIGludGVyZmFjZTogbm90IGJvdW5kLCBiaW5kaW5nCisgKgkoaW4gcHJvYmUoKSksIGJvdW5kIHRvIGEgZHJpdmVyLCBvciB1bmJpbmRpbmcgKGluIGRpc2Nvbm5lY3QoKSkKKyAqIEBkZXY6IGRyaXZlciBtb2RlbCdzIHZpZXcgb2YgdGhpcyBkZXZpY2UKKyAqIEBjbGFzc19kZXY6IGRyaXZlciBtb2RlbCdzIGNsYXNzIHZpZXcgb2YgdGhpcyBkZXZpY2UuCisgKgorICogVVNCIGRldmljZSBkcml2ZXJzIGF0dGFjaCB0byBpbnRlcmZhY2VzIG9uIGEgcGh5c2ljYWwgZGV2aWNlLiAgRWFjaAorICogaW50ZXJmYWNlIGVuY2Fwc3VsYXRlcyBhIHNpbmdsZSBoaWdoIGxldmVsIGZ1bmN0aW9uLCBzdWNoIGFzIGZlZWRpbmcKKyAqIGFuIGF1ZGlvIHN0cmVhbSB0byBhIHNwZWFrZXIgb3IgcmVwb3J0aW5nIGEgY2hhbmdlIGluIGEgdm9sdW1lIGNvbnRyb2wuCisgKiBNYW55IFVTQiBkZXZpY2VzIG9ubHkgaGF2ZSBvbmUgaW50ZXJmYWNlLiAgVGhlIHByb3RvY29sIHVzZWQgdG8gdGFsayB0bworICogYW4gaW50ZXJmYWNlJ3MgZW5kcG9pbnRzIGNhbiBiZSBkZWZpbmVkIGluIGEgdXNiICJjbGFzcyIgc3BlY2lmaWNhdGlvbiwKKyAqIG9yIGJ5IGEgcHJvZHVjdCdzIHZlbmRvci4gIFRoZSAoZGVmYXVsdCkgY29udHJvbCBlbmRwb2ludCBpcyBwYXJ0IG9mCisgKiBldmVyeSBpbnRlcmZhY2UsIGJ1dCBpcyBuZXZlciBsaXN0ZWQgYW1vbmcgdGhlIGludGVyZmFjZSdzIGRlc2NyaXB0b3JzLgorICoKKyAqIFRoZSBkcml2ZXIgdGhhdCBpcyBib3VuZCB0byB0aGUgaW50ZXJmYWNlIGNhbiB1c2Ugc3RhbmRhcmQgZHJpdmVyIG1vZGVsCisgKiBjYWxscyBzdWNoIGFzIGRldl9nZXRfZHJ2ZGF0YSgpIG9uIHRoZSBkZXYgbWVtYmVyIG9mIHRoaXMgc3RydWN0dXJlLgorICoKKyAqIEVhY2ggaW50ZXJmYWNlIG1heSBoYXZlIGFsdGVybmF0ZSBzZXR0aW5ncy4gIFRoZSBpbml0aWFsIGNvbmZpZ3VyYXRpb24KKyAqIG9mIGEgZGV2aWNlIHNldHMgYWx0c2V0dGluZyAwLCBidXQgdGhlIGRldmljZSBkcml2ZXIgY2FuIGNoYW5nZQorICogdGhhdCBzZXR0aW5nIHVzaW5nIHVzYl9zZXRfaW50ZXJmYWNlKCkuICBBbHRlcm5hdGUgc2V0dGluZ3MgYXJlIG9mdGVuCisgKiB1c2VkIHRvIGNvbnRyb2wgdGhlIHRoZSB1c2Ugb2YgcGVyaW9kaWMgZW5kcG9pbnRzLCBzdWNoIGFzIGJ5IGhhdmluZworICogZGlmZmVyZW50IGVuZHBvaW50cyB1c2UgZGlmZmVyZW50IGFtb3VudHMgb2YgcmVzZXJ2ZWQgVVNCIGJhbmR3aWR0aC4KKyAqIEFsbCBzdGFuZGFyZHMtY29uZm9ybWFudCBVU0IgZGV2aWNlcyB0aGF0IHVzZSBpc29jaHJvbm91cyBlbmRwb2ludHMKKyAqIHdpbGwgdXNlIHRoZW0gaW4gbm9uLWRlZmF1bHQgc2V0dGluZ3MuCisgKgorICogVGhlIFVTQiBzcGVjaWZpY2F0aW9uIHNheXMgdGhhdCBhbHRlcm5hdGUgc2V0dGluZyBudW1iZXJzIG11c3QgcnVuIGZyb20KKyAqIDAgdG8gb25lIGxlc3MgdGhhbiB0aGUgdG90YWwgbnVtYmVyIG9mIGFsdGVybmF0ZSBzZXR0aW5ncy4gIEJ1dCBzb21lCisgKiBkZXZpY2VzIG1hbmFnZSB0byBtZXNzIHRoaXMgdXAsIGFuZCB0aGUgc3RydWN0dXJlcyBhcmVuJ3QgbmVjZXNzYXJpbHkKKyAqIHN0b3JlZCBpbiBudW1lcmljYWwgb3JkZXIgYW55aG93LiAgVXNlIHVzYl9hbHRudW1fdG9fYWx0c2V0dGluZygpIHRvCisgKiBsb29rIHVwIGFuIGFsdGVybmF0ZSBzZXR0aW5nIGluIHRoZSBhbHRzZXR0aW5nIGFycmF5IGJhc2VkIG9uIGl0cyBudW1iZXIuCisgKi8KK3N0cnVjdCB1c2JfaW50ZXJmYWNlIHsKKwkvKiBhcnJheSBvZiBhbHRlcm5hdGUgc2V0dGluZ3MgZm9yIHRoaXMgaW50ZXJmYWNlLAorCSAqIHN0b3JlZCBpbiBubyBwYXJ0aWN1bGFyIG9yZGVyICovCisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqYWx0c2V0dGluZzsKKworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmN1cl9hbHRzZXR0aW5nOwkvKiB0aGUgY3VycmVudGx5CisJCQkJCSAqIGFjdGl2ZSBhbHRlcm5hdGUgc2V0dGluZyAqLworCXVuc2lnbmVkIG51bV9hbHRzZXR0aW5nOwkvKiBudW1iZXIgb2YgYWx0ZXJuYXRlIHNldHRpbmdzICovCisKKwlpbnQgbWlub3I7CQkJLyogbWlub3IgbnVtYmVyIHRoaXMgaW50ZXJmYWNlIGlzIGJvdW5kIHRvICovCisJZW51bSB1c2JfaW50ZXJmYWNlX2NvbmRpdGlvbiBjb25kaXRpb247CQkvKiBzdGF0ZSBvZiBiaW5kaW5nICovCisJc3RydWN0IGRldmljZSBkZXY7CQkvKiBpbnRlcmZhY2Ugc3BlY2lmaWMgZGV2aWNlIGluZm8gKi8KKwlzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXY7Cit9OworI2RlZmluZQl0b191c2JfaW50ZXJmYWNlKGQpIGNvbnRhaW5lcl9vZihkLCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSwgZGV2KQorI2RlZmluZQlpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpIFwKKwljb250YWluZXJfb2YoaW50Zi0+ZGV2LnBhcmVudCwgc3RydWN0IHVzYl9kZXZpY2UsIGRldikKKworc3RhdGljIGlubGluZSB2b2lkICp1c2JfZ2V0X2ludGZkYXRhIChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlyZXR1cm4gZGV2X2dldF9kcnZkYXRhICgmaW50Zi0+ZGV2KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHVzYl9zZXRfaW50ZmRhdGEgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCB2b2lkICpkYXRhKQoreworCWRldl9zZXRfZHJ2ZGF0YSgmaW50Zi0+ZGV2LCBkYXRhKTsKK30KKworc3RydWN0IHVzYl9pbnRlcmZhY2UgKnVzYl9nZXRfaW50ZihzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7Cit2b2lkIHVzYl9wdXRfaW50ZihzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7CisKKy8qIHRoaXMgbWF4aW11bSBpcyBhcmJpdHJhcnkgKi8KKyNkZWZpbmUgVVNCX01BWElOVEVSRkFDRVMJMzIKKworLyoqCisgKiBzdHJ1Y3QgdXNiX2ludGVyZmFjZV9jYWNoZSAtIGxvbmctdGVybSByZXByZXNlbnRhdGlvbiBvZiBhIGRldmljZSBpbnRlcmZhY2UKKyAqIEBudW1fYWx0c2V0dGluZzogbnVtYmVyIG9mIGFsdHNldHRpbmdzIGRlZmluZWQuCisgKiBAcmVmOiByZWZlcmVuY2UgY291bnRlci4KKyAqIEBhbHRzZXR0aW5nOiB2YXJpYWJsZS1sZW5ndGggYXJyYXkgb2YgaW50ZXJmYWNlIHN0cnVjdHVyZXMsIG9uZSBmb3IKKyAqCWVhY2ggYWx0ZXJuYXRlIHNldHRpbmcgdGhhdCBtYXkgYmUgc2VsZWN0ZWQuICBFYWNoIG9uZSBpbmNsdWRlcyBhCisgKglzZXQgb2YgZW5kcG9pbnQgY29uZmlndXJhdGlvbnMuICBUaGV5IHdpbGwgYmUgaW4gbm8gcGFydGljdWxhciBvcmRlci4KKyAqCisgKiBUaGVzZSBzdHJ1Y3R1cmVzIHBlcnNpc3QgZm9yIHRoZSBsaWZldGltZSBvZiBhIHVzYl9kZXZpY2UsIHVubGlrZQorICogc3RydWN0IHVzYl9pbnRlcmZhY2UgKHdoaWNoIHBlcnNpc3RzIG9ubHkgYXMgbG9uZyBhcyBpdHMgY29uZmlndXJhdGlvbgorICogaXMgaW5zdGFsbGVkKS4gIFRoZSBhbHRzZXR0aW5nIGFycmF5cyBjYW4gYmUgYWNjZXNzZWQgdGhyb3VnaCB0aGVzZQorICogc3RydWN0dXJlcyBhdCBhbnkgdGltZSwgcGVybWl0dGluZyBjb21wYXJpc29uIG9mIGNvbmZpZ3VyYXRpb25zIGFuZAorICogcHJvdmlkaW5nIHN1cHBvcnQgZm9yIHRoZSAvcHJvYy9idXMvdXNiL2RldmljZXMgcHNldWRvLWZpbGUuCisgKi8KK3N0cnVjdCB1c2JfaW50ZXJmYWNlX2NhY2hlIHsKKwl1bnNpZ25lZCBudW1fYWx0c2V0dGluZzsJLyogbnVtYmVyIG9mIGFsdGVybmF0ZSBzZXR0aW5ncyAqLworCXN0cnVjdCBrcmVmIHJlZjsJCS8qIHJlZmVyZW5jZSBjb3VudGVyICovCisKKwkvKiB2YXJpYWJsZS1sZW5ndGggYXJyYXkgb2YgYWx0ZXJuYXRlIHNldHRpbmdzIGZvciB0aGlzIGludGVyZmFjZSwKKwkgKiBzdG9yZWQgaW4gbm8gcGFydGljdWxhciBvcmRlciAqLworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgYWx0c2V0dGluZ1swXTsKK307CisjZGVmaW5lCXJlZl90b191c2JfaW50ZXJmYWNlX2NhY2hlKHIpIFwKKwkJY29udGFpbmVyX29mKHIsIHN0cnVjdCB1c2JfaW50ZXJmYWNlX2NhY2hlLCByZWYpCisjZGVmaW5lCWFsdHNldHRpbmdfdG9fdXNiX2ludGVyZmFjZV9jYWNoZShhKSBcCisJCWNvbnRhaW5lcl9vZihhLCBzdHJ1Y3QgdXNiX2ludGVyZmFjZV9jYWNoZSwgYWx0c2V0dGluZ1swXSkKKworLyoqCisgKiBzdHJ1Y3QgdXNiX2hvc3RfY29uZmlnIC0gcmVwcmVzZW50YXRpb24gb2YgYSBkZXZpY2UncyBjb25maWd1cmF0aW9uCisgKiBAZGVzYzogdGhlIGRldmljZSdzIGNvbmZpZ3VyYXRpb24gZGVzY3JpcHRvci4KKyAqIEBzdHJpbmc6IHBvaW50ZXIgdG8gdGhlIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBpQ29uZmlndXJhdGlvbiBzdHJpbmcsIGlmCisgKglwcmVzZW50IGZvciB0aGlzIGNvbmZpZ3VyYXRpb24uCisgKiBAaW50ZXJmYWNlOiBhcnJheSBvZiBwb2ludGVycyB0byB1c2JfaW50ZXJmYWNlIHN0cnVjdHVyZXMsIG9uZSBmb3IgZWFjaAorICoJaW50ZXJmYWNlIGluIHRoZSBjb25maWd1cmF0aW9uLiAgVGhlIG51bWJlciBvZiBpbnRlcmZhY2VzIGlzIHN0b3JlZAorICoJaW4gZGVzYy5iTnVtSW50ZXJmYWNlcy4gIFRoZXNlIHBvaW50ZXJzIGFyZSB2YWxpZCBvbmx5IHdoaWxlIHRoZQorICoJdGhlIGNvbmZpZ3VyYXRpb24gaXMgYWN0aXZlLgorICogQGludGZfY2FjaGU6IGFycmF5IG9mIHBvaW50ZXJzIHRvIHVzYl9pbnRlcmZhY2VfY2FjaGUgc3RydWN0dXJlcywgb25lCisgKglmb3IgZWFjaCBpbnRlcmZhY2UgaW4gdGhlIGNvbmZpZ3VyYXRpb24uICBUaGVzZSBzdHJ1Y3R1cmVzIGV4aXN0CisgKglmb3IgdGhlIGVudGlyZSBsaWZlIG9mIHRoZSBkZXZpY2UuCisgKiBAZXh0cmE6IHBvaW50ZXIgdG8gYnVmZmVyIGNvbnRhaW5pbmcgYWxsIGV4dHJhIGRlc2NyaXB0b3JzIGFzc29jaWF0ZWQKKyAqCXdpdGggdGhpcyBjb25maWd1cmF0aW9uICh0aG9zZSBwcmVjZWRpbmcgdGhlIGZpcnN0IGludGVyZmFjZQorICoJZGVzY3JpcHRvcikuCisgKiBAZXh0cmFsZW46IGxlbmd0aCBvZiB0aGUgZXh0cmEgZGVzY3JpcHRvcnMgYnVmZmVyLgorICoKKyAqIFVTQiBkZXZpY2VzIG1heSBoYXZlIG11bHRpcGxlIGNvbmZpZ3VyYXRpb25zLCBidXQgb25seSBvbmUgY2FuIGJlIGFjdGl2ZQorICogYXQgYW55IHRpbWUuICBFYWNoIGVuY2Fwc3VsYXRlcyBhIGRpZmZlcmVudCBvcGVyYXRpb25hbCBlbnZpcm9ubWVudDsKKyAqIGZvciBleGFtcGxlLCBhIGR1YWwtc3BlZWQgZGV2aWNlIHdvdWxkIGhhdmUgc2VwYXJhdGUgY29uZmlndXJhdGlvbnMgZm9yCisgKiBmdWxsLXNwZWVkIGFuZCBoaWdoLXNwZWVkIG9wZXJhdGlvbi4gIFRoZSBudW1iZXIgb2YgY29uZmlndXJhdGlvbnMKKyAqIGF2YWlsYWJsZSBpcyBzdG9yZWQgaW4gdGhlIGRldmljZSBkZXNjcmlwdG9yIGFzIGJOdW1Db25maWd1cmF0aW9ucy4KKyAqCisgKiBBIGNvbmZpZ3VyYXRpb24gY2FuIGNvbnRhaW4gbXVsdGlwbGUgaW50ZXJmYWNlcy4gIEVhY2ggY29ycmVzcG9uZHMgdG8KKyAqIGEgZGlmZmVyZW50IGZ1bmN0aW9uIG9mIHRoZSBVU0IgZGV2aWNlLCBhbmQgYWxsIGFyZSBhdmFpbGFibGUgd2hlbmV2ZXIKKyAqIHRoZSBjb25maWd1cmF0aW9uIGlzIGFjdGl2ZS4gIFRoZSBVU0Igc3RhbmRhcmQgc2F5cyB0aGF0IGludGVyZmFjZXMKKyAqIGFyZSBzdXBwb3NlZCB0byBiZSBudW1iZXJlZCBmcm9tIDAgdG8gZGVzYy5iTnVtSW50ZXJmYWNlcy0xLCBidXQgYSBsb3QKKyAqIG9mIGRldmljZXMgZ2V0IHRoaXMgd3JvbmcuICBJbiBhZGRpdGlvbiwgdGhlIGludGVyZmFjZSBhcnJheSBpcyBub3QKKyAqIGd1YXJhbnRlZWQgdG8gYmUgc29ydGVkIGluIG51bWVyaWNhbCBvcmRlci4gIFVzZSB1c2JfaWZudW1fdG9faWYoKSB0bworICogbG9vayB1cCBhbiBpbnRlcmZhY2UgZW50cnkgYmFzZWQgb24gaXRzIG51bWJlci4KKyAqCisgKiBEZXZpY2UgZHJpdmVycyBzaG91bGQgbm90IGF0dGVtcHQgdG8gYWN0aXZhdGUgY29uZmlndXJhdGlvbnMuICBUaGUgY2hvaWNlCisgKiBvZiB3aGljaCBjb25maWd1cmF0aW9uIHRvIGluc3RhbGwgaXMgYSBwb2xpY3kgZGVjaXNpb24gYmFzZWQgb24gc3VjaAorICogY29uc2lkZXJhdGlvbnMgYXMgYXZhaWxhYmxlIHBvd2VyLCBmdW5jdGlvbmFsaXR5IHByb3ZpZGVkLCBhbmQgdGhlIHVzZXIncworICogZGVzaXJlcyAoZXhwcmVzc2VkIHRocm91Z2ggaG90cGx1ZyBzY3JpcHRzKS4gIEhvd2V2ZXIsIGRyaXZlcnMgY2FuIGNhbGwKKyAqIHVzYl9yZXNldF9jb25maWd1cmF0aW9uKCkgdG8gcmVpbml0aWFsaXplIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gYW5kCisgKiBhbGwgaXRzIGludGVyZmFjZXMuCisgKi8KK3N0cnVjdCB1c2JfaG9zdF9jb25maWcgeworCXN0cnVjdCB1c2JfY29uZmlnX2Rlc2NyaXB0b3IJZGVzYzsKKworCWNoYXIgKnN0cmluZzsKKwkvKiB0aGUgaW50ZXJmYWNlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBjb25maWd1cmF0aW9uLAorCSAqIHN0b3JlZCBpbiBubyBwYXJ0aWN1bGFyIG9yZGVyICovCisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZVtVU0JfTUFYSU5URVJGQUNFU107CisKKwkvKiBJbnRlcmZhY2UgaW5mb3JtYXRpb24gYXZhaWxhYmxlIGV2ZW4gd2hlbiB0aGlzIGlzIG5vdCB0aGUKKwkgKiBhY3RpdmUgY29uZmlndXJhdGlvbiAqLworCXN0cnVjdCB1c2JfaW50ZXJmYWNlX2NhY2hlICppbnRmX2NhY2hlW1VTQl9NQVhJTlRFUkZBQ0VTXTsKKworCXVuc2lnbmVkIGNoYXIgKmV4dHJhOyAgIC8qIEV4dHJhIGRlc2NyaXB0b3JzICovCisJaW50IGV4dHJhbGVuOworfTsKKworaW50IF9fdXNiX2dldF9leHRyYV9kZXNjcmlwdG9yKGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgc2l6ZSwKKwl1bnNpZ25lZCBjaGFyIHR5cGUsIHZvaWQgKipwdHIpOworI2RlZmluZSB1c2JfZ2V0X2V4dHJhX2Rlc2NyaXB0b3IoaWZwb2ludCx0eXBlLHB0cilcCisJX191c2JfZ2V0X2V4dHJhX2Rlc2NyaXB0b3IoKGlmcG9pbnQpLT5leHRyYSwoaWZwb2ludCktPmV4dHJhbGVuLFwKKwkJdHlwZSwodm9pZCoqKXB0cikKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RydWN0IHVzYl9vcGVyYXRpb25zOworCisvKiBVU0IgZGV2aWNlIG51bWJlciBhbGxvY2F0aW9uIGJpdG1hcCAqLworc3RydWN0IHVzYl9kZXZtYXAgeworCXVuc2lnbmVkIGxvbmcgZGV2aWNlbWFwWzEyOCAvICg4KnNpemVvZih1bnNpZ25lZCBsb25nKSldOworfTsKKworLyoKKyAqIEFsbG9jYXRlZCBwZXIgYnVzICh0cmVlIG9mIGRldmljZXMpIHdlIGhhdmU6CisgKi8KK3N0cnVjdCB1c2JfYnVzIHsKKwlzdHJ1Y3QgZGV2aWNlICpjb250cm9sbGVyOwkvKiBob3N0L21hc3RlciBzaWRlIGhhcmR3YXJlICovCisJaW50IGJ1c251bTsJCQkvKiBCdXMgbnVtYmVyIChpbiBvcmRlciBvZiByZWcpICovCisJY2hhciAqYnVzX25hbWU7CQkJLyogc3RhYmxlIGlkIChQQ0kgc2xvdF9uYW1lIGV0YykgKi8KKwl1OCBvdGdfcG9ydDsJCQkvKiAwLCBvciBudW1iZXIgb2YgT1RHL0hOUCBwb3J0ICovCisJdW5zaWduZWQgaXNfYl9ob3N0OjE7CQkvKiB0cnVlIGR1cmluZyBzb21lIEhOUCByb2xlc3dpdGNoZXMgKi8KKwl1bnNpZ25lZCBiX2hucF9lbmFibGU6MTsJLyogT1RHOiBkaWQgQS1Ib3N0IGVuYWJsZSBITlA/ICovCisKKwlpbnQgZGV2bnVtX25leHQ7CQkvKiBOZXh0IG9wZW4gZGV2aWNlIG51bWJlciBpbiByb3VuZC1yb2JpbiBhbGxvY2F0aW9uICovCisKKwlzdHJ1Y3QgdXNiX2Rldm1hcCBkZXZtYXA7CS8qIGRldmljZSBhZGRyZXNzIGFsbG9jYXRpb24gbWFwICovCisJc3RydWN0IHVzYl9vcGVyYXRpb25zICpvcDsJLyogT3BlcmF0aW9ucyAoc3BlY2lmaWMgdG8gdGhlIEhDKSAqLworCXN0cnVjdCB1c2JfZGV2aWNlICpyb290X2h1YjsJLyogUm9vdCBodWIgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGJ1c19saXN0OwkvKiBsaXN0IG9mIGJ1c3NlcyAqLworCXZvaWQgKmhjcHJpdjsgICAgICAgICAgICAgICAgICAgLyogSG9zdCBDb250cm9sbGVyIHByaXZhdGUgZGF0YSAqLworCisJaW50IGJhbmR3aWR0aF9hbGxvY2F0ZWQ7CS8qIG9uIHRoaXMgYnVzOiBob3cgbXVjaCBvZiB0aGUgdGltZQorCQkJCQkgKiByZXNlcnZlZCBmb3IgcGVyaW9kaWMgKGludHIvaXNvKQorCQkJCQkgKiByZXF1ZXN0cyBpcyB1c2VkLCBvbiBhdmVyYWdlPworCQkJCQkgKiBVbml0czogbWljcm9zZWNvbmRzL2ZyYW1lLgorCQkJCQkgKiBMaW1pdHM6IEZ1bGwvbG93IHNwZWVkIHJlc2VydmUgOTAlLAorCQkJCQkgKiB3aGlsZSBoaWdoIHNwZWVkIHJlc2VydmVzIDgwJS4KKwkJCQkJICovCisJaW50IGJhbmR3aWR0aF9pbnRfcmVxczsJCS8qIG51bWJlciBvZiBJbnRlcnJ1cHQgcmVxdWVzdHMgKi8KKwlpbnQgYmFuZHdpZHRoX2lzb2NfcmVxczsJLyogbnVtYmVyIG9mIElzb2MuIHJlcXVlc3RzICovCisKKwlzdHJ1Y3QgZGVudHJ5ICp1c2Jmc19kZW50cnk7CS8qIHVzYmZzIGRlbnRyeSBlbnRyeSBmb3IgdGhlIGJ1cyAqLworCisJc3RydWN0IGNsYXNzX2RldmljZSBjbGFzc19kZXY7CS8qIGNsYXNzIGRldmljZSBmb3IgdGhpcyBidXMgKi8KKwl2b2lkICgqcmVsZWFzZSkoc3RydWN0IHVzYl9idXMgKmJ1cyk7CS8qIGZ1bmN0aW9uIHRvIGRlc3Ryb3kgdGhpcyBidXMncyBtZW1vcnkgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19VU0JfTU9OKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfTU9OX01PRFVMRSkKKwlzdHJ1Y3QgbW9uX2J1cyAqbW9uX2J1czsJLyogbm9uLW51bGwgd2hlbiBhc3NvY2lhdGVkICovCisJaW50IG1vbml0b3JlZDsJCQkvKiBub24temVybyB3aGVuIG1vbml0b3JlZCAqLworI2VuZGlmCit9OworI2RlZmluZQl0b191c2JfYnVzKGQpIGNvbnRhaW5lcl9vZihkLCBzdHJ1Y3QgdXNiX2J1cywgY2xhc3NfZGV2KQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIFRoaXMgaXMgYXJiaXRyYXJ5LgorICogRnJvbSBVU0IgMi4wIHNwZWMgVGFibGUgMTEtMTMsIG9mZnNldCA3LCBhIGh1YiBjYW4KKyAqIGhhdmUgdXAgdG8gMjU1IHBvcnRzLiBUaGUgbW9zdCB5ZXQgcmVwb3J0ZWQgaXMgMTAuCisgKi8KKyNkZWZpbmUgVVNCX01BWENISUxEUkVOCQkoMTYpCisKK3N0cnVjdCB1c2JfdHQ7CisKKy8qCisgKiBzdHJ1Y3QgdXNiX2RldmljZSAtIGtlcm5lbCdzIHJlcHJlc2VudGF0aW9uIG9mIGEgVVNCIGRldmljZQorICoKKyAqIEZJWE1FOiBXcml0ZSB0aGUga2VybmVsZG9jIQorICoKKyAqIFVzYmNvcmUgZHJpdmVycyBzaG91bGQgbm90IHNldCB1c2JkZXYtPnN0YXRlIGRpcmVjdGx5LiAgSW5zdGVhZCB1c2UKKyAqIHVzYl9zZXRfZGV2aWNlX3N0YXRlKCkuCisgKi8KK3N0cnVjdCB1c2JfZGV2aWNlIHsKKwlpbnQJCWRldm51bTsJCS8qIEFkZHJlc3Mgb24gVVNCIGJ1cyAqLworCWNoYXIJCWRldnBhdGggWzE2XTsJLyogVXNlIGluIG1lc3NhZ2VzOiAvcG9ydC9wb3J0Ly4uLiAqLworCWVudW0gdXNiX2RldmljZV9zdGF0ZQlzdGF0ZTsJLyogY29uZmlndXJlZCwgbm90IGF0dGFjaGVkLCBldGMgKi8KKwllbnVtIHVzYl9kZXZpY2Vfc3BlZWQJc3BlZWQ7CS8qIGhpZ2gvZnVsbC9sb3cgKG9yIGVycm9yKSAqLworCisJc3RydWN0IHVzYl90dAkqdHQ7IAkJLyogbG93L2Z1bGwgc3BlZWQgZGV2LCBoaWdoc3BlZWQgaHViICovCisJaW50CQl0dHBvcnQ7CQkvKiBkZXZpY2UgcG9ydCBvbiB0aGF0IHR0IGh1YiAqLworCisJc3RydWN0IHNlbWFwaG9yZSBzZXJpYWxpemU7CisKKwl1bnNpZ25lZCBpbnQgdG9nZ2xlWzJdOwkJLyogb25lIGJpdCBmb3IgZWFjaCBlbmRwb2ludCAoWzBdID0gSU4sIFsxXSA9IE9VVCkgKi8KKworCXN0cnVjdCB1c2JfZGV2aWNlICpwYXJlbnQ7CS8qIG91ciBodWIsIHVubGVzcyB3ZSdyZSB0aGUgcm9vdCAqLworCXN0cnVjdCB1c2JfYnVzICpidXM7CQkvKiBCdXMgd2UncmUgcGFydCBvZiAqLworCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCBlcDA7CisKKwlzdHJ1Y3QgZGV2aWNlIGRldjsJCS8qIEdlbmVyaWMgZGV2aWNlIGludGVyZmFjZSAqLworCisJc3RydWN0IHVzYl9kZXZpY2VfZGVzY3JpcHRvciBkZXNjcmlwdG9yOy8qIERlc2NyaXB0b3IgKi8KKwlzdHJ1Y3QgdXNiX2hvc3RfY29uZmlnICpjb25maWc7CS8qIEFsbCBvZiB0aGUgY29uZmlncyAqLworCisJc3RydWN0IHVzYl9ob3N0X2NvbmZpZyAqYWN0Y29uZmlnOy8qIHRoZSBhY3RpdmUgY29uZmlndXJhdGlvbiAqLworCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXBfaW5bMTZdOworCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXBfb3V0WzE2XTsKKworCWNoYXIgKipyYXdkZXNjcmlwdG9yczsJCS8qIFJhdyBkZXNjcmlwdG9ycyBmb3IgZWFjaCBjb25maWcgKi8KKworCWludCBoYXZlX2xhbmdpZDsJCS8qIHdoZXRoZXIgc3RyaW5nX2xhbmdpZCBpcyB2YWxpZCB5ZXQgKi8KKwlpbnQgc3RyaW5nX2xhbmdpZDsJCS8qIGxhbmd1YWdlIElEIGZvciBzdHJpbmdzICovCisKKwljaGFyICpwcm9kdWN0OworCWNoYXIgKm1hbnVmYWN0dXJlcjsKKwljaGFyICpzZXJpYWw7CQkJLyogc3RhdGljIHN0cmluZ3MgZnJvbSB0aGUgZGV2aWNlICovCisJc3RydWN0IGxpc3RfaGVhZCBmaWxlbGlzdDsKKwlzdHJ1Y3QgZGVudHJ5ICp1c2Jmc19kZW50cnk7CS8qIHVzYmZzIGRlbnRyeSBlbnRyeSBmb3IgdGhlIGRldmljZSAqLworCisJLyoKKwkgKiBDaGlsZCBkZXZpY2VzIC0gdGhlc2UgY2FuIGJlIGVpdGhlciBuZXcgZGV2aWNlcworCSAqIChpZiB0aGlzIGlzIGEgaHViIGRldmljZSksIG9yIGRpZmZlcmVudCBpbnN0YW5jZXMKKwkgKiBvZiB0aGlzIHNhbWUgZGV2aWNlLgorCSAqCisJICogRWFjaCBpbnN0YW5jZSBuZWVkcyBpdHMgb3duIHNldCBvZiBkYXRhIHN0cnVjdHVyZXMuCisJICovCisKKwlpbnQgbWF4Y2hpbGQ7CQkJLyogTnVtYmVyIG9mIHBvcnRzIGlmIGh1YiAqLworCXN0cnVjdCB1c2JfZGV2aWNlICpjaGlsZHJlbltVU0JfTUFYQ0hJTERSRU5dOworfTsKKyNkZWZpbmUJdG9fdXNiX2RldmljZShkKSBjb250YWluZXJfb2YoZCwgc3RydWN0IHVzYl9kZXZpY2UsIGRldikKKworZXh0ZXJuIHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZ2V0X2RldihzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIHVzYl9wdXRfZGV2KHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpOworCitleHRlcm4gdm9pZCB1c2JfbG9ja19kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpOworZXh0ZXJuIGludCB1c2JfdHJ5bG9ja19kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpOworZXh0ZXJuIGludCB1c2JfbG9ja19kZXZpY2VfZm9yX3Jlc2V0KHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LAorCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UpOworZXh0ZXJuIHZvaWQgdXNiX3VubG9ja19kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpOworCisvKiBVU0IgcG9ydCByZXNldCBmb3IgZGV2aWNlIHJlaW5pdGlhbGl6YXRpb24gKi8KK2V4dGVybiBpbnQgdXNiX3Jlc2V0X2RldmljZShzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KTsKKworZXh0ZXJuIHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZmluZF9kZXZpY2UodTE2IHZlbmRvcl9pZCwgdTE2IHByb2R1Y3RfaWQpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBmb3IgZHJpdmVycyB1c2luZyBpc28gZW5kcG9pbnRzICovCitleHRlcm4gaW50IHVzYl9nZXRfY3VycmVudF9mcmFtZV9udW1iZXIgKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2KTsKKworLyogdXNlZCB0aGVzZSBmb3IgbXVsdGktaW50ZXJmYWNlIGRldmljZSByZWdpc3RyYXRpb24gKi8KK2V4dGVybiBpbnQgdXNiX2RyaXZlcl9jbGFpbV9pbnRlcmZhY2Uoc3RydWN0IHVzYl9kcml2ZXIgKmRyaXZlciwKKwkJCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSwgdm9pZCogcHJpdik7CisKKy8qKgorICogdXNiX2ludGVyZmFjZV9jbGFpbWVkIC0gcmV0dXJucyB0cnVlIGlmZiBhbiBpbnRlcmZhY2UgaXMgY2xhaW1lZAorICogQGlmYWNlOiB0aGUgaW50ZXJmYWNlIGJlaW5nIGNoZWNrZWQKKyAqCisgKiBSZXR1cm5zIHRydWUgKG5vbnplcm8pIGlmZiB0aGUgaW50ZXJmYWNlIGlzIGNsYWltZWQsIGVsc2UgZmFsc2UgKHplcm8pLgorICogQ2FsbGVycyBtdXN0IG93biB0aGUgZHJpdmVyIG1vZGVsJ3MgdXNiIGJ1cyByZWFkbG9jay4gIFNvIGRyaXZlcgorICogcHJvYmUoKSBlbnRyaWVzIGRvbid0IG5lZWQgZXh0cmEgbG9ja2luZywgYnV0IG90aGVyIGNhbGwgY29udGV4dHMKKyAqIG1heSBuZWVkIHRvIGV4cGxpY2l0bHkgY2xhaW0gdGhhdCBsb2NrLgorICoKKyAqLworc3RhdGljIGlubGluZSBpbnQgdXNiX2ludGVyZmFjZV9jbGFpbWVkKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSkgeworCXJldHVybiAoaWZhY2UtPmRldi5kcml2ZXIgIT0gTlVMTCk7Cit9CisKK2V4dGVybiB2b2lkIHVzYl9kcml2ZXJfcmVsZWFzZV9pbnRlcmZhY2Uoc3RydWN0IHVzYl9kcml2ZXIgKmRyaXZlciwKKwkJCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSk7Citjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqdXNiX21hdGNoX2lkKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCisJCQkJCSBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpOworCitleHRlcm4gc3RydWN0IHVzYl9pbnRlcmZhY2UgKnVzYl9maW5kX2ludGVyZmFjZShzdHJ1Y3QgdXNiX2RyaXZlciAqZHJ2LAorCQlpbnQgbWlub3IpOworZXh0ZXJuIHN0cnVjdCB1c2JfaW50ZXJmYWNlICp1c2JfaWZudW1fdG9faWYoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwKKwkJdW5zaWduZWQgaWZudW0pOworZXh0ZXJuIHN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKnVzYl9hbHRudW1fdG9fYWx0c2V0dGluZygKKwkJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHVuc2lnbmVkIGludCBhbHRudW0pOworCisKKy8qKgorICogdXNiX21ha2VfcGF0aCAtIHJldHVybnMgc3RhYmxlIGRldmljZSBwYXRoIGluIHRoZSB1c2IgdHJlZQorICogQGRldjogdGhlIGRldmljZSB3aG9zZSBwYXRoIGlzIGJlaW5nIGNvbnN0cnVjdGVkCisgKiBAYnVmOiB3aGVyZSB0byBwdXQgdGhlIHN0cmluZworICogQHNpemU6IGhvdyBiaWcgaXMgImJ1ZiI/CisgKgorICogUmV0dXJucyBsZW5ndGggb2YgdGhlIHN0cmluZyAoPiAwKSBvciBuZWdhdGl2ZSBpZiBzaXplIHdhcyB0b28gc21hbGwuCisgKgorICogVGhpcyBpZGVudGlmaWVyIGlzIGludGVuZGVkIHRvIGJlICJzdGFibGUiLCByZWZsZWN0aW5nIHBoeXNpY2FsIHBhdGhzIGluCisgKiBoYXJkd2FyZSBzdWNoIGFzIHBoeXNpY2FsIGJ1cyBhZGRyZXNzZXMgZm9yIGhvc3QgY29udHJvbGxlcnMgb3IgcG9ydHMgb24KKyAqIFVTQiBodWJzLiAgVGhhdCBtYWtlcyBpdCBzdGF5IHRoZSBzYW1lIHVudGlsIHN5c3RlbXMgYXJlIHBoeXNpY2FsbHkKKyAqIHJlY29uZmlndXJlZCwgYnkgcmUtY2FibGluZyBhIHRyZWUgb2YgVVNCIGRldmljZXMgb3IgYnkgbW92aW5nIFVTQiBob3N0CisgKiBjb250cm9sbGVycy4gIEFkZGluZyBhbmQgcmVtb3ZpbmcgZGV2aWNlcywgaW5jbHVkaW5nIHZpcnR1YWwgcm9vdCBodWJzCisgKiBpbiBob3N0IGNvbnRyb2xsZXIgZHJpdmVyIG1vZHVsZXMsIGRvZXMgbm90IGNoYW5nZSB0aGVzZSBwYXRoIGlkZW50aWZlcnM7CisgKiBuZWl0aGVyIGRvZXMgcmVib290aW5nIG9yIHJlLWVudW1lcmF0aW5nLiAgVGhlc2UgYXJlIG1vcmUgdXNlZnVsIGlkZW50aWZpZXJzCisgKiB0aGFuIGNoYW5nZWFibGUgKCJ1bnN0YWJsZSIpIG9uZXMgbGlrZSBidXMgbnVtYmVycyBvciBkZXZpY2UgYWRkcmVzc2VzLgorICoKKyAqIFdpdGggYSBwYXJ0aWFsIGV4Y2VwdGlvbiBmb3IgZGV2aWNlcyBjb25uZWN0ZWQgdG8gVVNCIDIuMCByb290IGh1YnMsIHRoZXNlCisgKiBpZGVudGlmaWVycyBhcmUgYWxzbyBwcmVkaWN0YWJsZS4gIFNvIGxvbmcgYXMgdGhlIGRldmljZSB0cmVlIGlzbid0IGNoYW5nZWQsCisgKiBwbHVnZ2luZyBhbnkgVVNCIGRldmljZSBpbnRvIGEgZ2l2ZW4gaHViIHBvcnQgYWx3YXlzIGdpdmVzIGl0IHRoZSBzYW1lIHBhdGguCisgKiBCZWNhdXNlIG9mIHRoZSB1c2Ugb2YgImNvbXBhbmlvbiIgY29udHJvbGxlcnMsIGRldmljZXMgY29ubmVjdGVkIHRvIHBvcnRzIG9uCisgKiBVU0IgMi4wIHJvb3QgaHVicyAoRUhDSSBob3N0IGNvbnRyb2xsZXJzKSB3aWxsIGdldCBvbmUgcGF0aCBJRCBpZiB0aGV5IGFyZQorICogaGlnaCBzcGVlZCwgYW5kIGEgZGlmZmVyZW50IG9uZSBpZiB0aGV5IGFyZSBmdWxsIG9yIGxvdyBzcGVlZC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgdXNiX21ha2VfcGF0aCAoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkKK3sKKwlpbnQgYWN0dWFsOworCWFjdHVhbCA9IHNucHJpbnRmIChidWYsIHNpemUsICJ1c2ItJXMtJXMiLCBkZXYtPmJ1cy0+YnVzX25hbWUsIGRldi0+ZGV2cGF0aCk7CisJcmV0dXJuIChhY3R1YWwgPj0gKGludClzaXplKSA/IC0xIDogYWN0dWFsOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFCQkoVVNCX0RFVklDRV9JRF9NQVRDSF9WRU5ET1IgfCBVU0JfREVWSUNFX0lEX01BVENIX1BST0RVQ1QpCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWX1JBTkdFCQkoVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZfTE8gfCBVU0JfREVWSUNFX0lEX01BVENIX0RFVl9ISSkKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0VfQU5EX1ZFUlNJT04JKFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFIHwgVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZfUkFOR0UpCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWX0lORk8gXAorCShVU0JfREVWSUNFX0lEX01BVENIX0RFVl9DTEFTUyB8IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWX1NVQkNMQVNTIHwgVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZfUFJPVE9DT0wpCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0lORk8gXAorCShVU0JfREVWSUNFX0lEX01BVENIX0lOVF9DTEFTUyB8IFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX1NVQkNMQVNTIHwgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfUFJPVE9DT0wpCisKKy8qKgorICogVVNCX0RFVklDRSAtIG1hY3JvIHVzZWQgdG8gZGVzY3JpYmUgYSBzcGVjaWZpYyB1c2IgZGV2aWNlCisgKiBAdmVuZDogdGhlIDE2IGJpdCBVU0IgVmVuZG9yIElECisgKiBAcHJvZDogdGhlIDE2IGJpdCBVU0IgUHJvZHVjdCBJRAorICoKKyAqIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBjcmVhdGUgYSBzdHJ1Y3QgdXNiX2RldmljZV9pZCB0aGF0IG1hdGNoZXMgYQorICogc3BlY2lmaWMgZGV2aWNlLgorICovCisjZGVmaW5lIFVTQl9ERVZJQ0UodmVuZCxwcm9kKSBcCisJLm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UsIC5pZFZlbmRvciA9ICh2ZW5kKSwgLmlkUHJvZHVjdCA9IChwcm9kKQorLyoqCisgKiBVU0JfREVWSUNFX1ZFUiAtIG1hY3JvIHVzZWQgdG8gZGVzY3JpYmUgYSBzcGVjaWZpYyB1c2IgZGV2aWNlIHdpdGggYSB2ZXJzaW9uIHJhbmdlCisgKiBAdmVuZDogdGhlIDE2IGJpdCBVU0IgVmVuZG9yIElECisgKiBAcHJvZDogdGhlIDE2IGJpdCBVU0IgUHJvZHVjdCBJRAorICogQGxvOiB0aGUgYmNkRGV2aWNlX2xvIHZhbHVlCisgKiBAaGk6IHRoZSBiY2REZXZpY2VfaGkgdmFsdWUKKyAqCisgKiBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gY3JlYXRlIGEgc3RydWN0IHVzYl9kZXZpY2VfaWQgdGhhdCBtYXRjaGVzIGEKKyAqIHNwZWNpZmljIGRldmljZSwgd2l0aCBhIHZlcnNpb24gcmFuZ2UuCisgKi8KKyNkZWZpbmUgVVNCX0RFVklDRV9WRVIodmVuZCxwcm9kLGxvLGhpKSBcCisJLm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0VfQU5EX1ZFUlNJT04sIC5pZFZlbmRvciA9ICh2ZW5kKSwgLmlkUHJvZHVjdCA9IChwcm9kKSwgLmJjZERldmljZV9sbyA9IChsbyksIC5iY2REZXZpY2VfaGkgPSAoaGkpCisKKy8qKgorICogVVNCX0RFVklDRV9JTkZPIC0gbWFjcm8gdXNlZCB0byBkZXNjcmliZSBhIGNsYXNzIG9mIHVzYiBkZXZpY2VzCisgKiBAY2w6IGJEZXZpY2VDbGFzcyB2YWx1ZQorICogQHNjOiBiRGV2aWNlU3ViQ2xhc3MgdmFsdWUKKyAqIEBwcjogYkRldmljZVByb3RvY29sIHZhbHVlCisgKgorICogVGhpcyBtYWNybyBpcyB1c2VkIHRvIGNyZWF0ZSBhIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHRoYXQgbWF0Y2hlcyBhCisgKiBzcGVjaWZpYyBjbGFzcyBvZiBkZXZpY2VzLgorICovCisjZGVmaW5lIFVTQl9ERVZJQ0VfSU5GTyhjbCxzYyxwcikgXAorCS5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWX0lORk8sIC5iRGV2aWNlQ2xhc3MgPSAoY2wpLCAuYkRldmljZVN1YkNsYXNzID0gKHNjKSwgLmJEZXZpY2VQcm90b2NvbCA9IChwcikKKworLyoqCisgKiBVU0JfSU5URVJGQUNFX0lORk8gLSBtYWNybyB1c2VkIHRvIGRlc2NyaWJlIGEgY2xhc3Mgb2YgdXNiIGludGVyZmFjZXMgCisgKiBAY2w6IGJJbnRlcmZhY2VDbGFzcyB2YWx1ZQorICogQHNjOiBiSW50ZXJmYWNlU3ViQ2xhc3MgdmFsdWUKKyAqIEBwcjogYkludGVyZmFjZVByb3RvY29sIHZhbHVlCisgKgorICogVGhpcyBtYWNybyBpcyB1c2VkIHRvIGNyZWF0ZSBhIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHRoYXQgbWF0Y2hlcyBhCisgKiBzcGVjaWZpYyBjbGFzcyBvZiBpbnRlcmZhY2VzLgorICovCisjZGVmaW5lIFVTQl9JTlRFUkZBQ0VfSU5GTyhjbCxzYyxwcikgXAorCS5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0lORk8sIC5iSW50ZXJmYWNlQ2xhc3MgPSAoY2wpLCAuYkludGVyZmFjZVN1YkNsYXNzID0gKHNjKSwgLmJJbnRlcmZhY2VQcm90b2NvbCA9IChwcikKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoqCisgKiBzdHJ1Y3QgdXNiX2RyaXZlciAtIGlkZW50aWZpZXMgVVNCIGRyaXZlciB0byB1c2Jjb3JlCisgKiBAb3duZXI6IFBvaW50ZXIgdG8gdGhlIG1vZHVsZSBvd25lciBvZiB0aGlzIGRyaXZlcjsgaW5pdGlhbGl6ZQorICoJaXQgdXNpbmcgVEhJU19NT0RVTEUuCisgKiBAbmFtZTogVGhlIGRyaXZlciBuYW1lIHNob3VsZCBiZSB1bmlxdWUgYW1vbmcgVVNCIGRyaXZlcnMsCisgKglhbmQgc2hvdWxkIG5vcm1hbGx5IGJlIHRoZSBzYW1lIGFzIHRoZSBtb2R1bGUgbmFtZS4KKyAqIEBwcm9iZTogQ2FsbGVkIHRvIHNlZSBpZiB0aGUgZHJpdmVyIGlzIHdpbGxpbmcgdG8gbWFuYWdlIGEgcGFydGljdWxhcgorICoJaW50ZXJmYWNlIG9uIGEgZGV2aWNlLiAgSWYgaXQgaXMsIHByb2JlIHJldHVybnMgemVybyBhbmQgdXNlcworICoJZGV2X3NldF9kcnZkYXRhKCkgdG8gYXNzb2NpYXRlIGRyaXZlci1zcGVjaWZpYyBkYXRhIHdpdGggdGhlCisgKglpbnRlcmZhY2UuICBJdCBtYXkgYWxzbyB1c2UgdXNiX3NldF9pbnRlcmZhY2UoKSB0byBzcGVjaWZ5IHRoZQorICoJYXBwcm9wcmlhdGUgYWx0c2V0dGluZy4gIElmIHVud2lsbGluZyB0byBtYW5hZ2UgdGhlIGludGVyZmFjZSwKKyAqCXJldHVybiBhIG5lZ2F0aXZlIGVycm5vIHZhbHVlLgorICogQGRpc2Nvbm5lY3Q6IENhbGxlZCB3aGVuIHRoZSBpbnRlcmZhY2UgaXMgbm8gbG9uZ2VyIGFjY2Vzc2libGUsIHVzdWFsbHkKKyAqCWJlY2F1c2UgaXRzIGRldmljZSBoYXMgYmVlbiAob3IgaXMgYmVpbmcpIGRpc2Nvbm5lY3RlZCBvciB0aGUKKyAqCWRyaXZlciBtb2R1bGUgaXMgYmVpbmcgdW5sb2FkZWQuCisgKiBAaW9jdGw6IFVzZWQgZm9yIGRyaXZlcnMgdGhhdCB3YW50IHRvIHRhbGsgdG8gdXNlcnNwYWNlIHRocm91Z2gKKyAqCXRoZSAidXNiZnMiIGZpbGVzeXN0ZW0uICBUaGlzIGxldHMgZGV2aWNlcyBwcm92aWRlIHdheXMgdG8KKyAqCWV4cG9zZSBpbmZvcm1hdGlvbiB0byB1c2VyIHNwYWNlIHJlZ2FyZGxlc3Mgb2Ygd2hlcmUgdGhleQorICoJZG8gKG9yIGRvbid0KSBzaG93IHVwIG90aGVyd2lzZSBpbiB0aGUgZmlsZXN5c3RlbS4KKyAqIEBzdXNwZW5kOiBDYWxsZWQgd2hlbiB0aGUgZGV2aWNlIGlzIGdvaW5nIHRvIGJlIHN1c3BlbmRlZCBieSB0aGUgc3lzdGVtLgorICogQHJlc3VtZTogQ2FsbGVkIHdoZW4gdGhlIGRldmljZSBpcyBiZWluZyByZXN1bWVkIGJ5IHRoZSBzeXN0ZW0uCisgKiBAaWRfdGFibGU6IFVTQiBkcml2ZXJzIHVzZSBJRCB0YWJsZSB0byBzdXBwb3J0IGhvdHBsdWdnaW5nLgorICoJRXhwb3J0IHRoaXMgd2l0aCBNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwuLi4pLiAgVGhpcyBtdXN0IGJlIHNldAorICoJb3IgeW91ciBkcml2ZXIncyBwcm9iZSBmdW5jdGlvbiB3aWxsIG5ldmVyIGdldCBjYWxsZWQuCisgKiBAZHJpdmVyOiB0aGUgZHJpdmVyIG1vZGVsIGNvcmUgZHJpdmVyIHN0cnVjdHVyZS4KKyAqCisgKiBVU0IgZHJpdmVycyBtdXN0IHByb3ZpZGUgYSBuYW1lLCBwcm9iZSgpIGFuZCBkaXNjb25uZWN0KCkgbWV0aG9kcywKKyAqIGFuZCBhbiBpZF90YWJsZS4gIE90aGVyIGRyaXZlciBmaWVsZHMgYXJlIG9wdGlvbmFsLgorICoKKyAqIFRoZSBpZF90YWJsZSBpcyB1c2VkIGluIGhvdHBsdWdnaW5nLiAgSXQgaG9sZHMgYSBzZXQgb2YgZGVzY3JpcHRvcnMsCisgKiBhbmQgc3BlY2lhbGl6ZWQgZGF0YSBtYXkgYmUgYXNzb2NpYXRlZCB3aXRoIGVhY2ggZW50cnkuICBUaGF0IHRhYmxlCisgKiBpcyB1c2VkIGJ5IGJvdGggdXNlciBhbmQga2VybmVsIG1vZGUgaG90cGx1Z2dpbmcgc3VwcG9ydC4KKyAqCisgKiBUaGUgcHJvYmUoKSBhbmQgZGlzY29ubmVjdCgpIG1ldGhvZHMgYXJlIGNhbGxlZCBpbiBhIGNvbnRleHQgd2hlcmUKKyAqIHRoZXkgY2FuIHNsZWVwLCBidXQgdGhleSBzaG91bGQgYXZvaWQgYWJ1c2luZyB0aGUgcHJpdmlsZWdlLiAgTW9zdAorICogd29yayB0byBjb25uZWN0IHRvIGEgZGV2aWNlIHNob3VsZCBiZSBkb25lIHdoZW4gdGhlIGRldmljZSBpcyBvcGVuZWQsCisgKiBhbmQgdW5kb25lIGF0IHRoZSBsYXN0IGNsb3NlLiAgVGhlIGRpc2Nvbm5lY3QgY29kZSBuZWVkcyB0byBhZGRyZXNzCisgKiBjb25jdXJyZW5jeSBpc3N1ZXMgd2l0aCByZXNwZWN0IHRvIG9wZW4oKSBhbmQgY2xvc2UoKSBtZXRob2RzLCBhcworICogd2VsbCBhcyBmb3JjaW5nIGFsbCBwZW5kaW5nIEkvTyByZXF1ZXN0cyB0byBjb21wbGV0ZSAoYnkgdW5saW5raW5nCisgKiB0aGVtIGFzIG5lY2Vzc2FyeSwgYW5kIGJsb2NraW5nIHVudGlsIHRoZSB1bmxpbmtzIGNvbXBsZXRlKS4KKyAqLworc3RydWN0IHVzYl9kcml2ZXIgeworCXN0cnVjdCBtb2R1bGUgKm93bmVyOworCisJY29uc3QgY2hhciAqbmFtZTsKKworCWludCAoKnByb2JlKSAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCSAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCk7CisKKwl2b2lkICgqZGlzY29ubmVjdCkgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKTsKKworCWludCAoKmlvY3RsKSAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHVuc2lnbmVkIGludCBjb2RlLCB2b2lkICpidWYpOworCisJaW50ICgqc3VzcGVuZCkgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCB1MzIgc3RhdGUpOworCWludCAoKnJlc3VtZSkgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKTsKKworCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZF90YWJsZTsKKworCXN0cnVjdCBkZXZpY2VfZHJpdmVyIGRyaXZlcjsKK307CisjZGVmaW5lCXRvX3VzYl9kcml2ZXIoZCkgY29udGFpbmVyX29mKGQsIHN0cnVjdCB1c2JfZHJpdmVyLCBkcml2ZXIpCisKK2V4dGVybiBzdHJ1Y3QgYnVzX3R5cGUgdXNiX2J1c190eXBlOworCisvKioKKyAqIHN0cnVjdCB1c2JfY2xhc3NfZHJpdmVyIC0gaWRlbnRpZmllcyBhIFVTQiBkcml2ZXIgdGhhdCB3YW50cyB0byB1c2UgdGhlIFVTQiBtYWpvciBudW1iZXIKKyAqIEBuYW1lOiBkZXZmcyBuYW1lIGZvciB0aGlzIGRyaXZlci4gIFdpbGwgYWxzbyBiZSB1c2VkIGJ5IHRoZSBkcml2ZXIKKyAqCWNsYXNzIGNvZGUgdG8gY3JlYXRlIGEgdXNiIGNsYXNzIGRldmljZS4KKyAqIEBmb3BzOiBwb2ludGVyIHRvIHRoZSBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG9mIHRoaXMgZHJpdmVyLgorICogQG1vZGU6IHRoZSBtb2RlIGZvciB0aGUgZGV2ZnMgZmlsZSB0byBiZSBjcmVhdGVkIGZvciB0aGlzIGRyaXZlci4KKyAqIEBtaW5vcl9iYXNlOiB0aGUgc3RhcnQgb2YgdGhlIG1pbm9yIHJhbmdlIGZvciB0aGlzIGRyaXZlci4KKyAqCisgKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIGZvciB0aGUgdXNiX3JlZ2lzdGVyX2RldigpIGFuZAorICogdXNiX3VucmVnaXN0ZXJfZGV2KCkgZnVuY3Rpb25zLCB0byBjb25zb2xpZGF0ZSBhIG51bWJlciBvZiB0aGUKKyAqIHBhcmFtZXRlcnMgdXNlZCBmb3IgdGhlbS4KKyAqLworc3RydWN0IHVzYl9jbGFzc19kcml2ZXIgeworCWNoYXIgKm5hbWU7CisJc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZm9wczsKKwltb2RlX3QgbW9kZTsKKwlpbnQgbWlub3JfYmFzZTsJCit9OworCisvKgorICogdXNlIHRoZXNlIGluIG1vZHVsZV9pbml0KCkvbW9kdWxlX2V4aXQoKQorICogYW5kIGRvbid0IGZvcmdldCBNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgLi4uKQorICovCitleHRlcm4gaW50IHVzYl9yZWdpc3RlcihzdHJ1Y3QgdXNiX2RyaXZlciAqKTsKK2V4dGVybiB2b2lkIHVzYl9kZXJlZ2lzdGVyKHN0cnVjdCB1c2JfZHJpdmVyICopOworCitleHRlcm4gaW50IHVzYl9yZWdpc3Rlcl9kZXYoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQkgICAgc3RydWN0IHVzYl9jbGFzc19kcml2ZXIgKmNsYXNzX2RyaXZlcik7CitleHRlcm4gdm9pZCB1c2JfZGVyZWdpc3Rlcl9kZXYoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQkgICAgICAgc3RydWN0IHVzYl9jbGFzc19kcml2ZXIgKmNsYXNzX2RyaXZlcik7CisKK2V4dGVybiBpbnQgdXNiX2Rpc2FibGVkKHZvaWQpOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICogVVJCIHN1cHBvcnQsIGZvciBhc3luY2hyb25vdXMgcmVxdWVzdCBjb21wbGV0aW9ucworICovCisKKy8qCisgKiB1cmItPnRyYW5zZmVyX2ZsYWdzOgorICovCisjZGVmaW5lIFVSQl9TSE9SVF9OT1RfT0sJMHgwMDAxCS8qIHJlcG9ydCBzaG9ydCByZWFkcyBhcyBlcnJvcnMgKi8KKyNkZWZpbmUgVVJCX0lTT19BU0FQCQkweDAwMDIJLyogaXNvLW9ubHksIHVyYi0+c3RhcnRfZnJhbWUgaWdub3JlZCAqLworI2RlZmluZSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUAkweDAwMDQJLyogdXJiLT50cmFuc2Zlcl9kbWEgdmFsaWQgb24gc3VibWl0ICovCisjZGVmaW5lIFVSQl9OT19TRVRVUF9ETUFfTUFQCTB4MDAwOAkvKiB1cmItPnNldHVwX2RtYSB2YWxpZCBvbiBzdWJtaXQgKi8KKyNkZWZpbmUgVVJCX0FTWU5DX1VOTElOSwkweDAwMTAJLyogdXNiX3VubGlua191cmIoKSByZXR1cm5zIGFzYXAgKi8KKyNkZWZpbmUgVVJCX05PX0ZTQlIJCTB4MDAyMAkvKiBVSENJLXNwZWNpZmljICovCisjZGVmaW5lIFVSQl9aRVJPX1BBQ0tFVAkJMHgwMDQwCS8qIEZpbmlzaCBidWxrIE9VVHMgd2l0aCBzaG9ydCBwYWNrZXQgKi8KKyNkZWZpbmUgVVJCX05PX0lOVEVSUlVQVAkweDAwODAJLyogSElOVDogbm8gbm9uLWVycm9yIGludGVycnVwdCBuZWVkZWQgKi8KKworc3RydWN0IHVzYl9pc29fcGFja2V0X2Rlc2NyaXB0b3IgeworCXVuc2lnbmVkIGludCBvZmZzZXQ7CisJdW5zaWduZWQgaW50IGxlbmd0aDsJCS8qIGV4cGVjdGVkIGxlbmd0aCAqLworCXVuc2lnbmVkIGludCBhY3R1YWxfbGVuZ3RoOworCXVuc2lnbmVkIGludCBzdGF0dXM7Cit9OworCitzdHJ1Y3QgdXJiOworc3RydWN0IHB0X3JlZ3M7CisKK3R5cGVkZWYgdm9pZCAoKnVzYl9jb21wbGV0ZV90KShzdHJ1Y3QgdXJiICosIHN0cnVjdCBwdF9yZWdzICopOworCisvKioKKyAqIHN0cnVjdCB1cmIgLSBVU0IgUmVxdWVzdCBCbG9jaworICogQHVyYl9saXN0OiBGb3IgdXNlIGJ5IGN1cnJlbnQgb3duZXIgb2YgdGhlIFVSQi4KKyAqIEBwaXBlOiBIb2xkcyBlbmRwb2ludCBudW1iZXIsIGRpcmVjdGlvbiwgdHlwZSwgYW5kIG1vcmUuCisgKglDcmVhdGUgdGhlc2UgdmFsdWVzIHdpdGggdGhlIGVpZ2h0IG1hY3JvcyBhdmFpbGFibGU7CisgKgl1c2Jfe3NuZCxyY3Z9VFlQRXBpcGUoZGV2LGVuZHBvaW50KSwgd2hlcmUgdGhlIFRZUEUgaXMgImN0cmwiCisgKgkoY29udHJvbCksICJidWxrIiwgImludCIgKGludGVycnVwdCksIG9yICJpc28iIChpc29jaHJvbm91cykuCisgKglGb3IgZXhhbXBsZSB1c2Jfc25kYnVsa3BpcGUoKSBvciB1c2JfcmN2aW50cGlwZSgpLiAgRW5kcG9pbnQKKyAqCW51bWJlcnMgcmFuZ2UgZnJvbSB6ZXJvIHRvIGZpZnRlZW4uICBOb3RlIHRoYXQgImluIiBlbmRwb2ludCB0d28KKyAqCWlzIGEgZGlmZmVyZW50IGVuZHBvaW50IChhbmQgcGlwZSkgZnJvbSAib3V0IiBlbmRwb2ludCB0d28uCisgKglUaGUgY3VycmVudCBjb25maWd1cmF0aW9uIGNvbnRyb2xzIHRoZSBleGlzdGVuY2UsIHR5cGUsIGFuZAorICoJbWF4aW11bSBwYWNrZXQgc2l6ZSBvZiBhbnkgZ2l2ZW4gZW5kcG9pbnQuCisgKiBAZGV2OiBJZGVudGlmaWVzIHRoZSBVU0IgZGV2aWNlIHRvIHBlcmZvcm0gdGhlIHJlcXVlc3QuCisgKiBAc3RhdHVzOiBUaGlzIGlzIHJlYWQgaW4gbm9uLWlzbyBjb21wbGV0aW9uIGZ1bmN0aW9ucyB0byBnZXQgdGhlCisgKglzdGF0dXMgb2YgdGhlIHBhcnRpY3VsYXIgcmVxdWVzdC4gIElTTyByZXF1ZXN0cyBvbmx5IHVzZSBpdAorICoJdG8gdGVsbCB3aGV0aGVyIHRoZSBVUkIgd2FzIHVubGlua2VkOyBkZXRhaWxlZCBzdGF0dXMgZm9yCisgKgllYWNoIGZyYW1lIGlzIGluIHRoZSBmaWVsZHMgb2YgdGhlIGlzb19mcmFtZS1kZXNjLgorICogQHRyYW5zZmVyX2ZsYWdzOiBBIHZhcmlldHkgb2YgZmxhZ3MgbWF5IGJlIHVzZWQgdG8gYWZmZWN0IGhvdyBVUkIKKyAqCXN1Ym1pc3Npb24sIHVubGlua2luZywgb3Igb3BlcmF0aW9uIGFyZSBoYW5kbGVkLiAgRGlmZmVyZW50CisgKglraW5kcyBvZiBVUkIgY2FuIHVzZSBkaWZmZXJlbnQgZmxhZ3MuCisgKiBAdHJhbnNmZXJfYnVmZmVyOiAgVGhpcyBpZGVudGlmaWVzIHRoZSBidWZmZXIgdG8gKG9yIGZyb20pIHdoaWNoCisgKiAJdGhlIEkvTyByZXF1ZXN0IHdpbGwgYmUgcGVyZm9ybWVkICh1bmxlc3MgVVJCX05PX1RSQU5TRkVSX0RNQV9NQVAKKyAqCWlzIHNldCkuICBUaGlzIGJ1ZmZlciBtdXN0IGJlIHN1aXRhYmxlIGZvciBETUE7IGFsbG9jYXRlIGl0IHdpdGgKKyAqCWttYWxsb2MoKSBvciBlcXVpdmFsZW50LiAgRm9yIHRyYW5zZmVycyB0byAiaW4iIGVuZHBvaW50cywgY29udGVudHMKKyAqCW9mIHRoaXMgYnVmZmVyIHdpbGwgYmUgbW9kaWZpZWQuICBUaGlzIGJ1ZmZlciBpcyB1c2VkIGZvciB0aGUgZGF0YQorICoJc3RhZ2Ugb2YgY29udHJvbCB0cmFuc2ZlcnMuCisgKiBAdHJhbnNmZXJfZG1hOiBXaGVuIHRyYW5zZmVyX2ZsYWdzIGluY2x1ZGVzIFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQLAorICoJdGhlIGRldmljZSBkcml2ZXIgaXMgc2F5aW5nIHRoYXQgaXQgcHJvdmlkZWQgdGhpcyBETUEgYWRkcmVzcywKKyAqCXdoaWNoIHRoZSBob3N0IGNvbnRyb2xsZXIgZHJpdmVyIHNob3VsZCB1c2UgaW4gcHJlZmVyZW5jZSB0byB0aGUKKyAqCXRyYW5zZmVyX2J1ZmZlci4KKyAqIEB0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoOiBIb3cgYmlnIGlzIHRyYW5zZmVyX2J1ZmZlci4gIFRoZSB0cmFuc2ZlciBtYXkKKyAqCWJlIGJyb2tlbiB1cCBpbnRvIGNodW5rcyBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgbWF4aW11bSBwYWNrZXQKKyAqCXNpemUgZm9yIHRoZSBlbmRwb2ludCwgd2hpY2ggaXMgYSBmdW5jdGlvbiBvZiB0aGUgY29uZmlndXJhdGlvbgorICoJYW5kIGlzIGVuY29kZWQgaW4gdGhlIHBpcGUuICBXaGVuIHRoZSBsZW5ndGggaXMgemVybywgbmVpdGhlcgorICoJdHJhbnNmZXJfYnVmZmVyIG5vciB0cmFuc2Zlcl9kbWEgaXMgdXNlZC4KKyAqIEBhY3R1YWxfbGVuZ3RoOiBUaGlzIGlzIHJlYWQgaW4gbm9uLWlzbyBjb21wbGV0aW9uIGZ1bmN0aW9ucywgYW5kCisgKglpdCB0ZWxscyBob3cgbWFueSBieXRlcyAob3V0IG9mIHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpIHdlcmUKKyAqCXRyYW5zZmVycmVkLiAgSXQgd2lsbCBub3JtYWxseSBiZSB0aGUgc2FtZSBhcyByZXF1ZXN0ZWQsIHVubGVzcworICoJZWl0aGVyIGFuIGVycm9yIHdhcyByZXBvcnRlZCBvciBhIHNob3J0IHJlYWQgd2FzIHBlcmZvcm1lZC4KKyAqCVRoZSBVUkJfU0hPUlRfTk9UX09LIHRyYW5zZmVyIGZsYWcgbWF5IGJlIHVzZWQgdG8gbWFrZSBzdWNoCisgKglzaG9ydCByZWFkcyBiZSByZXBvcnRlZCBhcyBlcnJvcnMuIAorICogQHNldHVwX3BhY2tldDogT25seSB1c2VkIGZvciBjb250cm9sIHRyYW5zZmVycywgdGhpcyBwb2ludHMgdG8gZWlnaHQgYnl0ZXMKKyAqCW9mIHNldHVwIGRhdGEuICBDb250cm9sIHRyYW5zZmVycyBhbHdheXMgc3RhcnQgYnkgc2VuZGluZyB0aGlzIGRhdGEKKyAqCXRvIHRoZSBkZXZpY2UuICBUaGVuIHRyYW5zZmVyX2J1ZmZlciBpcyByZWFkIG9yIHdyaXR0ZW4sIGlmIG5lZWRlZC4KKyAqIEBzZXR1cF9kbWE6IEZvciBjb250cm9sIHRyYW5zZmVycyB3aXRoIFVSQl9OT19TRVRVUF9ETUFfTUFQIHNldCwgdGhlCisgKglkZXZpY2UgZHJpdmVyIGhhcyBwcm92aWRlZCB0aGlzIERNQSBhZGRyZXNzIGZvciB0aGUgc2V0dXAgcGFja2V0LgorICoJVGhlIGhvc3QgY29udHJvbGxlciBkcml2ZXIgc2hvdWxkIHVzZSB0aGlzIGluIHByZWZlcmVuY2UgdG8KKyAqCXNldHVwX3BhY2tldC4KKyAqIEBzdGFydF9mcmFtZTogUmV0dXJucyB0aGUgaW5pdGlhbCBmcmFtZSBmb3IgaXNvY2hyb25vdXMgdHJhbnNmZXJzLgorICogQG51bWJlcl9vZl9wYWNrZXRzOiBMaXN0cyB0aGUgbnVtYmVyIG9mIElTTyB0cmFuc2ZlciBidWZmZXJzLgorICogQGludGVydmFsOiBTcGVjaWZpZXMgdGhlIHBvbGxpbmcgaW50ZXJ2YWwgZm9yIGludGVycnVwdCBvciBpc29jaHJvbm91cworICoJdHJhbnNmZXJzLiAgVGhlIHVuaXRzIGFyZSBmcmFtZXMgKG1pbGxpc2Vjb25kcykgZm9yIGZvciBmdWxsIGFuZCBsb3cKKyAqCXNwZWVkIGRldmljZXMsIGFuZCBtaWNyb2ZyYW1lcyAoMS84IG1pbGxpc2Vjb25kKSBmb3IgaGlnaHNwZWVkIG9uZXMuCisgKiBAZXJyb3JfY291bnQ6IFJldHVybnMgdGhlIG51bWJlciBvZiBJU08gdHJhbnNmZXJzIHRoYXQgcmVwb3J0ZWQgZXJyb3JzLgorICogQGNvbnRleHQ6IEZvciB1c2UgaW4gY29tcGxldGlvbiBmdW5jdGlvbnMuICBUaGlzIG5vcm1hbGx5IHBvaW50cyB0bworICoJcmVxdWVzdC1zcGVjaWZpYyBkcml2ZXIgY29udGV4dC4KKyAqIEBjb21wbGV0ZTogQ29tcGxldGlvbiBoYW5kbGVyLiBUaGlzIFVSQiBpcyBwYXNzZWQgYXMgdGhlIHBhcmFtZXRlciB0byB0aGUKKyAqCWNvbXBsZXRpb24gZnVuY3Rpb24uICBUaGUgY29tcGxldGlvbiBmdW5jdGlvbiBtYXkgdGhlbiBkbyB3aGF0CisgKglpdCBsaWtlcyB3aXRoIHRoZSBVUkIsIGluY2x1ZGluZyByZXN1Ym1pdHRpbmcgb3IgZnJlZWluZyBpdC4KKyAqIEBpc29fZnJhbWVfZGVzYzogVXNlZCB0byBwcm92aWRlIGFycmF5cyBvZiBJU08gdHJhbnNmZXIgYnVmZmVycyBhbmQgdG8gCisgKgljb2xsZWN0IHRoZSB0cmFuc2ZlciBzdGF0dXMgZm9yIGVhY2ggYnVmZmVyLgorICoKKyAqIFRoaXMgc3RydWN0dXJlIGlkZW50aWZpZXMgVVNCIHRyYW5zZmVyIHJlcXVlc3RzLiAgVVJCcyBtdXN0IGJlIGFsbG9jYXRlZCBieQorICogY2FsbGluZyB1c2JfYWxsb2NfdXJiKCkgYW5kIGZyZWVkIHdpdGggYSBjYWxsIHRvIHVzYl9mcmVlX3VyYigpLgorICogSW5pdGlhbGl6YXRpb24gbWF5IGJlIGRvbmUgdXNpbmcgdmFyaW91cyB1c2JfZmlsbF8qX3VyYigpIGZ1bmN0aW9ucy4gIFVSQnMKKyAqIGFyZSBzdWJtaXR0ZWQgdXNpbmcgdXNiX3N1Ym1pdF91cmIoKSwgYW5kIHBlbmRpbmcgcmVxdWVzdHMgbWF5IGJlIGNhbmNlbGVkCisgKiB1c2luZyB1c2JfdW5saW5rX3VyYigpIG9yIHVzYl9raWxsX3VyYigpLgorICoKKyAqIERhdGEgVHJhbnNmZXIgQnVmZmVyczoKKyAqCisgKiBOb3JtYWxseSBkcml2ZXJzIHByb3ZpZGUgSS9PIGJ1ZmZlcnMgYWxsb2NhdGVkIHdpdGgga21hbGxvYygpIG9yIG90aGVyd2lzZQorICogdGFrZW4gZnJvbSB0aGUgZ2VuZXJhbCBwYWdlIHBvb2wuICBUaGF0IGlzIHByb3ZpZGVkIGJ5IHRyYW5zZmVyX2J1ZmZlcgorICogKGNvbnRyb2wgcmVxdWVzdHMgYWxzbyB1c2Ugc2V0dXBfcGFja2V0KSwgYW5kIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCisgKiBwZXJmb3JtIGEgZG1hIG1hcHBpbmcgKGFuZCB1bm1hcHBpbmcpIGZvciBlYWNoIGJ1ZmZlciB0cmFuc2ZlcnJlZC4gIFRob3NlCisgKiBtYXBwaW5nIG9wZXJhdGlvbnMgY2FuIGJlIGV4cGVuc2l2ZSBvbiBzb21lIHBsYXRmb3JtcyAocGVyaGFwcyB1c2luZyBhIGRtYQorICogYm91bmNlIGJ1ZmZlciBvciB0YWxraW5nIHRvIGFuIElPTU1VKSwKKyAqIGFsdGhvdWdoIHRoZXkncmUgY2hlYXAgb24gY29tbW9kaXR5IHg4NiBhbmQgcHBjIGhhcmR3YXJlLgorICoKKyAqIEFsdGVybmF0aXZlbHksIGRyaXZlcnMgbWF5IHBhc3MgdGhlIFVSQl9OT194eHhfRE1BX01BUCB0cmFuc2ZlciBmbGFncywKKyAqIHdoaWNoIHRlbGwgdGhlIGhvc3QgY29udHJvbGxlciBkcml2ZXIgdGhhdCBubyBzdWNoIG1hcHBpbmcgaXMgbmVlZGVkIHNpbmNlCisgKiB0aGUgZGV2aWNlIGRyaXZlciBpcyBETUEtYXdhcmUuICBGb3IgZXhhbXBsZSwgYSBkZXZpY2UgZHJpdmVyIG1pZ2h0CisgKiBhbGxvY2F0ZSBhIERNQSBidWZmZXIgd2l0aCB1c2JfYnVmZmVyX2FsbG9jKCkgb3IgY2FsbCB1c2JfYnVmZmVyX21hcCgpLgorICogV2hlbiB0aGVzZSB0cmFuc2ZlciBmbGFncyBhcmUgcHJvdmlkZWQsIGhvc3QgY29udHJvbGxlciBkcml2ZXJzIHdpbGwKKyAqIGF0dGVtcHQgdG8gdXNlIHRoZSBkbWEgYWRkcmVzc2VzIGZvdW5kIGluIHRoZSB0cmFuc2Zlcl9kbWEgYW5kL29yCisgKiBzZXR1cF9kbWEgZmllbGRzIHJhdGhlciB0aGFuIGRldGVybWluaW5nIGEgZG1hIGFkZHJlc3MgdGhlbXNlbHZlcy4gIChOb3RlCisgKiB0aGF0IHRyYW5zZmVyX2J1ZmZlciBhbmQgc2V0dXBfcGFja2V0IG11c3Qgc3RpbGwgYmUgc2V0IGJlY2F1c2Ugbm90IGFsbAorICogaG9zdCBjb250cm9sbGVycyB1c2UgRE1BLCBub3IgZG8gdmlydHVhbCByb290IGh1YnMpLgorICoKKyAqIEluaXRpYWxpemF0aW9uOgorICoKKyAqIEFsbCBVUkJzIHN1Ym1pdHRlZCBtdXN0IGluaXRpYWxpemUgdGhlIGRldiwgcGlwZSwgdHJhbnNmZXJfZmxhZ3MgKG1heSBiZQorICogemVybyksIGFuZCBjb21wbGV0ZSBmaWVsZHMuCisgKiBUaGUgVVJCX0FTWU5DX1VOTElOSyB0cmFuc2ZlciBmbGFnIGFmZmVjdHMgbGF0ZXIgaW52b2NhdGlvbnMgb2YKKyAqIHRoZSB1c2JfdW5saW5rX3VyYigpIHJvdXRpbmUuICBOb3RlOiBGYWlsdXJlIHRvIHNldCBVUkJfQVNZTkNfVU5MSU5LCisgKiB3aXRoIHVzYl91bmxpbmtfdXJiKCkgaXMgZGVwcmVjYXRlZC4gIEZvciBzeW5jaHJvbm91cyB1bmxpbmtzIHVzZQorICogdXNiX2tpbGxfdXJiKCkgaW5zdGVhZC4KKyAqCisgKiBBbGwgVVJCcyBtdXN0IGFsc28gaW5pdGlhbGl6ZSAKKyAqIHRyYW5zZmVyX2J1ZmZlciBhbmQgdHJhbnNmZXJfYnVmZmVyX2xlbmd0aC4gIFRoZXkgbWF5IHByb3ZpZGUgdGhlCisgKiBVUkJfU0hPUlRfTk9UX09LIHRyYW5zZmVyIGZsYWcsIGluZGljYXRpbmcgdGhhdCBzaG9ydCByZWFkcyBhcmUKKyAqIHRvIGJlIHRyZWF0ZWQgYXMgZXJyb3JzOyB0aGF0IGZsYWcgaXMgaW52YWxpZCBmb3Igd3JpdGUgcmVxdWVzdHMuCisgKgorICogQnVsayBVUkJzIG1heQorICogdXNlIHRoZSBVUkJfWkVST19QQUNLRVQgdHJhbnNmZXIgZmxhZywgaW5kaWNhdGluZyB0aGF0IGJ1bGsgT1VUIHRyYW5zZmVycworICogc2hvdWxkIGFsd2F5cyB0ZXJtaW5hdGUgd2l0aCBhIHNob3J0IHBhY2tldCwgZXZlbiBpZiBpdCBtZWFucyBhZGRpbmcgYW4KKyAqIGV4dHJhIHplcm8gbGVuZ3RoIHBhY2tldC4KKyAqCisgKiBDb250cm9sIFVSQnMgbXVzdCBwcm92aWRlIGEgc2V0dXBfcGFja2V0LiAgVGhlIHNldHVwX3BhY2tldCBhbmQKKyAqIHRyYW5zZmVyX2J1ZmZlciBtYXkgZWFjaCBiZSBtYXBwZWQgZm9yIERNQSBvciBub3QsIGluZGVwZW5kZW50bHkgb2YKKyAqIHRoZSBvdGhlci4gIFRoZSB0cmFuc2Zlcl9mbGFncyBiaXRzIFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQIGFuZAorICogVVJCX05PX1NFVFVQX0RNQV9NQVAgaW5kaWNhdGUgd2hpY2ggYnVmZmVycyBoYXZlIGFscmVhZHkgYmVlbiBtYXBwZWQuCisgKiBVUkJfTk9fU0VUVVBfRE1BX01BUCBpcyBpZ25vcmVkIGZvciBub24tY29udHJvbCBVUkJzLgorICoKKyAqIEludGVycnVwdCBVUkJzIG11c3QgcHJvdmlkZSBhbiBpbnRlcnZhbCwgc2F5aW5nIGhvdyBvZnRlbiAoaW4gbWlsbGlzZWNvbmRzCisgKiBvciwgZm9yIGhpZ2hzcGVlZCBkZXZpY2VzLCAxMjUgbWljcm9zZWNvbmQgdW5pdHMpCisgKiB0byBwb2xsIGZvciB0cmFuc2ZlcnMuICBBZnRlciB0aGUgVVJCIGhhcyBiZWVuIHN1Ym1pdHRlZCwgdGhlIGludGVydmFsCisgKiBmaWVsZCByZWZsZWN0cyBob3cgdGhlIHRyYW5zZmVyIHdhcyBhY3R1YWxseSBzY2hlZHVsZWQuCisgKiBUaGUgcG9sbGluZyBpbnRlcnZhbCBtYXkgYmUgbW9yZSBmcmVxdWVudCB0aGFuIHJlcXVlc3RlZC4KKyAqIEZvciBleGFtcGxlLCBzb21lIGNvbnRyb2xsZXJzIGhhdmUgYSBtYXhpbXVtIGludGVydmFsIG9mIDMyIG1pbGxpc2Vjb25kcywKKyAqIHdoaWxlIG90aGVycyBzdXBwb3J0IGludGVydmFscyBvZiB1cCB0byAxMDI0IG1pbGxpc2Vjb25kcy4KKyAqIElzb2Nocm9ub3VzIFVSQnMgYWxzbyBoYXZlIHRyYW5zZmVyIGludGVydmFscy4gIChOb3RlIHRoYXQgZm9yIGlzb2Nocm9ub3VzCisgKiBlbmRwb2ludHMsIGFzIHdlbGwgYXMgaGlnaCBzcGVlZCBpbnRlcnJ1cHQgZW5kcG9pbnRzLCB0aGUgZW5jb2Rpbmcgb2YKKyAqIHRoZSB0cmFuc2ZlciBpbnRlcnZhbCBpbiB0aGUgZW5kcG9pbnQgZGVzY3JpcHRvciBpcyBsb2dhcml0aG1pYy4KKyAqIERldmljZSBkcml2ZXJzIG11c3QgY29udmVydCB0aGF0IHZhbHVlIHRvIGxpbmVhciB1bml0cyB0aGVtc2VsdmVzLikKKyAqCisgKiBJc29jaHJvbm91cyBVUkJzIG5vcm1hbGx5IHVzZSB0aGUgVVJCX0lTT19BU0FQIHRyYW5zZmVyIGZsYWcsIHRlbGxpbmcKKyAqIHRoZSBob3N0IGNvbnRyb2xsZXIgdG8gc2NoZWR1bGUgdGhlIHRyYW5zZmVyIGFzIHNvb24gYXMgYmFuZHdpZHRoCisgKiB1dGlsaXphdGlvbiBhbGxvd3MsIGFuZCB0aGVuIHNldCBzdGFydF9mcmFtZSB0byByZWZsZWN0IHRoZSBhY3R1YWwgZnJhbWUKKyAqIHNlbGVjdGVkIGR1cmluZyBzdWJtaXNzaW9uLiAgT3RoZXJ3aXNlIGRyaXZlcnMgbXVzdCBzcGVjaWZ5IHRoZSBzdGFydF9mcmFtZQorICogYW5kIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgdHJhbnNmZXIgY2FuJ3QgYmVnaW4gdGhlbi4gIEhvd2V2ZXIsIGRyaXZlcnMKKyAqIHdvbid0IGtub3cgaG93IGJhbmR3aWR0aCBpcyBjdXJyZW50bHkgYWxsb2NhdGVkLCBhbmQgd2hpbGUgdGhleSBjYW4KKyAqIGZpbmQgdGhlIGN1cnJlbnQgZnJhbWUgdXNpbmcgdXNiX2dldF9jdXJyZW50X2ZyYW1lX251bWJlciAoKSB0aGV5IGNhbid0CisgKiBrbm93IHRoZSByYW5nZSBmb3IgdGhhdCBmcmFtZSBudW1iZXIuICAoUmFuZ2VzIGZvciBmcmFtZSBjb3VudGVyIHZhbHVlcworICogYXJlIEhDLXNwZWNpZmljLCBhbmQgY2FuIGdvIGZyb20gMjU2IHRvIDY1NTM2IGZyYW1lcyBmcm9tICJub3ciLikKKyAqCisgKiBJc29jaHJvbm91cyBVUkJzIGhhdmUgYSBkaWZmZXJlbnQgZGF0YSB0cmFuc2ZlciBtb2RlbCwgaW4gcGFydCBiZWNhdXNlCisgKiB0aGUgcXVhbGl0eSBvZiBzZXJ2aWNlIGlzIG9ubHkgImJlc3QgZWZmb3J0Ii4gIENhbGxlcnMgcHJvdmlkZSBzcGVjaWFsbHkKKyAqIGFsbG9jYXRlZCBVUkJzLCB3aXRoIG51bWJlcl9vZl9wYWNrZXRzIHdvcnRoIG9mIGlzb19mcmFtZV9kZXNjIHN0cnVjdHVyZXMKKyAqIGF0IHRoZSBlbmQuICBFYWNoIHN1Y2ggcGFja2V0IGlzIGFuIGluZGl2aWR1YWwgSVNPIHRyYW5zZmVyLiAgSXNvY2hyb25vdXMKKyAqIFVSQnMgYXJlIG5vcm1hbGx5IHF1ZXVlZCwgc3VibWl0dGVkIGJ5IGRyaXZlcnMgdG8gYXJyYW5nZSB0aGF0CisgKiB0cmFuc2ZlcnMgYXJlIGF0IGxlYXN0IGRvdWJsZSBidWZmZXJlZCwgYW5kIHRoZW4gZXhwbGljaXRseSByZXN1Ym1pdHRlZAorICogaW4gY29tcGxldGlvbiBoYW5kbGVycywgc28KKyAqIHRoYXQgZGF0YSAoc3VjaCBhcyBhdWRpbyBvciB2aWRlbykgc3RyZWFtcyBhdCBhcyBjb25zdGFudCBhIHJhdGUgYXMgdGhlCisgKiBob3N0IGNvbnRyb2xsZXIgc2NoZWR1bGVyIGNhbiBzdXBwb3J0LgorICoKKyAqIENvbXBsZXRpb24gQ2FsbGJhY2tzOgorICoKKyAqIFRoZSBjb21wbGV0aW9uIGNhbGxiYWNrIGlzIG1hZGUgaW5faW50ZXJydXB0KCksIGFuZCBvbmUgb2YgdGhlIGZpcnN0CisgKiB0aGluZ3MgdGhhdCBhIGNvbXBsZXRpb24gaGFuZGxlciBzaG91bGQgZG8gaXMgY2hlY2sgdGhlIHN0YXR1cyBmaWVsZC4KKyAqIFRoZSBzdGF0dXMgZmllbGQgaXMgcHJvdmlkZWQgZm9yIGFsbCBVUkJzLiAgSXQgaXMgdXNlZCB0byByZXBvcnQKKyAqIHVubGlua2VkIFVSQnMsIGFuZCBzdGF0dXMgZm9yIGFsbCBub24tSVNPIHRyYW5zZmVycy4gIEl0IHNob3VsZCBub3QKKyAqIGJlIGV4YW1pbmVkIGJlZm9yZSB0aGUgVVJCIGlzIHJldHVybmVkIHRvIHRoZSBjb21wbGV0aW9uIGhhbmRsZXIuCisgKgorICogVGhlIGNvbnRleHQgZmllbGQgaXMgbm9ybWFsbHkgdXNlZCB0byBsaW5rIFVSQnMgYmFjayB0byB0aGUgcmVsZXZhbnQKKyAqIGRyaXZlciBvciByZXF1ZXN0IHN0YXRlLgorICoKKyAqIFdoZW4gdGhlIGNvbXBsZXRpb24gY2FsbGJhY2sgaXMgaW52b2tlZCBmb3Igbm9uLWlzb2Nocm9ub3VzIFVSQnMsIHRoZQorICogYWN0dWFsX2xlbmd0aCBmaWVsZCB0ZWxscyBob3cgbWFueSBieXRlcyB3ZXJlIHRyYW5zZmVycmVkLiAgVGhpcyBmaWVsZAorICogaXMgdXBkYXRlZCBldmVuIHdoZW4gdGhlIFVSQiB0ZXJtaW5hdGVkIHdpdGggYW4gZXJyb3Igb3Igd2FzIHVubGlua2VkLgorICoKKyAqIElTTyB0cmFuc2ZlciBzdGF0dXMgaXMgcmVwb3J0ZWQgaW4gdGhlIHN0YXR1cyBhbmQgYWN0dWFsX2xlbmd0aCBmaWVsZHMKKyAqIG9mIHRoZSBpc29fZnJhbWVfZGVzYyBhcnJheSwgYW5kIHRoZSBudW1iZXIgb2YgZXJyb3JzIGlzIHJlcG9ydGVkIGluCisgKiBlcnJvcl9jb3VudC4gIENvbXBsZXRpb24gY2FsbGJhY2tzIGZvciBJU08gdHJhbnNmZXJzIHdpbGwgbm9ybWFsbHkKKyAqIChyZSlzdWJtaXQgVVJCcyB0byBlbnN1cmUgYSBjb25zdGFudCB0cmFuc2ZlciByYXRlLgorICovCitzdHJ1Y3QgdXJiCit7CisJLyogcHJpdmF0ZSwgdXNiIGNvcmUgYW5kIGhvc3QgY29udHJvbGxlciBvbmx5IGZpZWxkcyBpbiB0aGUgdXJiICovCisJc3RydWN0IGtyZWYga3JlZjsJCS8qIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUgVVJCICovCisJc3BpbmxvY2tfdCBsb2NrOwkJLyogbG9jayBmb3IgdGhlIFVSQiAqLworCXZvaWQgKmhjcHJpdjsJCQkvKiBwcml2YXRlIGRhdGEgZm9yIGhvc3QgY29udHJvbGxlciAqLworCXN0cnVjdCBsaXN0X2hlYWQgdXJiX2xpc3Q7CS8qIGxpc3QgcG9pbnRlciB0byBhbGwgYWN0aXZlIHVyYnMgKi8KKwlpbnQgYmFuZHdpZHRoOwkJCS8qIGJhbmR3aWR0aCBmb3IgSU5UL0lTTyByZXF1ZXN0ICovCisJYXRvbWljX3QgdXNlX2NvdW50OwkJLyogY29uY3VycmVudCBzdWJtaXNzaW9ucyBjb3VudGVyICovCisJdTggcmVqZWN0OwkJCS8qIHN1Ym1pc3Npb25zIHdpbGwgZmFpbCAqLworCisJLyogcHVibGljLCBkb2N1bWVudGVkIGZpZWxkcyBpbiB0aGUgdXJiIHRoYXQgY2FuIGJlIHVzZWQgYnkgZHJpdmVycyAqLworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXY7IAkvKiAoaW4pIHBvaW50ZXIgdG8gYXNzb2NpYXRlZCBkZXZpY2UgKi8KKwl1bnNpZ25lZCBpbnQgcGlwZTsJCS8qIChpbikgcGlwZSBpbmZvcm1hdGlvbiAqLworCWludCBzdGF0dXM7CQkJLyogKHJldHVybikgbm9uLUlTTyBzdGF0dXMgKi8KKwl1bnNpZ25lZCBpbnQgdHJhbnNmZXJfZmxhZ3M7CS8qIChpbikgVVJCX1NIT1JUX05PVF9PSyB8IC4uLiovCisJdm9pZCAqdHJhbnNmZXJfYnVmZmVyOwkJLyogKGluKSBhc3NvY2lhdGVkIGRhdGEgYnVmZmVyICovCisJZG1hX2FkZHJfdCB0cmFuc2Zlcl9kbWE7CS8qIChpbikgZG1hIGFkZHIgZm9yIHRyYW5zZmVyX2J1ZmZlciAqLworCWludCB0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoOwkvKiAoaW4pIGRhdGEgYnVmZmVyIGxlbmd0aCAqLworCWludCBhY3R1YWxfbGVuZ3RoOwkJLyogKHJldHVybikgYWN0dWFsIHRyYW5zZmVyIGxlbmd0aCAqLworCXVuc2lnbmVkIGNoYXIgKnNldHVwX3BhY2tldDsJLyogKGluKSBzZXR1cCBwYWNrZXQgKGNvbnRyb2wgb25seSkgKi8KKwlkbWFfYWRkcl90IHNldHVwX2RtYTsJCS8qIChpbikgZG1hIGFkZHIgZm9yIHNldHVwX3BhY2tldCAqLworCWludCBzdGFydF9mcmFtZTsJCS8qIChtb2RpZnkpIHN0YXJ0IGZyYW1lIChJU08pICovCisJaW50IG51bWJlcl9vZl9wYWNrZXRzOwkJLyogKGluKSBudW1iZXIgb2YgSVNPIHBhY2tldHMgKi8KKwlpbnQgaW50ZXJ2YWw7CQkJLyogKG1vZGlmeSkgdHJhbnNmZXIgaW50ZXJ2YWwgKElOVC9JU08pICovCisJaW50IGVycm9yX2NvdW50OwkJLyogKHJldHVybikgbnVtYmVyIG9mIElTTyBlcnJvcnMgKi8KKwl2b2lkICpjb250ZXh0OwkJCS8qIChpbikgY29udGV4dCBmb3IgY29tcGxldGlvbiAqLworCXVzYl9jb21wbGV0ZV90IGNvbXBsZXRlOwkvKiAoaW4pIGNvbXBsZXRpb24gcm91dGluZSAqLworCXN0cnVjdCB1c2JfaXNvX3BhY2tldF9kZXNjcmlwdG9yIGlzb19mcmFtZV9kZXNjWzBdOwkvKiAoaW4pIElTTyBPTkxZICovCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKioKKyAqIHVzYl9maWxsX2NvbnRyb2xfdXJiIC0gaW5pdGlhbGl6ZXMgYSBjb250cm9sIHVyYgorICogQHVyYjogcG9pbnRlciB0byB0aGUgdXJiIHRvIGluaXRpYWxpemUuCisgKiBAZGV2OiBwb2ludGVyIHRvIHRoZSBzdHJ1Y3QgdXNiX2RldmljZSBmb3IgdGhpcyB1cmIuCisgKiBAcGlwZTogdGhlIGVuZHBvaW50IHBpcGUKKyAqIEBzZXR1cF9wYWNrZXQ6IHBvaW50ZXIgdG8gdGhlIHNldHVwX3BhY2tldCBidWZmZXIKKyAqIEB0cmFuc2Zlcl9idWZmZXI6IHBvaW50ZXIgdG8gdGhlIHRyYW5zZmVyIGJ1ZmZlcgorICogQGJ1ZmZlcl9sZW5ndGg6IGxlbmd0aCBvZiB0aGUgdHJhbnNmZXIgYnVmZmVyCisgKiBAY29tcGxldGU6IHBvaW50ZXIgdG8gdGhlIHVzYl9jb21wbGV0ZV90IGZ1bmN0aW9uCisgKiBAY29udGV4dDogd2hhdCB0byBzZXQgdGhlIHVyYiBjb250ZXh0IHRvLgorICoKKyAqIEluaXRpYWxpemVzIGEgY29udHJvbCB1cmIgd2l0aCB0aGUgcHJvcGVyIGluZm9ybWF0aW9uIG5lZWRlZCB0byBzdWJtaXQKKyAqIGl0IHRvIGEgZGV2aWNlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgdXNiX2ZpbGxfY29udHJvbF91cmIgKHN0cnVjdCB1cmIgKnVyYiwKKwkJCQkJIHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsCisJCQkJCSB1bnNpZ25lZCBpbnQgcGlwZSwKKwkJCQkJIHVuc2lnbmVkIGNoYXIgKnNldHVwX3BhY2tldCwKKwkJCQkJIHZvaWQgKnRyYW5zZmVyX2J1ZmZlciwKKwkJCQkJIGludCBidWZmZXJfbGVuZ3RoLAorCQkJCQkgdXNiX2NvbXBsZXRlX3QgY29tcGxldGUsCisJCQkJCSB2b2lkICpjb250ZXh0KQoreworCXNwaW5fbG9ja19pbml0KCZ1cmItPmxvY2spOworCXVyYi0+ZGV2ID0gZGV2OworCXVyYi0+cGlwZSA9IHBpcGU7CisJdXJiLT5zZXR1cF9wYWNrZXQgPSBzZXR1cF9wYWNrZXQ7CisJdXJiLT50cmFuc2Zlcl9idWZmZXIgPSB0cmFuc2Zlcl9idWZmZXI7CisJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gYnVmZmVyX2xlbmd0aDsKKwl1cmItPmNvbXBsZXRlID0gY29tcGxldGU7CisJdXJiLT5jb250ZXh0ID0gY29udGV4dDsKK30KKworLyoqCisgKiB1c2JfZmlsbF9idWxrX3VyYiAtIG1hY3JvIHRvIGhlbHAgaW5pdGlhbGl6ZSBhIGJ1bGsgdXJiCisgKiBAdXJiOiBwb2ludGVyIHRvIHRoZSB1cmIgdG8gaW5pdGlhbGl6ZS4KKyAqIEBkZXY6IHBvaW50ZXIgdG8gdGhlIHN0cnVjdCB1c2JfZGV2aWNlIGZvciB0aGlzIHVyYi4KKyAqIEBwaXBlOiB0aGUgZW5kcG9pbnQgcGlwZQorICogQHRyYW5zZmVyX2J1ZmZlcjogcG9pbnRlciB0byB0aGUgdHJhbnNmZXIgYnVmZmVyCisgKiBAYnVmZmVyX2xlbmd0aDogbGVuZ3RoIG9mIHRoZSB0cmFuc2ZlciBidWZmZXIKKyAqIEBjb21wbGV0ZTogcG9pbnRlciB0byB0aGUgdXNiX2NvbXBsZXRlX3QgZnVuY3Rpb24KKyAqIEBjb250ZXh0OiB3aGF0IHRvIHNldCB0aGUgdXJiIGNvbnRleHQgdG8uCisgKgorICogSW5pdGlhbGl6ZXMgYSBidWxrIHVyYiB3aXRoIHRoZSBwcm9wZXIgaW5mb3JtYXRpb24gbmVlZGVkIHRvIHN1Ym1pdCBpdAorICogdG8gYSBkZXZpY2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB1c2JfZmlsbF9idWxrX3VyYiAoc3RydWN0IHVyYiAqdXJiLAorCQkJCSAgICAgIHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsCisJCQkJICAgICAgdW5zaWduZWQgaW50IHBpcGUsCisJCQkJICAgICAgdm9pZCAqdHJhbnNmZXJfYnVmZmVyLAorCQkJCSAgICAgIGludCBidWZmZXJfbGVuZ3RoLAorCQkJCSAgICAgIHVzYl9jb21wbGV0ZV90IGNvbXBsZXRlLAorCQkJCSAgICAgIHZvaWQgKmNvbnRleHQpCit7CisJc3Bpbl9sb2NrX2luaXQoJnVyYi0+bG9jayk7CisJdXJiLT5kZXYgPSBkZXY7CisJdXJiLT5waXBlID0gcGlwZTsKKwl1cmItPnRyYW5zZmVyX2J1ZmZlciA9IHRyYW5zZmVyX2J1ZmZlcjsKKwl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBidWZmZXJfbGVuZ3RoOworCXVyYi0+Y29tcGxldGUgPSBjb21wbGV0ZTsKKwl1cmItPmNvbnRleHQgPSBjb250ZXh0OworfQorCisvKioKKyAqIHVzYl9maWxsX2ludF91cmIgLSBtYWNybyB0byBoZWxwIGluaXRpYWxpemUgYSBpbnRlcnJ1cHQgdXJiCisgKiBAdXJiOiBwb2ludGVyIHRvIHRoZSB1cmIgdG8gaW5pdGlhbGl6ZS4KKyAqIEBkZXY6IHBvaW50ZXIgdG8gdGhlIHN0cnVjdCB1c2JfZGV2aWNlIGZvciB0aGlzIHVyYi4KKyAqIEBwaXBlOiB0aGUgZW5kcG9pbnQgcGlwZQorICogQHRyYW5zZmVyX2J1ZmZlcjogcG9pbnRlciB0byB0aGUgdHJhbnNmZXIgYnVmZmVyCisgKiBAYnVmZmVyX2xlbmd0aDogbGVuZ3RoIG9mIHRoZSB0cmFuc2ZlciBidWZmZXIKKyAqIEBjb21wbGV0ZTogcG9pbnRlciB0byB0aGUgdXNiX2NvbXBsZXRlX3QgZnVuY3Rpb24KKyAqIEBjb250ZXh0OiB3aGF0IHRvIHNldCB0aGUgdXJiIGNvbnRleHQgdG8uCisgKiBAaW50ZXJ2YWw6IHdoYXQgdG8gc2V0IHRoZSB1cmIgaW50ZXJ2YWwgdG8sIGVuY29kZWQgbGlrZQorICoJdGhlIGVuZHBvaW50IGRlc2NyaXB0b3IncyBiSW50ZXJ2YWwgdmFsdWUuCisgKgorICogSW5pdGlhbGl6ZXMgYSBpbnRlcnJ1cHQgdXJiIHdpdGggdGhlIHByb3BlciBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gc3VibWl0CisgKiBpdCB0byBhIGRldmljZS4KKyAqIE5vdGUgdGhhdCBoaWdoIHNwZWVkIGludGVycnVwdCBlbmRwb2ludHMgdXNlIGEgbG9nYXJpdGhtaWMgZW5jb2Rpbmcgb2YKKyAqIHRoZSBlbmRwb2ludCBpbnRlcnZhbCwgYW5kIGV4cHJlc3MgcG9sbGluZyBpbnRlcnZhbHMgaW4gbWljcm9mcmFtZXMKKyAqIChlaWdodCBwZXIgbWlsbGlzZWNvbmQpIHJhdGhlciB0aGFuIGluIGZyYW1lcyAob25lIHBlciBtaWxsaXNlY29uZCkuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB1c2JfZmlsbF9pbnRfdXJiIChzdHJ1Y3QgdXJiICp1cmIsCisJCQkJICAgICBzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LAorCQkJCSAgICAgdW5zaWduZWQgaW50IHBpcGUsCisJCQkJICAgICB2b2lkICp0cmFuc2Zlcl9idWZmZXIsCisJCQkJICAgICBpbnQgYnVmZmVyX2xlbmd0aCwKKwkJCQkgICAgIHVzYl9jb21wbGV0ZV90IGNvbXBsZXRlLAorCQkJCSAgICAgdm9pZCAqY29udGV4dCwKKwkJCQkgICAgIGludCBpbnRlcnZhbCkKK3sKKwlzcGluX2xvY2tfaW5pdCgmdXJiLT5sb2NrKTsKKwl1cmItPmRldiA9IGRldjsKKwl1cmItPnBpcGUgPSBwaXBlOworCXVyYi0+dHJhbnNmZXJfYnVmZmVyID0gdHJhbnNmZXJfYnVmZmVyOworCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IGJ1ZmZlcl9sZW5ndGg7CisJdXJiLT5jb21wbGV0ZSA9IGNvbXBsZXRlOworCXVyYi0+Y29udGV4dCA9IGNvbnRleHQ7CisJaWYgKGRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpCisJCXVyYi0+aW50ZXJ2YWwgPSAxIDw8IChpbnRlcnZhbCAtIDEpOworCWVsc2UKKwkJdXJiLT5pbnRlcnZhbCA9IGludGVydmFsOworCXVyYi0+c3RhcnRfZnJhbWUgPSAtMTsKK30KKworZXh0ZXJuIHZvaWQgdXNiX2luaXRfdXJiKHN0cnVjdCB1cmIgKnVyYik7CitleHRlcm4gc3RydWN0IHVyYiAqdXNiX2FsbG9jX3VyYihpbnQgaXNvX3BhY2tldHMsIGludCBtZW1fZmxhZ3MpOworZXh0ZXJuIHZvaWQgdXNiX2ZyZWVfdXJiKHN0cnVjdCB1cmIgKnVyYik7CisjZGVmaW5lIHVzYl9wdXRfdXJiIHVzYl9mcmVlX3VyYgorZXh0ZXJuIHN0cnVjdCB1cmIgKnVzYl9nZXRfdXJiKHN0cnVjdCB1cmIgKnVyYik7CitleHRlcm4gaW50IHVzYl9zdWJtaXRfdXJiKHN0cnVjdCB1cmIgKnVyYiwgaW50IG1lbV9mbGFncyk7CitleHRlcm4gaW50IHVzYl91bmxpbmtfdXJiKHN0cnVjdCB1cmIgKnVyYik7CitleHRlcm4gdm9pZCB1c2Jfa2lsbF91cmIoc3RydWN0IHVyYiAqdXJiKTsKKworI2RlZmluZSBIQVZFX1VTQl9CVUZGRVJTCit2b2lkICp1c2JfYnVmZmVyX2FsbG9jIChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKKwlpbnQgbWVtX2ZsYWdzLCBkbWFfYWRkcl90ICpkbWEpOwordm9pZCB1c2JfYnVmZmVyX2ZyZWUgKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAorCXZvaWQgKmFkZHIsIGRtYV9hZGRyX3QgZG1hKTsKKworI2lmIDAKK3N0cnVjdCB1cmIgKnVzYl9idWZmZXJfbWFwIChzdHJ1Y3QgdXJiICp1cmIpOwordm9pZCB1c2JfYnVmZmVyX2RtYXN5bmMgKHN0cnVjdCB1cmIgKnVyYik7Cit2b2lkIHVzYl9idWZmZXJfdW5tYXAgKHN0cnVjdCB1cmIgKnVyYik7CisjZW5kaWYKKworc3RydWN0IHNjYXR0ZXJsaXN0OworaW50IHVzYl9idWZmZXJfbWFwX3NnIChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCB1bnNpZ25lZCBwaXBlLAorCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVudHMpOworI2lmIDAKK3ZvaWQgdXNiX2J1ZmZlcl9kbWFzeW5jX3NnIChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCB1bnNpZ25lZCBwaXBlLAorCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbl9od19lbnRzKTsKKyNlbmRpZgordm9pZCB1c2JfYnVmZmVyX3VubWFwX3NnIChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCB1bnNpZ25lZCBwaXBlLAorCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbl9od19lbnRzKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgorICogICAgICAgICAgICAgICAgICAgICAgICAgU1lOQ0hST05PVVMgQ0FMTCBTVVBQT1JUICAgICAgICAgICAgICAgICAgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworZXh0ZXJuIGludCB1c2JfY29udHJvbF9tc2coc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHBpcGUsCisJX191OCByZXF1ZXN0LCBfX3U4IHJlcXVlc3R0eXBlLCBfX3UxNiB2YWx1ZSwgX191MTYgaW5kZXgsCisJdm9pZCAqZGF0YSwgX191MTYgc2l6ZSwgaW50IHRpbWVvdXQpOworZXh0ZXJuIGludCB1c2JfYnVsa19tc2coc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYsIHVuc2lnbmVkIGludCBwaXBlLAorCXZvaWQgKmRhdGEsIGludCBsZW4sIGludCAqYWN0dWFsX2xlbmd0aCwKKwlpbnQgdGltZW91dCk7CisKKy8qIHNlbGVjdGl2ZSBzdXNwZW5kL3Jlc3VtZSAqLworZXh0ZXJuIGludCB1c2Jfc3VzcGVuZF9kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgdTMyIHN0YXRlKTsKK2V4dGVybiBpbnQgdXNiX3Jlc3VtZV9kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKmRldik7CisKKworLyogd3JhcHBlcnMgYXJvdW5kIHVzYl9jb250cm9sX21zZygpIGZvciB0aGUgbW9zdCBjb21tb24gc3RhbmRhcmQgcmVxdWVzdHMgKi8KK2V4dGVybiBpbnQgdXNiX2dldF9kZXNjcmlwdG9yKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGNoYXIgZGVzY3R5cGUsCisJdW5zaWduZWQgY2hhciBkZXNjaW5kZXgsIHZvaWQgKmJ1ZiwgaW50IHNpemUpOworZXh0ZXJuIGludCB1c2JfZ2V0X3N0YXR1cyhzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LAorCWludCB0eXBlLCBpbnQgdGFyZ2V0LCB2b2lkICpkYXRhKTsKK2V4dGVybiBpbnQgdXNiX2dldF9zdHJpbmcoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwKKwl1bnNpZ25lZCBzaG9ydCBsYW5naWQsIHVuc2lnbmVkIGNoYXIgaW5kZXgsIHZvaWQgKmJ1ZiwgaW50IHNpemUpOworZXh0ZXJuIGludCB1c2Jfc3RyaW5nKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIGludCBpbmRleCwKKwljaGFyICpidWYsIHNpemVfdCBzaXplKTsKKworLyogd3JhcHBlcnMgdGhhdCBhbHNvIHVwZGF0ZSBpbXBvcnRhbnQgc3RhdGUgaW5zaWRlIHVzYmNvcmUgKi8KK2V4dGVybiBpbnQgdXNiX2NsZWFyX2hhbHQoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgaW50IHBpcGUpOworZXh0ZXJuIGludCB1c2JfcmVzZXRfY29uZmlndXJhdGlvbihzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KTsKK2V4dGVybiBpbnQgdXNiX3NldF9pbnRlcmZhY2Uoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgaW50IGlmbnVtLCBpbnQgYWx0ZXJuYXRlKTsKKworLyoKKyAqIHRpbWVvdXRzLCBpbiBtaWxsaXNlY29uZHMsIHVzZWQgZm9yIHNlbmRpbmcvcmVjZWl2aW5nIGNvbnRyb2wgbWVzc2FnZXMKKyAqIHRoZXkgdHlwaWNhbGx5IGNvbXBsZXRlIHdpdGhpbiBhIGZldyBmcmFtZXMgKG1zZWMpIGFmdGVyIHRoZXkncmUgaXNzdWVkCisgKiBVU0IgaWRlbnRpZmllcyA1IHNlY29uZCB0aW1lb3V0cywgbWF5YmUgbW9yZSBpbiBhIGZldyBjYXNlcywgYW5kIGEgZmV3CisgKiBzbG93IGRldmljZXMgKGxpa2Ugc29tZSBNR0UgRWxsaXBzZSBVUFNlcykgYWN0dWFsbHkgcHVzaCB0aGF0IGxpbWl0LgorICovCisjZGVmaW5lIFVTQl9DVFJMX0dFVF9USU1FT1VUCTUwMDAKKyNkZWZpbmUgVVNCX0NUUkxfU0VUX1RJTUVPVVQJNTAwMAorCisKKy8qKgorICogc3RydWN0IHVzYl9zZ19yZXF1ZXN0IC0gc3VwcG9ydCBmb3Igc2NhdHRlci9nYXRoZXIgSS9PCisgKiBAc3RhdHVzOiB6ZXJvIGluZGljYXRlcyBzdWNjZXNzLCBlbHNlIG5lZ2F0aXZlIGVycm5vCisgKiBAYnl0ZXM6IGNvdW50cyBieXRlcyB0cmFuc2ZlcnJlZC4KKyAqCisgKiBUaGVzZSByZXF1ZXN0cyBhcmUgaW5pdGlhbGl6ZWQgdXNpbmcgdXNiX3NnX2luaXQoKSwgYW5kIHRoZW4gYXJlIHVzZWQKKyAqIGFzIHJlcXVlc3QgaGFuZGxlcyBwYXNzZWQgdG8gdXNiX3NnX3dhaXQoKSBvciB1c2Jfc2dfY2FuY2VsKCkuICBNb3N0CisgKiBtZW1iZXJzIG9mIHRoZSByZXF1ZXN0IG9iamVjdCBhcmVuJ3QgZm9yIGRyaXZlciBhY2Nlc3MuCisgKgorICogVGhlIHN0YXR1cyBhbmQgYnl0ZWNvdW50IHZhbHVlcyBhcmUgdmFsaWQgb25seSBhZnRlciB1c2Jfc2dfd2FpdCgpCisgKiByZXR1cm5zLiAgSWYgdGhlIHN0YXR1cyBpcyB6ZXJvLCB0aGVuIHRoZSBieXRlY291bnQgbWF0Y2hlcyB0aGUgdG90YWwKKyAqIGZyb20gdGhlIHJlcXVlc3QuCisgKgorICogQWZ0ZXIgYW4gZXJyb3IgY29tcGxldGlvbiwgZHJpdmVycyBtYXkgbmVlZCB0byBjbGVhciBhIGhhbHQgY29uZGl0aW9uCisgKiBvbiB0aGUgZW5kcG9pbnQuCisgKi8KK3N0cnVjdCB1c2Jfc2dfcmVxdWVzdCB7CisJaW50CQkJc3RhdHVzOworCXNpemVfdAkJCWJ5dGVzOworCisJLyogCisJICogbWVtYmVycyBiZWxvdyBhcmUgcHJpdmF0ZSB0byB1c2Jjb3JlLAorCSAqIGFuZCBhcmUgbm90IHByb3ZpZGVkIGZvciBkcml2ZXIgYWNjZXNzIQorCSAqLworCXNwaW5sb2NrX3QJCWxvY2s7CisKKwlzdHJ1Y3QgdXNiX2RldmljZQkqZGV2OworCWludAkJCXBpcGU7CisJc3RydWN0IHNjYXR0ZXJsaXN0CSpzZzsKKwlpbnQJCQluZW50czsKKworCWludAkJCWVudHJpZXM7CisJc3RydWN0IHVyYgkJKip1cmJzOworCisJaW50CQkJY291bnQ7CisJc3RydWN0IGNvbXBsZXRpb24JY29tcGxldGU7Cit9OworCitpbnQgdXNiX3NnX2luaXQgKAorCXN0cnVjdCB1c2Jfc2dfcmVxdWVzdAkqaW8sCisJc3RydWN0IHVzYl9kZXZpY2UJKmRldiwKKwl1bnNpZ25lZAkJcGlwZSwgCisJdW5zaWduZWQJCXBlcmlvZCwKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QJKnNnLAorCWludAkJCW5lbnRzLAorCXNpemVfdAkJCWxlbmd0aCwKKwlpbnQJCQltZW1fZmxhZ3MKKyk7Cit2b2lkIHVzYl9zZ19jYW5jZWwgKHN0cnVjdCB1c2Jfc2dfcmVxdWVzdCAqaW8pOwordm9pZCB1c2Jfc2dfd2FpdCAoc3RydWN0IHVzYl9zZ19yZXF1ZXN0ICppbyk7CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAqIEZvciB2YXJpb3VzIGxlZ2FjeSByZWFzb25zLCBMaW51eCBoYXMgYSBzbWFsbCBjb29raWUgdGhhdCdzIHBhaXJlZCB3aXRoCisgKiBhIHN0cnVjdCB1c2JfZGV2aWNlIHRvIGlkZW50aWZ5IGFuIGVuZHBvaW50IHF1ZXVlLiAgUXVldWUgY2hhcmFjdGVyaXN0aWNzCisgKiBhcmUgZGVmaW5lZCBieSB0aGUgZW5kcG9pbnQncyBkZXNjcmlwdG9yLiAgVGhpcyBjb29raWUgaXMgY2FsbGVkIGEgInBpcGUiLAorICogYW4gdW5zaWduZWQgaW50IGVuY29kZWQgYXM6CisgKgorICogIC0gZGlyZWN0aW9uOgliaXQgNwkJKDAgPSBIb3N0LXRvLURldmljZSBbT3V0XSwKKyAqCQkJCQkgMSA9IERldmljZS10by1Ib3N0IFtJbl0gLi4uCisgKgkJCQkJbGlrZSBlbmRwb2ludCBiRW5kcG9pbnRBZGRyZXNzKQorICogIC0gZGV2aWNlIGFkZHJlc3M6CWJpdHMgOC0xNCAgICAgICAuLi4gYml0IHBvc2l0aW9ucyBrbm93biB0byB1aGNpLWhjZAorICogIC0gZW5kcG9pbnQ6CQliaXRzIDE1LTE4ICAgICAgLi4uIGJpdCBwb3NpdGlvbnMga25vd24gdG8gdWhjaS1oY2QKKyAqICAtIHBpcGUgdHlwZToJYml0cyAzMC0zMQkoMDAgPSBpc29jaHJvbm91cywgMDEgPSBpbnRlcnJ1cHQsCisgKgkJCQkJIDEwID0gY29udHJvbCwgMTEgPSBidWxrKQorICoKKyAqIEdpdmVuIHRoZSBkZXZpY2UgYWRkcmVzcyBhbmQgZW5kcG9pbnQgZGVzY3JpcHRvciwgcGlwZXMgYXJlIHJlZHVuZGFudC4KKyAqLworCisvKiBOT1RFOiAgdGhlc2UgYXJlIG5vdCB0aGUgc3RhbmRhcmQgVVNCX0VORFBPSU5UX1hGRVJfKiB2YWx1ZXMhISAqLworLyogKHlldCAuLi4gdGhleSdyZSB0aGUgdmFsdWVzIHVzZWQgYnkgdXNiZnMpICovCisjZGVmaW5lIFBJUEVfSVNPQ0hST05PVVMJCTAKKyNkZWZpbmUgUElQRV9JTlRFUlJVUFQJCQkxCisjZGVmaW5lIFBJUEVfQ09OVFJPTAkJCTIKKyNkZWZpbmUgUElQRV9CVUxLCQkJMworCisjZGVmaW5lIHVzYl9waXBlaW4ocGlwZSkJKChwaXBlKSAmIFVTQl9ESVJfSU4pCisjZGVmaW5lIHVzYl9waXBlb3V0KHBpcGUpCSghdXNiX3BpcGVpbihwaXBlKSkKKworI2RlZmluZSB1c2JfcGlwZWRldmljZShwaXBlKQkoKChwaXBlKSA+PiA4KSAmIDB4N2YpCisjZGVmaW5lIHVzYl9waXBlZW5kcG9pbnQocGlwZSkJKCgocGlwZSkgPj4gMTUpICYgMHhmKQorCisjZGVmaW5lIHVzYl9waXBldHlwZShwaXBlKQkoKChwaXBlKSA+PiAzMCkgJiAzKQorI2RlZmluZSB1c2JfcGlwZWlzb2MocGlwZSkJKHVzYl9waXBldHlwZSgocGlwZSkpID09IFBJUEVfSVNPQ0hST05PVVMpCisjZGVmaW5lIHVzYl9waXBlaW50KHBpcGUpCSh1c2JfcGlwZXR5cGUoKHBpcGUpKSA9PSBQSVBFX0lOVEVSUlVQVCkKKyNkZWZpbmUgdXNiX3BpcGVjb250cm9sKHBpcGUpCSh1c2JfcGlwZXR5cGUoKHBpcGUpKSA9PSBQSVBFX0NPTlRST0wpCisjZGVmaW5lIHVzYl9waXBlYnVsayhwaXBlKQkodXNiX3BpcGV0eXBlKChwaXBlKSkgPT0gUElQRV9CVUxLKQorCisvKiBUaGUgRDAvRDEgdG9nZ2xlIGJpdHMgLi4uIFVTRSBXSVRIIENBVVRJT04gKHRoZXkncmUgYWxtb3N0IGhjZC1pbnRlcm5hbCkgKi8KKyNkZWZpbmUgdXNiX2dldHRvZ2dsZShkZXYsIGVwLCBvdXQpICgoKGRldiktPnRvZ2dsZVtvdXRdID4+IChlcCkpICYgMSkKKyNkZWZpbmUJdXNiX2RvdG9nZ2xlKGRldiwgZXAsIG91dCkgICgoZGV2KS0+dG9nZ2xlW291dF0gXj0gKDEgPDwgKGVwKSkpCisjZGVmaW5lIHVzYl9zZXR0b2dnbGUoZGV2LCBlcCwgb3V0LCBiaXQpICgoZGV2KS0+dG9nZ2xlW291dF0gPSAoKGRldiktPnRvZ2dsZVtvdXRdICYgfigxIDw8IChlcCkpKSB8ICgoYml0KSA8PCAoZXApKSkKKworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBfX2NyZWF0ZV9waXBlKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBlbmRwb2ludCkKK3sKKwlyZXR1cm4gKGRldi0+ZGV2bnVtIDw8IDgpIHwgKGVuZHBvaW50IDw8IDE1KTsKK30KKworLyogQ3JlYXRlIHZhcmlvdXMgcGlwZXMuLi4gKi8KKyNkZWZpbmUgdXNiX3NuZGN0cmxwaXBlKGRldixlbmRwb2ludCkJKChQSVBFX0NPTlRST0wgPDwgMzApIHwgX19jcmVhdGVfcGlwZShkZXYsZW5kcG9pbnQpKQorI2RlZmluZSB1c2JfcmN2Y3RybHBpcGUoZGV2LGVuZHBvaW50KQkoKFBJUEVfQ09OVFJPTCA8PCAzMCkgfCBfX2NyZWF0ZV9waXBlKGRldixlbmRwb2ludCkgfCBVU0JfRElSX0lOKQorI2RlZmluZSB1c2Jfc25kaXNvY3BpcGUoZGV2LGVuZHBvaW50KQkoKFBJUEVfSVNPQ0hST05PVVMgPDwgMzApIHwgX19jcmVhdGVfcGlwZShkZXYsZW5kcG9pbnQpKQorI2RlZmluZSB1c2JfcmN2aXNvY3BpcGUoZGV2LGVuZHBvaW50KQkoKFBJUEVfSVNPQ0hST05PVVMgPDwgMzApIHwgX19jcmVhdGVfcGlwZShkZXYsZW5kcG9pbnQpIHwgVVNCX0RJUl9JTikKKyNkZWZpbmUgdXNiX3NuZGJ1bGtwaXBlKGRldixlbmRwb2ludCkJKChQSVBFX0JVTEsgPDwgMzApIHwgX19jcmVhdGVfcGlwZShkZXYsZW5kcG9pbnQpKQorI2RlZmluZSB1c2JfcmN2YnVsa3BpcGUoZGV2LGVuZHBvaW50KQkoKFBJUEVfQlVMSyA8PCAzMCkgfCBfX2NyZWF0ZV9waXBlKGRldixlbmRwb2ludCkgfCBVU0JfRElSX0lOKQorI2RlZmluZSB1c2Jfc25kaW50cGlwZShkZXYsZW5kcG9pbnQpCSgoUElQRV9JTlRFUlJVUFQgPDwgMzApIHwgX19jcmVhdGVfcGlwZShkZXYsZW5kcG9pbnQpKQorI2RlZmluZSB1c2JfcmN2aW50cGlwZShkZXYsZW5kcG9pbnQpCSgoUElQRV9JTlRFUlJVUFQgPDwgMzApIHwgX19jcmVhdGVfcGlwZShkZXYsZW5kcG9pbnQpIHwgVVNCX0RJUl9JTikKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX3UxNgordXNiX21heHBhY2tldChzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgaW50IHBpcGUsIGludCBpc19vdXQpCit7CisJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50CSplcDsKKwl1bnNpZ25lZAkJCWVwbnVtID0gdXNiX3BpcGVlbmRwb2ludChwaXBlKTsKKworCWlmIChpc19vdXQpIHsKKwkJV0FSTl9PTih1c2JfcGlwZWluKHBpcGUpKTsKKwkJZXAgPSB1ZGV2LT5lcF9vdXRbZXBudW1dOworCX0gZWxzZSB7CisJCVdBUk5fT04odXNiX3BpcGVvdXQocGlwZSkpOworCQllcCA9IHVkZXYtPmVwX2luW2VwbnVtXTsKKwl9CisJaWYgKCFlcCkKKwkJcmV0dXJuIDA7CisKKwkvKiBOT1RFOiAgb25seSAweDA3ZmYgYml0cyBhcmUgZm9yIHBhY2tldCBzaXplLi4uICovCisJcmV0dXJuIGxlMTZfdG9fY3B1KGVwLT5kZXNjLndNYXhQYWNrZXRTaXplKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmZGVmIERFQlVHCisjZGVmaW5lIGRiZyhmb3JtYXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAiIGZvcm1hdCAiXG4iICwgX19GSUxFX18gLCAjIyBhcmcpCisjZWxzZQorI2RlZmluZSBkYmcoZm9ybWF0LCBhcmcuLi4pIGRvIHt9IHdoaWxlICgwKQorI2VuZGlmCisKKyNkZWZpbmUgZXJyKGZvcm1hdCwgYXJnLi4uKSBwcmludGsoS0VSTl9FUlIgIiVzOiAiIGZvcm1hdCAiXG4iICwgX19GSUxFX18gLCAjIyBhcmcpCisjZGVmaW5lIGluZm8oZm9ybWF0LCBhcmcuLi4pIHByaW50ayhLRVJOX0lORk8gIiVzOiAiIGZvcm1hdCAiXG4iICwgX19GSUxFX18gLCAjIyBhcmcpCisjZGVmaW5lIHdhcm4oZm9ybWF0LCBhcmcuLi4pIHByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAiIGZvcm1hdCAiXG4iICwgX19GSUxFX18gLCAjIyBhcmcpCisKKworI2VuZGlmICAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2JfY2RjLmggYi9pbmNsdWRlL2xpbnV4L3VzYl9jZGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjY4YzEyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC91c2JfY2RjLmgKQEAgLTAsMCArMSwxOTIgQEAKKy8qCisgKiBVU0IgQ29tbXVuaWNhdGlvbnMgRGV2aWNlIENsYXNzIChDREMpIGRlZmluaXRpb25zCisgKgorICogQ0RDIHNheXMgaG93IHRvIHRhbGsgdG8gbG90cyBvZiBkaWZmZXJlbnQgdHlwZXMgb2YgbmV0d29yayBhZGFwdGVycywKKyAqIG5vdGFibHkgZXRoZXJuZXQgYWRhcHRlcnMgYW5kIHZhcmlvdXMgbW9kZW1zLiAgSXQncyB1c2VkIG1vc3RseSB3aXRoCisgKiBmaXJtd2FyZSBiYXNlZCBVU0IgcGVyaXBoZXJhbHMuCisgKi8KKworI2RlZmluZSBVU0JfQ0RDX1NVQkNMQVNTX0FDTQkJCTB4MDIKKyNkZWZpbmUgVVNCX0NEQ19TVUJDTEFTU19FVEhFUk5FVAkJMHgwNgorI2RlZmluZSBVU0JfQ0RDX1NVQkNMQVNTX1dIQ00JCQkweDA4CisjZGVmaW5lIFVTQl9DRENfU1VCQ0xBU1NfRE1NCQkJMHgwOQorI2RlZmluZSBVU0JfQ0RDX1NVQkNMQVNTX01ETE0JCQkweDBhCisjZGVmaW5lIFVTQl9DRENfU1VCQ0xBU1NfT0JFWAkJCTB4MGIKKworI2RlZmluZSBVU0JfQ0RDX1BST1RPX05PTkUJCQkwCisKKyNkZWZpbmUgVVNCX0NEQ19BQ01fUFJPVE9fQVRfVjI1VEVSCQkxCisjZGVmaW5lIFVTQl9DRENfQUNNX1BST1RPX0FUX1BDQ0ExMDEJCTIKKyNkZWZpbmUgVVNCX0NEQ19BQ01fUFJPVE9fQVRfUENDQTEwMV9XQUtFCTMKKyNkZWZpbmUgVVNCX0NEQ19BQ01fUFJPVE9fQVRfR1NNCQk0CisjZGVmaW5lIFVTQl9DRENfQUNNX1BST1RPX0FUXzNHCQkJNQorI2RlZmluZSBVU0JfQ0RDX0FDTV9QUk9UT19BVF9DRE1BCQk2CisjZGVmaW5lIFVTQl9DRENfQUNNX1BST1RPX1ZFTkRPUgkJMHhmZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogQ2xhc3MtU3BlY2lmaWMgZGVzY3JpcHRvcnMgLi4uIHRoZXJlIGFyZSBhIGNvdXBsZSBkb3plbiBvZiB0aGVtCisgKi8KKworI2RlZmluZSBVU0JfQ0RDX0hFQURFUl9UWVBFCQkweDAwCQkvKiBoZWFkZXJfZGVzYyAqLworI2RlZmluZSBVU0JfQ0RDX0NBTExfTUFOQUdFTUVOVF9UWVBFCTB4MDEJCS8qIGNhbGxfbWdtdF9kZXNjcmlwdG9yICovCisjZGVmaW5lIFVTQl9DRENfQUNNX1RZUEUJCTB4MDIJCS8qIGFjbV9kZXNjcmlwdG9yICovCisjZGVmaW5lIFVTQl9DRENfVU5JT05fVFlQRQkJMHgwNgkJLyogdW5pb25fZGVzYyAqLworI2RlZmluZSBVU0JfQ0RDX0NPVU5UUllfVFlQRQkJMHgwNworI2RlZmluZSBVU0JfQ0RDX0VUSEVSTkVUX1RZUEUJCTB4MGYJCS8qIGV0aGVyX2Rlc2MgKi8KKyNkZWZpbmUgVVNCX0NEQ19XSENNX1RZUEUJCTB4MTEKKyNkZWZpbmUgVVNCX0NEQ19NRExNX1RZUEUJCTB4MTIJCS8qIG1kbG1fZGVzYyAqLworI2RlZmluZSBVU0JfQ0RDX01ETE1fREVUQUlMX1RZUEUJMHgxMwkJLyogbWRsbV9kZXRhaWxfZGVzYyAqLworI2RlZmluZSBVU0JfQ0RDX0RNTV9UWVBFCQkweDE0CisjZGVmaW5lIFVTQl9DRENfT0JFWF9UWVBFCQkweDE1CisKKy8qICJIZWFkZXIgRnVuY3Rpb25hbCBEZXNjcmlwdG9yIiBmcm9tIENEQyBzcGVjICA1LjIuMy4xICovCitzdHJ1Y3QgdXNiX2NkY19oZWFkZXJfZGVzYyB7CisJX191OAliTGVuZ3RoOworCV9fdTgJYkRlc2NyaXB0b3JUeXBlOworCV9fdTgJYkRlc2NyaXB0b3JTdWJUeXBlOworCisJX19sZTE2CWJjZENEQzsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKiAiQ2FsbCBNYW5hZ2VtZW50IERlc2NyaXB0b3IiIGZyb20gQ0RDIHNwZWMgIDUuMi4zLjIgKi8KK3N0cnVjdCB1c2JfY2RjX2NhbGxfbWdtdF9kZXNjcmlwdG9yIHsKKwlfX3U4CWJMZW5ndGg7CisJX191OAliRGVzY3JpcHRvclR5cGU7CisJX191OAliRGVzY3JpcHRvclN1YlR5cGU7CisKKwlfX3U4CWJtQ2FwYWJpbGl0aWVzOworI2RlZmluZSBVU0JfQ0RDX0NBTExfTUdNVF9DQVBfQ0FMTF9NR01UCQkweDAxCisjZGVmaW5lIFVTQl9DRENfQ0FMTF9NR01UX0NBUF9EQVRBX0lOVEYJCTB4MDIKKworCV9fdTgJYkRhdGFJbnRlcmZhY2U7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyogIkFic3RyYWN0IENvbnRyb2wgTWFuYWdlbWVudCBEZXNjcmlwdG9yIiBmcm9tIENEQyBzcGVjICA1LjIuMy4zICovCitzdHJ1Y3QgdXNiX2NkY19hY21fZGVzY3JpcHRvciB7CisJX191OAliTGVuZ3RoOworCV9fdTgJYkRlc2NyaXB0b3JUeXBlOworCV9fdTgJYkRlc2NyaXB0b3JTdWJUeXBlOworCisJX191OAlibUNhcGFiaWxpdGllczsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKiAiVW5pb24gRnVuY3Rpb25hbCBEZXNjcmlwdG9yIiBmcm9tIENEQyBzcGVjIDUuMi4zLjggKi8KK3N0cnVjdCB1c2JfY2RjX3VuaW9uX2Rlc2MgeworCV9fdTgJYkxlbmd0aDsKKwlfX3U4CWJEZXNjcmlwdG9yVHlwZTsKKwlfX3U4CWJEZXNjcmlwdG9yU3ViVHlwZTsKKworCV9fdTgJYk1hc3RlckludGVyZmFjZTA7CisJX191OAliU2xhdmVJbnRlcmZhY2UwOworCS8qIC4uLiBhbmQgdGhlcmUgY291bGQgYmUgb3RoZXIgc2xhdmUgaW50ZXJmYWNlcyAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qICJFdGhlcm5ldCBOZXR3b3JraW5nIEZ1bmN0aW9uYWwgRGVzY3JpcHRvciIgZnJvbSBDREMgc3BlYyA1LjIuMy4xNiAqLworc3RydWN0IHVzYl9jZGNfZXRoZXJfZGVzYyB7CisJX191OAliTGVuZ3RoOworCV9fdTgJYkRlc2NyaXB0b3JUeXBlOworCV9fdTgJYkRlc2NyaXB0b3JTdWJUeXBlOworCisJX191OAlpTUFDQWRkcmVzczsKKwlfX2xlMzIJYm1FdGhlcm5ldFN0YXRpc3RpY3M7CisJX19sZTE2CXdNYXhTZWdtZW50U2l6ZTsKKwlfX2xlMTYJd051bWJlck1DRmlsdGVyczsKKwlfX3U4CWJOdW1iZXJQb3dlckZpbHRlcnM7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyogIk1ETE0gRnVuY3Rpb25hbCBEZXNjcmlwdG9yIiBmcm9tIENEQyBXTUMgc3BlYyA2LjcuMi4zICovCitzdHJ1Y3QgdXNiX2NkY19tZGxtX2Rlc2MgeworCV9fdTgJYkxlbmd0aDsKKwlfX3U4CWJEZXNjcmlwdG9yVHlwZTsKKwlfX3U4CWJEZXNjcmlwdG9yU3ViVHlwZTsKKworCV9fbGUxNgliY2RWZXJzaW9uOworCV9fdTgJYkdVSURbMTZdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qICJNRExNIERldGFpbCBGdW5jdGlvbmFsIERlc2NyaXB0b3IiIGZyb20gQ0RDIFdNQyBzcGVjIDYuNy4yLjQgKi8KK3N0cnVjdCB1c2JfY2RjX21kbG1fZGV0YWlsX2Rlc2MgeworCV9fdTgJYkxlbmd0aDsKKwlfX3U4CWJEZXNjcmlwdG9yVHlwZTsKKwlfX3U4CWJEZXNjcmlwdG9yU3ViVHlwZTsKKworCS8qIHR5cGUgaXMgYXNzb2NpYXRlZCB3aXRoIG1kbG1fZGVzYy5iR1VJRCAqLworCV9fdTgJYkd1aWREZXNjcmlwdG9yVHlwZTsKKwlfX3U4CWJEZXRhaWxEYXRhW107Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIENsYXNzLVNwZWNpZmljIENvbnRyb2wgUmVxdWVzdHMgKDYuMikKKyAqCisgKiBzZWN0aW9uIDMuNi4yLjEgdGFibGUgNCBoYXMgdGhlIEFDTSBwcm9maWxlLCBmb3IgbW9kZW1zLgorICogc2VjdGlvbiAzLjguMiB0YWJsZSAxMCBoYXMgdGhlIGV0aGVybmV0IHByb2ZpbGUuCisgKgorICogTWljcm9zb2Z0J3MgUk5ESVMgc3RhY2sgZm9yIEV0aGVybmV0IGlzIGEgdmVuZG9yLXNwZWNpZmljIENEQyBBQ00gdmFyaWFudCwKKyAqIGhlYXZpbHkgZGVwZW5kZW50IG9uIHRoZSBlbmNhcHN1bGF0ZWQgKHByb3ByaWV0YXJ5KSBjb21tYW5kIG1lY2hhbmlzbS4KKyAqLworCisjZGVmaW5lIFVTQl9DRENfU0VORF9FTkNBUFNVTEFURURfQ09NTUFORAkweDAwCisjZGVmaW5lIFVTQl9DRENfR0VUX0VOQ0FQU1VMQVRFRF9SRVNQT05TRQkweDAxCisjZGVmaW5lIFVTQl9DRENfUkVRX1NFVF9MSU5FX0NPRElORwkJMHgyMAorI2RlZmluZSBVU0JfQ0RDX1JFUV9HRVRfTElORV9DT0RJTkcJCTB4MjEKKyNkZWZpbmUgVVNCX0NEQ19SRVFfU0VUX0NPTlRST0xfTElORV9TVEFURQkweDIyCisjZGVmaW5lIFVTQl9DRENfUkVRX1NFTkRfQlJFQUsJCQkweDIzCisjZGVmaW5lIFVTQl9DRENfU0VUX0VUSEVSTkVUX01VTFRJQ0FTVF9GSUxURVJTCTB4NDAKKyNkZWZpbmUgVVNCX0NEQ19TRVRfRVRIRVJORVRfUE1fUEFUVEVSTl9GSUxURVIJMHg0MQorI2RlZmluZSBVU0JfQ0RDX0dFVF9FVEhFUk5FVF9QTV9QQVRURVJOX0ZJTFRFUgkweDQyCisjZGVmaW5lIFVTQl9DRENfU0VUX0VUSEVSTkVUX1BBQ0tFVF9GSUxURVIJMHg0MworI2RlZmluZSBVU0JfQ0RDX0dFVF9FVEhFUk5FVF9TVEFUSVNUSUMJCTB4NDQKKworLyogTGluZSBDb2RpbmcgU3RydWN0dXJlIGZyb20gQ0RDIHNwZWMgNi4yLjEzICovCitzdHJ1Y3QgdXNiX2NkY19saW5lX2NvZGluZyB7CisJX19sZTMyCWR3RFRFUmF0ZTsKKwlfX3U4CWJDaGFyRm9ybWF0OworI2RlZmluZSBVU0JfQ0RDXzFfU1RPUF9CSVRTCQkJMAorI2RlZmluZSBVU0JfQ0RDXzFfNV9TVE9QX0JJVFMJCQkxCisjZGVmaW5lIFVTQl9DRENfMl9TVE9QX0JJVFMJCQkyCisKKwlfX3U4CWJQYXJpdHlUeXBlOworI2RlZmluZSBVU0JfQ0RDX05PX1BBUklUWQkJCTAKKyNkZWZpbmUgVVNCX0NEQ19PRERfUEFSSVRZCQkJMQorI2RlZmluZSBVU0JfQ0RDX0VWRU5fUEFSSVRZCQkJMgorI2RlZmluZSBVU0JfQ0RDX01BUktfUEFSSVRZCQkJMworI2RlZmluZSBVU0JfQ0RDX1NQQUNFX1BBUklUWQkJCTQKKworCV9fdTgJYkRhdGFCaXRzOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qIHRhYmxlIDYyOyBiaXRzIGluIG11bHRpY2FzdCBmaWx0ZXIgKi8KKyNkZWZpbmUJVVNCX0NEQ19QQUNLRVRfVFlQRV9QUk9NSVNDVU9VUwkJKDEgPDwgMCkKKyNkZWZpbmUJVVNCX0NEQ19QQUNLRVRfVFlQRV9BTExfTVVMVElDQVNUCSgxIDw8IDEpIC8qIG5vIGZpbHRlciAqLworI2RlZmluZQlVU0JfQ0RDX1BBQ0tFVF9UWVBFX0RJUkVDVEVECQkoMSA8PCAyKQorI2RlZmluZQlVU0JfQ0RDX1BBQ0tFVF9UWVBFX0JST0FEQ0FTVAkJKDEgPDwgMykKKyNkZWZpbmUJVVNCX0NEQ19QQUNLRVRfVFlQRV9NVUxUSUNBU1QJCSgxIDw8IDQpIC8qIGZpbHRlcmVkICovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIENsYXNzLVNwZWNpZmljIE5vdGlmaWNhdGlvbnMgKDYuMykgc2VudCBieSBpbnRlcnJ1cHQgdHJhbnNmZXJzCisgKgorICogc2VjdGlvbiAzLjguMiB0YWJsZSAxMSBvZiB0aGUgQ0RDIHNwZWMgbGlzdHMgRXRoZXJuZXQgbm90aWZpY2F0aW9ucworICogc2VjdGlvbiAzLjYuMi4xIHRhYmxlIDUgc3BlY2lmaWVzIEFDTSBub3RpZmljYXRpb25zLCBhY2NlcHRlZCBieSBSTkRJUworICogUk5ESVMgYWxzbyBkZWZpbmVzIGl0cyBvd24gYml0LWluY29tcGF0aWJsZSBub3RpZmljYXRpb25zCisgKi8KKworI2RlZmluZSBVU0JfQ0RDX05PVElGWV9ORVRXT1JLX0NPTk5FQ1RJT04JMHgwMAorI2RlZmluZSBVU0JfQ0RDX05PVElGWV9SRVNQT05TRV9BVkFJTEFCTEUJMHgwMQorI2RlZmluZSBVU0JfQ0RDX05PVElGWV9TRVJJQUxfU1RBVEUJCTB4MjAKKyNkZWZpbmUgVVNCX0NEQ19OT1RJRllfU1BFRURfQ0hBTkdFCQkweDJhCisKK3N0cnVjdCB1c2JfY2RjX25vdGlmaWNhdGlvbiB7CisJX191OAlibVJlcXVlc3RUeXBlOworCV9fdTgJYk5vdGlmaWNhdGlvblR5cGU7CisJX19sZTE2CXdWYWx1ZTsKKwlfX2xlMTYJd0luZGV4OworCV9fbGUxNgl3TGVuZ3RoOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiX2NoOS5oIGIvaW5jbHVkZS9saW51eC91c2JfY2g5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVmZTk0ZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvdXNiX2NoOS5oCkBAIC0wLDAgKzEsMzg0IEBACisvKgorICogVGhpcyBmaWxlIGhvbGRzIFVTQiBjb25zdGFudHMgYW5kIHN0cnVjdHVyZXMgdGhhdCBhcmUgbmVlZGVkIGZvciBVU0IKKyAqIGRldmljZSBBUElzLiAgVGhlc2UgYXJlIHVzZWQgYnkgdGhlIFVTQiBkZXZpY2UgbW9kZWwsIHdoaWNoIGlzIGRlZmluZWQKKyAqIGluIGNoYXB0ZXIgOSBvZiB0aGUgVVNCIDIuMCBzcGVjaWZpY2F0aW9uLiAgTGludXggaGFzIHNldmVyYWwgQVBJcyBpbiBDCisgKiB0aGF0IG5lZWQgdGhlc2U6CisgKgorICogLSB0aGUgbWFzdGVyL2hvc3Qgc2lkZSBMaW51eC1VU0Iga2VybmVsIGRyaXZlciBBUEk7CisgKiAtIHRoZSAidXNiZnMiIHVzZXIgc3BhY2UgQVBJOyBhbmQKKyAqIC0gKGV2ZW50dWFsbHkpIGEgTGludXggImdhZGdldCIgc2xhdmUvZGV2aWNlIHNpZGUgZHJpdmVyIEFQSS4KKyAqCisgKiBVU0IgMi4wIGFkZHMgYW4gYWRkaXRpb25hbCAiT24gVGhlIEdvIiAoT1RHKSBtb2RlLCB3aGljaCBsZXRzIHN5c3RlbXMKKyAqIGFjdCBlaXRoZXIgYXMgYSBVU0IgbWFzdGVyL2hvc3Qgb3IgYXMgYSBVU0Igc2xhdmUvZGV2aWNlLiAgVGhhdCBtZWFucworICogdGhlIG1hc3RlciBhbmQgc2xhdmUgc2lkZSBBUElzIHdpbGwgYmVuZWZpdCBmcm9tIHdvcmtpbmcgd2VsbCB0b2dldGhlci4KKyAqLworCisjaWZuZGVmIF9fTElOVVhfVVNCX0NIOV9ICisjZGVmaW5lIF9fTElOVVhfVVNCX0NIOV9ICisKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4JCS8qIF9fdTggZXRjICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIENPTlRST0wgUkVRVUVTVCBTVVBQT1JUICovCisKKy8qCisgKiBVU0IgZGlyZWN0aW9ucworICoKKyAqIFRoaXMgYml0IGZsYWcgaXMgdXNlZCBpbiBlbmRwb2ludCBkZXNjcmlwdG9ycycgYkVuZHBvaW50QWRkcmVzcyBmaWVsZC4KKyAqIEl0J3MgYWxzbyBvbmUgb2YgdGhyZWUgZmllbGRzIGluIGNvbnRyb2wgcmVxdWVzdHMgYlJlcXVlc3RUeXBlLgorICovCisjZGVmaW5lIFVTQl9ESVJfT1VUCQkJMAkJLyogdG8gZGV2aWNlICovCisjZGVmaW5lIFVTQl9ESVJfSU4JCQkweDgwCQkvKiB0byBob3N0ICovCisKKy8qCisgKiBVU0IgdHlwZXMsIHRoZSBzZWNvbmQgb2YgdGhyZWUgYlJlcXVlc3RUeXBlIGZpZWxkcworICovCisjZGVmaW5lIFVTQl9UWVBFX01BU0sJCQkoMHgwMyA8PCA1KQorI2RlZmluZSBVU0JfVFlQRV9TVEFOREFSRAkJKDB4MDAgPDwgNSkKKyNkZWZpbmUgVVNCX1RZUEVfQ0xBU1MJCQkoMHgwMSA8PCA1KQorI2RlZmluZSBVU0JfVFlQRV9WRU5ET1IJCQkoMHgwMiA8PCA1KQorI2RlZmluZSBVU0JfVFlQRV9SRVNFUlZFRAkJKDB4MDMgPDwgNSkKKworLyoKKyAqIFVTQiByZWNpcGllbnRzLCB0aGUgdGhpcmQgb2YgdGhyZWUgYlJlcXVlc3RUeXBlIGZpZWxkcworICovCisjZGVmaW5lIFVTQl9SRUNJUF9NQVNLCQkJMHgxZgorI2RlZmluZSBVU0JfUkVDSVBfREVWSUNFCQkweDAwCisjZGVmaW5lIFVTQl9SRUNJUF9JTlRFUkZBQ0UJCTB4MDEKKyNkZWZpbmUgVVNCX1JFQ0lQX0VORFBPSU5UCQkweDAyCisjZGVmaW5lIFVTQl9SRUNJUF9PVEhFUgkJCTB4MDMKKworLyoKKyAqIFN0YW5kYXJkIHJlcXVlc3RzLCBmb3IgdGhlIGJSZXF1ZXN0IGZpZWxkIG9mIGEgU0VUVVAgcGFja2V0LgorICoKKyAqIFRoZXNlIGFyZSBxdWFsaWZpZWQgYnkgdGhlIGJSZXF1ZXN0VHlwZSBmaWVsZCwgc28gdGhhdCBmb3IgZXhhbXBsZQorICogVFlQRV9DTEFTUyBvciBUWVBFX1ZFTkRPUiBzcGVjaWZpYyBmZWF0dXJlIGZsYWdzIGNvdWxkIGJlIHJldHJpZXZlZAorICogYnkgYSBHRVRfU1RBVFVTIHJlcXVlc3QuCisgKi8KKyNkZWZpbmUgVVNCX1JFUV9HRVRfU1RBVFVTCQkweDAwCisjZGVmaW5lIFVTQl9SRVFfQ0xFQVJfRkVBVFVSRQkJMHgwMQorI2RlZmluZSBVU0JfUkVRX1NFVF9GRUFUVVJFCQkweDAzCisjZGVmaW5lIFVTQl9SRVFfU0VUX0FERFJFU1MJCTB4MDUKKyNkZWZpbmUgVVNCX1JFUV9HRVRfREVTQ1JJUFRPUgkJMHgwNgorI2RlZmluZSBVU0JfUkVRX1NFVF9ERVNDUklQVE9SCQkweDA3CisjZGVmaW5lIFVTQl9SRVFfR0VUX0NPTkZJR1VSQVRJT04JMHgwOAorI2RlZmluZSBVU0JfUkVRX1NFVF9DT05GSUdVUkFUSU9OCTB4MDkKKyNkZWZpbmUgVVNCX1JFUV9HRVRfSU5URVJGQUNFCQkweDBBCisjZGVmaW5lIFVTQl9SRVFfU0VUX0lOVEVSRkFDRQkJMHgwQgorI2RlZmluZSBVU0JfUkVRX1NZTkNIX0ZSQU1FCQkweDBDCisKKy8qCisgKiBVU0IgZmVhdHVyZSBmbGFncyBhcmUgd3JpdHRlbiB1c2luZyBVU0JfUkVRX3tDTEVBUixTRVR9X0ZFQVRVUkUsIGFuZAorICogYXJlIHJlYWQgYXMgYSBiaXQgYXJyYXkgcmV0dXJuZWQgYnkgVVNCX1JFUV9HRVRfU1RBVFVTLiAgKFNvIHRoZXJlCisgKiBhcmUgYXQgbW9zdCBzaXh0ZWVuIGZlYXR1cmVzIG9mIGVhY2ggdHlwZS4pCisgKi8KKyNkZWZpbmUgVVNCX0RFVklDRV9TRUxGX1BPV0VSRUQJCTAJLyogKHJlYWQgb25seSkgKi8KKyNkZWZpbmUgVVNCX0RFVklDRV9SRU1PVEVfV0FLRVVQCTEJLyogZGV2IG1heSBpbml0aWF0ZSB3YWtldXAgKi8KKyNkZWZpbmUgVVNCX0RFVklDRV9URVNUX01PREUJCTIJLyogKGhpZ2ggc3BlZWQgb25seSkgKi8KKyNkZWZpbmUgVVNCX0RFVklDRV9CX0hOUF9FTkFCTEUJCTMJLyogZGV2IG1heSBpbml0aWF0ZSBITlAgKi8KKyNkZWZpbmUgVVNCX0RFVklDRV9BX0hOUF9TVVBQT1JUCTQJLyogUkggcG9ydCBzdXBwb3J0cyBITlAgKi8KKyNkZWZpbmUgVVNCX0RFVklDRV9BX0FMVF9ITlBfU1VQUE9SVAk1CS8qIG90aGVyIFJIIHBvcnQgZG9lcyAqLworI2RlZmluZSBVU0JfREVWSUNFX0RFQlVHX01PREUJCTYJLyogKHNwZWNpYWwgZGV2aWNlcyBvbmx5KSAqLworCisjZGVmaW5lIFVTQl9FTkRQT0lOVF9IQUxUCQkwCS8qIElOL09VVCB3aWxsIFNUQUxMICovCisKKworLyoqCisgKiBzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0IC0gU0VUVVAgZGF0YSBmb3IgYSBVU0IgZGV2aWNlIGNvbnRyb2wgcmVxdWVzdAorICogQGJSZXF1ZXN0VHlwZTogbWF0Y2hlcyB0aGUgVVNCIGJtUmVxdWVzdFR5cGUgZmllbGQKKyAqIEBiUmVxdWVzdDogbWF0Y2hlcyB0aGUgVVNCIGJSZXF1ZXN0IGZpZWxkCisgKiBAd1ZhbHVlOiBtYXRjaGVzIHRoZSBVU0Igd1ZhbHVlIGZpZWxkIChsZTE2IGJ5dGUgb3JkZXIpCisgKiBAd0luZGV4OiBtYXRjaGVzIHRoZSBVU0Igd0luZGV4IGZpZWxkIChsZTE2IGJ5dGUgb3JkZXIpCisgKiBAd0xlbmd0aDogbWF0Y2hlcyB0aGUgVVNCIHdMZW5ndGggZmllbGQgKGxlMTYgYnl0ZSBvcmRlcikKKyAqCisgKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIHRvIHNlbmQgY29udHJvbCByZXF1ZXN0cyB0byBhIFVTQiBkZXZpY2UuICBJdCBtYXRjaGVzCisgKiB0aGUgZGlmZmVyZW50IGZpZWxkcyBvZiB0aGUgVVNCIDIuMCBTcGVjIHNlY3Rpb24gOS4zLCB0YWJsZSA5LTIuICBTZWUgdGhlCisgKiBVU0Igc3BlYyBmb3IgYSBmdWxsZXIgZGVzY3JpcHRpb24gb2YgdGhlIGRpZmZlcmVudCBmaWVsZHMsIGFuZCB3aGF0IHRoZXkgYXJlCisgKiB1c2VkIGZvci4KKyAqCisgKiBOb3RlIHRoYXQgdGhlIGRyaXZlciBmb3IgYW55IGludGVyZmFjZSBjYW4gaXNzdWUgY29udHJvbCByZXF1ZXN0cy4KKyAqIEZvciBtb3N0IGRldmljZXMsIGludGVyZmFjZXMgZG9uJ3QgY29vcmRpbmF0ZSB3aXRoIGVhY2ggb3RoZXIsIHNvCisgKiBzdWNoIHJlcXVlc3RzIG1heSBiZSBtYWRlIGF0IGFueSB0aW1lLgorICovCitzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0IHsKKwlfX3U4IGJSZXF1ZXN0VHlwZTsKKwlfX3U4IGJSZXF1ZXN0OworCV9fbGUxNiB3VmFsdWU7CisJX19sZTE2IHdJbmRleDsKKwlfX2xlMTYgd0xlbmd0aDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogU1RBTkRBUkQgREVTQ1JJUFRPUlMgLi4uIGFzIHJldHVybmVkIGJ5IEdFVF9ERVNDUklQVE9SLCBvcgorICogKHJhcmVseSkgYWNjZXB0ZWQgYnkgU0VUX0RFU0NSSVBUT1IuCisgKgorICogTm90ZSB0aGF0IGFsbCBtdWx0aS1ieXRlIHZhbHVlcyBoZXJlIGFyZSBlbmNvZGVkIGluIGxpdHRsZSBlbmRpYW4KKyAqIGJ5dGUgb3JkZXIgIm9uIHRoZSB3aXJlIi4gIEJ1dCB3aGVuIGV4cG9zZWQgdGhyb3VnaCBMaW51eC1VU0IgQVBJcywKKyAqIHRoZXkndmUgYmVlbiBjb252ZXJ0ZWQgdG8gY3B1IGJ5dGUgb3JkZXIuCisgKi8KKworLyoKKyAqIERlc2NyaXB0b3IgdHlwZXMgLi4uIFVTQiAyLjAgc3BlYyB0YWJsZSA5LjUKKyAqLworI2RlZmluZSBVU0JfRFRfREVWSUNFCQkJMHgwMQorI2RlZmluZSBVU0JfRFRfQ09ORklHCQkJMHgwMgorI2RlZmluZSBVU0JfRFRfU1RSSU5HCQkJMHgwMworI2RlZmluZSBVU0JfRFRfSU5URVJGQUNFCQkweDA0CisjZGVmaW5lIFVTQl9EVF9FTkRQT0lOVAkJCTB4MDUKKyNkZWZpbmUgVVNCX0RUX0RFVklDRV9RVUFMSUZJRVIJCTB4MDYKKyNkZWZpbmUgVVNCX0RUX09USEVSX1NQRUVEX0NPTkZJRwkweDA3CisjZGVmaW5lIFVTQl9EVF9JTlRFUkZBQ0VfUE9XRVIJCTB4MDgKKy8qIHRoZXNlIGFyZSBmcm9tIGEgbWlub3IgdXNiIDIuMCByZXZpc2lvbiAoRUNOKSAqLworI2RlZmluZSBVU0JfRFRfT1RHCQkJMHgwOQorI2RlZmluZSBVU0JfRFRfREVCVUcJCQkweDBhCisjZGVmaW5lIFVTQl9EVF9JTlRFUkZBQ0VfQVNTT0NJQVRJT04JMHgwYgorCisvKiBjb252ZW50aW9uYWwgY29kZXMgZm9yIGNsYXNzLXNwZWNpZmljIGRlc2NyaXB0b3JzICovCisjZGVmaW5lIFVTQl9EVF9DU19ERVZJQ0UJCTB4MjEKKyNkZWZpbmUgVVNCX0RUX0NTX0NPTkZJRwkJMHgyMgorI2RlZmluZSBVU0JfRFRfQ1NfU1RSSU5HCQkweDIzCisjZGVmaW5lIFVTQl9EVF9DU19JTlRFUkZBQ0UJCTB4MjQKKyNkZWZpbmUgVVNCX0RUX0NTX0VORFBPSU5UCQkweDI1CisKKy8qIEFsbCBzdGFuZGFyZCBkZXNjcmlwdG9ycyBoYXZlIHRoZXNlIDIgZmllbGRzIGF0IHRoZSBiZWdpbm5pbmcgKi8KK3N0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgeworCV9fdTggIGJMZW5ndGg7CisJX191OCAgYkRlc2NyaXB0b3JUeXBlOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogVVNCX0RUX0RFVklDRTogRGV2aWNlIGRlc2NyaXB0b3IgKi8KK3N0cnVjdCB1c2JfZGV2aWNlX2Rlc2NyaXB0b3IgeworCV9fdTggIGJMZW5ndGg7CisJX191OCAgYkRlc2NyaXB0b3JUeXBlOworCisJX19sZTE2IGJjZFVTQjsKKwlfX3U4ICBiRGV2aWNlQ2xhc3M7CisJX191OCAgYkRldmljZVN1YkNsYXNzOworCV9fdTggIGJEZXZpY2VQcm90b2NvbDsKKwlfX3U4ICBiTWF4UGFja2V0U2l6ZTA7CisJX19sZTE2IGlkVmVuZG9yOworCV9fbGUxNiBpZFByb2R1Y3Q7CisJX19sZTE2IGJjZERldmljZTsKKwlfX3U4ICBpTWFudWZhY3R1cmVyOworCV9fdTggIGlQcm9kdWN0OworCV9fdTggIGlTZXJpYWxOdW1iZXI7CisJX191OCAgYk51bUNvbmZpZ3VyYXRpb25zOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgVVNCX0RUX0RFVklDRV9TSVpFCQkxOAorCisKKy8qCisgKiBEZXZpY2UgYW5kL29yIEludGVyZmFjZSBDbGFzcyBjb2RlcworICogYXMgZm91bmQgaW4gYkRldmljZUNsYXNzIG9yIGJJbnRlcmZhY2VDbGFzcworICogYW5kIGRlZmluZWQgYnkgd3d3LnVzYi5vcmcgZG9jdW1lbnRzCisgKi8KKyNkZWZpbmUgVVNCX0NMQVNTX1BFUl9JTlRFUkZBQ0UJCTAJLyogZm9yIERldmljZUNsYXNzICovCisjZGVmaW5lIFVTQl9DTEFTU19BVURJTwkJCTEKKyNkZWZpbmUgVVNCX0NMQVNTX0NPTU0JCQkyCisjZGVmaW5lIFVTQl9DTEFTU19ISUQJCQkzCisjZGVmaW5lIFVTQl9DTEFTU19QSFlTSUNBTAkJNQorI2RlZmluZSBVU0JfQ0xBU1NfU1RJTExfSU1BR0UJCTYKKyNkZWZpbmUgVVNCX0NMQVNTX1BSSU5URVIJCTcKKyNkZWZpbmUgVVNCX0NMQVNTX01BU1NfU1RPUkFHRQkJOAorI2RlZmluZSBVU0JfQ0xBU1NfSFVCCQkJOQorI2RlZmluZSBVU0JfQ0xBU1NfQ0RDX0RBVEEJCTB4MGEKKyNkZWZpbmUgVVNCX0NMQVNTX0NTQ0lECQkJMHgwYgkvKiBjaGlwKyBzbWFydCBjYXJkICovCisjZGVmaW5lIFVTQl9DTEFTU19DT05URU5UX1NFQwkJMHgwZAkvKiBjb250ZW50IHNlY3VyaXR5ICovCisjZGVmaW5lIFVTQl9DTEFTU19WSURFTwkJCTB4MGUKKyNkZWZpbmUgVVNCX0NMQVNTX0FQUF9TUEVDCQkweGZlCisjZGVmaW5lIFVTQl9DTEFTU19WRU5ET1JfU1BFQwkJMHhmZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBVU0JfRFRfQ09ORklHOiBDb25maWd1cmF0aW9uIGRlc2NyaXB0b3IgaW5mb3JtYXRpb24uCisgKgorICogVVNCX0RUX09USEVSX1NQRUVEX0NPTkZJRyBpcyB0aGUgc2FtZSBkZXNjcmlwdG9yLCBleGNlcHQgdGhhdCB0aGUKKyAqIGRlc2NyaXB0b3IgdHlwZSBpcyBkaWZmZXJlbnQuICBIaWdoc3BlZWQtY2FwYWJsZSBkZXZpY2VzIGNhbiBsb29rCisgKiBkaWZmZXJlbnQgZGVwZW5kaW5nIG9uIHdoYXQgc3BlZWQgdGhleSdyZSBjdXJyZW50bHkgcnVubmluZy4gIE9ubHkKKyAqIGRldmljZXMgd2l0aCBhIFVTQl9EVF9ERVZJQ0VfUVVBTElGSUVSIGhhdmUgYW55IE9USEVSX1NQRUVEX0NPTkZJRworICogZGVzY3JpcHRvcnMuCisgKi8KK3N0cnVjdCB1c2JfY29uZmlnX2Rlc2NyaXB0b3IgeworCV9fdTggIGJMZW5ndGg7CisJX191OCAgYkRlc2NyaXB0b3JUeXBlOworCisJX19sZTE2IHdUb3RhbExlbmd0aDsKKwlfX3U4ICBiTnVtSW50ZXJmYWNlczsKKwlfX3U4ICBiQ29uZmlndXJhdGlvblZhbHVlOworCV9fdTggIGlDb25maWd1cmF0aW9uOworCV9fdTggIGJtQXR0cmlidXRlczsKKwlfX3U4ICBiTWF4UG93ZXI7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2RlZmluZSBVU0JfRFRfQ09ORklHX1NJWkUJCTkKKworLyogZnJvbSBjb25maWcgZGVzY3JpcHRvciBibUF0dHJpYnV0ZXMgKi8KKyNkZWZpbmUgVVNCX0NPTkZJR19BVFRfT05FCQkoMSA8PCA3KQkvKiBtdXN0IGJlIHNldCAqLworI2RlZmluZSBVU0JfQ09ORklHX0FUVF9TRUxGUE9XRVIJKDEgPDwgNikJLyogc2VsZiBwb3dlcmVkICovCisjZGVmaW5lIFVTQl9DT05GSUdfQVRUX1dBS0VVUAkJKDEgPDwgNSkJLyogY2FuIHdha2V1cCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBVU0JfRFRfU1RSSU5HOiBTdHJpbmcgZGVzY3JpcHRvciAqLworc3RydWN0IHVzYl9zdHJpbmdfZGVzY3JpcHRvciB7CisJX191OCAgYkxlbmd0aDsKKwlfX3U4ICBiRGVzY3JpcHRvclR5cGU7CisKKwlfX2xlMTYgd0RhdGFbMV07CQkvKiBVVEYtMTZMRSBlbmNvZGVkICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyogbm90ZSB0aGF0ICJzdHJpbmciIHplcm8gaXMgc3BlY2lhbCwgaXQgaG9sZHMgbGFuZ3VhZ2UgY29kZXMgdGhhdAorICogdGhlIGRldmljZSBzdXBwb3J0cywgbm90IFVuaWNvZGUgY2hhcmFjdGVycy4KKyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBVU0JfRFRfSU5URVJGQUNFOiBJbnRlcmZhY2UgZGVzY3JpcHRvciAqLworc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvciB7CisJX191OCAgYkxlbmd0aDsKKwlfX3U4ICBiRGVzY3JpcHRvclR5cGU7CisKKwlfX3U4ICBiSW50ZXJmYWNlTnVtYmVyOworCV9fdTggIGJBbHRlcm5hdGVTZXR0aW5nOworCV9fdTggIGJOdW1FbmRwb2ludHM7CisJX191OCAgYkludGVyZmFjZUNsYXNzOworCV9fdTggIGJJbnRlcmZhY2VTdWJDbGFzczsKKwlfX3U4ICBiSW50ZXJmYWNlUHJvdG9jb2w7CisJX191OCAgaUludGVyZmFjZTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZGVmaW5lIFVTQl9EVF9JTlRFUkZBQ0VfU0laRQkJOQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBVU0JfRFRfRU5EUE9JTlQ6IEVuZHBvaW50IGRlc2NyaXB0b3IgKi8KK3N0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciB7CisJX191OCAgYkxlbmd0aDsKKwlfX3U4ICBiRGVzY3JpcHRvclR5cGU7CisKKwlfX3U4ICBiRW5kcG9pbnRBZGRyZXNzOworCV9fdTggIGJtQXR0cmlidXRlczsKKwlfX2xlMTYgd01heFBhY2tldFNpemU7CisJX191OCAgYkludGVydmFsOworCisJLy8gTk9URTogIHRoZXNlIHR3byBhcmUgX29ubHlfIGluIGF1ZGlvIGVuZHBvaW50cy4KKwkvLyB1c2UgVVNCX0RUX0VORFBPSU5UKl9TSVpFIGluIGJMZW5ndGgsIG5vdCBzaXplb2YuCisJX191OCAgYlJlZnJlc2g7CisJX191OCAgYlN5bmNoQWRkcmVzczsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZGVmaW5lIFVTQl9EVF9FTkRQT0lOVF9TSVpFCQk3CisjZGVmaW5lIFVTQl9EVF9FTkRQT0lOVF9BVURJT19TSVpFCTkJLyogQXVkaW8gZXh0ZW5zaW9uICovCisKKworLyoKKyAqIEVuZHBvaW50cworICovCisjZGVmaW5lIFVTQl9FTkRQT0lOVF9OVU1CRVJfTUFTSwkweDBmCS8qIGluIGJFbmRwb2ludEFkZHJlc3MgKi8KKyNkZWZpbmUgVVNCX0VORFBPSU5UX0RJUl9NQVNLCQkweDgwCisKKyNkZWZpbmUgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0sJMHgwMwkvKiBpbiBibUF0dHJpYnV0ZXMgKi8KKyNkZWZpbmUgVVNCX0VORFBPSU5UX1hGRVJfQ09OVFJPTAkwCisjZGVmaW5lIFVTQl9FTkRQT0lOVF9YRkVSX0lTT0MJCTEKKyNkZWZpbmUgVVNCX0VORFBPSU5UX1hGRVJfQlVMSwkJMgorI2RlZmluZSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQJCTMKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBVU0JfRFRfREVWSUNFX1FVQUxJRklFUjogRGV2aWNlIFF1YWxpZmllciBkZXNjcmlwdG9yICovCitzdHJ1Y3QgdXNiX3F1YWxpZmllcl9kZXNjcmlwdG9yIHsKKwlfX3U4ICBiTGVuZ3RoOworCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsKKworCV9fbGUxNiBiY2RVU0I7CisJX191OCAgYkRldmljZUNsYXNzOworCV9fdTggIGJEZXZpY2VTdWJDbGFzczsKKwlfX3U4ICBiRGV2aWNlUHJvdG9jb2w7CisJX191OCAgYk1heFBhY2tldFNpemUwOworCV9fdTggIGJOdW1Db25maWd1cmF0aW9uczsKKwlfX3U4ICBiUkVTRVJWRUQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBVU0JfRFRfT1RHIChmcm9tIE9URyAxLjBhIHN1cHBsZW1lbnQpICovCitzdHJ1Y3QgdXNiX290Z19kZXNjcmlwdG9yIHsKKwlfX3U4ICBiTGVuZ3RoOworCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsKKworCV9fdTggIGJtQXR0cmlidXRlczsJLyogc3VwcG9ydCBmb3IgSE5QLCBTUlAsIGV0YyAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qIGZyb20gdXNiX290Z19kZXNjcmlwdG9yLmJtQXR0cmlidXRlcyAqLworI2RlZmluZSBVU0JfT1RHX1NSUAkJKDEgPDwgMCkKKyNkZWZpbmUgVVNCX09UR19ITlAJCSgxIDw8IDEpCS8qIHN3YXAgaG9zdC9kZXZpY2Ugcm9sZXMgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogVVNCX0RUX0RFQlVHOiAgZm9yIHNwZWNpYWwgaGlnaHNwZWVkIGRldmljZXMsIHJlcGxhY2luZyBzZXJpYWwgY29uc29sZSAqLworc3RydWN0IHVzYl9kZWJ1Z19kZXNjcmlwdG9yIHsKKwlfX3U4ICBiTGVuZ3RoOworCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsKKworCS8qIGJ1bGsgZW5kcG9pbnRzIHdpdGggOCBieXRlIG1heHBhY2tldCAqLworCV9fdTggIGJEZWJ1Z0luRW5kcG9pbnQ7CisJX191OCAgYkRlYnVnT3V0RW5kcG9pbnQ7Cit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBVU0JfRFRfSU5URVJGQUNFX0FTU09DSUFUSU9OOiBncm91cHMgaW50ZXJmYWNlcyAqLworc3RydWN0IHVzYl9pbnRlcmZhY2VfYXNzb2NfZGVzY3JpcHRvciB7CisJX191OCAgYkxlbmd0aDsKKwlfX3U4ICBiRGVzY3JpcHRvclR5cGU7CisKKwlfX3U4ICBiRmlyc3RJbnRlcmZhY2U7CisJX191OCAgYkludGVyZmFjZUNvdW50OworCV9fdTggIGJGdW5jdGlvbkNsYXNzOworCV9fdTggIGJGdW5jdGlvblN1YkNsYXNzOworCV9fdTggIGJGdW5jdGlvblByb3RvY29sOworCV9fdTggIGlGdW5jdGlvbjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIFVTQiAyLjAgZGVmaW5lcyB0aHJlZSBzcGVlZHMsIGhlcmUncyBob3cgTGludXggaWRlbnRpZmllcyB0aGVtICovCisKK2VudW0gdXNiX2RldmljZV9zcGVlZCB7CisJVVNCX1NQRUVEX1VOS05PV04gPSAwLAkJCS8qIGVudW1lcmF0aW5nICovCisJVVNCX1NQRUVEX0xPVywgVVNCX1NQRUVEX0ZVTEwsCQkvKiB1c2IgMS4xICovCisJVVNCX1NQRUVEX0hJR0gJCQkJLyogdXNiIDIuMCAqLworfTsKKworZW51bSB1c2JfZGV2aWNlX3N0YXRlIHsKKwkvKiBOT1RBVFRBQ0hFRCBpc24ndCBpbiB0aGUgVVNCIHNwZWMsIGFuZCB0aGlzIHN0YXRlIGFjdHMKKwkgKiB0aGUgc2FtZSBhcyBBVFRBQ0hFRCAuLi4gYnV0IGl0J3MgY2xlYXJlciB0aGlzIHdheS4KKwkgKi8KKwlVU0JfU1RBVEVfTk9UQVRUQUNIRUQgPSAwLAorCisJLyogdGhlIGNoYXB0ZXIgOSBkZXZpY2Ugc3RhdGVzICovCisJVVNCX1NUQVRFX0FUVEFDSEVELAorCVVTQl9TVEFURV9QT1dFUkVELAorCVVTQl9TVEFURV9ERUZBVUxULAkJCS8qIGxpbWl0ZWQgZnVuY3Rpb24gKi8KKwlVU0JfU1RBVEVfQUREUkVTUywKKwlVU0JfU1RBVEVfQ09ORklHVVJFRCwJCQkvKiBtb3N0IGZ1bmN0aW9ucyAqLworCisJVVNCX1NUQVRFX1NVU1BFTkRFRAorCisJLyogTk9URTogIHRoZXJlIGFyZSBhY3R1YWxseSBmb3VyIGRpZmZlcmVudCBTVVNQRU5ERUQKKwkgKiBzdGF0ZXMsIHJldHVybmluZyB0byBQT1dFUkVELCBERUZBVUxULCBBRERSRVNTLCBvcgorCSAqIENPTkZJR1VSRUQgcmVzcGVjdGl2ZWx5IHdoZW4gU09GIHRva2VucyBmbG93IGFnYWluLgorCSAqLworfTsKKworI2VuZGlmCS8qIF9fTElOVVhfVVNCX0NIOV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYl9nYWRnZXQuaCBiL2luY2x1ZGUvbGludXgvdXNiX2dhZGdldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYmE5OTkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYl9nYWRnZXQuaApAQCAtMCwwICsxLDg3OCBAQAorLyoKKyAqIDxsaW51eC91c2JfZ2FkZ2V0Lmg+CisgKgorICogV2UgY2FsbCB0aGUgVVNCIGNvZGUgaW5zaWRlIGEgTGludXgtYmFzZWQgcGVyaXBoZXJhbCBkZXZpY2UgYSAiZ2FkZ2V0IgorICogZHJpdmVyLCBleGNlcHQgZm9yIHRoZSBoYXJkd2FyZS1zcGVjaWZpYyBidXMgZ2x1ZS4gIE9uZSBVU0IgaG9zdCBjYW4KKyAqIG1hc3RlciBtYW55IFVTQiBnYWRnZXRzLCBidXQgdGhlIGdhZGdldHMgYXJlIG9ubHkgc2xhdmVkIHRvIG9uZSBob3N0LgorICoKKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDItMjAwNCBieSBEYXZpZCBCcm93bmVsbAorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR1BMIHZlcnNpb24gMi4KKyAqLworCisjaWZuZGVmIF9fTElOVVhfVVNCX0dBREdFVF9ICisjZGVmaW5lIF9fTElOVVhfVVNCX0dBREdFVF9ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisKK3N0cnVjdCB1c2JfZXA7CisKKy8qKgorICogc3RydWN0IHVzYl9yZXF1ZXN0IC0gZGVzY3JpYmVzIG9uZSBpL28gcmVxdWVzdAorICogQGJ1ZjogQnVmZmVyIHVzZWQgZm9yIGRhdGEuICBBbHdheXMgcHJvdmlkZSB0aGlzOyBzb21lIGNvbnRyb2xsZXJzCisgKiAJb25seSB1c2UgUElPLCBvciBkb24ndCB1c2UgRE1BIGZvciBzb21lIGVuZHBvaW50cy4KKyAqIEBkbWE6IERNQSBhZGRyZXNzIGNvcnJlc3BvbmRpbmcgdG8gJ2J1ZicuICBJZiB5b3UgZG9uJ3Qgc2V0IHRoaXMKKyAqIAlmaWVsZCwgYW5kIHRoZSB1c2IgY29udHJvbGxlciBuZWVkcyBvbmUsIGl0IGlzIHJlc3BvbnNpYmxlCisgKiAJZm9yIG1hcHBpbmcgYW5kIHVubWFwcGluZyB0aGUgYnVmZmVyLgorICogQGxlbmd0aDogTGVuZ3RoIG9mIHRoYXQgZGF0YQorICogQG5vX2ludGVycnVwdDogSWYgdHJ1ZSwgaGludHMgdGhhdCBubyBjb21wbGV0aW9uIGlycSBpcyBuZWVkZWQuCisgKglIZWxwZnVsIHNvbWV0aW1lcyB3aXRoIGRlZXAgcmVxdWVzdCBxdWV1ZXMgdGhhdCBhcmUgaGFuZGxlZAorICoJZGlyZWN0bHkgYnkgRE1BIGNvbnRyb2xsZXJzLgorICogQHplcm86IElmIHRydWUsIHdoZW4gd3JpdGluZyBkYXRhLCBtYWtlcyB0aGUgbGFzdCBwYWNrZXQgYmUgInNob3J0IgorICogICAgIGJ5IGFkZGluZyBhIHplcm8gbGVuZ3RoIHBhY2tldCBhcyBuZWVkZWQ7CisgKiBAc2hvcnRfbm90X29rOiBXaGVuIHJlYWRpbmcgZGF0YSwgbWFrZXMgc2hvcnQgcGFja2V0cyBiZQorICogICAgIHRyZWF0ZWQgYXMgZXJyb3JzIChxdWV1ZSBzdG9wcyBhZHZhbmNpbmcgdGlsbCBjbGVhbnVwKS4KKyAqIEBjb21wbGV0ZTogRnVuY3Rpb24gY2FsbGVkIHdoZW4gcmVxdWVzdCBjb21wbGV0ZXMsIHNvIHRoaXMgcmVxdWVzdCBhbmQKKyAqCWl0cyBidWZmZXIgbWF5IGJlIHJlLXVzZWQuCisgKglSZWFkcyB0ZXJtaW5hdGUgd2l0aCBhIHNob3J0IHBhY2tldCwgb3Igd2hlbiB0aGUgYnVmZmVyIGZpbGxzLAorICoJd2hpY2hldmVyIGNvbWVzIGZpcnN0LiAgV2hlbiB3cml0ZXMgdGVybWluYXRlLCBzb21lIGRhdGEgYnl0ZXMKKyAqCXdpbGwgdXN1YWxseSBzdGlsbCBiZSBpbiBmbGlnaHQgKG9mdGVuIGluIGEgaGFyZHdhcmUgZmlmbykuCisgKglFcnJvcnMgKGZvciByZWFkcyBvciB3cml0ZXMpIHN0b3AgdGhlIHF1ZXVlIGZyb20gYWR2YW5jaW5nCisgKgl1bnRpbCB0aGUgY29tcGxldGlvbiBmdW5jdGlvbiByZXR1cm5zLCBzbyB0aGF0IGFueSB0cmFuc2ZlcnMKKyAqCWludmFsaWRhdGVkIGJ5IHRoZSBlcnJvciBtYXkgZmlyc3QgYmUgZGVxdWV1ZWQuCisgKiBAY29udGV4dDogRm9yIHVzZSBieSB0aGUgY29tcGxldGlvbiBjYWxsYmFjaworICogQGxpc3Q6IEZvciB1c2UgYnkgdGhlIGdhZGdldCBkcml2ZXIuCisgKiBAc3RhdHVzOiBSZXBvcnRzIGNvbXBsZXRpb24gY29kZSwgemVybyBvciBhIG5lZ2F0aXZlIGVycm5vLgorICogCU5vcm1hbGx5LCBmYXVsdHMgYmxvY2sgdGhlIHRyYW5zZmVyIHF1ZXVlIGZyb20gYWR2YW5jaW5nIHVudGlsCisgKiAJdGhlIGNvbXBsZXRpb24gY2FsbGJhY2sgcmV0dXJucy4KKyAqIAlDb2RlICItRVNIVVRET1dOIiBpbmRpY2F0ZXMgY29tcGxldGlvbiBjYXVzZWQgYnkgZGV2aWNlIGRpc2Nvbm5lY3QsCisgKiAJb3Igd2hlbiB0aGUgZHJpdmVyIGRpc2FibGVkIHRoZSBlbmRwb2ludC4KKyAqIEBhY3R1YWw6IFJlcG9ydHMgYnl0ZXMgdHJhbnNmZXJyZWQgdG8vZnJvbSB0aGUgYnVmZmVyLiAgRm9yIHJlYWRzIChPVVQKKyAqIAl0cmFuc2ZlcnMpIHRoaXMgbWF5IGJlIGxlc3MgdGhhbiB0aGUgcmVxdWVzdGVkIGxlbmd0aC4gIElmIHRoZQorICogCXNob3J0X25vdF9vayBmbGFnIGlzIHNldCwgc2hvcnQgcmVhZHMgYXJlIHRyZWF0ZWQgYXMgZXJyb3JzCisgKiAJZXZlbiB3aGVuIHN0YXR1cyBvdGhlcndpc2UgaW5kaWNhdGVzIHN1Y2Nlc3NmdWwgY29tcGxldGlvbi4KKyAqIAlOb3RlIHRoYXQgZm9yIHdyaXRlcyAoSU4gdHJhbnNmZXJzKSBzb21lIGRhdGEgYnl0ZXMgbWF5IHN0aWxsCisgKiAJcmVzaWRlIGluIGEgZGV2aWNlLXNpZGUgRklGTyB3aGVuIHRoZSByZXF1ZXN0IGlzIHJlcG9ydGVkIGFzCisgKgljb21wbGV0ZS4KKyAqCisgKiBUaGVzZSBhcmUgYWxsb2NhdGVkL2ZyZWVkIHRocm91Z2ggdGhlIGVuZHBvaW50IHRoZXkncmUgdXNlZCB3aXRoLiAgVGhlCisgKiBoYXJkd2FyZSdzIGRyaXZlciBjYW4gYWRkIGV4dHJhIHBlci1yZXF1ZXN0IGRhdGEgdG8gdGhlIG1lbW9yeSBpdCByZXR1cm5zLAorICogd2hpY2ggb2Z0ZW4gYXZvaWRzIHNlcGFyYXRlIG1lbW9yeSBhbGxvY2F0aW9ucyAocG90ZW50aWFsIGZhaWx1cmVzKSwKKyAqIGxhdGVyIHdoZW4gdGhlIHJlcXVlc3QgaXMgcXVldWVkLgorICoKKyAqIFJlcXVlc3QgZmxhZ3MgYWZmZWN0IHJlcXVlc3QgaGFuZGxpbmcsIHN1Y2ggYXMgd2hldGhlciBhIHplcm8gbGVuZ3RoCisgKiBwYWNrZXQgaXMgd3JpdHRlbiAodGhlICJ6ZXJvIiBmbGFnKSwgd2hldGhlciBhIHNob3J0IHJlYWQgc2hvdWxkIGJlCisgKiB0cmVhdGVkIGFzIGFuIGVycm9yIChibG9ja2luZyByZXF1ZXN0IHF1ZXVlIGFkdmFuY2UsIHRoZSAic2hvcnRfbm90X29rIgorICogZmxhZyksIG9yIGhpbnRpbmcgdGhhdCBhbiBpbnRlcnJ1cHQgaXMgbm90IHJlcXVpcmVkICh0aGUgIm5vX2ludGVycnVwdCIKKyAqIGZsYWcsIGZvciB1c2Ugd2l0aCBkZWVwIHJlcXVlc3QgcXVldWVzKS4KKyAqCisgKiBCdWxrIGVuZHBvaW50cyBjYW4gdXNlIGFueSBzaXplIGJ1ZmZlcnMsIGFuZCBjYW4gYWxzbyBiZSB1c2VkIGZvciBpbnRlcnJ1cHQKKyAqIHRyYW5zZmVycy4gaW50ZXJydXB0LW9ubHkgZW5kcG9pbnRzIGNhbiBiZSBtdWNoIGxlc3MgZnVuY3Rpb25hbC4KKyAqLworCS8vIE5PVEUgdGhpcyBpcyBhbmFsYWdvdXMgdG8gJ3N0cnVjdCB1cmInIG9uIHRoZSBob3N0IHNpZGUsCisJLy8gZXhjZXB0IHRoYXQgaXQncyB0aGlubmVyIGFuZCBwcm9tb3RlcyBtb3JlIHByZS1hbGxvY2F0aW9uLgorCitzdHJ1Y3QgdXNiX3JlcXVlc3QgeworCXZvaWQJCQkqYnVmOworCXVuc2lnbmVkCQlsZW5ndGg7CisJZG1hX2FkZHJfdAkJZG1hOworCisJdW5zaWduZWQJCW5vX2ludGVycnVwdDoxOworCXVuc2lnbmVkCQl6ZXJvOjE7CisJdW5zaWduZWQJCXNob3J0X25vdF9vazoxOworCisJdm9pZAkJCSgqY29tcGxldGUpKHN0cnVjdCB1c2JfZXAgKmVwLAorCQkJCQlzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSk7CisJdm9pZAkJCSpjb250ZXh0OworCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKKworCWludAkJCXN0YXR1czsKKwl1bnNpZ25lZAkJYWN0dWFsOworfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogZW5kcG9pbnQtc3BlY2lmaWMgcGFydHMgb2YgdGhlIGFwaSB0byB0aGUgdXNiIGNvbnRyb2xsZXIgaGFyZHdhcmUuCisgKiB1bmxpa2UgdGhlIHVyYiBtb2RlbCwgKGRlKW11bHRpcGxleGluZyBsYXllcnMgYXJlIG5vdCByZXF1aXJlZC4KKyAqIChzbyB0aGlzIGFwaSBjb3VsZCBzbGFzaCBvdmVyaGVhZCBpZiB1c2VkIG9uIHRoZSBob3N0IHNpZGUuLi4pCisgKgorICogbm90ZSB0aGF0IGRldmljZSBzaWRlIHVzYiBjb250cm9sbGVycyBjb21tb25seSBkaWZmZXIgaW4gaG93IG1hbnkKKyAqIGVuZHBvaW50cyB0aGV5IHN1cHBvcnQsIGFzIHdlbGwgYXMgdGhlaXIgY2FwYWJpbGl0aWVzLgorICovCitzdHJ1Y3QgdXNiX2VwX29wcyB7CisJaW50ICgqZW5hYmxlKSAoc3RydWN0IHVzYl9lcCAqZXAsCisJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZGVzYyk7CisJaW50ICgqZGlzYWJsZSkgKHN0cnVjdCB1c2JfZXAgKmVwKTsKKworCXN0cnVjdCB1c2JfcmVxdWVzdCAqKCphbGxvY19yZXF1ZXN0KSAoc3RydWN0IHVzYl9lcCAqZXAsCisJCWludCBnZnBfZmxhZ3MpOworCXZvaWQgKCpmcmVlX3JlcXVlc3QpIChzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpOworCisJdm9pZCAqKCphbGxvY19idWZmZXIpIChzdHJ1Y3QgdXNiX2VwICplcCwgdW5zaWduZWQgYnl0ZXMsCisJCWRtYV9hZGRyX3QgKmRtYSwgaW50IGdmcF9mbGFncyk7CisJdm9pZCAoKmZyZWVfYnVmZmVyKSAoc3RydWN0IHVzYl9lcCAqZXAsIHZvaWQgKmJ1ZiwgZG1hX2FkZHJfdCBkbWEsCisJCXVuc2lnbmVkIGJ5dGVzKTsKKwkvLyBOT1RFOiAgb24gMi42LCBkcml2ZXJzIG1heSBhbHNvIHVzZSBkbWFfbWFwKCkgYW5kCisJLy8gZG1hX3N5bmNfc2luZ2xlXyooKSB0byBkaXJlY3RseSBtYW5hZ2UgZG1hIG92ZXJoZWFkLiAKKworCWludCAoKnF1ZXVlKSAoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxLAorCQlpbnQgZ2ZwX2ZsYWdzKTsKKwlpbnQgKCpkZXF1ZXVlKSAoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKTsKKworCWludCAoKnNldF9oYWx0KSAoc3RydWN0IHVzYl9lcCAqZXAsIGludCB2YWx1ZSk7CisJaW50ICgqZmlmb19zdGF0dXMpIChzdHJ1Y3QgdXNiX2VwICplcCk7CisJdm9pZCAoKmZpZm9fZmx1c2gpIChzdHJ1Y3QgdXNiX2VwICplcCk7Cit9OworCisvKioKKyAqIHN0cnVjdCB1c2JfZXAgLSBkZXZpY2Ugc2lkZSByZXByZXNlbnRhdGlvbiBvZiBVU0IgZW5kcG9pbnQKKyAqIEBuYW1lOmlkZW50aWZpZXIgZm9yIHRoZSBlbmRwb2ludCwgc3VjaCBhcyAiZXAtYSIgb3IgImVwOWluLWJ1bGsiCisgKiBAb3BzOiBGdW5jdGlvbiBwb2ludGVycyB1c2VkIHRvIGFjY2VzcyBoYXJkd2FyZS1zcGVjaWZpYyBvcGVyYXRpb25zLgorICogQGVwX2xpc3Q6dGhlIGdhZGdldCdzIGVwX2xpc3QgaG9sZHMgYWxsIG9mIGl0cyBlbmRwb2ludHMKKyAqIEBtYXhwYWNrZXQ6VGhlIG1heGltdW0gcGFja2V0IHNpemUgdXNlZCBvbiB0aGlzIGVuZHBvaW50LiAgVGhlIGluaXRpYWwKKyAqCXZhbHVlIGNhbiBzb21ldGltZXMgYmUgcmVkdWNlZCAoaGFyZHdhcmUgYWxsb3dpbmcpLCBhY2NvcmRpbmcgdG8KKyAqICAgICAgdGhlIGVuZHBvaW50IGRlc2NyaXB0b3IgdXNlZCB0byBjb25maWd1cmUgdGhlIGVuZHBvaW50LgorICogQGRyaXZlcl9kYXRhOmZvciB1c2UgYnkgdGhlIGdhZGdldCBkcml2ZXIuICBhbGwgb3RoZXIgZmllbGRzIGFyZQorICogCXJlYWQtb25seSB0byBnYWRnZXQgZHJpdmVycy4KKyAqCisgKiB0aGUgYnVzIGNvbnRyb2xsZXIgZHJpdmVyIGxpc3RzIGFsbCB0aGUgZ2VuZXJhbCBwdXJwb3NlIGVuZHBvaW50cyBpbgorICogZ2FkZ2V0LT5lcF9saXN0LiAgdGhlIGNvbnRyb2wgZW5kcG9pbnQgKGdhZGdldC0+ZXAwKSBpcyBub3QgaW4gdGhhdCBsaXN0LAorICogYW5kIGlzIGFjY2Vzc2VkIG9ubHkgaW4gcmVzcG9uc2UgdG8gYSBkcml2ZXIgc2V0dXAoKSBjYWxsYmFjay4KKyAqLworc3RydWN0IHVzYl9lcCB7CisJdm9pZAkJCSpkcml2ZXJfZGF0YTsKKworCWNvbnN0IGNoYXIJCSpuYW1lOworCWNvbnN0IHN0cnVjdCB1c2JfZXBfb3BzCSpvcHM7CisJc3RydWN0IGxpc3RfaGVhZAllcF9saXN0OworCXVuc2lnbmVkCQltYXhwYWNrZXQ6MTY7Cit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKioKKyAqIHVzYl9lcF9lbmFibGUgLSBjb25maWd1cmUgZW5kcG9pbnQsIG1ha2luZyBpdCB1c2FibGUKKyAqIEBlcDp0aGUgZW5kcG9pbnQgYmVpbmcgY29uZmlndXJlZC4gIG1heSBub3QgYmUgdGhlIGVuZHBvaW50IG5hbWVkICJlcDAiLgorICogCWRyaXZlcnMgZGlzY292ZXIgZW5kcG9pbnRzIHRocm91Z2ggdGhlIGVwX2xpc3Qgb2YgYSB1c2JfZ2FkZ2V0LgorICogQGRlc2M6ZGVzY3JpcHRvciBmb3IgZGVzaXJlZCBiZWhhdmlvci4gIGNhbGxlciBndWFyYW50ZWVzIHRoaXMgcG9pbnRlcgorICogCXJlbWFpbnMgdmFsaWQgdW50aWwgdGhlIGVuZHBvaW50IGlzIGRpc2FibGVkOyB0aGUgZGF0YSBieXRlIG9yZGVyCisgKiAJaXMgbGl0dGxlLWVuZGlhbiAodXNiLXN0YW5kYXJkKS4KKyAqCisgKiB3aGVuIGNvbmZpZ3VyYXRpb25zIGFyZSBzZXQsIG9yIHdoZW4gaW50ZXJmYWNlIHNldHRpbmdzIGNoYW5nZSwgdGhlIGRyaXZlcgorICogd2lsbCBlbmFibGUgb3IgZGlzYWJsZSB0aGUgcmVsZXZhbnQgZW5kcG9pbnRzLiAgd2hpbGUgaXQgaXMgZW5hYmxlZCwgYW4KKyAqIGVuZHBvaW50IG1heSBiZSB1c2VkIGZvciBpL28gdW50aWwgdGhlIGRyaXZlciByZWNlaXZlcyBhIGRpc2Nvbm5lY3QoKSBmcm9tCisgKiB0aGUgaG9zdCBvciB1bnRpbCB0aGUgZW5kcG9pbnQgaXMgZGlzYWJsZWQuCisgKgorICogdGhlIGVwMCBpbXBsZW1lbnRhdGlvbiAod2hpY2ggY2FsbHMgdGhpcyByb3V0aW5lKSBtdXN0IGVuc3VyZSB0aGF0IHRoZQorICogaGFyZHdhcmUgY2FwYWJpbGl0aWVzIG9mIGVhY2ggZW5kcG9pbnQgbWF0Y2ggdGhlIGRlc2NyaXB0b3IgcHJvdmlkZWQKKyAqIGZvciBpdC4gIGZvciBleGFtcGxlLCBhbiBlbmRwb2ludCBuYW1lZCAiZXAyaW4tYnVsayIgd291bGQgYmUgdXNhYmxlCisgKiBmb3IgaW50ZXJydXB0IHRyYW5zZmVycyBhcyB3ZWxsIGFzIGJ1bGssIGJ1dCBpdCBsaWtlbHkgY291bGRuJ3QgYmUgdXNlZAorICogZm9yIGlzbyB0cmFuc2ZlcnMgb3IgZm9yIGVuZHBvaW50IDE0LiAgc29tZSBlbmRwb2ludHMgYXJlIGZ1bGx5CisgKiBjb25maWd1cmFibGUsIHdpdGggbW9yZSBnZW5lcmljIG5hbWVzIGxpa2UgImVwLWEiLiAgKHJlbWVtYmVyIHRoYXQgZm9yCisgKiBVU0IsICJpbiIgbWVhbnMgInRvd2FyZHMgdGhlIFVTQiBtYXN0ZXIiLikKKyAqCisgKiByZXR1cm5zIHplcm8sIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQKK3VzYl9lcF9lbmFibGUgKHN0cnVjdCB1c2JfZXAgKmVwLCBjb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmRlc2MpCit7CisJcmV0dXJuIGVwLT5vcHMtPmVuYWJsZSAoZXAsIGRlc2MpOworfQorCisvKioKKyAqIHVzYl9lcF9kaXNhYmxlIC0gZW5kcG9pbnQgaXMgbm8gbG9uZ2VyIHVzYWJsZQorICogQGVwOnRoZSBlbmRwb2ludCBiZWluZyB1bmNvbmZpZ3VyZWQuICBtYXkgbm90IGJlIHRoZSBlbmRwb2ludCBuYW1lZCAiZXAwIi4KKyAqCisgKiBubyBvdGhlciB0YXNrIG1heSBiZSB1c2luZyB0aGlzIGVuZHBvaW50IHdoZW4gdGhpcyBpcyBjYWxsZWQuCisgKiBhbnkgcGVuZGluZyBhbmQgdW5jb21wbGV0ZWQgcmVxdWVzdHMgd2lsbCBjb21wbGV0ZSB3aXRoIHN0YXR1cworICogaW5kaWNhdGluZyBkaXNjb25uZWN0ICgtRVNIVVRET1dOKSBiZWZvcmUgdGhpcyBjYWxsIHJldHVybnMuCisgKiBnYWRnZXQgZHJpdmVycyBtdXN0IGNhbGwgdXNiX2VwX2VuYWJsZSgpIGFnYWluIGJlZm9yZSBxdWV1ZWluZworICogcmVxdWVzdHMgdG8gdGhlIGVuZHBvaW50LgorICoKKyAqIHJldHVybnMgemVybywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLgorICovCitzdGF0aWMgaW5saW5lIGludAordXNiX2VwX2Rpc2FibGUgKHN0cnVjdCB1c2JfZXAgKmVwKQoreworCXJldHVybiBlcC0+b3BzLT5kaXNhYmxlIChlcCk7Cit9CisKKy8qKgorICogdXNiX2VwX2FsbG9jX3JlcXVlc3QgLSBhbGxvY2F0ZSBhIHJlcXVlc3Qgb2JqZWN0IHRvIHVzZSB3aXRoIHRoaXMgZW5kcG9pbnQKKyAqIEBlcDp0aGUgZW5kcG9pbnQgdG8gYmUgdXNlZCB3aXRoIHdpdGggdGhlIHJlcXVlc3QKKyAqIEBnZnBfZmxhZ3M6R0ZQXyogZmxhZ3MgdG8gdXNlCisgKgorICogUmVxdWVzdCBvYmplY3RzIG11c3QgYmUgYWxsb2NhdGVkIHdpdGggdGhpcyBjYWxsLCBzaW5jZSB0aGV5IG5vcm1hbGx5CisgKiBuZWVkIGNvbnRyb2xsZXItc3BlY2lmaWMgc2V0dXAgYW5kIG1heSBldmVuIG5lZWQgZW5kcG9pbnQtc3BlY2lmaWMKKyAqIHJlc291cmNlcyBzdWNoIGFzIGFsbG9jYXRpb24gb2YgRE1BIGRlc2NyaXB0b3JzLgorICogUmVxdWVzdHMgbWF5IGJlIHN1Ym1pdHRlZCB3aXRoIHVzYl9lcF9xdWV1ZSgpLCBhbmQgcmVjZWl2ZSBhIHNpbmdsZQorICogY29tcGxldGlvbiBjYWxsYmFjay4gIEZyZWUgcmVxdWVzdHMgd2l0aCB1c2JfZXBfZnJlZV9yZXF1ZXN0KCksIHdoZW4KKyAqIHRoZXkgYXJlIG5vIGxvbmdlciBuZWVkZWQuCisgKgorICogUmV0dXJucyB0aGUgcmVxdWVzdCwgb3IgbnVsbCBpZiBvbmUgY291bGQgbm90IGJlIGFsbG9jYXRlZC4KKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgdXNiX3JlcXVlc3QgKgordXNiX2VwX2FsbG9jX3JlcXVlc3QgKHN0cnVjdCB1c2JfZXAgKmVwLCBpbnQgZ2ZwX2ZsYWdzKQoreworCXJldHVybiBlcC0+b3BzLT5hbGxvY19yZXF1ZXN0IChlcCwgZ2ZwX2ZsYWdzKTsKK30KKworLyoqCisgKiB1c2JfZXBfZnJlZV9yZXF1ZXN0IC0gZnJlZXMgYSByZXF1ZXN0IG9iamVjdAorICogQGVwOnRoZSBlbmRwb2ludCBhc3NvY2lhdGVkIHdpdGggdGhlIHJlcXVlc3QKKyAqIEByZXE6dGhlIHJlcXVlc3QgYmVpbmcgZnJlZWQKKyAqCisgKiBSZXZlcnNlcyB0aGUgZWZmZWN0IG9mIHVzYl9lcF9hbGxvY19yZXF1ZXN0KCkuCisgKiBDYWxsZXIgZ3VhcmFudGVlcyB0aGUgcmVxdWVzdCBpcyBub3QgcXVldWVkLCBhbmQgdGhhdCBpdCB3aWxsCisgKiBubyBsb25nZXIgYmUgcmVxdWV1ZWQgKG9yIG90aGVyd2lzZSB1c2VkKS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCit1c2JfZXBfZnJlZV9yZXF1ZXN0IChzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpCit7CisJZXAtPm9wcy0+ZnJlZV9yZXF1ZXN0IChlcCwgcmVxKTsKK30KKworLyoqCisgKiB1c2JfZXBfYWxsb2NfYnVmZmVyIC0gYWxsb2NhdGUgYW4gSS9PIGJ1ZmZlcgorICogQGVwOnRoZSBlbmRwb2ludCBhc3NvY2lhdGVkIHdpdGggdGhlIGJ1ZmZlcgorICogQGxlbjpsZW5ndGggb2YgdGhlIGRlc2lyZWQgYnVmZmVyCisgKiBAZG1hOnBvaW50ZXIgdG8gdGhlIGJ1ZmZlcidzIERNQSBhZGRyZXNzOyBtdXN0IGJlIHZhbGlkCisgKiBAZ2ZwX2ZsYWdzOkdGUF8qIGZsYWdzIHRvIHVzZQorICoKKyAqIFJldHVybnMgYSBuZXcgYnVmZmVyLCBvciBudWxsIGlmIG9uZSBjb3VsZCBub3QgYmUgYWxsb2NhdGVkLgorICogVGhlIGJ1ZmZlciBpcyBzdWl0YWJseSBhbGlnbmVkIGZvciBkbWEsIGlmIHRoYXQgZW5kcG9pbnQgdXNlcyBETUEsCisgKiBhbmQgdGhlIGNhbGxlciB3b24ndCBoYXZlIHRvIGNhcmUgYWJvdXQgZG1hLWluY29uc2lzdGVuY3kKKyAqIG9yIGFueSBoaWRkZW4gImJvdW5jZSBidWZmZXIiIG1lY2hhbmlzbS4gIE5vIGFkZGl0aW9uYWwgcGVyLXJlcXVlc3QKKyAqIERNQSBtYXBwaW5nIHdpbGwgYmUgcmVxdWlyZWQgZm9yIHN1Y2ggYnVmZmVycy4KKyAqIEZyZWUgaXQgbGF0ZXIgd2l0aCB1c2JfZXBfZnJlZV9idWZmZXIoKS4KKyAqCisgKiBZb3UgZG9uJ3QgbmVlZCB0byB1c2UgdGhpcyBjYWxsIHRvIGFsbG9jYXRlIEkvTyBidWZmZXJzIHVubGVzcyB5b3UKKyAqIHdhbnQgdG8gbWFrZSBzdXJlIGRyaXZlcnMgZG9uJ3QgaW5jdXIgY29zdHMgZm9yIHN1Y2ggImJvdW5jZSBidWZmZXIiCisgKiBjb3BpZXMgb3IgcGVyLXJlcXVlc3QgRE1BIG1hcHBpbmdzLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgKgordXNiX2VwX2FsbG9jX2J1ZmZlciAoc3RydWN0IHVzYl9lcCAqZXAsIHVuc2lnbmVkIGxlbiwgZG1hX2FkZHJfdCAqZG1hLAorCWludCBnZnBfZmxhZ3MpCit7CisJcmV0dXJuIGVwLT5vcHMtPmFsbG9jX2J1ZmZlciAoZXAsIGxlbiwgZG1hLCBnZnBfZmxhZ3MpOworfQorCisvKioKKyAqIHVzYl9lcF9mcmVlX2J1ZmZlciAtIGZyZWVzIGFuIGkvbyBidWZmZXIKKyAqIEBlcDp0aGUgZW5kcG9pbnQgYXNzb2NpYXRlZCB3aXRoIHRoZSBidWZmZXIKKyAqIEBidWY6Q1BVIHZpZXcgYWRkcmVzcyBvZiB0aGUgYnVmZmVyCisgKiBAZG1hOnRoZSBidWZmZXIncyBETUEgYWRkcmVzcworICogQGxlbjpsZW5ndGggb2YgdGhlIGJ1ZmZlcgorICoKKyAqIHJldmVyc2VzIHRoZSBlZmZlY3Qgb2YgdXNiX2VwX2FsbG9jX2J1ZmZlcigpLgorICogY2FsbGVyIGd1YXJhbnRlZXMgdGhlIGJ1ZmZlciB3aWxsIG5vIGxvbmdlciBiZSBhY2Nlc3NlZAorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK3VzYl9lcF9mcmVlX2J1ZmZlciAoc3RydWN0IHVzYl9lcCAqZXAsIHZvaWQgKmJ1ZiwgZG1hX2FkZHJfdCBkbWEsIHVuc2lnbmVkIGxlbikKK3sKKwllcC0+b3BzLT5mcmVlX2J1ZmZlciAoZXAsIGJ1ZiwgZG1hLCBsZW4pOworfQorCisvKioKKyAqIHVzYl9lcF9xdWV1ZSAtIHF1ZXVlcyAoc3VibWl0cykgYW4gSS9PIHJlcXVlc3QgdG8gYW4gZW5kcG9pbnQuCisgKiBAZXA6dGhlIGVuZHBvaW50IGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVxdWVzdAorICogQHJlcTp0aGUgcmVxdWVzdCBiZWluZyBzdWJtaXR0ZWQKKyAqIEBnZnBfZmxhZ3M6IEdGUF8qIGZsYWdzIHRvIHVzZSBpbiBjYXNlIHRoZSBsb3dlciBsZXZlbCBkcml2ZXIgY291bGRuJ3QKKyAqIAlwcmUtYWxsb2NhdGUgYWxsIG5lY2Vzc2FyeSBtZW1vcnkgd2l0aCB0aGUgcmVxdWVzdC4KKyAqCisgKiBUaGlzIHRlbGxzIHRoZSBkZXZpY2UgY29udHJvbGxlciB0byBwZXJmb3JtIHRoZSBzcGVjaWZpZWQgcmVxdWVzdCB0aHJvdWdoCisgKiB0aGF0IGVuZHBvaW50IChyZWFkaW5nIG9yIHdyaXRpbmcgYSBidWZmZXIpLiAgV2hlbiB0aGUgcmVxdWVzdCBjb21wbGV0ZXMsCisgKiBpbmNsdWRpbmcgYmVpbmcgY2FuY2VsZWQgYnkgdXNiX2VwX2RlcXVldWUoKSwgdGhlIHJlcXVlc3QncyBjb21wbGV0aW9uCisgKiByb3V0aW5lIGlzIGNhbGxlZCB0byByZXR1cm4gdGhlIHJlcXVlc3QgdG8gdGhlIGRyaXZlci4gIEFueSBlbmRwb2ludAorICogKGV4Y2VwdCBjb250cm9sIGVuZHBvaW50cyBsaWtlIGVwMCkgbWF5IGhhdmUgbW9yZSB0aGFuIG9uZSB0cmFuc2ZlcgorICogcmVxdWVzdCBxdWV1ZWQ7IHRoZXkgY29tcGxldGUgaW4gRklGTyBvcmRlci4gIE9uY2UgYSBnYWRnZXQgZHJpdmVyCisgKiBzdWJtaXRzIGEgcmVxdWVzdCwgdGhhdCByZXF1ZXN0IG1heSBub3QgYmUgZXhhbWluZWQgb3IgbW9kaWZpZWQgdW50aWwgaXQKKyAqIGlzIGdpdmVuIGJhY2sgdG8gdGhhdCBkcml2ZXIgdGhyb3VnaCB0aGUgY29tcGxldGlvbiBjYWxsYmFjay4KKyAqCisgKiBFYWNoIHJlcXVlc3QgaXMgdHVybmVkIGludG8gb25lIG9yIG1vcmUgcGFja2V0cy4gIFRoZSBjb250cm9sbGVyIGRyaXZlcgorICogbmV2ZXIgbWVyZ2VzIGFkamFjZW50IHJlcXVlc3RzIGludG8gdGhlIHNhbWUgcGFja2V0LiAgT1VUIHRyYW5zZmVycworICogd2lsbCBzb21ldGltZXMgdXNlIGRhdGEgdGhhdCdzIGFscmVhZHkgYnVmZmVyZWQgaW4gdGhlIGhhcmR3YXJlLgorICogRHJpdmVycyBjYW4gcmVseSBvbiB0aGUgZmFjdCB0aGF0IHRoZSBmaXJzdCBieXRlIG9mIHRoZSByZXF1ZXN0J3MgYnVmZmVyCisgKiBhbHdheXMgY29ycmVzcG9uZHMgdG8gdGhlIGZpcnN0IGJ5dGUgb2Ygc29tZSBVU0IgcGFja2V0LCBmb3IgYm90aAorICogSU4gYW5kIE9VVCB0cmFuc2ZlcnMuCisgKgorICogQnVsayBlbmRwb2ludHMgY2FuIHF1ZXVlIGFueSBhbW91bnQgb2YgZGF0YTsgdGhlIHRyYW5zZmVyIGlzIHBhY2tldGl6ZWQKKyAqIGF1dG9tYXRpY2FsbHkuICBUaGUgbGFzdCBwYWNrZXQgd2lsbCBiZSBzaG9ydCBpZiB0aGUgcmVxdWVzdCBkb2Vzbid0IGZpbGwgaXQKKyAqIG91dCBjb21wbGV0ZWx5LiAgWmVybyBsZW5ndGggcGFja2V0cyAoWkxQcykgc2hvdWxkIGJlIGF2b2lkZWQgaW4gcG9ydGFibGUKKyAqIHByb3RvY29scyBzaW5jZSBub3QgYWxsIHVzYiBoYXJkd2FyZSBjYW4gc3VjY2Vzc2Z1bGx5IGhhbmRsZSB6ZXJvIGxlbmd0aAorICogcGFja2V0cy4gIChaTFBzIG1heSBiZSBleHBsaWNpdGx5IHdyaXR0ZW4sIGFuZCBtYXkgYmUgaW1wbGljaXRseSB3cml0dGVuIGlmCisgKiB0aGUgcmVxdWVzdCAnemVybycgZmxhZyBpcyBzZXQuKSAgQnVsayBlbmRwb2ludHMgbWF5IGFsc28gYmUgdXNlZAorICogZm9yIGludGVycnVwdCB0cmFuc2ZlcnM7IGJ1dCB0aGUgcmV2ZXJzZSBpcyBub3QgdHJ1ZSwgYW5kIHNvbWUgZW5kcG9pbnRzCisgKiB3b24ndCBzdXBwb3J0IGV2ZXJ5IGludGVycnVwdCB0cmFuc2Zlci4gIChTdWNoIGFzIDc2OCBieXRlIHBhY2tldHMuKQorICoKKyAqIEludGVycnVwdC1vbmx5IGVuZHBvaW50cyBhcmUgbGVzcyBmdW5jdGlvbmFsIHRoYW4gYnVsayBlbmRwb2ludHMsIGZvcgorICogZXhhbXBsZSBieSBub3Qgc3VwcG9ydGluZyBxdWV1ZWluZyBvciBub3QgaGFuZGxpbmcgYnVmZmVycyB0aGF0IGFyZQorICogbGFyZ2VyIHRoYW4gdGhlIGVuZHBvaW50J3MgbWF4cGFja2V0IHNpemUuICBUaGV5IG1heSBhbHNvIHRyZWF0IGRhdGEKKyAqIHRvZ2dsZSBkaWZmZXJlbnRseS4KKyAqCisgKiBDb250cm9sIGVuZHBvaW50cyAuLi4gYWZ0ZXIgZ2V0dGluZyBhIHNldHVwKCkgY2FsbGJhY2ssIHRoZSBkcml2ZXIgcXVldWVzCisgKiBvbmUgcmVzcG9uc2UgKGV2ZW4gaWYgaXQgd291bGQgYmUgemVybyBsZW5ndGgpLiAgVGhhdCBlbmFibGVzIHRoZQorICogc3RhdHVzIGFjaywgYWZ0ZXIgdHJhbnNmZXJpbmcgZGF0YSBhcyBzcGVjaWZpZWQgaW4gdGhlIHJlc3BvbnNlLiAgU2V0dXAKKyAqIGZ1bmN0aW9ucyBtYXkgcmV0dXJuIG5lZ2F0aXZlIGVycm9yIGNvZGVzIHRvIGdlbmVyYXRlIHByb3RvY29sIHN0YWxscy4KKyAqIChOb3RlIHRoYXQgc29tZSBVU0IgZGV2aWNlIGNvbnRyb2xsZXJzIGRpc2FsbG93IHByb3RvY29sIHN0YWxsIHJlc3BvbnNlcworICogaW4gc29tZSBjYXNlcy4pICBXaGVuIGNvbnRyb2wgcmVzcG9uc2VzIGFyZSBkZWZlcnJlZCAodGhlIHJlc3BvbnNlIGlzCisgKiB3cml0dGVuIGFmdGVyIHRoZSBzZXR1cCBjYWxsYmFjayByZXR1cm5zKSwgdGhlbiB1c2JfZXBfc2V0X2hhbHQoKSBtYXkgYmUKKyAqIHVzZWQgb24gZXAwIHRvIHRyaWdnZXIgcHJvdG9jb2wgc3RhbGxzLgorICoKKyAqIEZvciBwZXJpb2RpYyBlbmRwb2ludHMsIGxpa2UgaW50ZXJydXB0IG9yIGlzb2Nocm9ub3VzIG9uZXMsIHRoZSB1c2IgaG9zdAorICogYXJyYW5nZXMgdG8gcG9sbCBvbmNlIHBlciBpbnRlcnZhbCwgYW5kIHRoZSBnYWRnZXQgZHJpdmVyIHVzdWFsbHkgd2lsbAorICogaGF2ZSBxdWV1ZWQgc29tZSBkYXRhIHRvIHRyYW5zZmVyIGF0IHRoYXQgdGltZS4KKyAqCisgKiBSZXR1cm5zIHplcm8sIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4gIEVuZHBvaW50cyB0aGF0IGFyZSBub3QgZW5hYmxlZAorICogcmVwb3J0IGVycm9yczsgZXJyb3JzIHdpbGwgYWxzbyBiZQorICogcmVwb3J0ZWQgd2hlbiB0aGUgdXNiIHBlcmlwaGVyYWwgaXMgZGlzY29ubmVjdGVkLgorICovCitzdGF0aWMgaW5saW5lIGludAordXNiX2VwX3F1ZXVlIChzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEsIGludCBnZnBfZmxhZ3MpCit7CisJcmV0dXJuIGVwLT5vcHMtPnF1ZXVlIChlcCwgcmVxLCBnZnBfZmxhZ3MpOworfQorCisvKioKKyAqIHVzYl9lcF9kZXF1ZXVlIC0gZGVxdWV1ZXMgKGNhbmNlbHMsIHVubGlua3MpIGFuIEkvTyByZXF1ZXN0IGZyb20gYW4gZW5kcG9pbnQKKyAqIEBlcDp0aGUgZW5kcG9pbnQgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXF1ZXN0CisgKiBAcmVxOnRoZSByZXF1ZXN0IGJlaW5nIGNhbmNlbGVkCisgKgorICogaWYgdGhlIHJlcXVlc3QgaXMgc3RpbGwgYWN0aXZlIG9uIHRoZSBlbmRwb2ludCwgaXQgaXMgZGVxdWV1ZWQgYW5kIGl0cworICogY29tcGxldGlvbiByb3V0aW5lIGlzIGNhbGxlZCAod2l0aCBzdGF0dXMgLUVDT05OUkVTRVQpOyBlbHNlIGEgbmVnYXRpdmUKKyAqIGVycm9yIGNvZGUgaXMgcmV0dXJuZWQuCisgKgorICogbm90ZSB0aGF0IHNvbWUgaGFyZHdhcmUgY2FuJ3QgY2xlYXIgb3V0IHdyaXRlIGZpZm9zICh0byB1bmxpbmsgdGhlIHJlcXVlc3QKKyAqIGF0IHRoZSBoZWFkIG9mIHRoZSBxdWV1ZSkgZXhjZXB0IGFzIHBhcnQgb2YgZGlzY29ubmVjdGluZyBmcm9tIHVzYi4gIHN1Y2gKKyAqIHJlc3RyaWN0aW9ucyBwcmV2ZW50IGRyaXZlcnMgZnJvbSBzdXBwb3J0aW5nIGNvbmZpZ3VyYXRpb24gY2hhbmdlcywKKyAqIGV2ZW4gdG8gY29uZmlndXJhdGlvbiB6ZXJvIChhICJjaGFwdGVyIDkiIHJlcXVpcmVtZW50KS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgdXNiX2VwX2RlcXVldWUgKHN0cnVjdCB1c2JfZXAgKmVwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSkKK3sKKwlyZXR1cm4gZXAtPm9wcy0+ZGVxdWV1ZSAoZXAsIHJlcSk7Cit9CisKKy8qKgorICogdXNiX2VwX3NldF9oYWx0IC0gc2V0cyB0aGUgZW5kcG9pbnQgaGFsdCBmZWF0dXJlLgorICogQGVwOiB0aGUgbm9uLWlzb2Nocm9ub3VzIGVuZHBvaW50IGJlaW5nIHN0YWxsZWQKKyAqCisgKiBVc2UgdGhpcyB0byBzdGFsbCBhbiBlbmRwb2ludCwgcGVyaGFwcyBhcyBhbiBlcnJvciByZXBvcnQuCisgKiBFeGNlcHQgZm9yIGNvbnRyb2wgZW5kcG9pbnRzLAorICogdGhlIGVuZHBvaW50IHN0YXlzIGhhbHRlZCAod2lsbCBub3Qgc3RyZWFtIGFueSBkYXRhKSB1bnRpbCB0aGUgaG9zdAorICogY2xlYXJzIHRoaXMgZmVhdHVyZTsgZHJpdmVycyBtYXkgbmVlZCB0byBlbXB0eSB0aGUgZW5kcG9pbnQncyByZXF1ZXN0CisgKiBxdWV1ZSBmaXJzdCwgdG8gbWFrZSBzdXJlIG5vIGluYXBwcm9wcmlhdGUgdHJhbnNmZXJzIGhhcHBlbi4KKyAqCisgKiBOb3RlIHRoYXQgd2hpbGUgYW4gZW5kcG9pbnQgQ0xFQVJfRkVBVFVSRSB3aWxsIGJlIGludmlzaWJsZSB0byB0aGUKKyAqIGdhZGdldCBkcml2ZXIsIGEgU0VUX0lOVEVSRkFDRSB3aWxsIG5vdCBiZS4gIFRvIHJlc2V0IGVuZHBvaW50cyBmb3IgdGhlCisgKiBjdXJyZW50IGFsdHNldHRpbmcsIHNlZSB1c2JfZXBfY2xlYXJfaGFsdCgpLiAgV2hlbiBzd2l0Y2hpbmcgYWx0c2V0dGluZ3MsCisgKiBpdCdzIHNpbXBsZXN0IHRvIHVzZSB1c2JfZXBfZW5hYmxlKCkgb3IgdXNiX2VwX2Rpc2FibGUoKSBmb3IgdGhlIGVuZHBvaW50cy4KKyAqCisgKiBSZXR1cm5zIHplcm8sIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4gIE9uIHN1Y2Nlc3MsIHRoaXMgY2FsbCBzZXRzCisgKiB1bmRlcmx5aW5nIGhhcmR3YXJlIHN0YXRlIHRoYXQgYmxvY2tzIGRhdGEgdHJhbnNmZXJzLgorICogQXR0ZW1wdHMgdG8gaGFsdCBJTiBlbmRwb2ludHMgd2lsbCBmYWlsIChyZXR1cm5pbmcgLUVBR0FJTikgaWYgYW55CisgKiB0cmFuc2ZlciByZXF1ZXN0cyBhcmUgc3RpbGwgcXVldWVkLCBvciBpZiB0aGUgY29udHJvbGxlciBoYXJkd2FyZQorICogKHVzdWFsbHkgYSBGSUZPKSBzdGlsbCBob2xkcyBieXRlcyB0aGF0IHRoZSBob3N0IGhhc24ndCBjb2xsZWN0ZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50Cit1c2JfZXBfc2V0X2hhbHQgKHN0cnVjdCB1c2JfZXAgKmVwKQoreworCXJldHVybiBlcC0+b3BzLT5zZXRfaGFsdCAoZXAsIDEpOworfQorCisvKioKKyAqIHVzYl9lcF9jbGVhcl9oYWx0IC0gY2xlYXJzIGVuZHBvaW50IGhhbHQsIGFuZCByZXNldHMgdG9nZ2xlCisgKiBAZXA6dGhlIGJ1bGsgb3IgaW50ZXJydXB0IGVuZHBvaW50IGJlaW5nIHJlc2V0CisgKgorICogVXNlIHRoaXMgd2hlbiByZXNwb25kaW5nIHRvIHRoZSBzdGFuZGFyZCB1c2IgInNldCBpbnRlcmZhY2UiIHJlcXVlc3QsCisgKiBmb3IgZW5kcG9pbnRzIHRoYXQgYXJlbid0IHJlY29uZmlndXJlZCwgYWZ0ZXIgY2xlYXJpbmcgYW55IG90aGVyIHN0YXRlCisgKiBpbiB0aGUgZW5kcG9pbnQncyBpL28gcXVldWUuCisgKgorICogUmV0dXJucyB6ZXJvLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuICBPbiBzdWNjZXNzLCB0aGlzIGNhbGwgY2xlYXJzCisgKiB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBzdGF0ZSByZWZsZWN0aW5nIGVuZHBvaW50IGhhbHQgYW5kIGRhdGEgdG9nZ2xlLgorICogTm90ZSB0aGF0IHNvbWUgaGFyZHdhcmUgY2FuJ3Qgc3VwcG9ydCB0aGlzIHJlcXVlc3QgKGxpa2UgcHhhMnh4X3VkYyksCisgKiBhbmQgYWNjb3JkaW5nbHkgY2FuJ3QgY29ycmVjdGx5IGltcGxlbWVudCBpbnRlcmZhY2UgYWx0c2V0dGluZ3MuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50Cit1c2JfZXBfY2xlYXJfaGFsdCAoc3RydWN0IHVzYl9lcCAqZXApCit7CisJcmV0dXJuIGVwLT5vcHMtPnNldF9oYWx0IChlcCwgMCk7Cit9CisKKy8qKgorICogdXNiX2VwX2ZpZm9fc3RhdHVzIC0gcmV0dXJucyBudW1iZXIgb2YgYnl0ZXMgaW4gZmlmbywgb3IgZXJyb3IKKyAqIEBlcDogdGhlIGVuZHBvaW50IHdob3NlIGZpZm8gc3RhdHVzIGlzIGJlaW5nIGNoZWNrZWQuCisgKgorICogRklGTyBlbmRwb2ludHMgbWF5IGhhdmUgInVuY2xhaW1lZCBkYXRhIiBpbiB0aGVtIGluIGNlcnRhaW4gY2FzZXMsCisgKiBzdWNoIGFzIGFmdGVyIGFib3J0ZWQgdHJhbnNmZXJzLiAgSG9zdHMgbWF5IG5vdCBoYXZlIGNvbGxlY3RlZCBhbGwKKyAqIHRoZSBJTiBkYXRhIHdyaXR0ZW4gYnkgdGhlIGdhZGdldCBkcml2ZXIgKGFuZCByZXBvcnRlZCBieSBhIHJlcXVlc3QKKyAqIGNvbXBsZXRpb24pLiAgVGhlIGdhZGdldCBkcml2ZXIgbWF5IG5vdCBoYXZlIGNvbGxlY3RlZCBhbGwgdGhlIGRhdGEKKyAqIHdyaXR0ZW4gT1VUIHRvIGl0IGJ5IHRoZSBob3N0LiAgRHJpdmVycyB0aGF0IG5lZWQgcHJlY2lzZSBoYW5kbGluZyBmb3IKKyAqIGZhdWx0IHJlcG9ydGluZyBvciByZWNvdmVyeSBtYXkgbmVlZCB0byB1c2UgdGhpcyBjYWxsLgorICoKKyAqIFRoaXMgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHN1Y2ggYnl0ZXMgaW4gdGhlIGZpZm8sIG9yIGEgbmVnYXRpdmUKKyAqIGVycm5vIGlmIHRoZSBlbmRwb2ludCBkb2Vzbid0IHVzZSBhIEZJRk8gb3IgZG9lc24ndCBzdXBwb3J0IHN1Y2gKKyAqIHByZWNpc2UgaGFuZGxpbmcuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50Cit1c2JfZXBfZmlmb19zdGF0dXMgKHN0cnVjdCB1c2JfZXAgKmVwKQoreworCWlmIChlcC0+b3BzLT5maWZvX3N0YXR1cykKKwkJcmV0dXJuIGVwLT5vcHMtPmZpZm9fc3RhdHVzIChlcCk7CisJZWxzZQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7Cit9CisKKy8qKgorICogdXNiX2VwX2ZpZm9fZmx1c2ggLSBmbHVzaGVzIGNvbnRlbnRzIG9mIGEgZmlmbworICogQGVwOiB0aGUgZW5kcG9pbnQgd2hvc2UgZmlmbyBpcyBiZWluZyBmbHVzaGVkLgorICoKKyAqIFRoaXMgY2FsbCBtYXkgYmUgdXNlZCB0byBmbHVzaCB0aGUgInVuY2xhaW1lZCBkYXRhIiB0aGF0IG1heSBleGlzdCBpbgorICogYW4gZW5kcG9pbnQgZmlmbyBhZnRlciBhYm5vcm1hbCB0cmFuc2FjdGlvbiB0ZXJtaW5hdGlvbnMuICBUaGUgY2FsbAorICogbXVzdCBuZXZlciBiZSB1c2VkIGV4Y2VwdCB3aGVuIGVuZHBvaW50IGlzIG5vdCBiZWluZyB1c2VkIGZvciBhbnkKKyAqIHByb3RvY29sIHRyYW5zbGF0aW9uLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK3VzYl9lcF9maWZvX2ZsdXNoIChzdHJ1Y3QgdXNiX2VwICplcCkKK3sKKwlpZiAoZXAtPm9wcy0+Zmlmb19mbHVzaCkKKwkJZXAtPm9wcy0+Zmlmb19mbHVzaCAoZXApOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0cnVjdCB1c2JfZ2FkZ2V0OworCisvKiB0aGUgcmVzdCBvZiB0aGUgYXBpIHRvIHRoZSBjb250cm9sbGVyIGhhcmR3YXJlOiBkZXZpY2Ugb3BlcmF0aW9ucywKKyAqIHdoaWNoIGRvbid0IGludm9sdmUgZW5kcG9pbnRzIChvciBpL28pLgorICovCitzdHJ1Y3QgdXNiX2dhZGdldF9vcHMgeworCWludAkoKmdldF9mcmFtZSkoc3RydWN0IHVzYl9nYWRnZXQgKik7CisJaW50CSgqd2FrZXVwKShzdHJ1Y3QgdXNiX2dhZGdldCAqKTsKKwlpbnQJKCpzZXRfc2VsZnBvd2VyZWQpIChzdHJ1Y3QgdXNiX2dhZGdldCAqLCBpbnQgaXNfc2VsZnBvd2VyZWQpOworCWludAkoKnZidXNfc2Vzc2lvbikgKHN0cnVjdCB1c2JfZ2FkZ2V0ICosIGludCBpc19hY3RpdmUpOworCWludAkoKnZidXNfZHJhdykgKHN0cnVjdCB1c2JfZ2FkZ2V0ICosIHVuc2lnbmVkIG1BKTsKKwlpbnQJKCpwdWxsdXApIChzdHJ1Y3QgdXNiX2dhZGdldCAqLCBpbnQgaXNfb24pOworCWludAkoKmlvY3RsKShzdHJ1Y3QgdXNiX2dhZGdldCAqLAorCQkJCXVuc2lnbmVkIGNvZGUsIHVuc2lnbmVkIGxvbmcgcGFyYW0pOworfTsKKworLyoqCisgKiBzdHJ1Y3QgdXNiX2dhZGdldCAtIHJlcHJlc2VudHMgYSB1c2Igc2xhdmUgZGV2aWNlCisgKiBAb3BzOiBGdW5jdGlvbiBwb2ludGVycyB1c2VkIHRvIGFjY2VzcyBoYXJkd2FyZS1zcGVjaWZpYyBvcGVyYXRpb25zLgorICogQGVwMDogRW5kcG9pbnQgemVybywgdXNlZCB3aGVuIHJlYWRpbmcgb3Igd3JpdGluZyByZXNwb25zZXMgdG8KKyAqIAlkcml2ZXIgc2V0dXAoKSByZXF1ZXN0cworICogQGVwX2xpc3Q6IExpc3Qgb2Ygb3RoZXIgZW5kcG9pbnRzIHN1cHBvcnRlZCBieSB0aGUgZGV2aWNlLgorICogQHNwZWVkOiBTcGVlZCBvZiBjdXJyZW50IGNvbm5lY3Rpb24gdG8gVVNCIGhvc3QuCisgKiBAaXNfZHVhbHNwZWVkOiBUcnVlIGlmIHRoZSBjb250cm9sbGVyIHN1cHBvcnRzIGJvdGggaGlnaCBhbmQgZnVsbCBzcGVlZAorICoJb3BlcmF0aW9uLiAgSWYgaXQgZG9lcywgdGhlIGdhZGdldCBkcml2ZXIgbXVzdCBhbHNvIHN1cHBvcnQgYm90aC4KKyAqIEBpc19vdGc6IFRydWUgaWYgdGhlIFVTQiBkZXZpY2UgcG9ydCB1c2VzIGEgTWluaS1BQiBqYWNrLCBzbyB0aGF0IHRoZQorICoJZ2FkZ2V0IGRyaXZlciBtdXN0IHByb3ZpZGUgYSBVU0IgT1RHIGRlc2NyaXB0b3IuCisgKiBAaXNfYV9wZXJpcGhlcmFsOiBGYWxzZSB1bmxlc3MgaXNfb3RnLCB0aGUgIkEiIGVuZCBvZiBhIFVTQiBjYWJsZQorICoJaXMgaW4gdGhlIE1pbmktQUIgamFjaywgYW5kIEhOUCBoYXMgYmVlbiB1c2VkIHRvIHN3aXRjaCByb2xlcworICoJc28gdGhhdCB0aGUgIkEiIGRldmljZSBjdXJyZW50bHkgYWN0cyBhcyBBLVBlcmlwaGVyYWwsIG5vdCBBLUhvc3QuCisgKiBAYV9obnBfc3VwcG9ydDogT1RHIGRldmljZSBmZWF0dXJlIGZsYWcsIGluZGljYXRpbmcgdGhhdCB0aGUgQS1Ib3N0CisgKglzdXBwb3J0cyBITlAgYXQgdGhpcyBwb3J0LgorICogQGFfYWx0X2hucF9zdXBwb3J0OiBPVEcgZGV2aWNlIGZlYXR1cmUgZmxhZywgaW5kaWNhdGluZyB0aGF0IHRoZSBBLUhvc3QKKyAqCW9ubHkgc3VwcG9ydHMgSE5QIG9uIGEgZGlmZmVyZW50IHJvb3QgcG9ydC4KKyAqIEBiX2hucF9lbmFibGU6IE9URyBkZXZpY2UgZmVhdHVyZSBmbGFnLCBpbmRpY2F0aW5nIHRoYXQgdGhlIEEtSG9zdAorICoJZW5hYmxlZCBITlAgc3VwcG9ydC4KKyAqIEBuYW1lOiBJZGVudGlmaWVzIHRoZSBjb250cm9sbGVyIGhhcmR3YXJlIHR5cGUuICBVc2VkIGluIGRpYWdub3N0aWNzCisgKiAJYW5kIHNvbWV0aW1lcyBjb25maWd1cmF0aW9uLgorICogQGRldjogRHJpdmVyIG1vZGVsIHN0YXRlIGZvciB0aGlzIGFic3RyYWN0IGRldmljZS4KKyAqCisgKiBHYWRnZXRzIGhhdmUgYSBtb3N0bHktcG9ydGFibGUgImdhZGdldCBkcml2ZXIiIGltcGxlbWVudGluZyBkZXZpY2UKKyAqIGZ1bmN0aW9ucywgaGFuZGxpbmcgYWxsIHVzYiBjb25maWd1cmF0aW9ucyBhbmQgaW50ZXJmYWNlcy4gIEdhZGdldAorICogZHJpdmVycyB0YWxrIHRvIGhhcmR3YXJlLXNwZWNpZmljIGNvZGUgaW5kaXJlY3RseSwgdGhyb3VnaCBvcHMgdmVjdG9ycy4KKyAqIFRoYXQgaW5zdWxhdGVzIHRoZSBnYWRnZXQgZHJpdmVyIGZyb20gaGFyZHdhcmUgZGV0YWlscywgYW5kIHBhY2thZ2VzCisgKiB0aGUgaGFyZHdhcmUgZW5kcG9pbnRzIHRocm91Z2ggZ2VuZXJpYyBpL28gcXVldWVzLiAgVGhlICJ1c2JfZ2FkZ2V0IgorICogYW5kICJ1c2JfZXAiIGludGVyZmFjZXMgcHJvdmlkZSB0aGF0IGluc3VsYXRpb24gZnJvbSB0aGUgaGFyZHdhcmUuCisgKgorICogRXhjZXB0IGZvciB0aGUgZHJpdmVyIGRhdGEsIGFsbCBmaWVsZHMgaW4gdGhpcyBzdHJ1Y3R1cmUgYXJlCisgKiByZWFkLW9ubHkgdG8gdGhlIGdhZGdldCBkcml2ZXIuICBUaGF0IGRyaXZlciBkYXRhIGlzIHBhcnQgb2YgdGhlCisgKiAiZHJpdmVyIG1vZGVsIiBpbmZyYXN0cnVjdHVyZSBpbiAyLjYgKGFuZCBsYXRlcikga2VybmVscywgYW5kIGZvcgorICogZWFybGllciBzeXN0ZW1zIGlzIGdyb3VwZWQgaW4gYSBzaW1pbGFyIHN0cnVjdHVyZSB0aGF0J3Mgbm90IGtub3duCisgKiB0byB0aGUgcmVzdCBvZiB0aGUga2VybmVsLgorICoKKyAqIFZhbHVlcyBvZiB0aGUgdGhyZWUgT1RHIGRldmljZSBmZWF0dXJlIGZsYWdzIGFyZSB1cGRhdGVkIGJlZm9yZSB0aGUKKyAqIHNldHVwKCkgY2FsbCBjb3JyZXNwb25kaW5nIHRvIFVTQl9SRVFfU0VUX0NPTkZJR1VSQVRJT04sIGFuZCBiZWZvcmUKKyAqIGRyaXZlciBzdXNwZW5kKCkgY2FsbHMuICBUaGV5IGFyZSB2YWxpZCBvbmx5IHdoZW4gaXNfb3RnLCBhbmQgd2hlbiB0aGUKKyAqIGRldmljZSBpcyBhY3RpbmcgYXMgYSBCLVBlcmlwaGVyYWwgKHNvIGlzX2FfcGVyaXBoZXJhbCBpcyBmYWxzZSkuCisgKi8KK3N0cnVjdCB1c2JfZ2FkZ2V0IHsKKwkvKiByZWFkb25seSB0byBnYWRnZXQgZHJpdmVyICovCisJY29uc3Qgc3RydWN0IHVzYl9nYWRnZXRfb3BzCSpvcHM7CisJc3RydWN0IHVzYl9lcAkJCSplcDA7CisJc3RydWN0IGxpc3RfaGVhZAkJZXBfbGlzdDsJLyogb2YgdXNiX2VwICovCisJZW51bSB1c2JfZGV2aWNlX3NwZWVkCQlzcGVlZDsKKwl1bnNpZ25lZAkJCWlzX2R1YWxzcGVlZDoxOworCXVuc2lnbmVkCQkJaXNfb3RnOjE7CisJdW5zaWduZWQJCQlpc19hX3BlcmlwaGVyYWw6MTsKKwl1bnNpZ25lZAkJCWJfaG5wX2VuYWJsZToxOworCXVuc2lnbmVkCQkJYV9obnBfc3VwcG9ydDoxOworCXVuc2lnbmVkCQkJYV9hbHRfaG5wX3N1cHBvcnQ6MTsKKwljb25zdCBjaGFyCQkJKm5hbWU7CisJc3RydWN0IGRldmljZQkJCWRldjsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfZ2FkZ2V0X2RhdGEgKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsIHZvaWQgKmRhdGEpCisJeyBkZXZfc2V0X2RydmRhdGEgKCZnYWRnZXQtPmRldiwgZGF0YSk7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCAqZ2V0X2dhZGdldF9kYXRhIChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KQorCXsgcmV0dXJuIGRldl9nZXRfZHJ2ZGF0YSAoJmdhZGdldC0+ZGV2KTsgfQorCisvKiBpdGVyYXRlcyB0aGUgbm9uLWNvbnRyb2wgZW5kcG9pbnRzOyAndG1wJyBpcyBhIHN0cnVjdCB1c2JfZXAgcG9pbnRlciAqLworI2RlZmluZSBnYWRnZXRfZm9yX2VhY2hfZXAodG1wLGdhZGdldCkgXAorCWxpc3RfZm9yX2VhY2hfZW50cnkodG1wLCAmKGdhZGdldCktPmVwX2xpc3QsIGVwX2xpc3QpCisKKworLyoqCisgKiB1c2JfZ2FkZ2V0X2ZyYW1lX251bWJlciAtIHJldHVybnMgdGhlIGN1cnJlbnQgZnJhbWUgbnVtYmVyCisgKiBAZ2FkZ2V0OiBjb250cm9sbGVyIHRoYXQgcmVwb3J0cyB0aGUgZnJhbWUgbnVtYmVyCisgKgorICogUmV0dXJucyB0aGUgdXNiIGZyYW1lIG51bWJlciwgbm9ybWFsbHkgZWxldmVuIGJpdHMgZnJvbSBhIFNPRiBwYWNrZXQsCisgKiBvciBuZWdhdGl2ZSBlcnJubyBpZiB0aGlzIGRldmljZSBkb2Vzbid0IHN1cHBvcnQgdGhpcyBjYXBhYmlsaXR5LgorICovCitzdGF0aWMgaW5saW5lIGludCB1c2JfZ2FkZ2V0X2ZyYW1lX251bWJlciAoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCkKK3sKKwlyZXR1cm4gZ2FkZ2V0LT5vcHMtPmdldF9mcmFtZSAoZ2FkZ2V0KTsKK30KKworLyoqCisgKiB1c2JfZ2FkZ2V0X3dha2V1cCAtIHRyaWVzIHRvIHdha2UgdXAgdGhlIGhvc3QgY29ubmVjdGVkIHRvIHRoaXMgZ2FkZ2V0CisgKiBAZ2FkZ2V0OiBjb250cm9sbGVyIHVzZWQgdG8gd2FrZSB1cCB0aGUgaG9zdAorICoKKyAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzLCBlbHNlIG5lZ2F0aXZlIGVycm9yIGNvZGUgaWYgdGhlIGhhcmR3YXJlCisgKiBkb2Vzbid0IHN1cHBvcnQgc3VjaCBhdHRlbXB0cywgb3IgaXRzIHN1cHBvcnQgaGFzIG5vdCBiZWVuIGVuYWJsZWQKKyAqIGJ5IHRoZSB1c2IgaG9zdC4gIERyaXZlcnMgbXVzdCByZXR1cm4gZGV2aWNlIGRlc2NyaXB0b3JzIHRoYXQgcmVwb3J0CisgKiB0aGVpciBhYmlsaXR5IHRvIHN1cHBvcnQgdGhpcywgb3IgaG9zdHMgd29uJ3QgZW5hYmxlIGl0LgorICoKKyAqIFRoaXMgbWF5IGFsc28gdHJ5IHRvIHVzZSBTUlAgdG8gd2FrZSB0aGUgaG9zdCBhbmQgc3RhcnQgZW51bWVyYXRpb24sCisgKiBldmVuIGlmIE9URyBpc24ndCBvdGhlcndpc2UgaW4gdXNlLiAgT1RHIGRldmljZXMgbWF5IGFsc28gc3RhcnQKKyAqIHJlbW90ZSB3YWtldXAgZXZlbiB3aGVuIGhvc3RzIGRvbid0IGV4cGxpY2l0bHkgZW5hYmxlIGl0LgorICovCitzdGF0aWMgaW5saW5lIGludCB1c2JfZ2FkZ2V0X3dha2V1cCAoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCkKK3sKKwlpZiAoIWdhZGdldC0+b3BzLT53YWtldXApCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwlyZXR1cm4gZ2FkZ2V0LT5vcHMtPndha2V1cCAoZ2FkZ2V0KTsKK30KKworLyoqCisgKiB1c2JfZ2FkZ2V0X3NldF9zZWxmcG93ZXJlZCAtIHNldHMgdGhlIGRldmljZSBzZWxmcG93ZXJlZCBmZWF0dXJlLgorICogQGdhZGdldDp0aGUgZGV2aWNlIGJlaW5nIGRlY2xhcmVkIGFzIHNlbGYtcG93ZXJlZAorICoKKyAqIHRoaXMgYWZmZWN0cyB0aGUgZGV2aWNlIHN0YXR1cyByZXBvcnRlZCBieSB0aGUgaGFyZHdhcmUgZHJpdmVyCisgKiB0byByZWZsZWN0IHRoYXQgaXQgbm93IGhhcyBhIGxvY2FsIHBvd2VyIHN1cHBseS4KKyAqCisgKiByZXR1cm5zIHplcm8gb24gc3VjY2VzcywgZWxzZSBuZWdhdGl2ZSBlcnJuby4KKyAqLworc3RhdGljIGlubGluZSBpbnQKK3VzYl9nYWRnZXRfc2V0X3NlbGZwb3dlcmVkIChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KQoreworCWlmICghZ2FkZ2V0LT5vcHMtPnNldF9zZWxmcG93ZXJlZCkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCXJldHVybiBnYWRnZXQtPm9wcy0+c2V0X3NlbGZwb3dlcmVkIChnYWRnZXQsIDEpOworfQorCisvKioKKyAqIHVzYl9nYWRnZXRfY2xlYXJfc2VsZnBvd2VyZWQgLSBjbGVhciB0aGUgZGV2aWNlIHNlbGZwb3dlcmVkIGZlYXR1cmUuCisgKiBAZ2FkZ2V0OnRoZSBkZXZpY2UgYmVpbmcgZGVjbGFyZWQgYXMgYnVzLXBvd2VyZWQKKyAqCisgKiB0aGlzIGFmZmVjdHMgdGhlIGRldmljZSBzdGF0dXMgcmVwb3J0ZWQgYnkgdGhlIGhhcmR3YXJlIGRyaXZlci4KKyAqIHNvbWUgaGFyZHdhcmUgbWF5IG5vdCBzdXBwb3J0IGJ1cy1wb3dlcmVkIG9wZXJhdGlvbiwgaW4gd2hpY2gKKyAqIGNhc2UgdGhpcyBmZWF0dXJlJ3MgdmFsdWUgY2FuIG5ldmVyIGNoYW5nZS4KKyAqCisgKiByZXR1cm5zIHplcm8gb24gc3VjY2VzcywgZWxzZSBuZWdhdGl2ZSBlcnJuby4KKyAqLworc3RhdGljIGlubGluZSBpbnQKK3VzYl9nYWRnZXRfY2xlYXJfc2VsZnBvd2VyZWQgKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpCit7CisJaWYgKCFnYWRnZXQtPm9wcy0+c2V0X3NlbGZwb3dlcmVkKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJcmV0dXJuIGdhZGdldC0+b3BzLT5zZXRfc2VsZnBvd2VyZWQgKGdhZGdldCwgMCk7Cit9CisKKy8qKgorICogdXNiX2dhZGdldF92YnVzX2Nvbm5lY3QgLSBOb3RpZnkgY29udHJvbGxlciB0aGF0IFZCVVMgaXMgcG93ZXJlZAorICogQGdhZGdldDpUaGUgZGV2aWNlIHdoaWNoIG5vdyBoYXMgVkJVUyBwb3dlci4KKyAqCisgKiBUaGlzIGNhbGwgaXMgdXNlZCBieSBhIGRyaXZlciBmb3IgYW4gZXh0ZXJuYWwgdHJhbnNjZWl2ZXIgKG9yIEdQSU8pCisgKiB0aGF0IGRldGVjdHMgYSBWQlVTIHBvd2VyIHNlc3Npb24gc3RhcnRpbmcuICBDb21tb24gcmVzcG9uc2VzIGluY2x1ZGUKKyAqIHJlc3VtaW5nIHRoZSBjb250cm9sbGVyLCBhY3RpdmF0aW5nIHRoZSBEKyAob3IgRC0pIHB1bGx1cCB0byBsZXQgdGhlCisgKiBob3N0IGRldGVjdCB0aGF0IGEgVVNCIGRldmljZSBpcyBhdHRhY2hlZCwgYW5kIHN0YXJ0aW5nIHRvIGRyYXcgcG93ZXIKKyAqICg4bUEgb3IgcG9zc2libHkgbW9yZSwgZXNwZWNpYWxseSBhZnRlciBTRVRfQ09ORklHVVJBVElPTikuCisgKgorICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIGVsc2UgbmVnYXRpdmUgZXJybm8uCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50Cit1c2JfZ2FkZ2V0X3ZidXNfY29ubmVjdChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KQoreworCWlmICghZ2FkZ2V0LT5vcHMtPnZidXNfc2Vzc2lvbikKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCXJldHVybiBnYWRnZXQtPm9wcy0+dmJ1c19zZXNzaW9uIChnYWRnZXQsIDEpOworfQorCisvKioKKyAqIHVzYl9nYWRnZXRfdmJ1c19kcmF3IC0gY29uc3RyYWluIGNvbnRyb2xsZXIncyBWQlVTIHBvd2VyIHVzYWdlCisgKiBAZ2FkZ2V0OlRoZSBkZXZpY2Ugd2hvc2UgVkJVUyB1c2FnZSBpcyBiZWluZyBkZXNjcmliZWQKKyAqIEBtQTpIb3cgbXVjaCBjdXJyZW50IHRvIGRyYXcsIGluIG1pbGxpQW1wZXJlcy4gIFRoaXMgc2hvdWxkIGJlIHR3aWNlCisgKgl0aGUgdmFsdWUgbGlzdGVkIGluIHRoZSBjb25maWd1cmF0aW9uIGRlc2NyaXB0b3IgYk1heFBvd2VyIGZpZWxkLgorICoKKyAqIFRoaXMgY2FsbCBpcyB1c2VkIGJ5IGdhZGdldCBkcml2ZXJzIGR1cmluZyBTRVRfQ09ORklHVVJBVElPTiBjYWxscywKKyAqIHJlcG9ydGluZyBob3cgbXVjaCBwb3dlciB0aGUgZGV2aWNlIG1heSBjb25zdW1lLiAgRm9yIGV4YW1wbGUsIHRoaXMKKyAqIGNvdWxkIGFmZmVjdCBob3cgcXVpY2tseSBiYXR0ZXJpZXMgYXJlIHJlY2hhcmdlZC4KKyAqCisgKiBSZXR1cm5zIHplcm8gb24gc3VjY2VzcywgZWxzZSBuZWdhdGl2ZSBlcnJuby4KKyAqLworc3RhdGljIGlubGluZSBpbnQKK3VzYl9nYWRnZXRfdmJ1c19kcmF3KHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsIHVuc2lnbmVkIG1BKQoreworCWlmICghZ2FkZ2V0LT5vcHMtPnZidXNfZHJhdykKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCXJldHVybiBnYWRnZXQtPm9wcy0+dmJ1c19kcmF3IChnYWRnZXQsIG1BKTsKK30KKworLyoqCisgKiB1c2JfZ2FkZ2V0X3ZidXNfZGlzY29ubmVjdCAtIG5vdGlmeSBjb250cm9sbGVyIGFib3V0IFZCVVMgc2Vzc2lvbiBlbmQKKyAqIEBnYWRnZXQ6dGhlIGRldmljZSB3aG9zZSBWQlVTIHN1cHBseSBpcyBiZWluZyBkZXNjcmliZWQKKyAqCisgKiBUaGlzIGNhbGwgaXMgdXNlZCBieSBhIGRyaXZlciBmb3IgYW4gZXh0ZXJuYWwgdHJhbnNjZWl2ZXIgKG9yIEdQSU8pCisgKiB0aGF0IGRldGVjdHMgYSBWQlVTIHBvd2VyIHNlc3Npb24gZW5kaW5nLiAgQ29tbW9uIHJlc3BvbnNlcyBpbmNsdWRlCisgKiByZXZlcnNpbmcgZXZlcnl0aGluZyBkb25lIGluIHVzYl9nYWRnZXRfdmJ1c19jb25uZWN0KCkuCisgKgorICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIGVsc2UgbmVnYXRpdmUgZXJybm8uCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50Cit1c2JfZ2FkZ2V0X3ZidXNfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KQoreworCWlmICghZ2FkZ2V0LT5vcHMtPnZidXNfc2Vzc2lvbikKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCXJldHVybiBnYWRnZXQtPm9wcy0+dmJ1c19zZXNzaW9uIChnYWRnZXQsIDApOworfQorCisvKioKKyAqIHVzYl9nYWRnZXRfY29ubmVjdCAtIHNvZnR3YXJlLWNvbnRyb2xsZWQgY29ubmVjdCB0byBVU0IgaG9zdAorICogQGdhZGdldDp0aGUgcGVyaXBoZXJhbCBiZWluZyBjb25uZWN0ZWQKKyAqCisgKiBFbmFibGVzIHRoZSBEKyAob3IgcG90ZW50aWFsbHkgRC0pIHB1bGx1cC4gIFRoZSBob3N0IHdpbGwgc3RhcnQKKyAqIGVudW1lcmF0aW5nIHRoaXMgZ2FkZ2V0IHdoZW4gdGhlIHB1bGx1cCBpcyBhY3RpdmUgYW5kIGEgVkJVUyBzZXNzaW9uCisgKiBpcyBhY3RpdmUgKHRoZSBsaW5rIGlzIHBvd2VyZWQpLiAgVGhpcyBwdWxsdXAgaXMgYWx3YXlzIGVuYWJsZWQgdW5sZXNzCisgKiB1c2JfZ2FkZ2V0X2Rpc2Nvbm5lY3QoKSBoYXMgYmVlbiB1c2VkIHRvIGRpc2FibGUgaXQuCisgKgorICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIGVsc2UgbmVnYXRpdmUgZXJybm8uCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50Cit1c2JfZ2FkZ2V0X2Nvbm5lY3QgKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpCit7CisJaWYgKCFnYWRnZXQtPm9wcy0+cHVsbHVwKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJcmV0dXJuIGdhZGdldC0+b3BzLT5wdWxsdXAgKGdhZGdldCwgMSk7Cit9CisKKy8qKgorICogdXNiX2dhZGdldF9kaXNjb25uZWN0IC0gc29mdHdhcmUtY29udHJvbGxlZCBkaXNjb25uZWN0IGZyb20gVVNCIGhvc3QKKyAqIEBnYWRnZXQ6dGhlIHBlcmlwaGVyYWwgYmVpbmcgZGlzY29ubmVjdGVkCisgKgorICogRGlzYWJsZXMgdGhlIEQrIChvciBwb3RlbnRpYWxseSBELSkgcHVsbHVwLCB3aGljaCB0aGUgaG9zdCBtYXkgc2VlCisgKiBhcyBhIGRpc2Nvbm5lY3QgKHdoZW4gYSBWQlVTIHNlc3Npb24gaXMgYWN0aXZlKS4gIE5vdCBhbGwgc3lzdGVtcworICogc3VwcG9ydCBzb2Z0d2FyZSBwdWxsdXAgY29udHJvbHMuCisgKgorICogVGhpcyByb3V0aW5lIG1heSBiZSB1c2VkIGR1cmluZyB0aGUgZ2FkZ2V0IGRyaXZlciBiaW5kKCkgY2FsbCB0byBwcmV2ZW50CisgKiB0aGUgcGVyaXBoZXJhbCBmcm9tIGV2ZXIgYmVpbmcgdmlzaWJsZSB0byB0aGUgVVNCIGhvc3QsIHVubGVzcyBsYXRlcgorICogdXNiX2dhZGdldF9jb25uZWN0KCkgaXMgY2FsbGVkLiAgRm9yIGV4YW1wbGUsIHVzZXIgbW9kZSBjb21wb25lbnRzIG1heQorICogbmVlZCB0byBiZSBhY3RpdmF0ZWQgYmVmb3JlIHRoZSBzeXN0ZW0gY2FuIHRhbGsgdG8gaG9zdHMuCisgKgorICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIGVsc2UgbmVnYXRpdmUgZXJybm8uCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50Cit1c2JfZ2FkZ2V0X2Rpc2Nvbm5lY3QgKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpCit7CisJaWYgKCFnYWRnZXQtPm9wcy0+cHVsbHVwKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJcmV0dXJuIGdhZGdldC0+b3BzLT5wdWxsdXAgKGdhZGdldCwgMCk7Cit9CisKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKioKKyAqIHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAtIGRyaXZlciBmb3IgdXNiICdzbGF2ZScgZGV2aWNlcworICogQGZ1bmN0aW9uOiBTdHJpbmcgZGVzY3JpYmluZyB0aGUgZ2FkZ2V0J3MgZnVuY3Rpb24KKyAqIEBzcGVlZDogSGlnaGVzdCBzcGVlZCB0aGUgZHJpdmVyIGhhbmRsZXMuCisgKiBAYmluZDogSW52b2tlZCB3aGVuIHRoZSBkcml2ZXIgaXMgYm91bmQgdG8gYSBnYWRnZXQsIHVzdWFsbHkKKyAqIAlhZnRlciByZWdpc3RlcmluZyB0aGUgZHJpdmVyLgorICogCUF0IHRoYXQgcG9pbnQsIGVwMCBpcyBmdWxseSBpbml0aWFsaXplZCwgYW5kIGVwX2xpc3QgaG9sZHMKKyAqIAl0aGUgY3VycmVudGx5LWF2YWlsYWJsZSBlbmRwb2ludHMuCisgKiAJQ2FsbGVkIGluIGEgY29udGV4dCB0aGF0IHBlcm1pdHMgc2xlZXBpbmcuCisgKiBAc2V0dXA6IEludm9rZWQgZm9yIGVwMCBjb250cm9sIHJlcXVlc3RzIHRoYXQgYXJlbid0IGhhbmRsZWQgYnkKKyAqIAl0aGUgaGFyZHdhcmUgbGV2ZWwgZHJpdmVyLiBNb3N0IGNhbGxzIG11c3QgYmUgaGFuZGxlZCBieQorICogCXRoZSBnYWRnZXQgZHJpdmVyLCBpbmNsdWRpbmcgZGVzY3JpcHRvciBhbmQgY29uZmlndXJhdGlvbgorICogCW1hbmFnZW1lbnQuICBUaGUgMTYgYml0IG1lbWJlcnMgb2YgdGhlIHNldHVwIGRhdGEgYXJlIGluCisgKiAJY3B1IG9yZGVyLiBDYWxsZWQgaW5faW50ZXJydXB0OyB0aGlzIG1heSBub3Qgc2xlZXAuICBEcml2ZXIKKyAqCXF1ZXVlcyBhIHJlc3BvbnNlIHRvIGVwMCwgb3IgcmV0dXJucyBuZWdhdGl2ZSB0byBzdGFsbC4KKyAqIEBkaXNjb25uZWN0OiBJbnZva2VkIGFmdGVyIGFsbCB0cmFuc2ZlcnMgaGF2ZSBiZWVuIHN0b3BwZWQsCisgKiAJd2hlbiB0aGUgaG9zdCBpcyBkaXNjb25uZWN0ZWQuICBNYXkgYmUgY2FsbGVkIGluX2ludGVycnVwdDsgdGhpcworICogCW1heSBub3Qgc2xlZXAuICBTb21lIGRldmljZXMgY2FuJ3QgZGV0ZWN0IGRpc2Nvbm5lY3QsIHNvIHRoaXMgbWlnaHQKKyAqCW5vdCBiZSBjYWxsZWQgZXhjZXB0IGFzIHBhcnQgb2YgY29udHJvbGxlciBzaHV0ZG93bi4KKyAqIEB1bmJpbmQ6IEludm9rZWQgd2hlbiB0aGUgZHJpdmVyIGlzIHVuYm91bmQgZnJvbSBhIGdhZGdldCwKKyAqIAl1c3VhbGx5IGZyb20gcm1tb2QgKGFmdGVyIGEgZGlzY29ubmVjdCBpcyByZXBvcnRlZCkuCisgKiAJQ2FsbGVkIGluIGEgY29udGV4dCB0aGF0IHBlcm1pdHMgc2xlZXBpbmcuCisgKiBAc3VzcGVuZDogSW52b2tlZCBvbiBVU0Igc3VzcGVuZC4gIE1heSBiZSBjYWxsZWQgaW5faW50ZXJydXB0LgorICogQHJlc3VtZTogSW52b2tlZCBvbiBVU0IgcmVzdW1lLiAgTWF5IGJlIGNhbGxlZCBpbl9pbnRlcnJ1cHQuCisgKiBAZHJpdmVyOiBEcml2ZXIgbW9kZWwgc3RhdGUgZm9yIHRoaXMgZHJpdmVyLgorICoKKyAqIERldmljZXMgYXJlIGRpc2FibGVkIHRpbGwgYSBnYWRnZXQgZHJpdmVyIHN1Y2Nlc3NmdWxseSBiaW5kKClzLCB3aGljaAorICogbWVhbnMgdGhlIGRyaXZlciB3aWxsIGhhbmRsZSBzZXR1cCgpIHJlcXVlc3RzIG5lZWRlZCB0byBlbnVtZXJhdGUgKGFuZAorICogbWVldCAiY2hhcHRlciA5IiByZXF1aXJlbWVudHMpIHRoZW4gZG8gc29tZSB1c2VmdWwgd29yay4KKyAqCisgKiBJZiBnYWRnZXQtPmlzX290ZyBpcyB0cnVlLCB0aGUgZ2FkZ2V0IGRyaXZlciBtdXN0IHByb3ZpZGUgYW4gT1RHCisgKiBkZXNjcmlwdG9yIGR1cmluZyBlbnVtZXJhdGlvbiwgb3IgZWxzZSBmYWlsIHRoZSBiaW5kKCkgY2FsbC4gIEluIHN1Y2gKKyAqIGNhc2VzLCBubyBVU0IgdHJhZmZpYyBtYXkgZmxvdyB1bnRpbCBib3RoIGJpbmQoKSByZXR1cm5zIHdpdGhvdXQKKyAqIGhhdmluZyBjYWxsZWQgdXNiX2dhZGdldF9kaXNjb25uZWN0KCksIGFuZCB0aGUgVVNCIGhvc3Qgc3RhY2sgaGFzCisgKiBpbml0aWFsaXplZC4KKyAqCisgKiBEcml2ZXJzIHVzZSBoYXJkd2FyZS1zcGVjaWZpYyBrbm93bGVkZ2UgdG8gY29uZmlndXJlIHRoZSB1c2IgaGFyZHdhcmUuCisgKiBlbmRwb2ludCBhZGRyZXNzaW5nIGlzIG9ubHkgb25lIG9mIHNldmVyYWwgaGFyZHdhcmUgY2hhcmFjdGVyaXN0aWNzIHRoYXQKKyAqIGFyZSBpbiBkZXNjcmlwdG9ycyB0aGUgZXAwIGltcGxlbWVudGF0aW9uIHJldHVybnMgZnJvbSBzZXR1cCgpIGNhbGxzLgorICoKKyAqIEV4Y2VwdCBmb3IgZXAwIGltcGxlbWVudGF0aW9uLCBtb3N0IGRyaXZlciBjb2RlIHNob3VsZG4ndCBuZWVkIGNoYW5nZSB0bworICogcnVuIG9uIHRvcCBvZiBkaWZmZXJlbnQgdXNiIGNvbnRyb2xsZXJzLiAgSXQnbGwgdXNlIGVuZHBvaW50cyBzZXQgdXAgYnkKKyAqIHRoYXQgZXAwIGltcGxlbWVudGF0aW9uLgorICoKKyAqIFRoZSB1c2IgY29udHJvbGxlciBkcml2ZXIgaGFuZGxlcyBhIGZldyBzdGFuZGFyZCB1c2IgcmVxdWVzdHMuICBUaG9zZQorICogaW5jbHVkZSBzZXRfYWRkcmVzcywgYW5kIGZlYXR1cmUgZmxhZ3MgZm9yIGRldmljZXMsIGludGVyZmFjZXMsIGFuZAorICogZW5kcG9pbnRzICh0aGUgZ2V0X3N0YXR1cywgc2V0X2ZlYXR1cmUsIGFuZCBjbGVhcl9mZWF0dXJlIHJlcXVlc3RzKS4KKyAqCisgKiBBY2NvcmRpbmdseSwgdGhlIGRyaXZlcidzIHNldHVwKCkgY2FsbGJhY2sgbXVzdCBhbHdheXMgaW1wbGVtZW50IGFsbAorICogZ2V0X2Rlc2NyaXB0b3IgcmVxdWVzdHMsIHJldHVybmluZyBhdCBsZWFzdCBhIGRldmljZSBkZXNjcmlwdG9yIGFuZAorICogYSBjb25maWd1cmF0aW9uIGRlc2NyaXB0b3IuICBEcml2ZXJzIG11c3QgbWFrZSBzdXJlIHRoZSBlbmRwb2ludAorICogZGVzY3JpcHRvcnMgbWF0Y2ggYW55IGhhcmR3YXJlIGNvbnN0cmFpbnRzLiBTb21lIGhhcmR3YXJlIGFsc28gY29uc3RyYWlucworICogb3RoZXIgZGVzY3JpcHRvcnMuIChUaGUgcHhhMjUwIGFsbG93cyBvbmx5IGNvbmZpZ3VyYXRpb25zIDEsIDIsIG9yIDMpLgorICoKKyAqIFRoZSBkcml2ZXIncyBzZXR1cCgpIGNhbGxiYWNrIG11c3QgYWxzbyBpbXBsZW1lbnQgc2V0X2NvbmZpZ3VyYXRpb24sCisgKiBhbmQgc2hvdWxkIGFsc28gaW1wbGVtZW50IHNldF9pbnRlcmZhY2UsIGdldF9jb25maWd1cmF0aW9uLCBhbmQKKyAqIGdldF9pbnRlcmZhY2UuICBTZXR0aW5nIGEgY29uZmlndXJhdGlvbiAob3IgaW50ZXJmYWNlKSBpcyB3aGVyZQorICogZW5kcG9pbnRzIHNob3VsZCBiZSBhY3RpdmF0ZWQgb3IgKGNvbmZpZyAwKSBzaHV0IGRvd24uCisgKgorICogKE5vdGUgdGhhdCBvbmx5IHRoZSBkZWZhdWx0IGNvbnRyb2wgZW5kcG9pbnQgaXMgc3VwcG9ydGVkLiAgTmVpdGhlcgorICogaG9zdHMgbm9yIGRldmljZXMgZ2VuZXJhbGx5IHN1cHBvcnQgY29udHJvbCB0cmFmZmljIGV4Y2VwdCB0byBlcDAuKQorICoKKyAqIE1vc3QgZGV2aWNlcyB3aWxsIGlnbm9yZSBVU0Igc3VzcGVuZC9yZXN1bWUgb3BlcmF0aW9ucywgYW5kIHNvIHdpbGwKKyAqIG5vdCBwcm92aWRlIHRob3NlIGNhbGxiYWNrcy4gIEhvd2V2ZXIsIHNvbWUgbWF5IG5lZWQgdG8gY2hhbmdlIG1vZGVzCisgKiB3aGVuIHRoZSBob3N0IGlzIG5vdCBsb25nZXIgZGlyZWN0aW5nIHRob3NlIGFjdGl2aXRpZXMuICBGb3IgZXhhbXBsZSwKKyAqIGxvY2FsIGNvbnRyb2xzIChidXR0b25zLCBkaWFscywgZXRjKSBtYXkgbmVlZCB0byBiZSByZS1lbmFibGVkIHNpbmNlCisgKiB0aGUgKHJlbW90ZSkgaG9zdCBjYW4ndCBkbyB0aGF0IGFueSBsb25nZXI7IG9yIGFuIGVycm9yIHN0YXRlIG1pZ2h0CisgKiBiZSBjbGVhcmVkLCB0byBtYWtlIHRoZSBkZXZpY2UgYmVoYXZlIGlkZW50aWNhbGx5IHdoZXRoZXIgb3Igbm90CisgKiBwb3dlciBpcyBtYWludGFpbmVkLgorICovCitzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgeworCWNoYXIJCQkqZnVuY3Rpb247CisJZW51bSB1c2JfZGV2aWNlX3NwZWVkCXNwZWVkOworCWludAkJCSgqYmluZCkoc3RydWN0IHVzYl9nYWRnZXQgKik7CisJdm9pZAkJCSgqdW5iaW5kKShzdHJ1Y3QgdXNiX2dhZGdldCAqKTsKKwlpbnQJCQkoKnNldHVwKShzdHJ1Y3QgdXNiX2dhZGdldCAqLAorCQkJCQljb25zdCBzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICopOworCXZvaWQJCQkoKmRpc2Nvbm5lY3QpKHN0cnVjdCB1c2JfZ2FkZ2V0ICopOworCXZvaWQJCQkoKnN1c3BlbmQpKHN0cnVjdCB1c2JfZ2FkZ2V0ICopOworCXZvaWQJCQkoKnJlc3VtZSkoc3RydWN0IHVzYl9nYWRnZXQgKik7CisKKwkvLyBGSVhNRSBzdXBwb3J0IHNhZmUgcm1tb2QKKwlzdHJ1Y3QgZGV2aWNlX2RyaXZlcglkcml2ZXI7Cit9OworCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogZHJpdmVyIG1vZHVsZXMgcmVnaXN0ZXIgYW5kIHVucmVnaXN0ZXIsIGFzIHVzdWFsLgorICogdGhlc2UgY2FsbHMgbXVzdCBiZSBtYWRlIGluIGEgY29udGV4dCB0aGF0IGNhbiBzbGVlcC4KKyAqCisgKiB0aGVzZSB3aWxsIHVzdWFsbHkgYmUgaW1wbGVtZW50ZWQgZGlyZWN0bHkgYnkgdGhlIGhhcmR3YXJlLWRlcGVuZGVudAorICogdXNiIGJ1cyBpbnRlcmZhY2UgZHJpdmVyLCB3aGljaCB3aWxsIG9ubHkgc3VwcG9ydCBhIHNpbmdsZSBkcml2ZXIuCisgKi8KKworLyoqCisgKiB1c2JfZ2FkZ2V0X3JlZ2lzdGVyX2RyaXZlciAtIHJlZ2lzdGVyIGEgZ2FkZ2V0IGRyaXZlcgorICogQGRyaXZlcjp0aGUgZHJpdmVyIGJlaW5nIHJlZ2lzdGVyZWQKKyAqCisgKiBDYWxsIHRoaXMgaW4geW91ciBnYWRnZXQgZHJpdmVyJ3MgbW9kdWxlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLAorICogdG8gdGVsbCB0aGUgdW5kZXJseWluZyB1c2IgY29udHJvbGxlciBkcml2ZXIgYWJvdXQgeW91ciBkcml2ZXIuCisgKiBUaGUgZHJpdmVyJ3MgYmluZCgpIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHRvIGJpbmQgaXQgdG8gYQorICogZ2FkZ2V0LiAgVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBpbiBhIGNvbnRleHQgdGhhdCBjYW4gc2xlZXAuCisgKi8KK2ludCB1c2JfZ2FkZ2V0X3JlZ2lzdGVyX2RyaXZlciAoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIpOworCisvKioKKyAqIHVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIgLSB1bnJlZ2lzdGVyIGEgZ2FkZ2V0IGRyaXZlcgorICogQGRyaXZlcjp0aGUgZHJpdmVyIGJlaW5nIHVucmVnaXN0ZXJlZAorICoKKyAqIENhbGwgdGhpcyBpbiB5b3VyIGdhZGdldCBkcml2ZXIncyBtb2R1bGUgY2xlYW51cCBmdW5jdGlvbiwKKyAqIHRvIHRlbGwgdGhlIHVuZGVybHlpbmcgdXNiIGNvbnRyb2xsZXIgdGhhdCB5b3VyIGRyaXZlciBpcworICogZ29pbmcgYXdheS4gIElmIHRoZSBjb250cm9sbGVyIGlzIGNvbm5lY3RlZCB0byBhIFVTQiBob3N0LAorICogaXQgd2lsbCBmaXJzdCBkaXNjb25uZWN0KCkuICBUaGUgZHJpdmVyIGlzIGFsc28gcmVxdWVzdGVkCisgKiB0byB1bmJpbmQoKSBhbmQgY2xlYW4gdXAgYW55IGRldmljZSBzdGF0ZSwgYmVmb3JlIHRoaXMgcHJvY2VkdXJlCisgKiBmaW5hbGx5IHJldHVybnMuCisgKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGluIGEgY29udGV4dCB0aGF0IGNhbiBzbGVlcC4KKyAqLworaW50IHVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIgKHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogdXRpbGl0eSB0byBzaW1wbGlmeSBkZWFsaW5nIHdpdGggc3RyaW5nIGRlc2NyaXB0b3JzICovCisKKy8qKgorICogc3RydWN0IHVzYl9zdHJpbmcgLSB3cmFwcyBhIEMgc3RyaW5nIGFuZCBpdHMgVVNCIGlkCisgKiBAaWQ6dGhlIChub256ZXJvKSBJRCBmb3IgdGhpcyBzdHJpbmcKKyAqIEBzOnRoZSBzdHJpbmcsIGluIFVURi04IGVuY29kaW5nCisgKgorICogSWYgeW91J3JlIHVzaW5nIHVzYl9nYWRnZXRfZ2V0X3N0cmluZygpLCB1c2UgdGhpcyB0byB3cmFwIGEgc3RyaW5nCisgKiB0b2dldGhlciB3aXRoIGl0cyBJRC4KKyAqLworc3RydWN0IHVzYl9zdHJpbmcgeworCXU4CQkJaWQ7CisJY29uc3QgY2hhcgkJKnM7Cit9OworCisvKioKKyAqIHN0cnVjdCB1c2JfZ2FkZ2V0X3N0cmluZ3MgLSBhIHNldCBvZiBVU0Igc3RyaW5ncyBpbiBhIGdpdmVuIGxhbmd1YWdlCisgKiBAbGFuZ3VhZ2U6aWRlbnRpZmllcyB0aGUgc3RyaW5ncycgbGFuZ3VhZ2UgKDB4MDQwOSBmb3IgZW4tdXMpCisgKiBAc3RyaW5nczphcnJheSBvZiBzdHJpbmdzIHdpdGggdGhlaXIgaWRzCisgKgorICogSWYgeW91J3JlIHVzaW5nIHVzYl9nYWRnZXRfZ2V0X3N0cmluZygpLCB1c2UgdGhpcyB0byB3cmFwIGFsbCB0aGUKKyAqIHN0cmluZ3MgZm9yIGEgZ2l2ZW4gbGFuZ3VhZ2UuCisgKi8KK3N0cnVjdCB1c2JfZ2FkZ2V0X3N0cmluZ3MgeworCXUxNgkJCWxhbmd1YWdlOwkvKiAweDA0MDkgZm9yIGVuLXVzICovCisJc3RydWN0IHVzYl9zdHJpbmcJKnN0cmluZ3M7Cit9OworCisvKiBwdXQgZGVzY3JpcHRvciBmb3Igc3RyaW5nIHdpdGggdGhhdCBpZCBpbnRvIGJ1ZiAoYnVmbGVuID49IDI1NikgKi8KK2ludCB1c2JfZ2FkZ2V0X2dldF9zdHJpbmcgKHN0cnVjdCB1c2JfZ2FkZ2V0X3N0cmluZ3MgKnRhYmxlLCBpbnQgaWQsIHU4ICpidWYpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiB1dGlsaXR5IHRvIHNpbXBsaWZ5IG1hbmFnaW5nIGNvbmZpZyBkZXNjcmlwdG9ycyAqLworCisvKiB3cml0ZSB2ZWN0b3Igb2YgZGVzY3JpcHRvcnMgaW50byBidWZmZXIgKi8KK2ludCB1c2JfZGVzY3JpcHRvcl9maWxsYnVmKHZvaWQgKiwgdW5zaWduZWQsCisJCWNvbnN0IHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKiopOworCisvKiBidWlsZCBjb25maWcgZGVzY3JpcHRvciBmcm9tIHNpbmdsZSBkZXNjcmlwdG9yIHZlY3RvciAqLworaW50IHVzYl9nYWRnZXRfY29uZmlnX2J1Zihjb25zdCBzdHJ1Y3QgdXNiX2NvbmZpZ19kZXNjcmlwdG9yICpjb25maWcsCisJdm9pZCAqYnVmLCB1bnNpZ25lZCBidWZsZW4sIGNvbnN0IHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKipkZXNjKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogdXRpbGl0eSB3cmFwcGluZyBhIHNpbXBsZSBlbmRwb2ludCBzZWxlY3Rpb24gcG9saWN5ICovCisKK2V4dGVybiBzdHJ1Y3QgdXNiX2VwICp1c2JfZXBfYXV0b2NvbmZpZyAoc3RydWN0IHVzYl9nYWRnZXQgKiwKKwkJCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqKSBfX2luaXQ7CisKK2V4dGVybiB2b2lkIHVzYl9lcF9hdXRvY29uZmlnX3Jlc2V0IChzdHJ1Y3QgdXNiX2dhZGdldCAqKSBfX2luaXQ7CisKKyNlbmRpZiAgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYJLyogX19MSU5VWF9VU0JfR0FER0VUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiX2dhZGdldGZzLmggYi9pbmNsdWRlL2xpbnV4L3VzYl9nYWRnZXRmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1M2Q2YWUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYl9nYWRnZXRmcy5oCkBAIC0wLDAgKzEsNzUgQEAKKworI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9pb2N0bC5oPgorCisjaW5jbHVkZSA8bGludXgvdXNiX2NoOS5oPgorCisvKgorICogRmlsZXN5c3RlbSBiYXNlZCB1c2VyLW1vZGUgQVBJIHRvIFVTQiBHYWRnZXQgY29udHJvbGxlciBoYXJkd2FyZQorICoKKyAqIEFsbW9zdCBldmVyeXRoaW5nIGNhbiBiZSBkb25lIHdpdGggb25seSByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zLAorICogb24gZW5kcG9pbnQgZmlsZXMgZm91bmQgaW4gb25lIGRpcmVjdG9yeS4gIFRoZXkgYXJlIGNvbmZpZ3VyZWQgYnkKKyAqIHdyaXRpbmcgZGVzY3JpcHRvcnMsIGFuZCB0aGVuIG1heSBiZSB1c2VkIGZvciBub3JtYWwgc3RyZWFtIHN0eWxlCisgKiBpL28gcmVxdWVzdHMuICBXaGVuIGVwMCBpcyBjb25maWd1cmVkLCB0aGUgZGV2aWNlIGNhbiBlbnVtZXJhdGU7CisgKiB3aGVuIGl0J3MgY2xvc2VkLCB0aGUgZGV2aWNlIGRpc2Nvbm5lY3RzIGZyb20gdXNiLgorICoKKyAqIENvbmZpZ3VyYXRpb24gYW5kIGRldmljZSBkZXNjcmlwdG9ycyBnZXQgd3JpdHRlbiB0byAvZGV2L2dhZGdldC8kQ0hJUCwKKyAqIHdoaWNoIG1heSB0aGVuIGJlIHVzZWQgdG8gcmVhZCB1c2JfZ2FkZ2V0ZnNfZXZlbnQgc3RydWN0cy4gIFRoZSBkcml2ZXIKKyAqIG1heSBhY3RpdmF0ZSBlbmRwb2ludHMgYXMgaXQgaGFuZGxlcyBTRVRfQ09ORklHVVJBVElPTiBzZXR1cCBldmVudHMsCisgKiBvciBlYXJsaWVyOyB3cml0aW5nIGVuZHBvaW50IGRlc2NyaXB0b3JzIHRvIC9kZXYvZ2FkZ2V0LyRFTkRQT0lOVAorICogdGhlbiBwZXJmb3JtaW5nIGRhdGEgdHJhbnNmZXJzIGJ5IHJlYWRpbmcgb3Igd3JpdGluZy4KKyAqLworCisvKgorICogRXZlbnRzIGFyZSBkZWxpdmVyZWQgb24gdGhlIGVwMCBmaWxlIGRlc2NyaXB0b3IsIGlmIHRoZSB1c2VyIG1vZGUgZHJpdmVyCisgKiByZWFkcyBmcm9tIHRoaXMgZmlsZSBkZXNjcmlwdG9yIGFmdGVyIHdyaXRpbmcgdGhlIGRlc2NyaXB0b3JzLiAgRG9uJ3QKKyAqIHN0b3AgcG9sbGluZyB0aGlzIGRlc2NyaXB0b3IsIGlmIHlvdSB3cml0ZSB0aGF0IGtpbmQgb2YgZHJpdmVyLgorICovCisKK2VudW0gdXNiX2dhZGdldGZzX2V2ZW50X3R5cGUgeworCUdBREdFVEZTX05PUCA9IDAsCisKKwlHQURHRVRGU19DT05ORUNULAorCUdBREdFVEZTX0RJU0NPTk5FQ1QsCisJR0FER0VURlNfU0VUVVAsCisJR0FER0VURlNfU1VTUEVORCwKKwkvLyBhbmQgbGlrZWx5IG1vcmUgIQorfTsKKworc3RydWN0IHVzYl9nYWRnZXRmc19ldmVudCB7CisJZW51bSB1c2JfZ2FkZ2V0ZnNfZXZlbnRfdHlwZQl0eXBlOworCXVuaW9uIHsKKwkJLy8gTk9QLCBESVNDT05ORUNULCBTVVNQRU5EOiBub3RoaW5nCisJCS8vIC4uLiBzb21lIGhhcmR3YXJlIGNhbid0IHJlcG9ydCBkaXNjb25uZWN0aW9uCisKKwkJLy8gQ09OTkVDVDoganVzdCB0aGUgc3BlZWQKKwkJZW51bSB1c2JfZGV2aWNlX3NwZWVkCXNwZWVkOworCisJCS8vIFNFVFVQOiBwYWNrZXQ7IERBVEEgcGhhc2UgaS9vIHByZWNlZGVzIG5leHQgZXZlbnQKKwkJLy8gKHNldHVwLmJtUmVxdWVzdFR5cGUgJiBVU0JfRElSX0lOKSBmbGFncyBkaXJlY3Rpb24gCisJCS8vIC4uLiBpbmNsdWRlcyBTRVRfQ09ORklHVVJBVElPTiwgU0VUX0lOVEVSRkFDRQorCQlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0CXNldHVwOworCX0gdTsKK307CisKKworLyogZW5kcG9pbnQgaW9jdGxzICovCisKKy8qIElOIHRyYW5zZmVycyBtYXkgYmUgcmVwb3J0ZWQgdG8gdGhlIGdhZGdldCBkcml2ZXIgYXMgY29tcGxldGUKKyAqIAl3aGVuIHRoZSBmaWZvIGlzIGxvYWRlZCwgYmVmb3JlIHRoZSBob3N0IHJlYWRzIHRoZSBkYXRhOworICogT1VUIHRyYW5zZmVycyBtYXkgYmUgcmVwb3J0ZWQgdG8gdGhlIGhvc3QncyAiY2xpZW50IiBkcml2ZXIgYXMKKyAqIAljb21wbGV0ZSB3aGVuIHRoZXkncmUgc2l0dGluZyBpbiB0aGUgRklGTyB1bnJlYWQuCisgKiBUSElTIHJldHVybnMgaG93IG1hbnkgYnl0ZXMgYXJlICJ1bmNsYWltZWQiIGluIHRoZSBlbmRwb2ludCBmaWZvCisgKiAobmVlZGVkIGZvciBwcmVjaXNlIGZhdWx0IGhhbmRsaW5nLCB3aGVuIHRoZSBoYXJkd2FyZSBhbGxvd3MgaXQpCisgKi8KKyNkZWZpbmUJR0FER0VURlNfRklGT19TVEFUVVMJX0lPKCdnJywxKQorCisvKiBkaXNjYXJkcyBhbnkgdW5jbGFpbWVkIGRhdGEgaW4gdGhlIGZpZm8uICovCisjZGVmaW5lCUdBREdFVEZTX0ZJRk9fRkxVU0gJX0lPKCdnJywyKQorCisvKiByZXNldHMgZW5kcG9pbnQgaGFsdCt0b2dnbGU7IHVzZWQgdG8gaW1wbGVtZW50IHNldF9pbnRlcmZhY2UuCisgKiBzb21lIGhhcmR3YXJlIChsaWtlIHB4YTJ4eCkgY2FuJ3Qgc3VwcG9ydCB0aGlzLgorICovCisjZGVmaW5lCUdBREdFVEZTX0NMRUFSX0hBTFQJX0lPKCdnJywzKQorCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiX290Zy5oIGIvaW5jbHVkZS9saW51eC91c2Jfb3RnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY2ODMxNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvdXNiX290Zy5oCkBAIC0wLDAgKzEsMTE4IEBACisvLyBpbmNsdWRlL2xpbnV4L3VzYl9vdGcuaCAKKworLyoKKyAqIFRoZXNlIEFQSXMgbWF5IGJlIHVzZWQgYmV0d2VlbiBVU0IgY29udHJvbGxlcnMuICBVU0IgZGV2aWNlIGRyaXZlcnMKKyAqIChmb3IgZWl0aGVyIGhvc3Qgb3IgcGVyaXBoZXJhbCByb2xlcykgZG9uJ3QgdXNlIHRoZXNlIGNhbGxzOyB0aGV5CisgKiBjb250aW51ZSB0byB1c2UganVzdCB1c2JfZGV2aWNlIGFuZCB1c2JfZ2FkZ2V0LgorICovCisKKworLyogT1RHIGRlZmluZXMgbG90cyBvZiBlbnVtZXJhdGlvbiBzdGF0ZXMgYmVmb3JlIGRldmljZSByZXNldCAqLworZW51bSB1c2Jfb3RnX3N0YXRlIHsKKwlPVEdfU1RBVEVfVU5ERUZJTkVEID0gMCwKKworCS8qIHNpbmdsZS1yb2xlIHBlcmlwaGVyYWwsIGFuZCBkdWFsLXJvbGUgZGVmYXVsdC1iICovCisJT1RHX1NUQVRFX0JfSURMRSwKKwlPVEdfU1RBVEVfQl9TUlBfSU5JVCwKKwlPVEdfU1RBVEVfQl9QRVJJUEhFUkFMLAorCisJLyogZXh0cmEgZHVhbC1yb2xlIGRlZmF1bHQtYiBzdGF0ZXMgKi8KKwlPVEdfU1RBVEVfQl9XQUlUX0FDT04sCisJT1RHX1NUQVRFX0JfSE9TVCwKKworCS8qIGR1YWwtcm9sZSBkZWZhdWx0LWEgKi8KKwlPVEdfU1RBVEVfQV9JRExFLAorCU9UR19TVEFURV9BX1dBSVRfVlJJU0UsCisJT1RHX1NUQVRFX0FfV0FJVF9CQ09OLAorCU9UR19TVEFURV9BX0hPU1QsCisJT1RHX1NUQVRFX0FfU1VTUEVORCwKKwlPVEdfU1RBVEVfQV9QRVJJUEhFUkFMLAorCU9UR19TVEFURV9BX1dBSVRfVkZBTEwsCisJT1RHX1NUQVRFX0FfVkJVU19FUlIsCit9OworCisvKgorICogdGhlIG90ZyBkcml2ZXIgbmVlZHMgdG8gaW50ZXJhY3Qgd2l0aCBib3RoIGRldmljZSBzaWRlIGFuZCBob3N0IHNpZGUKKyAqIHVzYiBjb250cm9sbGVycy4gIGl0IGRlY2lkZXMgd2hpY2ggY29udHJvbGxlciBpcyBhY3RpdmUgYXQgYSBnaXZlbgorICogbW9tZW50LCB1c2luZyB0aGUgdHJhbnNjZWl2ZXIsIElEIHNpZ25hbCwgSE5QIGFuZCBzb21ldGltZXMgc3RhdGljCisgKiBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIChpbmNsdWRpbmcgImJvYXJkIGlzbid0IHdpcmVkIGZvciBvdGciKS4KKyAqLworc3RydWN0IG90Z190cmFuc2NlaXZlciB7CisJc3RydWN0IGRldmljZQkJKmRldjsKKwljb25zdCBjaGFyCQkqbGFiZWw7CisKKwl1OAkJCWRlZmF1bHRfYTsKKwllbnVtIHVzYl9vdGdfc3RhdGUJc3RhdGU7CisKKwlzdHJ1Y3QgdXNiX2J1cwkJKmhvc3Q7CisJc3RydWN0IHVzYl9nYWRnZXQJKmdhZGdldDsKKworCS8qIHRvIHBhc3MgZXh0cmEgcG9ydCBzdGF0dXMgdG8gdGhlIHJvb3QgaHViICovCisJdTE2CQkJcG9ydF9zdGF0dXM7CisJdTE2CQkJcG9ydF9jaGFuZ2U7CisKKwkvKiBiaW5kL3VuYmluZCB0aGUgaG9zdCBjb250cm9sbGVyICovCisJaW50IAkoKnNldF9ob3N0KShzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyICpvdGcsCisJCQkJc3RydWN0IHVzYl9idXMgKmhvc3QpOworCisJLyogYmluZC91bmJpbmQgdGhlIHBlcmlwaGVyYWwgY29udHJvbGxlciAqLworCWludAkoKnNldF9wZXJpcGhlcmFsKShzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyICpvdGcsCisJCQkJc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCk7CisKKwkvKiBlZmZlY3RpdmUgZm9yIEIgZGV2aWNlcywgaWdub3JlZCBmb3IgQS1wZXJpcGhlcmFsICovCisJaW50CSgqc2V0X3Bvd2VyKShzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyICpvdGcsCisJCQkJdW5zaWduZWQgbUEpOworCisJLyogZm9yIEIgZGV2aWNlcyBvbmx5OiAgc3RhcnQgc2Vzc2lvbiB3aXRoIEEtSG9zdCAqLworCWludAkoKnN0YXJ0X3NycCkoc3RydWN0IG90Z190cmFuc2NlaXZlciAqb3RnKTsKKworCS8qIHN0YXJ0IG9yIGNvbnRpbnVlIEhOUCByb2xlIHN3aXRjaCAqLworCWludAkoKnN0YXJ0X2hucCkoc3RydWN0IG90Z190cmFuc2NlaXZlciAqb3RnKTsKKworfTsKKworCisvKiBmb3IgYm9hcmQtc3BlY2lmaWMgaW5pdCBsb2dpYyAqLworZXh0ZXJuIGludCBvdGdfc2V0X3RyYW5zY2VpdmVyKHN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgKik7CisKKworLyogZm9yIHVzYiBob3N0IGFuZCBwZXJpcGhlcmFsIGNvbnRyb2xsZXIgZHJpdmVycyAqLworZXh0ZXJuIHN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgKm90Z19nZXRfdHJhbnNjZWl2ZXIodm9pZCk7CisKK3N0YXRpYyBpbmxpbmUgaW50CitvdGdfc3RhcnRfaG5wKHN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgKm90ZykKK3sKKwlyZXR1cm4gb3RnLT5zdGFydF9obnAob3RnKTsKK30KKworCisvKiBmb3IgSENEcyAqLworc3RhdGljIGlubGluZSBpbnQKK290Z19zZXRfaG9zdChzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyICpvdGcsIHN0cnVjdCB1c2JfYnVzICpob3N0KQoreworCXJldHVybiBvdGctPnNldF9ob3N0KG90ZywgaG9zdCk7Cit9CisKKworLyogZm9yIHVzYiBwZXJpcGhlcmFsIGNvbnRyb2xsZXIgZHJpdmVycyAqLworc3RhdGljIGlubGluZSBpbnQKK290Z19zZXRfcGVyaXBoZXJhbChzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyICpvdGcsIHN0cnVjdCB1c2JfZ2FkZ2V0ICpwZXJpcGgpCit7CisJcmV0dXJuIG90Zy0+c2V0X3BlcmlwaGVyYWwob3RnLCBwZXJpcGgpOworfQorCitzdGF0aWMgaW5saW5lIGludAorb3RnX3NldF9wb3dlcihzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyICpvdGcsIHVuc2lnbmVkIG1BKQoreworCXJldHVybiBvdGctPnNldF9wb3dlcihvdGcsIG1BKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK290Z19zdGFydF9zcnAoc3RydWN0IG90Z190cmFuc2NlaXZlciAqb3RnKQoreworCXJldHVybiBvdGctPnN0YXJ0X3NycChvdGcpOworfQorCisKKy8qIGZvciBPVEcgY29udHJvbGxlciBkcml2ZXJzIChhbmQgbWF5YmUgb3RoZXIgc3R1ZmYpICovCitleHRlcm4gaW50IHVzYl9idXNfc3RhcnRfZW51bShzdHJ1Y3QgdXNiX2J1cyAqYnVzLCB1bnNpZ25lZCBwb3J0X251bSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYl9zbDgxMS5oIGIvaW5jbHVkZS9saW51eC91c2Jfc2w4MTEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjJkMDEyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC91c2Jfc2w4MTEuaApAQCAtMCwwICsxLDI2IEBACisKKy8qCisgKiBib2FyZCBpbml0aWFsaXphdGlvbiBzaG91bGQgcHV0IG9uZSBvZiB0aGVzZSBpbnRvIGRldi0+cGxhdGZvcm1fZGF0YQorICogYW5kIHBsYWNlIHRoZSBzbDgxMWhzIG9udG8gcGxhdGZvcm1fYnVzIG5hbWVkICJzbDgxMS1oY2QiLgorICovCisKK3N0cnVjdCBzbDgxMV9wbGF0Zm9ybV9kYXRhIHsKKwl1bnNpZ25lZAljYW5fd2FrZXVwOjE7CisKKwkvKiBnaXZlbiBwb3J0X3Bvd2VyLCBtc2VjLzIgYWZ0ZXIgcG93ZXIgb24gdGlsbCBwb3dlciBnb29kICovCisJdTgJCXBvdHBnOworCisJLyogbUEvMiBwb3dlciBzdXBwbGllZCBvbiB0aGlzIHBvcnQgKG1heCA9IGRlZmF1bHQgPSAyNTApICovCisJdTgJCXBvd2VyOworCisJLyogc2w4MTEgcmVsaWVzIG9uIGFuIGV4dGVybmFsIHNvdXJjZSBvZiBWQlVTIGN1cnJlbnQgKi8KKwl2b2lkIAkJKCpwb3J0X3Bvd2VyKShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBpc19vbik7CisKKwkvKiBwdWxzZSBzbDgxMSBuUlNUIChwcm9iYWJseSB3aXRoIGEgR1BJTykgKi8KKwl2b2lkIAkJKCpyZXNldCkoc3RydWN0IGRldmljZSAqZGV2KTsKKworCS8vIHNvbWUgYm9hcmRzIG5lZWQgc29tZXRoaW5nIGxpa2UgdGhlc2U6CisgCS8vIGludCAJCSgqY2hlY2tfb3ZlcmN1cnJlbnQpKHN0cnVjdCBkZXZpY2UgKmRldik7CisgCS8vIHZvaWQgCSgqY2xvY2tfZW5hYmxlKShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBpc19vbik7Cit9OworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYmRldmljZV9mcy5oIGIvaW5jbHVkZS9saW51eC91c2JkZXZpY2VfZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjU3YzIyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC91c2JkZXZpY2VfZnMuaApAQCAtMCwwICsxLDE2OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICoJdXNiZGV2aWNlX2ZzLmggIC0tICBVU0IgZGV2aWNlIGZpbGUgc3lzdGVtLgorICoKKyAqCUNvcHlyaWdodCAoQykgMjAwMAorICogICAgICAgICAgVGhvbWFzIFNhaWxlciAoc2FpbGVyQGlmZS5lZS5ldGh6LmNoKQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKglpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICoJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqCShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKglidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICoJTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICoJR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKglZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICoJYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqCUZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqICBIaXN0b3J5OgorICogICAwLjEgIDA0LjAxLjIwMDAgIENyZWF0ZWQKKyAqCisgKiAgJElkOiB1c2JkZXZpY2VfZnMuaCx2IDEuMSAyMDAwLzAxLzA2IDE4OjQwOjQxIHRvbSBFeHAgJAorICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfTElOVVhfVVNCREVWSUNFX0ZTX0gKKyNkZWZpbmUgX0xJTlVYX1VTQkRFVklDRV9GU19ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBVU0JERVZJQ0VfU1VQRVJfTUFHSUMgMHg5ZmEyCisKKy8qIHVzYmRldmZzIGlvY3RsIGNvZGVzICovCisKK3N0cnVjdCB1c2JkZXZmc19jdHJsdHJhbnNmZXIgeworCV9fdTggYlJlcXVlc3RUeXBlOworCV9fdTggYlJlcXVlc3Q7CisJX191MTYgd1ZhbHVlOworCV9fdTE2IHdJbmRleDsKKwlfX3UxNiB3TGVuZ3RoOworCV9fdTMyIHRpbWVvdXQ7ICAvKiBpbiBtaWxsaXNlY29uZHMgKi8KKyAJdm9pZCBfX3VzZXIgKmRhdGE7Cit9OworCitzdHJ1Y3QgdXNiZGV2ZnNfYnVsa3RyYW5zZmVyIHsKKwl1bnNpZ25lZCBpbnQgZXA7CisJdW5zaWduZWQgaW50IGxlbjsKKwl1bnNpZ25lZCBpbnQgdGltZW91dDsgLyogaW4gbWlsbGlzZWNvbmRzICovCisJdm9pZCBfX3VzZXIgKmRhdGE7Cit9OworCitzdHJ1Y3QgdXNiZGV2ZnNfc2V0aW50ZXJmYWNlIHsKKwl1bnNpZ25lZCBpbnQgaW50ZXJmYWNlOworCXVuc2lnbmVkIGludCBhbHRzZXR0aW5nOworfTsKKworc3RydWN0IHVzYmRldmZzX2Rpc2Nvbm5lY3RzaWduYWwgeworCXVuc2lnbmVkIGludCBzaWducjsKKwl2b2lkIF9fdXNlciAqY29udGV4dDsKK307CisKKyNkZWZpbmUgVVNCREVWRlNfTUFYRFJJVkVSTkFNRSAyNTUKKworc3RydWN0IHVzYmRldmZzX2dldGRyaXZlciB7CisJdW5zaWduZWQgaW50IGludGVyZmFjZTsKKwljaGFyIGRyaXZlcltVU0JERVZGU19NQVhEUklWRVJOQU1FICsgMV07Cit9OworCitzdHJ1Y3QgdXNiZGV2ZnNfY29ubmVjdGluZm8geworCXVuc2lnbmVkIGludCBkZXZudW07CisJdW5zaWduZWQgY2hhciBzbG93OworfTsKKworI2RlZmluZSBVU0JERVZGU19VUkJfU0hPUlRfTk9UX09LICAgICAgICAgIDEKKyNkZWZpbmUgVVNCREVWRlNfVVJCX0lTT19BU0FQICAgICAgICAgICAgICAyCisKKyNkZWZpbmUgVVNCREVWRlNfVVJCX1RZUEVfSVNPCQkgICAwCisjZGVmaW5lIFVTQkRFVkZTX1VSQl9UWVBFX0lOVEVSUlVQVAkgICAxCisjZGVmaW5lIFVTQkRFVkZTX1VSQl9UWVBFX0NPTlRST0wJICAgMgorI2RlZmluZSBVU0JERVZGU19VUkJfVFlQRV9CVUxLCQkgICAzCisKK3N0cnVjdCB1c2JkZXZmc19pc29fcGFja2V0X2Rlc2MgeworCXVuc2lnbmVkIGludCBsZW5ndGg7CisJdW5zaWduZWQgaW50IGFjdHVhbF9sZW5ndGg7CisJdW5zaWduZWQgaW50IHN0YXR1czsKK307CisKK3N0cnVjdCB1c2JkZXZmc191cmIgeworCXVuc2lnbmVkIGNoYXIgdHlwZTsKKwl1bnNpZ25lZCBjaGFyIGVuZHBvaW50OworCWludCBzdGF0dXM7CisJdW5zaWduZWQgaW50IGZsYWdzOworCXZvaWQgX191c2VyICpidWZmZXI7CisJaW50IGJ1ZmZlcl9sZW5ndGg7CisJaW50IGFjdHVhbF9sZW5ndGg7CisJaW50IHN0YXJ0X2ZyYW1lOworCWludCBudW1iZXJfb2ZfcGFja2V0czsKKwlpbnQgZXJyb3JfY291bnQ7CisJdW5zaWduZWQgaW50IHNpZ25yOyAgLyogc2lnbmFsIHRvIGJlIHNlbnQgb24gZXJyb3IsIC0xIGlmIG5vbmUgc2hvdWxkIGJlIHNlbnQgKi8KKwl2b2lkICp1c2VyY29udGV4dDsKKwlzdHJ1Y3QgdXNiZGV2ZnNfaXNvX3BhY2tldF9kZXNjIGlzb19mcmFtZV9kZXNjWzBdOworfTsKKworLyogaW9jdGxzIGZvciB0YWxraW5nIGRpcmVjdGx5IHRvIGRyaXZlcnMgKi8KK3N0cnVjdCB1c2JkZXZmc19pb2N0bCB7CisJaW50CWlmbm87CQkvKiBpbnRlcmZhY2UgMC4uTiA7IG5lZ2F0aXZlIG51bWJlcnMgcmVzZXJ2ZWQgKi8KKwlpbnQJaW9jdGxfY29kZTsJLyogTVVTVCBlbmNvZGUgc2l6ZSArIGRpcmVjdGlvbiBvZiBkYXRhIHNvIHRoZQorCQkJCSAqIG1hY3JvcyBpbiA8YXNtL2lvY3RsLmg+IGdpdmUgY29ycmVjdCB2YWx1ZXMgKi8KKwl2b2lkIF9fdXNlciAqZGF0YTsJLyogcGFyYW0gYnVmZmVyIChpbiwgb3Igb3V0KSAqLworfTsKKworLyogWW91IGNhbiBkbyBtb3N0IHRoaW5ncyB3aXRoIGh1YnMganVzdCB0aHJvdWdoIGNvbnRyb2wgbWVzc2FnZXMsCisgKiBleGNlcHQgZmluZCBvdXQgd2hhdCBkZXZpY2UgY29ubmVjdHMgdG8gd2hhdCBwb3J0LiAqLworc3RydWN0IHVzYmRldmZzX2h1Yl9wb3J0aW5mbyB7CisJY2hhciBucG9ydHM7CQkvKiBudW1iZXIgb2YgZG93bnN0cmVhbSBwb3J0cyBpbiB0aGlzIGh1YiAqLworCWNoYXIgcG9ydCBbMTI3XTsJLyogZS5nLiBwb3J0IDMgY29ubmVjdHMgdG8gZGV2aWNlIDI3ICovCit9OworCisjaWZkZWYgQ09ORklHX0NPTVBBVAorc3RydWN0IHVzYmRldmZzX3VyYjMyIHsKKwl1bnNpZ25lZCBjaGFyIHR5cGU7CisJdW5zaWduZWQgY2hhciBlbmRwb2ludDsKKwljb21wYXRfaW50X3Qgc3RhdHVzOworCWNvbXBhdF91aW50X3QgZmxhZ3M7CisJY29tcGF0X2NhZGRyX3QgYnVmZmVyOworCWNvbXBhdF9pbnRfdCBidWZmZXJfbGVuZ3RoOworCWNvbXBhdF9pbnRfdCBhY3R1YWxfbGVuZ3RoOworCWNvbXBhdF9pbnRfdCBzdGFydF9mcmFtZTsKKwljb21wYXRfaW50X3QgbnVtYmVyX29mX3BhY2tldHM7CisJY29tcGF0X2ludF90IGVycm9yX2NvdW50OworCWNvbXBhdF91aW50X3Qgc2lnbnI7CisJY29tcGF0X2NhZGRyX3QgdXNlcmNvbnRleHQ7IC8qIHVudXNlZCAqLworCXN0cnVjdCB1c2JkZXZmc19pc29fcGFja2V0X2Rlc2MgaXNvX2ZyYW1lX2Rlc2NbMF07Cit9OworI2VuZGlmCisKKyNkZWZpbmUgVVNCREVWRlNfQ09OVFJPTCAgICAgICAgICAgX0lPV1IoJ1UnLCAwLCBzdHJ1Y3QgdXNiZGV2ZnNfY3RybHRyYW5zZmVyKQorI2RlZmluZSBVU0JERVZGU19CVUxLICAgICAgICAgICAgICBfSU9XUignVScsIDIsIHN0cnVjdCB1c2JkZXZmc19idWxrdHJhbnNmZXIpCisjZGVmaW5lIFVTQkRFVkZTX1JFU0VURVAgICAgICAgICAgIF9JT1IoJ1UnLCAzLCB1bnNpZ25lZCBpbnQpCisjZGVmaW5lIFVTQkRFVkZTX1NFVElOVEVSRkFDRSAgICAgIF9JT1IoJ1UnLCA0LCBzdHJ1Y3QgdXNiZGV2ZnNfc2V0aW50ZXJmYWNlKQorI2RlZmluZSBVU0JERVZGU19TRVRDT05GSUdVUkFUSU9OICBfSU9SKCdVJywgNSwgdW5zaWduZWQgaW50KQorI2RlZmluZSBVU0JERVZGU19HRVREUklWRVIgICAgICAgICBfSU9XKCdVJywgOCwgc3RydWN0IHVzYmRldmZzX2dldGRyaXZlcikKKyNkZWZpbmUgVVNCREVWRlNfU1VCTUlUVVJCICAgICAgICAgX0lPUignVScsIDEwLCBzdHJ1Y3QgdXNiZGV2ZnNfdXJiKQorI2RlZmluZSBVU0JERVZGU19TVUJNSVRVUkIzMiAgICAgICBfSU9SKCdVJywgMTAsIHN0cnVjdCB1c2JkZXZmc191cmIzMikKKyNkZWZpbmUgVVNCREVWRlNfRElTQ0FSRFVSQiAgICAgICAgX0lPKCdVJywgMTEpCisjZGVmaW5lIFVTQkRFVkZTX1JFQVBVUkIgICAgICAgICAgIF9JT1coJ1UnLCAxMiwgdm9pZCAqKQorI2RlZmluZSBVU0JERVZGU19SRUFQVVJCMzIgICAgICAgICBfSU9XKCdVJywgMTIsIHUzMikKKyNkZWZpbmUgVVNCREVWRlNfUkVBUFVSQk5ERUxBWSAgICAgX0lPVygnVScsIDEzLCB2b2lkICopCisjZGVmaW5lIFVTQkRFVkZTX1JFQVBVUkJOREVMQVkzMiAgIF9JT1coJ1UnLCAxMywgdTMyKQorI2RlZmluZSBVU0JERVZGU19ESVNDU0lHTkFMICAgICAgICBfSU9SKCdVJywgMTQsIHN0cnVjdCB1c2JkZXZmc19kaXNjb25uZWN0c2lnbmFsKQorI2RlZmluZSBVU0JERVZGU19DTEFJTUlOVEVSRkFDRSAgICBfSU9SKCdVJywgMTUsIHVuc2lnbmVkIGludCkKKyNkZWZpbmUgVVNCREVWRlNfUkVMRUFTRUlOVEVSRkFDRSAgX0lPUignVScsIDE2LCB1bnNpZ25lZCBpbnQpCisjZGVmaW5lIFVTQkRFVkZTX0NPTk5FQ1RJTkZPICAgICAgIF9JT1coJ1UnLCAxNywgc3RydWN0IHVzYmRldmZzX2Nvbm5lY3RpbmZvKQorI2RlZmluZSBVU0JERVZGU19JT0NUTCAgICAgICAgICAgICBfSU9XUignVScsIDE4LCBzdHJ1Y3QgdXNiZGV2ZnNfaW9jdGwpCisjZGVmaW5lIFVTQkRFVkZTX0hVQl9QT1JUSU5GTyAgICAgIF9JT1IoJ1UnLCAxOSwgc3RydWN0IHVzYmRldmZzX2h1Yl9wb3J0aW5mbykKKyNkZWZpbmUgVVNCREVWRlNfUkVTRVQgICAgICAgICAgICAgX0lPKCdVJywgMjApCisjZGVmaW5lIFVTQkRFVkZTX0NMRUFSX0hBTFQgICAgICAgIF9JT1IoJ1UnLCAyMSwgdW5zaWduZWQgaW50KQorI2RlZmluZSBVU0JERVZGU19ESVNDT05ORUNUICAgICAgICBfSU8oJ1UnLCAyMikKKyNkZWZpbmUgVVNCREVWRlNfQ09OTkVDVCAgICAgICAgICAgX0lPKCdVJywgMjMpCisjZW5kaWYgLyogX0xJTlVYX1VTQkRFVklDRV9GU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzZXIuaCBiL2luY2x1ZGUvbGludXgvdXNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4ZGFmODQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3VzZXIuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtL3VzZXIuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXRpbWUuaCBiL2luY2x1ZGUvbGludXgvdXRpbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmJmMjdiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC91dGltZS5oCkBAIC0wLDAgKzEsOSBAQAorI2lmbmRlZiBfTElOVVhfVVRJTUVfSAorI2RlZmluZSBfTElOVVhfVVRJTUVfSAorCitzdHJ1Y3QgdXRpbWJ1ZiB7CisJdGltZV90IGFjdGltZTsKKwl0aW1lX3QgbW9kdGltZTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91dHMuaCBiL2luY2x1ZGUvbGludXgvdXRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNlYjFlZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvdXRzLmgKQEAgLTAsMCArMSwxOSBAQAorI2lmbmRlZiBfTElOVVhfVVRTX0gKKyNkZWZpbmUgX0xJTlVYX1VUU19ICisKKy8qCisgKiBEZWZpbmVzIGZvciB3aGF0IHVuYW1lKCkgc2hvdWxkIHJldHVybiAKKyAqLworI2lmbmRlZiBVVFNfU1lTTkFNRQorI2RlZmluZSBVVFNfU1lTTkFNRSAiTGludXgiCisjZW5kaWYKKworI2lmbmRlZiBVVFNfTk9ERU5BTUUKKyNkZWZpbmUgVVRTX05PREVOQU1FICIobm9uZSkiCS8qIHNldCBieSBzZXRob3N0bmFtZSgpICovCisjZW5kaWYKKworI2lmbmRlZiBVVFNfRE9NQUlOTkFNRQorI2RlZmluZSBVVFNfRE9NQUlOTkFNRSAiKG5vbmUpIgkvKiBzZXQgYnkgc2V0ZG9tYWlubmFtZSgpICovCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3V0c25hbWUuaCBiL2luY2x1ZGUvbGludXgvdXRzbmFtZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzZTFkYTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3V0c25hbWUuaApAQCAtMCwwICsxLDM2IEBACisjaWZuZGVmIF9MSU5VWF9VVFNOQU1FX0gKKyNkZWZpbmUgX0xJTlVYX1VUU05BTUVfSAorCisjZGVmaW5lIF9fT0xEX1VUU19MRU4gOAorCitzdHJ1Y3Qgb2xkb2xkX3V0c25hbWUgeworCWNoYXIgc3lzbmFtZVs5XTsKKwljaGFyIG5vZGVuYW1lWzldOworCWNoYXIgcmVsZWFzZVs5XTsKKwljaGFyIHZlcnNpb25bOV07CisJY2hhciBtYWNoaW5lWzldOworfTsKKworI2RlZmluZSBfX05FV19VVFNfTEVOIDY0CisKK3N0cnVjdCBvbGRfdXRzbmFtZSB7CisJY2hhciBzeXNuYW1lWzY1XTsKKwljaGFyIG5vZGVuYW1lWzY1XTsKKwljaGFyIHJlbGVhc2VbNjVdOworCWNoYXIgdmVyc2lvbls2NV07CisJY2hhciBtYWNoaW5lWzY1XTsKK307CisKK3N0cnVjdCBuZXdfdXRzbmFtZSB7CisJY2hhciBzeXNuYW1lWzY1XTsKKwljaGFyIG5vZGVuYW1lWzY1XTsKKwljaGFyIHJlbGVhc2VbNjVdOworCWNoYXIgdmVyc2lvbls2NV07CisJY2hhciBtYWNoaW5lWzY1XTsKKwljaGFyIGRvbWFpbm5hbWVbNjVdOworfTsKKworZXh0ZXJuIHN0cnVjdCBuZXdfdXRzbmFtZSBzeXN0ZW1fdXRzbmFtZTsKKworZXh0ZXJuIHN0cnVjdCByd19zZW1hcGhvcmUgdXRzX3NlbTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92ZXJtYWdpYy5oIGIvaW5jbHVkZS9saW51eC92ZXJtYWdpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhZGM1MzUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3Zlcm1hZ2ljLmgKQEAgLTAsMCArMSwyMyBAQAorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworLyogU2ltcGx5IHNhbml0eSB2ZXJzaW9uIHN0YW1wIGZvciBtb2R1bGVzLiAqLworI2lmZGVmIENPTkZJR19TTVAKKyNkZWZpbmUgTU9EVUxFX1ZFUk1BR0lDX1NNUCAiU01QICIKKyNlbHNlCisjZGVmaW5lIE1PRFVMRV9WRVJNQUdJQ19TTVAgIiIKKyNlbmRpZgorI2lmZGVmIENPTkZJR19QUkVFTVBUCisjZGVmaW5lIE1PRFVMRV9WRVJNQUdJQ19QUkVFTVBUICJwcmVlbXB0ICIKKyNlbHNlCisjZGVmaW5lIE1PRFVMRV9WRVJNQUdJQ19QUkVFTVBUICIiCisjZW5kaWYKKyNpZm5kZWYgTU9EVUxFX0FSQ0hfVkVSTUFHSUMKKyNkZWZpbmUgTU9EVUxFX0FSQ0hfVkVSTUFHSUMgIiIKKyNlbmRpZgorCisjZGVmaW5lIFZFUk1BR0lDX1NUUklORyAJCQkJCQlcCisJVVRTX1JFTEVBU0UgIiAiCQkJCQkJCVwKKwlNT0RVTEVfVkVSTUFHSUNfU01QIE1PRFVMRV9WRVJNQUdJQ19QUkVFTVBUIAkJCVwKKwlNT0RVTEVfQVJDSF9WRVJNQUdJQyAJCQkJCQlcCisJImdjYy0iIF9fc3RyaW5naWZ5KF9fR05VQ19fKSAiLiIgX19zdHJpbmdpZnkoX19HTlVDX01JTk9SX18pCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Zmcy5oIGIvaW5jbHVkZS9saW51eC92ZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzAxZDA1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC92ZnMuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX0xJTlVYX1ZGU19ICisjZGVmaW5lIF9MSU5VWF9WRlNfSAorCisjaW5jbHVkZSA8bGludXgvc3RhdGZzLmg+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92aWEuaCBiL2luY2x1ZGUvbGludXgvdmlhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZhZTNiYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvdmlhLmgKQEAgLTAsMCArMSwyMiBAQAorLyogTWlzY2VsbGFuZW91cyBkZWZpbml0aW9ucyBmb3IgVklBIGNoaXBzZXRzCisgICBDdXJyZW50bHkgdXNlZCBvbmx5IGJ5IGRyaXZlcnMvcGFycG9ydC9wYXJwb3J0X3BjLmMgKi8KKworLyogVmFsdWVzIGZvciBTdXBlcklPIGZ1bmN0aW9uIHNlbGVjdCBjb25maWd1cmF0aW9uIHJlZ2lzdGVyICovCisjZGVmaW5lIFZJQV9GVU5DVElPTl9QQVJQT1JUX1NQUCAgICAgMHgwMAorI2RlZmluZSBWSUFfRlVOQ1RJT05fUEFSUE9SVF9FQ1AgICAgIDB4MDEKKyNkZWZpbmUgVklBX0ZVTkNUSU9OX1BBUlBPUlRfRVBQICAgICAweDAyCisjZGVmaW5lIFZJQV9GVU5DVElPTl9QQVJQT1JUX0RJU0FCTEUgMHgwMworI2RlZmluZSBWSUFfRlVOQ1RJT05fUFJPQkUgICAgICAgICAgIDB4RkYgLyogU3BlY2lhbCBtYWdpYyB2YWx1ZSB0byBiZSB1c2VkIGluIGNvZGUsIG5vdCB0byBiZSB3cml0dGVuIGludG8gY2hpcCAqLworCisvKiBCaXRzIGZvciBwYXJhbGxlbCBwb3J0IG1vZGUgY29uZmlndXJhdGlvbiByZWdpc3RlciAqLworI2RlZmluZSBWSUFfUEFSUE9SVF9FQ1BFUFAgMFgyMAorI2RlZmluZSBWSUFfUEFSUE9SVF9CSURJUiAgMHg4MAorCisvKiBWSUEgY29uZmlndXJhdGlvbiByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVklBX0NPTkZJR19JTkRFWCAweDNGMAorI2RlZmluZSBWSUFfQ09ORklHX0RBVEEgIDB4M0YxCisKKy8qIE1hc2sgZm9yIHBhcmFsbGVsIHBvcnQgSVJRIGJpdHMgKGluIElTQSBQblAgSVJRIHJvdXRpbmcgcmVnaXN0ZXIgMSkgKi8KKyNkZWZpbmUgVklBX0lSUUNPTlRST0xfUEFSQUxMRUwgMHhGMAorLyogTWFzayBmb3IgcGFyYWxsZWwgcG9ydCBETUEgYml0cyAoaW4gSVNBIFBuUCBETUEgcm91dGluZyByZWdpc3RlcikgKi8KKyNkZWZpbmUgVklBX0RNQUNPTlRST0xfUEFSQUxMRUwgMHgwQwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92aWRlb19kZWNvZGVyLmggYi9pbmNsdWRlL2xpbnV4L3ZpZGVvX2RlY29kZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTllNDhiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC92aWRlb19kZWNvZGVyLmgKQEAgLTAsMCArMSw0NCBAQAorI2lmbmRlZiBfTElOVVhfVklERU9fREVDT0RFUl9ICisjZGVmaW5lIF9MSU5VWF9WSURFT19ERUNPREVSX0gKKworc3RydWN0IHZpZGVvX2RlY29kZXJfY2FwYWJpbGl0eSB7IC8qIHRoaXMgbmFtZSBpcyB0b28gbG9uZyAqLworCV9fdTMyCWZsYWdzOworI2RlZmluZQlWSURFT19ERUNPREVSX1BBTAkxCS8qIGNhbiBkZWNvZGUgUEFMIHNpZ25hbCAqLworI2RlZmluZQlWSURFT19ERUNPREVSX05UU0MJMgkvKiBjYW4gZGVjb2RlIE5UU0MgKi8KKyNkZWZpbmUJVklERU9fREVDT0RFUl9TRUNBTQk0CS8qIGNhbiBkZWNvZGUgU0VDQU0gKi8KKyNkZWZpbmUJVklERU9fREVDT0RFUl9BVVRPCTgJLyogY2FuIGF1dG9zZW5zZSBub3JtICovCisjZGVmaW5lCVZJREVPX0RFQ09ERVJfQ0NJUgkxNgkvKiBDQ0lSLTYwMSBwaXhlbCByYXRlICg3MjAgcGl4ZWxzIHBlciBsaW5lKSBpbnN0ZWFkIG9mIHNxdWFyZSBwaXhlbCByYXRlICovCisJaW50CWlucHV0czsJCQkvKiBudW1iZXIgb2YgaW5wdXRzICovCisJaW50CW91dHB1dHM7CQkvKiBudW1iZXIgb2Ygb3V0cHV0cyAqLworfTsKKworLyoKK0RFQ09ERVJfR0VUX1NUQVRVUyByZXR1cm5zIHRoZSBmb2xsb3dpbmcgZmxhZ3MuICBUaGUgb25seSBvbmUgeW91IG5lZWQgaXMKK0RFQ09ERVJfU1RBVFVTX0dPT0QsIHRoZSBvdGhlcnMgYXJlIGp1c3QgbmljZSB0aGluZ3MgdG8ga25vdy4KKyovCisjZGVmaW5lCURFQ09ERVJfU1RBVFVTX0dPT0QJMQkvKiByZWNlaXZpbmcgYWNjZXB0YWJsZSBpbnB1dCAqLworI2RlZmluZQlERUNPREVSX1NUQVRVU19DT0xPUgkyCS8qIHJlY2VpdmluZyBjb2xvciBpbmZvcm1hdGlvbiAqLworI2RlZmluZQlERUNPREVSX1NUQVRVU19QQUwJNAkvKiBhdXRvIGRldGVjdGVkICovCisjZGVmaW5lCURFQ09ERVJfU1RBVFVTX05UU0MJOAkvKiBhdXRvIGRldGVjdGVkICovCisjZGVmaW5lCURFQ09ERVJfU1RBVFVTX1NFQ0FNCTE2CS8qIGF1dG8gZGV0ZWN0ZWQgKi8KKworc3RydWN0IHZpZGVvX2RlY29kZXJfaW5pdCB7CisJdW5zaWduZWQgY2hhciBsZW47CisJY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YTsKK307CisKKyNkZWZpbmUJREVDT0RFUl9HRVRfQ0FQQUJJTElUSUVTIF9JT1IoJ2QnLCAxLCBzdHJ1Y3QgdmlkZW9fZGVjb2Rlcl9jYXBhYmlsaXR5KQorI2RlZmluZQlERUNPREVSX0dFVF9TVEFUVVMgICAgCV9JT1IoJ2QnLCAyLCBpbnQpCisjZGVmaW5lCURFQ09ERVJfU0VUX05PUk0JX0lPVygnZCcsIDMsIGludCkKKyNkZWZpbmUJREVDT0RFUl9TRVRfSU5QVVQJX0lPVygnZCcsIDQsIGludCkJLyogMCA8PSBpbnB1dCA8ICNpbnB1dHMgKi8KKyNkZWZpbmUJREVDT0RFUl9TRVRfT1VUUFVUCV9JT1coJ2QnLCA1LCBpbnQpCS8qIDAgPD0gb3V0cHV0IDwgI291dHB1dHMgKi8KKyNkZWZpbmUJREVDT0RFUl9FTkFCTEVfT1VUUFVUCV9JT1coJ2QnLCA2LCBpbnQpCS8qIGJvb2xlYW4gb3V0cHV0IGVuYWJsZSBjb250cm9sICovCisjZGVmaW5lCURFQ09ERVJfU0VUX1BJQ1RVUkUgICAJX0lPVygnZCcsIDcsIHN0cnVjdCB2aWRlb19waWN0dXJlKQorI2RlZmluZQlERUNPREVSX1NFVF9HUElPCV9JT1coJ2QnLCA4LCBpbnQpCS8qIHN3aXRjaCBnZW5lcmFsIHB1cnBvc2UgcGluICovCisjZGVmaW5lCURFQ09ERVJfSU5JVAkJX0lPVygnZCcsIDksIHN0cnVjdCB2aWRlb19kZWNvZGVyX2luaXQpCS8qIGluaXQgaW50ZXJuYWwgcmVnaXN0ZXJzIGF0IG9uY2UgKi8KKyNkZWZpbmUJREVDT0RFUl9TRVRfVkJJX0JZUEFTUwlfSU9XKCdkJywgMTAsIGludCkJLyogc3dpdGNoIHZiaSBieXBhc3MgKi8KKworI2RlZmluZQlERUNPREVSX0RVTVAJCV9JTygnZCcsIDE5MikJCS8qIGRlYnVnIGhvb2sgKi8KKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlkZW9fZW5jb2Rlci5oIGIvaW5jbHVkZS9saW51eC92aWRlb19lbmNvZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGIwZTY5MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvdmlkZW9fZW5jb2Rlci5oCkBAIC0wLDAgKzEsMjEgQEAKKyNpZm5kZWYgX0xJTlVYX1ZJREVPX0VOQ09ERVJfSAorI2RlZmluZSBfTElOVVhfVklERU9fRU5DT0RFUl9ICisKK3N0cnVjdCB2aWRlb19lbmNvZGVyX2NhcGFiaWxpdHkgeyAvKiB0aGlzIG5hbWUgaXMgdG9vIGxvbmcgKi8KKwlfX3UzMglmbGFnczsKKyNkZWZpbmUJVklERU9fRU5DT0RFUl9QQUwJMQkvKiBjYW4gZW5jb2RlIFBBTCBzaWduYWwgKi8KKyNkZWZpbmUJVklERU9fRU5DT0RFUl9OVFNDCTIJLyogY2FuIGVuY29kZSBOVFNDICovCisjZGVmaW5lCVZJREVPX0VOQ09ERVJfU0VDQU0JNAkvKiBjYW4gZW5jb2RlIFNFQ0FNICovCisjZGVmaW5lCVZJREVPX0VOQ09ERVJfQ0NJUgkxNgkvKiBDQ0lSLTYwMSBwaXhlbCByYXRlICg3MjAgcGl4ZWxzIHBlciBsaW5lKSBpbnN0ZWFkIG9mIHNxdWFyZSBwaXhlbCByYXRlICovCisJaW50CWlucHV0czsJCQkvKiBudW1iZXIgb2YgaW5wdXRzICovCisJaW50CW91dHB1dHM7CQkvKiBudW1iZXIgb2Ygb3V0cHV0cyAqLworfTsKKworI2RlZmluZQlFTkNPREVSX0dFVF9DQVBBQklMSVRJRVMgX0lPUignZScsIDEsIHN0cnVjdCB2aWRlb19lbmNvZGVyX2NhcGFiaWxpdHkpCisjZGVmaW5lCUVOQ09ERVJfU0VUX05PUk0JX0lPVygnZScsIDIsIGludCkKKyNkZWZpbmUJRU5DT0RFUl9TRVRfSU5QVVQJX0lPVygnZScsIDMsIGludCkJLyogMCA8PSBpbnB1dCA8ICNpbnB1dHMgKi8KKyNkZWZpbmUJRU5DT0RFUl9TRVRfT1VUUFVUCV9JT1coJ2UnLCA0LCBpbnQpCS8qIDAgPD0gb3V0cHV0IDwgI291dHB1dHMgKi8KKyNkZWZpbmUJRU5DT0RFUl9FTkFCTEVfT1VUUFVUCV9JT1coJ2UnLCA1LCBpbnQpCS8qIGJvb2xlYW4gb3V0cHV0IGVuYWJsZSBjb250cm9sICovCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2LmggYi9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ2ZmJkZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvdmlkZW9kZXYuaApAQCAtMCwwICsxLDQ0MyBAQAorI2lmbmRlZiBfX0xJTlVYX1ZJREVPREVWX0gKKyNkZWZpbmUgX19MSU5VWF9WSURFT0RFVl9ICisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorCisjZGVmaW5lIEhBVkVfVjRMMiAxCisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKworc3RydWN0IHZpZGVvX2RldmljZQoreworCS8qIGRldmljZSBpbmZvICovCisJc3RydWN0IGRldmljZSAqZGV2OworCWNoYXIgbmFtZVszMl07CisJaW50IHR5cGU7ICAgICAgIC8qIHY0bDEgKi8KKwlpbnQgdHlwZTI7ICAgICAgLyogdjRsMiAqLworCWludCBoYXJkd2FyZTsKKwlpbnQgbWlub3I7CisKKwkvKiBkZXZpY2Ugb3BzICsgY2FsbGJhY2tzICovCisJc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZm9wczsKKwl2b2lkICgqcmVsZWFzZSkoc3RydWN0IHZpZGVvX2RldmljZSAqdmZkKTsKKworCisjaWYgMSAvKiB0byBiZSByZW1vdmVkIGluIDIuNy54ICovCisJLyogb2Jzb2xldGUgLS0gZm9wcy0+b3duZXIgaXMgdXNlZCBpbnN0ZWFkICovCisJc3RydWN0IG1vZHVsZSAqb3duZXI7CisJLyogZGV2LT5kcml2ZXJfZGF0YSB3aWxsIGJlIHVzZWQgaW5zdGVhZCBzb21lIGRheS4KKwkgKiBVc2UgdGhlIHZpZGVvX3tnZXR8c2V0fV9kcnZkYXRhKCkgaGVscGVyIGZ1bmN0aW9ucywKKwkgKiBzbyB0aGUgc3dpdGNoIG92ZXIgd2lsbCBiZSB0cmFuc3BhcmVudCBmb3IgeW91LgorCSAqIE9yIHVzZSB7cGNpfHVzYn1fe2dldHxzZXR9X2RydmRhdGEoKSBkaXJlY3RseS4gKi8KKwl2b2lkICpwcml2OworI2VuZGlmCisKKwkvKiBmb3IgdmlkZW9kZXYuYyBpbnRlbmFsIHVzYWdlIC0tIHBsZWFzZSBkb24ndCB0b3VjaCAqLworCWludCB1c2VyczsgICAgICAgICAgICAgICAgICAgICAvKiB2aWRlb19leGNsdXNpdmVfe29wZW58Y2xvc2V9IC4uLiAqLworCXN0cnVjdCBzZW1hcGhvcmUgbG9jazsgICAgICAgICAvKiAuLi4gaGVscGVyIGZ1bmN0aW9uIHVzZXMgdGhlc2UgICAqLworCWNoYXIgZGV2ZnNfbmFtZVs2NF07ICAgICAgICAgICAvKiBkZXZmcyAqLworCXN0cnVjdCBjbGFzc19kZXZpY2UgY2xhc3NfZGV2OyAvKiBzeXNmcyAqLworfTsKKworI2RlZmluZSBWSURFT19NQUpPUgk4MQorCisjZGVmaW5lIFZGTF9UWVBFX0dSQUJCRVIJMAorI2RlZmluZSBWRkxfVFlQRV9WQkkJCTEKKyNkZWZpbmUgVkZMX1RZUEVfUkFESU8JCTIKKyNkZWZpbmUgVkZMX1RZUEVfVlRYCQkzCisKK2V4dGVybiBpbnQgdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCB2aWRlb19kZXZpY2UgKiwgaW50IHR5cGUsIGludCBucik7CitleHRlcm4gdm9pZCB2aWRlb191bnJlZ2lzdGVyX2RldmljZShzdHJ1Y3QgdmlkZW9fZGV2aWNlICopOworZXh0ZXJuIHN0cnVjdCB2aWRlb19kZXZpY2UqIHZpZGVvX2RldmRhdGEoc3RydWN0IGZpbGUqKTsKKworI2RlZmluZSB0b192aWRlb19kZXZpY2UoY2QpIGNvbnRhaW5lcl9vZihjZCwgc3RydWN0IHZpZGVvX2RldmljZSwgY2xhc3NfZGV2KQorc3RhdGljIGlubGluZSB2b2lkCit2aWRlb19kZXZpY2VfY3JlYXRlX2ZpbGUoc3RydWN0IHZpZGVvX2RldmljZSAqdmZkLAorCQkJIHN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlICphdHRyKQoreworCWNsYXNzX2RldmljZV9jcmVhdGVfZmlsZSgmdmZkLT5jbGFzc19kZXYsIGF0dHIpOworfQorc3RhdGljIGlubGluZSB2b2lkCit2aWRlb19kZXZpY2VfcmVtb3ZlX2ZpbGUoc3RydWN0IHZpZGVvX2RldmljZSAqdmZkLAorCQkJIHN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlICphdHRyKQoreworCWNsYXNzX2RldmljZV9yZW1vdmVfZmlsZSgmdmZkLT5jbGFzc19kZXYsIGF0dHIpOworfQorCisvKiBoZWxwZXIgZnVuY3Rpb25zIHRvIGFsbG9jIC8gcmVsZWFzZSBzdHJ1Y3QgdmlkZW9fZGV2aWNlLCB0aGUKKyAgIGxhdGVyIGNhbiBiZSB1c2VkIGZvciB2aWRlb19kZXZpY2UtPnJlbGVhc2UoKSAqLworc3RydWN0IHZpZGVvX2RldmljZSAqdmlkZW9fZGV2aWNlX2FsbG9jKHZvaWQpOwordm9pZCB2aWRlb19kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZmQpOworCisvKiBoZWxwZXIgZnVuY3Rpb25zIHRvIGFjY2VzcyBkcml2ZXIgcHJpdmF0ZSBkYXRhLiAqLworc3RhdGljIGlubGluZSB2b2lkICp2aWRlb19nZXRfZHJ2ZGF0YShzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIGRldi0+cHJpdjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHZpZGVvX3NldF9kcnZkYXRhKHN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKK3sKKwlkZXYtPnByaXYgPSBkYXRhOworfQorCitleHRlcm4gaW50IHZpZGVvX2V4Y2x1c2l2ZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKK2V4dGVybiBpbnQgdmlkZW9fZXhjbHVzaXZlX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOworZXh0ZXJuIGludCB2aWRlb191c2VyY29weShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcsCisJCQkgIGludCAoKmZ1bmMpKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykpOworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2RlZmluZSBWSURfVFlQRV9DQVBUVVJFCTEJLyogQ2FuIGNhcHR1cmUgKi8KKyNkZWZpbmUgVklEX1RZUEVfVFVORVIJCTIJLyogQ2FuIHR1bmUgKi8KKyNkZWZpbmUgVklEX1RZUEVfVEVMRVRFWFQJNAkvKiBEb2VzIHRlbGV0ZXh0ICovCisjZGVmaW5lIFZJRF9UWVBFX09WRVJMQVkJOAkvKiBPdmVybGF5IG9udG8gZnJhbWUgYnVmZmVyICovCisjZGVmaW5lIFZJRF9UWVBFX0NIUk9NQUtFWQkxNgkvKiBPdmVybGF5IGJ5IGNocm9tYWtleSAqLworI2RlZmluZSBWSURfVFlQRV9DTElQUElORwkzMgkvKiBDYW4gY2xpcCAqLworI2RlZmluZSBWSURfVFlQRV9GUkFNRVJBTQk2NAkvKiBVc2VzIHRoZSBmcmFtZSBidWZmZXIgbWVtb3J5ICovCisjZGVmaW5lIFZJRF9UWVBFX1NDQUxFUwkJMTI4CS8qIFNjYWxhYmxlICovCisjZGVmaW5lIFZJRF9UWVBFX01PTk9DSFJPTUUJMjU2CS8qIE1vbm9jaHJvbWUgb25seSAqLworI2RlZmluZSBWSURfVFlQRV9TVUJDQVBUVVJFCTUxMgkvKiBDYW4gY2FwdHVyZSBzdWJhcmVhcyBvZiB0aGUgaW1hZ2UgKi8KKyNkZWZpbmUgVklEX1RZUEVfTVBFR19ERUNPREVSCTEwMjQJLyogQ2FuIGRlY29kZSBNUEVHIHN0cmVhbXMgKi8KKyNkZWZpbmUgVklEX1RZUEVfTVBFR19FTkNPREVSCTIwNDgJLyogQ2FuIGVuY29kZSBNUEVHIHN0cmVhbXMgKi8KKyNkZWZpbmUgVklEX1RZUEVfTUpQRUdfREVDT0RFUgk0MDk2CS8qIENhbiBkZWNvZGUgTUpQRUcgc3RyZWFtcyAqLworI2RlZmluZSBWSURfVFlQRV9NSlBFR19FTkNPREVSCTgxOTIJLyogQ2FuIGVuY29kZSBNSlBFRyBzdHJlYW1zICovCisKK3N0cnVjdCB2aWRlb19jYXBhYmlsaXR5Cit7CisJY2hhciBuYW1lWzMyXTsKKwlpbnQgdHlwZTsKKwlpbnQgY2hhbm5lbHM7CS8qIE51bSBjaGFubmVscyAqLworCWludCBhdWRpb3M7CS8qIE51bSBhdWRpbyBkZXZpY2VzICovCisJaW50IG1heHdpZHRoOwkvKiBTdXBwb3J0ZWQgd2lkdGggKi8KKwlpbnQgbWF4aGVpZ2h0OwkvKiBBbmQgaGVpZ2h0ICovCisJaW50IG1pbndpZHRoOwkvKiBTdXBwb3J0ZWQgd2lkdGggKi8KKwlpbnQgbWluaGVpZ2h0OwkvKiBBbmQgaGVpZ2h0ICovCit9OworCisKK3N0cnVjdCB2aWRlb19jaGFubmVsCit7CisJaW50IGNoYW5uZWw7CisJY2hhciBuYW1lWzMyXTsKKwlpbnQgdHVuZXJzOworCV9fdTMyICBmbGFnczsKKyNkZWZpbmUgVklERU9fVkNfVFVORVIJCTEJLyogQ2hhbm5lbCBoYXMgYSB0dW5lciAqLworI2RlZmluZSBWSURFT19WQ19BVURJTwkJMgkvKiBDaGFubmVsIGhhcyBhdWRpbyAqLworCV9fdTE2ICB0eXBlOworI2RlZmluZSBWSURFT19UWVBFX1RWCQkxCisjZGVmaW5lIFZJREVPX1RZUEVfQ0FNRVJBCTIKKwlfX3UxNiBub3JtOwkJCS8qIE5vcm0gc2V0IGJ5IGNoYW5uZWwgKi8KK307CisKK3N0cnVjdCB2aWRlb190dW5lcgoreworCWludCB0dW5lcjsKKwljaGFyIG5hbWVbMzJdOworCXVuc2lnbmVkIGxvbmcgcmFuZ2Vsb3csIHJhbmdlaGlnaDsJLyogVHVuZXIgcmFuZ2UgKi8KKwlfX3UzMiBmbGFnczsKKyNkZWZpbmUgVklERU9fVFVORVJfUEFMCQkxCisjZGVmaW5lIFZJREVPX1RVTkVSX05UU0MJMgorI2RlZmluZSBWSURFT19UVU5FUl9TRUNBTQk0CisjZGVmaW5lIFZJREVPX1RVTkVSX0xPVwkJOAkvKiBVc2VzIEtIeiBub3QgTUh6ICovCisjZGVmaW5lIFZJREVPX1RVTkVSX05PUk0JMTYJLyogVHVuZXIgY2FuIHNldCBub3JtICovCisjZGVmaW5lIFZJREVPX1RVTkVSX1NURVJFT19PTgkxMjgJLyogVHVuZXIgaXMgc2VlaW5nIHN0ZXJlbyAqLworI2RlZmluZSBWSURFT19UVU5FUl9SRFNfT04gICAgICAyNTYgICAgIC8qIFR1bmVyIGlzIHNlZWluZyBhbiBSRFMgZGF0YXN0cmVhbSAqLworI2RlZmluZSBWSURFT19UVU5FUl9NQlNfT04gICAgICA1MTIgICAgIC8qIFR1bmVyIGlzIHNlZWluZyBhbiBNQlMgZGF0YXN0cmVhbSAqLworCV9fdTE2IG1vZGU7CQkJLyogUEFML05UU0MvU0VDQU0vT1RIRVIgKi8KKyNkZWZpbmUgVklERU9fTU9ERV9QQUwJCTAKKyNkZWZpbmUgVklERU9fTU9ERV9OVFNDCQkxCisjZGVmaW5lIFZJREVPX01PREVfU0VDQU0JMgorI2RlZmluZSBWSURFT19NT0RFX0FVVE8JCTMKKwlfX3UxNiBzaWduYWw7CQkJLyogU2lnbmFsIHN0cmVuZ3RoIDE2Yml0IHNjYWxlICovCit9OworCitzdHJ1Y3QgdmlkZW9fcGljdHVyZQoreworCV9fdTE2CWJyaWdodG5lc3M7CisJX191MTYJaHVlOworCV9fdTE2CWNvbG91cjsKKwlfX3UxNgljb250cmFzdDsKKwlfX3UxNgl3aGl0ZW5lc3M7CS8qIEJsYWNrIGFuZCB3aGl0ZSBvbmx5ICovCisJX191MTYJZGVwdGg7CQkvKiBDYXB0dXJlIGRlcHRoICovCisJX191MTYgICBwYWxldHRlOwkvKiBQYWxldHRlIGluIHVzZSAqLworI2RlZmluZSBWSURFT19QQUxFVFRFX0dSRVkJMQkvKiBMaW5lYXIgZ3JleXNjYWxlICovCisjZGVmaW5lIFZJREVPX1BBTEVUVEVfSEkyNDAJMgkvKiBIaWdoIDI0MCBjdWJlIChCVDg0OCkgKi8KKyNkZWZpbmUgVklERU9fUEFMRVRURV9SR0I1NjUJMwkvKiA1NjUgMTYgYml0IFJHQiAqLworI2RlZmluZSBWSURFT19QQUxFVFRFX1JHQjI0CTQJLyogMjRiaXQgUkdCICovCisjZGVmaW5lIFZJREVPX1BBTEVUVEVfUkdCMzIJNQkvKiAzMmJpdCBSR0IgKi8KKyNkZWZpbmUgVklERU9fUEFMRVRURV9SR0I1NTUJNgkvKiA1NTUgMTViaXQgUkdCICovCisjZGVmaW5lIFZJREVPX1BBTEVUVEVfWVVWNDIyCTcJLyogWVVWNDIyIGNhcHR1cmUgKi8KKyNkZWZpbmUgVklERU9fUEFMRVRURV9ZVVlWCTgKKyNkZWZpbmUgVklERU9fUEFMRVRURV9VWVZZCTkJLyogVGhlIGdyZWF0IHRoaW5nIGFib3V0IHN0YW5kYXJkcyBpcyAuLi4gKi8KKyNkZWZpbmUgVklERU9fUEFMRVRURV9ZVVY0MjAJMTAKKyNkZWZpbmUgVklERU9fUEFMRVRURV9ZVVY0MTEJMTEJLyogWVVWNDExIGNhcHR1cmUgKi8KKyNkZWZpbmUgVklERU9fUEFMRVRURV9SQVcJMTIJLyogUkFXIGNhcHR1cmUgKEJUODQ4KSAqLworI2RlZmluZSBWSURFT19QQUxFVFRFX1lVVjQyMlAJMTMJLyogWVVWIDQ6MjoyIFBsYW5hciAqLworI2RlZmluZSBWSURFT19QQUxFVFRFX1lVVjQxMVAJMTQJLyogWVVWIDQ6MToxIFBsYW5hciAqLworI2RlZmluZSBWSURFT19QQUxFVFRFX1lVVjQyMFAJMTUJLyogWVVWIDQ6MjowIFBsYW5hciAqLworI2RlZmluZSBWSURFT19QQUxFVFRFX1lVVjQxMFAJMTYJLyogWVVWIDQ6MTowIFBsYW5hciAqLworI2RlZmluZSBWSURFT19QQUxFVFRFX1BMQU5BUgkxMwkvKiBzdGFydCBvZiBwbGFuYXIgZW50cmllcyAqLworI2RlZmluZSBWSURFT19QQUxFVFRFX0NPTVBPTkVOVCA3CS8qIHN0YXJ0IG9mIGNvbXBvbmVudCBlbnRyaWVzICovCit9OworCitzdHJ1Y3QgdmlkZW9fYXVkaW8KK3sKKwlpbnQJYXVkaW87CQkvKiBBdWRpbyBjaGFubmVsICovCisJX191MTYJdm9sdW1lOwkJLyogSWYgc2V0dGFibGUgKi8KKwlfX3UxNgliYXNzLCB0cmVibGU7CisJX191MzIJZmxhZ3M7CisjZGVmaW5lIFZJREVPX0FVRElPX01VVEUJMQorI2RlZmluZSBWSURFT19BVURJT19NVVRBQkxFCTIKKyNkZWZpbmUgVklERU9fQVVESU9fVk9MVU1FCTQKKyNkZWZpbmUgVklERU9fQVVESU9fQkFTUwk4CisjZGVmaW5lIFZJREVPX0FVRElPX1RSRUJMRQkxNgorI2RlZmluZSBWSURFT19BVURJT19CQUxBTkNFCTMyCisJY2hhciAgICBuYW1lWzE2XTsKKyNkZWZpbmUgVklERU9fU09VTkRfTU9OTwkxCisjZGVmaW5lIFZJREVPX1NPVU5EX1NURVJFTwkyCisjZGVmaW5lIFZJREVPX1NPVU5EX0xBTkcxCTQKKyNkZWZpbmUgVklERU9fU09VTkRfTEFORzIJOAorICAgICAgICBfX3UxNiAgIG1vZGU7CisgICAgICAgIF9fdTE2CWJhbGFuY2U7CS8qIFN0ZXJlbyBiYWxhbmNlICovCisgICAgICAgIF9fdTE2CXN0ZXA7CQkvKiBTdGVwIGFjdHVhbCB2b2x1bWUgdXNlcyAqLworfTsKKworc3RydWN0IHZpZGVvX2NsaXAKK3sKKwlfX3MzMgl4LHk7CisJX19zMzIJd2lkdGgsIGhlaWdodDsKKwlzdHJ1Y3QJdmlkZW9fY2xpcCAqbmV4dDsJLyogRm9yIHVzZXIgdXNlL2RyaXZlciB1c2Ugb25seSAqLworfTsKKworc3RydWN0IHZpZGVvX3dpbmRvdworeworCV9fdTMyCXgseTsJCQkvKiBQb3NpdGlvbiBvZiB3aW5kb3cgKi8KKwlfX3UzMgl3aWR0aCxoZWlnaHQ7CQkvKiBJdHMgc2l6ZSAqLworCV9fdTMyCWNocm9tYWtleTsKKwlfX3UzMglmbGFnczsKKwlzdHJ1Y3QJdmlkZW9fY2xpcCBfX3VzZXIgKmNsaXBzOwkvKiBTZXQgb25seSAqLworCWludAljbGlwY291bnQ7CisjZGVmaW5lIFZJREVPX1dJTkRPV19JTlRFUkxBQ0UJMQorI2RlZmluZSBWSURFT19XSU5ET1dfQ0hST01BS0VZCTE2CS8qIE92ZXJsYXkgYnkgY2hyb21ha2V5ICovCisjZGVmaW5lIFZJREVPX0NMSVBfQklUTUFQCS0xCisvKiBiaXRtYXAgaXMgMTAyNHg2MjUsIGEgJzEnIGJpdCByZXByZXNlbnRzIGEgY2xpcHBlZCBwaXhlbCAqLworI2RlZmluZSBWSURFT19DTElQTUFQX1NJWkUJKDEyOCAqIDYyNSkKK307CisKK3N0cnVjdCB2aWRlb19jYXB0dXJlCit7CisJX191MzIgCXgseTsJCQkvKiBPZmZzZXRzIGludG8gaW1hZ2UgKi8KKwlfX3UzMgl3aWR0aCwgaGVpZ2h0OwkJLyogQXJlYSB0byBjYXB0dXJlICovCisJX191MTYJZGVjaW1hdGlvbjsJCS8qIERlY2ltYXRpb24gZGl2aWRlciAqLworCV9fdTE2CWZsYWdzOwkJCS8qIEZsYWdzIGZvciBjYXB0dXJlICovCisjZGVmaW5lIFZJREVPX0NBUFRVUkVfT0RECQkwCS8qIFRlbXBvcmFsICovCisjZGVmaW5lIFZJREVPX0NBUFRVUkVfRVZFTgkJMQorfTsKKworc3RydWN0IHZpZGVvX2J1ZmZlcgoreworCXZvaWQJKmJhc2U7CisJaW50CWhlaWdodCx3aWR0aDsKKwlpbnQJZGVwdGg7CisJaW50CWJ5dGVzcGVybGluZTsKK307CisKK3N0cnVjdCB2aWRlb19tbWFwCit7CisJdW5zaWduZWQJaW50IGZyYW1lOwkJLyogRnJhbWUgKDAgLSBuKSBmb3IgZG91YmxlIGJ1ZmZlciAqLworCWludAkJaGVpZ2h0LHdpZHRoOworCXVuc2lnbmVkCWludCBmb3JtYXQ7CQkvKiBzaG91bGQgYmUgVklERU9fUEFMRVRURV8qICovCit9OworCitzdHJ1Y3QgdmlkZW9fa2V5Cit7CisJX191OAlrZXlbOF07CisJX191MzIJZmxhZ3M7Cit9OworCisKKyNkZWZpbmUgVklERU9fTUFYX0ZSQU1FCQkzMgorCitzdHJ1Y3QgdmlkZW9fbWJ1ZgoreworCWludAlzaXplOwkJLyogVG90YWwgbWVtb3J5IHRvIG1hcCAqLworCWludAlmcmFtZXM7CQkvKiBGcmFtZXMgKi8KKwlpbnQJb2Zmc2V0c1tWSURFT19NQVhfRlJBTUVdOworfTsKKworCisjZGVmaW5lIAlWSURFT19OT19VTklUCSgtMSkKKworCitzdHJ1Y3QgdmlkZW9fdW5pdAoreworCWludCAJdmlkZW87CQkvKiBWaWRlbyBtaW5vciAqLworCWludAl2Ymk7CQkvKiBWQkkgbWlub3IgKi8KKwlpbnQJcmFkaW87CQkvKiBSYWRpbyBtaW5vciAqLworCWludAlhdWRpbzsJCS8qIEF1ZGlvIG1pbm9yICovCisJaW50CXRlbGV0ZXh0OwkvKiBUZWxldGV4dCBtaW5vciAqLworfTsKKworc3RydWN0IHZiaV9mb3JtYXQgeworCV9fdTMyCXNhbXBsaW5nX3JhdGU7CS8qIGluIEh6ICovCisJX191MzIJc2FtcGxlc19wZXJfbGluZTsKKwlfX3UzMglzYW1wbGVfZm9ybWF0OwkvKiBWSURFT19QQUxFVFRFX1JBVyBvbmx5ICgxIGJ5dGUpICovCisJX19zMzIJc3RhcnRbMl07CS8qIHN0YXJ0aW5nIGxpbmUgZm9yIGVhY2ggZnJhbWUgKi8KKwlfX3UzMgljb3VudFsyXTsJLyogY291bnQgb2YgbGluZXMgZm9yIGVhY2ggZnJhbWUgKi8KKwlfX3UzMglmbGFnczsKKyNkZWZpbmUJVkJJX1VOU1lOQwkxCS8qIGNhbiBkaXN0aW5ndWVzIGJldHdlZW4gdG9wL2JvdHRvbSBmaWVsZCAqLworI2RlZmluZQlWQklfSU5URVJMQUNFRAkyCS8qIGxpbmVzIGFyZSBpbnRlcmxhY2VkICovCit9OworCisvKiB2aWRlb19pbmZvIGlzIGJpYXNlZCB0b3dhcmRzIGhhcmR3YXJlIG1wZWcgZW5jb2RlL2RlY29kZSAqLworLyogYnV0IGl0IGNvdWxkIGFwcGx5IGdlbmVyaWNhbGx5IHRvIGFueSBoYXJkd2FyZSBjb21wcmVzc29yL2RlY29tcHJlc3NvciAqLworc3RydWN0IHZpZGVvX2luZm8KK3sKKwlfX3UzMglmcmFtZV9jb3VudDsJLyogZnJhbWVzIG91dHB1dCBzaW5jZSBkZWNvZGUvZW5jb2RlIGJlZ2FuICovCisJX191MzIJaF9zaXplOwkJLyogY3VycmVudCB1bnNjYWxlZCBob3Jpem9udGFsIHNpemUgKi8KKwlfX3UzMgl2X3NpemU7CQkvKiBjdXJyZW50IHVuc2NhbGVkIHZlcml0Y2FsIHNpemUgKi8KKwlfX3UzMglzbXB0ZV90aW1lY29kZTsJLyogY3VycmVudCBTTVBURSB0aW1lY29kZSAoZm9yIGN1cnJlbnQgR09QKSAqLworCV9fdTMyCXBpY3R1cmVfdHlwZTsJLyogY3VycmVudCBwaWN0dXJlIHR5cGUgKi8KKwlfX3UzMgl0ZW1wb3JhbF9yZWZlcmVuY2U7CS8qIGN1cnJlbnQgdGVtcG9yYWwgcmVmZXJlbmNlICovCisJX191OAl1c2VyX2RhdGFbMjU2XTsJLyogdXNlciBkYXRhIGxhc3QgZm91bmQgaW4gY29tcHJlc3NlZCBzdHJlYW0gKi8KKwkvKiB1c2VyX2RhdGFbMF0gY29udGFpbnMgdXNlciBkYXRhIGZsYWdzLCB1c2VyX2RhdGFbMV0gaGFzIGNvdW50ICovCit9OworCisvKiBnZW5lcmljIHN0cnVjdHVyZSBmb3Igc2V0dGluZyBwbGF5YmFjayBtb2RlcyAqLworc3RydWN0IHZpZGVvX3BsYXlfbW9kZQoreworCWludAltb2RlOworCWludAlwMTsKKwlpbnQJcDI7Cit9OworCisvKiBmb3IgbG9hZGluZyBtaWNyb2NvZGUgLyBmcGdhIHByb2dyYW1taW5nICovCitzdHJ1Y3QgdmlkZW9fY29kZQoreworCWNoYXIJbG9hZHdoYXRbMTZdOwkvKiBuYW1lIG9yIHRhZyBvZiBmaWxlIGJlaW5nIHBhc3NlZCAqLworCWludAlkYXRhc2l6ZTsKKwlfX3U4CSpkYXRhOworfTsKKworI2RlZmluZSBWSURJT0NHQ0FQCQlfSU9SKCd2JywxLHN0cnVjdCB2aWRlb19jYXBhYmlsaXR5KQkvKiBHZXQgY2FwYWJpbGl0aWVzICovCisjZGVmaW5lIFZJRElPQ0dDSEFOCQlfSU9XUigndicsMixzdHJ1Y3QgdmlkZW9fY2hhbm5lbCkJLyogR2V0IGNoYW5uZWwgaW5mbyAoc291cmNlcykgKi8KKyNkZWZpbmUgVklESU9DU0NIQU4JCV9JT1coJ3YnLDMsc3RydWN0IHZpZGVvX2NoYW5uZWwpCS8qIFNldCBjaGFubmVsIAkqLworI2RlZmluZSBWSURJT0NHVFVORVIJCV9JT1dSKCd2Jyw0LHN0cnVjdCB2aWRlb190dW5lcikJCS8qIEdldCB0dW5lciBhYmlsaXRpZXMgKi8KKyNkZWZpbmUgVklESU9DU1RVTkVSCQlfSU9XKCd2Jyw1LHN0cnVjdCB2aWRlb190dW5lcikJCS8qIFR1bmUgdGhlIHR1bmVyIGZvciB0aGUgY3VycmVudCBjaGFubmVsICovCisjZGVmaW5lIFZJRElPQ0dQSUNUCQlfSU9SKCd2Jyw2LHN0cnVjdCB2aWRlb19waWN0dXJlKQkvKiBHZXQgcGljdHVyZSBwcm9wZXJ0aWVzICovCisjZGVmaW5lIFZJRElPQ1NQSUNUCQlfSU9XKCd2Jyw3LHN0cnVjdCB2aWRlb19waWN0dXJlKQkvKiBTZXQgcGljdHVyZSBwcm9wZXJ0aWVzICovCisjZGVmaW5lIFZJRElPQ0NBUFRVUkUJCV9JT1coJ3YnLDgsaW50KQkJCQkvKiBTdGFydCwgZW5kIGNhcHR1cmUgKi8KKyNkZWZpbmUgVklESU9DR1dJTgkJX0lPUigndicsOSwgc3RydWN0IHZpZGVvX3dpbmRvdykJLyogR2V0IHRoZSB2aWRlbyBvdmVybGF5IHdpbmRvdyAqLworI2RlZmluZSBWSURJT0NTV0lOCQlfSU9XKCd2JywxMCwgc3RydWN0IHZpZGVvX3dpbmRvdykJLyogU2V0IHRoZSB2aWRlbyBvdmVybGF5IHdpbmRvdyAtIHBhc3NlcyBjbGlwIGxpc3QgZm9yIGhhcmR3YXJlIHNtYXJ0cyAsIGNocm9tYWtleSBldGMgKi8KKyNkZWZpbmUgVklESU9DR0ZCVUYJCV9JT1IoJ3YnLDExLCBzdHJ1Y3QgdmlkZW9fYnVmZmVyKQkvKiBHZXQgZnJhbWUgYnVmZmVyICovCisjZGVmaW5lIFZJRElPQ1NGQlVGCQlfSU9XKCd2JywxMiwgc3RydWN0IHZpZGVvX2J1ZmZlcikJLyogU2V0IGZyYW1lIGJ1ZmZlciAtIHJvb3Qgb25seSAqLworI2RlZmluZSBWSURJT0NLRVkJCV9JT1IoJ3YnLDEzLCBzdHJ1Y3QgdmlkZW9fa2V5KQkJLyogVmlkZW8ga2V5IGV2ZW50IC0gdG8gZGV2IDI1NSBpcyB0byBhbGwgLSBjdXRzIGNhcHR1cmUgb24gYWxsIERNQSB3aW5kb3dzIHdpdGggdGhpcyBrZXkgKDB4RkZGRkZGRkYgPT0gYWxsKSAqLworI2RlZmluZSBWSURJT0NHRlJFUQkJX0lPUigndicsMTQsIHVuc2lnbmVkIGxvbmcpCQkvKiBTZXQgdHVuZXIgKi8KKyNkZWZpbmUgVklESU9DU0ZSRVEJCV9JT1coJ3YnLDE1LCB1bnNpZ25lZCBsb25nKQkJLyogU2V0IHR1bmVyICovCisjZGVmaW5lIFZJRElPQ0dBVURJTwkJX0lPUigndicsMTYsIHN0cnVjdCB2aWRlb19hdWRpbykJLyogR2V0IGF1ZGlvIGluZm8gKi8KKyNkZWZpbmUgVklESU9DU0FVRElPCQlfSU9XKCd2JywxNywgc3RydWN0IHZpZGVvX2F1ZGlvKQkvKiBBdWRpbyBzb3VyY2UsIG11dGUgZXRjICovCisjZGVmaW5lIFZJRElPQ1NZTkMJCV9JT1coJ3YnLDE4LCBpbnQpCQkJLyogU3luYyB3aXRoIG1tYXAgZ3JhYmJpbmcgKi8KKyNkZWZpbmUgVklESU9DTUNBUFRVUkUJCV9JT1coJ3YnLDE5LCBzdHJ1Y3QgdmlkZW9fbW1hcCkJCS8qIEdyYWIgZnJhbWVzICovCisjZGVmaW5lIFZJRElPQ0dNQlVGCQlfSU9SKCd2JywyMCwgc3RydWN0IHZpZGVvX21idWYpCQkvKiBNZW1vcnkgbWFwIGJ1ZmZlciBpbmZvICovCisjZGVmaW5lIFZJRElPQ0dVTklUCQlfSU9SKCd2JywyMSwgc3RydWN0IHZpZGVvX3VuaXQpCQkvKiBHZXQgYXR0YWNoZWQgdW5pdHMgKi8KKyNkZWZpbmUgVklESU9DR0NBUFRVUkUJCV9JT1IoJ3YnLDIyLCBzdHJ1Y3QgdmlkZW9fY2FwdHVyZSkJLyogR2V0IHN1YmNhcHR1cmUgKi8KKyNkZWZpbmUgVklESU9DU0NBUFRVUkUJCV9JT1coJ3YnLDIzLCBzdHJ1Y3QgdmlkZW9fY2FwdHVyZSkJLyogU2V0IHN1YmNhcHR1cmUgKi8KKyNkZWZpbmUgVklESU9DU1BMQVlNT0RFCQlfSU9XKCd2JywyNCwgc3RydWN0IHZpZGVvX3BsYXlfbW9kZSkJLyogU2V0IG91dHB1dCB2aWRlbyBtb2RlL2ZlYXR1cmUgKi8KKyNkZWZpbmUgVklESU9DU1dSSVRFTU9ERQlfSU9XKCd2JywyNSwgaW50KQkJCS8qIFNldCB3cml0ZSBtb2RlICovCisjZGVmaW5lIFZJRElPQ0dQTEFZSU5GTwkJX0lPUigndicsMjYsIHN0cnVjdCB2aWRlb19pbmZvKQkJLyogR2V0IGN1cnJlbnQgcGxheWJhY2sgaW5mbyBmcm9tIGhhcmR3YXJlICovCisjZGVmaW5lIFZJRElPQ1NNSUNST0NPREUJX0lPVygndicsMjcsIHN0cnVjdCB2aWRlb19jb2RlKQkJLyogTG9hZCBtaWNyb2NvZGUgaW50byBoYXJkd2FyZSAqLworI2RlZmluZQlWSURJT0NHVkJJRk1UCQlfSU9SKCd2JywyOCwgc3RydWN0IHZiaV9mb3JtYXQpCQkvKiBHZXQgVkJJIGluZm9ybWF0aW9uICovCisjZGVmaW5lCVZJRElPQ1NWQklGTVQJCV9JT1coJ3YnLDI5LCBzdHJ1Y3QgdmJpX2Zvcm1hdCkJCS8qIFNldCBWQkkgaW5mb3JtYXRpb24gKi8KKworCisjZGVmaW5lIEJBU0VfVklESU9DUFJJVkFURQkxOTIJCS8qIDE5Mi0yNTUgYXJlIHByaXZhdGUgKi8KKworLyogVklESU9DU1dSSVRFTU9ERSAqLworI2RlZmluZSBWSURfV1JJVEVfTVBFR19BVUQJCTAKKyNkZWZpbmUgVklEX1dSSVRFX01QRUdfVklECQkxCisjZGVmaW5lIFZJRF9XUklURV9PU0QJCQkyCisjZGVmaW5lIFZJRF9XUklURV9UVFgJCQkzCisjZGVmaW5lIFZJRF9XUklURV9DQwkJCTQKKyNkZWZpbmUgVklEX1dSSVRFX01KUEVHCQkJNQorCisvKiBWSURJT0NTUExBWU1PREUgKi8KKyNkZWZpbmUgVklEX1BMQVlfVklEX09VVF9NT0RFCQkwCisJLyogcDE6ID0gVklERU9fTU9ERV9QQUwsIFZJREVPX01PREVfTlRTQywgZXRjIC4uLiAqLworI2RlZmluZSBWSURfUExBWV9HRU5MT0NLCQkxCisJLyogcDE6IDAgPSBPRkYsIDEgPSBPTiAqLworCS8qIHAyOiBHRU5MT0NLIEZJTkUgREVMQVkgdmFsdWUgKi8KKyNkZWZpbmUgVklEX1BMQVlfTk9STUFMCQkJMgorI2RlZmluZSBWSURfUExBWV9QQVVTRQkJCTMKKyNkZWZpbmUgVklEX1BMQVlfU0lOR0xFX0ZSQU1FCQk0CisjZGVmaW5lIFZJRF9QTEFZX0ZBU1RfRk9SV0FSRAkJNQorI2RlZmluZSBWSURfUExBWV9TTE9XX01PVElPTgkJNgorI2RlZmluZSBWSURfUExBWV9JTU1FRElBVEVfTk9STUFMCTcKKyNkZWZpbmUgVklEX1BMQVlfU1dJVENIX0NIQU5ORUxTCTgKKyNkZWZpbmUgVklEX1BMQVlfRlJFRVpFX0ZSQU1FCQk5CisjZGVmaW5lIFZJRF9QTEFZX1NUSUxMX01PREUJCTEwCisjZGVmaW5lIFZJRF9QTEFZX01BU1RFUl9NT0RFCQkxMQorCS8qIHAxOiBzZWUgYmVsb3cgKi8KKyNkZWZpbmUJCVZJRF9QTEFZX01BU1RFUl9OT05FCTEKKyNkZWZpbmUJCVZJRF9QTEFZX01BU1RFUl9WSURFTwkyCisjZGVmaW5lCQlWSURfUExBWV9NQVNURVJfQVVESU8JMworI2RlZmluZSBWSURfUExBWV9BQ1RJVkVfU0NBTkxJTkVTCTEyCisJLyogcDEgPSBmaXJzdCBhY3RpdmU7IHAyID0gbGFzdCBhY3RpdmUgKi8KKyNkZWZpbmUgVklEX1BMQVlfUkVTRVQJCQkxMworI2RlZmluZSBWSURfUExBWV9FTkRfTUFSSwkJMTQKKworCisKKyNkZWZpbmUgVklEX0hBUkRXQVJFX0JUODQ4CTEKKyNkZWZpbmUgVklEX0hBUkRXQVJFX1FDQU1fQlcJMgorI2RlZmluZSBWSURfSEFSRFdBUkVfUE1TCTMKKyNkZWZpbmUgVklEX0hBUkRXQVJFX1FDQU1fQwk0CisjZGVmaW5lIFZJRF9IQVJEV0FSRV9QU0VVRE8JNQorI2RlZmluZSBWSURfSEFSRFdBUkVfU0FBNTI0OQk2CisjZGVmaW5lIFZJRF9IQVJEV0FSRV9BWlRFQ0gJNworI2RlZmluZSBWSURfSEFSRFdBUkVfU0YxNk1JCTgKKyNkZWZpbmUgVklEX0hBUkRXQVJFX1JUUkFDSwk5CisjZGVmaW5lIFZJRF9IQVJEV0FSRV9aT0xUUklYCTEwCisjZGVmaW5lIFZJRF9IQVJEV0FSRV9TQUE3MTQ2ICAgIDExCisjZGVmaW5lIFZJRF9IQVJEV0FSRV9WSURFVU0JMTIJLyogUmVzZXJ2ZWQgZm9yIFdpbm5vdiB2aWRldW0gKi8KKyNkZWZpbmUgVklEX0hBUkRXQVJFX1JUUkFDSzIJMTMKKyNkZWZpbmUgVklEX0hBUkRXQVJFX1BFUk1FRElBMgkxNAkvKiBSZXNlcnZlZCBmb3IgUGVybWVkaWEyICovCisjZGVmaW5lIFZJRF9IQVJEV0FSRV9SSVZBMTI4CTE1CS8qIFJlc2VydmVkIGZvciBSSVZBIDEyOCAqLworI2RlZmluZSBWSURfSEFSRFdBUkVfUExBTkIJMTYJLyogUG93ZXJNYWMgbW90aGVyYm9hcmQgdmlkZW8taW4gKi8KKyNkZWZpbmUgVklEX0hBUkRXQVJFX0JST0FEV0FZCTE3CS8qIEJyb2Fkd2F5IHByb2plY3QgKi8KKyNkZWZpbmUgVklEX0hBUkRXQVJFX0dFTVRFSwkxOAorI2RlZmluZSBWSURfSEFSRFdBUkVfVFlQSE9PTgkxOQorI2RlZmluZSBWSURfSEFSRFdBUkVfVklOTwkyMAkvKiBTR0kgSW5keSBWaW5vICovCisjZGVmaW5lIFZJRF9IQVJEV0FSRV9DQURFVAkyMQkvKiBDYWRldCByYWRpbyAqLworI2RlZmluZSBWSURfSEFSRFdBUkVfVFJVU1QJMjIJLyogVHJ1c3QgRk0gUmFkaW8gKi8KKyNkZWZpbmUgVklEX0hBUkRXQVJFX1RFUlJBVEVDCTIzCS8qIFRlcnJhVGVjIEFjdGl2ZVJhZGlvICovCisjZGVmaW5lIFZJRF9IQVJEV0FSRV9DUElBCTI0CisjZGVmaW5lIFZJRF9IQVJEV0FSRV9aUjM2MTIwCTI1CS8qIFpvcmFuIFpSMzYxMjAvWlIzNjEyNSAqLworI2RlZmluZSBWSURfSEFSRFdBUkVfWlIzNjA2NwkyNgkvKiBab3JhbiBaUjM2MDY3LzM2MDYwICovCisjZGVmaW5lIFZJRF9IQVJEV0FSRV9PVjUxMQkyNworI2RlZmluZSBWSURfSEFSRFdBUkVfWlIzNTY3MDAJMjgJLyogWm9yYW4gMzY3MDAgc2VyaWVzICovCisjZGVmaW5lIFZJRF9IQVJEV0FSRV9XOTk2NgkyOQorI2RlZmluZSBWSURfSEFSRFdBUkVfU0U0MDEJMzAJLyogU0U0MDEgVVNCIHdlYmNhbXMgKi8KKyNkZWZpbmUgVklEX0hBUkRXQVJFX1BXQwkzMQkvKiBQaGlsaXBzIHdlYmNhbXMgKi8KKyNkZWZpbmUgVklEX0hBUkRXQVJFX01FWUUJMzIJLyogU29ueSBWYWlvIE1vdGlvbkV5ZSBjYW1lcmFzICovCisjZGVmaW5lIFZJRF9IQVJEV0FSRV9DUElBMgkzMworI2RlZmluZSBWSURfSEFSRFdBUkVfVklDQU0gICAgICAzNAorI2RlZmluZSBWSURfSEFSRFdBUkVfU0YxNkZNUjIJMzUKKyNkZWZpbmUgVklEX0hBUkRXQVJFX1c5OTY4Q0YJMzYKKyNkZWZpbmUgVklEX0hBUkRXQVJFX1NBQTcxMTRIICAgMzcKKyNkZWZpbmUgVklEX0hBUkRXQVJFX1NOOUMxMDIJMzgKKyNkZWZpbmUgVklEX0hBUkRXQVJFX0FSVgkzOQorI2VuZGlmIC8qIF9fTElOVVhfVklERU9ERVZfSCAqLworCisvKgorICogTG9jYWwgdmFyaWFibGVzOgorICogYy1iYXNpYy1vZmZzZXQ6IDgKKyAqIEVuZDoKKyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92aWRlb2RldjIuaCBiL2luY2x1ZGUvbGludXgvdmlkZW9kZXYyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGUwZWRjZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvdmlkZW9kZXYyLmgKQEAgLTAsMCArMSw5NzcgQEAKKyNpZm5kZWYgX19MSU5VWF9WSURFT0RFVjJfSAorI2RlZmluZSBfX0xJTlVYX1ZJREVPREVWMl9ICisvKgorICoJVmlkZW8gZm9yIExpbnV4IFR3bworICoKKyAqCUhlYWRlciBmaWxlIGZvciB2NGwgb3IgVjRMMiBkcml2ZXJzIGFuZCBhcHBsaWNhdGlvbnMsIGZvcgorICoJTGludXgga2VybmVscyAyLjIueCBvciAyLjQueC4KKyAqCisgKglTZWUgaHR0cDovL2J5dGVzZXgub3JnL3Y0bC8gZm9yIEFQSSBzcGVjcyBhbmQgb3RoZXIKKyAqCXY0bDIgZG9jdW1lbnRhdGlvbi4KKyAqCisgKglBdXRob3I6IEJpbGwgRGlya3MgPGJkaXJrc0BwYWNiZWxsLm5ldD4KKyAqCQlKdXN0aW4gU2Nob2VtYW4KKyAqCQlldCBhbC4KKyAqLworI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+IC8qIG5lZWQgc3RydWN0IHRpbWV2YWwgKi8KKyNlbmRpZgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+IC8qIG5lZWQgX191c2VyICovCisKKy8qCisgKglNIEkgUyBDIEUgTCBMIEEgTiBFIE8gVSBTCisgKi8KKworLyogIEZvdXItY2hhcmFjdGVyLWNvZGUgKEZPVVJDQykgKi8KKyNkZWZpbmUgdjRsMl9mb3VyY2MoYSxiLGMsZClcCisgICAgICAgICgoKF9fdTMyKShhKTw8MCl8KChfX3UzMikoYik8PDgpfCgoX191MzIpKGMpPDwxNil8KChfX3UzMikoZCk8PDI0KSkKKworLyoKKyAqCUUgTiBVIE0gUworICovCitlbnVtIHY0bDJfZmllbGQgeworCVY0TDJfRklFTERfQU5ZICAgICAgICA9IDAsIC8qIGRyaXZlciBjYW4gY2hvb3NlIGZyb20gbm9uZSwKKwkJCQkgICAgICB0b3AsIGJvdHRvbSwgaW50ZXJsYWNlZAorCQkJCSAgICAgIGRlcGVuZGluZyBvbiB3aGF0ZXZlciBpdCB0aGlua3MKKwkJCQkgICAgICBpcyBhcHByb3hpbWF0ZSAuLi4gKi8KKwlWNEwyX0ZJRUxEX05PTkUgICAgICAgPSAxLCAvKiB0aGlzIGRldmljZSBoYXMgbm8gZmllbGRzIC4uLiAqLworCVY0TDJfRklFTERfVE9QICAgICAgICA9IDIsIC8qIHRvcCBmaWVsZCBvbmx5ICovCisJVjRMMl9GSUVMRF9CT1RUT00gICAgID0gMywgLyogYm90dG9tIGZpZWxkIG9ubHkgKi8KKwlWNEwyX0ZJRUxEX0lOVEVSTEFDRUQgPSA0LCAvKiBib3RoIGZpZWxkcyBpbnRlcmxhY2VkICovCisJVjRMMl9GSUVMRF9TRVFfVEIgICAgID0gNSwgLyogYm90aCBmaWVsZHMgc2VxdWVudGlhbCBpbnRvIG9uZQorCQkJCSAgICAgIGJ1ZmZlciwgdG9wLWJvdHRvbSBvcmRlciAqLworCVY0TDJfRklFTERfU0VRX0JUICAgICA9IDYsIC8qIHNhbWUgYXMgYWJvdmUgKyBib3R0b20tdG9wIG9yZGVyICovCisJVjRMMl9GSUVMRF9BTFRFUk5BVEUgID0gNywgLyogYm90aCBmaWVsZHMgYWx0ZXJuYXRpbmcgaW50bworCQkJCSAgICAgIHNlcGFyYXRlIGJ1ZmZlcnMgKi8KK307CisjZGVmaW5lIFY0TDJfRklFTERfSEFTX1RPUChmaWVsZCkJXAorCSgoZmllbGQpID09IFY0TDJfRklFTERfVE9QIAl8fFwKKwkgKGZpZWxkKSA9PSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQgfHxcCisJIChmaWVsZCkgPT0gVjRMMl9GSUVMRF9TRVFfVEIJfHxcCisJIChmaWVsZCkgPT0gVjRMMl9GSUVMRF9TRVFfQlQpCisjZGVmaW5lIFY0TDJfRklFTERfSEFTX0JPVFRPTShmaWVsZCkJXAorCSgoZmllbGQpID09IFY0TDJfRklFTERfQk9UVE9NIAl8fFwKKwkgKGZpZWxkKSA9PSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQgfHxcCisJIChmaWVsZCkgPT0gVjRMMl9GSUVMRF9TRVFfVEIJfHxcCisJIChmaWVsZCkgPT0gVjRMMl9GSUVMRF9TRVFfQlQpCisjZGVmaW5lIFY0TDJfRklFTERfSEFTX0JPVEgoZmllbGQpCVwKKwkoKGZpZWxkKSA9PSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQgfHxcCisJIChmaWVsZCkgPT0gVjRMMl9GSUVMRF9TRVFfVEIJfHxcCisJIChmaWVsZCkgPT0gVjRMMl9GSUVMRF9TRVFfQlQpCisKK2VudW0gdjRsMl9idWZfdHlwZSB7CisJVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFICA9IDEsCisJVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQgICA9IDIsCisJVjRMMl9CVUZfVFlQRV9WSURFT19PVkVSTEFZICA9IDMsCisJVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSAgICA9IDQsCisJVjRMMl9CVUZfVFlQRV9WQklfT1VUUFVUICAgICA9IDUsCisJVjRMMl9CVUZfVFlQRV9QUklWQVRFICAgICAgICA9IDB4ODAsCit9OworCitlbnVtIHY0bDJfY3RybF90eXBlIHsKKwlWNEwyX0NUUkxfVFlQRV9JTlRFR0VSCSAgICAgPSAxLAorCVY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4JICAgICA9IDIsCisJVjRMMl9DVFJMX1RZUEVfTUVOVQkgICAgID0gMywKKwlWNEwyX0NUUkxfVFlQRV9CVVRUT04JICAgICA9IDQsCit9OworCitlbnVtIHY0bDJfdHVuZXJfdHlwZSB7CisJVjRMMl9UVU5FUl9SQURJTwkgICAgID0gMSwKKwlWNEwyX1RVTkVSX0FOQUxPR19UVgkgICAgID0gMiwKKwlWNEwyX1RVTkVSX0RJR0lUQUxfVFYJICAgICA9IDMsCit9OworCitlbnVtIHY0bDJfbWVtb3J5IHsKKwlWNEwyX01FTU9SWV9NTUFQICAgICAgICAgICAgID0gMSwKKwlWNEwyX01FTU9SWV9VU0VSUFRSICAgICAgICAgID0gMiwKKwlWNEwyX01FTU9SWV9PVkVSTEFZICAgICAgICAgID0gMywKK307CisKKy8qIHNlZSBhbHNvIGh0dHA6Ly92ZWt0b3IudGhlb3JlbS5jYS9ncmFwaGljcy95Y2Jjci8gKi8KK2VudW0gdjRsMl9jb2xvcnNwYWNlIHsKKwkvKiBJVFUtUiA2MDEgLS0gYnJvYWRjYXN0IE5UU0MvUEFMICovCisJVjRMMl9DT0xPUlNQQUNFX1NNUFRFMTcwTSAgICAgPSAxLAorCisJLyogMTEyNS1MaW5lIChVUykgSERUViAqLworCVY0TDJfQ09MT1JTUEFDRV9TTVBURTI0ME0gICAgID0gMiwKKworCS8qIEhEIGFuZCBtb2Rlcm4gY2FwdHVyZXMuICovCisJVjRMMl9DT0xPUlNQQUNFX1JFQzcwOSAgICAgICAgPSAzLAorCisJLyogYnJva2VuIEJUODc4IGV4dGVudHMgKDYwMSwgbHVtYSByYW5nZSAxNi0yNTMgaW5zdGVhZCBvZiAxNi0yMzUpICovCisJVjRMMl9DT0xPUlNQQUNFX0JUODc4ICAgICAgICAgPSA0LAorCisJLyogVGhlc2Ugc2hvdWxkIGJlIHVzZWZ1bC4gIEFzc3VtZSA2MDEgZXh0ZW50cy4gKi8KKwlWNEwyX0NPTE9SU1BBQ0VfNDcwX1NZU1RFTV9NICA9IDUsCisJVjRMMl9DT0xPUlNQQUNFXzQ3MF9TWVNURU1fQkcgPSA2LAorCisJLyogSSBrbm93IHRoZXJlIHdpbGwgYmUgY2FtZXJhcyB0aGF0IHNlbmQgdGhpcy4gIFNvLCB0aGlzIGlzCisJICogdW5zcGVjaWZpZWQgY2hyb21hdGljaXRpZXMgYW5kIGZ1bGwgMC0yNTUgb24gZWFjaCBvZiB0aGUKKwkgKiBZJ0NiQ3IgY29tcG9uZW50cworCSAqLworCVY0TDJfQ09MT1JTUEFDRV9KUEVHICAgICAgICAgID0gNywKKworCS8qIEZvciBSR0IgY29sb3Vyc3BhY2VzLCB0aGlzIGlzIHByb2JhYmx5IGEgZ29vZCBzdGFydC4gKi8KKwlWNEwyX0NPTE9SU1BBQ0VfU1JHQiAgICAgICAgICA9IDgsCit9OworCitlbnVtIHY0bDJfcHJpb3JpdHkgeworCVY0TDJfUFJJT1JJVFlfVU5TRVQgICAgICAgPSAwLCAgLyogbm90IGluaXRpYWxpemVkICovCisJVjRMMl9QUklPUklUWV9CQUNLR1JPVU5EICA9IDEsCisJVjRMMl9QUklPUklUWV9JTlRFUkFDVElWRSA9IDIsCisJVjRMMl9QUklPUklUWV9SRUNPUkQgICAgICA9IDMsCisJVjRMMl9QUklPUklUWV9ERUZBVUxUICAgICA9IFY0TDJfUFJJT1JJVFlfSU5URVJBQ1RJVkUsCit9OworCitzdHJ1Y3QgdjRsMl9yZWN0IHsKKwlfX3MzMiAgIGxlZnQ7CisJX19zMzIgICB0b3A7CisJX19zMzIgICB3aWR0aDsKKwlfX3MzMiAgIGhlaWdodDsKK307CisKK3N0cnVjdCB2NGwyX2ZyYWN0IHsKKwlfX3UzMiAgIG51bWVyYXRvcjsKKwlfX3UzMiAgIGRlbm9taW5hdG9yOworfTsKKworLyoKKyAqCUQgUiBJIFYgRSBSICAgQyBBIFAgQSBCIEkgTCBJIFQgSSBFIFMKKyAqLworc3RydWN0IHY0bDJfY2FwYWJpbGl0eQoreworCV9fdTgJZHJpdmVyWzE2XTsJLyogaS5lLiAiYnR0diIgKi8KKwlfX3U4CWNhcmRbMzJdOwkvKiBpLmUuICJIYXVwcGF1Z2UgV2luVFYiICovCisJX191OAlidXNfaW5mb1szMl07CS8qICJQQ0k6IiArIHBjaV9uYW1lKHBjaV9kZXYpICovCisJX191MzIgICB2ZXJzaW9uOyAgICAgICAgLyogc2hvdWxkIHVzZSBLRVJORUxfVkVSU0lPTigpICovCisJX191MzIJY2FwYWJpbGl0aWVzOwkvKiBEZXZpY2UgY2FwYWJpbGl0aWVzICovCisJX191MzIJcmVzZXJ2ZWRbNF07Cit9OworCisvKiBWYWx1ZXMgZm9yICdjYXBhYmlsaXRpZXMnIGZpZWxkICovCisjZGVmaW5lIFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUJMHgwMDAwMDAwMSAgLyogSXMgYSB2aWRlbyBjYXB0dXJlIGRldmljZSAqLworI2RlZmluZSBWNEwyX0NBUF9WSURFT19PVVRQVVQJMHgwMDAwMDAwMiAgLyogSXMgYSB2aWRlbyBvdXRwdXQgZGV2aWNlICovCisjZGVmaW5lIFY0TDJfQ0FQX1ZJREVPX09WRVJMQVkJMHgwMDAwMDAwNCAgLyogQ2FuIGRvIHZpZGVvIG92ZXJsYXkgKi8KKyNkZWZpbmUgVjRMMl9DQVBfVkJJX0NBUFRVUkUJMHgwMDAwMDAxMCAgLyogSXMgYSBWQkkgY2FwdHVyZSBkZXZpY2UgKi8KKyNkZWZpbmUgVjRMMl9DQVBfVkJJX09VVFBVVAkweDAwMDAwMDIwICAvKiBJcyBhIFZCSSBvdXRwdXQgZGV2aWNlICovCisjZGVmaW5lIFY0TDJfQ0FQX1JEU19DQVBUVVJFCTB4MDAwMDAxMDAgIC8qIFJEUyBkYXRhIGNhcHR1cmUgKi8KKworI2RlZmluZSBWNEwyX0NBUF9UVU5FUgkJMHgwMDAxMDAwMCAgLyogaGFzIGEgdHVuZXIgKi8KKyNkZWZpbmUgVjRMMl9DQVBfQVVESU8JCTB4MDAwMjAwMDAgIC8qIGhhcyBhdWRpbyBzdXBwb3J0ICovCisjZGVmaW5lIFY0TDJfQ0FQX1JBRElPCQkweDAwMDQwMDAwICAvKiBpcyBhIHJhZGlvIGRldmljZSAqLworCisjZGVmaW5lIFY0TDJfQ0FQX1JFQURXUklURSAgICAgIDB4MDEwMDAwMDAgIC8qIHJlYWQvd3JpdGUgc3lzdGVtY2FsbHMgKi8KKyNkZWZpbmUgVjRMMl9DQVBfQVNZTkNJTyAgICAgICAgMHgwMjAwMDAwMCAgLyogYXN5bmMgSS9PICovCisjZGVmaW5lIFY0TDJfQ0FQX1NUUkVBTUlORyAgICAgIDB4MDQwMDAwMDAgIC8qIHN0cmVhbWluZyBJL08gaW9jdGxzICovCisKKy8qCisgKglWIEkgRCBFIE8gICBJIE0gQSBHIEUgICBGIE8gUiBNIEEgVAorICovCisKK3N0cnVjdCB2NGwyX3BpeF9mb3JtYXQKK3sKKwlfX3UzMiAgICAgICAgIAkgCXdpZHRoOworCV9fdTMyCSAgICAgICAgIAloZWlnaHQ7CisJX191MzIJICAgICAgICAgCXBpeGVsZm9ybWF0OworCWVudW0gdjRsMl9maWVsZCAgCWZpZWxkOworCV9fdTMyICAgICAgICAgICAgCWJ5dGVzcGVybGluZTsJLyogZm9yIHBhZGRpbmcsIHplcm8gaWYgdW51c2VkICovCisJX191MzIgICAgICAgICAgCSAJc2l6ZWltYWdlOworICAgICAgICBlbnVtIHY0bDJfY29sb3JzcGFjZQljb2xvcnNwYWNlOworCV9fdTMyCQkJcHJpdjsJCS8qIHByaXZhdGUgZGF0YSwgZGVwZW5kcyBvbiBwaXhlbGZvcm1hdCAqLworfTsKKworLyogICAgICAgICAgIFBpeGVsIGZvcm1hdCAgICBGT1VSQ0MgICAgICAgICAgICAgICAgICBkZXB0aCAgRGVzY3JpcHRpb24gICAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfUkdCMzMyICB2NGwyX2ZvdXJjYygnUicsJ0cnLCdCJywnMScpIC8qICA4ICBSR0ItMy0zLTIgICAgICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9SR0I1NTUgIHY0bDJfZm91cmNjKCdSJywnRycsJ0InLCdPJykgLyogMTYgIFJHQi01LTUtNSAgICAgKi8KKyNkZWZpbmUgVjRMMl9QSVhfRk1UX1JHQjU2NSAgdjRsMl9mb3VyY2MoJ1InLCdHJywnQicsJ1AnKSAvKiAxNiAgUkdCLTUtNi01ICAgICAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfUkdCNTU1WCB2NGwyX2ZvdXJjYygnUicsJ0cnLCdCJywnUScpIC8qIDE2ICBSR0ItNS01LTUgQkUgICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9SR0I1NjVYIHY0bDJfZm91cmNjKCdSJywnRycsJ0InLCdSJykgLyogMTYgIFJHQi01LTYtNSBCRSAgKi8KKyNkZWZpbmUgVjRMMl9QSVhfRk1UX0JHUjI0ICAgdjRsMl9mb3VyY2MoJ0InLCdHJywnUicsJzMnKSAvKiAyNCAgQkdSLTgtOC04ICAgICAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfUkdCMjQgICB2NGwyX2ZvdXJjYygnUicsJ0cnLCdCJywnMycpIC8qIDI0ICBSR0ItOC04LTggICAgICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9CR1IzMiAgIHY0bDJfZm91cmNjKCdCJywnRycsJ1InLCc0JykgLyogMzIgIEJHUi04LTgtOC04ICAgKi8KKyNkZWZpbmUgVjRMMl9QSVhfRk1UX1JHQjMyICAgdjRsMl9mb3VyY2MoJ1InLCdHJywnQicsJzQnKSAvKiAzMiAgUkdCLTgtOC04LTggICAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfR1JFWSAgICB2NGwyX2ZvdXJjYygnRycsJ1InLCdFJywnWScpIC8qICA4ICBHcmV5c2NhbGUgICAgICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9ZVlU0MTAgIHY0bDJfZm91cmNjKCdZJywnVicsJ1UnLCc5JykgLyogIDkgIFlWVSA0OjE6MCAgICAgKi8KKyNkZWZpbmUgVjRMMl9QSVhfRk1UX1lWVTQyMCAgdjRsMl9mb3VyY2MoJ1knLCdWJywnMScsJzInKSAvKiAxMiAgWVZVIDQ6MjowICAgICAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfWVVZViAgICB2NGwyX2ZvdXJjYygnWScsJ1UnLCdZJywnVicpIC8qIDE2ICBZVVYgNDoyOjIgICAgICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9VWVZZICAgIHY0bDJfZm91cmNjKCdVJywnWScsJ1YnLCdZJykgLyogMTYgIFlVViA0OjI6MiAgICAgKi8KKyNkZWZpbmUgVjRMMl9QSVhfRk1UX1lVVjQyMlAgdjRsMl9mb3VyY2MoJzQnLCcyJywnMicsJ1AnKSAvKiAxNiAgWVZVNDIyIHBsYW5hciAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfWVVWNDExUCB2NGwyX2ZvdXJjYygnNCcsJzEnLCcxJywnUCcpIC8qIDE2ICBZVlU0MTEgcGxhbmFyICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9ZNDFQICAgIHY0bDJfZm91cmNjKCdZJywnNCcsJzEnLCdQJykgLyogMTIgIFlVViA0OjE6MSAgICAgKi8KKworLyogdHdvIHBsYW5lcyAtLSBvbmUgWSwgb25lIENyICsgQ2IgaW50ZXJsZWF2ZWQgICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9OVjEyICAgIHY0bDJfZm91cmNjKCdOJywnVicsJzEnLCcyJykgLyogMTIgIFkvQ2JDciA0OjI6MCAgKi8KKyNkZWZpbmUgVjRMMl9QSVhfRk1UX05WMjEgICAgdjRsMl9mb3VyY2MoJ04nLCdWJywnMicsJzEnKSAvKiAxMiAgWS9DckNiIDQ6MjowICAqLworCisvKiAgVGhlIGZvbGxvd2luZyBmb3JtYXRzIGFyZSBub3QgZGVmaW5lZCBpbiB0aGUgVjRMMiBzcGVjaWZpY2F0aW9uICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9ZVVY0MTAgIHY0bDJfZm91cmNjKCdZJywnVScsJ1YnLCc5JykgLyogIDkgIFlVViA0OjE6MCAgICAgKi8KKyNkZWZpbmUgVjRMMl9QSVhfRk1UX1lVVjQyMCAgdjRsMl9mb3VyY2MoJ1knLCdVJywnMScsJzInKSAvKiAxMiAgWVVWIDQ6MjowICAgICAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfWVlVViAgICB2NGwyX2ZvdXJjYygnWScsJ1knLCdVJywnVicpIC8qIDE2ICBZVVYgNDoyOjIgICAgICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9ISTI0MCAgIHY0bDJfZm91cmNjKCdIJywnSScsJzInLCc0JykgLyogIDggIDgtYml0IGNvbG9yICAgKi8KKworLyogc2VlIGh0dHA6Ly93d3cuc2lsaWNvbmltYWdpbmcuY29tL1JHQiUyMEJheWVyLmh0bSAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfU0JHR1I4ICB2NGwyX2ZvdXJjYygnQicsJ0EnLCc4JywnMScpIC8qICA4ICBCR0JHLi4gR1JHUi4uICovCisKKy8qIGNvbXByZXNzZWQgZm9ybWF0cyAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfTUpQRUcgICAgdjRsMl9mb3VyY2MoJ00nLCdKJywnUCcsJ0cnKSAvKiBNb3Rpb24tSlBFRyAgICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9KUEVHICAgICB2NGwyX2ZvdXJjYygnSicsJ1AnLCdFJywnRycpIC8qIEpGSUYgSlBFRyAgICAgKi8KKyNkZWZpbmUgVjRMMl9QSVhfRk1UX0RWICAgICAgIHY0bDJfZm91cmNjKCdkJywndicsJ3MnLCdkJykgLyogMTM5NCAgICAgICAgICAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfTVBFRyAgICAgdjRsMl9mb3VyY2MoJ00nLCdQJywnRScsJ0cnKSAvKiBNUEVHICAgICAgICAgICovCisKKy8qICBWZW5kb3Itc3BlY2lmaWMgZm9ybWF0cyAgICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9XTlZBICAgICB2NGwyX2ZvdXJjYygnVycsJ04nLCdWJywnQScpIC8qIFdpbm5vdiBodyBjb21wcmVzcyAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfU045QzEwWCAgdjRsMl9mb3VyY2MoJ1MnLCc5JywnMScsJzAnKSAvKiBTTjlDMTB4IGNvbXByZXNzaW9uICovCisKKy8qCisgKglGIE8gUiBNIEEgVCAgIEUgTiBVIE0gRSBSIEEgVCBJIE8gTgorICovCitzdHJ1Y3QgdjRsMl9mbXRkZXNjCit7CisJX191MzIJICAgICAgICAgICAgaW5kZXg7ICAgICAgICAgICAgIC8qIEZvcm1hdCBudW1iZXIgICAgICAqLworCWVudW0gdjRsMl9idWZfdHlwZSAgdHlwZTsgICAgICAgICAgICAgIC8qIGJ1ZmZlciB0eXBlICAgICAgICAqLworCV9fdTMyICAgICAgICAgICAgICAgZmxhZ3M7CisJX191OAkgICAgICAgICAgICBkZXNjcmlwdGlvblszMl07ICAgLyogRGVzY3JpcHRpb24gc3RyaW5nICovCisJX191MzIJICAgICAgICAgICAgcGl4ZWxmb3JtYXQ7ICAgICAgIC8qIEZvcm1hdCBmb3VyY2MgICAgICAqLworCV9fdTMyCSAgICAgICAgICAgIHJlc2VydmVkWzRdOworfTsKKworI2RlZmluZSBWNEwyX0ZNVF9GTEFHX0NPTVBSRVNTRUQgMHgwMDAxCisKKworLyoKKyAqCVQgSSBNIEUgQyBPIEQgRQorICovCitzdHJ1Y3QgdjRsMl90aW1lY29kZQoreworCV9fdTMyCXR5cGU7CisJX191MzIJZmxhZ3M7CisJX191OAlmcmFtZXM7CisJX191OAlzZWNvbmRzOworCV9fdTgJbWludXRlczsKKwlfX3U4CWhvdXJzOworCV9fdTgJdXNlcmJpdHNbNF07Cit9OworCisvKiAgVHlwZSAgKi8KKyNkZWZpbmUgVjRMMl9UQ19UWVBFXzI0RlBTCQkxCisjZGVmaW5lIFY0TDJfVENfVFlQRV8yNUZQUwkJMgorI2RlZmluZSBWNEwyX1RDX1RZUEVfMzBGUFMJCTMKKyNkZWZpbmUgVjRMMl9UQ19UWVBFXzUwRlBTCQk0CisjZGVmaW5lIFY0TDJfVENfVFlQRV82MEZQUwkJNQorCisvKiAgRmxhZ3MgICovCisjZGVmaW5lIFY0TDJfVENfRkxBR19EUk9QRlJBTUUJCTB4MDAwMSAvKiAiZHJvcC1mcmFtZSIgbW9kZSAqLworI2RlZmluZSBWNEwyX1RDX0ZMQUdfQ09MT1JGUkFNRQkJMHgwMDAyCisjZGVmaW5lIFY0TDJfVENfVVNFUkJJVFNfZmllbGQJCTB4MDAwQworI2RlZmluZSBWNEwyX1RDX1VTRVJCSVRTX1VTRVJERUZJTkVECTB4MDAwMAorI2RlZmluZSBWNEwyX1RDX1VTRVJCSVRTXzhCSVRDSEFSUwkweDAwMDgKKy8qIFRoZSBhYm92ZSBpcyBiYXNlZCBvbiBTTVBURSB0aW1lY29kZXMgKi8KKworCisjaWYgMQorLyoKKyAqCU0gUCBFIEcgICBDIE8gTSBQIFIgRSBTIFMgSSBPIE4gICBQIEEgUiBBIE0gRSBUIEUgUiBTCisgKgorICogICMjIyBXQVJOSU5HOiB0aGlzIGlzIHN0aWxsIHdvcmstaW4tcHJvZ3Jlc3MgcmlnaHQgbm93LCBtb3N0IGxpa2VseQorICogICMjIyAgICAgICAgICB0aGVyZSB3aWxsIGJlIHNvbWUgaW5jb21wYXRpYmxlIGNoYW5nZXMuCisgKgorICovCisKKworZW51bSB2NGwyX2JpdHJhdGVfbW9kZSB7CisJVjRMMl9CSVRSQVRFX05PTkUgPSAwLAkvKiBub3Qgc3BlY2lmaWVkICovCisJVjRMMl9CSVRSQVRFX0NCUiwJLyogY29uc3RhbnQgYml0cmF0ZSAqLworCVY0TDJfQklUUkFURV9WQlIsCS8qIHZhcmlhYmxlIGJpdHJhdGUgKi8KK307CitzdHJ1Y3QgdjRsMl9iaXRyYXRlIHsKKwkvKiByYXRlcyBhcmUgc3BlY2lmaWVkIGluIGtiaXQvc2VjICovCisJZW51bSB2NGwyX2JpdHJhdGVfbW9kZQltb2RlOworCV9fdTMyCQkJbWluOworCV9fdTMyCQkJdGFyZ2V0OyAgLyogdXNlIHRoaXMgb25lIGZvciBDQlIgKi8KKwlfX3UzMgkJCW1heDsKK307CisKK2VudW0gdjRsMl9tcGVnX3N0cmVhbXR5cGUgeworCVY0TDJfTVBFR19TU18xLAkJLyogTVBFRy0xIHN5c3RlbSBzdHJlYW0gKi8KKwlWNEwyX01QRUdfUFNfMiwJCS8qIE1QRUctMiBwcm9ncmFtIHN0cmVhbSAqLworCVY0TDJfTVBFR19UU18yLAkJLyogTVBFRy0yIHRyYW5zcG9ydCBzdHJlYW0gKi8KKwlWNEwyX01QRUdfUFNfRFZELCAgICAgIAkvKiBNUEVHLTIgcHJvZ3JhbSBzdHJlYW0gd2l0aCBEVkQgaGVhZGVyIGZpeHVwcyAqLworfTsKK2VudW0gdjRsMl9tcGVnX2F1ZGlvdHlwZSB7CisJVjRMMl9NUEVHX0FVXzJfSSwJLyogTVBFRy0yIGxheWVyIDEgKi8KKwlWNEwyX01QRUdfQVVfMl9JSSwJLyogTVBFRy0yIGxheWVyIDIgKi8KKwlWNEwyX01QRUdfQVVfMl9JSUksCS8qIE1QRUctMiBsYXllciAzICovCisJVjRMMl9NUEVHX0FDMywJCS8qIEFDMyAqLworCVY0TDJfTVBFR19MUENNLAkJLyogTFBDTSAqLworfTsKK2VudW0gdjRsMl9tcGVnX3ZpZGVvdHlwZSB7CisJVjRMMl9NUEVHX1ZJXzEsCQkvKiBNUEVHLTEgKi8KKwlWNEwyX01QRUdfVklfMiwJCS8qIE1QRUctMiAqLworfTsKK2VudW0gdjRsMl9tcGVnX2FzcGVjdHJhdGlvIHsKKwlWNEwyX01QRUdfQVNQRUNUX1NRVUFSRSA9IDEsICAgLyogc3F1YXJlIHBpeGVsICovCisJVjRMMl9NUEVHX0FTUEVDVF80XzMgICAgPSAyLCAgIC8qICA0IDogMyAgICAgICAqLworCVY0TDJfTVBFR19BU1BFQ1RfMTZfOSAgID0gMywgICAvKiAxNiA6IDkgICAgICAgKi8KKwlWNEwyX01QRUdfQVNQRUNUXzFfMjIxICA9IDQsICAgLyogIDEgOiAyLDIxICAgICovCit9OworCitzdHJ1Y3QgdjRsMl9tcGVnX2NvbXByZXNzaW9uIHsKKwkvKiBnZW5lcmFsICovCisJZW51bSB2NGwyX21wZWdfc3RyZWFtdHlwZQlzdF90eXBlOworCXN0cnVjdCB2NGwyX2JpdHJhdGUJCXN0X2JpdHJhdGU7CisKKwkvKiB0cmFuc3BvcnQgc3RyZWFtcyAqLworCV9fdTE2CQkJCXRzX3BpZF9wbXQ7CisJX191MTYJCQkJdHNfcGlkX2F1ZGlvOworCV9fdTE2CQkJCXRzX3BpZF92aWRlbzsKKwlfX3UxNgkJCQl0c19waWRfcGNyOworCisJLyogcHJvZ3JhbSBzdHJlYW0gKi8KKwlfX3UxNgkJCQlwc19zaXplOworCV9fdTE2CQkJCXJlc2VydmVkXzE7ICAgIC8qIGFsaWduICovCisKKwkvKiBhdWRpbyAqLworCWVudW0gdjRsMl9tcGVnX2F1ZGlvdHlwZQlhdV90eXBlOworCXN0cnVjdCB2NGwyX2JpdHJhdGUJCWF1X2JpdHJhdGU7CisJX191MzIJCQkJYXVfc2FtcGxlX3JhdGU7CisJX191OCAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdV9wZXNpZDsKKwlfX3U4ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2VydmVkXzJbM107IC8qIGFsaWduICovCisKKwkvKiB2aWRlbyAqLworCWVudW0gdjRsMl9tcGVnX3ZpZGVvdHlwZQl2aV90eXBlOworCWVudW0gdjRsMl9tcGVnX2FzcGVjdHJhdGlvCXZpX2FzcGVjdF9yYXRpbzsKKwlzdHJ1Y3QgdjRsMl9iaXRyYXRlCQl2aV9iaXRyYXRlOworCV9fdTMyCQkJCXZpX2ZyYW1lX3JhdGU7CisJX191MTYJCQkJdmlfZnJhbWVzX3Blcl9nb3A7CisJX191MTYJCQkJdmlfYmZyYW1lc19jb3VudDsKKwlfX3U4ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpX3Blc2lkOworCV9fdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWRfM1szXTsgLyogYWxpZ24gKi8KKworCS8qIG1pc2MgZmxhZ3MgKi8KKwlfX3UzMiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlZF9nb3BzOjE7CisJX191MzIgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWxsZG93bjoxOworCV9fdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWRfNDozMDsgLyogYWxpZ24gKi8KKworCS8qIEkgZG9uJ3QgZXhwZWN0IHRoZSBhYm92ZSBiZWluZyBwZXJmZWN0IHlldCA7KSAqLworCV9fdTMyCQkJCXJlc2VydmVkXzVbOF07Cit9OworI2VuZGlmCisKK3N0cnVjdCB2NGwyX2pwZWdjb21wcmVzc2lvbgoreworCWludCBxdWFsaXR5OworCisJaW50ICBBUFBuOyAgICAgICAgICAgICAgLyogTnVtYmVyIG9mIEFQUCBzZWdtZW50IHRvIGJlIHdyaXR0ZW4sCisJCQkJICogbXVzdCBiZSAwLi4xNSAqLworCWludCAgQVBQX2xlbjsgICAgICAgICAgIC8qIExlbmd0aCBvZiBkYXRhIGluIEpQRUcgQVBQbiBzZWdtZW50ICovCisJY2hhciBBUFBfZGF0YVs2MF07ICAgICAgLyogRGF0YSBpbiB0aGUgSlBFRyBBUFBuIHNlZ21lbnQuICovCisKKwlpbnQgIENPTV9sZW47ICAgICAgICAgICAvKiBMZW5ndGggb2YgZGF0YSBpbiBKUEVHIENPTSBzZWdtZW50ICovCisJY2hhciBDT01fZGF0YVs2MF07ICAgICAgLyogRGF0YSBpbiBKUEVHIENPTSBzZWdtZW50ICovCisKKwlfX3UzMiBqcGVnX21hcmtlcnM7ICAgICAvKiBXaGljaCBtYXJrZXJzIHNob3VsZCBnbyBpbnRvIHRoZSBKUEVHCisJCQkJICogb3V0cHV0LiBVbmxlc3MgeW91IGV4YWN0bHkga25vdyB3aGF0CisJCQkJICogeW91IGRvLCBsZWF2ZSB0aGVtIHVudG91Y2hlZC4KKwkJCQkgKiBJbmx1ZGluZyBsZXNzIG1hcmtlcnMgd2lsbCBtYWtlIHRoZQorCQkJCSAqIHJlc3VsdGluZyBjb2RlIHNtYWxsZXIsIGJ1dCB0aGVyZSB3aWxsCisJCQkJICogYmUgZmV3ZXIgYXBsaWNhdGlvbnMgd2hpY2ggY2FuIHJlYWQgaXQuCisJCQkJICogVGhlIHByZXNlbmNlIG9mIHRoZSBBUFAgYW5kIENPTSBtYXJrZXIKKwkJCQkgKiBpcyBpbmZsdWVuY2VkIGJ5IEFQUF9sZW4gYW5kIENPTV9sZW4KKwkJCQkgKiBPTkxZLCBub3QgYnkgdGhpcyBwcm9wZXJ0eSEgKi8KKworI2RlZmluZSBWNEwyX0pQRUdfTUFSS0VSX0RIVCAoMTw8MykgICAgLyogRGVmaW5lIEh1ZmZtYW4gVGFibGVzICovCisjZGVmaW5lIFY0TDJfSlBFR19NQVJLRVJfRFFUICgxPDw0KSAgICAvKiBEZWZpbmUgUXVhbnRpemF0aW9uIFRhYmxlcyAqLworI2RlZmluZSBWNEwyX0pQRUdfTUFSS0VSX0RSSSAoMTw8NSkgICAgLyogRGVmaW5lIFJlc3RhcnQgSW50ZXJ2YWwgKi8KKyNkZWZpbmUgVjRMMl9KUEVHX01BUktFUl9DT00gKDE8PDYpICAgIC8qIENvbW1lbnQgc2VnbWVudCAqLworI2RlZmluZSBWNEwyX0pQRUdfTUFSS0VSX0FQUCAoMTw8NykgICAgLyogQXBwIHNlZ21lbnQsIGRyaXZlciB3aWxsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBhbGx3YXlzIHVzZSBBUFAwICovCit9OworCisKKy8qCisgKglNIEUgTSBPIFIgWSAtIE0gQSBQIFAgSSBOIEcgICBCIFUgRiBGIEUgUiBTCisgKi8KK3N0cnVjdCB2NGwyX3JlcXVlc3RidWZmZXJzCit7CisJX191MzIJICAgICAgICAgICAgICAgIGNvdW50OworCWVudW0gdjRsMl9idWZfdHlwZSAgICAgIHR5cGU7CisJZW51bSB2NGwyX21lbW9yeSAgICAgICAgbWVtb3J5OworCV9fdTMyCSAgICAgICAgICAgICAgICByZXNlcnZlZFsyXTsKK307CisKK3N0cnVjdCB2NGwyX2J1ZmZlcgoreworCV9fdTMyCQkJaW5kZXg7CisJZW51bSB2NGwyX2J1Zl90eXBlICAgICAgdHlwZTsKKwlfX3UzMgkJCWJ5dGVzdXNlZDsKKwlfX3UzMgkJCWZsYWdzOworCWVudW0gdjRsMl9maWVsZAkJZmllbGQ7CisJc3RydWN0IHRpbWV2YWwJCXRpbWVzdGFtcDsKKwlzdHJ1Y3QgdjRsMl90aW1lY29kZQl0aW1lY29kZTsKKwlfX3UzMgkJCXNlcXVlbmNlOworCisJLyogbWVtb3J5IGxvY2F0aW9uICovCisJZW51bSB2NGwyX21lbW9yeSAgICAgICAgbWVtb3J5OworCXVuaW9uIHsKKwkJX191MzIgICAgICAgICAgIG9mZnNldDsKKwkJdW5zaWduZWQgbG9uZyAgIHVzZXJwdHI7CisJfSBtOworCV9fdTMyCQkJbGVuZ3RoOworCV9fdTMyCQkJaW5wdXQ7CisJX191MzIJCQlyZXNlcnZlZDsKK307CisKKy8qICBGbGFncyBmb3IgJ2ZsYWdzJyBmaWVsZCAqLworI2RlZmluZSBWNEwyX0JVRl9GTEFHX01BUFBFRAkweDAwMDEgIC8qIEJ1ZmZlciBpcyBtYXBwZWQgKGZsYWcpICovCisjZGVmaW5lIFY0TDJfQlVGX0ZMQUdfUVVFVUVECTB4MDAwMgkvKiBCdWZmZXIgaXMgcXVldWVkIGZvciBwcm9jZXNzaW5nICovCisjZGVmaW5lIFY0TDJfQlVGX0ZMQUdfRE9ORQkweDAwMDQJLyogQnVmZmVyIGlzIHJlYWR5ICovCisjZGVmaW5lIFY0TDJfQlVGX0ZMQUdfS0VZRlJBTUUJMHgwMDA4CS8qIEltYWdlIGlzIGEga2V5ZnJhbWUgKEktZnJhbWUpICovCisjZGVmaW5lIFY0TDJfQlVGX0ZMQUdfUEZSQU1FCTB4MDAxMAkvKiBJbWFnZSBpcyBhIFAtZnJhbWUgKi8KKyNkZWZpbmUgVjRMMl9CVUZfRkxBR19CRlJBTUUJMHgwMDIwCS8qIEltYWdlIGlzIGEgQi1mcmFtZSAqLworI2RlZmluZSBWNEwyX0JVRl9GTEFHX1RJTUVDT0RFCTB4MDEwMAkvKiB0aW1lY29kZSBmaWVsZCBpcyB2YWxpZCAqLworI2RlZmluZSBWNEwyX0JVRl9GTEFHX0lOUFVUICAgICAweDAyMDAgIC8qIGlucHV0IGZpZWxkIGlzIHZhbGlkICovCisKKy8qCisgKglPIFYgRSBSIEwgQSBZICAgUCBSIEUgViBJIEUgVworICovCitzdHJ1Y3QgdjRsMl9mcmFtZWJ1ZmZlcgoreworCV9fdTMyCQkJY2FwYWJpbGl0eTsKKwlfX3UzMgkJCWZsYWdzOworLyogRklYTUU6IGluIHRoZW9yeSB3ZSBzaG91bGQgcGFzcyBzb21ldGhpbmcgbGlrZSBQQ0kgZGV2aWNlICsgbWVtb3J5CisgKiByZWdpb24gKyBvZmZzZXQgaW5zdGVhZCBvZiBzb21lIHBoeXNpY2FsIGFkZHJlc3MgKi8KKwl2b2lkKiAgICAgICAgICAgICAgICAgICBiYXNlOworCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQJZm10OworfTsKKy8qICBGbGFncyBmb3IgdGhlICdjYXBhYmlsaXR5JyBmaWVsZC4gUmVhZCBvbmx5ICovCisjZGVmaW5lIFY0TDJfRkJVRl9DQVBfRVhURVJOT1ZFUkxBWQkweDAwMDEKKyNkZWZpbmUgVjRMMl9GQlVGX0NBUF9DSFJPTUFLRVkJCTB4MDAwMgorI2RlZmluZSBWNEwyX0ZCVUZfQ0FQX0xJU1RfQ0xJUFBJTkcgICAgIDB4MDAwNAorI2RlZmluZSBWNEwyX0ZCVUZfQ0FQX0JJVE1BUF9DTElQUElORwkweDAwMDgKKy8qICBGbGFncyBmb3IgdGhlICdmbGFncycgZmllbGQuICovCisjZGVmaW5lIFY0TDJfRkJVRl9GTEFHX1BSSU1BUlkJCTB4MDAwMQorI2RlZmluZSBWNEwyX0ZCVUZfRkxBR19PVkVSTEFZCQkweDAwMDIKKyNkZWZpbmUgVjRMMl9GQlVGX0ZMQUdfQ0hST01BS0VZCTB4MDAwNAorCitzdHJ1Y3QgdjRsMl9jbGlwCit7CisJc3RydWN0IHY0bDJfcmVjdCAgICAgICAgYzsKKwlzdHJ1Y3QgdjRsMl9jbGlwCSpuZXh0OworfTsKKworc3RydWN0IHY0bDJfd2luZG93Cit7CisJc3RydWN0IHY0bDJfcmVjdCAgICAgICAgdzsKKwllbnVtIHY0bDJfZmllbGQgIAlmaWVsZDsKKwlfX3UzMgkJCWNocm9tYWtleTsKKwlzdHJ1Y3QgdjRsMl9jbGlwCV9fdXNlciAqY2xpcHM7CisJX191MzIJCQljbGlwY291bnQ7CisJdm9pZAkJCV9fdXNlciAqYml0bWFwOworfTsKKworCisvKgorICoJQyBBIFAgVCBVIFIgRSAgIFAgQSBSIEEgTSBFIFQgRSBSIFMKKyAqLworc3RydWN0IHY0bDJfY2FwdHVyZXBhcm0KK3sKKwlfX3UzMgkJICAgY2FwYWJpbGl0eTsJICAvKiAgU3VwcG9ydGVkIG1vZGVzICovCisJX191MzIJCSAgIGNhcHR1cmVtb2RlOwkgIC8qICBDdXJyZW50IG1vZGUgKi8KKwlzdHJ1Y3QgdjRsMl9mcmFjdCAgdGltZXBlcmZyYW1lOyAgLyogIFRpbWUgcGVyIGZyYW1lIGluIC4xdXMgdW5pdHMgKi8KKwlfX3UzMgkJICAgZXh0ZW5kZWRtb2RlOyAgLyogIERyaXZlci1zcGVjaWZpYyBleHRlbnNpb25zICovCisJX191MzIgICAgICAgICAgICAgIHJlYWRidWZmZXJzOyAgIC8qICAjIG9mIGJ1ZmZlcnMgZm9yIHJlYWQgKi8KKwlfX3UzMgkJICAgcmVzZXJ2ZWRbNF07Cit9OworLyogIEZsYWdzIGZvciAnY2FwYWJpbGl0eScgYW5kICdjYXB0dXJlbW9kZScgZmllbGRzICovCisjZGVmaW5lIFY0TDJfTU9ERV9ISUdIUVVBTElUWQkweDAwMDEJLyogIEhpZ2ggcXVhbGl0eSBpbWFnaW5nIG1vZGUgKi8KKyNkZWZpbmUgVjRMMl9DQVBfVElNRVBFUkZSQU1FCTB4MTAwMAkvKiAgdGltZXBlcmZyYW1lIGZpZWxkIGlzIHN1cHBvcnRlZCAqLworCitzdHJ1Y3QgdjRsMl9vdXRwdXRwYXJtCit7CisJX191MzIJCSAgIGNhcGFiaWxpdHk7CSAvKiAgU3VwcG9ydGVkIG1vZGVzICovCisJX191MzIJCSAgIG91dHB1dG1vZGU7CSAvKiAgQ3VycmVudCBtb2RlICovCisJc3RydWN0IHY0bDJfZnJhY3QgIHRpbWVwZXJmcmFtZTsgLyogIFRpbWUgcGVyIGZyYW1lIGluIHNlY29uZHMgKi8KKwlfX3UzMgkJICAgZXh0ZW5kZWRtb2RlOyAvKiAgRHJpdmVyLXNwZWNpZmljIGV4dGVuc2lvbnMgKi8KKwlfX3UzMiAgICAgICAgICAgICAgd3JpdGVidWZmZXJzOyAvKiAgIyBvZiBidWZmZXJzIGZvciB3cml0ZSAqLworCV9fdTMyCQkgICByZXNlcnZlZFs0XTsKK307CisKKy8qCisgKglJIE4gUCBVIFQgICBJIE0gQSBHIEUgICBDIFIgTyBQIFAgSSBOIEcKKyAqLworCitzdHJ1Y3QgdjRsMl9jcm9wY2FwIHsKKwllbnVtIHY0bDJfYnVmX3R5cGUgICAgICB0eXBlOworICAgICAgICBzdHJ1Y3QgdjRsMl9yZWN0ICAgICAgICBib3VuZHM7CisgICAgICAgIHN0cnVjdCB2NGwyX3JlY3QgICAgICAgIGRlZnJlY3Q7CisgICAgICAgIHN0cnVjdCB2NGwyX2ZyYWN0ICAgICAgIHBpeGVsYXNwZWN0OworfTsKKworc3RydWN0IHY0bDJfY3JvcCB7CisJZW51bSB2NGwyX2J1Zl90eXBlICAgICAgdHlwZTsKKwlzdHJ1Y3QgdjRsMl9yZWN0ICAgICAgICBjOworfTsKKworLyoKKyAqICAgICAgQSBOIEEgTCBPIEcgICBWIEkgRCBFIE8gICBTIFQgQSBOIEQgQSBSIEQKKyAqLworCit0eXBlZGVmIF9fdTY0IHY0bDJfc3RkX2lkOworCisvKiBvbmUgYml0IGZvciBlYWNoICovCisjZGVmaW5lIFY0TDJfU1REX1BBTF9CICAgICAgICAgICgodjRsMl9zdGRfaWQpMHgwMDAwMDAwMSkKKyNkZWZpbmUgVjRMMl9TVERfUEFMX0IxICAgICAgICAgKCh2NGwyX3N0ZF9pZCkweDAwMDAwMDAyKQorI2RlZmluZSBWNEwyX1NURF9QQUxfRyAgICAgICAgICAoKHY0bDJfc3RkX2lkKTB4MDAwMDAwMDQpCisjZGVmaW5lIFY0TDJfU1REX1BBTF9IICAgICAgICAgICgodjRsMl9zdGRfaWQpMHgwMDAwMDAwOCkKKyNkZWZpbmUgVjRMMl9TVERfUEFMX0kgICAgICAgICAgKCh2NGwyX3N0ZF9pZCkweDAwMDAwMDEwKQorI2RlZmluZSBWNEwyX1NURF9QQUxfRCAgICAgICAgICAoKHY0bDJfc3RkX2lkKTB4MDAwMDAwMjApCisjZGVmaW5lIFY0TDJfU1REX1BBTF9EMSAgICAgICAgICgodjRsMl9zdGRfaWQpMHgwMDAwMDA0MCkKKyNkZWZpbmUgVjRMMl9TVERfUEFMX0sgICAgICAgICAgKCh2NGwyX3N0ZF9pZCkweDAwMDAwMDgwKQorCisjZGVmaW5lIFY0TDJfU1REX1BBTF9NICAgICAgICAgICgodjRsMl9zdGRfaWQpMHgwMDAwMDEwMCkKKyNkZWZpbmUgVjRMMl9TVERfUEFMX04gICAgICAgICAgKCh2NGwyX3N0ZF9pZCkweDAwMDAwMjAwKQorI2RlZmluZSBWNEwyX1NURF9QQUxfTmMgICAgICAgICAoKHY0bDJfc3RkX2lkKTB4MDAwMDA0MDApCisjZGVmaW5lIFY0TDJfU1REX1BBTF82MCAgICAgICAgICgodjRsMl9zdGRfaWQpMHgwMDAwMDgwMCkKKworI2RlZmluZSBWNEwyX1NURF9OVFNDX00gICAgICAgICAoKHY0bDJfc3RkX2lkKTB4MDAwMDEwMDApCisjZGVmaW5lIFY0TDJfU1REX05UU0NfTV9KUCAgICAgICgodjRsMl9zdGRfaWQpMHgwMDAwMjAwMCkKKworI2RlZmluZSBWNEwyX1NURF9TRUNBTV9CICAgICAgICAoKHY0bDJfc3RkX2lkKTB4MDAwMTAwMDApCisjZGVmaW5lIFY0TDJfU1REX1NFQ0FNX0QgICAgICAgICgodjRsMl9zdGRfaWQpMHgwMDAyMDAwMCkKKyNkZWZpbmUgVjRMMl9TVERfU0VDQU1fRyAgICAgICAgKCh2NGwyX3N0ZF9pZCkweDAwMDQwMDAwKQorI2RlZmluZSBWNEwyX1NURF9TRUNBTV9IICAgICAgICAoKHY0bDJfc3RkX2lkKTB4MDAwODAwMDApCisjZGVmaW5lIFY0TDJfU1REX1NFQ0FNX0sgICAgICAgICgodjRsMl9zdGRfaWQpMHgwMDEwMDAwMCkKKyNkZWZpbmUgVjRMMl9TVERfU0VDQU1fSzEgICAgICAgKCh2NGwyX3N0ZF9pZCkweDAwMjAwMDAwKQorI2RlZmluZSBWNEwyX1NURF9TRUNBTV9MICAgICAgICAoKHY0bDJfc3RkX2lkKTB4MDA0MDAwMDApCisKKy8qIEFUU0MvSERUViAqLworI2RlZmluZSBWNEwyX1NURF9BVFNDXzhfVlNCICAgICAoKHY0bDJfc3RkX2lkKTB4MDEwMDAwMDApCisjZGVmaW5lIFY0TDJfU1REX0FUU0NfMTZfVlNCICAgICgodjRsMl9zdGRfaWQpMHgwMjAwMDAwMCkKKworLyogc29tZSBjb21tb24gbmVlZGVkIHN0dWZmICovCisjZGVmaW5lIFY0TDJfU1REX1BBTF9CRwkJKFY0TDJfU1REX1BBTF9CCQl8XAorCQkJCSBWNEwyX1NURF9QQUxfQjEJfFwKKwkJCQkgVjRMMl9TVERfUEFMX0cpCisjZGVmaW5lIFY0TDJfU1REX1BBTF9ESwkJKFY0TDJfU1REX1BBTF9ECQl8XAorCQkJCSBWNEwyX1NURF9QQUxfRDEJfFwKKwkJCQkgVjRMMl9TVERfUEFMX0spCisjZGVmaW5lIFY0TDJfU1REX1BBTAkJKFY0TDJfU1REX1BBTF9CRwl8XAorCQkJCSBWNEwyX1NURF9QQUxfREsJfFwKKwkJCQkgVjRMMl9TVERfUEFMX0gJCXxcCisJCQkJIFY0TDJfU1REX1BBTF9JKQorI2RlZmluZSBWNEwyX1NURF9OVFNDICAgICAgICAgICAoVjRMMl9TVERfTlRTQ19NCXxcCisJCQkJIFY0TDJfU1REX05UU0NfTV9KUCkKKyNkZWZpbmUgVjRMMl9TVERfU0VDQU1fREsgICAgICAJKFY0TDJfU1REX1NFQ0FNX0QJfFwKKwkJCQkgVjRMMl9TVERfU0VDQU1fSwl8XAorCQkJCSBWNEwyX1NURF9TRUNBTV9LMSkKKyNkZWZpbmUgVjRMMl9TVERfU0VDQU0JCShWNEwyX1NURF9TRUNBTV9CCXxcCisJCQkJIFY0TDJfU1REX1NFQ0FNX0cJfFwKKwkJCQkgVjRMMl9TVERfU0VDQU1fSAl8XAorCQkJCSBWNEwyX1NURF9TRUNBTV9ESwl8XAorCQkJCSBWNEwyX1NURF9TRUNBTV9MKQorCisjZGVmaW5lIFY0TDJfU1REXzUyNV82MAkJKFY0TDJfU1REX1BBTF9NCQl8XAorCQkJCSBWNEwyX1NURF9QQUxfNjAJfFwKKwkJCQkgVjRMMl9TVERfTlRTQykKKyNkZWZpbmUgVjRMMl9TVERfNjI1XzUwCQkoVjRMMl9TVERfUEFMCQl8XAorCQkJCSBWNEwyX1NURF9QQUxfTgkJfFwKKwkJCQkgVjRMMl9TVERfUEFMX05jCXxcCisJCQkJIFY0TDJfU1REX1NFQ0FNKQorI2RlZmluZSBWNEwyX1NURF9BVFNDICAgICAgICAgICAoVjRMMl9TVERfQVRTQ184X1ZTQiAgICB8XAorCQkgICAgICAgICAgICAgICAgIFY0TDJfU1REX0FUU0NfMTZfVlNCKQorCisjZGVmaW5lIFY0TDJfU1REX1VOS05PV04gICAgICAgIDAKKyNkZWZpbmUgVjRMMl9TVERfQUxMICAgICAgICAgICAgKFY0TDJfU1REXzUyNV82MAl8XAorCQkJCSBWNEwyX1NURF82MjVfNTApCisKK3N0cnVjdCB2NGwyX3N0YW5kYXJkCit7CisJX191MzIJICAgICAgIAkgICAgIGluZGV4OworCXY0bDJfc3RkX2lkICAgICAgICAgIGlkOworCV9fdTgJCSAgICAgbmFtZVsyNF07CisJc3RydWN0IHY0bDJfZnJhY3QgICAgZnJhbWVwZXJpb2Q7IC8qIEZyYW1lcywgbm90IGZpZWxkcyAqLworCV9fdTMyCQkgICAgIGZyYW1lbGluZXM7CisJX191MzIJCSAgICAgcmVzZXJ2ZWRbNF07Cit9OworCisKKy8qCisgKglWIEkgRCBFIE8gICBJIE4gUCBVIFQgUworICovCitzdHJ1Y3QgdjRsMl9pbnB1dAoreworCV9fdTMyCSAgICAgaW5kZXg7CQkvKiAgV2hpY2ggaW5wdXQgKi8KKwlfX3U4CSAgICAgbmFtZVszMl07CSAgICAgICAgLyogIExhYmVsICovCisJX191MzIJICAgICB0eXBlOwkJLyogIFR5cGUgb2YgaW5wdXQgKi8KKwlfX3UzMgkgICAgIGF1ZGlvc2V0OwkgICAgICAgIC8qICBBc3NvY2lhdGVkIGF1ZGlvcyAoYml0ZmllbGQpICovCisJX191MzIgICAgICAgIHR1bmVyOyAgICAgICAgICAgICAvKiAgQXNzb2NpYXRlZCB0dW5lciAqLworCXY0bDJfc3RkX2lkICBzdGQ7CisJX191MzIJICAgICBzdGF0dXM7CisJX191MzIJICAgICByZXNlcnZlZFs0XTsKK307CisvKiAgVmFsdWVzIGZvciB0aGUgJ3R5cGUnIGZpZWxkICovCisjZGVmaW5lIFY0TDJfSU5QVVRfVFlQRV9UVU5FUgkJMQorI2RlZmluZSBWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBCQkyCisKKy8qIGZpZWxkICdzdGF0dXMnIC0gZ2VuZXJhbCAqLworI2RlZmluZSBWNEwyX0lOX1NUX05PX1BPV0VSICAgIDB4MDAwMDAwMDEgIC8qIEF0dGFjaGVkIGRldmljZSBpcyBvZmYgKi8KKyNkZWZpbmUgVjRMMl9JTl9TVF9OT19TSUdOQUwgICAweDAwMDAwMDAyCisjZGVmaW5lIFY0TDJfSU5fU1RfTk9fQ09MT1IgICAgMHgwMDAwMDAwNAorCisvKiBmaWVsZCAnc3RhdHVzJyAtIGFuYWxvZyAqLworI2RlZmluZSBWNEwyX0lOX1NUX05PX0hfTE9DSyAgIDB4MDAwMDAxMDAgIC8qIE5vIGhvcml6b250YWwgc3luYyBsb2NrICovCisjZGVmaW5lIFY0TDJfSU5fU1RfQ09MT1JfS0lMTCAgMHgwMDAwMDIwMCAgLyogQ29sb3Iga2lsbGVyIGlzIGFjdGl2ZSAqLworCisvKiBmaWVsZCAnc3RhdHVzJyAtIGRpZ2l0YWwgKi8KKyNkZWZpbmUgVjRMMl9JTl9TVF9OT19TWU5DICAgICAweDAwMDEwMDAwICAvKiBObyBzeW5jaHJvbml6YXRpb24gbG9jayAqLworI2RlZmluZSBWNEwyX0lOX1NUX05PX0VRVSAgICAgIDB4MDAwMjAwMDAgIC8qIE5vIGVxdWFsaXplciBsb2NrICovCisjZGVmaW5lIFY0TDJfSU5fU1RfTk9fQ0FSUklFUiAgMHgwMDA0MDAwMCAgLyogQ2FycmllciByZWNvdmVyeSBmYWlsZWQgKi8KKworLyogZmllbGQgJ3N0YXR1cycgLSBWQ1IgYW5kIHNldC10b3AgYm94ICovCisjZGVmaW5lIFY0TDJfSU5fU1RfTUFDUk9WSVNJT04gMHgwMTAwMDAwMCAgLyogTWFjcm92aXNpb24gZGV0ZWN0ZWQgKi8KKyNkZWZpbmUgVjRMMl9JTl9TVF9OT19BQ0NFU1MgICAweDAyMDAwMDAwICAvKiBDb25kaXRpb25hbCBhY2Nlc3MgZGVuaWVkICovCisjZGVmaW5lIFY0TDJfSU5fU1RfVlRSICAgICAgICAgMHgwNDAwMDAwMCAgLyogVlRSIHRpbWUgY29uc3RhbnQgKi8KKworLyoKKyAqCVYgSSBEIEUgTyAgIE8gVSBUIFAgVSBUIFMKKyAqLworc3RydWN0IHY0bDJfb3V0cHV0Cit7CisJX191MzIJICAgICBpbmRleDsJCS8qICBXaGljaCBvdXRwdXQgKi8KKwlfX3U4CSAgICAgbmFtZVszMl07CSAgICAgICAgLyogIExhYmVsICovCisJX191MzIJICAgICB0eXBlOwkJLyogIFR5cGUgb2Ygb3V0cHV0ICovCisJX191MzIJICAgICBhdWRpb3NldDsJICAgICAgICAvKiAgQXNzb2NpYXRlZCBhdWRpb3MgKGJpdGZpZWxkKSAqLworCV9fdTMyCSAgICAgbW9kdWxhdG9yOyAgICAgICAgIC8qICBBc3NvY2lhdGVkIG1vZHVsYXRvciAqLworCXY0bDJfc3RkX2lkICBzdGQ7CisJX191MzIJICAgICByZXNlcnZlZFs0XTsKK307CisvKiAgVmFsdWVzIGZvciB0aGUgJ3R5cGUnIGZpZWxkICovCisjZGVmaW5lIFY0TDJfT1VUUFVUX1RZUEVfTU9EVUxBVE9SCQkxCisjZGVmaW5lIFY0TDJfT1VUUFVUX1RZUEVfQU5BTE9HCQkJMgorI2RlZmluZSBWNEwyX09VVFBVVF9UWVBFX0FOQUxPR1ZHQU9WRVJMQVkJMworCisvKgorICoJQyBPIE4gVCBSIE8gTCBTCisgKi8KK3N0cnVjdCB2NGwyX2NvbnRyb2wKK3sKKwlfX3UzMgkJICAgICBpZDsKKwlfX3MzMgkJICAgICB2YWx1ZTsKK307CisKKy8qICBVc2VkIGluIHRoZSBWSURJT0NfUVVFUllDVFJMIGlvY3RsIGZvciBxdWVyeWluZyBjb250cm9scyAqLworc3RydWN0IHY0bDJfcXVlcnljdHJsCit7CisJX191MzIJICAgICAgICAgICAgIGlkOworCWVudW0gdjRsMl9jdHJsX3R5cGUgIHR5cGU7CisJX191OAkJICAgICBuYW1lWzMyXTsJLyogV2hhdGV2ZXIgKi8KKwlfX3MzMgkJICAgICBtaW5pbXVtOwkvKiBOb3RlIHNpZ25lZG5lc3MgKi8KKwlfX3MzMgkJICAgICBtYXhpbXVtOworCV9fczMyCSAgICAgICAgICAgICBzdGVwOworCV9fczMyCQkgICAgIGRlZmF1bHRfdmFsdWU7CisJX191MzIgICAgICAgICAgICAgICAgZmxhZ3M7CisJX191MzIJCSAgICAgcmVzZXJ2ZWRbMl07Cit9OworCisvKiAgVXNlZCBpbiB0aGUgVklESU9DX1FVRVJZTUVOVSBpb2N0bCBmb3IgcXVlcnlpbmcgbWVudSBpdGVtcyAqLworc3RydWN0IHY0bDJfcXVlcnltZW51Cit7CisJX191MzIJCWlkOworCV9fdTMyCQlpbmRleDsKKwlfX3U4CQluYW1lWzMyXTsJLyogV2hhdGV2ZXIgKi8KKwlfX3UzMgkJcmVzZXJ2ZWQ7Cit9OworCisvKiAgQ29udHJvbCBmbGFncyAgKi8KKyNkZWZpbmUgVjRMMl9DVFJMX0ZMQUdfRElTQUJMRUQJCTB4MDAwMQorI2RlZmluZSBWNEwyX0NUUkxfRkxBR19HUkFCQkVECQkweDAwMDIKKworLyogIENvbnRyb2wgSURzIGRlZmluZWQgYnkgVjRMMiAqLworI2RlZmluZSBWNEwyX0NJRF9CQVNFCQkJMHgwMDk4MDkwMAorLyogIElEcyByZXNlcnZlZCBmb3IgZHJpdmVyIHNwZWNpZmljIGNvbnRyb2xzICovCisjZGVmaW5lIFY0TDJfQ0lEX1BSSVZBVEVfQkFTRQkJMHgwODAwMDAwMAorCisjZGVmaW5lIFY0TDJfQ0lEX0JSSUdIVE5FU1MJCShWNEwyX0NJRF9CQVNFKzApCisjZGVmaW5lIFY0TDJfQ0lEX0NPTlRSQVNUCQkoVjRMMl9DSURfQkFTRSsxKQorI2RlZmluZSBWNEwyX0NJRF9TQVRVUkFUSU9OCQkoVjRMMl9DSURfQkFTRSsyKQorI2RlZmluZSBWNEwyX0NJRF9IVUUJCQkoVjRMMl9DSURfQkFTRSszKQorI2RlZmluZSBWNEwyX0NJRF9BVURJT19WT0xVTUUJCShWNEwyX0NJRF9CQVNFKzUpCisjZGVmaW5lIFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0UJCShWNEwyX0NJRF9CQVNFKzYpCisjZGVmaW5lIFY0TDJfQ0lEX0FVRElPX0JBU1MJCShWNEwyX0NJRF9CQVNFKzcpCisjZGVmaW5lIFY0TDJfQ0lEX0FVRElPX1RSRUJMRQkJKFY0TDJfQ0lEX0JBU0UrOCkKKyNkZWZpbmUgVjRMMl9DSURfQVVESU9fTVVURQkJKFY0TDJfQ0lEX0JBU0UrOSkKKyNkZWZpbmUgVjRMMl9DSURfQVVESU9fTE9VRE5FU1MJCShWNEwyX0NJRF9CQVNFKzEwKQorI2RlZmluZSBWNEwyX0NJRF9CTEFDS19MRVZFTAkJKFY0TDJfQ0lEX0JBU0UrMTEpCisjZGVmaW5lIFY0TDJfQ0lEX0FVVE9fV0hJVEVfQkFMQU5DRQkoVjRMMl9DSURfQkFTRSsxMikKKyNkZWZpbmUgVjRMMl9DSURfRE9fV0hJVEVfQkFMQU5DRQkoVjRMMl9DSURfQkFTRSsxMykKKyNkZWZpbmUgVjRMMl9DSURfUkVEX0JBTEFOQ0UJCShWNEwyX0NJRF9CQVNFKzE0KQorI2RlZmluZSBWNEwyX0NJRF9CTFVFX0JBTEFOQ0UJCShWNEwyX0NJRF9CQVNFKzE1KQorI2RlZmluZSBWNEwyX0NJRF9HQU1NQQkJCShWNEwyX0NJRF9CQVNFKzE2KQorI2RlZmluZSBWNEwyX0NJRF9XSElURU5FU1MJCShWNEwyX0NJRF9HQU1NQSkgLyogPyBOb3Qgc3VyZSAqLworI2RlZmluZSBWNEwyX0NJRF9FWFBPU1VSRQkJKFY0TDJfQ0lEX0JBU0UrMTcpCisjZGVmaW5lIFY0TDJfQ0lEX0FVVE9HQUlOCQkoVjRMMl9DSURfQkFTRSsxOCkKKyNkZWZpbmUgVjRMMl9DSURfR0FJTgkJCShWNEwyX0NJRF9CQVNFKzE5KQorI2RlZmluZSBWNEwyX0NJRF9IRkxJUAkJCShWNEwyX0NJRF9CQVNFKzIwKQorI2RlZmluZSBWNEwyX0NJRF9WRkxJUAkJCShWNEwyX0NJRF9CQVNFKzIxKQorI2RlZmluZSBWNEwyX0NJRF9IQ0VOVEVSCQkoVjRMMl9DSURfQkFTRSsyMikKKyNkZWZpbmUgVjRMMl9DSURfVkNFTlRFUgkJKFY0TDJfQ0lEX0JBU0UrMjMpCisjZGVmaW5lIFY0TDJfQ0lEX0xBU1RQMQkJCShWNEwyX0NJRF9CQVNFKzI0KSAvKiBsYXN0IENJRCArIDEgKi8KKworLyoKKyAqCVQgVSBOIEkgTiBHCisgKi8KK3N0cnVjdCB2NGwyX3R1bmVyCit7CisJX191MzIgICAgICAgICAgICAgICAgICAgaW5kZXg7CisJX191OAkJCW5hbWVbMzJdOworCWVudW0gdjRsMl90dW5lcl90eXBlICAgIHR5cGU7CisJX191MzIJCQljYXBhYmlsaXR5OworCV9fdTMyCQkJcmFuZ2Vsb3c7CisJX191MzIJCQlyYW5nZWhpZ2g7CisJX191MzIJCQlyeHN1YmNoYW5zOworCV9fdTMyCQkJYXVkbW9kZTsKKwlfX3MzMgkJCXNpZ25hbDsKKwlfX3MzMgkJCWFmYzsKKwlfX3UzMgkJCXJlc2VydmVkWzRdOworfTsKKworc3RydWN0IHY0bDJfbW9kdWxhdG9yCit7CisJX191MzIJCQlpbmRleDsKKwlfX3U4CQkJbmFtZVszMl07CisJX191MzIJCQljYXBhYmlsaXR5OworCV9fdTMyCQkJcmFuZ2Vsb3c7CisJX191MzIJCQlyYW5nZWhpZ2g7CisJX191MzIJCQl0eHN1YmNoYW5zOworCV9fdTMyCQkJcmVzZXJ2ZWRbNF07Cit9OworCisvKiAgRmxhZ3MgZm9yIHRoZSAnY2FwYWJpbGl0eScgZmllbGQgKi8KKyNkZWZpbmUgVjRMMl9UVU5FUl9DQVBfTE9XCQkweDAwMDEKKyNkZWZpbmUgVjRMMl9UVU5FUl9DQVBfTk9STQkJMHgwMDAyCisjZGVmaW5lIFY0TDJfVFVORVJfQ0FQX1NURVJFTwkJMHgwMDEwCisjZGVmaW5lIFY0TDJfVFVORVJfQ0FQX0xBTkcyCQkweDAwMjAKKyNkZWZpbmUgVjRMMl9UVU5FUl9DQVBfU0FQCQkweDAwMjAKKyNkZWZpbmUgVjRMMl9UVU5FUl9DQVBfTEFORzEJCTB4MDA0MAorCisvKiAgRmxhZ3MgZm9yIHRoZSAncnhzdWJjaGFucycgZmllbGQgKi8KKyNkZWZpbmUgVjRMMl9UVU5FUl9TVUJfTU9OTwkJMHgwMDAxCisjZGVmaW5lIFY0TDJfVFVORVJfU1VCX1NURVJFTwkJMHgwMDAyCisjZGVmaW5lIFY0TDJfVFVORVJfU1VCX0xBTkcyCQkweDAwMDQKKyNkZWZpbmUgVjRMMl9UVU5FUl9TVUJfU0FQCQkweDAwMDQKKyNkZWZpbmUgVjRMMl9UVU5FUl9TVUJfTEFORzEJCTB4MDAwOAorCisvKiAgVmFsdWVzIGZvciB0aGUgJ2F1ZG1vZGUnIGZpZWxkICovCisjZGVmaW5lIFY0TDJfVFVORVJfTU9ERV9NT05PCQkweDAwMDAKKyNkZWZpbmUgVjRMMl9UVU5FUl9NT0RFX1NURVJFTwkJMHgwMDAxCisjZGVmaW5lIFY0TDJfVFVORVJfTU9ERV9MQU5HMgkJMHgwMDAyCisjZGVmaW5lIFY0TDJfVFVORVJfTU9ERV9TQVAJCTB4MDAwMgorI2RlZmluZSBWNEwyX1RVTkVSX01PREVfTEFORzEJCTB4MDAwMworCitzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kKK3sKKwlfX3UzMgkgICAgICAgICAgICAgIHR1bmVyOworCWVudW0gdjRsMl90dW5lcl90eXBlICB0eXBlOworICAgICAgICBfX3UzMgkgICAgICAgICAgICAgIGZyZXF1ZW5jeTsKKwlfX3UzMgkgICAgICAgICAgICAgIHJlc2VydmVkWzhdOworfTsKKworLyoKKyAqCUEgVSBEIEkgTworICovCitzdHJ1Y3QgdjRsMl9hdWRpbworeworCV9fdTMyCWluZGV4OworCV9fdTgJbmFtZVszMl07CisJX191MzIJY2FwYWJpbGl0eTsKKwlfX3UzMgltb2RlOworCV9fdTMyCXJlc2VydmVkWzJdOworfTsKKy8qICBGbGFncyBmb3IgdGhlICdjYXBhYmlsaXR5JyBmaWVsZCAqLworI2RlZmluZSBWNEwyX0FVRENBUF9TVEVSRU8JCTB4MDAwMDEKKyNkZWZpbmUgVjRMMl9BVURDQVBfQVZMCQkJMHgwMDAwMgorCisvKiAgRmxhZ3MgZm9yIHRoZSAnbW9kZScgZmllbGQgKi8KKyNkZWZpbmUgVjRMMl9BVURNT0RFX0FWTAkJMHgwMDAwMQorCitzdHJ1Y3QgdjRsMl9hdWRpb291dAoreworCV9fdTMyCWluZGV4OworCV9fdTgJbmFtZVszMl07CisJX191MzIJY2FwYWJpbGl0eTsKKwlfX3UzMgltb2RlOworCV9fdTMyCXJlc2VydmVkWzJdOworfTsKKworLyoKKyAqCUQgQSBUIEEgICBTIEUgUiBWIEkgQyBFIFMgICAoIFYgQiBJICkKKyAqCisgKglEYXRhIHNlcnZpY2VzIEFQSSBieSBNaWNoYWVsIFNjaGltZWsKKyAqLworCitzdHJ1Y3QgdjRsMl92YmlfZm9ybWF0Cit7CisJX191MzIJc2FtcGxpbmdfcmF0ZTsJCS8qIGluIDEgSHogKi8KKwlfX3UzMglvZmZzZXQ7CisJX191MzIJc2FtcGxlc19wZXJfbGluZTsKKwlfX3UzMglzYW1wbGVfZm9ybWF0OwkJLyogVjRMMl9QSVhfRk1UXyogKi8KKwlfX3MzMglzdGFydFsyXTsKKwlfX3UzMgljb3VudFsyXTsKKwlfX3UzMglmbGFnczsJCQkvKiBWNEwyX1ZCSV8qICovCisJX191MzIJcmVzZXJ2ZWRbMl07CQkvKiBtdXN0IGJlIHplcm8gKi8KK307CisKKy8qICBWQkkgZmxhZ3MgICovCisjZGVmaW5lIFY0TDJfVkJJX1VOU1lOQwkJKDE8PCAwKQorI2RlZmluZSBWNEwyX1ZCSV9JTlRFUkxBQ0VECSgxPDwgMSkKKworCisvKgorICoJQSBHIEcgUiBFIEcgQSBUIEUgICBTIFQgUiBVIEMgVCBVIFIgRSBTCisgKi8KKworLyoJU3RyZWFtIGRhdGEgZm9ybWF0CisgKi8KK3N0cnVjdCB2NGwyX2Zvcm1hdAoreworCWVudW0gdjRsMl9idWZfdHlwZSB0eXBlOworCXVuaW9uCisJeworCQlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0CXBpeDsgIC8vIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRQorCQlzdHJ1Y3QgdjRsMl93aW5kb3cJd2luOyAgLy8gVjRMMl9CVUZfVFlQRV9WSURFT19PVkVSTEFZCisJCXN0cnVjdCB2NGwyX3ZiaV9mb3JtYXQJdmJpOyAgLy8gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRQorCQlfX3U4CXJhd19kYXRhWzIwMF07ICAgICAgICAvLyB1c2VyLWRlZmluZWQKKwl9IGZtdDsKK307CisKKworLyoJU3RyZWFtIHR5cGUtZGVwZW5kZW50IHBhcmFtZXRlcnMKKyAqLworc3RydWN0IHY0bDJfc3RyZWFtcGFybQoreworCWVudW0gdjRsMl9idWZfdHlwZSB0eXBlOworCXVuaW9uCisJeworCQlzdHJ1Y3QgdjRsMl9jYXB0dXJlcGFybQljYXB0dXJlOworCQlzdHJ1Y3QgdjRsMl9vdXRwdXRwYXJtCW91dHB1dDsKKwkJX191OAlyYXdfZGF0YVsyMDBdOyAgLyogdXNlci1kZWZpbmVkICovCisJfSBwYXJtOworfTsKKworCisKKy8qCisgKglJIE8gQyBUIEwgICBDIE8gRCBFIFMgICBGIE8gUiAgIFYgSSBEIEUgTyAgIEQgRSBWIEkgQyBFIFMKKyAqCisgKi8KKyNkZWZpbmUgVklESU9DX1FVRVJZQ0FQCQlfSU9SICAoJ1YnLCAgMCwgc3RydWN0IHY0bDJfY2FwYWJpbGl0eSkKKyNkZWZpbmUgVklESU9DX1JFU0VSVkVECQlfSU8gICAoJ1YnLCAgMSkKKyNkZWZpbmUgVklESU9DX0VOVU1fRk1UICAgICAgICAgX0lPV1IgKCdWJywgIDIsIHN0cnVjdCB2NGwyX2ZtdGRlc2MpCisjZGVmaW5lIFZJRElPQ19HX0ZNVAkJX0lPV1IgKCdWJywgIDQsIHN0cnVjdCB2NGwyX2Zvcm1hdCkKKyNkZWZpbmUgVklESU9DX1NfRk1UCQlfSU9XUiAoJ1YnLCAgNSwgc3RydWN0IHY0bDJfZm9ybWF0KQorI2lmIDEgLyogZXhwZXJpbWVudGFsICovCisjZGVmaW5lIFZJRElPQ19HX01QRUdDT01QICAgICAgIF9JT1IgICgnVicsICA2LCBzdHJ1Y3QgdjRsMl9tcGVnX2NvbXByZXNzaW9uKQorI2RlZmluZSBWSURJT0NfU19NUEVHQ09NUCAgICAgCV9JT1cgICgnVicsICA3LCBzdHJ1Y3QgdjRsMl9tcGVnX2NvbXByZXNzaW9uKQorI2VuZGlmCisjZGVmaW5lIFZJRElPQ19SRVFCVUZTCQlfSU9XUiAoJ1YnLCAgOCwgc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZlcnMpCisjZGVmaW5lIFZJRElPQ19RVUVSWUJVRgkJX0lPV1IgKCdWJywgIDksIHN0cnVjdCB2NGwyX2J1ZmZlcikKKyNkZWZpbmUgVklESU9DX0dfRkJVRgkJX0lPUiAgKCdWJywgMTAsIHN0cnVjdCB2NGwyX2ZyYW1lYnVmZmVyKQorI2RlZmluZSBWSURJT0NfU19GQlVGCQlfSU9XICAoJ1YnLCAxMSwgc3RydWN0IHY0bDJfZnJhbWVidWZmZXIpCisjZGVmaW5lIFZJRElPQ19PVkVSTEFZCQlfSU9XICAoJ1YnLCAxNCwgaW50KQorI2RlZmluZSBWSURJT0NfUUJVRgkJX0lPV1IgKCdWJywgMTUsIHN0cnVjdCB2NGwyX2J1ZmZlcikKKyNkZWZpbmUgVklESU9DX0RRQlVGCQlfSU9XUiAoJ1YnLCAxNywgc3RydWN0IHY0bDJfYnVmZmVyKQorI2RlZmluZSBWSURJT0NfU1RSRUFNT04JCV9JT1cgICgnVicsIDE4LCBpbnQpCisjZGVmaW5lIFZJRElPQ19TVFJFQU1PRkYJX0lPVyAgKCdWJywgMTksIGludCkKKyNkZWZpbmUgVklESU9DX0dfUEFSTQkJX0lPV1IgKCdWJywgMjEsIHN0cnVjdCB2NGwyX3N0cmVhbXBhcm0pCisjZGVmaW5lIFZJRElPQ19TX1BBUk0JCV9JT1dSICgnVicsIDIyLCBzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtKQorI2RlZmluZSBWSURJT0NfR19TVEQJCV9JT1IgICgnVicsIDIzLCB2NGwyX3N0ZF9pZCkKKyNkZWZpbmUgVklESU9DX1NfU1RECQlfSU9XICAoJ1YnLCAyNCwgdjRsMl9zdGRfaWQpCisjZGVmaW5lIFZJRElPQ19FTlVNU1RECQlfSU9XUiAoJ1YnLCAyNSwgc3RydWN0IHY0bDJfc3RhbmRhcmQpCisjZGVmaW5lIFZJRElPQ19FTlVNSU5QVVQJX0lPV1IgKCdWJywgMjYsIHN0cnVjdCB2NGwyX2lucHV0KQorI2RlZmluZSBWSURJT0NfR19DVFJMCQlfSU9XUiAoJ1YnLCAyNywgc3RydWN0IHY0bDJfY29udHJvbCkKKyNkZWZpbmUgVklESU9DX1NfQ1RSTAkJX0lPV1IgKCdWJywgMjgsIHN0cnVjdCB2NGwyX2NvbnRyb2wpCisjZGVmaW5lIFZJRElPQ19HX1RVTkVSCQlfSU9XUiAoJ1YnLCAyOSwgc3RydWN0IHY0bDJfdHVuZXIpCisjZGVmaW5lIFZJRElPQ19TX1RVTkVSCQlfSU9XICAoJ1YnLCAzMCwgc3RydWN0IHY0bDJfdHVuZXIpCisjZGVmaW5lIFZJRElPQ19HX0FVRElPCQlfSU9SICAoJ1YnLCAzMywgc3RydWN0IHY0bDJfYXVkaW8pCisjZGVmaW5lIFZJRElPQ19TX0FVRElPCQlfSU9XICAoJ1YnLCAzNCwgc3RydWN0IHY0bDJfYXVkaW8pCisjZGVmaW5lIFZJRElPQ19RVUVSWUNUUkwJX0lPV1IgKCdWJywgMzYsIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCkKKyNkZWZpbmUgVklESU9DX1FVRVJZTUVOVQlfSU9XUiAoJ1YnLCAzNywgc3RydWN0IHY0bDJfcXVlcnltZW51KQorI2RlZmluZSBWSURJT0NfR19JTlBVVAkJX0lPUiAgKCdWJywgMzgsIGludCkKKyNkZWZpbmUgVklESU9DX1NfSU5QVVQJCV9JT1dSICgnVicsIDM5LCBpbnQpCisjZGVmaW5lIFZJRElPQ19HX09VVFBVVAkJX0lPUiAgKCdWJywgNDYsIGludCkKKyNkZWZpbmUgVklESU9DX1NfT1VUUFVUCQlfSU9XUiAoJ1YnLCA0NywgaW50KQorI2RlZmluZSBWSURJT0NfRU5VTU9VVFBVVAlfSU9XUiAoJ1YnLCA0OCwgc3RydWN0IHY0bDJfb3V0cHV0KQorI2RlZmluZSBWSURJT0NfR19BVURPVVQJCV9JT1IgICgnVicsIDQ5LCBzdHJ1Y3QgdjRsMl9hdWRpb291dCkKKyNkZWZpbmUgVklESU9DX1NfQVVET1VUCQlfSU9XICAoJ1YnLCA1MCwgc3RydWN0IHY0bDJfYXVkaW9vdXQpCisjZGVmaW5lIFZJRElPQ19HX01PRFVMQVRPUglfSU9XUiAoJ1YnLCA1NCwgc3RydWN0IHY0bDJfbW9kdWxhdG9yKQorI2RlZmluZSBWSURJT0NfU19NT0RVTEFUT1IJX0lPVyAgKCdWJywgNTUsIHN0cnVjdCB2NGwyX21vZHVsYXRvcikKKyNkZWZpbmUgVklESU9DX0dfRlJFUVVFTkNZCV9JT1dSICgnVicsIDU2LCBzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kpCisjZGVmaW5lIFZJRElPQ19TX0ZSRVFVRU5DWQlfSU9XICAoJ1YnLCA1Nywgc3RydWN0IHY0bDJfZnJlcXVlbmN5KQorI2RlZmluZSBWSURJT0NfQ1JPUENBUAkJX0lPV1IgKCdWJywgNTgsIHN0cnVjdCB2NGwyX2Nyb3BjYXApCisjZGVmaW5lIFZJRElPQ19HX0NST1AJCV9JT1dSICgnVicsIDU5LCBzdHJ1Y3QgdjRsMl9jcm9wKQorI2RlZmluZSBWSURJT0NfU19DUk9QCQlfSU9XICAoJ1YnLCA2MCwgc3RydWN0IHY0bDJfY3JvcCkKKyNkZWZpbmUgVklESU9DX0dfSlBFR0NPTVAJX0lPUiAgKCdWJywgNjEsIHN0cnVjdCB2NGwyX2pwZWdjb21wcmVzc2lvbikKKyNkZWZpbmUgVklESU9DX1NfSlBFR0NPTVAJX0lPVyAgKCdWJywgNjIsIHN0cnVjdCB2NGwyX2pwZWdjb21wcmVzc2lvbikKKyNkZWZpbmUgVklESU9DX1FVRVJZU1REICAgICAgCV9JT1IgICgnVicsIDYzLCB2NGwyX3N0ZF9pZCkKKyNkZWZpbmUgVklESU9DX1RSWV9GTVQgICAgICAJX0lPV1IgKCdWJywgNjQsIHN0cnVjdCB2NGwyX2Zvcm1hdCkKKyNkZWZpbmUgVklESU9DX0VOVU1BVURJTwlfSU9XUiAoJ1YnLCA2NSwgc3RydWN0IHY0bDJfYXVkaW8pCisjZGVmaW5lIFZJRElPQ19FTlVNQVVET1VUCV9JT1dSICgnVicsIDY2LCBzdHJ1Y3QgdjRsMl9hdWRpb291dCkKKyNkZWZpbmUgVklESU9DX0dfUFJJT1JJVFkgICAgICAgX0lPUiAgKCdWJywgNjcsIGVudW0gdjRsMl9wcmlvcml0eSkKKyNkZWZpbmUgVklESU9DX1NfUFJJT1JJVFkgICAgICAgX0lPVyAgKCdWJywgNjgsIGVudW0gdjRsMl9wcmlvcml0eSkKKworLyogZm9yIGNvbXBhdGliaWxpdHksIHdpbGwgZ28gYXdheSBzb21lIGRheSAqLworI2RlZmluZSBWSURJT0NfT1ZFUkxBWV9PTEQgICAgIAlfSU9XUiAoJ1YnLCAxNCwgaW50KQorI2RlZmluZSBWSURJT0NfU19QQVJNX09MRCAgICAgIAlfSU9XICAoJ1YnLCAyMiwgc3RydWN0IHY0bDJfc3RyZWFtcGFybSkKKyNkZWZpbmUgVklESU9DX1NfQ1RSTF9PTEQgICAgICAJX0lPVyAgKCdWJywgMjgsIHN0cnVjdCB2NGwyX2NvbnRyb2wpCisjZGVmaW5lIFZJRElPQ19HX0FVRElPX09MRCAgICAgCV9JT1dSICgnVicsIDMzLCBzdHJ1Y3QgdjRsMl9hdWRpbykKKyNkZWZpbmUgVklESU9DX0dfQVVET1VUX09MRCAgICAJX0lPV1IgKCdWJywgNDksIHN0cnVjdCB2NGwyX2F1ZGlvb3V0KQorI2RlZmluZSBWSURJT0NfQ1JPUENBUF9PTEQgICAgIAlfSU9SICAoJ1YnLCA1OCwgc3RydWN0IHY0bDJfY3JvcGNhcCkKKworI2RlZmluZSBCQVNFX1ZJRElPQ19QUklWQVRFCTE5MgkJLyogMTkyLTI1NSBhcmUgcHJpdmF0ZSAqLworCisKKyNpZmRlZiBfX0tFUk5FTF9fCisvKgorICoKKyAqCVYgNCBMIDIgICBEIFIgSSBWIEUgUiAgIEggRSBMIFAgRSBSICAgQSBQIEkKKyAqCisgKglTb21lIGNvbW1vbmx5IG5lZWRlZCBmdW5jdGlvbnMgZm9yIGRyaXZlcnMgKHY0bDItY29tbW9uLm8gbW9kdWxlKQorICovCisjaW5jbHVkZSA8bGludXgvZnMuaD4KKworLyogIFZpZGVvIHN0YW5kYXJkIGZ1bmN0aW9ucyAgKi8KK2V4dGVybiB1bnNpZ25lZCBpbnQgdjRsMl92aWRlb19zdGRfZnBzKHN0cnVjdCB2NGwyX3N0YW5kYXJkICp2cyk7CitleHRlcm4gaW50IHY0bDJfdmlkZW9fc3RkX2NvbnN0cnVjdChzdHJ1Y3QgdjRsMl9zdGFuZGFyZCAqdnMsCisJCQkJICAgIGludCBpZCwgY2hhciAqbmFtZSk7CisKKy8qIHByb3JpdHkgaGFuZGxpbmcgKi8KK3N0cnVjdCB2NGwyX3ByaW9fc3RhdGUgeworCWF0b21pY190IHByaW9zWzRdOworfTsKK2ludCB2NGwyX3ByaW9faW5pdChzdHJ1Y3QgdjRsMl9wcmlvX3N0YXRlICpnbG9iYWwpOworaW50IHY0bDJfcHJpb19jaGFuZ2Uoc3RydWN0IHY0bDJfcHJpb19zdGF0ZSAqZ2xvYmFsLCBlbnVtIHY0bDJfcHJpb3JpdHkgKmxvY2FsLAorCQkgICAgIGVudW0gdjRsMl9wcmlvcml0eSBuZXcpOworaW50IHY0bDJfcHJpb19vcGVuKHN0cnVjdCB2NGwyX3ByaW9fc3RhdGUgKmdsb2JhbCwgZW51bSB2NGwyX3ByaW9yaXR5ICpsb2NhbCk7CitpbnQgdjRsMl9wcmlvX2Nsb3NlKHN0cnVjdCB2NGwyX3ByaW9fc3RhdGUgKmdsb2JhbCwgZW51bSB2NGwyX3ByaW9yaXR5ICpsb2NhbCk7CitlbnVtIHY0bDJfcHJpb3JpdHkgdjRsMl9wcmlvX21heChzdHJ1Y3QgdjRsMl9wcmlvX3N0YXRlICpnbG9iYWwpOworaW50IHY0bDJfcHJpb19jaGVjayhzdHJ1Y3QgdjRsMl9wcmlvX3N0YXRlICpnbG9iYWwsIGVudW0gdjRsMl9wcmlvcml0eSAqbG9jYWwpOworCisvKiBuYW1lcyBmb3IgZmFuY3kgZGVidWcgb3V0cHV0ICovCitleHRlcm4gY2hhciAqdjRsMl9maWVsZF9uYW1lc1tdOworZXh0ZXJuIGNoYXIgKnY0bDJfdHlwZV9uYW1lc1tdOworZXh0ZXJuIGNoYXIgKnY0bDJfaW9jdGxfbmFtZXNbXTsKKworLyogIENvbXBhdGliaWxpdHkgbGF5ZXIgaW50ZXJmYWNlICAtLSAgdjRsMS1jb21wYXQgbW9kdWxlICovCit0eXBlZGVmIGludCAoKnY0bDJfa2lvY3RsKShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZyk7CitpbnQgdjRsX2NvbXBhdF90cmFuc2xhdGVfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICAgICAgaW50IGNtZCwgdm9pZCAqYXJnLCB2NGwyX2tpb2N0bCBkcml2ZXJfaW9jdGwpOworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9fTElOVVhfVklERU9ERVYyX0ggKi8KKworLyoKKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqIGMtYmFzaWMtb2Zmc2V0OiA4CisgKiBFbmQ6CisgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlkZW90ZXh0LmggYi9pbmNsdWRlL2xpbnV4L3ZpZGVvdGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxOGY5MjAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3ZpZGVvdGV4dC5oCkBAIC0wLDAgKzEsMTI1IEBACisjaWZuZGVmIF9WVFhfSAorI2RlZmluZSBfVlRYX0gKKworLyoKKyAqIFRlbGV0ZXh0ICg9VmlkZW90ZXh0KSBoYXJkd2FyZSBkZWNvZGVycyB1c2luZyBpbnRlcmZhY2UgL2Rldi92dHgKKyAqIERvIG5vdCBjb25mdXNlIHdpdGggZHJpdmVycyB1c2luZyAvZGV2L3ZiaSB3aGljaCBkZWNvZGUgdmlkZW90ZXh0IGJ5IHNvZnR3YXJlCisgKgorICogVmlkZW90ZXh0IElPQ1RMcyBjaGFuZ2VkIGluIG9yZGVyIHRvIHVzZSBfSU8oKSBtYWNyb3MgZGVmaW5lZCBpbiA8bGludXgvaW9jdGwuaD4sCisgKiB1bnVzZWQgdHVuZXIgSU9DVExzIGNsZWFuZWQgdXAgYnkKKyAqIE1pY2hhZWwgR2VuZyA8bGludXhATWljaGFlbEdlbmcuZGU+CisgKgorICogQ29weXJpZ2h0IChjKSAxOTk0LTk3IE1hcnRpbiBCdWNrICA8bWFydGluLTIuYnVja0BzdHVkZW50LnVuaS11bG0uZGU+CisgKiBSZWFkIENPUFlJTkcgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyAqCisgKi8KKworCisvKgorICoJVmlkZW90ZXh0IGlvY3RscworICovCisjZGVmaW5lIFZUWElPQ0dFVElORk8JX0lPUiAgKDB4ODEsICAxLCB2dHhfaW5mb190KQorI2RlZmluZSBWVFhJT0NDTFJQQUdFCV9JT1cgICgweDgxLCAgMiwgdnR4X3BhZ2VyZXFfdCkKKyNkZWZpbmUgVlRYSU9DQ0xSRk9VTkQJX0lPVyAgKDB4ODEsICAzLCB2dHhfcGFnZXJlcV90KQorI2RlZmluZSBWVFhJT0NQQUdFUkVRCV9JT1cgICgweDgxLCAgNCwgdnR4X3BhZ2VyZXFfdCkKKyNkZWZpbmUgVlRYSU9DR0VUU1RBVAlfSU9XICAoMHg4MSwgIDUsIHZ0eF9wYWdlcmVxX3QpCisjZGVmaW5lIFZUWElPQ0dFVFBBR0UJX0lPVyAgKDB4ODEsICA2LCB2dHhfcGFnZXJlcV90KQorI2RlZmluZSBWVFhJT0NTVE9QREFVCV9JT1cgICgweDgxLCAgNywgdnR4X3BhZ2VyZXFfdCkKKyNkZWZpbmUgVlRYSU9DUFVUUEFHRQlfSU8gICAoMHg4MSwgIDgpCisjZGVmaW5lIFZUWElPQ1NFVERJU1AJX0lPICAgKDB4ODEsICA5KQorI2RlZmluZSBWVFhJT0NQVVRTVEFUCV9JTyAgICgweDgxLCAxMCkKKyNkZWZpbmUgVlRYSU9DQ0xSQ0FDSEUJX0lPICAgKDB4ODEsIDExKQorI2RlZmluZSBWVFhJT0NTRVRWSVJUCV9JT1cgICgweDgxLCAxMiwgbG9uZykKKworLyogZm9yIGNvbXBhdGliaWxpdHksIHdpbGwgZ28gYXdheSBzb21lIGRheSAqLworI2RlZmluZSBWVFhJT0NHRVRJTkZPX09MRCAgMHg3MTAxICAvKiBnZXQgdmVyc2lvbiBvZiBkcml2ZXIgJiBjYXBhYmlsaXRpZXMgb2YgdnR4LWNoaXBzZXQgKi8KKyNkZWZpbmUgVlRYSU9DQ0xSUEFHRV9PTEQgIDB4NzEwMiAgLyogY2xlYXIgcGFnZS1idWZmZXIgKi8KKyNkZWZpbmUgVlRYSU9DQ0xSRk9VTkRfT0xEIDB4NzEwMyAgLyogY2xlYXIgYml0cyBpbmRpY2F0aW5nIHRoYXQgcGFnZSB3YXMgZm91bmQgKi8KKyNkZWZpbmUgVlRYSU9DUEFHRVJFUV9PTEQgIDB4NzEwNCAgLyogc2VhcmNoIGZvciBwYWdlICovCisjZGVmaW5lIFZUWElPQ0dFVFNUQVRfT0xEICAweDcxMDUgIC8qIGdldCBzdGF0dXMgb2YgcGFnZS1idWZmZXIgKi8KKyNkZWZpbmUgVlRYSU9DR0VUUEFHRV9PTEQgIDB4NzEwNiAgLyogZ2V0IGNvbnRlbnRzIG9mIHBhZ2UtYnVmZmVyICovCisjZGVmaW5lIFZUWElPQ1NUT1BEQVVfT0xEICAweDcxMDcgIC8qIHN0b3AgZGF0YSBhY3F1aXNpdGlvbiB1bml0ICovCisjZGVmaW5lIFZUWElPQ1BVVFBBR0VfT0xEICAweDcxMDggIC8qIGRpc3BsYXkgcGFnZSBvbiBUVi1zY3JlZW4gKi8KKyNkZWZpbmUgVlRYSU9DU0VURElTUF9PTEQgIDB4NzEwOSAgLyogc2V0IFRWLW1vZGUgKi8KKyNkZWZpbmUgVlRYSU9DUFVUU1RBVF9PTEQgIDB4NzEwYSAgLyogc2V0IHN0YXR1cyBvZiBUVi1vdXRwdXQtYnVmZmVyICovCisjZGVmaW5lIFZUWElPQ0NMUkNBQ0hFX09MRCAweDcxMGIgIC8qIGNsZWFyIGNhY2hlIG9uIFZUWC1pbnRlcmZhY2UgKGlmIGF2YWlsLikgKi8KKyNkZWZpbmUgVlRYSU9DU0VUVklSVF9PTEQgIDB4NzEwYyAgLyogdHVybiBvbiB2aXJ0dWFsIG1vZGUgKHRoaXMgZGlzYWJsZXMgVFYtZGlzcGxheSkgKi8KKworLyogCisgKglEZWZpbml0aW9ucyBmb3IgVlRYSU9DR0VUSU5GTworICovCisgCisjZGVmaW5lIFNBQTUyNDMgMAorI2RlZmluZSBTQUE1MjQ2IDEKKyNkZWZpbmUgU0FBNTI0OSAyCisjZGVmaW5lIFNBQTUyNDggMworI2RlZmluZSBYU1RWNTM0NiA0CisKK3R5cGVkZWYgc3RydWN0IHsKKwlpbnQgdmVyc2lvbl9tYWpvciwgdmVyc2lvbl9taW5vcjsJLyogdmVyc2lvbiBvZiBkcml2ZXI7IGlmIHZlcnNpb25fbWFqb3IgY2hhbmdlcywgZHJpdmVyICovCisJCQkJCQkvKiBpcyBub3QgYmFja3dhcmQgY29tcGF0aWJsZSEhISBDSEVDSyBUSElTISEhICovICAKKwlpbnQgbnVtcGFnZXM7CQkJCS8qIG51bWJlciBvZiBwYWdlLWJ1ZmZlcnMgb2YgdnR4LWNoaXBzZXQgKi8KKwlpbnQgY2N0X3R5cGU7CQkJCS8qIHR5cGUgb2YgdnR4LWNoaXBzZXQgKFNBQTUyNDMsIFNBQTUyNDYsIFNBQTUyNDggb3IKKyAgCQkJCQkJICogU0FBNTI0OSkgKi8KK30KK3Z0eF9pbmZvX3Q7CisKKworLyoKKyAqCURlZmluaXRpb25zIGZvciBWVFhJT0N7Q0xSUEFHRSxDTFJGT1VORCxQQUdFUkVRLEdFVFNUQVQsR0VUUEFHRSxTVE9QREFVLFBVVFBBR0UsU0VURElTUH0KKyAqLworCisjZGVmaW5lIE1JTl9VTklUICAgKDE8PDApCisjZGVmaW5lIE1JTl9URU4gICAgKDE8PDEpCisjZGVmaW5lIEhSX1VOSVQgICAgKDE8PDIpCisjZGVmaW5lIEhSX1RFTiAgICAgKDE8PDMpCisjZGVmaW5lIFBHX1VOSVQgICAgKDE8PDQpCisjZGVmaW5lIFBHX1RFTiAgICAgKDE8PDUpCisjZGVmaW5lIFBHX0hVTkQgICAgKDE8PDYpCisjZGVmaW5lIFBHTUFTS19NQVggKDE8PDcpCisjZGVmaW5lIFBHTUFTS19QQUdFIChQR19IVU5EIHwgUEdfVEVOIHwgUEdfVU5JVCkKKyNkZWZpbmUgUEdNQVNLX0hPVVIgKEhSX1RFTiB8IEhSX1VOSVQpCisjZGVmaW5lIFBHTUFTS19NSU5VVEUgKE1JTl9URU4gfCBNSU5fVU5JVCkKKwordHlwZWRlZiBzdHJ1Y3QgCit7CisJaW50IHBhZ2U7CS8qIG51bWJlciBvZiByZXF1ZXN0ZWQgcGFnZSAoaGV4YWRlY2ltYWwpICovCisJaW50IGhvdXI7CS8qIHJlcXVlc3RlZCBob3VyIChoZXhhZGVjaW1hbCkgKi8KKwlpbnQgbWludXRlOwkvKiByZXF1ZXN0ZWQgbWludXRlIChoZXhhZGVjaW1hbCkgKi8KKwlpbnQgcGFnZW1hc2s7CS8qIG1hc2sgZGVmaW5pbmcgd2hpY2ggdmFsdWVzIG9mIHRoZSBhYm92ZSBhcmUgc2V0ICovCisJaW50IHBnYnVmOwkvKiBidWZmZXIgd2hlcmUgcGFnZSB3aWxsIGJlIHN0b3JlZCAqLworCWludCBzdGFydDsJLyogc3RhcnQgb2YgcmVxdWVzdGVkIHBhcnQgb2YgcGFnZSAqLworCWludCBlbmQ7CS8qIGVuZCBvZiByZXF1ZXN0ZWQgcGFydCBvZiBwYWdlICovCisJdm9pZCBfX3VzZXIgKmJ1ZmZlcjsJLyogcG9pbnRlciB0byBiZWdpbm5pbmcgb2YgZGVzdGluYXRpb24gYnVmZmVyICovCit9Cit2dHhfcGFnZXJlcV90OworCisKKy8qCisgKglEZWZpbml0aW9ucyBmb3IgVlRYSU9De0dFVFNUQVQsUFVUU1RBVH0KKyAqLworIAorI2RlZmluZSBWVFhfUEFHRVNJWkUgKDQwICogMjQpCisjZGVmaW5lIFZUWF9WSVJUVUFMU0laRSAoNDAgKiA0OSkKKwordHlwZWRlZiBzdHJ1Y3QgCit7CisJaW50IHBhZ2VudW07CQkJLyogbnVtYmVyIG9mIHBhZ2UgKGhleGFkZWNpbWFsKSAqLworCWludCBob3VyOwkJCS8qIGhvdXIgKGhleGFkZWNpbWFsKSAqLworCWludCBtaW51dGU7CQkJLyogbWludXRlIChoZXhhZGVjaW1hbCkgKi8KKwlpbnQgY2hhcnNldDsJCQkvKiBuYXRpb25hbCBjaGFyc2V0ICovCisJdW5zaWduZWQgZGVsZXRlIDogMTsJCS8qIGRlbGV0ZSBwYWdlIChDNCkgKi8KKwl1bnNpZ25lZCBoZWFkbGluZSA6IDE7CQkvKiBpbnNlcnQgaGVhZGxpbmUgKEM1KSAqLworCXVuc2lnbmVkIHN1YnRpdGxlIDogMTsJCS8qIGluc2VydCBzdWJ0aXRsZSAoQzYpICovCisJdW5zaWduZWQgc3VwcF9oZWFkZXIgOiAxOwkvKiBzdXBwcmVzcyBoZWFkZXIgKEM3KSAqLworCXVuc2lnbmVkIHVwZGF0ZSA6IDE7CQkvKiB1cGRhdGUgcGFnZSAoQzgpICovCisJdW5zaWduZWQgaW50ZXJfc2VxIDogMTsJCS8qIGludGVycnVwdGVkIHNlcXVlbmNlIChDOSkgKi8KKwl1bnNpZ25lZCBkaXNfZGlzcCA6IDE7CQkvKiBkaXNhYmxlL3N1cHByZXNzIGRpc3BsYXkgKEMxMCkgKi8KKwl1bnNpZ25lZCBzZXJpYWwgOiAxOwkJLyogc2VyaWFsIG1vZGUgKEMxMSkgKi8KKwl1bnNpZ25lZCBub3Rmb3VuZCA6IDE7CQkvKiAvRk9VTkQgKi8KKwl1bnNpZ25lZCBwYmxmIDogMTsJCS8qIFBCTEYgKi8KKwl1bnNpZ25lZCBoYW1taW5nIDogMTsJCS8qIGhhbW1pbmctZXJyb3Igb2NjdXJyZWQgKi8KK30KK3Z0eF9wYWdlaW5mb190OworIAorI2VuZGlmIC8qIF9WVFhfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92bWFsbG9jLmggYi9pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTM1OGM4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC92bWFsbG9jLmgKQEAgLTAsMCArMSw1NCBAQAorI2lmbmRlZiBfTElOVVhfVk1BTExPQ19ICisjZGVmaW5lIF9MSU5VWF9WTUFMTE9DX0gKKworI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4JCS8qIHBncHJvdF90ICovCisKKy8qIGJpdHMgaW4gdm1fc3RydWN0LT5mbGFncyAqLworI2RlZmluZSBWTV9JT1JFTUFQCTB4MDAwMDAwMDEJLyogaW9yZW1hcCgpIGFuZCBmcmllbmRzICovCisjZGVmaW5lIFZNX0FMTE9DCTB4MDAwMDAwMDIJLyogdm1hbGxvYygpICovCisjZGVmaW5lIFZNX01BUAkJMHgwMDAwMDAwNAkvKiB2bWFwKCllZCBwYWdlcyAqLworLyogYml0cyBbMjAuLjMyXSByZXNlcnZlZCBmb3IgYXJjaCBzcGVjaWZpYyBpb3JlbWFwIGludGVybmFscyAqLworCitzdHJ1Y3Qgdm1fc3RydWN0IHsKKwl2b2lkCQkJKmFkZHI7CisJdW5zaWduZWQgbG9uZwkJc2l6ZTsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKwlzdHJ1Y3QgcGFnZQkJKipwYWdlczsKKwl1bnNpZ25lZCBpbnQJCW5yX3BhZ2VzOworCXVuc2lnbmVkIGxvbmcJCXBoeXNfYWRkcjsKKwlzdHJ1Y3Qgdm1fc3RydWN0CSpuZXh0OworfTsKKworLyoKKyAqCUhpZ2hsZXZlbCBBUElzIGZvciBkcml2ZXIgdXNlCisgKi8KK2V4dGVybiB2b2lkICp2bWFsbG9jKHVuc2lnbmVkIGxvbmcgc2l6ZSk7CitleHRlcm4gdm9pZCAqdm1hbGxvY19leGVjKHVuc2lnbmVkIGxvbmcgc2l6ZSk7CitleHRlcm4gdm9pZCAqdm1hbGxvY18zMih1bnNpZ25lZCBsb25nIHNpemUpOworZXh0ZXJuIHZvaWQgKl9fdm1hbGxvYyh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnBfbWFzaywgcGdwcm90X3QgcHJvdCk7CitleHRlcm4gdm9pZCAqX192bWFsbG9jX2FyZWEoc3RydWN0IHZtX3N0cnVjdCAqYXJlYSwgdW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcF9tYXNrLCBwZ3Byb3RfdCBwcm90KTsKK2V4dGVybiB2b2lkIHZmcmVlKHZvaWQgKmFkZHIpOworCitleHRlcm4gdm9pZCAqdm1hcChzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgY291bnQsCisJCQl1bnNpZ25lZCBsb25nIGZsYWdzLCBwZ3Byb3RfdCBwcm90KTsKK2V4dGVybiB2b2lkIHZ1bm1hcCh2b2lkICphZGRyKTsKKyAKKy8qCisgKglMb3dsZXZlbC1BUElzIChub3QgZm9yIGRyaXZlciB1c2UhKQorICovCitleHRlcm4gc3RydWN0IHZtX3N0cnVjdCAqZ2V0X3ZtX2FyZWEodW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKK2V4dGVybiBzdHJ1Y3Qgdm1fc3RydWN0ICpfX2dldF92bV9hcmVhKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBmbGFncywKKwkJCQkJdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpOworZXh0ZXJuIHN0cnVjdCB2bV9zdHJ1Y3QgKnJlbW92ZV92bV9hcmVhKHZvaWQgKmFkZHIpOworZXh0ZXJuIGludCBtYXBfdm1fYXJlYShzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhLCBwZ3Byb3RfdCBwcm90LAorCQkJc3RydWN0IHBhZ2UgKioqcGFnZXMpOworZXh0ZXJuIHZvaWQgdW5tYXBfdm1fYXJlYShzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhKTsKKworLyoKKyAqCUludGVybmFscy4gIERvbnQndCB1c2UuLgorICovCitleHRlcm4gcndsb2NrX3Qgdm1saXN0X2xvY2s7CitleHRlcm4gc3RydWN0IHZtX3N0cnVjdCAqdm1saXN0OworCisjZW5kaWYgLyogX0xJTlVYX1ZNQUxMT0NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92dC5oIGIvaW5jbHVkZS9saW51eC92dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmOTViMGIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3Z0LmgKQEAgLTAsMCArMSw1NCBAQAorI2lmbmRlZiBfTElOVVhfVlRfSAorI2RlZmluZSBfTElOVVhfVlRfSAorCisvKiAweDU2IGlzICdWJywgdG8gYXZvaWQgY29sbGlzaW9uIHdpdGggdGVybWlvcyBhbmQga2QgKi8KKworI2RlZmluZSBWVF9PUEVOUVJZCTB4NTYwMAkvKiBmaW5kIGF2YWlsYWJsZSB2dCAqLworCitzdHJ1Y3QgdnRfbW9kZSB7CisJY2hhciBtb2RlOwkJLyogdnQgbW9kZSAqLworCWNoYXIgd2FpdHY7CQkvKiBpZiBzZXQsIGhhbmcgb24gd3JpdGVzIGlmIG5vdCBhY3RpdmUgKi8KKwlzaG9ydCByZWxzaWc7CQkvKiBzaWduYWwgdG8gcmFpc2Ugb24gcmVsZWFzZSByZXEgKi8KKwlzaG9ydCBhY3FzaWc7CQkvKiBzaWduYWwgdG8gcmFpc2Ugb24gYWNxdWlzaXRpb24gKi8KKwlzaG9ydCBmcnNpZzsJCS8qIHVudXNlZCAoc2V0IHRvIDApICovCit9OworI2RlZmluZSBWVF9HRVRNT0RFCTB4NTYwMQkvKiBnZXQgbW9kZSBvZiBhY3RpdmUgdnQgKi8KKyNkZWZpbmUgVlRfU0VUTU9ERQkweDU2MDIJLyogc2V0IG1vZGUgb2YgYWN0aXZlIHZ0ICovCisjZGVmaW5lCQlWVF9BVVRPCQkweDAwCS8qIGF1dG8gdnQgc3dpdGNoaW5nICovCisjZGVmaW5lCQlWVF9QUk9DRVNTCTB4MDEJLyogcHJvY2VzcyBjb250cm9scyBzd2l0Y2hpbmcgKi8KKyNkZWZpbmUJCVZUX0FDS0FDUQkweDAyCS8qIGFja25vd2xlZGdlIHN3aXRjaCAqLworCitzdHJ1Y3QgdnRfc3RhdCB7CisJdW5zaWduZWQgc2hvcnQgdl9hY3RpdmU7CS8qIGFjdGl2ZSB2dCAqLworCXVuc2lnbmVkIHNob3J0IHZfc2lnbmFsOwkvKiBzaWduYWwgdG8gc2VuZCAqLworCXVuc2lnbmVkIHNob3J0IHZfc3RhdGU7CQkvKiB2dCBiaXRtYXNrICovCit9OworI2RlZmluZSBWVF9HRVRTVEFURQkweDU2MDMJLyogZ2V0IGdsb2JhbCB2dCBzdGF0ZSBpbmZvICovCisjZGVmaW5lIFZUX1NFTkRTSUcJMHg1NjA0CS8qIHNpZ25hbCB0byBzZW5kIHRvIGJpdG1hc2sgb2YgdnRzICovCisKKyNkZWZpbmUgVlRfUkVMRElTUAkweDU2MDUJLyogcmVsZWFzZSBkaXNwbGF5ICovCisKKyNkZWZpbmUgVlRfQUNUSVZBVEUJMHg1NjA2CS8qIG1ha2UgdnQgYWN0aXZlICovCisjZGVmaW5lIFZUX1dBSVRBQ1RJVkUJMHg1NjA3CS8qIHdhaXQgZm9yIHZ0IGFjdGl2ZSAqLworI2RlZmluZSBWVF9ESVNBTExPQ0FURQkweDU2MDggIC8qIGZyZWUgbWVtb3J5IGFzc29jaWF0ZWQgdG8gdnQgKi8KKworc3RydWN0IHZ0X3NpemVzIHsKKwl1bnNpZ25lZCBzaG9ydCB2X3Jvd3M7CQkvKiBudW1iZXIgb2Ygcm93cyAqLworCXVuc2lnbmVkIHNob3J0IHZfY29sczsJCS8qIG51bWJlciBvZiBjb2x1bW5zICovCisJdW5zaWduZWQgc2hvcnQgdl9zY3JvbGxzaXplOwkvKiBudW1iZXIgb2YgbGluZXMgb2Ygc2Nyb2xsYmFjayAqLworfTsKKyNkZWZpbmUgVlRfUkVTSVpFCTB4NTYwOQkvKiBzZXQga2VybmVsJ3MgaWRlYSBvZiBzY3JlZW5zaXplICovCisKK3N0cnVjdCB2dF9jb25zaXplIHsKKwl1bnNpZ25lZCBzaG9ydCB2X3Jvd3M7CS8qIG51bWJlciBvZiByb3dzICovCisJdW5zaWduZWQgc2hvcnQgdl9jb2xzOwkvKiBudW1iZXIgb2YgY29sdW1ucyAqLworCXVuc2lnbmVkIHNob3J0IHZfdmxpbjsJLyogbnVtYmVyIG9mIHBpeGVsIHJvd3Mgb24gc2NyZWVuICovCisJdW5zaWduZWQgc2hvcnQgdl9jbGluOwkvKiBudW1iZXIgb2YgcGl4ZWwgcm93cyBwZXIgY2hhcmFjdGVyICovCisJdW5zaWduZWQgc2hvcnQgdl92Y29sOwkvKiBudW1iZXIgb2YgcGl4ZWwgY29sdW1ucyBvbiBzY3JlZW4gKi8KKwl1bnNpZ25lZCBzaG9ydCB2X2Njb2w7CS8qIG51bWJlciBvZiBwaXhlbCBjb2x1bW5zIHBlciBjaGFyYWN0ZXIgKi8KK307CisjZGVmaW5lIFZUX1JFU0laRVggICAgICAweDU2MEEgIC8qIHNldCBrZXJuZWwncyBpZGVhIG9mIHNjcmVlbnNpemUgKyBtb3JlICovCisjZGVmaW5lIFZUX0xPQ0tTV0lUQ0ggICAweDU2MEIgIC8qIGRpc2FsbG93IHZ0IHN3aXRjaGluZyAqLworI2RlZmluZSBWVF9VTkxPQ0tTV0lUQ0ggMHg1NjBDICAvKiBhbGxvdyB2dCBzd2l0Y2hpbmcgKi8KKworI2VuZGlmIC8qIF9MSU5VWF9WVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Z0X2J1ZmZlci5oIGIvaW5jbHVkZS9saW51eC92dF9idWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjdiYTM2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC92dF9idWZmZXIuaApAQCAtMCwwICsxLDY0IEBACisvKgorICoJaW5jbHVkZS9saW51eC92dF9idWZmZXIuaCAtLSBBY2Nlc3MgdG8gVlQgc2NyZWVuIGJ1ZmZlcgorICoKKyAqCShjKSAxOTk4IE1hcnRpbiBNYXJlcyA8bWpAdWN3LmN6PgorICoKKyAqCVRoaXMgaXMgYSBzZXQgb2YgbWFjcm9zIGFuZCBmdW5jdGlvbnMgd2hpY2ggYXJlIHVzZWQgaW4gdGhlCisgKgljb25zb2xlIGRyaXZlciBhbmQgcmVsYXRlZCBjb2RlIHRvIGFjY2VzcyB0aGUgc2NyZWVuIGJ1ZmZlci4KKyAqCUluIG1vc3QgY2FzZXMgdGhlIGNvbnNvbGUgd29ya3Mgd2l0aCBzaW1wbGUgaW4tbWVtb3J5IGJ1ZmZlciwKKyAqCWJ1dCB3aGVuIGhhbmRsaW5nIGhhcmR3YXJlIHRleHQgbW9kZSBjb25zb2xlcywgd2Ugc3RvcmUKKyAqCXRoZSBmb3JlZ3JvdW5kIGNvbnNvbGUgZGlyZWN0bHkgaW4gdmlkZW8gbWVtb3J5LgorICovCisKKyNpZm5kZWYgX0xJTlVYX1ZUX0JVRkZFUl9IXworI2RlZmluZSBfTElOVVhfVlRfQlVGRkVSX0hfCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2lmIGRlZmluZWQoQ09ORklHX1ZHQV9DT05TT0xFKSB8fCBkZWZpbmVkKENPTkZJR19NREFfQ09OU09MRSkKKyNpbmNsdWRlIDxhc20vdmdhLmg+CisjZW5kaWYKKworI2lmbmRlZiBWVF9CVUZfSEFWRV9SVworI2RlZmluZSBzY3Jfd3JpdGV3KHZhbCwgYWRkcikgKCooYWRkcikgPSAodmFsKSkKKyNkZWZpbmUgc2NyX3JlYWR3KGFkZHIpICgqKGFkZHIpKQorI2RlZmluZSBzY3JfbWVtY3B5dyhkLCBzLCBjKSBtZW1jcHkoZCwgcywgYykKKyNkZWZpbmUgc2NyX21lbW1vdmV3KGQsIHMsIGMpIG1lbW1vdmUoZCwgcywgYykKKyNkZWZpbmUgVlRfQlVGX0hBVkVfTUVNQ1BZVworI2RlZmluZSBWVF9CVUZfSEFWRV9NRU1NT1ZFVworI2VuZGlmCisKKyNpZm5kZWYgVlRfQlVGX0hBVkVfTUVNU0VUVworc3RhdGljIGlubGluZSB2b2lkIHNjcl9tZW1zZXR3KHUxNiAqcywgdTE2IGMsIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKwljb3VudCAvPSAyOworCXdoaWxlIChjb3VudC0tKQorCQlzY3Jfd3JpdGV3KGMsIHMrKyk7Cit9CisjZW5kaWYKKworI2lmbmRlZiBWVF9CVUZfSEFWRV9NRU1DUFlXCitzdGF0aWMgaW5saW5lIHZvaWQgc2NyX21lbWNweXcodTE2ICpkLCBjb25zdCB1MTYgKnMsIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKwljb3VudCAvPSAyOworCXdoaWxlIChjb3VudC0tKQorCQlzY3Jfd3JpdGV3KHNjcl9yZWFkdyhzKyspLCBkKyspOworfQorI2VuZGlmCisKKyNpZm5kZWYgVlRfQlVGX0hBVkVfTUVNTU9WRVcKK3N0YXRpYyBpbmxpbmUgdm9pZCBzY3JfbWVtbW92ZXcodTE2ICpkLCBjb25zdCB1MTYgKnMsIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKwlpZiAoZCA8IHMpCisJCXNjcl9tZW1jcHl3KGQsIHMsIGNvdW50KTsKKwllbHNlIHsKKwkJY291bnQgLz0gMjsKKwkJZCArPSBjb3VudDsKKwkJcyArPSBjb3VudDsKKwkJd2hpbGUgKGNvdW50LS0pCisJCQlzY3Jfd3JpdGV3KHNjcl9yZWFkdygtLXMpLCAtLWQpOworCX0KK30KKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdnRfa2Vybi5oIGIvaW5jbHVkZS9saW51eC92dF9rZXJuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFiNWFlZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvdnRfa2Vybi5oCkBAIC0wLDAgKzEsODYgQEAKKyNpZm5kZWYgX1ZUX0tFUk5fSAorI2RlZmluZSBfVlRfS0VSTl9ICisKKy8qCisgKiB0aGlzIHJlYWxseSBpcyBhbiBleHRlbnNpb24gb2YgdGhlIHZjX2NvbnMgc3RydWN0dXJlIGluIGNvbnNvbGUuYywgYnV0CisgKiB3aXRoIGluZm9ybWF0aW9uIG5lZWRlZCBieSB0aGUgdnQgcGFja2FnZQorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC92dC5oPgorI2luY2x1ZGUgPGxpbnV4L2tkLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvY29uc29sZV9zdHJ1Y3QuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorCisvKgorICogUHJlc2VudGx5LCBhIGxvdCBvZiBncmFwaGljcyBwcm9ncmFtcyBkbyBub3QgcmVzdG9yZSB0aGUgY29udGVudHMgb2YKKyAqIHRoZSBoaWdoZXIgZm9udCBwYWdlcy4gIERlZmluaW5nIHRoaXMgZmxhZyB3aWxsIGF2b2lkIHVzZSBvZiB0aGVtLCBidXQKKyAqIHdpbGwgbG9zZSBzdXBwb3J0IGZvciBQSU9fRk9OVFJFU0VULiAgTm90ZSB0aGF0IG1hbnkgZm9udCBvcGVyYXRpb25zIGFyZQorICogbm90IGxpa2VseSB0byB3b3JrIHdpdGggdGhlc2UgcHJvZ3JhbXMgYW55d2F5OyB0aGV5IG5lZWQgdG8gYmUKKyAqIGZpeGVkLiAgVGhlIGxpbnV4L0RvY3VtZW50YXRpb24gZGlyZWN0b3J5IGluY2x1ZGVzIGEgY29kZSBzbmlwcGV0CisgKiB0byBzYXZlIGFuZCByZXN0b3JlIHRoZSB0ZXh0IGZvbnQuCisgKi8KKyNpZmRlZiBDT05GSUdfVkdBX0NPTlNPTEUKKyNkZWZpbmUgQlJPS0VOX0dSQVBISUNTX1BST0dSQU1TIDEKKyNlbmRpZgorCitleHRlcm4gdm9pZCBrZF9ta3NvdW5kKHVuc2lnbmVkIGludCBoeiwgdW5zaWduZWQgaW50IHRpY2tzKTsKK2V4dGVybiBpbnQga2JkX3JhdGUoc3RydWN0IGtiZF9yZXBlYXQgKnJlcCk7CisKKy8qIGNvbnNvbGUuYyAqLworCitpbnQgdmNfYWxsb2NhdGUodW5zaWduZWQgaW50IGNvbnNvbGUpOworaW50IHZjX2NvbnNfYWxsb2NhdGVkKHVuc2lnbmVkIGludCBjb25zb2xlKTsKK2ludCB2Y19yZXNpemUoc3RydWN0IHZjX2RhdGEgKnZjLCB1bnNpZ25lZCBpbnQgY29scywgdW5zaWduZWQgaW50IGxpbmVzKTsKK3ZvaWQgdmNfZGlzYWxsb2NhdGUodW5zaWduZWQgaW50IGNvbnNvbGUpOwordm9pZCByZXNldF9wYWxldHRlKHN0cnVjdCB2Y19kYXRhICp2Yyk7Cit2b2lkIGRvX2JsYW5rX3NjcmVlbihpbnQgZW50ZXJpbmdfZ2Z4KTsKK3ZvaWQgZG9fdW5ibGFua19zY3JlZW4oaW50IGxlYXZpbmdfZ2Z4KTsKK3ZvaWQgdW5ibGFua19zY3JlZW4odm9pZCk7Cit2b2lkIHBva2VfYmxhbmtlZF9jb25zb2xlKHZvaWQpOworaW50IGNvbl9mb250X29wKHN0cnVjdCB2Y19kYXRhICp2Yywgc3RydWN0IGNvbnNvbGVfZm9udF9vcCAqb3ApOworaW50IGNvbl9zZXRfY21hcCh1bnNpZ25lZCBjaGFyIF9fdXNlciAqY21hcCk7CitpbnQgY29uX2dldF9jbWFwKHVuc2lnbmVkIGNoYXIgX191c2VyICpjbWFwKTsKK3ZvaWQgc2Nyb2xsYmFjayhzdHJ1Y3QgdmNfZGF0YSAqdmMsIGludCBsaW5lcyk7Cit2b2lkIHNjcm9sbGZyb250KHN0cnVjdCB2Y19kYXRhICp2YywgaW50IGxpbmVzKTsKK3ZvaWQgdXBkYXRlX3JlZ2lvbihzdHJ1Y3QgdmNfZGF0YSAqdmMsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIGludCBjb3VudCk7Cit2b2lkIHJlZHJhd19zY3JlZW4oc3RydWN0IHZjX2RhdGEgKnZjLCBpbnQgaXNfc3dpdGNoKTsKKyNkZWZpbmUgdXBkYXRlX3NjcmVlbih4KSByZWRyYXdfc2NyZWVuKHgsIDApCisjZGVmaW5lIHN3aXRjaF9zY3JlZW4oeCkgcmVkcmF3X3NjcmVlbih4LCAxKQorCitzdHJ1Y3QgdHR5X3N0cnVjdDsKK2ludCB0aW9jbGludXgoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgdW5zaWduZWQgbG9uZyBhcmcpOworCisvKiBjb25zb2xlbWFwLmMgKi8KKworc3RydWN0IHVuaW1hcGluaXQ7CitzdHJ1Y3QgdW5pcGFpcjsKKworaW50IGNvbl9zZXRfdHJhbnNfb2xkKHVuc2lnbmVkIGNoYXIgX191c2VyICogdGFibGUpOworaW50IGNvbl9nZXRfdHJhbnNfb2xkKHVuc2lnbmVkIGNoYXIgX191c2VyICogdGFibGUpOworaW50IGNvbl9zZXRfdHJhbnNfbmV3KHVuc2lnbmVkIHNob3J0IF9fdXNlciAqIHRhYmxlKTsKK2ludCBjb25fZ2V0X3RyYW5zX25ldyh1bnNpZ25lZCBzaG9ydCBfX3VzZXIgKiB0YWJsZSk7CitpbnQgY29uX2NsZWFyX3VuaW1hcChzdHJ1Y3QgdmNfZGF0YSAqdmMsIHN0cnVjdCB1bmltYXBpbml0ICp1aSk7CitpbnQgY29uX3NldF91bmltYXAoc3RydWN0IHZjX2RhdGEgKnZjLCB1c2hvcnQgY3QsIHN0cnVjdCB1bmlwYWlyIF9fdXNlciAqbGlzdCk7CitpbnQgY29uX2dldF91bmltYXAoc3RydWN0IHZjX2RhdGEgKnZjLCB1c2hvcnQgY3QsIHVzaG9ydCBfX3VzZXIgKnVjdCwgc3RydWN0IHVuaXBhaXIgX191c2VyICpsaXN0KTsKK2ludCBjb25fc2V0X2RlZmF1bHRfdW5pbWFwKHN0cnVjdCB2Y19kYXRhICp2Yyk7Cit2b2lkIGNvbl9mcmVlX3VuaW1hcChzdHJ1Y3QgdmNfZGF0YSAqdmMpOwordm9pZCBjb25fcHJvdGVjdF91bmltYXAoc3RydWN0IHZjX2RhdGEgKnZjLCBpbnQgcmRvbmx5KTsKK2ludCBjb25fY29weV91bmltYXAoc3RydWN0IHZjX2RhdGEgKmRzdF92Yywgc3RydWN0IHZjX2RhdGEgKnNyY192Yyk7CisKKy8qIHZ0LmMgKi8KK2ludCB2dF93YWl0YWN0aXZlKGludCB2dCk7Cit2b2lkIGNoYW5nZV9jb25zb2xlKHN0cnVjdCB2Y19kYXRhICpuZXdfdmMpOwordm9pZCByZXNldF92YyhzdHJ1Y3QgdmNfZGF0YSAqdmMpOworCisvKgorICogdmNfc2NyZWVuLmMgc2hhcmVzIHRoaXMgdGVtcG9yYXJ5IGJ1ZmZlciB3aXRoIHRoZSBjb25zb2xlIHdyaXRlIGNvZGUgc28gdGhhdAorICogd2UgY2FuIGVhc2lseSBhdm9pZCB0b3VjaGluZyB1c2VyIHNwYWNlIHdoaWxlIGhvbGRpbmcgdGhlIGNvbnNvbGUgc3BpbmxvY2suCisgKi8KKworI2RlZmluZSBDT05fQlVGX1NJWkUgKENPTkZJR19CQVNFX1NNQUxMID8gMjU2IDogUEFHRV9TSVpFKQorZXh0ZXJuIGNoYXIgY29uX2J1ZltDT05fQlVGX1NJWkVdOworZXh0ZXJuIHN0cnVjdCBzZW1hcGhvcmUgY29uX2J1Zl9zZW07CisKKyNlbmRpZiAvKiBfVlRfS0VSTl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3dhaXQuaCBiL2luY2x1ZGUvbGludXgvd2FpdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3Yzg3NGEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3dhaXQuaApAQCAtMCwwICsxLDQ2MCBAQAorI2lmbmRlZiBfTElOVVhfV0FJVF9ICisjZGVmaW5lIF9MSU5VWF9XQUlUX0gKKworI2RlZmluZSBXTk9IQU5HCQkweDAwMDAwMDAxCisjZGVmaW5lIFdVTlRSQUNFRAkweDAwMDAwMDAyCisjZGVmaW5lIFdTVE9QUEVECVdVTlRSQUNFRAorI2RlZmluZSBXRVhJVEVECQkweDAwMDAwMDA0CisjZGVmaW5lIFdDT05USU5VRUQJMHgwMDAwMDAwOAorI2RlZmluZSBXTk9XQUlUCQkweDAxMDAwMDAwCS8qIERvbid0IHJlYXAsIGp1c3QgcG9sbCBzdGF0dXMuICAqLworCisjZGVmaW5lIF9fV05PVEhSRUFECTB4MjAwMDAwMDAJLyogRG9uJ3Qgd2FpdCBvbiBjaGlsZHJlbiBvZiBvdGhlciB0aHJlYWRzIGluIHRoaXMgZ3JvdXAgKi8KKyNkZWZpbmUgX19XQUxMCQkweDQwMDAwMDAwCS8qIFdhaXQgb24gYWxsIGNoaWxkcmVuLCByZWdhcmRsZXNzIG9mIHR5cGUgKi8KKyNkZWZpbmUgX19XQ0xPTkUJMHg4MDAwMDAwMAkvKiBXYWl0IG9ubHkgb24gbm9uLVNJR0NITEQgY2hpbGRyZW4gKi8KKworLyogRmlyc3QgYXJndW1lbnQgdG8gd2FpdGlkOiAqLworI2RlZmluZSBQX0FMTAkJMAorI2RlZmluZSBQX1BJRAkJMQorI2RlZmluZSBQX1BHSUQJCTIKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vY3VycmVudC5oPgorCit0eXBlZGVmIHN0cnVjdCBfX3dhaXRfcXVldWUgd2FpdF9xdWV1ZV90OwordHlwZWRlZiBpbnQgKCp3YWl0X3F1ZXVlX2Z1bmNfdCkod2FpdF9xdWV1ZV90ICp3YWl0LCB1bnNpZ25lZCBtb2RlLCBpbnQgc3luYywgdm9pZCAqa2V5KTsKK2ludCBkZWZhdWx0X3dha2VfZnVuY3Rpb24od2FpdF9xdWV1ZV90ICp3YWl0LCB1bnNpZ25lZCBtb2RlLCBpbnQgc3luYywgdm9pZCAqa2V5KTsKKworc3RydWN0IF9fd2FpdF9xdWV1ZSB7CisJdW5zaWduZWQgaW50IGZsYWdzOworI2RlZmluZSBXUV9GTEFHX0VYQ0xVU0lWRQkweDAxCisJc3RydWN0IHRhc2tfc3RydWN0ICogdGFzazsKKwl3YWl0X3F1ZXVlX2Z1bmNfdCBmdW5jOworCXN0cnVjdCBsaXN0X2hlYWQgdGFza19saXN0OworfTsKKworc3RydWN0IHdhaXRfYml0X2tleSB7CisJdm9pZCAqZmxhZ3M7CisJaW50IGJpdF9ucjsKK307CisKK3N0cnVjdCB3YWl0X2JpdF9xdWV1ZSB7CisJc3RydWN0IHdhaXRfYml0X2tleSBrZXk7CisJd2FpdF9xdWV1ZV90IHdhaXQ7Cit9OworCitzdHJ1Y3QgX193YWl0X3F1ZXVlX2hlYWQgeworCXNwaW5sb2NrX3QgbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHRhc2tfbGlzdDsKK307Cit0eXBlZGVmIHN0cnVjdCBfX3dhaXRfcXVldWVfaGVhZCB3YWl0X3F1ZXVlX2hlYWRfdDsKKworCisvKgorICogTWFjcm9zIGZvciBkZWNsYXJhdGlvbiBhbmQgaW5pdGlhbGlzYXRvbiBvZiB0aGUgZGF0YXR5cGVzCisgKi8KKworI2RlZmluZSBfX1dBSVRRVUVVRV9JTklUSUFMSVpFUihuYW1lLCB0c2spIHsJCQkJXAorCS50YXNrCQk9IHRzaywJCQkJCQlcCisJLmZ1bmMJCT0gZGVmYXVsdF93YWtlX2Z1bmN0aW9uLAkJCVwKKwkudGFza19saXN0CT0geyBOVUxMLCBOVUxMIH0gfQorCisjZGVmaW5lIERFQ0xBUkVfV0FJVFFVRVVFKG5hbWUsIHRzaykJCQkJCVwKKwl3YWl0X3F1ZXVlX3QgbmFtZSA9IF9fV0FJVFFVRVVFX0lOSVRJQUxJWkVSKG5hbWUsIHRzaykKKworI2RlZmluZSBfX1dBSVRfUVVFVUVfSEVBRF9JTklUSUFMSVpFUihuYW1lKSB7CQkJCVwKKwkubG9jawkJPSBTUElOX0xPQ0tfVU5MT0NLRUQsCQkJCVwKKwkudGFza19saXN0CT0geyAmKG5hbWUpLnRhc2tfbGlzdCwgJihuYW1lKS50YXNrX2xpc3QgfSB9CisKKyNkZWZpbmUgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQobmFtZSkgXAorCXdhaXRfcXVldWVfaGVhZF90IG5hbWUgPSBfX1dBSVRfUVVFVUVfSEVBRF9JTklUSUFMSVpFUihuYW1lKQorCisjZGVmaW5lIF9fV0FJVF9CSVRfS0VZX0lOSVRJQUxJWkVSKHdvcmQsIGJpdCkJCQkJXAorCXsgLmZsYWdzID0gd29yZCwgLmJpdF9uciA9IGJpdCwgfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF93YWl0cXVldWVfaGVhZCh3YWl0X3F1ZXVlX2hlYWRfdCAqcSkKK3sKKwlzcGluX2xvY2tfaW5pdCgmcS0+bG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJnEtPnRhc2tfbGlzdCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3dhaXRxdWV1ZV9lbnRyeSh3YWl0X3F1ZXVlX3QgKnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3sKKwlxLT5mbGFncyA9IDA7CisJcS0+dGFzayA9IHA7CisJcS0+ZnVuYyA9IGRlZmF1bHRfd2FrZV9mdW5jdGlvbjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGluaXRfd2FpdHF1ZXVlX2Z1bmNfZW50cnkod2FpdF9xdWV1ZV90ICpxLAorCQkJCQl3YWl0X3F1ZXVlX2Z1bmNfdCBmdW5jKQoreworCXEtPmZsYWdzID0gMDsKKwlxLT50YXNrID0gTlVMTDsKKwlxLT5mdW5jID0gZnVuYzsKK30KKworc3RhdGljIGlubGluZSBpbnQgd2FpdHF1ZXVlX2FjdGl2ZSh3YWl0X3F1ZXVlX2hlYWRfdCAqcSkKK3sKKwlyZXR1cm4gIWxpc3RfZW1wdHkoJnEtPnRhc2tfbGlzdCk7Cit9CisKKy8qCisgKiBVc2VkIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gc3luYyBhbmQgYXN5bmMgaW8gd2FpdCBjb250ZXh0OgorICogc3luYyBpL28gdHlwaWNhbGx5IHNwZWNpZmllcyBhIE5VTEwgd2FpdCBxdWV1ZSBlbnRyeSBvciBhIHdhaXQKKyAqIHF1ZXVlIGVudHJ5IGJvdW5kIHRvIGEgdGFzayAoY3VycmVudCB0YXNrKSB0byB3YWtlIHVwLgorICogYWlvIHNwZWNpZmllcyBhIHdhaXQgcXVldWUgZW50cnkgd2l0aCBhbiBhc3luYyBub3RpZmljYXRpb24KKyAqIGNhbGxiYWNrIHJvdXRpbmUsIG5vdCBhc3NvY2lhdGVkIHdpdGggYW55IHRhc2suCisgKi8KKyNkZWZpbmUgaXNfc3luY193YWl0KHdhaXQpCSghKHdhaXQpIHx8ICgod2FpdCktPnRhc2spKQorCitleHRlcm4gdm9pZCBGQVNUQ0FMTChhZGRfd2FpdF9xdWV1ZSh3YWl0X3F1ZXVlX2hlYWRfdCAqcSwgd2FpdF9xdWV1ZV90ICogd2FpdCkpOworZXh0ZXJuIHZvaWQgRkFTVENBTEwoYWRkX3dhaXRfcXVldWVfZXhjbHVzaXZlKHdhaXRfcXVldWVfaGVhZF90ICpxLCB3YWl0X3F1ZXVlX3QgKiB3YWl0KSk7CitleHRlcm4gdm9pZCBGQVNUQ0FMTChyZW1vdmVfd2FpdF9xdWV1ZSh3YWl0X3F1ZXVlX2hlYWRfdCAqcSwgd2FpdF9xdWV1ZV90ICogd2FpdCkpOworCitzdGF0aWMgaW5saW5lIHZvaWQgX19hZGRfd2FpdF9xdWV1ZSh3YWl0X3F1ZXVlX2hlYWRfdCAqaGVhZCwgd2FpdF9xdWV1ZV90ICpuZXcpCit7CisJbGlzdF9hZGQoJm5ldy0+dGFza19saXN0LCAmaGVhZC0+dGFza19saXN0KTsKK30KKworLyoKKyAqIFVzZWQgZm9yIHdha2Utb25lIHRocmVhZHM6CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2FkZF93YWl0X3F1ZXVlX3RhaWwod2FpdF9xdWV1ZV9oZWFkX3QgKmhlYWQsCisJCQkJCQl3YWl0X3F1ZXVlX3QgKm5ldykKK3sKKwlsaXN0X2FkZF90YWlsKCZuZXctPnRhc2tfbGlzdCwgJmhlYWQtPnRhc2tfbGlzdCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3JlbW92ZV93YWl0X3F1ZXVlKHdhaXRfcXVldWVfaGVhZF90ICpoZWFkLAorCQkJCQkJCXdhaXRfcXVldWVfdCAqb2xkKQoreworCWxpc3RfZGVsKCZvbGQtPnRhc2tfbGlzdCk7Cit9CisKK3ZvaWQgRkFTVENBTEwoX193YWtlX3VwKHdhaXRfcXVldWVfaGVhZF90ICpxLCB1bnNpZ25lZCBpbnQgbW9kZSwgaW50IG5yLCB2b2lkICprZXkpKTsKK2V4dGVybiB2b2lkIEZBU1RDQUxMKF9fd2FrZV91cF9sb2NrZWQod2FpdF9xdWV1ZV9oZWFkX3QgKnEsIHVuc2lnbmVkIGludCBtb2RlKSk7CitleHRlcm4gdm9pZCBGQVNUQ0FMTChfX3dha2VfdXBfc3luYyh3YWl0X3F1ZXVlX2hlYWRfdCAqcSwgdW5zaWduZWQgaW50IG1vZGUsIGludCBucikpOwordm9pZCBGQVNUQ0FMTChfX3dha2VfdXBfYml0KHdhaXRfcXVldWVfaGVhZF90ICosIHZvaWQgKiwgaW50KSk7CitpbnQgRkFTVENBTEwoX193YWl0X29uX2JpdCh3YWl0X3F1ZXVlX2hlYWRfdCAqLCBzdHJ1Y3Qgd2FpdF9iaXRfcXVldWUgKiwgaW50ICgqKSh2b2lkICopLCB1bnNpZ25lZCkpOworaW50IEZBU1RDQUxMKF9fd2FpdF9vbl9iaXRfbG9jayh3YWl0X3F1ZXVlX2hlYWRfdCAqLCBzdHJ1Y3Qgd2FpdF9iaXRfcXVldWUgKiwgaW50ICgqKSh2b2lkICopLCB1bnNpZ25lZCkpOwordm9pZCBGQVNUQ0FMTCh3YWtlX3VwX2JpdCh2b2lkICosIGludCkpOworaW50IEZBU1RDQUxMKG91dF9vZl9saW5lX3dhaXRfb25fYml0KHZvaWQgKiwgaW50LCBpbnQgKCopKHZvaWQgKiksIHVuc2lnbmVkKSk7CitpbnQgRkFTVENBTEwob3V0X29mX2xpbmVfd2FpdF9vbl9iaXRfbG9jayh2b2lkICosIGludCwgaW50ICgqKSh2b2lkICopLCB1bnNpZ25lZCkpOword2FpdF9xdWV1ZV9oZWFkX3QgKkZBU1RDQUxMKGJpdF93YWl0cXVldWUodm9pZCAqLCBpbnQpKTsKKworI2RlZmluZSB3YWtlX3VwKHgpCQkJX193YWtlX3VwKHgsIFRBU0tfVU5JTlRFUlJVUFRJQkxFIHwgVEFTS19JTlRFUlJVUFRJQkxFLCAxLCBOVUxMKQorI2RlZmluZSB3YWtlX3VwX25yKHgsIG5yKQkJX193YWtlX3VwKHgsIFRBU0tfVU5JTlRFUlJVUFRJQkxFIHwgVEFTS19JTlRFUlJVUFRJQkxFLCBuciwgTlVMTCkKKyNkZWZpbmUgd2FrZV91cF9hbGwoeCkJCQlfX3dha2VfdXAoeCwgVEFTS19VTklOVEVSUlVQVElCTEUgfCBUQVNLX0lOVEVSUlVQVElCTEUsIDAsIE5VTEwpCisjZGVmaW5lIHdha2VfdXBfaW50ZXJydXB0aWJsZSh4KQlfX3dha2VfdXAoeCwgVEFTS19JTlRFUlJVUFRJQkxFLCAxLCBOVUxMKQorI2RlZmluZSB3YWtlX3VwX2ludGVycnVwdGlibGVfbnIoeCwgbnIpCV9fd2FrZV91cCh4LCBUQVNLX0lOVEVSUlVQVElCTEUsIG5yLCBOVUxMKQorI2RlZmluZSB3YWtlX3VwX2ludGVycnVwdGlibGVfYWxsKHgpCV9fd2FrZV91cCh4LCBUQVNLX0lOVEVSUlVQVElCTEUsIDAsIE5VTEwpCisjZGVmaW5lCXdha2VfdXBfbG9ja2VkKHgpCQlfX3dha2VfdXBfbG9ja2VkKCh4KSwgVEFTS19VTklOVEVSUlVQVElCTEUgfCBUQVNLX0lOVEVSUlVQVElCTEUpCisjZGVmaW5lIHdha2VfdXBfaW50ZXJydXB0aWJsZV9zeW5jKHgpICAgX193YWtlX3VwX3N5bmMoKHgpLFRBU0tfSU5URVJSVVBUSUJMRSwgMSkKKworI2RlZmluZSBfX3dhaXRfZXZlbnQod3EsIGNvbmRpdGlvbikgCQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCURFRklORV9XQUlUKF9fd2FpdCk7CQkJCQkJXAorCQkJCQkJCQkJXAorCWZvciAoOzspIHsJCQkJCQkJXAorCQlwcmVwYXJlX3RvX3dhaXQoJndxLCAmX193YWl0LCBUQVNLX1VOSU5URVJSVVBUSUJMRSk7CVwKKwkJaWYgKGNvbmRpdGlvbikJCQkJCQlcCisJCQlicmVhazsJCQkJCQlcCisJCXNjaGVkdWxlKCk7CQkJCQkJXAorCX0JCQkJCQkJCVwKKwlmaW5pc2hfd2FpdCgmd3EsICZfX3dhaXQpOwkJCQkJXAorfSB3aGlsZSAoMCkKKworLyoqCisgKiB3YWl0X2V2ZW50IC0gc2xlZXAgdW50aWwgYSBjb25kaXRpb24gZ2V0cyB0cnVlCisgKiBAd3E6IHRoZSB3YWl0cXVldWUgdG8gd2FpdCBvbgorICogQGNvbmRpdGlvbjogYSBDIGV4cHJlc3Npb24gZm9yIHRoZSBldmVudCB0byB3YWl0IGZvcgorICoKKyAqIFRoZSBwcm9jZXNzIGlzIHB1dCB0byBzbGVlcCAoVEFTS19VTklOVEVSUlVQVElCTEUpIHVudGlsIHRoZQorICogQGNvbmRpdGlvbiBldmFsdWF0ZXMgdG8gdHJ1ZS4gVGhlIEBjb25kaXRpb24gaXMgY2hlY2tlZCBlYWNoIHRpbWUKKyAqIHRoZSB3YWl0cXVldWUgQHdxIGlzIHdva2VuIHVwLgorICoKKyAqIHdha2VfdXAoKSBoYXMgdG8gYmUgY2FsbGVkIGFmdGVyIGNoYW5naW5nIGFueSB2YXJpYWJsZSB0aGF0IGNvdWxkCisgKiBjaGFuZ2UgdGhlIHJlc3VsdCBvZiB0aGUgd2FpdCBjb25kaXRpb24uCisgKi8KKyNkZWZpbmUgd2FpdF9ldmVudCh3cSwgY29uZGl0aW9uKSAJCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJaWYgKGNvbmRpdGlvbikJIAkJCQkJCVwKKwkJYnJlYWs7CQkJCQkJCVwKKwlfX3dhaXRfZXZlbnQod3EsIGNvbmRpdGlvbik7CQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIF9fd2FpdF9ldmVudF90aW1lb3V0KHdxLCBjb25kaXRpb24sIHJldCkJCQlcCitkbyB7CQkJCQkJCQkJXAorCURFRklORV9XQUlUKF9fd2FpdCk7CQkJCQkJXAorCQkJCQkJCQkJXAorCWZvciAoOzspIHsJCQkJCQkJXAorCQlwcmVwYXJlX3RvX3dhaXQoJndxLCAmX193YWl0LCBUQVNLX1VOSU5URVJSVVBUSUJMRSk7CVwKKwkJaWYgKGNvbmRpdGlvbikJCQkJCQlcCisJCQlicmVhazsJCQkJCQlcCisJCXJldCA9IHNjaGVkdWxlX3RpbWVvdXQocmV0KTsJCQkJXAorCQlpZiAoIXJldCkJCQkJCQlcCisJCQlicmVhazsJCQkJCQlcCisJfQkJCQkJCQkJXAorCWZpbmlzaF93YWl0KCZ3cSwgJl9fd2FpdCk7CQkJCQlcCit9IHdoaWxlICgwKQorCisvKioKKyAqIHdhaXRfZXZlbnRfdGltZW91dCAtIHNsZWVwIHVudGlsIGEgY29uZGl0aW9uIGdldHMgdHJ1ZSBvciBhIHRpbWVvdXQgZWxhcHNlcworICogQHdxOiB0aGUgd2FpdHF1ZXVlIHRvIHdhaXQgb24KKyAqIEBjb25kaXRpb246IGEgQyBleHByZXNzaW9uIGZvciB0aGUgZXZlbnQgdG8gd2FpdCBmb3IKKyAqIEB0aW1lb3V0OiB0aW1lb3V0LCBpbiBqaWZmaWVzCisgKgorICogVGhlIHByb2Nlc3MgaXMgcHV0IHRvIHNsZWVwIChUQVNLX1VOSU5URVJSVVBUSUJMRSkgdW50aWwgdGhlCisgKiBAY29uZGl0aW9uIGV2YWx1YXRlcyB0byB0cnVlLiBUaGUgQGNvbmRpdGlvbiBpcyBjaGVja2VkIGVhY2ggdGltZQorICogdGhlIHdhaXRxdWV1ZSBAd3EgaXMgd29rZW4gdXAuCisgKgorICogd2FrZV91cCgpIGhhcyB0byBiZSBjYWxsZWQgYWZ0ZXIgY2hhbmdpbmcgYW55IHZhcmlhYmxlIHRoYXQgY291bGQKKyAqIGNoYW5nZSB0aGUgcmVzdWx0IG9mIHRoZSB3YWl0IGNvbmRpdGlvbi4KKyAqCisgKiBUaGUgZnVuY3Rpb24gcmV0dXJucyAwIGlmIHRoZSBAdGltZW91dCBlbGFwc2VkLCBhbmQgdGhlIHJlbWFpbmluZworICogamlmZmllcyBpZiB0aGUgY29uZGl0aW9uIGV2YWx1YXRlZCB0byB0cnVlIGJlZm9yZSB0aGUgdGltZW91dCBlbGFwc2VkLgorICovCisjZGVmaW5lIHdhaXRfZXZlbnRfdGltZW91dCh3cSwgY29uZGl0aW9uLCB0aW1lb3V0KQkJCVwKKyh7CQkJCQkJCQkJXAorCWxvbmcgX19yZXQgPSB0aW1lb3V0OwkJCQkJCVwKKwlpZiAoIShjb25kaXRpb24pKSAJCQkJCQlcCisJCV9fd2FpdF9ldmVudF90aW1lb3V0KHdxLCBjb25kaXRpb24sIF9fcmV0KTsJCVwKKwlfX3JldDsJCQkJCQkJCVwKK30pCisKKyNkZWZpbmUgX193YWl0X2V2ZW50X2ludGVycnVwdGlibGUod3EsIGNvbmRpdGlvbiwgcmV0KQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJREVGSU5FX1dBSVQoX193YWl0KTsJCQkJCQlcCisJCQkJCQkJCQlcCisJZm9yICg7OykgewkJCQkJCQlcCisJCXByZXBhcmVfdG9fd2FpdCgmd3EsICZfX3dhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7CVwKKwkJaWYgKGNvbmRpdGlvbikJCQkJCQlcCisJCQlicmVhazsJCQkJCQlcCisJCWlmICghc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsJCQkJXAorCQkJc2NoZWR1bGUoKTsJCQkJCVwKKwkJCWNvbnRpbnVlOwkJCQkJXAorCQl9CQkJCQkJCVwKKwkJcmV0ID0gLUVSRVNUQVJUU1lTOwkJCQkJXAorCQlicmVhazsJCQkJCQkJXAorCX0JCQkJCQkJCVwKKwlmaW5pc2hfd2FpdCgmd3EsICZfX3dhaXQpOwkJCQkJXAorfSB3aGlsZSAoMCkKKworLyoqCisgKiB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUgLSBzbGVlcCB1bnRpbCBhIGNvbmRpdGlvbiBnZXRzIHRydWUKKyAqIEB3cTogdGhlIHdhaXRxdWV1ZSB0byB3YWl0IG9uCisgKiBAY29uZGl0aW9uOiBhIEMgZXhwcmVzc2lvbiBmb3IgdGhlIGV2ZW50IHRvIHdhaXQgZm9yCisgKgorICogVGhlIHByb2Nlc3MgaXMgcHV0IHRvIHNsZWVwIChUQVNLX0lOVEVSUlVQVElCTEUpIHVudGlsIHRoZQorICogQGNvbmRpdGlvbiBldmFsdWF0ZXMgdG8gdHJ1ZSBvciBhIHNpZ25hbCBpcyByZWNlaXZlZC4KKyAqIFRoZSBAY29uZGl0aW9uIGlzIGNoZWNrZWQgZWFjaCB0aW1lIHRoZSB3YWl0cXVldWUgQHdxIGlzIHdva2VuIHVwLgorICoKKyAqIHdha2VfdXAoKSBoYXMgdG8gYmUgY2FsbGVkIGFmdGVyIGNoYW5naW5nIGFueSB2YXJpYWJsZSB0aGF0IGNvdWxkCisgKiBjaGFuZ2UgdGhlIHJlc3VsdCBvZiB0aGUgd2FpdCBjb25kaXRpb24uCisgKgorICogVGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIC1FUkVTVEFSVFNZUyBpZiBpdCB3YXMgaW50ZXJydXB0ZWQgYnkgYQorICogc2lnbmFsIGFuZCAwIGlmIEBjb25kaXRpb24gZXZhbHVhdGVkIHRvIHRydWUuCisgKi8KKyNkZWZpbmUgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHdxLCBjb25kaXRpb24pCQkJCVwKKyh7CQkJCQkJCQkJXAorCWludCBfX3JldCA9IDA7CQkJCQkJCVwKKwlpZiAoIShjb25kaXRpb24pKQkJCQkJCVwKKwkJX193YWl0X2V2ZW50X2ludGVycnVwdGlibGUod3EsIGNvbmRpdGlvbiwgX19yZXQpOwlcCisJX19yZXQ7CQkJCQkJCQlcCit9KQorCisjZGVmaW5lIF9fd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQod3EsIGNvbmRpdGlvbiwgcmV0KQkJXAorZG8gewkJCQkJCQkJCVwKKwlERUZJTkVfV0FJVChfX3dhaXQpOwkJCQkJCVwKKwkJCQkJCQkJCVwKKwlmb3IgKDs7KSB7CQkJCQkJCVwKKwkJcHJlcGFyZV90b193YWl0KCZ3cSwgJl9fd2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTsJXAorCQlpZiAoY29uZGl0aW9uKQkJCQkJCVwKKwkJCWJyZWFrOwkJCQkJCVwKKwkJaWYgKCFzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewkJCQlcCisJCQlyZXQgPSBzY2hlZHVsZV90aW1lb3V0KHJldCk7CQkJXAorCQkJaWYgKCFyZXQpCQkJCQlcCisJCQkJYnJlYWs7CQkJCQlcCisJCQljb250aW51ZTsJCQkJCVwKKwkJfQkJCQkJCQlcCisJCXJldCA9IC1FUkVTVEFSVFNZUzsJCQkJCVwKKwkJYnJlYWs7CQkJCQkJCVwKKwl9CQkJCQkJCQlcCisJZmluaXNoX3dhaXQoJndxLCAmX193YWl0KTsJCQkJCVwKK30gd2hpbGUgKDApCisKKy8qKgorICogd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQgLSBzbGVlcCB1bnRpbCBhIGNvbmRpdGlvbiBnZXRzIHRydWUgb3IgYSB0aW1lb3V0IGVsYXBzZXMKKyAqIEB3cTogdGhlIHdhaXRxdWV1ZSB0byB3YWl0IG9uCisgKiBAY29uZGl0aW9uOiBhIEMgZXhwcmVzc2lvbiBmb3IgdGhlIGV2ZW50IHRvIHdhaXQgZm9yCisgKiBAdGltZW91dDogdGltZW91dCwgaW4gamlmZmllcworICoKKyAqIFRoZSBwcm9jZXNzIGlzIHB1dCB0byBzbGVlcCAoVEFTS19JTlRFUlJVUFRJQkxFKSB1bnRpbCB0aGUKKyAqIEBjb25kaXRpb24gZXZhbHVhdGVzIHRvIHRydWUgb3IgYSBzaWduYWwgaXMgcmVjZWl2ZWQuCisgKiBUaGUgQGNvbmRpdGlvbiBpcyBjaGVja2VkIGVhY2ggdGltZSB0aGUgd2FpdHF1ZXVlIEB3cSBpcyB3b2tlbiB1cC4KKyAqCisgKiB3YWtlX3VwKCkgaGFzIHRvIGJlIGNhbGxlZCBhZnRlciBjaGFuZ2luZyBhbnkgdmFyaWFibGUgdGhhdCBjb3VsZAorICogY2hhbmdlIHRoZSByZXN1bHQgb2YgdGhlIHdhaXQgY29uZGl0aW9uLgorICoKKyAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIDAgaWYgdGhlIEB0aW1lb3V0IGVsYXBzZWQsIC1FUkVTVEFSVFNZUyBpZiBpdAorICogd2FzIGludGVycnVwdGVkIGJ5IGEgc2lnbmFsLCBhbmQgdGhlIHJlbWFpbmluZyBqaWZmaWVzIG90aGVyd2lzZQorICogaWYgdGhlIGNvbmRpdGlvbiBldmFsdWF0ZWQgdG8gdHJ1ZSBiZWZvcmUgdGhlIHRpbWVvdXQgZWxhcHNlZC4KKyAqLworI2RlZmluZSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCh3cSwgY29uZGl0aW9uLCB0aW1lb3V0KQlcCisoewkJCQkJCQkJCVwKKwlsb25nIF9fcmV0ID0gdGltZW91dDsJCQkJCQlcCisJaWYgKCEoY29uZGl0aW9uKSkJCQkJCQlcCisJCV9fd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQod3EsIGNvbmRpdGlvbiwgX19yZXQpOyBcCisJX19yZXQ7CQkJCQkJCQlcCit9KQorCisjZGVmaW5lIF9fd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX2V4Y2x1c2l2ZSh3cSwgY29uZGl0aW9uLCByZXQpCVwKK2RvIHsJCQkJCQkJCQlcCisJREVGSU5FX1dBSVQoX193YWl0KTsJCQkJCQlcCisJCQkJCQkJCQlcCisJZm9yICg7OykgewkJCQkJCQlcCisJCXByZXBhcmVfdG9fd2FpdF9leGNsdXNpdmUoJndxLCAmX193YWl0LAkJCVwKKwkJCQkJVEFTS19JTlRFUlJVUFRJQkxFKTsJCVwKKwkJaWYgKGNvbmRpdGlvbikJCQkJCQlcCisJCQlicmVhazsJCQkJCQlcCisJCWlmICghc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsJCQkJXAorCQkJc2NoZWR1bGUoKTsJCQkJCVwKKwkJCWNvbnRpbnVlOwkJCQkJXAorCQl9CQkJCQkJCVwKKwkJcmV0ID0gLUVSRVNUQVJUU1lTOwkJCQkJXAorCQlicmVhazsJCQkJCQkJXAorCX0JCQkJCQkJCVwKKwlmaW5pc2hfd2FpdCgmd3EsICZfX3dhaXQpOwkJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfZXhjbHVzaXZlKHdxLCBjb25kaXRpb24pCQlcCisoewkJCQkJCQkJCVwKKwlpbnQgX19yZXQgPSAwOwkJCQkJCQlcCisJaWYgKCEoY29uZGl0aW9uKSkJCQkJCQlcCisJCV9fd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX2V4Y2x1c2l2ZSh3cSwgY29uZGl0aW9uLCBfX3JldCk7XAorCV9fcmV0OwkJCQkJCQkJXAorfSkKKworLyoKKyAqIE11c3QgYmUgY2FsbGVkIHdpdGggdGhlIHNwaW5sb2NrIGluIHRoZSB3YWl0X3F1ZXVlX2hlYWRfdCBoZWxkLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgYWRkX3dhaXRfcXVldWVfZXhjbHVzaXZlX2xvY2tlZCh3YWl0X3F1ZXVlX2hlYWRfdCAqcSwKKwkJCQkJCSAgIHdhaXRfcXVldWVfdCAqIHdhaXQpCit7CisJd2FpdC0+ZmxhZ3MgfD0gV1FfRkxBR19FWENMVVNJVkU7CisJX19hZGRfd2FpdF9xdWV1ZV90YWlsKHEsICB3YWl0KTsKK30KKworLyoKKyAqIE11c3QgYmUgY2FsbGVkIHdpdGggdGhlIHNwaW5sb2NrIGluIHRoZSB3YWl0X3F1ZXVlX2hlYWRfdCBoZWxkLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgcmVtb3ZlX3dhaXRfcXVldWVfbG9ja2VkKHdhaXRfcXVldWVfaGVhZF90ICpxLAorCQkJCQkgICAgd2FpdF9xdWV1ZV90ICogd2FpdCkKK3sKKwlfX3JlbW92ZV93YWl0X3F1ZXVlKHEsICB3YWl0KTsKK30KKworLyoKKyAqIFRoZXNlIGFyZSB0aGUgb2xkIGludGVyZmFjZXMgdG8gc2xlZXAgd2FpdGluZyBmb3IgYW4gZXZlbnQuCisgKiBUaGV5IGFyZSByYWN5LiAgRE8gTk9UIHVzZSB0aGVtLCB1c2UgdGhlIHdhaXRfZXZlbnQqIGludGVyZmFjZXMgYWJvdmUuICAKKyAqIFdlIHBsYW4gdG8gcmVtb3ZlIHRoZXNlIGludGVyZmFjZXMgZHVyaW5nIDIuNy4KKyAqLworZXh0ZXJuIHZvaWQgRkFTVENBTEwoc2xlZXBfb24od2FpdF9xdWV1ZV9oZWFkX3QgKnEpKTsKK2V4dGVybiBsb25nIEZBU1RDQUxMKHNsZWVwX29uX3RpbWVvdXQod2FpdF9xdWV1ZV9oZWFkX3QgKnEsCisJCQkJICAgICAgc2lnbmVkIGxvbmcgdGltZW91dCkpOworZXh0ZXJuIHZvaWQgRkFTVENBTEwoaW50ZXJydXB0aWJsZV9zbGVlcF9vbih3YWl0X3F1ZXVlX2hlYWRfdCAqcSkpOworZXh0ZXJuIGxvbmcgRkFTVENBTEwoaW50ZXJydXB0aWJsZV9zbGVlcF9vbl90aW1lb3V0KHdhaXRfcXVldWVfaGVhZF90ICpxLAorCQkJCQkJICAgIHNpZ25lZCBsb25nIHRpbWVvdXQpKTsKKworLyoKKyAqIFdhaXRxdWV1ZXMgd2hpY2ggYXJlIHJlbW92ZWQgZnJvbSB0aGUgd2FpdHF1ZXVlX2hlYWQgYXQgd2FrZXVwIHRpbWUKKyAqLwordm9pZCBGQVNUQ0FMTChwcmVwYXJlX3RvX3dhaXQod2FpdF9xdWV1ZV9oZWFkX3QgKnEsCisJCQkJd2FpdF9xdWV1ZV90ICp3YWl0LCBpbnQgc3RhdGUpKTsKK3ZvaWQgRkFTVENBTEwocHJlcGFyZV90b193YWl0X2V4Y2x1c2l2ZSh3YWl0X3F1ZXVlX2hlYWRfdCAqcSwKKwkJCQl3YWl0X3F1ZXVlX3QgKndhaXQsIGludCBzdGF0ZSkpOwordm9pZCBGQVNUQ0FMTChmaW5pc2hfd2FpdCh3YWl0X3F1ZXVlX2hlYWRfdCAqcSwgd2FpdF9xdWV1ZV90ICp3YWl0KSk7CitpbnQgYXV0b3JlbW92ZV93YWtlX2Z1bmN0aW9uKHdhaXRfcXVldWVfdCAqd2FpdCwgdW5zaWduZWQgbW9kZSwgaW50IHN5bmMsIHZvaWQgKmtleSk7CitpbnQgd2FrZV9iaXRfZnVuY3Rpb24od2FpdF9xdWV1ZV90ICp3YWl0LCB1bnNpZ25lZCBtb2RlLCBpbnQgc3luYywgdm9pZCAqa2V5KTsKKworI2RlZmluZSBERUZJTkVfV0FJVChuYW1lKQkJCQkJCVwKKwl3YWl0X3F1ZXVlX3QgbmFtZSA9IHsJCQkJCQlcCisJCS50YXNrCQk9IGN1cnJlbnQsCQkJCVwKKwkJLmZ1bmMJCT0gYXV0b3JlbW92ZV93YWtlX2Z1bmN0aW9uLAkJXAorCQkudGFza19saXN0CT0gewkubmV4dCA9ICYobmFtZSkudGFza19saXN0LAlcCisJCQkJCS5wcmV2ID0gJihuYW1lKS50YXNrX2xpc3QsCVwKKwkJCQl9LAkJCQkJXAorCX0KKworI2RlZmluZSBERUZJTkVfV0FJVF9CSVQobmFtZSwgd29yZCwgYml0KQkJCQlcCisJc3RydWN0IHdhaXRfYml0X3F1ZXVlIG5hbWUgPSB7CQkJCQlcCisJCS5rZXkgPSBfX1dBSVRfQklUX0tFWV9JTklUSUFMSVpFUih3b3JkLCBiaXQpLAkJXAorCQkud2FpdAk9IHsJCQkJCQlcCisJCQkudGFzawkJPSBjdXJyZW50LAkJCVwKKwkJCS5mdW5jCQk9IHdha2VfYml0X2Z1bmN0aW9uLAkJXAorCQkJLnRhc2tfbGlzdAk9CQkJCVwKKwkJCQlMSVNUX0hFQURfSU5JVCgobmFtZSkud2FpdC50YXNrX2xpc3QpLAlcCisJCX0sCQkJCQkJCVwKKwl9CisKKyNkZWZpbmUgaW5pdF93YWl0KHdhaXQpCQkJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCSh3YWl0KS0+dGFzayA9IGN1cnJlbnQ7CQkJCQlcCisJCSh3YWl0KS0+ZnVuYyA9IGF1dG9yZW1vdmVfd2FrZV9mdW5jdGlvbjsJCVwKKwkJSU5JVF9MSVNUX0hFQUQoJih3YWl0KS0+dGFza19saXN0KTsJCQlcCisJfSB3aGlsZSAoMCkKKworLyoqCisgKiB3YWl0X29uX2JpdCAtIHdhaXQgZm9yIGEgYml0IHRvIGJlIGNsZWFyZWQKKyAqIEB3b3JkOiB0aGUgd29yZCBiZWluZyB3YWl0ZWQgb24sIGEga2VybmVsIHZpcnR1YWwgYWRkcmVzcworICogQGJpdDogdGhlIGJpdCBvZiB0aGUgd29yZCBiZWluZyB3YWl0ZWQgb24KKyAqIEBhY3Rpb246IHRoZSBmdW5jdGlvbiB1c2VkIHRvIHNsZWVwLCB3aGljaCBtYXkgdGFrZSBzcGVjaWFsIGFjdGlvbnMKKyAqIEBtb2RlOiB0aGUgdGFzayBzdGF0ZSB0byBzbGVlcCBpbgorICoKKyAqIFRoZXJlIGlzIGEgc3RhbmRhcmQgaGFzaGVkIHdhaXRxdWV1ZSB0YWJsZSBmb3IgZ2VuZXJpYyB1c2UuIFRoaXMKKyAqIGlzIHRoZSBwYXJ0IG9mIHRoZSBoYXNodGFibGUncyBhY2Nlc3NvciBBUEkgdGhhdCB3YWl0cyBvbiBhIGJpdC4KKyAqIEZvciBpbnN0YW5jZSwgaWYgb25lIHdlcmUgdG8gaGF2ZSB3YWl0ZXJzIG9uIGEgYml0ZmxhZywgb25lIHdvdWxkCisgKiBjYWxsIHdhaXRfb25fYml0KCkgaW4gdGhyZWFkcyB3YWl0aW5nIGZvciB0aGUgYml0IHRvIGNsZWFyLgorICogT25lIHVzZXMgd2FpdF9vbl9iaXQoKSB3aGVyZSBvbmUgaXMgd2FpdGluZyBmb3IgdGhlIGJpdCB0byBjbGVhciwKKyAqIGJ1dCBoYXMgbm8gaW50ZW50aW9uIG9mIHNldHRpbmcgaXQuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHdhaXRfb25fYml0KHZvaWQgKndvcmQsIGludCBiaXQsCisJCQkJaW50ICgqYWN0aW9uKSh2b2lkICopLCB1bnNpZ25lZCBtb2RlKQoreworCWlmICghdGVzdF9iaXQoYml0LCB3b3JkKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIG91dF9vZl9saW5lX3dhaXRfb25fYml0KHdvcmQsIGJpdCwgYWN0aW9uLCBtb2RlKTsKK30KKworLyoqCisgKiB3YWl0X29uX2JpdF9sb2NrIC0gd2FpdCBmb3IgYSBiaXQgdG8gYmUgY2xlYXJlZCwgd2hlbiB3YW50aW5nIHRvIHNldCBpdAorICogQHdvcmQ6IHRoZSB3b3JkIGJlaW5nIHdhaXRlZCBvbiwgYSBrZXJuZWwgdmlydHVhbCBhZGRyZXNzCisgKiBAYml0OiB0aGUgYml0IG9mIHRoZSB3b3JkIGJlaW5nIHdhaXRlZCBvbgorICogQGFjdGlvbjogdGhlIGZ1bmN0aW9uIHVzZWQgdG8gc2xlZXAsIHdoaWNoIG1heSB0YWtlIHNwZWNpYWwgYWN0aW9ucworICogQG1vZGU6IHRoZSB0YXNrIHN0YXRlIHRvIHNsZWVwIGluCisgKgorICogVGhlcmUgaXMgYSBzdGFuZGFyZCBoYXNoZWQgd2FpdHF1ZXVlIHRhYmxlIGZvciBnZW5lcmljIHVzZS4gVGhpcworICogaXMgdGhlIHBhcnQgb2YgdGhlIGhhc2h0YWJsZSdzIGFjY2Vzc29yIEFQSSB0aGF0IHdhaXRzIG9uIGEgYml0CisgKiB3aGVuIG9uZSBpbnRlbmRzIHRvIHNldCBpdCwgZm9yIGluc3RhbmNlLCB0cnlpbmcgdG8gbG9jayBiaXRmbGFncy4KKyAqIEZvciBpbnN0YW5jZSwgaWYgb25lIHdlcmUgdG8gaGF2ZSB3YWl0ZXJzIHRyeWluZyB0byBzZXQgYml0ZmxhZworICogYW5kIHdhaXRpbmcgZm9yIGl0IHRvIGNsZWFyIGJlZm9yZSBzZXR0aW5nIGl0LCBvbmUgd291bGQgY2FsbAorICogd2FpdF9vbl9iaXQoKSBpbiB0aHJlYWRzIHdhaXRpbmcgdG8gYmUgYWJsZSB0byBzZXQgdGhlIGJpdC4KKyAqIE9uZSB1c2VzIHdhaXRfb25fYml0X2xvY2soKSB3aGVyZSBvbmUgaXMgd2FpdGluZyBmb3IgdGhlIGJpdCB0bworICogY2xlYXIgd2l0aCB0aGUgaW50ZW50aW9uIG9mIHNldHRpbmcgaXQsIGFuZCB3aGVuIGRvbmUsIGNsZWFyaW5nIGl0LgorICovCitzdGF0aWMgaW5saW5lIGludCB3YWl0X29uX2JpdF9sb2NrKHZvaWQgKndvcmQsIGludCBiaXQsCisJCQkJaW50ICgqYWN0aW9uKSh2b2lkICopLCB1bnNpZ25lZCBtb2RlKQoreworCWlmICghdGVzdF9hbmRfc2V0X2JpdChiaXQsIHdvcmQpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gb3V0X29mX2xpbmVfd2FpdF9vbl9iaXRfbG9jayh3b3JkLCBiaXQsIGFjdGlvbiwgbW9kZSk7Cit9CisJCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvd2FucGlwZS5oIGIvaW5jbHVkZS9saW51eC93YW5waXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY3ZDk1NgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvd2FucGlwZS5oCkBAIC0wLDAgKzEsNDkyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogd2FucGlwZS5oCVdBTlBJUEUodG0pIE11bHRpcHJvdG9jb2wgV0FOIExpbmsgRHJpdmVyLgorKgkJVXNlci1sZXZlbCBBUEkgZGVmaW5pdGlvbnMuCisqCisqIEF1dGhvcjogCU5lbmFkIENvcmJpYyA8bmNvcmJpY0BzYW5nb21hLmNvbT4KKyoJCUdpZGVvbiBIYWNrICAJCisqCisqIENvcHlyaWdodDoJKGMpIDE5OTUtMjAwMCBTYW5nb21hIFRlY2hub2xvZ2llcyBJbmMuCisqCisqCQlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisqCQltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKgkJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisqCQkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqIE5vdiAzLCAgMjAwMCAgTmVuYWQgQ29yYmljICAgIEFkZGVkIGNvbmZpZ19pZCB0byBzZGxhX3Qgc3RydWN0dXJlLgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VkIHRvIGRldGVybWluZSB0aGUgcHJvdG9jb2wgcnVubmluZy4KKyogSnVsIDEzLCAyMDAwICBOZW5hZCBDb3JiaWMJQWRkZWQgU3luY1BQUCBTdXBwb3J0CisqIEZlYiAyNCwgMjAwMCAgTmVuYWQgQ29yYmljICAgIEFkZGVkIHN1cHBvcnQgZm9yIHgyNWFwaSBkcml2ZXIKKyogT2N0IDA0LCAxOTk5ICBOZW5hZCBDb3JiaWMgICAgTmV3IENIRExDIGFuZCBGUkFNRSBSRUxBWSBjb2RlLCBTTVAgc3VwcG9ydAorKiBKdW4gMDIsIDE5OTkgIEdpZGVvbiBIYWNrCUFkZGVkICd1cGRhdGVfY2FsbF9jb3VudCcgZm9yIENpc2NvIEhETEMgCisqCQkJCXN1cHBvcnQKKyogSnVuIDI2LCAxOTk4CURhdmlkIEZvbmcJQWRkZWQgJ2lwX21vZGUnIGluIHNkbGFfdC51LnAgZm9yIGR5bmFtaWMgSVAKKyoJCQkJcm91dGluZyBtb2RlIGNvbmZpZ3VyYXRpb24KKyogSnVuIDEyLCAxOTk4CURhdmlkIEZvbmcJQWRkZWQgQ2lzY28gSERMQyB1bmlvbiBtZW1iZXIgaW4gc2RsYV90CisqIERlYyAwOCwgMTk5NwlKYXNwcmVldCBTaW5naCAgQWRkZWQgJ2F1dGhlbnRpY2F0b3InIGluIHVuaW9uIG9mICdzZGxhX3QnIAorKiBOb3YgMjYsIDE5OTcJSmFzcHJlZXQgU2luZ2gJQWRkZWQgJ2xvYWRfc2hhcmluZycgc3RydWN0dXJlLiAgQWxzbyBhZGRlZCAKKyoJCQkJJ2RldnNfc3RydWN0JywnZGV2X3RvX2RldnRpbnRfbmV4dCcgdG8gJ3NkbGFfdCcJCisqIE5vdiAyNCwgMTk5NwlKYXNwcmVldCBTaW5naAlBZGRlZCAnaXJxX2Rpc19pZl9zZW5kX2NvdW50JywgCisqCQkJCSdpcnFfZGlzX3BvbGxfY291bnQnIHRvICdzZGxhX3QnLgorKiBOb3YgMDYsIDE5OTcJSmFzcHJlZXQgU2luZ2gJQWRkZWQgYSBkZWZpbmUgY2FsbGVkICdJTlRSX1RFU1RfTU9ERScKKyogT2N0IDIwLCAxOTk3CUphc3ByZWV0IFNpbmdoCUFkZGVkICdidWZmX2ludHJfbW9kZV91bmJ1c3knIGFuZCAKKyoJCQkJJ2RsY2lfaW50cl9tb2RlX3VuYnVzeScgdG8gJ3NkbGFfdCcKKyogT2N0IDE4LCAxOTk3CUphc3ByZWV0IFNpbmdoCUFkZGVkIHN0cnVjdHVyZSB0byBtYWludGFpbiBnbG9iYWwgZHJpdmVyCisqCQkJCXN0YXRpc3RpY3MuCisqIEphbiAxNSwgMTk5NwlHZW5lIEtvemluCVZlcnNpb24gMy4xLjAKKyoJCQkJIG8gYWRkZWQgVURQIG1hbmFnZW1lbnQgc3R1ZmYKKyogSmFuIDAyLCAxOTk3CUdlbmUgS296aW4JVmVyc2lvbiAzLjAuMAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmCV9XQU5QSVBFX0gKKyNkZWZpbmUJX1dBTlBJUEVfSAorCisjaW5jbHVkZSA8bGludXgvd2Fucm91dGVyLmg+CisKKy8qIERlZmluZXMgKi8KKworI2lmbmRlZglQQUNLRUQKKyNkZWZpbmUJUEFDS0VECV9fYXR0cmlidXRlX18oKHBhY2tlZCkpCisjZW5kaWYKKworI2RlZmluZQlXQU5QSVBFX01BR0lDCTB4NDE0QzQ0NTNMCS8qIHNpZ25hdHVyZTogJ1NETEEnIHJldmVyc2VkICovCisKKy8qIElPQ1RMIG51bWJlcnMgKHVwIHRvIDE2KSAqLworI2RlZmluZQlXQU5QSVBFX0RVTVAJKFJPVVRFUl9VU0VSKzApCS8qIGR1bXAgYWRhcHRlcidzIG1lbW9yeSAqLworI2RlZmluZQlXQU5QSVBFX0VYRUMJKFJPVVRFUl9VU0VSKzEpCS8qIGV4ZWN1dGUgZmlybXdhcmUgY29tbWFuZCAqLworCisjZGVmaW5lIFRSQUNFX0FMTCAgICAgICAgICAgICAgICAgICAgICAgMHgwMAorI2RlZmluZSBUUkFDRV9QUk9UCQkJMHgwMQorI2RlZmluZSBUUkFDRV9EQVRBCQkJMHgwMgorCisvKiB2YWx1ZXMgZm9yIHJlcXVlc3QvcmVwbHkgYnl0ZSAqLworI2RlZmluZSBVRFBNR01UX1JFUVVFU1QJMHgwMQorI2RlZmluZSBVRFBNR01UX1JFUExZCTB4MDIKKyNkZWZpbmUgVURQX09GRlNFVAkxMgorCisjZGVmaW5lIE1BWF9DTURfQlVGRiAJMTAKKyNkZWZpbmUgTUFYX1gyNV9MQ04gCTI1NQkvKiBNYXhpbXVtIG51bWJlciBvZiB4MjUgY2hhbm5lbHMgKi8KKyNkZWZpbmUgTUFYX0xDTl9OVU0JNDA5NQkvKiBNYXhpbXVtIGxjbiBudW1iZXIgKi8KKyNkZWZpbmUgTUFYX0ZUMV9SRVRSWSAJMTAwCisKKyNpZm5kZWYgQUZfV0FOUElQRQorCSNkZWZpbmUgQUZfV0FOUElQRSAyNQorCSNpZm5kZWYgUEZfV0FOUElQRQorCQkjZGVmaW5lIFBGX1dBTlBJUEUgQUZfV0FOUElQRQorCSNlbmRpZgorI2VuZGlmCisKKworI2RlZmluZSBUWF9USU1FT1VUIDUqSFoKKworLyogR2VuZXJhbCBDcml0aWNhbCBGbGFncyAqLworI2RlZmluZSBTRU5EX0NSSVQJMHgwMAorI2RlZmluZSBQRVJJX0NSSVQJMHgwMQorCisvKiBDaGRsYyBhbmQgUFBQIHBvbGxpbmcgY3JpdGljYWwgZmxhZyAqLworI2RlZmluZSBQT0xMX0NSSVQJMHgwMworCisvKiBGcmFtZSBSZWxheSBUeCBJUlEgc2VuZCBjcml0aWNhbCBmbGFnICovCisjZGVmaW5lIFNFTkRfVFhJUlFfQ1JJVCAweDAyCisKKy8qIEZyYW1lIFJlbGF5IEFSUCBjcml0aWNhbCBmbGFnICovCisjZGVmaW5lIEFSUF9DUklUCTB4MDMKKworLyogQml0IG1hcHMgZm9yIGR5bmFtaWMgaW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24KKyAqIERZTl9PUFRfT04gOiB0dXJucyB0aGlzIG9wdGlvbiBvbi9vZmYgCisgKiBERVZfRE9XTiAgIDogZGV2aWNlIHdhcyBzaHV0ZG93biBieSB0aGUgZHJpdmVyIG5vdAorICogICAgICAgICAgICAgIGJ5IHVzZXIgCisgKi8KKyNkZWZpbmUgRFlOX09QVF9PTgkweDAwCisjZGVmaW5lIERFVl9ET1dOCTB4MDEKKworLyoKKyAqIERhdGEgc3RydWN0dXJlcyBmb3IgSU9DVEwgY2FsbHMuCisgKi8KKwordHlwZWRlZiBzdHJ1Y3Qgc2RsYV9kdW1wCS8qIFdBTlBJUEVfRFVNUCAqLworeworCXVuc2lnbmVkIGxvbmcgbWFnaWM7CS8qIGZvciB2ZXJpZmljYXRpb24gKi8KKwl1bnNpZ25lZCBsb25nIG9mZnNldDsJLyogYWJzb2x1dGUgYWRhcHRlciBtZW1vcnkgYWRkcmVzcyAqLworCXVuc2lnbmVkIGxvbmcgbGVuZ3RoOwkvKiBibG9jayBsZW5ndGggKi8KKwl2b2lkKiBwdHI7CQkvKiAtPiBidWZmZXIgKi8KK30gc2RsYV9kdW1wX3Q7CisKK3R5cGVkZWYgc3RydWN0IHNkbGFfZXhlYwkvKiBXQU5QSVBFX0VYRUMgKi8KK3sKKwl1bnNpZ25lZCBsb25nIG1hZ2ljOwkvKiBmb3IgdmVyaWZpY2F0aW9uICovCisJdm9pZCogY21kOwkJLyogLT4gY29tbWFuZCBzdHJ1Y3R1cmUgKi8KKwl2b2lkKiBkYXRhOwkJLyogLT4gZGF0YSBidWZmZXIgKi8KK30gc2RsYV9leGVjX3Q7CisKKy8qIFVEUCBtYW5hZ2VtZW50IHN0dWZmICovCisKK3R5cGVkZWYgc3RydWN0IHd1bV9oZWFkZXIKK3sKKwl1bnNpZ25lZCBjaGFyIHNpZ25hdHVyZVs4XTsJLyogMDBoOiBzaWduYXR1cmUgKi8KKwl1bnNpZ25lZCBjaGFyIHR5cGU7CQkvKiAwOGg6IHJlcXVlc3QvcmVwbHkgKi8KKwl1bnNpZ25lZCBjaGFyIGNvbW1hbmQ7CQkvKiAwOWg6IGNvbW1uYW5kICovCisJdW5zaWduZWQgY2hhciByZXNlcnZlZFs2XTsJLyogMEFoOiByZXNlcnZlZCAqLworfSB3dW1faGVhZGVyX3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgRGF0YSBTdHJ1Y3R1cmUgZm9yIGdsb2JhbCBzdGF0aXN0aWNzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIHN0cnVjdCBnbG9iYWxfc3RhdHMKK3sKKwl1bnNpZ25lZCBsb25nIGlzcl9lbnRyeTsKKwl1bnNpZ25lZCBsb25nIGlzcl9hbHJlYWR5X2NyaXRpY2FsOwkJCisJdW5zaWduZWQgbG9uZyBpc3Jfcng7CisJdW5zaWduZWQgbG9uZyBpc3JfdHg7CisJdW5zaWduZWQgbG9uZyBpc3JfaW50cl90ZXN0OworCXVuc2lnbmVkIGxvbmcgaXNyX3NwdXJpb3VzOworCXVuc2lnbmVkIGxvbmcgaXNyX2VuYWJsZV90eF9pbnQ7CisJdW5zaWduZWQgbG9uZyByeF9pbnRyX2NvcnJ1cHRfcnhfYmZyOworCXVuc2lnbmVkIGxvbmcgcnhfaW50cl9vbl9vcnBoYW5lZF9ETENJOworCXVuc2lnbmVkIGxvbmcgcnhfaW50cl9kZXZfbm90X3N0YXJ0ZWQ7CisJdW5zaWduZWQgbG9uZyB0eF9pbnRyX2Rldl9ub3Rfc3RhcnRlZDsKKwl1bnNpZ25lZCBsb25nIHBvbGxfZW50cnk7CisJdW5zaWduZWQgbG9uZyBwb2xsX2FscmVhZHlfY3JpdGljYWw7CisJdW5zaWduZWQgbG9uZyBwb2xsX3Byb2Nlc3NlZDsKKwl1bnNpZ25lZCBsb25nIHBvbGxfdGJ1c3lfYmFkX3N0YXR1czsKKwl1bnNpZ25lZCBsb25nIHBvbGxfaG9zdF9kaXNhYmxlX2lycTsKKwl1bnNpZ25lZCBsb25nIHBvbGxfaG9zdF9lbmFibGVfaXJxOworCit9IGdsb2JhbF9zdGF0c190OworCisKK3R5cGVkZWYgc3RydWN0eworCXVuc2lnbmVkIHNob3J0CXVkcF9zcmNfcG9ydAkJUEFDS0VEOworCXVuc2lnbmVkIHNob3J0CXVkcF9kc3RfcG9ydAkJUEFDS0VEOworCXVuc2lnbmVkIHNob3J0CXVkcF9sZW5ndGgJCVBBQ0tFRDsKKwl1bnNpZ25lZCBzaG9ydAl1ZHBfY2hlY2tzdW0JCVBBQ0tFRDsKK30gdWRwX3BrdF90OworCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBjaGFyCXZlcl9pbmV0X2hkcl9sZW5ndGgJUEFDS0VEOworCXVuc2lnbmVkIGNoYXIJc2VydmljZV90eXBlCQlQQUNLRUQ7CisJdW5zaWduZWQgc2hvcnQJdG90YWxfbGVuZ3RoCQlQQUNLRUQ7CisJdW5zaWduZWQgc2hvcnQJaWRlbnRpZmllcgkJUEFDS0VEOworCXVuc2lnbmVkIHNob3J0CWZsYWdzX2ZyYWdfb2Zmc2V0CVBBQ0tFRDsKKwl1bnNpZ25lZCBjaGFyCXR0bAkJCVBBQ0tFRDsKKwl1bnNpZ25lZCBjaGFyCXByb3RvY29sCQlQQUNLRUQ7CisJdW5zaWduZWQgc2hvcnQJaGRyX2NoZWNrc3VtCQlQQUNLRUQ7CisJdW5zaWduZWQgbG9uZwlpcF9zcmNfYWRkcmVzcwkJUEFDS0VEOworCXVuc2lnbmVkIGxvbmcJaXBfZHN0X2FkZHJlc3MJCVBBQ0tFRDsKK30gaXBfcGt0X3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgICAgICB1bnNpZ25lZCBjaGFyICAgICAgICAgICBzaWduYXR1cmVbOF0gICAgUEFDS0VEOworICAgICAgICB1bnNpZ25lZCBjaGFyICAgICAgICAgICByZXF1ZXN0X3JlcGx5ICAgUEFDS0VEOworICAgICAgICB1bnNpZ25lZCBjaGFyICAgICAgICAgICBpZCAgICAgICAgICAgICAgUEFDS0VEOworICAgICAgICB1bnNpZ25lZCBjaGFyICAgICAgICAgICByZXNlcnZlZFs2XSAgICAgUEFDS0VEOworfSB3cF9tZ210X3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgRGF0YSBTdHJ1Y3R1cmUgZm9yIGlmX3NlbmQgIHN0YXRpc3RpY3MKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovICAKK3R5cGVkZWYgc3RydWN0IGlmX3NlbmRfc3RhdHsKKwl1bnNpZ25lZCBsb25nIGlmX3NlbmRfZW50cnk7CisJdW5zaWduZWQgbG9uZyBpZl9zZW5kX3NrYl9udWxsOworCXVuc2lnbmVkIGxvbmcgaWZfc2VuZF9icm9hZGNhc3Q7CisJdW5zaWduZWQgbG9uZyBpZl9zZW5kX211bHRpY2FzdDsKKwl1bnNpZ25lZCBsb25nIGlmX3NlbmRfY3JpdGljYWxfSVNSOworCXVuc2lnbmVkIGxvbmcgaWZfc2VuZF9jcml0aWNhbF9ub25fSVNSOworCXVuc2lnbmVkIGxvbmcgaWZfc2VuZF90YnVzeTsKKwl1bnNpZ25lZCBsb25nIGlmX3NlbmRfdGJ1c3lfdGltZW91dDsKKwl1bnNpZ25lZCBsb25nIGlmX3NlbmRfUElQRV9yZXF1ZXN0OworCXVuc2lnbmVkIGxvbmcgaWZfc2VuZF93YW5fZGlzY29ubmVjdGVkOworCXVuc2lnbmVkIGxvbmcgaWZfc2VuZF9kbGNpX2Rpc2Nvbm5lY3RlZDsKKwl1bnNpZ25lZCBsb25nIGlmX3NlbmRfbm9fYmZyczsKKwl1bnNpZ25lZCBsb25nIGlmX3NlbmRfYWRwdHJfYmZyc19mdWxsOworCXVuc2lnbmVkIGxvbmcgaWZfc2VuZF9iZnJfcGFzc2VkX3RvX2FkcHRyOworCXVuc2lnbmVkIGxvbmcgaWZfc2VuZF9wcm90b2NvbF9lcnJvcjsKKyAgICAgICAJdW5zaWduZWQgbG9uZyBpZl9zZW5kX2Jmcl9ub3RfcGFzc2VkX3RvX2FkcHRyOworICAgICAgIAl1bnNpZ25lZCBsb25nIGlmX3NlbmRfdHhfaW50X2VuYWJsZWQ7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgaWZfc2VuZF9jb25zZWNfc2VuZF9mYWlsOyAKK30gaWZfc2VuZF9zdGF0X3Q7CisKK3R5cGVkZWYgc3RydWN0IHJ4X2ludHJfc3RhdHsKKwl1bnNpZ25lZCBsb25nIHJ4X2ludHJfbm9fc29ja2V0OworCXVuc2lnbmVkIGxvbmcgcnhfaW50cl9kZXZfbm90X3N0YXJ0ZWQ7CisJdW5zaWduZWQgbG9uZyByeF9pbnRyX1BJUEVfcmVxdWVzdDsKKwl1bnNpZ25lZCBsb25nIHJ4X2ludHJfYmZyX25vdF9wYXNzZWRfdG9fc3RhY2s7CisJdW5zaWduZWQgbG9uZyByeF9pbnRyX2Jmcl9wYXNzZWRfdG9fc3RhY2s7Cit9IHJ4X2ludHJfc3RhdF90OwkKKwordHlwZWRlZiBzdHJ1Y3QgcGlwZV9tZ210X3N0YXR7CisJdW5zaWduZWQgbG9uZyBVRFBfUElQRV9tZ210X2ttYWxsb2NfZXJyOworCXVuc2lnbmVkIGxvbmcgVURQX1BJUEVfbWdtdF9kaXJlY3Rpb25fZXJyOworCXVuc2lnbmVkIGxvbmcgVURQX1BJUEVfbWdtdF9hZHB0cl90eXBlX2VycjsKKwl1bnNpZ25lZCBsb25nIFVEUF9QSVBFX21nbXRfYWRwdHJfY21uZF9PSzsKKwl1bnNpZ25lZCBsb25nIFVEUF9QSVBFX21nbXRfYWRwdHJfY21uZF90aW1lb3V0OworCXVuc2lnbmVkIGxvbmcgVURQX1BJUEVfbWdtdF9hZHB0cl9zZW5kX3Bhc3NlZDsKKwl1bnNpZ25lZCBsb25nIFVEUF9QSVBFX21nbXRfYWRwdHJfc2VuZF9mYWlsZWQ7CisJdW5zaWduZWQgbG9uZyBVRFBfUElQRV9tZ210X25vdF9wYXNzZWRfdG9fc3RhY2s7CisJdW5zaWduZWQgbG9uZyBVRFBfUElQRV9tZ210X3Bhc3NlZF90b19zdGFjazsKKwl1bnNpZ25lZCBsb25nIFVEUF9QSVBFX21nbXRfbm9fc29ja2V0OworICAgICAgICB1bnNpZ25lZCBsb25nIFVEUF9QSVBFX21nbXRfcGFzc2VkX3RvX2FkcHRyOworfSBwaXBlX21nbXRfc3RhdF90OworCisKK3R5cGVkZWYgc3RydWN0IHsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworfSBiaF9kYXRhX3QsIGNtZF9kYXRhX3Q7CisKKyNkZWZpbmUgTUFYX0xHVEhfVURQX01HTlRfUEtUIDIwMDAKKyAKKworLyogVGhpcyBpcyB1c2VkIGZvciBpbnRlcnJ1cHQgdGVzdGluZyAqLworI2RlZmluZSBJTlRSX1RFU1RfTU9ERQkweDAyCisKKyNkZWZpbmUJV1VNX1NJR05BVFVSRV9MCTB4NTA0OTUwNDYKKyNkZWZpbmUJV1VNX1NJR05BVFVSRV9ICTB4NDQ0RTM4NDUKKworI2RlZmluZQlXVU1fS0lMTAkweDUwCisjZGVmaW5lCVdVTV9FWEVDCTB4NTEKKworI2RlZmluZSBXQU5QSVBFCQkweDAwCisjZGVmaW5lIEFQSQkJMHgwMQorI2RlZmluZSBCUklER0UJCTB4MDIKKyNkZWZpbmUgQlJJREdFX05PREUJMHgwMworCisjaWZkZWYJX19LRVJORUxfXworLyoqKioqKiBLZXJuZWwgSW50ZXJmYWNlICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC9zZGxhZHJ2Lmg+CS8qIFNETEEgc3VwcG9ydCBtb2R1bGUgQVBJIGRlZmluaXRpb25zICovCisjaW5jbHVkZSA8bGludXgvc2RsYXNmbS5oPgkvKiBTRExBIGZpcm13YXJlIG1vZHVsZSBkZWZpbml0aW9ucyAqLworI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbFAuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfcmVnLmg+CisjaW5jbHVkZSA8YXNtL3NlcmlhbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgorCisKKyNkZWZpbmUJaXNfZGlnaXQoY2gpICgoKGNoKT49KHVuc2lnbmVkKScwJyYmKGNoKTw9KHVuc2lnbmVkKSc5Jyk/MTowKQorI2RlZmluZQlpc19hbHBoYShjaCkgKCgoKGNoKT49KHVuc2lnbmVkKSdhJyYmKGNoKTw9KHVuc2lnbmVkKSd6Jyl8fFwKKwkgCSAgKChjaCk+PSh1bnNpZ25lZCknQScmJihjaCk8PSh1bnNpZ25lZCknWicpKT8xOjApCisjZGVmaW5lCWlzX2hleF9kaWdpdChjaCkgKCgoKGNoKT49KHVuc2lnbmVkKScwJyYmKGNoKTw9KHVuc2lnbmVkKSc5Jyl8fFwKKwkgCSAgKChjaCk+PSh1bnNpZ25lZCknYScmJihjaCk8PSh1bnNpZ25lZCknZicpfHxcCisJIAkgICgoY2gpPj0odW5zaWduZWQpJ0EnJiYoY2gpPD0odW5zaWduZWQpJ0YnKSk/MTowKQorCisKKy8qKioqKiogRGF0YSBTdHJ1Y3R1cmVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBBZGFwdGVyIERhdGEgU3BhY2UuCisgKiBUaGlzIHN0cnVjdHVyZSBpcyBuZWVkZWQgYmVjYXVzZSB3ZSBoYW5kbGUgbXVsdGlwbGUgY2FyZHMsIG90aGVyd2lzZQorICogc3RhdGljIGRhdGEgd291bGQgZG8gaXQuCisgKi8KK3R5cGVkZWYgc3RydWN0IHNkbGEKK3sKKwljaGFyIGRldm5hbWVbV0FOX0RSVk5BTUVfU1orMV07CS8qIGNhcmQgbmFtZSAqLworCXNkbGFod190IGh3OwkJCS8qIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24gKi8KKwlzdHJ1Y3Qgd2FuX2RldmljZSB3YW5kZXY7CS8qIFdBTiBkZXZpY2UgZGF0YSBzcGFjZSAqLworCQorCXVuc2lnbmVkIG9wZW5fY250OwkJLyogbnVtYmVyIG9mIG9wZW4gaW50ZXJmYWNlcyAqLworCXVuc2lnbmVkIGxvbmcgc3RhdGVfdGljazsJLyogbGluayBzdGF0ZSB0aW1lc3RhbXAgKi8KKwl1bnNpZ25lZCBpbnRyX21vZGU7CQkvKiBUeXBlIG9mIEludGVycnVwdCBNb2RlICovCisJY2hhciBpbl9pc3I7CQkJLyogaW50ZXJydXB0LWluLXNlcnZpY2UgZmxhZyAqLworCWNoYXIgYnVmZl9pbnRfbW9kZV91bmJ1c3k7CS8qIGZsYWcgZm9yIGNhcnJ5aW5nIG91dCBkZXZfdGludCAqLyAgCisJY2hhciBkbGNpX2ludF9tb2RlX3VuYnVzeTsJLyogZmxhZyBmb3IgY2Fycnlpbmcgb3V0IGRldl90aW50ICovCisJbG9uZyBjb25maWd1cmVkOwkJLyogZmxhZyBmb3IgcHJldmlvdXMgY29uZmlndXJhdGlvbnMgKi8KKwkKKwl1bnNpZ25lZCBzaG9ydCBpcnFfZGlzX2lmX3NlbmRfY291bnQ7IC8qIERpc2FibGluZyBpcnFzIGluIGlmX3NlbmQqLworCXVuc2lnbmVkIHNob3J0IGlycV9kaXNfcG9sbF9jb3VudDsgICAvKiBEaXNhYmxpbmcgaXJxcyBpbiBwb2xsIHJvdXRpbmUqLworCXVuc2lnbmVkIHNob3J0IGZvcmNlX2VuYWJsZV9pcnE7CisJY2hhciBUcmFjaW5nRW5hYmxlZDsJCS8qIGZsYWcgZm9yIGVuYWJsaW5nIHRyYWNlICovCisJZ2xvYmFsX3N0YXRzX3Qgc3RhdGlzdGljczsJLyogZ2xvYmFsIHN0YXRpc3RpY3MgKi8KKwl2b2lkKiBtYm94OwkJCS8qIC0+IG1haWxib3ggKi8KKwl2b2lkKiByeG1iOwkJCS8qIC0+IHJlY2VpdmUgbWFpbGJveCAqLworCXZvaWQqIGZsYWdzOwkJCS8qIC0+IGFkYXB0ZXIgc3RhdHVzIGZsYWdzICovCisJdm9pZCAoKmlzcikoc3RydWN0IHNkbGEqIGNhcmQpOwkvKiBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lICovCisJdm9pZCAoKnBvbGwpKHN0cnVjdCBzZGxhKiBjYXJkKTsgLyogcG9sbGluZyByb3V0aW5lICovCisJaW50ICgqZXhlYykoc3RydWN0IHNkbGEqIGNhcmQsIHZvaWQqIHVfY21kLCB2b2lkKiB1X2RhdGEpOworCQkJCQkvKiBVc2VkIGJ5IHRoZSBsaXN0ZW4oKSBzeXN0ZW0gY2FsbCAqLwkJCisJLyogV2FucGlwZSBTb2NrZXQgSW50ZXJmYWNlICovCisJaW50ICAgKCpmdW5jKSAoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IHNvY2sgKik7CisJc3RydWN0IHNvY2sgKnNrOworCisJLyogU2h1dGRvd24gZnVuY3Rpb24gKi8KKwl2b2lkICgqZGlzYWJsZV9jb21tKSAoc3RydWN0IHNkbGEgKmNhcmQpOworCisJLyogU2Vjb25kYXJ5IFBvcnQgRGV2aWNlOiBQaWdnaWJhY2tpbmcgKi8KKwlzdHJ1Y3Qgc2RsYSAqbmV4dDsKKworCS8qIFRUWSBkcml2ZXIgdmFyaWFibGVzICovCisJdW5zaWduZWQgY2hhciB0dHlfb3B0OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisJdW5zaWduZWQgaW50IHR0eV9taW5vcjsKKwl1bnNpZ25lZCBpbnQgdHR5X29wZW47CisJdW5zaWduZWQgY2hhciAqdHR5X2J1ZjsKKwl1bnNpZ25lZCBjaGFyICp0dHlfcng7CisJc3RydWN0IHdvcmtfc3RydWN0IHR0eV93b3JrOworCQorCXVuaW9uCisJeworCQlzdHJ1Y3QKKwkJewkJCS8qKioqKiogWC4yNSBzcGVjaWZpYyBkYXRhICoqKioqKioqKiovCisJCQl1MzIgbG9fcHZjOworCQkJdTMyIGhpX3B2YzsKKwkJCXUzMiBsb19zdmM7CisJCQl1MzIgaGlfc3ZjOworCQkJc3RydWN0IG5ldF9kZXZpY2UgKnN2Y190b19kZXZfbWFwW01BWF9YMjVfTENOXTsKKwkJCXN0cnVjdCBuZXRfZGV2aWNlICpwdmNfdG9fZGV2X21hcFtNQVhfWDI1X0xDTl07CisJCQlzdHJ1Y3QgbmV0X2RldmljZSAqdHhfZGV2OworCQkJc3RydWN0IG5ldF9kZXZpY2UgKmNtZF9kZXY7CisJCQl1MzIgbm9fZGV2OworCQkJdm9sYXRpbGUgdTggKmhkbGNfYnVmX3N0YXR1czsKKwkJCXUzMiB0eF9pbnRlcnJ1cHRzX3BlbmRpbmc7CisgICAgICAgICAgICAgICAgICAgICAgICB1MTYgdGltZXJfaW50X2VuYWJsZWQ7CisJCQlzdHJ1Y3QgbmV0X2RldmljZSAqcG9sbF9kZXZpY2U7CisJCQlhdG9taWNfdCBjb21tYW5kX2J1c3k7CisKKwkJCXUxNiB1ZHBfcGt0X2xndGg7CisgICAgICAgICAgICAgICAgICAgICAgICB1MzIgdWRwX3R5cGU7CisgICAgICAgICAgICAgICAgICAgICAgICB1OCAgdWRwX3BrdF9zcmM7CisJCQl1MzIgdWRwX2xjbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICp1ZHBfZGV2OworICAgICAgICAgICAgICAgICAgICAgICAgczggdWRwX3BrdF9kYXRhW01BWF9MR1RIX1VEUF9NR05UX1BLVF07CisKKwkJIAl1OCBMQVBCX2hkbGM7CQkvKiBPcHRpb24gdG8gdHVybiBvZmYgWDI1IGFuZCBydW4gb25seSBMQVBCICovCisJCQl1OCBsb2dnaW5nOwkJLyogT3B0aW9uIHRvIGxvZyBjYWxsIG1lc3NhZ2VzICovCisJCQl1OCBvb2Jfb25fbW9kZW07CS8qIE9wdGlvbiB0byBzZW5kIG1vZGVtIHN0YXR1cyB0byB0aGUgYXBpICovCisJCQl1MTYgbnVtX29mX2NoOwkJLyogTnVtYmVyIG9mIGNoYW5uZWxzIGNvbmZpZ3VyZWQgYnkgdGhlIHVzZXIgKi8KKworCQkJc3RydWN0IHdvcmtfc3RydWN0IHgyNV9wb2xsX3dvcms7CisJCQlzdHJ1Y3QgdGltZXJfbGlzdCB4MjVfdGltZXI7CisJCX0geDsKKwkJc3RydWN0CisJCXsJCQkvKioqKioqIGZyYW1lIHJlbGF5IHNwZWNpZmljIGRhdGEgKioqLworCQkJdm9pZCogcnhtYl9iYXNlOwkvKiAtPiBmaXJzdCBSeCBidWZmZXIgKi8KKwkJCXZvaWQqIHJ4bWJfbGFzdDsJLyogLT4gbGFzdCBSeCBidWZmZXIgKi8KKwkJCXVuc2lnbmVkIHJ4X2Jhc2U7CS8qIFM1MDggcmVjZWl2ZSBidWZmZXIgYmFzZSAqLworCQkJdW5zaWduZWQgcnhfdG9wOwkvKiBTNTA4IHJlY2VpdmUgYnVmZmVyIGVuZCAqLworCQkJdW5zaWduZWQgc2hvcnQgbm9kZV9kbGNpWzEwMF07CisJCQl1bnNpZ25lZCBzaG9ydCBkbGNpX251bTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkbGNpX3RvX2Rldl9tYXBbOTkxICsgMV07CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCB0eF9pbnRlcnJ1cHRzX3BlbmRpbmc7CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCB0aW1lcl9pbnRfZW5hYmxlZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHVkcF9wa3RfbGd0aDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCB1ZHBfdHlwZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgdWRwX3BrdF9zcmM7CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCB1ZHBfZGxjaTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgdWRwX3BrdF9kYXRhW01BWF9MR1RIX1VEUF9NR05UX1BLVF07CisgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiB0cmNfZWxfYmFzZTsgICAgICAJCS8qIGZpcnN0IHRyYWNlIGVsZW1lbnQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIHRyY19lbF9sYXN0OyAgICAgIAkJLyogbGFzdCB0cmFjZSBlbGVtZW50ICovCisgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjdXJyX3RyY19lbDsgICAgICAJCS8qIGN1cnJlbnQgdHJhY2UgZWxlbWVudCAqLworICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgdHJjX2Jmcl9zcGFjZTsgCQkvKiB0cmFjZSBidWZmZXIgc3BhY2UgKi8KKwkJCXVuc2lnbmVkIGNoYXIgIHVwZGF0ZV9jb21tc19zdGF0czsKKwkJCXN0cnVjdCBuZXRfZGV2aWNlICphcnBfZGV2OworCQkJc3BpbmxvY2tfdCBpZl9zZW5kX2xvY2s7CisJCX0gZjsKKwkJc3RydWN0CQkJLyoqKioqKiBQUFAtc3BlY2lmaWMgZGF0YSAqKioqKioqKioqKi8KKwkJeworCQkJY2hhciBpZl9uYW1lW1dBTl9JRk5BTUVfU1orMV07CS8qIGludGVyZmFjZSBuYW1lICovCisJCQl2b2lkKiB0eGJ1ZjsJCS8qIC0+IGN1cnJlbnQgVHggYnVmZmVyICovCisJCQl2b2lkKiB0eGJ1Zl9iYXNlOwkvKiAtPiBmaXJzdCBUeCBidWZmZXIgKi8KKwkJCXZvaWQqIHR4YnVmX2xhc3Q7CS8qIC0+IGxhc3QgVHggYnVmZmVyICovCisJCQl2b2lkKiByeGJ1Zl9iYXNlOwkvKiAtPiBmaXJzdCBSeCBidWZmZXIgKi8KKwkJCXZvaWQqIHJ4YnVmX2xhc3Q7CS8qIC0+IGxhc3QgUnggYnVmZmVyICovCisJCQl1bnNpZ25lZCByeF9iYXNlOwkvKiBTNTA4IHJlY2VpdmUgYnVmZmVyIGJhc2UgKi8KKwkJCXVuc2lnbmVkIHJ4X3RvcDsJLyogUzUwOCByZWNlaXZlIGJ1ZmZlciBlbmQgKi8KKwkJCWNoYXIgaXBfbW9kZTsJCS8qIFNUQVRJQy9IT1NUL1BFRVIgSVAgTW9kZSAqLworCQkJY2hhciBhdXRoZW50aWNhdG9yOwkvKiBBdXRoZW50aWNhdG9yIGZvciBQQVAvQ0hBUCAqLworCQkJdW5zaWduZWQgY2hhciBjb21tX2VuYWJsZWQ7IC8qIElzIGNvbW0gZW5hYmxlZCBvciBub3QgKi8KKwkJCXVuc2lnbmVkIGNoYXIgcGVlcl9yb3V0ZTsgICAvKiBQcm9jZXNzIFBlZXIgUm91dGUgKi8JCisJCQl1bnNpZ25lZCBsb25nICp0eGJ1Zl9uZXh0OyAgLyogTmV4dCBUeCBidWZmZXIgdG8gdXNlICovIAorCQkJdW5zaWduZWQgbG9uZyAqcnhidWZfbmV4dDsgIC8qIE5leHQgUnggYnVmZmVyIHRvIHVzZSAqLworCQl9IHA7CisJCXN0cnVjdAkJCS8qIENpc2NvIEhETEMtc3BlY2lmaWMgZGF0YSAqLworCQl7CisJCQljaGFyIGlmX25hbWVbV0FOX0lGTkFNRV9TWisxXTsJLyogaW50ZXJmYWNlIG5hbWUgKi8KKwkJCXVuc2lnbmVkIGNoYXIgY29tbV9wb3J0Oy8qIENvbW11bmljYXRpb24gUG9ydCBPIG9yIDEgKi8KKwkJCXVuc2lnbmVkIGNoYXIgdXNlZGJ5OyAgLyogVXNlZCBieSBXQU5QSVBFIG9yIEFQSSAqLworCQkJdm9pZCogcnhtYjsJCS8qIFJlY2VpdmUgbWFpbCBib3ggKi8KKwkJCXZvaWQqIGZsYWdzOwkJLyogZmxhZ3MgKi8KKwkJCXZvaWQqIHR4X3N0YXR1czsJLyogVHggc3RhdHVzIGVsZW1lbnQgKi8KKwkJCXZvaWQqIHJ4X3N0YXR1czsJLyogUnggc3RhdHVzIGVsZW1lbnQgKi8KKwkJCXZvaWQqIHR4YnVmOwkJLyogLT4gY3VycmVudCBUeCBidWZmZXIgKi8KKwkJCXZvaWQqIHR4YnVmX2Jhc2U7CS8qIC0+IGZpcnN0IFR4IGJ1ZmZlciAqLworCQkJdm9pZCogdHhidWZfbGFzdDsJLyogLT4gbGFzdCBUeCBidWZmZXIgKi8KKwkJCXZvaWQqIHJ4YnVmX2Jhc2U7CS8qIC0+IGZpcnN0IFJ4IGJ1ZmZlciAqLworCQkJdm9pZCogcnhidWZfbGFzdDsJLyogLT4gbGFzdCBSeCBidWZmZXIgKi8KKwkJCXVuc2lnbmVkIHJ4X2Jhc2U7CS8qIFM1MDggcmVjZWl2ZSBidWZmZXIgYmFzZSAqLworCQkJdW5zaWduZWQgcnhfdG9wOwkvKiBTNTA4IHJlY2VpdmUgYnVmZmVyIGVuZCAqLworCQkJdW5zaWduZWQgY2hhciByZWNlaXZlX29ubHk7IC8qIGhpZ2ggc3BlZWQgcmVjZWl2ZXJzICovCisJCQl1bnNpZ25lZCBzaG9ydCBwcm90b2NvbF9vcHRpb25zOworCQkJdW5zaWduZWQgc2hvcnQga3BhbHZfdHg7CS8qIFR4IGtwYWx2IHRpbWVyICovCisJCQl1bnNpZ25lZCBzaG9ydCBrcGFsdl9yeDsJLyogUngga3BhbHYgdGltZXIgKi8KKwkJCXVuc2lnbmVkIHNob3J0IGtwYWx2X2VycjsJLyogRXJyb3IgdG9sZXJhbmNlICovCisJCQl1bnNpZ25lZCBzaG9ydCBzbGFycF90aW1lcjsJLyogU0xBUlAgcmVxIHRpbWVyICovCisJCQl1bnNpZ25lZCBzdGF0ZTsJCQkvKiBzdGF0ZSBvZiB0aGUgbGluayAqLworCQkJdW5zaWduZWQgY2hhciBhcGlfc3RhdHVzOworCQkJdW5zaWduZWQgY2hhciB1cGRhdGVfY2FsbF9jb3VudDsKKwkJCXVuc2lnbmVkIHNob3J0IGFwaV9vcHRpb25zOwkvKiBmb3IgYXN5bmMgY29uZmlnICovCisJCQl1bnNpZ25lZCBjaGFyICBhc3luY19tb2RlOworCQkgICAgICAgIHVuc2lnbmVkIHNob3J0IHR4X2JpdHNfcGVyX2NoYXI7CisJCSAgICAgICAgdW5zaWduZWQgc2hvcnQgcnhfYml0c19wZXJfY2hhcjsKKwkJICAgICAgICB1bnNpZ25lZCBzaG9ydCBzdG9wX2JpdHM7CisJCSAgICAgICAgdW5zaWduZWQgc2hvcnQgcGFyaXR5OworCQkJdW5zaWduZWQgc2hvcnQgYnJlYWtfdGltZXI7CisJCSAgICAgICAgdW5zaWduZWQgc2hvcnQgaW50ZXJfY2hhcl90aW1lcjsKKwkJICAgICAgICB1bnNpZ25lZCBzaG9ydCByeF9jb21wbGV0ZV9sZW5ndGg7CisJCSAgICAgICAgdW5zaWduZWQgc2hvcnQgeG9uX2NoYXI7CisJCSAgICAgICAgdW5zaWduZWQgc2hvcnQgeG9mZl9jaGFyOworCQkJdW5zaWduZWQgY2hhciBjb21tX2VuYWJsZWQ7IC8qIElzIGNvbW0gZW5hYmxlZCBvciBub3QgKi8KKwkJCXVuc2lnbmVkIGNoYXIgYmFja3VwOworCQl9IGM7CisJCXN0cnVjdAorCQl7CisJCQl2b2lkKiB0eF9zdGF0dXM7CS8qIFR4IHN0YXR1cyBlbGVtZW50ICovCisJCQl2b2lkKiByeF9zdGF0dXM7CS8qIFJ4IHN0YXR1cyBlbGVtZW50ICovCisJCQl2b2lkKiB0cmFjZV9zdGF0dXM7CS8qIFRyYWNlIHN0YXR1cyBlbGVtZW50ICovCisJCQl2b2lkKiB0eGJ1ZjsJCS8qIC0+IGN1cnJlbnQgVHggYnVmZmVyICovCisJCQl2b2lkKiB0eGJ1Zl9iYXNlOwkvKiAtPiBmaXJzdCBUeCBidWZmZXIgKi8KKwkJCXZvaWQqIHR4YnVmX2xhc3Q7CS8qIC0+IGxhc3QgVHggYnVmZmVyICovCisJCQl2b2lkKiByeGJ1Zl9iYXNlOwkvKiAtPiBmaXJzdCBSeCBidWZmZXIgKi8KKwkJCXZvaWQqIHJ4YnVmX2xhc3Q7CS8qIC0+IGxhc3QgUnggYnVmZmVyICovCisJCQl2b2lkKiB0cmFjZWJ1ZjsJCS8qIC0+IGN1cnJlbnQgVHJhY2UgYnVmZmVyICovCisJCQl2b2lkKiB0cmFjZWJ1Zl9iYXNlOwkvKiAtPiBjdXJyZW50IFRyYWNlIGJ1ZmZlciAqLworCQkJdm9pZCogdHJhY2VidWZfbGFzdDsJLyogLT4gY3VycmVudCBUcmFjZSBidWZmZXIgKi8KKwkJCXVuc2lnbmVkIHJ4X2Jhc2U7CS8qIHJlY2VpdmUgYnVmZmVyIGJhc2UgKi8KKwkJCXVuc2lnbmVkIHJ4X2VuZDsJLyogcmVjZWl2ZSBidWZmZXIgZW5kICovCisJCQl1bnNpZ25lZCB0cmFjZV9iYXNlOwkvKiB0cmFjZSBidWZmZXIgYmFzZSAqLworCQkJdW5zaWduZWQgdHJhY2VfZW5kOwkvKiB0cmFjZSBidWZmZXIgZW5kICovCisKKwkJfSBoOworCX0gdTsKK30gc2RsYV90OworCisvKioqKioqIFB1YmxpYyBGdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordm9pZCB3YW5waXBlX29wZW4gICAgICAoc2RsYV90KiBjYXJkKTsJCQkvKiB3cG1haW4uYyAqLwordm9pZCB3YW5waXBlX2Nsb3NlICAgICAoc2RsYV90KiBjYXJkKTsJCQkvKiB3cG1haW4uYyAqLwordm9pZCB3YW5waXBlX3NldF9zdGF0ZSAoc2RsYV90KiBjYXJkLCBpbnQgc3RhdGUpOwkvKiB3cG1haW4uYyAqLworCitpbnQgd3B4X2luaXQgKHNkbGFfdCogY2FyZCwgd2FuZGV2X2NvbmZfdCogY29uZik7CS8qIHdweC5jICovCitpbnQgd3BmX2luaXQgKHNkbGFfdCogY2FyZCwgd2FuZGV2X2NvbmZfdCogY29uZik7CS8qIHdwZi5jICovCitpbnQgd3BwX2luaXQgKHNkbGFfdCogY2FyZCwgd2FuZGV2X2NvbmZfdCogY29uZik7CS8qIHdwcC5jICovCitpbnQgd3BjX2luaXQgKHNkbGFfdCogY2FyZCwgd2FuZGV2X2NvbmZfdCogY29uZik7IC8qIENpc2NvIEhETEMgKi8KK2ludCBic2NfaW5pdCAoc2RsYV90KiBjYXJkLCB3YW5kZXZfY29uZl90KiBjb25mKTsJLyogQlNDIHN0cmVhbWluZyAqLworaW50IGhkbGNfaW5pdChzZGxhX3QqIGNhcmQsIHdhbmRldl9jb25mX3QqIGNvbmYpOwkvKiBIRExDIHN1cHBvcnQgKi8KK2ludCB3cGZ0MV9pbml0IChzZGxhX3QqIGNhcmQsIHdhbmRldl9jb25mX3QqIGNvbmYpOyAgICAgLyogRlQxIENvbmZpZyBzdXBwb3J0ICovCitpbnQgd3NwcHBfaW5pdCAoc2RsYV90KiBjYXJkLCB3YW5kZXZfY29uZl90KiBjb25mKTsJLyogU3luYyBQUFAgb24gdG9wIG9mIFJBVyBDSERMQyAqLworCitleHRlcm4gc2RsYV90ICogd2FucGlwZV9maW5kX2NhcmQoY2hhciAqKTsKK2V4dGVybiBzZGxhX3QgKiB3YW5waXBlX2ZpbmRfY2FyZF9udW0gKGludCk7CisKK2V4dGVybiB2b2lkIHdhbnBpcGVfcXVldWVfd29yayAoc3RydWN0IHdvcmtfc3RydWN0ICopOworZXh0ZXJuIHZvaWQgd2FucGlwZV9tYXJrX2JoICh2b2lkKTsKK2V4dGVybiB2b2lkIHdha2V1cF9za19iaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK2V4dGVybiBpbnQgY2hhbmdlX2Rldl9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBmbGFncyk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBnZXRfaXBfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgb3B0aW9uKTsKK2V4dGVybiB2b2lkIGFkZF9nYXRld2F5KHNkbGFfdCAqY2FyZCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisKKworI2VuZGlmCS8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZgkvKiBfV0FOUElQRV9IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvd2Fucm91dGVyLmggYi9pbmNsdWRlL2xpbnV4L3dhbnJvdXRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlODlmMGYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3dhbnJvdXRlci5oCkBAIC0wLDAgKzEsNTQxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogd2Fucm91dGVyLmgJRGVmaW5pdGlvbnMgZm9yIHRoZSBXQU4gTXVsdGlwcm90b2NvbCBSb3V0ZXIgTW9kdWxlLgorKgkJVGhpcyBtb2R1bGUgcHJvdmlkZXMgQVBJIGFuZCBjb21tb24gc2VydmljZXMgZm9yIFdBTiBMaW5rCisqCQlEcml2ZXJzIGFuZCBpcyBjb21wbGV0ZWx5IGhhcmR3YXJlLWluZGVwZW5kZW50LgorKgorKiBBdXRob3I6IAlOZW5hZCBDb3JiaWMgPG5jb3JiaWNAc2FuZ29tYS5jb20+CisqCQlHaWRlb24gSGFjayAJCisqIEFkZGl0aW9uczoJQXJuYWxkbyBNZWxvCisqCisqIENvcHlyaWdodDoJKGMpIDE5OTUtMjAwMCBTYW5nb21hIFRlY2hub2xvZ2llcyBJbmMuCisqCisqCQlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisqCQltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKgkJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisqCQkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqIEp1bCAyMSwgMjAwMCAgTmVuYWQgQ29yYmljCUFkZGVkIFdBTl9GVDFfUkVBRFkgU3RhdGUKKyogRmViIDI0LCAyMDAwICBOZW5hZCBDb3JiaWMgICAgQWRkZWQgc3VwcG9ydCBmb3Igc29ja2V0IGJhc2VkIHgyNWFwaQorKiBKYW4gMjgsIDIwMDAgIE5lbmFkIENvcmJpYyAgICBBZGRlZCBzdXBwb3J0IGZvciB0aGUgQVNZTkMgcHJvdG9jb2wuCisqIE9jdCAwNCwgMTk5OSAgTmVuYWQgQ29yYmljIAlVcGRhdGVkIGZvciAyLjEuMCByZWxlYXNlCisqIEp1biAwMiwgMTk5OSAgR2lkZW9uIEhhY2sJQWRkZWQgc3VwcG9ydCBmb3IgdGhlIFM1MTQgYWRhcHRlci4KKyogTWF5IDIzLCAxOTk5CUFybmFsZG8gTWVsbwlBZGRlZCBsb2NhbF9hZGRyIHRvIHdhbmlmX2NvbmZfdAorKgkJCQlXQU5fRElTQ09OTkVDVElORyBzdGF0ZSBhZGRlZAorKiBKdWwgMjAsIDE5OTgJRGF2aWQgRm9uZwlBZGRlZCBJbnZlcnNlIEFSUCBvcHRpb25zIHRvICd3YW5pZl9jb25mX3QnCisqIEp1biAxMiwgMTk5OAlEYXZpZCBGb25nCUFkZGVkIENpc2NvIEhETEMgc3VwcG9ydC4KKyogRGVjIDE2LCAxOTk3CUphc3ByZWV0IFNpbmdoCU1vdmVkICdlbmFibGVfSVBYJyBhbmQgJ25ldHdvcmtfbnVtYmVyJyB0bworKgkJCQknd2FuaWZfY29uZl90JworKiBEZWMgMDUsIDE5OTcJSmFzcHJlZXQgU2luZ2gJQWRkZWQgJ3BhcCcsICdjaGFwJyB0byAnd2FuaWZfY29uZl90JworKgkJCQlBZGRlZCAnYXV0aGVudGljYXRvcicgdG8gJ3dhbl9wcHBfY29uZl90JworKiBOb3YgMDYsIDE5OTcJSmFzcHJlZXQgU2luZ2gJQ2hhbmdlZCBSb3V0ZXIgRHJpdmVyIHZlcnNpb24gdG8gMS4xIGZyb20gMS4wCisqIE9jdCAyMCwgMTk5NwlKYXNwcmVldCBTaW5naAlBZGRlZCAnY2lyJywnYmMnLCdiZScgYW5kICdtYycgdG8gJ3dhbmlmX2NvbmZfdCcKKyoJCQkJQWRkZWQgJ2VuYWJsZV9JUFgnIGFuZCAnbmV0d29ya19udW1iZXInIHRvIAorKgkJCQknd2FuX2RldmljZV90Jy4gIEFsc28gYWRkZWQgZGVmaW5lcyBmb3IKKyoJCQkJVURQIFBBQ0tFVCBUWVBFLCBJbnRlcnJ1cHQgdGVzdCwgY3JpdGljYWwgdmFsdWVzCisqCQkJCWZvciBSQUNFIGNvbmRpdGlvbnMuCisqIE9jdCAwNSwgMTk5NwlKYXNwcmVldCBTaW5naAlBZGRlZCAnZGxjaV9udW0nIGFuZCAnZGxjaVsxMDBdJyB0byAKKyoJCQkJJ3dhbl9mcl9jb25mX3QnIHRvIGNvbmZpZ3VyZSBhIGxpc3Qgb2YgZGxjaShzKQorKgkJCQlmb3IgYSBOT0RFIAorKiBKdWwgMDcsIDE5OTcJSmFzcHJlZXQgU2luZ2gJQWRkZWQgJ3R0bCcgdG8gJ3dhbmRldl9jb25mX3QnICYgJ3dhbl9kZXZpY2VfdCcKKyogTWF5IDI5LCAxOTk3IAlKYXNwcmVldCBTaW5naAlBZGRlZCAndHhfaW50X2VuYWJsZWQnIHRvICd3YW5fZGV2aWNlX3QnCisqIE1heSAyMSwgMTk5NwlKYXNwcmVldCBTaW5naAlBZGRlZCAndWRwX3BvcnQnIHRvICd3YW5fZGV2aWNlX3QnCisqIEFwciAyNSwgMTk5NyAgRmFyaGFuIFRoYXdhciAgIEFkZGVkICd1ZHBfcG9ydCcgdG8gJ3dhbmRldl9jb25mX3QnCisqIEphbiAxNiwgMTk5NwlHZW5lIEtvemluCXJvdXRlcl9kZXZsaXN0IG1hZGUgcHVibGljCisqIEphbiAwMiwgMTk5NwlHZW5lIEtvemluCUluaXRpYWwgdmVyc2lvbiAoYmFzZWQgb24gd2FucGlwZS5oKS4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4gICAgICAgLyogU3VwcG9ydCBmb3IgU01QIExvY2tpbmcgKi8KKworI2lmbmRlZglfUk9VVEVSX0gKKyNkZWZpbmUJX1JPVVRFUl9ICisKKyNkZWZpbmUJUk9VVEVSX05BTUUJIndhbnJvdXRlciIJLyogaW4gY2FzZSB3ZSBldmVyIGNoYW5nZSBpdCAqLworI2RlZmluZQlST1VURVJfVkVSU0lPTgkxCQkvKiB2ZXJzaW9uIG51bWJlciAqLworI2RlZmluZQlST1VURVJfUkVMRUFTRQkxCQkvKiByZWxlYXNlIChtaW5vciB2ZXJzaW9uKSBudW1iZXIgKi8KKyNkZWZpbmUJUk9VVEVSX0lPQ1RMCSdXJwkJLyogZm9yIElPQ1RMIGNhbGxzICovCisjZGVmaW5lCVJPVVRFUl9NQUdJQwkweDUyNEQ0MTU3TAkvKiBzaWduYXR1cmU6ICdXQU5SJyByZXZlcnNlZCAqLworCisvKiBJT0NUTCBjb2RlcyBmb3IgL3Byb2Mvcm91dGVyLzxkZXZpY2U+IGVudHJpZXMgKHVwIHRvIDI1NSkgKi8KK2VudW0gcm91dGVyX2lvY3RscworeworCVJPVVRFUl9TRVRVUAk9IFJPVVRFUl9JT0NUTDw8OCwJLyogY29uZmlndXJlIGRldmljZSAqLworCVJPVVRFUl9ET1dOLAkJCQkvKiBzaHV0IGRvd24gZGV2aWNlICovCisJUk9VVEVSX1NUQVQsCQkJCS8qIGdldCBkZXZpY2Ugc3RhdHVzICovCisJUk9VVEVSX0lGTkVXLAkJCQkvKiBhZGQgaW50ZXJmYWNlICovCisJUk9VVEVSX0lGREVMLAkJCQkvKiBkZWxldGUgaW50ZXJmYWNlICovCisJUk9VVEVSX0lGU1RBVCwJCQkJLyogZ2V0IGludGVyZmFjZSBzdGF0dXMgKi8KKwlST1VURVJfVVNFUgk9IChST1VURVJfSU9DVEw8PDgpKzE2LAkvKiBkcml2ZXItc3BlY2lmaWMgY2FsbHMgKi8KKwlST1VURVJfVVNFUl9NQVgJPSAoUk9VVEVSX0lPQ1RMPDw4KSszMQorfTsKKworLyogaWRlbnRpZmllcnMgZm9yIGRpc3BsYXlpbmcgcHJvYyBmaWxlIGRhdGEgZm9yIGR1YWwgcG9ydCBhZGFwdGVycyAqLworI2RlZmluZSBQUk9DX0RBVEFfUE9SVF8wIDB4ODAwMAkvKiB0aGUgZGF0YSBpcyBmb3IgcG9ydCAwICovCisjZGVmaW5lIFBST0NfREFUQV9QT1JUXzEgMHg4MDAxCS8qIHRoZSBkYXRhIGlzIGZvciBwb3J0IDEgKi8KKworLyogTkxQSUQgZm9yIHBhY2tldCBlbmNhcHN1bGF0aW9uIChJU08vSUVDIFRSIDk1NzcpICovCisjZGVmaW5lCU5MUElEX0lQCTB4Q0MJLyogSW50ZXJuZXQgUHJvdG9jb2wgRGF0YWdyYW0gKi8KKyNkZWZpbmUJTkxQSURfU05BUAkweDgwCS8qIElFRUUgU3VibmV0d29yayBBY2Nlc3MgUHJvdG9jb2wgKi8KKyNkZWZpbmUJTkxQSURfQ0xOUAkweDgxCS8qIElTTy9JRUMgODQ3MyAqLworI2RlZmluZQlOTFBJRF9FU0lTCTB4ODIJLyogSVNPL0lFQyA5NTQyICovCisjZGVmaW5lCU5MUElEX0lTSVMJMHg4MwkvKiBJU08vSUVDIElTSVMgKi8KKyNkZWZpbmUJTkxQSURfUTkzMwkweDA4CS8qIENDSVRUIFEuOTMzICovCisKKy8qIE1pc2NlbGxhbmVvdXMgKi8KKyNkZWZpbmUJV0FOX0lGTkFNRV9TWgkxNQkvKiBtYXggbGVuZ3RoIG9mIHRoZSBpbnRlcmZhY2UgbmFtZSAqLworI2RlZmluZQlXQU5fRFJWTkFNRV9TWgkxNQkvKiBtYXggbGVuZ3RoIG9mIHRoZSBsaW5rIGRyaXZlciBuYW1lICovCisjZGVmaW5lCVdBTl9BRERSRVNTX1NaCTMxCS8qIG1heCBsZW5ndGggb2YgdGhlIFdBTiBtZWRpYSBhZGRyZXNzICovCisjZGVmaW5lIFVTRURfQllfRklFTEQJOAkvKiBtYXggbGVuZ3RoIG9mIHRoZSB1c2VkIGJ5IGZpZWxkICovCisKKy8qIERlZmluZXMgZm9yIFVEUCBQQUNLRVQgVFlQRSAqLworI2RlZmluZSBVRFBfUFRQSVBFX1RZUEUgCTB4MDEKKyNkZWZpbmUgVURQX0ZQSVBFX1RZUEUJCTB4MDIKKyNkZWZpbmUgVURQX0NQSVBFX1RZUEUJCTB4MDMKKyNkZWZpbmUgVURQX0RSVlNUQVRTX1RZUEUgCTB4MDQKKyNkZWZpbmUgVURQX0lOVkFMSURfVFlQRSAgCTB4MDUKKworLyogQ29tbWFuZCByZXR1cm4gY29kZSAqLworI2RlZmluZSBDTURfT0sJCTAJCS8qIG5vcm1hbCBmaXJtd2FyZSByZXR1cm4gY29kZSAqLworI2RlZmluZSBDTURfVElNRU9VVAkweEZGCQkvKiBmaXJtd2FyZSBjb21tYW5kIHRpbWVkIG91dCAqLworCisvKiBVRFAgUGFja2V0IE1hbmFnZW1lbnQgKi8KKyNkZWZpbmUgVURQX1BLVF9GUk1fU1RBQ0sJMHgwMAorI2RlZmluZSBVRFBfUEtUX0ZSTV9ORVRXT1JLCTB4MDEKKworLyogTWF4aW11bSBpbnRlcnJ1cHQgdGVzdCBjb3VudGVyICovCisjZGVmaW5lIE1BWF9JTlRSX1RFU1RfQ09VTlRFUgkxMDAKKworLyogQ3JpdGljYWwgVmFsdWVzIGZvciBSQUNFIGNvbmRpdGlvbnMqLworI2RlZmluZSBDUklUSUNBTF9JTl9JU1IJCTB4QTEKKyNkZWZpbmUgQ1JJVElDQUxfSU5UUl9IQU5ETEVECTB4QjEKKworLyoqKioqKiBEYXRhIFR5cGVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogWC4yNS1zcGVjaWZpYyBsaW5rLWxldmVsIGNvbmZpZ3VyYXRpb24uCisgKi8KK3R5cGVkZWYgc3RydWN0IHdhbl94MjVfY29uZgoreworCXVuc2lnbmVkIGxvX3B2YzsJLyogbG93ZXN0IHBlcm1hbmVudCBjaXJjdWl0IG51bWJlciAqLworCXVuc2lnbmVkIGhpX3B2YzsJLyogaGlnaGVzdCBwZXJtYW5lbnQgY2lyY3VpdCBudW1iZXIgKi8KKwl1bnNpZ25lZCBsb19zdmM7CS8qIGxvd2VzdCBzd2l0Y2hlZCBjaXJjdWl0IG51bWJlciAqLworCXVuc2lnbmVkIGhpX3N2YzsJLyogaGlnaGVzdCBzd2l0Y2hlZCBjaXJjdWl0IG51bWJlciAqLworCXVuc2lnbmVkIGhkbGNfd2luZG93OwkvKiBIRExDIHdpbmRvdyBzaXplICgxLi43KSAqLworCXVuc2lnbmVkIHBrdF93aW5kb3c7CS8qIFguMjUgcGFja2V0IHdpbmRvdyBzaXplICgxLi43KSAqLworCXVuc2lnbmVkIHQxOwkJLyogSERMQyB0aW1lciBUMSwgc2VjICgxLi4zMCkgKi8KKwl1bnNpZ25lZCB0MjsJCS8qIEhETEMgdGltZXIgVDIsIHNlYyAoMC4uMjkpICovCisJdW5zaWduZWQgdDQ7CQkvKiBIRExDIHN1cGVydmlzb3J5IGZyYW1lIHRpbWVyID0gVDQgKiBUMSAqLworCXVuc2lnbmVkIG4yOwkJLyogSERMQyByZXRyYW5zbWlzc2lvbiBsaW1pdCAoMS4uMzApICovCisJdW5zaWduZWQgdDEwX3QyMDsJLyogWC4yNSBSRVNUQVJUIHRpbWVvdXQsIHNlYyAoMS4uMjU1KSAqLworCXVuc2lnbmVkIHQxMV90MjE7CS8qIFguMjUgQ0FMTCB0aW1lb3V0LCBzZWMgKDEuLjI1NSkgKi8KKwl1bnNpZ25lZCB0MTJfdDIyOwkvKiBYLjI1IFJFU0VUIHRpbWVvdXQsIHNlYyAoMS4uMjU1KSAqLworCXVuc2lnbmVkIHQxM190MjM7CS8qIFguMjUgQ0xFQVIgdGltZW91dCwgc2VjICgxLi4yNTUpICovCisJdW5zaWduZWQgdDE2X3QyNjsJLyogWC4yNSBJTlRFUlJVUFQgdGltZW91dCwgc2VjICgxLi4yNTUpICovCisJdW5zaWduZWQgdDI4OwkJLyogWC4yNSBSRUdJU1RSQVRJT04gdGltZW91dCwgc2VjICgxLi4yNTUpICovCisJdW5zaWduZWQgcjEwX3IyMDsJLyogUkVTVEFSVCByZXRyYW5zbWlzc2lvbiBsaW1pdCAoMC4uMjUwKSAqLworCXVuc2lnbmVkIHIxMl9yMjI7CS8qIFJFU0VUIHJldHJhbnNtaXNzaW9uIGxpbWl0ICgwLi4yNTApICovCisJdW5zaWduZWQgcjEzX3IyMzsJLyogQ0xFQVIgcmV0cmFuc21pc3Npb24gbGltaXQgKDAuLjI1MCkgKi8KKwl1bnNpZ25lZCBjY2l0dF9jb21wYXQ7CS8qIGNvbXBhdGliaWxpdHkgbW9kZTogMTk4OC8xOTg0LzE5ODAgKi8KKwl1bnNpZ25lZCB4MjVfY29uZl9vcHQ7ICAgLyogVXNlciBkZWZpbmVkIHgyNSBjb25maWcgb3B0b2lucyAqLworCXVuc2lnbmVkIGNoYXIgTEFQQl9oZGxjX29ubHk7IC8qIFJ1biBpbiBIRExDIG9ubHkgbW9kZSAqLworCXVuc2lnbmVkIGNoYXIgbG9nZ2luZzsgICAvKiBDb250cm9sIGNvbm5lY3Rpb24gbG9nZ2luZyAqLyAgCisJdW5zaWduZWQgY2hhciBvb2Jfb25fbW9kZW07IC8qIFdoZXRoZXIgdG8gc2VuZCBtb2RlbSBzdGF0dXMgdG8gdGhlIHVzZXIgYXBwICovCit9IHdhbl94MjVfY29uZl90OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEZyYW1lIHJlbGF5IHNwZWNpZmljIGxpbmstbGV2ZWwgY29uZmlndXJhdGlvbi4KKyAqLwordHlwZWRlZiBzdHJ1Y3Qgd2FuX2ZyX2NvbmYKK3sKKwl1bnNpZ25lZCBzaWduYWxsaW5nOwkvKiBsb2NhbCBpbi1jaGFubmVsIHNpZ25hbGxpbmcgdHlwZSAqLworCXVuc2lnbmVkIHQzOTE7CQkvKiBsaW5rIGludGVncml0eSB2ZXJpZmljYXRpb24gdGltZXIgKi8KKwl1bnNpZ25lZCB0MzkyOwkJLyogcG9sbGluZyB2ZXJpZmljYXRpb24gdGltZXIgKi8KKwl1bnNpZ25lZCBuMzkxOwkJLyogZnVsbCBzdGF0dXMgcG9sbGluZyBjeWNsZSBjb3VudGVyICovCisJdW5zaWduZWQgbjM5MjsJCS8qIGVycm9yIHRocmVzaG9sZCBjb3VudGVyICovCisJdW5zaWduZWQgbjM5MzsJCS8qIG1vbml0b3JlZCBldmVudHMgY291bnRlciAqLworCXVuc2lnbmVkIGRsY2lfbnVtOwkvKiBudW1iZXIgb2YgRExDcyAoYWNjZXNzIG5vZGUpICovCisJdW5zaWduZWQgIGRsY2lbMTAwXTsgICAgLyogTGlzdCBvZiBhbGwgRExDSXMgKi8KK30gd2FuX2ZyX2NvbmZfdDsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBQUFAtc3BlY2lmaWMgbGluay1sZXZlbCBjb25maWd1cmF0aW9uLgorICovCit0eXBlZGVmIHN0cnVjdCB3YW5fcHBwX2NvbmYKK3sKKwl1bnNpZ25lZCByZXN0YXJ0X3RtcjsJLyogcmVzdGFydCB0aW1lciAqLworCXVuc2lnbmVkIGF1dGhfcnNydF90bXI7CS8qIGF1dGhlbnRpY2F0aW9uIHRpbWVyICovCisJdW5zaWduZWQgYXV0aF93YWl0X3RtcjsJLyogYXV0aGVudGljYXRpb24gdGltZXIgKi8KKwl1bnNpZ25lZCBtZG1fZmFpbF90bXI7CS8qIG1vZGVtIGZhaWx1cmUgdGltZXIgKi8KKwl1bnNpZ25lZCBkdHJfZHJvcF90bXI7CS8qIERUUiBkcm9wIHRpbWVyICovCisJdW5zaWduZWQgY29ubmVjdF90bW91dDsJLyogY29ubmVjdGlvbiB0aW1lb3V0ICovCisJdW5zaWduZWQgY29uZl9yZXRyeTsJLyogbWF4LiByZXRyeSAqLworCXVuc2lnbmVkIHRlcm1fcmV0cnk7CS8qIG1heC4gcmV0cnkgKi8KKwl1bnNpZ25lZCBmYWlsX3JldHJ5OwkvKiBtYXguIHJldHJ5ICovCisJdW5zaWduZWQgYXV0aF9yZXRyeTsJLyogbWF4LiByZXRyeSAqLworCXVuc2lnbmVkIGF1dGhfb3B0aW9uczsJLyogYXV0aGVudGljYXRpb24gb3B0LiAqLworCXVuc2lnbmVkIGlwX29wdGlvbnM7CS8qIElQIG9wdGlvbnMgKi8KKwljaGFyCWF1dGhlbnRpY2F0b3I7CS8qIEFVVEhFTlRJQ0FUT1Igb3Igbm90ICovCisJY2hhcglpcF9tb2RlOwkvKiBTdGF0aWMvSG9zdC9QZWVyICovCit9IHdhbl9wcHBfY29uZl90OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIENIRExDLXNwZWNpZmljIGxpbmstbGV2ZWwgY29uZmlndXJhdGlvbi4KKyAqLwordHlwZWRlZiBzdHJ1Y3Qgd2FuX2NoZGxjX2NvbmYKK3sKKwl1bnNpZ25lZCBjaGFyIGlnbm9yZV9kY2Q7CS8qIFByb3RvY29sIG9wdGlvbnM6CQkqLworCXVuc2lnbmVkIGNoYXIgaWdub3JlX2N0czsJLyogIElnbm9yZSB0aGVzZSB0byBkZXRlcm1pbmUJKi8KKwl1bnNpZ25lZCBjaGFyIGlnbm9yZV9rZWVwYWxpdmU7CS8qICBsaW5rIHN0YXR1cyAoWWVzIG9yIE5vKQkqLworCXVuc2lnbmVkIGNoYXIgaGRsY19zdHJlYW1pbmc7CS8qICBoZGxjX3N0cmVhbWluZyBtb2RlIChZL04pICovCisJdW5zaWduZWQgY2hhciByZWNlaXZlX29ubHk7CS8qICBubyB0cmFuc21pdCBidWZmZXJpbmcgKFkvTikgKi8KKwl1bnNpZ25lZCBrZWVwYWxpdmVfdHhfdG1yOwkvKiB0cmFuc21pdCBrZWVwYWxpdmUgdGltZXIgKi8KKwl1bnNpZ25lZCBrZWVwYWxpdmVfcnhfdG1yOwkvKiByZWNlaXZlICBrZWVwYWxpdmUgdGltZXIgKi8KKwl1bnNpZ25lZCBrZWVwYWxpdmVfZXJyX21hcmdpbjsJLyoga2VlcGFsaXZlX2Vycm9yX3RvbGVyYW5jZSAqLworCXVuc2lnbmVkIHNsYXJwX3RpbWVyOwkJLyogU0xBUlAgcmVxdWVzdCB0aW1lciAqLworfSB3YW5fY2hkbGNfY29uZl90OworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogV0FOIGRldmljZSBjb25maWd1cmF0aW9uLiBQYXNzZWQgdG8gUk9VVEVSX1NFVFVQIElPQ1RMLgorICovCit0eXBlZGVmIHN0cnVjdCB3YW5kZXZfY29uZgoreworCXVuc2lnbmVkIG1hZ2ljOwkJLyogbWFnaWMgbnVtYmVyIChmb3IgdmVyaWZpY2F0aW9uKSAqLworCXVuc2lnbmVkIGNvbmZpZ19pZDsJLyogY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgaWRlbnRpZmllciAqLworCQkJCS8qKioqKiogaGFyZHdhcmUgY29uZmlndXJhdGlvbiAqKioqKiovCisJdW5zaWduZWQgaW9wb3J0OwkvKiBhZGFwdGVyIEkvTyBwb3J0IGJhc2UgKi8KKwl1bnNpZ25lZCBsb25nIG1hZGRyOwkvKiBkdWFsLXBvcnQgbWVtb3J5IGFkZHJlc3MgKi8KKwl1bnNpZ25lZCBtc2l6ZTsJCS8qIGR1YWwtcG9ydCBtZW1vcnkgc2l6ZSAqLworCWludCBpcnE7CQkvKiBpbnRlcnJ1cHQgcmVxdWVzdCBsZXZlbCAqLworCWludCBkbWE7CQkvKiBETUEgcmVxdWVzdCBsZXZlbCAqLworICAgICAgICBjaGFyIFM1MTRfQ1BVX25vWzFdOwkvKiBTNTE0IFBDSSBhZGFwdGVyIENQVSBudW1iZXIgKCdBJyBvciAnQicpICovCisgICAgICAgIHVuc2lnbmVkIFBDSV9zbG90X25vOwkvKiBTNTE0IFBDSSBhZGFwdGVyIHNsb3QgbnVtYmVyICovCisJY2hhciBhdXRvX3BjaV9jZmc7CS8qIFM1MTUgUENJIGF1dG9tYXRpYyBzbG90IGRldGVjdGlvbiAqLworCWNoYXIgY29tbV9wb3J0OwkJLyogQ29tbXVuaWNhdGlvbiBQb3J0IChQUkk9MCwgU0VDPTEpICovIAorCXVuc2lnbmVkIGJwczsJCS8qIGRhdGEgdHJhbnNmZXIgcmF0ZSAqLworCXVuc2lnbmVkIG10dTsJCS8qIG1heGltdW0gdHJhbnNtaXQgdW5pdCBzaXplICovCisgICAgICAgIHVuc2lnbmVkIHVkcF9wb3J0OyAgICAgIC8qIFVEUCBwb3J0IGZvciBtYW5hZ2VtZW50ICovCisJdW5zaWduZWQgY2hhciB0dGw7CS8qIFRpbWUgVG8gTGl2ZSBmb3IgVURQIHNlY3VyaXR5ICovCisJdW5zaWduZWQgY2hhciBmdDE7CS8qIEZUMSBDb25maWd1cmF0b3IgT3B0aW9uICovCisgICAgICAgIGNoYXIgaW50ZXJmYWNlOwkJLyogUlMtMjMyL1YuMzUsIGV0Yy4gKi8KKwljaGFyIGNsb2NraW5nOwkJLyogZXh0ZXJuYWwvaW50ZXJuYWwgKi8KKwljaGFyIGxpbmVfY29kaW5nOwkvKiBOUlovTlJaSS9GTTAvRk0xLCBldGMuICovCisJY2hhciBzdGF0aW9uOwkJLyogRFRFL0RDRSwgcHJpbWFyeS9zZWNvbmRhcnksIGV0Yy4gKi8KKwljaGFyIGNvbm5lY3Rpb247CS8qIHBlcm1hbmVudC9zd2l0Y2hlZC9vbi1kZW1hbmQgKi8KKwljaGFyIHJlYWRfbW9kZTsJCS8qIHJlYWQgbW9kZTogUG9sbGluZyBvciBpbnRlcnJ1cHQgKi8KKwljaGFyIHJlY2VpdmVfb25seTsJLyogZGlzYWJsZSB0eCBidWZmZXJzICovCisJY2hhciB0dHk7CQkvKiBDcmVhdGUgYSBmYWtlIHR0eSBkZXZpY2UgKi8KKwl1bnNpZ25lZCB0dHlfbWFqb3I7CS8qIE1ham9yIG51bWJlciBmb3Igd2FucGlwZSB0dHkgZGV2aWNlICovCisJdW5zaWduZWQgdHR5X21pbm9yOyAJLyogTWlub3IgbnVtYmVyIGZvciB3YW5waXBlIHR0eSBkZXZpY2UgKi8KKwl1bnNpZ25lZCB0dHlfbW9kZTsJLyogVFRZIG9wZXJhdGlvbiBtb2RlIFNZTkMgb3IgQVNZTkMgKi8KKwljaGFyIGJhY2t1cDsJCS8qIEJhY2t1cCBNb2RlICovCisJdW5zaWduZWQgaHdfb3B0WzRdOwkvKiBvdGhlciBoYXJkd2FyZSBvcHRpb25zICovCisJdW5zaWduZWQgcmVzZXJ2ZWRbNF07CisJCQkJLyoqKioqKiBhcmJpdHJhcnkgZGF0YSAqKioqKioqKioqKioqKiovCisJdW5zaWduZWQgZGF0YV9zaXplOwkvKiBkYXRhIGJ1ZmZlciBzaXplICovCisJdm9pZCogZGF0YTsJCS8qIGRhdGEgYnVmZmVyLCBlLmcuIGZpcm13YXJlICovCisJdW5pb24JCQkvKioqKioqIHByb3RvY29sLXNwZWNpZmljICoqKioqKioqKioqKi8KKwl7CisJCXdhbl94MjVfY29uZl90IHgyNTsJLyogWC4yNSBjb25maWd1cmF0aW9uICovCisJCXdhbl9wcHBfY29uZl90IHBwcDsJLyogUFBQIGNvbmZpZ3VyYXRpb24gKi8KKwkJd2FuX2ZyX2NvbmZfdCBmcjsJLyogZnJhbWUgcmVsYXkgY29uZmlndXJhdGlvbiAqLworCQl3YW5fY2hkbGNfY29uZl90IGNoZGxjOwkvKiBDaXNjbyBIRExDIGNvbmZpZ3VyYXRpb24gKi8KKwl9IHU7Cit9IHdhbmRldl9jb25mX3Q7CisKKy8qICdjb25maWdfaWQnIGRlZmluaXRpb25zICovCisjZGVmaW5lCVdBTkNPTkZJR19YMjUJMTAxCS8qIFguMjUgbGluayAqLworI2RlZmluZQlXQU5DT05GSUdfRlIJMTAyCS8qIGZyYW1lIHJlbGF5IGxpbmsgKi8KKyNkZWZpbmUJV0FOQ09ORklHX1BQUAkxMDMJLyogc3luY2hyb25vdXMgUFBQIGxpbmsgKi8KKyNkZWZpbmUgV0FOQ09ORklHX0NIRExDCTEwNAkvKiBDaXNjbyBIRExDIExpbmsgKi8KKyNkZWZpbmUgV0FOQ09ORklHX0JTQwkxMDUJLyogQmlTeW5jIFN0cmVhbWluZyAqLworI2RlZmluZSBXQU5DT05GSUdfSERMQwkxMDYJLyogSERMQyBTdXBwb3J0ICovCisjZGVmaW5lIFdBTkNPTkZJR19NUFBQICAxMDcJLyogTXVsdGkgUG9ydCBQUFAgb3ZlciBSQVcgQ0hETEMgKi8KKworLyoKKyAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBkZWZpbmVzLgorICovCisvKiBnZW5lcmFsIG9wdGlvbnMgKi8KKyNkZWZpbmUJV0FOT1BUX09GRgkwCisjZGVmaW5lCVdBTk9QVF9PTgkxCisjZGVmaW5lCVdBTk9QVF9OTwkwCisjZGVmaW5lCVdBTk9QVF9ZRVMJMQorCisvKiBpbnRlcmNhY2Ugb3B0aW9ucyAqLworI2RlZmluZQlXQU5PUFRfUlMyMzIJMAorI2RlZmluZQlXQU5PUFRfVjM1CTEKKworLyogZGF0YSBlbmNvZGluZyBvcHRpb25zICovCisjZGVmaW5lCVdBTk9QVF9OUloJMAorI2RlZmluZQlXQU5PUFRfTlJaSQkxCisjZGVmaW5lCVdBTk9QVF9GTTAJMgorI2RlZmluZQlXQU5PUFRfRk0xCTMKKworLyogbGluayB0eXBlIG9wdGlvbnMgKi8KKyNkZWZpbmUJV0FOT1BUX1BPSU5UVE9QT0lOVAkwCS8qIFJUUyBhbHdheXMgYWN0aXZlICovCisjZGVmaW5lCVdBTk9QVF9NVUxUSURST1AJMQkvKiBSVFMgaXMgYWN0aXZlIHdoZW4gdHJhbnNtaXR0aW5nICovCisKKy8qIGNsb2NraW5nIG9wdGlvbnMgKi8KKyNkZWZpbmUJV0FOT1BUX0VYVEVSTkFMCTAKKyNkZWZpbmUJV0FOT1BUX0lOVEVSTkFMCTEKKworLyogc3RhdGlvbiBvcHRpb25zICovCisjZGVmaW5lCVdBTk9QVF9EVEUJCTAKKyNkZWZpbmUJV0FOT1BUX0RDRQkJMQorI2RlZmluZQlXQU5PUFRfQ1BFCQkwCisjZGVmaW5lCVdBTk9QVF9OT0RFCQkxCisjZGVmaW5lCVdBTk9QVF9TRUNPTkRBUlkJMAorI2RlZmluZQlXQU5PUFRfUFJJTUFSWQkJMQorCisvKiBjb25uZWN0aW9uIG9wdGlvbnMgKi8KKyNkZWZpbmUJV0FOT1BUX1BFUk1BTkVOVAkwCS8qIERUUiBhbHdheXMgYWN0aXZlICovCisjZGVmaW5lCVdBTk9QVF9TV0lUQ0hFRAkJMQkvKiB1c2UgRFRSIHRvIHNldHVwIGxpbmsgKGRpYWwtdXApICovCisjZGVmaW5lCVdBTk9QVF9PTkRFTUFORAkJMgkvKiBhY3RpdmF0ZSBEVFIgb25seSBiZWZvcmUgc2VuZGluZyAqLworCisvKiBmcmFtZSByZWxheSBpbi1jaGFubmVsIHNpZ25hbGxpbmcgKi8KKyNkZWZpbmUJV0FOT1BUX0ZSX0FOU0kJCTEJLyogQU5TSSBUMS42MTcgQW5uZXggRCAqLworI2RlZmluZQlXQU5PUFRfRlJfUTkzMwkJMgkvKiBJVFUgUS45MzNBICovCisjZGVmaW5lCVdBTk9QVF9GUl9MTUkJCTMJLyogTE1JICovCisKKy8qIFBQUCBJUCBNb2RlIE9wdGlvbnMgKi8KKyNkZWZpbmUJV0FOT1BUX1BQUF9TVEFUSUMJMAorI2RlZmluZQlXQU5PUFRfUFBQX0hPU1QJCTEKKyNkZWZpbmUJV0FOT1BUX1BQUF9QRUVSCQkyCisKKy8qIEFTWSBNb2RlIE9wdGlvbnMgKi8KKyNkZWZpbmUgV0FOT1BUX09ORSAJCTEKKyNkZWZpbmUgV0FOT1BUX1RXTwkJMgorI2RlZmluZSBXQU5PUFRfT05FX0FORF9IQUxGCTMKKworI2RlZmluZSBXQU5PUFRfTk9ORQkwCisjZGVmaW5lIFdBTk9QVF9PREQgICAgICAxCisjZGVmaW5lIFdBTk9QVF9FVkVOCTIKKworLyogQ0hETEMgUHJvdG9jb2wgT3B0aW9ucyAqLworLyogREYgQ29tbW1lbnRlZCBvdXQgZm9yIG5vdy4KKworI2RlZmluZSBXQU5PUFRfQ0hETENfTk9fRENECQlJR05PUkVfRENEX0ZPUl9MSU5LX1NUQVQKKyNkZWZpbmUgV0FOT1BUX0NIRExDX05PX0NUUwkJSUdOT1JFX0NUU19GT1JfTElOS19TVEFUCisjZGVmaW5lIFdBTk9QVF9DSERMQ19OT19LRUVQQUxJVkUJSUdOT1JFX0tQQUxWX0ZPUl9MSU5LX1NUQVQKKyovCisKKy8qIFBvcnQgb3B0aW9ucyAqLworI2RlZmluZSBXQU5PUFRfUFJJIDAKKyNkZWZpbmUgV0FOT1BUX1NFQyAxCisvKiByZWFkIG1vZGUgKi8KKyNkZWZpbmUJV0FOT1BUX0lOVFIJMAorI2RlZmluZSBXQU5PUFRfUE9MTAkxCisKKworI2RlZmluZSBXQU5PUFRfVFRZX1NZTkMgIDAKKyNkZWZpbmUgV0FOT1BUX1RUWV9BU1lOQyAxCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFdBTiBMaW5rIFN0YXR1cyBJbmZvIChmb3IgUk9VVEVSX1NUQVQgSU9DVEwpLgorICovCit0eXBlZGVmIHN0cnVjdCB3YW5kZXZfc3RhdAoreworCXVuc2lnbmVkIHN0YXRlOwkJLyogbGluayBzdGF0ZSAqLworCXVuc2lnbmVkIG5kZXY7CQkvKiBudW1iZXIgb2YgY29uZmlndXJlZCBpbnRlcmZhY2VzICovCisKKwkvKiBsaW5rL2ludGVyZmFjZSBjb25maWd1cmF0aW9uICovCisJdW5zaWduZWQgY29ubmVjdGlvbjsJLyogcGVybWFuZW50L3N3aXRjaGVkL29uLWRlbWFuZCAqLworCXVuc2lnbmVkIG1lZGlhX3R5cGU7CS8qIEZyYW1lIHJlbGF5L1BQUC9YLjI1L1NETEMsIGV0Yy4gKi8KKwl1bnNpZ25lZCBtdHU7CQkvKiBtYXguIHRyYW5zbWl0IHVuaXQgZm9yIHRoaXMgZGV2aWNlICovCisKKwkvKiBwaHlzaWNhbCBsZXZlbCBzdGF0aXN0aWNzICovCisJdW5zaWduZWQgbW9kZW1fc3RhdHVzOwkvKiBtb2RlbSBzdGF0dXMgKi8KKwl1bnNpZ25lZCByeF9mcmFtZXM7CS8qIHJlY2VpdmVkIGZyYW1lcyBjb3VudCAqLworCXVuc2lnbmVkIHJ4X292ZXJydW5zOwkvKiByZWNlaXZlciBvdmVycnVuIGVycm9yIGNvdW50ICovCisJdW5zaWduZWQgcnhfY3JjX2VycjsJLyogcmVjZWl2ZSBDUkMgZXJyb3IgY291bnQgKi8KKwl1bnNpZ25lZCByeF9hYm9ydHM7CS8qIHJlY2VpdmVkIGFib3J0ZWQgZnJhbWVzIGNvdW50ICovCisJdW5zaWduZWQgcnhfYmFkX2xlbmd0aDsJLyogdW5leHBldGVkbHkgbG9uZy9zaG9ydCBmcmFtZXMgY291bnQgKi8KKwl1bnNpZ25lZCByeF9kcm9wcGVkOwkvKiBmcmFtZXMgZGlzY2FyZGVkIGF0IGRldmljZSBsZXZlbCAqLworCXVuc2lnbmVkIHR4X2ZyYW1lczsJLyogdHJhbnNtaXR0ZWQgZnJhbWVzIGNvdW50ICovCisJdW5zaWduZWQgdHhfdW5kZXJydW5zOwkvKiBhYm9ydGVkIHRyYW5zbWlzc2lvbnMgKHVuZGVycnVucykgY291bnQgKi8KKwl1bnNpZ25lZCB0eF90aW1lb3V0czsJLyogdHJhbnNtaXNzaW9uIHRpbWVvdXRzICovCisJdW5zaWduZWQgdHhfcmVqZWN0czsJLyogb3RoZXIgdHJhbnNtaXQgZXJyb3JzICovCisKKwkvKiBtZWRpYSBsZXZlbCBzdGF0aXN0aWNzICovCisJdW5zaWduZWQgcnhfYmFkX2Zvcm1hdDsJLyogZnJhbWVzIHdpdGggaW52YWxpZCBmb3JtYXQgKi8KKwl1bnNpZ25lZCByeF9iYWRfYWRkcjsJLyogZnJhbWVzIHdpdGggaW52YWxpZCBtZWRpYSBhZGRyZXNzICovCisJdW5zaWduZWQgdHhfcmV0cmllczsJLyogZnJhbWVzIHJlLXRyYW5zbWl0dGVkICovCisJdW5zaWduZWQgcmVzZXJ2ZWRbMTZdOwkvKiByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqLworfSB3YW5kZXZfc3RhdF90OworCisvKiAnc3RhdGUnIGRlZmluZXMgKi8KK2VudW0gd2FuX3N0YXRlcworeworCVdBTl9VTkNPTkZJR1VSRUQsCS8qIGxpbmsvY2hhbm5lbCBpcyBub3QgY29uZmlndXJlZCAqLworCVdBTl9ESVNDT05ORUNURUQsCS8qIGxpbmsvY2hhbm5lbCBpcyBkaXNjb25uZWN0ZWQgKi8KKwlXQU5fQ09OTkVDVElORywJCS8qIGNvbm5lY3Rpb24gaXMgaW4gcHJvZ3Jlc3MgKi8KKwlXQU5fQ09OTkVDVEVELAkJLyogbGluay9jaGFubmVsIGlzIG9wZXJhdGlvbmFsICovCisJV0FOX0xJTUlULAkJLyogZm9yIHZlcmlmaWNhdGlvbiBvbmx5ICovCisJV0FOX0RVQUxQT1JULAkJLyogZm9yIER1YWwgUG9ydCBjYXJkcyAqLworCVdBTl9ESVNDT05ORUNUSU5HLAorCVdBTl9GVDFfUkVBRFkJCS8qIEZUMSBDb25maWd1cmF0b3IgUmVhZHkgKi8KK307CisKK2VudW0geworCVdBTl9MT0NBTF9JUCwKKwlXQU5fUE9JTlRPUE9JTlRfSVAsCisJV0FOX05FVE1BU0tfSVAsCisJV0FOX0JST0FEQ0FTVF9JUAorfTsKKworLyogJ21vZGVtX3N0YXR1cycgbWFza3MgKi8KKyNkZWZpbmUJV0FOX01PREVNX0NUUwkweDAwMDEJLyogQ1RTIGxpbmUgYWN0aXZlICovCisjZGVmaW5lCVdBTl9NT0RFTV9EQ0QJMHgwMDAyCS8qIERDRCBsaW5lIGFjdGl2ZSAqLworI2RlZmluZQlXQU5fTU9ERU1fRFRSCTB4MDAxMAkvKiBEVFIgbGluZSBhY3RpdmUgKi8KKyNkZWZpbmUJV0FOX01PREVNX1JUUwkweDAwMjAJLyogUlRTIGxpbmUgYWN0aXZlICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogV0FOIGludGVyZmFjZSAobG9naWNhbCBjaGFubmVsKSBjb25maWd1cmF0aW9uIChmb3IgUk9VVEVSX0lGTkVXIElPQ1RMKS4KKyAqLwordHlwZWRlZiBzdHJ1Y3Qgd2FuaWZfY29uZgoreworCXVuc2lnbmVkIG1hZ2ljOwkJCS8qIG1hZ2ljIG51bWJlciAqLworCXVuc2lnbmVkIGNvbmZpZ19pZDsJCS8qIGNvbmZpZ3VyYXRpb24gaWRlbnRpZmllciAqLworCWNoYXIgbmFtZVtXQU5fSUZOQU1FX1NaKzFdOwkvKiBpbnRlcmZhY2UgbmFtZSwgQVNDSUlaICovCisJY2hhciBhZGRyW1dBTl9BRERSRVNTX1NaKzFdOwkvKiBtZWRpYSBhZGRyZXNzLCBBU0NJSVogKi8KKwljaGFyIHVzZWRieVtVU0VEX0JZX0ZJRUxEXTsJLyogdXNlZCBieSBBUEkgb3IgV0FOUElQRSAqLworCXVuc2lnbmVkIGlkbGVfdGltZW91dDsJCS8qIHNlYywgYmVmb3JlIGRpc2Nvbm5lY3RpbmcgKi8KKwl1bnNpZ25lZCBob2xkX3RpbWVvdXQ7CQkvKiBzZWMsIGJlZm9yZSByZS1jb25uZWN0aW5nICovCisJdW5zaWduZWQgY2lyOwkJCS8qIENvbW1pdHRlZCBJbmZvcm1hdGlvbiBSYXRlIGZ3ZCxid2QqLworCXVuc2lnbmVkIGJjOwkJCS8qIENvbW1pdHRlZCBCdXJzdCBTaXplIGZ3ZCwgYndkICovCisJdW5zaWduZWQgYmU7CQkJLyogRXhjZXNzIEJ1cnN0IFNpemUgZndkLCBid2QgKi8gCisJdW5zaWduZWQgY2hhciBlbmFibGVfSVBYOwkvKiBFbmFibGUgb3IgRGlzYWJsZSBJUFggKi8KKwl1bnNpZ25lZCBjaGFyIGluYXJwOwkJLyogU2VuZCBJbnZlcnNlIEFSUCByZXF1ZXN0cyBZL04gKi8KKwl1bnNpZ25lZCBpbmFycF9pbnRlcnZhbDsJLyogc2VjLCBiZXR3ZWVuIEluQVJQIHJlcXVlc3RzICovCisJdW5zaWduZWQgbG9uZyBuZXR3b3JrX251bWJlcjsJLyogTmV0d29yayBOdW1iZXIgZm9yIElQWCAqLworCWNoYXIgbWM7CQkJLyogTXVsdGljYXN0IG9uIG9yIG9mZiAqLworCWNoYXIgbG9jYWxfYWRkcltXQU5fQUREUkVTU19TWisxXTsvKiBsb2NhbCBtZWRpYSBhZGRyZXNzLCBBU0NJSVogKi8KKwl1bnNpZ25lZCBjaGFyIHBvcnQ7CQkvKiBib2FyZCBwb3J0ICovCisJdW5zaWduZWQgY2hhciBwcm90b2NvbDsJCS8qIHByb2NvY29sIHVzZWQgaW4gdGhpcyBjaGFubmVsIChUQ1BPWDI1IG9yIFgyNSkgKi8KKwljaGFyIHBhcDsJCQkvKiBQQVAgZW5hYmxlZCBvciBkaXNhYmxlZCAqLworCWNoYXIgY2hhcDsJCQkvKiBDSEFQIGVuYWJsZWQgb3IgZGlzYWJsZWQgKi8KKwl1bnNpZ25lZCBjaGFyIHVzZXJpZFs1MTFdOwkvKiBMaXN0IG9mIFVzZXIgSWQgKi8KKwl1bnNpZ25lZCBjaGFyIHBhc3N3ZFs1MTFdOwkvKiBMaXN0IG9mIHBhc3N3b3JkcyAqLworCXVuc2lnbmVkIGNoYXIgc3lzbmFtZVszMV07CS8qIE5hbWUgb2YgdGhlIHN5c3RlbSAqLworCXVuc2lnbmVkIGNoYXIgaWdub3JlX2RjZDsJLyogUHJvdG9jb2wgb3B0aW9uczogKi8KKwl1bnNpZ25lZCBjaGFyIGlnbm9yZV9jdHM7CS8qICBJZ25vcmUgdGhlc2UgdG8gZGV0ZXJtaW5lICovCisJdW5zaWduZWQgY2hhciBpZ25vcmVfa2VlcGFsaXZlOwkvKiAgbGluayBzdGF0dXMgKFllcyBvciBObykgKi8KKwl1bnNpZ25lZCBjaGFyIGhkbGNfc3RyZWFtaW5nOwkvKiAgSGRsYyBzdHJlYW1pbmcgbW9kZSAoWS9OKSAqLworCXVuc2lnbmVkIGtlZXBhbGl2ZV90eF90bXI7CS8qIHRyYW5zbWl0IGtlZXBhbGl2ZSB0aW1lciAqLworCXVuc2lnbmVkIGtlZXBhbGl2ZV9yeF90bXI7CS8qIHJlY2VpdmUgIGtlZXBhbGl2ZSB0aW1lciAqLworCXVuc2lnbmVkIGtlZXBhbGl2ZV9lcnJfbWFyZ2luOwkvKiBrZWVwYWxpdmVfZXJyb3JfdG9sZXJhbmNlICovCisJdW5zaWduZWQgc2xhcnBfdGltZXI7CQkvKiBTTEFSUCByZXF1ZXN0IHRpbWVyICovCisJdW5zaWduZWQgY2hhciB0dGw7CQkvKiBUaW1lIFRvIExpdmUgZm9yIFVEUCBzZWN1cml0eSAqLworCWNoYXIgaW50ZXJmYWNlOwkJCS8qIFJTLTIzMi9WLjM1LCBldGMuICovCisJY2hhciBjbG9ja2luZzsJCQkvKiBleHRlcm5hbC9pbnRlcm5hbCAqLworCXVuc2lnbmVkIGJwczsJCQkvKiBkYXRhIHRyYW5zZmVyIHJhdGUgKi8KKwl1bnNpZ25lZCBtdHU7CQkJLyogbWF4aW11bSB0cmFuc21pdCB1bml0IHNpemUgKi8KKwl1bnNpZ25lZCBjaGFyIGlmX2Rvd247CQkvKiBicmluZCBkb3duIGludGVyZmFjZSB3aGVuIGRpc2Nvbm5lY3RlZCAqLworCXVuc2lnbmVkIGNoYXIgZ2F0ZXdheTsJCS8qIElzIHRoaXMgaW50ZXJmYWNlIGEgZ2F0ZXdheSAqLworCXVuc2lnbmVkIGNoYXIgdHJ1ZV9pZl9lbmNvZGluZzsJLyogU2V0IHRoZSBkZXYtPnR5cGUgdG8gdHJ1ZSBib2FyZCBwcm90b2NvbCAqLworCisJdW5zaWduZWQgY2hhciBhc3lfZGF0YV90cmFuczsgICAgIC8qIGFzeW5jIEFQSSBvcHRpb25zICovCisgICAgICAgIHVuc2lnbmVkIGNoYXIgcnRzX2hzX2Zvcl9yZWNlaXZlOyAvKiBhc3luYyBQcm90b2NvbCBvcHRpb25zICovCisgICAgICAgIHVuc2lnbmVkIGNoYXIgeG9uX3hvZmZfaHNfZm9yX3JlY2VpdmU7CisJdW5zaWduZWQgY2hhciB4b25feG9mZl9oc19mb3JfdHJhbnNtaXQ7CisJdW5zaWduZWQgY2hhciBkY2RfaHNfZm9yX3RyYW5zbWl0OworCXVuc2lnbmVkIGNoYXIgY3RzX2hzX2Zvcl90cmFuc21pdDsKKwl1bnNpZ25lZCBjaGFyIGFzeW5jX21vZGU7CisJdW5zaWduZWQgdHhfYml0c19wZXJfY2hhcjsKKwl1bnNpZ25lZCByeF9iaXRzX3Blcl9jaGFyOworCXVuc2lnbmVkIHN0b3BfYml0czsgIAorCXVuc2lnbmVkIGNoYXIgcGFyaXR5OworIAl1bnNpZ25lZCBicmVha190aW1lcjsKKyAgICAgICAgdW5zaWduZWQgaW50ZXJfY2hhcl90aW1lcjsKKwl1bnNpZ25lZCByeF9jb21wbGV0ZV9sZW5ndGg7CisJdW5zaWduZWQgeG9uX2NoYXI7CisJdW5zaWduZWQgeG9mZl9jaGFyOworCXVuc2lnbmVkIGNoYXIgcmVjZWl2ZV9vbmx5OwkvKiAgbm8gdHJhbnNtaXQgYnVmZmVyaW5nIChZL04pICovCit9IHdhbmlmX2NvbmZfdDsKKworI2lmZGVmCV9fS0VSTkVMX18KKy8qKioqKiogS2VybmVsIEludGVyZmFjZSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8bGludXgvZnMuaD4JCS8qIHN1cHBvcnQgZm9yIGRldmljZSBkcml2ZXJzICovCisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgkvKiBwcm9jIGZpbGVzeXN0ZW0gcHJhZ21hdGljcyAqLworI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgkvKiBzdXBwb3J0IGZvciBuZXR3b3JrIGRyaXZlcnMgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogV0FOIGRldmljZSBkYXRhIHNwYWNlLgorICovCitzdHJ1Y3Qgd2FuX2RldmljZSB7CisJdW5zaWduZWQgbWFnaWM7CQkJLyogbWFnaWMgbnVtYmVyICovCisJY2hhciogbmFtZTsJCQkvKiAtPiBXQU4gZGV2aWNlIG5hbWUgKEFTQ0lJWikgKi8KKwl2b2lkKiBwcml2YXRlOwkJCS8qIC0+IGRyaXZlciBwcml2YXRlIGRhdGEgKi8KKwl1bnNpZ25lZCBjb25maWdfaWQ7CQkvKiBDb25maWd1cmF0aW9uIElEICovCisJCQkJCS8qKioqKiogaGFyZHdhcmUgY29uZmlndXJhdGlvbiAqKioqKiovCisJdW5zaWduZWQgaW9wb3J0OwkJLyogYWRhcHRlciBJL08gcG9ydCBiYXNlICMxICovCisJY2hhciBTNTE0X2NwdV9ub1sxXTsJCS8qIFBDSSBDUFUgTnVtYmVyICovCisJdW5zaWduZWQgY2hhciBTNTE0X3Nsb3Rfbm87CS8qIFBDSSBTbG90IE51bWJlciAqLworCXVuc2lnbmVkIGxvbmcgbWFkZHI7CQkvKiBkdWFsLXBvcnQgbWVtb3J5IGFkZHJlc3MgKi8KKwl1bnNpZ25lZCBtc2l6ZTsJCQkvKiBkdWFsLXBvcnQgbWVtb3J5IHNpemUgKi8KKwlpbnQgaXJxOwkJCS8qIGludGVycnVwdCByZXF1ZXN0IGxldmVsICovCisJaW50IGRtYTsJCQkvKiBETUEgcmVxdWVzdCBsZXZlbCAqLworCXVuc2lnbmVkIGJwczsJCQkvKiBkYXRhIHRyYW5zZmVyIHJhdGUgKi8KKwl1bnNpZ25lZCBtdHU7CQkJLyogbWF4IHBoeXNpY2FsIHRyYW5zbWl0IHVuaXQgc2l6ZSAqLworCXVuc2lnbmVkIHVkcF9wb3J0OyAgICAgICAgICAgICAgLyogVURQIHBvcnQgZm9yIG1hbmFnZW1lbnQgKi8KKyAgICAgICAgdW5zaWduZWQgY2hhciB0dGw7CQkvKiBUaW1lIFRvIExpdmUgZm9yIFVEUCBzZWN1cml0eSAqLworCXVuc2lnbmVkIGVuYWJsZV90eF9pbnQ7IAkvKiBUcmFuc21pdCBJbnRlcnJ1cHQgZW5hYmxlZCBvciBub3QgKi8KKwljaGFyIGludGVyZmFjZTsJCQkvKiBSUy0yMzIvVi4zNSwgZXRjLiAqLworCWNoYXIgY2xvY2tpbmc7CQkJLyogZXh0ZXJuYWwvaW50ZXJuYWwgKi8KKwljaGFyIGxpbmVfY29kaW5nOwkJLyogTlJaL05SWkkvRk0wL0ZNMSwgZXRjLiAqLworCWNoYXIgc3RhdGlvbjsJCQkvKiBEVEUvRENFLCBwcmltYXJ5L3NlY29uZGFyeSwgZXRjLiAqLworCWNoYXIgY29ubmVjdGlvbjsJCS8qIHBlcm1hbmVudC9zd2l0Y2hlZC9vbi1kZW1hbmQgKi8KKwljaGFyIHNpZ25hbGxpbmc7CQkvKiBTaWduYWxsaW5nIFJTMjMyIG9yIFYzNSAqLworCWNoYXIgcmVhZF9tb2RlOwkJCS8qIHJlYWQgbW9kZTogUG9sbGluZyBvciBpbnRlcnJ1cHQgKi8KKwljaGFyIG5ld19pZl9jbnQ7ICAgICAgICAgICAgICAgIC8qIE51bWJlciBvZiBpbnRlcmZhY2VzIHBlciB3YW5waXBlICovIAorCWNoYXIgZGVsX2lmX2NudDsJCS8qIE51bWJlciBvZiB0aW1lcyBkZWxfaWYoKSBnZXRzIGNhbGxlZCAqLworCXVuc2lnbmVkIGNoYXIgcGlnZ3liYWNrOyAgICAgICAgLyogUGlnZ2liYWNraW5nIGEgcG9ydCAqLworCXVuc2lnbmVkIGh3X29wdFs0XTsJCS8qIG90aGVyIGhhcmR3YXJlIG9wdGlvbnMgKi8KKwkJCQkJLyoqKioqKiBzdGF0dXMgYW5kIHN0YXRpc3RpY3MgKioqKioqKi8KKwljaGFyIHN0YXRlOwkJCS8qIGRldmljZSBzdGF0ZSAqLworCWNoYXIgYXBpX3N0YXR1czsJCS8qIGRldmljZSBhcGkgc3RhdHVzICovCisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7IAkvKiBpbnRlcmZhY2Ugc3RhdGlzdGljcyAqLworCXVuc2lnbmVkIHJlc2VydmVkWzE2XTsJCS8qIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovCisJdW5zaWduZWQgbG9uZyBjcml0aWNhbDsJCS8qIGNyaXRpY2FsIHNlY3Rpb24gZmxhZyAqLworCXNwaW5sb2NrX3QgbG9jazsgICAgICAgICAgICAgICAgLyogU3VwcG9ydCBmb3IgU01QIExvY2tpbmcgKi8KKworCQkJCQkvKioqKioqIGRldmljZSBtYW5hZ2VtZW50IG1ldGhvZHMgKioqLworCWludCAoKnNldHVwKSAoc3RydWN0IHdhbl9kZXZpY2UgKndhbmRldiwgd2FuZGV2X2NvbmZfdCAqY29uZik7CisJaW50ICgqc2h1dGRvd24pIChzdHJ1Y3Qgd2FuX2RldmljZSAqd2FuZGV2KTsKKwlpbnQgKCp1cGRhdGUpIChzdHJ1Y3Qgd2FuX2RldmljZSAqd2FuZGV2KTsKKwlpbnQgKCppb2N0bCkgKHN0cnVjdCB3YW5fZGV2aWNlICp3YW5kZXYsIHVuc2lnbmVkIGNtZCwKKwkJdW5zaWduZWQgbG9uZyBhcmcpOworCWludCAoKm5ld19pZikoc3RydWN0IHdhbl9kZXZpY2UgKndhbmRldiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJICAgICAgd2FuaWZfY29uZl90ICpjb25mKTsKKwlpbnQgKCpkZWxfaWYpKHN0cnVjdCB3YW5fZGV2aWNlICp3YW5kZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworCQkJCQkvKioqKioqIG1haW50YWluZWQgYnkgdGhlIHJvdXRlciAqKioqLworCXN0cnVjdCB3YW5fZGV2aWNlKiBuZXh0OwkvKiAtPiBuZXh0IGRldmljZSAqLworCXN0cnVjdCBuZXRfZGV2aWNlKiBkZXY7CQkvKiBsaXN0IG9mIG5ldHdvcmsgaW50ZXJmYWNlcyAqLworCXVuc2lnbmVkIG5kZXY7CQkJLyogbnVtYmVyIG9mIGludGVyZmFjZXMgKi8KKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRlbnQ7CS8qIHByb2MgZmlsZXN5c3RlbSBlbnRyeSAqLworfTsKKworLyogUHVibGljIGZ1bmN0aW9ucyBhdmFpbGFibGUgZm9yIGRldmljZSBkcml2ZXJzICovCitleHRlcm4gaW50IHJlZ2lzdGVyX3dhbl9kZXZpY2Uoc3RydWN0IHdhbl9kZXZpY2UgKndhbmRldik7CitleHRlcm4gaW50IHVucmVnaXN0ZXJfd2FuX2RldmljZShjaGFyICpuYW1lKTsKK3Vuc2lnbmVkIHNob3J0IHdhbnJvdXRlcl90eXBlX3RyYW5zKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworaW50IHdhbnJvdXRlcl9lbmNhcHN1bGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICB1bnNpZ25lZCBzaG9ydCB0eXBlKTsKKworLyogUHJvYyBpbnRlcmZhY2UgZnVuY3Rpb25zLiBUaGVzZSBtdXN0IG5vdCBiZSBjYWxsZWQgYnkgdGhlIGRyaXZlcnMhICovCitleHRlcm4gaW50IHdhbnJvdXRlcl9wcm9jX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCB3YW5yb3V0ZXJfcHJvY19jbGVhbnVwKHZvaWQpOworZXh0ZXJuIGludCB3YW5yb3V0ZXJfcHJvY19hZGQoc3RydWN0IHdhbl9kZXZpY2UgKndhbmRldik7CitleHRlcm4gaW50IHdhbnJvdXRlcl9wcm9jX2RlbGV0ZShzdHJ1Y3Qgd2FuX2RldmljZSAqd2FuZGV2KTsKK2V4dGVybiBpbnQgd2Fucm91dGVyX2lvY3RsKCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworCitleHRlcm4gdm9pZCBsb2NrX2FkYXB0ZXJfaXJxKHNwaW5sb2NrX3QgKmxvY2ssIHVuc2lnbmVkIGxvbmcgKnNtcF9mbGFncyk7CitleHRlcm4gdm9pZCB1bmxvY2tfYWRhcHRlcl9pcnEoc3BpbmxvY2tfdCAqbG9jaywgdW5zaWduZWQgbG9uZyAqc21wX2ZsYWdzKTsKKworCisKKy8qIFB1YmxpYyBEYXRhICovCisvKiBsaXN0IG9mIHJlZ2lzdGVyZWQgZGV2aWNlcyAqLworZXh0ZXJuIHN0cnVjdCB3YW5fZGV2aWNlICp3YW5yb3V0ZXJfcm91dGVyX2Rldmxpc3Q7CisKKyNlbmRpZgkvKiBfX0tFUk5FTF9fICovCisjZW5kaWYJLyogX1JPVVRFUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3dhdGNoZG9nLmggYi9pbmNsdWRlL2xpbnV4L3dhdGNoZG9nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhiYTBkMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvd2F0Y2hkb2cuaApAQCAtMCwwICsxLDUwIEBACisvKgorICoJR2VuZXJpYyB3YXRjaGRvZyBkZWZpbmVzLiBEZXJpdmVkIGZyb20uLgorICoKKyAqIEJlcmtzaGlyZSBQQyBXYXRjaGRvZyBEZWZpbmVzCisgKiBieSBLZW4gSG9sbGlzIDxraG9sbGlzQGJpdGdhdGUuY29tPgorICoKKyAqLworCisjaWZuZGVmIF9MSU5VWF9XQVRDSERPR19ICisjZGVmaW5lIF9MSU5VWF9XQVRDSERPR19ICisKKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNkZWZpbmUJV0FUQ0hET0dfSU9DVExfQkFTRQknVycKKworc3RydWN0IHdhdGNoZG9nX2luZm8geworCV9fdTMyIG9wdGlvbnM7CQkvKiBPcHRpb25zIHRoZSBjYXJkL2RyaXZlciBzdXBwb3J0cyAqLworCV9fdTMyIGZpcm13YXJlX3ZlcnNpb247CS8qIEZpcm13YXJlIHZlcnNpb24gb2YgdGhlIGNhcmQgKi8KKwlfX3U4ICBpZGVudGl0eVszMl07CS8qIElkZW50aXR5IG9mIHRoZSBib2FyZCAqLworfTsKKworI2RlZmluZQlXRElPQ19HRVRTVVBQT1JUCV9JT1IoV0FUQ0hET0dfSU9DVExfQkFTRSwgMCwgc3RydWN0IHdhdGNoZG9nX2luZm8pCisjZGVmaW5lCVdESU9DX0dFVFNUQVRVUwkJX0lPUihXQVRDSERPR19JT0NUTF9CQVNFLCAxLCBpbnQpCisjZGVmaW5lCVdESU9DX0dFVEJPT1RTVEFUVVMJX0lPUihXQVRDSERPR19JT0NUTF9CQVNFLCAyLCBpbnQpCisjZGVmaW5lCVdESU9DX0dFVFRFTVAJCV9JT1IoV0FUQ0hET0dfSU9DVExfQkFTRSwgMywgaW50KQorI2RlZmluZQlXRElPQ19TRVRPUFRJT05TCV9JT1IoV0FUQ0hET0dfSU9DVExfQkFTRSwgNCwgaW50KQorI2RlZmluZQlXRElPQ19LRUVQQUxJVkUJCV9JT1IoV0FUQ0hET0dfSU9DVExfQkFTRSwgNSwgaW50KQorI2RlZmluZQlXRElPQ19TRVRUSU1FT1VUICAgICAgICBfSU9XUihXQVRDSERPR19JT0NUTF9CQVNFLCA2LCBpbnQpCisjZGVmaW5lCVdESU9DX0dFVFRJTUVPVVQgICAgICAgIF9JT1IoV0FUQ0hET0dfSU9DVExfQkFTRSwgNywgaW50KQorCisjZGVmaW5lCVdESU9GX1VOS05PV04JCS0xCS8qIFVua25vd24gZmxhZyBlcnJvciAqLworI2RlZmluZQlXRElPU19VTktOT1dOCQktMQkvKiBVbmtub3duIHN0YXR1cyBlcnJvciAqLworCisjZGVmaW5lCVdESU9GX09WRVJIRUFUCQkweDAwMDEJLyogUmVzZXQgZHVlIHRvIENQVSBvdmVyaGVhdCAqLworI2RlZmluZQlXRElPRl9GQU5GQVVMVAkJMHgwMDAyCS8qIEZhbiBmYWlsZWQgKi8KKyNkZWZpbmUJV0RJT0ZfRVhURVJOMQkJMHgwMDA0CS8qIEV4dGVybmFsIHJlbGF5IDEgKi8KKyNkZWZpbmUJV0RJT0ZfRVhURVJOMgkJMHgwMDA4CS8qIEV4dGVybmFsIHJlbGF5IDIgKi8KKyNkZWZpbmUJV0RJT0ZfUE9XRVJVTkRFUgkweDAwMTAJLyogUG93ZXIgYmFkL3Bvd2VyIGZhdWx0ICovCisjZGVmaW5lCVdESU9GX0NBUkRSRVNFVAkJMHgwMDIwCS8qIENhcmQgcHJldmlvdXNseSByZXNldCB0aGUgQ1BVICovCisjZGVmaW5lIFdESU9GX1BPV0VST1ZFUgkJMHgwMDQwCS8qIFBvd2VyIG92ZXIgdm9sdGFnZSAqLworI2RlZmluZSBXRElPRl9TRVRUSU1FT1VUCTB4MDA4MCAgLyogU2V0IHRpbWVvdXQgKGluIHNlY29uZHMpICovCisjZGVmaW5lIFdESU9GX01BR0lDQ0xPU0UJMHgwMTAwCS8qIFN1cHBvcnRzIG1hZ2ljIGNsb3NlIGNoYXIgKi8KKyNkZWZpbmUJV0RJT0ZfS0VFUEFMSVZFUElORwkweDgwMDAJLyogS2VlcCBhbGl2ZSBwaW5nIHJlcGx5ICovCisKKyNkZWZpbmUJV0RJT1NfRElTQUJMRUNBUkQJMHgwMDAxCS8qIFR1cm4gb2ZmIHRoZSB3YXRjaGRvZyB0aW1lciAqLworI2RlZmluZQlXRElPU19FTkFCTEVDQVJECTB4MDAwMgkvKiBUdXJuIG9uIHRoZSB3YXRjaGRvZyB0aW1lciAqLworI2RlZmluZQlXRElPU19URU1QUEFOSUMJCTB4MDAwNAkvKiBLZXJuZWwgcGFuaWMgb24gdGVtcGVyYXR1cmUgdHJpcCAqLworCisjZW5kaWYgIC8qIGlmbmRlZiBfTElOVVhfV0FUQ0hET0dfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC93YXZlZnJvbnQuaCBiL2luY2x1ZGUvbGludXgvd2F2ZWZyb250LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFiZDBmZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvd2F2ZWZyb250LmgKQEAgLTAsMCArMSw2NzUgQEAKKyNpZm5kZWYgX193YXZlZnJvbnRfaF9fCisjZGVmaW5lIF9fd2F2ZWZyb250X2hfXworCisvKiBXYXZlRnJvbnQgaGVhZGVyIGZpbGUuCisgKiAgIAorICogQ29weXJpZ2h0IChDKSBieSBQYXVsIEJhcnRvbi1EYXZpcyAxOTk4CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRSAoR1BMKQorICogVmVyc2lvbiAyIChKdW5lIDE5OTEpLiBTZWUgdGhlICJDT1BZSU5HIiBmaWxlIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb2Z0d2FyZQorICogZm9yIG1vcmUgaW5mby4gIAorICovCisKKyNpZiAoIWRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKF9fR05VR19fKSkKKworICAgICBZb3Ugd2lsbCBub3QgYmUgYWJsZSB0byBjb21waWxlIHRoaXMgZmlsZSBjb3JyZWN0bHkgd2l0aG91dCBnY2MsIGJlY2F1c2UKKyAgICAgaXQgaXMgbmVjZXNzYXJ5IHRvIHBhY2sgdGhlICJ3YXZlZnJvbnRfYWxpYXMiIHN0cnVjdHVyZSB0byBhIHNpemUKKyAgICAgb2YgMjIgYnl0ZXMsIGNvcnJlc3BvbmRpbmcgdG8gMTYtYml0IGFsaWdubWVudCAoYXMgd291bGQgaGF2ZSBiZWVuCisgICAgIHRoZSBjYXNlIG9uIHRoZSBvcmlnaW5hbCBwbGF0Zm9ybSwgTVMtRE9TKS4gSWYgdGhpcyBpcyBub3QgZG9uZSwKKyAgICAgdGhlbiBXYXZlUGF0Y2gtZm9ybWF0IGZpbGVzIGNhbm5vdCBiZSByZWFkL3dyaXR0ZW4gY29ycmVjdGx5LgorICAgICBUaGUgbWV0aG9kIHVzZWQgdG8gZG8gdGhpcyBoZXJlICgiX19hdHRyaWJ1dGVfXygocGFja2VkKSIpIGlzCisgICAgIGNvbXBsZXRlbHkgY29tcGlsZXIgZGVwZW5kZW50LgorICAgICAKKyAgICAgQWxsIG90aGVyIHdhdmVmcm9udF8qIHR5cGVzIGVuZCB1cCBhbGlnbmVkIHRvIDMyIGJpdCB2YWx1ZXMgYW5kCisgICAgIHN0aWxsIGhhdmUgdGhlIHNhbWUgKGNvcnJlY3QpIHNpemUuCisKKyNlbHNlCisKKyAgICAgLyogSG93ZXZlciwgbm90ZSB0aGF0IGFzIG9mIEcrKyAyLjcuMy4yLCBnKysgd2FzIHVuYWJsZSB0bworCWNvcnJlY3RseSBwYXJzZSAqdHlwZSogX19hdHRyaWJ1dGVfXyB0YWdzLiBJdCB3aWxsIGRvIHRoZQorCXJpZ2h0IHRoaW5nIGlmIHdlIHVzZSB0aGUgInBhY2tlZCIgYXR0cmlidXRlIG9uIGVhY2ggc3RydWN0CisJbWVtYmVyLCB3aGljaCBoYXMgdGhlIHNhbWUgc2VtYW50aWNzIGFueXdheS4gCisgICAgICovCisKKyNlbmRpZiAvKiBfX0dOVUNfXyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogV0FSTklORyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICBQTEVBU0UgRE8gTk9UIE1PRElGWSBUSElTIEZJTEUgSU4gQU5ZIFdBWSBUSEFUIEFGRkVDVFMgSVRTIEFCSUxJVFkgVE8gCisgIEJFIFVTRUQgV0lUSCBFSVRIRVIgQyAqT1IqIEMrKy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIE5VTV9NSURJS0VZUyAKKyNkZWZpbmUgTlVNX01JRElLRVlTIDEyOAorI2VuZGlmICAvKiBOVU1fTUlESUtFWVMgKi8KKworI2lmbmRlZiBOVU1fTUlESUNIQU5ORUxTCisjZGVmaW5lIE5VTV9NSURJQ0hBTk5FTFMgMTYKKyNlbmRpZiAgLyogTlVNX01JRElDSEFOTkVMUyAqLworCisvKiBUaGVzZSBhcmUgdmVyeSB1c2VmdWwvaW1wb3J0YW50LiB0aGUgb3JpZ2luYWwgd2F2ZWZyb250IGludGVyZmFjZQorICAgd2FzIGRldmVsb3BlZCBvbiBhIDE2IGJpdCBzeXN0ZW0sIHdoZXJlIHNpemVvZihpbnQpID0gMgorICAgYnl0ZXMuIERlZmluaW5nIHRoaW5ncyBsaWtlIHRoaXMgbWFrZXMgdGhlIGNvZGUgbXVjaCBtb3JlIHBvcnRhYmxlLCBhbmQKKyAgIGVhc2llciB0byB1bmRlcnN0YW5kIHdpdGhvdXQgaGF2aW5nIHRvIHRvZ2dsZSBiYWNrIGFuZCBmb3J0aAorICAgYmV0d2VlbiBhIDE2LWJpdCB2aWV3IG9mIHRoZSB3b3JsZCBhbmQgYSAzMi1iaXQgb25lLiAKKyAqLyAgIAorCit0eXBlZGVmIHNob3J0IElOVDE2OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBVSU5UMTY7Cit0eXBlZGVmIGludCBJTlQzMjsKK3R5cGVkZWYgdW5zaWduZWQgaW50IFVJTlQzMjsKK3R5cGVkZWYgY2hhciBDSEFSODsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBVQ0hBUjg7CisKKy8qIFBzZXVkby1jb21tYW5kcyBub3QgcGFydCBvZiB0aGUgV2F2ZUZyb250IGNvbW1hbmQgc2V0LgorICAgVGhlc2UgYXJlIHVzZWQgZm9yIHZhcmlvdXMgZHJpdmVyIGNvbnRyb2xzIGFuZCBkaXJlY3QKKyAgIGhhcmR3YXJlIGNvbnRyb2wuCisgKi8KKworI2RlZmluZSBXRkNfREVCVUdfRFJJVkVSICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgV0ZDX0ZYX0lPQ1RMICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFdGQ19QQVRDSF9TVEFUVVMgICAgICAgICAgICAgICAgMgorI2RlZmluZSBXRkNfUFJPR1JBTV9TVEFUVVMgICAgICAgICAgICAgIDMKKyNkZWZpbmUgV0ZDX1NBTVBMRV9TVEFUVVMgICAgICAgICAgICAgICA0CisjZGVmaW5lIFdGQ19ESVNBQkxFX0lOVEVSUlVQVFMgICAgICAgICAgNQorI2RlZmluZSBXRkNfRU5BQkxFX0lOVEVSUlVQVFMgICAgICAgICAgIDYKKyNkZWZpbmUgV0ZDX0lOVEVSUlVQVF9TVEFUVVMgICAgICAgICAgICA3CisjZGVmaW5lIFdGQ19ST01TQU1QTEVTX1JET05MWSAgICAgICAgICAgOAorI2RlZmluZSBXRkNfSURFTlRJRllfU0xPVF9UWVBFICAgICAgICAgIDkKKworLyogV2F2ZWZyb250IHN5bnRoIGNvbW1hbmRzCisgKi8KKworI2RlZmluZSBXRkNfRE9XTkxPQURfU0FNUExFCQkweDgwCisjZGVmaW5lIFdGQ19ET1dOTE9BRF9CTE9DSwkJMHg4MQorI2RlZmluZSBXRkNfRE9XTkxPQURfTVVMVElTQU1QTEUJMHg4MgorI2RlZmluZSBXRkNfRE9XTkxPQURfU0FNUExFX0FMSUFTCTB4ODMKKyNkZWZpbmUgV0ZDX0RFTEVURV9TQU1QTEUJCTB4ODQKKyNkZWZpbmUgV0ZDX1JFUE9SVF9GUkVFX01FTU9SWQkJMHg4NQorI2RlZmluZSBXRkNfRE9XTkxPQURfUEFUQ0gJCTB4ODYKKyNkZWZpbmUgV0ZDX0RPV05MT0FEX1BST0dSQU0JCTB4ODcKKyNkZWZpbmUgV0ZDX1NFVF9TWU5USFZPTAkJMHg4OQorI2RlZmluZSBXRkNfU0VUX05WT0lDRVMJCQkweDhCCisjZGVmaW5lIFdGQ19ET1dOTE9BRF9EUlVNCQkweDkwCisjZGVmaW5lIFdGQ19HRVRfU1lOVEhWT0wJCTB4OTIKKyNkZWZpbmUgV0ZDX0dFVF9OVk9JQ0VTCQkJMHg5NAorI2RlZmluZSBXRkNfRElTQUJMRV9DSEFOTkVMCQkweDlBCisjZGVmaW5lIFdGQ19FTkFCTEVfQ0hBTk5FTAkJMHg5QgorI2RlZmluZSBXRkNfTUlTWU5USF9PRkYJCQkweDlECisjZGVmaW5lIFdGQ19NSVNZTlRIX09OCQkJMHg5RQorI2RlZmluZSBXRkNfRklSTVdBUkVfVkVSU0lPTgkJMHg5RgorI2RlZmluZSBXRkNfR0VUX05TQU1QTEVTCQkweEEwCisjZGVmaW5lIFdGQ19ESVNBQkxFX0RSVU1fUFJPR1JBTQkweEEyCisjZGVmaW5lIFdGQ19VUExPQURfUEFUQ0gJCTB4QTMKKyNkZWZpbmUgV0ZDX1VQTE9BRF9QUk9HUkFNCQkweEE0CisjZGVmaW5lIFdGQ19TRVRfVFVOSU5HCQkJMHhBNgorI2RlZmluZSBXRkNfR0VUX1RVTklORwkJCTB4QTcKKyNkZWZpbmUgV0ZDX1ZNSURJX09OCQkJMHhBOAorI2RlZmluZSBXRkNfVk1JRElfT0ZGCQkJMHhBOQorI2RlZmluZSBXRkNfTUlESV9TVEFUVVMJCQkweEFBCisjZGVmaW5lIFdGQ19HRVRfQ0hBTk5FTF9TVEFUVVMJCTB4QUIKKyNkZWZpbmUgV0ZDX0RPV05MT0FEX1NBTVBMRV9IRUFERVIJMHhBQworI2RlZmluZSBXRkNfVVBMT0FEX1NBTVBMRV9IRUFERVIJMHhBRAorI2RlZmluZSBXRkNfVVBMT0FEX01VTFRJU0FNUExFCQkweEFFCisjZGVmaW5lIFdGQ19VUExPQURfU0FNUExFX0FMSUFTCQkweEFGCisjZGVmaW5lIFdGQ19JREVOVElGWV9TQU1QTEVfVFlQRQkweEIwCisjZGVmaW5lIFdGQ19ET1dOTE9BRF9FRFJVTV9QUk9HUkFNCTB4QjEKKyNkZWZpbmUgV0ZDX1VQTE9BRF9FRFJVTV9QUk9HUkFNCTB4QjIKKyNkZWZpbmUgV0ZDX1NFVF9FRFJVTV9DSEFOTkVMCQkweEIzCisjZGVmaW5lIFdGQ19JTlNUT1VUX0xFVkVMUwkJMHhCNAorI2RlZmluZSBXRkNfUEVBS09VVF9MRVZFTFMJCTB4QjUKKyNkZWZpbmUgV0ZDX1JFUE9SVF9DSEFOTkVMX1BST0dSQU1TCTB4QjYKKyNkZWZpbmUgV0ZDX0hBUkRXQVJFX1ZFUlNJT04JCTB4Q0YKKyNkZWZpbmUgV0ZDX1VQTE9BRF9TQU1QTEVfUEFSQU1TCTB4RDcKKyNkZWZpbmUgV0ZDX0RPV05MT0FEX09TCQkJMHhGMQorI2RlZmluZSBXRkNfTk9PUCAgICAgICAgICAgICAgICAgICAgICAgIDB4RkYKKworI2RlZmluZSBXRl9NQVhfU0FNUExFICAgNTEyCisjZGVmaW5lIFdGX01BWF9QQVRDSCAgICAyNTYKKyNkZWZpbmUgV0ZfTUFYX1BST0dSQU0gIDEyOAorCisjZGVmaW5lIFdGX1NFQ1RJT05fTUFYICA0NCAgIC8qIGxvbmdlc3QgT1Mgc2VjdGlvbiBsZW5ndGggKi8KKworLyogIyBvZiBieXRlcyB3ZSBzZW5kIHRvIHRoZSBib2FyZCB3aGVuIHNlbmRpbmcgaXQgdmFyaW91cyBraW5kcyBvZgorICAgc3Vic3RhbnRpdmUgZGF0YSwgc3VjaCBhcyBzYW1wbGVzLCBwYXRjaGVzIGFuZCBwcm9ncmFtcy4KKyovCisKKyNkZWZpbmUgV0ZfUFJPR1JBTV9CWVRFUyAzMgorI2RlZmluZSBXRl9QQVRDSF9CWVRFUyAxMzIKKyNkZWZpbmUgV0ZfU0FNUExFX0JZVEVTIDI3CisjZGVmaW5lIFdGX1NBTVBMRV9IRFJfQllURVMgMjUKKyNkZWZpbmUgV0ZfQUxJQVNfQllURVMgMjUKKyNkZWZpbmUgV0ZfRFJVTV9CWVRFUyA5CisjZGVmaW5lIFdGX01TQU1QTEVfQllURVMgMjU5IC8qIChNSURJX0tFWVMgKiAyKSArIDMgKi8KKworI2RlZmluZSBXRl9BQ0sgICAgIDB4ODAKKyNkZWZpbmUgV0ZfRE1BX0FDSyAweDgxCisKKy8qIE9SLXZhbHVlcyBmb3IgTUlESSBzdGF0dXMgYml0cyAqLworCisjZGVmaW5lIFdGX01JRElfVklSVFVBTF9FTkFCTEVEIDB4MQorI2RlZmluZSBXRl9NSURJX1ZJUlRVQUxfSVNfRVhURVJOQUwgMHgyCisjZGVmaW5lIFdGX01JRElfSU5fVE9fU1lOVEhfRElTQUJMRUQgMHg0CisKKy8qIHNsb3QgaW5kZXhlcyBmb3Igc3RydWN0IGFkZHJlc3NfaW5mbzogbWFrZXMgY29kZSBhIGxpdHRsZSBtb3JlIG1uZW1vbmljICovCisKKyNkZWZpbmUgV0ZfU1lOVEhfU0xPVCAgICAgICAgIDAKKyNkZWZpbmUgV0ZfSU5URVJOQUxfTUlESV9TTE9UIDEKKyNkZWZpbmUgV0ZfRVhURVJOQUxfTUlESV9TTE9UIDIKKworLyogTWFnaWMgTUlESSBieXRlcyB1c2VkIHRvIHN3aXRjaCBJL08gc3RyZWFtcyBvbiB0aGUgSUNTMjExNSBNUFU0MDEKKyAgIGVtdWxhdGlvbi4gTm90ZSB0aGVzZSBORVZFUiBzaG93IHVwIGluIG91dHB1dCBmcm9tIHRoZSBkZXZpY2UgYW5kCisgICBzaG91bGQgTkVWRVIgYmUgdXNlZCBpbiBpbnB1dCB1bmxlc3MgVmlydHVhbCBNSURJIG1vZGUgaGFzIGJlZW4gCisgICBkaXNhYmxlZC4gSWYgdGhleSBkbyBzaG93IHVwIGFzIGlucHV0LCB0aGUgcmVzdWx0cyBhcmUgdW5wcmVkaWN0YWJsZS4KKyovCisKKyNkZWZpbmUgV0ZfRVhURVJOQUxfU1dJVENIICAweEZECisjZGVmaW5lIFdGX0lOVEVSTkFMX1NXSVRDSCAgMHhGOQorCisvKiBEZWJ1Z2dpbmcgZmxhZ3MgKi8KKworI2RlZmluZSBXRl9ERUJVR19DTUQgMHgxCisjZGVmaW5lIFdGX0RFQlVHX0RBVEEgMHgyCisjZGVmaW5lIFdGX0RFQlVHX0xPQURfUEFUQ0ggMHg0CisjZGVmaW5lIFdGX0RFQlVHX0lPIDB4OAorCisvKiBXYXZlUGF0Y2ggZmlsZSBmb3JtYXQgc3R1ZmYgKi8KKworI2RlZmluZSBXRl9XQVZFUEFUQ0hfVkVSU0lPTiAgICAgMTIwOyAgLyogIEN1cnJlbnQgdmVyc2lvbiBudW1iZXIgKDEuMikgICovCisjZGVmaW5lIFdGX01BWF9DT01NRU5UICAgICAgICAgICA2NCAgICAvKiAgQ29tbWVudCBsZW5ndGggKi8KKyNkZWZpbmUgV0ZfTlVNX0xBWUVSUyAgICAgICAgICAgIDQKKyNkZWZpbmUgV0ZfTkFNRV9MRU5HVEggICAgICAgICAgIDMyCisjZGVmaW5lIFdGX1NPVVJDRV9MRU5HVEggICAgICAgICAyNjAKKworI2RlZmluZSBCYW5rRmlsZUlEICAgICAiQmFuayIKKyNkZWZpbmUgRHJ1bWtpdEZpbGVJRCAgIkRydW1LaXQiCisjZGVmaW5lIFByb2dyYW1GaWxlSUQgICJQcm9ncmFtIgorCitzdHJ1Y3Qgd2ZfZW52ZWxvcGUKK3sKKyAgICBVQ0hBUjggYXR0YWNrX3RpbWU6NzsKKyAgICBVQ0hBUjggVW51c2VkMToxOworCisgICAgVUNIQVI4IGRlY2F5MV90aW1lOjc7CisgICAgVUNIQVI4IFVudXNlZDI6MTsKKworICAgIFVDSEFSOCBkZWNheTJfdGltZTo3OworICAgIFVDSEFSOCBVbnVzZWQzOjE7CisKKyAgICBVQ0hBUjggc3VzdGFpbl90aW1lOjc7CisgICAgVUNIQVI4IFVudXNlZDQ6MTsKKworICAgIFVDSEFSOCByZWxlYXNlX3RpbWU6NzsKKyAgICBVQ0hBUjggVW51c2VkNToxOworCisgICAgVUNIQVI4IHJlbGVhc2UyX3RpbWU6NzsKKyAgICBVQ0hBUjggVW51c2VkNjoxOworCisgICAgQ0hBUjggYXR0YWNrX2xldmVsOworICAgIENIQVI4IGRlY2F5MV9sZXZlbDsKKyAgICBDSEFSOCBkZWNheTJfbGV2ZWw7CisgICAgQ0hBUjggc3VzdGFpbl9sZXZlbDsKKyAgICBDSEFSOCByZWxlYXNlX2xldmVsOworCisgICAgVUNIQVI4IGF0dGFja192ZWxvY2l0eTo3OworICAgIFVDSEFSOCBVbnVzZWQ3OjE7CisKKyAgICBVQ0hBUjggdm9sdW1lX3ZlbG9jaXR5Ojc7CisgICAgVUNIQVI4IFVudXNlZDg6MTsKKworICAgIFVDSEFSOCBrZXlib2FyZF9zY2FsaW5nOjc7CisgICAgVUNIQVI4IFVudXNlZDk6MTsKK307Cit0eXBlZGVmIHN0cnVjdCB3Zl9lbnZlbG9wZSB3YXZlZnJvbnRfZW52ZWxvcGU7CisKK3N0cnVjdCB3Zl9sZm8KK3sKKyAgICBVQ0hBUjggc2FtcGxlX251bWJlcjsKKworICAgIFVDSEFSOCBmcmVxdWVuY3k6NzsKKyAgICBVQ0hBUjggVW51c2VkMToxOworCisgICAgVUNIQVI4IGFtX3NyYzo0OworICAgIFVDSEFSOCBmbV9zcmM6NDsKKworICAgIENIQVI4IGZtX2Ftb3VudDsKKyAgICBDSEFSOCBhbV9hbW91bnQ7CisgICAgQ0hBUjggc3RhcnRfbGV2ZWw7CisgICAgQ0hBUjggZW5kX2xldmVsOworCisgICAgVUNIQVI4IHJhbXBfZGVsYXk6NzsKKyAgICBVQ0hBUjggd2F2ZV9yZXN0YXJ0OjE7IC8qIGZvciBMRk8yIG9ubHkgKi8KKworICAgIFVDSEFSOCByYW1wX3RpbWU6NzsKKyAgICBVQ0hBUjggVW51c2VkMjoxOworfTsKK3R5cGVkZWYgc3RydWN0IHdmX2xmbyB3YXZlZnJvbnRfbGZvOworCitzdHJ1Y3Qgd2ZfcGF0Y2gKK3sKKyAgICBJTlQxNiAgZnJlcXVlbmN5X2JpYXM7ICAgICAgICAgLyogICoqIFRISVMgSVMgSU4gTU9UT1JPTEEgRk9STUFUISEgKiogKi8KKworICAgIFVDSEFSOCBhbXBsaXR1ZGVfYmlhczo3OworICAgIFVDSEFSOCBVbnVzZWQxOjE7CisKKyAgICBVQ0hBUjggcG9ydGFtZW50bzo3OworICAgIFVDSEFSOCBVbnVzZWQyOjE7CisKKyAgICBVQ0hBUjggc2FtcGxlX251bWJlcjsKKworICAgIFVDSEFSOCBwaXRjaF9iZW5kOjQ7CisgICAgVUNIQVI4IHNhbXBsZV9tc2I6MTsKKyAgICBVQ0hBUjggVW51c2VkMzozOworCisgICAgVUNIQVI4IG1vbm86MTsKKyAgICBVQ0hBUjggcmV0cmlnZ2VyOjE7CisgICAgVUNIQVI4IG5vaG9sZDoxOworICAgIFVDSEFSOCByZXN0YXJ0OjE7CisgICAgVUNIQVI4IGZpbHRlcmNvbmZpZzoyOyAvKiBTREsgc2F5cyAibm90IHVzZWQiICovCisgICAgVUNIQVI4IHJldXNlOjE7CisgICAgVUNIQVI4IHJlc2V0X2xmbzoxOyAgICAKKworICAgIFVDSEFSOCBmbV9zcmMyOjQ7CisgICAgVUNIQVI4IGZtX3NyYzE6NDsgICAKKworICAgIENIQVI4IGZtX2Ftb3VudDE7CisgICAgQ0hBUjggZm1fYW1vdW50MjsKKworICAgIFVDSEFSOCBhbV9zcmM6NDsKKyAgICBVQ0hBUjggVW51c2VkNDo0OworCisgICAgQ0hBUjggYW1fYW1vdW50OworCisgICAgVUNIQVI4IGZjMV9tb2RlOjQ7CisgICAgVUNIQVI4IGZjMl9tb2RlOjQ7CisKKyAgICBDSEFSOCBmYzFfbW9kX2Ftb3VudDsKKyAgICBDSEFSOCBmYzFfa2V5Ym9hcmRfc2NhbGluZzsKKyAgICBDSEFSOCBmYzFfYmlhczsKKyAgICBDSEFSOCBmYzJfbW9kX2Ftb3VudDsKKyAgICBDSEFSOCBmYzJfa2V5Ym9hcmRfc2NhbGluZzsKKyAgICBDSEFSOCBmYzJfYmlhczsKKworICAgIFVDSEFSOCByYW5kb21pemVyOjc7CisgICAgVUNIQVI4IFVudXNlZDU6MTsKKworICAgIHN0cnVjdCB3Zl9lbnZlbG9wZSBlbnZlbG9wZTE7CisgICAgc3RydWN0IHdmX2VudmVsb3BlIGVudmVsb3BlMjsKKyAgICBzdHJ1Y3Qgd2ZfbGZvIGxmbzE7CisgICAgc3RydWN0IHdmX2xmbyBsZm8yOworfTsKK3R5cGVkZWYgc3RydWN0IHdmX3BhdGNoIHdhdmVmcm9udF9wYXRjaDsKKworc3RydWN0IHdmX2xheWVyCit7CisgICAgVUNIQVI4IHBhdGNoX251bWJlcjsKKworICAgIFVDSEFSOCBtaXhfbGV2ZWw6NzsKKyAgICBVQ0hBUjggbXV0ZToxOworCisgICAgVUNIQVI4IHNwbGl0X3BvaW50Ojc7CisgICAgVUNIQVI4IHBsYXlfYmVsb3c6MTsKKworICAgIFVDSEFSOCBwYW5fbW9kX3NyYzoyOworICAgIFVDSEFSOCBwYW5fb3JfbW9kOjE7CisgICAgVUNIQVI4IHBhbjo0OworICAgIFVDSEFSOCBzcGxpdF90eXBlOjE7Cit9OwordHlwZWRlZiBzdHJ1Y3Qgd2ZfbGF5ZXIgd2F2ZWZyb250X2xheWVyOworCitzdHJ1Y3Qgd2ZfcHJvZ3JhbQoreworICAgIHN0cnVjdCB3Zl9sYXllciBsYXllcltXRl9OVU1fTEFZRVJTXTsKK307Cit0eXBlZGVmIHN0cnVjdCB3Zl9wcm9ncmFtIHdhdmVmcm9udF9wcm9ncmFtOworCitzdHJ1Y3Qgd2Zfc2FtcGxlX29mZnNldAoreworICAgIElOVDMyIEZyYWN0aW9uOjQ7CisgICAgSU5UMzIgSW50ZWdlcjoyMDsKKyAgICBJTlQzMiBVbnVzZWQ6ODsKK307Cit0eXBlZGVmIHN0cnVjdCB3Zl9zYW1wbGVfb2Zmc2V0IHdhdmVmcm9udF9zYW1wbGVfb2Zmc2V0OyAgICAgICAgICAKKyAgICAgCisvKiBTYW1wbGUgc2xvdCB0eXBlcyAqLworCisjZGVmaW5lIFdGX1NUX1NBTVBMRSAgICAgIDAKKyNkZWZpbmUgV0ZfU1RfTVVMVElTQU1QTEUgMQorI2RlZmluZSBXRl9TVF9BTElBUyAgICAgICAyCisjZGVmaW5lIFdGX1NUX0VNUFRZICAgICAgIDMKKworLyogcHNldWRvJ3MgKi8KKworI2RlZmluZSBXRl9TVF9EUlVNICAgICAgICA0CisjZGVmaW5lIFdGX1NUX1BST0dSQU0gICAgIDUKKyNkZWZpbmUgV0ZfU1RfUEFUQ0ggICAgICAgNgorI2RlZmluZSBXRl9TVF9TQU1QTEVIRFIgICA3CisKKyNkZWZpbmUgV0ZfU1RfTUFTSyAgICAgICAgMHhmCisKKy8qIEZsYWdzIGZvciBzbG90IHN0YXR1cy4gVGhlc2Ugb2NjdXB5IHRoZSB1cHBlciBiaXRzIG9mIHRoZSBzYW1lIGJ5dGUKKyAgIGFzIGEgc2FtcGxlIHR5cGUuCisqLworCisjZGVmaW5lIFdGX1NMT1RfVVNFRCAgICAgIDB4ODAgICAvKiBYWFggZG9uJ3QgcmVseSBvbiB0aGlzIGJlaW5nIGFjY3VyYXRlICovCisjZGVmaW5lIFdGX1NMT1RfRklMTEVEICAgIDB4NDAKKyNkZWZpbmUgV0ZfU0xPVF9ST00gICAgICAgMHgyMAorCisjZGVmaW5lIFdGX1NMT1RfTUFTSyAgICAgIDB4ZjAKKworLyogY2hhbm5lbCBjb25zdGFudHMgKi8KKworI2RlZmluZSBXRl9DSF9NT05PICAwCisjZGVmaW5lIFdGX0NIX0xFRlQgIDEKKyNkZWZpbmUgV0ZfQ0hfUklHSFQgMgorCisvKiBTYW1wbGUgZm9ybWF0cyAqLworCisjZGVmaW5lIExJTkVBUl8xNkJJVCAwCisjZGVmaW5lIFdISVRFX05PSVNFICAxCisjZGVmaW5lIExJTkVBUl84QklUICAyCisjZGVmaW5lIE1VTEFXXzhCSVQgICAzCisKKyNkZWZpbmUgV0ZfU0FNUExFX0lTXzhCSVQoc21wbCkgKChzbXBsKS0+U2FtcGxlUmVzb2x1dGlvbiYyKQorCisKKy8qIAorCisgIEJlY2F1c2UgbW9zdC9hbGwgb2YgdGhlIHNhbXBsZSBkYXRhIHdlIHBhc3MgaW4gdmlhIHBvaW50ZXJzIGhhcworICBuZXZlciBiZWVuIGNvcGllZCAoanVzdCBtbWFwLWVkIGludG8gdXNlciBzcGFjZSBzdHJhaWdodCBmcm9tIHRoZQorICBkaXNrKSwgaXQgd291bGQgYmUgbmljZSB0byBhbGxvdyBoYW5kbGluZyBvZiBtdWx0aS1jaGFubmVsIHNhbXBsZQorICBkYXRhIHdpdGhvdXQgZm9yY2luZyB1c2VyLWxldmVsIGV4dHJhY3Rpb24gb2YgdGhlIHJlbGV2YW50IGJ5dGVzLgorICAKKyAgU28sIHdlIG5lZWQgYSB3YXkgb2Ygc3BlY2lmeWluZyB3aGljaCBjaGFubmVsIHRvIHVzZSAodGhlIFdhdmVGcm9udAorICBvbmx5IGhhbmRsZXMgbW9ubyBzYW1wbGVzIGluIGEgZ2l2ZW4gc2xvdCksIGFuZCB0aGUgb25seSB3YXkgdG8gZG8KKyAgdGhpcyB3aXRob3V0IHVzaW5nIHNvbWUgc3RydWN0IG90aGVyIHRoYW4gd2F2ZWZyb250X3NhbXBsZSBhcyB0aGUKKyAgaW50ZXJmYWNlIGlzIHRoZSBhd2Z1bCBoYWNrIG9mIHVzaW5nIHRoZSB1bnVzZWQgYml0cyBpbiBhCisgIHdhdmVmcm9udF9zYW1wbGU6CisgIAorICBWYWwgICAgICBNZWFuaW5nCisgIC0tLSAgICAgIC0tLS0tLS0KKyAgMCAgICAgICAgbm8gY2hhbm5lbCBzZWxlY3Rpb24gKHVzZSBjaGFubmVsIDEsIHNhbXBsZSBpcyBNT05PKQorICAxICAgICAgICB1c2UgZmlyc3QgY2hhbm5lbCwgYW5kIHNraXAgb25lCisgIDIgICAgICAgIHVzZSBzZWNvbmQgY2hhbm5lbCwgYW5kIHNraXAgb25lCisgIDMgICAgICAgIHVzZSB0aGlyZCBjaGFubmVsLCBhbmQgc2tpcCB0d28KKyAgNCAgICAgICAgdXNlIGZvdXJ0aCBjaGFubmVsLCBza2lwIHRocmVlCisgIDUgICAgICAgIHVzZSBmaWZ0aCBjaGFubmVsLCBza2lwIGZvdXIKKyAgNiAgICAgICAgdXNlIHNpeCBjaGFubmVsLCBza2lwIGZpdmUKKworCisgIFRoaXMgY2FuIGhhbmRsZSB1cCB0byA0IGNoYW5uZWxzLCBhbmQgYW55b25lIGRvd25sb2FkaW5nID40IGNoYW5uZWxzCisgIG9mIHNhbXBsZSBkYXRhIGp1c3QgdG8gc2VsZWN0IG9uZSBvZiB0aGVtIG5lZWRzIHRvIGZpbmQgc29tZSB0b29scworICBsaWtlIHNveCAuLi4KKworICBOT1RFOiB2YWx1ZXMgMCwgMSBhbmQgMiBjb3JyZXNwb25kIHRvIFdGX0NIXyogYWJvdmUuIFRoaXMgaXMgCisgIGltcG9ydGFudC4KKworKi8KKworI2RlZmluZSBXRl9TRVRfQ0hBTk5FTChzYW1wLGNobikgXAorIChzYW1wKS0+VW51c2VkMSA9IGNobiAmIDB4MTsgXAorIChzYW1wKS0+VW51c2VkMiA9IGNobiAmIDB4MjsgXAorIChzYW1wKS0+VW51c2VkMyA9IGNobiAmIDB4NCAKKyAgCisjZGVmaW5lIFdGX0dFVF9DSEFOTkVMKHNhbXApIFwKKyAgKCgoc2FtcCktPlVudXNlZDMgPDwgMil8KChzYW1wKS0+VW51c2VkMjw8MSl8KHNhbXApLT5VbnVzZWQxKQorICAKK3R5cGVkZWYgc3RydWN0IHdmX3NhbXBsZSB7CisgICAgc3RydWN0IHdmX3NhbXBsZV9vZmZzZXQgc2FtcGxlU3RhcnRPZmZzZXQ7CisgICAgc3RydWN0IHdmX3NhbXBsZV9vZmZzZXQgbG9vcFN0YXJ0T2Zmc2V0OworICAgIHN0cnVjdCB3Zl9zYW1wbGVfb2Zmc2V0IGxvb3BFbmRPZmZzZXQ7CisgICAgc3RydWN0IHdmX3NhbXBsZV9vZmZzZXQgc2FtcGxlRW5kT2Zmc2V0OworICAgIElOVDE2IEZyZXF1ZW5jeUJpYXM7CisgICAgVUNIQVI4IFNhbXBsZVJlc29sdXRpb246MjsgIC8qIHNhbXBsZV9mb3JtYXQgKi8KKyAgICBVQ0hBUjggVW51c2VkMToxOworICAgIFVDSEFSOCBMb29wOjE7CisgICAgVUNIQVI4IEJpZGlyZWN0aW9uYWw6MTsKKyAgICBVQ0hBUjggVW51c2VkMjoxOworICAgIFVDSEFSOCBSZXZlcnNlOjE7CisgICAgVUNIQVI4IFVudXNlZDM6MTsKK30gd2F2ZWZyb250X3NhbXBsZTsKKwordHlwZWRlZiBzdHJ1Y3Qgd2ZfbXVsdGlzYW1wbGUgeworICAgIElOVDE2IE51bWJlck9mU2FtcGxlczsgICAvKiBsb2cyIG9mIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyAqLworICAgIElOVDE2IFNhbXBsZU51bWJlcltOVU1fTUlESUtFWVNdOworfSB3YXZlZnJvbnRfbXVsdGlzYW1wbGU7CisKK3R5cGVkZWYgc3RydWN0IHdmX2FsaWFzIHsKKyAgICBJTlQxNiBPcmlnaW5hbFNhbXBsZSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyAgICBzdHJ1Y3Qgd2Zfc2FtcGxlX29mZnNldCBzYW1wbGVTdGFydE9mZnNldCBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisgICAgc3RydWN0IHdmX3NhbXBsZV9vZmZzZXQgbG9vcFN0YXJ0T2Zmc2V0IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKyAgICBzdHJ1Y3Qgd2Zfc2FtcGxlX29mZnNldCBzYW1wbGVFbmRPZmZzZXQgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworICAgIHN0cnVjdCB3Zl9zYW1wbGVfb2Zmc2V0IGxvb3BFbmRPZmZzZXQgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisgICAgSU5UMTYgIEZyZXF1ZW5jeUJpYXMgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisgICAgVUNIQVI4IFNhbXBsZVJlc29sdXRpb246MiAgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworICAgIFVDSEFSOCBVbnVzZWQxOjEgIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKyAgICBVQ0hBUjggTG9vcDoxIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKyAgICBVQ0hBUjggQmlkaXJlY3Rpb25hbDoxICBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisgICAgVUNIQVI4IFVudXNlZDI6MSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisgICAgVUNIQVI4IFJldmVyc2U6MSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisgICAgVUNIQVI4IFVudXNlZDM6MSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7IAorICAgIAorICAgIC8qIFRoaXMgc3RydWN0dXJlIGlzIG1lYW50IHRvIGJlIHBhZGRlZCBvbmx5IHRvIDE2IGJpdHMgb24gdGhlaXIKKyAgICAgICBvcmlnaW5hbC4gT2YgY291cnNlLCB3aG9ldmVyIHdyb3RlIHRoZWlyIGRvY3VtZW50YXRpb24gZGlkbid0CisgICAgICAgcmVhbGl6ZSB0aGF0IHNpemVvZihzdHJ1Y3QpIGNhbiBiZSA+PQorICAgICAgIHN1bShzaXplb2Yoc3RydWN0LWZpZWxkcykpIGFuZCBzbyB0aG91Z2h0IHRoYXQgZ2l2aW5nIGEgQyBsZXZlbAorICAgICAgIGRlc2NyaXB0aW9uIG9mIHRoZSBzdHJ1Y3RzIHVzZWQgaW4gV2F2ZVBhdGNoIGZpbGVzIHdhcworICAgICAgIHN1ZmZpY2llbnQuIEkgc3VwcG9zZSBpdCB3YXMsIGFzIGxvbmcgYXMgeW91IHJlbWVtYmVyIHRoZSAKKyAgICAgICBzdGFuZGFyZCAxNi0+MzIgYml0IGlzc3Vlcy4KKyAgICAqLworCisgICAgVUNIQVI4IHNpeHRlZW5fYml0X3BhZGRpbmcgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSB3YXZlZnJvbnRfYWxpYXM7CisKK3R5cGVkZWYgc3RydWN0IHdmX2RydW0geworICAgIFVDSEFSOCBQYXRjaE51bWJlcjsKKyAgICBVQ0hBUjggTWl4TGV2ZWw6NzsKKyAgICBVQ0hBUjggVW5tdXRlOjE7CisgICAgVUNIQVI4IEdyb3VwOjQ7CisgICAgVUNIQVI4IFVudXNlZDE6NDsKKyAgICBVQ0hBUjggUGFuTW9kU291cmNlOjI7CisgICAgVUNIQVI4IFBhbk1vZHVsYXRlZDoxOworICAgIFVDSEFSOCBQYW5BbW91bnQ6NDsKKyAgICBVQ0hBUjggVW51c2VkMjoxOworfSB3YXZlZnJvbnRfZHJ1bTsKKwordHlwZWRlZiBzdHJ1Y3Qgd2ZfZHJ1bWtpdCB7CisgICAgc3RydWN0IHdmX2RydW0gZHJ1bVtOVU1fTUlESUtFWVNdOworfSB3YXZlZnJvbnRfZHJ1bWtpdDsKKwordHlwZWRlZiBzdHJ1Y3Qgd2ZfY2hhbm5lbF9wcm9ncmFtcyB7CisgICAgVUNIQVI4IFByb2dyYW1bTlVNX01JRElDSEFOTkVMU107Cit9IHdhdmVmcm9udF9jaGFubmVsX3Byb2dyYW1zOworCisvKiBIb3cgdG8gZ2V0IE1JREkgY2hhbm5lbCBzdGF0dXMgZnJvbSB0aGUgZGF0YSByZXR1cm5lZCBieQorICAgYSBXRkNfR0VUX0NIQU5ORUxfU1RBVFVTIGNvbW1hbmQgKGEgc3RydWN0IHdmX2NoYW5uZWxfcHJvZ3JhbXMpCisqLworCisjZGVmaW5lIFdGX0NIQU5ORUxfU1RBVFVTKGNoLHdjcCkgKHdjcClbKGNoLzcpXSAmICgxPDwoKGNoKSU3KSkKKwordHlwZWRlZiB1bmlvbiB3Zl9hbnkgeworICAgIHdhdmVmcm9udF9zYW1wbGUgczsKKyAgICB3YXZlZnJvbnRfbXVsdGlzYW1wbGUgbXM7CisgICAgd2F2ZWZyb250X2FsaWFzIGE7CisgICAgd2F2ZWZyb250X3Byb2dyYW0gcHI7CisgICAgd2F2ZWZyb250X3BhdGNoIHA7CisgICAgd2F2ZWZyb250X2RydW0gZDsKK30gd2F2ZWZyb250X2FueTsKKworLyogSGFubnUgU29sdmFpbmVuIGhvcGVkIHRoYXQgaGlzICJwYXRjaF9pbmZvIiBzdHJ1Y3QgaW4gc291bmRjYXJkLmgKKyAgIG1pZ2h0IHdvcmsgZm9yIG90aGVyIHdhdmUtdGFibGUgYmFzZWQgcGF0Y2ggbG9hZGluZyBzaXR1YXRpb25zLgorICAgQWxhcywgaGlzIGZlYXJzIHdlcmUgY29ycmVjdC4gVGhlIFdhdmVGcm9udCBkb2Vzbid0IGV2ZW4gY29tZSB3aXRoCisgICBqdXN0ICJwYXRjaGVzIiwgYnV0IHNldmVyYWwgZGlmZmVyZW50IGtpbmQgb2Ygc3RydWN0dXJlcyB0aGF0CisgICBjb250cm9sIHRoZSBzb3VuZCBnZW5lcmF0aW9uIHByb2Nlc3MuCisgKi8KKwordHlwZWRlZiBzdHJ1Y3Qgd2ZfcGF0Y2hfaW5mbyB7CisgICAgCisgICAgLyogdGhlIGZpcnN0IHR3byBmaWVsZHMgYXJlIHVzZWQgYnkgdGhlIE9TUyAicGF0Y2ggbG9hZGluZyIgaW50ZXJmYWNlCisgICAgICAgb25seSwgYW5kIGFyZSB1bnVzZWQgYnkgdGhlIGN1cnJlbnQgdXNlci1sZXZlbCBsaWJyYXJ5LgorICAgICovCisKKyAgICBJTlQxNiAgIGtleTsgICAgICAgICAgICAgICAvKiBVc2UgV0FWRUZST05UX1BBVENIIGhlcmUgKi8KKyAgICBVSU5UMTYgIGRldm5vOyAgICAgICAgICAgICAvKiBmaWxsIGluIHdoZW4gc2VuZGluZyAqLworICAgIFVDSEFSOCAgc3Via2V5OyAgICAgICAgICAgIC8qIFdGX1NUX3tTQU1QTEUsQUxJQVMsZXRjLn0gKi8KKworI2RlZmluZSBXQVZFRlJPTlRfRklORF9GUkVFX1NBTVBMRV9TTE9UIDk5OQorCisgICAgVUlOVDE2ICBudW1iZXI7ICAgICAgICAgICAgLyogcGF0Y2gvc2FtcGxlL3Byb2cgbnVtYmVyICovCisKKyAgICBVSU5UMzIgIHNpemU7ICAgICAgICAgICAgICAvKiBzaXplIG9mIGFueSBkYXRhIGluY2x1ZGVkIGluIAorCQkJCSAgb25lIG9mIHRoZSBmaWVsZHMgaW4gYGhkcnB0cicsIG9yCisJCQkJICBhcyBgZGF0YXB0cicuCisKKwkJCQkgIE5PVEU6IGZvciBhY3R1YWwgc2FtcGxlcywgdGhpcyBpcworCQkJCSAgdGhlIHNpemUgb2YgdGhlICpTRUxFQ1RFRCBDSEFOTkVMKgorCQkJCSAgZXZlbiBpZiBtb3JlIGRhdGEgaXMgYWN0dWFsbHkgYXZhaWxhYmxlLgorCQkJCSAgCisJCQkJICBTbywgYSBzdGVyZW8gc2FtcGxlICgyIGNoYW5uZWxzKSBvZgorCQkJCSAgNjAwMCBieXRlcyB0b3RhbCBoYXMgYHNpemUnID0gMzAwMC4KKworCQkJCSAgU2VlIHRoZSBtYWNyb3MgYW5kIGNvbW1lbnRzIGZvcgorCQkJCSAgV0Zfe0dFVCxTRVR9X0NIQU5ORUwgYWJvdmUuCisKKwkJCSAgICAgICAqLworICAgIHdhdmVmcm9udF9hbnkgX191c2VyICpoZHJwdHI7ICAgICAgLyogdXNlci1zcGFjZSBwdHIgdG8gaGRyIGJ5dGVzICovCisgICAgVUlOVDE2IF9fdXNlciAqZGF0YXB0cjsgICAgICAgICAgICAvKiBhY3R1YWwgc2FtcGxlIGRhdGEgKi8KKworICAgIHdhdmVmcm9udF9hbnkgaGRyOyAgICAgICAgICAvKiBrZXJuZWwtc3BhY2UgY29weSBvZiBoZHIgYnl0ZXMgKi8gICAgICAgICAKK30gd2F2ZWZyb250X3BhdGNoX2luZm87CisKKy8qIFRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyB3ZSB3aWxsIGV2ZXIgbW92ZSB0byBvciBmcm9tIHVzZXIgc3BhY2UKKyAgIGluIHJlc3BvbnNlIHRvIGEgV0ZDXyogY29tbWFuZC4gIFRoaXMgb2J2aW91c2x5IGRvZXNuJ3QgY292ZXIKKyAgIGFjdHVhbCBzYW1wbGUgZGF0YS4KKyovCisKKyNkZWZpbmUgV0ZfTUFYX1JFQUQgc2l6ZW9mKHdhdmVmcm9udF9tdWx0aXNhbXBsZSkKKyNkZWZpbmUgV0ZfTUFYX1dSSVRFIHNpemVvZih3YXZlZnJvbnRfbXVsdGlzYW1wbGUpCisKKy8qCisgICBUaGlzIGFsbG93cyB1cyB0byBleGVjdXRlIGFueSBXRiBjb21tYW5kIGV4Y2VwdCB0aGUgZG93bmxvYWQvdXBsb2FkCisgICBvbmVzLCB3aGljaCBhcmUgaGFuZGxlZCBkaWZmZXJlbnRseSBkdWUgdG8gY29weWluL2NvcHlvdXQgaXNzdWVzIGFzCisgICB3ZWxsIGFzIGRhdGEtbnliYmxpbmcgdG8vZnJvbSB0aGUgY2FyZC4KKyAqLworCit0eXBlZGVmIHN0cnVjdCB3YXZlZnJvbnRfY29udHJvbCB7CisgICAgaW50IGNtZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXRkNfKiAqLworICAgIGNoYXIgc3RhdHVzOyAgICAgICAgICAgICAgICAgICAgICAgLyogcmV0dXJuIHN0YXR1cyB0byB1c2VyLXNwYWNlICovCisgICAgdW5zaWduZWQgY2hhciByYnVmW1dGX01BWF9SRUFEXTsgICAvKiBieXRlcyByZWFkIGZyb20gY2FyZCAqLworICAgIHVuc2lnbmVkIGNoYXIgd2J1ZltXRl9NQVhfV1JJVEVdOyAgLyogYnl0ZXMgd3JpdHRlbiB0byBjYXJkICovCit9IHdhdmVmcm9udF9jb250cm9sOworCisjZGVmaW5lIFdGQ1RMX1dGQ01EICAgIDB4MQorI2RlZmluZSBXRkNUTF9MT0FEX1NQUCAweDIKKworLyogTW9kdWxhdG9yIHRhYmxlICovCisKKyNkZWZpbmUgV0ZfTU9EX0xGTzEgICAgICAwCisjZGVmaW5lIFdGX01PRF9MRk8yICAgICAgMQorI2RlZmluZSBXRl9NT0RfRU5WMSAgICAgIDIKKyNkZWZpbmUgV0ZfTU9EX0VOVjIgICAgICAzCisjZGVmaW5lIFdGX01PRF9LRVlCT0FSRCAgNAorI2RlZmluZSBXRl9NT0RfTE9HS0VZICAgIDUKKyNkZWZpbmUgV0ZfTU9EX1ZFTE9DSVRZICA2CisjZGVmaW5lIFdGX01PRF9MT0dWRUwgICAgNworI2RlZmluZSBXRl9NT0RfUkFORE9NICAgIDgKKyNkZWZpbmUgV0ZfTU9EX1BSRVNTVVJFICA5CisjZGVmaW5lIFdGX01PRF9NT0RfV0hFRUwgMTAKKyNkZWZpbmUgV0ZfTU9EXzEgICAgICAgICBXRl9NT0RfTU9EX1dIRUVMIAorI2RlZmluZSBXRl9NT0RfQlJFQVRIICAgIDExCisjZGVmaW5lIFdGX01PRF8yICAgICAgICAgV0ZfTU9EX0JSRUFUSAorI2RlZmluZSBXRl9NT0RfRk9PVCAgICAgIDEyCisjZGVmaW5lIFdGX01PRF80ICAgICAgICAgV0ZfTU9EX0ZPT1QKKyNkZWZpbmUgV0ZfTU9EX1ZPTFVNRSAgICAxMworI2RlZmluZSBXRl9NT0RfNyAgICAgICAgIFdGX01PRF9WT0xVTUUKKyNkZWZpbmUgV0ZfTU9EX1BBTiAgICAgICAxNAorI2RlZmluZSBXRl9NT0RfMTAgICAgICAgIFdGX01PRF9QQU4KKyNkZWZpbmUgV0ZfTU9EX0VYUFIgICAgICAxNQorI2RlZmluZSBXRl9NT0RfMTEgICAgICAgIFdGX01PRF9FWFBSCisKKy8qIEZYLXJlbGF0ZWQgbWF0ZXJpYWwgKi8KKwordHlwZWRlZiBzdHJ1Y3Qgd2ZfZnhfaW5mbyB7CisgICAgaW50IHJlcXVlc3Q7ICAgICAgICAgICAgIC8qIHNlZSBsaXN0IGJlbG93ICovCisgICAgaW50IGRhdGFbNF07ICAgICAgICAgICAgIC8qIHdlIGRvbid0IG5lZWQgbXVjaCAqLworfSB3YXZlZnJvbnRfZnhfaW5mbzsKKworLyogc3VwcG9ydCBmb3IgZWFjaCBvZiB0aGVzZSB3aWxsIGJlIGZvcnRoY29taW5nIG9uY2UgSSBvciBzb21lb25lIAorICAgZWxzZSBoYXMgZmlndXJlZCBvdXQgd2hpY2ggb2YgdGhlIGFkZHJlc3NlcyBvbiBwYWdlIDYgYW5kIHBhZ2UgNyBvZiAKKyAgIHRoZSBZU1MyMjUgY29udHJvbCBlYWNoIHBhcmFtZXRlci4gSW5jaWRlbnRhbGx5LCB0aGVzZSBjb21lIGZyb20KKyAgIHRoZSBXaW5kb3dzIGRyaXZlciBpbnRlcmZhY2UsIGJ1dCBhZ2FpbiwgVHVydGxlIEJlYWNoIGRpZG4ndAorICAgZG9jdW1lbnQgdGhlIEFQSSB0byB1c2UgdGhlbS4KKyovCisKKyNkZWZpbmUgV0ZGWF9TRVRPVVRHQUlOCQkgICAgICAgIDAKKyNkZWZpbmUgV0ZGWF9TRVRTVEVSRU9PVVRHQUlOCQkxCisjZGVmaW5lIFdGRlhfU0VUUkVWRVJCSU4xR0FJTgkJMgorI2RlZmluZSBXRkZYX1NFVFJFVkVSQklOMkdBSU4JCTMKKyNkZWZpbmUgV0ZGWF9TRVRSRVZFUkJJTjNHQUlOCQk0CisjZGVmaW5lIFdGRlhfU0VUQ0hPUlVTSU5QT1JUCQk1CisjZGVmaW5lIFdGRlhfU0VUUkVWRVJCSU4xUE9SVAkJNgorI2RlZmluZSBXRkZYX1NFVFJFVkVSQklOMlBPUlQJCTcKKyNkZWZpbmUgV0ZGWF9TRVRSRVZFUkJJTjNQT1JUCQk4CisjZGVmaW5lIFdGRlhfU0VURUZGRUNUUE9SVAkJOQorI2RlZmluZSBXRkZYX1NFVEFVWFBPUlQJCSAgICAgICAgMTAKKyNkZWZpbmUgV0ZGWF9TRVRSRVZFUkJUWVBFCQkxMQorI2RlZmluZSBXRkZYX1NFVFJFVkVSQkRFTEFZCQkxMgorI2RlZmluZSBXRkZYX1NFVENIT1JVU0xGTwkJMTMKKyNkZWZpbmUgV0ZGWF9TRVRDSE9SVVNQTUQJCTE0CisjZGVmaW5lIFdGRlhfU0VUQ0hPUlVTQU1ECQkxNQorI2RlZmluZSBXRkZYX1NFVEVGRkVDVAkJICAgICAgICAxNgorI2RlZmluZSBXRkZYX1NFVEJBU0VBTEwJCSAgICAgICAgMTcKKyNkZWZpbmUgV0ZGWF9TRVRSRVZFUkJBTEwJCTE4CisjZGVmaW5lIFdGRlhfU0VUQ0hPUlVTQUxMCQkyMAorI2RlZmluZSBXRkZYX1NFVFJFVkVSQkRFRgkJMjIKKyNkZWZpbmUgV0ZGWF9TRVRDSE9SVVNERUYJCTIzCisjZGVmaW5lIFdGRlhfREVMQVlTRVRJTkdBSU4JCTI0CisjZGVmaW5lIFdGRlhfREVMQVlTRVRGQkdBSU4JICAgICAgICAyNQorI2RlZmluZSBXRkZYX0RFTEFZU0VURkJMUEYJCTI2CisjZGVmaW5lIFdGRlhfREVMQVlTRVRHQUlOCQkyNworI2RlZmluZSBXRkZYX0RFTEFZU0VUVElNRQkJMjgKKyNkZWZpbmUgV0ZGWF9ERUxBWVNFVEZCVElNRQkJMjkKKyNkZWZpbmUgV0ZGWF9ERUxBWVNFVEFMTAkJMzAKKyNkZWZpbmUgV0ZGWF9ERUxBWVNFVERFRgkJMzIKKyNkZWZpbmUgV0ZGWF9TREVMQVlTRVRJTkdBSU4JCTMzCisjZGVmaW5lIFdGRlhfU0RFTEFZU0VURkJHQUlOCQkzNAorI2RlZmluZSBXRkZYX1NERUxBWVNFVEZCTFBGCQkzNQorI2RlZmluZSBXRkZYX1NERUxBWVNFVEdBSU4JCTM2CisjZGVmaW5lIFdGRlhfU0RFTEFZU0VUVElNRQkJMzcKKyNkZWZpbmUgV0ZGWF9TREVMQVlTRVRGQlRJTUUJCTM4CisjZGVmaW5lIFdGRlhfU0RFTEFZU0VUQUxMCQkzOQorI2RlZmluZSBXRkZYX1NERUxBWVNFVERFRgkJNDEKKyNkZWZpbmUgV0ZGWF9ERVFTRVRJTkdBSU4JCTQyCisjZGVmaW5lIFdGRlhfREVRU0VURklMVEVSCQk0MworI2RlZmluZSBXRkZYX0RFUVNFVEFMTAkJICAgICAgICA0NAorI2RlZmluZSBXRkZYX0RFUVNFVERFRgkJICAgICAgICA0NgorI2RlZmluZSBXRkZYX01VVEUJCSAgICAgICAgNDcKKyNkZWZpbmUgV0ZGWF9GTEFOR0VTRVRCQUxBTkNFCSAgICAgICAgNDgJCisjZGVmaW5lIFdGRlhfRkxBTkdFU0VUREVMQVkJCTQ5CisjZGVmaW5lIFdGRlhfRkxBTkdFU0VURFdGRlhfVEgJCTUwCisjZGVmaW5lIFdGRlhfRkxBTkdFU0VURkJHQUlOCQk1MQorI2RlZmluZSBXRkZYX0ZMQU5HRVNFVElOR0FJTgkJNTIKKyNkZWZpbmUgV0ZGWF9GTEFOR0VTRVRMRk8JCTUzCisjZGVmaW5lIFdGRlhfRkxBTkdFU0VUQUxMCQk1NAorI2RlZmluZSBXRkZYX0ZMQU5HRVNFVERFRgkJNTYKKyNkZWZpbmUgV0ZGWF9QSVRDSFNFVFNISUZUCQk1NworI2RlZmluZSBXRkZYX1BJVENIU0VUQkFMQU5DRQkJNTgKKyNkZWZpbmUgV0ZGWF9QSVRDSFNFVEFMTAkJNTkKKyNkZWZpbmUgV0ZGWF9QSVRDSFNFVERFRgkJNjEKKyNkZWZpbmUgV0ZGWF9TUlNTRVRJTkdBSU4JCTYyCisjZGVmaW5lIFdGRlhfU1JTU0VUU1BBQ0UJCTYzCisjZGVmaW5lIFdGRlhfU1JTU0VUQ0VOVEVSCQk2NAorI2RlZmluZSBXRkZYX1NSU1NFVEdBSU4JCSAgICAgICAgNjUKKyNkZWZpbmUgV0ZGWF9TUlNTRVRNT0RFCSAgICAgICAgCTY2CisjZGVmaW5lIFdGRlhfU1JTU0VUREVGCQkgICAgICAgIDY4CisKKy8qIEFsbG93IGRpcmVjdCB1c2VyLXNwYWNlIGNvbnRyb2wgb3ZlciBGWCBtZW1vcnkvY29lZmZpY2llbnQgZGF0YS4KKyAgIEluIHRoZW9yeSB0aGlzIGNvdWxkIGJlIHVzZWQgdG8gZG93bmxvYWQgdGhlIEZYIG1pY3JvcHJvZ3JhbSwKKyAgIGJ1dCBpdCB3b3VsZCBiZSBhIGxpdHRsZSBzbG93ZXIsIGFuZCBpbnZvbHZlIHNvbWUgd2VpcmQgY29kZS4KKyAqLworCisjZGVmaW5lIFdGRlhfTUVNU0VUICAgICAgICAgICAgICA2OQorCisjZW5kaWYgLyogX193YXZlZnJvbnRfaF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3dpcmVsZXNzLmggYi9pbmNsdWRlL2xpbnV4L3dpcmVsZXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY1MWYyYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvd2lyZWxlc3MuaApAQCAtMCwwICsxLDc3MyBAQAorLyoKKyAqIFRoaXMgZmlsZSBkZWZpbmUgYSBzZXQgb2Ygc3RhbmRhcmQgd2lyZWxlc3MgZXh0ZW5zaW9ucworICoKKyAqIFZlcnNpb24gOgkxNwkyMS42LjA0CisgKgorICogQXV0aG9ycyA6CUplYW4gVG91cnJpbGhlcyAtIEhQTCAtIDxqdEBocGwuaHAuY29tPgorICogQ29weXJpZ2h0IChjKSAxOTk3LTIwMDQgSmVhbiBUb3VycmlsaGVzLCBBbGwgUmlnaHRzIFJlc2VydmVkLgorICovCisKKyNpZm5kZWYgX0xJTlVYX1dJUkVMRVNTX0gKKyNkZWZpbmUgX0xJTlVYX1dJUkVMRVNTX0gKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqIERPQ1VNRU5UQVRJT04gKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogSW5pdGlhbCBBUElzICgxOTk2IC0+IG9ud2FyZCkgOgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEJhc2ljYWxseSwgdGhlIHdpcmVsZXNzIGV4dGVuc2lvbnMgYXJlIGZvciBub3cgYSBzZXQgb2Ygc3RhbmRhcmQgaW9jdGwKKyAqIGNhbGwgKyAvcHJvYy9uZXQvd2lyZWxlc3MKKyAqCisgKiBUaGUgZW50cnkgL3Byb2MvbmV0L3dpcmVsZXNzIGdpdmUgc3RhdGlzdGljcyBhbmQgaW5mb3JtYXRpb24gb24gdGhlCisgKiBkcml2ZXIuCisgKiBUaGlzIGlzIGJldHRlciB0aGFuIGhhdmluZyBlYWNoIGRyaXZlciBoYXZpbmcgaXRzIGVudHJ5IGJlY2F1c2UKKyAqIGl0cyBjZW50cmFsaXNlZCBhbmQgd2UgbWF5IHJlbW92ZSB0aGUgZHJpdmVyIG1vZHVsZSBzYWZlbHkuCisgKgorICogSW9jdGwgYXJlIHVzZWQgdG8gY29uZmlndXJlIHRoZSBkcml2ZXIgYW5kIGlzc3VlIGNvbW1hbmRzLiAgVGhpcyBpcworICogYmV0dGVyIHRoYW4gY29tbWFuZCBsaW5lIG9wdGlvbnMgb2YgaW5zbW9kIGJlY2F1c2Ugd2UgbWF5IHdhbnQgdG8KKyAqIGNoYW5nZSBkeW5hbWljYWxseSAod2hpbGUgdGhlIGRyaXZlciBpcyBydW5uaW5nKSBzb21lIHBhcmFtZXRlcnMuCisgKgorICogVGhlIGlvY3RsIG1lY2hhbmltc20gYXJlIGNvcGllZCBmcm9tIHN0YW5kYXJkIGRldmljZXMgaW9jdGwuCisgKiBXZSBoYXZlIHRoZSBsaXN0IG9mIGNvbW1hbmQgcGx1cyBhIHN0cnVjdHVyZSBkZXNjaWJpbmcgdGhlCisgKiBkYXRhIGV4Y2hhbmdlZC4uLgorICogTm90ZSB0aGF0IHRvIGFkZCB0aGVzZSBpb2N0bCwgSSB3YXMgb2JsaWdlZCB0byBtb2RpZnkgOgorICoJIyBuZXQvY29yZS9kZXYuYyAodHdvIHBsYWNlICsgYWRkIGluY2x1ZGUpCisgKgkjIG5ldC9pcHY0L2FmX2luZXQuYyAob25lIHBsYWNlICsgYWRkIGluY2x1ZGUpCisgKgorICogL3Byb2MvbmV0L3dpcmVsZXNzIGlzIGEgY29weSBvZiAvcHJvYy9uZXQvZGV2LgorICogV2UgaGF2ZSBhIHN0cnVjdHVyZSBmb3IgZGF0YSBwYXNzZWQgZnJvbSB0aGUgZHJpdmVyIHRvIC9wcm9jL25ldC93aXJlbGVzcworICogVG9vIGFkZCB0aGlzLCBJJ3ZlIG1vZGlmaWVkIDoKKyAqCSMgbmV0L2NvcmUvZGV2LmMgKHR3byBvdGhlciBwbGFjZXMpCisgKgkjIGluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggKG9uZSBwbGFjZSkKKyAqCSMgaW5jbHVkZS9saW51eC9wcm9jX2ZzLmggKG9uZSBwbGFjZSkKKyAqCisgKiBOZXcgZHJpdmVyIEFQSSAoMjAwMiAtPiBvbndhcmQpIDoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFRoaXMgZmlsZSBpcyBvbmx5IGNvbmNlcm5lZCB3aXRoIHRoZSB1c2VyIHNwYWNlIEFQSSBhbmQgY29tbW9uIGRlZmluaXRpb25zLgorICogVGhlIG5ldyBkcml2ZXIgQVBJIGlzIGRlZmluZWQgYW5kIGRvY3VtZW50ZWQgaW4gOgorICoJIyBpbmNsdWRlL25ldC9pd19oYW5kbGVyLmgKKyAqCisgKiBOb3RlIGFzIHdlbGwgdGhhdCAvcHJvYy9uZXQvd2lyZWxlc3MgaW1wbGVtZW50YXRpb24gaGFzIG5vdyBtb3ZlZCBpbiA6CisgKgkjIG5ldC9jb3JlL3dpcmVsZXNzLmMKKyAqCisgKiBXaXJlbGVzcyBFdmVudHMgKDIwMDIgLT4gb253YXJkKSA6CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRXZlbnRzIGFyZSBkZWZpbmVkIGF0IHRoZSBlbmQgb2YgdGhpcyBmaWxlLCBhbmQgaW1wbGVtZW50ZWQgaW4gOgorICoJIyBuZXQvY29yZS93aXJlbGVzcy5jCisgKgorICogT3RoZXIgY29tbWVudHMgOgorICogLS0tLS0tLS0tLS0tLS0KKyAqIERvIG5vdCBhZGQgaGVyZSB0aGluZ3MgdGhhdCBhcmUgcmVkdW5kYW50IHdpdGggb3RoZXIgbWVjaGFuaXNtcworICogKGRyaXZlcnMgaW5pdCwgaWZjb25maWcsIC9wcm9jL25ldC9kZXYsIC4uLikgYW5kIHdpdGggYXJlIG5vdAorICogd2lyZWxlc3Mgc3BlY2lmaWMuCisgKgorICogVGhlc2Ugd2lyZWxlc3MgZXh0ZW5zaW9ucyBhcmUgbm90IG1hZ2ljIDogZWFjaCBkcml2ZXIgaGFzIHRvIHByb3ZpZGUKKyAqIHN1cHBvcnQgZm9yIHRoZW0uLi4KKyAqCisgKiBJTVBPUlRBTlQgTk9URSA6IEFzIGV2ZXJ5dGhpbmcgaW4gdGhlIGtlcm5lbCwgdGhpcyBpcyB2ZXJ5IG11Y2ggYQorICogd29yayBpbiBwcm9ncmVzcy4gQ29udGFjdCBtZSBpZiB5b3UgaGF2ZSBpZGVhcyBvZiBpbXByb3ZlbWVudHMuLi4KKyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogSU5DTFVERVMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFRvIG1pbmltaXNlIHByb2JsZW1zIGluIHVzZXIgc3BhY2UsIEkgbWlnaHQgcmVtb3ZlIHRob3NlIGhlYWRlcnMKKyAqIGF0IHNvbWUgcG9pbnQuIEplYW4gSUkgKi8KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgkJLyogZm9yICJjYWRkcl90IiBldCBhbAkJKi8KKyNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4JCS8qIGZvciAic3RydWN0IHNvY2thZGRyIiBldCBhbAkqLworI2luY2x1ZGUgPGxpbnV4L2lmLmg+CQkJLyogZm9yIElGTkFNU0laIGFuZCBjby4uLiAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogVkVSU0lPTiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBUaGlzIGNvbnN0YW50IGlzIHVzZWQgdG8ga25vdyB0aGUgYXZhaWxhYmlsaXR5IG9mIHRoZSB3aXJlbGVzcworICogZXh0ZW5zaW9ucyBhbmQgdG8ga25vdyB3aGljaCB2ZXJzaW9uIG9mIHdpcmVsZXNzIGV4dGVuc2lvbnMgaXQgaXMKKyAqICh0aGVyZSBpcyBzb21lIHN0dWZmIHRoYXQgd2lsbCBiZSBhZGRlZCBpbiB0aGUgZnV0dXJlLi4uKQorICogSSBqdXN0IHBsYW4gdG8gaW5jcmVtZW50IHdpdGggZWFjaCBuZXcgdmVyc2lvbi4KKyAqLworI2RlZmluZSBXSVJFTEVTU19FWFQJMTcKKworLyoKKyAqIENoYW5nZXMgOgorICoKKyAqIFYyIHRvIFYzCisgKiAtLS0tLS0tLQorICoJQWxhbiBDb3ggc3RhcnQgc29tZSBpbmNvbXBhdGlibGVzIGNoYW5nZXMuIEkndmUgaW50ZWdyYXRlZCBhIGJpdCBtb3JlLgorICoJLSBFbmNyeXB0aW9uIHJlbmFtZWQgdG8gRW5jb2RlIHRvIGF2b2lkIFVTIHJlZ3VsYXRpb24gcHJvYmxlbXMKKyAqCS0gRnJlcXVlbmN5IGNoYW5nZWQgZnJvbSBmbG9hdCB0byBzdHJ1Y3QgdG8gYXZvaWQgcHJvYmxlbXMgb24gb2xkIDM4NgorICoKKyAqIFYzIHRvIFY0CisgKiAtLS0tLS0tLQorICoJLSBBZGQgc2Vuc2l0aXZpdHkKKyAqCisgKiBWNCB0byBWNQorICogLS0tLS0tLS0KKyAqCS0gTWlzc2luZyBlbmNvZGluZyBkZWZpbml0aW9ucyBpbiByYW5nZQorICoJLSBBY2Nlc3MgcG9pbnRzIHN0dWZmCisgKgorICogVjUgdG8gVjYKKyAqIC0tLS0tLS0tCisgKgktIDgwMi4xMSBzdXBwb3J0IChFU1NJRCBpb2N0bHMpCisgKgorICogVjYgdG8gVjcKKyAqIC0tLS0tLS0tCisgKgktIGRlZmluZSBJV19FU1NJRF9NQVhfU0laRSBhbmQgSVdfTUFYX0FQCisgKgorICogVjcgdG8gVjgKKyAqIC0tLS0tLS0tCisgKgktIENoYW5nZWQgbXkgZS1tYWlsIGFkZHJlc3MKKyAqCS0gTW9yZSA4MDIuMTEgc3VwcG9ydCAobmlja25hbWUsIHJhdGUsIHJ0cywgZnJhZykKKyAqCS0gTGlzdCBpbmRleCBpbiBmcmVxdWVuY2llcworICoKKyAqIFY4IHRvIFY5CisgKiAtLS0tLS0tLQorICoJLSBTdXBwb3J0IGZvciAnbW9kZSBvZiBvcGVyYXRpb24nIChhZC1ob2MsIG1hbmFnZWQuLi4pCisgKgktIFN1cHBvcnQgZm9yIHVuaWNhc3QgYW5kIG11bHRpY2FzdCBwb3dlciBzYXZpbmcKKyAqCS0gQ2hhbmdlIGVuY29kaW5nIHRvIHN1cHBvcnQgbGFyZ2VyIHRva2VucyAoPjY0IGJpdHMpCisgKgktIFVwZGF0ZWQgaXdfcGFyYW1zIChkaXNhYmxlLCBmbGFncykgYW5kIHVzZSBpdCBmb3IgTldJRAorICoJLSBFeHRyYWN0ZWQgaXdfcG9pbnQgZnJvbSBpd3JlcSBmb3IgY2xhcml0eQorICoKKyAqIFY5IHRvIFYxMAorICogLS0tLS0tLS0tCisgKgktIEFkZCBQTSBjYXBhYmlsaXR5IHRvIHJhbmdlIHN0cnVjdHVyZQorICoJLSBBZGQgUE0gbW9kaWZpZXIgOiBNQVgvTUlOL1JFTEFUSVZFCisgKgktIEFkZCBlbmNvZGluZyBvcHRpb24gOiBJV19FTkNPREVfTk9LRVkKKyAqCS0gQWRkIFR4UG93ZXIgaW9jdGxzICh3b3JrIGxpa2UgVHhSYXRlKQorICoKKyAqIFYxMCB0byBWMTEKKyAqIC0tLS0tLS0tLS0KKyAqCS0gQWRkIFdFIHZlcnNpb24gaW4gcmFuZ2UgKGhlbHAgYmFja3dhcmQvZm9yd2FyZCBjb21wYXRpYmlsaXR5KQorICoJLSBBZGQgcmV0cnkgaW9jdGxzICh3b3JrIGxpa2UgUE0pCisgKgorICogVjExIHRvIFYxMgorICogLS0tLS0tLS0tLQorICoJLSBBZGQgU0lPQ1NJV1NUQVRTIHRvIGdldCAvcHJvYy9uZXQvd2lyZWxlc3MgcHJvZ3JhbWF0aWNhbGx5CisgKgktIEFkZCBERVYgUFJJVkFURSBJT0NUTCB0byBhdm9pZCBjb2xsaXNpb25zIGluIFNJT0NERVZQUklWQVRFIHNwYWNlCisgKgktIEFkZCBuZXcgc3RhdGlzdGljcyAoZnJhZywgcmV0cnksIGJlYWNvbikKKyAqCS0gQWRkIGF2ZXJhZ2UgcXVhbGl0eSAoZm9yIHVzZXIgc3BhY2UgY2FsaWJyYXRpb24pCisgKgorICogVjEyIHRvIFYxMworICogLS0tLS0tLS0tLQorICoJLSBEb2N1bWVudCBjcmVhdGlvbiBvZiBuZXcgZHJpdmVyIEFQSS4KKyAqCS0gRXh0cmFjdCB1bmlvbiBpd3JlcV9kYXRhIGZyb20gc3RydWN0IGl3cmVxIChmb3IgbmV3IGRyaXZlciBBUEkpLgorICoJLSBSZW5hbWUgU0lPQ1NJV05BTUUgYXMgU0lPQ1NJV0NPTU1JVAorICoKKyAqIFYxMyB0byBWMTQKKyAqIC0tLS0tLS0tLS0KKyAqCS0gV2lyZWxlc3MgRXZlbnRzIHN1cHBvcnQgOiBkZWZpbmUgc3RydWN0IGl3X2V2ZW50CisgKgktIERlZmluZSBhZGRpdGlvbmFsIHNwZWNpZmljIGV2ZW50IG51bWJlcnMKKyAqCS0gQWRkICJhZGRyIiBhbmQgInBhcmFtIiBmaWVsZHMgaW4gdW5pb24gaXdyZXFfZGF0YQorICoJLSBBUCBzY2FubmluZyBzdHVmZiAoU0lPQ1NJV1NDQU4gYW5kIGZyaWVuZHMpCisgKgorICogVjE0IHRvIFYxNQorICogLS0tLS0tLS0tLQorICoJLSBBZGQgSVdfUFJJVl9UWVBFX0FERFIgZm9yIHN0cnVjdCBzb2NrYWRkciBwcml2YXRlIGFyZworICoJLSBNYWtlIHN0cnVjdCBpd19mcmVxIHNpZ25lZCAoYm90aCBtICYgZSksIGFkZCBleHBsaWNpdCBwYWRkaW5nCisgKgktIEFkZCBJV0VWQ1VTVE9NIGZvciBkcml2ZXIgc3BlY2lmaWMgZXZlbnQvc2Nhbm5pbmcgdG9rZW4KKyAqCS0gQWRkIElXX01BWF9HRVRfU1BZIGZvciBkcml2ZXIgcmV0dXJuaW5nIGEgbG90IG9mIGFkZHJlc3NlcworICoJLSBBZGQgSVdfVFhQT1dfUkFOR0UgZm9yIHJhbmdlIG9mIFR4IFBvd2VycworICoJLSBBZGQgSVdFVlJFR0lTVEVSRUQgJiBJV0VWRVhQSVJFRCBldmVudHMgZm9yIEFjY2VzcyBQb2ludHMKKyAqCS0gQWRkIElXX01PREVfTU9OSVRPUiBmb3IgcGFzc2l2ZSBtb25pdG9yCisgKgorICogVjE1IHRvIFYxNgorICogLS0tLS0tLS0tLQorICoJLSBJbmNyZWFzZSB0aGUgbnVtYmVyIG9mIGJpdHJhdGVzIGluIGl3X3JhbmdlIHRvIDMyIChmb3IgODAyLjExZykKKyAqCS0gSW5jcmVhc2UgdGhlIG51bWJlciBvZiBmcmVxdWVuY2llcyBpbiBpd19yYW5nZSB0byAzMiAoZm9yIDgwMi4xMWIrYSkKKyAqCS0gUmVzaHVmZmxlIHN0cnVjdCBpd19yYW5nZSBmb3IgaW5jcmVhc2VzLCBhZGQgZmlsbGVyCisgKgktIEluY3JlYXNlIElXX01BWF9BUCB0byA2NCBmb3IgZHJpdmVyIHJldHVybmluZyBhIGxvdCBvZiBhZGRyZXNzZXMKKyAqCS0gUmVtb3ZlIElXX01BWF9HRVRfU1BZIGJlY2F1c2UgY29uZmxpY3Qgd2l0aCBlbmhhbmNlZCBzcHkgc3VwcG9ydAorICoJLSBBZGQgU0lPQ1NJV1RIUlNQWS9TSU9DR0lXVEhSU1BZIGFuZCAic3RydWN0IGl3X3RocnNweSIKKyAqCS0gQWRkIElXX0VOQ09ERV9URU1QIGFuZCBpd19yYW5nZS0+ZW5jb2RpbmdfbG9naW5faW5kZXgKKyAqCisgKiBWMTYgdG8gVjE3CisgKiAtLS0tLS0tLS0tCisgKgktIEFkZCBmbGFncyB0byBmcmVxdWVuY3kgLT4gYXV0by9maXhlZAorICoJLSBEb2N1bWVudCAoc3RydWN0IGl3X3F1YWxpdHkgKiktPnVwZGF0ZWQsIGFkZCBuZXcgZmxhZ3MgKElOVkFMSUQpCisgKgktIFdpcmVsZXNzIEV2ZW50IGNhcGFiaWxpdHkgaW4gc3RydWN0IGl3X3JhbmdlCisgKgktIEFkZCBzdXBwb3J0IGZvciByZWxhdGl2ZSBUeFBvd2VyICh5aWNrICEpCisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiogQ09OU1RBTlRTICoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIElPQ1RMIExJU1QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogV2lyZWxlc3MgSWRlbnRpZmljYXRpb24gKi8KKyNkZWZpbmUgU0lPQ1NJV0NPTU1JVAkweDhCMDAJCS8qIENvbW1pdCBwZW5kaW5nIGNoYW5nZXMgdG8gZHJpdmVyICovCisjZGVmaW5lIFNJT0NHSVdOQU1FCTB4OEIwMQkJLyogZ2V0IG5hbWUgPT0gd2lyZWxlc3MgcHJvdG9jb2wgKi8KKy8qIFNJT0NHSVdOQU1FIGlzIHVzZWQgdG8gdmVyaWZ5IHRoZSBwcmVzZW5jZSBvZiBXaXJlbGVzcyBFeHRlbnNpb25zLgorICogQ29tbW9uIHZhbHVlcyA6ICJJRUVFIDgwMi4xMS1EUyIsICJJRUVFIDgwMi4xMS1GSCIsICJJRUVFIDgwMi4xMWIiLi4uCisgKiBEb24ndCBwdXQgdGhlIG5hbWUgb2YgeW91ciBkcml2ZXIgdGhlcmUsIGl0J3MgdXNlbGVzcy4gKi8KKworLyogQmFzaWMgb3BlcmF0aW9ucyAqLworI2RlZmluZSBTSU9DU0lXTldJRAkweDhCMDIJCS8qIHNldCBuZXR3b3JrIGlkIChwcmUtODAyLjExKSAqLworI2RlZmluZSBTSU9DR0lXTldJRAkweDhCMDMJCS8qIGdldCBuZXR3b3JrIGlkICh0aGUgY2VsbCkgKi8KKyNkZWZpbmUgU0lPQ1NJV0ZSRVEJMHg4QjA0CQkvKiBzZXQgY2hhbm5lbC9mcmVxdWVuY3kgKEh6KSAqLworI2RlZmluZSBTSU9DR0lXRlJFUQkweDhCMDUJCS8qIGdldCBjaGFubmVsL2ZyZXF1ZW5jeSAoSHopICovCisjZGVmaW5lIFNJT0NTSVdNT0RFCTB4OEIwNgkJLyogc2V0IG9wZXJhdGlvbiBtb2RlICovCisjZGVmaW5lIFNJT0NHSVdNT0RFCTB4OEIwNwkJLyogZ2V0IG9wZXJhdGlvbiBtb2RlICovCisjZGVmaW5lIFNJT0NTSVdTRU5TCTB4OEIwOAkJLyogc2V0IHNlbnNpdGl2aXR5IChkQm0pICovCisjZGVmaW5lIFNJT0NHSVdTRU5TCTB4OEIwOQkJLyogZ2V0IHNlbnNpdGl2aXR5IChkQm0pICovCisKKy8qIEluZm9ybWF0aXZlIHN0dWZmICovCisjZGVmaW5lIFNJT0NTSVdSQU5HRQkweDhCMEEJCS8qIFVudXNlZCAqLworI2RlZmluZSBTSU9DR0lXUkFOR0UJMHg4QjBCCQkvKiBHZXQgcmFuZ2Ugb2YgcGFyYW1ldGVycyAqLworI2RlZmluZSBTSU9DU0lXUFJJVgkweDhCMEMJCS8qIFVudXNlZCAqLworI2RlZmluZSBTSU9DR0lXUFJJVgkweDhCMEQJCS8qIGdldCBwcml2YXRlIGlvY3RsIGludGVyZmFjZSBpbmZvICovCisjZGVmaW5lIFNJT0NTSVdTVEFUUwkweDhCMEUJCS8qIFVudXNlZCAqLworI2RlZmluZSBTSU9DR0lXU1RBVFMJMHg4QjBGCQkvKiBHZXQgL3Byb2MvbmV0L3dpcmVsZXNzIHN0YXRzICovCisvKiBTSU9DR0lXU1RBVFMgaXMgc3RyaWN0bHkgdXNlZCBiZXR3ZWVuIHVzZXIgc3BhY2UgYW5kIHRoZSBrZXJuZWwsIGFuZAorICogaXMgbmV2ZXIgcGFzc2VkIHRvIHRoZSBkcml2ZXIgKGkuZS4gdGhlIGRyaXZlciB3aWxsIG5ldmVyIHNlZSBpdCkuICovCisKKy8qIFNweSBzdXBwb3J0IChzdGF0aXN0aWNzIHBlciBNQUMgYWRkcmVzcyAtIHVzZWQgZm9yIE1vYmlsZSBJUCBzdXBwb3J0KSAqLworI2RlZmluZSBTSU9DU0lXU1BZCTB4OEIxMAkJLyogc2V0IHNweSBhZGRyZXNzZXMgKi8KKyNkZWZpbmUgU0lPQ0dJV1NQWQkweDhCMTEJCS8qIGdldCBzcHkgaW5mbyAocXVhbGl0eSBvZiBsaW5rKSAqLworI2RlZmluZSBTSU9DU0lXVEhSU1BZCTB4OEIxMgkJLyogc2V0IHNweSB0aHJlc2hvbGQgKHNweSBldmVudCkgKi8KKyNkZWZpbmUgU0lPQ0dJV1RIUlNQWQkweDhCMTMJCS8qIGdldCBzcHkgdGhyZXNob2xkICovCisKKy8qIEFjY2VzcyBQb2ludCBtYW5pcHVsYXRpb24gKi8KKyNkZWZpbmUgU0lPQ1NJV0FQCTB4OEIxNAkJLyogc2V0IGFjY2VzcyBwb2ludCBNQUMgYWRkcmVzc2VzICovCisjZGVmaW5lIFNJT0NHSVdBUAkweDhCMTUJCS8qIGdldCBhY2Nlc3MgcG9pbnQgTUFDIGFkZHJlc3NlcyAqLworI2RlZmluZSBTSU9DR0lXQVBMSVNUCTB4OEIxNwkJLyogRGVwcmVjYXRlZCBpbiBmYXZvciBvZiBzY2FubmluZyAqLworI2RlZmluZSBTSU9DU0lXU0NBTgkweDhCMTgJCS8qIHRyaWdnZXIgc2Nhbm5pbmcgKGxpc3QgY2VsbHMpICovCisjZGVmaW5lIFNJT0NHSVdTQ0FOCTB4OEIxOQkJLyogZ2V0IHNjYW5uaW5nIHJlc3VsdHMgKi8KKworLyogODAyLjExIHNwZWNpZmljIHN1cHBvcnQgKi8KKyNkZWZpbmUgU0lPQ1NJV0VTU0lECTB4OEIxQQkJLyogc2V0IEVTU0lEIChuZXR3b3JrIG5hbWUpICovCisjZGVmaW5lIFNJT0NHSVdFU1NJRAkweDhCMUIJCS8qIGdldCBFU1NJRCAqLworI2RlZmluZSBTSU9DU0lXTklDS04JMHg4QjFDCQkvKiBzZXQgbm9kZSBuYW1lL25pY2tuYW1lICovCisjZGVmaW5lIFNJT0NHSVdOSUNLTgkweDhCMUQJCS8qIGdldCBub2RlIG5hbWUvbmlja25hbWUgKi8KKy8qIEFzIHRoZSBFU1NJRCBhbmQgTklDS04gYXJlIHN0cmluZ3MgdXAgdG8gMzIgYnl0ZXMgbG9uZywgaXQgZG9lc24ndCBmaXQKKyAqIHdpdGhpbiB0aGUgJ2l3cmVxJyBzdHJ1Y3R1cmUsIHNvIHdlIG5lZWQgdG8gdXNlIHRoZSAnZGF0YScgbWVtYmVyIHRvCisgKiBwb2ludCB0byBhIHN0cmluZyBpbiB1c2VyIHNwYWNlLCBsaWtlIGl0IGlzIGRvbmUgZm9yIFJBTkdFLi4uICovCisKKy8qIE90aGVyIHBhcmFtZXRlcnMgdXNlZnVsIGluIDgwMi4xMSBhbmQgc29tZSBvdGhlciBkZXZpY2VzICovCisjZGVmaW5lIFNJT0NTSVdSQVRFCTB4OEIyMAkJLyogc2V0IGRlZmF1bHQgYml0IHJhdGUgKGJwcykgKi8KKyNkZWZpbmUgU0lPQ0dJV1JBVEUJMHg4QjIxCQkvKiBnZXQgZGVmYXVsdCBiaXQgcmF0ZSAoYnBzKSAqLworI2RlZmluZSBTSU9DU0lXUlRTCTB4OEIyMgkJLyogc2V0IFJUUy9DVFMgdGhyZXNob2xkIChieXRlcykgKi8KKyNkZWZpbmUgU0lPQ0dJV1JUUwkweDhCMjMJCS8qIGdldCBSVFMvQ1RTIHRocmVzaG9sZCAoYnl0ZXMpICovCisjZGVmaW5lIFNJT0NTSVdGUkFHCTB4OEIyNAkJLyogc2V0IGZyYWdtZW50YXRpb24gdGhyIChieXRlcykgKi8KKyNkZWZpbmUgU0lPQ0dJV0ZSQUcJMHg4QjI1CQkvKiBnZXQgZnJhZ21lbnRhdGlvbiB0aHIgKGJ5dGVzKSAqLworI2RlZmluZSBTSU9DU0lXVFhQT1cJMHg4QjI2CQkvKiBzZXQgdHJhbnNtaXQgcG93ZXIgKGRCbSkgKi8KKyNkZWZpbmUgU0lPQ0dJV1RYUE9XCTB4OEIyNwkJLyogZ2V0IHRyYW5zbWl0IHBvd2VyIChkQm0pICovCisjZGVmaW5lIFNJT0NTSVdSRVRSWQkweDhCMjgJCS8qIHNldCByZXRyeSBsaW1pdHMgYW5kIGxpZmV0aW1lICovCisjZGVmaW5lIFNJT0NHSVdSRVRSWQkweDhCMjkJCS8qIGdldCByZXRyeSBsaW1pdHMgYW5kIGxpZmV0aW1lICovCisKKy8qIEVuY29kaW5nIHN0dWZmIChzY3JhbWJsaW5nLCBoYXJkd2FyZSBzZWN1cml0eSwgV0VQLi4uKSAqLworI2RlZmluZSBTSU9DU0lXRU5DT0RFCTB4OEIyQQkJLyogc2V0IGVuY29kaW5nIHRva2VuICYgbW9kZSAqLworI2RlZmluZSBTSU9DR0lXRU5DT0RFCTB4OEIyQgkJLyogZ2V0IGVuY29kaW5nIHRva2VuICYgbW9kZSAqLworLyogUG93ZXIgc2F2aW5nIHN0dWZmIChwb3dlciBtYW5hZ2VtZW50LCB1bmljYXN0IGFuZCBtdWx0aWNhc3QpICovCisjZGVmaW5lIFNJT0NTSVdQT1dFUgkweDhCMkMJCS8qIHNldCBQb3dlciBNYW5hZ2VtZW50IHNldHRpbmdzICovCisjZGVmaW5lIFNJT0NHSVdQT1dFUgkweDhCMkQJCS8qIGdldCBQb3dlciBNYW5hZ2VtZW50IHNldHRpbmdzICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tIERFViBQUklWQVRFIElPQ1RMIExJU1QgLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogVGhlc2UgMzIgaW9jdGwgYXJlIHdpcmVsZXNzIGRldmljZSBwcml2YXRlLCBmb3IgMTYgY29tbWFuZHMuCisgKiBFYWNoIGRyaXZlciBpcyBmcmVlIHRvIHVzZSB0aGVtIGZvciB3aGF0ZXZlciBwdXJwb3NlIGl0IGNob29zZXMsCisgKiBob3dldmVyIHRoZSBkcml2ZXIgKm11c3QqIGV4cG9ydCB0aGUgZGVzY3JpcHRpb24gb2YgdGhvc2UgaW9jdGxzCisgKiB3aXRoIFNJT0NHSVdQUklWIGFuZCAqbXVzdCogdXNlIGFyZ3VtZW50cyBhcyBkZWZpbmVkIGJlbG93LgorICogSWYgeW91IGRvbid0IGZvbGxvdyB0aG9zZSBydWxlcywgRGF2ZU0gaXMgZ29pbmcgdG8gaGF0ZSB5b3UgKHJlYXNvbiA6CisgKiBpdCBtYWtlIG1peGVkIDMyLzY0Yml0IG9wZXJhdGlvbiBpbXBvc3NpYmxlKS4KKyAqLworI2RlZmluZSBTSU9DSVdGSVJTVFBSSVYJMHg4QkUwCisjZGVmaW5lIFNJT0NJV0xBU1RQUklWCTB4OEJGRgorLyogUHJldmlvdXNseSwgd2Ugd2VyZSB1c2luZyBTSU9DREVWUFJJVkFURSwgYnV0IHdlIG5vdyBoYXZlIG91cgorICogc2VwYXJhdGUgcmFuZ2UgYmVjYXVzZSBvZiBjb2xsaXNpb25zIHdpdGggb3RoZXIgdG9vbHMgc3VjaCBhcworICogJ21paS10b29sJy4KKyAqIFdlIG5vdyBoYXZlIDMyIGNvbW1hbmRzLCBzbyBhIGJpdCBtb3JlIHNwYWNlIDstKS4KKyAqIEFsc28sIGFsbCAnb2RkJyBjb21tYW5kcyBhcmUgb25seSB1c2FibGUgYnkgcm9vdCBhbmQgZG9uJ3QgcmV0dXJuIHRoZQorICogY29udGVudCBvZiBpZnIvaXdyIHRvIHVzZXIgKGJ1dCB5b3UgYXJlIG5vdCBvYmxpZ2VkIHRvIHVzZSB0aGUgc2V0L2dldAorICogY29udmVudGlvbiwganVzdCB1c2UgZXZlcnkgb3RoZXIgdHdvIGNvbW1hbmQpLiBNb3JlIGRldGFpbHMgaW4gaXdwcml2LmMuCisgKiBBbmQgSSByZXBlYXQgOiB5b3UgYXJlIG5vdCBmb3JjZWQgdG8gdXNlIHRoZW0gd2l0aCBpd3ByaXYsIGJ1dCB5b3UKKyAqIG11c3QgYmUgY29tcGxpYW50IHdpdGggaXQuCisgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBJT0NUTCBTVFVGRiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIFRoZSBmaXJzdCBhbmQgdGhlIGxhc3QgKHJhbmdlKSAqLworI2RlZmluZSBTSU9DSVdGSVJTVAkweDhCMDAKKyNkZWZpbmUgU0lPQ0lXTEFTVAlTSU9DSVdMQVNUUFJJVgkJLyogMHg4QkZGICovCisKKy8qIEV2ZW4gOiBnZXQgKHdvcmxkIGFjY2VzcyksIG9kZCA6IHNldCAocm9vdCBhY2Nlc3MpICovCisjZGVmaW5lIElXX0lTX1NFVChjbWQpCSghKChjbWQpICYgMHgxKSkKKyNkZWZpbmUgSVdfSVNfR0VUKGNtZCkJKChjbWQpICYgMHgxKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXSVJFTEVTUyBFVkVOVFMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIFRob3NlIGFyZSAqTk9UKiBpb2N0bHMsIGRvIG5vdCBpc3N1ZSByZXF1ZXN0IG9uIHRoZW0gISEhICovCisvKiBNb3N0IGV2ZW50cyB1c2UgdGhlIHNhbWUgaWRlbnRpZmllciBhcyBpb2N0bCByZXF1ZXN0cyAqLworCisjZGVmaW5lIElXRVZUWERST1AJMHg4QzAwCQkvKiBQYWNrZXQgZHJvcHBlZCB0byBleGNlc3NpdmUgcmV0cnkgKi8KKyNkZWZpbmUgSVdFVlFVQUwJMHg4QzAxCQkvKiBRdWFsaXR5IHBhcnQgb2Ygc3RhdGlzdGljcyAoc2NhbikgKi8KKyNkZWZpbmUgSVdFVkNVU1RPTQkweDhDMDIJCS8qIERyaXZlciBzcGVjaWZpYyBhc2NpaSBzdHJpbmcgKi8KKyNkZWZpbmUgSVdFVlJFR0lTVEVSRUQJMHg4QzAzCQkvKiBEaXNjb3ZlcmVkIGEgbmV3IG5vZGUgKEFQIG1vZGUpICovCisjZGVmaW5lIElXRVZFWFBJUkVECTB4OEMwNAkJLyogRXhwaXJlZCBhIG5vZGUgKEFQIG1vZGUpICovCisKKyNkZWZpbmUgSVdFVkZJUlNUCTB4OEMwMAorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBSSVZBVEUgSU5GTyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKgorICogVGhlIGZvbGxvd2luZyBpcyB1c2VkIHdpdGggU0lPQ0dJV1BSSVYuIEl0IGFsbG93IGEgZHJpdmVyIHRvIGRlZmluZQorICogdGhlIGludGVyZmFjZSAobmFtZSwgdHlwZSBvZiBkYXRhKSBmb3IgaXRzIHByaXZhdGUgaW9jdGwuCisgKiBQcml2YXRlcyBpb2N0bCBhcmUgU0lPQ0lXRklSU1RQUklWIC0+IFNJT0NJV0xBU1RQUklWCisgKi8KKworI2RlZmluZSBJV19QUklWX1RZUEVfTUFTSwkweDcwMDAJLyogVHlwZSBvZiBhcmd1bWVudHMgKi8KKyNkZWZpbmUgSVdfUFJJVl9UWVBFX05PTkUJMHgwMDAwCisjZGVmaW5lIElXX1BSSVZfVFlQRV9CWVRFCTB4MTAwMAkvKiBDaGFyIGFzIG51bWJlciAqLworI2RlZmluZSBJV19QUklWX1RZUEVfQ0hBUgkweDIwMDAJLyogQ2hhciBhcyBjaGFyYWN0ZXIgKi8KKyNkZWZpbmUgSVdfUFJJVl9UWVBFX0lOVAkweDQwMDAJLyogMzIgYml0cyBpbnQgKi8KKyNkZWZpbmUgSVdfUFJJVl9UWVBFX0ZMT0FUCTB4NTAwMAkvKiBzdHJ1Y3QgaXdfZnJlcSAqLworI2RlZmluZSBJV19QUklWX1RZUEVfQUREUgkweDYwMDAJLyogc3RydWN0IHNvY2thZGRyICovCisKKyNkZWZpbmUgSVdfUFJJVl9TSVpFX0ZJWEVECTB4MDgwMAkvKiBWYXJpYWJsZSBvciBmaXhlZCBudW1iZXIgb2YgYXJncyAqLworCisjZGVmaW5lIElXX1BSSVZfU0laRV9NQVNLCTB4MDdGRgkvKiBNYXggbnVtYmVyIG9mIHRob3NlIGFyZ3MgKi8KKworLyoKKyAqIE5vdGUgOiBpZiB0aGUgbnVtYmVyIG9mIGFyZ3MgaXMgZml4ZWQgYW5kIHRoZSBzaXplIDwgMTYgb2N0ZXRzLAorICogaW5zdGVhZCBvZiBwYXNzaW5nIGEgcG9pbnRlciB3ZSB3aWxsIHB1dCBhcmdzIGluIHRoZSBpd3JlcSBzdHJ1Y3QuLi4KKyAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBPVEhFUiBDT05TVEFOVFMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogTWF4aW11bSBmcmVxdWVuY2llcyBpbiB0aGUgcmFuZ2Ugc3RydWN0ICovCisjZGVmaW5lIElXX01BWF9GUkVRVUVOQ0lFUwkzMgorLyogTm90ZSA6IGlmIHlvdSBoYXZlIHNvbWV0aGluZyBsaWtlIDgwIGZyZXF1ZW5jaWVzLAorICogZG9uJ3QgaW5jcmVhc2UgdGhpcyBjb25zdGFudCBhbmQgZG9uJ3QgZmlsbCB0aGUgZnJlcXVlbmN5IGxpc3QuCisgKiBUaGUgdXNlciB3aWxsIGJlIGFibGUgdG8gc2V0IGJ5IGNoYW5uZWwgYW55d2F5Li4uICovCisKKy8qIE1heGltdW0gYml0IHJhdGVzIGluIHRoZSByYW5nZSBzdHJ1Y3QgKi8KKyNkZWZpbmUgSVdfTUFYX0JJVFJBVEVTCQkzMgorCisvKiBNYXhpbXVtIHR4IHBvd2VycyBpbiB0aGUgcmFuZ2Ugc3RydWN0ICovCisjZGVmaW5lIElXX01BWF9UWFBPV0VSCQk4CisvKiBOb3RlIDogaWYgeW91IG1vcmUgdGhhbiA4IFRYUG93ZXJzLCBqdXN0IHNldCB0aGUgbWF4IGFuZCBtaW4gb3IKKyAqIGEgZmV3IG9mIHRoZW0gaW4gdGhlIHN0cnVjdCBpd19yYW5nZS4gKi8KKworLyogTWF4aW11bSBvZiBhZGRyZXNzIHRoYXQgeW91IG1heSBzZXQgd2l0aCBTUFkgKi8KKyNkZWZpbmUgSVdfTUFYX1NQWQkJOAorCisvKiBNYXhpbXVtIG9mIGFkZHJlc3MgdGhhdCB5b3UgbWF5IGdldCBpbiB0aGUKKyAgIGxpc3Qgb2YgYWNjZXNzIHBvaW50cyBpbiByYW5nZSAqLworI2RlZmluZSBJV19NQVhfQVAJCTY0CisKKy8qIE1heGltdW0gc2l6ZSBvZiB0aGUgRVNTSUQgYW5kIE5JQ0tOIHN0cmluZ3MgKi8KKyNkZWZpbmUgSVdfRVNTSURfTUFYX1NJWkUJMzIKKworLyogTW9kZXMgb2Ygb3BlcmF0aW9uICovCisjZGVmaW5lIElXX01PREVfQVVUTwkwCS8qIExldCB0aGUgZHJpdmVyIGRlY2lkZXMgKi8KKyNkZWZpbmUgSVdfTU9ERV9BREhPQwkxCS8qIFNpbmdsZSBjZWxsIG5ldHdvcmsgKi8KKyNkZWZpbmUgSVdfTU9ERV9JTkZSQQkyCS8qIE11bHRpIGNlbGwgbmV0d29yaywgcm9hbWluZywgLi4uICovCisjZGVmaW5lIElXX01PREVfTUFTVEVSCTMJLyogU3luY2hyb25pc2F0aW9uIG1hc3RlciBvciBBY2Nlc3MgUG9pbnQgKi8KKyNkZWZpbmUgSVdfTU9ERV9SRVBFQVQJNAkvKiBXaXJlbGVzcyBSZXBlYXRlciAoZm9yd2FyZGVyKSAqLworI2RlZmluZSBJV19NT0RFX1NFQ09ORAk1CS8qIFNlY29uZGFyeSBtYXN0ZXIvcmVwZWF0ZXIgKGJhY2t1cCkgKi8KKyNkZWZpbmUgSVdfTU9ERV9NT05JVE9SCTYJLyogUGFzc2l2ZSBtb25pdG9yIChsaXN0ZW4gb25seSkgKi8KKworLyogU3RhdGlzdGljcyBmbGFncyAoYml0bWFzayBpbiB1cGRhdGVkKSAqLworI2RlZmluZSBJV19RVUFMX1FVQUxfVVBEQVRFRAkweDEJLyogVmFsdWUgd2FzIHVwZGF0ZWQgc2luY2UgbGFzdCByZWFkICovCisjZGVmaW5lIElXX1FVQUxfTEVWRUxfVVBEQVRFRAkweDIKKyNkZWZpbmUgSVdfUVVBTF9OT0lTRV9VUERBVEVECTB4NAorI2RlZmluZSBJV19RVUFMX1FVQUxfSU5WQUxJRAkweDEwCS8qIERyaXZlciBkb2Vzbid0IHByb3ZpZGUgdmFsdWUgKi8KKyNkZWZpbmUgSVdfUVVBTF9MRVZFTF9JTlZBTElECTB4MjAKKyNkZWZpbmUgSVdfUVVBTF9OT0lTRV9JTlZBTElECTB4NDAKKworLyogRnJlcXVlbmN5IGZsYWdzICovCisjZGVmaW5lIElXX0ZSRVFfQVVUTwkJMHgwMAkvKiBMZXQgdGhlIGRyaXZlciBkZWNpZGVzICovCisjZGVmaW5lIElXX0ZSRVFfRklYRUQJCTB4MDEJLyogRm9yY2UgYSBzcGVjaWZpYyB2YWx1ZSAqLworCisvKiBNYXhpbXVtIG51bWJlciBvZiBzaXplIG9mIGVuY29kaW5nIHRva2VuIGF2YWlsYWJsZQorICogdGhleSBhcmUgbGlzdGVkIGluIHRoZSByYW5nZSBzdHJ1Y3R1cmUgKi8KKyNkZWZpbmUgSVdfTUFYX0VOQ09ESU5HX1NJWkVTCTgKKworLyogTWF4aW11bSBzaXplIG9mIHRoZSBlbmNvZGluZyB0b2tlbiBpbiBieXRlcyAqLworI2RlZmluZSBJV19FTkNPRElOR19UT0tFTl9NQVgJMzIJLyogMjU2IGJpdHMgKGZvciBub3cpICovCisKKy8qIEZsYWdzIGZvciBlbmNvZGluZyAoYWxvbmcgd2l0aCB0aGUgdG9rZW4pICovCisjZGVmaW5lIElXX0VOQ09ERV9JTkRFWAkJMHgwMEZGCS8qIFRva2VuIGluZGV4IChpZiBuZWVkZWQpICovCisjZGVmaW5lIElXX0VOQ09ERV9GTEFHUwkJMHhGRjAwCS8qIEZsYWdzIGRlZmluZWQgYmVsb3cgKi8KKyNkZWZpbmUgSVdfRU5DT0RFX01PREUJCTB4RjAwMAkvKiBNb2RlcyBkZWZpbmVkIGJlbG93ICovCisjZGVmaW5lIElXX0VOQ09ERV9ESVNBQkxFRAkweDgwMDAJLyogRW5jb2RpbmcgZGlzYWJsZWQgKi8KKyNkZWZpbmUgSVdfRU5DT0RFX0VOQUJMRUQJMHgwMDAwCS8qIEVuY29kaW5nIGVuYWJsZWQgKi8KKyNkZWZpbmUgSVdfRU5DT0RFX1JFU1RSSUNURUQJMHg0MDAwCS8qIFJlZnVzZSBub24tZW5jb2RlZCBwYWNrZXRzICovCisjZGVmaW5lIElXX0VOQ09ERV9PUEVOCQkweDIwMDAJLyogQWNjZXB0IG5vbi1lbmNvZGVkIHBhY2tldHMgKi8KKyNkZWZpbmUgSVdfRU5DT0RFX05PS0VZCQkweDA4MDAgIC8qIEtleSBpcyB3cml0ZSBvbmx5LCBzbyBub3QgcHJlc2VudCAqLworI2RlZmluZSBJV19FTkNPREVfVEVNUAkJMHgwNDAwICAvKiBUZW1wb3Jhcnkga2V5ICovCisKKy8qIFBvd2VyIG1hbmFnZW1lbnQgZmxhZ3MgYXZhaWxhYmxlIChhbG9uZyB3aXRoIHRoZSB2YWx1ZSwgaWYgYW55KSAqLworI2RlZmluZSBJV19QT1dFUl9PTgkJMHgwMDAwCS8qIE5vIGRldGFpbHMuLi4gKi8KKyNkZWZpbmUgSVdfUE9XRVJfVFlQRQkJMHhGMDAwCS8qIFR5cGUgb2YgcGFyYW1ldGVyICovCisjZGVmaW5lIElXX1BPV0VSX1BFUklPRAkJMHgxMDAwCS8qIFZhbHVlIGlzIGEgcGVyaW9kL2R1cmF0aW9uIG9mICAqLworI2RlZmluZSBJV19QT1dFUl9USU1FT1VUCTB4MjAwMAkvKiBWYWx1ZSBpcyBhIHRpbWVvdXQgKHRvIGdvIGFzbGVlcCkgKi8KKyNkZWZpbmUgSVdfUE9XRVJfTU9ERQkJMHgwRjAwCS8qIFBvd2VyIE1hbmFnZW1lbnQgbW9kZSAqLworI2RlZmluZSBJV19QT1dFUl9VTklDQVNUX1IJMHgwMTAwCS8qIFJlY2VpdmUgb25seSB1bmljYXN0IG1lc3NhZ2VzICovCisjZGVmaW5lIElXX1BPV0VSX01VTFRJQ0FTVF9SCTB4MDIwMAkvKiBSZWNlaXZlIG9ubHkgbXVsdGljYXN0IG1lc3NhZ2VzICovCisjZGVmaW5lIElXX1BPV0VSX0FMTF9SCQkweDAzMDAJLyogUmVjZWl2ZSBhbGwgbWVzc2FnZXMgdGhvdWdoIFBNICovCisjZGVmaW5lIElXX1BPV0VSX0ZPUkNFX1MJMHgwNDAwCS8qIEZvcmNlIFBNIHByb2NlZHVyZSBmb3Igc2VuZGluZyB1bmljYXN0ICovCisjZGVmaW5lIElXX1BPV0VSX1JFUEVBVEVSCTB4MDgwMAkvKiBSZXBlYXQgYnJvYWRjYXN0IG1lc3NhZ2VzIGluIFBNIHBlcmlvZCAqLworI2RlZmluZSBJV19QT1dFUl9NT0RJRklFUgkweDAwMEYJLyogTW9kaWZ5IGEgcGFyYW1ldGVyICovCisjZGVmaW5lIElXX1BPV0VSX01JTgkJMHgwMDAxCS8qIFZhbHVlIGlzIGEgbWluaW11bSAgKi8KKyNkZWZpbmUgSVdfUE9XRVJfTUFYCQkweDAwMDIJLyogVmFsdWUgaXMgYSBtYXhpbXVtICovCisjZGVmaW5lIElXX1BPV0VSX1JFTEFUSVZFCTB4MDAwNAkvKiBWYWx1ZSBpcyBub3QgaW4gc2Vjb25kcy9tcy91cyAqLworCisvKiBUcmFuc21pdCBQb3dlciBmbGFncyBhdmFpbGFibGUgKi8KKyNkZWZpbmUgSVdfVFhQT1dfVFlQRQkJMHgwMEZGCS8qIFR5cGUgb2YgdmFsdWUgKi8KKyNkZWZpbmUgSVdfVFhQT1dfREJNCQkweDAwMDAJLyogVmFsdWUgaXMgaW4gZEJtICovCisjZGVmaW5lIElXX1RYUE9XX01XQVRUCQkweDAwMDEJLyogVmFsdWUgaXMgaW4gbVcgKi8KKyNkZWZpbmUgSVdfVFhQT1dfUkVMQVRJVkUJMHgwMDAyCS8qIFZhbHVlIGlzIGluIGFyYml0cmFyeSB1bml0cyAqLworI2RlZmluZSBJV19UWFBPV19SQU5HRQkJMHgxMDAwCS8qIFJhbmdlIG9mIHZhbHVlIGJldHdlZW4gbWluL21heCAqLworCisvKiBSZXRyeSBsaW1pdHMgYW5kIGxpZmV0aW1lIGZsYWdzIGF2YWlsYWJsZSAqLworI2RlZmluZSBJV19SRVRSWV9PTgkJMHgwMDAwCS8qIE5vIGRldGFpbHMuLi4gKi8KKyNkZWZpbmUgSVdfUkVUUllfVFlQRQkJMHhGMDAwCS8qIFR5cGUgb2YgcGFyYW1ldGVyICovCisjZGVmaW5lIElXX1JFVFJZX0xJTUlUCQkweDEwMDAJLyogTWF4aW11bSBudW1iZXIgb2YgcmV0cmllcyovCisjZGVmaW5lIElXX1JFVFJZX0xJRkVUSU1FCTB4MjAwMAkvKiBNYXhpbXVtIGR1cmF0aW9uIG9mIHJldHJpZXMgaW4gdXMgKi8KKyNkZWZpbmUgSVdfUkVUUllfTU9ESUZJRVIJMHgwMDBGCS8qIE1vZGlmeSBhIHBhcmFtZXRlciAqLworI2RlZmluZSBJV19SRVRSWV9NSU4JCTB4MDAwMQkvKiBWYWx1ZSBpcyBhIG1pbmltdW0gICovCisjZGVmaW5lIElXX1JFVFJZX01BWAkJMHgwMDAyCS8qIFZhbHVlIGlzIGEgbWF4aW11bSAqLworI2RlZmluZSBJV19SRVRSWV9SRUxBVElWRQkweDAwMDQJLyogVmFsdWUgaXMgbm90IGluIHNlY29uZHMvbXMvdXMgKi8KKworLyogU2Nhbm5pbmcgcmVxdWVzdCBmbGFncyAqLworI2RlZmluZSBJV19TQ0FOX0RFRkFVTFQJCTB4MDAwMAkvKiBEZWZhdWx0IHNjYW4gb2YgdGhlIGRyaXZlciAqLworI2RlZmluZSBJV19TQ0FOX0FMTF9FU1NJRAkweDAwMDEJLyogU2NhbiBhbGwgRVNTSURzICovCisjZGVmaW5lIElXX1NDQU5fVEhJU19FU1NJRAkweDAwMDIJLyogU2NhbiBvbmx5IHRoaXMgRVNTSUQgKi8KKyNkZWZpbmUgSVdfU0NBTl9BTExfRlJFUQkweDAwMDQJLyogU2NhbiBhbGwgRnJlcXVlbmNpZXMgKi8KKyNkZWZpbmUgSVdfU0NBTl9USElTX0ZSRVEJMHgwMDA4CS8qIFNjYW4gb25seSB0aGlzIEZyZXF1ZW5jeSAqLworI2RlZmluZSBJV19TQ0FOX0FMTF9NT0RFCTB4MDAxMAkvKiBTY2FuIGFsbCBNb2RlcyAqLworI2RlZmluZSBJV19TQ0FOX1RISVNfTU9ERQkweDAwMjAJLyogU2NhbiBvbmx5IHRoaXMgTW9kZSAqLworI2RlZmluZSBJV19TQ0FOX0FMTF9SQVRFCTB4MDA0MAkvKiBTY2FuIGFsbCBCaXQtUmF0ZXMgKi8KKyNkZWZpbmUgSVdfU0NBTl9USElTX1JBVEUJMHgwMDgwCS8qIFNjYW4gb25seSB0aGlzIEJpdC1SYXRlICovCisvKiBNYXhpbXVtIHNpemUgb2YgcmV0dXJuZWQgZGF0YSAqLworI2RlZmluZSBJV19TQ0FOX01BWF9EQVRBCTQwOTYJLyogSW4gYnl0ZXMgKi8KKworLyogTWF4IG51bWJlciBvZiBjaGFyIGluIGN1c3RvbSBldmVudCAtIHVzZSBtdWx0aXBsZSBvZiB0aGVtIGlmIG5lZWRlZCAqLworI2RlZmluZSBJV19DVVNUT01fTUFYCQkyNTYJLyogSW4gYnl0ZXMgKi8KKworLyogRXZlbnQgY2FwYWJpbGl0eSBtYWNyb3MgLSBpbiAoc3RydWN0IGl3X3JhbmdlICopLT5ldmVudF9jYXBhCisgKiBCZWNhdXNlIHdlIGhhdmUgbW9yZSB0aGFuIDMyIHBvc3NpYmxlIGV2ZW50cywgd2UgdXNlIGFuIGFycmF5IG9mCisgKiAzMiBiaXQgYml0bWFza3MuIE5vdGUgOiAzMiBiaXRzID0gMHgyMCA9IDJeNS4gKi8KKyNkZWZpbmUgSVdfRVZFTlRfQ0FQQV9CQVNFKGNtZCkJCSgoY21kID49IFNJT0NJV0ZJUlNUUFJJVikgPyBcCisJCQkJCSAoY21kIC0gU0lPQ0lXRklSU1RQUklWICsgMHg2MCkgOiBcCisJCQkJCSAoY21kIC0gU0lPQ1NJV0NPTU1JVCkpCisjZGVmaW5lIElXX0VWRU5UX0NBUEFfSU5ERVgoY21kKQkoSVdfRVZFTlRfQ0FQQV9CQVNFKGNtZCkgPj4gNSkKKyNkZWZpbmUgSVdfRVZFTlRfQ0FQQV9NQVNLKGNtZCkJCSgxIDw8IChJV19FVkVOVF9DQVBBX0JBU0UoY21kKSAmIDB4MUYpKQorLyogRXZlbnQgY2FwYWJpbGl0eSBjb25zdGFudHMgLSBldmVudCBhdXRvZ2VuZXJhdGVkIGJ5IHRoZSBrZXJuZWwKKyAqIFRoaXMgbGlzdCBpcyB2YWxpZCBmb3IgbW9zdCA4MDIuMTEgZGV2aWNlcywgY3VzdG9taXNlIGFzIG5lZWRlZC4uLiAqLworI2RlZmluZSBJV19FVkVOVF9DQVBBX0tfMAkoSVdfRVZFTlRfQ0FQQV9NQVNLKDB4OEIwNCkgfCBcCisJCQkJIElXX0VWRU5UX0NBUEFfTUFTSygweDhCMDYpIHwgXAorCQkJCSBJV19FVkVOVF9DQVBBX01BU0soMHg4QjFBKSkKKyNkZWZpbmUgSVdfRVZFTlRfQ0FQQV9LXzEJKElXX0VWRU5UX0NBUEFfTUFTSygweDhCMkEpKQorLyogIkVhc3kiIG1hY3JvIHRvIHNldCBldmVudHMgaW4gaXdfcmFuZ2UgKGxlc3MgZWZmaWNpZW50KSAqLworI2RlZmluZSBJV19FVkVOVF9DQVBBX1NFVChldmVudF9jYXBhLCBjbWQpIChldmVudF9jYXBhW0lXX0VWRU5UX0NBUEFfSU5ERVgoY21kKV0gfD0gSVdfRVZFTlRfQ0FQQV9NQVNLKGNtZCkpCisjZGVmaW5lIElXX0VWRU5UX0NBUEFfU0VUX0tFUk5FTChldmVudF9jYXBhKSB7ZXZlbnRfY2FwYVswXSB8PSBJV19FVkVOVF9DQVBBX0tfMDsgZXZlbnRfY2FwYVsxXSB8PSBJV19FVkVOVF9DQVBBX0tfMTsgfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogVFlQRVMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU1VCVFlQRVMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKgorICoJR2VuZXJpYyBmb3JtYXQgZm9yIG1vc3QgcGFyYW1ldGVycyB0aGF0IGZpdCBpbiBhbiBpbnQKKyAqLworc3RydWN0CWl3X3BhcmFtCit7CisgIF9fczMyCQl2YWx1ZTsJCS8qIFRoZSB2YWx1ZSBvZiB0aGUgcGFyYW1ldGVyIGl0c2VsZiAqLworICBfX3U4CQlmaXhlZDsJCS8qIEhhcmR3YXJlIHNob3VsZCBub3QgdXNlIGF1dG8gc2VsZWN0ICovCisgIF9fdTgJCWRpc2FibGVkOwkvKiBEaXNhYmxlIHRoZSBmZWF0dXJlICovCisgIF9fdTE2CQlmbGFnczsJCS8qIFZhcmlvdXMgc3BlY2lmYyBmbGFncyAoaWYgYW55KSAqLworfTsKKworLyoKKyAqCUZvciBhbGwgZGF0YSBsYXJnZXIgdGhhbiAxNiBvY3RldHMsIHdlIG5lZWQgdG8gdXNlIGEKKyAqCXBvaW50ZXIgdG8gbWVtb3J5IGFsbG9jYXRlZCBpbiB1c2VyIHNwYWNlLgorICovCitzdHJ1Y3QJaXdfcG9pbnQKK3sKKyAgdm9pZCBfX3VzZXIJKnBvaW50ZXI7CS8qIFBvaW50ZXIgdG8gdGhlIGRhdGEgIChpbiB1c2VyIHNwYWNlKSAqLworICBfX3UxNgkJbGVuZ3RoOwkJLyogbnVtYmVyIG9mIGZpZWxkcyBvciBzaXplIGluIGJ5dGVzICovCisgIF9fdTE2CQlmbGFnczsJCS8qIE9wdGlvbmFsIHBhcmFtcyAqLworfTsKKworLyoKKyAqCUEgZnJlcXVlbmN5CisgKglGb3IgbnVtYmVycyBsb3dlciB0aGFuIDEwXjksIHdlIGVuY29kZSB0aGUgbnVtYmVyIGluICdtJyBhbmQKKyAqCXNldCAnZScgdG8gMAorICoJRm9yIG51bWJlciBncmVhdGVyIHRoYW4gMTBeOSwgd2UgZGl2aWRlIGl0IGJ5IHRoZSBsb3dlc3QgcG93ZXIKKyAqCW9mIDEwIHRvIGdldCAnbScgbG93ZXIgdGhhbiAxMF45LCB3aXRoICdtJz0gZiAvICgxMF4nZScpLi4uCisgKglUaGUgcG93ZXIgb2YgMTAgaXMgaW4gJ2UnLCB0aGUgcmVzdWx0IG9mIHRoZSBkaXZpc2lvbiBpcyBpbiAnbScuCisgKi8KK3N0cnVjdAlpd19mcmVxCit7CisJX19zMzIJCW07CQkvKiBNYW50aXNzYSAqLworCV9fczE2CQllOwkJLyogRXhwb25lbnQgKi8KKwlfX3U4CQlpOwkJLyogTGlzdCBpbmRleCAod2hlbiBpbiByYW5nZSBzdHJ1Y3QpICovCisJX191OAkJZmxhZ3M7CQkvKiBGbGFncyAoZml4ZWQvYXV0bykgKi8KK307CisKKy8qCisgKglRdWFsaXR5IG9mIHRoZSBsaW5rCisgKi8KK3N0cnVjdAlpd19xdWFsaXR5Cit7CisJX191OAkJcXVhbDsJCS8qIGxpbmsgcXVhbGl0eSAoJXJldHJpZXMsIFNOUiwKKwkJCQkJICAgJW1pc3NlZCBiZWFjb25zIG9yIGJldHRlci4uLikgKi8KKwlfX3U4CQlsZXZlbDsJCS8qIHNpZ25hbCBsZXZlbCAoZEJtKSAqLworCV9fdTgJCW5vaXNlOwkJLyogbm9pc2UgbGV2ZWwgKGRCbSkgKi8KKwlfX3U4CQl1cGRhdGVkOwkvKiBGbGFncyB0byBrbm93IGlmIHVwZGF0ZWQgKi8KK307CisKKy8qCisgKglQYWNrZXQgZGlzY2FyZGVkIGluIHRoZSB3aXJlbGVzcyBhZGFwdGVyIGR1ZSB0bworICoJIndpcmVsZXNzIiBzcGVjaWZpYyBwcm9ibGVtcy4uLgorICoJTm90ZSA6IHRoZSBsaXN0IG9mIGNvdW50ZXIgYW5kIHN0YXRpc3RpY3MgaW4gbmV0X2RldmljZV9zdGF0cworICoJaXMgYWxyZWFkeSBwcmV0dHkgZXhoYXVzdGl2ZSwgYW5kIHlvdSBzaG91bGQgdXNlIHRoYXQgZmlyc3QuCisgKglUaGlzIGlzIG9ubHkgYWRkaXRpb25hbCBzdGF0cy4uLgorICovCitzdHJ1Y3QJaXdfZGlzY2FyZGVkCit7CisJX191MzIJCW53aWQ7CQkvKiBSeCA6IFdyb25nIG53aWQvZXNzaWQgKi8KKwlfX3UzMgkJY29kZTsJCS8qIFJ4IDogVW5hYmxlIHRvIGNvZGUvZGVjb2RlIChXRVApICovCisJX191MzIJCWZyYWdtZW50OwkvKiBSeCA6IENhbid0IHBlcmZvcm0gTUFDIHJlYXNzZW1ibHkgKi8KKwlfX3UzMgkJcmV0cmllczsJLyogVHggOiBNYXggTUFDIHJldHJpZXMgbnVtIHJlYWNoZWQgKi8KKwlfX3UzMgkJbWlzYzsJCS8qIE90aGVycyBjYXNlcyAqLworfTsKKworLyoKKyAqCVBhY2tldC9UaW1lIHBlcmlvZCBtaXNzZWQgaW4gdGhlIHdpcmVsZXNzIGFkYXB0ZXIgZHVlIHRvCisgKgkid2lyZWxlc3MiIHNwZWNpZmljIHByb2JsZW1zLi4uCisgKi8KK3N0cnVjdAlpd19taXNzZWQKK3sKKwlfX3UzMgkJYmVhY29uOwkJLyogTWlzc2VkIGJlYWNvbnMvc3VwZXJmcmFtZSAqLworfTsKKworLyoKKyAqCVF1YWxpdHkgcmFuZ2UgKGZvciBzcHkgdGhyZXNob2xkKQorICovCitzdHJ1Y3QJaXdfdGhyc3B5Cit7CisJc3RydWN0IHNvY2thZGRyCQlhZGRyOwkJLyogU291cmNlIGFkZHJlc3MgKGh3L21hYykgKi8KKwlzdHJ1Y3QgaXdfcXVhbGl0eQlxdWFsOwkJLyogUXVhbGl0eSBvZiB0aGUgbGluayAqLworCXN0cnVjdCBpd19xdWFsaXR5CWxvdzsJCS8qIExvdyB0aHJlc2hvbGQgKi8KKwlzdHJ1Y3QgaXdfcXVhbGl0eQloaWdoOwkJLyogSGlnaCB0aHJlc2hvbGQgKi8KK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXSVJFTEVTUyBTVEFUUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qCisgKiBXaXJlbGVzcyBzdGF0aXN0aWNzICh1c2VkIGZvciAvcHJvYy9uZXQvd2lyZWxlc3MpCisgKi8KK3N0cnVjdAlpd19zdGF0aXN0aWNzCit7CisJX191MTYJCXN0YXR1czsJCS8qIFN0YXR1cworCQkJCQkgKiAtIGRldmljZSBkZXBlbmRlbnQgZm9yIG5vdyAqLworCisJc3RydWN0IGl3X3F1YWxpdHkJcXVhbDsJCS8qIFF1YWxpdHkgb2YgdGhlIGxpbmsKKwkJCQkJCSAqIChpbnN0YW50L21lYW4vbWF4KSAqLworCXN0cnVjdCBpd19kaXNjYXJkZWQJZGlzY2FyZDsJLyogUGFja2V0IGRpc2NhcmRlZCBjb3VudHMgKi8KKwlzdHJ1Y3QgaXdfbWlzc2VkCW1pc3M7CQkvKiBQYWNrZXQgbWlzc2VkIGNvdW50cyAqLworfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIElPQ1RMIFJFUVVFU1QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKgorICogVGhpcyBzdHJ1Y3R1cmUgZGVmaW5lcyB0aGUgcGF5bG9hZCBvZiBhbiBpb2N0bCwgYW5kIGlzIHVzZWQgCisgKiBiZWxvdy4KKyAqCisgKiBOb3RlIHRoYXQgdGhpcyBzdHJ1Y3R1cmUgc2hvdWxkIGZpdCBvbiB0aGUgbWVtb3J5IGZvb3RwcmludAorICogb2YgaXdyZXEgKHdoaWNoIGlzIHRoZSBzYW1lIGFzIGlmcmVxKSwgd2hpY2ggbWVhbiBhIG1heCBzaXplIG9mCisgKiAxNiBvY3RldHMgPSAxMjggYml0cy4gV2FybmluZywgcG9pbnRlcnMgbWlnaHQgYmUgNjQgYml0cyB3aWRlLi4uCisgKiBZb3Ugc2hvdWxkIGNoZWNrIHRoaXMgd2hlbiBpbmNyZWFzaW5nIHRoZSBzdHJ1Y3R1cmVzIGRlZmluZWQKKyAqIGFib3ZlIGluIHRoaXMgZmlsZS4uLgorICovCit1bmlvbglpd3JlcV9kYXRhCit7CisJLyogQ29uZmlnIC0gZ2VuZXJpYyAqLworCWNoYXIJCW5hbWVbSUZOQU1TSVpdOworCS8qIE5hbWUgOiB1c2VkIHRvIHZlcmlmeSB0aGUgcHJlc2VuY2Ugb2YgIHdpcmVsZXNzIGV4dGVuc2lvbnMuCisJICogTmFtZSBvZiB0aGUgcHJvdG9jb2wvcHJvdmlkZXIuLi4gKi8KKworCXN0cnVjdCBpd19wb2ludAllc3NpZDsJCS8qIEV4dGVuZGVkIG5ldHdvcmsgbmFtZSAqLworCXN0cnVjdCBpd19wYXJhbQlud2lkOwkJLyogbmV0d29yayBpZCAob3IgZG9tYWluIC0gdGhlIGNlbGwpICovCisJc3RydWN0IGl3X2ZyZXEJZnJlcTsJCS8qIGZyZXF1ZW5jeSBvciBjaGFubmVsIDoKKwkJCQkJICogMC0xMDAwID0gY2hhbm5lbAorCQkJCQkgKiA+IDEwMDAgPSBmcmVxdWVuY3kgaW4gSHogKi8KKworCXN0cnVjdCBpd19wYXJhbQlzZW5zOwkJLyogc2lnbmFsIGxldmVsIHRocmVzaG9sZCAqLworCXN0cnVjdCBpd19wYXJhbQliaXRyYXRlOwkvKiBkZWZhdWx0IGJpdCByYXRlICovCisJc3RydWN0IGl3X3BhcmFtCXR4cG93ZXI7CS8qIGRlZmF1bHQgdHJhbnNtaXQgcG93ZXIgKi8KKwlzdHJ1Y3QgaXdfcGFyYW0JcnRzOwkJLyogUlRTIHRocmVzaG9sZCB0aHJlc2hvbGQgKi8KKwlzdHJ1Y3QgaXdfcGFyYW0JZnJhZzsJCS8qIEZyYWdtZW50YXRpb24gdGhyZXNob2xkICovCisJX191MzIJCW1vZGU7CQkvKiBPcGVyYXRpb24gbW9kZSAqLworCXN0cnVjdCBpd19wYXJhbQlyZXRyeTsJCS8qIFJldHJ5IGxpbWl0cyAmIGxpZmV0aW1lICovCisKKwlzdHJ1Y3QgaXdfcG9pbnQJZW5jb2Rpbmc7CS8qIEVuY29kaW5nIHN0dWZmIDogdG9rZW5zICovCisJc3RydWN0IGl3X3BhcmFtCXBvd2VyOwkJLyogUE0gZHVyYXRpb24vdGltZW91dCAqLworCXN0cnVjdCBpd19xdWFsaXR5IHF1YWw7CQkvKiBRdWFsaXR5IHBhcnQgb2Ygc3RhdGlzdGljcyAqLworCisJc3RydWN0IHNvY2thZGRyCWFwX2FkZHI7CS8qIEFjY2VzcyBwb2ludCBhZGRyZXNzICovCisJc3RydWN0IHNvY2thZGRyCWFkZHI7CQkvKiBEZXN0aW5hdGlvbiBhZGRyZXNzIChody9tYWMpICovCisKKwlzdHJ1Y3QgaXdfcGFyYW0JcGFyYW07CQkvKiBPdGhlciBzbWFsbCBwYXJhbWV0ZXJzICovCisJc3RydWN0IGl3X3BvaW50CWRhdGE7CQkvKiBPdGhlciBsYXJnZSBwYXJhbWV0ZXJzICovCit9OworCisvKgorICogVGhlIHN0cnVjdHVyZSB0byBleGNoYW5nZSBkYXRhIGZvciBpb2N0bC4KKyAqIFRoaXMgc3RydWN0dXJlIGlzIHRoZSBzYW1lIGFzICdzdHJ1Y3QgaWZyZXEnLCBidXQgKHJlKWRlZmluZWQgZm9yCisgKiBjb252ZW5pZW5jZS4uLgorICogRG8gSSBuZWVkIHRvIHJlbWluZCB5b3UgYWJvdXQgc3RydWN0dXJlIHNpemUgKDMyIG9jdGV0cykgPworICovCitzdHJ1Y3QJaXdyZXEgCit7CisJdW5pb24KKwl7CisJCWNoYXIJaWZybl9uYW1lW0lGTkFNU0laXTsJLyogaWYgbmFtZSwgZS5nLiAiZXRoMCIgKi8KKwl9IGlmcl9pZnJuOworCisJLyogRGF0YSBwYXJ0IChkZWZpbmVkIGp1c3QgYWJvdmUpICovCisJdW5pb24JaXdyZXFfZGF0YQl1OworfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSU9DVEwgREFUQSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyoKKyAqCUZvciB0aG9zZSBpb2N0bCB3aGljaCB3YW50IHRvIGV4Y2hhbmdlIG1vZGUgZGF0YSB0aGF0IHdoYXQgY291bGQKKyAqCWZpdCBpbiB0aGUgYWJvdmUgc3RydWN0dXJlLi4uCisgKi8KKworLyoKKyAqCVJhbmdlIG9mIHBhcmFtZXRlcnMKKyAqLworCitzdHJ1Y3QJaXdfcmFuZ2UKK3sKKwkvKiBJbmZvcm1hdGl2ZSBzdHVmZiAodG8gY2hvb3NlIGJldHdlZW4gZGlmZmVyZW50IGludGVyZmFjZSkgKi8KKwlfX3UzMgkJdGhyb3VnaHB1dDsJLyogVG8gZ2l2ZSBhbiBpZGVhLi4uICovCisJLyogSW4gdGhlb3J5IHRoaXMgdmFsdWUgc2hvdWxkIGJlIHRoZSBtYXhpbXVtIGJlbmNobWFya2VkCisJICogVENQL0lQIHRocm91Z2hwdXQsIGJlY2F1c2Ugd2l0aCBtb3N0IG9mIHRoZXNlIGRldmljZXMgdGhlCisJICogYml0IHJhdGUgaXMgbWVhbmluZ2xlc3MgKG92ZXJoZWFkIGFuIGNvKSB0byBlc3RpbWF0ZSBob3cKKwkgKiBmYXN0IHRoZSBjb25uZWN0aW9uIHdpbGwgZ28gYW5kIHBpY2sgdGhlIGZhc3Rlc3Qgb25lLgorCSAqIEkgc3VnZ2VzdCBwZW9wbGUgdG8gcGxheSB3aXRoIE5ldHBlcmYgb3IgYW55IGJlbmNobWFyay4uLgorCSAqLworCisJLyogTldJRCAob3IgZG9tYWluIGlkKSAqLworCV9fdTMyCQltaW5fbndpZDsJLyogTWluaW1hbCBOV0lEIHdlIGFyZSBhYmxlIHRvIHNldCAqLworCV9fdTMyCQltYXhfbndpZDsJLyogTWF4aW1hbCBOV0lEIHdlIGFyZSBhYmxlIHRvIHNldCAqLworCisJLyogT2xkIEZyZXF1ZW5jeSAoYmFja3dhcmQgY29tcGF0IC0gbW92ZWQgbG93ZXIgKSAqLworCV9fdTE2CQlvbGRfbnVtX2NoYW5uZWxzOworCV9fdTgJCW9sZF9udW1fZnJlcXVlbmN5OworCisJLyogV2lyZWxlc3MgZXZlbnQgY2FwYWJpbGl0eSBiaXRtYXNrcyAqLworCV9fdTMyCQlldmVudF9jYXBhWzZdOworCisJLyogc2lnbmFsIGxldmVsIHRocmVzaG9sZCByYW5nZSAqLworCV9fczMyCQlzZW5zaXRpdml0eTsKKworCS8qIFF1YWxpdHkgb2YgbGluayAmIFNOUiBzdHVmZiAqLworCS8qIFF1YWxpdHkgcmFuZ2UgKGxpbmssIGxldmVsLCBub2lzZSkKKwkgKiBJZiB0aGUgcXVhbGl0eSBpcyBhYnNvbHV0ZSwgaXQgd2lsbCBiZSBpbiB0aGUgcmFuZ2UgWzAgOyBtYXhfcXVhbF0sCisJICogaWYgdGhlIHF1YWxpdHkgaXMgZEJtLCBpdCB3aWxsIGJlIGluIHRoZSByYW5nZSBbbWF4X3F1YWwgOyAwXS4KKwkgKiBEb24ndCBmb3JnZXQgdGhhdCB3ZSB1c2UgOCBiaXQgYXJpdGhtZXRpY3MuLi4gKi8KKwlzdHJ1Y3QgaXdfcXVhbGl0eQltYXhfcXVhbDsJLyogUXVhbGl0eSBvZiB0aGUgbGluayAqLworCS8qIFRoaXMgc2hvdWxkIGNvbnRhaW4gdGhlIGF2ZXJhZ2UvdHlwaWNhbCB2YWx1ZXMgb2YgdGhlIHF1YWxpdHkKKwkgKiBpbmRpY2F0b3IuIFRoaXMgc2hvdWxkIGJlIHRoZSB0aHJlc2hvbGQgYmV0d2VlbiBhICJnb29kIiBhbmQKKwkgKiBhICJiYWQiIGxpbmsgKGV4YW1wbGUgOiBtb25pdG9yIGdvaW5nIGZyb20gZ3JlZW4gdG8gb3JhbmdlKS4KKwkgKiBDdXJyZW50bHksIHVzZXIgc3BhY2UgYXBwcyBsaWtlIHF1YWxpdHkgbW9uaXRvcnMgZG9uJ3QgaGF2ZSBhbnkKKwkgKiB3YXkgdG8gY2FsaWJyYXRlIHRoZSBtZWFzdXJlbWVudC4gV2l0aCB0aGlzLCB0aGV5IGNhbiBzcGxpdAorCSAqIHRoZSByYW5nZSBiZXR3ZWVuIDAgYW5kIG1heF9xdWFsIGluIGRpZmZlcmVudCBxdWFsaXR5IGxldmVsCisJICogKHVzaW5nIGEgZ2VvbWV0cmljIHN1YmRpdmlzaW9uIGNlbnRlcmVkIG9uIHRoZSBhdmVyYWdlKS4KKwkgKiBJIGV4cGVjdCB0aGF0IHBlb3BsZSBkb2luZyB0aGUgdXNlciBzcGFjZSBhcHBzIHdpbGwgZmVlZGJhY2sKKwkgKiB1cyBvbiB3aGljaCB2YWx1ZSB3ZSBuZWVkIHRvIHB1dCBpbiBlYWNoIGRyaXZlci4uLiAqLworCXN0cnVjdCBpd19xdWFsaXR5CWF2Z19xdWFsOwkvKiBRdWFsaXR5IG9mIHRoZSBsaW5rICovCisKKwkvKiBSYXRlcyAqLworCV9fdTgJCW51bV9iaXRyYXRlczsJLyogTnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIGxpc3QgKi8KKwlfX3MzMgkJYml0cmF0ZVtJV19NQVhfQklUUkFURVNdOwkvKiBsaXN0LCBpbiBicHMgKi8KKworCS8qIFJUUyB0aHJlc2hvbGQgKi8KKwlfX3MzMgkJbWluX3J0czsJLyogTWluaW1hbCBSVFMgdGhyZXNob2xkICovCisJX19zMzIJCW1heF9ydHM7CS8qIE1heGltYWwgUlRTIHRocmVzaG9sZCAqLworCisJLyogRnJhZyB0aHJlc2hvbGQgKi8KKwlfX3MzMgkJbWluX2ZyYWc7CS8qIE1pbmltYWwgZnJhZyB0aHJlc2hvbGQgKi8KKwlfX3MzMgkJbWF4X2ZyYWc7CS8qIE1heGltYWwgZnJhZyB0aHJlc2hvbGQgKi8KKworCS8qIFBvd2VyIE1hbmFnZW1lbnQgZHVyYXRpb24gJiB0aW1lb3V0ICovCisJX19zMzIJCW1pbl9wbXA7CS8qIE1pbmltYWwgUE0gcGVyaW9kICovCisJX19zMzIJCW1heF9wbXA7CS8qIE1heGltYWwgUE0gcGVyaW9kICovCisJX19zMzIJCW1pbl9wbXQ7CS8qIE1pbmltYWwgUE0gdGltZW91dCAqLworCV9fczMyCQltYXhfcG10OwkvKiBNYXhpbWFsIFBNIHRpbWVvdXQgKi8KKwlfX3UxNgkJcG1wX2ZsYWdzOwkvKiBIb3cgdG8gZGVjb2RlIG1heC9taW4gUE0gcGVyaW9kICovCisJX191MTYJCXBtdF9mbGFnczsJLyogSG93IHRvIGRlY29kZSBtYXgvbWluIFBNIHRpbWVvdXQgKi8KKwlfX3UxNgkJcG1fY2FwYTsJLyogV2hhdCBQTSBvcHRpb25zIGFyZSBzdXBwb3J0ZWQgKi8KKworCS8qIEVuY29kZXIgc3R1ZmYgKi8KKwlfX3UxNgllbmNvZGluZ19zaXplW0lXX01BWF9FTkNPRElOR19TSVpFU107CS8qIERpZmZlcmVudCB0b2tlbiBzaXplcyAqLworCV9fdTgJbnVtX2VuY29kaW5nX3NpemVzOwkvKiBOdW1iZXIgb2YgZW50cnkgaW4gdGhlIGxpc3QgKi8KKwlfX3U4CW1heF9lbmNvZGluZ190b2tlbnM7CS8qIE1heCBudW1iZXIgb2YgdG9rZW5zICovCisJLyogRm9yIGRyaXZlcnMgdGhhdCBuZWVkIGEgImxvZ2luL3Bhc3N3ZCIgZm9ybSAqLworCV9fdTgJZW5jb2RpbmdfbG9naW5faW5kZXg7CS8qIHRva2VuIGluZGV4IGZvciBsb2dpbiB0b2tlbiAqLworCisJLyogVHJhbnNtaXQgcG93ZXIgKi8KKwlfX3UxNgkJdHhwb3dlcl9jYXBhOwkvKiBXaGF0IG9wdGlvbnMgYXJlIHN1cHBvcnRlZCAqLworCV9fdTgJCW51bV90eHBvd2VyOwkvKiBOdW1iZXIgb2YgZW50cmllcyBpbiB0aGUgbGlzdCAqLworCV9fczMyCQl0eHBvd2VyW0lXX01BWF9UWFBPV0VSXTsJLyogbGlzdCwgaW4gYnBzICovCisKKwkvKiBXaXJlbGVzcyBFeHRlbnNpb24gdmVyc2lvbiBpbmZvICovCisJX191OAkJd2VfdmVyc2lvbl9jb21waWxlZDsJLyogTXVzdCBiZSBXSVJFTEVTU19FWFQgKi8KKwlfX3U4CQl3ZV92ZXJzaW9uX3NvdXJjZTsJLyogTGFzdCB1cGRhdGUgb2Ygc291cmNlICovCisKKwkvKiBSZXRyeSBsaW1pdHMgYW5kIGxpZmV0aW1lICovCisJX191MTYJCXJldHJ5X2NhcGE7CS8qIFdoYXQgcmV0cnkgb3B0aW9ucyBhcmUgc3VwcG9ydGVkICovCisJX191MTYJCXJldHJ5X2ZsYWdzOwkvKiBIb3cgdG8gZGVjb2RlIG1heC9taW4gcmV0cnkgbGltaXQgKi8KKwlfX3UxNgkJcl90aW1lX2ZsYWdzOwkvKiBIb3cgdG8gZGVjb2RlIG1heC9taW4gcmV0cnkgbGlmZSAqLworCV9fczMyCQltaW5fcmV0cnk7CS8qIE1pbmltYWwgbnVtYmVyIG9mIHJldHJpZXMgKi8KKwlfX3MzMgkJbWF4X3JldHJ5OwkvKiBNYXhpbWFsIG51bWJlciBvZiByZXRyaWVzICovCisJX19zMzIJCW1pbl9yX3RpbWU7CS8qIE1pbmltYWwgcmV0cnkgbGlmZXRpbWUgKi8KKwlfX3MzMgkJbWF4X3JfdGltZTsJLyogTWF4aW1hbCByZXRyeSBsaWZldGltZSAqLworCisJLyogRnJlcXVlbmN5ICovCisJX191MTYJCW51bV9jaGFubmVsczsJLyogTnVtYmVyIG9mIGNoYW5uZWxzIFswOyBudW0gLSAxXSAqLworCV9fdTgJCW51bV9mcmVxdWVuY3k7CS8qIE51bWJlciBvZiBlbnRyeSBpbiB0aGUgbGlzdCAqLworCXN0cnVjdCBpd19mcmVxCWZyZXFbSVdfTUFYX0ZSRVFVRU5DSUVTXTsJLyogbGlzdCAqLworCS8qIE5vdGUgOiB0aGlzIGZyZXF1ZW5jeSBsaXN0IGRvZXNuJ3QgbmVlZCB0byBmaXQgY2hhbm5lbCBudW1iZXJzLAorCSAqIGJlY2F1c2UgZWFjaCBlbnRyeSBjb250YWluIGl0cyBjaGFubmVsIGluZGV4ICovCit9OworCisvKgorICogUHJpdmF0ZSBpb2N0bCBpbnRlcmZhY2UgaW5mb3JtYXRpb24KKyAqLworIAorc3RydWN0CWl3X3ByaXZfYXJncworeworCV9fdTMyCQljbWQ7CQkvKiBOdW1iZXIgb2YgdGhlIGlvY3RsIHRvIGlzc3VlICovCisJX191MTYJCXNldF9hcmdzOwkvKiBUeXBlIGFuZCBudW1iZXIgb2YgYXJncyAqLworCV9fdTE2CQlnZXRfYXJnczsJLyogVHlwZSBhbmQgbnVtYmVyIG9mIGFyZ3MgKi8KKwljaGFyCQluYW1lW0lGTkFNU0laXTsJLyogTmFtZSBvZiB0aGUgZXh0ZW5zaW9uICovCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXSVJFTEVTUyBFVkVOVFMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qCisgKiBXaXJlbGVzcyBldmVudHMgYXJlIGNhcnJpZWQgdGhyb3VnaCB0aGUgcnRuZXRsaW5rIHNvY2tldCB0byB1c2VyCisgKiBzcGFjZS4gVGhleSBhcmUgZW5jYXBzdWxhdGVkIGluIHRoZSBJRkxBX1dJUkVMRVNTIGZpZWxkIG9mCisgKiBhIFJUTV9ORVdMSU5LIG1lc3NhZ2UuCisgKi8KKworLyoKKyAqIEEgV2lyZWxlc3MgRXZlbnQuIENvbnRhaW5zIGJhc2ljYWxseSB0aGUgc2FtZSBkYXRhIGFzIHRoZSBpb2N0bC4uLgorICovCitzdHJ1Y3QgaXdfZXZlbnQKK3sKKwlfX3UxNgkJbGVuOwkJCS8qIFJlYWwgbGVuZ2h0IG9mIHRoaXMgc3R1ZmYgKi8KKwlfX3UxNgkJY21kOwkJCS8qIFdpcmVsZXNzIElPQ1RMICovCisJdW5pb24gaXdyZXFfZGF0YQl1OwkJLyogSU9DVEwgZml4ZWQgcGF5bG9hZCAqLworfTsKKworLyogU2l6ZSBvZiB0aGUgRXZlbnQgcHJlZml4IChpbmNsdWRpbmcgcGFkZGluZyBhbmQgYWxpZ25lbWVudCBqdW5rKSAqLworI2RlZmluZSBJV19FVl9MQ1BfTEVOCShzaXplb2Yoc3RydWN0IGl3X2V2ZW50KSAtIHNpemVvZih1bmlvbiBpd3JlcV9kYXRhKSkKKy8qIFNpemUgb2YgdGhlIHZhcmlvdXMgZXZlbnRzICovCisjZGVmaW5lIElXX0VWX0NIQVJfTEVOCShJV19FVl9MQ1BfTEVOICsgSUZOQU1TSVopCisjZGVmaW5lIElXX0VWX1VJTlRfTEVOCShJV19FVl9MQ1BfTEVOICsgc2l6ZW9mKF9fdTMyKSkKKyNkZWZpbmUgSVdfRVZfRlJFUV9MRU4JKElXX0VWX0xDUF9MRU4gKyBzaXplb2Yoc3RydWN0IGl3X2ZyZXEpKQorI2RlZmluZSBJV19FVl9QT0lOVF9MRU4JKElXX0VWX0xDUF9MRU4gKyBzaXplb2Yoc3RydWN0IGl3X3BvaW50KSkKKyNkZWZpbmUgSVdfRVZfUEFSQU1fTEVOCShJV19FVl9MQ1BfTEVOICsgc2l6ZW9mKHN0cnVjdCBpd19wYXJhbSkpCisjZGVmaW5lIElXX0VWX0FERFJfTEVOCShJV19FVl9MQ1BfTEVOICsgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikpCisjZGVmaW5lIElXX0VWX1FVQUxfTEVOCShJV19FVl9MQ1BfTEVOICsgc2l6ZW9mKHN0cnVjdCBpd19xdWFsaXR5KSkKKworLyogTm90ZSA6IGluIHRoZSBjYXNlIG9mIGl3X3BvaW50LCB0aGUgZXh0cmEgZGF0YSB3aWxsIGNvbWUgYXQgdGhlCisgKiBlbmQgb2YgdGhlIGV2ZW50ICovCisKKyNlbmRpZgkvKiBfTElOVVhfV0lSRUxFU1NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC93b3JrcXVldWUuaCBiL2luY2x1ZGUvbGludXgvd29ya3F1ZXVlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY0NmY1MwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvd29ya3F1ZXVlLmgKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIHdvcmtxdWV1ZS5oIC0tLSB3b3JrIHF1ZXVlIGhhbmRsaW5nIGZvciBMaW51eC4KKyAqLworCisjaWZuZGVmIF9MSU5VWF9XT1JLUVVFVUVfSAorI2RlZmluZSBfTElOVVhfV09SS1FVRVVFX0gKKworI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorCitzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdDsKKworc3RydWN0IHdvcmtfc3RydWN0IHsKKwl1bnNpZ25lZCBsb25nIHBlbmRpbmc7CisJc3RydWN0IGxpc3RfaGVhZCBlbnRyeTsKKwl2b2lkICgqZnVuYykodm9pZCAqKTsKKwl2b2lkICpkYXRhOworCXZvaWQgKndxX2RhdGE7CisJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7Cit9OworCisjZGVmaW5lIF9fV09SS19JTklUSUFMSVpFUihuLCBmLCBkKSB7CQkJCVwKKyAgICAgICAgLmVudHJ5CT0geyAmKG4pLmVudHJ5LCAmKG4pLmVudHJ5IH0sCQkJXAorCS5mdW5jID0gKGYpLAkJCQkJCVwKKwkuZGF0YSA9IChkKSwJCQkJCQlcCisJLnRpbWVyID0gVElNRVJfSU5JVElBTElaRVIoTlVMTCwgMCwgMCksCQkJXAorCX0KKworI2RlZmluZSBERUNMQVJFX1dPUksobiwgZiwgZCkJCQkJCVwKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgbiA9IF9fV09SS19JTklUSUFMSVpFUihuLCBmLCBkKQorCisvKgorICogaW5pdGlhbGl6ZSBhIHdvcmstc3RydWN0J3MgZnVuYyBhbmQgZGF0YSBwb2ludGVyczoKKyAqLworI2RlZmluZSBQUkVQQVJFX1dPUksoX3dvcmssIF9mdW5jLCBfZGF0YSkJCQlcCisJZG8gewkJCQkJCQlcCisJCShfd29yayktPmZ1bmMgPSBfZnVuYzsJCQkJXAorCQkoX3dvcmspLT5kYXRhID0gX2RhdGE7CQkJCVwKKwl9IHdoaWxlICgwKQorCisvKgorICogaW5pdGlhbGl6ZSBhbGwgb2YgYSB3b3JrLXN0cnVjdDoKKyAqLworI2RlZmluZSBJTklUX1dPUksoX3dvcmssIF9mdW5jLCBfZGF0YSkJCQkJXAorCWRvIHsJCQkJCQkJXAorCQlJTklUX0xJU1RfSEVBRCgmKF93b3JrKS0+ZW50cnkpOwkJXAorCQkoX3dvcmspLT5wZW5kaW5nID0gMDsJCQkJXAorCQlQUkVQQVJFX1dPUksoKF93b3JrKSwgKF9mdW5jKSwgKF9kYXRhKSk7CVwKKwkJaW5pdF90aW1lcigmKF93b3JrKS0+dGltZXIpOwkJCVwKKwl9IHdoaWxlICgwKQorCitleHRlcm4gc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKl9fY3JlYXRlX3dvcmtxdWV1ZShjb25zdCBjaGFyICpuYW1lLAorCQkJCQkJICAgIGludCBzaW5nbGV0aHJlYWQpOworI2RlZmluZSBjcmVhdGVfd29ya3F1ZXVlKG5hbWUpIF9fY3JlYXRlX3dvcmtxdWV1ZSgobmFtZSksIDApCisjZGVmaW5lIGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKG5hbWUpIF9fY3JlYXRlX3dvcmtxdWV1ZSgobmFtZSksIDEpCisKK2V4dGVybiB2b2lkIGRlc3Ryb3lfd29ya3F1ZXVlKHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cSk7CisKK2V4dGVybiBpbnQgRkFTVENBTEwocXVldWVfd29yayhzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3EsIHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykpOworZXh0ZXJuIGludCBGQVNUQ0FMTChxdWV1ZV9kZWxheWVkX3dvcmsoc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxLCBzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmssIHVuc2lnbmVkIGxvbmcgZGVsYXkpKTsKK2V4dGVybiB2b2lkIEZBU1RDQUxMKGZsdXNoX3dvcmtxdWV1ZShzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3EpKTsKKworZXh0ZXJuIGludCBGQVNUQ0FMTChzY2hlZHVsZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykpOworZXh0ZXJuIGludCBGQVNUQ0FMTChzY2hlZHVsZV9kZWxheWVkX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrLCB1bnNpZ25lZCBsb25nIGRlbGF5KSk7CisKK2V4dGVybiBpbnQgc2NoZWR1bGVfZGVsYXllZF93b3JrX29uKGludCBjcHUsIHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaywgdW5zaWduZWQgbG9uZyBkZWxheSk7CitleHRlcm4gdm9pZCBmbHVzaF9zY2hlZHVsZWRfd29yayh2b2lkKTsKK2V4dGVybiBpbnQgY3VycmVudF9pc19rZXZlbnRkKHZvaWQpOworZXh0ZXJuIGludCBrZXZlbnRkX3VwKHZvaWQpOworCitleHRlcm4gdm9pZCBpbml0X3dvcmtxdWV1ZXModm9pZCk7Cit2b2lkIGNhbmNlbF9yZWFybWluZ19kZWxheWVkX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKKworLyoKKyAqIEtpbGwgb2ZmIGEgcGVuZGluZyBzY2hlZHVsZV9kZWxheWVkX3dvcmsoKS4gIE5vdGUgdGhhdCB0aGUgd29yayBjYWxsYmFjaworICogZnVuY3Rpb24gbWF5IHN0aWxsIGJlIHJ1bm5pbmcgb24gcmV0dXJuIGZyb20gY2FuY2VsX2RlbGF5ZWRfd29yaygpLiAgUnVuCisgKiBmbHVzaF9zY2hlZHVsZWRfd29yaygpIHRvIHdhaXQgb24gaXQuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGNhbmNlbF9kZWxheWVkX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCWludCByZXQ7CisKKwlyZXQgPSBkZWxfdGltZXJfc3luYygmd29yay0+dGltZXIpOworCWlmIChyZXQpCisJCWNsZWFyX2JpdCgwLCAmd29yay0+cGVuZGluZyk7CisJcmV0dXJuIHJldDsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3dyaXRlYmFjay5oIGIvaW5jbHVkZS9saW51eC93cml0ZWJhY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjYyY2I0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC93cml0ZWJhY2suaApAQCAtMCwwICsxLDExOCBAQAorLyoKKyAqIGluY2x1ZGUvbGludXgvd3JpdGViYWNrLmguCisgKi8KKyNpZm5kZWYgV1JJVEVCQUNLX0gKKyNkZWZpbmUgV1JJVEVCQUNLX0gKKworc3RydWN0IGJhY2tpbmdfZGV2X2luZm87CisKK2V4dGVybiBzcGlubG9ja190IGlub2RlX2xvY2s7CitleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBpbm9kZV9pbl91c2U7CitleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBpbm9kZV91bnVzZWQ7CisKKy8qCisgKiBZZXMsIHdyaXRlYmFjay5oIHJlcXVpcmVzIHNjaGVkLmgKKyAqIE5vLCBzY2hlZC5oIGlzIG5vdCBpbmNsdWRlZCBmcm9tIGhlcmUuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGN1cnJlbnRfaXNfcGRmbHVzaCh2b2lkKQoreworCXJldHVybiBjdXJyZW50LT5mbGFncyAmIFBGX0ZMVVNIRVI7Cit9CisKKy8qCisgKiBmcy9mcy13cml0ZWJhY2suYworICovCitlbnVtIHdyaXRlYmFja19zeW5jX21vZGVzIHsKKwlXQl9TWU5DX05PTkUsCS8qIERvbid0IHdhaXQgb24gYW55dGhpbmcgKi8KKwlXQl9TWU5DX0FMTCwJLyogV2FpdCBvbiBldmVyeSBtYXBwaW5nICovCisJV0JfU1lOQ19IT0xELAkvKiBIb2xkIHRoZSBpbm9kZSBvbiBzYl9kaXJ0eSBmb3Igc3lzX3N5bmMoKSAqLworfTsKKworLyoKKyAqIEEgY29udHJvbCBzdHJ1Y3R1cmUgd2hpY2ggdGVsbHMgdGhlIHdyaXRlYmFjayBjb2RlIHdoYXQgdG8gZG8uICBUaGVzZSBhcmUKKyAqIGFsd2F5cyBvbiB0aGUgc3RhY2ssIGFuZCBoZW5jZSBuZWVkIG5vIGxvY2tpbmcuICBUaGV5IGFyZSBhbHdheXMgaW5pdGlhbGlzZWQKKyAqIGluIGEgbWFubmVyIHN1Y2ggdGhhdCB1bnNwZWNpZmllZCBmaWVsZHMgYXJlIHNldCB0byB6ZXJvLgorICovCitzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgeworCXN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGk7CS8qIElmICFOVUxMLCBvbmx5IHdyaXRlIGJhY2sgdGhpcworCQkJCQkgICBxdWV1ZSAqLworCWVudW0gd3JpdGViYWNrX3N5bmNfbW9kZXMgc3luY19tb2RlOworCXVuc2lnbmVkIGxvbmcgKm9sZGVyX3RoYW5fdGhpczsJLyogSWYgIU5VTEwsIG9ubHkgd3JpdGUgYmFjayBpbm9kZXMKKwkJCQkJICAgb2xkZXIgdGhhbiB0aGlzICovCisJbG9uZyBucl90b193cml0ZTsJCS8qIFdyaXRlIHRoaXMgbWFueSBwYWdlcywgYW5kIGRlY3JlbWVudAorCQkJCQkgICB0aGlzIGZvciBlYWNoIHBhZ2Ugd3JpdHRlbiAqLworCWxvbmcgcGFnZXNfc2tpcHBlZDsJCS8qIFBhZ2VzIHdoaWNoIHdlcmUgbm90IHdyaXR0ZW4gKi8KKworCS8qCisJICogRm9yIGFfb3BzLT53cml0ZXBhZ2VzKCk6IGlzIHN0YXJ0IG9yIGVuZCBhcmUgbm9uLXplcm8gdGhlbiB0aGlzIGlzCisJICogYSBoaW50IHRoYXQgdGhlIGZpbGVzeXN0ZW0gbmVlZCBvbmx5IHdyaXRlIG91dCB0aGUgcGFnZXMgaW5zaWRlIHRoYXQKKwkgKiBieXRlcmFuZ2UuICBUaGUgYnl0ZSBhdCBgZW5kJyBpcyBpbmNsdWRlZCBpbiB0aGUgd3JpdGVvdXQgcmVxdWVzdC4KKwkgKi8KKwlsb2ZmX3Qgc3RhcnQ7CisJbG9mZl90IGVuZDsKKworCXVuc2lnbmVkIG5vbmJsb2NraW5nOjE7CQkJLyogRG9uJ3QgZ2V0IHN0dWNrIG9uIHJlcXVlc3QgcXVldWVzICovCisJdW5zaWduZWQgZW5jb3VudGVyZWRfY29uZ2VzdGlvbjoxOwkvKiBBbiBvdXRwdXQ6IGEgcXVldWUgaXMgZnVsbCAqLworCXVuc2lnbmVkIGZvcl9rdXBkYXRlOjE7CQkJLyogQSBrdXBkYXRlIHdyaXRlYmFjayAqLworCXVuc2lnbmVkIGZvcl9yZWNsYWltOjE7CQkJLyogSW52b2tlZCBmcm9tIHRoZSBwYWdlIGFsbG9jYXRvciAqLworfTsKKworLyoKKyAqIC0+d3JpdGVwYWdlKCkgcmV0dXJuIHZhbHVlcyAobWFrZSB0aGVzZSBtdWNoIGxhcmdlciB0aGFuIGEgcGFnZXNpemUsIGluCisgKiBjYXNlIHNvbWUgZnMgaXMgcmV0dXJuaW5nIG51bWJlci1vZi1ieXRlcy13cml0dGVuIGZyb20gd3JpdGVwYWdlKQorICovCisjZGVmaW5lIFdSSVRFUEFHRV9BQ1RJVkFURQkweDgwMDAwCS8qIElPIHdhcyBub3Qgc3RhcnRlZDogYWN0aXZhdGUgcGFnZSAqLworCisvKgorICogZnMvZnMtd3JpdGViYWNrLmMKKyAqLwkKK3ZvaWQgd3JpdGViYWNrX2lub2RlcyhzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyk7Cit2b2lkIHdha2VfdXBfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7CitpbnQgaW5vZGVfd2FpdCh2b2lkICopOwordm9pZCBzeW5jX2lub2Rlc19zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgaW50IHdhaXQpOwordm9pZCBzeW5jX2lub2RlcyhpbnQgd2FpdCk7CisKKy8qIHdyaXRlYmFjay5oIHJlcXVpcmVzIGZzLmg7IGl0LCB0b28sIGlzIG5vdCBpbmNsdWRlZCBmcm9tIGhlcmUuICovCitzdGF0aWMgaW5saW5lIHZvaWQgd2FpdF9vbl9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCW1pZ2h0X3NsZWVwKCk7CisJd2FpdF9vbl9iaXQoJmlub2RlLT5pX3N0YXRlLCBfX0lfTE9DSywgaW5vZGVfd2FpdCwKKwkJCQkJCQlUQVNLX1VOSU5URVJSVVBUSUJMRSk7Cit9CisKKy8qCisgKiBtbS9wYWdlLXdyaXRlYmFjay5jCisgKi8KK2ludCB3YWtldXBfYmRmbHVzaChsb25nIG5yX3BhZ2VzKTsKK3ZvaWQgbGFwdG9wX2lvX2NvbXBsZXRpb24odm9pZCk7Cit2b2lkIGxhcHRvcF9zeW5jX2NvbXBsZXRpb24odm9pZCk7Cit2b2lkIHRocm90dGxlX3ZtX3dyaXRlb3V0KHZvaWQpOworCisvKiBUaGVzZSBhcmUgZXhwb3J0ZWQgdG8gc3lzY3RsLiAqLworZXh0ZXJuIGludCBkaXJ0eV9iYWNrZ3JvdW5kX3JhdGlvOworZXh0ZXJuIGludCB2bV9kaXJ0eV9yYXRpbzsKK2V4dGVybiBpbnQgZGlydHlfd3JpdGViYWNrX2NlbnRpc2VjczsKK2V4dGVybiBpbnQgZGlydHlfZXhwaXJlX2NlbnRpc2VjczsKK2V4dGVybiBpbnQgYmxvY2tfZHVtcDsKK2V4dGVybiBpbnQgbGFwdG9wX21vZGU7CisKK3N0cnVjdCBjdGxfdGFibGU7CitzdHJ1Y3QgZmlsZTsKK2ludCBkaXJ0eV93cml0ZWJhY2tfY2VudGlzZWNzX2hhbmRsZXIoc3RydWN0IGN0bF90YWJsZSAqLCBpbnQsIHN0cnVjdCBmaWxlICosCisJCQkJICAgICAgdm9pZCBfX3VzZXIgKiwgc2l6ZV90ICosIGxvZmZfdCAqKTsKKwordm9pZCBwYWdlX3dyaXRlYmFja19pbml0KHZvaWQpOwordm9pZCBiYWxhbmNlX2RpcnR5X3BhZ2VzX3JhdGVsaW1pdGVkKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKTsKK2ludCBwZGZsdXNoX29wZXJhdGlvbih2b2lkICgqZm4pKHVuc2lnbmVkIGxvbmcpLCB1bnNpZ25lZCBsb25nIGFyZzApOworaW50IGRvX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTsKK2ludCBzeW5jX3BhZ2VfcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCisJCQlsb2ZmX3QgcG9zLCBzaXplX3QgY291bnQpOworaW50IHN5bmNfcGFnZV9yYW5nZV9ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UKKwkJKm1hcHBpbmcsIGxvZmZfdCBwb3MsIHNpemVfdCBjb3VudCk7CisKKy8qIHBkZmx1c2guYyAqLworZXh0ZXJuIGludCBucl9wZGZsdXNoX3RocmVhZHM7CS8qIEdsb2JhbCBzbyBpdCBjYW4gYmUgZXhwb3J0ZWQgdG8gc3lzY3RsCisJCQkJICAgcmVhZC1vbmx5LiAqLworCisKKyNlbmRpZgkJLyogV1JJVEVCQUNLX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgveDI1LmggYi9pbmNsdWRlL2xpbnV4L3gyNS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1MzFjZmUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3gyNS5oCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogVGhlc2UgYXJlIHRoZSBwdWJsaWMgZWxlbWVudHMgb2YgdGhlIExpbnV4IGtlcm5lbCBYLjI1IGltcGxlbWVudGF0aW9uLgorICoKKyAqIAlIaXN0b3J5CisgKgltYXIvMjAvMDAJRGFuaWVsYSBTcXVhc3NvbmkgRGlzYWJsaW5nL2VuYWJsaW5nIG9mIGZhY2lsaXRpZXMgCisgKgkJCQkJICBuZWdvdGlhdGlvbi4KKyAqLworCisjaWZuZGVmCVgyNV9LRVJORUxfSAorI2RlZmluZQlYMjVfS0VSTkVMX0gKKworI2RlZmluZQlTSU9DWDI1R1NVQlNDUklQCShTSU9DUFJPVE9QUklWQVRFICsgMCkKKyNkZWZpbmUJU0lPQ1gyNVNTVUJTQ1JJUAkoU0lPQ1BST1RPUFJJVkFURSArIDEpCisjZGVmaW5lCVNJT0NYMjVHRkFDSUxJVElFUwkoU0lPQ1BST1RPUFJJVkFURSArIDIpCisjZGVmaW5lCVNJT0NYMjVTRkFDSUxJVElFUwkoU0lPQ1BST1RPUFJJVkFURSArIDMpCisjZGVmaW5lCVNJT0NYMjVHQ0FMTFVTRVJEQVRBCShTSU9DUFJPVE9QUklWQVRFICsgNCkKKyNkZWZpbmUJU0lPQ1gyNVNDQUxMVVNFUkRBVEEJKFNJT0NQUk9UT1BSSVZBVEUgKyA1KQorI2RlZmluZQlTSU9DWDI1R0NBVVNFRElBRwkoU0lPQ1BST1RPUFJJVkFURSArIDYpCisKKy8qCisgKglWYWx1ZXMgZm9yIHtnZXQsc2V0fXNvY2tvcHQuCisgKi8KKyNkZWZpbmUJWDI1X1FCSVRJTkNMCQkxCisKKy8qCisgKglYLjI1IFBhY2tldCBTaXplIHZhbHVlcy4KKyAqLworI2RlZmluZQlYMjVfUFMxNgkJNAorI2RlZmluZQlYMjVfUFMzMgkJNQorI2RlZmluZQlYMjVfUFM2NAkJNgorI2RlZmluZQlYMjVfUFMxMjgJCTcKKyNkZWZpbmUJWDI1X1BTMjU2CQk4CisjZGVmaW5lCVgyNV9QUzUxMgkJOQorI2RlZmluZQlYMjVfUFMxMDI0CQkxMAorI2RlZmluZQlYMjVfUFMyMDQ4CQkxMQorI2RlZmluZQlYMjVfUFM0MDk2CQkxMgorCisvKgorICogQW4gWC4xMjEgYWRkcmVzcywgaXQgaXMgaGVsZCBhcyBBU0NJSSB0ZXh0LCBudWxsIHRlcm1pbmF0ZWQsIHVwIHRvIDE1CisgKiBkaWdpdHMgYW5kIGEgbnVsbCB0ZXJtaW5hdG9yLgorICovCitzdHJ1Y3QgeDI1X2FkZHJlc3MgeworCWNoYXIgeDI1X2FkZHJbMTZdOworfTsKKworLyoKKyAqCUxpbnV4IFguMjUgQWRkcmVzcyBzdHJ1Y3R1cmUsIHVzZWQgZm9yIGJpbmQsIGFuZCBjb25uZWN0IG1vc3RseS4KKyAqLworc3RydWN0IHNvY2thZGRyX3gyNSB7CisJc2FfZmFtaWx5X3QJICAgc3gyNV9mYW1pbHk7CQkvKiBNdXN0IGJlIEFGX1gyNSAqLworCXN0cnVjdCB4MjVfYWRkcmVzcyBzeDI1X2FkZHI7CQkvKiBYLjEyMSBBZGRyZXNzICovCit9OworCisvKgorICoJRFRFL0RDRSBzdWJzY3JpcHRpb24gb3B0aW9ucy4KKyAqCisgKiAgICAgIEFzIHRoaXMgaXMgbWlzc2luZyBsb3RzIG9mIG9wdGlvbnMsIHVzZXIgc2hvdWxkIGV4cGVjdCBtYWpvcgorICoJY2hhbmdlcyBvZiB0aGlzIHN0cnVjdHVyZSBpbiAyLjUueCB3aGljaCBtaWdodCBicmVhayBjb21wYXRpYmlsdHkuCisgKiAgICAgIFRoZSBzb21ld2hhdCB1Z2x5IGRpbWVuc2lvbiAyMDAtc2l6ZW9mKCkgaXMgbmVlZGVkIHRvIG1haW50YWluCisgKgliYWNrd2FyZCBjb21wYXRpYmlsaXR5LgorICovCitzdHJ1Y3QgeDI1X3N1YnNjcmlwX3N0cnVjdCB7CisJY2hhciBkZXZpY2VbMjAwLXNpemVvZih1bnNpZ25lZCBsb25nKV07CisJdW5zaWduZWQgbG9uZwlnbG9iYWxfZmFjaWxfbWFzazsJLyogMCB0byBkaXNhYmxlIG5lZ290aWF0aW9uICovCisJdW5zaWduZWQgaW50CWV4dGVuZGVkOworfTsKKworLyogdmFsdWVzIGZvciBhYm92ZSBnbG9iYWxfZmFjaWxfbWFzayAqLworCisjZGVmaW5lCVgyNV9NQVNLX1JFVkVSU0UJMHgwMQkKKyNkZWZpbmUJWDI1X01BU0tfVEhST1VHSFBVVAkweDAyCisjZGVmaW5lCVgyNV9NQVNLX1BBQ0tFVF9TSVpFCTB4MDQKKyNkZWZpbmUJWDI1X01BU0tfV0lORE9XX1NJWkUJMHgwOAorCisKKworLyoKKyAqCVJvdXRpbmcgdGFibGUgY29udHJvbCBzdHJ1Y3R1cmUuCisgKi8KK3N0cnVjdCB4MjVfcm91dGVfc3RydWN0IHsKKwlzdHJ1Y3QgeDI1X2FkZHJlc3MgYWRkcmVzczsKKwl1bnNpZ25lZCBpbnQJICAgc2lnZGlnaXRzOworCWNoYXIJCSAgIGRldmljZVsyMDBdOworfTsKKworLyoKKyAqCUZhY2lsaXRpZXMgc3RydWN0dXJlLgorICovCitzdHJ1Y3QgeDI1X2ZhY2lsaXRpZXMgeworCXVuc2lnbmVkIGludAl3aW5zaXplX2luLCB3aW5zaXplX291dDsKKwl1bnNpZ25lZCBpbnQJcGFjc2l6ZV9pbiwgcGFjc2l6ZV9vdXQ7CisJdW5zaWduZWQgaW50CXRocm91Z2hwdXQ7CisJdW5zaWduZWQgaW50CXJldmVyc2U7Cit9OworCisvKgorICoJQ2FsbCBVc2VyIERhdGEgc3RydWN0dXJlLgorICovCitzdHJ1Y3QgeDI1X2NhbGx1c2VyZGF0YSB7CisJdW5zaWduZWQgaW50CWN1ZGxlbmd0aDsKKwl1bnNpZ25lZCBjaGFyCWN1ZGRhdGFbMTI4XTsKK307CisKKy8qCisgKglDYWxsIGNsZWFyaW5nIENhdXNlIGFuZCBEaWFnbm9zdGljIHN0cnVjdHVyZS4KKyAqLworc3RydWN0IHgyNV9jYXVzZWRpYWcgeworCXVuc2lnbmVkIGNoYXIJY2F1c2U7CisJdW5zaWduZWQgY2hhcglkaWFnbm9zdGljOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3hhdHRyLmggYi9pbmNsdWRlL2xpbnV4L3hhdHRyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNmOWM2MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgveGF0dHIuaApAQCAtMCwwICsxLDMzIEBACisvKgorICBGaWxlOiBsaW51eC94YXR0ci5oCisKKyAgRXh0ZW5kZWQgYXR0cmlidXRlcyBoYW5kbGluZy4KKworICBDb3B5cmlnaHQgKEMpIDIwMDEgYnkgQW5kcmVhcyBHcnVlbmJhY2hlciA8YS5ncnVlbmJhY2hlckBjb21wdXRlci5vcmc+CisgIENvcHlyaWdodCAoYykgMjAwMS0yMDAyIFNpbGljb24gR3JhcGhpY3MsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgIENvcHlyaWdodCAoYykgMjAwNCBSZWQgSGF0LCBJbmMuLCBKYW1lcyBNb3JyaXMgPGptb3JyaXNAcmVkaGF0LmNvbT4KKyovCisjaWZuZGVmIF9MSU5VWF9YQVRUUl9ICisjZGVmaW5lIF9MSU5VWF9YQVRUUl9ICisKKyNkZWZpbmUgWEFUVFJfQ1JFQVRFCTB4MQkvKiBzZXQgdmFsdWUsIGZhaWwgaWYgYXR0ciBhbHJlYWR5IGV4aXN0cyAqLworI2RlZmluZSBYQVRUUl9SRVBMQUNFCTB4MgkvKiBzZXQgdmFsdWUsIGZhaWwgaWYgYXR0ciBkb2VzIG5vdCBleGlzdCAqLworCisjZGVmaW5lIFhBVFRSX1NFQ1VSSVRZX1BSRUZJWAkic2VjdXJpdHkuIgorCitzdHJ1Y3QgeGF0dHJfaGFuZGxlciB7CisJY2hhciAqcHJlZml4OworCXNpemVfdCAoKmxpc3QpKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNoYXIgKmxpc3QsIHNpemVfdCBsaXN0X3NpemUsCisJCSAgICAgICBjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZV9sZW4pOworCWludCAoKmdldCkoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLAorCQkgICBzaXplX3Qgc2l6ZSk7CisJaW50ICgqc2V0KShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCB2b2lkICpidWZmZXIsCisJCSAgIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpOworfTsKKworc3NpemVfdCBnZW5lcmljX2dldHhhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSk7Citzc2l6ZV90IGdlbmVyaWNfbGlzdHhhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciAqYnVmZmVyLCBzaXplX3QgYnVmZmVyX3NpemUpOworaW50IGdlbmVyaWNfc2V0eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCB2b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUsIGludCBmbGFncyk7CitpbnQgZ2VuZXJpY19yZW1vdmV4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUpOworCisjZW5kaWYJLyogX0xJTlVYX1hBVFRSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgveGF0dHJfYWNsLmggYi9pbmNsdWRlL2xpbnV4L3hhdHRyX2FjbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhMWY5YjkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3hhdHRyX2FjbC5oCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgIEZpbGU6IGxpbnV4L3hhdHRyX2FjbC5oCisKKyAgKGV4dGVuZGVkIGF0dHJpYnV0ZSByZXByZXNlbnRhdGlvbiBvZiBhY2Nlc3MgY29udHJvbCBsaXN0cykKKworICAoQykgMjAwMCBBbmRyZWFzIEdydWVuYmFjaGVyLCA8YS5ncnVlbmJhY2hlckBjb21wdXRlci5vcmc+CisqLworCisjaWZuZGVmIF9MSU5VWF9YQVRUUl9BQ0xfSAorI2RlZmluZSBfTElOVVhfWEFUVFJfQUNMX0gKKworI2luY2x1ZGUgPGxpbnV4L3Bvc2l4X2FjbC5oPgorCisjZGVmaW5lIFhBVFRSX05BTUVfQUNMX0FDQ0VTUwkic3lzdGVtLnBvc2l4X2FjbF9hY2Nlc3MiCisjZGVmaW5lIFhBVFRSX05BTUVfQUNMX0RFRkFVTFQJInN5c3RlbS5wb3NpeF9hY2xfZGVmYXVsdCIKKworI2RlZmluZSBYQVRUUl9BQ0xfVkVSU0lPTgkweDAwMDIKKwordHlwZWRlZiBzdHJ1Y3QgeworCV9fdTE2CQllX3RhZzsKKwlfX3UxNgkJZV9wZXJtOworCV9fdTMyCQllX2lkOworfSB4YXR0cl9hY2xfZW50cnk7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlfX3UzMgkJYV92ZXJzaW9uOworCXhhdHRyX2FjbF9lbnRyeQlhX2VudHJpZXNbMF07Cit9IHhhdHRyX2FjbF9oZWFkZXI7CisKK3N0YXRpYyBpbmxpbmUgc2l6ZV90IHhhdHRyX2FjbF9zaXplKGludCBjb3VudCkKK3sKKwlyZXR1cm4gc2l6ZW9mKHhhdHRyX2FjbF9oZWFkZXIpICsgY291bnQgKiBzaXplb2YoeGF0dHJfYWNsX2VudHJ5KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgeGF0dHJfYWNsX2NvdW50KHNpemVfdCBzaXplKQoreworCWlmIChzaXplIDwgc2l6ZW9mKHhhdHRyX2FjbF9oZWFkZXIpKQorCQlyZXR1cm4gLTE7CisJc2l6ZSAtPSBzaXplb2YoeGF0dHJfYWNsX2hlYWRlcik7CisJaWYgKHNpemUgJSBzaXplb2YoeGF0dHJfYWNsX2VudHJ5KSkKKwkJcmV0dXJuIC0xOworCXJldHVybiBzaXplIC8gc2l6ZW9mKHhhdHRyX2FjbF9lbnRyeSk7Cit9CisKK3N0cnVjdCBwb3NpeF9hY2wgKiBwb3NpeF9hY2xfZnJvbV94YXR0cihjb25zdCB2b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUpOworaW50IHBvc2l4X2FjbF90b194YXR0cihjb25zdCBzdHJ1Y3QgcG9zaXhfYWNsICphY2wsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpOworCisKKworI2VuZGlmIC8qIF9MSU5VWF9YQVRUUl9BQ0xfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC94ZnJtLmggYi9pbmNsdWRlL2xpbnV4L3hmcm0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGRmMDJhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC94ZnJtLmgKQEAgLTAsMCArMSwyNTggQEAKKyNpZm5kZWYgX0xJTlVYX1hGUk1fSAorI2RlZmluZSBfTElOVVhfWEZSTV9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKiBBbGwgb2YgdGhlIHN0cnVjdHVyZXMgaW4gdGhpcyBmaWxlIG1heSBub3QgY2hhbmdlIHNpemUgYXMgdGhleSBhcmUKKyAqIHBhc3NlZCBpbnRvIHRoZSBrZXJuZWwgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsgc29ja2V0cy4KKyAqLworCisvKiBTdHJ1Y3R1cmUgdG8gZW5jYXBzdWxhdGUgYWRkcmVzc2VzLiBJIGRvIG5vdCB3YW50IHRvIHVzZQorICogInN0YW5kYXJkIiBzdHJ1Y3R1cmUuIE15IGFwb2xvZ2llcy4KKyAqLwordHlwZWRlZiB1bmlvbgoreworCV9fdTMyCQlhNDsKKwlfX3UzMgkJYTZbNF07Cit9IHhmcm1fYWRkcmVzc190OworCisvKiBJZGVudCBvZiBhIHNwZWNpZmljIHhmcm1fc3RhdGUuIEl0IGlzIHVzZWQgb24gaW5wdXQgdG8gbG9va3VwCisgKiB0aGUgc3RhdGUgYnkgKHNwaSxkYWRkcixhaC9lc3ApIG9yIHRvIHN0b3JlIGluZm9ybWF0aW9uIGFib3V0CisgKiBzcGksIHByb3RvY29sIGFuZCB0dW5uZWwgYWRkcmVzcyBvbiBvdXRwdXQuCisgKi8KK3N0cnVjdCB4ZnJtX2lkCit7CisJeGZybV9hZGRyZXNzX3QJZGFkZHI7CisJX191MzIJCXNwaTsKKwlfX3U4CQlwcm90bzsKK307CisKKy8qIFNlbGVjdG9yLCB1c2VkIGFzIHNlbGVjdG9yIGJvdGggb24gcG9saWN5IHJ1bGVzIChTUEQpIGFuZCBTQXMuICovCisKK3N0cnVjdCB4ZnJtX3NlbGVjdG9yCit7CisJeGZybV9hZGRyZXNzX3QJZGFkZHI7CisJeGZybV9hZGRyZXNzX3QJc2FkZHI7CisJX191MTYJZHBvcnQ7CisJX191MTYJZHBvcnRfbWFzazsKKwlfX3UxNglzcG9ydDsKKwlfX3UxNglzcG9ydF9tYXNrOworCV9fdTE2CWZhbWlseTsKKwlfX3U4CXByZWZpeGxlbl9kOworCV9fdTgJcHJlZml4bGVuX3M7CisJX191OAlwcm90bzsKKwlpbnQJaWZpbmRleDsKKwl1aWRfdAl1c2VyOworfTsKKworI2RlZmluZSBYRlJNX0lORiAofihfX3U2NCkwKQorCitzdHJ1Y3QgeGZybV9saWZldGltZV9jZmcKK3sKKwlfX3U2NAlzb2Z0X2J5dGVfbGltaXQ7CisJX191NjQJaGFyZF9ieXRlX2xpbWl0OworCV9fdTY0CXNvZnRfcGFja2V0X2xpbWl0OworCV9fdTY0CWhhcmRfcGFja2V0X2xpbWl0OworCV9fdTY0CXNvZnRfYWRkX2V4cGlyZXNfc2Vjb25kczsKKwlfX3U2NAloYXJkX2FkZF9leHBpcmVzX3NlY29uZHM7CisJX191NjQJc29mdF91c2VfZXhwaXJlc19zZWNvbmRzOworCV9fdTY0CWhhcmRfdXNlX2V4cGlyZXNfc2Vjb25kczsKK307CisKK3N0cnVjdCB4ZnJtX2xpZmV0aW1lX2N1cgoreworCV9fdTY0CWJ5dGVzOworCV9fdTY0CXBhY2tldHM7CisJX191NjQJYWRkX3RpbWU7CisJX191NjQJdXNlX3RpbWU7Cit9OworCitzdHJ1Y3QgeGZybV9yZXBsYXlfc3RhdGUKK3sKKwlfX3UzMglvc2VxOworCV9fdTMyCXNlcTsKKwlfX3UzMgliaXRtYXA7Cit9OworCitzdHJ1Y3QgeGZybV9hbGdvIHsKKwljaGFyCWFsZ19uYW1lWzY0XTsKKwlpbnQJYWxnX2tleV9sZW47ICAgIC8qIGluIGJpdHMgKi8KKwljaGFyCWFsZ19rZXlbMF07Cit9OworCitzdHJ1Y3QgeGZybV9zdGF0cyB7CisJX191MzIJcmVwbGF5X3dpbmRvdzsKKwlfX3UzMglyZXBsYXk7CisJX191MzIJaW50ZWdyaXR5X2ZhaWxlZDsKK307CisKK2VudW0KK3sKKwlYRlJNX1BPTElDWV9JTgk9IDAsCisJWEZSTV9QT0xJQ1lfT1VUCT0gMSwKKwlYRlJNX1BPTElDWV9GV0QJPSAyLAorCVhGUk1fUE9MSUNZX01BWAk9IDMKK307CisKK2VudW0KK3sKKwlYRlJNX1NIQVJFX0FOWSwJCS8qIE5vIGxpbWl0YXRpb25zICovCisJWEZSTV9TSEFSRV9TRVNTSU9OLAkvKiBGb3IgdGhpcyBzZXNzaW9uIG9ubHkgKi8KKwlYRlJNX1NIQVJFX1VTRVIsCS8qIEZvciB0aGlzIHVzZXIgb25seSAqLworCVhGUk1fU0hBUkVfVU5JUVVFCS8qIFVzZSBvbmNlICovCit9OworCisvKiBOZXRsaW5rIGNvbmZpZ3VyYXRpb24gbWVzc2FnZXMuICAqLworZW51bSB7CisJWEZSTV9NU0dfQkFTRSA9IDB4MTAsCisKKwlYRlJNX01TR19ORVdTQSA9IDB4MTAsCisjZGVmaW5lIFhGUk1fTVNHX05FV1NBIFhGUk1fTVNHX05FV1NBCisJWEZSTV9NU0dfREVMU0EsCisjZGVmaW5lIFhGUk1fTVNHX0RFTFNBIFhGUk1fTVNHX0RFTFNBCisJWEZSTV9NU0dfR0VUU0EsCisjZGVmaW5lIFhGUk1fTVNHX0dFVFNBIFhGUk1fTVNHX0dFVFNBCisKKwlYRlJNX01TR19ORVdQT0xJQ1ksCisjZGVmaW5lIFhGUk1fTVNHX05FV1BPTElDWSBYRlJNX01TR19ORVdQT0xJQ1kKKwlYRlJNX01TR19ERUxQT0xJQ1ksCisjZGVmaW5lIFhGUk1fTVNHX0RFTFBPTElDWSBYRlJNX01TR19ERUxQT0xJQ1kKKwlYRlJNX01TR19HRVRQT0xJQ1ksCisjZGVmaW5lIFhGUk1fTVNHX0dFVFBPTElDWSBYRlJNX01TR19HRVRQT0xJQ1kKKworCVhGUk1fTVNHX0FMTE9DU1BJLAorI2RlZmluZSBYRlJNX01TR19BTExPQ1NQSSBYRlJNX01TR19BTExPQ1NQSQorCVhGUk1fTVNHX0FDUVVJUkUsCisjZGVmaW5lIFhGUk1fTVNHX0FDUVVJUkUgWEZSTV9NU0dfQUNRVUlSRQorCVhGUk1fTVNHX0VYUElSRSwKKyNkZWZpbmUgWEZSTV9NU0dfRVhQSVJFIFhGUk1fTVNHX0VYUElSRQorCisJWEZSTV9NU0dfVVBEUE9MSUNZLAorI2RlZmluZSBYRlJNX01TR19VUERQT0xJQ1kgWEZSTV9NU0dfVVBEUE9MSUNZCisJWEZSTV9NU0dfVVBEU0EsCisjZGVmaW5lIFhGUk1fTVNHX1VQRFNBIFhGUk1fTVNHX1VQRFNBCisKKwlYRlJNX01TR19QT0xFWFBJUkUsCisjZGVmaW5lIFhGUk1fTVNHX1BPTEVYUElSRSBYRlJNX01TR19QT0xFWFBJUkUKKworCVhGUk1fTVNHX0ZMVVNIU0EsCisjZGVmaW5lIFhGUk1fTVNHX0ZMVVNIU0EgWEZSTV9NU0dfRkxVU0hTQQorCVhGUk1fTVNHX0ZMVVNIUE9MSUNZLAorI2RlZmluZSBYRlJNX01TR19GTFVTSFBPTElDWSBYRlJNX01TR19GTFVTSFBPTElDWQorCisJWEZSTV9NU0dfTUFYCit9OworCitzdHJ1Y3QgeGZybV91c2VyX3RtcGwgeworCXN0cnVjdCB4ZnJtX2lkCQlpZDsKKwlfX3UxNgkJCWZhbWlseTsKKwl4ZnJtX2FkZHJlc3NfdAkJc2FkZHI7CisJX191MzIJCQlyZXFpZDsKKwlfX3U4CQkJbW9kZTsKKwlfX3U4CQkJc2hhcmU7CisJX191OAkJCW9wdGlvbmFsOworCV9fdTMyCQkJYWFsZ29zOworCV9fdTMyCQkJZWFsZ29zOworCV9fdTMyCQkJY2FsZ29zOworfTsKKworc3RydWN0IHhmcm1fZW5jYXBfdG1wbCB7CisJX191MTYJCWVuY2FwX3R5cGU7CisJX191MTYJCWVuY2FwX3Nwb3J0OworCV9fdTE2CQllbmNhcF9kcG9ydDsKKwl4ZnJtX2FkZHJlc3NfdAllbmNhcF9vYTsKK307CisKKy8qIE5ldGxpbmsgbWVzc2FnZSBhdHRyaWJ1dGVzLiAgKi8KK2VudW0geGZybV9hdHRyX3R5cGVfdCB7CisJWEZSTUFfVU5TUEVDLAorCVhGUk1BX0FMR19BVVRILAkJLyogc3RydWN0IHhmcm1fYWxnbyAqLworCVhGUk1BX0FMR19DUllQVCwJLyogc3RydWN0IHhmcm1fYWxnbyAqLworCVhGUk1BX0FMR19DT01QLAkJLyogc3RydWN0IHhmcm1fYWxnbyAqLworCVhGUk1BX0VOQ0FQLAkJLyogc3RydWN0IHhmcm1fYWxnbyArIHN0cnVjdCB4ZnJtX2VuY2FwX3RtcGwgKi8KKwlYRlJNQV9UTVBMLAkJLyogMSBvciBtb3JlIHN0cnVjdCB4ZnJtX3VzZXJfdG1wbCAqLworCV9fWEZSTUFfTUFYCisKKyNkZWZpbmUgWEZSTUFfTUFYIChfX1hGUk1BX01BWCAtIDEpCit9OworCitzdHJ1Y3QgeGZybV91c2Vyc2FfaW5mbyB7CisJc3RydWN0IHhmcm1fc2VsZWN0b3IJCXNlbDsKKwlzdHJ1Y3QgeGZybV9pZAkJCWlkOworCXhmcm1fYWRkcmVzc190CQkJc2FkZHI7CisJc3RydWN0IHhmcm1fbGlmZXRpbWVfY2ZnCWxmdDsKKwlzdHJ1Y3QgeGZybV9saWZldGltZV9jdXIJY3VybGZ0OworCXN0cnVjdCB4ZnJtX3N0YXRzCQlzdGF0czsKKwlfX3UzMgkJCQlzZXE7CisJX191MzIJCQkJcmVxaWQ7CisJX191MTYJCQkJZmFtaWx5OworCV9fdTgJCQkJbW9kZTsgLyogMD10cmFuc3BvcnQsMT10dW5uZWwgKi8KKwlfX3U4CQkJCXJlcGxheV93aW5kb3c7CisJX191OAkJCQlmbGFnczsKKyNkZWZpbmUgWEZSTV9TVEFURV9OT0VDTgkxCisjZGVmaW5lIFhGUk1fU1RBVEVfREVDQVBfRFNDUAkyCit9OworCitzdHJ1Y3QgeGZybV91c2Vyc2FfaWQgeworCXhmcm1fYWRkcmVzc190CQkJZGFkZHI7CisJX191MzIJCQkJc3BpOworCV9fdTE2CQkJCWZhbWlseTsKKwlfX3U4CQkJCXByb3RvOworfTsKKworc3RydWN0IHhmcm1fdXNlcnNwaV9pbmZvIHsKKwlzdHJ1Y3QgeGZybV91c2Vyc2FfaW5mbwkJaW5mbzsKKwlfX3UzMgkJCQltaW47CisJX191MzIJCQkJbWF4OworfTsKKworc3RydWN0IHhmcm1fdXNlcnBvbGljeV9pbmZvIHsKKwlzdHJ1Y3QgeGZybV9zZWxlY3RvcgkJc2VsOworCXN0cnVjdCB4ZnJtX2xpZmV0aW1lX2NmZwlsZnQ7CisJc3RydWN0IHhmcm1fbGlmZXRpbWVfY3VyCWN1cmxmdDsKKwlfX3UzMgkJCQlwcmlvcml0eTsKKwlfX3UzMgkJCQlpbmRleDsKKwlfX3U4CQkJCWRpcjsKKwlfX3U4CQkJCWFjdGlvbjsKKyNkZWZpbmUgWEZSTV9QT0xJQ1lfQUxMT1cJMAorI2RlZmluZSBYRlJNX1BPTElDWV9CTE9DSwkxCisJX191OAkJCQlmbGFnczsKKyNkZWZpbmUgWEZSTV9QT0xJQ1lfTE9DQUxPSwkxCS8qIEFsbG93IHVzZXIgdG8gb3ZlcnJpZGUgZ2xvYmFsIHBvbGljeSAqLworCV9fdTgJCQkJc2hhcmU7Cit9OworCitzdHJ1Y3QgeGZybV91c2VycG9saWN5X2lkIHsKKwlzdHJ1Y3QgeGZybV9zZWxlY3RvcgkJc2VsOworCV9fdTMyCQkJCWluZGV4OworCV9fdTgJCQkJZGlyOworfTsKKworc3RydWN0IHhmcm1fdXNlcl9hY3F1aXJlIHsKKwlzdHJ1Y3QgeGZybV9pZAkJCWlkOworCXhmcm1fYWRkcmVzc190CQkJc2FkZHI7CisJc3RydWN0IHhmcm1fc2VsZWN0b3IJCXNlbDsKKwlzdHJ1Y3QgeGZybV91c2VycG9saWN5X2luZm8JcG9saWN5OworCV9fdTMyCQkJCWFhbGdvczsKKwlfX3UzMgkJCQllYWxnb3M7CisJX191MzIJCQkJY2FsZ29zOworCV9fdTMyCQkJCXNlcTsKK307CisKK3N0cnVjdCB4ZnJtX3VzZXJfZXhwaXJlIHsKKwlzdHJ1Y3QgeGZybV91c2Vyc2FfaW5mbwkJc3RhdGU7CisJX191OAkJCQloYXJkOworfTsKKworc3RydWN0IHhmcm1fdXNlcl9wb2xleHBpcmUgeworCXN0cnVjdCB4ZnJtX3VzZXJwb2xpY3lfaW5mbwlwb2w7CisJX191OAkJCQloYXJkOworfTsKKworc3RydWN0IHhmcm1fdXNlcnNhX2ZsdXNoIHsKKwlfX3U4CQkJCXByb3RvOworfTsKKworI2RlZmluZSBYRlJNR1JQX0FDUVVJUkUJCTEKKyNkZWZpbmUgWEZSTUdSUF9FWFBJUkUJCTIKKworI2VuZGlmIC8qIF9MSU5VWF9YRlJNX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgveWFtLmggYi9pbmNsdWRlL2xpbnV4L3lhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmZTI4MjIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3lhbS5oCkBAIC0wLDAgKzEsODIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCXlhbS5oICAtLSBZQU0gcmFkaW8gbW9kZW0gZHJpdmVyLgorICoKKyAqCUNvcHlyaWdodCAoQykgMTk5OCBGcmVkZXJpYyBSaWJsZSBGMU9BVCAoZnJpYmxlQHRlYXNlci5mcikKKyAqCUFkYXB0ZWQgZnJvbSBiYXljb20uYyBkcml2ZXIgd3JpdHRlbiBieSBUaG9tYXMgU2FpbGVyIChzYWlsZXJAaWZlLmVlLmV0aHouY2gpCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKgl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICoJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqCWJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKglNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKglHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqCVlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKglhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICoJRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICogIFBsZWFzZSBub3RlIHRoYXQgdGhlIEdQTCBhbGxvd3MgeW91IHRvIHVzZSB0aGUgZHJpdmVyLCBOT1QgdGhlIHJhZGlvLgorICogIEluIG9yZGVyIHRvIHVzZSB0aGUgcmFkaW8sIHlvdSBuZWVkIGEgbGljZW5zZSBmcm9tIHRoZSBjb21tdW5pY2F0aW9ucworICogIGF1dGhvcml0eSBvZiB5b3VyIGNvdW50cnkuCisgKgorICoKKyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgU0lPQ1lBTVJFU0VSVkVECSgwKQorI2RlZmluZSBTSU9DWUFNU0NGRyAJKDEpCS8qIFNldCBjb25maWd1cmF0aW9uICovCisjZGVmaW5lIFNJT0NZQU1HQ0ZHIAkoMikJLyogR2V0IGNvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgU0lPQ1lBTVNNQ1MgCSgzKQkvKiBTZXQgbWNzIGRhdGEgKi8KKworI2RlZmluZSBZQU1fSU9CQVNFICAgKDEgPDwgMCkKKyNkZWZpbmUgWUFNX0lSUSAgICAgICgxIDw8IDEpCisjZGVmaW5lIFlBTV9CSVRSQVRFICAoMSA8PCAyKSAvKiBCaXQgcmF0ZSBvZiByYWRpbyBwb3J0IC0+NTc2MDAgKi8KKyNkZWZpbmUgWUFNX01PREUgICAgICgxIDw8IDMpIC8qIDA9c2ltcGxleCAxPWR1cGxleCAyPWR1cGxleCt0ZW1wbyAqLworI2RlZmluZSBZQU1fSE9MRERMWSAgKDEgPDwgNCkgLyogZHVwbGV4IHRlbXBvIChzZWMpICovCisjZGVmaW5lIFlBTV9UWERFTEFZICAoMSA8PCA1KSAvKiBUeCBEZWxheSAobXMpICovCisjZGVmaW5lIFlBTV9UWFRBSUwgICAoMSA8PCA2KSAvKiBUeCBUYWlsICAobXMpICovCisjZGVmaW5lIFlBTV9QRVJTSVNUICAoMSA8PCA3KSAvKiBQZXJzaXN0ICAobXMpICovCisjZGVmaW5lIFlBTV9TTE9UVElNRSAoMSA8PCA4KSAvKiBTbG90dGltZSAobXMpICovCisjZGVmaW5lIFlBTV9CQVVEUkFURSAoMSA8PCA5KSAvKiBCYXVkIHJhdGUgb2YgcnMyMzIgcG9ydCAtPjExNTIwMCAqLworCisjZGVmaW5lIFlBTV9NQVhCSVRSQVRFICA1NzYwMAorI2RlZmluZSBZQU1fTUFYQkFVRFJBVEUgMTE1MjAwCisjZGVmaW5lIFlBTV9NQVhNT0RFICAgICAyCisjZGVmaW5lIFlBTV9NQVhIT0xERExZICA5OQorI2RlZmluZSBZQU1fTUFYVFhERUxBWSAgOTk5CisjZGVmaW5lIFlBTV9NQVhUWFRBSUwgICA5OTkKKyNkZWZpbmUgWUFNX01BWFBFUlNJU1QgIDI1NQorI2RlZmluZSBZQU1fTUFYU0xPVFRJTUUgOTk5CisKKyNkZWZpbmUgWUFNX0ZQR0FfU0laRQk1MzAyCisKK3N0cnVjdCB5YW1jZmcgeworCXVuc2lnbmVkIGludCBtYXNrOwkJLyogTWFzayBvZiBjb21tYW5kcyAqLworCXVuc2lnbmVkIGludCBpb2Jhc2U7CS8qIElPIEJhc2Ugb2YgQ09NIHBvcnQgKi8KKwl1bnNpZ25lZCBpbnQgaXJxOwkJLyogSVJRIG9mIENPTSBwb3J0ICovCisJdW5zaWduZWQgaW50IGJpdHJhdGU7CS8qIEJpdCByYXRlIG9mIHJhZGlvIHBvcnQgKi8KKwl1bnNpZ25lZCBpbnQgYmF1ZHJhdGU7CS8qIEJhdWQgcmF0ZSBvZiB0aGUgUlMyMzIgcG9ydCAqLworCXVuc2lnbmVkIGludCB0eGRlbGF5OwkvKiBUeERlbGF5ICovCisJdW5zaWduZWQgaW50IHR4dGFpbDsJLyogVHhUYWlsICovCisJdW5zaWduZWQgaW50IHBlcnNpc3Q7CS8qIFBlcnNpc3RlbmNlICovCisJdW5zaWduZWQgaW50IHNsb3R0aW1lOwkvKiBTbG90dGltZSAqLworCXVuc2lnbmVkIGludCBtb2RlOwkJLyogbW9kZSAwIChzaW1wKSwgMShEdXBsKSwgMihEdXBsK2RlbGF5KSAqLworCXVuc2lnbmVkIGludCBob2xkZGx5OwkvKiBQVFQgZGVsYXkgaW4gRnVsbER1cGxleCAyIG1vZGUgKi8KK307CisKK3N0cnVjdCB5YW1kcnZfaW9jdGxfY2ZnIHsKKwlpbnQgY21kOworCXN0cnVjdCB5YW1jZmcgY2ZnOworfTsKKworc3RydWN0IHlhbWRydl9pb2N0bF9tY3MgeworCWludCBjbWQ7CisJaW50IGJpdHJhdGU7CisJdW5zaWduZWQgY2hhciBiaXRzW1lBTV9GUEdBX1NJWkVdOworfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvemNvbmYuaCBiL2luY2x1ZGUvbGludXgvemNvbmYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWNmZDY2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC96Y29uZi5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qIHpjb25mLmggLS0gY29uZmlndXJhdGlvbiBvZiB0aGUgemxpYiBjb21wcmVzc2lvbiBsaWJyYXJ5CisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBKZWFuLWxvdXAgR2FpbGx5LgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaCAKKyAqLworCisvKiBAKCMpICRJZCQgKi8KKworI2lmbmRlZiBfWkNPTkZfSAorI2RlZmluZSBfWkNPTkZfSAorCisvKiBUaGUgbWVtb3J5IHJlcXVpcmVtZW50cyBmb3IgZGVmbGF0ZSBhcmUgKGluIGJ5dGVzKToKKyAgICAgICAgICAgICgxIDw8ICh3aW5kb3dCaXRzKzIpKSArICAoMSA8PCAobWVtTGV2ZWwrOSkpCisgdGhhdCBpczogMTI4SyBmb3Igd2luZG93Qml0cz0xNSAgKyAgMTI4SyBmb3IgbWVtTGV2ZWwgPSA4ICAoZGVmYXVsdCB2YWx1ZXMpCisgcGx1cyBhIGZldyBraWxvYnl0ZXMgZm9yIHNtYWxsIG9iamVjdHMuIEZvciBleGFtcGxlLCBpZiB5b3Ugd2FudCB0byByZWR1Y2UKKyB0aGUgZGVmYXVsdCBtZW1vcnkgcmVxdWlyZW1lbnRzIGZyb20gMjU2SyB0byAxMjhLLCBjb21waWxlIHdpdGgKKyAgICAgbWFrZSBDRkxBR1M9Ii1PIC1ETUFYX1dCSVRTPTE0IC1ETUFYX01FTV9MRVZFTD03IgorIE9mIGNvdXJzZSB0aGlzIHdpbGwgZ2VuZXJhbGx5IGRlZ3JhZGUgY29tcHJlc3Npb24gKHRoZXJlJ3Mgbm8gZnJlZSBsdW5jaCkuCisKKyAgIFRoZSBtZW1vcnkgcmVxdWlyZW1lbnRzIGZvciBpbmZsYXRlIGFyZSAoaW4gYnl0ZXMpIDEgPDwgd2luZG93Qml0cworIHRoYXQgaXMsIDMySyBmb3Igd2luZG93Qml0cz0xNSAoZGVmYXVsdCB2YWx1ZSkgcGx1cyBhIGZldyBraWxvYnl0ZXMKKyBmb3Igc21hbGwgb2JqZWN0cy4KKyovCisKKy8qIE1heGltdW0gdmFsdWUgZm9yIG1lbUxldmVsIGluIGRlZmxhdGVJbml0MiAqLworI2lmbmRlZiBNQVhfTUVNX0xFVkVMCisjICBkZWZpbmUgTUFYX01FTV9MRVZFTCA4CisjZW5kaWYKKworLyogTWF4aW11bSB2YWx1ZSBmb3Igd2luZG93Qml0cyBpbiBkZWZsYXRlSW5pdDIgYW5kIGluZmxhdGVJbml0Mi4KKyAqIFdBUk5JTkc6IHJlZHVjaW5nIE1BWF9XQklUUyBtYWtlcyBtaW5pZ3ppcCB1bmFibGUgdG8gZXh0cmFjdCAuZ3ogZmlsZXMKKyAqIGNyZWF0ZWQgYnkgZ3ppcC4gKEZpbGVzIGNyZWF0ZWQgYnkgbWluaWd6aXAgY2FuIHN0aWxsIGJlIGV4dHJhY3RlZCBieQorICogZ3ppcC4pCisgKi8KKyNpZm5kZWYgTUFYX1dCSVRTCisjICBkZWZpbmUgTUFYX1dCSVRTICAgMTUgLyogMzJLIExaNzcgd2luZG93ICovCisjZW5kaWYKKworICAgICAgICAgICAgICAgICAgICAgICAgLyogVHlwZSBkZWNsYXJhdGlvbnMgKi8KKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyICBCeXRlOyAgLyogOCBiaXRzICovCit0eXBlZGVmIHVuc2lnbmVkIGludCAgIHVJbnQ7ICAvKiAxNiBiaXRzIG9yIG1vcmUgKi8KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyAgdUxvbmc7IC8qIDMyIGJpdHMgb3IgbW9yZSAqLwordHlwZWRlZiB2b2lkICAgICAqdm9pZHA7CisKKyNlbmRpZiAvKiBfWkNPTkZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC96ZnRhcGUuaCBiL2luY2x1ZGUvbGludXgvemZ0YXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA1N2M2NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvemZ0YXBlLmgKQEAgLTAsMCArMSw4NyBAQAorI2lmbmRlZiBfWkZUQVBFX0gKKyNkZWZpbmUgX1pGVEFQRV9ICisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcgQ2xhdXMtSnVzdHVzIEhlaW5lLgorCisgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworICoKKyAqICRTb3VyY2U6IC9ob21lcy9jdnMvZnRhcGUtc3RhY2tlZC9pbmNsdWRlL2xpbnV4L3pmdGFwZS5oLHYgJAorICogJFJldmlzaW9uOiAxLjEyICQKKyAqICREYXRlOiAxOTk3LzEwLzIxIDExOjAyOjM3ICQKKyAqCisgKiAgICAgIFNwZWNpYWwgaW9jdGwgYW5kIG90aGVyIGdsb2JhbCBpbmZvIGZvciB0aGUgemZ0YXBlIFZGUworICogICAgICBpbnRlcmZhY2UgZm9yIHRoZSBRSUMtNDAvODAvMzAxMC8zMDIwIGZsb3BweS10YXBlIGRyaXZlciBmb3IKKyAqICAgICAgTGludXguCisgKi8KKworI2RlZmluZSBaRlRBUEVfVkVSU0lPTiAgInpmdGFwZSBmb3IgIiBGVEFQRV9WRVJTSU9OCisKKyNpbmNsdWRlIDxsaW51eC9mdGFwZS5oPgorCisjZGVmaW5lIFpGVEFQRV9MQUJFTCAgICAgICAiRnRhcGUgLSBUaGUgTGludXggRmxvcHB5IFRhcGUgUHJvamVjdCEiCisKKy8qIEJpdHMgb2YgdGhlIG1pbm9yIGRldmljZSBudW1iZXIgdGhhdCBjb250cm9sIHRoZSBvcGVyYXRpb24gbW9kZSAqLworI2RlZmluZSBaRlRfUTgwX01PREUJCSgxIDw8IDMpCisjZGVmaW5lIFpGVF9aSVBfTU9ERQkJKDEgPDwgNCkKKyNkZWZpbmUgWkZUX1JBV19NT0RFCQkoMSA8PCA1KQorI2RlZmluZSBaRlRfTUlOT1JfT1BfTUFTSwkoWkZUX1E4MF9NT0RFCXwgCVwKKwkJCQkgWkZUX1pJUF9NT0RFCXwgCVwKKwkJCQkgWkZUX1JBV19NT0RFKQorI2RlZmluZSBaRlRfTUlOT1JfTUFTSwkJKEZUQVBFX1NFTF9NQVNLCQl8CVwKKwkJCQkgWkZUX01JTk9SX09QX01BU0sJfAlcCisJCQkJIEZUQVBFX05PX1JFV0lORCkKKworI2lmZGVmIFpGVF9PQlNPTEVURQorc3RydWN0IG10Ymxrc3ogeworCXVuc2lnbmVkIGludCBtdF9ibGtzejsKK307CisjZGVmaW5lIE1USU9DX1pGVEFQRV9HRVRCTEtTWiBfSU9SKCdtJywgMTA0LCBzdHJ1Y3QgbXRibGtzeikKKyNlbmRpZgorCisjaWZkZWYgX19LRVJORUxfXworCitleHRlcm4gaW50IHpmdF9pbml0KHZvaWQpOworCitzdGF0aWMgaW5saW5lIF9fczY0IHpmdF9kaXZfYmxrc3ooX19zNjQgdmFsdWUsIF9fdTMyIGJsa19zeikKK3sKKwlpZiAoYmxrX3N6ID09IDEpIHsKKwkJcmV0dXJuIHZhbHVlOworCX0gZWxzZSB7CisJCXJldHVybiAoX19zNjQpKCgoX191MzIpKHZhbHVlID4+IDEwKSArIChibGtfc3ogPj4gMTApIC0gMSkgCisJCQkgICAgICAgLyAoYmxrX3N6ID4+IDEwKSk7CisJfSAKK30KKworc3RhdGljIGlubGluZSBfX3M2NCB6ZnRfbXVsX2Jsa3N6KF9fczY0IHZhbHVlLCBfX3UzMiBibGtfc3opCit7CisJaWYgKGJsa19zeiA9PSAxKSB7CisJCXJldHVybiB2YWx1ZTsKKwl9IGVsc2UgeworCQkvKiAgaWYgYmxrX3N6ICE9IDEsIHRoZW4gaXQgaXMgYSBtdWx0aXBsZSBvZiAxMDI0LiBJbgorCQkgKiAgdGhpcyBjYXNlLCBgdmFsdWUnIHdpbGwgYWxzbyBmaXQgaW50byAzMiBiaXRzLgorCQkgKiAKKwkJICogIEFjdHVhbGx5LCB0aGlzIGxpbWl0cyB0aGUgY2FwYWNpdHkgdG8gNDIKKwkJICogIGJpdHMuIFRoaXMgaXMgKDJeMzIpKjEwMjQsIHJvdWdobHkgYSB0aG91c2FuZAorCQkgKiAgdGltZXMgMkdCLCBvciAzIFRlcmFieXRlcy4gSG9wZWZ1bGx5IHRoaXMgaXMgZW5vdWdoCisJCSAqLworCQlyZXR1cm4oX19zNjQpKCgoX191MzIpKHZhbHVlKSooYmxrX3N6Pj4xMCkpPDwxMCk7CisJfQorfQorCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3psaWIuaCBiL2luY2x1ZGUvbGludXgvemxpYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1MDA3NmUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3psaWIuaApAQCAtMCwwICsxLDYzNyBAQAorLyogemxpYi5oIC0tIGludGVyZmFjZSBvZiB0aGUgJ3psaWInIGdlbmVyYWwgcHVycG9zZSBjb21wcmVzc2lvbiBsaWJyYXJ5CisgIHZlcnNpb24gMS4xLjMsIEp1bHkgOXRoLCAxOTk4CisKKyAgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggSmVhbi1sb3VwIEdhaWxseSBhbmQgTWFyayBBZGxlcgorCisgIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgJ2FzLWlzJywgd2l0aG91dCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkCisgIHdhcnJhbnR5LiAgSW4gbm8gZXZlbnQgd2lsbCB0aGUgYXV0aG9ycyBiZSBoZWxkIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMKKyAgYXJpc2luZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZS4KKworICBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSwKKyAgaW5jbHVkaW5nIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zLCBhbmQgdG8gYWx0ZXIgaXQgYW5kIHJlZGlzdHJpYnV0ZSBpdAorICBmcmVlbHksIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKKyAgMS4gVGhlIG9yaWdpbiBvZiB0aGlzIHNvZnR3YXJlIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkOyB5b3UgbXVzdCBub3QKKyAgICAgY2xhaW0gdGhhdCB5b3Ugd3JvdGUgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLiBJZiB5b3UgdXNlIHRoaXMgc29mdHdhcmUKKyAgICAgaW4gYSBwcm9kdWN0LCBhbiBhY2tub3dsZWRnbWVudCBpbiB0aGUgcHJvZHVjdCBkb2N1bWVudGF0aW9uIHdvdWxkIGJlCisgICAgIGFwcHJlY2lhdGVkIGJ1dCBpcyBub3QgcmVxdWlyZWQuCisgIDIuIEFsdGVyZWQgc291cmNlIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwgYW5kIG11c3Qgbm90IGJlCisgICAgIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4KKyAgMy4gVGhpcyBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkgc291cmNlIGRpc3RyaWJ1dGlvbi4KKworICBKZWFuLWxvdXAgR2FpbGx5ICAgICAgICBNYXJrIEFkbGVyCisgIGpsb3VwQGd6aXAub3JnICAgICAgICAgIG1hZGxlckBhbHVtbmkuY2FsdGVjaC5lZHUKKworCisgIFRoZSBkYXRhIGZvcm1hdCB1c2VkIGJ5IHRoZSB6bGliIGxpYnJhcnkgaXMgZGVzY3JpYmVkIGJ5IFJGQ3MgKFJlcXVlc3QgZm9yCisgIENvbW1lbnRzKSAxOTUwIHRvIDE5NTIgaW4gdGhlIGZpbGVzIGZ0cDovL2RzLmludGVybmljLm5ldC9yZmMvcmZjMTk1MC50eHQKKyAgKHpsaWIgZm9ybWF0KSwgcmZjMTk1MS50eHQgKGRlZmxhdGUgZm9ybWF0KSBhbmQgcmZjMTk1Mi50eHQgKGd6aXAgZm9ybWF0KS4KKyovCisKKyNpZm5kZWYgX1pMSUJfSAorI2RlZmluZSBfWkxJQl9ICisKKyNpbmNsdWRlIDxsaW51eC96Y29uZi5oPgorCisjZGVmaW5lIFpMSUJfVkVSU0lPTiAiMS4xLjMiCisKKy8qIAorICAgICBUaGUgJ3psaWInIGNvbXByZXNzaW9uIGxpYnJhcnkgcHJvdmlkZXMgaW4tbWVtb3J5IGNvbXByZXNzaW9uIGFuZAorICBkZWNvbXByZXNzaW9uIGZ1bmN0aW9ucywgaW5jbHVkaW5nIGludGVncml0eSBjaGVja3Mgb2YgdGhlIHVuY29tcHJlc3NlZAorICBkYXRhLiAgVGhpcyB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5IHN1cHBvcnRzIG9ubHkgb25lIGNvbXByZXNzaW9uIG1ldGhvZAorICAoZGVmbGF0aW9uKSBidXQgb3RoZXIgYWxnb3JpdGhtcyB3aWxsIGJlIGFkZGVkIGxhdGVyIGFuZCB3aWxsIGhhdmUgdGhlIHNhbWUKKyAgc3RyZWFtIGludGVyZmFjZS4KKworICAgICBDb21wcmVzc2lvbiBjYW4gYmUgZG9uZSBpbiBhIHNpbmdsZSBzdGVwIGlmIHRoZSBidWZmZXJzIGFyZSBsYXJnZQorICBlbm91Z2ggKGZvciBleGFtcGxlIGlmIGFuIGlucHV0IGZpbGUgaXMgbW1hcCdlZCksIG9yIGNhbiBiZSBkb25lIGJ5CisgIHJlcGVhdGVkIGNhbGxzIG9mIHRoZSBjb21wcmVzc2lvbiBmdW5jdGlvbi4gIEluIHRoZSBsYXR0ZXIgY2FzZSwgdGhlCisgIGFwcGxpY2F0aW9uIG11c3QgcHJvdmlkZSBtb3JlIGlucHV0IGFuZC9vciBjb25zdW1lIHRoZSBvdXRwdXQKKyAgKHByb3ZpZGluZyBtb3JlIG91dHB1dCBzcGFjZSkgYmVmb3JlIGVhY2ggY2FsbC4KKworICAgICBUaGUgbGlicmFyeSBhbHNvIHN1cHBvcnRzIHJlYWRpbmcgYW5kIHdyaXRpbmcgZmlsZXMgaW4gZ3ppcCAoLmd6KSBmb3JtYXQKKyAgd2l0aCBhbiBpbnRlcmZhY2Ugc2ltaWxhciB0byB0aGF0IG9mIHN0ZGlvLgorCisgICAgIFRoZSBsaWJyYXJ5IGRvZXMgbm90IGluc3RhbGwgYW55IHNpZ25hbCBoYW5kbGVyLiBUaGUgZGVjb2RlciBjaGVja3MKKyAgdGhlIGNvbnNpc3RlbmN5IG9mIHRoZSBjb21wcmVzc2VkIGRhdGEsIHNvIHRoZSBsaWJyYXJ5IHNob3VsZCBuZXZlcgorICBjcmFzaCBldmVuIGluIGNhc2Ugb2YgY29ycnVwdGVkIGlucHV0LgorKi8KKworc3RydWN0IGludGVybmFsX3N0YXRlOworCit0eXBlZGVmIHN0cnVjdCB6X3N0cmVhbV9zIHsKKyAgICBCeXRlICAgICpuZXh0X2luOyAgIC8qIG5leHQgaW5wdXQgYnl0ZSAqLworICAgIHVJbnQgICAgIGF2YWlsX2luOyAgLyogbnVtYmVyIG9mIGJ5dGVzIGF2YWlsYWJsZSBhdCBuZXh0X2luICovCisgICAgdUxvbmcgICAgdG90YWxfaW47ICAvKiB0b3RhbCBuYiBvZiBpbnB1dCBieXRlcyByZWFkIHNvIGZhciAqLworCisgICAgQnl0ZSAgICAqbmV4dF9vdXQ7ICAvKiBuZXh0IG91dHB1dCBieXRlIHNob3VsZCBiZSBwdXQgdGhlcmUgKi8KKyAgICB1SW50ICAgICBhdmFpbF9vdXQ7IC8qIHJlbWFpbmluZyBmcmVlIHNwYWNlIGF0IG5leHRfb3V0ICovCisgICAgdUxvbmcgICAgdG90YWxfb3V0OyAvKiB0b3RhbCBuYiBvZiBieXRlcyBvdXRwdXQgc28gZmFyICovCisKKyAgICBjaGFyICAgICAqbXNnOyAgICAgIC8qIGxhc3QgZXJyb3IgbWVzc2FnZSwgTlVMTCBpZiBubyBlcnJvciAqLworICAgIHN0cnVjdCBpbnRlcm5hbF9zdGF0ZSAqc3RhdGU7IC8qIG5vdCB2aXNpYmxlIGJ5IGFwcGxpY2F0aW9ucyAqLworCisgICAgdm9pZCAgICAgKndvcmtzcGFjZTsgLyogbWVtb3J5IGFsbG9jYXRlZCBmb3IgdGhpcyBzdHJlYW0gKi8KKworICAgIGludCAgICAgZGF0YV90eXBlOyAgLyogYmVzdCBndWVzcyBhYm91dCB0aGUgZGF0YSB0eXBlOiBhc2NpaSBvciBiaW5hcnkgKi8KKyAgICB1TG9uZyAgIGFkbGVyOyAgICAgIC8qIGFkbGVyMzIgdmFsdWUgb2YgdGhlIHVuY29tcHJlc3NlZCBkYXRhICovCisgICAgdUxvbmcgICByZXNlcnZlZDsgICAvKiByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqLworfSB6X3N0cmVhbTsKKwordHlwZWRlZiB6X3N0cmVhbSAqel9zdHJlYW1wOworCisvKgorICAgVGhlIGFwcGxpY2F0aW9uIG11c3QgdXBkYXRlIG5leHRfaW4gYW5kIGF2YWlsX2luIHdoZW4gYXZhaWxfaW4gaGFzCisgICBkcm9wcGVkIHRvIHplcm8uIEl0IG11c3QgdXBkYXRlIG5leHRfb3V0IGFuZCBhdmFpbF9vdXQgd2hlbiBhdmFpbF9vdXQKKyAgIGhhcyBkcm9wcGVkIHRvIHplcm8uIFRoZSBhcHBsaWNhdGlvbiBtdXN0IGluaXRpYWxpemUgemFsbG9jLCB6ZnJlZSBhbmQKKyAgIG9wYXF1ZSBiZWZvcmUgY2FsbGluZyB0aGUgaW5pdCBmdW5jdGlvbi4gQWxsIG90aGVyIGZpZWxkcyBhcmUgc2V0IGJ5IHRoZQorICAgY29tcHJlc3Npb24gbGlicmFyeSBhbmQgbXVzdCBub3QgYmUgdXBkYXRlZCBieSB0aGUgYXBwbGljYXRpb24uCisKKyAgIFRoZSBvcGFxdWUgdmFsdWUgcHJvdmlkZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHdpbGwgYmUgcGFzc2VkIGFzIHRoZSBmaXJzdAorICAgcGFyYW1ldGVyIGZvciBjYWxscyBvZiB6YWxsb2MgYW5kIHpmcmVlLiBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIGN1c3RvbQorICAgbWVtb3J5IG1hbmFnZW1lbnQuIFRoZSBjb21wcmVzc2lvbiBsaWJyYXJ5IGF0dGFjaGVzIG5vIG1lYW5pbmcgdG8gdGhlCisgICBvcGFxdWUgdmFsdWUuCisKKyAgIHphbGxvYyBtdXN0IHJldHVybiBOVUxMIGlmIHRoZXJlIGlzIG5vdCBlbm91Z2ggbWVtb3J5IGZvciB0aGUgb2JqZWN0LgorICAgSWYgemxpYiBpcyB1c2VkIGluIGEgbXVsdGktdGhyZWFkZWQgYXBwbGljYXRpb24sIHphbGxvYyBhbmQgemZyZWUgbXVzdCBiZQorICAgdGhyZWFkIHNhZmUuCisKKyAgIE9uIDE2LWJpdCBzeXN0ZW1zLCB0aGUgZnVuY3Rpb25zIHphbGxvYyBhbmQgemZyZWUgbXVzdCBiZSBhYmxlIHRvIGFsbG9jYXRlCisgICBleGFjdGx5IDY1NTM2IGJ5dGVzLCBidXQgd2lsbCBub3QgYmUgcmVxdWlyZWQgdG8gYWxsb2NhdGUgbW9yZSB0aGFuIHRoaXMKKyAgIGlmIHRoZSBzeW1ib2wgTUFYU0VHXzY0SyBpcyBkZWZpbmVkIChzZWUgemNvbmYuaCkuIFdBUk5JTkc6IE9uIE1TRE9TLAorICAgcG9pbnRlcnMgcmV0dXJuZWQgYnkgemFsbG9jIGZvciBvYmplY3RzIG9mIGV4YWN0bHkgNjU1MzYgYnl0ZXMgKm11c3QqCisgICBoYXZlIHRoZWlyIG9mZnNldCBub3JtYWxpemVkIHRvIHplcm8uIFRoZSBkZWZhdWx0IGFsbG9jYXRpb24gZnVuY3Rpb24KKyAgIHByb3ZpZGVkIGJ5IHRoaXMgbGlicmFyeSBlbnN1cmVzIHRoaXMgKHNlZSB6dXRpbC5jKS4gVG8gcmVkdWNlIG1lbW9yeQorICAgcmVxdWlyZW1lbnRzIGFuZCBhdm9pZCBhbnkgYWxsb2NhdGlvbiBvZiA2NEsgb2JqZWN0cywgYXQgdGhlIGV4cGVuc2Ugb2YKKyAgIGNvbXByZXNzaW9uIHJhdGlvLCBjb21waWxlIHRoZSBsaWJyYXJ5IHdpdGggLURNQVhfV0JJVFM9MTQgKHNlZSB6Y29uZi5oKS4KKworICAgVGhlIGZpZWxkcyB0b3RhbF9pbiBhbmQgdG90YWxfb3V0IGNhbiBiZSB1c2VkIGZvciBzdGF0aXN0aWNzIG9yCisgICBwcm9ncmVzcyByZXBvcnRzLiBBZnRlciBjb21wcmVzc2lvbiwgdG90YWxfaW4gaG9sZHMgdGhlIHRvdGFsIHNpemUgb2YKKyAgIHRoZSB1bmNvbXByZXNzZWQgZGF0YSBhbmQgbWF5IGJlIHNhdmVkIGZvciB1c2UgaW4gdGhlIGRlY29tcHJlc3NvcgorICAgKHBhcnRpY3VsYXJseSBpZiB0aGUgZGVjb21wcmVzc29yIHdhbnRzIHRvIGRlY29tcHJlc3MgZXZlcnl0aGluZyBpbgorICAgYSBzaW5nbGUgc3RlcCkuCisqLworCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb25zdGFudHMgKi8KKworI2RlZmluZSBaX05PX0ZMVVNIICAgICAgMAorI2RlZmluZSBaX1BBUlRJQUxfRkxVU0ggMSAvKiB3aWxsIGJlIHJlbW92ZWQsIHVzZSBaX1NZTkNfRkxVU0ggaW5zdGVhZCAqLworI2RlZmluZSBaX1BBQ0tFVF9GTFVTSCAgMgorI2RlZmluZSBaX1NZTkNfRkxVU0ggICAgMworI2RlZmluZSBaX0ZVTExfRkxVU0ggICAgNAorI2RlZmluZSBaX0ZJTklTSCAgICAgICAgNQorLyogQWxsb3dlZCBmbHVzaCB2YWx1ZXM7IHNlZSBkZWZsYXRlKCkgYmVsb3cgZm9yIGRldGFpbHMgKi8KKworI2RlZmluZSBaX09LICAgICAgICAgICAgMAorI2RlZmluZSBaX1NUUkVBTV9FTkQgICAgMQorI2RlZmluZSBaX05FRURfRElDVCAgICAgMgorI2RlZmluZSBaX0VSUk5PICAgICAgICAoLTEpCisjZGVmaW5lIFpfU1RSRUFNX0VSUk9SICgtMikKKyNkZWZpbmUgWl9EQVRBX0VSUk9SICAgKC0zKQorI2RlZmluZSBaX01FTV9FUlJPUiAgICAoLTQpCisjZGVmaW5lIFpfQlVGX0VSUk9SICAgICgtNSkKKyNkZWZpbmUgWl9WRVJTSU9OX0VSUk9SICgtNikKKy8qIFJldHVybiBjb2RlcyBmb3IgdGhlIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gZnVuY3Rpb25zLiBOZWdhdGl2ZQorICogdmFsdWVzIGFyZSBlcnJvcnMsIHBvc2l0aXZlIHZhbHVlcyBhcmUgdXNlZCBmb3Igc3BlY2lhbCBidXQgbm9ybWFsIGV2ZW50cy4KKyAqLworCisjZGVmaW5lIFpfTk9fQ09NUFJFU1NJT04gICAgICAgICAwCisjZGVmaW5lIFpfQkVTVF9TUEVFRCAgICAgICAgICAgICAxCisjZGVmaW5lIFpfQkVTVF9DT01QUkVTU0lPTiAgICAgICA5CisjZGVmaW5lIFpfREVGQVVMVF9DT01QUkVTU0lPTiAgKC0xKQorLyogY29tcHJlc3Npb24gbGV2ZWxzICovCisKKyNkZWZpbmUgWl9GSUxURVJFRCAgICAgICAgICAgIDEKKyNkZWZpbmUgWl9IVUZGTUFOX09OTFkgICAgICAgIDIKKyNkZWZpbmUgWl9ERUZBVUxUX1NUUkFURUdZICAgIDAKKy8qIGNvbXByZXNzaW9uIHN0cmF0ZWd5OyBzZWUgZGVmbGF0ZUluaXQyKCkgYmVsb3cgZm9yIGRldGFpbHMgKi8KKworI2RlZmluZSBaX0JJTkFSWSAgIDAKKyNkZWZpbmUgWl9BU0NJSSAgICAxCisjZGVmaW5lIFpfVU5LTk9XTiAgMgorLyogUG9zc2libGUgdmFsdWVzIG9mIHRoZSBkYXRhX3R5cGUgZmllbGQgKi8KKworI2RlZmluZSBaX0RFRkxBVEVEICAgOAorLyogVGhlIGRlZmxhdGUgY29tcHJlc3Npb24gbWV0aG9kICh0aGUgb25seSBvbmUgc3VwcG9ydGVkIGluIHRoaXMgdmVyc2lvbikgKi8KKworICAgICAgICAgICAgICAgICAgICAgICAgLyogYmFzaWMgZnVuY3Rpb25zICovCisKK2V4dGVybiBjb25zdCBjaGFyICogemxpYl96bGliVmVyc2lvbiAodm9pZCk7CisvKiBUaGUgYXBwbGljYXRpb24gY2FuIGNvbXBhcmUgemxpYlZlcnNpb24gYW5kIFpMSUJfVkVSU0lPTiBmb3IgY29uc2lzdGVuY3kuCisgICBJZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGRpZmZlcnMsIHRoZSBsaWJyYXJ5IGNvZGUgYWN0dWFsbHkgdXNlZCBpcworICAgbm90IGNvbXBhdGlibGUgd2l0aCB0aGUgemxpYi5oIGhlYWRlciBmaWxlIHVzZWQgYnkgdGhlIGFwcGxpY2F0aW9uLgorICAgVGhpcyBjaGVjayBpcyBhdXRvbWF0aWNhbGx5IG1hZGUgYnkgZGVmbGF0ZUluaXQgYW5kIGluZmxhdGVJbml0LgorICovCisKK2V4dGVybiBpbnQgemxpYl9kZWZsYXRlX3dvcmtzcGFjZXNpemUgKHZvaWQpOworLyoKKyAgIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IG5lZWRzIHRvIGJlIGFsbG9jYXRlZCBmb3IgYSBwZXItCisgICBzdHJlYW0gd29ya3NwYWNlLiAgQSBwb2ludGVyIHRvIHRoaXMgbnVtYmVyIG9mIGJ5dGVzIHNob3VsZCBiZQorICAgcmV0dXJuZWQgaW4gc3RyZWFtLT53b3Jrc3BhY2UgYmVmb3JlIGNhbGxpbmcgemxpYl9kZWZsYXRlSW5pdCgpLgorKi8KKworLyogCitleHRlcm4gaW50IGRlZmxhdGVJbml0ICh6X3N0cmVhbXAgc3RybSwgaW50IGxldmVsKTsKKworICAgICBJbml0aWFsaXplcyB0aGUgaW50ZXJuYWwgc3RyZWFtIHN0YXRlIGZvciBjb21wcmVzc2lvbi4gVGhlIGZpZWxkcworICAgemFsbG9jLCB6ZnJlZSBhbmQgb3BhcXVlIG11c3QgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGJ5IHRoZSBjYWxsZXIuCisgICBJZiB6YWxsb2MgYW5kIHpmcmVlIGFyZSBzZXQgdG8gTlVMTCwgZGVmbGF0ZUluaXQgdXBkYXRlcyB0aGVtIHRvCisgICB1c2UgZGVmYXVsdCBhbGxvY2F0aW9uIGZ1bmN0aW9ucy4KKworICAgICBUaGUgY29tcHJlc3Npb24gbGV2ZWwgbXVzdCBiZSBaX0RFRkFVTFRfQ09NUFJFU1NJT04sIG9yIGJldHdlZW4gMCBhbmQgOToKKyAgIDEgZ2l2ZXMgYmVzdCBzcGVlZCwgOSBnaXZlcyBiZXN0IGNvbXByZXNzaW9uLCAwIGdpdmVzIG5vIGNvbXByZXNzaW9uIGF0CisgICBhbGwgKHRoZSBpbnB1dCBkYXRhIGlzIHNpbXBseSBjb3BpZWQgYSBibG9jayBhdCBhIHRpbWUpLgorICAgWl9ERUZBVUxUX0NPTVBSRVNTSU9OIHJlcXVlc3RzIGEgZGVmYXVsdCBjb21wcm9taXNlIGJldHdlZW4gc3BlZWQgYW5kCisgICBjb21wcmVzc2lvbiAoY3VycmVudGx5IGVxdWl2YWxlbnQgdG8gbGV2ZWwgNikuCisKKyAgICAgZGVmbGF0ZUluaXQgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIFpfTUVNX0VSUk9SIGlmIHRoZXJlIHdhcyBub3QKKyAgIGVub3VnaCBtZW1vcnksIFpfU1RSRUFNX0VSUk9SIGlmIGxldmVsIGlzIG5vdCBhIHZhbGlkIGNvbXByZXNzaW9uIGxldmVsLAorICAgWl9WRVJTSU9OX0VSUk9SIGlmIHRoZSB6bGliIGxpYnJhcnkgdmVyc2lvbiAoemxpYl92ZXJzaW9uKSBpcyBpbmNvbXBhdGlibGUKKyAgIHdpdGggdGhlIHZlcnNpb24gYXNzdW1lZCBieSB0aGUgY2FsbGVyIChaTElCX1ZFUlNJT04pLgorICAgbXNnIGlzIHNldCB0byBudWxsIGlmIHRoZXJlIGlzIG5vIGVycm9yIG1lc3NhZ2UuICBkZWZsYXRlSW5pdCBkb2VzIG5vdAorICAgcGVyZm9ybSBhbnkgY29tcHJlc3Npb246IHRoaXMgd2lsbCBiZSBkb25lIGJ5IGRlZmxhdGUoKS4KKyovCisKKworZXh0ZXJuIGludCB6bGliX2RlZmxhdGUgKHpfc3RyZWFtcCBzdHJtLCBpbnQgZmx1c2gpOworLyoKKyAgICBkZWZsYXRlIGNvbXByZXNzZXMgYXMgbXVjaCBkYXRhIGFzIHBvc3NpYmxlLCBhbmQgc3RvcHMgd2hlbiB0aGUgaW5wdXQKKyAgYnVmZmVyIGJlY29tZXMgZW1wdHkgb3IgdGhlIG91dHB1dCBidWZmZXIgYmVjb21lcyBmdWxsLiBJdCBtYXkgaW50cm9kdWNlIHNvbWUKKyAgb3V0cHV0IGxhdGVuY3kgKHJlYWRpbmcgaW5wdXQgd2l0aG91dCBwcm9kdWNpbmcgYW55IG91dHB1dCkgZXhjZXB0IHdoZW4KKyAgZm9yY2VkIHRvIGZsdXNoLgorCisgICAgVGhlIGRldGFpbGVkIHNlbWFudGljcyBhcmUgYXMgZm9sbG93cy4gZGVmbGF0ZSBwZXJmb3JtcyBvbmUgb3IgYm90aCBvZiB0aGUKKyAgZm9sbG93aW5nIGFjdGlvbnM6CisKKyAgLSBDb21wcmVzcyBtb3JlIGlucHV0IHN0YXJ0aW5nIGF0IG5leHRfaW4gYW5kIHVwZGF0ZSBuZXh0X2luIGFuZCBhdmFpbF9pbgorICAgIGFjY29yZGluZ2x5LiBJZiBub3QgYWxsIGlucHV0IGNhbiBiZSBwcm9jZXNzZWQgKGJlY2F1c2UgdGhlcmUgaXMgbm90CisgICAgZW5vdWdoIHJvb20gaW4gdGhlIG91dHB1dCBidWZmZXIpLCBuZXh0X2luIGFuZCBhdmFpbF9pbiBhcmUgdXBkYXRlZCBhbmQKKyAgICBwcm9jZXNzaW5nIHdpbGwgcmVzdW1lIGF0IHRoaXMgcG9pbnQgZm9yIHRoZSBuZXh0IGNhbGwgb2YgZGVmbGF0ZSgpLgorCisgIC0gUHJvdmlkZSBtb3JlIG91dHB1dCBzdGFydGluZyBhdCBuZXh0X291dCBhbmQgdXBkYXRlIG5leHRfb3V0IGFuZCBhdmFpbF9vdXQKKyAgICBhY2NvcmRpbmdseS4gVGhpcyBhY3Rpb24gaXMgZm9yY2VkIGlmIHRoZSBwYXJhbWV0ZXIgZmx1c2ggaXMgbm9uIHplcm8uCisgICAgRm9yY2luZyBmbHVzaCBmcmVxdWVudGx5IGRlZ3JhZGVzIHRoZSBjb21wcmVzc2lvbiByYXRpbywgc28gdGhpcyBwYXJhbWV0ZXIKKyAgICBzaG91bGQgYmUgc2V0IG9ubHkgd2hlbiBuZWNlc3NhcnkgKGluIGludGVyYWN0aXZlIGFwcGxpY2F0aW9ucykuCisgICAgU29tZSBvdXRwdXQgbWF5IGJlIHByb3ZpZGVkIGV2ZW4gaWYgZmx1c2ggaXMgbm90IHNldC4KKworICBCZWZvcmUgdGhlIGNhbGwgb2YgZGVmbGF0ZSgpLCB0aGUgYXBwbGljYXRpb24gc2hvdWxkIGVuc3VyZSB0aGF0IGF0IGxlYXN0CisgIG9uZSBvZiB0aGUgYWN0aW9ucyBpcyBwb3NzaWJsZSwgYnkgcHJvdmlkaW5nIG1vcmUgaW5wdXQgYW5kL29yIGNvbnN1bWluZworICBtb3JlIG91dHB1dCwgYW5kIHVwZGF0aW5nIGF2YWlsX2luIG9yIGF2YWlsX291dCBhY2NvcmRpbmdseTsgYXZhaWxfb3V0CisgIHNob3VsZCBuZXZlciBiZSB6ZXJvIGJlZm9yZSB0aGUgY2FsbC4gVGhlIGFwcGxpY2F0aW9uIGNhbiBjb25zdW1lIHRoZQorICBjb21wcmVzc2VkIG91dHB1dCB3aGVuIGl0IHdhbnRzLCBmb3IgZXhhbXBsZSB3aGVuIHRoZSBvdXRwdXQgYnVmZmVyIGlzIGZ1bGwKKyAgKGF2YWlsX291dCA9PSAwKSwgb3IgYWZ0ZXIgZWFjaCBjYWxsIG9mIGRlZmxhdGUoKS4gSWYgZGVmbGF0ZSByZXR1cm5zIFpfT0sKKyAgYW5kIHdpdGggemVybyBhdmFpbF9vdXQsIGl0IG11c3QgYmUgY2FsbGVkIGFnYWluIGFmdGVyIG1ha2luZyByb29tIGluIHRoZQorICBvdXRwdXQgYnVmZmVyIGJlY2F1c2UgdGhlcmUgbWlnaHQgYmUgbW9yZSBvdXRwdXQgcGVuZGluZy4KKworICAgIElmIHRoZSBwYXJhbWV0ZXIgZmx1c2ggaXMgc2V0IHRvIFpfU1lOQ19GTFVTSCwgYWxsIHBlbmRpbmcgb3V0cHV0IGlzCisgIGZsdXNoZWQgdG8gdGhlIG91dHB1dCBidWZmZXIgYW5kIHRoZSBvdXRwdXQgaXMgYWxpZ25lZCBvbiBhIGJ5dGUgYm91bmRhcnksIHNvCisgIHRoYXQgdGhlIGRlY29tcHJlc3NvciBjYW4gZ2V0IGFsbCBpbnB1dCBkYXRhIGF2YWlsYWJsZSBzbyBmYXIuIChJbiBwYXJ0aWN1bGFyCisgIGF2YWlsX2luIGlzIHplcm8gYWZ0ZXIgdGhlIGNhbGwgaWYgZW5vdWdoIG91dHB1dCBzcGFjZSBoYXMgYmVlbiBwcm92aWRlZAorICBiZWZvcmUgdGhlIGNhbGwuKSAgRmx1c2hpbmcgbWF5IGRlZ3JhZGUgY29tcHJlc3Npb24gZm9yIHNvbWUgY29tcHJlc3Npb24KKyAgYWxnb3JpdGhtcyBhbmQgc28gaXQgc2hvdWxkIGJlIHVzZWQgb25seSB3aGVuIG5lY2Vzc2FyeS4KKworICAgIElmIGZsdXNoIGlzIHNldCB0byBaX0ZVTExfRkxVU0gsIGFsbCBvdXRwdXQgaXMgZmx1c2hlZCBhcyB3aXRoCisgIFpfU1lOQ19GTFVTSCwgYW5kIHRoZSBjb21wcmVzc2lvbiBzdGF0ZSBpcyByZXNldCBzbyB0aGF0IGRlY29tcHJlc3Npb24gY2FuCisgIHJlc3RhcnQgZnJvbSB0aGlzIHBvaW50IGlmIHByZXZpb3VzIGNvbXByZXNzZWQgZGF0YSBoYXMgYmVlbiBkYW1hZ2VkIG9yIGlmCisgIHJhbmRvbSBhY2Nlc3MgaXMgZGVzaXJlZC4gVXNpbmcgWl9GVUxMX0ZMVVNIIHRvbyBvZnRlbiBjYW4gc2VyaW91c2x5IGRlZ3JhZGUKKyAgdGhlIGNvbXByZXNzaW9uLgorCisgICAgSWYgZGVmbGF0ZSByZXR1cm5zIHdpdGggYXZhaWxfb3V0ID09IDAsIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgYWdhaW4KKyAgd2l0aCB0aGUgc2FtZSB2YWx1ZSBvZiB0aGUgZmx1c2ggcGFyYW1ldGVyIGFuZCBtb3JlIG91dHB1dCBzcGFjZSAodXBkYXRlZAorICBhdmFpbF9vdXQpLCB1bnRpbCB0aGUgZmx1c2ggaXMgY29tcGxldGUgKGRlZmxhdGUgcmV0dXJucyB3aXRoIG5vbi16ZXJvCisgIGF2YWlsX291dCkuCisKKyAgICBJZiB0aGUgcGFyYW1ldGVyIGZsdXNoIGlzIHNldCB0byBaX0ZJTklTSCwgcGVuZGluZyBpbnB1dCBpcyBwcm9jZXNzZWQsCisgIHBlbmRpbmcgb3V0cHV0IGlzIGZsdXNoZWQgYW5kIGRlZmxhdGUgcmV0dXJucyB3aXRoIFpfU1RSRUFNX0VORCBpZiB0aGVyZQorICB3YXMgZW5vdWdoIG91dHB1dCBzcGFjZTsgaWYgZGVmbGF0ZSByZXR1cm5zIHdpdGggWl9PSywgdGhpcyBmdW5jdGlvbiBtdXN0IGJlCisgIGNhbGxlZCBhZ2FpbiB3aXRoIFpfRklOSVNIIGFuZCBtb3JlIG91dHB1dCBzcGFjZSAodXBkYXRlZCBhdmFpbF9vdXQpIGJ1dCBubworICBtb3JlIGlucHV0IGRhdGEsIHVudGlsIGl0IHJldHVybnMgd2l0aCBaX1NUUkVBTV9FTkQgb3IgYW4gZXJyb3IuIEFmdGVyCisgIGRlZmxhdGUgaGFzIHJldHVybmVkIFpfU1RSRUFNX0VORCwgdGhlIG9ubHkgcG9zc2libGUgb3BlcmF0aW9ucyBvbiB0aGUKKyAgc3RyZWFtIGFyZSBkZWZsYXRlUmVzZXQgb3IgZGVmbGF0ZUVuZC4KKyAgCisgICAgWl9GSU5JU0ggY2FuIGJlIHVzZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgZGVmbGF0ZUluaXQgaWYgYWxsIHRoZSBjb21wcmVzc2lvbgorICBpcyB0byBiZSBkb25lIGluIGEgc2luZ2xlIHN0ZXAuIEluIHRoaXMgY2FzZSwgYXZhaWxfb3V0IG11c3QgYmUgYXQgbGVhc3QKKyAgMC4xJSBsYXJnZXIgdGhhbiBhdmFpbF9pbiBwbHVzIDEyIGJ5dGVzLiAgSWYgZGVmbGF0ZSBkb2VzIG5vdCByZXR1cm4KKyAgWl9TVFJFQU1fRU5ELCB0aGVuIGl0IG11c3QgYmUgY2FsbGVkIGFnYWluIGFzIGRlc2NyaWJlZCBhYm92ZS4KKworICAgIGRlZmxhdGUoKSBzZXRzIHN0cm0tPmFkbGVyIHRvIHRoZSBhZGxlcjMyIGNoZWNrc3VtIG9mIGFsbCBpbnB1dCByZWFkCisgIHNvIGZhciAodGhhdCBpcywgdG90YWxfaW4gYnl0ZXMpLgorCisgICAgZGVmbGF0ZSgpIG1heSB1cGRhdGUgZGF0YV90eXBlIGlmIGl0IGNhbiBtYWtlIGEgZ29vZCBndWVzcyBhYm91dAorICB0aGUgaW5wdXQgZGF0YSB0eXBlIChaX0FTQ0lJIG9yIFpfQklOQVJZKS4gSW4gZG91YnQsIHRoZSBkYXRhIGlzIGNvbnNpZGVyZWQKKyAgYmluYXJ5LiBUaGlzIGZpZWxkIGlzIG9ubHkgZm9yIGluZm9ybWF0aW9uIHB1cnBvc2VzIGFuZCBkb2VzIG5vdCBhZmZlY3QKKyAgdGhlIGNvbXByZXNzaW9uIGFsZ29yaXRobSBpbiBhbnkgbWFubmVyLgorCisgICAgZGVmbGF0ZSgpIHJldHVybnMgWl9PSyBpZiBzb21lIHByb2dyZXNzIGhhcyBiZWVuIG1hZGUgKG1vcmUgaW5wdXQKKyAgcHJvY2Vzc2VkIG9yIG1vcmUgb3V0cHV0IHByb2R1Y2VkKSwgWl9TVFJFQU1fRU5EIGlmIGFsbCBpbnB1dCBoYXMgYmVlbgorICBjb25zdW1lZCBhbmQgYWxsIG91dHB1dCBoYXMgYmVlbiBwcm9kdWNlZCAob25seSB3aGVuIGZsdXNoIGlzIHNldCB0bworICBaX0ZJTklTSCksIFpfU1RSRUFNX0VSUk9SIGlmIHRoZSBzdHJlYW0gc3RhdGUgd2FzIGluY29uc2lzdGVudCAoZm9yIGV4YW1wbGUKKyAgaWYgbmV4dF9pbiBvciBuZXh0X291dCB3YXMgTlVMTCksIFpfQlVGX0VSUk9SIGlmIG5vIHByb2dyZXNzIGlzIHBvc3NpYmxlCisgIChmb3IgZXhhbXBsZSBhdmFpbF9pbiBvciBhdmFpbF9vdXQgd2FzIHplcm8pLgorKi8KKworCitleHRlcm4gaW50IHpsaWJfZGVmbGF0ZUVuZCAoel9zdHJlYW1wIHN0cm0pOworLyoKKyAgICAgQWxsIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBkYXRhIHN0cnVjdHVyZXMgZm9yIHRoaXMgc3RyZWFtIGFyZSBmcmVlZC4KKyAgIFRoaXMgZnVuY3Rpb24gZGlzY2FyZHMgYW55IHVucHJvY2Vzc2VkIGlucHV0IGFuZCBkb2VzIG5vdCBmbHVzaCBhbnkKKyAgIHBlbmRpbmcgb3V0cHV0LgorCisgICAgIGRlZmxhdGVFbmQgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIFpfU1RSRUFNX0VSUk9SIGlmIHRoZQorICAgc3RyZWFtIHN0YXRlIHdhcyBpbmNvbnNpc3RlbnQsIFpfREFUQV9FUlJPUiBpZiB0aGUgc3RyZWFtIHdhcyBmcmVlZAorICAgcHJlbWF0dXJlbHkgKHNvbWUgaW5wdXQgb3Igb3V0cHV0IHdhcyBkaXNjYXJkZWQpLiBJbiB0aGUgZXJyb3IgY2FzZSwKKyAgIG1zZyBtYXkgYmUgc2V0IGJ1dCB0aGVuIHBvaW50cyB0byBhIHN0YXRpYyBzdHJpbmcgKHdoaWNoIG11c3Qgbm90IGJlCisgICBkZWFsbG9jYXRlZCkuCisqLworCisKK2V4dGVybiBpbnQgemxpYl9pbmZsYXRlX3dvcmtzcGFjZXNpemUgKHZvaWQpOworLyoKKyAgIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IG5lZWRzIHRvIGJlIGFsbG9jYXRlZCBmb3IgYSBwZXItCisgICBzdHJlYW0gd29ya3NwYWNlLiAgQSBwb2ludGVyIHRvIHRoaXMgbnVtYmVyIG9mIGJ5dGVzIHNob3VsZCBiZQorICAgcmV0dXJuZWQgaW4gc3RyZWFtLT53b3Jrc3BhY2UgYmVmb3JlIGNhbGxpbmcgemxpYl9pbmZsYXRlSW5pdCgpLgorKi8KKworLyogCitleHRlcm4gaW50IHpsaWJfaW5mbGF0ZUluaXQgKHpfc3RyZWFtcCBzdHJtKTsKKworICAgICBJbml0aWFsaXplcyB0aGUgaW50ZXJuYWwgc3RyZWFtIHN0YXRlIGZvciBkZWNvbXByZXNzaW9uLiBUaGUgZmllbGRzCisgICBuZXh0X2luLCBhdmFpbF9pbiwgYW5kIHdvcmtzcGFjZSBtdXN0IGJlIGluaXRpYWxpemVkIGJlZm9yZSBieQorICAgdGhlIGNhbGxlci4gSWYgbmV4dF9pbiBpcyBub3QgTlVMTCBhbmQgYXZhaWxfaW4gaXMgbGFyZ2UgZW5vdWdoICh0aGUgZXhhY3QKKyAgIHZhbHVlIGRlcGVuZHMgb24gdGhlIGNvbXByZXNzaW9uIG1ldGhvZCksIGluZmxhdGVJbml0IGRldGVybWluZXMgdGhlCisgICBjb21wcmVzc2lvbiBtZXRob2QgZnJvbSB0aGUgemxpYiBoZWFkZXIgYW5kIGFsbG9jYXRlcyBhbGwgZGF0YSBzdHJ1Y3R1cmVzCisgICBhY2NvcmRpbmdseTsgb3RoZXJ3aXNlIHRoZSBhbGxvY2F0aW9uIHdpbGwgYmUgZGVmZXJyZWQgdG8gdGhlIGZpcnN0IGNhbGwgb2YKKyAgIGluZmxhdGUuICBJZiB6YWxsb2MgYW5kIHpmcmVlIGFyZSBzZXQgdG8gTlVMTCwgaW5mbGF0ZUluaXQgdXBkYXRlcyB0aGVtIHRvCisgICB1c2UgZGVmYXVsdCBhbGxvY2F0aW9uIGZ1bmN0aW9ucy4KKworICAgICBpbmZsYXRlSW5pdCByZXR1cm5zIFpfT0sgaWYgc3VjY2VzcywgWl9NRU1fRVJST1IgaWYgdGhlcmUgd2FzIG5vdCBlbm91Z2gKKyAgIG1lbW9yeSwgWl9WRVJTSU9OX0VSUk9SIGlmIHRoZSB6bGliIGxpYnJhcnkgdmVyc2lvbiBpcyBpbmNvbXBhdGlibGUgd2l0aCB0aGUKKyAgIHZlcnNpb24gYXNzdW1lZCBieSB0aGUgY2FsbGVyLiAgbXNnIGlzIHNldCB0byBudWxsIGlmIHRoZXJlIGlzIG5vIGVycm9yCisgICBtZXNzYWdlLiBpbmZsYXRlSW5pdCBkb2VzIG5vdCBwZXJmb3JtIGFueSBkZWNvbXByZXNzaW9uIGFwYXJ0IGZyb20gcmVhZGluZworICAgdGhlIHpsaWIgaGVhZGVyIGlmIHByZXNlbnQ6IHRoaXMgd2lsbCBiZSBkb25lIGJ5IGluZmxhdGUoKS4gIChTbyBuZXh0X2luIGFuZAorICAgYXZhaWxfaW4gbWF5IGJlIG1vZGlmaWVkLCBidXQgbmV4dF9vdXQgYW5kIGF2YWlsX291dCBhcmUgdW5jaGFuZ2VkLikKKyovCisKKworZXh0ZXJuIGludCB6bGliX2luZmxhdGUgKHpfc3RyZWFtcCBzdHJtLCBpbnQgZmx1c2gpOworLyoKKyAgICBpbmZsYXRlIGRlY29tcHJlc3NlcyBhcyBtdWNoIGRhdGEgYXMgcG9zc2libGUsIGFuZCBzdG9wcyB3aGVuIHRoZSBpbnB1dAorICBidWZmZXIgYmVjb21lcyBlbXB0eSBvciB0aGUgb3V0cHV0IGJ1ZmZlciBiZWNvbWVzIGZ1bGwuIEl0IG1heSBzb21lCisgIGludHJvZHVjZSBzb21lIG91dHB1dCBsYXRlbmN5IChyZWFkaW5nIGlucHV0IHdpdGhvdXQgcHJvZHVjaW5nIGFueSBvdXRwdXQpCisgIGV4Y2VwdCB3aGVuIGZvcmNlZCB0byBmbHVzaC4KKworICBUaGUgZGV0YWlsZWQgc2VtYW50aWNzIGFyZSBhcyBmb2xsb3dzLiBpbmZsYXRlIHBlcmZvcm1zIG9uZSBvciBib3RoIG9mIHRoZQorICBmb2xsb3dpbmcgYWN0aW9uczoKKworICAtIERlY29tcHJlc3MgbW9yZSBpbnB1dCBzdGFydGluZyBhdCBuZXh0X2luIGFuZCB1cGRhdGUgbmV4dF9pbiBhbmQgYXZhaWxfaW4KKyAgICBhY2NvcmRpbmdseS4gSWYgbm90IGFsbCBpbnB1dCBjYW4gYmUgcHJvY2Vzc2VkIChiZWNhdXNlIHRoZXJlIGlzIG5vdAorICAgIGVub3VnaCByb29tIGluIHRoZSBvdXRwdXQgYnVmZmVyKSwgbmV4dF9pbiBpcyB1cGRhdGVkIGFuZCBwcm9jZXNzaW5nCisgICAgd2lsbCByZXN1bWUgYXQgdGhpcyBwb2ludCBmb3IgdGhlIG5leHQgY2FsbCBvZiBpbmZsYXRlKCkuCisKKyAgLSBQcm92aWRlIG1vcmUgb3V0cHV0IHN0YXJ0aW5nIGF0IG5leHRfb3V0IGFuZCB1cGRhdGUgbmV4dF9vdXQgYW5kIGF2YWlsX291dAorICAgIGFjY29yZGluZ2x5LiAgaW5mbGF0ZSgpIHByb3ZpZGVzIGFzIG11Y2ggb3V0cHV0IGFzIHBvc3NpYmxlLCB1bnRpbCB0aGVyZQorICAgIGlzIG5vIG1vcmUgaW5wdXQgZGF0YSBvciBubyBtb3JlIHNwYWNlIGluIHRoZSBvdXRwdXQgYnVmZmVyIChzZWUgYmVsb3cKKyAgICBhYm91dCB0aGUgZmx1c2ggcGFyYW1ldGVyKS4KKworICBCZWZvcmUgdGhlIGNhbGwgb2YgaW5mbGF0ZSgpLCB0aGUgYXBwbGljYXRpb24gc2hvdWxkIGVuc3VyZSB0aGF0IGF0IGxlYXN0CisgIG9uZSBvZiB0aGUgYWN0aW9ucyBpcyBwb3NzaWJsZSwgYnkgcHJvdmlkaW5nIG1vcmUgaW5wdXQgYW5kL29yIGNvbnN1bWluZworICBtb3JlIG91dHB1dCwgYW5kIHVwZGF0aW5nIHRoZSBuZXh0XyogYW5kIGF2YWlsXyogdmFsdWVzIGFjY29yZGluZ2x5LgorICBUaGUgYXBwbGljYXRpb24gY2FuIGNvbnN1bWUgdGhlIHVuY29tcHJlc3NlZCBvdXRwdXQgd2hlbiBpdCB3YW50cywgZm9yCisgIGV4YW1wbGUgd2hlbiB0aGUgb3V0cHV0IGJ1ZmZlciBpcyBmdWxsIChhdmFpbF9vdXQgPT0gMCksIG9yIGFmdGVyIGVhY2gKKyAgY2FsbCBvZiBpbmZsYXRlKCkuIElmIGluZmxhdGUgcmV0dXJucyBaX09LIGFuZCB3aXRoIHplcm8gYXZhaWxfb3V0LCBpdAorICBtdXN0IGJlIGNhbGxlZCBhZ2FpbiBhZnRlciBtYWtpbmcgcm9vbSBpbiB0aGUgb3V0cHV0IGJ1ZmZlciBiZWNhdXNlIHRoZXJlCisgIG1pZ2h0IGJlIG1vcmUgb3V0cHV0IHBlbmRpbmcuCisKKyAgICBJZiB0aGUgcGFyYW1ldGVyIGZsdXNoIGlzIHNldCB0byBaX1NZTkNfRkxVU0gsIGluZmxhdGUgZmx1c2hlcyBhcyBtdWNoCisgIG91dHB1dCBhcyBwb3NzaWJsZSB0byB0aGUgb3V0cHV0IGJ1ZmZlci4gVGhlIGZsdXNoaW5nIGJlaGF2aW9yIG9mIGluZmxhdGUgaXMKKyAgbm90IHNwZWNpZmllZCBmb3IgdmFsdWVzIG9mIHRoZSBmbHVzaCBwYXJhbWV0ZXIgb3RoZXIgdGhhbiBaX1NZTkNfRkxVU0gKKyAgYW5kIFpfRklOSVNILCBidXQgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gYWN0dWFsbHkgZmx1c2hlcyBhcyBtdWNoIG91dHB1dAorICBhcyBwb3NzaWJsZSBhbnl3YXkuCisKKyAgICBpbmZsYXRlKCkgc2hvdWxkIG5vcm1hbGx5IGJlIGNhbGxlZCB1bnRpbCBpdCByZXR1cm5zIFpfU1RSRUFNX0VORCBvciBhbgorICBlcnJvci4gSG93ZXZlciBpZiBhbGwgZGVjb21wcmVzc2lvbiBpcyB0byBiZSBwZXJmb3JtZWQgaW4gYSBzaW5nbGUgc3RlcAorICAoYSBzaW5nbGUgY2FsbCBvZiBpbmZsYXRlKSwgdGhlIHBhcmFtZXRlciBmbHVzaCBzaG91bGQgYmUgc2V0IHRvCisgIFpfRklOSVNILiBJbiB0aGlzIGNhc2UgYWxsIHBlbmRpbmcgaW5wdXQgaXMgcHJvY2Vzc2VkIGFuZCBhbGwgcGVuZGluZworICBvdXRwdXQgaXMgZmx1c2hlZDsgYXZhaWxfb3V0IG11c3QgYmUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYWxsIHRoZQorICB1bmNvbXByZXNzZWQgZGF0YS4gKFRoZSBzaXplIG9mIHRoZSB1bmNvbXByZXNzZWQgZGF0YSBtYXkgaGF2ZSBiZWVuIHNhdmVkCisgIGJ5IHRoZSBjb21wcmVzc29yIGZvciB0aGlzIHB1cnBvc2UuKSBUaGUgbmV4dCBvcGVyYXRpb24gb24gdGhpcyBzdHJlYW0gbXVzdAorICBiZSBpbmZsYXRlRW5kIHRvIGRlYWxsb2NhdGUgdGhlIGRlY29tcHJlc3Npb24gc3RhdGUuIFRoZSB1c2Ugb2YgWl9GSU5JU0gKKyAgaXMgbmV2ZXIgcmVxdWlyZWQsIGJ1dCBjYW4gYmUgdXNlZCB0byBpbmZvcm0gaW5mbGF0ZSB0aGF0IGEgZmFzdGVyIHJvdXRpbmUKKyAgbWF5IGJlIHVzZWQgZm9yIHRoZSBzaW5nbGUgaW5mbGF0ZSgpIGNhbGwuCisKKyAgICAgSWYgYSBwcmVzZXQgZGljdGlvbmFyeSBpcyBuZWVkZWQgYXQgdGhpcyBwb2ludCAoc2VlIGluZmxhdGVTZXREaWN0aW9uYXJ5CisgIGJlbG93KSwgaW5mbGF0ZSBzZXRzIHN0cm0tYWRsZXIgdG8gdGhlIGFkbGVyMzIgY2hlY2tzdW0gb2YgdGhlCisgIGRpY3Rpb25hcnkgY2hvc2VuIGJ5IHRoZSBjb21wcmVzc29yIGFuZCByZXR1cm5zIFpfTkVFRF9ESUNUOyBvdGhlcndpc2UgCisgIGl0IHNldHMgc3RybS0+YWRsZXIgdG8gdGhlIGFkbGVyMzIgY2hlY2tzdW0gb2YgYWxsIG91dHB1dCBwcm9kdWNlZAorICBzbyBmYXIgKHRoYXQgaXMsIHRvdGFsX291dCBieXRlcykgYW5kIHJldHVybnMgWl9PSywgWl9TVFJFQU1fRU5EIG9yCisgIGFuIGVycm9yIGNvZGUgYXMgZGVzY3JpYmVkIGJlbG93LiBBdCB0aGUgZW5kIG9mIHRoZSBzdHJlYW0sIGluZmxhdGUoKQorICBjaGVja3MgdGhhdCBpdHMgY29tcHV0ZWQgYWRsZXIzMiBjaGVja3N1bSBpcyBlcXVhbCB0byB0aGF0IHNhdmVkIGJ5IHRoZQorICBjb21wcmVzc29yIGFuZCByZXR1cm5zIFpfU1RSRUFNX0VORCBvbmx5IGlmIHRoZSBjaGVja3N1bSBpcyBjb3JyZWN0LgorCisgICAgaW5mbGF0ZSgpIHJldHVybnMgWl9PSyBpZiBzb21lIHByb2dyZXNzIGhhcyBiZWVuIG1hZGUgKG1vcmUgaW5wdXQgcHJvY2Vzc2VkCisgIG9yIG1vcmUgb3V0cHV0IHByb2R1Y2VkKSwgWl9TVFJFQU1fRU5EIGlmIHRoZSBlbmQgb2YgdGhlIGNvbXByZXNzZWQgZGF0YSBoYXMKKyAgYmVlbiByZWFjaGVkIGFuZCBhbGwgdW5jb21wcmVzc2VkIG91dHB1dCBoYXMgYmVlbiBwcm9kdWNlZCwgWl9ORUVEX0RJQ1QgaWYgYQorICBwcmVzZXQgZGljdGlvbmFyeSBpcyBuZWVkZWQgYXQgdGhpcyBwb2ludCwgWl9EQVRBX0VSUk9SIGlmIHRoZSBpbnB1dCBkYXRhIHdhcworICBjb3JydXB0ZWQgKGlucHV0IHN0cmVhbSBub3QgY29uZm9ybWluZyB0byB0aGUgemxpYiBmb3JtYXQgb3IgaW5jb3JyZWN0CisgIGFkbGVyMzIgY2hlY2tzdW0pLCBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgc3RyZWFtIHN0cnVjdHVyZSB3YXMgaW5jb25zaXN0ZW50CisgIChmb3IgZXhhbXBsZSBpZiBuZXh0X2luIG9yIG5leHRfb3V0IHdhcyBOVUxMKSwgWl9NRU1fRVJST1IgaWYgdGhlcmUgd2FzIG5vdAorICBlbm91Z2ggbWVtb3J5LCBaX0JVRl9FUlJPUiBpZiBubyBwcm9ncmVzcyBpcyBwb3NzaWJsZSBvciBpZiB0aGVyZSB3YXMgbm90CisgIGVub3VnaCByb29tIGluIHRoZSBvdXRwdXQgYnVmZmVyIHdoZW4gWl9GSU5JU0ggaXMgdXNlZC4gSW4gdGhlIFpfREFUQV9FUlJPUgorICBjYXNlLCB0aGUgYXBwbGljYXRpb24gbWF5IHRoZW4gY2FsbCBpbmZsYXRlU3luYyB0byBsb29rIGZvciBhIGdvb2QKKyAgY29tcHJlc3Npb24gYmxvY2suCisqLworCisKK2V4dGVybiBpbnQgemxpYl9pbmZsYXRlRW5kICh6X3N0cmVhbXAgc3RybSk7CisvKgorICAgICBBbGwgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGRhdGEgc3RydWN0dXJlcyBmb3IgdGhpcyBzdHJlYW0gYXJlIGZyZWVkLgorICAgVGhpcyBmdW5jdGlvbiBkaXNjYXJkcyBhbnkgdW5wcm9jZXNzZWQgaW5wdXQgYW5kIGRvZXMgbm90IGZsdXNoIGFueQorICAgcGVuZGluZyBvdXRwdXQuCisKKyAgICAgaW5mbGF0ZUVuZCByZXR1cm5zIFpfT0sgaWYgc3VjY2VzcywgWl9TVFJFQU1fRVJST1IgaWYgdGhlIHN0cmVhbSBzdGF0ZQorICAgd2FzIGluY29uc2lzdGVudC4gSW4gdGhlIGVycm9yIGNhc2UsIG1zZyBtYXkgYmUgc2V0IGJ1dCB0aGVuIHBvaW50cyB0byBhCisgICBzdGF0aWMgc3RyaW5nICh3aGljaCBtdXN0IG5vdCBiZSBkZWFsbG9jYXRlZCkuCisqLworCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBBZHZhbmNlZCBmdW5jdGlvbnMgKi8KKworLyoKKyAgICBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgbmVlZGVkIG9ubHkgaW4gc29tZSBzcGVjaWFsIGFwcGxpY2F0aW9ucy4KKyovCisKKy8qICAgCitleHRlcm4gaW50IGRlZmxhdGVJbml0MiAoel9zdHJlYW1wIHN0cm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICBsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIG1ldGhvZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIHdpbmRvd0JpdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICBtZW1MZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIHN0cmF0ZWd5KTsKKworICAgICBUaGlzIGlzIGFub3RoZXIgdmVyc2lvbiBvZiBkZWZsYXRlSW5pdCB3aXRoIG1vcmUgY29tcHJlc3Npb24gb3B0aW9ucy4gVGhlCisgICBmaWVsZHMgbmV4dF9pbiwgemFsbG9jLCB6ZnJlZSBhbmQgb3BhcXVlIG11c3QgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGJ5CisgICB0aGUgY2FsbGVyLgorCisgICAgIFRoZSBtZXRob2QgcGFyYW1ldGVyIGlzIHRoZSBjb21wcmVzc2lvbiBtZXRob2QuIEl0IG11c3QgYmUgWl9ERUZMQVRFRCBpbgorICAgdGhpcyB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LgorCisgICAgIFRoZSB3aW5kb3dCaXRzIHBhcmFtZXRlciBpcyB0aGUgYmFzZSB0d28gbG9nYXJpdGhtIG9mIHRoZSB3aW5kb3cgc2l6ZQorICAgKHRoZSBzaXplIG9mIHRoZSBoaXN0b3J5IGJ1ZmZlcikuICBJdCBzaG91bGQgYmUgaW4gdGhlIHJhbmdlIDguLjE1IGZvciB0aGlzCisgICB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LiBMYXJnZXIgdmFsdWVzIG9mIHRoaXMgcGFyYW1ldGVyIHJlc3VsdCBpbiBiZXR0ZXIKKyAgIGNvbXByZXNzaW9uIGF0IHRoZSBleHBlbnNlIG9mIG1lbW9yeSB1c2FnZS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgMTUgaWYKKyAgIGRlZmxhdGVJbml0IGlzIHVzZWQgaW5zdGVhZC4KKworICAgICBUaGUgbWVtTGV2ZWwgcGFyYW1ldGVyIHNwZWNpZmllcyBob3cgbXVjaCBtZW1vcnkgc2hvdWxkIGJlIGFsbG9jYXRlZAorICAgZm9yIHRoZSBpbnRlcm5hbCBjb21wcmVzc2lvbiBzdGF0ZS4gbWVtTGV2ZWw9MSB1c2VzIG1pbmltdW0gbWVtb3J5IGJ1dAorICAgaXMgc2xvdyBhbmQgcmVkdWNlcyBjb21wcmVzc2lvbiByYXRpbzsgbWVtTGV2ZWw9OSB1c2VzIG1heGltdW0gbWVtb3J5CisgICBmb3Igb3B0aW1hbCBzcGVlZC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgOC4gU2VlIHpjb25mLmggZm9yIHRvdGFsIG1lbW9yeQorICAgdXNhZ2UgYXMgYSBmdW5jdGlvbiBvZiB3aW5kb3dCaXRzIGFuZCBtZW1MZXZlbC4KKworICAgICBUaGUgc3RyYXRlZ3kgcGFyYW1ldGVyIGlzIHVzZWQgdG8gdHVuZSB0aGUgY29tcHJlc3Npb24gYWxnb3JpdGhtLiBVc2UgdGhlCisgICB2YWx1ZSBaX0RFRkFVTFRfU1RSQVRFR1kgZm9yIG5vcm1hbCBkYXRhLCBaX0ZJTFRFUkVEIGZvciBkYXRhIHByb2R1Y2VkIGJ5IGEKKyAgIGZpbHRlciAob3IgcHJlZGljdG9yKSwgb3IgWl9IVUZGTUFOX09OTFkgdG8gZm9yY2UgSHVmZm1hbiBlbmNvZGluZyBvbmx5IChubworICAgc3RyaW5nIG1hdGNoKS4gIEZpbHRlcmVkIGRhdGEgY29uc2lzdHMgbW9zdGx5IG9mIHNtYWxsIHZhbHVlcyB3aXRoIGEKKyAgIHNvbWV3aGF0IHJhbmRvbSBkaXN0cmlidXRpb24uIEluIHRoaXMgY2FzZSwgdGhlIGNvbXByZXNzaW9uIGFsZ29yaXRobSBpcworICAgdHVuZWQgdG8gY29tcHJlc3MgdGhlbSBiZXR0ZXIuIFRoZSBlZmZlY3Qgb2YgWl9GSUxURVJFRCBpcyB0byBmb3JjZSBtb3JlCisgICBIdWZmbWFuIGNvZGluZyBhbmQgbGVzcyBzdHJpbmcgbWF0Y2hpbmc7IGl0IGlzIHNvbWV3aGF0IGludGVybWVkaWF0ZQorICAgYmV0d2VlbiBaX0RFRkFVTFQgYW5kIFpfSFVGRk1BTl9PTkxZLiBUaGUgc3RyYXRlZ3kgcGFyYW1ldGVyIG9ubHkgYWZmZWN0cworICAgdGhlIGNvbXByZXNzaW9uIHJhdGlvIGJ1dCBub3QgdGhlIGNvcnJlY3RuZXNzIG9mIHRoZSBjb21wcmVzc2VkIG91dHB1dCBldmVuCisgICBpZiBpdCBpcyBub3Qgc2V0IGFwcHJvcHJpYXRlbHkuCisKKyAgICAgIGRlZmxhdGVJbml0MiByZXR1cm5zIFpfT0sgaWYgc3VjY2VzcywgWl9NRU1fRVJST1IgaWYgdGhlcmUgd2FzIG5vdCBlbm91Z2gKKyAgIG1lbW9yeSwgWl9TVFJFQU1fRVJST1IgaWYgYSBwYXJhbWV0ZXIgaXMgaW52YWxpZCAoc3VjaCBhcyBhbiBpbnZhbGlkCisgICBtZXRob2QpLiBtc2cgaXMgc2V0IHRvIG51bGwgaWYgdGhlcmUgaXMgbm8gZXJyb3IgbWVzc2FnZS4gIGRlZmxhdGVJbml0MiBkb2VzCisgICBub3QgcGVyZm9ybSBhbnkgY29tcHJlc3Npb246IHRoaXMgd2lsbCBiZSBkb25lIGJ5IGRlZmxhdGUoKS4KKyovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitleHRlcm4gaW50IHpsaWJfZGVmbGF0ZVNldERpY3Rpb25hcnkgKHpfc3RyZWFtcCBzdHJtLAorCQkJCQkJICAgICBjb25zdCBCeXRlICpkaWN0aW9uYXJ5LAorCQkJCQkJICAgICB1SW50ICBkaWN0TGVuZ3RoKTsKKy8qCisgICAgIEluaXRpYWxpemVzIHRoZSBjb21wcmVzc2lvbiBkaWN0aW9uYXJ5IGZyb20gdGhlIGdpdmVuIGJ5dGUgc2VxdWVuY2UKKyAgIHdpdGhvdXQgcHJvZHVjaW5nIGFueSBjb21wcmVzc2VkIG91dHB1dC4gVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZAorICAgaW1tZWRpYXRlbHkgYWZ0ZXIgZGVmbGF0ZUluaXQsIGRlZmxhdGVJbml0MiBvciBkZWZsYXRlUmVzZXQsIGJlZm9yZSBhbnkKKyAgIGNhbGwgb2YgZGVmbGF0ZS4gVGhlIGNvbXByZXNzb3IgYW5kIGRlY29tcHJlc3NvciBtdXN0IHVzZSBleGFjdGx5IHRoZSBzYW1lCisgICBkaWN0aW9uYXJ5IChzZWUgaW5mbGF0ZVNldERpY3Rpb25hcnkpLgorCisgICAgIFRoZSBkaWN0aW9uYXJ5IHNob3VsZCBjb25zaXN0IG9mIHN0cmluZ3MgKGJ5dGUgc2VxdWVuY2VzKSB0aGF0IGFyZSBsaWtlbHkKKyAgIHRvIGJlIGVuY291bnRlcmVkIGxhdGVyIGluIHRoZSBkYXRhIHRvIGJlIGNvbXByZXNzZWQsIHdpdGggdGhlIG1vc3QgY29tbW9ubHkKKyAgIHVzZWQgc3RyaW5ncyBwcmVmZXJhYmx5IHB1dCB0b3dhcmRzIHRoZSBlbmQgb2YgdGhlIGRpY3Rpb25hcnkuIFVzaW5nIGEKKyAgIGRpY3Rpb25hcnkgaXMgbW9zdCB1c2VmdWwgd2hlbiB0aGUgZGF0YSB0byBiZSBjb21wcmVzc2VkIGlzIHNob3J0IGFuZCBjYW4gYmUKKyAgIHByZWRpY3RlZCB3aXRoIGdvb2QgYWNjdXJhY3k7IHRoZSBkYXRhIGNhbiB0aGVuIGJlIGNvbXByZXNzZWQgYmV0dGVyIHRoYW4KKyAgIHdpdGggdGhlIGRlZmF1bHQgZW1wdHkgZGljdGlvbmFyeS4KKworICAgICBEZXBlbmRpbmcgb24gdGhlIHNpemUgb2YgdGhlIGNvbXByZXNzaW9uIGRhdGEgc3RydWN0dXJlcyBzZWxlY3RlZCBieQorICAgZGVmbGF0ZUluaXQgb3IgZGVmbGF0ZUluaXQyLCBhIHBhcnQgb2YgdGhlIGRpY3Rpb25hcnkgbWF5IGluIGVmZmVjdCBiZQorICAgZGlzY2FyZGVkLCBmb3IgZXhhbXBsZSBpZiB0aGUgZGljdGlvbmFyeSBpcyBsYXJnZXIgdGhhbiB0aGUgd2luZG93IHNpemUgaW4KKyAgIGRlZmxhdGUgb3IgZGVmbGF0ZTIuIFRodXMgdGhlIHN0cmluZ3MgbW9zdCBsaWtlbHkgdG8gYmUgdXNlZnVsIHNob3VsZCBiZQorICAgcHV0IGF0IHRoZSBlbmQgb2YgdGhlIGRpY3Rpb25hcnksIG5vdCBhdCB0aGUgZnJvbnQuCisKKyAgICAgVXBvbiByZXR1cm4gb2YgdGhpcyBmdW5jdGlvbiwgc3RybS0+YWRsZXIgaXMgc2V0IHRvIHRoZSBBZGxlcjMyIHZhbHVlCisgICBvZiB0aGUgZGljdGlvbmFyeTsgdGhlIGRlY29tcHJlc3NvciBtYXkgbGF0ZXIgdXNlIHRoaXMgdmFsdWUgdG8gZGV0ZXJtaW5lCisgICB3aGljaCBkaWN0aW9uYXJ5IGhhcyBiZWVuIHVzZWQgYnkgdGhlIGNvbXByZXNzb3IuIChUaGUgQWRsZXIzMiB2YWx1ZQorICAgYXBwbGllcyB0byB0aGUgd2hvbGUgZGljdGlvbmFyeSBldmVuIGlmIG9ubHkgYSBzdWJzZXQgb2YgdGhlIGRpY3Rpb25hcnkgaXMKKyAgIGFjdHVhbGx5IHVzZWQgYnkgdGhlIGNvbXByZXNzb3IuKQorCisgICAgIGRlZmxhdGVTZXREaWN0aW9uYXJ5IHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBvciBaX1NUUkVBTV9FUlJPUiBpZiBhCisgICBwYXJhbWV0ZXIgaXMgaW52YWxpZCAoc3VjaCBhcyBOVUxMIGRpY3Rpb25hcnkpIG9yIHRoZSBzdHJlYW0gc3RhdGUgaXMKKyAgIGluY29uc2lzdGVudCAoZm9yIGV4YW1wbGUgaWYgZGVmbGF0ZSBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZCBmb3IgdGhpcyBzdHJlYW0KKyAgIG9yIGlmIHRoZSBjb21wcmVzc2lvbiBtZXRob2QgaXMgYnNvcnQpLiBkZWZsYXRlU2V0RGljdGlvbmFyeSBkb2VzIG5vdAorICAgcGVyZm9ybSBhbnkgY29tcHJlc3Npb246IHRoaXMgd2lsbCBiZSBkb25lIGJ5IGRlZmxhdGUoKS4KKyovCisKK2V4dGVybiBpbnQgemxpYl9kZWZsYXRlQ29weSAoel9zdHJlYW1wIGRlc3QsIHpfc3RyZWFtcCBzb3VyY2UpOworLyoKKyAgICAgU2V0cyB0aGUgZGVzdGluYXRpb24gc3RyZWFtIGFzIGEgY29tcGxldGUgY29weSBvZiB0aGUgc291cmNlIHN0cmVhbS4KKworICAgICBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VmdWwgd2hlbiBzZXZlcmFsIGNvbXByZXNzaW9uIHN0cmF0ZWdpZXMgd2lsbCBiZQorICAgdHJpZWQsIGZvciBleGFtcGxlIHdoZW4gdGhlcmUgYXJlIHNldmVyYWwgd2F5cyBvZiBwcmUtcHJvY2Vzc2luZyB0aGUgaW5wdXQKKyAgIGRhdGEgd2l0aCBhIGZpbHRlci4gVGhlIHN0cmVhbXMgdGhhdCB3aWxsIGJlIGRpc2NhcmRlZCBzaG91bGQgdGhlbiBiZSBmcmVlZAorICAgYnkgY2FsbGluZyBkZWZsYXRlRW5kLiAgTm90ZSB0aGF0IGRlZmxhdGVDb3B5IGR1cGxpY2F0ZXMgdGhlIGludGVybmFsCisgICBjb21wcmVzc2lvbiBzdGF0ZSB3aGljaCBjYW4gYmUgcXVpdGUgbGFyZ2UsIHNvIHRoaXMgc3RyYXRlZ3kgaXMgc2xvdyBhbmQKKyAgIGNhbiBjb25zdW1lIGxvdHMgb2YgbWVtb3J5LgorCisgICAgIGRlZmxhdGVDb3B5IHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBaX01FTV9FUlJPUiBpZiB0aGVyZSB3YXMgbm90CisgICBlbm91Z2ggbWVtb3J5LCBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgc291cmNlIHN0cmVhbSBzdGF0ZSB3YXMgaW5jb25zaXN0ZW50CisgICAoc3VjaCBhcyB6YWxsb2MgYmVpbmcgTlVMTCkuIG1zZyBpcyBsZWZ0IHVuY2hhbmdlZCBpbiBib3RoIHNvdXJjZSBhbmQKKyAgIGRlc3RpbmF0aW9uLgorKi8KKworZXh0ZXJuIGludCB6bGliX2RlZmxhdGVSZXNldCAoel9zdHJlYW1wIHN0cm0pOworLyoKKyAgICAgVGhpcyBmdW5jdGlvbiBpcyBlcXVpdmFsZW50IHRvIGRlZmxhdGVFbmQgZm9sbG93ZWQgYnkgZGVmbGF0ZUluaXQsCisgICBidXQgZG9lcyBub3QgZnJlZSBhbmQgcmVhbGxvY2F0ZSBhbGwgdGhlIGludGVybmFsIGNvbXByZXNzaW9uIHN0YXRlLgorICAgVGhlIHN0cmVhbSB3aWxsIGtlZXAgdGhlIHNhbWUgY29tcHJlc3Npb24gbGV2ZWwgYW5kIGFueSBvdGhlciBhdHRyaWJ1dGVzCisgICB0aGF0IG1heSBoYXZlIGJlZW4gc2V0IGJ5IGRlZmxhdGVJbml0Mi4KKworICAgICAgZGVmbGF0ZVJlc2V0IHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBvciBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgc291cmNlCisgICBzdHJlYW0gc3RhdGUgd2FzIGluY29uc2lzdGVudCAoc3VjaCBhcyB6YWxsb2Mgb3Igc3RhdGUgYmVpbmcgTlVMTCkuCisqLworCitleHRlcm4gaW50IHpsaWJfZGVmbGF0ZVBhcmFtcyAoel9zdHJlYW1wIHN0cm0sIGludCBsZXZlbCwgaW50IHN0cmF0ZWd5KTsKKy8qCisgICAgIER5bmFtaWNhbGx5IHVwZGF0ZSB0aGUgY29tcHJlc3Npb24gbGV2ZWwgYW5kIGNvbXByZXNzaW9uIHN0cmF0ZWd5LiAgVGhlCisgICBpbnRlcnByZXRhdGlvbiBvZiBsZXZlbCBhbmQgc3RyYXRlZ3kgaXMgYXMgaW4gZGVmbGF0ZUluaXQyLiAgVGhpcyBjYW4gYmUKKyAgIHVzZWQgdG8gc3dpdGNoIGJldHdlZW4gY29tcHJlc3Npb24gYW5kIHN0cmFpZ2h0IGNvcHkgb2YgdGhlIGlucHV0IGRhdGEsIG9yCisgICB0byBzd2l0Y2ggdG8gYSBkaWZmZXJlbnQga2luZCBvZiBpbnB1dCBkYXRhIHJlcXVpcmluZyBhIGRpZmZlcmVudAorICAgc3RyYXRlZ3kuIElmIHRoZSBjb21wcmVzc2lvbiBsZXZlbCBpcyBjaGFuZ2VkLCB0aGUgaW5wdXQgYXZhaWxhYmxlIHNvIGZhcgorICAgaXMgY29tcHJlc3NlZCB3aXRoIHRoZSBvbGQgbGV2ZWwgKGFuZCBtYXkgYmUgZmx1c2hlZCk7IHRoZSBuZXcgbGV2ZWwgd2lsbAorICAgdGFrZSBlZmZlY3Qgb25seSBhdCB0aGUgbmV4dCBjYWxsIG9mIGRlZmxhdGUoKS4KKworICAgICBCZWZvcmUgdGhlIGNhbGwgb2YgZGVmbGF0ZVBhcmFtcywgdGhlIHN0cmVhbSBzdGF0ZSBtdXN0IGJlIHNldCBhcyBmb3IKKyAgIGEgY2FsbCBvZiBkZWZsYXRlKCksIHNpbmNlIHRoZSBjdXJyZW50bHkgYXZhaWxhYmxlIGlucHV0IG1heSBoYXZlIHRvCisgICBiZSBjb21wcmVzc2VkIGFuZCBmbHVzaGVkLiBJbiBwYXJ0aWN1bGFyLCBzdHJtLT5hdmFpbF9vdXQgbXVzdCBiZSBub24temVyby4KKworICAgICBkZWZsYXRlUGFyYW1zIHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgc291cmNlCisgICBzdHJlYW0gc3RhdGUgd2FzIGluY29uc2lzdGVudCBvciBpZiBhIHBhcmFtZXRlciB3YXMgaW52YWxpZCwgWl9CVUZfRVJST1IKKyAgIGlmIHN0cm0tPmF2YWlsX291dCB3YXMgemVyby4KKyovCisKKy8qICAgCitleHRlcm4gaW50IGluZmxhdGVJbml0MiAoel9zdHJlYW1wIHN0cm0sIGludCAgd2luZG93Qml0cyk7CisKKyAgICAgVGhpcyBpcyBhbm90aGVyIHZlcnNpb24gb2YgaW5mbGF0ZUluaXQgd2l0aCBhbiBleHRyYSBwYXJhbWV0ZXIuIFRoZQorICAgZmllbGRzIG5leHRfaW4sIGF2YWlsX2luLCB6YWxsb2MsIHpmcmVlIGFuZCBvcGFxdWUgbXVzdCBiZSBpbml0aWFsaXplZAorICAgYmVmb3JlIGJ5IHRoZSBjYWxsZXIuCisKKyAgICAgVGhlIHdpbmRvd0JpdHMgcGFyYW1ldGVyIGlzIHRoZSBiYXNlIHR3byBsb2dhcml0aG0gb2YgdGhlIG1heGltdW0gd2luZG93CisgICBzaXplICh0aGUgc2l6ZSBvZiB0aGUgaGlzdG9yeSBidWZmZXIpLiAgSXQgc2hvdWxkIGJlIGluIHRoZSByYW5nZSA4Li4xNSBmb3IKKyAgIHRoaXMgdmVyc2lvbiBvZiB0aGUgbGlicmFyeS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgMTUgaWYgaW5mbGF0ZUluaXQgaXMgdXNlZAorICAgaW5zdGVhZC4gSWYgYSBjb21wcmVzc2VkIHN0cmVhbSB3aXRoIGEgbGFyZ2VyIHdpbmRvdyBzaXplIGlzIGdpdmVuIGFzCisgICBpbnB1dCwgaW5mbGF0ZSgpIHdpbGwgcmV0dXJuIHdpdGggdGhlIGVycm9yIGNvZGUgWl9EQVRBX0VSUk9SIGluc3RlYWQgb2YKKyAgIHRyeWluZyB0byBhbGxvY2F0ZSBhIGxhcmdlciB3aW5kb3cuCisKKyAgICAgIGluZmxhdGVJbml0MiByZXR1cm5zIFpfT0sgaWYgc3VjY2VzcywgWl9NRU1fRVJST1IgaWYgdGhlcmUgd2FzIG5vdCBlbm91Z2gKKyAgIG1lbW9yeSwgWl9TVFJFQU1fRVJST1IgaWYgYSBwYXJhbWV0ZXIgaXMgaW52YWxpZCAoc3VjaCBhcyBhIG5lZ2F0aXZlCisgICBtZW1MZXZlbCkuIG1zZyBpcyBzZXQgdG8gbnVsbCBpZiB0aGVyZSBpcyBubyBlcnJvciBtZXNzYWdlLiAgaW5mbGF0ZUluaXQyCisgICBkb2VzIG5vdCBwZXJmb3JtIGFueSBkZWNvbXByZXNzaW9uIGFwYXJ0IGZyb20gcmVhZGluZyB0aGUgemxpYiBoZWFkZXIgaWYKKyAgIHByZXNlbnQ6IHRoaXMgd2lsbCBiZSBkb25lIGJ5IGluZmxhdGUoKS4gKFNvIG5leHRfaW4gYW5kIGF2YWlsX2luIG1heSBiZQorICAgbW9kaWZpZWQsIGJ1dCBuZXh0X291dCBhbmQgYXZhaWxfb3V0IGFyZSB1bmNoYW5nZWQuKQorKi8KKworZXh0ZXJuIGludCB6bGliX2luZmxhdGVTZXREaWN0aW9uYXJ5ICh6X3N0cmVhbXAgc3RybSwKKwkJCQkJCSAgICAgY29uc3QgQnl0ZSAqZGljdGlvbmFyeSwKKwkJCQkJCSAgICAgdUludCAgZGljdExlbmd0aCk7CisvKgorICAgICBJbml0aWFsaXplcyB0aGUgZGVjb21wcmVzc2lvbiBkaWN0aW9uYXJ5IGZyb20gdGhlIGdpdmVuIHVuY29tcHJlc3NlZCBieXRlCisgICBzZXF1ZW5jZS4gVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBpbW1lZGlhdGVseSBhZnRlciBhIGNhbGwgb2YgaW5mbGF0ZQorICAgaWYgdGhpcyBjYWxsIHJldHVybmVkIFpfTkVFRF9ESUNULiBUaGUgZGljdGlvbmFyeSBjaG9zZW4gYnkgdGhlIGNvbXByZXNzb3IKKyAgIGNhbiBiZSBkZXRlcm1pbmVkIGZyb20gdGhlIEFkbGVyMzIgdmFsdWUgcmV0dXJuZWQgYnkgdGhpcyBjYWxsIG9mCisgICBpbmZsYXRlLiBUaGUgY29tcHJlc3NvciBhbmQgZGVjb21wcmVzc29yIG11c3QgdXNlIGV4YWN0bHkgdGhlIHNhbWUKKyAgIGRpY3Rpb25hcnkgKHNlZSBkZWZsYXRlU2V0RGljdGlvbmFyeSkuCisKKyAgICAgaW5mbGF0ZVNldERpY3Rpb25hcnkgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIFpfU1RSRUFNX0VSUk9SIGlmIGEKKyAgIHBhcmFtZXRlciBpcyBpbnZhbGlkIChzdWNoIGFzIE5VTEwgZGljdGlvbmFyeSkgb3IgdGhlIHN0cmVhbSBzdGF0ZSBpcworICAgaW5jb25zaXN0ZW50LCBaX0RBVEFfRVJST1IgaWYgdGhlIGdpdmVuIGRpY3Rpb25hcnkgZG9lc24ndCBtYXRjaCB0aGUKKyAgIGV4cGVjdGVkIG9uZSAoaW5jb3JyZWN0IEFkbGVyMzIgdmFsdWUpLiBpbmZsYXRlU2V0RGljdGlvbmFyeSBkb2VzIG5vdAorICAgcGVyZm9ybSBhbnkgZGVjb21wcmVzc2lvbjogdGhpcyB3aWxsIGJlIGRvbmUgYnkgc3Vic2VxdWVudCBjYWxscyBvZgorICAgaW5mbGF0ZSgpLgorKi8KKworZXh0ZXJuIGludCB6bGliX2luZmxhdGVTeW5jICh6X3N0cmVhbXAgc3RybSk7CisvKiAKKyAgICBTa2lwcyBpbnZhbGlkIGNvbXByZXNzZWQgZGF0YSB1bnRpbCBhIGZ1bGwgZmx1c2ggcG9pbnQgKHNlZSBhYm92ZSB0aGUKKyAgZGVzY3JpcHRpb24gb2YgZGVmbGF0ZSB3aXRoIFpfRlVMTF9GTFVTSCkgY2FuIGJlIGZvdW5kLCBvciB1bnRpbCBhbGwKKyAgYXZhaWxhYmxlIGlucHV0IGlzIHNraXBwZWQuIE5vIG91dHB1dCBpcyBwcm92aWRlZC4KKworICAgIGluZmxhdGVTeW5jIHJldHVybnMgWl9PSyBpZiBhIGZ1bGwgZmx1c2ggcG9pbnQgaGFzIGJlZW4gZm91bmQsIFpfQlVGX0VSUk9SCisgIGlmIG5vIG1vcmUgaW5wdXQgd2FzIHByb3ZpZGVkLCBaX0RBVEFfRVJST1IgaWYgbm8gZmx1c2ggcG9pbnQgaGFzIGJlZW4gZm91bmQsCisgIG9yIFpfU1RSRUFNX0VSUk9SIGlmIHRoZSBzdHJlYW0gc3RydWN0dXJlIHdhcyBpbmNvbnNpc3RlbnQuIEluIHRoZSBzdWNjZXNzCisgIGNhc2UsIHRoZSBhcHBsaWNhdGlvbiBtYXkgc2F2ZSB0aGUgY3VycmVudCBjdXJyZW50IHZhbHVlIG9mIHRvdGFsX2luIHdoaWNoCisgIGluZGljYXRlcyB3aGVyZSB2YWxpZCBjb21wcmVzc2VkIGRhdGEgd2FzIGZvdW5kLiBJbiB0aGUgZXJyb3IgY2FzZSwgdGhlCisgIGFwcGxpY2F0aW9uIG1heSByZXBlYXRlZGx5IGNhbGwgaW5mbGF0ZVN5bmMsIHByb3ZpZGluZyBtb3JlIGlucHV0IGVhY2ggdGltZSwKKyAgdW50aWwgc3VjY2VzcyBvciBlbmQgb2YgdGhlIGlucHV0IGRhdGEuCisqLworCitleHRlcm4gaW50IHpsaWJfaW5mbGF0ZVJlc2V0ICh6X3N0cmVhbXAgc3RybSk7CisvKgorICAgICBUaGlzIGZ1bmN0aW9uIGlzIGVxdWl2YWxlbnQgdG8gaW5mbGF0ZUVuZCBmb2xsb3dlZCBieSBpbmZsYXRlSW5pdCwKKyAgIGJ1dCBkb2VzIG5vdCBmcmVlIGFuZCByZWFsbG9jYXRlIGFsbCB0aGUgaW50ZXJuYWwgZGVjb21wcmVzc2lvbiBzdGF0ZS4KKyAgIFRoZSBzdHJlYW0gd2lsbCBrZWVwIGF0dHJpYnV0ZXMgdGhhdCBtYXkgaGF2ZSBiZWVuIHNldCBieSBpbmZsYXRlSW5pdDIuCisKKyAgICAgIGluZmxhdGVSZXNldCByZXR1cm5zIFpfT0sgaWYgc3VjY2Vzcywgb3IgWl9TVFJFQU1fRVJST1IgaWYgdGhlIHNvdXJjZQorICAgc3RyZWFtIHN0YXRlIHdhcyBpbmNvbnNpc3RlbnQgKHN1Y2ggYXMgemFsbG9jIG9yIHN0YXRlIGJlaW5nIE5VTEwpLgorKi8KKworZXh0ZXJuIGludCB6bGliX2luZmxhdGVJbmNvbXAgKHpfc3RyZWFtICpzdHJtKTsKKy8qCisgICAgIFRoaXMgZnVuY3Rpb24gYWRkcyB0aGUgZGF0YSBhdCBuZXh0X2luIChhdmFpbF9pbiBieXRlcykgdG8gdGhlIG91dHB1dAorICAgaGlzdG9yeSB3aXRob3V0IHBlcmZvcm1pbmcgYW55IG91dHB1dC4gIFRoZXJlIG11c3QgYmUgbm8gcGVuZGluZyBvdXRwdXQsCisgICBhbmQgdGhlIGRlY29tcHJlc3NvciBtdXN0IGJlIGV4cGVjdGluZyB0byBzZWUgdGhlIHN0YXJ0IG9mIGEgYmxvY2suCisgICBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gaXMgZXF1aXZhbGVudCB0byBkZWNvbXByZXNzaW5nIGEgc3RvcmVkIGJsb2NrCisgICBjb250YWluaW5nIHRoZSBkYXRhIGF0IG5leHRfaW4gKGV4Y2VwdCB0aGF0IHRoZSBkYXRhIGlzIG5vdCBvdXRwdXQpLgorKi8KKworICAgICAgICAgICAgICAgICAgICAgICAgLyogdmFyaW91cyBoYWNrcywgZG9uJ3QgbG9vayA6KSAqLworCisvKiBkZWZsYXRlSW5pdCBhbmQgaW5mbGF0ZUluaXQgYXJlIG1hY3JvcyB0byBhbGxvdyBjaGVja2luZyB0aGUgemxpYiB2ZXJzaW9uCisgKiBhbmQgdGhlIGNvbXBpbGVyJ3MgdmlldyBvZiB6X3N0cmVhbToKKyAqLworZXh0ZXJuIGludCB6bGliX2RlZmxhdGVJbml0XyAoel9zdHJlYW1wIHN0cm0sIGludCBsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp2ZXJzaW9uLCBpbnQgc3RyZWFtX3NpemUpOworZXh0ZXJuIGludCB6bGliX2luZmxhdGVJbml0XyAoel9zdHJlYW1wIHN0cm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdmVyc2lvbiwgaW50IHN0cmVhbV9zaXplKTsKK2V4dGVybiBpbnQgemxpYl9kZWZsYXRlSW5pdDJfICh6X3N0cmVhbXAgc3RybSwgaW50ICBsZXZlbCwgaW50ICBtZXRob2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aW5kb3dCaXRzLCBpbnQgbWVtTGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdHJhdGVneSwgY29uc3QgY2hhciAqdmVyc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0cmVhbV9zaXplKTsKK2V4dGVybiBpbnQgemxpYl9pbmZsYXRlSW5pdDJfICh6X3N0cmVhbXAgc3RybSwgaW50ICB3aW5kb3dCaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp2ZXJzaW9uLCBpbnQgc3RyZWFtX3NpemUpOworI2RlZmluZSB6bGliX2RlZmxhdGVJbml0KHN0cm0sIGxldmVsKSBcCisgICAgICAgIHpsaWJfZGVmbGF0ZUluaXRfKChzdHJtKSwgKGxldmVsKSwgWkxJQl9WRVJTSU9OLCBzaXplb2Yoel9zdHJlYW0pKQorI2RlZmluZSB6bGliX2luZmxhdGVJbml0KHN0cm0pIFwKKyAgICAgICAgemxpYl9pbmZsYXRlSW5pdF8oKHN0cm0pLCBaTElCX1ZFUlNJT04sIHNpemVvZih6X3N0cmVhbSkpCisjZGVmaW5lIHpsaWJfZGVmbGF0ZUluaXQyKHN0cm0sIGxldmVsLCBtZXRob2QsIHdpbmRvd0JpdHMsIG1lbUxldmVsLCBzdHJhdGVneSkgXAorICAgICAgICB6bGliX2RlZmxhdGVJbml0Ml8oKHN0cm0pLChsZXZlbCksKG1ldGhvZCksKHdpbmRvd0JpdHMpLChtZW1MZXZlbCksXAorICAgICAgICAgICAgICAgICAgICAgIChzdHJhdGVneSksIFpMSUJfVkVSU0lPTiwgc2l6ZW9mKHpfc3RyZWFtKSkKKyNkZWZpbmUgemxpYl9pbmZsYXRlSW5pdDIoc3RybSwgd2luZG93Qml0cykgXAorICAgICAgICB6bGliX2luZmxhdGVJbml0Ml8oKHN0cm0pLCAod2luZG93Qml0cyksIFpMSUJfVkVSU0lPTiwgc2l6ZW9mKHpfc3RyZWFtKSkKKworCisjaWYgIWRlZmluZWQoX1pfVVRJTF9IKSAmJiAhZGVmaW5lZChOT19EVU1NWV9ERUNMKQorICAgIHN0cnVjdCBpbnRlcm5hbF9zdGF0ZSB7aW50IGR1bW15O307IC8qIGhhY2sgZm9yIGJ1Z2d5IGNvbXBpbGVycyAqLworI2VuZGlmCisKK2V4dGVybiBjb25zdCBjaGFyICAqIHpsaWJfekVycm9yICAgICAgICAgICAoaW50IGVycik7CitleHRlcm4gaW50ICAgICAgICAgICB6bGliX2luZmxhdGVTeW5jUG9pbnQgKHpfc3RyZWFtcCB6KTsKK2V4dGVybiBjb25zdCB1TG9uZyAqIHpsaWJfZ2V0X2NyY190YWJsZSAgICAodm9pZCk7CisKKyNlbmRpZiAvKiBfWkxJQl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3pvcnJvLmggYi9pbmNsdWRlL2xpbnV4L3pvcnJvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE1YjcyNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvem9ycm8uaApAQCAtMCwwICsxLDMyOSBAQAorLyoKKyAqICBsaW51eC96b3Jyby5oIC0tIEFtaWdhIEF1dG9Db25maWcgKFpvcnJvKSBCdXMgRGVmaW5pdGlvbnMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk1LS0yMDAzIEdlZXJ0IFV5dHRlcmhvZXZlbgorICoKKyAqICBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiAgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9MSU5VWF9aT1JST19ICisjZGVmaW5lIF9MSU5VWF9aT1JST19ICisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKworCisgICAgLyoKKyAgICAgKiAgRWFjaCBab3JybyBib2FyZCBoYXMgYSAzMi1iaXQgSUQgb2YgdGhlIGZvcm0KKyAgICAgKgorICAgICAqICAgICAgbW1tbW1tbW1tbW1tbW1tbXBwcHBwcHBwZWVlZWVlZWUKKyAgICAgKgorICAgICAqICB3aXRoCisgICAgICoKKyAgICAgKiAgICAgIG1tbW1tbW1tbW1tbW1tbW0JMTYtYml0IE1hbnVmYWN0dXJlciBJRCAoYXNzaWduZWQgYnkgQ0JNIChzaWdoKSkKKyAgICAgKiAgICAgIHBwcHBwcHBwCQk4LWJpdCBQcm9kdWN0IElEIChhc3NpZ25lZCBieSBtYW51ZmFjdHVyZXIpCisgICAgICogICAgICBlZWVlZWVlZQkJOC1iaXQgRXh0ZW5kZWQgUHJvZHVjdCBJRCAoY3VycmVudGx5IG9ubHkgdXNlZAorICAgICAqCQkJCWZvciBzb21lIEdWUCBib2FyZHMpCisgICAgICovCisKKworI2RlZmluZSBaT1JST19NQU5VRihpZCkJCSgoaWQpID4+IDE2KQorI2RlZmluZSBaT1JST19QUk9EKGlkKQkJKCgoaWQpID4+IDgpICYgMHhmZikKKyNkZWZpbmUgWk9SUk9fRVBDKGlkKQkJKChpZCkgJiAweGZmKQorCisjZGVmaW5lIFpPUlJPX0lEKG1hbnVmLCBwcm9kLCBlcGMpIFwKKyAgICAoKFpPUlJPX01BTlVGXyMjbWFudWYgPDwgMTYpIHwgKChwcm9kKSA8PCA4KSB8IChlcGMpKQorCit0eXBlZGVmIF9fdTMyIHpvcnJvX2lkOworCisKKyNkZWZpbmUgWk9SUk9fV0lMRENBUkQJCSgweGZmZmZmZmZmKQkvKiBub3Qgb2ZmaWNpYWwgKi8KKworLyogSW5jbHVkZSB0aGUgSUQgbGlzdCAqLworI2luY2x1ZGUgPGxpbnV4L3pvcnJvX2lkcy5oPgorCisKKyAgICAvKgorICAgICAqICBHVlAgaWRlbnRpZmllcyBtb3N0IG9mIGl0cyBwcm9kdWN0cyB0aHJvdWdoIHRoZSAnZXh0ZW5kZWQgcHJvZHVjdCBjb2RlJworICAgICAqICAoZXBjKS4gVGhlIGVwYyBoYXMgdG8gYmUgQU5EZWQgd2l0aCB0aGUgR1ZQX1BST0RNQVNLIGJlZm9yZSB0aGUKKyAgICAgKiAgaWRlbnRpZmljYXRpb24uCisgICAgICovCisKKyNkZWZpbmUgR1ZQX1BST0RNQVNLCQkJKDB4ZjgpCisjZGVmaW5lIEdWUF9TQ1NJQ0xLTUFTSwkJCSgweDAxKQorCitlbnVtIEdWUF9mbGFncyB7CisgICAgR1ZQX0lPCQk9IDB4MDEsCisgICAgR1ZQX0FDQ0VMCQk9IDB4MDIsCisgICAgR1ZQX1NDU0kJCT0gMHgwNCwKKyAgICBHVlBfMjRCSVRETUEJPSAweDA4LAorICAgIEdWUF8yNUJJVERNQQk9IDB4MTAsCisgICAgR1ZQX05PQkFOSwkJPSAweDIwLAorICAgIEdWUF8xNE1IWgkJPSAweDQwLAorfTsKKworCitzdHJ1Y3QgTm9kZSB7CisgICAgc3RydWN0ICBOb2RlICpsbl9TdWNjOwkvKiBQb2ludGVyIHRvIG5leHQgKHN1Y2Nlc3NvcikgKi8KKyAgICBzdHJ1Y3QgIE5vZGUgKmxuX1ByZWQ7CS8qIFBvaW50ZXIgdG8gcHJldmlvdXMgKHByZWRlY2Vzc29yKSAqLworICAgIF9fdTggICAgbG5fVHlwZTsKKyAgICBfX3M4ICAgIGxuX1ByaTsJCS8qIFByaW9yaXR5LCBmb3Igc29ydGluZyAqLworICAgIF9fczggICAgKmxuX05hbWU7CQkvKiBJRCBzdHJpbmcsIG51bGwgdGVybWluYXRlZCAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBFeHBhbnNpb25Sb20geworICAgIC8qIC1GaXJzdCAxNiBieXRlcyBvZiB0aGUgZXhwYW5zaW9uIFJPTSAqLworICAgIF9fdTggIGVyX1R5cGU7CQkvKiBCb2FyZCB0eXBlLCBzaXplIGFuZCBmbGFncyAqLworICAgIF9fdTggIGVyX1Byb2R1Y3Q7CQkvKiBQcm9kdWN0IG51bWJlciwgYXNzaWduZWQgYnkgbWFudWZhY3R1cmVyICovCisgICAgX191OCAgZXJfRmxhZ3M7CQkvKiBGbGFncyAqLworICAgIF9fdTggIGVyX1Jlc2VydmVkMDM7CS8qIE11c3QgYmUgemVybyAoJGZmIGludmVydGVkKSAqLworICAgIF9fdTE2IGVyX01hbnVmYWN0dXJlcjsJLyogVW5pcXVlIElELCBBU1NJR05FRCBCWSBDT01NT0RPUkUtQU1JR0EhICovCisgICAgX191MzIgZXJfU2VyaWFsTnVtYmVyOwkvKiBBdmFpbGFibGUgZm9yIHVzZSBieSBtYW51ZmFjdHVyZXIgKi8KKyAgICBfX3UxNiBlcl9Jbml0RGlhZ1ZlYzsJLyogT2Zmc2V0IHRvIG9wdGlvbmFsICJEaWFnQXJlYSIgc3RydWN0dXJlICovCisgICAgX191OCAgZXJfUmVzZXJ2ZWQwYzsKKyAgICBfX3U4ICBlcl9SZXNlcnZlZDBkOworICAgIF9fdTggIGVyX1Jlc2VydmVkMGU7CisgICAgX191OCAgZXJfUmVzZXJ2ZWQwZjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKiBlcl9UeXBlIGJvYXJkIHR5cGUgYml0cyAqLworI2RlZmluZSBFUlRfVFlQRU1BU0sJMHhjMAorI2RlZmluZSBFUlRfWk9SUk9JSQkweGMwCisjZGVmaW5lIEVSVF9aT1JST0lJSQkweDgwCisKKy8qIG90aGVyIGJpdHMgZGVmaW5lZCBpbiBlcl9UeXBlICovCisjZGVmaW5lIEVSVEJfTUVNTElTVAk1CQkvKiBMaW5rIFJBTSBpbnRvIGZyZWUgbWVtb3J5IGxpc3QgKi8KKyNkZWZpbmUgRVJURl9NRU1MSVNUCSgxPDw1KQorCitzdHJ1Y3QgQ29uZmlnRGV2IHsKKyAgICBzdHJ1Y3QgTm9kZQkJY2RfTm9kZTsKKyAgICBfX3U4CQljZF9GbGFnczsJLyogKHJlYWQvd3JpdGUpICovCisgICAgX191OAkJY2RfUGFkOwkJLyogcmVzZXJ2ZWQgKi8KKyAgICBzdHJ1Y3QgRXhwYW5zaW9uUm9tIGNkX1JvbTsJCS8qIGNvcHkgb2YgYm9hcmQncyBleHBhbnNpb24gUk9NICovCisgICAgdm9pZAkJKmNkX0JvYXJkQWRkcjsJLyogd2hlcmUgaW4gbWVtb3J5IHRoZSBib2FyZCB3YXMgcGxhY2VkICovCisgICAgX191MzIJCWNkX0JvYXJkU2l6ZTsJLyogc2l6ZSBvZiBib2FyZCBpbiBieXRlcyAqLworICAgIF9fdTE2CQljZF9TbG90QWRkcjsJLyogd2hpY2ggc2xvdCBudW1iZXIgKFBSSVZBVEUpICovCisgICAgX191MTYJCWNkX1Nsb3RTaXplOwkvKiBudW1iZXIgb2Ygc2xvdHMgKFBSSVZBVEUpICovCisgICAgdm9pZAkJKmNkX0RyaXZlcjsJLyogcG9pbnRlciB0byBub2RlIG9mIGRyaXZlciAqLworICAgIHN0cnVjdCBDb25maWdEZXYJKmNkX05leHRDRDsJLyogbGlua2VkIGxpc3Qgb2YgZHJpdmVycyB0byBjb25maWcgKi8KKyAgICBfX3UzMgkJY2RfVW51c2VkWzRdOwkvKiBmb3Igd2hhdGV2ZXIgdGhlIGRyaXZlciB3YW50cyAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNlbHNlIC8qIF9fQVNTRU1CTFlfXyAqLworCitMTl9TdWNjCQk9IDAKK0xOX1ByZWQJCT0gTE5fU3VjYys0CitMTl9UeXBlCQk9IExOX1ByZWQrNAorTE5fUHJpCQk9IExOX1R5cGUrMQorTE5fTmFtZQkJPSBMTl9QcmkrMQorTE5fc2l6ZW9mCT0gTE5fTmFtZSs0CisKK0VSX1R5cGUJCT0gMAorRVJfUHJvZHVjdAk9IEVSX1R5cGUrMQorRVJfRmxhZ3MJPSBFUl9Qcm9kdWN0KzEKK0VSX1Jlc2VydmVkMDMJPSBFUl9GbGFncysxCitFUl9NYW51ZmFjdHVyZXIJPSBFUl9SZXNlcnZlZDAzKzEKK0VSX1NlcmlhbE51bWJlcgk9IEVSX01hbnVmYWN0dXJlcisyCitFUl9Jbml0RGlhZ1ZlYwk9IEVSX1NlcmlhbE51bWJlcis0CitFUl9SZXNlcnZlZDBjCT0gRVJfSW5pdERpYWdWZWMrMgorRVJfUmVzZXJ2ZWQwZAk9IEVSX1Jlc2VydmVkMGMrMQorRVJfUmVzZXJ2ZWQwZQk9IEVSX1Jlc2VydmVkMGQrMQorRVJfUmVzZXJ2ZWQwZgk9IEVSX1Jlc2VydmVkMGUrMQorRVJfc2l6ZW9mCT0gRVJfUmVzZXJ2ZWQwZisxCisKK0NEX05vZGUJCT0gMAorQ0RfRmxhZ3MJPSBDRF9Ob2RlK0xOX3NpemVvZgorQ0RfUGFkCQk9IENEX0ZsYWdzKzEKK0NEX1JvbQkJPSBDRF9QYWQrMQorQ0RfQm9hcmRBZGRyCT0gQ0RfUm9tK0VSX3NpemVvZgorQ0RfQm9hcmRTaXplCT0gQ0RfQm9hcmRBZGRyKzQKK0NEX1Nsb3RBZGRyCT0gQ0RfQm9hcmRTaXplKzQKK0NEX1Nsb3RTaXplCT0gQ0RfU2xvdEFkZHIrMgorQ0RfRHJpdmVyCT0gQ0RfU2xvdFNpemUrMgorQ0RfTmV4dENECT0gQ0RfRHJpdmVyKzQKK0NEX1VudXNlZAk9IENEX05leHRDRCs0CitDRF9zaXplb2YJPSBDRF9VbnVzZWQrKDQqNCkKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjZGVmaW5lIFpPUlJPX05VTV9BVVRPCQkxNgorCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorCisjaW5jbHVkZSA8YXNtL3pvcnJvLmg+CisKKworICAgIC8qCisgICAgICogIFpvcnJvIGRldmljZXMKKyAgICAgKi8KKworc3RydWN0IHpvcnJvX2RldiB7CisgICAgc3RydWN0IEV4cGFuc2lvblJvbSByb207CisgICAgem9ycm9faWQgaWQ7CisgICAgc3RydWN0IHpvcnJvX2RyaXZlciAqZHJpdmVyOwkvKiB3aGljaCBkcml2ZXIgaGFzIGFsbG9jYXRlZCB0aGlzIGRldmljZSAqLworICAgIHN0cnVjdCBkZXZpY2UgZGV2OwkJCS8qIEdlbmVyaWMgZGV2aWNlIGludGVyZmFjZSAqLworICAgIHUxNiBzbG90YWRkcjsKKyAgICB1MTYgc2xvdHNpemU7CisgICAgY2hhciBuYW1lWzY0XTsKKyAgICBzdHJ1Y3QgcmVzb3VyY2UgcmVzb3VyY2U7Cit9OworCisjZGVmaW5lCXRvX3pvcnJvX2RldihuKQljb250YWluZXJfb2Yobiwgc3RydWN0IHpvcnJvX2RldiwgZGV2KQorCisKKyAgICAvKgorICAgICAqICBab3JybyBidXMKKyAgICAgKi8KKworc3RydWN0IHpvcnJvX2J1cyB7CisgICAgc3RydWN0IGxpc3RfaGVhZCBkZXZpY2VzOwkJLyogbGlzdCBvZiBkZXZpY2VzIG9uIHRoaXMgYnVzICovCisgICAgdW5zaWduZWQgaW50IG51bV9yZXNvdXJjZXM7CQkvKiBudW1iZXIgb2YgcmVzb3VyY2VzICovCisgICAgc3RydWN0IHJlc291cmNlIHJlc291cmNlc1s0XTsJLyogYWRkcmVzcyBzcGFjZSByb3V0ZWQgdG8gdGhpcyBidXMgKi8KKyAgICBzdHJ1Y3QgZGV2aWNlIGRldjsKKyAgICBjaGFyIG5hbWVbMTBdOworfTsKKworZXh0ZXJuIHN0cnVjdCB6b3Jyb19idXMgem9ycm9fYnVzOwkvKiBzaW5nbGUgWm9ycm8gYnVzICovCitleHRlcm4gc3RydWN0IGJ1c190eXBlIHpvcnJvX2J1c190eXBlOworCisKKyAgICAvKgorICAgICAqICBab3JybyBkZXZpY2UgSURzCisgICAgICovCisKK3N0cnVjdCB6b3Jyb19kZXZpY2VfaWQgeworCXpvcnJvX2lkIGlkOwkJCS8qIERldmljZSBJRCBvciBaT1JST19XSUxEQ0FSRCAqLworCXVuc2lnbmVkIGxvbmcgZHJpdmVyX2RhdGE7CS8qIERhdGEgcHJpdmF0ZSB0byB0aGUgZHJpdmVyICovCit9OworCisKKyAgICAvKgorICAgICAqICBab3JybyBkZXZpY2UgZHJpdmVycworICAgICAqLworCitzdHJ1Y3Qgem9ycm9fZHJpdmVyIHsKKyAgICBzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CisgICAgY2hhciAqbmFtZTsKKyAgICBjb25zdCBzdHJ1Y3Qgem9ycm9fZGV2aWNlX2lkICppZF90YWJsZTsJLyogTlVMTCBpZiB3YW50cyBhbGwgZGV2aWNlcyAqLworICAgIGludCAoKnByb2JlKShzdHJ1Y3Qgem9ycm9fZGV2ICp6LCBjb25zdCBzdHJ1Y3Qgem9ycm9fZGV2aWNlX2lkICppZCk7CS8qIE5ldyBkZXZpY2UgaW5zZXJ0ZWQgKi8KKyAgICB2b2lkICgqcmVtb3ZlKShzdHJ1Y3Qgem9ycm9fZGV2ICp6KTsJLyogRGV2aWNlIHJlbW92ZWQgKE5VTEwgaWYgbm90IGEgaG90LXBsdWcgY2FwYWJsZSBkcml2ZXIpICovCisgICAgc3RydWN0IGRldmljZV9kcml2ZXIgZHJpdmVyOworfTsKKworI2RlZmluZQl0b196b3Jyb19kcml2ZXIoZHJ2KQljb250YWluZXJfb2YoZHJ2LCBzdHJ1Y3Qgem9ycm9fZHJpdmVyLCBkcml2ZXIpCisKKworI2RlZmluZSB6b3Jyb19mb3JfZWFjaF9kZXYoZGV2KQlcCisJZm9yIChkZXYgPSAmem9ycm9fYXV0b2NvblswXTsgZGV2IDwgem9ycm9fYXV0b2Nvbit6b3Jyb19udW1fYXV0b2NvbjsgZGV2KyspCisKKworLyogTmV3LXN0eWxlIHByb2JpbmcgKi8KK2V4dGVybiBpbnQgem9ycm9fcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCB6b3Jyb19kcml2ZXIgKik7CitleHRlcm4gdm9pZCB6b3Jyb191bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3Qgem9ycm9fZHJpdmVyICopOworZXh0ZXJuIGNvbnN0IHN0cnVjdCB6b3Jyb19kZXZpY2VfaWQgKnpvcnJvX21hdGNoX2RldmljZShjb25zdCBzdHJ1Y3Qgem9ycm9fZGV2aWNlX2lkICppZHMsIGNvbnN0IHN0cnVjdCB6b3Jyb19kZXYgKnopOworc3RhdGljIGlubGluZSBzdHJ1Y3Qgem9ycm9fZHJpdmVyICp6b3Jyb19kZXZfZHJpdmVyKGNvbnN0IHN0cnVjdCB6b3Jyb19kZXYgKnopCit7CisgICAgcmV0dXJuIHotPmRyaXZlcjsKK30KKworCitleHRlcm4gdW5zaWduZWQgaW50IHpvcnJvX251bV9hdXRvY29uOwkvKiAjIG9mIGF1dG9jb25maWcgZGV2aWNlcyBmb3VuZCAqLworZXh0ZXJuIHN0cnVjdCB6b3Jyb19kZXYgem9ycm9fYXV0b2NvbltaT1JST19OVU1fQVVUT107CisKKworICAgIC8qCisgICAgICogIFpvcnJvIEZ1bmN0aW9ucworICAgICAqLworCitleHRlcm4gc3RydWN0IHpvcnJvX2RldiAqem9ycm9fZmluZF9kZXZpY2Uoem9ycm9faWQgaWQsCisJCQkJCSAgIHN0cnVjdCB6b3Jyb19kZXYgKmZyb20pOworCisjZGVmaW5lIHpvcnJvX3Jlc291cmNlX3N0YXJ0KHopCSgoeiktPnJlc291cmNlLnN0YXJ0KQorI2RlZmluZSB6b3Jyb19yZXNvdXJjZV9lbmQoeikJKCh6KS0+cmVzb3VyY2UuZW5kKQorI2RlZmluZSB6b3Jyb19yZXNvdXJjZV9sZW4oeikJKCh6KS0+cmVzb3VyY2UuZW5kLSh6KS0+cmVzb3VyY2Uuc3RhcnQrMSkKKyNkZWZpbmUgem9ycm9fcmVzb3VyY2VfZmxhZ3MoeikJKCh6KS0+cmVzb3VyY2UuZmxhZ3MpCisKKyNkZWZpbmUgem9ycm9fcmVxdWVzdF9kZXZpY2UoeiwgbmFtZSkgXAorICAgIHJlcXVlc3RfbWVtX3JlZ2lvbih6b3Jyb19yZXNvdXJjZV9zdGFydCh6KSwgem9ycm9fcmVzb3VyY2VfbGVuKHopLCBuYW1lKQorI2RlZmluZSB6b3Jyb19yZWxlYXNlX2RldmljZSh6KSBcCisgICAgcmVsZWFzZV9tZW1fcmVnaW9uKHpvcnJvX3Jlc291cmNlX3N0YXJ0KHopLCB6b3Jyb19yZXNvdXJjZV9sZW4oeikpCisKKy8qIFNpbWlsYXIgdG8gdGhlIGhlbHBlcnMgYWJvdmUsIHRoZXNlIG1hbmlwdWxhdGUgcGVyLXpvcnJvX2RldgorICogZHJpdmVyLXNwZWNpZmljIGRhdGEuICBUaGV5IGFyZSByZWFsbHkganVzdCBhIHdyYXBwZXIgYXJvdW5kCisgKiB0aGUgZ2VuZXJpYyBkZXZpY2Ugc3RydWN0dXJlIGZ1bmN0aW9ucyBvZiB0aGVzZSBjYWxscy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkICp6b3Jyb19nZXRfZHJ2ZGF0YSAoc3RydWN0IHpvcnJvX2RldiAqeikKK3sKKwlyZXR1cm4gZGV2X2dldF9kcnZkYXRhKCZ6LT5kZXYpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgem9ycm9fc2V0X2RydmRhdGEgKHN0cnVjdCB6b3Jyb19kZXYgKnosIHZvaWQgKmRhdGEpCit7CisJZGV2X3NldF9kcnZkYXRhKCZ6LT5kZXYsIGRhdGEpOworfQorCisKKy8qCisgKiBBIGhlbHBlciBmdW5jdGlvbiB3aGljaCBoZWxwcyBlbnN1cmUgY29ycmVjdCB6b3Jyb19kcml2ZXIKKyAqIHNldHVwIGFuZCBjbGVhbnVwIGZvciBjb21tb25seS1lbmNvdW50ZXJlZCBob3RwbHVnL21vZHVsYXIgY2FzZXMKKyAqCisgKiBUaGlzIE1VU1Qgc3RheSBpbiBhIGhlYWRlciwgYXMgaXQgY2hlY2tzIGZvciAtRE1PRFVMRQorICovCitzdGF0aWMgaW5saW5lIGludCB6b3Jyb19tb2R1bGVfaW5pdChzdHJ1Y3Qgem9ycm9fZHJpdmVyICpkcnYpCit7CisJaW50IHJjID0gem9ycm9fcmVnaXN0ZXJfZHJpdmVyKGRydik7CisKKwlpZiAocmMgPiAwKQorCQlyZXR1cm4gMDsKKworCS8qIGlmZiBDT05GSUdfSE9UUExVRyBhbmQgYnVpbHQgaW50byBrZXJuZWwsIHdlIHNob3VsZAorCSAqIGxlYXZlIHRoZSBkcml2ZXIgYXJvdW5kIGZvciBmdXR1cmUgaG90cGx1ZyBldmVudHMuCisJICogRm9yIHRoZSBtb2R1bGUgY2FzZSwgYSBob3RwbHVnIGRhZW1vbiBvZiBzb21lIHNvcnQKKwkgKiBzaG91bGQgbG9hZCBhIG1vZHVsZSBpbiByZXNwb25zZSB0byBhbiBpbnNlcnQgZXZlbnQuICovCisjaWYgZGVmaW5lZChDT05GSUdfSE9UUExVRykgJiYgIWRlZmluZWQoTU9EVUxFKQorCWlmIChyYyA9PSAwKQorCQlyZXR1cm4gMDsKKyNlbHNlCisJaWYgKHJjID09IDApCisJCXJjID0gLUVOT0RFVjsKKyNlbmRpZgorCisJLyogaWYgd2UgZ2V0IGhlcmUsIHdlIG5lZWQgdG8gY2xlYW4gdXAgWm9ycm8gZHJpdmVyIGluc3RhbmNlCisJICogYW5kIHJldHVybiBzb21lIHNvcnQgb2YgZXJyb3IgKi8KKwl6b3Jyb191bnJlZ2lzdGVyX2RyaXZlcihkcnYpOworCisJcmV0dXJuIHJjOworfQorCisKKyAgICAvKgorICAgICAqICBCaXRtYXNrIGluZGljYXRpbmcgcG9ydGlvbnMgb2YgYXZhaWxhYmxlIFpvcnJvIElJIFJBTSB0aGF0IGFyZSB1bnVzZWQKKyAgICAgKiAgYnkgdGhlIHN5c3RlbS4gRXZlcnkgYml0IHJlcHJlc2VudHMgYSA2NEsgY2h1bmssIGZvciBhIG1heGltdW0gb2YgOE1CCisgICAgICogICgxMjggY2h1bmtzLCBwaHlzaWNhbCAweDAwMjAwMDAwLTB4MDA5ZmZmZmYpLgorICAgICAqCisgICAgICogIElmIHlvdSB3YW50IHRvIHVzZSAoPSBhbGxvY2F0ZSkgcG9ydGlvbnMgb2YgdGhpcyBSQU0sIHlvdSBzaG91bGQgY2xlYXIKKyAgICAgKiAgdGhlIGNvcnJlc3BvbmRpbmcgYml0cy4KKyAgICAgKi8KKworZXh0ZXJuIERFQ0xBUkVfQklUTUFQKHpvcnJvX3VudXNlZF96MnJhbSwgMTI4KTsKKworI2RlZmluZSBaMlJBTV9TVEFSVAkJKDB4MDAyMDAwMDApCisjZGVmaW5lIFoyUkFNX0VORAkJKDB4MDBhMDAwMDApCisjZGVmaW5lIFoyUkFNX1NJWkUJCSgweDAwODAwMDAwKQorI2RlZmluZSBaMlJBTV9DSFVOS1NJWkUJCSgweDAwMDEwMDAwKQorI2RlZmluZSBaMlJBTV9DSFVOS01BU0sJCSgweDAwMDBmZmZmKQorI2RlZmluZSBaMlJBTV9DSFVOS1NISUZUCSgxNikKKworCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9MSU5VWF9aT1JST19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3pvcnJvX2lkcy5oIGIvaW5jbHVkZS9saW51eC96b3Jyb19pZHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTc0OTA4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC96b3Jyb19pZHMuaApAQCAtMCwwICsxLDU1MiBAQAorLyoKKyAqICBab3JybyBib2FyZCBJRHMKKyAqCisgKiAgUGxlYXNlIGtlZXAgc29ydGVkLgorICovCisKKworI2RlZmluZSBaT1JST19NQU5VRl9QQUNJRklDX1BFUklQSEVSQUxTCQkJCTB4MDBEMworI2RlZmluZSAgWk9SUk9fUFJPRF9QQUNJRklDX1BFUklQSEVSQUxTX1NFXzIwMDBfQTUwMAkJWk9SUk9fSUQoUEFDSUZJQ19QRVJJUEhFUkFMUywgMHgwMCwgMCkKKyNkZWZpbmUgIFpPUlJPX1BST0RfUEFDSUZJQ19QRVJJUEhFUkFMU19TQ1NJCQkJWk9SUk9fSUQoUEFDSUZJQ19QRVJJUEhFUkFMUywgMHgwQSwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9NQUNST1NZU1RFTVNfVVNBXzIJCQkJMHgwMTAwCisjZGVmaW5lICBaT1JST19QUk9EX01BQ1JPU1lTVEVNU19XQVJQX0VOR0lORQkJCVpPUlJPX0lEKE1BQ1JPU1lTVEVNU19VU0FfMiwgMHgxMywgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9LVVBLRV8xCQkJCQkweDAwREQKKyNkZWZpbmUgIFpPUlJPX1BST0RfS1VQS0VfR09MRU1fUkFNX0JPWF8yTUIJCQlaT1JST19JRChLVVBLRV8xLCAweDAwLCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX01FTVBISVMJCQkJCTB4MDEwMAorI2RlZmluZSAgWk9SUk9fUFJPRF9NRU1QSElTX1NUT1JNQlJJTkdFUgkJCVpPUlJPX0lEKE1FTVBISVMsIDB4MDAsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfM19TVEFURQkJCQkJMHgwMjAwCisjZGVmaW5lICBaT1JST19QUk9EXzNfU1RBVEVfTUVHQU1JWF8yMDAwCQkJWk9SUk9fSUQoM19TVEFURSwgMHgwMiwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9DT01NT0RPUkVfQlJBVU5TQ0hXRUlHCQkJMHgwMjAxCisjZGVmaW5lICBaT1JST19QUk9EX0NCTV9BMjA4OF9BMjI4NgkJCQlaT1JST19JRChDT01NT0RPUkVfQlJBVU5TQ0hXRUlHLCAweDAxLCAwKQorI2RlZmluZSAgWk9SUk9fUFJPRF9DQk1fQTIyODYJCQkJCVpPUlJPX0lEKENPTU1PRE9SRV9CUkFVTlNDSFdFSUcsIDB4MDIsIDApCisjZGVmaW5lICBaT1JST19QUk9EX0NCTV9BNDA5MV8xCQkJCQlaT1JST19JRChDT01NT0RPUkVfQlJBVU5TQ0hXRUlHLCAweDU0LCAwKQorI2RlZmluZSAgWk9SUk9fUFJPRF9DQk1fQTIzODZTWF8xCQkJCVpPUlJPX0lEKENPTU1PRE9SRV9CUkFVTlNDSFdFSUcsIDB4NjcsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfQ09NTU9ET1JFX1dFU1RfQ0hFU1RFUl8xCQkJMHgwMjAyCisjZGVmaW5lICBaT1JST19QUk9EX0NCTV9BMjA5MEEJCQkJCVpPUlJPX0lEKENPTU1PRE9SRV9XRVNUX0NIRVNURVJfMSwgMHgwMSwgMCkKKyNkZWZpbmUgIFpPUlJPX1BST0RfQ0JNX0E1OTBfQTIwOTFfMQkJCQlaT1JST19JRChDT01NT0RPUkVfV0VTVF9DSEVTVEVSXzEsIDB4MDIsIDApCisjZGVmaW5lICBaT1JST19QUk9EX0NCTV9BNTkwX0EyMDkxXzIJCQkJWk9SUk9fSUQoQ09NTU9ET1JFX1dFU1RfQ0hFU1RFUl8xLCAweDAzLCAwKQorI2RlZmluZSAgWk9SUk9fUFJPRF9DQk1fQTIwOTBCCQkJCQlaT1JST19JRChDT01NT0RPUkVfV0VTVF9DSEVTVEVSXzEsIDB4MDQsIDApCisjZGVmaW5lICBaT1JST19QUk9EX0NCTV9BMjA2MAkJCQkJWk9SUk9fSUQoQ09NTU9ET1JFX1dFU1RfQ0hFU1RFUl8xLCAweDA5LCAwKQorI2RlZmluZSAgWk9SUk9fUFJPRF9DQk1fQTU5MF9BMjA1Ml9BMjA1OF9BMjA5MQkJCVpPUlJPX0lEKENPTU1PRE9SRV9XRVNUX0NIRVNURVJfMSwgMHgwQSwgMCkKKyNkZWZpbmUgIFpPUlJPX1BST0RfQ0JNX0E1NjBfUkFNCQkJCVpPUlJPX0lEKENPTU1PRE9SRV9XRVNUX0NIRVNURVJfMSwgMHgyMCwgMCkKKyNkZWZpbmUgIFpPUlJPX1BST0RfQ0JNX0EyMjMyX1BST1RPVFlQRQkJCQlaT1JST19JRChDT01NT0RPUkVfV0VTVF9DSEVTVEVSXzEsIDB4NDUsIDApCisjZGVmaW5lICBaT1JST19QUk9EX0NCTV9BMjIzMgkJCQkJWk9SUk9fSUQoQ09NTU9ET1JFX1dFU1RfQ0hFU1RFUl8xLCAweDQ2LCAwKQorI2RlZmluZSAgWk9SUk9fUFJPRF9DQk1fQTI2MjAJCQkJCVpPUlJPX0lEKENPTU1PRE9SRV9XRVNUX0NIRVNURVJfMSwgMHg1MCwgMCkKKyNkZWZpbmUgIFpPUlJPX1BST0RfQ0JNX0EyNjMwCQkJCQlaT1JST19JRChDT01NT0RPUkVfV0VTVF9DSEVTVEVSXzEsIDB4NTEsIDApCisjZGVmaW5lICBaT1JST19QUk9EX0NCTV9BNDA5MV8yCQkJCQlaT1JST19JRChDT01NT0RPUkVfV0VTVF9DSEVTVEVSXzEsIDB4NTQsIDApCisjZGVmaW5lICBaT1JST19QUk9EX0NCTV9BMjA2NV8xCQkJCQlaT1JST19JRChDT01NT0RPUkVfV0VTVF9DSEVTVEVSXzEsIDB4NUEsIDApCisjZGVmaW5lICBaT1JST19QUk9EX0NCTV9ST01VTEFUT1IJCQkJWk9SUk9fSUQoQ09NTU9ET1JFX1dFU1RfQ0hFU1RFUl8xLCAweDYwLCAwKQorI2RlZmluZSAgWk9SUk9fUFJPRF9DQk1fQTMwMDBfVEVTVF9GSVhUVVJFCQkJWk9SUk9fSUQoQ09NTU9ET1JFX1dFU1RfQ0hFU1RFUl8xLCAweDYxLCAwKQorI2RlZmluZSAgWk9SUk9fUFJPRF9DQk1fQTIzODZTWF8yCQkJCVpPUlJPX0lEKENPTU1PRE9SRV9XRVNUX0NIRVNURVJfMSwgMHg2NywgMCkKKyNkZWZpbmUgIFpPUlJPX1BST0RfQ0JNX0EyMDY1XzIJCQkJCVpPUlJPX0lEKENPTU1PRE9SRV9XRVNUX0NIRVNURVJfMSwgMHg3MCwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9DT01NT0RPUkVfV0VTVF9DSEVTVEVSXzIJCQkweDAyMDMKKyNkZWZpbmUgIFpPUlJPX1BST0RfQ0JNX0EyMDkwQV9DTQkJCQlaT1JST19JRChDT01NT0RPUkVfV0VTVF9DSEVTVEVSXzIsIDB4MDMsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfUFJPR1JFU1NJVkVfUEVSSVBIRVJBTFNfQU5EX1NZU1RFTVNfMgkweDAyRjQKKyNkZWZpbmUgIFpPUlJPX1BST0RfUFBTX0VYUDgwMDAJCQkJCVpPUlJPX0lEKFBST0dSRVNTSVZFX1BFUklQSEVSQUxTX0FORF9TWVNURU1TXzIsIDB4MDIsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfS09MRkZfQ09NUFVURVJfU1VQUExJRVMJCQkweDAyRkYKKyNkZWZpbmUgIFpPUlJPX1BST0RfS0NTX1BPV0VSX1BDX0JPQVJECQkJCVpPUlJPX0lEKEtPTEZGX0NPTVBVVEVSX1NVUFBMSUVTLCAweDAwLCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX0NBUkRDT18xCQkJCQkweDAzRUMKKyNkZWZpbmUgIFpPUlJPX1BST0RfQ0FSRENPX0tST05PU18yMDAwXzEJCQlaT1JST19JRChDQVJEQ09fMSwgMHgwNCwgMCkKKyNkZWZpbmUgIFpPUlJPX1BST0RfQ0FSRENPX0ExMDAwXzEJCQkJWk9SUk9fSUQoQ0FSRENPXzEsIDB4MEMsIDApCisjZGVmaW5lICBaT1JST19QUk9EX0NBUkRDT19FU0NPUlQJCQkJWk9SUk9fSUQoQ0FSRENPXzEsIDB4MEUsIDApCisjZGVmaW5lICBaT1JST19QUk9EX0NBUkRDT19BMjQxMAkJCQlaT1JST19JRChDQVJEQ09fMSwgMHhGNSwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9BX1NRVUFSRUQJCQkJCTB4MDNFRAorI2RlZmluZSAgWk9SUk9fUFJPRF9BX1NRVUFSRURfTElWRV8yMDAwCQkJCVpPUlJPX0lEKEFfU1FVQVJFRCwgMHgwMSwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9DT01TUEVDX0NPTU1VTklDQVRJT05TCQkJMHgwM0VFCisjZGVmaW5lICBaT1JST19QUk9EX0NPTVNQRUNfQ09NTVVOSUNBVElPTlNfQVgyMDAwCQlaT1JST19JRChDT01TUEVDX0NPTU1VTklDQVRJT05TLCAweDAxLCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX0FOQUtJTl9SRVNFQVJDSAkJCQkweDAzRjEKKyNkZWZpbmUgIFpPUlJPX1BST0RfQU5BS0lOX1JFU0VBUkNIX0VBU1lMCQkJWk9SUk9fSUQoQU5BS0lOX1JFU0VBUkNILCAweDAxLCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX01JQ1JPQk9USUNTCQkJCQkweDAzRjIKKyNkZWZpbmUgIFpPUlJPX1BST0RfTUlDUk9CT1RJQ1NfU1RBUkJPQVJEX0lJCQkJWk9SUk9fSUQoTUlDUk9CT1RJQ1MsIDB4MDAsIDApCisjZGVmaW5lICBaT1JST19QUk9EX01JQ1JPQk9USUNTX1NUQVJEUklWRQkJCVpPUlJPX0lEKE1JQ1JPQk9USUNTLCAweDAyLCAwKQorI2RlZmluZSAgWk9SUk9fUFJPRF9NSUNST0JPVElDU184X1VQX0EJCQkJWk9SUk9fSUQoTUlDUk9CT1RJQ1MsIDB4MDMsIDApCisjZGVmaW5lICBaT1JST19QUk9EX01JQ1JPQk9USUNTXzhfVVBfWgkJCQlaT1JST19JRChNSUNST0JPVElDUywgMHgwNCwgMCkKKyNkZWZpbmUgIFpPUlJPX1BST0RfTUlDUk9CT1RJQ1NfREVMVEFfUkFNCQkJWk9SUk9fSUQoTUlDUk9CT1RJQ1MsIDB4MjAsIDApCisjZGVmaW5lICBaT1JST19QUk9EX01JQ1JPQk9USUNTXzhfU1RBUl9SQU0JCQlaT1JST19JRChNSUNST0JPVElDUywgMHg0MCwgMCkKKyNkZWZpbmUgIFpPUlJPX1BST0RfTUlDUk9CT1RJQ1NfOF9TVEFSCQkJCVpPUlJPX0lEKE1JQ1JPQk9USUNTLCAweDQxLCAwKQorI2RlZmluZSAgWk9SUk9fUFJPRF9NSUNST0JPVElDU19WWExfUkFNXzMyCQkJWk9SUk9fSUQoTUlDUk9CT1RJQ1MsIDB4NDQsIDApCisjZGVmaW5lICBaT1JST19QUk9EX01JQ1JPQk9USUNTX1ZYTF82ODAzMAkJCVpPUlJPX0lEKE1JQ1JPQk9USUNTLCAweDQ1LCAwKQorI2RlZmluZSAgWk9SUk9fUFJPRF9NSUNST0JPVElDU19ERUxUQQkJCQlaT1JST19JRChNSUNST0JPVElDUywgMHg2MCwgMCkKKyNkZWZpbmUgIFpPUlJPX1BST0RfTUlDUk9CT1RJQ1NfTUJYXzEyMDBfMTIwMFpfUkFNCQlaT1JST19JRChNSUNST0JPVElDUywgMHg4MSwgMCkKKyNkZWZpbmUgIFpPUlJPX1BST0RfTUlDUk9CT1RJQ1NfSEFSREZSQU1FXzIwMDBfMQkJWk9SUk9fSUQoTUlDUk9CT1RJQ1MsIDB4OTYsIDApCisjZGVmaW5lICBaT1JST19QUk9EX01JQ1JPQk9USUNTX0hBUkRGUkFNRV8yMDAwXzIJCVpPUlJPX0lEKE1JQ1JPQk9USUNTLCAweDlFLCAwKQorI2RlZmluZSAgWk9SUk9fUFJPRF9NSUNST0JPVElDU19NQlhfMTIwMF8xMjAwWgkJCVpPUlJPX0lEKE1JQ1JPQk9USUNTLCAweEMxLCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX0FDQ0VTU19BU1NPQ0lBVEVTX0FMRUdSQQkJCTB4MDNGNAorCisjZGVmaW5lIFpPUlJPX01BTlVGX0VYUEFOU0lPTl9URUNITk9MT0dJRVMJCQkweDAzRjYKKworI2RlZmluZSBaT1JST19NQU5VRl9BU0RHCQkJCQkweDAzRkYKKyNkZWZpbmUgIFpPUlJPX1BST0RfQVNER19NRU1PUllfMQkJCQlaT1JST19JRChBU0RHLCAweDAxLCAwKQorI2RlZmluZSAgWk9SUk9fUFJPRF9BU0RHX01FTU9SWV8yCQkJCVpPUlJPX0lEKEFTREcsIDB4MDIsIDApCisjZGVmaW5lICBaT1JST19QUk9EX0FTREdfRUI5MjBfTEFOX1JPVkVSCQkJWk9SUk9fSUQoQVNERywgMHhGRSwgMCkKKyNkZWZpbmUgIFpPUlJPX1BST0RfQVNER19HUElCX0RVQUxJRUVFNDg4X1RXSU5fWAkJWk9SUk9fSUQoQVNERywgMHhGRiwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9JTVRST05JQ1NfMQkJCQkJMHgwNDA0CisjZGVmaW5lICBaT1JST19QUk9EX0lNVFJPTklDU19IVVJSSUNBTkVfMjgwMF8xCQkJWk9SUk9fSUQoSU1UUk9OSUNTXzEsIDB4MzksIDApCisjZGVmaW5lICBaT1JST19QUk9EX0lNVFJPTklDU19IVVJSSUNBTkVfMjgwMF8yCQkJWk9SUk9fSUQoSU1UUk9OSUNTXzEsIDB4NTcsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfQ0JNX1VOSVZFUlNJVFlfT0ZfTE9XRUxMCQkJMHgwNDA2CisjZGVmaW5lICBaT1JST19QUk9EX0NCTV9BMjQxMAkJCQkJWk9SUk9fSUQoQ0JNX1VOSVZFUlNJVFlfT0ZfTE9XRUxMLCAweDAwLCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX0FNRVJJU1RBUgkJCQkJMHgwNDFECisjZGVmaW5lICBaT1JST19QUk9EX0FNRVJJU1RBUl9BMjA2NQkJCQlaT1JST19JRChBTUVSSVNUQVIsIDB4MDEsIDApCisjZGVmaW5lICBaT1JST19QUk9EX0FNRVJJU1RBUl9BNTYwCQkJCVpPUlJPX0lEKEFNRVJJU1RBUiwgMHgwOSwgMCkKKyNkZWZpbmUgIFpPUlJPX1BST0RfQU1FUklTVEFSX0E0MDY2CQkJCVpPUlJPX0lEKEFNRVJJU1RBUiwgMHgwQSwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9TVVBSQQkJCQkJMHgwNDIwCisjZGVmaW5lICBaT1JST19QUk9EX1NVUFJBX1NVUFJBRFJJVkVfNHg0CQkJWk9SUk9fSUQoU1VQUkEsIDB4MDEsIDApCisjZGVmaW5lICBaT1JST19QUk9EX1NVUFJBXzEwMDBfUkFNCQkJCVpPUlJPX0lEKFNVUFJBLCAweDAyLCAwKQorI2RlZmluZSAgWk9SUk9fUFJPRF9TVVBSQV8yMDAwX0RNQQkJCQlaT1JST19JRChTVVBSQSwgMHgwMywgMCkKKyNkZWZpbmUgIFpPUlJPX1BST0RfU1VQUkFfNTAwCQkJCQlaT1JST19JRChTVVBSQSwgMHgwNSwgMCkKKyNkZWZpbmUgIFpPUlJPX1BST0RfU1VQUkFfNTAwX1NDU0kJCQkJWk9SUk9fSUQoU1VQUkEsIDB4MDgsIDApCisjZGVmaW5lICBaT1JST19QUk9EX1NVUFJBXzUwMFhQXzIwMDBfUkFNCQkJWk9SUk9fSUQoU1VQUkEsIDB4MDksIDApCisjZGVmaW5lICBaT1JST19QUk9EX1NVUFJBXzUwMFJYXzIwMDBfUkFNCQkJWk9SUk9fSUQoU1VQUkEsIDB4MEEsIDApCisjZGVmaW5lICBaT1JST19QUk9EX1NVUFJBXzI0MDBaSQkJCQlaT1JST19JRChTVVBSQSwgMHgwQiwgMCkKKyNkZWZpbmUgIFpPUlJPX1BST0RfU1VQUkFfNTAwWFBfU1VQUkFEUklWRV9XT1JEU1lOQwkJWk9SUk9fSUQoU1VQUkEsIDB4MEMsIDApCisjZGVmaW5lICBaT1JST19QUk9EX1NVUFJBX1NVUFJBRFJJVkVfV09SRFNZTkNfSUkJCVpPUlJPX0lEKFNVUFJBLCAweDBELCAwKQorI2RlZmluZSAgWk9SUk9fUFJPRF9TVVBSQV8yNDAwWklQTFVTCQkJCVpPUlJPX0lEKFNVUFJBLCAweDEwLCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX0NPTVBVVEVSX1NZU1RFTVNfQVNTT0NJQVRFUwkJCTB4MDQyMgorI2RlZmluZSAgWk9SUk9fUFJPRF9DU0FfTUFHTlVNCQkJCQlaT1JST19JRChDT01QVVRFUl9TWVNURU1TX0FTU09DSUFURVMsIDB4MTEsIDApCisjZGVmaW5lICBaT1JST19QUk9EX0NTQV8xMl9HQVVHRQkJCQlaT1JST19JRChDT01QVVRFUl9TWVNURU1TX0FTU09DSUFURVMsIDB4MTUsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfTUFSQ19NSUNIQUVMX0dST1RICQkJCTB4MDQzOQorCisjZGVmaW5lIFpPUlJPX01BTlVGX01fVEVDSAkJCQkJMHgwNTAyCisjZGVmaW5lICBaT1JST19QUk9EX01URUNfQVQ1MDBfMQkJCQlaT1JST19JRChNX1RFQ0gsIDB4MDMsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzEJCQkweDA2RTEKKyNkZWZpbmUgIFpPUlJPX1BST0RfR1ZQX0lNUEFDVF9TRVJJRVNfSQkJCQlaT1JST19JRChHUkVBVF9WQUxMRVlfUFJPRFVDVFNfMSwgMHgwOCwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9CWVRFQk9YCQkJCQkweDA3REEKKyNkZWZpbmUgIFpPUlJPX1BST0RfQllURUJPWF9BNTAwCQkJCVpPUlJPX0lEKEJZVEVCT1gsIDB4MDAsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfREtCX1BPV0VSX0NPTVBVVElORwkJCQkweDA3REMKKyNkZWZpbmUgIFpPUlJPX1BST0RfREtCX1BPV0VSX0NPTVBVVElOR19TRUNVUkVLRVkJCVpPUlJPX0lEKERLQl9QT1dFUl9DT01QVVRJTkcsIDB4MDksIDApCisjZGVmaW5lICBaT1JST19QUk9EX0RLQl9QT1dFUl9DT01QVVRJTkdfREtNXzMxMjgJCVpPUlJPX0lEKERLQl9QT1dFUl9DT01QVVRJTkcsIDB4MEUsIDApCisjZGVmaW5lICBaT1JST19QUk9EX0RLQl9QT1dFUl9DT01QVVRJTkdfUkFQSURfRklSRQkJWk9SUk9fSUQoREtCX1BPV0VSX0NPTVBVVElORywgMHgwRiwgMCkKKyNkZWZpbmUgIFpPUlJPX1BST0RfREtCX1BPV0VSX0NPTVBVVElOR19ES01fMTIwMgkJWk9SUk9fSUQoREtCX1BPV0VSX0NPTVBVVElORywgMHgxMCwgMCkKKyNkZWZpbmUgIFpPUlJPX1BST0RfREtCX1BPV0VSX0NPTVBVVElOR19DT0JSQV9WSVBFUl9JSV82OEVDMDMwCVpPUlJPX0lEKERLQl9QT1dFUl9DT01QVVRJTkcsIDB4MTIsIDApCisjZGVmaW5lICBaT1JST19QUk9EX0RLQl9QT1dFUl9DT01QVVRJTkdfV0lMREZJUkVfMDYwXzEJCVpPUlJPX0lEKERLQl9QT1dFUl9DT01QVVRJTkcsIDB4MTcsIDApCisjZGVmaW5lICBaT1JST19QUk9EX0RLQl9QT1dFUl9DT01QVVRJTkdfV0lMREZJUkVfMDYwXzIJCVpPUlJPX0lEKERLQl9QT1dFUl9DT01QVVRJTkcsIDB4RkYsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzIJCQkweDA3RTEKKyNkZWZpbmUgIFpPUlJPX1BST0RfR1ZQX0lNUEFDVF9TRVJJRVNfSV80SwkJCVpPUlJPX0lEKEdSRUFUX1ZBTExFWV9QUk9EVUNUU18yLCAweDAxLCAwKQorI2RlZmluZSAgWk9SUk9fUFJPRF9HVlBfSU1QQUNUX1NFUklFU19JXzE2S18yCQkJWk9SUk9fSUQoR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzIsIDB4MDIsIDApCisjZGVmaW5lICBaT1JST19QUk9EX0dWUF9JTVBBQ1RfU0VSSUVTX0lfMTZLXzMJCQlaT1JST19JRChHUkVBVF9WQUxMRVlfUFJPRFVDVFNfMiwgMHgwMywgMCkKKyNkZWZpbmUgIFpPUlJPX1BST0RfR1ZQX0lNUEFDVF8zMDAxX0lERV8xCQkJWk9SUk9fSUQoR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzIsIDB4MDgsIDApCisjZGVmaW5lICBaT1JST19QUk9EX0dWUF9JTVBBQ1RfMzAwMV9SQU0JCQkJWk9SUk9fSUQoR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzIsIDB4MDksIDApCisjZGVmaW5lICBaT1JST19QUk9EX0dWUF9JTVBBQ1RfU0VSSUVTX0lJX1JBTV8xCQkJWk9SUk9fSUQoR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzIsIDB4MEEsIDApCisjZGVmaW5lICBaT1JST19QUk9EX0dWUF9FUENfQkFTRQkJCQlaT1JST19JRChHUkVBVF9WQUxMRVlfUFJPRFVDVFNfMiwgMHgwQiwgMCkKKyNkZWZpbmUgIFpPUlJPX1BST0RfR1ZQX0dGT1JDRV8wNDBfMQkJCQlaT1JST19JRChHUkVBVF9WQUxMRVlfUFJPRFVDVFNfMiwgMHgwQiwgMHgyMCkKKyNkZWZpbmUgIFpPUlJPX1BST0RfR1ZQX0dGT1JDRV8wNDBfU0NTSV8xCQkJWk9SUk9fSUQoR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzIsIDB4MEIsIDB4MzApCisjZGVmaW5lICBaT1JST19QUk9EX0dWUF9BMTI5MQkJCQkJWk9SUk9fSUQoR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzIsIDB4MEIsIDB4NDApCisjZGVmaW5lICBaT1JST19QUk9EX0dWUF9DT01CT18wMzBfUjQJCQkJWk9SUk9fSUQoR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzIsIDB4MEIsIDB4NjApCisjZGVmaW5lICBaT1JST19QUk9EX0dWUF9DT01CT18wMzBfUjRfU0NTSQkJCVpPUlJPX0lEKEdSRUFUX1ZBTExFWV9QUk9EVUNUU18yLCAweDBCLCAweDcwKQorI2RlZmluZSAgWk9SUk9fUFJPRF9HVlBfUEhPTkVQQUsJCQkJWk9SUk9fSUQoR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzIsIDB4MEIsIDB4NzgpCisjZGVmaW5lICBaT1JST19QUk9EX0dWUF9JT19FWFRFTkRFUgkJCQlaT1JST19JRChHUkVBVF9WQUxMRVlfUFJPRFVDVFNfMiwgMHgwQiwgMHg5OCkKKyNkZWZpbmUgIFpPUlJPX1BST0RfR1ZQX0dGT1JDRV8wMzAJCQkJWk9SUk9fSUQoR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzIsIDB4MEIsIDB4YTApCisjZGVmaW5lICBaT1JST19QUk9EX0dWUF9HRk9SQ0VfMDMwX1NDU0kJCQkJWk9SUk9fSUQoR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzIsIDB4MEIsIDB4YjApCisjZGVmaW5lICBaT1JST19QUk9EX0dWUF9BNTMwCQkJCQlaT1JST19JRChHUkVBVF9WQUxMRVlfUFJPRFVDVFNfMiwgMHgwQiwgMHhjMCkKKyNkZWZpbmUgIFpPUlJPX1BST0RfR1ZQX0E1MzBfU0NTSQkJCQlaT1JST19JRChHUkVBVF9WQUxMRVlfUFJPRFVDVFNfMiwgMHgwQiwgMHhkMCkKKyNkZWZpbmUgIFpPUlJPX1BST0RfR1ZQX0NPTUJPXzAzMF9SMwkJCQlaT1JST19JRChHUkVBVF9WQUxMRVlfUFJPRFVDVFNfMiwgMHgwQiwgMHhlMCkKKyNkZWZpbmUgIFpPUlJPX1BST0RfR1ZQX0NPTUJPXzAzMF9SM19TQ1NJCQkJWk9SUk9fSUQoR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzIsIDB4MEIsIDB4ZjApCisjZGVmaW5lICBaT1JST19QUk9EX0dWUF9TRVJJRVNfSUkJCQkJWk9SUk9fSUQoR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzIsIDB4MEIsIDB4ZjgpCisjZGVmaW5lICBaT1JST19QUk9EX0dWUF9JTVBBQ1RfMzAwMV9JREVfMgkJCVpPUlJPX0lEKEdSRUFUX1ZBTExFWV9QUk9EVUNUU18yLCAweDBELCAwKQorLyojZGVmaW5lICBaT1JST19QUk9EX0dWUF9BMjAwMF8wMzAJCQkJWk9SUk9fSUQoR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzIsIDB4MEQsIDApKi8KKy8qI2RlZmluZSAgWk9SUk9fUFJPRF9HVlBfR0ZPUkNFXzA0MF9TQ1NJXzIJCQlaT1JST19JRChHUkVBVF9WQUxMRVlfUFJPRFVDVFNfMiwgMHgwRCwgMCkqLworI2RlZmluZSAgWk9SUk9fUFJPRF9HVlBfR0ZPUkNFXzA0MF8wNjAJCQkJWk9SUk9fSUQoR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzIsIDB4MTYsIDApCisjZGVmaW5lICBaT1JST19QUk9EX0dWUF9JTVBBQ1RfVklTSU9OXzI0CQkJWk9SUk9fSUQoR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzIsIDB4MjAsIDApCisjZGVmaW5lICBaT1JST19QUk9EX0dWUF9HRk9SQ0VfMDQwXzIJCQkJWk9SUk9fSUQoR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzIsIDB4RkYsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfQ0FMSUZPUk5JQV9BQ0NFU1NfU1lORVJHWQkJCTB4MDdFNQorI2RlZmluZSAgWk9SUk9fUFJPRF9DQUxJRk9STklBX0FDQ0VTU19TWU5FUkdZX01BTElCVQkJWk9SUk9fSUQoQ0FMSUZPUk5JQV9BQ0NFU1NfU1lORVJHWSwgMHgwMSwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9YRVRFQwkJCQkJMHgwN0U2CisjZGVmaW5lICBaT1JST19QUk9EX1hFVEVDX0ZBU1RDQVJECQkJCVpPUlJPX0lEKFhFVEVDLCAweDAxLCAwKQorI2RlZmluZSAgWk9SUk9fUFJPRF9YRVRFQ19GQVNUQ0FSRF9SQU0JCQkJWk9SUk9fSUQoWEVURUMsIDB4MDIsIDApCisjZGVmaW5lICBaT1JST19QUk9EX1hFVEVDX0ZBU1RDQVJEX1BMVVMJCQkJWk9SUk9fSUQoWEVURUMsIDB4MDMsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfUFJPR1JFU1NJVkVfUEVSSVBIRVJBTFNfQU5EX1NZU1RFTVMJCTB4MDdFQQorI2RlZmluZSAgWk9SUk9fUFJPRF9QUFNfTUVSQ1VSWQkJCQkJWk9SUk9fSUQoUFJPR1JFU1NJVkVfUEVSSVBIRVJBTFNfQU5EX1NZU1RFTVMsIDB4MDAsIDApCisjZGVmaW5lICBaT1JST19QUk9EX1BQU19BMzAwMF82ODA0MAkJCQlaT1JST19JRChQUk9HUkVTU0lWRV9QRVJJUEhFUkFMU19BTkRfU1lTVEVNUywgMHgwMSwgMCkKKyNkZWZpbmUgIFpPUlJPX1BST0RfUFBTX0EyMDAwXzY4MDQwCQkJCVpPUlJPX0lEKFBST0dSRVNTSVZFX1BFUklQSEVSQUxTX0FORF9TWVNURU1TLCAweDY5LCAwKQorI2RlZmluZSAgWk9SUk9fUFJPRF9QUFNfWkVVUwkJCQkJWk9SUk9fSUQoUFJPR1JFU1NJVkVfUEVSSVBIRVJBTFNfQU5EX1NZU1RFTVMsIDB4OTYsIDApCisjZGVmaW5lICBaT1JST19QUk9EX1BQU19BNTAwXzY4MDQwCQkJCVpPUlJPX0lEKFBST0dSRVNTSVZFX1BFUklQSEVSQUxTX0FORF9TWVNURU1TLCAweEJCLCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX1hFQkVDCQkJCQkweDA3RUMKKworI2RlZmluZSBaT1JST19NQU5VRl9TUElSSVRfVEVDSE5PTE9HWQkJCQkweDA3RjIKKyNkZWZpbmUgIFpPUlJPX1BST0RfU1BJUklUX1RFQ0hOT0xPR1lfSU5TSURFUl9JTjEwMDAJCVpPUlJPX0lEKFNQSVJJVF9URUNITk9MT0dZLCAweDAxLCAwKQorI2RlZmluZSAgWk9SUk9fUFJPRF9TUElSSVRfVEVDSE5PTE9HWV9JTlNJREVSX0lONTAwCQlaT1JST19JRChTUElSSVRfVEVDSE5PTE9HWSwgMHgwMiwgMCkKKyNkZWZpbmUgIFpPUlJPX1BST0RfU1BJUklUX1RFQ0hOT0xPR1lfU0lONTAwCQkJWk9SUk9fSUQoU1BJUklUX1RFQ0hOT0xPR1ksIDB4MDMsIDApCisjZGVmaW5lICBaT1JST19QUk9EX1NQSVJJVF9URUNITk9MT0dZX0hEQV81MDYJCQlaT1JST19JRChTUElSSVRfVEVDSE5PTE9HWSwgMHgwNCwgMCkKKyNkZWZpbmUgIFpPUlJPX1BST0RfU1BJUklUX1RFQ0hOT0xPR1lfQVhfUwkJCVpPUlJPX0lEKFNQSVJJVF9URUNITk9MT0dZLCAweDA1LCAwKQorI2RlZmluZSAgWk9SUk9fUFJPRF9TUElSSVRfVEVDSE5PTE9HWV9PQ1RBQllURQkJCVpPUlJPX0lEKFNQSVJJVF9URUNITk9MT0dZLCAweDA2LCAwKQorI2RlZmluZSAgWk9SUk9fUFJPRF9TUElSSVRfVEVDSE5PTE9HWV9JTk1BVEUJCQlaT1JST19JRChTUElSSVRfVEVDSE5PTE9HWSwgMHgwOCwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9TUElSSVRfVEVDSE5PTE9HWV8yCQkJCTB4MDdGMworCisjZGVmaW5lIFpPUlJPX01BTlVGX0JTQ19BTEZBREFUQV8xCQkJCTB4MDdGRQorI2RlZmluZSAgWk9SUk9fUFJPRF9CU0NfQUxGXzNfMQkJCQkJWk9SUk9fSUQoQlNDX0FMRkFEQVRBXzEsIDB4MDMsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfQlNDX0FMRkFEQVRBXzIJCQkJMHgwODAxCisjZGVmaW5lICBaT1JST19QUk9EX0JTQ19BTEZfMl8xCQkJCQlaT1JST19JRChCU0NfQUxGQURBVEFfMiwgMHgwMSwgMCkKKyNkZWZpbmUgIFpPUlJPX1BST0RfQlNDX0FMRl8yXzIJCQkJCVpPUlJPX0lEKEJTQ19BTEZBREFUQV8yLCAweDAyLCAwKQorI2RlZmluZSAgWk9SUk9fUFJPRF9CU0NfQUxGXzNfMgkJCQkJWk9SUk9fSUQoQlNDX0FMRkFEQVRBXzIsIDB4MDMsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfQ0FSRENPXzIJCQkJCTB4MDgwMgorI2RlZmluZSAgWk9SUk9fUFJPRF9DQVJEQ09fS1JPTk9TXzIwMDBfMgkJCVpPUlJPX0lEKENBUkRDT18yLCAweDA0LCAwKQorI2RlZmluZSAgWk9SUk9fUFJPRF9DQVJEQ09fQTEwMDBfMgkJCQlaT1JST19JRChDQVJEQ09fMiwgMHgwQywgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9KT0NISEVJTQkJCQkJMHgwODA0CisjZGVmaW5lICBaT1JST19QUk9EX0pPQ0hIRUlNX1JBTQkJCQlaT1JST19JRChKT0NISEVJTSwgMHgwMSwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9DSEVDS1BPSU5UX1RFQ0hOT0xPR0lFUwkJCTB4MDgwNworI2RlZmluZSAgWk9SUk9fUFJPRF9DSEVDS1BPSU5UX1RFQ0hOT0xPR0lFU19TRVJJQUxfU09MVVRJT04JWk9SUk9fSUQoQ0hFQ0tQT0lOVF9URUNITk9MT0dJRVMsIDB4MDAsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfRURPVFJPTklLCQkJCQkweDA4MTAKKyNkZWZpbmUgIFpPUlJPX1BST0RfRURPVFJPTklLX0lFRUVfNDg4CQkJCVpPUlJPX0lEKEVET1RST05JSywgMHgwMSwgMCkKKyNkZWZpbmUgIFpPUlJPX1BST0RfRURPVFJPTklLXzgwMzIJCQkJWk9SUk9fSUQoRURPVFJPTklLLCAweDAyLCAwKQorI2RlZmluZSAgWk9SUk9fUFJPRF9FRE9UUk9OSUtfTVVMVElTRVJJQUwJCQlaT1JST19JRChFRE9UUk9OSUssIDB4MDMsIDApCisjZGVmaW5lICBaT1JST19QUk9EX0VET1RST05JS19WSURFT0RJR0lUSVpFUgkJCVpPUlJPX0lEKEVET1RST05JSywgMHgwNCwgMCkKKyNkZWZpbmUgIFpPUlJPX1BST0RfRURPVFJPTklLX1BBUkFMTEVMX0lPCQkJWk9SUk9fSUQoRURPVFJPTklLLCAweDA1LCAwKQorI2RlZmluZSAgWk9SUk9fUFJPRF9FRE9UUk9OSUtfUElDX1BST1RPWVBJTkcJCQlaT1JST19JRChFRE9UUk9OSUssIDB4MDYsIDApCisjZGVmaW5lICBaT1JST19QUk9EX0VET1RST05JS19BREMJCQkJWk9SUk9fSUQoRURPVFJPTklLLCAweDA3LCAwKQorI2RlZmluZSAgWk9SUk9fUFJPRF9FRE9UUk9OSUtfVk1FCQkJCVpPUlJPX0lEKEVET1RST05JSywgMHgwOCwgMCkKKyNkZWZpbmUgIFpPUlJPX1BST0RfRURPVFJPTklLX0RTUDk2MDAwCQkJCVpPUlJPX0lEKEVET1RST05JSywgMHgwOSwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9ORVNfSU5DCQkJCQkweDA4MTMKKyNkZWZpbmUgIFpPUlJPX1BST0RfTkVTX0lOQ19SQU0JCQkJCVpPUlJPX0lEKE5FU19JTkMsIDB4MDAsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfSUNECQkJCQkJMHgwODE3CisjZGVmaW5lICBaT1JST19QUk9EX0lDRF9BRFZBTlRBR0VfMjAwMF9TQ1NJCQkJWk9SUk9fSUQoSUNELCAweDAxLCAwKQorI2RlZmluZSAgWk9SUk9fUFJPRF9JQ0RfQURWQU5UQUdFX0lERQkJCQlaT1JST19JRChJQ0QsIDB4MDMsIDApCisjZGVmaW5lICBaT1JST19QUk9EX0lDRF9BRFZBTlRBR0VfMjA4MF9SQU0JCQlaT1JST19JRChJQ0QsIDB4MDQsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfS1VQS0VfMgkJCQkJMHgwODE5CisjZGVmaW5lICBaT1JST19QUk9EX0tVUEtFX09NVEkJCQkJCVpPUlJPX0lEKEtVUEtFXzIsIDB4MDEsIDApCisjZGVmaW5lICBaT1JST19QUk9EX0tVUEtFX1NDU0lfSUkJCQkJWk9SUk9fSUQoS1VQS0VfMiwgMHgwMiwgMCkKKyNkZWZpbmUgIFpPUlJPX1BST0RfS1VQS0VfR09MRU1fQk9YCQkJCVpPUlJPX0lEKEtVUEtFXzIsIDB4MDMsIDApCisjZGVmaW5lICBaT1JST19QUk9EX0tVUEtFXzAzMF84ODIJCQkJWk9SUk9fSUQoS1VQS0VfMiwgMHgwNCwgMCkKKyNkZWZpbmUgIFpPUlJPX1BST0RfS1VQS0VfU0NTSV9BVAkJCQlaT1JST19JRChLVVBLRV8yLCAweDA1LCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX0dSRUFUX1ZBTExFWV9QUk9EVUNUU18zCQkJMHgwODFECisjZGVmaW5lICBaT1JST19QUk9EX0dWUF9BMjAwMF9SQU04CQkJCVpPUlJPX0lEKEdSRUFUX1ZBTExFWV9QUk9EVUNUU18zLCAweDA5LCAwKQorI2RlZmluZSAgWk9SUk9fUFJPRF9HVlBfSU1QQUNUX1NFUklFU19JSV9SQU1fMgkJCVpPUlJPX0lEKEdSRUFUX1ZBTExFWV9QUk9EVUNUU18zLCAweDBBLCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX0lOVEVSV09SS1NfTkVUV09SSwkJCQkweDA4MUUKKworI2RlZmluZSBaT1JST19NQU5VRl9IQVJESVRBTF9TWU5USEVTSVMJCQkJMHgwODIwCisjZGVmaW5lICBaT1JST19QUk9EX0hBUkRJVEFMX1NZTlRIRVNJU19UUU1fNjgwMzBfNjg4ODIJCVpPUlJPX0lEKEhBUkRJVEFMX1NZTlRIRVNJUywgMHgxNCwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9BUFBMSUVEX0VOR0lORUVSSU5HCQkJCTB4MDgyOAorI2RlZmluZSAgWk9SUk9fUFJPRF9BUFBMSUVEX0VOR0lORUVSSU5HX0RMMjAwMAkJCVpPUlJPX0lEKEFQUExJRURfRU5HSU5FRVJJTkcsIDB4MTAsIDApCisjZGVmaW5lICBaT1JST19QUk9EX0FQUExJRURfRU5HSU5FRVJJTkdfUkFNX1dPUktTCQlaT1JST19JRChBUFBMSUVEX0VOR0lORUVSSU5HLCAweEUwLCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX0JTQ19BTEZBREFUQV8zCQkJCTB4MDgyQworI2RlZmluZSAgWk9SUk9fUFJPRF9CU0NfT0tUQUdPTl8yMDA4CQkJCVpPUlJPX0lEKEJTQ19BTEZBREFUQV8zLCAweDA1LCAwKQorI2RlZmluZSAgWk9SUk9fUFJPRF9CU0NfVEFOREVNX0FUXzIwMDhfNTA4CQkJWk9SUk9fSUQoQlNDX0FMRkFEQVRBXzMsIDB4MDYsIDApCisjZGVmaW5lICBaT1JST19QUk9EX0JTQ19BTEZBX1JBTV8xMjAwCQkJCVpPUlJPX0lEKEJTQ19BTEZBREFUQV8zLCAweDA3LCAwKQorI2RlZmluZSAgWk9SUk9fUFJPRF9CU0NfT0tUQUdPTl8yMDA4X1JBTQkJCVpPUlJPX0lEKEJTQ19BTEZBREFUQV8zLCAweDA4LCAwKQorI2RlZmluZSAgWk9SUk9fUFJPRF9CU0NfTVVMVElGQUNFX0kJCQkJWk9SUk9fSUQoQlNDX0FMRkFEQVRBXzMsIDB4MTAsIDApCisjZGVmaW5lICBaT1JST19QUk9EX0JTQ19NVUxUSUZBQ0VfSUkJCQkJWk9SUk9fSUQoQlNDX0FMRkFEQVRBXzMsIDB4MTEsIDApCisjZGVmaW5lICBaT1JST19QUk9EX0JTQ19NVUxUSUZBQ0VfSUlJCQkJCVpPUlJPX0lEKEJTQ19BTEZBREFUQV8zLCAweDEyLCAwKQorI2RlZmluZSAgWk9SUk9fUFJPRF9CU0NfRlJBTUVNQVNURVJfSUkJCQkJWk9SUk9fSUQoQlNDX0FMRkFEQVRBXzMsIDB4MjAsIDApCisjZGVmaW5lICBaT1JST19QUk9EX0JTQ19HUkFGRklUSV9SQU0JCQkJWk9SUk9fSUQoQlNDX0FMRkFEQVRBXzMsIDB4MjEsIDApCisjZGVmaW5lICBaT1JST19QUk9EX0JTQ19HUkFGRklUSV9SRUcJCQkJWk9SUk9fSUQoQlNDX0FMRkFEQVRBXzMsIDB4MjIsIDApCisjZGVmaW5lICBaT1JST19QUk9EX0JTQ19JU0ROX01BU1RFUkNBUkQJCQkJWk9SUk9fSUQoQlNDX0FMRkFEQVRBXzMsIDB4NDAsIDApCisjZGVmaW5lICBaT1JST19QUk9EX0JTQ19JU0ROX01BU1RFUkNBUkRfSUkJCQlaT1JST19JRChCU0NfQUxGQURBVEFfMywgMHg0MSwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9QSE9FTklYCQkJCQkweDA4MzUKKyNkZWZpbmUgIFpPUlJPX1BST0RfUEhPRU5JWF9TVDUwNgkJCQlaT1JST19JRChQSE9FTklYLCAweDIxLCAwKQorI2RlZmluZSAgWk9SUk9fUFJPRF9QSE9FTklYX1NDU0kJCQkJWk9SUk9fSUQoUEhPRU5JWCwgMHgyMiwgMCkKKyNkZWZpbmUgIFpPUlJPX1BST0RfUEhPRU5JWF9SQU0JCQkJCVpPUlJPX0lEKFBIT0VOSVgsIDB4QkUsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfQURWQU5DRURfU1RPUkFHRV9TWVNURU1TCQkJMHgwODM2CisjZGVmaW5lICBaT1JST19QUk9EX0FEVkFOQ0VEX1NUT1JBR0VfU1lTVEVNU19ORVhVUwkJWk9SUk9fSUQoQURWQU5DRURfU1RPUkFHRV9TWVNURU1TLCAweDAxLCAwKQorI2RlZmluZSAgWk9SUk9fUFJPRF9BRFZBTkNFRF9TVE9SQUdFX1NZU1RFTVNfTkVYVVNfUkFNCQlaT1JST19JRChBRFZBTkNFRF9TVE9SQUdFX1NZU1RFTVMsIDB4MDgsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfSU1QVUxTRQkJCQkJMHgwODM4CisjZGVmaW5lICBaT1JST19QUk9EX0lNUFVMU0VfRklSRUNSQUNLRVJfMjQJCQlaT1JST19JRChJTVBVTFNFLCAweDAwLCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX0lWUwkJCQkJCTB4MDg0MAorI2RlZmluZSAgWk9SUk9fUFJPRF9JVlNfR1JBTkRTTEFNX1BJQ18yCQkJCVpPUlJPX0lEKElWUywgMHgwMiwgMCkKKyNkZWZpbmUgIFpPUlJPX1BST0RfSVZTX0dSQU5EU0xBTV9QSUNfMQkJCQlaT1JST19JRChJVlMsIDB4MDQsIDApCisjZGVmaW5lICBaT1JST19QUk9EX0lWU19PVkVSRFJJVkUJCQkJWk9SUk9fSUQoSVZTLCAweDEwLCAwKQorI2RlZmluZSAgWk9SUk9fUFJPRF9JVlNfVFJVTVBDQVJEX0NMQVNTSUMJCQlaT1JST19JRChJVlMsIDB4MzAsIDApCisjZGVmaW5lICBaT1JST19QUk9EX0lWU19UUlVNUENBUkRfUFJPX0dSQU5EU0xBTQkJCVpPUlJPX0lEKElWUywgMHgzNCwgMCkKKyNkZWZpbmUgIFpPUlJPX1BST0RfSVZTX01FVEFfNAkJCQkJWk9SUk9fSUQoSVZTLCAweDQwLCAwKQorI2RlZmluZSAgWk9SUk9fUFJPRF9JVlNfV0FWRVRPT0xTCQkJCVpPUlJPX0lEKElWUywgMHhCRiwgMCkKKyNkZWZpbmUgIFpPUlJPX1BST0RfSVZTX1ZFQ1RPUl8xCQkJCVpPUlJPX0lEKElWUywgMHhGMywgMCkKKyNkZWZpbmUgIFpPUlJPX1BST0RfSVZTX1ZFQ1RPUl8yCQkJCVpPUlJPX0lEKElWUywgMHhGNCwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9WRUNUT1JfMQkJCQkJMHgwODQxCisjZGVmaW5lICBaT1JST19QUk9EX1ZFQ1RPUl9DT05ORUNUSU9OXzEJCQkJWk9SUk9fSUQoVkVDVE9SXzEsIDB4RTMsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfWFBFUlRfUFJPREVWCQkJCTB4MDg0NQorI2RlZmluZSAgWk9SUk9fUFJPRF9YUEVSVF9QUk9ERVZfVklTSU9OQV9SQU0JCQlaT1JST19JRChYUEVSVF9QUk9ERVYsIDB4MDEsIDApCisjZGVmaW5lICBaT1JST19QUk9EX1hQRVJUX1BST0RFVl9WSVNJT05BX1JFRwkJCVpPUlJPX0lEKFhQRVJUX1BST0RFViwgMHgwMiwgMCkKKyNkZWZpbmUgIFpPUlJPX1BST0RfWFBFUlRfUFJPREVWX01FUkxJTl9SQU0JCQlaT1JST19JRChYUEVSVF9QUk9ERVYsIDB4MDMsIDApCisjZGVmaW5lICBaT1JST19QUk9EX1hQRVJUX1BST0RFVl9NRVJMSU5fUkVHXzEJCQlaT1JST19JRChYUEVSVF9QUk9ERVYsIDB4MDQsIDApCisjZGVmaW5lICBaT1JST19QUk9EX1hQRVJUX1BST0RFVl9NRVJMSU5fUkVHXzIJCQlaT1JST19JRChYUEVSVF9QUk9ERVYsIDB4QzksIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfSFlEUkFfU1lTVEVNUwkJCQkweDA4NDkKKyNkZWZpbmUgIFpPUlJPX1BST0RfSFlEUkFfU1lTVEVNU19BTUlHQU5FVAkJCVpPUlJPX0lEKEhZRFJBX1NZU1RFTVMsIDB4MDEsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfU1VOUklaRV9JTkRVU1RSSUVTCQkJCTB4MDg0RgorI2RlZmluZSAgWk9SUk9fUFJPRF9TVU5SSVpFX0lORFVTVFJJRVNfQUQxMDEyCQkJWk9SUk9fSUQoU1VOUklaRV9JTkRVU1RSSUVTLCAweDAxLCAwKQorI2RlZmluZSAgWk9SUk9fUFJPRF9TVU5SSVpFX0lORFVTVFJJRVNfQUQ1MTYJCQlaT1JST19JRChTVU5SSVpFX0lORFVTVFJJRVMsIDB4MDIsIDApCisjZGVmaW5lICBaT1JST19QUk9EX1NVTlJJWkVfSU5EVVNUUklFU19ERDUxMgkJCVpPUlJPX0lEKFNVTlJJWkVfSU5EVVNUUklFUywgMHgwMywgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9UUklDRVJBVE9QUwkJCQkJMHgwODUwCisjZGVmaW5lICBaT1JST19QUk9EX1RSSUNFUkFUT1BTX01VTFRJX0lPCQkJWk9SUk9fSUQoVFJJQ0VSQVRPUFMsIDB4MDEsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfQVBQTElFRF9NQUdJQwkJCQkweDA4NTEKKyNkZWZpbmUgIFpPUlJPX1BST0RfQVBQTElFRF9NQUdJQ19ETUlfUkVTT0xWRVIJCQlaT1JST19JRChBUFBMSUVEX01BR0lDLCAweDAxLCAwKQorI2RlZmluZSAgWk9SUk9fUFJPRF9BUFBMSUVEX01BR0lDX0RJR0lUQUxfQlJPQURDQVNURVIJCVpPUlJPX0lEKEFQUExJRURfTUFHSUMsIDB4MDYsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfR0ZYX0JBU0UJCQkJCTB4MDg1RQorI2RlZmluZSAgWk9SUk9fUFJPRF9HRlhfQkFTRV9HREFfMV9WUkFNCQkJCVpPUlJPX0lEKEdGWF9CQVNFLCAweDAwLCAwKQorI2RlZmluZSAgWk9SUk9fUFJPRF9HRlhfQkFTRV9HREFfMQkJCQlaT1JST19JRChHRlhfQkFTRSwgMHgwMSwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9ST0NURUMJCQkJCTB4MDg2MAorI2RlZmluZSAgWk9SUk9fUFJPRF9ST0NURUNfUkhfODAwQwkJCQlaT1JST19JRChST0NURUMsIDB4MDEsIDApCisjZGVmaW5lICBaT1JST19QUk9EX1JPQ1RFQ19SSF84MDBDX1JBTQkJCQlaT1JST19JRChST0NURUMsIDB4MDEsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfS0FUTwkJCQkJMHgwODYxCisjZGVmaW5lICBaT1JST19QUk9EX0tBVE9fTUVMT0RZCQkJCQlaT1JST19JRChLQVRPLCAweDgwLCAwKQorLyogSUQgY2xhc2ghISAqLworI2RlZmluZSBaT1JST19NQU5VRl9IRUxGUklDSF8xCQkJCQkweDA4NjEKKyNkZWZpbmUgIFpPUlJPX1BST0RfSEVMRlJJQ0hfUkFJTkJPV19JSQkJCQlaT1JST19JRChIRUxGUklDSF8xLCAweDIwLCAwKQorI2RlZmluZSAgWk9SUk9fUFJPRF9IRUxGUklDSF9SQUlOQk9XX0lJSQkJCVpPUlJPX0lEKEhFTEZSSUNIXzEsIDB4MjEsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfQVRMQU5USVMJCQkJCTB4MDg2MgorCisjZGVmaW5lIFpPUlJPX01BTlVGX1BST1RBUgkJCQkJMHgwODY0CisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfQUNTCQkJCQkJMHgwODY1CisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfU09GVFdBUkVfUkVTVUxUU19FTlRFUlBSSVNFUwkJMHgwODY2CisjZGVmaW5lICBaT1JST19QUk9EX1NPRlRXQVJFX1JFU1VMVFNfRU5URVJQUklTRVNfR09MREVOX0dBVEVfMl9CVVNfUExVUwlaT1JST19JRChTT0ZUV0FSRV9SRVNVTFRTX0VOVEVSUFJJU0VTLCAweDAxLCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX01BU09CT1NISQkJCQkJMHgwODZECisjZGVmaW5lICBaT1JST19QUk9EX01BU09CT1NISV9NQVNURVJfQ0FSRF9TQzIwMQkJCVpPUlJPX0lEKE1BU09CT1NISSwgMHgwMywgMCkKKyNkZWZpbmUgIFpPUlJPX1BST0RfTUFTT0JPU0hJX01BU1RFUl9DQVJEX01DNzAyCQkJWk9SUk9fSUQoTUFTT0JPU0hJLCAweDA0LCAwKQorI2RlZmluZSAgWk9SUk9fUFJPRF9NQVNPQk9TSElfTVZEXzgxOQkJCQlaT1JST19JRChNQVNPQk9TSEksIDB4MDcsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfTUFJTkhBVFRBTl9EQVRBCQkJCTB4MDg2RgorI2RlZmluZSAgWk9SUk9fUFJPRF9NQUlOSEFUVEFOX0RBVEFfSURFCQkJCVpPUlJPX0lEKE1BSU5IQVRUQU5fREFUQSwgMHgwMSwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9WSUxMQUdFX1RST05JQwkJCQkweDA4NzcKKyNkZWZpbmUgIFpPUlJPX1BST0RfVklMTEFHRV9UUk9OSUNfRE9NSU5PX1JBTQkJCVpPUlJPX0lEKFZJTExBR0VfVFJPTklDLCAweDAxLCAwKQorI2RlZmluZSAgWk9SUk9fUFJPRF9WSUxMQUdFX1RST05JQ19ET01JTk9fUkVHCQkJWk9SUk9fSUQoVklMTEFHRV9UUk9OSUMsIDB4MDIsIDApCisjZGVmaW5lICBaT1JST19QUk9EX1ZJTExBR0VfVFJPTklDX0RPTUlOT18xNk1fUFJPVE9UWVBFCQlaT1JST19JRChWSUxMQUdFX1RST05JQywgMHgwMywgMCkKKyNkZWZpbmUgIFpPUlJPX1BST0RfVklMTEFHRV9UUk9OSUNfUElDQVNTT19JSV9JSV9QTFVTX1JBTQlaT1JST19JRChWSUxMQUdFX1RST05JQywgMHgwQiwgMCkKKyNkZWZpbmUgIFpPUlJPX1BST0RfVklMTEFHRV9UUk9OSUNfUElDQVNTT19JSV9JSV9QTFVTX1JFRwlaT1JST19JRChWSUxMQUdFX1RST05JQywgMHgwQywgMCkKKyNkZWZpbmUgIFpPUlJPX1BST0RfVklMTEFHRV9UUk9OSUNfUElDQVNTT19JSV9JSV9QTFVTX1NFR01FTlRFRF9NT0RFCVpPUlJPX0lEKFZJTExBR0VfVFJPTklDLCAweDBELCAwKQorI2RlZmluZSAgWk9SUk9fUFJPRF9WSUxMQUdFX1RST05JQ19QSUNBU1NPX0lWX1oyX01FTTEJCVpPUlJPX0lEKFZJTExBR0VfVFJPTklDLCAweDE1LCAwKQorI2RlZmluZSAgWk9SUk9fUFJPRF9WSUxMQUdFX1RST05JQ19QSUNBU1NPX0lWX1oyX01FTTIJCVpPUlJPX0lEKFZJTExBR0VfVFJPTklDLCAweDE2LCAwKQorI2RlZmluZSAgWk9SUk9fUFJPRF9WSUxMQUdFX1RST05JQ19QSUNBU1NPX0lWX1oyX1JFRwkJWk9SUk9fSUQoVklMTEFHRV9UUk9OSUMsIDB4MTcsIDApCisjZGVmaW5lICBaT1JST19QUk9EX1ZJTExBR0VfVFJPTklDX1BJQ0FTU09fSVZfWjMJCVpPUlJPX0lEKFZJTExBR0VfVFJPTklDLCAweDE4LCAwKQorI2RlZmluZSAgWk9SUk9fUFJPRF9WSUxMQUdFX1RST05JQ19BUklBRE5FCQkJWk9SUk9fSUQoVklMTEFHRV9UUk9OSUMsIDB4QzksIDApCisjZGVmaW5lICBaT1JST19QUk9EX1ZJTExBR0VfVFJPTklDX0FSSUFETkUyCQkJWk9SUk9fSUQoVklMTEFHRV9UUk9OSUMsIDB4Q0EsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfVVRJTElUSUVTX1VOTElNSVRFRAkJCQkweDA4N0IKKyNkZWZpbmUgIFpPUlJPX1BST0RfVVRJTElUSUVTX1VOTElNSVRFRF9FTVBMQU5UX0RFTFVYRQkJWk9SUk9fSUQoVVRJTElUSUVTX1VOTElNSVRFRCwgMHgxNSwgMCkKKyNkZWZpbmUgIFpPUlJPX1BST0RfVVRJTElUSUVTX1VOTElNSVRFRF9FTVBMQU5UX0RFTFVYRTIJCVpPUlJPX0lEKFVUSUxJVElFU19VTkxJTUlURUQsIDB4MjAsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfQU1JVFJJWAkJCQkJMHgwODgwCisjZGVmaW5lICBaT1JST19QUk9EX0FNSVRSSVhfTVVMVElfSU8JCQkJWk9SUk9fSUQoQU1JVFJJWCwgMHgwMSwgMCkKKyNkZWZpbmUgIFpPUlJPX1BST0RfQU1JVFJJWF9DRF9SQU0JCQkJWk9SUk9fSUQoQU1JVFJJWCwgMHgwMiwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9BUk1BWAkJCQkJMHgwODg1CisjZGVmaW5lICBaT1JST19QUk9EX0FSTUFYX09NTklCVVMJCQkJWk9SUk9fSUQoQVJNQVgsIDB4MDAsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfWkVVUwkJCQkJMHgwODhECisjZGVmaW5lICBaT1JST19QUk9EX1pFVVNfU1BJREVSCQkJCQlaT1JST19JRChaRVVTLCAweDA0LCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX05FV1RFSwkJCQkJMHgwODhGCisjZGVmaW5lICBaT1JST19QUk9EX05FV1RFS19WSURFT1RPQVNURVIJCQkJWk9SUk9fSUQoTkVXVEVLLCAweDAwLCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX01fVEVDSF9HRVJNQU5ZCQkJCTB4MDg5MAorI2RlZmluZSAgWk9SUk9fUFJPRF9NVEVDX0FUNTAwXzIJCQkJWk9SUk9fSUQoTV9URUNIX0dFUk1BTlksIDB4MDEsIDApCisjZGVmaW5lICBaT1JST19QUk9EX01URUNfNjgwMzAJCQkJCVpPUlJPX0lEKE1fVEVDSF9HRVJNQU5ZLCAweDAzLCAwKQorI2RlZmluZSAgWk9SUk9fUFJPRF9NVEVDXzY4MDIwSQkJCQkJWk9SUk9fSUQoTV9URUNIX0dFUk1BTlksIDB4MDYsIDApCisjZGVmaW5lICBaT1JST19QUk9EX01URUNfQTEyMDBfVDY4MDMwX1JUQwkJCVpPUlJPX0lEKE1fVEVDSF9HRVJNQU5ZLCAweDIwLCAwKQorI2RlZmluZSAgWk9SUk9fUFJPRF9NVEVDX1ZJUEVSX01LX1ZfRV9NQVRSSVhfNTMwCQlaT1JST19JRChNX1RFQ0hfR0VSTUFOWSwgMHgyMSwgMCkKKyNkZWZpbmUgIFpPUlJPX1BST0RfTVRFQ184X01CX1JBTQkJCQlaT1JST19JRChNX1RFQ0hfR0VSTUFOWSwgMHgyMiwgMCkKKyNkZWZpbmUgIFpPUlJPX1BST0RfTVRFQ19WSVBFUl9NS19WX0VfTUFUUklYXzUzMF9TQ1NJX0lERQlaT1JST19JRChNX1RFQ0hfR0VSTUFOWSwgMHgyNCwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9HUkVBVF9WQUxMRVlfUFJPRFVDVFNfNAkJCTB4MDg5MQorI2RlZmluZSAgWk9SUk9fUFJPRF9HVlBfRUdTXzI4XzI0X1NQRUNUUlVNX1JBTQkJCVpPUlJPX0lEKEdSRUFUX1ZBTExFWV9QUk9EVUNUU180LCAweDAxLCAwKQorI2RlZmluZSAgWk9SUk9fUFJPRF9HVlBfRUdTXzI4XzI0X1NQRUNUUlVNX1JFRwkJCVpPUlJPX0lEKEdSRUFUX1ZBTExFWV9QUk9EVUNUU180LCAweDAyLCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX0FQT0xMT18xCQkJCQkweDA4OTIKKyNkZWZpbmUgIFpPUlJPX1BST0RfQVBPTExPX0ExMjAwCQkJCVpPUlJPX0lEKEFQT0xMT18xLCAweDAxLCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX0hFTEZSSUNIXzIJCQkJCTB4MDg5MworI2RlZmluZSAgWk9SUk9fUFJPRF9IRUxGUklDSF9QSUNDT0xPX1JBTQkJCVpPUlJPX0lEKEhFTEZSSUNIXzIsIDB4MDUsIDApCisjZGVmaW5lICBaT1JST19QUk9EX0hFTEZSSUNIX1BJQ0NPTE9fUkVHCQkJWk9SUk9fSUQoSEVMRlJJQ0hfMiwgMHgwNiwgMCkKKyNkZWZpbmUgIFpPUlJPX1BST0RfSEVMRlJJQ0hfUEVHR1lfUExVU19NUEVHCQkJWk9SUk9fSUQoSEVMRlJJQ0hfMiwgMHgwNywgMCkKKyNkZWZpbmUgIFpPUlJPX1BST0RfSEVMRlJJQ0hfVklERU9DUlVOQ0hFUgkJCVpPUlJPX0lEKEhFTEZSSUNIXzIsIDB4MDgsIDApCisjZGVmaW5lICBaT1JST19QUk9EX0hFTEZSSUNIX1NENjRfUkFNCQkJCVpPUlJPX0lEKEhFTEZSSUNIXzIsIDB4MEEsIDApCisjZGVmaW5lICBaT1JST19QUk9EX0hFTEZSSUNIX1NENjRfUkVHCQkJCVpPUlJPX0lEKEhFTEZSSUNIXzIsIDB4MEIsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfTUFDUk9TWVNURU1TX1VTQQkJCQkweDA4OUIKKyNkZWZpbmUgIFpPUlJPX1BST0RfTUFDUk9TWVNURU1TX1dBUlBfRU5HSU5FXzQweHgJCVpPUlJPX0lEKE1BQ1JPU1lTVEVNU19VU0EsIDB4MTMsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfRUxCT1hfQ09NUFVURVIJCQkJMHgwODlFCisjZGVmaW5lICBaT1JST19QUk9EX0VMQk9YX0NPTVBVVEVSXzEyMDBfNAkJCVpPUlJPX0lEKEVMQk9YX0NPTVBVVEVSLCAweDA2LCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX0hBUk1TX1BST0ZFU1NJT05BTAkJCQkweDBBMDAKKyNkZWZpbmUgIFpPUlJPX1BST0RfSEFSTVNfUFJPRkVTU0lPTkFMXzAzMF9QTFVTCQkJWk9SUk9fSUQoSEFSTVNfUFJPRkVTU0lPTkFMLCAweDEwLCAwKQorI2RlZmluZSAgWk9SUk9fUFJPRF9IQVJNU19QUk9GRVNTSU9OQUxfMzUwMAkJCVpPUlJPX0lEKEhBUk1TX1BST0ZFU1NJT05BTCwgMHhEMCwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9NSUNST05JSwkJCQkJMHgwQTUwCisjZGVmaW5lICBaT1JST19QUk9EX01JQ1JPTklLX1JDQV8xMjAJCQkJWk9SUk9fSUQoTUlDUk9OSUssIDB4MEEsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfTUlDUk9OSUsyCQkJCQkweDBGMEYKKyNkZWZpbmUgIFpPUlJPX1BST0RfTUlDUk9OSUsyX1ozSQkJCQlaT1JST19JRChNSUNST05JSzIsIDB4MDEsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfTUVHQU1JQ1JPCQkJCQkweDEwMDAKKyNkZWZpbmUgIFpPUlJPX1BST0RfTUVHQU1JQ1JPX1NDUkFNXzUwMAkJCQlaT1JST19JRChNRUdBTUlDUk8sIDB4MDMsIDApCisjZGVmaW5lICBaT1JST19QUk9EX01FR0FNSUNST19TQ1JBTV81MDBfUkFNCQkJWk9SUk9fSUQoTUVHQU1JQ1JPLCAweDA0LCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX0lNVFJPTklDU18yCQkJCQkweDEwMjgKKyNkZWZpbmUgIFpPUlJPX1BST0RfSU1UUk9OSUNTX0hVUlJJQ0FORV8yODAwXzMJCQlaT1JST19JRChJTVRST05JQ1NfMiwgMHgzOSwgMCkKKyNkZWZpbmUgIFpPUlJPX1BST0RfSU1UUk9OSUNTX0hVUlJJQ0FORV8yODAwXzQJCQlaT1JST19JRChJTVRST05JQ1NfMiwgMHg1NywgMCkKKworLyogdW5vZmZpY2lhbCBJRCAqLworI2RlZmluZSBaT1JST19NQU5VRl9JTkRJVklEVUFMX0NPTVBVVEVSUwkJCTB4MTIxMgorI2RlZmluZSAgWk9SUk9fUFJPRF9JTkRJVklEVUFMX0NPTVBVVEVSU19CVURESEEJCQlaT1JST19JRChJTkRJVklEVUFMX0NPTVBVVEVSUywgMHgwMCwgMCkKKyNkZWZpbmUgIFpPUlJPX1BST0RfSU5ESVZJRFVBTF9DT01QVVRFUlNfWF9TVVJGCQkJWk9SUk9fSUQoSU5ESVZJRFVBTF9DT01QVVRFUlMsIDB4MTcsIDApCisjZGVmaW5lICBaT1JST19QUk9EX0lORElWSURVQUxfQ09NUFVURVJTX0NBVFdFQVNFTAkJWk9SUk9fSUQoSU5ESVZJRFVBTF9DT01QVVRFUlMsIDB4MkEsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfS1VQS0VfMwkJCQkJMHgxMjQ4CisjZGVmaW5lICBaT1JST19QUk9EX0tVUEtFX0dPTEVNX0hEXzMwMDAJCQkJWk9SUk9fSUQoS1VQS0VfMywgMHgwMSwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9JVEgJCQkJCQkweDEzODgKKyNkZWZpbmUgIFpPUlJPX1BST0RfSVRIX0lTRE5fTUFTVEVSX0lJCQkJCVpPUlJPX0lEKElUSCwgMHgwMSwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9WTUMJCQkJCQkweDEzODkKKyNkZWZpbmUgIFpPUlJPX1BST0RfVk1DX0lTRE5fQkxBU1RFUl9aMgkJCQlaT1JST19JRChWTUMsIDB4MDEsIDApCisjZGVmaW5lICBaT1JST19QUk9EX1ZNQ19IWVBFUkNPTV80CQkJCVpPUlJPX0lEKFZNQywgMHgwMiwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9JTkZPUk1BVElPTgkJCQkJMHgxNTdDCisjZGVmaW5lICBaT1JST19QUk9EX0lORk9STUFUSU9OX0lTRE5fRU5HSU5FX0kJCQlaT1JST19JRChJTkZPUk1BVElPTiwgMHg2NCwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9WT1JURVgJCQkJCTB4MjAxNworI2RlZmluZSAgWk9SUk9fUFJPRF9WT1JURVhfR09MREVOX0dBVEVfODAzODZTWAkJCVpPUlJPX0lEKFZPUlRFWCwgMHgwNywgMCkKKyNkZWZpbmUgIFpPUlJPX1BST0RfVk9SVEVYX0dPTERFTl9HQVRFX1JBTQkJCVpPUlJPX0lEKFZPUlRFWCwgMHgwOCwgMCkKKyNkZWZpbmUgIFpPUlJPX1BST0RfVk9SVEVYX0dPTERFTl9HQVRFXzgwNDg2CQkJWk9SUk9fSUQoVk9SVEVYLCAweDA5LCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX0VYUEFOU0lPTl9TWVNURU1TCQkJCTB4MjA2MgorI2RlZmluZSAgWk9SUk9fUFJPRF9FWFBBTlNJT05fU1lTVEVNU19EQVRBRkxZRVJfNDAwMFNYCQlaT1JST19JRChFWFBBTlNJT05fU1lTVEVNUywgMHgwMSwgMCkKKyNkZWZpbmUgIFpPUlJPX1BST0RfRVhQQU5TSU9OX1NZU1RFTVNfREFUQUZMWUVSXzQwMDBTWF9SQU0JWk9SUk9fSUQoRVhQQU5TSU9OX1NZU1RFTVMsIDB4MDIsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfUkVBRFlTT0ZUCQkJCQkweDIxMDAKKyNkZWZpbmUgIFpPUlJPX1BST0RfUkVBRFlTT0ZUX0FNQVhfSUlfSVYJCQlaT1JST19JRChSRUFEWVNPRlQsIDB4MDEsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfUEhBU0U1CQkJCQkweDIxNDAKKyNkZWZpbmUgIFpPUlJPX1BST0RfUEhBU0U1X0JMSVpaQVJEX1JBTQkJCQlaT1JST19JRChQSEFTRTUsIDB4MDEsIDApCisjZGVmaW5lICBaT1JST19QUk9EX1BIQVNFNV9CTElaWkFSRAkJCQlaT1JST19JRChQSEFTRTUsIDB4MDIsIDApCisjZGVmaW5lICBaT1JST19QUk9EX1BIQVNFNV9CTElaWkFSRF8xMjIwX0lWCQkJWk9SUk9fSUQoUEhBU0U1LCAweDA2LCAwKQorI2RlZmluZSAgWk9SUk9fUFJPRF9QSEFTRTVfRkFTVExBTkVfWjNfUkFNCQkJWk9SUk9fSUQoUEhBU0U1LCAweDBBLCAwKQorI2RlZmluZSAgWk9SUk9fUFJPRF9QSEFTRTVfQkxJWlpBUkRfMTIzMF9JSV9GQVNUTEFORV9aM19DWUJFUlNDU0lfQ1lCRVJTVE9STTA2MAlaT1JST19JRChQSEFTRTUsIDB4MEIsIDApCisjZGVmaW5lICBaT1JST19QUk9EX1BIQVNFNV9CTElaWkFSRF8xMjIwX0NZQkVSU1RPUk0JCVpPUlJPX0lEKFBIQVNFNSwgMHgwQywgMCkKKyNkZWZpbmUgIFpPUlJPX1BST0RfUEhBU0U1X0JMSVpaQVJEXzEyMzAJCQlaT1JST19JRChQSEFTRTUsIDB4MEQsIDApCisjZGVmaW5lICBaT1JST19QUk9EX1BIQVNFNV9CTElaWkFSRF8xMjMwX0lWXzEyNjAJCVpPUlJPX0lEKFBIQVNFNSwgMHgxMSwgMCkKKyNkZWZpbmUgIFpPUlJPX1BST0RfUEhBU0U1X0JMSVpaQVJEXzIwNjAJCQlaT1JST19JRChQSEFTRTUsIDB4MTgsIDApCisjZGVmaW5lICBaT1JST19QUk9EX1BIQVNFNV9DWUJFUlNUT1JNX01LX0lJCQkJWk9SUk9fSUQoUEhBU0U1LCAweDE5LCAwKQorI2RlZmluZSAgWk9SUk9fUFJPRF9QSEFTRTVfQ1lCRVJWSVNJT042NAkJCVpPUlJPX0lEKFBIQVNFNSwgMHgyMiwgMCkKKyNkZWZpbmUgIFpPUlJPX1BST0RfUEhBU0U1X0NZQkVSVklTSU9ONjRfM0RfUFJPVE9UWVBFCQlaT1JST19JRChQSEFTRTUsIDB4MzIsIDApCisjZGVmaW5lICBaT1JST19QUk9EX1BIQVNFNV9DWUJFUlZJU0lPTjY0XzNECQkJWk9SUk9fSUQoUEhBU0U1LCAweDQzLCAwKQorI2RlZmluZSAgWk9SUk9fUFJPRF9QSEFTRTVfQ1lCRVJTVE9STV9NS19JSUkJCQlaT1JST19JRChQSEFTRTUsIDB4NjQsIDApCisjZGVmaW5lICBaT1JST19QUk9EX1BIQVNFNV9CTElaWkFSRF82MDNFX1BMVVMJCQlaT1JST19JRChQSEFTRTUsIDB4NmUsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfRFBTCQkJCQkJMHgyMTY5CisjZGVmaW5lICBaT1JST19QUk9EX0RQU19QRVJTT05BTF9BTklNQVRJT05fUkVDT1JERVIJCVpPUlJPX0lEKERQUywgMHgwMSwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9BUE9MTE9fMgkJCQkJMHgyMjAwCisjZGVmaW5lICBaT1JST19QUk9EX0FQT0xMT19BNjIwXzY4MDIwXzEJCQkJWk9SUk9fSUQoQVBPTExPXzIsIDB4MDAsIDApCisjZGVmaW5lICBaT1JST19QUk9EX0FQT0xMT19BNjIwXzY4MDIwXzIJCQkJWk9SUk9fSUQoQVBPTExPXzIsIDB4MDEsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfQVBPTExPXzMJCQkJCTB4MjIyMgorI2RlZmluZSAgWk9SUk9fUFJPRF9BUE9MTE9fQVRfQVBPTExPCQkJCVpPUlJPX0lEKEFQT0xMT18zLCAweDIyLCAwKQorI2RlZmluZSAgWk9SUk9fUFJPRF9BUE9MTE9fMTIzMF8xMjQwXzEyNjBfMjAzMF80MDQwXzQwNjAJWk9SUk9fSUQoQVBPTExPXzMsIDB4MjMsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfUEVUU09GRl9MUAkJCQkJMHgzOEE1CisjZGVmaW5lICBaT1JST19QUk9EX1BFVFNPRkZfTFBfREVMRklOQQkJCQlaT1JST19JRChQRVRTT0ZGX0xQLCAweDAwLCAwKQorI2RlZmluZSAgWk9SUk9fUFJPRF9QRVRTT0ZGX0xQX0RFTEZJTkFfTElURQkJCVpPUlJPX0lEKFBFVFNPRkZfTFAsIDB4MDEsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfVVdFX0dFUkxBQ0gJCQkJCTB4M0ZGNworI2RlZmluZSAgWk9SUk9fUFJPRF9VV0VfR0VSTEFDSF9SQU1fUk9NCQkJCVpPUlJPX0lEKFVXRV9HRVJMQUNILCAweGQ0LCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX0FDVAkJCQkJCTB4NDIzMQorI2RlZmluZSAgWk9SUk9fUFJPRF9BQ1RfUFJFTFVERQkJCQkJWk9SUk9fSUQoQUNULCAweDAxLCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX01BQ1JPU1lTVEVNU19HRVJNQU5ZCQkJMHg0NzU0CisjZGVmaW5lICBaT1JST19QUk9EX01BQ1JPU1lTVEVNU19NQUVTVFJPCQkJWk9SUk9fSUQoTUFDUk9TWVNURU1TX0dFUk1BTlksIDB4MDMsIDApCisjZGVmaW5lICBaT1JST19QUk9EX01BQ1JPU1lTVEVNU19WTEFCCQkJCVpPUlJPX0lEKE1BQ1JPU1lTVEVNU19HRVJNQU5ZLCAweDA0LCAwKQorI2RlZmluZSAgWk9SUk9fUFJPRF9NQUNST1NZU1RFTVNfTUFFU1RST19QUk8JCQlaT1JST19JRChNQUNST1NZU1RFTVNfR0VSTUFOWSwgMHgwNSwgMCkKKyNkZWZpbmUgIFpPUlJPX1BST0RfTUFDUk9TWVNURU1TX1JFVElOQQkJCQlaT1JST19JRChNQUNST1NZU1RFTVNfR0VSTUFOWSwgMHgwNiwgMCkKKyNkZWZpbmUgIFpPUlJPX1BST0RfTUFDUk9TWVNURU1TX01VTFRJX0VWT0xVVElPTgkJWk9SUk9fSUQoTUFDUk9TWVNURU1TX0dFUk1BTlksIDB4MDgsIDApCisjZGVmaW5lICBaT1JST19QUk9EX01BQ1JPU1lTVEVNU19UT0NDQVRBCQkJWk9SUk9fSUQoTUFDUk9TWVNURU1TX0dFUk1BTlksIDB4MEMsIDApCisjZGVmaW5lICBaT1JST19QUk9EX01BQ1JPU1lTVEVNU19SRVRJTkFfWjMJCQlaT1JST19JRChNQUNST1NZU1RFTVNfR0VSTUFOWSwgMHgxMCwgMCkKKyNkZWZpbmUgIFpPUlJPX1BST0RfTUFDUk9TWVNURU1TX1ZMQUJfTU9USU9OCQkJWk9SUk9fSUQoTUFDUk9TWVNURU1TX0dFUk1BTlksIDB4MTIsIDApCisjZGVmaW5lICBaT1JST19QUk9EX01BQ1JPU1lTVEVNU19BTFRBSVMJCQkJWk9SUk9fSUQoTUFDUk9TWVNURU1TX0dFUk1BTlksIDB4MTMsIDApCisjZGVmaW5lICBaT1JST19QUk9EX01BQ1JPU1lTVEVNU19GQUxDT05fMDQwCQkJWk9SUk9fSUQoTUFDUk9TWVNURU1TX0dFUk1BTlksIDB4RkQsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfQ09NQklURUMJCQkJCTB4Njc2NgorCisjZGVmaW5lIFpPUlJPX01BTlVGX1NLSV9QRVJJUEhFUkFMUwkJCQkweDgwMDAKKyNkZWZpbmUgIFpPUlJPX1BST0RfU0tJX1BFUklQSEVSQUxTX01BU1RfRklSRUJBTEwJCVpPUlJPX0lEKFNLSV9QRVJJUEhFUkFMUywgMHgwOCwgMCkKKyNkZWZpbmUgIFpPUlJPX1BST0RfU0tJX1BFUklQSEVSQUxTX1NDU0lfRFVBTF9TRVJJQUwJCVpPUlJPX0lEKFNLSV9QRVJJUEhFUkFMUywgMHg4MCwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9SRUlTX1dBUkVfMgkJCQkJMHhBOUFECisjZGVmaW5lICBaT1JST19QUk9EX1JFSVNfV0FSRV9TQ0FOX0tJTkcJCQkJWk9SUk9fSUQoUkVJU19XQVJFXzIsIDB4MTEsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfQ0FNRVJPTgkJCQkJMHhBQTAxCisjZGVmaW5lICBaT1JST19QUk9EX0NBTUVST05fUEVSU09OQUxfQTQJCQkJWk9SUk9fSUQoQ0FNRVJPTiwgMHgxMCwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9SRUlTX1dBUkUJCQkJCTB4QUExMQorI2RlZmluZSAgWk9SUk9fUFJPRF9SRUlTX1dBUkVfSEFORFlTQ0FOTkVSCQkJWk9SUk9fSUQoUkVJU19XQVJFLCAweDExLCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX1BIT0VOSVhfMgkJCQkJMHhCNUE4CisjZGVmaW5lICBaT1JST19QUk9EX1BIT0VOSVhfU1Q1MDZfMgkJCQlaT1JST19JRChQSE9FTklYXzIsIDB4MjEsIDApCisjZGVmaW5lICBaT1JST19QUk9EX1BIT0VOSVhfU0NTSV8yCQkJCVpPUlJPX0lEKFBIT0VOSVhfMiwgMHgyMiwgMCkKKyNkZWZpbmUgIFpPUlJPX1BST0RfUEhPRU5JWF9SQU1fMgkJCQlaT1JST19JRChQSE9FTklYXzIsIDB4QkUsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfQ09NQklURUNfMgkJCQkJMHhDMDA4CisjZGVmaW5lICBaT1JST19QUk9EX0NPTUJJVEVDX0hECQkJCQlaT1JST19JRChDT01CSVRFQ18yLCAweDJBLCAwKQorI2RlZmluZSAgWk9SUk9fUFJPRF9DT01CSVRFQ19TUkFNCQkJCVpPUlJPX0lEKENPTUJJVEVDXzIsIDB4MkIsIDApCisKKworICAgIC8qCisgICAgICogIFRlc3QgYW5kIGlsbGVnYWwgTWFudWZhY3R1cmVyIElEcy4KKyAgICAgKi8KKworI2RlZmluZSBaT1JST19NQU5VRl9IQUNLRVIJCQkJCTB4MDdEQgorI2RlZmluZSAgWk9SUk9fUFJPRF9HRU5FUkFMX1BST1RPVFlQRQkJCQlaT1JST19JRChIQUNLRVIsIDB4MDAsIDApCisjZGVmaW5lICBaT1JST19QUk9EX0hBQ0tFUl9TQ1NJCQkJCQlaT1JST19JRChIQUNLRVIsIDB4MDEsIDApCisjZGVmaW5lICBaT1JST19QUk9EX1JFU09VUkNFX01BTkFHRU1FTlRfRk9SQ0VfUVVJQ0tORVRfUU4yMDAwCVpPUlJPX0lEKEhBQ0tFUiwgMHgwMiwgMCkKKyNkZWZpbmUgIFpPUlJPX1BST0RfVkVDVE9SX0NPTk5FQ1RJT05fMgkJCQlaT1JST19JRChIQUNLRVIsIDB4RTAsIDApCisjZGVmaW5lICBaT1JST19QUk9EX1ZFQ1RPUl9DT05ORUNUSU9OXzMJCQkJWk9SUk9fSUQoSEFDS0VSLCAweEUxLCAwKQorI2RlZmluZSAgWk9SUk9fUFJPRF9WRUNUT1JfQ09OTkVDVElPTl80CQkJCVpPUlJPX0lEKEhBQ0tFUiwgMHhFMiwgMCkKKyNkZWZpbmUgIFpPUlJPX1BST0RfVkVDVE9SX0NPTk5FQ1RJT05fNQkJCQlaT1JST19JRChIQUNLRVIsIDB4RTMsIDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3p1dGlsLmggYi9pbmNsdWRlL2xpbnV4L3p1dGlsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRmZDVlZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvenV0aWwuaApAQCAtMCwwICsxLDExOSBAQAorLyogenV0aWwuaCAtLSBpbnRlcm5hbCBpbnRlcmZhY2UgYW5kIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGNvbXByZXNzaW9uIGxpYnJhcnkKKyAqIENvcHlyaWdodCAoQykgMTk5NS0xOTk4IEplYW4tbG91cCBHYWlsbHkuCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCisgKi8KKworLyogV0FSTklORzogdGhpcyBmaWxlIHNob3VsZCAqbm90KiBiZSB1c2VkIGJ5IGFwcGxpY2F0aW9ucy4gSXQgaXMKKyAgIHBhcnQgb2YgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBjb21wcmVzc2lvbiBsaWJyYXJ5IGFuZCBpcworICAgc3ViamVjdCB0byBjaGFuZ2UuIEFwcGxpY2F0aW9ucyBzaG91bGQgb25seSB1c2UgemxpYi5oLgorICovCisKKy8qIEAoIykgJElkOiB6dXRpbC5oLHYgMS4xIDIwMDAvMDEvMDEgMDM6MzI6MjMgZGF2ZW0gRXhwICQgKi8KKworI2lmbmRlZiBfWl9VVElMX0gKKyNkZWZpbmUgX1pfVVRJTF9ICisKKyNpbmNsdWRlIDxsaW51eC96bGliLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyICB1Y2g7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVzaDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyAgdWxnOworCisgICAgICAgIC8qIGNvbW1vbiBjb25zdGFudHMgKi8KKworI2lmbmRlZiBERUZfV0JJVFMKKyMgIGRlZmluZSBERUZfV0JJVFMgTUFYX1dCSVRTCisjZW5kaWYKKy8qIGRlZmF1bHQgd2luZG93Qml0cyBmb3IgZGVjb21wcmVzc2lvbi4gTUFYX1dCSVRTIGlzIGZvciBjb21wcmVzc2lvbiBvbmx5ICovCisKKyNpZiBNQVhfTUVNX0xFVkVMID49IDgKKyMgIGRlZmluZSBERUZfTUVNX0xFVkVMIDgKKyNlbHNlCisjICBkZWZpbmUgREVGX01FTV9MRVZFTCAgTUFYX01FTV9MRVZFTAorI2VuZGlmCisvKiBkZWZhdWx0IG1lbUxldmVsICovCisKKyNkZWZpbmUgU1RPUkVEX0JMT0NLIDAKKyNkZWZpbmUgU1RBVElDX1RSRUVTIDEKKyNkZWZpbmUgRFlOX1RSRUVTICAgIDIKKy8qIFRoZSB0aHJlZSBraW5kcyBvZiBibG9jayB0eXBlICovCisKKyNkZWZpbmUgTUlOX01BVENIICAzCisjZGVmaW5lIE1BWF9NQVRDSCAgMjU4CisvKiBUaGUgbWluaW11bSBhbmQgbWF4aW11bSBtYXRjaCBsZW5ndGhzICovCisKKyNkZWZpbmUgUFJFU0VUX0RJQ1QgMHgyMCAvKiBwcmVzZXQgZGljdGlvbmFyeSBmbGFnIGluIHpsaWIgaGVhZGVyICovCisKKyAgICAgICAgLyogdGFyZ2V0IGRlcGVuZGVuY2llcyAqLworCisgICAgICAgIC8qIENvbW1vbiBkZWZhdWx0cyAqLworCisjaWZuZGVmIE9TX0NPREUKKyMgIGRlZmluZSBPU19DT0RFICAweDAzICAvKiBhc3N1bWUgVW5peCAqLworI2VuZGlmCisKKyAgICAgICAgIC8qIGZ1bmN0aW9ucyAqLworCit0eXBlZGVmIHVMb25nICgqY2hlY2tfZnVuYykgKHVMb25nIGNoZWNrLCBjb25zdCBCeXRlICpidWYsCisJCQkJICAgICAgIHVJbnQgbGVuKTsKKworCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBjaGVja3N1bSBmdW5jdGlvbnMgKi8KKworI2RlZmluZSBCQVNFIDY1NTIxTCAvKiBsYXJnZXN0IHByaW1lIHNtYWxsZXIgdGhhbiA2NTUzNiAqLworI2RlZmluZSBOTUFYIDU1NTIKKy8qIE5NQVggaXMgdGhlIGxhcmdlc3QgbiBzdWNoIHRoYXQgMjU1bihuKzEpLzIgKyAobisxKShCQVNFLTEpIDw9IDJeMzItMSAqLworCisjZGVmaW5lIERPMShidWYsaSkgIHtzMSArPSBidWZbaV07IHMyICs9IHMxO30KKyNkZWZpbmUgRE8yKGJ1ZixpKSAgRE8xKGJ1ZixpKTsgRE8xKGJ1ZixpKzEpOworI2RlZmluZSBETzQoYnVmLGkpICBETzIoYnVmLGkpOyBETzIoYnVmLGkrMik7CisjZGVmaW5lIERPOChidWYsaSkgIERPNChidWYsaSk7IERPNChidWYsaSs0KTsKKyNkZWZpbmUgRE8xNihidWYpICAgRE84KGJ1ZiwwKTsgRE84KGJ1Ziw4KTsKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyoKKyAgICAgVXBkYXRlIGEgcnVubmluZyBBZGxlci0zMiBjaGVja3N1bSB3aXRoIHRoZSBieXRlcyBidWZbMC4ubGVuLTFdIGFuZAorICAgcmV0dXJuIHRoZSB1cGRhdGVkIGNoZWNrc3VtLiBJZiBidWYgaXMgTlVMTCwgdGhpcyBmdW5jdGlvbiByZXR1cm5zCisgICB0aGUgcmVxdWlyZWQgaW5pdGlhbCB2YWx1ZSBmb3IgdGhlIGNoZWNrc3VtLgorICAgQW4gQWRsZXItMzIgY2hlY2tzdW0gaXMgYWxtb3N0IGFzIHJlbGlhYmxlIGFzIGEgQ1JDMzIgYnV0IGNhbiBiZSBjb21wdXRlZAorICAgbXVjaCBmYXN0ZXIuIFVzYWdlIGV4YW1wbGU6CisKKyAgICAgdUxvbmcgYWRsZXIgPSBhZGxlcjMyKDBMLCBOVUxMLCAwKTsKKworICAgICB3aGlsZSAocmVhZF9idWZmZXIoYnVmZmVyLCBsZW5ndGgpICE9IEVPRikgeworICAgICAgIGFkbGVyID0gYWRsZXIzMihhZGxlciwgYnVmZmVyLCBsZW5ndGgpOworICAgICB9CisgICAgIGlmIChhZGxlciAhPSBvcmlnaW5hbF9hZGxlcikgZXJyb3IoKTsKKyovCitzdGF0aWMgaW5saW5lIHVMb25nIHpsaWJfYWRsZXIzMih1TG9uZyBhZGxlciwKKwkJCQkgY29uc3QgQnl0ZSAqYnVmLAorCQkJCSB1SW50IGxlbikKK3sKKyAgICB1bnNpZ25lZCBsb25nIHMxID0gYWRsZXIgJiAweGZmZmY7CisgICAgdW5zaWduZWQgbG9uZyBzMiA9IChhZGxlciA+PiAxNikgJiAweGZmZmY7CisgICAgaW50IGs7CisKKyAgICBpZiAoYnVmID09IE5VTEwpIHJldHVybiAxTDsKKworICAgIHdoaWxlIChsZW4gPiAwKSB7CisgICAgICAgIGsgPSBsZW4gPCBOTUFYID8gbGVuIDogTk1BWDsKKyAgICAgICAgbGVuIC09IGs7CisgICAgICAgIHdoaWxlIChrID49IDE2KSB7CisgICAgICAgICAgICBETzE2KGJ1Zik7CisJICAgIGJ1ZiArPSAxNjsKKyAgICAgICAgICAgIGsgLT0gMTY7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGsgIT0gMCkgZG8geworICAgICAgICAgICAgczEgKz0gKmJ1ZisrOworCSAgICBzMiArPSBzMTsKKyAgICAgICAgfSB3aGlsZSAoLS1rKTsKKyAgICAgICAgczEgJT0gQkFTRTsKKyAgICAgICAgczIgJT0gQkFTRTsKKyAgICB9CisgICAgcmV0dXJuIChzMiA8PCAxNikgfCBzMTsKK30KKworI2VuZGlmIC8qIF9aX1VUSUxfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tYXRoLWVtdS9kb3VibGUuaCBiL2luY2x1ZGUvbWF0aC1lbXUvZG91YmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU1Y2NmMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbWF0aC1lbXUvZG91YmxlLmgKQEAgLTAsMCArMSwyMDUgQEAKKy8qIFNvZnR3YXJlIGZsb2F0aW5nLXBvaW50IGVtdWxhdGlvbi4KKyAgIERlZmluaXRpb25zIGZvciBJRUVFIERvdWJsZSBQcmVjaXNpb24KKyAgIENvcHlyaWdodCAoQykgMTk5NywxOTk4LDE5OTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKyAgIENvbnRyaWJ1dGVkIGJ5IFJpY2hhcmQgSGVuZGVyc29uIChydGhAY3lnbnVzLmNvbSksCisJCSAgSmFrdWIgSmVsaW5layAoampAdWx0cmEubGludXguY3opLAorCQkgIERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AcmVkaGF0LmNvbSkgYW5kCisJCSAgUGV0ZXIgTWF5ZGVsbCAocG1heWRlbGxAY2hpYXJrLmdyZWVuZW5kLm9yZy51aykuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisgICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYKKyAgIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworCisjaWZuZGVmICAgIF9fTUFUSF9FTVVfRE9VQkxFX0hfXworI2RlZmluZSAgICBfX01BVEhfRU1VX0RPVUJMRV9IX18KKworI2lmIF9GUF9XX1RZUEVfU0laRSA8IDMyCisjZXJyb3IgIkhlcmUncyBhIG5pY2tlbCBraWQuICBHbyBidXkgeW91cnNlbGYgYSByZWFsIGNvbXB1dGVyLiIKKyNlbmRpZgorCisjaWYgX0ZQX1dfVFlQRV9TSVpFIDwgNjQKKyNkZWZpbmUgX0ZQX0ZSQUNUQklUU19ECQkoMiAqIF9GUF9XX1RZUEVfU0laRSkKKyNlbHNlCisjZGVmaW5lIF9GUF9GUkFDVEJJVFNfRAkJX0ZQX1dfVFlQRV9TSVpFCisjZW5kaWYKKworI2RlZmluZSBfRlBfRlJBQ0JJVFNfRAkJNTMKKyNkZWZpbmUgX0ZQX0ZSQUNYQklUU19ECQkoX0ZQX0ZSQUNUQklUU19EIC0gX0ZQX0ZSQUNCSVRTX0QpCisjZGVmaW5lIF9GUF9XRlJBQ0JJVFNfRAkJKF9GUF9XT1JLQklUUyArIF9GUF9GUkFDQklUU19EKQorI2RlZmluZSBfRlBfV0ZSQUNYQklUU19ECShfRlBfRlJBQ1RCSVRTX0QgLSBfRlBfV0ZSQUNCSVRTX0QpCisjZGVmaW5lIF9GUF9FWFBCSVRTX0QJCTExCisjZGVmaW5lIF9GUF9FWFBCSUFTX0QJCTEwMjMKKyNkZWZpbmUgX0ZQX0VYUE1BWF9ECQkyMDQ3CisKKyNkZWZpbmUgX0ZQX1FOQU5CSVRfRAkJXAorCSgoX0ZQX1dfVFlQRSkxIDw8IChfRlBfRlJBQ0JJVFNfRC0yKSAlIF9GUF9XX1RZUEVfU0laRSkKKyNkZWZpbmUgX0ZQX0lNUExCSVRfRAkJXAorCSgoX0ZQX1dfVFlQRSkxIDw8IChfRlBfRlJBQ0JJVFNfRC0xKSAlIF9GUF9XX1RZUEVfU0laRSkKKyNkZWZpbmUgX0ZQX09WRVJGTE9XX0QJCVwKKwkoKF9GUF9XX1RZUEUpMSA8PCBfRlBfV0ZSQUNCSVRTX0QgJSBfRlBfV19UWVBFX1NJWkUpCisKKyNpZiBfRlBfV19UWVBFX1NJWkUgPCA2NAorCit1bmlvbiBfRlBfVU5JT05fRAoreworICBkb3VibGUgZmx0OworICBzdHJ1Y3QgeworI2lmIF9fQllURV9PUkRFUiA9PSBfX0JJR19FTkRJQU4KKyAgICB1bnNpZ25lZCBzaWduICA6IDE7CisgICAgdW5zaWduZWQgZXhwICAgOiBfRlBfRVhQQklUU19EOworICAgIHVuc2lnbmVkIGZyYWMxIDogX0ZQX0ZSQUNCSVRTX0QgLSAoX0ZQX0lNUExCSVRfRCAhPSAwKSAtIF9GUF9XX1RZUEVfU0laRTsKKyAgICB1bnNpZ25lZCBmcmFjMCA6IF9GUF9XX1RZUEVfU0laRTsKKyNlbHNlCisgICAgdW5zaWduZWQgZnJhYzAgOiBfRlBfV19UWVBFX1NJWkU7CisgICAgdW5zaWduZWQgZnJhYzEgOiBfRlBfRlJBQ0JJVFNfRCAtIChfRlBfSU1QTEJJVF9EICE9IDApIC0gX0ZQX1dfVFlQRV9TSVpFOworICAgIHVuc2lnbmVkIGV4cCAgIDogX0ZQX0VYUEJJVFNfRDsKKyAgICB1bnNpZ25lZCBzaWduICA6IDE7CisjZW5kaWYKKyAgfSBiaXRzIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfTsKKworI2RlZmluZSBGUF9ERUNMX0QoWCkJCV9GUF9ERUNMKDIsWCkKKyNkZWZpbmUgRlBfVU5QQUNLX1JBV19EKFgsdmFsKQlfRlBfVU5QQUNLX1JBV18yKEQsWCx2YWwpCisjZGVmaW5lIEZQX1VOUEFDS19SQVdfRFAoWCx2YWwpCV9GUF9VTlBBQ0tfUkFXXzJfUChELFgsdmFsKQorI2RlZmluZSBGUF9QQUNLX1JBV19EKHZhbCxYKQlfRlBfUEFDS19SQVdfMihELHZhbCxYKQorI2RlZmluZSBGUF9QQUNLX1JBV19EUCh2YWwsWCkJCVwKKyAgZG8gewkJCQkJXAorICAgIGlmICghRlBfSU5ISUJJVF9SRVNVTFRTKQkJXAorICAgICAgX0ZQX1BBQ0tfUkFXXzJfUChELHZhbCxYKTsJXAorICB9IHdoaWxlICgwKQorCisjZGVmaW5lIEZQX1VOUEFDS19EKFgsdmFsKQkJXAorICBkbyB7CQkJCQlcCisgICAgX0ZQX1VOUEFDS19SQVdfMihELFgsdmFsKTsJCVwKKyAgICBfRlBfVU5QQUNLX0NBTk9OSUNBTChELDIsWCk7CVwKKyAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBGUF9VTlBBQ0tfRFAoWCx2YWwpCQlcCisgIGRvIHsJCQkJCVwKKyAgICBfRlBfVU5QQUNLX1JBV18yX1AoRCxYLHZhbCk7CVwKKyAgICBfRlBfVU5QQUNLX0NBTk9OSUNBTChELDIsWCk7CVwKKyAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBGUF9QQUNLX0QodmFsLFgpCQlcCisgIGRvIHsJCQkJCVwKKyAgICBfRlBfUEFDS19DQU5PTklDQUwoRCwyLFgpOwkJXAorICAgIF9GUF9QQUNLX1JBV18yKEQsdmFsLFgpOwkJXAorICB9IHdoaWxlICgwKQorCisjZGVmaW5lIEZQX1BBQ0tfRFAodmFsLFgpCQlcCisgIGRvIHsJCQkJCVwKKyAgICBfRlBfUEFDS19DQU5PTklDQUwoRCwyLFgpOwkJXAorICAgIGlmICghRlBfSU5ISUJJVF9SRVNVTFRTKQkJXAorICAgICAgX0ZQX1BBQ0tfUkFXXzJfUChELHZhbCxYKTsJXAorICB9IHdoaWxlICgwKQorCisjZGVmaW5lIEZQX0lTU0lHTkFOX0QoWCkJCV9GUF9JU1NJR05BTihELDIsWCkKKyNkZWZpbmUgRlBfTkVHX0QoUixYKQkJCV9GUF9ORUcoRCwyLFIsWCkKKyNkZWZpbmUgRlBfQUREX0QoUixYLFkpCQkJX0ZQX0FERChELDIsUixYLFkpCisjZGVmaW5lIEZQX1NVQl9EKFIsWCxZKQkJCV9GUF9TVUIoRCwyLFIsWCxZKQorI2RlZmluZSBGUF9NVUxfRChSLFgsWSkJCQlfRlBfTVVMKEQsMixSLFgsWSkKKyNkZWZpbmUgRlBfRElWX0QoUixYLFkpCQkJX0ZQX0RJVihELDIsUixYLFkpCisjZGVmaW5lIEZQX1NRUlRfRChSLFgpCQkJX0ZQX1NRUlQoRCwyLFIsWCkKKyNkZWZpbmUgX0ZQX1NRUlRfTUVBVF9EKFIsUyxULFgsUSkJX0ZQX1NRUlRfTUVBVF8yKFIsUyxULFgsUSkKKworI2RlZmluZSBGUF9DTVBfRChyLFgsWSx1bikJX0ZQX0NNUChELDIscixYLFksdW4pCisjZGVmaW5lIEZQX0NNUF9FUV9EKHIsWCxZKQlfRlBfQ01QX0VRKEQsMixyLFgsWSkKKworI2RlZmluZSBGUF9UT19JTlRfRChyLFgscnN6LHJzZykJX0ZQX1RPX0lOVChELDIscixYLHJzeixyc2cpCisjZGVmaW5lIEZQX1RPX0lOVF9ST1VORF9EKHIsWCxyc3oscnNnKQlfRlBfVE9fSU5UX1JPVU5EKEQsMixyLFgscnN6LHJzZykKKyNkZWZpbmUgRlBfRlJPTV9JTlRfRChYLHIscnMscnQpCV9GUF9GUk9NX0lOVChELDIsWCxyLHJzLHJ0KQorCisjZGVmaW5lIF9GUF9GUkFDX0hJR0hfRChYKQlfRlBfRlJBQ19ISUdIXzIoWCkKKyNkZWZpbmUgX0ZQX0ZSQUNfSElHSF9SQVdfRChYKQlfRlBfRlJBQ19ISUdIXzIoWCkKKworI2Vsc2UKKwordW5pb24gX0ZQX1VOSU9OX0QKK3sKKyAgZG91YmxlIGZsdDsKKyAgc3RydWN0IHsKKyNpZiBfX0JZVEVfT1JERVIgPT0gX19CSUdfRU5ESUFOCisgICAgdW5zaWduZWQgc2lnbiA6IDE7CisgICAgdW5zaWduZWQgZXhwICA6IF9GUF9FWFBCSVRTX0Q7CisgICAgdW5zaWduZWQgbG9uZyBmcmFjIDogX0ZQX0ZSQUNCSVRTX0QgLSAoX0ZQX0lNUExCSVRfRCAhPSAwKTsKKyNlbHNlCisgICAgdW5zaWduZWQgbG9uZyBmcmFjIDogX0ZQX0ZSQUNCSVRTX0QgLSAoX0ZQX0lNUExCSVRfRCAhPSAwKTsKKyAgICB1bnNpZ25lZCBleHAgIDogX0ZQX0VYUEJJVFNfRDsKKyAgICB1bnNpZ25lZCBzaWduIDogMTsKKyNlbmRpZgorICB9IGJpdHMgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9OworCisjZGVmaW5lIEZQX0RFQ0xfRChYKQkJX0ZQX0RFQ0woMSxYKQorI2RlZmluZSBGUF9VTlBBQ0tfUkFXX0QoWCx2YWwpCV9GUF9VTlBBQ0tfUkFXXzEoRCxYLHZhbCkKKyNkZWZpbmUgRlBfVU5QQUNLX1JBV19EUChYLHZhbCkJX0ZQX1VOUEFDS19SQVdfMV9QKEQsWCx2YWwpCisjZGVmaW5lIEZQX1BBQ0tfUkFXX0QodmFsLFgpCV9GUF9QQUNLX1JBV18xKEQsdmFsLFgpCisjZGVmaW5lIEZQX1BBQ0tfUkFXX0RQKHZhbCxYKQkJXAorICBkbyB7CQkJCQlcCisgICAgaWYgKCFGUF9JTkhJQklUX1JFU1VMVFMpCQlcCisgICAgICBfRlBfUEFDS19SQVdfMV9QKEQsdmFsLFgpOwlcCisgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgRlBfVU5QQUNLX0QoWCx2YWwpCQlcCisgIGRvIHsJCQkJCVwKKyAgICBfRlBfVU5QQUNLX1JBV18xKEQsWCx2YWwpOwkJXAorICAgIF9GUF9VTlBBQ0tfQ0FOT05JQ0FMKEQsMSxYKTsJXAorICB9IHdoaWxlICgwKQorCisjZGVmaW5lIEZQX1VOUEFDS19EUChYLHZhbCkJCVwKKyAgZG8gewkJCQkJXAorICAgIF9GUF9VTlBBQ0tfUkFXXzFfUChELFgsdmFsKTsJXAorICAgIF9GUF9VTlBBQ0tfQ0FOT05JQ0FMKEQsMSxYKTsJXAorICB9IHdoaWxlICgwKQorCisjZGVmaW5lIEZQX1BBQ0tfRCh2YWwsWCkJCVwKKyAgZG8gewkJCQkJXAorICAgIF9GUF9QQUNLX0NBTk9OSUNBTChELDEsWCk7CQlcCisgICAgX0ZQX1BBQ0tfUkFXXzEoRCx2YWwsWCk7CQlcCisgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgRlBfUEFDS19EUCh2YWwsWCkJCVwKKyAgZG8gewkJCQkJXAorICAgIF9GUF9QQUNLX0NBTk9OSUNBTChELDEsWCk7CQlcCisgICAgaWYgKCFGUF9JTkhJQklUX1JFU1VMVFMpCQlcCisgICAgICBfRlBfUEFDS19SQVdfMV9QKEQsdmFsLFgpOwlcCisgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgRlBfSVNTSUdOQU5fRChYKQkJX0ZQX0lTU0lHTkFOKEQsMSxYKQorI2RlZmluZSBGUF9ORUdfRChSLFgpCQkJX0ZQX05FRyhELDEsUixYKQorI2RlZmluZSBGUF9BRERfRChSLFgsWSkJCQlfRlBfQUREKEQsMSxSLFgsWSkKKyNkZWZpbmUgRlBfU1VCX0QoUixYLFkpCQkJX0ZQX1NVQihELDEsUixYLFkpCisjZGVmaW5lIEZQX01VTF9EKFIsWCxZKQkJCV9GUF9NVUwoRCwxLFIsWCxZKQorI2RlZmluZSBGUF9ESVZfRChSLFgsWSkJCQlfRlBfRElWKEQsMSxSLFgsWSkKKyNkZWZpbmUgRlBfU1FSVF9EKFIsWCkJCQlfRlBfU1FSVChELDEsUixYKQorI2RlZmluZSBfRlBfU1FSVF9NRUFUX0QoUixTLFQsWCxRKQlfRlBfU1FSVF9NRUFUXzEoUixTLFQsWCxRKQorCisvKiBUaGUgaW1wbGVtZW50YXRpb24gb2YgX0ZQX01VTF9EIGFuZCBfRlBfRElWX0Qgc2hvdWxkIGJlIGNob3NlbiBieQorICAgdGhlIHRhcmdldCBtYWNoaW5lLiAgKi8KKworI2RlZmluZSBGUF9DTVBfRChyLFgsWSx1bikJX0ZQX0NNUChELDEscixYLFksdW4pCisjZGVmaW5lIEZQX0NNUF9FUV9EKHIsWCxZKQlfRlBfQ01QX0VRKEQsMSxyLFgsWSkKKworI2RlZmluZSBGUF9UT19JTlRfRChyLFgscnN6LHJzZykJX0ZQX1RPX0lOVChELDEscixYLHJzeixyc2cpCisjZGVmaW5lIEZQX1RPX0lOVF9ST1VORF9EKHIsWCxyc3oscnNnKQlfRlBfVE9fSU5UX1JPVU5EKEQsMSxyLFgscnN6LHJzZykKKyNkZWZpbmUgRlBfRlJPTV9JTlRfRChYLHIscnMscnQpCV9GUF9GUk9NX0lOVChELDEsWCxyLHJzLHJ0KQorCisjZGVmaW5lIF9GUF9GUkFDX0hJR0hfRChYKQlfRlBfRlJBQ19ISUdIXzEoWCkKKyNkZWZpbmUgX0ZQX0ZSQUNfSElHSF9SQVdfRChYKQlfRlBfRlJBQ19ISUdIXzEoWCkKKworI2VuZGlmIC8qIFdfVFlQRV9TSVpFIDwgNjQgKi8KKworCisjZW5kaWYgLyogX19NQVRIX0VNVV9ET1VCTEVfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL21hdGgtZW11L2V4dGVuZGVkLmggYi9pbmNsdWRlL21hdGgtZW11L2V4dGVuZGVkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ3NzBmYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbWF0aC1lbXUvZXh0ZW5kZWQuaApAQCAtMCwwICsxLDM5NiBAQAorLyogU29mdHdhcmUgZmxvYXRpbmctcG9pbnQgZW11bGF0aW9uLgorICAgRGVmaW5pdGlvbnMgZm9yIElFRUUgRXh0ZW5kZWQgUHJlY2lzaW9uLgorICAgQ29weXJpZ2h0IChDKSAxOTk5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisgICBDb250cmlidXRlZCBieSBKYWt1YiBKZWxpbmVrIChqakB1bHRyYS5saW51eC5jeikuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisgICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYKKyAgIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworCisKKyNpZm5kZWYgICAgX19NQVRIX0VNVV9FWFRFTkRFRF9IX18KKyNkZWZpbmUgICAgX19NQVRIX0VNVV9FWFRFTkRFRF9IX18KKworI2lmIF9GUF9XX1RZUEVfU0laRSA8IDMyCisjZXJyb3IgIkhlcmUncyBhIG5pY2tlbCwga2lkLiBHbyBidXkgeW91cnNlbGYgYSByZWFsIGNvbXB1dGVyLiIKKyNlbmRpZgorCisjaWYgX0ZQX1dfVFlQRV9TSVpFIDwgNjQKKyNkZWZpbmUgX0ZQX0ZSQUNUQklUU19FICAgICAgICAgKDQqX0ZQX1dfVFlQRV9TSVpFKQorI2Vsc2UKKyNkZWZpbmUgX0ZQX0ZSQUNUQklUU19FCQkoMipfRlBfV19UWVBFX1NJWkUpCisjZW5kaWYKKworI2RlZmluZSBfRlBfRlJBQ0JJVFNfRQkJNjQKKyNkZWZpbmUgX0ZQX0ZSQUNYQklUU19FCQkoX0ZQX0ZSQUNUQklUU19FIC0gX0ZQX0ZSQUNCSVRTX0UpCisjZGVmaW5lIF9GUF9XRlJBQ0JJVFNfRQkJKF9GUF9XT1JLQklUUyArIF9GUF9GUkFDQklUU19FKQorI2RlZmluZSBfRlBfV0ZSQUNYQklUU19FCShfRlBfRlJBQ1RCSVRTX0UgLSBfRlBfV0ZSQUNCSVRTX0UpCisjZGVmaW5lIF9GUF9FWFBCSVRTX0UJCTE1CisjZGVmaW5lIF9GUF9FWFBCSUFTX0UJCTE2MzgzCisjZGVmaW5lIF9GUF9FWFBNQVhfRQkJMzI3NjcKKworI2RlZmluZSBfRlBfUU5BTkJJVF9FCQlcCisJKChfRlBfV19UWVBFKTEgPDwgKF9GUF9GUkFDQklUU19FLTIpICUgX0ZQX1dfVFlQRV9TSVpFKQorI2RlZmluZSBfRlBfSU1QTEJJVF9FCQlcCisJKChfRlBfV19UWVBFKTEgPDwgKF9GUF9GUkFDQklUU19FLTEpICUgX0ZQX1dfVFlQRV9TSVpFKQorI2RlZmluZSBfRlBfT1ZFUkZMT1dfRQkJXAorCSgoX0ZQX1dfVFlQRSkxIDw8IChfRlBfV0ZSQUNCSVRTX0UgJSBfRlBfV19UWVBFX1NJWkUpKQorCisjaWYgX0ZQX1dfVFlQRV9TSVpFIDwgNjQKKwordW5pb24gX0ZQX1VOSU9OX0UKK3sKKyAgIGxvbmcgZG91YmxlIGZsdDsKKyAgIHN0cnVjdCAKKyAgIHsKKyNpZiBfX0JZVEVfT1JERVIgPT0gX19CSUdfRU5ESUFOCisgICAgICB1bnNpZ25lZCBsb25nIHBhZDEgOiBfRlBfV19UWVBFX1NJWkU7CisgICAgICB1bnNpZ25lZCBsb25nIHBhZDIgOiAoX0ZQX1dfVFlQRV9TSVpFIC0gMSAtIF9GUF9FWFBCSVRTX0UpOworICAgICAgdW5zaWduZWQgbG9uZyBzaWduIDogMTsKKyAgICAgIHVuc2lnbmVkIGxvbmcgZXhwIDogX0ZQX0VYUEJJVFNfRTsKKyAgICAgIHVuc2lnbmVkIGxvbmcgZnJhYzEgOiBfRlBfV19UWVBFX1NJWkU7CisgICAgICB1bnNpZ25lZCBsb25nIGZyYWMwIDogX0ZQX1dfVFlQRV9TSVpFOworI2Vsc2UKKyAgICAgIHVuc2lnbmVkIGxvbmcgZnJhYzAgOiBfRlBfV19UWVBFX1NJWkU7CisgICAgICB1bnNpZ25lZCBsb25nIGZyYWMxIDogX0ZQX1dfVFlQRV9TSVpFOworICAgICAgdW5zaWduZWQgZXhwIDogX0ZQX0VYUEJJVFNfRTsKKyAgICAgIHVuc2lnbmVkIHNpZ24gOiAxOworI2VuZGlmIC8qIG5vdCBiaWdlbmRpYW4gKi8KKyAgIH0gYml0cyBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK307CisKKworI2RlZmluZSBGUF9ERUNMX0UoWCkJCV9GUF9ERUNMKDQsWCkKKworI2RlZmluZSBGUF9VTlBBQ0tfUkFXX0UoWCwgdmFsKQkJCQlcCisgIGRvIHsJCQkJCQkJXAorICAgIHVuaW9uIF9GUF9VTklPTl9FIF9mbG87IF9mbG8uZmx0ID0gKHZhbCk7CQlcCisJCQkJCQkJXAorICAgIFgjI19mWzJdID0gMDsgWCMjX2ZbM10gPSAwOwkJCQlcCisgICAgWCMjX2ZbMF0gPSBfZmxvLmJpdHMuZnJhYzA7CQkJCVwKKyAgICBYIyNfZlsxXSA9IF9mbG8uYml0cy5mcmFjMTsJCQkJXAorICAgIFgjI19lICA9IF9mbG8uYml0cy5leHA7CQkJCVwKKyAgICBYIyNfcyAgPSBfZmxvLmJpdHMuc2lnbjsJCQkJXAorICAgIGlmICghWCMjX2UgJiYgKFgjI19mWzFdIHx8IFgjI19mWzBdKQkJXAorICAgICAgICAmJiAhKFgjI19mWzFdICYgX0ZQX0lNUExCSVRfRSkpCQkJXAorICAgICAgewkJCQkJCQlcCisgICAgICAgIFgjI19lKys7CQkJCQlcCisgICAgICAgIEZQX1NFVF9FWENFUFRJT04oRlBfRVhfREVOT1JNKTsJCQlcCisgICAgICB9CQkJCQkJCVwKKyAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBGUF9VTlBBQ0tfUkFXX0VQKFgsIHZhbCkJCQlcCisgIGRvIHsJCQkJCQkJXAorICAgIHVuaW9uIF9GUF9VTklPTl9FICpfZmxvID0JCQkJXAorICAgICh1bmlvbiBfRlBfVU5JT05fRSAqKSh2YWwpOwkJCQlcCisJCQkJCQkJXAorICAgIFgjI19mWzJdID0gMDsgWCMjX2ZbM10gPSAwOwkJCQlcCisgICAgWCMjX2ZbMF0gPSBfZmxvLT5iaXRzLmZyYWMwOwkJCVwKKyAgICBYIyNfZlsxXSA9IF9mbG8tPmJpdHMuZnJhYzE7CQkJXAorICAgIFgjI19lICA9IF9mbG8tPmJpdHMuZXhwOwkJCQlcCisgICAgWCMjX3MgID0gX2Zsby0+Yml0cy5zaWduOwkJCQlcCisgICAgaWYgKCFYIyNfZSAmJiAoWCMjX2ZbMV0gfHwgWCMjX2ZbMF0pCQlcCisgICAgICAgICYmICEoWCMjX2ZbMV0gJiBfRlBfSU1QTEJJVF9FKSkJCQlcCisgICAgICB7CQkJCQkJCVwKKyAgICAgICAgWCMjX2UrKzsJCQkJCVwKKyAgICAgICAgRlBfU0VUX0VYQ0VQVElPTihGUF9FWF9ERU5PUk0pOwkJCVwKKyAgICAgIH0JCQkJCQkJXAorICB9IHdoaWxlICgwKQorCisjZGVmaW5lIEZQX1BBQ0tfUkFXX0UodmFsLCBYKQkJCQlcCisgIGRvIHsJCQkJCQkJXAorICAgIHVuaW9uIF9GUF9VTklPTl9FIF9mbG87CQkJCVwKKwkJCQkJCQlcCisgICAgaWYgKFgjI19lKSBYIyNfZlsxXSB8PSBfRlBfSU1QTEJJVF9FOwkJXAorICAgIGVsc2UgWCMjX2ZbMV0gJj0gfihfRlBfSU1QTEJJVF9FKTsJCQlcCisgICAgX2Zsby5iaXRzLmZyYWMwID0gWCMjX2ZbMF07CQkJCVwKKyAgICBfZmxvLmJpdHMuZnJhYzEgPSBYIyNfZlsxXTsJCQkJXAorICAgIF9mbG8uYml0cy5leHAgICA9IFgjI19lOwkJCQlcCisgICAgX2Zsby5iaXRzLnNpZ24gID0gWCMjX3M7CQkJCVwKKwkJCQkJCQlcCisgICAgKHZhbCkgPSBfZmxvLmZsdDsJCQkJCVwKKyAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBGUF9QQUNLX1JBV19FUCh2YWwsIFgpCQkJCVwKKyAgZG8gewkJCQkJCQlcCisgICAgaWYgKCFGUF9JTkhJQklUX1JFU1VMVFMpCQkJCVwKKyAgICAgIHsJCQkJCQkJXAorCXVuaW9uIF9GUF9VTklPTl9FICpfZmxvID0JCQlcCisJICAodW5pb24gX0ZQX1VOSU9OX0UgKikodmFsKTsJCQlcCisJCQkJCQkJXAorCWlmIChYIyNfZSkgWCMjX2ZbMV0gfD0gX0ZQX0lNUExCSVRfRTsJCVwKKwllbHNlIFgjI19mWzFdICY9IH4oX0ZQX0lNUExCSVRfRSk7CQlcCisJX2Zsby0+Yml0cy5mcmFjMCA9IFgjI19mWzBdOwkJCVwKKwlfZmxvLT5iaXRzLmZyYWMxID0gWCMjX2ZbMV07CQkJXAorCV9mbG8tPmJpdHMuZXhwICAgPSBYIyNfZTsJCQlcCisJX2Zsby0+Yml0cy5zaWduICA9IFgjI19zOwkJCVwKKyAgICAgIH0JCQkJCQkJXAorICB9IHdoaWxlICgwKQorCisjZGVmaW5lIEZQX1VOUEFDS19FKFgsdmFsKQkJXAorICBkbyB7CQkJCQlcCisgICAgRlBfVU5QQUNLX1JBV19FKFgsdmFsKTsJCVwKKyAgICBfRlBfVU5QQUNLX0NBTk9OSUNBTChFLDQsWCk7CVwKKyAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBGUF9VTlBBQ0tfRVAoWCx2YWwpCQlcCisgIGRvIHsJCQkJCVwKKyAgICBGUF9VTlBBQ0tfUkFXXzJfUChYLHZhbCk7CQlcCisgICAgX0ZQX1VOUEFDS19DQU5PTklDQUwoRSw0LFgpOwlcCisgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgRlBfUEFDS19FKHZhbCxYKQkJXAorICBkbyB7CQkJCQlcCisgICAgX0ZQX1BBQ0tfQ0FOT05JQ0FMKEUsNCxYKTsJCVwKKyAgICBGUF9QQUNLX1JBV19FKHZhbCxYKTsJCVwKKyAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBGUF9QQUNLX0VQKHZhbCxYKQkJXAorICBkbyB7CQkJCQlcCisgICAgX0ZQX1BBQ0tfQ0FOT05JQ0FMKEUsNCxYKTsJCVwKKyAgICBGUF9QQUNLX1JBV19FUCh2YWwsWCk7CQlcCisgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgRlBfSVNTSUdOQU5fRShYKQlfRlBfSVNTSUdOQU4oRSw0LFgpCisjZGVmaW5lIEZQX05FR19FKFIsWCkJCV9GUF9ORUcoRSw0LFIsWCkKKyNkZWZpbmUgRlBfQUREX0UoUixYLFkpCQlfRlBfQUREKEUsNCxSLFgsWSkKKyNkZWZpbmUgRlBfU1VCX0UoUixYLFkpCQlfRlBfU1VCKEUsNCxSLFgsWSkKKyNkZWZpbmUgRlBfTVVMX0UoUixYLFkpCQlfRlBfTVVMKEUsNCxSLFgsWSkKKyNkZWZpbmUgRlBfRElWX0UoUixYLFkpCQlfRlBfRElWKEUsNCxSLFgsWSkKKyNkZWZpbmUgRlBfU1FSVF9FKFIsWCkJCV9GUF9TUVJUKEUsNCxSLFgpCisKKy8qCisgKiBTcXVhcmUgcm9vdCBhbGdvcml0aG1zOgorICogV2UgaGF2ZSBqdXN0IG9uZSByaWdodCBub3csIG1heWJlIE5ld3RvbiBhcHByb3hpbWF0aW9uCisgKiBzaG91bGQgYmUgYWRkZWQgZm9yIHRob3NlIG1hY2hpbmVzIHdoZXJlIGRpdmlzaW9uIGlzIGZhc3QuCisgKiBUaGlzIGhhcyBzcGVjaWFsIF9FIHZlcnNpb24gYmVjYXVzZSBzdGFuZGFyZCBfNCBzcXVhcmUKKyAqIHJvb3Qgd291bGQgbm90IHdvcmsgKGl0IGhhcyB0byBzdGFydCBub3JtYWxseSB3aXRoIHRoZQorICogc2Vjb25kIHdvcmQgYW5kIG5vdCB0aGUgZmlyc3QpLCBidXQgYXMgd2UgaGF2ZSB0byBkbyBpdAorICogYW55d2F5LCB3ZSBvcHRpbWl6ZSBpdCBieSBkb2luZyBtb3N0IG9mIHRoZSBjYWxjdWxhdGlvbnMKKyAqIGluIHR3byBVV3R5cGUgcmVnaXN0ZXJzIGluc3RlYWQgb2YgZm91ci4KKyAqLworIAorI2RlZmluZSBfRlBfU1FSVF9NRUFUX0UoUiwgUywgVCwgWCwgcSkJCQlcCisgIGRvIHsJCQkJCQkJXAorICAgIHEgPSAoX0ZQX1dfVFlQRSkxIDw8IChfRlBfV19UWVBFX1NJWkUgLSAxKTsJCVwKKyAgICBfRlBfRlJBQ19TUkxfNChYLCAoX0ZQX1dPUktCSVRTKSk7CQkJXAorICAgIHdoaWxlIChxKQkJCQkJCVwKKyAgICAgIHsJCQkJCQkJXAorCVQjI19mWzFdID0gUyMjX2ZbMV0gKyBxOwkJCVwKKwlpZiAoVCMjX2ZbMV0gPD0gWCMjX2ZbMV0pCQkJXAorCSAgewkJCQkJCVwKKwkgICAgUyMjX2ZbMV0gPSBUIyNfZlsxXSArIHE7CQkJXAorCSAgICBYIyNfZlsxXSAtPSBUIyNfZlsxXTsJCQlcCisJICAgIFIjI19mWzFdICs9IHE7CQkJCVwKKwkgIH0JCQkJCQlcCisJX0ZQX0ZSQUNfU0xMXzIoWCwgMSk7CQkJCVwKKwlxID4+PSAxOwkJCQkJXAorICAgICAgfQkJCQkJCQlcCisgICAgcSA9IChfRlBfV19UWVBFKTEgPDwgKF9GUF9XX1RZUEVfU0laRSAtIDEpOwkJXAorICAgIHdoaWxlIChxKQkJCQkJCVwKKyAgICAgIHsJCQkJCQkJXAorCVQjI19mWzBdID0gUyMjX2ZbMF0gKyBxOwkJCVwKKwlUIyNfZlsxXSA9IFMjI19mWzFdOwkJCQlcCisJaWYgKFQjI19mWzFdIDwgWCMjX2ZbMV0gfHwgCQkJXAorCSAgICAoVCMjX2ZbMV0gPT0gWCMjX2ZbMV0gJiYJCQlcCisJICAgICBUIyNfZlswXSA8PSBYIyNfZlswXSkpCQkJXAorCSAgewkJCQkJCVwKKwkgICAgUyMjX2ZbMF0gPSBUIyNfZlswXSArIHE7CQkJXAorCSAgICBTIyNfZlsxXSArPSAoVCMjX2ZbMF0gPiBTIyNfZlswXSk7CQlcCisJICAgIF9GUF9GUkFDX0RFQ18yKFgsIFQpOwkJCVwKKwkgICAgUiMjX2ZbMF0gKz0gcTsJCQkJXAorCSAgfQkJCQkJCVwKKwlfRlBfRlJBQ19TTExfMihYLCAxKTsJCQkJXAorCXEgPj49IDE7CQkJCQlcCisgICAgICB9CQkJCQkJCVwKKyAgICBfRlBfRlJBQ19TTExfNChSLCAoX0ZQX1dPUktCSVRTKSk7CQkJXAorICAgIGlmIChYIyNfZlswXSB8IFgjI19mWzFdKQkJCQlcCisgICAgICB7CQkJCQkJCVwKKwlpZiAoUyMjX2ZbMV0gPCBYIyNfZlsxXSB8fCAJCQlcCisJICAgIChTIyNfZlsxXSA9PSBYIyNfZlsxXSAmJgkJCVwKKwkgICAgIFMjI19mWzBdIDwgWCMjX2ZbMF0pKQkJCVwKKwkgIFIjI19mWzBdIHw9IF9GUF9XT1JLX1JPVU5EOwkJCVwKKwlSIyNfZlswXSB8PSBfRlBfV09SS19TVElDS1k7CQkJXAorICAgICAgfQkJCQkJCQlcCisgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgRlBfQ01QX0UocixYLFksdW4pCV9GUF9DTVAoRSw0LHIsWCxZLHVuKQorI2RlZmluZSBGUF9DTVBfRVFfRShyLFgsWSkJX0ZQX0NNUF9FUShFLDQscixYLFkpCisKKyNkZWZpbmUgRlBfVE9fSU5UX0UocixYLHJzeixyc2cpCV9GUF9UT19JTlQoRSw0LHIsWCxyc3oscnNnKQorI2RlZmluZSBGUF9UT19JTlRfUk9VTkRfRShyLFgscnN6LHJzZykJX0ZQX1RPX0lOVF9ST1VORChFLDQscixYLHJzeixyc2cpCisjZGVmaW5lIEZQX0ZST01fSU5UX0UoWCxyLHJzLHJ0KQlfRlBfRlJPTV9JTlQoRSw0LFgscixycyxydCkKKworI2RlZmluZSBfRlBfRlJBQ19ISUdIX0UoWCkJKFgjI19mWzJdKQorI2RlZmluZSBfRlBfRlJBQ19ISUdIX1JBV19FKFgpCShYIyNfZlsxXSkKKworI2Vsc2UgICAvKiBub3QgX0ZQX1dfVFlQRV9TSVpFIDwgNjQgKi8KK3VuaW9uIF9GUF9VTklPTl9FCit7CisgIGxvbmcgZG91YmxlIGZsdCAvKiBfX2F0dHJpYnV0ZV9fKChtb2RlKFRGKSkpICovIDsKKyAgc3RydWN0IHsKKyNpZiBfX0JZVEVfT1JERVIgPT0gX19CSUdfRU5ESUFOCisgICAgdW5zaWduZWQgbG9uZyBwYWQgOiAoX0ZQX1dfVFlQRV9TSVpFIC0gMSAtIF9GUF9FWFBCSVRTX0UpOworICAgIHVuc2lnbmVkIHNpZ24gIDogMTsKKyAgICB1bnNpZ25lZCBleHAgICA6IF9GUF9FWFBCSVRTX0U7CisgICAgdW5zaWduZWQgbG9uZyBmcmFjIDogX0ZQX1dfVFlQRV9TSVpFOworI2Vsc2UKKyAgICB1bnNpZ25lZCBsb25nIGZyYWMgOiBfRlBfV19UWVBFX1NJWkU7CisgICAgdW5zaWduZWQgZXhwICAgOiBfRlBfRVhQQklUU19FOworICAgIHVuc2lnbmVkIHNpZ24gIDogMTsKKyNlbmRpZgorICB9IGJpdHM7Cit9OworCisjZGVmaW5lIEZQX0RFQ0xfRShYKQkJX0ZQX0RFQ0woMixYKQorCisjZGVmaW5lIEZQX1VOUEFDS19SQVdfRShYLCB2YWwpCQkJCQlcCisgIGRvIHsJCQkJCQkJCVwKKyAgICB1bmlvbiBfRlBfVU5JT05fRSBfZmxvOyBfZmxvLmZsdCA9ICh2YWwpOwkJCVwKKwkJCQkJCQkJXAorICAgIFgjI19mMCA9IF9mbG8uYml0cy5mcmFjOwkJCQkJXAorICAgIFgjI19mMSA9IDA7CQkJCQkJCVwKKyAgICBYIyNfZSA9IF9mbG8uYml0cy5leHA7CQkJCQlcCisgICAgWCMjX3MgPSBfZmxvLmJpdHMuc2lnbjsJCQkJCVwKKyAgICBpZiAoIVgjI19lICYmIFgjI19mMCAmJiAhKFgjI19mMCAmIF9GUF9JTVBMQklUX0UpKQkJXAorICAgICAgewkJCQkJCQkJXAorICAgICAgICBYIyNfZSsrOwkJCQkJCVwKKyAgICAgICAgRlBfU0VUX0VYQ0VQVElPTihGUF9FWF9ERU5PUk0pOwkJCQlcCisgICAgICB9CQkJCQkJCQlcCisgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgRlBfVU5QQUNLX1JBV19FUChYLCB2YWwpCQkJCVwKKyAgZG8gewkJCQkJCQkJXAorICAgIHVuaW9uIF9GUF9VTklPTl9FICpfZmxvID0JCQkJCVwKKyAgICAgICh1bmlvbiBfRlBfVU5JT05fRSAqKSh2YWwpOwkJCQlcCisJCQkJCQkJCVwKKyAgICBYIyNfZjAgPSBfZmxvLT5iaXRzLmZyYWM7CQkJCQlcCisgICAgWCMjX2YxID0gMDsJCQkJCQkJXAorICAgIFgjI19lID0gX2Zsby0+Yml0cy5leHA7CQkJCQlcCisgICAgWCMjX3MgPSBfZmxvLT5iaXRzLnNpZ247CQkJCQlcCisgICAgaWYgKCFYIyNfZSAmJiBYIyNfZjAgJiYgIShYIyNfZjAgJiBfRlBfSU1QTEJJVF9FKSkJCVwKKyAgICAgIHsJCQkJCQkJCVwKKyAgICAgICAgWCMjX2UrKzsJCQkJCQlcCisgICAgICAgIEZQX1NFVF9FWENFUFRJT04oRlBfRVhfREVOT1JNKTsJCQkJXAorICAgICAgfQkJCQkJCQkJXAorICB9IHdoaWxlICgwKQorCisjZGVmaW5lIEZQX1BBQ0tfUkFXX0UodmFsLCBYKQkJCQkJXAorICBkbyB7CQkJCQkJCQlcCisgICAgdW5pb24gX0ZQX1VOSU9OX0UgX2ZsbzsJCQkJCVwKKwkJCQkJCQkJXAorICAgIGlmIChYIyNfZSkgWCMjX2YwIHw9IF9GUF9JTVBMQklUX0U7CQkJCVwKKyAgICBlbHNlIFgjI19mMCAmPSB+KF9GUF9JTVBMQklUX0UpOwkJCQlcCisgICAgX2Zsby5iaXRzLmZyYWMgPSBYIyNfZjA7CQkJCQlcCisgICAgX2Zsby5iaXRzLmV4cCAgPSBYIyNfZTsJCQkJCVwKKyAgICBfZmxvLmJpdHMuc2lnbiA9IFgjI19zOwkJCQkJXAorCQkJCQkJCQlcCisgICAgKHZhbCkgPSBfZmxvLmZsdDsJCQkJCQlcCisgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgRlBfUEFDS19SQVdfRVAoZnMsIHZhbCwgWCkJCQkJXAorICBkbyB7CQkJCQkJCQlcCisgICAgaWYgKCFGUF9JTkhJQklUX1JFU1VMVFMpCQkJCQlcCisgICAgICB7CQkJCQkJCQlcCisJdW5pb24gX0ZQX1VOSU9OX0UgKl9mbG8gPQkJCQlcCisJICAodW5pb24gX0ZQX1VOSU9OX0UgKikodmFsKTsJCQkJXAorCQkJCQkJCQlcCisJaWYgKFgjI19lKSBYIyNfZjAgfD0gX0ZQX0lNUExCSVRfRTsJCQlcCisJZWxzZSBYIyNfZjAgJj0gfihfRlBfSU1QTEJJVF9FKTsJCQlcCisJX2Zsby0+Yml0cy5mcmFjID0gWCMjX2YwOwkJCQlcCisJX2Zsby0+Yml0cy5leHAgID0gWCMjX2U7CQkJCVwKKwlfZmxvLT5iaXRzLnNpZ24gPSBYIyNfczsJCQkJXAorICAgICAgfQkJCQkJCQkJXAorICB9IHdoaWxlICgwKQorCisKKyNkZWZpbmUgRlBfVU5QQUNLX0UoWCx2YWwpCQlcCisgIGRvIHsJCQkJCVwKKyAgICBGUF9VTlBBQ0tfUkFXX0UoWCx2YWwpOwkJXAorICAgIF9GUF9VTlBBQ0tfQ0FOT05JQ0FMKEUsMixYKTsJXAorICB9IHdoaWxlICgwKQorCisjZGVmaW5lIEZQX1VOUEFDS19FUChYLHZhbCkJCVwKKyAgZG8gewkJCQkJXAorICAgIEZQX1VOUEFDS19SQVdfRVAoWCx2YWwpOwkJXAorICAgIF9GUF9VTlBBQ0tfQ0FOT05JQ0FMKEUsMixYKTsJXAorICB9IHdoaWxlICgwKQorCisjZGVmaW5lIEZQX1BBQ0tfRSh2YWwsWCkJCVwKKyAgZG8gewkJCQkJXAorICAgIF9GUF9QQUNLX0NBTk9OSUNBTChFLDIsWCk7CQlcCisgICAgRlBfUEFDS19SQVdfRSh2YWwsWCk7CQlcCisgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgRlBfUEFDS19FUCh2YWwsWCkJCVwKKyAgZG8gewkJCQkJXAorICAgIF9GUF9QQUNLX0NBTk9OSUNBTChFLDIsWCk7CQlcCisgICAgRlBfUEFDS19SQVdfRVAodmFsLFgpOwkJXAorICB9IHdoaWxlICgwKQorCisjZGVmaW5lIEZQX0lTU0lHTkFOX0UoWCkJX0ZQX0lTU0lHTkFOKEUsMixYKQorI2RlZmluZSBGUF9ORUdfRShSLFgpCQlfRlBfTkVHKEUsMixSLFgpCisjZGVmaW5lIEZQX0FERF9FKFIsWCxZKQkJX0ZQX0FERChFLDIsUixYLFkpCisjZGVmaW5lIEZQX1NVQl9FKFIsWCxZKQkJX0ZQX1NVQihFLDIsUixYLFkpCisjZGVmaW5lIEZQX01VTF9FKFIsWCxZKQkJX0ZQX01VTChFLDIsUixYLFkpCisjZGVmaW5lIEZQX0RJVl9FKFIsWCxZKQkJX0ZQX0RJVihFLDIsUixYLFkpCisjZGVmaW5lIEZQX1NRUlRfRShSLFgpCQlfRlBfU1FSVChFLDIsUixYKQorCisvKgorICogU3F1YXJlIHJvb3QgYWxnb3JpdGhtczoKKyAqIFdlIGhhdmUganVzdCBvbmUgcmlnaHQgbm93LCBtYXliZSBOZXd0b24gYXBwcm94aW1hdGlvbgorICogc2hvdWxkIGJlIGFkZGVkIGZvciB0aG9zZSBtYWNoaW5lcyB3aGVyZSBkaXZpc2lvbiBpcyBmYXN0LgorICogV2Ugb3B0aW1pemUgaXQgYnkgZG9pbmcgbW9zdCBvZiB0aGUgY2FsY3VsYXRpb25zCisgKiBpbiBvbmUgVVd0eXBlIHJlZ2lzdGVycyBpbnN0ZWFkIG9mIHR3bywgYWx0aG91Z2ggd2UgZG9uJ3QKKyAqIGhhdmUgdG8uCisgKi8KKyNkZWZpbmUgX0ZQX1NRUlRfTUVBVF9FKFIsIFMsIFQsIFgsIHEpCQkJXAorICBkbyB7CQkJCQkJCVwKKyAgICBxID0gKF9GUF9XX1RZUEUpMSA8PCAoX0ZQX1dfVFlQRV9TSVpFIC0gMSk7CQlcCisgICAgX0ZQX0ZSQUNfU1JMXzIoWCwgKF9GUF9XT1JLQklUUykpOwkJCVwKKyAgICB3aGlsZSAocSkJCQkJCQlcCisgICAgICB7CQkJCQkJCVwKKyAgICAgICAgVCMjX2YwID0gUyMjX2YwICsgcTsJCQkJXAorICAgICAgICBpZiAoVCMjX2YwIDw9IFgjI19mMCkJCQkJXAorICAgICAgICAgIHsJCQkJCQlcCisgICAgICAgICAgICBTIyNfZjAgPSBUIyNfZjAgKyBxOwkJCVwKKyAgICAgICAgICAgIFgjI19mMCAtPSBUIyNfZjA7CQkJCVwKKyAgICAgICAgICAgIFIjI19mMCArPSBxOwkJCQlcCisgICAgICAgICAgfQkJCQkJCVwKKyAgICAgICAgX0ZQX0ZSQUNfU0xMXzEoWCwgMSk7CQkJCVwKKyAgICAgICAgcSA+Pj0gMTsJCQkJCVwKKyAgICAgIH0JCQkJCQkJXAorICAgIF9GUF9GUkFDX1NMTF8yKFIsIChfRlBfV09SS0JJVFMpKTsJCQlcCisgICAgaWYgKFgjI19mMCkJCQkJCQlcCisgICAgICB7CQkJCQkJCVwKKwlpZiAoUyMjX2YwIDwgWCMjX2YwKQkJCQlcCisJICBSIyNfZjAgfD0gX0ZQX1dPUktfUk9VTkQ7CQkJXAorCVIjI19mMCB8PSBfRlBfV09SS19TVElDS1k7CQkJXAorICAgICAgfQkJCQkJCQlcCisgIH0gd2hpbGUgKDApCisgCisjZGVmaW5lIEZQX0NNUF9FKHIsWCxZLHVuKQlfRlBfQ01QKEUsMixyLFgsWSx1bikKKyNkZWZpbmUgRlBfQ01QX0VRX0UocixYLFkpCV9GUF9DTVBfRVEoRSwyLHIsWCxZKQorCisjZGVmaW5lIEZQX1RPX0lOVF9FKHIsWCxyc3oscnNnKQlfRlBfVE9fSU5UKEUsMixyLFgscnN6LHJzZykKKyNkZWZpbmUgRlBfVE9fSU5UX1JPVU5EX0UocixYLHJzeixyc2cpCV9GUF9UT19JTlRfUk9VTkQoRSwyLHIsWCxyc3oscnNnKQorI2RlZmluZSBGUF9GUk9NX0lOVF9FKFgscixycyxydCkJX0ZQX0ZST01fSU5UKEUsMixYLHIscnMscnQpCisKKyNkZWZpbmUgX0ZQX0ZSQUNfSElHSF9FKFgpCShYIyNfZjEpCisjZGVmaW5lIF9GUF9GUkFDX0hJR0hfUkFXX0UoWCkJKFgjI19mMCkKKworI2VuZGlmIC8qIG5vdCBfRlBfV19UWVBFX1NJWkUgPCA2NCAqLworCisjZW5kaWYgLyogX19NQVRIX0VNVV9FWFRFTkRFRF9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWF0aC1lbXUvb3AtMS5oIGIvaW5jbHVkZS9tYXRoLWVtdS9vcC0xLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JlM2JiNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbWF0aC1lbXUvb3AtMS5oCkBAIC0wLDAgKzEsMzAzIEBACisvKiBTb2Z0d2FyZSBmbG9hdGluZy1wb2ludCBlbXVsYXRpb24uCisgICBCYXNpYyBvbmUtd29yZCBmcmFjdGlvbiBkZWNsYXJhdGlvbiBhbmQgbWFuaXB1bGF0aW9uLgorICAgQ29weXJpZ2h0IChDKSAxOTk3LDE5OTgsMTk5OSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorICAgQ29udHJpYnV0ZWQgYnkgUmljaGFyZCBIZW5kZXJzb24gKHJ0aEBjeWdudXMuY29tKSwKKwkJICBKYWt1YiBKZWxpbmVrIChqakB1bHRyYS5saW51eC5jeiksCisJCSAgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUByZWRoYXQuY29tKSBhbmQKKwkJICBQZXRlciBNYXlkZWxsIChwbWF5ZGVsbEBjaGlhcmsuZ3JlZW5lbmQub3JnLnVrKS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyAgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZgorICAgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisKKyNpZm5kZWYgICAgX19NQVRIX0VNVV9PUF8xX0hfXworI2RlZmluZSAgICBfX01BVEhfRU1VX09QXzFfSF9fCisKKyNkZWZpbmUgX0ZQX0ZSQUNfREVDTF8xKFgpCV9GUF9XX1RZUEUgWCMjX2Y9MAorI2RlZmluZSBfRlBfRlJBQ19DT1BZXzEoRCxTKQkoRCMjX2YgPSBTIyNfZikKKyNkZWZpbmUgX0ZQX0ZSQUNfU0VUXzEoWCxJKQkoWCMjX2YgPSBJKQorI2RlZmluZSBfRlBfRlJBQ19ISUdIXzEoWCkJKFgjI19mKQorI2RlZmluZSBfRlBfRlJBQ19MT1dfMShYKQkoWCMjX2YpCisjZGVmaW5lIF9GUF9GUkFDX1dPUkRfMShYLHcpCShYIyNfZikKKworI2RlZmluZSBfRlBfRlJBQ19BRERJXzEoWCxJKQkoWCMjX2YgKz0gSSkKKyNkZWZpbmUgX0ZQX0ZSQUNfU0xMXzEoWCxOKQkJCVwKKyAgZG8gewkJCQkJCVwKKyAgICBpZiAoX19idWlsdGluX2NvbnN0YW50X3AoTikgJiYgKE4pID09IDEpCVwKKyAgICAgIFgjI19mICs9IFgjI19mOwkJCQlcCisgICAgZWxzZQkJCQkJXAorICAgICAgWCMjX2YgPDw9IChOKTsJCQkJXAorICB9IHdoaWxlICgwKQorI2RlZmluZSBfRlBfRlJBQ19TUkxfMShYLE4pCShYIyNfZiA+Pj0gTikKKworLyogUmlnaHQgc2hpZnQgd2l0aCBzdGlja3ktbHNiLiAgKi8KKyNkZWZpbmUgX0ZQX0ZSQUNfU1JTXzEoWCxOLHN6KQlfX0ZQX0ZSQUNfU1JTXzEoWCMjX2YsIE4sIHN6KQorCisjZGVmaW5lIF9fRlBfRlJBQ19TUlNfMShYLE4sc3opCQkJCQkJXAorICAgKFggPSAoWCA+PiAoTikgfCAoX19idWlsdGluX2NvbnN0YW50X3AoTikgJiYgKE4pID09IDEJCVwKKwkJICAgICA/IFggJiAxIDogKFggPDwgKF9GUF9XX1RZUEVfU0laRSAtIChOKSkpICE9IDApKSkKKworI2RlZmluZSBfRlBfRlJBQ19BRERfMShSLFgsWSkJKFIjI19mID0gWCMjX2YgKyBZIyNfZikKKyNkZWZpbmUgX0ZQX0ZSQUNfU1VCXzEoUixYLFkpCShSIyNfZiA9IFgjI19mIC0gWSMjX2YpCisjZGVmaW5lIF9GUF9GUkFDX0RFQ18xKFgsWSkJKFgjI19mIC09IFkjI19mKQorI2RlZmluZSBfRlBfRlJBQ19DTFpfMSh6LCBYKQlfX0ZQX0NMWih6LCBYIyNfZikKKworLyogUHJlZGljYXRlcyAqLworI2RlZmluZSBfRlBfRlJBQ19ORUdQXzEoWCkJKChfRlBfV1NfVFlQRSlYIyNfZiA8IDApCisjZGVmaW5lIF9GUF9GUkFDX1pFUk9QXzEoWCkJKFgjI19mID09IDApCisjZGVmaW5lIF9GUF9GUkFDX09WRVJQXzEoZnMsWCkJKFgjI19mICYgX0ZQX09WRVJGTE9XXyMjZnMpCisjZGVmaW5lIF9GUF9GUkFDX0NMRUFSX09WRVJQXzEoZnMsWCkJKFgjI19mICY9IH5fRlBfT1ZFUkZMT1dfIyNmcykKKyNkZWZpbmUgX0ZQX0ZSQUNfRVFfMShYLCBZKQkoWCMjX2YgPT0gWSMjX2YpCisjZGVmaW5lIF9GUF9GUkFDX0dFXzEoWCwgWSkJKFgjI19mID49IFkjI19mKQorI2RlZmluZSBfRlBfRlJBQ19HVF8xKFgsIFkpCShYIyNfZiA+IFkjI19mKQorCisjZGVmaW5lIF9GUF9aRVJPRlJBQ18xCQkwCisjZGVmaW5lIF9GUF9NSU5GUkFDXzEJCTEKKyNkZWZpbmUgX0ZQX01BWEZSQUNfMQkJKH4oX0ZQX1dTX1RZUEUpMCkKKworLyoKKyAqIFVucGFjayB0aGUgcmF3IGJpdHMgb2YgYSBuYXRpdmUgZnAgdmFsdWUuICBEbyBub3QgY2xhc3NpZnkgb3IKKyAqIG5vcm1hbGl6ZSB0aGUgZGF0YS4KKyAqLworCisjZGVmaW5lIF9GUF9VTlBBQ0tfUkFXXzEoZnMsIFgsIHZhbCkJCQkJXAorICBkbyB7CQkJCQkJCQlcCisgICAgdW5pb24gX0ZQX1VOSU9OXyMjZnMgX2ZsbzsgX2Zsby5mbHQgPSAodmFsKTsJCVwKKwkJCQkJCQkJXAorICAgIFgjI19mID0gX2Zsby5iaXRzLmZyYWM7CQkJCQlcCisgICAgWCMjX2UgPSBfZmxvLmJpdHMuZXhwOwkJCQkJXAorICAgIFgjI19zID0gX2Zsby5iaXRzLnNpZ247CQkJCQlcCisgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgX0ZQX1VOUEFDS19SQVdfMV9QKGZzLCBYLCB2YWwpCQkJCVwKKyAgZG8gewkJCQkJCQkJXAorICAgIHVuaW9uIF9GUF9VTklPTl8jI2ZzICpfZmxvID0JCQkJXAorICAgICAgKHVuaW9uIF9GUF9VTklPTl8jI2ZzICopKHZhbCk7CQkJCVwKKwkJCQkJCQkJXAorICAgIFgjI19mID0gX2Zsby0+Yml0cy5mcmFjOwkJCQkJXAorICAgIFgjI19lID0gX2Zsby0+Yml0cy5leHA7CQkJCQlcCisgICAgWCMjX3MgPSBfZmxvLT5iaXRzLnNpZ247CQkJCQlcCisgIH0gd2hpbGUgKDApCisKKy8qCisgKiBSZXBhY2sgdGhlIHJhdyBiaXRzIG9mIGEgbmF0aXZlIGZwIHZhbHVlLgorICovCisKKyNkZWZpbmUgX0ZQX1BBQ0tfUkFXXzEoZnMsIHZhbCwgWCkJCQkJXAorICBkbyB7CQkJCQkJCQlcCisgICAgdW5pb24gX0ZQX1VOSU9OXyMjZnMgX2ZsbzsJCQkJCVwKKwkJCQkJCQkJXAorICAgIF9mbG8uYml0cy5mcmFjID0gWCMjX2Y7CQkJCQlcCisgICAgX2Zsby5iaXRzLmV4cCAgPSBYIyNfZTsJCQkJCVwKKyAgICBfZmxvLmJpdHMuc2lnbiA9IFgjI19zOwkJCQkJXAorCQkJCQkJCQlcCisgICAgKHZhbCkgPSBfZmxvLmZsdDsJCQkJCQlcCisgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgX0ZQX1BBQ0tfUkFXXzFfUChmcywgdmFsLCBYKQkJCQlcCisgIGRvIHsJCQkJCQkJCVwKKyAgICB1bmlvbiBfRlBfVU5JT05fIyNmcyAqX2ZsbyA9CQkJCVwKKyAgICAgICh1bmlvbiBfRlBfVU5JT05fIyNmcyAqKSh2YWwpOwkJCQlcCisJCQkJCQkJCVwKKyAgICBfZmxvLT5iaXRzLmZyYWMgPSBYIyNfZjsJCQkJCVwKKyAgICBfZmxvLT5iaXRzLmV4cCAgPSBYIyNfZTsJCQkJCVwKKyAgICBfZmxvLT5iaXRzLnNpZ24gPSBYIyNfczsJCQkJCVwKKyAgfSB3aGlsZSAoMCkKKworCisvKgorICogTXVsdGlwbGljYXRpb24gYWxnb3JpdGhtczoKKyAqLworCisvKiBCYXNpYy4gIEFzc3VtaW5nIHRoZSBob3N0IHdvcmQgc2l6ZSBpcyA+PSAyKkZSQUNCSVRTLCB3ZSBjYW4gZG8gdGhlCisgICBtdWx0aXBsaWNhdGlvbiBpbW1lZGlhdGVseS4gICovCisKKyNkZWZpbmUgX0ZQX01VTF9NRUFUXzFfaW1tKHdmcmFjYml0cywgUiwgWCwgWSkJCQkJXAorICBkbyB7CQkJCQkJCQkJXAorICAgIFIjI19mID0gWCMjX2YgKiBZIyNfZjsJCQkJCQlcCisgICAgLyogTm9ybWFsaXplIHNpbmNlIHdlIGtub3cgd2hlcmUgdGhlIG1zYiBvZiB0aGUgbXVsdGlwbGljYW5kcwlcCisgICAgICAgd2VyZSAoYml0IEIpLCB3ZSBrbm93IHRoYXQgdGhlIG1zYiBvZiB0aGUgb2YgdGhlIHByb2R1Y3QgaXMJXAorICAgICAgIGF0IGVpdGhlciAyQiBvciAyQi0xLiAgKi8JCQkJCVwKKyAgICBfRlBfRlJBQ19TUlNfMShSLCB3ZnJhY2JpdHMtMSwgMip3ZnJhY2JpdHMpOwkJCVwKKyAgfSB3aGlsZSAoMCkKKworLyogR2l2ZW4gYSAxVyAqIDFXID0+IDJXIHByaW1pdGl2ZSwgZG8gdGhlIGV4dGVuZGVkIG11bHRpcGxpY2F0aW9uLiAgKi8KKworI2RlZmluZSBfRlBfTVVMX01FQVRfMV93aWRlKHdmcmFjYml0cywgUiwgWCwgWSwgZG9pdCkJCQlcCisgIGRvIHsJCQkJCQkJCQlcCisgICAgX0ZQX1dfVFlQRSBfWl9mMCwgX1pfZjE7CQkJCQkJXAorICAgIGRvaXQoX1pfZjEsIF9aX2YwLCBYIyNfZiwgWSMjX2YpOwkJCQkJXAorICAgIC8qIE5vcm1hbGl6ZSBzaW5jZSB3ZSBrbm93IHdoZXJlIHRoZSBtc2Igb2YgdGhlIG11bHRpcGxpY2FuZHMJXAorICAgICAgIHdlcmUgKGJpdCBCKSwgd2Uga25vdyB0aGF0IHRoZSBtc2Igb2YgdGhlIG9mIHRoZSBwcm9kdWN0IGlzCVwKKyAgICAgICBhdCBlaXRoZXIgMkIgb3IgMkItMS4gICovCQkJCQlcCisgICAgX0ZQX0ZSQUNfU1JTXzIoX1osIHdmcmFjYml0cy0xLCAyKndmcmFjYml0cyk7CQkJXAorICAgIFIjI19mID0gX1pfZjA7CQkJCQkJCVwKKyAgfSB3aGlsZSAoMCkKKworLyogRmluYWxseSwgYSBzaW1wbGUgd2lkZW5pbmcgbXVsdGlwbHkgYWxnb3JpdGhtLiAgV2hhdCBmdW4hICAqLworCisjZGVmaW5lIF9GUF9NVUxfTUVBVF8xX2hhcmQod2ZyYWNiaXRzLCBSLCBYLCBZKQkJCQlcCisgIGRvIHsJCQkJCQkJCQlcCisgICAgX0ZQX1dfVFlQRSBfeGgsIF94bCwgX3loLCBfeWwsIF96X2YwLCBfel9mMSwgX2FfZjAsIF9hX2YxOwkJXAorCQkJCQkJCQkJXAorICAgIC8qIHNwbGl0IHRoZSB3b3JkcyBpbiBoYWxmICovCQkJCQlcCisgICAgX3hoID0gWCMjX2YgPj4gKF9GUF9XX1RZUEVfU0laRS8yKTsJCQkJCVwKKyAgICBfeGwgPSBYIyNfZiAmICgoKF9GUF9XX1RZUEUpMSA8PCAoX0ZQX1dfVFlQRV9TSVpFLzIpKSAtIDEpOwkJXAorICAgIF95aCA9IFkjI19mID4+IChfRlBfV19UWVBFX1NJWkUvMik7CQkJCQlcCisgICAgX3lsID0gWSMjX2YgJiAoKChfRlBfV19UWVBFKTEgPDwgKF9GUF9XX1RZUEVfU0laRS8yKSkgLSAxKTsJCVwKKwkJCQkJCQkJCVwKKyAgICAvKiBtdWx0aXBseSB0aGUgcGllY2VzICovCQkJCQkJXAorICAgIF96X2YwID0gX3hsICogX3lsOwkJCQkJCQlcCisgICAgX2FfZjAgPSBfeGggKiBfeWw7CQkJCQkJCVwKKyAgICBfYV9mMSA9IF94bCAqIF95aDsJCQkJCQkJXAorICAgIF96X2YxID0gX3hoICogX3loOwkJCQkJCQlcCisJCQkJCQkJCQlcCisgICAgLyogcmVhc3NlbWJsZSBpbnRvIHR3byBmdWxsIHdvcmRzICovCQkJCVwKKyAgICBpZiAoKF9hX2YwICs9IF9hX2YxKSA8IF9hX2YxKQkJCQkJXAorICAgICAgX3pfZjEgKz0gKF9GUF9XX1RZUEUpMSA8PCAoX0ZQX1dfVFlQRV9TSVpFLzIpOwkJCVwKKyAgICBfYV9mMSA9IF9hX2YwID4+IChfRlBfV19UWVBFX1NJWkUvMik7CQkJCVwKKyAgICBfYV9mMCA9IF9hX2YwIDw8IChfRlBfV19UWVBFX1NJWkUvMik7CQkJCVwKKyAgICBfRlBfRlJBQ19BRERfMihfeiwgX3osIF9hKTsJCQkJCQlcCisJCQkJCQkJCQlcCisgICAgLyogbm9ybWFsaXplICovCQkJCQkJCVwKKyAgICBfRlBfRlJBQ19TUlNfMihfeiwgd2ZyYWNiaXRzIC0gMSwgMip3ZnJhY2JpdHMpOwkJCVwKKyAgICBSIyNfZiA9IF96X2YwOwkJCQkJCQlcCisgIH0gd2hpbGUgKDApCisKKworLyoKKyAqIERpdmlzaW9uIGFsZ29yaXRobXM6CisgKi8KKworLyogQmFzaWMuICBBc3N1bWluZyB0aGUgaG9zdCB3b3JkIHNpemUgaXMgPj0gMipGUkFDQklUUywgd2UgY2FuIGRvIHRoZQorICAgZGl2aXNpb24gaW1tZWRpYXRlbHkuICBHaXZlIHRoaXMgbWFjcm8gZWl0aGVyIF9GUF9ESVZfSEVMUF9pbW0gZm9yCisgICBDIHByaW1pdGl2ZXMgb3IgX0ZQX0RJVl9IRUxQX2xkaXYgZm9yIHRoZSBJU08gZnVuY3Rpb24uICBXaGljaCB5b3UKKyAgIGNob29zZSB3aWxsIGRlcGVuZCBvbiB3aGF0IHRoZSBjb21waWxlciBkb2VzIHdpdGggZGl2cmVtNC4gICovCisKKyNkZWZpbmUgX0ZQX0RJVl9NRUFUXzFfaW1tKGZzLCBSLCBYLCBZLCBkb2l0KQkJXAorICBkbyB7CQkJCQkJCVwKKyAgICBfRlBfV19UWVBFIF9xLCBfcjsJCQkJCVwKKyAgICBYIyNfZiA8PD0gKFgjI19mIDwgWSMjX2YJCQkJXAorCSAgICAgICA/IFIjI19lLS0sIF9GUF9XRlJBQ0JJVFNfIyNmcwkJXAorCSAgICAgICA6IF9GUF9XRlJBQ0JJVFNfIyNmcyAtIDEpOwkJXAorICAgIGRvaXQoX3EsIF9yLCBYIyNfZiwgWSMjX2YpOwkJCQlcCisgICAgUiMjX2YgPSBfcSB8IChfciAhPSAwKTsJCQkJXAorICB9IHdoaWxlICgwKQorCisvKiBHQ0MncyBsb25nbG9uZy5oIGRlZmluZXMgYSAyVyAvIDFXID0+ICgxVywxVykgcHJpbWl0aXZlIHVkaXZfcXJubmQKKyAgIHRoYXQgbWF5IGJlIHVzZWZ1bCBpbiB0aGlzIHNpdHVhdGlvbi4gIFRoaXMgZmlyc3QgaXMgZm9yIGEgcHJpbWl0aXZlCisgICB0aGF0IHJlcXVpcmVzIG5vcm1hbGl6YXRpb24sIHRoZSBzZWNvbmQgZm9yIG9uZSB0aGF0IGRvZXMgbm90LiAgTG9vaworICAgZm9yIFVESVZfTkVFRFNfTk9STUFMSVpBVElPTiB0byB0ZWxsIHdoaWNoIHlvdXIgbWFjaGluZSBuZWVkcy4gICovCisKKyNkZWZpbmUgX0ZQX0RJVl9NRUFUXzFfdWRpdl9ub3JtKGZzLCBSLCBYLCBZKQkJCQlcCisgIGRvIHsJCQkJCQkJCQlcCisgICAgX0ZQX1dfVFlQRSBfbmgsIF9ubCwgX3EsIF9yLCBfeTsJCQkJCVwKKwkJCQkJCQkJCVwKKyAgICAvKiBOb3JtYWxpemUgWSAtLSBpLmUuIG1ha2UgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IHNldC4gICovCVwKKyAgICBfeSA9IFkjI19mIDw8IF9GUF9XRlJBQ1hCSVRTXyMjZnM7CQkJCQlcCisJCQkJCQkJCQlcCisgICAgLyogU2hpZnQgWCBvcCBjb3JyZXNwb25kaW5nbHkgaGlnaCwgdGhhdCBpcywgdXAgb25lIGZ1bGwgd29yZC4gICovCVwKKyAgICBpZiAoWCMjX2YgPCBZIyNfZikJCQkJCQkJXAorICAgICAgewkJCQkJCQkJCVwKKwlSIyNfZS0tOwkJCQkJCQlcCisJX25sID0gMDsJCQkJCQkJXAorCV9uaCA9IFgjI19mOwkJCQkJCQlcCisgICAgICB9CQkJCQkJCQkJXAorICAgIGVsc2UJCQkJCQkJCVwKKyAgICAgIHsJCQkJCQkJCQlcCisJX25sID0gWCMjX2YgPDwgKF9GUF9XX1RZUEVfU0laRSAtIDEpOwkJCQlcCisJX25oID0gWCMjX2YgPj4gMTsJCQkJCQlcCisgICAgICB9CQkJCQkJCQkJXAorICAgIAkJCQkJCQkJCVwKKyAgICB1ZGl2X3Fybm5kKF9xLCBfciwgX25oLCBfbmwsIF95KTsJCQkJCVwKKyAgICBSIyNfZiA9IF9xIHwgKF9yICE9IDApOwkJCQkJCVwKKyAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBfRlBfRElWX01FQVRfMV91ZGl2KGZzLCBSLCBYLCBZKQkJXAorICBkbyB7CQkJCQkJCVwKKyAgICBfRlBfV19UWVBFIF9uaCwgX25sLCBfcSwgX3I7CQkJXAorICAgIGlmIChYIyNfZiA8IFkjI19mKQkJCQkJXAorICAgICAgewkJCQkJCQlcCisJUiMjX2UtLTsJCQkJCVwKKwlfbmwgPSBYIyNfZiA8PCBfRlBfV0ZSQUNCSVRTXyMjZnM7CQlcCisJX25oID0gWCMjX2YgPj4gX0ZQX1dGUkFDWEJJVFNfIyNmczsJCVwKKyAgICAgIH0JCQkJCQkJXAorICAgIGVsc2UJCQkJCQlcCisgICAgICB7CQkJCQkJCVwKKwlfbmwgPSBYIyNfZiA8PCAoX0ZQX1dGUkFDQklUU18jI2ZzIC0gMSk7CVwKKwlfbmggPSBYIyNfZiA+PiAoX0ZQX1dGUkFDWEJJVFNfIyNmcyArIDEpOwlcCisgICAgICB9CQkJCQkJCVwKKyAgICB1ZGl2X3Fybm5kKF9xLCBfciwgX25oLCBfbmwsIFkjI19mKTsJCVwKKyAgICBSIyNfZiA9IF9xIHwgKF9yICE9IDApOwkJCQlcCisgIH0gd2hpbGUgKDApCisgIAorICAKKy8qCisgKiBTcXVhcmUgcm9vdCBhbGdvcml0aG1zOgorICogV2UgaGF2ZSBqdXN0IG9uZSByaWdodCBub3csIG1heWJlIE5ld3RvbiBhcHByb3hpbWF0aW9uCisgKiBzaG91bGQgYmUgYWRkZWQgZm9yIHRob3NlIG1hY2hpbmVzIHdoZXJlIGRpdmlzaW9uIGlzIGZhc3QuCisgKi8KKyAKKyNkZWZpbmUgX0ZQX1NRUlRfTUVBVF8xKFIsIFMsIFQsIFgsIHEpCQkJXAorICBkbyB7CQkJCQkJCVwKKyAgICB3aGlsZSAocSAhPSBfRlBfV09SS19ST1VORCkJCQkJXAorICAgICAgewkJCQkJCQlcCisgICAgICAgIFQjI19mID0gUyMjX2YgKyBxOwkJCQlcCisgICAgICAgIGlmIChUIyNfZiA8PSBYIyNfZikJCQkJXAorICAgICAgICAgIHsJCQkJCQlcCisgICAgICAgICAgICBTIyNfZiA9IFQjI19mICsgcTsJCQkJXAorICAgICAgICAgICAgWCMjX2YgLT0gVCMjX2Y7CQkJCVwKKyAgICAgICAgICAgIFIjI19mICs9IHE7CQkJCQlcCisgICAgICAgICAgfQkJCQkJCVwKKyAgICAgICAgX0ZQX0ZSQUNfU0xMXzEoWCwgMSk7CQkJCVwKKyAgICAgICAgcSA+Pj0gMTsJCQkJCVwKKyAgICAgIH0JCQkJCQkJXAorICAgIGlmIChYIyNfZikJCQkJCQlcCisgICAgICB7CQkJCQkJCVwKKwlpZiAoUyMjX2YgPCBYIyNfZikJCQkJXAorCSAgUiMjX2YgfD0gX0ZQX1dPUktfUk9VTkQ7CQkJXAorCVIjI19mIHw9IF9GUF9XT1JLX1NUSUNLWTsJCQlcCisgICAgICB9CQkJCQkJCVwKKyAgfSB3aGlsZSAoMCkKKworLyoKKyAqIEFzc2VtYmx5L2Rpc2Fzc2VtYmx5IGZvciBjb252ZXJ0aW5nIHRvL2Zyb20gaW50ZWdyYWwgdHlwZXMuICAKKyAqIE5vIHNoaWZ0aW5nIG9yIG92ZXJmbG93IGhhbmRsZWQgaGVyZS4KKyAqLworCisjZGVmaW5lIF9GUF9GUkFDX0FTU0VNQkxFXzEociwgWCwgcnNpemUpCShyID0gWCMjX2YpCisjZGVmaW5lIF9GUF9GUkFDX0RJU0FTU0VNQkxFXzEoWCwgciwgcnNpemUpCShYIyNfZiA9IHIpCisKKworLyoKKyAqIENvbnZlcnQgRlAgdmFsdWVzIGJldHdlZW4gd29yZCBzaXplcworICovCisKKyNkZWZpbmUgX0ZQX0ZSQUNfQ09OVl8xXzEoZGZzLCBzZnMsIEQsIFMpCQkJCVwKKyAgZG8gewkJCQkJCQkJCVwKKyAgICBEIyNfZiA9IFMjI19mOwkJCQkJCQlcCisgICAgaWYgKF9GUF9XRlJBQ0JJVFNfIyNzZnMgPiBfRlBfV0ZSQUNCSVRTXyMjZGZzKQkJCVwKKyAgICAgIHsJCQkJCQkJCQlcCisJaWYgKFMjI19jICE9IEZQX0NMU19OQU4pCQkJCQlcCisJICBfRlBfRlJBQ19TUlNfMShELCAoX0ZQX1dGUkFDQklUU18jI3Nmcy1fRlBfV0ZSQUNCSVRTXyMjZGZzKSwJXAorCQkJIF9GUF9XRlJBQ0JJVFNfIyNzZnMpOwkJCQlcCisJZWxzZQkJCQkJCQkJXAorCSAgX0ZQX0ZSQUNfU1JMXzEoRCwgKF9GUF9XRlJBQ0JJVFNfIyNzZnMtX0ZQX1dGUkFDQklUU18jI2RmcykpOwlcCisgICAgICB9CQkJCQkJCQkJXAorICAgIGVsc2UJCQkJCQkJCVwKKyAgICAgIEQjI19mIDw8PSBfRlBfV0ZSQUNCSVRTXyMjZGZzIC0gX0ZQX1dGUkFDQklUU18jI3NmczsJCVwKKyAgfSB3aGlsZSAoMCkKKworI2VuZGlmIC8qIF9fTUFUSF9FTVVfT1BfMV9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWF0aC1lbXUvb3AtMi5oIGIvaW5jbHVkZS9tYXRoLWVtdS9vcC0yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE5M2ZiMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbWF0aC1lbXUvb3AtMi5oCkBAIC0wLDAgKzEsNjEzIEBACisvKiBTb2Z0d2FyZSBmbG9hdGluZy1wb2ludCBlbXVsYXRpb24uCisgICBCYXNpYyB0d28td29yZCBmcmFjdGlvbiBkZWNsYXJhdGlvbiBhbmQgbWFuaXB1bGF0aW9uLgorICAgQ29weXJpZ2h0IChDKSAxOTk3LDE5OTgsMTk5OSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorICAgQ29udHJpYnV0ZWQgYnkgUmljaGFyZCBIZW5kZXJzb24gKHJ0aEBjeWdudXMuY29tKSwKKwkJICBKYWt1YiBKZWxpbmVrIChqakB1bHRyYS5saW51eC5jeiksCisJCSAgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUByZWRoYXQuY29tKSBhbmQKKwkJICBQZXRlciBNYXlkZWxsIChwbWF5ZGVsbEBjaGlhcmsuZ3JlZW5lbmQub3JnLnVrKS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyAgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZgorICAgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisKKyNpZm5kZWYgX19NQVRIX0VNVV9PUF8yX0hfXworI2RlZmluZSBfX01BVEhfRU1VX09QXzJfSF9fCisKKyNkZWZpbmUgX0ZQX0ZSQUNfREVDTF8yKFgpCV9GUF9XX1RZUEUgWCMjX2YwLCBYIyNfZjEKKyNkZWZpbmUgX0ZQX0ZSQUNfQ09QWV8yKEQsUykJKEQjI19mMCA9IFMjI19mMCwgRCMjX2YxID0gUyMjX2YxKQorI2RlZmluZSBfRlBfRlJBQ19TRVRfMihYLEkpCV9fRlBfRlJBQ19TRVRfMihYLCBJKQorI2RlZmluZSBfRlBfRlJBQ19ISUdIXzIoWCkJKFgjI19mMSkKKyNkZWZpbmUgX0ZQX0ZSQUNfTE9XXzIoWCkJKFgjI19mMCkKKyNkZWZpbmUgX0ZQX0ZSQUNfV09SRF8yKFgsdykJKFgjI19mIyN3KQorCisjZGVmaW5lIF9GUF9GUkFDX1NMTF8yKFgsTikJCQkJCQlcCisgIGRvIHsJCQkJCQkJCQlcCisgICAgaWYgKChOKSA8IF9GUF9XX1RZUEVfU0laRSkJCQkJCQlcCisgICAgICB7CQkJCQkJCQkJXAorCWlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChOKSAmJiAoTikgPT0gMSkgCQkJXAorCSAgewkJCQkJCQkJXAorCSAgICBYIyNfZjEgPSBYIyNfZjEgKyBYIyNfZjEgKyAoKChfRlBfV1NfVFlQRSkoWCMjX2YwKSkgPCAwKTsJXAorCSAgICBYIyNfZjAgKz0gWCMjX2YwOwkJCQkJCVwKKwkgIH0JCQkJCQkJCVwKKwllbHNlCQkJCQkJCQlcCisJICB7CQkJCQkJCQlcCisJICAgIFgjI19mMSA9IFgjI19mMSA8PCAoTikgfCBYIyNfZjAgPj4gKF9GUF9XX1RZUEVfU0laRSAtIChOKSk7CVwKKwkgICAgWCMjX2YwIDw8PSAoTik7CQkJCQkJXAorCSAgfQkJCQkJCQkJXAorICAgICAgfQkJCQkJCQkJCVwKKyAgICBlbHNlCQkJCQkJCQlcCisgICAgICB7CQkJCQkJCQkJXAorCVgjI19mMSA9IFgjI19mMCA8PCAoKE4pIC0gX0ZQX1dfVFlQRV9TSVpFKTsJCQlcCisJWCMjX2YwID0gMDsJCQkJCQkJXAorICAgICAgfQkJCQkJCQkJCVwKKyAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBfRlBfRlJBQ19TUkxfMihYLE4pCQkJCQkJXAorICBkbyB7CQkJCQkJCQkJXAorICAgIGlmICgoTikgPCBfRlBfV19UWVBFX1NJWkUpCQkJCQkJXAorICAgICAgewkJCQkJCQkJCVwKKwlYIyNfZjAgPSBYIyNfZjAgPj4gKE4pIHwgWCMjX2YxIDw8IChfRlBfV19UWVBFX1NJWkUgLSAoTikpOwlcCisJWCMjX2YxID4+PSAoTik7CQkJCQkJCVwKKyAgICAgIH0JCQkJCQkJCQlcCisgICAgZWxzZQkJCQkJCQkJXAorICAgICAgewkJCQkJCQkJCVwKKwlYIyNfZjAgPSBYIyNfZjEgPj4gKChOKSAtIF9GUF9XX1RZUEVfU0laRSk7CQkJXAorCVgjI19mMSA9IDA7CQkJCQkJCVwKKyAgICAgIH0JCQkJCQkJCQlcCisgIH0gd2hpbGUgKDApCisKKy8qIFJpZ2h0IHNoaWZ0IHdpdGggc3RpY2t5LWxzYi4gICovCisjZGVmaW5lIF9GUF9GUkFDX1NSU18yKFgsTixzeikJCQkJCQlcCisgIGRvIHsJCQkJCQkJCQlcCisgICAgaWYgKChOKSA8IF9GUF9XX1RZUEVfU0laRSkJCQkJCQlcCisgICAgICB7CQkJCQkJCQkJXAorCVgjI19mMCA9IChYIyNfZjEgPDwgKF9GUF9XX1RZUEVfU0laRSAtIChOKSkgfCBYIyNfZjAgPj4gKE4pIHwJXAorCQkgIChfX2J1aWx0aW5fY29uc3RhbnRfcChOKSAmJiAoTikgPT0gMQkJCVwKKwkJICAgPyBYIyNfZjAgJiAxCQkJCQkJXAorCQkgICA6IChYIyNfZjAgPDwgKF9GUF9XX1RZUEVfU0laRSAtIChOKSkpICE9IDApKTsJXAorCVgjI19mMSA+Pj0gKE4pOwkJCQkJCQlcCisgICAgICB9CQkJCQkJCQkJXAorICAgIGVsc2UJCQkJCQkJCVwKKyAgICAgIHsJCQkJCQkJCQlcCisJWCMjX2YwID0gKFgjI19mMSA+PiAoKE4pIC0gX0ZQX1dfVFlQRV9TSVpFKSB8CQkJXAorCQkoKChYIyNfZjEgPDwgKDIqX0ZQX1dfVFlQRV9TSVpFIC0gKE4pKSkgfCBYIyNfZjApICE9IDApKTsgXAorCVgjI19mMSA9IDA7CQkJCQkJCVwKKyAgICAgIH0JCQkJCQkJCQlcCisgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgX0ZQX0ZSQUNfQURESV8yKFgsSSkJXAorICBfX0ZQX0ZSQUNfQURESV8yKFgjI19mMSwgWCMjX2YwLCBJKQorCisjZGVmaW5lIF9GUF9GUkFDX0FERF8yKFIsWCxZKQlcCisgIF9fRlBfRlJBQ19BRERfMihSIyNfZjEsIFIjI19mMCwgWCMjX2YxLCBYIyNfZjAsIFkjI19mMSwgWSMjX2YwKQorCisjZGVmaW5lIF9GUF9GUkFDX1NVQl8yKFIsWCxZKQlcCisgIF9fRlBfRlJBQ19TVUJfMihSIyNfZjEsIFIjI19mMCwgWCMjX2YxLCBYIyNfZjAsIFkjI19mMSwgWSMjX2YwKQorCisjZGVmaW5lIF9GUF9GUkFDX0RFQ18yKFgsWSkJXAorICBfX0ZQX0ZSQUNfREVDXzIoWCMjX2YxLCBYIyNfZjAsIFkjI19mMSwgWSMjX2YwKQorCisjZGVmaW5lIF9GUF9GUkFDX0NMWl8yKFIsWCkJXAorICBkbyB7CQkJCVwKKyAgICBpZiAoWCMjX2YxKQkJCVwKKyAgICAgIF9fRlBfQ0xaKFIsWCMjX2YxKTsJXAorICAgIGVsc2UgCQkJXAorICAgIHsJCQkJXAorICAgICAgX19GUF9DTFooUixYIyNfZjApOwlcCisgICAgICBSICs9IF9GUF9XX1RZUEVfU0laRTsJXAorICAgIH0JCQkJXAorICB9IHdoaWxlKDApCisKKy8qIFByZWRpY2F0ZXMgKi8KKyNkZWZpbmUgX0ZQX0ZSQUNfTkVHUF8yKFgpCSgoX0ZQX1dTX1RZUEUpWCMjX2YxIDwgMCkKKyNkZWZpbmUgX0ZQX0ZSQUNfWkVST1BfMihYKQkoKFgjI19mMSB8IFgjI19mMCkgPT0gMCkKKyNkZWZpbmUgX0ZQX0ZSQUNfT1ZFUlBfMihmcyxYKQkoX0ZQX0ZSQUNfSElHSF8jI2ZzKFgpICYgX0ZQX09WRVJGTE9XXyMjZnMpCisjZGVmaW5lIF9GUF9GUkFDX0NMRUFSX09WRVJQXzIoZnMsWCkJKF9GUF9GUkFDX0hJR0hfIyNmcyhYKSAmPSB+X0ZQX09WRVJGTE9XXyMjZnMpCisjZGVmaW5lIF9GUF9GUkFDX0VRXzIoWCwgWSkJKFgjI19mMSA9PSBZIyNfZjEgJiYgWCMjX2YwID09IFkjI19mMCkKKyNkZWZpbmUgX0ZQX0ZSQUNfR1RfMihYLCBZKQlcCisgIChYIyNfZjEgPiBZIyNfZjEgfHwgKFgjI19mMSA9PSBZIyNfZjEgJiYgWCMjX2YwID4gWSMjX2YwKSkKKyNkZWZpbmUgX0ZQX0ZSQUNfR0VfMihYLCBZKQlcCisgIChYIyNfZjEgPiBZIyNfZjEgfHwgKFgjI19mMSA9PSBZIyNfZjEgJiYgWCMjX2YwID49IFkjI19mMCkpCisKKyNkZWZpbmUgX0ZQX1pFUk9GUkFDXzIJCTAsIDAKKyNkZWZpbmUgX0ZQX01JTkZSQUNfMgkJMCwgMQorI2RlZmluZSBfRlBfTUFYRlJBQ18yCQkofihfRlBfV1NfVFlQRSkwKSwgKH4oX0ZQX1dTX1RZUEUpMCkKKworLyoKKyAqIEludGVybmFscyAKKyAqLworCisjZGVmaW5lIF9fRlBfRlJBQ19TRVRfMihYLEkxLEkwKQkoWCMjX2YwID0gSTAsIFgjI19mMSA9IEkxKQorCisjZGVmaW5lIF9fRlBfQ0xaXzIoUiwgeGgsIHhsKQlcCisgIGRvIHsJCQkJXAorICAgIGlmICh4aCkJCQlcCisgICAgICBfX0ZQX0NMWihSLHhoKTsJCVwKKyAgICBlbHNlIAkJCVwKKyAgICB7CQkJCVwKKyAgICAgIF9fRlBfQ0xaKFIseGwpOwkJXAorICAgICAgUiArPSBfRlBfV19UWVBFX1NJWkU7CVwKKyAgICB9CQkJCVwKKyAgfSB3aGlsZSgwKQorCisjaWYgMAorCisjaWZuZGVmIF9fRlBfRlJBQ19BRERJXzIKKyNkZWZpbmUgX19GUF9GUkFDX0FERElfMih4aCwgeGwsIGkpCVwKKyAgKHhoICs9ICgoeGwgKz0gaSkgPCBpKSkKKyNlbmRpZgorI2lmbmRlZiBfX0ZQX0ZSQUNfQUREXzIKKyNkZWZpbmUgX19GUF9GUkFDX0FERF8yKHJoLCBybCwgeGgsIHhsLCB5aCwgeWwpCVwKKyAgKHJoID0geGggKyB5aCArICgocmwgPSB4bCArIHlsKSA8IHhsKSkKKyNlbmRpZgorI2lmbmRlZiBfX0ZQX0ZSQUNfU1VCXzIKKyNkZWZpbmUgX19GUF9GUkFDX1NVQl8yKHJoLCBybCwgeGgsIHhsLCB5aCwgeWwpCVwKKyAgKHJoID0geGggLSB5aCAtICgocmwgPSB4bCAtIHlsKSA+IHhsKSkKKyNlbmRpZgorI2lmbmRlZiBfX0ZQX0ZSQUNfREVDXzIKKyNkZWZpbmUgX19GUF9GUkFDX0RFQ18yKHhoLCB4bCwgeWgsIHlsKQlcCisgIGRvIHsJCQkJCVwKKyAgICBVV3R5cGUgX3QgPSB4bDsJCQlcCisgICAgeGggLT0geWggKyAoKHhsIC09IHlsKSA+IF90KTsJXAorICB9IHdoaWxlICgwKQorI2VuZGlmCisKKyNlbHNlCisKKyN1bmRlZiBfX0ZQX0ZSQUNfQURESV8yCisjZGVmaW5lIF9fRlBfRlJBQ19BRERJXzIoeGgsIHhsLCBpKQlhZGRfc3NhYWFhKHhoLCB4bCwgeGgsIHhsLCAwLCBpKQorI3VuZGVmIF9fRlBfRlJBQ19BRERfMgorI2RlZmluZSBfX0ZQX0ZSQUNfQUREXzIJCQlhZGRfc3NhYWFhCisjdW5kZWYgX19GUF9GUkFDX1NVQl8yCisjZGVmaW5lIF9fRlBfRlJBQ19TVUJfMgkJCXN1Yl9kZG1tc3MKKyN1bmRlZiBfX0ZQX0ZSQUNfREVDXzIKKyNkZWZpbmUgX19GUF9GUkFDX0RFQ18yKHhoLCB4bCwgeWgsIHlsKQlzdWJfZGRtbXNzKHhoLCB4bCwgeGgsIHhsLCB5aCwgeWwpCisKKyNlbmRpZgorCisvKgorICogVW5wYWNrIHRoZSByYXcgYml0cyBvZiBhIG5hdGl2ZSBmcCB2YWx1ZS4gIERvIG5vdCBjbGFzc2lmeSBvcgorICogbm9ybWFsaXplIHRoZSBkYXRhLgorICovCisKKyNkZWZpbmUgX0ZQX1VOUEFDS19SQVdfMihmcywgWCwgdmFsKQkJCVwKKyAgZG8gewkJCQkJCQlcCisgICAgdW5pb24gX0ZQX1VOSU9OXyMjZnMgX2ZsbzsgX2Zsby5mbHQgPSAodmFsKTsJXAorCQkJCQkJCVwKKyAgICBYIyNfZjAgPSBfZmxvLmJpdHMuZnJhYzA7CQkJCVwKKyAgICBYIyNfZjEgPSBfZmxvLmJpdHMuZnJhYzE7CQkJCVwKKyAgICBYIyNfZSAgPSBfZmxvLmJpdHMuZXhwOwkJCQlcCisgICAgWCMjX3MgID0gX2Zsby5iaXRzLnNpZ247CQkJCVwKKyAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBfRlBfVU5QQUNLX1JBV18yX1AoZnMsIFgsIHZhbCkJCQlcCisgIGRvIHsJCQkJCQkJXAorICAgIHVuaW9uIF9GUF9VTklPTl8jI2ZzICpfZmxvID0JCQlcCisgICAgICAodW5pb24gX0ZQX1VOSU9OXyMjZnMgKikodmFsKTsJCQlcCisJCQkJCQkJXAorICAgIFgjI19mMCA9IF9mbG8tPmJpdHMuZnJhYzA7CQkJCVwKKyAgICBYIyNfZjEgPSBfZmxvLT5iaXRzLmZyYWMxOwkJCQlcCisgICAgWCMjX2UgID0gX2Zsby0+Yml0cy5leHA7CQkJCVwKKyAgICBYIyNfcyAgPSBfZmxvLT5iaXRzLnNpZ247CQkJCVwKKyAgfSB3aGlsZSAoMCkKKworCisvKgorICogUmVwYWNrIHRoZSByYXcgYml0cyBvZiBhIG5hdGl2ZSBmcCB2YWx1ZS4KKyAqLworCisjZGVmaW5lIF9GUF9QQUNLX1JBV18yKGZzLCB2YWwsIFgpCQkJXAorICBkbyB7CQkJCQkJCVwKKyAgICB1bmlvbiBfRlBfVU5JT05fIyNmcyBfZmxvOwkJCQlcCisJCQkJCQkJXAorICAgIF9mbG8uYml0cy5mcmFjMCA9IFgjI19mMDsJCQkJXAorICAgIF9mbG8uYml0cy5mcmFjMSA9IFgjI19mMTsJCQkJXAorICAgIF9mbG8uYml0cy5leHAgICA9IFgjI19lOwkJCQlcCisgICAgX2Zsby5iaXRzLnNpZ24gID0gWCMjX3M7CQkJCVwKKwkJCQkJCQlcCisgICAgKHZhbCkgPSBfZmxvLmZsdDsJCQkJCVwKKyAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBfRlBfUEFDS19SQVdfMl9QKGZzLCB2YWwsIFgpCQkJXAorICBkbyB7CQkJCQkJCVwKKyAgICB1bmlvbiBfRlBfVU5JT05fIyNmcyAqX2ZsbyA9CQkJXAorICAgICAgKHVuaW9uIF9GUF9VTklPTl8jI2ZzICopKHZhbCk7CQkJXAorCQkJCQkJCVwKKyAgICBfZmxvLT5iaXRzLmZyYWMwID0gWCMjX2YwOwkJCQlcCisgICAgX2Zsby0+Yml0cy5mcmFjMSA9IFgjI19mMTsJCQkJXAorICAgIF9mbG8tPmJpdHMuZXhwICAgPSBYIyNfZTsJCQkJXAorICAgIF9mbG8tPmJpdHMuc2lnbiAgPSBYIyNfczsJCQkJXAorICB9IHdoaWxlICgwKQorCisKKy8qCisgKiBNdWx0aXBsaWNhdGlvbiBhbGdvcml0aG1zOgorICovCisKKy8qIEdpdmVuIGEgMVcgKiAxVyA9PiAyVyBwcmltaXRpdmUsIGRvIHRoZSBleHRlbmRlZCBtdWx0aXBsaWNhdGlvbi4gICovCisKKyNkZWZpbmUgX0ZQX01VTF9NRUFUXzJfd2lkZSh3ZnJhY2JpdHMsIFIsIFgsIFksIGRvaXQpCQkJXAorICBkbyB7CQkJCQkJCQkJXAorICAgIF9GUF9GUkFDX0RFQ0xfNChfeik7IF9GUF9GUkFDX0RFQ0xfMihfYik7IF9GUF9GUkFDX0RFQ0xfMihfYyk7CVwKKwkJCQkJCQkJCVwKKyAgICBkb2l0KF9GUF9GUkFDX1dPUkRfNChfeiwxKSwgX0ZQX0ZSQUNfV09SRF80KF96LDApLCBYIyNfZjAsIFkjI19mMCk7CVwKKyAgICBkb2l0KF9iX2YxLCBfYl9mMCwgWCMjX2YwLCBZIyNfZjEpOwkJCQkJXAorICAgIGRvaXQoX2NfZjEsIF9jX2YwLCBYIyNfZjEsIFkjI19mMCk7CQkJCQlcCisgICAgZG9pdChfRlBfRlJBQ19XT1JEXzQoX3osMyksIF9GUF9GUkFDX1dPUkRfNChfeiwyKSwgWCMjX2YxLCBZIyNfZjEpOwlcCisJCQkJCQkJCQlcCisgICAgX19GUF9GUkFDX0FERF8zKF9GUF9GUkFDX1dPUkRfNChfeiwzKSxfRlBfRlJBQ19XT1JEXzQoX3osMiksCVwKKwkJICAgIF9GUF9GUkFDX1dPUkRfNChfeiwxKSwgMCwgX2JfZjEsIF9iX2YwLAkJXAorCQkgICAgX0ZQX0ZSQUNfV09SRF80KF96LDMpLF9GUF9GUkFDX1dPUkRfNChfeiwyKSwJXAorCQkgICAgX0ZQX0ZSQUNfV09SRF80KF96LDEpKTsJCQkJXAorICAgIF9fRlBfRlJBQ19BRERfMyhfRlBfRlJBQ19XT1JEXzQoX3osMyksX0ZQX0ZSQUNfV09SRF80KF96LDIpLAlcCisJCSAgICBfRlBfRlJBQ19XT1JEXzQoX3osMSksIDAsIF9jX2YxLCBfY19mMCwJCVwKKwkJICAgIF9GUF9GUkFDX1dPUkRfNChfeiwzKSxfRlBfRlJBQ19XT1JEXzQoX3osMiksCVwKKwkJICAgIF9GUF9GUkFDX1dPUkRfNChfeiwxKSk7CQkJCVwKKwkJCQkJCQkJCVwKKyAgICAvKiBOb3JtYWxpemUgc2luY2Ugd2Uga25vdyB3aGVyZSB0aGUgbXNiIG9mIHRoZSBtdWx0aXBsaWNhbmRzCVwKKyAgICAgICB3ZXJlIChiaXQgQiksIHdlIGtub3cgdGhhdCB0aGUgbXNiIG9mIHRoZSBvZiB0aGUgcHJvZHVjdCBpcwlcCisgICAgICAgYXQgZWl0aGVyIDJCIG9yIDJCLTEuICAqLwkJCQkJXAorICAgIF9GUF9GUkFDX1NSU180KF96LCB3ZnJhY2JpdHMtMSwgMip3ZnJhY2JpdHMpOwkJCVwKKyAgICBSIyNfZjAgPSBfRlBfRlJBQ19XT1JEXzQoX3osMCk7CQkJCQlcCisgICAgUiMjX2YxID0gX0ZQX0ZSQUNfV09SRF80KF96LDEpOwkJCQkJXAorICB9IHdoaWxlICgwKQorCisvKiBHaXZlbiBhIDFXICogMVcgPT4gMlcgcHJpbWl0aXZlLCBkbyB0aGUgZXh0ZW5kZWQgbXVsdGlwbGljYXRpb24uCisgICBEbyBvbmx5IDMgbXVsdGlwbGljYXRpb25zIGluc3RlYWQgb2YgZm91ci4gVGhpcyBvbmUgaXMgZm9yIG1hY2hpbmVzCisgICB3aGVyZSBtdWx0aXBsaWNhdGlvbiBpcyBtdWNoIG1vcmUgZXhwZW5zaXZlIHRoYW4gc3VidHJhY3Rpb24uICAqLworCisjZGVmaW5lIF9GUF9NVUxfTUVBVF8yX3dpZGVfM211bCh3ZnJhY2JpdHMsIFIsIFgsIFksIGRvaXQpCQlcCisgIGRvIHsJCQkJCQkJCQlcCisgICAgX0ZQX0ZSQUNfREVDTF80KF96KTsgX0ZQX0ZSQUNfREVDTF8yKF9iKTsgX0ZQX0ZSQUNfREVDTF8yKF9jKTsJXAorICAgIF9GUF9XX1RZUEUgX2Q7CQkJCQkJCVwKKyAgICBpbnQgX2MxLCBfYzI7CQkJCQkJCVwKKwkJCQkJCQkJCVwKKyAgICBfYl9mMCA9IFgjI19mMCArIFgjI19mMTsJCQkJCQlcCisgICAgX2MxID0gX2JfZjAgPCBYIyNfZjA7CQkJCQkJXAorICAgIF9iX2YxID0gWSMjX2YwICsgWSMjX2YxOwkJCQkJCVwKKyAgICBfYzIgPSBfYl9mMSA8IFkjI19mMDsJCQkJCQlcCisgICAgZG9pdChfZCwgX0ZQX0ZSQUNfV09SRF80KF96LDApLCBYIyNfZjAsIFkjI19mMCk7CQkJXAorICAgIGRvaXQoX0ZQX0ZSQUNfV09SRF80KF96LDIpLCBfRlBfRlJBQ19XT1JEXzQoX3osMSksIF9iX2YwLCBfYl9mMSk7CVwKKyAgICBkb2l0KF9jX2YxLCBfY19mMCwgWCMjX2YxLCBZIyNfZjEpOwkJCQkJXAorCQkJCQkJCQkJXAorICAgIF9iX2YwICY9IC1fYzI7CQkJCQkJCVwKKyAgICBfYl9mMSAmPSAtX2MxOwkJCQkJCQlcCisgICAgX19GUF9GUkFDX0FERF8zKF9GUF9GUkFDX1dPUkRfNChfeiwzKSxfRlBfRlJBQ19XT1JEXzQoX3osMiksCVwKKwkJICAgIF9GUF9GUkFDX1dPUkRfNChfeiwxKSwgKF9jMSAmIF9jMiksIDAsIF9kLAkJXAorCQkgICAgMCwgX0ZQX0ZSQUNfV09SRF80KF96LDIpLCBfRlBfRlJBQ19XT1JEXzQoX3osMSkpOwlcCisgICAgX19GUF9GUkFDX0FERElfMihfRlBfRlJBQ19XT1JEXzQoX3osMyksX0ZQX0ZSQUNfV09SRF80KF96LDIpLAlcCisJCSAgICAgX2JfZjApOwkJCQkJCVwKKyAgICBfX0ZQX0ZSQUNfQURESV8yKF9GUF9GUkFDX1dPUkRfNChfeiwzKSxfRlBfRlJBQ19XT1JEXzQoX3osMiksCVwKKwkJICAgICBfYl9mMSk7CQkJCQkJXAorICAgIF9fRlBfRlJBQ19ERUNfMyhfRlBfRlJBQ19XT1JEXzQoX3osMyksX0ZQX0ZSQUNfV09SRF80KF96LDIpLAlcCisJCSAgICBfRlBfRlJBQ19XT1JEXzQoX3osMSksCQkJCVwKKwkJICAgIDAsIF9kLCBfRlBfRlJBQ19XT1JEXzQoX3osMCkpOwkJCVwKKyAgICBfX0ZQX0ZSQUNfREVDXzMoX0ZQX0ZSQUNfV09SRF80KF96LDMpLF9GUF9GUkFDX1dPUkRfNChfeiwyKSwJXAorCQkgICAgX0ZQX0ZSQUNfV09SRF80KF96LDEpLCAwLCBfY19mMSwgX2NfZjApOwkJXAorICAgIF9fRlBfRlJBQ19BRERfMihfRlBfRlJBQ19XT1JEXzQoX3osMyksIF9GUF9GUkFDX1dPUkRfNChfeiwyKSwJXAorCQkgICAgX2NfZjEsIF9jX2YwLAkJCQkJXAorCQkgICAgX0ZQX0ZSQUNfV09SRF80KF96LDMpLCBfRlBfRlJBQ19XT1JEXzQoX3osMikpOwlcCisJCQkJCQkJCQlcCisgICAgLyogTm9ybWFsaXplIHNpbmNlIHdlIGtub3cgd2hlcmUgdGhlIG1zYiBvZiB0aGUgbXVsdGlwbGljYW5kcwlcCisgICAgICAgd2VyZSAoYml0IEIpLCB3ZSBrbm93IHRoYXQgdGhlIG1zYiBvZiB0aGUgb2YgdGhlIHByb2R1Y3QgaXMJXAorICAgICAgIGF0IGVpdGhlciAyQiBvciAyQi0xLiAgKi8JCQkJCVwKKyAgICBfRlBfRlJBQ19TUlNfNChfeiwgd2ZyYWNiaXRzLTEsIDIqd2ZyYWNiaXRzKTsJCQlcCisgICAgUiMjX2YwID0gX0ZQX0ZSQUNfV09SRF80KF96LDApOwkJCQkJXAorICAgIFIjI19mMSA9IF9GUF9GUkFDX1dPUkRfNChfeiwxKTsJCQkJCVwKKyAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBfRlBfTVVMX01FQVRfMl9nbXAod2ZyYWNiaXRzLCBSLCBYLCBZKQkJCQlcCisgIGRvIHsJCQkJCQkJCQlcCisgICAgX0ZQX0ZSQUNfREVDTF80KF96KTsJCQkJCQlcCisgICAgX0ZQX1dfVFlQRSBfeFsyXSwgX3lbMl07CQkJCQkJXAorICAgIF94WzBdID0gWCMjX2YwOyBfeFsxXSA9IFgjI19mMTsJCQkJCVwKKyAgICBfeVswXSA9IFkjI19mMDsgX3lbMV0gPSBZIyNfZjE7CQkJCQlcCisJCQkJCQkJCQlcCisgICAgbXBuX211bF9uKF96X2YsIF94LCBfeSwgMik7CQkJCQkJXAorCQkJCQkJCQkJXAorICAgIC8qIE5vcm1hbGl6ZSBzaW5jZSB3ZSBrbm93IHdoZXJlIHRoZSBtc2Igb2YgdGhlIG11bHRpcGxpY2FuZHMJXAorICAgICAgIHdlcmUgKGJpdCBCKSwgd2Uga25vdyB0aGF0IHRoZSBtc2Igb2YgdGhlIG9mIHRoZSBwcm9kdWN0IGlzCVwKKyAgICAgICBhdCBlaXRoZXIgMkIgb3IgMkItMS4gICovCQkJCQlcCisgICAgX0ZQX0ZSQUNfU1JTXzQoX3osIHdmcmFjYml0cy0xLCAyKndmcmFjYml0cyk7CQkJXAorICAgIFIjI19mMCA9IF96X2ZbMF07CQkJCQkJCVwKKyAgICBSIyNfZjEgPSBfel9mWzFdOwkJCQkJCQlcCisgIH0gd2hpbGUgKDApCisKKy8qIERvIGF0IG1vc3QgMTIweDEyMD0yNDAgYml0cyBtdWx0aXBsaWNhdGlvbiB1c2luZyBkb3VibGUgZmxvYXRpbmcKKyAgIHBvaW50IG11bHRpcGxpY2F0aW9uLiAgVGhpcyBpcyB1c2VmdWwgaWYgZmxvYXRpbmcgcG9pbnQKKyAgIG11bHRpcGxpY2F0aW9uIGhhcyBtdWNoIGJpZ2dlciB0aHJvdWdocHV0IHRoYW4gaW50ZWdlciBtdWx0aXBseS4KKyAgIEl0IGlzIHN1cHBvc2VkIHRvIHdvcmsgZm9yIF9GUF9XX1RZUEVfU0laRSA2NCBhbmQgd2ZyYWNiaXRzCisgICBiZXR3ZWVuIDEwNiBhbmQgMTIwIG9ubHkuICAKKyAgIENhbGxlciBndWFyYW50ZWVzIHRoYXQgWCBhbmQgWSBoYXMgKDFMTEwgPDwgKHdmcmFjYml0cyAtIDEpKSBzZXQuCisgICBTRVRGRVRaIGlzIGEgbWFjcm8gd2hpY2ggd2lsbCBkaXNhYmxlIGFsbCBGUFUgZXhjZXB0aW9ucyBhbmQgc2V0IHJvdW5kaW5nCisgICB0b3dhcmRzIHplcm8sICBSRVNFVEZFIHNob3VsZCBvcHRpb25hbGx5IHJlc2V0IGl0IGJhY2suICAqLworCisjZGVmaW5lIF9GUF9NVUxfTUVBVF8yXzEyMF8yNDBfZG91YmxlKHdmcmFjYml0cywgUiwgWCwgWSwgc2V0ZmV0eiwgcmVzZXRmZSkJXAorICBkbyB7CQkJCQkJCQkJCVwKKyAgICBzdGF0aWMgY29uc3QgZG91YmxlIF9jb25zdFtdID0gewkJCQkJCVwKKyAgICAgIC8qIDJeLTI0ICovIDUuOTYwNDY0NDc3NTM5MDYyNWUtMDgsCQkJCQlcCisgICAgICAvKiAyXi00OCAqLyAzLjU1MjcxMzY3ODgwMDUwMDllLTE1LAkJCQkJXAorICAgICAgLyogMl4tNzIgKi8gMi4xMTc1ODIzNjgxMzU3NTA4ZS0yMiwJCQkJCVwKKyAgICAgIC8qIDJeLTk2ICovIDEuMjYyMTc3NDQ4MzUzNjE4OWUtMjksCQkJCQlcCisgICAgICAvKiAyXjI4ICovIDIuNjg0MzU0NTZlKzA4LAkJCQkJCVwKKyAgICAgIC8qIDJeNCAqLyAxLjYwMDAwMGUrMDEsCQkJCQkJCVwKKyAgICAgIC8qIDJeLTIwICovIDkuNTM2NzQzMTY0MDYyNWUtMDcsCQkJCQkJXAorICAgICAgLyogMl4tNDQgKi8gNS42ODQzNDE4ODYwODA4MDE1ZS0xNCwJCQkJCVwKKyAgICAgIC8qIDJeLTY4ICovIDMuMzg4MTMxNzg5MDE3MjAxNGUtMjEsCQkJCQlcCisgICAgICAvKiAyXi05MiAqLyAyLjAxOTQ4MzkxNzM2NTc5MDJlLTI4LAkJCQkJXAorICAgICAgLyogMl4tMTE2ICovIDEuMjAzNzA2MjE1MjQyMDIyNGUtMzV9OwkJCQkJXAorICAgIGRvdWJsZSBfYTI0MCwgX2IyNDAsIF9jMjQwLCBfZDI0MCwgX2UyNDAsIF9mMjQwLCAJCQkJXAorCSAgIF9nMjQwLCBfaDI0MCwgX2kyNDAsIF9qMjQwLCBfazI0MDsJCQkJCVwKKyAgICB1bmlvbiB7IGRvdWJsZSBkOyBVREl0eXBlIGk7IH0gX2wyNDAsIF9tMjQwLCBfbjI0MCwgX28yNDAsCQkJXAorCQkJCSAgIF9wMjQwLCBfcTI0MCwgX3IyNDAsIF9zMjQwOwkJCVwKKyAgICBVREl0eXBlIF90MjQwLCBfdTI0MCwgX3YyNDAsIF93MjQwLCBfeDI0MCwgX3kyNDAgPSAwOwkJCVwKKwkJCQkJCQkJCQlcCisgICAgaWYgKHdmcmFjYml0cyA8IDEwNiB8fCB3ZnJhY2JpdHMgPiAxMjApCQkJCQlcCisgICAgICBhYm9ydCgpOwkJCQkJCQkJCVwKKwkJCQkJCQkJCQlcCisgICAgc2V0ZmV0ejsJCQkJCQkJCQlcCisJCQkJCQkJCQkJXAorICAgIF9lMjQwID0gKGRvdWJsZSkobG9uZykoWCMjX2YwICYgMHhmZmZmZmYpOwkJCQkJXAorICAgIF9qMjQwID0gKGRvdWJsZSkobG9uZykoWSMjX2YwICYgMHhmZmZmZmYpOwkJCQkJXAorICAgIF9kMjQwID0gKGRvdWJsZSkobG9uZykoKFgjI19mMCA+PiAyNCkgJiAweGZmZmZmZik7CQkJCVwKKyAgICBfaTI0MCA9IChkb3VibGUpKGxvbmcpKChZIyNfZjAgPj4gMjQpICYgMHhmZmZmZmYpOwkJCQlcCisgICAgX2MyNDAgPSAoZG91YmxlKShsb25nKSgoKFgjI19mMSA8PCAxNikgJiAweGZmZmZmZikgfCAoWCMjX2YwID4+IDQ4KSk7CVwKKyAgICBfaDI0MCA9IChkb3VibGUpKGxvbmcpKCgoWSMjX2YxIDw8IDE2KSAmIDB4ZmZmZmZmKSB8IChZIyNfZjAgPj4gNDgpKTsJXAorICAgIF9iMjQwID0gKGRvdWJsZSkobG9uZykoKFgjI19mMSA+PiA4KSAmIDB4ZmZmZmZmKTsJCQkJXAorICAgIF9nMjQwID0gKGRvdWJsZSkobG9uZykoKFkjI19mMSA+PiA4KSAmIDB4ZmZmZmZmKTsJCQkJXAorICAgIF9hMjQwID0gKGRvdWJsZSkobG9uZykoWCMjX2YxID4+IDMyKTsJCQkJCVwKKyAgICBfZjI0MCA9IChkb3VibGUpKGxvbmcpKFkjI19mMSA+PiAzMik7CQkJCQlcCisgICAgX2UyNDAgKj0gX2NvbnN0WzNdOwkJCQkJCQkJXAorICAgIF9qMjQwICo9IF9jb25zdFszXTsJCQkJCQkJCVwKKyAgICBfZDI0MCAqPSBfY29uc3RbMl07CQkJCQkJCQlcCisgICAgX2kyNDAgKj0gX2NvbnN0WzJdOwkJCQkJCQkJXAorICAgIF9jMjQwICo9IF9jb25zdFsxXTsJCQkJCQkJCVwKKyAgICBfaDI0MCAqPSBfY29uc3RbMV07CQkJCQkJCQlcCisgICAgX2IyNDAgKj0gX2NvbnN0WzBdOwkJCQkJCQkJXAorICAgIF9nMjQwICo9IF9jb25zdFswXTsJCQkJCQkJCVwKKyAgICBfczI0MC5kID0JCQkJCQkJICAgICAgX2UyNDAqX2oyNDA7XAorICAgIF9yMjQwLmQgPQkJCQkJCV9kMjQwKl9qMjQwICsgX2UyNDAqX2kyNDA7XAorICAgIF9xMjQwLmQgPQkJCQkgIF9jMjQwKl9qMjQwICsgX2QyNDAqX2kyNDAgKyBfZTI0MCpfaDI0MDtcCisgICAgX3AyNDAuZCA9CQkgICAgX2IyNDAqX2oyNDAgKyBfYzI0MCpfaTI0MCArIF9kMjQwKl9oMjQwICsgX2UyNDAqX2cyNDA7XAorICAgIF9vMjQwLmQgPSBfYTI0MCpfajI0MCArIF9iMjQwKl9pMjQwICsgX2MyNDAqX2gyNDAgKyBfZDI0MCpfZzI0MCArIF9lMjQwKl9mMjQwO1wKKyAgICBfbjI0MC5kID0gX2EyNDAqX2kyNDAgKyBfYjI0MCpfaDI0MCArIF9jMjQwKl9nMjQwICsgX2QyNDAqX2YyNDA7CQlcCisgICAgX20yNDAuZCA9IF9hMjQwKl9oMjQwICsgX2IyNDAqX2cyNDAgKyBfYzI0MCpfZjI0MDsJCQkJXAorICAgIF9sMjQwLmQgPSBfYTI0MCpfZzI0MCArIF9iMjQwKl9mMjQwOwkJCQkJXAorICAgIF9rMjQwID0gICBfYTI0MCpfZjI0MDsJCQkJCQkJXAorICAgIF9yMjQwLmQgKz0gX3MyNDAuZDsJCQkJCQkJCVwKKyAgICBfcTI0MC5kICs9IF9yMjQwLmQ7CQkJCQkJCQlcCisgICAgX3AyNDAuZCArPSBfcTI0MC5kOwkJCQkJCQkJXAorICAgIF9vMjQwLmQgKz0gX3AyNDAuZDsJCQkJCQkJCVwKKyAgICBfbjI0MC5kICs9IF9vMjQwLmQ7CQkJCQkJCQlcCisgICAgX20yNDAuZCArPSBfbjI0MC5kOwkJCQkJCQkJXAorICAgIF9sMjQwLmQgKz0gX20yNDAuZDsJCQkJCQkJCVwKKyAgICBfazI0MCArPSBfbDI0MC5kOwkJCQkJCQkJXAorICAgIF9zMjQwLmQgLT0gKChfY29uc3RbMTBdK19zMjQwLmQpLV9jb25zdFsxMF0pOwkJCQlcCisgICAgX3IyNDAuZCAtPSAoKF9jb25zdFs5XStfcjI0MC5kKS1fY29uc3RbOV0pOwkJCQkJXAorICAgIF9xMjQwLmQgLT0gKChfY29uc3RbOF0rX3EyNDAuZCktX2NvbnN0WzhdKTsJCQkJCVwKKyAgICBfcDI0MC5kIC09ICgoX2NvbnN0WzddK19wMjQwLmQpLV9jb25zdFs3XSk7CQkJCQlcCisgICAgX28yNDAuZCArPSBfY29uc3RbN107CQkJCQkJCVwKKyAgICBfbjI0MC5kICs9IF9jb25zdFs2XTsJCQkJCQkJXAorICAgIF9tMjQwLmQgKz0gX2NvbnN0WzVdOwkJCQkJCQlcCisgICAgX2wyNDAuZCArPSBfY29uc3RbNF07CQkJCQkJCVwKKyAgICBpZiAoX3MyNDAuZCAhPSAwLjApIF95MjQwID0gMTsJCQkJCQlcCisgICAgaWYgKF9yMjQwLmQgIT0gMC4wKSBfeTI0MCA9IDE7CQkJCQkJXAorICAgIGlmIChfcTI0MC5kICE9IDAuMCkgX3kyNDAgPSAxOwkJCQkJCVwKKyAgICBpZiAoX3AyNDAuZCAhPSAwLjApIF95MjQwID0gMTsJCQkJCQlcCisgICAgX3QyNDAgPSAoREl0eXBlKV9rMjQwOwkJCQkJCQlcCisgICAgX3UyNDAgPSBfbDI0MC5pOwkJCQkJCQkJXAorICAgIF92MjQwID0gX20yNDAuaTsJCQkJCQkJCVwKKyAgICBfdzI0MCA9IF9uMjQwLmk7CQkJCQkJCQlcCisgICAgX3gyNDAgPSBfbzI0MC5pOwkJCQkJCQkJXAorICAgIFIjI19mMSA9IChfdDI0MCA8PCAoMTI4IC0gKHdmcmFjYml0cyAtIDEpKSkJCQkJCVwKKwkgICAgIHwgKChfdTI0MCAmIDB4ZmZmZmZmKSA+PiAoKHdmcmFjYml0cyAtIDEpIC0gMTA0KSk7CQkJXAorICAgIFIjI19mMCA9ICgoX3UyNDAgJiAweGZmZmZmZikgPDwgKDE2OCAtICh3ZnJhY2JpdHMgLSAxKSkpCQkJXAorICAgIAkgICAgIHwgKChfdjI0MCAmIDB4ZmZmZmZmKSA8PCAoMTQ0IC0gKHdmcmFjYml0cyAtIDEpKSkJCQlcCisgICAgCSAgICAgfCAoKF93MjQwICYgMHhmZmZmZmYpIDw8ICgxMjAgLSAod2ZyYWNiaXRzIC0gMSkpKQkJCVwKKyAgICAJICAgICB8ICgoX3gyNDAgJiAweGZmZmZmZikgPj4gKCh3ZnJhY2JpdHMgLSAxKSAtIDk2KSkJCQlcCisgICAgCSAgICAgfCBfeTI0MDsJCQkJCQkJCVwKKyAgICByZXNldGZlOwkJCQkJCQkJCVwKKyAgfSB3aGlsZSAoMCkKKworLyoKKyAqIERpdmlzaW9uIGFsZ29yaXRobXM6CisgKi8KKworI2RlZmluZSBfRlBfRElWX01FQVRfMl91ZGl2KGZzLCBSLCBYLCBZKQkJCQlcCisgIGRvIHsJCQkJCQkJCQlcCisgICAgX0ZQX1dfVFlQRSBfbl9mMiwgX25fZjEsIF9uX2YwLCBfcl9mMSwgX3JfZjAsIF9tX2YxLCBfbV9mMDsJCVwKKyAgICBpZiAoX0ZQX0ZSQUNfR1RfMihYLCBZKSkJCQkJCQlcCisgICAgICB7CQkJCQkJCQkJXAorCV9uX2YyID0gWCMjX2YxID4+IDE7CQkJCQkJXAorCV9uX2YxID0gWCMjX2YxIDw8IChfRlBfV19UWVBFX1NJWkUgLSAxKSB8IFgjI19mMCA+PiAxOwkJXAorCV9uX2YwID0gWCMjX2YwIDw8IChfRlBfV19UWVBFX1NJWkUgLSAxKTsJCQlcCisgICAgICB9CQkJCQkJCQkJXAorICAgIGVsc2UJCQkJCQkJCVwKKyAgICAgIHsJCQkJCQkJCQlcCisJUiMjX2UtLTsJCQkJCQkJXAorCV9uX2YyID0gWCMjX2YxOwkJCQkJCQlcCisJX25fZjEgPSBYIyNfZjA7CQkJCQkJCVwKKwlfbl9mMCA9IDA7CQkJCQkJCVwKKyAgICAgIH0JCQkJCQkJCQlcCisJCQkJCQkJCQlcCisgICAgLyogTm9ybWFsaXplLCBpLmUuIG1ha2UgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IG9mIHRoZSAJCVwKKyAgICAgICBkZW5vbWluYXRvciBzZXQuICovCQkJCQkJXAorICAgIF9GUF9GUkFDX1NMTF8yKFksIF9GUF9XRlJBQ1hCSVRTXyMjZnMpOwkJCQlcCisJCQkJCQkJCQlcCisgICAgdWRpdl9xcm5uZChSIyNfZjEsIF9yX2YxLCBfbl9mMiwgX25fZjEsIFkjI19mMSk7CQkJXAorICAgIHVtdWxfcHBtbShfbV9mMSwgX21fZjAsIFIjI19mMSwgWSMjX2YwKTsJCQkJXAorICAgIF9yX2YwID0gX25fZjA7CQkJCQkJCVwKKyAgICBpZiAoX0ZQX0ZSQUNfR1RfMihfbSwgX3IpKQkJCQkJCVwKKyAgICAgIHsJCQkJCQkJCQlcCisJUiMjX2YxLS07CQkJCQkJCVwKKwlfRlBfRlJBQ19BRERfMihfciwgWSwgX3IpOwkJCQkJXAorCWlmIChfRlBfRlJBQ19HRV8yKF9yLCBZKSAmJiBfRlBfRlJBQ19HVF8yKF9tLCBfcikpCQlcCisJICB7CQkJCQkJCQlcCisJICAgIFIjI19mMS0tOwkJCQkJCQlcCisJICAgIF9GUF9GUkFDX0FERF8yKF9yLCBZLCBfcik7CQkJCQlcCisJICB9CQkJCQkJCQlcCisgICAgICB9CQkJCQkJCQkJXAorICAgIF9GUF9GUkFDX0RFQ18yKF9yLCBfbSk7CQkJCQkJXAorCQkJCQkJCQkJXAorICAgIGlmIChfcl9mMSA9PSBZIyNfZjEpCQkJCQkJXAorICAgICAgewkJCQkJCQkJCVwKKwkvKiBUaGlzIGlzIGEgc3BlY2lhbCBjYXNlLCBub3QgYW4gb3B0aW1pemF0aW9uCQkJXAorCSAgIChfci9ZIyNfZjEgd291bGQgbm90IGZpdCBpbnRvIFVXdHlwZSkuCQkJXAorCSAgIEFzIF9yIGlzIGd1YXJhbnRlZWQgdG8gYmUgPCBZLCAgUiMjX2YwIGNhbiBiZSBlaXRoZXIJCVwKKwkgICAoVVd0eXBlKS0xIG9yIChVV3R5cGUpLTIuICBCdXQgYXMgd2Uga25vdyB3aGF0IGtpbmQJCVwKKwkgICBvZiBiaXRzIGl0IGlzIChzdGlja3ksIGd1YXJkLCByb3VuZCksICB3ZSBkb24ndCBjYXJlLglcCisJICAgV2UgYWxzbyBkb24ndCBjYXJlIHdoYXQgdGhlIHJlbWluZGVyIGlzLCAgYmVjYXVzZSB0aGUJXAorCSAgIGd1YXJkIGJpdCB3aWxsIGJlIHNldCBhbnl3YXkuICAtamogKi8JCQlcCisJUiMjX2YwID0gLTE7CQkJCQkJCVwKKyAgICAgIH0JCQkJCQkJCQlcCisgICAgZWxzZQkJCQkJCQkJXAorICAgICAgewkJCQkJCQkJCVwKKwl1ZGl2X3Fybm5kKFIjI19mMCwgX3JfZjEsIF9yX2YxLCBfcl9mMCwgWSMjX2YxKTsJCVwKKwl1bXVsX3BwbW0oX21fZjEsIF9tX2YwLCBSIyNfZjAsIFkjI19mMCk7CQkJXAorCV9yX2YwID0gMDsJCQkJCQkJXAorCWlmIChfRlBfRlJBQ19HVF8yKF9tLCBfcikpCQkJCQlcCisJICB7CQkJCQkJCQlcCisJICAgIFIjI19mMC0tOwkJCQkJCQlcCisJICAgIF9GUF9GUkFDX0FERF8yKF9yLCBZLCBfcik7CQkJCQlcCisJICAgIGlmIChfRlBfRlJBQ19HRV8yKF9yLCBZKSAmJiBfRlBfRlJBQ19HVF8yKF9tLCBfcikpCQlcCisJICAgICAgewkJCQkJCQkJXAorCQlSIyNfZjAtLTsJCQkJCQlcCisJCV9GUF9GUkFDX0FERF8yKF9yLCBZLCBfcik7CQkJCVwKKwkgICAgICB9CQkJCQkJCQlcCisJICB9CQkJCQkJCQlcCisJaWYgKCFfRlBfRlJBQ19FUV8yKF9yLCBfbSkpCQkJCQlcCisJICBSIyNfZjAgfD0gX0ZQX1dPUktfU1RJQ0tZOwkJCQkJXAorICAgICAgfQkJCQkJCQkJCVwKKyAgfSB3aGlsZSAoMCkKKworCisjZGVmaW5lIF9GUF9ESVZfTUVBVF8yX2dtcChmcywgUiwgWCwgWSkJCQkJCVwKKyAgZG8gewkJCQkJCQkJCVwKKyAgICBfRlBfV19UWVBFIF94WzRdLCBfeVsyXSwgX3pbNF07CQkJCQlcCisgICAgX3lbMF0gPSBZIyNfZjA7IF95WzFdID0gWSMjX2YxOwkJCQkJXAorICAgIF94WzBdID0gX3hbM10gPSAwOwkJCQkJCQlcCisgICAgaWYgKF9GUF9GUkFDX0dUXzIoWCwgWSkpCQkJCQkJXAorICAgICAgewkJCQkJCQkJCVwKKwlSIyNfZSsrOwkJCQkJCQlcCisJX3hbMV0gPSAoWCMjX2YwIDw8IChfRlBfV0ZSQUNCSVRTXyMjZnMtMSAtIF9GUF9XX1RZUEVfU0laRSkgfAlcCisJCSBYIyNfZjEgPj4gKF9GUF9XX1RZUEVfU0laRSAtCQkJCVwKKwkJCSAgICAoX0ZQX1dGUkFDQklUU18jI2ZzLTEgLSBfRlBfV19UWVBFX1NJWkUpKSk7CVwKKwlfeFsyXSA9IFgjI19mMSA8PCAoX0ZQX1dGUkFDQklUU18jI2ZzLTEgLSBfRlBfV19UWVBFX1NJWkUpOwlcCisgICAgICB9CQkJCQkJCQkJXAorICAgIGVsc2UJCQkJCQkJCVwKKyAgICAgIHsJCQkJCQkJCQlcCisJX3hbMV0gPSAoWCMjX2YwIDw8IChfRlBfV0ZSQUNCSVRTXyMjZnMgLSBfRlBfV19UWVBFX1NJWkUpIHwJXAorCQkgWCMjX2YxID4+IChfRlBfV19UWVBFX1NJWkUgLQkJCQlcCisJCQkgICAgKF9GUF9XRlJBQ0JJVFNfIyNmcyAtIF9GUF9XX1RZUEVfU0laRSkpKTsJXAorCV94WzJdID0gWCMjX2YxIDw8IChfRlBfV0ZSQUNCSVRTXyMjZnMgLSBfRlBfV19UWVBFX1NJWkUpOwlcCisgICAgICB9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorICAgICh2b2lkKSBtcG5fZGl2cmVtIChfeiwgMCwgX3gsIDQsIF95LCAyKTsJCQkJXAorICAgIFIjI19mMSA9IF96WzFdOwkJCQkJCQlcCisgICAgUiMjX2YwID0gX3pbMF0gfCAoKF94WzBdIHwgX3hbMV0pICE9IDApOwkJCQlcCisgIH0gd2hpbGUgKDApCisKKworLyoKKyAqIFNxdWFyZSByb290IGFsZ29yaXRobXM6CisgKiBXZSBoYXZlIGp1c3Qgb25lIHJpZ2h0IG5vdywgbWF5YmUgTmV3dG9uIGFwcHJveGltYXRpb24KKyAqIHNob3VsZCBiZSBhZGRlZCBmb3IgdGhvc2UgbWFjaGluZXMgd2hlcmUgZGl2aXNpb24gaXMgZmFzdC4KKyAqLworIAorI2RlZmluZSBfRlBfU1FSVF9NRUFUXzIoUiwgUywgVCwgWCwgcSkJCQlcCisgIGRvIHsJCQkJCQkJXAorICAgIHdoaWxlIChxKQkJCQkJCVwKKyAgICAgIHsJCQkJCQkJXAorCVQjI19mMSA9IFMjI19mMSArIHE7CQkJCVwKKwlpZiAoVCMjX2YxIDw9IFgjI19mMSkJCQkJXAorCSAgewkJCQkJCVwKKwkgICAgUyMjX2YxID0gVCMjX2YxICsgcTsJCQlcCisJICAgIFgjI19mMSAtPSBUIyNfZjE7CQkJCVwKKwkgICAgUiMjX2YxICs9IHE7CQkJCVwKKwkgIH0JCQkJCQlcCisJX0ZQX0ZSQUNfU0xMXzIoWCwgMSk7CQkJCVwKKwlxID4+PSAxOwkJCQkJXAorICAgICAgfQkJCQkJCQlcCisgICAgcSA9IChfRlBfV19UWVBFKTEgPDwgKF9GUF9XX1RZUEVfU0laRSAtIDEpOwkJXAorICAgIHdoaWxlIChxICE9IF9GUF9XT1JLX1JPVU5EKQkJCQlcCisgICAgICB7CQkJCQkJCVwKKwlUIyNfZjAgPSBTIyNfZjAgKyBxOwkJCQlcCisJVCMjX2YxID0gUyMjX2YxOwkJCQlcCisJaWYgKFQjI19mMSA8IFgjI19mMSB8fCAJCQkJXAorCSAgICAoVCMjX2YxID09IFgjI19mMSAmJiBUIyNfZjAgPD0gWCMjX2YwKSkJXAorCSAgewkJCQkJCVwKKwkgICAgUyMjX2YwID0gVCMjX2YwICsgcTsJCQlcCisJICAgIFMjI19mMSArPSAoVCMjX2YwID4gUyMjX2YwKTsJCVwKKwkgICAgX0ZQX0ZSQUNfREVDXzIoWCwgVCk7CQkJXAorCSAgICBSIyNfZjAgKz0gcTsJCQkJXAorCSAgfQkJCQkJCVwKKwlfRlBfRlJBQ19TTExfMihYLCAxKTsJCQkJXAorCXEgPj49IDE7CQkJCQlcCisgICAgICB9CQkJCQkJCVwKKyAgICBpZiAoWCMjX2YwIHwgWCMjX2YxKQkJCQlcCisgICAgICB7CQkJCQkJCVwKKwlpZiAoUyMjX2YxIDwgWCMjX2YxIHx8IAkJCQlcCisJICAgIChTIyNfZjEgPT0gWCMjX2YxICYmIFMjI19mMCA8IFgjI19mMCkpCVwKKwkgIFIjI19mMCB8PSBfRlBfV09SS19ST1VORDsJCQlcCisJUiMjX2YwIHw9IF9GUF9XT1JLX1NUSUNLWTsJCQlcCisgICAgICB9CQkJCQkJCVwKKyAgfSB3aGlsZSAoMCkKKworCisvKgorICogQXNzZW1ibHkvZGlzYXNzZW1ibHkgZm9yIGNvbnZlcnRpbmcgdG8vZnJvbSBpbnRlZ3JhbCB0eXBlcy4gIAorICogTm8gc2hpZnRpbmcgb3Igb3ZlcmZsb3cgaGFuZGxlZCBoZXJlLgorICovCisKKyNkZWZpbmUgX0ZQX0ZSQUNfQVNTRU1CTEVfMihyLCBYLCByc2l6ZSkJXAorICBkbyB7CQkJCQkJXAorICAgIGlmIChyc2l6ZSA8PSBfRlBfV19UWVBFX1NJWkUpCQlcCisgICAgICByID0gWCMjX2YwOwkJCQlcCisgICAgZWxzZQkJCQkJXAorICAgICAgewkJCQkJCVwKKwlyID0gWCMjX2YxOwkJCQlcCisJciA8PD0gX0ZQX1dfVFlQRV9TSVpFOwkJCVwKKwlyICs9IFgjI19mMDsJCQkJXAorICAgICAgfQkJCQkJCVwKKyAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBfRlBfRlJBQ19ESVNBU1NFTUJMRV8yKFgsIHIsIHJzaXplKQkJCQlcCisgIGRvIHsJCQkJCQkJCQlcCisgICAgWCMjX2YwID0gcjsJCQkJCQkJCVwKKyAgICBYIyNfZjEgPSAocnNpemUgPD0gX0ZQX1dfVFlQRV9TSVpFID8gMCA6IHIgPj4gX0ZQX1dfVFlQRV9TSVpFKTsJXAorICB9IHdoaWxlICgwKQorCisvKgorICogQ29udmVydCBGUCB2YWx1ZXMgYmV0d2VlbiB3b3JkIHNpemVzCisgKi8KKworI2RlZmluZSBfRlBfRlJBQ19DT05WXzFfMihkZnMsIHNmcywgRCwgUykJCQkJXAorICBkbyB7CQkJCQkJCQkJXAorICAgIGlmIChTIyNfYyAhPSBGUF9DTFNfTkFOKQkJCQkJCVwKKyAgICAgIF9GUF9GUkFDX1NSU18yKFMsIChfRlBfV0ZSQUNCSVRTXyMjc2ZzIC0gX0ZQX1dGUkFDQklUU18jI2RmcyksCVwKKwkJICAgICBfRlBfV0ZSQUNCSVRTXyMjc2ZzKTsJCQkJXAorICAgIGVsc2UJCQkJCQkJCVwKKyAgICAgIF9GUF9GUkFDX1NSTF8yKFMsIChfRlBfV0ZSQUNCSVRTXyMjc2ZzIC0gX0ZQX1dGUkFDQklUU18jI2RmcykpOwlcCisgICAgRCMjX2YgPSBTIyNfZjA7CQkJCQkJCVwKKyAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBfRlBfRlJBQ19DT05WXzJfMShkZnMsIHNmcywgRCwgUykJCQkJXAorICBkbyB7CQkJCQkJCQkJXAorICAgIEQjI19mMCA9IFMjI19mOwkJCQkJCQlcCisgICAgRCMjX2YxID0gMDsJCQkJCQkJCVwKKyAgICBfRlBfRlJBQ19TTExfMihELCAoX0ZQX1dGUkFDQklUU18jI2RmcyAtIF9GUF9XRlJBQ0JJVFNfIyNzZnMpKTsJXAorICB9IHdoaWxlICgwKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWF0aC1lbXUvb3AtNC5oIGIvaW5jbHVkZS9tYXRoLWVtdS9vcC00LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmEyMjZmOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbWF0aC1lbXUvb3AtNC5oCkBAIC0wLDAgKzEsNjkyIEBACisvKiBTb2Z0d2FyZSBmbG9hdGluZy1wb2ludCBlbXVsYXRpb24uCisgICBCYXNpYyBmb3VyLXdvcmQgZnJhY3Rpb24gZGVjbGFyYXRpb24gYW5kIG1hbmlwdWxhdGlvbi4KKyAgIENvcHlyaWdodCAoQykgMTk5NywxOTk4LDE5OTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKyAgIENvbnRyaWJ1dGVkIGJ5IFJpY2hhcmQgSGVuZGVyc29uIChydGhAY3lnbnVzLmNvbSksCisJCSAgSmFrdWIgSmVsaW5layAoampAdWx0cmEubGludXguY3opLAorCQkgIERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AcmVkaGF0LmNvbSkgYW5kCisJCSAgUGV0ZXIgTWF5ZGVsbCAocG1heWRlbGxAY2hpYXJrLmdyZWVuZW5kLm9yZy51aykuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisgICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYKKyAgIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworCisjaWZuZGVmIF9fTUFUSF9FTVVfT1BfNF9IX18KKyNkZWZpbmUgX19NQVRIX0VNVV9PUF80X0hfXworCisjZGVmaW5lIF9GUF9GUkFDX0RFQ0xfNChYKQlfRlBfV19UWVBFIFgjI19mWzRdCisjZGVmaW5lIF9GUF9GUkFDX0NPUFlfNChELFMpCQkJXAorICAoRCMjX2ZbMF0gPSBTIyNfZlswXSwgRCMjX2ZbMV0gPSBTIyNfZlsxXSwJXAorICAgRCMjX2ZbMl0gPSBTIyNfZlsyXSwgRCMjX2ZbM10gPSBTIyNfZlszXSkKKyNkZWZpbmUgX0ZQX0ZSQUNfU0VUXzQoWCxJKQlfX0ZQX0ZSQUNfU0VUXzQoWCwgSSkKKyNkZWZpbmUgX0ZQX0ZSQUNfSElHSF80KFgpCShYIyNfZlszXSkKKyNkZWZpbmUgX0ZQX0ZSQUNfTE9XXzQoWCkJKFgjI19mWzBdKQorI2RlZmluZSBfRlBfRlJBQ19XT1JEXzQoWCx3KQkoWCMjX2Zbd10pCisKKyNkZWZpbmUgX0ZQX0ZSQUNfU0xMXzQoWCxOKQkJCQkJCVwKKyAgZG8gewkJCQkJCQkJCVwKKyAgICBfRlBfSV9UWVBFIF91cCwgX2Rvd24sIF9za2lwLCBfaTsJCQkJCVwKKyAgICBfc2tpcCA9IChOKSAvIF9GUF9XX1RZUEVfU0laRTsJCQkJCVwKKyAgICBfdXAgPSAoTikgJSBfRlBfV19UWVBFX1NJWkU7CQkJCQlcCisgICAgX2Rvd24gPSBfRlBfV19UWVBFX1NJWkUgLSBfdXA7CQkJCQlcCisgICAgaWYgKCFfdXApCQkJCQkJCQlcCisgICAgICBmb3IgKF9pID0gMzsgX2kgPj0gX3NraXA7IC0tX2kpCQkJCQlcCisJWCMjX2ZbX2ldID0gWCMjX2ZbX2ktX3NraXBdOwkJCQkJXAorICAgIGVsc2UJCQkJCQkJCVwKKyAgICAgIHsJCQkJCQkJCQlcCisJZm9yIChfaSA9IDM7IF9pID4gX3NraXA7IC0tX2kpCQkJCQlcCisJICBYIyNfZltfaV0gPSBYIyNfZltfaS1fc2tpcF0gPDwgX3VwCQkJCVwKKwkJICAgICAgfCBYIyNfZltfaS1fc2tpcC0xXSA+PiBfZG93bjsJCQlcCisJWCMjX2ZbX2ktLV0gPSBYIyNfZlswXSA8PCBfdXA7IAkJCQkJXAorICAgICAgfQkJCQkJCQkJCVwKKyAgICBmb3IgKDsgX2kgPj0gMDsgLS1faSkJCQkJCQlcCisgICAgICBYIyNfZltfaV0gPSAwOwkJCQkJCQlcCisgIH0gd2hpbGUgKDApCisKKy8qIFRoaXMgb25lIHdhcyBicm9rZW4gdG9vICovCisjZGVmaW5lIF9GUF9GUkFDX1NSTF80KFgsTikJCQkJCQlcCisgIGRvIHsJCQkJCQkJCQlcCisgICAgX0ZQX0lfVFlQRSBfdXAsIF9kb3duLCBfc2tpcCwgX2k7CQkJCQlcCisgICAgX3NraXAgPSAoTikgLyBfRlBfV19UWVBFX1NJWkU7CQkJCQlcCisgICAgX2Rvd24gPSAoTikgJSBfRlBfV19UWVBFX1NJWkU7CQkJCQlcCisgICAgX3VwID0gX0ZQX1dfVFlQRV9TSVpFIC0gX2Rvd247CQkJCQlcCisgICAgaWYgKCFfZG93bikJCQkJCQkJCVwKKyAgICAgIGZvciAoX2kgPSAwOyBfaSA8PSAzLV9za2lwOyArK19pKQkJCQkJXAorCVgjI19mW19pXSA9IFgjI19mW19pK19za2lwXTsJCQkJCVwKKyAgICBlbHNlCQkJCQkJCQlcCisgICAgICB7CQkJCQkJCQkJXAorCWZvciAoX2kgPSAwOyBfaSA8IDMtX3NraXA7ICsrX2kpCQkJCVwKKwkgIFgjI19mW19pXSA9IFgjI19mW19pK19za2lwXSA+PiBfZG93bgkJCQlcCisJCSAgICAgIHwgWCMjX2ZbX2krX3NraXArMV0gPDwgX3VwOwkJCVwKKwlYIyNfZltfaSsrXSA9IFgjI19mWzNdID4+IF9kb3duOwkJCQlcCisgICAgICB9CQkJCQkJCQkJXAorICAgIGZvciAoOyBfaSA8IDQ7ICsrX2kpCQkJCQkJXAorICAgICAgWCMjX2ZbX2ldID0gMDsJCQkJCQkJXAorICB9IHdoaWxlICgwKQorCisKKy8qIFJpZ2h0IHNoaWZ0IHdpdGggc3RpY2t5LWxzYi4gCisgKiBXaGF0IHRoaXMgYWN0dWFsbHkgbWVhbnMgaXMgdGhhdCB3ZSBkbyBhIHN0YW5kYXJkIHJpZ2h0LXNoaWZ0LAorICogYnV0IHRoYXQgaWYgYW55IG9mIHRoZSBiaXRzIHRoYXQgZmFsbCBvZmYgdGhlIHJpZ2h0IGhhbmQgc2lkZQorICogd2VyZSBvbmUgdGhlbiB3ZSBhbHdheXMgc2V0IHRoZSBMU2JpdC4KKyAqLworI2RlZmluZSBfRlBfRlJBQ19TUlNfNChYLE4sc2l6ZSkJCQkJCVwKKyAgZG8gewkJCQkJCQkJCVwKKyAgICBfRlBfSV9UWVBFIF91cCwgX2Rvd24sIF9za2lwLCBfaTsJCQkJCVwKKyAgICBfRlBfV19UWVBFIF9zOwkJCQkJCQlcCisgICAgX3NraXAgPSAoTikgLyBfRlBfV19UWVBFX1NJWkU7CQkJCQlcCisgICAgX2Rvd24gPSAoTikgJSBfRlBfV19UWVBFX1NJWkU7CQkJCQlcCisgICAgX3VwID0gX0ZQX1dfVFlQRV9TSVpFIC0gX2Rvd247CQkJCQlcCisgICAgZm9yIChfcyA9IF9pID0gMDsgX2kgPCBfc2tpcDsgKytfaSkJCQkJCVwKKyAgICAgIF9zIHw9IFgjI19mW19pXTsJCQkJCQkJXAorICAgIF9zIHw9IFgjI19mW19pXSA8PCBfdXA7CQkJCQkJXAorLyogcyBpcyBub3cgIT0gMCBpZiB3ZSB3YW50IHRvIHNldCB0aGUgTFNiaXQgKi8JCQkJXAorICAgIGlmICghX2Rvd24pCQkJCQkJCQlcCisgICAgICBmb3IgKF9pID0gMDsgX2kgPD0gMy1fc2tpcDsgKytfaSkJCQkJCVwKKwlYIyNfZltfaV0gPSBYIyNfZltfaStfc2tpcF07CQkJCQlcCisgICAgZWxzZQkJCQkJCQkJXAorICAgICAgewkJCQkJCQkJCVwKKwlmb3IgKF9pID0gMDsgX2kgPCAzLV9za2lwOyArK19pKQkJCQlcCisJICBYIyNfZltfaV0gPSBYIyNfZltfaStfc2tpcF0gPj4gX2Rvd24JCQkJXAorCQkgICAgICB8IFgjI19mW19pK19za2lwKzFdIDw8IF91cDsJCQlcCisJWCMjX2ZbX2krK10gPSBYIyNfZlszXSA+PiBfZG93bjsJCQkJXAorICAgICAgfQkJCQkJCQkJCVwKKyAgICBmb3IgKDsgX2kgPCA0OyArK19pKQkJCQkJCVwKKyAgICAgIFgjI19mW19pXSA9IDA7CQkJCQkJCVwKKyAgICAvKiBkb24ndCBmaXggdGhlIExTQiB1bnRpbCB0aGUgdmVyeSBlbmQgd2hlbiB3ZSdyZSBzdXJlIGZbMF0gaXMgc3RhYmxlICovCVwKKyAgICBYIyNfZlswXSB8PSAoX3MgIT0gMCk7CQkJCQkJXAorICB9IHdoaWxlICgwKQorCisjZGVmaW5lIF9GUF9GUkFDX0FERF80KFIsWCxZKQkJCQkJCVwKKyAgX19GUF9GUkFDX0FERF80KFIjI19mWzNdLCBSIyNfZlsyXSwgUiMjX2ZbMV0sIFIjI19mWzBdLAkJXAorCQkgIFgjI19mWzNdLCBYIyNfZlsyXSwgWCMjX2ZbMV0sIFgjI19mWzBdLAkJXAorCQkgIFkjI19mWzNdLCBZIyNfZlsyXSwgWSMjX2ZbMV0sIFkjI19mWzBdKQorCisjZGVmaW5lIF9GUF9GUkFDX1NVQl80KFIsWCxZKQkJCQkJCVwKKyAgX19GUF9GUkFDX1NVQl80KFIjI19mWzNdLCBSIyNfZlsyXSwgUiMjX2ZbMV0sIFIjI19mWzBdLAkJXAorCQkgIFgjI19mWzNdLCBYIyNfZlsyXSwgWCMjX2ZbMV0sIFgjI19mWzBdLAkJXAorCQkgIFkjI19mWzNdLCBZIyNfZlsyXSwgWSMjX2ZbMV0sIFkjI19mWzBdKQorCisjZGVmaW5lIF9GUF9GUkFDX0RFQ180KFgsWSkJCQkJCQlcCisgIF9fRlBfRlJBQ19ERUNfNChYIyNfZlszXSwgWCMjX2ZbMl0sIFgjI19mWzFdLCBYIyNfZlswXSwJCVwKKwkJICBZIyNfZlszXSwgWSMjX2ZbMl0sIFkjI19mWzFdLCBZIyNfZlswXSkKKworI2RlZmluZSBfRlBfRlJBQ19BRERJXzQoWCxJKQkJCQkJCVwKKyAgX19GUF9GUkFDX0FERElfNChYIyNfZlszXSwgWCMjX2ZbMl0sIFgjI19mWzFdLCBYIyNfZlswXSwgSSkKKworI2RlZmluZSBfRlBfWkVST0ZSQUNfNCAgMCwwLDAsMAorI2RlZmluZSBfRlBfTUlORlJBQ180ICAgMCwwLDAsMQorI2RlZmluZSBfRlBfTUFYRlJBQ180CSh+KF9GUF9XU19UWVBFKTApLCAofihfRlBfV1NfVFlQRSkwKSwgKH4oX0ZQX1dTX1RZUEUpMCksICh+KF9GUF9XU19UWVBFKTApCisKKyNkZWZpbmUgX0ZQX0ZSQUNfWkVST1BfNChYKSAgICAgKChYIyNfZlswXSB8IFgjI19mWzFdIHwgWCMjX2ZbMl0gfCBYIyNfZlszXSkgPT0gMCkKKyNkZWZpbmUgX0ZQX0ZSQUNfTkVHUF80KFgpICAgICAgKChfRlBfV1NfVFlQRSlYIyNfZlszXSA8IDApCisjZGVmaW5lIF9GUF9GUkFDX09WRVJQXzQoZnMsWCkgIChfRlBfRlJBQ19ISUdIXyMjZnMoWCkgJiBfRlBfT1ZFUkZMT1dfIyNmcykKKyNkZWZpbmUgX0ZQX0ZSQUNfQ0xFQVJfT1ZFUlBfNChmcyxYKSAgKF9GUF9GUkFDX0hJR0hfIyNmcyhYKSAmPSB+X0ZQX09WRVJGTE9XXyMjZnMpCisKKyNkZWZpbmUgX0ZQX0ZSQUNfRVFfNChYLFkpCQkJCVwKKyAoWCMjX2ZbMF0gPT0gWSMjX2ZbMF0gJiYgWCMjX2ZbMV0gPT0gWSMjX2ZbMV0JCVwKKyAgJiYgWCMjX2ZbMl0gPT0gWSMjX2ZbMl0gJiYgWCMjX2ZbM10gPT0gWSMjX2ZbM10pCisKKyNkZWZpbmUgX0ZQX0ZSQUNfR1RfNChYLFkpCQkJCVwKKyAoWCMjX2ZbM10gPiBZIyNfZlszXSB8fAkJCQlcCisgIChYIyNfZlszXSA9PSBZIyNfZlszXSAmJiAoWCMjX2ZbMl0gPiBZIyNfZlsyXSB8fAlcCisgICAoWCMjX2ZbMl0gPT0gWSMjX2ZbMl0gJiYgKFgjI19mWzFdID4gWSMjX2ZbMV0gfHwJXAorICAgIChYIyNfZlsxXSA9PSBZIyNfZlsxXSAmJiBYIyNfZlswXSA+IFkjI19mWzBdKQlcCisgICApKQkJCQkJCQlcCisgICkpCQkJCQkJCVwKKyApCisKKyNkZWZpbmUgX0ZQX0ZSQUNfR0VfNChYLFkpCQkJCVwKKyAoWCMjX2ZbM10gPiBZIyNfZlszXSB8fAkJCQlcCisgIChYIyNfZlszXSA9PSBZIyNfZlszXSAmJiAoWCMjX2ZbMl0gPiBZIyNfZlsyXSB8fAlcCisgICAoWCMjX2ZbMl0gPT0gWSMjX2ZbMl0gJiYgKFgjI19mWzFdID4gWSMjX2ZbMV0gfHwJXAorICAgIChYIyNfZlsxXSA9PSBZIyNfZlsxXSAmJiBYIyNfZlswXSA+PSBZIyNfZlswXSkJXAorICAgKSkJCQkJCQkJXAorICApKQkJCQkJCQlcCisgKQorCisKKyNkZWZpbmUgX0ZQX0ZSQUNfQ0xaXzQoUixYKQkJXAorICBkbyB7CQkJCQlcCisgICAgaWYgKFgjI19mWzNdKQkJCVwKKyAgICB7CQkJCQlcCisJX19GUF9DTFooUixYIyNfZlszXSk7CQlcCisgICAgfQkJCQkJXAorICAgIGVsc2UgaWYgKFgjI19mWzJdKQkJCVwKKyAgICB7CQkJCQlcCisJX19GUF9DTFooUixYIyNfZlsyXSk7CQlcCisJUiArPSBfRlBfV19UWVBFX1NJWkU7CQlcCisgICAgfQkJCQkJXAorICAgIGVsc2UgaWYgKFgjI19mWzFdKQkJCVwKKyAgICB7CQkJCQlcCisJX19GUF9DTFooUixYIyNfZlsyXSk7CQlcCisJUiArPSBfRlBfV19UWVBFX1NJWkUqMjsJCVwKKyAgICB9CQkJCQlcCisgICAgZWxzZQkJCQlcCisgICAgewkJCQkJXAorCV9fRlBfQ0xaKFIsWCMjX2ZbMF0pOwkJXAorCVIgKz0gX0ZQX1dfVFlQRV9TSVpFKjM7CQlcCisgICAgfQkJCQkJXAorICB9IHdoaWxlKDApCisKKworI2RlZmluZSBfRlBfVU5QQUNLX1JBV180KGZzLCBYLCB2YWwpCQkJCVwKKyAgZG8gewkJCQkJCQkJXAorICAgIHVuaW9uIF9GUF9VTklPTl8jI2ZzIF9mbG87IF9mbG8uZmx0ID0gKHZhbCk7CQlcCisgICAgWCMjX2ZbMF0gPSBfZmxvLmJpdHMuZnJhYzA7CQkJCQlcCisgICAgWCMjX2ZbMV0gPSBfZmxvLmJpdHMuZnJhYzE7CQkJCQlcCisgICAgWCMjX2ZbMl0gPSBfZmxvLmJpdHMuZnJhYzI7CQkJCQlcCisgICAgWCMjX2ZbM10gPSBfZmxvLmJpdHMuZnJhYzM7CQkJCQlcCisgICAgWCMjX2UgID0gX2Zsby5iaXRzLmV4cDsJCQkJCVwKKyAgICBYIyNfcyAgPSBfZmxvLmJpdHMuc2lnbjsJCQkJCVwKKyAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBfRlBfVU5QQUNLX1JBV180X1AoZnMsIFgsIHZhbCkJCQkJXAorICBkbyB7CQkJCQkJCQlcCisgICAgdW5pb24gX0ZQX1VOSU9OXyMjZnMgKl9mbG8gPQkJCQlcCisgICAgICAodW5pb24gX0ZQX1VOSU9OXyMjZnMgKikodmFsKTsJCQkJXAorCQkJCQkJCQlcCisgICAgWCMjX2ZbMF0gPSBfZmxvLT5iaXRzLmZyYWMwOwkJCQlcCisgICAgWCMjX2ZbMV0gPSBfZmxvLT5iaXRzLmZyYWMxOwkJCQlcCisgICAgWCMjX2ZbMl0gPSBfZmxvLT5iaXRzLmZyYWMyOwkJCQlcCisgICAgWCMjX2ZbM10gPSBfZmxvLT5iaXRzLmZyYWMzOwkJCQlcCisgICAgWCMjX2UgID0gX2Zsby0+Yml0cy5leHA7CQkJCQlcCisgICAgWCMjX3MgID0gX2Zsby0+Yml0cy5zaWduOwkJCQkJXAorICB9IHdoaWxlICgwKQorCisjZGVmaW5lIF9GUF9QQUNLX1JBV180KGZzLCB2YWwsIFgpCQkJCVwKKyAgZG8gewkJCQkJCQkJXAorICAgIHVuaW9uIF9GUF9VTklPTl8jI2ZzIF9mbG87CQkJCQlcCisgICAgX2Zsby5iaXRzLmZyYWMwID0gWCMjX2ZbMF07CQkJCQlcCisgICAgX2Zsby5iaXRzLmZyYWMxID0gWCMjX2ZbMV07CQkJCQlcCisgICAgX2Zsby5iaXRzLmZyYWMyID0gWCMjX2ZbMl07CQkJCQlcCisgICAgX2Zsby5iaXRzLmZyYWMzID0gWCMjX2ZbM107CQkJCQlcCisgICAgX2Zsby5iaXRzLmV4cCAgID0gWCMjX2U7CQkJCQlcCisgICAgX2Zsby5iaXRzLnNpZ24gID0gWCMjX3M7CQkJCQlcCisgICAgKHZhbCkgPSBfZmxvLmZsdDsJCQkJICAgCQlcCisgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgX0ZQX1BBQ0tfUkFXXzRfUChmcywgdmFsLCBYKQkJCQlcCisgIGRvIHsJCQkJCQkJCVwKKyAgICB1bmlvbiBfRlBfVU5JT05fIyNmcyAqX2ZsbyA9CQkJCVwKKyAgICAgICh1bmlvbiBfRlBfVU5JT05fIyNmcyAqKSh2YWwpOwkJCQlcCisJCQkJCQkJCVwKKyAgICBfZmxvLT5iaXRzLmZyYWMwID0gWCMjX2ZbMF07CQkJCVwKKyAgICBfZmxvLT5iaXRzLmZyYWMxID0gWCMjX2ZbMV07CQkJCVwKKyAgICBfZmxvLT5iaXRzLmZyYWMyID0gWCMjX2ZbMl07CQkJCVwKKyAgICBfZmxvLT5iaXRzLmZyYWMzID0gWCMjX2ZbM107CQkJCVwKKyAgICBfZmxvLT5iaXRzLmV4cCAgID0gWCMjX2U7CQkJCQlcCisgICAgX2Zsby0+Yml0cy5zaWduICA9IFgjI19zOwkJCQkJXAorICB9IHdoaWxlICgwKQorCisvKgorICogTXVsdGlwbGljYXRpb24gYWxnb3JpdGhtczoKKyAqLworCisvKiBHaXZlbiBhIDFXICogMVcgPT4gMlcgcHJpbWl0aXZlLCBkbyB0aGUgZXh0ZW5kZWQgbXVsdGlwbGljYXRpb24uICAqLworCisjZGVmaW5lIF9GUF9NVUxfTUVBVF80X3dpZGUod2ZyYWNiaXRzLCBSLCBYLCBZLCBkb2l0KQkJCSAgICBcCisgIGRvIHsJCQkJCQkJCQkgICAgXAorICAgIF9GUF9GUkFDX0RFQ0xfOChfeik7IF9GUF9GUkFDX0RFQ0xfMihfYik7IF9GUF9GUkFDX0RFQ0xfMihfYyk7CSAgICBcCisgICAgX0ZQX0ZSQUNfREVDTF8yKF9kKTsgX0ZQX0ZSQUNfREVDTF8yKF9lKTsgX0ZQX0ZSQUNfREVDTF8yKF9mKTsJICAgIFwKKwkJCQkJCQkJCSAgICBcCisgICAgZG9pdChfRlBfRlJBQ19XT1JEXzgoX3osMSksIF9GUF9GUkFDX1dPUkRfOChfeiwwKSwgWCMjX2ZbMF0sIFkjI19mWzBdKTsgXAorICAgIGRvaXQoX2JfZjEsIF9iX2YwLCBYIyNfZlswXSwgWSMjX2ZbMV0pOwkJCQkgICAgXAorICAgIGRvaXQoX2NfZjEsIF9jX2YwLCBYIyNfZlsxXSwgWSMjX2ZbMF0pOwkJCQkgICAgXAorICAgIGRvaXQoX2RfZjEsIF9kX2YwLCBYIyNfZlsxXSwgWSMjX2ZbMV0pOwkJCQkgICAgXAorICAgIGRvaXQoX2VfZjEsIF9lX2YwLCBYIyNfZlswXSwgWSMjX2ZbMl0pOwkJCQkgICAgXAorICAgIGRvaXQoX2ZfZjEsIF9mX2YwLCBYIyNfZlsyXSwgWSMjX2ZbMF0pOwkJCQkgICAgXAorICAgIF9fRlBfRlJBQ19BRERfMyhfRlBfRlJBQ19XT1JEXzgoX3osMyksX0ZQX0ZSQUNfV09SRF84KF96LDIpLAkgICAgXAorCQkgICAgX0ZQX0ZSQUNfV09SRF84KF96LDEpLCAwLF9iX2YxLF9iX2YwLAkJICAgIFwKKwkJICAgIDAsMCxfRlBfRlJBQ19XT1JEXzgoX3osMSkpOwkJCQkgICAgXAorICAgIF9fRlBfRlJBQ19BRERfMyhfRlBfRlJBQ19XT1JEXzgoX3osMyksX0ZQX0ZSQUNfV09SRF84KF96LDIpLAkgICAgXAorCQkgICAgX0ZQX0ZSQUNfV09SRF84KF96LDEpLCAwLF9jX2YxLF9jX2YwLAkJICAgIFwKKwkJICAgIF9GUF9GUkFDX1dPUkRfOChfeiwzKSxfRlBfRlJBQ19XT1JEXzgoX3osMiksCSAgICBcCisJCSAgICBfRlBfRlJBQ19XT1JEXzgoX3osMSkpOwkJCQkgICAgXAorICAgIF9fRlBfRlJBQ19BRERfMyhfRlBfRlJBQ19XT1JEXzgoX3osNCksX0ZQX0ZSQUNfV09SRF84KF96LDMpLAkgICAgXAorCQkgICAgX0ZQX0ZSQUNfV09SRF84KF96LDIpLCAwLF9kX2YxLF9kX2YwLAkJICAgIFwKKwkJICAgIDAsX0ZQX0ZSQUNfV09SRF84KF96LDMpLF9GUF9GUkFDX1dPUkRfOChfeiwyKSk7CSAgICBcCisgICAgX19GUF9GUkFDX0FERF8zKF9GUF9GUkFDX1dPUkRfOChfeiw0KSxfRlBfRlJBQ19XT1JEXzgoX3osMyksCSAgICBcCisJCSAgICBfRlBfRlJBQ19XT1JEXzgoX3osMiksIDAsX2VfZjEsX2VfZjAsCQkgICAgXAorCQkgICAgX0ZQX0ZSQUNfV09SRF84KF96LDQpLF9GUF9GUkFDX1dPUkRfOChfeiwzKSwJICAgIFwKKwkJICAgIF9GUF9GUkFDX1dPUkRfOChfeiwyKSk7CQkJCSAgICBcCisgICAgX19GUF9GUkFDX0FERF8zKF9GUF9GUkFDX1dPUkRfOChfeiw0KSxfRlBfRlJBQ19XT1JEXzgoX3osMyksCSAgICBcCisJCSAgICBfRlBfRlJBQ19XT1JEXzgoX3osMiksIDAsX2ZfZjEsX2ZfZjAsCQkgICAgXAorCQkgICAgX0ZQX0ZSQUNfV09SRF84KF96LDQpLF9GUF9GUkFDX1dPUkRfOChfeiwzKSwJICAgIFwKKwkJICAgIF9GUF9GUkFDX1dPUkRfOChfeiwyKSk7CQkJCSAgICBcCisgICAgZG9pdChfYl9mMSwgX2JfZjAsIFgjI19mWzBdLCBZIyNfZlszXSk7CQkJCSAgICBcCisgICAgZG9pdChfY19mMSwgX2NfZjAsIFgjI19mWzNdLCBZIyNfZlswXSk7CQkJCSAgICBcCisgICAgZG9pdChfZF9mMSwgX2RfZjAsIFgjI19mWzFdLCBZIyNfZlsyXSk7CQkJCSAgICBcCisgICAgZG9pdChfZV9mMSwgX2VfZjAsIFgjI19mWzJdLCBZIyNfZlsxXSk7CQkJCSAgICBcCisgICAgX19GUF9GUkFDX0FERF8zKF9GUF9GUkFDX1dPUkRfOChfeiw1KSxfRlBfRlJBQ19XT1JEXzgoX3osNCksCSAgICBcCisJCSAgICBfRlBfRlJBQ19XT1JEXzgoX3osMyksIDAsX2JfZjEsX2JfZjAsCQkgICAgXAorCQkgICAgMCxfRlBfRlJBQ19XT1JEXzgoX3osNCksX0ZQX0ZSQUNfV09SRF84KF96LDMpKTsJICAgIFwKKyAgICBfX0ZQX0ZSQUNfQUREXzMoX0ZQX0ZSQUNfV09SRF84KF96LDUpLF9GUF9GUkFDX1dPUkRfOChfeiw0KSwJICAgIFwKKwkJICAgIF9GUF9GUkFDX1dPUkRfOChfeiwzKSwgMCxfY19mMSxfY19mMCwJCSAgICBcCisJCSAgICBfRlBfRlJBQ19XT1JEXzgoX3osNSksX0ZQX0ZSQUNfV09SRF84KF96LDQpLAkgICAgXAorCQkgICAgX0ZQX0ZSQUNfV09SRF84KF96LDMpKTsJCQkJICAgIFwKKyAgICBfX0ZQX0ZSQUNfQUREXzMoX0ZQX0ZSQUNfV09SRF84KF96LDUpLF9GUF9GUkFDX1dPUkRfOChfeiw0KSwJICAgIFwKKwkJICAgIF9GUF9GUkFDX1dPUkRfOChfeiwzKSwgMCxfZF9mMSxfZF9mMCwJCSAgICBcCisJCSAgICBfRlBfRlJBQ19XT1JEXzgoX3osNSksX0ZQX0ZSQUNfV09SRF84KF96LDQpLAkgICAgXAorCQkgICAgX0ZQX0ZSQUNfV09SRF84KF96LDMpKTsJCQkJICAgIFwKKyAgICBfX0ZQX0ZSQUNfQUREXzMoX0ZQX0ZSQUNfV09SRF84KF96LDUpLF9GUF9GUkFDX1dPUkRfOChfeiw0KSwJICAgIFwKKwkJICAgIF9GUF9GUkFDX1dPUkRfOChfeiwzKSwgMCxfZV9mMSxfZV9mMCwJCSAgICBcCisJCSAgICBfRlBfRlJBQ19XT1JEXzgoX3osNSksX0ZQX0ZSQUNfV09SRF84KF96LDQpLAkgICAgXAorCQkgICAgX0ZQX0ZSQUNfV09SRF84KF96LDMpKTsJCQkJICAgIFwKKyAgICBkb2l0KF9iX2YxLCBfYl9mMCwgWCMjX2ZbMl0sIFkjI19mWzJdKTsJCQkJICAgIFwKKyAgICBkb2l0KF9jX2YxLCBfY19mMCwgWCMjX2ZbMV0sIFkjI19mWzNdKTsJCQkJICAgIFwKKyAgICBkb2l0KF9kX2YxLCBfZF9mMCwgWCMjX2ZbM10sIFkjI19mWzFdKTsJCQkJICAgIFwKKyAgICBkb2l0KF9lX2YxLCBfZV9mMCwgWCMjX2ZbMl0sIFkjI19mWzNdKTsJCQkJICAgIFwKKyAgICBkb2l0KF9mX2YxLCBfZl9mMCwgWCMjX2ZbM10sIFkjI19mWzJdKTsJCQkJICAgIFwKKyAgICBfX0ZQX0ZSQUNfQUREXzMoX0ZQX0ZSQUNfV09SRF84KF96LDYpLF9GUF9GUkFDX1dPUkRfOChfeiw1KSwJICAgIFwKKwkJICAgIF9GUF9GUkFDX1dPUkRfOChfeiw0KSwgMCxfYl9mMSxfYl9mMCwJCSAgICBcCisJCSAgICAwLF9GUF9GUkFDX1dPUkRfOChfeiw1KSxfRlBfRlJBQ19XT1JEXzgoX3osNCkpOwkgICAgXAorICAgIF9fRlBfRlJBQ19BRERfMyhfRlBfRlJBQ19XT1JEXzgoX3osNiksX0ZQX0ZSQUNfV09SRF84KF96LDUpLAkgICAgXAorCQkgICAgX0ZQX0ZSQUNfV09SRF84KF96LDQpLCAwLF9jX2YxLF9jX2YwLAkJICAgIFwKKwkJICAgIF9GUF9GUkFDX1dPUkRfOChfeiw2KSxfRlBfRlJBQ19XT1JEXzgoX3osNSksCSAgICBcCisJCSAgICBfRlBfRlJBQ19XT1JEXzgoX3osNCkpOwkJCQkgICAgXAorICAgIF9fRlBfRlJBQ19BRERfMyhfRlBfRlJBQ19XT1JEXzgoX3osNiksX0ZQX0ZSQUNfV09SRF84KF96LDUpLAkgICAgXAorCQkgICAgX0ZQX0ZSQUNfV09SRF84KF96LDQpLCAwLF9kX2YxLF9kX2YwLAkJICAgIFwKKwkJICAgIF9GUF9GUkFDX1dPUkRfOChfeiw2KSxfRlBfRlJBQ19XT1JEXzgoX3osNSksCSAgICBcCisJCSAgICBfRlBfRlJBQ19XT1JEXzgoX3osNCkpOwkJCQkgICAgXAorICAgIF9fRlBfRlJBQ19BRERfMyhfRlBfRlJBQ19XT1JEXzgoX3osNyksX0ZQX0ZSQUNfV09SRF84KF96LDYpLAkgICAgXAorCQkgICAgX0ZQX0ZSQUNfV09SRF84KF96LDUpLCAwLF9lX2YxLF9lX2YwLAkJICAgIFwKKwkJICAgIDAsX0ZQX0ZSQUNfV09SRF84KF96LDYpLF9GUF9GUkFDX1dPUkRfOChfeiw1KSk7CSAgICBcCisgICAgX19GUF9GUkFDX0FERF8zKF9GUF9GUkFDX1dPUkRfOChfeiw3KSxfRlBfRlJBQ19XT1JEXzgoX3osNiksCSAgICBcCisJCSAgICBfRlBfRlJBQ19XT1JEXzgoX3osNSksIDAsX2ZfZjEsX2ZfZjAsCQkgICAgXAorCQkgICAgX0ZQX0ZSQUNfV09SRF84KF96LDcpLF9GUF9GUkFDX1dPUkRfOChfeiw2KSwJICAgIFwKKwkJICAgIF9GUF9GUkFDX1dPUkRfOChfeiw1KSk7CQkJCSAgICBcCisgICAgZG9pdChfYl9mMSwgX2JfZjAsIFgjI19mWzNdLCBZIyNfZlszXSk7CQkJCSAgICBcCisgICAgX19GUF9GUkFDX0FERF8yKF9GUF9GUkFDX1dPUkRfOChfeiw3KSxfRlBfRlJBQ19XT1JEXzgoX3osNiksCSAgICBcCisJCSAgICBfYl9mMSxfYl9mMCwJCQkJCSAgICBcCisJCSAgICBfRlBfRlJBQ19XT1JEXzgoX3osNyksX0ZQX0ZSQUNfV09SRF84KF96LDYpKTsJICAgIFwKKwkJCQkJCQkJCSAgICBcCisgICAgLyogTm9ybWFsaXplIHNpbmNlIHdlIGtub3cgd2hlcmUgdGhlIG1zYiBvZiB0aGUgbXVsdGlwbGljYW5kcwkgICAgXAorICAgICAgIHdlcmUgKGJpdCBCKSwgd2Uga25vdyB0aGF0IHRoZSBtc2Igb2YgdGhlIG9mIHRoZSBwcm9kdWN0IGlzCSAgICBcCisgICAgICAgYXQgZWl0aGVyIDJCIG9yIDJCLTEuICAqLwkJCQkJICAgIFwKKyAgICBfRlBfRlJBQ19TUlNfOChfeiwgd2ZyYWNiaXRzLTEsIDIqd2ZyYWNiaXRzKTsJCQkgICAgXAorICAgIF9fRlBfRlJBQ19TRVRfNChSLCBfRlBfRlJBQ19XT1JEXzgoX3osMyksIF9GUF9GUkFDX1dPUkRfOChfeiwyKSwJICAgIFwKKwkJICAgIF9GUF9GUkFDX1dPUkRfOChfeiwxKSwgX0ZQX0ZSQUNfV09SRF84KF96LDApKTsJICAgIFwKKyAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBfRlBfTVVMX01FQVRfNF9nbXAod2ZyYWNiaXRzLCBSLCBYLCBZKQkJCQkgICAgXAorICBkbyB7CQkJCQkJCQkJICAgIFwKKyAgICBfRlBfRlJBQ19ERUNMXzgoX3opOwkJCQkJCSAgICBcCisJCQkJCQkJCQkgICAgXAorICAgIG1wbl9tdWxfbihfel9mLCBfeF9mLCBfeV9mLCA0KTsJCQkJCSAgICBcCisJCQkJCQkJCQkgICAgXAorICAgIC8qIE5vcm1hbGl6ZSBzaW5jZSB3ZSBrbm93IHdoZXJlIHRoZSBtc2Igb2YgdGhlIG11bHRpcGxpY2FuZHMJICAgIFwKKyAgICAgICB3ZXJlIChiaXQgQiksIHdlIGtub3cgdGhhdCB0aGUgbXNiIG9mIHRoZSBvZiB0aGUgcHJvZHVjdCBpcwkgICAgXAorICAgICAgIGF0IGVpdGhlciAyQiBvciAyQi0xLiAgKi8JCQkJCSAgICBcCisgICAgX0ZQX0ZSQUNfU1JTXzgoX3osIHdmcmFjYml0cy0xLCAyKndmcmFjYml0cyk7CSAJCSAgICBcCisgICAgX19GUF9GUkFDX1NFVF80KFIsIF9GUF9GUkFDX1dPUkRfOChfeiwzKSwgX0ZQX0ZSQUNfV09SRF84KF96LDIpLAkgICAgXAorCQkgICAgX0ZQX0ZSQUNfV09SRF84KF96LDEpLCBfRlBfRlJBQ19XT1JEXzgoX3osMCkpOwkgICAgXAorICB9IHdoaWxlICgwKQorCisvKgorICogSGVscGVyIHV0aWxpdHkgZm9yIF9GUF9ESVZfTUVBVF80X3VkaXY6CisgKiBwcHBwID0gbSAqIG5ubgorICovCisjZGVmaW5lIHVtdWxfcHBwcG1ubm4ocDMscDIscDEscDAsbSxuMixuMSxuMCkJCQkJICAgIFwKKyAgZG8gewkJCQkJCQkJCSAgICBcCisgICAgVVd0eXBlIF90OwkJCQkJCQkJICAgIFwKKyAgICB1bXVsX3BwbW0ocDEscDAsbSxuMCk7CQkJCQkJICAgIFwKKyAgICB1bXVsX3BwbW0ocDIsX3QsbSxuMSk7CQkJCQkJICAgIFwKKyAgICBfX0ZQX0ZSQUNfQURESV8yKHAyLHAxLF90KTsJCQkJCQkgICAgXAorICAgIHVtdWxfcHBtbShwMyxfdCxtLG4yKTsJCQkJCQkgICAgXAorICAgIF9fRlBfRlJBQ19BRERJXzIocDMscDIsX3QpOwkJCQkJCSAgICBcCisgIH0gd2hpbGUgKDApCisKKy8qCisgKiBEaXZpc2lvbiBhbGdvcml0aG1zOgorICovCisKKyNkZWZpbmUgX0ZQX0RJVl9NRUFUXzRfdWRpdihmcywgUiwgWCwgWSkJCQkJICAgIFwKKyAgZG8gewkJCQkJCQkJCSAgICBcCisgICAgaW50IF9pOwkJCQkJCQkJICAgIFwKKyAgICBfRlBfRlJBQ19ERUNMXzQoX24pOyBfRlBfRlJBQ19ERUNMXzQoX20pOwkJCQkgICAgXAorICAgIF9GUF9GUkFDX1NFVF80KF9uLCBfRlBfWkVST0ZSQUNfNCk7CQkJCQkgICAgXAorICAgIGlmIChfRlBfRlJBQ19HVF80KFgsIFkpKQkJCQkJCSAgICBcCisgICAgICB7CQkJCQkJCQkJICAgIFwKKwlfbl9mWzNdID0gWCMjX2ZbMF0gPDwgKF9GUF9XX1RZUEVfU0laRSAtIDEpOwkJCSAgICBcCisJX0ZQX0ZSQUNfU1JMXzQoWCwgMSk7CQkJCQkJICAgIFwKKyAgICAgIH0JCQkJCQkJCQkgICAgXAorICAgIGVsc2UJCQkJCQkJCSAgICBcCisgICAgICBSIyNfZS0tOwkJCQkJCQkJICAgIFwKKwkJCQkJCQkJCSAgICBcCisgICAgLyogTm9ybWFsaXplLCBpLmUuIG1ha2UgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IG9mIHRoZSAJCSAgICBcCisgICAgICAgZGVub21pbmF0b3Igc2V0LiAqLwkJCQkJCSAgICBcCisgICAgX0ZQX0ZSQUNfU0xMXzQoWSwgX0ZQX1dGUkFDWEJJVFNfIyNmcyk7CQkJCSAgICBcCisJCQkJCQkJCQkgICAgXAorICAgIGZvciAoX2kgPSAzOyA7IF9pLS0pCQkJCQkJICAgIFwKKyAgICAgIHsJCQkJCQkJCQkgICAgXAorICAgICAgICBpZiAoWCMjX2ZbM10gPT0gWSMjX2ZbM10pCQkJCQkgICAgXAorICAgICAgICAgIHsJCQkJCQkJCSAgICBcCisgICAgICAgICAgICAvKiBUaGlzIGlzIGEgc3BlY2lhbCBjYXNlLCBub3QgYW4gb3B0aW1pemF0aW9uCQkgICAgXAorICAgICAgICAgICAgICAgKFgjI19mWzNdL1kjI19mWzNdIHdvdWxkIG5vdCBmaXQgaW50byBVV3R5cGUpLgkJICAgIFwKKyAgICAgICAgICAgICAgIEFzIFgjIyBpcyBndWFyYW50ZWVkIHRvIGJlIDwgWSwgIFIjI19mW19pXSBjYW4gYmUgZWl0aGVyCSAgICBcCisgICAgICAgICAgICAgICAoVVd0eXBlKS0xIG9yIChVV3R5cGUpLTIuICAqLwkJCQkgICAgXAorICAgICAgICAgICAgUiMjX2ZbX2ldID0gLTE7CQkJCQkJICAgIFwKKyAgICAgICAgICAgIGlmICghX2kpCQkJCQkJCSAgICBcCisJICAgICAgYnJlYWs7CQkJCQkJCSAgICBcCisgICAgICAgICAgICBfX0ZQX0ZSQUNfU1VCXzQoWCMjX2ZbM10sIFgjI19mWzJdLCBYIyNfZlsxXSwgWCMjX2ZbMF0sCSAgICBcCisJCQkgICAgWSMjX2ZbMl0sIFkjI19mWzFdLCBZIyNfZlswXSwgMCwJCSAgICBcCisJCQkgICAgWCMjX2ZbMl0sIFgjI19mWzFdLCBYIyNfZlswXSwgX25fZltfaV0pOwkgICAgXAorICAgICAgICAgICAgX0ZQX0ZSQUNfU1VCXzQoWCwgWSwgWCk7CQkJCQkgICAgXAorICAgICAgICAgICAgaWYgKFgjI19mWzNdID4gWSMjX2ZbM10pCQkJCQkgICAgXAorICAgICAgICAgICAgICB7CQkJCQkJCQkgICAgXAorICAgICAgICAgICAgICAgIFIjI19mW19pXSA9IC0yOwkJCQkJCSAgICBcCisgICAgICAgICAgICAgICAgX0ZQX0ZSQUNfQUREXzQoWCwgWSwgWCk7CQkJCSAgICBcCisgICAgICAgICAgICAgIH0JCQkJCQkJCSAgICBcCisgICAgICAgICAgfQkJCQkJCQkJICAgIFwKKyAgICAgICAgZWxzZQkJCQkJCQkJICAgIFwKKyAgICAgICAgICB7CQkJCQkJCQkgICAgXAorICAgICAgICAgICAgdWRpdl9xcm5uZChSIyNfZltfaV0sIFgjI19mWzNdLCBYIyNfZlszXSwgWCMjX2ZbMl0sIFkjI19mWzNdKTsgIFwKKyAgICAgICAgICAgIHVtdWxfcHBwcG1ubm4oX21fZlszXSwgX21fZlsyXSwgX21fZlsxXSwgX21fZlswXSwJCSAgICBcCisJCQkgIFIjI19mW19pXSwgWSMjX2ZbMl0sIFkjI19mWzFdLCBZIyNfZlswXSk7CSAgICBcCisgICAgICAgICAgICBYIyNfZlsyXSA9IFgjI19mWzFdOwkJCQkJICAgIFwKKyAgICAgICAgICAgIFgjI19mWzFdID0gWCMjX2ZbMF07CQkJCQkgICAgXAorICAgICAgICAgICAgWCMjX2ZbMF0gPSBfbl9mW19pXTsJCQkJCSAgICBcCisgICAgICAgICAgICBpZiAoX0ZQX0ZSQUNfR1RfNChfbSwgWCkpCQkJCQkgICAgXAorICAgICAgICAgICAgICB7CQkJCQkJCQkgICAgXAorICAgICAgICAgICAgICAgIFIjI19mW19pXS0tOwkJCQkJCSAgICBcCisgICAgICAgICAgICAgICAgX0ZQX0ZSQUNfQUREXzQoWCwgWSwgWCk7CQkJCSAgICBcCisgICAgICAgICAgICAgICAgaWYgKF9GUF9GUkFDX0dFXzQoWCwgWSkgJiYgX0ZQX0ZSQUNfR1RfNChfbSwgWCkpCSAgICBcCisgICAgICAgICAgICAgICAgICB7CQkJCQkJCSAgICBcCisJCSAgICBSIyNfZltfaV0tLTsJCQkJCSAgICBcCisJCSAgICBfRlBfRlJBQ19BRERfNChYLCBZLCBYKTsJCQkJICAgIFwKKyAgICAgICAgICAgICAgICAgIH0JCQkJCQkJICAgIFwKKyAgICAgICAgICAgICAgfQkJCQkJCQkJICAgIFwKKyAgICAgICAgICAgIF9GUF9GUkFDX0RFQ180KFgsIF9tKTsJCQkJCSAgICBcCisgICAgICAgICAgICBpZiAoIV9pKQkJCQkJCQkgICAgXAorCSAgICAgIHsJCQkJCQkJCSAgICBcCisJCWlmICghX0ZQX0ZSQUNfRVFfNChYLCBfbSkpCQkJCSAgICBcCisJCSAgUiMjX2ZbMF0gfD0gX0ZQX1dPUktfU1RJQ0tZOwkJCQkgICAgXAorCQlicmVhazsJCQkJCQkJICAgIFwKKwkgICAgICB9CQkJCQkJCQkgICAgXAorICAgICAgICAgIH0JCQkJCQkJCSAgICBcCisgICAgICB9CQkJCQkJCQkJICAgIFwKKyAgfSB3aGlsZSAoMCkKKworCisvKgorICogU3F1YXJlIHJvb3QgYWxnb3JpdGhtczoKKyAqIFdlIGhhdmUganVzdCBvbmUgcmlnaHQgbm93LCBtYXliZSBOZXd0b24gYXBwcm94aW1hdGlvbgorICogc2hvdWxkIGJlIGFkZGVkIGZvciB0aG9zZSBtYWNoaW5lcyB3aGVyZSBkaXZpc2lvbiBpcyBmYXN0LgorICovCisgCisjZGVmaW5lIF9GUF9TUVJUX01FQVRfNChSLCBTLCBULCBYLCBxKQkJCQlcCisgIGRvIHsJCQkJCQkJCVwKKyAgICB3aGlsZSAocSkJCQkJCQkJXAorICAgICAgewkJCQkJCQkJXAorCVQjI19mWzNdID0gUyMjX2ZbM10gKyBxOwkJCQlcCisJaWYgKFQjI19mWzNdIDw9IFgjI19mWzNdKQkJCQlcCisJICB7CQkJCQkJCVwKKwkgICAgUyMjX2ZbM10gPSBUIyNfZlszXSArIHE7CQkJCVwKKwkgICAgWCMjX2ZbM10gLT0gVCMjX2ZbM107CQkJCVwKKwkgICAgUiMjX2ZbM10gKz0gcTsJCQkJCVwKKwkgIH0JCQkJCQkJXAorCV9GUF9GUkFDX1NMTF80KFgsIDEpOwkJCQkJXAorCXEgPj49IDE7CQkJCQkJXAorICAgICAgfQkJCQkJCQkJXAorICAgIHEgPSAoX0ZQX1dfVFlQRSkxIDw8IChfRlBfV19UWVBFX1NJWkUgLSAxKTsJCQlcCisgICAgd2hpbGUgKHEpCQkJCQkJCVwKKyAgICAgIHsJCQkJCQkJCVwKKwlUIyNfZlsyXSA9IFMjI19mWzJdICsgcTsJCQkJXAorCVQjI19mWzNdID0gUyMjX2ZbM107CQkJCQlcCisJaWYgKFQjI19mWzNdIDwgWCMjX2ZbM10gfHwgCQkJCVwKKwkgICAgKFQjI19mWzNdID09IFgjI19mWzNdICYmIFQjI19mWzJdIDw9IFgjI19mWzJdKSkJXAorCSAgewkJCQkJCQlcCisJICAgIFMjI19mWzJdID0gVCMjX2ZbMl0gKyBxOwkJCQlcCisJICAgIFMjI19mWzNdICs9IChUIyNfZlsyXSA+IFMjI19mWzJdKTsJCQlcCisJICAgIF9fRlBfRlJBQ19ERUNfMihYIyNfZlszXSwgWCMjX2ZbMl0sCQkJXAorCQkJICAgIFQjI19mWzNdLCBUIyNfZlsyXSk7CQlcCisJICAgIFIjI19mWzJdICs9IHE7CQkJCQlcCisJICB9CQkJCQkJCVwKKwlfRlBfRlJBQ19TTExfNChYLCAxKTsJCQkJCVwKKwlxID4+PSAxOwkJCQkJCVwKKyAgICAgIH0JCQkJCQkJCVwKKyAgICBxID0gKF9GUF9XX1RZUEUpMSA8PCAoX0ZQX1dfVFlQRV9TSVpFIC0gMSk7CQkJXAorICAgIHdoaWxlIChxKQkJCQkJCQlcCisgICAgICB7CQkJCQkJCQlcCisJVCMjX2ZbMV0gPSBTIyNfZlsxXSArIHE7CQkJCVwKKwlUIyNfZlsyXSA9IFMjI19mWzJdOwkJCQkJXAorCVQjI19mWzNdID0gUyMjX2ZbM107CQkJCQlcCisJaWYgKFQjI19mWzNdIDwgWCMjX2ZbM10gfHwgCQkJCVwKKwkgICAgKFQjI19mWzNdID09IFgjI19mWzNdICYmIChUIyNfZlsyXSA8IFgjI19mWzJdIHx8CVwKKwkgICAgIChUIyNfZlsyXSA9PSBYIyNfZlsyXSAmJiBUIyNfZlsxXSA8PSBYIyNfZlsxXSkpKSkJXAorCSAgewkJCQkJCQlcCisJICAgIFMjI19mWzFdID0gVCMjX2ZbMV0gKyBxOwkJCQlcCisJICAgIFMjI19mWzJdICs9IChUIyNfZlsxXSA+IFMjI19mWzFdKTsJCQlcCisJICAgIFMjI19mWzNdICs9IChUIyNfZlsyXSA+IFMjI19mWzJdKTsJCQlcCisJICAgIF9fRlBfRlJBQ19ERUNfMyhYIyNfZlszXSwgWCMjX2ZbMl0sIFgjI19mWzFdLAlcCisJICAgIAkJICAgIFQjI19mWzNdLCBUIyNfZlsyXSwgVCMjX2ZbMV0pOwlcCisJICAgIFIjI19mWzFdICs9IHE7CQkJCQlcCisJICB9CQkJCQkJCVwKKwlfRlBfRlJBQ19TTExfNChYLCAxKTsJCQkJCVwKKwlxID4+PSAxOwkJCQkJCVwKKyAgICAgIH0JCQkJCQkJCVwKKyAgICBxID0gKF9GUF9XX1RZUEUpMSA8PCAoX0ZQX1dfVFlQRV9TSVpFIC0gMSk7CQkJXAorICAgIHdoaWxlIChxICE9IF9GUF9XT1JLX1JPVU5EKQkJCQkJXAorICAgICAgewkJCQkJCQkJXAorCVQjI19mWzBdID0gUyMjX2ZbMF0gKyBxOwkJCQlcCisJVCMjX2ZbMV0gPSBTIyNfZlsxXTsJCQkJCVwKKwlUIyNfZlsyXSA9IFMjI19mWzJdOwkJCQkJXAorCVQjI19mWzNdID0gUyMjX2ZbM107CQkJCQlcCisJaWYgKF9GUF9GUkFDX0dFXzQoWCxUKSkJCQkJCVwKKwkgIHsJCQkJCQkJXAorCSAgICBTIyNfZlswXSA9IFQjI19mWzBdICsgcTsJCQkJXAorCSAgICBTIyNfZlsxXSArPSAoVCMjX2ZbMF0gPiBTIyNfZlswXSk7CQkJXAorCSAgICBTIyNfZlsyXSArPSAoVCMjX2ZbMV0gPiBTIyNfZlsxXSk7CQkJXAorCSAgICBTIyNfZlszXSArPSAoVCMjX2ZbMl0gPiBTIyNfZlsyXSk7CQkJXAorCSAgICBfRlBfRlJBQ19ERUNfNChYLCBUKTsJCQkJXAorCSAgICBSIyNfZlswXSArPSBxOwkJCQkJXAorCSAgfQkJCQkJCQlcCisJX0ZQX0ZSQUNfU0xMXzQoWCwgMSk7CQkJCQlcCisJcSA+Pj0gMTsJCQkJCQlcCisgICAgICB9CQkJCQkJCQlcCisgICAgaWYgKCFfRlBfRlJBQ19aRVJPUF80KFgpKQkJCQkJXAorICAgICAgewkJCQkJCQkJXAorCWlmIChfRlBfRlJBQ19HVF80KFgsUykpCQkJCQlcCisJICBSIyNfZlswXSB8PSBfRlBfV09SS19ST1VORDsJCQkJXAorCVIjI19mWzBdIHw9IF9GUF9XT1JLX1NUSUNLWTsJCQkJXAorICAgICAgfQkJCQkJCQkJXAorICB9IHdoaWxlICgwKQorCisKKy8qCisgKiBJbnRlcm5hbHMgCisgKi8KKworI2RlZmluZSBfX0ZQX0ZSQUNfU0VUXzQoWCxJMyxJMixJMSxJMCkJCQkJCVwKKyAgKFgjI19mWzNdID0gSTMsIFgjI19mWzJdID0gSTIsIFgjI19mWzFdID0gSTEsIFgjI19mWzBdID0gSTApCisKKyNpZm5kZWYgX19GUF9GUkFDX0FERF8zCisjZGVmaW5lIF9fRlBfRlJBQ19BRERfMyhyMixyMSxyMCx4Mix4MSx4MCx5Mix5MSx5MCkJCVwKKyAgZG8gewkJCQkJCQkJXAorICAgIGludCBfYzEsIF9jMjsJCQkJCQkJXAorICAgIHIwID0geDAgKyB5MDsJCQkJCQlcCisgICAgX2MxID0gcjAgPCB4MDsJCQkJCQlcCisgICAgcjEgPSB4MSArIHkxOwkJCQkJCVwKKyAgICBfYzIgPSByMSA8IHgxOwkJCQkJCVwKKyAgICByMSArPSBfYzE7CQkJCQkJCVwKKyAgICBfYzIgfD0gcjEgPCBfYzE7CQkJCQkJXAorICAgIHIyID0geDIgKyB5MiArIF9jMjsJCQkJCQlcCisgIH0gd2hpbGUgKDApCisjZW5kaWYKKworI2lmbmRlZiBfX0ZQX0ZSQUNfQUREXzQKKyNkZWZpbmUgX19GUF9GUkFDX0FERF80KHIzLHIyLHIxLHIwLHgzLHgyLHgxLHgwLHkzLHkyLHkxLHkwKQlcCisgIGRvIHsJCQkJCQkJCVwKKyAgICBpbnQgX2MxLCBfYzIsIF9jMzsJCQkJCQlcCisgICAgcjAgPSB4MCArIHkwOwkJCQkJCVwKKyAgICBfYzEgPSByMCA8IHgwOwkJCQkJCVwKKyAgICByMSA9IHgxICsgeTE7CQkJCQkJXAorICAgIF9jMiA9IHIxIDwgeDE7CQkJCQkJXAorICAgIHIxICs9IF9jMTsJCQkJCQkJXAorICAgIF9jMiB8PSByMSA8IF9jMTsJCQkJCQlcCisgICAgcjIgPSB4MiArIHkyOwkJCQkJCVwKKyAgICBfYzMgPSByMiA8IHgyOwkJCQkJCVwKKyAgICByMiArPSBfYzI7CQkJCQkJCVwKKyAgICBfYzMgfD0gcjIgPCBfYzI7CQkJCQkJXAorICAgIHIzID0geDMgKyB5MyArIF9jMzsJCQkJCQlcCisgIH0gd2hpbGUgKDApCisjZW5kaWYKKworI2lmbmRlZiBfX0ZQX0ZSQUNfU1VCXzMKKyNkZWZpbmUgX19GUF9GUkFDX1NVQl8zKHIyLHIxLHIwLHgyLHgxLHgwLHkyLHkxLHkwKQkJXAorICBkbyB7CQkJCQkJCQlcCisgICAgaW50IF9jMSwgX2MyOwkJCQkJCQlcCisgICAgcjAgPSB4MCAtIHkwOwkJCQkJCVwKKyAgICBfYzEgPSByMCA+IHgwOwkJCQkJCVwKKyAgICByMSA9IHgxIC0geTE7CQkJCQkJXAorICAgIF9jMiA9IHIxID4geDE7CQkJCQkJXAorICAgIHIxIC09IF9jMTsJCQkJCQkJXAorICAgIF9jMiB8PSByMSA+IF9jMTsJCQkJCQlcCisgICAgcjIgPSB4MiAtIHkyIC0gX2MyOwkJCQkJCVwKKyAgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisjaWZuZGVmIF9fRlBfRlJBQ19TVUJfNAorI2RlZmluZSBfX0ZQX0ZSQUNfU1VCXzQocjMscjIscjEscjAseDMseDIseDEseDAseTMseTIseTEseTApCVwKKyAgZG8gewkJCQkJCQkJXAorICAgIGludCBfYzEsIF9jMiwgX2MzOwkJCQkJCVwKKyAgICByMCA9IHgwIC0geTA7CQkJCQkJXAorICAgIF9jMSA9IHIwID4geDA7CQkJCQkJXAorICAgIHIxID0geDEgLSB5MTsJCQkJCQlcCisgICAgX2MyID0gcjEgPiB4MTsJCQkJCQlcCisgICAgcjEgLT0gX2MxOwkJCQkJCQlcCisgICAgX2MyIHw9IHIxID4gX2MxOwkJCQkJCVwKKyAgICByMiA9IHgyIC0geTI7CQkJCQkJXAorICAgIF9jMyA9IHIyID4geDI7CQkJCQkJXAorICAgIHIyIC09IF9jMjsJCQkJCQkJXAorICAgIF9jMyB8PSByMiA+IF9jMjsJCQkJCQlcCisgICAgcjMgPSB4MyAtIHkzIC0gX2MzOwkJCQkJCVwKKyAgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisjaWZuZGVmIF9fRlBfRlJBQ19ERUNfMworI2RlZmluZSBfX0ZQX0ZSQUNfREVDXzMoeDIseDEseDAseTIseTEseTApCQkJCVwKKyAgZG8gewkJCQkJCQkJCVwKKyAgICBVV3R5cGUgX3QwLCBfdDEsIF90MjsJCQkJCQlcCisgICAgX3QwID0geDAsIF90MSA9IHgxLCBfdDIgPSB4MjsJCQkJCVwKKyAgICBfX0ZQX0ZSQUNfU1VCXzMgKHgyLCB4MSwgeDAsIF90MiwgX3QxLCBfdDAsIHkyLCB5MSwgeTApOwkJXAorICB9IHdoaWxlICgwKQorI2VuZGlmCisKKyNpZm5kZWYgX19GUF9GUkFDX0RFQ180CisjZGVmaW5lIF9fRlBfRlJBQ19ERUNfNCh4Myx4Mix4MSx4MCx5Myx5Mix5MSx5MCkJCQlcCisgIGRvIHsJCQkJCQkJCQlcCisgICAgVVd0eXBlIF90MCwgX3QxLCBfdDIsIF90MzsJCQkJCQlcCisgICAgX3QwID0geDAsIF90MSA9IHgxLCBfdDIgPSB4MiwgX3QzID0geDM7CQkJCVwKKyAgICBfX0ZQX0ZSQUNfU1VCXzQgKHgzLHgyLHgxLHgwLF90MyxfdDIsX3QxLF90MCwgeTMseTIseTEseTApOwkJXAorICB9IHdoaWxlICgwKQorI2VuZGlmCisKKyNpZm5kZWYgX19GUF9GUkFDX0FERElfNAorI2RlZmluZSBfX0ZQX0ZSQUNfQURESV80KHgzLHgyLHgxLHgwLGkpCQkJCQlcCisgIGRvIHsJCQkJCQkJCQlcCisgICAgVVd0eXBlIF90OwkJCQkJCQkJXAorICAgIF90ID0gKCh4MCArPSBpKSA8IGkpOwkJCQkJCVwKKyAgICB4MSArPSBfdDsgX3QgPSAoeDEgPCBfdCk7CQkJCQkJXAorICAgIHgyICs9IF90OyBfdCA9ICh4MiA8IF90KTsJCQkJCQlcCisgICAgeDMgKz0gX3Q7CQkJCQkJCQlcCisgIH0gd2hpbGUgKDApCisjZW5kaWYKKworLyogQ29udmVydCBGUCB2YWx1ZXMgYmV0d2VlbiB3b3JkIHNpemVzLiBUaGlzIGFwcGVhcnMgdG8gYmUgbW9yZQorICogY29tcGxpY2F0ZWQgdGhhbiBJJ2QgaGF2ZSBleHBlY3RlZCBpdCB0byBiZSwgc28gdGhlc2UgbWlnaHQgYmUKKyAqIHdyb25nLi4uIFRoZXNlIG1hY3JvcyBhcmUgaW4gYW55IGNhc2Ugc29tZXdoYXQgYm9ndXMgYmVjYXVzZSB0aGV5CisgKiB1c2UgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCB2YXJpb3VzIEZSQUNfbiB2YXJpYWJsZXMgbG9vayBsaWtlIAorICogaW50ZXJuYWxseSBbZWcsIHRoYXQgMiB3b3JkIHZhcnMgYXJlIFhfZjAgYW5kIHhfZjFdLiBCdXQgc28gZG8KKyAqIHRoZSBvbmVzIGluIG9wLTIuaCBhbmQgb3AtMS5oLiAKKyAqLworI2RlZmluZSBfRlBfRlJBQ19DT05WXzFfNChkZnMsIHNmcywgRCwgUykJCQkJXAorICAgZG8gewkJCQkJCQkJCVwKKyAgICAgaWYgKFMjI19jICE9IEZQX0NMU19OQU4pCQkJCQkJXAorICAgICAgIF9GUF9GUkFDX1NSU180KFMsIChfRlBfV0ZSQUNCSVRTXyMjc2ZzIC0gX0ZQX1dGUkFDQklUU18jI2RmcyksCVwKKwkJCSAgX0ZQX1dGUkFDQklUU18jI3Nmcyk7CQkJCVwKKyAgICAgZWxzZQkJCQkJCQkJXAorICAgICAgIF9GUF9GUkFDX1NSTF80KFMsIChfRlBfV0ZSQUNCSVRTXyMjc2ZzIC0gX0ZQX1dGUkFDQklUU18jI2RmcykpOwlcCisgICAgIEQjI19mID0gUyMjX2ZbMF07CQkJCQkJCVwKKyAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBfRlBfRlJBQ19DT05WXzJfNChkZnMsIHNmcywgRCwgUykJCQkJXAorICAgZG8gewkJCQkJCQkJCVwKKyAgICAgaWYgKFMjI19jICE9IEZQX0NMU19OQU4pCQkJCQkJXAorICAgICAgIF9GUF9GUkFDX1NSU180KFMsIChfRlBfV0ZSQUNCSVRTXyMjc2ZzIC0gX0ZQX1dGUkFDQklUU18jI2RmcyksCVwKKwkJICAgICAgX0ZQX1dGUkFDQklUU18jI3Nmcyk7CQkJCVwKKyAgICAgZWxzZQkJCQkJCQkJXAorICAgICAgIF9GUF9GUkFDX1NSTF80KFMsIChfRlBfV0ZSQUNCSVRTXyMjc2ZzIC0gX0ZQX1dGUkFDQklUU18jI2RmcykpOwlcCisgICAgIEQjI19mMCA9IFMjI19mWzBdOwkJCQkJCQlcCisgICAgIEQjI19mMSA9IFMjI19mWzFdOwkJCQkJCQlcCisgIH0gd2hpbGUgKDApCisKKy8qIEFzc2VtYmx5L2Rpc2Fzc2VtYmx5IGZvciBjb252ZXJ0aW5nIHRvL2Zyb20gaW50ZWdyYWwgdHlwZXMuICAKKyAqIE5vIHNoaWZ0aW5nIG9yIG92ZXJmbG93IGhhbmRsZWQgaGVyZS4KKyAqLworLyogUHV0IHRoZSBGUCB2YWx1ZSBYIGludG8gciwgd2hpY2ggaXMgYW4gaW50ZWdlciBvZiBzaXplIHJzaXplLiAqLworI2RlZmluZSBfRlBfRlJBQ19BU1NFTUJMRV80KHIsIFgsIHJzaXplKQkJCQlcCisgIGRvIHsJCQkJCQkJCQlcCisgICAgaWYgKHJzaXplIDw9IF9GUF9XX1RZUEVfU0laRSkJCQkJCVwKKyAgICAgIHIgPSBYIyNfZlswXTsJCQkJCQkJXAorICAgIGVsc2UgaWYgKHJzaXplIDw9IDIqX0ZQX1dfVFlQRV9TSVpFKQkJCQlcCisgICAgewkJCQkJCQkJCVwKKyAgICAgIHIgPSBYIyNfZlsxXTsJCQkJCQkJXAorICAgICAgciA8PD0gX0ZQX1dfVFlQRV9TSVpFOwkJCQkJCVwKKyAgICAgIHIgKz0gWCMjX2ZbMF07CQkJCQkJCVwKKyAgICB9CQkJCQkJCQkJXAorICAgIGVsc2UJCQkJCQkJCVwKKyAgICB7CQkJCQkJCQkJXAorICAgICAgLyogSSdtIGZlZWxpbmcgbGF6eSBzbyB3ZSBkZWFsIHdpdGggaW50ID09IDN3b3JkcyAoaW1wbGF1c2libGUpKi8JXAorICAgICAgLyogYW5kIGludCA9PSA0d29yZHMgYXMgYSBzaW5nbGUgY2FzZS4JCQkgKi8JXAorICAgICAgciA9IFgjI19mWzNdOwkJCQkJCQlcCisgICAgICByIDw8PSBfRlBfV19UWVBFX1NJWkU7CQkJCQkJXAorICAgICAgciArPSBYIyNfZlsyXTsJCQkJCQkJXAorICAgICAgciA8PD0gX0ZQX1dfVFlQRV9TSVpFOwkJCQkJCVwKKyAgICAgIHIgKz0gWCMjX2ZbMV07CQkJCQkJCVwKKyAgICAgIHIgPDw9IF9GUF9XX1RZUEVfU0laRTsJCQkJCQlcCisgICAgICByICs9IFgjI19mWzBdOwkJCQkJCQlcCisgICAgfQkJCQkJCQkJCVwKKyAgfSB3aGlsZSAoMCkKKworLyogIk5vIGRpc2Fzc2VtYmxlIE51bWJlciBGaXZlISIgKi8KKy8qIG1vdmUgYW4gaW50ZWdlciBvZiBzaXplIHJzaXplIGludG8gWCdzIGZyYWN0aW9uYWwgcGFydC4gV2UgcmVseSBvbgorICogdGhlIF9mW10gYXJyYXkgY29uc2lzdGluZyBvZiB3b3JkcyBvZiBzaXplIF9GUF9XX1RZUEVfU0laRSB0byBhdm9pZAorICogaGF2aW5nIHRvIG1hc2sgdGhlIHZhbHVlcyB3ZSBzdG9yZSBpbnRvIGl0LgorICovCisjZGVmaW5lIF9GUF9GUkFDX0RJU0FTU0VNQkxFXzQoWCwgciwgcnNpemUpCQkJCVwKKyAgZG8gewkJCQkJCQkJCVwKKyAgICBYIyNfZlswXSA9IHI7CQkJCQkJCVwKKyAgICBYIyNfZlsxXSA9IChyc2l6ZSA8PSBfRlBfV19UWVBFX1NJWkUgPyAwIDogciA+PiBfRlBfV19UWVBFX1NJWkUpOwlcCisgICAgWCMjX2ZbMl0gPSAocnNpemUgPD0gMipfRlBfV19UWVBFX1NJWkUgPyAwIDogciA+PiAyKl9GUF9XX1RZUEVfU0laRSk7IFwKKyAgICBYIyNfZlszXSA9IChyc2l6ZSA8PSAzKl9GUF9XX1RZUEVfU0laRSA/IDAgOiByID4+IDMqX0ZQX1dfVFlQRV9TSVpFKTsgXAorICB9IHdoaWxlICgwKQorCisjZGVmaW5lIF9GUF9GUkFDX0NPTlZfNF8xKGRmcywgc2ZzLCBELCBTKQkJCQlcCisgICBkbyB7CQkJCQkJCQkJXAorICAgICBEIyNfZlswXSA9IFMjI19mOwkJCQkJCQlcCisgICAgIEQjI19mWzFdID0gRCMjX2ZbMl0gPSBEIyNfZlszXSA9IDA7CQkJCVwKKyAgICAgX0ZQX0ZSQUNfU0xMXzQoRCwgKF9GUF9XRlJBQ0JJVFNfIyNkZnMgLSBfRlBfV0ZSQUNCSVRTXyMjc2ZzKSk7CVwKKyAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgX0ZQX0ZSQUNfQ09OVl80XzIoZGZzLCBzZnMsIEQsIFMpCQkJCVwKKyAgIGRvIHsJCQkJCQkJCQlcCisgICAgIEQjI19mWzBdID0gUyMjX2YwOwkJCQkJCQlcCisgICAgIEQjI19mWzFdID0gUyMjX2YxOwkJCQkJCQlcCisgICAgIEQjI19mWzJdID0gRCMjX2ZbM10gPSAwOwkJCQkJCVwKKyAgICAgX0ZQX0ZSQUNfU0xMXzQoRCwgKF9GUF9XRlJBQ0JJVFNfIyNkZnMgLSBfRlBfV0ZSQUNCSVRTXyMjc2ZzKSk7CVwKKyAgIH0gd2hpbGUgKDApCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tYXRoLWVtdS9vcC04LmggYi9pbmNsdWRlL21hdGgtZW11L29wLTguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjhjMDVlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9tYXRoLWVtdS9vcC04LmgKQEAgLTAsMCArMSwxMDcgQEAKKy8qIFNvZnR3YXJlIGZsb2F0aW5nLXBvaW50IGVtdWxhdGlvbi4KKyAgIEJhc2ljIGVpZ2h0LXdvcmQgZnJhY3Rpb24gZGVjbGFyYXRpb24gYW5kIG1hbmlwdWxhdGlvbi4KKyAgIENvcHlyaWdodCAoQykgMTk5NywxOTk4LDE5OTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKyAgIENvbnRyaWJ1dGVkIGJ5IFJpY2hhcmQgSGVuZGVyc29uIChydGhAY3lnbnVzLmNvbSksCisJCSAgSmFrdWIgSmVsaW5layAoampAdWx0cmEubGludXguY3opIGFuZAorCQkgIFBldGVyIE1heWRlbGwgKHBtYXlkZWxsQGNoaWFyay5ncmVlbmVuZC5vcmcudWspLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorICAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmCisgICBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKworI2lmbmRlZiBfX01BVEhfRU1VX09QXzhfSF9fCisjZGVmaW5lIF9fTUFUSF9FTVVfT1BfOF9IX18KKworLyogV2UgbmVlZCBqdXN0IGEgZmV3IHRoaW5ncyBmcm9tIGhlcmUgZm9yIG9wLTQsIGlmIHdlIGV2ZXIgbmVlZCBzb21lCisgICBvdGhlciBtYWNyb3MsIHRoZXkgY2FuIGJlIGFkZGVkLiAqLworI2RlZmluZSBfRlBfRlJBQ19ERUNMXzgoWCkJX0ZQX1dfVFlQRSBYIyNfZls4XQorI2RlZmluZSBfRlBfRlJBQ19ISUdIXzgoWCkJKFgjI19mWzddKQorI2RlZmluZSBfRlBfRlJBQ19MT1dfOChYKQkoWCMjX2ZbMF0pCisjZGVmaW5lIF9GUF9GUkFDX1dPUkRfOChYLHcpCShYIyNfZlt3XSkKKworI2RlZmluZSBfRlBfRlJBQ19TTExfOChYLE4pCQkJCQkJXAorICBkbyB7CQkJCQkJCQkJXAorICAgIF9GUF9JX1RZUEUgX3VwLCBfZG93biwgX3NraXAsIF9pOwkJCQkJXAorICAgIF9za2lwID0gKE4pIC8gX0ZQX1dfVFlQRV9TSVpFOwkJCQkJXAorICAgIF91cCA9IChOKSAlIF9GUF9XX1RZUEVfU0laRTsJCQkJCVwKKyAgICBfZG93biA9IF9GUF9XX1RZUEVfU0laRSAtIF91cDsJCQkJCVwKKyAgICBpZiAoIV91cCkJCQkJCQkJCVwKKyAgICAgIGZvciAoX2kgPSA3OyBfaSA+PSBfc2tpcDsgLS1faSkJCQkJCVwKKwlYIyNfZltfaV0gPSBYIyNfZltfaS1fc2tpcF07CQkJCQlcCisgICAgZWxzZQkJCQkJCQkJXAorICAgICAgewkJCQkJCQkJCVwKKwlmb3IgKF9pID0gNzsgX2kgPiBfc2tpcDsgLS1faSkJCQkJCVwKKwkgIFgjI19mW19pXSA9IFgjI19mW19pLV9za2lwXSA8PCBfdXAJCQkJXAorCQkgICAgICB8IFgjI19mW19pLV9za2lwLTFdID4+IF9kb3duOwkJCVwKKwlYIyNfZltfaS0tXSA9IFgjI19mWzBdIDw8IF91cDsgCQkJCQlcCisgICAgICB9CQkJCQkJCQkJXAorICAgIGZvciAoOyBfaSA+PSAwOyAtLV9pKQkJCQkJCVwKKyAgICAgIFgjI19mW19pXSA9IDA7CQkJCQkJCVwKKyAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBfRlBfRlJBQ19TUkxfOChYLE4pCQkJCQkJXAorICBkbyB7CQkJCQkJCQkJXAorICAgIF9GUF9JX1RZUEUgX3VwLCBfZG93biwgX3NraXAsIF9pOwkJCQkJXAorICAgIF9za2lwID0gKE4pIC8gX0ZQX1dfVFlQRV9TSVpFOwkJCQkJXAorICAgIF9kb3duID0gKE4pICUgX0ZQX1dfVFlQRV9TSVpFOwkJCQkJXAorICAgIF91cCA9IF9GUF9XX1RZUEVfU0laRSAtIF9kb3duOwkJCQkJXAorICAgIGlmICghX2Rvd24pCQkJCQkJCQlcCisgICAgICBmb3IgKF9pID0gMDsgX2kgPD0gNy1fc2tpcDsgKytfaSkJCQkJCVwKKwlYIyNfZltfaV0gPSBYIyNfZltfaStfc2tpcF07CQkJCQlcCisgICAgZWxzZQkJCQkJCQkJXAorICAgICAgewkJCQkJCQkJCVwKKwlmb3IgKF9pID0gMDsgX2kgPCA3LV9za2lwOyArK19pKQkJCQlcCisJICBYIyNfZltfaV0gPSBYIyNfZltfaStfc2tpcF0gPj4gX2Rvd24JCQkJXAorCQkgICAgICB8IFgjI19mW19pK19za2lwKzFdIDw8IF91cDsJCQlcCisJWCMjX2ZbX2krK10gPSBYIyNfZls3XSA+PiBfZG93bjsJCQkJXAorICAgICAgfQkJCQkJCQkJCVwKKyAgICBmb3IgKDsgX2kgPCA4OyArK19pKQkJCQkJCVwKKyAgICAgIFgjI19mW19pXSA9IDA7CQkJCQkJCVwKKyAgfSB3aGlsZSAoMCkKKworCisvKiBSaWdodCBzaGlmdCB3aXRoIHN0aWNreS1sc2IuIAorICogV2hhdCB0aGlzIGFjdHVhbGx5IG1lYW5zIGlzIHRoYXQgd2UgZG8gYSBzdGFuZGFyZCByaWdodC1zaGlmdCwKKyAqIGJ1dCB0aGF0IGlmIGFueSBvZiB0aGUgYml0cyB0aGF0IGZhbGwgb2ZmIHRoZSByaWdodCBoYW5kIHNpZGUKKyAqIHdlcmUgb25lIHRoZW4gd2UgYWx3YXlzIHNldCB0aGUgTFNiaXQuCisgKi8KKyNkZWZpbmUgX0ZQX0ZSQUNfU1JTXzgoWCxOLHNpemUpCQkJCQlcCisgIGRvIHsJCQkJCQkJCQlcCisgICAgX0ZQX0lfVFlQRSBfdXAsIF9kb3duLCBfc2tpcCwgX2k7CQkJCQlcCisgICAgX0ZQX1dfVFlQRSBfczsJCQkJCQkJXAorICAgIF9za2lwID0gKE4pIC8gX0ZQX1dfVFlQRV9TSVpFOwkJCQkJXAorICAgIF9kb3duID0gKE4pICUgX0ZQX1dfVFlQRV9TSVpFOwkJCQkJXAorICAgIF91cCA9IF9GUF9XX1RZUEVfU0laRSAtIF9kb3duOwkJCQkJXAorICAgIGZvciAoX3MgPSBfaSA9IDA7IF9pIDwgX3NraXA7ICsrX2kpCQkJCQlcCisgICAgICBfcyB8PSBYIyNfZltfaV07CQkJCQkJCVwKKyAgICBfcyB8PSBYIyNfZltfaV0gPDwgX3VwOwkJCQkJCVwKKy8qIHMgaXMgbm93ICE9IDAgaWYgd2Ugd2FudCB0byBzZXQgdGhlIExTYml0ICovCQkJCVwKKyAgICBpZiAoIV9kb3duKQkJCQkJCQkJXAorICAgICAgZm9yIChfaSA9IDA7IF9pIDw9IDctX3NraXA7ICsrX2kpCQkJCQlcCisJWCMjX2ZbX2ldID0gWCMjX2ZbX2krX3NraXBdOwkJCQkJXAorICAgIGVsc2UJCQkJCQkJCVwKKyAgICAgIHsJCQkJCQkJCQlcCisJZm9yIChfaSA9IDA7IF9pIDwgNy1fc2tpcDsgKytfaSkJCQkJXAorCSAgWCMjX2ZbX2ldID0gWCMjX2ZbX2krX3NraXBdID4+IF9kb3duCQkJCVwKKwkJICAgICAgfCBYIyNfZltfaStfc2tpcCsxXSA8PCBfdXA7CQkJXAorCVgjI19mW19pKytdID0gWCMjX2ZbN10gPj4gX2Rvd247CQkJCVwKKyAgICAgIH0JCQkJCQkJCQlcCisgICAgZm9yICg7IF9pIDwgODsgKytfaSkJCQkJCQlcCisgICAgICBYIyNfZltfaV0gPSAwOwkJCQkJCQlcCisgICAgLyogZG9uJ3QgZml4IHRoZSBMU0IgdW50aWwgdGhlIHZlcnkgZW5kIHdoZW4gd2UncmUgc3VyZSBmWzBdIGlzIHN0YWJsZSAqLwlcCisgICAgWCMjX2ZbMF0gfD0gKF9zICE9IDApOwkJCQkJCVwKKyAgfSB3aGlsZSAoMCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL21hdGgtZW11L29wLWNvbW1vbi5oIGIvaW5jbHVkZS9tYXRoLWVtdS9vcC1jb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Mzc4MGFiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9tYXRoLWVtdS9vcC1jb21tb24uaApAQCAtMCwwICsxLDg1MyBAQAorLyogU29mdHdhcmUgZmxvYXRpbmctcG9pbnQgZW11bGF0aW9uLiBDb21tb24gb3BlcmF0aW9ucy4KKyAgIENvcHlyaWdodCAoQykgMTk5NywxOTk4LDE5OTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKyAgIENvbnRyaWJ1dGVkIGJ5IFJpY2hhcmQgSGVuZGVyc29uIChydGhAY3lnbnVzLmNvbSksCisJCSAgSmFrdWIgSmVsaW5layAoampAdWx0cmEubGludXguY3opLAorCQkgIERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AcmVkaGF0LmNvbSkgYW5kCisJCSAgUGV0ZXIgTWF5ZGVsbCAocG1heWRlbGxAY2hpYXJrLmdyZWVuZW5kLm9yZy51aykuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisgICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYKKyAgIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworCisjaWZuZGVmIF9fTUFUSF9FTVVfT1BfQ09NTU9OX0hfXworI2RlZmluZSBfX01BVEhfRU1VX09QX0NPTU1PTl9IX18KKworI2RlZmluZSBfRlBfREVDTCh3YywgWCkJCQlcCisgIF9GUF9JX1RZUEUgWCMjX2M9MCwgWCMjX3M9MCwgWCMjX2U9MDsJXAorICBfRlBfRlJBQ19ERUNMXyMjd2MoWCkKKworLyoKKyAqIEZpbmlzaCB0cnVlbHkgdW5wYWNraW5nIGEgbmF0aXZlIGZwIHZhbHVlIGJ5IGNsYXNzaWZ5aW5nIHRoZSBraW5kCisgKiBvZiBmcCB2YWx1ZSBhbmQgbm9ybWFsaXppbmcgYm90aCB0aGUgZXhwb25lbnQgYW5kIHRoZSBmcmFjdGlvbi4KKyAqLworCisjZGVmaW5lIF9GUF9VTlBBQ0tfQ0FOT05JQ0FMKGZzLCB3YywgWCkJCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisgIHN3aXRjaCAoWCMjX2UpCQkJCQkJCVwKKyAgewkJCQkJCQkJCVwKKyAgZGVmYXVsdDoJCQkJCQkJCVwKKyAgICBfRlBfRlJBQ19ISUdIX1JBV18jI2ZzKFgpIHw9IF9GUF9JTVBMQklUXyMjZnM7CQkJXAorICAgIF9GUF9GUkFDX1NMTF8jI3djKFgsIF9GUF9XT1JLQklUUyk7CQkJCQlcCisgICAgWCMjX2UgLT0gX0ZQX0VYUEJJQVNfIyNmczsJCQkJCQlcCisgICAgWCMjX2MgPSBGUF9DTFNfTk9STUFMOwkJCQkJCVwKKyAgICBicmVhazsJCQkJCQkJCVwKKwkJCQkJCQkJCVwKKyAgY2FzZSAwOgkJCQkJCQkJXAorICAgIGlmIChfRlBfRlJBQ19aRVJPUF8jI3djKFgpKQkJCQkJCVwKKyAgICAgIFgjI19jID0gRlBfQ0xTX1pFUk87CQkJCQkJXAorICAgIGVsc2UJCQkJCQkJCVwKKyAgICAgIHsJCQkJCQkJCQlcCisJLyogYSBkZW5vcm1hbGl6ZWQgbnVtYmVyICovCQkJCQlcCisJX0ZQX0lfVFlQRSBfc2hpZnQ7CQkJCQkJXAorCV9GUF9GUkFDX0NMWl8jI3djKF9zaGlmdCwgWCk7CQkJCQlcCisJX3NoaWZ0IC09IF9GUF9GUkFDWEJJVFNfIyNmczsJCQkJCVwKKwlfRlBfRlJBQ19TTExfIyN3YyhYLCAoX3NoaWZ0K19GUF9XT1JLQklUUykpOwkJCVwKKwlYIyNfZSAtPSBfRlBfRVhQQklBU18jI2ZzIC0gMSArIF9zaGlmdDsJCQkJXAorCVgjI19jID0gRlBfQ0xTX05PUk1BTDsJCQkJCQlcCisJRlBfU0VUX0VYQ0VQVElPTihGUF9FWF9ERU5PUk0pOwkJCQkJXAorCWlmIChGUF9ERU5PUk1fWkVSTykJCQkJCQlcCisJICB7CQkJCQkJCQlcCisJICAgIEZQX1NFVF9FWENFUFRJT04oRlBfRVhfSU5FWEFDVCk7CQkJCVwKKwkgICAgWCMjX2MgPSBGUF9DTFNfWkVSTzsJCQkJCVwKKwkgIH0JCQkJCQkJCVwKKyAgICAgIH0JCQkJCQkJCQlcCisgICAgYnJlYWs7CQkJCQkJCQlcCisJCQkJCQkJCQlcCisgIGNhc2UgX0ZQX0VYUE1BWF8jI2ZzOgkJCQkJCQlcCisgICAgaWYgKF9GUF9GUkFDX1pFUk9QXyMjd2MoWCkpCQkJCQkJXAorICAgICAgWCMjX2MgPSBGUF9DTFNfSU5GOwkJCQkJCVwKKyAgICBlbHNlCQkJCQkJCQlcCisgICAgICB7CQkJCQkJCQkJXAorCVgjI19jID0gRlBfQ0xTX05BTjsJCQkJCQlcCisJLyogQ2hlY2sgZm9yIHNpZ25hbGluZyBOYU4gKi8JCQkJCVwKKwlpZiAoIShfRlBfRlJBQ19ISUdIX1JBV18jI2ZzKFgpICYgX0ZQX1FOQU5CSVRfIyNmcykpCQlcCisJICBGUF9TRVRfRVhDRVBUSU9OKEZQX0VYX0lOVkFMSUQpOwkJCQlcCisgICAgICB9CQkJCQkJCQkJXAorICAgIGJyZWFrOwkJCQkJCQkJXAorICB9CQkJCQkJCQkJXAorfSB3aGlsZSAoMCkKKworLyoKKyAqIEJlZm9yZSBwYWNraW5nIHRoZSBiaXRzIGJhY2sgaW50byB0aGUgbmF0aXZlIGZwIHJlc3VsdCwgdGFrZSBjYXJlCisgKiBvZiBzdWNoIG11bmRhbmUgdGhpbmdzIGFzIHJvdW5kaW5nIGFuZCBvdmVyZmxvdy4gIEFsc28sIGZvciBzb21lCisgKiBraW5kcyBvZiBmcCB2YWx1ZXMsIHRoZSBvcmlnaW5hbCBwYXJ0cyBtYXkgbm90IGhhdmUgYmVlbiBmdWxseQorICogZXh0cmFjdGVkIC0tIGJ1dCB0aGF0IGlzIG9rLCB3ZSBjYW4gcmVnZW5lcmF0ZSB0aGVtIG5vdy4KKyAqLworCisjZGVmaW5lIF9GUF9QQUNLX0NBTk9OSUNBTChmcywgd2MsIFgpCQkJCVwKK2RvIHsJCQkJCQkJCVwKKyAgc3dpdGNoIChYIyNfYykJCQkJCQlcCisgIHsJCQkJCQkJCVwKKyAgY2FzZSBGUF9DTFNfTk9STUFMOgkJCQkJCVwKKyAgICBYIyNfZSArPSBfRlBfRVhQQklBU18jI2ZzOwkJCQkJXAorICAgIGlmIChYIyNfZSA+IDApCQkJCQkJXAorICAgICAgewkJCQkJCQkJXAorCV9GUF9ST1VORCh3YywgWCk7CQkJCQlcCisJaWYgKF9GUF9GUkFDX09WRVJQXyMjd2MoZnMsIFgpKQkJCQlcCisJICB7CQkJCQkJCVwKKwkgICAgX0ZQX0ZSQUNfQ0xFQVJfT1ZFUlBfIyN3YyhmcywgWCk7CQkJXAorCSAgICBYIyNfZSsrOwkJCQkJCVwKKwkgIH0JCQkJCQkJXAorCV9GUF9GUkFDX1NSTF8jI3djKFgsIF9GUF9XT1JLQklUUyk7CQkJXAorCWlmIChYIyNfZSA+PSBfRlBfRVhQTUFYXyMjZnMpCQkJCVwKKwkgIHsJCQkJCQkJXAorCSAgICAvKiBvdmVyZmxvdyAqLwkJCQkJXAorCSAgICBzd2l0Y2ggKEZQX1JPVU5ETU9ERSkJCQkJXAorCSAgICAgIHsJCQkJCQkJXAorCSAgICAgIGNhc2UgRlBfUk5EX05FQVJFU1Q6CQkJCVwKKwkJWCMjX2MgPSBGUF9DTFNfSU5GOwkJCQlcCisJCWJyZWFrOwkJCQkJCVwKKwkgICAgICBjYXNlIEZQX1JORF9QSU5GOgkJCQkJXAorCQlpZiAoIVgjI19zKSBYIyNfYyA9IEZQX0NMU19JTkY7CQkJXAorCQlicmVhazsJCQkJCQlcCisJICAgICAgY2FzZSBGUF9STkRfTUlORjoJCQkJCVwKKwkJaWYgKFgjI19zKSBYIyNfYyA9IEZQX0NMU19JTkY7CQkJXAorCQlicmVhazsJCQkJCQlcCisJICAgICAgfQkJCQkJCQlcCisJICAgIGlmIChYIyNfYyA9PSBGUF9DTFNfSU5GKQkJCQlcCisJICAgICAgewkJCQkJCQlcCisJCS8qIE92ZXJmbG93IHRvIGluZmluaXR5ICovCQkJXAorCQlYIyNfZSA9IF9GUF9FWFBNQVhfIyNmczsJCQlcCisJCV9GUF9GUkFDX1NFVF8jI3djKFgsIF9GUF9aRVJPRlJBQ18jI3djKTsJXAorCSAgICAgIH0JCQkJCQkJXAorCSAgICBlbHNlCQkJCQkJXAorCSAgICAgIHsJCQkJCQkJXAorCQkvKiBPdmVyZmxvdyB0byBtYXhpbXVtIG5vcm1hbCAqLwkJXAorCQlYIyNfZSA9IF9GUF9FWFBNQVhfIyNmcyAtIDE7CQkJXAorCQlfRlBfRlJBQ19TRVRfIyN3YyhYLCBfRlBfTUFYRlJBQ18jI3djKTsJCVwKKwkgICAgICB9CQkJCQkJCVwKKwkgICAgRlBfU0VUX0VYQ0VQVElPTihGUF9FWF9PVkVSRkxPVyk7CQkJXAorICAgICAgICAgICAgRlBfU0VUX0VYQ0VQVElPTihGUF9FWF9JTkVYQUNUKTsJCQlcCisJICB9CQkJCQkJCVwKKyAgICAgIH0JCQkJCQkJCVwKKyAgICBlbHNlCQkJCQkJCVwKKyAgICAgIHsJCQkJCQkJCVwKKwkvKiB3ZSd2ZSBnb3QgYSBkZW5vcm1hbGl6ZWQgbnVtYmVyICovCQkJXAorCVgjI19lID0gLVgjI19lICsgMTsJCQkJCVwKKwlpZiAoWCMjX2UgPD0gX0ZQX1dGUkFDQklUU18jI2ZzKQkJCVwKKwkgIHsJCQkJCQkJXAorCSAgICBfRlBfRlJBQ19TUlNfIyN3YyhYLCBYIyNfZSwgX0ZQX1dGUkFDQklUU18jI2ZzKTsJXAorCSAgICBfRlBfUk9VTkQod2MsIFgpOwkJCQkJXAorCSAgICBpZiAoX0ZQX0ZSQUNfSElHSF8jI2ZzKFgpCQkJCVwKKwkJJiAoX0ZQX09WRVJGTE9XXyMjZnMgPj4gMSkpCQkJXAorCSAgICAgIHsJCQkJCQkJXAorCSAgICAgICAgWCMjX2UgPSAxOwkJCQkJXAorCSAgICAgICAgX0ZQX0ZSQUNfU0VUXyMjd2MoWCwgX0ZQX1pFUk9GUkFDXyMjd2MpOwlcCisJICAgICAgfQkJCQkJCQlcCisJICAgIGVsc2UJCQkJCQlcCisJICAgICAgewkJCQkJCQlcCisJCVgjI19lID0gMDsJCQkJCVwKKwkJX0ZQX0ZSQUNfU1JMXyMjd2MoWCwgX0ZQX1dPUktCSVRTKTsJCVwKKwkJRlBfU0VUX0VYQ0VQVElPTihGUF9FWF9VTkRFUkZMT1cpOwkJXAorCSAgICAgIH0JCQkJCQkJXAorCSAgfQkJCQkJCQlcCisJZWxzZQkJCQkJCQlcCisJICB7CQkJCQkJCVwKKwkgICAgLyogdW5kZXJmbG93IHRvIHplcm8gKi8JCQkJXAorCSAgICBYIyNfZSA9IDA7CQkJCQkJXAorCSAgICBpZiAoIV9GUF9GUkFDX1pFUk9QXyMjd2MoWCkpCQkJXAorCSAgICAgIHsJCQkJCQkJXAorCSAgICAgICAgX0ZQX0ZSQUNfU0VUXyMjd2MoWCwgX0ZQX01JTkZSQUNfIyN3Yyk7CQlcCisJICAgICAgICBfRlBfUk9VTkQod2MsIFgpOwkJCQlcCisJICAgICAgICBfRlBfRlJBQ19MT1dfIyN3YyhYKSA+Pj0gKF9GUF9XT1JLQklUUyk7CVwKKwkgICAgICB9CQkJCQkJCVwKKwkgICAgRlBfU0VUX0VYQ0VQVElPTihGUF9FWF9VTkRFUkZMT1cpOwkJCVwKKwkgIH0JCQkJCQkJXAorICAgICAgfQkJCQkJCQkJXAorICAgIGJyZWFrOwkJCQkJCQlcCisJCQkJCQkJCVwKKyAgY2FzZSBGUF9DTFNfWkVSTzoJCQkJCQlcCisgICAgWCMjX2UgPSAwOwkJCQkJCQlcCisgICAgX0ZQX0ZSQUNfU0VUXyMjd2MoWCwgX0ZQX1pFUk9GUkFDXyMjd2MpOwkJCVwKKyAgICBicmVhazsJCQkJCQkJXAorCQkJCQkJCQlcCisgIGNhc2UgRlBfQ0xTX0lORjoJCQkJCQlcCisgICAgWCMjX2UgPSBfRlBfRVhQTUFYXyMjZnM7CQkJCQlcCisgICAgX0ZQX0ZSQUNfU0VUXyMjd2MoWCwgX0ZQX1pFUk9GUkFDXyMjd2MpOwkJCVwKKyAgICBicmVhazsJCQkJCQkJXAorCQkJCQkJCQlcCisgIGNhc2UgRlBfQ0xTX05BTjoJCQkJCQlcCisgICAgWCMjX2UgPSBfRlBfRVhQTUFYXyMjZnM7CQkJCQlcCisgICAgaWYgKCFfRlBfS0VFUE5BTkZSQUNQKQkJCQkJXAorICAgICAgewkJCQkJCQkJXAorCV9GUF9GUkFDX1NFVF8jI3djKFgsIF9GUF9OQU5GUkFDXyMjZnMpOwkJCVwKKwlYIyNfcyA9IF9GUF9OQU5TSUdOXyMjZnM7CQkJCVwKKyAgICAgIH0JCQkJCQkJCVwKKyAgICBlbHNlCQkJCQkJCVwKKyAgICAgIF9GUF9GUkFDX0hJR0hfUkFXXyMjZnMoWCkgfD0gX0ZQX1FOQU5CSVRfIyNmczsJCVwKKyAgICBicmVhazsJCQkJCQkJXAorICB9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisvKiBUaGlzIG9uZSBhY2NlcHRzIHJhdyBhcmd1bWVudCBhbmQgbm90IGNvb2tlZCwgIHJldHVybnMKKyAqIDEgaWYgWCBpcyBhIHNpZ25hbGluZyBOYU4uCisgKi8KKyNkZWZpbmUgX0ZQX0lTU0lHTkFOKGZzLCB3YywgWCkJCQkJCVwKKyh7CQkJCQkJCQlcCisgIGludCBfX3JldCA9IDA7CQkJCQkJXAorICBpZiAoWCMjX2UgPT0gX0ZQX0VYUE1BWF8jI2ZzKQkJCQkJXAorICAgIHsJCQkJCQkJCVwKKyAgICAgIGlmICghX0ZQX0ZSQUNfWkVST1BfIyN3YyhYKQkJCQlcCisJICAmJiAhKF9GUF9GUkFDX0hJR0hfUkFXXyMjZnMoWCkgJiBfRlBfUU5BTkJJVF8jI2ZzKSkJXAorCV9fcmV0ID0gMTsJCQkJCQlcCisgICAgfQkJCQkJCQkJXAorICBfX3JldDsJCQkJCQkJXAorfSkKKworCisKKworCisvKgorICogTWFpbiBhZGRpdGlvbiByb3V0aW5lLiAgVGhlIGlucHV0IHZhbHVlcyBzaG91bGQgYmUgY29va2VkLgorICovCisKKyNkZWZpbmUgX0ZQX0FERF9JTlRFUk5BTChmcywgd2MsIFIsIFgsIFksIE9QKQkJCQkgICAgIFwKK2RvIHsJCQkJCQkJCQkgICAgIFwKKyAgc3dpdGNoIChfRlBfQ0xTX0NPTUJJTkUoWCMjX2MsIFkjI19jKSkJCQkJICAgICBcCisgIHsJCQkJCQkJCQkgICAgIFwKKyAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX05PUk1BTCxGUF9DTFNfTk9STUFMKToJCQkgICAgIFwKKyAgICB7CQkJCQkJCQkJICAgICBcCisgICAgICAvKiBzaGlmdCB0aGUgc21hbGxlciBudW1iZXIgc28gdGhhdCBpdHMgZXhwb25lbnQgbWF0Y2hlcyB0aGUgbGFyZ2VyICovIFwKKyAgICAgIF9GUF9JX1RZUEUgZGlmZiA9IFgjI19lIC0gWSMjX2U7CQkJCQkgICAgIFwKKwkJCQkJCQkJCSAgICAgXAorICAgICAgaWYgKGRpZmYgPCAwKQkJCQkJCQkgICAgIFwKKwl7CQkJCQkJCQkgICAgIFwKKwkgIGRpZmYgPSAtZGlmZjsJCQkJCQkJICAgICBcCisJICBpZiAoZGlmZiA8PSBfRlBfV0ZSQUNCSVRTXyMjZnMpCQkJCSAgICAgXAorCSAgICBfRlBfRlJBQ19TUlNfIyN3YyhYLCBkaWZmLCBfRlBfV0ZSQUNCSVRTXyMjZnMpOwkJICAgICBcCisJICBlbHNlIGlmICghX0ZQX0ZSQUNfWkVST1BfIyN3YyhYKSkJCQkJICAgICBcCisJICAgIF9GUF9GUkFDX1NFVF8jI3djKFgsIF9GUF9NSU5GUkFDXyMjd2MpOwkJCSAgICAgXAorCSAgUiMjX2UgPSBZIyNfZTsJCQkJCQkgICAgIFwKKwl9CQkJCQkJCQkgICAgIFwKKyAgICAgIGVsc2UJCQkJCQkJCSAgICAgXAorCXsJCQkJCQkJCSAgICAgXAorCSAgaWYgKGRpZmYgPiAwKQkJCQkJCQkgICAgIFwKKwkgICAgewkJCQkJCQkJICAgICBcCisJICAgICAgaWYgKGRpZmYgPD0gX0ZQX1dGUkFDQklUU18jI2ZzKQkJCQkgICAgIFwKKwkgICAgICAgIF9GUF9GUkFDX1NSU18jI3djKFksIGRpZmYsIF9GUF9XRlJBQ0JJVFNfIyNmcyk7CQkgICAgIFwKKwkgICAgICBlbHNlIGlmICghX0ZQX0ZSQUNfWkVST1BfIyN3YyhZKSkJCQkJICAgICBcCisJICAgICAgICBfRlBfRlJBQ19TRVRfIyN3YyhZLCBfRlBfTUlORlJBQ18jI3djKTsJCQkgICAgIFwKKwkgICAgfQkJCQkJCQkJICAgICBcCisJICBSIyNfZSA9IFgjI19lOwkJCQkJCSAgICAgXAorCX0JCQkJCQkJCSAgICAgXAorCQkJCQkJCQkJICAgICBcCisgICAgICBSIyNfYyA9IEZQX0NMU19OT1JNQUw7CQkJCQkJICAgICBcCisJCQkJCQkJCQkgICAgIFwKKyAgICAgIGlmIChYIyNfcyA9PSBZIyNfcykJCQkJCQkgICAgIFwKKwl7CQkJCQkJCQkgICAgIFwKKwkgIFIjI19zID0gWCMjX3M7CQkJCQkJICAgICBcCisJICBfRlBfRlJBQ19BRERfIyN3YyhSLCBYLCBZKTsJCQkJCSAgICAgXAorCSAgaWYgKF9GUF9GUkFDX09WRVJQXyMjd2MoZnMsIFIpKQkJCQkgICAgIFwKKwkgICAgewkJCQkJCQkJICAgICBcCisJICAgICAgX0ZQX0ZSQUNfU1JTXyMjd2MoUiwgMSwgX0ZQX1dGUkFDQklUU18jI2ZzKTsJCSAgICAgXAorCSAgICAgIFIjI19lKys7CQkJCQkJCSAgICAgXAorCSAgICB9CQkJCQkJCQkgICAgIFwKKwl9CQkJCQkJCQkgICAgIFwKKyAgICAgIGVsc2UJCQkJCQkJCSAgICAgXAorCXsJCQkJCQkJCSAgICAgXAorCSAgUiMjX3MgPSBYIyNfczsJCQkJCQkgICAgIFwKKwkgIF9GUF9GUkFDX1NVQl8jI3djKFIsIFgsIFkpOwkJCQkJICAgICBcCisJICBpZiAoX0ZQX0ZSQUNfWkVST1BfIyN3YyhSKSkJCQkJCSAgICAgXAorCSAgICB7CQkJCQkJCQkgICAgIFwKKwkgICAgICAvKiByZXR1cm4gYW4gZXhhY3QgemVybyAqLwkJCQkgICAgIFwKKwkgICAgICBpZiAoRlBfUk9VTkRNT0RFID09IEZQX1JORF9NSU5GKQkJCQkgICAgIFwKKwkJUiMjX3MgfD0gWSMjX3M7CQkJCQkJICAgICBcCisJICAgICAgZWxzZQkJCQkJCQkgICAgIFwKKwkJUiMjX3MgJj0gWSMjX3M7CQkJCQkJICAgICBcCisJICAgICAgUiMjX2MgPSBGUF9DTFNfWkVSTzsJCQkJCSAgICAgXAorCSAgICB9CQkJCQkJCQkgICAgIFwKKwkgIGVsc2UJCQkJCQkJCSAgICAgXAorCSAgICB7CQkJCQkJCQkgICAgIFwKKwkgICAgICBpZiAoX0ZQX0ZSQUNfTkVHUF8jI3djKFIpKQkJCQkgICAgIFwKKwkJewkJCQkJCQkgICAgIFwKKwkJICBfRlBfRlJBQ19TVUJfIyN3YyhSLCBZLCBYKTsJCQkJICAgICBcCisJCSAgUiMjX3MgPSBZIyNfczsJCQkJCSAgICAgXAorCQl9CQkJCQkJCSAgICAgXAorCQkJCQkJCQkJICAgICBcCisJICAgICAgLyogcmVub3JtYWxpemUgYWZ0ZXIgc3VidHJhY3Rpb24gKi8JCQkgICAgIFwKKwkgICAgICBfRlBfRlJBQ19DTFpfIyN3YyhkaWZmLCBSKTsJCQkJICAgICBcCisJICAgICAgZGlmZiAtPSBfRlBfV0ZSQUNYQklUU18jI2ZzOwkJCQkgICAgIFwKKwkgICAgICBpZiAoZGlmZikJCQkJCQkJICAgICBcCisJCXsJCQkJCQkJICAgICBcCisJCSAgUiMjX2UgLT0gZGlmZjsJCQkJCSAgICAgXAorCQkgIF9GUF9GUkFDX1NMTF8jI3djKFIsIGRpZmYpOwkJCQkgICAgIFwKKwkJfQkJCQkJCQkgICAgIFwKKwkgICAgfQkJCQkJCQkJICAgICBcCisJfQkJCQkJCQkJICAgICBcCisgICAgICBicmVhazsJCQkJCQkJCSAgICAgXAorICAgIH0JCQkJCQkJCQkgICAgIFwKKwkJCQkJCQkJCSAgICAgXAorICBjYXNlIF9GUF9DTFNfQ09NQklORShGUF9DTFNfTkFOLEZQX0NMU19OQU4pOgkJCQkgICAgIFwKKyAgICBfRlBfQ0hPT1NFTkFOKGZzLCB3YywgUiwgWCwgWSwgT1ApOwkJCQkJICAgICBcCisgICAgYnJlYWs7CQkJCQkJCQkgICAgIFwKKwkJCQkJCQkJCSAgICAgXAorICBjYXNlIF9GUF9DTFNfQ09NQklORShGUF9DTFNfTk9STUFMLEZQX0NMU19aRVJPKToJCQkgICAgIFwKKyAgICBSIyNfZSA9IFgjI19lOwkJCQkJCQkgICAgIFwKKyAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX05BTixGUF9DTFNfTk9STUFMKToJCQkgICAgIFwKKyAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX05BTixGUF9DTFNfSU5GKToJCQkJICAgICBcCisgIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19OQU4sRlBfQ0xTX1pFUk8pOgkJCQkgICAgIFwKKyAgICBfRlBfRlJBQ19DT1BZXyMjd2MoUiwgWCk7CQkJCQkJICAgICBcCisgICAgUiMjX3MgPSBYIyNfczsJCQkJCQkJICAgICBcCisgICAgUiMjX2MgPSBYIyNfYzsJCQkJCQkJICAgICBcCisgICAgYnJlYWs7CQkJCQkJCQkgICAgIFwKKwkJCQkJCQkJCSAgICAgXAorICBjYXNlIF9GUF9DTFNfQ09NQklORShGUF9DTFNfWkVSTyxGUF9DTFNfTk9STUFMKToJCQkgICAgIFwKKyAgICBSIyNfZSA9IFkjI19lOwkJCQkJCQkgICAgIFwKKyAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX05PUk1BTCxGUF9DTFNfTkFOKToJCQkgICAgIFwKKyAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX0lORixGUF9DTFNfTkFOKToJCQkJICAgICBcCisgIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19aRVJPLEZQX0NMU19OQU4pOgkJCQkgICAgIFwKKyAgICBfRlBfRlJBQ19DT1BZXyMjd2MoUiwgWSk7CQkJCQkJICAgICBcCisgICAgUiMjX3MgPSBZIyNfczsJCQkJCQkJICAgICBcCisgICAgUiMjX2MgPSBZIyNfYzsJCQkJCQkJICAgICBcCisgICAgYnJlYWs7CQkJCQkJCQkgICAgIFwKKwkJCQkJCQkJCSAgICAgXAorICBjYXNlIF9GUF9DTFNfQ09NQklORShGUF9DTFNfSU5GLEZQX0NMU19JTkYpOgkJCQkgICAgIFwKKyAgICBpZiAoWCMjX3MgIT0gWSMjX3MpCQkJCQkJCSAgICAgXAorICAgICAgewkJCQkJCQkJCSAgICAgXAorCS8qICtJTkYgKyAtSU5GID0+IE5BTiAqLwkJCQkJICAgICBcCisJX0ZQX0ZSQUNfU0VUXyMjd2MoUiwgX0ZQX05BTkZSQUNfIyNmcyk7CQkJCSAgICAgXAorCVIjI19zID0gX0ZQX05BTlNJR05fIyNmczsJCQkJCSAgICAgXAorCVIjI19jID0gRlBfQ0xTX05BTjsJCQkJCQkgICAgIFwKKwlGUF9TRVRfRVhDRVBUSU9OKEZQX0VYX0lOVkFMSUQpOwkJCQkgICAgIFwKKwlicmVhazsJCQkJCQkJCSAgICAgXAorICAgICAgfQkJCQkJCQkJCSAgICAgXAorICAgIC8qIEZBTExUSFJVICovCQkJCQkJCSAgICAgXAorCQkJCQkJCQkJICAgICBcCisgIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19JTkYsRlBfQ0xTX05PUk1BTCk6CQkJICAgICBcCisgIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19JTkYsRlBfQ0xTX1pFUk8pOgkJCQkgICAgIFwKKyAgICBSIyNfcyA9IFgjI19zOwkJCQkJCQkgICAgIFwKKyAgICBSIyNfYyA9IEZQX0NMU19JTkY7CQkJCQkJCSAgICAgXAorICAgIGJyZWFrOwkJCQkJCQkJICAgICBcCisJCQkJCQkJCQkgICAgIFwKKyAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX05PUk1BTCxGUF9DTFNfSU5GKToJCQkgICAgIFwKKyAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX1pFUk8sRlBfQ0xTX0lORik6CQkJCSAgICAgXAorICAgIFIjI19zID0gWSMjX3M7CQkJCQkJCSAgICAgXAorICAgIFIjI19jID0gRlBfQ0xTX0lORjsJCQkJCQkJICAgICBcCisgICAgYnJlYWs7CQkJCQkJCQkgICAgIFwKKwkJCQkJCQkJCSAgICAgXAorICBjYXNlIF9GUF9DTFNfQ09NQklORShGUF9DTFNfWkVSTyxGUF9DTFNfWkVSTyk6CQkJICAgICBcCisgICAgLyogbWFrZSBzdXJlIHRoZSBzaWduIGlzIGNvcnJlY3QgKi8JCQkJCSAgICAgXAorICAgIGlmIChGUF9ST1VORE1PREUgPT0gRlBfUk5EX01JTkYpCQkJCQkgICAgIFwKKyAgICAgIFIjI19zID0gWCMjX3MgfCBZIyNfczsJCQkJCQkgICAgIFwKKyAgICBlbHNlCQkJCQkJCQkgICAgIFwKKyAgICAgIFIjI19zID0gWCMjX3MgJiBZIyNfczsJCQkJCQkgICAgIFwKKyAgICBSIyNfYyA9IEZQX0NMU19aRVJPOwkJCQkJCSAgICAgXAorICAgIGJyZWFrOwkJCQkJCQkJICAgICBcCisJCQkJCQkJCQkgICAgIFwKKyAgZGVmYXVsdDoJCQkJCQkJCSAgICAgXAorICAgIGFib3J0KCk7CQkJCQkJCQkgICAgIFwKKyAgfQkJCQkJCQkJCSAgICAgXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBfRlBfQUREKGZzLCB3YywgUiwgWCwgWSkgX0ZQX0FERF9JTlRFUk5BTChmcywgd2MsIFIsIFgsIFksICcrJykKKyNkZWZpbmUgX0ZQX1NVQihmcywgd2MsIFIsIFgsIFkpCQkJCQkgICAgIFwKKyAgZG8gewkJCQkJCQkJCSAgICAgXAorICAgIGlmIChZIyNfYyAhPSBGUF9DTFNfTkFOKSBZIyNfcyBePSAxOwkJCQkgICAgIFwKKyAgICBfRlBfQUREX0lOVEVSTkFMKGZzLCB3YywgUiwgWCwgWSwgJy0nKTsJCQkJICAgICBcCisgIH0gd2hpbGUgKDApCisKKworLyoKKyAqIE1haW4gbmVnYXRpb24gcm91dGluZS4gIEZJWE1FIC0tIHdoZW4gd2UgY2FyZSBhYm91dCBzZXR0aW5nIGV4Y2VwdGlvbgorICogYml0cyByZWxpYWJseSwgdGhpcyB3aWxsIG5vdCBkby4gIFdlIHNob3VsZCBleGFtaW5lIGFsbCBvZiB0aGUgZnAgY2xhc3Nlcy4KKyAqLworCisjZGVmaW5lIF9GUF9ORUcoZnMsIHdjLCBSLCBYKQkJXAorICBkbyB7CQkJCQlcCisgICAgX0ZQX0ZSQUNfQ09QWV8jI3djKFIsIFgpOwkJXAorICAgIFIjI19jID0gWCMjX2M7CQkJXAorICAgIFIjI19lID0gWCMjX2U7CQkJXAorICAgIFIjI19zID0gMSBeIFgjI19zOwkJCVwKKyAgfSB3aGlsZSAoMCkKKworCisvKgorICogTWFpbiBtdWx0aXBsaWNhdGlvbiByb3V0aW5lLiAgVGhlIGlucHV0IHZhbHVlcyBzaG91bGQgYmUgY29va2VkLgorICovCisKKyNkZWZpbmUgX0ZQX01VTChmcywgd2MsIFIsIFgsIFkpCQkJXAorZG8gewkJCQkJCQlcCisgIFIjI19zID0gWCMjX3MgXiBZIyNfczsJCQkJXAorICBzd2l0Y2ggKF9GUF9DTFNfQ09NQklORShYIyNfYywgWSMjX2MpKQkJXAorICB7CQkJCQkJCVwKKyAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX05PUk1BTCxGUF9DTFNfTk9STUFMKToJXAorICAgIFIjI19jID0gRlBfQ0xTX05PUk1BTDsJCQkJXAorICAgIFIjI19lID0gWCMjX2UgKyBZIyNfZSArIDE7CQkJCVwKKwkJCQkJCQlcCisgICAgX0ZQX01VTF9NRUFUXyMjZnMoUixYLFkpOwkJCQlcCisJCQkJCQkJXAorICAgIGlmIChfRlBfRlJBQ19PVkVSUF8jI3djKGZzLCBSKSkJCQlcCisgICAgICBfRlBfRlJBQ19TUlNfIyN3YyhSLCAxLCBfRlBfV0ZSQUNCSVRTXyMjZnMpOwlcCisgICAgZWxzZQkJCQkJCVwKKyAgICAgIFIjI19lLS07CQkJCQkJXAorICAgIGJyZWFrOwkJCQkJCVwKKwkJCQkJCQlcCisgIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19OQU4sRlBfQ0xTX05BTik6CQlcCisgICAgX0ZQX0NIT09TRU5BTihmcywgd2MsIFIsIFgsIFksICcqJyk7CQlcCisgICAgYnJlYWs7CQkJCQkJXAorCQkJCQkJCVwKKyAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX05BTixGUF9DTFNfTk9STUFMKToJXAorICBjYXNlIF9GUF9DTFNfQ09NQklORShGUF9DTFNfTkFOLEZQX0NMU19JTkYpOgkJXAorICBjYXNlIF9GUF9DTFNfQ09NQklORShGUF9DTFNfTkFOLEZQX0NMU19aRVJPKToJCVwKKyAgICBSIyNfcyA9IFgjI19zOwkJCQkJXAorCQkJCQkJCVwKKyAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX0lORixGUF9DTFNfSU5GKToJCVwKKyAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX0lORixGUF9DTFNfTk9STUFMKToJXAorICBjYXNlIF9GUF9DTFNfQ09NQklORShGUF9DTFNfWkVSTyxGUF9DTFNfTk9STUFMKToJXAorICBjYXNlIF9GUF9DTFNfQ09NQklORShGUF9DTFNfWkVSTyxGUF9DTFNfWkVSTyk6CVwKKyAgICBfRlBfRlJBQ19DT1BZXyMjd2MoUiwgWCk7CQkJCVwKKyAgICBSIyNfYyA9IFgjI19jOwkJCQkJXAorICAgIGJyZWFrOwkJCQkJCVwKKwkJCQkJCQlcCisgIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19OT1JNQUwsRlBfQ0xTX05BTik6CVwKKyAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX0lORixGUF9DTFNfTkFOKToJCVwKKyAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX1pFUk8sRlBfQ0xTX05BTik6CQlcCisgICAgUiMjX3MgPSBZIyNfczsJCQkJCVwKKwkJCQkJCQlcCisgIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19OT1JNQUwsRlBfQ0xTX0lORik6CVwKKyAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX05PUk1BTCxGUF9DTFNfWkVSTyk6CVwKKyAgICBfRlBfRlJBQ19DT1BZXyMjd2MoUiwgWSk7CQkJCVwKKyAgICBSIyNfYyA9IFkjI19jOwkJCQkJXAorICAgIGJyZWFrOwkJCQkJCVwKKwkJCQkJCQlcCisgIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19JTkYsRlBfQ0xTX1pFUk8pOgkJXAorICBjYXNlIF9GUF9DTFNfQ09NQklORShGUF9DTFNfWkVSTyxGUF9DTFNfSU5GKToJCVwKKyAgICBSIyNfcyA9IF9GUF9OQU5TSUdOXyMjZnM7CQkJCVwKKyAgICBSIyNfYyA9IEZQX0NMU19OQU47CQkJCQlcCisgICAgX0ZQX0ZSQUNfU0VUXyMjd2MoUiwgX0ZQX05BTkZSQUNfIyNmcyk7CQlcCisgICAgRlBfU0VUX0VYQ0VQVElPTihGUF9FWF9JTlZBTElEKTsJCQlcCisgICAgYnJlYWs7CQkJCQkJXAorCQkJCQkJCVwKKyAgZGVmYXVsdDoJCQkJCQlcCisgICAgYWJvcnQoKTsJCQkJCQlcCisgIH0JCQkJCQkJXAorfSB3aGlsZSAoMCkKKworCisvKgorICogTWFpbiBkaXZpc2lvbiByb3V0aW5lLiAgVGhlIGlucHV0IHZhbHVlcyBzaG91bGQgYmUgY29va2VkLgorICovCisKKyNkZWZpbmUgX0ZQX0RJVihmcywgd2MsIFIsIFgsIFkpCQkJXAorZG8gewkJCQkJCQlcCisgIFIjI19zID0gWCMjX3MgXiBZIyNfczsJCQkJXAorICBzd2l0Y2ggKF9GUF9DTFNfQ09NQklORShYIyNfYywgWSMjX2MpKQkJXAorICB7CQkJCQkJCVwKKyAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX05PUk1BTCxGUF9DTFNfTk9STUFMKToJXAorICAgIFIjI19jID0gRlBfQ0xTX05PUk1BTDsJCQkJXAorICAgIFIjI19lID0gWCMjX2UgLSBZIyNfZTsJCQkJXAorCQkJCQkJCVwKKyAgICBfRlBfRElWX01FQVRfIyNmcyhSLFgsWSk7CQkJCVwKKyAgICBicmVhazsJCQkJCQlcCisJCQkJCQkJXAorICBjYXNlIF9GUF9DTFNfQ09NQklORShGUF9DTFNfTkFOLEZQX0NMU19OQU4pOgkJXAorICAgIF9GUF9DSE9PU0VOQU4oZnMsIHdjLCBSLCBYLCBZLCAnLycpOwkJXAorICAgIGJyZWFrOwkJCQkJCVwKKwkJCQkJCQlcCisgIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19OQU4sRlBfQ0xTX05PUk1BTCk6CVwKKyAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX05BTixGUF9DTFNfSU5GKToJCVwKKyAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX05BTixGUF9DTFNfWkVSTyk6CQlcCisgICAgUiMjX3MgPSBYIyNfczsJCQkJCVwKKyAgICBfRlBfRlJBQ19DT1BZXyMjd2MoUiwgWCk7CQkJCVwKKyAgICBSIyNfYyA9IFgjI19jOwkJCQkJXAorICAgIGJyZWFrOwkJCQkJCVwKKwkJCQkJCQlcCisgIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19OT1JNQUwsRlBfQ0xTX05BTik6CVwKKyAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX0lORixGUF9DTFNfTkFOKToJCVwKKyAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX1pFUk8sRlBfQ0xTX05BTik6CQlcCisgICAgUiMjX3MgPSBZIyNfczsJCQkJCVwKKyAgICBfRlBfRlJBQ19DT1BZXyMjd2MoUiwgWSk7CQkJCVwKKyAgICBSIyNfYyA9IFkjI19jOwkJCQkJXAorICAgIGJyZWFrOwkJCQkJCVwKKwkJCQkJCQlcCisgIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19OT1JNQUwsRlBfQ0xTX0lORik6CVwKKyAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX1pFUk8sRlBfQ0xTX0lORik6CQlcCisgIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19aRVJPLEZQX0NMU19OT1JNQUwpOglcCisgICAgUiMjX2MgPSBGUF9DTFNfWkVSTzsJCQkJXAorICAgIGJyZWFrOwkJCQkJCVwKKwkJCQkJCQlcCisgIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19OT1JNQUwsRlBfQ0xTX1pFUk8pOglcCisgICAgRlBfU0VUX0VYQ0VQVElPTihGUF9FWF9ESVZaRVJPKTsJCQlcCisgIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19JTkYsRlBfQ0xTX1pFUk8pOgkJXAorICBjYXNlIF9GUF9DTFNfQ09NQklORShGUF9DTFNfSU5GLEZQX0NMU19OT1JNQUwpOglcCisgICAgUiMjX2MgPSBGUF9DTFNfSU5GOwkJCQkJXAorICAgIGJyZWFrOwkJCQkJCVwKKwkJCQkJCQlcCisgIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19JTkYsRlBfQ0xTX0lORik6CQlcCisgIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19aRVJPLEZQX0NMU19aRVJPKToJXAorICAgIFIjI19zID0gX0ZQX05BTlNJR05fIyNmczsJCQkJXAorICAgIFIjI19jID0gRlBfQ0xTX05BTjsJCQkJCVwKKyAgICBfRlBfRlJBQ19TRVRfIyN3YyhSLCBfRlBfTkFORlJBQ18jI2ZzKTsJCVwKKyAgICBGUF9TRVRfRVhDRVBUSU9OKEZQX0VYX0lOVkFMSUQpOwkJCVwKKyAgICBicmVhazsJCQkJCQlcCisJCQkJCQkJXAorICBkZWZhdWx0OgkJCQkJCVwKKyAgICBhYm9ydCgpOwkJCQkJCVwKKyAgfQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisKKy8qCisgKiBNYWluIGRpZmZlcmVudGlhbCBjb21wYXJpc29uIHJvdXRpbmUuICBUaGUgaW5wdXRzIHNob3VsZCBiZSByYXcgbm90CisgKiBjb29rZWQuICBUaGUgcmV0dXJuIGlzIC0xLDAsMSBmb3Igbm9ybWFsIHZhbHVlcywgMiBvdGhlcndpc2UuCisgKi8KKworI2RlZmluZSBfRlBfQ01QKGZzLCB3YywgcmV0LCBYLCBZLCB1bikJCQkJCVwKKyAgZG8gewkJCQkJCQkJCVwKKyAgICAvKiBOQU5zIGFyZSB1bm9yZGVyZWQgKi8JCQkJCQlcCisgICAgaWYgKChYIyNfZSA9PSBfRlBfRVhQTUFYXyMjZnMgJiYgIV9GUF9GUkFDX1pFUk9QXyMjd2MoWCkpCQlcCisJfHwgKFkjI19lID09IF9GUF9FWFBNQVhfIyNmcyAmJiAhX0ZQX0ZSQUNfWkVST1BfIyN3YyhZKSkpCVwKKyAgICAgIHsJCQkJCQkJCQlcCisJcmV0ID0gdW47CQkJCQkJCVwKKyAgICAgIH0JCQkJCQkJCQlcCisgICAgZWxzZQkJCQkJCQkJXAorICAgICAgewkJCQkJCQkJCVwKKwlpbnQgX19pc196ZXJvX3g7CQkJCQkJXAorCWludCBfX2lzX3plcm9feTsJCQkJCQlcCisJCQkJCQkJCQlcCisJX19pc196ZXJvX3ggPSAoIVgjI19lICYmIF9GUF9GUkFDX1pFUk9QXyMjd2MoWCkpID8gMSA6IDA7CVwKKwlfX2lzX3plcm9feSA9ICghWSMjX2UgJiYgX0ZQX0ZSQUNfWkVST1BfIyN3YyhZKSkgPyAxIDogMDsJXAorCQkJCQkJCQkJXAorCWlmIChfX2lzX3plcm9feCAmJiBfX2lzX3plcm9feSkJCQkJCVwKKwkJcmV0ID0gMDsJCQkJCQlcCisJZWxzZSBpZiAoX19pc196ZXJvX3gpCQkJCQkJXAorCQlyZXQgPSBZIyNfcyA/IDEgOiAtMTsJCQkJCVwKKwllbHNlIGlmIChfX2lzX3plcm9feSkJCQkJCQlcCisJCXJldCA9IFgjI19zID8gLTEgOiAxOwkJCQkJXAorCWVsc2UgaWYgKFgjI19zICE9IFkjI19zKQkJCQkJXAorCSAgcmV0ID0gWCMjX3MgPyAtMSA6IDE7CQkJCQkJXAorCWVsc2UgaWYgKFgjI19lID4gWSMjX2UpCQkJCQkJXAorCSAgcmV0ID0gWCMjX3MgPyAtMSA6IDE7CQkJCQkJXAorCWVsc2UgaWYgKFgjI19lIDwgWSMjX2UpCQkJCQkJXAorCSAgcmV0ID0gWCMjX3MgPyAxIDogLTE7CQkJCQkJXAorCWVsc2UgaWYgKF9GUF9GUkFDX0dUXyMjd2MoWCwgWSkpCQkJCVwKKwkgIHJldCA9IFgjI19zID8gLTEgOiAxOwkJCQkJCVwKKwllbHNlIGlmIChfRlBfRlJBQ19HVF8jI3djKFksIFgpKQkJCQlcCisJICByZXQgPSBYIyNfcyA/IDEgOiAtMTsJCQkJCQlcCisJZWxzZQkJCQkJCQkJXAorCSAgcmV0ID0gMDsJCQkJCQkJXAorICAgICAgfQkJCQkJCQkJCVwKKyAgfSB3aGlsZSAoMCkKKworCisvKiBTaW1wbGlmaWNhdGlvbiBmb3Igc3RyaWN0IGVxdWFsaXR5LiAgKi8KKworI2RlZmluZSBfRlBfQ01QX0VRKGZzLCB3YywgcmV0LCBYLCBZKQkJCQkJICBcCisgIGRvIHsJCQkJCQkJCQkgIFwKKyAgICAvKiBOQU5zIGFyZSB1bm9yZGVyZWQgKi8JCQkJCQkgIFwKKyAgICBpZiAoKFgjI19lID09IF9GUF9FWFBNQVhfIyNmcyAmJiAhX0ZQX0ZSQUNfWkVST1BfIyN3YyhYKSkJCSAgXAorCXx8IChZIyNfZSA9PSBfRlBfRVhQTUFYXyMjZnMgJiYgIV9GUF9GUkFDX1pFUk9QXyMjd2MoWSkpKQkgIFwKKyAgICAgIHsJCQkJCQkJCQkgIFwKKwlyZXQgPSAxOwkJCQkJCQkgIFwKKyAgICAgIH0JCQkJCQkJCQkgIFwKKyAgICBlbHNlCQkJCQkJCQkgIFwKKyAgICAgIHsJCQkJCQkJCQkgIFwKKwlyZXQgPSAhKFgjI19lID09IFkjI19lCQkJCQkJICBcCisJCSYmIF9GUF9GUkFDX0VRXyMjd2MoWCwgWSkJCQkJICBcCisJCSYmIChYIyNfcyA9PSBZIyNfcyB8fCAhWCMjX2UgJiYgX0ZQX0ZSQUNfWkVST1BfIyN3YyhYKSkpOyBcCisgICAgICB9CQkJCQkJCQkJICBcCisgIH0gd2hpbGUgKDApCisKKy8qCisgKiBNYWluIHNxdWFyZSByb290IHJvdXRpbmUuICBUaGUgaW5wdXQgdmFsdWUgc2hvdWxkIGJlIGNvb2tlZC4KKyAqLworCisjZGVmaW5lIF9GUF9TUVJUKGZzLCB3YywgUiwgWCkJCQkJCQlcCitkbyB7CQkJCQkJCQkJXAorICAgIF9GUF9GUkFDX0RFQ0xfIyN3YyhUKTsgX0ZQX0ZSQUNfREVDTF8jI3djKFMpOwkJCVwKKyAgICBfRlBfV19UWVBFIHE7CQkJCQkJCVwKKyAgICBzd2l0Y2ggKFgjI19jKQkJCQkJCQlcCisgICAgewkJCQkJCQkJCVwKKyAgICBjYXNlIEZQX0NMU19OQU46CQkJCQkJCVwKKwlfRlBfRlJBQ19DT1BZXyMjd2MoUiwgWCk7CQkJCQlcCisJUiMjX3MgPSBYIyNfczsJCQkJCQkJXAorICAgIAlSIyNfYyA9IEZQX0NMU19OQU47CQkJCQkJXAorICAgIAlicmVhazsJCQkJCQkJCVwKKyAgICBjYXNlIEZQX0NMU19JTkY6CQkJCQkJCVwKKyAgICAJaWYgKFgjI19zKQkJCQkJCQlcCisgICAgCSAgewkJCQkJCQkJXAorICAgIAkgICAgUiMjX3MgPSBfRlBfTkFOU0lHTl8jI2ZzOwkJCQkJXAorCSAgICBSIyNfYyA9IEZQX0NMU19OQU47IC8qIE5BTiAqLwkJCQlcCisJICAgIF9GUF9GUkFDX1NFVF8jI3djKFIsIF9GUF9OQU5GUkFDXyMjZnMpOwkJCVwKKwkgICAgRlBfU0VUX0VYQ0VQVElPTihGUF9FWF9JTlZBTElEKTsJCQkJXAorICAgIAkgIH0JCQkJCQkJCVwKKyAgICAJZWxzZQkJCQkJCQkJXAorICAgIAkgIHsJCQkJCQkJCVwKKyAgICAJICAgIFIjI19zID0gMDsJCQkJCQkJXAorICAgIAkgICAgUiMjX2MgPSBGUF9DTFNfSU5GOyAvKiBzcXJ0KCtpbmYpID0gK2luZiAqLwkJCVwKKyAgICAJICB9CQkJCQkJCQlcCisgICAgCWJyZWFrOwkJCQkJCQkJXAorICAgIGNhc2UgRlBfQ0xTX1pFUk86CQkJCQkJCVwKKwlSIyNfcyA9IFgjI19zOwkJCQkJCQlcCisJUiMjX2MgPSBGUF9DTFNfWkVSTzsgLyogc3FydCgrLTApID0gKy0wICovCQkJXAorCWJyZWFrOwkJCQkJCQkJXAorICAgIGNhc2UgRlBfQ0xTX05PUk1BTDoJCQkJCQkJXAorICAgIAlSIyNfcyA9IDA7CQkJCQkJCVwKKyAgICAgICAgaWYgKFgjI19zKQkJCQkJCQlcCisgICAgICAgICAgewkJCQkJCQkJXAorCSAgICBSIyNfYyA9IEZQX0NMU19OQU47IC8qIHNOQU4gKi8JCQkJXAorCSAgICBSIyNfcyA9IF9GUF9OQU5TSUdOXyMjZnM7CQkJCQlcCisJICAgIF9GUF9GUkFDX1NFVF8jI3djKFIsIF9GUF9OQU5GUkFDXyMjZnMpOwkJCVwKKwkgICAgRlBfU0VUX0VYQ0VQVElPTihGUF9FWF9JTlZBTElEKTsJCQkJXAorCSAgICBicmVhazsJCQkJCQkJXAorICAgICAgICAgIH0JCQkJCQkJCVwKKyAgICAJUiMjX2MgPSBGUF9DTFNfTk9STUFMOwkJCQkJCVwKKyAgICAgICAgaWYgKFgjI19lICYgMSkJCQkJCQkJXAorICAgICAgICAgIF9GUF9GUkFDX1NMTF8jI3djKFgsIDEpOwkJCQkJXAorICAgICAgICBSIyNfZSA9IFgjI19lID4+IDE7CQkJCQkJXAorICAgICAgICBfRlBfRlJBQ19TRVRfIyN3YyhTLCBfRlBfWkVST0ZSQUNfIyN3Yyk7CQkJXAorICAgICAgICBfRlBfRlJBQ19TRVRfIyN3YyhSLCBfRlBfWkVST0ZSQUNfIyN3Yyk7CQkJXAorICAgICAgICBxID0gX0ZQX09WRVJGTE9XXyMjZnMgPj4gMTsJCQkJCVwKKyAgICAgICAgX0ZQX1NRUlRfTUVBVF8jI3djKFIsIFMsIFQsIFgsIHEpOwkJCQlcCisgICAgfQkJCQkJCQkJCVwKKyAgfSB3aGlsZSAoMCkKKworLyoKKyAqIENvbnZlcnQgZnJvbSBGUCB0byBpbnRlZ2VyCisgKi8KKworLyogUlNJR05FRCBjYW4gaGF2ZSBmb2xsb3dpbmcgdmFsdWVzOgorICogMDogIHRoZSBudW1iZXIgaXMgcmVxdWlyZWQgdG8gYmUgMC4uKDJecnNpemUpLTEsIGlmIG5vdCwgTlYgaXMgc2V0IHBsdXMKKyAqICAgICB0aGUgcmVzdWx0IGlzIGVpdGhlciAwIG9yICgyXnJzaXplKS0xIGRlcGVuZGluZyBvbiB0aGUgc2lnbiBpbiBzdWNoIGNhc2UuCisgKiAxOiAgdGhlIG51bWJlciBpcyByZXF1aXJlZCB0byBiZSAtKDJeKHJzaXplLTEpKS4uKDJeKHJzaXplLTEpKS0xLCBpZiBub3QsIE5WIGlzCisgKiAgICAgc2V0IHBsdXMgdGhlIHJlc3VsdCBpcyBlaXRoZXIgLSgyXihyc2l6ZS0xKSkgb3IgKDJeKHJzaXplLTEpKS0xIGRlcGVuZGluZworICogICAgIG9uIHRoZSBzaWduIGluIHN1Y2ggY2FzZS4KKyAqIDI6ICB0aGUgbnVtYmVyIGlzIHJlcXVpcmVkIHRvIGJlIC0oMl4ocnNpemUtMSkpLi4oMl4ocnNpemUtMSkpLTEsIGlmIG5vdCwgTlYgaXMKKyAqICAgICBzZXQgcGx1cyB0aGUgcmVzdWx0IGlzIHRydW5jYXRlZCB0byBmaXQgaW50byBkZXN0aW5hdGlvbi4KKyAqIC0xOiB0aGUgbnVtYmVyIGlzIHJlcXVpcmVkIHRvIGJlIC0oMl4ocnNpemUtMSkpLi4oMl5yc2l6ZSktMSwgaWYgbm90LCBOViBpcworICogICAgIHNldCBwbHVzIHRoZSByZXN1bHQgaXMgZWl0aGVyIC0oMl4ocnNpemUtMSkpIG9yICgyXihyc2l6ZS0xKSktMSBkZXBlbmRpbmcKKyAqICAgICBvbiB0aGUgc2lnbiBpbiBzdWNoIGNhc2UuCisgKi8KKyNkZWZpbmUgX0ZQX1RPX0lOVChmcywgd2MsIHIsIFgsIHJzaXplLCByc2lnbmVkKQkJCQlcCisgIGRvIHsJCQkJCQkJCQkJXAorICAgIHN3aXRjaCAoWCMjX2MpCQkJCQkJCQlcCisgICAgICB7CQkJCQkJCQkJCVwKKyAgICAgIGNhc2UgRlBfQ0xTX05PUk1BTDoJCQkJCQkJXAorCWlmIChYIyNfZSA8IDApCQkJCQkJCQlcCisJICB7CQkJCQkJCQkJXAorCSAgICBGUF9TRVRfRVhDRVBUSU9OKEZQX0VYX0lORVhBQ1QpOwkJCQkJXAorCSAgY2FzZSBGUF9DTFNfWkVSTzoJCQkJCQkJXAorCSAgICByID0gMDsJCQkJCQkJCVwKKwkgIH0JCQkJCQkJCQlcCisJZWxzZSBpZiAoWCMjX2UgPj0gcnNpemUgLSAocnNpZ25lZCA+IDAgfHwgWCMjX3MpCQkJXAorCQkgfHwgKCFyc2lnbmVkICYmIFgjI19zKSkJCQkJCVwKKwkgIHsJLyogb3ZlcmZsb3cgKi8JCQkJCQkJXAorCSAgY2FzZSBGUF9DTFNfTkFOOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgIGNhc2UgRlBfQ0xTX0lORjoJCQkJCQkJXAorCSAgICBpZiAocnNpZ25lZCA9PSAyKQkJCQkJCQlcCisJICAgICAgewkJCQkJCQkJCVwKKwkJaWYgKFgjI19jICE9IEZQX0NMU19OT1JNQUwJCQkJCVwKKwkJICAgIHx8IFgjI19lID49IHJzaXplIC0gMSArIF9GUF9XRlJBQ0JJVFNfIyNmcykJCQlcCisJCSAgciA9IDA7CQkJCQkJCVwKKwkJZWxzZQkJCQkJCQkJXAorCQkgIHsJCQkJCQkJCVwKKwkJICAgIF9GUF9GUkFDX1NMTF8jI3djKFgsIChYIyNfZSAtIF9GUF9XRlJBQ0JJVFNfIyNmcyArIDEpKTsJXAorCQkgICAgX0ZQX0ZSQUNfQVNTRU1CTEVfIyN3YyhyLCBYLCByc2l6ZSk7CQkJXAorCQkgIH0JCQkJCQkJCVwKKwkgICAgICB9CQkJCQkJCQkJXAorCSAgICBlbHNlIGlmIChyc2lnbmVkKQkJCQkJCQlcCisJICAgICAgewkJCQkJCQkJCVwKKwkJciA9IDE7CQkJCQkJCQlcCisJCXIgPDw9IHJzaXplIC0gMTsJCQkJCQlcCisJCXIgLT0gMSAtIFgjI19zOwkJCQkJCQlcCisJICAgICAgfQkJCQkJCQkJCVwKKwkgICAgZWxzZQkJCQkJCQkJXAorCSAgICAgIHsJCQkJCQkJCQlcCisJCXIgPSAwOwkJCQkJCQkJXAorCQlpZiAoWCMjX3MpCQkJCQkJCVwKKwkJICByID0gfnI7CQkJCQkJCVwKKwkgICAgICB9CQkJCQkJCQkJXAorCSAgICBGUF9TRVRfRVhDRVBUSU9OKEZQX0VYX0lOVkFMSUQpOwkJCQkJXAorCSAgfQkJCQkJCQkJCVwKKwllbHNlCQkJCQkJCQkJXAorCSAgewkJCQkJCQkJCVwKKwkgICAgaWYgKF9GUF9XX1RZUEVfU0laRSp3YyA8IHJzaXplKQkJCQkJXAorCSAgICAgIHsJCQkJCQkJCQlcCisJCV9GUF9GUkFDX0FTU0VNQkxFXyMjd2MociwgWCwgcnNpemUpOwkJCQlcCisJCXIgPDw9IFgjI19lIC0gX0ZQX1dGUkFDQklUU18jI2ZzOwkJCQlcCisJICAgICAgfQkJCQkJCQkJCVwKKwkgICAgZWxzZQkJCQkJCQkJXAorCSAgICAgIHsJCQkJCQkJCQlcCisJCWlmIChYIyNfZSA+PSBfRlBfV0ZSQUNCSVRTXyMjZnMpCQkJCVwKKwkJICBfRlBfRlJBQ19TTExfIyN3YyhYLCAoWCMjX2UgLSBfRlBfV0ZSQUNCSVRTXyMjZnMgKyAxKSk7CVwKKwkJZWxzZSBpZiAoWCMjX2UgPCBfRlBfV0ZSQUNCSVRTXyMjZnMgLSAxKQkJCVwKKwkJICB7CQkJCQkJCQlcCisJCSAgICBfRlBfRlJBQ19TUlNfIyN3YyhYLCAoX0ZQX1dGUkFDQklUU18jI2ZzIC0gWCMjX2UgLSAyKSwJXAorCQkJCSAgICAgIF9GUF9XRlJBQ0JJVFNfIyNmcyk7CQkJXAorCQkgICAgaWYgKF9GUF9GUkFDX0xPV18jI3djKFgpICYgMSkJCQkJXAorCQkgICAgICBGUF9TRVRfRVhDRVBUSU9OKEZQX0VYX0lORVhBQ1QpOwkJCQlcCisJCSAgICBfRlBfRlJBQ19TUkxfIyN3YyhYLCAxKTsJCQkJCVwKKwkJICB9CQkJCQkJCQlcCisJCV9GUF9GUkFDX0FTU0VNQkxFXyMjd2MociwgWCwgcnNpemUpOwkJCQlcCisJICAgICAgfQkJCQkJCQkJCVwKKwkgICAgaWYgKHJzaWduZWQgJiYgWCMjX3MpCQkJCQkJXAorCSAgICAgIHIgPSAtcjsJCQkJCQkJCVwKKwkgIH0JCQkJCQkJCQlcCisJYnJlYWs7CQkJCQkJCQkJXAorICAgICAgfQkJCQkJCQkJCQlcCisgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgX0ZQX1RPX0lOVF9ST1VORChmcywgd2MsIHIsIFgsIHJzaXplLCByc2lnbmVkKQkJCQlcCisgIGRvIHsJCQkJCQkJCQkJXAorICAgIHIgPSAwOwkJCQkJCQkJCVwKKyAgICBzd2l0Y2ggKFgjI19jKQkJCQkJCQkJXAorICAgICAgewkJCQkJCQkJCQlcCisgICAgICBjYXNlIEZQX0NMU19OT1JNQUw6CQkJCQkJCVwKKwlpZiAoWCMjX2UgPj0gX0ZQX0ZSQUNCSVRTXyMjZnMgLSAxKQkJCQkJXAorCSAgewkJCQkJCQkJCVwKKwkgICAgaWYgKFgjI19lIDwgcnNpemUgLSAxICsgX0ZQX1dGUkFDQklUU18jI2ZzKQkJCQlcCisJICAgICAgewkJCQkJCQkJCVwKKwkJaWYgKFgjI19lID49IF9GUF9XRlJBQ0JJVFNfIyNmcyAtIDEpCQkJCVwKKwkJICB7CQkJCQkJCQlcCisJCSAgICBfRlBfRlJBQ19BU1NFTUJMRV8jI3djKHIsIFgsIHJzaXplKTsJCQlcCisJCSAgICByIDw8PSBYIyNfZSAtIF9GUF9XRlJBQ0JJVFNfIyNmcyArIDE7CQkJXAorCQkgIH0JCQkJCQkJCVwKKwkJZWxzZQkJCQkJCQkJXAorCQkgIHsJCQkJCQkJCVwKKwkJICAgIF9GUF9GUkFDX1NSTF8jI3djKFgsIF9GUF9XT1JLQklUUyAtIFgjI19lCQkJXAorCQkJCSAgICAgICsgX0ZQX0ZSQUNCSVRTXyMjZnMgLSAxKTsJCQlcCisJCSAgICBfRlBfRlJBQ19BU1NFTUJMRV8jI3djKHIsIFgsIHJzaXplKTsJCQlcCisJCSAgfQkJCQkJCQkJXAorCSAgICAgIH0JCQkJCQkJCQlcCisJICB9CQkJCQkJCQkJXAorCWVsc2UJCQkJCQkJCQlcCisJICB7CQkJCQkJCQkJXAorCSAgICBpZiAoWCMjX2UgPD0gLV9GUF9XT1JLQklUUyAtIDEpCQkJCQlcCisJICAgICAgX0ZQX0ZSQUNfU0VUXyMjd2MoWCwgX0ZQX01JTkZSQUNfIyN3Yyk7CQkJCVwKKwkgICAgZWxzZQkJCQkJCQkJXAorCSAgICAgIF9GUF9GUkFDX1NSU18jI3djKFgsIF9GUF9GUkFDQklUU18jI2ZzIC0gMSAtIFgjI19lLAkJXAorCQkJCV9GUF9XRlJBQ0JJVFNfIyNmcyk7CQkJCVwKKwkgICAgX0ZQX1JPVU5EKHdjLCBYKTsJCQkJCQkJXAorCSAgICBfRlBfRlJBQ19TUkxfIyN3YyhYLCBfRlBfV09SS0JJVFMpOwkJCQkJXAorCSAgICBfRlBfRlJBQ19BU1NFTUJMRV8jI3djKHIsIFgsIHJzaXplKTsJCQkJXAorCSAgfQkJCQkJCQkJCVwKKwlpZiAocnNpZ25lZCAmJiBYIyNfcykJCQkJCQkJXAorCSAgciA9IC1yOwkJCQkJCQkJXAorCWlmIChYIyNfZSA+PSByc2l6ZSAtIChyc2lnbmVkID4gMCB8fCBYIyNfcykJCQkJXAorCSAgICB8fCAoIXJzaWduZWQgJiYgWCMjX3MpKQkJCQkJCVwKKwkgIHsJLyogb3ZlcmZsb3cgKi8JCQkJCQkJXAorCSAgY2FzZSBGUF9DTFNfTkFOOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgIGNhc2UgRlBfQ0xTX0lORjoJCQkJCQkJXAorCSAgICBpZiAoIXJzaWduZWQpCQkJCQkJCVwKKwkgICAgICB7CQkJCQkJCQkJXAorCQlyID0gMDsJCQkJCQkJCVwKKwkJaWYgKFgjI19zKQkJCQkJCQlcCisJCSAgciA9IH5yOwkJCQkJCQlcCisJICAgICAgfQkJCQkJCQkJCVwKKwkgICAgZWxzZSBpZiAocnNpZ25lZCAhPSAyKQkJCQkJCVwKKwkgICAgICB7CQkJCQkJCQkJXAorCQlyID0gMTsJCQkJCQkJCVwKKwkJciA8PD0gcnNpemUgLSAxOwkJCQkJCVwKKwkJciAtPSAxIC0gWCMjX3M7CQkJCQkJCVwKKwkgICAgICB9CQkJCQkJCQkJXAorCSAgICBGUF9TRVRfRVhDRVBUSU9OKEZQX0VYX0lOVkFMSUQpOwkJCQkJXAorCSAgfQkJCQkJCQkJCVwKKwlicmVhazsJCQkJCQkJCQlcCisgICAgICBjYXNlIEZQX0NMU19aRVJPOgkJCQkJCQkJXAorICAgICAgICBicmVhazsJCQkJCQkJCQlcCisgICAgICB9CQkJCQkJCQkJCVwKKyAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBfRlBfRlJPTV9JTlQoZnMsIHdjLCBYLCByLCByc2l6ZSwgcnR5cGUpCQkJXAorICBkbyB7CQkJCQkJCQkJXAorICAgIGlmIChyKQkJCQkJCQkJXAorICAgICAgewkJCQkJCQkJCVwKKyAgICAgICAgdW5zaWduZWQgcnR5cGUgdXJfOwkJCQkJCVwKKwlYIyNfYyA9IEZQX0NMU19OT1JNQUw7CQkJCQkJXAorCQkJCQkJCQkJXAorCWlmICgoWCMjX3MgPSAociA8IDApKSkJCQkJCQlcCisJICB1cl8gPSAodW5zaWduZWQgcnR5cGUpIC1yOwkJCQkJXAorCWVsc2UJCQkJCQkJCVwKKwkgIHVyXyA9ICh1bnNpZ25lZCBydHlwZSkgcjsJCQkJCVwKKwlpZiAocnNpemUgPD0gX0ZQX1dfVFlQRV9TSVpFKQkJCQkJXAorCSAgX19GUF9DTFooWCMjX2UsIHVyXyk7CQkJCQkJXAorCWVsc2UJCQkJCQkJCVwKKwkgIF9fRlBfQ0xaXzIoWCMjX2UsIChfRlBfV19UWVBFKSh1cl8gPj4gX0ZQX1dfVFlQRV9TSVpFKSwgCVwKKwkJICAgICAoX0ZQX1dfVFlQRSl1cl8pOwkJCQkJXAorCWlmIChyc2l6ZSA8IF9GUF9XX1RZUEVfU0laRSkJCQkJCVwKKwkJWCMjX2UgLT0gKF9GUF9XX1RZUEVfU0laRSAtIHJzaXplKTsJCQlcCisJWCMjX2UgPSByc2l6ZSAtIFgjI19lIC0gMTsJCQkJCVwKKwkJCQkJCQkJCVwKKwlpZiAoX0ZQX0ZSQUNCSVRTXyMjZnMgPCByc2l6ZSAmJiBfRlBfV0ZSQUNCSVRTXyMjZnMgPCBYIyNfZSkJXAorCSAgX19GUF9GUkFDX1NSU18xKHVyXywgKFgjI19lIC0gX0ZQX1dGUkFDQklUU18jI2ZzICsgMSksIHJzaXplKTtcCisJX0ZQX0ZSQUNfRElTQVNTRU1CTEVfIyN3YyhYLCB1cl8sIHJzaXplKTsJCQlcCisJaWYgKChfRlBfV0ZSQUNCSVRTXyMjZnMgLSBYIyNfZSAtIDEpID4gMCkJCQlcCisJICBfRlBfRlJBQ19TTExfIyN3YyhYLCAoX0ZQX1dGUkFDQklUU18jI2ZzIC0gWCMjX2UgLSAxKSk7CVwKKyAgICAgIH0JCQkJCQkJCQlcCisgICAgZWxzZQkJCQkJCQkJXAorICAgICAgewkJCQkJCQkJCVwKKwlYIyNfYyA9IEZQX0NMU19aRVJPLCBYIyNfcyA9IDA7CQkJCQlcCisgICAgICB9CQkJCQkJCQkJXAorICB9IHdoaWxlICgwKQorCisKKyNkZWZpbmUgRlBfQ09OVihkZnMsc2ZzLGR3Yyxzd2MsRCxTKQkJCVwKKyAgZG8gewkJCQkJCQlcCisgICAgX0ZQX0ZSQUNfQ09OVl8jI2R3YyMjXyMjc3djKGRmcywgc2ZzLCBELCBTKTsJXAorICAgIEQjI19lID0gUyMjX2U7CQkJCQlcCisgICAgRCMjX2MgPSBTIyNfYzsJCQkJCVwKKyAgICBEIyNfcyA9IFMjI19zOwkJCQkJXAorICB9IHdoaWxlICgwKQorCisvKgorICogSGVscGVyIHByaW1pdGl2ZXMuCisgKi8KKworLyogQ291bnQgbGVhZGluZyB6ZXJvcyBpbiBhIHdvcmQuICAqLworCisjaWZuZGVmIF9fRlBfQ0xaCisjaWYgX0ZQX1dfVFlQRV9TSVpFIDwgNjQKKy8qIHRoaXMgaXMganVzdCB0byBzaHV0IHRoZSBjb21waWxlciB1cCBhYm91dCBzaGlmdHMgPiB3b3JkIGxlbmd0aCAtLSBQTU0gMDIvMTk5OCAqLworI2RlZmluZSBfX0ZQX0NMWihyLCB4KQkJCQlcCisgIGRvIHsJCQkJCQlcCisgICAgX0ZQX1dfVFlQRSBfdCA9ICh4KTsJCQlcCisgICAgciA9IF9GUF9XX1RZUEVfU0laRSAtIDE7CQkJXAorICAgIGlmIChfdCA+IDB4ZmZmZikgciAtPSAxNjsJCQlcCisgICAgaWYgKF90ID4gMHhmZmZmKSBfdCA+Pj0gMTY7CQkJXAorICAgIGlmIChfdCA+IDB4ZmYpIHIgLT0gODsJCQlcCisgICAgaWYgKF90ID4gMHhmZikgX3QgPj49IDg7CQkJXAorICAgIGlmIChfdCAmIDB4ZjApIHIgLT0gNDsJCQlcCisgICAgaWYgKF90ICYgMHhmMCkgX3QgPj49IDQ7CQkJXAorICAgIGlmIChfdCAmIDB4YykgciAtPSAyOwkJCVwKKyAgICBpZiAoX3QgJiAweGMpIF90ID4+PSAyOwkJCVwKKyAgICBpZiAoX3QgJiAweDIpIHIgLT0gMTsJCQlcCisgIH0gd2hpbGUgKDApCisjZWxzZSAvKiBub3QgX0ZQX1dfVFlQRV9TSVpFIDwgNjQgKi8KKyNkZWZpbmUgX19GUF9DTFoociwgeCkJCQkJXAorICBkbyB7CQkJCQkJXAorICAgIF9GUF9XX1RZUEUgX3QgPSAoeCk7CQkJXAorICAgIHIgPSBfRlBfV19UWVBFX1NJWkUgLSAxOwkJCVwKKyAgICBpZiAoX3QgPiAweGZmZmZmZmZmKSByIC09IDMyOwkJXAorICAgIGlmIChfdCA+IDB4ZmZmZmZmZmYpIF90ID4+PSAzMjsJCVwKKyAgICBpZiAoX3QgPiAweGZmZmYpIHIgLT0gMTY7CQkJXAorICAgIGlmIChfdCA+IDB4ZmZmZikgX3QgPj49IDE2OwkJCVwKKyAgICBpZiAoX3QgPiAweGZmKSByIC09IDg7CQkJXAorICAgIGlmIChfdCA+IDB4ZmYpIF90ID4+PSA4OwkJCVwKKyAgICBpZiAoX3QgJiAweGYwKSByIC09IDQ7CQkJXAorICAgIGlmIChfdCAmIDB4ZjApIF90ID4+PSA0OwkJCVwKKyAgICBpZiAoX3QgJiAweGMpIHIgLT0gMjsJCQlcCisgICAgaWYgKF90ICYgMHhjKSBfdCA+Pj0gMjsJCQlcCisgICAgaWYgKF90ICYgMHgyKSByIC09IDE7CQkJXAorICB9IHdoaWxlICgwKQorI2VuZGlmIC8qIG5vdCBfRlBfV19UWVBFX1NJWkUgPCA2NCAqLworI2VuZGlmIC8qIG5kZWYgX19GUF9DTFogKi8KKworI2RlZmluZSBfRlBfRElWX0hFTFBfaW1tKHEsIHIsIG4sIGQpCQlcCisgIGRvIHsJCQkJCQlcCisgICAgcSA9IG4gLyBkLCByID0gbiAlIGQ7CQkJXAorICB9IHdoaWxlICgwKQorCisjZW5kaWYgLyogX19NQVRIX0VNVV9PUF9DT01NT05fSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL21hdGgtZW11L3F1YWQuaCBiL2luY2x1ZGUvbWF0aC1lbXUvcXVhZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxNjExMzYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL21hdGgtZW11L3F1YWQuaApAQCAtMCwwICsxLDIwOCBAQAorLyogU29mdHdhcmUgZmxvYXRpbmctcG9pbnQgZW11bGF0aW9uLgorICAgRGVmaW5pdGlvbnMgZm9yIElFRUUgUXVhZCBQcmVjaXNpb24uCisgICBDb3B5cmlnaHQgKEMpIDE5OTcsMTk5OCwxOTk5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisgICBDb250cmlidXRlZCBieSBSaWNoYXJkIEhlbmRlcnNvbiAocnRoQGN5Z251cy5jb20pLAorCQkgIEpha3ViIEplbGluZWsgKGpqQHVsdHJhLmxpbnV4LmN6KSwKKwkJICBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQHJlZGhhdC5jb20pIGFuZAorCQkgIFBldGVyIE1heWRlbGwgKHBtYXlkZWxsQGNoaWFyay5ncmVlbmVuZC5vcmcudWspLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorICAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmCisgICBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKworI2lmbmRlZiAgX19NQVRIX0VNVV9RVUFEX0hfXworI2RlZmluZSAgX19NQVRIX0VNVV9RVUFEX0hfXworCisjaWYgX0ZQX1dfVFlQRV9TSVpFIDwgMzIKKyNlcnJvciAiSGVyZSdzIGEgbmlja2VsLCBraWQuIEdvIGJ1eSB5b3Vyc2VsZiBhIHJlYWwgY29tcHV0ZXIuIgorI2VuZGlmCisKKyNpZiBfRlBfV19UWVBFX1NJWkUgPCA2NAorI2RlZmluZSBfRlBfRlJBQ1RCSVRTX1EgICAgICAgICAoNCpfRlBfV19UWVBFX1NJWkUpCisjZWxzZQorI2RlZmluZSBfRlBfRlJBQ1RCSVRTX1EJCSgyKl9GUF9XX1RZUEVfU0laRSkKKyNlbmRpZgorCisjZGVmaW5lIF9GUF9GUkFDQklUU19RCQkxMTMKKyNkZWZpbmUgX0ZQX0ZSQUNYQklUU19RCQkoX0ZQX0ZSQUNUQklUU19RIC0gX0ZQX0ZSQUNCSVRTX1EpCisjZGVmaW5lIF9GUF9XRlJBQ0JJVFNfUQkJKF9GUF9XT1JLQklUUyArIF9GUF9GUkFDQklUU19RKQorI2RlZmluZSBfRlBfV0ZSQUNYQklUU19RCShfRlBfRlJBQ1RCSVRTX1EgLSBfRlBfV0ZSQUNCSVRTX1EpCisjZGVmaW5lIF9GUF9FWFBCSVRTX1EJCTE1CisjZGVmaW5lIF9GUF9FWFBCSUFTX1EJCTE2MzgzCisjZGVmaW5lIF9GUF9FWFBNQVhfUQkJMzI3NjcKKworI2RlZmluZSBfRlBfUU5BTkJJVF9RCQlcCisJKChfRlBfV19UWVBFKTEgPDwgKF9GUF9GUkFDQklUU19RLTIpICUgX0ZQX1dfVFlQRV9TSVpFKQorI2RlZmluZSBfRlBfSU1QTEJJVF9RCQlcCisJKChfRlBfV19UWVBFKTEgPDwgKF9GUF9GUkFDQklUU19RLTEpICUgX0ZQX1dfVFlQRV9TSVpFKQorI2RlZmluZSBfRlBfT1ZFUkZMT1dfUQkJXAorCSgoX0ZQX1dfVFlQRSkxIDw8IChfRlBfV0ZSQUNCSVRTX1EgJSBfRlBfV19UWVBFX1NJWkUpKQorCisjaWYgX0ZQX1dfVFlQRV9TSVpFIDwgNjQKKwordW5pb24gX0ZQX1VOSU9OX1EKK3sKKyAgIGxvbmcgZG91YmxlIGZsdDsKKyAgIHN0cnVjdCAKKyAgIHsKKyNpZiBfX0JZVEVfT1JERVIgPT0gX19CSUdfRU5ESUFOCisgICAgICB1bnNpZ25lZCBzaWduIDogMTsKKyAgICAgIHVuc2lnbmVkIGV4cCA6IF9GUF9FWFBCSVRTX1E7CisgICAgICB1bnNpZ25lZCBsb25nIGZyYWMzIDogX0ZQX0ZSQUNCSVRTX1EgLSAoX0ZQX0lNUExCSVRfUSAhPSAwKS0oX0ZQX1dfVFlQRV9TSVpFICogMyk7CisgICAgICB1bnNpZ25lZCBsb25nIGZyYWMyIDogX0ZQX1dfVFlQRV9TSVpFOworICAgICAgdW5zaWduZWQgbG9uZyBmcmFjMSA6IF9GUF9XX1RZUEVfU0laRTsKKyAgICAgIHVuc2lnbmVkIGxvbmcgZnJhYzAgOiBfRlBfV19UWVBFX1NJWkU7CisjZWxzZQorICAgICAgdW5zaWduZWQgbG9uZyBmcmFjMCA6IF9GUF9XX1RZUEVfU0laRTsKKyAgICAgIHVuc2lnbmVkIGxvbmcgZnJhYzEgOiBfRlBfV19UWVBFX1NJWkU7CisgICAgICB1bnNpZ25lZCBsb25nIGZyYWMyIDogX0ZQX1dfVFlQRV9TSVpFOworICAgICAgdW5zaWduZWQgbG9uZyBmcmFjMyA6IF9GUF9GUkFDQklUU19RIC0gKF9GUF9JTVBMQklUX1EgIT0gMCktKF9GUF9XX1RZUEVfU0laRSAqIDMpOworICAgICAgdW5zaWduZWQgZXhwIDogX0ZQX0VYUEJJVFNfUTsKKyAgICAgIHVuc2lnbmVkIHNpZ24gOiAxOworI2VuZGlmIC8qIG5vdCBiaWdlbmRpYW4gKi8KKyAgIH0gYml0cyBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK307CisKKworI2RlZmluZSBGUF9ERUNMX1EoWCkJCV9GUF9ERUNMKDQsWCkKKyNkZWZpbmUgRlBfVU5QQUNLX1JBV19RKFgsdmFsKQlfRlBfVU5QQUNLX1JBV180KFEsWCx2YWwpCisjZGVmaW5lIEZQX1VOUEFDS19SQVdfUVAoWCx2YWwpCV9GUF9VTlBBQ0tfUkFXXzRfUChRLFgsdmFsKQorI2RlZmluZSBGUF9QQUNLX1JBV19RKHZhbCxYKQlfRlBfUEFDS19SQVdfNChRLHZhbCxYKQorI2RlZmluZSBGUF9QQUNLX1JBV19RUCh2YWwsWCkJCVwKKyAgZG8gewkJCQkJXAorICAgIGlmICghRlBfSU5ISUJJVF9SRVNVTFRTKQkJXAorICAgICAgX0ZQX1BBQ0tfUkFXXzRfUChRLHZhbCxYKTsJXAorICB9IHdoaWxlICgwKQorCisjZGVmaW5lIEZQX1VOUEFDS19RKFgsdmFsKQkJXAorICBkbyB7CQkJCQlcCisgICAgX0ZQX1VOUEFDS19SQVdfNChRLFgsdmFsKTsJCVwKKyAgICBfRlBfVU5QQUNLX0NBTk9OSUNBTChRLDQsWCk7CVwKKyAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBGUF9VTlBBQ0tfUVAoWCx2YWwpCQlcCisgIGRvIHsJCQkJCVwKKyAgICBfRlBfVU5QQUNLX1JBV180X1AoUSxYLHZhbCk7CVwKKyAgICBfRlBfVU5QQUNLX0NBTk9OSUNBTChRLDQsWCk7CVwKKyAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBGUF9QQUNLX1EodmFsLFgpCQlcCisgIGRvIHsJCQkJCVwKKyAgICBfRlBfUEFDS19DQU5PTklDQUwoUSw0LFgpOwkJXAorICAgIF9GUF9QQUNLX1JBV180KFEsdmFsLFgpOwkJXAorICB9IHdoaWxlICgwKQorCisjZGVmaW5lIEZQX1BBQ0tfUVAodmFsLFgpCQlcCisgIGRvIHsJCQkJCVwKKyAgICBfRlBfUEFDS19DQU5PTklDQUwoUSw0LFgpOwkJXAorICAgIGlmICghRlBfSU5ISUJJVF9SRVNVTFRTKQkJXAorICAgICAgX0ZQX1BBQ0tfUkFXXzRfUChRLHZhbCxYKTsJXAorICB9IHdoaWxlICgwKQorCisjZGVmaW5lIEZQX0lTU0lHTkFOX1EoWCkJCV9GUF9JU1NJR05BTihRLDQsWCkKKyNkZWZpbmUgRlBfTkVHX1EoUixYKQkJCV9GUF9ORUcoUSw0LFIsWCkKKyNkZWZpbmUgRlBfQUREX1EoUixYLFkpCQkJX0ZQX0FERChRLDQsUixYLFkpCisjZGVmaW5lIEZQX1NVQl9RKFIsWCxZKQkJCV9GUF9TVUIoUSw0LFIsWCxZKQorI2RlZmluZSBGUF9NVUxfUShSLFgsWSkJCQlfRlBfTVVMKFEsNCxSLFgsWSkKKyNkZWZpbmUgRlBfRElWX1EoUixYLFkpCQkJX0ZQX0RJVihRLDQsUixYLFkpCisjZGVmaW5lIEZQX1NRUlRfUShSLFgpCQkJX0ZQX1NRUlQoUSw0LFIsWCkKKyNkZWZpbmUgX0ZQX1NRUlRfTUVBVF9RKFIsUyxULFgsUSkJX0ZQX1NRUlRfTUVBVF80KFIsUyxULFgsUSkKKworI2RlZmluZSBGUF9DTVBfUShyLFgsWSx1bikJX0ZQX0NNUChRLDQscixYLFksdW4pCisjZGVmaW5lIEZQX0NNUF9FUV9RKHIsWCxZKQlfRlBfQ01QX0VRKFEsNCxyLFgsWSkKKworI2RlZmluZSBGUF9UT19JTlRfUShyLFgscnN6LHJzZykJX0ZQX1RPX0lOVChRLDQscixYLHJzeixyc2cpCisjZGVmaW5lIEZQX1RPX0lOVF9ST1VORF9RKHIsWCxyc3oscnNnKQlfRlBfVE9fSU5UX1JPVU5EKFEsNCxyLFgscnN6LHJzZykKKyNkZWZpbmUgRlBfRlJPTV9JTlRfUShYLHIscnMscnQpCV9GUF9GUk9NX0lOVChRLDQsWCxyLHJzLHJ0KQorCisjZGVmaW5lIF9GUF9GUkFDX0hJR0hfUShYKQlfRlBfRlJBQ19ISUdIXzQoWCkKKyNkZWZpbmUgX0ZQX0ZSQUNfSElHSF9SQVdfUShYKQlfRlBfRlJBQ19ISUdIXzQoWCkKKworI2Vsc2UgICAvKiBub3QgX0ZQX1dfVFlQRV9TSVpFIDwgNjQgKi8KK3VuaW9uIF9GUF9VTklPTl9RCit7CisgIGxvbmcgZG91YmxlIGZsdCAvKiBfX2F0dHJpYnV0ZV9fKChtb2RlKFRGKSkpICovIDsKKyAgc3RydWN0IHsKKyNpZiBfX0JZVEVfT1JERVIgPT0gX19CSUdfRU5ESUFOCisgICAgdW5zaWduZWQgc2lnbiAgOiAxOworICAgIHVuc2lnbmVkIGV4cCAgIDogX0ZQX0VYUEJJVFNfUTsKKyAgICB1bnNpZ25lZCBsb25nIGZyYWMxIDogX0ZQX0ZSQUNCSVRTX1EtKF9GUF9JTVBMQklUX1EgIT0gMCktX0ZQX1dfVFlQRV9TSVpFOworICAgIHVuc2lnbmVkIGxvbmcgZnJhYzAgOiBfRlBfV19UWVBFX1NJWkU7CisjZWxzZQorICAgIHVuc2lnbmVkIGxvbmcgZnJhYzAgOiBfRlBfV19UWVBFX1NJWkU7CisgICAgdW5zaWduZWQgbG9uZyBmcmFjMSA6IF9GUF9GUkFDQklUU19RLShfRlBfSU1QTEJJVF9RICE9IDApLV9GUF9XX1RZUEVfU0laRTsKKyAgICB1bnNpZ25lZCBleHAgICA6IF9GUF9FWFBCSVRTX1E7CisgICAgdW5zaWduZWQgc2lnbiAgOiAxOworI2VuZGlmCisgIH0gYml0czsKK307CisKKyNkZWZpbmUgRlBfREVDTF9RKFgpCQlfRlBfREVDTCgyLFgpCisjZGVmaW5lIEZQX1VOUEFDS19SQVdfUShYLHZhbCkJX0ZQX1VOUEFDS19SQVdfMihRLFgsdmFsKQorI2RlZmluZSBGUF9VTlBBQ0tfUkFXX1FQKFgsdmFsKQlfRlBfVU5QQUNLX1JBV18yX1AoUSxYLHZhbCkKKyNkZWZpbmUgRlBfUEFDS19SQVdfUSh2YWwsWCkJX0ZQX1BBQ0tfUkFXXzIoUSx2YWwsWCkKKyNkZWZpbmUgRlBfUEFDS19SQVdfUVAodmFsLFgpCQlcCisgIGRvIHsJCQkJCVwKKyAgICBpZiAoIUZQX0lOSElCSVRfUkVTVUxUUykJCVwKKyAgICAgIF9GUF9QQUNLX1JBV18yX1AoUSx2YWwsWCk7CVwKKyAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBGUF9VTlBBQ0tfUShYLHZhbCkJCVwKKyAgZG8gewkJCQkJXAorICAgIF9GUF9VTlBBQ0tfUkFXXzIoUSxYLHZhbCk7CQlcCisgICAgX0ZQX1VOUEFDS19DQU5PTklDQUwoUSwyLFgpOwlcCisgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgRlBfVU5QQUNLX1FQKFgsdmFsKQkJXAorICBkbyB7CQkJCQlcCisgICAgX0ZQX1VOUEFDS19SQVdfMl9QKFEsWCx2YWwpOwlcCisgICAgX0ZQX1VOUEFDS19DQU5PTklDQUwoUSwyLFgpOwlcCisgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgRlBfUEFDS19RKHZhbCxYKQkJXAorICBkbyB7CQkJCQlcCisgICAgX0ZQX1BBQ0tfQ0FOT05JQ0FMKFEsMixYKTsJCVwKKyAgICBfRlBfUEFDS19SQVdfMihRLHZhbCxYKTsJCVwKKyAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBGUF9QQUNLX1FQKHZhbCxYKQkJXAorICBkbyB7CQkJCQlcCisgICAgX0ZQX1BBQ0tfQ0FOT05JQ0FMKFEsMixYKTsJCVwKKyAgICBpZiAoIUZQX0lOSElCSVRfUkVTVUxUUykJCVwKKyAgICAgIF9GUF9QQUNLX1JBV18yX1AoUSx2YWwsWCk7CVwKKyAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBGUF9JU1NJR05BTl9RKFgpCQlfRlBfSVNTSUdOQU4oUSwyLFgpCisjZGVmaW5lIEZQX05FR19RKFIsWCkJCQlfRlBfTkVHKFEsMixSLFgpCisjZGVmaW5lIEZQX0FERF9RKFIsWCxZKQkJCV9GUF9BREQoUSwyLFIsWCxZKQorI2RlZmluZSBGUF9TVUJfUShSLFgsWSkJCQlfRlBfU1VCKFEsMixSLFgsWSkKKyNkZWZpbmUgRlBfTVVMX1EoUixYLFkpCQkJX0ZQX01VTChRLDIsUixYLFkpCisjZGVmaW5lIEZQX0RJVl9RKFIsWCxZKQkJCV9GUF9ESVYoUSwyLFIsWCxZKQorI2RlZmluZSBGUF9TUVJUX1EoUixYKQkJCV9GUF9TUVJUKFEsMixSLFgpCisjZGVmaW5lIF9GUF9TUVJUX01FQVRfUShSLFMsVCxYLFEpCV9GUF9TUVJUX01FQVRfMihSLFMsVCxYLFEpCisKKyNkZWZpbmUgRlBfQ01QX1EocixYLFksdW4pCV9GUF9DTVAoUSwyLHIsWCxZLHVuKQorI2RlZmluZSBGUF9DTVBfRVFfUShyLFgsWSkJX0ZQX0NNUF9FUShRLDIscixYLFkpCisKKyNkZWZpbmUgRlBfVE9fSU5UX1EocixYLHJzeixyc2cpCV9GUF9UT19JTlQoUSwyLHIsWCxyc3oscnNnKQorI2RlZmluZSBGUF9UT19JTlRfUk9VTkRfUShyLFgscnN6LHJzZykJX0ZQX1RPX0lOVF9ST1VORChRLDIscixYLHJzeixyc2cpCisjZGVmaW5lIEZQX0ZST01fSU5UX1EoWCxyLHJzLHJ0KQlfRlBfRlJPTV9JTlQoUSwyLFgscixycyxydCkKKworI2RlZmluZSBfRlBfRlJBQ19ISUdIX1EoWCkJX0ZQX0ZSQUNfSElHSF8yKFgpCisjZGVmaW5lIF9GUF9GUkFDX0hJR0hfUkFXX1EoWCkJX0ZQX0ZSQUNfSElHSF8yKFgpCisKKyNlbmRpZiAvKiBub3QgX0ZQX1dfVFlQRV9TSVpFIDwgNjQgKi8KKworI2VuZGlmIC8qIF9fTUFUSF9FTVVfUVVBRF9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWF0aC1lbXUvc2luZ2xlLmggYi9pbmNsdWRlL21hdGgtZW11L3NpbmdsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3ZjkwYjAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL21hdGgtZW11L3NpbmdsZS5oCkBAIC0wLDAgKzEsMTE2IEBACisvKiBTb2Z0d2FyZSBmbG9hdGluZy1wb2ludCBlbXVsYXRpb24uCisgICBEZWZpbml0aW9ucyBmb3IgSUVFRSBTaW5nbGUgUHJlY2lzaW9uLgorICAgQ29weXJpZ2h0IChDKSAxOTk3LDE5OTgsMTk5OSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorICAgQ29udHJpYnV0ZWQgYnkgUmljaGFyZCBIZW5kZXJzb24gKHJ0aEBjeWdudXMuY29tKSwKKwkJICBKYWt1YiBKZWxpbmVrIChqakB1bHRyYS5saW51eC5jeiksCisJCSAgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUByZWRoYXQuY29tKSBhbmQKKwkJICBQZXRlciBNYXlkZWxsIChwbWF5ZGVsbEBjaGlhcmsuZ3JlZW5lbmQub3JnLnVrKS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyAgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZgorICAgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisKKyNpZm5kZWYgICAgX19NQVRIX0VNVV9TSU5HTEVfSF9fCisjZGVmaW5lICAgIF9fTUFUSF9FTVVfU0lOR0xFX0hfXworCisjaWYgX0ZQX1dfVFlQRV9TSVpFIDwgMzIKKyNlcnJvciAiSGVyZSdzIGEgbmlja2VsIGtpZC4gIEdvIGJ1eSB5b3Vyc2VsZiBhIHJlYWwgY29tcHV0ZXIuIgorI2VuZGlmCisKKyNkZWZpbmUgX0ZQX0ZSQUNCSVRTX1MJCTI0CisjZGVmaW5lIF9GUF9GUkFDWEJJVFNfUwkJKF9GUF9XX1RZUEVfU0laRSAtIF9GUF9GUkFDQklUU19TKQorI2RlZmluZSBfRlBfV0ZSQUNCSVRTX1MJCShfRlBfV09SS0JJVFMgKyBfRlBfRlJBQ0JJVFNfUykKKyNkZWZpbmUgX0ZQX1dGUkFDWEJJVFNfUwkoX0ZQX1dfVFlQRV9TSVpFIC0gX0ZQX1dGUkFDQklUU19TKQorI2RlZmluZSBfRlBfRVhQQklUU19TCQk4CisjZGVmaW5lIF9GUF9FWFBCSUFTX1MJCTEyNworI2RlZmluZSBfRlBfRVhQTUFYX1MJCTI1NQorI2RlZmluZSBfRlBfUU5BTkJJVF9TCQkoKF9GUF9XX1RZUEUpMSA8PCAoX0ZQX0ZSQUNCSVRTX1MtMikpCisjZGVmaW5lIF9GUF9JTVBMQklUX1MJCSgoX0ZQX1dfVFlQRSkxIDw8IChfRlBfRlJBQ0JJVFNfUy0xKSkKKyNkZWZpbmUgX0ZQX09WRVJGTE9XX1MJCSgoX0ZQX1dfVFlQRSkxIDw8IChfRlBfV0ZSQUNCSVRTX1MpKQorCisvKiBUaGUgaW1wbGVtZW50YXRpb24gb2YgX0ZQX01VTF9NRUFUX1MgYW5kIF9GUF9ESVZfTUVBVF9TIHNob3VsZCBiZQorICAgY2hvc2VuIGJ5IHRoZSB0YXJnZXQgbWFjaGluZS4gICovCisKK3VuaW9uIF9GUF9VTklPTl9TCit7CisgIGZsb2F0IGZsdDsKKyAgc3RydWN0IHsKKyNpZiBfX0JZVEVfT1JERVIgPT0gX19CSUdfRU5ESUFOCisgICAgdW5zaWduZWQgc2lnbiA6IDE7CisgICAgdW5zaWduZWQgZXhwICA6IF9GUF9FWFBCSVRTX1M7CisgICAgdW5zaWduZWQgZnJhYyA6IF9GUF9GUkFDQklUU19TIC0gKF9GUF9JTVBMQklUX1MgIT0gMCk7CisjZWxzZQorICAgIHVuc2lnbmVkIGZyYWMgOiBfRlBfRlJBQ0JJVFNfUyAtIChfRlBfSU1QTEJJVF9TICE9IDApOworICAgIHVuc2lnbmVkIGV4cCAgOiBfRlBfRVhQQklUU19TOworICAgIHVuc2lnbmVkIHNpZ24gOiAxOworI2VuZGlmCisgIH0gYml0cyBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK307CisKKyNkZWZpbmUgRlBfREVDTF9TKFgpCQlfRlBfREVDTCgxLFgpCisjZGVmaW5lIEZQX1VOUEFDS19SQVdfUyhYLHZhbCkJX0ZQX1VOUEFDS19SQVdfMShTLFgsdmFsKQorI2RlZmluZSBGUF9VTlBBQ0tfUkFXX1NQKFgsdmFsKQlfRlBfVU5QQUNLX1JBV18xX1AoUyxYLHZhbCkKKyNkZWZpbmUgRlBfUEFDS19SQVdfUyh2YWwsWCkJX0ZQX1BBQ0tfUkFXXzEoUyx2YWwsWCkKKyNkZWZpbmUgRlBfUEFDS19SQVdfU1AodmFsLFgpCQlcCisgIGRvIHsJCQkJCVwKKyAgICBpZiAoIUZQX0lOSElCSVRfUkVTVUxUUykJCVwKKyAgICAgIF9GUF9QQUNLX1JBV18xX1AoUyx2YWwsWCk7CVwKKyAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBGUF9VTlBBQ0tfUyhYLHZhbCkJCVwKKyAgZG8gewkJCQkJXAorICAgIF9GUF9VTlBBQ0tfUkFXXzEoUyxYLHZhbCk7CQlcCisgICAgX0ZQX1VOUEFDS19DQU5PTklDQUwoUywxLFgpOwlcCisgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgRlBfVU5QQUNLX1NQKFgsdmFsKQkJXAorICBkbyB7CQkJCQlcCisgICAgX0ZQX1VOUEFDS19SQVdfMV9QKFMsWCx2YWwpOwlcCisgICAgX0ZQX1VOUEFDS19DQU5PTklDQUwoUywxLFgpOwlcCisgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgRlBfUEFDS19TKHZhbCxYKQkJXAorICBkbyB7CQkJCQlcCisgICAgX0ZQX1BBQ0tfQ0FOT05JQ0FMKFMsMSxYKTsJCVwKKyAgICBfRlBfUEFDS19SQVdfMShTLHZhbCxYKTsJCVwKKyAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBGUF9QQUNLX1NQKHZhbCxYKQkJXAorICBkbyB7CQkJCQlcCisgICAgX0ZQX1BBQ0tfQ0FOT05JQ0FMKFMsMSxYKTsJCVwKKyAgICBpZiAoIUZQX0lOSElCSVRfUkVTVUxUUykJCVwKKyAgICAgIF9GUF9QQUNLX1JBV18xX1AoUyx2YWwsWCk7CVwKKyAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBGUF9JU1NJR05BTl9TKFgpCQlfRlBfSVNTSUdOQU4oUywxLFgpCisjZGVmaW5lIEZQX05FR19TKFIsWCkJCQlfRlBfTkVHKFMsMSxSLFgpCisjZGVmaW5lIEZQX0FERF9TKFIsWCxZKQkJCV9GUF9BREQoUywxLFIsWCxZKQorI2RlZmluZSBGUF9TVUJfUyhSLFgsWSkJCQlfRlBfU1VCKFMsMSxSLFgsWSkKKyNkZWZpbmUgRlBfTVVMX1MoUixYLFkpCQkJX0ZQX01VTChTLDEsUixYLFkpCisjZGVmaW5lIEZQX0RJVl9TKFIsWCxZKQkJCV9GUF9ESVYoUywxLFIsWCxZKQorI2RlZmluZSBGUF9TUVJUX1MoUixYKQkJCV9GUF9TUVJUKFMsMSxSLFgpCisjZGVmaW5lIF9GUF9TUVJUX01FQVRfUyhSLFMsVCxYLFEpCV9GUF9TUVJUX01FQVRfMShSLFMsVCxYLFEpCisKKyNkZWZpbmUgRlBfQ01QX1MocixYLFksdW4pCV9GUF9DTVAoUywxLHIsWCxZLHVuKQorI2RlZmluZSBGUF9DTVBfRVFfUyhyLFgsWSkJX0ZQX0NNUF9FUShTLDEscixYLFkpCisKKyNkZWZpbmUgRlBfVE9fSU5UX1MocixYLHJzeixyc2cpCV9GUF9UT19JTlQoUywxLHIsWCxyc3oscnNnKQorI2RlZmluZSBGUF9UT19JTlRfUk9VTkRfUyhyLFgscnN6LHJzZykJX0ZQX1RPX0lOVF9ST1VORChTLDEscixYLHJzeixyc2cpCisjZGVmaW5lIEZQX0ZST01fSU5UX1MoWCxyLHJzLHJ0KQlfRlBfRlJPTV9JTlQoUywxLFgscixycyxydCkKKworI2RlZmluZSBfRlBfRlJBQ19ISUdIX1MoWCkJX0ZQX0ZSQUNfSElHSF8xKFgpCisjZGVmaW5lIF9GUF9GUkFDX0hJR0hfUkFXX1MoWCkJX0ZQX0ZSQUNfSElHSF8xKFgpCisKKyNlbmRpZiAvKiBfX01BVEhfRU1VX1NJTkdMRV9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWF0aC1lbXUvc29mdC1mcC5oIGIvaW5jbHVkZS9tYXRoLWVtdS9zb2Z0LWZwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDAyZWI2NAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbWF0aC1lbXUvc29mdC1mcC5oCkBAIC0wLDAgKzEsMTgxIEBACisvKiBTb2Z0d2FyZSBmbG9hdGluZy1wb2ludCBlbXVsYXRpb24uCisgICBDb3B5cmlnaHQgKEMpIDE5OTcsMTk5OCwxOTk5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisgICBDb250cmlidXRlZCBieSBSaWNoYXJkIEhlbmRlcnNvbiAocnRoQGN5Z251cy5jb20pLAorCQkgIEpha3ViIEplbGluZWsgKGpqQHVsdHJhLmxpbnV4LmN6KSwKKwkJICBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQHJlZGhhdC5jb20pIGFuZAorCQkgIFBldGVyIE1heWRlbGwgKHBtYXlkZWxsQGNoaWFyay5ncmVlbmVuZC5vcmcudWspLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorICAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmCisgICBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKworI2lmbmRlZiBfX01BVEhfRU1VX1NPRlRfRlBfSF9fCisjZGVmaW5lIF9fTUFUSF9FTVVfU09GVF9GUF9IX18KKworI2luY2x1ZGUgPGFzbS9zZnAtbWFjaGluZS5oPgorCisvKiBBbGxvdyBzZnAtbWFjaGluZSB0byBoYXZlIGl0cyBvd24gYnl0ZSBvcmRlciBkZWZpbml0aW9ucy4gKi8KKyNpZm5kZWYgX19CWVRFX09SREVSCisjaW5jbHVkZSA8ZW5kaWFuLmg+CisjZW5kaWYKKworI2RlZmluZSBfRlBfV09SS0JJVFMJCTMKKyNkZWZpbmUgX0ZQX1dPUktfTFNCCQkoKF9GUF9XX1RZUEUpMSA8PCAzKQorI2RlZmluZSBfRlBfV09SS19ST1VORAkJKChfRlBfV19UWVBFKTEgPDwgMikKKyNkZWZpbmUgX0ZQX1dPUktfR1VBUkQJCSgoX0ZQX1dfVFlQRSkxIDw8IDEpCisjZGVmaW5lIF9GUF9XT1JLX1NUSUNLWQkJKChfRlBfV19UWVBFKTEgPDwgMCkKKworI2lmbmRlZiBGUF9STkRfTkVBUkVTVAorIyBkZWZpbmUgRlBfUk5EX05FQVJFU1QJCTAKKyMgZGVmaW5lIEZQX1JORF9aRVJPCQkxCisjIGRlZmluZSBGUF9STkRfUElORgkJMgorIyBkZWZpbmUgRlBfUk5EX01JTkYJCTMKKyNpZm5kZWYgRlBfUk9VTkRNT0RFCisjIGRlZmluZSBGUF9ST1VORE1PREUJCUZQX1JORF9ORUFSRVNUCisjZW5kaWYKKyNlbmRpZgorCisvKiBCeSBkZWZhdWx0IGRvbid0IGNhcmUgYWJvdXQgZXhjZXB0aW9ucy4gKi8KKyNpZm5kZWYgRlBfRVhfSU5WQUxJRAorI2RlZmluZSBGUF9FWF9JTlZBTElECQkwCisjZW5kaWYKKyNpZm5kZWYgRlBfRVhfT1ZFUkZMT1cKKyNkZWZpbmUgRlBfRVhfT1ZFUkZMT1cJCTAKKyNlbmRpZgorI2lmbmRlZiBGUF9FWF9VTkRFUkZMT1cKKyNkZWZpbmUgRlBfRVhfVU5ERVJGTE9XCQkKKyNlbmRpZgorI2lmbmRlZiBGUF9FWF9ESVZaRVJPCisjZGVmaW5lIEZQX0VYX0RJVlpFUk8JCTAKKyNlbmRpZgorI2lmbmRlZiBGUF9FWF9JTkVYQUNUCisjZGVmaW5lIEZQX0VYX0lORVhBQ1QJCTAKKyNlbmRpZgorI2lmbmRlZiBGUF9FWF9ERU5PUk0KKyNkZWZpbmUgRlBfRVhfREVOT1JNCQkwCisjZW5kaWYKKworI2lmZGVmIF9GUF9ERUNMX0VYCisjZGVmaW5lIEZQX0RFQ0xfRVgJCQkJCVwKKyAgaW50IF9mZXggPSAwOwkJCQkJCVwKKyAgX0ZQX0RFQ0xfRVgKKyNlbHNlCisjZGVmaW5lIEZQX0RFQ0xfRVggaW50IF9mZXggPSAwCisjZW5kaWYKKyAgCisjaWZuZGVmIEZQX0lOSVRfUk9VTkRNT0RFCisjZGVmaW5lIEZQX0lOSVRfUk9VTkRNT0RFIGRvIHt9IHdoaWxlICgwKQorI2VuZGlmCisKKyNpZm5kZWYgRlBfSEFORExFX0VYQ0VQVElPTlMKKyNkZWZpbmUgRlBfSEFORExFX0VYQ0VQVElPTlMgZG8ge30gd2hpbGUgKDApCisjZW5kaWYKKworLyogQnkgZGVmYXVsdCB3ZSBuZXZlciBmbHVzaCBkZW5vcm1hbCBpbnB1dCBvcGVyYW5kcyB0byBzaWduZWQgemVyby4gKi8KKyNpZm5kZWYgRlBfREVOT1JNX1pFUk8KKyNkZWZpbmUgRlBfREVOT1JNX1pFUk8gMAorI2VuZGlmCisKKyNpZm5kZWYgRlBfSU5ISUJJVF9SRVNVTFRTCisvKiBCeSBkZWZhdWx0IHdlIHdyaXRlIHRoZSByZXN1bHRzIGFsd2F5cy4KKyAqIHNmcC1tYWNoaW5lIG1heSBvdmVycmlkZSB0aGlzIGFuZCBlLmcuCisgKiBjaGVjayBpZiBzb21lIGV4Y2VwdGlvbnMgYXJlIHVubWFza2VkCisgKiBhbmQgaW5oaWJpdCBpdCBpbiBzdWNoIGEgY2FzZS4KKyAqLworI2RlZmluZSBGUF9JTkhJQklUX1JFU1VMVFMgMAorI2VuZGlmCisKKyNkZWZpbmUgRlBfU0VUX0VYQ0VQVElPTihleCkJCQkJXAorICBfZmV4IHw9IChleCkKKyAgCisjZGVmaW5lIEZQX1VOU0VUX0VYQ0VQVElPTihleCkJCQkJXAorICBfZmV4ICY9IH4oZXgpCisKKyNkZWZpbmUgRlBfQ0xFQVJfRVhDRVBUSU9OUwkJCQlcCisgIF9mZXggPSAwCisKKyNkZWZpbmUgX0ZQX1JPVU5EX05FQVJFU1Qod2MsIFgpCQkJXAorZG8gewkJCQkJCQlcCisgICAgaWYgKChfRlBfRlJBQ19MT1dfIyN3YyhYKSAmIDE1KSAhPSBfRlBfV09SS19ST1VORCkJXAorICAgICAgX0ZQX0ZSQUNfQURESV8jI3djKFgsIF9GUF9XT1JLX1JPVU5EKTsJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgX0ZQX1JPVU5EX1pFUk8od2MsIFgpCQkwCisKKyNkZWZpbmUgX0ZQX1JPVU5EX1BJTkYod2MsIFgpCQkJCVwKK2RvIHsJCQkJCQkJXAorICAgIGlmICghWCMjX3MgJiYgKF9GUF9GUkFDX0xPV18jI3djKFgpICYgNykpCQlcCisgICAgICBfRlBfRlJBQ19BRERJXyMjd2MoWCwgX0ZQX1dPUktfTFNCKTsJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgX0ZQX1JPVU5EX01JTkYod2MsIFgpCQkJCVwKK2RvIHsJCQkJCQkJXAorICAgIGlmIChYIyNfcyAmJiAoX0ZQX0ZSQUNfTE9XXyMjd2MoWCkgJiA3KSkJCVwKKyAgICAgIF9GUF9GUkFDX0FERElfIyN3YyhYLCBfRlBfV09SS19MU0IpOwkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBfRlBfUk9VTkQod2MsIFgpCQkJXAorZG8gewkJCQkJCVwKKwlpZiAoX0ZQX0ZSQUNfTE9XXyMjd2MoWCkgJiA3KQkJXAorCSAgRlBfU0VUX0VYQ0VQVElPTihGUF9FWF9JTkVYQUNUKTsJXAorCXN3aXRjaCAoRlBfUk9VTkRNT0RFKQkJCVwKKwl7CQkJCQlcCisJICBjYXNlIEZQX1JORF9ORUFSRVNUOgkJCVwKKwkgICAgX0ZQX1JPVU5EX05FQVJFU1Qod2MsWCk7CQlcCisJICAgIGJyZWFrOwkJCQlcCisJICBjYXNlIEZQX1JORF9aRVJPOgkJCVwKKwkgICAgX0ZQX1JPVU5EX1pFUk8od2MsWCk7CQlcCisJICAgIGJyZWFrOwkJCQlcCisJICBjYXNlIEZQX1JORF9QSU5GOgkJCVwKKwkgICAgX0ZQX1JPVU5EX1BJTkYod2MsWCk7CQlcCisJICAgIGJyZWFrOwkJCQlcCisJICBjYXNlIEZQX1JORF9NSU5GOgkJCVwKKwkgICAgX0ZQX1JPVU5EX01JTkYod2MsWCk7CQlcCisJICAgIGJyZWFrOwkJCQlcCisJfQkJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBGUF9DTFNfTk9STUFMCQkwCisjZGVmaW5lIEZQX0NMU19aRVJPCQkxCisjZGVmaW5lIEZQX0NMU19JTkYJCTIKKyNkZWZpbmUgRlBfQ0xTX05BTgkJMworCisjZGVmaW5lIF9GUF9DTFNfQ09NQklORSh4LHkpCSgoKHgpIDw8IDIpIHwgKHkpKQorCisjaW5jbHVkZSA8bWF0aC1lbXUvb3AtMS5oPgorI2luY2x1ZGUgPG1hdGgtZW11L29wLTIuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9vcC00Lmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvb3AtOC5oPgorI2luY2x1ZGUgPG1hdGgtZW11L29wLWNvbW1vbi5oPgorCisvKiBTaWdoLiAgU2lsbHkgdGhpbmdzIGxvbmdsb25nLmggbmVlZHMuICAqLworI2RlZmluZSBVV3R5cGUJCV9GUF9XX1RZUEUKKyNkZWZpbmUgV19UWVBFX1NJWkUJX0ZQX1dfVFlQRV9TSVpFCisKK3R5cGVkZWYgaW50IFNJdHlwZSBfX2F0dHJpYnV0ZV9fKChtb2RlKFNJKSkpOwordHlwZWRlZiBpbnQgREl0eXBlIF9fYXR0cmlidXRlX18oKG1vZGUoREkpKSk7Cit0eXBlZGVmIHVuc2lnbmVkIGludCBVU0l0eXBlIF9fYXR0cmlidXRlX18oKG1vZGUoU0kpKSk7Cit0eXBlZGVmIHVuc2lnbmVkIGludCBVREl0eXBlIF9fYXR0cmlidXRlX18oKG1vZGUoREkpKSk7CisjaWYgX0ZQX1dfVFlQRV9TSVpFID09IDMyCit0eXBlZGVmIHVuc2lnbmVkIGludCBVSFd0eXBlIF9fYXR0cmlidXRlX18oKG1vZGUoSEkpKSk7CisjZWxpZiBfRlBfV19UWVBFX1NJWkUgPT0gNjQKK3R5cGVkZWYgVVNJdHlwZSBVSFd0eXBlOworI2VuZGlmCisKKyNpZm5kZWYgdW11bF9wcG1tCisjaW5jbHVkZSA8c3RkbGliL2xvbmdsb25nLmg+CisjZW5kaWYKKworI2VuZGlmIC8qIF9fTUFUSF9FTVVfU09GVF9GUF9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvYXVkaW9jaGlwLmggYi9pbmNsdWRlL21lZGlhL2F1ZGlvY2hpcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzZTllMzAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL21lZGlhL2F1ZGlvY2hpcC5oCkBAIC0wLDAgKzEsMzUgQEAKKyNpZm5kZWYgQVVESU9DSElQX0gKKyNkZWZpbmUgQVVESU9DSElQX0gKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiB2NGwgZGV2aWNlIHdhcyBvcGVuZWQgaW4gUmFkaW8gbW9kZSAqLworI2RlZmluZSBBVURDX1NFVF9SQURJTyAgICAgICAgX0lPKCdtJywyKQorLyogc2VsZWN0IGZyb20gVFYscmFkaW8sZXh0ZXJuLE1VVEUgKi8KKyNkZWZpbmUgQVVEQ19TRVRfSU5QVVQgICAgICAgIF9JT1coJ20nLDE3LGludCkKKworLyogYXVkaW8gaW5wdXRzICovCisjZGVmaW5lIEFVRElPX1RVTkVSICAgICAgICAweDAwCisjZGVmaW5lIEFVRElPX1JBRElPICAgICAgICAweDAxCisjZGVmaW5lIEFVRElPX0VYVEVSTiAgICAgICAweDAyCisjZGVmaW5lIEFVRElPX0lOVEVSTiAgICAgICAweDAzCisjZGVmaW5lIEFVRElPX09GRiAgICAgICAgICAweDA0CisjZGVmaW5lIEFVRElPX09OICAgICAgICAgICAweDA1CisjZGVmaW5lIEFVRElPX0VYVEVSTl8xICAgICBBVURJT19FWFRFUk4KKyNkZWZpbmUgQVVESU9fRVhURVJOXzIgICAgIDB4MDYKKyNkZWZpbmUgQVVESU9fTVVURSAgICAgICAgIDB4ODAKKyNkZWZpbmUgQVVESU9fVU5NVVRFICAgICAgIDB4ODEKKworLyogYWxsIHRoZSBzdHVmZiBiZWxvdyBpcyBvYnNvbGV0ZSBhbmQganVzdCBoZXJlIGZvciByZWZlcmVuY2UuICBJJ2xsCisgKiByZW1vdmUgaXQgb25jZSB0aGUgZHJpdmVyIGlzIHRlc3RlZCBhbmQgd29ya3MgZmluZS4KKyAqCisgKiBJbnN0ZWFkIGNyZWF0aW5nIGFsb3Qgb2YgdGlueSBBUEkncyBmb3IgYWxsIGtpbmRzIG9mIGRpZmZlcmVudAorICogY2hpcHMsIHdlJ2xsIGp1c3QgcGFzcyB0aHJvdXRoIHRoZSB2NGwgaW9jdGwgc3RydWN0cyAodjRsMiBub3QKKyAqIHlldC4uLikuICBJdCBpcyBhIGJpdCBsZXNzIGZsZXhpYmxlLCBidXQgbW9zdC9hbGwgdXNlZCBpMmMgY2hpcHMKKyAqIG1ha2Ugc2Vuc2UgaW4gdjRsIGNvbnRleHQgb25seS4gIFNvIEkgdGhpbmsgdGhhdCdzIGFjY2VwdGFibGUuLi4KKyAqLworCisvKiBtaXNjIHN0dWZmIHRvIHBhc3MgYXJvdW5kIGNvbmZpZyBpbmZvIHRvIGkyYyBjaGlwcyAqLworI2RlZmluZSBBVURDX0NPTkZJR19QSU5OQUNMRSAgX0lPVygnbScsMzIsaW50KQorCisjZW5kaWYgLyogQVVESU9DSElQX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvaWQuaCBiL2luY2x1ZGUvbWVkaWEvaWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjAzMjBkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9tZWRpYS9pZC5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qIEZJWE1FOiB0aGlzIHRlbXBvcmFyZWx5LCB1bnRpbCB0aGVzZSBhcmUgaW5jbHVkZWQgaW4gbGludXgvaTJjLWlkLmggKi8KKworLyogZHJpdmVycyAqLworI2lmbmRlZiAgSTJDX0RSSVZFUklEX1RWTUlYRVIKKyMgZGVmaW5lIEkyQ19EUklWRVJJRF9UVk1JWEVSIEkyQ19EUklWRVJJRF9FWFAwCisjZW5kaWYKKyNpZm5kZWYgIEkyQ19EUklWRVJJRF9UVkFVRElPCisjIGRlZmluZSBJMkNfRFJJVkVSSURfVFZBVURJTyBJMkNfRFJJVkVSSURfRVhQMQorI2VuZGlmCisKKy8qIGNoaXBzICovCisjaWZuZGVmICBJMkNfRFJJVkVSSURfRFBMMzUxOAorIyBkZWZpbmUgSTJDX0RSSVZFUklEX0RQTDM1MTggSTJDX0RSSVZFUklEX0VYUDIKKyNlbmRpZgorI2lmbmRlZiAgSTJDX0RSSVZFUklEX1REQTk4NzMKKyMgZGVmaW5lIEkyQ19EUklWRVJJRF9UREE5ODczIEkyQ19EUklWRVJJRF9FWFAzCisjZW5kaWYKKyNpZm5kZWYgIEkyQ19EUklWRVJJRF9UREE5ODc1CisjIGRlZmluZSBJMkNfRFJJVkVSSURfVERBOTg3NSBJMkNfRFJJVkVSSURfRVhQMCs0CisjZW5kaWYKKyNpZm5kZWYgIEkyQ19EUklWRVJJRF9QSUMxNkM1NF9QVjk1MQorIyBkZWZpbmUgSTJDX0RSSVZFUklEX1BJQzE2QzU0X1BWOTUxIEkyQ19EUklWRVJJRF9FWFAwKzUKKyNlbmRpZgorI2lmbmRlZiAgSTJDX0RSSVZFUklEX1REQTc0MzIKKyMgZGVmaW5lIEkyQ19EUklWRVJJRF9UREE3NDMyIEkyQ19EUklWRVJJRF9FWFAwKzYKKyNlbmRpZgorI2lmbmRlZiAgSTJDX0RSSVZFUklEX1REQTk4NzQKKyMgZGVmaW5lIEkyQ19EUklWRVJJRF9UREE5ODc0IEkyQ19EUklWRVJJRF9FWFAwKzcKKyNlbmRpZgorI2lmbmRlZiAgSTJDX0RSSVZFUklEX1NBQTY3NTJIUworIyBkZWZpbmUgSTJDX0RSSVZFUklEX1NBQTY3NTJIUyBJMkNfRFJJVkVSSURfRVhQMCs4CisjZW5kaWYKKworLyogYWxnb3JpdGhtcyAqLworI2lmbmRlZiBJMkNfQUxHT19TQUE3MTM0CisjIGRlZmluZSBJMkNfQUxHT19TQUE3MTM0IDB4MDkwMDAwCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvaXItY29tbW9uLmggYi9pbmNsdWRlL21lZGlhL2lyLWNvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyYzk2M2EKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL21lZGlhL2lyLWNvbW1vbi5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiAkSWQ6IGlyLWNvbW1vbi5oLHYgMS44IDIwMDUvMDIvMjIgMTI6Mjg6NDAga3JheGVsIEV4cCAkCisgKgorICogc29tZSBjb21tb24gc3RydWN0cyBhbmQgZnVuY3Rpb25zIHRvIGhhbmRsZSBpbmZyYXJlZCByZW1vdGVzIHZpYQorICogaW5wdXQgbGF5ZXIgLi4uCisgKgorICogKGMpIDIwMDMgR2VyZCBLbm9yciA8a3JheGVsQGJ5dGVzZXgub3JnPiBbU3VTRSBMYWJzXQorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKworCisjZGVmaW5lIElSX1RZUEVfUkM1ICAgICAxCisjZGVmaW5lIElSX1RZUEVfT1RIRVIgIDk5CisKKyNkZWZpbmUgSVJfS0VZVEFCX1RZUEUJdTMyCisjZGVmaW5lIElSX0tFWVRBQl9TSVpFCTEyOCAgLy8gZW5vdWd0aCBmb3IgcmM1LCBwcm9iYWJseSBuZWVkIG1vcmUgc29tZSBkYXkgLi4uCisKKyNkZWZpbmUgSVJfS0VZQ09ERSh0YWIsY29kZSkJKCgodW5zaWduZWQpY29kZSA8IElSX0tFWVRBQl9TSVpFKSBcCisJCQkJID8gdGFiW2NvZGVdIDogS0VZX1JFU0VSVkVEKQorCitzdHJ1Y3QgaXJfaW5wdXRfc3RhdGUgeworCS8qIGNvbmZpZ3VyYXRpb24gKi8KKwlpbnQgICAgICAgICAgICAgICAgaXJfdHlwZTsKKwlJUl9LRVlUQUJfVFlQRSAgICAgaXJfY29kZXNbSVJfS0VZVEFCX1NJWkVdOworCisJLyoga2V5IGluZm8gKi8KKwl1MzIgICAgICAgICAgICAgICAgaXJfcmF3OyAgICAgIC8qIHJhdyBkYXRhICovCisJdTMyICAgICAgICAgICAgICAgIGlyX2tleTsgICAgICAvKiBpciBrZXkgY29kZSAqLworCXUzMiAgICAgICAgICAgICAgICBrZXljb2RlOyAgICAgLyogbGludXgga2V5IGNvZGUgKi8KKwlpbnQgICAgICAgICAgICAgICAga2V5cHJlc3NlZDsgIC8qIGN1cnJlbnQgc3RhdGUgKi8KK307CisKK2V4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19yYzVfdHZbSVJfS0VZVEFCX1NJWkVdOworZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX3dpbmZhc3RbSVJfS0VZVEFCX1NJWkVdOworZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2VtcHR5W0lSX0tFWVRBQl9TSVpFXTsKK2V4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19oYXVwcGF1Z2VfbmV3W0lSX0tFWVRBQl9TSVpFXTsKKwordm9pZCBpcl9pbnB1dF9pbml0KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgc3RydWN0IGlyX2lucHV0X3N0YXRlICppciwKKwkJICAgaW50IGlyX3R5cGUsIElSX0tFWVRBQl9UWVBFICppcl9jb2Rlcyk7Cit2b2lkIGlyX2lucHV0X25va2V5KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgc3RydWN0IGlyX2lucHV0X3N0YXRlICppcik7Cit2b2lkIGlyX2lucHV0X2tleWRvd24oc3RydWN0IGlucHV0X2RldiAqZGV2LCBzdHJ1Y3QgaXJfaW5wdXRfc3RhdGUgKmlyLAorCQkgICAgICB1MzIgaXJfa2V5LCB1MzIgaXJfcmF3KTsKK3UzMiAgaXJfZXh0cmFjdF9iaXRzKHUzMiBkYXRhLCB1MzIgbWFzayk7CitpbnQgIGlyX2R1bXBfc2FtcGxlcyh1MzIgKnNhbXBsZXMsIGludCBjb3VudCk7CitpbnQgIGlyX2RlY29kZV9iaXBoYXNlKHUzMiAqc2FtcGxlcywgaW50IGNvdW50LCBpbnQgbG93LCBpbnQgaGlnaCk7CisKKy8qCisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiBjLWJhc2ljLW9mZnNldDogOAorICogRW5kOgorICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL292Y2FtY2hpcC5oIGIvaW5jbHVkZS9tZWRpYS9vdmNhbWNoaXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjdjMGFhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9tZWRpYS9vdmNhbWNoaXAuaApAQCAtMCwwICsxLDEwNCBAQAorLyogT21uaVZpc2lvbiogY2FtZXJhIGNoaXAgZHJpdmVyIEFQSQorICoKKyAqIENvcHlyaWdodCAoYykgMTk5OS0yMDA0IE1hcmsgTWNDbGVsbGFuZAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uIE5PIFdBUlJBTlRZIE9GIEFOWSBLSU5EIGlzIGV4cHJlc3NlZCBvciBpbXBsaWVkLgorICoKKyAqICogT21uaVZpc2lvbiBpcyBhIHRyYWRlbWFyayBvZiBPbW5pVmlzaW9uIFRlY2hub2xvZ2llcywgSW5jLiBUaGlzIGRyaXZlcgorICogaXMgbm90IHNwb25zb3JlZCBvciBkZXZlbG9wZWQgYnkgdGhlbS4KKyAqLworCisjaWZuZGVmIF9fTElOVVhfT1ZDQU1DSElQX0gKKyNkZWZpbmUgX19MSU5VWF9PVkNBTUNISVBfSAorCisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKworLyogUmVtb3ZlIHRoZXNlIG9uY2UgdGhleSBhcmUgb2ZmaWNpYWxseSBkZWZpbmVkICovCisjaWZuZGVmIEkyQ19EUklWRVJJRF9PVkNBTUNISVAKKwkjZGVmaW5lIEkyQ19EUklWRVJJRF9PVkNBTUNISVAJMHhmMDBmCisjZW5kaWYKKyNpZm5kZWYgSTJDX0hXX1NNQlVTX09WNTExCisJI2RlZmluZSBJMkNfSFdfU01CVVNfT1Y1MTEJMHhmZQorI2VuZGlmCisjaWZuZGVmIEkyQ19IV19TTUJVU19PVjUxOAorCSNkZWZpbmUgSTJDX0hXX1NNQlVTX09WNTE4CTB4ZmYKKyNlbmRpZgorI2lmbmRlZiBJMkNfSFdfU01CVVNfT1ZGWDIKKwkjZGVmaW5lIEkyQ19IV19TTUJVU19PVkZYMgkweGZkCisjZW5kaWYKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAgICAgRU5VTUVSQVRJT05TICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBDb250cm9scyAqLworZW51bSB7CisJT1ZDQU1DSElQX0NJRF9DT05ULAkJLyogQ29udHJhc3QgKi8KKwlPVkNBTUNISVBfQ0lEX0JSSUdIVCwJCS8qIEJyaWdodG5lc3MgKi8KKwlPVkNBTUNISVBfQ0lEX1NBVCwJCS8qIFNhdHVyYXRpb24gKi8KKwlPVkNBTUNISVBfQ0lEX0hVRSwJCS8qIEh1ZSAqLworCU9WQ0FNQ0hJUF9DSURfRVhQLAkJLyogRXhwb3N1cmUgKi8KKwlPVkNBTUNISVBfQ0lEX0ZSRVEsCQkvKiBMaWdodCBmcmVxdWVuY3kgKi8KKwlPVkNBTUNISVBfQ0lEX0JBTkRGSUxULAkJLyogQmFuZGluZyBmaWx0ZXIgKi8KKwlPVkNBTUNISVBfQ0lEX0FVVE9CUklHSFQsCS8qIEF1dG8gYnJpZ2h0bmVzcyAqLworCU9WQ0FNQ0hJUF9DSURfQVVUT0VYUCwJCS8qIEF1dG8gZXhwb3N1cmUgKi8KKwlPVkNBTUNISVBfQ0lEX0JBQ0tMSUdIVCwJLyogQmFjayBsaWdodCBjb21wZW5zYXRpb24gKi8KKwlPVkNBTUNISVBfQ0lEX01JUlJPUiwJCS8qIE1pcnJvciBob3Jpem9udGFsbHkgKi8KK307CisKKy8qIENoaXAgdHlwZXMgKi8KKyNkZWZpbmUgTlVNX0NDX1RZUEVTCTkKK2VudW0geworCUNDX1VOS05PV04sCisJQ0NfT1Y3NkJFLAorCUNDX09WNzYxMCwKKwlDQ19PVjc2MjAsCisJQ0NfT1Y3NjIwQUUsCisJQ0NfT1Y2NjIwLAorCUNDX09WNjYzMCwKKwlDQ19PVjY2MzBBRSwKKwlDQ19PVjY2MzBBRiwKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogICAgICAgICAgIEkyQyBBRERSRVNTRVMgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBPVjd4eDBfU0lEICAgKDB4NDIgPj4gMSkKKyNkZWZpbmUgT1Y2eHgwX1NJRCAgICgweEMwID4+IDEpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogICAgICAgICAgICAgICAgQVBJICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RydWN0IG92Y2FtY2hpcF9jb250cm9sIHsKKwlfX3UzMiBpZDsKKwlfX3MzMiB2YWx1ZTsKK307CisKK3N0cnVjdCBvdmNhbWNoaXBfd2luZG93IHsKKwlpbnQgeDsKKwlpbnQgeTsKKwlpbnQgd2lkdGg7CisJaW50IGhlaWdodDsKKwlpbnQgZm9ybWF0OworCWludCBxdWFydGVyOwkJLyogU2NhbGUgd2lkdGggYW5kIGhlaWdodCBkb3duIDJ4ICovCisKKwkvKiBUaGlzIHN0dWZmIHdpbGwgYmUgcmVtb3ZlZCBldmVudHVhbGx5ICovCisJaW50IGNsb2NrZGl2OwkJLyogQ2xvY2sgZGl2aXNvciBzZXR0aW5nICovCit9OworCisvKiBDb21tYW5kcyAqLworI2RlZmluZSBPVkNBTUNISVBfQ01EX1FfU1VCVFlQRSAgICAgX0lPUiAgKDB4ODgsIDB4MDAsIGludCkKKyNkZWZpbmUgT1ZDQU1DSElQX0NNRF9JTklUSUFMSVpFICAgIF9JT1cgICgweDg4LCAweDAxLCBpbnQpCisvKiBZb3UgbXVzdCBjYWxsIE9WQ0FNQ0hJUF9DTURfSU5JVElBTElaRSBiZWZvcmUgYW55IG9mIGNvbW1hbmRzIGJlbG93ISAqLworI2RlZmluZSBPVkNBTUNISVBfQ01EX1NfQ1RSTCAgICAgICAgX0lPVyAgKDB4ODgsIDB4MDIsIHN0cnVjdCBvdmNhbWNoaXBfY29udHJvbCkKKyNkZWZpbmUgT1ZDQU1DSElQX0NNRF9HX0NUUkwgICAgICAgIF9JT1dSICgweDg4LCAweDAzLCBzdHJ1Y3Qgb3ZjYW1jaGlwX2NvbnRyb2wpCisjZGVmaW5lIE9WQ0FNQ0hJUF9DTURfU19NT0RFICAgICAgICBfSU9XICAoMHg4OCwgMHgwNCwgc3RydWN0IG92Y2FtY2hpcF93aW5kb3cpCisjZGVmaW5lIE9WQ0FNQ0hJUF9NQVhfQ01EICAgICAgICAgICBfSU8gICAoMHg4OCwgMHgzZikKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3NhYTY3NTJocy5oIGIvaW5jbHVkZS9tZWRpYS9zYWE2NzUyaHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTFiYWQyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9tZWRpYS9zYWE2NzUyaHMuaApAQCAtMCwwICsxLDc1IEBACisvKgorICAgIHNhYTY3NTJocy5oIC0gZGVmaW5pdGlvbiBmb3Igc2FhNjc1MmhzIE1QRUcgZW5jb2RlcgorCisgICAgQ29weXJpZ2h0IChDKSAyMDAzIEFuZHJldyBkZSBRdWluY2V5IDxhZHFAbGlkc2tpYWxmLm5ldD4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorKi8KKworI2lmIDAgLyogbmRlZiBfU0FBNjc1MkhTX0ggKi8KKyNkZWZpbmUgX1NBQTY3NTJIU19ICisKK2VudW0gbXBlZ192aWRlb19iaXRyYXRlX21vZGUgeworCU1QRUdfVklERU9fQklUUkFURV9NT0RFX1ZCUiA9IDAsIC8qIFZhcmlhYmxlIGJpdHJhdGUgKi8KKwlNUEVHX1ZJREVPX0JJVFJBVEVfTU9ERV9DQlIgPSAxLCAvKiBDb25zdGFudCBiaXRyYXRlICovCisKKwlNUEVHX1ZJREVPX0JJVFJBVEVfTU9ERV9NQVgKK307CisKK2VudW0gbXBlZ19hdWRpb19iaXRyYXRlIHsKKwlNUEVHX0FVRElPX0JJVFJBVEVfMjU2ID0gMCwgLyogMjU2IGtCaXQvc2VjICovCisJTVBFR19BVURJT19CSVRSQVRFXzM4NCA9IDEsIC8qIDM4NCBrQml0L3NlYyAqLworCisJTVBFR19BVURJT19CSVRSQVRFX01BWAorfTsKKworZW51bSBtcGVnX3ZpZGVvX2Zvcm1hdCB7CisJTVBFR19WSURFT19GT1JNQVRfRDEgPSAwLAorCU1QRUdfVklERU9fRk9STUFUXzJfM19EMSA9IDEsCisJTVBFR19WSURFT19GT1JNQVRfMV8yX0QxID0gMiwKKwlNUEVHX1ZJREVPX0ZPUk1BVF9TSUYgPSAzLAorCisJTVBFR19WSURFT19GT1JNQVRfTUFYCit9OworCisjZGVmaW5lIE1QRUdfVklERU9fVEFSR0VUX0JJVFJBVEVfTUFYIDI3MDAwCisjZGVmaW5lIE1QRUdfVklERU9fTUFYX0JJVFJBVEVfTUFYIDI3MDAwCisjZGVmaW5lIE1QRUdfVE9UQUxfQklUUkFURV9NQVggMjcwMDAKKyNkZWZpbmUgTVBFR19QSURfTUFYICgoMSA8PCAxNCkgLSAxKQorCitzdHJ1Y3QgbXBlZ19wYXJhbXMgeworCWVudW0gbXBlZ192aWRlb19iaXRyYXRlX21vZGUgdmlkZW9fYml0cmF0ZV9tb2RlOworCXVuc2lnbmVkIGludCB2aWRlb190YXJnZXRfYml0cmF0ZTsKKwl1bnNpZ25lZCBpbnQgdmlkZW9fbWF4X2JpdHJhdGU7IC8vIG9ubHkgdXNlZCBmb3IgVkJSCisJZW51bSBtcGVnX2F1ZGlvX2JpdHJhdGUgYXVkaW9fYml0cmF0ZTsKKwl1bnNpZ25lZCBpbnQgdG90YWxfYml0cmF0ZTsKKworICAgCXVuc2lnbmVkIGludCBwbXRfcGlkOworCXVuc2lnbmVkIGludCB2aWRlb19waWQ7CisJdW5zaWduZWQgaW50IGF1ZGlvX3BpZDsKKwl1bnNpZ25lZCBpbnQgcGNyX3BpZDsKKworCWVudW0gbXBlZ192aWRlb19mb3JtYXQgdmlkZW9fZm9ybWF0OworfTsKKworI2RlZmluZSBNUEVHX1NFVFBBUkFNUyAgICAgICAgICAgICBfSU9XKCc2JywxMDAsc3RydWN0IG1wZWdfcGFyYW1zKQorCisjZW5kaWYgLy8gX1NBQTY3NTJIU19ICisKKy8qCisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiBjLWJhc2ljLW9mZnNldDogOAorICogRW5kOgorICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3NhYTcxNDYuaCBiL2luY2x1ZGUvbWVkaWEvc2FhNzE0Ni5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkZmI4ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL21lZGlhL3NhYTcxNDYuaApAQCAtMCwwICsxLDQ1MiBAQAorI2lmbmRlZiBfX1NBQTcxNDZfXworI2RlZmluZSBfX1NBQTcxNDZfXworCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgkvKiBmb3IgdmVyc2lvbiBtYWNyb3MgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4JLyogZm9yIG1vZHVsZS12ZXJzaW9uICovCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4JLyogZm9yIGRlbGF5LXN0dWZmICovCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgkJLyogZm9yIGttYWxsb2Mva2ZyZWUgKi8KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4JCS8qIGZvciBwY2ktY29uZmlnLXN0dWZmLCB2ZW5kb3IgaWRzIGV0Yy4gKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CQkvKiBmb3IgIl9faW5pdCIgKi8KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4JLyogZm9yIElNTUVESUFURV9CSCAqLworI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4JCS8qIGZvciBrZXJuZWwgbW9kdWxlIGxvYWRlciAqLworI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgkJLyogZm9yIGkyYyBzdWJzeXN0ZW0gKi8KKyNpbmNsdWRlIDxhc20vaW8uaD4JCS8qIGZvciBhY2Nlc3NpbmcgZGV2aWNlcyAqLworI2luY2x1ZGUgPGxpbnV4L3N0cmluZ2lmeS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4JLyogZm9yIHZtYWxsb2MoKSAqLworI2luY2x1ZGUgPGxpbnV4L21tLmg+CQkvKiBmb3Igdm1hbGxvY190b19wYWdlKCkgKi8KKworLyogdWdseSwgYnV0IG5lY2Vzc2FyeSB0byBidWlsZCB0aGUgZHZiIHN0dWZmIHVuZGVyIDIuNC4gKi8KKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsNTEpCisJI2luY2x1ZGUgImR2Yl9mdW5jdGlvbnMuaCIKKyNlbmRpZgorCisjZGVmaW5lIFNBQTcxNDZfVkVSU0lPTl9DT0RFIEtFUk5FTF9WRVJTSU9OKDAsNSwwKQorCisjZGVmaW5lIHNhYTcxNDZfd3JpdGUoc3h5LGFkcixkYXQpICAgIHdyaXRlbCgoZGF0KSwoc3h5LT5tZW0rKGFkcikpKQorI2RlZmluZSBzYWE3MTQ2X3JlYWQoc3h5LGFkcikgICAgICAgICByZWFkbChzeHktPm1lbSsoYWRyKSkKKworZXh0ZXJuIHVuc2lnbmVkIGludCBzYWE3MTQ2X2RlYnVnOworCisvLyNkZWZpbmUgREVCVUdfUFJPTE9HIHByaW50aygiKDB4JTA4eCkoMHglMDh4KSAlczogJXMoKTogIiwoZGV2PT0wPy0xOihkZXYtPm1lbT09MD8tMTpzYWE3MTQ2X3JlYWQoZGV2LFJQU19BRERSMCkpKSwoZGV2PT0wPy0xOihkZXYtPm1lbT09MD8tMTpzYWE3MTQ2X3JlYWQoZGV2LElFUikpKSxfX3N0cmluZ2lmeShLQlVJTERfTU9ETkFNRSksX19GVU5DVElPTl9fKQorCisjaWZuZGVmIERFQlVHX1ZBUklBQkxFCisJI2RlZmluZSBERUJVR19WQVJJQUJMRSBzYWE3MTQ2X2RlYnVnCisjZW5kaWYKKworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNSw1MSkKKyNkZWZpbmUgREVCVUdfUFJPTE9HIHByaW50aygiJXM6ICVzKCk6ICIsX19zdHJpbmdpZnkoS0JVSUxEX0JBU0VOQU1FKSxfX0ZVTkNUSU9OX18pCisjZGVmaW5lIElORk8oeCkgeyBwcmludGsoIiVzOiAiLF9fc3RyaW5naWZ5KEtCVUlMRF9CQVNFTkFNRSkpOyBwcmludGsgeDsgfQorI2Vsc2UKKyNkZWZpbmUgREVCVUdfUFJPTE9HIHByaW50aygiJXM6ICVzKCk6ICIsX19zdHJpbmdpZnkoS0JVSUxEX01PRE5BTUUpLF9fRlVOQ1RJT05fXykKKyNkZWZpbmUgSU5GTyh4KSB7IHByaW50aygiJXM6ICIsX19zdHJpbmdpZnkoS0JVSUxEX01PRE5BTUUpKTsgcHJpbnRrIHg7IH0KKyNlbmRpZgorCisjZGVmaW5lIEVSUih4KSB7IERFQlVHX1BST0xPRzsgcHJpbnRrIHg7IH0KKworI2RlZmluZSBERUJfUyh4KSAgICBpZiAoMCE9KERFQlVHX1ZBUklBQkxFJjB4MDEpKSB7IERFQlVHX1BST0xPRzsgcHJpbnRrIHg7IH0gLyogc2ltcGxlIGRlYnVnIG1lc3NhZ2VzICovCisjZGVmaW5lIERFQl9EKHgpICAgIGlmICgwIT0oREVCVUdfVkFSSUFCTEUmMHgwMikpIHsgREVCVUdfUFJPTE9HOyBwcmludGsgeDsgfSAvKiBtb3JlIGRldGFpbGVkIGRlYnVnIG1lc3NhZ2VzICovCisjZGVmaW5lIERFQl9FRSh4KSAgIGlmICgwIT0oREVCVUdfVkFSSUFCTEUmMHgwNCkpIHsgREVCVUdfUFJPTE9HOyBwcmludGsgeDsgfSAvKiBwcmludCBlbnRlciBhbmQgZXhpdCBvZiBmdW5jdGlvbnMgKi8KKyNkZWZpbmUgREVCX0kyQyh4KSAgaWYgKDAhPShERUJVR19WQVJJQUJMRSYweDA4KSkgeyBERUJVR19QUk9MT0c7IHByaW50ayB4OyB9IC8qIGkyYyBkZWJ1ZyBtZXNzYWdlcyAqLworI2RlZmluZSBERUJfVkJJKHgpICBpZiAoMCE9KERFQlVHX1ZBUklBQkxFJjB4MTApKSB7IERFQlVHX1BST0xPRzsgcHJpbnRrIHg7IH0gLyogdmJpIGRlYnVnIG1lc3NhZ2VzICovCisjZGVmaW5lIERFQl9JTlQoeCkgIGlmICgwIT0oREVCVUdfVkFSSUFCTEUmMHgyMCkpIHsgREVCVUdfUFJPTE9HOyBwcmludGsgeDsgfSAvKiBpbnRlcnJ1cHQgZGVidWcgbWVzc2FnZXMgKi8KKyNkZWZpbmUgREVCX0NBUCh4KSAgaWYgKDAhPShERUJVR19WQVJJQUJMRSYweDQwKSkgeyBERUJVR19QUk9MT0c7IHByaW50ayB4OyB9IC8qIGNhcHR1cmUgZGVidWcgbWVzc2FnZXMgKi8KKworI2RlZmluZSBTQUE3MTQ2X0lFUl9ESVNBQkxFKHgseSkgXAorCXNhYTcxNDZfd3JpdGUoeCwgSUVSLCBzYWE3MTQ2X3JlYWQoeCwgSUVSKSAmIH4oeSkpOworI2RlZmluZSBTQUE3MTQ2X0lFUl9FTkFCTEUoeCx5KSBcCisJc2FhNzE0Nl93cml0ZSh4LCBJRVIsIHNhYTcxNDZfcmVhZCh4LCBJRVIpIHwgKHkpKTsKKyNkZWZpbmUgU0FBNzE0Nl9JU1JfQ0xFQVIoeCx5KSBcCisJc2FhNzE0Nl93cml0ZSh4LCBJU1IsICh5KSk7CisKK3N0cnVjdCBzYWE3MTQ2X2RldjsKK3N0cnVjdCBzYWE3MTQ2X2V4dGVuc2lvbjsKK3N0cnVjdCBzYWE3MTQ2X3Z2OworCisvKiBzYWE3MTQ2IHBhZ2UgdGFibGUgKi8KK3N0cnVjdCBzYWE3MTQ2X3BndGFibGUgeworCXVuc2lnbmVkIGludAlzaXplOworCXUzMgkJKmNwdTsKKwlkbWFfYWRkcl90CWRtYTsKKwkvKiB1c2VkIGZvciBvZmZzZXRzIGZvciB1LHYgcGxhbmVzIGZvciBwbGFuYXIgY2FwdHVyZSBtb2RlcyAqLworCXVuc2lnbmVkIGxvbmcJb2Zmc2V0OworCS8qIHVzZWQgZm9yIGN1c3RvbSBwYWdldGFibGVzICh1c2VkIGZvciBleGFtcGxlIGJ5IGJ1ZGdldCBkdmIgY2FyZHMpICovCisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzbGlzdDsKK307CisKK3N0cnVjdCBzYWE3MTQ2X3BjaV9leHRlbnNpb25fZGF0YSB7CisJc3RydWN0IHNhYTcxNDZfZXh0ZW5zaW9uICpleHQ7CisJdm9pZCAqZXh0X3ByaXY7CQkJLyogbW9zdCBsaWtlbHkgYSBuYW1lIHN0cmluZyAqLworfTsKKworI2RlZmluZSBNQUtFX0VYVEVOU0lPTl9QQ0koeF92YXIsIHhfdmVuZG9yLCB4X2RldmljZSkJCVwKKwl7CQkJCQkJCVwKKwkJLnZlbmRvciAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywJCVwKKwkJLmRldmljZQkgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTQ2LAlcCisJCS5zdWJ2ZW5kb3IgPSB4X3ZlbmRvciwJCQkJXAorCQkuc3ViZGV2aWNlID0geF9kZXZpY2UsCQkJCVwKKwkJLmRyaXZlcl9kYXRhID0gKHVuc2lnbmVkIGxvbmcpJiB4X3ZhciwJCVwKKwl9CisKK3N0cnVjdCBzYWE3MTQ2X2V4dGVuc2lvbgoreworCWNoYXIJbmFtZVszMl07CQkvKiBuYW1lIG9mIHRoZSBkZXZpY2UgKi8KKyNkZWZpbmUgU0FBNzE0Nl9VU0VfSTJDX0lSUQkweDEKKyNkZWZpbmUgU0FBNzE0Nl9JMkNfU0hPUlRfREVMQVkJMHgyCisJaW50CWZsYWdzOworCisJLyogcGFpcnMgb2Ygc3VidmVuZG9yIGFuZCBzdWJkZXZpY2UgaWRzIGZvcgorCSAgIHN1cHBvcnRlZCBkZXZpY2VzLCBsYXN0IGVudHJ5IDB4ZmZmZiwgMHhmZmYgKi8KKwlzdHJ1Y3QgbW9kdWxlICptb2R1bGU7CisJc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyOworCXN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfdGJsOworCisJLyogZXh0ZW5zaW9uIGZ1bmN0aW9ucyAqLworCWludCAoKnByb2JlKShzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKik7CisJaW50ICgqYXR0YWNoKShzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKiwgc3RydWN0IHNhYTcxNDZfcGNpX2V4dGVuc2lvbl9kYXRhICopOworCWludCAoKmRldGFjaCkoc3RydWN0IHNhYTcxNDZfZGV2Kik7CisKKwl1MzIJaXJxX21hc2s7CS8qIG1hc2sgdG8gaW5kaWNhdGUsIHdoaWNoIGlycS1ldmVudHMgYXJlIGhhbmRsZWQgYnkgdGhlIGV4dGVuc2lvbiAqLworCXZvaWQJKCppcnFfZnVuYykoc3RydWN0IHNhYTcxNDZfZGV2KiwgdTMyKiBpcnFfbWFzayk7Cit9OworCitzdHJ1Y3Qgc2FhNzE0Nl9kbWEKK3sKKwlkbWFfYWRkcl90CWRtYV9oYW5kbGU7CisJdTMyCQkqY3B1X2FkZHI7Cit9OworCitzdHJ1Y3Qgc2FhNzE0Nl9kZXYKK3sKKwlzdHJ1Y3QgbW9kdWxlCQkJKm1vZHVsZTsKKworCXN0cnVjdCBsaXN0X2hlYWQJCWl0ZW07CisKKwkvKiBkaWZmZXJlbnQgZGV2aWNlIGxvY2tzICovCisJc3BpbmxvY2tfdAkJCXNsb2NrOworICAgICAgICBzdHJ1Y3Qgc2VtYXBob3JlCQlsb2NrOworCisJdW5zaWduZWQgY2hhcgkJCV9faW9tZW0gKm1lbTsJCS8qIHBvaW50ZXIgdG8gbWFwcGVkIElPIG1lbW9yeSAqLworCWludAkJCQlyZXZpc2lvbjsJLyogY2hpcCByZXZpc2lvbjsgbmVlZGVkIGZvciBidWctd29ya2Fyb3VuZHMqLworCisJLyogcGNpLWRldmljZSAmIGlycSBzdHVmZiovCisJY2hhcgkJCQluYW1lWzMyXTsKKwlzdHJ1Y3QgcGNpX2RldgkJCSpwY2k7CisJdTMyCQkJCWludF90b2RvOworCXNwaW5sb2NrX3QJCQlpbnRfc2xvY2s7CisKKwkvKiBleHRlbnNpb24gaGFuZGxpbmcgKi8KKwlzdHJ1Y3Qgc2FhNzE0Nl9leHRlbnNpb24JKmV4dDsJCS8qIGluZGljYXRlcyBpZiBoYW5kbGVkIGJ5IGV4dGVuc2lvbiAqLworCXZvaWQJCQkJKmV4dF9wcml2OwkvKiBwb2ludGVyIGZvciBleHRlbnNpb24gcHJpdmF0ZSB1c2UgKG1vc3QgbGlrZWx5IHNvbWUgcHJpdmF0ZSBkYXRhKSAqLworCXN0cnVjdCBzYWE3MTQ2X2V4dF92dgkJKmV4dF92dl9kYXRhOworCisJLyogcGVyIGRldmljZSB2aWRlby92YmkgaW5mb3JtYXRpb25zIChpZiBhdmFpbGFibGUpICovCisJc3RydWN0IHNhYTcxNDZfdnYJKnZ2X2RhdGE7CisJdm9pZCAoKnZ2X2NhbGxiYWNrKShzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiwgdW5zaWduZWQgbG9uZyBzdGF0dXMpOworCisJLyogaTJjLXN0dWZmICovCisgICAgICAgIHN0cnVjdCBzZW1hcGhvcmUJaTJjX2xvY2s7CisJdTMyCQkJaTJjX2JpdHJhdGU7CisJc3RydWN0IHNhYTcxNDZfZG1hCWRfaTJjOwkvKiBwb2ludGVyIHRvIGkyYyBtZW1vcnkgKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdAlpMmNfd3E7CisJaW50CQkJaTJjX29wOworCisJLyogbWVtb3JpZXMgKi8KKwlzdHJ1Y3Qgc2FhNzE0Nl9kbWEJZF9ycHMwOworCXN0cnVjdCBzYWE3MTQ2X2RtYQlkX3JwczE7Cit9OworCisvKiBmcm9tIHNhYTcxNDZfaTJjLmMgKi8KK2ludCBzYWE3MTQ2X2kyY19hZGFwdGVyX3ByZXBhcmUoc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYsIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXB0ZXIsIHUzMiBiaXRyYXRlKTsKK2ludCBzYWE3MTQ2X2kyY190cmFuc2ZlcihzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKnNhYSwgY29uc3Qgc3RydWN0IGkyY19tc2cgKm1zZ3MsIGludCBudW0sIGludCByZXRyaWVzKTsKKworLyogZnJvbSBzYWE3MTQ2X2NvcmUuYyAqLworZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgc2FhNzE0Nl9kZXZpY2VzOworZXh0ZXJuIHN0cnVjdCBzZW1hcGhvcmUgc2FhNzE0Nl9kZXZpY2VzX2xvY2s7CitpbnQgc2FhNzE0Nl9yZWdpc3Rlcl9leHRlbnNpb24oc3RydWN0IHNhYTcxNDZfZXh0ZW5zaW9uKik7CitpbnQgc2FhNzE0Nl91bnJlZ2lzdGVyX2V4dGVuc2lvbihzdHJ1Y3Qgc2FhNzE0Nl9leHRlbnNpb24qKTsKK3N0cnVjdCBzYWE3MTQ2X2Zvcm1hdCogZm9ybWF0X2J5X2ZvdXJjYyhzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiwgaW50IGZvdXJjYyk7CitpbnQgc2FhNzE0Nl9wZ3RhYmxlX2FsbG9jKHN0cnVjdCBwY2lfZGV2ICpwY2ksIHN0cnVjdCBzYWE3MTQ2X3BndGFibGUgKnB0KTsKK3ZvaWQgc2FhNzE0Nl9wZ3RhYmxlX2ZyZWUoc3RydWN0IHBjaV9kZXYgKnBjaSwgc3RydWN0IHNhYTcxNDZfcGd0YWJsZSAqcHQpOworaW50IHNhYTcxNDZfcGd0YWJsZV9idWlsZF9zaW5nbGUoc3RydWN0IHBjaV9kZXYgKnBjaSwgc3RydWN0IHNhYTcxNDZfcGd0YWJsZSAqcHQsIHN0cnVjdCBzY2F0dGVybGlzdCAqbGlzdCwgaW50IGxlbmd0aCApOworY2hhciAqc2FhNzE0Nl92bWFsbG9jX2J1aWxkX3BndGFibGUoc3RydWN0IHBjaV9kZXYgKnBjaSwgbG9uZyBsZW5ndGgsIHN0cnVjdCBzYWE3MTQ2X3BndGFibGUgKnB0KTsKK3ZvaWQgc2FhNzE0Nl9zZXRncGlvKHN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2LCBpbnQgcG9ydCwgdTMyIGRhdGEpOworaW50IHNhYTcxNDZfd2FpdF9mb3JfZGViaV9kb25lKHN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2LCBpbnQgbm9idXN5bG9vcCk7CisKKy8qIHNvbWUgbWVtb3J5IHNpemVzICovCisjZGVmaW5lIFNBQTcxNDZfSTJDX01FTQkJKCAxKlBBR0VfU0laRSkKKyNkZWZpbmUgU0FBNzE0Nl9SUFNfTUVNCQkoIDEqUEFHRV9TSVpFKQorCisvKiBzb21lIGkyYyBjb25zdGFudHMgKi8KKyNkZWZpbmUgU0FBNzE0Nl9JMkNfVElNRU9VVAkxMDAJLyogaTJjLXRpbWVvdXQtdmFsdWUgaW4gbXMgKi8KKyNkZWZpbmUgU0FBNzE0Nl9JMkNfUkVUUklFUwkzCS8qIGhvdyBtYW55IHRpbWVzIHNoYWxsIHdlIHJldHJ5IGFuIGkyYy1vcGVyYXRpb24/ICovCisjZGVmaW5lIFNBQTcxNDZfSTJDX0RFTEFZCTUJLyogdGltZSB3ZSB3YWl0IGFmdGVyIGNlcnRhaW4gaTJjLW9wZXJhdGlvbnMgKi8KKworLyogdW5zb3J0ZWQgZGVmaW5lcyAqLworI2RlZmluZSBNRTEgICAgMHgwMDAwMDAwODAwCisjZGVmaW5lIFBWMSAgICAweDAwMDAwMDAwMDgKKworLyogZ3BpbyBkZWZpbmVzICovCisjZGVmaW5lIFNBQTcxNDZfR1BJT19JTlBVVCAweDAwCisjZGVmaW5lIFNBQTcxNDZfR1BJT19JUlFISSAweDEwCisjZGVmaW5lIFNBQTcxNDZfR1BJT19JUlFMTyAweDIwCisjZGVmaW5lIFNBQTcxNDZfR1BJT19JUlFITCAweDMwCisjZGVmaW5lIFNBQTcxNDZfR1BJT19PVVRMTyAweDQwCisjZGVmaW5lIFNBQTcxNDZfR1BJT19PVVRISSAweDUwCisKKy8qIGRlYmkgZGVmaW5lcyAqLworI2RlZmluZSBERUJJTk9TV0FQIDB4MDAwZTAwMDAKKworLyogZGVmaW5lIGZvciB0aGUgcmVnaXN0ZXIgcHJvZ3JhbW1pbmcgc2VxdWVuY2VyIChycHMpICovCisjZGVmaW5lIENNRF9OT1AJCTB4MDAwMDAwMDAgIC8qIE5vIG9wZXJhdGlvbiAqLworI2RlZmluZSBDTURfQ0xSX0VWRU5UCTB4MDAwMDAwMDAgIC8qIENsZWFyIGV2ZW50ICovCisjZGVmaW5lIENNRF9TRVRfRVZFTlQJMHgxMDAwMDAwMCAgLyogU2V0IHNpZ25hbCBldmVudCAqLworI2RlZmluZSBDTURfUEFVU0UJMHgyMDAwMDAwMCAgLyogUGF1c2UgKi8KKyNkZWZpbmUgQ01EX0NIRUNLX0xBVEUJMHgzMDAwMDAwMCAgLyogQ2hlY2sgbGF0ZSAqLworI2RlZmluZSBDTURfVVBMT0FECTB4NDAwMDAwMDAgIC8qIFVwbG9hZCAqLworI2RlZmluZSBDTURfU1RPUAkweDUwMDAwMDAwICAvKiBTdG9wICovCisjZGVmaW5lIENNRF9JTlRFUlJVUFQJMHg2MDAwMDAwMCAgLyogSW50ZXJydXB0ICovCisjZGVmaW5lIENNRF9KVU1QCTB4ODAwMDAwMDAgIC8qIEp1bXAgKi8KKyNkZWZpbmUgQ01EX1dSX1JFRwkweDkwMDAwMDAwICAvKiBXcml0ZSAobG9hZCkgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ01EX1JEX1JFRwkweGEwMDAwMDAwICAvKiBSZWFkIChzdG9yZSkgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ01EX1dSX1JFR19NQVNLCTB4YzAwMDAwMDAgIC8qIFdyaXRlIHJlZ2lzdGVyIHdpdGggbWFzayAqLworCisjZGVmaW5lIENNRF9PQU4JCU1BU0tfMjcKKyNkZWZpbmUgQ01EX0lOVgkJTUFTS18yNgorI2RlZmluZSBDTURfU0lHNAlNQVNLXzI1CisjZGVmaW5lIENNRF9TSUczCU1BU0tfMjQKKyNkZWZpbmUgQ01EX1NJRzIJTUFTS18yMworI2RlZmluZSBDTURfU0lHMQlNQVNLXzIyCisjZGVmaW5lIENNRF9TSUcwCU1BU0tfMjEKKyNkZWZpbmUgQ01EX09fRklEX0IJTUFTS18xNAorI2RlZmluZSBDTURfRV9GSURfQglNQVNLXzEzCisjZGVmaW5lIENNRF9PX0ZJRF9BCU1BU0tfMTIKKyNkZWZpbmUgQ01EX0VfRklEX0EJTUFTS18xMQorCisvKiBzb21lIGV2ZW50cyBhbmQgY29tbWFuZCBtb2RpZmllcnMgZm9yIHJwczEgc3F1YXJld2F2ZSBnZW5lcmF0b3IgKi8KKyNkZWZpbmUgRVZUX0hTICAgICAgICAgICgxPDwxNSkgICAgIC8vIFNvdXJjZSBMaW5lIFRocmVzaG9sZCByZWFjaGVkCisjZGVmaW5lIEVWVF9WQklfQiAgICAgICAoMTw8OSkgICAgICAvLyBWU1lOQyBFdmVudAorI2RlZmluZSBSUFNfT0FOICAgICAgICAgKDE8PDI3KSAgICAgLy8gMTogT1IgZXZlbnRzLCAwOiBBTkQgZXZlbnRzCisjZGVmaW5lIFJQU19JTlYgICAgICAgICAoMTw8MjYpICAgICAvLyBJbnZlcnQgKGNvbXBvdW5kKSBldmVudAorI2RlZmluZSBHUElPM19NU0sgICAgICAgMHhGRjAwMDAwMCAgLy8gR1BJTyAjMyBjb250cm9sIGJpdHMKKworLyogQml0IG1hc2sgY29uc3RhbnRzICovCisjZGVmaW5lIE1BU0tfMDAgICAweDAwMDAwMDAxICAgIC8qIE1hc2sgdmFsdWUgZm9yIGJpdCAwICovCisjZGVmaW5lIE1BU0tfMDEgICAweDAwMDAwMDAyICAgIC8qIE1hc2sgdmFsdWUgZm9yIGJpdCAxICovCisjZGVmaW5lIE1BU0tfMDIgICAweDAwMDAwMDA0ICAgIC8qIE1hc2sgdmFsdWUgZm9yIGJpdCAyICovCisjZGVmaW5lIE1BU0tfMDMgICAweDAwMDAwMDA4ICAgIC8qIE1hc2sgdmFsdWUgZm9yIGJpdCAzICovCisjZGVmaW5lIE1BU0tfMDQgICAweDAwMDAwMDEwICAgIC8qIE1hc2sgdmFsdWUgZm9yIGJpdCA0ICovCisjZGVmaW5lIE1BU0tfMDUgICAweDAwMDAwMDIwICAgIC8qIE1hc2sgdmFsdWUgZm9yIGJpdCA1ICovCisjZGVmaW5lIE1BU0tfMDYgICAweDAwMDAwMDQwICAgIC8qIE1hc2sgdmFsdWUgZm9yIGJpdCA2ICovCisjZGVmaW5lIE1BU0tfMDcgICAweDAwMDAwMDgwICAgIC8qIE1hc2sgdmFsdWUgZm9yIGJpdCA3ICovCisjZGVmaW5lIE1BU0tfMDggICAweDAwMDAwMTAwICAgIC8qIE1hc2sgdmFsdWUgZm9yIGJpdCA4ICovCisjZGVmaW5lIE1BU0tfMDkgICAweDAwMDAwMjAwICAgIC8qIE1hc2sgdmFsdWUgZm9yIGJpdCA5ICovCisjZGVmaW5lIE1BU0tfMTAgICAweDAwMDAwNDAwICAgIC8qIE1hc2sgdmFsdWUgZm9yIGJpdCAxMCAqLworI2RlZmluZSBNQVNLXzExICAgMHgwMDAwMDgwMCAgICAvKiBNYXNrIHZhbHVlIGZvciBiaXQgMTEgKi8KKyNkZWZpbmUgTUFTS18xMiAgIDB4MDAwMDEwMDAgICAgLyogTWFzayB2YWx1ZSBmb3IgYml0IDEyICovCisjZGVmaW5lIE1BU0tfMTMgICAweDAwMDAyMDAwICAgIC8qIE1hc2sgdmFsdWUgZm9yIGJpdCAxMyAqLworI2RlZmluZSBNQVNLXzE0ICAgMHgwMDAwNDAwMCAgICAvKiBNYXNrIHZhbHVlIGZvciBiaXQgMTQgKi8KKyNkZWZpbmUgTUFTS18xNSAgIDB4MDAwMDgwMDAgICAgLyogTWFzayB2YWx1ZSBmb3IgYml0IDE1ICovCisjZGVmaW5lIE1BU0tfMTYgICAweDAwMDEwMDAwICAgIC8qIE1hc2sgdmFsdWUgZm9yIGJpdCAxNiAqLworI2RlZmluZSBNQVNLXzE3ICAgMHgwMDAyMDAwMCAgICAvKiBNYXNrIHZhbHVlIGZvciBiaXQgMTcgKi8KKyNkZWZpbmUgTUFTS18xOCAgIDB4MDAwNDAwMDAgICAgLyogTWFzayB2YWx1ZSBmb3IgYml0IDE4ICovCisjZGVmaW5lIE1BU0tfMTkgICAweDAwMDgwMDAwICAgIC8qIE1hc2sgdmFsdWUgZm9yIGJpdCAxOSAqLworI2RlZmluZSBNQVNLXzIwICAgMHgwMDEwMDAwMCAgICAvKiBNYXNrIHZhbHVlIGZvciBiaXQgMjAgKi8KKyNkZWZpbmUgTUFTS18yMSAgIDB4MDAyMDAwMDAgICAgLyogTWFzayB2YWx1ZSBmb3IgYml0IDIxICovCisjZGVmaW5lIE1BU0tfMjIgICAweDAwNDAwMDAwICAgIC8qIE1hc2sgdmFsdWUgZm9yIGJpdCAyMiAqLworI2RlZmluZSBNQVNLXzIzICAgMHgwMDgwMDAwMCAgICAvKiBNYXNrIHZhbHVlIGZvciBiaXQgMjMgKi8KKyNkZWZpbmUgTUFTS18yNCAgIDB4MDEwMDAwMDAgICAgLyogTWFzayB2YWx1ZSBmb3IgYml0IDI0ICovCisjZGVmaW5lIE1BU0tfMjUgICAweDAyMDAwMDAwICAgIC8qIE1hc2sgdmFsdWUgZm9yIGJpdCAyNSAqLworI2RlZmluZSBNQVNLXzI2ICAgMHgwNDAwMDAwMCAgICAvKiBNYXNrIHZhbHVlIGZvciBiaXQgMjYgKi8KKyNkZWZpbmUgTUFTS18yNyAgIDB4MDgwMDAwMDAgICAgLyogTWFzayB2YWx1ZSBmb3IgYml0IDI3ICovCisjZGVmaW5lIE1BU0tfMjggICAweDEwMDAwMDAwICAgIC8qIE1hc2sgdmFsdWUgZm9yIGJpdCAyOCAqLworI2RlZmluZSBNQVNLXzI5ICAgMHgyMDAwMDAwMCAgICAvKiBNYXNrIHZhbHVlIGZvciBiaXQgMjkgKi8KKyNkZWZpbmUgTUFTS18zMCAgIDB4NDAwMDAwMDAgICAgLyogTWFzayB2YWx1ZSBmb3IgYml0IDMwICovCisjZGVmaW5lIE1BU0tfMzEgICAweDgwMDAwMDAwICAgIC8qIE1hc2sgdmFsdWUgZm9yIGJpdCAzMSAqLworCisjZGVmaW5lIE1BU0tfQjAgICAweDAwMDAwMGZmICAgIC8qIE1hc2sgdmFsdWUgZm9yIGJ5dGUgMCAqLworI2RlZmluZSBNQVNLX0IxICAgMHgwMDAwZmYwMCAgICAvKiBNYXNrIHZhbHVlIGZvciBieXRlIDEgKi8KKyNkZWZpbmUgTUFTS19CMiAgIDB4MDBmZjAwMDAgICAgLyogTWFzayB2YWx1ZSBmb3IgYnl0ZSAyICovCisjZGVmaW5lIE1BU0tfQjMgICAweGZmMDAwMDAwICAgIC8qIE1hc2sgdmFsdWUgZm9yIGJ5dGUgMyAqLworCisjZGVmaW5lIE1BU0tfVzAgICAweDAwMDBmZmZmICAgIC8qIE1hc2sgdmFsdWUgZm9yIHdvcmQgMCAqLworI2RlZmluZSBNQVNLX1cxICAgMHhmZmZmMDAwMCAgICAvKiBNYXNrIHZhbHVlIGZvciB3b3JkIDEgKi8KKworI2RlZmluZSBNQVNLX1BBICAgMHhmZmZmZmZmYyAgICAvKiBNYXNrIHZhbHVlIGZvciBwaHlzaWNhbCBhZGRyZXNzICovCisjZGVmaW5lIE1BU0tfUFIgICAweGZmZmZmZmZlCS8qIE1hc2sgdmFsdWUgZm9yIHByb3RlY3Rpb24gcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTUFTS19FUiAgIDB4ZmZmZmZmZmYgICAgLyogTWFzayB2YWx1ZSBmb3IgdGhlIGVudGlyZSByZWdpc3RlciAqLworCisjZGVmaW5lIE1BU0tfTk9ORSAweDAwMDAwMDAwICAgIC8qIE5vIG1hc2sgKi8KKworLyogcmVnaXN0ZXIgYWxpYXNlcyAqLworI2RlZmluZSBCQVNFX09ERDEgICAgICAgICAweDAwICAvKiBWaWRlbyBETUEgMSByZWdpc3RlcnMgICovCisjZGVmaW5lIEJBU0VfRVZFTjEgICAgICAgIDB4MDQKKyNkZWZpbmUgUFJPVF9BRERSMSAgICAgICAgMHgwOAorI2RlZmluZSBQSVRDSDEgICAgICAgICAgICAweDBDCisjZGVmaW5lIEJBU0VfUEFHRTEgICAgICAgIDB4MTAgIC8qIFZpZGVvIERNQSAxIGJhc2UgcGFnZSAqLworI2RlZmluZSBOVU1fTElORV9CWVRFMSAgICAweDE0CisKKyNkZWZpbmUgQkFTRV9PREQyICAgICAgICAgMHgxOCAgLyogVmlkZW8gRE1BIDIgcmVnaXN0ZXJzICovCisjZGVmaW5lIEJBU0VfRVZFTjIgICAgICAgIDB4MUMKKyNkZWZpbmUgUFJPVF9BRERSMiAgICAgICAgMHgyMAorI2RlZmluZSBQSVRDSDIgICAgICAgICAgICAweDI0CisjZGVmaW5lIEJBU0VfUEFHRTIgICAgICAgIDB4MjggIC8qIFZpZGVvIERNQSAyIGJhc2UgcGFnZSAqLworI2RlZmluZSBOVU1fTElORV9CWVRFMiAgICAweDJDCisKKyNkZWZpbmUgQkFTRV9PREQzICAgICAgICAgMHgzMCAgLyogVmlkZW8gRE1BIDMgcmVnaXN0ZXJzICovCisjZGVmaW5lIEJBU0VfRVZFTjMgICAgICAgIDB4MzQKKyNkZWZpbmUgUFJPVF9BRERSMyAgICAgICAgMHgzOAorI2RlZmluZSBQSVRDSDMgICAgICAgICAgICAweDNDCisjZGVmaW5lIEJBU0VfUEFHRTMgICAgICAgIDB4NDAgIC8qIFZpZGVvIERNQSAzIGJhc2UgcGFnZSAqLworI2RlZmluZSBOVU1fTElORV9CWVRFMyAgICAweDQ0CisKKyNkZWZpbmUgUENJX0JUX1YxICAgICAgICAgMHg0OCAgLyogVmlkZW8vRklGTyAxICovCisjZGVmaW5lIFBDSV9CVF9WMiAgICAgICAgIDB4NDkgIC8qIFZpZGVvL0ZJRk8gMiAqLworI2RlZmluZSBQQ0lfQlRfVjMgICAgICAgICAweDRBICAvKiBWaWRlby9GSUZPIDMgKi8KKyNkZWZpbmUgUENJX0JUX0RFQkkgICAgICAgMHg0QiAgLyogREVCSSAqLworI2RlZmluZSBQQ0lfQlRfQSAgICAgICAgICAweDRDICAvKiBBdWRpbyAqLworCisjZGVmaW5lIEREMV9JTklUICAgICAgICAgIDB4NTAgIC8qIEluaXQgc2V0dGluZyBvZiBERDEgaW50ZXJmYWNlICovCisKKyNkZWZpbmUgREQxX1NUUkVBTV9CICAgICAgMHg1NCAgLyogREQxIEIgdmlkZW8gZGF0YSBzdHJlYW0gaGFuZGxpbmcgKi8KKyNkZWZpbmUgREQxX1NUUkVBTV9BICAgICAgMHg1NiAgLyogREQxIEEgdmlkZW8gZGF0YSBzdHJlYW0gaGFuZGxpbmcgKi8KKworI2RlZmluZSBCUlNfQ1RSTCAgICAgICAgICAweDU4ICAvKiBCUlMgY29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBIUFNfQ1RSTCAgICAgICAgICAweDVDICAvKiBIUFMgY29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBIUFNfVl9TQ0FMRSAgICAgICAweDYwICAvKiBIUFMgdmVydGljYWwgc2NhbGUgKi8KKyNkZWZpbmUgSFBTX1ZfR0FJTiAgICAgICAgMHg2NCAgLyogSFBTIHZlcnRpY2FsIEFDTCBhbmQgZ2FpbiAqLworI2RlZmluZSBIUFNfSF9QUkVTQ0FMRSAgICAweDY4ICAvKiBIUFMgaG9yaXpvbnRhbCBwcmVzY2FsZSAgICovCisjZGVmaW5lIEhQU19IX1NDQUxFICAgICAgIDB4NkMgIC8qIEhQUyBob3Jpem9udGFsIHNjYWxlICovCisjZGVmaW5lIEJDU19DVFJMICAgICAgICAgIDB4NzAgIC8qIEJDUyBjb250cm9sICovCisjZGVmaW5lIENIUk9NQV9LRVlfUkFOR0UgIDB4NzQKKyNkZWZpbmUgQ0xJUF9GT1JNQVRfQ1RSTCAgMHg3OCAgLyogSFBTIG91dHB1dHMgZm9ybWF0cyAmIGNsaXBwaW5nICovCisKKyNkZWZpbmUgREVCSV9DT05GSUcgICAgICAgMHg3QworI2RlZmluZSBERUJJX0NPTU1BTkQgICAgICAweDgwCisjZGVmaW5lIERFQklfUEFHRSAgICAgICAgIDB4ODQKKyNkZWZpbmUgREVCSV9BRCAgICAgICAgICAgMHg4OAorCisjZGVmaW5lIEkyQ19UUkFOU0ZFUiAgICAgIDB4OEMKKyNkZWZpbmUgSTJDX1NUQVRVUyAgICAgICAgMHg5MAorCisjZGVmaW5lIEJBU0VfQTFfSU4gICAgICAgIDB4OTQJLyogQXVkaW8gMSBpbnB1dCBETUEgKi8KKyNkZWZpbmUgUFJPVF9BMV9JTiAgICAgICAgMHg5OAorI2RlZmluZSBQQUdFX0ExX0lOICAgICAgICAweDlDCisKKyNkZWZpbmUgQkFTRV9BMV9PVVQgICAgICAgMHhBMCAgLyogQXVkaW8gMSBvdXRwdXQgRE1BICovCisjZGVmaW5lIFBST1RfQTFfT1VUICAgICAgIDB4QTQKKyNkZWZpbmUgUEFHRV9BMV9PVVQgICAgICAgMHhBOAorCisjZGVmaW5lIEJBU0VfQTJfSU4gICAgICAgIDB4QUMgIC8qIEF1ZGlvIDIgaW5wdXQgRE1BICovCisjZGVmaW5lIFBST1RfQTJfSU4gICAgICAgIDB4QjAKKyNkZWZpbmUgUEFHRV9BMl9JTiAgICAgICAgMHhCNAorCisjZGVmaW5lIEJBU0VfQTJfT1VUICAgICAgIDB4QjggIC8qIEF1ZGlvIDIgb3V0cHV0IERNQSAqLworI2RlZmluZSBQUk9UX0EyX09VVCAgICAgICAweEJDCisjZGVmaW5lIFBBR0VfQTJfT1VUICAgICAgIDB4QzAKKworI2RlZmluZSBSUFNfUEFHRTAgICAgICAgICAweEM0ICAvKiBSUFMgdGFzayAwIHBhZ2UgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUlBTX1BBR0UxICAgICAgICAgMHhDOCAgLyogUlBTIHRhc2sgMSBwYWdlIHJlZ2lzdGVyICovCisKKyNkZWZpbmUgUlBTX1RIUkVTSDAgICAgICAgMHhDQyAgLyogSEJJIHRocmVzaG9sZCBmb3IgdGFzayAwICovCisjZGVmaW5lIFJQU19USFJFU0gxICAgICAgIDB4RDAgIC8qIEhCSSB0aHJlc2hvbGQgZm9yIHRhc2sgMSAqLworCisjZGVmaW5lIFJQU19UT1YwICAgICAgICAgIDB4RDQgIC8qIFJQUyB0aW1lb3V0IGZvciB0YXNrIDAgKi8KKyNkZWZpbmUgUlBTX1RPVjEgICAgICAgICAgMHhEOCAgLyogUlBTIHRpbWVvdXQgZm9yIHRhc2sgMSAqLworCisjZGVmaW5lIElFUiAgICAgICAgICAgICAgIDB4REMgIC8qIEludGVycnVwdCBlbmFibGUgcmVnaXN0ZXIgKi8KKworI2RlZmluZSBHUElPX0NUUkwgICAgICAgICAweEUwICAvKiBHUElPIDAtMyByZWdpc3RlciAqLworCisjZGVmaW5lIEVDMVNTUiAgICAgICAgICAgIDB4RTQgIC8qIEV2ZW50IGNudCBzZXQgMSBzb3VyY2Ugc2VsZWN0ICovCisjZGVmaW5lIEVDMlNTUiAgICAgICAgICAgIDB4RTggIC8qIEV2ZW50IGNudCBzZXQgMiBzb3VyY2Ugc2VsZWN0ICovCisjZGVmaW5lIEVDVDFSICAgICAgICAgICAgIDB4RUMgIC8qIEV2ZW50IGNudCBzZXQgMSB0aHJlc2hvbGRzICovCisjZGVmaW5lIEVDVDJSICAgICAgICAgICAgIDB4RjAgIC8qIEV2ZW50IGNudCBzZXQgMiB0aHJlc2hvbGRzICovCisKKyNkZWZpbmUgQUNPTjEgICAgICAgICAgICAgMHhGNAorI2RlZmluZSBBQ09OMiAgICAgICAgICAgICAweEY4CisKKyNkZWZpbmUgTUMxICAgICAgICAgICAgICAgMHhGQyAgIC8qIE1haW4gY29udHJvbCByZWdpc3RlciAxICovCisjZGVmaW5lIE1DMiAgICAgICAgICAgICAgIDB4MTAwICAvKiBNYWluIGNvbnRyb2wgcmVnaXN0ZXIgMiAgKi8KKworI2RlZmluZSBSUFNfQUREUjAgICAgICAgICAweDEwNCAgLyogUlBTIHRhc2sgMCBhZGRyZXNzIHJlZ2lzdGVyICovCisjZGVmaW5lIFJQU19BRERSMSAgICAgICAgIDB4MTA4ICAvKiBSUFMgdGFzayAxIGFkZHJlc3MgcmVnaXN0ZXIgKi8KKworI2RlZmluZSBJU1IgICAgICAgICAgICAgICAweDEwQyAgLyogSW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBQU1IgICAgICAgICAgICAgICAweDExMCAgLyogUHJpbWFyeSBzdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1NSICAgICAgICAgICAgICAgMHgxMTQgIC8qIFNlY29uZGFyeSBzdGF0dXMgcmVnaXN0ZXIgKi8KKworI2RlZmluZSBFQzFSICAgICAgICAgICAgICAweDExOCAgLyogRXZlbnQgY291bnRlciBzZXQgMSByZWdpc3RlciAqLworI2RlZmluZSBFQzJSICAgICAgICAgICAgICAweDExQyAgLyogRXZlbnQgY291bnRlciBzZXQgMiByZWdpc3RlciAqLworCisjZGVmaW5lIFBDSV9WRFAxICAgICAgICAgIDB4MTIwICAvKiBWaWRlbyBETUEgcG9pbnRlciBvZiBGSUZPIDEgKi8KKyNkZWZpbmUgUENJX1ZEUDIgICAgICAgICAgMHgxMjQgIC8qIFZpZGVvIERNQSBwb2ludGVyIG9mIEZJRk8gMiAqLworI2RlZmluZSBQQ0lfVkRQMyAgICAgICAgICAweDEyOCAgLyogVmlkZW8gRE1BIHBvaW50ZXIgb2YgRklGTyAzICovCisjZGVmaW5lIFBDSV9BRFAxICAgICAgICAgIDB4MTJDICAvKiBBdWRpbyBETUEgcG9pbnRlciBvZiBhdWRpbyBvdXQgMSAqLworI2RlZmluZSBQQ0lfQURQMiAgICAgICAgICAweDEzMCAgLyogQXVkaW8gRE1BIHBvaW50ZXIgb2YgYXVkaW8gaW4gMSAqLworI2RlZmluZSBQQ0lfQURQMyAgICAgICAgICAweDEzNCAgLyogQXVkaW8gRE1BIHBvaW50ZXIgb2YgYXVkaW8gb3V0IDIgKi8KKyNkZWZpbmUgUENJX0FEUDQgICAgICAgICAgMHgxMzggIC8qIEF1ZGlvIERNQSBwb2ludGVyIG9mIGF1ZGlvIGluIDIgKi8KKyNkZWZpbmUgUENJX0RNQV9ERFAgICAgICAgMHgxM0MgIC8qIERFQkkgRE1BIHBvaW50ZXIgKi8KKworI2RlZmluZSBMRVZFTF9SRVAgICAgICAgICAweDE0MCwKKyNkZWZpbmUgQV9USU1FX1NMT1QxICAgICAgMHgxODAsICAvKiBmcm9tIDE4MCAtIDFCQyAqLworI2RlZmluZSBBX1RJTUVfU0xPVDIgICAgICAweDFDMCwgIC8qIGZyb20gMUMwIC0gMUZDICovCisKKy8qIGlzciBtYXNrcyAqLworI2RlZmluZSBTUENJX1BQRUYgICAgICAgMHg4MDAwMDAwMCAgLyogUENJIHBhcml0eSBlcnJvciAqLworI2RlZmluZSBTUENJX1BBQk8gICAgICAgMHg0MDAwMDAwMCAgLyogUENJIGFjY2VzcyBlcnJvciAodGFyZ2V0IG9yIG1hc3RlciBhYm9ydCkgKi8KKyNkZWZpbmUgU1BDSV9QUEVEICAgICAgIDB4MjAwMDAwMDAgIC8qIFBDSSBwYXJpdHkgZXJyb3Igb24gJ3JlYWwgdGltZSBkYXRhJyAqLworI2RlZmluZSBTUENJX1JQU19JMSAgICAgMHgxMDAwMDAwMCAgLyogSW50ZXJydXB0IGlzc3VlZCBieSBSUFMxICovCisjZGVmaW5lIFNQQ0lfUlBTX0kwICAgICAweDA4MDAwMDAwICAvKiBJbnRlcnJ1cHQgaXNzdWVkIGJ5IFJQUzAgKi8KKyNkZWZpbmUgU1BDSV9SUFNfTEFURTEgIDB4MDQwMDAwMDAgIC8qIFJQUyB0YXNrIDEgaXMgbGF0ZSAqLworI2RlZmluZSBTUENJX1JQU19MQVRFMCAgMHgwMjAwMDAwMCAgLyogUlBTIHRhc2sgMCBpcyBsYXRlICovCisjZGVmaW5lIFNQQ0lfUlBTX0UxICAgICAweDAxMDAwMDAwICAvKiBSUFMgZXJyb3IgZnJvbSB0YXNrIDEgKi8KKyNkZWZpbmUgU1BDSV9SUFNfRTAgICAgIDB4MDA4MDAwMDAgIC8qIFJQUyBlcnJvciBmcm9tIHRhc2sgMCAqLworI2RlZmluZSBTUENJX1JQU19UTzEgICAgMHgwMDQwMDAwMCAgLyogUlBTIHRpbWVvdXQgdGFzayAxICovCisjZGVmaW5lIFNQQ0lfUlBTX1RPMCAgICAweDAwMjAwMDAwICAvKiBSUFMgdGltZW91dCB0YXNrIDAgKi8KKyNkZWZpbmUgU1BDSV9VUExEICAgICAgIDB4MDAxMDAwMDAgIC8qIFJQUyBpbiB1cGxvYWQgKi8KKyNkZWZpbmUgU1BDSV9ERUJJX1MgICAgIDB4MDAwODAwMDAgIC8qIERFQkkgc3RhdHVzICovCisjZGVmaW5lIFNQQ0lfREVCSV9FICAgICAweDAwMDQwMDAwICAvKiBERUJJIGVycm9yICovCisjZGVmaW5lIFNQQ0lfSUlDX1MgICAgICAweDAwMDIwMDAwICAvKiBJMkMgc3RhdHVzICovCisjZGVmaW5lIFNQQ0lfSUlDX0UgICAgICAweDAwMDEwMDAwICAvKiBJMkMgZXJyb3IgKi8KKyNkZWZpbmUgU1BDSV9BMl9JTiAgICAgIDB4MDAwMDgwMDAgIC8qIEF1ZGlvIDIgaW5wdXQgRE1BIHByb3RlY3Rpb24gLyBsaW1pdCAqLworI2RlZmluZSBTUENJX0EyX09VVCAgICAgMHgwMDAwNDAwMCAgLyogQXVkaW8gMiBvdXRwdXQgRE1BIHByb3RlY3Rpb24gLyBsaW1pdCAqLworI2RlZmluZSBTUENJX0ExX0lOICAgICAgMHgwMDAwMjAwMCAgLyogQXVkaW8gMSBpbnB1dCBETUEgcHJvdGVjdGlvbiAvIGxpbWl0ICovCisjZGVmaW5lIFNQQ0lfQTFfT1VUICAgICAweDAwMDAxMDAwICAvKiBBdWRpbyAxIG91dHB1dCBETUEgcHJvdGVjdGlvbiAvIGxpbWl0ICovCisjZGVmaW5lIFNQQ0lfQUZPVSAgICAgICAweDAwMDAwODAwICAvKiBBdWRpbyBGSUZPIG92ZXItIC8gdW5kZXJmbG93ICovCisjZGVmaW5lIFNQQ0lfVl9QRSAgICAgICAweDAwMDAwNDAwICAvKiBWaWRlbyBwcm90ZWN0aW9uIGFkZHJlc3MgKi8KKyNkZWZpbmUgU1BDSV9WRk9VICAgICAgIDB4MDAwMDAyMDAgIC8qIFZpZGVvIEZJRk8gb3Zlci0gLyB1bmRlcmZsb3cgKi8KKyNkZWZpbmUgU1BDSV9GSURBICAgICAgIDB4MDAwMDAxMDAgIC8qIEZpZWxkIElEIHZpZGVvIHBvcnQgQSAqLworI2RlZmluZSBTUENJX0ZJREIgICAgICAgMHgwMDAwMDA4MCAgLyogRmllbGQgSUQgdmlkZW8gcG9ydCBCICovCisjZGVmaW5lIFNQQ0lfUElOMyAgICAgICAweDAwMDAwMDQwICAvKiBHUElPIHBpbiAzICovCisjZGVmaW5lIFNQQ0lfUElOMiAgICAgICAweDAwMDAwMDIwICAvKiBHUElPIHBpbiAyICovCisjZGVmaW5lIFNQQ0lfUElOMSAgICAgICAweDAwMDAwMDEwICAvKiBHUElPIHBpbiAxICovCisjZGVmaW5lIFNQQ0lfUElOMCAgICAgICAweDAwMDAwMDA4ICAvKiBHUElPIHBpbiAwICovCisjZGVmaW5lIFNQQ0lfRUNTICAgICAgICAweDAwMDAwMDA0ICAvKiBFdmVudCBjb3VudGVyIDEsIDIsIDQsIDUgKi8KKyNkZWZpbmUgU1BDSV9FQzNTICAgICAgIDB4MDAwMDAwMDIgIC8qIEV2ZW50IGNvdW50ZXIgMyAqLworI2RlZmluZSBTUENJX0VDMFMgICAgICAgMHgwMDAwMDAwMSAgLyogRXZlbnQgY291bnRlciAwICovCisKKy8qIGkyYyAqLworI2RlZmluZQlTQUE3MTQ2X0kyQ19BQk9SVAkoMTw8NykKKyNkZWZpbmUJU0FBNzE0Nl9JMkNfU1BFUlIJKDE8PDYpCisjZGVmaW5lCVNBQTcxNDZfSTJDX0FQRVJSCSgxPDw1KQorI2RlZmluZQlTQUE3MTQ2X0kyQ19EVEVSUgkoMTw8NCkKKyNkZWZpbmUJU0FBNzE0Nl9JMkNfRFJFUlIJKDE8PDMpCisjZGVmaW5lCVNBQTcxNDZfSTJDX0FMCQkoMTw8MikKKyNkZWZpbmUJU0FBNzE0Nl9JMkNfRVJSCQkoMTw8MSkKKyNkZWZpbmUJU0FBNzE0Nl9JMkNfQlVTWQkoMTw8MCkKKworI2RlZmluZQlTQUE3MTQ2X0kyQ19TVEFSVAkoMHgzKQorI2RlZmluZQlTQUE3MTQ2X0kyQ19DT05UCSgweDIpCisjZGVmaW5lCVNBQTcxNDZfSTJDX1NUT1AJKDB4MSkKKyNkZWZpbmUJU0FBNzE0Nl9JMkNfTk9QCQkoMHgwKQorCisjZGVmaW5lIFNBQTcxNDZfSTJDX0JVU19CSVRfUkFURV82NDAwCSgweDUwMCkKKyNkZWZpbmUgU0FBNzE0Nl9JMkNfQlVTX0JJVF9SQVRFXzMyMDAJKDB4MTAwKQorI2RlZmluZSBTQUE3MTQ2X0kyQ19CVVNfQklUX1JBVEVfNDgwCSgweDQwMCkKKyNkZWZpbmUgU0FBNzE0Nl9JMkNfQlVTX0JJVF9SQVRFXzMyMAkoMHg2MDApCisjZGVmaW5lIFNBQTcxNDZfSTJDX0JVU19CSVRfUkFURV8yNDAJKDB4NzAwKQorI2RlZmluZSBTQUE3MTQ2X0kyQ19CVVNfQklUX1JBVEVfMTIwCSgweDAwMCkKKyNkZWZpbmUgU0FBNzE0Nl9JMkNfQlVTX0JJVF9SQVRFXzgwCSgweDIwMCkKKyNkZWZpbmUgU0FBNzE0Nl9JMkNfQlVTX0JJVF9SQVRFXzYwCSgweDMwMCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3NhYTcxNDZfdnYuaCBiL2luY2x1ZGUvbWVkaWEvc2FhNzE0Nl92di5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzYWEyNGYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL21lZGlhL3NhYTcxNDZfdnYuaApAQCAtMCwwICsxLDI3MCBAQAorI2lmbmRlZiBfX1NBQTcxNDZfVlZfXworI2RlZmluZSBfX1NBQTcxNDZfVlZfXworCisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisKKyNpbmNsdWRlIDxtZWRpYS9zYWE3MTQ2Lmg+CisjaW5jbHVkZSA8bWVkaWEvdmlkZW8tYnVmLmg+CisKKyNkZWZpbmUgTUFYX1NBQTcxNDZfQ0FQVFVSRV9CVUZGRVJTCTMyCS8qIGFyYml0cmFyeSAqLworI2RlZmluZSBCVUZGRVJfVElNRU9VVCAgICAgKEhaLzIpICAvKiAwLjUgc2Vjb25kcyAqLworCisjZGVmaW5lIFdSSVRFX1JQUzAoeCkgZG8geyBcCisJZGV2LT5kX3JwczAuY3B1X2FkZHJbIGNvdW50KysgXSA9IGNwdV90b19sZTMyKHgpOyBcCisJfSB3aGlsZSAoMCk7CisKKyNkZWZpbmUgV1JJVEVfUlBTMSh4KSBkbyB7IFwKKwlkZXYtPmRfcnBzMS5jcHVfYWRkclsgY291bnQrKyBdID0gY3B1X3RvX2xlMzIoeCk7IFwKKwl9IHdoaWxlICgwKTsKKworc3RydWN0CXNhYTcxNDZfdmlkZW9fZG1hIHsKKwl1MzIgYmFzZV9vZGQ7CisJdTMyIGJhc2VfZXZlbjsKKwl1MzIgcHJvdF9hZGRyOworCXUzMiBwaXRjaDsKKwl1MzIgYmFzZV9wYWdlOworCXUzMiBudW1fbGluZV9ieXRlOworfTsKKworI2RlZmluZSBGT1JNQVRfQllURV9TV0FQCTB4MQorI2RlZmluZSBGT1JNQVRfSVNfUExBTkFSCTB4MgorCitzdHJ1Y3Qgc2FhNzE0Nl9mb3JtYXQgeworCWNoYXIJKm5hbWU7CisJdTMyCXBpeGVsZm9ybWF0OworCXUzMgl0cmFuczsKKwl1OAlkZXB0aDsKKwl1OAlmbGFnczsKKwl1OAlzd2FwOworfTsKKworc3RydWN0IHNhYTcxNDZfc3RhbmRhcmQKK3sKKwljaGFyICAgICAgICAgICpuYW1lOworCXY0bDJfc3RkX2lkICAgaWQ7CisKKwlpbnQgdl9vZmZzZXQ7CS8qIG51bWJlciBvZiBsaW5lcyBvZiB2ZXJ0aWNhbCBvZmZzZXQgYmVmb3JlIHByb2Nlc3NpbmcgKi8KKwlpbnQgdl9maWVsZDsJLyogbnVtYmVyIG9mIGxpbmVzIGluIGEgZmllbGQgZm9yIEhQUyB0byBwcm9jZXNzICovCisKKwlpbnQgaF9vZmZzZXQ7CS8qIGhvcml6b250YWwgb2Zmc2V0IG9mIHByb2Nlc3Npbmcgd2luZG93ICovCisJaW50IGhfcGl4ZWxzOwkvKiBudW1iZXIgb2YgaG9yaXpvbnRhbCBwaXhlbHMgdG8gcHJvY2VzcyAqLworCisJaW50IHZfbWF4X291dDsKKwlpbnQgaF9tYXhfb3V0OworfTsKKworLyogYnVmZmVyIGZvciBvbmUgdmlkZW8vdmJpIGZyYW1lICovCitzdHJ1Y3Qgc2FhNzE0Nl9idWYgeworCS8qIGNvbW1vbiB2NGwgYnVmZmVyIHN0dWZmIC0tIG11c3QgYmUgZmlyc3QgKi8KKwlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyIHZiOworCisJLyogc2FhNzE0NiBzcGVjaWZpYyAqLworCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgICpmbXQ7CisJaW50ICgqYWN0aXZhdGUpKHN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2LAorCQkJc3RydWN0IHNhYTcxNDZfYnVmICpidWYsCisJCQlzdHJ1Y3Qgc2FhNzE0Nl9idWYgKm5leHQpOworCisJLyogcGFnZSB0YWJsZXMgKi8KKwlzdHJ1Y3Qgc2FhNzE0Nl9wZ3RhYmxlICBwdFszXTsKK307CisKK3N0cnVjdCBzYWE3MTQ2X2RtYXF1ZXVlIHsKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYJKmRldjsKKwlzdHJ1Y3Qgc2FhNzE0Nl9idWYJKmN1cnI7CisJc3RydWN0IGxpc3RfaGVhZAlxdWV1ZTsKKwlzdHJ1Y3QgdGltZXJfbGlzdAl0aW1lb3V0OworfTsKKworc3RydWN0IHNhYTcxNDZfb3ZlcmxheSB7CisJc3RydWN0IHNhYTcxNDZfZmgJKmZoOworCXN0cnVjdCB2NGwyX3dpbmRvdwl3aW47CisJc3RydWN0IHY0bDJfY2xpcAljbGlwc1sxNl07CisJaW50CQkJbmNsaXBzOworfTsKKworLyogcGVyIG9wZW4gZGF0YSAqLworc3RydWN0IHNhYTcxNDZfZmggeworCXN0cnVjdCBzYWE3MTQ2X2RldgkqZGV2OworCS8qIGlmIHRoaXMgaXMgYSB2Ymkgb3IgY2FwdHVyZSBvcGVuICovCisJZW51bSB2NGwyX2J1Zl90eXBlCXR5cGU7CisKKwkvKiB2aWRlbyBvdmVybGF5ICovCisJc3RydWN0IHNhYTcxNDZfb3ZlcmxheQlvdjsKKworCS8qIHZpZGVvIGNhcHR1cmUgKi8KKwlzdHJ1Y3QgdmlkZW9idWZfcXVldWUJdmlkZW9fcTsKKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0CXZpZGVvX2ZtdDsKKworCS8qIHZiaSBjYXB0dXJlICovCisJc3RydWN0IHZpZGVvYnVmX3F1ZXVlCXZiaV9xOworCXN0cnVjdCB2NGwyX3ZiaV9mb3JtYXQJdmJpX2ZtdDsKKwlzdHJ1Y3QgdGltZXJfbGlzdAl2YmlfcmVhZF90aW1lb3V0OworCisJdW5zaWduZWQgaW50IHJlc291cmNlczsJLyogcmVzb3VyY2UgbWFuYWdlbWVudCBmb3IgZGV2aWNlIG9wZW4gKi8KK307CisKKyNkZWZpbmUgU1RBVFVTX09WRVJMQVkJMHgwMQorI2RlZmluZSBTVEFUVVNfQ0FQVFVSRQkweDAyCisKK3N0cnVjdCBzYWE3MTQ2X3Z2Cit7CisJaW50IHZiaV9taW5vcjsKKworCS8qIHZiaSBjYXB0dXJlICovCisJc3RydWN0IHNhYTcxNDZfZG1hcXVldWUJCXZiaV9xOworCS8qIHZiaSB3b3JrYXJvdW5kIGludGVycnVwdCBxdWV1ZSAqLworICAgICAgICB3YWl0X3F1ZXVlX2hlYWRfdAkJdmJpX3dxOworCWludAkJCQl2YmlfZmllbGRjb3VudDsKKwlzdHJ1Y3Qgc2FhNzE0Nl9maAkJKnZiaV9zdHJlYW1pbmc7CisKKwlpbnQgdmlkZW9fbWlub3I7CisKKwlpbnQJCQkJdmlkZW9fc3RhdHVzOworCXN0cnVjdCBzYWE3MTQ2X2ZoCQkqdmlkZW9fZmg7CisKKwkvKiB2aWRlbyBvdmVybGF5ICovCisJc3RydWN0IHY0bDJfZnJhbWVidWZmZXIJCW92X2ZiOworCXN0cnVjdCBzYWE3MTQ2X2Zvcm1hdAkJKm92X2ZtdDsKKwlzdHJ1Y3Qgc2FhNzE0Nl9vdmVybGF5CQkqb3ZfZGF0YTsKKwlzdHJ1Y3Qgc2FhNzE0Nl9maAkJKm92X3N1c3BlbmQ7CisKKwkvKiB2aWRlbyBjYXB0dXJlICovCisJc3RydWN0IHNhYTcxNDZfZG1hcXVldWUJCXZpZGVvX3E7CisJZW51bSB2NGwyX2ZpZWxkCQkJbGFzdF9maWVsZDsKKworCS8qIGNvbW1vbjogZml4bWU/IHNob3VsZG4ndCB0aGlzIGJlIGluIHNhYTcxNDZfZmg/CisJICAgKHRoaXMgbGVhZHMgdG8gYSBtb3JlIGNvbXBsaWNhdGVkIHF1ZXN0aW9uOiBzaGFsbCB0aGUgZHJpdmVyCisJICAgc3RvcmUgdGhlIGRpZmZlcmVudCBzZXR0aW5ncyAoZm9yIGV4YW1wbGUgU19JTlBVVCkgZm9yIGV2ZXJ5IG9wZW4KKwkgICBhbmQgcmVzdG9yZSBpdCBhcHByb3ByaWF0ZWx5LCBvciBzaG91bGQgYWxsIHNldHRpbmdzIGJlIGNvbW1vbiBmb3IKKwkgICBhbGwgb3BlbnM/IGN1cnJlbnRseSwgd2UgZG8gdGhlIGxhdHRlciwgbGlrZSBhbGwgb3RoZXIKKwkgICBkcml2ZXJzIGRvLi4uICovCisJc3RydWN0IHNhYTcxNDZfc3RhbmRhcmQJKnN0YW5kYXJkOworCisJaW50CXZmbGlwOworCWludAloZmxpcDsKKwlpbnQJY3VycmVudF9ocHNfc291cmNlOworCWludAljdXJyZW50X2hwc19zeW5jOworCisJc3RydWN0IHNhYTcxNDZfZG1hCWRfY2xpcHBpbmc7CS8qIHBvaW50ZXIgdG8gY2xpcHBpbmcgbWVtb3J5ICovCisKKwl1bnNpZ25lZCBpbnQgcmVzb3VyY2VzOwkvKiByZXNvdXJjZSBtYW5hZ2VtZW50IGZvciBkZXZpY2UgKi8KK307CisKKyNkZWZpbmUgU0FBNzE0Nl9FWENMVVNJVkUJMHgxCisjZGVmaW5lIFNBQTcxNDZfQkVGT1JFCQkweDIKKyNkZWZpbmUgU0FBNzE0Nl9BRlRFUgkJMHg0CisKK3N0cnVjdCBzYWE3MTQ2X2V4dGVuc2lvbl9pb2N0bHMKK3sKKwl1bnNpZ25lZCBpbnQJY21kOworCWludAkJZmxhZ3M7Cit9OworCisvKiBmbGFncyAqLworI2RlZmluZSBTQUE3MTQ2X1VTRV9QT1JUX0JfRk9SX1ZCSQkweDIgICAgIC8qIHVzZSBpbnB1dCBwb3J0IGIgZm9yIHZiaSBoYXJkd2FyZSBidWcgd29ya2Fyb3VuZCAqLworCitzdHJ1Y3Qgc2FhNzE0Nl9leHRfdnYKK3sKKwkvKiBpbmZvcm1hdGlvbnMgYWJvdXQgdGhlIHZpZGVvIGNhcGFiaWxpdGllcyBvZiB0aGUgZGV2aWNlICovCisJaW50CWlucHV0czsKKwlpbnQJYXVkaW9zOworCXUzMgljYXBhYmlsaXRpZXM7CisJaW50CWZsYWdzOworCisJLyogYWRkaXRpb25hbGx5IHN1cHBvcnRlZCB0cmFuc21pc3Npb24gc3RhbmRhcmRzICovCisJc3RydWN0IHNhYTcxNDZfc3RhbmRhcmQgKnN0ZHM7CisJaW50IG51bV9zdGRzOworCWludCAoKnN0ZF9jYWxsYmFjaykoc3RydWN0IHNhYTcxNDZfZGV2Kiwgc3RydWN0IHNhYTcxNDZfc3RhbmRhcmQgKik7CisKKwlzdHJ1Y3Qgc2FhNzE0Nl9leHRlbnNpb25faW9jdGxzICppb2N0bHM7CisJaW50ICgqaW9jdGwpKHN0cnVjdCBzYWE3MTQ2X2ZoKiwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKTsKK307CisKK3N0cnVjdCBzYWE3MTQ2X3VzZV9vcHMgIHsKKyAgICAgICAgdm9pZCAoKmluaXQpKHN0cnVjdCBzYWE3MTQ2X2RldiAqLCBzdHJ1Y3Qgc2FhNzE0Nl92diAqKTsKKyAgICAgICAgaW50KCpvcGVuKShzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKiwgc3RydWN0IGZpbGUgKik7CisgICAgICAgIHZvaWQgKCpyZWxlYXNlKShzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKiwgc3RydWN0IGZpbGUgKik7CisgICAgICAgIHZvaWQgKCppcnFfZG9uZSkoc3RydWN0IHNhYTcxNDZfZGV2ICosIHVuc2lnbmVkIGxvbmcgc3RhdHVzKTsKKwlzc2l6ZV90ICgqcmVhZCkoc3RydWN0IGZpbGUgKiwgY2hhciBfX3VzZXIgKiwgc2l6ZV90LCBsb2ZmX3QgKik7Cit9OworCisvKiBmcm9tIHNhYTcxNDZfZm9wcy5jICovCitpbnQgc2FhNzE0Nl9yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IHZpZGVvX2RldmljZSAqKnZpZCwgc3RydWN0IHNhYTcxNDZfZGV2KiBkZXYsIGNoYXIgKm5hbWUsIGludCB0eXBlKTsKK2ludCBzYWE3MTQ2X3VucmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCB2aWRlb19kZXZpY2UgKip2aWQsIHN0cnVjdCBzYWE3MTQ2X2RldiogZGV2KTsKK3ZvaWQgc2FhNzE0Nl9idWZmZXJfZmluaXNoKHN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2LCBzdHJ1Y3Qgc2FhNzE0Nl9kbWFxdWV1ZSAqcSwgaW50IHN0YXRlKTsKK3ZvaWQgc2FhNzE0Nl9idWZmZXJfbmV4dChzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiwgc3RydWN0IHNhYTcxNDZfZG1hcXVldWUgKnEsaW50IHZiaSk7CitpbnQgc2FhNzE0Nl9idWZmZXJfcXVldWUoc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYsIHN0cnVjdCBzYWE3MTQ2X2RtYXF1ZXVlICpxLCBzdHJ1Y3Qgc2FhNzE0Nl9idWYgKmJ1Zik7Cit2b2lkIHNhYTcxNDZfYnVmZmVyX3RpbWVvdXQodW5zaWduZWQgbG9uZyBkYXRhKTsKK3ZvaWQgc2FhNzE0Nl9kbWFfZnJlZShzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldixzdHJ1Y3Qgc2FhNzE0Nl9idWYgKmJ1Zik7CisKK2ludCBzYWE3MTQ2X3Z2X2luaXQoc3RydWN0IHNhYTcxNDZfZGV2KiBkZXYsIHN0cnVjdCBzYWE3MTQ2X2V4dF92diAqZXh0X3Z2KTsKK2ludCBzYWE3MTQ2X3Z2X3JlbGVhc2Uoc3RydWN0IHNhYTcxNDZfZGV2KiBkZXYpOworCisvKiBmcm9tIHNhYTcxNDZfaGxwLmMgKi8KK2ludCBzYWE3MTQ2X2VuYWJsZV9vdmVybGF5KHN0cnVjdCBzYWE3MTQ2X2ZoICpmaCk7Cit2b2lkIHNhYTcxNDZfZGlzYWJsZV9vdmVybGF5KHN0cnVjdCBzYWE3MTQ2X2ZoICpmaCk7CisKK3ZvaWQgc2FhNzE0Nl9zZXRfY2FwdHVyZShzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiwgc3RydWN0IHNhYTcxNDZfYnVmICpidWYsIHN0cnVjdCBzYWE3MTQ2X2J1ZiAqbmV4dCk7Cit2b2lkIHNhYTcxNDZfd3JpdGVfb3V0X2RtYShzdHJ1Y3Qgc2FhNzE0Nl9kZXYqIGRldiwgaW50IHdoaWNoLCBzdHJ1Y3Qgc2FhNzE0Nl92aWRlb19kbWEqIHZkbWEpIDsKK3ZvaWQgc2FhNzE0Nl9zZXRfaHBzX3NvdXJjZV9hbmRfc3luYyhzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKnNhYSwgaW50IHNvdXJjZSwgaW50IHN5bmMpOwordm9pZCBzYWE3MTQ2X3NldF9ncGlvKHN0cnVjdCBzYWE3MTQ2X2RldiAqc2FhLCB1OCBwaW4sIHU4IGRhdGEpOworCisvKiBmcm9tIHNhYTcxNDZfdmlkZW8uYyAqLworZXh0ZXJuIHN0cnVjdCBzYWE3MTQ2X3VzZV9vcHMgc2FhNzE0Nl92aWRlb191b3BzOworaW50IHNhYTcxNDZfc3RhcnRfcHJldmlldyhzdHJ1Y3Qgc2FhNzE0Nl9maCAqZmgpOworaW50IHNhYTcxNDZfc3RvcF9wcmV2aWV3KHN0cnVjdCBzYWE3MTQ2X2ZoICpmaCk7CisKKy8qIGZyb20gc2FhNzE0Nl92YmkuYyAqLworZXh0ZXJuIHN0cnVjdCBzYWE3MTQ2X3VzZV9vcHMgc2FhNzE0Nl92YmlfdW9wczsKKworLyogcmVzb3VyY2UgbWFuYWdlbWVudCBmdW5jdGlvbnMgKi8KK2ludCBzYWE3MTQ2X3Jlc19nZXQoc3RydWN0IHNhYTcxNDZfZmggKmZoLCB1bnNpZ25lZCBpbnQgYml0KTsKK3ZvaWQgc2FhNzE0Nl9yZXNfZnJlZShzdHJ1Y3Qgc2FhNzE0Nl9maCAqZmgsIHVuc2lnbmVkIGludCBiaXRzKTsKKworI2RlZmluZSBSRVNPVVJDRV9ETUExX0hQUwkweDEKKyNkZWZpbmUgUkVTT1VSQ0VfRE1BMl9DTFAJMHgyCisjZGVmaW5lIFJFU09VUkNFX0RNQTNfQlJTCTB4NAorCisvKiBzYWE3MTQ2IHNvdXJjZSBpbnB1dHMgKi8KKyNkZWZpbmUgU0FBNzE0Nl9IUFNfU09VUkNFX1BPUlRfQQkweDAwCisjZGVmaW5lIFNBQTcxNDZfSFBTX1NPVVJDRV9QT1JUX0IJMHgwMQorI2RlZmluZSBTQUE3MTQ2X0hQU19TT1VSQ0VfWVBCX0NQQQkweDAyCisjZGVmaW5lIFNBQTcxNDZfSFBTX1NPVVJDRV9ZUEFfQ1BCCTB4MDMKKworLyogc3luYyBpbnB1dHMgKi8KKyNkZWZpbmUgU0FBNzE0Nl9IUFNfU1lOQ19QT1JUX0EJCTB4MDAKKyNkZWZpbmUgU0FBNzE0Nl9IUFNfU1lOQ19QT1JUX0IJCTB4MDEKKworLyogc29tZSBtZW1vcnkgc2l6ZXMgKi8KKyNkZWZpbmUgU0FBNzE0Nl9DTElQUElOR19NRU0JKDE0KlBBR0VfU0laRSkKKworLyogc29tZSBkZWZpbmVzIGZvciB0aGUgdmFyaW91cyBjbGlwcGluZy1tb2RlcyAqLworI2RlZmluZSBTQUE3MTQ2X0NMSVBQSU5HX1JFQ1QJCTB4NAorI2RlZmluZSBTQUE3MTQ2X0NMSVBQSU5HX1JFQ1RfSU5WRVJURUQJMHg1CisjZGVmaW5lIFNBQTcxNDZfQ0xJUFBJTkdfTUFTSwkJMHg2CisjZGVmaW5lIFNBQTcxNDZfQ0xJUFBJTkdfTUFTS19JTlZFUlRFRAkweDcKKworLyogb3V0cHV0IGZvcm1hdHM6IGVhY2ggZW50cnkgaG9sZHMgZm91ciBpbmZvcm1hdGlvbnMgKi8KKyNkZWZpbmUgUkdCMDhfQ09NUE9TRUQJMHgwMjE3IC8qIGNvbXBvc2VkIGlzIHVzZWQgaW4gdGhlIHNlbnNlIG9mICJub3QtcGxhbmFyIiAqLworLyogdGhpcyBtZWFuczogcGxhbmFyPz0wLCB5dXYycmdiLWNvbnZlcnNhdGlvbi1tb2RlPTIsIGRpdGhlcj15ZXMoPTEpLCBmb3JtYXQtbW9kZSA9IDcgKi8KKyNkZWZpbmUgUkdCMTVfQ09NUE9TRUQJMHgwMjEzCisjZGVmaW5lIFJHQjE2X0NPTVBPU0VECTB4MDIxMAorI2RlZmluZSBSR0IyNF9DT01QT1NFRAkweDAyMDEKKyNkZWZpbmUgUkdCMzJfQ09NUE9TRUQJMHgwMjAyCisKKyNkZWZpbmUgWTgJCQkweDAwMDYKKyNkZWZpbmUgWVVWNDExX0NPTVBPU0VECQkweDAwMDMKKyNkZWZpbmUgWVVWNDIyX0NPTVBPU0VECQkweDAwMDAKKy8qIHRoaXMgbWVhbnM6IHBsYW5hcj89MSwgeXV2MnJnYi1jb252ZXJzaW9uLW1vZGU9MCwgZGl0aGVyPW5vKD0wKSwgZm9ybWF0LW1vZGUgPSBiICovCisjZGVmaW5lIFlVVjQxMV9ERUNPTVBPU0VECTB4MTAwYgorI2RlZmluZSBZVVY0MjJfREVDT01QT1NFRAkweDEwMDkKKyNkZWZpbmUgWVVWNDIwX0RFQ09NUE9TRUQJMHgxMDBhCisKKyNkZWZpbmUgSVNfUExBTkFSKHgpICh4ICYgMHhmMDAwKQorCisvKiBtaXNjIGRlZmluZXMgKi8KKyNkZWZpbmUgU0FBNzE0Nl9OT19TV0FQCQkoMHgwKQorI2RlZmluZSBTQUE3MTQ2X1RXT19CWVRFX1NXQVAJKDB4MSkKKyNkZWZpbmUgU0FBNzE0Nl9GT1VSX0JZVEVfU1dBUAkoMHgyKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdHVuZXIuaCBiL2luY2x1ZGUvbWVkaWEvdHVuZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTZhOWM1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9tZWRpYS90dW5lci5oCkBAIC0wLDAgKzEsMTk5IEBACisKKy8qCisgICAgdHVuZXIuaCAtIGRlZmluaXRpb24gZm9yIGRpZmZlcmVudCB0dW5lcnMKKworICAgIENvcHlyaWdodCAoQykgMTk5NyBNYXJrdXMgU2Nocm9lZGVyIChzY2hyb2VkbUB1bmktZHVlc3NlbGRvcmYuZGUpCisgICAgbWlub3IgbW9kaWZpY2F0aW9ucyBieSBSYWxwaCBNZXR6bGVyIChyamttQHRocC51bmkta29lbG4uZGUpCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyovCisKKyNpZm5kZWYgX1RVTkVSX0gKKyNkZWZpbmUgX1RVTkVSX0gKKworI2luY2x1ZGUgImlkLmgiCisKKyNkZWZpbmUgVFVORVJfVEVNSUNfUEFMICAgICAwICAgICAgICAvKiA0MDAyIEZINSAoM1ggNzc1NiwgOTQ4MykgKi8KKyNkZWZpbmUgVFVORVJfUEhJTElQU19QQUxfSSAxCisjZGVmaW5lIFRVTkVSX1BISUxJUFNfTlRTQyAgMgorI2RlZmluZSBUVU5FUl9QSElMSVBTX1NFQ0FNIDMJCS8qIHlvdSBtdXN0IGFjdGl2ZWx5IHNlbGVjdCBCL0csIEwsIExgICovCisKKyNkZWZpbmUgVFVORVJfQUJTRU5UICAgICAgICA0CisjZGVmaW5lIFRVTkVSX1BISUxJUFNfUEFMICAgNQorI2RlZmluZSBUVU5FUl9URU1JQ19OVFNDICAgIDYgICAgICAgIC8qIDQwMzIgRlk1ICgzWCA3MDA0LCA5NDk4LCA5Nzg5KSAgKi8KKyNkZWZpbmUgVFVORVJfVEVNSUNfUEFMX0kgICA3ICAgICAgICAvKiA0MDYyIEZZNSAoM1ggODUwMSwgOTk1NykgICAgICAgICovCisKKyNkZWZpbmUgVFVORVJfVEVNSUNfNDAzNkZZNV9OVFNDIDggICAvKiA0MDM2IEZZNSAoM1ggMTIyMywgMTk4MSwgNzY4NikgICovCisjZGVmaW5lIFRVTkVSX0FMUFNfVFNCSDFfTlRTQyAJIDkKKyNkZWZpbmUgVFVORVJfQUxQU19UU0JFMV9QQUwgCTEwCisjZGVmaW5lIFRVTkVSX0FMUFNfVFNCQjVfUEFMX0kgCTExCisKKyNkZWZpbmUgVFVORVJfQUxQU19UU0JFNV9QQUwgCTEyCisjZGVmaW5lIFRVTkVSX0FMUFNfVFNCQzVfUEFMIAkxMworI2RlZmluZSBUVU5FUl9URU1JQ180MDA2Rkg1X1BBTAkxNCAgIC8qIDQwMDYgRkg1ICgzWCA5NTAwLCA5NTAxLCA3MjkxKSAgICAgKi8KKyNkZWZpbmUgVFVORVJfQUxQU19UU0hDNl9OVFNDIAkxNQorCisjZGVmaW5lIFRVTkVSX1RFTUlDX1BBTF9ESwkxNiAgIC8qIDQwMTYgRlk1ICgzWCAxMzkyLCAxMzkzKSAgICAgKi8KKyNkZWZpbmUgVFVORVJfUEhJTElQU19OVFNDX00JMTcKKyNkZWZpbmUgVFVORVJfVEVNSUNfNDA2NkZZNV9QQUxfSSAgICAgICAxOCAgLyogNDA2NiBGWTUgKDNYIDcwMzIsIDcwMzUpICovCisjZGVmaW5lIFRVTkVSX1RFTUlDXzQwMDZGTjVfTVVMVElfUEFMICAgMTkgIC8qIEIvRywgSSBhbmQgRC9LIGF1dG9kZXRlY3RlZCAoM1ggNzU5NSwgNzYwNiwgNzY1NykqLworCisjZGVmaW5lIFRVTkVSX1RFTUlDXzQwMDlGUjVfUEFMICAgICAgICAgMjAgIC8qIGluY2wuIEZNIHJhZGlvICgzWCA3NjA3LCA3NDg4LCA3NzExKSovCisjZGVmaW5lIFRVTkVSX1RFTUlDXzQwMzlGUjVfTlRTQyAgICAgICAgMjEgIC8qIGluY2wuIEZNIHJhZGlvICgzWCA3MjQ2LCA3NTc4LCA3NzMyKSovCisjZGVmaW5lIFRVTkVSX1RFTUlDXzQwNDZGTTUgICAgICAgICAgICAgMjIgIC8qIHlvdSBtdXN0IGFjdGl2ZWx5IHNlbGVjdCBCL0csIEQvSywgSSwgTCwgTGAgISAgKDNYIDc4MDQsIDc4MDYsIDgxMDMsIDgxMDQpKi8KKyNkZWZpbmUgVFVORVJfUEhJTElQU19QQUxfREsJCTIzCisKKyNkZWZpbmUgVFVORVJfUEhJTElQU19GUTEyMTZNRQkJMjQgIC8qIHlvdSBtdXN0IGFjdGl2ZWx5IHNlbGVjdCBCL0cvRC9LLCBJLCBMLCBMYCAqLworI2RlZmluZSBUVU5FUl9MR19QQUxfSV9GTQkyNQorI2RlZmluZSBUVU5FUl9MR19QQUxfSQkJMjYKKyNkZWZpbmUgVFVORVJfTEdfTlRTQ19GTQkyNworCisjZGVmaW5lIFRVTkVSX0xHX1BBTF9GTQkJMjgKKyNkZWZpbmUgVFVORVJfTEdfUEFMCQkyOQorI2RlZmluZSBUVU5FUl9URU1JQ180MDA5Rk41X01VTFRJX1BBTF9GTQkzMCAgLyogQi9HLCBJIGFuZCBEL0sgYXV0b2RldGVjdGVkICgzWCA4MTU1LCA4MTYwLCA4MTYzKSovCisjZGVmaW5lIFRVTkVSX1NIQVJQXzJVNUpGNTU0MF9OVFNDICAzMQorCisjZGVmaW5lIFRVTkVSX1NhbXN1bmdfUEFMX1RDUE05MDkxUEQyNyAzMgorI2RlZmluZSBUVU5FUl9NVDIwMzIgMzMKKyNkZWZpbmUgVFVORVJfVEVNSUNfNDEwNkZINSAJMzQJLyogNDEwNiBGSDUgKDNYIDc4MDgsIDc4NjUpKi8KKyNkZWZpbmUgVFVORVJfVEVNSUNfNDAxMkZZNQkzNQkvKiA0MDEyIEZZNSAoM1ggMDk3MSwgMTA5OSkqLworCisjZGVmaW5lIFRVTkVSX1RFTUlDXzQxMzZGWTUJMzYJLyogNDEzNiBGWTUgKDNYIDc3MDgsIDc3NDYpKi8KKyNkZWZpbmUgVFVORVJfTEdfUEFMX05FV19UQVBDICAgMzcKKyNkZWZpbmUgVFVORVJfUEhJTElQU19GTTEyMTZNRV9NSzMgIDM4CisjZGVmaW5lIFRVTkVSX0xHX05UU0NfTkVXX1RBUEMgICAzOQorCisjZGVmaW5lIFRVTkVSX0hJVEFDSElfTlRTQyAgICAgICA0MAorI2RlZmluZSBUVU5FUl9QSElMSVBTX1BBTF9NSyAgICAgNDEKKyNkZWZpbmUgVFVORVJfUEhJTElQU19BVFNDICAgICAgIDQyCisjZGVmaW5lIFRVTkVSX1BISUxJUFNfRk0xMjM2X01LMyA0MworCisjZGVmaW5lIFRVTkVSX1BISUxJUFNfNElOMSAgICAgICA0NAkvKiBBVEkgVFYgV29uZGVyIFBybyAtIENvbmV4YW50ICovCisvKiBNaWNyb3R1bmUgbWVyZ2VnZWQgd2l0aCBUZW1pYyAxMi8zMS8xOTk5IHBhcnRpYWxseSBmaW5hbmNlZCBieSBBbHBzIC0gdGhlc2UgbWF5IGJlIHNpbWlsYXIgdG8gVGVtaWMgKi8KKyNkZWZpbmUgVFVORVJfTUlDUk9UVU5FXzQwNDlGTTUgIDQ1CisjZGVmaW5lIFRVTkVSX0xHX05UU0NfVEFQRSAgICAgICA0NworCisjZGVmaW5lIFRVTkVSX1RORl84ODMxQkdGRiAgICAgICA0OAorI2RlZmluZSBUVU5FUl9NSUNST1RVTkVfNDA0MkZJNSAgNDkJLyogRnVzaW9uSERUViAzIEdvbGQgLSA0MDQyIEZJNSAoM1ggODE0NykgKi8KKyNkZWZpbmUgVFVORVJfVENMXzIwMDJOICAgICAgICAgIDUwCisjZGVmaW5lIFRVTkVSX1BISUxJUFNfRk0xMjU2X0lIMyAgIDUxCisKKyNkZWZpbmUgVFVORVJfVEhPTVNPTl9EVFQ3NjEwICAgIDUyCisjZGVmaW5lIFRVTkVSX1BISUxJUFNfRlExMjg2ICAgICA1MworI2RlZmluZSBUVU5FUl9QSElMSVBTX1REQTgyOTAgICAgNTQKKyNkZWZpbmUgVFVORVJfTEdfUEFMX1RBUEUgICAgICAgIDU1ICAgIC8qIEhhdXBwYXVnZSBQVlItMTUwIFBBTCAqLworCisjZGVmaW5lIFRVTkVSX1BISUxJUFNfRlExMjE2QU1FX01LNCA1NiAvKiBIYXVwcGF1Z2UgUFZSLTE1MCBQQUwgKi8KKyNkZWZpbmUgVFVORVJfUEhJTElQU19GUTEyMzZBX01LNCA1NyAgIC8qIEhhdXBwYXVnZSBQVlItNTAwTUNFIE5UU0MgKi8KKworI2RlZmluZSBOT1RVTkVSIDAKKyNkZWZpbmUgUEFMICAgICAxCS8qIFBBTF9CRyAqLworI2RlZmluZSBQQUxfSSAgIDIKKyNkZWZpbmUgTlRTQyAgICAzCisjZGVmaW5lIFNFQ0FNICAgNAorI2RlZmluZSBBVFNDICAgIDUKKworI2RlZmluZSBOb1R1bmVyIDAKKyNkZWZpbmUgUGhpbGlwcyAxCisjZGVmaW5lIFRFTUlDICAgMgorI2RlZmluZSBTb255ICAgIDMKKyNkZWZpbmUgQWxwcyAgICA0CisjZGVmaW5lIExHSU5OT1RFSyA1CisjZGVmaW5lIFNIQVJQICAgNgorI2RlZmluZSBTYW1zdW5nIDcKKyNkZWZpbmUgTWljcm90dW5lIDgKKyNkZWZpbmUgSElUQUNISSA5CisjZGVmaW5lIFBhbmFzb25pYyAxMAorI2RlZmluZSBUQ0wgICAgIDExCisjZGVmaW5lIFRIT01TT04gMTIKKworI2RlZmluZSBUVU5FUl9TRVRfVFlQRSAgICAgICAgICAgICAgIF9JT1coJ3QnLDEsaW50KSAgICAvKiBzZXQgdHVuZXIgdHlwZSAqLworI2RlZmluZSBUVU5FUl9TRVRfVFZGUkVRICAgICAgICAgICAgIF9JT1coJ3QnLDIsaW50KSAgICAvKiBzZXQgdHYgZnJlcSAqLworCisjZGVmaW5lICBUREE5ODg3X1NFVF9DT05GSUcgICAgICAgICAgX0lPVygndCcsNSxpbnQpCisvKiB0diBjYXJkIHNwZWNpZmljICovCisjIGRlZmluZSBUREE5ODg3X1BSRVNFTlQgICAgICAgICAgICAgKDE8PDApCisjIGRlZmluZSBUREE5ODg3X1BPUlQxX0lOQUNUSVZFICAgICAgKDE8PDEpCisjIGRlZmluZSBUREE5ODg3X1BPUlQyX0lOQUNUSVZFICAgICAgKDE8PDIpCisjIGRlZmluZSBUREE5ODg3X1FTUyAgICAgICAgICAgICAgICAgKDE8PDMpCisjIGRlZmluZSBUREE5ODg3X0lOVEVSQ0FSUklFUiAgICAgICAgKDE8PDQpCisjIGRlZmluZSBUREE5ODg3X1BPUlQxX0FDVElWRSAgICAgICAgKDE8PDUpCisjIGRlZmluZSBUREE5ODg3X1BPUlQyX0FDVElWRSAgICAgICAgKDE8PDYpCisvKiBjb25maWcgb3B0aW9ucyAqLworIyBkZWZpbmUgVERBOTg4N19ERUVNUEhBU0lTX01BU0sgICAgICgzPDwxNikKKyMgZGVmaW5lIFREQTk4ODdfREVFTVBIQVNJU19OT05FICAgICAoMTw8MTYpCisjIGRlZmluZSBUREE5ODg3X0RFRU1QSEFTSVNfNTAgICAgICAgKDI8PDE2KQorIyBkZWZpbmUgVERBOTg4N19ERUVNUEhBU0lTXzc1ICAgICAgICgzPDwxNikKKyMgZGVmaW5lIFREQTk4ODdfQVVUT01VVEUgICAgICAgICAgICAoMTw8MTgpCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNkZWZpbmUgSTJDX0FERFJfVERBODI5MCAgICAgICAgMHg0YgorI2RlZmluZSBJMkNfQUREUl9UREE4Mjc1ICAgICAgICAweDYxCisKK3N0cnVjdCB0dW5lciB7CisJLyogZGV2aWNlICovCisJc3RydWN0IGkyY19jbGllbnQgaTJjOworCisJLyogc3RhdGUgKyBjb25maWcgKi8KKwl1bnNpZ25lZCBpbnQgaW5pdGlhbGl6ZWQ7CisJdW5zaWduZWQgaW50IHR5cGU7ICAgICAgICAgICAgLyogY2hpcCB0eXBlICovCisJdW5zaWduZWQgaW50IGZyZXE7ICAgICAgICAgICAgLyoga2VlcCB0cmFjayBvZiB0aGUgY3VycmVudCBzZXR0aW5ncyAqLworCXY0bDJfc3RkX2lkICBzdGQ7CisJaW50ICAgICAgICAgIHVzaW5nX3Y0bDI7CisKKwllbnVtIHY0bDJfdHVuZXJfdHlwZSBtb2RlOworCXVuc2lnbmVkIGludCBpbnB1dDsKKworCS8qIHVzZWQgYnkgTVQyMDMyICovCisJdW5zaWduZWQgaW50IHhvZ2M7CisJdW5zaWduZWQgaW50IHJhZGlvX2lmMjsKKworCS8qIHVzZWQgYnkgdGRhODI5MCAqLworCXVuc2lnbmVkIGNoYXIgaTJjX2Vhc3lfbW9kZVsyXTsKKwl1bnNpZ25lZCBjaGFyIGkyY19zZXRfZnJlcVs4XTsKKworCS8qIGZ1bmN0aW9uIHB0cnMgKi8KKwl2b2lkICgqdHZfZnJlcSkoc3RydWN0IGkyY19jbGllbnQgKmMsIHVuc2lnbmVkIGludCBmcmVxKTsKKwl2b2lkICgqcmFkaW9fZnJlcSkoc3RydWN0IGkyY19jbGllbnQgKmMsIHVuc2lnbmVkIGludCBmcmVxKTsKKwlpbnQgICgqaGFzX3NpZ25hbCkoc3RydWN0IGkyY19jbGllbnQgKmMpOworCWludCAgKCppc19zdGVyZW8pKHN0cnVjdCBpMmNfY2xpZW50ICpjKTsKK307CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgdHVuZXJfZGVidWc7CitleHRlcm4gdW5zaWduZWQgY29uc3QgaW50IHR1bmVyX2NvdW50OworCitleHRlcm4gaW50IG1pY3JvdHVuZV9pbml0KHN0cnVjdCBpMmNfY2xpZW50ICpjKTsKK2V4dGVybiBpbnQgdGRhODI5MF9pbml0KHN0cnVjdCBpMmNfY2xpZW50ICpjKTsKK2V4dGVybiBpbnQgZGVmYXVsdF90dW5lcl9pbml0KHN0cnVjdCBpMmNfY2xpZW50ICpjKTsKKworI2RlZmluZSB0dW5lcl93YXJuKGZtdCwgYXJnLi4uKSBcCisJZGV2X3ByaW50ayhLRVJOX1dBUk5JTkcgLCAmdC0+aTJjLmRldiAsIGZtdCAsICMjIGFyZykKKyNkZWZpbmUgdHVuZXJfaW5mbyhmbXQsIGFyZy4uLikgXAorCWRldl9wcmludGsoS0VSTl9JTkZPICwgJnQtPmkyYy5kZXYgLCBmbXQgLCAjIyBhcmcpCisjZGVmaW5lIHR1bmVyX2RiZyhmbXQsIGFyZy4uLikgXAorCWlmICh0dW5lcl9kZWJ1ZykgZGV2X3ByaW50ayhLRVJOX0RFQlVHICwgJnQtPmkyYy5kZXYgLCBmbXQgLCAjIyBhcmcpCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZgorCisvKgorICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqIGMtYmFzaWMtb2Zmc2V0OiA4CisgKiBFbmQ6CisgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdHZlZXByb20uaCBiL2luY2x1ZGUvbWVkaWEvdHZlZXByb20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Mjc2MDNlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9tZWRpYS90dmVlcHJvbS5oCkBAIC0wLDAgKzEsMjMgQEAKK3N0cnVjdCB0dmVlcHJvbSB7CisJdTMyIGhhc19yYWRpbzsKKworCXUzMiB0dW5lcl90eXBlOworCXUzMiB0dW5lcl9mb3JtYXRzOworCisJdTMyIGRpZ2l0aXplcjsKKwl1MzIgZGlnaXRpemVyX2Zvcm1hdHM7CisKKwl1MzIgYXVkaW9fcHJvY2Vzc29yOworCS8qIGFfcF9mbXRzPyAqLworCisJdTMyIG1vZGVsOworCXUzMiByZXZpc2lvbjsKKwl1MzIgc2VyaWFsX251bWJlcjsKKwljaGFyIHJldl9zdHJbNV07Cit9OworCit2b2lkIHR2ZWVwcm9tX2hhdXBwYXVnZV9hbmFsb2coc3RydWN0IHR2ZWVwcm9tICp0dmVlLAorCQkJICAgICAgIHVuc2lnbmVkIGNoYXIgKmVlcHJvbV9kYXRhKTsKKworaW50IHR2ZWVwcm9tX3JlYWQoc3RydWN0IGkyY19jbGllbnQgKmMsIHVuc2lnbmVkIGNoYXIgKmVlZGF0YSwgaW50IGxlbik7CitpbnQgdHZlZXByb21fZHVtcCh1bnNpZ25lZCBjaGFyICplZWRhdGEsIGludCBsZW4pOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS92aWRlby1idWYtZHZiLmggYi9pbmNsdWRlL21lZGlhL3ZpZGVvLWJ1Zi1kdmIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGJkMzM2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9tZWRpYS92aWRlby1idWYtZHZiLmgKQEAgLTAsMCArMSwzNiBAQAorI2luY2x1ZGUgPGR2YmRldi5oPgorI2luY2x1ZGUgPGRteGRldi5oPgorI2luY2x1ZGUgPGR2Yl9kZW11eC5oPgorI2luY2x1ZGUgPGR2Yl9uZXQuaD4KKyNpbmNsdWRlIDxkdmJfZnJvbnRlbmQuaD4KKworc3RydWN0IHZpZGVvYnVmX2R2YiB7CisJLyogZmlsbGluZyB0aGF0IHRoZSBqb2Igb2YgdGhlIGRyaXZlciAqLworCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICpuYW1lOworCXN0cnVjdCBkdmJfZnJvbnRlbmQgICAgICAgICpmcm9udGVuZDsKKwlzdHJ1Y3QgdmlkZW9idWZfcXVldWUgICAgICBkdmJxOworCisJLyogdmlkZW8tYnVmLWR2YiBzdGF0ZSBpbmZvICovCisJc3RydWN0IHNlbWFwaG9yZSAgICAgICAgICAgbG9jazsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgICAgICAgICAqdGhyZWFkOworCWludCAgICAgICAgICAgICAgICAgICAgICAgIG5mZWVkczsKKworCS8qIHZpZGVvYnVmX2R2Yl8odW4pcmVnaXN0ZXIgbWFuZ2VzIHRoaXMgKi8KKwlzdHJ1Y3QgZHZiX2FkYXB0ZXIgICAgICAgICAqYWRhcHRlcjsKKwlzdHJ1Y3QgZHZiX2RlbXV4ICAgICAgICAgICBkZW11eDsKKwlzdHJ1Y3QgZG14ZGV2ICAgICAgICAgICAgICBkbXhkZXY7CisJc3RydWN0IGRteF9mcm9udGVuZCAgICAgICAgZmVfaHc7CisJc3RydWN0IGRteF9mcm9udGVuZCAgICAgICAgZmVfbWVtOworCXN0cnVjdCBkdmJfbmV0ICAgICAgICAgICAgIG5ldDsKK307CisKK2ludCB2aWRlb2J1Zl9kdmJfcmVnaXN0ZXIoc3RydWN0IHZpZGVvYnVmX2R2YiAqZHZiLAorCQkJICBzdHJ1Y3QgbW9kdWxlICptb2R1bGUsCisJCQkgIHZvaWQgKmFkYXB0ZXJfcHJpdik7Cit2b2lkIHZpZGVvYnVmX2R2Yl91bnJlZ2lzdGVyKHN0cnVjdCB2aWRlb2J1Zl9kdmIgKmR2Yik7CisKKy8qCisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiBjLWJhc2ljLW9mZnNldDogOAorICogRW5kOgorICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3ZpZGVvLWJ1Zi5oIGIvaW5jbHVkZS9tZWRpYS92aWRlby1idWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTZkYTZkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9tZWRpYS92aWRlby1idWYuaApAQCAtMCwwICsxLDI2MCBAQAorLyoKKyAqICRJZDogdmlkZW8tYnVmLmgsdiAxLjkgMjAwNC8xMS8wNyAxMzoxNzoxNSBrcmF4ZWwgRXhwICQKKyAqCisgKiBnZW5lcmljIGhlbHBlciBmdW5jdGlvbnMgZm9yIHZpZGVvNGxpbnV4IGNhcHR1cmUgYnVmZmVycywgdG8gaGFuZGxlCisgKiBtZW1vcnkgbWFuYWdlbWVudCBhbmQgUENJIERNQS4gIFJpZ2h0IG5vdyBidHR2ICsgc2FhNzEzNCB1c2UgaXQuCisgKgorICogVGhlIGZ1bmN0aW9ucyBleHBlY3QgdGhlIGhhcmR3YXJlIGJlaW5nIGFibGUgdG8gc2NhdHRlciBnYXR0ZXIKKyAqIChpLmUuIHRoZSBidWZmZXJzIGFyZSBub3QgbGluZWFyIGluIHBoeXNpY2FsIG1lbW9yeSwgYnV0IGZyYWdtZW50ZWQKKyAqIGludG8gUEFHRV9TSVpFIGNodW5rcykuICBUaGV5IGFsc28gYXNzdW1lIHRoZSBkcml2ZXIgZG9lcyBub3QgbmVlZAorICogdG8gdG91Y2ggdGhlIHZpZGVvIGRhdGEgKHRodXMgaXQgaXMgcHJvYmFibHkgbm90IHVzZWZ1bCBmb3IgVVNCIGFzCisgKiBkYXRhIG9mdGVuIG11c3QgYmUgdW5jb21wcmVzc2VkIGJ5IHRoZSBkcml2ZXJzKS4KKyAqCisgKiAoYykgMjAwMSwwMiBHZXJkIEtub3JyIDxrcmF4ZWxAYnl0ZXNleC5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KKworI2RlZmluZSBVTlNFVCAoLTFVKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAqIFJldHVybiBhIHNjYXR0ZXJsaXN0IGZvciBzb21lIHBhZ2UtYWxpZ25lZCB2bWFsbG9jKCknZWQgbWVtb3J5CisgKiBibG9jayAoTlVMTCBvbiBlcnJvcnMpLiAgTWVtb3J5IGZvciB0aGUgc2NhdHRlcmxpc3QgaXMgYWxsb2NhdGVkCisgKiB1c2luZyBrbWFsbG9jLiAgVGhlIGNhbGxlciBtdXN0IGZyZWUgdGhlIG1lbW9yeS4KKyAqLworc3RydWN0IHNjYXR0ZXJsaXN0KiB2aWRlb2J1Zl92bWFsbG9jX3RvX3NnKHVuc2lnbmVkIGNoYXIgKnZpcnQsIGludCBucl9wYWdlcyk7CisKKy8qCisgKiBSZXR1cm4gYSBzY2F0dGVybGlzdCBmb3IgYSBhbiBhcnJheSBvZiB1c2VycGFnZXMgKE5VTEwgb24gZXJyb3JzKS4KKyAqIE1lbW9yeSBmb3IgdGhlIHNjYXR0ZXJsaXN0IGlzIGFsbG9jYXRlZCB1c2luZyBrbWFsbG9jLiAgVGhlIGNhbGxlcgorICogbXVzdCBmcmVlIHRoZSBtZW1vcnkuCisgKi8KK3N0cnVjdCBzY2F0dGVybGlzdCogdmlkZW9idWZfcGFnZXNfdG9fc2coc3RydWN0IHBhZ2UgKipwYWdlcywgaW50IG5yX3BhZ2VzLAorCQkJCQkgaW50IG9mZnNldCk7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICogQSBzbWFsbCBzZXQgb2YgaGVscGVyIGZ1bmN0aW9ucyB0byBtYW5hZ2UgYnVmZmVycyAoYm90aCB1c2VybGFuZAorICogYW5kIGtlcm5lbCkgZm9yIERNQS4KKyAqCisgKiB2aWRlb2J1Zl9kbWFfaW5pdF8qKCkKKyAqCWNyZWF0ZXMgYSBidWZmZXIuICBUaGUgdXNlcmxhbmQgdmVyc2lvbiB0YWtlcyBhIHVzZXJzcGFjZQorICoJcG9pbnRlciArIGxlbmd0aC4gIFRoZSBrZXJuZWwgdmVyc2lvbiBqdXN0IHdhbnRzIHRoZSBzaXplIGFuZAorICoJZG9lcyBtZW1vcnkgYWxsb2NhdGlvbiB0b28gdXNpbmcgdm1hbGxvY18zMigpLgorICoKKyAqIHZpZGVvYnVmX2RtYV9wY2lfKigpCisgKglzZWUgRG9jdW1lbnRhdGlvbi9ETUEtbWFwcGluZy50eHQsIHRoZXNlIGZ1bmN0aW9ucyB0bworICoJYmFzaWNhbGx5IHRoZSBzYW1lLiAgVGhlIG1hcCBmdW5jdGlvbiBkb2VzIGFsc28gYnVpbGQgYQorICoJc2NhdHRlcmxpc3QgZm9yIHRoZSBidWZmZXIgKGFuZCB1bm1hcCBmcmVlcyBpdCAuLi4pCisgKgorICogdmlkZW9idWZfZG1hX2ZyZWUoKQorICoJbm8gY29tbWVudCAuLi4KKyAqCisgKi8KKworc3RydWN0IHZpZGVvYnVmX2RtYWJ1ZiB7CisJdTMyICAgICAgICAgICAgICAgICBtYWdpYzsKKworCS8qIGZvciB1c2VybGFuZCBidWZmZXIgKi8KKwlpbnQgICAgICAgICAgICAgICAgIG9mZnNldDsKKwlzdHJ1Y3QgcGFnZSAgICAgICAgICoqcGFnZXM7CisKKwkvKiBmb3Iga2VybmVsIGJ1ZmZlcnMgKi8KKwl2b2lkICAgICAgICAgICAgICAgICp2bWFsbG9jOworCisJLyogZm9yIG92ZXJsYXkgYnVmZmVycyAocGNpLXBjaSBkbWEpICovCisJZG1hX2FkZHJfdCAgICAgICAgICBidXNfYWRkcjsKKworCS8qIGNvbW1vbiAqLworCXN0cnVjdCBzY2F0dGVybGlzdCAgKnNnbGlzdDsKKwlpbnQgICAgICAgICAgICAgICAgIHNnbGVuOworCWludCAgICAgICAgICAgICAgICAgbnJfcGFnZXM7CisJaW50ICAgICAgICAgICAgICAgICBkaXJlY3Rpb247Cit9OworCit2b2lkIHZpZGVvYnVmX2RtYV9pbml0KHN0cnVjdCB2aWRlb2J1Zl9kbWFidWYgKmRtYSk7CitpbnQgdmlkZW9idWZfZG1hX2luaXRfdXNlcihzdHJ1Y3QgdmlkZW9idWZfZG1hYnVmICpkbWEsIGludCBkaXJlY3Rpb24sCisJCQkgICB1bnNpZ25lZCBsb25nIGRhdGEsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CitpbnQgdmlkZW9idWZfZG1hX2luaXRfa2VybmVsKHN0cnVjdCB2aWRlb2J1Zl9kbWFidWYgKmRtYSwgaW50IGRpcmVjdGlvbiwKKwkJCSAgICAgaW50IG5yX3BhZ2VzKTsKK2ludCB2aWRlb2J1Zl9kbWFfaW5pdF9vdmVybGF5KHN0cnVjdCB2aWRlb2J1Zl9kbWFidWYgKmRtYSwgaW50IGRpcmVjdGlvbiwKKwkJCSAgICAgIGRtYV9hZGRyX3QgYWRkciwgaW50IG5yX3BhZ2VzKTsKK2ludCB2aWRlb2J1Zl9kbWFfcGNpX21hcChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgdmlkZW9idWZfZG1hYnVmICpkbWEpOworaW50IHZpZGVvYnVmX2RtYV9wY2lfc3luYyhzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJICBzdHJ1Y3QgdmlkZW9idWZfZG1hYnVmICpkbWEpOworaW50IHZpZGVvYnVmX2RtYV9wY2lfdW5tYXAoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IHZpZGVvYnVmX2RtYWJ1ZiAqZG1hKTsKK2ludCB2aWRlb2J1Zl9kbWFfZnJlZShzdHJ1Y3QgdmlkZW9idWZfZG1hYnVmICpkbWEpOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAqIEEgc21hbGwgc2V0IG9mIGhlbHBlciBmdW5jdGlvbnMgdG8gbWFuYWdlIHZpZGVvNGxpbnV4IGJ1ZmZlcnMuCisgKgorICogc3RydWN0IHZpZGVvYnVmX2J1ZmZlciBob2xkcyB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQgYnkgdGhlIGhlbHBlcgorICogZnVuY3Rpb25zLCBhZGRpdGlvbmFsbHkgc29tZSBjb21tb25seSB1c2VkIGZpZWxkcyBmb3IgdjRsIGJ1ZmZlcnMKKyAqICh3aWR0aCwgaGVpZ2h0LCBsaXN0cywgd2FpdHF1ZXVlKSBhcmUgaW4gdGhlcmUuICBUaGF0IHN0cnVjdCBzaG91bGQKKyAqIGJlIHVzZWQgYXMgZmlyc3QgZWxlbWVudCBpbiB0aGUgZHJpdmVycyBidWZmZXIgc3RydWN0LgorICoKKyAqIGFib3V0IHRoZSBtbWFwIGhlbHBlcnMgKHZpZGVvYnVmX21tYXBfKik6CisgKgorICogVGhlIG1tYXBlciBmdW5jdGlvbiBhbGxvd3MgdG8gbWFwIGFueSBzdWJzZXQgb2YgY29udGluZ291cyBidWZmZXJzLgorICogVGhpcyBpbmNsdWRlcyBvbmUgbW1hcCgpIGNhbGwgZm9yIGFsbCBidWZmZXJzICh3aGljaCB0aGUgb3JpZ2luYWwKKyAqIHZpZGVvNGxpbnV4IEFQSSB1c2VzKSBhcyB3ZWxsIGFzIG9uZSBtbWFwKCkgZm9yIGV2ZXJ5IHNpbmdsZSBidWZmZXIKKyAqICh3aGljaCB2NGwyIHVzZXMpLgorICoKKyAqIElmIHRoZXJlIGlzIGEgdmFsaWQgbWFwcGluZyBmb3IgYSBidWZmZXIsIGJ1ZmZlci0+YmFkZHIvYnNpemUgaG9sZHMKKyAqIHVzZXJzcGFjZSBhZGRyZXNzICsgc2l6ZSB3aGljaCBjYW4gYmUgZmVlZGVkIGludG8gdGhlCisgKiB2aWRlb2J1Zl9kbWFfaW5pdF91c2VyIGZ1bmN0aW9uIGxpc3RlZCBhYm92ZS4KKyAqCisgKi8KKworc3RydWN0IHZpZGVvYnVmX2J1ZmZlcjsKK3N0cnVjdCB2aWRlb2J1Zl9xdWV1ZTsKKworc3RydWN0IHZpZGVvYnVmX21hcHBpbmcgeworCXVuc2lnbmVkIGludCBjb3VudDsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0OworCXVuc2lnbmVkIGxvbmcgZW5kOworCXN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcTsKK307CisKK2VudW0gdmlkZW9idWZfc3RhdGUgeworCVNUQVRFX05FRURTX0lOSVQgPSAwLAorCVNUQVRFX1BSRVBBUkVEICAgPSAxLAorCVNUQVRFX1FVRVVFRCAgICAgPSAyLAorCVNUQVRFX0FDVElWRSAgICAgPSAzLAorCVNUQVRFX0RPTkUgICAgICAgPSA0LAorCVNUQVRFX0VSUk9SICAgICAgPSA1LAorCVNUQVRFX0lETEUgICAgICAgPSA2LAorfTsKKworc3RydWN0IHZpZGVvYnVmX2J1ZmZlciB7CisJdW5zaWduZWQgaW50ICAgICAgICAgICAgaTsKKwl1MzIgICAgICAgICAgICAgICAgICAgICBtYWdpYzsKKworCS8qIGluZm8gYWJvdXQgdGhlIGJ1ZmZlciAqLworCXVuc2lnbmVkIGludCAgICAgICAgICAgIHdpZHRoOworCXVuc2lnbmVkIGludCAgICAgICAgICAgIGhlaWdodDsKKwl1bnNpZ25lZCBpbnQgICAgICAgICAgICBieXRlc3BlcmxpbmU7IC8qIHVzZSBvbmx5IGlmICE9IDAgKi8KKwl1bnNpZ25lZCBsb25nICAgICAgICAgICBzaXplOworCXVuc2lnbmVkIGludCAgICAgICAgICAgIGlucHV0OworCWVudW0gdjRsMl9maWVsZCAgICAgICAgIGZpZWxkOworCWVudW0gdmlkZW9idWZfc3RhdGUgICAgIHN0YXRlOworCXN0cnVjdCB2aWRlb2J1Zl9kbWFidWYgIGRtYTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICBzdHJlYW07ICAvKiBRQlVGL0RRQlVGIGxpc3QgKi8KKworCS8qIGZvciBtbWFwJ2VkIGJ1ZmZlcnMgKi8KKwllbnVtIHY0bDJfbWVtb3J5ICAgICAgICBtZW1vcnk7CisJc2l6ZV90ICAgICAgICAgICAgICAgICAgYm9mZjsgICAgLyogYnVmZmVyIG9mZnNldCAobW1hcCArIG92ZXJsYXkpICovCisJc2l6ZV90ICAgICAgICAgICAgICAgICAgYnNpemU7ICAgLyogYnVmZmVyIHNpemUgKi8KKwl1bnNpZ25lZCBsb25nICAgICAgICAgICBiYWRkcjsgICAvKiBidWZmZXIgYWRkciAodXNlcmxhbmQgcHRyISkgKi8KKwlzdHJ1Y3QgdmlkZW9idWZfbWFwcGluZyAqbWFwOworCisJLyogdG91Y2hlZCBieSBpcnEgaGFuZGxlciAqLworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgIHF1ZXVlOworCXdhaXRfcXVldWVfaGVhZF90ICAgICAgIGRvbmU7CisJdW5zaWduZWQgaW50ICAgICAgICAgICAgZmllbGRfY291bnQ7CisJc3RydWN0IHRpbWV2YWwgICAgICAgICAgdHM7Cit9OworCitzdHJ1Y3QgdmlkZW9idWZfcXVldWVfb3BzIHsKKwlpbnQgKCpidWZfc2V0dXApKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwKKwkJCSB1bnNpZ25lZCBpbnQgKmNvdW50LCB1bnNpZ25lZCBpbnQgKnNpemUpOworCWludCAoKmJ1Zl9wcmVwYXJlKShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsCisJCQkgICBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YiwKKwkJCSAgIGVudW0gdjRsMl9maWVsZCBmaWVsZCk7CisJdm9pZCAoKmJ1Zl9xdWV1ZSkoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLAorCQkJICBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2Yik7CisJdm9pZCAoKmJ1Zl9yZWxlYXNlKShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsCisJCQkgICAgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpOworfTsKKworc3RydWN0IHZpZGVvYnVmX3F1ZXVlIHsKKyAgICAgICAgc3RydWN0IHNlbWFwaG9yZSAgICAgICAgICAgbG9jazsKKwlzcGlubG9ja190ICAgICAgICAgICAgICAgICAqaXJxbG9jazsKKwlzdHJ1Y3QgcGNpX2RldiAgICAgICAgICAgICAqcGNpOworCisJZW51bSB2NGwyX2J1Zl90eXBlICAgICAgICAgdHlwZTsKKwl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICBpbnB1dHM7IC8qIGZvciBWNEwyX0JVRl9GTEFHX0lOUFVUICovCisJdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgbXNpemU7CisJZW51bSB2NGwyX2ZpZWxkICAgICAgICAgICAgZmllbGQ7CisJZW51bSB2NGwyX2ZpZWxkICAgICAgICAgICAgbGFzdDsgICAvKiBmb3IgZmllbGQ9VjRMMl9GSUVMRF9BTFRFUk5BVEUgKi8KKwlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICAgICAqYnVmc1tWSURFT19NQVhfRlJBTUVdOworCXN0cnVjdCB2aWRlb2J1Zl9xdWV1ZV9vcHMgICpvcHM7CisKKwkvKiBjYXB0dXJlIHZpYSBtbWFwKCkgKyBpb2N0bChRQlVGL0RRQlVGKSAqLworCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgIHN0cmVhbWluZzsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAgICBzdHJlYW07CisKKwkvKiBjYXB0dXJlIHZpYSByZWFkKCkgKi8KKwl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICByZWFkaW5nOworCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgIHJlYWRfb2ZmOworCXN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgICAgICpyZWFkX2J1ZjsKKworCS8qIGRyaXZlciBwcml2YXRlIGRhdGEgKi8KKwl2b2lkICAgICAgICAgICAgICAgICAgICAgICAqcHJpdl9kYXRhOworfTsKKwordm9pZCogdmlkZW9idWZfYWxsb2ModW5zaWduZWQgaW50IHNpemUpOworaW50IHZpZGVvYnVmX3dhaXRvbihzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YiwgaW50IG5vbl9ibG9ja2luZywgaW50IGludHIpOworaW50IHZpZGVvYnVmX2lvbG9jayhzdHJ1Y3QgcGNpX2RldiAqcGNpLCBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YiwKKwkJICAgIHN0cnVjdCB2NGwyX2ZyYW1lYnVmZmVyICpmYnVmKTsKKwordm9pZCB2aWRlb2J1Zl9xdWV1ZV9pbml0KHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwKKwkJCSBzdHJ1Y3QgdmlkZW9idWZfcXVldWVfb3BzICpvcHMsCisJCQkgc3RydWN0IHBjaV9kZXYgKnBjaSwKKwkJCSBzcGlubG9ja190ICppcnFsb2NrLAorCQkJIGVudW0gdjRsMl9idWZfdHlwZSB0eXBlLAorCQkJIGVudW0gdjRsMl9maWVsZCBmaWVsZCwKKwkJCSB1bnNpZ25lZCBpbnQgbXNpemUsCisJCQkgdm9pZCAqcHJpdik7CitpbnQgIHZpZGVvYnVmX3F1ZXVlX2lzX2J1c3koc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxKTsKK3ZvaWQgdmlkZW9idWZfcXVldWVfY2FuY2VsKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSk7CisKK2VudW0gdjRsMl9maWVsZCB2aWRlb2J1Zl9uZXh0X2ZpZWxkKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSk7Cit2b2lkIHZpZGVvYnVmX3N0YXR1cyhzdHJ1Y3QgdjRsMl9idWZmZXIgKmIsIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiLAorCQkgICAgIGVudW0gdjRsMl9idWZfdHlwZSB0eXBlKTsKK2ludCB2aWRlb2J1Zl9yZXFidWZzKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwKKwkJICAgICBzdHJ1Y3QgdjRsMl9yZXF1ZXN0YnVmZmVycyAqcmVxKTsKK2ludCB2aWRlb2J1Zl9xdWVyeWJ1ZihzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsIHN0cnVjdCB2NGwyX2J1ZmZlciAqYik7CitpbnQgdmlkZW9idWZfcWJ1ZihzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsCisJCSAgc3RydWN0IHY0bDJfYnVmZmVyICpiKTsKK2ludCB2aWRlb2J1Zl9kcWJ1ZihzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsCisJCSAgIHN0cnVjdCB2NGwyX2J1ZmZlciAqYiwgaW50IG5vbmJsb2NraW5nKTsKK2ludCB2aWRlb2J1Zl9zdHJlYW1vbihzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEpOworaW50IHZpZGVvYnVmX3N0cmVhbW9mZihzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEpOworCitpbnQgdmlkZW9idWZfcmVhZF9zdGFydChzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEpOwordm9pZCB2aWRlb2J1Zl9yZWFkX3N0b3Aoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxKTsKK3NzaXplX3QgdmlkZW9idWZfcmVhZF9zdHJlYW0oc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLAorCQkJICAgICBjaGFyIF9fdXNlciAqZGF0YSwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MsCisJCQkgICAgIGludCB2YmloYWNrLCBpbnQgbm9uYmxvY2tpbmcpOworc3NpemVfdCB2aWRlb2J1Zl9yZWFkX29uZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsCisJCQkgIGNoYXIgX191c2VyICpkYXRhLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcywKKwkJCSAgaW50IG5vbmJsb2NraW5nKTsKK3Vuc2lnbmVkIGludCB2aWRlb2J1Zl9wb2xsX3N0cmVhbShzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkgIHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwKKwkJCQkgIHBvbGxfdGFibGUgKndhaXQpOworCitpbnQgdmlkZW9idWZfbW1hcF9zZXR1cChzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsCisJCQl1bnNpZ25lZCBpbnQgYmNvdW50LCB1bnNpZ25lZCBpbnQgYnNpemUsCisJCQllbnVtIHY0bDJfbWVtb3J5IG1lbW9yeSk7CitpbnQgdmlkZW9idWZfbW1hcF9mcmVlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSk7CitpbnQgdmlkZW9idWZfbW1hcF9tYXBwZXIoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLAorCQkJIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiBjLWJhc2ljLW9mZnNldDogOAorICogRW5kOgorICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL210ZC9pbmZ0bC11c2VyLmggYi9pbmNsdWRlL210ZC9pbmZ0bC11c2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRhNGYyYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbXRkL2luZnRsLXVzZXIuaApAQCAtMCwwICsxLDkxIEBACisvKgorICogJElkOiBpbmZ0bC11c2VyLmgsdiAxLjEgMjAwNC8wNS8wNSAxNToxNzowMCBkd213MiBFeHAgJAorICoKKyAqIFBhcnRzIG9mIElORlRMIGhlYWRlcnMgc2hhcmVkIHdpdGggdXNlcnNwYWNlIAorICoKKyAqLworCisjaWZuZGVmIF9fTVREX0lORlRMX1VTRVJfSF9fCisjZGVmaW5lIF9fTVREX0lORlRMX1VTRVJfSF9fCisKKyNkZWZpbmUJT1NBS19WRVJTSU9OCTB4NTEyMAorI2RlZmluZQlQRVJDRU5UVVNFRAk5OAorCisjZGVmaW5lCVNFQ1RPUlNJWkUJNTEyCisKKy8qIEJsb2NrIENvbnRyb2wgSW5mb3JtYXRpb24gKi8KKworc3RydWN0IGluZnRsX2JjaSB7CisJdWludDhfdCBFQ0NzaWdbNl07CisJdWludDhfdCBTdGF0dXM7CisJdWludDhfdCBTdGF0dXMxOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGluZnRsX3VuaXRoZWFkMSB7CisJdWludDE2X3QgdmlydHVhbFVuaXRObzsKKwl1aW50MTZfdCBwcmV2VW5pdE5vOworCXVpbnQ4X3QgQU5BQzsKKwl1aW50OF90IE5BQ3M7CisJdWludDhfdCBwYXJpdHlQZXJGaWVsZDsKKwl1aW50OF90IGRpc2NhcmRlZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBpbmZ0bF91bml0aGVhZDIgeworCXVpbnQ4X3QgcGFyaXR5UGVyRmllbGQ7CisJdWludDhfdCBBTkFDOworCXVpbnQxNl90IHByZXZVbml0Tm87CisJdWludDE2X3QgdmlydHVhbFVuaXRObzsKKwl1aW50OF90IE5BQ3M7CisJdWludDhfdCBkaXNjYXJkZWQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgaW5mdGxfdW5pdHRhaWwgeworCXVpbnQ4X3QgUmVzZXJ2ZWRbNF07CisJdWludDE2X3QgRXJhc2VNYXJrOworCXVpbnQxNl90IEVyYXNlTWFyazE7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCit1bmlvbiBpbmZ0bF91Y2kgeworCXN0cnVjdCBpbmZ0bF91bml0aGVhZDEgYTsKKwlzdHJ1Y3QgaW5mdGxfdW5pdGhlYWQyIGI7CisJc3RydWN0IGluZnRsX3VuaXR0YWlsIGM7Cit9OworCitzdHJ1Y3QgaW5mdGxfb29iIHsKKwlzdHJ1Y3QgaW5mdGxfYmNpIGI7CisJdW5pb24gaW5mdGxfdWNpIHU7Cit9OworCisKKy8qIElORlRMIE1lZGlhIEhlYWRlciAqLworCitzdHJ1Y3QgSU5GVExQYXJ0aXRpb24geworCV9fdTMyIHZpcnR1YWxVbml0czsKKwlfX3UzMiBmaXJzdFVuaXQ7CisJX191MzIgbGFzdFVuaXQ7CisJX191MzIgZmxhZ3M7CisJX191MzIgc3BhcmVVbml0czsKKwlfX3UzMiBSZXNlcnZlZDA7CisJX191MzIgUmVzZXJ2ZWQxOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IElORlRMTWVkaWFIZWFkZXIgeworCWNoYXIgYm9vdFJlY29yZElEWzhdOworCV9fdTMyIE5vT2ZCb290SW1hZ2VCbG9ja3M7CisJX191MzIgTm9PZkJpbmFyeVBhcnRpdGlvbnM7CisJX191MzIgTm9PZkJEVExQYXJ0aXRpb25zOworCV9fdTMyIEJsb2NrTXVsdGlwbGllckJpdHM7CisJX191MzIgRm9ybWF0RmxhZ3M7CisJX191MzIgT3Nha1ZlcnNpb247CisJX191MzIgUGVyY2VudFVzZWQ7CisJc3RydWN0IElORlRMUGFydGl0aW9uIFBhcnRpdGlvbnNbNF07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKiBQYXJ0aXRpb24gZmxhZyB0eXBlcyAqLworI2RlZmluZQlJTkZUTF9CSU5BUlkJMHgyMDAwMDAwMAorI2RlZmluZQlJTkZUTF9CRFRMCTB4NDAwMDAwMDAKKyNkZWZpbmUJSU5GVExfTEFTVAkweDgwMDAwMDAwCisKKyNlbmRpZiAvKiBfX01URF9JTkZUTF9VU0VSX0hfXyAqLworCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbXRkL2pmZnMyLXVzZXIuaCBiL2luY2x1ZGUvbXRkL2pmZnMyLXVzZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTA4ZWYwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9tdGQvamZmczItdXNlci5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiAkSWQ6IGpmZnMyLXVzZXIuaCx2IDEuMSAyMDA0LzA1LzA1IDExOjU3OjU0IGR3bXcyIEV4cCAkCisgKgorICogSkZGUzIgZGVmaW5pdGlvbnMgZm9yIHVzZSBpbiB1c2VyIHNwYWNlIG9ubHkKKyAqLworCisjaWZuZGVmIF9fSkZGUzJfVVNFUl9IX18KKyNkZWZpbmUgX19KRkZTMl9VU0VSX0hfXworCisvKiBUaGlzIGZpbGUgaXMgYmxlc3NlZCBmb3IgaW5jbHVzaW9uIGJ5IHVzZXJzcGFjZSAqLworI2luY2x1ZGUgPGxpbnV4L2pmZnMyLmg+CisjaW5jbHVkZSA8ZW5kaWFuLmg+CisjaW5jbHVkZSA8Ynl0ZXN3YXAuaD4KKworI3VuZGVmIGNwdV90b19qZTE2CisjdW5kZWYgY3B1X3RvX2plMzIKKyN1bmRlZiBjcHVfdG9famVtb2RlCisjdW5kZWYgamUxNl90b19jcHUKKyN1bmRlZiBqZTMyX3RvX2NwdQorI3VuZGVmIGplbW9kZV90b19jcHUKKworZXh0ZXJuIGludCB0YXJnZXRfZW5kaWFuOworCisjZGVmaW5lIHQxNih4KSAoeyB1aW50MTZfdCBfX2IgPSAoeCk7ICh0YXJnZXRfZW5kaWFuPT1fX0JZVEVfT1JERVIpP19fYjpic3dhcF8xNihfX2IpOyB9KQorI2RlZmluZSB0MzIoeCkgKHsgdWludDMyX3QgX19iID0gKHgpOyAodGFyZ2V0X2VuZGlhbj09X19CWVRFX09SREVSKT9fX2I6YnN3YXBfMzIoX19iKTsgfSkKKworI2RlZmluZSBjcHVfdG9famUxNih4KSAoKGppbnQxNl90KXt0MTYoeCl9KQorI2RlZmluZSBjcHVfdG9famUzMih4KSAoKGppbnQzMl90KXt0MzIoeCl9KQorI2RlZmluZSBjcHVfdG9famVtb2RlKHgpICgoam1vZGVfdCl7dDMyKHgpfSkKKworI2RlZmluZSBqZTE2X3RvX2NwdSh4KSAodDE2KCh4KS52MTYpKQorI2RlZmluZSBqZTMyX3RvX2NwdSh4KSAodDMyKCh4KS52MzIpKQorI2RlZmluZSBqZW1vZGVfdG9fY3B1KHgpICh0MzIoKHgpLm0pKQorCisjZW5kaWYgLyogX19KRkZTMl9VU0VSX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tdGQvbXRkLWFiaS5oIGIvaW5jbHVkZS9tdGQvbXRkLWFiaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3NmFiODkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL210ZC9tdGQtYWJpLmgKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiAkSWQ6IG10ZC1hYmkuaCx2IDEuNyAyMDA0LzExLzIzIDE1OjM3OjMyIGdsZWl4bmVyIEV4cCAkCisgKgorICogUG9ydGlvbnMgb2YgTVREIEFCSSBkZWZpbml0aW9uIHdoaWNoIGFyZSBzaGFyZWQgYnkga2VybmVsIGFuZCB1c2VyIHNwYWNlIAorICovCisKKyNpZm5kZWYgX19NVERfQUJJX0hfXworI2RlZmluZSBfX01URF9BQklfSF9fCisKKyNpZm5kZWYgX19LRVJORUxfXyAvKiBVcmdoLiBUaGUgd2hvbGUgcG9pbnQgb2Ygc3BsaXR0aW5nIHRoaXMgb3V0IGludG8KKwkJICAgIHNlcGFyYXRlIGZpbGVzIHdhcyB0byBhdm9pZCAjaWZkZWYgX19LRVJORUxfXyAqLworI2RlZmluZSBfX3VzZXIKKyNlbmRpZgorCitzdHJ1Y3QgZXJhc2VfaW5mb191c2VyIHsKKwl1aW50MzJfdCBzdGFydDsKKwl1aW50MzJfdCBsZW5ndGg7Cit9OworCitzdHJ1Y3QgbXRkX29vYl9idWYgeworCXVpbnQzMl90IHN0YXJ0OworCXVpbnQzMl90IGxlbmd0aDsKKwl1bnNpZ25lZCBjaGFyIF9fdXNlciAqcHRyOworfTsKKworI2RlZmluZSBNVERfQUJTRU5UCQkwCisjZGVmaW5lIE1URF9SQU0JCQkxCisjZGVmaW5lIE1URF9ST00JCQkyCisjZGVmaW5lIE1URF9OT1JGTEFTSAkJMworI2RlZmluZSBNVERfTkFOREZMQVNICQk0CisjZGVmaW5lIE1URF9QRVJPTQkJNQorI2RlZmluZSBNVERfT1RIRVIJCTE0CisjZGVmaW5lIE1URF9VTktOT1dOCQkxNQorCisjZGVmaW5lIE1URF9DTEVBUl9CSVRTCQkxICAgICAgIC8vIEJpdHMgY2FuIGJlIGNsZWFyZWQgKGZsYXNoKQorI2RlZmluZSBNVERfU0VUX0JJVFMJCTIgICAgICAgLy8gQml0cyBjYW4gYmUgc2V0CisjZGVmaW5lIE1URF9FUkFTRUFCTEUJCTQgICAgICAgLy8gSGFzIGFuIGVyYXNlIGZ1bmN0aW9uCisjZGVmaW5lIE1URF9XUklURUJfV1JJVEVBQkxFCTggICAgICAgLy8gRGlyZWN0IElPIGlzIHBvc3NpYmxlCisjZGVmaW5lIE1URF9WT0xBVElMRQkJMTYgICAgICAvLyBTZXQgZm9yIFJBTXMKKyNkZWZpbmUgTVREX1hJUAkJCTMyCS8vIGVYZWN1dGUtSW4tUGxhY2UgcG9zc2libGUKKyNkZWZpbmUgTVREX09PQgkJCTY0CS8vIE91dC1vZi1iYW5kIGRhdGEgKE5BTkQgZmxhc2gpCisjZGVmaW5lIE1URF9FQ0MJCQkxMjgJLy8gRGV2aWNlIGNhcGFibGUgb2YgYXV0b21hdGljIEVDQworI2RlZmluZSBNVERfTk9fVklSVEJMT0NLUwkyNTYJLy8gVmlydHVhbCBibG9ja3Mgbm90IGFsbG93ZWQKKworLy8gU29tZSBjb21tb24gZGV2aWNlcyAvIGNvbWJpbmF0aW9ucyBvZiBjYXBhYmlsaXRpZXMKKyNkZWZpbmUgTVREX0NBUF9ST00JCTAKKyNkZWZpbmUgTVREX0NBUF9SQU0JCShNVERfQ0xFQVJfQklUU3xNVERfU0VUX0JJVFN8TVREX1dSSVRFQl9XUklURUFCTEUpCisjZGVmaW5lIE1URF9DQVBfTk9SRkxBU0ggICAgICAgIChNVERfQ0xFQVJfQklUU3xNVERfRVJBU0VBQkxFKQorI2RlZmluZSBNVERfQ0FQX05BTkRGTEFTSCAgICAgICAoTVREX0NMRUFSX0JJVFN8TVREX0VSQVNFQUJMRXxNVERfT09CKQorI2RlZmluZSBNVERfV1JJVEVBQkxFCQkoTVREX0NMRUFSX0JJVFN8TVREX1NFVF9CSVRTKQorCisKKy8vIFR5cGVzIG9mIGF1dG9tYXRpYyBFQ0MvQ2hlY2tzdW0gYXZhaWxhYmxlCisjZGVmaW5lIE1URF9FQ0NfTk9ORQkJMCAJLy8gTm8gYXV0b21hdGljIEVDQyBhdmFpbGFibGUKKyNkZWZpbmUgTVREX0VDQ19SU19EaXNrT25DaGlwCTEJLy8gQXV0b21hdGljIEVDQyBvbiBEaXNrT25DaGlwCisjZGVmaW5lIE1URF9FQ0NfU1cJCTIJLy8gU1cgRUNDIGZvciBUb3NoaWJhICYgU2Ftc3VuZyBkZXZpY2VzCisKKy8qIEVDQyBieXRlIHBsYWNlbWVudCAqLworI2RlZmluZSBNVERfTkFOREVDQ19PRkYJCTAJLy8gU3dpdGNoIG9mZiBFQ0MgKE5vdCByZWNvbW1lbmRlZCkKKyNkZWZpbmUgTVREX05BTkRFQ0NfUExBQ0UJMQkvLyBVc2UgdGhlIGdpdmVuIHBsYWNlbWVudCBpbiB0aGUgc3RydWN0dXJlIChZQUZGUzEgbGVnYWN5IG1vZGUpCisjZGVmaW5lIE1URF9OQU5ERUNDX0FVVE9QTEFDRQkyCS8vIFVzZSB0aGUgZGVmYXVsdCBwbGFjZW1lbnQgc2NoZW1lCisjZGVmaW5lIE1URF9OQU5ERUNDX1BMQUNFT05MWQkzCS8vIFVzZSB0aGUgZ2l2ZW4gcGxhY2VtZW50IGluIHRoZSBzdHJ1Y3R1cmUgKERvIG5vdCBzdG9yZSBlY2MgcmVzdWx0IG9uIHJlYWQpCisKK3N0cnVjdCBtdGRfaW5mb191c2VyIHsKKwl1aW50OF90IHR5cGU7CisJdWludDMyX3QgZmxhZ3M7CisJdWludDMyX3Qgc2l6ZTsJIC8vIFRvdGFsIHNpemUgb2YgdGhlIE1URAorCXVpbnQzMl90IGVyYXNlc2l6ZTsKKwl1aW50MzJfdCBvb2JibG9jazsgIC8vIFNpemUgb2YgT09CIGJsb2NrcyAoZS5nLiA1MTIpCisJdWludDMyX3Qgb29ic2l6ZTsgICAvLyBBbW91bnQgb2YgT09CIGRhdGEgcGVyIGJsb2NrIChlLmcuIDE2KQorCXVpbnQzMl90IGVjY3R5cGU7CisJdWludDMyX3QgZWNjc2l6ZTsKK307CisKK3N0cnVjdCByZWdpb25faW5mb191c2VyIHsKKwl1aW50MzJfdCBvZmZzZXQ7CQkvKiBBdCB3aGljaCB0aGlzIHJlZ2lvbiBzdGFydHMsIAorCQkJCQkgKiBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIE1URCAqLworCXVpbnQzMl90IGVyYXNlc2l6ZTsJCS8qIEZvciB0aGlzIHJlZ2lvbiAqLworCXVpbnQzMl90IG51bWJsb2NrczsJCS8qIE51bWJlciBvZiBibG9ja3MgaW4gdGhpcyByZWdpb24gKi8KKwl1aW50MzJfdCByZWdpb25pbmRleDsKK307CisKKyNkZWZpbmUgTUVNR0VUSU5GTyAgICAgICAgICAgICAgX0lPUignTScsIDEsIHN0cnVjdCBtdGRfaW5mb191c2VyKQorI2RlZmluZSBNRU1FUkFTRSAgICAgICAgICAgICAgICBfSU9XKCdNJywgMiwgc3RydWN0IGVyYXNlX2luZm9fdXNlcikKKyNkZWZpbmUgTUVNV1JJVEVPT0IgICAgICAgICAgICAgX0lPV1IoJ00nLCAzLCBzdHJ1Y3QgbXRkX29vYl9idWYpCisjZGVmaW5lIE1FTVJFQURPT0IgICAgICAgICAgICAgIF9JT1dSKCdNJywgNCwgc3RydWN0IG10ZF9vb2JfYnVmKQorI2RlZmluZSBNRU1MT0NLICAgICAgICAgICAgICAgICBfSU9XKCdNJywgNSwgc3RydWN0IGVyYXNlX2luZm9fdXNlcikKKyNkZWZpbmUgTUVNVU5MT0NLICAgICAgICAgICAgICAgX0lPVygnTScsIDYsIHN0cnVjdCBlcmFzZV9pbmZvX3VzZXIpCisjZGVmaW5lIE1FTUdFVFJFR0lPTkNPVU5UCV9JT1IoJ00nLCA3LCBpbnQpCisjZGVmaW5lIE1FTUdFVFJFR0lPTklORk8JX0lPV1IoJ00nLCA4LCBzdHJ1Y3QgcmVnaW9uX2luZm9fdXNlcikKKyNkZWZpbmUgTUVNU0VUT09CU0VMCQlfSU9XKCdNJywgOSwgc3RydWN0IG5hbmRfb29iaW5mbykKKyNkZWZpbmUgTUVNR0VUT09CU0VMCQlfSU9SKCdNJywgMTAsIHN0cnVjdCBuYW5kX29vYmluZm8pCisjZGVmaW5lIE1FTUdFVEJBREJMT0NLCQlfSU9XKCdNJywgMTEsIGxvZmZfdCkKKyNkZWZpbmUgTUVNU0VUQkFEQkxPQ0sJCV9JT1coJ00nLCAxMiwgbG9mZl90KQorCitzdHJ1Y3QgbmFuZF9vb2JpbmZvIHsKKwl1aW50MzJfdCB1c2VlY2M7CisJdWludDMyX3QgZWNjYnl0ZXM7CisJdWludDMyX3Qgb29iZnJlZVs4XVsyXTsKKwl1aW50MzJfdCBlY2Nwb3NbMzJdOworfTsKKworI2VuZGlmIC8qIF9fTVREX0FCSV9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbXRkL210ZC11c2VyLmggYi9pbmNsdWRlL210ZC9tdGQtdXNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjMTNmYzcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL210ZC9tdGQtdXNlci5oCkBAIC0wLDAgKzEsMjAgQEAKKy8qCisgKiAkSWQ6IG10ZC11c2VyLmgsdiAxLjIgMjAwNC8wNS8wNSAxNDo0NDo1NyBkd213MiBFeHAgJAorICoKKyAqIE1URCBBQkkgaGVhZGVyIGZvciB1c2UgYnkgdXNlciBzcGFjZSBvbmx5LgorICovCisKKyNpZm5kZWYgX19NVERfVVNFUl9IX18KKyNkZWZpbmUgX19NVERfVVNFUl9IX18KKworI2luY2x1ZGUgPHN0ZGludC5oPgorCisvKiBUaGlzIGZpbGUgaXMgYmxlc3NlZCBmb3IgaW5jbHVzaW9uIGJ5IHVzZXJzcGFjZSAqLworI2luY2x1ZGUgPG10ZC9tdGQtYWJpLmg+CisKK3R5cGVkZWYgc3RydWN0IG10ZF9pbmZvX3VzZXIgbXRkX2luZm9fdDsKK3R5cGVkZWYgc3RydWN0IGVyYXNlX2luZm9fdXNlciBlcmFzZV9pbmZvX3Q7Cit0eXBlZGVmIHN0cnVjdCByZWdpb25faW5mb191c2VyIHJlZ2lvbl9pbmZvX3Q7Cit0eXBlZGVmIHN0cnVjdCBuYW5kX29vYmluZm8gbmFuZF9vb2JpbmZvX3Q7CisKKyNlbmRpZiAvKiBfX01URF9VU0VSX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tdGQvbmZ0bC11c2VyLmggYi9pbmNsdWRlL210ZC9uZnRsLXVzZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjRlYzA0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9tdGQvbmZ0bC11c2VyLmgKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqICRJZDogbmZ0bC11c2VyLmgsdiAxLjEgMjAwNC8wNS8wNSAxNDo0NDo1NyBkd213MiBFeHAgJAorICoKKyAqIFBhcnRzIG9mIE5GVEwgaGVhZGVycyBzaGFyZWQgd2l0aCB1c2Vyc3BhY2UgCisgKgorICovCisKKyNpZm5kZWYgX19NVERfTkZUTF9VU0VSX0hfXworI2RlZmluZSBfX01URF9ORlRMX1VTRVJfSF9fCisKKy8qIEJsb2NrIENvbnRyb2wgSW5mb3JtYXRpb24gKi8KKworc3RydWN0IG5mdGxfYmNpIHsKKwl1bnNpZ25lZCBjaGFyIEVDQ1NpZ1s2XTsKKwl1aW50OF90IFN0YXR1czsKKwl1aW50OF90IFN0YXR1czE7Cit9X19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIFVuaXQgQ29udHJvbCBJbmZvcm1hdGlvbiAqLworCitzdHJ1Y3QgbmZ0bF91Y2kwIHsKKwl1aW50MTZfdCBWaXJ0VW5pdE51bTsKKwl1aW50MTZfdCBSZXBsVW5pdE51bTsKKwl1aW50MTZfdCBTcGFyZVZpcnRVbml0TnVtOworCXVpbnQxNl90IFNwYXJlUmVwbFVuaXROdW07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgbmZ0bF91Y2kxIHsKKwl1aW50MzJfdCBXZWFySW5mbzsKKwl1aW50MTZfdCBFcmFzZU1hcms7CisJdWludDE2X3QgRXJhc2VNYXJrMTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBuZnRsX3VjaTIgeworICAgICAgICB1aW50MTZfdCBGb2xkTWFyazsKKyAgICAgICAgdWludDE2X3QgRm9sZE1hcmsxOworCXVpbnQzMl90IHVudXNlZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3VuaW9uIG5mdGxfdWNpIHsKKwlzdHJ1Y3QgbmZ0bF91Y2kwIGE7CisJc3RydWN0IG5mdGxfdWNpMSBiOworCXN0cnVjdCBuZnRsX3VjaTIgYzsKK307CisKK3N0cnVjdCBuZnRsX29vYiB7CisJc3RydWN0IG5mdGxfYmNpIGI7CisJdW5pb24gbmZ0bF91Y2kgdTsKK307CisKKy8qIE5GVEwgTWVkaWEgSGVhZGVyICovCisKK3N0cnVjdCBORlRMTWVkaWFIZWFkZXIgeworCWNoYXIgRGF0YU9yZ0lEWzZdOworCXVpbnQxNl90IE51bUVyYXNlVW5pdHM7CisJdWludDE2X3QgRmlyc3RQaHlzaWNhbEVVTjsKKwl1aW50MzJfdCBGb3JtYXR0ZWRTaXplOworCXVuc2lnbmVkIGNoYXIgVW5pdFNpemVGYWN0b3I7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIE1BWF9FUkFTRV9aT05FUyAoODE5MiAtIDUxMikKKworI2RlZmluZSBFUkFTRV9NQVJLIDB4M2M2OQorI2RlZmluZSBTRUNUT1JfRlJFRSAweGZmCisjZGVmaW5lIFNFQ1RPUl9VU0VEIDB4NTUKKyNkZWZpbmUgU0VDVE9SX0lHTk9SRSAweDExCisjZGVmaW5lIFNFQ1RPUl9ERUxFVEVEIDB4MDAKKworI2RlZmluZSBGT0xEX01BUktfSU5fUFJPR1JFU1MgMHg1NTU1CisKKyNkZWZpbmUgWk9ORV9HT09EIDB4ZmYKKyNkZWZpbmUgWk9ORV9CQURfT1JJR0lOQUwgMAorI2RlZmluZSBaT05FX0JBRF9NQVJLRUQgNworCisKKyNlbmRpZiAvKiBfX01URF9ORlRMX1VTRVJfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9hY3RfYXBpLmggYi9pbmNsdWRlL25ldC9hY3RfYXBpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQwMGE5OQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L2FjdF9hcGkuaApAQCAtMCwwICsxLDExNiBAQAorI2lmbmRlZiBfX05FVF9BQ1RfQVBJX0gKKyNkZWZpbmUgX19ORVRfQUNUX0FQSV9ICisKKy8qCisgKiBQdWJsaWMgcG9saWNlIGFjdGlvbiBBUEkgZm9yIGNsYXNzaWZpZXJzL3FkaXNjcworICovCisKKyNpbmNsdWRlIDxuZXQvc2NoX2dlbmVyaWMuaD4KKyNpbmNsdWRlIDxuZXQvcGt0X3NjaGVkLmg+CisKKyNkZWZpbmUgdGNhX2dlbihuYW1lKSBcCitzdHJ1Y3QgdGNmXyMjbmFtZSAqbmV4dDsgXAorCXUzMiBpbmRleDsgXAorCWludCByZWZjbnQ7IFwKKwlpbnQgYmluZGNudDsgXAorCXUzMiBjYXBhYjsgXAorCWludCBhY3Rpb247IFwKKwlzdHJ1Y3QgdGNmX3QgdG07IFwKKwlzdHJ1Y3QgZ25ldF9zdGF0c19iYXNpYyBic3RhdHM7IFwKKwlzdHJ1Y3QgZ25ldF9zdGF0c19xdWV1ZSBxc3RhdHM7IFwKKwlzdHJ1Y3QgZ25ldF9zdGF0c19yYXRlX2VzdCByYXRlX2VzdDsgXAorCXNwaW5sb2NrX3QgKnN0YXRzX2xvY2s7IFwKKwlzcGlubG9ja190IGxvY2sKKworc3RydWN0IHRjZl9wb2xpY2UKK3sKKwl0Y2FfZ2VuKHBvbGljZSk7CisJaW50CQlyZXN1bHQ7CisJdTMyCQlld21hX3JhdGU7CisJdTMyCQlidXJzdDsKKwl1MzIJCW10dTsKKwl1MzIJCXRva3M7CisJdTMyCQlwdG9rczsKKwlwc2NoZWRfdGltZV90CXRfYzsKKwlzdHJ1Y3QgcWRpc2NfcmF0ZV90YWJsZSAqUl90YWI7CisJc3RydWN0IHFkaXNjX3JhdGVfdGFibGUgKlBfdGFiOworfTsKKworI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVAorCisjZGVmaW5lIEFDVF9QX0NSRUFURUQgMQorI2RlZmluZSBBQ1RfUF9ERUxFVEVEIDEKKworc3RydWN0IHRjZl9hY3RfaGRyCit7CisJdGNhX2dlbihhY3RfaGRyKTsKK307CisKK3N0cnVjdCB0Y19hY3Rpb24KK3sKKwl2b2lkICpwcml2OworCXN0cnVjdCB0Y19hY3Rpb25fb3BzICpvcHM7CisJX191MzIgICB0eXBlOyAgIC8qIGZvciBiYWNrd2FyZCBjb21wYXQoVENBX09MRF9DT01QQVQpICovCisJX191MzIgICBvcmRlcjsgCisJc3RydWN0IHRjX2FjdGlvbiAqbmV4dDsKK307CisKKyNkZWZpbmUgVENBX0NBUF9OT05FIDAKK3N0cnVjdCB0Y19hY3Rpb25fb3BzCit7CisJc3RydWN0IHRjX2FjdGlvbl9vcHMgKm5leHQ7CisJY2hhciAgICBraW5kW0lGTkFNU0laXTsKKwlfX3UzMiAgIHR5cGU7IC8qIFRCRCB0byBtYXRjaCBraW5kICovCisJX191MzIgCWNhcGFiOyAgLyogY2FwYWJpbGl0aWVzIGluY2x1ZGVzIDQgYml0IHZlcnNpb24gKi8KKwlzdHJ1Y3QgbW9kdWxlCQkqb3duZXI7CisJaW50ICAgICAoKmFjdCkoc3RydWN0IHNrX2J1ZmYgKiosIHN0cnVjdCB0Y19hY3Rpb24gKik7CisJaW50ICAgICAoKmdldF9zdGF0cykoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IHRjX2FjdGlvbiAqKTsKKwlpbnQgICAgICgqZHVtcCkoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IHRjX2FjdGlvbiAqLGludCAsIGludCk7CisJaW50ICAgICAoKmNsZWFudXApKHN0cnVjdCB0Y19hY3Rpb24gKiwgaW50IGJpbmQpOworCWludCAgICAgKCpsb29rdXApKHN0cnVjdCB0Y19hY3Rpb24gKiwgdTMyICk7CisJaW50ICAgICAoKmluaXQpKHN0cnVjdCBydGF0dHIgKixzdHJ1Y3QgcnRhdHRyICosc3RydWN0IHRjX2FjdGlvbiAqLCBpbnQgLCBpbnQgKTsKKwlpbnQgICAgICgqd2Fsaykoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKiwgaW50ICwgc3RydWN0IHRjX2FjdGlvbiAqKTsKK307CisKK2V4dGVybiBpbnQgdGNmX3JlZ2lzdGVyX2FjdGlvbihzdHJ1Y3QgdGNfYWN0aW9uX29wcyAqYSk7CitleHRlcm4gaW50IHRjZl91bnJlZ2lzdGVyX2FjdGlvbihzdHJ1Y3QgdGNfYWN0aW9uX29wcyAqYSk7CitleHRlcm4gdm9pZCB0Y2ZfYWN0aW9uX2Rlc3Ryb3koc3RydWN0IHRjX2FjdGlvbiAqYSwgaW50IGJpbmQpOworZXh0ZXJuIGludCB0Y2ZfYWN0aW9uX2V4ZWMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjX2FjdGlvbiAqYSwgc3RydWN0IHRjZl9yZXN1bHQgKnJlcyk7CitleHRlcm4gc3RydWN0IHRjX2FjdGlvbiAqdGNmX2FjdGlvbl9pbml0KHN0cnVjdCBydGF0dHIgKnJ0YSwgc3RydWN0IHJ0YXR0ciAqZXN0LCBjaGFyICpuLCBpbnQgb3ZyLCBpbnQgYmluZCwgaW50ICplcnIpOworZXh0ZXJuIHN0cnVjdCB0Y19hY3Rpb24gKnRjZl9hY3Rpb25faW5pdF8xKHN0cnVjdCBydGF0dHIgKnJ0YSwgc3RydWN0IHJ0YXR0ciAqZXN0LCBjaGFyICpuLCBpbnQgb3ZyLCBpbnQgYmluZCwgaW50ICplcnIpOworZXh0ZXJuIGludCB0Y2ZfYWN0aW9uX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjX2FjdGlvbiAqYSwgaW50LCBpbnQpOworZXh0ZXJuIGludCB0Y2ZfYWN0aW9uX2R1bXBfb2xkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0Y19hY3Rpb24gKmEsIGludCwgaW50KTsKK2V4dGVybiBpbnQgdGNmX2FjdGlvbl9kdW1wXzEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjX2FjdGlvbiAqYSwgaW50LCBpbnQpOworZXh0ZXJuIGludCB0Y2ZfYWN0aW9uX2NvcHlfc3RhdHMgKHN0cnVjdCBza19idWZmICosc3RydWN0IHRjX2FjdGlvbiAqLCBpbnQpOworI2VuZGlmIC8qIENPTkZJR19ORVRfQ0xTX0FDVCAqLworCitleHRlcm4gaW50IHRjZl9wb2xpY2Uoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjZl9wb2xpY2UgKnApOworZXh0ZXJuIHZvaWQgdGNmX3BvbGljZV9kZXN0cm95KHN0cnVjdCB0Y2ZfcG9saWNlICpwKTsKK2V4dGVybiBzdHJ1Y3QgdGNmX3BvbGljZSAqIHRjZl9wb2xpY2VfbG9jYXRlKHN0cnVjdCBydGF0dHIgKnJ0YSwgc3RydWN0IHJ0YXR0ciAqZXN0KTsKK2V4dGVybiBpbnQgdGNmX3BvbGljZV9kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0Y2ZfcG9saWNlICpwKTsKK2V4dGVybiBpbnQgdGNmX3BvbGljZV9kdW1wX3N0YXRzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0Y2ZfcG9saWNlICpwKTsKKworc3RhdGljIGlubGluZSBpbnQKK3RjZl9wb2xpY2VfcmVsZWFzZShzdHJ1Y3QgdGNmX3BvbGljZSAqcCwgaW50IGJpbmQpCit7CisJaW50IHJldCA9IDA7CisjaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUCisJaWYgKHApIHsKKwkJaWYgKGJpbmQpIHsKKwkJCSBwLT5iaW5kY250LS07CisJCX0KKwkJcC0+cmVmY250LS07CisJCWlmIChwLT5yZWZjbnQgPD0gMCAmJiAhcC0+YmluZGNudCkgeworCQkJdGNmX3BvbGljZV9kZXN0cm95KHApOworCQkJcmV0ID0gMTsKKwkJfQorCX0KKyNlbHNlCisJaWYgKHAgJiYgLS1wLT5yZWZjbnQgPT0gMCkKKwkJdGNmX3BvbGljZV9kZXN0cm95KHApOworCisjZW5kaWYgLyogQ09ORklHX05FVF9DTFNfQUNUICovCisJcmV0dXJuIHJldDsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9hZGRyY29uZi5oIGIvaW5jbHVkZS9uZXQvYWRkcmNvbmYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWY5YTEzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQvYWRkcmNvbmYuaApAQCAtMCwwICsxLDI0MCBAQAorI2lmbmRlZiBfQUREUkNPTkZfSAorI2RlZmluZSBfQUREUkNPTkZfSAorCisjZGVmaW5lIFJFVFJBTlNfVElNRVIJSFoKKworI2RlZmluZSBNQVhfUlRSX1NPTElDSVRBVElPTlMJCTMKKyNkZWZpbmUgUlRSX1NPTElDSVRBVElPTl9JTlRFUlZBTAkoNCpIWikKKworI2RlZmluZSBNSU5fVkFMSURfTElGRVRJTUUJCSgyKjM2MDApCS8qIDIgaG91cnMgKi8KKworI2RlZmluZSBURU1QX1ZBTElEX0xJRkVUSU1FCQkoNyo4NjQwMCkKKyNkZWZpbmUgVEVNUF9QUkVGRVJSRURfTElGRVRJTUUJCSg4NjQwMCkKKyNkZWZpbmUgUkVHRU5fTUFYX1JFVFJZCQkJKDUpCisjZGVmaW5lIE1BWF9ERVNZTkNfRkFDVE9SCQkoNjAwKQorCisjZGVmaW5lIEFERFJfQ0hFQ0tfRlJFUVVFTkNZCQkoMTIwKkhaKQorCisjZGVmaW5lIElQVjZfTUFYX0FERFJFU1NFUwkJMTYKKworc3RydWN0IHByZWZpeF9pbmZvIHsKKwlfX3U4CQkJdHlwZTsKKwlfX3U4CQkJbGVuZ3RoOworCV9fdTgJCQlwcmVmaXhfbGVuOworCisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU5fQklURklFTEQpCisJX191OAkJCW9ubGluayA6IDEsCisJCQkgCWF1dG9jb25mIDogMSwKKwkJCQlyZXNlcnZlZCA6IDY7CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTl9CSVRGSUVMRCkKKwlfX3U4CQkJcmVzZXJ2ZWQgOiA2LAorCQkJCWF1dG9jb25mIDogMSwKKwkJCQlvbmxpbmsgOiAxOworI2Vsc2UKKyNlcnJvciAiUGxlYXNlIGZpeCA8YXNtL2J5dGVvcmRlci5oPiIKKyNlbmRpZgorCV9fdTMyCQkJdmFsaWQ7CisJX191MzIJCQlwcmVmZXJlZDsKKwlfX3UzMgkJCXJlc2VydmVkMjsKKworCXN0cnVjdCBpbjZfYWRkcgkJcHJlZml4OworfTsKKworCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvaW42Lmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bmV0L2lmX2luZXQ2Lmg+CisKKyNkZWZpbmUgSU42X0FERFJfSFNJWkUJCTE2CisKK2V4dGVybiBpbnQJCQlhZGRyY29uZl9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQJCQlhZGRyY29uZl9jbGVhbnVwKHZvaWQpOworCitleHRlcm4gaW50CQkJYWRkcmNvbmZfYWRkX2lmYWRkcih2b2lkIF9fdXNlciAqYXJnKTsKK2V4dGVybiBpbnQJCQlhZGRyY29uZl9kZWxfaWZhZGRyKHZvaWQgX191c2VyICphcmcpOworZXh0ZXJuIGludAkJCWFkZHJjb25mX3NldF9kc3RhZGRyKHZvaWQgX191c2VyICphcmcpOworCitleHRlcm4gaW50CQkJaXB2Nl9jaGtfYWRkcihzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsCisJCQkJCSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCSAgICAgIGludCBzdHJpY3QpOworZXh0ZXJuIHN0cnVjdCBpbmV0Nl9pZmFkZHIgKglpcHY2X2dldF9pZmFkZHIoc3RydWN0IGluNl9hZGRyICphZGRyLAorCQkJCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJCWludCBzdHJpY3QpOworZXh0ZXJuIGludAkJCWlwdjZfZ2V0X3NhZGRyKHN0cnVjdCBkc3RfZW50cnkgKmRzdCwgCisJCQkJCSAgICAgICBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAorCQkJCQkgICAgICAgc3RydWN0IGluNl9hZGRyICpzYWRkcik7CitleHRlcm4gaW50CQkJaXB2Nl9kZXZfZ2V0X3NhZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIAorCQkJCQkgICAgICAgc3RydWN0IGluNl9hZGRyICpkYWRkciwKKwkJCQkJICAgICAgIHN0cnVjdCBpbjZfYWRkciAqc2FkZHIpOworZXh0ZXJuIGludAkJCWlwdjZfZ2V0X2xsYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaW42X2FkZHIgKik7CitleHRlcm4gaW50CQkJaXB2Nl9yY3Zfc2FkZHJfZXF1YWwoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCAKKwkJCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBzb2NrICpzazIpOworZXh0ZXJuIHZvaWQJCQlhZGRyY29uZl9qb2luX3NvbGljdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQlzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpOworZXh0ZXJuIHZvaWQJCQlhZGRyY29uZl9sZWF2ZV9zb2xpY3Qoc3RydWN0IGluZXQ2X2RldiAqaWRldiwKKwkJCQkJc3RydWN0IGluNl9hZGRyICphZGRyKTsKKworLyoKKyAqCW11bHRpY2FzdCBwcm90b3R5cGVzIChtY2FzdC5jKQorICovCitleHRlcm4gaW50IGlwdjZfc29ja19tY19qb2luKHN0cnVjdCBzb2NrICpzaywgaW50IGlmaW5kZXgsIAorCQkgIHN0cnVjdCBpbjZfYWRkciAqYWRkcik7CitleHRlcm4gaW50IGlwdjZfc29ja19tY19kcm9wKHN0cnVjdCBzb2NrICpzaywgaW50IGlmaW5kZXgsIAorCQkgIHN0cnVjdCBpbjZfYWRkciAqYWRkcik7CitleHRlcm4gdm9pZCBpcHY2X3NvY2tfbWNfY2xvc2Uoc3RydWN0IHNvY2sgKnNrKTsKK2V4dGVybiBpbnQgaW5ldDZfbWNfY2hlY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW42X2FkZHIgKm1jX2FkZHIsCisJCXN0cnVjdCBpbjZfYWRkciAqc3JjX2FkZHIpOworCitleHRlcm4gaW50IGlwdjZfZGV2X21jX2luYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpOworZXh0ZXJuIGludCBfX2lwdjZfZGV2X21jX2RlYyhzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2LCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpOworZXh0ZXJuIGludCBpcHY2X2Rldl9tY19kZWMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGluNl9hZGRyICphZGRyKTsKK2V4dGVybiB2b2lkIGlwdjZfbWNfdXAoc3RydWN0IGluZXQ2X2RldiAqaWRldik7CitleHRlcm4gdm9pZCBpcHY2X21jX2Rvd24oc3RydWN0IGluZXQ2X2RldiAqaWRldik7CitleHRlcm4gdm9pZCBpcHY2X21jX2luaXRfZGV2KHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpOworZXh0ZXJuIHZvaWQgaXB2Nl9tY19kZXN0cm95X2RldihzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KTsKK2V4dGVybiB2b2lkIGFkZHJjb25mX2RhZF9mYWlsdXJlKHN0cnVjdCBpbmV0Nl9pZmFkZHIgKmlmcCk7CisKK2V4dGVybiBpbnQgaXB2Nl9jaGtfbWNhc3RfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaW42X2FkZHIgKmdyb3VwLAorCQlzdHJ1Y3QgaW42X2FkZHIgKnNyY19hZGRyKTsKK2V4dGVybiBpbnQgaXB2Nl9pc19tbGQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIpOworCitleHRlcm4gdm9pZCBhZGRyY29uZl9wcmVmaXhfcmN2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpvcHQsIGludCBsZW4pOworCitleHRlcm4gaW50IGlwdjZfZ2V0X2hvcGxpbWl0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworCisvKgorICoJYW55Y2FzdCBwcm90b3R5cGVzIChhbnljYXN0LmMpCisgKi8KK2V4dGVybiBpbnQgaXB2Nl9zb2NrX2FjX2pvaW4oc3RydWN0IHNvY2sgKnNrLGludCBpZmluZGV4LHN0cnVjdCBpbjZfYWRkciAqYWRkcik7CitleHRlcm4gaW50IGlwdjZfc29ja19hY19kcm9wKHN0cnVjdCBzb2NrICpzayxpbnQgaWZpbmRleCxzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpOworZXh0ZXJuIHZvaWQgaXB2Nl9zb2NrX2FjX2Nsb3NlKHN0cnVjdCBzb2NrICpzayk7CitleHRlcm4gaW50IGluZXQ2X2FjX2NoZWNrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGluNl9hZGRyICphZGRyLCBpbnQgaWZpbmRleCk7CisKK2V4dGVybiBpbnQgaXB2Nl9kZXZfYWNfaW5jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpbjZfYWRkciAqYWRkcik7CitleHRlcm4gaW50IF9faXB2Nl9kZXZfYWNfZGVjKHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYsIHN0cnVjdCBpbjZfYWRkciAqYWRkcik7CitleHRlcm4gaW50IGlwdjZfY2hrX2FjYXN0X2FkZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGluNl9hZGRyICphZGRyKTsKKworCisvKiBEZXZpY2Ugbm90aWZpZXIgKi8KK2V4dGVybiBpbnQgcmVnaXN0ZXJfaW5ldDZhZGRyX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpOworZXh0ZXJuIGludCB1bnJlZ2lzdGVyX2luZXQ2YWRkcl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgaW5ldDZfZGV2ICoKK19faW42X2Rldl9nZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gKHN0cnVjdCBpbmV0Nl9kZXYgKilkZXYtPmlwNl9wdHI7Cit9CisKK2V4dGVybiByd2xvY2tfdCBhZGRyY29uZl9sb2NrOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpbmV0Nl9kZXYgKgoraW42X2Rldl9nZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2ID0gTlVMTDsKKwlyZWFkX2xvY2soJmFkZHJjb25mX2xvY2spOworCWlkZXYgPSBkZXYtPmlwNl9wdHI7CisJaWYgKGlkZXYpCisJCWF0b21pY19pbmMoJmlkZXYtPnJlZmNudCk7CisJcmVhZF91bmxvY2soJmFkZHJjb25mX2xvY2spOworCXJldHVybiBpZGV2OworfQorCitleHRlcm4gdm9pZCBpbjZfZGV2X2ZpbmlzaF9kZXN0cm95KHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpOworCitzdGF0aWMgaW5saW5lIHZvaWQKK2luNl9kZXZfcHV0KHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpCit7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmlkZXYtPnJlZmNudCkpCisJCWluNl9kZXZfZmluaXNoX2Rlc3Ryb3koaWRldik7Cit9CisKKyNkZWZpbmUgX19pbjZfZGV2X3B1dChpZGV2KSAgYXRvbWljX2RlYygmKGlkZXYpLT5yZWZjbnQpCisjZGVmaW5lIGluNl9kZXZfaG9sZChpZGV2KSAgIGF0b21pY19pbmMoJihpZGV2KS0+cmVmY250KQorCisKK2V4dGVybiB2b2lkIGluZXQ2X2lmYV9maW5pc2hfZGVzdHJveShzdHJ1Y3QgaW5ldDZfaWZhZGRyICppZnApOworCitzdGF0aWMgaW5saW5lIHZvaWQgaW42X2lmYV9wdXQoc3RydWN0IGluZXQ2X2lmYWRkciAqaWZwKQoreworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZpZnAtPnJlZmNudCkpCisJCWluZXQ2X2lmYV9maW5pc2hfZGVzdHJveShpZnApOworfQorCisjZGVmaW5lIF9faW42X2lmYV9wdXQoaWZwKQlhdG9taWNfZGVjKCYoaWZwKS0+cmVmY250KQorI2RlZmluZSBpbjZfaWZhX2hvbGQoaWZwKQlhdG9taWNfaW5jKCYoaWZwKS0+cmVmY250KQorCisKK2V4dGVybiB2b2lkCQkJYWRkcmNvbmZfZm9yd2FyZGluZ19vbih2b2lkKTsKKy8qCisgKglIYXNoIGZ1bmN0aW9uIHRha2VuIGZyb20gbmV0X2FsaWFzLmMKKyAqLworCitzdGF0aWMgX19pbmxpbmVfXyB1OCBpcHY2X2FkZHJfaGFzaChjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpCit7CQorCV9fdTMyIHdvcmQ7CisKKwkvKiAKKwkgKiBXZSBwZXJmb3JtIHRoZSBoYXNoIGZ1bmN0aW9uIG92ZXIgdGhlIGxhc3QgNjQgYml0cyBvZiB0aGUgYWRkcmVzcworCSAqIFRoaXMgd2lsbCBpbmNsdWRlIHRoZSBJRUVFIGFkZHJlc3MgdG9rZW4gb24gbGlua3MgdGhhdCBzdXBwb3J0IGl0LgorCSAqLworCisJd29yZCA9IGFkZHItPnM2X2FkZHIzMlsyXSBeIGFkZHItPnM2X2FkZHIzMlszXTsKKwl3b3JkIF49ICh3b3JkID4+IDE2KTsKKwl3b3JkIF49ICh3b3JkID4+IDgpOworCisJcmV0dXJuICgod29yZCBeICh3b3JkID4+IDQpKSAmIDB4MGYpOworfQorCisvKgorICoJY29tcHV0ZSBsaW5rLWxvY2FsIHNvbGljaXRlZC1ub2RlIG11bHRpY2FzdCBhZGRyZXNzCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkIGFkZHJjb25mX2FkZHJfc29saWN0X211bHQoY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyLAorCQkJCQkgICAgIHN0cnVjdCBpbjZfYWRkciAqc29saWNpdGVkKQoreworCWlwdjZfYWRkcl9zZXQoc29saWNpdGVkLAorCQkgICAgICBfX2NvbnN0YW50X2h0b25sKDB4RkYwMjAwMDApLCAwLAorCQkgICAgICBfX2NvbnN0YW50X2h0b25sKDB4MSksCisJCSAgICAgIF9fY29uc3RhbnRfaHRvbmwoMHhGRjAwMDAwMCkgfCBhZGRyLT5zNl9hZGRyMzJbM10pOworfQorCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpcHY2X2FkZHJfYWxsX25vZGVzKHN0cnVjdCBpbjZfYWRkciAqYWRkcikKK3sKKwlpcHY2X2FkZHJfc2V0KGFkZHIsCisJCSAgICAgIF9fY29uc3RhbnRfaHRvbmwoMHhGRjAyMDAwMCksIDAsIDAsCisJCSAgICAgIF9fY29uc3RhbnRfaHRvbmwoMHgxKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpcHY2X2FkZHJfYWxsX3JvdXRlcnMoc3RydWN0IGluNl9hZGRyICphZGRyKQoreworCWlwdjZfYWRkcl9zZXQoYWRkciwKKwkJICAgICAgX19jb25zdGFudF9odG9ubCgweEZGMDIwMDAwKSwgMCwgMCwKKwkJICAgICAgX19jb25zdGFudF9odG9ubCgweDIpKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgaXB2Nl9hZGRyX2lzX211bHRpY2FzdChjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpCit7CisJcmV0dXJuIChhZGRyLT5zNl9hZGRyMzJbMF0gJiBfX2NvbnN0YW50X2h0b25sKDB4RkYwMDAwMDApKSA9PSBfX2NvbnN0YW50X2h0b25sKDB4RkYwMDAwMDApOworfQorCitzdGF0aWMgaW5saW5lIGludCBpcHY2X2FkZHJfaXNfbGxfYWxsX25vZGVzKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcikKK3sKKwlyZXR1cm4gKGFkZHItPnM2X2FkZHIzMlswXSA9PSBodG9ubCgweGZmMDIwMDAwKSAmJgorCQlhZGRyLT5zNl9hZGRyMzJbMV0gPT0gMCAmJgorCQlhZGRyLT5zNl9hZGRyMzJbMl0gPT0gMCAmJgorCQlhZGRyLT5zNl9hZGRyMzJbM10gPT0gaHRvbmwoMHgwMDAwMDAwMSkpOworfQorCitzdGF0aWMgaW5saW5lIGludCBpcHY2X2FkZHJfaXNfbGxfYWxsX3JvdXRlcnMoY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKQoreworCXJldHVybiAoYWRkci0+czZfYWRkcjMyWzBdID09IGh0b25sKDB4ZmYwMjAwMDApICYmCisJCWFkZHItPnM2X2FkZHIzMlsxXSA9PSAwICYmCisJCWFkZHItPnM2X2FkZHIzMlsyXSA9PSAwICYmCisJCWFkZHItPnM2X2FkZHIzMlszXSA9PSBodG9ubCgweDAwMDAwMDAyKSk7Cit9CisKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9hZl91bml4LmggYi9pbmNsdWRlL25ldC9hZl91bml4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYwYjM4NAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L2FmX3VuaXguaApAQCAtMCwwICsxLDc4IEBACisjaWZuZGVmIF9fTElOVVhfTkVUX0FGVU5JWF9ICisjZGVmaW5lIF9fTElOVVhfTkVUX0FGVU5JWF9ICitleHRlcm4gdm9pZCB1bml4X2luZmxpZ2h0KHN0cnVjdCBmaWxlICpmcCk7CitleHRlcm4gdm9pZCB1bml4X25vdGluZmxpZ2h0KHN0cnVjdCBmaWxlICpmcCk7CitleHRlcm4gdm9pZCB1bml4X2djKHZvaWQpOworCisjZGVmaW5lIFVOSVhfSEFTSF9TSVpFCTI1NgorCitleHRlcm4gc3RydWN0IGhsaXN0X2hlYWQgdW5peF9zb2NrZXRfdGFibGVbVU5JWF9IQVNIX1NJWkUgKyAxXTsKK2V4dGVybiByd2xvY2tfdCB1bml4X3RhYmxlX2xvY2s7CisKK2V4dGVybiBhdG9taWNfdCB1bml4X3RvdF9pbmZsaWdodDsKKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc29jayAqZmlyc3RfdW5peF9zb2NrZXQoaW50ICppKQoreworCWZvciAoKmkgPSAwOyAqaSA8PSBVTklYX0hBU0hfU0laRTsgKCppKSsrKSB7CisJCWlmICghaGxpc3RfZW1wdHkoJnVuaXhfc29ja2V0X3RhYmxlWyppXSkpCisJCQlyZXR1cm4gX19za19oZWFkKCZ1bml4X3NvY2tldF90YWJsZVsqaV0pOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc29jayAqbmV4dF91bml4X3NvY2tldChpbnQgKmksIHN0cnVjdCBzb2NrICpzKQoreworCXN0cnVjdCBzb2NrICpuZXh0ID0gc2tfbmV4dChzKTsKKwkvKiBNb3JlIGluIHRoaXMgY2hhaW4/ICovCisJaWYgKG5leHQpCisJCXJldHVybiBuZXh0OworCS8qIExvb2sgZm9yIG5leHQgbm9uLWVtcHR5IGNoYWluLiAqLworCWZvciAoKCppKSsrOyAqaSA8PSBVTklYX0hBU0hfU0laRTsgKCppKSsrKSB7CisJCWlmICghaGxpc3RfZW1wdHkoJnVuaXhfc29ja2V0X3RhYmxlWyppXSkpCisJCQlyZXR1cm4gX19za19oZWFkKCZ1bml4X3NvY2tldF90YWJsZVsqaV0pOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworI2RlZmluZSBmb3JhbGxfdW5peF9zb2NrZXRzKGksIHMpIFwKKwlmb3IgKHMgPSBmaXJzdF91bml4X3NvY2tldCgmKGkpKTsgczsgcyA9IG5leHRfdW5peF9zb2NrZXQoJihpKSwocykpKQorCitzdHJ1Y3QgdW5peF9hZGRyZXNzIHsKKwlhdG9taWNfdAlyZWZjbnQ7CisJaW50CQlsZW47CisJdW5zaWduZWQJaGFzaDsKKwlzdHJ1Y3Qgc29ja2FkZHJfdW4gbmFtZVswXTsKK307CisKK3N0cnVjdCB1bml4X3NrYl9wYXJtcyB7CisJc3RydWN0IHVjcmVkCQljcmVkczsJCS8qIFNrYiBjcmVkZW50aWFscwkqLworCXN0cnVjdCBzY21fZnBfbGlzdAkqZnA7CQkvKiBQYXNzZWQgZmlsZXMJCSovCit9OworCisjZGVmaW5lIFVOSVhDQihza2IpIAkoKihzdHJ1Y3QgdW5peF9za2JfcGFybXMqKSYoKHNrYiktPmNiKSkKKyNkZWZpbmUgVU5JWENSRURTKHNrYikJKCZVTklYQ0IoKHNrYikpLmNyZWRzKQorCisjZGVmaW5lIHVuaXhfc3RhdGVfcmxvY2socykJcmVhZF9sb2NrKCZ1bml4X3NrKHMpLT5sb2NrKQorI2RlZmluZSB1bml4X3N0YXRlX3J1bmxvY2socykJcmVhZF91bmxvY2soJnVuaXhfc2socyktPmxvY2spCisjZGVmaW5lIHVuaXhfc3RhdGVfd2xvY2socykJd3JpdGVfbG9jaygmdW5peF9zayhzKS0+bG9jaykKKyNkZWZpbmUgdW5peF9zdGF0ZV93dW5sb2NrKHMpCXdyaXRlX3VubG9jaygmdW5peF9zayhzKS0+bG9jaykKKworI2lmZGVmIF9fS0VSTkVMX18KKy8qIFRoZSBBRl9VTklYIHNvY2tldCAqLworc3RydWN0IHVuaXhfc29jayB7CisJLyogV0FSTklORzogc2sgaGFzIHRvIGJlIHRoZSBmaXJzdCBtZW1iZXIgKi8KKwlzdHJ1Y3Qgc29jawkJc2s7CisgICAgICAgIHN0cnVjdCB1bml4X2FkZHJlc3MgICAgICphZGRyOworICAgICAgICBzdHJ1Y3QgZGVudHJ5CQkqZGVudHJ5OworICAgICAgICBzdHJ1Y3QgdmZzbW91bnQJCSptbnQ7CisgICAgICAgIHN0cnVjdCBzZW1hcGhvcmUgICAgICAgIHJlYWRzZW07CisgICAgICAgIHN0cnVjdCBzb2NrCQkqcGVlcjsKKyAgICAgICAgc3RydWN0IHNvY2sJCSpvdGhlcjsKKyAgICAgICAgc3RydWN0IHNvY2sJCSpnY190cmVlOworICAgICAgICBhdG9taWNfdCAgICAgICAgICAgICAgICBpbmZsaWdodDsKKyAgICAgICAgcndsb2NrX3QgICAgICAgICAgICAgICAgbG9jazsKKyAgICAgICAgd2FpdF9xdWV1ZV9oZWFkX3QgICAgICAgcGVlcl93YWl0OworfTsKKyNkZWZpbmUgdW5peF9zayhfX3NrKSAoKHN0cnVjdCB1bml4X3NvY2sgKilfX3NrKQorI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2FoLmggYi9pbmNsdWRlL25ldC9haC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlZmYwMGEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9haC5oCkBAIC0wLDAgKzEsMzUgQEAKKyNpZm5kZWYgX05FVF9BSF9ICisjZGVmaW5lIF9ORVRfQUhfSAorCisjaW5jbHVkZSA8bmV0L3hmcm0uaD4KKworLyogVGhpcyBpcyB0aGUgbWF4aW11bSB0cnVuY2F0ZWQgSUNWIGxlbmd0aCB0aGF0IHdlIGtub3cgb2YuICovCisjZGVmaW5lIE1BWF9BSF9BVVRIX0xFTgkxMgorCitzdHJ1Y3QgYWhfZGF0YQoreworCXU4CQkJKmtleTsKKwlpbnQJCQlrZXlfbGVuOworCXU4CQkJKndvcmtfaWN2OworCWludAkJCWljdl9mdWxsX2xlbjsKKwlpbnQJCQlpY3ZfdHJ1bmNfbGVuOworCisJdm9pZAkJCSgqaWN2KShzdHJ1Y3QgYWhfZGF0YSosCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHU4ICppY3YpOworCisJc3RydWN0IGNyeXB0b190Zm0JKnRmbTsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorYWhfaG1hY19kaWdlc3Qoc3RydWN0IGFoX2RhdGEgKmFocCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggKmF1dGhfZGF0YSkKK3sKKwlzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtID0gYWhwLT50Zm07CisKKwltZW1zZXQoYXV0aF9kYXRhLCAwLCBhaHAtPmljdl90cnVuY19sZW4pOworCWNyeXB0b19obWFjX2luaXQodGZtLCBhaHAtPmtleSwgJmFocC0+a2V5X2xlbik7CisJc2tiX2ljdl93YWxrKHNrYiwgdGZtLCAwLCBza2ItPmxlbiwgY3J5cHRvX2htYWNfdXBkYXRlKTsKKwljcnlwdG9faG1hY19maW5hbCh0Zm0sIGFocC0+a2V5LCAmYWhwLT5rZXlfbGVuLCBhaHAtPndvcmtfaWN2KTsKKwltZW1jcHkoYXV0aF9kYXRhLCBhaHAtPndvcmtfaWN2LCBhaHAtPmljdl90cnVuY19sZW4pOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2FycC5oIGIvaW5jbHVkZS9uZXQvYXJwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFmMDlmYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L2FycC5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qIGxpbnV4L25ldC9pbmV0L2FycC5oICovCisjaWZuZGVmIF9BUlBfSAorI2RlZmluZSBfQVJQX0gKKworI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPG5ldC9uZWlnaGJvdXIuaD4KKworI2RlZmluZSBIQVZFX0FSUF9DUkVBVEUKKworZXh0ZXJuIHN0cnVjdCBuZWlnaF90YWJsZSBhcnBfdGJsOworCitleHRlcm4gdm9pZAlhcnBfaW5pdCh2b2lkKTsKK2V4dGVybiBpbnQJYXJwX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJc3RydWN0IHBhY2tldF90eXBlICpwdCk7CitleHRlcm4gaW50CWFycF9maW5kKHVuc2lnbmVkIGNoYXIgKmhhZGRyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQJYXJwX2lvY3RsKHVuc2lnbmVkIGludCBjbWQsIHZvaWQgX191c2VyICphcmcpOworZXh0ZXJuIHZvaWQgICAgIGFycF9zZW5kKGludCB0eXBlLCBpbnQgcHR5cGUsIHUzMiBkZXN0X2lwLCAKKwkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgc3JjX2lwLCAKKwkJCSB1bnNpZ25lZCBjaGFyICpkZXN0X2h3LCB1bnNpZ25lZCBjaGFyICpzcmNfaHcsIHVuc2lnbmVkIGNoYXIgKnRoKTsKK2V4dGVybiBpbnQJYXJwX2JpbmRfbmVpZ2hib3VyKHN0cnVjdCBkc3RfZW50cnkgKmRzdCk7CitleHRlcm4gaW50CWFycF9tY19tYXAodTMyIGFkZHIsIHU4ICpoYWRkciwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGRpcik7CitleHRlcm4gdm9pZAlhcnBfaWZkb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworCitleHRlcm4gc3RydWN0IHNrX2J1ZmYgKmFycF9jcmVhdGUoaW50IHR5cGUsIGludCBwdHlwZSwgdTMyIGRlc3RfaXAsCisJCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgc3JjX2lwLAorCQkJCSAgdW5zaWduZWQgY2hhciAqZGVzdF9odywgdW5zaWduZWQgY2hhciAqc3JjX2h3LAorCQkJCSAgdW5zaWduZWQgY2hhciAqdGFyZ2V0X2h3KTsKK2V4dGVybiB2b2lkIGFycF94bWl0KHN0cnVjdCBza19idWZmICpza2IpOworCitleHRlcm4gc3RydWN0IG5laWdoX29wcyBhcnBfYnJva2VuX29wczsKKworI2VuZGlmCS8qIF9BUlBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYXRtY2xpcC5oIGIvaW5jbHVkZS9uZXQvYXRtY2xpcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3MDQ4YjEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9hdG1jbGlwLmgKQEAgLTAsMCArMSw2MiBAQAorLyogbmV0L2F0bS9hdG1hcnAuaCAtIFJGQzE1NzcgQVRNIEFSUCAqLworIAorLyogV3JpdHRlbiAxOTk1LTIwMDAgYnkgV2VybmVyIEFsbWVzYmVyZ2VyLCBFUEZMIExSQy9JQ0EgKi8KKyAKKyAKKyNpZm5kZWYgX0FUTUNMSVBfSAorI2RlZmluZSBfQVRNQ0xJUF9ICisKKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9hdG0uaD4KKyNpbmNsdWRlIDxsaW51eC9hdG1kZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9hdG1hcnAuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPG5ldC9uZWlnaGJvdXIuaD4KKworCisjZGVmaW5lIENMSVBfVkNDKHZjYykgKChzdHJ1Y3QgY2xpcF92Y2MgKikgKCh2Y2MpLT51c2VyX2JhY2spKQorI2RlZmluZSBORUlHSDJFTlRSWShuZWlnaCkgKChzdHJ1Y3QgYXRtYXJwX2VudHJ5ICopIChuZWlnaCktPnByaW1hcnlfa2V5KQorCisKK3N0cnVjdCBjbGlwX3ZjYyB7CisJc3RydWN0IGF0bV92Y2MJKnZjYzsJCS8qIFZDQyBkZXNjcmlwdG9yICovCisJc3RydWN0IGF0bWFycF9lbnRyeSAqZW50cnk7CS8qIEFUTUFSUCB0YWJsZSBlbnRyeSwgTlVMTCBpZiBJUCBhZGRyLgorCQkJCQkgICBpc24ndCBrbm93biB5ZXQgKi8KKwlpbnQJCXhvZmY7CQkvKiAxIGlmIHNlbmQgYnVmZmVyIGlzIGZ1bGwgKi8KKwl1bnNpZ25lZCBjaGFyCWVuY2FwOwkJLyogMDogTlVMTCwgMTogTExDL1NOQVAgKi8KKwl1bnNpZ25lZCBsb25nCWxhc3RfdXNlOwkvKiBsYXN0IHNlbmQgb3IgcmVjZWl2ZSBvcGVyYXRpb24gKi8KKwl1bnNpZ25lZCBsb25nCWlkbGVfdGltZW91dDsJLyoga2VlcCBvcGVuIGlkbGUgZm9yIHNvIG1hbnkgamlmZmllcyovCisJdm9pZCAoKm9sZF9wdXNoKShzdHJ1Y3QgYXRtX3ZjYyAqdmNjLHN0cnVjdCBza19idWZmICpza2IpOworCQkJCQkvKiBrZWVwIG9sZCBwdXNoIGZuIGZvciBjaGFpbmluZyAqLworCXZvaWQgKCpvbGRfcG9wKShzdHJ1Y3QgYXRtX3ZjYyAqdmNjLHN0cnVjdCBza19idWZmICpza2IpOworCQkJCQkvKiBrZWVwIG9sZCBwb3AgZm4gZm9yIGNoYWluaW5nICovCisJc3RydWN0IGNsaXBfdmNjCSpuZXh0OwkJLyogbmV4dCBWQ0MgKi8KK307CisKKworc3RydWN0IGF0bWFycF9lbnRyeSB7CisJdTMyCQlpcDsJCS8qIElQIGFkZHJlc3MgKi8KKwlzdHJ1Y3QgY2xpcF92Y2MJKnZjY3M7CQkvKiBhY3RpdmUgVkNDczsgTlVMTCBpZiByZXNvbHV0aW9uIGlzCisJCQkJCSAgIHBlbmRpbmcgKi8KKwl1bnNpZ25lZCBsb25nCWV4cGlyZXM7CS8qIGVudHJ5IGV4cGlyYXRpb24gdGltZSAqLworCXN0cnVjdCBuZWlnaGJvdXIgKm5laWdoOwkvKiBuZWlnaGJvdXIgYmFjay1wb2ludGVyICovCit9OworCisKKyNkZWZpbmUgUFJJVihkZXYpICgoc3RydWN0IGNsaXBfcHJpdiAqKSBuZXRkZXZfcHJpdihkZXYpKQorCisKK3N0cnVjdCBjbGlwX3ByaXYgeworCWludCBudW1iZXI7CQkJLyogZm9yIGNvbnZlbmllbmNlIC4uLiAqLworCXNwaW5sb2NrX3QgeG9mZl9sb2NrOwkJLyogZW5zdXJlcyB0aGF0IHBvcCBpcyBhdG9taWMgKFNNUCkgKi8KKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV4dDsJLyogbmV4dCBDTElQIGludGVyZmFjZSAqLworfTsKKworCisjaWZkZWYgX19LRVJORUxfXworZXh0ZXJuIHN0cnVjdCBuZWlnaF90YWJsZSAqY2xpcF90YmxfaG9vazsKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2F4MjUuaCBiL2luY2x1ZGUvbmV0L2F4MjUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjk1ZWNiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQvYXgyNS5oCkBAIC0wLDAgKzEsMzg1IEBACisvKgorICoJRGVjbGFyYXRpb25zIG9mIEFYLjI1IHR5cGUgb2JqZWN0cy4KKyAqCisgKglBbGFuIENveCAoR1c0UFRTKSAJMTAvMTEvOTMKKyAqLworI2lmbmRlZiBfQVgyNV9ICisjZGVmaW5lIF9BWDI1X0ggCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9heDI1Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisKKyNkZWZpbmUJQVgyNV9UMUNMQU1QTE8gIAkJMQorI2RlZmluZQlBWDI1X1QxQ0xBTVBISSAJCQkoMzAgKiBIWikKKworI2RlZmluZQlBWDI1X0JQUV9IRUFERVJfTEVOCQkxNgorI2RlZmluZQlBWDI1X0tJU1NfSEVBREVSX0xFTgkJMQorCisjZGVmaW5lCUFYMjVfSEVBREVSX0xFTgkJCTE3CisjZGVmaW5lCUFYMjVfQUREUl9MRU4JCQk3CisjZGVmaW5lCUFYMjVfRElHSV9IRUFERVJfTEVOCQkoQVgyNV9NQVhfRElHSVMgKiBBWDI1X0FERFJfTEVOKQorI2RlZmluZQlBWDI1X01BWF9IRUFERVJfTEVOCQkoQVgyNV9IRUFERVJfTEVOICsgQVgyNV9ESUdJX0hFQURFUl9MRU4pCisKKy8qIEFYLjI1IFByb3RvY29sIElEcyAqLworI2RlZmluZSBBWDI1X1BfUk9TRQkJCTB4MDEKKyNkZWZpbmUgQVgyNV9QX0lQCQkJMHhDQworI2RlZmluZSBBWDI1X1BfQVJQCQkJMHhDRAorI2RlZmluZSBBWDI1X1BfVEVYVCAJCQkweEYwCisjZGVmaW5lIEFYMjVfUF9ORVRST00gCQkJMHhDRgorI2RlZmluZQlBWDI1X1BfU0VHTUVOVAkJCTB4MDgKKworLyogQVguMjUgU2VnbWVudCBjb250cm9sIHZhbHVlcyAqLworI2RlZmluZQlBWDI1X1NFR19SRU0JCQkweDdGCisjZGVmaW5lCUFYMjVfU0VHX0ZJUlNUCQkJMHg4MAorCisjZGVmaW5lIEFYMjVfQ0JJVAkJCTB4ODAJLyogQ29tbWFuZC9SZXNwb25zZSBiaXQgKi8KKyNkZWZpbmUgQVgyNV9FQklUCQkJMHgwMQkvKiBIRExDIEFkZHJlc3MgRXh0ZW5zaW9uIGJpdCAqLworI2RlZmluZSBBWDI1X0hCSVQJCQkweDgwCS8qIEhhcyBiZWVuIHJlcGVhdGVkIGJpdCAqLworCisjZGVmaW5lIEFYMjVfU1NTSURfU1BBUkUJCTB4NjAJLyogVW51c2VkIGJpdHMgaW4gU1NJRCBmb3Igc3RhbmRhcmQgQVguMjUgKi8KKyNkZWZpbmUgQVgyNV9FU1NJRF9TUEFSRQkJMHgyMAkvKiBVbnVzZWQgYml0cyBpbiBTU0lEIGZvciBleHRlbmRlZCBBWC4yNSAqLworI2RlZmluZSBBWDI1X0RBTUFfRkxBRwkJCTB4MjAJLyogV2VsbCwgaXQgaXMgKk5PVCogdW51c2VkISAoZGwxYmtlIDk1MTEyMSAqLworCisjZGVmaW5lCUFYMjVfQ09ORF9BQ0tfUEVORElORwkJMHgwMQorI2RlZmluZQlBWDI1X0NPTkRfUkVKRUNUCQkweDAyCisjZGVmaW5lCUFYMjVfQ09ORF9QRUVSX1JYX0JVU1kJCTB4MDQKKyNkZWZpbmUJQVgyNV9DT05EX09XTl9SWF9CVVNZCQkweDA4CisjZGVmaW5lCUFYMjVfQ09ORF9EQU1BX01PREUJCTB4MTAKKworI2lmbmRlZiBfTElOVVhfTkVUREVWSUNFX0gKKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNlbmRpZgorCisvKiBVcHBlciBzdWItbGF5ZXIgKExBUEIpIGRlZmluaXRpb25zICovCisKKy8qIENvbnRyb2wgZmllbGQgdGVtcGxhdGVzICovCisjZGVmaW5lCUFYMjVfSQkJCTB4MDAJLyogSW5mb3JtYXRpb24gZnJhbWVzICovCisjZGVmaW5lCUFYMjVfUwkJCTB4MDEJLyogU3VwZXJ2aXNvcnkgZnJhbWVzICovCisjZGVmaW5lCUFYMjVfUlIJCQkweDAxCS8qIFJlY2VpdmVyIHJlYWR5ICovCisjZGVmaW5lCUFYMjVfUk5SCQkweDA1CS8qIFJlY2VpdmVyIG5vdCByZWFkeSAqLworI2RlZmluZQlBWDI1X1JFSgkJMHgwOQkvKiBSZWplY3QgKi8KKyNkZWZpbmUJQVgyNV9VCQkJMHgwMwkvKiBVbm51bWJlcmVkIGZyYW1lcyAqLworI2RlZmluZQlBWDI1X1NBQk0JCTB4MmYJLyogU2V0IEFzeW5jaHJvbm91cyBCYWxhbmNlZCBNb2RlICovCisjZGVmaW5lCUFYMjVfU0FCTUUJCTB4NmYJLyogU2V0IEFzeW5jaHJvbm91cyBCYWxhbmNlZCBNb2RlIEV4dGVuZGVkICovCisjZGVmaW5lCUFYMjVfRElTQwkJMHg0MwkvKiBEaXNjb25uZWN0ICovCisjZGVmaW5lCUFYMjVfRE0JCQkweDBmCS8qIERpc2Nvbm5lY3RlZCBtb2RlICovCisjZGVmaW5lCUFYMjVfVUEJCQkweDYzCS8qIFVubnVtYmVyZWQgYWNrbm93bGVkZ2UgKi8KKyNkZWZpbmUJQVgyNV9GUk1SCQkweDg3CS8qIEZyYW1lIHJlamVjdCAqLworI2RlZmluZQlBWDI1X1VJCQkJMHgwMwkvKiBVbm51bWJlcmVkIGluZm9ybWF0aW9uICovCisjZGVmaW5lCUFYMjVfWElECQkweGFmCS8qIEV4Y2hhbmdlIGluZm9ybWF0aW9uICovCisjZGVmaW5lCUFYMjVfVEVTVAkJMHhlMwkvKiBUZXN0ICovCisKKyNkZWZpbmUJQVgyNV9QRgkJCTB4MTAJLyogUG9sbC9maW5hbCBiaXQgZm9yIHN0YW5kYXJkIEFYLjI1ICovCisjZGVmaW5lCUFYMjVfRVBGCQkweDAxCS8qIFBvbGwvZmluYWwgYml0IGZvciBleHRlbmRlZCBBWC4yNSAqLworCisjZGVmaW5lIEFYMjVfSUxMRUdBTAkJMHgxMDAJLyogSW1wb3NzaWJsZSB0byBiZSBhIHJlYWwgZnJhbWUgdHlwZSAqLworCisjZGVmaW5lCUFYMjVfUE9MTE9GRgkJMAorI2RlZmluZQlBWDI1X1BPTExPTgkJMQorCisvKiBBWDI1IEwyIEMtYml0ICovCisjZGVmaW5lIEFYMjVfQ09NTUFORAkJMQorI2RlZmluZSBBWDI1X1JFU1BPTlNFCQkyCisKKy8qIERlZmluZSBMaW5rIFN0YXRlIGNvbnN0YW50cy4gKi8KKworZW51bSB7IAorCUFYMjVfU1RBVEVfMCwKKwlBWDI1X1NUQVRFXzEsCisJQVgyNV9TVEFURV8yLAorCUFYMjVfU1RBVEVfMywKKwlBWDI1X1NUQVRFXzQKK307CisKKyNkZWZpbmUgQVgyNV9NT0RVTFVTIAkJOAkvKiAgU3RhbmRhcmQgQVguMjUgbW9kdWx1cyAqLworI2RlZmluZQlBWDI1X0VNT0RVTFVTCQkxMjgJLyogIEV4dGVuZGVkIEFYLjI1IG1vZHVsdXMgKi8KKworZW51bSB7CisJQVgyNV9QUk9UT19TVERfU0lNUExFWCwKKwlBWDI1X1BST1RPX1NURF9EVVBMRVgsCisJQVgyNV9QUk9UT19EQU1BX1NMQVZFLAorCUFYMjVfUFJPVE9fREFNQV9NQVNURVIKK307CisKK2VudW0geworCUFYMjVfVkFMVUVTX0lQREVGTU9ERSwJLyogMD1ERyAxPVZDICovCisJQVgyNV9WQUxVRVNfQVhERUZNT0RFLAkvKiAwPU5vcm1hbCAxPUV4dGVuZGVkIFNlcSBOb3MgKi8KKwlBWDI1X1ZBTFVFU19CQUNLT0ZGLAkvKiAwPU5vbmUgMT1MaW5lYXIgMj1FeHBvbmVudGlhbCAqLworCUFYMjVfVkFMVUVTX0NPTk1PREUsCS8qIEFsbG93IGNvbm5lY3RlZCBtb2RlcyAtIDA9Tm8gMT1ubyAiUElEIHRleHQiIDI9YWxsIFBJRHMgKi8KKwlBWDI1X1ZBTFVFU19XSU5ET1csCS8qIERlZmF1bHQgd2luZG93IHNpemUgZm9yIHN0YW5kYXJkIEFYLjI1ICovCisJQVgyNV9WQUxVRVNfRVdJTkRPVywJLyogRGVmYXVsdCB3aW5kb3cgc2l6ZSBmb3IgZXh0ZW5kZWQgQVguMjUgKi8KKwlBWDI1X1ZBTFVFU19UMSwJCS8qIERlZmF1bHQgVDEgdGltZW91dCB2YWx1ZSAqLworCUFYMjVfVkFMVUVTX1QyLAkJLyogRGVmYXVsdCBUMiB0aW1lb3V0IHZhbHVlICovCisJQVgyNV9WQUxVRVNfVDMsCQkvKiBEZWZhdWx0IFQzIHRpbWVvdXQgdmFsdWUgKi8KKwlBWDI1X1ZBTFVFU19JRExFLAkvKiBDb25uZWN0ZWQgbW9kZSBpZGxlIHRpbWVyICovCisJQVgyNV9WQUxVRVNfTjIsCQkvKiBEZWZhdWx0IE4yIHZhbHVlICovCisJQVgyNV9WQUxVRVNfUEFDTEVOLAkvKiBBWC4yNSBNVFUgKi8KKwlBWDI1X1ZBTFVFU19QUk9UT0NPTCwJLyogU3RkIEFYLjI1LCBEQU1BIFNsYXZlLCBEQU1BIE1hc3RlciAqLworCUFYMjVfVkFMVUVTX0RTX1RJTUVPVVQsCS8qIERBTUEgU2xhdmUgdGltZW91dCAqLworCUFYMjVfTUFYX1ZBTFVFUwkJLyogVEhJUyBNVVNUIFJFTUFJTiBUSEUgTEFTVCBFTlRSWSBPRiBUSElTIExJU1QgKi8KK307CisKKyNkZWZpbmUJQVgyNV9ERUZfSVBERUZNT0RFCTAJCQkvKiBEYXRhZ3JhbSAqLworI2RlZmluZQlBWDI1X0RFRl9BWERFRk1PREUJMAkJCS8qIE5vcm1hbCAqLworI2RlZmluZQlBWDI1X0RFRl9CQUNLT0ZGCTEJCQkvKiBMaW5lYXIgYmFja29mZiAqLworI2RlZmluZQlBWDI1X0RFRl9DT05NT0RFCTIJCQkvKiBDb25uZWN0ZWQgbW9kZSBhbGxvd2VkICovCisjZGVmaW5lCUFYMjVfREVGX1dJTkRPVwkJMgkJCS8qIFdpbmRvdz0yICovCisjZGVmaW5lCUFYMjVfREVGX0VXSU5ET1cJMzIJCQkvKiBNb2R1bGUtMTI4IFdpbmRvdz0zMiAqLworI2RlZmluZQlBWDI1X0RFRl9UMQkJKDEwICogSFopCQkvKiBUMT0xMHMgKi8KKyNkZWZpbmUJQVgyNV9ERUZfVDIJCSgzICogSFopCQkvKiBUMj0zcyAgKi8KKyNkZWZpbmUJQVgyNV9ERUZfVDMJCSgzMDAgKiBIWikJCS8qIFQzPTMwMHMgKi8KKyNkZWZpbmUJQVgyNV9ERUZfTjIJCTEwCQkJLyogTjI9MTAgKi8KKyNkZWZpbmUgQVgyNV9ERUZfSURMRQkJKDAgKiA2MCAqIEhaKQkJLyogSWRsZT1Ob25lICovCisjZGVmaW5lIEFYMjVfREVGX1BBQ0xFTgkJMjU2CQkJLyogUGFjbGVuPTI1NiAqLworI2RlZmluZQlBWDI1X0RFRl9QUk9UT0NPTAlBWDI1X1BST1RPX1NURF9TSU1QTEVYCS8qIFN0YW5kYXJkIEFYLjI1ICovCisjZGVmaW5lIEFYMjVfREVGX0RTX1RJTUVPVVQJKDMgKiA2MCAqIEhaKQkJLyogREFNQSB0aW1lb3V0IDMgbWludXRlcyAqLworCit0eXBlZGVmIHN0cnVjdCBheDI1X3VpZF9hc3NvYyB7CisJc3RydWN0IGF4MjVfdWlkX2Fzc29jCSpuZXh0OworCXVpZF90CQkJdWlkOworCWF4MjVfYWRkcmVzcwkJY2FsbDsKK30gYXgyNV91aWRfYXNzb2M7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlheDI1X2FkZHJlc3MJCWNhbGxzW0FYMjVfTUFYX0RJR0lTXTsKKwl1bnNpZ25lZCBjaGFyCQlyZXBlYXRlZFtBWDI1X01BWF9ESUdJU107CisJdW5zaWduZWQgY2hhcgkJbmRpZ2k7CisJY2hhcgkJCWxhc3RyZXBlYXQ7Cit9IGF4MjVfZGlnaTsKKwordHlwZWRlZiBzdHJ1Y3QgYXgyNV9yb3V0ZSB7CisJc3RydWN0IGF4MjVfcm91dGUJKm5leHQ7CisJYXRvbWljX3QJCXJlZjsKKwlheDI1X2FkZHJlc3MJCWNhbGxzaWduOworCXN0cnVjdCBuZXRfZGV2aWNlCSpkZXY7CisJYXgyNV9kaWdpCQkqZGlnaXBlYXQ7CisJY2hhcgkJCWlwX21vZGU7CisJc3RydWN0IHRpbWVyX2xpc3QJdGltZXI7Cit9IGF4MjVfcm91dGU7CisKK3R5cGVkZWYgc3RydWN0IHsKKwljaGFyCQkJc2xhdmU7CQkJLyogc2xhdmVfbW9kZT8gICAqLworCXN0cnVjdCB0aW1lcl9saXN0CXNsYXZlX3RpbWVyOwkJLyogdGltZW91dCB0aW1lciAqLworCXVuc2lnbmVkIHNob3J0CQlzbGF2ZV90aW1lb3V0OwkJLyogd2hlbj8gKi8KK30gYXgyNV9kYW1hX2luZm87CisKK3N0cnVjdCBjdGxfdGFibGU7CisKK3R5cGVkZWYgc3RydWN0IGF4MjVfZGV2IHsKKwlzdHJ1Y3QgYXgyNV9kZXYJCSpuZXh0OworCXN0cnVjdCBuZXRfZGV2aWNlCSpkZXY7CisJc3RydWN0IG5ldF9kZXZpY2UJKmZvcndhcmQ7CisJc3RydWN0IGN0bF90YWJsZQkqc3lzdGFibGU7CisJaW50CQkJdmFsdWVzW0FYMjVfTUFYX1ZBTFVFU107CisjaWYgZGVmaW5lZChDT05GSUdfQVgyNV9EQU1BX1NMQVZFKSB8fCBkZWZpbmVkKENPTkZJR19BWDI1X0RBTUFfTUFTVEVSKQorCWF4MjVfZGFtYV9pbmZvCQlkYW1hOworI2VuZGlmCit9IGF4MjVfZGV2OworCit0eXBlZGVmIHN0cnVjdCBheDI1X2NiIHsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZQlheDI1X25vZGU7CisJYXgyNV9hZGRyZXNzCQlzb3VyY2VfYWRkciwgZGVzdF9hZGRyOworCWF4MjVfZGlnaQkJKmRpZ2lwZWF0OworCWF4MjVfZGV2CQkqYXgyNV9kZXY7CisJdW5zaWduZWQgY2hhcgkJaWFtZGlnaTsKKwl1bnNpZ25lZCBjaGFyCQlzdGF0ZSwgbW9kdWx1cywgcGlkaW5jbDsKKwl1bnNpZ25lZCBzaG9ydAkJdnMsIHZyLCB2YTsKKwl1bnNpZ25lZCBjaGFyCQljb25kaXRpb24sIGJhY2tvZmY7CisJdW5zaWduZWQgY2hhcgkJbjIsIG4yY291bnQ7CisJc3RydWN0IHRpbWVyX2xpc3QJdDF0aW1lciwgdDJ0aW1lciwgdDN0aW1lciwgaWRsZXRpbWVyOworCXVuc2lnbmVkIGxvbmcJCXQxLCB0MiwgdDMsIGlkbGUsIHJ0dDsKKwl1bnNpZ25lZCBzaG9ydAkJcGFjbGVuLCBmcmFnbm8sIGZyYWdsZW47CisJc3RydWN0IHNrX2J1ZmZfaGVhZAl3cml0ZV9xdWV1ZTsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkCXJlc2VxX3F1ZXVlOworCXN0cnVjdCBza19idWZmX2hlYWQJYWNrX3F1ZXVlOworCXN0cnVjdCBza19idWZmX2hlYWQJZnJhZ19xdWV1ZTsKKwl1bnNpZ25lZCBjaGFyCQl3aW5kb3c7CisJc3RydWN0IHRpbWVyX2xpc3QJdGltZXIsIGR0aW1lcjsKKwlzdHJ1Y3Qgc29jawkJKnNrOwkJLyogQmFja2xpbmsgdG8gc29ja2V0ICovCisJYXRvbWljX3QJCXJlZmNvdW50OworfSBheDI1X2NiOworCisjZGVmaW5lIGF4MjVfc2soX19zaykgKChheDI1X2NiICopKF9fc2spLT5za19wcm90aW5mbykKKworI2RlZmluZSBheDI1X2Zvcl9lYWNoKF9fYXgyNSwgbm9kZSwgbGlzdCkgXAorCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KF9fYXgyNSwgbm9kZSwgbGlzdCwgYXgyNV9ub2RlKQorCisjZGVmaW5lIGF4MjVfY2JfaG9sZChfX2F4MjUpIFwKKwlhdG9taWNfaW5jKCYoKF9fYXgyNSktPnJlZmNvdW50KSkKKworc3RhdGljIF9faW5saW5lX18gdm9pZCBheDI1X2NiX3B1dChheDI1X2NiICpheDI1KQoreworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZheDI1LT5yZWZjb3VudCkpIHsKKwkJaWYgKGF4MjUtPmRpZ2lwZWF0KQorCQkJa2ZyZWUoYXgyNS0+ZGlnaXBlYXQpOworCQlrZnJlZShheDI1KTsKKwl9Cit9CisKKy8qIGFmX2F4MjUuYyAqLworZXh0ZXJuIHN0cnVjdCBobGlzdF9oZWFkIGF4MjVfbGlzdDsKK2V4dGVybiBzcGlubG9ja190IGF4MjVfbGlzdF9sb2NrOworZXh0ZXJuIHZvaWQgYXgyNV9jYl9hZGQoYXgyNV9jYiAqKTsKK3N0cnVjdCBzb2NrICpheDI1X2ZpbmRfbGlzdGVuZXIoYXgyNV9hZGRyZXNzICosIGludCwgc3RydWN0IG5ldF9kZXZpY2UgKiwgaW50KTsKK3N0cnVjdCBzb2NrICpheDI1X2dldF9zb2NrZXQoYXgyNV9hZGRyZXNzICosIGF4MjVfYWRkcmVzcyAqLCBpbnQpOworZXh0ZXJuIGF4MjVfY2IgKmF4MjVfZmluZF9jYihheDI1X2FkZHJlc3MgKiwgYXgyNV9hZGRyZXNzICosIGF4MjVfZGlnaSAqLCBzdHJ1Y3QgbmV0X2RldmljZSAqKTsKK2V4dGVybiB2b2lkIGF4MjVfc2VuZF90b19yYXcoYXgyNV9hZGRyZXNzICosIHN0cnVjdCBza19idWZmICosIGludCk7CitleHRlcm4gdm9pZCBheDI1X2Rlc3Ryb3lfc29ja2V0KGF4MjVfY2IgKik7CitleHRlcm4gYXgyNV9jYiAqYXgyNV9jcmVhdGVfY2Iodm9pZCk7CitleHRlcm4gdm9pZCBheDI1X2ZpbGxpbl9jYihheDI1X2NiICosIGF4MjVfZGV2ICopOworZXh0ZXJuIHN0cnVjdCBzb2NrICpheDI1X21ha2VfbmV3KHN0cnVjdCBzb2NrICosIHN0cnVjdCBheDI1X2RldiAqKTsKKworLyogYXgyNV9hZGRyLmMgKi8KK2V4dGVybiBheDI1X2FkZHJlc3MgbnVsbF9heDI1X2FkZHJlc3M7CitleHRlcm4gY2hhciAqYXgyYXNjKGF4MjVfYWRkcmVzcyAqKTsKK2V4dGVybiBheDI1X2FkZHJlc3MgKmFzYzJheChjaGFyICopOworZXh0ZXJuIGludCAgYXgyNWNtcChheDI1X2FkZHJlc3MgKiwgYXgyNV9hZGRyZXNzICopOworZXh0ZXJuIGludCAgYXgyNWRpZ2ljbXAoYXgyNV9kaWdpICosIGF4MjVfZGlnaSAqKTsKK2V4dGVybiB1bnNpZ25lZCBjaGFyICpheDI1X2FkZHJfcGFyc2UodW5zaWduZWQgY2hhciAqLCBpbnQsIGF4MjVfYWRkcmVzcyAqLCBheDI1X2FkZHJlc3MgKiwgYXgyNV9kaWdpICosIGludCAqLCBpbnQgKik7CitleHRlcm4gaW50ICBheDI1X2FkZHJfYnVpbGQodW5zaWduZWQgY2hhciAqLCBheDI1X2FkZHJlc3MgKiwgYXgyNV9hZGRyZXNzICosIGF4MjVfZGlnaSAqLCBpbnQsIGludCk7CitleHRlcm4gaW50ICBheDI1X2FkZHJfc2l6ZShheDI1X2RpZ2kgKik7CitleHRlcm4gdm9pZCBheDI1X2RpZ2lfaW52ZXJ0KGF4MjVfZGlnaSAqLCBheDI1X2RpZ2kgKik7CisKKy8qIGF4MjVfZGV2LmMgKi8KK2V4dGVybiBheDI1X2RldiAqYXgyNV9kZXZfbGlzdDsKK2V4dGVybiBzcGlubG9ja190IGF4MjVfZGV2X2xvY2s7CisKK3N0YXRpYyBpbmxpbmUgYXgyNV9kZXYgKmF4MjVfZGV2X2F4MjVkZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gZGV2LT5heDI1X3B0cjsKK30KKworZXh0ZXJuIGF4MjVfZGV2ICpheDI1X2FkZHJfYXgyNWRldihheDI1X2FkZHJlc3MgKik7CitleHRlcm4gdm9pZCBheDI1X2Rldl9kZXZpY2VfdXAoc3RydWN0IG5ldF9kZXZpY2UgKik7CitleHRlcm4gdm9pZCBheDI1X2Rldl9kZXZpY2VfZG93bihzdHJ1Y3QgbmV0X2RldmljZSAqKTsKK2V4dGVybiBpbnQgIGF4MjVfZndkX2lvY3RsKHVuc2lnbmVkIGludCwgc3RydWN0IGF4MjVfZndkX3N0cnVjdCAqKTsKK2V4dGVybiBzdHJ1Y3QgbmV0X2RldmljZSAqYXgyNV9md2RfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICopOworZXh0ZXJuIHZvaWQgYXgyNV9kZXZfZnJlZSh2b2lkKTsKKworLyogYXgyNV9kc19pbi5jICovCitleHRlcm4gaW50ICBheDI1X2RzX2ZyYW1lX2luKGF4MjVfY2IgKiwgc3RydWN0IHNrX2J1ZmYgKiwgaW50KTsKKworLyogYXgyNV9kc19zdWJyLmMgKi8KK2V4dGVybiB2b2lkIGF4MjVfZHNfbnJfZXJyb3JfcmVjb3ZlcnkoYXgyNV9jYiAqKTsKK2V4dGVybiB2b2lkIGF4MjVfZHNfZW5xdWlyeV9yZXNwb25zZShheDI1X2NiICopOworZXh0ZXJuIHZvaWQgYXgyNV9kc19lc3RhYmxpc2hfZGF0YV9saW5rKGF4MjVfY2IgKik7CitleHRlcm4gdm9pZCBheDI1X2Rldl9kYW1hX29mZihheDI1X2RldiAqKTsKK2V4dGVybiB2b2lkIGF4MjVfZGFtYV9vbihheDI1X2NiICopOworZXh0ZXJuIHZvaWQgYXgyNV9kYW1hX29mZihheDI1X2NiICopOworCisvKiBheDI1X2RzX3RpbWVyLmMgKi8KK2V4dGVybiB2b2lkIGF4MjVfZHNfc2V0X3RpbWVyKGF4MjVfZGV2ICopOworZXh0ZXJuIHZvaWQgYXgyNV9kc19kZWxfdGltZXIoYXgyNV9kZXYgKik7CitleHRlcm4gdm9pZCBheDI1X2RzX3RpbWVyKGF4MjVfY2IgKik7CitleHRlcm4gdm9pZCBheDI1X2RzX3QxX3RpbWVvdXQoYXgyNV9jYiAqKTsKK2V4dGVybiB2b2lkIGF4MjVfZHNfaGVhcnRiZWF0X2V4cGlyeShheDI1X2NiICopOworZXh0ZXJuIHZvaWQgYXgyNV9kc190M3RpbWVyX2V4cGlyeShheDI1X2NiICopOworZXh0ZXJuIHZvaWQgYXgyNV9kc19pZGxldGltZXJfZXhwaXJ5KGF4MjVfY2IgKik7CisKKy8qIGF4MjVfaWZhY2UuYyAqLworZXh0ZXJuIGludCAgYXgyNV9wcm90b2NvbF9yZWdpc3Rlcih1bnNpZ25lZCBpbnQsIGludCAoKikoc3RydWN0IHNrX2J1ZmYgKiwgYXgyNV9jYiAqKSk7CitleHRlcm4gdm9pZCBheDI1X3Byb3RvY29sX3JlbGVhc2UodW5zaWduZWQgaW50KTsKK2V4dGVybiBpbnQgIGF4MjVfbGlua2ZhaWxfcmVnaXN0ZXIodm9pZCAoKikoYXgyNV9jYiAqLCBpbnQpKTsKK2V4dGVybiB2b2lkIGF4MjVfbGlua2ZhaWxfcmVsZWFzZSh2b2lkICgqKShheDI1X2NiICosIGludCkpOworZXh0ZXJuIGludCAgYXgyNV9saXN0ZW5fcmVnaXN0ZXIoYXgyNV9hZGRyZXNzICosIHN0cnVjdCBuZXRfZGV2aWNlICopOworZXh0ZXJuIHZvaWQgYXgyNV9saXN0ZW5fcmVsZWFzZShheDI1X2FkZHJlc3MgKiwgc3RydWN0IG5ldF9kZXZpY2UgKik7CitleHRlcm4gaW50ICAoKmF4MjVfcHJvdG9jb2xfZnVuY3Rpb24odW5zaWduZWQgaW50KSkoc3RydWN0IHNrX2J1ZmYgKiwgYXgyNV9jYiAqKTsKK2V4dGVybiBpbnQgIGF4MjVfbGlzdGVuX21pbmUoYXgyNV9hZGRyZXNzICosIHN0cnVjdCBuZXRfZGV2aWNlICopOworZXh0ZXJuIHZvaWQgYXgyNV9saW5rX2ZhaWxlZChheDI1X2NiICosIGludCk7CitleHRlcm4gaW50ICBheDI1X3Byb3RvY29sX2lzX3JlZ2lzdGVyZWQodW5zaWduZWQgaW50KTsKKworLyogYXgyNV9pbi5jICovCitleHRlcm4gaW50ICBheDI1X3J4X2lmcmFtZShheDI1X2NiICosIHN0cnVjdCBza19idWZmICopOworZXh0ZXJuIGludCAgYXgyNV9raXNzX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3QgbmV0X2RldmljZSAqLCBzdHJ1Y3QgcGFja2V0X3R5cGUgKik7CisKKy8qIGF4MjVfaXAuYyAqLworZXh0ZXJuIGludCAgYXgyNV9lbmNhcHN1bGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3QgbmV0X2RldmljZSAqLCB1bnNpZ25lZCBzaG9ydCwgdm9pZCAqLCB2b2lkICosIHVuc2lnbmVkIGludCk7CitleHRlcm4gaW50ICBheDI1X3JlYnVpbGRfaGVhZGVyKHN0cnVjdCBza19idWZmICopOworCisvKiBheDI1X291dC5jICovCitleHRlcm4gYXgyNV9jYiAqYXgyNV9zZW5kX2ZyYW1lKHN0cnVjdCBza19idWZmICosIGludCwgYXgyNV9hZGRyZXNzICosIGF4MjVfYWRkcmVzcyAqLCBheDI1X2RpZ2kgKiwgc3RydWN0IG5ldF9kZXZpY2UgKik7CitleHRlcm4gdm9pZCBheDI1X291dHB1dChheDI1X2NiICosIGludCwgc3RydWN0IHNrX2J1ZmYgKik7CitleHRlcm4gdm9pZCBheDI1X2tpY2soYXgyNV9jYiAqKTsKK2V4dGVybiB2b2lkIGF4MjVfdHJhbnNtaXRfYnVmZmVyKGF4MjVfY2IgKiwgc3RydWN0IHNrX2J1ZmYgKiwgaW50KTsKK2V4dGVybiB2b2lkIGF4MjVfcXVldWVfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqKTsKK2V4dGVybiBpbnQgIGF4MjVfY2hlY2tfaWZyYW1lc19hY2tlZChheDI1X2NiICosIHVuc2lnbmVkIHNob3J0KTsKKworLyogYXgyNV9yb3V0ZS5jICovCitleHRlcm4gdm9pZCBheDI1X3J0X2RldmljZV9kb3duKHN0cnVjdCBuZXRfZGV2aWNlICopOworZXh0ZXJuIGludCAgYXgyNV9ydF9pb2N0bCh1bnNpZ25lZCBpbnQsIHZvaWQgX191c2VyICopOworZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYXgyNV9yb3V0ZV9mb3BzOworZXh0ZXJuIGludCAgYXgyNV9ydF9hdXRvYmluZChheDI1X2NiICosIGF4MjVfYWRkcmVzcyAqKTsKK2V4dGVybiBheDI1X3JvdXRlICpheDI1X3J0X2ZpbmRfcm91dGUoYXgyNV9yb3V0ZSAqLCBheDI1X2FkZHJlc3MgKiwKKwlzdHJ1Y3QgbmV0X2RldmljZSAqKTsKK2V4dGVybiBzdHJ1Y3Qgc2tfYnVmZiAqYXgyNV9ydF9idWlsZF9wYXRoKHN0cnVjdCBza19idWZmICosIGF4MjVfYWRkcmVzcyAqLCBheDI1X2FkZHJlc3MgKiwgYXgyNV9kaWdpICopOworZXh0ZXJuIHZvaWQgYXgyNV9ydF9mcmVlKHZvaWQpOworCitzdGF0aWMgaW5saW5lIHZvaWQgYXgyNV9wdXRfcm91dGUoYXgyNV9yb3V0ZSAqYXgyNV9ydCkKK3sKKwlhdG9taWNfZGVjKCZheDI1X3J0LT5yZWYpOworfQorCisvKiBheDI1X3N0ZF9pbi5jICovCitleHRlcm4gaW50ICBheDI1X3N0ZF9mcmFtZV9pbihheDI1X2NiICosIHN0cnVjdCBza19idWZmICosIGludCk7CisKKy8qIGF4MjVfc3RkX3N1YnIuYyAqLworZXh0ZXJuIHZvaWQgYXgyNV9zdGRfbnJfZXJyb3JfcmVjb3ZlcnkoYXgyNV9jYiAqKTsKK2V4dGVybiB2b2lkIGF4MjVfc3RkX2VzdGFibGlzaF9kYXRhX2xpbmsoYXgyNV9jYiAqKTsKK2V4dGVybiB2b2lkIGF4MjVfc3RkX3RyYW5zbWl0X2VucXVpcnkoYXgyNV9jYiAqKTsKK2V4dGVybiB2b2lkIGF4MjVfc3RkX2VucXVpcnlfcmVzcG9uc2UoYXgyNV9jYiAqKTsKK2V4dGVybiB2b2lkIGF4MjVfc3RkX3RpbWVvdXRfcmVzcG9uc2UoYXgyNV9jYiAqKTsKKworLyogYXgyNV9zdGRfdGltZXIuYyAqLworZXh0ZXJuIHZvaWQgYXgyNV9zdGRfaGVhcnRiZWF0X2V4cGlyeShheDI1X2NiICopOworZXh0ZXJuIHZvaWQgYXgyNV9zdGRfdDF0aW1lcl9leHBpcnkoYXgyNV9jYiAqKTsKK2V4dGVybiB2b2lkIGF4MjVfc3RkX3QydGltZXJfZXhwaXJ5KGF4MjVfY2IgKik7CitleHRlcm4gdm9pZCBheDI1X3N0ZF90M3RpbWVyX2V4cGlyeShheDI1X2NiICopOworZXh0ZXJuIHZvaWQgYXgyNV9zdGRfaWRsZXRpbWVyX2V4cGlyeShheDI1X2NiICopOworCisvKiBheDI1X3N1YnIuYyAqLworZXh0ZXJuIHZvaWQgYXgyNV9jbGVhcl9xdWV1ZXMoYXgyNV9jYiAqKTsKK2V4dGVybiB2b2lkIGF4MjVfZnJhbWVzX2Fja2VkKGF4MjVfY2IgKiwgdW5zaWduZWQgc2hvcnQpOworZXh0ZXJuIHZvaWQgYXgyNV9yZXF1ZXVlX2ZyYW1lcyhheDI1X2NiICopOworZXh0ZXJuIGludCAgYXgyNV92YWxpZGF0ZV9ucihheDI1X2NiICosIHVuc2lnbmVkIHNob3J0KTsKK2V4dGVybiBpbnQgIGF4MjVfZGVjb2RlKGF4MjVfY2IgKiwgc3RydWN0IHNrX2J1ZmYgKiwgaW50ICosIGludCAqLCBpbnQgKik7CitleHRlcm4gdm9pZCBheDI1X3NlbmRfY29udHJvbChheDI1X2NiICosIGludCwgaW50LCBpbnQpOworZXh0ZXJuIHZvaWQgYXgyNV9yZXR1cm5fZG0oc3RydWN0IG5ldF9kZXZpY2UgKiwgYXgyNV9hZGRyZXNzICosIGF4MjVfYWRkcmVzcyAqLCBheDI1X2RpZ2kgKik7CitleHRlcm4gdm9pZCBheDI1X2NhbGN1bGF0ZV90MShheDI1X2NiICopOworZXh0ZXJuIHZvaWQgYXgyNV9jYWxjdWxhdGVfcnR0KGF4MjVfY2IgKik7CitleHRlcm4gdm9pZCBheDI1X2Rpc2Nvbm5lY3QoYXgyNV9jYiAqLCBpbnQpOworCisvKiBheDI1X3RpbWVyLmMgKi8KK2V4dGVybiB2b2lkIGF4MjVfc3RhcnRfaGVhcnRiZWF0KGF4MjVfY2IgKik7CitleHRlcm4gdm9pZCBheDI1X3N0YXJ0X3QxdGltZXIoYXgyNV9jYiAqKTsKK2V4dGVybiB2b2lkIGF4MjVfc3RhcnRfdDJ0aW1lcihheDI1X2NiICopOworZXh0ZXJuIHZvaWQgYXgyNV9zdGFydF90M3RpbWVyKGF4MjVfY2IgKik7CitleHRlcm4gdm9pZCBheDI1X3N0YXJ0X2lkbGV0aW1lcihheDI1X2NiICopOworZXh0ZXJuIHZvaWQgYXgyNV9zdG9wX2hlYXJ0YmVhdChheDI1X2NiICopOworZXh0ZXJuIHZvaWQgYXgyNV9zdG9wX3QxdGltZXIoYXgyNV9jYiAqKTsKK2V4dGVybiB2b2lkIGF4MjVfc3RvcF90MnRpbWVyKGF4MjVfY2IgKik7CitleHRlcm4gdm9pZCBheDI1X3N0b3BfdDN0aW1lcihheDI1X2NiICopOworZXh0ZXJuIHZvaWQgYXgyNV9zdG9wX2lkbGV0aW1lcihheDI1X2NiICopOworZXh0ZXJuIGludCAgYXgyNV90MXRpbWVyX3J1bm5pbmcoYXgyNV9jYiAqKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGF4MjVfZGlzcGxheV90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqKTsKKworLyogYXgyNV91aWQuYyAqLworZXh0ZXJuIGludCAgYXgyNV91aWRfcG9saWN5OworZXh0ZXJuIGF4MjVfYWRkcmVzcyAqYXgyNV9maW5kYnl1aWQodWlkX3QpOworZXh0ZXJuIGludCAgYXgyNV91aWRfaW9jdGwoaW50LCBzdHJ1Y3Qgc29ja2FkZHJfYXgyNSAqKTsKK2V4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGF4MjVfdWlkX2ZvcHM7CitleHRlcm4gdm9pZCBheDI1X3VpZF9mcmVlKHZvaWQpOworCisvKiBzeXNjdGxfbmV0X2F4MjUuYyAqLworI2lmZGVmIENPTkZJR19TWVNDVEwKK2V4dGVybiB2b2lkIGF4MjVfcmVnaXN0ZXJfc3lzY3RsKHZvaWQpOworZXh0ZXJuIHZvaWQgYXgyNV91bnJlZ2lzdGVyX3N5c2N0bCh2b2lkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgYXgyNV9yZWdpc3Rlcl9zeXNjdGwodm9pZCkge307CitzdGF0aWMgaW5saW5lIHZvaWQgYXgyNV91bnJlZ2lzdGVyX3N5c2N0bCh2b2lkKSB7fTsKKyNlbmRpZiAvKiBDT05GSUdfU1lTQ1RMICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2JsdWV0b290aC5oIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2JsdWV0b290aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyYTg0YzUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvYmx1ZXRvb3RoLmgKQEAgLTAsMCArMSwxODEgQEAKKy8qIAorICAgQmx1ZVogLSBCbHVldG9vdGggcHJvdG9jb2wgc3RhY2sgZm9yIExpbnV4CisgICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMSBRdWFsY29tbSBJbmNvcnBvcmF0ZWQKKworICAgV3JpdHRlbiAyMDAwLDIwMDEgYnkgTWF4aW0gS3Jhc255YW5za3kgPG1heGtAcXVhbGNvbW0uY29tPgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOworCisgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUworICAgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5UIE9GIFRISVJEIFBBUlRZIFJJR0hUUy4KKyAgIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIEFORCBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkKKyAgIENMQUlNLCBPUiBBTlkgU1BFQ0lBTCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIE9SIEFOWSBEQU1BR0VTIAorICAgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIAorICAgQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgCisgICBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorCisgICBBTEwgTElBQklMSVRZLCBJTkNMVURJTkcgTElBQklMSVRZIEZPUiBJTkZSSU5HRU1FTlQgT0YgQU5ZIFBBVEVOVFMsIAorICAgQ09QWVJJR0hUUywgVFJBREVNQVJLUyBPUiBPVEhFUiBSSUdIVFMsIFJFTEFUSU5HIFRPIFVTRSBPRiBUSElTIAorICAgU09GVFdBUkUgSVMgRElTQ0xBSU1FRC4KKyovCisKKyNpZm5kZWYgX19CTFVFVE9PVEhfSAorI2RlZmluZSBfX0JMVUVUT09USF9ICisKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxuZXQvc29jay5oPgorCisjaWZuZGVmIEFGX0JMVUVUT09USAorI2RlZmluZSBBRl9CTFVFVE9PVEgJMzEKKyNkZWZpbmUgUEZfQkxVRVRPT1RICUFGX0JMVUVUT09USAorI2VuZGlmCisKKy8qIFJlc2VydiBmb3IgY29yZSBhbmQgZHJpdmVycyB1c2UgKi8KKyNkZWZpbmUgQlRfU0tCX1JFU0VSVkUJOAorCisjZGVmaW5lIEJUUFJPVE9fTDJDQVAJMAorI2RlZmluZSBCVFBST1RPX0hDSQkxCisjZGVmaW5lIEJUUFJPVE9fU0NPCTIKKyNkZWZpbmUgQlRQUk9UT19SRkNPTU0JMworI2RlZmluZSBCVFBST1RPX0JORVAJNAorI2RlZmluZSBCVFBST1RPX0NNVFAJNQorI2RlZmluZSBCVFBST1RPX0hJRFAJNgorI2RlZmluZSBCVFBST1RPX0FWRFRQCTcKKworI2RlZmluZSBTT0xfSENJCQkwCisjZGVmaW5lIFNPTF9MMkNBUAk2CisjZGVmaW5lIFNPTF9TQ08JCTE3CisjZGVmaW5lIFNPTF9SRkNPTU0JMTgKKworI2RlZmluZSBCVF9JTkZPKGZtdCwgYXJnLi4uKSBwcmludGsoS0VSTl9JTkZPICJCbHVldG9vdGg6ICIgZm10ICJcbiIgLCAjIyBhcmcpCisjZGVmaW5lIEJUX0RCRyhmbXQsIGFyZy4uLikgIHByaW50ayhLRVJOX0lORk8gIiVzOiAiIGZtdCAiXG4iICwgX19GVU5DVElPTl9fICwgIyMgYXJnKQorI2RlZmluZSBCVF9FUlIoZm10LCBhcmcuLi4pICBwcmludGsoS0VSTl9FUlIgICIlczogIiBmbXQgIlxuIiAsIF9fRlVOQ1RJT05fXyAsICMjIGFyZykKKworI2lmZGVmIEhDSV9EQVRBX0RVTVAKKyNkZWZpbmUgQlRfRE1QKGJ1ZiwgbGVuKSBidF9kdW1wKF9fRlVOQ1RJT05fXywgYnVmLCBsZW4pCisjZWxzZQorI2RlZmluZSBCVF9ETVAoRC4uLikKKyNlbmRpZgorCitleHRlcm4gc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX2J0OworCisvKiBDb25uZWN0aW9uIGFuZCBzb2NrZXQgc3RhdGVzICovCitlbnVtIHsKKwlCVF9DT05ORUNURUQgPSAxLCAvKiBFcXVhbCB0byBUQ1BfRVNUQUJMSVNIRUQgdG8gbWFrZSBuZXQgY29kZSBoYXBweSAqLworCUJUX09QRU4sCisJQlRfQk9VTkQsCisJQlRfTElTVEVOLAorCUJUX0NPTk5FQ1QsCisJQlRfQ09OTkVDVDIsCisJQlRfQ09ORklHLAorCUJUX0RJU0NPTk4sCisJQlRfQ0xPU0VECit9OworCisvKiBFbmRpYW5uZXNzIGNvbnZlcnNpb25zICovCisjZGVmaW5lIGh0b2JzKGEpCV9fY3B1X3RvX2xlMTYoYSkKKyNkZWZpbmUgaHRvYmwoYSkJX19jcHVfdG9fbGUzMihhKQorI2RlZmluZSBidG9ocyhhKQlfX2xlMTZfdG9fY3B1KGEpCisjZGVmaW5lIGJ0b2hsKGEpCV9fbGUzMl90b19jcHUoYSkKKworLyogQkQgQWRkcmVzcyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCV9fdTggYls2XTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgYmRhZGRyX3Q7CisKKyNkZWZpbmUgQkRBRERSX0FOWSAgICgmKGJkYWRkcl90KSB7ezAsIDAsIDAsIDAsIDAsIDB9fSkKKyNkZWZpbmUgQkRBRERSX0xPQ0FMICgmKGJkYWRkcl90KSB7ezAsIDAsIDAsIDB4ZmYsIDB4ZmYsIDB4ZmZ9fSkKKworLyogQ29weSwgc3dhcCwgY29udmVydCBCRCBBZGRyZXNzICovCitzdGF0aWMgaW5saW5lIGludCBiYWNtcChiZGFkZHJfdCAqYmExLCBiZGFkZHJfdCAqYmEyKQoreworCXJldHVybiBtZW1jbXAoYmExLCBiYTIsIHNpemVvZihiZGFkZHJfdCkpOworfQorc3RhdGljIGlubGluZSB2b2lkIGJhY3B5KGJkYWRkcl90ICpkc3QsIGJkYWRkcl90ICpzcmMpCit7CisJbWVtY3B5KGRzdCwgc3JjLCBzaXplb2YoYmRhZGRyX3QpKTsKK30KKwordm9pZCBiYXN3YXAoYmRhZGRyX3QgKmRzdCwgYmRhZGRyX3QgKnNyYyk7CitjaGFyICpiYXRvc3RyKGJkYWRkcl90ICpiYSk7CitiZGFkZHJfdCAqc3RydG9iYShjaGFyICpzdHIpOworCisvKiBDb21tb24gc29ja2V0IHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucyAqLworCisjZGVmaW5lIGJ0X3NrKF9fc2spICgoc3RydWN0IGJ0X3NvY2sgKikgX19zaykKKworc3RydWN0IGJ0X3NvY2sgeworCXN0cnVjdCBzb2NrIHNrOworCWJkYWRkcl90ICAgIHNyYzsKKwliZGFkZHJfdCAgICBkc3Q7CisJc3RydWN0IGxpc3RfaGVhZCBhY2NlcHRfcTsKKwlzdHJ1Y3Qgc29jayAqcGFyZW50OworfTsKKworc3RydWN0IGJ0X3NvY2tfbGlzdCB7CisJc3RydWN0IGhsaXN0X2hlYWQgaGVhZDsKKwlyd2xvY2tfdCAgICAgICAgICBsb2NrOworfTsKKworaW50ICBidF9zb2NrX3JlZ2lzdGVyKGludCBwcm90bywgc3RydWN0IG5ldF9wcm90b19mYW1pbHkgKm9wcyk7CitpbnQgIGJ0X3NvY2tfdW5yZWdpc3RlcihpbnQgcHJvdG8pOwordm9pZCBidF9zb2NrX2xpbmsoc3RydWN0IGJ0X3NvY2tfbGlzdCAqbCwgc3RydWN0IHNvY2sgKnMpOwordm9pZCBidF9zb2NrX3VubGluayhzdHJ1Y3QgYnRfc29ja19saXN0ICpsLCBzdHJ1Y3Qgc29jayAqcyk7CitpbnQgIGJ0X3NvY2tfcmVjdm1zZyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbiwgaW50IGZsYWdzKTsKK3VpbnQgYnRfc29ja19wb2xsKHN0cnVjdCBmaWxlICogZmlsZSwgc3RydWN0IHNvY2tldCAqc29jaywgcG9sbF90YWJsZSAqd2FpdCk7CitpbnQgIGJ0X3NvY2tfd2FpdF9zdGF0ZShzdHJ1Y3Qgc29jayAqc2ssIGludCBzdGF0ZSwgdW5zaWduZWQgbG9uZyB0aW1lbyk7CisKK3ZvaWQgYnRfYWNjZXB0X2VucXVldWUoc3RydWN0IHNvY2sgKnBhcmVudCwgc3RydWN0IHNvY2sgKnNrKTsKK3ZvaWQgYnRfYWNjZXB0X3VubGluayhzdHJ1Y3Qgc29jayAqc2spOworc3RydWN0IHNvY2sgKmJ0X2FjY2VwdF9kZXF1ZXVlKHN0cnVjdCBzb2NrICpwYXJlbnQsIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2spOworCisvKiBTa2IgaGVscGVycyAqLworc3RydWN0IGJ0X3NrYl9jYiB7CisJaW50IGluY29taW5nOworfTsKKyNkZWZpbmUgYnRfY2Ioc2tiKSAoKHN0cnVjdCBidF9za2JfY2IgKikoc2tiLT5jYikpIAorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpidF9za2JfYWxsb2ModW5zaWduZWQgaW50IGxlbiwgaW50IGhvdykKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJaWYgKChza2IgPSBhbGxvY19za2IobGVuICsgQlRfU0tCX1JFU0VSVkUsIGhvdykpKSB7CisJCXNrYl9yZXNlcnZlKHNrYiwgQlRfU0tCX1JFU0VSVkUpOworCQlidF9jYihza2IpLT5pbmNvbWluZyAgPSAwOworCX0KKwlyZXR1cm4gc2tiOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpidF9za2Jfc2VuZF9hbGxvYyhzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGxvbmcgbGVuLCAKKwkJCQkJCQlpbnQgbmIsIGludCAqZXJyKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlpZiAoKHNrYiA9IHNvY2tfYWxsb2Nfc2VuZF9za2Ioc2ssIGxlbiArIEJUX1NLQl9SRVNFUlZFLCBuYiwgZXJyKSkpIHsKKwkJc2tiX3Jlc2VydmUoc2tiLCBCVF9TS0JfUkVTRVJWRSk7CisJCWJ0X2NiKHNrYiktPmluY29taW5nICA9IDA7CisJfQorCisJcmV0dXJuIHNrYjsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2tiX2ZyYWdzX25vKHN0cnVjdCBza19idWZmICpza2IpCit7CisJcmVnaXN0ZXIgc3RydWN0IHNrX2J1ZmYgKmZyYWcgPSBza2Jfc2hpbmZvKHNrYiktPmZyYWdfbGlzdDsKKwlyZWdpc3RlciBpbnQgbiA9IDE7CisKKwlmb3IgKDsgZnJhZzsgZnJhZz1mcmFnLT5uZXh0LCBuKyspOworCXJldHVybiBuOworfQorCit2b2lkIGJ0X2R1bXAoY2hhciAqcHJlZiwgX191OCAqYnVmLCBpbnQgY291bnQpOworCitpbnQgYnRfZXJyKF9fdTE2IGNvZGUpOworCisjZW5kaWYgLyogX19CTFVFVE9PVEhfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaS5oIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmMDcwNmYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpLmgKQEAgLTAsMCArMSw3NTUgQEAKKy8qIAorICAgQmx1ZVogLSBCbHVldG9vdGggcHJvdG9jb2wgc3RhY2sgZm9yIExpbnV4CisgICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMSBRdWFsY29tbSBJbmNvcnBvcmF0ZWQKKworICAgV3JpdHRlbiAyMDAwLDIwMDEgYnkgTWF4aW0gS3Jhc255YW5za3kgPG1heGtAcXVhbGNvbW0uY29tPgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOworCisgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUworICAgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5UIE9GIFRISVJEIFBBUlRZIFJJR0hUUy4KKyAgIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIEFORCBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkKKyAgIENMQUlNLCBPUiBBTlkgU1BFQ0lBTCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIE9SIEFOWSBEQU1BR0VTIAorICAgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIAorICAgQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgCisgICBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorCisgICBBTEwgTElBQklMSVRZLCBJTkNMVURJTkcgTElBQklMSVRZIEZPUiBJTkZSSU5HRU1FTlQgT0YgQU5ZIFBBVEVOVFMsIAorICAgQ09QWVJJR0hUUywgVFJBREVNQVJLUyBPUiBPVEhFUiBSSUdIVFMsIFJFTEFUSU5HIFRPIFVTRSBPRiBUSElTIAorICAgU09GVFdBUkUgSVMgRElTQ0xBSU1FRC4KKyovCisKKyNpZm5kZWYgX19IQ0lfSAorI2RlZmluZSBfX0hDSV9ICisKKyNkZWZpbmUgSENJX01BWF9BQ0xfU0laRQkxMDI0CisjZGVmaW5lIEhDSV9NQVhfU0NPX1NJWkUJMjU1CisjZGVmaW5lIEhDSV9NQVhfRVZFTlRfU0laRQkyNjAKKyNkZWZpbmUgSENJX01BWF9GUkFNRV9TSVpFCShIQ0lfTUFYX0FDTF9TSVpFICsgNCkKKworLyogSENJIGRldiBldmVudHMgKi8KKyNkZWZpbmUgSENJX0RFVl9SRUcJCQkxCisjZGVmaW5lIEhDSV9ERVZfVU5SRUcJCQkyCisjZGVmaW5lIEhDSV9ERVZfVVAJCQkzCisjZGVmaW5lIEhDSV9ERVZfRE9XTgkJCTQKKyNkZWZpbmUgSENJX0RFVl9TVVNQRU5ECQkJNQorI2RlZmluZSBIQ0lfREVWX1JFU1VNRQkJCTYKKworLyogSENJIG5vdGlmeSBldmVudHMgKi8KKyNkZWZpbmUgSENJX05PVElGWV9DT05OX0FERAkJMQorI2RlZmluZSBIQ0lfTk9USUZZX0NPTk5fREVMCQkyCisjZGVmaW5lIEhDSV9OT1RJRllfVk9JQ0VfU0VUVElORwkzCisKKy8qIEhDSSBkZXZpY2UgdHlwZXMgKi8KKyNkZWZpbmUgSENJX1ZIQ0kJMAorI2RlZmluZSBIQ0lfVVNCCQkxCisjZGVmaW5lIEhDSV9QQ0NBUkQJMgorI2RlZmluZSBIQ0lfVUFSVAkzCisjZGVmaW5lIEhDSV9SUzIzMgk0CisjZGVmaW5lIEhDSV9QQ0kJCTUKKworLyogSENJIGRldmljZSBxdWlya3MgKi8KK2VudW0geworCUhDSV9RVUlSS19SRVNFVF9PTl9JTklULAorCUhDSV9RVUlSS19SQVdfREVWSUNFCit9OworCisvKiBIQ0kgZGV2aWNlIGZsYWdzICovCitlbnVtIHsKKwlIQ0lfVVAsCisJSENJX0lOSVQsCisJSENJX1JVTk5JTkcsCisKKwlIQ0lfUFNDQU4sCisJSENJX0lTQ0FOLAorCUhDSV9BVVRILAorCUhDSV9FTkNSWVBULAorCUhDSV9JTlFVSVJZLAorCisJSENJX1JBVywKKworCUhDSV9TRUNNR1IKK307CisKKy8qIEhDSSBpb2N0bCBkZWZpbmVzICovCisjZGVmaW5lIEhDSURFVlVQCV9JT1coJ0gnLCAyMDEsIGludCkKKyNkZWZpbmUgSENJREVWRE9XTglfSU9XKCdIJywgMjAyLCBpbnQpCisjZGVmaW5lIEhDSURFVlJFU0VUCV9JT1coJ0gnLCAyMDMsIGludCkKKyNkZWZpbmUgSENJREVWUkVTVEFUCV9JT1coJ0gnLCAyMDQsIGludCkKKworI2RlZmluZSBIQ0lHRVRERVZMSVNUCV9JT1IoJ0gnLCAyMTAsIGludCkKKyNkZWZpbmUgSENJR0VUREVWSU5GTwlfSU9SKCdIJywgMjExLCBpbnQpCisjZGVmaW5lIEhDSUdFVENPTk5MSVNUCV9JT1IoJ0gnLCAyMTIsIGludCkKKyNkZWZpbmUgSENJR0VUQ09OTklORk8JX0lPUignSCcsIDIxMywgaW50KQorCisjZGVmaW5lIEhDSVNFVFJBVwlfSU9XKCdIJywgMjIwLCBpbnQpCisjZGVmaW5lIEhDSVNFVFNDQU4JX0lPVygnSCcsIDIyMSwgaW50KQorI2RlZmluZSBIQ0lTRVRBVVRICV9JT1coJ0gnLCAyMjIsIGludCkKKyNkZWZpbmUgSENJU0VURU5DUllQVAlfSU9XKCdIJywgMjIzLCBpbnQpCisjZGVmaW5lIEhDSVNFVFBUWVBFCV9JT1coJ0gnLCAyMjQsIGludCkKKyNkZWZpbmUgSENJU0VUTElOS1BPTAlfSU9XKCdIJywgMjI1LCBpbnQpCisjZGVmaW5lIEhDSVNFVExJTktNT0RFCV9JT1coJ0gnLCAyMjYsIGludCkKKyNkZWZpbmUgSENJU0VUQUNMTVRVCV9JT1coJ0gnLCAyMjcsIGludCkKKyNkZWZpbmUgSENJU0VUU0NPTVRVCV9JT1coJ0gnLCAyMjgsIGludCkKKworI2RlZmluZSBIQ0lTRVRTRUNNR1IJX0lPVygnSCcsIDIzMCwgaW50KQorCisjZGVmaW5lIEhDSUlOUVVJUlkJX0lPUignSCcsIDI0MCwgaW50KQorCisvKiBIQ0kgdGltZW91dHMgKi8KKyNkZWZpbmUgSENJX0NPTk5fVElNRU9VVAkoSFogKiA0MCkKKyNkZWZpbmUgSENJX0RJU0NPTk5fVElNRU9VVAkoSFogKiAyKQorI2RlZmluZSBIQ0lfQ09OTl9JRExFX1RJTUVPVVQJKEhaICogNjApCisKKy8qIEhDSSBQYWNrZXQgdHlwZXMgKi8KKyNkZWZpbmUgSENJX0NPTU1BTkRfUEtUCQkweDAxCisjZGVmaW5lIEhDSV9BQ0xEQVRBX1BLVAkJMHgwMgorI2RlZmluZSBIQ0lfU0NPREFUQV9QS1QJCTB4MDMKKyNkZWZpbmUgSENJX0VWRU5UX1BLVAkJMHgwNAorI2RlZmluZSBIQ0lfVkVORE9SX1BLVAkJMHhmZgorCisvKiBIQ0kgUGFja2V0IHR5cGVzICovCisjZGVmaW5lIEhDSV9ETTEJCTB4MDAwOAorI2RlZmluZSBIQ0lfRE0zCQkweDA0MDAKKyNkZWZpbmUgSENJX0RNNQkJMHg0MDAwCisjZGVmaW5lIEhDSV9ESDEJCTB4MDAxMAorI2RlZmluZSBIQ0lfREgzCQkweDA4MDAKKyNkZWZpbmUgSENJX0RINQkJMHg4MDAwCisKKyNkZWZpbmUgSENJX0hWMQkJMHgwMDIwCisjZGVmaW5lIEhDSV9IVjIJCTB4MDA0MAorI2RlZmluZSBIQ0lfSFYzCQkweDAwODAKKworI2RlZmluZSBTQ09fUFRZUEVfTUFTSwkoSENJX0hWMSB8IEhDSV9IVjIgfCBIQ0lfSFYzKQorI2RlZmluZSBBQ0xfUFRZUEVfTUFTSwkoflNDT19QVFlQRV9NQVNLKQorCisvKiBBQ0wgZmxhZ3MgKi8KKyNkZWZpbmUgQUNMX0NPTlQJCTB4MDEKKyNkZWZpbmUgQUNMX1NUQVJUCQkweDAyCisjZGVmaW5lIEFDTF9BQ1RJVkVfQkNBU1QJMHgwNAorI2RlZmluZSBBQ0xfUElDT19CQ0FTVAkJMHgwOAorCisvKiBCYXNlYmFuZCBsaW5rcyAqLworI2RlZmluZSBTQ09fTElOSwkweDAwCisjZGVmaW5lIEFDTF9MSU5LCTB4MDEKKworLyogTE1QIGZlYXR1cmVzICovCisjZGVmaW5lIExNUF8zU0xPVAkweDAxCisjZGVmaW5lIExNUF81U0xPVAkweDAyCisjZGVmaW5lIExNUF9FTkNSWVBUCTB4MDQKKyNkZWZpbmUgTE1QX1NPRkZTRVQJMHgwOAorI2RlZmluZSBMTVBfVEFDQ1VSQUNZCTB4MTAKKyNkZWZpbmUgTE1QX1JTV0lUQ0gJMHgyMAorI2RlZmluZSBMTVBfSE9MRAkweDQwCisjZGVmaW5lIExNUF9TTklGCTB4ODAKKworI2RlZmluZSBMTVBfUEFSSwkweDAxCisjZGVmaW5lIExNUF9SU1NJCTB4MDIKKyNkZWZpbmUgTE1QX1FVQUxJVFkJMHgwNAorI2RlZmluZSBMTVBfU0NPCQkweDA4CisjZGVmaW5lIExNUF9IVjIJCTB4MTAKKyNkZWZpbmUgTE1QX0hWMwkJMHgyMAorI2RlZmluZSBMTVBfVUxBVwkweDQwCisjZGVmaW5lIExNUF9BTEFXCTB4ODAKKworI2RlZmluZSBMTVBfQ1ZTRAkweDAxCisjZGVmaW5lIExNUF9QU0NIRU1FCTB4MDIKKyNkZWZpbmUgTE1QX1BDT05UUk9MCTB4MDQKKworLyogTGluayBwb2xpY2llcyAqLworI2RlZmluZSBIQ0lfTFBfUlNXSVRDSAkweDAwMDEKKyNkZWZpbmUgSENJX0xQX0hPTEQJMHgwMDAyCisjZGVmaW5lIEhDSV9MUF9TTklGRgkweDAwMDQKKyNkZWZpbmUgSENJX0xQX1BBUksJMHgwMDA4CisKKy8qIExpbmsgbW9kZSAqLworI2RlZmluZSBIQ0lfTE1fQUNDRVBUCTB4ODAwMAorI2RlZmluZSBIQ0lfTE1fTUFTVEVSCTB4MDAwMQorI2RlZmluZSBIQ0lfTE1fQVVUSAkweDAwMDIKKyNkZWZpbmUgSENJX0xNX0VOQ1JZUFQJMHgwMDA0CisjZGVmaW5lIEhDSV9MTV9UUlVTVEVECTB4MDAwOAorI2RlZmluZSBIQ0lfTE1fUkVMSUFCTEUJMHgwMDEwCisjZGVmaW5lIEhDSV9MTV9TRUNVUkUJMHgwMDIwCisKKy8qIC0tLS0tICBIQ0kgQ29tbWFuZHMgLS0tLSAqLworLyogT0dGICYgT0NGIHZhbHVlcyAqLworCisvKiBJbmZvcm1hdGlvbmFsIFBhcmFtZXRlcnMgKi8KKyNkZWZpbmUgT0dGX0lORk9fUEFSQU0JMHgwNAorCisjZGVmaW5lIE9DRl9SRUFEX0xPQ0FMX1ZFUlNJT04JMHgwMDAxCitzdHJ1Y3QgaGNpX3JwX3JlYWRfbG9jX3ZlcnNpb24geworCV9fdTggICAgIHN0YXR1czsKKwlfX3U4ICAgICBoY2lfdmVyOworCV9fdTE2ICAgIGhjaV9yZXY7CisJX191OCAgICAgbG1wX3ZlcjsKKwlfX3UxNiAgICBtYW51ZmFjdHVyZXI7CisJX191MTYgICAgbG1wX3N1YnZlcjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZGVmaW5lIE9DRl9SRUFEX0xPQ0FMX0ZFQVRVUkVTCTB4MDAwMworc3RydWN0IGhjaV9ycF9yZWFkX2xvY19mZWF0dXJlcyB7CisJX191OCBzdGF0dXM7CisJX191OCBmZWF0dXJlc1s4XTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZGVmaW5lIE9DRl9SRUFEX0JVRkZFUl9TSVpFCTB4MDAwNQorc3RydWN0IGhjaV9ycF9yZWFkX2J1ZmZlcl9zaXplIHsKKwlfX3U4ICAgICBzdGF0dXM7CisJX191MTYgICAgYWNsX210dTsKKwlfX3U4ICAgICBzY29fbXR1OworCV9fdTE2ICAgIGFjbF9tYXhfcGt0OworCV9fdTE2ICAgIHNjb19tYXhfcGt0OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgT0NGX1JFQURfQkRfQUREUgkweDAwMDkKK3N0cnVjdCBoY2lfcnBfcmVhZF9iZF9hZGRyIHsKKwlfX3U4ICAgICBzdGF0dXM7CisJYmRhZGRyX3QgYmRhZGRyOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qIEhvc3QgQ29udHJvbGxlciBhbmQgQmFzZWJhbmQgKi8KKyNkZWZpbmUgT0dGX0hPU1RfQ1RMCTB4MDMKKyNkZWZpbmUgT0NGX1JFU0VUCQkweDAwMDMKKyNkZWZpbmUgT0NGX1JFQURfQVVUSF9FTkFCTEUJMHgwMDFGCisjZGVmaW5lIE9DRl9XUklURV9BVVRIX0VOQUJMRQkweDAwMjAKKwkjZGVmaW5lIEFVVEhfRElTQUJMRUQJCTB4MDAKKwkjZGVmaW5lIEFVVEhfRU5BQkxFRAkJMHgwMQorCisjZGVmaW5lIE9DRl9SRUFEX0VOQ1JZUFRfTU9ERQkweDAwMjEKKyNkZWZpbmUgT0NGX1dSSVRFX0VOQ1JZUFRfTU9ERQkweDAwMjIKKwkjZGVmaW5lIEVOQ1JZUFRfRElTQUJMRUQJMHgwMAorCSNkZWZpbmUgRU5DUllQVF9QMlAJCTB4MDEKKwkjZGVmaW5lIEVOQ1JZUFRfQk9USAkJMHgwMgorCisjZGVmaW5lIE9DRl9XUklURV9DQV9USU1FT1VUICAJMHgwMDE2CQorI2RlZmluZSBPQ0ZfV1JJVEVfUEdfVElNRU9VVCAgCTB4MDAxOAorCisjZGVmaW5lIE9DRl9XUklURV9TQ0FOX0VOQUJMRSAJMHgwMDFBCisJI2RlZmluZSBTQ0FOX0RJU0FCTEVECQkweDAwCisJI2RlZmluZSBTQ0FOX0lOUVVJUlkJCTB4MDEKKwkjZGVmaW5lIFNDQU5fUEFHRQkJMHgwMgorCisjZGVmaW5lIE9DRl9TRVRfRVZFTlRfRkxUCTB4MDAwNQorc3RydWN0IGhjaV9jcF9zZXRfZXZlbnRfZmx0IHsKKwlfX3U4ICAgICBmbHRfdHlwZTsKKwlfX3U4ICAgICBjb25kX3R5cGU7CisJX191OCAgICAgY29uZGl0aW9uWzBdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qIEZpbHRlciB0eXBlcyAqLworI2RlZmluZSBIQ0lfRkxUX0NMRUFSX0FMTAkweDAwCisjZGVmaW5lIEhDSV9GTFRfSU5RX1JFU1VMVAkweDAxCisjZGVmaW5lIEhDSV9GTFRfQ09OTl9TRVRVUAkweDAyCisKKy8qIENPTk5fU0VUVVAgQ29uZGl0aW9uIHR5cGVzICovCisjZGVmaW5lIEhDSV9DT05OX1NFVFVQX0FMTE9XX0FMTAkweDAwCisjZGVmaW5lIEhDSV9DT05OX1NFVFVQX0FMTE9XX0NMQVNTCTB4MDEKKyNkZWZpbmUgSENJX0NPTk5fU0VUVVBfQUxMT1dfQkRBRERSCTB4MDIKKworLyogQ09OTl9TRVRVUCBDb25kaXRpb25zICovCisjZGVmaW5lIEhDSV9DT05OX1NFVFVQX0FVVE9fT0ZGCTB4MDEKKyNkZWZpbmUgSENJX0NPTk5fU0VUVVBfQVVUT19PTgkweDAyCisKKyNkZWZpbmUgT0NGX1JFQURfQ0xBU1NfT0ZfREVWCTB4MDAyMworc3RydWN0IGhjaV9ycF9yZWFkX2Rldl9jbGFzcyB7CisJX191OCAgICAgc3RhdHVzOworCV9fdTggICAgIGRldl9jbGFzc1szXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZGVmaW5lIE9DRl9XUklURV9DTEFTU19PRl9ERVYJMHgwMDI0CitzdHJ1Y3QgaGNpX2NwX3dyaXRlX2Rldl9jbGFzcyB7CisJX191OCAgICAgZGV2X2NsYXNzWzNdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgT0NGX1JFQURfVk9JQ0VfU0VUVElORwkweDAwMjUKK3N0cnVjdCBoY2lfcnBfcmVhZF92b2ljZV9zZXR0aW5nIHsKKwlfX3U4CXN0YXR1czsKKwlfX3UxNgl2b2ljZV9zZXR0aW5nOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgT0NGX1dSSVRFX1ZPSUNFX1NFVFRJTkcJMHgwMDI2CitzdHJ1Y3QgaGNpX2NwX3dyaXRlX3ZvaWNlX3NldHRpbmcgeworCV9fdTE2CXZvaWNlX3NldHRpbmc7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2RlZmluZSBPQ0ZfSE9TVF9CVUZGRVJfU0laRQkweDAwMzMKK3N0cnVjdCBoY2lfY3BfaG9zdF9idWZmZXJfc2l6ZSB7CisJX191MTYgICAgYWNsX210dTsKKwlfX3U4ICAgICBzY29fbXR1OworCV9fdTE2ICAgIGFjbF9tYXhfcGt0OworCV9fdTE2ICAgIHNjb19tYXhfcGt0OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qIExpbmsgQ29udHJvbCAqLworI2RlZmluZSBPR0ZfTElOS19DVEwJMHgwMSAKKyNkZWZpbmUgT0NGX0NSRUFURV9DT05OCQkweDAwMDUKK3N0cnVjdCBoY2lfY3BfY3JlYXRlX2Nvbm4geworCWJkYWRkcl90IGJkYWRkcjsKKwlfX3UxNiAgICBwa3RfdHlwZTsKKwlfX3U4ICAgICBwc2Nhbl9yZXBfbW9kZTsKKwlfX3U4ICAgICBwc2Nhbl9tb2RlOworCV9fdTE2ICAgIGNsb2NrX29mZnNldDsKKwlfX3U4ICAgICByb2xlX3N3aXRjaDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZGVmaW5lIE9DRl9BQ0NFUFRfQ09OTl9SRVEJMHgwMDA5CitzdHJ1Y3QgaGNpX2NwX2FjY2VwdF9jb25uX3JlcSB7CisJYmRhZGRyX3QgYmRhZGRyOworCV9fdTggICAgIHJvbGU7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2RlZmluZSBPQ0ZfUkVKRUNUX0NPTk5fUkVRCTB4MDAwYQorc3RydWN0IGhjaV9jcF9yZWplY3RfY29ubl9yZXEgeworCWJkYWRkcl90IGJkYWRkcjsKKwlfX3U4ICAgICByZWFzb247Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2RlZmluZSBPQ0ZfRElTQ09OTkVDVAkweDAwMDYKK3N0cnVjdCBoY2lfY3BfZGlzY29ubmVjdCB7CisJX191MTYgICAgaGFuZGxlOworCV9fdTggICAgIHJlYXNvbjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZGVmaW5lIE9DRl9BRERfU0NPCTB4MDAwNworc3RydWN0IGhjaV9jcF9hZGRfc2NvIHsKKwlfX3UxNiAgICBoYW5kbGU7CisJX191MTYgICAgcGt0X3R5cGU7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2RlZmluZSBPQ0ZfSU5RVUlSWQkJMHgwMDAxCitzdHJ1Y3QgaGNpX2NwX2lucXVpcnkgeworCV9fdTggICAgIGxhcFszXTsKKwlfX3U4ICAgICBsZW5ndGg7CisJX191OCAgICAgbnVtX3JzcDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZGVmaW5lIE9DRl9JTlFVSVJZX0NBTkNFTAkweDAwMDIKKworI2RlZmluZSBPQ0ZfTElOS19LRVlfUkVQTFkJMHgwMDBCCitzdHJ1Y3QgaGNpX2NwX2xpbmtfa2V5X3JlcGx5IHsKKwliZGFkZHJfdCBiZGFkZHI7CisJX191OCAgICAgbGlua19rZXlbMTZdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgT0NGX0xJTktfS0VZX05FR19SRVBMWQkweDAwMEMKK3N0cnVjdCBoY2lfY3BfbGlua19rZXlfbmVnX3JlcGx5IHsKKwliZGFkZHJfdCBiZGFkZHI7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2RlZmluZSBPQ0ZfUElOX0NPREVfUkVQTFkJMHgwMDBECitzdHJ1Y3QgaGNpX2NwX3Bpbl9jb2RlX3JlcGx5IHsKKwliZGFkZHJfdCBiZGFkZHI7CisJX191OCAgICAgcGluX2xlbjsKKwlfX3U4ICAgICBwaW5fY29kZVsxNl07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2RlZmluZSBPQ0ZfUElOX0NPREVfTkVHX1JFUExZCTB4MDAwRQorc3RydWN0IGhjaV9jcF9waW5fY29kZV9uZWdfcmVwbHkgeworCWJkYWRkcl90IGJkYWRkcjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZGVmaW5lIE9DRl9DSEFOR0VfQ09OTl9QVFlQRQkweDAwMEYKK3N0cnVjdCBoY2lfY3BfY2hhbmdlX2Nvbm5fcHR5cGUgeworCV9fdTE2ICAgIGhhbmRsZTsKKwlfX3UxNiAgICBwa3RfdHlwZTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZGVmaW5lIE9DRl9BVVRIX1JFUVVFU1RFRAkweDAwMTEKK3N0cnVjdCBoY2lfY3BfYXV0aF9yZXF1ZXN0ZWQgeworCV9fdTE2ICAgIGhhbmRsZTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZGVmaW5lIE9DRl9TRVRfQ09OTl9FTkNSWVBUCTB4MDAxMworc3RydWN0IGhjaV9jcF9zZXRfY29ubl9lbmNyeXB0IHsKKwlfX3UxNiAgICBoYW5kbGU7CisJX191OCAgICAgZW5jcnlwdDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZGVmaW5lIE9DRl9DSEFOR0VfQ09OTl9MSU5LX0tFWSAweDAwMTUKK3N0cnVjdCBoY2lfY3BfY2hhbmdlX2Nvbm5fbGlua19rZXkgeworCV9fdTE2ICAgIGhhbmRsZTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZGVmaW5lIE9DRl9SRUFEX1JFTU9URV9GRUFUVVJFUyAweDAwMUIKK3N0cnVjdCBoY2lfY3BfcmVhZF9ybXRfZmVhdHVyZXMgeworCV9fdTE2ICAgIGhhbmRsZTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZGVmaW5lIE9DRl9SRUFEX1JFTU9URV9WRVJTSU9OIDB4MDAxRAorc3RydWN0IGhjaV9jcF9yZWFkX3JtdF92ZXJzaW9uIHsKKwlfX3UxNiAgICBoYW5kbGU7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyogTGluayBQb2xpY3kgKi8KKyNkZWZpbmUgT0dGX0xJTktfUE9MSUNZCSAweDAyICAgCisjZGVmaW5lIE9DRl9ST0xFX0RJU0NPVkVSWQkweDAwMDkKK3N0cnVjdCBoY2lfY3Bfcm9sZV9kaXNjb3ZlcnkgeworCV9fdTE2ICAgIGhhbmRsZTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworc3RydWN0IGhjaV9ycF9yb2xlX2Rpc2NvdmVyeSB7CisJX191OCAgICAgc3RhdHVzOworCV9fdTE2ICAgIGhhbmRsZTsKKwlfX3U4ICAgICByb2xlOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgT0NGX1JFQURfTElOS19QT0xJQ1kJMHgwMDBDCitzdHJ1Y3QgaGNpX2NwX3JlYWRfbGlua19wb2xpY3kgeworCV9fdTE2ICAgIGhhbmRsZTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworc3RydWN0IGhjaV9ycF9yZWFkX2xpbmtfcG9saWN5IHsKKwlfX3U4ICAgICBzdGF0dXM7CisJX191MTYgICAgaGFuZGxlOworCV9fdTE2ICAgIHBvbGljeTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZGVmaW5lIE9DRl9TV0lUQ0hfUk9MRQkweDAwMEIKK3N0cnVjdCBoY2lfY3Bfc3dpdGNoX3JvbGUgeworCWJkYWRkcl90IGJkYWRkcjsKKwlfX3U4ICAgICByb2xlOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgT0NGX1dSSVRFX0xJTktfUE9MSUNZCTB4MDAwRAorc3RydWN0IGhjaV9jcF93cml0ZV9saW5rX3BvbGljeSB7CisJX191MTYgICAgaGFuZGxlOworCV9fdTE2ICAgIHBvbGljeTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworc3RydWN0IGhjaV9ycF93cml0ZV9saW5rX3BvbGljeSB7CisJX191OCAgICAgc3RhdHVzOworCV9fdTE2ICAgIGhhbmRsZTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKiBTdGF0dXMgcGFyYW1zICovCisjZGVmaW5lIE9HRl9TVEFUVVNfUEFSQU0JMHgwNQorCisvKiBUZXN0aW5nIGNvbW1hbmRzICovCisjZGVmaW5lIE9HRl9URVNUSU5HX0NNRAkJMHgzRQorCisvKiBWZW5kb3Igc3BlY2lmaWMgY29tbWFuZHMgKi8KKyNkZWZpbmUgT0dGX1ZFTkRPUl9DTUQJCTB4M0YKKworLyogLS0tLSBIQ0kgRXZlbnRzIC0tLS0gKi8KKyNkZWZpbmUgSENJX0VWX0lOUVVJUllfQ09NUExFVEUJMHgwMQorCisjZGVmaW5lIEhDSV9FVl9JTlFVSVJZX1JFU1VMVAkweDAyCitzdHJ1Y3QgaW5xdWlyeV9pbmZvIHsKKwliZGFkZHJfdCBiZGFkZHI7CisJX191OCAgICAgcHNjYW5fcmVwX21vZGU7CisJX191OCAgICAgcHNjYW5fcGVyaW9kX21vZGU7CisJX191OCAgICAgcHNjYW5fbW9kZTsKKwlfX3U4ICAgICBkZXZfY2xhc3NbM107CisJX191MTYgICAgY2xvY2tfb2Zmc2V0OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgSENJX0VWX0lOUVVJUllfUkVTVUxUX1dJVEhfUlNTSQkweDIyCitzdHJ1Y3QgaW5xdWlyeV9pbmZvX3dpdGhfcnNzaSB7CisJYmRhZGRyX3QgYmRhZGRyOworCV9fdTggICAgIHBzY2FuX3JlcF9tb2RlOworCV9fdTggICAgIHBzY2FuX3BlcmlvZF9tb2RlOworCV9fdTggICAgIGRldl9jbGFzc1szXTsKKwlfX3UxNiAgICBjbG9ja19vZmZzZXQ7CisJX19zOCAgICAgcnNzaTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZGVmaW5lIEhDSV9FVl9DT05OX0NPTVBMRVRFIAkweDAzCitzdHJ1Y3QgaGNpX2V2X2Nvbm5fY29tcGxldGUgeworCV9fdTggICAgIHN0YXR1czsKKwlfX3UxNiAgICBoYW5kbGU7CisJYmRhZGRyX3QgYmRhZGRyOworCV9fdTggICAgIGxpbmtfdHlwZTsKKwlfX3U4ICAgICBlbmNyX21vZGU7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2RlZmluZSBIQ0lfRVZfQ09OTl9SRVFVRVNUCTB4MDQKK3N0cnVjdCBoY2lfZXZfY29ubl9yZXF1ZXN0IHsKKwliZGFkZHJfdCBiZGFkZHI7CisJX191OCAgICAgZGV2X2NsYXNzWzNdOworCV9fdTggICAgIGxpbmtfdHlwZTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZGVmaW5lIEhDSV9FVl9ESVNDT05OX0NPTVBMRVRFCTB4MDUKK3N0cnVjdCBoY2lfZXZfZGlzY29ubl9jb21wbGV0ZSB7CisJX191OCAgICAgc3RhdHVzOworCV9fdTE2ICAgIGhhbmRsZTsKKwlfX3U4ICAgICByZWFzb247Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2RlZmluZSBIQ0lfRVZfQVVUSF9DT01QTEVURQkweDA2CitzdHJ1Y3QgaGNpX2V2X2F1dGhfY29tcGxldGUgeworCV9fdTggICAgIHN0YXR1czsKKwlfX3UxNiAgICBoYW5kbGU7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2RlZmluZSBIQ0lfRVZfRU5DUllQVF9DSEFOR0UJMHgwOAorc3RydWN0IGhjaV9ldl9lbmNyeXB0X2NoYW5nZSB7CisJX191OCAgICAgc3RhdHVzOworCV9fdTE2ICAgIGhhbmRsZTsKKwlfX3U4ICAgICBlbmNyeXB0OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgSENJX0VWX0NIQU5HRV9DT05OX0xJTktfS0VZX0NPTVBMRVRFCTB4MDkKK3N0cnVjdCBoY2lfZXZfY2hhbmdlX2Nvbm5fbGlua19rZXlfY29tcGxldGUgeworCV9fdTggICAgIHN0YXR1czsKKwlfX3UxNiAgICBoYW5kbGU7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2RlZmluZSBIQ0lfRVZfUU9TX1NFVFVQX0NPTVBMRVRFCTB4MEQKK3N0cnVjdCBoY2lfcW9zIHsKKwlfX3U4ICAgICBzZXJ2aWNlX3R5cGU7CisJX191MzIgICAgdG9rZW5fcmF0ZTsKKwlfX3UzMiAgICBwZWFrX2JhbmR3aWR0aDsKKwlfX3UzMiAgICBsYXRlbmN5OworCV9fdTMyICAgIGRlbGF5X3ZhcmlhdGlvbjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworc3RydWN0IGhjaV9ldl9xb3Nfc2V0dXBfY29tcGxldGUgeworCV9fdTggICAgIHN0YXR1czsKKwlfX3UxNiAgICBoYW5kbGU7CisJc3RydWN0ICAgaGNpX3FvcyBxb3M7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2RlZmluZSBIQ0lfRVZfQ01EX0NPTVBMRVRFIAkweDBFCitzdHJ1Y3QgaGNpX2V2X2NtZF9jb21wbGV0ZSB7CisJX191OCAgICAgbmNtZDsKKwlfX3UxNiAgICBvcGNvZGU7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2RlZmluZSBIQ0lfRVZfQ01EX1NUQVRVUyAJMHgwRgorc3RydWN0IGhjaV9ldl9jbWRfc3RhdHVzIHsKKwlfX3U4ICAgICBzdGF0dXM7CisJX191OCAgICAgbmNtZDsKKwlfX3UxNiAgICBvcGNvZGU7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2RlZmluZSBIQ0lfRVZfTlVNX0NPTVBfUEtUUwkweDEzCitzdHJ1Y3QgaGNpX2V2X251bV9jb21wX3BrdHMgeworCV9fdTggICAgIG51bV9obmRsOworCS8qIHZhcmlhYmxlIGxlbmd0aCBwYXJ0ICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2RlZmluZSBIQ0lfRVZfUk9MRV9DSEFOR0UJMHgxMgorc3RydWN0IGhjaV9ldl9yb2xlX2NoYW5nZSB7CisJX191OCAgICAgc3RhdHVzOworCWJkYWRkcl90IGJkYWRkcjsKKwlfX3U4ICAgICByb2xlOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgSENJX0VWX01PREVfQ0hBTkdFCTB4MTQKK3N0cnVjdCBoY2lfZXZfbW9kZV9jaGFuZ2UgeworCV9fdTggICAgIHN0YXR1czsKKwlfX3UxNiAgICBoYW5kbGU7CisJX191OCAgICAgbW9kZTsKKwlfX3UxNiAgICBpbnRlcnZhbDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZGVmaW5lIEhDSV9FVl9QSU5fQ09ERV9SRVEJMHgxNgorc3RydWN0IGhjaV9ldl9waW5fY29kZV9yZXEgeworCWJkYWRkcl90IGJkYWRkcjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZGVmaW5lIEhDSV9FVl9MSU5LX0tFWV9SRVEJMHgxNworc3RydWN0IGhjaV9ldl9saW5rX2tleV9yZXEgeworCWJkYWRkcl90IGJkYWRkcjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZGVmaW5lIEhDSV9FVl9MSU5LX0tFWV9OT1RJRlkJMHgxOAorc3RydWN0IGhjaV9ldl9saW5rX2tleV9ub3RpZnkgeworCWJkYWRkcl90IGJkYWRkcjsKKwlfX3U4CSBsaW5rX2tleVsxNl07CisJX191OAkga2V5X3R5cGU7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2RlZmluZSBIQ0lfRVZfUk1UX0ZFQVRVUkVTCTB4MEIKK3N0cnVjdCBoY2lfZXZfcm10X2ZlYXR1cmVzIHsKKwlfX3U4ICAgICBzdGF0dXM7CisJX191MTYgICAgaGFuZGxlOworCV9fdTggICAgIGZlYXR1cmVzWzhdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgSENJX0VWX1JNVF9WRVJTSU9OCTB4MEMKK3N0cnVjdCBoY2lfZXZfcm10X3ZlcnNpb24geworCV9fdTggICAgIHN0YXR1czsKKwlfX3UxNiAgICBoYW5kbGU7CisJX191OCAgICAgbG1wX3ZlcjsKKwlfX3UxNiAgICBtYW51ZmFjdHVyZXI7CisJX191MTYgICAgbG1wX3N1YnZlcjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZGVmaW5lIEhDSV9FVl9DTE9DS19PRkZTRVQJMHgwMUMKK3N0cnVjdCBoY2lfZXZfY2xvY2tfb2Zmc2V0IHsKKwlfX3U4ICAgICBzdGF0dXM7CisJX191MTYgICAgaGFuZGxlOworCV9fdTE2ICAgIGNsb2NrX29mZnNldDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKiBJbnRlcm5hbCBldmVudHMgZ2VuZXJhdGVkIGJ5IEJsdWV0b290aCBzdGFjayAqLworI2RlZmluZSBIQ0lfRVZfU1RBQ0tfSU5URVJOQUwJMHhGRAorc3RydWN0IGhjaV9ldl9zdGFja19pbnRlcm5hbCB7CisJX191MTYgICAgdHlwZTsKKwlfX3U4ICAgICBkYXRhWzBdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgSENJX0VWX1NJX0RFVklDRSAgCTB4MDEKK3N0cnVjdCBoY2lfZXZfc2lfZGV2aWNlIHsKKwlfX3UxNiAgICBldmVudDsKKwlfX3UxNiAgICBkZXZfaWQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2RlZmluZSBIQ0lfRVZfU0lfU0VDVVJJVFkJMHgwMgorc3RydWN0IGhjaV9ldl9zaV9zZWN1cml0eSB7CisJX191MTYgICAgZXZlbnQ7CisJX191MTYgICAgcHJvdG87CisJX191MTYgICAgc3VicHJvdG87CisJX191OCAgICAgaW5jb21pbmc7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyogLS0tLSBIQ0kgUGFja2V0IHN0cnVjdHVyZXMgLS0tLSAqLworI2RlZmluZSBIQ0lfQ09NTUFORF9IRFJfU0laRSAzCisjZGVmaW5lIEhDSV9FVkVOVF9IRFJfU0laRSAgIDIKKyNkZWZpbmUgSENJX0FDTF9IRFJfU0laRSAgICAgNAorI2RlZmluZSBIQ0lfU0NPX0hEUl9TSVpFICAgICAzCisKK3N0cnVjdCBoY2lfY29tbWFuZF9oZHIgeworCV9fdTE2IAlvcGNvZGU7CQkvKiBPQ0YgJiBPR0YgKi8KKwlfX3U4IAlwbGVuOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBoY2lfZXZlbnRfaGRyIHsKKwlfX3U4IAlldnQ7CisJX191OCAJcGxlbjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgaGNpX2FjbF9oZHIgeworCV9fdTE2IAloYW5kbGU7CQkvKiBIYW5kbGUgJiBGbGFncyhQQiwgQkMpICovCisJX191MTYgCWRsZW47Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGhjaV9zY29faGRyIHsKKwlfX3UxNiAJaGFuZGxlOworCV9fdTggCWRsZW47Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyogQ29tbWFuZCBvcGNvZGUgcGFjay91bnBhY2sgKi8KKyNkZWZpbmUgaGNpX29wY29kZV9wYWNrKG9nZiwgb2NmKQkoX191MTYpKChvY2YgJiAweDAzZmYpfChvZ2YgPDwgMTApKQorI2RlZmluZSBoY2lfb3Bjb2RlX29nZihvcCkJCShvcCA+PiAxMCkKKyNkZWZpbmUgaGNpX29wY29kZV9vY2Yob3ApCQkob3AgJiAweDAzZmYpCisKKy8qIEFDTCBoYW5kbGUgYW5kIGZsYWdzIHBhY2svdW5wYWNrICovCisjZGVmaW5lIGhjaV9oYW5kbGVfcGFjayhoLCBmKQkoX191MTYpKChoICYgMHgwZmZmKXwoZiA8PCAxMikpCisjZGVmaW5lIGhjaV9oYW5kbGUoaCkJCShoICYgMHgwZmZmKQorI2RlZmluZSBoY2lfZmxhZ3MoaCkJCShoID4+IDEyKQorCisvKiAtLS0tIEhDSSBTb2NrZXRzIC0tLS0gKi8KKworLyogU29ja2V0IG9wdGlvbnMgKi8KKyNkZWZpbmUgSENJX0RBVEFfRElSCTEKKyNkZWZpbmUgSENJX0ZJTFRFUgkyCisjZGVmaW5lIEhDSV9USU1FX1NUQU1QCTMKKworLyogQ01TRyBmbGFncyAqLworI2RlZmluZSBIQ0lfQ01TR19ESVIJMHgwMDAxCisjZGVmaW5lIEhDSV9DTVNHX1RTVEFNUAkweDAwMDIKKworc3RydWN0IHNvY2thZGRyX2hjaSB7CisJc2FfZmFtaWx5X3QgICAgaGNpX2ZhbWlseTsKKwl1bnNpZ25lZCBzaG9ydCBoY2lfZGV2OworfTsKKyNkZWZpbmUgSENJX0RFVl9OT05FCTB4ZmZmZgorCitzdHJ1Y3QgaGNpX2ZpbHRlciB7CisJdW5zaWduZWQgbG9uZyB0eXBlX21hc2s7CisJdW5zaWduZWQgbG9uZyBldmVudF9tYXNrWzJdOworCV9fdTE2ICAgb3Bjb2RlOworfTsKKworc3RydWN0IGhjaV91ZmlsdGVyIHsKKwlfX3UzMiAgIHR5cGVfbWFzazsKKwlfX3UzMiAgIGV2ZW50X21hc2tbMl07CisJX191MTYgICBvcGNvZGU7Cit9OworCisjZGVmaW5lIEhDSV9GTFRfVFlQRV9CSVRTCTMxCisjZGVmaW5lIEhDSV9GTFRfRVZFTlRfQklUUwk2MworI2RlZmluZSBIQ0lfRkxUX09HRl9CSVRTCTYzCisjZGVmaW5lIEhDSV9GTFRfT0NGX0JJVFMJMTI3CisKKy8qIC0tLS0gSENJIElvY3RsIHJlcXVlc3RzIHN0cnVjdHVyZXMgLS0tLSAqLworc3RydWN0IGhjaV9kZXZfc3RhdHMgeworCV9fdTMyIGVycl9yeDsKKwlfX3UzMiBlcnJfdHg7CisJX191MzIgY21kX3R4OworCV9fdTMyIGV2dF9yeDsKKwlfX3UzMiBhY2xfdHg7CisJX191MzIgYWNsX3J4OworCV9fdTMyIHNjb190eDsKKwlfX3UzMiBzY29fcng7CisJX191MzIgYnl0ZV9yeDsKKwlfX3UzMiBieXRlX3R4OworfTsKKworc3RydWN0IGhjaV9kZXZfaW5mbyB7CisJX191MTYgZGV2X2lkOworCWNoYXIgIG5hbWVbOF07CisKKwliZGFkZHJfdCBiZGFkZHI7CisKKwlfX3UzMiBmbGFnczsKKwlfX3U4ICB0eXBlOworCisJX191OCAgZmVhdHVyZXNbOF07CisKKwlfX3UzMiBwa3RfdHlwZTsKKwlfX3UzMiBsaW5rX3BvbGljeTsKKwlfX3UzMiBsaW5rX21vZGU7CisKKwlfX3UxNiBhY2xfbXR1OworCV9fdTE2IGFjbF9wa3RzOworCV9fdTE2IHNjb19tdHU7CisJX191MTYgc2NvX3BrdHM7CisKKwlzdHJ1Y3QgaGNpX2Rldl9zdGF0cyBzdGF0OworfTsKKworc3RydWN0IGhjaV9jb25uX2luZm8geworCV9fdTE2ICAgIGhhbmRsZTsKKwliZGFkZHJfdCBiZGFkZHI7CisJX191OAkgdHlwZTsKKwlfX3U4CSBvdXQ7CisJX191MTYJIHN0YXRlOworCV9fdTMyCSBsaW5rX21vZGU7Cit9OworCitzdHJ1Y3QgaGNpX2Rldl9yZXEgeworCV9fdTE2IGRldl9pZDsKKwlfX3UzMiBkZXZfb3B0OworfTsKKworc3RydWN0IGhjaV9kZXZfbGlzdF9yZXEgeworCV9fdTE2ICBkZXZfbnVtOworCXN0cnVjdCBoY2lfZGV2X3JlcSBkZXZfcmVxWzBdOwkvKiBoY2lfZGV2X3JlcSBzdHJ1Y3R1cmVzICovCit9OworCitzdHJ1Y3QgaGNpX2Nvbm5fbGlzdF9yZXEgeworCV9fdTE2ICBkZXZfaWQ7CisJX191MTYgIGNvbm5fbnVtOworCXN0cnVjdCBoY2lfY29ubl9pbmZvIGNvbm5faW5mb1swXTsKK307CisKK3N0cnVjdCBoY2lfY29ubl9pbmZvX3JlcSB7CisJYmRhZGRyX3QgYmRhZGRyOworCV9fdTggICAgIHR5cGU7CisJc3RydWN0ICAgaGNpX2Nvbm5faW5mbyBjb25uX2luZm9bMF07Cit9OworCitzdHJ1Y3QgaGNpX2lucXVpcnlfcmVxIHsKKwlfX3UxNiBkZXZfaWQ7CisJX191MTYgZmxhZ3M7CisJX191OCAgbGFwWzNdOworCV9fdTggIGxlbmd0aDsKKwlfX3U4ICBudW1fcnNwOworfTsKKyNkZWZpbmUgSVJFUV9DQUNIRV9GTFVTSCAweDAwMDEKKworI2VuZGlmIC8qIF9fSENJX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ2M2E0NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oCkBAIC0wLDAgKzEsNjI2IEBACisvKiAKKyAgIEJsdWVaIC0gQmx1ZXRvb3RoIHByb3RvY29sIHN0YWNrIGZvciBMaW51eAorICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDEgUXVhbGNvbW0gSW5jb3Jwb3JhdGVkCisKKyAgIFdyaXR0ZW4gMjAwMCwyMDAxIGJ5IE1heGltIEtyYXNueWFuc2t5IDxtYXhrQHF1YWxjb21tLmNvbT4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKKworICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MKKyAgIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVCBPRiBUSElSRCBQQVJUWSBSSUdIVFMuCisgICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBBTkQgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZCisgICBDTEFJTSwgT1IgQU5ZIFNQRUNJQUwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBPUiBBTlkgREFNQUdFUyAKKyAgIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiAKKyAgIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIAorICAgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKworICAgQUxMIExJQUJJTElUWSwgSU5DTFVESU5HIExJQUJJTElUWSBGT1IgSU5GUklOR0VNRU5UIE9GIEFOWSBQQVRFTlRTLCAKKyAgIENPUFlSSUdIVFMsIFRSQURFTUFSS1MgT1IgT1RIRVIgUklHSFRTLCBSRUxBVElORyBUTyBVU0UgT0YgVEhJUyAKKyAgIFNPRlRXQVJFIElTIERJU0NMQUlNRUQuCisqLworCisjaWZuZGVmIF9fSENJX0NPUkVfSAorI2RlZmluZSBfX0hDSV9DT1JFX0gKKworI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxuZXQvYmx1ZXRvb3RoL2hjaS5oPgorCisvKiBIQ0kgdXBwZXIgcHJvdG9jb2xzICovCisjZGVmaW5lIEhDSV9QUk9UT19MMkNBUAkwCisjZGVmaW5lIEhDSV9QUk9UT19TQ08JMQorCisjZGVmaW5lIEhDSV9JTklUX1RJTUVPVVQgKEhaICogMTApCisKK2V4dGVybiBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NfYnRfaGNpOworCisvKiBIQ0kgQ29yZSBzdHJ1Y3R1cmVzICovCisKK3N0cnVjdCBpbnF1aXJ5X2RhdGEgeworCWJkYWRkcl90CWJkYWRkcjsKKwlfX3U4CQlwc2Nhbl9yZXBfbW9kZTsKKwlfX3U4CQlwc2Nhbl9wZXJpb2RfbW9kZTsKKwlfX3U4CQlwc2Nhbl9tb2RlOworCV9fdTgJCWRldl9jbGFzc1szXTsKKwlfX3UxNgkJY2xvY2tfb2Zmc2V0OworCV9fczgJCXJzc2k7Cit9OworCitzdHJ1Y3QgaW5xdWlyeV9lbnRyeSB7CisJc3RydWN0IGlucXVpcnlfZW50cnkgCSpuZXh0OworCV9fdTMyCQkJdGltZXN0YW1wOworCXN0cnVjdCBpbnF1aXJ5X2RhdGEJZGF0YTsKK307CisKK3N0cnVjdCBpbnF1aXJ5X2NhY2hlIHsKKwlzcGlubG9ja190IAkJbG9jazsKKwlfX3UzMgkJCXRpbWVzdGFtcDsKKwlzdHJ1Y3QgaW5xdWlyeV9lbnRyeSAJKmxpc3Q7Cit9OworCitzdHJ1Y3QgaGNpX2Nvbm5faGFzaCB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXNwaW5sb2NrX3QgICAgICAgbG9jazsKKwl1bnNpZ25lZCBpbnQgICAgIGFjbF9udW07CisJdW5zaWduZWQgaW50ICAgICBzY29fbnVtOworfTsKKworc3RydWN0IGhjaV9kZXYgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzcGlubG9ja190CWxvY2s7CisJYXRvbWljX3QJcmVmY250OworCisJY2hhcgkJbmFtZVs4XTsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCV9fdTE2CQlpZDsKKwlfX3U4CQl0eXBlOworCWJkYWRkcl90CWJkYWRkcjsKKwlfX3U4CQlmZWF0dXJlc1s4XTsKKwlfX3UxNgkJdm9pY2Vfc2V0dGluZzsKKworCV9fdTE2CQlwa3RfdHlwZTsKKwlfX3UxNgkJbGlua19wb2xpY3k7CisJX191MTYJCWxpbmtfbW9kZTsKKworCXVuc2lnbmVkIGxvbmcJcXVpcmtzOworCisJYXRvbWljX3QJY21kX2NudDsKKwl1bnNpZ25lZCBpbnQJYWNsX2NudDsKKwl1bnNpZ25lZCBpbnQJc2NvX2NudDsKKworCXVuc2lnbmVkIGludAlhY2xfbXR1OworCXVuc2lnbmVkIGludAlzY29fbXR1OworCXVuc2lnbmVkIGludAlhY2xfcGt0czsKKwl1bnNpZ25lZCBpbnQJc2NvX3BrdHM7CisKKwl1bnNpZ25lZCBsb25nCWNtZF9sYXN0X3R4OworCXVuc2lnbmVkIGxvbmcJYWNsX2xhc3RfdHg7CisJdW5zaWduZWQgbG9uZwlzY29fbGFzdF90eDsKKworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdAljbWRfdGFzazsKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QJcnhfdGFzazsKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QJdHhfdGFzazsKKworCXN0cnVjdCBza19idWZmX2hlYWQJcnhfcTsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkCXJhd19xOworCXN0cnVjdCBza19idWZmX2hlYWQJY21kX3E7CisKKwlzdHJ1Y3Qgc2tfYnVmZgkJKnNlbnRfY21kOworCisJc3RydWN0IHNlbWFwaG9yZQlyZXFfbG9jazsKKwl3YWl0X3F1ZXVlX2hlYWRfdAlyZXFfd2FpdF9xOworCV9fdTMyCQkJcmVxX3N0YXR1czsKKwlfX3UzMgkJCXJlcV9yZXN1bHQ7CisKKwlzdHJ1Y3QgaW5xdWlyeV9jYWNoZQlpbnFfY2FjaGU7CisJc3RydWN0IGhjaV9jb25uX2hhc2gJY29ubl9oYXNoOworCisJc3RydWN0IGhjaV9kZXZfc3RhdHMJc3RhdDsKKworCXN0cnVjdCBza19idWZmX2hlYWQJZHJpdmVyX2luaXQ7CisKKwl2b2lkCQkJKmRyaXZlcl9kYXRhOworCXZvaWQJCQkqY29yZV9kYXRhOworCisJYXRvbWljX3QgCQlwcm9taXNjOworCisjaWZkZWYgQ09ORklHX1BST0NfRlMKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkJKnByb2M7CisjZW5kaWYKKworCXN0cnVjdCBjbGFzc19kZXZpY2UJY2xhc3NfZGV2OworCisJc3RydWN0IG1vZHVsZSAJCSpvd25lcjsKKworCWludCAoKm9wZW4pKHN0cnVjdCBoY2lfZGV2ICpoZGV2KTsKKwlpbnQgKCpjbG9zZSkoc3RydWN0IGhjaV9kZXYgKmhkZXYpOworCWludCAoKmZsdXNoKShzdHJ1Y3QgaGNpX2RldiAqaGRldik7CisJaW50ICgqc2VuZCkoc3RydWN0IHNrX2J1ZmYgKnNrYik7CisJdm9pZCAoKmRlc3RydWN0KShzdHJ1Y3QgaGNpX2RldiAqaGRldik7CisJdm9pZCAoKm5vdGlmeSkoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHVuc2lnbmVkIGludCBldnQpOworCWludCAoKmlvY3RsKShzdHJ1Y3QgaGNpX2RldiAqaGRldiwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworfTsKKworc3RydWN0IGhjaV9jb25uIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisKKwlhdG9taWNfdAkgcmVmY250OworCXNwaW5sb2NrX3QJIGxvY2s7CisKKwliZGFkZHJfdAkgZHN0OworCV9fdTE2CQkgaGFuZGxlOworCV9fdTE2CQkgc3RhdGU7CisJX191OAkJIHR5cGU7CisJX191OAkJIG91dDsKKwlfX3U4CQkgZGV2X2NsYXNzWzNdOworCV9fdTMyCQkgbGlua19tb2RlOworCXVuc2lnbmVkIGxvbmcJIHBlbmQ7CisJCisJdW5zaWduZWQgaW50CSBzZW50OworCQorCXN0cnVjdCBza19idWZmX2hlYWQgZGF0YV9xOworCisJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CisJCisJc3RydWN0IGhjaV9kZXYJKmhkZXY7CisJdm9pZAkJKmwyY2FwX2RhdGE7CisJdm9pZAkJKnNjb19kYXRhOworCXZvaWQJCSpwcml2OworCisJc3RydWN0IGhjaV9jb25uCSpsaW5rOworfTsKKworZXh0ZXJuIHN0cnVjdCBoY2lfcHJvdG8gKmhjaV9wcm90b1tdOworZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgaGNpX2Rldl9saXN0OworZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgaGNpX2NiX2xpc3Q7CitleHRlcm4gcndsb2NrX3QgaGNpX2Rldl9saXN0X2xvY2s7CitleHRlcm4gcndsb2NrX3QgaGNpX2NiX2xpc3RfbG9jazsKKworLyogLS0tLS0gSW5xdWlyeSBjYWNoZSAtLS0tLSAqLworI2RlZmluZSBJTlFVSVJZX0NBQ0hFX0FHRV9NQVggICAoSFoqMzApICAgLy8gMzAgc2Vjb25kcworI2RlZmluZSBJTlFVSVJZX0VOVFJZX0FHRV9NQVggICAoSFoqNjApICAgLy8gNjAgc2Vjb25kcworCisjZGVmaW5lIGlucXVpcnlfY2FjaGVfbG9jayhjKQkJc3Bpbl9sb2NrKCZjLT5sb2NrKQorI2RlZmluZSBpbnF1aXJ5X2NhY2hlX3VubG9jayhjKQkJc3Bpbl91bmxvY2soJmMtPmxvY2spCisjZGVmaW5lIGlucXVpcnlfY2FjaGVfbG9ja19iaChjKQlzcGluX2xvY2tfYmgoJmMtPmxvY2spCisjZGVmaW5lIGlucXVpcnlfY2FjaGVfdW5sb2NrX2JoKGMpCXNwaW5fdW5sb2NrX2JoKCZjLT5sb2NrKQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW5xdWlyeV9jYWNoZV9pbml0KHN0cnVjdCBoY2lfZGV2ICpoZGV2KQoreworCXN0cnVjdCBpbnF1aXJ5X2NhY2hlICpjID0gJmhkZXYtPmlucV9jYWNoZTsKKwlzcGluX2xvY2tfaW5pdCgmYy0+bG9jayk7CisJYy0+bGlzdCA9IE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGlucXVpcnlfY2FjaGVfZW1wdHkoc3RydWN0IGhjaV9kZXYgKmhkZXYpCit7CisJc3RydWN0IGlucXVpcnlfY2FjaGUgKmMgPSAmaGRldi0+aW5xX2NhY2hlOworCXJldHVybiAoYy0+bGlzdCA9PSBOVUxMKTsKK30KKworc3RhdGljIGlubGluZSBsb25nIGlucXVpcnlfY2FjaGVfYWdlKHN0cnVjdCBoY2lfZGV2ICpoZGV2KQoreworCXN0cnVjdCBpbnF1aXJ5X2NhY2hlICpjID0gJmhkZXYtPmlucV9jYWNoZTsKKwlyZXR1cm4gamlmZmllcyAtIGMtPnRpbWVzdGFtcDsKK30KKworc3RhdGljIGlubGluZSBsb25nIGlucXVpcnlfZW50cnlfYWdlKHN0cnVjdCBpbnF1aXJ5X2VudHJ5ICplKQoreworCXJldHVybiBqaWZmaWVzIC0gZS0+dGltZXN0YW1wOworfQorCitzdHJ1Y3QgaW5xdWlyeV9lbnRyeSAqaGNpX2lucXVpcnlfY2FjaGVfbG9va3VwKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBiZGFkZHJfdCAqYmRhZGRyKTsKK3ZvaWQgaGNpX2lucXVpcnlfY2FjaGVfdXBkYXRlKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBzdHJ1Y3QgaW5xdWlyeV9kYXRhICpkYXRhKTsKKworLyogLS0tLS0gSENJIENvbm5lY3Rpb25zIC0tLS0tICovCitlbnVtIHsKKwlIQ0lfQ09OTl9BVVRIX1BFTkQsCisJSENJX0NPTk5fRU5DUllQVF9QRU5ELAorCUhDSV9DT05OX1JTV0lUQ0hfUEVORAorfTsKKworc3RhdGljIGlubGluZSB2b2lkIGhjaV9jb25uX2hhc2hfaW5pdChzdHJ1Y3QgaGNpX2RldiAqaGRldikKK3sKKwlzdHJ1Y3QgaGNpX2Nvbm5faGFzaCAqaCA9ICZoZGV2LT5jb25uX2hhc2g7CisJSU5JVF9MSVNUX0hFQUQoJmgtPmxpc3QpOworCXNwaW5fbG9ja19pbml0KCZoLT5sb2NrKTsKKwloLT5hY2xfbnVtID0gMDsKKwloLT5zY29fbnVtID0gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGhjaV9jb25uX2hhc2hfYWRkKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBzdHJ1Y3QgaGNpX2Nvbm4gKmMpCit7CisJc3RydWN0IGhjaV9jb25uX2hhc2ggKmggPSAmaGRldi0+Y29ubl9oYXNoOworCWxpc3RfYWRkKCZjLT5saXN0LCAmaC0+bGlzdCk7CisJaWYgKGMtPnR5cGUgPT0gQUNMX0xJTkspCisJCWgtPmFjbF9udW0rKzsKKwllbHNlCisJCWgtPnNjb19udW0rKzsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGhjaV9jb25uX2hhc2hfZGVsKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBzdHJ1Y3QgaGNpX2Nvbm4gKmMpCit7CisJc3RydWN0IGhjaV9jb25uX2hhc2ggKmggPSAmaGRldi0+Y29ubl9oYXNoOworCWxpc3RfZGVsKCZjLT5saXN0KTsKKwlpZiAoYy0+dHlwZSA9PSBBQ0xfTElOSykKKwkJaC0+YWNsX251bS0tOworCWVsc2UKKwkJaC0+c2NvX251bS0tOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBoY2lfY29ubiAqaGNpX2Nvbm5faGFzaF9sb29rdXBfaGFuZGxlKHN0cnVjdCBoY2lfZGV2ICpoZGV2LAorCQkJCQlfX3UxNiBoYW5kbGUpCit7CisJc3RydWN0IGhjaV9jb25uX2hhc2ggKmggPSAmaGRldi0+Y29ubl9oYXNoOworCXN0cnVjdCBsaXN0X2hlYWQgKnA7CisJc3RydWN0IGhjaV9jb25uICAqYzsKKworCWxpc3RfZm9yX2VhY2gocCwgJmgtPmxpc3QpIHsKKwkJYyA9IGxpc3RfZW50cnkocCwgc3RydWN0IGhjaV9jb25uLCBsaXN0KTsKKwkJaWYgKGMtPmhhbmRsZSA9PSBoYW5kbGUpCisJCQlyZXR1cm4gYzsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGhjaV9jb25uICpoY2lfY29ubl9oYXNoX2xvb2t1cF9iYShzdHJ1Y3QgaGNpX2RldiAqaGRldiwKKwkJCQkJX191OCB0eXBlLCBiZGFkZHJfdCAqYmEpCit7CisJc3RydWN0IGhjaV9jb25uX2hhc2ggKmggPSAmaGRldi0+Y29ubl9oYXNoOworCXN0cnVjdCBsaXN0X2hlYWQgKnA7CisJc3RydWN0IGhjaV9jb25uICAqYzsKKworCWxpc3RfZm9yX2VhY2gocCwgJmgtPmxpc3QpIHsKKwkJYyA9IGxpc3RfZW50cnkocCwgc3RydWN0IGhjaV9jb25uLCBsaXN0KTsKKwkJaWYgKGMtPnR5cGUgPT0gdHlwZSAmJiAhYmFjbXAoJmMtPmRzdCwgYmEpKQorCQkJcmV0dXJuIGM7CisJfQorCXJldHVybiBOVUxMOworfQorCit2b2lkIGhjaV9hY2xfZGlzY29ubihzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIF9fdTggcmVhc29uKTsKK3ZvaWQgaGNpX2FkZF9zY28oc3RydWN0IGhjaV9jb25uICpjb25uLCBfX3UxNiBoYW5kbGUpOworCitzdHJ1Y3QgaGNpX2Nvbm4gKmhjaV9jb25uX2FkZChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgaW50IHR5cGUsIGJkYWRkcl90ICpkc3QpOworaW50ICAgIGhjaV9jb25uX2RlbChzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4pOwordm9pZCAgIGhjaV9jb25uX2hhc2hfZmx1c2goc3RydWN0IGhjaV9kZXYgKmhkZXYpOworCitzdHJ1Y3QgaGNpX2Nvbm4gKmhjaV9jb25uZWN0KHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBpbnQgdHlwZSwgYmRhZGRyX3QgKnNyYyk7CitpbnQgaGNpX2Nvbm5fYXV0aChzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4pOworaW50IGhjaV9jb25uX2VuY3J5cHQoc3RydWN0IGhjaV9jb25uICpjb25uKTsKK2ludCBoY2lfY29ubl9jaGFuZ2VfbGlua19rZXkoc3RydWN0IGhjaV9jb25uICpjb25uKTsKK2ludCBoY2lfY29ubl9zd2l0Y2hfcm9sZShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIHVpbnQ4X3Qgcm9sZSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBoY2lfY29ubl9zZXRfdGltZXIoc3RydWN0IGhjaV9jb25uICpjb25uLCB1bnNpZ25lZCBsb25nIHRpbWVvdXQpCit7CisJbW9kX3RpbWVyKCZjb25uLT50aW1lciwgamlmZmllcyArIHRpbWVvdXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaGNpX2Nvbm5fZGVsX3RpbWVyKHN0cnVjdCBoY2lfY29ubiAqY29ubikKK3sKKwlkZWxfdGltZXIoJmNvbm4tPnRpbWVyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGhjaV9jb25uX2hvbGQoc3RydWN0IGhjaV9jb25uICpjb25uKQoreworCWF0b21pY19pbmMoJmNvbm4tPnJlZmNudCk7CisJaGNpX2Nvbm5fZGVsX3RpbWVyKGNvbm4pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaGNpX2Nvbm5fcHV0KHN0cnVjdCBoY2lfY29ubiAqY29ubikKK3sKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmY29ubi0+cmVmY250KSkgeworCQlpZiAoY29ubi0+dHlwZSA9PSBBQ0xfTElOSykgeworCQkJdW5zaWduZWQgbG9uZyB0aW1lbyA9IChjb25uLT5vdXQpID8KKwkJCQlIQ0lfRElTQ09OTl9USU1FT1VUIDogSENJX0RJU0NPTk5fVElNRU9VVCAqIDI7CisJCQloY2lfY29ubl9zZXRfdGltZXIoY29ubiwgdGltZW8pOworCQl9IGVsc2UKKwkJCWhjaV9jb25uX3NldF90aW1lcihjb25uLCBIWiAvIDEwMCk7CisJfQorfQorCisvKiAtLS0tLSBIQ0kgdGFza3MgLS0tLS0gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBoY2lfc2NoZWRfY21kKHN0cnVjdCBoY2lfZGV2ICpoZGV2KQoreworCXRhc2tsZXRfc2NoZWR1bGUoJmhkZXYtPmNtZF90YXNrKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGhjaV9zY2hlZF9yeChzdHJ1Y3QgaGNpX2RldiAqaGRldikKK3sKKwl0YXNrbGV0X3NjaGVkdWxlKCZoZGV2LT5yeF90YXNrKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGhjaV9zY2hlZF90eChzdHJ1Y3QgaGNpX2RldiAqaGRldikKK3sKKwl0YXNrbGV0X3NjaGVkdWxlKCZoZGV2LT50eF90YXNrKTsKK30KKworLyogLS0tLS0gSENJIERldmljZXMgLS0tLS0gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2hjaV9kZXZfcHV0KHN0cnVjdCBoY2lfZGV2ICpkKQoreworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZkLT5yZWZjbnQpKQorCQlkLT5kZXN0cnVjdChkKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGhjaV9kZXZfcHV0KHN0cnVjdCBoY2lfZGV2ICpkKQoreyAKKwlfX2hjaV9kZXZfcHV0KGQpOworCW1vZHVsZV9wdXQoZC0+b3duZXIpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBoY2lfZGV2ICpfX2hjaV9kZXZfaG9sZChzdHJ1Y3QgaGNpX2RldiAqZCkKK3sKKwlhdG9taWNfaW5jKCZkLT5yZWZjbnQpOworCXJldHVybiBkOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBoY2lfZGV2ICpoY2lfZGV2X2hvbGQoc3RydWN0IGhjaV9kZXYgKmQpCit7CisJaWYgKHRyeV9tb2R1bGVfZ2V0KGQtPm93bmVyKSkKKwkJcmV0dXJuIF9faGNpX2Rldl9ob2xkKGQpOworCXJldHVybiBOVUxMOworfQorCisjZGVmaW5lIGhjaV9kZXZfbG9jayhkKQkJc3Bpbl9sb2NrKCZkLT5sb2NrKQorI2RlZmluZSBoY2lfZGV2X3VubG9jayhkKQlzcGluX3VubG9jaygmZC0+bG9jaykKKyNkZWZpbmUgaGNpX2Rldl9sb2NrX2JoKGQpCXNwaW5fbG9ja19iaCgmZC0+bG9jaykKKyNkZWZpbmUgaGNpX2Rldl91bmxvY2tfYmgoZCkJc3Bpbl91bmxvY2tfYmgoJmQtPmxvY2spCisKK3N0cnVjdCBoY2lfZGV2ICpoY2lfZGV2X2dldChpbnQgaW5kZXgpOworc3RydWN0IGhjaV9kZXYgKmhjaV9nZXRfcm91dGUoYmRhZGRyX3QgKnNyYywgYmRhZGRyX3QgKmRzdCk7CisKK3N0cnVjdCBoY2lfZGV2ICpoY2lfYWxsb2NfZGV2KHZvaWQpOwordm9pZCBoY2lfZnJlZV9kZXYoc3RydWN0IGhjaV9kZXYgKmhkZXYpOworaW50IGhjaV9yZWdpc3Rlcl9kZXYoc3RydWN0IGhjaV9kZXYgKmhkZXYpOworaW50IGhjaV91bnJlZ2lzdGVyX2RldihzdHJ1Y3QgaGNpX2RldiAqaGRldik7CitpbnQgaGNpX3N1c3BlbmRfZGV2KHN0cnVjdCBoY2lfZGV2ICpoZGV2KTsKK2ludCBoY2lfcmVzdW1lX2RldihzdHJ1Y3QgaGNpX2RldiAqaGRldik7CitpbnQgaGNpX2Rldl9vcGVuKF9fdTE2IGRldik7CitpbnQgaGNpX2Rldl9jbG9zZShfX3UxNiBkZXYpOworaW50IGhjaV9kZXZfcmVzZXQoX191MTYgZGV2KTsKK2ludCBoY2lfZGV2X3Jlc2V0X3N0YXQoX191MTYgZGV2KTsKK2ludCBoY2lfZGV2X2NtZCh1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqYXJnKTsKK2ludCBoY2lfZ2V0X2Rldl9saXN0KHZvaWQgX191c2VyICphcmcpOworaW50IGhjaV9nZXRfZGV2X2luZm8odm9pZCBfX3VzZXIgKmFyZyk7CitpbnQgaGNpX2dldF9jb25uX2xpc3Qodm9pZCBfX3VzZXIgKmFyZyk7CitpbnQgaGNpX2dldF9jb25uX2luZm8oc3RydWN0IGhjaV9kZXYgKmhkZXYsIHZvaWQgX191c2VyICphcmcpOworaW50IGhjaV9pbnF1aXJ5KHZvaWQgX191c2VyICphcmcpOworCit2b2lkIGhjaV9ldmVudF9wYWNrZXQoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHN0cnVjdCBza19idWZmICpza2IpOworCisvKiBSZWNlaXZlIGZyYW1lIGZyb20gSENJIGRyaXZlcnMgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGhjaV9yZWN2X2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGhjaV9kZXYgKmhkZXYgPSAoc3RydWN0IGhjaV9kZXYgKikgc2tiLT5kZXY7CisJaWYgKCFoZGV2IHx8ICghdGVzdF9iaXQoSENJX1VQLCAmaGRldi0+ZmxhZ3MpIAorCQkJJiYgIXRlc3RfYml0KEhDSV9JTklULCAmaGRldi0+ZmxhZ3MpKSkgeworCQlrZnJlZV9za2Ioc2tiKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwkvKiBJbmNvbW1pbmcgc2tiICovCisJYnRfY2Ioc2tiKS0+aW5jb21pbmcgPSAxOworCisJLyogVGltZSBzdGFtcCAqLworCWRvX2dldHRpbWVvZmRheSgmc2tiLT5zdGFtcCk7CisKKwkvKiBRdWV1ZSBmcmFtZSBmb3IgcnggdGFzayAqLworCXNrYl9xdWV1ZV90YWlsKCZoZGV2LT5yeF9xLCBza2IpOworCWhjaV9zY2hlZF9yeChoZGV2KTsKKwlyZXR1cm4gMDsKK30KKworaW50IGhjaV9yZWdpc3Rlcl9zeXNmcyhzdHJ1Y3QgaGNpX2RldiAqaGRldik7Cit2b2lkIGhjaV91bnJlZ2lzdGVyX3N5c2ZzKHN0cnVjdCBoY2lfZGV2ICpoZGV2KTsKKworI2RlZmluZSBTRVRfSENJREVWX0RFVihoZGV2LCBwZGV2KSAoKGhkZXYpLT5jbGFzc19kZXYuZGV2ID0gKHBkZXYpKQorCisvKiAtLS0tLSBMTVAgY2FwYWJpbGl0aWVzIC0tLS0tICovCisjZGVmaW5lIGxtcF9yc3dpdGNoX2NhcGFibGUoZGV2KSAoZGV2LT5mZWF0dXJlc1swXSAmIExNUF9SU1dJVENIKQorI2RlZmluZSBsbXBfZW5jcnlwdF9jYXBhYmxlKGRldikgKGRldi0+ZmVhdHVyZXNbMF0gJiBMTVBfRU5DUllQVCkKKworLyogLS0tLS0gSENJIHByb3RvY29scyAtLS0tLSAqLworc3RydWN0IGhjaV9wcm90byB7CisJY2hhciAJCSpuYW1lOworCXVuc2lnbmVkIGludAlpZDsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCisJdm9pZAkJKnByaXY7CisKKwlpbnQgKCpjb25uZWN0X2luZCkgCShzdHJ1Y3QgaGNpX2RldiAqaGRldiwgYmRhZGRyX3QgKmJkYWRkciwgX191OCB0eXBlKTsKKwlpbnQgKCpjb25uZWN0X2NmbSkJKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgX191OCBzdGF0dXMpOworCWludCAoKmRpc2Nvbm5faW5kKQkoc3RydWN0IGhjaV9jb25uICpjb25uLCBfX3U4IHJlYXNvbik7CisJaW50ICgqcmVjdl9hY2xkYXRhKQkoc3RydWN0IGhjaV9jb25uICpjb25uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX3UxNiBmbGFncyk7CisJaW50ICgqcmVjdl9zY29kYXRhKQkoc3RydWN0IGhjaV9jb25uICpjb25uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKwlpbnQgKCphdXRoX2NmbSkJCShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIF9fdTggc3RhdHVzKTsKKwlpbnQgKCplbmNyeXB0X2NmbSkJKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgX191OCBzdGF0dXMpOworfTsKKworc3RhdGljIGlubGluZSBpbnQgaGNpX3Byb3RvX2Nvbm5lY3RfaW5kKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBiZGFkZHJfdCAqYmRhZGRyLCBfX3U4IHR5cGUpCit7CisJcmVnaXN0ZXIgc3RydWN0IGhjaV9wcm90byAqaHA7CisJaW50IG1hc2sgPSAwOworCQorCWhwID0gaGNpX3Byb3RvW0hDSV9QUk9UT19MMkNBUF07CisJaWYgKGhwICYmIGhwLT5jb25uZWN0X2luZCkKKwkJbWFzayB8PSBocC0+Y29ubmVjdF9pbmQoaGRldiwgYmRhZGRyLCB0eXBlKTsKKworCWhwID0gaGNpX3Byb3RvW0hDSV9QUk9UT19TQ09dOworCWlmIChocCAmJiBocC0+Y29ubmVjdF9pbmQpCisJCW1hc2sgfD0gaHAtPmNvbm5lY3RfaW5kKGhkZXYsIGJkYWRkciwgdHlwZSk7CisKKwlyZXR1cm4gbWFzazsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGhjaV9wcm90b19jb25uZWN0X2NmbShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIF9fdTggc3RhdHVzKQoreworCXJlZ2lzdGVyIHN0cnVjdCBoY2lfcHJvdG8gKmhwOworCisJaHAgPSBoY2lfcHJvdG9bSENJX1BST1RPX0wyQ0FQXTsKKwlpZiAoaHAgJiYgaHAtPmNvbm5lY3RfY2ZtKQorCQlocC0+Y29ubmVjdF9jZm0oY29ubiwgc3RhdHVzKTsKKworCWhwID0gaGNpX3Byb3RvW0hDSV9QUk9UT19TQ09dOworCWlmIChocCAmJiBocC0+Y29ubmVjdF9jZm0pCisJCWhwLT5jb25uZWN0X2NmbShjb25uLCBzdGF0dXMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaGNpX3Byb3RvX2Rpc2Nvbm5faW5kKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgX191OCByZWFzb24pCit7CisJcmVnaXN0ZXIgc3RydWN0IGhjaV9wcm90byAqaHA7CisKKwlocCA9IGhjaV9wcm90b1tIQ0lfUFJPVE9fTDJDQVBdOworCWlmIChocCAmJiBocC0+ZGlzY29ubl9pbmQpCisJCWhwLT5kaXNjb25uX2luZChjb25uLCByZWFzb24pOworCisJaHAgPSBoY2lfcHJvdG9bSENJX1BST1RPX1NDT107CisJaWYgKGhwICYmIGhwLT5kaXNjb25uX2luZCkKKwkJaHAtPmRpc2Nvbm5faW5kKGNvbm4sIHJlYXNvbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBoY2lfcHJvdG9fYXV0aF9jZm0oc3RydWN0IGhjaV9jb25uICpjb25uLCBfX3U4IHN0YXR1cykKK3sKKwlyZWdpc3RlciBzdHJ1Y3QgaGNpX3Byb3RvICpocDsKKworCWhwID0gaGNpX3Byb3RvW0hDSV9QUk9UT19MMkNBUF07CisJaWYgKGhwICYmIGhwLT5hdXRoX2NmbSkKKwkJaHAtPmF1dGhfY2ZtKGNvbm4sIHN0YXR1cyk7CisKKwlocCA9IGhjaV9wcm90b1tIQ0lfUFJPVE9fU0NPXTsKKwlpZiAoaHAgJiYgaHAtPmF1dGhfY2ZtKQorCQlocC0+YXV0aF9jZm0oY29ubiwgc3RhdHVzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGhjaV9wcm90b19lbmNyeXB0X2NmbShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIF9fdTggc3RhdHVzKQoreworCXJlZ2lzdGVyIHN0cnVjdCBoY2lfcHJvdG8gKmhwOworCisJaHAgPSBoY2lfcHJvdG9bSENJX1BST1RPX0wyQ0FQXTsKKwlpZiAoaHAgJiYgaHAtPmVuY3J5cHRfY2ZtKQorCQlocC0+ZW5jcnlwdF9jZm0oY29ubiwgc3RhdHVzKTsKKworCWhwID0gaGNpX3Byb3RvW0hDSV9QUk9UT19TQ09dOworCWlmIChocCAmJiBocC0+ZW5jcnlwdF9jZm0pCisJCWhwLT5lbmNyeXB0X2NmbShjb25uLCBzdGF0dXMpOworfQorCitpbnQgaGNpX3JlZ2lzdGVyX3Byb3RvKHN0cnVjdCBoY2lfcHJvdG8gKmhwcm90byk7CitpbnQgaGNpX3VucmVnaXN0ZXJfcHJvdG8oc3RydWN0IGhjaV9wcm90byAqaHByb3RvKTsKKworLyogLS0tLS0gSENJIGNhbGxiYWNrcyAtLS0tLSAqLworc3RydWN0IGhjaV9jYiB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCisJY2hhciAqbmFtZTsKKworCXZvaWQgKCphdXRoX2NmbSkJKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgX191OCBzdGF0dXMpOworCXZvaWQgKCplbmNyeXB0X2NmbSkJKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgX191OCBzdGF0dXMsIF9fdTggZW5jcnlwdCk7CisJdm9pZCAoKmtleV9jaGFuZ2VfY2ZtKQkoc3RydWN0IGhjaV9jb25uICpjb25uLCBfX3U4IHN0YXR1cyk7CisJdm9pZCAoKnJvbGVfc3dpdGNoX2NmbSkJKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgX191OCBzdGF0dXMsIF9fdTggcm9sZSk7Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgaGNpX2F1dGhfY2ZtKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgX191OCBzdGF0dXMpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqcDsKKworCWhjaV9wcm90b19hdXRoX2NmbShjb25uLCBzdGF0dXMpOworCisJcmVhZF9sb2NrX2JoKCZoY2lfY2JfbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoKHAsICZoY2lfY2JfbGlzdCkgeworCQlzdHJ1Y3QgaGNpX2NiICpjYiA9IGxpc3RfZW50cnkocCwgc3RydWN0IGhjaV9jYiwgbGlzdCk7CisJCWlmIChjYi0+YXV0aF9jZm0pCisJCQljYi0+YXV0aF9jZm0oY29ubiwgc3RhdHVzKTsKKwl9CisJcmVhZF91bmxvY2tfYmgoJmhjaV9jYl9saXN0X2xvY2spOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaGNpX2VuY3J5cHRfY2ZtKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgX191OCBzdGF0dXMsIF9fdTggZW5jcnlwdCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwOworCisJaGNpX3Byb3RvX2VuY3J5cHRfY2ZtKGNvbm4sIHN0YXR1cyk7CisKKwlyZWFkX2xvY2tfYmgoJmhjaV9jYl9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2gocCwgJmhjaV9jYl9saXN0KSB7CisJCXN0cnVjdCBoY2lfY2IgKmNiID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3QgaGNpX2NiLCBsaXN0KTsKKwkJaWYgKGNiLT5lbmNyeXB0X2NmbSkKKwkJCWNiLT5lbmNyeXB0X2NmbShjb25uLCBzdGF0dXMsIGVuY3J5cHQpOworCX0KKwlyZWFkX3VubG9ja19iaCgmaGNpX2NiX2xpc3RfbG9jayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBoY2lfa2V5X2NoYW5nZV9jZm0oc3RydWN0IGhjaV9jb25uICpjb25uLCBfX3U4IHN0YXR1cykKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwOworCisJcmVhZF9sb2NrX2JoKCZoY2lfY2JfbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoKHAsICZoY2lfY2JfbGlzdCkgeworCQlzdHJ1Y3QgaGNpX2NiICpjYiA9IGxpc3RfZW50cnkocCwgc3RydWN0IGhjaV9jYiwgbGlzdCk7CisJCWlmIChjYi0+a2V5X2NoYW5nZV9jZm0pCisJCQljYi0+a2V5X2NoYW5nZV9jZm0oY29ubiwgc3RhdHVzKTsKKwl9CisJcmVhZF91bmxvY2tfYmgoJmhjaV9jYl9saXN0X2xvY2spOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaGNpX3JvbGVfc3dpdGNoX2NmbShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIF9fdTggc3RhdHVzLCBfX3U4IHJvbGUpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqcDsKKworCXJlYWRfbG9ja19iaCgmaGNpX2NiX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaChwLCAmaGNpX2NiX2xpc3QpIHsKKwkJc3RydWN0IGhjaV9jYiAqY2IgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBoY2lfY2IsIGxpc3QpOworCQlpZiAoY2ItPnJvbGVfc3dpdGNoX2NmbSkKKwkJCWNiLT5yb2xlX3N3aXRjaF9jZm0oY29ubiwgc3RhdHVzLCByb2xlKTsKKwl9CisJcmVhZF91bmxvY2tfYmgoJmhjaV9jYl9saXN0X2xvY2spOworfQorCitpbnQgaGNpX3JlZ2lzdGVyX2NiKHN0cnVjdCBoY2lfY2IgKmhjYik7CitpbnQgaGNpX3VucmVnaXN0ZXJfY2Ioc3RydWN0IGhjaV9jYiAqaGNiKTsKKworaW50IGhjaV9yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTsKK2ludCBoY2lfdW5yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTsKKworaW50IGhjaV9zZW5kX2NtZChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgX191MTYgb2dmLCBfX3UxNiBvY2YsIF9fdTMyIHBsZW4sIHZvaWQgKnBhcmFtKTsKK2ludCBoY2lfc2VuZF9hY2woc3RydWN0IGhjaV9jb25uICpjb25uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX3UxNiBmbGFncyk7CitpbnQgaGNpX3NlbmRfc2NvKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKK3ZvaWQgKmhjaV9zZW50X2NtZF9kYXRhKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBfX3UxNiBvZ2YsIF9fdTE2IG9jZik7CisKK3ZvaWQgaGNpX3NpX2V2ZW50KHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBpbnQgdHlwZSwgaW50IGRsZW4sIHZvaWQgKmRhdGEpOworCisvKiAtLS0tLSBIQ0kgU29ja2V0cyAtLS0tLSAqLwordm9pZCBoY2lfc2VuZF90b19zb2NrKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKworLyogSENJIGluZm8gZm9yIHNvY2tldCAqLworI2RlZmluZSBoY2lfcGkoc2spICgoc3RydWN0IGhjaV9waW5mbyAqKSBzaykKKworc3RydWN0IGhjaV9waW5mbyB7CisJc3RydWN0IGJ0X3NvY2sgICAgYnQ7CisJc3RydWN0IGhjaV9kZXYgICAgKmhkZXY7CisJc3RydWN0IGhjaV9maWx0ZXIgZmlsdGVyOworCV9fdTMyICAgICAgICAgICAgIGNtc2dfbWFzazsKK307CisKKy8qIEhDSSBzZWN1cml0eSBmaWx0ZXIgKi8KKyNkZWZpbmUgSENJX1NGTFRfTUFYX09HRiAgNQorCitzdHJ1Y3QgaGNpX3NlY19maWx0ZXIgeworCV9fdTMyIHR5cGVfbWFzazsKKwlfX3UzMiBldmVudF9tYXNrWzJdOworCV9fdTMyIG9jZl9tYXNrW0hDSV9TRkxUX01BWF9PR0YgKyAxXVs0XTsKK307CisKKy8qIC0tLS0tIEhDSSByZXF1ZXN0cyAtLS0tLSAqLworI2RlZmluZSBIQ0lfUkVRX0RPTkUJICAwCisjZGVmaW5lIEhDSV9SRVFfUEVORAkgIDEKKyNkZWZpbmUgSENJX1JFUV9DQU5DRUxFRCAgMgorCisjZGVmaW5lIGhjaV9yZXFfbG9jayhkKQkJZG93bigmZC0+cmVxX2xvY2spCisjZGVmaW5lIGhjaV9yZXFfdW5sb2NrKGQpCXVwKCZkLT5yZXFfbG9jaykKKwordm9pZCBoY2lfcmVxX2NvbXBsZXRlKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBpbnQgcmVzdWx0KTsKKworI2VuZGlmIC8qIF9fSENJX0NPUkVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2wyY2FwLmggYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvbDJjYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjQyYTBlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2wyY2FwLmgKQEAgLTAsMCArMSwyMzggQEAKKy8qIAorICAgQmx1ZVogLSBCbHVldG9vdGggcHJvdG9jb2wgc3RhY2sgZm9yIExpbnV4CisgICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMSBRdWFsY29tbSBJbmNvcnBvcmF0ZWQKKworICAgV3JpdHRlbiAyMDAwLDIwMDEgYnkgTWF4aW0gS3Jhc255YW5za3kgPG1heGtAcXVhbGNvbW0uY29tPgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOworCisgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUworICAgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5UIE9GIFRISVJEIFBBUlRZIFJJR0hUUy4KKyAgIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIEFORCBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkKKyAgIENMQUlNLCBPUiBBTlkgU1BFQ0lBTCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIE9SIEFOWSBEQU1BR0VTIAorICAgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIAorICAgQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgCisgICBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorCisgICBBTEwgTElBQklMSVRZLCBJTkNMVURJTkcgTElBQklMSVRZIEZPUiBJTkZSSU5HRU1FTlQgT0YgQU5ZIFBBVEVOVFMsIAorICAgQ09QWVJJR0hUUywgVFJBREVNQVJLUyBPUiBPVEhFUiBSSUdIVFMsIFJFTEFUSU5HIFRPIFVTRSBPRiBUSElTIAorICAgU09GVFdBUkUgSVMgRElTQ0xBSU1FRC4KKyovCisKKyNpZm5kZWYgX19MMkNBUF9ICisjZGVmaW5lIF9fTDJDQVBfSAorCisvKiBMMkNBUCBkZWZhdWx0cyAqLworI2RlZmluZSBMMkNBUF9ERUZBVUxUX01UVQk2NzIKKyNkZWZpbmUgTDJDQVBfREVGQVVMVF9GTFVTSF9UTwkweEZGRkYKKworI2RlZmluZSBMMkNBUF9DT05OX1RJTUVPVVQJKEhaICogNDApCisKKy8qIEwyQ0FQIHNvY2tldCBhZGRyZXNzICovCitzdHJ1Y3Qgc29ja2FkZHJfbDIgeworCXNhX2ZhbWlseV90CWwyX2ZhbWlseTsKKwl1bnNpZ25lZCBzaG9ydAlsMl9wc207CisJYmRhZGRyX3QJbDJfYmRhZGRyOworfTsKKworLyogTDJDQVAgc29ja2V0IG9wdGlvbnMgKi8KKyNkZWZpbmUgTDJDQVBfT1BUSU9OUwkweDAxCitzdHJ1Y3QgbDJjYXBfb3B0aW9ucyB7CisJX191MTYgb210dTsKKwlfX3UxNiBpbXR1OworCV9fdTE2IGZsdXNoX3RvOworCV9fdTggIG1vZGU7Cit9OworCisjZGVmaW5lIEwyQ0FQX0NPTk5JTkZPCTB4MDIKK3N0cnVjdCBsMmNhcF9jb25uaW5mbyB7CisJX191MTYgaGNpX2hhbmRsZTsKKwlfX3U4ICBkZXZfY2xhc3NbM107Cit9OworCisjZGVmaW5lIEwyQ0FQX0xNCTB4MDMKKyNkZWZpbmUgTDJDQVBfTE1fTUFTVEVSCQkweDAwMDEKKyNkZWZpbmUgTDJDQVBfTE1fQVVUSAkJMHgwMDAyCisjZGVmaW5lIEwyQ0FQX0xNX0VOQ1JZUFQJMHgwMDA0CisjZGVmaW5lIEwyQ0FQX0xNX1RSVVNURUQJMHgwMDA4CisjZGVmaW5lIEwyQ0FQX0xNX1JFTElBQkxFCTB4MDAxMAorI2RlZmluZSBMMkNBUF9MTV9TRUNVUkUJCTB4MDAyMAorCisvKiBMMkNBUCBjb21tYW5kIGNvZGVzICovCisjZGVmaW5lIEwyQ0FQX0NPTU1BTkRfUkVKIDB4MDEKKyNkZWZpbmUgTDJDQVBfQ09OTl9SRVEgICAgMHgwMgorI2RlZmluZSBMMkNBUF9DT05OX1JTUCAgICAweDAzCisjZGVmaW5lIEwyQ0FQX0NPTkZfUkVRICAgIDB4MDQKKyNkZWZpbmUgTDJDQVBfQ09ORl9SU1AgICAgMHgwNQorI2RlZmluZSBMMkNBUF9ESVNDT05OX1JFUSAweDA2CisjZGVmaW5lIEwyQ0FQX0RJU0NPTk5fUlNQIDB4MDcKKyNkZWZpbmUgTDJDQVBfRUNIT19SRVEgICAgMHgwOAorI2RlZmluZSBMMkNBUF9FQ0hPX1JTUCAgICAweDA5CisjZGVmaW5lIEwyQ0FQX0lORk9fUkVRICAgIDB4MGEKKyNkZWZpbmUgTDJDQVBfSU5GT19SU1AgICAgMHgwYgorCisvKiBMMkNBUCBzdHJ1Y3R1cmVzICovCitzdHJ1Y3QgbDJjYXBfaGRyIHsKKwlfX3UxNiAgICAgIGxlbjsKKwlfX3UxNiAgICAgIGNpZDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworI2RlZmluZSBMMkNBUF9IRFJfU0laRQkJNAorCitzdHJ1Y3QgbDJjYXBfY21kX2hkciB7CisJX191OCAgICAgICBjb2RlOworCV9fdTggICAgICAgaWRlbnQ7CisJX191MTYgICAgICBsZW47Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKyNkZWZpbmUgTDJDQVBfQ01EX0hEUl9TSVpFCTQKKworc3RydWN0IGwyY2FwX2NtZF9yZWogeworCV9fdTE2ICAgICAgcmVhc29uOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBsMmNhcF9jb25uX3JlcSB7CisJX191MTYgICAgICBwc207CisJX191MTYgICAgICBzY2lkOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBsMmNhcF9jb25uX3JzcCB7CisJX191MTYgICAgICBkY2lkOworCV9fdTE2ICAgICAgc2NpZDsKKwlfX3UxNiAgICAgIHJlc3VsdDsKKwlfX3UxNiAgICAgIHN0YXR1czsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKiBjb25uZWN0IHJlc3VsdCAqLworI2RlZmluZSBMMkNBUF9DUl9TVUNDRVNTICAgIDB4MDAwMAorI2RlZmluZSBMMkNBUF9DUl9QRU5EICAgICAgIDB4MDAwMQorI2RlZmluZSBMMkNBUF9DUl9CQURfUFNNICAgIDB4MDAwMgorI2RlZmluZSBMMkNBUF9DUl9TRUNfQkxPQ0sgIDB4MDAwMworI2RlZmluZSBMMkNBUF9DUl9OT19NRU0gICAgIDB4MDAwNAorCisvKiBjb25uZWN0IHN0YXR1cyAqLworI2RlZmluZSBMMkNBUF9DU19OT19JTkZPICAgICAgMHgwMDAwCisjZGVmaW5lIEwyQ0FQX0NTX0FVVEhFTl9QRU5EICAweDAwMDEKKyNkZWZpbmUgTDJDQVBfQ1NfQVVUSE9SX1BFTkQgIDB4MDAwMgorCitzdHJ1Y3QgbDJjYXBfY29uZl9yZXEgeworCV9fdTE2ICAgICAgZGNpZDsKKwlfX3UxNiAgICAgIGZsYWdzOworCV9fdTggICAgICAgZGF0YVswXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgbDJjYXBfY29uZl9yc3AgeworCV9fdTE2ICAgICAgc2NpZDsKKwlfX3UxNiAgICAgIGZsYWdzOworCV9fdTE2ICAgICAgcmVzdWx0OworCV9fdTggICAgICAgZGF0YVswXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZGVmaW5lIEwyQ0FQX0NPTkZfU1VDQ0VTUwkweDAwCisjZGVmaW5lIEwyQ0FQX0NPTkZfVU5BQ0NFUFQJMHgwMQorCitzdHJ1Y3QgbDJjYXBfY29uZl9vcHQgeworCV9fdTggICAgICAgdHlwZTsKKwlfX3U4ICAgICAgIGxlbjsKKwlfX3U4ICAgICAgIHZhbFswXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworI2RlZmluZSBMMkNBUF9DT05GX09QVF9TSVpFCTIKKworI2RlZmluZSBMMkNBUF9DT05GX01UVQkJMHgwMQorI2RlZmluZSBMMkNBUF9DT05GX0ZMVVNIX1RPCTB4MDIKKyNkZWZpbmUgTDJDQVBfQ09ORl9RT1MJCTB4MDMKKyNkZWZpbmUgTDJDQVBfQ09ORl9SRkMJCTB4MDQKKworI2RlZmluZSBMMkNBUF9DT05GX01BWF9TSVpFCTIyCisKK3N0cnVjdCBsMmNhcF9kaXNjb25uX3JlcSB7CisJX191MTYgICAgICBkY2lkOworCV9fdTE2ICAgICAgc2NpZDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgbDJjYXBfZGlzY29ubl9yc3AgeworCV9fdTE2ICAgICAgZGNpZDsKKwlfX3UxNiAgICAgIHNjaWQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGwyY2FwX2luZm9fcmVxIHsKKwlfX3UxNiAgICAgICB0eXBlOworCV9fdTggICAgICAgIGRhdGFbMF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGwyY2FwX2luZm9fcnNwIHsKKwlfX3UxNiAgICAgICB0eXBlOworCV9fdTE2ICAgICAgIHJlc3VsdDsKKwlfX3U4ICAgICAgICBkYXRhWzBdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qIGluZm8gdHlwZSAqLworI2RlZmluZSBMMkNBUF9JVF9DTF9NVFUgICAgIDB4MDAwMQorI2RlZmluZSBMMkNBUF9JVF9GRUFUX01BU0sgIDB4MDAwMgorCisvKiBpbmZvIHJlc3VsdCAqLworI2RlZmluZSBMMkNBUF9JUl9TVUNDRVNTICAgIDB4MDAwMAorI2RlZmluZSBMMkNBUF9JUl9OT1RTVVBQICAgIDB4MDAwMQorCisvKiAtLS0tLSBMMkNBUCBjb25uZWN0aW9ucyAtLS0tLSAqLworc3RydWN0IGwyY2FwX2NoYW5fbGlzdCB7CisJc3RydWN0IHNvY2sJKmhlYWQ7CisJcndsb2NrX3QJbG9jazsKKwlsb25nCQludW07Cit9OworCitzdHJ1Y3QgbDJjYXBfY29ubiB7CisJc3RydWN0IGhjaV9jb25uCSpoY29uOworCisJYmRhZGRyX3QJKmRzdDsKKwliZGFkZHJfdAkqc3JjOworCisJdW5zaWduZWQgaW50CW10dTsKKworCXNwaW5sb2NrX3QJbG9jazsKKworCXN0cnVjdCBza19idWZmICpyeF9za2I7CisJX191MzIJCXJ4X2xlbjsKKwlfX3U4CQlyeF9pZGVudDsKKwlfX3U4CQl0eF9pZGVudDsKKworCXN0cnVjdCBsMmNhcF9jaGFuX2xpc3QgY2hhbl9saXN0OworfTsKKworLyogLS0tLS0gTDJDQVAgY2hhbm5lbCBhbmQgc29ja2V0IGluZm8gLS0tLS0gKi8KKyNkZWZpbmUgbDJjYXBfcGkoc2spICgoc3RydWN0IGwyY2FwX3BpbmZvICopIHNrKQorCitzdHJ1Y3QgbDJjYXBfcGluZm8geworCXN0cnVjdCBidF9zb2NrCWJ0OworCV9fdTE2CQlwc207CisJX191MTYJCWRjaWQ7CisJX191MTYJCXNjaWQ7CisKKwlfX3UxNgkJaW10dTsKKwlfX3UxNgkJb210dTsKKwlfX3UxNgkJZmx1c2hfdG87CisKKwlfX3UzMgkJbGlua19tb2RlOworCisJX191OAkJY29uZl9zdGF0ZTsKKwlfX3U4CQljb25mX3JldHJ5OworCV9fdTE2CQljb25mX210dTsKKworCV9fdTgJCWlkZW50OworCisJX191MTYJCXNwb3J0OworCisJc3RydWN0IGwyY2FwX2Nvbm4JKmNvbm47CisJc3RydWN0IHNvY2sJCSpuZXh0X2M7CisJc3RydWN0IHNvY2sJCSpwcmV2X2M7Cit9OworCisjZGVmaW5lIEwyQ0FQX0NPTkZfUkVRX1NFTlQgICAgMHgwMQorI2RlZmluZSBMMkNBUF9DT05GX0lOUFVUX0RPTkUgIDB4MDIKKyNkZWZpbmUgTDJDQVBfQ09ORl9PVVRQVVRfRE9ORSAweDA0CisjZGVmaW5lIEwyQ0FQX0NPTkZfTUFYX1JFVFJJRVMgMgorCit2b2lkIGwyY2FwX2xvYWQodm9pZCk7CisKKyNlbmRpZiAvKiBfX0wyQ0FQX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9yZmNvbW0uaCBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9yZmNvbW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzY2OWJhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL3JmY29tbS5oCkBAIC0wLDAgKzEsMzUzIEBACisvKiAKKyAgIFJGQ09NTSBpbXBsZW1lbnRhdGlvbiBmb3IgTGludXggQmx1ZXRvb3RoIHN0YWNrIChCbHVlWikuCisgICBDb3B5cmlnaHQgKEMpIDIwMDIgTWF4aW0gS3Jhc255YW5za3kgPG1heGtAcXVhbGNvbW0uY29tPgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmNlbCBIb2x0bWFubiA8bWFyY2VsQGhvbHRtYW5uLm9yZz4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKKworICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MKKyAgIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVCBPRiBUSElSRCBQQVJUWSBSSUdIVFMuCisgICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBBTkQgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZCisgICBDTEFJTSwgT1IgQU5ZIFNQRUNJQUwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBPUiBBTlkgREFNQUdFUyAKKyAgIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiAKKyAgIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIAorICAgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKworICAgQUxMIExJQUJJTElUWSwgSU5DTFVESU5HIExJQUJJTElUWSBGT1IgSU5GUklOR0VNRU5UIE9GIEFOWSBQQVRFTlRTLCAKKyAgIENPUFlSSUdIVFMsIFRSQURFTUFSS1MgT1IgT1RIRVIgUklHSFRTLCBSRUxBVElORyBUTyBVU0UgT0YgVEhJUyAKKyAgIFNPRlRXQVJFIElTIERJU0NMQUlNRUQuCisqLworCisjaWZuZGVmIF9fUkZDT01NX0gKKyNkZWZpbmUgX19SRkNPTU1fSAorCisjZGVmaW5lIFJGQ09NTV9QU00gMworCisjZGVmaW5lIFJGQ09NTV9DT05OX1RJTUVPVVQgKEhaICogMzApCisjZGVmaW5lIFJGQ09NTV9ESVNDX1RJTUVPVVQgKEhaICogMjApCisjZGVmaW5lIFJGQ09NTV9BVVRIX1RJTUVPVVQgKEhaICogMjUpCisKKyNkZWZpbmUgUkZDT01NX0RFRkFVTFRfTVRVCTEyNworI2RlZmluZSBSRkNPTU1fREVGQVVMVF9DUkVESVRTCTcKKworI2RlZmluZSBSRkNPTU1fTUFYX0wyQ0FQX01UVQkxMDI0CisjZGVmaW5lIFJGQ09NTV9NQVhfQ1JFRElUUwk0MAorCisjZGVmaW5lIFJGQ09NTV9TS0JfSEVBRF9SRVNFUlZFCTgKKyNkZWZpbmUgUkZDT01NX1NLQl9UQUlMX1JFU0VSVkUJMgorI2RlZmluZSBSRkNPTU1fU0tCX1JFU0VSVkUgIChSRkNPTU1fU0tCX0hFQURfUkVTRVJWRSArIFJGQ09NTV9TS0JfVEFJTF9SRVNFUlZFKQorCisjZGVmaW5lIFJGQ09NTV9TQUJNCTB4MmYKKyNkZWZpbmUgUkZDT01NX0RJU0MJMHg0MworI2RlZmluZSBSRkNPTU1fVUEJMHg2MworI2RlZmluZSBSRkNPTU1fRE0JMHgwZgorI2RlZmluZSBSRkNPTU1fVUlICTB4ZWYKKworI2RlZmluZSBSRkNPTU1fVEVTVAkweDA4CisjZGVmaW5lIFJGQ09NTV9GQ09OCTB4MjgKKyNkZWZpbmUgUkZDT01NX0ZDT0ZGCTB4MTgKKyNkZWZpbmUgUkZDT01NX01TQwkweDM4CisjZGVmaW5lIFJGQ09NTV9SUE4JMHgyNAorI2RlZmluZSBSRkNPTU1fUkxTCTB4MTQKKyNkZWZpbmUgUkZDT01NX1BOCTB4MjAKKyNkZWZpbmUgUkZDT01NX05TQwkweDA0CisKKyNkZWZpbmUgUkZDT01NX1YyNF9GQwkweDAyCisjZGVmaW5lIFJGQ09NTV9WMjRfUlRDCTB4MDQKKyNkZWZpbmUgUkZDT01NX1YyNF9SVFIJMHgwOAorI2RlZmluZSBSRkNPTU1fVjI0X0lDCTB4NDAKKyNkZWZpbmUgUkZDT01NX1YyNF9EVgkweDgwCisKKyNkZWZpbmUgUkZDT01NX1JQTl9CUl8yNDAwCTB4MAorI2RlZmluZSBSRkNPTU1fUlBOX0JSXzQ4MDAJMHgxCisjZGVmaW5lIFJGQ09NTV9SUE5fQlJfNzIwMAkweDIKKyNkZWZpbmUgUkZDT01NX1JQTl9CUl85NjAwCTB4MworI2RlZmluZSBSRkNPTU1fUlBOX0JSXzE5MjAwCTB4NAorI2RlZmluZSBSRkNPTU1fUlBOX0JSXzM4NDAwCTB4NQorI2RlZmluZSBSRkNPTU1fUlBOX0JSXzU3NjAwCTB4NgorI2RlZmluZSBSRkNPTU1fUlBOX0JSXzExNTIwMAkweDcKKyNkZWZpbmUgUkZDT01NX1JQTl9CUl8yMzA0MDAJMHg4CisKKyNkZWZpbmUgUkZDT01NX1JQTl9EQVRBXzUJMHgwCisjZGVmaW5lIFJGQ09NTV9SUE5fREFUQV82CTB4MQorI2RlZmluZSBSRkNPTU1fUlBOX0RBVEFfNwkweDIKKyNkZWZpbmUgUkZDT01NX1JQTl9EQVRBXzgJMHgzCisKKyNkZWZpbmUgUkZDT01NX1JQTl9TVE9QXzEJMAorI2RlZmluZSBSRkNPTU1fUlBOX1NUT1BfMTUJMQorCisjZGVmaW5lIFJGQ09NTV9SUE5fUEFSSVRZX05PTkUJMHgwCisjZGVmaW5lIFJGQ09NTV9SUE5fUEFSSVRZX09ERAkweDQKKyNkZWZpbmUgUkZDT01NX1JQTl9QQVJJVFlfRVZFTgkweDUKKyNkZWZpbmUgUkZDT01NX1JQTl9QQVJJVFlfTUFSSwkweDYKKyNkZWZpbmUgUkZDT01NX1JQTl9QQVJJVFlfU1BBQ0UJMHg3CisKKyNkZWZpbmUgUkZDT01NX1JQTl9GTE9XX05PTkUJMHgwMAorCisjZGVmaW5lIFJGQ09NTV9SUE5fWE9OX0NIQVIJMHgxMQorI2RlZmluZSBSRkNPTU1fUlBOX1hPRkZfQ0hBUgkweDEzCisKKyNkZWZpbmUgUkZDT01NX1JQTl9QTV9CSVRSQVRFCQkweDAwMDEKKyNkZWZpbmUgUkZDT01NX1JQTl9QTV9EQVRBCQkweDAwMDIKKyNkZWZpbmUgUkZDT01NX1JQTl9QTV9TVE9QCQkweDAwMDQKKyNkZWZpbmUgUkZDT01NX1JQTl9QTV9QQVJJVFkJCTB4MDAwOAorI2RlZmluZSBSRkNPTU1fUlBOX1BNX1BBUklUWV9UWVBFCTB4MDAxMAorI2RlZmluZSBSRkNPTU1fUlBOX1BNX1hPTgkJMHgwMDIwCisjZGVmaW5lIFJGQ09NTV9SUE5fUE1fWE9GRgkJMHgwMDQwCisjZGVmaW5lIFJGQ09NTV9SUE5fUE1fRkxPVwkJMHgzRjAwCisKKyNkZWZpbmUgUkZDT01NX1JQTl9QTV9BTEwJCTB4M0Y3RgorCitzdHJ1Y3QgcmZjb21tX2hkciB7CisJdTggYWRkcjsKKwl1OCBjdHJsOworCXU4IGxlbjsgICAgLy8gQWN0dWFsIHNpemUgY2FuIGJlIDIgYnl0ZXMKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgcmZjb21tX2NtZCB7CisJdTggYWRkcjsKKwl1OCBjdHJsOworCXU4IGxlbjsKKwl1OCBmY3M7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHJmY29tbV9tY2MgeworCXU4IHR5cGU7CisJdTggbGVuOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCByZmNvbW1fcG4geworCXU4ICBkbGNpOworCXU4ICBmbG93X2N0cmw7CisJdTggIHByaW9yaXR5OworCXU4ICBhY2tfdGltZXI7CisJdTE2IG10dTsKKwl1OCAgbWF4X3JldHJhbnM7CisJdTggIGNyZWRpdHM7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHJmY29tbV9ycG4geworCXU4ICBkbGNpOworCXU4ICBiaXRfcmF0ZTsKKwl1OCAgbGluZV9zZXR0aW5nczsKKwl1OCAgZmxvd19jdHJsOworCXU4ICB4b25fY2hhcjsKKwl1OCAgeG9mZl9jaGFyOworCXUxNiBwYXJhbV9tYXNrOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCByZmNvbW1fcmxzIHsKKwl1OCAgZGxjaTsKKwl1OCAgc3RhdHVzOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCByZmNvbW1fbXNjIHsKKwl1OCAgZGxjaTsKKwl1OCAgdjI0X3NpZzsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKiAtLS0tIENvcmUgc3RydWN0dXJlcywgZmxhZ3MgZXRjIC0tLS0gKi8KKworc3RydWN0IHJmY29tbV9zZXNzaW9uIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IHNvY2tldCAgICpzb2NrOworCXVuc2lnbmVkIGxvbmcgICAgc3RhdGU7CisJdW5zaWduZWQgbG9uZyAgICBmbGFnczsKKwlhdG9taWNfdCAgICAgICAgIHJlZmNudDsKKwlpbnQgICAgICAgICAgICAgIGluaXRpYXRvcjsKKworCS8qIERlZmF1bHQgRExDIHBhcmFtZXRlcnMgKi8KKwlpbnQgICAgY2ZjOworCXVpbnQgICBtdHU7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIGRsY3M7Cit9OworCitzdHJ1Y3QgcmZjb21tX2RsYyB7CisJc3RydWN0IGxpc3RfaGVhZCAgICAgIGxpc3Q7CisJc3RydWN0IHJmY29tbV9zZXNzaW9uICpzZXNzaW9uOworCXN0cnVjdCBza19idWZmX2hlYWQgICB0eF9xdWV1ZTsKKwlzdHJ1Y3QgdGltZXJfbGlzdCAgICAgdGltZXI7CisKKwlzcGlubG9ja190ICAgIGxvY2s7CisJdW5zaWduZWQgbG9uZyBzdGF0ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWF0b21pY190ICAgICAgcmVmY250OworCXU4ICAgICAgICAgICAgZGxjaTsKKwl1OCAgICAgICAgICAgIGFkZHI7CisJdTggICAgICAgICAgICBwcmlvcml0eTsKKwl1OCAgICAgICAgICAgIHYyNF9zaWc7CisJdTggICAgICAgICAgICBtc2NleDsKKworCXUzMiAgICAgICAgICAgbGlua19tb2RlOworCisJdWludCAgICAgICAgICBtdHU7CisJdWludCAgICAgICAgICBjZmM7CisJdWludCAgICAgICAgICByeF9jcmVkaXRzOworCXVpbnQgICAgICAgICAgdHhfY3JlZGl0czsKKworCXZvaWQgICAgICAgICAgKm93bmVyOworCisJdm9pZCAoKmRhdGFfcmVhZHkpKHN0cnVjdCByZmNvbW1fZGxjICpkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKwl2b2lkICgqc3RhdGVfY2hhbmdlKShzdHJ1Y3QgcmZjb21tX2RsYyAqZCwgaW50IGVycik7CisJdm9pZCAoKm1vZGVtX3N0YXR1cykoc3RydWN0IHJmY29tbV9kbGMgKmQsIHU4IHYyNF9zaWcpOworfTsKKworLyogRExDIGFuZCBzZXNzaW9uIGZsYWdzICovCisjZGVmaW5lIFJGQ09NTV9SWF9USFJPVFRMRUQgMAorI2RlZmluZSBSRkNPTU1fVFhfVEhST1RUTEVEIDEKKyNkZWZpbmUgUkZDT01NX1RJTUVEX09VVCAgICAyCisjZGVmaW5lIFJGQ09NTV9NU0NfUEVORElORyAgMyAKKyNkZWZpbmUgUkZDT01NX0FVVEhfUEVORElORyA0CisjZGVmaW5lIFJGQ09NTV9BVVRIX0FDQ0VQVCAgNQorI2RlZmluZSBSRkNPTU1fQVVUSF9SRUpFQ1QgIDYKKworLyogU2NoZWR1bGluZyBmbGFncyBhbmQgZXZlbnRzICovCisjZGVmaW5lIFJGQ09NTV9TQ0hFRF9TVEFURSAgMAorI2RlZmluZSBSRkNPTU1fU0NIRURfUlggICAgIDEKKyNkZWZpbmUgUkZDT01NX1NDSEVEX1RYICAgICAyCisjZGVmaW5lIFJGQ09NTV9TQ0hFRF9USU1FTyAgMworI2RlZmluZSBSRkNPTU1fU0NIRURfQVVUSCAgIDQKKyNkZWZpbmUgUkZDT01NX1NDSEVEX1dBS0VVUCAzMQorCisvKiBNU0MgZXhjaGFuZ2UgZmxhZ3MgKi8KKyNkZWZpbmUgUkZDT01NX01TQ0VYX1RYICAgICAxCisjZGVmaW5lIFJGQ09NTV9NU0NFWF9SWCAgICAgMgorI2RlZmluZSBSRkNPTU1fTVNDRVhfT0sgICAgIChSRkNPTU1fTVNDRVhfVFggKyBSRkNPTU1fTVNDRVhfUlgpCisKKy8qIENGQyBzdGF0ZXMgKi8KKyNkZWZpbmUgUkZDT01NX0NGQ19VTktOT1dOICAtMQorI2RlZmluZSBSRkNPTU1fQ0ZDX0RJU0FCTEVEIDAKKyNkZWZpbmUgUkZDT01NX0NGQ19FTkFCTEVEICBSRkNPTU1fTUFYX0NSRURJVFMKKworLyogLS0tLSBSRkNPTU0gRExDcyAoY2hhbm5lbHMpIC0tLS0gKi8KK3N0cnVjdCByZmNvbW1fZGxjICpyZmNvbW1fZGxjX2FsbG9jKGludCBwcmlvKTsKK3ZvaWQgcmZjb21tX2RsY19mcmVlKHN0cnVjdCByZmNvbW1fZGxjICpkKTsKK2ludCAgcmZjb21tX2RsY19vcGVuKHN0cnVjdCByZmNvbW1fZGxjICpkLCBiZGFkZHJfdCAqc3JjLCBiZGFkZHJfdCAqZHN0LCB1OCBjaGFubmVsKTsKK2ludCAgcmZjb21tX2RsY19jbG9zZShzdHJ1Y3QgcmZjb21tX2RsYyAqZCwgaW50IHJlYXNvbik7CitpbnQgIHJmY29tbV9kbGNfc2VuZChzdHJ1Y3QgcmZjb21tX2RsYyAqZCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitpbnQgIHJmY29tbV9kbGNfc2V0X21vZGVtX3N0YXR1cyhzdHJ1Y3QgcmZjb21tX2RsYyAqZCwgdTggdjI0X3NpZyk7CitpbnQgIHJmY29tbV9kbGNfZ2V0X21vZGVtX3N0YXR1cyhzdHJ1Y3QgcmZjb21tX2RsYyAqZCwgdTggKnYyNF9zaWcpOworCisjZGVmaW5lIHJmY29tbV9kbGNfbG9jayhkKSAgICAgc3Bpbl9sb2NrKCZkLT5sb2NrKQorI2RlZmluZSByZmNvbW1fZGxjX3VubG9jayhkKSAgIHNwaW5fdW5sb2NrKCZkLT5sb2NrKQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmZjb21tX2RsY19ob2xkKHN0cnVjdCByZmNvbW1fZGxjICpkKQoreworCWF0b21pY19pbmMoJmQtPnJlZmNudCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByZmNvbW1fZGxjX3B1dChzdHJ1Y3QgcmZjb21tX2RsYyAqZCkKK3sKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmZC0+cmVmY250KSkKKwkJcmZjb21tX2RsY19mcmVlKGQpOworfQorCitleHRlcm4gdm9pZCBGQVNUQ0FMTChfX3JmY29tbV9kbGNfdGhyb3R0bGUoc3RydWN0IHJmY29tbV9kbGMgKmQpKTsKK2V4dGVybiB2b2lkIEZBU1RDQUxMKF9fcmZjb21tX2RsY191bnRocm90dGxlKHN0cnVjdCByZmNvbW1fZGxjICpkKSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByZmNvbW1fZGxjX3Rocm90dGxlKHN0cnVjdCByZmNvbW1fZGxjICpkKQoreworCWlmICghdGVzdF9hbmRfc2V0X2JpdChSRkNPTU1fUlhfVEhST1RUTEVELCAmZC0+ZmxhZ3MpKQorCQlfX3JmY29tbV9kbGNfdGhyb3R0bGUoZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByZmNvbW1fZGxjX3VudGhyb3R0bGUoc3RydWN0IHJmY29tbV9kbGMgKmQpCit7CisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSRkNPTU1fUlhfVEhST1RUTEVELCAmZC0+ZmxhZ3MpKQorCQlfX3JmY29tbV9kbGNfdW50aHJvdHRsZShkKTsKK30KKworLyogLS0tLSBSRkNPTU0gc2Vzc2lvbnMgLS0tLSAqLwordm9pZCAgIHJmY29tbV9zZXNzaW9uX2dldGFkZHIoc3RydWN0IHJmY29tbV9zZXNzaW9uICpzLCBiZGFkZHJfdCAqc3JjLCBiZGFkZHJfdCAqZHN0KTsKKworc3RhdGljIGlubGluZSB2b2lkIHJmY29tbV9zZXNzaW9uX2hvbGQoc3RydWN0IHJmY29tbV9zZXNzaW9uICpzKQoreworCWF0b21pY19pbmMoJnMtPnJlZmNudCk7Cit9CisKKy8qIC0tLS0gUkZDT01NIGNoZWNoc3VtIC0tLS0gKi8KK2V4dGVybiB1OCByZmNvbW1fY3JjX3RhYmxlW107CisKKy8qIC0tLS0gUkZDT01NIHNvY2tldHMgLS0tLSAqLworc3RydWN0IHNvY2thZGRyX3JjIHsKKwlzYV9mYW1pbHlfdAlyY19mYW1pbHk7CisJYmRhZGRyX3QJcmNfYmRhZGRyOworCXU4CQlyY19jaGFubmVsOworfTsKKworI2RlZmluZSBSRkNPTU1fQ09OTklORk8JMHgwMgorc3RydWN0IHJmY29tbV9jb25uaW5mbyB7CisJX191MTYgaGNpX2hhbmRsZTsKKwlfX3U4ICBkZXZfY2xhc3NbM107Cit9OworCisjZGVmaW5lIFJGQ09NTV9MTQkweDAzCisjZGVmaW5lIFJGQ09NTV9MTV9NQVNURVIJMHgwMDAxCisjZGVmaW5lIFJGQ09NTV9MTV9BVVRICQkweDAwMDIKKyNkZWZpbmUgUkZDT01NX0xNX0VOQ1JZUFQJMHgwMDA0CisjZGVmaW5lIFJGQ09NTV9MTV9UUlVTVEVECTB4MDAwOAorI2RlZmluZSBSRkNPTU1fTE1fUkVMSUFCTEUJMHgwMDEwCisjZGVmaW5lIFJGQ09NTV9MTV9TRUNVUkUJMHgwMDIwCisKKyNkZWZpbmUgcmZjb21tX3BpKHNrKSAoKHN0cnVjdCByZmNvbW1fcGluZm8gKikgc2spCisKK3N0cnVjdCByZmNvbW1fcGluZm8geworCXN0cnVjdCBidF9zb2NrIGJ0OworCXN0cnVjdCByZmNvbW1fZGxjICAgKmRsYzsKKwl1OCAgICAgY2hhbm5lbDsKKwl1MzIgICAgbGlua19tb2RlOworfTsKKworaW50ICByZmNvbW1faW5pdF9zb2NrZXRzKHZvaWQpOwordm9pZCByZmNvbW1fY2xlYW51cF9zb2NrZXRzKHZvaWQpOworCitpbnQgIHJmY29tbV9jb25uZWN0X2luZChzdHJ1Y3QgcmZjb21tX3Nlc3Npb24gKnMsIHU4IGNoYW5uZWwsIHN0cnVjdCByZmNvbW1fZGxjICoqZCk7CisKKy8qIC0tLS0gUkZDT01NIFRUWSAtLS0tICovCisjZGVmaW5lIFJGQ09NTV9NQVhfREVWICAyNTYKKworI2RlZmluZSBSRkNPTU1DUkVBVEVERVYJCV9JT1coJ1InLCAyMDAsIGludCkKKyNkZWZpbmUgUkZDT01NUkVMRUFTRURFVglfSU9XKCdSJywgMjAxLCBpbnQpCisjZGVmaW5lIFJGQ09NTUdFVERFVkxJU1QJX0lPUignUicsIDIxMCwgaW50KQorI2RlZmluZSBSRkNPTU1HRVRERVZJTkZPCV9JT1IoJ1InLCAyMTEsIGludCkKKyNkZWZpbmUgUkZDT01NU1RFQUxETEMJCV9JT1coJ1InLCAyMjAsIGludCkKKworI2RlZmluZSBSRkNPTU1fUkVVU0VfRExDICAgICAgMAorI2RlZmluZSBSRkNPTU1fUkVMRUFTRV9PTkhVUCAgMQorI2RlZmluZSBSRkNPTU1fSEFOR1VQX05PVyAgICAgMgorI2RlZmluZSBSRkNPTU1fVFRZX0FUVEFDSEVEICAgMworCitzdHJ1Y3QgcmZjb21tX2Rldl9yZXEgeworCXMxNiAgICAgIGRldl9pZDsKKwl1MzIgICAgICBmbGFnczsKKwliZGFkZHJfdCBzcmM7CisJYmRhZGRyX3QgZHN0OworCXU4ICAgICAgIGNoYW5uZWw7CisJCit9OworCitzdHJ1Y3QgcmZjb21tX2Rldl9pbmZvIHsKKwlzMTYgICAgICBpZDsKKwl1MzIgICAgICBmbGFnczsKKwl1MTYgICAgICBzdGF0ZTsKKwliZGFkZHJfdCBzcmM7CisJYmRhZGRyX3QgZHN0OworCXU4ICAgICAgIGNoYW5uZWw7Cit9OworCitzdHJ1Y3QgcmZjb21tX2Rldl9saXN0X3JlcSB7CisJdTE2ICAgICAgZGV2X251bTsKKwlzdHJ1Y3QgICByZmNvbW1fZGV2X2luZm8gZGV2X2luZm9bMF07Cit9OworCitpbnQgIHJmY29tbV9kZXZfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqYXJnKTsKK2ludCAgcmZjb21tX2luaXRfdHR5cyh2b2lkKTsKK3ZvaWQgcmZjb21tX2NsZWFudXBfdHR5cyh2b2lkKTsKKworZXh0ZXJuIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19idF9yZmNvbW07CisKKyNlbmRpZiAvKiBfX1JGQ09NTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvc2NvLmggYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvc2NvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI4YTJhNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9zY28uaApAQCAtMCwwICsxLDc5IEBACisvKiAKKyAgIEJsdWVaIC0gQmx1ZXRvb3RoIHByb3RvY29sIHN0YWNrIGZvciBMaW51eAorICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDEgUXVhbGNvbW0gSW5jb3Jwb3JhdGVkCisKKyAgIFdyaXR0ZW4gMjAwMCwyMDAxIGJ5IE1heGltIEtyYXNueWFuc2t5IDxtYXhrQHF1YWxjb21tLmNvbT4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKKworICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MKKyAgIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVCBPRiBUSElSRCBQQVJUWSBSSUdIVFMuCisgICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBBTkQgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZCisgICBDTEFJTSwgT1IgQU5ZIFNQRUNJQUwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBPUiBBTlkgREFNQUdFUyAKKyAgIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiAKKyAgIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIAorICAgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKworICAgQUxMIExJQUJJTElUWSwgSU5DTFVESU5HIExJQUJJTElUWSBGT1IgSU5GUklOR0VNRU5UIE9GIEFOWSBQQVRFTlRTLCAKKyAgIENPUFlSSUdIVFMsIFRSQURFTUFSS1MgT1IgT1RIRVIgUklHSFRTLCBSRUxBVElORyBUTyBVU0UgT0YgVEhJUyAKKyAgIFNPRlRXQVJFIElTIERJU0NMQUlNRUQuCisqLworCisjaWZuZGVmIF9fU0NPX0gKKyNkZWZpbmUgX19TQ09fSAorCisvKiBTQ08gZGVmYXVsdHMgKi8KKyNkZWZpbmUgU0NPX0RFRkFVTFRfTVRVCQk1MDAKKyNkZWZpbmUgU0NPX0RFRkFVTFRfRkxVU0hfVE8JMHhGRkZGCisKKyNkZWZpbmUgU0NPX0NPTk5fVElNRU9VVAkoSFogKiA0MCkKKyNkZWZpbmUgU0NPX0RJU0NPTk5fVElNRU9VVAkoSFogKiAyKQorI2RlZmluZSBTQ09fQ09OTl9JRExFX1RJTUVPVVQJKEhaICogNjApCisKKy8qIFNDTyBzb2NrZXQgYWRkcmVzcyAqLworc3RydWN0IHNvY2thZGRyX3NjbyB7CisJc2FfZmFtaWx5X3QJc2NvX2ZhbWlseTsKKwliZGFkZHJfdAlzY29fYmRhZGRyOworfTsKKworLyogU0NPIHNvY2tldCBvcHRpb25zICovCisjZGVmaW5lIFNDT19PUFRJT05TCTB4MDEKK3N0cnVjdCBzY29fb3B0aW9ucyB7CisJX191MTYgbXR1OworfTsKKworI2RlZmluZSBTQ09fQ09OTklORk8JMHgwMgorc3RydWN0IHNjb19jb25uaW5mbyB7CisJX191MTYgaGNpX2hhbmRsZTsKKwlfX3U4ICBkZXZfY2xhc3NbM107Cit9OworCisvKiAtLS0tIFNDTyBjb25uZWN0aW9ucyAtLS0tICovCitzdHJ1Y3Qgc2NvX2Nvbm4geworCXN0cnVjdCBoY2lfY29ubgkqaGNvbjsKKworCWJkYWRkcl90IAkqZHN0OworCWJkYWRkcl90IAkqc3JjOworCQorCXNwaW5sb2NrX3QJbG9jazsKKwlzdHJ1Y3Qgc29jayAJKnNrOworCisJdW5zaWduZWQgaW50ICAgIG10dTsKK307CisKKyNkZWZpbmUgc2NvX2Nvbm5fbG9jayhjKQlzcGluX2xvY2soJmMtPmxvY2spOworI2RlZmluZSBzY29fY29ubl91bmxvY2soYykJc3Bpbl91bmxvY2soJmMtPmxvY2spOworCisvKiAtLS0tLSBTQ08gc29ja2V0IGluZm8gLS0tLS0gKi8KKyNkZWZpbmUgc2NvX3BpKHNrKSAoKHN0cnVjdCBzY29fcGluZm8gKikgc2spCisKK3N0cnVjdCBzY29fcGluZm8geworCXN0cnVjdCBidF9zb2NrCWJ0OworCV9fdTMyCQlmbGFnczsKKwlzdHJ1Y3Qgc2NvX2Nvbm4JKmNvbm47Cit9OworCisjZW5kaWYgLyogX19TQ09fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvY2hlY2tzdW0uaCBiL2luY2x1ZGUvbmV0L2NoZWNrc3VtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNlYTdjYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L2NoZWNrc3VtLmgKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIElORVQJCUFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBUQ1AvSVAgcHJvdG9jb2wgc3VpdGUgZm9yIHRoZSBMSU5VWAorICoJCW9wZXJhdGluZyBzeXN0ZW0uICBJTkVUIGlzIGltcGxlbWVudGVkIHVzaW5nIHRoZSAgQlNEIFNvY2tldAorICoJCWludGVyZmFjZSBhcyB0aGUgbWVhbnMgb2YgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSB1c2VyIGxldmVsLgorICoKKyAqCQlDaGVja3N1bW1pbmcgZnVuY3Rpb25zIGZvciBJUCwgVENQLCBVRFAgYW5kIHNvIG9uCisgKgorICogQXV0aG9yczoJSm9yZ2UgQ3dpaywgPGpvcmdlQGxhc2VyLnNhdGxpbmsubmV0PgorICoJCUFybnQgR3VsYnJhbmRzZW4sIDxhZ3VsYnJhQG52Zy51bml0Lm5vPgorICoJCUJvcnJvd3MgdmVyeSBsaWJlcmFsbHkgZnJvbSB0Y3AuYyBhbmQgaXAuYywgc2VlIHRob3NlCisgKgkJZmlsZXMgZm9yIG1vcmUgbmFtZXMuCisgKgorICoJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCQltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICoJCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICoJCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfQ0hFQ0tTVU1fSAorI2RlZmluZSBfQ0hFQ0tTVU1fSAorCisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vY2hlY2tzdW0uaD4KKworI2lmbmRlZiBfSEFWRV9BUkNIX0NPUFlfQU5EX0NTVU1fRlJPTV9VU0VSCitzdGF0aWMgaW5saW5lCit1bnNpZ25lZCBpbnQgY3N1bV9hbmRfY29weV9mcm9tX3VzZXIgKGNvbnN0IHVuc2lnbmVkIGNoYXIgX191c2VyICpzcmMsIHVuc2lnbmVkIGNoYXIgKmRzdCwKKwkJCQkgICAgICBpbnQgbGVuLCBpbnQgc3VtLCBpbnQgKmVycl9wdHIpCit7CisJaWYgKGFjY2Vzc19vayhWRVJJRllfUkVBRCwgc3JjLCBsZW4pKQorCQlyZXR1cm4gY3N1bV9wYXJ0aWFsX2NvcHlfZnJvbV91c2VyKHNyYywgZHN0LCBsZW4sIHN1bSwgZXJyX3B0cik7CisKKwlpZiAobGVuKQorCQkqZXJyX3B0ciA9IC1FRkFVTFQ7CisKKwlyZXR1cm4gc3VtOworfQorI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9DU1VNX0NPUFlfVVNFUgorc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IGNzdW1fYW5kX2NvcHlfdG9fdXNlcgorKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYywgdW5zaWduZWQgY2hhciBfX3VzZXIgKmRzdCwgaW50IGxlbiwgdW5zaWduZWQgaW50IHN1bSwgaW50ICplcnJfcHRyKQoreworCXN1bSA9IGNzdW1fcGFydGlhbChzcmMsIGxlbiwgc3VtKTsKKworCWlmIChhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBkc3QsIGxlbikpIHsKKwkJaWYgKGNvcHlfdG9fdXNlcihkc3QsIHNyYywgbGVuKSA9PSAwKQorCQkJcmV0dXJuIHN1bTsKKwl9CisJaWYgKGxlbikKKwkJKmVycl9wdHIgPSAtRUZBVUxUOworCisJcmV0dXJuIC0xOyAvKiBpbnZhbGlkIGNoZWNrc3VtICovCit9CisjZW5kaWYKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3N1bV9hZGQodW5zaWduZWQgaW50IGNzdW0sIHVuc2lnbmVkIGludCBhZGRlbmQpCit7CisJY3N1bSArPSBhZGRlbmQ7CisJcmV0dXJuIGNzdW0gKyAoY3N1bSA8IGFkZGVuZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNzdW1fc3ViKHVuc2lnbmVkIGludCBjc3VtLCB1bnNpZ25lZCBpbnQgYWRkZW5kKQoreworCXJldHVybiBjc3VtX2FkZChjc3VtLCB+YWRkZW5kKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKK2NzdW1fYmxvY2tfYWRkKHVuc2lnbmVkIGludCBjc3VtLCB1bnNpZ25lZCBpbnQgY3N1bTIsIGludCBvZmZzZXQpCit7CisJaWYgKG9mZnNldCYxKQorCQljc3VtMiA9ICgoY3N1bTImMHhGRjAwRkYpPDw4KSsoKGNzdW0yPj44KSYweEZGMDBGRik7CisJcmV0dXJuIGNzdW1fYWRkKGNzdW0sIGNzdW0yKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKK2NzdW1fYmxvY2tfc3ViKHVuc2lnbmVkIGludCBjc3VtLCB1bnNpZ25lZCBpbnQgY3N1bTIsIGludCBvZmZzZXQpCit7CisJaWYgKG9mZnNldCYxKQorCQljc3VtMiA9ICgoY3N1bTImMHhGRjAwRkYpPDw4KSsoKGNzdW0yPj44KSYweEZGMDBGRik7CisJcmV0dXJuIGNzdW1fc3ViKGNzdW0sIGNzdW0yKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9jb21wYXQuaCBiL2luY2x1ZGUvbmV0L2NvbXBhdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5ODNmZDgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9jb21wYXQuaApAQCAtMCwwICsxLDM5IEBACisjaWZuZGVmIE5FVF9DT01QQVRfSAorI2RlZmluZSBORVRfQ09NUEFUX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjaWYgZGVmaW5lZChDT05GSUdfQ09NUEFUKQorCisjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CisKK3N0cnVjdCBjb21wYXRfbXNnaGRyIHsKKwljb21wYXRfdXB0cl90CW1zZ19uYW1lOwkvKiB2b2lkICogKi8KKwljb21wYXRfaW50X3QJbXNnX25hbWVsZW47CisJY29tcGF0X3VwdHJfdAltc2dfaW92OwkvKiBzdHJ1Y3QgY29tcGF0X2lvdmVjICogKi8KKwljb21wYXRfc2l6ZV90CW1zZ19pb3ZsZW47CisJY29tcGF0X3VwdHJfdAltc2dfY29udHJvbDsJLyogdm9pZCAqICovCisJY29tcGF0X3NpemVfdAltc2dfY29udHJvbGxlbjsKKwljb21wYXRfdWludF90CW1zZ19mbGFnczsKK307CisKK3N0cnVjdCBjb21wYXRfY21zZ2hkciB7CisJY29tcGF0X3NpemVfdAljbXNnX2xlbjsKKwljb21wYXRfaW50X3QJY21zZ19sZXZlbDsKKwljb21wYXRfaW50X3QJY21zZ190eXBlOworfTsKKworI2Vsc2UgLyogZGVmaW5lZChDT05GSUdfQ09NUEFUKSAqLworI2RlZmluZSBjb21wYXRfbXNnaGRyCW1zZ2hkcgkJLyogdG8gYXZvaWQgY29tcGlsZXIgd2FybmluZ3MgKi8KKyNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19DT01QQVQpICovCisKK2V4dGVybiBpbnQgZ2V0X2NvbXBhdF9tc2doZHIoc3RydWN0IG1zZ2hkciAqLCBzdHJ1Y3QgY29tcGF0X21zZ2hkciBfX3VzZXIgKik7CitleHRlcm4gaW50IHZlcmlmeV9jb21wYXRfaW92ZWMoc3RydWN0IG1zZ2hkciAqLCBzdHJ1Y3QgaW92ZWMgKiwgY2hhciAqLCBpbnQpOworZXh0ZXJuIGFzbWxpbmthZ2UgbG9uZyBjb21wYXRfc3lzX3NlbmRtc2coaW50LHN0cnVjdCBjb21wYXRfbXNnaGRyIF9fdXNlciAqLHVuc2lnbmVkKTsKK2V4dGVybiBhc21saW5rYWdlIGxvbmcgY29tcGF0X3N5c19yZWN2bXNnKGludCxzdHJ1Y3QgY29tcGF0X21zZ2hkciBfX3VzZXIgKix1bnNpZ25lZCk7CitleHRlcm4gYXNtbGlua2FnZSBsb25nIGNvbXBhdF9zeXNfZ2V0c29ja29wdChpbnQsIGludCwgaW50LCBjaGFyIF9fdXNlciAqLCBpbnQgX191c2VyICopOworZXh0ZXJuIGludCBwdXRfY21zZ19jb21wYXQoc3RydWN0IG1zZ2hkciosIGludCwgaW50LCBpbnQsIHZvaWQgKik7CitleHRlcm4gaW50IGNtc2doZHJfZnJvbV91c2VyX2NvbXBhdF90b19rZXJuKHN0cnVjdCBtc2doZHIgKiwgdW5zaWduZWQgY2hhciAqLAorCQlpbnQpOworCisjZW5kaWYgLyogTkVUX0NPTVBBVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9kYXRhbGluay5oIGIvaW5jbHVkZS9uZXQvZGF0YWxpbmsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Nzk3YmEzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQvZGF0YWxpbmsuaApAQCAtMCwwICsxLDE4IEBACisjaWZuZGVmIF9ORVRfSU5FVF9EQVRBTElOS19IXworI2RlZmluZSBfTkVUX0lORVRfREFUQUxJTktfSF8KKworc3RydWN0IGRhdGFsaW5rX3Byb3RvIHsKKyAgICAgICAgdW5zaWduZWQgY2hhciAgIHR5cGVbOF07CisKKwlzdHJ1Y3QgbGxjX3NhcCAgICpzYXA7CisKKyAgICAgICAgdW5zaWduZWQgc2hvcnQgIGhlYWRlcl9sZW5ndGg7CisKKyAgICAgICAgaW50ICAgICAoKnJjdmZ1bmMpKHN0cnVjdCBza19idWZmICosIHN0cnVjdCBuZXRfZGV2aWNlICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwYWNrZXRfdHlwZSAqKTsKKwlpbnQgICAgICgqcmVxdWVzdCkoc3RydWN0IGRhdGFsaW5rX3Byb3RvICosIHN0cnVjdCBza19idWZmICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqKTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2RuLmggYi9pbmNsdWRlL25ldC9kbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1NTFjNDYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9kbi5oCkBAIC0wLDAgKzEsMjM2IEBACisjaWZuZGVmIF9ORVRfRE5fSAorI2RlZmluZSBfTkVUX0ROX0gKKworI2luY2x1ZGUgPGxpbnV4L2RuLmg+CisjaW5jbHVkZSA8bmV0L3NvY2suaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgZG5fYWRkcmVzczsKKworI2RlZmluZSBkbl9udG9ocyh4KSBsZTE2X3RvX2NwdSgodW5zaWduZWQgc2hvcnQpKHgpKQorI2RlZmluZSBkbl9odG9ucyh4KSBjcHVfdG9fbGUxNigodW5zaWduZWQgc2hvcnQpKHgpKQorCitzdHJ1Y3QgZG5fc2NwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZXNzaW9uIENvbnRyb2wgUG9ydCAqLworeworICAgICAgICB1bnNpZ25lZCBjaGFyICAgICAgICAgICBzdGF0ZTsKKyNkZWZpbmUgRE5fTyAgICAgMSAgICAgICAgICAgICAgICAgICAgICAvKiBPcGVuICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETl9DUiAgICAyICAgICAgICAgICAgICAgICAgICAgIC8qIENvbm5lY3QgUmVjZWl2ZSAgICAgICovCisjZGVmaW5lIEROX0RSICAgIDMgICAgICAgICAgICAgICAgICAgICAgLyogRGlzY29ubmVjdCBSZWplY3QgICAgKi8KKyNkZWZpbmUgRE5fRFJDICAgNCAgICAgICAgICAgICAgICAgICAgICAvKiBEaXNjb24uIFJlai4gQ29tcGxldGUqLworI2RlZmluZSBETl9DQyAgICA1ICAgICAgICAgICAgICAgICAgICAgIC8qIENvbm5lY3QgQ29uZmlybSAgICAgICovCisjZGVmaW5lIEROX0NJICAgIDYgICAgICAgICAgICAgICAgICAgICAgLyogQ29ubmVjdCBJbml0aWF0ZSAgICAgKi8KKyNkZWZpbmUgRE5fTlIgICAgNyAgICAgICAgICAgICAgICAgICAgICAvKiBObyByZXNvdXJjZXMgICAgICAgICAqLworI2RlZmluZSBETl9OQyAgICA4ICAgICAgICAgICAgICAgICAgICAgIC8qIE5vIGNvbW11bmljYXRpb24gICAgICovCisjZGVmaW5lIEROX0NEICAgIDkgICAgICAgICAgICAgICAgICAgICAgLyogQ29ubmVjdCBEZWxpdmVyeSAgICAgKi8KKyNkZWZpbmUgRE5fUkogICAgMTAgICAgICAgICAgICAgICAgICAgICAvKiBSZWplY3RlZCAgICAgICAgICAgICAqLworI2RlZmluZSBETl9SVU4gICAxMSAgICAgICAgICAgICAgICAgICAgIC8qIFJ1bm5pbmcgICAgICAgICAgICAgICovCisjZGVmaW5lIEROX0RJICAgIDEyICAgICAgICAgICAgICAgICAgICAgLyogRGlzY29ubmVjdCBJbml0aWF0ZSAgKi8KKyNkZWZpbmUgRE5fRElDICAgMTMgICAgICAgICAgICAgICAgICAgICAvKiBEaXNjb25uZWN0IENvbXBsZXRlICAqLworI2RlZmluZSBETl9ETiAgICAxNCAgICAgICAgICAgICAgICAgICAgIC8qIERpc2Nvbm5lY3QgTm90aWZpY2F0ICovCisjZGVmaW5lIEROX0NMICAgIDE1ICAgICAgICAgICAgICAgICAgICAgLyogQ2xvc2VkICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE5fQ04gICAgMTYgICAgICAgICAgICAgICAgICAgICAvKiBDbG9zZWQgTm90aWZpY2F0aW9uICAqLworCisgICAgICAgIHVuc2lnbmVkIHNob3J0ICAgICAgICAgIGFkZHJsb2M7CisgICAgICAgIHVuc2lnbmVkIHNob3J0ICAgICAgICAgIGFkZHJyZW07CisgICAgICAgIHVuc2lnbmVkIHNob3J0ICAgICAgICAgIG51bWRhdDsKKyAgICAgICAgdW5zaWduZWQgc2hvcnQgICAgICAgICAgbnVtb3RoOworICAgICAgICB1bnNpZ25lZCBzaG9ydCAgICAgICAgICBudW1vdGhfcmN2OworICAgICAgICB1bnNpZ25lZCBzaG9ydCAgICAgICAgICBudW1kYXRfcmN2OworICAgICAgICB1bnNpZ25lZCBzaG9ydCAgICAgICAgICBhY2t4bXRfZGF0OworICAgICAgICB1bnNpZ25lZCBzaG9ydCAgICAgICAgICBhY2t4bXRfb3RoOworICAgICAgICB1bnNpZ25lZCBzaG9ydCAgICAgICAgICBhY2tyY3ZfZGF0OworICAgICAgICB1bnNpZ25lZCBzaG9ydCAgICAgICAgICBhY2tyY3Zfb3RoOworICAgICAgICB1bnNpZ25lZCBjaGFyICAgICAgICAgICBmbG93cmVtX3N3OworCXVuc2lnbmVkIGNoYXIJCWZsb3dsb2Nfc3c7CisjZGVmaW5lIEROX1NFTkQgICAgICAgICAyCisjZGVmaW5lIEROX0RPTlRTRU5EICAgICAxCisjZGVmaW5lIEROX05PQ0hBTkdFICAgICAwCisJdW5zaWduZWQgc2hvcnQJCWZsb3dyZW1fZGF0OworCXVuc2lnbmVkIHNob3J0CQlmbG93cmVtX290aDsKKwl1bnNpZ25lZCBzaG9ydAkJZmxvd2xvY19kYXQ7CisJdW5zaWduZWQgc2hvcnQJCWZsb3dsb2Nfb3RoOworCXVuc2lnbmVkIGNoYXIJCXNlcnZpY2VzX3JlbTsKKwl1bnNpZ25lZCBjaGFyCQlzZXJ2aWNlc19sb2M7CisJdW5zaWduZWQgY2hhcgkJaW5mb19yZW07CisJdW5zaWduZWQgY2hhcgkJaW5mb19sb2M7CisKKwl1bnNpZ25lZCBzaG9ydAkJc2Vnc2l6ZV9yZW07CisJdW5zaWduZWQgc2hvcnQJCXNlZ3NpemVfbG9jOworCisJdW5zaWduZWQgY2hhcgkJbm9uYWdsZTsKKwl1bnNpZ25lZCBjaGFyCQltdWx0aV9pcmVxOworCXVuc2lnbmVkIGNoYXIJCWFjY2VwdF9tb2RlOworCXVuc2lnbmVkIGxvbmcJCXNlZ190b3RhbDsgLyogUnVubmluZyB0b3RhbCBvZiBjdXJyZW50IHNlZ21lbnQgKi8KKworCXN0cnVjdCBvcHRkYXRhX2RuICAgICBjb25uZGF0YV9pbjsKKwlzdHJ1Y3Qgb3B0ZGF0YV9kbiAgICAgY29ubmRhdGFfb3V0OworCXN0cnVjdCBvcHRkYXRhX2RuICAgICBkaXNjZGF0YV9pbjsKKwlzdHJ1Y3Qgb3B0ZGF0YV9kbiAgICAgZGlzY2RhdGFfb3V0OworICAgICAgICBzdHJ1Y3QgYWNjZXNzZGF0YV9kbiAgYWNjZXNzZGF0YTsKKworICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfZG4gYWRkcjsgLyogTG9jYWwgYWRkcmVzcyAgKi8KKwlzdHJ1Y3Qgc29ja2FkZHJfZG4gcGVlcjsgLyogUmVtb3RlIGFkZHJlc3MgKi8KKworCS8qCisJICogSW4gdGhpcyBjYXNlIHRoZSBSVFQgZXN0aW1hdGlvbiBpcyBub3Qgc3BlY2lmaWVkIGluIHRoZQorCSAqIGRvY3MsIG5vciBpcyBhbnkgYmFjayBvZmYgYWxnb3JpdGhtLiBIZXJlIHdlIGZvbGxvdyB3ZWxsCisJICoga25vd24gdGNwIGFsZ29yaXRobXMgd2l0aCBhIGZldyBzbWFsbCB2YXJpYXRpb25zLgorCSAqCisJICogc25kX3dpbmRvdzogTWF4IG51bWJlciBvZiBwYWNrZXRzIHdlIHNlbmQgYmVmb3JlIHdlIHdhaXQgZm9yCisJICogICAgICAgICAgICAgYW4gYWNrIHRvIGNvbWUgYmFjay4gVGhpcyB3aWxsIGJlY29tZSBwYXJ0IG9mIGEKKwkgKiAgICAgICAgICAgICBtb3JlIGNvbXBsaWNhdGVkIHNjaGVtZSB3aGVuIHdlIHN1cHBvcnQgZmxvdworCSAqICAgICAgICAgICAgIGNvbnRyb2wuCisJICoKKwkgKiBuc3Bfc3J0dDogICBSb3VuZC1UcmlwLVRpbWUgKHg4KSBpbiBqaWZmaWVzLiBUaGlzIGlzIGEgcm9sbGluZworCSAqICAgICAgICAgICAgIGF2ZXJhZ2UuCisJICogbnNwX3J0dHZhcjogUm91bmQtVHJpcC1UaW1lLVZhcmllbmNlICh4NCkgaW4gamlmZmllcy4gVGhpcyBpcyB0aGUKKwkgKiAgICAgICAgICAgICB2YXJpZW5jZSBvZiB0aGUgc21vb3RoZWQgYXZlcmFnZSAoYnV0IGNhbGN1bGF0ZWQgaW4KKwkgKiAgICAgICAgICAgICBhIHNpbXBsZXIgd2F5IHRoYW4gZm9yIG5vcm1hbCBzdGF0aXN0aWNhbCB2YXJpZW5jZQorCSAqICAgICAgICAgICAgIGNhbGN1bGF0aW9ucykuCisJICoKKwkgKiBuc3Bfcnh0c2hpZnQ6IEJhY2tvZmYgY291bnRlci4gVmFsdWUgaXMgemVybyBub3JtYWxseSwgZWFjaCB0aW1lCisJICogICAgICAgICAgICAgICBhIHBhY2tldCBpcyBsb3N0IGlzIGluY3JlYXNlcyBieSBvbmUgdW50aWwgYW4gYWNrCisJICogICAgICAgICAgICAgICBpcyByZWNlaXZlZC4gSXRzIHVzZWQgdG8gaW5kZXggYW4gYXJyYXkgb2YgYmFja29mZgorCSAqICAgICAgICAgICAgICAgbXVsdGlwbGllcnMuCisJICovCisjZGVmaW5lIE5TUF9NSU5fV0lORE9XIDEKKyNkZWZpbmUgTlNQX01BWF9XSU5ET1cgKDB4MDdmZSkKKwl1bnNpZ25lZCBsb25nIG1heF93aW5kb3c7CisJdW5zaWduZWQgbG9uZyBzbmRfd2luZG93OworI2RlZmluZSBOU1BfSU5JVElBTF9TUlRUIChIWikKKwl1bnNpZ25lZCBsb25nIG5zcF9zcnR0OworI2RlZmluZSBOU1BfSU5JVElBTF9SVFRWQVIgKEhaKjMpCisJdW5zaWduZWQgbG9uZyBuc3BfcnR0dmFyOworI2RlZmluZSBOU1BfTUFYUlhUU0hJRlQgMTIKKwl1bnNpZ25lZCBsb25nIG5zcF9yeHRzaGlmdDsKKworCS8qCisJICogT3V0cHV0IHF1ZXVlcywgb25lIGZvciBkYXRhLCBvbmUgZm9yIG90aGVyZGF0YS9saW5rc2VydmljZQorCSAqLworCXN0cnVjdCBza19idWZmX2hlYWQgZGF0YV94bWl0X3F1ZXVlOworCXN0cnVjdCBza19idWZmX2hlYWQgb3RoZXJfeG1pdF9xdWV1ZTsKKworCS8qCisJICogSW5wdXQgcXVldWUgZm9yIG90aGVyIGRhdGEKKwkgKi8KKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIG90aGVyX3JlY2VpdmVfcXVldWU7CisJaW50IG90aGVyX3JlcG9ydDsKKworCS8qCisJICogU3R1ZmYgdG8gZG8gd2l0aCB0aGUgc2xvdyB0aW1lcgorCSAqLworCXVuc2lnbmVkIGxvbmcgc3RhbXA7ICAgICAgICAgIC8qIHRpbWUgb2YgbGFzdCB0cmFuc21pdCAqLworCXVuc2lnbmVkIGxvbmcgcGVyc2lzdDsKKwlpbnQgKCpwZXJzaXN0X2Z4bikoc3RydWN0IHNvY2sgKnNrKTsKKwl1bnNpZ25lZCBsb25nIGtlZXBhbGl2ZTsKKwl2b2lkICgqa2VlcGFsaXZlX2Z4bikoc3RydWN0IHNvY2sgKnNrKTsKKworCS8qCisJICogVGhpcyBzdHVmZiBpcyBmb3IgdGhlIGZhc3QgdGltZXIgZm9yIGRlbGF5ZWQgYWNrcworCSAqLworCXN0cnVjdCB0aW1lcl9saXN0IGRlbGFja190aW1lcjsKKwlpbnQgZGVsYWNrX3BlbmRpbmc7CisJdm9pZCAoKmRlbGFja19meG4pKHN0cnVjdCBzb2NrICpzayk7CisKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGRuX3NjcCAqRE5fU0soc3RydWN0IHNvY2sgKnNrKQoreworCXJldHVybiAoc3RydWN0IGRuX3NjcCAqKShzayArIDEpOworfQorCisvKgorICogc3JjLGRzdCA6IFNvdXJjZSBhbmQgRGVzdGluYXRpb24gREVDbmV0IGFkZHJlc3NlcworICogaG9wcyA6IE51bWJlciBvZiBob3BzIHRocm91Z2ggdGhlIG5ldHdvcmsKKyAqIGRzdF9wb3J0LCBzcmNfcG9ydCA6IE5TUCBwb3J0IG51bWJlcnMKKyAqIHNlcnZpY2VzLCBpbmZvIDogVXNlZnVsIGRhdGEgZXh0cmFjdGVkIGZyb20gY29ubmluaXQgbWVzc2FnZXMKKyAqIHJ0X2ZsYWdzIDogUm91dGluZyBmbGFncyBieXRlCisgKiBuc3BfZmxhZ3MgOiBOU1AgbGF5ZXIgZmxhZ3MgYnl0ZQorICogc2Vnc2l6ZSA6IFNpemUgb2Ygc2VnbWVudAorICogc2VnbnVtIDogTnVtYmVyLCBmb3IgZGF0YSwgb3RoZXJkYXRhIGFuZCBsaW5rc2VydmljZQorICogeG1pdF9jb3VudCA6IE51bWJlciBvZiB0aW1lcyB3ZSd2ZSB0cmFuc21pdHRlZCB0aGlzIHNrYgorICogc3RhbXAgOiBUaW1lIHN0YW1wIG9mIG1vc3QgcmVjZW50IHRyYW5zbWlzc2lvbiwgdXNlZCBpbiBSVFQgY2FsY3VsYXRpb25zCisgKiBpaWY6IElucHV0IGludGVyZmFjZSBudW1iZXIKKyAqCisgKiBBcyBhIGdlbmVyYWwgcG9saWN5LCB0aGlzIHN0cnVjdHVyZSBrZWVwcyBhbGwgYWRkcmVzc2VzIGluIG5ldHdvcmsKKyAqIGJ5dGUgb3JkZXIsIGFuZCBhbGwgZWxzZSBpbiBob3N0IGJ5dGUgb3JkZXIuIFRodXMgZHN0LCBzcmMsIGRzdF9wb3J0CisgKiBhbmQgc3JjX3BvcnQgYXJlIGluIG5ldHdvcmsgb3JkZXIuIEFsbCBlbHNlIGlzIGluIGhvc3Qgb3JkZXIuCisgKiAKKyAqLworI2RlZmluZSBETl9TS0JfQ0Ioc2tiKSAoKHN0cnVjdCBkbl9za2JfY2IgKikoc2tiKS0+Y2IpCitzdHJ1Y3QgZG5fc2tiX2NiIHsKKwl1bnNpZ25lZCBzaG9ydCBkc3Q7CisJdW5zaWduZWQgc2hvcnQgc3JjOworCXVuc2lnbmVkIHNob3J0IGhvcHM7CisJdW5zaWduZWQgc2hvcnQgZHN0X3BvcnQ7CisJdW5zaWduZWQgc2hvcnQgc3JjX3BvcnQ7CisJdW5zaWduZWQgY2hhciBzZXJ2aWNlczsKKwl1bnNpZ25lZCBjaGFyIGluZm87CisJdW5zaWduZWQgY2hhciBydF9mbGFnczsKKwl1bnNpZ25lZCBjaGFyIG5zcF9mbGFnczsKKwl1bnNpZ25lZCBzaG9ydCBzZWdzaXplOworCXVuc2lnbmVkIHNob3J0IHNlZ251bTsKKwl1bnNpZ25lZCBzaG9ydCB4bWl0X2NvdW50OworCXVuc2lnbmVkIGxvbmcgc3RhbXA7CisJaW50IGlpZjsKK307CisKK3N0YXRpYyBpbmxpbmUgZG5fYWRkcmVzcyBkbl9ldGgyZG4odW5zaWduZWQgY2hhciAqZXRoYWRkcikKK3sKKwlyZXR1cm4gZXRoYWRkcls0XSB8IChldGhhZGRyWzVdIDw8IDgpOworfQorCitzdGF0aWMgaW5saW5lIGRuX2FkZHJlc3MgZG5fc2FkZHIyZG4oc3RydWN0IHNvY2thZGRyX2RuICpzYWRkcikKK3sKKwlyZXR1cm4gKihkbl9hZGRyZXNzICopc2FkZHItPnNkbl9ub2RlYWRkcjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRuX2RuMmV0aCh1bnNpZ25lZCBjaGFyICpldGhhZGRyLCBkbl9hZGRyZXNzIGFkZHIpCit7CisJZXRoYWRkclswXSA9IDB4QUE7CisJZXRoYWRkclsxXSA9IDB4MDA7CisJZXRoYWRkclsyXSA9IDB4MDQ7CisJZXRoYWRkclszXSA9IDB4MDA7CisJZXRoYWRkcls0XSA9ICh1bnNpZ25lZCBjaGFyKShhZGRyICYgMHhmZik7CisJZXRoYWRkcls1XSA9ICh1bnNpZ25lZCBjaGFyKShhZGRyID4+IDgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZG5fc2tfcG9ydHNfY29weShzdHJ1Y3QgZmxvd2kgKmZsLCBzdHJ1Y3QgZG5fc2NwICpzY3ApCit7CisJZmwtPnVsaV91LmRucG9ydHMuc3BvcnQgPSBzY3AtPmFkZHJsb2M7CisJZmwtPnVsaV91LmRucG9ydHMuZHBvcnQgPSBzY3AtPmFkZHJyZW07CisJZmwtPnVsaV91LmRucG9ydHMub2JqbnVtID0gc2NwLT5hZGRyLnNkbl9vYmpudW07CisJaWYgKGZsLT51bGlfdS5kbnBvcnRzLm9iam51bSA9PSAwKSB7CisJCWZsLT51bGlfdS5kbnBvcnRzLm9iam5hbWVsID0gc2NwLT5hZGRyLnNkbl9vYmpuYW1lbDsKKwkJbWVtY3B5KGZsLT51bGlfdS5kbnBvcnRzLm9iam5hbWUsIHNjcC0+YWRkci5zZG5fb2JqbmFtZSwgMTYpOworCX0KK30KKworZXh0ZXJuIHVuc2lnbmVkIGRuX21zc19mcm9tX3BtdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG10dSk7CisKKyNkZWZpbmUgRE5fTUVOVVZFUl9BQ0MgMHgwMQorI2RlZmluZSBETl9NRU5VVkVSX1VTUiAweDAyCisjZGVmaW5lIEROX01FTlVWRVJfUFJYIDB4MDQKKyNkZWZpbmUgRE5fTUVOVVZFUl9VSUMgMHgwOAorCitleHRlcm4gc3RydWN0IHNvY2sgKmRuX3NrbGlzdF9maW5kX2xpc3RlbmVyKHN0cnVjdCBzb2NrYWRkcl9kbiAqYWRkcik7CitleHRlcm4gc3RydWN0IHNvY2sgKmRuX2ZpbmRfYnlfc2tiKHN0cnVjdCBza19idWZmICpza2IpOworI2RlZmluZSBETl9BU0NCVUZfTEVOIDkKK2V4dGVybiBjaGFyICpkbl9hZGRyMmFzYyhkbl9hZGRyZXNzLCBjaGFyICopOworZXh0ZXJuIGludCBkbl9kZXN0cm95X3RpbWVyKHN0cnVjdCBzb2NrICpzayk7CisKK2V4dGVybiBpbnQgZG5fc29ja2FkZHIydXNlcm5hbWUoc3RydWN0IHNvY2thZGRyX2RuICphZGRyLCB1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGNoYXIgdHlwZSk7CitleHRlcm4gaW50IGRuX3VzZXJuYW1lMnNvY2thZGRyKHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBsZW4sIHN0cnVjdCBzb2NrYWRkcl9kbiAqYWRkciwgdW5zaWduZWQgY2hhciAqdHlwZSk7CisKK2V4dGVybiB2b2lkIGRuX3N0YXJ0X3Nsb3dfdGltZXIoc3RydWN0IHNvY2sgKnNrKTsKK2V4dGVybiB2b2lkIGRuX3N0b3Bfc2xvd190aW1lcihzdHJ1Y3Qgc29jayAqc2spOworCitleHRlcm4gZG5fYWRkcmVzcyBkZWNuZXRfYWRkcmVzczsKK2V4dGVybiBpbnQgZGVjbmV0X2RlYnVnX2xldmVsOworZXh0ZXJuIGludCBkZWNuZXRfdGltZV93YWl0OworZXh0ZXJuIGludCBkZWNuZXRfZG5fY291bnQ7CitleHRlcm4gaW50IGRlY25ldF9kaV9jb3VudDsKK2V4dGVybiBpbnQgZGVjbmV0X2RyX2NvdW50OworZXh0ZXJuIGludCBkZWNuZXRfbm9fZmNfbWF4X2N3bmQ7CisKKyNlbmRpZiAvKiBfTkVUX0ROX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2RuX2Rldi5oIGIvaW5jbHVkZS9uZXQvZG5fZGV2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZlOGU4NgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L2RuX2Rldi5oCkBAIC0wLDAgKzEsMTk0IEBACisjaWZuZGVmIF9ORVRfRE5fREVWX0gKKyNkZWZpbmUgX05FVF9ETl9ERVZfSAorCisKK3N0cnVjdCBkbl9kZXY7CisKK3N0cnVjdCBkbl9pZmFkZHIgeworCXN0cnVjdCBkbl9pZmFkZHIgKmlmYV9uZXh0OworCXN0cnVjdCBkbl9kZXYgICAgKmlmYV9kZXY7CisJZG5fYWRkcmVzcyAgICAgICBpZmFfbG9jYWw7CisJZG5fYWRkcmVzcyAgICAgICBpZmFfYWRkcmVzczsKKwl1bnNpZ25lZCBjaGFyICAgIGlmYV9mbGFnczsKKwl1bnNpZ25lZCBjaGFyICAgIGlmYV9zY29wZTsKKwljaGFyICAgICAgICAgICAgIGlmYV9sYWJlbFtJRk5BTVNJWl07Cit9OworCisjZGVmaW5lIEROX0RFVl9TX1JVICAwIC8qIFJ1biAtIHdvcmtpbmcgbm9ybWFsbHkgICAqLworI2RlZmluZSBETl9ERVZfU19DUiAgMSAvKiBDaXJjdWl0IFJlamVjdGVkICAgICAgICAgKi8KKyNkZWZpbmUgRE5fREVWX1NfRFMgIDIgLyogRGF0YSBMaW5rIFN0YXJ0ICAgICAgICAgICovCisjZGVmaW5lIEROX0RFVl9TX1JJICAzIC8qIFJvdXRpbmcgTGF5ZXIgSW5pdGlhbGl6ZSAqLworI2RlZmluZSBETl9ERVZfU19SViAgNCAvKiBSb3V0aW5nIExheWVyIFZlcmlmeSAgICAgKi8KKyNkZWZpbmUgRE5fREVWX1NfUkMgIDUgLyogUm91dGluZyBMYXllciBDb21wbGV0ZSAgICovCisjZGVmaW5lIEROX0RFVl9TX09GICA2IC8qIE9mZiAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETl9ERVZfU19IQSAgNyAvKiBIYWx0ICAgICAgICAgICAgICAgICAgICAgKi8KKworCisvKgorICogVGhlIGRuX2Rldl9wYXJtcyBzdHJ1Y3R1cmUgY29udGFpbnMgdGhlIHNldCBvZiBwYXJhbWV0ZXJzCisgKiBmb3IgZWFjaCBkZXZpY2UgKGhlbmNlIGluY2x1c2lvbiBpbiB0aGUgZG5fZGV2IHN0cnVjdHVyZSkKKyAqIGFuZCBhbiBhcnJheSBpcyB1c2VkIHRvIHN0b3JlIHRoZSBkZWZhdWx0IHR5cGVzIG9mIHN1cHBvcnRlZAorICogZGV2aWNlIChpbiBkbl9kZXYuYykuCisgKgorICogVGhlIHR5cGUgZmllbGQgbWF0Y2hlcyB0aGUgQVJQSFJEXyBjb25zdGFudHMgYW5kIGlzIHVzZWQgaW4KKyAqIHNlYXJjaGluZyB0aGUgbGlzdCBmb3Igc3VwcG9ydGVkIGRldmljZXMgd2hlbiBuZXcgZGV2aWNlcworICogY29tZSB1cC4KKyAqCisgKiBUaGUgbW9kZSBmaWVsZCBpcyB1c2VkIHRvIGZpbmQgb3V0IGlmIGEgZGV2aWNlIGlzIGJyb2FkY2FzdCwKKyAqIG11bHRpcG9pbnQsIG9yIHBvaW50b3BvaW50LiBQbGVhc2Ugbm90ZSB0aGF0IERFQ25ldCB0aGlua3MKKyAqIGRpZmZlcmVudCB3YXlzIGFib3V0IGRldmljZXMgdG8gdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbAorICogc28gdGhlIG5vcm1hbCBJRkZfeHh4IGZsYWdzIGFyZSBpbnZhbGlkIGhlcmUuIEZvciBkZXZpY2VzCisgKiB3aGljaCBjYW4gYmUgYW55IGNvbWJpbmF0aW9uIG9mIHRoZSBwcmV2aW91c2x5IG1lbnRpb25lZAorICogYXR0cmlidXRlcywgeW91IGNhbiBzZXQgdGhpcyBvbiBhIHBlciBkZXZpY2UgYmFzaXMgYnkKKyAqIGluc3RhbGxpbmcgYW4gdXAoKSByb3V0aW5lLgorICoKKyAqIFRoZSBkZXZpY2Ugc3RhdGUgZmllbGQsIGRlZmluZXMgdGhlIGluaXRpYWwgc3RhdGUgaW4gd2hpY2ggdGhlCisgKiBkZXZpY2Ugd2lsbCBjb21lIHVwLiBJbiB0aGUgZG5fZGV2IHN0cnVjdHVyZSwgaXQgaXMgdGhlIGFjdHVhbAorICogc3RhdGUuCisgKgorICogVGhpbmdzIGhhdmUgY2hhbmdlZCBoZXJlLiBJJ3ZlIGtpbGxlZCB0aW1lcjEgc2luY2UgaXQncyBhIHVzZXIgc3BhY2UKKyAqIGlzc3VlIGZvciBhIHVzZXIgc3BhY2Ugcm91dGluZyBkZWFtb24gdG8gc29ydCBvdXQuIFRoZSBrZXJuZWwgZG9lcworICogbm90IG5lZWQgdG8gYmUgYm90aGVyZWQgd2l0aCBpdC4KKyAqCisgKiBUaW1lcnM6CisgKiB0MiAtIFJhdGUgbGltaXQgdGltZXIsIG1pbiB0aW1lIGJldHdlZW4gcm91dGluZyBhbmQgaGVsbG8gbWVzc2FnZXMKKyAqIHQzIC0gSGVsbG8gdGltZXIsIHNlbmQgaGVsbG8gbWVzc2FnZXMgd2hlbiBpdCBleHBpcmVzCisgKgorICogQ2FsbGJhY2tzOgorICogdXAoKSAtIENhbGxlZCB0byBpbml0aWFsaXplIGRldmljZSwgcmV0dXJuIHZhbHVlIGNhbiB2ZXRvIHVzZSBvZgorICogICAgICAgIGRldmljZSB3aXRoIERFQ25ldC4KKyAqIGRvd24oKSAtIENhbGxlZCB0byB0dXJuIGRldmljZSBvZmYgd2hlbiBpdCBnb2VzIGRvd24KKyAqIHRpbWVyMygpIC0gQ2FsbGVkIG9uY2UgZm9yIGVhY2ggaWZhZGRyIHdoZW4gdGltZXIgMyBnb2VzIG9mZgorICogCisgKiBzeXNjdGwgLSBIb29rIGZvciBzeXNjdGwgdGhpbmdzCisgKgorICovCitzdHJ1Y3QgZG5fZGV2X3Bhcm1zIHsKKwlpbnQgdHlwZTsJICAgICAgICAgIC8qIEFSUEhSRF94eHggICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwlpbnQgbW9kZTsJICAgICAgICAgIC8qIEJyb2FkY2FzdCwgVW5pY2FzdCwgTXVsaXRwb2ludCAgICAgKi8KKyNkZWZpbmUgRE5fREVWX0JDQVNUICAxCisjZGVmaW5lIEROX0RFVl9VQ0FTVCAgMgorI2RlZmluZSBETl9ERVZfTVBPSU5UIDQKKwlpbnQgc3RhdGU7ICAgICAgICAgICAgICAgIC8qIEluaXRpYWwgc3RhdGUgICAgICAgICAgICAgICAgICAgICAgKi8KKwlpbnQgZm9yd2FyZGluZzsJICAgICAgICAgIC8qIDA9RW5kTm9kZSwgMT1MMVJvdXRlciwgMj1MMlJvdXRlciAgKi8KKwl1bnNpZ25lZCBsb25nIHQyOyAgICAgICAgIC8qIERlZmF1bHQgdmFsdWUgb2YgdDIgICAgICAgICAgICAgICAgKi8KKwl1bnNpZ25lZCBsb25nIHQzOyAgICAgICAgIC8qIERlZmF1bHQgdmFsdWUgb2YgdDMgICAgICAgICAgICAgICAgKi8KKwlpbnQgcHJpb3JpdHk7ICAgICAgICAgICAgIC8qIFByaW9yaXR5IHRvIGJlIGEgcm91dGVyICAgICAgICAgICAgKi8KKwljaGFyICpuYW1lOyAgICAgICAgICAgICAgIC8qIE5hbWUgZm9yIHN5c2N0bCAgICAgICAgICAgICAgICAgICAgKi8KKwlpbnQgY3RsX25hbWU7ICAgICAgICAgICAgIC8qIEluZGV4IGZvciBzeXNjdGwgICAgICAgICAgICAgICAgICAgKi8KKwlpbnQgICgqdXApKHN0cnVjdCBuZXRfZGV2aWNlICopOworCXZvaWQgKCpkb3duKShzdHJ1Y3QgbmV0X2RldmljZSAqKTsKKwl2b2lkICgqdGltZXIzKShzdHJ1Y3QgbmV0X2RldmljZSAqLCBzdHJ1Y3QgZG5faWZhZGRyICppZmEpOworCXZvaWQgKnN5c2N0bDsKK307CisKKworc3RydWN0IGRuX2RldiB7CisJc3RydWN0IGRuX2lmYWRkciAqaWZhX2xpc3Q7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgZG5fZGV2X3Bhcm1zIHBhcm1zOworCWNoYXIgdXNlX2xvbmc7CisgICAgICAgIHN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOworICAgICAgICB1bnNpZ25lZCBsb25nIHQzOworCXN0cnVjdCBuZWlnaF9wYXJtcyAqbmVpZ2hfcGFybXM7CisJdW5zaWduZWQgY2hhciBhZGRyW0VUSF9BTEVOXTsKKwlzdHJ1Y3QgbmVpZ2hib3VyICpyb3V0ZXI7IC8qIERlZmF1bHQgcm91dGVyIG9uIGNpcmN1aXQgKi8KKwlzdHJ1Y3QgbmVpZ2hib3VyICpwZWVyOyAgIC8qIFBlZXIgb24gcG9pbnRvcG9pbnQgbGlua3MgKi8KKwl1bnNpZ25lZCBsb25nIHVwdGltZTsgICAgIC8qIFRpbWUgZGV2aWNlIHdlbnQgdXAgaW4gamlmZmllcyAqLworfTsKKworc3RydWN0IGRuX3Nob3J0X3BhY2tldAoreworCXVuc2lnbmVkIGNoYXIgICBtc2dmbGcgICAgICAgICAgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisgICAgICAgIHVuc2lnbmVkIHNob3J0ICBkc3Rub2RlICAgICAgICAgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisgICAgICAgIHVuc2lnbmVkIHNob3J0ICBzcmNub2RlICAgICAgICAgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgICBmb3J3YXJkICAgICAgICAgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9OworCitzdHJ1Y3QgZG5fbG9uZ19wYWNrZXQKK3sKKwl1bnNpZ25lZCBjaGFyICAgbXNnZmxnICAgICAgICAgIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworICAgICAgICB1bnNpZ25lZCBjaGFyICAgZF9hcmVhICAgICAgICAgIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworICAgICAgICB1bnNpZ25lZCBjaGFyICAgZF9zdWJhcmVhICAgICAgIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworICAgICAgICB1bnNpZ25lZCBjaGFyICAgZF9pZFs2XSAgICAgICAgIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworICAgICAgICB1bnNpZ25lZCBjaGFyICAgc19hcmVhICAgICAgICAgIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworICAgICAgICB1bnNpZ25lZCBjaGFyICAgc19zdWJhcmVhICAgICAgIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworICAgICAgICB1bnNpZ25lZCBjaGFyICAgc19pZFs2XSAgICAgICAgIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworICAgICAgICB1bnNpZ25lZCBjaGFyICAgbmwyICAgICAgICAgICAgIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworICAgICAgICB1bnNpZ25lZCBjaGFyICAgdmlzaXRfY3QgICAgICAgIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworICAgICAgICB1bnNpZ25lZCBjaGFyICAgc19jbGFzcyAgICAgICAgIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworICAgICAgICB1bnNpZ25lZCBjaGFyICAgcHQgICAgICAgICAgICAgIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERSUCAtIFJvdXRpbmcgbWVzc2FnZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RydWN0IGVuZG5vZGVfaGVsbG9fbWVzc2FnZQoreworCXVuc2lnbmVkIGNoYXIgICBtc2dmbGcgICAgICAgICAgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgICB0aXZlclszXSAgICAgICAgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgICBpZFs2XSAgICAgICAgICAgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgICBpaW5mbyAgICAgICAgICAgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisgICAgICAgIHVuc2lnbmVkIHNob3J0ICBibGtzaXplICAgICAgICAgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgICBhcmVhICAgICAgICAgICAgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgICBzZWVkWzhdICAgICAgICAgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgICBuZWlnaGJvcls2XSAgICAgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisgICAgICAgIHVuc2lnbmVkIHNob3J0ICB0aW1lciAgICAgICAgICAgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgICBtcGQgICAgICAgICAgICAgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgICBkYXRhbGVuICAgICAgICAgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgICBkYXRhWzJdICAgICAgICAgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9OworCitzdHJ1Y3QgcnRub2RlX2hlbGxvX21lc3NhZ2UKK3sKKwl1bnNpZ25lZCBjaGFyICAgbXNnZmxnICAgICAgICAgIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworICAgICAgICB1bnNpZ25lZCBjaGFyICAgdGl2ZXJbM10gICAgICAgIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworICAgICAgICB1bnNpZ25lZCBjaGFyICAgaWRbNl0gICAgICAgICAgIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworICAgICAgICB1bnNpZ25lZCBjaGFyICAgaWluZm8gICAgICAgICAgIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworICAgICAgICB1bnNpZ25lZCBzaG9ydCAgYmxrc2l6ZSAgICAgICAgIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworICAgICAgICB1bnNpZ25lZCBjaGFyICAgcHJpb3JpdHkgICAgICAgIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworICAgICAgICB1bnNpZ25lZCBjaGFyICAgYXJlYSAgICAgICAgICAgIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworICAgICAgICB1bnNpZ25lZCBzaG9ydCAgdGltZXIgICAgICAgICAgIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworICAgICAgICB1bnNpZ25lZCBjaGFyICAgbXBkICAgICAgICAgICAgIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfTsKKworCitleHRlcm4gdm9pZCBkbl9kZXZfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIGRuX2Rldl9jbGVhbnVwKHZvaWQpOworCitleHRlcm4gaW50IGRuX2Rldl9pb2N0bCh1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqYXJnKTsKKworZXh0ZXJuIHZvaWQgZG5fZGV2X2RldmljZXNfb2ZmKHZvaWQpOworZXh0ZXJuIHZvaWQgZG5fZGV2X2RldmljZXNfb24odm9pZCk7CisKK2V4dGVybiB2b2lkIGRuX2Rldl9pbml0X3BrdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiB2b2lkIGRuX2Rldl92ZXJpX3BrdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiB2b2lkIGRuX2Rldl9oZWxsbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKworZXh0ZXJuIHZvaWQgZG5fZGV2X3VwKHN0cnVjdCBuZXRfZGV2aWNlICopOworZXh0ZXJuIHZvaWQgZG5fZGV2X2Rvd24oc3RydWN0IG5ldF9kZXZpY2UgKik7CisKK2V4dGVybiBpbnQgZG5fZGV2X3NldF9kZWZhdWx0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBmb3JjZSk7CitleHRlcm4gc3RydWN0IG5ldF9kZXZpY2UgKmRuX2Rldl9nZXRfZGVmYXVsdCh2b2lkKTsKK2V4dGVybiBpbnQgZG5fZGV2X2JpbmRfZGVmYXVsdChkbl9hZGRyZXNzICphZGRyKTsKKworZXh0ZXJuIGludCByZWdpc3Rlcl9kbmFkZHJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7CitleHRlcm4gaW50IHVucmVnaXN0ZXJfZG5hZGRyX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpOworCitzdGF0aWMgaW5saW5lIGludCBkbl9kZXZfaXNsb2NhbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBkbl9hZGRyZXNzIGFkZHIpCit7CisJc3RydWN0IGRuX2RldiAqZG5fZGIgPSBkZXYtPmRuX3B0cjsKKwlzdHJ1Y3QgZG5faWZhZGRyICppZmE7CisKKwlpZiAoZG5fZGIgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiZG5fZGV2X2lzbG9jYWw6IENhbGxlZCBmb3Igbm9uIERFQ25ldCBkZXZpY2VcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlmb3IoaWZhID0gZG5fZGItPmlmYV9saXN0OyBpZmE7IGlmYSA9IGlmYS0+aWZhX25leHQpCisJCWlmICgoYWRkciBeIGlmYS0+aWZhX2xvY2FsKSA9PSAwKQorCQkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworI2VuZGlmIC8qIF9ORVRfRE5fREVWX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2RuX2ZpYi5oIGIvaW5jbHVkZS9uZXQvZG5fZmliLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QzYzk2ZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L2RuX2ZpYi5oCkBAIC0wLDAgKzEsMjA0IEBACisjaWZuZGVmIF9ORVRfRE5fRklCX0gKKyNkZWZpbmUgX05FVF9ETl9GSUJfSAorCisvKiBXQVJOSU5HOiBUaGUgb3JkZXJpbmcgb2YgdGhlc2UgZWxlbWVudHMgbXVzdCBtYXRjaCBvcmRlcmluZworICogICAgICAgICAgb2YgUlRBXyogcnRuZXRsaW5rIGF0dHJpYnV0ZSBudW1iZXJzLgorICovCitzdHJ1Y3QgZG5fa2Vybl9ydGEKK3sKKyAgICAgICAgdm9pZCAgICAgICAgICAgICpydGFfZHN0OworICAgICAgICB2b2lkICAgICAgICAgICAgKnJ0YV9zcmM7CisgICAgICAgIGludCAgICAgICAgICAgICAqcnRhX2lpZjsKKyAgICAgICAgaW50ICAgICAgICAgICAgICpydGFfb2lmOworICAgICAgICB2b2lkICAgICAgICAgICAgKnJ0YV9ndzsKKyAgICAgICAgdTMyICAgICAgICAgICAgICpydGFfcHJpb3JpdHk7CisgICAgICAgIHZvaWQgICAgICAgICAgICAqcnRhX3ByZWZzcmM7CisgICAgICAgIHN0cnVjdCBydGF0dHIgICAqcnRhX214OworICAgICAgICBzdHJ1Y3QgcnRhdHRyICAgKnJ0YV9tcDsKKyAgICAgICAgdW5zaWduZWQgY2hhciAgICpydGFfcHJvdG9pbmZvOworICAgICAgICB1MzIgICAgICAgICAgICAgKnJ0YV9mbG93OworICAgICAgICBzdHJ1Y3QgcnRhX2NhY2hlaW5mbyAqcnRhX2NpOworCXN0cnVjdCBydGFfc2Vzc2lvbiAqcnRhX3Nlc3M7Cit9OworCitzdHJ1Y3QgZG5fZmliX3JlcyB7CisJc3RydWN0IGRuX2ZpYl9ydWxlICpyOworCXN0cnVjdCBkbl9maWJfaW5mbyAqZmk7CisJdW5zaWduZWQgY2hhciBwcmVmaXhsZW47CisJdW5zaWduZWQgY2hhciBuaF9zZWw7CisJdW5zaWduZWQgY2hhciB0eXBlOworCXVuc2lnbmVkIGNoYXIgc2NvcGU7Cit9OworCitzdHJ1Y3QgZG5fZmliX25oIHsKKwlzdHJ1Y3QgbmV0X2RldmljZQkqbmhfZGV2OworCXVuc2lnbmVkCQluaF9mbGFnczsKKwl1bnNpZ25lZCBjaGFyCQluaF9zY29wZTsKKwlpbnQJCQluaF93ZWlnaHQ7CisJaW50CQkJbmhfcG93ZXI7CisJaW50CQkJbmhfb2lmOworCXUzMgkJCW5oX2d3OworfTsKKworc3RydWN0IGRuX2ZpYl9pbmZvIHsKKwlzdHJ1Y3QgZG5fZmliX2luZm8JKmZpYl9uZXh0OworCXN0cnVjdCBkbl9maWJfaW5mbwkqZmliX3ByZXY7CisJaW50IAkJCWZpYl90cmVlcmVmOworCWF0b21pY190CQlmaWJfY2xudHJlZjsKKwlpbnQJCQlmaWJfZGVhZDsKKwl1bnNpZ25lZAkJZmliX2ZsYWdzOworCWludAkJCWZpYl9wcm90b2NvbDsKKwlkbl9hZGRyZXNzCQlmaWJfcHJlZnNyYzsKKwlfX3UzMgkJCWZpYl9wcmlvcml0eTsKKwlfX3UzMgkJCWZpYl9tZXRyaWNzW1JUQVhfTUFYXTsKKyNkZWZpbmUgZG5fZmliX210dSAgZmliX21ldHJpY3NbUlRBWF9NVFUtMV0KKyNkZWZpbmUgZG5fZmliX3dpbmRvdyBmaWJfbWV0cmljc1tSVEFYX1dJTkRPVy0xXQorI2RlZmluZSBkbl9maWJfcnR0IGZpYl9tZXRyaWNzW1JUQVhfUlRULTFdCisjZGVmaW5lIGRuX2ZpYl9hZHZtc3MgZmliX21ldHJpY3NbUlRBWF9BRFZNU1MtMV0KKwlpbnQJCQlmaWJfbmhzOworCWludAkJCWZpYl9wb3dlcjsKKwlzdHJ1Y3QgZG5fZmliX25oCWZpYl9uaFswXTsKKyNkZWZpbmUgZG5fZmliX2RldgkJZmliX25oWzBdLm5oX2RldgorfTsKKworCisjZGVmaW5lIEROX0ZJQl9SRVNfUkVTRVQocmVzKQkoKHJlcykubmhfc2VsID0gMCkKKyNkZWZpbmUgRE5fRklCX1JFU19OSChyZXMpCSgocmVzKS5maS0+ZmliX25oWyhyZXMpLm5oX3NlbF0pCisKKyNkZWZpbmUgRE5fRklCX1JFU19QUkVGU1JDKHJlcykJKChyZXMpLmZpLT5maWJfcHJlZnNyYyA/IDogX19kbl9maWJfcmVzX3ByZWZzcmMoJnJlcykpCisjZGVmaW5lIEROX0ZJQl9SRVNfR1cocmVzKQkoRE5fRklCX1JFU19OSChyZXMpLm5oX2d3KQorI2RlZmluZSBETl9GSUJfUkVTX0RFVihyZXMpCShETl9GSUJfUkVTX05IKHJlcykubmhfZGV2KQorI2RlZmluZSBETl9GSUJfUkVTX09JRihyZXMpCShETl9GSUJfUkVTX05IKHJlcykubmhfb2lmKQorCit0eXBlZGVmIHN0cnVjdCB7CisJdTE2CWRhdHVtOworfSBkbl9maWJfa2V5X3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1MTYJZGF0dW07Cit9IGRuX2ZpYl9oYXNoX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1MTYJZGF0dW07Cit9IGRuX2ZpYl9pZHhfdDsKKworc3RydWN0IGRuX2ZpYl9ub2RlIHsKKwlzdHJ1Y3QgZG5fZmliX25vZGUgKmZuX25leHQ7CisJc3RydWN0IGRuX2ZpYl9pbmZvICpmbl9pbmZvOworI2RlZmluZSBETl9GSUJfSU5GTyhmKSAoKGYpLT5mbl9pbmZvKQorCWRuX2ZpYl9rZXlfdAlmbl9rZXk7CisJdTgJCWZuX3R5cGU7CisJdTgJCWZuX3Njb3BlOworCXU4CQlmbl9zdGF0ZTsKK307CisKKworc3RydWN0IGRuX2ZpYl90YWJsZSB7CisJaW50IG47CisKKwlpbnQgKCppbnNlcnQpKHN0cnVjdCBkbl9maWJfdGFibGUgKnQsIHN0cnVjdCBydG1zZyAqciwgCisJCQlzdHJ1Y3QgZG5fa2Vybl9ydGEgKnJ0YSwgc3RydWN0IG5sbXNnaGRyICpuLCAKKwkJCXN0cnVjdCBuZXRsaW5rX3NrYl9wYXJtcyAqcmVxKTsKKwlpbnQgKCpkZWxldGUpKHN0cnVjdCBkbl9maWJfdGFibGUgKnQsIHN0cnVjdCBydG1zZyAqciwKKwkJCXN0cnVjdCBkbl9rZXJuX3J0YSAqcnRhLCBzdHJ1Y3Qgbmxtc2doZHIgKm4sCisJCQlzdHJ1Y3QgbmV0bGlua19za2JfcGFybXMgKnJlcSk7CisJaW50ICgqbG9va3VwKShzdHJ1Y3QgZG5fZmliX3RhYmxlICp0LCBjb25zdCBzdHJ1Y3QgZmxvd2kgKmZsLAorCQkJc3RydWN0IGRuX2ZpYl9yZXMgKnJlcyk7CisJaW50ICgqZmx1c2gpKHN0cnVjdCBkbl9maWJfdGFibGUgKnQpOworCWludCAoKmR1bXApKHN0cnVjdCBkbl9maWJfdGFibGUgKnQsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7CisKKwl1bnNpZ25lZCBjaGFyIGRhdGFbMF07Cit9OworCisjaWZkZWYgQ09ORklHX0RFQ05FVF9ST1VURVIKKy8qCisgKiBkbl9maWIuYworICovCitleHRlcm4gdm9pZCBkbl9maWJfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIGRuX2ZpYl9jbGVhbnVwKHZvaWQpOworCitleHRlcm4gaW50IGRuX2ZpYl9pb2N0bChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLCAKKwkJCXVuc2lnbmVkIGxvbmcgYXJnKTsKK2V4dGVybiBzdHJ1Y3QgZG5fZmliX2luZm8gKmRuX2ZpYl9jcmVhdGVfaW5mbyhjb25zdCBzdHJ1Y3QgcnRtc2cgKnIsIAorCQkJCXN0cnVjdCBkbl9rZXJuX3J0YSAqcnRhLCAKKwkJCQljb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgaW50ICplcnJwKTsKK2V4dGVybiBpbnQgZG5fZmliX3NlbWFudGljX21hdGNoKGludCB0eXBlLCBzdHJ1Y3QgZG5fZmliX2luZm8gKmZpLCAKKwkJCWNvbnN0IHN0cnVjdCBmbG93aSAqZmwsCisJCQlzdHJ1Y3QgZG5fZmliX3JlcyAqcmVzKTsKK2V4dGVybiB2b2lkIGRuX2ZpYl9yZWxlYXNlX2luZm8oc3RydWN0IGRuX2ZpYl9pbmZvICpmaSk7CitleHRlcm4gdTE2IGRuX2ZpYl9nZXRfYXR0cjE2KHN0cnVjdCBydGF0dHIgKmF0dHIsIGludCBhdHRybGVuLCBpbnQgdHlwZSk7CitleHRlcm4gdm9pZCBkbl9maWJfZmx1c2godm9pZCk7CitleHRlcm4gdm9pZCBkbl9maWJfc2VsZWN0X211bHRpcGF0aChjb25zdCBzdHJ1Y3QgZmxvd2kgKmZsLAorCQkJCQlzdHJ1Y3QgZG5fZmliX3JlcyAqcmVzKTsKK2V4dGVybiBpbnQgZG5fZmliX3N5bmNfZG93bihkbl9hZGRyZXNzIGxvY2FsLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCAKKwkJCQlpbnQgZm9yY2UpOworZXh0ZXJuIGludCBkbl9maWJfc3luY191cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKworLyoKKyAqIGRuX3RhYmxlcy5jCisgKi8KK2V4dGVybiBzdHJ1Y3QgZG5fZmliX3RhYmxlICpkbl9maWJfZ2V0X3RhYmxlKGludCBuLCBpbnQgY3JlYXQpOworZXh0ZXJuIHN0cnVjdCBkbl9maWJfdGFibGUgKmRuX2ZpYl9lbXB0eV90YWJsZSh2b2lkKTsKK2V4dGVybiB2b2lkIGRuX2ZpYl90YWJsZV9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgZG5fZmliX3RhYmxlX2NsZWFudXAodm9pZCk7CisKKy8qCisgKiBkbl9ydWxlcy5jCisgKi8KK2V4dGVybiB2b2lkIGRuX2ZpYl9ydWxlc19pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgZG5fZmliX3J1bGVzX2NsZWFudXAodm9pZCk7CitleHRlcm4gdm9pZCBkbl9maWJfcnVsZV9wdXQoc3RydWN0IGRuX2ZpYl9ydWxlICopOworZXh0ZXJuIF9fdTE2IGRuX2ZpYl9ydWxlc19wb2xpY3koX191MTYgc2FkZHIsIHN0cnVjdCBkbl9maWJfcmVzICpyZXMsIHVuc2lnbmVkICpmbGFncyk7CitleHRlcm4gdW5zaWduZWQgZG5ldF9hZGRyX3R5cGUoX191MTYgYWRkcik7CitleHRlcm4gaW50IGRuX2ZpYl9sb29rdXAoY29uc3Qgc3RydWN0IGZsb3dpICpmbCwgc3RydWN0IGRuX2ZpYl9yZXMgKnJlcyk7CisKKy8qCisgKiBydG5ldGxpbmsgaW50ZXJmYWNlCisgKi8KK2V4dGVybiBpbnQgZG5fZmliX3J0bV9kZWxyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgdm9pZCAqYXJnKTsKK2V4dGVybiBpbnQgZG5fZmliX3J0bV9uZXdyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgdm9pZCAqYXJnKTsKK2V4dGVybiBpbnQgZG5fZmliX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKTsKKworZXh0ZXJuIGludCBkbl9maWJfcnRtX2RlbHJ1bGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsIHZvaWQgKmFyZyk7CitleHRlcm4gaW50IGRuX2ZpYl9ydG1fbmV3cnVsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgdm9pZCAqYXJnKTsKK2V4dGVybiBpbnQgZG5fZmliX2R1bXBfcnVsZXMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKTsKKworZXh0ZXJuIHZvaWQgZG5fZmliX2ZyZWVfaW5mbyhzdHJ1Y3QgZG5fZmliX2luZm8gKmZpKTsKKworc3RhdGljIGlubGluZSB2b2lkIGRuX2ZpYl9pbmZvX3B1dChzdHJ1Y3QgZG5fZmliX2luZm8gKmZpKQoreworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZmaS0+ZmliX2NsbnRyZWYpKQorCQlkbl9maWJfZnJlZV9pbmZvKGZpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRuX2ZpYl9yZXNfcHV0KHN0cnVjdCBkbl9maWJfcmVzICpyZXMpCit7CisJaWYgKHJlcy0+ZmkpCisJCWRuX2ZpYl9pbmZvX3B1dChyZXMtPmZpKTsKKwlpZiAocmVzLT5yKQorCQlkbl9maWJfcnVsZV9wdXQocmVzLT5yKTsKK30KKworZXh0ZXJuIHN0cnVjdCBkbl9maWJfdGFibGUgKmRuX2ZpYl90YWJsZXNbXTsKKworI2Vsc2UgLyogRW5kbm9kZSAqLworCisjZGVmaW5lIGRuX2ZpYl9pbml0KCkgIGRvIHsgfSB3aGlsZSgwKQorI2RlZmluZSBkbl9maWJfY2xlYW51cCgpIGRvIHsgfSB3aGlsZSgwKQorCisjZGVmaW5lIGRuX2ZpYl9sb29rdXAoZmwsIHJlcykgKC1FU1JDSCkKKyNkZWZpbmUgZG5fZmliX2luZm9fcHV0KGZpKSBkbyB7IH0gd2hpbGUoMCkKKyNkZWZpbmUgZG5fZmliX3NlbGVjdF9tdWx0aXBhdGgoZmwsIHJlcykgZG8geyB9IHdoaWxlKDApCisjZGVmaW5lIGRuX2ZpYl9ydWxlc19wb2xpY3koc2FkZHIscmVzLGZsYWdzKSAoMCkKKyNkZWZpbmUgZG5fZmliX3Jlc19wdXQocmVzKSBkbyB7IH0gd2hpbGUoMCkKKworI2VuZGlmIC8qIENPTkZJR19ERUNORVRfUk9VVEVSICovCisKK3N0YXRpYyBpbmxpbmUgdTE2IGRuZXRfbWFrZV9tYXNrKGludCBuKQoreworICAgICAgICBpZiAobikKKyAgICAgICAgICAgICAgICByZXR1cm4gaHRvbnMofigoMTw8KDE2LW4pKS0xKSk7CisgICAgICAgIHJldHVybiAwOworfQorCisjZW5kaWYgLyogX05FVF9ETl9GSUJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvZG5fbmVpZ2guaCBiL2luY2x1ZGUvbmV0L2RuX25laWdoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGIxZWIwMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L2RuX25laWdoLmgKQEAgLTAsMCArMSwyOCBAQAorI2lmbmRlZiBfTkVUX0ROX05FSUdIX0gKKyNkZWZpbmUgX05FVF9ETl9ORUlHSF9ICisKKy8qCisgKiBUaGUgcG9zaXRpb24gb2YgdGhlIGZpcnN0IHR3byBmaWVsZHMgb2YKKyAqIHRoaXMgc3RydWN0dXJlIGFyZSBjcml0aWNhbCAtIFNKVworICovCitzdHJ1Y3QgZG5fbmVpZ2ggeworICAgICAgICBzdHJ1Y3QgbmVpZ2hib3VyIG47CisJZG5fYWRkcmVzcyBhZGRyOworICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOworI2RlZmluZSBETl9OREZMQUdfUjEgICAgMHgwMDAxIC8qIFJvdXRlciBMMSAgICAgICovCisjZGVmaW5lIEROX05ERkxBR19SMiAgICAweDAwMDIgLyogUm91dGVyIEwyICAgICAgKi8KKyNkZWZpbmUgRE5fTkRGTEFHX1AzICAgIDB4MDAwNCAvKiBQaGFzZSBJSUkgTm9kZSAqLworICAgICAgICB1bnNpZ25lZCBsb25nIGJsa3NpemU7CisJdW5zaWduZWQgY2hhciBwcmlvcml0eTsKK307CisKK2V4dGVybiB2b2lkIGRuX25laWdoX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBkbl9uZWlnaF9jbGVhbnVwKHZvaWQpOworZXh0ZXJuIGludCBkbl9uZWlnaF9yb3V0ZXJfaGVsbG8oc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IGRuX25laWdoX2VuZG5vZGVfaGVsbG8oc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gdm9pZCBkbl9uZWlnaF9wb2ludG9wb2ludF9oZWxsbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQgZG5fbmVpZ2hfZWxpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgY2hhciAqcHRyLCBpbnQgbik7CisKK2V4dGVybiBzdHJ1Y3QgbmVpZ2hfdGFibGUgZG5fbmVpZ2hfdGFibGU7CisKKyNlbmRpZiAvKiBfTkVUX0ROX05FSUdIX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2RuX25zcC5oIGIvaW5jbHVkZS9uZXQvZG5fbnNwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJiZWFmYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L2RuX25zcC5oCkBAIC0wLDAgKzEsMjA5IEBACisjaWZuZGVmIF9ORVRfRE5fTlNQX0gKKyNkZWZpbmUgX05FVF9ETl9OU1BfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgIChjKSAxOTk1LTE5OTggRS5NLiBTZXJyYXQJCWVtc2VycmF0QGdlb2NpdGllcy5jb20KKyAgICAKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogZG5fbnNwLmMgZnVuY3Rpb25zIHByb3RvdHlwaW5nICovCisKK2V4dGVybiB2b2lkIGRuX25zcF9zZW5kX2RhdGFfYWNrKHN0cnVjdCBzb2NrICpzayk7CitleHRlcm4gdm9pZCBkbl9uc3Bfc2VuZF9vdGhfYWNrKHN0cnVjdCBzb2NrICpzayk7CitleHRlcm4gdm9pZCBkbl9uc3BfZGVsYXllZF9hY2soc3RydWN0IHNvY2sgKnNrKTsKK2V4dGVybiB2b2lkIGRuX3NlbmRfY29ubl9hY2soc3RydWN0IHNvY2sgKnNrKTsKK2V4dGVybiB2b2lkIGRuX3NlbmRfY29ubl9jb25mKHN0cnVjdCBzb2NrICpzaywgaW50IGdmcCk7CitleHRlcm4gdm9pZCBkbl9uc3Bfc2VuZF9kaXNjKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgY2hhciB0eXBlLCAKKwkJCQl1bnNpZ25lZCBzaG9ydCByZWFzb24sIGludCBnZnApOworZXh0ZXJuIHZvaWQgZG5fbnNwX3JldHVybl9kaXNjKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGNoYXIgdHlwZSwKKwkJCQl1bnNpZ25lZCBzaG9ydCByZWFzb24pOworZXh0ZXJuIHZvaWQgZG5fbnNwX3NlbmRfbGluayhzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGNoYXIgbHNmbGFncywgY2hhciBmY3ZhbCk7CitleHRlcm4gdm9pZCBkbl9uc3Bfc2VuZF9jb25uaW5pdChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGNoYXIgZmxhZ3MpOworCitleHRlcm4gdm9pZCBkbl9uc3Bfb3V0cHV0KHN0cnVjdCBzb2NrICpzayk7CitleHRlcm4gaW50IGRuX25zcF9jaGVja194bWl0X3F1ZXVlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqcSwgdW5zaWduZWQgc2hvcnQgYWNrbnVtKTsKK2V4dGVybiB2b2lkIGRuX25zcF9xdWV1ZV94bWl0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGdmcCwgaW50IG9vYik7CitleHRlcm4gdW5zaWduZWQgbG9uZyBkbl9uc3BfcGVyc2lzdChzdHJ1Y3Qgc29jayAqc2spOworZXh0ZXJuIGludCBkbl9uc3BfeG1pdF90aW1lb3V0KHN0cnVjdCBzb2NrICpzayk7CisKK2V4dGVybiBpbnQgZG5fbnNwX3J4KHN0cnVjdCBza19idWZmICopOworZXh0ZXJuIGludCBkbl9uc3BfYmFja2xvZ19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKworZXh0ZXJuIHN0cnVjdCBza19idWZmICpkbl9hbGxvY19za2Ioc3RydWN0IHNvY2sgKnNrLCBpbnQgc2l6ZSwgaW50IHByaSk7CitleHRlcm4gc3RydWN0IHNrX2J1ZmYgKmRuX2FsbG9jX3NlbmRfc2tiKHN0cnVjdCBzb2NrICpzaywgc2l6ZV90ICpzaXplLCBpbnQgbm9ibG9jaywgbG9uZyB0aW1lbywgaW50ICplcnIpOworCisjZGVmaW5lIE5TUF9SRUFTT05fT0sgMAkJLyogTm8gZXJyb3IgKi8KKyNkZWZpbmUgTlNQX1JFQVNPTl9OUiAxCQkvKiBObyByZXNvdXJjZXMgKi8KKyNkZWZpbmUgTlNQX1JFQVNPTl9VTiAyCQkvKiBVbnJlY29nbmlzZWQgbm9kZSBuYW1lICovCisjZGVmaW5lIE5TUF9SRUFTT05fU0QgMwkJLyogTm9kZSBzaHV0dGluZyBkb3duICovCisjZGVmaW5lIE5TUF9SRUFTT05fSUQgNAkJLyogSW52YWxpZCBkZXN0aW5hdGlvbiBlbmQgdXNlciAqLworI2RlZmluZSBOU1BfUkVBU09OX0VSIDUJCS8qIEVuZCB1c2VyIGxhY2tzIHJlc291cmNlcyAqLworI2RlZmluZSBOU1BfUkVBU09OX09CIDYJCS8qIE9iamVjdCB0b28gYnVzeSAqLworI2RlZmluZSBOU1BfUkVBU09OX1VTIDcJCS8qIFVuc3BlY2lmaWVkIGVycm9yICovCisjZGVmaW5lIE5TUF9SRUFTT05fVFAgOAkJLyogVGhpcmQtUGFydHkgYWJvcnQgKi8KKyNkZWZpbmUgTlNQX1JFQVNPTl9FQSA5CQkvKiBFbmQgdXNlciBoYXMgYWJvcnRlZCB0aGUgbGluayAqLworI2RlZmluZSBOU1BfUkVBU09OX0lGIDEwCS8qIEludmFsaWQgbm9kZSBuYW1lIGZvcm1hdCAqLworI2RlZmluZSBOU1BfUkVBU09OX0xTIDExCS8qIExvY2FsIG5vZGUgc2h1dGRvd24gKi8KKyNkZWZpbmUgTlNQX1JFQVNPTl9MTCAzMgkvKiBOb2RlIGxhY2tzIGxvZ2ljYWwtbGluayByZXNvdXJjZXMgKi8KKyNkZWZpbmUgTlNQX1JFQVNPTl9MRSAzMwkvKiBFbmQgdXNlciBsYWNrcyBsb2dpY2FsLWxpbmsgcmVzb3VyY2VzICovCisjZGVmaW5lIE5TUF9SRUFTT05fVVIgMzQJLyogVW5hY2NlcHRhYmxlIFJRU1RSSUQgb3IgUEFTU1dPUkQgZmllbGQgKi8KKyNkZWZpbmUgTlNQX1JFQVNPTl9VQSAzNgkvKiBVbmFjY2VwdGFibGUgQUNDT1VOVCBmaWVsZCAqLworI2RlZmluZSBOU1BfUkVBU09OX1RNIDM4CS8qIEVuZCB1c2VyIHRpbWVkIG91dCBsb2dpY2FsIGxpbmsgKi8KKyNkZWZpbmUgTlNQX1JFQVNPTl9OVSAzOQkvKiBOb2RlIHVucmVhY2hhYmxlICovCisjZGVmaW5lIE5TUF9SRUFTT05fTkwgNDEJLyogTm8tbGluayBtZXNzYWdlICovCisjZGVmaW5lIE5TUF9SRUFTT05fREMgNDIJLyogRGlzY29ubmVjdCBjb25maXJtICovCisjZGVmaW5lIE5TUF9SRUFTT05fSU8gNDMJLyogSW1hZ2UgZGF0YSBmaWVsZCBvdmVyZmxvdyAqLworCisjZGVmaW5lIE5TUF9ESVNDSU5JVCAweDM4CisjZGVmaW5lIE5TUF9ESVNDQ09ORiAweDQ4CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBOU1AgLSBtZXNzYWdlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogRGF0YSBNZXNzYWdlcyAqLworLyotLS0tLS0tLS0tLS0tLS0qLworCisvKiBEYXRhIE1lc3NhZ2VzICAgIChkYXRhIHNlZ21lbnQvaW50ZXJydXB0L2xpbmsgc2VydmljZSkgICAgICAgICAgICAgICAqLworCitzdHJ1Y3QgbnNwX2RhdGFfc2VnX21zZworeworCXVuc2lnbmVkIGNoYXIgICBtc2dmbGcgICAgICAgICAgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisJdW5zaWduZWQgc2hvcnQgIGRzdGFkZHIgICAgICAgICBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwl1bnNpZ25lZCBzaG9ydCAgc3JjYWRkciAgICAgICAgIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfTsKKworc3RydWN0IG5zcF9kYXRhX29wdF9tc2cKK3sKKwl1bnNpZ25lZCBzaG9ydCAgYWNrbnVtICAgICAgICAgIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCXVuc2lnbmVkIHNob3J0ICBzZWdudW0gICAgICAgICAgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisJdW5zaWduZWQgc2hvcnQgIGxzZmxncyAgICAgICAgICBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK307CisKK3N0cnVjdCBuc3BfZGF0YV9vcHRfbXNnMQoreworCXVuc2lnbmVkIHNob3J0ICBhY2tudW0gICAgICAgICAgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisJdW5zaWduZWQgc2hvcnQgIHNlZ251bSAgICAgICAgICBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK307CisKKworLyogQWNrbm93bGVkZ21lbnQgTWVzc2FnZSAoZGF0YS9vdGhlciBkYXRhKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KK3N0cnVjdCBuc3BfZGF0YV9hY2tfbXNnCit7CisJdW5zaWduZWQgY2hhciAgIG1zZ2ZsZyAgICAgICAgICBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwl1bnNpZ25lZCBzaG9ydCAgZHN0YWRkciAgICAgICAgIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCXVuc2lnbmVkIHNob3J0ICBzcmNhZGRyICAgICAgICAgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisJdW5zaWduZWQgc2hvcnQgIGFja251bSAgICAgICAgICBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK307CisKKy8qIENvbm5lY3QgQWNrbm93bGVkZ21lbnQgTWVzc2FnZSAqLworc3RydWN0ICBuc3BfY29ubl9hY2tfbXNnCit7CisJdW5zaWduZWQgY2hhciAgIG1zZ2ZsZyAgICAgICAgICBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwl1bnNpZ25lZCBzaG9ydCAgZHN0YWRkciAgICAgICAgIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfTsKKworCisvKiBDb25uZWN0IEluaXRpYXRlL1JldHJhbnNtaXQgSW5pdGlhdGUvQ29ubmVjdCBDb25maXJtICovCitzdHJ1Y3QgIG5zcF9jb25uX2luaXRfbXNnCit7CisJdW5zaWduZWQgY2hhciAgIG1zZ2ZsZyAgICAgICAgICBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKyNkZWZpbmUgTlNQX0NJICAgICAgMHgxOCAgICAgICAgICAgIC8qIENvbm5lY3QgSW5pdGlhdGUgICAgICovCisjZGVmaW5lIE5TUF9SQ0kgICAgIDB4NjggICAgICAgICAgICAvKiBSZXRyYW5zLiBDb25uIEluaXQgICAqLworCXVuc2lnbmVkIHNob3J0ICBkc3RhZGRyICAgICAgICAgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisgICAgICAgIHVuc2lnbmVkIHNob3J0ICBzcmNhZGRyICAgICAgICAgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgICBzZXJ2aWNlcyAgICAgICAgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisjZGVmaW5lIE5TUF9GQ19OT05FICAgMHgwMCAgICAgICAgICAgIC8qIEZsb3cgQ29udHJvbCBOb25lICAgICovCisjZGVmaW5lIE5TUF9GQ19TUkMgICAgMHgwNCAgICAgICAgICAgIC8qIFNlZyBSZXEuIENvdW50ICAgICAgICovCisjZGVmaW5lIE5TUF9GQ19TQ01DICAgMHgwOCAgICAgICAgICAgIC8qIFNlc3MuIENvbnRyb2wgTWVzcyAgICovCisjZGVmaW5lIE5TUF9GQ19NQVNLICAgMHgwYyAgICAgICAgICAgIC8qIEZDIHR5cGUgbWFzayAgICAgICAgICovCisJdW5zaWduZWQgY2hhciAgIGluZm8gICAgICAgICAgICBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKyAgICAgICAgdW5zaWduZWQgc2hvcnQgIHNlZ3NpemUgICAgICAgICBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK307CisKKy8qIERpc2Nvbm5lY3QgSW5pdGlhdGUvRGlzY29ubmVjdCBDb25maXJtICovCitzdHJ1Y3QgIG5zcF9kaXNjb25uX2luaXRfbXNnCit7CisJdW5zaWduZWQgY2hhciAgIG1zZ2ZsZyAgICAgICAgICBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKyAgICAgICAgdW5zaWduZWQgc2hvcnQgIGRzdGFkZHIgICAgICAgICBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKyAgICAgICAgdW5zaWduZWQgc2hvcnQgIHNyY2FkZHIgICAgICAgICBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKyAgICAgICAgdW5zaWduZWQgc2hvcnQgIHJlYXNvbiAgICAgICAgICBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK307CisKKworCitzdHJ1Y3QgIHNyY29ial9mbXQKK3sKKwljaGFyICAgICAgICAgICAgZm9ybWF0ICAgICAgICAgIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworICAgICAgICB1bnNpZ25lZCBjaGFyICAgdGFzayAgICAgICAgICAgIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworICAgICAgICB1bnNpZ25lZCBzaG9ydCAgZ3JwY29kZSAgICAgICAgIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworICAgICAgICB1bnNpZ25lZCBzaG9ydCAgdXNyY29kZSAgICAgICAgIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworICAgICAgICBjaGFyICAgICAgICAgICAgZGxlbiAgICAgICAgICAgIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfTsKKworLyoKKyAqIEEgY29sbGVjdGlvbiBvZiBmdW5jdGlvbnMgZm9yIG1hbmlwdWxhdGluZyB0aGUgc2VxdWVuY2UKKyAqIG51bWJlcnMgdXNlZCBpbiBOU1AuIFNpbWlsYXIgaW4gb3BlcmF0aW9uIHRvIHRoZSBmdW5jdGlvbnMKKyAqIG9mIHRoZSBzYW1lIG5hbWUgaW4gVENQLgorICovCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgZG5fYmVmb3JlKHVuc2lnbmVkIHNob3J0IHNlcTEsIHVuc2lnbmVkIHNob3J0IHNlcTIpCit7CisgICAgICAgIHNlcTEgJj0gMHgwZmZmOworICAgICAgICBzZXEyICY9IDB4MGZmZjsKKworICAgICAgICByZXR1cm4gKGludCkoKHNlcTEgLSBzZXEyKSAmIDB4MGZmZikgPiAyMDQ4OworfQorCisKK3N0YXRpYyBfX2lubGluZV9fIGludCBkbl9hZnRlcih1bnNpZ25lZCBzaG9ydCBzZXExLCB1bnNpZ25lZCBzaG9ydCBzZXEyKQoreworICAgICAgICBzZXExICY9IDB4MGZmZjsKKyAgICAgICAgc2VxMiAmPSAweDBmZmY7CisKKyAgICAgICAgcmV0dXJuIChpbnQpKChzZXEyIC0gc2VxMSkgJiAweDBmZmYpID4gMjA0ODsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IGRuX2VxdWFsKHVuc2lnbmVkIHNob3J0IHNlcTEsIHVuc2lnbmVkIHNob3J0IHNlcTIpCit7CisgICAgICAgIHJldHVybiAoKHNlcTEgXiBzZXEyKSAmIDB4MGZmZikgPT0gMDsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IGRuX2JlZm9yZV9vcl9lcXVhbCh1bnNpZ25lZCBzaG9ydCBzZXExLCB1bnNpZ25lZCBzaG9ydCBzZXEyKQoreworCXJldHVybiAoZG5fYmVmb3JlKHNlcTEsIHNlcTIpIHx8IGRuX2VxdWFsKHNlcTEsIHNlcTIpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBzZXFfYWRkKHVuc2lnbmVkIHNob3J0ICpzZXEsIHVuc2lnbmVkIHNob3J0IG9mZikKK3sKKyAgICAgICAgKCpzZXEpICs9IG9mZjsKKyAgICAgICAgKCpzZXEpICY9IDB4MGZmZjsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IHNlcV9uZXh0KHVuc2lnbmVkIHNob3J0IHNlcTEsIHVuc2lnbmVkIHNob3J0IHNlcTIpCit7CisJcmV0dXJuIGRuX2VxdWFsKHNlcTEgKyAxLCBzZXEyKTsKK30KKworLyoKKyAqIENhbiB3ZSBkZWxheSB0aGUgYWNrID8KKyAqLworc3RhdGljIF9faW5saW5lX18gaW50IHNlbmRhY2sodW5zaWduZWQgc2hvcnQgc2VxKQoreworICAgICAgICByZXR1cm4gKGludCkoKHNlcSAmIDB4MTAwMCkgPyAwIDogMSk7Cit9CisKKy8qCisgKiBJcyBzb2NrZXQgY29uZ2VzdGVkID8KKyAqLworc3RhdGljIF9faW5saW5lX18gaW50IGRuX2Nvbmdlc3RlZChzdHJ1Y3Qgc29jayAqc2spCit7CisgICAgICAgIHJldHVybiBhdG9taWNfcmVhZCgmc2stPnNrX3JtZW1fYWxsb2MpID4gKHNrLT5za19yY3ZidWYgPj4gMSk7Cit9CisKKyNkZWZpbmUgRE5fTUFYX05TUF9EQVRBX0hFQURFUiAoMTEpCisKKyNlbmRpZiAvKiBfTkVUX0ROX05TUF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9kbl9yb3V0ZS5oIGIvaW5jbHVkZS9uZXQvZG5fcm91dGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDg0NzIxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQvZG5fcm91dGUuaApAQCAtMCwwICsxLDExMiBAQAorI2lmbmRlZiBfTkVUX0ROX1JPVVRFX0gKKyNkZWZpbmUgX05FVF9ETl9ST1VURV9ICisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAoYykgMTk5NS0xOTk4IEUuTS4gU2VycmF0CQllbXNlcnJhdEBnZW9jaXRpZXMuY29tCisgICAgCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworZXh0ZXJuIHN0cnVjdCBza19idWZmICpkbl9hbGxvY19za2Ioc3RydWN0IHNvY2sgKnNrLCBpbnQgc2l6ZSwgaW50IHByaSk7CitleHRlcm4gaW50IGRuX3JvdXRlX291dHB1dF9zb2NrKHN0cnVjdCBkc3RfZW50cnkgKipwcHJ0LCBzdHJ1Y3QgZmxvd2kgKiwgc3RydWN0IHNvY2sgKnNrLCBpbnQgZmxhZ3MpOworZXh0ZXJuIGludCBkbl9jYWNoZV9kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7CitleHRlcm4gaW50IGRuX2NhY2hlX2dldHJvdXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLCB2b2lkICphcmcpOworZXh0ZXJuIHZvaWQgZG5fcnRfY2FjaGVfZmx1c2goaW50IGRlbGF5KTsKKworLyogTWFza3MgZm9yIGZsYWdzIGZpZWxkICovCisjZGVmaW5lIEROX1JUX0ZfUElEIDB4MDcgLyogTWFzayBmb3IgcGFja2V0IHR5cGUgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE5fUlRfRl9QRiAgMHg4MCAvKiBQYWRkaW5nIEZvbGxvd3MgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETl9SVF9GX1ZFUiAweDQwIC8qIFZlcnNpb24gPTAgZGlzY2FyZCBwYWNrZXQgaWYgPT0xICAgICAgICAgICovCisjZGVmaW5lIEROX1JUX0ZfSUUgIDB4MjAgLyogSW50cmEgRXRoZXJuZXQsIFJlc2VydmVkIGluIHNob3J0IHBrdCAgICAgKi8KKyNkZWZpbmUgRE5fUlRfRl9SVFMgMHgxMCAvKiBQYWNrZXQgaXMgYmVpbmcgcmV0dXJuZWQgdG8gc2VuZGVyICAgICAgICAqLworI2RlZmluZSBETl9SVF9GX1JRUiAweDA4IC8qIFJldHVybiBwYWNrZXQgdG8gc2VuZGVyIHVwb24gbm9uLWRlbGl2ZXJ5ICovCisKKy8qIE1hc2sgZm9yIHR5cGVzIG9mIHJvdXRpbmcgcGFja2V0cyAqLworI2RlZmluZSBETl9SVF9QS1RfTVNLICAgMHgwNgorLyogVHlwZXMgb2Ygcm91dGluZyBwYWNrZXRzICovCisjZGVmaW5lIEROX1JUX1BLVF9TSE9SVCAweDAyIC8qIFNob3J0IHJvdXRpbmcgcGFja2V0ICovCisjZGVmaW5lIEROX1JUX1BLVF9MT05HICAweDA2IC8qIExvbmcgcm91dGluZyBwYWNrZXQgICovCisKKy8qIE1hc2sgZm9yIGNvbnRyb2wvcm91dGluZyBzZWxlY3Rpb24gKi8KKyNkZWZpbmUgRE5fUlRfUEtUX0NOVEwgIDB4MDEgLyogU2V0IHRvIDEgaWYgYSBjb250cm9sIHBhY2tldCAgKi8KKy8qIFR5cGVzIG9mIGNvbnRyb2wgcGFja2V0cyAqLworI2RlZmluZSBETl9SVF9DTlRMX01TSyAgMHgwZiAvKiBNYXNrIGZvciBjb250cm9sIHBhY2tldHMgICAgICAqLworI2RlZmluZSBETl9SVF9QS1RfSU5JVCAgMHgwMSAvKiBJbml0aWFsaXNhdGlvbiBwYWNrZXQgICAgICAgICAqLworI2RlZmluZSBETl9SVF9QS1RfVkVSSSAgMHgwMyAvKiBWZXJpZmljYXRpb24gTWVzc2FnZSAgICAgICAgICAqLworI2RlZmluZSBETl9SVF9QS1RfSEVMTyAgMHgwNSAvKiBIZWxsbyBhbmQgVGVzdCBNZXNzYWdlICAgICAgICAqLworI2RlZmluZSBETl9SVF9QS1RfTDFSVCAgMHgwNyAvKiBMZXZlbCAxIFJvdXRpbmcgTWVzc2FnZSAgICAgICAqLworI2RlZmluZSBETl9SVF9QS1RfTDJSVCAgMHgwOSAvKiBMZXZlbCAyIFJvdXRpbmcgTWVzc2FnZSAgICAgICAqLworI2RlZmluZSBETl9SVF9QS1RfRVJUSCAgMHgwYiAvKiBFdGhlcm5ldCBSb3V0ZXIgSGVsbG8gICAgICAgICAqLworI2RlZmluZSBETl9SVF9QS1RfRUVESCAgMHgwZCAvKiBFdGhlcm5ldCBFbmROb2RlIEhlbGxvICAgICAgICAqLworCisvKiBWYWx1ZXMgZm9yIGluZm8gZmllbGQgaW4gaGVsbG8gbWVzc2FnZSAqLworI2RlZmluZSBETl9SVF9JTkZPX1RZUEUgMHgwMyAvKiBUeXBlIG1hc2sgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETl9SVF9JTkZPX0wxUlQgMHgwMiAvKiBMMSBSb3V0ZXIgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETl9SVF9JTkZPX0wyUlQgMHgwMSAvKiBMMiBSb3V0ZXIgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETl9SVF9JTkZPX0VORE4gMHgwMyAvKiBFbmROb2RlICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETl9SVF9JTkZPX1ZFUkkgMHgwNCAvKiBWZXJpZmljYXRpb24gUmVxZC4gICAgICAgICAgICAqLworI2RlZmluZSBETl9SVF9JTkZPX1JKQ1QgMHgwOCAvKiBSZWplY3QgRmxhZywgUmVzZXJ2ZWQgICAgICAgICAqLworI2RlZmluZSBETl9SVF9JTkZPX1ZGTEQgMHgxMCAvKiBWZXJpZmljYXRpb24gRmFpbGVkLCBSZXNlcnZlZCAqLworI2RlZmluZSBETl9SVF9JTkZPX05PTUwgMHgyMCAvKiBObyBNdWx0aWNhc3QgdHJhZmZpYyBhY2NlcHRlZCAqLworI2RlZmluZSBETl9SVF9JTkZPX0JMS1IgMHg0MCAvKiBCbG9ja2luZyBSZXF1ZXN0ZWQgICAgICAgICAgICAqLworCisvKgorICogVGhlIGZsIHN0cnVjdHVyZSBpcyB3aGF0IHdlIHVzZWQgdG8gbG9vayB1cCB0aGUgcm91dGUuCisgKiBUaGUgcnRfc2FkZHIgJiBydF9kYWRkciBlbnRyaWVzIGFyZSB0aGUgc2FtZSBhcyBrZXkuc2FkZHIgJiBrZXkuZGFkZHIKKyAqIGV4Y2VwdCBmb3IgbG9jYWwgaW5wdXQgcm91dGVzLCB3aGVyZSB0aGUgcnRfc2FkZHIgPSBmbC5mbGRfZHN0IGFuZAorICogcnRfZGFkZHIgPSBmbC5mbGRfc3JjIHRvIGFsbG93IHRoZSByb3V0ZSB0byBiZSB1c2VkIGZvciByZXR1cm5pbmcKKyAqIHBhY2tldHMgdG8gdGhlIG9yaWdpbmF0aW5nIGhvc3QuCisgKi8KK3N0cnVjdCBkbl9yb3V0ZSB7CisJdW5pb24geworCQlzdHJ1Y3QgZHN0X2VudHJ5IGRzdDsKKwkJc3RydWN0IGRuX3JvdXRlICpydF9uZXh0OworCX0gdTsKKworCV9fdTE2IHJ0X3NhZGRyOworCV9fdTE2IHJ0X2RhZGRyOworCV9fdTE2IHJ0X2dhdGV3YXk7CisJX191MTYgcnRfbG9jYWxfc3JjOwkvKiBTb3VyY2UgdXNlZCBmb3IgZm9yd2FyZGluZyBwYWNrZXRzICovCisJX191MTYgcnRfc3JjX21hcDsKKwlfX3UxNiBydF9kc3RfbWFwOworCisJdW5zaWduZWQgcnRfZmxhZ3M7CisJdW5zaWduZWQgcnRfdHlwZTsKKworCXN0cnVjdCBmbG93aSBmbDsKK307CisKK2V4dGVybiB2b2lkIGRuX3JvdXRlX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBkbl9yb3V0ZV9jbGVhbnVwKHZvaWQpOworCisjaW5jbHVkZSA8bmV0L3NvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKworc3RhdGljIGlubGluZSB2b2lkIGRuX3J0X3NlbmQoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlkZXZfcXVldWVfeG1pdChza2IpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZG5fcnRfZmluaXNoX291dHB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjaGFyICpkc3QsIGNoYXIgKnNyYykKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiLT5kZXY7CisKKwlpZiAoKGRldi0+dHlwZSAhPSBBUlBIUkRfRVRIRVIpICYmIChkZXYtPnR5cGUgIT0gQVJQSFJEX0xPT1BCQUNLKSkKKwkJZHN0ID0gTlVMTDsKKworCWlmICghZGV2LT5oYXJkX2hlYWRlciB8fCAoZGV2LT5oYXJkX2hlYWRlcihza2IsIGRldiwgRVRIX1BfRE5BX1JULAorCQkJZHN0LCBzcmMsIHNrYi0+bGVuKSA+PSAwKSkKKwkJZG5fcnRfc2VuZChza2IpOworCWVsc2UKKwkJa2ZyZWVfc2tiKHNrYik7Cit9CisKKyNlbmRpZiAvKiBfTkVUX0ROX1JPVVRFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2RzZmllbGQuaCBiL2luY2x1ZGUvbmV0L2RzZmllbGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzljOWUwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQvZHNmaWVsZC5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qIGluY2x1ZGUvbmV0L2RzZmllbGQuaCAtIE1hbmlwdWxhdGlvbiBvZiB0aGUgRGlmZmVyZW50aWF0ZWQgU2VydmljZXMgZmllbGQgKi8KKworLyogV3JpdHRlbiAxOTk4LTIwMDAgYnkgV2VybmVyIEFsbWVzYmVyZ2VyLCBFUEZMIElDQSAqLworCisKKyNpZm5kZWYgX19ORVRfRFNGSUVMRF9ICisjZGVmaW5lIF9fTkVUX0RTRklFTERfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pcC5oPgorI2luY2x1ZGUgPGxpbnV4L2lwdjYuaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisKKworc3RhdGljIGlubGluZSBfX3U4IGlwdjRfZ2V0X2RzZmllbGQoc3RydWN0IGlwaGRyICppcGgpCit7CisJcmV0dXJuIGlwaC0+dG9zOworfQorCisKK3N0YXRpYyBpbmxpbmUgX191OCBpcHY2X2dldF9kc2ZpZWxkKHN0cnVjdCBpcHY2aGRyICppcHY2aCkKK3sKKwlyZXR1cm4gbnRvaHMoKihfX3UxNiAqKSBpcHY2aCkgPj4gNDsKK30KKworCitzdGF0aWMgaW5saW5lIHZvaWQgaXB2NF9jaGFuZ2VfZHNmaWVsZChzdHJ1Y3QgaXBoZHIgKmlwaCxfX3U4IG1hc2ssCisgICAgX191OCB2YWx1ZSkKK3sKKyAgICAgICAgX191MzIgY2hlY2sgPSBudG9ocyhpcGgtPmNoZWNrKTsKKwlfX3U4IGRzZmllbGQ7CisKKwlkc2ZpZWxkID0gKGlwaC0+dG9zICYgbWFzaykgfCB2YWx1ZTsKKwljaGVjayArPSBpcGgtPnRvczsKKwlpZiAoKGNoZWNrKzEpID4+IDE2KSBjaGVjayA9IChjaGVjaysxKSAmIDB4ZmZmZjsKKwljaGVjayAtPSBkc2ZpZWxkOworCWNoZWNrICs9IGNoZWNrID4+IDE2OyAvKiBhZGp1c3QgY2FycnkgKi8KKwlpcGgtPmNoZWNrID0gaHRvbnMoY2hlY2spOworCWlwaC0+dG9zID0gZHNmaWVsZDsKK30KKworCitzdGF0aWMgaW5saW5lIHZvaWQgaXB2Nl9jaGFuZ2VfZHNmaWVsZChzdHJ1Y3QgaXB2NmhkciAqaXB2NmgsX191OCBtYXNrLAorICAgIF9fdTggdmFsdWUpCit7CisgICAgICAgIF9fdTE2IHRtcDsKKworCXRtcCA9IG50b2hzKCooX191MTYgKikgaXB2NmgpOworCXRtcCA9ICh0bXAgJiAoKG1hc2sgPDwgNCkgfCAweGYwMGYpKSB8ICh2YWx1ZSA8PCA0KTsKKwkqKF9fdTE2ICopIGlwdjZoID0gaHRvbnModG1wKTsKK30KKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2RzdC5oIGIvaW5jbHVkZS9uZXQvZHN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBhZGM5MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L2RzdC5oCkBAIC0wLDAgKzEsMjc5IEBACisvKgorICogbmV0L2RzdC5oCVByb3RvY29sIGluZGVwZW5kZW50IGRlc3RpbmF0aW9uIGNhY2hlIGRlZmluaXRpb25zLgorICoKKyAqIEF1dGhvcnM6CUFsZXhleSBLdXpuZXRzb3YsIDxrdXpuZXRAbXMyLmluci5hYy5ydT4KKyAqCisgKi8KKworI2lmbmRlZiBfTkVUX0RTVF9ICisjZGVmaW5lIF9ORVRfRFNUX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgorI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgorI2luY2x1ZGUgPG5ldC9uZWlnaGJvdXIuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisKKy8qCisgKiAwIC0gbm8gZGVidWdnaW5nIG1lc3NhZ2VzCisgKiAxIC0gcmFyZSBldmVudHMgYW5kIGJ1Z3MgKGRlZmF1bHQpCisgKiAyIC0gdHJhY2UgbW9kZS4KKyAqLworI2RlZmluZSBSVF9DQUNIRV9ERUJVRwkJMAorCisjZGVmaW5lIERTVF9HQ19NSU4JKEhaLzEwKQorI2RlZmluZSBEU1RfR0NfSU5DCShIWi8yKQorI2RlZmluZSBEU1RfR0NfTUFYCSgxMjAqSFopCisKKy8qIEVhY2ggZHN0X2VudHJ5IGhhcyByZWZlcmVuY2UgY291bnQgYW5kIHNpdHMgaW4gc29tZSBwYXJlbnQgbGlzdChzKS4KKyAqIFdoZW4gaXQgaXMgcmVtb3ZlZCBmcm9tIHBhcmVudCBsaXN0LCBpdCBpcyAiZnJlZWQiIChkc3RfZnJlZSkuCisgKiBBZnRlciB0aGlzIGl0IGVudGVycyBkZWFkIHN0YXRlIChkc3QtPm9ic29sZXRlID4gMCkgYW5kIGlmIGl0cyByZWZjbnQKKyAqIGlzIHplcm8sIGl0IGNhbiBiZSBkZXN0cm95ZWQgaW1tZWRpYXRlbHksIG90aGVyd2lzZSBpdCBpcyBhZGRlZAorICogdG8gZ2MgbGlzdCBhbmQgZ2FyYmFnZSBjb2xsZWN0b3IgcGVyaW9kaWNhbGx5IGNoZWNrcyB0aGUgcmVmY250LgorICovCisKK3N0cnVjdCBza19idWZmOworCitzdHJ1Y3QgZHN0X2VudHJ5Cit7CisJc3RydWN0IGRzdF9lbnRyeSAgICAgICAgKm5leHQ7CisJYXRvbWljX3QJCV9fcmVmY250OwkvKiBjbGllbnQgcmVmZXJlbmNlcwkqLworCWludAkJCV9fdXNlOworCXN0cnVjdCBkc3RfZW50cnkJKmNoaWxkOworCXN0cnVjdCBuZXRfZGV2aWNlICAgICAgICpkZXY7CisJaW50CQkJb2Jzb2xldGU7CisJaW50CQkJZmxhZ3M7CisjZGVmaW5lIERTVF9IT1NUCQkxCisjZGVmaW5lIERTVF9OT1hGUk0JCTIKKyNkZWZpbmUgRFNUX05PUE9MSUNZCQk0CisjZGVmaW5lIERTVF9OT0hBU0gJCTgKKyNkZWZpbmUgRFNUX0JBTEFOQ0VEICAgICAgICAgICAgMHgxMAorCXVuc2lnbmVkIGxvbmcJCWxhc3R1c2U7CisJdW5zaWduZWQgbG9uZwkJZXhwaXJlczsKKworCXVuc2lnbmVkIHNob3J0CQloZWFkZXJfbGVuOwkvKiBtb3JlIHNwYWNlIGF0IGhlYWQgcmVxdWlyZWQgKi8KKwl1bnNpZ25lZCBzaG9ydAkJdHJhaWxlcl9sZW47CS8qIHNwYWNlIHRvIHJlc2VydmUgYXQgdGFpbCAqLworCisJdTMyCQkJbWV0cmljc1tSVEFYX01BWF07CisJc3RydWN0IGRzdF9lbnRyeQkqcGF0aDsKKworCXVuc2lnbmVkIGxvbmcJCXJhdGVfbGFzdDsJLyogcmF0ZSBsaW1pdGluZyBmb3IgSUNNUCAqLworCXVuc2lnbmVkIGxvbmcJCXJhdGVfdG9rZW5zOworCisJaW50CQkJZXJyb3I7CisKKwlzdHJ1Y3QgbmVpZ2hib3VyCSpuZWlnaGJvdXI7CisJc3RydWN0IGhoX2NhY2hlCQkqaGg7CisJc3RydWN0IHhmcm1fc3RhdGUJKnhmcm07CisKKwlpbnQJCQkoKmlucHV0KShzdHJ1Y3Qgc2tfYnVmZiopOworCWludAkJCSgqb3V0cHV0KShzdHJ1Y3Qgc2tfYnVmZiopOworCisjaWZkZWYgQ09ORklHX05FVF9DTFNfUk9VVEUKKwlfX3UzMgkJCXRjbGFzc2lkOworI2VuZGlmCisKKwlzdHJ1Y3QgIGRzdF9vcHMJICAgICAgICAqb3BzOworCXN0cnVjdCByY3VfaGVhZAkJcmN1X2hlYWQ7CisJCQorCWNoYXIJCQlpbmZvWzBdOworfTsKKworCitzdHJ1Y3QgZHN0X29wcworeworCXVuc2lnbmVkIHNob3J0CQlmYW1pbHk7CisJdW5zaWduZWQgc2hvcnQJCXByb3RvY29sOworCXVuc2lnbmVkCQlnY190aHJlc2g7CisKKwlpbnQJCQkoKmdjKSh2b2lkKTsKKwlzdHJ1Y3QgZHN0X2VudHJ5ICoJKCpjaGVjaykoc3RydWN0IGRzdF9lbnRyeSAqLCBfX3UzMiBjb29raWUpOworCXZvaWQJCQkoKmRlc3Ryb3kpKHN0cnVjdCBkc3RfZW50cnkgKik7CisJdm9pZAkJCSgqaWZkb3duKShzdHJ1Y3QgZHN0X2VudHJ5ICosCisJCQkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGhvdyk7CisJc3RydWN0IGRzdF9lbnRyeSAqCSgqbmVnYXRpdmVfYWR2aWNlKShzdHJ1Y3QgZHN0X2VudHJ5ICopOworCXZvaWQJCQkoKmxpbmtfZmFpbHVyZSkoc3RydWN0IHNrX2J1ZmYgKik7CisJdm9pZAkJCSgqdXBkYXRlX3BtdHUpKHN0cnVjdCBkc3RfZW50cnkgKmRzdCwgdTMyIG10dSk7CisJaW50CQkJKCpnZXRfbXNzKShzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsIHUzMiBtdHUpOworCWludAkJCWVudHJ5X3NpemU7CisKKwlhdG9taWNfdAkJZW50cmllczsKKwlrbWVtX2NhY2hlX3QgCQkqa21lbV9jYWNoZXA7Cit9OworCisjaWZkZWYgX19LRVJORUxfXworCitzdGF0aWMgaW5saW5lIHUzMgorZHN0X21ldHJpYyhjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsIGludCBtZXRyaWMpCit7CisJcmV0dXJuIGRzdC0+bWV0cmljc1ttZXRyaWMtMV07Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGRzdF9tdHUoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KQoreworCXUzMiBtdHUgPSBkc3RfbWV0cmljKGRzdCwgUlRBWF9NVFUpOworCS8qCisJICogQWxleGV5IHB1dCBpdCBoZXJlLCBzbyBhc2sgaGltIGFib3V0IGl0IDopCisJICovCisJYmFycmllcigpOworCXJldHVybiBtdHU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyCitkc3RfYWxsZnJhZyhjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpCit7CisJaW50IHJldCA9IGRzdF9tZXRyaWMoZHN0LCBSVEFYX0ZFQVRVUkVTKSAmIFJUQVhfRkVBVFVSRV9BTExGUkFHOworCS8qIFllcywgX2V4YWN0bHlfLiBUaGlzIGlzIHBhcmFub2lhLiAqLworCWJhcnJpZXIoKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIGludAorZHN0X21ldHJpY19sb2NrZWQoc3RydWN0IGRzdF9lbnRyeSAqZHN0LCBpbnQgbWV0cmljKQoreworCXJldHVybiBkc3RfbWV0cmljKGRzdCwgUlRBWF9MT0NLKSAmICgxPDxtZXRyaWMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZHN0X2hvbGQoc3RydWN0IGRzdF9lbnRyeSAqIGRzdCkKK3sKKwlhdG9taWNfaW5jKCZkc3QtPl9fcmVmY250KTsKK30KKworc3RhdGljIGlubGluZQorc3RydWN0IGRzdF9lbnRyeSAqIGRzdF9jbG9uZShzdHJ1Y3QgZHN0X2VudHJ5ICogZHN0KQoreworCWlmIChkc3QpCisJCWF0b21pY19pbmMoJmRzdC0+X19yZWZjbnQpOworCXJldHVybiBkc3Q7Cit9CisKK3N0YXRpYyBpbmxpbmUKK3ZvaWQgZHN0X3JlbGVhc2Uoc3RydWN0IGRzdF9lbnRyeSAqIGRzdCkKK3sKKwlpZiAoZHN0KSB7CisJCVdBUk5fT04oYXRvbWljX3JlYWQoJmRzdC0+X19yZWZjbnQpIDwgMSk7CisJCXNtcF9tYl9fYmVmb3JlX2F0b21pY19kZWMoKTsKKwkJYXRvbWljX2RlYygmZHN0LT5fX3JlZmNudCk7CisJfQorfQorCisvKiBDaGlsZHJlbiBkZWZpbmUgdGhlIHBhdGggb2YgdGhlIHBhY2tldCB0aHJvdWdoIHRoZQorICogTGludXggbmV0d29ya2luZy4gIFRodXMsIGRlc3RpbmF0aW9ucyBhcmUgc3RhY2thYmxlLgorICovCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGRzdF9lbnRyeSAqZHN0X3BvcChzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpCit7CisJc3RydWN0IGRzdF9lbnRyeSAqY2hpbGQgPSBkc3RfY2xvbmUoZHN0LT5jaGlsZCk7CisKKwlkc3RfcmVsZWFzZShkc3QpOworCXJldHVybiBjaGlsZDsKK30KKworZXh0ZXJuIHZvaWQgKiBkc3RfYWxsb2Moc3RydWN0IGRzdF9vcHMgKiBvcHMpOworZXh0ZXJuIHZvaWQgX19kc3RfZnJlZShzdHJ1Y3QgZHN0X2VudHJ5ICogZHN0KTsKK2V4dGVybiBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3RfZGVzdHJveShzdHJ1Y3QgZHN0X2VudHJ5ICogZHN0KTsKKworc3RhdGljIGlubGluZSB2b2lkIGRzdF9mcmVlKHN0cnVjdCBkc3RfZW50cnkgKiBkc3QpCit7CisJaWYgKGRzdC0+b2Jzb2xldGUgPiAxKQorCQlyZXR1cm47CisJaWYgKCFhdG9taWNfcmVhZCgmZHN0LT5fX3JlZmNudCkpIHsKKwkJZHN0ID0gZHN0X2Rlc3Ryb3koZHN0KTsKKwkJaWYgKCFkc3QpCisJCQlyZXR1cm47CisJfQorCV9fZHN0X2ZyZWUoZHN0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRzdF9yY3VfZnJlZShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCit7CisJc3RydWN0IGRzdF9lbnRyeSAqZHN0ID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBkc3RfZW50cnksIHJjdV9oZWFkKTsKKwlkc3RfZnJlZShkc3QpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZHN0X2NvbmZpcm0oc3RydWN0IGRzdF9lbnRyeSAqZHN0KQoreworCWlmIChkc3QpCisJCW5laWdoX2NvbmZpcm0oZHN0LT5uZWlnaGJvdXIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZHN0X25lZ2F0aXZlX2FkdmljZShzdHJ1Y3QgZHN0X2VudHJ5ICoqZHN0X3ApCit7CisJc3RydWN0IGRzdF9lbnRyeSAqIGRzdCA9ICpkc3RfcDsKKwlpZiAoZHN0ICYmIGRzdC0+b3BzLT5uZWdhdGl2ZV9hZHZpY2UpCisJCSpkc3RfcCA9IGRzdC0+b3BzLT5uZWdhdGl2ZV9hZHZpY2UoZHN0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRzdF9saW5rX2ZhaWx1cmUoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgZHN0X2VudHJ5ICogZHN0ID0gc2tiLT5kc3Q7CisJaWYgKGRzdCAmJiBkc3QtPm9wcyAmJiBkc3QtPm9wcy0+bGlua19mYWlsdXJlKQorCQlkc3QtPm9wcy0+bGlua19mYWlsdXJlKHNrYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkc3Rfc2V0X2V4cGlyZXMoc3RydWN0IGRzdF9lbnRyeSAqZHN0LCBpbnQgdGltZW91dCkKK3sKKwl1bnNpZ25lZCBsb25nIGV4cGlyZXMgPSBqaWZmaWVzICsgdGltZW91dDsKKworCWlmIChleHBpcmVzID09IDApCisJCWV4cGlyZXMgPSAxOworCisJaWYgKGRzdC0+ZXhwaXJlcyA9PSAwIHx8IHRpbWVfYmVmb3JlKGV4cGlyZXMsIGRzdC0+ZXhwaXJlcykpCisJCWRzdC0+ZXhwaXJlcyA9IGV4cGlyZXM7Cit9CisKKy8qIE91dHB1dCBwYWNrZXQgdG8gbmV0d29yayBmcm9tIHRyYW5zcG9ydC4gICovCitzdGF0aWMgaW5saW5lIGludCBkc3Rfb3V0cHV0KHN0cnVjdCBza19idWZmICpza2IpCit7CisJaW50IGVycjsKKworCWZvciAoOzspIHsKKwkJZXJyID0gc2tiLT5kc3QtPm91dHB1dChza2IpOworCisJCWlmIChsaWtlbHkoZXJyID09IDApKQorCQkJcmV0dXJuIGVycjsKKwkJaWYgKHVubGlrZWx5KGVyciAhPSBORVRfWE1JVF9CWVBBU1MpKQorCQkJcmV0dXJuIGVycjsKKwl9Cit9CisKKy8qIElucHV0IHBhY2tldCBmcm9tIG5ldHdvcmsgdG8gdHJhbnNwb3J0LiAgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGRzdF9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWludCBlcnI7CisKKwlmb3IgKDs7KSB7CisJCWVyciA9IHNrYi0+ZHN0LT5pbnB1dChza2IpOworCisJCWlmIChsaWtlbHkoZXJyID09IDApKQorCQkJcmV0dXJuIGVycjsKKwkJLyogT2gsIEphbWFsLi4uIFNlZW1zLCBJIHdpbGwgbm90IGZvcmdpdmUgeW91IHRoaXMgbWVzcy4gOi0pICovCisJCWlmICh1bmxpa2VseShlcnIgIT0gTkVUX1hNSVRfQllQQVNTKSkKKwkJCXJldHVybiBlcnI7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkc3RfZW50cnkgKmRzdF9jaGVjayhzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsIHUzMiBjb29raWUpCit7CisJaWYgKGRzdC0+b2Jzb2xldGUpCisJCWRzdCA9IGRzdC0+b3BzLT5jaGVjayhkc3QsIGNvb2tpZSk7CisJcmV0dXJuIGRzdDsKK30KKworZXh0ZXJuIHZvaWQJCWRzdF9pbml0KHZvaWQpOworCitzdHJ1Y3QgZmxvd2k7CisjaWZuZGVmIENPTkZJR19YRlJNCitzdGF0aWMgaW5saW5lIGludCB4ZnJtX2xvb2t1cChzdHJ1Y3QgZHN0X2VudHJ5ICoqZHN0X3AsIHN0cnVjdCBmbG93aSAqZmwsCisJCSAgICAgICBzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncykKK3sKKwlyZXR1cm4gMDsKK30gCisjZWxzZQorZXh0ZXJuIGludCB4ZnJtX2xvb2t1cChzdHJ1Y3QgZHN0X2VudHJ5ICoqZHN0X3AsIHN0cnVjdCBmbG93aSAqZmwsCisJCSAgICAgICBzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncyk7CisjZW5kaWYKKyNlbmRpZgorCisjZW5kaWYgLyogX05FVF9EU1RfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvZXNwLmggYi9pbmNsdWRlL25ldC9lc3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGNkOTRmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQvZXNwLmgKQEAgLTAsMCArMSw1OSBAQAorI2lmbmRlZiBfTkVUX0VTUF9ICisjZGVmaW5lIF9ORVRfRVNQX0gKKworI2luY2x1ZGUgPG5ldC94ZnJtLmg+CisjaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+CisKKyNkZWZpbmUgRVNQX05VTV9GQVNUX1NHCQk0CisKK3N0cnVjdCBlc3BfZGF0YQoreworCXN0cnVjdCBzY2F0dGVybGlzdAkJc2didWZbRVNQX05VTV9GQVNUX1NHXTsKKworCS8qIENvbmZpZGVudGlhbGl0eSAqLworCXN0cnVjdCB7CisJCXU4CQkJKmtleTsJCS8qIEtleSAqLworCQlpbnQJCQlrZXlfbGVuOwkvKiBLZXkgbGVuZ3RoICovCisJCXU4CQkJKml2ZWM7CQkvKiBpdmVjIGJ1ZmZlciAqLworCQkvKiBpdmxlbiBpcyBvZmZzZXQgZnJvbSBlbmNfZGF0YSwgd2hlcmUgZW5jcnlwdGVkIGRhdGEgc3RhcnQuCisJCSAqIEl0IGlzIGxvZ2ljYWxseSBkaWZmZXJlbnQgb2YgY3J5cHRvX3RmbV9hbGdfaXZzaXplKHRmbSkuCisJCSAqIFdlIGFzc3VtZSB0aGF0IGl0IGlzIGVpdGhlciB6ZXJvIChubyBpdmVjKSwgb3IKKwkJICogPj0gY3J5cHRvX3RmbV9hbGdfaXZzaXplKHRmbSkuICovCisJCWludAkJCWl2bGVuOworCQlpbnQJCQlwYWRsZW47CQkvKiAwLi4yNTUgKi8KKwkJc3RydWN0IGNyeXB0b190Zm0JKnRmbTsJCS8qIGNyeXB0byBoYW5kbGUgKi8KKwl9IGNvbmY7CisKKwkvKiBJbnRlZ3JpdHkuIEl0IGlzIGFjdGl2ZSB3aGVuIGljdl9mdWxsX2xlbiAhPSAwICovCisJc3RydWN0IHsKKwkJdTgJCQkqa2V5OwkJLyogS2V5ICovCisJCWludAkJCWtleV9sZW47CS8qIExlbmd0aCBvZiB0aGUga2V5ICovCisJCXU4CQkJKndvcmtfaWN2OworCQlpbnQJCQlpY3ZfZnVsbF9sZW47CisJCWludAkJCWljdl90cnVuY19sZW47CisJCXZvaWQJCQkoKmljdikoc3RydWN0IGVzcF9kYXRhKiwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBza19idWZmICpza2IsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0LCBpbnQgbGVuLCB1OCAqaWN2KTsKKwkJc3RydWN0IGNyeXB0b190Zm0JKnRmbTsKKwl9IGF1dGg7Cit9OworCitleHRlcm4gaW50IHNrYl90b19zZ3ZlYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgb2Zmc2V0LCBpbnQgbGVuKTsKK2V4dGVybiBpbnQgc2tiX2Nvd19kYXRhKHN0cnVjdCBza19idWZmICpza2IsIGludCB0YWlsYml0cywgc3RydWN0IHNrX2J1ZmYgKip0cmFpbGVyKTsKK2V4dGVybiB2b2lkICpwc2tiX3B1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2tfYnVmZiAqdGFpbCwgaW50IGxlbik7CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZXNwX2htYWNfZGlnZXN0KHN0cnVjdCBlc3BfZGF0YSAqZXNwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0LAorICAgICAgICAgICAgICAgIGludCBsZW4sIHU4ICphdXRoX2RhdGEpCit7CisJc3RydWN0IGNyeXB0b190Zm0gKnRmbSA9IGVzcC0+YXV0aC50Zm07CisJY2hhciAqaWN2ID0gZXNwLT5hdXRoLndvcmtfaWN2OworCisJbWVtc2V0KGF1dGhfZGF0YSwgMCwgZXNwLT5hdXRoLmljdl90cnVuY19sZW4pOworCWNyeXB0b19obWFjX2luaXQodGZtLCBlc3AtPmF1dGgua2V5LCAmZXNwLT5hdXRoLmtleV9sZW4pOworCXNrYl9pY3Zfd2Fsayhza2IsIHRmbSwgb2Zmc2V0LCBsZW4sIGNyeXB0b19obWFjX3VwZGF0ZSk7CisJY3J5cHRvX2htYWNfZmluYWwodGZtLCBlc3AtPmF1dGgua2V5LCAmZXNwLT5hdXRoLmtleV9sZW4sIGljdik7CisJbWVtY3B5KGF1dGhfZGF0YSwgaWN2LCBlc3AtPmF1dGguaWN2X3RydW5jX2xlbik7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvZmxvdy5oIGIvaW5jbHVkZS9uZXQvZmxvdy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhNWM5NGIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9mbG93LmgKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqCisgKglHZW5lcmljIGludGVybmV0IEZMT1cuCisgKgorICovCisKKyNpZm5kZWYgX05FVF9GTE9XX0gKKyNkZWZpbmUgX05FVF9GTE9XX0gKKworI2luY2x1ZGUgPGxpbnV4L2luNi5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKworc3RydWN0IGZsb3dpIHsKKwlpbnQJb2lmOworCWludAlpaWY7CisKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQlfX3UzMgkJCWRhZGRyOworCQkJX191MzIJCQlzYWRkcjsKKwkJCV9fdTMyCQkJZndtYXJrOworCQkJX191OAkJCXRvczsKKwkJCV9fdTgJCQlzY29wZTsKKwkJfSBpcDRfdTsKKwkJCisJCXN0cnVjdCB7CisJCQlzdHJ1Y3QgaW42X2FkZHIJCWRhZGRyOworCQkJc3RydWN0IGluNl9hZGRyCQlzYWRkcjsKKwkJCV9fdTMyCQkJZmxvd2xhYmVsOworCQl9IGlwNl91OworCisJCXN0cnVjdCB7CisJCQlfX3UxNgkJCWRhZGRyOworCQkJX191MTYJCQlzYWRkcjsKKwkJCV9fdTMyCQkJZndtYXJrOworCQkJX191OAkJCXNjb3BlOworCQl9IGRuX3U7CisJfSBubF91OworI2RlZmluZSBmbGRfZHN0CQlubF91LmRuX3UuZGFkZHIKKyNkZWZpbmUgZmxkX3NyYwkJbmxfdS5kbl91LnNhZGRyCisjZGVmaW5lIGZsZF9md21hcmsJbmxfdS5kbl91LmZ3bWFyaworI2RlZmluZSBmbGRfc2NvcGUJbmxfdS5kbl91LnNjb3BlCisjZGVmaW5lIGZsNl9kc3QJCW5sX3UuaXA2X3UuZGFkZHIKKyNkZWZpbmUgZmw2X3NyYwkJbmxfdS5pcDZfdS5zYWRkcgorI2RlZmluZSBmbDZfZmxvd2xhYmVsCW5sX3UuaXA2X3UuZmxvd2xhYmVsCisjZGVmaW5lIGZsNF9kc3QJCW5sX3UuaXA0X3UuZGFkZHIKKyNkZWZpbmUgZmw0X3NyYwkJbmxfdS5pcDRfdS5zYWRkcgorI2RlZmluZSBmbDRfZndtYXJrCW5sX3UuaXA0X3UuZndtYXJrCisjZGVmaW5lIGZsNF90b3MJCW5sX3UuaXA0X3UudG9zCisjZGVmaW5lIGZsNF9zY29wZQlubF91LmlwNF91LnNjb3BlCisKKwlfX3U4CXByb3RvOworCV9fdTgJZmxhZ3M7CisjZGVmaW5lIEZMT1dJX0ZMQUdfTVVMVElQQVRIT0xEUk9VVEUgMHgwMQorCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCV9fdTE2CXNwb3J0OworCQkJX191MTYJZHBvcnQ7CisJCX0gcG9ydHM7CisKKwkJc3RydWN0IHsKKwkJCV9fdTgJdHlwZTsKKwkJCV9fdTgJY29kZTsKKwkJfSBpY21wdDsKKworCQlzdHJ1Y3QgeworCQkJX191MTYJc3BvcnQ7CisJCQlfX3UxNglkcG9ydDsKKwkJCV9fdTgJb2JqbnVtOworCQkJX191OAlvYmpuYW1lbDsgLyogTm90IDE2IGJpdHMgc2luY2UgbWF4IHZhbCBpcyAxNiAqLworCQkJX191OAlvYmpuYW1lWzE2XTsgLyogTm90IHplcm8gdGVybWluYXRlZCAqLworCQl9IGRucG9ydHM7CisKKwkJX191MzIJCXNwaTsKKwl9IHVsaV91OworI2RlZmluZSBmbF9pcF9zcG9ydAl1bGlfdS5wb3J0cy5zcG9ydAorI2RlZmluZSBmbF9pcF9kcG9ydAl1bGlfdS5wb3J0cy5kcG9ydAorI2RlZmluZSBmbF9pY21wX3R5cGUJdWxpX3UuaWNtcHQudHlwZQorI2RlZmluZSBmbF9pY21wX2NvZGUJdWxpX3UuaWNtcHQuY29kZQorI2RlZmluZSBmbF9pcHNlY19zcGkJdWxpX3Uuc3BpCit9IF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKEJJVFNfUEVSX0xPTkcvOCkpKTsKKworI2RlZmluZSBGTE9XX0RJUl9JTgkwCisjZGVmaW5lIEZMT1dfRElSX09VVAkxCisjZGVmaW5lIEZMT1dfRElSX0ZXRAkyCisKK3R5cGVkZWYgdm9pZCAoKmZsb3dfcmVzb2x2ZV90KShzdHJ1Y3QgZmxvd2kgKmtleSwgdTE2IGZhbWlseSwgdTggZGlyLAorCQkJICAgICAgIHZvaWQgKipvYmpwLCBhdG9taWNfdCAqKm9ial9yZWZwKTsKKworZXh0ZXJuIHZvaWQgKmZsb3dfY2FjaGVfbG9va3VwKHN0cnVjdCBmbG93aSAqa2V5LCB1MTYgZmFtaWx5LCB1OCBkaXIsCisJCQkgICAgICAgZmxvd19yZXNvbHZlX3QgcmVzb2x2ZXIpOworZXh0ZXJuIHZvaWQgZmxvd19jYWNoZV9mbHVzaCh2b2lkKTsKK2V4dGVybiBhdG9taWNfdCBmbG93X2NhY2hlX2dlbmlkOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2dlbl9zdGF0cy5oIGIvaW5jbHVkZS9uZXQvZ2VuX3N0YXRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI5NWNmMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L2dlbl9zdGF0cy5oCkBAIC0wLDAgKzEsNDkgQEAKKyNpZm5kZWYgX19ORVRfR0VOX1NUQVRTX0gKKyNkZWZpbmUgX19ORVRfR0VOX1NUQVRTX0gKKworI2luY2x1ZGUgPGxpbnV4L2dlbl9zdGF0cy5oPgorI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPgorI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgorI2luY2x1ZGUgPGxpbnV4L3BrdF9zY2hlZC5oPgorCitzdHJ1Y3QgZ25ldF9kdW1wCit7CisJc3BpbmxvY2tfdCAqICAgICAgbG9jazsKKwlzdHJ1Y3Qgc2tfYnVmZiAqICBza2I7CisJc3RydWN0IHJ0YXR0ciAqICAgdGFpbDsKKworCS8qIEJhY2t3YXJkIGNvbXBhdGFiaWxpdHkgKi8KKwlpbnQgICAgICAgICAgICAgICBjb21wYXRfdGNfc3RhdHM7CisJaW50ICAgICAgICAgICAgICAgY29tcGF0X3hzdGF0czsKKwl2b2lkICogICAgICAgICAgICB4c3RhdHM7CisJaW50ICAgICAgICAgICAgICAgeHN0YXRzX2xlbjsKKwlzdHJ1Y3QgdGNfc3RhdHMgICB0Y19zdGF0czsKK307CisKK2V4dGVybiBpbnQgZ25ldF9zdGF0c19zdGFydF9jb3B5KHN0cnVjdCBza19idWZmICpza2IsIGludCB0eXBlLAorCQkJCSBzcGlubG9ja190ICpsb2NrLCBzdHJ1Y3QgZ25ldF9kdW1wICpkKTsKKworZXh0ZXJuIGludCBnbmV0X3N0YXRzX3N0YXJ0X2NvcHlfY29tcGF0KHN0cnVjdCBza19idWZmICpza2IsIGludCB0eXBlLAorCQkJCQlpbnQgdGNfc3RhdHNfdHlwZSxpbnQgeHN0YXRzX3R5cGUsCisJCQkJCXNwaW5sb2NrX3QgKmxvY2ssIHN0cnVjdCBnbmV0X2R1bXAgKmQpOworCitleHRlcm4gaW50IGduZXRfc3RhdHNfY29weV9iYXNpYyhzdHJ1Y3QgZ25ldF9kdW1wICpkLAorCQkJCSBzdHJ1Y3QgZ25ldF9zdGF0c19iYXNpYyAqYik7CitleHRlcm4gaW50IGduZXRfc3RhdHNfY29weV9yYXRlX2VzdChzdHJ1Y3QgZ25ldF9kdW1wICpkLAorCQkJCSAgICBzdHJ1Y3QgZ25ldF9zdGF0c19yYXRlX2VzdCAqcik7CitleHRlcm4gaW50IGduZXRfc3RhdHNfY29weV9xdWV1ZShzdHJ1Y3QgZ25ldF9kdW1wICpkLAorCQkJCSBzdHJ1Y3QgZ25ldF9zdGF0c19xdWV1ZSAqcSk7CitleHRlcm4gaW50IGduZXRfc3RhdHNfY29weV9hcHAoc3RydWN0IGduZXRfZHVtcCAqZCwgdm9pZCAqc3QsIGludCBsZW4pOworCitleHRlcm4gaW50IGduZXRfc3RhdHNfZmluaXNoX2NvcHkoc3RydWN0IGduZXRfZHVtcCAqZCk7CisKK2V4dGVybiBpbnQgZ2VuX25ld19lc3RpbWF0b3Ioc3RydWN0IGduZXRfc3RhdHNfYmFzaWMgKmJzdGF0cywKKwkJCSAgICAgc3RydWN0IGduZXRfc3RhdHNfcmF0ZV9lc3QgKnJhdGVfZXN0LAorCQkJICAgICBzcGlubG9ja190ICpzdGF0c19sb2NrLCBzdHJ1Y3QgcnRhdHRyICpvcHQpOworZXh0ZXJuIHZvaWQgZ2VuX2tpbGxfZXN0aW1hdG9yKHN0cnVjdCBnbmV0X3N0YXRzX2Jhc2ljICpic3RhdHMsCisJCQkgICAgICAgc3RydWN0IGduZXRfc3RhdHNfcmF0ZV9lc3QgKnJhdGVfZXN0KTsKK2V4dGVybiBpbnQgZ2VuX3JlcGxhY2VfZXN0aW1hdG9yKHN0cnVjdCBnbmV0X3N0YXRzX2Jhc2ljICpic3RhdHMsCisJCQkJIHN0cnVjdCBnbmV0X3N0YXRzX3JhdGVfZXN0ICpyYXRlX2VzdCwKKwkJCQkgc3BpbmxvY2tfdCAqc3RhdHNfbG9jaywgc3RydWN0IHJ0YXR0ciAqb3B0KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pY21wLmggYi9pbmNsdWRlL25ldC9pY21wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZjMTkyNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L2ljbXAuaApAQCAtMCwwICsxLDYwIEBACisvKgorICogSU5FVAkJQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIFRDUC9JUCBwcm90b2NvbCBzdWl0ZSBmb3IgdGhlIExJTlVYCisgKgkJb3BlcmF0aW5nIHN5c3RlbS4gIElORVQgaXMgaW1wbGVtZW50ZWQgdXNpbmcgdGhlICBCU0QgU29ja2V0CisgKgkJaW50ZXJmYWNlIGFzIHRoZSBtZWFucyBvZiBjb21tdW5pY2F0aW9uIHdpdGggdGhlIHVzZXIgbGV2ZWwuCisgKgorICoJCURlZmluaXRpb25zIGZvciB0aGUgSUNNUCBtb2R1bGUuCisgKgorICogVmVyc2lvbjoJQCgjKWljbXAuaAkxLjAuNAkwNS8xMy85MworICoKKyAqIEF1dGhvcnM6CVJvc3MgQmlybywgPGJpcjdAbGVsYW5kLlN0YW5mb3JkLkVkdT4KKyAqCQlGcmVkIE4uIHZhbiBLZW1wZW4sIDx3YWx0amVAdVdhbHQuTkwuTXVnbmV0Lk9SRz4KKyAqCisgKgkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKgkJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKgkJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2lmbmRlZiBfSUNNUF9ICisjZGVmaW5lCV9JQ01QX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2ljbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKworI2luY2x1ZGUgPG5ldC9zb2NrLmg+CisjaW5jbHVkZSA8bmV0L3Byb3RvY29sLmg+CisjaW5jbHVkZSA8bmV0L3NubXAuaD4KKyNpbmNsdWRlIDxsaW51eC9pcC5oPgorCitzdHJ1Y3QgaWNtcF9lcnIgeworICBpbnQJCWVycm5vOworICB1bnNpZ25lZAlmYXRhbDoxOworfTsKKworZXh0ZXJuIHN0cnVjdCBpY21wX2VyciBpY21wX2Vycl9jb252ZXJ0W107CitERUNMQVJFX1NOTVBfU1RBVChzdHJ1Y3QgaWNtcF9taWIsIGljbXBfc3RhdGlzdGljcyk7CisjZGVmaW5lIElDTVBfSU5DX1NUQVRTKGZpZWxkKQkJU05NUF9JTkNfU1RBVFMoaWNtcF9zdGF0aXN0aWNzLCBmaWVsZCkKKyNkZWZpbmUgSUNNUF9JTkNfU1RBVFNfQkgoZmllbGQpCVNOTVBfSU5DX1NUQVRTX0JIKGljbXBfc3RhdGlzdGljcywgZmllbGQpCisjZGVmaW5lIElDTVBfSU5DX1NUQVRTX1VTRVIoZmllbGQpIAlTTk1QX0lOQ19TVEFUU19VU0VSKGljbXBfc3RhdGlzdGljcywgZmllbGQpCisKK2V4dGVybiB2b2lkCWljbXBfc2VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luLCAgaW50IHR5cGUsIGludCBjb2RlLCB1MzIgaW5mbyk7CitleHRlcm4gaW50CWljbXBfcmN2KHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludAlpY21wX2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworZXh0ZXJuIHZvaWQJaWNtcF9pbml0KHN0cnVjdCBuZXRfcHJvdG9fZmFtaWx5ICpvcHMpOworCisvKiBNb3ZlIGludG8gZHN0LmggPyAqLworZXh0ZXJuIGludCAJeHJsaW1fYWxsb3coc3RydWN0IGRzdF9lbnRyeSAqZHN0LCBpbnQgdGltZW91dCk7CisKK3N0cnVjdCByYXdfc29jayB7CisJLyogaW5ldF9zb2NrIGhhcyB0byBiZSB0aGUgZmlyc3QgbWVtYmVyICovCisJc3RydWN0IGluZXRfc29jayAgIGluZXQ7CisJc3RydWN0IGljbXBfZmlsdGVyIGZpbHRlcjsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHJhd19zb2NrICpyYXdfc2soY29uc3Qgc3RydWN0IHNvY2sgKnNrKQoreworCXJldHVybiAoc3RydWN0IHJhd19zb2NrICopc2s7Cit9CisKKyNlbmRpZgkvKiBfSUNNUF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pZl9pbmV0Ni5oIGIvaW5jbHVkZS9uZXQvaWZfaW5ldDYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTdhOWFjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQvaWZfaW5ldDYuaApAQCAtMCwwICsxLDI4NSBAQAorLyoKKyAqCWluZXQ2IGludGVyZmFjZS9hZGRyZXNzIGxpc3QgZGVmaW5pdGlvbnMKKyAqCUxpbnV4IElORVQ2IGltcGxlbWVudGF0aW9uIAorICoKKyAqCUF1dGhvcnM6CisgKglQZWRybyBSb3F1ZQkJPHJvcXVlQGRpLmZjLnVsLnB0PgkKKyAqCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICAgICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqICAgICAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9ORVRfSUZfSU5FVDZfSAorI2RlZmluZSBfTkVUX0lGX0lORVQ2X0gKKworI2luY2x1ZGUgPG5ldC9zbm1wLmg+CisjaW5jbHVkZSA8bGludXgvaXB2Ni5oPgorCisvKiBpbmV0Nl9kZXYuaWZfZmxhZ3MgKi8KKworI2RlZmluZSBJRl9SQV9PVEhFUkNPTkYJMHg4MAorI2RlZmluZSBJRl9SQV9NQU5BR0VECTB4NDAKKyNkZWZpbmUgSUZfUkFfUkNWRAkweDIwCisjZGVmaW5lIElGX1JTX1NFTlQJMHgxMAorCisvKiBwcmVmaXggZmxhZ3MgKi8KKyNkZWZpbmUgSUZfUFJFRklYX09OTElOSwkweDAxCisjZGVmaW5lIElGX1BSRUZJWF9BVVRPQ09ORgkweDAyCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKK3N0cnVjdCBpbmV0Nl9pZmFkZHIgCit7CisJc3RydWN0IGluNl9hZGRyCQlhZGRyOworCV9fdTMyCQkJcHJlZml4X2xlbjsKKwkKKwlfX3UzMgkJCXZhbGlkX2xmdDsKKwlfX3UzMgkJCXByZWZlcmVkX2xmdDsKKwl1bnNpZ25lZCBsb25nCQljc3RhbXA7CS8qIGNyZWF0ZWQgdGltZXN0YW1wICovCisJdW5zaWduZWQgbG9uZwkJdHN0YW1wOyAvKiB1cGRhdGVkIHRpbWVzdGFtcCAqLworCWF0b21pY190CQlyZWZjbnQ7CisJc3BpbmxvY2tfdAkJbG9jazsKKworCV9fdTgJCQlwcm9iZXM7CisJX191OAkJCWZsYWdzOworCisJX191MTYJCQlzY29wZTsKKworCXN0cnVjdCB0aW1lcl9saXN0CXRpbWVyOworCisJc3RydWN0IGluZXQ2X2RldgkqaWRldjsKKwlzdHJ1Y3QgcnQ2X2luZm8JCSpydDsKKworCXN0cnVjdCBpbmV0Nl9pZmFkZHIJKmxzdF9uZXh0OyAgICAgIC8qIG5leHQgYWRkciBpbiBhZGRyX2xzdCAqLworCXN0cnVjdCBpbmV0Nl9pZmFkZHIJKmlmX25leHQ7ICAgICAgIC8qIG5leHQgYWRkciBpbiBpbmV0Nl9kZXYgKi8KKworI2lmZGVmIENPTkZJR19JUFY2X1BSSVZBQ1kKKwlzdHJ1Y3QgaW5ldDZfaWZhZGRyCSp0bXBfbmV4dDsJLyogbmV4dCBhZGRyIGluIHRlbXBhZGRyX2xzdCAqLworCXN0cnVjdCBpbmV0Nl9pZmFkZHIJKmlmcHViOworCWludAkJCXJlZ2VuX2NvdW50OworI2VuZGlmCisKKwlpbnQJCQlkZWFkOworfTsKKworc3RydWN0IGlwNl9zZl9zb2NrbGlzdAoreworCXVuc2lnbmVkIGludAkJc2xfbWF4OworCXVuc2lnbmVkIGludAkJc2xfY291bnQ7CisJc3RydWN0IGluNl9hZGRyCQlzbF9hZGRyWzBdOworfTsKKworI2RlZmluZSBJUDZfU0ZMU0laRShjb3VudCkJKHNpemVvZihzdHJ1Y3QgaXA2X3NmX3NvY2tsaXN0KSArIFwKKwkoY291bnQpICogc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpCisKKyNkZWZpbmUgSVA2X1NGQkxPQ0sJMTAJLyogYWxsb2NhdGUgdGhpcyBtYW55IGF0IG9uY2UgKi8KKworc3RydWN0IGlwdjZfbWNfc29ja2xpc3QKK3sKKwlzdHJ1Y3QgaW42X2FkZHIJCWFkZHI7CisJaW50CQkJaWZpbmRleDsKKwlzdHJ1Y3QgaXB2Nl9tY19zb2NrbGlzdCAqbmV4dDsKKwl1bnNpZ25lZCBpbnQJCXNmbW9kZTsJCS8qIE1DQVNUX3tJTkNMVURFLEVYQ0xVREV9ICovCisJc3RydWN0IGlwNl9zZl9zb2NrbGlzdAkqc2ZsaXN0OworfTsKKworc3RydWN0IGlwNl9zZl9saXN0Cit7CisJc3RydWN0IGlwNl9zZl9saXN0CSpzZl9uZXh0OworCXN0cnVjdCBpbjZfYWRkcgkJc2ZfYWRkcjsKKwl1bnNpZ25lZCBsb25nCQlzZl9jb3VudFsyXTsJLyogaW5jbHVkZS9leGNsdWRlIGNvdW50cyAqLworCXVuc2lnbmVkIGNoYXIJCXNmX2dzcmVzcDsJLyogaW5jbHVkZSBpbiBnICYgcyByZXNwb25zZT8gKi8KKwl1bnNpZ25lZCBjaGFyCQlzZl9vbGRpbjsJLyogY2hhbmdlIHN0YXRlICovCisJdW5zaWduZWQgY2hhcgkJc2ZfY3Jjb3VudDsJLyogcmV0cmFucy4gbGVmdCB0byBzZW5kICovCit9OworCisjZGVmaW5lIE1BRl9USU1FUl9SVU5OSU5HCTB4MDEKKyNkZWZpbmUgTUFGX0xBU1RfUkVQT1JURVIJMHgwMgorI2RlZmluZSBNQUZfTE9BREVECQkweDA0CisjZGVmaW5lIE1BRl9OT1JFUE9SVAkJMHgwOAorI2RlZmluZSBNQUZfR1NRVUVSWQkJMHgxMAorCitzdHJ1Y3QgaWZtY2FkZHI2Cit7CisJc3RydWN0IGluNl9hZGRyCQltY2FfYWRkcjsKKwlzdHJ1Y3QgaW5ldDZfZGV2CSppZGV2OworCXN0cnVjdCBpZm1jYWRkcjYJKm5leHQ7CisJc3RydWN0IGlwNl9zZl9saXN0CSptY2Ffc291cmNlczsKKwlzdHJ1Y3QgaXA2X3NmX2xpc3QJKm1jYV90b21iOworCXVuc2lnbmVkIGludAkJbWNhX3NmbW9kZTsKKwl1bnNpZ25lZCBsb25nCQltY2Ffc2Zjb3VudFsyXTsKKwlzdHJ1Y3QgdGltZXJfbGlzdAltY2FfdGltZXI7CisJdW5zaWduZWQJCW1jYV9mbGFnczsKKwlpbnQJCQltY2FfdXNlcnM7CisJYXRvbWljX3QJCW1jYV9yZWZjbnQ7CisJc3BpbmxvY2tfdAkJbWNhX2xvY2s7CisJdW5zaWduZWQgY2hhcgkJbWNhX2NyY291bnQ7CisJdW5zaWduZWQgbG9uZwkJbWNhX2NzdGFtcDsKKwl1bnNpZ25lZCBsb25nCQltY2FfdHN0YW1wOworfTsKKworLyogQW55Y2FzdCBzdHVmZiAqLworCitzdHJ1Y3QgaXB2Nl9hY19zb2NrbGlzdAoreworCXN0cnVjdCBpbjZfYWRkcgkJYWNsX2FkZHI7CisJaW50CQkJYWNsX2lmaW5kZXg7CisJc3RydWN0IGlwdjZfYWNfc29ja2xpc3QgKmFjbF9uZXh0OworfTsKKworc3RydWN0IGlmYWNhZGRyNgoreworCXN0cnVjdCBpbjZfYWRkcgkJYWNhX2FkZHI7CisJc3RydWN0IGluZXQ2X2RldgkqYWNhX2lkZXY7CisJc3RydWN0IHJ0Nl9pbmZvCQkqYWNhX3J0OworCXN0cnVjdCBpZmFjYWRkcjYJKmFjYV9uZXh0OworCWludAkJCWFjYV91c2VyczsKKwlhdG9taWNfdAkJYWNhX3JlZmNudDsKKwlzcGlubG9ja190CQlhY2FfbG9jazsKKwl1bnNpZ25lZCBsb25nCQlhY2FfY3N0YW1wOworCXVuc2lnbmVkIGxvbmcJCWFjYV90c3RhbXA7Cit9OworCisjZGVmaW5lCUlGQV9IT1NUCUlQVjZfQUREUl9MT09QQkFDSworI2RlZmluZQlJRkFfTElOSwlJUFY2X0FERFJfTElOS0xPQ0FMCisjZGVmaW5lCUlGQV9TSVRFCUlQVjZfQUREUl9TSVRFTE9DQUwKKyNkZWZpbmUJSUZBX0dMT0JBTAkweDAwMDBVCisKK3N0cnVjdCBpcHY2X2RldnN0YXQgeworCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeQkqcHJvY19kaXJfZW50cnk7CisJREVGSU5FX1NOTVBfU1RBVChzdHJ1Y3QgaWNtcHY2X21pYiwgaWNtcHY2KTsKK307CisKK3N0cnVjdCBpbmV0Nl9kZXYgCit7CisJc3RydWN0IG5ldF9kZXZpY2UJCSpkZXY7CisKKwlzdHJ1Y3QgaW5ldDZfaWZhZGRyCSphZGRyX2xpc3Q7CisKKwlzdHJ1Y3QgaWZtY2FkZHI2CSptY19saXN0OworCXN0cnVjdCBpZm1jYWRkcjYJKm1jX3RvbWI7CisJcndsb2NrX3QJCW1jX2xvY2s7CisJdW5zaWduZWQgbG9uZwkJbWNfdjFfc2VlbjsKKwl1bnNpZ25lZCBsb25nCQltY19tYXhkZWxheTsKKwl1bnNpZ25lZCBjaGFyCQltY19xcnY7CisJdW5zaWduZWQgY2hhcgkJbWNfZ3FfcnVubmluZzsKKwl1bnNpZ25lZCBjaGFyCQltY19pZmNfY291bnQ7CisJc3RydWN0IHRpbWVyX2xpc3QJbWNfZ3FfdGltZXI7CS8qIGdlbmVyYWwgcXVlcnkgdGltZXIgKi8KKwlzdHJ1Y3QgdGltZXJfbGlzdAltY19pZmNfdGltZXI7CS8qIGludGVyZmFjZSBjaGFuZ2UgdGltZXIgKi8KKworCXN0cnVjdCBpZmFjYWRkcjYJKmFjX2xpc3Q7CisJcndsb2NrX3QJCWxvY2s7CisJYXRvbWljX3QJCXJlZmNudDsKKwlfX3UzMgkJCWlmX2ZsYWdzOworCWludAkJCWRlYWQ7CisKKyNpZmRlZiBDT05GSUdfSVBWNl9QUklWQUNZCisJdTgJCQlybmRpZFs4XTsKKwl1OAkJCWVudHJvcHlbOF07CisJc3RydWN0IHRpbWVyX2xpc3QJcmVnZW5fdGltZXI7CisJc3RydWN0IGluZXQ2X2lmYWRkcgkqdGVtcGFkZHJfbGlzdDsKKwlfX3U4CQkJd29ya19ldWk2NFs4XTsKKwlfX3U4CQkJd29ya19kaWdlc3RbMTZdOworI2VuZGlmCisKKwlzdHJ1Y3QgbmVpZ2hfcGFybXMJKm5kX3Bhcm1zOworCXN0cnVjdCBpbmV0Nl9kZXYJKm5leHQ7CisJc3RydWN0IGlwdjZfZGV2Y29uZgljbmY7CisJc3RydWN0IGlwdjZfZGV2c3RhdAlzdGF0czsKKwl1bnNpZ25lZCBsb25nCQl0c3RhbXA7IC8qIGlwdjZJbnRlcmZhY2VUYWJsZSB1cGRhdGUgdGltZXN0YW1wICovCit9OworCitleHRlcm4gc3RydWN0IGlwdjZfZGV2Y29uZiBpcHY2X2RldmNvbmY7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpcHY2X2V0aF9tY19tYXAoc3RydWN0IGluNl9hZGRyICphZGRyLCBjaGFyICpidWYpCit7CisJLyoKKwkgKgkrLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rCisJICogICAgICB8ICAgMzMgIHwgICAzMyAgfCBEU1QxMyB8IERTVDE0IHwgRFNUMTUgfCBEU1QxNiB8CisJICogICAgICArLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rCisJICovCisKKwlidWZbMF09IDB4MzM7CisJYnVmWzFdPSAweDMzOworCisJbWVtY3B5KGJ1ZiArIDIsICZhZGRyLT5zNl9hZGRyMzJbM10sIHNpemVvZihfX3UzMikpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaXB2Nl90cl9tY19tYXAoc3RydWN0IGluNl9hZGRyICphZGRyLCBjaGFyICpidWYpCit7CisJLyogQWxsIG5vZGVzIEZGMDE6OjEsIEZGMDI6OjEsIEZGMDI6OjE6RkZ4eDp4eHh4ICovCisKKwlpZiAoKChhZGRyLT5zNl9hZGRyWzBdID09IDB4RkYpICYmCisJICAgICgoYWRkci0+czZfYWRkclsxXSA9PSAweDAxKSB8fCAoYWRkci0+czZfYWRkclsxXSA9PSAweDAyKSkgJiYKKwkgICAgIChhZGRyLT5zNl9hZGRyMTZbMV0gPT0gMCkgJiYKKwkgICAgIChhZGRyLT5zNl9hZGRyMzJbMV0gPT0gMCkgJiYKKwkgICAgIChhZGRyLT5zNl9hZGRyMzJbMl0gPT0gMCkgJiYKKwkgICAgIChhZGRyLT5zNl9hZGRyMTZbNl0gPT0gMCkgJiYKKwkgICAgIChhZGRyLT5zNl9hZGRyWzE1XSA9PSAxKSkgfHwKKwkgICAgKChhZGRyLT5zNl9hZGRyWzBdID09IDB4RkYpICYmCisJICAgICAoYWRkci0+czZfYWRkclsxXSA9PSAweDAyKSAmJgorCSAgICAgKGFkZHItPnM2X2FkZHIxNlsxXSA9PSAwKSAmJgorCSAgICAgKGFkZHItPnM2X2FkZHIzMlsxXSA9PSAwKSAmJgorCSAgICAgKGFkZHItPnM2X2FkZHIxNls0XSA9PSAwKSAmJgorCSAgICAgKGFkZHItPnM2X2FkZHJbMTBdID09IDApICYmCisJICAgICAoYWRkci0+czZfYWRkclsxMV0gPT0gMSkgJiYKKwkgICAgIChhZGRyLT5zNl9hZGRyWzEyXSA9PSAweGZmKSkpCisJeworCQlidWZbMF09MHhDMDsKKwkJYnVmWzFdPTB4MDA7CisJCWJ1ZlsyXT0weDAxOworCQlidWZbM109MHgwMDsKKwkJYnVmWzRdPTB4MDA7CisJCWJ1Zls1XT0weDAwOworCS8qIEFsbCByb3V0ZXJzIEZGMHg6OjIgKi8KKwl9IGVsc2UgaWYgKChhZGRyLT5zNl9hZGRyWzBdID09MHhmZikgJiYKKwkJKChhZGRyLT5zNl9hZGRyWzFdICYgMHhGMCkgPT0gMCkgJiYKKwkJKGFkZHItPnM2X2FkZHIxNlsxXSA9PSAwKSAmJgorCQkoYWRkci0+czZfYWRkcjMyWzFdID09IDApICYmCisJCShhZGRyLT5zNl9hZGRyMzJbMl0gPT0gMCkgJiYKKwkJKGFkZHItPnM2X2FkZHIxNls2XSA9PSAwKSAmJgorCQkoYWRkci0+czZfYWRkclsxNV0gPT0gMikpCisJeworCQlidWZbMF09MHhDMDsKKwkJYnVmWzFdPTB4MDA7CisJCWJ1ZlsyXT0weDAyOworCQlidWZbM109MHgwMDsKKwkJYnVmWzRdPTB4MDA7CisJCWJ1Zls1XT0weDAwOworCX0gZWxzZSB7CisJCXVuc2lnbmVkIGNoYXIgaSA7IAorCQkKKwkJaSA9IGFkZHItPnM2X2FkZHJbMTVdICYgNyA7IAorCQlidWZbMF09MHhDMDsKKwkJYnVmWzFdPTB4MDA7CisJCWJ1ZlsyXT0weDAwOworCQlidWZbM109MHgwMSA8PCBpIDsgCisJCWJ1Zls0XT0weDAwOworCQlidWZbNV09MHgwMDsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpcHY2X2FyY25ldF9tY19tYXAoY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyLCBjaGFyICpidWYpCit7CisJYnVmWzBdID0gMHgwMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGlwdjZfaWJfbWNfbWFwKHN0cnVjdCBpbjZfYWRkciAqYWRkciwgY2hhciAqYnVmKQoreworCWJ1ZlswXSAgPSAwOwkJLyogUmVzZXJ2ZWQgKi8KKwlidWZbMV0gID0gMHhmZjsJCS8qIE11bHRpY2FzdCBRUE4gKi8KKwlidWZbMl0gID0gMHhmZjsKKwlidWZbM10gID0gMHhmZjsKKwlidWZbNF0gID0gMHhmZjsKKwlidWZbNV0gID0gMHgxMjsJCS8qIGxpbmsgbG9jYWwgc2NvcGUgKi8KKwlidWZbNl0gID0gMHg2MDsJCS8qIElQdjYgc2lnbmF0dXJlICovCisJYnVmWzddICA9IDB4MWI7CisJYnVmWzhdICA9IDA7CQkvKiBQX0tleSAqLworCWJ1Zls5XSAgPSAwOworCW1lbWNweShidWYgKyAxMCwgYWRkci0+czZfYWRkciArIDYsIDEwKTsKK30KKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pbmV0X2NvbW1vbi5oIGIvaW5jbHVkZS9uZXQvaW5ldF9jb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmMxZjRkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQvaW5ldF9jb21tb24uaApAQCAtMCwwICsxLDQ0IEBACisjaWZuZGVmIF9JTkVUX0NPTU1PTl9ICisjZGVmaW5lIF9JTkVUX0NPTU1PTl9ICisKK2V4dGVybiBzdHJ1Y3QgcHJvdG9fb3BzCQlpbmV0X3N0cmVhbV9vcHM7CitleHRlcm4gc3RydWN0IHByb3RvX29wcwkJaW5ldF9kZ3JhbV9vcHM7CisKKy8qCisgKglJTkVUNCBwcm90b3R5cGVzIHVzZWQgYnkgSU5FVDYKKyAqLworCitleHRlcm4gdm9pZAkJCWluZXRfcmVtb3ZlX3NvY2soc3RydWN0IHNvY2sgKnNrMSk7CitleHRlcm4gdm9pZAkJCWluZXRfcHV0X3NvY2sodW5zaWduZWQgc2hvcnQgbnVtLCAKKwkJCQkJICAgICAgc3RydWN0IHNvY2sgKnNrKTsKK2V4dGVybiBpbnQJCQlpbmV0X3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jayk7CitleHRlcm4gaW50CQkJaW5ldF9zdHJlYW1fY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLAorCQkJCQkJICAgIHN0cnVjdCBzb2NrYWRkciAqIHVhZGRyLAorCQkJCQkJICAgIGludCBhZGRyX2xlbiwgaW50IGZsYWdzKTsKK2V4dGVybiBpbnQJCQlpbmV0X2RncmFtX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgCisJCQkJCQkgICBzdHJ1Y3Qgc29ja2FkZHIgKiB1YWRkciwKKwkJCQkJCSAgIGludCBhZGRyX2xlbiwgaW50IGZsYWdzKTsKK2V4dGVybiBpbnQJCQlpbmV0X2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCAKKwkJCQkJICAgIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssIGludCBmbGFncyk7CitleHRlcm4gaW50CQkJaW5ldF9zZW5kbXNnKHN0cnVjdCBraW9jYiAqaW9jYiwKKwkJCQkJICAgICBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCAKKwkJCQkJICAgICBzdHJ1Y3QgbXNnaGRyICptc2csIAorCQkJCQkgICAgIHNpemVfdCBzaXplKTsKK2V4dGVybiBpbnQJCQlpbmV0X3NodXRkb3duKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBob3cpOworZXh0ZXJuIHVuc2lnbmVkIGludAkJaW5ldF9wb2xsKHN0cnVjdCBmaWxlICogZmlsZSwgc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICp3YWl0KTsKK2V4dGVybiBpbnQJCQlpbmV0X2xpc3RlbihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgYmFja2xvZyk7CisKK2V4dGVybiB2b2lkCQkJaW5ldF9zb2NrX2Rlc3RydWN0KHN0cnVjdCBzb2NrICpzayk7CitleHRlcm4gYXRvbWljX3QJCQlpbmV0X3NvY2tfbnI7CisKK2V4dGVybiBpbnQJCQlpbmV0X2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgCisJCQkJCSAgc3RydWN0IHNvY2thZGRyICp1YWRkciwgaW50IGFkZHJfbGVuKTsKK2V4dGVybiBpbnQJCQlpbmV0X2dldG5hbWUoc3RydWN0IHNvY2tldCAqc29jaywgCisJCQkJCSAgICAgc3RydWN0IHNvY2thZGRyICp1YWRkciwgCisJCQkJCSAgICAgaW50ICp1YWRkcl9sZW4sIGludCBwZWVyKTsKK2V4dGVybiBpbnQJCQlpbmV0X2lvY3RsKHN0cnVjdCBzb2NrZXQgKnNvY2ssIAorCQkJCQkgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CisKKyNlbmRpZgorCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2luZXRfZWNuLmggYi9pbmNsdWRlL25ldC9pbmV0X2Vjbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4Nzg0NWUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9pbmV0X2Vjbi5oCkBAIC0wLDAgKzEsMTA4IEBACisjaWZuZGVmIF9JTkVUX0VDTl9IXworI2RlZmluZSBfSU5FVF9FQ05fSF8KKworI2luY2x1ZGUgPGxpbnV4L2lwLmg+CisjaW5jbHVkZSA8bmV0L2RzZmllbGQuaD4KKworZW51bSB7CisJSU5FVF9FQ05fTk9UX0VDVCA9IDAsCisJSU5FVF9FQ05fRUNUXzEgPSAxLAorCUlORVRfRUNOX0VDVF8wID0gMiwKKwlJTkVUX0VDTl9DRSA9IDMsCisJSU5FVF9FQ05fTUFTSyA9IDMsCit9OworCitzdGF0aWMgaW5saW5lIGludCBJTkVUX0VDTl9pc19jZShfX3U4IGRzZmllbGQpCit7CisJcmV0dXJuIChkc2ZpZWxkICYgSU5FVF9FQ05fTUFTSykgPT0gSU5FVF9FQ05fQ0U7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IElORVRfRUNOX2lzX25vdF9lY3QoX191OCBkc2ZpZWxkKQoreworCXJldHVybiAoZHNmaWVsZCAmIElORVRfRUNOX01BU0spID09IElORVRfRUNOX05PVF9FQ1Q7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IElORVRfRUNOX2lzX2NhcGFibGUoX191OCBkc2ZpZWxkKQoreworCXJldHVybiAoZHNmaWVsZCAmIElORVRfRUNOX0VDVF8wKTsKK30KKworc3RhdGljIGlubGluZSBfX3U4IElORVRfRUNOX2VuY2Fwc3VsYXRlKF9fdTggb3V0ZXIsIF9fdTggaW5uZXIpCit7CisJb3V0ZXIgJj0gfklORVRfRUNOX01BU0s7CisJb3V0ZXIgfD0gIUlORVRfRUNOX2lzX2NlKGlubmVyKSA/IChpbm5lciAmIElORVRfRUNOX01BU0spIDoKKwkJCQkJICBJTkVUX0VDTl9FQ1RfMDsKKwlyZXR1cm4gb3V0ZXI7Cit9CisKKyNkZWZpbmUJSU5FVF9FQ05feG1pdChzaykgZG8geyBpbmV0X3NrKHNrKS0+dG9zIHw9IElORVRfRUNOX0VDVF8wOyB9IHdoaWxlICgwKQorI2RlZmluZQlJTkVUX0VDTl9kb250eG1pdChzaykgXAorCWRvIHsgaW5ldF9zayhzayktPnRvcyAmPSB+SU5FVF9FQ05fTUFTSzsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBJUDZfRUNOX2Zsb3dfaW5pdChsYWJlbCkgZG8gewkJXAorICAgICAgKGxhYmVsKSAmPSB+aHRvbmwoSU5FVF9FQ05fTUFTSyA8PCAyMCk7CVwKKyAgICB9IHdoaWxlICgwKQorCisjZGVmaW5lCUlQNl9FQ05fZmxvd194bWl0KHNrLCBsYWJlbCkgZG8gewkJCQlcCisJaWYgKElORVRfRUNOX2lzX2NhcGFibGUoaW5ldF9zayhzayktPnRvcykpCQkJXAorCQkobGFiZWwpIHw9IF9fY29uc3RhbnRfaHRvbnMoSU5FVF9FQ05fRUNUXzAgPDwgNCk7CVwKKyAgICB9IHdoaWxlICgwKQorCitzdGF0aWMgaW5saW5lIHZvaWQgSVBfRUNOX3NldF9jZShzdHJ1Y3QgaXBoZHIgKmlwaCkKK3sKKwl1MzIgY2hlY2sgPSBpcGgtPmNoZWNrOworCXUzMiBlY24gPSAoaXBoLT50b3MgKyAxKSAmIElORVRfRUNOX01BU0s7CisKKwkvKgorCSAqIEFmdGVyIHRoZSBsYXN0IG9wZXJhdGlvbiB3ZSBoYXZlIChpbiBiaW5hcnkpOgorCSAqIElORVRfRUNOX05PVF9FQ1QgPT4gMDEKKwkgKiBJTkVUX0VDTl9FQ1RfMSAgID0+IDEwCisJICogSU5FVF9FQ05fRUNUXzAgICA9PiAxMQorCSAqIElORVRfRUNOX0NFICAgICAgPT4gMDAKKwkgKi8KKwlpZiAoIShlY24gJiAyKSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBUaGUgZm9sbG93aW5nIGdpdmVzIHVzOgorCSAqIElORVRfRUNOX0VDVF8xID0+IGNoZWNrICs9IGh0b25zKDB4RkZGRCkKKwkgKiBJTkVUX0VDTl9FQ1RfMCA9PiBjaGVjayArPSBodG9ucygweEZGRkUpCisJICovCisJY2hlY2sgKz0gaHRvbnMoMHhGRkZCKSArIGh0b25zKGVjbik7CisKKwlpcGgtPmNoZWNrID0gY2hlY2sgKyAoY2hlY2s+PTB4RkZGRik7CisJaXBoLT50b3MgfD0gSU5FVF9FQ05fQ0U7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBJUF9FQ05fY2xlYXIoc3RydWN0IGlwaGRyICppcGgpCit7CisJaXBoLT50b3MgJj0gfklORVRfRUNOX01BU0s7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpcHY0X2NvcHlfZHNjcChzdHJ1Y3QgaXBoZHIgKm91dGVyLCBzdHJ1Y3QgaXBoZHIgKmlubmVyKQoreworCXUzMiBkc2NwID0gaXB2NF9nZXRfZHNmaWVsZChvdXRlcikgJiB+SU5FVF9FQ05fTUFTSzsKKwlpcHY0X2NoYW5nZV9kc2ZpZWxkKGlubmVyLCBJTkVUX0VDTl9NQVNLLCBkc2NwKTsKK30KKworc3RydWN0IGlwdjZoZHI7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBJUDZfRUNOX3NldF9jZShzdHJ1Y3QgaXB2NmhkciAqaXBoKQoreworCWlmIChJTkVUX0VDTl9pc19ub3RfZWN0KGlwdjZfZ2V0X2RzZmllbGQoaXBoKSkpCisJCXJldHVybjsKKwkqKHUzMiopaXBoIHw9IGh0b25sKElORVRfRUNOX0NFIDw8IDIwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIElQNl9FQ05fY2xlYXIoc3RydWN0IGlwdjZoZHIgKmlwaCkKK3sKKwkqKHUzMiopaXBoICY9IH5odG9ubChJTkVUX0VDTl9NQVNLIDw8IDIwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGlwdjZfY29weV9kc2NwKHN0cnVjdCBpcHY2aGRyICpvdXRlciwgc3RydWN0IGlwdjZoZHIgKmlubmVyKQoreworCXUzMiBkc2NwID0gaXB2Nl9nZXRfZHNmaWVsZChvdXRlcikgJiB+SU5FVF9FQ05fTUFTSzsKKwlpcHY2X2NoYW5nZV9kc2ZpZWxkKGlubmVyLCBJTkVUX0VDTl9NQVNLLCBkc2NwKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pbmV0cGVlci5oIGIvaW5jbHVkZS9uZXQvaW5ldHBlZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmRhNDcxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQvaW5ldHBlZXIuaApAQCAtMCwwICsxLDY2IEBACisvKgorICoJCUlORVRQRUVSIC0gQSBzdG9yYWdlIGZvciBwZXJtYW5lbnQgaW5mb3JtYXRpb24gYWJvdXQgcGVlcnMKKyAqCisgKiAgVmVyc2lvbjoJJElkOiBpbmV0cGVlci5oLHYgMS4yIDIwMDIvMDEvMTIgMDc6NTQ6NTYgZGF2ZW0gRXhwICQKKyAqCisgKiAgQXV0aG9yczoJQW5kcmV5IFYuIFNhdm9jaGtpbiA8c2F3QG1zdS5ydT4KKyAqLworCisjaWZuZGVmIF9ORVRfSU5FVFBFRVJfSAorI2RlZmluZSBfTkVUX0lORVRQRUVSX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKworc3RydWN0IGluZXRfcGVlcgoreworCXN0cnVjdCBpbmV0X3BlZXIJKmF2bF9sZWZ0LCAqYXZsX3JpZ2h0OworCXN0cnVjdCBpbmV0X3BlZXIJKnVudXNlZF9uZXh0LCAqKnVudXNlZF9wcmV2cDsKKwl1bnNpZ25lZCBsb25nCQlkdGltZTsJCS8qIHRoZSB0aW1lIG9mIGxhc3QgdXNlIG9mIG5vdAorCQkJCQkJICogcmVmZXJlbmNlZCBlbnRyaWVzICovCisJYXRvbWljX3QJCXJlZmNudDsKKwlfX3UzMgkJCXY0ZGFkZHI7CS8qIHBlZXIncyBhZGRyZXNzICovCisJX191MTYJCQlhdmxfaGVpZ2h0OworCV9fdTE2CQkJaXBfaWRfY291bnQ7CS8qIElQIElEIGZvciB0aGUgbmV4dCBwYWNrZXQgKi8KKwlfX3UzMgkJCXRjcF90czsKKwl1bnNpZ25lZCBsb25nCQl0Y3BfdHNfc3RhbXA7Cit9OworCit2b2lkCQkJaW5ldF9pbml0cGVlcnModm9pZCkgX19pbml0OworCisvKiBjYW4gYmUgY2FsbGVkIHdpdGggb3Igd2l0aG91dCBsb2NhbCBCSCBiZWluZyBkaXNhYmxlZCAqLworc3RydWN0IGluZXRfcGVlcgkqaW5ldF9nZXRwZWVyKF9fdTMyIGRhZGRyLCBpbnQgY3JlYXRlKTsKKworZXh0ZXJuIHNwaW5sb2NrX3QgaW5ldF9wZWVyX3VudXNlZF9sb2NrOworZXh0ZXJuIHN0cnVjdCBpbmV0X3BlZXIgKippbmV0X3BlZXJfdW51c2VkX3RhaWxwOworLyogY2FuIGJlIGNhbGxlZCBmcm9tIEJIIGNvbnRleHQgb3Igb3V0c2lkZSAqLworc3RhdGljIGlubGluZSB2b2lkCWluZXRfcHV0cGVlcihzdHJ1Y3QgaW5ldF9wZWVyICpwKQoreworCXNwaW5fbG9ja19iaCgmaW5ldF9wZWVyX3VudXNlZF9sb2NrKTsKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmcC0+cmVmY250KSkgeworCQlwLT51bnVzZWRfcHJldnAgPSBpbmV0X3BlZXJfdW51c2VkX3RhaWxwOworCQlwLT51bnVzZWRfbmV4dCA9IE5VTEw7CisJCSppbmV0X3BlZXJfdW51c2VkX3RhaWxwID0gcDsKKwkJaW5ldF9wZWVyX3VudXNlZF90YWlscCA9ICZwLT51bnVzZWRfbmV4dDsKKwkJcC0+ZHRpbWUgPSBqaWZmaWVzOworCX0KKwlzcGluX3VubG9ja19iaCgmaW5ldF9wZWVyX3VudXNlZF9sb2NrKTsKK30KKworZXh0ZXJuIHNwaW5sb2NrX3QgaW5ldF9wZWVyX2lkbG9jazsKKy8qIGNhbiBiZSBjYWxsZWQgd2l0aCBvciB3aXRob3V0IGxvY2FsIEJIIGJlaW5nIGRpc2FibGVkICovCitzdGF0aWMgaW5saW5lIF9fdTE2CWluZXRfZ2V0aWQoc3RydWN0IGluZXRfcGVlciAqcCwgaW50IG1vcmUpCit7CisJX191MTYgaWQ7CisKKwlzcGluX2xvY2tfYmgoJmluZXRfcGVlcl9pZGxvY2spOworCWlkID0gcC0+aXBfaWRfY291bnQ7CisJcC0+aXBfaWRfY291bnQgKz0gMSArIG1vcmU7CisJc3Bpbl91bmxvY2tfYmgoJmluZXRfcGVlcl9pZGxvY2spOworCXJldHVybiBpZDsKK30KKworI2VuZGlmIC8qIF9ORVRfSU5FVFBFRVJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXAuaCBiL2luY2x1ZGUvbmV0L2lwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRkYjEzNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L2lwLmgKQEAgLTAsMCArMSwzNTMgQEAKKy8qCisgKiBJTkVUCQlBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgVENQL0lQIHByb3RvY29sIHN1aXRlIGZvciB0aGUgTElOVVgKKyAqCQlvcGVyYXRpbmcgc3lzdGVtLiAgSU5FVCBpcyBpbXBsZW1lbnRlZCB1c2luZyB0aGUgIEJTRCBTb2NrZXQKKyAqCQlpbnRlcmZhY2UgYXMgdGhlIG1lYW5zIG9mIGNvbW11bmljYXRpb24gd2l0aCB0aGUgdXNlciBsZXZlbC4KKyAqCisgKgkJRGVmaW5pdGlvbnMgZm9yIHRoZSBJUCBtb2R1bGUuCisgKgorICogVmVyc2lvbjoJQCgjKWlwLmgJMS4wLjIJMDUvMDcvOTMKKyAqCisgKiBBdXRob3JzOglSb3NzIEJpcm8sIDxiaXI3QGxlbGFuZC5TdGFuZm9yZC5FZHU+CisgKgkJRnJlZCBOLiB2YW4gS2VtcGVuLCA8d2FsdGplQHVXYWx0Lk5MLk11Z25ldC5PUkc+CisgKgkJQWxhbiBDb3gsIDxndzRwdHNAZ3c0cHRzLmFtcHIub3JnPgorICoKKyAqIENoYW5nZXM6CisgKgkJTWlrZSBNY0xhZ2FuICAgIDogICAgICAgUm91dGluZyBieSBzb3VyY2UKKyAqCisgKgkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKgkJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKgkJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2lmbmRlZiBfSVBfSAorI2RlZmluZSBfSVBfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcC5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW5ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luX3JvdXRlLmg+CisjaW5jbHVkZSA8bmV0L3JvdXRlLmg+CisjaW5jbHVkZSA8bmV0L2FycC5oPgorI2luY2x1ZGUgPG5ldC9zbm1wLmg+CisKK3N0cnVjdCBzb2NrOworCitzdHJ1Y3QgaW5ldF9za2JfcGFybQoreworCXN0cnVjdCBpcF9vcHRpb25zCW9wdDsJCS8qIENvbXBpbGVkIElQIG9wdGlvbnMJCSovCisJdW5zaWduZWQgY2hhcgkJZmxhZ3M7CisKKyNkZWZpbmUgSVBTS0JfTUFTUVVFUkFERUQJMQorI2RlZmluZSBJUFNLQl9UUkFOU0xBVEVECTIKKyNkZWZpbmUgSVBTS0JfRk9SV0FSREVECQk0CisjZGVmaW5lIElQU0tCX1hGUk1fVFVOTkVMX1NJWkUJOAorfTsKKworc3RydWN0IGlwY21fY29va2llCit7CisJdTMyCQkJYWRkcjsKKwlpbnQJCQlvaWY7CisJc3RydWN0IGlwX29wdGlvbnMJKm9wdDsKK307CisKKyNkZWZpbmUgSVBDQihza2IpICgoc3RydWN0IGluZXRfc2tiX3Bhcm0qKSgoc2tiKS0+Y2IpKQorCitzdHJ1Y3QgaXBfcmFfY2hhaW4KK3sKKwlzdHJ1Y3QgaXBfcmFfY2hhaW4JKm5leHQ7CisJc3RydWN0IHNvY2sJCSpzazsKKwl2b2lkCQkJKCpkZXN0cnVjdG9yKShzdHJ1Y3Qgc29jayAqKTsKK307CisKK2V4dGVybiBzdHJ1Y3QgaXBfcmFfY2hhaW4gKmlwX3JhX2NoYWluOworZXh0ZXJuIHJ3bG9ja190IGlwX3JhX2xvY2s7CisKKy8qIElQIGZsYWdzLiAqLworI2RlZmluZSBJUF9DRQkJMHg4MDAwCQkvKiBGbGFnOiAiQ29uZ2VzdGlvbiIJCSovCisjZGVmaW5lIElQX0RGCQkweDQwMDAJCS8qIEZsYWc6ICJEb24ndCBGcmFnbWVudCIJKi8KKyNkZWZpbmUgSVBfTUYJCTB4MjAwMAkJLyogRmxhZzogIk1vcmUgRnJhZ21lbnRzIgkqLworI2RlZmluZSBJUF9PRkZTRVQJMHgxRkZGCQkvKiAiRnJhZ21lbnQgT2Zmc2V0IiBwYXJ0CSovCisKKyNkZWZpbmUgSVBfRlJBR19USU1FCSgzMCAqIEhaKQkJLyogZnJhZ21lbnQgbGlmZXRpbWUJKi8KKworZXh0ZXJuIHZvaWQJCWlwX21jX2Ryb3Bzb2NrZXQoc3RydWN0IHNvY2sgKik7CitleHRlcm4gdm9pZAkJaXBfbWNfZHJvcGRldmljZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK2V4dGVybiBpbnQJCWlnbXBfbWNfcHJvY19pbml0KHZvaWQpOworCisvKgorICoJRnVuY3Rpb25zIHByb3ZpZGVkIGJ5IGlwLmMKKyAqLworCitleHRlcm4gaW50CQlpcF9idWlsZF9hbmRfc2VuZF9wa3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrLAorCQkJCQkgICAgICB1MzIgc2FkZHIsIHUzMiBkYWRkciwKKwkJCQkJICAgICAgc3RydWN0IGlwX29wdGlvbnMgKm9wdCk7CitleHRlcm4gaW50CQlpcF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICAgICBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0KTsKK2V4dGVybiBpbnQJCWlwX2xvY2FsX2RlbGl2ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50CQlpcF9tcl9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQJCWlwX291dHB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQJCWlwX21jX291dHB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQJCWlwX2ZyYWdtZW50KHN0cnVjdCBza19idWZmICpza2IsIGludCAoKm91dCkoc3RydWN0IHNrX2J1ZmYqKSk7CitleHRlcm4gaW50CQlpcF9kb19uYXQoc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gdm9pZAkJaXBfc2VuZF9jaGVjayhzdHJ1Y3QgaXBoZHIgKmlwKTsKK2V4dGVybiBpbnQJCWlwX3F1ZXVlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGlwZnJhZ29rKTsKK2V4dGVybiB2b2lkCQlpcF9pbml0KHZvaWQpOworZXh0ZXJuIGludAkJaXBfYXBwZW5kX2RhdGEoc3RydWN0IHNvY2sgKnNrLAorCQkJCSAgICAgICBpbnQgZ2V0ZnJhZyh2b2lkICpmcm9tLCBjaGFyICp0bywgaW50IG9mZnNldCwgaW50IGxlbiwKKwkJCQkJCSAgIGludCBvZGQsIHN0cnVjdCBza19idWZmICpza2IpLAorCQkJCXZvaWQgKmZyb20sIGludCBsZW4sIGludCBwcm90b2xlbiwKKwkJCQlzdHJ1Y3QgaXBjbV9jb29raWUgKmlwYywKKwkJCQlzdHJ1Y3QgcnRhYmxlICpydCwKKwkJCQl1bnNpZ25lZCBpbnQgZmxhZ3MpOworZXh0ZXJuIGludAkJaXBfZ2VuZXJpY19nZXRmcmFnKHZvaWQgKmZyb20sIGNoYXIgKnRvLCBpbnQgb2Zmc2V0LCBpbnQgbGVuLCBpbnQgb2RkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBzc2l6ZV90CQlpcF9hcHBlbmRfcGFnZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJCWludCBvZmZzZXQsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpOworZXh0ZXJuIGludAkJaXBfcHVzaF9wZW5kaW5nX2ZyYW1lcyhzdHJ1Y3Qgc29jayAqc2spOworZXh0ZXJuIHZvaWQJCWlwX2ZsdXNoX3BlbmRpbmdfZnJhbWVzKHN0cnVjdCBzb2NrICpzayk7CisKKy8qIGRhdGFncmFtLmMgKi8KK2V4dGVybiBpbnQJCWlwNF9kYXRhZ3JhbV9jb25uZWN0KHN0cnVjdCBzb2NrICpzaywgCisJCQkJCSAgICAgc3RydWN0IHNvY2thZGRyICp1YWRkciwgaW50IGFkZHJfbGVuKTsKKworLyoKKyAqCU1hcCBhIG11bHRpY2FzdCBJUCBvbnRvIG11bHRpY2FzdCBNQUMgZm9yIHR5cGUgVG9rZW4gUmluZy4KKyAqICAgICAgVGhpcyBjb25mb3JtcyB0byBSRkMxNDY5IE9wdGlvbiAyIE11bHRpY2FzdGluZyBpLmUuCisgKiAgICAgIHVzaW5nIGEgZnVuY3Rpb25hbCBhZGRyZXNzIHRvIHRyYW5zbWl0IC8gcmVjZWl2ZSAKKyAqICAgICAgbXVsdGljYXN0IHBhY2tldHMuCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkIGlwX3RyX21jX21hcCh1MzIgYWRkciwgY2hhciAqYnVmKQoreworCWJ1ZlswXT0weEMwOworCWJ1ZlsxXT0weDAwOworCWJ1ZlsyXT0weDAwOworCWJ1ZlszXT0weDA0OworCWJ1Zls0XT0weDAwOworCWJ1Zls1XT0weDAwOworfQorCitzdHJ1Y3QgaXBfcmVwbHlfYXJnIHsKKwlzdHJ1Y3Qga3ZlYyBpb3ZbMV07ICAgCisJdTMyIAkgICAgY3N1bTsgCisJaW50CSAgICBjc3Vtb2Zmc2V0OyAvKiB1MTYgb2Zmc2V0IG9mIGNzdW0gaW4gaW92WzBdLmlvdl9iYXNlICovCisJCQkJLyogLTEgaWYgbm90IG5lZWRlZCAqLyAKK307IAorCit2b2lkIGlwX3NlbmRfcmVwbHkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfcmVwbHlfYXJnICphcmcsCisJCSAgIHVuc2lnbmVkIGludCBsZW4pOyAKKworZXh0ZXJuIGludCBpcF9maW5pc2hfb3V0cHV0KHN0cnVjdCBza19idWZmICpza2IpOworCitzdHJ1Y3QgaXB2NF9jb25maWcKK3sKKwlpbnQJbG9nX21hcnRpYW5zOworCWludAlhdXRvY29uZmlnOworCWludAlub19wbXR1X2Rpc2M7Cit9OworCitleHRlcm4gc3RydWN0IGlwdjRfY29uZmlnIGlwdjRfY29uZmlnOworREVDTEFSRV9TTk1QX1NUQVQoc3RydWN0IGlwc3RhdHNfbWliLCBpcF9zdGF0aXN0aWNzKTsKKyNkZWZpbmUgSVBfSU5DX1NUQVRTKGZpZWxkKQkJU05NUF9JTkNfU1RBVFMoaXBfc3RhdGlzdGljcywgZmllbGQpCisjZGVmaW5lIElQX0lOQ19TVEFUU19CSChmaWVsZCkJCVNOTVBfSU5DX1NUQVRTX0JIKGlwX3N0YXRpc3RpY3MsIGZpZWxkKQorI2RlZmluZSBJUF9JTkNfU1RBVFNfVVNFUihmaWVsZCkgCVNOTVBfSU5DX1NUQVRTX1VTRVIoaXBfc3RhdGlzdGljcywgZmllbGQpCitERUNMQVJFX1NOTVBfU1RBVChzdHJ1Y3QgbGludXhfbWliLCBuZXRfc3RhdGlzdGljcyk7CisjZGVmaW5lIE5FVF9JTkNfU1RBVFMoZmllbGQpCQlTTk1QX0lOQ19TVEFUUyhuZXRfc3RhdGlzdGljcywgZmllbGQpCisjZGVmaW5lIE5FVF9JTkNfU1RBVFNfQkgoZmllbGQpCQlTTk1QX0lOQ19TVEFUU19CSChuZXRfc3RhdGlzdGljcywgZmllbGQpCisjZGVmaW5lIE5FVF9JTkNfU1RBVFNfVVNFUihmaWVsZCkgCVNOTVBfSU5DX1NUQVRTX1VTRVIobmV0X3N0YXRpc3RpY3MsIGZpZWxkKQorI2RlZmluZSBORVRfQUREX1NUQVRTX0JIKGZpZWxkLCBhZG5kKQlTTk1QX0FERF9TVEFUU19CSChuZXRfc3RhdGlzdGljcywgZmllbGQsIGFkbmQpCisjZGVmaW5lIE5FVF9BRERfU1RBVFNfVVNFUihmaWVsZCwgYWRuZCkJU05NUF9BRERfU1RBVFNfVVNFUihuZXRfc3RhdGlzdGljcywgZmllbGQsIGFkbmQpCisKK2V4dGVybiBpbnQgc3lzY3RsX2xvY2FsX3BvcnRfcmFuZ2VbMl07CitleHRlcm4gaW50IHN5c2N0bF9pcF9kZWZhdWx0X3R0bDsKKworI2lmZGVmIENPTkZJR19JTkVUCisvKiBUaGUgZnVuY3Rpb24gaW4gMi4yIHdhcyBpbnZhbGlkLCBwcm9kdWNpbmcgd3JvbmcgcmVzdWx0IGZvcgorICogY2hlY2s9MHhGRUZGLiBJdCB3YXMgbm90aWNlZCBieSBBcnRodXIgU2thd2luYSBfeWVhcl8gYWdvLiAtLUFOSygwMDA2MjUpICovCitzdGF0aWMgaW5saW5lCitpbnQgaXBfZGVjcmVhc2VfdHRsKHN0cnVjdCBpcGhkciAqaXBoKQoreworCXUzMiBjaGVjayA9IGlwaC0+Y2hlY2s7CisJY2hlY2sgKz0gaHRvbnMoMHgwMTAwKTsKKwlpcGgtPmNoZWNrID0gY2hlY2sgKyAoY2hlY2s+PTB4RkZGRik7CisJcmV0dXJuIC0taXBoLT50dGw7Cit9CisKK3N0YXRpYyBpbmxpbmUKK2ludCBpcF9kb250X2ZyYWdtZW50KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGRzdF9lbnRyeSAqZHN0KQoreworCXJldHVybiAoaW5ldF9zayhzayktPnBtdHVkaXNjID09IElQX1BNVFVESVNDX0RPIHx8CisJCShpbmV0X3NrKHNrKS0+cG10dWRpc2MgPT0gSVBfUE1UVURJU0NfV0FOVCAmJgorCQkgIShkc3RfbWV0cmljKGRzdCwgUlRBWF9MT0NLKSYoMTw8UlRBWF9NVFUpKSkpOworfQorCitleHRlcm4gdm9pZCBfX2lwX3NlbGVjdF9pZGVudChzdHJ1Y3QgaXBoZHIgKmlwaCwgc3RydWN0IGRzdF9lbnRyeSAqZHN0LCBpbnQgbW9yZSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpcF9zZWxlY3RfaWRlbnQoc3RydWN0IGlwaGRyICppcGgsIHN0cnVjdCBkc3RfZW50cnkgKmRzdCwgc3RydWN0IHNvY2sgKnNrKQoreworCWlmIChpcGgtPmZyYWdfb2ZmICYgaHRvbnMoSVBfREYpKSB7CisJCS8qIFRoaXMgaXMgb25seSB0byB3b3JrIGFyb3VuZCBidWdneSBXaW5kb3dzOTUvMjAwMAorCQkgKiBWSiBjb21wcmVzc2lvbiBpbXBsZW1lbnRhdGlvbnMuICBJZiB0aGUgSUQgZmllbGQKKwkJICogZG9lcyBub3QgY2hhbmdlLCB0aGV5IGRyb3AgZXZlcnkgb3RoZXIgcGFja2V0IGluCisJCSAqIGEgVENQIHN0cmVhbSB1c2luZyBoZWFkZXIgY29tcHJlc3Npb24uCisJCSAqLworCQlpcGgtPmlkID0gKHNrICYmIGluZXRfc2soc2spLT5kYWRkcikgPworCQkJCQlodG9ucyhpbmV0X3NrKHNrKS0+aWQrKykgOiAwOworCX0gZWxzZQorCQlfX2lwX3NlbGVjdF9pZGVudChpcGgsIGRzdCwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpcF9zZWxlY3RfaWRlbnRfbW9yZShzdHJ1Y3QgaXBoZHIgKmlwaCwgc3RydWN0IGRzdF9lbnRyeSAqZHN0LCBzdHJ1Y3Qgc29jayAqc2ssIGludCBtb3JlKQoreworCWlmIChpcGgtPmZyYWdfb2ZmICYgaHRvbnMoSVBfREYpKSB7CisJCWlmIChzayAmJiBpbmV0X3NrKHNrKS0+ZGFkZHIpIHsKKwkJCWlwaC0+aWQgPSBodG9ucyhpbmV0X3NrKHNrKS0+aWQpOworCQkJaW5ldF9zayhzayktPmlkICs9IDEgKyBtb3JlOworCQl9IGVsc2UKKwkJCWlwaC0+aWQgPSAwOworCX0gZWxzZQorCQlfX2lwX3NlbGVjdF9pZGVudChpcGgsIGRzdCwgbW9yZSk7Cit9CisKKy8qCisgKglNYXAgYSBtdWx0aWNhc3QgSVAgb250byBtdWx0aWNhc3QgTUFDIGZvciB0eXBlIGV0aGVybmV0LgorICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpcF9ldGhfbWNfbWFwKHUzMiBhZGRyLCBjaGFyICpidWYpCit7CisJYWRkcj1udG9obChhZGRyKTsKKwlidWZbMF09MHgwMTsKKwlidWZbMV09MHgwMDsKKwlidWZbMl09MHg1ZTsKKwlidWZbNV09YWRkciYweEZGOworCWFkZHI+Pj04OworCWJ1Zls0XT1hZGRyJjB4RkY7CisJYWRkcj4+PTg7CisJYnVmWzNdPWFkZHImMHg3RjsKK30KKworLyoKKyAqCU1hcCBhIG11bHRpY2FzdCBJUCBvbnRvIG11bHRpY2FzdCBNQUMgZm9yIHR5cGUgSVAtb3Zlci1JbmZpbmlCYW5kLgorICoJTGVhdmUgUF9LZXkgYXMgMCB0byBiZSBmaWxsZWQgaW4gYnkgZHJpdmVyLgorICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpcF9pYl9tY19tYXAodTMyIGFkZHIsIGNoYXIgKmJ1ZikKK3sKKwlidWZbMF0gID0gMDsJCS8qIFJlc2VydmVkICovCisJYnVmWzFdICA9IDB4ZmY7CQkvKiBNdWx0aWNhc3QgUVBOICovCisJYnVmWzJdICA9IDB4ZmY7CisJYnVmWzNdICA9IDB4ZmY7CisJYWRkciAgICA9IG50b2hsKGFkZHIpOworCWJ1Zls0XSAgPSAweGZmOworCWJ1Zls1XSAgPSAweDEyOwkJLyogbGluayBsb2NhbCBzY29wZSAqLworCWJ1Zls2XSAgPSAweDQwOwkJLyogSVB2NCBzaWduYXR1cmUgKi8KKwlidWZbN10gID0gMHgxYjsKKwlidWZbOF0gID0gMDsJCS8qIFBfS2V5ICovCisJYnVmWzldICA9IDA7CisJYnVmWzEwXSA9IDA7CisJYnVmWzExXSA9IDA7CisJYnVmWzEyXSA9IDA7CisJYnVmWzEzXSA9IDA7CisJYnVmWzE0XSA9IDA7CisJYnVmWzE1XSA9IDA7CisJYnVmWzE5XSA9IGFkZHIgJiAweGZmOworCWFkZHIgID4+PSA4OworCWJ1ZlsxOF0gPSBhZGRyICYgMHhmZjsKKwlhZGRyICA+Pj0gODsKKwlidWZbMTddID0gYWRkciAmIDB4ZmY7CisJYWRkciAgPj49IDg7CisJYnVmWzE2XSA9IGFkZHIgJiAweDBmOworfQorCisjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCisjaW5jbHVkZSA8bGludXgvaXB2Ni5oPgorI2VuZGlmCisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgaW5ldF9yZXNldF9zYWRkcihzdHJ1Y3Qgc29jayAqc2spCit7CisJaW5ldF9zayhzayktPnJjdl9zYWRkciA9IGluZXRfc2soc2spLT5zYWRkciA9IDA7CisjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCisJaWYgKHNrLT5za19mYW1pbHkgPT0gUEZfSU5FVDYpIHsKKwkJc3RydWN0IGlwdjZfcGluZm8gKm5wID0gaW5ldDZfc2soc2spOworCisJCW1lbXNldCgmbnAtPnNhZGRyLCAwLCBzaXplb2YobnAtPnNhZGRyKSk7CisJCW1lbXNldCgmbnAtPnJjdl9zYWRkciwgMCwgc2l6ZW9mKG5wLT5yY3Zfc2FkZHIpKTsKKwl9CisjZW5kaWYKK30KKworI2VuZGlmCisKK2V4dGVybiBpbnQJaXBfY2FsbF9yYV9jaGFpbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKworLyoKKyAqCUZ1bmN0aW9ucyBwcm92aWRlZCBieSBpcF9mcmFnbWVudC5vCisgKi8KKworZW51bSBpcF9kZWZyYWdfdXNlcnMKK3sKKwlJUF9ERUZSQUdfTE9DQUxfREVMSVZFUiwKKwlJUF9ERUZSQUdfQ0FMTF9SQV9DSEFJTiwKKwlJUF9ERUZSQUdfQ09OTlRSQUNLX0lOLAorCUlQX0RFRlJBR19DT05OVFJBQ0tfT1VULAorCUlQX0RFRlJBR19OQVRfT1VULAorCUlQX0RFRlJBR19WU19JTiwKKwlJUF9ERUZSQUdfVlNfT1VULAorCUlQX0RFRlJBR19WU19GV0QKK307CisKK3N0cnVjdCBza19idWZmICppcF9kZWZyYWcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHVzZXIpOworZXh0ZXJuIGludCBpcF9mcmFnX25xdWV1ZXM7CitleHRlcm4gYXRvbWljX3QgaXBfZnJhZ19tZW07CisKKy8qCisgKglGdW5jdGlvbnMgcHJvdmlkZWQgYnkgaXBfZm9yd2FyZC5jCisgKi8KKyAKK2V4dGVybiBpbnQgaXBfZm9yd2FyZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQgaXBfbmV0X3VucmVhY2hhYmxlKHN0cnVjdCBza19idWZmICpza2IpOworIAorLyoKKyAqCUZ1bmN0aW9ucyBwcm92aWRlZCBieSBpcF9vcHRpb25zLmMKKyAqLworIAorZXh0ZXJuIHZvaWQgaXBfb3B0aW9uc19idWlsZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfb3B0aW9ucyAqb3B0LCB1MzIgZGFkZHIsIHN0cnVjdCBydGFibGUgKnJ0LCBpbnQgaXNfZnJhZyk7CitleHRlcm4gaW50IGlwX29wdGlvbnNfZWNobyhzdHJ1Y3QgaXBfb3B0aW9ucyAqZG9wdCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gdm9pZCBpcF9vcHRpb25zX2ZyYWdtZW50KHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBpcF9vcHRpb25zX2NvbXBpbGUoc3RydWN0IGlwX29wdGlvbnMgKm9wdCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IGlwX29wdGlvbnNfZ2V0KHN0cnVjdCBpcF9vcHRpb25zICoqb3B0cCwgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IG9wdGxlbiwgaW50IHVzZXIpOworZXh0ZXJuIHZvaWQgaXBfb3B0aW9uc191bmRvKHN0cnVjdCBpcF9vcHRpb25zICogb3B0KTsKK2V4dGVybiB2b2lkIGlwX2ZvcndhcmRfb3B0aW9ucyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQgaXBfb3B0aW9uc19yY3Zfc3JyKHN0cnVjdCBza19idWZmICpza2IpOworCisvKgorICoJRnVuY3Rpb25zIHByb3ZpZGVkIGJ5IGlwX3NvY2tnbHVlLmMKKyAqLworCitleHRlcm4gdm9pZAlpcF9jbXNnX3JlY3Yoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQJaXBfY21zZ19zZW5kKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IGlwY21fY29va2llICppcGMpOworZXh0ZXJuIGludAlpcF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IG9wdGxlbik7CitleHRlcm4gaW50CWlwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pOworZXh0ZXJuIGludAlpcF9yYV9jb250cm9sKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgY2hhciBvbiwgdm9pZCAoKmRlc3RydWN0b3IpKHN0cnVjdCBzb2NrICopKTsKKworZXh0ZXJuIGludCAJaXBfcmVjdl9lcnJvcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbik7CitleHRlcm4gdm9pZAlpcF9pY21wX2Vycm9yKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGVyciwgCisJCQkgICAgICB1MTYgcG9ydCwgdTMyIGluZm8sIHU4ICpwYXlsb2FkKTsKK2V4dGVybiB2b2lkCWlwX2xvY2FsX2Vycm9yKHN0cnVjdCBzb2NrICpzaywgaW50IGVyciwgdTMyIGRhZGRyLCB1MTYgZHBvcnQsCisJCQkgICAgICAgdTMyIGluZm8pOworCisvKiBzeXNjdGwgaGVscGVycyAtIGFueSBzeXNjdGwgd2hpY2ggaG9sZHMgYSB2YWx1ZSB0aGF0IGVuZHMgdXAgYmVpbmcKKyAqIGZlZCBpbnRvIHRoZSByb3V0aW5nIGNhY2hlIHNob3VsZCB1c2UgdGhlc2UgaGFuZGxlcnMuCisgKi8KK2ludCBpcHY0X2RvaW50X2FuZF9mbHVzaChjdGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLAorCQkJIHN0cnVjdCBmaWxlKiBmaWxwLCB2b2lkIF9fdXNlciAqYnVmZmVyLAorCQkJIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKTsKK2ludCBpcHY0X2RvaW50X2FuZF9mbHVzaF9zdHJhdGVneShjdGxfdGFibGUgKnRhYmxlLCBpbnQgX191c2VyICpuYW1lLCBpbnQgbmxlbiwKKwkJCQkgIHZvaWQgX191c2VyICpvbGR2YWwsIHNpemVfdCBfX3VzZXIgKm9sZGxlbnAsCisJCQkJICB2b2lkIF9fdXNlciAqbmV3dmFsLCBzaXplX3QgbmV3bGVuLCAKKwkJCQkgIHZvaWQgKipjb250ZXh0KTsKKworI2VuZGlmCS8qIF9JUF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfY2hlY2tzdW0uaCBiL2luY2x1ZGUvbmV0L2lwNl9jaGVja3N1bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkZmM4ODUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9pcDZfY2hlY2tzdW0uaApAQCAtMCwwICsxLDk0IEBACisvKgorICogSU5FVAkJQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIFRDUC9JUCBwcm90b2NvbCBzdWl0ZSBmb3IgdGhlIExJTlVYCisgKgkJb3BlcmF0aW5nIHN5c3RlbS4gIElORVQgaXMgaW1wbGVtZW50ZWQgdXNpbmcgdGhlICBCU0QgU29ja2V0CisgKgkJaW50ZXJmYWNlIGFzIHRoZSBtZWFucyBvZiBjb21tdW5pY2F0aW9uIHdpdGggdGhlIHVzZXIgbGV2ZWwuCisgKgorICoJCUNoZWNrc3VtbWluZyBmdW5jdGlvbnMgZm9yIElQdjYKKyAqCisgKiBBdXRob3JzOglKb3JnZSBDd2lrLCA8am9yZ2VAbGFzZXIuc2F0bGluay5uZXQ+CisgKgkJQXJudCBHdWxicmFuZHNlbiwgPGFndWxicmFAbnZnLnVuaXQubm8+CisgKgkJQm9ycm93cyB2ZXJ5IGxpYmVyYWxseSBmcm9tIHRjcC5jIGFuZCBpcC5jLCBzZWUgdGhvc2UKKyAqCQlmaWxlcyBmb3IgbW9yZSBuYW1lcy4KKyAqCisgKgkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKgkJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKgkJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisvKgorICoJRml4ZXM6CisgKgorICoJUmFsZiBCYWVjaGxlCQkJOglnZW5lcmljIGlwdjYgY2hlY2tzdW0KKyAqCTxyYWxmQHdhbGRvcmYtZ21iaC5kZT4KKyAqLworCisjaWZuZGVmIF9DSEVDS1NVTV9JUFY2X0gKKyNkZWZpbmUgX0NIRUNLU1VNX0lQVjZfSAorCisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgPG5ldC9pcC5oPgorI2luY2x1ZGUgPGFzbS9jaGVja3N1bS5oPgorI2luY2x1ZGUgPGxpbnV4L2luNi5oPgorCisjaWZuZGVmIF9IQVZFX0FSQ0hfSVBWNl9DU1VNCisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIHNob3J0IGludCBjc3VtX2lwdjZfbWFnaWMoc3RydWN0IGluNl9hZGRyICpzYWRkciwKKwkJCQkJCSAgICAgc3RydWN0IGluNl9hZGRyICpkYWRkciwKKwkJCQkJCSAgICAgX191MTYgbGVuLAorCQkJCQkJICAgICB1bnNpZ25lZCBzaG9ydCBwcm90bywKKwkJCQkJCSAgICAgdW5zaWduZWQgaW50IGNzdW0pIAoreworCisJaW50IGNhcnJ5OworCV9fdTMyIHVsZW47CisJX191MzIgdXByb3RvOworCisJY3N1bSArPSBzYWRkci0+czZfYWRkcjMyWzBdOworCWNhcnJ5ID0gKGNzdW0gPCBzYWRkci0+czZfYWRkcjMyWzBdKTsKKwljc3VtICs9IGNhcnJ5OworCisJY3N1bSArPSBzYWRkci0+czZfYWRkcjMyWzFdOworCWNhcnJ5ID0gKGNzdW0gPCBzYWRkci0+czZfYWRkcjMyWzFdKTsKKwljc3VtICs9IGNhcnJ5OworCisJY3N1bSArPSBzYWRkci0+czZfYWRkcjMyWzJdOworCWNhcnJ5ID0gKGNzdW0gPCBzYWRkci0+czZfYWRkcjMyWzJdKTsKKwljc3VtICs9IGNhcnJ5OworCisJY3N1bSArPSBzYWRkci0+czZfYWRkcjMyWzNdOworCWNhcnJ5ID0gKGNzdW0gPCBzYWRkci0+czZfYWRkcjMyWzNdKTsKKwljc3VtICs9IGNhcnJ5OworCisJY3N1bSArPSBkYWRkci0+czZfYWRkcjMyWzBdOworCWNhcnJ5ID0gKGNzdW0gPCBkYWRkci0+czZfYWRkcjMyWzBdKTsKKwljc3VtICs9IGNhcnJ5OworCisJY3N1bSArPSBkYWRkci0+czZfYWRkcjMyWzFdOworCWNhcnJ5ID0gKGNzdW0gPCBkYWRkci0+czZfYWRkcjMyWzFdKTsKKwljc3VtICs9IGNhcnJ5OworCisJY3N1bSArPSBkYWRkci0+czZfYWRkcjMyWzJdOworCWNhcnJ5ID0gKGNzdW0gPCBkYWRkci0+czZfYWRkcjMyWzJdKTsKKwljc3VtICs9IGNhcnJ5OworCisJY3N1bSArPSBkYWRkci0+czZfYWRkcjMyWzNdOworCWNhcnJ5ID0gKGNzdW0gPCBkYWRkci0+czZfYWRkcjMyWzNdKTsKKwljc3VtICs9IGNhcnJ5OworCisJdWxlbiA9IGh0b25sKChfX3UzMikgbGVuKTsKKwljc3VtICs9IHVsZW47CisJY2FycnkgPSAoY3N1bSA8IHVsZW4pOworCWNzdW0gKz0gY2Fycnk7CisKKwl1cHJvdG8gPSBodG9ubChwcm90byk7CisJY3N1bSArPSB1cHJvdG87CisJY2FycnkgPSAoY3N1bSA8IHVwcm90byk7CisJY3N1bSArPSBjYXJyeTsKKworCXJldHVybiBjc3VtX2ZvbGQoY3N1bSk7Cit9CisKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfZmliLmggYi9pbmNsdWRlL25ldC9pcDZfZmliLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE5OTA0NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L2lwNl9maWIuaApAQCAtMCwwICsxLDE4NSBAQAorLyoKKyAqCUxpbnV4IElORVQ2IGltcGxlbWVudGF0aW9uIAorICoKKyAqCUF1dGhvcnM6CisgKglQZWRybyBSb3F1ZQkJPHJvcXVlQGRpLmZjLnVsLnB0PgkKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgICAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogICAgICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgX0lQNl9GSUJfSAorI2RlZmluZSBfSVA2X0ZJQl9ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxsaW51eC9pcHY2X3JvdXRlLmg+CisKKyNpbmNsdWRlIDxuZXQvZHN0Lmg+CisjaW5jbHVkZSA8bmV0L2Zsb3cuaD4KKyNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorCitzdHJ1Y3QgcnQ2X2luZm87CisKK3N0cnVjdCBmaWI2X25vZGUKK3sKKwlzdHJ1Y3QgZmliNl9ub2RlCSpwYXJlbnQ7CisJc3RydWN0IGZpYjZfbm9kZQkqbGVmdDsKKwlzdHJ1Y3QgZmliNl9ub2RlCSpyaWdodDsKKworCXN0cnVjdCBmaWI2X25vZGUJKnN1YnRyZWU7CisKKwlzdHJ1Y3QgcnQ2X2luZm8JCSpsZWFmOworCisJX191MTYJCQlmbl9iaXQ7CQkvKiBiaXQga2V5ICovCisJX191MTYJCQlmbl9mbGFnczsKKwlfX3UzMgkJCWZuX3Nlcm51bTsKK307CisKKworLyoKKyAqCXJvdXRpbmcgaW5mb3JtYXRpb24KKyAqCisgKi8KKworc3RydWN0IHJ0NmtleQoreworCXN0cnVjdCBpbjZfYWRkcglhZGRyOworCWludAkJcGxlbjsKK307CisKK3N0cnVjdCBydDZfaW5mbworeworCXVuaW9uIHsKKwkJc3RydWN0IGRzdF9lbnRyeQlkc3Q7CisJCXN0cnVjdCBydDZfaW5mbwkJKm5leHQ7CisJfSB1OworCisJc3RydWN0IGluZXQ2X2RldgkJKnJ0NmlfaWRldjsKKworI2RlZmluZSBydDZpX2RldgkJCXUuZHN0LmRldgorI2RlZmluZSBydDZpX25leHRob3AJCQl1LmRzdC5uZWlnaGJvdXIKKyNkZWZpbmUgcnQ2aV9leHBpcmVzCQkJdS5kc3QuZXhwaXJlcworCisJc3RydWN0IGZpYjZfbm9kZQkJKnJ0Nmlfbm9kZTsKKworCXN0cnVjdCBpbjZfYWRkcgkJCXJ0NmlfZ2F0ZXdheTsKKwkKKwl1MzIJCQkJcnQ2aV9mbGFnczsKKwl1MzIJCQkJcnQ2aV9tZXRyaWM7CisJYXRvbWljX3QJCQlydDZpX3JlZjsKKworCXN0cnVjdCBydDZrZXkJCQlydDZpX2RzdDsKKwlzdHJ1Y3QgcnQ2a2V5CQkJcnQ2aV9zcmM7CisKKwl1OAkJCQlydDZpX3Byb3RvY29sOworfTsKKworc3RydWN0IGZpYjZfd2Fsa2VyX3QKK3sKKwlzdHJ1Y3QgZmliNl93YWxrZXJfdCAqcHJldiwgKm5leHQ7CisJc3RydWN0IGZpYjZfbm9kZSAqcm9vdCwgKm5vZGU7CisJc3RydWN0IHJ0Nl9pbmZvICpsZWFmOworCXVuc2lnbmVkIGNoYXIgc3RhdGU7CisJdW5zaWduZWQgY2hhciBwcnVuZTsKKwlpbnQgKCpmdW5jKShzdHJ1Y3QgZmliNl93YWxrZXJfdCAqKTsKKwl2b2lkICphcmdzOworfTsKKworZXh0ZXJuIHN0cnVjdCBmaWI2X3dhbGtlcl90IGZpYjZfd2Fsa2VyX2xpc3Q7CitleHRlcm4gcndsb2NrX3QgZmliNl93YWxrZXJfbG9jazsKKworc3RhdGljIGlubGluZSB2b2lkIGZpYjZfd2Fsa2VyX2xpbmsoc3RydWN0IGZpYjZfd2Fsa2VyX3QgKncpCit7CisJd3JpdGVfbG9ja19iaCgmZmliNl93YWxrZXJfbG9jayk7CisJdy0+bmV4dCA9IGZpYjZfd2Fsa2VyX2xpc3QubmV4dDsKKwl3LT5wcmV2ID0gJmZpYjZfd2Fsa2VyX2xpc3Q7CisJdy0+bmV4dC0+cHJldiA9IHc7CisJdy0+cHJldi0+bmV4dCA9IHc7CisJd3JpdGVfdW5sb2NrX2JoKCZmaWI2X3dhbGtlcl9sb2NrKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZpYjZfd2Fsa2VyX3VubGluayhzdHJ1Y3QgZmliNl93YWxrZXJfdCAqdykKK3sKKwl3cml0ZV9sb2NrX2JoKCZmaWI2X3dhbGtlcl9sb2NrKTsKKwl3LT5uZXh0LT5wcmV2ID0gdy0+cHJldjsKKwl3LT5wcmV2LT5uZXh0ID0gdy0+bmV4dDsKKwl3LT5wcmV2ID0gdy0+bmV4dCA9IHc7CisJd3JpdGVfdW5sb2NrX2JoKCZmaWI2X3dhbGtlcl9sb2NrKTsKK30KKworc3RydWN0IHJ0Nl9zdGF0aXN0aWNzIHsKKwlfX3UzMgkJZmliX25vZGVzOworCV9fdTMyCQlmaWJfcm91dGVfbm9kZXM7CisJX191MzIJCWZpYl9ydF9hbGxvYzsJCS8qIHBlcm1hbmVudCByb3V0ZXMJKi8KKwlfX3UzMgkJZmliX3J0X2VudHJpZXM7CQkvKiBydCBlbnRyaWVzIGluIHRhYmxlCSovCisJX191MzIJCWZpYl9ydF9jYWNoZTsJCS8qIGNhY2hlIHJvdXRlcwkJKi8KKwlfX3UzMgkJZmliX2Rpc2NhcmRlZF9yb3V0ZXM7Cit9OworCisjZGVmaW5lIFJUTl9UTF9ST09UCTB4MDAwMQorI2RlZmluZSBSVE5fUk9PVAkweDAwMDIJCS8qIHRyZWUgcm9vdCBub2RlCQkqLworI2RlZmluZSBSVE5fUlRJTkZPCTB4MDAwNAkJLyogbm9kZSB3aXRoIHZhbGlkIHJvdXRpbmcgaW5mbwkqLworCisvKgorICoJcHJpb3JpdHkgbGV2ZWxzIChvciBtZXRyaWNzKQorICoKKyAqLworCisjZGVmaW5lIFJUUFJJX0ZJUkVXQUxMCTgJCS8qIEZpcmV3YWxsIGNvbnRyb2wgaW5mb3JtYXRpb24JKi8KKyNkZWZpbmUgUlRQUklfRkxPVwkxNgkJLyogRmxvdyBiYXNlZCBmb3J3YXJkaW5nIHJ1bGVzCSovCisjZGVmaW5lIFJUUFJJX0tFUk5fQ1RMCTMyCQkvKiBLZXJuZWwgY29udHJvbCByb3V0ZXMJKi8KKworI2RlZmluZSBSVFBSSV9VU0VSX01JTgkyNTYJCS8qIE1pbWltdW0gdXNlciBwcmlvcml0eQkqLworI2RlZmluZSBSVFBSSV9VU0VSX01BWAkxMDI0CQkvKiBNYXhpbXVtIHVzZXIgcHJpb3JpdHkJKi8KKworI2RlZmluZSBSVFBSSV9LRVJOX0RGTFQJNDA5NgkJLyogS2VybmVsIGRlZmF1bHQgcm91dGVzCSovCisKKyNkZWZpbmUJTUFYX0ZMT1dfQkFDS1RSQUNFCTMyCisKKwordHlwZWRlZiB2b2lkCQkJKCpmX3Bub2RlKShzdHJ1Y3QgZmliNl9ub2RlICpmbiwgdm9pZCAqKTsKKworZXh0ZXJuIHN0cnVjdCBmaWI2X25vZGUJCWlwNl9yb3V0aW5nX3RhYmxlOworCisvKgorICoJZXhwb3J0ZWQgZnVuY3Rpb25zCisgKi8KKworZXh0ZXJuIHN0cnVjdCBmaWI2X25vZGUJCSpmaWI2X2xvb2t1cChzdHJ1Y3QgZmliNl9ub2RlICpyb290LAorCQkJCQkgICAgIHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCisJCQkJCSAgICAgc3RydWN0IGluNl9hZGRyICpzYWRkcik7CisKK3N0cnVjdCBmaWI2X25vZGUJCSpmaWI2X2xvY2F0ZShzdHJ1Y3QgZmliNl9ub2RlICpyb290LAorCQkJCQkgICAgIHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsIGludCBkc3RfbGVuLAorCQkJCQkgICAgIHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsIGludCBzcmNfbGVuKTsKKworZXh0ZXJuIHZvaWQJCQlmaWI2X2NsZWFuX3RyZWUoc3RydWN0IGZpYjZfbm9kZSAqcm9vdCwKKwkJCQkJCWludCAoKmZ1bmMpKHN0cnVjdCBydDZfaW5mbyAqLCB2b2lkICphcmcpLAorCQkJCQkJaW50IHBydW5lLCB2b2lkICphcmcpOworCitleHRlcm4gaW50CQkJZmliNl93YWxrKHN0cnVjdCBmaWI2X3dhbGtlcl90ICp3KTsKK2V4dGVybiBpbnQJCQlmaWI2X3dhbGtfY29udGludWUoc3RydWN0IGZpYjZfd2Fsa2VyX3QgKncpOworCitleHRlcm4gaW50CQkJZmliNl9hZGQoc3RydWN0IGZpYjZfbm9kZSAqcm9vdCwKKwkJCQkJIHN0cnVjdCBydDZfaW5mbyAqcnQsCisJCQkJCSBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKKwkJCQkJIHZvaWQgKnJ0YXR0cik7CisKK2V4dGVybiBpbnQJCQlmaWI2X2RlbChzdHJ1Y3QgcnQ2X2luZm8gKnJ0LAorCQkJCQkgc3RydWN0IG5sbXNnaGRyICpubGgsCisJCQkJCSB2b2lkICpydGF0dHIpOworCitleHRlcm4gdm9pZAkJCWluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBydDZfaW5mbyAqcnQsCisJCQkJCQlzdHJ1Y3Qgbmxtc2doZHIgKm5saCk7CisKK2V4dGVybiB2b2lkCQkJZmliNl9ydW5fZ2ModW5zaWduZWQgbG9uZyBkdW1teSk7CisKK2V4dGVybiB2b2lkCQkJZmliNl9nY19jbGVhbnVwKHZvaWQpOworCitleHRlcm4gdm9pZAkJCWZpYjZfaW5pdCh2b2lkKTsKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaCBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1ZDFkZDEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaApAQCAtMCwwICsxLDE0MSBAQAorI2lmbmRlZiBfTkVUX0lQNl9ST1VURV9ICisjZGVmaW5lIF9ORVRfSVA2X1JPVVRFX0gKKworI2RlZmluZSBJUDZfUlRfUFJJT19GVwkJMTYKKyNkZWZpbmUgSVA2X1JUX1BSSU9fVVNFUgkxMDI0CisjZGVmaW5lIElQNl9SVF9QUklPX0FERFJDT05GCTI1NgorI2RlZmluZSBJUDZfUlRfUFJJT19LRVJOCTUxMgorI2RlZmluZSBJUDZfUlRfRkxPV19NQVNLCTB4MDBmZgorCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bmV0L2Zsb3cuaD4KKyNpbmNsdWRlIDxuZXQvaXA2X2ZpYi5oPgorI2luY2x1ZGUgPG5ldC9zb2NrLmg+CisjaW5jbHVkZSA8bGludXgvdGNwLmg+CisjaW5jbHVkZSA8bGludXgvaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9pcHY2Lmg+CisKK3N0cnVjdCBwb2xfY2hhaW4geworCWludAkJCXR5cGU7CisJaW50CQkJcHJpb3JpdHk7CisJc3RydWN0IGZpYjZfbm9kZQkqcnVsZXM7CisJc3RydWN0IHBvbF9jaGFpbgkqbmV4dDsKK307CisKK2V4dGVybiBzdHJ1Y3QgcnQ2X2luZm8JaXA2X251bGxfZW50cnk7CisKK2V4dGVybiBpbnQgaXA2X3J0X2djX2ludGVydmFsOworCitleHRlcm4gdm9pZAkJCWlwNl9yb3V0ZV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKworZXh0ZXJuIHN0cnVjdCBkc3RfZW50cnkgKglpcDZfcm91dGVfb3V0cHV0KHN0cnVjdCBzb2NrICpzaywKKwkJCQkJCSBzdHJ1Y3QgZmxvd2kgKmZsKTsKKworZXh0ZXJuIGludAkJCWlwNl9yb3V0ZV9tZV9oYXJkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKK2V4dGVybiB2b2lkCQkJaXA2X3JvdXRlX2luaXQodm9pZCk7CitleHRlcm4gdm9pZAkJCWlwNl9yb3V0ZV9jbGVhbnVwKHZvaWQpOworCitleHRlcm4gaW50CQkJaXB2Nl9yb3V0ZV9pb2N0bCh1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqYXJnKTsKKworZXh0ZXJuIGludAkJCWlwNl9yb3V0ZV9hZGQoc3RydWN0IGluNl9ydG1zZyAqcnRtc2csCisJCQkJCSAgICAgIHN0cnVjdCBubG1zZ2hkciAqLAorCQkJCQkgICAgICB2b2lkICpydGF0dHIpOworZXh0ZXJuIGludAkJCWlwNl9pbnNfcnQoc3RydWN0IHJ0Nl9pbmZvICosCisJCQkJCSAgIHN0cnVjdCBubG1zZ2hkciAqLAorCQkJCQkgICB2b2lkICpydGF0dHIpOworZXh0ZXJuIGludAkJCWlwNl9kZWxfcnQoc3RydWN0IHJ0Nl9pbmZvICosCisJCQkJCSAgIHN0cnVjdCBubG1zZ2hkciAqLAorCQkJCQkgICB2b2lkICpydGF0dHIpOworCitleHRlcm4gaW50CQkJaXA2X3J0X2FkZHJfYWRkKHN0cnVjdCBpbjZfYWRkciAqYWRkciwKKwkJCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCQlpbnQgYW55Y2FzdCk7CisKK2V4dGVybiBpbnQJCQlpcDZfcnRfYWRkcl9kZWwoc3RydWN0IGluNl9hZGRyICphZGRyLAorCQkJCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisKK2V4dGVybiB2b2lkCQkJcnQ2X3NuZG1zZyhpbnQgdHlwZSwgc3RydWN0IGluNl9hZGRyICpkc3QsCisJCQkJCSAgIHN0cnVjdCBpbjZfYWRkciAqc3JjLAorCQkJCQkgICBzdHJ1Y3QgaW42X2FkZHIgKmd3LAorCQkJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCAKKwkJCQkJICAgaW50IGRzdGxlbiwgaW50IHNyY2xlbiwKKwkJCQkJICAgaW50IG1ldHJpYywgX191MzIgZmxhZ3MpOworCitleHRlcm4gc3RydWN0IHJ0Nl9pbmZvCQkqcnQ2X2xvb2t1cChzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAorCQkJCQkgICAgc3RydWN0IGluNl9hZGRyICpzYWRkciwKKwkJCQkJICAgIGludCBvaWYsIGludCBmbGFncyk7CisKK2V4dGVybiBzdHJ1Y3QgZHN0X2VudHJ5ICpuZGlzY19kc3RfYWxsb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJIHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoLAorCQkJCQkgc3RydWN0IGluNl9hZGRyICphZGRyLAorCQkJCQkgaW50ICgqb3V0cHV0KShzdHJ1Y3Qgc2tfYnVmZiAqKSk7CitleHRlcm4gaW50IG5kaXNjX2RzdF9nYyhpbnQgKm1vcmUpOworZXh0ZXJuIHZvaWQgZmliNl9mb3JjZV9zdGFydF9nYyh2b2lkKTsKKworZXh0ZXJuIHN0cnVjdCBydDZfaW5mbyAqYWRkcmNvbmZfZHN0X2FsbG9jKHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYsCisJCQkJCSAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkciwKKwkJCQkJICAgaW50IGFueWNhc3QpOworCisvKgorICoJc3VwcG9ydCBmdW5jdGlvbnMgZm9yIE5ECisgKgorICovCitleHRlcm4gc3RydWN0IHJ0Nl9pbmZvICoJcnQ2X2dldF9kZmx0X3JvdXRlcihzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsCisJCQkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitleHRlcm4gc3RydWN0IHJ0Nl9pbmZvICoJcnQ2X2FkZF9kZmx0X3JvdXRlcihzdHJ1Y3QgaW42X2FkZHIgKmd3YWRkciwKKwkJCQkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKworZXh0ZXJuIHZvaWQJCQlydDZfcHVyZ2VfZGZsdF9yb3V0ZXJzKHZvaWQpOworCitleHRlcm4gdm9pZAkJCXJ0Nl9yZXNldF9kZmx0X3BvaW50ZXIoc3RydWN0IHJ0Nl9pbmZvICpydCk7CisKK2V4dGVybiB2b2lkCQkJcnQ2X3JlZGlyZWN0KHN0cnVjdCBpbjZfYWRkciAqZGVzdCwKKwkJCQkJICAgICBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLAorCQkJCQkgICAgIHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoLAorCQkJCQkgICAgIHU4ICpsbGFkZHIsCisJCQkJCSAgICAgaW50IG9uX2xpbmspOworCitleHRlcm4gdm9pZAkJCXJ0Nl9wbXR1X2Rpc2NvdmVyeShzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAorCQkJCQkJICAgc3RydWN0IGluNl9hZGRyICpzYWRkciwKKwkJCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCQkgICB1MzIgcG10dSk7CisKK3N0cnVjdCBubG1zZ2hkcjsKK3N0cnVjdCBuZXRsaW5rX2NhbGxiYWNrOworZXh0ZXJuIGludCBpbmV0Nl9kdW1wX2ZpYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpOworZXh0ZXJuIGludCBpbmV0Nl9ydG1fbmV3cm91dGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyKiBubGgsIHZvaWQgKmFyZyk7CitleHRlcm4gaW50IGluZXQ2X3J0bV9kZWxyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIqIG5saCwgdm9pZCAqYXJnKTsKK2V4dGVybiBpbnQgaW5ldDZfcnRtX2dldHJvdXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciogbmxoLCB2b2lkICphcmcpOworCitleHRlcm4gdm9pZCBydDZfaWZkb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQgcnQ2X210dV9jaGFuZ2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbXR1KTsKKworZXh0ZXJuIHJ3bG9ja190IHJ0Nl9sb2NrOworCisvKgorICoJU3RvcmUgYSBkZXN0aW5hdGlvbiBjYWNoZSBlbnRyeSBpbiBhIHNvY2tldAorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaXA2X2RzdF9zdG9yZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBkc3RfZW50cnkgKmRzdCwKKwkJCQkgICAgIHN0cnVjdCBpbjZfYWRkciAqZGFkZHIpCit7CisJc3RydWN0IGlwdjZfcGluZm8gKm5wID0gaW5ldDZfc2soc2spOworCXN0cnVjdCBydDZfaW5mbyAqcnQgPSAoc3RydWN0IHJ0Nl9pbmZvICopIGRzdDsKKworCXdyaXRlX2xvY2soJnNrLT5za19kc3RfbG9jayk7CisJX19za19kc3Rfc2V0KHNrLCBkc3QpOworCW5wLT5kYWRkcl9jYWNoZSA9IGRhZGRyOworCW5wLT5kc3RfY29va2llID0gcnQtPnJ0Nmlfbm9kZSA/IHJ0LT5ydDZpX25vZGUtPmZuX3Nlcm51bSA6IDA7CisJd3JpdGVfdW5sb2NrKCZzay0+c2tfZHN0X2xvY2spOworfQorCitzdGF0aWMgaW5saW5lIGludCBpcHY2X3VuaWNhc3RfZGVzdGluYXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgcnQ2X2luZm8gKnJ0ID0gKHN0cnVjdCBydDZfaW5mbyAqKSBza2ItPmRzdDsKKworCXJldHVybiBydC0+cnQ2aV9mbGFncyAmIFJURl9MT0NBTDsKK30KKworI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwNl90dW5uZWwuaCBiL2luY2x1ZGUvbmV0L2lwNl90dW5uZWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWM5ZGE3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQvaXA2X3R1bm5lbC5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiAkSWQkCisgKi8KKworI2lmbmRlZiBfTkVUX0lQNl9UVU5ORUxfSAorI2RlZmluZSBfTkVUX0lQNl9UVU5ORUxfSAorCisjaW5jbHVkZSA8bGludXgvaXB2Ni5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lwNl90dW5uZWwuaD4KKworLyogY2FwYWJsZSBvZiBzZW5kaW5nIHBhY2tldHMgKi8KKyNkZWZpbmUgSVA2X1ROTF9GX0NBUF9YTUlUIDB4MTAwMDAKKy8qIGNhcGFibGUgb2YgcmVjZWl2aW5nIHBhY2tldHMgKi8KKyNkZWZpbmUgSVA2X1ROTF9GX0NBUF9SQ1YgMHgyMDAwMAorCisjZGVmaW5lIElQNl9UTkxfTUFYIDEyOAorCisvKiBJUHY2IHR1bm5lbCAqLworCitzdHJ1Y3QgaXA2X3RubCB7CisJc3RydWN0IGlwNl90bmwgKm5leHQ7CS8qIG5leHQgdHVubmVsIGluIGxpc3QgKi8KKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwkvKiB2aXJ0dWFsIGRldmljZSBhc3NvY2lhdGVkIHdpdGggdHVubmVsICovCisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdDsJLyogc3RhdGlzdGljcyBmb3IgdHVubmVsIGRldmljZSAqLworCWludCByZWN1cnNpb247CQkvKiBkZXB0aCBvZiBoYXJkX3N0YXJ0X3htaXQgcmVjdXJzaW9uICovCisJc3RydWN0IGlwNl90bmxfcGFybSBwYXJtczsJLyogdHVubmVsIGNvbmZpZ3VyYXRpb24gcGFyYW10ZXJzICovCisJc3RydWN0IGZsb3dpIGZsOwkvKiBmbG93aSB0ZW1wbGF0ZSBmb3IgeG1pdCAqLworCXN0cnVjdCBkc3RfZW50cnkgKmRzdF9jYWNoZTsgICAgLyogY2FjaGVkIGRzdCAqLworCXUzMiBkc3RfY29va2llOworfTsKKworLyogVHVubmVsIGVuY2Fwc3VsYXRpb24gbGltaXQgZGVzdGluYXRpb24gc3ViLW9wdGlvbiAqLworCitzdHJ1Y3QgaXB2Nl90bHZfdG5sX2VuY19saW0geworCV9fdTggdHlwZTsJCS8qIHR5cGUtY29kZSBmb3Igb3B0aW9uICAgICAgICAgKi8KKwlfX3U4IGxlbmd0aDsJCS8qIG9wdGlvbiBsZW5ndGggICAgICAgICAgICAgICAgKi8KKwlfX3U4IGVuY2FwX2xpbWl0OwkvKiB0dW5uZWwgZW5jYXBzdWxhdGlvbiBsaW1pdCAgICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcF9maWIuaCBiL2luY2x1ZGUvbmV0L2lwX2ZpYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1YTVmNmIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9pcF9maWIuaApAQCAtMCwwICsxLDI4NCBAQAorLyoKKyAqIElORVQJCUFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBUQ1AvSVAgcHJvdG9jb2wgc3VpdGUgZm9yIHRoZSBMSU5VWAorICoJCW9wZXJhdGluZyBzeXN0ZW0uICBJTkVUICBpcyBpbXBsZW1lbnRlZCB1c2luZyB0aGUgIEJTRCBTb2NrZXQKKyAqCQlpbnRlcmZhY2UgYXMgdGhlIG1lYW5zIG9mIGNvbW11bmljYXRpb24gd2l0aCB0aGUgdXNlciBsZXZlbC4KKyAqCisgKgkJRGVmaW5pdGlvbnMgZm9yIHRoZSBGb3J3YXJkaW5nIEluZm9ybWF0aW9uIEJhc2UuCisgKgorICogQXV0aG9yczoJQS5OLkt1em5ldHNvdiwgPGt1em5ldEBtczIuaW5yLmFjLnJ1PgorICoKKyAqCQlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgkJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqCQlhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqCQkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgX05FVF9JUF9GSUJfSAorI2RlZmluZSBfTkVUX0lQX0ZJQl9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQvZmxvdy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisKKy8qIFdBUk5JTkc6IFRoZSBvcmRlcmluZyBvZiB0aGVzZSBlbGVtZW50cyBtdXN0IG1hdGNoIG9yZGVyaW5nCisgKiAgICAgICAgICBvZiBSVEFfKiBydG5ldGxpbmsgYXR0cmlidXRlIG51bWJlcnMuCisgKi8KK3N0cnVjdCBrZXJuX3J0YSB7CisJdm9pZAkJKnJ0YV9kc3Q7CisJdm9pZAkJKnJ0YV9zcmM7CisJaW50CQkqcnRhX2lpZjsKKwlpbnQJCSpydGFfb2lmOworCXZvaWQJCSpydGFfZ3c7CisJdTMyCQkqcnRhX3ByaW9yaXR5OworCXZvaWQJCSpydGFfcHJlZnNyYzsKKwlzdHJ1Y3QgcnRhdHRyCSpydGFfbXg7CisJc3RydWN0IHJ0YXR0cgkqcnRhX21wOworCXVuc2lnbmVkIGNoYXIJKnJ0YV9wcm90b2luZm87CisJdTMyCQkqcnRhX2Zsb3c7CisJc3RydWN0IHJ0YV9jYWNoZWluZm8gKnJ0YV9jaTsKKwlzdHJ1Y3QgcnRhX3Nlc3Npb24gKnJ0YV9zZXNzOworCXUzMgkJKnJ0YV9tcF9hbGc7Cit9OworCitzdHJ1Y3QgZmliX2luZm87CisKK3N0cnVjdCBmaWJfbmggeworCXN0cnVjdCBuZXRfZGV2aWNlCSpuaF9kZXY7CisJc3RydWN0IGhsaXN0X25vZGUJbmhfaGFzaDsKKwlzdHJ1Y3QgZmliX2luZm8JCSpuaF9wYXJlbnQ7CisJdW5zaWduZWQJCW5oX2ZsYWdzOworCXVuc2lnbmVkIGNoYXIJCW5oX3Njb3BlOworI2lmZGVmIENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEgKKwlpbnQJCQluaF93ZWlnaHQ7CisJaW50CQkJbmhfcG93ZXI7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfTkVUX0NMU19ST1VURQorCV9fdTMyCQkJbmhfdGNsYXNzaWQ7CisjZW5kaWYKKwlpbnQJCQluaF9vaWY7CisJdTMyCQkJbmhfZ3c7Cit9OworCisvKgorICogVGhpcyBzdHJ1Y3R1cmUgY29udGFpbnMgZGF0YSBzaGFyZWQgYnkgbWFueSBvZiByb3V0ZXMuCisgKi8KKworc3RydWN0IGZpYl9pbmZvIHsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZQlmaWJfaGFzaDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZQlmaWJfbGhhc2g7CisJaW50CQkJZmliX3RyZWVyZWY7CisJYXRvbWljX3QJCWZpYl9jbG50cmVmOworCWludAkJCWZpYl9kZWFkOworCXVuc2lnbmVkCQlmaWJfZmxhZ3M7CisJaW50CQkJZmliX3Byb3RvY29sOworCXUzMgkJCWZpYl9wcmVmc3JjOworCXUzMgkJCWZpYl9wcmlvcml0eTsKKwl1MzIJCQlmaWJfbWV0cmljc1tSVEFYX01BWF07CisjZGVmaW5lIGZpYl9tdHUgZmliX21ldHJpY3NbUlRBWF9NVFUtMV0KKyNkZWZpbmUgZmliX3dpbmRvdyBmaWJfbWV0cmljc1tSVEFYX1dJTkRPVy0xXQorI2RlZmluZSBmaWJfcnR0IGZpYl9tZXRyaWNzW1JUQVhfUlRULTFdCisjZGVmaW5lIGZpYl9hZHZtc3MgZmliX21ldHJpY3NbUlRBWF9BRFZNU1MtMV0KKwlpbnQJCQlmaWJfbmhzOworI2lmZGVmIENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEgKKwlpbnQJCQlmaWJfcG93ZXI7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIX0NBQ0hFRAorCXUzMgkJCWZpYl9tcF9hbGc7CisjZW5kaWYKKwlzdHJ1Y3QgZmliX25oCQlmaWJfbmhbMF07CisjZGVmaW5lIGZpYl9kZXYJCWZpYl9uaFswXS5uaF9kZXYKK307CisKKworI2lmZGVmIENPTkZJR19JUF9NVUxUSVBMRV9UQUJMRVMKK3N0cnVjdCBmaWJfcnVsZTsKKyNlbmRpZgorCitzdHJ1Y3QgZmliX3Jlc3VsdCB7CisJdW5zaWduZWQgY2hhcglwcmVmaXhsZW47CisJdW5zaWduZWQgY2hhcgluaF9zZWw7CisJdW5zaWduZWQgY2hhcgl0eXBlOworCXVuc2lnbmVkIGNoYXIJc2NvcGU7CisjaWZkZWYgQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSF9DQUNIRUQKKwlfX3UzMiAgICAgICAgICAgbmV0d29yazsKKwlfX3UzMiAgICAgICAgICAgbmV0bWFzazsKKyNlbmRpZgorCXN0cnVjdCBmaWJfaW5mbyAqZmk7CisjaWZkZWYgQ09ORklHX0lQX01VTFRJUExFX1RBQkxFUworCXN0cnVjdCBmaWJfcnVsZQkqcjsKKyNlbmRpZgorfTsKKworCisjaWZkZWYgQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSAorCisjZGVmaW5lIEZJQl9SRVNfTkgocmVzKQkJKChyZXMpLmZpLT5maWJfbmhbKHJlcykubmhfc2VsXSkKKyNkZWZpbmUgRklCX1JFU19SRVNFVChyZXMpCSgocmVzKS5uaF9zZWwgPSAwKQorCisjZWxzZSAvKiBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIICovCisKKyNkZWZpbmUgRklCX1JFU19OSChyZXMpCQkoKHJlcykuZmktPmZpYl9uaFswXSkKKyNkZWZpbmUgRklCX1JFU19SRVNFVChyZXMpCisKKyNlbmRpZiAvKiBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIICovCisKKyNkZWZpbmUgRklCX1JFU19QUkVGU1JDKHJlcykJCSgocmVzKS5maS0+ZmliX3ByZWZzcmMgPyA6IF9fZmliX3Jlc19wcmVmc3JjKCZyZXMpKQorI2RlZmluZSBGSUJfUkVTX0dXKHJlcykJCQkoRklCX1JFU19OSChyZXMpLm5oX2d3KQorI2RlZmluZSBGSUJfUkVTX0RFVihyZXMpCQkoRklCX1JFU19OSChyZXMpLm5oX2RldikKKyNkZWZpbmUgRklCX1JFU19PSUYocmVzKQkJKEZJQl9SRVNfTkgocmVzKS5uaF9vaWYpCisKKyNpZmRlZiBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIX0NBQ0hFRAorI2RlZmluZSBGSUJfUkVTX05FVFdPUksocmVzKQkJKChyZXMpLm5ldHdvcmspCisjZGVmaW5lIEZJQl9SRVNfTkVUTUFTSyhyZXMpCSAgICAgICAgKChyZXMpLm5ldG1hc2spCisjZWxzZSAvKiBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIX0NBQ0hFRCAqLworI2RlZmluZSBGSUJfUkVTX05FVFdPUksocmVzKQkJKDApCisjZGVmaW5lIEZJQl9SRVNfTkVUTUFTSyhyZXMpCSAgICAgICAgKDApCisjZW5kaWYgLyogQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSF9XUkFORE9NICovCisKK3N0cnVjdCBmaWJfdGFibGUgeworCXVuc2lnbmVkIGNoYXIJdGJfaWQ7CisJdW5zaWduZWQJdGJfc3RhbXA7CisJaW50CQkoKnRiX2xvb2t1cCkoc3RydWN0IGZpYl90YWJsZSAqdGIsIGNvbnN0IHN0cnVjdCBmbG93aSAqZmxwLCBzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzKTsKKwlpbnQJCSgqdGJfaW5zZXJ0KShzdHJ1Y3QgZmliX3RhYmxlICp0YWJsZSwgc3RydWN0IHJ0bXNnICpyLAorCQkJCSAgICAgc3RydWN0IGtlcm5fcnRhICpydGEsIHN0cnVjdCBubG1zZ2hkciAqbiwKKwkJCQkgICAgIHN0cnVjdCBuZXRsaW5rX3NrYl9wYXJtcyAqcmVxKTsKKwlpbnQJCSgqdGJfZGVsZXRlKShzdHJ1Y3QgZmliX3RhYmxlICp0YWJsZSwgc3RydWN0IHJ0bXNnICpyLAorCQkJCSAgICAgc3RydWN0IGtlcm5fcnRhICpydGEsIHN0cnVjdCBubG1zZ2hkciAqbiwKKwkJCQkgICAgIHN0cnVjdCBuZXRsaW5rX3NrYl9wYXJtcyAqcmVxKTsKKwlpbnQJCSgqdGJfZHVtcCkoc3RydWN0IGZpYl90YWJsZSAqdGFibGUsIHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpOworCWludAkJKCp0Yl9mbHVzaCkoc3RydWN0IGZpYl90YWJsZSAqdGFibGUpOworCXZvaWQJCSgqdGJfc2VsZWN0X2RlZmF1bHQpKHN0cnVjdCBmaWJfdGFibGUgKnRhYmxlLAorCQkJCQkgICAgIGNvbnN0IHN0cnVjdCBmbG93aSAqZmxwLCBzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzKTsKKworCXVuc2lnbmVkIGNoYXIJdGJfZGF0YVswXTsKK307CisKKyNpZm5kZWYgQ09ORklHX0lQX01VTFRJUExFX1RBQkxFUworCitleHRlcm4gc3RydWN0IGZpYl90YWJsZSAqaXBfZmliX2xvY2FsX3RhYmxlOworZXh0ZXJuIHN0cnVjdCBmaWJfdGFibGUgKmlwX2ZpYl9tYWluX3RhYmxlOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBmaWJfdGFibGUgKmZpYl9nZXRfdGFibGUoaW50IGlkKQoreworCWlmIChpZCAhPSBSVF9UQUJMRV9MT0NBTCkKKwkJcmV0dXJuIGlwX2ZpYl9tYWluX3RhYmxlOworCXJldHVybiBpcF9maWJfbG9jYWxfdGFibGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGZpYl90YWJsZSAqZmliX25ld190YWJsZShpbnQgaWQpCit7CisJcmV0dXJuIGZpYl9nZXRfdGFibGUoaWQpOworfQorCitzdGF0aWMgaW5saW5lIGludCBmaWJfbG9va3VwKGNvbnN0IHN0cnVjdCBmbG93aSAqZmxwLCBzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzKQoreworCWlmIChpcF9maWJfbG9jYWxfdGFibGUtPnRiX2xvb2t1cChpcF9maWJfbG9jYWxfdGFibGUsIGZscCwgcmVzKSAmJgorCSAgICBpcF9maWJfbWFpbl90YWJsZS0+dGJfbG9va3VwKGlwX2ZpYl9tYWluX3RhYmxlLCBmbHAsIHJlcykpCisJCXJldHVybiAtRU5FVFVOUkVBQ0g7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmaWJfc2VsZWN0X2RlZmF1bHQoY29uc3Qgc3RydWN0IGZsb3dpICpmbHAsIHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMpCit7CisJaWYgKEZJQl9SRVNfR1coKnJlcykgJiYgRklCX1JFU19OSCgqcmVzKS5uaF9zY29wZSA9PSBSVF9TQ09QRV9MSU5LKQorCQlpcF9maWJfbWFpbl90YWJsZS0+dGJfc2VsZWN0X2RlZmF1bHQoaXBfZmliX21haW5fdGFibGUsIGZscCwgcmVzKTsKK30KKworI2Vsc2UgLyogQ09ORklHX0lQX01VTFRJUExFX1RBQkxFUyAqLworI2RlZmluZSBpcF9maWJfbG9jYWxfdGFibGUgKGZpYl90YWJsZXNbUlRfVEFCTEVfTE9DQUxdKQorI2RlZmluZSBpcF9maWJfbWFpbl90YWJsZSAoZmliX3RhYmxlc1tSVF9UQUJMRV9NQUlOXSkKKworZXh0ZXJuIHN0cnVjdCBmaWJfdGFibGUgKiBmaWJfdGFibGVzW1JUX1RBQkxFX01BWCsxXTsKK2V4dGVybiBpbnQgZmliX2xvb2t1cChjb25zdCBzdHJ1Y3QgZmxvd2kgKmZscCwgc3RydWN0IGZpYl9yZXN1bHQgKnJlcyk7CitleHRlcm4gc3RydWN0IGZpYl90YWJsZSAqX19maWJfbmV3X3RhYmxlKGludCBpZCk7CitleHRlcm4gdm9pZCBmaWJfcnVsZV9wdXQoc3RydWN0IGZpYl9ydWxlICpyKTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZmliX3RhYmxlICpmaWJfZ2V0X3RhYmxlKGludCBpZCkKK3sKKwlpZiAoaWQgPT0gMCkKKwkJaWQgPSBSVF9UQUJMRV9NQUlOOworCisJcmV0dXJuIGZpYl90YWJsZXNbaWRdOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBmaWJfdGFibGUgKmZpYl9uZXdfdGFibGUoaW50IGlkKQoreworCWlmIChpZCA9PSAwKQorCQlpZCA9IFJUX1RBQkxFX01BSU47CisKKwlyZXR1cm4gZmliX3RhYmxlc1tpZF0gPyA6IF9fZmliX25ld190YWJsZShpZCk7Cit9CisKK2V4dGVybiB2b2lkIGZpYl9zZWxlY3RfZGVmYXVsdChjb25zdCBzdHJ1Y3QgZmxvd2kgKmZscCwgc3RydWN0IGZpYl9yZXN1bHQgKnJlcyk7CisKKyNlbmRpZiAvKiBDT05GSUdfSVBfTVVMVElQTEVfVEFCTEVTICovCisKKy8qIEV4cG9ydGVkIGJ5IGZpYl9mcm9udGVuZC5jICovCitleHRlcm4gdm9pZAkJaXBfZmliX2luaXQodm9pZCk7CitleHRlcm4gaW50IGluZXRfcnRtX2RlbHJvdXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciogbmxoLCB2b2lkICphcmcpOworZXh0ZXJuIGludCBpbmV0X3J0bV9uZXdyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIqIG5saCwgdm9pZCAqYXJnKTsKK2V4dGVybiBpbnQgaW5ldF9ydG1fZ2V0cm91dGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyKiBubGgsIHZvaWQgKmFyZyk7CitleHRlcm4gaW50IGluZXRfZHVtcF9maWIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKTsKK2V4dGVybiBpbnQgZmliX3ZhbGlkYXRlX3NvdXJjZSh1MzIgc3JjLCB1MzIgZHN0LCB1OCB0b3MsIGludCBvaWYsCisJCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyICpzcGVjX2RzdCwgdTMyICppdGFnKTsKK2V4dGVybiB2b2lkIGZpYl9zZWxlY3RfbXVsdGlwYXRoKGNvbnN0IHN0cnVjdCBmbG93aSAqZmxwLCBzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzKTsKKworLyogRXhwb3J0ZWQgYnkgZmliX3NlbWFudGljcy5jICovCitleHRlcm4gaW50IGlwX2ZpYl9jaGVja19kZWZhdWx0KHUzMiBndywgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitleHRlcm4gaW50IGZpYl9zeW5jX2Rvd24odTMyIGxvY2FsLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZm9yY2UpOworZXh0ZXJuIGludCBmaWJfc3luY191cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK2V4dGVybiBpbnQgZmliX2NvbnZlcnRfcnRlbnRyeShpbnQgY21kLCBzdHJ1Y3Qgbmxtc2doZHIgKm5sLCBzdHJ1Y3QgcnRtc2cgKnJ0bSwKKwkJCSAgICAgICBzdHJ1Y3Qga2Vybl9ydGEgKnJ0YSwgc3RydWN0IHJ0ZW50cnkgKnIpOworZXh0ZXJuIHUzMiAgX19maWJfcmVzX3ByZWZzcmMoc3RydWN0IGZpYl9yZXN1bHQgKnJlcyk7CisKKy8qIEV4cG9ydGVkIGJ5IGZpYl9oYXNoLmMgKi8KK2V4dGVybiBzdHJ1Y3QgZmliX3RhYmxlICpmaWJfaGFzaF9pbml0KGludCBpZCk7CisKKyNpZmRlZiBDT05GSUdfSVBfTVVMVElQTEVfVEFCTEVTCisvKiBFeHBvcnRlZCBieSBmaWJfcnVsZXMuYyAqLworCitleHRlcm4gaW50IGluZXRfcnRtX2RlbHJ1bGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyKiBubGgsIHZvaWQgKmFyZyk7CitleHRlcm4gaW50IGluZXRfcnRtX25ld3J1bGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyKiBubGgsIHZvaWQgKmFyZyk7CitleHRlcm4gaW50IGluZXRfZHVtcF9ydWxlcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpOworI2lmZGVmIENPTkZJR19ORVRfQ0xTX1JPVVRFCitleHRlcm4gdTMyIGZpYl9ydWxlc190Y2xhc3Moc3RydWN0IGZpYl9yZXN1bHQgKnJlcyk7CisjZW5kaWYKK2V4dGVybiB2b2lkIGZpYl9ydWxlc19pbml0KHZvaWQpOworI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmaWJfY29tYmluZV9pdGFnKHUzMiAqaXRhZywgc3RydWN0IGZpYl9yZXN1bHQgKnJlcykKK3sKKyNpZmRlZiBDT05GSUdfTkVUX0NMU19ST1VURQorI2lmZGVmIENPTkZJR19JUF9NVUxUSVBMRV9UQUJMRVMKKwl1MzIgcnRhZzsKKyNlbmRpZgorCSppdGFnID0gRklCX1JFU19OSCgqcmVzKS5uaF90Y2xhc3NpZDw8MTY7CisjaWZkZWYgQ09ORklHX0lQX01VTFRJUExFX1RBQkxFUworCXJ0YWcgPSBmaWJfcnVsZXNfdGNsYXNzKHJlcyk7CisJaWYgKCppdGFnID09IDApCisJCSppdGFnID0gKHJ0YWc8PDE2KTsKKwkqaXRhZyB8PSAocnRhZz4+MTYpOworI2VuZGlmCisjZW5kaWYKK30KKworZXh0ZXJuIHZvaWQgZnJlZV9maWJfaW5mbyhzdHJ1Y3QgZmliX2luZm8gKmZpKTsKKworc3RhdGljIGlubGluZSB2b2lkIGZpYl9pbmZvX3B1dChzdHJ1Y3QgZmliX2luZm8gKmZpKQoreworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZmaS0+ZmliX2NsbnRyZWYpKQorCQlmcmVlX2ZpYl9pbmZvKGZpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZpYl9yZXNfcHV0KHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMpCit7CisJaWYgKHJlcy0+ZmkpCisJCWZpYl9pbmZvX3B1dChyZXMtPmZpKTsKKyNpZmRlZiBDT05GSUdfSVBfTVVMVElQTEVfVEFCTEVTCisJaWYgKHJlcy0+cikKKwkJZmliX3J1bGVfcHV0KHJlcy0+cik7CisjZW5kaWYKK30KKworI2VuZGlmICAvKiBfTkVUX0ZJQl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcF9tcF9hbGcuaCBiL2luY2x1ZGUvbmV0L2lwX21wX2FsZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3MjI1NzMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9pcF9tcF9hbGcuaApAQCAtMCwwICsxLDk5IEBACisvKiBpcF9tcF9hbGcuaDogSVBWNCBtdWx0aXBhdGggYWxnb3JpdGhtIHN1cHBvcnQuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IEVpbmFyIEx1ZWNrIDxlbHVlY2tAZGUuaWJtLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQGRhdmVtbG9mdC5uZXQ+CisgKi8KKworI2lmbmRlZiBfTkVUX0lQX01QX0FMR19ICisjZGVmaW5lIF9ORVRfSVBfTVBfQUxHX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2lwX21wX2FsZy5oPgorI2luY2x1ZGUgPG5ldC9mbG93Lmg+CisjaW5jbHVkZSA8bmV0L3JvdXRlLmg+CisKK3N0cnVjdCBmaWJfbmg7CisKK3N0cnVjdCBpcF9tcF9hbGdfb3BzIHsKKwl2b2lkCSgqbXBfYWxnX3NlbGVjdF9yb3V0ZSkoY29uc3Qgc3RydWN0IGZsb3dpICpmbHAsCisJCQkJICAgICAgIHN0cnVjdCBydGFibGUgKnJ0aCwgc3RydWN0IHJ0YWJsZSAqKnJwKTsKKwl2b2lkCSgqbXBfYWxnX2ZsdXNoKSh2b2lkKTsKKwl2b2lkCSgqbXBfYWxnX3NldF9uaGluZm8pKF9fdTMyIG5ldHdvcmssIF9fdTMyIG5ldG1hc2ssCisJCQkJICAgICB1bnNpZ25lZCBjaGFyIHByZWZpeGxlbiwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBmaWJfbmggKm5oKTsKKwl2b2lkCSgqbXBfYWxnX3JlbW92ZSkoc3RydWN0IHJ0YWJsZSAqcnRoKTsKK307CisKK2V4dGVybiBpbnQgbXVsdGlwYXRoX2FsZ19yZWdpc3RlcihzdHJ1Y3QgaXBfbXBfYWxnX29wcyAqLCBlbnVtIGlwX21wX2FsZyk7CitleHRlcm4gdm9pZCBtdWx0aXBhdGhfYWxnX3VucmVnaXN0ZXIoc3RydWN0IGlwX21wX2FsZ19vcHMgKiwgZW51bSBpcF9tcF9hbGcpOworCitleHRlcm4gc3RydWN0IGlwX21wX2FsZ19vcHMgKmlwX21wX2FsZ190YWJsZVtdOworCitzdGF0aWMgaW5saW5lIGludCBtdWx0aXBhdGhfc2VsZWN0X3JvdXRlKGNvbnN0IHN0cnVjdCBmbG93aSAqZmxwLAorCQkJCQkgc3RydWN0IHJ0YWJsZSAqcnRoLAorCQkJCQkgc3RydWN0IHJ0YWJsZSAqKnJwKQoreworI2lmZGVmIENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEhfQ0FDSEVECisJc3RydWN0IGlwX21wX2FsZ19vcHMgKm9wcyA9IGlwX21wX2FsZ190YWJsZVtydGgtPnJ0X211bHRpcGF0aF9hbGddOworCisJLyogbXBfYWxnX3NlbGVjdF9yb3V0ZSBfTVVTVF8gYmUgaW1wbGVtZW50ZWQgKi8KKwlpZiAob3BzICYmIChydGgtPnUuZHN0LmZsYWdzICYgRFNUX0JBTEFOQ0VEKSkgeworCQlvcHMtPm1wX2FsZ19zZWxlY3Rfcm91dGUoZmxwLCBydGgsIHJwKTsKKwkJcmV0dXJuIDE7CisJfQorI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtdWx0aXBhdGhfZmx1c2godm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIX0NBQ0hFRAorCWludCBpOworCisJZm9yIChpID0gSVBfTVBfQUxHX05PTkU7IGkgPD0gSVBfTVBfQUxHX01BWDsgaSsrKSB7CisJCXN0cnVjdCBpcF9tcF9hbGdfb3BzICpvcHMgPSBpcF9tcF9hbGdfdGFibGVbaV07CisKKwkJaWYgKG9wcyAmJiBvcHMtPm1wX2FsZ19mbHVzaCkKKwkJCW9wcy0+bXBfYWxnX2ZsdXNoKCk7CisJfQorI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtdWx0aXBhdGhfc2V0X25oaW5mbyhzdHJ1Y3QgcnRhYmxlICpydGgsCisJCQkJCV9fdTMyIG5ldHdvcmssIF9fdTMyIG5ldG1hc2ssCisJCQkJCXVuc2lnbmVkIGNoYXIgcHJlZml4bGVuLAorCQkJCQljb25zdCBzdHJ1Y3QgZmliX25oICpuaCkKK3sKKyNpZmRlZiBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIX0NBQ0hFRAorCXN0cnVjdCBpcF9tcF9hbGdfb3BzICpvcHMgPSBpcF9tcF9hbGdfdGFibGVbcnRoLT5ydF9tdWx0aXBhdGhfYWxnXTsKKworCWlmIChvcHMgJiYgb3BzLT5tcF9hbGdfc2V0X25oaW5mbykKKwkJb3BzLT5tcF9hbGdfc2V0X25oaW5mbyhuZXR3b3JrLCBuZXRtYXNrLCBwcmVmaXhsZW4sIG5oKTsKKyNlbmRpZgorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbXVsdGlwYXRoX3JlbW92ZShzdHJ1Y3QgcnRhYmxlICpydGgpCit7CisjaWZkZWYgQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSF9DQUNIRUQKKwlzdHJ1Y3QgaXBfbXBfYWxnX29wcyAqb3BzID0gaXBfbXBfYWxnX3RhYmxlW3J0aC0+cnRfbXVsdGlwYXRoX2FsZ107CisKKwlpZiAob3BzICYmIG9wcy0+bXBfYWxnX3JlbW92ZSAmJgorCSAgICAocnRoLT51LmRzdC5mbGFncyAmIERTVF9CQUxBTkNFRCkpCisJCW9wcy0+bXBfYWxnX3JlbW92ZShydGgpOworI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG11bHRpcGF0aF9jb21wYXJla2V5cyhjb25zdCBzdHJ1Y3QgZmxvd2kgKmZscDEsCisJCQkJCWNvbnN0IHN0cnVjdCBmbG93aSAqZmxwMikKK3sKKwlyZXR1cm4gZmxwMS0+Zmw0X2RzdCA9PSBmbHAyLT5mbDRfZHN0ICYmCisJCWZscDEtPmZsNF9zcmMgPT0gZmxwMi0+Zmw0X3NyYyAmJgorCQlmbHAxLT5vaWYgPT0gZmxwMi0+b2lmICYmCisjaWZkZWYgQ09ORklHX0lQX1JPVVRFX0ZXTUFSSworCQlmbHAxLT5mbDRfZndtYXJrID09IGZscDItPmZsNF9md21hcmsgJiYKKyNlbmRpZgorCQkhKChmbHAxLT5mbDRfdG9zIF4gZmxwMi0+Zmw0X3RvcykgJgorCQkgIChJUFRPU19SVF9NQVNLIHwgUlRPX09OTElOSykpOworfQorCisjZW5kaWYgLyogX05FVF9JUF9NUF9BTEdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXBfdnMuaCBiL2luY2x1ZGUvbmV0L2lwX3ZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJkYTVkMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L2lwX3ZzLmgKQEAgLTAsMCArMSw5OTkgQEAKKy8qCisgKiAgICAgIElQIFZpcnR1YWwgU2VydmVyCisgKiAgICAgIGRhdGEgc3RydWN0dXJlIGFuZCBmdW5jdGlvbmFsaXR5IGRlZmluaXRpb25zCisgKi8KKworI2lmbmRlZiBfSVBfVlNfSAorI2RlZmluZSBfSVBfVlNfSAorCisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CQkvKiBGb3IgX191WFggdHlwZXMgKi8KKworI2RlZmluZSBJUF9WU19WRVJTSU9OX0NPREUJMHgwMTAyMDEKKyNkZWZpbmUgTlZFUlNJT04odmVyc2lvbikJCQlcCisJKHZlcnNpb24gPj4gMTYpICYgMHhGRiwJCQlcCisJKHZlcnNpb24gPj4gOCkgJiAweEZGLAkJCVwKKwl2ZXJzaW9uICYgMHhGRgorCisvKgorICogICAgICBWaXJ0dWFsIFNlcnZpY2UgRmxhZ3MKKyAqLworI2RlZmluZSBJUF9WU19TVkNfRl9QRVJTSVNURU5UCTB4MDAwMQkJLyogcGVyc2lzdGVudCBwb3J0ICovCisjZGVmaW5lIElQX1ZTX1NWQ19GX0hBU0hFRAkweDAwMDIJCS8qIGhhc2hlZCBlbnRyeSAqLworCisvKgorICogICAgICBEZXN0aW5hdGlvbiBTZXJ2ZXIgRmxhZ3MKKyAqLworI2RlZmluZSBJUF9WU19ERVNUX0ZfQVZBSUxBQkxFCTB4MDAwMQkJLyogc2VydmVyIGlzIGF2YWlsYWJsZSAqLworI2RlZmluZSBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQJMHgwMDAyCQkvKiBzZXJ2ZXIgaXMgb3ZlcmxvYWRlZCAqLworCisvKgorICogICAgICBJUFZTIHN5bmMgZGFlbW9uIHN0YXRlcworICovCisjZGVmaW5lIElQX1ZTX1NUQVRFX05PTkUJMHgwMDAwCQkvKiBkYWVtb24gaXMgc3RvcHBlZCAqLworI2RlZmluZSBJUF9WU19TVEFURV9NQVNURVIJMHgwMDAxCQkvKiBzdGFydGVkIGFzIG1hc3RlciAqLworI2RlZmluZSBJUF9WU19TVEFURV9CQUNLVVAJMHgwMDAyCQkvKiBzdGFydGVkIGFzIGJhY2t1cCAqLworCisvKgorICogICAgICBJUFZTIHNvY2tldCBvcHRpb25zCisgKi8KKyNkZWZpbmUgSVBfVlNfQkFTRV9DVEwJCSg2NCsxMDI0KzY0KQkJLyogYmFzZSAqLworCisjZGVmaW5lIElQX1ZTX1NPX1NFVF9OT05FCUlQX1ZTX0JBU0VfQ1RMCQkvKiBqdXN0IHBlZWsgKi8KKyNkZWZpbmUgSVBfVlNfU09fU0VUX0lOU0VSVAkoSVBfVlNfQkFTRV9DVEwrMSkKKyNkZWZpbmUgSVBfVlNfU09fU0VUX0FERAkoSVBfVlNfQkFTRV9DVEwrMikKKyNkZWZpbmUgSVBfVlNfU09fU0VUX0VESVQJKElQX1ZTX0JBU0VfQ1RMKzMpCisjZGVmaW5lIElQX1ZTX1NPX1NFVF9ERUwJKElQX1ZTX0JBU0VfQ1RMKzQpCisjZGVmaW5lIElQX1ZTX1NPX1NFVF9GTFVTSAkoSVBfVlNfQkFTRV9DVEwrNSkKKyNkZWZpbmUgSVBfVlNfU09fU0VUX0xJU1QJKElQX1ZTX0JBU0VfQ1RMKzYpCisjZGVmaW5lIElQX1ZTX1NPX1NFVF9BRERERVNUCShJUF9WU19CQVNFX0NUTCs3KQorI2RlZmluZSBJUF9WU19TT19TRVRfREVMREVTVAkoSVBfVlNfQkFTRV9DVEwrOCkKKyNkZWZpbmUgSVBfVlNfU09fU0VUX0VESVRERVNUCShJUF9WU19CQVNFX0NUTCs5KQorI2RlZmluZSBJUF9WU19TT19TRVRfVElNRU9VVAkoSVBfVlNfQkFTRV9DVEwrMTApCisjZGVmaW5lIElQX1ZTX1NPX1NFVF9TVEFSVERBRU1PTiAoSVBfVlNfQkFTRV9DVEwrMTEpCisjZGVmaW5lIElQX1ZTX1NPX1NFVF9TVE9QREFFTU9OIChJUF9WU19CQVNFX0NUTCsxMikKKyNkZWZpbmUgSVBfVlNfU09fU0VUX1JFU1RPUkUgICAgKElQX1ZTX0JBU0VfQ1RMKzEzKQorI2RlZmluZSBJUF9WU19TT19TRVRfU0FWRSAgICAgICAoSVBfVlNfQkFTRV9DVEwrMTQpCisjZGVmaW5lIElQX1ZTX1NPX1NFVF9aRVJPCShJUF9WU19CQVNFX0NUTCsxNSkKKyNkZWZpbmUgSVBfVlNfU09fU0VUX01BWAlJUF9WU19TT19TRVRfWkVSTworCisjZGVmaW5lIElQX1ZTX1NPX0dFVF9WRVJTSU9OCUlQX1ZTX0JBU0VfQ1RMCisjZGVmaW5lIElQX1ZTX1NPX0dFVF9JTkZPCShJUF9WU19CQVNFX0NUTCsxKQorI2RlZmluZSBJUF9WU19TT19HRVRfU0VSVklDRVMJKElQX1ZTX0JBU0VfQ1RMKzIpCisjZGVmaW5lIElQX1ZTX1NPX0dFVF9TRVJWSUNFCShJUF9WU19CQVNFX0NUTCszKQorI2RlZmluZSBJUF9WU19TT19HRVRfREVTVFMJKElQX1ZTX0JBU0VfQ1RMKzQpCisjZGVmaW5lIElQX1ZTX1NPX0dFVF9ERVNUCShJUF9WU19CQVNFX0NUTCs1KQkvKiBub3QgdXNlZCBub3cgKi8KKyNkZWZpbmUgSVBfVlNfU09fR0VUX1RJTUVPVVQJKElQX1ZTX0JBU0VfQ1RMKzYpCisjZGVmaW5lIElQX1ZTX1NPX0dFVF9EQUVNT04JKElQX1ZTX0JBU0VfQ1RMKzcpCisjZGVmaW5lIElQX1ZTX1NPX0dFVF9NQVgJSVBfVlNfU09fR0VUX0RBRU1PTgorCisKKy8qCisgKiAgICAgIElQVlMgQ29ubmVjdGlvbiBGbGFncworICovCisjZGVmaW5lIElQX1ZTX0NPTk5fRl9GV0RfTUFTSwkweDAwMDcJCS8qIG1hc2sgZm9yIHRoZSBmd2QgbWV0aG9kcyAqLworI2RlZmluZSBJUF9WU19DT05OX0ZfTUFTUQkweDAwMDAJCS8qIG1hc3F1ZXJhZGluZy9OQVQgKi8KKyNkZWZpbmUgSVBfVlNfQ09OTl9GX0xPQ0FMTk9ERQkweDAwMDEJCS8qIGxvY2FsIG5vZGUgKi8KKyNkZWZpbmUgSVBfVlNfQ09OTl9GX1RVTk5FTAkweDAwMDIJCS8qIHR1bm5lbGluZyAqLworI2RlZmluZSBJUF9WU19DT05OX0ZfRFJPVVRFCTB4MDAwMwkJLyogZGlyZWN0IHJvdXRpbmcgKi8KKyNkZWZpbmUgSVBfVlNfQ09OTl9GX0JZUEFTUwkweDAwMDQJCS8qIGNhY2hlIGJ5cGFzcyAqLworI2RlZmluZSBJUF9WU19DT05OX0ZfU1lOQwkweDAwMjAJCS8qIGVudHJ5IGNyZWF0ZWQgYnkgc3luYyAqLworI2RlZmluZSBJUF9WU19DT05OX0ZfSEFTSEVECTB4MDA0MAkJLyogaGFzaGVkIGVudHJ5ICovCisjZGVmaW5lIElQX1ZTX0NPTk5fRl9OT09VVFBVVAkweDAwODAJCS8qIG5vIG91dHB1dCBwYWNrZXRzICovCisjZGVmaW5lIElQX1ZTX0NPTk5fRl9JTkFDVElWRQkweDAxMDAJCS8qIG5vdCBlc3RhYmxpc2hlZCAqLworI2RlZmluZSBJUF9WU19DT05OX0ZfT1VUX1NFUQkweDAyMDAJCS8qIG11c3QgZG8gb3V0cHV0IHNlcSBhZGp1c3QgKi8KKyNkZWZpbmUgSVBfVlNfQ09OTl9GX0lOX1NFUQkweDA0MDAJCS8qIG11c3QgZG8gaW5wdXQgc2VxIGFkanVzdCAqLworI2RlZmluZSBJUF9WU19DT05OX0ZfU0VRX01BU0sJMHgwNjAwCQkvKiBpbi9vdXQgc2VxdWVuY2UgbWFzayAqLworI2RlZmluZSBJUF9WU19DT05OX0ZfTk9fQ1BPUlQJMHgwODAwCQkvKiBubyBjbGllbnQgcG9ydCBzZXQgeWV0ICovCisKKy8qIE1vdmUgaXQgdG8gYmV0dGVyIHBsYWNlIG9uZSBkYXksIGZvciBub3cga2VlcCBpdCB1bmlxdWUgKi8KKyNkZWZpbmUgTkZDX0lQVlNfUFJPUEVSVFkJMHgxMDAwMAorCisjZGVmaW5lIElQX1ZTX1NDSEVETkFNRV9NQVhMRU4JMTYKKyNkZWZpbmUgSVBfVlNfSUZOQU1FX01BWExFTgkxNgorCisKKy8qCisgKglUaGUgc3RydWN0IGlwX3ZzX3NlcnZpY2VfdXNlciBhbmQgc3RydWN0IGlwX3ZzX2Rlc3RfdXNlciBhcmUKKyAqCXVzZWQgdG8gc2V0IElQVlMgcnVsZXMgdGhyb3VnaCBzZXRzb2Nrb3B0LgorICovCitzdHJ1Y3QgaXBfdnNfc2VydmljZV91c2VyIHsKKwkvKiB2aXJ0dWFsIHNlcnZpY2UgYWRkcmVzc2VzICovCisJdV9pbnQxNl90CQlwcm90b2NvbDsKKwl1X2ludDMyX3QJCWFkZHI7CQkvKiB2aXJ0dWFsIGlwIGFkZHJlc3MgKi8KKwl1X2ludDE2X3QJCXBvcnQ7CisJdV9pbnQzMl90CQlmd21hcms7CQkvKiBmaXJ3YWxsIG1hcmsgb2Ygc2VydmljZSAqLworCisJLyogdmlydHVhbCBzZXJ2aWNlIG9wdGlvbnMgKi8KKwljaGFyCQkJc2NoZWRfbmFtZVtJUF9WU19TQ0hFRE5BTUVfTUFYTEVOXTsKKwl1bnNpZ25lZAkJZmxhZ3M7CQkvKiB2aXJ0dWFsIHNlcnZpY2UgZmxhZ3MgKi8KKwl1bnNpZ25lZAkJdGltZW91dDsJLyogcGVyc2lzdGVudCB0aW1lb3V0IGluIHNlYyAqLworCXVfaW50MzJfdAkJbmV0bWFzazsJLyogcGVyc2lzdGVudCBuZXRtYXNrICovCit9OworCisKK3N0cnVjdCBpcF92c19kZXN0X3VzZXIgeworCS8qIGRlc3RpbmF0aW9uIHNlcnZlciBhZGRyZXNzICovCisJdV9pbnQzMl90CQlhZGRyOworCXVfaW50MTZfdAkJcG9ydDsKKworCS8qIHJlYWwgc2VydmVyIG9wdGlvbnMgKi8KKwl1bnNpZ25lZAkJY29ubl9mbGFnczsJLyogY29ubmVjdGlvbiBmbGFncyAqLworCWludAkJCXdlaWdodDsJCS8qIGRlc3RpbmF0aW9uIHdlaWdodCAqLworCisJLyogdGhyZXNob2xkcyBmb3IgYWN0aXZlIGNvbm5lY3Rpb25zICovCisJdV9pbnQzMl90CQl1X3RocmVzaG9sZDsJLyogdXBwZXIgdGhyZXNob2xkICovCisJdV9pbnQzMl90CQlsX3RocmVzaG9sZDsJLyogbG93ZXIgdGhyZXNob2xkICovCit9OworCisKKy8qCisgKglJUFZTIHN0YXRpc3RpY3Mgb2JqZWN0IChmb3IgdXNlciBzcGFjZSkKKyAqLworc3RydWN0IGlwX3ZzX3N0YXRzX3VzZXIKK3sKKwlfX3UzMiAgICAgICAgICAgICAgICAgICBjb25uczsgICAgICAgICAgLyogY29ubmVjdGlvbnMgc2NoZWR1bGVkICovCisJX191MzIgICAgICAgICAgICAgICAgICAgaW5wa3RzOyAgICAgICAgIC8qIGluY29taW5nIHBhY2tldHMgKi8KKwlfX3UzMiAgICAgICAgICAgICAgICAgICBvdXRwa3RzOyAgICAgICAgLyogb3V0Z29pbmcgcGFja2V0cyAqLworCV9fdTY0ICAgICAgICAgICAgICAgICAgIGluYnl0ZXM7ICAgICAgICAvKiBpbmNvbWluZyBieXRlcyAqLworCV9fdTY0ICAgICAgICAgICAgICAgICAgIG91dGJ5dGVzOyAgICAgICAvKiBvdXRnb2luZyBieXRlcyAqLworCisJX191MzIJCQljcHM7CQkvKiBjdXJyZW50IGNvbm5lY3Rpb24gcmF0ZSAqLworCV9fdTMyCQkJaW5wcHM7CQkvKiBjdXJyZW50IGluIHBhY2tldCByYXRlICovCisJX191MzIJCQlvdXRwcHM7CQkvKiBjdXJyZW50IG91dCBwYWNrZXQgcmF0ZSAqLworCV9fdTMyCQkJaW5icHM7CQkvKiBjdXJyZW50IGluIGJ5dGUgcmF0ZSAqLworCV9fdTMyCQkJb3V0YnBzOwkJLyogY3VycmVudCBvdXQgYnl0ZSByYXRlICovCit9OworCisKKy8qIFRoZSBhcmd1bWVudCB0byBJUF9WU19TT19HRVRfSU5GTyAqLworc3RydWN0IGlwX3ZzX2dldGluZm8geworCS8qIHZlcnNpb24gbnVtYmVyICovCisJdW5zaWduZWQgaW50CQl2ZXJzaW9uOworCisJLyogc2l6ZSBvZiBjb25uZWN0aW9uIGhhc2ggdGFibGUgKi8KKwl1bnNpZ25lZCBpbnQJCXNpemU7CisKKwkvKiBudW1iZXIgb2YgdmlydHVhbCBzZXJ2aWNlcyAqLworCXVuc2lnbmVkIGludAkJbnVtX3NlcnZpY2VzOworfTsKKworCisvKiBUaGUgYXJndW1lbnQgdG8gSVBfVlNfU09fR0VUX1NFUlZJQ0UgKi8KK3N0cnVjdCBpcF92c19zZXJ2aWNlX2VudHJ5IHsKKwkvKiB3aGljaCBzZXJ2aWNlOiB1c2VyIGZpbGxzIGluIHRoZXNlICovCisJdV9pbnQxNl90CQlwcm90b2NvbDsKKwl1X2ludDMyX3QJCWFkZHI7CQkvKiB2aXJ0dWFsIGFkZHJlc3MgKi8KKwl1X2ludDE2X3QJCXBvcnQ7CisJdV9pbnQzMl90CQlmd21hcms7CQkvKiBmaXJ3YWxsIG1hcmsgb2Ygc2VydmljZSAqLworCisJLyogc2VydmljZSBvcHRpb25zICovCisJY2hhcgkJCXNjaGVkX25hbWVbSVBfVlNfU0NIRUROQU1FX01BWExFTl07CisJdW5zaWduZWQJCWZsYWdzOyAgICAgICAgICAvKiB2aXJ0dWFsIHNlcnZpY2UgZmxhZ3MgKi8KKwl1bnNpZ25lZAkJdGltZW91dDsJLyogcGVyc2lzdGVudCB0aW1lb3V0ICovCisJdV9pbnQzMl90CQluZXRtYXNrOwkvKiBwZXJzaXN0ZW50IG5ldG1hc2sgKi8KKworCS8qIG51bWJlciBvZiByZWFsIHNlcnZlcnMgKi8KKwl1bnNpZ25lZCBpbnQJCW51bV9kZXN0czsKKworCS8qIHN0YXRpc3RpY3MgKi8KKwlzdHJ1Y3QgaXBfdnNfc3RhdHNfdXNlciBzdGF0czsKK307CisKKworc3RydWN0IGlwX3ZzX2Rlc3RfZW50cnkgeworCXVfaW50MzJfdAkJYWRkcjsJCS8qIGRlc3RpbmF0aW9uIGFkZHJlc3MgKi8KKwl1X2ludDE2X3QJCXBvcnQ7CisJdW5zaWduZWQJCWNvbm5fZmxhZ3M7CS8qIGNvbm5lY3Rpb24gZmxhZ3MgKi8KKwlpbnQJCQl3ZWlnaHQ7CQkvKiBkZXN0aW5hdGlvbiB3ZWlnaHQgKi8KKworCXVfaW50MzJfdAkJdV90aHJlc2hvbGQ7CS8qIHVwcGVyIHRocmVzaG9sZCAqLworCXVfaW50MzJfdAkJbF90aHJlc2hvbGQ7CS8qIGxvd2VyIHRocmVzaG9sZCAqLworCisJdV9pbnQzMl90CQlhY3RpdmVjb25uczsJLyogYWN0aXZlIGNvbm5lY3Rpb25zICovCisJdV9pbnQzMl90CQlpbmFjdGNvbm5zOwkvKiBpbmFjdGl2ZSBjb25uZWN0aW9ucyAqLworCXVfaW50MzJfdAkJcGVyc2lzdGNvbm5zOwkvKiBwZXJzaXN0ZW50IGNvbm5lY3Rpb25zICovCisKKwkvKiBzdGF0aXN0aWNzICovCisJc3RydWN0IGlwX3ZzX3N0YXRzX3VzZXIgc3RhdHM7Cit9OworCisKKy8qIFRoZSBhcmd1bWVudCB0byBJUF9WU19TT19HRVRfREVTVFMgKi8KK3N0cnVjdCBpcF92c19nZXRfZGVzdHMgeworCS8qIHdoaWNoIHNlcnZpY2U6IHVzZXIgZmlsbHMgaW4gdGhlc2UgKi8KKwl1X2ludDE2X3QJCXByb3RvY29sOworCXVfaW50MzJfdAkJYWRkcjsJCS8qIHZpcnR1YWwgYWRkcmVzcyAqLworCXVfaW50MTZfdAkJcG9ydDsKKwl1X2ludDMyX3QJCWZ3bWFyazsJCS8qIGZpcndhbGwgbWFyayBvZiBzZXJ2aWNlICovCisKKwkvKiBudW1iZXIgb2YgcmVhbCBzZXJ2ZXJzICovCisJdW5zaWduZWQgaW50CQludW1fZGVzdHM7CisKKwkvKiB0aGUgcmVhbCBzZXJ2ZXJzICovCisJc3RydWN0IGlwX3ZzX2Rlc3RfZW50cnkJZW50cnl0YWJsZVswXTsKK307CisKKworLyogVGhlIGFyZ3VtZW50IHRvIElQX1ZTX1NPX0dFVF9TRVJWSUNFUyAqLworc3RydWN0IGlwX3ZzX2dldF9zZXJ2aWNlcyB7CisJLyogbnVtYmVyIG9mIHZpcnR1YWwgc2VydmljZXMgKi8KKwl1bnNpZ25lZCBpbnQJCW51bV9zZXJ2aWNlczsKKworCS8qIHNlcnZpY2UgdGFibGUgKi8KKwlzdHJ1Y3QgaXBfdnNfc2VydmljZV9lbnRyeSBlbnRyeXRhYmxlWzBdOworfTsKKworCisvKiBUaGUgYXJndW1lbnQgdG8gSVBfVlNfU09fR0VUX1RJTUVPVVQgKi8KK3N0cnVjdCBpcF92c190aW1lb3V0X3VzZXIgeworCWludAkJCXRjcF90aW1lb3V0OworCWludAkJCXRjcF9maW5fdGltZW91dDsKKwlpbnQJCQl1ZHBfdGltZW91dDsKK307CisKKworLyogVGhlIGFyZ3VtZW50IHRvIElQX1ZTX1NPX0dFVF9EQUVNT04gKi8KK3N0cnVjdCBpcF92c19kYWVtb25fdXNlciB7CisJLyogc3luYyBkYWVtb24gc3RhdGUgKG1hc3Rlci9iYWNrdXApICovCisJaW50CQkJc3RhdGU7CisKKwkvKiBtdWx0aWNhc3QgaW50ZXJmYWNlIG5hbWUgKi8KKwljaGFyCQkJbWNhc3RfaWZuW0lQX1ZTX0lGTkFNRV9NQVhMRU5dOworCisJLyogU3luY0lEIHdlIGJlbG9uZyB0byAqLworCWludAkJCXN5bmNpZDsKK307CisKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4gICAgICAgICAgICAgICAgIC8qIGZvciBzdHJ1Y3QgbGlzdF9oZWFkICovCisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4gICAgICAgICAgICAgLyogZm9yIHN0cnVjdCByd2xvY2tfdCAqLworI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPiAgICAgICAgICAgICAgIC8qIGZvciBzdHJ1Y3Qgc2tfYnVmZiAqLworI2luY2x1ZGUgPGxpbnV4L2lwLmg+ICAgICAgICAgICAgICAgICAgIC8qIGZvciBzdHJ1Y3QgaXBoZHIgKi8KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+ICAgICAgICAgICAgICAgICAvKiBmb3Igc3RydWN0IGF0b21pY190ICovCisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CQkvKiBmb3Igc3RydWN0IG5laWdoYm91ciAqLworI2luY2x1ZGUgPG5ldC9kc3QuaD4JCQkvKiBmb3Igc3RydWN0IGRzdF9lbnRyeSAqLworI2luY2x1ZGUgPG5ldC90Y3AuaD4KKyNpbmNsdWRlIDxuZXQvdWRwLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKworCisjaWZkZWYgQ09ORklHX0lQX1ZTX0RFQlVHCitleHRlcm4gaW50IGlwX3ZzX2dldF9kZWJ1Z19sZXZlbCh2b2lkKTsKKyNkZWZpbmUgSVBfVlNfREJHKGxldmVsLCBtc2cuLi4pCQkJXAorICAgIGRvIHsJCQkJCQlcCisJICAgIGlmIChsZXZlbCA8PSBpcF92c19nZXRfZGVidWdfbGV2ZWwoKSkJXAorCQkgICAgcHJpbnRrKEtFUk5fREVCVUcgIklQVlM6ICIgbXNnKTsJXAorICAgIH0gd2hpbGUgKDApCisjZGVmaW5lIElQX1ZTX0RCR19STChtc2cuLi4pCQkJCVwKKyAgICBkbyB7CQkJCQkJXAorCSAgICBpZiAobmV0X3JhdGVsaW1pdCgpKQkJCVwKKwkJICAgIHByaW50ayhLRVJOX0RFQlVHICJJUFZTOiAiIG1zZyk7CVwKKyAgICB9IHdoaWxlICgwKQorI2RlZmluZSBJUF9WU19EQkdfUEtUKGxldmVsLCBwcCwgc2tiLCBvZnMsIG1zZykJCVwKKyAgICBkbyB7CQkJCQkJXAorCSAgICBpZiAobGV2ZWwgPD0gaXBfdnNfZ2V0X2RlYnVnX2xldmVsKCkpCVwKKwkJcHAtPmRlYnVnX3BhY2tldChwcCwgc2tiLCBvZnMsIG1zZyk7CVwKKyAgICB9IHdoaWxlICgwKQorI2RlZmluZSBJUF9WU19EQkdfUkxfUEtUKGxldmVsLCBwcCwgc2tiLCBvZnMsIG1zZykJXAorICAgIGRvIHsJCQkJCQlcCisJICAgIGlmIChsZXZlbCA8PSBpcF92c19nZXRfZGVidWdfbGV2ZWwoKSAmJglcCisJCW5ldF9yYXRlbGltaXQoKSkJCQlcCisJCXBwLT5kZWJ1Z19wYWNrZXQocHAsIHNrYiwgb2ZzLCBtc2cpOwlcCisgICAgfSB3aGlsZSAoMCkKKyNlbHNlCS8qIE5PIERFQlVHR0lORyBhdCBBTEwgKi8KKyNkZWZpbmUgSVBfVlNfREJHKGxldmVsLCBtc2cuLi4pICBkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgSVBfVlNfREJHX1JMKG1zZy4uLikgIGRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBJUF9WU19EQkdfUEtUKGxldmVsLCBwcCwgc2tiLCBvZnMsIG1zZykJCWRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBJUF9WU19EQkdfUkxfUEtUKGxldmVsLCBwcCwgc2tiLCBvZnMsIG1zZykJZG8ge30gd2hpbGUgKDApCisjZW5kaWYKKworI2RlZmluZSBJUF9WU19CVUcoKSBCVUcoKQorI2RlZmluZSBJUF9WU19FUlIobXNnLi4uKSBwcmludGsoS0VSTl9FUlIgIklQVlM6ICIgbXNnKQorI2RlZmluZSBJUF9WU19JTkZPKG1zZy4uLikgcHJpbnRrKEtFUk5fSU5GTyAiSVBWUzogIiBtc2cpCisjZGVmaW5lIElQX1ZTX1dBUk5JTkcobXNnLi4uKSBcCisJcHJpbnRrKEtFUk5fV0FSTklORyAiSVBWUzogIiBtc2cpCisjZGVmaW5lIElQX1ZTX0VSUl9STChtc2cuLi4pCQkJCVwKKyAgICBkbyB7CQkJCQkJXAorCSAgICBpZiAobmV0X3JhdGVsaW1pdCgpKQkJCVwKKwkJICAgIHByaW50ayhLRVJOX0VSUiAiSVBWUzogIiBtc2cpOwlcCisgICAgfSB3aGlsZSAoMCkKKworI2lmZGVmIENPTkZJR19JUF9WU19ERUJVRworI2RlZmluZSBFbnRlckZ1bmN0aW9uKGxldmVsKQkJCQkJCVwKKyAgICBkbyB7CQkJCQkJCQlcCisJICAgIGlmIChsZXZlbCA8PSBpcF92c19nZXRfZGVidWdfbGV2ZWwoKSkJCQlcCisJCSAgICBwcmludGsoS0VSTl9ERUJVRyAiRW50ZXI6ICVzLCAlcyBsaW5lICVpXG4iLAlcCisJCQkgICBfX0ZVTkNUSU9OX18sIF9fRklMRV9fLCBfX0xJTkVfXyk7CQlcCisgICAgfSB3aGlsZSAoMCkKKyNkZWZpbmUgTGVhdmVGdW5jdGlvbihsZXZlbCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgaWYgKGxldmVsIDw9IGlwX3ZzX2dldF9kZWJ1Z19sZXZlbCgpKSAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJcHJpbnRrKEtFUk5fREVCVUcgIkxlYXZlOiAlcywgJXMgbGluZSAlaVxuIiwgICAgXAorCQkJICAgICAgIF9fRlVOQ1RJT05fXywgX19GSUxFX18sIF9fTElORV9fKTsgICAgICAgXAorICAgIH0gd2hpbGUgKDApCisjZWxzZQorI2RlZmluZSBFbnRlckZ1bmN0aW9uKGxldmVsKSAgIGRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBMZWF2ZUZ1bmN0aW9uKGxldmVsKSAgIGRvIHt9IHdoaWxlICgwKQorI2VuZGlmCisKKyNkZWZpbmUJSVBfVlNfV0FJVF9XSElMRShleHByKQl3aGlsZSAoZXhwcikgeyBjcHVfcmVsYXgoKTsgfQorCisKKy8qCisgKiAgICAgIFRoZSBwb3J0IG51bWJlciBvZiBGVFAgc2VydmljZSAoaW4gbmV0d29yayBvcmRlcikuCisgKi8KKyNkZWZpbmUgRlRQUE9SVCAgX19jb25zdGFudF9odG9ucygyMSkKKyNkZWZpbmUgRlRQREFUQSAgX19jb25zdGFudF9odG9ucygyMCkKKworLyoKKyAqICAgICAgSVBWUyBzeXNjdGwgdmFyaWFibGVzIHVuZGVyIHRoZSAvcHJvYy9zeXMvbmV0L2lwdjQvdnMvCisgKi8KKyNkZWZpbmUgTkVUX0lQVjRfVlMgICAgICAgICAgICAgIDIxCisKK2VudW0geworCU5FVF9JUFY0X1ZTX0RFQlVHX0xFVkVMPTEsCisJTkVUX0lQVjRfVlNfQU1FTVRIUkVTSD0yLAorCU5FVF9JUFY0X1ZTX0FNRFJPUFJBVEU9MywKKwlORVRfSVBWNF9WU19EUk9QX0VOVFJZPTQsCisJTkVUX0lQVjRfVlNfRFJPUF9QQUNLRVQ9NSwKKwlORVRfSVBWNF9WU19TRUNVUkVfVENQPTYsCisJTkVUX0lQVjRfVlNfVE9fRVM9NywKKwlORVRfSVBWNF9WU19UT19TUz04LAorCU5FVF9JUFY0X1ZTX1RPX1NSPTksCisJTkVUX0lQVjRfVlNfVE9fRlc9MTAsCisJTkVUX0lQVjRfVlNfVE9fVFc9MTEsCisJTkVUX0lQVjRfVlNfVE9fQ0w9MTIsCisJTkVUX0lQVjRfVlNfVE9fQ1c9MTMsCisJTkVUX0lQVjRfVlNfVE9fTEE9MTQsCisJTkVUX0lQVjRfVlNfVE9fTEk9MTUsCisJTkVUX0lQVjRfVlNfVE9fU0E9MTYsCisJTkVUX0lQVjRfVlNfVE9fVURQPTE3LAorCU5FVF9JUFY0X1ZTX1RPX0lDTVA9MTgsCisJTkVUX0lQVjRfVlNfTEJMQ19FWFBJUkU9MTksCisJTkVUX0lQVjRfVlNfTEJMQ1JfRVhQSVJFPTIwLAorCU5FVF9JUFY0X1ZTX0NBQ0hFX0JZUEFTUz0yMiwKKwlORVRfSVBWNF9WU19FWFBJUkVfTk9ERVNUX0NPTk49MjMsCisJTkVUX0lQVjRfVlNfU1lOQ19USFJFU0hPTEQ9MjQsCisJTkVUX0lQVjRfVlNfTkFUX0lDTVBfU0VORD0yNSwKKwlORVRfSVBWNF9WU19FWFBJUkVfUVVJRVNDRU5UX1RFTVBMQVRFPTI2LAorCU5FVF9JUFY0X1ZTX0xBU1QKK307CisKKy8qCisgKiAgICAgIFRDUCBTdGF0ZSBWYWx1ZXMKKyAqLworZW51bSB7CisJSVBfVlNfVENQX1NfTk9ORSA9IDAsCisJSVBfVlNfVENQX1NfRVNUQUJMSVNIRUQsCisJSVBfVlNfVENQX1NfU1lOX1NFTlQsCisJSVBfVlNfVENQX1NfU1lOX1JFQ1YsCisJSVBfVlNfVENQX1NfRklOX1dBSVQsCisJSVBfVlNfVENQX1NfVElNRV9XQUlULAorCUlQX1ZTX1RDUF9TX0NMT1NFLAorCUlQX1ZTX1RDUF9TX0NMT1NFX1dBSVQsCisJSVBfVlNfVENQX1NfTEFTVF9BQ0ssCisJSVBfVlNfVENQX1NfTElTVEVOLAorCUlQX1ZTX1RDUF9TX1NZTkFDSywKKwlJUF9WU19UQ1BfU19MQVNUCit9OworCisvKgorICoJVURQIFN0YXRlIFZhbHVlcworICovCitlbnVtIHsKKwlJUF9WU19VRFBfU19OT1JNQUwsCisJSVBfVlNfVURQX1NfTEFTVCwKK307CisKKy8qCisgKglJQ01QIFN0YXRlIFZhbHVlcworICovCitlbnVtIHsKKwlJUF9WU19JQ01QX1NfTk9STUFMLAorCUlQX1ZTX0lDTVBfU19MQVNULAorfTsKKworLyoKKyAqCURlbHRhIHNlcXVlbmNlIGluZm8gc3RydWN0dXJlCisgKglFYWNoIGlwX3ZzX2Nvbm4gaGFzIDIgKG91dHB1dCBBTkQgaW5wdXQgc2VxLiBjaGFuZ2VzKS4KKyAqICAgICAgT25seSB1c2VkIGluIHRoZSBWUy9OQVQuCisgKi8KK3N0cnVjdCBpcF92c19zZXEgeworCV9fdTMyCQkJaW5pdF9zZXE7CS8qIEFkZCBkZWx0YSBmcm9tIHRoaXMgc2VxICovCisJX191MzIJCQlkZWx0YTsJCS8qIERlbHRhIGluIHNlcXVlbmNlIG51bWJlcnMgKi8KKwlfX3UzMgkJCXByZXZpb3VzX2RlbHRhOwkvKiBEZWx0YSBpbiBzZXF1ZW5jZSBudW1iZXJzCisJCQkJCQkgICBiZWZvcmUgbGFzdCByZXNpemVkIHBrdCAqLworfTsKKworCisvKgorICoJSVBWUyBzdGF0aXN0aWNzIG9iamVjdAorICovCitzdHJ1Y3QgaXBfdnNfc3RhdHMKK3sKKwlfX3UzMiAgICAgICAgICAgICAgICAgICBjb25uczsgICAgICAgICAgLyogY29ubmVjdGlvbnMgc2NoZWR1bGVkICovCisJX191MzIgICAgICAgICAgICAgICAgICAgaW5wa3RzOyAgICAgICAgIC8qIGluY29taW5nIHBhY2tldHMgKi8KKwlfX3UzMiAgICAgICAgICAgICAgICAgICBvdXRwa3RzOyAgICAgICAgLyogb3V0Z29pbmcgcGFja2V0cyAqLworCV9fdTY0ICAgICAgICAgICAgICAgICAgIGluYnl0ZXM7ICAgICAgICAvKiBpbmNvbWluZyBieXRlcyAqLworCV9fdTY0ICAgICAgICAgICAgICAgICAgIG91dGJ5dGVzOyAgICAgICAvKiBvdXRnb2luZyBieXRlcyAqLworCisJX191MzIJCQljcHM7CQkvKiBjdXJyZW50IGNvbm5lY3Rpb24gcmF0ZSAqLworCV9fdTMyCQkJaW5wcHM7CQkvKiBjdXJyZW50IGluIHBhY2tldCByYXRlICovCisJX191MzIJCQlvdXRwcHM7CQkvKiBjdXJyZW50IG91dCBwYWNrZXQgcmF0ZSAqLworCV9fdTMyCQkJaW5icHM7CQkvKiBjdXJyZW50IGluIGJ5dGUgcmF0ZSAqLworCV9fdTMyCQkJb3V0YnBzOwkJLyogY3VycmVudCBvdXQgYnl0ZSByYXRlICovCisKKwlzcGlubG9ja190ICAgICAgICAgICAgICBsb2NrOyAgICAgICAgICAgLyogc3BpbiBsb2NrICovCit9OworCitzdHJ1Y3QgaXBfdnNfY29ubjsKK3N0cnVjdCBpcF92c19hcHA7CisKK3N0cnVjdCBpcF92c19wcm90b2NvbCB7CisJc3RydWN0IGlwX3ZzX3Byb3RvY29sCSpuZXh0OworCWNoYXIJCQkqbmFtZTsKKwlfX3UxNgkJCXByb3RvY29sOworCWludAkJCWRvbnRfZGVmcmFnOworCWF0b21pY190CQlhcHBjbnQ7CQkvKiBjb3VudGVyIG9mIHByb3RvIGFwcCBpbmNzICovCisJaW50CQkJKnRpbWVvdXRfdGFibGU7CS8qIHByb3RvY29sIHRpbWVvdXQgdGFibGUgKi8KKworCXZvaWQgKCppbml0KShzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwKTsKKworCXZvaWQgKCpleGl0KShzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwKTsKKworCWludCAoKmNvbm5fc2NoZWR1bGUpKHN0cnVjdCBza19idWZmICpza2IsCisJCQkgICAgIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCisJCQkgICAgIGludCAqdmVyZGljdCwgc3RydWN0IGlwX3ZzX2Nvbm4gKipjcHApOworCisJc3RydWN0IGlwX3ZzX2Nvbm4gKgorCSgqY29ubl9pbl9nZXQpKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCisJCSAgICAgICBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAorCQkgICAgICAgY29uc3Qgc3RydWN0IGlwaGRyICppcGgsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgcHJvdG9fb2ZmLAorCQkgICAgICAgaW50IGludmVyc2UpOworCisJc3RydWN0IGlwX3ZzX2Nvbm4gKgorCSgqY29ubl9vdXRfZ2V0KShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKKwkJCWNvbnN0IHN0cnVjdCBpcGhkciAqaXBoLAorCQkJdW5zaWduZWQgaW50IHByb3RvX29mZiwKKwkJCWludCBpbnZlcnNlKTsKKworCWludCAoKnNuYXRfaGFuZGxlcikoc3RydWN0IHNrX2J1ZmYgKipwc2tiLAorCQkJICAgIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIHN0cnVjdCBpcF92c19jb25uICpjcCk7CisKKwlpbnQgKCpkbmF0X2hhbmRsZXIpKHN0cnVjdCBza19idWZmICoqcHNrYiwKKwkJCSAgICBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApOworCisJaW50ICgqY3N1bV9jaGVjaykoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCk7CisKKwljb25zdCBjaGFyICooKnN0YXRlX25hbWUpKGludCBzdGF0ZSk7CisKKwlpbnQgKCpzdGF0ZV90cmFuc2l0aW9uKShzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBkaXJlY3Rpb24sCisJCQkJY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQlzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwKTsKKworCWludCAoKnJlZ2lzdGVyX2FwcCkoc3RydWN0IGlwX3ZzX2FwcCAqaW5jKTsKKworCXZvaWQgKCp1bnJlZ2lzdGVyX2FwcCkoc3RydWN0IGlwX3ZzX2FwcCAqaW5jKTsKKworCWludCAoKmFwcF9jb25uX2JpbmQpKHN0cnVjdCBpcF92c19jb25uICpjcCk7CisKKwl2b2lkICgqZGVidWdfcGFja2V0KShzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAorCQkJICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgICBpbnQgb2Zmc2V0LAorCQkJICAgICBjb25zdCBjaGFyICptc2cpOworCisJdm9pZCAoKnRpbWVvdXRfY2hhbmdlKShzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCBpbnQgZmxhZ3MpOworCisJaW50ICgqc2V0X3N0YXRlX3RpbWVvdXQpKHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIGNoYXIgKnNuYW1lLCBpbnQgdG8pOworfTsKKworZXh0ZXJuIHN0cnVjdCBpcF92c19wcm90b2NvbCAqIGlwX3ZzX3Byb3RvX2dldCh1bnNpZ25lZCBzaG9ydCBwcm90byk7CisKKy8qCisgKglJUF9WUyBzdHJ1Y3R1cmUgYWxsb2NhdGVkIGZvciBlYWNoIGR5bmFtaWNhbGx5IHNjaGVkdWxlZCBjb25uZWN0aW9uCisgKi8KK3N0cnVjdCBpcF92c19jb25uIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICBjX2xpc3Q7ICAgICAgICAgLyogaGFzaGVkIGxpc3QgaGVhZHMgKi8KKworCS8qIFByb3RvY29sLCBhZGRyZXNzZXMgYW5kIHBvcnQgbnVtYmVycyAqLworCV9fdTMyICAgICAgICAgICAgICAgICAgIGNhZGRyOyAgICAgICAgICAvKiBjbGllbnQgYWRkcmVzcyAqLworCV9fdTMyICAgICAgICAgICAgICAgICAgIHZhZGRyOyAgICAgICAgICAvKiB2aXJ0dWFsIGFkZHJlc3MgKi8KKwlfX3UzMiAgICAgICAgICAgICAgICAgICBkYWRkcjsgICAgICAgICAgLyogZGVzdGluYXRpb24gYWRkcmVzcyAqLworCV9fdTE2ICAgICAgICAgICAgICAgICAgIGNwb3J0OworCV9fdTE2ICAgICAgICAgICAgICAgICAgIHZwb3J0OworCV9fdTE2ICAgICAgICAgICAgICAgICAgIGRwb3J0OworCV9fdTE2ICAgICAgICAgICAgICAgICAgIHByb3RvY29sOyAgICAgICAvKiBXaGljaCBwcm90b2NvbCAoVENQL1VEUCkgKi8KKworCS8qIGNvdW50ZXIgYW5kIHRpbWVyICovCisJYXRvbWljX3QJCXJlZmNudDsJCS8qIHJlZmVyZW5jZSBjb3VudCAqLworCXN0cnVjdCB0aW1lcl9saXN0CXRpbWVyOwkJLyogRXhwaXJhdGlvbiB0aW1lciAqLworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcJdGltZW91dDsJLyogdGltZW91dCAqLworCisJLyogRmxhZ3MgYW5kIHN0YXRlIHRyYW5zaXRpb24gKi8KKwlzcGlubG9ja190ICAgICAgICAgICAgICBsb2NrOyAgICAgICAgICAgLyogbG9jayBmb3Igc3RhdGUgdHJhbnNpdGlvbiAqLworCXZvbGF0aWxlIF9fdTE2ICAgICAgICAgIGZsYWdzOyAgICAgICAgICAvKiBzdGF0dXMgZmxhZ3MgKi8KKwl2b2xhdGlsZSBfX3UxNiAgICAgICAgICBzdGF0ZTsgICAgICAgICAgLyogc3RhdGUgaW5mbyAqLworCisJLyogQ29udHJvbCBtZW1iZXJzICovCisJc3RydWN0IGlwX3ZzX2Nvbm4gICAgICAgKmNvbnRyb2w7ICAgICAgIC8qIE1hc3RlciBjb250cm9sIGNvbm5lY3Rpb24gKi8KKwlhdG9taWNfdCAgICAgICAgICAgICAgICBuX2NvbnRyb2w7ICAgICAgLyogTnVtYmVyIG9mIGNvbnRyb2xsZWQgb25lcyAqLworCXN0cnVjdCBpcF92c19kZXN0ICAgICAgICpkZXN0OyAgICAgICAgICAvKiByZWFsIHNlcnZlciAqLworCWF0b21pY190ICAgICAgICAgICAgICAgIGluX3BrdHM7ICAgICAgICAvKiBpbmNvbWluZyBwYWNrZXQgY291bnRlciAqLworCisJLyogcGFja2V0IHRyYW5zbWl0dGVyIGZvciBkaWZmZXJlbnQgZm9yd2FyZGluZyBtZXRob2RzLiAgSWYgaXQKKwkgICBtYW5nbGVzIHRoZSBwYWNrZXQsIGl0IG11c3QgcmV0dXJuIE5GX0RST1Agb3IgYmV0dGVyIE5GX1NUT0xFTiwKKwkgICBvdGhlcndpc2UgdGhpcyBtdXN0IGJlIGNoYW5nZWQgdG8gYSBza19idWZmICoqLgorCSAqLworCWludCAoKnBhY2tldF94bWl0KShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsCisJCQkgICBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwKTsKKworCS8qIE5vdGU6IHdlIGNhbiBncm91cCB0aGUgZm9sbG93aW5nIG1lbWJlcnMgaW50byBhIHN0cnVjdHVyZSwKKwkgICBpbiBvcmRlciB0byBzYXZlIG1vcmUgc3BhY2UsIGFuZCB0aGUgZm9sbG93aW5nIG1lbWJlcnMgYXJlCisJICAgb25seSB1c2VkIGluIFZTL05BVCBhbnl3YXkgKi8KKwlzdHJ1Y3QgaXBfdnNfYXBwICAgICAgICAqYXBwOyAgICAgICAgICAgLyogYm91bmQgaXBfdnNfYXBwIG9iamVjdCAqLworCXZvaWQgICAgICAgICAgICAgICAgICAgICphcHBfZGF0YTsgICAgICAvKiBBcHBsaWNhdGlvbiBwcml2YXRlIGRhdGEgKi8KKwlzdHJ1Y3QgaXBfdnNfc2VxICAgICAgICBpbl9zZXE7ICAgICAgICAgLyogaW5jb21pbmcgc2VxLiBzdHJ1Y3QgKi8KKwlzdHJ1Y3QgaXBfdnNfc2VxICAgICAgICBvdXRfc2VxOyAgICAgICAgLyogb3V0Z29pbmcgc2VxLiBzdHJ1Y3QgKi8KK307CisKKworLyoKKyAqCVRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdmlydHVhbCBzZXJ2aWNlIG9mZmVyZWQgdG8gdGhlIG5ldAorICoJYW5kIHRoZSBmb3J3YXJkaW5nIGVudHJpZXMKKyAqLworc3RydWN0IGlwX3ZzX3NlcnZpY2UgeworCXN0cnVjdCBsaXN0X2hlYWQJc19saXN0OyAgIC8qIGZvciBub3JtYWwgc2VydmljZSB0YWJsZSAqLworCXN0cnVjdCBsaXN0X2hlYWQJZl9saXN0OyAgIC8qIGZvciBmd21hcmstYmFzZWQgc2VydmljZSB0YWJsZSAqLworCWF0b21pY190CQlyZWZjbnQ7ICAgLyogcmVmZXJlbmNlIGNvdW50ZXIgKi8KKwlhdG9taWNfdAkJdXNlY250OyAgIC8qIHVzZSBjb3VudGVyICovCisKKwlfX3UxNgkJCXByb3RvY29sOyAvKiB3aGljaCBwcm90b2NvbCAoVENQL1VEUCkgKi8KKwlfX3UzMgkJCWFkZHI7CSAgLyogSVAgYWRkcmVzcyBmb3IgdmlydHVhbCBzZXJ2aWNlICovCisJX191MTYJCQlwb3J0OwkgIC8qIHBvcnQgbnVtYmVyIGZvciB0aGUgc2VydmljZSAqLworCV9fdTMyICAgICAgICAgICAgICAgICAgIGZ3bWFyazsgICAvKiBmaXJld2FsbCBtYXJrIG9mIHRoZSBzZXJ2aWNlICovCisJdW5zaWduZWQJCWZsYWdzOwkgIC8qIHNlcnZpY2Ugc3RhdHVzIGZsYWdzICovCisJdW5zaWduZWQJCXRpbWVvdXQ7ICAvKiBwZXJzaXN0ZW50IHRpbWVvdXQgaW4gdGlja3MgKi8KKwlfX3UzMgkJCW5ldG1hc2s7ICAvKiBncm91cGluZyBncmFudWxhcml0eSAqLworCisJc3RydWN0IGxpc3RfaGVhZAlkZXN0aW5hdGlvbnM7ICAvKiByZWFsIHNlcnZlciBkLWxpbmtlZCBsaXN0ICovCisJX191MzIJCQludW1fZGVzdHM7ICAgICAvKiBudW1iZXIgb2Ygc2VydmVycyAqLworCXN0cnVjdCBpcF92c19zdGF0cyAgICAgIHN0YXRzOyAgICAgICAgIC8qIHN0YXRpc3RpY3MgZm9yIHRoZSBzZXJ2aWNlICovCisJc3RydWN0IGlwX3ZzX2FwcAkqaW5jOwkgIC8qIGJpbmQgY29ubnMgdG8gdGhpcyBhcHAgaW5jICovCisKKwkvKiBmb3Igc2NoZWR1bGluZyAqLworCXN0cnVjdCBpcF92c19zY2hlZHVsZXIJKnNjaGVkdWxlcjsgICAgLyogYm91bmQgc2NoZWR1bGVyIG9iamVjdCAqLworCXJ3bG9ja190CQlzY2hlZF9sb2NrOyAgICAvKiBsb2NrIHNjaGVkX2RhdGEgKi8KKwl2b2lkCQkJKnNjaGVkX2RhdGE7ICAgLyogc2NoZWR1bGVyIGFwcGxpY2F0aW9uIGRhdGEgKi8KK307CisKKworLyoKKyAqCVRoZSByZWFsIHNlcnZlciBkZXN0aW5hdGlvbiBmb3J3YXJkaW5nIGVudHJ5CisgKgl3aXRoIGlwIGFkZHJlc3MsIHBvcnQgbnVtYmVyLCBhbmQgc28gb24uCisgKi8KK3N0cnVjdCBpcF92c19kZXN0IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCW5fbGlzdDsgICAvKiBmb3IgdGhlIGRlc3RzIGluIHRoZSBzZXJ2aWNlICovCisJc3RydWN0IGxpc3RfaGVhZAlkX2xpc3Q7ICAgLyogZm9yIHRhYmxlIHdpdGggYWxsIHRoZSBkZXN0cyAqLworCisJX191MzIJCQlhZGRyOwkJLyogSVAgYWRkcmVzcyBvZiB0aGUgc2VydmVyICovCisJX191MTYJCQlwb3J0OwkJLyogcG9ydCBudW1iZXIgb2YgdGhlIHNlcnZlciAqLworCXZvbGF0aWxlIHVuc2lnbmVkCWZsYWdzOwkJLyogZGVzdCBzdGF0dXMgZmxhZ3MgKi8KKwlhdG9taWNfdAkJY29ubl9mbGFnczsJLyogZmxhZ3MgdG8gY29weSB0byBjb25uICovCisJYXRvbWljX3QJCXdlaWdodDsJCS8qIHNlcnZlciB3ZWlnaHQgKi8KKworCWF0b21pY190CQlyZWZjbnQ7CQkvKiByZWZlcmVuY2UgY291bnRlciAqLworCXN0cnVjdCBpcF92c19zdGF0cyAgICAgIHN0YXRzOyAgICAgICAgICAvKiBzdGF0aXN0aWNzICovCisKKwkvKiBjb25uZWN0aW9uIGNvdW50ZXJzIGFuZCB0aHJlc2hvbGRzICovCisJYXRvbWljX3QJCWFjdGl2ZWNvbm5zOwkvKiBhY3RpdmUgY29ubmVjdGlvbnMgKi8KKwlhdG9taWNfdAkJaW5hY3Rjb25uczsJLyogaW5hY3RpdmUgY29ubmVjdGlvbnMgKi8KKwlhdG9taWNfdAkJcGVyc2lzdGNvbm5zOwkvKiBwZXJzaXN0ZW50IGNvbm5lY3Rpb25zICovCisJX191MzIJCQl1X3RocmVzaG9sZDsJLyogdXBwZXIgdGhyZXNob2xkICovCisJX191MzIJCQlsX3RocmVzaG9sZDsJLyogbG93ZXIgdGhyZXNob2xkICovCisKKwkvKiBmb3IgZGVzdGluYXRpb24gY2FjaGUgKi8KKwlzcGlubG9ja190CQlkc3RfbG9jazsJLyogbG9jayBvZiBkc3RfY2FjaGUgKi8KKwlzdHJ1Y3QgZHN0X2VudHJ5CSpkc3RfY2FjaGU7CS8qIGRlc3RpbmF0aW9uIGNhY2hlIGVudHJ5ICovCisJdTMyCQkJZHN0X3J0b3M7CS8qIFJUX1RPUyh0b3MpIGZvciBkc3QgKi8KKworCS8qIGZvciB2aXJ0dWFsIHNlcnZpY2UgKi8KKwlzdHJ1Y3QgaXBfdnNfc2VydmljZQkqc3ZjOwkJLyogc2VydmljZSBpdCBiZWxvbmdzIHRvICovCisJX191MTYJCQlwcm90b2NvbDsJLyogd2hpY2ggcHJvdG9jb2wgKFRDUC9VRFApICovCisJX191MzIJCQl2YWRkcjsJCS8qIHZpcnR1YWwgSVAgYWRkcmVzcyAqLworCV9fdTE2CQkJdnBvcnQ7CQkvKiB2aXJ0dWFsIHBvcnQgbnVtYmVyICovCisJX191MzIJCQl2ZndtYXJrOwkvKiBmaXJld2FsbCBtYXJrIG9mIHNlcnZpY2UgKi8KK307CisKKworLyoKKyAqCVRoZSBzY2hlZHVsZXIgb2JqZWN0CisgKi8KK3N0cnVjdCBpcF92c19zY2hlZHVsZXIgeworCXN0cnVjdCBsaXN0X2hlYWQJbl9saXN0OwkJLyogZC1saW5rZWQgbGlzdCBoZWFkICovCisJY2hhcgkJCSpuYW1lOwkJLyogc2NoZWR1bGVyIG5hbWUgKi8KKwlhdG9taWNfdAkJcmVmY250OwkJLyogcmVmZXJlbmNlIGNvdW50ZXIgKi8KKwlzdHJ1Y3QgbW9kdWxlCQkqbW9kdWxlOwkvKiBUSElTX01PRFVMRS9OVUxMICovCisKKwkvKiBzY2hlZHVsZXIgaW5pdGlhbGl6aW5nIHNlcnZpY2UgKi8KKwlpbnQgKCppbml0X3NlcnZpY2UpKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMpOworCS8qIHNjaGVkdWxpbmcgc2VydmljZSBmaW5pc2ggKi8KKwlpbnQgKCpkb25lX3NlcnZpY2UpKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMpOworCS8qIHNjaGVkdWxlciB1cGRhdGluZyBzZXJ2aWNlICovCisJaW50ICgqdXBkYXRlX3NlcnZpY2UpKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMpOworCisJLyogc2VsZWN0aW5nIGEgc2VydmVyIGZyb20gdGhlIGdpdmVuIHNlcnZpY2UgKi8KKwlzdHJ1Y3QgaXBfdnNfZGVzdCogKCpzY2hlZHVsZSkoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YywKKwkJCQkgICAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYik7Cit9OworCisKKy8qCisgKglUaGUgYXBwbGljYXRpb24gbW9kdWxlIG9iamVjdCAoYS5rLmEuIGFwcCBpbmNhcm5hdGlvbikKKyAqLworc3RydWN0IGlwX3ZzX2FwcAoreworCXN0cnVjdCBsaXN0X2hlYWQJYV9saXN0OwkJLyogbWVtYmVyIGluIGFwcCBsaXN0ICovCisJaW50CQkJdHlwZTsJCS8qIElQX1ZTX0FQUF9UWVBFX3h4eCAqLworCWNoYXIJCQkqbmFtZTsJCS8qIGFwcGxpY2F0aW9uIG1vZHVsZSBuYW1lICovCisJX191MTYJCQlwcm90b2NvbDsKKwlzdHJ1Y3QgbW9kdWxlCQkqbW9kdWxlOwkvKiBUSElTX01PRFVMRS9OVUxMICovCisJc3RydWN0IGxpc3RfaGVhZAlpbmNzX2xpc3Q7CS8qIGxpc3Qgb2YgaW5jYXJuYXRpb25zICovCisKKwkvKiBtZW1iZXJzIGZvciBhcHBsaWNhdGlvbiBpbmNhcm5hdGlvbnMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCXBfbGlzdDsJCS8qIG1lbWJlciBpbiBwcm90byBhcHAgbGlzdCAqLworCXN0cnVjdCBpcF92c19hcHAJKmFwcDsJCS8qIGl0cyByZWFsIGFwcGxpY2F0aW9uICovCisJX191MTYJCQlwb3J0OwkJLyogcG9ydCBudW1iZXIgaW4gbmV0IG9yZGVyICovCisJYXRvbWljX3QJCXVzZWNudDsJCS8qIHVzYWdlIGNvdW50ZXIgKi8KKworCS8qIG91dHB1dCBob29rOiByZXR1cm4gZmFsc2UgaWYgY2FuJ3QgbGluZWFyaXplLiBkaWZmIHNldCBmb3IgVENQLiAgKi8KKwlpbnQgKCpwa3Rfb3V0KShzdHJ1Y3QgaXBfdnNfYXBwICosIHN0cnVjdCBpcF92c19jb25uICosCisJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqKiwgaW50ICpkaWZmKTsKKworCS8qIGlucHV0IGhvb2s6IHJldHVybiBmYWxzZSBpZiBjYW4ndCBsaW5lYXJpemUuIGRpZmYgc2V0IGZvciBUQ1AuICovCisJaW50ICgqcGt0X2luKShzdHJ1Y3QgaXBfdnNfYXBwICosIHN0cnVjdCBpcF92c19jb25uICosCisJCSAgICAgIHN0cnVjdCBza19idWZmICoqLCBpbnQgKmRpZmYpOworCisJLyogaXBfdnNfYXBwIGluaXRpYWxpemVyICovCisJaW50ICgqaW5pdF9jb25uKShzdHJ1Y3QgaXBfdnNfYXBwICosIHN0cnVjdCBpcF92c19jb25uICopOworCisJLyogaXBfdnNfYXBwIGZpbmlzaCAqLworCWludCAoKmRvbmVfY29ubikoc3RydWN0IGlwX3ZzX2FwcCAqLCBzdHJ1Y3QgaXBfdnNfY29ubiAqKTsKKworCisJLyogbm90IHVzZWQgbm93ICovCisJaW50ICgqYmluZF9jb25uKShzdHJ1Y3QgaXBfdnNfYXBwICosIHN0cnVjdCBpcF92c19jb25uICosCisJCQkgc3RydWN0IGlwX3ZzX3Byb3RvY29sICopOworCisJdm9pZCAoKnVuYmluZF9jb25uKShzdHJ1Y3QgaXBfdnNfYXBwICosIHN0cnVjdCBpcF92c19jb25uICopOworCisJaW50ICoJCQl0aW1lb3V0X3RhYmxlOworCWludCAqCQkJdGltZW91dHM7CisJaW50CQkJdGltZW91dHNfc2l6ZTsKKworCWludCAoKmNvbm5fc2NoZWR1bGUpKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19hcHAgKmFwcCwKKwkJCSAgICAgaW50ICp2ZXJkaWN0LCBzdHJ1Y3QgaXBfdnNfY29ubiAqKmNwcCk7CisKKwlzdHJ1Y3QgaXBfdnNfY29ubiAqCisJKCpjb25uX2luX2dldCkoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2FwcCAqYXBwLAorCQkgICAgICAgY29uc3Qgc3RydWN0IGlwaGRyICppcGgsIHVuc2lnbmVkIGludCBwcm90b19vZmYsCisJCSAgICAgICBpbnQgaW52ZXJzZSk7CisKKwlzdHJ1Y3QgaXBfdnNfY29ubiAqCisJKCpjb25uX291dF9nZXQpKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19hcHAgKmFwcCwKKwkJCWNvbnN0IHN0cnVjdCBpcGhkciAqaXBoLCB1bnNpZ25lZCBpbnQgcHJvdG9fb2ZmLAorCQkJaW50IGludmVyc2UpOworCisJaW50ICgqc3RhdGVfdHJhbnNpdGlvbikoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgZGlyZWN0aW9uLAorCQkJCWNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCisJCQkJc3RydWN0IGlwX3ZzX2FwcCAqYXBwKTsKKworCXZvaWQgKCp0aW1lb3V0X2NoYW5nZSkoc3RydWN0IGlwX3ZzX2FwcCAqYXBwLCBpbnQgZmxhZ3MpOworfTsKKworCisvKgorICogICAgICBJUFZTIGNvcmUgZnVuY3Rpb25zCisgKiAgICAgIChmcm9tIGlwX3ZzX2NvcmUuYykKKyAqLworZXh0ZXJuIGNvbnN0IGNoYXIgKmlwX3ZzX3Byb3RvX25hbWUodW5zaWduZWQgcHJvdG8pOworZXh0ZXJuIHZvaWQgaXBfdnNfaW5pdF9oYXNoX3RhYmxlKHN0cnVjdCBsaXN0X2hlYWQgKnRhYmxlLCBpbnQgcm93cyk7CisjZGVmaW5lIElQX1ZTX0lOSVRfSEFTSF9UQUJMRSh0KSBpcF92c19pbml0X2hhc2hfdGFibGUodCwgc2l6ZW9mKHQpL3NpemVvZih0WzBdKSkKKworI2RlZmluZSBJUF9WU19BUFBfVFlQRV9VTlNQRUMJMAorI2RlZmluZSBJUF9WU19BUFBfVFlQRV9GVFAJMQorCisvKgorICogICAgIGlwX3ZzX2Nvbm4gaGFuZGxpbmcgZnVuY3Rpb25zCisgKiAgICAgKGZyb20gaXBfdnNfY29ubi5jKQorICovCisKKy8qCisgKiAgICAgSVBWUyBjb25uZWN0aW9uIGVudHJ5IGhhc2ggdGFibGUKKyAqLworI2lmbmRlZiBDT05GSUdfSVBfVlNfVEFCX0JJVFMKKyNkZWZpbmUgQ09ORklHX0lQX1ZTX1RBQl9CSVRTICAgMTIKKyNlbmRpZgorLyogbWFrZSBzdXJlIHRoYXQgSVBfVlNfQ09OTl9UQUJfQklUUyBpcyBsb2NhdGVkIGluIFs4LCAyMF0gKi8KKyNpZiBDT05GSUdfSVBfVlNfVEFCX0JJVFMgPCA4CisjZGVmaW5lIElQX1ZTX0NPTk5fVEFCX0JJVFMJOAorI2VuZGlmCisjaWYgQ09ORklHX0lQX1ZTX1RBQl9CSVRTID4gMjAKKyNkZWZpbmUgSVBfVlNfQ09OTl9UQUJfQklUUwkyMAorI2VuZGlmCisjaWYgOCA8PSBDT05GSUdfSVBfVlNfVEFCX0JJVFMgJiYgQ09ORklHX0lQX1ZTX1RBQl9CSVRTIDw9IDIwCisjZGVmaW5lIElQX1ZTX0NPTk5fVEFCX0JJVFMJQ09ORklHX0lQX1ZTX1RBQl9CSVRTCisjZW5kaWYKKyNkZWZpbmUgSVBfVlNfQ09OTl9UQUJfU0laRSAgICAgKDEgPDwgSVBfVlNfQ09OTl9UQUJfQklUUykKKyNkZWZpbmUgSVBfVlNfQ09OTl9UQUJfTUFTSyAgICAgKElQX1ZTX0NPTk5fVEFCX1NJWkUgLSAxKQorCitlbnVtIHsKKwlJUF9WU19ESVJfSU5QVVQgPSAwLAorCUlQX1ZTX0RJUl9PVVRQVVQsCisJSVBfVlNfRElSX0lOUFVUX09OTFksCisJSVBfVlNfRElSX0xBU1QsCit9OworCitleHRlcm4gc3RydWN0IGlwX3ZzX2Nvbm4gKmlwX3ZzX2Nvbm5faW5fZ2V0CisoaW50IHByb3RvY29sLCBfX3UzMiBzX2FkZHIsIF9fdTE2IHNfcG9ydCwgX191MzIgZF9hZGRyLCBfX3UxNiBkX3BvcnQpOworZXh0ZXJuIHN0cnVjdCBpcF92c19jb25uICppcF92c19jb25uX291dF9nZXQKKyhpbnQgcHJvdG9jb2wsIF9fdTMyIHNfYWRkciwgX191MTYgc19wb3J0LCBfX3UzMiBkX2FkZHIsIF9fdTE2IGRfcG9ydCk7CisKKy8qIHB1dCBiYWNrIHRoZSBjb25uIHdpdGhvdXQgcmVzdGFydGluZyBpdHMgdGltZXIgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2lwX3ZzX2Nvbm5fcHV0KHN0cnVjdCBpcF92c19jb25uICpjcCkKK3sKKwlhdG9taWNfZGVjKCZjcC0+cmVmY250KTsKK30KK2V4dGVybiB2b2lkIGlwX3ZzX2Nvbm5fcHV0KHN0cnVjdCBpcF92c19jb25uICpjcCk7CitleHRlcm4gdm9pZCBpcF92c19jb25uX2ZpbGxfY3BvcnQoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBfX3UxNiBjcG9ydCk7CisKK2V4dGVybiBzdHJ1Y3QgaXBfdnNfY29ubiAqCitpcF92c19jb25uX25ldyhpbnQgcHJvdG8sIF9fdTMyIGNhZGRyLCBfX3UxNiBjcG9ydCwgX191MzIgdmFkZHIsIF9fdTE2IHZwb3J0LAorCSAgICAgICBfX3UzMiBkYWRkciwgX191MTYgZHBvcnQsIHVuc2lnbmVkIGZsYWdzLAorCSAgICAgICBzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdCk7CitleHRlcm4gdm9pZCBpcF92c19jb25uX2V4cGlyZV9ub3coc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKTsKKworZXh0ZXJuIGNvbnN0IGNoYXIgKiBpcF92c19zdGF0ZV9uYW1lKF9fdTE2IHByb3RvLCBpbnQgc3RhdGUpOworCitleHRlcm4gdm9pZCBpcF92c190Y3BfY29ubl9saXN0ZW4oc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKTsKK2V4dGVybiBpbnQgaXBfdnNfY2hlY2tfdGVtcGxhdGUoc3RydWN0IGlwX3ZzX2Nvbm4gKmN0KTsKK2V4dGVybiB2b2lkIGlwX3ZzX3NlY3VyZV90Y3Bfc2V0KGludCBvbik7CitleHRlcm4gdm9pZCBpcF92c19yYW5kb21fZHJvcGVudHJ5KHZvaWQpOworZXh0ZXJuIGludCBpcF92c19jb25uX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBpcF92c19jb25uX2NsZWFudXAodm9pZCk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpcF92c19jb250cm9sX2RlbChzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApCit7CisJc3RydWN0IGlwX3ZzX2Nvbm4gKmN0bF9jcCA9IGNwLT5jb250cm9sOworCWlmICghY3RsX2NwKSB7CisJCUlQX1ZTX0VSUigicmVxdWVzdCBjb250cm9sIERFTCBmb3IgdW5jb250cm9sbGVkOiAiCisJCQkgICIlZC4lZC4lZC4lZDolZCB0byAlZC4lZC4lZC4lZDolZFxuIiwKKwkJCSAgTklQUVVBRChjcC0+Y2FkZHIpLG50b2hzKGNwLT5jcG9ydCksCisJCQkgIE5JUFFVQUQoY3AtPnZhZGRyKSxudG9ocyhjcC0+dnBvcnQpKTsKKwkJcmV0dXJuOworCX0KKworCUlQX1ZTX0RCRyg3LCAiREVMZXRpbmcgY29udHJvbCBmb3I6ICIKKwkJICAiY3AuZHN0PSVkLiVkLiVkLiVkOiVkIGN0bF9jcC5kc3Q9JWQuJWQuJWQuJWQ6JWRcbiIsCisJCSAgTklQUVVBRChjcC0+Y2FkZHIpLG50b2hzKGNwLT5jcG9ydCksCisJCSAgTklQUVVBRChjdGxfY3AtPmNhZGRyKSxudG9ocyhjdGxfY3AtPmNwb3J0KSk7CisKKwljcC0+Y29udHJvbCA9IE5VTEw7CisJaWYgKGF0b21pY19yZWFkKCZjdGxfY3AtPm5fY29udHJvbCkgPT0gMCkgeworCQlJUF9WU19FUlIoIkJVRyBjb250cm9sIERFTCB3aXRoIG49MCA6ICIKKwkJCSAgIiVkLiVkLiVkLiVkOiVkIHRvICVkLiVkLiVkLiVkOiVkXG4iLAorCQkJICBOSVBRVUFEKGNwLT5jYWRkciksbnRvaHMoY3AtPmNwb3J0KSwKKwkJCSAgTklQUVVBRChjcC0+dmFkZHIpLG50b2hzKGNwLT52cG9ydCkpOworCQlyZXR1cm47CisJfQorCWF0b21pY19kZWMoJmN0bF9jcC0+bl9jb250cm9sKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitpcF92c19jb250cm9sX2FkZChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBpcF92c19jb25uICpjdGxfY3ApCit7CisJaWYgKGNwLT5jb250cm9sKSB7CisJCUlQX1ZTX0VSUigicmVxdWVzdCBjb250cm9sIEFERCBmb3IgYWxyZWFkeSBjb250cm9sbGVkOiAiCisJCQkgICIlZC4lZC4lZC4lZDolZCB0byAlZC4lZC4lZC4lZDolZFxuIiwKKwkJCSAgTklQUVVBRChjcC0+Y2FkZHIpLG50b2hzKGNwLT5jcG9ydCksCisJCQkgIE5JUFFVQUQoY3AtPnZhZGRyKSxudG9ocyhjcC0+dnBvcnQpKTsKKwkJaXBfdnNfY29udHJvbF9kZWwoY3ApOworCX0KKworCUlQX1ZTX0RCRyg3LCAiQUREaW5nIGNvbnRyb2wgZm9yOiAiCisJCSAgImNwLmRzdD0lZC4lZC4lZC4lZDolZCBjdGxfY3AuZHN0PSVkLiVkLiVkLiVkOiVkXG4iLAorCQkgIE5JUFFVQUQoY3AtPmNhZGRyKSxudG9ocyhjcC0+Y3BvcnQpLAorCQkgIE5JUFFVQUQoY3RsX2NwLT5jYWRkciksbnRvaHMoY3RsX2NwLT5jcG9ydCkpOworCisJY3AtPmNvbnRyb2wgPSBjdGxfY3A7CisJYXRvbWljX2luYygmY3RsX2NwLT5uX2NvbnRyb2wpOworfQorCisKKy8qCisgKiAgICAgIElQVlMgYXBwbGljYXRpb24gZnVuY3Rpb25zCisgKiAgICAgIChmcm9tIGlwX3ZzX2FwcC5jKQorICovCisjZGVmaW5lIElQX1ZTX0FQUF9NQVhfUE9SVFMgIDgKK2V4dGVybiBpbnQgcmVnaXN0ZXJfaXBfdnNfYXBwKHN0cnVjdCBpcF92c19hcHAgKmFwcCk7CitleHRlcm4gdm9pZCB1bnJlZ2lzdGVyX2lwX3ZzX2FwcChzdHJ1Y3QgaXBfdnNfYXBwICphcHApOworZXh0ZXJuIGludCBpcF92c19iaW5kX2FwcChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHApOworZXh0ZXJuIHZvaWQgaXBfdnNfdW5iaW5kX2FwcChzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApOworZXh0ZXJuIGludAorcmVnaXN0ZXJfaXBfdnNfYXBwX2luYyhzdHJ1Y3QgaXBfdnNfYXBwICphcHAsIF9fdTE2IHByb3RvLCBfX3UxNiBwb3J0KTsKK2V4dGVybiBpbnQgaXBfdnNfYXBwX2luY19nZXQoc3RydWN0IGlwX3ZzX2FwcCAqaW5jKTsKK2V4dGVybiB2b2lkIGlwX3ZzX2FwcF9pbmNfcHV0KHN0cnVjdCBpcF92c19hcHAgKmluYyk7CisKK2V4dGVybiBpbnQgaXBfdnNfYXBwX3BrdF9vdXQoc3RydWN0IGlwX3ZzX2Nvbm4gKiwgc3RydWN0IHNrX2J1ZmYgKipwc2tiKTsKK2V4dGVybiBpbnQgaXBfdnNfYXBwX3BrdF9pbihzdHJ1Y3QgaXBfdnNfY29ubiAqLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpOworZXh0ZXJuIGludCBpcF92c19za2JfcmVwbGFjZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcHJpLAorCQkJICAgICBjaGFyICpvX2J1ZiwgaW50IG9fbGVuLCBjaGFyICpuX2J1ZiwgaW50IG5fbGVuKTsKK2V4dGVybiBpbnQgaXBfdnNfYXBwX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBpcF92c19hcHBfY2xlYW51cCh2b2lkKTsKKworCisvKgorICoJSVBWUyBwcm90b2NvbCBmdW5jdGlvbnMgKGZyb20gaXBfdnNfcHJvdG8uYykKKyAqLworZXh0ZXJuIGludCBpcF92c19wcm90b2NvbF9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgaXBfdnNfcHJvdG9jb2xfY2xlYW51cCh2b2lkKTsKK2V4dGVybiB2b2lkIGlwX3ZzX3Byb3RvY29sX3RpbWVvdXRfY2hhbmdlKGludCBmbGFncyk7CitleHRlcm4gaW50ICppcF92c19jcmVhdGVfdGltZW91dF90YWJsZShpbnQgKnRhYmxlLCBpbnQgc2l6ZSk7CitleHRlcm4gaW50CitpcF92c19zZXRfc3RhdGVfdGltZW91dChpbnQgKnRhYmxlLCBpbnQgbnVtLCBjaGFyICoqbmFtZXMsIGNoYXIgKm5hbWUsIGludCB0byk7CitleHRlcm4gdm9pZAoraXBfdnNfdGNwdWRwX2RlYnVnX3BhY2tldChzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICBpbnQgb2Zmc2V0LCBjb25zdCBjaGFyICptc2cpOworCitleHRlcm4gc3RydWN0IGlwX3ZzX3Byb3RvY29sIGlwX3ZzX3Byb3RvY29sX3RjcDsKK2V4dGVybiBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgaXBfdnNfcHJvdG9jb2xfdWRwOworZXh0ZXJuIHN0cnVjdCBpcF92c19wcm90b2NvbCBpcF92c19wcm90b2NvbF9pY21wOworZXh0ZXJuIHN0cnVjdCBpcF92c19wcm90b2NvbCBpcF92c19wcm90b2NvbF9lc3A7CitleHRlcm4gc3RydWN0IGlwX3ZzX3Byb3RvY29sIGlwX3ZzX3Byb3RvY29sX2FoOworCisKKy8qCisgKiAgICAgIFJlZ2lzdGVyaW5nL3VucmVnaXN0ZXJpbmcgc2NoZWR1bGVyIGZ1bmN0aW9ucworICogICAgICAoZnJvbSBpcF92c19zY2hlZC5jKQorICovCitleHRlcm4gaW50IHJlZ2lzdGVyX2lwX3ZzX3NjaGVkdWxlcihzdHJ1Y3QgaXBfdnNfc2NoZWR1bGVyICpzY2hlZHVsZXIpOworZXh0ZXJuIGludCB1bnJlZ2lzdGVyX2lwX3ZzX3NjaGVkdWxlcihzdHJ1Y3QgaXBfdnNfc2NoZWR1bGVyICpzY2hlZHVsZXIpOworZXh0ZXJuIGludCBpcF92c19iaW5kX3NjaGVkdWxlcihzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLAorCQkJCXN0cnVjdCBpcF92c19zY2hlZHVsZXIgKnNjaGVkdWxlcik7CitleHRlcm4gaW50IGlwX3ZzX3VuYmluZF9zY2hlZHVsZXIoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2Yyk7CitleHRlcm4gc3RydWN0IGlwX3ZzX3NjaGVkdWxlciAqaXBfdnNfc2NoZWR1bGVyX2dldChjb25zdCBjaGFyICpzY2hlZF9uYW1lKTsKK2V4dGVybiB2b2lkIGlwX3ZzX3NjaGVkdWxlcl9wdXQoc3RydWN0IGlwX3ZzX3NjaGVkdWxlciAqc2NoZWR1bGVyKTsKK2V4dGVybiBzdHJ1Y3QgaXBfdnNfY29ubiAqCitpcF92c19zY2hlZHVsZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQgaXBfdnNfbGVhdmUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2Yywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCXN0cnVjdCBpcF92c19wcm90b2NvbCAqcHApOworCisKKy8qCisgKiAgICAgIElQVlMgY29udHJvbCBkYXRhIGFuZCBmdW5jdGlvbnMgKGZyb20gaXBfdnNfY3RsLmMpCisgKi8KK2V4dGVybiBpbnQgc3lzY3RsX2lwX3ZzX2NhY2hlX2J5cGFzczsKK2V4dGVybiBpbnQgc3lzY3RsX2lwX3ZzX2V4cGlyZV9ub2Rlc3RfY29ubjsKK2V4dGVybiBpbnQgc3lzY3RsX2lwX3ZzX2V4cGlyZV9xdWllc2NlbnRfdGVtcGxhdGU7CitleHRlcm4gaW50IHN5c2N0bF9pcF92c19zeW5jX3RocmVzaG9sZFsyXTsKK2V4dGVybiBpbnQgc3lzY3RsX2lwX3ZzX25hdF9pY21wX3NlbmQ7CitleHRlcm4gc3RydWN0IGlwX3ZzX3N0YXRzIGlwX3ZzX3N0YXRzOworCitleHRlcm4gc3RydWN0IGlwX3ZzX3NlcnZpY2UgKgoraXBfdnNfc2VydmljZV9nZXQoX191MzIgZndtYXJrLCBfX3UxNiBwcm90b2NvbCwgX191MzIgdmFkZHIsIF9fdTE2IHZwb3J0KTsKKworc3RhdGljIGlubGluZSB2b2lkIGlwX3ZzX3NlcnZpY2VfcHV0KHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMpCit7CisJYXRvbWljX2RlYygmc3ZjLT51c2VjbnQpOworfQorCitleHRlcm4gc3RydWN0IGlwX3ZzX2Rlc3QgKgoraXBfdnNfbG9va3VwX3JlYWxfc2VydmljZShfX3UxNiBwcm90b2NvbCwgX191MzIgZGFkZHIsIF9fdTE2IGRwb3J0KTsKK2V4dGVybiBpbnQgaXBfdnNfdXNlX2NvdW50X2luYyh2b2lkKTsKK2V4dGVybiB2b2lkIGlwX3ZzX3VzZV9jb3VudF9kZWModm9pZCk7CitleHRlcm4gaW50IGlwX3ZzX2NvbnRyb2xfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIGlwX3ZzX2NvbnRyb2xfY2xlYW51cCh2b2lkKTsKKworCisvKgorICogICAgICBJUFZTIHN5bmMgZGFlbW9uIGRhdGEgYW5kIGZ1bmN0aW9uIHByb3RvdHlwZXMKKyAqICAgICAgKGZyb20gaXBfdnNfc3luYy5jKQorICovCitleHRlcm4gdm9sYXRpbGUgaW50IGlwX3ZzX3N5bmNfc3RhdGU7CitleHRlcm4gdm9sYXRpbGUgaW50IGlwX3ZzX21hc3Rlcl9zeW5jaWQ7CitleHRlcm4gdm9sYXRpbGUgaW50IGlwX3ZzX2JhY2t1cF9zeW5jaWQ7CitleHRlcm4gY2hhciBpcF92c19tYXN0ZXJfbWNhc3RfaWZuW0lQX1ZTX0lGTkFNRV9NQVhMRU5dOworZXh0ZXJuIGNoYXIgaXBfdnNfYmFja3VwX21jYXN0X2lmbltJUF9WU19JRk5BTUVfTUFYTEVOXTsKK2V4dGVybiBpbnQgc3RhcnRfc3luY190aHJlYWQoaW50IHN0YXRlLCBjaGFyICptY2FzdF9pZm4sIF9fdTggc3luY2lkKTsKK2V4dGVybiBpbnQgc3RvcF9zeW5jX3RocmVhZChpbnQgc3RhdGUpOworZXh0ZXJuIHZvaWQgaXBfdnNfc3luY19jb25uKHN0cnVjdCBpcF92c19jb25uICpjcCk7CisKKworLyoKKyAqICAgICAgSVBWUyByYXRlIGVzdGltYXRvciBwcm90b3R5cGVzIChmcm9tIGlwX3ZzX2VzdC5jKQorICovCitleHRlcm4gaW50IGlwX3ZzX25ld19lc3RpbWF0b3Ioc3RydWN0IGlwX3ZzX3N0YXRzICpzdGF0cyk7CitleHRlcm4gdm9pZCBpcF92c19raWxsX2VzdGltYXRvcihzdHJ1Y3QgaXBfdnNfc3RhdHMgKnN0YXRzKTsKK2V4dGVybiB2b2lkIGlwX3ZzX3plcm9fZXN0aW1hdG9yKHN0cnVjdCBpcF92c19zdGF0cyAqc3RhdHMpOworCisvKgorICoJVmFyaW91cyBJUFZTIHBhY2tldCB0cmFuc21pdHRlcnMgKGZyb20gaXBfdnNfeG1pdC5jKQorICovCitleHRlcm4gaW50IGlwX3ZzX251bGxfeG1pdAorKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCk7CitleHRlcm4gaW50IGlwX3ZzX2J5cGFzc194bWl0Cisoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwKTsKK2V4dGVybiBpbnQgaXBfdnNfbmF0X3htaXQKKyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHApOworZXh0ZXJuIGludCBpcF92c190dW5uZWxfeG1pdAorKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCk7CitleHRlcm4gaW50IGlwX3ZzX2RyX3htaXQKKyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHApOworZXh0ZXJuIGludCBpcF92c19pY21wX3htaXQKKyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIGludCBvZmZzZXQpOworZXh0ZXJuIHZvaWQgaXBfdnNfZHN0X3Jlc2V0KHN0cnVjdCBpcF92c19kZXN0ICpkZXN0KTsKKworCisvKgorICoJVGhpcyBpcyBhIHNpbXBsZSBtZWNoYW5pc20gdG8gaWdub3JlIHBhY2tldHMgd2hlbgorICoJd2UgYXJlIGxvYWRlZC4gSnVzdCBzZXQgaXBfdnNfZHJvcF9yYXRlIHRvICduJyBhbmQKKyAqCXdlIHN0YXJ0IHRvIGRyb3AgMS9yYXRlIG9mIHRoZSBwYWNrZXRzCisgKi8KK2V4dGVybiBpbnQgaXBfdnNfZHJvcF9yYXRlOworZXh0ZXJuIGludCBpcF92c19kcm9wX2NvdW50ZXI7CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBpcF92c190b2Ryb3Aodm9pZCkKK3sKKwlpZiAoIWlwX3ZzX2Ryb3BfcmF0ZSkgcmV0dXJuIDA7CisJaWYgKC0taXBfdnNfZHJvcF9jb3VudGVyID4gMCkgcmV0dXJuIDA7CisJaXBfdnNfZHJvcF9jb3VudGVyID0gaXBfdnNfZHJvcF9yYXRlOworCXJldHVybiAxOworfQorCisvKgorICogICAgICBpcF92c19md2RfdGFnIHJldHVybnMgdGhlIGZvcndhcmRpbmcgdGFnIG9mIHRoZSBjb25uZWN0aW9uCisgKi8KKyNkZWZpbmUgSVBfVlNfRldEX01FVEhPRChjcCkgIChjcC0+ZmxhZ3MgJiBJUF9WU19DT05OX0ZfRldEX01BU0spCisKK2V4dGVybiBfX2lubGluZV9fIGNoYXIgaXBfdnNfZndkX3RhZyhzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApCit7CisJY2hhciBmd2Q7CisKKwlzd2l0Y2ggKElQX1ZTX0ZXRF9NRVRIT0QoY3ApKSB7CisJY2FzZSBJUF9WU19DT05OX0ZfTUFTUToKKwkJZndkID0gJ00nOyBicmVhazsKKwljYXNlIElQX1ZTX0NPTk5fRl9MT0NBTE5PREU6CisJCWZ3ZCA9ICdMJzsgYnJlYWs7CisJY2FzZSBJUF9WU19DT05OX0ZfVFVOTkVMOgorCQlmd2QgPSAnVCc7IGJyZWFrOworCWNhc2UgSVBfVlNfQ09OTl9GX0RST1VURToKKwkJZndkID0gJ1InOyBicmVhazsKKwljYXNlIElQX1ZTX0NPTk5fRl9CWVBBU1M6CisJCWZ3ZCA9ICdCJzsgYnJlYWs7CisJZGVmYXVsdDoKKwkJZndkID0gJz8nOyBicmVhazsKKwl9CisJcmV0dXJuIGZ3ZDsKK30KKworZXh0ZXJuIGludCBpcF92c19tYWtlX3NrYl93cml0YWJsZShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsIGludCBsZW4pOworZXh0ZXJuIHZvaWQgaXBfdnNfbmF0X2ljbXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKKwkJc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgZGlyKTsKKworZXh0ZXJuIHUxNiBpcF92c19jaGVja3N1bV9jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0KTsKKworc3RhdGljIGlubGluZSB1MTYgaXBfdnNfY2hlY2tfZGlmZih1MzIgb2xkLCB1MzIgbmV3LCB1MTYgb2xkc3VtKQoreworCXUzMiBkaWZmWzJdID0geyBvbGQsIG5ldyB9OworCisJcmV0dXJuIGNzdW1fZm9sZChjc3VtX3BhcnRpYWwoKGNoYXIgKikgZGlmZiwgc2l6ZW9mKGRpZmYpLAorCQkJCSAgICAgIG9sZHN1bSBeIDB4RkZGRikpOworfQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYJLyogX0lQX1ZTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwY29tcC5oIGIvaW5jbHVkZS9uZXQvaXBjb21wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY1MWE1NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L2lwY29tcC5oCkBAIC0wLDAgKzEsMTEgQEAKKyNpZm5kZWYgX05FVF9JUENPTVBfSAorI2RlZmluZSBfTkVUX0lQQ09NUF9ICisKKyNkZWZpbmUgSVBDT01QX1NDUkFUQ0hfU0laRSAgICAgNjU0MDAKKworc3RydWN0IGlwY29tcF9kYXRhIHsKKwl1MTYgdGhyZXNob2xkOworCXN0cnVjdCBjcnlwdG9fdGZtICoqdGZtczsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXBjb25maWcuaCBiL2luY2x1ZGUvbmV0L2lwY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmExZmU5OQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L2lwY29uZmlnLmgKQEAgLTAsMCArMSwyNyBAQAorLyoKKyAqICAkSWQ6IGlwY29uZmlnLmgsdiAxLjQgMjAwMS8wNC8zMCAwNDo1MTo0NiBkYXZlbSBFeHAgJAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFydGluIE1hcmVzCisgKgorICogIEF1dG9tYXRpYyBJUCBMYXllciBDb25maWd1cmF0aW9uCisgKi8KKworLyogVGhlIGZvbGxvd2luZyBhcmUgaW5pdGRhdGE6ICovCisKK2V4dGVybiBpbnQgaWNfcHJvdG9fZW5hYmxlZDsJLyogUHJvdG9jb2xzIGVuYWJsZWQgKHNlZSBJQ194eHgpICovCitleHRlcm4gaW50IGljX3NldF9tYW51YWxseTsJLyogSVBjb25maWcgcGFyYW1ldGVycyBzZXQgbWFudWFsbHkgKi8KKworZXh0ZXJuIHUzMiBpY19teWFkZHI7CQkvKiBNeSBJUCBhZGRyZXNzICovCitleHRlcm4gdTMyIGljX2dhdGV3YXk7CQkvKiBHYXRld2F5IElQIGFkZHJlc3MgKi8KKworZXh0ZXJuIHUzMiBpY19zZXJ2YWRkcjsJCS8qIEJvb3Qgc2VydmVyIElQIGFkZHJlc3MgKi8KKworZXh0ZXJuIHUzMiByb290X3NlcnZlcl9hZGRyOwkvKiBBZGRyZXNzIG9mIE5GUyBzZXJ2ZXIgKi8KK2V4dGVybiB1OCByb290X3NlcnZlcl9wYXRoW107CS8qIFBhdGggdG8gbW91bnQgYXMgcm9vdCAqLworCisKKy8qIGJpdHMgaW4gaWNfcHJvdG9fe2VuYWJsZWQsdXNlZH0gKi8KKyNkZWZpbmUgSUNfUFJPVE8JMHhGRgkvKiBQcm90b2NvbHMgbWFzazogKi8KKyNkZWZpbmUgSUNfQk9PVFAJMHgwMQkvKiAgIEJPT1RQIChvciBESENQLCBzZWUgYmVsb3cpICovCisjZGVmaW5lIElDX1JBUlAJCTB4MDIJLyogICBSQVJQICovCisjZGVmaW5lIElDX1VTRV9ESENQICAgIDB4MTAwCS8qIElmIG9uLCB1c2UgREhDUCBpbnN0ZWFkIG9mIEJPT1RQICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcGlwLmggYi9pbmNsdWRlL25ldC9pcGlwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ5MGMzYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L2lwaXAuaApAQCAtMCwwICsxLDUxIEBACisjaWZuZGVmIF9fTkVUX0lQSVBfSAorI2RlZmluZSBfX05FVF9JUElQX0ggMQorCisjaW5jbHVkZSA8bGludXgvaWZfdHVubmVsLmg+CisKKy8qIEtlZXAgZXJyb3Igc3RhdGUgb24gdHVubmVsIGZvciAzMCBzZWMgKi8KKyNkZWZpbmUgSVBUVU5ORUxfRVJSX1RJTUVPCSgzMCpIWikKKworc3RydWN0IGlwX3R1bm5lbAoreworCXN0cnVjdCBpcF90dW5uZWwJKm5leHQ7CisJc3RydWN0IG5ldF9kZXZpY2UJKmRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cwlzdGF0OworCisJaW50CQkJcmVjdXJzaW9uOwkvKiBEZXB0aCBvZiBoYXJkX3N0YXJ0X3htaXQgcmVjdXJzaW9uICovCisJaW50CQkJZXJyX2NvdW50OwkvKiBOdW1iZXIgb2YgYXJyaXZlZCBJQ01QIGVycm9ycyAqLworCXVuc2lnbmVkIGxvbmcJCWVycl90aW1lOwkvKiBUaW1lIHdoZW4gdGhlIGxhc3QgSUNNUCBlcnJvciBhcnJpdmVkICovCisKKwkvKiBUaGVzZSBmb3VyIGZpZWxkcyB1c2VkIG9ubHkgYnkgR1JFICovCisJX191MzIJCQlpX3NlcW5vOwkvKiBUaGUgbGFzdCBzZWVuIHNlcW5vCSovCisJX191MzIJCQlvX3NlcW5vOwkvKiBUaGUgbGFzdCBvdXRwdXQgc2Vxbm8gKi8KKwlpbnQJCQlobGVuOwkJLyogUHJlY2FsY3VsYXRlZCBHUkUgaGVhZGVyIGxlbmd0aCAqLworCWludAkJCW1saW5rOworCisJc3RydWN0IGlwX3R1bm5lbF9wYXJtCXBhcm1zOworfTsKKworI2RlZmluZSBJUFRVTk5FTF9YTUlUKCkgZG8gewkJCQkJCVwKKwlpbnQgZXJyOwkJCQkJCQlcCisJaW50IHBrdF9sZW4gPSBza2ItPmxlbjsJCQkJCQlcCisJCQkJCQkJCQlcCisJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwkJCQkJXAorCWlwaC0+dG90X2xlbiA9IGh0b25zKHNrYi0+bGVuKTsJCQkJCVwKKwlpcF9zZWxlY3RfaWRlbnQoaXBoLCAmcnQtPnUuZHN0LCBOVUxMKTsJCQkJXAorCWlwX3NlbmRfY2hlY2soaXBoKTsJCQkJCQlcCisJCQkJCQkJCQlcCisJZXJyID0gTkZfSE9PSyhQRl9JTkVULCBORl9JUF9MT0NBTF9PVVQsIHNrYiwgTlVMTCwgcnQtPnUuZHN0LmRldiwgZHN0X291dHB1dCk7XAorCWlmIChlcnIgPT0gTkVUX1hNSVRfU1VDQ0VTUyB8fCBlcnIgPT0gTkVUX1hNSVRfQ04pIHsJCVwKKwkJc3RhdHMtPnR4X2J5dGVzICs9IHBrdF9sZW47CQkJCVwKKwkJc3RhdHMtPnR4X3BhY2tldHMrKzsJCQkJCVwKKwl9IGVsc2UgewkJCQkJCQlcCisJCXN0YXRzLT50eF9lcnJvcnMrKzsJCQkJCVwKKwkJc3RhdHMtPnR4X2Fib3J0ZWRfZXJyb3JzKys7CQkJCVwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisKK2V4dGVybiBpbnQJc2l0X2luaXQodm9pZCk7CitleHRlcm4gdm9pZAlzaXRfY2xlYW51cCh2b2lkKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcHY2LmggYi9pbmNsdWRlL25ldC9pcHY2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdjNDVjYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L2lwdjYuaApAQCAtMCwwICsxLDQ3MiBAQAorLyoKKyAqCUxpbnV4IElORVQ2IGltcGxlbWVudGF0aW9uCisgKgorICoJQXV0aG9yczoKKyAqCVBlZHJvIFJvcXVlCQk8cm9xdWVAZGkuZmMudWwucHQ+CisgKgorICoJJElkOiBpcHY2LmgsdiAxLjEgMjAwMi8wNS8yMCAxNToxMzowNyBqZ3JpbW0gRXhwICQKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgICAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogICAgICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgX05FVF9JUFY2X0gKKyNkZWZpbmUgX05FVF9JUFY2X0gKKworI2luY2x1ZGUgPGxpbnV4L2lwdjYuaD4KKyNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CisjaW5jbHVkZSA8bmV0L25kaXNjLmg+CisjaW5jbHVkZSA8bmV0L2Zsb3cuaD4KKyNpbmNsdWRlIDxuZXQvc25tcC5oPgorCisjZGVmaW5lIFNJTjZfTEVOX1JGQzIxMzMJMjQKKworI2RlZmluZSBJUFY2X01BWFBMRU4JCTY1NTM1CisKKy8qCisgKglOZXh0SGVhZGVyIGZpZWxkIG9mIElQdjYgaGVhZGVyCisgKi8KKworI2RlZmluZSBORVhUSERSX0hPUAkJMAkvKiBIb3AtYnktaG9wIG9wdGlvbiBoZWFkZXIuICovCisjZGVmaW5lIE5FWFRIRFJfVENQCQk2CS8qIFRDUCBzZWdtZW50LiAqLworI2RlZmluZSBORVhUSERSX1VEUAkJMTcJLyogVURQIG1lc3NhZ2UuICovCisjZGVmaW5lIE5FWFRIRFJfSVBWNgkJNDEJLyogSVB2NiBpbiBJUHY2ICovCisjZGVmaW5lIE5FWFRIRFJfUk9VVElORwkJNDMJLyogUm91dGluZyBoZWFkZXIuICovCisjZGVmaW5lIE5FWFRIRFJfRlJBR01FTlQJNDQJLyogRnJhZ21lbnRhdGlvbi9yZWFzc2VtYmx5IGhlYWRlci4gKi8KKyNkZWZpbmUgTkVYVEhEUl9FU1AJCTUwCS8qIEVuY2Fwc3VsYXRpbmcgc2VjdXJpdHkgcGF5bG9hZC4gKi8KKyNkZWZpbmUgTkVYVEhEUl9BVVRICQk1MQkvKiBBdXRoZW50aWNhdGlvbiBoZWFkZXIuICovCisjZGVmaW5lIE5FWFRIRFJfSUNNUAkJNTgJLyogSUNNUCBmb3IgSVB2Ni4gKi8KKyNkZWZpbmUgTkVYVEhEUl9OT05FCQk1OQkvKiBObyBuZXh0IGhlYWRlciAqLworI2RlZmluZSBORVhUSERSX0RFU1QJCTYwCS8qIERlc3RpbmF0aW9uIG9wdGlvbnMgaGVhZGVyLiAqLworCisjZGVmaW5lIE5FWFRIRFJfTUFYCQkyNTUKKworCisKKyNkZWZpbmUgSVBWNl9ERUZBVUxUX0hPUExJTUlUICAgNjQKKyNkZWZpbmUgSVBWNl9ERUZBVUxUX01DQVNUSE9QUwkxCisKKy8qCisgKglBZGRyIHR5cGUKKyAqCQorICoJdHlwZQktCXVuaWNhc3QgfCBtdWx0aWNhc3QKKyAqCXNjb3BlCS0JbG9jYWwJfCBzaXRlCSAgICB8IGdsb2JhbAorICoJdjQJLQljb21wYXQKKyAqCXY0bWFwcGVkCisgKglhbnkKKyAqCWxvb3BiYWNrCisgKi8KKworI2RlZmluZSBJUFY2X0FERFJfQU5ZCQkweDAwMDBVCisKKyNkZWZpbmUgSVBWNl9BRERSX1VOSUNBU1QgICAgICAJMHgwMDAxVQkKKyNkZWZpbmUgSVBWNl9BRERSX01VTFRJQ0FTVCAgICAJMHgwMDAyVQkKKworI2RlZmluZSBJUFY2X0FERFJfTE9PUEJBQ0sJMHgwMDEwVQorI2RlZmluZSBJUFY2X0FERFJfTElOS0xPQ0FMCTB4MDAyMFUKKyNkZWZpbmUgSVBWNl9BRERSX1NJVEVMT0NBTAkweDAwNDBVCisKKyNkZWZpbmUgSVBWNl9BRERSX0NPTVBBVHY0CTB4MDA4MFUKKworI2RlZmluZSBJUFY2X0FERFJfU0NPUEVfTUFTSwkweDAwZjBVCisKKyNkZWZpbmUgSVBWNl9BRERSX01BUFBFRAkweDEwMDBVCisjZGVmaW5lIElQVjZfQUREUl9SRVNFUlZFRAkweDIwMDBVCS8qIHJlc2VydmVkIGFkZHJlc3Mgc3BhY2UgKi8KKworLyoKKyAqCUFkZHIgc2NvcGVzCisgKi8KKyNpZmRlZiBfX0tFUk5FTF9fCisjZGVmaW5lIElQVjZfQUREUl9NQ19TQ09QRShhKQlcCisJKChhKS0+czZfYWRkclsxXSAmIDB4MGYpCS8qIG5vbnN0YW5kYXJkICovCisjZGVmaW5lIF9fSVBWNl9BRERSX1NDT1BFX0lOVkFMSUQJLTEKKyNlbmRpZgorI2RlZmluZSBJUFY2X0FERFJfU0NPUEVfTk9ERUxPQ0FMCTB4MDEKKyNkZWZpbmUgSVBWNl9BRERSX1NDT1BFX0xJTktMT0NBTAkweDAyCisjZGVmaW5lIElQVjZfQUREUl9TQ09QRV9TSVRFTE9DQUwJMHgwNQorI2RlZmluZSBJUFY2X0FERFJfU0NPUEVfT1JHTE9DQUwJMHgwOAorI2RlZmluZSBJUFY2X0FERFJfU0NPUEVfR0xPQkFMCQkweDBlCisKKy8qCisgKglmcmFnbWVudGF0aW9uIGhlYWRlcgorICovCisKK3N0cnVjdCBmcmFnX2hkciB7CisJdW5zaWduZWQgY2hhcgluZXh0aGRyOworCXVuc2lnbmVkIGNoYXIJcmVzZXJ2ZWQ7CQorCXVuc2lnbmVkIHNob3J0CWZyYWdfb2ZmOworCV9fdTMyCQlpZGVudGlmaWNhdGlvbjsKK307CisKKyNkZWZpbmUJSVA2X01GCTB4MDAwMQorCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bmV0L3NvY2suaD4KKworLyogc3lzY3RscyAqLworZXh0ZXJuIGludCBzeXNjdGxfaXB2Nl9iaW5kdjZvbmx5OworZXh0ZXJuIGludCBzeXNjdGxfbWxkX21heF9tc2Y7CisKKy8qIE1JQnMgKi8KK0RFQ0xBUkVfU05NUF9TVEFUKHN0cnVjdCBpcHN0YXRzX21pYiwgaXB2Nl9zdGF0aXN0aWNzKTsKKyNkZWZpbmUgSVA2X0lOQ19TVEFUUyhmaWVsZCkJCVNOTVBfSU5DX1NUQVRTKGlwdjZfc3RhdGlzdGljcywgZmllbGQpCisjZGVmaW5lIElQNl9JTkNfU1RBVFNfQkgoZmllbGQpCQlTTk1QX0lOQ19TVEFUU19CSChpcHY2X3N0YXRpc3RpY3MsIGZpZWxkKQorI2RlZmluZSBJUDZfSU5DX1NUQVRTX1VTRVIoZmllbGQpIAlTTk1QX0lOQ19TVEFUU19VU0VSKGlwdjZfc3RhdGlzdGljcywgZmllbGQpCitERUNMQVJFX1NOTVBfU1RBVChzdHJ1Y3QgaWNtcHY2X21pYiwgaWNtcHY2X3N0YXRpc3RpY3MpOworI2RlZmluZSBJQ01QNl9JTkNfU1RBVFMoaWRldiwgZmllbGQpCQkoewkJCVwKKwlzdHJ1Y3QgaW5ldDZfZGV2ICpfaWRldiA9IChpZGV2KTsJCQkJXAorCWlmIChsaWtlbHkoX2lkZXYgIT0gTlVMTCkpCQkJCQlcCisJCVNOTVBfSU5DX1NUQVRTKGlkZXYtPnN0YXRzLmljbXB2NiwgZmllbGQpOyAJCVwKKwlTTk1QX0lOQ19TVEFUUyhpY21wdjZfc3RhdGlzdGljcywgZmllbGQpOwkJCVwKK30pCisjZGVmaW5lIElDTVA2X0lOQ19TVEFUU19CSChpZGV2LCBmaWVsZCkJCSh7CQkJXAorCXN0cnVjdCBpbmV0Nl9kZXYgKl9pZGV2ID0gKGlkZXYpOwkJCQlcCisJaWYgKGxpa2VseShfaWRldiAhPSBOVUxMKSkJCQkJCVwKKwkJU05NUF9JTkNfU1RBVFNfQkgoKF9pZGV2KS0+c3RhdHMuaWNtcHY2LCBmaWVsZCk7CVwKKwlTTk1QX0lOQ19TVEFUU19CSChpY21wdjZfc3RhdGlzdGljcywgZmllbGQpOwkJCVwKK30pCisjZGVmaW5lIElDTVA2X0lOQ19TVEFUU19VU0VSKGlkZXYsIGZpZWxkKSAJKHsJCQlcCisJc3RydWN0IGluZXQ2X2RldiAqX2lkZXYgPSAoaWRldik7CQkJCVwKKwlpZiAobGlrZWx5KF9pZGV2ICE9IE5VTEwpKQkJCQkJXAorCQlTTk1QX0lOQ19TVEFUU19VU0VSKF9pZGV2LT5zdGF0cy5pY21wdjYsIGZpZWxkKTsJXAorCVNOTVBfSU5DX1NUQVRTX1VTRVIoaWNtcHY2X3N0YXRpc3RpY3MsIGZpZWxkKTsJCQlcCit9KQorI2RlZmluZSBJQ01QNl9JTkNfU1RBVFNfT0ZGU0VUX0JIKGlkZXYsIGZpZWxkLCBvZmZzZXQpCSh7CQkJXAorCXN0cnVjdCBpbmV0Nl9kZXYgKl9pZGV2ID0gaWRldjsJCQkJCQlcCisJX190eXBlb2ZfXyhvZmZzZXQpIF9vZmZzZXQgPSAob2Zmc2V0KTsJCQkJCVwKKwlpZiAobGlrZWx5KF9pZGV2ICE9IE5VTEwpKQkJCQkJCVwKKwkJU05NUF9JTkNfU1RBVFNfT0ZGU0VUX0JIKF9pZGV2LT5zdGF0cy5pY21wdjYsIGZpZWxkLCBfb2Zmc2V0KTsJXAorCVNOTVBfSU5DX1NUQVRTX09GRlNFVF9CSChpY21wdjZfc3RhdGlzdGljcywgZmllbGQsIF9vZmZzZXQpOyAgICAJXAorfSkKK0RFQ0xBUkVfU05NUF9TVEFUKHN0cnVjdCB1ZHBfbWliLCB1ZHBfc3RhdHNfaW42KTsKKyNkZWZpbmUgVURQNl9JTkNfU1RBVFMoZmllbGQpCQlTTk1QX0lOQ19TVEFUUyh1ZHBfc3RhdHNfaW42LCBmaWVsZCkKKyNkZWZpbmUgVURQNl9JTkNfU1RBVFNfQkgoZmllbGQpCVNOTVBfSU5DX1NUQVRTX0JIKHVkcF9zdGF0c19pbjYsIGZpZWxkKQorI2RlZmluZSBVRFA2X0lOQ19TVEFUU19VU0VSKGZpZWxkKSAJU05NUF9JTkNfU1RBVFNfVVNFUih1ZHBfc3RhdHNfaW42LCBmaWVsZCkKK2V4dGVybiBhdG9taWNfdAkJCWluZXQ2X3NvY2tfbnI7CisKK2ludCBzbm1wNl9yZWdpc3Rlcl9kZXYoc3RydWN0IGluZXQ2X2RldiAqaWRldik7CitpbnQgc25tcDZfdW5yZWdpc3Rlcl9kZXYoc3RydWN0IGluZXQ2X2RldiAqaWRldik7CitpbnQgc25tcDZfYWxsb2NfZGV2KHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpOworaW50IHNubXA2X2ZyZWVfZGV2KHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpOworaW50IHNubXA2X21pYl9pbml0KHZvaWQgKnB0clsyXSwgc2l6ZV90IG1pYnNpemUsIHNpemVfdCBtaWJhbGlnbik7Cit2b2lkIHNubXA2X21pYl9mcmVlKHZvaWQgKnB0clsyXSk7CisKK3N0cnVjdCBpcDZfcmFfY2hhaW4KK3sKKwlzdHJ1Y3QgaXA2X3JhX2NoYWluCSpuZXh0OworCXN0cnVjdCBzb2NrCQkqc2s7CisJaW50CQkJc2VsOworCXZvaWQJCQkoKmRlc3RydWN0b3IpKHN0cnVjdCBzb2NrICopOworfTsKKworZXh0ZXJuIHN0cnVjdCBpcDZfcmFfY2hhaW4JKmlwNl9yYV9jaGFpbjsKK2V4dGVybiByd2xvY2tfdCBpcDZfcmFfbG9jazsKKworLyoKKyAgIFRoaXMgc3RydWN0dXJlIGlzIHByZXBhcmVkIGJ5IHByb3RvY29sLCB3aGVuIHBhcnNpbmcKKyAgIGFuY2lsbGFyeSBkYXRhIGFuZCBwYXNzZWQgdG8gSVB2Ni4KKyAqLworCitzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMKK3sKKwkvKiBMZW5ndGggb2YgdGhpcyBzdHJ1Y3R1cmUgKi8KKwlpbnQJCQl0b3RfbGVuOworCisJLyogbGVuZ3RoIG9mIGV4dGVuc2lvbiBoZWFkZXJzICAgKi8KKworCV9fdTE2CQkJb3B0X2ZsZW47CS8qIGFmdGVyIGZyYWdtZW50IGhkciAqLworCV9fdTE2CQkJb3B0X25mbGVuOwkvKiBiZWZvcmUgZnJhZ21lbnQgaGRyICovCisKKwlzdHJ1Y3QgaXB2Nl9vcHRfaGRyCSpob3BvcHQ7CisJc3RydWN0IGlwdjZfb3B0X2hkcgkqZHN0MG9wdDsKKwlzdHJ1Y3QgaXB2Nl9ydF9oZHIJKnNyY3J0OwkvKiBSb3V0aW5nIEhlYWRlciAqLworCXN0cnVjdCBpcHY2X29wdF9oZHIJKmF1dGg7CisJc3RydWN0IGlwdjZfb3B0X2hkcgkqZHN0MW9wdDsKKworCS8qIE9wdGlvbiBidWZmZXIsIGFzIHJlYWQgYnkgSVBWNl9QS1RPUFRJT05TLCBzdGFydHMgaGVyZS4gKi8KK307CisKK3N0cnVjdCBpcDZfZmxvd2xhYmVsCit7CisJc3RydWN0IGlwNl9mbG93bGFiZWwJKm5leHQ7CisJdTMyCQkJbGFiZWw7CisJc3RydWN0IGluNl9hZGRyCQlkc3Q7CisJc3RydWN0IGlwdjZfdHhvcHRpb25zCSpvcHQ7CisJYXRvbWljX3QJCXVzZXJzOworCXVuc2lnbmVkIGxvbmcJCWxpbmdlcjsKKwl1OAkJCXNoYXJlOworCXUzMgkJCW93bmVyOworCXVuc2lnbmVkIGxvbmcJCWxhc3R1c2U7CisJdW5zaWduZWQgbG9uZwkJZXhwaXJlczsKK307CisKKyNkZWZpbmUgSVBWNl9GTE9XSU5GT19NQVNLCV9fY29uc3RhbnRfaHRvbmwoMHgwRkZGRkZGRikKKyNkZWZpbmUgSVBWNl9GTE9XTEFCRUxfTUFTSwlfX2NvbnN0YW50X2h0b25sKDB4MDAwRkZGRkYpCisKK3N0cnVjdCBpcHY2X2ZsX3NvY2tsaXN0Cit7CisJc3RydWN0IGlwdjZfZmxfc29ja2xpc3QJKm5leHQ7CisJc3RydWN0IGlwNl9mbG93bGFiZWwJKmZsOworfTsKKworZXh0ZXJuIHN0cnVjdCBpcDZfZmxvd2xhYmVsCSpmbDZfc29ja19sb29rdXAoc3RydWN0IHNvY2sgKnNrLCB1MzIgbGFiZWwpOworZXh0ZXJuIHN0cnVjdCBpcHY2X3R4b3B0aW9ucwkqZmw2X21lcmdlX29wdGlvbnMoc3RydWN0IGlwdjZfdHhvcHRpb25zICogb3B0X3NwYWNlLAorCQkJCQkJICAgc3RydWN0IGlwNl9mbG93bGFiZWwgKiBmbCwKKwkJCQkJCSAgIHN0cnVjdCBpcHY2X3R4b3B0aW9ucyAqIGZvcHQpOworZXh0ZXJuIHZvaWQJCQlmbDZfZnJlZV9zb2NrbGlzdChzdHJ1Y3Qgc29jayAqc2spOworZXh0ZXJuIGludAkJCWlwdjZfZmxvd2xhYmVsX29wdChzdHJ1Y3Qgc29jayAqc2ssIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBvcHRsZW4pOworZXh0ZXJuIHZvaWQJCQlpcDZfZmxvd2xhYmVsX2luaXQodm9pZCk7CitleHRlcm4gdm9pZAkJCWlwNl9mbG93bGFiZWxfY2xlYW51cCh2b2lkKTsKKworc3RhdGljIGlubGluZSB2b2lkIGZsNl9zb2NrX3JlbGVhc2Uoc3RydWN0IGlwNl9mbG93bGFiZWwgKmZsKQoreworCWlmIChmbCkKKwkJYXRvbWljX2RlYygmZmwtPnVzZXJzKTsKK30KKworZXh0ZXJuIGludCAJCQlpcDZfcmFfY29udHJvbChzdHJ1Y3Qgc29jayAqc2ssIGludCBzZWwsCisJCQkJCSAgICAgICB2b2lkICgqZGVzdHJ1Y3Rvcikoc3RydWN0IHNvY2sgKikpOworCisKK2V4dGVybiBpbnQJCQlpcHY2X3BhcnNlX2hvcG9wdHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50KTsKKworZXh0ZXJuIHN0cnVjdCBpcHY2X3R4b3B0aW9ucyAqICBpcHY2X2R1cF9vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwdjZfdHhvcHRpb25zICpvcHQpOworCitleHRlcm4gaW50IGlwNl9mcmFnX25xdWV1ZXM7CitleHRlcm4gYXRvbWljX3QgaXA2X2ZyYWdfbWVtOworCisjZGVmaW5lIElQVjZfRlJBR19USU1FT1VUCSg2MCpIWikJCS8qIDYwIHNlY29uZHMgKi8KKworLyoKKyAqCUZ1bmN0aW9uIHByb3RvdHlwZSBmb3IgYnVpbGRfeG1pdAorICovCisKK3R5cGVkZWYgaW50CQkoKmluZXRfZ2V0ZnJhZ190KSAoY29uc3Qgdm9pZCAqZGF0YSwKKwkJCQkJICAgc3RydWN0IGluNl9hZGRyICphZGRyLAorCQkJCQkgICBjaGFyICosCisJCQkJCSAgIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKKworCitleHRlcm4gaW50CQlpcHY2X2FkZHJfdHlwZShjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpOworCitzdGF0aWMgaW5saW5lIGludCBpcHY2X2FkZHJfc2NvcGUoY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKQoreworCXJldHVybiBpcHY2X2FkZHJfdHlwZShhZGRyKSAmIElQVjZfQUREUl9TQ09QRV9NQVNLOworfQorCitzdGF0aWMgaW5saW5lIGludCBpcHY2X2FkZHJfY21wKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYTEsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYTIpCit7CisJcmV0dXJuIG1lbWNtcCgoY29uc3Qgdm9pZCAqKSBhMSwgKGNvbnN0IHZvaWQgKikgYTIsIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGlwdjZfYWRkcl9jb3B5KHN0cnVjdCBpbjZfYWRkciAqYTEsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYTIpCit7CisJbWVtY3B5KCh2b2lkICopIGExLCAoY29uc3Qgdm9pZCAqKSBhMiwgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaXB2Nl9hZGRyX3ByZWZpeChzdHJ1Y3QgaW42X2FkZHIgKnBmeCwgCisJCQkJICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkciwKKwkJCQkgICAgaW50IHBsZW4pCit7CisJLyogY2FsbGVyIG11c3QgZ3VhcmFudGVlIDAgPD0gcGxlbiA8PSAxMjggKi8KKwlpbnQgbyA9IHBsZW4gPj4gMywKKwkgICAgYiA9IHBsZW4gJiAweDc7CisKKwltZW1jcHkocGZ4LT5zNl9hZGRyLCBhZGRyLCBvKTsKKwlpZiAoYiAhPSAwKSB7CisJCXBmeC0+czZfYWRkcltvXSA9IGFkZHItPnM2X2FkZHJbb10gJiAoMHhmZjAwID4+IGIpOworCQlvKys7CisJfQorCWlmIChvIDwgMTYpCisJCW1lbXNldChwZngtPnM2X2FkZHIgKyBvLCAwLCAxNiAtIG8pOworfQorCisjaWZuZGVmIF9fSEFWRV9BUkNIX0FERFJfU0VUCitzdGF0aWMgaW5saW5lIHZvaWQgaXB2Nl9hZGRyX3NldChzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsIAorCQkJCSAgICAgX191MzIgdzEsIF9fdTMyIHcyLAorCQkJCSAgICAgX191MzIgdzMsIF9fdTMyIHc0KQoreworCWFkZHItPnM2X2FkZHIzMlswXSA9IHcxOworCWFkZHItPnM2X2FkZHIzMlsxXSA9IHcyOworCWFkZHItPnM2X2FkZHIzMlsyXSA9IHczOworCWFkZHItPnM2X2FkZHIzMlszXSA9IHc0OworfQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgaW50IGlwdjZfYWRkcl9lcXVhbChjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmExLAorCQkJCSAgY29uc3Qgc3RydWN0IGluNl9hZGRyICphMikKK3sKKwlyZXR1cm4gKGExLT5zNl9hZGRyMzJbMF0gPT0gYTItPnM2X2FkZHIzMlswXSAmJgorCQlhMS0+czZfYWRkcjMyWzFdID09IGEyLT5zNl9hZGRyMzJbMV0gJiYKKwkJYTEtPnM2X2FkZHIzMlsyXSA9PSBhMi0+czZfYWRkcjMyWzJdICYmCisJCWExLT5zNl9hZGRyMzJbM10gPT0gYTItPnM2X2FkZHIzMlszXSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9faXB2Nl9wcmVmaXhfZXF1YWwoY29uc3QgdTMyICphMSwgY29uc3QgdTMyICphMiwKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgcHJlZml4bGVuKQoreworCXVuc2lnbmVkIHBkdywgcGJpOworCisJLyogY2hlY2sgY29tcGxldGUgdTMyIGluIHByZWZpeCAqLworCXBkdyA9IHByZWZpeGxlbiA+PiA1OworCWlmIChwZHcgJiYgbWVtY21wKGExLCBhMiwgcGR3IDw8IDIpKQorCQlyZXR1cm4gMDsKKworCS8qIGNoZWNrIGluY29tcGxldGUgdTMyIGluIHByZWZpeCAqLworCXBiaSA9IHByZWZpeGxlbiAmIDB4MWY7CisJaWYgKHBiaSAmJiAoKGExW3Bkd10gXiBhMltwZHddKSAmIGh0b25sKCgweGZmZmZmZmZmKSA8PCAoMzIgLSBwYmkpKSkpCisJCXJldHVybiAwOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGlwdjZfcHJlZml4X2VxdWFsKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYTEsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYTIsCisJCQkJICAgIHVuc2lnbmVkIGludCBwcmVmaXhsZW4pCit7CisJcmV0dXJuIF9faXB2Nl9wcmVmaXhfZXF1YWwoYTEtPnM2X2FkZHIzMiwgYTItPnM2X2FkZHIzMiwKKwkJCQkgICBwcmVmaXhsZW4pOworfQorCitzdGF0aWMgaW5saW5lIGludCBpcHY2X2FkZHJfYW55KGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYSkKK3sKKwlyZXR1cm4gKChhLT5zNl9hZGRyMzJbMF0gfCBhLT5zNl9hZGRyMzJbMV0gfCAKKwkJIGEtPnM2X2FkZHIzMlsyXSB8IGEtPnM2X2FkZHIzMlszXSApID09IDApOyAKK30KKworLyoKKyAqCVByb3RvdHlwZXMgZXhwb3J0ZWQgYnkgaXB2NgorICovCisKKy8qCisgKglyY3YgZnVuY3Rpb24gKGNhbGxlZCBmcm9tIG5ldGRldmljZSBsZXZlbCkKKyAqLworCitleHRlcm4gaW50CQkJaXB2Nl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgCisJCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCAKKwkJCQkJIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQpOworCisvKgorICoJdXBwZXItbGF5ZXIgb3V0cHV0IGZ1bmN0aW9ucworICovCitleHRlcm4gaW50CQkJaXA2X3htaXQoc3RydWN0IHNvY2sgKnNrLAorCQkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJIHN0cnVjdCBmbG93aSAqZmwsCisJCQkJCSBzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMgKm9wdCwKKwkJCQkJIGludCBpcGZyYWdvayk7CisKK2V4dGVybiBpbnQJCQlpcDZfbmRfaGRyKHN0cnVjdCBzb2NrICpzaywKKwkJCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJICAgc3RydWN0IGluNl9hZGRyICpzYWRkciwKKwkJCQkJICAgc3RydWN0IGluNl9hZGRyICpkYWRkciwKKwkJCQkJICAgaW50IHByb3RvLCBpbnQgbGVuKTsKKworZXh0ZXJuIGludAkJCWlwNl9maW5kXzFzdGZyYWdvcHQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggKipuZXh0aGRyKTsKKworZXh0ZXJuIGludAkJCWlwNl9hcHBlbmRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssCisJCQkJCQlpbnQgZ2V0ZnJhZyh2b2lkICpmcm9tLCBjaGFyICp0bywgaW50IG9mZnNldCwgaW50IGxlbiwgaW50IG9kZCwgc3RydWN0IHNrX2J1ZmYgKnNrYiksCisJCSAgICAJCQkJdm9pZCAqZnJvbSwKKwkJCQkJCWludCBsZW5ndGgsCisJCQkJCQlpbnQgdHJhbnNoZHJsZW4sCisJCSAgICAgIAkJCQlpbnQgaGxpbWl0LAorCQkJCQkJc3RydWN0IGlwdjZfdHhvcHRpb25zICpvcHQsCisJCQkJCQlzdHJ1Y3QgZmxvd2kgKmZsLAorCQkJCQkJc3RydWN0IHJ0Nl9pbmZvICpydCwKKwkJCQkJCXVuc2lnbmVkIGludCBmbGFncyk7CisKK2V4dGVybiBpbnQJCQlpcDZfcHVzaF9wZW5kaW5nX2ZyYW1lcyhzdHJ1Y3Qgc29jayAqc2spOworCitleHRlcm4gdm9pZAkJCWlwNl9mbHVzaF9wZW5kaW5nX2ZyYW1lcyhzdHJ1Y3Qgc29jayAqc2spOworCitleHRlcm4gaW50CQkJaXA2X2RzdF9sb29rdXAoc3RydWN0IHNvY2sgKnNrLAorCQkJCQkgICAgICAgc3RydWN0IGRzdF9lbnRyeSAqKmRzdCwKKwkJCQkJICAgICAgIHN0cnVjdCBmbG93aSAqZmwpOworCisvKgorICoJc2tiIHByb2Nlc3NpbmcgZnVuY3Rpb25zCisgKi8KKworZXh0ZXJuIGludAkJCWlwNl9vdXRwdXQoc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50CQkJaXA2X2ZvcndhcmQoc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50CQkJaXA2X2lucHV0KHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludAkJCWlwNl9tY19pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKworLyoKKyAqCUV4dGVuc2lvbiBoZWFkZXIgKG9wdGlvbnMpIHByb2Nlc3NpbmcKKyAqLworCitleHRlcm4gdTggKgkJCWlwdjZfYnVpbGRfbmZyYWdfb3B0cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkJICAgICAgdTggKnByZXZfaGRyLAorCQkJCQkJICAgICAgc3RydWN0IGlwdjZfdHhvcHRpb25zICpvcHQsCisJCQkJCQkgICAgICBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAorCQkJCQkJICAgICAgdTMyIGp1bWJvbGVuKTsKK2V4dGVybiB1OCAqCQkJaXB2Nl9idWlsZF9mcmFnX29wdHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJCSAgICAgdTggKnByZXZfaGRyLAorCQkJCQkJICAgICBzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMgKm9wdCk7CitleHRlcm4gdm9pZCAJCQlpcHY2X3B1c2hfbmZyYWdfb3B0cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkJICAgICBzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMgKm9wdCwKKwkJCQkJCSAgICAgdTggKnByb3RvLAorCQkJCQkJICAgICBzdHJ1Y3QgaW42X2FkZHIgKipkYWRkcl9wKTsKK2V4dGVybiB2b2lkCQkJaXB2Nl9wdXNoX2ZyYWdfb3B0cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkJICAgIHN0cnVjdCBpcHY2X3R4b3B0aW9ucyAqb3B0LAorCQkJCQkJICAgIHU4ICpwcm90byk7CisKK2V4dGVybiBpbnQJCQlpcHY2X3NraXBfZXh0aGRyKGNvbnN0IHN0cnVjdCBza19idWZmICosIGludCBzdGFydCwKKwkJCQkJICAgICAgICAgdTggKm5leHRoZHJwLCBpbnQgbGVuKTsKKworZXh0ZXJuIGludCAJCQlpcHY2X2V4dF9oZHIodTggbmV4dGhkcik7CisKK2V4dGVybiBzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMgKglpcHY2X2ludmVydF9ydGhkcihzdHJ1Y3Qgc29jayAqc2ssCisJCQkJCQkgIHN0cnVjdCBpcHY2X3J0X2hkciAqaGRyKTsKKworCisvKgorICoJc29ja2V0IG9wdGlvbnMgKGlwdjZfc29ja2dsdWUuYykKKyAqLworCitleHRlcm4gaW50CQkJaXB2Nl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCAKKwkJCQkJCWludCBvcHRuYW1lLAorCQkJCQkJY2hhciBfX3VzZXIgKm9wdHZhbCwgCisJCQkJCQlpbnQgb3B0bGVuKTsKK2V4dGVybiBpbnQJCQlpcHY2X2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIAorCQkJCQkJaW50IG9wdG5hbWUsCisJCQkJCQljaGFyIF9fdXNlciAqb3B0dmFsLCAKKwkJCQkJCWludCBfX3VzZXIgKm9wdGxlbik7CisKK2V4dGVybiB2b2lkCQkJaXB2Nl9wYWNrZXRfaW5pdCh2b2lkKTsKKworZXh0ZXJuIHZvaWQJCQlpcHY2X3BhY2tldF9jbGVhbnVwKHZvaWQpOworCitleHRlcm4gaW50CQkJaXA2X2RhdGFncmFtX2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrLCAKKwkJCQkJCSAgICAgc3RydWN0IHNvY2thZGRyICphZGRyLCBpbnQgYWRkcl9sZW4pOworCitleHRlcm4gaW50IAkJCWlwdjZfcmVjdl9lcnJvcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbik7CitleHRlcm4gdm9pZAkJCWlwdjZfaWNtcF9lcnJvcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsIGludCBlcnIsIHUxNiBwb3J0LAorCQkJCQkJdTMyIGluZm8sIHU4ICpwYXlsb2FkKTsKK2V4dGVybiB2b2lkCQkJaXB2Nl9sb2NhbF9lcnJvcihzdHJ1Y3Qgc29jayAqc2ssIGludCBlcnIsIHN0cnVjdCBmbG93aSAqZmwsIHUzMiBpbmZvKTsKKworZXh0ZXJuIGludCBpbmV0Nl9yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spOworZXh0ZXJuIGludCBpbmV0Nl9iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqdWFkZHIsIAorCQkgICAgICBpbnQgYWRkcl9sZW4pOworZXh0ZXJuIGludCBpbmV0Nl9nZXRuYW1lKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqdWFkZHIsCisJCQkgaW50ICp1YWRkcl9sZW4sIGludCBwZWVyKTsKK2V4dGVybiBpbnQgaW5ldDZfaW9jdGwoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGNtZCwgCisJCSAgICAgICB1bnNpZ25lZCBsb25nIGFyZyk7CisKKy8qCisgKiByZWFzc2VtYmx5LmMKKyAqLworZXh0ZXJuIGludCBzeXNjdGxfaXA2ZnJhZ19oaWdoX3RocmVzaDsKK2V4dGVybiBpbnQgc3lzY3RsX2lwNmZyYWdfbG93X3RocmVzaDsKK2V4dGVybiBpbnQgc3lzY3RsX2lwNmZyYWdfdGltZTsKK2V4dGVybiBpbnQgc3lzY3RsX2lwNmZyYWdfc2VjcmV0X2ludGVydmFsOworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9ORVRfSVBWNl9IICovCisKKworCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcHguaCBiL2luY2x1ZGUvbmV0L2lweC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjMGNmMzMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9pcHguaApAQCAtMCwwICsxLDE2MSBAQAorI2lmbmRlZiBfTkVUX0lORVRfSVBYX0hfCisjZGVmaW5lIF9ORVRfSU5FVF9JUFhfSF8KKy8qCisgKglUaGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGlzIGluIGl0cyBlbnRpcmV0eSBvYnRhaW5lZCBmcm9tOgorICoKKyAqCU5vdmVsbCAnSVBYIFJvdXRlciBTcGVjaWZpY2F0aW9uJyBWZXJzaW9uIDEuMTAgCisgKgkJUGFydCBOby4gMTA3LTAwMDAyOS0wMDEKKyAqCisgKglXaGljaCBpcyBhdmFpbGFibGUgZnJvbSBmdHAubm92ZWxsLmNvbQorICovCisKKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxuZXQvZGF0YWxpbmsuaD4KKyNpbmNsdWRlIDxsaW51eC9pcHguaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisKK3N0cnVjdCBpcHhfYWRkcmVzcyB7CisJX191MzIgICBuZXQ7CisJX191OCAgICBub2RlW0lQWF9OT0RFX0xFTl07IAorCV9fdTE2ICAgc29jazsKK307CisKKyNkZWZpbmUgaXB4X2Jyb2FkY2FzdF9ub2RlCSJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciCisjZGVmaW5lIGlweF90aGlzX25vZGUgICAgICAgICAgICJcMFwwXDBcMFwwXDAiCisKKyNkZWZpbmUgSVBYX01BWF9QUFJPUF9IT1BTIDgKKworc3RydWN0IGlweGhkciB7CisJX191MTYJCQlpcHhfY2hlY2tzdW0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworI2RlZmluZSBJUFhfTk9fQ0hFQ0tTVU0JMHhGRkZGCisJX191MTYJCQlpcHhfcGt0c2l6ZSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisJX191OAkJCWlweF90Y3RybDsKKwlfX3U4CQkJaXB4X3R5cGU7CisjZGVmaW5lIElQWF9UWVBFX1VOS05PV04JMHgwMAorI2RlZmluZSBJUFhfVFlQRV9SSVAJCTB4MDEJLyogbWF5IGFsc28gYmUgMCAqLworI2RlZmluZSBJUFhfVFlQRV9TQVAJCTB4MDQJLyogbWF5IGFsc28gYmUgMCAqLworI2RlZmluZSBJUFhfVFlQRV9TUFgJCTB4MDUJLyogU1BYIHByb3RvY29sICovCisjZGVmaW5lIElQWF9UWVBFX05DUAkJMHgxMQkvKiAkbG90cyBmb3IgZG9jcyBvbiB0aGlzIChTUElUKSAqLworI2RlZmluZSBJUFhfVFlQRV9QUFJPUAkJMHgxNAkvKiBjb21wbGljYXRlZCBmbG9vZCBmaWxsIGJyZGNhc3QgKi8KKwlzdHJ1Y3QgaXB4X2FkZHJlc3MJaXB4X2Rlc3QgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCXN0cnVjdCBpcHhfYWRkcmVzcwlpcHhfc291cmNlIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK307CisKK3N0YXRpYyBfX2lubGluZV9fIHN0cnVjdCBpcHhoZHIgKmlweF9oZHIoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlyZXR1cm4gKHN0cnVjdCBpcHhoZHIgKilza2ItPmgucmF3OworfQorCitzdHJ1Y3QgaXB4X2ludGVyZmFjZSB7CisJLyogSVBYIGFkZHJlc3MgKi8KKwlfX3UzMgkJCWlmX25ldG51bTsKKwl1bnNpZ25lZCBjaGFyCQlpZl9ub2RlW0lQWF9OT0RFX0xFTl07CisJYXRvbWljX3QJCXJlZmNudDsKKworCS8qIHBoeXNpY2FsIGRldmljZSBpbmZvICovCisJc3RydWN0IG5ldF9kZXZpY2UJKmlmX2RldjsKKwlzdHJ1Y3QgZGF0YWxpbmtfcHJvdG8JKmlmX2RsaW5rOworCXVuc2lnbmVkIHNob3J0CQlpZl9kbGlua190eXBlOworCisJLyogc29ja2V0IHN1cHBvcnQgKi8KKwl1bnNpZ25lZCBzaG9ydAkJaWZfc2tudW07CisJc3RydWN0IGhsaXN0X2hlYWQJaWZfc2tsaXN0OworCXNwaW5sb2NrX3QJCWlmX3NrbGlzdF9sb2NrOworCisJLyogYWRtaW5pc3RyYXRpdmUgb3ZlcmhlYWQgKi8KKwlpbnQJCQlpZl9pcHhfb2Zmc2V0OworCXVuc2lnbmVkIGNoYXIJCWlmX2ludGVybmFsOworCXVuc2lnbmVkIGNoYXIJCWlmX3ByaW1hcnk7CisJCisJc3RydWN0IGxpc3RfaGVhZAlub2RlOyAvKiBub2RlIGluIGlweF9pbnRlcmZhY2VzIGxpc3QgKi8KK307CisKK3N0cnVjdCBpcHhfcm91dGUgeworCV9fdTMyCQkJaXJfbmV0OworCXN0cnVjdCBpcHhfaW50ZXJmYWNlCSppcl9pbnRyZmM7CisJdW5zaWduZWQgY2hhcgkJaXJfcm91dGVkOworCXVuc2lnbmVkIGNoYXIJCWlyX3JvdXRlcl9ub2RlW0lQWF9OT0RFX0xFTl07CisJc3RydWN0IGxpc3RfaGVhZAlub2RlOyAvKiBub2RlIGluIGlweF9yb3V0ZXMgbGlzdCAqLworCWF0b21pY190CQlyZWZjbnQ7Cit9OworCisjaWZkZWYgX19LRVJORUxfXworc3RydWN0IGlweF9jYiB7CisJdTgJaXB4X3RjdHJsOworCXUzMglpcHhfZGVzdF9uZXQ7CisJdTMyCWlweF9zb3VyY2VfbmV0OworCXN0cnVjdCB7CisJCXUzMiBuZXRudW07CisJCWludCBpbmRleDsKKwl9IGxhc3RfaG9wOworfTsKKworI2luY2x1ZGUgPG5ldC9zb2NrLmg+CisKK3N0cnVjdCBpcHhfc29jayB7CisJLyogc3RydWN0IHNvY2sgaGFzIHRvIGJlIHRoZSBmaXJzdCBtZW1iZXIgb2YgaXB4X3NvY2sgKi8KKwlzdHJ1Y3Qgc29jawkJc2s7CisJc3RydWN0IGlweF9hZGRyZXNzCWRlc3RfYWRkcjsKKwlzdHJ1Y3QgaXB4X2ludGVyZmFjZQkqaW50cmZjOworCXVuc2lnbmVkIHNob3J0CQlwb3J0OworI2lmZGVmIENPTkZJR19JUFhfSU5URVJOCisJdW5zaWduZWQgY2hhcgkJbm9kZVtJUFhfTk9ERV9MRU5dOworI2VuZGlmCisJdW5zaWduZWQgc2hvcnQJCXR5cGU7CisJLyoKKwkgKiBUbyBoYW5kbGUgc3BlY2lhbCBuY3AgY29ubmVjdGlvbi1oYW5kbGluZyBzb2NrZXRzIGZvciBtYXJzX253ZSwKKyAJICogdGhlIGNvbm5lY3Rpb24gbnVtYmVyIG11c3QgYmUgc3RvcmVkIGluIHRoZSBzb2NrZXQuCisJICovCisJdW5zaWduZWQgc2hvcnQJCWlweF9uY3BfY29ubjsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGlweF9zb2NrICppcHhfc2soc3RydWN0IHNvY2sgKnNrKQoreworCXJldHVybiAoc3RydWN0IGlweF9zb2NrICopc2s7Cit9CisKKyNkZWZpbmUgSVBYX1NLQl9DQihfX3NrYikgKChzdHJ1Y3QgaXB4X2NiICopJigoX19za2IpLT5jYlswXSkpCisjZW5kaWYKKworI2RlZmluZSBJUFhfTUlOX0VQSEVNRVJBTF9TT0NLRVQJMHg0MDAwCisjZGVmaW5lIElQWF9NQVhfRVBIRU1FUkFMX1NPQ0tFVAkweDdmZmYKKworZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgaXB4X3JvdXRlczsKK2V4dGVybiByd2xvY2tfdCBpcHhfcm91dGVzX2xvY2s7CisKK2V4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGlweF9pbnRlcmZhY2VzOworZXh0ZXJuIHN0cnVjdCBpcHhfaW50ZXJmYWNlICppcHhfaW50ZXJmYWNlc19oZWFkKHZvaWQpOworZXh0ZXJuIHNwaW5sb2NrX3QgaXB4X2ludGVyZmFjZXNfbG9jazsKKworZXh0ZXJuIHN0cnVjdCBpcHhfaW50ZXJmYWNlICppcHhfcHJpbWFyeV9uZXQ7CisKK2V4dGVybiBpbnQgaXB4X3Byb2NfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIGlweF9wcm9jX2V4aXQodm9pZCk7CisKK2V4dGVybiBjb25zdCBjaGFyICppcHhfZnJhbWVfbmFtZSh1bnNpZ25lZCBzaG9ydCk7CitleHRlcm4gY29uc3QgY2hhciAqaXB4X2RldmljZV9uYW1lKHN0cnVjdCBpcHhfaW50ZXJmYWNlICppbnRyZmMpOworCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGlweGl0Zl9ob2xkKHN0cnVjdCBpcHhfaW50ZXJmYWNlICppbnRyZmMpCit7CisJYXRvbWljX2luYygmaW50cmZjLT5yZWZjbnQpOworfQorCitleHRlcm4gdm9pZCBpcHhpdGZfZG93bihzdHJ1Y3QgaXB4X2ludGVyZmFjZSAqaW50cmZjKTsKKworc3RhdGljIF9faW5saW5lX18gdm9pZCBpcHhpdGZfcHV0KHN0cnVjdCBpcHhfaW50ZXJmYWNlICppbnRyZmMpCit7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmludHJmYy0+cmVmY250KSkKKwkJaXB4aXRmX2Rvd24oaW50cmZjKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBpcHhydHJfaG9sZChzdHJ1Y3QgaXB4X3JvdXRlICpydCkKK3sKKwkgICAgICAgIGF0b21pY19pbmMoJnJ0LT5yZWZjbnQpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGlweHJ0cl9wdXQoc3RydWN0IGlweF9yb3V0ZSAqcnQpCit7CisJICAgICAgICBpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmcnQtPnJlZmNudCkpCisJCQkgICAgICAgICAgICAgICAga2ZyZWUocnQpOworfQorI2VuZGlmIC8qIF9ORVRfSU5FVF9JUFhfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lyZGEvYWZfaXJkYS5oIGIvaW5jbHVkZS9uZXQvaXJkYS9hZl9pcmRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2EyMDlmNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L2lyZGEvYWZfaXJkYS5oCkBAIC0wLDAgKzEsODcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgIAorICogRmlsZW5hbWU6ICAgICAgYWZfaXJkYS5oCisgKiBWZXJzaW9uOiAgICAgICAxLjAKKyAqIERlc2NyaXB0aW9uOiAgIElyREEgc29ja2V0cyBkZWNsYXJhdGlvbnMKKyAqIFN0YXR1czogICAgICAgIFN0YWJsZQorICogQXV0aG9yOiAgICAgICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgorICogQ3JlYXRlZCBhdDogICAgVHVlIERlYyAgOSAyMToxMzoxMiAxOTk3CisgKiBNb2RpZmllZCBhdDogICBGcmkgSmFuIDI4IDEzOjE2OjMyIDIwMDAKKyAqIE1vZGlmaWVkIGJ5OiAgIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4KKyAqIAorICogICAgIENvcHlyaWdodCAoYykgMTk5OC0yMDAwIERhZyBCcmF0dGxpLCBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogICAgIENvcHlyaWdodCAoYykgMjAwMC0yMDAyIEplYW4gVG91cnJpbGhlcyA8anRAaHBsLmhwLmNvbT4KKyAqICAgICAgCisgKiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAKKyAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyAKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiAKKyAqICAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqICAKKyAqICAgICBOZWl0aGVyIERhZyBCcmF0dGxpIG5vciBVbml2ZXJzaXR5IG9mIFRyb21z+CBhZG1pdCBsaWFiaWxpdHkgbm9yCisgKiAgICAgcHJvdmlkZSB3YXJyYW50eSBmb3IgYW55IG9mIHRoaXMgc29mdHdhcmUuIFRoaXMgbWF0ZXJpYWwgaXMgCisgKiAgICAgcHJvdmlkZWQgIkFTLUlTIiBhbmQgYXQgbm8gY2hhcmdlLgorICogICAgIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIEFGX0lSREFfSAorI2RlZmluZSBBRl9JUkRBX0gKKworI2luY2x1ZGUgPGxpbnV4L2lyZGEuaD4KKyNpbmNsdWRlIDxuZXQvaXJkYS9pcmRhLmg+CisjaW5jbHVkZSA8bmV0L2lyZGEvaXJpYXAuaD4JCS8qIHN0cnVjdCBpcmlhcF9jYiAqLworI2luY2x1ZGUgPG5ldC9pcmRhL2lyaWFzX29iamVjdC5oPgkvKiBzdHJ1Y3QgaWFzX3ZhbHVlICovCisjaW5jbHVkZSA8bmV0L2lyZGEvaXJsbXAuaD4JCS8qIHN0cnVjdCBsc2FwX2NiICovCisjaW5jbHVkZSA8bmV0L2lyZGEvaXJ0dHAuaD4JCS8qIHN0cnVjdCB0c2FwX2NiICovCisjaW5jbHVkZSA8bmV0L2lyZGEvZGlzY292ZXJ5Lmg+CQkvKiBzdHJ1Y3QgZGlzY292ZXJ5X3QgKi8KKyNpbmNsdWRlIDxuZXQvc29jay5oPgorCisvKiBJckRBIFNvY2tldCAqLworc3RydWN0IGlyZGFfc29jayB7CisJLyogc3RydWN0IHNvY2sgaGFzIHRvIGJlIHRoZSBmaXJzdCBtZW1iZXIgb2YgaXJkYV9zb2NrICovCisJc3RydWN0IHNvY2sgc2s7CisJX191MzIgc2FkZHI7ICAgICAgICAgIC8qIG15IGxvY2FsIGFkZHJlc3MgKi8KKwlfX3UzMiBkYWRkcjsgICAgICAgICAgLyogcGVlciBhZGRyZXNzICovCisKKwlzdHJ1Y3QgbHNhcF9jYiAqbHNhcDsgLyogTFNBUCB1c2VkIGJ5IFVsdHJhICovCisJX191OCAgcGlkOyAgICAgICAgICAgIC8qIFByb3RvY29sIElQIChQSUQpIHVzZWQgYnkgVWx0cmEgKi8KKworCXN0cnVjdCB0c2FwX2NiICp0c2FwOyAvKiBUU0FQIHVzZWQgYnkgdGhpcyBjb25uZWN0aW9uICovCisJX191OCBkdHNhcF9zZWw7ICAgICAgIC8qIHJlbW90ZSBUU0FQIGFkZHJlc3MgKi8KKwlfX3U4IHN0c2FwX3NlbDsgICAgICAgLyogbG9jYWwgVFNBUCBhZGRyZXNzICovCisJCisJX191MzIgbWF4X3NkdV9zaXplX3J4OworCV9fdTMyIG1heF9zZHVfc2l6ZV90eDsKKwlfX3UzMiBtYXhfZGF0YV9zaXplOworCV9fdTggIG1heF9oZWFkZXJfc2l6ZTsKKwlzdHJ1Y3QgcW9zX2luZm8gcW9zX3R4OworCisJX191MTZfaG9zdF9vcmRlciBtYXNrOyAgICAgICAgICAgLyogSGludCBiaXRzIG1hc2sgKi8KKwlfX3UxNl9ob3N0X29yZGVyIGhpbnRzOyAgICAgICAgICAvKiBIaW50IGJpdHMgKi8KKworCXZvaWQgKmNrZXk7ICAgICAgICAgICAvKiBJckxNUCBjbGllbnQgaGFuZGxlICovCisJdm9pZCAqc2tleTsgICAgICAgICAgIC8qIElyTE1QIHNlcnZpY2UgaGFuZGxlICovCisKKwlzdHJ1Y3QgaWFzX29iamVjdCAqaWFzX29iajsgICAvKiBPdXIgc2VydmljZSBuYW1lICsgbHNhcCBpbiBJQVMgKi8KKwlzdHJ1Y3QgaXJpYXBfY2IgKmlyaWFwOwkgICAgICAvKiBVc2VkIHRvIHF1ZXJ5IHJlbW90ZSBJQVMgKi8KKwlzdHJ1Y3QgaWFzX3ZhbHVlICppYXNfcmVzdWx0OyAvKiBSZXN1bHQgb2YgcmVtb3RlIElBUyBxdWVyeSAqLworCisJaGFzaGJpbl90ICpjYWNoZWxvZzsJCS8qIFJlc3VsdCBvZiBkaXNjb3ZlcnkgcXVlcnkgKi8KKwlfX3UzMiBjYWNoZWRhZGRyOwkvKiBSZXN1bHQgb2Ygc2VsZWN0aXZlIGRpc2NvdmVyeSBxdWVyeSAqLworCisJaW50IG5zbG90czsgICAgICAgICAgIC8qIE51bWJlciBvZiBzbG90cyB0byB1c2UgZm9yIGRpc2NvdmVyeSAqLworCisJaW50IGVycm5vOyAgICAgICAgICAgIC8qIHN0YXR1cyBvZiB0aGUgSUFTIHF1ZXJ5ICovCisKKwl3YWl0X3F1ZXVlX2hlYWRfdCBxdWVyeV93YWl0OwkvKiBXYWl0IGZvciB0aGUgYW5zd2VyIHRvIGEgcXVlcnkgKi8KKwlzdHJ1Y3QgdGltZXJfbGlzdCB3YXRjaGRvZzsJLyogVGltZW91dCBmb3IgZGlzY292ZXJ5ICovCisKKwlMT0NBTF9GTE9XIHR4X2Zsb3c7CisJTE9DQUxfRkxPVyByeF9mbG93OworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgaXJkYV9zb2NrICppcmRhX3NrKHN0cnVjdCBzb2NrICpzaykKK3sKKwlyZXR1cm4gKHN0cnVjdCBpcmRhX3NvY2sgKilzazsKK30KKworI2VuZGlmIC8qIEFGX0lSREFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXJkYS9jcmMuaCBiL2luY2x1ZGUvbmV0L2lyZGEvY3JjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjIwMjI5NgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L2lyZGEvY3JjLmgKQEAgLTAsMCArMSwyOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgCisgKiBGaWxlbmFtZTogICAgICBjcmMuaAorICogVmVyc2lvbjogICAgICAgCisgKiBEZXNjcmlwdGlvbjogICBDUkMgcm91dGluZXMKKyAqIFN0YXR1czogICAgICAgIEV4cGVyaW1lbnRhbC4KKyAqIEF1dGhvcjogICAgICAgIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4KKyAqIENyZWF0ZWQgYXQ6ICAgIE1vbiBBdWcgIDQgMjA6NDA6NTMgMTk5NworICogTW9kaWZpZWQgYXQ6ICAgU3VuIE1heSAgMiAyMDoyNToyMyAxOTk5CisgKiBNb2RpZmllZCBieTogICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+CisgKiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBJUkRBX0NSQ19ICisjZGVmaW5lIElSREFfQ1JDX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvY3JjLWNjaXR0Lmg+CisKKyNkZWZpbmUgSU5JVF9GQ1MgIDB4ZmZmZiAgIC8qIEluaXRpYWwgRkNTIHZhbHVlICovCisjZGVmaW5lIEdPT0RfRkNTICAweGYwYjggICAvKiBHb29kIGZpbmFsIEZDUyB2YWx1ZSAqLworCisvKiBSZWNvbXB1dGUgdGhlIEZDUyB3aXRoIG9uZSBtb3JlIGNoYXJhY3RlciBhcHBlbmRlZC4gKi8KKyNkZWZpbmUgaXJkYV9mY3MoZmNzLCBjKSBjcmNfY2NpdHRfYnl0ZShmY3MsIGMpCisKKy8qIFJlY29tcHV0ZSB0aGUgRkNTIHdpdGggbGVuIGJ5dGVzIGFwcGVuZGVkLiAqLworI2RlZmluZSBpcmRhX2NhbGNfY3JjMTYoZmNzLCBidWYsIGxlbikgY3JjX2NjaXR0KGZjcywgYnVmLCBsZW4pCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXJkYS9kaXNjb3ZlcnkuaCBiL2luY2x1ZGUvbmV0L2lyZGEvZGlzY292ZXJ5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWIwZjlkZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L2lyZGEvZGlzY292ZXJ5LmgKQEAgLTAsMCArMSwxMDAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgIAorICogRmlsZW5hbWU6ICAgICAgZGlzY292ZXJ5LmgKKyAqIFZlcnNpb246ICAgICAgIAorICogRGVzY3JpcHRpb246ICAgCisgKiBTdGF0dXM6ICAgICAgICBFeHBlcmltZW50YWwuCisgKiBBdXRob3I6ICAgICAgICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+CisgKiBDcmVhdGVkIGF0OiAgICBUdWUgQXByICA2IDE2OjUzOjUzIDE5OTkKKyAqIE1vZGlmaWVkIGF0OiAgIFR1ZSBPY3QgIDUgMTA6MDU6MTAgMTk5OQorICogTW9kaWZpZWQgYnk6ICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgorICogCisgKiAgICAgQ29weXJpZ2h0IChjKSAxOTk5IERhZyBCcmF0dGxpLCBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogICAgIENvcHlyaWdodCAoYykgMjAwMC0yMDAyIEplYW4gVG91cnJpbGhlcyA8anRAaHBsLmhwLmNvbT4KKyAqICAgICAKKyAqICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIAorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIAorICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIAorICogICAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogCisgKiAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICogCisgKiAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgCisgKiAgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgCisgKiAgICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgCisgKiAgICAgTUEgMDIxMTEtMTMwNyBVU0EKKyAqICAgICAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBESVNDT1ZFUllfSAorI2RlZmluZSBESVNDT1ZFUllfSAorCisjaW5jbHVkZSA8YXNtL3BhcmFtLmg+CisKKyNpbmNsdWRlIDxuZXQvaXJkYS9pcmRhLmg+CisjaW5jbHVkZSA8bmV0L2lyZGEvaXJxdWV1ZS5oPgkJLyogaXJkYV9xdWV1ZV90ICovCisjaW5jbHVkZSA8bmV0L2lyZGEvaXJsYXBfZXZlbnQuaD4JLyogTEFQX1JFQVNPTiAqLworCisjZGVmaW5lIERJU0NPVkVSWV9FWFBJUkVfVElNRU9VVCAoMipzeXNjdGxfZGlzY292ZXJ5X3RpbWVvdXQqSFopCisjZGVmaW5lIERJU0NPVkVSWV9ERUZBVUxUX1NMT1RTICAwCisKKy8qCisgKiAgVGhpcyB0eXBlIGlzIHVzZWQgYnkgdGhlIHByb3RvY29scyB0aGF0IHRyYW5zbWl0IDE2IGJpdHMgd29yZHMgaW4gCisgKiAgbGl0dGxlIGVuZGlhbiBmb3JtYXQuIEEgbGl0dGxlIGVuZGlhbiBtYWNoaW5lIHN0b3JlcyBNU0Igb2Ygd29yZCBpbgorICogIGJ5dGVbMV0gYW5kIExTQiBpbiBieXRlWzBdLiBBIGJpZyBlbmRpYW4gbWFjaGluZSBzdG9yZXMgTVNCIGluIGJ5dGVbMF0gCisgKiAgYW5kIExTQiBpbiBieXRlWzFdLgorICoKKyAqIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgaW4gdGhlIGNvZGUgZm9yIHRoaW5ncyB0aGF0IGFyZSBlbmRpYW4gbmV1dHJhbAorICogYnV0IHRoYXQgZml0IGluIGEgd29yZCBzbyB0aGF0IHdlIGNhbiBtYW5pcHVsYXRlIHRoZW0gZWZmaWNpZW50bHkuCisgKiBCeSBlbmRpYW4gbmV1dHJhbCwgSSBtZWFuIHRoaW5ncyB0aGF0IGFyZSByZWFsbHkgYW4gYXJyYXkgb2YgYnl0ZXMsCisgKiBhbmQgYWx3YXlzIHVzZWQgYXMgc3VjaCwgZm9yIGV4YW1wbGUgdGhlIGhpbnQgYml0cy4gSmVhbiBJSQorICovCit0eXBlZGVmIHVuaW9uIHsKKwlfX3UxNiB3b3JkOworCV9fdTggIGJ5dGVbMl07Cit9IF9fdTE2X2hvc3Rfb3JkZXI7CisKKy8qIFNhbWUgcHVycG9zZSwgZGlmZmVyZW50IGFwcGxpY2F0aW9uICovCisjZGVmaW5lIHUxNmhvKGFycmF5KSAoKiAoKF9fdTE2ICopIGFycmF5KSkKKworLyogVHlwZXMgb2YgZGlzY292ZXJ5ICovCit0eXBlZGVmIGVudW0geworCURJU0NPVkVSWV9MT0csCQkvKiBXaGF0J3MgaW4gb3VyIGRpc2NvdmVyeSBsb2cgKi8KKwlESVNDT1ZFUllfQUNUSVZFLAkvKiBEb2luZyBvdXIgb3duIGRpc2NvdmVyeSBvbiB0aGUgbWVkaXVtICovCisJRElTQ09WRVJZX1BBU1NJVkUsCS8qIFBlZXIgZG9pbmcgZGlzY292ZXJ5IG9uIHRoZSBtZWRpdW0gKi8KKwlFWFBJUllfVElNRU9VVCwJCS8qIEVudHJ5IGV4cGlyZWQgZHVlIHRvIHRpbWVvdXQgKi8KK30gRElTQ09WRVJZX01PREU7CisKKyNkZWZpbmUgTklDS05BTUVfTUFYX0xFTiAyMQorCisvKiBCYXNpYyBkaXNjb3ZlcnkgaW5mb3JtYXRpb24gYWJvdXQgYSBwZWVyICovCit0eXBlZGVmIHN0cnVjdCBpcmRhX2RldmljZV9pbmZvCQlkaXNjaW5mb190OwkvKiBsaW51eC9pcmRhLmggKi8KKworLyoKKyAqIFRoZSBESVNDT1ZFUlkgc3RydWN0dXJlIGlzIHVzZWQgZm9yIGJvdGggZGlzY292ZXJ5IHJlcXVlc3RzIGFuZCByZXNwb25zZXMKKyAqLwordHlwZWRlZiBzdHJ1Y3QgZGlzY292ZXJ5X3QgeworCWlyZGFfcXVldWVfdAlxOwkJLyogTXVzdCBiZSBmaXJzdCEgKi8KKworCWRpc2NpbmZvX3QJZGF0YTsJCS8qIEJhc2ljIGRpc2NvdmVyeSBpbmZvcm1hdGlvbiAqLworCWludAkJbmFtZV9sZW47CS8qIExlbmdodCBvZiBuaWNrbmFtZSAqLworCisJTEFQX1JFQVNPTgljb25kaXRpb247CS8qIE1vcmUgaW5mbyBhYm91dCB0aGUgZGlzY292ZXJ5ICovCisJaW50CQlnZW5fYWRkcl9iaXQ7CS8qIE5lZWQgdG8gZ2VuZXJhdGUgYSBuZXcgZGV2aWNlCisJCQkJCSAqIGFkZHJlc3M/ICovCisJaW50CQluc2xvdHM7CQkvKiBOdW1iZXIgb2Ygc2xvdHMgdG8gdXNlIHdoZW4KKwkJCQkJICogZGlzY292ZXJpbmcgKi8KKwl1bnNpZ25lZCBsb25nCXRpbWVzdGFtcDsJLyogTGFzdCB0aW1lIGRpc2NvdmVyZWQgKi8KKwl1bnNpZ25lZCBsb25nCWZpcnN0c3RhbXA7CS8qIEZpcnN0IHRpbWUgZGlzY292ZXJlZCAqLworfSBkaXNjb3ZlcnlfdDsKKwordm9pZCBpcmxtcF9hZGRfZGlzY292ZXJ5KGhhc2hiaW5fdCAqY2FjaGVsb2csIGRpc2NvdmVyeV90ICpkaXNjb3ZlcnkpOwordm9pZCBpcmxtcF9hZGRfZGlzY292ZXJ5X2xvZyhoYXNoYmluX3QgKmNhY2hlbG9nLCBoYXNoYmluX3QgKmxvZyk7Cit2b2lkIGlybG1wX2V4cGlyZV9kaXNjb3ZlcmllcyhoYXNoYmluX3QgKmxvZywgX191MzIgc2FkZHIsIGludCBmb3JjZSk7CitzdHJ1Y3QgaXJkYV9kZXZpY2VfaW5mbyAqaXJsbXBfY29weV9kaXNjb3ZlcmllcyhoYXNoYmluX3QgKmxvZywgaW50ICpwbiwKKwkJCQkJCV9fdTE2IG1hc2ssIGludCBvbGRfZW50cmllcyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXJkYS9pcmNvbW1fY29yZS5oIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmNvbW1fY29yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5YjYxMGEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9pcmRhL2lyY29tbV9jb3JlLmgKQEAgLTAsMCArMSwxMDggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgIAorICogRmlsZW5hbWU6ICAgICAgaXJjb21tX2NvcmUuaAorICogVmVyc2lvbjogICAgICAgCisgKiBEZXNjcmlwdGlvbjogICAKKyAqIFN0YXR1czogICAgICAgIEV4cGVyaW1lbnRhbC4KKyAqIEF1dGhvcjogICAgICAgIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4KKyAqIENyZWF0ZWQgYXQ6ICAgIFdlZCBKdW4gIDkgMDg6NTg6NDMgMTk5OQorICogTW9kaWZpZWQgYXQ6ICAgTW9uIERlYyAxMyAxMTo1MjoyOSAxOTk5CisgKiBNb2RpZmllZCBieTogICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+CisgKiAKKyAqICAgICBDb3B5cmlnaHQgKGMpIDE5OTkgRGFnIEJyYXR0bGksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgICAgCisgKiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAKKyAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyAKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiAKKyAqICAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIAorICogICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqIAorICogICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIAorICogICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIAorICogICAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIAorICogICAgIE1BIDAyMTExLTEzMDcgVVNBCisgKiAgICAgCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgSVJDT01NX0NPUkVfSAorI2RlZmluZSBJUkNPTU1fQ09SRV9ICisKKyNpbmNsdWRlIDxuZXQvaXJkYS9pcmRhLmg+CisjaW5jbHVkZSA8bmV0L2lyZGEvaXJxdWV1ZS5oPgorI2luY2x1ZGUgPG5ldC9pcmRhL2lyY29tbV9ldmVudC5oPgorCisjZGVmaW5lIElSQ09NTV9NQUdJQyAweDk4MzQ3Mjk4CisjZGVmaW5lIElSQ09NTV9IRUFERVJfU0laRSAxCisKK3N0cnVjdCBpcmNvbW1fY2I7ICAgLyogRm9yd2FyZCBkZWNsLiAqLworCisvKgorICogQSBzbWFsbCBjYWxsLXRhYmxlLCBzbyB3ZSBkb24ndCBoYXZlIHRvIGNoZWNrIHRoZSBzZXJ2aWNlLXR5cGUgd2hlbmV2ZXIKKyAqIHdlIHdhbnQgdG8gZG8gc29tZXRoaW5nCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwlpbnQgKCpkYXRhX3JlcXVlc3QpKHN0cnVjdCBpcmNvbW1fY2IgKiwgc3RydWN0IHNrX2J1ZmYgKiwgaW50IGNsZW4pOworCWludCAoKmNvbm5lY3RfcmVxdWVzdCkoc3RydWN0IGlyY29tbV9jYiAqLCBzdHJ1Y3Qgc2tfYnVmZiAqLCAKKwkJCSAgICAgICBzdHJ1Y3QgaXJjb21tX2luZm8gKik7CisJaW50ICgqY29ubmVjdF9yZXNwb25zZSkoc3RydWN0IGlyY29tbV9jYiAqLCBzdHJ1Y3Qgc2tfYnVmZiAqKTsKKwlpbnQgKCpkaXNjb25uZWN0X3JlcXVlc3QpKHN0cnVjdCBpcmNvbW1fY2IgKiwgc3RydWN0IHNrX2J1ZmYgKiwgCisJCQkJICBzdHJ1Y3QgaXJjb21tX2luZm8gKik7CQorfSBjYWxsX3Q7CisKK3N0cnVjdCBpcmNvbW1fY2IgeworCWlyZGFfcXVldWVfdCBxdWV1ZTsKKwltYWdpY190IG1hZ2ljOworCisJbm90aWZ5X3Qgbm90aWZ5OworCWNhbGxfdCAgIGlzc3VlOworCisJaW50IHN0YXRlOworCWludCBsaW5lOyAgICAgICAgICAgIC8qIFdoaWNoIFRUWSBsaW5lIHdlIGFyZSB1c2luZyAqLworCisJc3RydWN0IHRzYXBfY2IgKnRzYXA7CisJc3RydWN0IGxzYXBfY2IgKmxzYXA7CisJCisJX191OCBkbHNhcF9zZWw7ICAgICAgLyogRGVzdGluYXRpb24gTFNBUC9UU0FQIHNlbGVjdG9yICovCisJX191OCBzbHNhcF9zZWw7ICAgICAgLyogU291cmNlIExTQVAvVFNBUCBzZWxlY3RvciAqLworCisJX191MzIgc2FkZHI7ICAgICAgICAgLyogU291cmNlIGRldmljZSBhZGRyZXNzIChsaW5rIHdlIGFyZSB1c2luZykgKi8KKwlfX3UzMiBkYWRkcjsgICAgICAgICAvKiBEZXN0aW5hdGlvbiBkZXZpY2UgYWRkcmVzcyAqLworCisJaW50IG1heF9oZWFkZXJfc2l6ZTsgLyogSGVhZGVyIHNwYWNlIHdlIG11c3QgcmVzZXJ2ZSBmb3IgZWFjaCBmcmFtZSAqLworCWludCBtYXhfZGF0YV9zaXplOyAgIC8qIFRoZSBhbW91bnQgb2YgZGF0YSB3ZSBjYW4gZmlsbCBpbiBlYWNoIGZyYW1lICovCisKKwlMT0NBTF9GTE9XIGZsb3dfc3RhdHVzOyAvKiBVc2VkIGJ5IGlyY29tbV9sbXAgKi8KKwlpbnQgcGt0X2NvdW50OyAgICAgICAgICAvKiBOdW1iZXIgb2YgZnJhbWVzIHdlIGhhdmUgc2VudCB0byBJckxBUCAqLworCisJX191OCBzZXJ2aWNlX3R5cGU7Cit9OworCitleHRlcm4gaGFzaGJpbl90ICppcmNvbW07CisKK3N0cnVjdCBpcmNvbW1fY2IgKmlyY29tbV9vcGVuKG5vdGlmeV90ICpub3RpZnksIF9fdTggc2VydmljZV90eXBlLCBpbnQgbGluZSk7CitpbnQgaXJjb21tX2Nsb3NlKHN0cnVjdCBpcmNvbW1fY2IgKnNlbGYpOworCitpbnQgaXJjb21tX2RhdGFfcmVxdWVzdChzdHJ1Y3QgaXJjb21tX2NiICpzZWxmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3ZvaWQgaXJjb21tX2RhdGFfaW5kaWNhdGlvbihzdHJ1Y3QgaXJjb21tX2NiICpzZWxmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3ZvaWQgaXJjb21tX3Byb2Nlc3NfZGF0YShzdHJ1Y3QgaXJjb21tX2NiICpzZWxmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2ludCBpcmNvbW1fY29udHJvbF9yZXF1ZXN0KHN0cnVjdCBpcmNvbW1fY2IgKnNlbGYsIHN0cnVjdCBza19idWZmICpza2IpOworaW50IGlyY29tbV9jb25uZWN0X3JlcXVlc3Qoc3RydWN0IGlyY29tbV9jYiAqc2VsZiwgX191OCBkbHNhcF9zZWwsIAorCQkJICAgX191MzIgc2FkZHIsIF9fdTMyIGRhZGRyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgX191OCBzZXJ2aWNlX3R5cGUpOwordm9pZCBpcmNvbW1fY29ubmVjdF9pbmRpY2F0aW9uKHN0cnVjdCBpcmNvbW1fY2IgKnNlbGYsIHN0cnVjdCBza19idWZmICpza2IsCisJCQkgICAgICAgc3RydWN0IGlyY29tbV9pbmZvICppbmZvKTsKK3ZvaWQgaXJjb21tX2Nvbm5lY3RfY29uZmlybShzdHJ1Y3QgaXJjb21tX2NiICpzZWxmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgIHN0cnVjdCBpcmNvbW1faW5mbyAqaW5mbyk7CitpbnQgaXJjb21tX2Nvbm5lY3RfcmVzcG9uc2Uoc3RydWN0IGlyY29tbV9jYiAqc2VsZiwgc3RydWN0IHNrX2J1ZmYgKnVzZXJkYXRhKTsKK2ludCBpcmNvbW1fZGlzY29ubmVjdF9yZXF1ZXN0KHN0cnVjdCBpcmNvbW1fY2IgKnNlbGYsIHN0cnVjdCBza19idWZmICp1c2VyZGF0YSk7Cit2b2lkIGlyY29tbV9kaXNjb25uZWN0X2luZGljYXRpb24oc3RydWN0IGlyY29tbV9jYiAqc2VsZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgIHN0cnVjdCBpcmNvbW1faW5mbyAqaW5mbyk7Cit2b2lkIGlyY29tbV9mbG93X3JlcXVlc3Qoc3RydWN0IGlyY29tbV9jYiAqc2VsZiwgTE9DQUxfRkxPVyBmbG93KTsKKworI2RlZmluZSBpcmNvbW1faXNfY29ubmVjdGVkKHNlbGYpIChzZWxmLT5zdGF0ZSA9PSBJUkNPTU1fQ09OTikKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcmRhL2lyY29tbV9ldmVudC5oIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmNvbW1fZXZlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjkwNDQ3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmNvbW1fZXZlbnQuaApAQCAtMCwwICsxLDg1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAKKyAqIEZpbGVuYW1lOiAgICAgIGlyY29tbV9ldmVudC5oCisgKiBWZXJzaW9uOiAgICAgICAKKyAqIERlc2NyaXB0aW9uOiAgIAorICogU3RhdHVzOiAgICAgICAgRXhwZXJpbWVudGFsLgorICogQXV0aG9yOiAgICAgICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgorICogQ3JlYXRlZCBhdDogICAgU3VuIEp1biAgNiAyMzo1MToxMyAxOTk5CisgKiBNb2RpZmllZCBhdDogICBUaHUgSnVuIDEwIDA4OjM2OjI1IDE5OTkKKyAqIE1vZGlmaWVkIGJ5OiAgIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4KKyAqIAorICogICAgIENvcHlyaWdodCAoYykgMTk5OSBEYWcgQnJhdHRsaSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqICAgICAKKyAqICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIAorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIAorICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIAorICogICAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogCisgKiAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICogCisgKiAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgCisgKiAgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgCisgKiAgICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgCisgKiAgICAgTUEgMDIxMTEtMTMwNyBVU0EKKyAqICAgICAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBJUkNPTU1fRVZFTlRfSAorI2RlZmluZSBJUkNPTU1fRVZFTlRfSAorCisjaW5jbHVkZSA8bmV0L2lyZGEvaXJtb2QuaD4KKwordHlwZWRlZiBlbnVtIHsKKyAgICAgICAgSVJDT01NX0lETEUsCisgICAgICAgIElSQ09NTV9XQUlUSSwKKyAgICAgICAgSVJDT01NX1dBSVRSLAorICAgICAgICBJUkNPTU1fQ09OTiwKK30gSVJDT01NX1NUQVRFOworCisvKiBJckNPTU0gRXZlbnRzICovCit0eXBlZGVmIGVudW0geworICAgICAgICBJUkNPTU1fQ09OTkVDVF9SRVFVRVNULAorICAgICAgICBJUkNPTU1fQ09OTkVDVF9SRVNQT05TRSwKKyAgICAgICAgSVJDT01NX1RUUF9DT05ORUNUX0lORElDQVRJT04sCisJSVJDT01NX0xNUF9DT05ORUNUX0lORElDQVRJT04sCisgICAgICAgIElSQ09NTV9UVFBfQ09OTkVDVF9DT05GSVJNLAorCUlSQ09NTV9MTVBfQ09OTkVDVF9DT05GSVJNLAorCisgICAgICAgIElSQ09NTV9MTVBfRElTQ09OTkVDVF9JTkRJQ0FUSU9OLAorCUlSQ09NTV9UVFBfRElTQ09OTkVDVF9JTkRJQ0FUSU9OLAorICAgICAgICBJUkNPTU1fRElTQ09OTkVDVF9SRVFVRVNULAorCisgICAgICAgIElSQ09NTV9UVFBfREFUQV9JTkRJQ0FUSU9OLAorCUlSQ09NTV9MTVBfREFUQV9JTkRJQ0FUSU9OLAorICAgICAgICBJUkNPTU1fREFUQV9SRVFVRVNULAorICAgICAgICBJUkNPTU1fQ09OVFJPTF9SRVFVRVNULAorICAgICAgICBJUkNPTU1fQ09OVFJPTF9JTkRJQ0FUSU9OLAorfSBJUkNPTU1fRVZFTlQ7CisKKy8qCisgKiBVc2VkIGZvciBwYXNzaW5nIGluZm9ybWF0aW9uIHRocm91Z2ggdGhlIHN0YXRlLW1hY2hpbmUKKyAqLworc3RydWN0IGlyY29tbV9pbmZvIHsKKyAgICAgICAgX191MzIgICAgIHNhZGRyOyAgICAgICAgICAgICAgIC8qIFNvdXJjZSBkZXZpY2UgYWRkcmVzcyAqLworICAgICAgICBfX3UzMiAgICAgZGFkZHI7ICAgICAgICAgICAgICAgLyogRGVzdGluYXRpb24gZGV2aWNlIGFkZHJlc3MgKi8KKyAgICAgICAgX191OCAgICAgIGRsc2FwX3NlbDsKKyAgICAgICAgTE1fUkVBU09OIHJlYXNvbjsgICAgICAgICAgICAgIC8qIFJlYXNvbiBmb3IgZGlzY29ubmVjdCAqLworCV9fdTMyICAgICBtYXhfZGF0YV9zaXplOworCV9fdTMyICAgICBtYXhfaGVhZGVyX3NpemU7CisKKwlzdHJ1Y3QgcW9zX2luZm8gKnFvczsKK307CisKK2V4dGVybiBjaGFyICppcmNvbW1fc3RhdGVbXTsKKworc3RydWN0IGlyY29tbV9jYjsgICAvKiBGb3J3YXJkIGRlY2wuICovCisKK2ludCBpcmNvbW1fZG9fZXZlbnQoc3RydWN0IGlyY29tbV9jYiAqc2VsZiwgSVJDT01NX0VWRU5UIGV2ZW50LAorCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlyY29tbV9pbmZvICppbmZvKTsKK3ZvaWQgaXJjb21tX25leHRfc3RhdGUoc3RydWN0IGlyY29tbV9jYiAqc2VsZiwgSVJDT01NX1NUQVRFIHN0YXRlKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcmRhL2lyY29tbV9sbXAuaCBiL2luY2x1ZGUvbmV0L2lyZGEvaXJjb21tX2xtcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMDIxMDYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9pcmRhL2lyY29tbV9sbXAuaApAQCAtMCwwICsxLDM4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAKKyAqIEZpbGVuYW1lOiAgICAgIGlyY29tbV9sbXAuaAorICogVmVyc2lvbjogICAgICAgCisgKiBEZXNjcmlwdGlvbjogICAKKyAqIFN0YXR1czogICAgICAgIEV4cGVyaW1lbnRhbC4KKyAqIEF1dGhvcjogICAgICAgIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4KKyAqIENyZWF0ZWQgYXQ6ICAgIFdlZCBKdW4gIDkgMTA6MDY6MDcgMTk5OQorICogTW9kaWZpZWQgYXQ6ICAgRnJpIEF1ZyAxMyAwNzozMjozMiAxOTk5CisgKiBNb2RpZmllZCBieTogICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+CisgKiAKKyAqICAgICBDb3B5cmlnaHQgKGMpIDE5OTkgRGFnIEJyYXR0bGksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgICAgCisgKiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAKKyAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyAKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiAKKyAqICAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIAorICogICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqIAorICogICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIAorICogICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIAorICogICAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIAorICogICAgIE1BIDAyMTExLTEzMDcgVVNBCisgKiAgICAgCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgSVJDT01NX0xNUF9ICisjZGVmaW5lIElSQ09NTV9MTVBfSAorCisjaW5jbHVkZSA8bmV0L2lyZGEvaXJjb21tX2NvcmUuaD4KKworaW50IGlyY29tbV9vcGVuX2xzYXAoc3RydWN0IGlyY29tbV9jYiAqc2VsZik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXJkYS9pcmNvbW1fcGFyYW0uaCBiL2luY2x1ZGUvbmV0L2lyZGEvaXJjb21tX3BhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY2Nzg4MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L2lyZGEvaXJjb21tX3BhcmFtLmgKQEAgLTAsMCArMSwxNDkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgIAorICogRmlsZW5hbWU6ICAgICAgaXJjb21tX3BhcmFtLmgKKyAqIFZlcnNpb246ICAgICAgIDEuMAorICogRGVzY3JpcHRpb246ICAgUGFyYW1ldGVyIGhhbmRsaW5nIGZvciB0aGUgSXJDT01NIHByb3RvY29sCisgKiBTdGF0dXM6ICAgICAgICBFeHBlcmltZW50YWwuCisgKiBBdXRob3I6ICAgICAgICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+CisgKiBDcmVhdGVkIGF0OiAgICBNb24gSnVuICA3IDA4OjQ3OjI4IDE5OTkKKyAqIE1vZGlmaWVkIGF0OiAgIFdlZCBBdWcgMjUgMTM6NDY6MzMgMTk5OQorICogTW9kaWZpZWQgYnk6ICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgorICogCisgKiAgICAgQ29weXJpZ2h0IChjKSAxOTk5IERhZyBCcmF0dGxpLCBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogICAgIAorICogICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgCisgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgCisgKiAgICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiAKKyAqICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKiAKKyAqICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAKKyAqICAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSAKKyAqICAgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCAKKyAqICAgICBNQSAwMjExMS0xMzA3IFVTQQorICogICAgIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIElSQ09NTV9QQVJBTVNfSAorI2RlZmluZSBJUkNPTU1fUEFSQU1TX0gKKworI2luY2x1ZGUgPG5ldC9pcmRhL3BhcmFtZXRlcnMuaD4KKworLyogUGFyYW1ldGVycyBjb21tb24gdG8gYWxsIHNlcnZpY2UgdHlwZXMgKi8KKyNkZWZpbmUgSVJDT01NX1NFUlZJQ0VfVFlQRSAgICAgMHgwMAorI2RlZmluZSBJUkNPTU1fUE9SVF9UWVBFICAgICAgICAweDAxIC8qIE9ubHkgdXNlZCBpbiBMTS1JQVMgKi8KKyNkZWZpbmUgSVJDT01NX1BPUlRfTkFNRSAgICAgICAgMHgwMiAvKiBPbmx5IHVzZWQgaW4gTE0tSUFTICovCisKKy8qIFBhcmFtZXRlcnMgZm9yIGJvdGggMyB3aXJlIGFuZCA5IHdpcmUgKi8KKyNkZWZpbmUgSVJDT01NX0RBVEFfUkFURSAgICAgICAgMHgxMAorI2RlZmluZSBJUkNPTU1fREFUQV9GT1JNQVQgICAgICAweDExCisjZGVmaW5lIElSQ09NTV9GTE9XX0NPTlRST0wgICAgIDB4MTIKKyNkZWZpbmUgSVJDT01NX1hPTl9YT0ZGICAgICAgICAgMHgxMworI2RlZmluZSBJUkNPTU1fRU5RX0FDSyAgICAgICAgICAweDE0CisjZGVmaW5lIElSQ09NTV9MSU5FX1NUQVRVUyAgICAgIDB4MTUKKyNkZWZpbmUgSVJDT01NX0JSRUFLICAgICAgICAgICAgMHgxNgorCisvKiBQYXJhbWV0ZXJzIGZvciA5IHdpcmUgKi8KKyNkZWZpbmUgSVJDT01NX0RURSAgICAgICAgICAgICAgMHgyMAorI2RlZmluZSBJUkNPTU1fRENFICAgICAgICAgICAgICAweDIxCisjZGVmaW5lIElSQ09NTV9QT0xMICAgICAgICAgICAgIDB4MjIKKworLyogU2VydmljZSB0eXBlIChkZXRhaWxzKSAqLworI2RlZmluZSBJUkNPTU1fM19XSVJFX1JBVyAgICAgICAweDAxCisjZGVmaW5lIElSQ09NTV8zX1dJUkUgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgSVJDT01NXzlfV0lSRSAgICAgICAgICAgMHgwNAorI2RlZmluZSBJUkNPTU1fQ0VOVFJPTklDUyAgICAgICAweDA4CisKKy8qIFBvcnQgdHlwZSAoZGV0YWlscykgKi8KKyNkZWZpbmUgSVJDT01NX1NFUklBTCAgICAgICAgICAgMHgwMAorI2RlZmluZSBJUkNPTU1fUEFSQUxMRUwgICAgICAgICAweDAxCisKKy8qIERhdGEgZm9ybWF0IChkZXRhaWxzKSAqLworI2RlZmluZSBJUkNPTU1fV1NJWkVfNSAgICAgICAgICAweDAwCisjZGVmaW5lIElSQ09NTV9XU0laRV82ICAgICAgICAgIDB4MDEKKyNkZWZpbmUgSVJDT01NX1dTSVpFXzcgICAgICAgICAgMHgwMgorI2RlZmluZSBJUkNPTU1fV1NJWkVfOCAgICAgICAgICAweDAzCisKKyNkZWZpbmUgSVJDT01NXzFfU1RPUF9CSVQgICAgICAgMHgwMAorI2RlZmluZSBJUkNPTU1fMl9TVE9QX0JJVCAgICAgICAweDA0IC8qIDEuNSBpZiBjaGFyIGxlbiA1ICovCisKKyNkZWZpbmUgSVJDT01NX1BBUklUWV9ESVNBQkxFICAgMHgwMAorI2RlZmluZSBJUkNPTU1fUEFSSVRZX0VOQUJMRSAgICAweDA4CisKKyNkZWZpbmUgSVJDT01NX1BBUklUWV9PREQgICAgICAgMHgwMAorI2RlZmluZSBJUkNPTU1fUEFSSVRZX0VWRU4gICAgICAweDEwCisjZGVmaW5lIElSQ09NTV9QQVJJVFlfTUFSSyAgICAgIDB4MjAKKyNkZWZpbmUgSVJDT01NX1BBUklUWV9TUEFDRSAgICAgMHgzMAorCisvKiBGbG93IGNvbnRyb2wgKi8KKyNkZWZpbmUgSVJDT01NX1hPTl9YT0ZGX0lOICAgICAgMHgwMQorI2RlZmluZSBJUkNPTU1fWE9OX1hPRkZfT1VUICAgICAweDAyCisjZGVmaW5lIElSQ09NTV9SVFNfQ1RTX0lOICAgICAgIDB4MDQKKyNkZWZpbmUgSVJDT01NX1JUU19DVFNfT1VUICAgICAgMHgwOAorI2RlZmluZSBJUkNPTU1fRFNSX0RUUl9JTiAgICAgICAweDEwCisjZGVmaW5lIElSQ09NTV9EU1JfRFRSX09VVCAgICAgIDB4MjAKKyNkZWZpbmUgSVJDT01NX0VOUV9BQ0tfSU4gICAgICAgMHg0MAorI2RlZmluZSBJUkNPTU1fRU5RX0FDS19PVVQgICAgICAweDgwCisKKy8qIExpbmUgc3RhdHVzICovCisjZGVmaW5lIElSQ09NTV9PVkVSUlVOX0VSUk9SICAgIDB4MDIKKyNkZWZpbmUgSVJDT01NX1BBUklUWV9FUlJPUiAgICAgMHgwNAorI2RlZmluZSBJUkNPTU1fRlJBTUlOR19FUlJPUiAgICAweDA4CisKKy8qIERURSAoRGF0YSB0ZXJtaW5hbCBlcXVpcG1lbnQpIGxpbmUgc2V0dGluZ3MgKi8KKyNkZWZpbmUgSVJDT01NX0RFTFRBX0RUUiAgICAgICAgMHgwMQorI2RlZmluZSBJUkNPTU1fREVMVEFfUlRTICAgICAgICAweDAyCisjZGVmaW5lIElSQ09NTV9EVFIgICAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgSVJDT01NX1JUUyAgICAgICAgICAgICAgMHgwOAorCisvKiBEQ0UgKERhdGEgY29tbXVuaWNhdGlvbnMgZXF1aXBtZW50KSBsaW5lIHNldHRpbmdzICovCisjZGVmaW5lIElSQ09NTV9ERUxUQV9DVFMgICAgICAgIDB4MDEgIC8qIENsZWFyIHRvIHNlbmQgaGFzIGNoYW5nZWQgKi8KKyNkZWZpbmUgSVJDT01NX0RFTFRBX0RTUiAgICAgICAgMHgwMiAgLyogRGF0YSBzZXQgcmVhZHkgaGFzIGNoYW5nZWQgKi8KKyNkZWZpbmUgSVJDT01NX0RFTFRBX1JJICAgICAgICAgMHgwNCAgLyogUmluZyBpbmRpY2F0b3IgaGFzIGNoYW5nZWQgKi8KKyNkZWZpbmUgSVJDT01NX0RFTFRBX0NEICAgICAgICAgMHgwOCAgLyogQ2FycmllciBkZXRlY3QgaGFzIGNoYW5nZWQgKi8KKyNkZWZpbmUgSVJDT01NX0NUUyAgICAgICAgICAgICAgMHgxMCAgLyogQ2xlYXIgdG8gc2VuZCBpcyBoaWdoICovCisjZGVmaW5lIElSQ09NTV9EU1IgICAgICAgICAgICAgIDB4MjAgIC8qIERhdGEgc2V0IHJlYWR5IGlzIGhpZ2ggKi8KKyNkZWZpbmUgSVJDT01NX1JJICAgICAgICAgICAgICAgMHg0MCAgLyogUmluZyBpbmRpY2F0b3IgaXMgaGlnaCAqLworI2RlZmluZSBJUkNPTU1fQ0QgICAgICAgICAgICAgICAweDgwICAvKiBDYXJyaWVyIGRldGVjdCBpcyBoaWdoICovCisjZGVmaW5lIElSQ09NTV9EQ0VfREVMVEFfQU5ZICAgIDB4MGYKKworLyoKKyAqIFBhcmFtZXRlciBzdGF0ZQorICovCitzdHJ1Y3QgaXJjb21tX3BhcmFtcyB7CisJLyogR2VuZXJhbCBjb250cm9sIHBhcmFtcyAqLworCV9fdTggIHNlcnZpY2VfdHlwZTsKKwlfX3U4ICBwb3J0X3R5cGU7CisJY2hhciAgcG9ydF9uYW1lWzMyXTsKKworCS8qIENvbnRyb2wgcGFyYW1zIGZvciAzLSBhbmQgOS13aXJlIHNlcnZpY2UgdHlwZSAqLworCV9fdTMyIGRhdGFfcmF0ZTsgICAgICAgICAvKiBEYXRhIHJhdGUgaW4gYnBzICovCisJX191OCAgZGF0YV9mb3JtYXQ7CisJX191OCAgZmxvd19jb250cm9sOworCWNoYXIgIHhvbnhvZmZbMl07CisJY2hhciAgZW5xYWNrWzJdOworCV9fdTggIGxpbmVfc3RhdHVzOworCV9fdTggIF9icmVhazsKKworCV9fdTggIG51bGxfbW9kZW07CisKKwkvKiBDb250cm9sIHBhcmFtcyBmb3IgOS13aXJlIHNlcnZpY2UgdHlwZSAqLworCV9fdTggZHRlOworCV9fdTggZGNlOworCV9fdTggcG9sbDsKKworCS8qIENvbnRyb2wgcGFyYW1zIGZvciBDZW50cm9uaWNzIHNlcnZpY2UgdHlwZSAqLworfTsKKworc3RydWN0IGlyY29tbV90dHlfY2I7IC8qIEZvcndhcmQgZGVjbC4gKi8KKworaW50IGlyY29tbV9wYXJhbV9yZXF1ZXN0KHN0cnVjdCBpcmNvbW1fdHR5X2NiICpzZWxmLCBfX3U4IHBpLCBpbnQgZmx1c2gpOworCitleHRlcm4gcGlfcGFyYW1faW5mb190IGlyY29tbV9wYXJhbV9pbmZvOworCisjZW5kaWYgLyogSVJDT01NX1BBUkFNU19IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lyZGEvaXJjb21tX3R0cC5oIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmNvbW1fdHRwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAzMDgxZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L2lyZGEvaXJjb21tX3R0cC5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgIAorICogRmlsZW5hbWU6ICAgICAgaXJjb21tX3R0cC5oCisgKiBWZXJzaW9uOiAgICAgICAKKyAqIERlc2NyaXB0aW9uOiAgIAorICogU3RhdHVzOiAgICAgICAgRXhwZXJpbWVudGFsLgorICogQXV0aG9yOiAgICAgICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgorICogQ3JlYXRlZCBhdDogICAgV2VkIEp1biAgOSAxMDowNjowNyAxOTk5CisgKiBNb2RpZmllZCBhdDogICBGcmkgQXVnIDEzIDA3OjMyOjIyIDE5OTkKKyAqIE1vZGlmaWVkIGJ5OiAgIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4KKyAqIAorICogICAgIENvcHlyaWdodCAoYykgMTk5OSBEYWcgQnJhdHRsaSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqICAgICAKKyAqICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIAorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIAorICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIAorICogICAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogCisgKiAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICogCisgKiAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgCisgKiAgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgCisgKiAgICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgCisgKiAgICAgTUEgMDIxMTEtMTMwNyBVU0EKKyAqICAgICAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBJUkNPTU1fVFRQX0gKKyNkZWZpbmUgSVJDT01NX1RUUF9ICisKKyNpbmNsdWRlIDxuZXQvaXJkYS9pcmNvbW1fY29yZS5oPgorCitpbnQgIGlyY29tbV9vcGVuX3RzYXAoc3RydWN0IGlyY29tbV9jYiAqc2VsZik7CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcmRhL2lyY29tbV90dHkuaCBiL2luY2x1ZGUvbmV0L2lyZGEvaXJjb21tX3R0eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3Njk5Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9pcmRhL2lyY29tbV90dHkuaApAQCAtMCwwICsxLDEzOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgCisgKiBGaWxlbmFtZTogICAgICBpcmNvbW1fdHR5LmgKKyAqIFZlcnNpb246ICAgICAgIAorICogRGVzY3JpcHRpb246ICAgCisgKiBTdGF0dXM6ICAgICAgICBFeHBlcmltZW50YWwuCisgKiBBdXRob3I6ICAgICAgICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+CisgKiBDcmVhdGVkIGF0OiAgICBTdW4gSnVuICA2IDIzOjI0OjIyIDE5OTkKKyAqIE1vZGlmaWVkIGF0OiAgIEZyaSBKYW4gMjggMTM6MTY6NTcgMjAwMAorICogTW9kaWZpZWQgYnk6ICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgorICogCisgKiAgICAgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDAgRGFnIEJyYXR0bGksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgICAgCisgKiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAKKyAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyAKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiAKKyAqICAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIAorICogICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqIAorICogICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIAorICogICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIAorICogICAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIAorICogICAgIE1BIDAyMTExLTEzMDcgVVNBCisgKiAgICAgCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgSVJDT01NX1RUWV9ICisjZGVmaW5lIElSQ09NTV9UVFlfSAorCisjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CisjaW5jbHVkZSA8bGludXgvdGVybWlvcy5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CQkvKiBzdHJ1Y3QgdHR5X3N0cnVjdCAqLworCisjaW5jbHVkZSA8bmV0L2lyZGEvaXJpYXNfb2JqZWN0Lmg+CisjaW5jbHVkZSA8bmV0L2lyZGEvaXJjb21tX2NvcmUuaD4KKyNpbmNsdWRlIDxuZXQvaXJkYS9pcmNvbW1fcGFyYW0uaD4KKworI2RlZmluZSBJUkNPTU1fVFRZX1BPUlRTIDMyCisjZGVmaW5lIElSQ09NTV9UVFlfTUFHSUMgMHgzNDMyCisjZGVmaW5lIElSQ09NTV9UVFlfTUFKT1IgMTYxCisjZGVmaW5lIElSQ09NTV9UVFlfTUlOT1IgMAorCisvKiBUaGlzIGlzIHVzZWQgYXMgYW4gaW5pdGlhbCB2YWx1ZSB0byBtYXhfaGVhZGVyX3NpemUgYmVmb3JlIHRoZSBwcm9wZXIKKyAqIHZhbHVlIGlzIGZpbGxlZCBpbiAoNSBmb3IgdHRwLCA0IGZvciBsbXApLiBUaGlzIGFsbG93IHVzIHRvIGRldGVjdAorICogdGhlIHN0YXRlIG9mIHRoZSB1bmRlcmx5aW5nIGNvbm5lY3Rpb24uIC0gSmVhbiBJSSAqLworI2RlZmluZSBJUkNPTU1fVFRZX0hEUl9VTklOSVRJQUxJU0VECTE2CisvKiBTYW1lIGZvciBwYXlsb2FkIHNpemUuIFNlZSBxb3MuYyBmb3IgdGhlIHNtYWxsZXN0IG1heCBkYXRhIHNpemUgKi8KKyNkZWZpbmUgSVJDT01NX1RUWV9EQVRBX1VOSU5JVElBTElTRUQJKDY0IC0gSVJDT01NX1RUWV9IRFJfVU5JTklUSUFMSVNFRCkKKworLyogVGhvc2UgYXJlIHJlYWxseSBkZWZpbmVkIGluIGluY2x1ZGUvbGludXgvc2VyaWFsLmggLSBKZWFuIElJICovCisjZGVmaW5lIEFTWU5DX0JfSU5JVElBTElaRUQJMzEJLyogU2VyaWFsIHBvcnQgd2FzIGluaXRpYWxpemVkICovCisjZGVmaW5lIEFTWU5DX0JfTk9STUFMX0FDVElWRQkyOQkvKiBOb3JtYWwgZGV2aWNlIGlzIGFjdGl2ZSAqLworI2RlZmluZSBBU1lOQ19CX0NMT1NJTkcJCTI3CS8qIFNlcmlhbCBwb3J0IGlzIGNsb3NpbmcgKi8KKworLyoKKyAqIElyQ09NTSBUVFkgZHJpdmVyIHN0YXRlCisgKi8KK3N0cnVjdCBpcmNvbW1fdHR5X2NiIHsKKwlpcmRhX3F1ZXVlX3QgcXVldWU7ICAgICAgICAgICAgLyogTXVzdCBiZSBmaXJzdCAqLworCW1hZ2ljX3QgbWFnaWM7CisKKwlpbnQgc3RhdGU7ICAgICAgICAgICAgICAgIC8qIENvbm5lY3Qgc3RhdGUgKi8KKworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisJc3RydWN0IGlyY29tbV9jYiAqaXJjb21tOyAvKiBJckNPTU0gbGF5ZXIgaW5zdGFuY2UgKi8KKworCXN0cnVjdCBza19idWZmICp0eF9za2I7ICAgLyogVHJhbnNtaXQgYnVmZmVyICovCisJc3RydWN0IHNrX2J1ZmYgKmN0cmxfc2tiOyAvKiBDb250cm9sIGRhdGEgYnVmZmVyICovCisKKwkvKiBQYXJhbWV0ZXJzICovCisJc3RydWN0IGlyY29tbV9wYXJhbXMgc2V0dGluZ3M7CisKKwlfX3U4IHNlcnZpY2VfdHlwZTsgICAgICAgIC8qIFRoZSBzZXJ2aWNlIHRoYXQgd2Ugc3VwcG9ydCAqLworCWludCBjbGllbnQ7ICAgICAgICAgICAgICAgLyogVHJ1ZSBpZiB3ZSBhcmUgYSBjbGllbnQgKi8KKwlMT0NBTF9GTE9XIGZsb3c7ICAgICAgICAgIC8qIElyVFRQIGZsb3cgc3RhdHVzICovCisKKwlpbnQgbGluZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJX191OCBkbHNhcF9zZWw7CisJX191OCBzbHNhcF9zZWw7CisKKwlfX3UzMiBzYWRkcjsKKwlfX3UzMiBkYWRkcjsKKworCV9fdTMyIG1heF9kYXRhX3NpemU7ICAgLyogTWF4IGRhdGEgd2UgY2FuIHRyYW5zbWl0IGluIG9uZSBwYWNrZXQgKi8KKwlfX3UzMiBtYXhfaGVhZGVyX3NpemU7IC8qIFRoZSBhbW91bnQgb2YgaGVhZGVyIHNwYWNlIHdlIG11c3QgcmVzZXJ2ZSAqLworCV9fdTMyIHR4X2RhdGFfc2l6ZTsJLyogTWF4IGRhdGEgc2l6ZSBvZiBjdXJyZW50IHR4X3NrYiAqLworCisJc3RydWN0IGlyaWFwX2NiICppcmlhcDsgLyogSW5zdGFuY2UgdXNlZCBmb3IgcXVlcnlpbmcgcmVtb3RlIElBUyAqLworCXN0cnVjdCBpYXNfb2JqZWN0KiBvYmo7CisJdm9pZCAqc2tleTsKKwl2b2lkICpja2V5OworCisJd2FpdF9xdWV1ZV9oZWFkX3Qgb3Blbl93YWl0OworCXdhaXRfcXVldWVfaGVhZF90IGNsb3NlX3dhaXQ7CisJc3RydWN0IHRpbWVyX2xpc3Qgd2F0Y2hkb2dfdGltZXI7CisJc3RydWN0IHdvcmtfc3RydWN0ICB0cXVldWU7CisKKyAgICAgICAgdW5zaWduZWQgc2hvcnQgICAgY2xvc2VfZGVsYXk7CisgICAgICAgIHVuc2lnbmVkIHNob3J0ICAgIGNsb3Npbmdfd2FpdDsgLyogdGltZSB0byB3YWl0IGJlZm9yZSBjbG9zaW5nICovCisKKwlpbnQgIG9wZW5fY291bnQ7CisJaW50ICBibG9ja2VkX29wZW47CS8qICMgb2YgYmxvY2tlZCBvcGVucyAqLworCisJLyogUHJvdGVjdCBjb25jdXJlbnQgYWNjZXNzIHRvIDoKKwkgKglvIHNlbGYtPm9wZW5fY291bnQKKwkgKglvIHNlbGYtPmN0cmxfc2tiCisJICoJbyBzZWxmLT50eF9za2IKKwkgKiBNYXliZSBvdGhlciB0aGluZ3MgbWF5IGdhaW4gdG8gYmUgcHJvdGVjdGVkIGFzIHdlbGwuLi4KKwkgKiBKZWFuIElJICovCisJc3BpbmxvY2tfdCBzcGlubG9jazsKK307CisKK3ZvaWQgaXJjb21tX3R0eV9zdGFydChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKK3ZvaWQgaXJjb21tX3R0eV9jaGVja19tb2RlbV9zdGF0dXMoc3RydWN0IGlyY29tbV90dHlfY2IgKnNlbGYpOworCitleHRlcm4gaW50IGlyY29tbV90dHlfdGlvY21nZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpOworZXh0ZXJuIGludCBpcmNvbW1fdHR5X3Rpb2Ntc2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICAgICAgIHVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcik7CitleHRlcm4gaW50IGlyY29tbV90dHlfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsIAorCQkJICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKK2V4dGVybiB2b2lkIGlyY29tbV90dHlfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgCisJCQkJICAgc3RydWN0IHRlcm1pb3MgKm9sZF90ZXJtaW9zKTsKK2V4dGVybiBoYXNoYmluX3QgKmlyY29tbV90dHk7CisKKyNlbmRpZgorCisKKworCisKKworCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcmRhL2lyY29tbV90dHlfYXR0YWNoLmggYi9pbmNsdWRlL25ldC9pcmRhL2lyY29tbV90dHlfYXR0YWNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkxYTU2OTUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9pcmRhL2lyY29tbV90dHlfYXR0YWNoLmgKQEAgLTAsMCArMSw5NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgCisgKiBGaWxlbmFtZTogICAgICBpcmNvbW1fdHR5X2F0dGFjaC5oCisgKiBWZXJzaW9uOiAgICAgICAKKyAqIERlc2NyaXB0aW9uOiAgIAorICogU3RhdHVzOiAgICAgICAgRXhwZXJpbWVudGFsLgorICogQXV0aG9yOiAgICAgICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgorICogQ3JlYXRlZCBhdDogICAgV2VkIEp1biAgOSAxNTo1NToxOCAxOTk5CisgKiBNb2RpZmllZCBhdDogICBGcmkgRGVjIDEwIDIxOjA0OjU1IDE5OTkKKyAqIE1vZGlmaWVkIGJ5OiAgIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4KKyAqIAorICogICAgIENvcHlyaWdodCAoYykgMTk5OSBEYWcgQnJhdHRsaSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqICAgICAKKyAqICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIAorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIAorICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIAorICogICAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogCisgKiAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICogCisgKiAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgCisgKiAgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgCisgKiAgICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgCisgKiAgICAgTUEgMDIxMTEtMTMwNyBVU0EKKyAqICAgICAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBJUkNPTU1fVFRZX0FUVEFDSF9ICisjZGVmaW5lIElSQ09NTV9UVFlfQVRUQUNIX0gKKworI2luY2x1ZGUgPG5ldC9pcmRhL2lyY29tbV90dHkuaD4KKwordHlwZWRlZiBlbnVtIHsKKyAgICAgICAgSVJDT01NX1RUWV9JRExFLAorCUlSQ09NTV9UVFlfU0VBUkNILAorICAgICAgICBJUkNPTU1fVFRZX1FVRVJZX1BBUkFNRVRFUlMsCisJSVJDT01NX1RUWV9RVUVSWV9MU0FQX1NFTCwKKwlJUkNPTU1fVFRZX1NFVFVQLAorICAgICAgICBJUkNPTU1fVFRZX1JFQURZLAorfSBJUkNPTU1fVFRZX1NUQVRFOworCisvKiBJckNPTU0gVFRZIEV2ZW50cyAqLwordHlwZWRlZiBlbnVtIHsKKwlJUkNPTU1fVFRZX0FUVEFDSF9DQUJMRSwKKwlJUkNPTU1fVFRZX0RFVEFDSF9DQUJMRSwKKwlJUkNPTU1fVFRZX0RBVEFfUkVRVUVTVCwKKwlJUkNPTU1fVFRZX0RBVEFfSU5ESUNBVElPTiwKKwlJUkNPTU1fVFRZX0RJU0NPVkVSWV9SRVFVRVNULAorCUlSQ09NTV9UVFlfRElTQ09WRVJZX0lORElDQVRJT04sCisJSVJDT01NX1RUWV9DT05ORUNUX0NPTkZJUk0sCisJSVJDT01NX1RUWV9DT05ORUNUX0lORElDQVRJT04sCisJSVJDT01NX1RUWV9ESVNDT05ORUNUX1JFUVVFU1QsCisJSVJDT01NX1RUWV9ESVNDT05ORUNUX0lORElDQVRJT04sCisJSVJDT01NX1RUWV9XRF9USU1FUl9FWFBJUkVELAorCUlSQ09NTV9UVFlfR09UX1BBUkFNRVRFUlMsCisJSVJDT01NX1RUWV9HT1RfTFNBUFNFTCwKK30gSVJDT01NX1RUWV9FVkVOVDsKKworLyogVXNlZCBmb3IgcGFzc2luZyBpbmZvcm1hdGlvbiB0aHJvdWdoIHRoZSBzdGF0ZS1tYWNoaW5lICovCitzdHJ1Y3QgaXJjb21tX3R0eV9pbmZvIHsKKyAgICAgICAgX191MzIgICAgIHNhZGRyOyAgICAgICAgICAgICAgIC8qIFNvdXJjZSBkZXZpY2UgYWRkcmVzcyAqLworICAgICAgICBfX3UzMiAgICAgZGFkZHI7ICAgICAgICAgICAgICAgLyogRGVzdGluYXRpb24gZGV2aWNlIGFkZHJlc3MgKi8KKyAgICAgICAgX191OCAgICAgIGRsc2FwX3NlbDsKK307CisKK2V4dGVybiBjaGFyICppcmNvbW1fc3RhdGVbXTsKK2V4dGVybiBjaGFyICppcmNvbW1fdHR5X3N0YXRlW107CisKK2ludCBpcmNvbW1fdHR5X2RvX2V2ZW50KHN0cnVjdCBpcmNvbW1fdHR5X2NiICpzZWxmLCBJUkNPTU1fVFRZX0VWRU5UIGV2ZW50LAorCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlyY29tbV90dHlfaW5mbyAqaW5mbyk7CisKKworaW50ICBpcmNvbW1fdHR5X2F0dGFjaF9jYWJsZShzdHJ1Y3QgaXJjb21tX3R0eV9jYiAqc2VsZik7Cit2b2lkIGlyY29tbV90dHlfZGV0YWNoX2NhYmxlKHN0cnVjdCBpcmNvbW1fdHR5X2NiICpzZWxmKTsKK3ZvaWQgaXJjb21tX3R0eV9jb25uZWN0X2NvbmZpcm0odm9pZCAqaW5zdGFuY2UsIHZvaWQgKnNhcCwgCisJCQkJc3RydWN0IHFvc19pbmZvICpxb3MsIAorCQkJCV9fdTMyIG1heF9zZHVfc2l6ZSwgCisJCQkJX191OCBtYXhfaGVhZGVyX3NpemUsIAorCQkJCXN0cnVjdCBza19idWZmICpza2IpOwordm9pZCBpcmNvbW1fdHR5X2Rpc2Nvbm5lY3RfaW5kaWNhdGlvbih2b2lkICppbnN0YW5jZSwgdm9pZCAqc2FwLCAKKwkJCQkgICAgICBMTV9SRUFTT04gcmVhc29uLAorCQkJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IpOwordm9pZCBpcmNvbW1fdHR5X2Nvbm5lY3RfaW5kaWNhdGlvbih2b2lkICppbnN0YW5jZSwgdm9pZCAqc2FwLCAKKwkJCQkgICBzdHJ1Y3QgcW9zX2luZm8gKnFvcywgCisJCQkJICAgX191MzIgbWF4X3NkdV9zaXplLAorCQkJCSAgIF9fdTggbWF4X2hlYWRlcl9zaXplLCAKKwkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2ludCBpcmNvbW1fdHR5X3NlbmRfaW5pdGlhbF9wYXJhbWV0ZXJzKHN0cnVjdCBpcmNvbW1fdHR5X2NiICpzZWxmKTsKK3ZvaWQgaXJjb21tX3R0eV9saW5rX2VzdGFibGlzaGVkKHN0cnVjdCBpcmNvbW1fdHR5X2NiICpzZWxmKTsKKworI2VuZGlmIC8qIElSQ09NTV9UVFlfQVRUQUNIX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lyZGEvaXJkYS5oIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVhODQwOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L2lyZGEvaXJkYS5oCkBAIC0wLDAgKzEsMTE3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAKKyAqIEZpbGVuYW1lOiAgICAgIGlyZGEuaAorICogVmVyc2lvbjogICAgICAgMS4wCisgKiBEZXNjcmlwdGlvbjogICBJckRBIGNvbW1vbiBpbmNsdWRlIGZpbGUgZm9yIGtlcm5lbCBpbnRlcm5hbCB1c2UKKyAqIFN0YXR1czogICAgICAgIFN0YWJsZQorICogQXV0aG9yOiAgICAgICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgorICogQ3JlYXRlZCBhdDogICAgVHVlIERlYyAgOSAyMToxMzoxMiAxOTk3CisgKiBNb2RpZmllZCBhdDogICBGcmkgSmFuIDI4IDEzOjE2OjMyIDIwMDAKKyAqIE1vZGlmaWVkIGJ5OiAgIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4KKyAqIAorICogICAgIENvcHlyaWdodCAoYykgMTk5OC0yMDAwIERhZyBCcmF0dGxpLCBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogICAgIENvcHlyaWdodCAoYykgMjAwMC0yMDAyIEplYW4gVG91cnJpbGhlcyA8anRAaHBsLmhwLmNvbT4KKyAqICAgICAgCisgKiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAKKyAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyAKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiAKKyAqICAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqICAKKyAqICAgICBOZWl0aGVyIERhZyBCcmF0dGxpIG5vciBVbml2ZXJzaXR5IG9mIFRyb21z+CBhZG1pdCBsaWFiaWxpdHkgbm9yCisgKiAgICAgcHJvdmlkZSB3YXJyYW50eSBmb3IgYW55IG9mIHRoaXMgc29mdHdhcmUuIFRoaXMgbWF0ZXJpYWwgaXMgCisgKiAgICAgcHJvdmlkZWQgIkFTLUlTIiBhbmQgYXQgbm8gY2hhcmdlLgorICogICAgIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIE5FVF9JUkRBX0gKKyNkZWZpbmUgTkVUX0lSREFfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CQkvKiBzdHJ1Y3Qgc2tfYnVmZiAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lmLmg+CQkJLyogc2FfZmFtaWx5X3QgaW4gPGxpbnV4L2lyZGEuaD4gKi8KKyNpbmNsdWRlIDxsaW51eC9pcmRhLmg+CisKK3R5cGVkZWYgX191MzIgbWFnaWNfdDsKKworI2lmbmRlZiBUUlVFCisjZGVmaW5lIFRSVUUgMQorI2VuZGlmCisKKyNpZm5kZWYgRkFMU0UgCisjZGVmaW5lIEZBTFNFIDAKKyNlbmRpZgorCisvKiBIYWNrIHRvIGRvIHNtYWxsIGJhY2tvZmYgd2hlbiBzZXR0aW5nIG1lZGlhIGJ1c3kgaW4gSXJMQVAgKi8KKyNpZm5kZWYgU01BTEwKKyNkZWZpbmUgU01BTEwgNQorI2VuZGlmCisKKyNpZm5kZWYgSVJEQV9NSU4gLyogTGV0cyBub3QgbWl4IHRoaXMgTUlOIHdpdGggb3RoZXIgaGVhZGVyIGZpbGVzICovCisjZGVmaW5lIElSREFfTUlOKGEsIGIpICgoKGEpIDwgKGIpKSA/IChhKSA6IChiKSkKKyNlbmRpZgorCisjaWZuZGVmIElSREFfQUxJR04KKyMgIGRlZmluZSBJUkRBX0FMSUdOIF9fYXR0cmlidXRlX18oKGFsaWduZWQpKQorI2VuZGlmCisjaWZuZGVmIElSREFfUEFDSworIyAgZGVmaW5lIElSREFfUEFDSyBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKQorI2VuZGlmCisKKworI2lmZGVmIENPTkZJR19JUkRBX0RFQlVHCisKK2V4dGVybiB1bnNpZ25lZCBpbnQgaXJkYV9kZWJ1ZzsKKworLyogdXNlIDAgZm9yIHByb2R1Y3Rpb24sIDEgZm9yIHZlcmlmaWNhdGlvbiwgPjIgZm9yIGRlYnVnICovCisjZGVmaW5lIElSREFfREVCVUdfTEVWRUwgMAorCisjZGVmaW5lIElSREFfREVCVUcobiwgYXJncy4uLikgXAorZG8gewlpZiAoaXJkYV9kZWJ1ZyA+PSAobikpIFwKKwkJcHJpbnRrKEtFUk5fREVCVUcgYXJncyk7IFwKK30gd2hpbGUgKDApCisjZGVmaW5lIElSREFfQVNTRVJUKGV4cHIsIGZ1bmMpIFwKK2RvIHsgaWYoIShleHByKSkgeyBcCisJcHJpbnRrKCAiQXNzZXJ0aW9uIGZhaWxlZCEgJXM6JXM6JWQgJXNcbiIsIFwKKwkJX19GSUxFX18sX19GVU5DVElPTl9fLF9fTElORV9fLCgjZXhwcikgKTsgXAorCWZ1bmMgfSB9IHdoaWxlICgwKQorI2RlZmluZSBJUkRBX0FTU0VSVF9MQUJFTChsYWJlbCkJbGFiZWwKKyNlbHNlCisjZGVmaW5lIElSREFfREVCVUcobiwgYXJncy4uLikgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBJUkRBX0FTU0VSVChleHByLCBmdW5jKSBkbyB7ICh2b2lkKShleHByKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgSVJEQV9BU1NFUlRfTEFCRUwobGFiZWwpCisjZW5kaWYgLyogQ09ORklHX0lSREFfREVCVUcgKi8KKworI2RlZmluZSBJUkRBX1dBUk5JTkcoYXJncy4uLikgcHJpbnRrKEtFUk5fV0FSTklORyBhcmdzKQorI2RlZmluZSBJUkRBX01FU1NBR0UoYXJncy4uLikgcHJpbnRrKEtFUk5fSU5GTyBhcmdzKQorI2RlZmluZSBJUkRBX0VSUk9SKGFyZ3MuLi4pICAgcHJpbnRrKEtFUk5fRVJSIGFyZ3MpCisKKy8qCisgKiAgTWFnaWMgbnVtYmVycyB1c2VkIGJ5IExpbnV4LUlyREEuIFJhbmRvbSBudW1iZXJzIHdoaWNoIG11c3QgYmUgdW5pcXVlIHRvIAorICogIGdpdmUgdGhlIGJlc3QgcHJvdGVjdGlvbgorICovCisKKyNkZWZpbmUgSVJUVFlfTUFHSUMgICAgICAgIDB4MjM1NworI2RlZmluZSBMQVBfTUFHSUMgICAgICAgICAgMHgxMzU3CisjZGVmaW5lIExNUF9NQUdJQyAgICAgICAgICAweDQzMjEKKyNkZWZpbmUgTE1QX0xTQVBfTUFHSUMgICAgIDB4NjkzMzMKKyNkZWZpbmUgTE1QX0xBUF9NQUdJQyAgICAgIDB4MzQzMgorI2RlZmluZSBJUkRBX0RFVklDRV9NQUdJQyAgMHg2MzQ1NAorI2RlZmluZSBJQVNfTUFHSUMgICAgICAgICAgMHgwMDcKKyNkZWZpbmUgVFRQX01BR0lDICAgICAgICAgIDB4MjQxMTY5CisjZGVmaW5lIFRUUF9UU0FQX01BR0lDICAgICAweDQzNDUKKyNkZWZpbmUgSVJPQkVYX01BR0lDICAgICAgIDB4MzQxMzI0CisjZGVmaW5lIEhCX01BR0lDICAgICAgICAgICAweDY0NTM0CisjZGVmaW5lIElSTEFOX01BR0lDICAgICAgICAweDc1NAorI2RlZmluZSBJQVNfT0JKRUNUX01BR0lDICAgMHgzNDIzNAorI2RlZmluZSBJQVNfQVRUUklCX01BR0lDICAgMHg0NTIzMgorI2RlZmluZSBJUkRBX1RBU0tfTUFHSUMgICAgMHgzODQyMworCisjZGVmaW5lIElBU19ERVZJQ0VfSUQgMHgwMDAwIC8qIERlZmluZWQgYnkgSXJEQSwgSXJMTVAgc2VjdGlvbiA0LjEgKHBhZ2UgNjgpICovCisjZGVmaW5lIElBU19QTlBfSUQgICAgMHhkMzQyCisjZGVmaW5lIElBU19PQkVYX0lEICAgMHgzNDMyMworI2RlZmluZSBJQVNfSVJMQU5fSUQgIDB4MzQyMzQKKyNkZWZpbmUgSUFTX0lSQ09NTV9JRCAweDIzNDMKKyNkZWZpbmUgSUFTX0lSTFBUX0lEICAweDk4NzYKKworI2VuZGlmIC8qIE5FVF9JUkRBX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lyZGEvaXJkYV9kZXZpY2UuaCBiL2luY2x1ZGUvbmV0L2lyZGEvaXJkYV9kZXZpY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjIxNmYxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmRhX2RldmljZS5oCkBAIC0wLDAgKzEsMzAxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAKKyAqIEZpbGVuYW1lOiAgICAgIGlyZGFfZGV2aWNlLmgKKyAqIFZlcnNpb246ICAgICAgIDAuOQorICogRGVzY3JpcHRpb246ICAgQ29udGFpbnMgdmFyaW91cyBkZWNsYXJhdGlvbnMgdXNlZCBieSB0aGUgZHJpdmVycworICogU3RhdHVzOiAgICAgICAgRXhwZXJpbWVudGFsLgorICogQXV0aG9yOiAgICAgICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgorICogQ3JlYXRlZCBhdDogICAgVHVlIEFwciAxNCAxMjo0MTo0MiAxOTk4CisgKiBNb2RpZmllZCBhdDogICBNb24gTWFyIDIwIDA5OjA4OjU3IDIwMDAKKyAqIE1vZGlmaWVkIGJ5OiAgIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4KKyAqIAorICogICAgIENvcHlyaWdodCAoYykgMTk5OS0yMDAwIERhZyBCcmF0dGxpLCBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogICAgIENvcHlyaWdodCAoYykgMTk5OCBUaG9tYXMgRGF2aXMsIDxyYXRiZXJ0QHJhZGlrcy5uZXQ+LAorICogICAgIENvcHlyaWdodCAoYykgMjAwMC0yMDAyIEplYW4gVG91cnJpbGhlcyA8anRAaHBsLmhwLmNvbT4KKyAqCisgKiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAKKyAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyAKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiAKKyAqICAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIAorICogICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqIAorICogICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIAorICogICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIAorICogICAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIAorICogICAgIE1BIDAyMTExLTEzMDcgVVNBCisgKiAgICAgCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBUaGlzIGhlYWRlciBjb250YWlucyBhbGwgdGhlIElyREEgZGVmaW5pdGlvbnMgYSBkcml2ZXIgcmVhbGx5CisgKiBuZWVkcywgYW5kIHRoZXJlZm9yZSB0aGUgZHJpdmVyIHNob3VsZCBub3QgbmVlZCB0byBpbmNsdWRlCisgKiBhbnkgb3RoZXIgSXJEQSBoZWFkZXJzIC0gSmVhbiBJSQorICovCisKKyNpZm5kZWYgSVJEQV9ERVZJQ0VfSAorI2RlZmluZSBJUkRBX0RFVklDRV9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgkJLyogc3RydWN0IHNrX2J1ZmYgKi8KKyNpbmNsdWRlIDxsaW51eC9pcmRhLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2luY2x1ZGUgPG5ldC9wa3Rfc2NoZWQuaD4KKyNpbmNsdWRlIDxuZXQvaXJkYS9pcmRhLmg+CisjaW5jbHVkZSA8bmV0L2lyZGEvcW9zLmg+CQkvKiBzdHJ1Y3QgcW9zX2luZm8gKi8KKyNpbmNsdWRlIDxuZXQvaXJkYS9pcnF1ZXVlLmg+CQkvKiBpcmRhX3F1ZXVlX3QgKi8KKworLyogQSBmZXcgZm9yd2FyZCBkZWNsYXJhdGlvbnMgKHRvIG1ha2UgY29tcGlsZXIgaGFwcHkpICovCitzdHJ1Y3QgaXJsYXBfY2I7CisKKy8qIFNvbWUgbm9uLXN0YW5kYXJkIGludGVyZmFjZSBmbGFncyAoc2hvdWxkIG5vdCBjb25mbGljdCB3aXRoIGFueSBpbiBpZi5oKSAqLworI2RlZmluZSBJRkZfU0lSIAkweDAwMDEgLyogU3VwcG9ydHMgU0lSIHNwZWVkcyAqLworI2RlZmluZSBJRkZfTUlSIAkweDAwMDIgLyogU3VwcG9ydHMgTUlSIHNwZWVkcyAqLworI2RlZmluZSBJRkZfRklSIAkweDAwMDQgLyogU3VwcG9ydHMgRklSIHNwZWVkcyAqLworI2RlZmluZSBJRkZfVkZJUiAgICAgICAgMHgwMDA4IC8qIFN1cHBvcnRzIFZGSVIgc3BlZWRzICovCisjZGVmaW5lIElGRl9QSU8gICAJMHgwMDEwIC8qIFN1cHBvcnRzIFBJTyB0cmFuc2ZlciBvZiBkYXRhICovCisjZGVmaW5lIElGRl9ETUEJCTB4MDAyMCAvKiBTdXBwb3J0cyBETUEgdHJhbnNmZXIgb2YgZGF0YSAqLworI2RlZmluZSBJRkZfU0hNICAgICAgICAgMHgwMDQwIC8qIFN1cHBvcnRzIHNoYXJlZCBtZW1vcnkgZGF0YSB0cmFuc2ZlcnMgKi8KKyNkZWZpbmUgSUZGX0RPTkdMRSAgICAgIDB4MDA4MCAvKiBJbnRlcmZhY2UgaGFzIGEgZG9uZ2xlIGF0dGFjaGVkICovCisjZGVmaW5lIElGRl9BSVIgICAgICAgICAweDAxMDAgLyogU3VwcG9ydHMgQWR2YW5jZWQgSVIgKEFJUikgc3RhbmRhcmRzICovCisKKyNkZWZpbmUgSU9fWE1JVCAweDAxCisjZGVmaW5lIElPX1JFQ1YgMHgwMgorCit0eXBlZGVmIGVudW0geworCUlSREFfSVJMQVAsIC8qIElyREEgbW9kZSwgYW5kIGRlbGl2ZXIgdG8gSXJMQVAgKi8KKwlJUkRBX1JBVywgICAvKiBJckRBIG1vZGUgKi8KKwlTSEFSUF9BU0ssCisJVFZfUkVNT1RFLCAgLyogQWxzbyBrbm93biBhcyBDb25zdW1lciBFbGVjdHJvbmljcyBJUiAqLworfSBJTkZSQVJFRF9NT0RFOworCit0eXBlZGVmIGVudW0geworCUlSREFfVEFTS19JTklULCAgICAgICAgLyogQWxsIHRhc2tzIGFyZSBpbml0aWFsaXplZCB3aXRoIHRoaXMgc3RhdGUgKi8KKwlJUkRBX1RBU0tfRE9ORSwgICAgICAgIC8qIFNpZ25hbHMgdGhhdCB0aGUgdGFzayBpcyBmaW5pc2hlZCAqLworCUlSREFfVEFTS19XQUlULAorCUlSREFfVEFTS19XQUlUMSwKKwlJUkRBX1RBU0tfV0FJVDIsCisJSVJEQV9UQVNLX1dBSVQzLAorCUlSREFfVEFTS19DSElMRF9JTklULCAgLyogSW5pdGlhbGl6aW5nIGNoaWxkIHRhc2sgKi8KKwlJUkRBX1RBU0tfQ0hJTERfV0FJVCwgIC8qIFdhaXRpbmcgZm9yIGNoaWxkIHRhc2sgdG8gZmluaXNoICovCisJSVJEQV9UQVNLX0NISUxEX0RPTkUgICAvKiBDaGlsZCB0YXNrIGlzIGZpbmlzaGVkICovCit9IElSREFfVEFTS19TVEFURTsKKworc3RydWN0IGlyZGFfdGFzazsKK3R5cGVkZWYgaW50ICgqSVJEQV9UQVNLX0NBTExCQUNLKSAoc3RydWN0IGlyZGFfdGFzayAqdGFzayk7CisKK3N0cnVjdCBpcmRhX3Rhc2sgeworCWlyZGFfcXVldWVfdCBxOworCW1hZ2ljX3QgbWFnaWM7CisKKwlJUkRBX1RBU0tfU1RBVEUgc3RhdGU7CisJSVJEQV9UQVNLX0NBTExCQUNLIGZ1bmN0aW9uOworCUlSREFfVEFTS19DQUxMQkFDSyBmaW5pc2hlZDsKKworCXN0cnVjdCBpcmRhX3Rhc2sgKnBhcmVudDsKKwlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKKworCXZvaWQgKmluc3RhbmNlOyAvKiBJbnN0YW5jZSBiZWluZyBjYWxsZWQgKi8KKwl2b2lkICpwYXJhbTsgICAgLyogUGFyYW1ldGVyIHRvIGJlIHVzZWQgYnkgaW5zdGFuY2UgKi8KK307CisKKy8qIERvbmdsZSBpbmZvICovCitzdHJ1Y3QgZG9uZ2xlX3JlZzsKK3R5cGVkZWYgc3RydWN0IHsKKwlzdHJ1Y3QgZG9uZ2xlX3JlZyAqaXNzdWU7ICAgICAvKiBSZWdpc3RyYXRpb24gaW5mbyAqLworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7ICAgICAgICAgICAvKiBEZXZpY2Ugd2UgYXJlIGF0dGFjaGVkIHRvICovCisJc3RydWN0IGlyZGFfdGFzayAqc3BlZWRfdGFzazsgLyogVGFzayBoYW5kbGluZyBzcGVlZCBjaGFuZ2UgKi8KKwlzdHJ1Y3QgaXJkYV90YXNrICpyZXNldF90YXNrOyAvKiBUYXNrIGhhbmRsaW5nIHJlc2V0ICovCisJX191MzIgc3BlZWQ7ICAgICAgICAgICAgICAgICAgLyogQ3VycmVudCBzcGVlZCAqLworCisJLyogQ2FsbGJhY2tzIHRvIHRoZSBJckRBIGRldmljZSBkcml2ZXIgKi8KKwlpbnQgKCpzZXRfbW9kZSkoc3RydWN0IG5ldF9kZXZpY2UgKiwgaW50IG1vZGUpOworCWludCAoKnJlYWQpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fdTggKmJ1ZiwgaW50IGxlbik7CisJaW50ICgqd3JpdGUpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fdTggKmJ1ZiwgaW50IGxlbik7CisJaW50ICgqc2V0X2R0cl9ydHMpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBkdHIsIGludCBydHMpOworfSBkb25nbGVfdDsKKworLyogRG9uZ2xlIHJlZ2lzdHJhdGlvbiBpbmZvICovCitzdHJ1Y3QgZG9uZ2xlX3JlZyB7CisJaXJkYV9xdWV1ZV90IHE7ICAgICAgICAgLyogTXVzdCBiZSBmaXJzdCAqLworCUlSREFfRE9OR0xFIHR5cGU7CisKKwl2b2lkICgqb3BlbikoZG9uZ2xlX3QgKmRvbmdsZSwgc3RydWN0IHFvc19pbmZvICpxb3MpOworCXZvaWQgKCpjbG9zZSkoZG9uZ2xlX3QgKmRvbmdsZSk7CisJaW50ICAoKnJlc2V0KShzdHJ1Y3QgaXJkYV90YXNrICp0YXNrKTsKKwlpbnQgICgqY2hhbmdlX3NwZWVkKShzdHJ1Y3QgaXJkYV90YXNrICp0YXNrKTsKKwlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKK307CisKKy8qIAorICogUGVyLXBhY2tldCBpbmZvcm1hdGlvbiB3ZSBuZWVkIHRvIGhpZGUgaW5zaWRlIHNrX2J1ZmYgCisgKiAobXVzdCBub3QgZXhjZWVkIDQ4IGJ5dGVzLCBjaGVjayB3aXRoIHN0cnVjdCBza19idWZmKSAKKyAqLworc3RydWN0IGlyZGFfc2tiX2NiIHsKKwltYWdpY190IG1hZ2ljOyAgICAgICAvKiBCZSBzdXJlIHRoYXQgd2UgY2FuIHRydXN0IHRoZSBpbmZvcm1hdGlvbiAqLworCV9fdTMyICAgbmV4dF9zcGVlZDsgIC8qIFRoZSBTcGVlZCB0byBiZSBzZXQgKmFmdGVyKiB0aGlzIGZyYW1lICovCisJX191MTYgICBtdHQ7ICAgICAgICAgLyogTWluaW11bSB0dXJuIGFyb3VuZCB0aW1lICovCisJX191MTYgICB4Ym9mczsgICAgICAgLyogTnVtYmVyIG9mIHhib2ZzIHJlcXVpcmVkLCB1c2VkIGJ5IFNJUiBtb2RlICovCisJX191MTYgICBuZXh0X3hib2ZzOyAgLyogTnVtYmVyIG9mIHhib2ZzIHJlcXVpcmVkICphZnRlciogdGhpcyBmcmFtZSAqLworCXZvaWQgICAgKmNvbnRleHQ7ICAgIC8qIE1heSBiZSB1c2VkIGJ5IGRyaXZlcnMgKi8KKwl2b2lkICAgICgqZGVzdHJ1Y3Rvcikoc3RydWN0IHNrX2J1ZmYgKnNrYik7IC8qIFVzZWQgZm9yIGZsb3cgY29udHJvbCAqLworCV9fdTE2ICAgeGJvZnNfZGVsYXk7IC8qIE51bWJlciBvZiB4Ym9mcyB1c2VkIGZvciBnZW5lcmF0aW5nIHRoZSBtdHQgKi8KKwlfX3U4ICAgIGxpbmU7ICAgICAgICAvKiBVc2VkIGJ5IElyQ09NTSBpbiBJckxQVCBtb2RlICovCit9OworCisvKiBDaGlwIHNwZWNpZmljIGluZm8gKi8KK3R5cGVkZWYgc3RydWN0IHsKKwlpbnQgY2ZnX2Jhc2U7ICAgICAgICAgLyogQ29uZmlnIHJlZ2lzdGVyIElPIGJhc2UgKi8KKyAgICAgICAgaW50IHNpcl9iYXNlOyAgICAgICAgIC8qIFNJUiBJTyBiYXNlICovCisJaW50IGZpcl9iYXNlOyAgICAgICAgIC8qIEZJUiBJTyBiYXNlICovCisJaW50IG1lbV9iYXNlOyAgICAgICAgIC8qIFNoYXJlZCBtZW1vcnkgYmFzZSAqLworICAgICAgICBpbnQgc2lyX2V4dDsgICAgICAgICAgLyogTGVuZ3RoIG9mIFNJUiBpb2Jhc2UgKi8KKwlpbnQgZmlyX2V4dDsgICAgICAgICAgLyogTGVuZ3RoIG9mIEZJUiBpb2Jhc2UgKi8KKyAgICAgICAgaW50IGlycSwgaXJxMjsgICAgICAgIC8qIEludGVycnVwdHMgdXNlZCAqLworICAgICAgICBpbnQgZG1hLCBkbWEyOyAgICAgICAgLyogRE1BIGNoYW5uZWwocykgdXNlZCAqLworICAgICAgICBpbnQgZmlmb19zaXplOyAgICAgICAgLyogRklGTyBzaXplICovCisgICAgICAgIGludCBpcnFmbGFnczsgICAgICAgICAvKiBpbnRlcnJ1cHQgZmxhZ3MgKGllLCBTQV9TSElSUXxTQV9JTlRFUlJVUFQpICovCisJaW50IGRpcmVjdGlvbjsgICAgICAgIC8qIExpbmsgZGlyZWN0aW9uLCB1c2VkIGJ5IHNvbWUgRklSIGRyaXZlcnMgKi8KKwlpbnQgZW5hYmxlZDsgICAgICAgICAgLyogUG93ZXJlZCBvbj8gKi8KKwlpbnQgc3VzcGVuZGVkOyAgICAgICAgLyogU3VzcGVuZGVkIGJ5IEFQTSAqLworCV9fdTMyIHNwZWVkOyAgICAgICAgICAvKiBDdXJyZW50bHkgdXNlZCBzcGVlZCAqLworCV9fdTMyIG5ld19zcGVlZDsgICAgICAvKiBTcGVlZCB3ZSBtdXN0IGNoYW5nZSB0byB3aGVuIFR4IGlzIGZpbmlzaGVkICovCisJaW50IGRvbmdsZV9pZDsgICAgICAgIC8qIERvbmdsZSBvciB0cmFuc2NlaXZlciBjdXJyZW50bHkgdXNlZCAqLworfSBjaGlwaW9fdDsKKworLyogSU8gYnVmZmVyIHNwZWNpZmljIGluZm8gKGluc3BpcmVkIGJ5IHN0cnVjdCBza19idWZmKSAqLwordHlwZWRlZiBzdHJ1Y3QgeworCWludCBzdGF0ZTsgICAgICAgICAgICAvKiBSZWNlaXZpbmcgc3RhdGUgKHRyYW5zbWl0IHN0YXRlIG5vdCB1c2VkKSAqLworCWludCBpbl9mcmFtZTsgICAgICAgICAvKiBUcnVlIGlmIHJlY2VpdmluZyBmcmFtZSAqLworCisJX191OCAqaGVhZDsJICAgICAgLyogc3RhcnQgb2YgYnVmZmVyICovCisJX191OCAqZGF0YTsJICAgICAgLyogc3RhcnQgb2YgZGF0YSBpbiBidWZmZXIgKi8KKworCWludCBsZW47CSAgICAgIC8qIGN1cnJlbnQgbGVuZ3RoIG9mIGRhdGEgKi8KKwlpbnQgdHJ1ZXNpemU7CSAgICAgIC8qIHRvdGFsIGFsbG9jYXRlZCBzaXplIG9mIGJ1ZmZlciAqLworCV9fdTE2IGZjczsKKworCXN0cnVjdCBza19idWZmICpza2I7CS8qIFplcm9Db3B5IFJ4IGluIGFzeW5jX3Vud3JhcF9jaGFyKCkgKi8KK30gaW9idWZmX3Q7CisKKy8qIE1heGltdW0gU0lSIGZyYW1lIChza2IpIHRoYXQgd2UgZXhwZWN0IHRvIHJlY2VpdmUgKnVud3JhcHBlZCouCisgKiBNYXggTEFQIE1UVSAoSSBmaWVsZCkgaXMgMjA0OCBieXRlcyBtYXggKElyTEFQIDEuMSwgY2hhcHQgNi42LjUsIHA0MCkuCisgKiBNYXggTEFQIGhlYWRlciBpcyAyIGJ5dGVzIChmb3Igbm93KS4KKyAqIE1heCBDUkMgaXMgMiBieXRlcyBhdCBTSVIsIDQgYnl0ZXMgYXQgRklSLiAKKyAqIE5lZWQgMSBieXRlIGZvciBza2JfcmVzZXJ2ZSgpIHRvIGFsaWduIElQIGhlYWRlciBmb3IgSXJMQU4uCisgKiBBZGQgYSBmZXcgZXh0cmEgYnl0ZXMganVzdCB0byBiZSBzYWZlIChidWZmZXIgaXMgcG93ZXIgb2YgdHdvIGFueXdheSkKKyAqIEplYW4gSUkgKi8KKyNkZWZpbmUgSVJEQV9TS0JfTUFYX01UVQkyMDY0CisvKiBNYXhpbXVtIFNJUiBmcmFtZSB0aGF0IHdlIGV4cGVjdCB0byBzZW5kLCB3cmFwcGVkIChpLmUuIHdpdGggWEJPRlMKKyAqIGFuZCBlc2NhcGVkIGNoYXJhY3RlcnMgb24gdG9wIG9mIGFib3ZlKS4gKi8KKyNkZWZpbmUgSVJEQV9TSVJfTUFYX0ZSQU1FCTQyNjkKKworLyogVGhlIFNJUiB1bndyYXBwZXIgYXN5bmNfdW53cmFwX2NoYXIoKSB3aWxsIHVzZSBhIFJ4LWNvcHktYnJlYWsgbWVjaGFuaXNtCisgKiB3aGVuIHVzaW5nIHRoZSBvcHRpb25hbCBaZXJvQ29weSBSeCwgd2hlcmUgb25seSBzbWFsbCBmcmFtZXMgYXJlIG1lbWNweQorICogdG8gYSBzbWFsbGVyIHNrYiB0byBzYXZlIG1lbW9yeS4gVGhpcyBpcyB0aGUgdGhyZXNob2xkIHVuZGVyIHdoaWNoIGNvcHkKKyAqIHdpbGwgaGFwcGVuIChhbmQgb3ZlciB3aGljaCBpdCB3b24ndCBoYXBwZW4pLgorICogU29tZSBGSVIgZHJpdmVycyBtYXkgdXNlIHRoaXMgI2RlZmluZSBhcyB3ZWxsLi4uCisgKiBUaGlzIGlzIHRoZSBzYW1lIHZhbHVlIGFzIHZhcmlvdXMgRXRoZXJuZXQgZHJpdmVycy4gLSBKZWFuIElJICovCisjZGVmaW5lIElSREFfUlhfQ09QWV9USFJFU0hPTEQgIDI1NgorCisvKiBGdW5jdGlvbiBwcm90b3R5cGVzICovCitpbnQgIGlyZGFfZGV2aWNlX2luaXQodm9pZCk7Cit2b2lkIGlyZGFfZGV2aWNlX2NsZWFudXAodm9pZCk7CisKKy8qIElyTEFQIGVudHJ5IHBvaW50cyB1c2VkIGJ5IHRoZSBkcml2ZXJzLgorICogV2UgZGVjbGFyZSB0aGVtIGhlcmUgdG8gYXZvaWQgdGhlIGRyaXZlciBwdWxsaW5nIGEgd2hvbGUgYnVuY2ggc3RhY2sKKyAqIGhlYWRlcnMgdGhleSBkb24ndCByZWFsbHkgbmVlZCAtIEplYW4gSUkgKi8KK3N0cnVjdCBpcmxhcF9jYiAqaXJsYXBfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcW9zX2luZm8gKnFvcywKKwkJCSAgICBjb25zdCBjaGFyICpod19uYW1lKTsKK3ZvaWQgaXJsYXBfY2xvc2Uoc3RydWN0IGlybGFwX2NiICpzZWxmKTsKKworLyogSW50ZXJmYWNlIHRvIGJlIHVzZXMgYnkgSXJMQVAgKi8KK3ZvaWQgaXJkYV9kZXZpY2Vfc2V0X21lZGlhX2J1c3koc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHN0YXR1cyk7CitpbnQgIGlyZGFfZGV2aWNlX2lzX21lZGlhX2J1c3koc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitpbnQgIGlyZGFfZGV2aWNlX2lzX3JlY2VpdmluZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKworLyogSW50ZXJmYWNlIGZvciBpbnRlcm5hbCB1c2UgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGlyZGFfZGV2aWNlX3R4cXVldWVfZW1wdHkoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gKHNrYl9xdWV1ZV9sZW4oJmRldi0+cWRpc2MtPnEpID09IDApOworfQoraW50ICBpcmRhX2RldmljZV9zZXRfcmF3X21vZGUoc3RydWN0IG5ldF9kZXZpY2UqIHNlbGYsIGludCBzdGF0dXMpOworc3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX2lyZGFkZXYoaW50IHNpemVvZl9wcml2KTsKKworLyogRG9uZ2xlIGludGVyZmFjZSAqLwordm9pZCBpcmRhX2RldmljZV91bnJlZ2lzdGVyX2RvbmdsZShzdHJ1Y3QgZG9uZ2xlX3JlZyAqZG9uZ2xlKTsKK2ludCAgaXJkYV9kZXZpY2VfcmVnaXN0ZXJfZG9uZ2xlKHN0cnVjdCBkb25nbGVfcmVnICpkb25nbGUpOworZG9uZ2xlX3QgKmlyZGFfZGV2aWNlX2RvbmdsZV9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCB0eXBlKTsKK2ludCBpcmRhX2RldmljZV9kb25nbGVfY2xlYW51cChkb25nbGVfdCAqZG9uZ2xlKTsKKworI2lmZGVmIENPTkZJR19JU0EKK3ZvaWQgaXJkYV9zZXR1cF9kbWEoaW50IGNoYW5uZWwsIGRtYV9hZGRyX3QgYnVmZmVyLCBpbnQgY291bnQsIGludCBtb2RlKTsKKyNlbmRpZgorCit2b2lkIGlyZGFfdGFza19kZWxldGUoc3RydWN0IGlyZGFfdGFzayAqdGFzayk7CitzdHJ1Y3QgaXJkYV90YXNrICppcmRhX3Rhc2tfZXhlY3V0ZSh2b2lkICppbnN0YW5jZSwgCisJCQkJICAgIElSREFfVEFTS19DQUxMQkFDSyBmdW5jdGlvbiwgCisJCQkJICAgIElSREFfVEFTS19DQUxMQkFDSyBmaW5pc2hlZCwgCisJCQkJICAgIHN0cnVjdCBpcmRhX3Rhc2sgKnBhcmVudCwgdm9pZCAqcGFyYW0pOwordm9pZCBpcmRhX3Rhc2tfbmV4dF9zdGF0ZShzdHJ1Y3QgaXJkYV90YXNrICp0YXNrLCBJUkRBX1RBU0tfU1RBVEUgc3RhdGUpOworCisvKgorICogRnVuY3Rpb24gaXJkYV9nZXRfbXR0IChza2IpCisgKgorICogICAgVXRpbGl0eSBmdW5jdGlvbiBmb3IgZ2V0dGluZyB0aGUgbWluaW11bSB0dXJuYXJvdW5kIHRpbWUgb3V0IG9mIAorICogICAgdGhlIHNrYiwgd2hlcmUgaXQgaGFzIGJlZW4gaGlkZGVuIGluIHRoZSBjYiBmaWVsZC4KKyAqLworc3RhdGljIGlubGluZSBfX3UxNiBpcmRhX2dldF9tdHQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwljb25zdCBzdHJ1Y3QgaXJkYV9za2JfY2IgKmNiID0gKGNvbnN0IHN0cnVjdCBpcmRhX3NrYl9jYiAqKSBza2ItPmNiOworCXJldHVybiAoY2ItPm1hZ2ljID09IExBUF9NQUdJQykgPyBjYi0+bXR0IDogMTAwMDA7Cit9CisKKy8qCisgKiBGdW5jdGlvbiBpcmRhX2dldF9uZXh0X3NwZWVkIChza2IpCisgKgorICogICAgRXh0cmFjdCB0aGUgc3BlZWQgdGhhdCBzaG91bGQgYmUgc2V0ICphZnRlciogdGhpcyBmcmFtZSBmcm9tIHRoZSBza2IKKyAqCisgKiBOb3RlIDogcmV0dXJuIC0xIGZvciB1c2VyIHNwYWNlIGZyYW1lcworICovCitzdGF0aWMgaW5saW5lIF9fdTMyIGlyZGFfZ2V0X25leHRfc3BlZWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwljb25zdCBzdHJ1Y3QgaXJkYV9za2JfY2IgKmNiID0gKGNvbnN0IHN0cnVjdCBpcmRhX3NrYl9jYiAqKSBza2ItPmNiOworCXJldHVybiAoY2ItPm1hZ2ljID09IExBUF9NQUdJQykgPyBjYi0+bmV4dF9zcGVlZCA6IC0xOworfQorCisvKgorICogRnVuY3Rpb24gaXJkYV9nZXRfbmV4dF94Ym9mcyAoc2tiKQorICoKKyAqICAgIEV4dHJhY3QgdGhlIHhib2ZzIHRoYXQgc2hvdWxkIGJlIHNldCBmb3IgdGhpcyBmcmFtZSBmcm9tIHRoZSBza2IKKyAqCisgKiBOb3RlIDogZGVmYXVsdCB0byAxMCBmb3IgdXNlciBzcGFjZSBmcmFtZXMKKyAqLworc3RhdGljIGlubGluZSBfX3UxNiBpcmRhX2dldF94Ym9mcyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWNvbnN0IHN0cnVjdCBpcmRhX3NrYl9jYiAqY2IgPSAoY29uc3Qgc3RydWN0IGlyZGFfc2tiX2NiICopIHNrYi0+Y2I7CisJcmV0dXJuIChjYi0+bWFnaWMgPT0gTEFQX01BR0lDKSA/IGNiLT54Ym9mcyA6IDEwOworfQorCisvKgorICogRnVuY3Rpb24gaXJkYV9nZXRfbmV4dF94Ym9mcyAoc2tiKQorICoKKyAqICAgIEV4dHJhY3QgdGhlIHhib2ZzIHRoYXQgc2hvdWxkIGJlIHNldCAqYWZ0ZXIqIHRoaXMgZnJhbWUgZnJvbSB0aGUgc2tiCisgKgorICogTm90ZSA6IHJldHVybiAtMSBmb3IgdXNlciBzcGFjZSBmcmFtZXMKKyAqLworc3RhdGljIGlubGluZSBfX3UxNiBpcmRhX2dldF9uZXh0X3hib2ZzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCit7CisJY29uc3Qgc3RydWN0IGlyZGFfc2tiX2NiICpjYiA9IChjb25zdCBzdHJ1Y3QgaXJkYV9za2JfY2IgKikgc2tiLT5jYjsKKwlyZXR1cm4gKGNiLT5tYWdpYyA9PSBMQVBfTUFHSUMpID8gY2ItPm5leHRfeGJvZnMgOiAtMTsKK30KKyNlbmRpZiAvKiBJUkRBX0RFVklDRV9IICovCisKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXJkYS9pcmlhcC5oIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmlhcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwMDdjNWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9pcmRhL2lyaWFwLmgKQEAgLTAsMCArMSwxMDggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgIAorICogRmlsZW5hbWU6ICAgICAgaXJpYXAuaAorICogVmVyc2lvbjogICAgICAgMC41CisgKiBEZXNjcmlwdGlvbjogICBJbmZvcm1hdGlvbiBBY2Nlc3MgUHJvdG9jb2wgKElBUCkKKyAqIFN0YXR1czogICAgICAgIEV4cGVyaW1lbnRhbC4KKyAqIEF1dGhvcjogICAgICAgIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4KKyAqIENyZWF0ZWQgYXQ6ICAgIFRodSBBdWcgMjEgMDA6MDI6MDcgMTk5NworICogTW9kaWZpZWQgYXQ6ICAgU2F0IERlYyAyNSAxNjo0MjowOSAxOTk5CisgKiBNb2RpZmllZCBieTogICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+CisgKiAKKyAqICAgICBDb3B5cmlnaHQgKGMpIDE5OTctMTk5OSBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+LCAKKyAqICAgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogICAgIAorICogICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgCisgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgCisgKiAgICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICAgIE5laXRoZXIgRGFnIEJyYXR0bGkgbm9yIFVuaXZlcnNpdHkgb2YgVHJvbXP4IGFkbWl0IGxpYWJpbGl0eSBub3IKKyAqICAgICBwcm92aWRlIHdhcnJhbnR5IGZvciBhbnkgb2YgdGhpcyBzb2Z0d2FyZS4gVGhpcyBtYXRlcmlhbCBpcyAKKyAqICAgICBwcm92aWRlZCAiQVMtSVMiIGFuZCBhdCBubyBjaGFyZ2UuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIElSSUFQX0gKKyNkZWZpbmUgSVJJQVBfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKworI2luY2x1ZGUgPG5ldC9pcmRhL2lyaWFwX2V2ZW50Lmg+CisjaW5jbHVkZSA8bmV0L2lyZGEvaXJpYXNfb2JqZWN0Lmg+CisjaW5jbHVkZSA8bmV0L2lyZGEvaXJxdWV1ZS5oPgkJLyogaXJkYV9xdWV1ZV90ICovCisjaW5jbHVkZSA8bmV0L2lyZGEvdGltZXIuaD4JCS8qIHN0cnVjdCB0aW1lcl9saXN0ICovCisKKyNkZWZpbmUgSUFQX0xTVCAweDgwCisjZGVmaW5lIElBUF9BQ0sgMHg0MAorCisjZGVmaW5lIElBU19TRVJWRVIgMAorI2RlZmluZSBJQVNfQ0xJRU5UIDEKKworLyogSXJJQVAgT3AtY29kZXMgKi8KKyNkZWZpbmUgR0VUX0lORk9fQkFTRSAgICAgIDB4MDEKKyNkZWZpbmUgR0VUX09CSkVDVFMgICAgICAgIDB4MDIKKyNkZWZpbmUgR0VUX1ZBTFVFICAgICAgICAgIDB4MDMKKyNkZWZpbmUgR0VUX1ZBTFVFX0JZX0NMQVNTIDB4MDQKKyNkZWZpbmUgR0VUX09CSkVDVF9JTkZPICAgIDB4MDUKKyNkZWZpbmUgR0VUX0FUVFJJQl9OQU1FUyAgIDB4MDYKKworI2RlZmluZSBJQVNfU1VDQ0VTUyAgICAgICAgMAorI2RlZmluZSBJQVNfQ0xBU1NfVU5LTk9XTiAgMQorI2RlZmluZSBJQVNfQVRUUklCX1VOS05PV04gMgorI2RlZmluZSBJQVNfRElTQ09OTkVDVCAgICAgMTAKKwordHlwZWRlZiB2b2lkICgqQ09ORklSTV9DQUxMQkFDSykoaW50IHJlc3VsdCwgX191MTYgb2JqX2lkLCAKKwkJCQkgc3RydWN0IGlhc192YWx1ZSAqdmFsdWUsIHZvaWQgKnByaXYpOworCitzdHJ1Y3QgaXJpYXBfY2IgeworCWlyZGFfcXVldWVfdCBxOyAvKiBNdXN0IGJlIGZpcnN0ICovCQorCW1hZ2ljX3QgbWFnaWM7ICAvKiBNYWdpYyBjb29raWUgKi8KKworCWludCAgICAgICAgICBtb2RlOyAgIC8qIENsaWVudCBvciBzZXJ2ZXIgKi8KKworCV9fdTMyICAgICAgICBzYWRkcjsKKwlfX3UzMiAgICAgICAgZGFkZHI7CisJX191OCAgICAgICAgIG9wZXJhdGlvbjsKKworCXN0cnVjdCBza19idWZmICpyZXF1ZXN0X3NrYjsKKwlzdHJ1Y3QgbHNhcF9jYiAqbHNhcDsKKwlfX3U4IHNsc2FwX3NlbDsKKworCS8qIENsaWVudCBzdGF0ZXMgKi8KKwlJUklBUF9TVEFURSBjbGllbnRfc3RhdGU7CisJSVJJQVBfU1RBVEUgY2FsbF9zdGF0ZTsKKwkKKwkvKiBTZXJ2ZXIgc3RhdGVzICovCisJSVJJQVBfU1RBVEUgc2VydmVyX3N0YXRlOworCUlSSUFQX1NUQVRFIHJfY29ubmVjdF9zdGF0ZTsKKwkKKwlDT05GSVJNX0NBTExCQUNLIGNvbmZpcm07CisJdm9pZCAqcHJpdjsgICAgICAgICAgICAgICAgLyogVXNlZCB0byBpZGVudGlmeSBjbGllbnQgKi8KKworCV9fdTggbWF4X2hlYWRlcl9zaXplOworCV9fdTMyIG1heF9kYXRhX3NpemU7CisJCisJc3RydWN0IHRpbWVyX2xpc3Qgd2F0Y2hkb2dfdGltZXI7Cit9OworCitpbnQgIGlyaWFwX2luaXQodm9pZCk7Cit2b2lkIGlyaWFwX2NsZWFudXAodm9pZCk7CisKK3N0cnVjdCBpcmlhcF9jYiAqaXJpYXBfb3BlbihfX3U4IHNsc2FwX3NlbCwgaW50IG1vZGUsIHZvaWQgKnByaXYsIAorCQkJICAgIENPTkZJUk1fQ0FMTEJBQ0sgY2FsbGJhY2spOwordm9pZCBpcmlhcF9jbG9zZShzdHJ1Y3QgaXJpYXBfY2IgKnNlbGYpOworCitpbnQgaXJpYXBfZ2V0dmFsdWVieWNsYXNzX3JlcXVlc3Qoc3RydWN0IGlyaWFwX2NiICpzZWxmLCAKKwkJCQkgIF9fdTMyIHNhZGRyLCBfX3UzMiBkYWRkciwKKwkJCQkgIGNoYXIgKm5hbWUsIGNoYXIgKmF0dHIpOwordm9pZCBpcmlhcF9jb25uZWN0X3JlcXVlc3Qoc3RydWN0IGlyaWFwX2NiICpzZWxmKTsKK3ZvaWQgaXJpYXBfc2VuZF9hY2soIHN0cnVjdCBpcmlhcF9jYiAqc2VsZik7Cit2b2lkIGlyaWFwX2NhbGxfaW5kaWNhdGlvbihzdHJ1Y3QgaXJpYXBfY2IgKnNlbGYsIHN0cnVjdCBza19idWZmICpza2IpOworCit2b2lkIGlyaWFwX3JlZ2lzdGVyX3NlcnZlcih2b2lkKTsKKworI2VuZGlmCisKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXJkYS9pcmlhcF9ldmVudC5oIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmlhcF9ldmVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjYTNkMjAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9pcmRhL2lyaWFwX2V2ZW50LmgKQEAgLTAsMCArMSw4NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgCisgKiBGaWxlbmFtZTogICAgICBpcmlhcF9ldmVudC5oCisgKiBWZXJzaW9uOiAgICAgICAKKyAqIERlc2NyaXB0aW9uOiAgIAorICogU3RhdHVzOiAgICAgICAgRXhwZXJpbWVudGFsLgorICogQXV0aG9yOiAgICAgICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgorICogQ3JlYXRlZCBhdDogICAgTW9uIEF1ZyAgNCAyMDo0MDo1MyAxOTk3CisgKiBNb2RpZmllZCBhdDogICBTdW4gT2N0IDMxIDIyOjAyOjU0IDE5OTkKKyAqIE1vZGlmaWVkIGJ5OiAgIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4KKyAqIAorICogICAgIENvcHlyaWdodCAoYykgMTk5OC0xOTk5IERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4sIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgICAgCisgKiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAKKyAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyAKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiAKKyAqICAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgICAgTmVpdGhlciBEYWcgQnJhdHRsaSBub3IgVW5pdmVyc2l0eSBvZiBUcm9tc/ggYWRtaXQgbGlhYmlsaXR5IG5vcgorICogICAgIHByb3ZpZGUgd2FycmFudHkgZm9yIGFueSBvZiB0aGlzIHNvZnR3YXJlLiBUaGlzIG1hdGVyaWFsIGlzIAorICogICAgIHByb3ZpZGVkICJBUy1JUyIgYW5kIGF0IG5vIGNoYXJnZS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgSVJJQVBfRlNNX0gKKyNkZWZpbmUgSVJJQVBfRlNNX0gKKworLyogRm9yd2FyZCBiZWNhdXNlIG9mIGNpcmN1bGFyIGluY2x1ZGUgZGVwZW5kZWNpZXMgKi8KK3N0cnVjdCBpcmlhcF9jYjsKKworLyogSXJJQVAgc3RhdGVzICovCit0eXBlZGVmIGVudW0geworCS8qIENsaWVudCAqLworCVNfRElTQ09OTkVDVCwKKwlTX0NPTk5FQ1RJTkcsCisJU19DQUxMLAorCisJLyogUy1DYWxsICovCisJU19NQUtFX0NBTEwsCisJU19DQUxMSU5HLAorCVNfT1VUU1RBTkRJTkcsCisJU19SRVBMWUlORywKKwlTX1dBSVRfRk9SX0NBTEwsCisJU19XQUlUX0FDVElWRSwKKworCS8qIFNlcnZlciAqLworCVJfRElTQ09OTkVDVCwKKwlSX0NBTEwsCisJCisJLyogUi1Db25uZWN0ICovCisJUl9XQUlUSU5HLAorCVJfV0FJVF9BQ1RJVkUsCisJUl9SRUNFSVZJTkcsCisJUl9FWEVDVVRFLAorCVJfUkVUVVJOSU5HLAorfSBJUklBUF9TVEFURTsKKwordHlwZWRlZiBlbnVtIHsKKwlJQVBfQ0FMTF9SRVFVRVNULAorCUlBUF9DQUxMX1JFUVVFU1RfR1ZCQywKKwlJQVBfQ0FMTF9SRVNQT05TRSwKKwlJQVBfUkVDVl9GX0xTVCwKKwlJQVBfTE1fRElTQ09OTkVDVF9JTkRJQ0FUSU9OLAorCUlBUF9MTV9DT05ORUNUX0lORElDQVRJT04sCisJSUFQX0xNX0NPTk5FQ1RfQ09ORklSTSwKK30gSVJJQVBfRVZFTlQ7CisKK3ZvaWQgaXJpYXBfbmV4dF9jbGllbnRfc3RhdGUgICAoc3RydWN0IGlyaWFwX2NiICpzZWxmLCBJUklBUF9TVEFURSBzdGF0ZSk7Cit2b2lkIGlyaWFwX25leHRfY2FsbF9zdGF0ZSAgICAgKHN0cnVjdCBpcmlhcF9jYiAqc2VsZiwgSVJJQVBfU1RBVEUgc3RhdGUpOwordm9pZCBpcmlhcF9uZXh0X3NlcnZlcl9zdGF0ZSAgIChzdHJ1Y3QgaXJpYXBfY2IgKnNlbGYsIElSSUFQX1NUQVRFIHN0YXRlKTsKK3ZvaWQgaXJpYXBfbmV4dF9yX2Nvbm5lY3Rfc3RhdGUoc3RydWN0IGlyaWFwX2NiICpzZWxmLCBJUklBUF9TVEFURSBzdGF0ZSk7CisKKwordm9pZCBpcmlhcF9kb19jbGllbnRfZXZlbnQoc3RydWN0IGlyaWFwX2NiICpzZWxmLCBJUklBUF9FVkVOVCBldmVudCwgCisJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3ZvaWQgaXJpYXBfZG9fY2FsbF9ldmVudCAgKHN0cnVjdCBpcmlhcF9jYiAqc2VsZiwgSVJJQVBfRVZFTlQgZXZlbnQsIAorCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKK3ZvaWQgaXJpYXBfZG9fc2VydmVyX2V2ZW50ICAgKHN0cnVjdCBpcmlhcF9jYiAqc2VsZiwgSVJJQVBfRVZFTlQgZXZlbnQsIAorCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7Cit2b2lkIGlyaWFwX2RvX3JfY29ubmVjdF9ldmVudChzdHJ1Y3QgaXJpYXBfY2IgKnNlbGYsIElSSUFQX0VWRU5UIGV2ZW50LCAKKwkJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IpOworCisjZW5kaWYgLyogSVJJQVBfRlNNX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXJkYS9pcmlhc19vYmplY3QuaCBiL2luY2x1ZGUvbmV0L2lyZGEvaXJpYXNfb2JqZWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQxMTk2YgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L2lyZGEvaXJpYXNfb2JqZWN0LmgKQEAgLTAsMCArMSwxMDggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgIAorICogRmlsZW5hbWU6ICAgICAgaXJpYXNfb2JqZWN0LmgKKyAqIFZlcnNpb246ICAgICAgIAorICogRGVzY3JpcHRpb246ICAgCisgKiBTdGF0dXM6ICAgICAgICBFeHBlcmltZW50YWwuCisgKiBBdXRob3I6ICAgICAgICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+CisgKiBDcmVhdGVkIGF0OiAgICBUaHUgT2N0ICAxIDIyOjQ5OjUwIDE5OTgKKyAqIE1vZGlmaWVkIGF0OiAgIFdlZCBEZWMgMTUgMTE6MjA6NTcgMTk5OQorICogTW9kaWZpZWQgYnk6ICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgorICogCisgKiAgICAgQ29weXJpZ2h0IChjKSAxOTk4LTE5OTkgRGFnIEJyYXR0bGksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgICAgIAorICogICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgCisgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgCisgKiAgICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiAgCisgKiAgICAgTmVpdGhlciBEYWcgQnJhdHRsaSBub3IgVW5pdmVyc2l0eSBvZiBUcm9tc/ggYWRtaXQgbGlhYmlsaXR5IG5vcgorICogICAgIHByb3ZpZGUgd2FycmFudHkgZm9yIGFueSBvZiB0aGlzIHNvZnR3YXJlLiBUaGlzIG1hdGVyaWFsIGlzIAorICogICAgIHByb3ZpZGVkICJBUy1JUyIgYW5kIGF0IG5vIGNoYXJnZS4KKyAqICAgICAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBMTV9JQVNfT0JKRUNUX0gKKyNkZWZpbmUgTE1fSUFTX09CSkVDVF9ICisKKyNpbmNsdWRlIDxuZXQvaXJkYS9pcmRhLmg+CisjaW5jbHVkZSA8bmV0L2lyZGEvaXJxdWV1ZS5oPgorCisvKiBMTS1JQVMgQXR0cmlidXRlIHR5cGVzICovCisjZGVmaW5lIElBU19NSVNTSU5HIDAKKyNkZWZpbmUgSUFTX0lOVEVHRVIgMQorI2RlZmluZSBJQVNfT0NUX1NFUSAyCisjZGVmaW5lIElBU19TVFJJTkcgIDMKKworLyogT2JqZWN0IG93bmVyc2hpcCBvZiBhdHRyaWJ1dGVzICh1c2VyIG9yIGtlcm5lbCkgKi8KKyNkZWZpbmUgSUFTX0tFUk5FTF9BVFRSCTAKKyNkZWZpbmUgSUFTX1VTRVJfQVRUUgkxCisKKy8qCisgKiAgTE0tSUFTIE9iamVjdAorICovCitzdHJ1Y3QgaWFzX29iamVjdCB7CisJaXJkYV9xdWV1ZV90IHE7ICAgICAvKiBNdXN0IGJlIGZpcnN0ISAqLworCW1hZ2ljX3QgbWFnaWM7CisJCisJY2hhciAgKm5hbWU7CisJaW50ICAgaWQ7CisJaGFzaGJpbl90ICphdHRyaWJzOworfTsKKworLyoKKyAqICBWYWx1ZXMgdXNlZCBieSBMTS1JQVMgYXR0cmlidXRlcworICovCitzdHJ1Y3QgaWFzX3ZhbHVlIHsKKyAgICAgICAgX191OCAgICB0eXBlOyAgICAvKiBWYWx1ZSBkZXNjcmlwdGlvbiAqLworCV9fdTgJb3duZXI7CS8qIE1hbmFnZWQgZnJvbSB1c2VyL2tlcm5lbCBzcGFjZSAqLworCWludCAgICAgY2hhcnNldDsgLyogT25seSB1c2VkIGJ5IHN0cmluZyB0eXBlICovCisgICAgICAgIGludCAgICAgbGVuOworCQorCS8qIFZhbHVlICovCisJdW5pb24geworCQlpbnQgaW50ZWdlcjsKKwkJY2hhciAqc3RyaW5nOworCQlfX3U4ICpvY3Rfc2VxOworCX0gdDsKK307CisKKy8qCisgKiAgQXR0cmlidXRlcyB1c2VkIGJ5IExNLUlBUyBvYmplY3RzCisgKi8KK3N0cnVjdCBpYXNfYXR0cmliIHsKKwlpcmRhX3F1ZXVlX3QgcTsgLyogTXVzdCBiZSBmaXJzdCEgKi8KKwlpbnQgbWFnaWM7CisKKyAgICAgICAgY2hhciAqbmFtZTsgICAJICAgICAgICAgLyogQXR0cmlidXRlIG5hbWUgKi8KKwlzdHJ1Y3QgaWFzX3ZhbHVlICp2YWx1ZTsgLyogQXR0cmlidXRlIHZhbHVlICovCit9OworCitzdHJ1Y3QgaWFzX29iamVjdCAqaXJpYXNfbmV3X29iamVjdChjaGFyICpuYW1lLCBpbnQgaWQpOwordm9pZCBpcmlhc19pbnNlcnRfb2JqZWN0KHN0cnVjdCBpYXNfb2JqZWN0ICpvYmopOworaW50ICBpcmlhc19kZWxldGVfb2JqZWN0KHN0cnVjdCBpYXNfb2JqZWN0ICpvYmopOworaW50ICBpcmlhc19kZWxldGVfYXR0cmliKHN0cnVjdCBpYXNfb2JqZWN0ICpvYmosIHN0cnVjdCBpYXNfYXR0cmliICphdHRyaWIsCisJCQkgaW50IGNsZWFub2JqZWN0KTsKK3ZvaWQgX19pcmlhc19kZWxldGVfb2JqZWN0KHN0cnVjdCBpYXNfb2JqZWN0ICpvYmopOworCit2b2lkIGlyaWFzX2FkZF9pbnRlZ2VyX2F0dHJpYihzdHJ1Y3QgaWFzX29iamVjdCAqb2JqLCBjaGFyICpuYW1lLCBpbnQgdmFsdWUsCisJCQkgICAgICBpbnQgdXNlcik7Cit2b2lkIGlyaWFzX2FkZF9zdHJpbmdfYXR0cmliKHN0cnVjdCBpYXNfb2JqZWN0ICpvYmosIGNoYXIgKm5hbWUsIGNoYXIgKnZhbHVlLAorCQkJICAgICBpbnQgdXNlcik7Cit2b2lkIGlyaWFzX2FkZF9vY3RzZXFfYXR0cmliKHN0cnVjdCBpYXNfb2JqZWN0ICpvYmosIGNoYXIgKm5hbWUsIF9fdTggKm9jdGV0cywKKwkJCSAgICAgaW50IGxlbiwgaW50IHVzZXIpOworaW50IGlyaWFzX29iamVjdF9jaGFuZ2VfYXR0cmlidXRlKGNoYXIgKm9ial9uYW1lLCBjaGFyICphdHRyaWJfbmFtZSwgCisJCQkJICBzdHJ1Y3QgaWFzX3ZhbHVlICpuZXdfdmFsdWUpOworc3RydWN0IGlhc19vYmplY3QgKmlyaWFzX2ZpbmRfb2JqZWN0KGNoYXIgKm5hbWUpOworc3RydWN0IGlhc19hdHRyaWIgKmlyaWFzX2ZpbmRfYXR0cmliKHN0cnVjdCBpYXNfb2JqZWN0ICpvYmosIGNoYXIgKm5hbWUpOworCitzdHJ1Y3QgaWFzX3ZhbHVlICppcmlhc19uZXdfc3RyaW5nX3ZhbHVlKGNoYXIgKnN0cmluZyk7CitzdHJ1Y3QgaWFzX3ZhbHVlICppcmlhc19uZXdfaW50ZWdlcl92YWx1ZShpbnQgaW50ZWdlcik7CitzdHJ1Y3QgaWFzX3ZhbHVlICppcmlhc19uZXdfb2N0c2VxX3ZhbHVlKF9fdTggKm9jdHNlcSAsIGludCBsZW4pOworc3RydWN0IGlhc192YWx1ZSAqaXJpYXNfbmV3X21pc3NpbmdfdmFsdWUodm9pZCk7Cit2b2lkIGlyaWFzX2RlbGV0ZV92YWx1ZShzdHJ1Y3QgaWFzX3ZhbHVlICp2YWx1ZSk7CisKK2V4dGVybiBzdHJ1Y3QgaWFzX3ZhbHVlIGlyaWFzX21pc3Npbmc7CitleHRlcm4gaGFzaGJpbl90ICppcmlhc19vYmplY3RzOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lyZGEvaXJsYW5fY2xpZW50LmggYi9pbmNsdWRlL25ldC9pcmRhL2lybGFuX2NsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczNmRhYmUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9pcmRhL2lybGFuX2NsaWVudC5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgIAorICogRmlsZW5hbWU6ICAgICAgaXJsYW5fY2xpZW50LmgKKyAqIFZlcnNpb246ICAgICAgIDAuMworICogRGVzY3JpcHRpb246ICAgSXJEQSBMQU4gYWNjZXNzIGxheWVyCisgKiBTdGF0dXM6ICAgICAgICBFeHBlcmltZW50YWwuCisgKiBBdXRob3I6ICAgICAgICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+CisgKiBDcmVhdGVkIGF0OiAgICBTdW4gQXVnIDMxIDIwOjE0OjM3IDE5OTcKKyAqIE1vZGlmaWVkIGF0OiAgIFRodSBBcHIgMjIgMTQ6MTM6MzQgMTk5OQorICogTW9kaWZpZWQgYnk6ICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgorICogCisgKiAgICAgQ29weXJpZ2h0IChjKSAxOTk4IERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4sIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgICAgCisgKiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAKKyAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyAKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiAKKyAqICAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgICAgTmVpdGhlciBEYWcgQnJhdHRsaSBub3IgVW5pdmVyc2l0eSBvZiBUcm9tc/ggYWRtaXQgbGlhYmlsaXR5IG5vcgorICogICAgIHByb3ZpZGUgd2FycmFudHkgZm9yIGFueSBvZiB0aGlzIHNvZnR3YXJlLiBUaGlzIG1hdGVyaWFsIGlzIAorICogICAgIHByb3ZpZGVkICJBUy1JUyIgYW5kIGF0IG5vIGNoYXJnZS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgSVJMQU5fQ0xJRU5UX0gKKyNkZWZpbmUgSVJMQU5fQ0xJRU5UX0gKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxuZXQvaXJkYS9pcmlhc19vYmplY3QuaD4KKyNpbmNsdWRlIDxuZXQvaXJkYS9pcmxhbl9ldmVudC5oPgorCit2b2lkIGlybGFuX2NsaWVudF9kaXNjb3ZlcnlfaW5kaWNhdGlvbihkaXNjaW5mb190ICosIERJU0NPVkVSWV9NT0RFLCB2b2lkICopOwordm9pZCBpcmxhbl9jbGllbnRfd2FrZXVwKHN0cnVjdCBpcmxhbl9jYiAqc2VsZiwgX191MzIgc2FkZHIsIF9fdTMyIGRhZGRyKTsKKwordm9pZCBpcmxhbl9jbGllbnRfcGFyc2VfcmVzcG9uc2Uoc3RydWN0IGlybGFuX2NiICpzZWxmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3ZvaWQgaXJsYW5fY2xpZW50X2dldF92YWx1ZV9jb25maXJtKGludCByZXN1bHQsIF9fdTE2IG9ial9pZCwgCisJCQkJICAgIHN0cnVjdCBpYXNfdmFsdWUgKnZhbHVlLCB2b2lkICpwcml2KTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXJkYS9pcmxhbl9jb21tb24uaCBiL2luY2x1ZGUvbmV0L2lyZGEvaXJsYW5fY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM3M2JkYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L2lyZGEvaXJsYW5fY29tbW9uLmgKQEAgLTAsMCArMSwyMjIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgIAorICogRmlsZW5hbWU6ICAgICAgaXJsYW5fY29tbW9uLmgKKyAqIFZlcnNpb246ICAgICAgIDAuOAorICogRGVzY3JpcHRpb246ICAgSXJEQSBMQU4gYWNjZXNzIGxheWVyCisgKiBTdGF0dXM6ICAgICAgICBFeHBlcmltZW50YWwuCisgKiBBdXRob3I6ICAgICAgICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+CisgKiBDcmVhdGVkIGF0OiAgICBTdW4gQXVnIDMxIDIwOjE0OjM3IDE5OTcKKyAqIE1vZGlmaWVkIGF0OiAgIFN1biBPY3QgMzEgMTk6NDE6MjQgMTk5OQorICogTW9kaWZpZWQgYnk6ICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgorICogCisgKiAgICAgQ29weXJpZ2h0IChjKSAxOTk4LTE5OTkgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPiwgCisgKiAgICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqICAgICAKKyAqICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIAorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIAorICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIAorICogICAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgICBOZWl0aGVyIERhZyBCcmF0dGxpIG5vciBVbml2ZXJzaXR5IG9mIFRyb21z+CBhZG1pdCBsaWFiaWxpdHkgbm9yCisgKiAgICAgcHJvdmlkZSB3YXJyYW50eSBmb3IgYW55IG9mIHRoaXMgc29mdHdhcmUuIFRoaXMgbWF0ZXJpYWwgaXMgCisgKiAgICAgcHJvdmlkZWQgIkFTLUlTIiBhbmQgYXQgbm8gY2hhcmdlLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBJUkxBTl9ICisjZGVmaW5lIElSTEFOX0gKKworI2luY2x1ZGUgPGFzbS9wYXJhbS5oPiAgLyogZm9yIEhaICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorCisjaW5jbHVkZSA8bmV0L2lyZGEvaXJ0dHAuaD4KKworI2RlZmluZSBJUkxBTl9NVFUgICAgICAgIDE1MTgKKyNkZWZpbmUgSVJMQU5fVElNRU9VVCAgICAxMCpIWiAvKiAxMCBzZWNvbmRzICovCisKKy8qIENvbW1hbmQgcGFja2V0IHR5cGVzICovCisjZGVmaW5lIENNRF9HRVRfUFJPVklERVJfSU5GTyAgIDAKKyNkZWZpbmUgQ01EX0dFVF9NRURJQV9DSEFSICAgICAgMQorI2RlZmluZSBDTURfT1BFTl9EQVRBX0NIQU5ORUwgICAyCisjZGVmaW5lIENNRF9DTE9TRV9EQVRBX0NIQU4gICAgIDMKKyNkZWZpbmUgQ01EX1JFQ09OTkVDVF9EQVRBX0NIQU4gNAorI2RlZmluZSBDTURfRklMVEVSX09QRVJBVElPTiAgICA1CisKKy8qIFNvbWUgcmVzcG9uc2VzICovCisjZGVmaW5lIFJTUF9TVUNDRVNTICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFJTUF9JTlNVRkZJQ0lFTlRfUkVTT1VSQ0VTICAxCisjZGVmaW5lIFJTUF9JTlZBTElEX0NPTU1BTkRfRk9STUFUICAyCisjZGVmaW5lIFJTUF9DT01NQU5EX05PVF9TVVBQT1JURUQgICAzCisjZGVmaW5lIFJTUF9QQVJBTV9OT1RfU1VQUE9SVEVEICAgICA0CisjZGVmaW5lIFJTUF9WQUxVRV9OT1RfU1VQUE9SVEVEICAgICA1CisjZGVmaW5lIFJTUF9OT1RfT1BFTiAgICAgICAgICAgICAgICA2CisjZGVmaW5lIFJTUF9BVVRIRU5USUNBVElPTl9SRVFVSVJFRCA3CisjZGVmaW5lIFJTUF9JTlZBTElEX1BBU1NXT1JEICAgICAgICA4CisjZGVmaW5lIFJTUF9QUk9UT0NPTF9FUlJPUiAgICAgICAgICA5CisjZGVmaW5lIFJTUF9BU1lOQ0hST05PVVNfRVJST1IgICAgMjU1CisKKy8qIE1lZGlhIHR5cGVzICovCisjZGVmaW5lIE1FRElBXzgwMl8zIDEKKyNkZWZpbmUgTUVESUFfODAyXzUgMgorCisvKiBGaWx0ZXIgcGFyYW1ldGVycyAqLworI2RlZmluZSBEQVRBX0NIQU4gICAxCisjZGVmaW5lIEZJTFRFUl9UWVBFIDIKKyNkZWZpbmUgRklMVEVSX01PREUgMworCisvKiBGaWx0ZXIgdHlwZXMgKi8KKyNkZWZpbmUgSVJMQU5fRElSRUNURUQgICAweDAxCisjZGVmaW5lIElSTEFOX0ZVTkNUSU9OQUwgMHgwMgorI2RlZmluZSBJUkxBTl9HUk9VUCAgICAgIDB4MDQKKyNkZWZpbmUgSVJMQU5fTUFDX0ZSQU1FICAweDA4CisjZGVmaW5lIElSTEFOX01VTFRJQ0FTVCAgMHgxMAorI2RlZmluZSBJUkxBTl9CUk9BRENBU1QgIDB4MjAKKyNkZWZpbmUgSVJMQU5fSVBYX1NPQ0tFVCAweDQwCisKKy8qIEZpbHRlciBtb2RlcyAqLworI2RlZmluZSBBTEwgICAgIDEKKyNkZWZpbmUgRklMVEVSICAyCisjZGVmaW5lIE5PTkUgICAgMworCisvKiBGaWx0ZXIgb3BlcmF0aW9ucyAqLworI2RlZmluZSBHRVQgICAgIDEKKyNkZWZpbmUgQ0xFQVIgICAyCisjZGVmaW5lIEFERCAgICAgMworI2RlZmluZSBSRU1PVkUgIDQKKyNkZWZpbmUgRFlOQU1JQyA1CisKKy8qIEFjY2VzcyB0eXBlcyAqLworI2RlZmluZSBBQ0NFU1NfRElSRUNUICAxCisjZGVmaW5lIEFDQ0VTU19QRUVSICAgIDIKKyNkZWZpbmUgQUNDRVNTX0hPU1RFRCAgMworCisjZGVmaW5lIElSTEFOX0JZVEUgICAwCisjZGVmaW5lIElSTEFOX1NIT1JUICAxCisjZGVmaW5lIElSTEFOX0FSUkFZICAyCisKKyNkZWZpbmUgSVJMQU5fTUFYX0hFQURFUiAoVFRQX0hFQURFUitMTVBfSEVBREVSK0xBUF9NQVhfSEVBREVSKQorCisvKgorICogIElyTEFOIGNsaWVudAorICovCitzdHJ1Y3QgaXJsYW5fY2xpZW50X2NiIHsKKwlpbnQgc3RhdGU7CisKKwlpbnQgb3Blbl9yZXRyaWVzOworCisJc3RydWN0IHRzYXBfY2IgKnRzYXBfY3RybDsKKwlfX3UzMiBtYXhfc2R1X3NpemU7CisJX191OCAgbWF4X2hlYWRlcl9zaXplOworCQorCWludCBhY2Nlc3NfdHlwZTsgICAgICAgICAvKiBBY2Nlc3MgdHlwZSBvZiBwcm92aWRlciAqLworCV9fdTggcmVjb25uZWN0X2tleVsyNTVdOworCV9fdTgga2V5X2xlbjsKKwkKKwlfX3UxNiByZWN2X2FyYl92YWw7CisJX191MTYgbWF4X2ZyYW1lOworCWludCBmaWx0ZXJfdHlwZTsKKworCWludCB1bmljYXN0X29wZW47CisJaW50IGJyb2FkY2FzdF9vcGVuOworCisJaW50IHR4X2J1c3k7CisJc3RydWN0IHNrX2J1ZmZfaGVhZCB0eHE7IC8qIFRyYW5zbWl0IGNvbnRyb2wgcXVldWUgKi8KKworCXN0cnVjdCBpcmlhcF9jYiAqaXJpYXA7CisKKwlzdHJ1Y3QgdGltZXJfbGlzdCBraWNrX3RpbWVyOworfTsKKworLyoKKyAqIElyTEFOIHByb3ZpZGVyCisgKi8KK3N0cnVjdCBpcmxhbl9wcm92aWRlcl9jYiB7CisJaW50IHN0YXRlOworCQorCXN0cnVjdCB0c2FwX2NiICp0c2FwX2N0cmw7CisJX191MzIgbWF4X3NkdV9zaXplOworCV9fdTggIG1heF9oZWFkZXJfc2l6ZTsKKworCS8qCisJICogIFN0b3JlIHNvbWUgdmFsdWVzIGhlcmUgd2hpY2ggYXJlIHVzZWQgYnkgdGhlIHByb3ZpZGVyIHRvIHBhcnNlCisJICogIHRoZSBmaWx0ZXIgb3BlcmF0aW9ucworCSAqLworCWludCBkYXRhX2NoYW47CisJaW50IGZpbHRlcl90eXBlOworCWludCBmaWx0ZXJfbW9kZTsKKwlpbnQgZmlsdGVyX29wZXJhdGlvbjsKKwlpbnQgZmlsdGVyX2VudHJ5OworCWludCBhY2Nlc3NfdHlwZTsgICAgIC8qIEFjY2VzcyB0eXBlICovCisJX191MTYgc2VuZF9hcmJfdmFsOworCisJX191OCBtYWNfYWRkcmVzc1s2XTsgLyogR2VuZXJhdGVkIE1BQyBhZGRyZXNzIGZvciBwZWVyIGRldmljZSAqLworfTsKKworLyoKKyAqICBJckxBTiBjb250cm9sIGJsb2NrCisgKi8KK3N0cnVjdCBpcmxhbl9jYiB7CisJaW50ICAgIG1hZ2ljOworCXN0cnVjdCBsaXN0X2hlYWQgIGRldl9saXN0OworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7ICAgICAgICAvKiBFdGhlcm5ldCBkZXZpY2Ugc3RydWN0dXJlKi8KKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKKworCV9fdTMyIHNhZGRyOyAgICAgICAgICAgICAgIC8qIFNvdXJjZSBkZXZpY2UgYWRkcmVzcyAqLworCV9fdTMyIGRhZGRyOyAgICAgICAgICAgICAgIC8qIERlc3RpbmF0aW9uIGRldmljZSBhZGRyZXNzICovCisJaW50IGRpc2Nvbm5lY3RfcmVhc29uOyAgICAgLyogV2h5IHdlIGdvdCBkaXNjb25uZWN0ZWQgKi8KKwkKKwlpbnQgbWVkaWE7ICAgICAgICAgICAgICAgICAvKiBNZWRpYSB0eXBlICovCisJX191OCB2ZXJzaW9uWzJdOyAgICAgICAgICAgLyogSXJMQU4gdmVyc2lvbiAqLworCQorCXN0cnVjdCB0c2FwX2NiICp0c2FwX2RhdGE7IC8qIERhdGEgVFNBUCAqLworCisJaW50ICB1c2VfdWRhdGE7ICAgICAgICAgICAgLyogVXNlIFVuaXQgRGF0YSB0cmFuc2ZlcnMgKi8KKworCV9fdTggc3RzYXBfc2VsX2RhdGE7ICAgICAgIC8qIFNvdXJjZSBkYXRhIFRTQVAgc2VsZWN0b3IgKi8KKwlfX3U4IGR0c2FwX3NlbF9kYXRhOyAgICAgICAvKiBEZXN0aW5hdGlvbiBkYXRhIFRTQVAgc2VsZWN0b3IgKi8KKwlfX3U4IGR0c2FwX3NlbF9jdHJsOyAgICAgICAvKiBEZXN0aW5hdGlvbiBjdHJsIFRTQVAgc2VsZWN0b3IgKi8KKworCXN0cnVjdCBpcmxhbl9jbGllbnRfY2IgICBjbGllbnQ7ICAgLyogQ2xpZW50IHNwZWNpZmljIGZpZWxkcyAqLworCXN0cnVjdCBpcmxhbl9wcm92aWRlcl9jYiBwcm92aWRlcjsgLyogUHJvdmlkZXIgc3BlY2lmaWMgZmllbGRzICovCisKKwlfX3UzMiBtYXhfc2R1X3NpemU7CisJX191OCAgbWF4X2hlYWRlcl9zaXplOworCQorCXdhaXRfcXVldWVfaGVhZF90IG9wZW5fd2FpdDsKKwlzdHJ1Y3QgdGltZXJfbGlzdCB3YXRjaGRvZ190aW1lcjsKK307CisKK3ZvaWQgaXJsYW5fY2xvc2Uoc3RydWN0IGlybGFuX2NiICpzZWxmKTsKK3ZvaWQgaXJsYW5fY2xvc2VfdHNhcHMoc3RydWN0IGlybGFuX2NiICpzZWxmKTsKKworaW50ICBpcmxhbl9yZWdpc3Rlcl9uZXRkZXYoc3RydWN0IGlybGFuX2NiICpzZWxmKTsKK3ZvaWQgaXJsYW5faWFzX3JlZ2lzdGVyKHN0cnVjdCBpcmxhbl9jYiAqc2VsZiwgX191OCB0c2FwX3NlbCk7Cit2b2lkIGlybGFuX3N0YXJ0X3dhdGNoZG9nX3RpbWVyKHN0cnVjdCBpcmxhbl9jYiAqc2VsZiwgaW50IHRpbWVvdXQpOworCit2b2lkIGlybGFuX29wZW5fZGF0YV90c2FwKHN0cnVjdCBpcmxhbl9jYiAqc2VsZik7CisKK2ludCBpcmxhbl9ydW5fY3RybF90eF9xdWV1ZShzdHJ1Y3QgaXJsYW5fY2IgKnNlbGYpOworCitzdHJ1Y3QgaXJsYW5fY2IgKmlybGFuX2dldF9hbnkodm9pZCk7Cit2b2lkIGlybGFuX2dldF9wcm92aWRlcl9pbmZvKHN0cnVjdCBpcmxhbl9jYiAqc2VsZik7Cit2b2lkIGlybGFuX2dldF9tZWRpYV9jaGFyKHN0cnVjdCBpcmxhbl9jYiAqc2VsZik7Cit2b2lkIGlybGFuX29wZW5fZGF0YV9jaGFubmVsKHN0cnVjdCBpcmxhbl9jYiAqc2VsZik7Cit2b2lkIGlybGFuX2Nsb3NlX2RhdGFfY2hhbm5lbChzdHJ1Y3QgaXJsYW5fY2IgKnNlbGYpOwordm9pZCBpcmxhbl9zZXRfbXVsdGljYXN0X2ZpbHRlcihzdHJ1Y3QgaXJsYW5fY2IgKnNlbGYsIGludCBzdGF0dXMpOwordm9pZCBpcmxhbl9zZXRfYnJvYWRjYXN0X2ZpbHRlcihzdHJ1Y3QgaXJsYW5fY2IgKnNlbGYsIGludCBzdGF0dXMpOworCitpbnQgaXJsYW5faW5zZXJ0X2J5dGVfcGFyYW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY2hhciAqcGFyYW0sIF9fdTggdmFsdWUpOworaW50IGlybGFuX2luc2VydF9zaG9ydF9wYXJhbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjaGFyICpwYXJhbSwgX191MTYgdmFsdWUpOworaW50IGlybGFuX2luc2VydF9zdHJpbmdfcGFyYW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY2hhciAqcGFyYW0sIGNoYXIgKnZhbHVlKTsKK2ludCBpcmxhbl9pbnNlcnRfYXJyYXlfcGFyYW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY2hhciAqbmFtZSwgX191OCAqdmFsdWUsIAorCQkJICAgICBfX3UxNiB2YWx1ZV9sZW4pOworCitpbnQgaXJsYW5fZXh0cmFjdF9wYXJhbShfX3U4ICpidWYsIGNoYXIgKm5hbWUsIGNoYXIgKnZhbHVlLCBfX3UxNiAqbGVuKTsKKworI2VuZGlmCisKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXJkYS9pcmxhbl9ldGguaCBiL2luY2x1ZGUvbmV0L2lyZGEvaXJsYW5fZXRoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE5YjM2MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L2lyZGEvaXJsYW5fZXRoLmgKQEAgLTAsMCArMSwzMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgCisgKiBGaWxlbmFtZTogICAgICBpcmxhbl9ldGguaAorICogVmVyc2lvbjogICAgICAgCisgKiBEZXNjcmlwdGlvbjogICAKKyAqIFN0YXR1czogICAgICAgIEV4cGVyaW1lbnRhbC4KKyAqIEF1dGhvcjogICAgICAgIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4KKyAqIENyZWF0ZWQgYXQ6ICAgIFRodSBPY3QgMTUgMDg6MzY6NTggMTk5OAorICogTW9kaWZpZWQgYXQ6ICAgRnJpIE1heSAxNCAyMzoyOTowMCAxOTk5CisgKiBNb2RpZmllZCBieTogICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+CisgKiAKKyAqICAgICBDb3B5cmlnaHQgKGMpIDE5OTgtMTk5OSBEYWcgQnJhdHRsaSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqICAgICAgCisgKiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAKKyAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyAKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiAKKyAqICAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqICAKKyAqICAgICBOZWl0aGVyIERhZyBCcmF0dGxpIG5vciBVbml2ZXJzaXR5IG9mIFRyb21z+CBhZG1pdCBsaWFiaWxpdHkgbm9yCisgKiAgICAgcHJvdmlkZSB3YXJyYW50eSBmb3IgYW55IG9mIHRoaXMgc29mdHdhcmUuIFRoaXMgbWF0ZXJpYWwgaXMgCisgKiAgICAgcHJvdmlkZWQgIkFTLUlTIiBhbmQgYXQgbm8gY2hhcmdlLgorICogICAgIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIElSTEFOX0VUSF9ICisjZGVmaW5lIElSTEFOX0VUSF9ICisKK3N0cnVjdCBuZXRfZGV2aWNlICphbGxvY19pcmxhbmRldihjb25zdCBjaGFyICpuYW1lKTsKK2ludCAgaXJsYW5fZXRoX3JlY2VpdmUodm9pZCAqaW5zdGFuY2UsIHZvaWQgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKK3ZvaWQgaXJsYW5fZXRoX2Zsb3dfaW5kaWNhdGlvbiggdm9pZCAqaW5zdGFuY2UsIHZvaWQgKnNhcCwgTE9DQUxfRkxPVyBmbG93KTsKK3ZvaWQgaXJsYW5fZXRoX3NlbmRfZ3JhdHVpdG91c19hcnAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lyZGEvaXJsYW5fZXZlbnQuaCBiL2luY2x1ZGUvbmV0L2lyZGEvaXJsYW5fZXZlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWJhYWM5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmxhbl9ldmVudC5oCkBAIC0wLDAgKzEsODEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgIAorICogRmlsZW5hbWU6ICAgICAgaXJsYW5fZXZlbnQuaAorICogVmVyc2lvbjogICAgICAgCisgKiBEZXNjcmlwdGlvbjogICBMQU4gYWNjZXNzCisgKiBTdGF0dXM6ICAgICAgICBFeHBlcmltZW50YWwuCisgKiBBdXRob3I6ICAgICAgICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+CisgKiBDcmVhdGVkIGF0OiAgICBTdW4gQXVnIDMxIDIwOjE0OjM3IDE5OTcKKyAqIE1vZGlmaWVkIGF0OiAgIFR1ZSBGZWIgIDIgMDk6NDU6MTcgMTk5OQorICogTW9kaWZpZWQgYnk6ICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgorICogCisgKiAgICAgQ29weXJpZ2h0IChjKSAxOTk3IERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4sIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgICAgCisgKiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAKKyAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyAKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiAKKyAqICAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgICAgTmVpdGhlciBEYWcgQnJhdHRsaSBub3IgVW5pdmVyc2l0eSBvZiBUcm9tc/ggYWRtaXQgbGlhYmlsaXR5IG5vcgorICogICAgIHByb3ZpZGUgd2FycmFudHkgZm9yIGFueSBvZiB0aGlzIHNvZnR3YXJlLiBUaGlzIG1hdGVyaWFsIGlzIAorICogICAgIHByb3ZpZGVkICJBUy1JUyIgYW5kIGF0IG5vIGNoYXJnZS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgSVJMQU5fRVZFTlRfSAorI2RlZmluZSBJUkxBTl9FVkVOVF9ICisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKworI2luY2x1ZGUgPG5ldC9pcmRhL2lybGFuX2NvbW1vbi5oPgorCit0eXBlZGVmIGVudW0geworCUlSTEFOX0lETEUsCisJSVJMQU5fUVVFUlksCisJSVJMQU5fQ09OTiwgCisJSVJMQU5fSU5GTywKKwlJUkxBTl9NRURJQSwKKwlJUkxBTl9PUEVOLAorCUlSTEFOX1dBSVQsCisJSVJMQU5fQVJCLCAKKwlJUkxBTl9EQVRBLAorCUlSTEFOX0NMT1NFLAorCUlSTEFOX1NZTkMKK30gSVJMQU5fU1RBVEU7CisKK3R5cGVkZWYgZW51bSB7CisJSVJMQU5fRElTQ09WRVJZX0lORElDQVRJT04sCisJSVJMQU5fSUFTX1BST1ZJREVSX0FWQUlMLAorCUlSTEFOX0lBU19QUk9WSURFUl9OT1RfQVZBSUwsCisJSVJMQU5fTEFQX0RJU0NPTk5FQ1QsCisJSVJMQU5fTE1QX0RJU0NPTk5FQ1QsCisJSVJMQU5fQ09OTkVDVF9DT01QTEVURSwKKwlJUkxBTl9EQVRBX0lORElDQVRJT04sCisJSVJMQU5fREFUQV9DT05ORUNUX0lORElDQVRJT04sCisJSVJMQU5fUkVUUllfQ09OTkVDVCwKKworCUlSTEFOX0NPTk5FQ1RfSU5ESUNBVElPTiwKKwlJUkxBTl9HRVRfSU5GT19DTUQsCisJSVJMQU5fR0VUX01FRElBX0NNRCwKKwlJUkxBTl9PUEVOX0RBVEFfQ01ELAorCUlSTEFOX0ZJTFRFUl9DT05GSUdfQ01ELAorCisJSVJMQU5fQ0hFQ0tfQ09OX0FSQiwKKwlJUkxBTl9QUk9WSURFUl9TSUdOQUwsCisKKwlJUkxBTl9XQVRDSERPR19USU1FT1VULAorfSBJUkxBTl9FVkVOVDsKKworZXh0ZXJuIGNoYXIgKmlybGFuX3N0YXRlW107CisKK3ZvaWQgaXJsYW5fZG9fY2xpZW50X2V2ZW50KHN0cnVjdCBpcmxhbl9jYiAqc2VsZiwgSVJMQU5fRVZFTlQgZXZlbnQsIAorCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKK3ZvaWQgaXJsYW5fZG9fcHJvdmlkZXJfZXZlbnQoc3RydWN0IGlybGFuX2NiICpzZWxmLCBJUkxBTl9FVkVOVCBldmVudCwgCisJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IpOworCit2b2lkIGlybGFuX25leHRfY2xpZW50X3N0YXRlKHN0cnVjdCBpcmxhbl9jYiAqc2VsZiwgSVJMQU5fU1RBVEUgc3RhdGUpOwordm9pZCBpcmxhbl9uZXh0X3Byb3ZpZGVyX3N0YXRlKHN0cnVjdCBpcmxhbl9jYiAqc2VsZiwgSVJMQU5fU1RBVEUgc3RhdGUpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lyZGEvaXJsYW5fZmlsdGVyLmggYi9pbmNsdWRlL25ldC9pcmRhL2lybGFuX2ZpbHRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhZmViNmMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9pcmRhL2lybGFuX2ZpbHRlci5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgIAorICogRmlsZW5hbWU6ICAgICAgaXJsYW5fZmlsdGVyLmgKKyAqIFZlcnNpb246ICAgICAgIAorICogRGVzY3JpcHRpb246ICAgCisgKiBTdGF0dXM6ICAgICAgICBFeHBlcmltZW50YWwuCisgKiBBdXRob3I6ICAgICAgICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+CisgKiBDcmVhdGVkIGF0OiAgICBGcmkgSmFuIDI5IDE1OjI0OjA4IDE5OTkKKyAqIE1vZGlmaWVkIGF0OiAgIFN1biBGZWIgIDcgMjM6MzU6MzEgMTk5OQorICogTW9kaWZpZWQgYnk6ICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgorICogCisgKiAgICAgQ29weXJpZ2h0IChjKSAxOTk4IERhZyBCcmF0dGxpLCBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogICAgICAKKyAqICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIAorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIAorICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIAorICogICAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogIAorICogICAgIE5laXRoZXIgRGFnIEJyYXR0bGkgbm9yIFVuaXZlcnNpdHkgb2YgVHJvbXP4IGFkbWl0IGxpYWJpbGl0eSBub3IKKyAqICAgICBwcm92aWRlIHdhcnJhbnR5IGZvciBhbnkgb2YgdGhpcyBzb2Z0d2FyZS4gVGhpcyBtYXRlcmlhbCBpcyAKKyAqICAgICBwcm92aWRlZCAiQVMtSVMiIGFuZCBhdCBubyBjaGFyZ2UuCisgKiAgICAgCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgSVJMQU5fRklMVEVSX0gKKyNkZWZpbmUgSVJMQU5fRklMVEVSX0gKKwordm9pZCBpcmxhbl9jaGVja19jb21tYW5kX3BhcmFtKHN0cnVjdCBpcmxhbl9jYiAqc2VsZiwgY2hhciAqcGFyYW0sIAorCQkJICAgICAgIGNoYXIgKnZhbHVlKTsKK3ZvaWQgaXJsYW5fZmlsdGVyX3JlcXVlc3Qoc3RydWN0IGlybGFuX2NiICpzZWxmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2ludCBpcmxhbl9wcmludF9maWx0ZXIoc3RydWN0IHNlcV9maWxlICpzZXEsIGludCBmaWx0ZXJfdHlwZSk7CisKKyNlbmRpZiAvKiBJUkxBTl9GSUxURVJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXJkYS9pcmxhbl9wcm92aWRlci5oIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmxhbl9wcm92aWRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhNTFkNWIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9pcmRhL2lybGFuX3Byb3ZpZGVyLmgKQEAgLTAsMCArMSw1MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgCisgKiBGaWxlbmFtZTogICAgICBpcmxhbl9wcm92aWRlci5oCisgKiBWZXJzaW9uOiAgICAgICAwLjEKKyAqIERlc2NyaXB0aW9uOiAgIElyREEgTEFOIGFjY2VzcyBsYXllcgorICogU3RhdHVzOiAgICAgICAgRXhwZXJpbWVudGFsLgorICogQXV0aG9yOiAgICAgICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgorICogQ3JlYXRlZCBhdDogICAgU3VuIEF1ZyAzMSAyMDoxNDozNyAxOTk3CisgKiBNb2RpZmllZCBhdDogICBTdW4gTWF5ICA5IDEyOjI2OjExIDE5OTkKKyAqIE1vZGlmaWVkIGJ5OiAgIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4KKyAqIAorICogICAgIENvcHlyaWdodCAoYykgMTk5OC0xOTk5IERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4sIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgICAgCisgKiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAKKyAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyAKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiAKKyAqICAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgICAgTmVpdGhlciBEYWcgQnJhdHRsaSBub3IgVW5pdmVyc2l0eSBvZiBUcm9tc/ggYWRtaXQgbGlhYmlsaXR5IG5vcgorICogICAgIHByb3ZpZGUgd2FycmFudHkgZm9yIGFueSBvZiB0aGlzIHNvZnR3YXJlLiBUaGlzIG1hdGVyaWFsIGlzIAorICogICAgIHByb3ZpZGVkICJBUy1JUyIgYW5kIGF0IG5vIGNoYXJnZS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgSVJMQU5fU0VSVkVSX0gKKyNkZWZpbmUgSVJMQU5fU0VSVkVSX0gKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxuZXQvaXJkYS9pcmxhbl9jb21tb24uaD4KKwordm9pZCBpcmxhbl9wcm92aWRlcl9jdHJsX2Rpc2Nvbm5lY3RfaW5kaWNhdGlvbih2b2lkICppbnN0YW5jZSwgdm9pZCAqc2FwLCAKKwkJCQkJICAgICAgIExNX1JFQVNPTiByZWFzb24sIAorCQkJCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKKwordm9pZCBpcmxhbl9wcm92aWRlcl9jb25uZWN0X3Jlc3BvbnNlKHN0cnVjdCBpcmxhbl9jYiAqLCBzdHJ1Y3QgdHNhcF9jYiAqKTsKKworaW50IGlybGFuX3BhcnNlX29wZW5fZGF0YV9jbWQoc3RydWN0IGlybGFuX2NiICpzZWxmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2ludCBpcmxhbl9wcm92aWRlcl9wYXJzZV9jb21tYW5kKHN0cnVjdCBpcmxhbl9jYiAqc2VsZiwgaW50IGNtZCwKKwkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKK3ZvaWQgaXJsYW5fcHJvdmlkZXJfc2VuZF9yZXBseShzdHJ1Y3QgaXJsYW5fY2IgKnNlbGYsIGludCBjb21tYW5kLCAKKwkJCSAgICAgICBpbnQgcmV0X2NvZGUpOworaW50IGlybGFuX3Byb3ZpZGVyX29wZW5fY3RybF90c2FwKHN0cnVjdCBpcmxhbl9jYiAqc2VsZik7CisKKyNlbmRpZgorCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lyZGEvaXJsYXAuaCBiL2luY2x1ZGUvbmV0L2lyZGEvaXJsYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTVlODZlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmxhcC5oCkBAIC0wLDAgKzEsMjkwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAKKyAqIEZpbGVuYW1lOiAgICAgIGlybGFwLmgKKyAqIFZlcnNpb246ICAgICAgIDAuOAorICogRGVzY3JpcHRpb246ICAgQW4gSXJEQSBMQVAgZHJpdmVyIGZvciBMaW51eAorICogU3RhdHVzOiAgICAgICAgRXhwZXJpbWVudGFsLgorICogQXV0aG9yOiAgICAgICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgorICogQ3JlYXRlZCBhdDogICAgTW9uIEF1ZyAgNCAyMDo0MDo1MyAxOTk3CisgKiBNb2RpZmllZCBhdDogICBGcmkgRGVjIDEwIDEzOjIxOjE3IDE5OTkKKyAqIE1vZGlmaWVkIGJ5OiAgIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4KKyAqIAorICogICAgIENvcHlyaWdodCAoYykgMTk5OC0xOTk5IERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4sIAorICogICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgICAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDIgSmVhbiBUb3VycmlsaGVzIDxqdEBocGwuaHAuY29tPgorICogICAgIAorICogICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgCisgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgCisgKiAgICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICAgIE5laXRoZXIgRGFnIEJyYXR0bGkgbm9yIFVuaXZlcnNpdHkgb2YgVHJvbXP4IGFkbWl0IGxpYWJpbGl0eSBub3IKKyAqICAgICBwcm92aWRlIHdhcnJhbnR5IGZvciBhbnkgb2YgdGhpcyBzb2Z0d2FyZS4gVGhpcyBtYXRlcmlhbCBpcyAKKyAqICAgICBwcm92aWRlZCAiQVMtSVMiIGFuZCBhdCBubyBjaGFyZ2UuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIElSTEFQX0gKKyNkZWZpbmUgSVJMQVBfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorCisjaW5jbHVkZSA8bmV0L2lyZGEvaXJxdWV1ZS5oPgkJLyogaXJkYV9xdWV1ZV90ICovCisjaW5jbHVkZSA8bmV0L2lyZGEvcW9zLmg+CQkvKiBzdHJ1Y3QgcW9zX2luZm8gKi8KKyNpbmNsdWRlIDxuZXQvaXJkYS9kaXNjb3ZlcnkuaD4JCS8qIGRpc2NvdmVyeV90ICovCisjaW5jbHVkZSA8bmV0L2lyZGEvaXJsYXBfZXZlbnQuaD4JLyogSVJMQVBfU1RBVEUsIC4uLiAqLworI2luY2x1ZGUgPG5ldC9pcmRhL2lybW9kLmg+CQkvKiBzdHJ1Y3Qgbm90aWZ5X3QgKi8KKworI2RlZmluZSBDT05GSUdfSVJEQV9EWU5BTUlDX1dJTkRPVyAxCisKKyNkZWZpbmUgTEFQX1JFTElBQkxFICAgMQorI2RlZmluZSBMQVBfVU5SRUxJQUJMRSAwCisKKyNkZWZpbmUgTEFQX0FERFJfSEVBREVSIDEgIC8qIElyTEFQIEFkZHJlc3MgSGVhZGVyICovCisjZGVmaW5lIExBUF9DVFJMX0hFQURFUiAxICAvKiBJckxBUCBDb250cm9sIEhlYWRlciAqLworCisvKiBNYXkgYmUgZGlmZmVyZW50IHdoZW4gd2UgZ2V0IFZGSVIgKi8KKyNkZWZpbmUgTEFQX01BWF9IRUFERVIgKExBUF9BRERSX0hFQURFUiArIExBUF9DVFJMX0hFQURFUikKKworI2RlZmluZSBCUk9BRENBU1QgIDB4ZmZmZmZmZmYgLyogQnJvYWRjYXN0IGRldmljZSBhZGRyZXNzICovCisjZGVmaW5lIENCUk9BRENBU1QgMHhmZSAgICAgICAvKiBDb25uZWN0aW9uIGJyb2FkY2FzdCBhZGRyZXNzICovCisjZGVmaW5lIFhJRF9GT1JNQVQgMHgwMSAgICAgICAvKiBEaXNjb3ZlcnkgWElEIGZvcm1hdCAqLworCisvKiBOb2JvZHkgc2VlbXMgdG8gdXNlIHRoaXMgY29uc3RhbnQuICovCisjZGVmaW5lIExBUF9XSU5ET1dfU0laRSA4CisvKiBXZSBrZWVwIHRoZSBMQVAgcXVldWUgdmVyeSBzbWFsbCB0byBtaW5pbWlzZSB0aGUgYW1vdW50IG9mIGJ1ZmZlcmluZy4KKyAqIHRoaXMgaW1wcm92ZSBsYXRlbmN5IGFuZCByZWR1Y2UgcmVzb3VyY2UgY29uc3VtcHRpb24uCisgKiBUaGlzIHdvcmsgb25seSBiZWNhdXNlIHdlIGhhdmUgc3luY2hyb25vdXMgcmVmaWxsaW5nIG9mIElyTEFQIHRocm91Z2gKKyAqIHRoZSBmbG93IGNvbnRyb2wgbWVjaGFuaXNtICh2aWEgc2NoZWR1bGVyIGFuZCBJclRUUCkuCisgKiAyIGJ1ZmZlcnMgaXMgdGhlIG1pbmltdW0gd2UgY2FuIHdvcmsgd2l0aCwgb25lIHRoYXQgd2Ugc2VuZCB3aGlsZSBwb2xsaW5nCisgKiBJclRUUCwgYW5kIGFub3RoZXIgdG8ga25vdyB0aGF0IHdlIHNob3VsZCBub3Qgc2VuZCB0aGUgcGYgYml0LgorICogSmVhbiBJSSAqLworI2RlZmluZSBMQVBfSElHSF9USFJFU0hPTEQgICAgIDIKKy8qIFNvbWUgcmFyZSBub24gVFRQIGNsaWVudHMgZG9uJ3QgaW1wbGVtZW50IGZsb3cgY29udHJvbCwgYW5kCisgKiBzbyBkb24ndCBjb21wbHkgd2l0aCB0aGUgYWJvdmUgbGltaXQgKGFuZCBuZWl0aGVyIHdpdGggdGhpcyBvbmUpLgorICogRm9yIElBUCBhbmQgbWFuYWdlbWVudCwgaXQgZG9lc24ndCBtYXR0ZXIsIGJlY2F1c2UgdGhleSBuZXZlciB0cmFuc21pdCBtdWNoLgorICouRm9yIElyTFBULCB0aGlzIHNob3VsZCBiZSBmaXhlZC4KKyAqIC0gSmVhbiBJSSAqLworI2RlZmluZSBMQVBfTUFYX1FVRVVFIDEwCisvKiBQbGVhc2Ugbm90ZSB0aGF0IGFsbCBJckRBIG1hbmFnZW1lbnQgZnJhbWVzIChMTVAvVFRQIGNvbm4gcmVxL2Rpc2MgYW5kCisgKiBJQVMgcXVlcmllcykgZmFsbCBpbiB0aGUgc2Vjb25kIGNhdGVnb3J5IGFuZCBhcmUgc2VudCB0byBMQVAgZXZlbiBpZiBUVFAKKyAqIGlzIHN0b3BwZWQuIFRoaXMgbWVhbnMgdGhhdCB0aG9zZSBmcmFtZXMgd2lsbCB3YWl0IG9ubHkgYSBtYXhpbXVtIG9mCisgKiB0d28gKDIpIGRhdGEgZnJhbWVzIGJlZm9yZSBiZWVpbmcgc2VudCBvbiB0aGUgIndpcmUiLCB3aGljaCBzcGVlZCB1cAorICogbmV3IHNvY2tldCBzZXR1cCB3aGVuIHRoZSBsaW5rIGlzIHNhdHVyYXRlZC4KKyAqIFNhbWUgc3RvcnkgZm9yIHR3byBzb2NrZXRzIGNvbXBldGluZyBmb3IgdGhlIG1lZGl1bSA6IGlmIG9uZSBzYXR1cmF0ZXMKKyAqIHRoZSBMQVAsIHdoZW4gdGhlIG90aGVyIHdhbnQgdG8gdHJhbnNtaXQgaXQgb25seSBoYXMgdG8gd2FpdCBmb3IKKyAqIG1heGltdW0gdGhyZWUgKDMpIHBhY2tldHMgKDIgKyBvbmUgc2NoZWR1bGluZyksIHdoaWNoIGltcHJvdmUgcGVyZm9ybWFuY2UKKyAqIG9mIGRlbGF5IHNlbnNpdGl2ZSBhcHBsaWNhdGlvbnMuCisgKiBKZWFuIElJICovCisKKyNkZWZpbmUgTlJfRVhQRUNURUQgICAgIDEKKyNkZWZpbmUgTlJfVU5FWFBFQ1RFRCAgIDAKKyNkZWZpbmUgTlJfSU5WQUxJRCAgICAgLTEKKworI2RlZmluZSBOU19FWFBFQ1RFRCAgICAgMQorI2RlZmluZSBOU19VTkVYUEVDVEVEICAgMAorI2RlZmluZSBOU19JTlZBTElEICAgICAtMQorCisvKgorICogIE1ldGEgaW5mb3JtYXRpb24gcGFzc2VkIHdpdGhpbiB0aGUgSXJMQVAgc3RhdGUgbWFjaGluZQorICovCitzdHJ1Y3QgaXJsYXBfaW5mbyB7CisJX191OCBjYWRkcjsgICAvKiBDb25uZWN0aW9uIGFkZHJlc3MgKi8KKwlfX3U4IGNvbnRyb2w7IC8qIEZyYW1lIHR5cGUgKi8KKyAgICAgICAgX191OCBjbWQ7CisKKwlfX3UzMiBzYWRkcjsKKwlfX3UzMiBkYWRkcjsKKwkKKwlpbnQgcGY7ICAgICAgICAvKiBQb2xsL2ZpbmFsIGJpdCBzZXQgKi8KKworCV9fdTggIG5yOyAgICAgIC8qIFNlcXVlbmNlIG51bWJlciBvZiBuZXh0IGZyYW1lIGV4cGVjdGVkICovCisJX191OCAgbnM7ICAgICAgLyogU2VxdWVuY2UgbnVtYmVyIG9mIGZyYW1lIHNlbnQgKi8KKworCWludCAgUzsgICAgICAgIC8qIE51bWJlciBvZiBzbG90cyAqLworCWludCAgc2xvdDsgICAgIC8qIFJhbmRvbSBjaG9zZW4gc2xvdCAqLworCWludCAgczsgICAgICAgIC8qIEN1cnJlbnQgc2xvdCAqLworCisJZGlzY292ZXJ5X3QgKmRpc2NvdmVyeTsgLyogRGlzY292ZXJ5IGluZm9ybWF0aW9uICovCit9OworCisvKiBNYWluIHN0cnVjdHVyZSBvZiBJckxBUCAqLworc3RydWN0IGlybGFwX2NiIHsKKwlpcmRhX3F1ZXVlX3QgcTsgICAgIC8qIE11c3QgYmUgZmlyc3QgKi8KKwltYWdpY190IG1hZ2ljOworCisJLyogRGV2aWNlIHdlIGFyZSBhdHRhY2hlZCB0byAqLworCXN0cnVjdCBuZXRfZGV2aWNlICAqbmV0ZGV2OworCWNoYXIJCWh3X25hbWVbMipJRk5BTVNJWiArIDFdOworCisJLyogQ29ubmVjdGlvbiBzdGF0ZSAqLworCXZvbGF0aWxlIElSTEFQX1NUQVRFIHN0YXRlOyAgICAgICAvKiBDdXJyZW50IHN0YXRlICovCisKKwkvKiBUaW1lcnMgdXNlZCBieSBJckxBUCAqLworCXN0cnVjdCB0aW1lcl9saXN0IHF1ZXJ5X3RpbWVyOworCXN0cnVjdCB0aW1lcl9saXN0IHNsb3RfdGltZXI7CisJc3RydWN0IHRpbWVyX2xpc3QgZGlzY292ZXJ5X3RpbWVyOworCXN0cnVjdCB0aW1lcl9saXN0IGZpbmFsX3RpbWVyOworCXN0cnVjdCB0aW1lcl9saXN0IHBvbGxfdGltZXI7CisJc3RydWN0IHRpbWVyX2xpc3Qgd2RfdGltZXI7CisJc3RydWN0IHRpbWVyX2xpc3QgYmFja29mZl90aW1lcjsKKworCS8qIE1lZGlhIGJ1c3kgc3R1ZmYgKi8KKwlzdHJ1Y3QgdGltZXJfbGlzdCBtZWRpYV9idXN5X3RpbWVyOworCWludCBtZWRpYV9idXN5OworCisJLyogVGltZW91dHMgd2hpY2ggd2lsbCBiZSBkaWZmZXJlbnQgd2l0aCBkaWZmZXJlbnQgdHVybiB0aW1lICovCisJaW50IHNsb3RfdGltZW91dDsKKwlpbnQgcG9sbF90aW1lb3V0OworCWludCBmaW5hbF90aW1lb3V0OworCWludCB3ZF90aW1lb3V0OworCisJc3RydWN0IHNrX2J1ZmZfaGVhZCB0eHE7ICAvKiBGcmFtZXMgdG8gYmUgdHJhbnNtaXR0ZWQgKi8KKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHR4cV91bHRyYTsKKworIAlfX3U4ICAgIGNhZGRyOyAgICAgICAgLyogQ29ubmVjdGlvbiBhZGRyZXNzICovCisJX191MzIgICBzYWRkcjsgICAgICAgIC8qIFNvdXJjZSBkZXZpY2UgYWRkcmVzcyAqLworCV9fdTMyICAgZGFkZHI7ICAgICAgICAvKiBEZXN0aW5hdGlvbiBkZXZpY2UgYWRkcmVzcyAqLworCisJaW50ICAgICByZXRyeV9jb3VudDsgIC8qIFRpbWVzIHRyaWVkIHRvIGVzdGFibGlzaCBjb25uZWN0aW9uICovCisJaW50ICAgICBhZGRfd2FpdDsgICAgIC8qIFRydWUgaWYgd2UgYXJlIHdhaXRpbmcgZm9yIGZyYW1lICovCisKKwlfX3U4ICAgIGNvbm5lY3RfcGVuZGluZzsKKwlfX3U4ICAgIGRpc2Nvbm5lY3RfcGVuZGluZzsKKworCS8qICBUbyBzZW5kIGEgZmFzdGVyIFJSIGlmIHR4IHF1ZXVlIGVtcHR5ICovCisjaWZkZWYgQ09ORklHX0lSREFfRkFTVF9SUgorCWludCAgICAgZmFzdF9SUl90aW1lb3V0OworCWludCAgICAgZmFzdF9SUjsgICAgICAKKyNlbmRpZiAvKiBDT05GSUdfSVJEQV9GQVNUX1JSICovCisJCisJaW50IE4xOyAvKiBOMSAqIEYtdGltZXIgPSBOZWdpdGlhdGVkIGxpbmsgZGlzY29ubmVjdCB3YXJuaW5nIHRocmVzaG9sZCAqLworCWludCBOMjsgLyogTjIgKiBGLXRpbWVyID0gTmVnaXRpYXRlZCBsaW5rIGRpc2Nvbm5lY3QgdGltZSAqLworCWludCBOMzsgLyogQ29ubmVjdGlvbiByZXRyeSBjb3VudCAqLworCisJaW50ICAgICBsb2NhbF9idXN5OworCWludCAgICAgcmVtb3RlX2J1c3k7CisJaW50ICAgICB4bWl0ZmxhZzsKKworCV9fdTggICAgdnM7ICAgICAgICAgICAgLyogTmV4dCBmcmFtZSB0byBiZSBzZW50ICovCisJX191OCAgICB2cjsgICAgICAgICAgICAvKiBOZXh0IGZyYW1lIHRvIGJlIHJlY2VpdmVkICovCisJX191OCAgICB2YTsgICAgICAgICAgICAvKiBMYXN0IGZyYW1lIGFja2VkICovCisgCWludCAgICAgd2luZG93OyAgICAgICAgLyogTnIgb2YgSS1mcmFtZXMgYWxsb3dlZCB0byBzZW5kICovCisJaW50ICAgICB3aW5kb3dfc2l6ZTsgICAvKiBDdXJyZW50IG5lZ290aWF0ZWQgd2luZG93IHNpemUgKi8KKworI2lmZGVmIENPTkZJR19JUkRBX0RZTkFNSUNfV0lORE9XCisJX191MzIgICBsaW5lX2NhcGFjaXR5OyAvKiBOdW1iZXIgb2YgYnl0ZXMgYWxsb3dlZCB0byBzZW5kICovCisJX191MzIgICBieXRlc19sZWZ0OyAgICAvKiBOdW1iZXIgb2YgYnl0ZXMgc3RpbGwgYWxsb3dlZCB0byB0cmFuc21pdCAqLworI2VuZGlmIC8qIENPTkZJR19JUkRBX0RZTkFNSUNfV0lORE9XICovCisKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHd4X2xpc3Q7CisKKwlfX3U4ICAgIGFja19yZXF1aXJlZDsKKwkKKwkvKiBYSUQgcGFyYW1ldGVycyAqLworIAlfX3U4ICAgIFM7ICAgICAgICAgICAvKiBOdW1iZXIgb2Ygc2xvdHMgKi8KKwlfX3U4ICAgIHNsb3Q7ICAgICAgICAvKiBSYW5kb20gY2hvc2VuIHNsb3QgKi8KKyAJX191OCAgICBzOyAgICAgICAgICAgLyogQ3VycmVudCBzbG90ICovCisJaW50ICAgICBmcmFtZV9zZW50OyAgLyogSGF2ZSB3ZSBzZW50IHJlcGx5PyAqLworCisJaGFzaGJpbl90ICAgKmRpc2NvdmVyeV9sb2c7CisgCWRpc2NvdmVyeV90ICpkaXNjb3ZlcnlfY21kOworCisJX191MzIgc3BlZWQ7CQkvKiBMaW5rIHNwZWVkICovCisKKwlzdHJ1Y3QgcW9zX2luZm8gIHFvc190eDsgICAvKiBRb1MgcmVxdWVzdGVkIGJ5IHBlZXIgKi8KKwlzdHJ1Y3QgcW9zX2luZm8gIHFvc19yeDsgICAvKiBRb1MgcmVxdWVzdGVkIGJ5IHNlbGYgKi8KKwlzdHJ1Y3QgcW9zX2luZm8gKnFvc19kZXY7ICAvKiBRb1Mgc3VwcG9ydGVkIGJ5IGRldmljZSAqLworCisJbm90aWZ5X3Qgbm90aWZ5OyAvKiBDYWxsYmFja3MgdG8gSXJMTVAgKi8KKworCWludCAgICBtdHRfcmVxdWlyZWQ7ICAvKiBNaW51bXVtIHR1cm5hcm91bmQgdGltZSByZXF1aXJlZCAqLworCWludCAgICB4Ym9mc19kZWxheTsgICAvKiBOciBvZiBYQk9GJ3MgdXNlZCB0byBNVFQgKi8KKwlpbnQgICAgYm9mc19jb3VudDsgICAgLyogTmVnb3RpYXRlZCBleHRyYSBCT0ZzICovCisJaW50ICAgIG5leHRfYm9mczsgICAgIC8qIE5lZ290aWF0ZWQgZXh0cmEgQk9GcyBhZnRlciBuZXh0IGZyYW1lICovCit9OworCisvKiAKKyAqICBGdW5jdGlvbiBwcm90b3R5cGVzIAorICovCitpbnQgaXJsYXBfaW5pdCh2b2lkKTsKK3ZvaWQgaXJsYXBfY2xlYW51cCh2b2lkKTsKKworc3RydWN0IGlybGFwX2NiICppcmxhcF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBxb3NfaW5mbyAqcW9zLAorCQkJICAgIGNvbnN0IGNoYXIgKmh3X25hbWUpOwordm9pZCBpcmxhcF9jbG9zZShzdHJ1Y3QgaXJsYXBfY2IgKnNlbGYpOworCit2b2lkIGlybGFwX2Nvbm5lY3RfcmVxdWVzdChzdHJ1Y3QgaXJsYXBfY2IgKnNlbGYsIF9fdTMyIGRhZGRyLCAKKwkJCSAgIHN0cnVjdCBxb3NfaW5mbyAqcW9zLCBpbnQgc25pZmYpOwordm9pZCBpcmxhcF9jb25uZWN0X3Jlc3BvbnNlKHN0cnVjdCBpcmxhcF9jYiAqc2VsZiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Cit2b2lkIGlybGFwX2Nvbm5lY3RfaW5kaWNhdGlvbihzdHJ1Y3QgaXJsYXBfY2IgKnNlbGYsIHN0cnVjdCBza19idWZmICpza2IpOwordm9pZCBpcmxhcF9jb25uZWN0X2NvbmZpcm0oc3RydWN0IGlybGFwX2NiICosIHN0cnVjdCBza19idWZmICpza2IpOworCit2b2lkIGlybGFwX2RhdGFfaW5kaWNhdGlvbihzdHJ1Y3QgaXJsYXBfY2IgKiwgc3RydWN0IHNrX2J1ZmYgKiwgaW50IHVucmVsaWFibGUpOwordm9pZCBpcmxhcF9kYXRhX3JlcXVlc3Qoc3RydWN0IGlybGFwX2NiICosIHN0cnVjdCBza19idWZmICosIGludCB1bnJlbGlhYmxlKTsKKworI2lmZGVmIENPTkZJR19JUkRBX1VMVFJBCit2b2lkIGlybGFwX3VuaXRkYXRhX3JlcXVlc3Qoc3RydWN0IGlybGFwX2NiICosIHN0cnVjdCBza19idWZmICopOwordm9pZCBpcmxhcF91bml0ZGF0YV9pbmRpY2F0aW9uKHN0cnVjdCBpcmxhcF9jYiAqLCBzdHJ1Y3Qgc2tfYnVmZiAqKTsKKyNlbmRpZiAvKiBDT05GSUdfSVJEQV9VTFRSQSAqLworCit2b2lkIGlybGFwX2Rpc2Nvbm5lY3RfcmVxdWVzdChzdHJ1Y3QgaXJsYXBfY2IgKik7Cit2b2lkIGlybGFwX2Rpc2Nvbm5lY3RfaW5kaWNhdGlvbihzdHJ1Y3QgaXJsYXBfY2IgKiwgTEFQX1JFQVNPTiByZWFzb24pOworCit2b2lkIGlybGFwX3N0YXR1c19pbmRpY2F0aW9uKHN0cnVjdCBpcmxhcF9jYiAqLCBpbnQgcXVhbGl0eV9vZl9saW5rKTsKKwordm9pZCBpcmxhcF90ZXN0X3JlcXVlc3QoX191OCAqaW5mbywgaW50IGxlbik7CisKK3ZvaWQgaXJsYXBfZGlzY292ZXJ5X3JlcXVlc3Qoc3RydWN0IGlybGFwX2NiICosIGRpc2NvdmVyeV90ICpkaXNjb3ZlcnkpOwordm9pZCBpcmxhcF9kaXNjb3ZlcnlfY29uZmlybShzdHJ1Y3QgaXJsYXBfY2IgKiwgaGFzaGJpbl90ICpkaXNjb3ZlcnlfbG9nKTsKK3ZvaWQgaXJsYXBfZGlzY292ZXJ5X2luZGljYXRpb24oc3RydWN0IGlybGFwX2NiICosIGRpc2NvdmVyeV90ICpkaXNjb3ZlcnkpOworCit2b2lkIGlybGFwX3Jlc2V0X2luZGljYXRpb24oc3RydWN0IGlybGFwX2NiICpzZWxmKTsKK3ZvaWQgaXJsYXBfcmVzZXRfY29uZmlybSh2b2lkKTsKKwordm9pZCBpcmxhcF91cGRhdGVfbnJfcmVjZWl2ZWQoc3RydWN0IGlybGFwX2NiICosIGludCBucik7CitpbnQgaXJsYXBfdmFsaWRhdGVfbnJfcmVjZWl2ZWQoc3RydWN0IGlybGFwX2NiICosIGludCBucik7CitpbnQgaXJsYXBfdmFsaWRhdGVfbnNfcmVjZWl2ZWQoc3RydWN0IGlybGFwX2NiICosIGludCBucyk7CisKK2ludCAgaXJsYXBfZ2VuZXJhdGVfcmFuZF90aW1lX3Nsb3QoaW50IFMsIGludCBzKTsKK3ZvaWQgaXJsYXBfaW5pdGlhdGVfY29ubmVjdGlvbl9zdGF0ZShzdHJ1Y3QgaXJsYXBfY2IgKik7Cit2b2lkIGlybGFwX2ZsdXNoX2FsbF9xdWV1ZXMoc3RydWN0IGlybGFwX2NiICopOwordm9pZCBpcmxhcF93YWl0X21pbl90dXJuX2Fyb3VuZChzdHJ1Y3QgaXJsYXBfY2IgKiwgc3RydWN0IHFvc19pbmZvICopOworCit2b2lkIGlybGFwX2FwcGx5X2RlZmF1bHRfY29ubmVjdGlvbl9wYXJhbWV0ZXJzKHN0cnVjdCBpcmxhcF9jYiAqc2VsZik7Cit2b2lkIGlybGFwX2FwcGx5X2Nvbm5lY3Rpb25fcGFyYW1ldGVycyhzdHJ1Y3QgaXJsYXBfY2IgKnNlbGYsIGludCBub3cpOworCisjZGVmaW5lIElSTEFQX0dFVF9IRUFERVJfU0laRShzZWxmKSAoTEFQX01BWF9IRUFERVIpCisjZGVmaW5lIElSTEFQX0dFVF9UWF9RVUVVRV9MRU4oc2VsZikgc2tiX3F1ZXVlX2xlbigmc2VsZi0+dHhxKQorCisvKiBSZXR1cm4gVFJVRSBpZiB0aGUgbm9kZSBpcyBpbiBwcmltYXJ5IG1vZGUgKGkuZS4gbWFzdGVyKQorICogLSBKZWFuIElJICovCitzdGF0aWMgaW5saW5lIGludCBpcmxhcF9pc19wcmltYXJ5KHN0cnVjdCBpcmxhcF9jYiAqc2VsZikKK3sKKwlpbnQgcmV0OworCXN3aXRjaChzZWxmLT5zdGF0ZSkgeworCWNhc2UgTEFQX1hNSVRfUDoKKwljYXNlIExBUF9OUk1fUDoKKwkJcmV0ID0gMTsKKwkJYnJlYWs7CisJY2FzZSBMQVBfWE1JVF9TOgorCWNhc2UgTEFQX05STV9TOgorCQlyZXQgPSAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtMTsKKwl9CisJcmV0dXJuKHJldCk7Cit9CisKKy8qIENsZWFyIGEgcGVuZGluZyBJckxBUCBkaXNjb25uZWN0LiAtIEplYW4gSUkgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpcmxhcF9jbGVhcl9kaXNjb25uZWN0KHN0cnVjdCBpcmxhcF9jYiAqc2VsZikKK3sKKwlzZWxmLT5kaXNjb25uZWN0X3BlbmRpbmcgPSBGQUxTRTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcmRhL2lybGFwX2V2ZW50LmggYi9pbmNsdWRlL25ldC9pcmRhL2lybGFwX2V2ZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFlMmUxMTkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9pcmRhL2lybGFwX2V2ZW50LmgKQEAgLTAsMCArMSwxMzEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgIAorICogICAgICAgICAgICAgICAgCisgKiBGaWxlbmFtZTogICAgICBpcmxhcF9ldmVudC5oCisgKiBWZXJzaW9uOiAgICAgICAwLjEKKyAqIERlc2NyaXB0aW9uOiAgIAorICogU3RhdHVzOiAgICAgICAgRXhwZXJpbWVudGFsLgorICogQXV0aG9yOiAgICAgICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgorICogQ3JlYXRlZCBhdDogICAgU2F0IEF1ZyAxNiAwMDo1OToyOSAxOTk3CisgKiBNb2RpZmllZCBhdDogICBUdWUgRGVjIDIxIDExOjIwOjMwIDE5OTkKKyAqIE1vZGlmaWVkIGJ5OiAgIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4KKyAqIAorICogICAgIENvcHlyaWdodCAoYykgMTk5OC0xOTk5IERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4sIAorICogICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgICAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDIgSmVhbiBUb3VycmlsaGVzIDxqdEBocGwuaHAuY29tPgorICogICAgIAorICogICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgCisgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgCisgKiAgICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiAKKyAqICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKiAKKyAqICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAKKyAqICAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSAKKyAqICAgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCAKKyAqICAgICBNQSAwMjExMS0xMzA3IFVTQQorICogICAgIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIElSTEFQX0VWRU5UX0gKKyNkZWZpbmUgSVJMQVBfRVZFTlRfSAorCisjaW5jbHVkZSA8bmV0L2lyZGEvaXJkYS5oPgorCisvKiBBIGZldyBmb3J3YXJkIGRlY2xhcmF0aW9ucyAodG8gbWFrZSBjb21waWxlciBoYXBweSkgKi8KK3N0cnVjdCBpcmxhcF9jYjsKK3N0cnVjdCBpcmxhcF9pbmZvOworCisvKiBJckxBUCBTdGF0ZXMgKi8KK3R5cGVkZWYgZW51bSB7CisJTEFQX05ETSwgICAgICAgICAvKiBOb3JtYWwgZGlzY29ubmVjdGVkIG1vZGUgKi8KKwlMQVBfUVVFUlksCisJTEFQX1JFUExZLAorCUxBUF9DT05OLCAgICAgICAgLyogQ29ubmVjdCBpbmRpY2F0aW9uICovCisJTEFQX1NFVFVQLCAgICAgICAvKiBTZXR0aW5nIHVwIGNvbm5lY3Rpb24gKi8KKwlMQVBfT0ZGTElORSwgICAgIC8qIEEgcmVhbGx5IGJvcmluZyBzdGF0ZSAqLworCUxBUF9YTUlUX1AsCisJTEFQX1BDTE9TRSwKKwlMQVBfTlJNX1AsICAgICAgIC8qIE5vcm1hbCByZXNwb25zZSBtb2RlIGFzIHByaW1hcnkgKi8KKwlMQVBfUkVTRVRfV0FJVCwKKwlMQVBfUkVTRVQsCisJTEFQX05STV9TLCAgICAgICAvKiBOb3JtYWwgcmVzcG9uc2UgbW9kZSBhcyBzZWNvbmRhcnkgKi8KKwlMQVBfWE1JVF9TLAorCUxBUF9TQ0xPU0UsCisJTEFQX1JFU0VUX0NIRUNLLAorfSBJUkxBUF9TVEFURTsKKworLyogSXJMQVAgRXZlbnRzICovCit0eXBlZGVmIGVudW0geworCS8qIFNlcnZpY2VzIGV2ZW50cyAqLworCURJU0NPVkVSWV9SRVFVRVNULAorCUNPTk5FQ1RfUkVRVUVTVCwKKwlDT05ORUNUX1JFU1BPTlNFLAorCURJU0NPTk5FQ1RfUkVRVUVTVCwKKwlEQVRBX1JFUVVFU1QsCisJUkVTRVRfUkVRVUVTVCwKKwlSRVNFVF9SRVNQT05TRSwKKworCS8qIFNlbmQgZXZlbnRzICovCisJU0VORF9JX0NNRCwKKwlTRU5EX1VJX0ZSQU1FLAorCisJLyogUmVjZWl2ZSBldmVudHMgKi8KKwlSRUNWX0RJU0NPVkVSWV9YSURfQ01ELAorCVJFQ1ZfRElTQ09WRVJZX1hJRF9SU1AsCisJUkVDVl9TTlJNX0NNRCwKKwlSRUNWX1RFU1RfQ01ELAorCVJFQ1ZfVEVTVF9SU1AsCisJUkVDVl9VQV9SU1AsCisJUkVDVl9ETV9SU1AsCisJUkVDVl9SRF9SU1AsCisJUkVDVl9JX0NNRCwKKwlSRUNWX0lfUlNQLAorCVJFQ1ZfVUlfRlJBTUUsCisJUkVDVl9GUk1SX1JTUCwKKwlSRUNWX1JSX0NNRCwKKwlSRUNWX1JSX1JTUCwKKwlSRUNWX1JOUl9DTUQsCisJUkVDVl9STlJfUlNQLAorCVJFQ1ZfUkVKX0NNRCwKKwlSRUNWX1JFSl9SU1AsCisJUkVDVl9TUkVKX0NNRCwKKwlSRUNWX1NSRUpfUlNQLAorCVJFQ1ZfRElTQ19DTUQsCisKKwkvKiBUaW1lciBldmVudHMgKi8KKwlTTE9UX1RJTUVSX0VYUElSRUQsCisJUVVFUllfVElNRVJfRVhQSVJFRCwKKwlGSU5BTF9USU1FUl9FWFBJUkVELAorCVBPTExfVElNRVJfRVhQSVJFRCwKKwlESVNDT1ZFUllfVElNRVJfRVhQSVJFRCwKKwlXRF9USU1FUl9FWFBJUkVELAorCUJBQ0tPRkZfVElNRVJfRVhQSVJFRCwKKwlNRURJQV9CVVNZX1RJTUVSX0VYUElSRUQsCit9IElSTEFQX0VWRU5UOworCisvKgorICogRGlzY29ubmVjdCByZWFzb24gY29kZQorICovCit0eXBlZGVmIGVudW0geyAvKiBGSVhNRSBjaGVjayB0aGUgdHdvIGZpcnN0IHJlYXNvbiBjb2RlcyAqLworCUxBUF9ESVNDX0lORElDQVRJT049MSwgLyogUmVjZWl2ZWQgYSBkaXNjb25uZWN0IHJlcXVlc3QgZnJvbSBwZWVyICovCisJTEFQX05PX1JFU1BPTlNFLCAgICAgICAvKiBUbyBtYW55IHJldHJhbnNtaXRzIHdpdGhvdXQgcmVzcG9uc2UgKi8KKwlMQVBfUkVTRVRfSU5ESUNBVElPTiwgIC8qIFRvIG1hbnkgcmV0cmFuc21pdHMsIG9yIGludmFsaWQgbnIvbnMgKi8KKwlMQVBfRk9VTkRfTk9ORSwgICAgICAgIC8qIE5vIGRldmljZXMgd2VyZSBkaXNjb3ZlcmVkICovCisJTEFQX01FRElBX0JVU1ksCisJTEFQX1BSSU1BUllfQ09ORkxJQ1QsCit9IExBUF9SRUFTT047CisKK2V4dGVybiBjb25zdCBjaGFyICppcmxhcF9zdGF0ZVtdOworCit2b2lkIGlybGFwX2RvX2V2ZW50KHN0cnVjdCBpcmxhcF9jYiAqc2VsZiwgSVJMQVBfRVZFTlQgZXZlbnQsIAorCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlybGFwX2luZm8gKmluZm8pOwordm9pZCBpcmxhcF9wcmludF9ldmVudChJUkxBUF9FVkVOVCBldmVudCk7CisKK2V4dGVybiBpbnQgaXJsYXBfcW9zX25lZ290aWF0ZShzdHJ1Y3QgaXJsYXBfY2IgKnNlbGYsIHN0cnVjdCBza19idWZmICpza2IpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lyZGEvaXJsYXBfZnJhbWUuaCBiL2luY2x1ZGUvbmV0L2lyZGEvaXJsYXBfZnJhbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDUyYWUyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmxhcF9mcmFtZS5oCkBAIC0wLDAgKzEsMTQyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAKKyAqIEZpbGVuYW1lOiAgICAgIGlybGFwX2ZyYW1lLmgKKyAqIFZlcnNpb246ICAgICAgIDAuOQorICogRGVzY3JpcHRpb246ICAgSXJMQVAgZnJhbWUgZGVjbGFyYXRpb25zCisgKiBTdGF0dXM6ICAgICAgICBFeHBlcmltZW50YWwuCisgKiBBdXRob3I6ICAgICAgICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+CisgKiBDcmVhdGVkIGF0OiAgICBUdWUgQXVnIDE5IDEwOjI3OjI2IDE5OTcKKyAqIE1vZGlmaWVkIGF0OiAgIFNhdCBEZWMgMjUgMjE6MDc6MjYgMTk5OQorICogTW9kaWZpZWQgYnk6ICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgorICogCisgKiAgICAgQ29weXJpZ2h0IChjKSAxOTk3LTE5OTkgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPiwKKyAqICAgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogICAgIENvcHlyaWdodCAoYykgMjAwMC0yMDAyIEplYW4gVG91cnJpbGhlcyA8anRAaHBsLmhwLmNvbT4KKyAqICAgICAKKyAqICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIAorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIAorICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIAorICogICAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogCisgKiAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICogCisgKiAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgCisgKiAgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgCisgKiAgICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgCisgKiAgICAgTUEgMDIxMTEtMTMwNyBVU0EKKyAqICAgICAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBJUkxBUF9GUkFNRV9ICisjZGVmaW5lIElSTEFQX0ZSQU1FX0gKKworI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorCisjaW5jbHVkZSA8bmV0L2lyZGEvaXJkYS5oPgorCisvKiBBIGZldyBmb3J3YXJkIGRlY2xhcmF0aW9ucyAodG8gbWFrZSBjb21waWxlciBoYXBweSkgKi8KK3N0cnVjdCBpcmxhcF9jYjsKK3N0cnVjdCBkaXNjb3ZlcnlfdDsKKworLyogRnJhbWUgdHlwZXMgYW5kIHRlbXBsYXRlcyAqLworI2RlZmluZSBJTlZBTElEICAgMHhmZgorCisvKiBVbm51bWJlcmVkIChVKSBjb21tYW5kcyAqLworI2RlZmluZSBTTlJNX0NNRCAgMHg4MyAvKiBTZXQgTm9ybWFsIFJlc3BvbnNlIE1vZGUgKi8KKyNkZWZpbmUgRElTQ19DTUQgIDB4NDMgLyogRGlzY29ubmVjdCAqLworI2RlZmluZSBYSURfQ01EICAgMHgyZiAvKiBFeGNoYW5nZSBTdGF0aW9uIElkZW50aWZpY2F0aW9uICovCisjZGVmaW5lIFRFU1RfQ01EICAweGUzIC8qIFRlc3QgKi8KKworLyogVW5udW1iZXJlZCByZXNwb25zZXMgKi8KKyNkZWZpbmUgUk5STV9SU1AgIDB4ODMgLyogUmVxdWVzdCBOb3JtYWwgUmVzcG9uc2UgTW9kZSAqLworI2RlZmluZSBVQV9SU1AgICAgMHg2MyAvKiBVbm51bWJlcmVkIEFja25vd2xlZGdlbWVudCAqLworI2RlZmluZSBGUk1SX1JTUCAgMHg4NyAvKiBGcmFtZSBSZWplY3QgKi8KKyNkZWZpbmUgRE1fUlNQICAgIDB4MGYgLyogRGlzY29ubmVjdCBNb2RlICovCisjZGVmaW5lIFJEX1JTUCAgICAweDQzIC8qIFJlcXVlc3QgRGlzY29ubmVjdGlvbiAqLworI2RlZmluZSBYSURfUlNQICAgMHhhZiAvKiBFeGNoYW5nZSBTdGF0aW9uIElkZW50aWZpY2F0aW9uICovCisjZGVmaW5lIFRFU1RfUlNQICAweGUzIC8qIFRlc3QgZnJhbWUgKi8KKworLyogU3VwZXJ2aXNvcnkgKFMpICovCisjZGVmaW5lIFJSICAgICAgICAweDAxIC8qIFJlY2VpdmUgUmVhZHkgKi8KKyNkZWZpbmUgUkVKICAgICAgIDB4MDkgLyogUmVqZWN0ICovCisjZGVmaW5lIFJOUiAgICAgICAweDA1IC8qIFJlY2VpdmUgTm90IFJlYWR5ICovCisjZGVmaW5lIFNSRUogICAgICAweDBkIC8qIFNlbGVjdGl2ZSBSZWplY3QgKi8KKworLyogSW5mb3JtYXRpb24gKEkpICovCisjZGVmaW5lIElfRlJBTUUgICAweDAwIC8qIEluZm9ybWF0aW9uIEZvcm1hdCAqLworI2RlZmluZSBVSV9GUkFNRSAgMHgwMyAvKiBVbm51bWJlcmVkIEluZm9ybWF0aW9uICovCisKKyNkZWZpbmUgQ01EX0ZSQU1FIDB4MDEKKyNkZWZpbmUgUlNQX0ZSQU1FIDB4MDAKKworI2RlZmluZSBQRl9CSVQgICAgMHgxMCAvKiBQb2xsL2ZpbmFsIGJpdCAqLworCitzdHJ1Y3QgeGlkX2ZyYW1lIHsKKwlfX3U4ICBjYWRkcjsgLyogQ29ubmVjdGlvbiBhZGRyZXNzICovCisJX191OCAgY29udHJvbDsKKwlfX3U4ICBpZGVudDsgLyogU2hvdWxkIGFsd2F5cyBiZSBYSURfRk9STUFUICovIAorCV9fdTMyIHNhZGRyOyAvKiBTb3VyY2UgZGV2aWNlIGFkZHJlc3MgKi8KKwlfX3UzMiBkYWRkcjsgLyogRGVzdGluYXRpb24gZGV2aWNlIGFkZHJlc3MgKi8KKwlfX3U4ICBmbGFnczsgLyogRGlzY292ZXJ5IGZsYWdzICovCisJX191OCAgc2xvdG5yOworCV9fdTggIHZlcnNpb247Cit9IElSREFfUEFDSzsKKworc3RydWN0IHRlc3RfZnJhbWUgeworCV9fdTggY2FkZHI7ICAgICAgICAgIC8qIENvbm5lY3Rpb24gYWRkcmVzcyAqLworCV9fdTggY29udHJvbDsKKwlfX3UzMiBzYWRkcjsgICAgICAgICAvKiBTb3VyY2UgZGV2aWNlIGFkZHJlc3MgKi8KKwlfX3UzMiBkYWRkcjsgICAgICAgICAvKiBEZXN0aW5hdGlvbiBkZXZpY2UgYWRkcmVzcyAqLworfSBJUkRBX1BBQ0s7CisKK3N0cnVjdCB1YV9mcmFtZSB7CisJX191OCBjYWRkcjsKKwlfX3U4IGNvbnRyb2w7CisKKwlfX3UzMiBzYWRkcjsgLyogU291cmNlIGRldmljZSBhZGRyZXNzICovCisJX191MzIgZGFkZHI7IC8qIERlc3QgZGV2aWNlIGFkZHJlc3MgKi8KK30gSVJEQV9QQUNLOworCQorc3RydWN0IGlfZnJhbWUgeworCV9fdTggY2FkZHI7CisJX191OCBjb250cm9sOworfSBJUkRBX1BBQ0s7CisKK3N0cnVjdCBzbnJtX2ZyYW1lIHsKKwlfX3U4ICBjYWRkcjsKKwlfX3U4ICBjb250cm9sOworCV9fdTMyIHNhZGRyOworCV9fdTMyIGRhZGRyOworCV9fdTggIG5jYWRkcjsKK30gSVJEQV9QQUNLOworCit2b2lkIGlybGFwX3F1ZXVlX3htaXQoc3RydWN0IGlybGFwX2NiICpzZWxmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3ZvaWQgaXJsYXBfc2VuZF9kaXNjb3ZlcnlfeGlkX2ZyYW1lKHN0cnVjdCBpcmxhcF9jYiAqLCBpbnQgUywgX191OCBzLCAKKwkJCQkgICAgX191OCBjb21tYW5kLAorCQkJCSAgICBzdHJ1Y3QgZGlzY292ZXJ5X3QgKmRpc2NvdmVyeSk7Cit2b2lkIGlybGFwX3NlbmRfc25ybV9mcmFtZShzdHJ1Y3QgaXJsYXBfY2IgKiwgc3RydWN0IHFvc19pbmZvICopOwordm9pZCBpcmxhcF9zZW5kX3Rlc3RfZnJhbWUoc3RydWN0IGlybGFwX2NiICpzZWxmLCBfX3U4IGNhZGRyLCBfX3UzMiBkYWRkciwgCisJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqY21kKTsKK3ZvaWQgaXJsYXBfc2VuZF91YV9yZXNwb25zZV9mcmFtZShzdHJ1Y3QgaXJsYXBfY2IgKiwgc3RydWN0IHFvc19pbmZvICopOwordm9pZCBpcmxhcF9zZW5kX2RtX2ZyYW1lKHN0cnVjdCBpcmxhcF9jYiAqc2VsZik7Cit2b2lkIGlybGFwX3NlbmRfcmRfZnJhbWUoc3RydWN0IGlybGFwX2NiICpzZWxmKTsKK3ZvaWQgaXJsYXBfc2VuZF9kaXNjX2ZyYW1lKHN0cnVjdCBpcmxhcF9jYiAqc2VsZik7Cit2b2lkIGlybGFwX3NlbmRfcnJfZnJhbWUoc3RydWN0IGlybGFwX2NiICpzZWxmLCBpbnQgY29tbWFuZCk7CisKK3ZvaWQgaXJsYXBfc2VuZF9kYXRhX3ByaW1hcnkoc3RydWN0IGlybGFwX2NiICosIHN0cnVjdCBza19idWZmICopOwordm9pZCBpcmxhcF9zZW5kX2RhdGFfcHJpbWFyeV9wb2xsKHN0cnVjdCBpcmxhcF9jYiAqLCBzdHJ1Y3Qgc2tfYnVmZiAqKTsKK3ZvaWQgaXJsYXBfc2VuZF9kYXRhX3NlY29uZGFyeShzdHJ1Y3QgaXJsYXBfY2IgKiwgc3RydWN0IHNrX2J1ZmYgKik7Cit2b2lkIGlybGFwX3NlbmRfZGF0YV9zZWNvbmRhcnlfZmluYWwoc3RydWN0IGlybGFwX2NiICosIHN0cnVjdCBza19idWZmICopOwordm9pZCBpcmxhcF9yZXNlbmRfcmVqZWN0ZWRfZnJhbWVzKHN0cnVjdCBpcmxhcF9jYiAqLCBpbnQgY29tbWFuZCk7Cit2b2lkIGlybGFwX3Jlc2VuZF9yZWplY3RlZF9mcmFtZShzdHJ1Y3QgaXJsYXBfY2IgKnNlbGYsIGludCBjb21tYW5kKTsKKwordm9pZCBpcmxhcF9zZW5kX3VpX2ZyYW1lKHN0cnVjdCBpcmxhcF9jYiAqc2VsZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSBfX3U4IGNhZGRyLCBpbnQgY29tbWFuZCk7CisKK2V4dGVybiBpbnQgaXJsYXBfaW5zZXJ0X3Fvc19uZWdvdGlhdGlvbl9wYXJhbXMoc3RydWN0IGlybGFwX2NiICpzZWxmLCAKKwkJCQkJICAgICAgIHN0cnVjdCBza19idWZmICpza2IpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lyZGEvaXJsbXAuaCBiL2luY2x1ZGUvbmV0L2lyZGEvaXJsbXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmFlZmIxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmxtcC5oCkBAIC0wLDAgKzEsMjk1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAKKyAqIEZpbGVuYW1lOiAgICAgIGlybG1wLmgKKyAqIFZlcnNpb246ICAgICAgIDAuOQorICogRGVzY3JpcHRpb246ICAgSXJEQSBMaW5rIE1hbmFnZW1lbnQgUHJvdG9jb2wgKExNUCkgbGF5ZXIKKyAqIFN0YXR1czogICAgICAgIEV4cGVyaW1lbnRhbC4KKyAqIEF1dGhvcjogICAgICAgIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4KKyAqIENyZWF0ZWQgYXQ6ICAgIFN1biBBdWcgMTcgMjA6NTQ6MzIgMTk5NworICogTW9kaWZpZWQgYXQ6ICAgRnJpIERlYyAxMCAxMzoyMzowMSAxOTk5CisgKiBNb2RpZmllZCBieTogICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+CisgKiAKKyAqICAgICBDb3B5cmlnaHQgKGMpIDE5OTgtMTk5OSBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+LCAKKyAqICAgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogICAgIENvcHlyaWdodCAoYykgMjAwMC0yMDAyIEplYW4gVG91cnJpbGhlcyA8anRAaHBsLmhwLmNvbT4KKyAqICAgICAKKyAqICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIAorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIAorICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIAorICogICAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgICBOZWl0aGVyIERhZyBCcmF0dGxpIG5vciBVbml2ZXJzaXR5IG9mIFRyb21z+CBhZG1pdCBsaWFiaWxpdHkgbm9yCisgKiAgICAgcHJvdmlkZSB3YXJyYW50eSBmb3IgYW55IG9mIHRoaXMgc29mdHdhcmUuIFRoaXMgbWF0ZXJpYWwgaXMgCisgKiAgICAgcHJvdmlkZWQgIkFTLUlTIiBhbmQgYXQgbm8gY2hhcmdlLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBJUkxNUF9ICisjZGVmaW5lIElSTE1QX0gKKworI2luY2x1ZGUgPGFzbS9wYXJhbS5oPiAgLyogZm9yIEhaICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjaW5jbHVkZSA8bmV0L2lyZGEvaXJkYS5oPgorI2luY2x1ZGUgPG5ldC9pcmRhL3Fvcy5oPgorI2luY2x1ZGUgPG5ldC9pcmRhL2lybGFwLmg+CQkvKiBMQVBfTUFYX0hFQURFUiwgLi4uICovCisjaW5jbHVkZSA8bmV0L2lyZGEvaXJsbXBfZXZlbnQuaD4KKyNpbmNsdWRlIDxuZXQvaXJkYS9pcnF1ZXVlLmg+CisjaW5jbHVkZSA8bmV0L2lyZGEvZGlzY292ZXJ5Lmg+CisKKy8qIExTQVAtU0VMJ3MgKi8KKyNkZWZpbmUgTFNBUF9NQVNLICAgICAweDdmCisjZGVmaW5lIExTQVBfSUFTICAgICAgMHgwMAorI2RlZmluZSBMU0FQX0FOWSAgICAgIDB4ZmYKKyNkZWZpbmUgTFNBUF9NQVggICAgICAweDZmIC8qIDB4NzAtMHg3ZiBhcmUgcmVzZXJ2ZWQgKi8KKyNkZWZpbmUgTFNBUF9DT05OTEVTUyAweDcwIC8qIENvbm5lY3Rpb25sZXNzIExTQVAsIG1vc3RseSB1c2VkIGZvciBVbHRyYSAqLworCisjZGVmaW5lIERFVl9BRERSX0FOWSAgMHhmZmZmZmZmZgorCisjZGVmaW5lIExNUF9IRUFERVIgICAgICAgICAgMiAgICAvKiBEZXN0IExTQVAgKyBTb3VyY2UgTFNBUCAqLworI2RlZmluZSBMTVBfQ09OVFJPTF9IRUFERVIgIDQKKyNkZWZpbmUgTE1QX1BJRF9IRUFERVIgICAgICAxICAgIC8qIFVzZWQgYnkgVWx0cmEgKi8KKyNkZWZpbmUgTE1QX01BWF9IRUFERVIgICAgICAoTE1QX0NPTlRST0xfSEVBREVSK0xBUF9NQVhfSEVBREVSKQorCisjZGVmaW5lIExNX01BWF9DT05ORUNUSU9OUyAgMTAKKworI2RlZmluZSBMTV9JRExFX1RJTUVPVVQgICAgIDIqSFogLyogMiBzZWNvbmRzIGZvciBub3cgKi8KKwordHlwZWRlZiBlbnVtIHsKKwlTX1BOUCA9IDAsCisJU19QREEsCisJU19DT01QVVRFUiwKKwlTX1BSSU5URVIsCisJU19NT0RFTSwKKwlTX0ZBWCwKKwlTX0xBTiwKKwlTX1RFTEVQSE9OWSwKKwlTX0NPTU0sCisJU19PQkVYLAorCVNfQU5ZLAorCVNfRU5ELAorfSBTRVJWSUNFOworCisvKiBGb3Igc2VsZWN0aXZlIGRpc2NvdmVyeSAqLwordHlwZWRlZiB2b2lkICgqRElTQ09WRVJZX0NBTExCQUNLMSkgKGRpc2NpbmZvX3QgKiwgRElTQ09WRVJZX01PREUsIHZvaWQgKik7CisvKiBGb3IgZXhwaXJ5ICh0aGUgc2FtZSkgKi8KK3R5cGVkZWYgdm9pZCAoKkRJU0NPVkVSWV9DQUxMQkFDSzIpIChkaXNjaW5mb190ICosIERJU0NPVkVSWV9NT0RFLCB2b2lkICopOworCit0eXBlZGVmIHN0cnVjdCB7CisJaXJkYV9xdWV1ZV90IHF1ZXVlOyAvKiBNdXN0IGJlIGZpcnN0ICovCisKKwlfX3UxNl9ob3N0X29yZGVyIGhpbnRzOyAvKiBIaW50IGJpdHMgKi8KK30gaXJsbXBfc2VydmljZV90OworCit0eXBlZGVmIHN0cnVjdCB7CisJaXJkYV9xdWV1ZV90IHF1ZXVlOyAvKiBNdXN0IGJlIGZpcnN0ICovCisKKwlfX3UxNl9ob3N0X29yZGVyIGhpbnRfbWFzazsKKworCURJU0NPVkVSWV9DQUxMQkFDSzEgZGlzY29fY2FsbGJhY2s7CS8qIFNlbGVjdGl2ZSBkaXNjb3ZlcnkgKi8KKwlESVNDT1ZFUllfQ0FMTEJBQ0syIGV4cGlyX2NhbGxiYWNrOwkvKiBTZWxlY3RpdmUgZXhwaXJhdGlvbiAqLworCXZvaWQgKnByaXY7ICAgICAgICAgICAgICAgIC8qIFVzZWQgdG8gaWRlbnRpZnkgY2xpZW50ICovCit9IGlybG1wX2NsaWVudF90OworCisvKgorICogIEluZm9ybWF0aW9uIGFib3V0IGVhY2ggbG9naWNhbCBMU0FQIGNvbm5lY3Rpb24KKyAqLworc3RydWN0IGxzYXBfY2IgeworCWlyZGFfcXVldWVfdCBxdWV1ZTsgICAgICAvKiBNdXN0IGJlIGZpcnN0ICovCisJbWFnaWNfdCBtYWdpYzsKKworCXVuc2lnbmVkIGxvbmcgY29ubmVjdGVkOwkvKiBzZXRfYml0IHVzZWQgb24gdGhpcyAqLworCWludCAgcGVyc2lzdGVudDsKKworCV9fdTggc2xzYXBfc2VsOyAgIC8qIFNvdXJjZSAodGhpcykgTFNBUCBhZGRyZXNzICovCisJX191OCBkbHNhcF9zZWw7ICAgLyogRGVzdGluYXRpb24gTFNBUCBhZGRyZXNzIChpZiBjb25uZWN0ZWQpICovCisjaWZkZWYgQ09ORklHX0lSREFfVUxUUkEKKwlfX3U4IHBpZDsgICAgICAgICAvKiBVc2VkIGJ5IGNvbm5lY3Rpb25sZXNzIExTQVAgKi8KKyNlbmRpZiAvKiBDT05GSUdfSVJEQV9VTFRSQSAqLworCXN0cnVjdCBza19idWZmICpjb25uX3NrYjsgLyogU3RvcmUgc2tiIGhlcmUgd2hpbGUgY29ubmVjdGluZyAqLworCisJc3RydWN0IHRpbWVyX2xpc3Qgd2F0Y2hkb2dfdGltZXI7CisKKwlJUkxNUF9TVEFURSAgICAgbHNhcF9zdGF0ZTsgIC8qIENvbm5lY3Rpb24gc3RhdGUgKi8KKwlub3RpZnlfdCAgICAgICAgbm90aWZ5OyAgICAgIC8qIEluZGljYXRpb24vQ29uZmlybSBlbnRyeSBwb2ludHMgKi8KKwlzdHJ1Y3QgcW9zX2luZm8gcW9zOyAgICAgICAgIC8qIFFvUyBmb3IgdGhpcyBjb25uZWN0aW9uICovCisKKwlzdHJ1Y3QgbGFwX2NiICpsYXA7IC8qIFBvaW50ZXIgdG8gTEFQIGNvbm5lY3Rpb24gc3RydWN0dXJlICovCit9OworCisvKgorICogIFVzZWQgZm9yIGNhY2hpbmcgdGhlIGxhc3Qgc2xzYXAtPmRsc2FwLT5oYW5kbGUgbWFwcGluZworICoKKyAqIFdlIGRvbid0IG5lZWQgdG8ga2VlcC9tYXRjaCB0aGUgcmVtb3RlIGFkZHJlc3MgaW4gdGhlIGNhY2hlIGJlY2F1c2UKKyAqIHdlIGFyZSBhc3NvY2lhdGVkIHdpdGggYSBzcGVjaWZpYyBMQVAgKHdoaWNoIGltcGxpZXMgaXQpLgorICogSmVhbiBJSQorICovCit0eXBlZGVmIHN0cnVjdCB7CisJaW50IHZhbGlkOworCisJX191OCBzbHNhcF9zZWw7CisJX191OCBkbHNhcF9zZWw7CisJc3RydWN0IGxzYXBfY2IgKmxzYXA7Cit9IENBQ0hFX0VOVFJZOworCisvKgorICogIEluZm9ybWF0aW9uIGFib3V0IGVhY2ggcmVnaXN0cmVkIElyTEFQIGxheWVyCisgKi8KK3N0cnVjdCBsYXBfY2IgeworCWlyZGFfcXVldWVfdCBxdWV1ZTsgLyogTXVzdCBiZSBmaXJzdCAqLworCW1hZ2ljX3QgbWFnaWM7CisKKwlpbnQgcmVhc29uOyAgICAvKiBMQVAgZGlzY29ubmVjdCByZWFzb24gKi8KKworCUlSTE1QX1NUQVRFIGxhcF9zdGF0ZTsKKworCXN0cnVjdCBpcmxhcF9jYiAqaXJsYXA7ICAgLyogSW5zdGFuY2Ugb2YgSXJMQVAgbGF5ZXIgKi8KKwloYXNoYmluX3QgKmxzYXBzOyAgICAgICAgIC8qIExTQVAgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbGluayAqLworCXN0cnVjdCBsc2FwX2NiICpmbG93X25leHQ7CS8qIE5leHQgbHNhcCB0byBiZSBwb2xsZWQgZm9yIFR4ICovCisKKwlfX3U4ICBjYWRkcjsgIC8qIENvbm5lY3Rpb24gYWRkcmVzcyAqLworIAlfX3UzMiBzYWRkcjsgIC8qIFNvdXJjZSBkZXZpY2UgYWRkcmVzcyAqLworIAlfX3UzMiBkYWRkcjsgIC8qIERlc3RpbmF0aW9uIGRldmljZSBhZGRyZXNzICovCisJCisJc3RydWN0IHFvc19pbmZvICpxb3M7ICAvKiBMQVAgUW9TIGZvciB0aGlzIHNlc3Npb24gKi8KKwlzdHJ1Y3QgdGltZXJfbGlzdCBpZGxlX3RpbWVyOworCQorI2lmZGVmIENPTkZJR19JUkRBX0NBQ0hFX0xBU1RfTFNBUAorCS8qIFRoZSBsc2FwIGNhY2hlIHdhcyBtb3ZlZCBmcm9tIHN0cnVjdCBpcmxtcF9jYiB0byBoZXJlIGJlY2F1c2UKKwkgKiBpdCBtdXN0IGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWMgTEFQLiBBbHNvLCB0aGlzCisJICogaW1wcm92ZXMgcGVyZm9ybWFuY2UuIC0gSmVhbiBJSSAqLworCUNBQ0hFX0VOVFJZIGNhY2hlOyAgLyogQ2FjaGluZyBsYXN0IHNsc2FwLT5kbHNhcC0+aGFuZGxlIG1hcHBpbmcgKi8KKyNlbmRpZgorfTsKKworLyoKKyAqICBNYWluIHN0cnVjdHVyZSBmb3IgSXJMTVAKKyAqLworc3RydWN0IGlybG1wX2NiIHsKKwltYWdpY190IG1hZ2ljOworCisJX191OCBjb25mbGljdF9mbGFnOworCQorCWRpc2NvdmVyeV90IGRpc2NvdmVyeV9jbWQ7IC8qIERpc2NvdmVyeSBjb21tYW5kIHRvIHVzZSBieSBJckxBUCAqLworCWRpc2NvdmVyeV90IGRpc2NvdmVyeV9yc3A7IC8qIERpc2NvdmVyeSByZXNwb25zZSB0byB1c2UgYnkgSXJMQVAgKi8KKworCS8qIExhc3QgbHNhcCBwaWNrZWQgYXV0b21hdGljYWxseSBieSBpcmxtcF9maW5kX2ZyZWVfc2xzYXAoKSAqLworCWludAlsYXN0X2xzYXBfc2VsOworCisJc3RydWN0IHRpbWVyX2xpc3QgZGlzY292ZXJ5X3RpbWVyOworCisgCWhhc2hiaW5fdCAqbGlua3M7ICAgICAgICAgLyogSXJMQVAgY29ubmVjdGlvbiB0YWJsZSAqLworCWhhc2hiaW5fdCAqdW5jb25uZWN0ZWRfbHNhcHM7CisgCWhhc2hiaW5fdCAqY2xpZW50czsKKwloYXNoYmluX3QgKnNlcnZpY2VzOworCisJaGFzaGJpbl90ICpjYWNoZWxvZzsJLyogQ3VycmVudCBkaXNjb3ZlcnkgbG9nICovCisKKwlpbnQgcnVubmluZzsKKworCV9fdTE2X2hvc3Rfb3JkZXIgaGludHM7IC8qIEhpbnQgYml0cyAqLworfTsKKworLyogUHJvdG90eXBlIGRlY2xhcmF0aW9ucyAqLworaW50ICBpcmxtcF9pbml0KHZvaWQpOwordm9pZCBpcmxtcF9jbGVhbnVwKHZvaWQpOworc3RydWN0IGxzYXBfY2IgKmlybG1wX29wZW5fbHNhcChfX3U4IHNsc2FwLCBub3RpZnlfdCAqbm90aWZ5LCBfX3U4IHBpZCk7Cit2b2lkIGlybG1wX2Nsb3NlX2xzYXAoIHN0cnVjdCBsc2FwX2NiICpzZWxmKTsKKworX191MTYgaXJsbXBfc2VydmljZV90b19oaW50KGludCBzZXJ2aWNlKTsKK3ZvaWQgKmlybG1wX3JlZ2lzdGVyX3NlcnZpY2UoX191MTYgaGludHMpOworaW50IGlybG1wX3VucmVnaXN0ZXJfc2VydmljZSh2b2lkICpoYW5kbGUpOwordm9pZCAqaXJsbXBfcmVnaXN0ZXJfY2xpZW50KF9fdTE2IGhpbnRfbWFzaywgRElTQ09WRVJZX0NBTExCQUNLMSBkaXNjb19jbGIsCisJCQkgICAgRElTQ09WRVJZX0NBTExCQUNLMiBleHBpcl9jbGIsIHZvaWQgKnByaXYpOworaW50IGlybG1wX3VucmVnaXN0ZXJfY2xpZW50KHZvaWQgKmhhbmRsZSk7CitpbnQgaXJsbXBfdXBkYXRlX2NsaWVudCh2b2lkICpoYW5kbGUsIF9fdTE2IGhpbnRfbWFzaywgCisJCQlESVNDT1ZFUllfQ0FMTEJBQ0sxIGRpc2NvX2NsYiwKKwkJCURJU0NPVkVSWV9DQUxMQkFDSzIgZXhwaXJfY2xiLCB2b2lkICpwcml2KTsKKwordm9pZCBpcmxtcF9yZWdpc3Rlcl9saW5rKHN0cnVjdCBpcmxhcF9jYiAqLCBfX3UzMiBzYWRkciwgbm90aWZ5X3QgKik7Cit2b2lkIGlybG1wX3VucmVnaXN0ZXJfbGluayhfX3UzMiBzYWRkcik7CisKK2ludCAgaXJsbXBfY29ubmVjdF9yZXF1ZXN0KHN0cnVjdCBsc2FwX2NiICosIF9fdTggZGxzYXBfc2VsLCAKKwkJCSAgIF9fdTMyIHNhZGRyLCBfX3UzMiBkYWRkciwKKwkJCSAgIHN0cnVjdCBxb3NfaW5mbyAqLCBzdHJ1Y3Qgc2tfYnVmZiAqKTsKK3ZvaWQgaXJsbXBfY29ubmVjdF9pbmRpY2F0aW9uKHN0cnVjdCBsc2FwX2NiICpzZWxmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2ludCAgaXJsbXBfY29ubmVjdF9yZXNwb25zZShzdHJ1Y3QgbHNhcF9jYiAqLCBzdHJ1Y3Qgc2tfYnVmZiAqKTsKK3ZvaWQgaXJsbXBfY29ubmVjdF9jb25maXJtKHN0cnVjdCBsc2FwX2NiICosIHN0cnVjdCBza19idWZmICopOworc3RydWN0IGxzYXBfY2IgKmlybG1wX2R1cChzdHJ1Y3QgbHNhcF9jYiAqc2VsZiwgdm9pZCAqaW5zdGFuY2UpOworCit2b2lkIGlybG1wX2Rpc2Nvbm5lY3RfaW5kaWNhdGlvbihzdHJ1Y3QgbHNhcF9jYiAqc2VsZiwgTE1fUkVBU09OIHJlYXNvbiwgCisJCQkJIHN0cnVjdCBza19idWZmICp1c2VyZGF0YSk7CitpbnQgIGlybG1wX2Rpc2Nvbm5lY3RfcmVxdWVzdChzdHJ1Y3QgbHNhcF9jYiAqLCBzdHJ1Y3Qgc2tfYnVmZiAqdXNlcmRhdGEpOworCit2b2lkIGlybG1wX2Rpc2NvdmVyeV9jb25maXJtKGhhc2hiaW5fdCAqZGlzY292ZXJ5X2xvZywgRElTQ09WRVJZX01PREUgbW9kZSk7Cit2b2lkIGlybG1wX2Rpc2NvdmVyeV9yZXF1ZXN0KGludCBuc2xvdHMpOworZGlzY2luZm9fdCAqaXJsbXBfZ2V0X2Rpc2NvdmVyaWVzKGludCAqcG4sIF9fdTE2IG1hc2ssIGludCBuc2xvdHMpOwordm9pZCBpcmxtcF9kb19leHBpcnkodm9pZCk7Cit2b2lkIGlybG1wX2RvX2Rpc2NvdmVyeShpbnQgbnNsb3RzKTsKK2Rpc2NvdmVyeV90ICppcmxtcF9nZXRfZGlzY292ZXJ5X3Jlc3BvbnNlKHZvaWQpOwordm9pZCBpcmxtcF9kaXNjb3ZlcnlfZXhwaXJ5KGRpc2NpbmZvX3QgKmV4cGlyeSwgaW50IG51bWJlcik7CisKK2ludCAgaXJsbXBfZGF0YV9yZXF1ZXN0KHN0cnVjdCBsc2FwX2NiICosIHN0cnVjdCBza19idWZmICopOwordm9pZCBpcmxtcF9kYXRhX2luZGljYXRpb24oc3RydWN0IGxzYXBfY2IgKiwgc3RydWN0IHNrX2J1ZmYgKik7CisKK2ludCAgaXJsbXBfdWRhdGFfcmVxdWVzdChzdHJ1Y3QgbHNhcF9jYiAqLCBzdHJ1Y3Qgc2tfYnVmZiAqKTsKK3ZvaWQgaXJsbXBfdWRhdGFfaW5kaWNhdGlvbihzdHJ1Y3QgbHNhcF9jYiAqLCBzdHJ1Y3Qgc2tfYnVmZiAqKTsKKworI2lmZGVmIENPTkZJR19JUkRBX1VMVFJBCitpbnQgIGlybG1wX2Nvbm5sZXNzX2RhdGFfcmVxdWVzdChzdHJ1Y3QgbHNhcF9jYiAqLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBfX3U4KTsKK3ZvaWQgaXJsbXBfY29ubmxlc3NfZGF0YV9pbmRpY2F0aW9uKHN0cnVjdCBsc2FwX2NiICosIHN0cnVjdCBza19idWZmICopOworI2VuZGlmIC8qIENPTkZJR19JUkRBX1VMVFJBICovCisKK3ZvaWQgaXJsbXBfc3RhdHVzX2luZGljYXRpb24oc3RydWN0IGxhcF9jYiAqLCBMSU5LX1NUQVRVUyBsaW5rLCBMT0NLX1NUQVRVUyBsb2NrKTsKK3ZvaWQgaXJsbXBfZmxvd19pbmRpY2F0aW9uKHN0cnVjdCBsYXBfY2IgKnNlbGYsIExPQ0FMX0ZMT1cgZmxvdyk7CisKK0xNX1JFQVNPTiBpcmxtcF9jb252ZXJ0X2xhcF9yZWFzb24oTEFQX1JFQVNPTik7CisKK3N0YXRpYyBpbmxpbmUgX191MzIgaXJsbXBfZ2V0X3NhZGRyKGNvbnN0IHN0cnVjdCBsc2FwX2NiICpzZWxmKQoreworCXJldHVybiAoc2VsZiAmJiBzZWxmLT5sYXApID8gc2VsZi0+bGFwLT5zYWRkciA6IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX191MzIgaXJsbXBfZ2V0X2RhZGRyKGNvbnN0IHN0cnVjdCBsc2FwX2NiICpzZWxmKQoreworCXJldHVybiAoc2VsZiAmJiBzZWxmLT5sYXApID8gc2VsZi0+bGFwLT5kYWRkciA6IDA7Cit9CisKK2V4dGVybiBjb25zdCBjaGFyICppcmxtcF9yZWFzb25zW107CitleHRlcm4gaW50IHN5c2N0bF9kaXNjb3ZlcnlfdGltZW91dDsKK2V4dGVybiBpbnQgc3lzY3RsX2Rpc2NvdmVyeV9zbG90czsKK2V4dGVybiBpbnQgc3lzY3RsX2Rpc2NvdmVyeTsKK2V4dGVybiBpbnQgc3lzY3RsX2xhcF9rZWVwYWxpdmVfdGltZTsJLyogaW4gbXMsIGRlZmF1bHQgaXMgTE1fSURMRV9USU1FT1VUICovCitleHRlcm4gc3RydWN0IGlybG1wX2NiICppcmxtcDsKKworLyogQ2hlY2sgaWYgTEFQIHF1ZXVlIGlzIGZ1bGwuCisgKiBVc2VkIGJ5IElyVFRQIGZvciBsb3cgY29udHJvbCwgc2VlIGNvbW1lbnRzIGluIGlybGFwLmggLSBKZWFuIElJICovCitzdGF0aWMgaW5saW5lIGludCBpcmxtcF9sYXBfdHhfcXVldWVfZnVsbChzdHJ1Y3QgbHNhcF9jYiAqc2VsZikKK3sKKwlpZiAoc2VsZiA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKwlpZiAoc2VsZi0+bGFwID09IE5VTEwpCisJCXJldHVybiAwOworCWlmIChzZWxmLT5sYXAtPmlybGFwID09IE5VTEwpCisJCXJldHVybiAwOworCisJcmV0dXJuKElSTEFQX0dFVF9UWF9RVUVVRV9MRU4oc2VsZi0+bGFwLT5pcmxhcCkgPj0gTEFQX0hJR0hfVEhSRVNIT0xEKTsKK30KKworLyogQWZ0ZXIgZG9pbmcgYSBpcmxtcF9kdXAoKSwgdGhpcyBnZXQgb25lIG9mIHRoZSB0d28gc29ja2V0IGJhY2sgaW50bworICogYSBzdGF0ZSB3aGVyZSBpdCdzIHdhaXRpbmcgaW5jb21taW5nIGNvbm5lY3Rpb25zLgorICogTm90ZSA6IHRoaXMgY2FuIGJlIHVzZWQgKm9ubHkqIGlmIHRoZSBzb2NrZXQgaXMgbm90IHlldCBjb25uZWN0ZWQKKyAqIChpLmUuIE5PIGlybG1wX2Nvbm5lY3RfcmVzcG9uc2UoKSBkb25lIG9uIHRoaXMgc29ja2V0KS4KKyAqIC0gSmVhbiBJSSAqLworc3RhdGljIGlubGluZSB2b2lkIGlybG1wX2xpc3RlbihzdHJ1Y3QgbHNhcF9jYiAqc2VsZikKK3sKKwlzZWxmLT5kbHNhcF9zZWwgPSBMU0FQX0FOWTsKKwlzZWxmLT5sYXAgPSBOVUxMOworCXNlbGYtPmxzYXBfc3RhdGUgPSBMU0FQX0RJU0NPTk5FQ1RFRDsKKwkvKiBTdGFydGVkIHdoZW4gd2UgcmVjZWl2ZWQgdGhlIExNX0NPTk5FQ1RfSU5ESUNBVElPTiAqLworCWRlbF90aW1lcigmc2VsZi0+d2F0Y2hkb2dfdGltZXIpOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lyZGEvaXJsbXBfZXZlbnQuaCBiL2luY2x1ZGUvbmV0L2lyZGEvaXJsbXBfZXZlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2M2ZjgxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmxtcF9ldmVudC5oCkBAIC0wLDAgKzEsOTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgIAorICogRmlsZW5hbWU6ICAgICAgaXJsbXBfZXZlbnQuaAorICogVmVyc2lvbjogICAgICAgMC4xCisgKiBEZXNjcmlwdGlvbjogICBJckRBLUxNUCBldmVudCBoYW5kbGluZworICogU3RhdHVzOiAgICAgICAgRXhwZXJpbWVudGFsLgorICogQXV0aG9yOiAgICAgICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgorICogQ3JlYXRlZCBhdDogICAgTW9uIEF1ZyAgNCAyMDo0MDo1MyAxOTk3CisgKiBNb2RpZmllZCBhdDogICBUaHUgSnVsICA4IDEyOjE4OjU0IDE5OTkKKyAqIE1vZGlmaWVkIGJ5OiAgIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4KKyAqIAorICogICAgIENvcHlyaWdodCAoYykgMTk5NywgMTk5OSBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+LCAKKyAqICAgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogICAgIENvcHlyaWdodCAoYykgMjAwMC0yMDAyIEplYW4gVG91cnJpbGhlcyA8anRAaHBsLmhwLmNvbT4KKyAqICAgICAKKyAqICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIAorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIAorICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIAorICogICAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgICBOZWl0aGVyIERhZyBCcmF0dGxpIG5vciBVbml2ZXJzaXR5IG9mIFRyb21z+CBhZG1pdCBsaWFiaWxpdHkgbm9yCisgKiAgICAgcHJvdmlkZSB3YXJyYW50eSBmb3IgYW55IG9mIHRoaXMgc29mdHdhcmUuIFRoaXMgbWF0ZXJpYWwgaXMgCisgKiAgICAgcHJvdmlkZWQgIkFTLUlTIiBhbmQgYXQgbm8gY2hhcmdlLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBJUkxNUF9FVkVOVF9ICisjZGVmaW5lIElSTE1QX0VWRU5UX0gKKworLyogQSBmZXcgZm9yd2FyZCBkZWNsYXJhdGlvbnMgKHRvIG1ha2UgY29tcGlsZXIgaGFwcHkpICovCitzdHJ1Y3QgaXJsbXBfY2I7CitzdHJ1Y3QgbHNhcF9jYjsKK3N0cnVjdCBsYXBfY2I7CitzdHJ1Y3QgZGlzY292ZXJ5X3Q7CisKKy8qIExBUCBzdGF0ZXMgKi8KK3R5cGVkZWYgZW51bSB7CisJLyogSXJMQVAgY29ubmVjdGlvbiBjb250cm9sIHN0YXRlcyAqLworCUxBUF9TVEFOREJZLCAgICAgICAgICAgICAvKiBObyBMQVAgY29ubmVjdGlvbiAqLworCUxBUF9VX0NPTk5FQ1QsICAgICAgICAgICAvKiBTdGFydGluZyBMQVAgY29ubmVjdGlvbiAqLworCUxBUF9BQ1RJVkUsICAgICAgICAgICAgICAvKiBMQVAgY29ubmVjdGlvbiBpcyBhY3RpdmUgKi8KK30gSVJMTVBfU1RBVEU7CisKKy8qIExTQVAgY29ubmVjdGlvbiBjb250cm9sIHN0YXRlcyAqLwordHlwZWRlZiBlbnVtIHsKKwlMU0FQX0RJU0NPTk5FQ1RFRCwgICAgICAgIC8qIE5vIExTQVAgY29ubmVjdGlvbiAqLworCUxTQVBfQ09OTkVDVCwgICAgICAgICAgICAgLyogQ29ubmVjdCBpbmRpY2F0aW9uIGZyb20gcGVlciAqLworCUxTQVBfQ09OTkVDVF9QRU5ELCAgICAgICAgLyogQ29ubmVjdCByZXF1ZXN0IGZyb20gc2VydmljZSB1c2VyICovCisJTFNBUF9EQVRBX1RSQU5TRkVSX1JFQURZLCAvKiBMU0FQIGNvbm5lY3Rpb24gZXN0YWJsaXNoZWQgKi8gICAgICAgICAgCisJTFNBUF9TRVRVUCwgICAgICAgICAgICAgICAvKiBUcnlpbmcgdG8gc2V0IHVwIExTQVAgY29ubmVjdGlvbiAqLworCUxTQVBfU0VUVVBfUEVORCwgICAgICAgICAgLyogUmVxdWVzdCB0byBzdGFydCBMQVAgY29ubmVjdGlvbiAqLworfSBMU0FQX1NUQVRFOworCit0eXBlZGVmIGVudW0geworCS8qIExTQVAgZXZlbnRzICovCisgCUxNX0NPTk5FQ1RfUkVRVUVTVCwKKyAJTE1fQ09OTkVDVF9DT05GSVJNLAorCUxNX0NPTk5FQ1RfUkVTUE9OU0UsCisgCUxNX0NPTk5FQ1RfSU5ESUNBVElPTiwgCQorCQorCUxNX0RJU0NPTk5FQ1RfSU5ESUNBVElPTiwKKwlMTV9ESVNDT05ORUNUX1JFUVVFU1QsCisKKyAJTE1fREFUQV9SRVFVRVNULAorCUxNX1VEQVRBX1JFUVVFU1QsCisgCUxNX0RBVEFfSU5ESUNBVElPTiwKKwlMTV9VREFUQV9JTkRJQ0FUSU9OLAorCisJTE1fV0FUQ0hET0dfVElNRU9VVCwKKworCS8qIElyTEFQIGV2ZW50cyAqLworCUxNX0xBUF9DT05ORUNUX1JFUVVFU1QsCisgCUxNX0xBUF9DT05ORUNUX0lORElDQVRJT04sIAorIAlMTV9MQVBfQ09OTkVDVF9DT05GSVJNLAorIAlMTV9MQVBfRElTQ09OTkVDVF9JTkRJQ0FUSU9OLCAKKwlMTV9MQVBfRElTQ09OTkVDVF9SRVFVRVNULAorCUxNX0xBUF9ESVNDT1ZFUllfUkVRVUVTVCwKKyAJTE1fTEFQX0RJU0NPVkVSWV9DT05GSVJNLAorCUxNX0xBUF9JRExFX1RJTUVPVVQsCit9IElSTE1QX0VWRU5UOworCitleHRlcm4gY29uc3QgY2hhciAqaXJsbXBfc3RhdGVbXTsKK2V4dGVybiBjb25zdCBjaGFyICppcmxzYXBfc3RhdGVbXTsKKwordm9pZCBpcmxtcF93YXRjaGRvZ190aW1lcl9leHBpcmVkKHZvaWQgKmRhdGEpOwordm9pZCBpcmxtcF9kaXNjb3ZlcnlfdGltZXJfZXhwaXJlZCh2b2lkICpkYXRhKTsKK3ZvaWQgaXJsbXBfaWRsZV90aW1lcl9leHBpcmVkKHZvaWQgKmRhdGEpOworCit2b2lkIGlybG1wX2RvX2xhcF9ldmVudChzdHJ1Y3QgbGFwX2NiICpzZWxmLCBJUkxNUF9FVkVOVCBldmVudCwgCisJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2ludCBpcmxtcF9kb19sc2FwX2V2ZW50KHN0cnVjdCBsc2FwX2NiICpzZWxmLCBJUkxNUF9FVkVOVCBldmVudCwgCisJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKworI2VuZGlmIC8qIElSTE1QX0VWRU5UX0ggKi8KKworCisKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXJkYS9pcmxtcF9mcmFtZS5oIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmxtcF9mcmFtZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViM2FkMTUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9pcmRhL2lybG1wX2ZyYW1lLmgKQEAgLTAsMCArMSw2MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgCisgKiBGaWxlbmFtZTogICAgICBpcmxtcF9mcmFtZS5oCisgKiBWZXJzaW9uOiAgICAgICAwLjkKKyAqIERlc2NyaXB0aW9uOiAgIAorICogU3RhdHVzOiAgICAgICAgRXhwZXJpbWVudGFsLgorICogQXV0aG9yOiAgICAgICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgorICogQ3JlYXRlZCBhdDogICAgVHVlIEF1ZyAxOSAwMjowOTo1OSAxOTk3CisgKiBNb2RpZmllZCBhdDogICBGcmkgRGVjIDEwIDEzOjIxOjUzIDE5OTkKKyAqIE1vZGlmaWVkIGJ5OiAgIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4KKyAqIAorICogICAgIENvcHlyaWdodCAoYykgMTk5NywgMTk5OSBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+LCAKKyAqICAgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogICAgIAorICogICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgCisgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgCisgKiAgICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICAgIE5laXRoZXIgRGFnIEJyYXR0bGkgbm9yIFVuaXZlcnNpdHkgb2YgVHJvbXP4IGFkbWl0IGxpYWJpbGl0eSBub3IKKyAqICAgICBwcm92aWRlIHdhcnJhbnR5IGZvciBhbnkgb2YgdGhpcyBzb2Z0d2FyZS4gVGhpcyBtYXRlcmlhbCBpcyAKKyAqICAgICBwcm92aWRlZCAiQVMtSVMiIGFuZCBhdCBubyBjaGFyZ2UuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIElSTUxQX0ZSQU1FX0gKKyNkZWZpbmUgSVJNTFBfRlJBTUVfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisKKyNpbmNsdWRlIDxuZXQvaXJkYS9kaXNjb3ZlcnkuaD4KKworLyogSXJMTVAgZnJhbWUgb3Bjb2RlcyAqLworI2RlZmluZSBDT05ORUNUX0NNRCAgICAweDAxCisjZGVmaW5lIENPTk5FQ1RfQ05GICAgIDB4ODEKKyNkZWZpbmUgRElTQ09OTkVDVCAgICAgMHgwMgorI2RlZmluZSBBQ0NFU1NNT0RFX0NNRCAweDAzCisjZGVmaW5lIEFDQ0VTU01PREVfQ05GIDB4ODMKKworI2RlZmluZSBDT05UUk9MX0JJVCAgICAweDgwCisKK3ZvaWQgaXJsbXBfc2VuZF9kYXRhX3BkdShzdHJ1Y3QgbGFwX2NiICpzZWxmLCBfX3U4IGRsc2FwLCBfX3U4IHNsc2FwLAorCQkJCWludCBleHBlZGl0ZWQsIHN0cnVjdCBza19idWZmICpza2IpOwordm9pZCBpcmxtcF9zZW5kX2xjZl9wZHUoc3RydWN0IGxhcF9jYiAqc2VsZiwgX191OCBkbHNhcCwgX191OCBzbHNhcCwgCisJCQlfX3U4IG9wY29kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Cit2b2lkIGlybG1wX2xpbmtfZGF0YV9pbmRpY2F0aW9uKHN0cnVjdCBsYXBfY2IgKiwgc3RydWN0IHNrX2J1ZmYgKiwgCisJCQkJaW50IHVucmVsaWFibGUpOworI2lmZGVmIENPTkZJR19JUkRBX1VMVFJBCit2b2lkIGlybG1wX2xpbmtfdW5pdGRhdGFfaW5kaWNhdGlvbihzdHJ1Y3QgbGFwX2NiICosIHN0cnVjdCBza19idWZmICopOworI2VuZGlmIC8qIENPTkZJR19JUkRBX1VMVFJBICovCisKK3ZvaWQgaXJsbXBfbGlua19jb25uZWN0X2luZGljYXRpb24oc3RydWN0IGxhcF9jYiAqLCBfX3UzMiBzYWRkciwgX191MzIgZGFkZHIsCisJCQkJICAgc3RydWN0IHFvc19pbmZvICpxb3MsIHN0cnVjdCBza19idWZmICpza2IpOwordm9pZCBpcmxtcF9saW5rX2Nvbm5lY3RfcmVxdWVzdChfX3UzMiBkYWRkcik7Cit2b2lkIGlybG1wX2xpbmtfY29ubmVjdF9jb25maXJtKHN0cnVjdCBsYXBfY2IgKnNlbGYsIHN0cnVjdCBxb3NfaW5mbyAqcW9zLCAKKwkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3ZvaWQgaXJsbXBfbGlua19kaXNjb25uZWN0X2luZGljYXRpb24oc3RydWN0IGxhcF9jYiAqLCBzdHJ1Y3QgaXJsYXBfY2IgKiwgCisJCQkJICAgICAgTEFQX1JFQVNPTiByZWFzb24sIHN0cnVjdCBza19idWZmICopOyAKK3ZvaWQgaXJsbXBfbGlua19kaXNjb3ZlcnlfY29uZmlybShzdHJ1Y3QgbGFwX2NiICpzZWxmLCBoYXNoYmluX3QgKmxvZyk7Cit2b2lkIGlybG1wX2xpbmtfZGlzY292ZXJ5X2luZGljYXRpb24oc3RydWN0IGxhcF9jYiAqLCBkaXNjb3ZlcnlfdCAqZGlzY292ZXJ5KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcmRhL2lybW9kLmggYi9pbmNsdWRlL25ldC9pcmRhL2lybW9kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJiNDQ2YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L2lyZGEvaXJtb2QuaApAQCAtMCwwICsxLDEwOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgCisgKiBGaWxlbmFtZTogICAgICBpcm1vZC5oCisgKiBWZXJzaW9uOiAgICAgICAwLjMKKyAqIERlc2NyaXB0aW9uOiAgIElyREEgbW9kdWxlIGFuZCB1dGlsaXRpZXMgZnVuY3Rpb25zCisgKiBTdGF0dXM6ICAgICAgICBFeHBlcmltZW50YWwuCisgKiBBdXRob3I6ICAgICAgICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+CisgKiBDcmVhdGVkIGF0OiAgICBNb24gRGVjIDE1IDEzOjU4OjUyIDE5OTcKKyAqIE1vZGlmaWVkIGF0OiAgIEZyaSBKYW4gMjggMTM6MTU6MjQgMjAwMAorICogTW9kaWZpZWQgYnk6ICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgorICoKKyAqICAgICBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMCBEYWcgQnJhdHRsaSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqICAgICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwMiBKZWFuIFRvdXJyaWxoZXMgPGp0QGhwbC5ocC5jb20+CisgKiAgICAgIAorICogICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgCisgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgCisgKiAgICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiAgCisgKiAgICAgTmVpdGhlciBEYWcgQnJhdHRsaSBub3IgVW5pdmVyc2l0eSBvZiBUcm9tc/ggYWRtaXQgbGlhYmlsaXR5IG5vcgorICogICAgIHByb3ZpZGUgd2FycmFudHkgZm9yIGFueSBvZiB0aGlzIHNvZnR3YXJlLiBUaGlzIG1hdGVyaWFsIGlzIAorICogICAgIHByb3ZpZGVkICJBUy1JUyIgYW5kIGF0IG5vIGNoYXJnLgorICogICAgIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIElSTU9EX0gKKyNkZWZpbmUgSVJNT0RfSAorCisvKiBNaXNjIHN0YXR1cyBpbmZvcm1hdGlvbiAqLwordHlwZWRlZiBlbnVtIHsKKwlTVEFUVVNfT0ssCisJU1RBVFVTX0FCT1JURUQsCisJU1RBVFVTX05PX0FDVElWSVRZLAorCVNUQVRVU19OT0lTWSwKKwlTVEFUVVNfUkVNT1RFLAorfSBMSU5LX1NUQVRVUzsKKwordHlwZWRlZiBlbnVtIHsKKwlMT0NLX05PX0NIQU5HRSwKKwlMT0NLX0xPQ0tFRCwKKwlMT0NLX1VOTE9DS0VELAorfSBMT0NLX1NUQVRVUzsKKwordHlwZWRlZiBlbnVtIHsgRkxPV19TVE9QLCBGTE9XX1NUQVJUIH0gTE9DQUxfRkxPVzsKKworLyogIAorICogIElyTE1QIGRpc2Nvbm5lY3QgcmVhc29ucy4gVGhlIG9yZGVyIGlzIHZlcnkgaW1wb3J0YW50LCBzaW5jZSB0aGV5IAorICogIGNvcnJlc3BvbmQgdG8gZGlzY29ubmVjdCByZWFzb25zIHNlbnQgaW4gSXJMTVAgZGlzY29ubmVjdCBmcmFtZXMsIHNvCisgKiAgcGxlYXNlIGRvIG5vdCB0b3VjaCA6LSkKKyAqLwordHlwZWRlZiBlbnVtIHsKKwlMTV9VU0VSX1JFUVVFU1QgPSAxLCAgLyogVXNlciByZXF1ZXN0ICovCisJTE1fTEFQX0RJU0NPTk5FQ1QsICAgIC8qIFVuZXhwZWN0ZWQgSXJMQVAgZGlzY29ubmVjdCAqLworCUxNX0NPTk5FQ1RfRkFJTFVSRSwgICAvKiBGYWlsZWQgdG8gZXN0YWJsaXNoIElyTEFQIGNvbm5lY3Rpb24gKi8KKwlMTV9MQVBfUkVTRVQsICAgICAgICAgLyogSXJMQVAgcmVzZXQgKi8KKwlMTV9JTklUX0RJU0NPTk5FQ1QsICAgLyogTGluayBNYW5hZ2VtZW50IGluaXRpYXRlZCBkaXNjb25uZWN0ICovCisJTE1fTFNBUF9OT1RDT05OLCAgICAgIC8qIERhdGEgZGVsaXZlcmVkIG9uIHVuY29ubmVjdGVkIExTQVAgKi8KKwlMTV9OT05fUkVTUF9DTElFTlQsICAgLyogTm9uIHJlc3BvbnNpdmUgTE0tTVVYIGNsaWVudCAqLworCUxNX05PX0FWQUlMX0NMSUVOVCwgICAvKiBObyBhdmFpbGFibGUgTE0tTVVYIGNsaWVudCAqLworCUxNX0NPTk5fSEFMRl9PUEVOLCAgICAvKiBDb25uZWN0aW9uIGlzIGhhbGYgb3BlbiAqLworCUxNX0JBRF9TT1VSQ0VfQUREUiwgICAvKiBJbGxlZ2FsIHNvdXJjZSBhZGRyZXNzIChpLmUgMHgwMCkgKi8KK30gTE1fUkVBU09OOworI2RlZmluZSBMTV9VTktOT1dOIDB4ZmYgICAgICAgLyogVW5zcGVjaWZpZWQgZGlzY29ubmVjdCByZWFzb24gKi8KKworLyogQSBmZXcgZm9yd2FyZCBkZWNsYXJhdGlvbnMgKHRvIG1ha2UgY29tcGlsZXIgaGFwcHkpICovCitzdHJ1Y3QgcW9zX2luZm87CQkvKiBpbiA8bmV0L2lyZGEvcW9zLmg+ICovCisKKy8qCisgKiAgTm90aWZ5IHN0cnVjdHVyZSB1c2VkIGJldHdlZW4gdHJhbnNwb3J0IGFuZCBsaW5rIG1hbmFnZW1lbnQgbGF5ZXJzCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwlpbnQgKCpkYXRhX2luZGljYXRpb24pKHZvaWQgKnByaXYsIHZvaWQgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisJaW50ICgqdWRhdGFfaW5kaWNhdGlvbikodm9pZCAqcHJpdiwgdm9pZCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKwl2b2lkICgqY29ubmVjdF9jb25maXJtKSh2b2lkICppbnN0YW5jZSwgdm9pZCAqc2FwLCAKKwkJCQlzdHJ1Y3QgcW9zX2luZm8gKnFvcywgX191MzIgbWF4X3NkdV9zaXplLAorCQkJCV9fdTggbWF4X2hlYWRlcl9zaXplLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKwl2b2lkICgqY29ubmVjdF9pbmRpY2F0aW9uKSh2b2lkICppbnN0YW5jZSwgdm9pZCAqc2FwLCAKKwkJCQkgICBzdHJ1Y3QgcW9zX2luZm8gKnFvcywgX191MzIgbWF4X3NkdV9zaXplLCAKKwkJCQkgICBfX3U4IG1heF9oZWFkZXJfc2l6ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisJdm9pZCAoKmRpc2Nvbm5lY3RfaW5kaWNhdGlvbikodm9pZCAqaW5zdGFuY2UsIHZvaWQgKnNhcCwgCisJCQkJICAgICAgTE1fUkVBU09OIHJlYXNvbiwgc3RydWN0IHNrX2J1ZmYgKik7CisJdm9pZCAoKmZsb3dfaW5kaWNhdGlvbikodm9pZCAqaW5zdGFuY2UsIHZvaWQgKnNhcCwgTE9DQUxfRkxPVyBmbG93KTsKKwl2b2lkICgqc3RhdHVzX2luZGljYXRpb24pKHZvaWQgKmluc3RhbmNlLAorCQkJCSAgTElOS19TVEFUVVMgbGluaywgTE9DS19TVEFUVVMgbG9jayk7CisJdm9pZCAqaW5zdGFuY2U7IC8qIExheWVyIGluc3RhbmNlIHBvaW50ZXIgKi8KKwljaGFyIG5hbWVbMTZdOyAgLyogTmFtZSBvZiBsYXllciAqLworfSBub3RpZnlfdDsKKworI2RlZmluZSBOT1RJRllfTUFYX05BTUUgMTYKKworLyogWmVybyB0aGUgbm90aWZ5IHN0cnVjdHVyZSAqLwordm9pZCBpcmRhX25vdGlmeV9pbml0KG5vdGlmeV90ICpub3RpZnkpOworCisvKiBMb2NraW5nIHdyYXBwZXIgLSBOb3RlIHRoZSBpbnZlcnRlZCBsb2dpYyBvbiBpcmRhX2xvY2soKS4KKyAqIFRob3NlIGZ1bmN0aW9uIGJhc2ljYWxseSByZXR1cm4gZmFsc2UgaWYgdGhlIGxvY2sgaXMgYWxyZWFkeSBpbiB0aGUKKyAqIHBvc2l0aW9uIHlvdSB3YW50IHRvIHNldCBpdC4gLSBKZWFuIElJICovCisjZGVmaW5lIGlyZGFfbG9jayhsb2NrKQkJKCEgdGVzdF9hbmRfc2V0X2JpdCgwLCAodm9pZCAqKSAobG9jaykpKQorI2RlZmluZSBpcmRhX3VubG9jayhsb2NrKQkodGVzdF9hbmRfY2xlYXJfYml0KDAsICh2b2lkICopIChsb2NrKSkpCisKKyNlbmRpZiAvKiBJUk1PRF9IICovCisKKworCisKKworCisKKworCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcmRhL2lycXVldWUuaCBiL2luY2x1ZGUvbmV0L2lyZGEvaXJxdWV1ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzNWIwYWMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9pcmRhL2lycXVldWUuaApAQCAtMCwwICsxLDk2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAKKyAqIEZpbGVuYW1lOiAgICAgIGlycXVldWUuaAorICogVmVyc2lvbjogICAgICAgMC4zCisgKiBEZXNjcmlwdGlvbjogICBHZW5lcmFsIHF1ZXVlIGltcGxlbWVudGF0aW9uCisgKiBTdGF0dXM6ICAgICAgICBFeHBlcmltZW50YWwuCisgKiBBdXRob3I6ICAgICAgICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+CisgKiBDcmVhdGVkIGF0OiAgICBUdWUgSnVuICA5IDEzOjI2OjUwIDE5OTgKKyAqIE1vZGlmaWVkIGF0OiAgIFRodSBPY3QgIDcgMTM6MjU6MTYgMTk5OQorICogTW9kaWZpZWQgYnk6ICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgorICogCisgKiAgICAgQ29weXJpZ2h0IChDKSAxOTk4LTE5OTksIEFhZ2UgS3ZhbG5lcyA8YWFnZUBjcy51aXQubm8+CisgKiAgICAgQ29weXJpZ2h0IChjKSAxOTk4LCBEYWcgQnJhdHRsaQorICogICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgICAgIAorICogICAgIFRoaXMgY29kZSBpcyB0YWtlbiBmcm9tIHRoZSBWb3J0ZXggT3BlcmF0aW5nIFN5c3RlbSB3cml0dGVuIGJ5IEFhZ2UKKyAqICAgICBLdmFsbmVzIGFuZCBoYXMgYmVlbiBwb3J0ZWQgdG8gTGludXggYW5kIExpbnV4L0lSIGJ5IERhZyBCcmF0dGxpCisgKgorICogICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgCisgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgCisgKiAgICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiAgCisgKiAgICAgTmVpdGhlciBEYWcgQnJhdHRsaSBub3IgVW5pdmVyc2l0eSBvZiBUcm9tc/ggYWRtaXQgbGlhYmlsaXR5IG5vcgorICogICAgIHByb3ZpZGUgd2FycmFudHkgZm9yIGFueSBvZiB0aGlzIHNvZnR3YXJlLiBUaGlzIG1hdGVyaWFsIGlzIAorICogICAgIHByb3ZpZGVkICJBUy1JUyIgYW5kIGF0IG5vIGNoYXJnZS4KKyAqICAgICAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKworI2lmbmRlZiBJUkRBX1FVRVVFX0gKKyNkZWZpbmUgSVJEQV9RVUVVRV9ICisKKyNkZWZpbmUgTkFNRV9TSVpFICAgICAgMzIKKworLyoKKyAqIEhhc2ggdHlwZXMgKHNvbWUgZmxhZ3MgY2FuIGJlIHhvcmVkKQorICogU2VlIGNvbW1lbnRzIGluIGlycXVldWUuYyBmb3Igd2hpY2ggb25lIHRvIHVzZS4uLgorICovCisjZGVmaW5lIEhCX05PTE9DSwkwCS8qIE5vIGNvbmN1cmVudCBhY2Nlc3MgcHJldmVudGlvbiAqLworI2RlZmluZSBIQl9MT0NLCQkxCS8qIFByZXZlbnQgY29uY3VyZW50IHdyaXRlIHdpdGggZ2xvYmFsIGxvY2sgKi8KKworLyoKKyAqIEhhc2ggZGVmaW5lcworICovCisjZGVmaW5lIEhBU0hCSU5fU0laRSAgIDgKKyNkZWZpbmUgSEFTSEJJTl9NQVNLICAgMHg3CisKKyNpZm5kZWYgSVJEQV9BTElHTiAKKyNkZWZpbmUgSVJEQV9BTElHTiBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKSkKKyNlbmRpZgorCisjZGVmaW5lIFFfTlVMTCB7IE5VTEwsIE5VTEwsICIiLCAwIH0KKwordHlwZWRlZiB2b2lkICgqRlJFRV9GVU5DKSh2b2lkICphcmcpOworCitzdHJ1Y3QgaXJkYV9xdWV1ZSB7CisJc3RydWN0IGlyZGFfcXVldWUgKnFfbmV4dDsKKwlzdHJ1Y3QgaXJkYV9xdWV1ZSAqcV9wcmV2OworCisJY2hhciAgIHFfbmFtZVtOQU1FX1NJWkVdOworCWxvbmcgICBxX2hhc2g7CQkJLyogTXVzdCBiZSBhYmxlIHRvIGNhc3QgYSAodm9pZCAqKSAqLworfTsKK3R5cGVkZWYgc3RydWN0IGlyZGFfcXVldWUgaXJkYV9xdWV1ZV90OworCit0eXBlZGVmIHN0cnVjdCBoYXNoYmluX3QgeworCV9fdTMyICAgICAgbWFnaWM7CisJaW50ICAgICAgICBoYl90eXBlOworCWludCAgICAgICAgaGJfc2l6ZTsKKwlzcGlubG9ja190IGhiX3NwaW5sb2NrOwkJLyogSEJfTE9DSyAtIENhbiBiZSB1c2VkIGJ5IHRoZSB1c2VyICovCisKKwlpcmRhX3F1ZXVlX3QqIGhiX3F1ZXVlW0hBU0hCSU5fU0laRV0gSVJEQV9BTElHTjsKKworCWlyZGFfcXVldWVfdCogaGJfY3VycmVudDsKK30gaGFzaGJpbl90OworCitoYXNoYmluX3QgKmhhc2hiaW5fbmV3KGludCB0eXBlKTsKK2ludCAgICAgIGhhc2hiaW5fZGVsZXRlKGhhc2hiaW5fdCogaGFzaGJpbiwgRlJFRV9GVU5DIGZ1bmMpOworaW50ICAgICAgaGFzaGJpbl9jbGVhcihoYXNoYmluX3QqIGhhc2hiaW4sIEZSRUVfRlVOQyBmcmVlX2Z1bmMpOwordm9pZCAgICAgaGFzaGJpbl9pbnNlcnQoaGFzaGJpbl90KiBoYXNoYmluLCBpcmRhX3F1ZXVlX3QqIGVudHJ5LCBsb25nIGhhc2h2LCAKKwkJCWNvbnN0IGNoYXIqIG5hbWUpOwordm9pZCogICAgaGFzaGJpbl9yZW1vdmUoaGFzaGJpbl90KiBoYXNoYmluLCBsb25nIGhhc2h2LCBjb25zdCBjaGFyKiBuYW1lKTsKK3ZvaWQqICAgIGhhc2hiaW5fcmVtb3ZlX2ZpcnN0KGhhc2hiaW5fdCAqaGFzaGJpbik7Cit2b2lkKgkgaGFzaGJpbl9yZW1vdmVfdGhpcyggaGFzaGJpbl90KiBoYXNoYmluLCBpcmRhX3F1ZXVlX3QqIGVudHJ5KTsKK3ZvaWQqICAgIGhhc2hiaW5fZmluZChoYXNoYmluX3QqIGhhc2hiaW4sIGxvbmcgaGFzaHYsIGNvbnN0IGNoYXIqIG5hbWUpOwordm9pZCogICAgaGFzaGJpbl9sb2NrX2ZpbmQoaGFzaGJpbl90KiBoYXNoYmluLCBsb25nIGhhc2h2LCBjb25zdCBjaGFyKiBuYW1lKTsKK3ZvaWQqICAgIGhhc2hiaW5fZmluZF9uZXh0KGhhc2hiaW5fdCogaGFzaGJpbiwgbG9uZyBoYXNodiwgY29uc3QgY2hhciogbmFtZSwKKwkJCSAgIHZvaWQgKiogcG5leHQpOworaXJkYV9xdWV1ZV90ICpoYXNoYmluX2dldF9maXJzdChoYXNoYmluX3QgKmhhc2hiaW4pOworaXJkYV9xdWV1ZV90ICpoYXNoYmluX2dldF9uZXh0KGhhc2hiaW5fdCAqaGFzaGJpbik7CisKKyNkZWZpbmUgSEFTSEJJTl9HRVRfU0laRShoYXNoYmluKSBoYXNoYmluLT5oYl9zaXplCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXJkYS9pcnR0cC5oIGIvaW5jbHVkZS9uZXQvaXJkYS9pcnR0cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4OTllNTgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9pcmRhL2lydHRwLmgKQEAgLTAsMCArMSwyMTAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgIAorICogRmlsZW5hbWU6ICAgICAgaXJ0dHAuaAorICogVmVyc2lvbjogICAgICAgMS4wCisgKiBEZXNjcmlwdGlvbjogICBUaW55IFRyYW5zcG9ydCBQcm90b2NvbCAoVFRQKSBkZWZpbml0aW9ucworICogU3RhdHVzOiAgICAgICAgRXhwZXJpbWVudGFsLgorICogQXV0aG9yOiAgICAgICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgorICogQ3JlYXRlZCBhdDogICAgU3VuIEF1ZyAzMSAyMDoxNDozMSAxOTk3CisgKiBNb2RpZmllZCBhdDogICBTdW4gRGVjIDEyIDEzOjA5OjA3IDE5OTkKKyAqIE1vZGlmaWVkIGJ5OiAgIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4KKyAqIAorICogICAgIENvcHlyaWdodCAoYykgMTk5OC0xOTk5IERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4sIAorICogICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgICAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDIgSmVhbiBUb3VycmlsaGVzIDxqdEBocGwuaHAuY29tPgorICogICAgIAorICogICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgCisgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgCisgKiAgICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICAgIE5laXRoZXIgRGFnIEJyYXR0bGkgbm9yIFVuaXZlcnNpdHkgb2YgVHJvbXP4IGFkbWl0IGxpYWJpbGl0eSBub3IKKyAqICAgICBwcm92aWRlIHdhcnJhbnR5IGZvciBhbnkgb2YgdGhpcyBzb2Z0d2FyZS4gVGhpcyBtYXRlcmlhbCBpcyAKKyAqICAgICBwcm92aWRlZCAiQVMtSVMiIGFuZCBhdCBubyBjaGFyZ2UuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIElSVFRQX0gKKyNkZWZpbmUgSVJUVFBfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorCisjaW5jbHVkZSA8bmV0L2lyZGEvaXJkYS5oPgorI2luY2x1ZGUgPG5ldC9pcmRhL2lybG1wLmg+CQkvKiBzdHJ1Y3QgbHNhcF9jYiAqLworI2luY2x1ZGUgPG5ldC9pcmRhL3Fvcy5oPgkJLyogc3RydWN0IHFvc19pbmZvICovCisjaW5jbHVkZSA8bmV0L2lyZGEvaXJxdWV1ZS5oPgorCisjZGVmaW5lIFRUUF9NQVhfQ09OTkVDVElPTlMgICAgTE1fTUFYX0NPTk5FQ1RJT05TCisjZGVmaW5lIFRUUF9IRUFERVIgICAgICAgICAgICAgMQorI2RlZmluZSBUVFBfTUFYX0hFQURFUiAgICAgICAgIChUVFBfSEVBREVSICsgTE1QX01BWF9IRUFERVIpCisjZGVmaW5lIFRUUF9TQVJfSEVBREVSICAgICAgICAgNQorI2RlZmluZSBUVFBfUEFSQU1FVEVSUyAgICAgICAgIDB4ODAKKyNkZWZpbmUgVFRQX01PUkUgICAgICAgICAgICAgICAweDgwCisKKy8qIFRyYW5zbWlzc2lvbiBxdWV1ZSBzaXplcyAqLworLyogV29yc3QgY2FzZSBzY2VuYXJpbywgdHdvIHdpbmRvdyBvZiBkYXRhIC0gSmVhbiBJSSAqLworI2RlZmluZSBUVFBfVFhfTUFYX1FVRVVFCTE0CisvKiBXZSBuZWVkIHRvIGtlZXAgYXQgbGVhc3QgNSBmcmFtZXMgdG8gbWFrZSBzdXJlIHRoYXQgd2UgY2FuIHJlZmlsbAorICogYXBwcm9wcmlhdGVseSB0aGUgTEFQIGxheWVyLiBMQVAga2VlcHMgb25seSB0d28gYnVmZmVycywgYW5kIHdlIG5lZWQKKyAqIHRvIGhhdmUgNyB0byBtYWtlIGEgZnVsbCB3aW5kb3cgLSBKZWFuIElJICovCisjZGVmaW5lIFRUUF9UWF9MT1dfVEhSRVNIT0xECTUKKy8qIE1vc3QgY2xpZW50cyBhcmUgc3luY2hyb25vdXMgd2l0aCByZXNwZWN0IHRvIGZsb3cgY29udHJvbCwgc28gd2UgY2FuCisgKiBrZWVwIGEgbG93IG51bWJlciBvZiBUeCBidWZmZXJzIGluIFRUUCAtIEplYW4gSUkgKi8KKyNkZWZpbmUgVFRQX1RYX0hJR0hfVEhSRVNIT0xECTcKKworLyogUmVjZWl2ZSBxdWV1ZSBzaXplcyAqLworLyogTWluaW11bSBvZiBjcmVkaXQgdGhhdCB0aGUgcGVlciBzaG91bGQgaG9sZC4KKyAqIElmIHRoZSBwZWVyIGhhcyBsZXNzIGNyZWRpdHMgdGhhbiA5IGZyYW1lcywgd2Ugd2lsbCBleHBsaWNpdGVseSBzZW5kCisgKiBoaW0gc29tZSBjcmVkaXRzICh0aHJvdWdoIGlydHRwX2dpdmVfY3JlZGl0KCkgYW5kIGEgc3BlY2lmaWMgZnJhbWUpLgorICogTm90ZSB0aGF0IHdoZW4gd2UgZ2l2ZSBjcmVkaXRzIGl0J3MgbGlrZWx5IHRoYXQgaXQgd29uJ3QgYmUgc2VudCBpbgorICogdGhpcyBMQVAgd2luZG93LCBidXQgaW4gdGhlIG5leHQgb25lLiBTbywgd2UgbWFrZSBzdXJlIHRoYXQgdGhlIHBlZXIKKyAqIGhhcyBzb21ldGhpbmcgdG8gc2VuZCB3aGlsZSB3YWl0aW5nIGZvciBjcmVkaXRzIChvbmUgTEFQIHdpbmRvdyA9PSA3CisgKiArIDEgZnJhbWVzIHdoaWxlIGhlIHByb2Nlc3MgdGhlIGNyZWRpdHMpLiAtIEplYW4gSUkgKi8KKyNkZWZpbmUgVFRQX1JYX01JTl9DUkVESVQJOAorLyogVGhpcyBpcyB0aGUgZGVmYXVsdCBtYXhpbXVtIG51bWJlciBvZiBjcmVkaXRzIGhlbGQgYnkgdGhlIHBlZXIsIHNvIHRoZQorICogZGVmYXVsdCBtYXhpbXVtIG51bWJlciBvZiBmcmFtZXMgaGUgY2FuIHNlbmQgdXMgYmVmb3JlIG5lZWRpbmcgZmxvdworICogY29udHJvbCBhbnN3ZXIgZnJvbSB1cyAodGhpcyBtYXkgYmUgbmVnb2NpYXRlZCBkaWZmZXJlbnRseSBhdCBUU0FQIHNldHVwKS4KKyAqIFdlIHdhbnQgdG8gbWluaW1pc2UgdGhlIG51bWJlciBvZiB0aW1lcyB3ZSBoYXZlIHRvIGV4cGxpY2l0ZWx5IHNlbmQgc29tZQorICogY3JlZGl0IHRvIHRoZSBwZWVyLCBob3Bpbmcgd2UgY2FuIHBpZ2d5YmFjayBpdCBvbiB0aGUgcmV0dXJuIGRhdGEuIEluCisgKiBwYXJ0aWN1bGFyLCBpdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgZm9yIHVzIHRvIHNlbmQgY3JlZGl0IG1vcmUgdGhhbiBvbmNlCisgKiBwZXIgTEFQIHdpbmRvdy4KKyAqIE1vcmVvdmVyLCBnaXZpbmcgY3JlZGl0cyBoYXMgc29tZSBsYXRlbmN5LCBzbyB3ZSBuZWVkIHN0cmljdGx5IG1vcmUgdGhhbgorICogYSBMQVAgd2luZG93LCBvdGhlcndpc2Ugd2UgbWF5IGFscmVhZHkgaGF2ZSBjcmVkaXRzIGluIG91ciBUeCBxdWV1ZS4KKyAqIEJ1dCBvbiB0aGUgb3RoZXIgaGFuZCwgd2UgZG9uJ3Qgd2FudCB0byBrZWVwIHRvbyBtYW55IFJ4IGJ1ZmZlciBoZXJlCisgKiBiZWZvcmUgc3RhcnRpbmcgdG8gZmxvdyBjb250cm9sIHRoZSBvdGhlciBlbmQsIHNvIG1ha2UgaXQgZXhhY3RseSBvbmUKKyAqIExBUCB3aW5kb3cgKyAxICsgTUlOX0NSRURJVFMuIC0gSmVhbiBJSSAqLworI2RlZmluZSBUVFBfUlhfREVGQVVMVF9DUkVESVQJMTYKKy8qIE1heGltdW0gbnVtYmVyIG9mIGNyZWRpdHMgd2UgY2FuIGFsbG93IHRoZSBwZWVyIHRvIGhhdmUsIGFuZCB0aGVyZWZvcmUKKyAqIG1heGltdW0gUnggcXVldWUgc2l6ZS4KKyAqIE5vdGUgdGhhdCB3ZSB0cnkgdG8gZGVsaXZlciBwYWNrZXRzIHRvIHRoZSBoaWdoZXIgbGF5ZXIgZXZlcnkgdGltZSB3ZQorICogcmVjZWl2ZSBzb21ldGhpbmcsIHNvIGluIG5vcm1hbCBtb2RlIHRoZSBSeCBxdWV1ZSB3aWxsIG5ldmVyIGNvbnRhaW5zCisgKiBtb3JlIHRoYW4gb25lIG9yIHR3byBwYWNrZXRzLiAtIEplYW4gSUkgKi8KKyNkZWZpbmUgVFRQX1JYX01BWF9DUkVESVQJMjEKKworLyogV2hhdCBjbGllbnRzIHNob3VsZCB1c2Ugd2hlbiBjYWxsaW5nIHR0cF9vcGVuX3RzYXAoKSAqLworI2RlZmluZSBERUZBVUxUX0lOSVRJQUxfQ1JFRElUCVRUUF9SWF9ERUZBVUxUX0NSRURJVAorCisvKiBTb21lIHByaW9yaXRpZXMgZm9yIGRpc2Nvbm5lY3QgcmVxdWVzdHMgKi8KKyNkZWZpbmUgUF9OT1JNQUwgICAgMAorI2RlZmluZSBQX0hJR0ggICAgICAxCisKKyNkZWZpbmUgVFRQX1NBUl9ESVNBQkxFIDAKKyNkZWZpbmUgVFRQX1NBUl9VTkJPVU5EIDB4ZmZmZmZmZmYKKworLyogUGFyYW1ldGVycyAqLworI2RlZmluZSBUVFBfTUFYX1NEVV9TSVpFIDB4MDEKKworLyoKKyAqICBUaGlzIHN0cnVjdHVyZSBjb250YWlucyBhbGwgZGF0YSBhc3Nvc2lhdGVkIHdpdGggb25lIGluc3RhbmNlIG9mIGEgVFRQIAorICogIGNvbm5lY3Rpb24uCisgKi8KK3N0cnVjdCB0c2FwX2NiIHsKKwlpcmRhX3F1ZXVlX3QgcTsgICAgICAgICAgICAvKiBNdXN0IGJlIGZpcnN0ICovCisJbWFnaWNfdCBtYWdpYzsgICAgICAgIC8qIEp1c3QgaW4gY2FzZSAqLworCisJX191OCBzdHNhcF9zZWw7ICAgICAgIC8qIFNvdXJjZSBUU0FQICovCisJX191OCBkdHNhcF9zZWw7ICAgICAgIC8qIERlc3RpbmF0aW9uIFRTQVAgKi8KKworCXN0cnVjdCBsc2FwX2NiICpsc2FwOyAvKiBDb3JyZXNwb25kaW5nIExTQVAgdG8gdGhpcyBUU0FQICovCisKKwlfX3U4IGNvbm5lY3RlZDsgICAgICAgLyogVFNBUCBjb25uZWN0ZWQgKi8KKwkgCisJX191OCBpbml0aWFsX2NyZWRpdDsgIC8qIEluaXRpYWwgY3JlZGl0IHRvIGdpdmUgcGVlciAqLworCisgICAgICAgIGludCBhdmFpbF9jcmVkaXQ7ICAgIC8qIEF2YWlsYWJsZSBjcmVkaXQgdG8gcmV0dXJuIHRvIHBlZXIgKi8KKwlpbnQgcmVtb3RlX2NyZWRpdDsgICAvKiBDcmVkaXQgaGVsZCBieSBwZWVyIFRUUCBlbnRpdHkgKi8KKwlpbnQgc2VuZF9jcmVkaXQ7ICAgICAvKiBDcmVkaXQgaGVsZCBieSBsb2NhbCBUVFAgZW50aXR5ICovCisJCisJc3RydWN0IHNrX2J1ZmZfaGVhZCB0eF9xdWV1ZTsgLyogRnJhbWVzIHRvIGJlIHRyYW5zbWl0dGVkICovCisJc3RydWN0IHNrX2J1ZmZfaGVhZCByeF9xdWV1ZTsgLyogUmVjZWl2ZWQgZnJhbWVzICovCisJc3RydWN0IHNrX2J1ZmZfaGVhZCByeF9mcmFnbWVudHM7CisJaW50IHR4X3F1ZXVlX2xvY2s7CisJaW50IHJ4X3F1ZXVlX2xvY2s7CisJc3BpbmxvY2tfdCBsb2NrOworCisJbm90aWZ5X3Qgbm90aWZ5OyAgICAgICAvKiBDYWxsYmFja3MgdG8gY2xpZW50IGxheWVyICovCisKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKKwlzdHJ1Y3QgdGltZXJfbGlzdCB0b2RvX3RpbWVyOyAKKworCV9fdTMyIG1heF9zZWdfc2l6ZTsgICAgIC8qIE1heCBkYXRhIHRoYXQgZml0IGludG8gYW4gSXJMQVAgZnJhbWUgKi8KKwlfX3U4ICBtYXhfaGVhZGVyX3NpemU7CisKKwlpbnQgICByeF9zZHVfYnVzeTsgICAgIC8qIFJ4U2R1LmJ1c3kgKi8KKwlfX3UzMiByeF9zZHVfc2l6ZTsgICAgIC8qIEN1cnJlbnQgc2l6ZSBvZiBhIHBhcnRpYWxseSByZWNlaXZlZCBmcmFtZSAqLworCV9fdTMyIHJ4X21heF9zZHVfc2l6ZTsgLyogTWF4IHJlY2VpdmUgdXNlciBkYXRhIHNpemUgKi8KKworCWludCB0eF9zZHVfYnVzeTsgICAgICAgLyogVHhTZHUuYnVzeSAqLworCV9fdTMyIHR4X21heF9zZHVfc2l6ZTsgLyogTWF4IHRyYW5zbWl0IHVzZXIgZGF0YSBzaXplICovCisKKwlpbnQgY2xvc2VfcGVuZDsgICAgICAgIC8qIENsb3NlLCBidXQgZGlzY29ubmVjdF9wZW5kICovCisJdW5zaWduZWQgbG9uZyBkaXNjb25uZWN0X3BlbmQ7IC8qIERpc2Nvbm5lY3QsIGJ1dCBzdGlsbCBkYXRhIHRvIHNlbmQgKi8KKwlzdHJ1Y3Qgc2tfYnVmZiAqZGlzY29ubmVjdF9za2I7Cit9OworCitzdHJ1Y3QgaXJ0dHBfY2IgeworCW1hZ2ljX3QgICAgbWFnaWM7CQorCWhhc2hiaW5fdCAqdHNhcHM7Cit9OworCitpbnQgIGlydHRwX2luaXQodm9pZCk7Cit2b2lkIGlydHRwX2NsZWFudXAodm9pZCk7CisKK3N0cnVjdCB0c2FwX2NiICppcnR0cF9vcGVuX3RzYXAoX191OCBzdHNhcF9zZWwsIGludCBjcmVkaXQsIG5vdGlmeV90ICpub3RpZnkpOworaW50IGlydHRwX2Nsb3NlX3RzYXAoc3RydWN0IHRzYXBfY2IgKnNlbGYpOworCitpbnQgaXJ0dHBfZGF0YV9yZXF1ZXN0KHN0cnVjdCB0c2FwX2NiICpzZWxmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2ludCBpcnR0cF91ZGF0YV9yZXF1ZXN0KHN0cnVjdCB0c2FwX2NiICpzZWxmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKworaW50IGlydHRwX2Nvbm5lY3RfcmVxdWVzdChzdHJ1Y3QgdHNhcF9jYiAqc2VsZiwgX191OCBkdHNhcF9zZWwsIAorCQkJICBfX3UzMiBzYWRkciwgX191MzIgZGFkZHIsCisJCQkgIHN0cnVjdCBxb3NfaW5mbyAqcW9zLCBfX3UzMiBtYXhfc2R1X3NpemUsIAorCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqdXNlcmRhdGEpOworaW50IGlydHRwX2Nvbm5lY3RfcmVzcG9uc2Uoc3RydWN0IHRzYXBfY2IgKnNlbGYsIF9fdTMyIG1heF9zZHVfc2l6ZSwgCisJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnVzZXJkYXRhKTsKK2ludCBpcnR0cF9kaXNjb25uZWN0X3JlcXVlc3Qoc3RydWN0IHRzYXBfY2IgKnNlbGYsIHN0cnVjdCBza19idWZmICpza2IsCisJCQkgICAgIGludCBwcmlvcml0eSk7Cit2b2lkIGlydHRwX2Zsb3dfcmVxdWVzdChzdHJ1Y3QgdHNhcF9jYiAqc2VsZiwgTE9DQUxfRkxPVyBmbG93KTsKK3N0cnVjdCB0c2FwX2NiICppcnR0cF9kdXAoc3RydWN0IHRzYXBfY2IgKnNlbGYsIHZvaWQgKmluc3RhbmNlKTsKKworc3RhdGljIF9faW5saW5lIF9fdTMyIGlydHRwX2dldF9zYWRkcihzdHJ1Y3QgdHNhcF9jYiAqc2VsZikKK3sKKwlyZXR1cm4gaXJsbXBfZ2V0X3NhZGRyKHNlbGYtPmxzYXApOworfQorCitzdGF0aWMgX19pbmxpbmUgX191MzIgaXJ0dHBfZ2V0X2RhZGRyKHN0cnVjdCB0c2FwX2NiICpzZWxmKQoreworCXJldHVybiBpcmxtcF9nZXRfZGFkZHIoc2VsZi0+bHNhcCk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX3UzMiBpcnR0cF9nZXRfbWF4X3NlZ19zaXplKHN0cnVjdCB0c2FwX2NiICpzZWxmKQoreworCXJldHVybiBzZWxmLT5tYXhfc2VnX3NpemU7Cit9CisKKy8qIEFmdGVyIGRvaW5nIGEgaXJ0dHBfZHVwKCksIHRoaXMgZ2V0IG9uZSBvZiB0aGUgdHdvIHNvY2tldCBiYWNrIGludG8KKyAqIGEgc3RhdGUgd2hlcmUgaXQncyB3YWl0aW5nIGluY29tbWluZyBjb25uZWN0aW9ucy4KKyAqIE5vdGUgOiB0aGlzIGNhbiBiZSB1c2VkICpvbmx5KiBpZiB0aGUgc29ja2V0IGlzIG5vdCB5ZXQgY29ubmVjdGVkCisgKiAoaS5lLiBOTyBpcnR0cF9jb25uZWN0X3Jlc3BvbnNlKCkgZG9uZSBvbiB0aGlzIHNvY2tldCkuCisgKiAtIEplYW4gSUkgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpcnR0cF9saXN0ZW4oc3RydWN0IHRzYXBfY2IgKnNlbGYpCit7CisJaXJsbXBfbGlzdGVuKHNlbGYtPmxzYXApOworCXNlbGYtPmR0c2FwX3NlbCA9IExTQVBfQU5ZOworfQorCisvKiBSZXR1cm4gVFJVRSBpZiB0aGUgbm9kZSBpcyBpbiBwcmltYXJ5IG1vZGUgKGkuZS4gbWFzdGVyKQorICogLSBKZWFuIElJICovCitzdGF0aWMgaW5saW5lIGludCBpcnR0cF9pc19wcmltYXJ5KHN0cnVjdCB0c2FwX2NiICpzZWxmKQoreworCWlmICgoc2VsZiA9PSBOVUxMKSB8fAorCSAgICAoc2VsZi0+bHNhcCA9PSBOVUxMKSB8fAorCSAgICAoc2VsZi0+bHNhcC0+bGFwID09IE5VTEwpIHx8CisJICAgIChzZWxmLT5sc2FwLT5sYXAtPmlybGFwID09IE5VTEwpKQorCQlyZXR1cm4gLTI7CisJcmV0dXJuKGlybGFwX2lzX3ByaW1hcnkoc2VsZi0+bHNhcC0+bGFwLT5pcmxhcCkpOworfQorCisjZW5kaWYgLyogSVJUVFBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXJkYS9wYXJhbWV0ZXJzLmggYi9pbmNsdWRlL25ldC9pcmRhL3BhcmFtZXRlcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTYwNWQzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQvaXJkYS9wYXJhbWV0ZXJzLmgKQEAgLTAsMCArMSwxMDIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgIAorICogRmlsZW5hbWU6ICAgICAgcGFyYW1ldGVycy5oCisgKiBWZXJzaW9uOiAgICAgICAxLjAKKyAqIERlc2NyaXB0aW9uOiAgIEEgbW9yZSBnZW5lcmFsIHdheSB0byBoYW5kbGUgKHBpLHBsLHB2KSBwYXJhbWV0ZXJzCisgKiBTdGF0dXM6ICAgICAgICBFeHBlcmltZW50YWwuCisgKiBBdXRob3I6ICAgICAgICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+CisgKiBDcmVhdGVkIGF0OiAgICBNb24gSnVuICA3IDA4OjQ3OjI4IDE5OTkKKyAqIE1vZGlmaWVkIGF0OiAgIFN1biBKYW4gMzAgMTQ6MDU6MTQgMjAwMAorICogTW9kaWZpZWQgYnk6ICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgorICogCisgKiAgICAgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDAgRGFnIEJyYXR0bGksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgICAgCisgKiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAKKyAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyAKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiAKKyAqICAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIAorICogICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqIAorICogICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIAorICogICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIAorICogICAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIAorICogICAgIE1BIDAyMTExLTEzMDcgVVNBCisgKgorICogICAgIE1pY2hlbCBE5G56ZXIgPGRhZW56ZXJAZGViaWFuLm9yZz4sIDEwLzIwMDEKKyAqICAgICAtIHNpbXBsaWZ5IGlyZGFfcHZfdCB0byBhdm9pZCBlbmRpYW5uZXNzIGlzc3VlcworICogICAgIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIElSREFfUEFSQU1TX0gKKyNkZWZpbmUgSVJEQV9QQVJBTVNfSAorCisvKgorICogIFRoZSBjdXJyZW50bHkgc3VwcG9ydGVkIHR5cGVzLiBCZXdhcmUgbm90IHRvIGNoYW5nZSB0aGUgc2VxdWVuY2Ugc2luY2UKKyAqICBpdCBhIGdvb2QgcmVhc29uIHdoeSB0aGUgc2l6ZWQgaW50ZWdlcnMgaGFzIGEgdmFsdWUgZXF1YWwgdG8gdGhlaXIgc2l6ZQorICovCit0eXBlZGVmIGVudW0geworCVBWX0lOVEVHRVIsICAgICAgLyogSW50ZWdlciBvZiBhbnkgKHBsKSBsZW5ndGggKi8KKwlQVl9JTlRfOF9CSVRTLCAgIC8qIEludGVnZXIgb2YgOCBiaXRzIGluIGxlbmd0aCAqLworCVBWX0lOVF8xNl9CSVRTLCAgLyogSW50ZWdlciBvZiAxNiBiaXRzIGluIGxlbmd0aCAqLworCVBWX1NUUklORywgICAgICAgLyogXDAgdGVybWluYXRlZCBzdHJpbmcgKi8KKwlQVl9JTlRfMzJfQklUUywgIC8qIEludGVnZXIgb2YgMzIgYml0cyBpbiBsZW5ndGggKi8KKwlQVl9PQ1RfU0VRLCAgICAgIC8qIE9jdGV0IHNlcXVlbmNlICovCisJUFZfTk9fVkFMVUUgICAgICAvKiBEb2VzIG5vdCBjb250YWluIGFueSB2YWx1ZSAocGw9MCkgKi8KK30gUFZfVFlQRTsKKworLyogQml0IDcgb2YgdHlwZSBmaWVsZCAqLworI2RlZmluZSBQVl9CSUdfRU5ESUFOICAgIDB4ODAgCisjZGVmaW5lIFBWX0xJVFRMRV9FTkRJQU4gMHgwMAorI2RlZmluZSBQVl9NQVNLICAgICAgICAgIDB4N2YgICAvKiBUbyBtYXNrIGF3YXkgZW5kaWFuIGJpdCAqLworCisjZGVmaW5lIFBWX1BVVCAwCisjZGVmaW5lIFBWX0dFVCAxCisKK3R5cGVkZWYgdW5pb24geworCWNoYXIgICAqYzsKKwlfX3UzMiAgIGk7CisJX191MzIgKmlwOworfSBpcmRhX3B2X3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlfX3U4IHBpOworCV9fdTggcGw7CisJaXJkYV9wdl90IHB2OworfSBpcmRhX3BhcmFtX3Q7CisKK3R5cGVkZWYgaW50ICgqUElfSEFORExFUikodm9pZCAqc2VsZiwgaXJkYV9wYXJhbV90ICpwYXJhbSwgaW50IGdldCk7Cit0eXBlZGVmIGludCAoKlBWX0hBTkRMRVIpKHZvaWQgKnNlbGYsIF9fdTggKmJ1ZiwgaW50IGxlbiwgX191OCBwaSwKKwkJCSAgUFZfVFlQRSB0eXBlLCBQSV9IQU5ETEVSIGZ1bmMpOworCit0eXBlZGVmIHN0cnVjdCB7CisJUElfSEFORExFUiBmdW5jOyAgLyogSGFuZGxlciBmb3IgdGhpcyBwYXJhbWV0ZXIgaWRlbnRpZmllciAqLworCVBWX1RZUEUgICAgdHlwZTsgIC8qIERhdGEgdHlwZSBmb3IgdGhpcyBwYXJhbWV0ZXIgKi8KK30gcGlfbWlub3JfaW5mb190OworCit0eXBlZGVmIHN0cnVjdCB7CisJcGlfbWlub3JfaW5mb190ICpwaV9taW5vcl9jYWxsX3RhYmxlOworCWludCBsZW47Cit9IHBpX21ham9yX2luZm9fdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXBpX21ham9yX2luZm9fdCAqdGFibGVzOworCWludCAgICAgICAgICAgICAgbGVuOworCV9fdTggICAgICAgICAgICAgcGlfbWFzazsKKwlpbnQgICAgICAgICAgICAgIHBpX21ham9yX29mZnNldDsKK30gcGlfcGFyYW1faW5mb190OworCitpbnQgaXJkYV9wYXJhbV9wYWNrKF9fdTggKmJ1ZiwgY2hhciAqZm10LCAuLi4pOworCitpbnQgaXJkYV9wYXJhbV9pbnNlcnQodm9pZCAqc2VsZiwgX191OCBwaSwgX191OCAqYnVmLCBpbnQgbGVuLCAKKwkJICAgICAgcGlfcGFyYW1faW5mb190ICppbmZvKTsKK2ludCBpcmRhX3BhcmFtX2V4dHJhY3RfYWxsKHZvaWQgKnNlbGYsIF9fdTggKmJ1ZiwgaW50IGxlbiwgCisJCQkgICBwaV9wYXJhbV9pbmZvX3QgKmluZm8pOworCisjZGVmaW5lIGlyZGFfcGFyYW1faW5zZXJ0X2J5dGUoYnVmLHBpLHB2KSBpcmRhX3BhcmFtX3BhY2soYnVmLCJiYmIiLHBpLDEscHYpCisKKyNlbmRpZiAvKiBJUkRBX1BBUkFNU19IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lyZGEvcW9zLmggYi9pbmNsdWRlL25ldC9pcmRhL3Fvcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhZTNkNmIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9pcmRhL3Fvcy5oCkBAIC0wLDAgKzEsMTA0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAKKyAqIEZpbGVuYW1lOiAgICAgIHFvcy5oCisgKiBWZXJzaW9uOiAgICAgICAxLjAKKyAqIERlc2NyaXB0aW9uOiAgIFF1YWxpdHkgb2YgU2VydmljZSBkZWZpbml0aW9ucworICogU3RhdHVzOiAgICAgICAgRXhwZXJpbWVudGFsLgorICogQXV0aG9yOiAgICAgICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgorICogQ3JlYXRlZCBhdDogICAgRnJpIFNlcCAxOSAyMzoyMTowOSAxOTk3CisgKiBNb2RpZmllZCBhdDogICBUaHUgRGVjICAyIDEzOjUxOjU0IDE5OTkKKyAqIE1vZGlmaWVkIGJ5OiAgIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4KKyAqIAorICogICAgIENvcHlyaWdodCAoYykgMTk5OSBEYWcgQnJhdHRsaSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqICAgICAKKyAqICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIAorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIAorICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIAorICogICAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogCisgKiAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICogCisgKiAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgCisgKiAgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgCisgKiAgICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgCisgKiAgICAgTUEgMDIxMTEtMTMwNyBVU0EKKyAqICAgICAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBJUkRBX1FPU19ICisjZGVmaW5lIElSREFfUU9TX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorCisjaW5jbHVkZSA8bmV0L2lyZGEvcGFyYW1ldGVycy5oPgorCisjZGVmaW5lIFBJX0JBVURfUkFURSAgICAgMHgwMQorI2RlZmluZSBQSV9NQVhfVFVSTl9USU1FIDB4ODIKKyNkZWZpbmUgUElfREFUQV9TSVpFICAgICAweDgzCisjZGVmaW5lIFBJX1dJTkRPV19TSVpFICAgMHg4NAorI2RlZmluZSBQSV9BRERfQk9GUyAgICAgIDB4ODUKKyNkZWZpbmUgUElfTUlOX1RVUk5fVElNRSAweDg2CisjZGVmaW5lIFBJX0xJTktfRElTQyAgICAgMHgwOAorCisjZGVmaW5lIElSXzExNTIwMF9NQVggMHgzZgorCisvKiBCYXVkIHJhdGVzIChmaXJzdCBieXRlKSAqLworI2RlZmluZSBJUl8yNDAwICAgICAweDAxCisjZGVmaW5lIElSXzk2MDAgICAgIDB4MDIKKyNkZWZpbmUgSVJfMTkyMDAgICAgMHgwNAorI2RlZmluZSBJUl8zODQwMCAgICAweDA4CisjZGVmaW5lIElSXzU3NjAwICAgIDB4MTAKKyNkZWZpbmUgSVJfMTE1MjAwICAgMHgyMAorI2RlZmluZSBJUl81NzYwMDAgICAweDQwCisjZGVmaW5lIElSXzExNTIwMDAgIDB4ODAKKworLyogQmF1ZCByYXRlcyAoc2Vjb25kIGJ5dGUpICovCisjZGVmaW5lIElSXzQwMDAwMDAgIDB4MDEKKyNkZWZpbmUgSVJfMTYwMDAwMDAgMHgwMgorCisvKiBRdWFsaXR5IG9mIFNlcnZpY2UgaW5mb3JtYXRpb24gKi8KK3R5cGVkZWYgc3RydWN0IHsKKwlfX3UzMiB2YWx1ZTsKKwlfX3UxNiBiaXRzOyAvKiBMU0IgaXMgZmlyc3QgYnl0ZSwgTVNCIGlzIHNlY29uZCBieXRlICovCit9IHFvc192YWx1ZV90OworCitzdHJ1Y3QgcW9zX2luZm8geworCW1hZ2ljX3QgbWFnaWM7CisKKwlxb3NfdmFsdWVfdCBiYXVkX3JhdGU7ICAgICAgIC8qIElSXzExNTIwTyB8IC4uLiAqLworCXFvc192YWx1ZV90IG1heF90dXJuX3RpbWU7CisJcW9zX3ZhbHVlX3QgZGF0YV9zaXplOworCXFvc192YWx1ZV90IHdpbmRvd19zaXplOworCXFvc192YWx1ZV90IGFkZGl0aW9uYWxfYm9mczsKKwlxb3NfdmFsdWVfdCBtaW5fdHVybl90aW1lOworCXFvc192YWx1ZV90IGxpbmtfZGlzY190aW1lOworCQorCXFvc192YWx1ZV90IHBvd2VyOworfTsKKworZXh0ZXJuIGludCBzeXNjdGxfbWF4X2JhdWRfcmF0ZTsKK2V4dGVybiBpbnQgc3lzY3RsX21heF9pbmFjdGl2ZV90aW1lOworCit2b2lkIGlyZGFfaW5pdF9tYXhfcW9zX2NhcGFiaWxpZXMoc3RydWN0IHFvc19pbmZvICpxb3MpOwordm9pZCBpcmRhX3Fvc19jb21wdXRlX2ludGVyc2VjdGlvbihzdHJ1Y3QgcW9zX2luZm8gKiwgc3RydWN0IHFvc19pbmZvICopOworCitfX3UzMiBpcmxhcF9tYXhfbGluZV9jYXBhY2l0eShfX3UzMiBzcGVlZCwgX191MzIgbWF4X3R1cm5fdGltZSk7CisKK3ZvaWQgaXJkYV9xb3NfYml0c190b192YWx1ZShzdHJ1Y3QgcW9zX2luZm8gKnFvcyk7CisKKy8qIFNvIHNpbXBsZSwgaG93IGNvdWxkIHdlIG5vdCBpbmxpbmUgdGhvc2UgdHdvID8KKyAqIE5vdGUgOiBvbmUgYnl0ZSBpcyAxMCBiaXRzIGlmIHlvdSBpbmNsdWRlIHN0YXJ0IGFuZCBzdG9wIGJpdHMKKyAqIEplYW4gSUkgKi8KKyNkZWZpbmUgaXJsYXBfbWluX3R1cm5fdGltZV9pbl9ieXRlcyhzcGVlZCwgbWluX3R1cm5fdGltZSkgKAlcCisJc3BlZWQgKiBtaW5fdHVybl90aW1lIC8gMTAwMDAwMDAJCQlcCispCisjZGVmaW5lIGlybGFwX3hib2ZzX2luX3VzZWMoc3BlZWQsIHhib2ZzKSAoCQkJXAorCXhib2ZzICogMTAwMDAwMDAgLyBzcGVlZAkJCQlcCispCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcmRhL3RpbWVyLmggYi9pbmNsdWRlL25ldC9pcmRhL3RpbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM1ZDg4NgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L2lyZGEvdGltZXIuaApAQCAtMCwwICsxLDEwNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgCisgKiBGaWxlbmFtZTogICAgICB0aW1lci5oCisgKiBWZXJzaW9uOiAgICAgICAKKyAqIERlc2NyaXB0aW9uOiAgIAorICogU3RhdHVzOiAgICAgICAgRXhwZXJpbWVudGFsLgorICogQXV0aG9yOiAgICAgICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgorICogQ3JlYXRlZCBhdDogICAgU2F0IEF1ZyAxNiAwMDo1OToyOSAxOTk3CisgKiBNb2RpZmllZCBhdDogICBUaHUgT2N0ICA3IDEyOjI1OjI0IDE5OTkKKyAqIE1vZGlmaWVkIGJ5OiAgIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4KKyAqIAorICogICAgIENvcHlyaWdodCAoYykgMTk5NywgMTk5OC0xOTk5IERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4sIAorICogICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgICAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDIgSmVhbiBUb3VycmlsaGVzIDxqdEBocGwuaHAuY29tPgorICogICAgIAorICogICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgCisgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgCisgKiAgICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICAgIE5laXRoZXIgRGFnIEJyYXR0bGkgbm9yIFVuaXZlcnNpdHkgb2YgVHJvbXP4IGFkbWl0IGxpYWJpbGl0eSBub3IKKyAqICAgICBwcm92aWRlIHdhcnJhbnR5IGZvciBhbnkgb2YgdGhpcyBzb2Z0d2FyZS4gVGhpcyBtYXRlcmlhbCBpcyAKKyAqICAgICBwcm92aWRlZCAiQVMtSVMiIGFuZCBhdCBubyBjaGFyZ2UuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIFRJTUVSX0gKKyNkZWZpbmUgVElNRVJfSAorCisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKworI2luY2x1ZGUgPGFzbS9wYXJhbS5oPiAgLyogZm9yIEhaICovCisKKyNpbmNsdWRlIDxuZXQvaXJkYS9pcmRhLmg+CisKKy8qIEEgZmV3IGZvcndhcmQgZGVjbGFyYXRpb25zICh0byBtYWtlIGNvbXBpbGVyIGhhcHB5KSAqLworc3RydWN0IGlybG1wX2NiOworc3RydWN0IGlybGFwX2NiOworc3RydWN0IGxzYXBfY2I7CitzdHJ1Y3QgbGFwX2NiOworCisvKiAKKyAqICBUaW1lb3V0IGRlZmluaXRpb25zLCBzb21lIGRlZmluZWQgaW4gSXJMQVAgNi4xMy41IC0gcC4gOTIKKyAqLworI2RlZmluZSBQT0xMX1RJTUVPVVQgICAgICAgICg0NTAqSFovMTAwMCkgICAgLyogTXVzdCBuZXZlciBleGNlZWQgNTAwIG1zICovCisjZGVmaW5lIEZJTkFMX1RJTUVPVVQgICAgICAgKDUwMCpIWi8xMDAwKSAgICAvKiBNdXN0IG5ldmVyIGV4Y2VlZCA1MDAgbXMgKi8KKworLyogCisgKiAgTm9ybWFsbHkgdHdpY2Ugb2YgcC10aW1lci4gTm90ZSAzLCBJckxBUCA2LjMuMTEuMiAtIHAuIDYwIHN1Z2dlc3RzCisgKiAgYXQgbGVhc3QgdHdpY2UgZHVyYXRpb24gb2YgdGhlIFAtdGltZXIuCisgKi8KKyNkZWZpbmUgV0RfVElNRU9VVCAgICAgICAgICAoUE9MTF9USU1FT1VUKjIpCisKKyNkZWZpbmUgTUVESUFCVVNZX1RJTUVPVVQgICAoNTAwKkhaLzEwMDApICAgIC8qIDUwMCBtc2VjICovCisjZGVmaW5lIFNNQUxMQlVTWV9USU1FT1VUICAgKDEwMCpIWi8xMDAwKSAgICAvKiAxMDAgbXNlYyAtIElyTEFQIDYuMTMuNCAqLworCisvKgorICogIFNsb3QgdGltZXIgbXVzdCBuZXZlciBleGNlZWQgODUgbXMsIGFuZCBtdXN0IGFsd2F5cyBiZSBhdCBsZWFzdCAyNSBtcywgCisgKiAgc3VnZ2VzdGVkIHRvICA3NS04NSBtc2VjIGJ5IElyREEgbGl0ZS4gVGhpcyBkb2Vzbid0IHdvcmsgd2l0aCBhIGxvdCBvZgorICogIGRldmljZXMsIGFuZCBvdGhlciBzdGFja2VzIHVzZXMgYSBsb3QgbW9yZSwgc28gaXQncyBiZXN0IHdlIGRvIGl0IGFzIHdlbGwKKyAqICAoTm90ZSA6IHRoaXMgaXMgdGhlIGRlZmF1bHQgdmFsdWUgYW5kIHN5c2N0bCBvdmVyaWRlcyBpdCAtIEplYW4gSUkpCisgKi8KKyNkZWZpbmUgU0xPVF9USU1FT1VUICAgICAgICAgICAgKDkwKkhaLzEwMDApCisKKy8qIAorICogIFRoZSBsYXRlc3QgZGlzY292ZXJ5IGZyYW1lIChYSUQpIGlzIGxvbmdlciBkdWUgdG8gdGhlIGV4dHJhIGRpc2NvdmVyeQorICogIGluZm9ybWF0aW9uIChoaW50cywgZGV2aWNlIG5hbWUuLi4pLiBUaGlzIGlzIGl0cyBleHRyYSBsZW5ndGguCisgKiAgV2UgdXNlIHRoYXQgd2hlbiBzZXR0aW5nIHRoZSBxdWVyeSB0aW1lb3V0LiBKZWFuIElJCisgKi8KKyNkZWZpbmUgWElERVhUUkFfVElNRU9VVCAgICAgICAgKDM0KkhaLzEwMDApICAvKiAzNCBtc2VjICovCisKKyNkZWZpbmUgV0FUQ0hET0dfVElNRU9VVCAgICAgICAgKDIwKkhaKSAgICAgICAvKiAyMCBzZWMgKi8KKwordHlwZWRlZiB2b2lkICgqVElNRVJfQ0FMTEJBQ0spKHZvaWQgKik7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpcmRhX3N0YXJ0X3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICpwdGltZXIsIGludCB0aW1lb3V0LCAKKwkJCQkgICAgdm9pZCogZGF0YSwgVElNRVJfQ0FMTEJBQ0sgY2FsbGJhY2spCit7CisJcHRpbWVyLT5mdW5jdGlvbiA9ICh2b2lkICgqKSh1bnNpZ25lZCBsb25nKSkgY2FsbGJhY2s7CisJcHRpbWVyLT5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGRhdGE7CisJCisJLyogU2V0IG5ldyB2YWx1ZSBmb3IgdGltZXIgKHVwZGF0ZSBvciBhZGQgdGltZXIpLgorCSAqIFdlIHVzZSBtb2RfdGltZXIoKSBiZWNhdXNlIGl0J3MgbW9yZSBlZmZpY2llbnQgYW5kIGFsc28KKwkgKiBzYWZlciB3aXRoIHJlc3BlY3QgdG8gcmFjZSBjb25kaXRpb25zIC0gSmVhbiBJSSAqLworCW1vZF90aW1lcihwdGltZXIsIGppZmZpZXMgKyB0aW1lb3V0KTsKK30KKworCit2b2lkIGlybGFwX3N0YXJ0X3Nsb3RfdGltZXIoc3RydWN0IGlybGFwX2NiICpzZWxmLCBpbnQgdGltZW91dCk7Cit2b2lkIGlybGFwX3N0YXJ0X3F1ZXJ5X3RpbWVyKHN0cnVjdCBpcmxhcF9jYiAqc2VsZiwgaW50IFMsIGludCBzKTsKK3ZvaWQgaXJsYXBfc3RhcnRfZmluYWxfdGltZXIoc3RydWN0IGlybGFwX2NiICpzZWxmLCBpbnQgdGltZW91dCk7Cit2b2lkIGlybGFwX3N0YXJ0X3dkX3RpbWVyKHN0cnVjdCBpcmxhcF9jYiAqc2VsZiwgaW50IHRpbWVvdXQpOwordm9pZCBpcmxhcF9zdGFydF9iYWNrb2ZmX3RpbWVyKHN0cnVjdCBpcmxhcF9jYiAqc2VsZiwgaW50IHRpbWVvdXQpOworCit2b2lkIGlybGFwX3N0YXJ0X21idXN5X3RpbWVyKHN0cnVjdCBpcmxhcF9jYiAqc2VsZiwgaW50IHRpbWVvdXQpOwordm9pZCBpcmxhcF9zdG9wX21idXN5X3RpbWVyKHN0cnVjdCBpcmxhcF9jYiAqKTsKKwordm9pZCBpcmxtcF9zdGFydF93YXRjaGRvZ190aW1lcihzdHJ1Y3QgbHNhcF9jYiAqLCBpbnQgdGltZW91dCk7Cit2b2lkIGlybG1wX3N0YXJ0X2Rpc2NvdmVyeV90aW1lcihzdHJ1Y3QgaXJsbXBfY2IgKiwgaW50IHRpbWVvdXQpOwordm9pZCBpcmxtcF9zdGFydF9pZGxlX3RpbWVyKHN0cnVjdCBsYXBfY2IgKiwgaW50IHRpbWVvdXQpOwordm9pZCBpcmxtcF9zdG9wX2lkbGVfdGltZXIoc3RydWN0IGxhcF9jYiAqc2VsZik7CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcmRhL3dyYXBwZXIuaCBiL2luY2x1ZGUvbmV0L2lyZGEvd3JhcHBlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4NzY4YjMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9pcmRhL3dyYXBwZXIuaApAQCAtMCwwICsxLDU4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAKKyAqIEZpbGVuYW1lOiAgICAgIHdyYXBwZXIuaAorICogVmVyc2lvbjogICAgICAgMS4yCisgKiBEZXNjcmlwdGlvbjogICBJckRBIFNJUiBhc3luYyB3cmFwcGVyIGxheWVyCisgKiBTdGF0dXM6ICAgICAgICBFeHBlcmltZW50YWwuCisgKiBBdXRob3I6ICAgICAgICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+CisgKiBDcmVhdGVkIGF0OiAgICBNb24gQXVnICA0IDIwOjQwOjUzIDE5OTcKKyAqIE1vZGlmaWVkIGF0OiAgIFR1ZSBKYW4gMTEgMTI6Mzc6MjkgMjAwMAorICogTW9kaWZpZWQgYnk6ICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgorICogCisgKiAgICAgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPiwgCisgKiAgICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqICAgICAKKyAqICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIAorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIAorICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIAorICogICAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgICBOZWl0aGVyIERhZyBCcmF0dGxpIG5vciBVbml2ZXJzaXR5IG9mIFRyb21z+CBhZG1pdCBsaWFiaWxpdHkgbm9yCisgKiAgICAgcHJvdmlkZSB3YXJyYW50eSBmb3IgYW55IG9mIHRoaXMgc29mdHdhcmUuIFRoaXMgbWF0ZXJpYWwgaXMgCisgKiAgICAgcHJvdmlkZWQgIkFTLUlTIiBhbmQgYXQgbm8gY2hhcmdlLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBXUkFQUEVSX0gKKyNkZWZpbmUgV1JBUFBFUl9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorCisjaW5jbHVkZSA8bmV0L2lyZGEvaXJkYV9kZXZpY2UuaD4JLyogaW9idWZmX3QgKi8KKworI2RlZmluZSBCT0YgIDB4YzAgLyogQmVnaW5uaW5nIG9mIGZyYW1lICovCisjZGVmaW5lIFhCT0YgMHhmZgorI2RlZmluZSBFT0YgIDB4YzEgLyogRW5kIG9mIGZyYW1lICovCisjZGVmaW5lIENFICAgMHg3ZCAvKiBDb250cm9sIGVzY2FwZSAqLworCisjZGVmaW5lIFNUQSBCT0YgIC8qIFN0YXJ0IGZsYWcgKi8KKyNkZWZpbmUgU1RPIEVPRiAgLyogRW5kIGZsYWcgKi8KKworI2RlZmluZSBJUkRBX1RSQU5TIDB4MjAgICAgLyogQXN5bmNocm9ub3VzIHRyYW5zcGFyZW5jeSBtb2RpZmllciAqLyAgICAgICAKKworLyogU3RhdGVzIGZvciByZWNldmluZyBhIGZyYW1lIGluIGFzeW5jIG1vZGUgKi8KK2VudW0geworCU9VVFNJREVfRlJBTUUsIAorCUJFR0lOX0ZSQU1FLCAKKwlMSU5LX0VTQ0FQRSwgCisJSU5TSURFX0ZSQU1FCit9OworCisvKiBQcm90byBkZWZpbml0aW9ucyAqLworaW50IGFzeW5jX3dyYXBfc2tiKHN0cnVjdCBza19idWZmICpza2IsIF9fdTggKnR4X2J1ZmYsIGludCBidWZmc2l6ZSk7Cit2b2lkIGFzeW5jX3Vud3JhcF9jaGFyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cywKKwkJICAgICAgIGlvYnVmZl90ICpidWYsIF9fdTggYnl0ZSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXdfaGFuZGxlci5oIGIvaW5jbHVkZS9uZXQvaXdfaGFuZGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0ZWRkNDgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9pd19oYW5kbGVyLmgKQEAgLTAsMCArMSw1NDAgQEAKKy8qCisgKiBUaGlzIGZpbGUgZGVmaW5lIHRoZSBuZXcgZHJpdmVyIEFQSSBmb3IgV2lyZWxlc3MgRXh0ZW5zaW9ucworICoKKyAqIFZlcnNpb24gOgk2CTIxLjYuMDQKKyAqCisgKiBBdXRob3JzIDoJSmVhbiBUb3VycmlsaGVzIC0gSFBMIC0gPGp0QGhwbC5ocC5jb20+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNCBKZWFuIFRvdXJyaWxoZXMsIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKi8KKworI2lmbmRlZiBfSVdfSEFORExFUl9ICisjZGVmaW5lIF9JV19IQU5ETEVSX0gKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqIERPQ1VNRU5UQVRJT04gKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogSW5pdGlhbCBkcml2ZXIgQVBJICgxOTk2IC0+IG9ud2FyZCkgOgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFRoZSBpbml0aWFsIEFQSSBqdXN0IHNlbmRzIHRoZSBJT0NUTCByZXF1ZXN0IHJlY2VpdmVkIGZyb20gdXNlciBzcGFjZQorICogdG8gdGhlIGRyaXZlciAodmlhIHRoZSBkcml2ZXIgaW9jdGwgaGFuZGxlcikuIFRoZSBkcml2ZXIgaGFzIHRvCisgKiBoYW5kbGUgYWxsIHRoZSByZXN0Li4uCisgKgorICogVGhlIGluaXRpYWwgQVBJIGFsc28gZGVmaW5lcyBhIHNwZWNpZmljIGhhbmRsZXIgaW4gc3RydWN0IG5ldF9kZXZpY2UKKyAqIHRvIGhhbmRsZSB3aXJlbGVzcyBzdGF0aXN0aWNzLgorICoKKyAqIFRoZSBpbml0aWFsIEFQSXMgc2VydmVkIHVzIHdlbGwgYW5kIGhhcyBwcm92ZW4gYSByZWFzb25hYmx5IGdvb2QgZGVzaWduLgorICogSG93ZXZlciwgdGhlcmUgaXMgYSBmZXcgc2hvcnRjb21taW5ncyA6CisgKglvIE5vIGV2ZW50cywgZXZlcnl0aGluZyBpcyBhIHJlcXVlc3QgdG8gdGhlIGRyaXZlci4KKyAqCW8gTGFyZ2UgaW9jdGwgZnVuY3Rpb24gaW4gZHJpdmVyIHdpdGggZ2lnYW50aWMgc3dpdGNoIHN0YXRlbWVudAorICoJICAoaS5lLiBzcGFnaGV0dGkgY29kZSkuCisgKglvIERyaXZlciBoYXMgdG8gbWVzcyB1cCB3aXRoIGNvcHlfdG8vZnJvbV91c2VyLCBhbmQgaW4gbWFueSBjYXNlcworICoJICBkb2VzIGl0IHVucHJvcGVybHkuIENvbW1vbiBtaXN0YWtlcyBhcmUgOgorICoJCSogYnVmZmVyIG92ZXJmbG93cyAobm8gY2hlY2tzIG9yIG9mZiBieSBvbmUgY2hlY2tzKQorICoJCSogY2FsbCBjb3B5X3RvL2Zyb21fdXNlciB3aXRoIGlycSBkaXNhYmxlZAorICoJbyBUaGUgdXNlciBzcGFjZSBpbnRlcmZhY2UgaXMgdGllZCB0byBpb2N0bCBiZWNhdXNlIG9mIHRoZSB1c2UKKyAqCSAgY29weV90by9mcm9tX3VzZXIuCisgKgorICogTmV3IGRyaXZlciBBUEkgKDIwMDIgLT4gb253YXJkKSA6CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBUaGUgbmV3IGRyaXZlciBBUEkgaXMganVzdCBhIGJ1bmNoIG9mIHN0YW5kYXJkIGZ1bmN0aW9ucyAoaGFuZGxlcnMpLAorICogZWFjaCBoYW5kbGluZyBhIHNwZWNpZmljIFdpcmVsZXNzIEV4dGVuc2lvbi4gVGhlIGRyaXZlciBqdXN0IGV4cG9ydAorICogdGhlIGxpc3Qgb2YgaGFuZGxlciBpdCBzdXBwb3J0cywgYW5kIHRob3NlIHdpbGwgYmUgY2FsbGVkIGFwcm9wcmlhdGVseS4KKyAqCisgKiBJIHRyaWVkIHRvIGtlZXAgdGhlIG1haW4gYWR2YW50YWdlIG9mIHRoZSBwcmV2aW91cyBBUEkgKHNpbXBsaWNpdHksCisgKiBlZmZpY2llbmN5IGFuZCBsaWdodCB3ZWlnaHQpLCBhbmQgYWxzbyBJIHByb3ZpZGUgYSBnb29kIGRvc2Ugb2YgYmFja3dhcmQKKyAqIGNvbXBhdGliaWxpdHkgKG1vc3Qgc3RydWN0dXJlcyBhcmUgdGhlIHNhbWUsIGRyaXZlciBjYW4gdXNlIGJvdGggQVBJCisgKiBzaW11bHRhbmVvdXNseSwgLi4uKS4KKyAqIEhvcGVmdWxseSwgSSd2ZSBhbHNvIGFkZHJlc3NlZCB0aGUgc2hvcnRjb21taW5nIG9mIHRoZSBpbml0aWFsIEFQSS4KKyAqCisgKiBUaGUgYWR2YW50YWdlIG9mIHRoZSBuZXcgQVBJIGFyZSA6CisgKglvIEhhbmRsaW5nIG9mIEV4dGVuc2lvbnMgaW4gZHJpdmVyIGJyb2tlbiBpbiBzbWFsbCBjb250YWluZWQgZnVuY3Rpb25zCisgKglvIFRpZ2h0ZXIgY2hlY2tzIG9mIGlvY3RsIGJlZm9yZSBjYWxsaW5nIHRoZSBkcml2ZXIKKyAqCW8gRmxleGlibGUgY29tbWl0IHN0cmF0ZWd5IChhdCBsZWFzdCwgdGhlIHN0YXJ0IG9mIGl0KQorICoJbyBCYWNrd2FyZCBjb21wYXRpYmlsaXR5IChjYW4gYmUgbWl4ZWQgd2l0aCBvbGQgQVBJKQorICoJbyBEcml2ZXIgZG9lc24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IG1lbW9yeSBhbmQgdXNlci1zcGFjZSBpc3N1ZXMKKyAqIFRoZSBsYXN0IHBvaW50IGlzIGltcG9ydGFudCBmb3IgdGhlIGZvbGxvd2luZyByZWFzb25zIDoKKyAqCW8gWW91IGFyZSBub3cgYWJsZSB0byBjYWxsIHRoZSBuZXcgZHJpdmVyIEFQSSBmcm9tIGFueSBBUEkgeW91CisgKgkJd2FudCAoaW5jbHVkaW5nIGZyb20gd2l0aGluIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwpLgorICoJbyBDb21tb24gbWlzdGFrZXMgYXJlIGF2b2lkZWQgKGJ1ZmZlciBvdmVyZmxvdywgdXNlciBzcGFjZSBjb3B5CisgKgkJd2l0aCBpcnEgZGlzYWJsZWQgYW5kIHNvIG9uKS4KKyAqCisgKiBUaGUgRHJhd2JhY2sgb2YgdGhlIG5ldyBBUEkgYXJlIDoKKyAqCW8gYmxvYXQgKGVzcGVjaWFsbHkga2VybmVsKQorICoJbyBuZWVkIHRvIG1pZ3JhdGUgZXhpc3RpbmcgZHJpdmVycyB0byBuZXcgQVBJCisgKiBNeSBpbml0aWFsIHRlc3Rpbmcgc2hvd3MgdGhhdCB0aGUgbmV3IEFQSSBhZGRzIGFyb3VuZCAza0IgdG8gdGhlIGtlcm5lbAorICogYW5kIHNhdmUgYmV0d2VlbiAwIGFuZCA1a0IgZnJvbSBhIHR5cGljYWwgZHJpdmVyLgorICogQWxzbywgYXMgYWxsIHN0cnVjdHVyZXMgYW5kIGRhdGEgdHlwZXMgYXJlIHVuY2hhbmdlZCwgdGhlIG1pZ3JhdGlvbiBpcworICogcXVpdGUgc3RyYWlnaHRmb3J3YXJkIChidXQgdGVkaW91cykuCisgKgorICogLS0tCisgKgorICogVGhlIG5ldyBkcml2ZXIgQVBJIGlzIGRlZmluZWQgYmVsb3cgaW4gdGhpcyBmaWxlLiBVc2VyIHNwYWNlIHNob3VsZAorICogbm90IGJlIGF3YXJlIG9mIHdoYXQncyBoYXBwZW5pbmcgZG93biB0aGVyZS4uLgorICoKKyAqIEEgbmV3IGtlcm5lbCB3cmFwcGVyIGlzIGluIGNoYXJnZSBvZiB2YWxpZGF0aW5nIHRoZSBJT0NUTHMgYW5kIGNhbGxpbmcKKyAqIHRoZSBhcHByb3ByaWF0ZSBkcml2ZXIgaGFuZGxlci4gVGhpcyBpcyBpbXBsZW1lbnRlZCBpbiA6CisgKgkjIG5ldC9jb3JlL3dpcmVsZXNzLmMKKyAqCisgKiBUaGUgZHJpdmVyIGV4cG9ydCB0aGUgbGlzdCBvZiBoYW5kbGVycyBpbiA6CisgKgkjIGluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggKG9uZSBwbGFjZSkKKyAqCisgKiBUaGUgbmV3IGRyaXZlciBBUEkgaXMgYXZhaWxhYmxlIGZvciBXSVJFTEVTU19FWFQgPj0gMTMuCisgKiBHb29kIGx1Y2sgd2l0aCBtaWdyYXRpb24gdG8gdGhlIG5ldyBBUEkgOy0pCisgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUSEUgSU1QTEVNRU5UQVRJT04gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyoKKyAqIFNvbWUgb2YgdGhlIGNob2ljZSBJJ3ZlIG1hZGUgYXJlIHByZXR0eSBjb250cm92ZXJzaWFscy4gRGVmaW5pbmcgYW4KKyAqIEFQSSBpcyB2ZXJ5IG11Y2ggd2VpZ2h0aW5nIGNvbXByb21pc2VzLiBUaGlzIGdvZXMgaW50byBzb21lIG9mIHRoZQorICogZGV0YWlscyBhbmQgdGhlIHRoaW5raW5nIGJlaGluZCB0aGUgaW1wbGVtZW50YXRpb24uCisgKgorICogSW1wbGVtZW50YXRpb24gZ29hbHMgOgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiBnb2FscyB3ZXJlIGFzIGZvbGxvdyA6CisgKglvIE9idmlvdXMgOiB5b3Ugc2hvdWxkIG5vdCBuZWVkIGEgUGhEIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZywKKyAqCQl0aGUgYmVuZWZpdCBpcyBlYXNpZXIgbWFpbnRhaW5hbmNlLgorICoJbyBGbGV4aWJsZSA6IGl0IHNob3VsZCBhY2NvbW1vZGF0ZSBhIHdpZGUgdmFyaWV0eSBvZiBkcml2ZXIKKyAqCQlpbXBsZW1lbnRhdGlvbnMgYW5kIGJlIGFzIGZsZXhpYmxlIGFzIHRoZSBvbGQgQVBJLgorICoJbyBMZWFuIDogaXQgc2hvdWxkIGJlIGVmZmljaWVudCBtZW1vcnkgd2lzZSB0byBtaW5pbWlzZSB0aGUgaW1wYWN0CisgKgkJb24ga2VybmVsIGZvb3RwcmludC4KKyAqCW8gVHJhbnNwYXJlbnQgdG8gdXNlciBzcGFjZSA6IHRoZSBsYXJnZSBudW1iZXIgb2YgdXNlciBzcGFjZQorICoJCWFwcGxpY2F0aW9ucyB0aGF0IHVzZSBXaXJlbGVzcyBFeHRlbnNpb25zIHNob3VsZCBub3QgbmVlZAorICoJCWFueSBtb2RpZmljYXRpb25zLgorICoKKyAqIEFycmF5IG9mIGZ1bmN0aW9ucyB2ZXJzdXMgU3RydWN0IG9mIGZ1bmN0aW9ucworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAxKSBIYXZpbmcgYW4gYXJyYXkgb2YgZnVuY3Rpb25zIGFsbG93IHRoZSBrZXJuZWwgY29kZSB0byBhY2Nlc3MgdGhlCisgKiBoYW5kbGVyIGluIGEgc2luZ2xlIGxvb2t1cCwgd2hpY2ggaXMgbXVjaCBtb3JlIGVmZmljaWVudCAodGhpbmsgaGFzaAorICogdGFibGUgaGVyZSkuCisgKiAyKSBUaGUgb25seSBkcmF3YmFjayBpcyB0aGF0IGRyaXZlciB3cml0ZXIgbWF5IHB1dCB0aGVpciBoYW5kbGVyIGluCisgKiB0aGUgd3Jvbmcgc2xvdC4gVGhpcyBpcyB0cml2aWFsIHRvIHRlc3QgKEkgc2V0IHRoZSBmcmVxdWVuY3ksIHRoZQorICogYml0cmF0ZSBjaGFuZ2VzKS4gT25jZSB0aGUgaGFuZGxlciBpcyBpbiB0aGUgcHJvcGVyIHNsb3QsIGl0IHdpbGwgYmUKKyAqIHRoZXJlIGZvcmV2ZXIsIGJlY2F1c2UgdGhlIGFycmF5IGlzIG9ubHkgZXh0ZW5kZWQgYXQgdGhlIGVuZC4KKyAqIDMpIEJhY2t3YXJkL2ZvcndhcmQgY29tcGF0aWJpbGl0eSA6IGFkZGluZyBuZXcgaGFuZGxlciBqdXN0IHJlcXVpcmUKKyAqIGV4dGVuZGluZyB0aGUgYXJyYXksIHNvIHlvdSBjYW4gcHV0IG5ld2VyIGRyaXZlciBpbiBvbGRlciBrZXJuZWwKKyAqIHdpdGhvdXQgaGF2aW5nIHRvIHBhdGNoIHRoZSBrZXJuZWwgY29kZSAoYW5kIHZpY2UgdmVyc2EpLgorICoKKyAqIEFsbCBoYW5kbGVyIGFyZSBvZiB0aGUgc2FtZSBnZW5lcmljIHR5cGUKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFRoYXQncyBhIGZlYXR1cmUgISEhCisgKiAxKSBIYXZpbmcgYSBnZW5lcmljIGhhbmRsZXIgYWxsb3cgdG8gaGF2ZSBnZW5lcmljIGNvZGUsIHdoaWNoIGlzIG1vcmUKKyAqIGVmZmljaWVudC4gSWYgZWFjaCBvZiB0aGUgaGFuZGxlciB3YXMgaW5kaXZpZHVhbGx5IHR5cGVkIEkgd291bGQgbmVlZAorICogdG8gYWRkIGEgYmlnIHN3aXRjaCBpbiB0aGUga2VybmVsICg9PSBtb3JlIGJsb2F0KS4gVGhpcyBzb2x1dGlvbiBpcworICogbW9yZSBzY2FsYWJsZSwgYWRkaW5nIG5ldyBXaXJlbGVzcyBFeHRlbnNpb25zIGRvZXNuJ3QgYWRkIG5ldyBjb2RlLgorICogMikgWW91IGNhbiB1c2UgdGhlIHNhbWUgaGFuZGxlciBpbiBkaWZmZXJlbnQgc2xvdHMgb2YgdGhlIGFycmF5LiBGb3IKKyAqIGhhcmR3YXJlLCBpdCBtYXkgYmUgbW9yZSBlZmZpY2llbnQgb3IgbG9naWNhbCB0byBoYW5kbGUgbXVsdGlwbGUKKyAqIFdpcmVsZXNzIEV4dGVuc2lvbnMgd2l0aCBhIHNpbmdsZSBmdW5jdGlvbiwgYW5kIHRoZSBBUEkgYWxsb3cgeW91IHRvCisgKiBkbyB0aGF0LiAoQW4gZXhhbXBsZSB3b3VsZCBiZSBhIHNpbmdsZSByZWNvcmQgb24gdGhlIGNhcmQgdG8gY29udHJvbAorICogYm90aCBiaXRyYXRlIGFuZCBmcmVxdWVuY3ksIHRoZSBoYW5kbGVyIHdvdWxkIHJlYWQgdGhlIG9sZCByZWNvcmQsCisgKiBtb2RpZnkgaXQgYWNjb3JkaW5nIHRvIGluZm8tPmNtZCBhbmQgcmV3cml0ZSBpdCkuCisgKgorICogRnVuY3Rpb25zIHByb3RvdHlwZSB1c2VzIHVuaW9uIGl3cmVxX2RhdGEKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBTb21lIHdvdWxkIGhhdmUgcHJlZmVyZWQgZnVuY3Rpb25zIGRlZmluZWQgdGhpcyB3YXkgOgorICoJc3RhdGljIGludCBteWRyaXZlcl9pb2N0bF9zZXRyYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIAorICoJCQkJCSAgbG9uZyByYXRlLCBpbnQgYXV0bykKKyAqIDEpIFRoZSBrZXJuZWwgY29kZSBkb2Vzbid0ICJ2YWxpZGF0ZSIgdGhlIGNvbnRlbnQgb2YgaXdyZXFfZGF0YSwgYW5kCisgKiBjYW4ndCBkbyBpdCAoZGlmZmVyZW50IGhhcmR3YXJlIG1heSBoYXZlIGRpZmZlcmVudCBub3Rpb24gb2Ygd2hhdCBhCisgKiB2YWxpZCBmcmVxdWVuY3kgaXMpLCBzbyB3ZSBkb24ndCBwcmV0ZW5kIHRoYXQgd2UgZG8gaXQuCisgKiAyKSBUaGUgYWJvdmUgZm9ybSBpcyBub3QgZXh0ZW5kYWJsZS4gSWYgSSB3YW50IHRvIGFkZCBhIGZsYWcgKGZvcgorICogZXhhbXBsZSB0byBkaXN0aW5ndWlzaCBzZXR0aW5nIG1heCByYXRlIGFuZCBiYXNpYyByYXRlKSwgSSB3b3VsZAorICogYnJlYWsgdGhlIHByb3RvdHlwZS4gVXNpbmcgaXdyZXFfZGF0YSBpcyBtb3JlIGZsZXhpYmxlLgorICogMykgQWxzbywgdGhlIGFib3ZlIGZvcm0gaXMgbm90IGdlbmVyaWMgKHNlZSBhYm92ZSkuCisgKiA0KSBJIGRvbid0IGV4cGVjdCBkcml2ZXIgZGV2ZWxvcHBlciB1c2luZyB0aGUgd3JvbmcgZmllbGQgb2YgdGhlCisgKiB1bmlvbiAoRG9oICEpLCBzbyBzdGF0aWMgdHlwZWNoZWNraW5nIGRvZXNuJ3QgYWRkIG11Y2ggdmFsdWUuCisgKiA1KSBMYXN0bHksIHlvdSBjYW4gc2tpcCB0aGUgdW5pb24gYnkgZG9pbmcgOgorICoJc3RhdGljIGludCBteWRyaXZlcl9pb2N0bF9zZXRyYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisgKgkJCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorICoJCQkJCSAgc3RydWN0IGl3X3BhcmFtICpycnEsCisgKgkJCQkJICBjaGFyICpleHRyYSkKKyAqIEFuZCB0aGVuIGFkZGluZyB0aGUgaGFuZGxlciBpbiB0aGUgYXJyYXkgbGlrZSB0aGlzIDoKKyAqICAgICAgICAoaXdfaGFuZGxlcikgbXlkcml2ZXJfaW9jdGxfc2V0cmF0ZSwgICAgICAgICAgICAgLy8gU0lPQ1NJV1JBVEUKKyAqCisgKiBVc2luZyBmdW5jdGlvbnMgYW5kIG5vdCBhIHJlZ2lzdHJ5CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBBbm90aGVyIGltcGxlbWVudGF0aW9uIG9wdGlvbiB3b3VsZCBoYXZlIGJlZW4gZm9yIGV2ZXJ5IGluc3RhbmNlIHRvCisgKiBkZWZpbmUgYSByZWdpc3RyeSAoYSBzdHJ1Y3QgY29udGFpbmluZyBhbGwgdGhlIFdpcmVsZXNzIEV4dGVuc2lvbnMpCisgKiBhbmQgb25seSBoYXZlIGEgZnVuY3Rpb24gdG8gY29tbWl0IHRoZSByZWdpc3RyeSB0byB0aGUgaGFyZHdhcmUuCisgKiAxKSBUaGlzIGFwcHJvYWNoIGNhbiBiZSBlbXVsYXRlZCBieSB0aGUgY3VycmVudCBjb2RlLCBidXQgbm90CisgKiB2aWNlIHZlcnNhLgorICogMikgU29tZSBkcml2ZXJzIGRvbid0IGtlZXAgYW55IGNvbmZpZ3VyYXRpb24gaW4gdGhlIGRyaXZlciwgZm9yIHRoZW0KKyAqIGFkZGluZyBzdWNoIGEgcmVnaXN0cnkgd291bGQgYmUgYSBzaWduaWZpY2FudCBibG9hdC4KKyAqIDMpIFRoZSBjb2RlIHRvIHRyYW5zbGF0ZSBmcm9tIFdpcmVsZXNzIEV4dGVuc2lvbiB0byBuYXRpdmUgZm9ybWF0IGlzCisgKiBuZWVkZWQgYW55d2F5LCBzbyBpdCB3b3VsZCBub3QgcmVkdWNlIHNpZ25pZmljYW50ZWx5IHRoZSBhbW91bnQgb2YgY29kZS4KKyAqIDQpIFRoZSBjdXJyZW50IGFwcHJvYWNoIG9ubHkgc2VsZWN0aXZlbHkgdHJhbnNsYXRlIFdpcmVsZXNzIEV4dGVuc2lvbnMKKyAqIHRvIG5hdGl2ZSBmb3JtYXQgYW5kIG9ubHkgc2VsZWN0aXZlbHkgc2V0LCB3aGVyZWFzIHRoZSByZWdpc3RyeSBhcHByb2FjaAorICogd291bGQgcmVxdWlyZSB0byB0cmFuc2xhdGUgYWxsIFdFIGFuZCBzZXQgYWxsIHBhcmFtZXRlcnMgZm9yIGFueSBzaW5nbGUKKyAqIGNoYW5nZS4KKyAqIDUpIEZvciBtYW55IFdpcmVsZXNzIEV4dGVuc2lvbnMsIHRoZSBHRVQgb3BlcmF0aW9uIHJldHVybiB0aGUgY3VycmVudAorICogZHluYW1pYyB2YWx1ZSwgbm90IHRoZSB2YWx1ZSB0aGF0IHdhcyBzZXQuCisgKgorICogVGhpcyBoZWFkZXIgaXMgPG5ldC9pd19oYW5kbGVyLmg+CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIDEpIFRoaXMgaGVhZGVyIGlzIGtlcm5lbCBzcGFjZSBvbmx5IGFuZCBzaG91bGQgbm90IGJlIGV4cG9ydGVkIHRvCisgKiB1c2VyIHNwYWNlLiBIZWFkZXJzIGluICJpbmNsdWRlL2xpbnV4LyIgYXJlIGV4cG9ydGVkLCBoZWFkZXJzIGluCisgKiAiaW5jbHVkZS9uZXQvIiBhcmUgbm90LgorICoKKyAqIE1peGVkIDMyLzY0IGJpdCBpc3N1ZXMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFRoZSBXaXJlbGVzcyBFeHRlbnNpb25zIGFyZSBkZXNpZ25lZCB0byBiZSA2NCBiaXQgY2xlYW4sIGJ5IHVzaW5nIG9ubHkKKyAqIGRhdGF0eXBlcyB3aXRoIGV4cGxpY2l0IHN0b3JhZ2Ugc2l6ZS4KKyAqIFRoZXJlIGFyZSBzb21lIGlzc3VlcyByZWxhdGVkIHRvIGtlcm5lbCBhbmQgdXNlciBzcGFjZSB1c2luZyBkaWZmZXJlbnQKKyAqIG1lbW9yeSBtb2RlbCwgYW5kIGluIHBhcnRpY3VsYXIgNjRiaXQga2VybmVsIHdpdGggMzJiaXQgdXNlciBzcGFjZS4KKyAqIFRoZSBwcm9ibGVtIGlzIHJlbGF0ZWQgdG8gc3RydWN0IGl3X3BvaW50LCB0aGF0IGNvbnRhaW5zIGEgcG9pbnRlcgorICogdGhhdCAqbWF5KiBuZWVkIHRvIGJlIHRyYW5zbGF0ZWQuCisgKiBUaGlzIGlzIHF1aXRlIG1lc3N5LiBUaGUgbmV3IEFQSSBkb2Vzbid0IHNvbHZlIHRoaXMgcHJvYmxlbSAoaXQgY2FuJ3QpLAorICogYnV0IGlzIGEgc3RlcCBpbiB0aGUgcmlnaHQgZGlyZWN0aW9uIDoKKyAqIDEpIE1ldGEgZGF0YSBhYm91dCBlYWNoIGlvY3RsIGlzIGVhc2lseSBhdmFpbGFibGUsIHNvIHdlIGtub3cgd2hhdCB0eXBlCisgKiBvZiB0cmFuc2xhdGlvbiBpcyBuZWVkZWQuCisgKiAyKSBUaGUgbW92ZSBvZiBkYXRhIGJldHdlZW4ga2VybmVsIGFuZCB1c2VyIHNwYWNlIGlzIG9ubHkgZG9uZSBpbiBhIHNpbmdsZQorICogcGxhY2UgaW4gdGhlIGtlcm5lbCwgc28gYWRkaW5nIHNwZWNpZmljIGhvb2tzIGluIHRoZXJlIGlzIHBvc3NpYmxlLgorICogMykgSW4gdGhlIGxvbmcgdGVybSwgaXQgYWxsb3dzIHRvIG1vdmUgYXdheSBmcm9tIHVzaW5nIGlvY3RsIGFzIHRoZQorICogdXNlciBzcGFjZSBBUEkuCisgKgorICogU28gbWFueSBjb21tZW50cyBhbmQgc28gZmV3IGNvZGUKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBUaGF0J3MgYSBmZWF0dXJlLiBDb21tZW50cyB3b24ndCBibG9hdCB0aGUgcmVzdWx0aW5nIGtlcm5lbCBiaW5hcnkuCisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqIElOQ0xVREVTICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4JCS8qIElPQ1RMIHVzZXIgc3BhY2UgQVBJICovCisjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqIFZFUlNJT04gKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogVGhpcyBjb25zdGFudCBpcyB1c2VkIHRvIGtub3cgd2hpY2ggdmVyc2lvbiBvZiB0aGUgZHJpdmVyIEFQSSBpcworICogYXZhaWxhYmxlLiBIb3BlZnVsbHksIHRoaXMgd2lsbCBiZSBwcmV0dHkgc3RhYmxlIGFuZCBubyBjaGFuZ2VzCisgKiB3aWxsIGJlIG5lZWRlZC4uLgorICogSSBqdXN0IHBsYW4gdG8gaW5jcmVtZW50IHdpdGggZWFjaCBuZXcgdmVyc2lvbi4KKyAqLworI2RlZmluZSBJV19IQU5ETEVSX1ZFUlNJT04JNgorCisvKgorICogQ2hhbmdlcyA6CisgKgorICogVjIgdG8gVjMKKyAqIC0tLS0tLS0tCisgKgktIE1vdmUgZXZlbnQgZGVmaW5pdGlvbiBpbiA8bGludXgvd2lyZWxlc3MuaD4KKyAqCS0gQWRkIFdpcmVsZXNzIEV2ZW50IHN1cHBvcnQgOgorICoJCW8gd2lyZWxlc3Nfc2VuZF9ldmVudCgpIHByb3RvdHlwZQorICoJCW8gaXdlX3N0cmVhbV9hZGRfZXZlbnQvcG9pbnQoKSBpbmxpbmUgZnVuY3Rpb25zCisgKiBWMyB0byBWNAorICogLS0tLS0tLS0KKyAqCS0gUmVzaHVmZmxlIElXX0hFQURFUl9UWVBFX1hYWCB0byBtYXAgSVdfUFJJVl9UWVBFX1hYWCBjaGFuZ2VzCisgKgorICogVjQgdG8gVjUKKyAqIC0tLS0tLS0tCisgKgktIEFkZCBuZXcgc3B5IHN1cHBvcnQgOiBzdHJ1Y3QgaXdfc3B5X2RhdGEgJiBwcm90b3R5cGVzCisgKgorICogVjUgdG8gVjYKKyAqIC0tLS0tLS0tCisgKgktIENoYW5nZSB0aGUgd2F5IHdlIGdldCB0byBzcHlfZGF0YSBtZXRob2QgZm9yIGFkZGVkIHNhZmV0eQorICoJLSBSZW1vdmUgc3B5ICNpZmRlZiwgdGhleSBhcmUgYWx3YXlzIG9uIC0+IGNsZWFuZXIgY29kZQorICoJLSBBZGQgSVdfREVTQ1JfRkxBR19OT01BWCBmbGFnIGZvciB2ZXJ5IGxhcmdlIHJlcXVlc3RzCisgKgktIFN0YXJ0IG1pZ3JhdGluZyBnZXRfd2lyZWxlc3Nfc3RhdHMgdG8gc3RydWN0IGl3X2hhbmRsZXJfZGVmCisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiogQ09OU1RBTlRTICoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEVuaGFuY2VkIHNweSBzdXBwb3J0IGF2YWlsYWJsZSAqLworI2RlZmluZSBJV19XSVJFTEVTU19TUFkKKyNkZWZpbmUgSVdfV0lSRUxFU1NfVEhSU1BZCisKKy8qIFNwZWNpYWwgZXJyb3IgbWVzc2FnZSBmb3IgdGhlIGRyaXZlciB0byBpbmRpY2F0ZSB0aGF0IHdlCisgKiBzaG91bGQgZG8gYSBjb21taXQgYWZ0ZXIgcmV0dXJuIGZyb20gdGhlIGl3X2hhbmRsZXIgKi8KKyNkZWZpbmUgRUlXQ09NTUlUCUVJTlBST0dSRVNTCisKKy8qIEZsYWdzIGF2YWlsYWJsZSBpbiBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICovCisjZGVmaW5lIElXX1JFUVVFU1RfRkxBR19OT05FCTB4MDAwMAkvKiBObyBmbGFnIHNvIGZhciAqLworCisvKiBUeXBlIG9mIGhlYWRlcnMgd2Uga25vdyBhYm91dCAoYmFzaWNhbGx5IHVuaW9uIGl3cmVxX2RhdGEpICovCisjZGVmaW5lIElXX0hFQURFUl9UWVBFX05VTEwJMAkvKiBOb3QgYXZhaWxhYmxlICovCisjZGVmaW5lIElXX0hFQURFUl9UWVBFX0NIQVIJMgkvKiBjaGFyIFtJRk5BTVNJWl0gKi8KKyNkZWZpbmUgSVdfSEVBREVSX1RZUEVfVUlOVAk0CS8qIF9fdTMyICovCisjZGVmaW5lIElXX0hFQURFUl9UWVBFX0ZSRVEJNQkvKiBzdHJ1Y3QgaXdfZnJlcSAqLworI2RlZmluZSBJV19IRUFERVJfVFlQRV9BRERSCTYJLyogc3RydWN0IHNvY2thZGRyICovCisjZGVmaW5lIElXX0hFQURFUl9UWVBFX1BPSU5UCTgJLyogc3RydWN0IGl3X3BvaW50ICovCisjZGVmaW5lIElXX0hFQURFUl9UWVBFX1BBUkFNCTkJLyogc3RydWN0IGl3X3BhcmFtICovCisjZGVmaW5lIElXX0hFQURFUl9UWVBFX1FVQUwJMTAJLyogc3RydWN0IGl3X3F1YWxpdHkgKi8KKworLyogSGFuZGxpbmcgZmxhZ3MgKi8KKy8qIE1vc3QgYXJlIG5vdCBpbXBsZW1lbnRlZC4gSSBqdXN0IHVzZSB0aGVtIGFzIGEgcmVtaW5kZXIgb2Ygc29tZQorICogY29vbCBmZWF0dXJlcyB3ZSBtaWdodCBuZWVkIG9uZSBkYXkgOy0pICovCisjZGVmaW5lIElXX0RFU0NSX0ZMQUdfTk9ORQkweDAwMDAJLyogT2J2aW91cyAqLworLyogV3JhcHBlciBsZXZlbCBmbGFncyAqLworI2RlZmluZSBJV19ERVNDUl9GTEFHX0RVTVAJMHgwMDAxCS8qIE5vdCBwYXJ0IG9mIHRoZSBkdW1wIGNvbW1hbmQgKi8KKyNkZWZpbmUgSVdfREVTQ1JfRkxBR19FVkVOVAkweDAwMDIJLyogR2VuZXJhdGUgYW4gZXZlbnQgb24gU0VUICovCisjZGVmaW5lIElXX0RFU0NSX0ZMQUdfUkVTVFJJQ1QJMHgwMDA0CS8qIEdFVCA6IHJlcXVlc3QgaXMgUk9PVCBvbmx5ICovCisJCQkJLyogU0VUIDogT21pdCBwYXlsb2FkIGZyb20gZ2VuZXJhdGVkIGl3ZXZlbnQgKi8KKyNkZWZpbmUgSVdfREVTQ1JfRkxBR19OT01BWAkweDAwMDgJLyogR0VUIDogbm8gbGltaXQgb24gcmVxdWVzdCBzaXplICovCisvKiBEcml2ZXIgbGV2ZWwgZmxhZ3MgKi8KKyNkZWZpbmUgSVdfREVTQ1JfRkxBR19XQUlUCTB4MDEwMAkvKiBXYWl0IGZvciBkcml2ZXIgZXZlbnQgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBUWVBFUyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdJUkVMRVNTIEhBTkRMRVIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qCisgKiBBIHdpcmVsZXNzIGhhbmRsZXIgaXMganVzdCBhIHN0YW5kYXJkIGZ1bmN0aW9uLCB0aGF0IGxvb2tzIGxpa2UgdGhlCisgKiBpb2N0bCBoYW5kbGVyLgorICogV2UgYWxzbyBkZWZpbmUgdGhlcmUgaG93IGEgaGFuZGxlciBsaXN0IGxvb2sgbGlrZS4uLiBBcyB0aGUgV2lyZWxlc3MKKyAqIEV4dGVuc2lvbiBzcGFjZSBpcyBxdWl0ZSBkZW5zZSwgd2UgdXNlIGEgc2ltcGxlIGFycmF5LCB3aGljaCBpcyBmYXN0ZXIKKyAqICh0aGF0J3MgdGhlIHBlcmZlY3QgaGFzaCB0YWJsZSA7LSkuCisgKi8KKworLyoKKyAqIE1ldGEgZGF0YSBhYm91dCB0aGUgcmVxdWVzdCBwYXNzZWQgdG8gdGhlIGl3X2hhbmRsZXIuCisgKiBNb3N0IGhhbmRsZXJzIGNhbiBzYWZlbHkgaWdub3JlIHdoYXQncyBpbiB0aGVyZS4KKyAqIFRoZSAnY21kJyBmaWVsZCBtaWdodCBjb21lIGhhbmR5IGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgc2FtZSBoYW5kbGVyCisgKiBmb3IgbXVsdGlwbGUgY29tbWFuZC4uLgorICogVGhpcyBzdHJ1Y3QgaXMgYWxzbyBteSBsb25nIHRlcm0gaW5zdXJhbmNlLiBJIGNhbiBhZGQgbmV3IGZpZWxkcyBoZXJlCisgKiB3aXRob3V0IGJyZWFraW5nIHRoZSBwcm90b3R5cGUgb2YgaXdfaGFuZGxlci4uLgorICovCitzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvCit7CisJX191MTYJCWNtZDsJCS8qIFdpcmVsZXNzIEV4dGVuc2lvbiBjb21tYW5kICovCisJX191MTYJCWZsYWdzOwkJLyogTW9yZSB0byBjb21lIDstKSAqLworfTsKKworc3RydWN0IG5ldF9kZXZpY2U7CisKKy8qCisgKiBUaGlzIGlzIGhvdyBhIGZ1bmN0aW9uIGhhbmRsaW5nIGEgV2lyZWxlc3MgRXh0ZW5zaW9uIHNob3VsZCBsb29rCisgKiBsaWtlIChib3RoIGdldCBhbmQgc2V0LCBzdGFuZGFyZCBhbmQgcHJpdmF0ZSkuCisgKi8KK3R5cGVkZWYgaW50ICgqaXdfaGFuZGxlcikoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpOworCisvKgorICogVGhpcyBkZWZpbmUgYWxsIHRoZSBoYW5kbGVyIHRoYXQgdGhlIGRyaXZlciBleHBvcnQuCisgKiBBcyB5b3UgbmVlZCBvbmx5IG9uZSBwZXIgZHJpdmVyIHR5cGUsIHBsZWFzZSB1c2UgYSBzdGF0aWMgY29uc3QKKyAqIHNoYXJlZCBieSBhbGwgZHJpdmVyIGluc3RhbmNlcy4uLiBTYW1lIGZvciB0aGUgbWVtYmVycy4uLgorICogVGhpcyB3aWxsIGJlIGxpbmtlZCBmcm9tIG5ldF9kZXZpY2UgaW4gPGxpbnV4L25ldGRldmljZS5oPgorICovCitzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYKK3sKKwkvKiBOdW1iZXIgb2YgaGFuZGxlcnMgZGVmaW5lZCAobW9yZSBwcmVjaXNlbHksIGluZGV4IG9mIHRoZQorCSAqIGxhc3QgZGVmaW5lZCBoYW5kbGVyICsgMSkgKi8KKwlfX3UxNgkJCW51bV9zdGFuZGFyZDsKKwlfX3UxNgkJCW51bV9wcml2YXRlOworCS8qIE51bWJlciBvZiBwcml2YXRlIGFyZyBkZXNjcmlwdGlvbiAqLworCV9fdTE2CQkJbnVtX3ByaXZhdGVfYXJnczsKKworCS8qIEFycmF5IG9mIGhhbmRsZXJzIGZvciBzdGFuZGFyZCBpb2N0bHMKKwkgKiBXZSB3aWxsIGNhbGwgZGV2LT53aXJlbGVzc19oYW5kbGVycy0+c3RhbmRhcmRbaW9jdGwgLSBTSU9DU0lXTkFNRV0KKwkgKi8KKwljb25zdCBpd19oYW5kbGVyICoJc3RhbmRhcmQ7CisKKwkvKiBBcnJheSBvZiBoYW5kbGVycyBmb3IgcHJpdmF0ZSBpb2N0bHMKKwkgKiBXaWxsIGNhbGwgZGV2LT53aXJlbGVzc19oYW5kbGVycy0+cHJpdmF0ZVtpb2N0bCAtIFNJT0NJV0ZJUlNUUFJJVl0KKwkgKi8KKwljb25zdCBpd19oYW5kbGVyICoJcHJpdmF0ZTsKKworCS8qIEFyZ3VtZW50cyBvZiBwcml2YXRlIGhhbmRsZXIuIFRoaXMgb25lIGlzIGp1c3QgYSBsaXN0LCBzbyB5b3UKKwkgKiBjYW4gcHV0IGl0IGluIGFueSBvcmRlciB5b3Ugd2FudCBhbmQgc2hvdWxkIG5vdCBsZWF2ZSBob2xlcy4uLgorCSAqIFdlIHdpbGwgYXV0b21hdGljYWxseSBleHBvcnQgdGhhdCB0byB1c2VyIHNwYWNlLi4uICovCisJY29uc3Qgc3RydWN0IGl3X3ByaXZfYXJncyAqCXByaXZhdGVfYXJnczsKKworCS8qIFRoaXMgZmllbGQgd2lsbCBiZSAqcmVtb3ZlZCogaW4gdGhlIG5leHQgdmVyc2lvbiBvZiBXRSAqLworCWxvbmcJCQlzcHlfb2Zmc2V0OwkvKiBETyBOT1QgVVNFICovCisKKwkvKiBOZXcgbG9jYXRpb24gb2YgZ2V0X3dpcmVsZXNzX3N0YXRzLCB0byBkZS1ibG9hdCBzdHJ1Y3QgbmV0X2RldmljZS4KKwkgKiBUaGUgb2xkIHBvaW50ZXIgaW4gc3RydWN0IG5ldF9kZXZpY2Ugd2lsbCBiZSBncmFkdWFsbHkgcGhhc2VkCisJICogb3V0LCBhbmQgZHJpdmVycyBhcmUgZW5jb3VyYWdlZCB0byB1c2UgdGhpcyBvbmUuLi4gKi8KKwlzdHJ1Y3QgaXdfc3RhdGlzdGljcyoJKCpnZXRfd2lyZWxlc3Nfc3RhdHMpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBJT0NUTCBERVNDUklQVElPTiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKgorICogT25lIG9mIHRoZSBtYWluIGdvYWwgb2YgdGhlIG5ldyBpbnRlcmZhY2UgaXMgdG8gZGVhbCBlbnRpcmVseSB3aXRoCisgKiB1c2VyIHNwYWNlL2tlcm5lbCBzcGFjZSBtZW1vcnkgbW92ZS4KKyAqIEZvciB0aGF0LCB3ZSBuZWVkIHRvIGtub3cgOgorICoJbyBpZiBpd3JlcSBpcyBhIHBvaW50ZXIgb3IgY29udGFpbiB0aGUgZnVsbCBkYXRhCisgKglvIHdoYXQgaXMgdGhlIHNpemUgb2YgdGhlIGRhdGEgdG8gY29weQorICoKKyAqIEZvciBwcml2YXRlIElPQ1RMcywgd2UgdXNlIHRoZSBzYW1lIHJ1bGVzIGFzIHVzZWQgYnkgaXdwcml2IGFuZAorICogZGVmaW5lZCBpbiBzdHJ1Y3QgaXdfcHJpdl9hcmdzLgorICoKKyAqIEZvciBzdGFuZGFyZCBJT0NUTHMsIHRoaW5ncyBhcmUgcXVpdGUgZGlmZmVyZW50IGFuZCB3ZSBuZWVkIHRvCisgKiB1c2UgdGhlIHN0dWN0dXJlcyBiZWxvdy4gQWN0dWFsbHksIHRoaXMgc3RydWN0IGlzIGFsc28gbW9yZQorICogZWZmaWNpZW50LCBidXQgdGhhdCdzIGFub3RoZXIgc3RvcnkuLi4KKyAqLworCisvKgorICogRGVzY3JpYmUgaG93IGEgc3RhbmRhcmQgSU9DVEwgbG9va3MgbGlrZS4KKyAqLworc3RydWN0IGl3X2lvY3RsX2Rlc2NyaXB0aW9uCit7CisJX191OAloZWFkZXJfdHlwZTsJCS8qIE5VTEwsIGl3X3BvaW50IG9yIG90aGVyICovCisJX191OAl0b2tlbl90eXBlOwkJLyogRnV0dXJlICovCisJX191MTYJdG9rZW5fc2l6ZTsJCS8qIEdyYW51bGFyaXR5IG9mIHBheWxvYWQgKi8KKwlfX3UxNgltaW5fdG9rZW5zOwkJLyogTWluIGFjY2VwdGFibGUgdG9rZW4gbnVtYmVyICovCisJX191MTYJbWF4X3Rva2VuczsJCS8qIE1heCBhY2NlcHRhYmxlIHRva2VuIG51bWJlciAqLworCV9fdTMyCWZsYWdzOwkJCS8qIFNwZWNpYWwgaGFuZGxpbmcgb2YgdGhlIHJlcXVlc3QgKi8KK307CisKKy8qIE5lZWQgdG8gdGhpbmsgb2Ygc2hvcnQgaGVhZGVyIHRyYW5zbGF0aW9uIHRhYmxlLiBMYXRlci4gKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEVOSEFOQ0VEIFNQWSBTVVBQT1JUIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyoKKyAqIEluIHRoZSBvbGQgZGF5cywgdGhlIGRyaXZlciB3YXMgaGFuZGxpbmcgc3B5IHN1cHBvcnQgYWxsIGJ5IGl0c2VsZi4KKyAqIE5vdywgdGhlIGRyaXZlciBjYW4gZGVsZWdhdGUgdGhpcyB0YXNrIHRvIFdpcmVsZXNzIEV4dGVuc2lvbnMuCisgKiBJdCBuZWVkcyB0byBpbmNsdWRlIHRoaXMgc3RydWN0IGluIGl0cyBwcml2YXRlIHBhcnQgYW5kIHVzZSB0aGUKKyAqIHN0YW5kYXJkIHNweSBpd19oYW5kbGVyLgorICovCisKKy8qCisgKiBJbnN0YW5jZSBzcGVjaWZpYyBzcHkgZGF0YSwgaS5lLiBhZGRyZXNzZXMgc3BpZWQgYW5kIHF1YWxpdHkgZm9yIHRoZW0uCisgKi8KK3N0cnVjdCBpd19zcHlfZGF0YQoreworCS8qIC0tLSBTdGFuZGFyZCBzcHkgc3VwcG9ydCAtLS0gKi8KKwlpbnQJCQlzcHlfbnVtYmVyOworCXVfY2hhcgkJCXNweV9hZGRyZXNzW0lXX01BWF9TUFldW0VUSF9BTEVOXTsKKwlzdHJ1Y3QgaXdfcXVhbGl0eQlzcHlfc3RhdFtJV19NQVhfU1BZXTsKKwkvKiAtLS0gRW5oYW5jZWQgc3B5IHN1cHBvcnQgKGV2ZW50KSAqLworCXN0cnVjdCBpd19xdWFsaXR5CXNweV90aHJfbG93OwkvKiBMb3cgdGhyZXNob2xkICovCisJc3RydWN0IGl3X3F1YWxpdHkJc3B5X3Rocl9oaWdoOwkvKiBIaWdoIHRocmVzaG9sZCAqLworCXVfY2hhcgkJCXNweV90aHJfdW5kZXJbSVdfTUFYX1NQWV07Cit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gREVWSUNFIFdJUkVMRVNTIERBVEEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKgorICogVGhpcyBpcyBhbGwgdGhlIHdpcmVsZXNzIGRhdGEgc3BlY2lmaWMgdG8gYSBkZXZpY2UgaW5zdGFuY2UgdGhhdAorICogaXMgbWFuYWdlZCBieSB0aGUgY29yZSBvZiBXaXJlbGVzcyBFeHRlbnNpb25zLgorICogV2Ugb25seSBrZWVwIHBvaW50ZXIgdG8gdGhvc2Ugc3RydWN0dXJlcywgc28gdGhhdCBhIGRyaXZlciBpcyBmcmVlCisgKiB0byBzaGFyZSB0aGVtIGJldHdlZW4gaW5zdGFuY2VzLgorICogVGhpcyBzdHJ1Y3R1cmUgc2hvdWxkIGJlIGluaXRpYWxpc2VkIGJlZm9yZSByZWdpc3RlcmluZyB0aGUgZGV2aWNlLgorICogQWNjZXNzIHRvIHRoaXMgZGF0YSBmb2xsb3cgdGhlIHNhbWUgcnVsZXMgYXMgYW55IG90aGVyIHN0cnVjdCBuZXRfZGV2aWNlCisgKiBkYXRhIChpLmUuIHZhbGlkIGFzIGxvbmcgYXMgc3RydWN0IG5ldF9kZXZpY2UgZXhpc3QsIHNhbWUgbG9ja2luZyBydWxlcykuCisgKi8KK3N0cnVjdCBpd19wdWJsaWNfZGF0YSB7CisJLyogRHJpdmVyIGVuaGFuY2VkIHNweSBzdXBwb3J0ICovCisJc3RydWN0IGl3X3NweV9kYXRhICoJc3B5X2RhdGE7Cit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBQUk9UT1RZUEVTICoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogRnVuY3Rpb25zIHBhcnQgb2YgdGhlIFdpcmVsZXNzIEV4dGVuc2lvbnMgKGRlZmluZWQgaW4gbmV0L2NvcmUvd2lyZWxlc3MuYykuCisgKiBUaG9zZSBtYXkgYmUgY2FsbGVkIG9ubHkgd2l0aGluIHRoZSBrZXJuZWwuCisgKi8KKworLyogRmlyc3QgOiBmdW5jdGlvbiBzdHJpY3RseSB1c2VkIGluc2lkZSB0aGUga2VybmVsICovCisKKy8qIEhhbmRsZSAvcHJvYy9uZXQvd2lyZWxlc3MsIGNhbGxlZCBpbiBuZXQvY29kZS9kZXYuYyAqLworZXh0ZXJuIGludCBkZXZfZ2V0X3dpcmVsZXNzX2luZm8oY2hhciAqIGJ1ZmZlciwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsCisJCQkJIGludCBsZW5ndGgpOworCisvKiBIYW5kbGUgSU9DVExzLCBjYWxsZWQgaW4gbmV0L2NvZGUvZGV2LmMgKi8KK2V4dGVybiBpbnQgd2lyZWxlc3NfcHJvY2Vzc19pb2N0bChzdHJ1Y3QgaWZyZXEgKmlmciwgdW5zaWduZWQgaW50IGNtZCk7CisKKy8qIFNlY29uZCA6IGZ1bmN0aW9ucyB0aGF0IG1heSBiZSBjYWxsZWQgYnkgZHJpdmVyIG1vZHVsZXMgKi8KKworLyogU2VuZCBhIHNpbmdsZSBldmVudCB0byB1c2VyIHNwYWNlICovCitleHRlcm4gdm9pZCB3aXJlbGVzc19zZW5kX2V2ZW50KHN0cnVjdCBuZXRfZGV2aWNlICoJZGV2LAorCQkJCXVuc2lnbmVkIGludAkJY21kLAorCQkJCXVuaW9uIGl3cmVxX2RhdGEgKgl3cnF1LAorCQkJCWNoYXIgKgkJCWV4dHJhKTsKKworLyogV2UgbWF5IG5lZWQgYSBmdW5jdGlvbiB0byBzZW5kIGEgc3RyZWFtIG9mIGV2ZW50cyB0byB1c2VyIHNwYWNlLgorICogTW9yZSBvbiB0aGF0IGxhdGVyLi4uICovCisKKy8qIFN0YW5kYXJkIGhhbmRsZXIgZm9yIFNJT0NTSVdTUFkgKi8KK2V4dGVybiBpbnQgaXdfaGFuZGxlcl9zZXRfc3B5KHN0cnVjdCBuZXRfZGV2aWNlICoJZGV2LAorCQkJICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqCWluZm8sCisJCQkgICAgICB1bmlvbiBpd3JlcV9kYXRhICoJd3JxdSwKKwkJCSAgICAgIGNoYXIgKgkJCWV4dHJhKTsKKy8qIFN0YW5kYXJkIGhhbmRsZXIgZm9yIFNJT0NHSVdTUFkgKi8KK2V4dGVybiBpbnQgaXdfaGFuZGxlcl9nZXRfc3B5KHN0cnVjdCBuZXRfZGV2aWNlICoJZGV2LAorCQkJICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqCWluZm8sCisJCQkgICAgICB1bmlvbiBpd3JlcV9kYXRhICoJd3JxdSwKKwkJCSAgICAgIGNoYXIgKgkJCWV4dHJhKTsKKy8qIFN0YW5kYXJkIGhhbmRsZXIgZm9yIFNJT0NTSVdUSFJTUFkgKi8KK2V4dGVybiBpbnQgaXdfaGFuZGxlcl9zZXRfdGhyc3B5KHN0cnVjdCBuZXRfZGV2aWNlICoJZGV2LAorCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSB1bmlvbiBpd3JlcV9kYXRhICoJd3JxdSwKKwkJCQkgY2hhciAqCQkJZXh0cmEpOworLyogU3RhbmRhcmQgaGFuZGxlciBmb3IgU0lPQ0dJV1RIUlNQWSAqLworZXh0ZXJuIGludCBpd19oYW5kbGVyX2dldF90aHJzcHkoc3RydWN0IG5ldF9kZXZpY2UgKglkZXYsCisJCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJIHVuaW9uIGl3cmVxX2RhdGEgKgl3cnF1LAorCQkJCSBjaGFyICoJCQlleHRyYSk7CisvKiBEcml2ZXIgY2FsbCB0byB1cGRhdGUgc3B5IHJlY29yZHMgKi8KK2V4dGVybiB2b2lkIHdpcmVsZXNzX3NweV91cGRhdGUoc3RydWN0IG5ldF9kZXZpY2UgKglkZXYsCisJCQkJdW5zaWduZWQgY2hhciAqCQlhZGRyZXNzLAorCQkJCXN0cnVjdCBpd19xdWFsaXR5ICoJd3N0YXRzKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKiogSU5MSU5FIEZVTlRJT05TICoqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogRnVuY3Rpb24gdGhhdCBhcmUgc28gc2ltcGxlIHRoYXQgaXQncyBtb3JlIGVmZmljaWVudCBpbmxpbmluZyB0aGVtCisgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqIFdyYXBwZXIgdG8gYWRkIGFuIFdpcmVsZXNzIEV2ZW50IHRvIGEgc3RyZWFtIG9mIGV2ZW50cy4KKyAqLworc3RhdGljIGlubGluZSBjaGFyICoKK2l3ZV9zdHJlYW1fYWRkX2V2ZW50KGNoYXIgKglzdHJlYW0sCQkvKiBTdHJlYW0gb2YgZXZlbnRzICovCisJCSAgICAgY2hhciAqCWVuZHMsCQkvKiBFbmQgb2Ygc3RyZWFtICovCisJCSAgICAgc3RydWN0IGl3X2V2ZW50ICppd2UsCS8qIFBheWxvYWQgKi8KKwkJICAgICBpbnQJZXZlbnRfbGVuKQkvKiBSZWFsIHNpemUgb2YgcGF5bG9hZCAqLworeworCS8qIENoZWNrIGlmIGl0J3MgcG9zc2libGUgKi8KKwlpZigoc3RyZWFtICsgZXZlbnRfbGVuKSA8IGVuZHMpIHsKKwkJaXdlLT5sZW4gPSBldmVudF9sZW47CisJCW1lbWNweShzdHJlYW0sIChjaGFyICopIGl3ZSwgZXZlbnRfbGVuKTsKKwkJc3RyZWFtICs9IGV2ZW50X2xlbjsKKwl9CisJcmV0dXJuIHN0cmVhbTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqIFdyYXBwZXIgdG8gYWRkIGFuIHNob3J0IFdpcmVsZXNzIEV2ZW50IGNvbnRhaW5pbmcgYSBwb2ludGVyIHRvIGEKKyAqIHN0cmVhbSBvZiBldmVudHMuCisgKi8KK3N0YXRpYyBpbmxpbmUgY2hhciAqCitpd2Vfc3RyZWFtX2FkZF9wb2ludChjaGFyICoJc3RyZWFtLAkJLyogU3RyZWFtIG9mIGV2ZW50cyAqLworCQkgICAgIGNoYXIgKgllbmRzLAkJLyogRW5kIG9mIHN0cmVhbSAqLworCQkgICAgIHN0cnVjdCBpd19ldmVudCAqaXdlLAkvKiBQYXlsb2FkICovCisJCSAgICAgY2hhciAqCWV4dHJhKQoreworCWludAlldmVudF9sZW4gPSBJV19FVl9QT0lOVF9MRU4gKyBpd2UtPnUuZGF0YS5sZW5ndGg7CisJLyogQ2hlY2sgaWYgaXQncyBwb3NzaWJsZSAqLworCWlmKChzdHJlYW0gKyBldmVudF9sZW4pIDwgZW5kcykgeworCQlpd2UtPmxlbiA9IGV2ZW50X2xlbjsKKwkJbWVtY3B5KHN0cmVhbSwgKGNoYXIgKikgaXdlLCBJV19FVl9QT0lOVF9MRU4pOworCQltZW1jcHkoc3RyZWFtICsgSVdfRVZfUE9JTlRfTEVOLCBleHRyYSwgaXdlLT51LmRhdGEubGVuZ3RoKTsKKwkJc3RyZWFtICs9IGV2ZW50X2xlbjsKKwl9CisJcmV0dXJuIHN0cmVhbTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqIFdyYXBwZXIgdG8gYWRkIGEgdmFsdWUgdG8gYSBXaXJlbGVzcyBFdmVudCBpbiBhIHN0cmVhbSBvZiBldmVudHMuCisgKiBCZSBjYXJlZnVsLCB0aGlzIG9uZSBpcyB0cmlja3kgdG8gdXNlIHByb3Blcmx5IDoKKyAqIEF0IHRoZSBmaXJzdCBydW4sIHlvdSBuZWVkIHRvIGhhdmUgKHZhbHVlID0gZXZlbnQgKyBJV19FVl9MQ1BfTEVOKS4KKyAqLworc3RhdGljIGlubGluZSBjaGFyICoKK2l3ZV9zdHJlYW1fYWRkX3ZhbHVlKGNoYXIgKglldmVudCwJCS8qIEV2ZW50IGluIHRoZSBzdHJlYW0gKi8KKwkJICAgICBjaGFyICoJdmFsdWUsCQkvKiBWYWx1ZSBpbiBldmVudCAqLworCQkgICAgIGNoYXIgKgllbmRzLAkJLyogRW5kIG9mIHN0cmVhbSAqLworCQkgICAgIHN0cnVjdCBpd19ldmVudCAqaXdlLAkvKiBQYXlsb2FkICovCisJCSAgICAgaW50CWV2ZW50X2xlbikJLyogUmVhbCBzaXplIG9mIHBheWxvYWQgKi8KK3sKKwkvKiBEb24ndCBkdXBsaWNhdGUgTENQICovCisJZXZlbnRfbGVuIC09IElXX0VWX0xDUF9MRU47CisKKwkvKiBDaGVjayBpZiBpdCdzIHBvc3NpYmxlICovCisJaWYoKHZhbHVlICsgZXZlbnRfbGVuKSA8IGVuZHMpIHsKKwkJLyogQWRkIG5ldyB2YWx1ZSAqLworCQltZW1jcHkodmFsdWUsIChjaGFyICopIGl3ZSArIElXX0VWX0xDUF9MRU4sIGV2ZW50X2xlbik7CisJCXZhbHVlICs9IGV2ZW50X2xlbjsKKwkJLyogUGF0Y2ggTENQICovCisJCWl3ZS0+bGVuID0gdmFsdWUgLSBldmVudDsKKwkJbWVtY3B5KGV2ZW50LCAoY2hhciAqKSBpd2UsIElXX0VWX0xDUF9MRU4pOworCX0KKwlyZXR1cm4gdmFsdWU7Cit9CisKKyNlbmRpZgkvKiBfSVdfSEFORExFUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9sYXBiLmggYi9pbmNsdWRlL25ldC9sYXBiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZjYjVkZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L2xhcGIuaApAQCAtMCwwICsxLDE1MiBAQAorI2lmbmRlZiBfTEFQQl9ICisjZGVmaW5lIF9MQVBCX0ggCisjaW5jbHVkZSA8bGludXgvbGFwYi5oPgorCisjZGVmaW5lCUxBUEJfSEVBREVSX0xFTgkyMAkJLyogTEFQQiBvdmVyIEV0aGVybmV0ICsgYSBiaXQgbW9yZSAqLworCisjZGVmaW5lCUxBUEJfQUNLX1BFTkRJTkdfQ09ORElUSU9OCTB4MDEKKyNkZWZpbmUJTEFQQl9SRUpFQ1RfQ09ORElUSU9OCQkweDAyCisjZGVmaW5lCUxBUEJfUEVFUl9SWF9CVVNZX0NPTkRJVElPTgkweDA0CisKKy8qIENvbnRyb2wgZmllbGQgdGVtcGxhdGVzICovCisjZGVmaW5lCUxBUEJfSQkJMHgwMAkvKiBJbmZvcm1hdGlvbiBmcmFtZXMgKi8KKyNkZWZpbmUJTEFQQl9TCQkweDAxCS8qIFN1cGVydmlzb3J5IGZyYW1lcyAqLworI2RlZmluZQlMQVBCX1UJCTB4MDMJLyogVW5udW1iZXJlZCBmcmFtZXMgKi8KKworI2RlZmluZQlMQVBCX1JSCQkweDAxCS8qIFJlY2VpdmVyIHJlYWR5ICovCisjZGVmaW5lCUxBUEJfUk5SCTB4MDUJLyogUmVjZWl2ZXIgbm90IHJlYWR5ICovCisjZGVmaW5lCUxBUEJfUkVKCTB4MDkJLyogUmVqZWN0ICovCisKKyNkZWZpbmUJTEFQQl9TQUJNCTB4MkYJLyogU2V0IEFzeW5jaHJvbm91cyBCYWxhbmNlZCBNb2RlICovCisjZGVmaW5lCUxBUEJfU0FCTUUJMHg2RgkvKiBTZXQgQXN5bmNocm9ub3VzIEJhbGFuY2VkIE1vZGUgRXh0ZW5kZWQgKi8KKyNkZWZpbmUJTEFQQl9ESVNDCTB4NDMJLyogRGlzY29ubmVjdCAqLworI2RlZmluZQlMQVBCX0RNCQkweDBGCS8qIERpc2Nvbm5lY3RlZCBtb2RlICovCisjZGVmaW5lCUxBUEJfVUEJCTB4NjMJLyogVW5udW1iZXJlZCBhY2tub3dsZWRnZSAqLworI2RlZmluZQlMQVBCX0ZSTVIJMHg4NwkvKiBGcmFtZSByZWplY3QgKi8KKworI2RlZmluZSBMQVBCX0lMTEVHQUwJMHgxMDAJLyogSW1wb3NzaWJsZSB0byBiZSBhIHJlYWwgZnJhbWUgdHlwZSAqLworCisjZGVmaW5lCUxBUEJfU1BGCTB4MTAJLyogUG9sbC9maW5hbCBiaXQgZm9yIHN0YW5kYXJkIExBUEIgKi8KKyNkZWZpbmUJTEFQQl9FUEYJMHgwMQkvKiBQb2xsL2ZpbmFsIGJpdCBmb3IgZXh0ZW5kZWQgTEFQQiAqLworCisjZGVmaW5lCUxBUEJfRlJNUl9XCTB4MDEJLyogQ29udHJvbCBmaWVsZCBpbnZhbGlkCSovCisjZGVmaW5lCUxBUEJfRlJNUl9YCTB4MDIJLyogSSBmaWVsZCBpbnZhbGlkCQkqLworI2RlZmluZQlMQVBCX0ZSTVJfWQkweDA0CS8qIEkgZmllbGQgdG9vIGxvbmcJCSovCisjZGVmaW5lCUxBUEJfRlJNUl9aCTB4MDgJLyogSW52YWxpZCBOKFIpCQkJKi8KKworI2RlZmluZQlMQVBCX1BPTExPRkYJMAorI2RlZmluZQlMQVBCX1BPTExPTgkxCisKKy8qIExBUEIgQy1iaXQgKi8KKyNkZWZpbmUgTEFQQl9DT01NQU5ECTEKKyNkZWZpbmUgTEFQQl9SRVNQT05TRQkyCisKKyNkZWZpbmUJTEFQQl9BRERSX0EJMHgwMworI2RlZmluZQlMQVBCX0FERFJfQgkweDAxCisjZGVmaW5lCUxBUEJfQUREUl9DCTB4MEYKKyNkZWZpbmUJTEFQQl9BRERSX0QJMHgwNworCisvKiBEZWZpbmUgTGluayBTdGF0ZSBjb25zdGFudHMuICovCitlbnVtIHsKKwlMQVBCX1NUQVRFXzAsCS8qIERpc2Nvbm5lY3RlZCBTdGF0ZQkJKi8KKwlMQVBCX1NUQVRFXzEsCS8qIEF3YWl0aW5nIENvbm5lY3Rpb24gU3RhdGUJKi8KKwlMQVBCX1NUQVRFXzIsCS8qIEF3YWl0aW5nIERpc2Nvbm5lY3Rpb24gU3RhdGUJKi8KKwlMQVBCX1NUQVRFXzMsCS8qIERhdGEgVHJhbnNmZXIgU3RhdGUJCSovCisJTEFQQl9TVEFURV80CS8qIEZyYW1lIFJlamVjdCBTdGF0ZQkJKi8KK307CisKKyNkZWZpbmUJTEFQQl9ERUZBVUxUX01PREUJCShMQVBCX1NUQU5EQVJEIHwgTEFQQl9TTFAgfCBMQVBCX0RURSkKKyNkZWZpbmUJTEFQQl9ERUZBVUxUX1dJTkRPVwkJNwkJLyogV2luZG93PTcgKi8KKyNkZWZpbmUJTEFQQl9ERUZBVUxUX1QxCQkJKDUgKiBIWikJLyogVDE9NXMgICAgKi8KKyNkZWZpbmUJTEFQQl9ERUZBVUxUX1QyCQkJKDEgKiBIWikJLyogVDI9MXMgICAgKi8KKyNkZWZpbmUJTEFQQl9ERUZBVUxUX04yCQkJMjAJCS8qIE4yPTIwICAgICovCisKKyNkZWZpbmUJTEFQQl9TTU9EVUxVUwk4CisjZGVmaW5lCUxBUEJfRU1PRFVMVVMJMTI4CisKKy8qCisgKglJbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVudCBmcmFtZS4KKyAqLworc3RydWN0IGxhcGJfZnJhbWUgeworCXVuc2lnbmVkIHNob3J0CQl0eXBlOwkJLyogUGFyc2VkIHR5cGUJCSovCisJdW5zaWduZWQgc2hvcnQJCW5yLCBuczsJCS8qIE4oUiksIE4oUykJCSovCisJdW5zaWduZWQgY2hhcgkJY3I7CQkvKiBDb21tYW5kL1Jlc3BvbnNlCSovCisJdW5zaWduZWQgY2hhcgkJcGY7CQkvKiBQb2xsL0ZpbmFsCQkqLworCXVuc2lnbmVkIGNoYXIJCWNvbnRyb2xbMl07CS8qIE9yaWdpbmFsIGNvbnRyb2wgZGF0YSovCit9OworCisvKgorICoJVGhlIHBlciBMQVBCIGNvbm5lY3Rpb24gY29udHJvbCBzdHJ1Y3R1cmUuCisgKi8KK3N0cnVjdCBsYXBiX2NiIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCW5vZGU7CisJc3RydWN0IG5ldF9kZXZpY2UJKmRldjsKKworCS8qIExpbmsgc3RhdHVzIGZpZWxkcyAqLworCXVuc2lnbmVkIGludAkJbW9kZTsKKwl1bnNpZ25lZCBjaGFyCQlzdGF0ZTsKKwl1bnNpZ25lZCBzaG9ydAkJdnMsIHZyLCB2YTsKKwl1bnNpZ25lZCBjaGFyCQljb25kaXRpb247CisJdW5zaWduZWQgc2hvcnQJCW4yLCBuMmNvdW50OworCXVuc2lnbmVkIHNob3J0CQl0MSwgdDI7CisJc3RydWN0IHRpbWVyX2xpc3QJdDF0aW1lciwgdDJ0aW1lcjsKKworCS8qIEludGVybmFsIGNvbnRyb2wgaW5mb3JtYXRpb24gKi8KKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkCXdyaXRlX3F1ZXVlOworCXN0cnVjdCBza19idWZmX2hlYWQJYWNrX3F1ZXVlOworCXVuc2lnbmVkIGNoYXIJCXdpbmRvdzsKKwlzdHJ1Y3QgbGFwYl9yZWdpc3Rlcl9zdHJ1Y3QgY2FsbGJhY2tzOworCisJLyogRlJNUiBjb250cm9sIGluZm9ybWF0aW9uICovCisJc3RydWN0IGxhcGJfZnJhbWUJZnJtcl9kYXRhOworCXVuc2lnbmVkIGNoYXIJCWZybXJfdHlwZTsKKworCWF0b21pY190CQlyZWZjbnQ7Cit9OworCisvKiBsYXBiX2lmYWNlLmMgKi8KK2V4dGVybiB2b2lkIGxhcGJfY29ubmVjdF9jb25maXJtYXRpb24oc3RydWN0IGxhcGJfY2IgKmxhcGIsIGludCk7CitleHRlcm4gdm9pZCBsYXBiX2Nvbm5lY3RfaW5kaWNhdGlvbihzdHJ1Y3QgbGFwYl9jYiAqbGFwYiwgaW50KTsKK2V4dGVybiB2b2lkIGxhcGJfZGlzY29ubmVjdF9jb25maXJtYXRpb24oc3RydWN0IGxhcGJfY2IgKmxhcGIsIGludCk7CitleHRlcm4gdm9pZCBsYXBiX2Rpc2Nvbm5lY3RfaW5kaWNhdGlvbihzdHJ1Y3QgbGFwYl9jYiAqbGFwYiwgaW50KTsKK2V4dGVybiBpbnQgIGxhcGJfZGF0YV9pbmRpY2F0aW9uKHN0cnVjdCBsYXBiX2NiICpsYXBiLCBzdHJ1Y3Qgc2tfYnVmZiAqKTsKK2V4dGVybiBpbnQgIGxhcGJfZGF0YV90cmFuc21pdChzdHJ1Y3QgbGFwYl9jYiAqbGFwYiwgc3RydWN0IHNrX2J1ZmYgKik7CisKKy8qIGxhcGJfaW4uYyAqLworZXh0ZXJuIHZvaWQgbGFwYl9kYXRhX2lucHV0KHN0cnVjdCBsYXBiX2NiICpsYXBiLCBzdHJ1Y3Qgc2tfYnVmZiAqKTsKKworLyogbGFwYl9vdXQuYyAqLworZXh0ZXJuIHZvaWQgbGFwYl9raWNrKHN0cnVjdCBsYXBiX2NiICpsYXBiKTsKK2V4dGVybiB2b2lkIGxhcGJfdHJhbnNtaXRfYnVmZmVyKHN0cnVjdCBsYXBiX2NiICpsYXBiLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBpbnQpOworZXh0ZXJuIHZvaWQgbGFwYl9lc3RhYmxpc2hfZGF0YV9saW5rKHN0cnVjdCBsYXBiX2NiICpsYXBiKTsKK2V4dGVybiB2b2lkIGxhcGJfZW5xdWlyeV9yZXNwb25zZShzdHJ1Y3QgbGFwYl9jYiAqbGFwYik7CitleHRlcm4gdm9pZCBsYXBiX3RpbWVvdXRfcmVzcG9uc2Uoc3RydWN0IGxhcGJfY2IgKmxhcGIpOworZXh0ZXJuIHZvaWQgbGFwYl9jaGVja19pZnJhbWVzX2Fja2VkKHN0cnVjdCBsYXBiX2NiICpsYXBiLCB1bnNpZ25lZCBzaG9ydCk7CitleHRlcm4gdm9pZCBsYXBiX2NoZWNrX25lZWRfcmVzcG9uc2Uoc3RydWN0IGxhcGJfY2IgKmxhcGIsIGludCwgaW50KTsKKworLyogbGFwYl9zdWJyLmMgKi8KK2V4dGVybiB2b2lkIGxhcGJfY2xlYXJfcXVldWVzKHN0cnVjdCBsYXBiX2NiICpsYXBiKTsKK2V4dGVybiB2b2lkIGxhcGJfZnJhbWVzX2Fja2VkKHN0cnVjdCBsYXBiX2NiICpsYXBiLCB1bnNpZ25lZCBzaG9ydCk7CitleHRlcm4gdm9pZCBsYXBiX3JlcXVldWVfZnJhbWVzKHN0cnVjdCBsYXBiX2NiICpsYXBiKTsKK2V4dGVybiBpbnQgIGxhcGJfdmFsaWRhdGVfbnIoc3RydWN0IGxhcGJfY2IgKmxhcGIsIHVuc2lnbmVkIHNob3J0KTsKK2V4dGVybiBpbnQgbGFwYl9kZWNvZGUoc3RydWN0IGxhcGJfY2IgKmxhcGIsIHN0cnVjdCBza19idWZmICosIHN0cnVjdCBsYXBiX2ZyYW1lICopOworZXh0ZXJuIHZvaWQgbGFwYl9zZW5kX2NvbnRyb2woc3RydWN0IGxhcGJfY2IgKmxhcGIsIGludCwgaW50LCBpbnQpOworZXh0ZXJuIHZvaWQgbGFwYl90cmFuc21pdF9mcm1yKHN0cnVjdCBsYXBiX2NiICpsYXBiKTsKKworLyogbGFwYl90aW1lci5jICovCitleHRlcm4gdm9pZCBsYXBiX3N0YXJ0X3QxdGltZXIoc3RydWN0IGxhcGJfY2IgKmxhcGIpOworZXh0ZXJuIHZvaWQgbGFwYl9zdGFydF90MnRpbWVyKHN0cnVjdCBsYXBiX2NiICpsYXBiKTsKK2V4dGVybiB2b2lkIGxhcGJfc3RvcF90MXRpbWVyKHN0cnVjdCBsYXBiX2NiICpsYXBiKTsKK2V4dGVybiB2b2lkIGxhcGJfc3RvcF90MnRpbWVyKHN0cnVjdCBsYXBiX2NiICpsYXBiKTsKK2V4dGVybiBpbnQgIGxhcGJfdDF0aW1lcl9ydW5uaW5nKHN0cnVjdCBsYXBiX2NiICpsYXBiKTsKKworLyoKKyAqIERlYnVnIGxldmVscy4KKyAqCTAgPSBPZmYKKyAqCTEgPSBTdGF0ZSBDaGFuZ2VzCisgKgkyID0gUGFja2V0cyBJL08gYW5kIFN0YXRlIENoYW5nZXMKKyAqCTMgPSBIZXggZHVtcHMsIFBhY2tldHMgSS9PIGFuZCBTdGF0ZSBDaGFuZ2VzLgorICovCisjZGVmaW5lCUxBUEJfREVCVUcJMAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2xsYy5oIGIvaW5jbHVkZS9uZXQvbGxjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzlhZWQyYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L2xsYy5oCkBAIC0wLDAgKzEsOTkgQEAKKyNpZm5kZWYgTExDX0gKKyNkZWZpbmUgTExDX0gKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTcgYnkgUHJvY29tIFRlY2hub2xvZ3ksIEluYy4KKyAqIAkJIDIwMDEtMjAwMyBieSBBcm5hbGRvIENhcnZhbGhvIGRlIE1lbG8gPGFjbWVAY29uZWN0aXZhLmNvbS5icj4KKyAqCisgKiBUaGlzIHByb2dyYW0gY2FuIGJlIHJlZGlzdHJpYnV0ZWQgb3IgbW9kaWZpZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgd2l0aG91dCBhbnkgd2FycmFudHkgb3IgaW1wbGllZCB3YXJyYW50eQorICogb2YgbWVyY2hhbnRhYmlsaXR5IG9yIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLgorICoKKyAqIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaWYuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorCitzdHJ1Y3QgbmV0X2RldmljZTsKK3N0cnVjdCBwYWNrZXRfdHlwZTsKK3N0cnVjdCBza19idWZmOworCitzdHJ1Y3QgbGxjX2FkZHIgeworCXVuc2lnbmVkIGNoYXIgbHNhcDsKKwl1bnNpZ25lZCBjaGFyIG1hY1tJRkhXQUREUkxFTl07Cit9OworCisjZGVmaW5lIExMQ19TQVBfU1RBVEVfSU5BQ1RJVkUJMQorI2RlZmluZSBMTENfU0FQX1NUQVRFX0FDVElWRQkyCisKKy8qKgorICogc3RydWN0IGxsY19zYXAgLSBEZWZpbmVzIHRoZSBTQVAgY29tcG9uZW50CisgKgorICogQHN0YXRpb24gLSBzdGF0aW9uIHRoaXMgc2FwIGJlbG9uZ3MgdG8KKyAqIEBzdGF0ZSAtIHNhcCBzdGF0ZQorICogQHBfYml0IC0gb25seSBsb3dlc3Qtb3JkZXIgYml0IHVzZWQKKyAqIEBmX2JpdCAtIG9ubHkgbG93ZXN0LW9yZGVyIGJpdCB1c2VkCisgKiBAbGFkZHIgLSBTQVAgdmFsdWUgaW4gdGhpcyAnbHNhcCcKKyAqIEBub2RlIC0gZW50cnkgaW4gc3RhdGlvbiBzYXBfbGlzdAorICogQHNrX2xpc3QgLSBMTEMgc29ja2V0cyB0aGlzIG9uZSBtYW5hZ2VzCisgKi8KK3N0cnVjdCBsbGNfc2FwIHsKKwl1bnNpZ25lZCBjaGFyCSBzdGF0ZTsKKwl1bnNpZ25lZCBjaGFyCSBwX2JpdDsKKwl1bnNpZ25lZCBjaGFyCSBmX2JpdDsKKwlpbnQJCSAoKnJjdl9mdW5jKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQpOworCXN0cnVjdCBsbGNfYWRkcgkgbGFkZHI7CisJc3RydWN0IGxpc3RfaGVhZCBub2RlOworCXN0cnVjdCB7CisJCXJ3bG9ja190CSAgbG9jazsKKwkJc3RydWN0IGhsaXN0X2hlYWQgbGlzdDsKKwl9IHNrX2xpc3Q7Cit9OworCisjZGVmaW5lIExMQ19ERVNUX0lOVkFMSUQgICAgICAgICAwICAgICAgLyogSW52YWxpZCBMTEMgUERVIHR5cGUgKi8KKyNkZWZpbmUgTExDX0RFU1RfU0FQICAgICAgICAgICAgIDEgICAgICAvKiBUeXBlIDEgZ29lcyBoZXJlICovCisjZGVmaW5lIExMQ19ERVNUX0NPTk4gICAgICAgICAgICAyICAgICAgLyogVHlwZSAyIGdvZXMgaGVyZSAqLworCitleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBsbGNfc2FwX2xpc3Q7CitleHRlcm4gcndsb2NrX3QgbGxjX3NhcF9saXN0X2xvY2s7CitleHRlcm4gdW5zaWduZWQgY2hhciBsbGNfc3RhdGlvbl9tYWNfc2FbRVRIX0FMRU5dOworCitleHRlcm4gaW50IGxsY19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJICAgc3RydWN0IHBhY2tldF90eXBlICpwdCk7CisKK2V4dGVybiBpbnQgbGxjX21hY19oZHJfaW5pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgIHVuc2lnbmVkIGNoYXIgKnNhLCB1bnNpZ25lZCBjaGFyICpkYSk7CisKK2V4dGVybiB2b2lkIGxsY19hZGRfcGFjayhpbnQgdHlwZSwgdm9pZCAoKmhhbmRsZXIpKHN0cnVjdCBsbGNfc2FwICpzYXAsCisJCQkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSk7CitleHRlcm4gdm9pZCBsbGNfcmVtb3ZlX3BhY2soaW50IHR5cGUpOworCitleHRlcm4gdm9pZCBsbGNfc2V0X3N0YXRpb25faGFuZGxlcih2b2lkICgqaGFuZGxlcikoc3RydWN0IHNrX2J1ZmYgKnNrYikpOworCitleHRlcm4gc3RydWN0IGxsY19zYXAgKmxsY19zYXBfb3Blbih1bnNpZ25lZCBjaGFyIGxzYXAsCisJCQkJICAgIGludCAoKnJjdikoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCSAgICAgICBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0KSk7CitleHRlcm4gdm9pZCBsbGNfc2FwX2Nsb3NlKHN0cnVjdCBsbGNfc2FwICpzYXApOworCitleHRlcm4gc3RydWN0IGxsY19zYXAgKmxsY19zYXBfZmluZCh1bnNpZ25lZCBjaGFyIHNhcF92YWx1ZSk7CisKK2V4dGVybiBpbnQgbGxjX2J1aWxkX2FuZF9zZW5kX3VpX3BrdChzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgdW5zaWduZWQgY2hhciAqZG1hYywgdW5zaWduZWQgY2hhciBkc2FwKTsKKworZXh0ZXJuIGludCBsbGNfc3RhdGlvbl9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgbGxjX3N0YXRpb25fZXhpdCh2b2lkKTsKKworI2lmZGVmIENPTkZJR19QUk9DX0ZTCitleHRlcm4gaW50IGxsY19wcm9jX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBsbGNfcHJvY19leGl0KHZvaWQpOworI2Vsc2UKKyNkZWZpbmUgbGxjX3Byb2NfaW5pdCgpCSgwKQorI2RlZmluZSBsbGNfcHJvY19leGl0KCkJZG8geyB9IHdoaWxlKDApCisjZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi8KKyNlbmRpZiAvKiBMTENfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbGxjX2NfYWMuaCBiL2luY2x1ZGUvbmV0L2xsY19jX2FjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY4M2Y2OQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L2xsY19jX2FjLmgKQEAgLTAsMCArMSwyMDIgQEAKKyNpZm5kZWYgTExDX0NfQUNfSAorI2RlZmluZSBMTENfQ19BQ19ICisvKgorICogQ29weXJpZ2h0IChjKSAxOTk3IGJ5IFByb2NvbSBUZWNobm9sb2d5LEluYy4KKyAqIAkJIDIwMDEgYnkgQXJuYWxkbyBDYXJ2YWxobyBkZSBNZWxvIDxhY21lQGNvbmVjdGl2YS5jb20uYnI+CisgKgorICogVGhpcyBwcm9ncmFtIGNhbiBiZSByZWRpc3RyaWJ1dGVkIG9yIG1vZGlmaWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9yIGltcGxpZWQgd2FycmFudHkKKyAqIG9mIG1lcmNoYW50YWJpbGl0eSBvciBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4KKyAqCisgKiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKy8qIENvbm5lY3Rpb24gY29tcG9uZW50IHN0YXRlIHRyYW5zaXRpb24gYWN0aW9ucyAqLworLyoKKyAqIENvbm5lY3Rpb24gc3RhdGUgdHJhbnNpdGlvbiBhY3Rpb25zCisgKiAoRmIgPSBGIGJpdDsgUGIgPSBQIGJpdDsgWGIgPSBYIGJpdCkKKyAqLworI2RlZmluZSBMTENfQ09OTl9BQ19DTFJfUkVNT1RFX0JVU1kJCQkgMQorI2RlZmluZSBMTENfQ09OTl9BQ19DT05OX0lORAkJCQkgMgorI2RlZmluZSBMTENfQ09OTl9BQ19DT05OX0NPTkZJUk0JCQkgMworI2RlZmluZSBMTENfQ09OTl9BQ19EQVRBX0lORAkJCQkgNAorI2RlZmluZSBMTENfQ09OTl9BQ19ESVNDX0lORAkJCQkgNQorI2RlZmluZSBMTENfQ09OTl9BQ19SRVNFVF9JTkQJCQkJIDYKKyNkZWZpbmUgTExDX0NPTk5fQUNfUkVTRVRfQ09ORklSTQkJCSA3CisjZGVmaW5lIExMQ19DT05OX0FDX1JFUE9SVF9TVEFUVVMJCQkgOAorI2RlZmluZSBMTENfQ09OTl9BQ19DTFJfUkVNT1RFX0JVU1lfSUZfRmJfRVFfMQkJIDkKKyNkZWZpbmUgTExDX0NPTk5fQUNfU1RPUF9SRUpfVE1SX0lGX0RBVEFfRkxBR19FUV8yCTEwCisjZGVmaW5lIExMQ19DT05OX0FDX1NFTkRfRElTQ19DTURfUGJfU0VUX1gJCTExCisjZGVmaW5lIExMQ19DT05OX0FDX1NFTkRfRE1fUlNQX0ZiX1NFVF9QYgkJMTIKKyNkZWZpbmUgTExDX0NPTk5fQUNfU0VORF9ETV9SU1BfRmJfU0VUXzEJCTEzCisjZGVmaW5lIExMQ19DT05OX0FDX1NFTkRfRE1fUlNQX0ZiX1NFVF9GX0ZMQUcJCTE0CisjZGVmaW5lIExMQ19DT05OX0FDX1NFTkRfRlJNUl9SU1BfRmJfU0VUX1gJCTE1CisjZGVmaW5lIExMQ19DT05OX0FDX1JFU0VORF9GUk1SX1JTUF9GYl9TRVRfMAkJMTYKKyNkZWZpbmUgTExDX0NPTk5fQUNfUkVTRU5EX0ZSTVJfUlNQX0ZiX1NFVF9QYgkJMTcKKyNkZWZpbmUgTExDX0NPTk5fQUNfU0VORF9JX0NNRF9QYl9TRVRfMQkJCTE4CisjZGVmaW5lIExMQ19DT05OX0FDX1JFU0VORF9JX0NNRF9QYl9TRVRfMQkJMTkKKyNkZWZpbmUgTExDX0NPTk5fQUNfUkVTRU5EX0lfQ01EX1BiX1NFVF8xX09SX1NFTkRfUlIJMjAKKyNkZWZpbmUgTExDX0NPTk5fQUNfU0VORF9JX1hYWF9YYl9TRVRfMAkJCTIxCisjZGVmaW5lIExMQ19DT05OX0FDX1JFU0VORF9JX1hYWF9YYl9TRVRfMAkJMjIKKyNkZWZpbmUgTExDX0NPTk5fQUNfUkVTRU5EX0lfWFhYX1hiX1NFVF8wX09SX1NFTkRfUlIJMjMKKyNkZWZpbmUgTExDX0NPTk5fQUNfUkVTRU5EX0lfUlNQX0ZiX1NFVF8xCQkyNAorI2RlZmluZSBMTENfQ09OTl9BQ19TRU5EX1JFSl9DTURfUGJfU0VUXzEJCTI1CisjZGVmaW5lIExMQ19DT05OX0FDX1NFTkRfUkVKX1JTUF9GYl9TRVRfMQkJMjYKKyNkZWZpbmUgTExDX0NPTk5fQUNfU0VORF9SRUpfWFhYX1hiX1NFVF8wCQkyNworI2RlZmluZSBMTENfQ09OTl9BQ19TRU5EX1JOUl9DTURfUGJfU0VUXzEJCTI4CisjZGVmaW5lIExMQ19DT05OX0FDX1NFTkRfUk5SX1JTUF9GYl9TRVRfMQkJMjkKKyNkZWZpbmUgTExDX0NPTk5fQUNfU0VORF9STlJfWFhYX1hiX1NFVF8wCQkzMAorI2RlZmluZSBMTENfQ09OTl9BQ19TRVRfUkVNT1RFX0JVU1kJCQkzMQorI2RlZmluZSBMTENfQ09OTl9BQ19PUFRJT05BTF9TRU5EX1JOUl9YWFhfWGJfU0VUXzAJMzIKKyNkZWZpbmUgTExDX0NPTk5fQUNfU0VORF9SUl9DTURfUGJfU0VUXzEJCTMzCisjZGVmaW5lIExMQ19DT05OX0FDX1NFTkRfQUNLX0NNRF9QYl9TRVRfMQkJMzQKKyNkZWZpbmUgTExDX0NPTk5fQUNfU0VORF9SUl9SU1BfRmJfU0VUXzEJCTM1CisjZGVmaW5lIExMQ19DT05OX0FDX1NFTkRfQUNLX1JTUF9GYl9TRVRfMQkJMzYKKyNkZWZpbmUgTExDX0NPTk5fQUNfU0VORF9SUl9YWFhfWGJfU0VUXzAJCTM3CisjZGVmaW5lIExMQ19DT05OX0FDX1NFTkRfQUNLX1hYWF9YYl9TRVRfMAkJMzgKKyNkZWZpbmUgTExDX0NPTk5fQUNfU0VORF9TQUJNRV9DTURfUGJfU0VUX1gJCTM5CisjZGVmaW5lIExMQ19DT05OX0FDX1NFTkRfVUFfUlNQX0ZiX1NFVF9QYgkJNDAKKyNkZWZpbmUgTExDX0NPTk5fQUNfU0VORF9VQV9SU1BfRmJfU0VUX0ZfRkxBRwkJNDEKKyNkZWZpbmUgTExDX0NPTk5fQUNfU19GTEFHX1NFVF8wCQkJNDIKKyNkZWZpbmUgTExDX0NPTk5fQUNfU19GTEFHX1NFVF8xCQkJNDMKKyNkZWZpbmUgTExDX0NPTk5fQUNfU1RBUlRfUF9UTVIJCQkJNDQKKyNkZWZpbmUgTExDX0NPTk5fQUNfU1RBUlRfQUNLX1RNUgkJCTQ1CisjZGVmaW5lIExMQ19DT05OX0FDX1NUQVJUX1JFSl9UTVIJCQk0NgorI2RlZmluZSBMTENfQ09OTl9BQ19TVEFSVF9BQ0tfVE1SX0lGX05PVF9SVU5OSU5HCTQ3CisjZGVmaW5lIExMQ19DT05OX0FDX1NUT1BfQUNLX1RNUgkJCTQ4CisjZGVmaW5lIExMQ19DT05OX0FDX1NUT1BfUF9UTVIJCQkJNDkKKyNkZWZpbmUgTExDX0NPTk5fQUNfU1RPUF9SRUpfVE1SCQkJNTAKKyNkZWZpbmUgTExDX0NPTk5fQUNfU1RPUF9BTExfVE1SUwkJCTUxCisjZGVmaW5lIExMQ19DT05OX0FDX1NUT1BfT1RIRVJfVE1SUwkJCTUyCisjZGVmaW5lIExMQ19DT05OX0FDX1VQREFURV9Ocl9SRUNFSVZFRAkJCTUzCisjZGVmaW5lIExMQ19DT05OX0FDX1VQREFURV9QX0ZMQUcJCQk1NAorI2RlZmluZSBMTENfQ09OTl9BQ19EQVRBX0ZMQUdfU0VUXzIJCQk1NQorI2RlZmluZSBMTENfQ09OTl9BQ19EQVRBX0ZMQUdfU0VUXzAJCQk1NgorI2RlZmluZSBMTENfQ09OTl9BQ19EQVRBX0ZMQUdfU0VUXzEJCQk1NworI2RlZmluZSBMTENfQ09OTl9BQ19EQVRBX0ZMQUdfU0VUXzFfSUZfREFUQV9GTEFHX0VRXzAJNTgKKyNkZWZpbmUgTExDX0NPTk5fQUNfUF9GTEFHX1NFVF8wCQkJNTkKKyNkZWZpbmUgTExDX0NPTk5fQUNfUF9GTEFHX1NFVF9QCQkJNjAKKyNkZWZpbmUgTExDX0NPTk5fQUNfUkVNT1RFX0JVU1lfU0VUXzAJCQk2MQorI2RlZmluZSBMTENfQ09OTl9BQ19SRVRSWV9DTlRfU0VUXzAJCQk2MgorI2RlZmluZSBMTENfQ09OTl9BQ19SRVRSWV9DTlRfSU5DX0JZXzEJCQk2MworI2RlZmluZSBMTENfQ09OTl9BQ19Wcl9TRVRfMAkJCQk2NAorI2RlZmluZSBMTENfQ09OTl9BQ19Wcl9JTkNfQllfMQkJCQk2NQorI2RlZmluZSBMTENfQ09OTl9BQ19Wc19TRVRfMAkJCQk2NgorI2RlZmluZSBMTENfQ09OTl9BQ19Wc19TRVRfTnIJCQkJNjcKKyNkZWZpbmUgTExDX0NPTk5fQUNfRl9GTEFHX1NFVF9QCQkJNjgKKyNkZWZpbmUgTExDX0NPTk5fQUNfU1RPUF9TRU5EQUNLX1RNUgkJCTcwCisjZGVmaW5lIExMQ19DT05OX0FDX1NUQVJUX1NFTkRBQ0tfVE1SX0lGX05PVF9SVU5OSU5HCTcxCisKK3R5cGVkZWYgaW50ICgqbGxjX2Nvbm5fYWN0aW9uX3QpKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKK2V4dGVybiBpbnQgbGxjX2Nvbm5fYWNfY2xlYXJfcmVtb3RlX2J1c3koc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQgbGxjX2Nvbm5fYWNfY29ubl9pbmQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQgbGxjX2Nvbm5fYWNfY29ubl9jb25maXJtKHN0cnVjdCBzb2NrKiBzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IGxsY19jb25uX2FjX2RhdGFfaW5kKHN0cnVjdCBzb2NrKiBzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IGxsY19jb25uX2FjX2Rpc2NfaW5kKHN0cnVjdCBzb2NrKiBzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IGxsY19jb25uX2FjX3JzdF9pbmQoc3RydWN0IHNvY2sqIHNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQgbGxjX2Nvbm5fYWNfcnN0X2NvbmZpcm0oc3RydWN0IHNvY2sqIHNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQgbGxjX2Nvbm5fYWNfY2xlYXJfcmVtb3RlX2J1c3lfaWZfZl9lcV8xKHN0cnVjdCBzb2NrKiBzaywKKwkJCQkJCSAgIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBsbGNfY29ubl9hY19zdG9wX3Jlal90bXJfaWZfZGF0YV9mbGFnX2VxXzIoc3RydWN0IHNvY2sqIHNrLAorCQkJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IGxsY19jb25uX2FjX3NlbmRfZGlzY19jbWRfcF9zZXRfeChzdHJ1Y3Qgc29jayogc2ssCisJCQkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IGxsY19jb25uX2FjX3NlbmRfZG1fcnNwX2Zfc2V0X3Aoc3RydWN0IHNvY2sqIHNrLAorCQkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQgbGxjX2Nvbm5fYWNfc2VuZF9kbV9yc3BfZl9zZXRfMShzdHJ1Y3Qgc29jayogc2ssCisJCQkJCSAgIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBsbGNfY29ubl9hY19zZW5kX2ZybXJfcnNwX2Zfc2V0X3goc3RydWN0IHNvY2sqIHNrLAorCQkJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBsbGNfY29ubl9hY19yZXNlbmRfZnJtcl9yc3BfZl9zZXRfMChzdHJ1Y3Qgc29jayogc2ssCisJCQkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQgbGxjX2Nvbm5fYWNfcmVzZW5kX2ZybXJfcnNwX2Zfc2V0X3Aoc3RydWN0IHNvY2sqIHNrLAorCQkJCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IGxsY19jb25uX2FjX3NlbmRfaV9jbWRfcF9zZXRfMShzdHJ1Y3Qgc29jayogc2ssIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBsbGNfY29ubl9hY19zZW5kX2lfeHh4X3hfc2V0XzAoc3RydWN0IHNvY2sqIHNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQgbGxjX2Nvbm5fYWNfcmVzZW5kX2lfeHh4X3hfc2V0XzAoc3RydWN0IHNvY2sqIHNrLAorCQkJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IGxsY19jb25uX2FjX3Jlc2VuZF9pX3h4eF94X3NldF8wX29yX3NlbmRfcnIoc3RydWN0IHNvY2sqIHNrLAorCQkJCQkJICAgICAgIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBsbGNfY29ubl9hY19yZXNlbmRfaV9yc3BfZl9zZXRfMShzdHJ1Y3Qgc29jayogc2ssCisJCQkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQgbGxjX2Nvbm5fYWNfc2VuZF9yZWpfY21kX3Bfc2V0XzEoc3RydWN0IHNvY2sqIHNrLAorCQkJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IGxsY19jb25uX2FjX3NlbmRfcmVqX3JzcF9mX3NldF8xKHN0cnVjdCBzb2NrKiBzaywKKwkJCQkJICAgIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBsbGNfY29ubl9hY19zZW5kX3Jlal94eHhfeF9zZXRfMChzdHJ1Y3Qgc29jayogc2ssCisJCQkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQgbGxjX2Nvbm5fYWNfc2VuZF9ybnJfY21kX3Bfc2V0XzEoc3RydWN0IHNvY2sqIHNrLAorCQkJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IGxsY19jb25uX2FjX3NlbmRfcm5yX3JzcF9mX3NldF8xKHN0cnVjdCBzb2NrKiBzaywKKwkJCQkJICAgIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBsbGNfY29ubl9hY19zZW5kX3Jucl94eHhfeF9zZXRfMChzdHJ1Y3Qgc29jayogc2ssCisJCQkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQgbGxjX2Nvbm5fYWNfc2V0X3JlbW90ZV9idXN5KHN0cnVjdCBzb2NrKiBzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IGxsY19jb25uX2FjX29wdF9zZW5kX3Jucl94eHhfeF9zZXRfMChzdHJ1Y3Qgc29jayogc2ssCisJCQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQgbGxjX2Nvbm5fYWNfc2VuZF9ycl9jbWRfcF9zZXRfMShzdHJ1Y3Qgc29jayogc2ssCisJCQkJCSAgIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBsbGNfY29ubl9hY19zZW5kX3JyX3JzcF9mX3NldF8xKHN0cnVjdCBzb2NrKiBzaywKKwkJCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IGxsY19jb25uX2FjX3NlbmRfYWNrX3JzcF9mX3NldF8xKHN0cnVjdCBzb2NrKiBzaywKKwkJCQkJICAgIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBsbGNfY29ubl9hY19zZW5kX3JyX3h4eF94X3NldF8wKHN0cnVjdCBzb2NrKiBzaywKKwkJCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IGxsY19jb25uX2FjX3NlbmRfYWNrX3h4eF94X3NldF8wKHN0cnVjdCBzb2NrKiBzaywKKwkJCQkJICAgIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBsbGNfY29ubl9hY19zZW5kX3NhYm1lX2NtZF9wX3NldF94KHN0cnVjdCBzb2NrKiBzaywKKwkJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IGxsY19jb25uX2FjX3NlbmRfdWFfcnNwX2Zfc2V0X3Aoc3RydWN0IHNvY2sqIHNrLAorCQkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQgbGxjX2Nvbm5fYWNfc2V0X3NfZmxhZ18wKHN0cnVjdCBzb2NrKiBzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IGxsY19jb25uX2FjX3NldF9zX2ZsYWdfMShzdHJ1Y3Qgc29jayogc2ssIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBsbGNfY29ubl9hY19zdGFydF9wX3RpbWVyKHN0cnVjdCBzb2NrKiBzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IGxsY19jb25uX2FjX3N0YXJ0X2Fja190aW1lcihzdHJ1Y3Qgc29jayogc2ssIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBsbGNfY29ubl9hY19zdGFydF9yZWpfdGltZXIoc3RydWN0IHNvY2sqIHNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQgbGxjX2Nvbm5fYWNfc3RhcnRfYWNrX3Rtcl9pZl9ub3RfcnVubmluZyhzdHJ1Y3Qgc29jayogc2ssCisJCQkJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IGxsY19jb25uX2FjX3N0b3BfYWNrX3RpbWVyKHN0cnVjdCBzb2NrKiBzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IGxsY19jb25uX2FjX3N0b3BfcF90aW1lcihzdHJ1Y3Qgc29jayogc2ssIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBsbGNfY29ubl9hY19zdG9wX3Jlal90aW1lcihzdHJ1Y3Qgc29jayogc2ssIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBsbGNfY29ubl9hY19zdG9wX2FsbF90aW1lcnMoc3RydWN0IHNvY2sqIHNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQgbGxjX2Nvbm5fYWNfc3RvcF9vdGhlcl90aW1lcnMoc3RydWN0IHNvY2sqIHNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQgbGxjX2Nvbm5fYWNfdXBkX25yX3JlY2VpdmVkKHN0cnVjdCBzb2NrKiBzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IGxsY19jb25uX2FjX2luY190eF93aW5fc2l6ZShzdHJ1Y3Qgc29jayogc2ssIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBsbGNfY29ubl9hY19kZWNfdHhfd2luX3NpemUoc3RydWN0IHNvY2sqIHNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQgbGxjX2Nvbm5fYWNfdXBkX3BfZmxhZyhzdHJ1Y3Qgc29jayogc2ssIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBsbGNfY29ubl9hY19zZXRfZGF0YV9mbGFnXzIoc3RydWN0IHNvY2sqIHNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQgbGxjX2Nvbm5fYWNfc2V0X2RhdGFfZmxhZ18wKHN0cnVjdCBzb2NrKiBzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IGxsY19jb25uX2FjX3NldF9kYXRhX2ZsYWdfMShzdHJ1Y3Qgc29jayogc2ssIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBsbGNfY29ubl9hY19zZXRfZGF0YV9mbGFnXzFfaWZfZGF0YV9mbGFnX2VxXzAoc3RydWN0IHNvY2sqIHNrLAorCQkJCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQgbGxjX2Nvbm5fYWNfc2V0X3BfZmxhZ18wKHN0cnVjdCBzb2NrKiBzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IGxsY19jb25uX2FjX3NldF9yZW1vdGVfYnVzeV8wKHN0cnVjdCBzb2NrKiBzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IGxsY19jb25uX2FjX3NldF9yZXRyeV9jbnRfMChzdHJ1Y3Qgc29jayogc2ssIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBsbGNfY29ubl9hY19zZXRfY2F1c2VfZmxhZ18wKHN0cnVjdCBzb2NrKiBzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IGxsY19jb25uX2FjX3NldF9jYXVzZV9mbGFnXzEoc3RydWN0IHNvY2sqIHNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQgbGxjX2Nvbm5fYWNfaW5jX3JldHJ5X2NudF9ieV8xKHN0cnVjdCBzb2NrKiBzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IGxsY19jb25uX2FjX3NldF92cl8wKHN0cnVjdCBzb2NrKiBzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IGxsY19jb25uX2FjX2luY192cl9ieV8xKHN0cnVjdCBzb2NrKiBzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IGxsY19jb25uX2FjX3NldF92c18wKHN0cnVjdCBzb2NrKiBzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IGxsY19jb25uX2FjX3NldF92c19ucihzdHJ1Y3Qgc29jayogc2ssIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBsbGNfY29ubl9hY19yc3RfdnMoc3RydWN0IHNvY2sqIHNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQgbGxjX2Nvbm5fYWNfdXBkX3ZzKHN0cnVjdCBzb2NrKiBzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IGxsY19jb25uX2Rpc2Moc3RydWN0IHNvY2sqIHNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQgbGxjX2Nvbm5fcmVzZXQoc3RydWN0IHNvY2sqIHNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQgbGxjX2Nvbm5fYWNfZGlzY19jb25maXJtKHN0cnVjdCBzb2NrKiBzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gdTggbGxjX2NpcmN1bGFyX2JldHdlZW4odTggYSwgdTggYiwgdTggYyk7CitleHRlcm4gaW50IGxsY19jb25uX2FjX3NlbmRfYWNrX2lmX25lZWRlZChzdHJ1Y3Qgc29jayogc2ssIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBsbGNfY29ubl9hY19hZGp1c3RfbnB0YV9ieV9ycihzdHJ1Y3Qgc29jayogc2ssIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBsbGNfY29ubl9hY19hZGp1c3RfbnB0YV9ieV9ybnIoc3RydWN0IHNvY2sqIHNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQgbGxjX2Nvbm5fYWNfcnN0X3NlbmRhY2tfZmxhZyhzdHJ1Y3Qgc29jayogc2ssIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBsbGNfY29ubl9hY19zZW5kX2lfcnNwX2FzX2FjayhzdHJ1Y3Qgc29jayogc2ssIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBsbGNfY29ubl9hY19zZW5kX2lfYXNfYWNrKHN0cnVjdCBzb2NrKiBzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKK2V4dGVybiB2b2lkIGxsY19jb25uX2J1c3lfdG1yX2NiKHVuc2lnbmVkIGxvbmcgdGltZW91dF9kYXRhKTsKK2V4dGVybiB2b2lkIGxsY19jb25uX3BmX2N5Y2xlX3Rtcl9jYih1bnNpZ25lZCBsb25nIHRpbWVvdXRfZGF0YSk7CitleHRlcm4gdm9pZCBsbGNfY29ubl9hY2tfdG1yX2NiKHVuc2lnbmVkIGxvbmcgdGltZW91dF9kYXRhKTsKK2V4dGVybiB2b2lkIGxsY19jb25uX3Jlal90bXJfY2IodW5zaWduZWQgbG9uZyB0aW1lb3V0X2RhdGEpOworCitleHRlcm4gdm9pZCBsbGNfY29ubl9zZXRfcF9mbGFnKHN0cnVjdCBzb2NrICpzaywgdTggdmFsdWUpOworI2VuZGlmIC8qIExMQ19DX0FDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2xsY19jX2V2LmggYi9pbmNsdWRlL25ldC9sbGNfY19ldi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzYTQwOTMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9sbGNfY19ldi5oCkBAIC0wLDAgKzEsMjY5IEBACisjaWZuZGVmIExMQ19DX0VWX0gKKyNkZWZpbmUgTExDX0NfRVZfSAorLyoKKyAqIENvcHlyaWdodCAoYykgMTk5NyBieSBQcm9jb20gVGVjaG5vbG9neSxJbmMuCisgKgkJIDIwMDEgYnkgQXJuYWxkbyBDYXJ2YWxobyBkZSBNZWxvIDxhY21lQGNvbmVjdGl2YS5jb20uYnI+CisgKgorICogVGhpcyBwcm9ncmFtIGNhbiBiZSByZWRpc3RyaWJ1dGVkIG9yIG1vZGlmaWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9yIGltcGxpZWQgd2FycmFudHkKKyAqIG9mIG1lcmNoYW50YWJpbGl0eSBvciBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4KKyAqCisgKiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPG5ldC9zb2NrLmg+CisKKy8qIENvbm5lY3Rpb24gY29tcG9uZW50IHN0YXRlIHRyYW5zaXRpb24gZXZlbnQgcXVhbGlmaWVycyAqLworLyogVHlwZXMgb2YgZXZlbnRzIChwb3NzaWJsZSB2YWx1ZXMgaW4gJ2V2LT50eXBlJykgKi8KKyNkZWZpbmUgTExDX0NPTk5fRVZfVFlQRV9TSU1QTEUJCSAxCisjZGVmaW5lIExMQ19DT05OX0VWX1RZUEVfQ09ORElUSU9OCSAyCisjZGVmaW5lIExMQ19DT05OX0VWX1RZUEVfUFJJTQkJIDMKKyNkZWZpbmUgTExDX0NPTk5fRVZfVFlQRV9QRFUJCSA0CS8qIGNvbW1hbmQvcmVzcG9uc2UgUERVICovCisjZGVmaW5lIExMQ19DT05OX0VWX1RZUEVfQUNLX1RNUgkgNQorI2RlZmluZSBMTENfQ09OTl9FVl9UWVBFX1BfVE1SCQkgNgorI2RlZmluZSBMTENfQ09OTl9FVl9UWVBFX1JFSl9UTVIJIDcKKyNkZWZpbmUgTExDX0NPTk5fRVZfVFlQRV9CVVNZX1RNUgkgOAorI2RlZmluZSBMTENfQ09OTl9FVl9UWVBFX1JQVF9TVEFUVVMJIDkKKyNkZWZpbmUgTExDX0NPTk5fRVZfVFlQRV9TRU5EQUNLX1RNUgkxMAorCisjZGVmaW5lIE5CUl9DT05OX0VWCQkgICA1CisvKiBDb25uZWN0aW9uIGV2ZW50cyB3aGljaCBjYXVzZSBzdGF0ZSB0cmFuc2l0aW9ucyB3aGVuIGZ1bGx5IHF1YWxpZmllZCAqLworCisjZGVmaW5lIExMQ19DT05OX0VWX0NPTk5fUkVRCQkJCSAxCisjZGVmaW5lIExMQ19DT05OX0VWX0NPTk5fUkVTUAkJCQkgMgorI2RlZmluZSBMTENfQ09OTl9FVl9EQVRBX1JFUQkJCQkgMworI2RlZmluZSBMTENfQ09OTl9FVl9ESVNDX1JFUQkJCQkgNAorI2RlZmluZSBMTENfQ09OTl9FVl9SRVNFVF9SRVEJCQkJIDUKKyNkZWZpbmUgTExDX0NPTk5fRVZfUkVTRVRfUkVTUAkJCQkgNgorI2RlZmluZSBMTENfQ09OTl9FVl9MT0NBTF9CVVNZX0RFVEVDVEVECQkJIDcKKyNkZWZpbmUgTExDX0NPTk5fRVZfTE9DQUxfQlVTWV9DTEVBUkVECQkJIDgKKyNkZWZpbmUgTExDX0NPTk5fRVZfUlhfQkFEX1BEVQkJCQkgOQorI2RlZmluZSBMTENfQ09OTl9FVl9SWF9ESVNDX0NNRF9QYml0X1NFVF9YCQkxMAorI2RlZmluZSBMTENfQ09OTl9FVl9SWF9ETV9SU1BfRmJpdF9TRVRfWAkJMTEKKyNkZWZpbmUgTExDX0NPTk5fRVZfUlhfRlJNUl9SU1BfRmJpdF9TRVRfWAkJMTIKKyNkZWZpbmUgTExDX0NPTk5fRVZfUlhfSV9DTURfUGJpdF9TRVRfWAkJCTEzCisjZGVmaW5lIExMQ19DT05OX0VWX1JYX0lfQ01EX1BiaXRfU0VUX1hfVU5FWFBEX05zCTE0CisjZGVmaW5lIExMQ19DT05OX0VWX1JYX0lfQ01EX1BiaXRfU0VUX1hfSU5WQUxfTnMJMTUKKyNkZWZpbmUgTExDX0NPTk5fRVZfUlhfSV9SU1BfRmJpdF9TRVRfWAkJCTE2CisjZGVmaW5lIExMQ19DT05OX0VWX1JYX0lfUlNQX0ZiaXRfU0VUX1hfVU5FWFBEX05zCTE3CisjZGVmaW5lIExMQ19DT05OX0VWX1JYX0lfUlNQX0ZiaXRfU0VUX1hfSU5WQUxfTnMJMTgKKyNkZWZpbmUgTExDX0NPTk5fRVZfUlhfUkVKX0NNRF9QYml0X1NFVF9YCQkxOQorI2RlZmluZSBMTENfQ09OTl9FVl9SWF9SRUpfUlNQX0ZiaXRfU0VUX1gJCTIwCisjZGVmaW5lIExMQ19DT05OX0VWX1JYX1JOUl9DTURfUGJpdF9TRVRfWAkJMjEKKyNkZWZpbmUgTExDX0NPTk5fRVZfUlhfUk5SX1JTUF9GYml0X1NFVF9YCQkyMgorI2RlZmluZSBMTENfQ09OTl9FVl9SWF9SUl9DTURfUGJpdF9TRVRfWAkJMjMKKyNkZWZpbmUgTExDX0NPTk5fRVZfUlhfUlJfUlNQX0ZiaXRfU0VUX1gJCTI0CisjZGVmaW5lIExMQ19DT05OX0VWX1JYX1NBQk1FX0NNRF9QYml0X1NFVF9YCQkyNQorI2RlZmluZSBMTENfQ09OTl9FVl9SWF9VQV9SU1BfRmJpdF9TRVRfWAkJMjYKKyNkZWZpbmUgTExDX0NPTk5fRVZfUlhfWFhYX0NNRF9QYml0X1NFVF9YCQkyNworI2RlZmluZSBMTENfQ09OTl9FVl9SWF9YWFhfUlNQX0ZiaXRfU0VUX1gJCTI4CisjZGVmaW5lIExMQ19DT05OX0VWX1JYX1hYWF9ZWVkJCQkJMjkKKyNkZWZpbmUgTExDX0NPTk5fRVZfUlhfWlpaX0NNRF9QYml0X1NFVF9YX0lOVkFMX05yCTMwCisjZGVmaW5lIExMQ19DT05OX0VWX1JYX1paWl9SU1BfRmJpdF9TRVRfWF9JTlZBTF9OcgkzMQorI2RlZmluZSBMTENfQ09OTl9FVl9QX1RNUl9FWFAJCQkJMzIKKyNkZWZpbmUgTExDX0NPTk5fRVZfQUNLX1RNUl9FWFAJCQkJMzMKKyNkZWZpbmUgTExDX0NPTk5fRVZfUkVKX1RNUl9FWFAJCQkJMzQKKyNkZWZpbmUgTExDX0NPTk5fRVZfQlVTWV9UTVJfRVhQCQkJMzUKKyNkZWZpbmUgTExDX0NPTk5fRVZfUlhfWFhYX0NNRF9QYml0X1NFVF8xCQkzNgorI2RlZmluZSBMTENfQ09OTl9FVl9SWF9YWFhfQ01EX1BiaXRfU0VUXzAJCTM3CisjZGVmaW5lIExMQ19DT05OX0VWX1JYX0lfQ01EX1BiaXRfU0VUXzBfVU5FWFBEX05zCTM4CisjZGVmaW5lIExMQ19DT05OX0VWX1JYX0lfUlNQX0ZiaXRfU0VUXzBfVU5FWFBEX05zCTM5CisjZGVmaW5lIExMQ19DT05OX0VWX1JYX0lfUlNQX0ZiaXRfU0VUXzFfVU5FWFBEX05zCTQwCisjZGVmaW5lIExMQ19DT05OX0VWX1JYX0lfQ01EX1BiaXRfU0VUXzFfVU5FWFBEX05zCTQxCisjZGVmaW5lIExMQ19DT05OX0VWX1JYX0lfQ01EX1BiaXRfU0VUXzAJCQk0MgorI2RlZmluZSBMTENfQ09OTl9FVl9SWF9JX1JTUF9GYml0X1NFVF8wCQkJNDMKKyNkZWZpbmUgTExDX0NPTk5fRVZfUlhfSV9DTURfUGJpdF9TRVRfMQkJCTQ0CisjZGVmaW5lIExMQ19DT05OX0VWX1JYX1JSX0NNRF9QYml0X1NFVF8wCQk0NQorI2RlZmluZSBMTENfQ09OTl9FVl9SWF9SUl9SU1BfRmJpdF9TRVRfMAkJNDYKKyNkZWZpbmUgTExDX0NPTk5fRVZfUlhfUlJfUlNQX0ZiaXRfU0VUXzEJCTQ3CisjZGVmaW5lIExMQ19DT05OX0VWX1JYX1JSX0NNRF9QYml0X1NFVF8xCQk0OAorI2RlZmluZSBMTENfQ09OTl9FVl9SWF9STlJfQ01EX1BiaXRfU0VUXzAJCTQ5CisjZGVmaW5lIExMQ19DT05OX0VWX1JYX1JOUl9SU1BfRmJpdF9TRVRfMAkJNTAKKyNkZWZpbmUgTExDX0NPTk5fRVZfUlhfUk5SX1JTUF9GYml0X1NFVF8xCQk1MQorI2RlZmluZSBMTENfQ09OTl9FVl9SWF9STlJfQ01EX1BiaXRfU0VUXzEJCTUyCisjZGVmaW5lIExMQ19DT05OX0VWX1JYX1JFSl9DTURfUGJpdF9TRVRfMAkJNTMKKyNkZWZpbmUgTExDX0NPTk5fRVZfUlhfUkVKX1JTUF9GYml0X1NFVF8wCQk1NAorI2RlZmluZSBMTENfQ09OTl9FVl9SWF9SRUpfQ01EX1BiaXRfU0VUXzEJCTU1CisjZGVmaW5lIExMQ19DT05OX0VWX1JYX0lfUlNQX0ZiaXRfU0VUXzEJCQk1NgorI2RlZmluZSBMTENfQ09OTl9FVl9SWF9SRUpfUlNQX0ZiaXRfU0VUXzEJCTU3CisjZGVmaW5lIExMQ19DT05OX0VWX1JYX1hYWF9SU1BfRmJpdF9TRVRfMQkJNTgKKyNkZWZpbmUgTExDX0NPTk5fRVZfVFhfQlVGRl9GVUxMCQkJNTkKKworI2RlZmluZSBMTENfQ09OTl9FVl9JTklUX1BfRl9DWUNMRQkJCTEwMAorLyoKKyAqIENvbm5lY3Rpb24gZXZlbnQgcXVhbGlmaWVyczsgZm9yIHNvbWUgZXZlbnRzIGEgY2VydGFpbiBjb21iaW5hdGlvbiBvZgorICogdGhlc2UgcXVhbGlmaWVycyBtdXN0IGJlIFRSVUUgYmVmb3JlIGV2ZW50IHJlY29nbml6ZWQgdmFsaWQgZm9yIHN0YXRlOworICogdGhlc2UgY29uc3RhbnRzIGFjdCBhcyBpbmRleGVzIGludG8gdGhlIEV2ZW50IFF1YWxpZmllciBmdW5jdGlvbgorICogdGFibGUKKyAqLworI2RlZmluZSBMTENfQ09OTl9FVl9RRllfREFUQV9GTEFHX0VRXzEJCSAxCisjZGVmaW5lIExMQ19DT05OX0VWX1FGWV9EQVRBX0ZMQUdfRVFfMAkJIDIKKyNkZWZpbmUgTExDX0NPTk5fRVZfUUZZX0RBVEFfRkxBR19FUV8yCQkgMworI2RlZmluZSBMTENfQ09OTl9FVl9RRllfUF9GTEFHX0VRXzEJCSA0CisjZGVmaW5lIExMQ19DT05OX0VWX1FGWV9QX0ZMQUdfRVFfMAkJIDUKKyNkZWZpbmUgTExDX0NPTk5fRVZfUUZZX1BfRkxBR19FUV9GYml0CQkgNgorI2RlZmluZSBMTENfQ09OTl9FVl9RRllfUkVNT1RFX0JVU1lfRVFfMAkgNworI2RlZmluZSBMTENfQ09OTl9FVl9RRllfUkVUUllfQ05UX0xUX04yCQkgOAorI2RlZmluZSBMTENfQ09OTl9FVl9RRllfUkVUUllfQ05UX0dURV9OMgkgOQorI2RlZmluZSBMTENfQ09OTl9FVl9RRllfU19GTEFHX0VRXzEJCTEwCisjZGVmaW5lIExMQ19DT05OX0VWX1FGWV9TX0ZMQUdfRVFfMAkJMTEKKyNkZWZpbmUgTExDX0NPTk5fRVZfUUZZX0lOSVRfUF9GX0NZQ0xFCQkxMgorCitzdHJ1Y3QgbGxjX2Nvbm5fc3RhdGVfZXYgeworCXU4IHR5cGU7CisJdTggcHJpbTsKKwl1OCBwcmltX3R5cGU7CisJdTggcmVhc29uOworCXU4IHN0YXR1czsKKwl1OCBpbmRfcHJpbTsKKwl1OCBjZm1fcHJpbTsKK307CisKK3N0YXRpYyBfX2lubGluZV9fIHN0cnVjdCBsbGNfY29ubl9zdGF0ZV9ldiAqbGxjX2Nvbm5fZXYoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlyZXR1cm4gKHN0cnVjdCBsbGNfY29ubl9zdGF0ZV9ldiAqKXNrYi0+Y2I7Cit9CisKK3R5cGVkZWYgaW50ICgqbGxjX2Nvbm5fZXZfdCkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3R5cGVkZWYgaW50ICgqbGxjX2Nvbm5fZXZfcWZ5cl90KShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpOworCitleHRlcm4gaW50IGxsY19jb25uX2V2X2Nvbm5fcmVxKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IGxsY19jb25uX2V2X2RhdGFfcmVxKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IGxsY19jb25uX2V2X2Rpc2NfcmVxKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IGxsY19jb25uX2V2X3JzdF9yZXEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQgbGxjX2Nvbm5fZXZfbG9jYWxfYnVzeV9kZXRlY3RlZChzdHJ1Y3Qgc29jayAqc2ssCisJCQkJCSAgIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBsbGNfY29ubl9ldl9sb2NhbF9idXN5X2NsZWFyZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQgbGxjX2Nvbm5fZXZfcnhfYmFkX3BkdShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBsbGNfY29ubl9ldl9yeF9kaXNjX2NtZF9wYml0X3NldF94KHN0cnVjdCBzb2NrICpzaywKKwkJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IGxsY19jb25uX2V2X3J4X2RtX3JzcF9mYml0X3NldF94KHN0cnVjdCBzb2NrICpzaywKKwkJCQkJICAgIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBsbGNfY29ubl9ldl9yeF9mcm1yX3JzcF9mYml0X3NldF94KHN0cnVjdCBzb2NrICpzaywKKwkJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IGxsY19jb25uX2V2X3J4X2lfY21kX3BiaXRfc2V0X3hfaW52YWxfbnMoc3RydWN0IHNvY2sgKnNrLAorCQkJCQkJICAgIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBsbGNfY29ubl9ldl9yeF9pX3JzcF9mYml0X3NldF94KHN0cnVjdCBzb2NrICpzaywKKwkJCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IGxsY19jb25uX2V2X3J4X2lfcnNwX2ZiaXRfc2V0X3hfdW5leHBkX25zKHN0cnVjdCBzb2NrICpzaywKKwkJCQkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IGxsY19jb25uX2V2X3J4X2lfcnNwX2ZiaXRfc2V0X3hfaW52YWxfbnMoc3RydWN0IHNvY2sgKnNrLAorCQkJCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQgbGxjX2Nvbm5fZXZfcnhfcmVqX3JzcF9mYml0X3NldF94KHN0cnVjdCBzb2NrICpzaywKKwkJCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQgbGxjX2Nvbm5fZXZfcnhfc2FibWVfY21kX3BiaXRfc2V0X3goc3RydWN0IHNvY2sgKnNrLAorCQkJCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IGxsY19jb25uX2V2X3J4X3VhX3JzcF9mYml0X3NldF94KHN0cnVjdCBzb2NrICpzaywKKwkJCQkJICAgIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBsbGNfY29ubl9ldl9yeF94eHhfY21kX3BiaXRfc2V0X3goc3RydWN0IHNvY2sgKnNrLAorCQkJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBsbGNfY29ubl9ldl9yeF94eHhfcnNwX2ZiaXRfc2V0X3goc3RydWN0IHNvY2sgKnNrLAorCQkJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBsbGNfY29ubl9ldl9yeF96enpfY21kX3BiaXRfc2V0X3hfaW52YWxfbnIoc3RydWN0IHNvY2sgKnNrLAorCQkJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IGxsY19jb25uX2V2X3J4X3p6el9yc3BfZmJpdF9zZXRfeF9pbnZhbF9ucihzdHJ1Y3Qgc29jayAqc2ssCisJCQkJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQgbGxjX2Nvbm5fZXZfcF90bXJfZXhwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IGxsY19jb25uX2V2X2Fja190bXJfZXhwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IGxsY19jb25uX2V2X3Jlal90bXJfZXhwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IGxsY19jb25uX2V2X2J1c3lfdG1yX2V4cChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBsbGNfY29ubl9ldl9zZW5kYWNrX3Rtcl9leHAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKy8qIE5PVF9VU0VEIGZ1bmN0aW9ucyBhbmQgdGhlaXIgdmFyaWF0aW9ucyAqLworZXh0ZXJuIGludCBsbGNfY29ubl9ldl9yeF94eHhfY21kX3BiaXRfc2V0XzEoc3RydWN0IHNvY2sgKnNrLAorCQkJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBsbGNfY29ubl9ldl9yeF94eHhfcnNwX2ZiaXRfc2V0XzEoc3RydWN0IHNvY2sgKnNrLAorCQkJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBsbGNfY29ubl9ldl9yeF9pX2NtZF9wYml0X3NldF8wX3VuZXhwZF9ucyhzdHJ1Y3Qgc29jayAqc2ssCisJCQkJCQkgIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBsbGNfY29ubl9ldl9yeF9pX2NtZF9wYml0X3NldF8xX3VuZXhwZF9ucyhzdHJ1Y3Qgc29jayAqc2ssCisJCQkJCQkgIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBsbGNfY29ubl9ldl9yeF9pX2NtZF9wYml0X3NldF8wKHN0cnVjdCBzb2NrICpzaywKKwkJCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IGxsY19jb25uX2V2X3J4X2lfY21kX3BiaXRfc2V0XzEoc3RydWN0IHNvY2sgKnNrLAorCQkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQgbGxjX2Nvbm5fZXZfcnhfaV9yc3BfZmJpdF9zZXRfMF91bmV4cGRfbnMoc3RydWN0IHNvY2sgKnNrLAorCQkJCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQgbGxjX2Nvbm5fZXZfcnhfaV9yc3BfZmJpdF9zZXRfMV91bmV4cGRfbnMoc3RydWN0IHNvY2sgKnNrLAorCQkJCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQgbGxjX2Nvbm5fZXZfcnhfaV9yc3BfZmJpdF9zZXRfMChzdHJ1Y3Qgc29jayAqc2ssCisJCQkJCSAgIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBsbGNfY29ubl9ldl9yeF9pX3JzcF9mYml0X3NldF8xKHN0cnVjdCBzb2NrICpzaywKKwkJCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IGxsY19jb25uX2V2X3J4X3JyX2NtZF9wYml0X3NldF8wKHN0cnVjdCBzb2NrICpzaywKKwkJCQkJICAgIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBsbGNfY29ubl9ldl9yeF9ycl9jbWRfcGJpdF9zZXRfMShzdHJ1Y3Qgc29jayAqc2ssCisJCQkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQgbGxjX2Nvbm5fZXZfcnhfcnJfcnNwX2ZiaXRfc2V0XzAoc3RydWN0IHNvY2sgKnNrLAorCQkJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IGxsY19jb25uX2V2X3J4X3JyX3JzcF9mYml0X3NldF8xKHN0cnVjdCBzb2NrICpzaywKKwkJCQkJICAgIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBsbGNfY29ubl9ldl9yeF9ybnJfY21kX3BiaXRfc2V0XzAoc3RydWN0IHNvY2sgKnNrLAorCQkJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBsbGNfY29ubl9ldl9yeF9ybnJfY21kX3BiaXRfc2V0XzEoc3RydWN0IHNvY2sgKnNrLAorCQkJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBsbGNfY29ubl9ldl9yeF9ybnJfcnNwX2ZiaXRfc2V0XzAoc3RydWN0IHNvY2sgKnNrLAorCQkJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBsbGNfY29ubl9ldl9yeF9ybnJfcnNwX2ZiaXRfc2V0XzEoc3RydWN0IHNvY2sgKnNrLAorCQkJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBsbGNfY29ubl9ldl9yeF9yZWpfY21kX3BiaXRfc2V0XzAoc3RydWN0IHNvY2sgKnNrLAorCQkJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBsbGNfY29ubl9ldl9yeF9yZWpfY21kX3BiaXRfc2V0XzEoc3RydWN0IHNvY2sgKnNrLAorCQkJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBsbGNfY29ubl9ldl9yeF9yZWpfcnNwX2ZiaXRfc2V0XzAoc3RydWN0IHNvY2sgKnNrLAorCQkJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBsbGNfY29ubl9ldl9yeF9yZWpfcnNwX2ZiaXRfc2V0XzEoc3RydWN0IHNvY2sgKnNrLAorCQkJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBsbGNfY29ubl9ldl9yeF9hbnlfZnJhbWUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQgbGxjX2Nvbm5fZXZfdHhfYnVmZmVyX2Z1bGwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQgbGxjX2Nvbm5fZXZfaW5pdF9wX2ZfY3ljbGUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKworLyogQXZhaWxhYmxlIGNvbm5lY3Rpb24gYWN0aW9uIHF1YWxpZmllcnMgKi8KK2V4dGVybiBpbnQgbGxjX2Nvbm5fZXZfcWxmeV9kYXRhX2ZsYWdfZXFfMShzdHJ1Y3Qgc29jayAqc2ssCisJCQkJCSAgIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBsbGNfY29ubl9ldl9xbGZ5X2RhdGFfZmxhZ19lcV8wKHN0cnVjdCBzb2NrICpzaywKKwkJCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IGxsY19jb25uX2V2X3FsZnlfZGF0YV9mbGFnX2VxXzIoc3RydWN0IHNvY2sgKnNrLAorCQkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQgbGxjX2Nvbm5fZXZfcWxmeV9wX2ZsYWdfZXFfMShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBsbGNfY29ubl9ldl9xbGZ5X2xhc3RfZnJhbWVfZXFfMShzdHJ1Y3Qgc29jayAqc2ssCisJCQkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQgbGxjX2Nvbm5fZXZfcWxmeV9sYXN0X2ZyYW1lX2VxXzAoc3RydWN0IHNvY2sgKnNrLAorCQkJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IGxsY19jb25uX2V2X3FsZnlfcF9mbGFnX2VxXzAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQgbGxjX2Nvbm5fZXZfcWxmeV9wX2ZsYWdfZXFfZihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBsbGNfY29ubl9ldl9xbGZ5X3JlbW90ZV9idXN5X2VxXzAoc3RydWN0IHNvY2sgKnNrLAorCQkJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBsbGNfY29ubl9ldl9xbGZ5X3JlbW90ZV9idXN5X2VxXzEoc3RydWN0IHNvY2sgKnNrLAorCQkJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBsbGNfY29ubl9ldl9xbGZ5X3JldHJ5X2NudF9sdF9uMihzdHJ1Y3Qgc29jayAqc2ssCisJCQkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQgbGxjX2Nvbm5fZXZfcWxmeV9yZXRyeV9jbnRfZ3RlX24yKHN0cnVjdCBzb2NrICpzaywKKwkJCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQgbGxjX2Nvbm5fZXZfcWxmeV9zX2ZsYWdfZXFfMShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBsbGNfY29ubl9ldl9xbGZ5X3NfZmxhZ19lcV8wKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IGxsY19jb25uX2V2X3FsZnlfY2F1c2VfZmxhZ19lcV8xKHN0cnVjdCBzb2NrICpzaywKKwkJCQkJICAgIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBsbGNfY29ubl9ldl9xbGZ5X2NhdXNlX2ZsYWdfZXFfMChzdHJ1Y3Qgc29jayAqc2ssCisJCQkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQgbGxjX2Nvbm5fZXZfcWxmeV9zZXRfc3RhdHVzX2Nvbm4oc3RydWN0IHNvY2sgKnNrLAorCQkJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IGxsY19jb25uX2V2X3FsZnlfc2V0X3N0YXR1c19kaXNjKHN0cnVjdCBzb2NrICpzaywKKwkJCQkJICAgIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBsbGNfY29ubl9ldl9xbGZ5X3NldF9zdGF0dXNfZmFpbGVkKHN0cnVjdCBzb2NrICpzaywKKwkJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IGxsY19jb25uX2V2X3FsZnlfc2V0X3N0YXR1c19yZW1vdGVfYnVzeShzdHJ1Y3Qgc29jayAqc2ssCisJCQkJCQkgIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBsbGNfY29ubl9ldl9xbGZ5X3NldF9zdGF0dXNfcmVmdXNlKHN0cnVjdCBzb2NrICpzaywKKwkJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IGxsY19jb25uX2V2X3FsZnlfc2V0X3N0YXR1c19jb25mbGljdChzdHJ1Y3Qgc29jayAqc2ssCisJCQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQgbGxjX2Nvbm5fZXZfcWxmeV9zZXRfc3RhdHVzX3JzdF9kb25lKHN0cnVjdCBzb2NrICpzaywKKwkJCQkJCXN0cnVjdCBza19idWZmICpza2IpOworCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgbGxjX2Nvbm5fc3BhY2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXJldHVybiBhdG9taWNfcmVhZCgmc2stPnNrX3JtZW1fYWxsb2MpICsgc2tiLT50cnVlc2l6ZSA8CisJICAgICAgICh1bnNpZ25lZClzay0+c2tfcmN2YnVmOworfQorI2VuZGlmIC8qIExMQ19DX0VWX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2xsY19jX3N0LmggYi9pbmNsdWRlL25ldC9sbGNfY19zdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlNzljZmIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9sbGNfY19zdC5oCkBAIC0wLDAgKzEsNDggQEAKKyNpZm5kZWYgTExDX0NfU1RfSAorI2RlZmluZSBMTENfQ19TVF9ICisvKgorICogQ29weXJpZ2h0IChjKSAxOTk3IGJ5IFByb2NvbSBUZWNobm9sb2d5LEluYy4KKyAqCQkyMDAxIGJ5IEFybmFsZG8gQ2FydmFsaG8gZGUgTWVsbyA8YWNtZUBjb25lY3RpdmEuY29tLmJyPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBjYW4gYmUgcmVkaXN0cmlidXRlZCBvciBtb2RpZmllZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCB3aXRob3V0IGFueSB3YXJyYW50eSBvciBpbXBsaWVkIHdhcnJhbnR5CisgKiBvZiBtZXJjaGFudGFiaWxpdHkgb3IgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuCisgKgorICogU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisvKiBDb25uZWN0aW9uIGNvbXBvbmVudCBzdGF0ZSBtYW5hZ2VtZW50ICovCisvKiBjb25uZWN0aW9uIHN0YXRlcyAqLworI2RlZmluZSBMTENfQ09OTl9PVVRfT0ZfU1ZDCQkgMAkvKiBwcmlvciB0byBhbGxvY2F0aW9uICovCisgCisjZGVmaW5lIExMQ19DT05OX1NUQVRFX0FETQkJIDEJLyogZGlzYywgaW5pdGlhbCBzdGF0ZSAqLworI2RlZmluZSBMTENfQ09OTl9TVEFURV9TRVRVUAkJIDIJLyogZGlzY29ubmVjdGVkIHN0YXRlICovCisjZGVmaW5lIExMQ19DT05OX1NUQVRFX05PUk1BTAkJIDMJLyogY29ubmVjdGVkIHN0YXRlICovCisjZGVmaW5lIExMQ19DT05OX1NUQVRFX0JVU1kJCSA0CS8qIGNvbm5lY3RlZCBzdGF0ZSAqLworI2RlZmluZSBMTENfQ09OTl9TVEFURV9SRUoJCSA1CS8qIGNvbm5lY3RlZCBzdGF0ZSAqLworI2RlZmluZSBMTENfQ09OTl9TVEFURV9BV0FJVAkJIDYJLyogY29ubmVjdGVkIHN0YXRlICovCisjZGVmaW5lIExMQ19DT05OX1NUQVRFX0FXQUlUX0JVU1kJIDcJLyogY29ubmVjdGVkIHN0YXRlICovCisjZGVmaW5lIExMQ19DT05OX1NUQVRFX0FXQUlUX1JFSgkgOAkvKiBjb25uZWN0ZWQgc3RhdGUgKi8KKyNkZWZpbmUgTExDX0NPTk5fU1RBVEVfRF9DT05OCQkgOQkvKiBkaXNjb25uZWN0ZWQgc3RhdGUgKi8KKyNkZWZpbmUgTExDX0NPTk5fU1RBVEVfUkVTRVQJCTEwCS8qIGRpc2Nvbm5lY3RlZCBzdGF0ZSAqLworI2RlZmluZSBMTENfQ09OTl9TVEFURV9FUlJPUgkJMTEJLyogZGlzY29ubmVjdGVkIHN0YXRlICovCisjZGVmaW5lIExMQ19DT05OX1NUQVRFX1RFTVAJCTEyCS8qIGRpc2Nvbm5lY3RlZCBzdGF0ZSAqLworCisjZGVmaW5lIE5CUl9DT05OX1NUQVRFUwkJCTEyCS8qIHNpemUgb2Ygc3RhdGUgdGFibGUgKi8KKyNkZWZpbmUgTk9fU1RBVEVfQ0hBTkdFCQkJMTAwCisKKy8qIENvbm5lY3Rpb24gc3RhdGUgdGFibGUgc3RydWN0dXJlICovCitzdHJ1Y3QgbGxjX2Nvbm5fc3RhdGVfdHJhbnMgeworCWxsY19jb25uX2V2X3QJICAgZXY7CisJdTgJCSAgIG5leHRfc3RhdGU7CisJbGxjX2Nvbm5fZXZfcWZ5cl90ICpldl9xdWFsaWZpZXJzOworCWxsY19jb25uX2FjdGlvbl90ICAqZXZfYWN0aW9uczsKK307CisKK3N0cnVjdCBsbGNfY29ubl9zdGF0ZSB7CisJdTgJCQkgICAgY3VycmVudF9zdGF0ZTsKKwlzdHJ1Y3QgbGxjX2Nvbm5fc3RhdGVfdHJhbnMgKip0cmFuc2l0aW9uczsKK307CisKK2V4dGVybiBzdHJ1Y3QgbGxjX2Nvbm5fc3RhdGUgbGxjX2Nvbm5fc3RhdGVfdGFibGVbXTsKKyNlbmRpZiAvKiBMTENfQ19TVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9sbGNfY29ubi5oIGIvaW5jbHVkZS9uZXQvbGxjX2Nvbm4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWQzYmMyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQvbGxjX2Nvbm4uaApAQCAtMCwwICsxLDExOSBAQAorI2lmbmRlZiBMTENfQ09OTl9ICisjZGVmaW5lIExMQ19DT05OX0gKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTcgYnkgUHJvY29tIFRlY2hub2xvZ3ksIEluYy4KKyAqIAkJIDIwMDEsIDIwMDIgYnkgQXJuYWxkbyBDYXJ2YWxobyBkZSBNZWxvIDxhY21lQGNvbmVjdGl2YS5jb20uYnI+CisgKgorICogVGhpcyBwcm9ncmFtIGNhbiBiZSByZWRpc3RyaWJ1dGVkIG9yIG1vZGlmaWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9yIGltcGxpZWQgd2FycmFudHkKKyAqIG9mIG1lcmNoYW50YWJpbGl0eSBvciBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4KKyAqCisgKiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPG5ldC9sbGNfaWYuaD4KKyNpbmNsdWRlIDxuZXQvc29jay5oPgorI2luY2x1ZGUgPGxpbnV4L2xsYy5oPgorCisjZGVmaW5lIExMQ19FVkVOVCAgICAgICAgICAgICAgICAxCisjZGVmaW5lIExMQ19QQUNLRVQgICAgICAgICAgICAgICAyCisKKyNkZWZpbmUgTExDX1BfVElNRSAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgTExDX0FDS19USU1FICAgICAgICAgICAgIDEKKyNkZWZpbmUgTExDX1JFSl9USU1FICAgICAgICAgICAgIDMKKyNkZWZpbmUgTExDX0JVU1lfVElNRSAgICAgICAgICAgIDMKKworc3RydWN0IGxsY190aW1lciB7CisJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CisJdTE2CQkgIGV4cGlyZTsJLyogdGltZXIgZXhwaXJlIHRpbWUgKi8KK307CisKK3N0cnVjdCBsbGNfc29jayB7CisJLyogc3RydWN0IHNvY2sgbXVzdCBiZSB0aGUgZmlyc3QgbWVtYmVyIG9mIGxsY19zb2NrICovCisJc3RydWN0IHNvY2sJICAgIHNrOworCXN0cnVjdCBzb2NrYWRkcl9sbGMgYWRkcjsJCS8qIGFkZHJlc3Mgc29jayBpcyBib3VuZCB0byAqLworCXU4CQkgICAgc3RhdGU7CQkvKiBzdGF0ZSBvZiBjb25uZWN0aW9uICovCisJc3RydWN0IGxsY19zYXAJICAgICpzYXA7CQkvKiBwb2ludGVyIHRvIHBhcmVudCBTQVAgKi8KKwlzdHJ1Y3QgbGxjX2FkZHIJICAgIGxhZGRyOwkJLyogbHNhcC9tYWMgcGFpciAqLworCXN0cnVjdCBsbGNfYWRkcgkgICAgZGFkZHI7CQkvKiBkc2FwL21hYyBwYWlyICovCisJc3RydWN0IG5ldF9kZXZpY2UgICAqZGV2OwkJLyogZGV2aWNlIHRvIHNlbmQgdG8gcmVtb3RlICovCisJdTgJCSAgICByZXRyeV9jb3VudDsJLyogbnVtYmVyIG9mIHJldHJpZXMgKi8KKwl1OAkJICAgIGFja19tdXN0X2JlX3NlbmQ7CisJdTgJCSAgICBmaXJzdF9wZHVfTnM7CisJdTgJCSAgICBucHRhOworCXN0cnVjdCBsbGNfdGltZXIgICAgYWNrX3RpbWVyOworCXN0cnVjdCBsbGNfdGltZXIgICAgcGZfY3ljbGVfdGltZXI7CisJc3RydWN0IGxsY190aW1lciAgICByZWpfc2VudF90aW1lcjsKKwlzdHJ1Y3QgbGxjX3RpbWVyICAgIGJ1c3lfc3RhdGVfdGltZXI7CS8qIGluZCBidXN5IGNsciBhdCByZW1vdGUgTExDICovCisJdTgJCSAgICB2UzsJCQkvKiBzZXEjIG5leHQgaW4tc2VxIEktUERVIHR4J2QqLworCXU4CQkgICAgdlI7CQkJLyogc2VxIyBuZXh0IGluLXNlcSBJLVBEVSByeCdkKi8KKwl1MzIJCSAgICBuMjsJCQkvKiBtYXggbmJyIHJlLXR4J3MgZm9yIHRpbWVvdXQqLworCXUzMgkJICAgIG4xOwkJCS8qIG1heCBuYnIgb2N0ZXRzIGluIEkgUERVICovCisJdTgJCSAgICBrOwkJCS8qIHR4IHdpbmRvdyBzaXplOyBtYXggPSAxMjcgKi8KKwl1OAkJICAgIHJ3OwkJCS8qIHJ4IHdpbmRvdyBzaXplOyBtYXggPSAxMjcgKi8KKwl1OAkJICAgIHBfZmxhZzsJCS8qIHN0YXRlIGZsYWdzICovCisJdTgJCSAgICBmX2ZsYWc7CisJdTgJCSAgICBzX2ZsYWc7CisJdTgJCSAgICBkYXRhX2ZsYWc7CisJdTgJCSAgICByZW1vdGVfYnVzeV9mbGFnOworCXU4CQkgICAgY2F1c2VfZmxhZzsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHBkdV91bmFja19xOwkvKiBQVURzIHNlbnQvd2FpdGluZyBhY2sgKi8KKwl1MTYJCSAgICBsaW5rOwkJLyogbmV0d29yayBsYXllciBsaW5rIG51bWJlciAqLworCXU4CQkgICAgWDsJCQkvKiBhIHRlbXBvcmFyeSB2YXJpYWJsZSAqLworCXU4CQkgICAgYWNrX3BmOwkJLyogdGhpcyBmbGFnIGluZGljYXRlcyB3aGF0IGlzCisJCQkJCQkgICB0aGUgUC1iaXQgb2YgYWNrbm93bGVkZ2UgKi8KKwl1OAkJICAgIGZhaWxlZF9kYXRhX3JlcTsgLyogcmVjb2duaXplIHRoYXQgYWxyZWFkeSBleGlzdCBhCisJCQkJCQlmYWlsZWQgbGxjX2RhdGFfcmVxX2hhbmRsZXIKKwkJCQkJCSh0eF9idWZmZXJfZnVsbCBvciB1bmFjY2VwdGFibGUKKwkJCQkJCXN0YXRlICovCisJdTgJCSAgICBkZWNfc3RlcDsKKwl1OAkJICAgIGluY19jbnRyOworCXU4CQkgICAgZGVjX2NudHI7CisJdTgJCSAgICBjb25uZWN0X3N0ZXA7CisJdTgJCSAgICBsYXN0X25yOwkgICAvKiBOUiBvZiBsYXN0IHBkdSByZWNlaXZlZCAqLworCXUzMgkJICAgIHJ4X3BkdV9oZHI7CSAgIC8qIHVzZWQgZm9yIHNhdmluZyBoZWFkZXIgb2YgbGFzdCBwZHUKKwkJCQkJICAgICAgcmVjZWl2ZWQgYW5kIGNhdXNlZCBzZW5kaW5nIEZSTVIuCisJCQkJCSAgICAgIFVzZWQgZm9yIHJlc2VuZGluZyBGUk1SICovCit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBsbGNfc29jayAqbGxjX3NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaykKK3sKKwlyZXR1cm4gKHN0cnVjdCBsbGNfc29jayAqKXNrOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGxsY19zZXRfYmFja2xvZ190eXBlKHN0cnVjdCBza19idWZmICpza2IsIGNoYXIgdHlwZSkKK3sKKwlza2ItPmNiW3NpemVvZihza2ItPmNiKSAtIDFdID0gdHlwZTsKK30KKworc3RhdGljIF9faW5saW5lX18gY2hhciBsbGNfYmFja2xvZ190eXBlKHN0cnVjdCBza19idWZmICpza2IpCit7CisJcmV0dXJuIHNrYi0+Y2Jbc2l6ZW9mKHNrYi0+Y2IpIC0gMV07Cit9CisKK2V4dGVybiBzdHJ1Y3Qgc29jayAqbGxjX3NrX2FsbG9jKGludCBmYW1pbHksIGludCBwcmlvcml0eSwgc3RydWN0IHByb3RvICpwcm90KTsKK2V4dGVybiB2b2lkIGxsY19za19mcmVlKHN0cnVjdCBzb2NrICpzayk7CisKK2V4dGVybiB2b2lkIGxsY19za19yZXNldChzdHJ1Y3Qgc29jayAqc2spOworCisvKiBBY2Nlc3MgdG8gYSBjb25uZWN0aW9uICovCitleHRlcm4gaW50IGxsY19jb25uX3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiB2b2lkIGxsY19jb25uX3NlbmRfcGR1KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gdm9pZCBsbGNfY29ubl9ydG5fcGR1KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gdm9pZCBsbGNfY29ubl9yZXNlbmRfaV9wZHVfYXNfY21kKHN0cnVjdCBzb2NrICpzaywgdTggbnIsCisJCQkJCSB1OCBmaXJzdF9wX2JpdCk7CitleHRlcm4gdm9pZCBsbGNfY29ubl9yZXNlbmRfaV9wZHVfYXNfcnNwKHN0cnVjdCBzb2NrICpzaywgdTggbnIsCisJCQkJCSB1OCBmaXJzdF9mX2JpdCk7CitleHRlcm4gaW50IGxsY19jb25uX3JlbW92ZV9hY2tlZF9wZHVzKHN0cnVjdCBzb2NrICpjb25uLCB1OCBuciwKKwkJCQkgICAgICB1MTYgKmhvd19tYW55X3VuYWNrZWQpOworZXh0ZXJuIHN0cnVjdCBzb2NrICpsbGNfbG9va3VwX2VzdGFibGlzaGVkKHN0cnVjdCBsbGNfc2FwICpzYXAsCisJCQkJCSAgIHN0cnVjdCBsbGNfYWRkciAqZGFkZHIsCisJCQkJCSAgIHN0cnVjdCBsbGNfYWRkciAqbGFkZHIpOworZXh0ZXJuIHZvaWQgbGxjX3NhcF9hZGRfc29ja2V0KHN0cnVjdCBsbGNfc2FwICpzYXAsIHN0cnVjdCBzb2NrICpzayk7CitleHRlcm4gdm9pZCBsbGNfc2FwX3JlbW92ZV9zb2NrZXQoc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNvY2sgKnNrKTsKKworZXh0ZXJuIHU4IGxsY19kYXRhX2FjY2VwdF9zdGF0ZSh1OCBzdGF0ZSk7CitleHRlcm4gdm9pZCBsbGNfYnVpbGRfb2Zmc2V0X3RhYmxlKHZvaWQpOworZXh0ZXJuIGludCBsbGNfcmVsZWFzZV9zb2NrZXRzKHN0cnVjdCBsbGNfc2FwICpzYXApOworI2VuZGlmIC8qIExMQ19DT05OX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2xsY19pZi5oIGIvaW5jbHVkZS9uZXQvbGxjX2lmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDkwZWFhMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L2xsY19pZi5oCkBAIC0wLDAgKzEsMTAxIEBACisjaWZuZGVmIExMQ19JRl9ICisjZGVmaW5lIExMQ19JRl9ICisvKgorICogQ29weXJpZ2h0IChjKSAxOTk3IGJ5IFByb2NvbSBUZWNobm9sb2d5LEluYy4KKyAqIAkJIDIwMDEgYnkgQXJuYWxkbyBDYXJ2YWxobyBkZSBNZWxvIDxhY21lQGNvbmVjdGl2YS5jb20uYnI+CisgKgorICogVGhpcyBwcm9ncmFtIGNhbiBiZSByZWRpc3RyaWJ1dGVkIG9yIG1vZGlmaWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9yIGltcGxpZWQgd2FycmFudHkKKyAqIG9mIG1lcmNoYW50YWJpbGl0eSBvciBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4KKyAqCisgKiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKy8qIERlZmluZXMgTExDIGludGVyZmFjZSB0byBuZXR3b3JrIGxheWVyICovCisvKiBBdmFpbGFibGUgcHJpbWl0aXZlcyAqLworI2luY2x1ZGUgPGxpbnV4L2lmLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CisjaW5jbHVkZSA8bGludXgvbGxjLmg+CisjaW5jbHVkZSA8bmV0L2xsYy5oPgorCisjZGVmaW5lIExMQ19EQVRBVU5JVF9QUklNCTEKKyNkZWZpbmUgTExDX0NPTk5fUFJJTQkJMgorI2RlZmluZSBMTENfREFUQV9QUklNCQkzCisjZGVmaW5lIExMQ19ESVNDX1BSSU0JCTQKKyNkZWZpbmUgTExDX1JFU0VUX1BSSU0JCTUKKyNkZWZpbmUgTExDX0ZMT1dDT05UUk9MX1BSSU0JNiAvKiBOb3Qgc3VwcG9ydGVkIGF0IHRoaXMgdGltZSAqLworI2RlZmluZSBMTENfRElTQUJMRV9QUklNCTcKKyNkZWZpbmUgTExDX1hJRF9QUklNCQk4CisjZGVmaW5lIExMQ19URVNUX1BSSU0JCTkKKyNkZWZpbmUgTExDX1NBUF9BQ1RJVkFUSU9OICAgICAxMAorI2RlZmluZSBMTENfU0FQX0RFQUNUSVZBVElPTiAgIDExCisKKyNkZWZpbmUgTExDX05CUl9QUklNSVRJVkVTICAgICAxMQorCisjZGVmaW5lIExMQ19JTkQJCQkxCisjZGVmaW5lIExMQ19DT05GSVJNCQkyCisKKy8qIFByaW1pdGl2ZSB0eXBlICovCisjZGVmaW5lIExMQ19QUklNX1RZUEVfUkVRCTEKKyNkZWZpbmUgTExDX1BSSU1fVFlQRV9JTkQJMgorI2RlZmluZSBMTENfUFJJTV9UWVBFX1JFU1AJMworI2RlZmluZSBMTENfUFJJTV9UWVBFX0NPTkZJUk0JNAorCisvKiBSZXNldCByZWFzb25zLCByZW1vdGUgZW50aXR5IG9yIGxvY2FsIExMQyAqLworI2RlZmluZSBMTENfUkVTRVRfUkVBU09OX1JFTU9URQkxCisjZGVmaW5lIExMQ19SRVNFVF9SRUFTT05fTE9DQUwJMgorCisvKiBEaXNjb25uZWN0IHJlYXNvbnMgKi8KKyNkZWZpbmUgTExDX0RJU0NfUkVBU09OX1JYX0RNX1JTUF9QRFUJMAorI2RlZmluZSBMTENfRElTQ19SRUFTT05fUlhfRElTQ19DTURfUERVCTEKKyNkZWZpbmUgTExDX0RJU0NfUkVBU09OX0FDS19UTVJfRVhQCTIKKworLyogQ29uZmlybSByZWFzb25zICovCisjZGVmaW5lIExMQ19TVEFUVVNfQ09OTgkJMCAvKiBjb25uZWN0IGNvbmZpcm0gJiByZXNldCBjb25maXJtICovCisjZGVmaW5lIExMQ19TVEFUVVNfRElTQwkJMSAvKiBjb25uZWN0IGNvbmZpcm0gJiByZXNldCBjb25maXJtICovCisjZGVmaW5lIExMQ19TVEFUVVNfRkFJTEVECTIgLyogY29ubmVjdCBjb25maXJtICYgcmVzZXQgY29uZmlybSAqLworI2RlZmluZSBMTENfU1RBVFVTX0lNUE9TU0lCTEUJMyAvKiBjb25uZWN0IGNvbmZpcm0gKi8KKyNkZWZpbmUgTExDX1NUQVRVU19SRUNFSVZFRAk0IC8qIGRhdGEgY29ubiAqLworI2RlZmluZSBMTENfU1RBVFVTX1JFTU9URV9CVVNZCTUgLyogZGF0YSBjb25uICovCisjZGVmaW5lIExMQ19TVEFUVVNfUkVGVVNFCTYgLyogZGF0YSBjb25uICovCisjZGVmaW5lIExMQ19TVEFUVVNfQ09ORkxJQ1QJNyAvKiBkaXNjb25uZWN0IGNvbm4gKi8KKyNkZWZpbmUgTExDX1NUQVRVU19SRVNFVF9ET05FCTggLyogICovCisKK2V4dGVybiB1OCBsbGNfbWFjX251bGxfdmFyW0lGSFdBRERSTEVOXTsKKworLyoqCisgKiAgICAgIGxsY19tYWNfbnVsbCAtIGRldGVybWluZXMgaWYgYSBhZGRyZXNzIGlzIGEgbnVsbCBtYWMgYWRkcmVzcworICogICAgICBAbWFjOiBNYWMgYWRkcmVzcyB0byB0ZXN0IGlmIG51bGwuCisgKgorICogICAgICBEZXRlcm1pbmVzIGlmIGEgZ2l2ZW4gYWRkcmVzcyBpcyBhIG51bGwgbWFjIGFkZHJlc3MuICBSZXR1cm5zIDAgaWYgdGhlCisgKiAgICAgIGFkZHJlc3MgaXMgbm90IGEgbnVsbCBtYWMsIDEgaWYgdGhlIGFkZHJlc3MgaXMgYSBudWxsIG1hYy4KKyAqLworc3RhdGljIF9faW5saW5lX18gaW50IGxsY19tYWNfbnVsbCh1OCAqbWFjKQoreworCXJldHVybiAhbWVtY21wKG1hYywgbGxjX21hY19udWxsX3ZhciwgSUZIV0FERFJMRU4pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgbGxjX2FkZHJhbnkoc3RydWN0IGxsY19hZGRyICphZGRyKQoreworCXJldHVybiBsbGNfbWFjX251bGwoYWRkci0+bWFjKSAmJiAhYWRkci0+bHNhcDsKK30KKworLyoqCisgKglsbGNfbWFjX21hdGNoIC0gZGV0ZXJtaW5lcyBpZiB0d28gbWFjIGFkZHJlc3NlcyBhcmUgdGhlIHNhbWUKKyAqCUBtYWMxOiBGaXJzdCBtYWMgYWRkcmVzcyB0byBjb21wYXJlLgorICoJQG1hYzI6IFNlY29uZCBtYWMgYWRkcmVzcyB0byBjb21wYXJlLgorICoKKyAqCURldGVybWluZXMgaWYgdHdvIGdpdmVuIG1hYyBhZGRyZXNzIGFyZSB0aGUgc2FtZS4gIFJldHVybnMgMCBpZiB0aGVyZQorICoJaXMgbm90IGEgY29tcGxldGUgbWF0Y2ggdXAgdG8gbGVuLCAxIGlmIGEgY29tcGxldGUgbWF0Y2ggdXAgdG8gbGVuIGlzCisgKglmb3VuZC4KKyAqLworc3RhdGljIF9faW5saW5lX18gaW50IGxsY19tYWNfbWF0Y2godTggKm1hYzEsIHU4ICptYWMyKQoreworCXJldHVybiAhbWVtY21wKG1hYzEsIG1hYzIsIElGSFdBRERSTEVOKTsKK30KKworZXh0ZXJuIGludCBsbGNfZXN0YWJsaXNoX2Nvbm5lY3Rpb24oc3RydWN0IHNvY2sgKnNrLCB1OCAqbG1hYywKKwkJCQkgICAgdTggKmRtYWMsIHU4IGRzYXApOworZXh0ZXJuIGludCBsbGNfYnVpbGRfYW5kX3NlbmRfcGt0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IGxsY19zZW5kX2Rpc2Moc3RydWN0IHNvY2sgKnNrKTsKKyNlbmRpZiAvKiBMTENfSUZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbGxjX3BkdS5oIGIvaW5jbHVkZS9uZXQvbGxjX3BkdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0NWMzN2QKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9sbGNfcGR1LmgKQEAgLTAsMCArMSw0MzYgQEAKKyNpZm5kZWYgTExDX1BEVV9ICisjZGVmaW5lIExMQ19QRFVfSAorLyoKKyAqIENvcHlyaWdodCAoYykgMTk5NyBieSBQcm9jb20gVGVjaG5vbG9neSxJbmMuCisgKiAJCSAyMDAxLTIwMDMgYnkgQXJuYWxkbyBDYXJ2YWxobyBkZSBNZWxvIDxhY21lQGNvbmVjdGl2YS5jb20uYnI+CisgKgorICogVGhpcyBwcm9ncmFtIGNhbiBiZSByZWRpc3RyaWJ1dGVkIG9yIG1vZGlmaWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9yIGltcGxpZWQgd2FycmFudHkKKyAqIG9mIG1lcmNoYW50YWJpbGl0eSBvciBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4KKyAqCisgKiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CisjaW5jbHVkZSA8bGludXgvaWZfdHIuaD4KKworLyogTGVuZ3RocyBvZiBmcmFtZSBmb3JtYXRzICovCisjZGVmaW5lIExMQ19QRFVfTEVOX0kJNCAgICAgICAvKiBoZWFkZXIgYW5kIDIgY29udHJvbCBieXRlcyAqLworI2RlZmluZSBMTENfUERVX0xFTl9TCTQKKyNkZWZpbmUgTExDX1BEVV9MRU5fVQkzICAgICAgIC8qIGhlYWRlciBhbmQgMSBjb250cm9sIGJ5dGUgKi8KKy8qIEtub3duIFNBUCBhZGRyZXNzZXMgKi8KKyNkZWZpbmUgTExDX0dMT0JBTF9TQVAJMHhGRgorI2RlZmluZSBMTENfTlVMTF9TQVAJMHgwMAkvKiBub3QgbmV0d29yay1sYXllciB2aXNpYmxlICovCisjZGVmaW5lIExMQ19NR01UX0lORElWCTB4MDIJLyogc3RhdGlvbiBMTEMgbWdtdCBpbmRpdiBhZGRyICovCisjZGVmaW5lIExMQ19NR01UX0dSUAkweDAzCS8qIHN0YXRpb24gTExDIG1nbXQgZ3JvdXAgYWRkciAqLworI2RlZmluZSBMTENfUkRFX1NBUAkweEE2CS8qIHJvdXRlIC4uLiAqLworCisvKiBTQVAgZmllbGQgYml0IG1hc2tzICovCisjZGVmaW5lIExMQ19JU09fUkVTRVJWRURfU0FQCTB4MDIKKyNkZWZpbmUgTExDX1NBUF9HUk9VUF9EU0FQCTB4MDEKKyNkZWZpbmUgTExDX1NBUF9SRVNQX1NTQVAJMHgwMQorCisvKiBHcm91cC9pbmRpdmlkdWFsIERTQVAgaW5kaWNhdG9yIGlzIERTQVAgZmllbGQgKi8KKyNkZWZpbmUgTExDX1BEVV9HUk9VUF9EU0FQX01BU0sgICAgMHgwMQorI2RlZmluZSBMTENfUERVX0lTX0dST1VQX0RTQVAocGR1KSAgICAgIFwKKwkoKHBkdS0+ZHNhcCAmIExMQ19QRFVfR1JPVVBfRFNBUF9NQVNLKSA/IDAgOiAxKQorI2RlZmluZSBMTENfUERVX0lTX0lORElWX0RTQVAocGR1KSAgICAgIFwKKwkoIShwZHUtPmRzYXAgJiBMTENfUERVX0dST1VQX0RTQVBfTUFTSykgPyAwIDogMSkKKworLyogQ29tbWFuZC9yZXNwb25zZSBQRFUgaW5kaWNhdG9yIGluIFNTQVAgZmllbGQgKi8KKyNkZWZpbmUgTExDX1BEVV9DTURfUlNQX01BU0sJMHgwMQorI2RlZmluZSBMTENfUERVX0NNRAkJMAorI2RlZmluZSBMTENfUERVX1JTUAkJMQorI2RlZmluZSBMTENfUERVX0lTX0NNRChwZHUpICAgICgocGR1LT5zc2FwICYgTExDX1BEVV9SU1ApID8gMCA6IDEpCisjZGVmaW5lIExMQ19QRFVfSVNfUlNQKHBkdSkgICAgKChwZHUtPnNzYXAgJiBMTENfUERVX1JTUCkgPyAxIDogMCkKKworLyogR2V0IFBEVSB0eXBlIGZyb20gMiBsb3dlc3Qtb3JkZXIgYml0cyBvZiBjb250cm9sIGZpZWxkIGZpcnN0IGJ5dGUgKi8KKyNkZWZpbmUgTExDX1BEVV9UWVBFX0lfTUFTSyAgICAweDAxCS8qIDE2LWJpdCBjb250cm9sIGZpZWxkICovCisjZGVmaW5lIExMQ19QRFVfVFlQRV9TX01BU0sgICAgMHgwMworI2RlZmluZSBMTENfUERVX1RZUEVfVV9NQVNLICAgIDB4MDMJLyogOC1iaXQgY29udHJvbCBmaWVsZCAqLworI2RlZmluZSBMTENfUERVX1RZUEVfTUFTSyAgICAgIDB4MDMKKworI2RlZmluZSBMTENfUERVX1RZUEVfSQkwCS8qIGZpcnN0IGJpdCAqLworI2RlZmluZSBMTENfUERVX1RZUEVfUwkxCS8qIGZpcnN0IHR3byBiaXRzICovCisjZGVmaW5lIExMQ19QRFVfVFlQRV9VCTMJLyogZmlyc3QgdHdvIGJpdHMgKi8KKworI2RlZmluZSBMTENfUERVX1RZUEVfSVNfSShwZHUpIFwKKwkoKCEocGR1LT5jdHJsXzEgJiBMTENfUERVX1RZUEVfSV9NQVNLKSkgPyAxIDogMCkKKworI2RlZmluZSBMTENfUERVX1RZUEVfSVNfVShwZHUpIFwKKwkoKChwZHUtPmN0cmxfMSAmIExMQ19QRFVfVFlQRV9VX01BU0spID09IExMQ19QRFVfVFlQRV9VKSA/IDEgOiAwKQorCisjZGVmaW5lIExMQ19QRFVfVFlQRV9JU19TKHBkdSkgXAorCSgoKHBkdS0+Y3RybF8xICYgTExDX1BEVV9UWVBFX1NfTUFTSykgPT0gTExDX1BEVV9UWVBFX1MpID8gMSA6IDApCisKKy8qIFUtZm9ybWF0IFBEVSBjb250cm9sIGZpZWxkIG1hc2tzICovCisjZGVmaW5lIExMQ19VX1BGX0JJVF9NQVNLICAgICAgMHgxMAkvKiBQL0YgYml0IG1hc2sgKi8KKyNkZWZpbmUgTExDX1VfUEZfSVNfMShwZHUpICAgICAoKHBkdS0+Y3RybF8xICYgTExDX1VfUEZfQklUX01BU0spID8gMSA6IDApCisjZGVmaW5lIExMQ19VX1BGX0lTXzAocGR1KSAgICAgKCghKHBkdS0+Y3RybF8xICYgTExDX1VfUEZfQklUX01BU0spKSA/IDEgOiAwKQorCisjZGVmaW5lIExMQ19VX1BEVV9DTURfTUFTSyAgICAgMHhFQwkvKiBjbWQvcnNwIG1hc2sgKi8KKyNkZWZpbmUgTExDX1VfUERVX0NNRChwZHUpICAgICAocGR1LT5jdHJsXzEgJiBMTENfVV9QRFVfQ01EX01BU0spCisjZGVmaW5lIExMQ19VX1BEVV9SU1AocGR1KSAgICAgKHBkdS0+Y3RybF8xICYgTExDX1VfUERVX0NNRF9NQVNLKQorCisjZGVmaW5lIExMQ18xX1BEVV9DTURfVUkgICAgICAgMHgwMAkvKiBUeXBlIDEgY21kcy9yc3BzICovCisjZGVmaW5lIExMQ18xX1BEVV9DTURfWElEICAgICAgMHhBQworI2RlZmluZSBMTENfMV9QRFVfQ01EX1RFU1QgICAgIDB4RTAKKworI2RlZmluZSBMTENfMl9QRFVfQ01EX1NBQk1FICAgIDB4NkMJLyogVHlwZSAyIGNtZHMvcnNwcyAqLworI2RlZmluZSBMTENfMl9QRFVfQ01EX0RJU0MgICAgIDB4NDAKKyNkZWZpbmUgTExDXzJfUERVX1JTUF9VQSAgICAgICAweDYwCisjZGVmaW5lIExMQ18yX1BEVV9SU1BfRE0gICAgICAgMHgwQworI2RlZmluZSBMTENfMl9QRFVfUlNQX0ZSTVIgICAgIDB4ODQKKworLyogVHlwZSAxIG9wZXJhdGlvbnMgKi8KKworLyogWElEIGluZm9ybWF0aW9uIGZpZWxkIGJpdCBtYXNrcyAqLworCisvKiBMTEMgZm9ybWF0IGlkZW50aWZpZXIgKGJ5dGUgMSkgKi8KKyNkZWZpbmUgTExDX1hJRF9GTVRfSUQJCTB4ODEJLyogZmlyc3QgYnl0ZSBtdXN0IGJlIHRoaXMgKi8KKworLyogTExDIHR5cGVzL2NsYXNzZXMgaWRlbnRpZmllciAoYnl0ZSAyKSAqLworI2RlZmluZSBMTENfWElEX0NMQVNTX1pFUk9TX01BU0sJMHhFMAkvKiB0aGVzZSBtdXN0IGJlIHplcm9zICovCisjZGVmaW5lIExMQ19YSURfQ0xBU1NfTUFTSwkJMHgxRgkvKiBBTkQgd2l0aCBieXRlIHRvIGdldCBiZWxvdyAqLworCisjZGVmaW5lIExMQ19YSURfTlVMTF9DTEFTU18xCTB4MDEJLyogaWYgTlVMTCBMU0FQLi4udXNlIHRoZXNlICovCisjZGVmaW5lIExMQ19YSURfTlVMTF9DTEFTU18yCTB4MDMKKyNkZWZpbmUgTExDX1hJRF9OVUxMX0NMQVNTXzMJMHgwNQorI2RlZmluZSBMTENfWElEX05VTExfQ0xBU1NfNAkweDA3CisKKyNkZWZpbmUgTExDX1hJRF9OTlVMTF9UWVBFXzEJMHgwMQkvKiBpZiBub24tTlVMTCBMU0FQLi4udXNlIHRoZXNlICovCisjZGVmaW5lIExMQ19YSURfTk5VTExfVFlQRV8yCTB4MDIKKyNkZWZpbmUgTExDX1hJRF9OTlVMTF9UWVBFXzMJMHgwNAorI2RlZmluZSBMTENfWElEX05OVUxMX1RZUEVfMV8yCTB4MDMKKyNkZWZpbmUgTExDX1hJRF9OTlVMTF9UWVBFXzFfMwkweDA1CisjZGVmaW5lIExMQ19YSURfTk5VTExfVFlQRV8yXzMJMHgwNgorI2RlZmluZSBMTENfWElEX05OVUxMX0FMTAkJMHgwNworCisvKiBTZW5kZXIgUmVjZWl2ZSBXaW5kb3cgKGJ5dGUgMykgKi8KKyNkZWZpbmUgTExDX1hJRF9SV19NQVNLCTB4RkUJLyogQU5EIHdpdGggdmFsdWUgdG8gZ2V0IGJlbG93ICovCisKKyNkZWZpbmUgTExDX1hJRF9NSU5fUlcJMHgwMgkvKiBsb3dlc3Qtb3JkZXIgYml0IGFsd2F5cyB6ZXJvICovCisKKy8qIFR5cGUgMiBvcGVyYXRpb25zICovCisKKyNkZWZpbmUgTExDXzJfU0VRX05CUl9NT0RVTE8gICAoKHU4KSAxMjgpCisKKy8qIEktUERVIG1hc2tzICgnY3RybCcgaXMgSS1QRFUgY29udHJvbCB3b3JkKSAqLworI2RlZmluZSBMTENfSV9HRVRfTlMocGR1KSAgICAgKHU4KSgocGR1LT5jdHJsXzEgJiAweEZFKSA+PiAxKQorI2RlZmluZSBMTENfSV9HRVRfTlIocGR1KSAgICAgKHU4KSgocGR1LT5jdHJsXzIgJiAweEZFKSA+PiAxKQorCisjZGVmaW5lIExMQ19JX1BGX0JJVF9NQVNLICAgICAgMHgwMQorCisjZGVmaW5lIExMQ19JX1BGX0lTXzAocGR1KSAgICAgKCghKHBkdS0+Y3RybF8yICYgTExDX0lfUEZfQklUX01BU0spKSA/IDEgOiAwKQorI2RlZmluZSBMTENfSV9QRl9JU18xKHBkdSkgICAgICgocGR1LT5jdHJsXzIgJiBMTENfSV9QRl9CSVRfTUFTSykgPyAxIDogMCkKKworLyogUy1QRFUgc3VwZXJ2aXNvcnkgY29tbWFuZHMgYW5kIHJlc3BvbnNlcyAqLworCisjZGVmaW5lIExMQ19TX1BEVV9DTURfTUFTSyAgICAgMHgwQworI2RlZmluZSBMTENfU19QRFVfQ01EKHBkdSkgICAgIChwZHUtPmN0cmxfMSAmIExMQ19TX1BEVV9DTURfTUFTSykKKyNkZWZpbmUgTExDX1NfUERVX1JTUChwZHUpICAgICAocGR1LT5jdHJsXzEgJiBMTENfU19QRFVfQ01EX01BU0spCisKKyNkZWZpbmUgTExDXzJfUERVX0NNRF9SUiAgICAgICAweDAwCS8qIHJ4IHJlYWR5IGNtZCAqLworI2RlZmluZSBMTENfMl9QRFVfUlNQX1JSICAgICAgIDB4MDAJLyogcnggcmVhZHkgcnNwICovCisjZGVmaW5lIExMQ18yX1BEVV9DTURfUkVKICAgICAgMHgwOAkvKiByZWplY3QgUERVIGNtZCAqLworI2RlZmluZSBMTENfMl9QRFVfUlNQX1JFSiAgICAgIDB4MDgJLyogcmVqZWN0IFBEVSByc3AgKi8KKyNkZWZpbmUgTExDXzJfUERVX0NNRF9STlIgICAgICAweDA0CS8qIHJ4IG5vdCByZWFkeSBjbWQgKi8KKyNkZWZpbmUgTExDXzJfUERVX1JTUF9STlIgICAgICAweDA0CS8qIHJ4IG5vdCByZWFkeSByc3AgKi8KKworI2RlZmluZSBMTENfU19QRl9CSVRfTUFTSyAgICAgIDB4MDEKKyNkZWZpbmUgTExDX1NfUEZfSVNfMChwZHUpICAgICAoKCEocGR1LT5jdHJsXzIgJiBMTENfU19QRl9CSVRfTUFTSykpID8gMSA6IDApCisjZGVmaW5lIExMQ19TX1BGX0lTXzEocGR1KSAgICAgKChwZHUtPmN0cmxfMiAmIExMQ19TX1BGX0JJVF9NQVNLKSA/IDEgOiAwKQorCisjZGVmaW5lIFBEVV9TVVBWX0dFVF9OcihwZHUpICAgKChwZHUtPmN0cmxfMiAmIDB4RkUpID4+IDEpCisjZGVmaW5lIFBEVV9HRVRfTkVYVF9WcihzbikgICAgKCsrc24gJiB+TExDXzJfU0VRX05CUl9NT0RVTE8pCisKKy8qIEZSTVIgaW5mb3JtYXRpb24gZmllbGQgbWFjcm9zICovCisKKyNkZWZpbmUgRlJNUl9JTkZPX0xFTkdUSCAgICAgICA1CS8qIDUgYnl0ZXMgb2YgaW5mb3JtYXRpb24gKi8KKworLyoKKyAqIGluZm8gaXMgcG9pbnRlciB0byBGUk1SIGluZm8gZmllbGQgc3RydWN0dXJlOyAncmVqX2N0cmwnIGlzIGJ5dGUgcG9pbnRlcgorICogKGlmIFUtUERVKSBvciB3b3JkIHBvaW50ZXIgdG8gcmVqZWN0ZWQgUERVIGNvbnRyb2wgZmllbGQKKyAqLworI2RlZmluZSBGUk1SX0lORk9fU0VUX1JFSl9DTlRSTChpbmZvLHJlal9jdHJsKSBcCisJaW5mby0+cmVqX3BkdV9jdHJsID0gKCgqKCh1OCAqKSByZWpfY3RybCkgJiBcCisJCQkJTExDX1BEVV9UWVBFX1UpICE9IExMQ19QRFVfVFlQRV9VID8gXAorCQkJCSh1MTYpKigodTE2ICopIHJlal9jdHJsKSA6IFwKKwkJCQkoKCh1MTYpICooKHU4ICopIHJlal9jdHJsKSkgJiAweDAwRkYpKQorCisvKgorICogSW5mbyBpcyBwb2ludGVyIHRvIEZSTVIgaW5mbyBmaWVsZCBzdHJ1Y3R1cmU7ICd2cycgaXMgYSBieXRlIGNvbnRhaW5pbmcKKyAqIHNlbmQgc3RhdGUgdmFyaWFibGUgdmFsdWUgaW4gbG93LW9yZGVyIDcgYml0cyAoaW5zdXJlIHRoZSBsb3dlc3Qtb3JkZXIKKyAqIGJpdCByZW1haW5zIHplcm8gKDApKQorICovCisjZGVmaW5lIEZSTVJfSU5GT19TRVRfVnMoaW5mbyx2cykgKGluZm8tPmN1cnJfc3N2ID0gKCgodTgpIHZzKSA8PCAxKSkKKyNkZWZpbmUgRlJNUl9JTkZPX1NFVF9WcihpbmZvLHZyKSAoaW5mby0+Y3Vycl9yc3YgPSAoKCh1OCkgdnIpIDw8IDEpKQorCisvKgorICogSW5mbyBpcyBwb2ludGVyIHRvIEZSTVIgaW5mbyBmaWVsZCBzdHJ1Y3R1cmU7ICdjcicgaXMgYSBieXRlIGNvbnRhaW5pbmcKKyAqIHRoZSBDL1IgYml0IHZhbHVlIGluIHRoZSBsb3ctb3JkZXIgYml0CisgKi8KKyNkZWZpbmUgRlJNUl9JTkZPX1NFVF9DX1JfQklUKGluZm8sIGNyKSAgKGluZm8tPmN1cnJfcnN2IHw9ICgoKHU4KSBjcikgJiAweDAxKSkKKworLyoKKyAqIEluIHRoZSByZW1haW5pbmcgZml2ZSBtYWNyb3MsICdpbmZvJyBpcyBwb2ludGVyIHRvIEZSTVIgaW5mbyBmaWVsZAorICogc3RydWN0dXJlOyAnaW5kJyBpcyBhIGJ5dGUgY29udGFpbmluZyB0aGUgYml0IHZhbHVlIHRvIHNldCBpbiB0aGUKKyAqIGxvd2VzdC1vcmRlciBiaXQpCisgKi8KKyNkZWZpbmUgRlJNUl9JTkZPX1NFVF9JTlZBTElEX1BEVV9DVFJMX0lORChpbmZvLCBpbmQpIFwKKyAgICAgICAoaW5mby0+aW5kX2JpdHMgPSAoKGluZm8tPmluZF9iaXRzICYgMHhGRSkgfCAoKCh1OCkgaW5kKSAmIDB4MDEpKSkKKworI2RlZmluZSBGUk1SX0lORk9fU0VUX0lOVkFMSURfUERVX0lORk9fSU5EKGluZm8sIGluZCkgXAorICAgICAgIChpbmZvLT5pbmRfYml0cyA9ICggKGluZm8tPmluZF9iaXRzICYgMHhGRCkgfCAoKCh1OCkgaW5kKSAmIDB4MDIpKSkKKworI2RlZmluZSBGUk1SX0lORk9fU0VUX1BEVV9JTkZPXzJMT05HX0lORChpbmZvLCBpbmQpIFwKKyAgICAgICAoaW5mby0+aW5kX2JpdHMgPSAoIChpbmZvLT5pbmRfYml0cyAmIDB4RkIpIHwgKCgodTgpIGluZCkgJiAweDA0KSkpCisKKyNkZWZpbmUgRlJNUl9JTkZPX1NFVF9QRFVfSU5WQUxJRF9Ocl9JTkQoaW5mbywgaW5kKSBcCisgICAgICAgKGluZm8tPmluZF9iaXRzID0gKCAoaW5mby0+aW5kX2JpdHMgJiAweEY3KSB8ICgoKHU4KSBpbmQpICYgMHgwOCkpKQorCisjZGVmaW5lIEZSTVJfSU5GT19TRVRfUERVX0lOVkFMSURfTnNfSU5EKGluZm8sIGluZCkgXAorICAgICAgIChpbmZvLT5pbmRfYml0cyA9ICggKGluZm8tPmluZF9iaXRzICYgMHhFRikgfCAoKCh1OCkgaW5kKSAmIDB4MTApKSkKKworLyogU2VxdWVuY2UtbnVtYmVyZWQgUERVIGZvcm1hdCAoNCBieXRlcyBpbiBsZW5ndGgpICovCitzdHJ1Y3QgbGxjX3BkdV9zbiB7CisJdTggZHNhcDsKKwl1OCBzc2FwOworCXU4IGN0cmxfMTsKKwl1OCBjdHJsXzI7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBsbGNfcGR1X3NuICpsbGNfcGR1X3NuX2hkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXJldHVybiAoc3RydWN0IGxsY19wZHVfc24gKilza2ItPm5oLnJhdzsKK30KKworLyogVW4tbnVtYmVyZWQgUERVIGZvcm1hdCAoMyBieXRlcyBpbiBsZW5ndGgpICovCitzdHJ1Y3QgbGxjX3BkdV91biB7CisJdTggZHNhcDsKKwl1OCBzc2FwOworCXU4IGN0cmxfMTsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGxsY19wZHVfdW4gKmxsY19wZHVfdW5faGRyKHN0cnVjdCBza19idWZmICpza2IpCit7CisJcmV0dXJuIChzdHJ1Y3QgbGxjX3BkdV91biAqKXNrYi0+bmgucmF3OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKmxsY19zZXRfcGR1X2hkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpwdHIpCit7CisJcmV0dXJuIHNrYi0+bmgucmF3ID0gcHRyOworfQorCisvKioKKyAqCWxsY19wZHVfaGVhZGVyX2luaXQgLSBpbml0aWFsaXplcyBwZHUgaGVhZGVyCisgKglAc2tiOiBpbnB1dCBza2IgdGhhdCBoZWFkZXIgbXVzdCBiZSBzZXQgaW50byBpdC4KKyAqCUB0eXBlOiB0eXBlIG9mIFBEVSAoVSwgSSBvciBTKS4KKyAqCUBzc2FwOiBzb3VyY2Ugc2FwLgorICoJQGRzYXA6IGRlc3RpbmF0aW9uIHNhcC4KKyAqCUBjcjogY29tbWFuZC9yZXNwb25zZSBiaXQgKDAgb3IgMSkuCisgKgorICoJVGhpcyBmdW5jdGlvbiBzZXRzIERTQVAsIFNTQVAgYW5kIGNvbW1hbmQvUmVzcG9uc2UgYml0IGluIExMQyBoZWFkZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBsbGNfcGR1X2hlYWRlcl9pbml0KHN0cnVjdCBza19idWZmICpza2IsIHU4IHR5cGUsCisJCQkJICAgICAgIHU4IHNzYXAsIHU4IGRzYXAsIHU4IGNyKQoreworCWNvbnN0IGludCBobGVuID0gdHlwZSA9PSBMTENfUERVX1RZUEVfVSA/IDMgOiA0OworCXN0cnVjdCBsbGNfcGR1X3VuICpwZHUgPSBsbGNfc2V0X3BkdV9oZHIoc2tiLCBza2JfcHVzaChza2IsIGhsZW4pKTsKKwlwZHUtPmRzYXAgPSBkc2FwOworCXBkdS0+c3NhcCA9IHNzYXA7CisJcGR1LT5zc2FwIHw9IGNyOworfQorCisvKioKKyAqCWxsY19wZHVfZGVjb2RlX3NhIC0gZXh0cmFjcyBzb3VyY2UgYWRkcmVzcyAoTUFDKSBvZiBpbnB1dCBmcmFtZQorICoJQHNrYjogaW5wdXQgc2tiIHRoYXQgc291cmNlIGFkZHJlc3MgbXVzdCBiZSBleHRyYWN0ZWQgZnJvbSBpdC4KKyAqCUBzYTogcG9pbnRlciB0byBzb3VyY2UgYWRkcmVzcyAoNiBieXRlIGFycmF5KS4KKyAqCisgKglUaGlzIGZ1bmN0aW9uIGV4dHJhY3RzIHNvdXJjZSBhZGRyZXNzKE1BQykgb2YgaW5wdXQgZnJhbWUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBsbGNfcGR1X2RlY29kZV9zYShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCAqc2EpCit7CisJaWYgKHNrYi0+cHJvdG9jb2wgPT0gbnRvaHMoRVRIX1BfODAyXzIpKQorCQltZW1jcHkoc2EsIGV0aF9oZHIoc2tiKS0+aF9zb3VyY2UsIEVUSF9BTEVOKTsKKwllbHNlIGlmIChza2ItPnByb3RvY29sID09IG50b2hzKEVUSF9QX1RSXzgwMl8yKSkKKwkJbWVtY3B5KHNhLCB0cl9oZHIoc2tiKS0+c2FkZHIsIEVUSF9BTEVOKTsKK30KKworLyoqCisgKglsbGNfcGR1X2RlY29kZV9kYSAtIGV4dHJhY3RzIGRlc3QgYWRkcmVzcyBvZiBpbnB1dCBmcmFtZQorICoJQHNrYjogaW5wdXQgc2tiIHRoYXQgZGVzdGluYXRpb24gYWRkcmVzcyBtdXN0IGJlIGV4dHJhY3RlZCBmcm9tIGl0CisgKglAc2E6IHBvaW50ZXIgdG8gZGVzdGluYXRpb24gYWRkcmVzcyAoNiBieXRlIGFycmF5KS4KKyAqCisgKglUaGlzIGZ1bmN0aW9uIGV4dHJhY3RzIGRlc3RpbmF0aW9uIGFkZHJlc3MoTUFDKSBvZiBpbnB1dCBmcmFtZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGxsY19wZHVfZGVjb2RlX2RhKHN0cnVjdCBza19idWZmICpza2IsIHU4ICpkYSkKK3sKKwlpZiAoc2tiLT5wcm90b2NvbCA9PSBudG9ocyhFVEhfUF84MDJfMikpCisJCW1lbWNweShkYSwgZXRoX2hkcihza2IpLT5oX2Rlc3QsIEVUSF9BTEVOKTsKKwllbHNlIGlmIChza2ItPnByb3RvY29sID09IG50b2hzKEVUSF9QX1RSXzgwMl8yKSkKKwkJbWVtY3B5KGRhLCB0cl9oZHIoc2tiKS0+ZGFkZHIsIEVUSF9BTEVOKTsKK30KKworLyoqCisgKglsbGNfcGR1X2RlY29kZV9zc2FwIC0gZXh0cmFjdHMgc291cmNlIFNBUCBvZiBpbnB1dCBmcmFtZQorICoJQHNrYjogaW5wdXQgc2tiIHRoYXQgc291cmNlIFNBUCBtdXN0IGJlIGV4dHJhY3RlZCBmcm9tIGl0LgorICoJQHNzYXA6IHNvdXJjZSBTQVAgKG91dHB1dCBhcmd1bWVudCkuCisgKgorICoJVGhpcyBmdW5jdGlvbiBleHRyYWN0cyBzb3VyY2UgU0FQIG9mIGlucHV0IGZyYW1lLiBSaWdodCBiaXQgb2YgU1NBUCBpcworICoJY29tbWFuZC9yZXNwb25zZSBiaXQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBsbGNfcGR1X2RlY29kZV9zc2FwKHN0cnVjdCBza19idWZmICpza2IsIHU4ICpzc2FwKQoreworCSpzc2FwID0gbGxjX3BkdV91bl9oZHIoc2tiKS0+c3NhcCAmIDB4RkU7Cit9CisKKy8qKgorICoJbGxjX3BkdV9kZWNvZGVfZHNhcCAtIGV4dHJhY3RzIGRlc3QgU0FQIG9mIGlucHV0IGZyYW1lCisgKglAc2tiOiBpbnB1dCBza2IgdGhhdCBkZXN0aW5hdGlvbiBTQVAgbXVzdCBiZSBleHRyYWN0ZWQgZnJvbSBpdC4KKyAqCUBkc2FwOiBkZXN0aW5hdGlvbiBTQVAgKG91dHB1dCBhcmd1bWVudCkuCisgKgorICoJVGhpcyBmdW5jdGlvbiBleHRyYWN0cyBkZXN0aW5hdGlvbiBTQVAgb2YgaW5wdXQgZnJhbWUuIHJpZ2h0IGJpdCBvZgorICoJRFNBUCBkZXNpZ25hdGVzIGluZGl2aWR1YWwvZ3JvdXAgU0FQLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgbGxjX3BkdV9kZWNvZGVfZHNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCAqZHNhcCkKK3sKKwkqZHNhcCA9IGxsY19wZHVfdW5faGRyKHNrYiktPmRzYXAgJiAweEZFOworfQorCisvKioKKyAqCWxsY19wZHVfaW5pdF9hc191aV9jbWQgLSBzZXRzIExMQyBoZWFkZXIgYXMgVUkgUERVCisgKglAc2tiOiBpbnB1dCBza2IgdGhhdCBoZWFkZXIgbXVzdCBiZSBzZXQgaW50byBpdC4KKyAqCisgKglUaGlzIGZ1bmN0aW9uIHNldHMgdGhpcmQgYnl0ZSBvZiBMTEMgaGVhZGVyIGFzIGEgVUkgUERVLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgbGxjX3BkdV9pbml0X2FzX3VpX2NtZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBsbGNfcGR1X3VuICpwZHUgPSBsbGNfcGR1X3VuX2hkcihza2IpOworCisJcGR1LT5jdHJsXzEgID0gTExDX1BEVV9UWVBFX1U7CisJcGR1LT5jdHJsXzEgfD0gTExDXzFfUERVX0NNRF9VSTsKK30KKworLyoqCisgKglsbGNfcGR1X2luaXRfYXNfdGVzdF9jbWQgLSBzZXRzIFBEVSBhcyBURVNUCisgKglAc2tiIC0gQWRkcmVzcyBvZiB0aGUgc2tiIHRvIGJ1aWxkCisgKgorICogCVNldHMgYSBQRFUgYXMgVEVTVAorICovCitzdGF0aWMgaW5saW5lIHZvaWQgbGxjX3BkdV9pbml0X2FzX3Rlc3RfY21kKHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGxsY19wZHVfdW4gKnBkdSA9IGxsY19wZHVfdW5faGRyKHNrYik7CisKKwlwZHUtPmN0cmxfMSAgPSBMTENfUERVX1RZUEVfVTsKKwlwZHUtPmN0cmxfMSB8PSBMTENfMV9QRFVfQ01EX1RFU1Q7CisJcGR1LT5jdHJsXzEgfD0gTExDX1VfUEZfQklUX01BU0s7Cit9CisKKy8qKgorICoJbGxjX3BkdV9pbml0X2FzX3Rlc3RfcnNwIC0gYnVpbGQgVEVTVCByZXNwb25zZSBQRFUKKyAqCUBza2I6IEFkZHJlc3Mgb2YgdGhlIHNrYiB0byBidWlsZAorICoJQGV2X3NrYjogVGhlIHJlY2VpdmVkIFRFU1QgY29tbWFuZCBQRFUgZnJhbWUKKyAqCisgKglCdWlsZHMgYSBwZHUgZnJhbWUgYXMgYSBURVNUIHJlc3BvbnNlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgbGxjX3BkdV9pbml0X2FzX3Rlc3RfcnNwKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqZXZfc2tiKQoreworCXN0cnVjdCBsbGNfcGR1X3VuICpwZHUgPSBsbGNfcGR1X3VuX2hkcihza2IpOworCisJcGR1LT5jdHJsXzEgID0gTExDX1BEVV9UWVBFX1U7CisJcGR1LT5jdHJsXzEgfD0gTExDXzFfUERVX0NNRF9URVNUOworCXBkdS0+Y3RybF8xIHw9IExMQ19VX1BGX0JJVF9NQVNLOworCWlmIChldl9za2ItPnByb3RvY29sID09IG50b2hzKEVUSF9QXzgwMl8yKSkgeworCQlzdHJ1Y3QgbGxjX3BkdV91biAqZXZfcGR1ID0gbGxjX3BkdV91bl9oZHIoZXZfc2tiKTsKKwkJaW50IGRzaXplOworCisJCWRzaXplID0gbnRvaHMoZXRoX2hkcihldl9za2IpLT5oX3Byb3RvKSAtIDM7CisJCW1lbWNweSgoKHU4ICopcGR1KSArIDMsICgodTggKilldl9wZHUpICsgMywgZHNpemUpOworCQlza2JfcHV0KHNrYiwgZHNpemUpOworCX0KK30KKworLyogTExDIFR5cGUgMSBYSUQgY29tbWFuZC9yZXNwb25zZSBpbmZvcm1hdGlvbiBmaWVsZHMgZm9ybWF0ICovCitzdHJ1Y3QgbGxjX3hpZF9pbmZvIHsKKwl1OCBmbXRfaWQ7CS8qIGFsd2F5cyAweDE4IGZvciBMTEMgKi8KKwl1OCB0eXBlOwkvKiBkaWZmZXJlbnQgaWYgTlVMTC9ub24tTlVMTCBMU0FQICovCisJdTggcnc7CQkvKiBzZW5kZXIgcmVjZWl2ZSB3aW5kb3cgKi8KK307CisKKy8qKgorICoJbGxjX3BkdV9pbml0X2FzX3hpZF9jbWQgLSBzZXRzIGJ5dGVzIDMsIDQgJiA1IG9mIExMQyBoZWFkZXIgYXMgWElECisgKglAc2tiOiBpbnB1dCBza2IgdGhhdCBoZWFkZXIgbXVzdCBiZSBzZXQgaW50byBpdC4KKyAqCisgKglUaGlzIGZ1bmN0aW9uIHNldHMgdGhpcmQsZm91cnRoLGZpZnRoIGFuZCBzaXh0aCBieXRlcyBvZiBMTEMgaGVhZGVyIGFzCisgKglhIFhJRCBQRFUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBsbGNfcGR1X2luaXRfYXNfeGlkX2NtZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgICB1OCBzdmNzX3N1cHBvcnRlZCwgdTggcnhfd2luZG93KQoreworCXN0cnVjdCBsbGNfeGlkX2luZm8gKnhpZF9pbmZvOworCXN0cnVjdCBsbGNfcGR1X3VuICpwZHUgPSBsbGNfcGR1X3VuX2hkcihza2IpOworCisJcGR1LT5jdHJsXzEJID0gTExDX1BEVV9UWVBFX1U7CisJcGR1LT5jdHJsXzEJfD0gTExDXzFfUERVX0NNRF9YSUQ7CisJcGR1LT5jdHJsXzEJfD0gTExDX1VfUEZfQklUX01BU0s7CisJeGlkX2luZm8JID0gKHN0cnVjdCBsbGNfeGlkX2luZm8gKikoKCh1OCAqKSZwZHUtPmN0cmxfMSkgKyAxKTsKKwl4aWRfaW5mby0+Zm10X2lkID0gTExDX1hJRF9GTVRfSUQ7CS8qIDB4ODEgKi8KKwl4aWRfaW5mby0+dHlwZQkgPSBzdmNzX3N1cHBvcnRlZDsKKwl4aWRfaW5mby0+cncJID0gcnhfd2luZG93IDw8IDE7CS8qIHNpemUgb2YgcmVjZWl2ZSB3aW5kb3cgKi8KKwlza2JfcHV0KHNrYiwgMyk7Cit9CisKKy8qKgorICoJbGxjX3BkdV9pbml0X2FzX3hpZF9yc3AgLSBidWlsZHMgWElEIHJlc3BvbnNlIFBEVQorICoJQHNrYjogQWRkcmVzcyBvZiB0aGUgc2tiIHRvIGJ1aWxkCisgKglAc3Zjc19zdXBwb3J0ZWQ6IFRoZSBjbGFzcyBvZiB0aGUgTExDIChJIG9yIElJKQorICoJQHJ4X3dpbmRvdzogVGhlIHNpemUgb2YgdGhlIHJlY2VpdmUgd2luZG93IG9mIHRoZSBMTEMKKyAqCisgKglCdWlsZHMgYSBwZHUgZnJhbWUgYXMgYW4gWElEIHJlc3BvbnNlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgbGxjX3BkdV9pbml0X2FzX3hpZF9yc3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICAgdTggc3Zjc19zdXBwb3J0ZWQsIHU4IHJ4X3dpbmRvdykKK3sKKwlzdHJ1Y3QgbGxjX3hpZF9pbmZvICp4aWRfaW5mbzsKKwlzdHJ1Y3QgbGxjX3BkdV91biAqcGR1ID0gbGxjX3BkdV91bl9oZHIoc2tiKTsKKworCXBkdS0+Y3RybF8xCSA9IExMQ19QRFVfVFlQRV9VOworCXBkdS0+Y3RybF8xCXw9IExMQ18xX1BEVV9DTURfWElEOworCXBkdS0+Y3RybF8xCXw9IExMQ19VX1BGX0JJVF9NQVNLOworCisJeGlkX2luZm8JID0gKHN0cnVjdCBsbGNfeGlkX2luZm8gKikoKCh1OCAqKSZwZHUtPmN0cmxfMSkgKyAxKTsKKwl4aWRfaW5mby0+Zm10X2lkID0gTExDX1hJRF9GTVRfSUQ7CisJeGlkX2luZm8tPnR5cGUJID0gc3Zjc19zdXBwb3J0ZWQ7CisJeGlkX2luZm8tPnJ3CSA9IHJ4X3dpbmRvdyA8PCAxOworCXNrYl9wdXQoc2tiLCAzKTsKK30KKworLyogTExDIFR5cGUgMiBGUk1SIHJlc3BvbnNlIGluZm9ybWF0aW9uIGZpZWxkIGZvcm1hdCAqLworc3RydWN0IGxsY19mcm1yX2luZm8geworCXUxNiByZWpfcGR1X2N0cmw7CS8qIGJpdHMgMS04IGlmIFUtUERVICovCisJdTggIGN1cnJfc3N2OwkJLyogY3VycmVudCBzZW5kIHN0YXRlIHZhcmlhYmxlIHZhbCAqLworCXU4ICBjdXJyX3JzdjsJCS8qIGN1cnJlbnQgcmVjZWl2ZSBzdGF0ZSB2YXJpYWJsZSAqLworCXU4ICBpbmRfYml0czsJCS8qIGluZGljYXRvciBiaXRzIHNldCB3aXRoIG1hY3JvICovCit9OworCitleHRlcm4gdm9pZCBsbGNfcGR1X3NldF9jbWRfcnNwKHN0cnVjdCBza19idWZmICpza2IsIHU4IHR5cGUpOworZXh0ZXJuIHZvaWQgbGxjX3BkdV9zZXRfcGZfYml0KHN0cnVjdCBza19idWZmICpza2IsIHU4IGJpdF92YWx1ZSk7CitleHRlcm4gdm9pZCBsbGNfcGR1X2RlY29kZV9wZl9iaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggKnBmX2JpdCk7CitleHRlcm4gdm9pZCBsbGNfcGR1X2luaXRfYXNfZGlzY19jbWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggcF9iaXQpOworZXh0ZXJuIHZvaWQgbGxjX3BkdV9pbml0X2FzX2lfY21kKHN0cnVjdCBza19idWZmICpza2IsIHU4IHBfYml0LCB1OCBucywgdTggbnIpOworZXh0ZXJuIHZvaWQgbGxjX3BkdV9pbml0X2FzX3Jlal9jbWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggcF9iaXQsIHU4IG5yKTsKK2V4dGVybiB2b2lkIGxsY19wZHVfaW5pdF9hc19ybnJfY21kKHN0cnVjdCBza19idWZmICpza2IsIHU4IHBfYml0LCB1OCBucik7CitleHRlcm4gdm9pZCBsbGNfcGR1X2luaXRfYXNfcnJfY21kKHN0cnVjdCBza19idWZmICpza2IsIHU4IHBfYml0LCB1OCBucik7CitleHRlcm4gdm9pZCBsbGNfcGR1X2luaXRfYXNfc2FibWVfY21kKHN0cnVjdCBza19idWZmICpza2IsIHU4IHBfYml0KTsKK2V4dGVybiB2b2lkIGxsY19wZHVfaW5pdF9hc19kbV9yc3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggZl9iaXQpOworZXh0ZXJuIHZvaWQgbGxjX3BkdV9pbml0X2FzX2ZybXJfcnNwKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICBzdHJ1Y3QgbGxjX3BkdV9zbiAqcHJldl9wZHUsCisJCQkJICAgICB1OCBmX2JpdCwgdTggdnMsIHU4IHZyLCB1OCB2enl4dyk7CitleHRlcm4gdm9pZCBsbGNfcGR1X2luaXRfYXNfcnJfcnNwKHN0cnVjdCBza19idWZmICpza2IsIHU4IGZfYml0LCB1OCBucik7CitleHRlcm4gdm9pZCBsbGNfcGR1X2luaXRfYXNfcmVqX3JzcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBmX2JpdCwgdTggbnIpOworZXh0ZXJuIHZvaWQgbGxjX3BkdV9pbml0X2FzX3Jucl9yc3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggZl9iaXQsIHU4IG5yKTsKK2V4dGVybiB2b2lkIGxsY19wZHVfaW5pdF9hc191YV9yc3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggZl9iaXQpOworI2VuZGlmIC8qIExMQ19QRFVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbGxjX3NfYWMuaCBiL2luY2x1ZGUvbmV0L2xsY19zX2FjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdhM2JiZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L2xsY19zX2FjLmgKQEAgLTAsMCArMSwzOSBAQAorI2lmbmRlZiBMTENfU19BQ19ICisjZGVmaW5lIExMQ19TX0FDX0gKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTcgYnkgUHJvY29tIFRlY2hub2xvZ3ksSW5jLgorICogCQkgMjAwMSBieSBBcm5hbGRvIENhcnZhbGhvIGRlIE1lbG8gPGFjbWVAY29uZWN0aXZhLmNvbS5icj4KKyAqCisgKiBUaGlzIHByb2dyYW0gY2FuIGJlIHJlZGlzdHJpYnV0ZWQgb3IgbW9kaWZpZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgd2l0aG91dCBhbnkgd2FycmFudHkgb3IgaW1wbGllZCB3YXJyYW50eQorICogb2YgbWVyY2hhbnRhYmlsaXR5IG9yIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLgorICoKKyAqIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworLyogU0FQIGNvbXBvbmVudCBhY3Rpb25zICovCisjZGVmaW5lIFNBUF9BQ1RfVU5JVERBVEFfSU5ECTEKKyNkZWZpbmUgU0FQX0FDVF9TRU5EX1VJCQkyCisjZGVmaW5lIFNBUF9BQ1RfU0VORF9YSURfQwkzCisjZGVmaW5lIFNBUF9BQ1RfU0VORF9YSURfUgk0CisjZGVmaW5lIFNBUF9BQ1RfU0VORF9URVNUX0MJNQorI2RlZmluZSBTQVBfQUNUX1NFTkRfVEVTVF9SCTYKKyNkZWZpbmUgU0FQX0FDVF9SRVBPUlRfU1RBVFVTCTcKKyNkZWZpbmUgU0FQX0FDVF9YSURfSU5ECQk4CisjZGVmaW5lIFNBUF9BQ1RfVEVTVF9JTkQJOQorCisvKiBBbGwgYWN0aW9uIGZ1bmN0aW9ucyBtdXN0IGxvb2sgbGlrZSB0aGlzICovCit0eXBlZGVmIGludCAoKmxsY19zYXBfYWN0aW9uX3QpKHN0cnVjdCBsbGNfc2FwICpzYXAsIHN0cnVjdCBza19idWZmICpza2IpOworCitleHRlcm4gaW50IGxsY19zYXBfYWN0aW9uX3VuaXRkYXRhX2luZChzdHJ1Y3QgbGxjX3NhcCAqc2FwLAorCQkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQgbGxjX3NhcF9hY3Rpb25fc2VuZF91aShzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQgbGxjX3NhcF9hY3Rpb25fc2VuZF94aWRfYyhzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQgbGxjX3NhcF9hY3Rpb25fc2VuZF94aWRfcihzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQgbGxjX3NhcF9hY3Rpb25fc2VuZF90ZXN0X2Moc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IGxsY19zYXBfYWN0aW9uX3NlbmRfdGVzdF9yKHN0cnVjdCBsbGNfc2FwICpzYXAsIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBsbGNfc2FwX2FjdGlvbl9yZXBvcnRfc3RhdHVzKHN0cnVjdCBsbGNfc2FwICpzYXAsCisJCQkJCXN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBsbGNfc2FwX2FjdGlvbl94aWRfaW5kKHN0cnVjdCBsbGNfc2FwICpzYXAsIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBsbGNfc2FwX2FjdGlvbl90ZXN0X2luZChzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKyNlbmRpZiAvKiBMTENfU19BQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9sbGNfc19ldi5oIGIvaW5jbHVkZS9uZXQvbGxjX3NfZXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2FjYjkzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQvbGxjX3NfZXYuaApAQCAtMCwwICsxLDY3IEBACisjaWZuZGVmIExMQ19TX0VWX0gKKyNkZWZpbmUgTExDX1NfRVZfSAorLyoKKyAqIENvcHlyaWdodCAoYykgMTk5NyBieSBQcm9jb20gVGVjaG5vbG9neSxJbmMuCisgKiAJCSAyMDAxIGJ5IEFybmFsZG8gQ2FydmFsaG8gZGUgTWVsbyA8YWNtZUBjb25lY3RpdmEuY29tLmJyPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBjYW4gYmUgcmVkaXN0cmlidXRlZCBvciBtb2RpZmllZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCB3aXRob3V0IGFueSB3YXJyYW50eSBvciBpbXBsaWVkIHdhcnJhbnR5CisgKiBvZiBtZXJjaGFudGFiaWxpdHkgb3IgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuCisgKgorICogU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKworLyogRGVmaW5lcyBTQVAgY29tcG9uZW50IGV2ZW50cyAqLworLyogVHlwZXMgb2YgZXZlbnRzIChwb3NzaWJsZSB2YWx1ZXMgaW4gJ2V2LT50eXBlJykgKi8KKyNkZWZpbmUgTExDX1NBUF9FVl9UWVBFX1NJTVBMRQkJMQorI2RlZmluZSBMTENfU0FQX0VWX1RZUEVfQ09ORElUSU9OCTIKKyNkZWZpbmUgTExDX1NBUF9FVl9UWVBFX1BSSU0JCTMKKyNkZWZpbmUgTExDX1NBUF9FVl9UWVBFX1BEVQkJNCAgIC8qIGNvbW1hbmQvcmVzcG9uc2UgUERVICovCisjZGVmaW5lIExMQ19TQVBfRVZfVFlQRV9BQ0tfVE1SCQk1CisjZGVmaW5lIExMQ19TQVBfRVZfVFlQRV9SUFRfU1RBVFVTCTYKKworI2RlZmluZSBMTENfU0FQX0VWX0FDVElWQVRJT05fUkVRCSAxCisjZGVmaW5lIExMQ19TQVBfRVZfUlhfVUkJCSAyCisjZGVmaW5lIExMQ19TQVBfRVZfVU5JVERBVEFfUkVRCQkgMworI2RlZmluZSBMTENfU0FQX0VWX1hJRF9SRVEJCSA0CisjZGVmaW5lIExMQ19TQVBfRVZfUlhfWElEX0MJCSA1CisjZGVmaW5lIExMQ19TQVBfRVZfUlhfWElEX1IJCSA2CisjZGVmaW5lIExMQ19TQVBfRVZfVEVTVF9SRVEJCSA3CisjZGVmaW5lIExMQ19TQVBfRVZfUlhfVEVTVF9DCQkgOAorI2RlZmluZSBMTENfU0FQX0VWX1JYX1RFU1RfUgkJIDkKKyNkZWZpbmUgTExDX1NBUF9FVl9ERUFDVElWQVRJT05fUkVRCTEwCisKK3N0cnVjdCBsbGNfc2FwX3N0YXRlX2V2IHsKKwl1OAkJcHJpbTsKKwl1OAkJcHJpbV90eXBlOworCXU4CQl0eXBlOworCXU4CQlyZWFzb247CisJdTgJCWluZF9jZm1fZmxhZzsKKwlzdHJ1Y3QgbGxjX2FkZHIgc2FkZHI7CisJc3RydWN0IGxsY19hZGRyIGRhZGRyOworfTsKKworc3RhdGljIF9faW5saW5lX18gc3RydWN0IGxsY19zYXBfc3RhdGVfZXYgKmxsY19zYXBfZXYoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlyZXR1cm4gKHN0cnVjdCBsbGNfc2FwX3N0YXRlX2V2ICopc2tiLT5jYjsKK30KKworc3RydWN0IGxsY19zYXA7CisKK3R5cGVkZWYgaW50ICgqbGxjX3NhcF9ldl90KShzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKworZXh0ZXJuIGludCBsbGNfc2FwX2V2X2FjdGl2YXRpb25fcmVxKHN0cnVjdCBsbGNfc2FwICpzYXAsIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBsbGNfc2FwX2V2X3J4X3VpKHN0cnVjdCBsbGNfc2FwICpzYXAsIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBsbGNfc2FwX2V2X3VuaXRkYXRhX3JlcShzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQgbGxjX3NhcF9ldl94aWRfcmVxKHN0cnVjdCBsbGNfc2FwICpzYXAsIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBsbGNfc2FwX2V2X3J4X3hpZF9jKHN0cnVjdCBsbGNfc2FwICpzYXAsIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBsbGNfc2FwX2V2X3J4X3hpZF9yKHN0cnVjdCBsbGNfc2FwICpzYXAsIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBsbGNfc2FwX2V2X3Rlc3RfcmVxKHN0cnVjdCBsbGNfc2FwICpzYXAsIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBsbGNfc2FwX2V2X3J4X3Rlc3RfYyhzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQgbGxjX3NhcF9ldl9yeF90ZXN0X3Ioc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IGxsY19zYXBfZXZfZGVhY3RpdmF0aW9uX3JlcShzdHJ1Y3QgbGxjX3NhcCAqc2FwLAorCQkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKyNlbmRpZiAvKiBMTENfU19FVl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9sbGNfc19zdC5oIGIvaW5jbHVkZS9uZXQvbGxjX3Nfc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjdjNjgxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQvbGxjX3Nfc3QuaApAQCAtMCwwICsxLDMyIEBACisjaWZuZGVmIExMQ19TX1NUX0gKKyNkZWZpbmUgTExDX1NfU1RfSAorLyoKKyAqIENvcHlyaWdodCAoYykgMTk5NyBieSBQcm9jb20gVGVjaG5vbG9neSxJbmMuCisgKiAJCSAyMDAxIGJ5IEFybmFsZG8gQ2FydmFsaG8gZGUgTWVsbyA8YWNtZUBjb25lY3RpdmEuY29tLmJyPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBjYW4gYmUgcmVkaXN0cmlidXRlZCBvciBtb2RpZmllZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCB3aXRob3V0IGFueSB3YXJyYW50eSBvciBpbXBsaWVkIHdhcnJhbnR5CisgKiBvZiBtZXJjaGFudGFiaWxpdHkgb3IgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuCisgKgorICogU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNkZWZpbmUgTExDX05SX1NBUF9TVEFURVMJMiAgICAgICAvKiBzaXplIG9mIHN0YXRlIHRhYmxlICovCisKKy8qIHN0cnVjdHVyZXMgYW5kIHR5cGVzICovCisvKiBTQVAgc3RhdGUgdGFibGUgc3RydWN0dXJlICovCitzdHJ1Y3QgbGxjX3NhcF9zdGF0ZV90cmFucyB7CisJbGxjX3NhcF9ldl90CSAgZXY7CisJdTgJCSAgbmV4dF9zdGF0ZTsKKwlsbGNfc2FwX2FjdGlvbl90ICpldl9hY3Rpb25zOworfTsKKworc3RydWN0IGxsY19zYXBfc3RhdGUgeworCXU4CQkJICAgY3Vycl9zdGF0ZTsKKwlzdHJ1Y3QgbGxjX3NhcF9zdGF0ZV90cmFucyAqKnRyYW5zaXRpb25zOworfTsKKworLyogb25seSBhY2Nlc3MgdG8gU0FQIHN0YXRlIHRhYmxlICovCitleHRlcm4gc3RydWN0IGxsY19zYXBfc3RhdGUgbGxjX3NhcF9zdGF0ZV90YWJsZVtMTENfTlJfU0FQX1NUQVRFU107CisjZW5kaWYgLyogTExDX1NfU1RfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbGxjX3NhcC5oIGIvaW5jbHVkZS9uZXQvbGxjX3NhcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1M2JhYWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9sbGNfc2FwLmgKQEAgLTAsMCArMSwyOSBAQAorI2lmbmRlZiBMTENfU0FQX0gKKyNkZWZpbmUgTExDX1NBUF9ICisvKgorICogQ29weXJpZ2h0IChjKSAxOTk3IGJ5IFByb2NvbSBUZWNobm9sb2d5LEluYy4KKyAqIAkJIDIwMDEtMjAwMyBieSBBcm5hbGRvIENhcnZhbGhvIGRlIE1lbG8gPGFjbWVAY29uZWN0aXZhLmNvbS5icj4KKyAqCisgKiBUaGlzIHByb2dyYW0gY2FuIGJlIHJlZGlzdHJpYnV0ZWQgb3IgbW9kaWZpZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgd2l0aG91dCBhbnkgd2FycmFudHkgb3IgaW1wbGllZCB3YXJyYW50eQorICogb2YgbWVyY2hhbnRhYmlsaXR5IG9yIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLgorICoKKyAqIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworc3RydWN0IGxsY19zYXA7CitzdHJ1Y3Qgc2tfYnVmZjsKKworZXh0ZXJuIHZvaWQgbGxjX3NhcF9ydG5fcGR1KHN0cnVjdCBsbGNfc2FwICpzYXAsIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIHZvaWQgbGxjX3NhdmVfcHJpbWl0aXZlKHN0cnVjdCBza19idWZmKiBza2IsIHVuc2lnbmVkIGNoYXIgcHJpbSk7CitleHRlcm4gc3RydWN0IHNrX2J1ZmYgKmxsY19hbGxvY19mcmFtZSh2b2lkKTsKKworZXh0ZXJuIHZvaWQgbGxjX2J1aWxkX2FuZF9zZW5kX3Rlc3RfcGt0KHN0cnVjdCBsbGNfc2FwICpzYXAsCisJCQkJICAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQl1bnNpZ25lZCBjaGFyICpkbWFjLAorCQkJCQl1bnNpZ25lZCBjaGFyIGRzYXApOworZXh0ZXJuIHZvaWQgbGxjX2J1aWxkX2FuZF9zZW5kX3hpZF9wa3Qoc3RydWN0IGxsY19zYXAgKnNhcCwKKwkJCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgICAgdW5zaWduZWQgY2hhciAqZG1hYywKKwkJCQkgICAgICAgdW5zaWduZWQgY2hhciBkc2FwKTsKKyNlbmRpZiAvKiBMTENfU0FQX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25kaXNjLmggYi9pbmNsdWRlL25ldC9uZGlzYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4NWQ2ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9uZGlzYy5oCkBAIC0wLDAgKzEsMTM1IEBACisjaWZuZGVmIF9ORElTQ19ICisjZGVmaW5lIF9ORElTQ19ICisKKy8qCisgKglJQ01QIGNvZGVzIGZvciBuZWlnaGJvdXIgZGlzY292ZXJ5IG1lc3NhZ2VzCisgKi8KKworI2RlZmluZSBORElTQ19ST1VURVJfU09MSUNJVEFUSU9OCTEzMworI2RlZmluZSBORElTQ19ST1VURVJfQURWRVJUSVNFTUVOVAkxMzQKKyNkZWZpbmUgTkRJU0NfTkVJR0hCT1VSX1NPTElDSVRBVElPTgkxMzUKKyNkZWZpbmUgTkRJU0NfTkVJR0hCT1VSX0FEVkVSVElTRU1FTlQJMTM2CisjZGVmaW5lIE5ESVNDX1JFRElSRUNUCQkJMTM3CisKKy8qCisgKgluZGlzYyBvcHRpb25zCisgKi8KKworZW51bSB7CisJX19ORF9PUFRfUFJFRklYX0lORk9fRU5EID0gMCwKKwlORF9PUFRfU09VUkNFX0xMX0FERFIgPSAxLAkvKiBSRkMyNDYxICovCisJTkRfT1BUX1RBUkdFVF9MTF9BRERSID0gMiwJLyogUkZDMjQ2MSAqLworCU5EX09QVF9QUkVGSVhfSU5GTyA9IDMsCQkvKiBSRkMyNDYxICovCisJTkRfT1BUX1JFRElSRUNUX0hEUiA9IDQsCS8qIFJGQzI0NjEgKi8KKwlORF9PUFRfTVRVID0gNSwJCQkvKiBSRkMyNDYxICovCisJX19ORF9PUFRfTUFYCit9OworCisjZGVmaW5lIE1BWF9SVFJfU09MSUNJVEFUSU9OX0RFTEFZCUhaCisKKyNkZWZpbmUgTkRfUkVBQ0hBQkxFX1RJTUUJCSgzMCpIWikKKyNkZWZpbmUgTkRfUkVUUkFOU19USU1FUgkJSFoKKworI2RlZmluZSBORF9NSU5fUkFORE9NX0ZBQ1RPUgkJKDEvMikKKyNkZWZpbmUgTkRfTUFYX1JBTkRPTV9GQUNUT1IJCSgzLzIpCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pY21wdjYuaD4KKyNpbmNsdWRlIDxuZXQvbmVpZ2hib3VyLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorCitleHRlcm4gc3RydWN0IG5laWdoX3RhYmxlIG5kX3RibDsKKworc3RydWN0IG5kX21zZyB7CisgICAgICAgIHN0cnVjdCBpY21wNmhkcglpY21waDsKKyAgICAgICAgc3RydWN0IGluNl9hZGRyCXRhcmdldDsKKwlfX3U4CQlvcHRbMF07Cit9OworCitzdHJ1Y3QgcnNfbXNnIHsKKwlzdHJ1Y3QgaWNtcDZoZHIJaWNtcGg7CisJX191OAkJb3B0WzBdOworfTsKKworc3RydWN0IHJhX21zZyB7CisgICAgICAgIHN0cnVjdCBpY21wNmhkcgkJaWNtcGg7CisJX191MzIJCQlyZWFjaGFibGVfdGltZTsKKwlfX3UzMgkJCXJldHJhbnNfdGltZXI7Cit9OworCitzdHJ1Y3QgbmRfb3B0X2hkciB7CisJX191OAkJbmRfb3B0X3R5cGU7CisJX191OAkJbmRfb3B0X2xlbjsKK30gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOworCisKK2V4dGVybiBpbnQJCQluZGlzY19pbml0KHN0cnVjdCBuZXRfcHJvdG9fZmFtaWx5ICpvcHMpOworCitleHRlcm4gdm9pZAkJCW5kaXNjX2NsZWFudXAodm9pZCk7CisKK2V4dGVybiBpbnQJCQluZGlzY19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKK2V4dGVybiB2b2lkCQkJbmRpc2Nfc2VuZF9ucyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQkgICAgICBzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaCwKKwkJCQkJICAgICAgc3RydWN0IGluNl9hZGRyICpzb2xpY2l0LAorCQkJCQkgICAgICBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAorCQkJCQkgICAgICBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyKTsKKworZXh0ZXJuIHZvaWQJCQluZGlzY19zZW5kX3JzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCSAgICAgIHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsCisJCQkJCSAgICAgIHN0cnVjdCBpbjZfYWRkciAqZGFkZHIpOworCitleHRlcm4gdm9pZAkJCW5kaXNjX2ZvcndhcmRpbmdfb24odm9pZCk7CitleHRlcm4gdm9pZAkJCW5kaXNjX2ZvcndhcmRpbmdfb2ZmKHZvaWQpOworCitleHRlcm4gdm9pZAkJCW5kaXNjX3NlbmRfcmVkaXJlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJCSAgICBzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaCwKKwkJCQkJCSAgICBzdHJ1Y3QgaW42X2FkZHIgKnRhcmdldCk7CisKK2V4dGVybiBpbnQJCQluZGlzY19tY19tYXAoc3RydWN0IGluNl9hZGRyICphZGRyLCBjaGFyICpidWYsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBkaXIpOworCisKK3N0cnVjdCBydDZfaW5mbyAqCQlkZmx0X3J0X2xvb2t1cCh2b2lkKTsKKworLyoKKyAqCUlHTVAKKyAqLworZXh0ZXJuIGludAkJCWlnbXA2X2luaXQoc3RydWN0IG5ldF9wcm90b19mYW1pbHkgKm9wcyk7CisKK2V4dGVybiB2b2lkCQkJaWdtcDZfY2xlYW51cCh2b2lkKTsKKworZXh0ZXJuIGludAkJCWlnbXA2X2V2ZW50X3F1ZXJ5KHN0cnVjdCBza19idWZmICpza2IpOworCitleHRlcm4gaW50CQkJaWdtcDZfZXZlbnRfcmVwb3J0KHN0cnVjdCBza19idWZmICpza2IpOworCitleHRlcm4gdm9pZAkJCWlnbXA2X2NsZWFudXAodm9pZCk7CisKKyNpZmRlZiBDT05GSUdfU1lTQ1RMCitleHRlcm4gaW50IAkJCW5kaXNjX2lmaW5mb19zeXNjdGxfY2hhbmdlKGN0bF90YWJsZSAqY3RsLAorCQkJCQkJCSAgIGludCB3cml0ZSwKKwkJCQkJCQkgICBzdHJ1Y3QgZmlsZSAqIGZpbHAsCisJCQkJCQkJICAgdm9pZCBfX3VzZXIgKmJ1ZmZlciwKKwkJCQkJCQkgICBzaXplX3QgKmxlbnAsCisJCQkJCQkJICAgbG9mZl90ICpwcG9zKTsKKyNlbmRpZgorCitleHRlcm4gdm9pZCAJCQlpbmV0Nl9pZmluZm9fbm90aWZ5KGludCBldmVudCwKKwkJCQkJCSAgICBzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbmVpZ2hib3VyICogbmRpc2NfZ2V0X25laWdoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpbjZfYWRkciAqYWRkcikKK3sKKworCWlmIChkZXYpCisJCXJldHVybiBfX25laWdoX2xvb2t1cCgmbmRfdGJsLCBhZGRyLCBkZXYsIDEpOworCisJcmV0dXJuIE5VTEw7Cit9CisKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25laWdoYm91ci5oIGIvaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGYzM2JiYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L25laWdoYm91ci5oCkBAIC0wLDAgKzEsMzcwIEBACisjaWZuZGVmIF9ORVRfTkVJR0hCT1VSX0gKKyNkZWZpbmUgX05FVF9ORUlHSEJPVVJfSAorCisvKgorICoJR2VuZXJpYyBuZWlnaGJvdXIgbWFuaXB1bGF0aW9uCisgKgorICoJQXV0aG9yczoKKyAqCVBlZHJvIFJvcXVlCQk8cm9xdWVAZGkuZmMudWwucHQ+CisgKglBbGV4ZXkgS3V6bmV0c292CTxrdXpuZXRAbXMyLmluci5hYy5ydT4KKyAqCisgKiAJQ2hhbmdlczoKKyAqCisgKglIYXJhbGQgV2VsdGU6CQk8bGFmb3JnZUBnbnVtb25rcy5vcmc+CisgKgkJLSBBZGQgbmVpZ2hib3VyIGNhY2hlIHN0YXRpc3RpY3MgbGlrZSBydHN0YXQKKyAqLworCisvKiBUaGUgZm9sbG93aW5nIGZsYWdzICYgc3RhdGVzIGFyZSBleHBvcnRlZCB0byB1c2VyIHNwYWNlLAorICAgc28gdGhhdCB0aGV5IHNob3VsZCBiZSBtb3ZlZCB0byBpbmNsdWRlL2xpbnV4LyBkaXJlY3RvcnkuCisgKi8KKworLyoKKyAqCU5laWdoYm9yIENhY2hlIEVudHJ5IEZsYWdzCisgKi8KKworI2RlZmluZSBOVEZfUFJPWFkJMHgwOAkvKiA9PSBBVEZfUFVCTCAqLworI2RlZmluZSBOVEZfUk9VVEVSCTB4ODAKKworLyoKKyAqCU5laWdoYm9yIENhY2hlIEVudHJ5IFN0YXRlcy4KKyAqLworCisjZGVmaW5lIE5VRF9JTkNPTVBMRVRFCTB4MDEKKyNkZWZpbmUgTlVEX1JFQUNIQUJMRQkweDAyCisjZGVmaW5lIE5VRF9TVEFMRQkweDA0CisjZGVmaW5lIE5VRF9ERUxBWQkweDA4CisjZGVmaW5lIE5VRF9QUk9CRQkweDEwCisjZGVmaW5lIE5VRF9GQUlMRUQJMHgyMAorCisvKiBEdW1teSBzdGF0ZXMgKi8KKyNkZWZpbmUgTlVEX05PQVJQCTB4NDAKKyNkZWZpbmUgTlVEX1BFUk1BTkVOVAkweDgwCisjZGVmaW5lIE5VRF9OT05FCTB4MDAKKworLyogTlVEX05PQVJQICYgTlVEX1BFUk1BTkVOVCBhcmUgcHNldWRvc3RhdGVzLCB0aGV5IG5ldmVyIGNoYW5nZQorICAgYW5kIG1ha2Ugbm8gYWRkcmVzcyByZXNvbHV0aW9uIG9yIE5VRC4KKyAgIE5VRF9QRVJNQU5FTlQgaXMgYWxzbyBjYW5ub3QgYmUgZGVsZXRlZCBieSBnYXJiYWdlIGNvbGxlY3RvcnMuCisgKi8KKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisKKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KKworI2RlZmluZSBOVURfSU5fVElNRVIJKE5VRF9JTkNPTVBMRVRFfE5VRF9SRUFDSEFCTEV8TlVEX0RFTEFZfE5VRF9QUk9CRSkKKyNkZWZpbmUgTlVEX1ZBTElECShOVURfUEVSTUFORU5UfE5VRF9OT0FSUHxOVURfUkVBQ0hBQkxFfE5VRF9QUk9CRXxOVURfU1RBTEV8TlVEX0RFTEFZKQorI2RlZmluZSBOVURfQ09OTkVDVEVECShOVURfUEVSTUFORU5UfE5VRF9OT0FSUHxOVURfUkVBQ0hBQkxFKQorCitzdHJ1Y3QgbmVpZ2hib3VyOworCitzdHJ1Y3QgbmVpZ2hfcGFybXMKK3sKKwlzdHJ1Y3QgbmVpZ2hfcGFybXMgKm5leHQ7CisJaW50CSgqbmVpZ2hfc2V0dXApKHN0cnVjdCBuZWlnaGJvdXIgKik7CisJc3RydWN0IG5laWdoX3RhYmxlICp0Ymw7CisJaW50CWVudHJpZXM7CisJdm9pZAkqcHJpdjsKKworCXZvaWQJKnN5c2N0bF90YWJsZTsKKworCWludCBkZWFkOworCWF0b21pY190IHJlZmNudDsKKwlzdHJ1Y3QgcmN1X2hlYWQgcmN1X2hlYWQ7CisKKwlpbnQJYmFzZV9yZWFjaGFibGVfdGltZTsKKwlpbnQJcmV0cmFuc190aW1lOworCWludAlnY19zdGFsZXRpbWU7CisJaW50CXJlYWNoYWJsZV90aW1lOworCWludAlkZWxheV9wcm9iZV90aW1lOworCisJaW50CXF1ZXVlX2xlbjsKKwlpbnQJdWNhc3RfcHJvYmVzOworCWludAlhcHBfcHJvYmVzOworCWludAltY2FzdF9wcm9iZXM7CisJaW50CWFueWNhc3RfZGVsYXk7CisJaW50CXByb3h5X2RlbGF5OworCWludAlwcm94eV9xbGVuOworCWludAlsb2NrdGltZTsKK307CisKK3N0cnVjdCBuZWlnaF9zdGF0aXN0aWNzCit7CisJdW5zaWduZWQgbG9uZyBhbGxvY3M7CQkvKiBudW1iZXIgb2YgYWxsb2NhdGVkIG5laWdocyAqLworCXVuc2lnbmVkIGxvbmcgZGVzdHJveXM7CQkvKiBudW1iZXIgb2YgZGVzdHJveWVkIG5laWdocyAqLworCXVuc2lnbmVkIGxvbmcgaGFzaF9ncm93czsJLyogbnVtYmVyIG9mIGhhc2ggcmVzaXplcyAqLworCisJdW5zaWduZWQgbG9uZyByZXNfZmFpbGVkOwkvKiBub21iZXIgb2YgZmFpbGVkIHJlc29sdXRpb25zICovCisKKwl1bnNpZ25lZCBsb25nIGxvb2t1cHM7CQkvKiBudW1iZXIgb2YgbG9va3VwcyAqLworCXVuc2lnbmVkIGxvbmcgaGl0czsJCS8qIG51bWJlciBvZiBoaXRzIChhbW9uZyBsb29rdXBzKSAqLworCisJdW5zaWduZWQgbG9uZyByY3ZfcHJvYmVzX21jYXN0OwkvKiBudW1iZXIgb2YgcmVjZWl2ZWQgbWNhc3QgaXB2NiAqLworCXVuc2lnbmVkIGxvbmcgcmN2X3Byb2Jlc191Y2FzdDsgLyogbnVtYmVyIG9mIHJlY2VpdmVkIHVjYXN0IGlwdjYgKi8KKworCXVuc2lnbmVkIGxvbmcgcGVyaW9kaWNfZ2NfcnVuczsJLyogbnVtYmVyIG9mIHBlcmlvZGljIEdDIHJ1bnMgKi8KKwl1bnNpZ25lZCBsb25nIGZvcmNlZF9nY19ydW5zOwkvKiBudW1iZXIgb2YgZm9yY2VkIEdDIHJ1bnMgKi8KK307CisKKyNkZWZpbmUgTkVJR0hfQ0FDSEVfU1RBVF9JTkModGJsLCBmaWVsZCkJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJcHJlZW1wdF9kaXNhYmxlKCk7CQkJCQlcCisJCShwZXJfY3B1X3B0cigodGJsKS0+c3RhdHMsIHNtcF9wcm9jZXNzb3JfaWQoKSktPmZpZWxkKSsrOyBcCisJCXByZWVtcHRfZW5hYmxlKCk7CQkJCQlcCisJfSB3aGlsZSAoMCkKKworc3RydWN0IG5laWdoYm91cgoreworCXN0cnVjdCBuZWlnaGJvdXIJKm5leHQ7CisJc3RydWN0IG5laWdoX3RhYmxlCSp0Ymw7CisJc3RydWN0IG5laWdoX3Bhcm1zCSpwYXJtczsKKwlzdHJ1Y3QgbmV0X2RldmljZQkJKmRldjsKKwl1bnNpZ25lZCBsb25nCQl1c2VkOworCXVuc2lnbmVkIGxvbmcJCWNvbmZpcm1lZDsKKwl1bnNpZ25lZCBsb25nCQl1cGRhdGVkOworCV9fdTgJCQlmbGFnczsKKwlfX3U4CQkJbnVkX3N0YXRlOworCV9fdTgJCQl0eXBlOworCV9fdTgJCQlkZWFkOworCWF0b21pY190CQlwcm9iZXM7CisJcndsb2NrX3QJCWxvY2s7CisJdW5zaWduZWQgY2hhcgkJaGFbKE1BWF9BRERSX0xFTitzaXplb2YodW5zaWduZWQgbG9uZyktMSkmfihzaXplb2YodW5zaWduZWQgbG9uZyktMSldOworCXN0cnVjdCBoaF9jYWNoZQkJKmhoOworCWF0b21pY190CQlyZWZjbnQ7CisJaW50CQkJKCpvdXRwdXQpKHN0cnVjdCBza19idWZmICpza2IpOworCXN0cnVjdCBza19idWZmX2hlYWQJYXJwX3F1ZXVlOworCXN0cnVjdCB0aW1lcl9saXN0CXRpbWVyOworCXN0cnVjdCBuZWlnaF9vcHMJKm9wczsKKwl1OAkJCXByaW1hcnlfa2V5WzBdOworfTsKKworc3RydWN0IG5laWdoX29wcworeworCWludAkJCWZhbWlseTsKKwl2b2lkCQkJKCpkZXN0cnVjdG9yKShzdHJ1Y3QgbmVpZ2hib3VyICopOworCXZvaWQJCQkoKnNvbGljaXQpKHN0cnVjdCBuZWlnaGJvdXIgKiwgc3RydWN0IHNrX2J1ZmYqKTsKKwl2b2lkCQkJKCplcnJvcl9yZXBvcnQpKHN0cnVjdCBuZWlnaGJvdXIgKiwgc3RydWN0IHNrX2J1ZmYqKTsKKwlpbnQJCQkoKm91dHB1dCkoc3RydWN0IHNrX2J1ZmYqKTsKKwlpbnQJCQkoKmNvbm5lY3RlZF9vdXRwdXQpKHN0cnVjdCBza19idWZmKik7CisJaW50CQkJKCpoaF9vdXRwdXQpKHN0cnVjdCBza19idWZmKik7CisJaW50CQkJKCpxdWV1ZV94bWl0KShzdHJ1Y3Qgc2tfYnVmZiopOworfTsKKworc3RydWN0IHBuZWlnaF9lbnRyeQoreworCXN0cnVjdCBwbmVpZ2hfZW50cnkJKm5leHQ7CisJc3RydWN0IG5ldF9kZXZpY2UJCSpkZXY7CisJdTgJCQlrZXlbMF07Cit9OworCisvKgorICoJbmVpZ2hib3VyIHRhYmxlIG1hbmlwdWxhdGlvbgorICovCisKKworc3RydWN0IG5laWdoX3RhYmxlCit7CisJc3RydWN0IG5laWdoX3RhYmxlCSpuZXh0OworCWludAkJCWZhbWlseTsKKwlpbnQJCQllbnRyeV9zaXplOworCWludAkJCWtleV9sZW47CisJX191MzIJCQkoKmhhc2gpKGNvbnN0IHZvaWQgKnBrZXksIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICopOworCWludAkJCSgqY29uc3RydWN0b3IpKHN0cnVjdCBuZWlnaGJvdXIgKik7CisJaW50CQkJKCpwY29uc3RydWN0b3IpKHN0cnVjdCBwbmVpZ2hfZW50cnkgKik7CisJdm9pZAkJCSgqcGRlc3RydWN0b3IpKHN0cnVjdCBwbmVpZ2hfZW50cnkgKik7CisJdm9pZAkJCSgqcHJveHlfcmVkbykoc3RydWN0IHNrX2J1ZmYgKnNrYik7CisJY2hhcgkJCSppZDsKKwlzdHJ1Y3QgbmVpZ2hfcGFybXMJcGFybXM7CisJLyogSEFDSy4gZ2NfKiBzaG91bCBmb2xsb3cgcGFybXMgd2l0aG91dCBhIGdhcCEgKi8KKwlpbnQJCQlnY19pbnRlcnZhbDsKKwlpbnQJCQlnY190aHJlc2gxOworCWludAkJCWdjX3RocmVzaDI7CisJaW50CQkJZ2NfdGhyZXNoMzsKKwl1bnNpZ25lZCBsb25nCQlsYXN0X2ZsdXNoOworCXN0cnVjdCB0aW1lcl9saXN0IAlnY190aW1lcjsKKwlzdHJ1Y3QgdGltZXJfbGlzdCAJcHJveHlfdGltZXI7CisJc3RydWN0IHNrX2J1ZmZfaGVhZAlwcm94eV9xdWV1ZTsKKwlhdG9taWNfdAkJZW50cmllczsKKwlyd2xvY2tfdAkJbG9jazsKKwl1bnNpZ25lZCBsb25nCQlsYXN0X3JhbmQ7CisJc3RydWN0IG5laWdoX3Bhcm1zCSpwYXJtc19saXN0OworCWttZW1fY2FjaGVfdAkJKmttZW1fY2FjaGVwOworCXN0cnVjdCBuZWlnaF9zdGF0aXN0aWNzCSpzdGF0czsKKwlzdHJ1Y3QgbmVpZ2hib3VyCSoqaGFzaF9idWNrZXRzOworCXVuc2lnbmVkIGludAkJaGFzaF9tYXNrOworCV9fdTMyCQkJaGFzaF9ybmQ7CisJdW5zaWduZWQgaW50CQloYXNoX2NoYWluX2djOworCXN0cnVjdCBwbmVpZ2hfZW50cnkJKipwaGFzaF9idWNrZXRzOworI2lmZGVmIENPTkZJR19QUk9DX0ZTCisJc3RydWN0IHByb2NfZGlyX2VudHJ5CSpwZGU7CisjZW5kaWYKK307CisKKy8qIGZsYWdzIGZvciBuZWlnaF91cGRhdGUoKSAqLworI2RlZmluZSBORUlHSF9VUERBVEVfRl9PVkVSUklERQkJCTB4MDAwMDAwMDEKKyNkZWZpbmUgTkVJR0hfVVBEQVRFX0ZfV0VBS19PVkVSUklERQkJMHgwMDAwMDAwMgorI2RlZmluZSBORUlHSF9VUERBVEVfRl9PVkVSUklERV9JU1JPVVRFUgkweDAwMDAwMDA0CisjZGVmaW5lIE5FSUdIX1VQREFURV9GX0lTUk9VVEVSCQkJMHg0MDAwMDAwMAorI2RlZmluZSBORUlHSF9VUERBVEVfRl9BRE1JTgkJCTB4ODAwMDAwMDAKKworZXh0ZXJuIHZvaWQJCQluZWlnaF90YWJsZV9pbml0KHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsKTsKK2V4dGVybiBpbnQJCQluZWlnaF90YWJsZV9jbGVhcihzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCk7CitleHRlcm4gc3RydWN0IG5laWdoYm91ciAqCW5laWdoX2xvb2t1cChzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCwKKwkJCQkJICAgICBjb25zdCB2b2lkICpwa2V5LAorCQkJCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworZXh0ZXJuIHN0cnVjdCBuZWlnaGJvdXIgKgluZWlnaF9sb29rdXBfbm9kZXYoc3RydWN0IG5laWdoX3RhYmxlICp0YmwsCisJCQkJCQkgICBjb25zdCB2b2lkICpwa2V5KTsKK2V4dGVybiBzdHJ1Y3QgbmVpZ2hib3VyICoJbmVpZ2hfY3JlYXRlKHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsLAorCQkJCQkgICAgIGNvbnN0IHZvaWQgKnBrZXksCisJCQkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitleHRlcm4gdm9pZAkJCW5laWdoX2Rlc3Ryb3koc3RydWN0IG5laWdoYm91ciAqbmVpZ2gpOworZXh0ZXJuIGludAkJCV9fbmVpZ2hfZXZlbnRfc2VuZChzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50CQkJbmVpZ2hfdXBkYXRlKHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoLCBjb25zdCB1OCAqbGxhZGRyLCB1OCBuZXcsIAorCQkJCQkgICAgIHUzMiBmbGFncyk7CitleHRlcm4gdm9pZAkJCW5laWdoX2NoYW5nZWFkZHIoc3RydWN0IG5laWdoX3RhYmxlICp0YmwsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworZXh0ZXJuIGludAkJCW5laWdoX2lmZG93bihzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitleHRlcm4gaW50CQkJbmVpZ2hfcmVzb2x2ZV9vdXRwdXQoc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50CQkJbmVpZ2hfY29ubmVjdGVkX291dHB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQJCQluZWlnaF9jb21wYXRfb3V0cHV0KHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIHN0cnVjdCBuZWlnaGJvdXIgCSpuZWlnaF9ldmVudF9ucyhzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCwKKwkJCQkJCXU4ICpsbGFkZHIsIHZvaWQgKnNhZGRyLAorCQkJCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisKK2V4dGVybiBzdHJ1Y3QgbmVpZ2hfcGFybXMJKm5laWdoX3Bhcm1zX2FsbG9jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsKTsKK2V4dGVybiB2b2lkCQkJbmVpZ2hfcGFybXNfcmVsZWFzZShzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCwgc3RydWN0IG5laWdoX3Bhcm1zICpwYXJtcyk7CitleHRlcm4gdm9pZAkJCW5laWdoX3Bhcm1zX2Rlc3Ryb3koc3RydWN0IG5laWdoX3Bhcm1zICpwYXJtcyk7CitleHRlcm4gdW5zaWduZWQgbG9uZwkJbmVpZ2hfcmFuZF9yZWFjaF90aW1lKHVuc2lnbmVkIGxvbmcgYmFzZSk7CisKK2V4dGVybiB2b2lkCQkJcG5laWdoX2VucXVldWUoc3RydWN0IG5laWdoX3RhYmxlICp0YmwsIHN0cnVjdCBuZWlnaF9wYXJtcyAqcCwKKwkJCQkJICAgICAgIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIHN0cnVjdCBwbmVpZ2hfZW50cnkJKnBuZWlnaF9sb29rdXAoc3RydWN0IG5laWdoX3RhYmxlICp0YmwsIGNvbnN0IHZvaWQgKmtleSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGNyZWF0KTsKK2V4dGVybiBpbnQJCQlwbmVpZ2hfZGVsZXRlKHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsLCBjb25zdCB2b2lkICprZXksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworCitzdHJ1Y3QgbmV0bGlua19jYWxsYmFjazsKK3N0cnVjdCBubG1zZ2hkcjsKK2V4dGVybiBpbnQgbmVpZ2hfZHVtcF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7CitleHRlcm4gaW50IG5laWdoX2FkZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgdm9pZCAqYXJnKTsKK2V4dGVybiBpbnQgbmVpZ2hfZGVsZXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLCB2b2lkICphcmcpOworZXh0ZXJuIHZvaWQgbmVpZ2hfYXBwX25zKHN0cnVjdCBuZWlnaGJvdXIgKm4pOworCitleHRlcm4gdm9pZCBuZWlnaF9mb3JfZWFjaChzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCwgdm9pZCAoKmNiKShzdHJ1Y3QgbmVpZ2hib3VyICosIHZvaWQgKiksIHZvaWQgKmNvb2tpZSk7CitleHRlcm4gdm9pZCBfX25laWdoX2Zvcl9lYWNoX3JlbGVhc2Uoc3RydWN0IG5laWdoX3RhYmxlICp0YmwsIGludCAoKmNiKShzdHJ1Y3QgbmVpZ2hib3VyICopKTsKK2V4dGVybiB2b2lkIHBuZWlnaF9mb3JfZWFjaChzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCwgdm9pZCAoKmNiKShzdHJ1Y3QgcG5laWdoX2VudHJ5ICopKTsKKworc3RydWN0IG5laWdoX3NlcV9zdGF0ZSB7CisJc3RydWN0IG5laWdoX3RhYmxlICp0Ymw7CisJdm9pZCAqKCpuZWlnaF9zdWJfaXRlcikoc3RydWN0IG5laWdoX3NlcV9zdGF0ZSAqc3RhdGUsCisJCQkJc3RydWN0IG5laWdoYm91ciAqbiwgbG9mZl90ICpwb3MpOworCXVuc2lnbmVkIGludCBidWNrZXQ7CisJdW5zaWduZWQgaW50IGZsYWdzOworI2RlZmluZSBORUlHSF9TRVFfTkVJR0hfT05MWQkweDAwMDAwMDAxCisjZGVmaW5lIE5FSUdIX1NFUV9JU19QTkVJR0gJMHgwMDAwMDAwMgorI2RlZmluZSBORUlHSF9TRVFfU0tJUF9OT0FSUAkweDAwMDAwMDA0Cit9OworZXh0ZXJuIHZvaWQgKm5laWdoX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKiwgbG9mZl90ICosIHN0cnVjdCBuZWlnaF90YWJsZSAqLCB1bnNpZ25lZCBpbnQpOworZXh0ZXJuIHZvaWQgKm5laWdoX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqLCB2b2lkICosIGxvZmZfdCAqKTsKK2V4dGVybiB2b2lkIG5laWdoX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqLCB2b2lkICopOworCitleHRlcm4gaW50CQkJbmVpZ2hfc3lzY3RsX3JlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIAorCQkJCQkJICAgICAgc3RydWN0IG5laWdoX3Bhcm1zICpwLAorCQkJCQkJICAgICAgaW50IHBfaWQsIGludCBwZGV2X2lkLAorCQkJCQkJICAgICAgY2hhciAqcF9uYW1lLAorCQkJCQkJICAgICAgcHJvY19oYW5kbGVyICpwcm9jX2hhbmRsZXIsCisJCQkJCQkgICAgICBjdGxfaGFuZGxlciAqc3RyYXRlZ3kpOworZXh0ZXJuIHZvaWQJCQluZWlnaF9zeXNjdGxfdW5yZWdpc3RlcihzdHJ1Y3QgbmVpZ2hfcGFybXMgKnApOworCitzdGF0aWMgaW5saW5lIHZvaWQgX19uZWlnaF9wYXJtc19wdXQoc3RydWN0IG5laWdoX3Bhcm1zICpwYXJtcykKK3sKKwlhdG9taWNfZGVjKCZwYXJtcy0+cmVmY250KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG5laWdoX3Bhcm1zX3B1dChzdHJ1Y3QgbmVpZ2hfcGFybXMgKnBhcm1zKQoreworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZwYXJtcy0+cmVmY250KSkKKwkJbmVpZ2hfcGFybXNfZGVzdHJveShwYXJtcyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG5laWdoX3Bhcm1zICpuZWlnaF9wYXJtc19jbG9uZShzdHJ1Y3QgbmVpZ2hfcGFybXMgKnBhcm1zKQoreworCWF0b21pY19pbmMoJnBhcm1zLT5yZWZjbnQpOworCXJldHVybiBwYXJtczsKK30KKworLyoKKyAqCU5laWdoYm91ciByZWZlcmVuY2VzCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkIG5laWdoX3JlbGVhc2Uoc3RydWN0IG5laWdoYm91ciAqbmVpZ2gpCit7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJm5laWdoLT5yZWZjbnQpKQorCQluZWlnaF9kZXN0cm95KG5laWdoKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbmVpZ2hib3VyICogbmVpZ2hfY2xvbmUoc3RydWN0IG5laWdoYm91ciAqbmVpZ2gpCit7CisJaWYgKG5laWdoKQorCQlhdG9taWNfaW5jKCZuZWlnaC0+cmVmY250KTsKKwlyZXR1cm4gbmVpZ2g7Cit9CisKKyNkZWZpbmUgbmVpZ2hfaG9sZChuKQlhdG9taWNfaW5jKCYobiktPnJlZmNudCkKKworc3RhdGljIGlubGluZSB2b2lkIG5laWdoX2NvbmZpcm0oc3RydWN0IG5laWdoYm91ciAqbmVpZ2gpCit7CisJaWYgKG5laWdoKQorCQluZWlnaC0+Y29uZmlybWVkID0gamlmZmllczsKK30KKworc3RhdGljIGlubGluZSBpbnQgbmVpZ2hfaXNfY29ubmVjdGVkKHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoKQoreworCXJldHVybiBuZWlnaC0+bnVkX3N0YXRlJk5VRF9DT05ORUNURUQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG5laWdoX2lzX3ZhbGlkKHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoKQoreworCXJldHVybiBuZWlnaC0+bnVkX3N0YXRlJk5VRF9WQUxJRDsKK30KKworc3RhdGljIGlubGluZSBpbnQgbmVpZ2hfZXZlbnRfc2VuZChzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwluZWlnaC0+dXNlZCA9IGppZmZpZXM7CisJaWYgKCEobmVpZ2gtPm51ZF9zdGF0ZSYoTlVEX0NPTk5FQ1RFRHxOVURfREVMQVl8TlVEX1BST0JFKSkpCisJCXJldHVybiBfX25laWdoX2V2ZW50X3NlbmQobmVpZ2gsIHNrYik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG5laWdoYm91ciAqCitfX25laWdoX2xvb2t1cChzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCwgY29uc3Qgdm9pZCAqcGtleSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGNyZWF0KQoreworCXN0cnVjdCBuZWlnaGJvdXIgKm4gPSBuZWlnaF9sb29rdXAodGJsLCBwa2V5LCBkZXYpOworCisJaWYgKG4gfHwgIWNyZWF0KQorCQlyZXR1cm4gbjsKKworCW4gPSBuZWlnaF9jcmVhdGUodGJsLCBwa2V5LCBkZXYpOworCXJldHVybiBJU19FUlIobikgPyBOVUxMIDogbjsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbmVpZ2hib3VyICoKK19fbmVpZ2hfbG9va3VwX2Vycm5vKHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsLCBjb25zdCB2b2lkICpwa2V5LAorICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBuZWlnaGJvdXIgKm4gPSBuZWlnaF9sb29rdXAodGJsLCBwa2V5LCBkZXYpOworCisJaWYgKG4pCisJCXJldHVybiBuOworCisJcmV0dXJuIG5laWdoX2NyZWF0ZSh0YmwsIHBrZXksIGRldik7Cit9CisKKyNkZWZpbmUgTE9DQUxMWV9FTlFVRVVFRCAtMgorCisjZW5kaWYKKyNlbmRpZgorCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldHJvbS5oIGIvaW5jbHVkZS9uZXQvbmV0cm9tLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVmMmM3NgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L25ldHJvbS5oCkBAIC0wLDAgKzEsMjQyIEBACisvKgorICoJRGVjbGFyYXRpb25zIG9mIE5FVC9ST00gdHlwZSBvYmplY3RzLgorICoKKyAqCUpvbmF0aGFuIE5heWxvciBHNEtMWAk5LzQvOTUKKyAqLworCisjaWZuZGVmIF9ORVRST01fSAorI2RlZmluZSBfTkVUUk9NX0ggCisjaW5jbHVkZSA8bGludXgvbmV0cm9tLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPG5ldC9zb2NrLmg+CisKKyNkZWZpbmUJTlJfTkVUV09SS19MRU4JCQkxNQorI2RlZmluZQlOUl9UUkFOU1BPUlRfTEVOCQk1CisKKyNkZWZpbmUJTlJfUFJPVE9fSVAJCQkweDBDCisKKyNkZWZpbmUJTlJfUFJPVE9FWFQJCQkweDAwCisjZGVmaW5lCU5SX0NPTk5SRVEJCQkweDAxCisjZGVmaW5lCU5SX0NPTk5BQ0sJCQkweDAyCisjZGVmaW5lCU5SX0RJU0NSRVEJCQkweDAzCisjZGVmaW5lCU5SX0RJU0NBQ0sJCQkweDA0CisjZGVmaW5lCU5SX0lORk8JCQkJMHgwNQorI2RlZmluZQlOUl9JTkZPQUNLCQkJMHgwNgorCisjZGVmaW5lCU5SX0NIT0tFX0ZMQUcJCQkweDgwCisjZGVmaW5lCU5SX05BS19GTEFHCQkJMHg0MAorI2RlZmluZQlOUl9NT1JFX0ZMQUcJCQkweDIwCisKKy8qIERlZmluZSBMaW5rIFN0YXRlIGNvbnN0YW50cy4gKi8KK2VudW0geworCU5SX1NUQVRFXzAsCisJTlJfU1RBVEVfMSwKKwlOUl9TVEFURV8yLAorCU5SX1NUQVRFXzMKK307CisKKyNkZWZpbmUJTlJfQ09ORF9BQ0tfUEVORElORwkJMHgwMQorI2RlZmluZQlOUl9DT05EX1JFSkVDVAkJCTB4MDIKKyNkZWZpbmUJTlJfQ09ORF9QRUVSX1JYX0JVU1kJCTB4MDQKKyNkZWZpbmUJTlJfQ09ORF9PV05fUlhfQlVTWQkJMHgwOAorCisjZGVmaW5lIE5SX0RFRkFVTFRfVDEJCQkoMTIwICogSFopCS8qIE91dHN0YW5kaW5nIGZyYW1lcyAtIDEyMCBzZWNvbmRzICovCisjZGVmaW5lIE5SX0RFRkFVTFRfVDIJCQkoNSAgICogSFopCS8qIFJlc3BvbnNlIGRlbGF5ICAgICAtIDUgc2Vjb25kcyAqLworI2RlZmluZSBOUl9ERUZBVUxUX04yCQkJMwkJLyogTnVtYmVyIG9mIFJldHJpZXMgLSAzICovCisjZGVmaW5lCU5SX0RFRkFVTFRfVDQJCQkoMTgwICogSFopCS8qIEJ1c3kgRGVsYXkgLSAxODAgc2Vjb25kcyAqLworI2RlZmluZQlOUl9ERUZBVUxUX0lETEUJCQkoMCAqIDYwICogSFopCS8qIE5vIEFjdGl2aXR5IFRpbWVvdXQgLSBub25lICovCisjZGVmaW5lCU5SX0RFRkFVTFRfV0lORE9XCQk0CQkvKiBEZWZhdWx0IFdpbmRvdyBTaXplIC0gNCAqLworI2RlZmluZQlOUl9ERUZBVUxUX09CUwkJCTYJCS8qIERlZmF1bHQgT2Jzb2xlc2NlbmNlIENvdW50IC0gNiAqLworI2RlZmluZQlOUl9ERUZBVUxUX1FVQUwJCQkxMAkJLyogRGVmYXVsdCBOZWlnaGJvdXIgUXVhbGl0eSAtIDEwICovCisjZGVmaW5lCU5SX0RFRkFVTFRfVFRMCQkJMTYJCS8qIERlZmF1bHQgVGltZSBUbyBMaXZlIC0gMTYgKi8KKyNkZWZpbmUJTlJfREVGQVVMVF9ST1VUSU5HCQkxCQkvKiBJcyByb3V0aW5nIGVuYWJsZWQgPyAqLworI2RlZmluZQlOUl9ERUZBVUxUX0ZBSUxTCQkyCQkvKiBMaW5rIGZhaWxzIHVudGlsIHJvdXRlIGZhaWxzICovCisKKyNkZWZpbmUgTlJfTU9EVUxVUyAJCQkyNTYKKyNkZWZpbmUgTlJfTUFYX1dJTkRPV19TSVpFCQkxMjcJCQkvKiBNYXhpbXVtIFdpbmRvdyBBbGxvd2FibGUgLSAxMjcgKi8KKyNkZWZpbmUJTlJfTUFYX1BBQ0tFVF9TSVpFCQkyMzYJCQkvKiBNYXhpbXVtIFBhY2tldCBMZW5ndGggLSAyMzYgKi8KKworc3RydWN0IG5yX3NvY2sgeworCXN0cnVjdCBzb2NrCQlzb2NrOworCWF4MjVfYWRkcmVzcwkJdXNlcl9hZGRyLCBzb3VyY2VfYWRkciwgZGVzdF9hZGRyOworCXN0cnVjdCBuZXRfZGV2aWNlCQkqZGV2aWNlOworCXVuc2lnbmVkIGNoYXIJCW15X2luZGV4LCAgIG15X2lkOworCXVuc2lnbmVkIGNoYXIJCXlvdXJfaW5kZXgsIHlvdXJfaWQ7CisJdW5zaWduZWQgY2hhcgkJc3RhdGUsIGNvbmRpdGlvbiwgYnBxZXh0LCB3aW5kb3c7CisJdW5zaWduZWQgc2hvcnQJCXZzLCB2ciwgdmEsIHZsOworCXVuc2lnbmVkIGNoYXIJCW4yLCBuMmNvdW50OworCXVuc2lnbmVkIGxvbmcJCXQxLCB0MiwgdDQsIGlkbGU7CisJdW5zaWduZWQgc2hvcnQJCWZyYWdsZW47CisJc3RydWN0IHRpbWVyX2xpc3QJdDF0aW1lcjsKKwlzdHJ1Y3QgdGltZXJfbGlzdAl0MnRpbWVyOworCXN0cnVjdCB0aW1lcl9saXN0CXQ0dGltZXI7CisJc3RydWN0IHRpbWVyX2xpc3QJaWRsZXRpbWVyOworCXN0cnVjdCBza19idWZmX2hlYWQJYWNrX3F1ZXVlOworCXN0cnVjdCBza19idWZmX2hlYWQJcmVzZXFfcXVldWU7CisJc3RydWN0IHNrX2J1ZmZfaGVhZAlmcmFnX3F1ZXVlOworfTsKKworI2RlZmluZSBucl9zayhzaykgKChzdHJ1Y3QgbnJfc29jayAqKShzaykpCisKK3N0cnVjdCBucl9uZWlnaCB7CisJc3RydWN0IGhsaXN0X25vZGUJbmVpZ2hfbm9kZTsKKwlheDI1X2FkZHJlc3MJCWNhbGxzaWduOworCWF4MjVfZGlnaQkJKmRpZ2lwZWF0OworCWF4MjVfY2IJCQkqYXgyNTsKKwlzdHJ1Y3QgbmV0X2RldmljZQkqZGV2OworCXVuc2lnbmVkIGNoYXIJCXF1YWxpdHk7CisJdW5zaWduZWQgY2hhcgkJbG9ja2VkOworCXVuc2lnbmVkIHNob3J0CQljb3VudDsKKwl1bnNpZ25lZCBpbnQJCW51bWJlcjsKKwl1bnNpZ25lZCBjaGFyCQlmYWlsZWQ7CisJYXRvbWljX3QJCXJlZmNvdW50OworfTsKKworc3RydWN0IG5yX3JvdXRlIHsKKwl1bnNpZ25lZCBjaGFyICAgcXVhbGl0eTsKKwl1bnNpZ25lZCBjaGFyICAgb2JzX2NvdW50OworCXN0cnVjdCBucl9uZWlnaCAqbmVpZ2hib3VyOworfTsKKworc3RydWN0IG5yX25vZGUgeworCXN0cnVjdCBobGlzdF9ub2RlCW5vZGVfbm9kZTsKKwlheDI1X2FkZHJlc3MJCWNhbGxzaWduOworCWNoYXIJCQltbmVtb25pY1s3XTsKKwl1bnNpZ25lZCBjaGFyCQl3aGljaDsKKwl1bnNpZ25lZCBjaGFyCQljb3VudDsKKwlzdHJ1Y3QgbnJfcm91dGUJCXJvdXRlc1szXTsKKwlhdG9taWNfdAkJcmVmY291bnQ7CisJc3BpbmxvY2tfdAkJbm9kZV9sb2NrOworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoJbnJfbm9kZSAmIG5yX25laWdoIGxpc3RzLCByZWZjb3VudGluZyBhbmQgbG9ja2luZworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBucl9ub2RlX2hvbGQoX19ucl9ub2RlKSBcCisJYXRvbWljX2luYygmKChfX25yX25vZGUpLT5yZWZjb3VudCkpCisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgbnJfbm9kZV9wdXQoc3RydWN0IG5yX25vZGUgKm5yX25vZGUpCit7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJm5yX25vZGUtPnJlZmNvdW50KSkgeworCQlrZnJlZShucl9ub2RlKTsKKwl9Cit9CisKKyNkZWZpbmUgbnJfbmVpZ2hfaG9sZChfX25yX25laWdoKSBcCisJYXRvbWljX2luYygmKChfX25yX25laWdoKS0+cmVmY291bnQpKQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIG5yX25laWdoX3B1dChzdHJ1Y3QgbnJfbmVpZ2ggKm5yX25laWdoKQoreworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZucl9uZWlnaC0+cmVmY291bnQpKSB7CisJCWlmIChucl9uZWlnaC0+ZGlnaXBlYXQgIT0gTlVMTCkKKwkJCWtmcmVlKG5yX25laWdoLT5kaWdpcGVhdCk7CisJCWtmcmVlKG5yX25laWdoKTsKKwl9Cit9CisKKy8qIG5yX25vZGVfbG9jayBhbmQgbnJfbm9kZV91bmxvY2sgYWxzbyBob2xkL3B1dCB0aGUgbm9kZSdzIHJlZmNvdW50ZXIuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgbnJfbm9kZV9sb2NrKHN0cnVjdCBucl9ub2RlICpucl9ub2RlKQoreworCW5yX25vZGVfaG9sZChucl9ub2RlKTsKKwlzcGluX2xvY2tfYmgoJm5yX25vZGUtPm5vZGVfbG9jayk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgbnJfbm9kZV91bmxvY2soc3RydWN0IG5yX25vZGUgKm5yX25vZGUpCit7CisJc3Bpbl91bmxvY2tfYmgoJm5yX25vZGUtPm5vZGVfbG9jayk7CisJbnJfbm9kZV9wdXQobnJfbm9kZSk7Cit9CisKKyNkZWZpbmUgbnJfbmVpZ2hfZm9yX2VhY2goX19ucl9uZWlnaCwgbm9kZSwgbGlzdCkgXAorCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KF9fbnJfbmVpZ2gsIG5vZGUsIGxpc3QsIG5laWdoX25vZGUpCisKKyNkZWZpbmUgbnJfbmVpZ2hfZm9yX2VhY2hfc2FmZShfX25yX25laWdoLCBub2RlLCBub2RlMiwgbGlzdCkgXAorCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoX19ucl9uZWlnaCwgbm9kZSwgbm9kZTIsIGxpc3QsIG5laWdoX25vZGUpCisKKyNkZWZpbmUgbnJfbm9kZV9mb3JfZWFjaChfX25yX25vZGUsIG5vZGUsIGxpc3QpIFwKKwlobGlzdF9mb3JfZWFjaF9lbnRyeShfX25yX25vZGUsIG5vZGUsIGxpc3QsIG5vZGVfbm9kZSkKKworI2RlZmluZSBucl9ub2RlX2Zvcl9lYWNoX3NhZmUoX19ucl9ub2RlLCBub2RlLCBub2RlMiwgbGlzdCkgXAorCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoX19ucl9ub2RlLCBub2RlLCBub2RlMiwgbGlzdCwgbm9kZV9ub2RlKQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIGFmX25ldHJvbS5jICovCitleHRlcm4gaW50ICBzeXNjdGxfbmV0cm9tX2RlZmF1bHRfcGF0aF9xdWFsaXR5OworZXh0ZXJuIGludCAgc3lzY3RsX25ldHJvbV9vYnNvbGVzY2VuY2VfY291bnRfaW5pdGlhbGlzZXI7CitleHRlcm4gaW50ICBzeXNjdGxfbmV0cm9tX25ldHdvcmtfdHRsX2luaXRpYWxpc2VyOworZXh0ZXJuIGludCAgc3lzY3RsX25ldHJvbV90cmFuc3BvcnRfdGltZW91dDsKK2V4dGVybiBpbnQgIHN5c2N0bF9uZXRyb21fdHJhbnNwb3J0X21heGltdW1fdHJpZXM7CitleHRlcm4gaW50ICBzeXNjdGxfbmV0cm9tX3RyYW5zcG9ydF9hY2tub3dsZWRnZV9kZWxheTsKK2V4dGVybiBpbnQgIHN5c2N0bF9uZXRyb21fdHJhbnNwb3J0X2J1c3lfZGVsYXk7CitleHRlcm4gaW50ICBzeXNjdGxfbmV0cm9tX3RyYW5zcG9ydF9yZXF1ZXN0ZWRfd2luZG93X3NpemU7CitleHRlcm4gaW50ICBzeXNjdGxfbmV0cm9tX3RyYW5zcG9ydF9ub19hY3Rpdml0eV90aW1lb3V0OworZXh0ZXJuIGludCAgc3lzY3RsX25ldHJvbV9yb3V0aW5nX2NvbnRyb2w7CitleHRlcm4gaW50ICBzeXNjdGxfbmV0cm9tX2xpbmtfZmFpbHNfY291bnQ7CitleHRlcm4gaW50ICBucl9yeF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3QgbmV0X2RldmljZSAqKTsKK2V4dGVybiB2b2lkIG5yX2Rlc3Ryb3lfc29ja2V0KHN0cnVjdCBzb2NrICopOworCisvKiBucl9kZXYuYyAqLworZXh0ZXJuIGludCAgbnJfcnhfaXAoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IG5ldF9kZXZpY2UgKik7CitleHRlcm4gdm9pZCBucl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqKTsKKworLyogbnJfaW4uYyAqLworZXh0ZXJuIGludCAgbnJfcHJvY2Vzc19yeF9mcmFtZShzdHJ1Y3Qgc29jayAqLCBzdHJ1Y3Qgc2tfYnVmZiAqKTsKKworLyogbnJfbG9vcGJhY2suYyAqLworZXh0ZXJuIHZvaWQgbnJfbG9vcGJhY2tfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIG5yX2xvb3BiYWNrX2NsZWFyKHZvaWQpOworZXh0ZXJuIGludCAgbnJfbG9vcGJhY2tfcXVldWUoc3RydWN0IHNrX2J1ZmYgKik7CisKKy8qIG5yX291dC5jICovCitleHRlcm4gdm9pZCBucl9vdXRwdXQoc3RydWN0IHNvY2sgKiwgc3RydWN0IHNrX2J1ZmYgKik7CitleHRlcm4gdm9pZCBucl9zZW5kX25ha19mcmFtZShzdHJ1Y3Qgc29jayAqKTsKK2V4dGVybiB2b2lkIG5yX2tpY2soc3RydWN0IHNvY2sgKik7CitleHRlcm4gdm9pZCBucl90cmFuc21pdF9idWZmZXIoc3RydWN0IHNvY2sgKiwgc3RydWN0IHNrX2J1ZmYgKik7CitleHRlcm4gdm9pZCBucl9lc3RhYmxpc2hfZGF0YV9saW5rKHN0cnVjdCBzb2NrICopOworZXh0ZXJuIHZvaWQgbnJfZW5xdWlyeV9yZXNwb25zZShzdHJ1Y3Qgc29jayAqKTsKK2V4dGVybiB2b2lkIG5yX2NoZWNrX2lmcmFtZXNfYWNrZWQoc3RydWN0IHNvY2sgKiwgdW5zaWduZWQgc2hvcnQpOworCisvKiBucl9yb3V0ZS5jICovCitleHRlcm4gdm9pZCBucl9ydF9kZXZpY2VfZG93bihzdHJ1Y3QgbmV0X2RldmljZSAqKTsKK2V4dGVybiBzdHJ1Y3QgbmV0X2RldmljZSAqbnJfZGV2X2ZpcnN0KHZvaWQpOworZXh0ZXJuIHN0cnVjdCBuZXRfZGV2aWNlICpucl9kZXZfZ2V0KGF4MjVfYWRkcmVzcyAqKTsKK2V4dGVybiBpbnQgIG5yX3J0X2lvY3RsKHVuc2lnbmVkIGludCwgdm9pZCBfX3VzZXIgKik7CitleHRlcm4gdm9pZCBucl9saW5rX2ZhaWxlZChheDI1X2NiICosIGludCk7CitleHRlcm4gaW50ICBucl9yb3V0ZV9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqLCBheDI1X2NiICopOworZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbnJfbm9kZXNfZm9wczsKK2V4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG5yX25laWdoX2ZvcHM7CitleHRlcm4gdm9pZCBucl9ydF9mcmVlKHZvaWQpOworCisvKiBucl9zdWJyLmMgKi8KK2V4dGVybiB2b2lkIG5yX2NsZWFyX3F1ZXVlcyhzdHJ1Y3Qgc29jayAqKTsKK2V4dGVybiB2b2lkIG5yX2ZyYW1lc19hY2tlZChzdHJ1Y3Qgc29jayAqLCB1bnNpZ25lZCBzaG9ydCk7CitleHRlcm4gdm9pZCBucl9yZXF1ZXVlX2ZyYW1lcyhzdHJ1Y3Qgc29jayAqKTsKK2V4dGVybiBpbnQgIG5yX3ZhbGlkYXRlX25yKHN0cnVjdCBzb2NrICosIHVuc2lnbmVkIHNob3J0KTsKK2V4dGVybiBpbnQgIG5yX2luX3J4X3dpbmRvdyhzdHJ1Y3Qgc29jayAqLCB1bnNpZ25lZCBzaG9ydCk7CitleHRlcm4gdm9pZCBucl93cml0ZV9pbnRlcm5hbChzdHJ1Y3Qgc29jayAqLCBpbnQpOworZXh0ZXJuIHZvaWQgbnJfdHJhbnNtaXRfcmVmdXNhbChzdHJ1Y3Qgc2tfYnVmZiAqLCBpbnQpOworZXh0ZXJuIHZvaWQgbnJfZGlzY29ubmVjdChzdHJ1Y3Qgc29jayAqLCBpbnQpOworCisvKiBucl90aW1lci5jICovCitleHRlcm4gdm9pZCBucl9pbml0X3RpbWVycyhzdHJ1Y3Qgc29jayAqc2spOworZXh0ZXJuIHZvaWQgbnJfc3RhcnRfaGVhcnRiZWF0KHN0cnVjdCBzb2NrICopOworZXh0ZXJuIHZvaWQgbnJfc3RhcnRfdDF0aW1lcihzdHJ1Y3Qgc29jayAqKTsKK2V4dGVybiB2b2lkIG5yX3N0YXJ0X3QydGltZXIoc3RydWN0IHNvY2sgKik7CitleHRlcm4gdm9pZCBucl9zdGFydF90NHRpbWVyKHN0cnVjdCBzb2NrICopOworZXh0ZXJuIHZvaWQgbnJfc3RhcnRfaWRsZXRpbWVyKHN0cnVjdCBzb2NrICopOworZXh0ZXJuIHZvaWQgbnJfc3RvcF9oZWFydGJlYXQoc3RydWN0IHNvY2sgKik7CitleHRlcm4gdm9pZCBucl9zdG9wX3QxdGltZXIoc3RydWN0IHNvY2sgKik7CitleHRlcm4gdm9pZCBucl9zdG9wX3QydGltZXIoc3RydWN0IHNvY2sgKik7CitleHRlcm4gdm9pZCBucl9zdG9wX3Q0dGltZXIoc3RydWN0IHNvY2sgKik7CitleHRlcm4gdm9pZCBucl9zdG9wX2lkbGV0aW1lcihzdHJ1Y3Qgc29jayAqKTsKK2V4dGVybiBpbnQgIG5yX3QxdGltZXJfcnVubmluZyhzdHJ1Y3Qgc29jayAqKTsKKworLyogc3lzY3RsX25ldF9uZXRyb20uYyAqLworZXh0ZXJuIHZvaWQgbnJfcmVnaXN0ZXJfc3lzY3RsKHZvaWQpOworZXh0ZXJuIHZvaWQgbnJfdW5yZWdpc3Rlcl9zeXNjdGwodm9pZCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcDgwMjIuaCBiL2luY2x1ZGUvbmV0L3A4MDIyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M5OWE4NgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L3A4MDIyLmgKQEAgLTAsMCArMSwxMCBAQAorI2lmbmRlZiBfTkVUX1A4MDIyX0gKKyNkZWZpbmUgX05FVF9QODAyMl9ICitleHRlcm4gc3RydWN0IGRhdGFsaW5rX3Byb3RvICoKKwlyZWdpc3Rlcl84MDIyX2NsaWVudCh1bnNpZ25lZCBjaGFyIHR5cGUsCisJCQkgICAgIGludCAoKmZ1bmMpKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQkgc3RydWN0IHBhY2tldF90eXBlICpwdCkpOworZXh0ZXJuIHZvaWQgdW5yZWdpc3Rlcl84MDIyX2NsaWVudChzdHJ1Y3QgZGF0YWxpbmtfcHJvdG8gKnByb3RvKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9wa3RfYWN0LmggYi9pbmNsdWRlL25ldC9wa3RfYWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQwODk2NAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L3BrdF9hY3QuaApAQCAtMCwwICsxLDI3NSBAQAorI2lmbmRlZiBfX05FVF9QS1RfQUNUX0gKKyNkZWZpbmUgX19ORVRfUEtUX0FDVF9ICisKKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zb2NraW9zLmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bmV0L3NvY2suaD4KKyNpbmNsdWRlIDxuZXQvcGt0X3NjaGVkLmg+CisKKyNkZWZpbmUgdGNhX3N0KHZhbCkgKHN0cnVjdCB0Y2ZfIyN2YWwgKikKKyNkZWZpbmUgUFJJVihhLG5hbWUpICggdGNhX3N0KG5hbWUpIChhKS0+cHJpdikKKworI2lmIDAgLyogY29udHJvbCAqLworI2RlZmluZSBEUFJJTlRLKGZvcm1hdCxhcmdzLi4uKSBwcmludGsoS0VSTl9ERUJVRyBmb3JtYXQsIyNhcmdzKQorI2Vsc2UKKyNkZWZpbmUgRFBSSU5USyhmb3JtYXQsYXJncy4uLikKKyNlbmRpZgorCisjaWYgMCAvKiBkYXRhICovCisjZGVmaW5lIEQyUFJJTlRLKGZvcm1hdCxhcmdzLi4uKSBwcmludGsoS0VSTl9ERUJVRyBmb3JtYXQsIyNhcmdzKQorI2Vsc2UKKyNkZWZpbmUgRDJQUklOVEsoZm9ybWF0LGFyZ3MuLi4pCisjZW5kaWYKKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQKK3RjZl9oYXNoKHUzMiBpbmRleCkKK3sKKwlyZXR1cm4gaW5kZXggJiBNWV9UQUJfTUFTSzsKK30KKworLyogcHJvYmFibHkgbW92ZSB0aGlzIGZyb20gYmVpbmcgaW5saW5lCisgKiBhbmQgcHV0IGludG8gYWN0X2dlbmVyaWMKKyovCitzdGF0aWMgaW5saW5lIHZvaWQKK3RjZl9oYXNoX2Rlc3Ryb3koc3RydWN0IHRjZl9zdCAqcCkKK3sKKwl1bnNpZ25lZCBoID0gdGNmX2hhc2gocC0+aW5kZXgpOworCXN0cnVjdCB0Y2Zfc3QgKipwMXA7CisKKwlmb3IgKHAxcCA9ICZ0Y2ZfaHRbaF07ICpwMXA7IHAxcCA9ICYoKnAxcCktPm5leHQpIHsKKwkJaWYgKCpwMXAgPT0gcCkgeworCQkJd3JpdGVfbG9ja19iaCgmdGNmX3RfbG9jayk7CisJCQkqcDFwID0gcC0+bmV4dDsKKwkJCXdyaXRlX3VubG9ja19iaCgmdGNmX3RfbG9jayk7CisjaWZkZWYgQ09ORklHX05FVF9FU1RJTUFUT1IKKwkJCWdlbl9raWxsX2VzdGltYXRvcigmcC0+YnN0YXRzLCAmcC0+cmF0ZV9lc3QpOworI2VuZGlmCisJCQlrZnJlZShwKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKwlCVUdfVFJBUCgwKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3RjZl9oYXNoX3JlbGVhc2Uoc3RydWN0IHRjZl9zdCAqcCwgaW50IGJpbmQgKQoreworCWludCByZXQgPSAwOworCWlmIChwKSB7CisJCWlmIChiaW5kKSB7CisJCQlwLT5iaW5kY250LS07CisJCX0KKwkJcC0+cmVmY250LS07CisJICAgICAgIAlpZihwLT5iaW5kY250IDw9MCAmJiBwLT5yZWZjbnQgPD0gMCkgeworCQkJdGNmX2hhc2hfZGVzdHJveShwKTsKKwkJCXJldCA9IDE7CisJCX0KKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50Cit0Y2ZfZHVtcF93YWxrZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLAorCQlzdHJ1Y3QgdGNfYWN0aW9uICphKQoreworCXN0cnVjdCB0Y2Zfc3QgKnA7CisJaW50IGVyciA9MCwgaW5kZXggPSAgLTEsaT0gMCwgc19pID0gMCwgbl9pID0gMDsKKwlzdHJ1Y3QgcnRhdHRyICpyIDsKKworCXJlYWRfbG9jaygmdGNmX3RfbG9jayk7CisKKwlzX2kgPSBjYi0+YXJnc1swXTsKKworCWZvciAoaSA9IDA7IGkgPCBNWV9UQUJfU0laRTsgaSsrKSB7CisJCXAgPSB0Y2ZfaHRbdGNmX2hhc2goaSldOworCisJCWZvciAoOyBwOyBwID0gcC0+bmV4dCkgeworCQkJaW5kZXgrKzsKKwkJCWlmIChpbmRleCA8IHNfaSkKKwkJCQljb250aW51ZTsKKwkJCWEtPnByaXYgPSBwOworCQkJYS0+b3JkZXIgPSBuX2k7CisJCQlyID0gKHN0cnVjdCBydGF0dHIqKSBza2ItPnRhaWw7CisJCQlSVEFfUFVUKHNrYiwgYS0+b3JkZXIsIDAsIE5VTEwpOworCQkJZXJyID0gdGNmX2FjdGlvbl9kdW1wXzEoc2tiLCBhLCAwLCAwKTsKKwkJCWlmICgwID4gZXJyKSB7CisJCQkJaW5kZXgtLTsKKwkJCQlza2JfdHJpbShza2IsICh1OCopciAtIHNrYi0+ZGF0YSk7CisJCQkJZ290byBkb25lOworCQkJfQorCQkJci0+cnRhX2xlbiA9IHNrYi0+dGFpbCAtICh1OCopcjsKKwkJCW5faSsrOworCQkJaWYgKG5faSA+PSBUQ0FfQUNUX01BWF9QUklPKSB7CisJCQkJZ290byBkb25lOworCQkJfQorCQl9CisJfQorZG9uZToKKwlyZWFkX3VubG9jaygmdGNmX3RfbG9jayk7CisJaWYgKG5faSkKKwkJY2ItPmFyZ3NbMF0gKz0gbl9pOworCXJldHVybiBuX2k7CisKK3J0YXR0cl9mYWlsdXJlOgorCXNrYl90cmltKHNrYiwgKHU4KilyIC0gc2tiLT5kYXRhKTsKKwlnb3RvIGRvbmU7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludAordGNmX2RlbF93YWxrZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjX2FjdGlvbiAqYSkKK3sKKwlzdHJ1Y3QgdGNmX3N0ICpwLCAqc19wOworCXN0cnVjdCBydGF0dHIgKnIgOworCWludCBpPSAwLCBuX2kgPSAwOworCisJciA9IChzdHJ1Y3QgcnRhdHRyKikgc2tiLT50YWlsOworCVJUQV9QVVQoc2tiLCBhLT5vcmRlciwgMCwgTlVMTCk7CisJUlRBX1BVVChza2IsIFRDQV9LSU5ELCBJRk5BTVNJWiwgYS0+b3BzLT5raW5kKTsKKwlmb3IgKGkgPSAwOyBpIDwgTVlfVEFCX1NJWkU7IGkrKykgeworCQlwID0gdGNmX2h0W3RjZl9oYXNoKGkpXTsKKworCQl3aGlsZSAocCAhPSBOVUxMKSB7CisJCQlzX3AgPSBwLT5uZXh0OworCQkJaWYgKEFDVF9QX0RFTEVURUQgPT0gdGNmX2hhc2hfcmVsZWFzZShwLCAwKSkgeworCQkJCSBtb2R1bGVfcHV0KGEtPm9wcy0+b3duZXIpOworCQkJfQorCQkJbl9pKys7CisJCQlwID0gc19wOworCQl9CisJfQorCVJUQV9QVVQoc2tiLCBUQ0FfRkNOVCwgNCwgJm5faSk7CisJci0+cnRhX2xlbiA9IHNrYi0+dGFpbCAtICh1OCopcjsKKworCXJldHVybiBuX2k7CitydGF0dHJfZmFpbHVyZToKKwlza2JfdHJpbShza2IsICh1OCopciAtIHNrYi0+ZGF0YSk7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludAordGNmX2dlbmVyaWNfd2Fsa2VyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYiwgaW50IHR5cGUsCisJCXN0cnVjdCB0Y19hY3Rpb24gKmEpCit7CisJCWlmICh0eXBlID09IFJUTV9ERUxBQ1RJT04pIHsKKwkJCXJldHVybiB0Y2ZfZGVsX3dhbGtlcihza2IsYSk7CisJCX0gZWxzZSBpZiAodHlwZSA9PSBSVE1fR0VUQUNUSU9OKSB7CisJCQlyZXR1cm4gdGNmX2R1bXBfd2Fsa2VyKHNrYixjYixhKTsKKwkJfSBlbHNlIHsKKwkJCXByaW50aygidGNmX2dlbmVyaWNfd2Fsa2VyOiB1bmtub3duIGFjdGlvbiAlZFxuIix0eXBlKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHN0cnVjdCB0Y2Zfc3QgKgordGNmX2hhc2hfbG9va3VwKHUzMiBpbmRleCkKK3sKKwlzdHJ1Y3QgdGNmX3N0ICpwOworCisJcmVhZF9sb2NrKCZ0Y2ZfdF9sb2NrKTsKKwlmb3IgKHAgPSB0Y2ZfaHRbdGNmX2hhc2goaW5kZXgpXTsgcDsgcCA9IHAtPm5leHQpIHsKKwkJaWYgKHAtPmluZGV4ID09IGluZGV4KQorCQkJYnJlYWs7CisJfQorCXJlYWRfdW5sb2NrKCZ0Y2ZfdF9sb2NrKTsKKwlyZXR1cm4gcDsKK30KKworc3RhdGljIF9faW5saW5lX18gdTMyCit0Y2ZfaGFzaF9uZXdfaW5kZXgodm9pZCkKK3sKKwlkbyB7CisJCWlmICgrK2lkeF9nZW4gPT0gMCkKKwkJCWlkeF9nZW4gPSAxOworCX0gd2hpbGUgKHRjZl9oYXNoX2xvb2t1cChpZHhfZ2VuKSk7CisKKwlyZXR1cm4gaWR4X2dlbjsKK30KKworCitzdGF0aWMgaW5saW5lIGludAordGNmX2hhc2hfc2VhcmNoKHN0cnVjdCB0Y19hY3Rpb24gKmEsIHUzMiBpbmRleCkKK3sKKwlzdHJ1Y3QgdGNmX3N0ICpwID0gdGNmX2hhc2hfbG9va3VwKGluZGV4KTsKKworCWlmIChwICE9IE5VTEwpIHsKKwkJYS0+cHJpdiA9IHA7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19ORVRfQUNUX0lOSVQKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRjZl9zdCAqCit0Y2ZfaGFzaF9jaGVjayh1MzIgaW5kZXgsIHN0cnVjdCB0Y19hY3Rpb24gKmEsIGludCBvdnIsIGludCBiaW5kKQoreworCXN0cnVjdCB0Y2Zfc3QgKnAgPSBOVUxMOworCWlmIChpbmRleCAmJiAocCA9IHRjZl9oYXNoX2xvb2t1cChpbmRleCkpICE9IE5VTEwpIHsKKwkJaWYgKGJpbmQpIHsKKwkJCXAtPmJpbmRjbnQrKzsKKwkJCXAtPnJlZmNudCsrOworCQl9CisJCWEtPnByaXYgPSBwOworCX0KKwlyZXR1cm4gcDsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdGNmX3N0ICoKK3RjZl9oYXNoX2NyZWF0ZSh1MzIgaW5kZXgsIHN0cnVjdCBydGF0dHIgKmVzdCwgc3RydWN0IHRjX2FjdGlvbiAqYSwgaW50IHNpemUsIGludCBvdnIsIGludCBiaW5kKQoreworCXN0cnVjdCB0Y2Zfc3QgKnAgPSBOVUxMOworCisJcCA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKHAgPT0gTlVMTCkKKwkJcmV0dXJuIHA7CisKKwltZW1zZXQocCwgMCwgc2l6ZSk7CisJcC0+cmVmY250ID0gMTsKKworCWlmIChiaW5kKSB7CisJCXAtPmJpbmRjbnQgPSAxOworCX0KKworCXNwaW5fbG9ja19pbml0KCZwLT5sb2NrKTsKKwlwLT5zdGF0c19sb2NrID0gJnAtPmxvY2s7CisJcC0+aW5kZXggPSBpbmRleCA/IDogdGNmX2hhc2hfbmV3X2luZGV4KCk7CisJcC0+dG0uaW5zdGFsbCA9IGppZmZpZXM7CisJcC0+dG0ubGFzdHVzZSA9IGppZmZpZXM7CisjaWZkZWYgQ09ORklHX05FVF9FU1RJTUFUT1IKKwlpZiAoZXN0KQorCQlnZW5fbmV3X2VzdGltYXRvcigmcC0+YnN0YXRzLCAmcC0+cmF0ZV9lc3QsIHAtPnN0YXRzX2xvY2ssIGVzdCk7CisjZW5kaWYKKwlhLT5wcml2ID0gKHZvaWQgKikgcDsKKwlyZXR1cm4gcDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHRjZl9oYXNoX2luc2VydChzdHJ1Y3QgdGNmX3N0ICpwKQoreworCXVuc2lnbmVkIGggPSB0Y2ZfaGFzaChwLT5pbmRleCk7CisKKwl3cml0ZV9sb2NrX2JoKCZ0Y2ZfdF9sb2NrKTsKKwlwLT5uZXh0ID0gdGNmX2h0W2hdOworCXRjZl9odFtoXSA9IHA7CisJd3JpdGVfdW5sb2NrX2JoKCZ0Y2ZfdF9sb2NrKTsKK30KKworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcGt0X2Nscy5oIGIvaW5jbHVkZS9uZXQvcGt0X2Nscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhYmRhNmEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9wa3RfY2xzLmgKQEAgLTAsMCArMSwzNjYgQEAKKyNpZm5kZWYgX19ORVRfUEtUX0NMU19ICisjZGVmaW5lIF9fTkVUX1BLVF9DTFNfSAorCisjaW5jbHVkZSA8bGludXgvcGt0X2Nscy5oPgorI2luY2x1ZGUgPG5ldC9zY2hfZ2VuZXJpYy5oPgorI2luY2x1ZGUgPG5ldC9hY3RfYXBpLmg+CisKKy8qIEJhc2ljIHBhY2tldCBjbGFzc2lmaWVyIGZyb250ZW5kIGRlZmluaXRpb25zLiAqLworCitzdHJ1Y3QgdGNmX3dhbGtlcgoreworCWludAlzdG9wOworCWludAlza2lwOworCWludAljb3VudDsKKwlpbnQJKCpmbikoc3RydWN0IHRjZl9wcm90byAqLCB1bnNpZ25lZCBsb25nIG5vZGUsIHN0cnVjdCB0Y2Zfd2Fsa2VyICopOworfTsKKworZXh0ZXJuIGludCByZWdpc3Rlcl90Y2ZfcHJvdG9fb3BzKHN0cnVjdCB0Y2ZfcHJvdG9fb3BzICpvcHMpOworZXh0ZXJuIGludCB1bnJlZ2lzdGVyX3RjZl9wcm90b19vcHMoc3RydWN0IHRjZl9wcm90b19vcHMgKm9wcyk7CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZworX19jbHNfc2V0X2NsYXNzKHVuc2lnbmVkIGxvbmcgKmNscCwgdW5zaWduZWQgbG9uZyBjbCkKK3sKKwl1bnNpZ25lZCBsb25nIG9sZF9jbDsKKyAKKwlvbGRfY2wgPSAqY2xwOworCSpjbHAgPSBjbDsKKwlyZXR1cm4gb2xkX2NsOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK2Nsc19zZXRfY2xhc3Moc3RydWN0IHRjZl9wcm90byAqdHAsIHVuc2lnbmVkIGxvbmcgKmNscCwgCisJdW5zaWduZWQgbG9uZyBjbCkKK3sKKwl1bnNpZ25lZCBsb25nIG9sZF9jbDsKKwkKKwl0Y2ZfdHJlZV9sb2NrKHRwKTsKKwlvbGRfY2wgPSBfX2Nsc19zZXRfY2xhc3MoY2xwLCBjbCk7CisJdGNmX3RyZWVfdW5sb2NrKHRwKTsKKyAKKwlyZXR1cm4gb2xkX2NsOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3RjZl9iaW5kX2ZpbHRlcihzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgc3RydWN0IHRjZl9yZXN1bHQgKnIsIHVuc2lnbmVkIGxvbmcgYmFzZSkKK3sKKwl1bnNpZ25lZCBsb25nIGNsOworCisJY2wgPSB0cC0+cS0+b3BzLT5jbF9vcHMtPmJpbmRfdGNmKHRwLT5xLCBiYXNlLCByLT5jbGFzc2lkKTsKKwljbCA9IGNsc19zZXRfY2xhc3ModHAsICZyLT5jbGFzcywgY2wpOworCWlmIChjbCkKKwkJdHAtPnEtPm9wcy0+Y2xfb3BzLT51bmJpbmRfdGNmKHRwLT5xLCBjbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAordGNmX3VuYmluZF9maWx0ZXIoc3RydWN0IHRjZl9wcm90byAqdHAsIHN0cnVjdCB0Y2ZfcmVzdWx0ICpyKQoreworCXVuc2lnbmVkIGxvbmcgY2w7CisKKwlpZiAoKGNsID0gX19jbHNfc2V0X2NsYXNzKCZyLT5jbGFzcywgMCkpICE9IDApCisJCXRwLT5xLT5vcHMtPmNsX29wcy0+dW5iaW5kX3RjZih0cC0+cSwgY2wpOworfQorCitzdHJ1Y3QgdGNmX2V4dHMKK3sKKyNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1QKKwlzdHJ1Y3QgdGNfYWN0aW9uICphY3Rpb247CisjZWxpZiBkZWZpbmVkIENPTkZJR19ORVRfQ0xTX1BPTElDRQorCXN0cnVjdCB0Y2ZfcG9saWNlICpwb2xpY2U7CisjZW5kaWYKK307CisKKy8qIE1hcCB0byBleHBvcnQgY2xhc3NpZmllciBzcGVjaWZpYyBleHRlbnNpb24gVExWIHR5cGVzIHRvIHRoZQorICogZ2VuZXJpYyBleHRlbnNpb25zIEFQSS4gVW5zdXBwb3J0ZWQgZXh0ZW5zaW9ucyBtdXN0IGJlIHNldCB0byAwLgorICovCitzdHJ1Y3QgdGNmX2V4dF9tYXAKK3sKKwlpbnQgYWN0aW9uOworCWludCBwb2xpY2U7Cit9OworCisvKioKKyAqIHRjZl9leHRzX2lzX3ByZWRpY2F0aXZlIC0gY2hlY2sgaWYgYSBwcmVkaWNhdGl2ZSBleHRlbnNpb24gaXMgcHJlc2VudAorICogQGV4dHM6IHRjIGZpbHRlciBleHRlbnNpb25zIGhhbmRsZQorICoKKyAqIFJldHVybnMgMSBpZiBhIHByZWRpY2F0aXZlIGV4dGVuc2lvbiBpcyBwcmVzZW50LCBpLmUuIGFuIGV4dGVuc2lvbiB3aGljaAorICogbWlnaHQgY2F1c2UgZnVydGhlciBhY3Rpb25zIGFuZCB0aHVzIG92ZXJydWxlIHRoZSByZWd1bGFyIHRjZl9yZXN1bHQuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50Cit0Y2ZfZXh0c19pc19wcmVkaWNhdGl2ZShzdHJ1Y3QgdGNmX2V4dHMgKmV4dHMpCit7CisjaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUCisJcmV0dXJuICEhZXh0cy0+YWN0aW9uOworI2VsaWYgZGVmaW5lZCBDT05GSUdfTkVUX0NMU19QT0xJQ0UKKwlyZXR1cm4gISFleHRzLT5wb2xpY2U7CisjZWxzZQorCXJldHVybiAwOworI2VuZGlmCit9CisKKy8qKgorICogdGNmX2V4dHNfaXNfYXZhaWxhYmxlIC0gY2hlY2sgaWYgYXQgbGVhc3Qgb25lIGV4dGVuc2lvbiBpcyBwcmVzZW50CisgKiBAZXh0czogdGMgZmlsdGVyIGV4dGVuc2lvbnMgaGFuZGxlCisgKgorICogUmV0dXJucyAxIGlmIGF0IGxlYXN0IG9uZSBleHRlbnNpb24gaXMgcHJlc2VudC4KKyAqLworc3RhdGljIGlubGluZSBpbnQKK3RjZl9leHRzX2lzX2F2YWlsYWJsZShzdHJ1Y3QgdGNmX2V4dHMgKmV4dHMpCit7CisJLyogQWxsIG5vbi1wcmVkaWNhdGl2ZSBleHRlbnNpb25zIG11c3QgYmUgYWRkZWQgaGVyZS4gKi8KKwlyZXR1cm4gdGNmX2V4dHNfaXNfcHJlZGljYXRpdmUoZXh0cyk7Cit9CisKKy8qKgorICogdGNmX2V4dHNfZXhlYyAtIGV4ZWN1dGUgdGMgZmlsdGVyIGV4dGVuc2lvbnMKKyAqIEBza2I6IHNvY2tldCBidWZmZXIKKyAqIEBleHRzOiB0YyBmaWx0ZXIgZXh0ZW5zaW9ucyBoYW5kbGUKKyAqIEByZXM6IGRlc2lyZWQgcmVzdWx0CisgKgorICogRXhlY3V0ZXMgYWxsIGNvbmZpZ3VyZWQgZXh0ZW5zaW9ucy4gUmV0dXJucyAwIG9uIGEgbm9ybWFsIGV4ZWN1dGlvbiwKKyAqIGEgbmVnYXRpdmUgbnVtYmVyIGlmIHRoZSBmaWx0ZXIgbXVzdCBiZSBjb25zaWRlcmVkIHVubWF0Y2hlZCBvcgorICogYSBwb3NpdGl2ZSBhY3Rpb24gY29kZSAoVENfQUNUXyopIHdoaWNoIG11c3QgYmUgcmV0dXJuZWQgdG8gdGhlCisgKiB1bmRlcmx5aW5nIGxheWVyLgorICovCitzdGF0aWMgaW5saW5lIGludAordGNmX2V4dHNfZXhlYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGNmX2V4dHMgKmV4dHMsCisJICAgICAgIHN0cnVjdCB0Y2ZfcmVzdWx0ICpyZXMpCit7CisjaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUCisJaWYgKGV4dHMtPmFjdGlvbikKKwkJcmV0dXJuIHRjZl9hY3Rpb25fZXhlYyhza2IsIGV4dHMtPmFjdGlvbiwgcmVzKTsKKyNlbGlmIGRlZmluZWQgQ09ORklHX05FVF9DTFNfUE9MSUNFCisJaWYgKGV4dHMtPnBvbGljZSkKKwkJcmV0dXJuIHRjZl9wb2xpY2Uoc2tiLCBleHRzLT5wb2xpY2UpOworI2VuZGlmCisKKwlyZXR1cm4gMDsKK30KKworZXh0ZXJuIGludCB0Y2ZfZXh0c192YWxpZGF0ZShzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgc3RydWN0IHJ0YXR0ciAqKnRiLAorCSAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBydGF0dHIgKnJhdGVfdGx2LCBzdHJ1Y3QgdGNmX2V4dHMgKmV4dHMsCisJICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRjZl9leHRfbWFwICptYXApOworZXh0ZXJuIHZvaWQgdGNmX2V4dHNfZGVzdHJveShzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgc3RydWN0IHRjZl9leHRzICpleHRzKTsKK2V4dGVybiB2b2lkIHRjZl9leHRzX2NoYW5nZShzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgc3RydWN0IHRjZl9leHRzICpkc3QsCisJICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRjZl9leHRzICpzcmMpOworZXh0ZXJuIGludCB0Y2ZfZXh0c19kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0Y2ZfZXh0cyAqZXh0cywKKwkgICAgICAgICAgICAgICAgIHN0cnVjdCB0Y2ZfZXh0X21hcCAqbWFwKTsKK2V4dGVybiBpbnQgdGNmX2V4dHNfZHVtcF9zdGF0cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGNmX2V4dHMgKmV4dHMsCisJICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGNmX2V4dF9tYXAgKm1hcCk7CisKKy8qKgorICogc3RydWN0IHRjZl9wa3RfaW5mbyAtIHBhY2tldCBpbmZvcm1hdGlvbgorICovCitzdHJ1Y3QgdGNmX3BrdF9pbmZvCit7CisJdW5zaWduZWQgY2hhciAqCQlwdHI7CisJaW50CQkJbmV4dGhkcjsKK307CisKKyNpZmRlZiBDT05GSUdfTkVUX0VNQVRDSAorCitzdHJ1Y3QgdGNmX2VtYXRjaF9vcHM7CisKKy8qKgorICogc3RydWN0IHRjZl9lbWF0Y2ggLSBleHRlbmRlZCBtYXRjaCAoZW1hdGNoKQorICogCisgKiBAbWF0Y2hpZDogaWRlbnRpZmllciB0byBhbGxvdyB1c2Vyc3BhY2UgdG8gcmVpZGVudGlmeSBhIG1hdGNoCisgKiBAZmxhZ3M6IGZsYWdzIHNwZWNpZnlpbmcgYXR0cmlidXRlcyBhbmQgdGhlIHJlbGF0aW9uIHRvIG90aGVyIG1hdGNoZXMKKyAqIEBvcHM6IHRoZSBvcGVyYXRpb25zIGxvb2t1cCB0YWJsZSBvZiB0aGUgY29ycmVzcG9uZGluZyBlbWF0Y2ggbW9kdWxlCisgKiBAZGF0YWxlbjogbGVuZ3RoIG9mIHRoZSBlbWF0Y2ggc3BlY2lmaWMgY29uZmlndXJhdGlvbiBkYXRhCisgKiBAZGF0YTogZW1hdGNoIHNwZWNpZmljIGRhdGEKKyAqLworc3RydWN0IHRjZl9lbWF0Y2gKK3sKKwlzdHJ1Y3QgdGNmX2VtYXRjaF9vcHMgKiBvcHM7CisJdW5zaWduZWQgbG9uZwkJZGF0YTsKKwl1bnNpZ25lZCBpbnQJCWRhdGFsZW47CisJdTE2CQkJbWF0Y2hpZDsKKwl1MTYJCQlmbGFnczsKK307CisKK3N0YXRpYyBpbmxpbmUgaW50IHRjZl9lbV9pc19jb250YWluZXIoc3RydWN0IHRjZl9lbWF0Y2ggKmVtKQoreworCXJldHVybiAhZW0tPm9wczsKK30KKworc3RhdGljIGlubGluZSBpbnQgdGNmX2VtX2lzX3NpbXBsZShzdHJ1Y3QgdGNmX2VtYXRjaCAqZW0pCit7CisJcmV0dXJuIGVtLT5mbGFncyAmIFRDRl9FTV9TSU1QTEU7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHRjZl9lbV9pc19pbnZlcnRlZChzdHJ1Y3QgdGNmX2VtYXRjaCAqZW0pCit7CisJcmV0dXJuIGVtLT5mbGFncyAmIFRDRl9FTV9JTlZFUlQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHRjZl9lbV9sYXN0X21hdGNoKHN0cnVjdCB0Y2ZfZW1hdGNoICplbSkKK3sKKwlyZXR1cm4gKGVtLT5mbGFncyAmIFRDRl9FTV9SRUxfTUFTSykgPT0gVENGX0VNX1JFTF9FTkQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHRjZl9lbV9lYXJseV9lbmQoc3RydWN0IHRjZl9lbWF0Y2ggKmVtLCBpbnQgcmVzdWx0KQoreworCWlmICh0Y2ZfZW1fbGFzdF9tYXRjaChlbSkpCisJCXJldHVybiAxOworCisJaWYgKHJlc3VsdCA9PSAwICYmIGVtLT5mbGFncyAmIFRDRl9FTV9SRUxfQU5EKQorCQlyZXR1cm4gMTsKKworCWlmIChyZXN1bHQgIT0gMCAmJiBlbS0+ZmxhZ3MgJiBUQ0ZfRU1fUkVMX09SKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCQorLyoqCisgKiBzdHJ1Y3QgdGNmX2VtYXRjaF90cmVlIC0gZW1hdGNoIHRyZWUgaGFuZGxlCisgKgorICogQGhkcjogZW1hdGNoIHRyZWUgaGVhZGVyIHN1cHBsaWVkIGJ5IHVzZXJzcGFjZQorICogQG1hdGNoZXM6IGFycmF5IG9mIGVtYXRjaGVzCisgKi8KK3N0cnVjdCB0Y2ZfZW1hdGNoX3RyZWUKK3sKKwlzdHJ1Y3QgdGNmX2VtYXRjaF90cmVlX2hkciBoZHI7CisJc3RydWN0IHRjZl9lbWF0Y2ggKgltYXRjaGVzOworCQorfTsKKworLyoqCisgKiBzdHJ1Y3QgdGNmX2VtYXRjaF9vcHMgLSBlbWF0Y2ggbW9kdWxlIG9wZXJhdGlvbnMKKyAqIAorICogQGtpbmQ6IGlkZW50aWZpZXIgKGtpbmQpIG9mIHRoaXMgZW1hdGNoIG1vZHVsZQorICogQGRhdGFsZW46IGxlbmd0aCBvZiBleHBlY3RlZCBjb25maWd1cmF0aW9uIGRhdGEgKG9wdGlvbmFsKQorICogQGNoYW5nZTogY2FsbGVkIGR1cmluZyB2YWxpZGF0aW9uIChvcHRpb25hbCkKKyAqIEBtYXRjaDogY2FsbGVkIGR1cmluZyBlbWF0Y2ggdHJlZSBldmFsdWF0aW9uLCBtdXN0IHJldHVybiAxLzAKKyAqIEBkZXN0cm95OiBjYWxsZWQgZHVyaW5nIGRlc3Ryb3lhZ2UgKG9wdGlvbmFsKQorICogQGR1bXA6IGNhbGxlZCBkdXJpbmcgZHVtcGluZyBwcm9jZXNzIChvcHRpb25hbCkKKyAqIEBvd25lcjogb3duZXIsIG11c3QgYmUgc2V0IHRvIFRISVNfTU9EVUxFCisgKiBAbGluazogbGluayB0byBwcmV2aW91cy9uZXh0IGVtYXRjaCBtb2R1bGUgKGludGVybmFsIHVzZSkKKyAqLworc3RydWN0IHRjZl9lbWF0Y2hfb3BzCit7CisJaW50CQkJa2luZDsKKwlpbnQJCQlkYXRhbGVuOworCWludAkJCSgqY2hhbmdlKShzdHJ1Y3QgdGNmX3Byb3RvICosIHZvaWQgKiwKKwkJCQkJICBpbnQsIHN0cnVjdCB0Y2ZfZW1hdGNoICopOworCWludAkJCSgqbWF0Y2gpKHN0cnVjdCBza19idWZmICosIHN0cnVjdCB0Y2ZfZW1hdGNoICosCisJCQkJCSBzdHJ1Y3QgdGNmX3BrdF9pbmZvICopOworCXZvaWQJCQkoKmRlc3Ryb3kpKHN0cnVjdCB0Y2ZfcHJvdG8gKiwKKwkJCQkJICAgc3RydWN0IHRjZl9lbWF0Y2ggKik7CisJaW50CQkJKCpkdW1wKShzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3QgdGNmX2VtYXRjaCAqKTsKKwlzdHJ1Y3QgbW9kdWxlCQkqb3duZXI7CisJc3RydWN0IGxpc3RfaGVhZAlsaW5rOworfTsKKworZXh0ZXJuIGludCB0Y2ZfZW1fcmVnaXN0ZXIoc3RydWN0IHRjZl9lbWF0Y2hfb3BzICopOworZXh0ZXJuIGludCB0Y2ZfZW1fdW5yZWdpc3RlcihzdHJ1Y3QgdGNmX2VtYXRjaF9vcHMgKik7CitleHRlcm4gaW50IHRjZl9lbV90cmVlX3ZhbGlkYXRlKHN0cnVjdCB0Y2ZfcHJvdG8gKiwgc3RydWN0IHJ0YXR0ciAqLAorCQkJCXN0cnVjdCB0Y2ZfZW1hdGNoX3RyZWUgKik7CitleHRlcm4gdm9pZCB0Y2ZfZW1fdHJlZV9kZXN0cm95KHN0cnVjdCB0Y2ZfcHJvdG8gKiwgc3RydWN0IHRjZl9lbWF0Y2hfdHJlZSAqKTsKK2V4dGVybiBpbnQgdGNmX2VtX3RyZWVfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3QgdGNmX2VtYXRjaF90cmVlICosIGludCk7CitleHRlcm4gaW50IF9fdGNmX2VtX3RyZWVfbWF0Y2goc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IHRjZl9lbWF0Y2hfdHJlZSAqLAorCQkJICAgICAgIHN0cnVjdCB0Y2ZfcGt0X2luZm8gKik7CisKKy8qKgorICogdGNmX2VtX3RyZWVfY2hhbmdlIC0gcmVwbGFjZSBlbWF0Y2ggdHJlZSBvZiBhIHJ1bm5pbmcgY2xhc3NpZmllcgorICoKKyAqIEB0cDogY2xhc3NpZmllciBraW5kIGhhbmRsZQorICogQGRzdDogZGVzdGluYXRpb24gZW1hdGNoIHRyZWUgdmFyaWFibGUKKyAqIEBzcmM6IHNvdXJjZSBlbWF0Y2ggdHJlZSAodGVtcG9yYXJ5IHRyZWUgZnJvbSB0Y2ZfZW1fdHJlZV92YWxpZGF0ZSkKKyAqCisgKiBUaGlzIGZ1bmN0aW9ucyByZXBsYWNlcyB0aGUgZW1hdGNoIHRyZWUgaW4gQGRzdCB3aXRoIHRoZSBlbWF0Y2gKKyAqIHRyZWUgaW4gQHNyYy4gVGhlIGNsYXNzaWZpZXIgaW4gY2hhcmdlIG9mIHRoZSBlbWF0Y2ggdHJlZSBtYXkgYmUKKyAqIHJ1bm5pbmcuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB0Y2ZfZW1fdHJlZV9jaGFuZ2Uoc3RydWN0IHRjZl9wcm90byAqdHAsCisJCQkJICAgICAgc3RydWN0IHRjZl9lbWF0Y2hfdHJlZSAqZHN0LAorCQkJCSAgICAgIHN0cnVjdCB0Y2ZfZW1hdGNoX3RyZWUgKnNyYykKK3sKKwl0Y2ZfdHJlZV9sb2NrKHRwKTsKKwltZW1jcHkoZHN0LCBzcmMsIHNpemVvZigqZHN0KSk7CisJdGNmX3RyZWVfdW5sb2NrKHRwKTsKK30KKworLyoqCisgKiB0Y2ZfZW1fdHJlZV9tYXRjaCAtIGV2YXVsYXRlIGFuIGVtYXRjaCB0cmVlCisgKgorICogQHNrYjogc29ja2V0IGJ1ZmZlciBvZiB0aGUgcGFja2V0IGluIHF1ZXN0aW9uCisgKiBAdHJlZTogZW1hdGNoIHRyZWUgdG8gYmUgdXNlZCBmb3IgZXZhbHVhdGlvbgorICogQGluZm86IHBhY2tldCBpbmZvcm1hdGlvbiBleGFtaW5lZCBieSBjbGFzc2lmaWVyCisgKgorICogVGhpcyBmdW5jdGlvbiBtYXRjaGVzIEBza2IgYWdhaW5zdCB0aGUgZW1hdGNoIHRyZWUgaW4gQHRyZWUgYnkgZ29pbmcKKyAqIHRocm91Z2ggYWxsIGVtYXRjaGVzIHJlc3BlY3RpbmcgdGhlaXIgbG9naWMgcmVsYXRpb25zIHJldHVybmluZworICogYXMgc29vbiBhcyB0aGUgcmVzdWx0IGlzIG9idmlvdXMuCisgKgorICogUmV0dXJucyAxIGlmIHRoZSBlbWF0Y2ggdHJlZSBhcy1vbmUgbWF0Y2hlcywgbm8gZW1hdGNoZXMgYXJlIGNvbmZpZ3VyZWQKKyAqIG9yIGVtYXRjaCBpcyBub3QgZW5hYmxlZCBpbiB0aGUga2VybmVsLCBvdGhlcndpc2UgMCBpcyByZXR1cm5lZC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgdGNmX2VtX3RyZWVfbWF0Y2goc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgc3RydWN0IHRjZl9lbWF0Y2hfdHJlZSAqdHJlZSwKKwkJCQkgICAgc3RydWN0IHRjZl9wa3RfaW5mbyAqaW5mbykKK3sKKwlpZiAodHJlZS0+aGRyLm5tYXRjaGVzKQorCQlyZXR1cm4gX190Y2ZfZW1fdHJlZV9tYXRjaChza2IsIHRyZWUsIGluZm8pOworCWVsc2UKKwkJcmV0dXJuIDE7Cit9CisKKyNlbHNlIC8qIENPTkZJR19ORVRfRU1BVENIICovCisKK3N0cnVjdCB0Y2ZfZW1hdGNoX3RyZWUKK3sKK307CisKKyNkZWZpbmUgdGNmX2VtX3RyZWVfdmFsaWRhdGUodHAsIHRiLCB0KSAoKHZvaWQpKHQpLCAwKQorI2RlZmluZSB0Y2ZfZW1fdHJlZV9kZXN0cm95KHRwLCB0KSBkbyB7ICh2b2lkKSh0KTsgfSB3aGlsZSgwKQorI2RlZmluZSB0Y2ZfZW1fdHJlZV9kdW1wKHNrYiwgdCwgdGx2KSAoMCkKKyNkZWZpbmUgdGNmX2VtX3RyZWVfY2hhbmdlKHRwLCBkc3QsIHNyYykgZG8geyB9IHdoaWxlKDApCisjZGVmaW5lIHRjZl9lbV90cmVlX21hdGNoKHNrYiwgdCwgaW5mbykgKCh2b2lkKShpbmZvKSwgMSkKKworI2VuZGlmIC8qIENPTkZJR19ORVRfRU1BVENIICovCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciAqIHRjZl9nZXRfYmFzZV9wdHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxheWVyKQoreworCXN3aXRjaCAobGF5ZXIpIHsKKwkJY2FzZSBUQ0ZfTEFZRVJfTElOSzoKKwkJCXJldHVybiBza2ItPmRhdGE7CisJCWNhc2UgVENGX0xBWUVSX05FVFdPUks6CisJCQlyZXR1cm4gc2tiLT5uaC5yYXc7CisJCWNhc2UgVENGX0xBWUVSX1RSQU5TUE9SVDoKKwkJCXJldHVybiBza2ItPmgucmF3OworCX0KKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW5saW5lIGludCB0Y2ZfdmFsaWRfb2Zmc2V0KHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGNoYXIgKnB0ciwKKwkJCQkgICBpbnQgbGVuKQoreworCXJldHVybiB1bmxpa2VseSgocHRyICsgbGVuKSA8IHNrYi0+dGFpbCAmJiBwdHIgPiBza2ItPmhlYWQpOworfQorCisjaWZkZWYgQ09ORklHX05FVF9DTFNfSU5ECitzdGF0aWMgaW5saW5lIGludAordGNmX2NoYW5nZV9pbmRldihzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgY2hhciAqaW5kZXYsIHN0cnVjdCBydGF0dHIgKmluZGV2X3RsdikKK3sKKwlpZiAocnRhdHRyX3N0cmxjcHkoaW5kZXYsIGluZGV2X3RsdiwgSUZOQU1TSVopID49IElGTkFNU0laKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3RjZl9tYXRjaF9pbmRldihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjaGFyICppbmRldikKK3sKKwlpZiAoMCAhPSBpbmRldlswXSkgeworCQlpZiAgKE5VTEwgPT0gc2tiLT5pbnB1dF9kZXYpCisJCQlyZXR1cm4gMDsKKwkJZWxzZSBpZiAoMCAhPSBzdHJjbXAoaW5kZXYsIHNrYi0+aW5wdXRfZGV2LT5uYW1lKSkKKwkJCXJldHVybiAwOworCX0KKworCXJldHVybiAxOworfQorI2VuZGlmIC8qIENPTkZJR19ORVRfQ0xTX0lORCAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3BrdF9zY2hlZC5oIGIvaW5jbHVkZS9uZXQvcGt0X3NjaGVkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc0OTZlMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L3BrdF9zY2hlZC5oCkBAIC0wLDAgKzEsMjQ5IEBACisjaWZuZGVmIF9fTkVUX1BLVF9TQ0hFRF9ICisjZGVmaW5lIF9fTkVUX1BLVF9TQ0hFRF9ICisKKyNpbmNsdWRlIDxuZXQvc2NoX2dlbmVyaWMuaD4KKworc3RydWN0IHFkaXNjX3dhbGtlcgoreworCWludAlzdG9wOworCWludAlza2lwOworCWludAljb3VudDsKKwlpbnQJKCpmbikoc3RydWN0IFFkaXNjICosIHVuc2lnbmVkIGxvbmcgY2wsIHN0cnVjdCBxZGlzY193YWxrZXIgKik7Cit9OworCitleHRlcm4gcndsb2NrX3QgcWRpc2NfdHJlZV9sb2NrOworCisjZGVmaW5lCVFESVNDX0FMSUdOCQkzMgorI2RlZmluZQlRRElTQ19BTElHTl9DT05TVAkoUURJU0NfQUxJR04gLSAxKQorCitzdGF0aWMgaW5saW5lIHZvaWQgKnFkaXNjX3ByaXYoc3RydWN0IFFkaXNjICpxKQoreworCXJldHVybiAoY2hhciAqKXEgKyAoKHNpemVvZihzdHJ1Y3QgUWRpc2MpICsgUURJU0NfQUxJR05fQ09OU1QpCisJCQkgICAgICAmIH5RRElTQ19BTElHTl9DT05TVCk7Cit9CisKKy8qIAorICAgVGltZXIgcmVzb2x1dGlvbiBNVVNUIEJFIDwgMTAlIG9mIG1pbl9zY2hlZHVsYWJsZV9wYWNrZXRfc2l6ZS9iYW5kd2lkdGgKKyAgIAorICAgTm9ybWFsIElQIHBhY2tldCBzaXplIH4gNTEyYnl0ZSwgaGVuY2U6CisKKyAgIDAuNUtieXRlLzFNYnl0ZS9zZWMgPSAwLjVtc2VjLCBzbyB0aGF0IHdlIG5lZWQgNTB1c2VjIHRpbWVyIGZvcgorICAgMTBNYml0IGV0aGVybmV0LgorCisgICAxMG1zZWMgcmVzb2x1dGlvbiAtPiA8NTBLYml0L3NlYy4KKyAgIAorICAgVGhlIHJlc3VsdDogWzM0XTg2IGlzIG5vdCBnb29kIGNob2ljZSBmb3IgUW9TIHJvdXRlciA6LSgKKworICAgVGhlIHRoaW5ncyBhcmUgbm90IHNvIGJhZCwgYmVjYXVzZSB3ZSBtYXkgdXNlIGFydGlmaWNhbAorICAgY2xvY2sgZXZhbHVhdGVkIGJ5IGludGVncmF0aW9uIG9mIG5ldHdvcmsgZGF0YSBmbG93CisgICBpbiB0aGUgbW9zdCBjcml0aWNhbCBwbGFjZXMuCisKKyAgIE5vdGU6IHdlIGRvIG5vdCB1c2UgZmFzdGdldHRpbWVvZmRheS4KKyAgIFRoZSByZWFzb24gaXMgdGhhdCwgd2hlbiBpdCBpcyBub3QgdGhlIHNhbWUgdGhpbmcgYXMKKyAgIGdldHRpbWVvZmRheSwgaXQgcmV0dXJucyBpbnZhbGlkIHRpbWVzdGFtcCwgd2hpY2ggaXMKKyAgIG5vdCB1cGRhdGVkLCB3aGVuIG5ldF9iaCBpcyBhY3RpdmUuCisgKi8KKworLyogR2VuZXJhbCBub3RlIGFib3V0IGludGVybmFsIGNsb2NrLgorCisgICBBbnkgY2xvY2sgc291cmNlIHJldHVybnMgdGltZSBpbnRlcnZhbHMsIG1lYXN1cmVkIGluIHVuaXRzCisgICBjbG9zZSB0byAxdXNlYy4gV2l0aCBzb3VyY2UgQ09ORklHX05FVF9TQ0hfQ0xLX0dFVFRJTUVPRkRBWSBpdCBpcyBwcmVjaXNlbHkKKyAgIG1pY3Jvc2Vjb25kcywgb3RoZXJ3aXNlIHNvbWV0aGluZyBjbG9zZSBidXQgZGlmZmVyZW50IGNob3NlbiB0byBtaW5pbWl6ZQorICAgYXJpdGhtZXRpYyBjb3N0LiBSYXRpbyB1c2VjL2ludGVybmFsIHVudGlzIGluIGZvcm0gbm9taW5hdG9yL2Rlbm9taW5hdG9yCisgICBtYXkgYmUgcmVhZCBmcm9tIC9wcm9jL25ldC9wc2NoZWQuCisgKi8KKworCisjaWZkZWYgQ09ORklHX05FVF9TQ0hfQ0xLX0dFVFRJTUVPRkRBWQorCit0eXBlZGVmIHN0cnVjdCB0aW1ldmFsCXBzY2hlZF90aW1lX3Q7Cit0eXBlZGVmIGxvbmcJCXBzY2hlZF90ZGlmZl90OworCisjZGVmaW5lIFBTQ0hFRF9HRVRfVElNRShzdGFtcCkgZG9fZ2V0dGltZW9mZGF5KCYoc3RhbXApKQorI2RlZmluZSBQU0NIRURfVVMySklGRklFKHVzZWNzKSAoKCh1c2VjcykrKDEwMDAwMDAvSFotMSkpLygxMDAwMDAwL0haKSkKKyNkZWZpbmUgUFNDSEVEX0pJRkZJRTJVUyhkZWxheSkgKChkZWxheSkqKDEwMDAwMDAvSFopKQorCisjZWxzZSAvKiAhQ09ORklHX05FVF9TQ0hfQ0xLX0dFVFRJTUVPRkRBWSAqLworCit0eXBlZGVmIHU2NAlwc2NoZWRfdGltZV90OwordHlwZWRlZiBsb25nCXBzY2hlZF90ZGlmZl90OworCisjaWZkZWYgQ09ORklHX05FVF9TQ0hfQ0xLX0pJRkZJRVMKKworI2lmIEhaIDwgOTYKKyNkZWZpbmUgUFNDSEVEX0pTQ0FMRSAxNAorI2VsaWYgSFogPj0gOTYgJiYgSFogPCAxOTIKKyNkZWZpbmUgUFNDSEVEX0pTQ0FMRSAxMworI2VsaWYgSFogPj0gMTkyICYmIEhaIDwgMzg0CisjZGVmaW5lIFBTQ0hFRF9KU0NBTEUgMTIKKyNlbGlmIEhaID49IDM4NCAmJiBIWiA8IDc2OAorI2RlZmluZSBQU0NIRURfSlNDQUxFIDExCisjZWxpZiBIWiA+PSA3NjgKKyNkZWZpbmUgUFNDSEVEX0pTQ0FMRSAxMAorI2VuZGlmCisKKyNkZWZpbmUgUFNDSEVEX0dFVF9USU1FKHN0YW1wKSAoKHN0YW1wKSA9IChnZXRfamlmZmllc182NCgpPDxQU0NIRURfSlNDQUxFKSkKKyNkZWZpbmUgUFNDSEVEX1VTMkpJRkZJRShkZWxheSkgKCgoZGVsYXkpKygxPDxQU0NIRURfSlNDQUxFKS0xKT4+UFNDSEVEX0pTQ0FMRSkKKyNkZWZpbmUgUFNDSEVEX0pJRkZJRTJVUyhkZWxheSkgKChkZWxheSk8PFBTQ0hFRF9KU0NBTEUpCisKKyNlbmRpZiAvKiBDT05GSUdfTkVUX1NDSF9DTEtfSklGRklFUyAqLworI2lmZGVmIENPTkZJR19ORVRfU0NIX0NMS19DUFUKKyNpbmNsdWRlIDxhc20vdGltZXguaD4KKworZXh0ZXJuIHBzY2hlZF90ZGlmZl90IHBzY2hlZF9jbG9ja19wZXJfaHo7CitleHRlcm4gaW50IHBzY2hlZF9jbG9ja19zY2FsZTsKK2V4dGVybiBwc2NoZWRfdGltZV90IHBzY2hlZF90aW1lX2Jhc2U7CitleHRlcm4gY3ljbGVzX3QgcHNjaGVkX3RpbWVfbWFyazsKKworI2RlZmluZSBQU0NIRURfR0VUX1RJTUUoc3RhbXApCQkJCQkJXAorZG8gewkJCQkJCQkJCVwKKwljeWNsZXNfdCBjdXIgPSBnZXRfY3ljbGVzKCk7CQkJCQlcCisJaWYgKHNpemVvZihjeWNsZXNfdCkgPT0gc2l6ZW9mKHUzMikpIHsJCQkJXAorCQlpZiAoY3VyIDw9IHBzY2hlZF90aW1lX21hcmspCQkJCVwKKwkJCXBzY2hlZF90aW1lX2Jhc2UgKz0gMHgxMDAwMDAwMDBVTEw7CQlcCisJCXBzY2hlZF90aW1lX21hcmsgPSBjdXI7CQkJCQlcCisJCShzdGFtcCkgPSAocHNjaGVkX3RpbWVfYmFzZSArIGN1cik+PnBzY2hlZF9jbG9ja19zY2FsZTsJXAorCX0gZWxzZSB7CQkJCQkJCVwKKwkJKHN0YW1wKSA9IGN1cj4+cHNjaGVkX2Nsb2NrX3NjYWxlOwkJCVwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorI2RlZmluZSBQU0NIRURfVVMySklGRklFKGRlbGF5KSAoKChkZWxheSkrcHNjaGVkX2Nsb2NrX3Blcl9oei0xKS9wc2NoZWRfY2xvY2tfcGVyX2h6KQorI2RlZmluZSBQU0NIRURfSklGRklFMlVTKGRlbGF5KSAoKGRlbGF5KSpwc2NoZWRfY2xvY2tfcGVyX2h6KQorCisjZW5kaWYgLyogQ09ORklHX05FVF9TQ0hfQ0xLX0NQVSAqLworCisjZW5kaWYgLyogIUNPTkZJR19ORVRfU0NIX0NMS19HRVRUSU1FT0ZEQVkgKi8KKworI2lmZGVmIENPTkZJR19ORVRfU0NIX0NMS19HRVRUSU1FT0ZEQVkKKyNkZWZpbmUgUFNDSEVEX1RESUZGKHR2MSwgdHYyKSBcCisoeyBcCisJICAgaW50IF9fZGVsdGFfc2VjID0gKHR2MSkudHZfc2VjIC0gKHR2MikudHZfc2VjOyBcCisJICAgaW50IF9fZGVsdGEgPSAodHYxKS50dl91c2VjIC0gKHR2MikudHZfdXNlYzsgXAorCSAgIGlmIChfX2RlbHRhX3NlYykgeyBcCisJICAgICAgICAgICBzd2l0Y2ggKF9fZGVsdGFfc2VjKSB7IFwKKwkJICAgZGVmYXVsdDogXAorCQkJICAgX19kZWx0YSA9IDA7IFwKKwkJICAgY2FzZSAyOiBcCisJCQkgICBfX2RlbHRhICs9IDEwMDAwMDA7IFwKKwkJICAgY2FzZSAxOiBcCisJCQkgICBfX2RlbHRhICs9IDEwMDAwMDA7IFwKKwkgICAgICAgICAgIH0gXAorCSAgIH0gXAorCSAgIF9fZGVsdGE7IFwKK30pCisKK3N0YXRpYyBpbmxpbmUgaW50Citwc2NoZWRfdG9kX2RpZmYoaW50IGRlbHRhX3NlYywgaW50IGJvdW5kKQoreworCWludCBkZWx0YTsKKworCWlmIChib3VuZCA8PSAxMDAwMDAwIHx8IGRlbHRhX3NlYyA+ICgweDdGRkZGRkZGLzEwMDAwMDApLTEpCisJCXJldHVybiBib3VuZDsKKwlkZWx0YSA9IGRlbHRhX3NlYyAqIDEwMDAwMDA7CisJaWYgKGRlbHRhID4gYm91bmQpCisJCWRlbHRhID0gYm91bmQ7CisJcmV0dXJuIGRlbHRhOworfQorCisjZGVmaW5lIFBTQ0hFRF9URElGRl9TQUZFKHR2MSwgdHYyLCBib3VuZCkgXAorKHsgXAorCSAgIGludCBfX2RlbHRhX3NlYyA9ICh0djEpLnR2X3NlYyAtICh0djIpLnR2X3NlYzsgXAorCSAgIGludCBfX2RlbHRhID0gKHR2MSkudHZfdXNlYyAtICh0djIpLnR2X3VzZWM7IFwKKwkgICBzd2l0Y2ggKF9fZGVsdGFfc2VjKSB7IFwKKwkgICBkZWZhdWx0OiBcCisJCSAgIF9fZGVsdGEgPSBwc2NoZWRfdG9kX2RpZmYoX19kZWx0YV9zZWMsIGJvdW5kKTsgIGJyZWFrOyBcCisJICAgY2FzZSAyOiBcCisJCSAgIF9fZGVsdGEgKz0gMTAwMDAwMDsgXAorCSAgIGNhc2UgMTogXAorCQkgICBfX2RlbHRhICs9IDEwMDAwMDA7IFwKKwkgICBjYXNlIDA6IDsgXAorCSAgIH0gXAorCSAgIF9fZGVsdGE7IFwKK30pCisKKyNkZWZpbmUgUFNDSEVEX1RMRVNTKHR2MSwgdHYyKSAoKCh0djEpLnR2X3VzZWMgPCAodHYyKS50dl91c2VjICYmIFwKKwkJCQkodHYxKS50dl9zZWMgPD0gKHR2MikudHZfc2VjKSB8fCBcCisJCQkJICh0djEpLnR2X3NlYyA8ICh0djIpLnR2X3NlYykKKworI2RlZmluZSBQU0NIRURfVEFERDIodHYsIGRlbHRhLCB0dl9yZXMpIFwKKyh7IFwKKwkgICBpbnQgX19kZWx0YSA9ICh0dikudHZfdXNlYyArIChkZWx0YSk7IFwKKwkgICAodHZfcmVzKS50dl9zZWMgPSAodHYpLnR2X3NlYzsgXAorCSAgIGlmIChfX2RlbHRhID4gMTAwMDAwMCkgeyAodHZfcmVzKS50dl9zZWMrKzsgX19kZWx0YSAtPSAxMDAwMDAwOyB9IFwKKwkgICAodHZfcmVzKS50dl91c2VjID0gX19kZWx0YTsgXAorfSkKKworI2RlZmluZSBQU0NIRURfVEFERCh0diwgZGVsdGEpIFwKKyh7IFwKKwkgICAodHYpLnR2X3VzZWMgKz0gKGRlbHRhKTsgXAorCSAgIGlmICgodHYpLnR2X3VzZWMgPiAxMDAwMDAwKSB7ICh0dikudHZfc2VjKys7IFwKKwkJICh0dikudHZfdXNlYyAtPSAxMDAwMDAwOyB9IFwKK30pCisKKy8qIFNldC9jaGVjayB0aGF0IHRpbWUgaXMgaW4gdGhlICJwYXN0IHBlcmZlY3QiOworICAgaXQgZGVwZW5kcyBvbiBjb25jcmV0ZSByZXByZXNlbnRhdGlvbiBvZiBzeXN0ZW0gdGltZQorICovCisKKyNkZWZpbmUgUFNDSEVEX1NFVF9QQVNUUEVSRkVDVCh0KQkoKHQpLnR2X3NlYyA9IDApCisjZGVmaW5lIFBTQ0hFRF9JU19QQVNUUEVSRkVDVCh0KQkoKHQpLnR2X3NlYyA9PSAwKQorCisjZGVmaW5lCVBTQ0hFRF9BVURJVF9URElGRih0KSAoeyBpZiAoKHQpID4gMjAwMDAwMCkgKHQpID0gMjAwMDAwMDsgfSkKKworI2Vsc2UgLyogIUNPTkZJR19ORVRfU0NIX0NMS19HRVRUSU1FT0ZEQVkgKi8KKworI2RlZmluZSBQU0NIRURfVERJRkYodHYxLCB0djIpIChsb25nKSgodHYxKSAtICh0djIpKQorI2RlZmluZSBQU0NIRURfVERJRkZfU0FGRSh0djEsIHR2MiwgYm91bmQpIFwKKwltaW5fdChsb25nIGxvbmcsICh0djEpIC0gKHR2MiksIGJvdW5kKQorCisKKyNkZWZpbmUgUFNDSEVEX1RMRVNTKHR2MSwgdHYyKSAoKHR2MSkgPCAodHYyKSkKKyNkZWZpbmUgUFNDSEVEX1RBREQyKHR2LCBkZWx0YSwgdHZfcmVzKSAoKHR2X3JlcykgPSAodHYpICsgKGRlbHRhKSkKKyNkZWZpbmUgUFNDSEVEX1RBREQodHYsIGRlbHRhKSAoKHR2KSArPSAoZGVsdGEpKQorI2RlZmluZSBQU0NIRURfU0VUX1BBU1RQRVJGRUNUKHQpCSgodCkgPSAwKQorI2RlZmluZSBQU0NIRURfSVNfUEFTVFBFUkZFQ1QodCkJKCh0KSA9PSAwKQorI2RlZmluZQlQU0NIRURfQVVESVRfVERJRkYodCkKKworI2VuZGlmIC8qICFDT05GSUdfTkVUX1NDSF9DTEtfR0VUVElNRU9GREFZICovCisKK2V4dGVybiBzdHJ1Y3QgUWRpc2Mgbm9vcF9xZGlzYzsKK2V4dGVybiBzdHJ1Y3QgUWRpc2Nfb3BzIG5vb3BfcWRpc2Nfb3BzOworZXh0ZXJuIHN0cnVjdCBRZGlzY19vcHMgcGZpZm9fcWRpc2Nfb3BzOworZXh0ZXJuIHN0cnVjdCBRZGlzY19vcHMgYmZpZm9fcWRpc2Nfb3BzOworCitleHRlcm4gaW50IHJlZ2lzdGVyX3FkaXNjKHN0cnVjdCBRZGlzY19vcHMgKnFvcHMpOworZXh0ZXJuIGludCB1bnJlZ2lzdGVyX3FkaXNjKHN0cnVjdCBRZGlzY19vcHMgKnFvcHMpOworZXh0ZXJuIHN0cnVjdCBRZGlzYyAqcWRpc2NfbG9va3VwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBoYW5kbGUpOworZXh0ZXJuIHN0cnVjdCBRZGlzYyAqcWRpc2NfbG9va3VwX2NsYXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBoYW5kbGUpOworZXh0ZXJuIHZvaWQgZGV2X2luaXRfc2NoZWR1bGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQgZGV2X3NodXRkb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQgZGV2X2FjdGl2YXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQgZGV2X2RlYWN0aXZhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitleHRlcm4gdm9pZCBxZGlzY19yZXNldChzdHJ1Y3QgUWRpc2MgKnFkaXNjKTsKK2V4dGVybiB2b2lkIHFkaXNjX2Rlc3Ryb3koc3RydWN0IFFkaXNjICpxZGlzYyk7CitleHRlcm4gc3RydWN0IFFkaXNjICogcWRpc2NfY3JlYXRlX2RmbHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwlzdHJ1Y3QgUWRpc2Nfb3BzICpvcHMpOworZXh0ZXJuIHN0cnVjdCBxZGlzY19yYXRlX3RhYmxlICpxZGlzY19nZXRfcnRhYihzdHJ1Y3QgdGNfcmF0ZXNwZWMgKnIsCisJCXN0cnVjdCBydGF0dHIgKnRhYik7CitleHRlcm4gdm9pZCBxZGlzY19wdXRfcnRhYihzdHJ1Y3QgcWRpc2NfcmF0ZV90YWJsZSAqdGFiKTsKKworZXh0ZXJuIGludCBxZGlzY19yZXN0YXJ0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworCitzdGF0aWMgaW5saW5lIHZvaWQgcWRpc2NfcnVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJd2hpbGUgKCFuZXRpZl9xdWV1ZV9zdG9wcGVkKGRldikgJiYgcWRpc2NfcmVzdGFydChkZXYpIDwgMCkKKwkJLyogTk9USElORyAqLzsKK30KKworZXh0ZXJuIGludCB0Y19jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCwKKwlzdHJ1Y3QgdGNmX3Jlc3VsdCAqcmVzKTsKKworLyogQ2FsY3VsYXRlIG1heGltYWwgc2l6ZSBvZiBwYWNrZXQgc2VlbiBieSBoYXJkX3N0YXJ0X3htaXQKKyAgIHJvdXRpbmUgb2YgdGhpcyBkZXZpY2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgcHNjaGVkX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXVuc2lnbmVkIG10dSA9IGRldi0+bXR1OworCXJldHVybiBkZXYtPmhhcmRfaGVhZGVyID8gbXR1ICsgZGV2LT5oYXJkX2hlYWRlcl9sZW4gOiBtdHU7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcHJvdG9jb2wuaCBiL2luY2x1ZGUvbmV0L3Byb3RvY29sLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU3NjkxZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L3Byb3RvY29sLmgKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAqIElORVQJCUFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBUQ1AvSVAgcHJvdG9jb2wgc3VpdGUgZm9yIHRoZSBMSU5VWAorICoJCW9wZXJhdGluZyBzeXN0ZW0uICBJTkVUIGlzIGltcGxlbWVudGVkIHVzaW5nIHRoZSAgQlNEIFNvY2tldAorICoJCWludGVyZmFjZSBhcyB0aGUgbWVhbnMgb2YgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSB1c2VyIGxldmVsLgorICoKKyAqCQlEZWZpbml0aW9ucyBmb3IgdGhlIHByb3RvY29sIGRpc3BhdGNoZXIuCisgKgorICogVmVyc2lvbjoJQCgjKXByb3RvY29sLmgJMS4wLjIJMDUvMDcvOTMKKyAqCisgKiBBdXRob3I6CUZyZWQgTi4gdmFuIEtlbXBlbiwgPHdhbHRqZUB1V2FsdC5OTC5NdWduZXQuT1JHPgorICoKKyAqCQlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgkJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqCQlhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqCQkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqCUNoYW5nZXM6CisgKgkJQWxhbiBDb3gJOglBZGRlZCBhIG5hbWUgZmllbGQgYW5kIGEgZnJhZyBoYW5kbGVyCisgKgkJCQkJZmllbGQgZm9yIGxhdGVyLgorICoJCUFsYW4gQ294CToJQ2xlYW5lZCB1cCwgYW5kIHNvcnRlZCB0eXBlcy4KKyAqCQlQZWRybyBSb3F1ZQk6CWluZXQ2IHByb3RvY29scworICovCisgCisjaWZuZGVmIF9QUk9UT0NPTF9ICisjZGVmaW5lIF9QUk9UT0NPTF9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbjYuaD4KKyNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkIChDT05GSUdfSVBWNl9NT0RVTEUpCisjaW5jbHVkZSA8bGludXgvaXB2Ni5oPgorI2VuZGlmCisKKyNkZWZpbmUgTUFYX0lORVRfUFJPVE9TCTI1NgkJLyogTXVzdCBiZSBhIHBvd2VyIG9mIDIJCSovCisKKworLyogVGhpcyBpcyB1c2VkIHRvIHJlZ2lzdGVyIHByb3RvY29scy4gKi8KK3N0cnVjdCBuZXRfcHJvdG9jb2wgeworCWludAkJCSgqaGFuZGxlcikoc3RydWN0IHNrX2J1ZmYgKnNrYik7CisJdm9pZAkJCSgqZXJyX2hhbmRsZXIpKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBpbmZvKTsKKwlpbnQJCQlub19wb2xpY3k7Cit9OworCisjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZCAoQ09ORklHX0lQVjZfTU9EVUxFKQorc3RydWN0IGluZXQ2X3Byb3RvY29sIAoreworCWludAkoKmhhbmRsZXIpKHN0cnVjdCBza19idWZmICoqc2tiLCB1bnNpZ25lZCBpbnQgKm5ob2ZmcCk7CisKKwl2b2lkCSgqZXJyX2hhbmRsZXIpKHN0cnVjdCBza19idWZmICpza2IsCisJCQkgICAgICAgc3RydWN0IGluZXQ2X3NrYl9wYXJtICpvcHQsCisJCQkgICAgICAgaW50IHR5cGUsIGludCBjb2RlLCBpbnQgb2Zmc2V0LAorCQkJICAgICAgIF9fdTMyIGluZm8pOworCXVuc2lnbmVkIGludAlmbGFnczsJLyogSU5FVDZfUFJPVE9feHh4ICovCit9OworCisjZGVmaW5lIElORVQ2X1BST1RPX05PUE9MSUNZCTB4MQorI2RlZmluZSBJTkVUNl9QUk9UT19GSU5BTAkweDIKKyNlbmRpZgorCisvKiBUaGlzIGlzIHVzZWQgdG8gcmVnaXN0ZXIgc29ja2V0IGludGVyZmFjZXMgZm9yIElQIHByb3RvY29scy4gICovCitzdHJ1Y3QgaW5ldF9wcm90b3N3IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisKKyAgICAgICAgLyogVGhlc2UgdHdvIGZpZWxkcyBmb3JtIHRoZSBsb29rdXAga2V5LiAgKi8KKwl1bnNpZ25lZCBzaG9ydAkgdHlwZTsJICAgLyogVGhpcyBpcyB0aGUgMm5kIGFyZ3VtZW50IHRvIHNvY2tldCgyKS4gKi8KKwlpbnQJCSBwcm90b2NvbDsgLyogVGhpcyBpcyB0aGUgTDQgcHJvdG9jb2wgbnVtYmVyLiAgKi8KKworCXN0cnVjdCBwcm90bwkgKnByb3Q7CisJc3RydWN0IHByb3RvX29wcyAqb3BzOworICAKKwlpbnQgICAgICAgICAgICAgIGNhcGFiaWxpdHk7IC8qIFdoaWNoIChpZiBhbnkpIGNhcGFiaWxpdHkgZG8KKwkJCQkgICAgICAqIHdlIG5lZWQgdG8gdXNlIHRoaXMgc29ja2V0CisJCQkJICAgICAgKiBpbnRlcmZhY2U/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJY2hhciAgICAgICAgICAgICBub19jaGVjazsgICAvKiBjaGVja3N1bSBvbiByY3YveG1pdC9ub25lPyAqLworCXVuc2lnbmVkIGNoYXIJIGZsYWdzOyAgICAgIC8qIFNlZSBJTkVUX1BST1RPU1dfKiBiZWxvdy4gICovCit9OworI2RlZmluZSBJTkVUX1BST1RPU1dfUkVVU0UgMHgwMQkgICAgIC8qIEFyZSBwb3J0cyBhdXRvbWF0aWNhbGx5IHJldXNhYmxlPyAqLworI2RlZmluZSBJTkVUX1BST1RPU1dfUEVSTUFORU5UIDB4MDIgIC8qIFBlcm1hbmVudCBwcm90b2NvbHMgYXJlIHVucmVtb3ZhYmxlLiAqLworCitleHRlcm4gc3RydWN0IG5ldF9wcm90b2NvbCAqaW5ldF9wcm90b2NvbF9iYXNlOworZXh0ZXJuIHN0cnVjdCBuZXRfcHJvdG9jb2wgKmluZXRfcHJvdG9zW01BWF9JTkVUX1BST1RPU107CisKKyNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkIChDT05GSUdfSVBWNl9NT0RVTEUpCitleHRlcm4gc3RydWN0IGluZXQ2X3Byb3RvY29sICppbmV0Nl9wcm90b3NbTUFYX0lORVRfUFJPVE9TXTsKKyNlbmRpZgorCitleHRlcm4gaW50CWluZXRfYWRkX3Byb3RvY29sKHN0cnVjdCBuZXRfcHJvdG9jb2wgKnByb3QsIHVuc2lnbmVkIGNoYXIgbnVtKTsKK2V4dGVybiBpbnQJaW5ldF9kZWxfcHJvdG9jb2woc3RydWN0IG5ldF9wcm90b2NvbCAqcHJvdCwgdW5zaWduZWQgY2hhciBudW0pOworZXh0ZXJuIHZvaWQJaW5ldF9yZWdpc3Rlcl9wcm90b3N3KHN0cnVjdCBpbmV0X3Byb3Rvc3cgKnApOworZXh0ZXJuIHZvaWQJaW5ldF91bnJlZ2lzdGVyX3Byb3Rvc3coc3RydWN0IGluZXRfcHJvdG9zdyAqcCk7CisKKyNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkIChDT05GSUdfSVBWNl9NT0RVTEUpCitleHRlcm4gaW50CWluZXQ2X2FkZF9wcm90b2NvbChzdHJ1Y3QgaW5ldDZfcHJvdG9jb2wgKnByb3QsIHVuc2lnbmVkIGNoYXIgbnVtKTsKK2V4dGVybiBpbnQJaW5ldDZfZGVsX3Byb3RvY29sKHN0cnVjdCBpbmV0Nl9wcm90b2NvbCAqcHJvdCwgdW5zaWduZWQgY2hhciBudW0pOworZXh0ZXJuIHZvaWQJaW5ldDZfcmVnaXN0ZXJfcHJvdG9zdyhzdHJ1Y3QgaW5ldF9wcm90b3N3ICpwKTsKK2V4dGVybiB2b2lkCWluZXQ2X3VucmVnaXN0ZXJfcHJvdG9zdyhzdHJ1Y3QgaW5ldF9wcm90b3N3ICpwKTsKKyNlbmRpZgorCisjZW5kaWYJLyogX1BST1RPQ09MX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3BzbmFwLmggYi9pbmNsdWRlL25ldC9wc25hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljOTRlOGYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9wc25hcC5oCkBAIC0wLDAgKzEsNyBAQAorI2lmbmRlZiBfTkVUX1BTTkFQX0gKKyNkZWZpbmUgX05FVF9QU05BUF9ICisKK2V4dGVybiBzdHJ1Y3QgZGF0YWxpbmtfcHJvdG8gKnJlZ2lzdGVyX3NuYXBfY2xpZW50KHVuc2lnbmVkIGNoYXIgKmRlc2MsIGludCAoKnJjdmZ1bmMpKHN0cnVjdCBza19idWZmICosIHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBwYWNrZXRfdHlwZSAqKSk7CitleHRlcm4gdm9pZCB1bnJlZ2lzdGVyX3NuYXBfY2xpZW50KHN0cnVjdCBkYXRhbGlua19wcm90byAqcHJvdG8pOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3Jhdy5oIGIvaW5jbHVkZS9uZXQvcmF3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM0MTFjNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L3Jhdy5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBJTkVUCQlBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgVENQL0lQIHByb3RvY29sIHN1aXRlIGZvciB0aGUgTElOVVgKKyAqCQlvcGVyYXRpbmcgc3lzdGVtLiAgSU5FVCBpcyBpbXBsZW1lbnRlZCB1c2luZyB0aGUgIEJTRCBTb2NrZXQKKyAqCQlpbnRlcmZhY2UgYXMgdGhlIG1lYW5zIG9mIGNvbW11bmljYXRpb24gd2l0aCB0aGUgdXNlciBsZXZlbC4KKyAqCisgKgkJRGVmaW5pdGlvbnMgZm9yIHRoZSBSQVctSVAgbW9kdWxlLgorICoKKyAqIFZlcnNpb246CUAoIylyYXcuaAkxLjAuMgkwNS8wNy85MworICoKKyAqIEF1dGhvcjoJRnJlZCBOLiB2YW4gS2VtcGVuLCA8d2FsdGplQHVXYWx0Lk5MLk11Z25ldC5PUkc+CisgKgorICoJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCQltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICoJCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICoJCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpZm5kZWYgX1JBV19ICisjZGVmaW5lIF9SQVdfSAorCisKK2V4dGVybiBzdHJ1Y3QgcHJvdG8gcmF3X3Byb3Q7CisKKworZXh0ZXJuIHZvaWQgCXJhd19lcnIoc3RydWN0IHNvY2sgKiwgc3RydWN0IHNrX2J1ZmYgKiwgdTMyIGluZm8pOworZXh0ZXJuIGludCAJcmF3X3JjdihzdHJ1Y3Qgc29jayAqLCBzdHJ1Y3Qgc2tfYnVmZiAqKTsKKworLyogTm90ZTogdjQgSUNNUCB3YW50cyB0byBnZXQgYXQgdGhpcyBzdHVmZiwgaWYgeW91IGNoYW5nZSB0aGUKKyAqICAgICAgIGhhc2hpbmcgbWVjaGFuaXNtLCBtYWtlIHN1cmUgeW91IHVwZGF0ZSBpY21wLmMgYXMgd2VsbC4KKyAqLworI2RlZmluZSBSQVdWNF9IVEFCTEVfU0laRQlNQVhfSU5FVF9QUk9UT1MKK2V4dGVybiBzdHJ1Y3QgaGxpc3RfaGVhZCByYXdfdjRfaHRhYmxlW1JBV1Y0X0hUQUJMRV9TSVpFXTsKKworZXh0ZXJuIHJ3bG9ja190IHJhd192NF9sb2NrOworCisKK2V4dGVybiBzdHJ1Y3Qgc29jayAqX19yYXdfdjRfbG9va3VwKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgbnVtLAorCQkJCSAgICB1bnNpZ25lZCBsb25nIHJhZGRyLCB1bnNpZ25lZCBsb25nIGxhZGRyLAorCQkJCSAgICBpbnQgZGlmKTsKKworZXh0ZXJuIHZvaWQgcmF3X3Y0X2lucHV0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcGhkciAqaXBoLCBpbnQgaGFzaCk7CisKKyNlbmRpZgkvKiBfUkFXX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3Jhd3Y2LmggYi9pbmNsdWRlL25ldC9yYXd2Ni5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzZmQ5YTYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9yYXd2Ni5oCkBAIC0wLDAgKzEsMjcgQEAKKyNpZm5kZWYgX05FVF9SQVdWNl9ICisjZGVmaW5lIF9ORVRfUkFXVjZfSAorCisjaWZkZWYgX19LRVJORUxfXworCisjZGVmaW5lIFJBV1Y2X0hUQUJMRV9TSVpFCU1BWF9JTkVUX1BST1RPUworZXh0ZXJuIHN0cnVjdCBobGlzdF9oZWFkIHJhd192Nl9odGFibGVbUkFXVjZfSFRBQkxFX1NJWkVdOworZXh0ZXJuIHJ3bG9ja190IHJhd192Nl9sb2NrOworCitleHRlcm4gdm9pZCBpcHY2X3Jhd19kZWxpdmVyKHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyKTsKKworZXh0ZXJuIHN0cnVjdCBzb2NrICpfX3Jhd192Nl9sb29rdXAoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBzaG9ydCBudW0sCisJCQkJICAgIHN0cnVjdCBpbjZfYWRkciAqbG9jX2FkZHIsIHN0cnVjdCBpbjZfYWRkciAqcm10X2FkZHIpOworCitleHRlcm4gaW50CQkJcmF3djZfcmN2KHN0cnVjdCBzb2NrICpzaywKKwkJCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKworCitleHRlcm4gdm9pZAkJCXJhd3Y2X2VycihzdHJ1Y3Qgc29jayAqc2ssCisJCQkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICBzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdCwKKwkJCQkJICBpbnQgdHlwZSwgaW50IGNvZGUsIAorCQkJCQkgIGludCBvZmZzZXQsIHUzMiBpbmZvKTsKKworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcm9zZS5oIGIvaW5jbHVkZS9uZXQvcm9zZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyNDliOTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9yb3NlLmgKQEAgLTAsMCArMSwyMzUgQEAKKy8qCisgKglEZWNsYXJhdGlvbnMgb2YgUm9zZSB0eXBlIG9iamVjdHMuCisgKgorICoJSm9uYXRoYW4gTmF5bG9yIEc0S0xYCTI1LzgvOTYKKyAqLworCisjaWZuZGVmIF9ST1NFX0gKKyNkZWZpbmUgX1JPU0VfSCAKKworI2luY2x1ZGUgPGxpbnV4L3Jvc2UuaD4KKyNpbmNsdWRlIDxuZXQvc29jay5oPgorCisjZGVmaW5lCVJPU0VfQUREUl9MRU4JCQk1CisKKyNkZWZpbmUJUk9TRV9NSU5fTEVOCQkJMworCisjZGVmaW5lCVJPU0VfR0ZJCQkJMHgxMAorI2RlZmluZQlST1NFX1FfQklUCQkJMHg4MAorI2RlZmluZQlST1NFX0RfQklUCQkJMHg0MAorI2RlZmluZQlST1NFX01fQklUCQkJMHgxMAorCisjZGVmaW5lCVJPU0VfQ0FMTF9SRVFVRVNUCQkweDBCCisjZGVmaW5lCVJPU0VfQ0FMTF9BQ0NFUFRFRAkJMHgwRgorI2RlZmluZQlST1NFX0NMRUFSX1JFUVVFU1QJCTB4MTMKKyNkZWZpbmUJUk9TRV9DTEVBUl9DT05GSVJNQVRJT04JCTB4MTcKKyNkZWZpbmUJUk9TRV9EQVRBCQkJMHgwMAorI2RlZmluZQlST1NFX0lOVEVSUlVQVAkJCTB4MjMKKyNkZWZpbmUJUk9TRV9JTlRFUlJVUFRfQ09ORklSTUFUSU9OCTB4MjcKKyNkZWZpbmUJUk9TRV9SUgkJCQkweDAxCisjZGVmaW5lCVJPU0VfUk5SCQkJMHgwNQorI2RlZmluZQlST1NFX1JFSgkJCTB4MDkKKyNkZWZpbmUJUk9TRV9SRVNFVF9SRVFVRVNUCQkweDFCCisjZGVmaW5lCVJPU0VfUkVTRVRfQ09ORklSTUFUSU9OCQkweDFGCisjZGVmaW5lCVJPU0VfUkVHSVNUUkFUSU9OX1JFUVVFU1QJMHhGMworI2RlZmluZQlST1NFX1JFR0lTVFJBVElPTl9DT05GSVJNQVRJT04JMHhGNworI2RlZmluZQlST1NFX1JFU1RBUlRfUkVRVUVTVAkJMHhGQgorI2RlZmluZQlST1NFX1JFU1RBUlRfQ09ORklSTUFUSU9OCTB4RkYKKyNkZWZpbmUJUk9TRV9ESUFHTk9TVElDCQkJMHhGMQorI2RlZmluZQlST1NFX0lMTEVHQUwJCQkweEZECisKKy8qIERlZmluZSBMaW5rIFN0YXRlIGNvbnN0YW50cy4gKi8KKworZW51bSB7CisJUk9TRV9TVEFURV8wLAkJCS8qIFJlYWR5ICovCisJUk9TRV9TVEFURV8xLAkJCS8qIEF3YWl0aW5nIENhbGwgQWNjZXB0ZWQgKi8KKwlST1NFX1NUQVRFXzIsCQkJLyogQXdhaXRpbmcgQ2xlYXIgQ29uZmlybWF0aW9uICovCisJUk9TRV9TVEFURV8zLAkJCS8qIERhdGEgVHJhbnNmZXIgKi8KKwlST1NFX1NUQVRFXzQsCQkJLyogQXdhaXRpbmcgUmVzZXQgQ29uZmlybWF0aW9uICovCisJUk9TRV9TVEFURV81CQkJLyogRGVmZXJyZWQgQ2FsbCBBY2NlcHRhbmNlICovCit9OworCisjZGVmaW5lIFJPU0VfREVGQVVMVF9UMAkJCSgxODAgKiBIWikJLyogRGVmYXVsdCBUMTAgVDIwIHZhbHVlICovCisjZGVmaW5lIFJPU0VfREVGQVVMVF9UMQkJCSgyMDAgKiBIWikJLyogRGVmYXVsdCBUMTEgVDIxIHZhbHVlICovCisjZGVmaW5lIFJPU0VfREVGQVVMVF9UMgkJCSgxODAgKiBIWikJLyogRGVmYXVsdCBUMTIgVDIyIHZhbHVlICovCisjZGVmaW5lCVJPU0VfREVGQVVMVF9UMwkJCSgxODAgKiBIWikJLyogRGVmYXVsdCBUMTMgVDIzIHZhbHVlICovCisjZGVmaW5lCVJPU0VfREVGQVVMVF9IQgkJCSg1ICogSFopCS8qIERlZmF1bHQgSG9sZGJhY2sgdmFsdWUgKi8KKyNkZWZpbmUJUk9TRV9ERUZBVUxUX0lETEUJCSgwICogNjAgKiBIWikJLyogTm8gQWN0aXZpdHkgVGltZW91dCAtIG5vbmUgKi8KKyNkZWZpbmUJUk9TRV9ERUZBVUxUX1JPVVRJTkcJCTEJCS8qIERlZmF1bHQgcm91dGluZyBmbGFnICovCisjZGVmaW5lCVJPU0VfREVGQVVMVF9GQUlMX1RJTUVPVVQJKDEyMCAqIEhaKQkvKiBUaW1lIHVudGlsIGxpbmsgY29uc2lkZXJlZCB1c2FibGUgKi8KKyNkZWZpbmUJUk9TRV9ERUZBVUxUX01BWFZDCQk1MAkJLyogTWF4aW11bSBudW1iZXIgb2YgVkNzIHBlciBuZWlnaGJvdXIgKi8KKyNkZWZpbmUJUk9TRV9ERUZBVUxUX1dJTkRPV19TSVpFCTcJCS8qIERlZmF1bHQgd2luZG93IHNpemUgKi8KKworI2RlZmluZSBST1NFX01PRFVMVVMgCQkJOAorI2RlZmluZQlST1NFX01BWF9QQUNLRVRfU0laRQkJMjUxCQkvKiBNYXhpbXVtIHBhY2tldCBzaXplICovCisKKyNkZWZpbmUJUk9TRV9DT05EX0FDS19QRU5ESU5HCQkweDAxCisjZGVmaW5lCVJPU0VfQ09ORF9QRUVSX1JYX0JVU1kJCTB4MDIKKyNkZWZpbmUJUk9TRV9DT05EX09XTl9SWF9CVVNZCQkweDA0CisKKyNkZWZpbmUJRkFDX05BVElPTkFMCQkJMHgwMAorI2RlZmluZQlGQUNfQ0NJVFQJCQkweDBGCisKKyNkZWZpbmUJRkFDX05BVElPTkFMX1JBTkQJCTB4N0YKKyNkZWZpbmUJRkFDX05BVElPTkFMX0ZMQUdTCQkweDNGCisjZGVmaW5lCUZBQ19OQVRJT05BTF9ERVNUX0RJR0kJCTB4RTkKKyNkZWZpbmUJRkFDX05BVElPTkFMX1NSQ19ESUdJCQkweEVCCisjZGVmaW5lCUZBQ19OQVRJT05BTF9GQUlMX0NBTEwJCTB4RUQKKyNkZWZpbmUJRkFDX05BVElPTkFMX0ZBSUxfQURECQkweEVFCisjZGVmaW5lCUZBQ19OQVRJT05BTF9ESUdJUwkJCTB4RUYKKworI2RlZmluZQlGQUNfQ0NJVFRfREVTVF9OU0FQCQkweEM5CisjZGVmaW5lCUZBQ19DQ0lUVF9TUkNfTlNBUAkJMHhDQgorCitzdHJ1Y3Qgcm9zZV9uZWlnaCB7CisJc3RydWN0IHJvc2VfbmVpZ2gJKm5leHQ7CisJYXgyNV9hZGRyZXNzCQljYWxsc2lnbjsKKwlheDI1X2RpZ2kJCSpkaWdpcGVhdDsKKwlheDI1X2NiCQkJKmF4MjU7CisJc3RydWN0IG5ldF9kZXZpY2UJCSpkZXY7CisJdW5zaWduZWQgc2hvcnQJCWNvdW50OworCXVuc2lnbmVkIHNob3J0CQl1c2U7CisJdW5zaWduZWQgaW50CQludW1iZXI7CisJY2hhcgkJCXJlc3RhcnRlZDsKKwljaGFyCQkJZGNlX21vZGU7CisJY2hhcgkJCWxvb3BiYWNrOworCXN0cnVjdCBza19idWZmX2hlYWQJcXVldWU7CisJc3RydWN0IHRpbWVyX2xpc3QJdDB0aW1lcjsKKwlzdHJ1Y3QgdGltZXJfbGlzdAlmdGltZXI7Cit9OworCitzdHJ1Y3Qgcm9zZV9ub2RlIHsKKwlzdHJ1Y3Qgcm9zZV9ub2RlCSpuZXh0OworCXJvc2VfYWRkcmVzcwkJYWRkcmVzczsKKwl1bnNpZ25lZCBzaG9ydAkJbWFzazsKKwl1bnNpZ25lZCBjaGFyCQljb3VudDsKKwljaGFyCQkJbG9vcGJhY2s7CisJc3RydWN0IHJvc2VfbmVpZ2gJKm5laWdoYm91clszXTsKK307CisKK3N0cnVjdCByb3NlX3JvdXRlIHsKKwlzdHJ1Y3Qgcm9zZV9yb3V0ZQkqbmV4dDsKKwl1bnNpZ25lZCBpbnQJCWxjaTEsIGxjaTI7CisJcm9zZV9hZGRyZXNzCQlzcmNfYWRkciwgZGVzdF9hZGRyOworCWF4MjVfYWRkcmVzcwkJc3JjX2NhbGwsIGRlc3RfY2FsbDsKKwlzdHJ1Y3Qgcm9zZV9uZWlnaCAJKm5laWdoMSwgKm5laWdoMjsKKwl1bnNpZ25lZCBpbnQJCXJhbmQ7Cit9OworCitzdHJ1Y3Qgcm9zZV9zb2NrIHsKKwlzdHJ1Y3Qgc29jawkJc29jazsKKwlyb3NlX2FkZHJlc3MJCXNvdXJjZV9hZGRyLCAgIGRlc3RfYWRkcjsKKwlheDI1X2FkZHJlc3MJCXNvdXJjZV9jYWxsLCAgIGRlc3RfY2FsbDsKKwl1bnNpZ25lZCBjaGFyCQlzb3VyY2VfbmRpZ2lzLCBkZXN0X25kaWdpczsKKwlheDI1X2FkZHJlc3MJCXNvdXJjZV9kaWdpc1tST1NFX01BWF9ESUdJU107CisJYXgyNV9hZGRyZXNzCQlkZXN0X2RpZ2lzW1JPU0VfTUFYX0RJR0lTXTsKKwlzdHJ1Y3Qgcm9zZV9uZWlnaAkqbmVpZ2hib3VyOworCXN0cnVjdCBuZXRfZGV2aWNlCQkqZGV2aWNlOworCXVuc2lnbmVkIGludAkJbGNpLCByYW5kOworCXVuc2lnbmVkIGNoYXIJCXN0YXRlLCBjb25kaXRpb24sIHFiaXRpbmNsLCBkZWZlcjsKKwl1bnNpZ25lZCBjaGFyCQljYXVzZSwgZGlhZ25vc3RpYzsKKwl1bnNpZ25lZCBzaG9ydAkJdnMsIHZyLCB2YSwgdmw7CisJdW5zaWduZWQgbG9uZwkJdDEsIHQyLCB0MywgaGIsIGlkbGU7CisjaWZkZWYgTV9CSVQKKwl1bnNpZ25lZCBzaG9ydAkJZnJhZ2xlbjsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkCWZyYWdfcXVldWU7CisjZW5kaWYKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkCWFja19xdWV1ZTsKKwlzdHJ1Y3Qgcm9zZV9mYWNpbGl0aWVzX3N0cnVjdCBmYWNpbGl0aWVzOworCXN0cnVjdCB0aW1lcl9saXN0CXRpbWVyOworCXN0cnVjdCB0aW1lcl9saXN0CWlkbGV0aW1lcjsKK307CisKKyNkZWZpbmUgcm9zZV9zayhzaykgKChzdHJ1Y3Qgcm9zZV9zb2NrICopKHNrKSkKKworLyogYWZfcm9zZS5jICovCitleHRlcm4gYXgyNV9hZGRyZXNzIHJvc2VfY2FsbHNpZ247CitleHRlcm4gaW50ICBzeXNjdGxfcm9zZV9yZXN0YXJ0X3JlcXVlc3RfdGltZW91dDsKK2V4dGVybiBpbnQgIHN5c2N0bF9yb3NlX2NhbGxfcmVxdWVzdF90aW1lb3V0OworZXh0ZXJuIGludCAgc3lzY3RsX3Jvc2VfcmVzZXRfcmVxdWVzdF90aW1lb3V0OworZXh0ZXJuIGludCAgc3lzY3RsX3Jvc2VfY2xlYXJfcmVxdWVzdF90aW1lb3V0OworZXh0ZXJuIGludCAgc3lzY3RsX3Jvc2Vfbm9fYWN0aXZpdHlfdGltZW91dDsKK2V4dGVybiBpbnQgIHN5c2N0bF9yb3NlX2Fja19ob2xkX2JhY2tfdGltZW91dDsKK2V4dGVybiBpbnQgIHN5c2N0bF9yb3NlX3JvdXRpbmdfY29udHJvbDsKK2V4dGVybiBpbnQgIHN5c2N0bF9yb3NlX2xpbmtfZmFpbF90aW1lb3V0OworZXh0ZXJuIGludCAgc3lzY3RsX3Jvc2VfbWF4aW11bV92Y3M7CitleHRlcm4gaW50ICBzeXNjdGxfcm9zZV93aW5kb3dfc2l6ZTsKK2V4dGVybiBpbnQgIHJvc2VjbXAocm9zZV9hZGRyZXNzICosIHJvc2VfYWRkcmVzcyAqKTsKK2V4dGVybiBpbnQgIHJvc2VjbXBtKHJvc2VfYWRkcmVzcyAqLCByb3NlX2FkZHJlc3MgKiwgdW5zaWduZWQgc2hvcnQpOworZXh0ZXJuIGNvbnN0IGNoYXIgKnJvc2UyYXNjKGNvbnN0IHJvc2VfYWRkcmVzcyAqKTsKK2V4dGVybiBzdHJ1Y3Qgc29jayAqcm9zZV9maW5kX3NvY2tldCh1bnNpZ25lZCBpbnQsIHN0cnVjdCByb3NlX25laWdoICopOworZXh0ZXJuIHZvaWQgcm9zZV9raWxsX2J5X25laWdoKHN0cnVjdCByb3NlX25laWdoICopOworZXh0ZXJuIHVuc2lnbmVkIGludCByb3NlX25ld19sY2koc3RydWN0IHJvc2VfbmVpZ2ggKik7CitleHRlcm4gaW50ICByb3NlX3J4X2NhbGxfcmVxdWVzdChzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3QgbmV0X2RldmljZSAqLCBzdHJ1Y3Qgcm9zZV9uZWlnaCAqLCB1bnNpZ25lZCBpbnQpOworZXh0ZXJuIHZvaWQgcm9zZV9kZXN0cm95X3NvY2tldChzdHJ1Y3Qgc29jayAqKTsKKworLyogcm9zZV9kZXYuYyAqLworZXh0ZXJuIHZvaWQgIHJvc2Vfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKik7CisKKy8qIHJvc2VfaW4uYyAqLworZXh0ZXJuIGludCAgcm9zZV9wcm9jZXNzX3J4X2ZyYW1lKHN0cnVjdCBzb2NrICosIHN0cnVjdCBza19idWZmICopOworCisvKiByb3NlX2xpbmsuYyAqLworZXh0ZXJuIHZvaWQgcm9zZV9zdGFydF9mdGltZXIoc3RydWN0IHJvc2VfbmVpZ2ggKik7CitleHRlcm4gdm9pZCByb3NlX3N0b3BfZnRpbWVyKHN0cnVjdCByb3NlX25laWdoICopOworZXh0ZXJuIHZvaWQgcm9zZV9zdG9wX3QwdGltZXIoc3RydWN0IHJvc2VfbmVpZ2ggKik7CitleHRlcm4gaW50ICByb3NlX2Z0aW1lcl9ydW5uaW5nKHN0cnVjdCByb3NlX25laWdoICopOworZXh0ZXJuIHZvaWQgcm9zZV9saW5rX3J4X3Jlc3RhcnQoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IHJvc2VfbmVpZ2ggKiwgdW5zaWduZWQgc2hvcnQpOworZXh0ZXJuIHZvaWQgcm9zZV90cmFuc21pdF9jbGVhcl9yZXF1ZXN0KHN0cnVjdCByb3NlX25laWdoICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgY2hhciwgdW5zaWduZWQgY2hhcik7CitleHRlcm4gdm9pZCByb3NlX3RyYW5zbWl0X2xpbmsoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IHJvc2VfbmVpZ2ggKik7CisKKy8qIHJvc2VfbG9vcGJhY2suYyAqLworZXh0ZXJuIHZvaWQgcm9zZV9sb29wYmFja19pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgcm9zZV9sb29wYmFja19jbGVhcih2b2lkKTsKK2V4dGVybiBpbnQgIHJvc2VfbG9vcGJhY2tfcXVldWUoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IHJvc2VfbmVpZ2ggKik7CisKKy8qIHJvc2Vfb3V0LmMgKi8KK2V4dGVybiB2b2lkIHJvc2Vfa2ljayhzdHJ1Y3Qgc29jayAqKTsKK2V4dGVybiB2b2lkIHJvc2VfZW5xdWlyeV9yZXNwb25zZShzdHJ1Y3Qgc29jayAqKTsKKworLyogcm9zZV9yb3V0ZS5jICovCitleHRlcm4gc3RydWN0IHJvc2VfbmVpZ2ggKnJvc2VfbG9vcGJhY2tfbmVpZ2g7CitleHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByb3NlX25laWdoX2ZvcHM7CitleHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByb3NlX25vZGVzX2ZvcHM7CitleHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByb3NlX3JvdXRlc19mb3BzOworCitleHRlcm4gaW50ICByb3NlX2FkZF9sb29wYmFja19uZWlnaCh2b2lkKTsKK2V4dGVybiBpbnQgIHJvc2VfYWRkX2xvb3BiYWNrX25vZGUocm9zZV9hZGRyZXNzICopOworZXh0ZXJuIHZvaWQgcm9zZV9kZWxfbG9vcGJhY2tfbm9kZShyb3NlX2FkZHJlc3MgKik7CitleHRlcm4gdm9pZCByb3NlX3J0X2RldmljZV9kb3duKHN0cnVjdCBuZXRfZGV2aWNlICopOworZXh0ZXJuIHZvaWQgcm9zZV9saW5rX2RldmljZV9kb3duKHN0cnVjdCBuZXRfZGV2aWNlICopOworZXh0ZXJuIHN0cnVjdCBuZXRfZGV2aWNlICpyb3NlX2Rldl9maXJzdCh2b2lkKTsKK2V4dGVybiBzdHJ1Y3QgbmV0X2RldmljZSAqcm9zZV9kZXZfZ2V0KHJvc2VfYWRkcmVzcyAqKTsKK2V4dGVybiBzdHJ1Y3Qgcm9zZV9yb3V0ZSAqcm9zZV9yb3V0ZV9mcmVlX2xjaSh1bnNpZ25lZCBpbnQsIHN0cnVjdCByb3NlX25laWdoICopOworZXh0ZXJuIHN0cnVjdCByb3NlX25laWdoICpyb3NlX2dldF9uZWlnaChyb3NlX2FkZHJlc3MgKiwgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICopOworZXh0ZXJuIGludCAgcm9zZV9ydF9pb2N0bCh1bnNpZ25lZCBpbnQsIHZvaWQgX191c2VyICopOworZXh0ZXJuIHZvaWQgcm9zZV9saW5rX2ZhaWxlZChheDI1X2NiICosIGludCk7CitleHRlcm4gaW50ICByb3NlX3JvdXRlX2ZyYW1lKHN0cnVjdCBza19idWZmICosIGF4MjVfY2IgKik7CitleHRlcm4gdm9pZCByb3NlX3J0X2ZyZWUodm9pZCk7CisKKy8qIHJvc2Vfc3Vici5jICovCitleHRlcm4gdm9pZCByb3NlX2NsZWFyX3F1ZXVlcyhzdHJ1Y3Qgc29jayAqKTsKK2V4dGVybiB2b2lkIHJvc2VfZnJhbWVzX2Fja2VkKHN0cnVjdCBzb2NrICosIHVuc2lnbmVkIHNob3J0KTsKK2V4dGVybiB2b2lkIHJvc2VfcmVxdWV1ZV9mcmFtZXMoc3RydWN0IHNvY2sgKik7CitleHRlcm4gaW50ICByb3NlX3ZhbGlkYXRlX25yKHN0cnVjdCBzb2NrICosIHVuc2lnbmVkIHNob3J0KTsKK2V4dGVybiB2b2lkIHJvc2Vfd3JpdGVfaW50ZXJuYWwoc3RydWN0IHNvY2sgKiwgaW50KTsKK2V4dGVybiBpbnQgIHJvc2VfZGVjb2RlKHN0cnVjdCBza19idWZmICosIGludCAqLCBpbnQgKiwgaW50ICosIGludCAqLCBpbnQgKik7CitleHRlcm4gaW50ICByb3NlX3BhcnNlX2ZhY2lsaXRpZXModW5zaWduZWQgY2hhciAqLCBzdHJ1Y3Qgcm9zZV9mYWNpbGl0aWVzX3N0cnVjdCAqKTsKK2V4dGVybiB2b2lkIHJvc2VfZGlzY29ubmVjdChzdHJ1Y3Qgc29jayAqLCBpbnQsIGludCwgaW50KTsKKworLyogcm9zZV90aW1lci5jICovCitleHRlcm4gdm9pZCByb3NlX3N0YXJ0X2hlYXJ0YmVhdChzdHJ1Y3Qgc29jayAqKTsKK2V4dGVybiB2b2lkIHJvc2Vfc3RhcnRfdDF0aW1lcihzdHJ1Y3Qgc29jayAqKTsKK2V4dGVybiB2b2lkIHJvc2Vfc3RhcnRfdDJ0aW1lcihzdHJ1Y3Qgc29jayAqKTsKK2V4dGVybiB2b2lkIHJvc2Vfc3RhcnRfdDN0aW1lcihzdHJ1Y3Qgc29jayAqKTsKK2V4dGVybiB2b2lkIHJvc2Vfc3RhcnRfaGJ0aW1lcihzdHJ1Y3Qgc29jayAqKTsKK2V4dGVybiB2b2lkIHJvc2Vfc3RhcnRfaWRsZXRpbWVyKHN0cnVjdCBzb2NrICopOworZXh0ZXJuIHZvaWQgcm9zZV9zdG9wX2hlYXJ0YmVhdChzdHJ1Y3Qgc29jayAqKTsKK2V4dGVybiB2b2lkIHJvc2Vfc3RvcF90aW1lcihzdHJ1Y3Qgc29jayAqKTsKK2V4dGVybiB2b2lkIHJvc2Vfc3RvcF9pZGxldGltZXIoc3RydWN0IHNvY2sgKik7CisKKy8qIHN5c2N0bF9uZXRfcm9zZS5jICovCitleHRlcm4gdm9pZCByb3NlX3JlZ2lzdGVyX3N5c2N0bCh2b2lkKTsKK2V4dGVybiB2b2lkIHJvc2VfdW5yZWdpc3Rlcl9zeXNjdGwodm9pZCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcm91dGUuaCBiL2luY2x1ZGUvbmV0L3JvdXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJkYTc1NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L3JvdXRlLmgKQEAgLTAsMCArMSwyMDUgQEAKKy8qCisgKiBJTkVUCQlBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgVENQL0lQIHByb3RvY29sIHN1aXRlIGZvciB0aGUgTElOVVgKKyAqCQlvcGVyYXRpbmcgc3lzdGVtLiAgSU5FVCAgaXMgaW1wbGVtZW50ZWQgdXNpbmcgdGhlICBCU0QgU29ja2V0CisgKgkJaW50ZXJmYWNlIGFzIHRoZSBtZWFucyBvZiBjb21tdW5pY2F0aW9uIHdpdGggdGhlIHVzZXIgbGV2ZWwuCisgKgorICoJCURlZmluaXRpb25zIGZvciB0aGUgSVAgcm91dGVyLgorICoKKyAqIFZlcnNpb246CUAoIylyb3V0ZS5oCTEuMC40CTA1LzI3LzkzCisgKgorICogQXV0aG9yczoJUm9zcyBCaXJvLCA8YmlyN0BsZWxhbmQuU3RhbmZvcmQuRWR1PgorICoJCUZyZWQgTi4gdmFuIEtlbXBlbiwgPHdhbHRqZUB1V2FsdC5OTC5NdWduZXQuT1JHPgorICogRml4ZXM6CisgKgkJQWxhbiBDb3gJOglSZWZvcm1hdHRlZC4gQWRkZWQgaXBfcnRfbG9jYWwoKQorICoJCUFsYW4gQ294CToJU3VwcG9ydCBmb3IgVENQIHBhcmFtZXRlcnMuCisgKgkJQWxleGV5IEt1em5ldHNvdjoJTWFqb3IgY2hhbmdlcyBmb3IgbmV3IHJvdXRpbmcgY29kZS4KKyAqCQlNaWtlIE1jTGFnYW4gICAgOglSb3V0aW5nIGJ5IHNvdXJjZQorICoJCVJvYmVydCBPbHNzb24gICA6CUFkZGVkIHJ0X2NhY2hlIHN0YXRpc3RpY3MKKyAqCisgKgkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKgkJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKgkJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2lmbmRlZiBfUk9VVEVfSAorI2RlZmluZSBfUk9VVEVfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0L2RzdC5oPgorI2luY2x1ZGUgPG5ldC9pbmV0cGVlci5oPgorI2luY2x1ZGUgPG5ldC9mbG93Lmg+CisjaW5jbHVkZSA8bGludXgvaW5fcm91dGUuaD4KKyNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KKyNpbmNsdWRlIDxsaW51eC9yb3V0ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lwLmg+CisjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KKworI2lmbmRlZiBfX0tFUk5FTF9fCisjd2FybmluZyBUaGlzIGZpbGUgaXMgbm90IHN1cHBvc2VkIHRvIGJlIHVzZWQgb3V0c2lkZSBvZiBrZXJuZWwuCisjZW5kaWYKKworI2RlZmluZSBSVE9fT05MSU5LCTB4MDEKKworI2RlZmluZSBSVE9fQ09OTgkwCisvKiBSVE9fQ09OTiBpcyBub3QgdXNlZCAoYmVpbmcgYWxpYXMgZm9yIDApLCBidXQgcHJlc2VydmVkIG5vdCB0byBicmVhaworICogc29tZSBtb2R1bGVzIHJlZmVycmluZyB0byBpdC4gKi8KKworI2RlZmluZSBSVF9DT05OX0ZMQUdTKHNrKSAgIChSVF9UT1MoaW5ldF9zayhzayktPnRvcykgfCBzb2NrX2ZsYWcoc2ssIFNPQ0tfTE9DQUxST1VURSkpCisKK3N0cnVjdCBmaWJfbmg7CitzdHJ1Y3QgaW5ldF9wZWVyOworc3RydWN0IHJ0YWJsZQoreworCXVuaW9uCisJeworCQlzdHJ1Y3QgZHN0X2VudHJ5CWRzdDsKKwkJc3RydWN0IHJ0YWJsZQkJKnJ0X25leHQ7CisJfSB1OworCisJc3RydWN0IGluX2RldmljZQkqaWRldjsKKwkKKwl1bnNpZ25lZAkJcnRfZmxhZ3M7CisJX191MTYJCQlydF90eXBlOworCV9fdTE2CQkJcnRfbXVsdGlwYXRoX2FsZzsKKworCV9fdTMyCQkJcnRfZHN0OwkvKiBQYXRoIGRlc3RpbmF0aW9uCSovCisJX191MzIJCQlydF9zcmM7CS8qIFBhdGggc291cmNlCQkqLworCWludAkJCXJ0X2lpZjsKKworCS8qIEluZm8gb24gbmVpZ2hib3VyICovCisJX191MzIJCQlydF9nYXRld2F5OworCisJLyogQ2FjaGUgbG9va3VwIGtleXMgKi8KKwlzdHJ1Y3QgZmxvd2kJCWZsOworCisJLyogTWlzY2VsbGFuZW91cyBjYWNoZWQgaW5mb3JtYXRpb24gKi8KKwlfX3UzMgkJCXJ0X3NwZWNfZHN0OyAvKiBSRkMxMTIyIHNwZWNpZmljIGRlc3RpbmF0aW9uICovCisJc3RydWN0IGluZXRfcGVlcgkqcGVlcjsgLyogbG9uZy1saXZpbmcgcGVlciBpbmZvICovCit9OworCitzdHJ1Y3QgaXBfcnRfYWNjdAoreworCV9fdTMyIAlvX2J5dGVzOworCV9fdTMyIAlvX3BhY2tldHM7CisJX191MzIgCWlfYnl0ZXM7CisJX191MzIgCWlfcGFja2V0czsKK307CisKK3N0cnVjdCBydF9jYWNoZV9zdGF0IAoreworICAgICAgICB1bnNpZ25lZCBpbnQgaW5faGl0OworICAgICAgICB1bnNpZ25lZCBpbnQgaW5fc2xvd190b3Q7CisgICAgICAgIHVuc2lnbmVkIGludCBpbl9zbG93X21jOworICAgICAgICB1bnNpZ25lZCBpbnQgaW5fbm9fcm91dGU7CisgICAgICAgIHVuc2lnbmVkIGludCBpbl9icmQ7CisgICAgICAgIHVuc2lnbmVkIGludCBpbl9tYXJ0aWFuX2RzdDsKKyAgICAgICAgdW5zaWduZWQgaW50IGluX21hcnRpYW5fc3JjOworICAgICAgICB1bnNpZ25lZCBpbnQgb3V0X2hpdDsKKyAgICAgICAgdW5zaWduZWQgaW50IG91dF9zbG93X3RvdDsKKyAgICAgICAgdW5zaWduZWQgaW50IG91dF9zbG93X21jOworICAgICAgICB1bnNpZ25lZCBpbnQgZ2NfdG90YWw7CisgICAgICAgIHVuc2lnbmVkIGludCBnY19pZ25vcmVkOworICAgICAgICB1bnNpZ25lZCBpbnQgZ2NfZ29hbF9taXNzOworICAgICAgICB1bnNpZ25lZCBpbnQgZ2NfZHN0X292ZXJmbG93OworICAgICAgICB1bnNpZ25lZCBpbnQgaW5faGxpc3Rfc2VhcmNoOworICAgICAgICB1bnNpZ25lZCBpbnQgb3V0X2hsaXN0X3NlYXJjaDsKK307CisKK2V4dGVybiBzdHJ1Y3QgcnRfY2FjaGVfc3RhdCAqcnRfY2FjaGVfc3RhdDsKKyNkZWZpbmUgUlRfQ0FDSEVfU1RBVF9JTkMoZmllbGQpCQkJCQkgIFwKKwkJKHBlcl9jcHVfcHRyKHJ0X2NhY2hlX3N0YXQsIF9zbXBfcHJvY2Vzc29yX2lkKCkpLT5maWVsZCsrKQorCitleHRlcm4gc3RydWN0IGlwX3J0X2FjY3QgKmlwX3J0X2FjY3Q7CisKK3N0cnVjdCBpbl9kZXZpY2U7CitleHRlcm4gaW50CQlpcF9ydF9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQJCWlwX3J0X3JlZGlyZWN0KHUzMiBvbGRfZ3csIHUzMiBkc3QsIHUzMiBuZXdfZ3csCisJCQkJICAgICAgIHUzMiBzcmMsIHU4IHRvcywgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitleHRlcm4gdm9pZAkJaXBfcnRfYWR2aWNlKHN0cnVjdCBydGFibGUgKipycCwgaW50IGFkdmljZSk7CitleHRlcm4gdm9pZAkJcnRfY2FjaGVfZmx1c2goaW50IGhvdyk7CitleHRlcm4gaW50CQlfX2lwX3JvdXRlX291dHB1dF9rZXkoc3RydWN0IHJ0YWJsZSAqKiwgY29uc3Qgc3RydWN0IGZsb3dpICpmbHApOworZXh0ZXJuIGludAkJaXBfcm91dGVfb3V0cHV0X2tleShzdHJ1Y3QgcnRhYmxlICoqLCBzdHJ1Y3QgZmxvd2kgKmZscCk7CitleHRlcm4gaW50CQlpcF9yb3V0ZV9vdXRwdXRfZmxvdyhzdHJ1Y3QgcnRhYmxlICoqcnAsIHN0cnVjdCBmbG93aSAqZmxwLCBzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncyk7CitleHRlcm4gaW50CQlpcF9yb3V0ZV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiosIHUzMiBkc3QsIHUzMiBzcmMsIHU4IHRvcywgc3RydWN0IG5ldF9kZXZpY2UgKmRldmluKTsKK2V4dGVybiB1bnNpZ25lZCBzaG9ydAlpcF9ydF9mcmFnX25lZWRlZChzdHJ1Y3QgaXBoZHIgKmlwaCwgdW5zaWduZWQgc2hvcnQgbmV3X210dSk7CitleHRlcm4gdm9pZAkJaXBfcnRfc2VuZF9yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKworZXh0ZXJuIHVuc2lnbmVkCQlpbmV0X2FkZHJfdHlwZSh1MzIgYWRkcik7CitleHRlcm4gdm9pZAkJaXBfcnRfbXVsdGljYXN0X2V2ZW50KHN0cnVjdCBpbl9kZXZpY2UgKik7CitleHRlcm4gaW50CQlpcF9ydF9pb2N0bCh1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqYXJnKTsKK2V4dGVybiB2b2lkCQlpcF9ydF9nZXRfc291cmNlKHU4ICpzcmMsIHN0cnVjdCBydGFibGUgKnJ0KTsKK2V4dGVybiBpbnQJCWlwX3J0X2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpcF9ydF9wdXQoc3RydWN0IHJ0YWJsZSAqIHJ0KQoreworCWlmIChydCkKKwkJZHN0X3JlbGVhc2UoJnJ0LT51LmRzdCk7Cit9CisKKyNkZWZpbmUgSVBUT1NfUlRfTUFTSwkoSVBUT1NfVE9TX01BU0sgJiB+MykKKworZXh0ZXJuIF9fdTggaXBfdG9zMnByaW9bMTZdOworCitzdGF0aWMgaW5saW5lIGNoYXIgcnRfdG9zMnByaW9yaXR5KHU4IHRvcykKK3sKKwlyZXR1cm4gaXBfdG9zMnByaW9bSVBUT1NfVE9TKHRvcyk+PjFdOworfQorCitzdGF0aWMgaW5saW5lIGludCBpcF9yb3V0ZV9jb25uZWN0KHN0cnVjdCBydGFibGUgKipycCwgdTMyIGRzdCwKKwkJCQkgICB1MzIgc3JjLCB1MzIgdG9zLCBpbnQgb2lmLCB1OCBwcm90b2NvbCwKKwkJCQkgICB1MTYgc3BvcnQsIHUxNiBkcG9ydCwgc3RydWN0IHNvY2sgKnNrKQoreworCXN0cnVjdCBmbG93aSBmbCA9IHsgLm9pZiA9IG9pZiwKKwkJCSAgICAubmxfdSA9IHsgLmlwNF91ID0geyAuZGFkZHIgPSBkc3QsCisJCQkJCQkgLnNhZGRyID0gc3JjLAorCQkJCQkJIC50b3MgICA9IHRvcyB9IH0sCisJCQkgICAgLnByb3RvID0gcHJvdG9jb2wsCisJCQkgICAgLnVsaV91ID0geyAucG9ydHMgPQorCQkJCSAgICAgICB7IC5zcG9ydCA9IHNwb3J0LAorCQkJCQkgLmRwb3J0ID0gZHBvcnQgfSB9IH07CisKKwlpbnQgZXJyOworCWlmICghZHN0IHx8ICFzcmMpIHsKKwkJZXJyID0gX19pcF9yb3V0ZV9vdXRwdXRfa2V5KHJwLCAmZmwpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwkJZmwuZmw0X2RzdCA9ICgqcnApLT5ydF9kc3Q7CisJCWZsLmZsNF9zcmMgPSAoKnJwKS0+cnRfc3JjOworCQlpcF9ydF9wdXQoKnJwKTsKKwkJKnJwID0gTlVMTDsKKwl9CisJcmV0dXJuIGlwX3JvdXRlX291dHB1dF9mbG93KHJwLCAmZmwsIHNrLCAwKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgaXBfcm91dGVfbmV3cG9ydHMoc3RydWN0IHJ0YWJsZSAqKnJwLCB1MTYgc3BvcnQsIHUxNiBkcG9ydCwKKwkJCQkgICAgc3RydWN0IHNvY2sgKnNrKQoreworCWlmIChzcG9ydCAhPSAoKnJwKS0+ZmwuZmxfaXBfc3BvcnQgfHwKKwkgICAgZHBvcnQgIT0gKCpycCktPmZsLmZsX2lwX2Rwb3J0KSB7CisJCXN0cnVjdCBmbG93aSBmbDsKKworCQltZW1jcHkoJmZsLCAmKCpycCktPmZsLCBzaXplb2YoZmwpKTsKKwkJZmwuZmxfaXBfc3BvcnQgPSBzcG9ydDsKKwkJZmwuZmxfaXBfZHBvcnQgPSBkcG9ydDsKKyNpZiBkZWZpbmVkKENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEhfQ0FDSEVEKQorCQlmbC5mbGFncyB8PSBGTE9XSV9GTEFHX01VTFRJUEFUSE9MRFJPVVRFOworI2VuZGlmCisJCWlwX3J0X3B1dCgqcnApOworCQkqcnAgPSBOVUxMOworCQlyZXR1cm4gaXBfcm91dGVfb3V0cHV0X2Zsb3cocnAsICZmbCwgc2ssIDApOworCX0KKwlyZXR1cm4gMDsKK30KKworZXh0ZXJuIHZvaWQgcnRfYmluZF9wZWVyKHN0cnVjdCBydGFibGUgKnJ0LCBpbnQgY3JlYXRlKTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgaW5ldF9wZWVyICpydF9nZXRfcGVlcihzdHJ1Y3QgcnRhYmxlICpydCkKK3sKKwlpZiAocnQtPnBlZXIpCisJCXJldHVybiBydC0+cGVlcjsKKworCXJ0X2JpbmRfcGVlcihydCwgMCk7CisJcmV0dXJuIHJ0LT5wZWVyOworfQorCisjZW5kaWYJLyogX1JPVVRFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmggYi9pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1NzUwNGIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oCkBAIC0wLDAgKzEsMTc1IEBACisjaWZuZGVmIF9fTkVUX1NDSEVEX0dFTkVSSUNfSAorI2RlZmluZSBfX05FVF9TQ0hFRF9HRU5FUklDX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KKyNpbmNsdWRlIDxsaW51eC9wa3Rfc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9wa3RfY2xzLmg+CisjaW5jbHVkZSA8bmV0L2dlbl9zdGF0cy5oPgorCitzdHJ1Y3QgUWRpc2Nfb3BzOworc3RydWN0IHFkaXNjX3dhbGtlcjsKK3N0cnVjdCB0Y2Zfd2Fsa2VyOworc3RydWN0IG1vZHVsZTsKKworc3RydWN0IHFkaXNjX3JhdGVfdGFibGUKK3sKKwlzdHJ1Y3QgdGNfcmF0ZXNwZWMgcmF0ZTsKKwl1MzIJCWRhdGFbMjU2XTsKKwlzdHJ1Y3QgcWRpc2NfcmF0ZV90YWJsZSAqbmV4dDsKKwlpbnQJCXJlZmNudDsKK307CisKK3N0cnVjdCBRZGlzYworeworCWludCAJCQkoKmVucXVldWUpKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqZGV2KTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqCSgqZGVxdWV1ZSkoc3RydWN0IFFkaXNjICpkZXYpOworCXVuc2lnbmVkCQlmbGFnczsKKyNkZWZpbmUgVENRX0ZfQlVJTFRJTgkxCisjZGVmaW5lIFRDUV9GX1RIUk9UVExFRAkyCisjZGVmaW5lIFRDUV9GX0lOR1JFU1MJNAorCWludAkJCXBhZGRlZDsKKwlzdHJ1Y3QgUWRpc2Nfb3BzCSpvcHM7CisJdTMyCQkJaGFuZGxlOworCXUzMgkJCXBhcmVudDsKKwlhdG9taWNfdAkJcmVmY250OworCXN0cnVjdCBza19idWZmX2hlYWQJcTsKKwlzdHJ1Y3QgbmV0X2RldmljZQkqZGV2OworCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKKworCXN0cnVjdCBnbmV0X3N0YXRzX2Jhc2ljCWJzdGF0czsKKwlzdHJ1Y3QgZ25ldF9zdGF0c19xdWV1ZQlxc3RhdHM7CisJc3RydWN0IGduZXRfc3RhdHNfcmF0ZV9lc3QJcmF0ZV9lc3Q7CisJc3BpbmxvY2tfdAkJKnN0YXRzX2xvY2s7CisJc3RydWN0IHJjdV9oZWFkIAlxX3JjdTsKKwlpbnQJCQkoKnJlc2hhcGVfZmFpbCkoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJc3RydWN0IFFkaXNjICpxKTsKKworCS8qIFRoaXMgZmllbGQgaXMgZGVwcmVjYXRlZCwgYnV0IGl0IGlzIHN0aWxsIHVzZWQgYnkgQ0JRCisJICogYW5kIGl0IHdpbGwgbGl2ZSB1bnRpbCBiZXR0ZXIgc29sdXRpb24gd2lsbCBiZSBpbnZlbnRlZC4KKwkgKi8KKwlzdHJ1Y3QgUWRpc2MJCSpfX3BhcmVudDsKK307CisKK3N0cnVjdCBRZGlzY19jbGFzc19vcHMKK3sKKwkvKiBDaGlsZCBxZGlzYyBtYW5pcHVsYXRpb24gKi8KKwlpbnQJCQkoKmdyYWZ0KShzdHJ1Y3QgUWRpc2MgKiwgdW5zaWduZWQgbG9uZyBjbCwKKwkJCQkJc3RydWN0IFFkaXNjICosIHN0cnVjdCBRZGlzYyAqKik7CisJc3RydWN0IFFkaXNjICoJCSgqbGVhZikoc3RydWN0IFFkaXNjICosIHVuc2lnbmVkIGxvbmcgY2wpOworCisJLyogQ2xhc3MgbWFuaXB1bGF0aW9uIHJvdXRpbmVzICovCisJdW5zaWduZWQgbG9uZwkJKCpnZXQpKHN0cnVjdCBRZGlzYyAqLCB1MzIgY2xhc3NpZCk7CisJdm9pZAkJCSgqcHV0KShzdHJ1Y3QgUWRpc2MgKiwgdW5zaWduZWQgbG9uZyk7CisJaW50CQkJKCpjaGFuZ2UpKHN0cnVjdCBRZGlzYyAqLCB1MzIsIHUzMiwKKwkJCQkJc3RydWN0IHJ0YXR0ciAqKiwgdW5zaWduZWQgbG9uZyAqKTsKKwlpbnQJCQkoKmRlbGV0ZSkoc3RydWN0IFFkaXNjICosIHVuc2lnbmVkIGxvbmcpOworCXZvaWQJCQkoKndhbGspKHN0cnVjdCBRZGlzYyAqLCBzdHJ1Y3QgcWRpc2Nfd2Fsa2VyICogYXJnKTsKKworCS8qIEZpbHRlciBtYW5pcHVsYXRpb24gKi8KKwlzdHJ1Y3QgdGNmX3Byb3RvICoqCSgqdGNmX2NoYWluKShzdHJ1Y3QgUWRpc2MgKiwgdW5zaWduZWQgbG9uZyk7CisJdW5zaWduZWQgbG9uZwkJKCpiaW5kX3RjZikoc3RydWN0IFFkaXNjICosIHVuc2lnbmVkIGxvbmcsCisJCQkJCXUzMiBjbGFzc2lkKTsKKwl2b2lkCQkJKCp1bmJpbmRfdGNmKShzdHJ1Y3QgUWRpc2MgKiwgdW5zaWduZWQgbG9uZyk7CisKKwkvKiBydG5ldGxpbmsgc3BlY2lmaWMgKi8KKwlpbnQJCQkoKmR1bXApKHN0cnVjdCBRZGlzYyAqLCB1bnNpZ25lZCBsb25nLAorCQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGNtc2cqKTsKKwlpbnQJCQkoKmR1bXBfc3RhdHMpKHN0cnVjdCBRZGlzYyAqLCB1bnNpZ25lZCBsb25nLAorCQkJCQlzdHJ1Y3QgZ25ldF9kdW1wICopOworfTsKKworc3RydWN0IFFkaXNjX29wcworeworCXN0cnVjdCBRZGlzY19vcHMJKm5leHQ7CisJc3RydWN0IFFkaXNjX2NsYXNzX29wcwkqY2xfb3BzOworCWNoYXIJCQlpZFtJRk5BTVNJWl07CisJaW50CQkJcHJpdl9zaXplOworCisJaW50IAkJCSgqZW5xdWV1ZSkoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IFFkaXNjICopOworCXN0cnVjdCBza19idWZmICoJKCpkZXF1ZXVlKShzdHJ1Y3QgUWRpc2MgKik7CisJaW50IAkJCSgqcmVxdWV1ZSkoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IFFkaXNjICopOworCXVuc2lnbmVkIGludAkJKCpkcm9wKShzdHJ1Y3QgUWRpc2MgKik7CisKKwlpbnQJCQkoKmluaXQpKHN0cnVjdCBRZGlzYyAqLCBzdHJ1Y3QgcnRhdHRyICphcmcpOworCXZvaWQJCQkoKnJlc2V0KShzdHJ1Y3QgUWRpc2MgKik7CisJdm9pZAkJCSgqZGVzdHJveSkoc3RydWN0IFFkaXNjICopOworCWludAkJCSgqY2hhbmdlKShzdHJ1Y3QgUWRpc2MgKiwgc3RydWN0IHJ0YXR0ciAqYXJnKTsKKworCWludAkJCSgqZHVtcCkoc3RydWN0IFFkaXNjICosIHN0cnVjdCBza19idWZmICopOworCWludAkJCSgqZHVtcF9zdGF0cykoc3RydWN0IFFkaXNjICosIHN0cnVjdCBnbmV0X2R1bXAgKik7CisKKwlzdHJ1Y3QgbW9kdWxlCQkqb3duZXI7Cit9OworCisKK3N0cnVjdCB0Y2ZfcmVzdWx0Cit7CisJdW5zaWduZWQgbG9uZwljbGFzczsKKwl1MzIJCWNsYXNzaWQ7Cit9OworCitzdHJ1Y3QgdGNmX3Byb3RvX29wcworeworCXN0cnVjdCB0Y2ZfcHJvdG9fb3BzCSpuZXh0OworCWNoYXIJCQlraW5kW0lGTkFNU0laXTsKKworCWludAkJCSgqY2xhc3NpZnkpKHN0cnVjdCBza19idWZmKiwgc3RydWN0IHRjZl9wcm90byosCisJCQkJCXN0cnVjdCB0Y2ZfcmVzdWx0ICopOworCWludAkJCSgqaW5pdCkoc3RydWN0IHRjZl9wcm90byopOworCXZvaWQJCQkoKmRlc3Ryb3kpKHN0cnVjdCB0Y2ZfcHJvdG8qKTsKKworCXVuc2lnbmVkIGxvbmcJCSgqZ2V0KShzdHJ1Y3QgdGNmX3Byb3RvKiwgdTMyIGhhbmRsZSk7CisJdm9pZAkJCSgqcHV0KShzdHJ1Y3QgdGNmX3Byb3RvKiwgdW5zaWduZWQgbG9uZyk7CisJaW50CQkJKCpjaGFuZ2UpKHN0cnVjdCB0Y2ZfcHJvdG8qLCB1bnNpZ25lZCBsb25nLAorCQkJCQl1MzIgaGFuZGxlLCBzdHJ1Y3QgcnRhdHRyICoqLAorCQkJCQl1bnNpZ25lZCBsb25nICopOworCWludAkJCSgqZGVsZXRlKShzdHJ1Y3QgdGNmX3Byb3RvKiwgdW5zaWduZWQgbG9uZyk7CisJdm9pZAkJCSgqd2Fsaykoc3RydWN0IHRjZl9wcm90byosIHN0cnVjdCB0Y2Zfd2Fsa2VyICphcmcpOworCisJLyogcnRuZXRsaW5rIHNwZWNpZmljICovCisJaW50CQkJKCpkdW1wKShzdHJ1Y3QgdGNmX3Byb3RvKiwgdW5zaWduZWQgbG9uZywKKwkJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjbXNnKik7CisKKwlzdHJ1Y3QgbW9kdWxlCQkqb3duZXI7Cit9OworCitzdHJ1Y3QgdGNmX3Byb3RvCit7CisJLyogRmFzdCBhY2Nlc3MgcGFydCAqLworCXN0cnVjdCB0Y2ZfcHJvdG8JKm5leHQ7CisJdm9pZAkJCSpyb290OworCWludAkJCSgqY2xhc3NpZnkpKHN0cnVjdCBza19idWZmKiwgc3RydWN0IHRjZl9wcm90byosCisJCQkJCXN0cnVjdCB0Y2ZfcmVzdWx0ICopOworCXUzMgkJCXByb3RvY29sOworCisJLyogQWxsIHRoZSByZXN0ICovCisJdTMyCQkJcHJpbzsKKwl1MzIJCQljbGFzc2lkOworCXN0cnVjdCBRZGlzYwkJKnE7CisJdm9pZAkJCSpkYXRhOworCXN0cnVjdCB0Y2ZfcHJvdG9fb3BzCSpvcHM7Cit9OworCisKK2V4dGVybiB2b2lkIHFkaXNjX2xvY2tfdHJlZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIHFkaXNjX3VubG9ja190cmVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworCisjZGVmaW5lIHNjaF90cmVlX2xvY2socSkJcWRpc2NfbG9ja190cmVlKChxKS0+ZGV2KQorI2RlZmluZSBzY2hfdHJlZV91bmxvY2socSkJcWRpc2NfdW5sb2NrX3RyZWUoKHEpLT5kZXYpCisjZGVmaW5lIHRjZl90cmVlX2xvY2sodHApCXFkaXNjX2xvY2tfdHJlZSgodHApLT5xLT5kZXYpCisjZGVmaW5lIHRjZl90cmVlX3VubG9jayh0cCkJcWRpc2NfdW5sb2NrX3RyZWUoKHRwKS0+cS0+ZGV2KQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3RjZl9kZXN0cm95KHN0cnVjdCB0Y2ZfcHJvdG8gKnRwKQoreworCXRwLT5vcHMtPmRlc3Ryb3kodHApOworCW1vZHVsZV9wdXQodHAtPm9wcy0+b3duZXIpOworCWtmcmVlKHRwKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY20uaCBiL2luY2x1ZGUvbmV0L3NjbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzZmEzZDUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9zY20uaApAQCAtMCwwICsxLDcxIEBACisjaWZuZGVmIF9fTElOVVhfTkVUX1NDTV9ICisjZGVmaW5lIF9fTElOVVhfTkVUX1NDTV9ICisKKyNpbmNsdWRlIDxsaW51eC9saW1pdHMuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXQuaD4KKworLyogV2VsbCwgd2Ugc2hvdWxkIGhhdmUgYXQgbGVhc3Qgb25lIGRlc2NyaXB0b3Igb3BlbgorICogdG8gYWNjZXB0IHBhc3NlZCBGRHMgOCkKKyAqLworI2RlZmluZSBTQ01fTUFYX0ZECShPUEVOX01BWC0xKQorCitzdHJ1Y3Qgc2NtX2ZwX2xpc3QKK3sKKwlpbnQJCWNvdW50OworCXN0cnVjdCBmaWxlCSpmcFtTQ01fTUFYX0ZEXTsKK307CisKK3N0cnVjdCBzY21fY29va2llCit7CisJc3RydWN0IHVjcmVkCQljcmVkczsJCS8qIFNrYiBjcmVkZW50aWFscwkqLworCXN0cnVjdCBzY21fZnBfbGlzdAkqZnA7CQkvKiBQYXNzZWQgZmlsZXMJCSovCisJdW5zaWduZWQgbG9uZwkJc2VxOwkJLyogQ29ubmVjdGlvbiBzZXFubwkqLworfTsKKworZXh0ZXJuIHZvaWQgc2NtX2RldGFjaF9mZHMoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc2NtX2Nvb2tpZSAqc2NtKTsKK2V4dGVybiB2b2lkIHNjbV9kZXRhY2hfZmRzX2NvbXBhdChzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzY21fY29va2llICpzY20pOworZXh0ZXJuIGludCBfX3NjbV9zZW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNjbV9jb29raWUgKnNjbSk7CitleHRlcm4gdm9pZCBfX3NjbV9kZXN0cm95KHN0cnVjdCBzY21fY29va2llICpzY20pOworZXh0ZXJuIHN0cnVjdCBzY21fZnBfbGlzdCAqIHNjbV9mcF9kdXAoc3RydWN0IHNjbV9mcF9saXN0ICpmcGwpOworCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHNjbV9kZXN0cm95KHN0cnVjdCBzY21fY29va2llICpzY20pCit7CisJaWYgKHNjbSAmJiBzY20tPmZwKQorCQlfX3NjbV9kZXN0cm95KHNjbSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBzY21fc2VuZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csCisJCQkgICAgICAgc3RydWN0IHNjbV9jb29raWUgKnNjbSkKK3sKKwltZW1zZXQoc2NtLCAwLCBzaXplb2YoKnNjbSkpOworCXNjbS0+Y3JlZHMudWlkID0gY3VycmVudC0+dWlkOworCXNjbS0+Y3JlZHMuZ2lkID0gY3VycmVudC0+Z2lkOworCXNjbS0+Y3JlZHMucGlkID0gY3VycmVudC0+dGdpZDsKKwlpZiAobXNnLT5tc2dfY29udHJvbGxlbiA8PSAwKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gX19zY21fc2VuZChzb2NrLCBtc2csIHNjbSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgc2NtX3JlY3Yoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLAorCQkJCXN0cnVjdCBzY21fY29va2llICpzY20sIGludCBmbGFncykKK3sKKwlpZiAoIW1zZy0+bXNnX2NvbnRyb2wpCisJeworCQlpZiAodGVzdF9iaXQoU09DS19QQVNTQ1JFRCwgJnNvY2stPmZsYWdzKSB8fCBzY20tPmZwKQorCQkJbXNnLT5tc2dfZmxhZ3MgfD0gTVNHX0NUUlVOQzsKKwkJc2NtX2Rlc3Ryb3koc2NtKTsKKwkJcmV0dXJuOworCX0KKworCWlmICh0ZXN0X2JpdChTT0NLX1BBU1NDUkVELCAmc29jay0+ZmxhZ3MpKQorCQlwdXRfY21zZyhtc2csIFNPTF9TT0NLRVQsIFNDTV9DUkVERU5USUFMUywgc2l6ZW9mKHNjbS0+Y3JlZHMpLCAmc2NtLT5jcmVkcyk7CisKKwlpZiAoIXNjbS0+ZnApCisJCXJldHVybjsKKwkKKwlzY21fZGV0YWNoX2Zkcyhtc2csIHNjbSk7Cit9CisKKworI2VuZGlmIC8qIF9fTElOVVhfTkVUX1NDTV9IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NjdHAvY29tbWFuZC5oIGIvaW5jbHVkZS9uZXQvc2N0cC9jb21tYW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJjNTI4MgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L3NjdHAvY29tbWFuZC5oCkBAIC0wLDAgKzEsMjExIEBACisvKiBTQ1RQIGtlcm5lbCByZWZlcmVuY2UgSW1wbGVtZW50YXRpb24KKyAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDEsIDIwMDQKKyAqIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIENpc2NvLCBNb3Rvcm9sYQorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTQ1RQIGtlcm5lbCByZWZlcmVuY2UgSW1wbGVtZW50YXRpb24KKyAqCisgKiBUaGVzZSBhcmUgdGhlIGRlZmluaXRpb25zIG5lZWRlZCBmb3IgdGhlIGNvbW1hbmQgb2JqZWN0LgorICoKKyAqIFRoZSBTQ1RQIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiAgaXMgZnJlZSBzb2Z0d2FyZTsKKyAqIHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mCisgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB0aGUgU0NUUCByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQKKyAqIHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZAorICogICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKgorICogd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICogU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIEdOVSBDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKiBQbGVhc2Ugc2VuZCBhbnkgYnVnIHJlcG9ydHMgb3IgZml4ZXMgeW91IG1ha2UgdG8gb25lIG9mIHRoZQorICogZm9sbG93aW5nIGVtYWlsIGFkZHJlc3NlczoKKyAqCisgKiBMYSBNb250ZSBILlAuIFlhcnJvbGwgPHBpZ2d5QGFjbS5vcmc+CisgKiBLYXJsIEtudXRzb24gPGthcmxAYXRoZW5hLmNoaWNhZ28uaWwudXM+CisgKiBBcmRlbGxlIEZhbiA8YXJkZWxsZS5mYW5AaW50ZWwuY29tPgorICogU3JpZGhhciBTYW11ZHJhbGEgPHNyaUB1cy5pYm0uY29tPgorICoKKyAqIEFueSBidWdzIHJlcG9ydGVkIGdpdmVuIHRvIHVzIHdlIHdpbGwgdHJ5IHRvIGZpeC4uLiBhbnkgZml4ZXMgc2hhcmVkIHdpbGwKKyAqIGJlIGluY29ycG9yYXRlZCBpbnRvIHRoZSBuZXh0IFNDVFAgcmVsZWFzZS4KKyAqLworCisKKyNpZm5kZWYgX19uZXRfc2N0cF9jb21tYW5kX2hfXworI2RlZmluZSBfX25ldF9zY3RwX2NvbW1hbmRfaF9fCisKKyNpbmNsdWRlIDxuZXQvc2N0cC9jb25zdGFudHMuaD4KKyNpbmNsdWRlIDxuZXQvc2N0cC9zdHJ1Y3RzLmg+CisKKwordHlwZWRlZiBlbnVtIHsKKwlTQ1RQX0NNRF9OT1AgPSAwLAkvKiBEbyBub3RoaW5nLiAqLworCVNDVFBfQ01EX05FV19BU09DLAkvKiBSZWdpc3RlciBhIG5ldyBhc3NvY2lhdGlvbi4gICovCisJU0NUUF9DTURfREVMRVRFX1RDQiwJLyogRGVsZXRlIHRoZSBjdXJyZW50IGFzc29jaWF0aW9uLiAqLworCVNDVFBfQ01EX05FV19TVEFURSwJLyogRW50ZXIgYSBuZXcgc3RhdGUuICAqLworCVNDVFBfQ01EX1JFUE9SVF9UU04sCS8qIFJlY29yZCB0aGUgYXJyaXZhbCBvZiBhIFRTTi4gICovCisJU0NUUF9DTURfR0VOX1NBQ0ssCS8qIFNlbmQgYSBTZWxlY3RpdmUgQUNLIChtYXliZSkuICAqLworCVNDVFBfQ01EX1BST0NFU1NfU0FDSywJLyogUHJvY2VzcyBhbiBpbmJvdW5kIFNBQ0suICAqLworCVNDVFBfQ01EX0dFTl9JTklUX0FDSywJLyogR2VuZXJhdGUgYW4gSU5JVCBBQ0sgY2h1bmsuICAqLworCVNDVFBfQ01EX1BFRVJfSU5JVCwJLyogUHJvY2VzcyBhIElOSVQgZnJvbSB0aGUgcGVlci4gICovCisJU0NUUF9DTURfR0VOX0NPT0tJRV9FQ0hPLCAvKiBHZW5lcmF0ZSBhIENPT0tJRSBFQ0hPIGNodW5rLiAqLworCVNDVFBfQ01EX0NIVU5LX1VMUCwJLyogU2VuZCBhIGNodW5rIHRvIHRoZSBzb2NrZXRzIGxheWVyLiAgKi8KKwlTQ1RQX0NNRF9FVkVOVF9VTFAsCS8qIFNlbmQgYSBub3RpZmljYXRpb24gdG8gdGhlIHNvY2tldHMgbGF5ZXIuICovCisJU0NUUF9DTURfUkVQTFksCQkvKiBTZW5kIGEgY2h1bmsgdG8gb3VyIHBlZXIuICAqLworCVNDVFBfQ01EX1NFTkRfUEtULAkvKiBTZW5kIGEgZnVsbCBwYWNrZXQgdG8gb3VyIHBlZXIuICAqLworCVNDVFBfQ01EX1JFVFJBTiwJLyogTWFyayBhIHRyYW5zcG9ydCBmb3IgcmV0cmFuc21pc3Npb24uICAqLworCVNDVFBfQ01EX0VDTl9DRSwgICAgICAgIC8qIERvIGRlbGF5ZWQgQ0UgcHJvY2Vzc2luZy4gICAqLworCVNDVFBfQ01EX0VDTl9FQ05FLAkvKiBEbyBkZWxheWVkIEVDTkUgcHJvY2Vzc2luZy4gKi8KKwlTQ1RQX0NNRF9FQ05fQ1dSLAkvKiBEbyBkZWxheWVkIENXUiBwcm9jZXNzaW5nLiAgKi8KKwlTQ1RQX0NNRF9USU1FUl9TVEFSVCwJLyogU3RhcnQgYSB0aW1lci4gICovCisJU0NUUF9DTURfVElNRVJfUkVTVEFSVCwJLyogUmVzdGFydCBhIHRpbWVyLiAqLworCVNDVFBfQ01EX1RJTUVSX1NUT1AsCS8qIFN0b3AgYSB0aW1lci4gKi8KKwlTQ1RQX0NNRF9DT1VOVEVSX1JFU0VULCAvKiBSZXNldCBhIGNvdW50ZXIuICovCisJU0NUUF9DTURfQ09VTlRFUl9JTkMsICAgLyogSW5jcmVtZW50IGEgY291bnRlci4gKi8KKwlTQ1RQX0NNRF9JTklUX1JFU1RBUlQsICAvKiBIaWdoIGxldmVsLCBkbyBpbml0IHRpbWVyIHdvcmsuICovCisJU0NUUF9DTURfSU5JVF9GQUlMRUQsICAgLyogSGlnaCBsZXZlbCwgZG8gaW5pdCBmYWlsdXJlIHdvcmsuICovCisJU0NUUF9DTURfUkVQT1JUX0RVUCwJLyogUmVwb3J0IGEgZHVwbGljYXRlIFRTTi4gICovCisJU0NUUF9DTURfU1RSSUtFLAkvKiBNYXJrIGEgc3RyaWtlIGFnYWluc3QgYSB0cmFuc3BvcnQuICAqLworCVNDVFBfQ01EX1RSQU5TTUlULCAgICAgIC8qIFRyYW5zbWl0IHRoZSBvdXRxdWV1ZS4gKi8KKwlTQ1RQX0NNRF9IQl9USU1FUlNfU1RBUlQsICAgIC8qIFN0YXJ0IHRoZSBoZWFydGJlYXQgdGltZXJzLiAqLworCVNDVFBfQ01EX0hCX1RJTUVSX1VQREFURSwgICAgLyogVXBkYXRlIGEgaGVhcnRiZWF0IHRpbWVycy4gICovCisJU0NUUF9DTURfSEJfVElNRVJTX1NUT1AsICAgICAvKiBTdG9wIHRoZSBoZWFydGJlYXQgdGltZXJzLiAgKi8KKwlTQ1RQX0NNRF9UUkFOU1BPUlRfUkVTRVQsICAgIC8qIFJlc2V0IHRoZSBzdGF0dXMgb2YgYSB0cmFuc3BvcnQuICovCisJU0NUUF9DTURfVFJBTlNQT1JUX09OLCAgICAgICAvKiBNYXJrIHRoZSB0cmFuc3BvcnQgYXMgYWN0aXZlLiAqLworCVNDVFBfQ01EX1JFUE9SVF9FUlJPUiwgICAvKiBQYXNzIHRoaXMgZXJyb3IgYmFjayBvdXQgb2YgdGhlIHNtLiAqLworCVNDVFBfQ01EX1JFUE9SVF9CQURfVEFHLCAvKiBWZXJpZmljYXRpb24gdGFncyBkaWRuJ3QgbWF0Y2guICovCisJU0NUUF9DTURfUFJPQ0VTU19DVFNOLCAgIC8qIFNpZGVlZmZlY3QgZnJvbSBzaHV0ZG93bi4gKi8KKwlTQ1RQX0NNRF9BU1NPQ19GQUlMRUQsCSAvKiBIYW5kbGUgYXNzb2NpYXRpb24gZmFpbHVyZS4gKi8KKwlTQ1RQX0NNRF9ESVNDQVJEX1BBQ0tFVCwgLyogRGlzY2FyZCB0aGUgd2hvbGUgcGFja2V0LiAqLworCVNDVFBfQ01EX0dFTl9TSFVURE9XTiwgICAvKiBHZW5lcmF0ZSBhIFNIVVRET1dOIGNodW5rLiAqLworCVNDVFBfQ01EX1VQREFURV9BU1NPQywgICAvKiBVcGRhdGUgYXNzb2NpYXRpb24gaW5mb3JtYXRpb24uICovCisJU0NUUF9DTURfUFVSR0VfT1VUUVVFVUUsIC8qIFB1cmdlIGFsbCBkYXRhIHdhaXRpbmcgdG8gYmUgc2VudC4gKi8KKwlTQ1RQX0NNRF9TRVRVUF9UMiwgICAgICAgLyogSGktbGV2ZWwsIHNldHVwIFQyLXNodXRkb3duIHBhcm1zLiAgKi8KKwlTQ1RQX0NNRF9SVE9fUEVORElORywJIC8qIFNldCB0cmFuc3BvcnQncyBydG9fcGVuZGluZy4gKi8KKwlTQ1RQX0NNRF9QQVJUX0RFTElWRVIsCSAvKiBQYXJ0aWFsIGRhdGEgZGVsaXZlcnkgY29uc2lkZXJhdGlvbnMuICovCisJU0NUUF9DTURfUkVORUdFLCAgICAgICAgIC8qIFJlbmVnZSBkYXRhIG9uIGFuIGFzc29jaWF0aW9uLiAqLworCVNDVFBfQ01EX1NFVFVQX1Q0LAkgLyogQURESVAsIHNldHVwIFQ0IFJUTyB0aW1lciBwYXJtcy4gKi8KKwlTQ1RQX0NNRF9QUk9DRVNTX09QRVJSLCAgLyogUHJvY2VzcyBhbiBFUlJPUiBjaHVuay4gKi8KKwlTQ1RQX0NNRF9SRVBPUlRfRldEVFNOLAkgLyogUmVwb3J0IG5ldyBjdW11bGF0aXZlIFRTTiBBY2suICovCisJU0NUUF9DTURfUFJPQ0VTU19GV0RUU04sIC8qIFNraXBzIHdlcmUgcmVwb3J0ZWQsIHNvIHByb2Nlc3MgZnVydGhlci4gKi8KKwlTQ1RQX0NNRF9DTEVBUl9JTklUX1RBRywgLyogQ2xlYXJzIGFzc29jaWF0aW9uIHBlZXIncyBpbml0dGFnLiAqLworCVNDVFBfQ01EX0RFTF9OT05fUFJJTUFSWSwgLyogUmVtb3ZlcyBub24tcHJpbWFyeSBwZWVyIHRyYW5zcG9ydHMuICovCisJU0NUUF9DTURfVDNfUlRYX1RJTUVSU19TVE9QLCAvKiBTdG9wcyBUMy1ydHggcGVuZGluZyB0aW1lcnMgKi8KKwlTQ1RQX0NNRF9GT1JDRV9QUklNX1JFVFJBTiwgIC8qIEZvcmNlcyByZXRyYW5zLiBvdmVyIHByaW1hcnkgcGF0aC4gKi8KKwlTQ1RQX0NNRF9MQVNUCit9IHNjdHBfdmVyYl90OworCisjZGVmaW5lIFNDVFBfQ01EX01BWAkJKFNDVFBfQ01EX0xBU1QgLSAxKQorI2RlZmluZSBTQ1RQX0NNRF9OVU1fVkVSQlMJKFNDVFBfQ01EX01BWCArIDEpCisKKy8qIEhvdyBtYW55IGNvbW1hbmRzIGNhbiB5b3UgcHV0IGluIGFuIHNjdHBfY21kX3NlcV90PworICogVGhpcyBpcyBhIHJhdGhlciBhcmJpdHJhcnkgbnVtYmVyLCBpZGVhbGx5IGRlcml2ZWQgZnJvbSBhIGNhcmVmdWwKKyAqIGFuYWx5c2lzIG9mIHRoZSBzdGF0ZSBmdW5jdGlvbnMsIGJ1dCBpbiByZWFsaXR5IGp1c3QgdGFrZW4gZnJvbQorICogdGhpbiBhaXIgaW4gdGhlIGhvcGVzIG90aGF0IHdlIGRvbid0IHRyaWdnZXIgYSBrZXJuZWwgcGFuaWMuCisgKi8KKyNkZWZpbmUgU0NUUF9NQVhfTlVNX0NPTU1BTkRTIDE0CisKK3R5cGVkZWYgdW5pb24geworCV9fczMyIGkzMjsKKwlfX3UzMiB1MzI7CisJX191MTYgdTE2OworCV9fdTggdTg7CisJaW50IGVycm9yOworCXNjdHBfc3RhdGVfdCBzdGF0ZTsKKwlzY3RwX2V2ZW50X3RpbWVvdXRfdCB0bzsKKwlzY3RwX2NvdW50ZXJfdCBjb3VudGVyOworCXZvaWQgKnB0cjsKKwlzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bms7CisJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7CisJc3RydWN0IHNjdHBfdHJhbnNwb3J0ICp0cmFuc3BvcnQ7CisJc3RydWN0IHNjdHBfYmluZF9hZGRyICpicDsKKwlzY3RwX2luaXRfY2h1bmtfdCAqaW5pdDsKKwlzdHJ1Y3Qgc2N0cF91bHBldmVudCAqdWxwZXZlbnQ7CisJc3RydWN0IHNjdHBfcGFja2V0ICpwYWNrZXQ7CisJc2N0cF9zYWNraGRyX3QgKnNhY2toOworfSBzY3RwX2FyZ190OworCisvKiBXZSBhcmUgc2ltdWxhdGluZyBNTCB0eXBlIGNvbnN0cnVjdG9ycyBoZXJlLgorICoKKyAqIFNDVFBfQVJHX0NPTlNUUlVDVE9SKE5BTUUsIFRZUEUsIEVMVCkgYnVpbGRzIGEgZnVuY3Rpb24gY2FsbGVkCisgKiBTQ1RQX05BTUUoKSB3aGljaCB0YWtlcyBhbiBhcmd1bWVudCBvZiB0eXBlIFRZUEUgYW5kIHJldHVybnMgYW4KKyAqIHNjdHBfYXJnX3QuICBJdCBkb2VzIHRoaXMgYnkgaW5zZXJ0aW5nIHRoZSBzb2xlIGFyZ3VtZW50IGludG8gdGhlCisgKiBFTFQgdW5pb24gZWxlbWVudCBvZiBhIGxvY2FsIHNjdHBfYXJnX3QuCisgKgorICogRS5nLiwgU0NUUF9BUkdfQ09OU1RSVUNUT1IoSTMyLCBfX3MzMiwgaTMyKSBidWlsZHMgU0NUUF9JMzIoYXJnKSwKKyAqIHdoaWNoIHRha2VzIGFuIF9fczMyIGFuZCByZXR1cm5zIGEgc2N0cF9hcmdfdCBjb250YWluaW5nIHRoZQorICogX19zMzIuICBTbywgYWZ0ZXIgZm9vID0gU0NUUF9JMzIoYXJnKSwgZm9vLmkzMiA9PSBhcmcuCisgKi8KK3N0YXRpYyBpbmxpbmUgc2N0cF9hcmdfdCBTQ1RQX05VTEwodm9pZCkKK3sKKwlzY3RwX2FyZ190IHJldHZhbDsgcmV0dmFsLnB0ciA9IE5VTEw7IHJldHVybiByZXR2YWw7Cit9CitzdGF0aWMgaW5saW5lIHNjdHBfYXJnX3QgU0NUUF9OT0ZPUkNFKHZvaWQpCit7CisJc2N0cF9hcmdfdCByZXR2YWw7IHJldHZhbC5pMzIgPSAwOyByZXR1cm4gcmV0dmFsOworfQorc3RhdGljIGlubGluZSBzY3RwX2FyZ190IFNDVFBfRk9SQ0Uodm9pZCkKK3sKKwlzY3RwX2FyZ190IHJldHZhbDsgcmV0dmFsLmkzMiA9IDE7IHJldHVybiByZXR2YWw7Cit9CisKKyNkZWZpbmUgU0NUUF9BUkdfQ09OU1RSVUNUT1IobmFtZSwgdHlwZSwgZWx0KSBcCitzdGF0aWMgaW5saW5lIHNjdHBfYXJnX3QJXAorU0NUUF8jIyBuYW1lICh0eXBlIGFyZykJCVwKK3sgc2N0cF9hcmdfdCByZXR2YWw7IHJldHZhbC5lbHQgPSBhcmc7IHJldHVybiByZXR2YWw7IH0KKworU0NUUF9BUkdfQ09OU1RSVUNUT1IoSTMyLAlfX3MzMiwgaTMyKQorU0NUUF9BUkdfQ09OU1RSVUNUT1IoVTMyLAlfX3UzMiwgdTMyKQorU0NUUF9BUkdfQ09OU1RSVUNUT1IoVTE2LAlfX3UxNiwgdTE2KQorU0NUUF9BUkdfQ09OU1RSVUNUT1IoVTgsCV9fdTgsIHU4KQorU0NUUF9BUkdfQ09OU1RSVUNUT1IoRVJST1IsICAgICBpbnQsIGVycm9yKQorU0NUUF9BUkdfQ09OU1RSVUNUT1IoU1RBVEUsCXNjdHBfc3RhdGVfdCwgc3RhdGUpCitTQ1RQX0FSR19DT05TVFJVQ1RPUihDT1VOVEVSLAlzY3RwX2NvdW50ZXJfdCwgY291bnRlcikKK1NDVFBfQVJHX0NPTlNUUlVDVE9SKFRPLAlzY3RwX2V2ZW50X3RpbWVvdXRfdCwgdG8pCitTQ1RQX0FSR19DT05TVFJVQ1RPUihQVFIsCXZvaWQgKiwgcHRyKQorU0NUUF9BUkdfQ09OU1RSVUNUT1IoQ0hVTkssCXN0cnVjdCBzY3RwX2NodW5rICosIGNodW5rKQorU0NUUF9BUkdfQ09OU1RSVUNUT1IoQVNPQywJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKiwgYXNvYykKK1NDVFBfQVJHX0NPTlNUUlVDVE9SKFRSQU5TUE9SVCwJc3RydWN0IHNjdHBfdHJhbnNwb3J0ICosIHRyYW5zcG9ydCkKK1NDVFBfQVJHX0NPTlNUUlVDVE9SKEJBLAlzdHJ1Y3Qgc2N0cF9iaW5kX2FkZHIgKiwgYnApCitTQ1RQX0FSR19DT05TVFJVQ1RPUihQRUVSX0lOSVQsCXNjdHBfaW5pdF9jaHVua190ICosIGluaXQpCitTQ1RQX0FSR19DT05TVFJVQ1RPUihVTFBFVkVOVCwgIHN0cnVjdCBzY3RwX3VscGV2ZW50ICosIHVscGV2ZW50KQorU0NUUF9BUkdfQ09OU1RSVUNUT1IoUEFDS0VULAlzdHJ1Y3Qgc2N0cF9wYWNrZXQgKiwgcGFja2V0KQorU0NUUF9BUkdfQ09OU1RSVUNUT1IoU0FDS0gsCXNjdHBfc2Fja2hkcl90ICosIHNhY2toKQorCit0eXBlZGVmIHN0cnVjdCB7CisJc2N0cF9hcmdfdCBvYmo7CisJc2N0cF92ZXJiX3QgdmVyYjsKK30gc2N0cF9jbWRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXNjdHBfY21kX3QgY21kc1tTQ1RQX01BWF9OVU1fQ09NTUFORFNdOworCV9fdTggbmV4dF9mcmVlX3Nsb3Q7CisJX191OCBuZXh0X2NtZDsKK30gc2N0cF9jbWRfc2VxX3Q7CisKKworLyogSW5pdGlhbGl6ZSBhIGJsb2NrIG9mIG1lbW9yeSBhcyBhIGNvbW1hbmQgc2VxdWVuY2UuCisgKiBSZXR1cm4gMCBpZiB0aGUgaW5pdGlhbGl6YXRpb24gZmFpbHMuCisgKi8KK2ludCBzY3RwX2luaXRfY21kX3NlcShzY3RwX2NtZF9zZXFfdCAqc2VxKTsKKworLyogQWRkIGEgY29tbWFuZCB0byBhbiBzY3RwX2NtZF9zZXFfdC4KKyAqIFJldHVybiAwIGlmIHRoZSBjb21tYW5kIHNlcXVlbmNlIGlzIGZ1bGwuCisgKgorICogVXNlIHRoZSBTQ1RQXyogY29uc3RydWN0b3JzIGRlZmluZWQgYnkgU0NUUF9BUkdfQ09OU1RSVUNUT1IoKSBhYm92ZQorICogdG8gd3JhcCBkYXRhIHdoaWNoIGdvZXMgaW4gdGhlIG9iaiBhcmd1bWVudC4KKyAqLworaW50IHNjdHBfYWRkX2NtZChzY3RwX2NtZF9zZXFfdCAqc2VxLCBzY3RwX3ZlcmJfdCB2ZXJiLCBzY3RwX2FyZ190IG9iaik7CisKKy8qIFJldHVybiB0aGUgbmV4dCBjb21tYW5kIHN0cnVjdHVyZSBpbiBhbiBzY3RwX2NtZF9zZXEuCisgKiBSZXR1cm4gTlVMTCBhdCB0aGUgZW5kIG9mIHRoZSBzZXF1ZW5jZS4KKyAqLworc2N0cF9jbWRfdCAqc2N0cF9uZXh0X2NtZChzY3RwX2NtZF9zZXFfdCAqc2VxKTsKKworI2VuZGlmIC8qIF9fbmV0X3NjdHBfY29tbWFuZF9oX18gKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2N0cC9jb25zdGFudHMuaCBiL2luY2x1ZGUvbmV0L3NjdHAvY29uc3RhbnRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI3NmMwZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L3NjdHAvY29uc3RhbnRzLmgKQEAgLTAsMCArMSw0MzIgQEAKKy8qIFNDVFAga2VybmVsIHJlZmVyZW5jZSBJbXBsZW1lbnRhdGlvbgorICogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwMSwgMjAwNAorICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDAgQ2lzY28sIEluYy4KKyAqIENvcHlyaWdodCAoYykgMTk5OS0yMDAxIE1vdG9yb2xhLCBJbmMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEgSW50ZWwgQ29ycC4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgU0NUUCBrZXJuZWwgcmVmZXJlbmNlIEltcGxlbWVudGF0aW9uCisgKgorICogVGhlIFNDVFAgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIGlzIGZyZWUgc29mdHdhcmU7CisgKiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZgorICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhlIFNDVFAgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQKKyAqIHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZAorICogICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKgorICogd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICogU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIEdOVSBDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKiBQbGVhc2Ugc2VuZCBhbnkgYnVnIHJlcG9ydHMgb3IgZml4ZXMgeW91IG1ha2UgdG8gdGhlCisgKiBlbWFpbCBhZGRyZXNzKGVzKToKKyAqICAgIGxrc2N0cCBkZXZlbG9wZXJzIDxsa3NjdHAtZGV2ZWxvcGVyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+CisgKgorICogT3Igc3VibWl0IGEgYnVnIHJlcG9ydCB0aHJvdWdoIHRoZSBmb2xsb3dpbmcgd2Vic2l0ZToKKyAqICAgIGh0dHA6Ly93d3cuc2YubmV0L3Byb2plY3RzL2xrc2N0cAorICoKKyAqIFdyaXR0ZW4gb3IgbW9kaWZpZWQgYnk6CisgKiAgIExhIE1vbnRlIEguUC4gWWFycm9sbCA8cGlnZ3lAYWNtLm9yZz4KKyAqICAgS2FybCBLbnV0c29uICAgICAgICAgIDxrYXJsQGF0aGVuYS5jaGljYWdvLmlsLnVzPgorICogICBSYW5kYWxsIFN0ZXdhcnQgICAgICAgPHJhbmRhbGxAc3Rld2FydC5jaGljYWdvLmlsLnVzPgorICogICBLZW4gTW9ybmVhdSAgICAgICAgICAgPGttb3JuZWF1QGNpc2NvLmNvbT4KKyAqICAgUWlhb2JpbmcgWGllICAgICAgICAgIDxxeGllMUBtb3Rvcm9sYS5jb20+CisgKiAgIFhpbmdhbmcgR3VvICAgICAgICAgICA8eGluZ2FuZy5ndW9AaW50ZWwuY29tPgorICogICBTcmlkaGFyIFNhbXVkcmFsYSAgICAgPHNhbXVkcmFsYUB1cy5pYm0uY29tPgorICogICBEYWlzeSBDaGFuZyAgICAgICAgICAgPGRhaXN5Y0B1cy5pYm0uY29tPgorICoKKyAqIEFueSBidWdzIHJlcG9ydGVkIGdpdmVuIHRvIHVzIHdlIHdpbGwgdHJ5IHRvIGZpeC4uLiBhbnkgZml4ZXMgc2hhcmVkIHdpbGwKKyAqIGJlIGluY29ycG9yYXRlZCBpbnRvIHRoZSBuZXh0IFNDVFAgcmVsZWFzZS4KKyAqLworCisjaWZuZGVmIF9fc2N0cF9jb25zdGFudHNfaF9fCisjZGVmaW5lIF9fc2N0cF9jb25zdGFudHNfaF9fCisKKyNpbmNsdWRlIDxsaW51eC90Y3AuaD4gIC8qIEZvciBUQ1Agc3RhdGVzIHVzZWQgaW4gc2N0cF9zb2NrX3N0YXRlX3QgKi8KKyNpbmNsdWRlIDxsaW51eC9zY3RwLmg+CisjaW5jbHVkZSA8bGludXgvaXB2Ni5oPiAvKiBGb3IgaXB2Nmhkci4gKi8KKyNpbmNsdWRlIDxuZXQvc2N0cC91c2VyLmg+CisKKy8qIFZhbHVlIHVzZWQgZm9yIHN0cmVhbSBuZWdvdGlhdGlvbi4gKi8KK2VudW0geyBTQ1RQX01BWF9TVFJFQU0gPSAweGZmZmYgfTsKK2VudW0geyBTQ1RQX0RFRkFVTFRfT1VUU1RSRUFNUyA9IDEwIH07CitlbnVtIHsgU0NUUF9ERUZBVUxUX0lOU1RSRUFNUyA9IFNDVFBfTUFYX1NUUkVBTSB9OworCisvKiBTaW5jZSBDSURzIGFyZSBzcGFyc2UsIHdlIG5lZWQgYWxsIGZvdXIgb2YgdGhlIGZvbGxvd2luZworICogc3ltYm9scy4gIENJRHMgYXJlIGRlbnNlIHRocm91Z2ggU0NUUF9DSURfQkFTRV9NQVguCisgKi8KKyNkZWZpbmUgU0NUUF9DSURfQkFTRV9NQVgJCVNDVFBfQ0lEX1NIVVRET1dOX0NPTVBMRVRFCisjZGVmaW5lIFNDVFBfQ0lEX01BWAkJCVNDVFBfQ0lEX0FTQ09ORl9BQ0sKKworI2RlZmluZSBTQ1RQX05VTV9CQVNFX0NIVU5LX1RZUEVTCShTQ1RQX0NJRF9CQVNFX01BWCArIDEpCisjZGVmaW5lIFNDVFBfTlVNX0NIVU5LX1RZUEVTCQkoU0NUUF9OVU1fQkFTRV9DSFVOS1RZUEVTICsgMikKKworI2RlZmluZSBTQ1RQX05VTV9BRERJUF9DSFVOS19UWVBFUwkyCisKKyNkZWZpbmUgU0NUUF9OVU1fUFJTQ1RQX0NIVU5LX1RZUEVTCTEKKworLyogVGhlc2UgYXJlIHRoZSBkaWZmZXJlbnQgZmxhdm91cnMgb2YgZXZlbnQuICAqLwordHlwZWRlZiBlbnVtIHsKKworCVNDVFBfRVZFTlRfVF9DSFVOSyA9IDEsCisJU0NUUF9FVkVOVF9UX1RJTUVPVVQsCisJU0NUUF9FVkVOVF9UX09USEVSLAorCVNDVFBfRVZFTlRfVF9QUklNSVRJVkUKKworfSBzY3RwX2V2ZW50X3Q7CisKKyNkZWZpbmUgU0NUUF9FVkVOVF9UX01BWCBTQ1RQX0VWRU5UX1RfUFJJTUlUSVZFCisjZGVmaW5lIFNDVFBfRVZFTlRfVF9OVU0gKFNDVFBfRVZFTlRfVF9NQVggKyAxKQorCisvKiBBcyBhIGNvbnZlbmllbmNlIGZvciB0aGUgc3RhdGUgbWFjaGluZSwgd2UgYXBwZW5kIFNDVFBfRVZFTlRfKiBhbmQKKyAqIFNDVFBfVUxQXyogdG8gdGhlIGxpc3Qgb2YgcG9zc2libGUgY2h1bmtzLgorICovCisKK3R5cGVkZWYgZW51bSB7CisJU0NUUF9FVkVOVF9USU1FT1VUX05PTkUgPSAwLAorCVNDVFBfRVZFTlRfVElNRU9VVF9UMV9DT09LSUUsCisJU0NUUF9FVkVOVF9USU1FT1VUX1QxX0lOSVQsCisJU0NUUF9FVkVOVF9USU1FT1VUX1QyX1NIVVRET1dOLAorCVNDVFBfRVZFTlRfVElNRU9VVF9UM19SVFgsCisJU0NUUF9FVkVOVF9USU1FT1VUX1Q0X1JUTywKKwlTQ1RQX0VWRU5UX1RJTUVPVVRfVDVfU0hVVERPV05fR1VBUkQsCisJU0NUUF9FVkVOVF9USU1FT1VUX0hFQVJUQkVBVCwKKwlTQ1RQX0VWRU5UX1RJTUVPVVRfU0FDSywKKwlTQ1RQX0VWRU5UX1RJTUVPVVRfQVVUT0NMT1NFLAorfSBzY3RwX2V2ZW50X3RpbWVvdXRfdDsKKworI2RlZmluZSBTQ1RQX0VWRU5UX1RJTUVPVVRfTUFYCQlTQ1RQX0VWRU5UX1RJTUVPVVRfQVVUT0NMT1NFCisjZGVmaW5lIFNDVFBfTlVNX1RJTUVPVVRfVFlQRVMJCShTQ1RQX0VWRU5UX1RJTUVPVVRfTUFYICsgMSkKKwordHlwZWRlZiBlbnVtIHsKKwlTQ1RQX0VWRU5UX05PX1BFTkRJTkdfVFNOID0gMCwKKwlTQ1RQX0VWRU5UX0lDTVBfUFJPVE9fVU5SRUFDSCwKK30gc2N0cF9ldmVudF9vdGhlcl90OworCisjZGVmaW5lIFNDVFBfRVZFTlRfT1RIRVJfTUFYCQlTQ1RQX0VWRU5UX0lDTVBfUFJPVE9fVU5SRUFDSAorI2RlZmluZSBTQ1RQX05VTV9PVEhFUl9UWVBFUwkJKFNDVFBfRVZFTlRfT1RIRVJfTUFYICsgMSkKKworLyogVGhlc2UgYXJlIHByaW1pdGl2ZSByZXF1ZXN0cyBmcm9tIHRoZSBVTFAuICAqLwordHlwZWRlZiBlbnVtIHsKKwlTQ1RQX1BSSU1JVElWRV9BU1NPQ0lBVEUgPSAwLAorCVNDVFBfUFJJTUlUSVZFX1NIVVRET1dOLAorCVNDVFBfUFJJTUlUSVZFX0FCT1JULAorCVNDVFBfUFJJTUlUSVZFX1NFTkQsCisJU0NUUF9QUklNSVRJVkVfUkVRVUVTVEhFQVJUQkVBVCwKKwlTQ1RQX1BSSU1JVElWRV9BU0NPTkYsCit9IHNjdHBfZXZlbnRfcHJpbWl0aXZlX3Q7CisKKyNkZWZpbmUgU0NUUF9FVkVOVF9QUklNSVRJVkVfTUFYCVNDVFBfUFJJTUlUSVZFX0FTQ09ORgorI2RlZmluZSBTQ1RQX05VTV9QUklNSVRJVkVfVFlQRVMJKFNDVFBfRVZFTlRfUFJJTUlUSVZFX01BWCArIDEpCisKKy8qIFdlIGRlZmluZSBoZXJlIGEgdXRpbGl0eSB0eXBlIGZvciBtYW5pcHVsYXRpbmcgc3VidHlwZXMuCisgKiBUaGUgc3VidHlwZSBjb25zdHJ1Y3RvcnMgYWxsIHdvcmsgbGlrZSB0aGlzOgorICoKKyAqIAlzY3RwX3N1YnR5cGVfdCBmb28gPSBTQ1RQX1NUX0NIVU5LKFNDVFBfQ0lEX0lOSVQpOworICovCisKK3R5cGVkZWYgdW5pb24geworCXNjdHBfY2lkX3QgY2h1bms7CisJc2N0cF9ldmVudF90aW1lb3V0X3QgdGltZW91dDsKKwlzY3RwX2V2ZW50X290aGVyX3Qgb3RoZXI7CisJc2N0cF9ldmVudF9wcmltaXRpdmVfdCBwcmltaXRpdmU7Cit9IHNjdHBfc3VidHlwZV90OworCisjZGVmaW5lIFNDVFBfU1VCVFlQRV9DT05TVFJVQ1RPUihfbmFtZSwgX3R5cGUsIF9lbHQpIFwKK3N0YXRpYyBpbmxpbmUgc2N0cF9zdWJ0eXBlX3QJXAorU0NUUF9TVF8jIyBfbmFtZSAoX3R5cGUgX2FyZykJCVwKK3sgc2N0cF9zdWJ0eXBlX3QgX3JldHZhbDsgX3JldHZhbC5fZWx0ID0gX2FyZzsgcmV0dXJuIF9yZXR2YWw7IH0KKworU0NUUF9TVUJUWVBFX0NPTlNUUlVDVE9SKENIVU5LLAkJc2N0cF9jaWRfdCwJCWNodW5rKQorU0NUUF9TVUJUWVBFX0NPTlNUUlVDVE9SKFRJTUVPVVQsCXNjdHBfZXZlbnRfdGltZW91dF90LAl0aW1lb3V0KQorU0NUUF9TVUJUWVBFX0NPTlNUUlVDVE9SKE9USEVSLAkJc2N0cF9ldmVudF9vdGhlcl90LAlvdGhlcikKK1NDVFBfU1VCVFlQRV9DT05TVFJVQ1RPUihQUklNSVRJVkUsCXNjdHBfZXZlbnRfcHJpbWl0aXZlX3QsCXByaW1pdGl2ZSkKKworCisjZGVmaW5lIHNjdHBfY2h1bmtfaXNfY29udHJvbChhKSAoYS0+Y2h1bmtfaGRyLT50eXBlICE9IFNDVFBfQ0lEX0RBVEEpCisjZGVmaW5lIHNjdHBfY2h1bmtfaXNfZGF0YShhKSAoYS0+Y2h1bmtfaGRyLT50eXBlID09IFNDVFBfQ0lEX0RBVEEpCisKKy8qIENhbGN1bGF0ZSB0aGUgYWN0dWFsIGRhdGEgc2l6ZSBpbiBhIGRhdGEgY2h1bmsgKi8KKyNkZWZpbmUgU0NUUF9EQVRBX1NORFNJWkUoYykgKChpbnQpKCh1bnNpZ25lZCBsb25nKShjLT5jaHVua19lbmQpXAorCQkgICAgICAgCQktICh1bnNpZ25lZCBsb25nKShjLT5jaHVua19oZHIpXAorCQkJCS0gc2l6ZW9mKHNjdHBfZGF0YV9jaHVua190KSkpCisKKyNkZWZpbmUgU0NUUF9NQVhfRVJST1JfQ0FVU0UgIFNDVFBfRVJST1JfTk9ORVhJU1RfSVAKKyNkZWZpbmUgU0NUUF9OVU1fRVJST1JfQ0FVU0UgIDEwCisKKy8qIEludGVybmFsIGVycm9yIGNvZGVzICovCit0eXBlZGVmIGVudW0geworCisJU0NUUF9JRVJST1JfTk9fRVJST1IJICAgICAgICA9IDAsCisJU0NUUF9JRVJST1JfQkFTRQkJPSAxMDAwLAorCVNDVFBfSUVSUk9SX05PX0NPT0tJRSwKKwlTQ1RQX0lFUlJPUl9CQURfU0lHLAorCVNDVFBfSUVSUk9SX1NUQUxFX0NPT0tJRSwKKwlTQ1RQX0lFUlJPUl9OT01FTSwKKwlTQ1RQX0lFUlJPUl9NQUxGT1JNRUQsCisJU0NUUF9JRVJST1JfQkFEX1RBRywKKwlTQ1RQX0lFUlJPUl9CSUdfR0FQLAorCVNDVFBfSUVSUk9SX0RVUF9UU04sCisJU0NUUF9JRVJST1JfSElHSF9UU04sCisJU0NUUF9JRVJST1JfSUdOT1JFX1RTTiwKKwlTQ1RQX0lFUlJPUl9OT19EQVRBLAorCVNDVFBfSUVSUk9SX0JBRF9TVFJFQU0sCisJU0NUUF9JRVJST1JfQkFEX1BPUlRTLAorCit9IHNjdHBfaWVycm9yX3Q7CisKKworCisvKiBTQ1RQIHN0YXRlIGRlZmluZXMgZm9yIGludGVybmFsIHN0YXRlIG1hY2hpbmUgKi8KK3R5cGVkZWYgZW51bSB7CisKKwlTQ1RQX1NUQVRFX0VNUFRZCQk9IDAsCisJU0NUUF9TVEFURV9DTE9TRUQJCT0gMSwKKwlTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUCQk9IDIsCisJU0NUUF9TVEFURV9DT09LSUVfRUNIT0VECT0gMywKKwlTQ1RQX1NUQVRFX0VTVEFCTElTSEVECQk9IDQsCisJU0NUUF9TVEFURV9TSFVURE9XTl9QRU5ESU5HCT0gNSwKKwlTQ1RQX1NUQVRFX1NIVVRET1dOX1NFTlQJPSA2LAorCVNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQJPSA3LAorCVNDVFBfU1RBVEVfU0hVVERPV05fQUNLX1NFTlQJPSA4LAorCit9IHNjdHBfc3RhdGVfdDsKKworI2RlZmluZSBTQ1RQX1NUQVRFX01BWAkJCVNDVFBfU1RBVEVfU0hVVERPV05fQUNLX1NFTlQKKyNkZWZpbmUgU0NUUF9TVEFURV9OVU1fU1RBVEVTCQkoU0NUUF9TVEFURV9NQVggKyAxKQorCisvKiBUaGVzZSBhcmUgdmFsdWVzIGZvciBzay0+c3RhdGUuCisgKiBGb3IgYSBVRFAtc3R5bGUgU0NUUCBzb2NrZXQsIHRoZSBzdGF0ZXMgYXJlIGRlZmluZWQgYXMgZm9sbG93cworICogLSBBIHNvY2tldCBpbiBTQ1RQX1NTX0NMT1NFRCBzdGF0ZSBpbmRpY2F0ZXMgdGhhdCBpdCBpcyBub3Qgd2lsbGluZyB0bworICogICBhY2NlcHQgbmV3IGFzc29jaWF0aW9ucywgYnV0IGl0IGNhbiBpbml0aWF0ZSB0aGUgY3JlYXRpb24gb2YgbmV3IG9uZXMuCisgKiAtIEEgc29ja2V0IGluIFNDVFBfU1NfTElTVEVOSU5HIHN0YXRlIGluZGljYXRlcyB0aGF0IGl0IGlzIHdpbGxpbmcgdG8KKyAqICAgYWNjZXB0IG5ldyAgYXNzb2NpYXRpb25zIGFuZCBjYW4gaW5pdGlhdGUgdGhlIGNyZWF0aW9uIG9mIG5ldyBvbmVzLgorICogLSBBIHNvY2tldCBpbiBTQ1RQX1NTX0VTVEFCTElTSEVEIHN0YXRlIGluZGljYXRlcyB0aGF0IGl0IGlzIGEgcGVlbGVkIG9mZgorICogICBzb2NrZXQgd2l0aCBvbmUgYXNzb2NpYXRpb24uCisgKiBGb3IgYSBUQ1Atc3R5bGUgU0NUUCBzb2NrZXQsIHRoZSBzdGF0ZXMgYXJlIGRlZmluZWQgYXMgZm9sbG93cworICogLSBBIHNvY2tldCBpbiBTQ1RQX1NTX0NMT1NFRCBzdGF0ZSBpbmRpY2F0ZXMgdGhhdCBpdCBpcyBub3Qgd2lsbGluZyB0bworICogICBhY2NlcHQgbmV3IGFzc29jaWF0aW9ucywgYnV0IGl0IGNhbiBpbml0aWF0ZSB0aGUgY3JlYXRpb24gb2YgbmV3IG9uZXMuCisgKiAtIEEgc29ja2V0IGluIFNDVFBfU1NfTElTVEVOSU5HIHN0YXRlIGluZGljYXRlcyB0aGF0IGl0IGlzIHdpbGxpbmcgdG8KKyAqICAgYWNjZXB0IG5ldyBhc3NvY2lhdGlvbnMsIGJ1dCBjYW5ub3QgaW5pdGlhdGUgdGhlIGNyZWF0aW9uIG9mIG5ldyBvbmVzLgorICogLSBBIHNvY2tldCBpbiBTQ1RQX1NTX0VTVEFCTElTSEVEIHN0YXRlIGluZGljYXRlcyB0aGF0IGl0IGhhcyBhIHNpbmdsZSAKKyAqICAgYXNzb2NpYXRpb24uCisgKi8KK3R5cGVkZWYgZW51bSB7CisJU0NUUF9TU19DTE9TRUQgICAgICAgICA9IFRDUF9DTE9TRSwKKwlTQ1RQX1NTX0xJU1RFTklORyAgICAgID0gVENQX0xJU1RFTiwKKwlTQ1RQX1NTX0VTVEFCTElTSElORyAgID0gVENQX1NZTl9TRU5ULAorCVNDVFBfU1NfRVNUQUJMSVNIRUQgICAgPSBUQ1BfRVNUQUJMSVNIRUQsCisJU0NUUF9TU19ESVNDT05ORUNUSU5HICA9IFRDUF9DTE9TSU5HLAorfSBzY3RwX3NvY2tfc3RhdGVfdDsKKworLyogVGhlc2UgZnVuY3Rpb25zIG1hcCB2YXJpb3VzIHR5cGUgdG8gcHJpbnRhYmxlIG5hbWVzLiAgKi8KK2NvbnN0IGNoYXIgKnNjdHBfY25hbWUoY29uc3Qgc2N0cF9zdWJ0eXBlX3QpOwkvKiBjaHVuayB0eXBlcyAqLworY29uc3QgY2hhciAqc2N0cF9vbmFtZShjb25zdCBzY3RwX3N1YnR5cGVfdCk7CS8qIG90aGVyIGV2ZW50cyAqLworY29uc3QgY2hhciAqc2N0cF90bmFtZShjb25zdCBzY3RwX3N1YnR5cGVfdCk7CS8qIHRpbWVvdXRzICovCitjb25zdCBjaGFyICpzY3RwX3BuYW1lKGNvbnN0IHNjdHBfc3VidHlwZV90KTsJLyogcHJpbWl0aXZlcyAqLworCisvKiBUaGlzIGlzIGEgdGFibGUgb2YgcHJpbnRhYmxlIG5hbWVzIG9mIHNjdHBfc3RhdGVfdCdzLiAgKi8KK2V4dGVybiBjb25zdCBjaGFyICpzY3RwX3N0YXRlX3RibFtdLCAqc2N0cF9ldnR0eXBlX3RibFtdLCAqc2N0cF9zdGF0dXNfdGJsW107CisKKy8qIE1heGltdW0gY2h1bmsgbGVuZ3RoIGNvbnNpZGVyaW5nIHBhZGRpbmcgcmVxdWlyZW1lbnRzLiAqLworZW51bSB7IFNDVFBfTUFYX0NIVU5LX0xFTiA9ICgoMTw8MTYpIC0gc2l6ZW9mKF9fdTMyKSkgfTsKKworLyogRW5jb3VyYWdlIENvb2tpZS1FY2hvIGJ1bmRsaW5nIGJ5IHByZS1mcmFnbWVudGluZyBjaHVua3MgYSBsaXR0bGUKKyAqIGhhcmRlciAodW50aWwgcmVhY2hpbmcgRVNUQUJMSVNIRUQgc3RhdGUpLgorICovCitlbnVtIHsgU0NUUF9BUkJJVFJBUllfQ09PS0lFX0VDSE9fTEVOID0gMjAwIH07CisKKy8qIEd1ZXNzIGF0IGhvdyBiaWcgdG8gbWFrZSB0aGUgVFNOIG1hcHBpbmcgYXJyYXkuCisgKiBXZSBndWFyYW50ZWUgdGhhdCB3ZSBjYW4gaGFuZGxlIGF0IGxlYXN0IHRoaXMgYmlnIGEgZ2FwIGJldHdlZW4gdGhlCisgKiBjdW11bGF0aXZlIEFDSyBhbmQgdGhlIGhpZ2hlc3QgVFNOLiAgSW4gcHJhY3RpY2UsIHdlIGNhbiBvZnRlbgorICogaGFuZGxlIHVwIHRvIHR3aWNlIHRoaXMgdmFsdWUuCisgKgorICogTkVWRVIgbWFrZSB0aGlzIG1vcmUgdGhhbiAzMjc2NyAoMl4xNS0xKS4gIFRoZSBHYXAgQWNrIEJsb2NrcyBpbiBhCisgKiBTQUNLIChzZWUgIHNlY3Rpb24gMy4zLjQpIGFyZSBvbmx5IDE2IGJpdHMsIHNvIDIqU0NUUF9UU05fTUFQX1NJWkUKKyAqIG11c3QgYmUgbGVzcyB0aGFuIDY1NTM1ICgyXjE2IC0gMSksIG9yIHdlIHdpbGwgaGF2ZSBvdmVyZmxvdworICogcHJvYmxlbXMgY3JlYXRpbmcgU0FDSydzLgorICovCisjZGVmaW5lIFNDVFBfVFNOX01BUF9TSVpFIDIwNDgKKyNkZWZpbmUgU0NUUF9UU05fTUFYX0dBUCAgNjU1MzUKKworLyogV2Ugd2lsbCBub3QgcmVjb3JkIG1vcmUgdGhhbiB0aGlzIG1hbnkgZHVwbGljYXRlIFRTTnMgYmV0d2VlbiB0d28KKyAqIFNBQ0tzLiAgVGhlIG1pbmltdW0gUE1UVSBpcyA1NzYuICBSZW1vdmUgYWxsIHRoZSBoZWFkZXJzIGFuZCB0aGVyZQorICogaXMgZW5vdWdoIHJvb20gZm9yIDEzMSBkdXBsaWNhdGUgcmVwb3J0cy4gIFJvdW5kIGRvd24gdG8gdGhlCisgKiBuZWFyZXN0IHBvd2VyIG9mIDIuCisgKi8KK2VudW0geyBTQ1RQX01JTl9QTVRVID0gNTc2IH07CitlbnVtIHsgU0NUUF9NQVhfRFVQX1RTTlMgPSAxNiB9OworZW51bSB7IFNDVFBfTUFYX0dBQlMgPSAxNiB9OworCit0eXBlZGVmIGVudW0geworCVNDVFBfQ09VTlRFUl9JTklUX0VSUk9SLAorfSBzY3RwX2NvdW50ZXJfdDsKKworLyogSG93IG1hbnkgY291bnRlcnMgZG9lcyBhbiBhc3NvY2lhdGlvbiBuZWVkPyAqLworI2RlZmluZSBTQ1RQX05VTUJFUl9DT1VOVEVSUwk1CisKKy8qIEhlcmUgd2UgZGVmaW5lIHRoZSBkZWZhdWx0IHRpbWVycy4gICovCisKKy8qIGNvb2tpZSB0aW1lciBkZWYgPSA/IHNlY29uZHMgKi8KKyNkZWZpbmUgU0NUUF9ERUZBVUxUX1RJTUVPVVRfVDFfQ09PS0lFCSgzICogSFopCisKKy8qIGluaXQgdGltZXIgZGVmID0gMyBzZWNvbmRzICAqLworI2RlZmluZSBTQ1RQX0RFRkFVTFRfVElNRU9VVF9UMV9JTklUCSgzICogSFopCisKKy8qIHNodXRkb3duIHRpbWVyIGRlZiA9IDMwMCBtcyAqLworI2RlZmluZSBTQ1RQX0RFRkFVTFRfVElNRU9VVF9UMl9TSFVURE9XTiAoKDMwMCAqIEhaKSAvIDEwMDApCisKKy8qIDAgc2Vjb25kcyArIFJUTyAqLworI2RlZmluZSBTQ1RQX0RFRkFVTFRfVElNRU9VVF9IRUFSVEJFQVQJKDEwICogSFopCisKKy8qIHJlY3YgdGltZXIgZGVmID0gMjAwbXMgKGluIHVzZWMpICovCisjZGVmaW5lIFNDVFBfREVGQVVMVF9USU1FT1VUX1NBQ0sJKCgyMDAgKiBIWikgLyAxMDAwKQorI2RlZmluZSBTQ1RQX0RFRkFVTFRfVElNRU9VVF9TQUNLX01BWAkoKDUwMCAqIEhaKSAvIDEwMDApIC8qIDUwMCBtcyAqLworCisvKiBSVE8uSW5pdGlhbCAgICAgICAgICAgICAgLSAzICBzZWNvbmRzCisgKiBSVE8uTWluICAgICAgICAgICAgICAgICAgLSAxICBzZWNvbmQKKyAqIFJUTy5NYXggICAgICAgICAgICAgICAgICAtIDYwIHNlY29uZHMKKyAqIFJUTy5BbHBoYSAgICAgICAgICAgICAgICAtIDEvOAorICogUlRPLkJldGEgICAgICAgICAgICAgICAgIC0gMS80CisgKi8KKyNkZWZpbmUgU0NUUF9SVE9fSU5JVElBTAkoMyAqIEhaKQorI2RlZmluZSBTQ1RQX1JUT19NSU4JCSgxICogSFopCisjZGVmaW5lIFNDVFBfUlRPX01BWAkJKDYwICogSFopCisKKyNkZWZpbmUgU0NUUF9SVE9fQUxQSEEgICAgICAgICAgMyAgIC8qIDEvOCB3aGVuIGNvbnZlcnRlZCB0byByaWdodCBzaGlmdHMuICovCisjZGVmaW5lIFNDVFBfUlRPX0JFVEEgICAgICAgICAgIDIgICAvKiAxLzQgd2hlbiBjb252ZXJ0ZWQgdG8gcmlnaHQgc2hpZnRzLiAqLworCisvKiBNYXhpbXVtIG51bWJlciBvZiBuZXcgZGF0YSBwYWNrZXRzIHRoYXQgY2FuIGJlIHNlbnQgaW4gYSBidXJzdC4gICovCisjZGVmaW5lIFNDVFBfTUFYX0JVUlNUCQk0CisKKyNkZWZpbmUgU0NUUF9DTE9DS19HUkFOVUxBUklUWQkxCS8qIDEgamlmZnkgKi8KKworI2RlZmluZSBTQ1RQX0RFRl9NQVhfSU5JVCA2CisjZGVmaW5lIFNDVFBfREVGX01BWF9TRU5EIDEwCisKKyNkZWZpbmUgU0NUUF9ERUZBVUxUX0NPT0tJRV9MSUZFX1NFQwk2MCAvKiBzZWNvbmRzICovCisjZGVmaW5lIFNDVFBfREVGQVVMVF9DT09LSUVfTElGRV9VU0VDCTAgIC8qIG1pY3Jvc2Vjb25kcyAqLworCisjZGVmaW5lIFNDVFBfREVGQVVMVF9NSU5XSU5ET1cJMTUwMAkvKiBkZWZhdWx0IG1pbmltdW0gcnduZCBzaXplICovCisjZGVmaW5lIFNDVFBfREVGQVVMVF9NQVhXSU5ET1cJNjU1MzUJLyogZGVmYXVsdCByd25kIHNpemUgKi8KKyNkZWZpbmUgU0NUUF9ERUZBVUxUX01BWFNFR01FTlQgMTUwMAkvKiBNVFUgc2l6ZSwgdGhpcyBpcyB0aGUgbGltaXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB0byB3aGljaCB3ZSB3aWxsIHJhaXNlIHRoZSBQLU1UVS4KKwkJCQkJICovCisjZGVmaW5lIFNDVFBfREVGQVVMVF9NSU5TRUdNRU5UIDUxMgkvKiBNVFUgc2l6ZSAuLi4gaWYgbm8gbXR1IGRpc2MgKi8KKyNkZWZpbmUgU0NUUF9IT1dfTUFOWV9TRUNSRVRTIDIJCS8qIEhvdyBtYW55IHNlY3JldHMgSSBrZWVwICovCisjZGVmaW5lIFNDVFBfSE9XX0xPTkdfQ09PS0lFX0xJVkUgMzYwMAkvKiBIb3cgbWFueSBzZWNvbmRzIHRoZSBjdXJyZW50CisJCQkJCSAqIHNlY3JldCB3aWxsIGxpdmU/CisJCQkJCSAqLworI2RlZmluZSBTQ1RQX1NFQ1JFVF9TSVpFIDMyCQkvKiBOdW1iZXIgb2Ygb2N0ZXRzIGluIGEgMjU2IGJpdHMuICovCisKKyNkZWZpbmUgU0NUUF9TSUdOQVRVUkVfU0laRSAyMAkgICAgICAgIC8qIHNpemUgb2YgYSBTTEEtMSBzaWduYXR1cmUgKi8KKworI2RlZmluZSBTQ1RQX0NPT0tJRV9NVUxUSVBMRSAzMiAvKiBQYWQgb3V0IG91ciBjb29raWUgdG8gbWFrZSBvdXIgaGFzaAorCQkJCSAqIGZ1bmN0aW9ucyBzaW1wbGVyIHRvIHdyaXRlLgorCQkJCSAqLworCisjaWYgZGVmaW5lZCAoQ09ORklHX1NDVFBfSE1BQ19NRDUpCisjZGVmaW5lIFNDVFBfQ09PS0lFX0hNQUNfQUxHICJtZDUiCisjZWxpZiBkZWZpbmVkIChDT05GSUdfU0NUUF9ITUFDX1NIQTEpCisjZGVmaW5lIFNDVFBfQ09PS0lFX0hNQUNfQUxHICJzaGExIgorI2Vsc2UKKyNkZWZpbmUgU0NUUF9DT09LSUVfSE1BQ19BTEcgTlVMTAorI2VuZGlmCisKKy8qIFRoZXNlIHJldHVybiB2YWx1ZXMgZGVzY3JpYmUgdGhlIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBvZiBhIG51bWJlciBvZgorICogcm91dGluZXMgd2hpY2ggZm9ybSB0aGUgbG93ZXIgaW50ZXJmYWNlIHRvIFNDVFBfb3V0cXVldWUuCisgKi8KK3R5cGVkZWYgZW51bSB7CisJU0NUUF9YTUlUX09LLAorCVNDVFBfWE1JVF9QTVRVX0ZVTEwsCisJU0NUUF9YTUlUX1JXTkRfRlVMTCwKKwlTQ1RQX1hNSVRfTkFHTEVfREVMQVksCit9IHNjdHBfeG1pdF90OworCisvKiBUaGVzZSBhcmUgdGhlIGNvbW1hbmRzIGZvciBtYW5pcHVsYXRpbmcgdHJhbnNwb3J0cy4gICovCit0eXBlZGVmIGVudW0geworCVNDVFBfVFJBTlNQT1JUX1VQLAorCVNDVFBfVFJBTlNQT1JUX0RPV04sCit9IHNjdHBfdHJhbnNwb3J0X2NtZF90OworCisvKiBUaGVzZSBhcmUgdGhlIGFkZHJlc3Mgc2NvcGVzIGRlZmluZWQgbWFpbmx5IGZvciBJUHY0IGFkZHJlc3NlcworICogYmFzZWQgb24gZHJhZnQgb2YgU0NUUCBJUHY0IHNjb3BpbmcgPGRyYWZ0LXN0ZXdhcnQtdHN2d2ctc2N0cC1pcHY0LTAwLnR4dD4uCisgKiBUaGVzZSBzY29wZXMgYXJlIGhvcGVmdWxseSBnZW5lcmljIGVub3VnaCB0byBiZSB1c2VkIG9uIHNjb3BpbmcgYm90aAorICogSVB2NCBhbmQgSVB2NiBhZGRyZXNzZXMgaW4gU0NUUC4KKyAqIEF0IHRoaXMgcG9pbnQsIHRoZSBJUHY2IHNjb3BlcyB3aWxsIGJlIG1hcHBlZCB0byB0aGVzZSBpbnRlcm5hbCBzY29wZXMKKyAqIGFzIG11Y2ggYXMgcG9zc2libGUuCisgKi8KK3R5cGVkZWYgZW51bSB7CisJU0NUUF9TQ09QRV9HTE9CQUwsCQkvKiBJUHY0IGdsb2JhbCBhZGRyZXNzZXMgKi8KKwlTQ1RQX1NDT1BFX1BSSVZBVEUsCQkvKiBJUHY0IHByaXZhdGUgYWRkcmVzc2VzICovCisJU0NUUF9TQ09QRV9MSU5LLAkJLyogSVB2NCBsaW5rIGxvY2FsIGFkZHJlc3MgKi8KKwlTQ1RQX1NDT1BFX0xPT1BCQUNLLAkJLyogSVB2NCBsb29wYmFjayBhZGRyZXNzICovCisJU0NUUF9TQ09QRV9VTlVTQUJMRSwJCS8qIElQdjQgdW51c2FibGUgYWRkcmVzc2VzICovCit9IHNjdHBfc2NvcGVfdDsKKworLyogQmFzZWQgb24gSVB2NCBzY29waW5nIDxkcmFmdC1zdGV3YXJ0LXRzdndnLXNjdHAtaXB2NC0wMC50eHQ+LAorICogU0NUUCBJUHY0IHVudXNhYmxlIGFkZHJlc3NlczogMC4wLjAuMC84LCAyMjQuMC4wLjAvNCwgMTk4LjE4LjAuMC8yNCwKKyAqIDE5Mi44OC45OS4wLzI0LgorICogQWxzbywgUkZDIDguNCwgbm9uLXVuaWNhc3QgYWRkcmVzc2VzIGFyZSBub3QgY29uc2lkZXJlZCB2YWxpZCBTQ1RQCisgKiBhZGRyZXNzZXMuCisgKi8KKyNkZWZpbmUgSVNfSVBWNF9VTlVTQUJMRV9BRERSRVNTKGEpIFwKKwkoKElOQUREUl9CUk9BRENBU1QgPT0gKmEpIHx8IFwKKwkoTVVMVElDQVNUKCphKSkgfHwgXAorCSgoKHVuc2lnbmVkIGNoYXIgKikoYSkpWzBdID09IDApIHx8IFwKKwkoKCgodW5zaWduZWQgY2hhciAqKShhKSlbMF0gPT0gMTk4KSAmJiBcCisJKCgodW5zaWduZWQgY2hhciAqKShhKSlbMV0gPT0gMTgpICYmIFwKKwkoKCh1bnNpZ25lZCBjaGFyICopKGEpKVsyXSA9PSAwKSkgfHwgXAorCSgoKCh1bnNpZ25lZCBjaGFyICopKGEpKVswXSA9PSAxOTIpICYmIFwKKwkoKCh1bnNpZ25lZCBjaGFyICopKGEpKVsxXSA9PSA4OCkgJiYgXAorCSgoKHVuc2lnbmVkIGNoYXIgKikoYSkpWzJdID09IDk5KSkpCisKKy8qIElQdjQgTGluay1sb2NhbCBhZGRyZXNzZXM6IDE2OS4yNTQuMC4wLzE2LiAgKi8KKyNkZWZpbmUgSVNfSVBWNF9MSU5LX0FERFJFU1MoYSkgXAorCSgoKCh1bnNpZ25lZCBjaGFyICopKGEpKVswXSA9PSAxNjkpICYmIFwKKwkoKCh1bnNpZ25lZCBjaGFyICopKGEpKVsxXSA9PSAyNTQpKQorCisvKiBSRkMgMTkxOCAiQWRkcmVzcyBBbGxvY2F0aW9uIGZvciBQcml2YXRlIEludGVybmV0cyIgZGVmaW5lcyB0aGUgSVB2NAorICogcHJpdmF0ZSBhZGRyZXNzIHNwYWNlIGFzIHRoZSBmb2xsb3dpbmc6CisgKgorICogMTAuMC4wLjAgLSAxMC4yNTUuMjU1LjI1NSAoMTAvOCBwcmVmaXgpCisgKiAxNzIuMTYuMC4wLjAgLSAxNzIuMzEuMjU1LjI1NSAoMTcyLjE2LzEyIHByZWZpeCkKKyAqIDE5Mi4xNjguMC4wIC0gMTkyLjE2OC4yNTUuMjU1ICgxOTIuMTY4LzE2IHByZWZpeCkKKyAqLworI2RlZmluZSBJU19JUFY0X1BSSVZBVEVfQUREUkVTUyhhKSBcCisJKCgoKHVuc2lnbmVkIGNoYXIgKikoYSkpWzBdID09IDEwKSB8fCBcCisJKCgoKHVuc2lnbmVkIGNoYXIgKikoYSkpWzBdID09IDE3MikgJiYgXAorCSgoKHVuc2lnbmVkIGNoYXIgKikoYSkpWzFdID49IDE2KSAmJiBcCisJKCgodW5zaWduZWQgY2hhciAqKShhKSlbMV0gPCAzMikpIHx8IFwKKwkoKCgodW5zaWduZWQgY2hhciAqKShhKSlbMF0gPT0gMTkyKSAmJiBcCisJKCgodW5zaWduZWQgY2hhciAqKShhKSlbMV0gPT0gMTY4KSkpCisKKy8qIEZsYWdzIHVzZWQgZm9yIHRoZSBiaW5kIGFkZHJlc3MgY29weSBmdW5jdGlvbnMuICAqLworI2RlZmluZSBTQ1RQX0FERFI2X0FMTE9XRUQJMHgwMDAwMDAwMQkvKiBJUHY2IGFkZHJlc3MgaXMgYWxsb3dlZCBieQorCQkJCQkJICAgbG9jYWwgc29jayBmYW1pbHkgKi8KKyNkZWZpbmUgU0NUUF9BRERSNF9QRUVSU1VQUAkweDAwMDAwMDAyCS8qIElQdjQgYWRkcmVzcyBpcyBzdXBwb3J0ZWQgYnkKKwkJCQkJCSAgIHBlZXIgKi8KKyNkZWZpbmUgU0NUUF9BRERSNl9QRUVSU1VQUAkweDAwMDAwMDA0CS8qIElQdjYgYWRkcmVzcyBpcyBzdXBwb3J0ZWQgYnkKKwkJCQkJCSAgIHBlZXIgKi8KKworLyogUmVhc29ucyB0byByZXRyYW5zbWl0LiAqLwordHlwZWRlZiBlbnVtIHsKKwlTQ1RQX1JUWFJfVDNfUlRYLAorCVNDVFBfUlRYUl9GQVNUX1JUWCwKKwlTQ1RQX1JUWFJfUE1UVUQsCit9IHNjdHBfcmV0cmFuc21pdF9yZWFzb25fdDsKKworLyogUmVhc29ucyB0byBsb3dlciBjd25kLiAqLwordHlwZWRlZiBlbnVtIHsKKwlTQ1RQX0xPV0VSX0NXTkRfVDNfUlRYLAorCVNDVFBfTE9XRVJfQ1dORF9GQVNUX1JUWCwKKwlTQ1RQX0xPV0VSX0NXTkRfRUNORSwKKwlTQ1RQX0xPV0VSX0NXTkRfSU5BQ1RJVkUsCit9IHNjdHBfbG93ZXJfY3duZF90OworCisjZW5kaWYgLyogX19zY3RwX2NvbnN0YW50c19oX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NjdHAvc2N0cC5oIGIvaW5jbHVkZS9uZXQvc2N0cC9zY3RwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTYwYWJmYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L3NjdHAvc2N0cC5oCkBAIC0wLDAgKzEsNjIwIEBACisvKiBTQ1RQIGtlcm5lbCByZWZlcmVuY2UgSW1wbGVtZW50YXRpb24KKyAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDEsIDIwMDQKKyAqIENvcHlyaWdodCAoYykgMTk5OS0yMDAwIENpc2NvLCBJbmMuCisgKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMSBNb3Rvcm9sYSwgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDMgSW50ZWwgQ29ycC4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgU0NUUCBrZXJuZWwgcmVmZXJlbmNlIEltcGxlbWVudGF0aW9uCisgKgorICogVGhlIGJhc2UgbGtzY3RwIGhlYWRlci4KKyAqCisgKiBUaGUgU0NUUCByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gaXMgZnJlZSBzb2Z0d2FyZTsKKyAqIHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mCisgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGUgU0NUUCByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdAorICogd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkCisgKiAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqCisgKiB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggR05VIENDOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqIFBsZWFzZSBzZW5kIGFueSBidWcgcmVwb3J0cyBvciBmaXhlcyB5b3UgbWFrZSB0byB0aGUKKyAqIGVtYWlsIGFkZHJlc3MoZXMpOgorICogICAgbGtzY3RwIGRldmVsb3BlcnMgPGxrc2N0cC1kZXZlbG9wZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD4KKyAqCisgKiBPciBzdWJtaXQgYSBidWcgcmVwb3J0IHRocm91Z2ggdGhlIGZvbGxvd2luZyB3ZWJzaXRlOgorICogICAgaHR0cDovL3d3dy5zZi5uZXQvcHJvamVjdHMvbGtzY3RwCisgKgorICogV3JpdHRlbiBvciBtb2RpZmllZCBieToKKyAqICAgIExhIE1vbnRlIEguUC4gWWFycm9sbCA8cGlnZ3lAYWNtLm9yZz4KKyAqICAgIFhpbmdhbmcgR3VvICAgICAgICAgICA8eGluZ2FuZy5ndW9AaW50ZWwuY29tPgorICogICAgSm9uIEdyaW1tICAgICAgICAgICAgIDxqZ3JpbW1AdXMuaWJtLmNvbT4KKyAqICAgIERhaXN5IENoYW5nICAgICAgICAgICA8ZGFpc3ljQHVzLmlibS5jb20+CisgKiAgICBTcmlkaGFyIFNhbXVkcmFsYSAgICAgPHNyaUB1cy5pYm0uY29tPgorICogICAgQXJkZWxsZSBGYW4gICAgICAgICAgIDxhcmRlbGxlLmZhbkBpbnRlbC5jb20+CisgKiAgICBSeWFuIExheWVyICAgICAgICAgICAgPHJtbGF5ZXJAdXMuaWJtLmNvbT4KKyAqICAgIEtldmluIEdhbyAgICAgICAgICAgICA8a2V2aW4uZ2FvQGludGVsLmNvbT4gCisgKgorICogQW55IGJ1Z3MgcmVwb3J0ZWQgZ2l2ZW4gdG8gdXMgd2Ugd2lsbCB0cnkgdG8gZml4Li4uIGFueSBmaXhlcyBzaGFyZWQgd2lsbAorICogYmUgaW5jb3Jwb3JhdGVkIGludG8gdGhlIG5leHQgU0NUUCByZWxlYXNlLgorICovCisKKyNpZm5kZWYgX19uZXRfc2N0cF9oX18KKyNkZWZpbmUgX19uZXRfc2N0cF9oX18KKworLyogSGVhZGVyIFN0cmF0ZWd5LgorICogICAgU3RhcnQgZ2V0dGluZyBzb21lIGNvbnRyb2wgb3ZlciB0aGUgaGVhZGVyIGZpbGUgZGVwZW5jaWVzOgorICogICAgICAgaW5jbHVkZXMKKyAqICAgICAgIGNvbnN0YW50cworICogICAgICAgc3RydWN0cworICogICAgICAgcHJvdG90eXBlcworICogICAgICAgbWFjcm9zLCBleHRlcm5zLCBhbmQgaW5saW5lcworICoKKyAqICAgTW92ZSB0ZXN0X2ZyYW1lIHNwZWNpZmljIGl0ZW1zIG91dCBvZiB0aGUga2VybmVsIGhlYWRlcnMKKyAqICAgYW5kIGludG8gdGhlIHRlc3QgZnJhbWUgaGVhZGVycy4gICBUaGlzIGlzIG5vdCBwZXJmZWN0IGluIGFueSBzZW5zZQorICogICBhbmQgd2lsbCBjb250aW51ZSB0byBldm9sdmUuCisgKi8KKworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpZmRlZiBURVNUX0ZSQU1FCisjdW5kZWYgQ09ORklHX1BST0NfRlMKKyN1bmRlZiBDT05GSUdfU0NUUF9EQkdfT0JKQ05UCisjdW5kZWYgQ09ORklHX1NZU0NUTAorI2VuZGlmIC8qIFRFU1RfRlJBTUUgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lkci5oPgorCisjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCisjaW5jbHVkZSA8bmV0L2lwdjYuaD4KKyNpbmNsdWRlIDxuZXQvaXA2X3JvdXRlLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxuZXQvc29jay5oPgorI2luY2x1ZGUgPG5ldC9zbm1wLmg+CisjaW5jbHVkZSA8bmV0L3NjdHAvc3RydWN0cy5oPgorI2luY2x1ZGUgPG5ldC9zY3RwL2NvbnN0YW50cy5oPgorCisKKy8qIFNldCBTQ1RQX0RFQlVHIGZsYWcgdmlhIGNvbmZpZyBpZiBub3QgYWxyZWFkeSBzZXQuICovCisjaWZuZGVmIFNDVFBfREVCVUcKKyNpZmRlZiBDT05GSUdfU0NUUF9EQkdfTVNHCisjZGVmaW5lIFNDVFBfREVCVUcJMQorI2Vsc2UKKyNkZWZpbmUgU0NUUF9ERUJVRyAgICAgIDAKKyNlbmRpZiAvKiBDT05GSUdfU0NUUF9EQkcgKi8KKyNlbmRpZiAvKiBTQ1RQX0RFQlVHICovCisKKyNpZmRlZiBDT05GSUdfSVBfU0NUUF9NT0RVTEUKKyNkZWZpbmUgU0NUUF9QUk9UT1NXX0ZMQUcgMAorI2Vsc2UgLyogc3RhdGljISAqLworI2RlZmluZSBTQ1RQX1BST1RPU1dfRkxBRyBJTkVUX1BST1RPU1dfUEVSTUFORU5UCisjZW5kaWYKKworCisvKiBDZXJ0YWluIGludGVybmFsIHN0YXRpYyBmdW5jdGlvbnMgbmVlZCB0byBiZSBleHBvcnRlZCB3aGVuCisgKiBjb21waWxlZCBpbnRvIHRoZSB0ZXN0IGZyYW1lLgorICovCisjaWZuZGVmIFNDVFBfU1RBVElDCisjZGVmaW5lIFNDVFBfU1RBVElDIHN0YXRpYworI2VuZGlmCisKKy8qCisgKiBGdW5jdGlvbiBkZWNsYXJhdGlvbnMuCisgKi8KKworLyoKKyAqIHNjdHAvcHJvdG9jb2wuYworICovCitleHRlcm4gc3RydWN0IHNvY2sgKnNjdHBfZ2V0X2N0bF9zb2NrKHZvaWQpOworZXh0ZXJuIGludCBzY3RwX2NvcHlfbG9jYWxfYWRkcl9saXN0KHN0cnVjdCBzY3RwX2JpbmRfYWRkciAqLAorCQkJCSAgICAgc2N0cF9zY29wZV90LCBpbnQgZ2ZwLCBpbnQgZmxhZ3MpOworZXh0ZXJuIHN0cnVjdCBzY3RwX3BmICpzY3RwX2dldF9wZl9zcGVjaWZpYyhzYV9mYW1pbHlfdCBmYW1pbHkpOworZXh0ZXJuIGludCBzY3RwX3JlZ2lzdGVyX3BmKHN0cnVjdCBzY3RwX3BmICosIHNhX2ZhbWlseV90KTsKKworLyoKKyAqIHNjdHAvc29ja2V0LmMKKyAqLworaW50IHNjdHBfYmFja2xvZ19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2ludCBzY3RwX2luZXRfbGlzdGVuKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBiYWNrbG9nKTsKK3ZvaWQgc2N0cF93cml0ZV9zcGFjZShzdHJ1Y3Qgc29jayAqc2spOwordW5zaWduZWQgaW50IHNjdHBfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAqc29jaywKKwkJcG9sbF90YWJsZSAqd2FpdCk7CisKKy8qCisgKiBzY3RwL3ByaW1pdGl2ZS5jCisgKi8KK2ludCBzY3RwX3ByaW1pdGl2ZV9BU1NPQ0lBVEUoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKiwgdm9pZCAqYXJnKTsKK2ludCBzY3RwX3ByaW1pdGl2ZV9TSFVURE9XTihzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqLCB2b2lkICphcmcpOworaW50IHNjdHBfcHJpbWl0aXZlX0FCT1JUKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICosIHZvaWQgKmFyZyk7CitpbnQgc2N0cF9wcmltaXRpdmVfU0VORChzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqLCB2b2lkICphcmcpOworaW50IHNjdHBfcHJpbWl0aXZlX1JFUVVFU1RIRUFSVEJFQVQoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKiwgdm9pZCAqYXJnKTsKK2ludCBzY3RwX3ByaW1pdGl2ZV9BU0NPTkYoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKiwgdm9pZCAqYXJnKTsKKworLyoKKyAqIHNjdHAvY3JjMzJjLmMKKyAqLworX191MzIgc2N0cF9zdGFydF9ja3N1bShfX3U4ICpwdHIsIF9fdTE2IGNvdW50KTsKK19fdTMyIHNjdHBfdXBkYXRlX2Nrc3VtKF9fdTggKnB0ciwgX191MTYgY291bnQsIF9fdTMyIGNrc3VtKTsKK19fdTMyIHNjdHBfZW5kX2Nrc3VtKF9fdTMyIGNrc3VtKTsKK19fdTMyIHNjdHBfdXBkYXRlX2NvcHlfY2tzdW0oX191OCAqLCBfX3U4ICosIF9fdTE2IGNvdW50LCBfX3UzMiBja3N1bSk7CisKKy8qCisgKiBzY3RwL2lucHV0LmMKKyAqLworaW50IHNjdHBfcmN2KHN0cnVjdCBza19idWZmICpza2IpOwordm9pZCBzY3RwX3Y0X2VycihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgaW5mbyk7Cit2b2lkIHNjdHBfaGFzaF9lc3RhYmxpc2hlZChzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqKTsKK3ZvaWQgc2N0cF91bmhhc2hfZXN0YWJsaXNoZWQoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKik7Cit2b2lkIHNjdHBfaGFzaF9lbmRwb2ludChzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqKTsKK3ZvaWQgc2N0cF91bmhhc2hfZW5kcG9pbnQoc3RydWN0IHNjdHBfZW5kcG9pbnQgKik7CitzdHJ1Y3Qgc29jayAqc2N0cF9lcnJfbG9va3VwKGludCBmYW1pbHksIHN0cnVjdCBza19idWZmICosCisJCQkgICAgIHN0cnVjdCBzY3RwaGRyICosIHN0cnVjdCBzY3RwX2VuZHBvaW50ICoqLAorCQkJICAgICBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqKiwKKwkJCSAgICAgc3RydWN0IHNjdHBfdHJhbnNwb3J0ICoqKTsKK3ZvaWQgc2N0cF9lcnJfZmluaXNoKHN0cnVjdCBzb2NrICosIHN0cnVjdCBzY3RwX2VuZHBvaW50ICosCisJCQkgICAgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKik7Cit2b2lkIHNjdHBfaWNtcF9mcmFnX25lZWRlZChzdHJ1Y3Qgc29jayAqLCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqLAorCQkJICAgc3RydWN0IHNjdHBfdHJhbnNwb3J0ICp0LCBfX3UzMiBwbXR1KTsKK3ZvaWQgc2N0cF9pY21wX3Byb3RvX3VucmVhY2hhYmxlKHN0cnVjdCBzb2NrICpzaywKKwkJCQkgc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLAorCQkJCSBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKKwkJCQkgc3RydWN0IHNjdHBfdHJhbnNwb3J0ICp0KTsKKworLyoKKyAqICBTZWN0aW9uOiAgTWFjcm9zLCBleHRlcm5zLCBhbmQgaW5saW5lcworICovCisKKworI2lmZGVmIFRFU1RfRlJBTUUKKyNpbmNsdWRlIDx0ZXN0X2ZyYW1lLmg+CisjZWxzZQorCisvKiBzcGluIGxvY2sgd3JhcHBlcnMuICovCisjZGVmaW5lIHNjdHBfc3Bpbl9sb2NrX2lycXNhdmUobG9jaywgZmxhZ3MpIHNwaW5fbG9ja19pcnFzYXZlKGxvY2ssIGZsYWdzKQorI2RlZmluZSBzY3RwX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUobG9jaywgZmxhZ3MpICBcCisgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShsb2NrLCBmbGFncykKKyNkZWZpbmUgc2N0cF9sb2NhbF9iaF9kaXNhYmxlKCkgbG9jYWxfYmhfZGlzYWJsZSgpCisjZGVmaW5lIHNjdHBfbG9jYWxfYmhfZW5hYmxlKCkgIGxvY2FsX2JoX2VuYWJsZSgpCisjZGVmaW5lIHNjdHBfc3Bpbl9sb2NrKGxvY2spICAgIHNwaW5fbG9jayhsb2NrKQorI2RlZmluZSBzY3RwX3NwaW5fdW5sb2NrKGxvY2spICBzcGluX3VubG9jayhsb2NrKQorI2RlZmluZSBzY3RwX3dyaXRlX2xvY2sobG9jaykgICB3cml0ZV9sb2NrKGxvY2spCisjZGVmaW5lIHNjdHBfd3JpdGVfdW5sb2NrKGxvY2spIHdyaXRlX3VubG9jayhsb2NrKQorI2RlZmluZSBzY3RwX3JlYWRfbG9jayhsb2NrKSAgICByZWFkX2xvY2sobG9jaykKKyNkZWZpbmUgc2N0cF9yZWFkX3VubG9jayhsb2NrKSAgcmVhZF91bmxvY2sobG9jaykKKworLyogc29jayBsb2NrIHdyYXBwZXJzLiAqLworI2RlZmluZSBzY3RwX2xvY2tfc29jayhzaykgICAgICAgbG9ja19zb2NrKHNrKQorI2RlZmluZSBzY3RwX3JlbGVhc2Vfc29jayhzaykgICAgcmVsZWFzZV9zb2NrKHNrKQorI2RlZmluZSBzY3RwX2JoX2xvY2tfc29jayhzaykgICAgYmhfbG9ja19zb2NrKHNrKQorI2RlZmluZSBzY3RwX2JoX3VubG9ja19zb2NrKHNrKSAgYmhfdW5sb2NrX3NvY2soc2spCisjZGVmaW5lIFNDVFBfU09DS19TTEVFUF9QUkUoc2spICBTT0NLX1NMRUVQX1BSRShzaykKKyNkZWZpbmUgU0NUUF9TT0NLX1NMRUVQX1BPU1Qoc2spIFNPQ0tfU0xFRVBfUE9TVChzaykKKworLyogU0NUUCBTTk1QIE1JQiBzdGF0cyBoYW5kbGVycyAqLworREVDTEFSRV9TTk1QX1NUQVQoc3RydWN0IHNjdHBfbWliLCBzY3RwX3N0YXRpc3RpY3MpOworI2RlZmluZSBTQ1RQX0lOQ19TVEFUUyhmaWVsZCkgICAgICBTTk1QX0lOQ19TVEFUUyhzY3RwX3N0YXRpc3RpY3MsIGZpZWxkKQorI2RlZmluZSBTQ1RQX0lOQ19TVEFUU19CSChmaWVsZCkgICBTTk1QX0lOQ19TVEFUU19CSChzY3RwX3N0YXRpc3RpY3MsIGZpZWxkKQorI2RlZmluZSBTQ1RQX0lOQ19TVEFUU19VU0VSKGZpZWxkKSBTTk1QX0lOQ19TVEFUU19VU0VSKHNjdHBfc3RhdGlzdGljcywgZmllbGQpCisjZGVmaW5lIFNDVFBfREVDX1NUQVRTKGZpZWxkKSAgICAgIFNOTVBfREVDX1NUQVRTKHNjdHBfc3RhdGlzdGljcywgZmllbGQpCisKKyNlbmRpZiAvKiAhVEVTVF9GUkFNRSAqLworCisKKy8qIFByaW50IGRlYnVnZ2luZyBtZXNzYWdlcy4gICovCisjaWYgU0NUUF9ERUJVRworZXh0ZXJuIGludCBzY3RwX2RlYnVnX2ZsYWc7CisjZGVmaW5lIFNDVFBfREVCVUdfUFJJTlRLKHdoYXRldmVyLi4uKSBcCisJKCh2b2lkKSAoc2N0cF9kZWJ1Z19mbGFnICYmIHByaW50ayhLRVJOX0RFQlVHIHdoYXRldmVyKSkpCisjZGVmaW5lIFNDVFBfRU5BQkxFX0RFQlVHIHsgc2N0cF9kZWJ1Z19mbGFnID0gMTsgfQorI2RlZmluZSBTQ1RQX0RJU0FCTEVfREVCVUcgeyBzY3RwX2RlYnVnX2ZsYWcgPSAwOyB9CisKKyNkZWZpbmUgU0NUUF9BU1NFUlQoZXhwciwgc3RyLCBmdW5jKSBcCisJaWYgKCEoZXhwcikpIHsgXAorCQlTQ1RQX0RFQlVHX1BSSU5USygiQXNzZXJ0aW9uIEZhaWxlZDogJXMoJXMpIGF0ICVzOiVzOiVkXG4iLCBcCisJCQlzdHIsICgjZXhwciksIF9fRklMRV9fLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsgXAorCQlmdW5jOyBcCisJfQorCisjZWxzZQkvKiBTQ1RQX0RFQlVHICovCisKKyNkZWZpbmUgU0NUUF9ERUJVR19QUklOVEsod2hhdGV2ZXIuLi4pCisjZGVmaW5lIFNDVFBfRU5BQkxFX0RFQlVHCisjZGVmaW5lIFNDVFBfRElTQUJMRV9ERUJVRworI2RlZmluZSBTQ1RQX0FTU0VSVChleHByLCBzdHIsIGZ1bmMpCisKKyNlbmRpZiAvKiBTQ1RQX0RFQlVHICovCisKKworLyoKKyAqIE1hY3JvcyBmb3Iga2VlcGluZyBhIGdsb2JhbCByZWZlcmVuY2Ugb2Ygb2JqZWN0IGFsbG9jYXRpb25zLgorICovCisjaWZkZWYgQ09ORklHX1NDVFBfREJHX09CSkNOVAorCitleHRlcm4gYXRvbWljX3Qgc2N0cF9kYmdfb2JqY250X3NvY2s7CitleHRlcm4gYXRvbWljX3Qgc2N0cF9kYmdfb2JqY250X2VwOworZXh0ZXJuIGF0b21pY190IHNjdHBfZGJnX29iamNudF9hc3NvYzsKK2V4dGVybiBhdG9taWNfdCBzY3RwX2RiZ19vYmpjbnRfdHJhbnNwb3J0OworZXh0ZXJuIGF0b21pY190IHNjdHBfZGJnX29iamNudF9jaHVuazsKK2V4dGVybiBhdG9taWNfdCBzY3RwX2RiZ19vYmpjbnRfYmluZF9hZGRyOworZXh0ZXJuIGF0b21pY190IHNjdHBfZGJnX29iamNudF9iaW5kX2J1Y2tldDsKK2V4dGVybiBhdG9taWNfdCBzY3RwX2RiZ19vYmpjbnRfYWRkcjsKK2V4dGVybiBhdG9taWNfdCBzY3RwX2RiZ19vYmpjbnRfc3NubWFwOworZXh0ZXJuIGF0b21pY190IHNjdHBfZGJnX29iamNudF9kYXRhbXNnOworCisvKiBNYWNyb3MgdG8gYXRvbWljYWxseSBpbmNyZW1lbnQvZGVjcmVtZW50IG9iamNudCBjb3VudGVycy4gICovCisjZGVmaW5lIFNDVFBfREJHX09CSkNOVF9JTkMobmFtZSkgXAorYXRvbWljX2luYygmc2N0cF9kYmdfb2JqY250XyMjIG5hbWUpCisjZGVmaW5lIFNDVFBfREJHX09CSkNOVF9ERUMobmFtZSkgXAorYXRvbWljX2RlYygmc2N0cF9kYmdfb2JqY250XyMjIG5hbWUpCisjZGVmaW5lIFNDVFBfREJHX09CSkNOVChuYW1lKSBcCithdG9taWNfdCBzY3RwX2RiZ19vYmpjbnRfIyMgbmFtZSA9IEFUT01JQ19JTklUKDApCisKKy8qIE1hY3JvIHRvIGhlbHAgY3JlYXRlIG5ldyBlbnRyaWVzIGluIGluIHRoZSBnbG9iYWwgYXJyYXkgb2YKKyAqIG9iamNudCBjb3VudGVycy4KKyAqLworI2RlZmluZSBTQ1RQX0RCR19PQkpDTlRfRU5UUlkobmFtZSkgXAorey5sYWJlbD0gI25hbWUsIC5jb3VudGVyPSAmc2N0cF9kYmdfb2JqY250XyMjIG5hbWV9CisKK3ZvaWQgc2N0cF9kYmdfb2JqY250X2luaXQodm9pZCk7Cit2b2lkIHNjdHBfZGJnX29iamNudF9leGl0KHZvaWQpOworCisjZWxzZQorCisjZGVmaW5lIFNDVFBfREJHX09CSkNOVF9JTkMobmFtZSkKKyNkZWZpbmUgU0NUUF9EQkdfT0JKQ05UX0RFQyhuYW1lKQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2N0cF9kYmdfb2JqY250X2luaXQodm9pZCkgeyByZXR1cm47IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBzY3RwX2RiZ19vYmpjbnRfZXhpdCh2b2lkKSB7IHJldHVybjsgfQorCisjZW5kaWYgLyogQ09ORklHX1NDVFBfREJHX09CSkNPVU5UICovCisKKyNpZiBkZWZpbmVkIENPTkZJR19TWVNDVEwKK3ZvaWQgc2N0cF9zeXNjdGxfcmVnaXN0ZXIodm9pZCk7Cit2b2lkIHNjdHBfc3lzY3RsX3VucmVnaXN0ZXIodm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHNjdHBfc3lzY3RsX3JlZ2lzdGVyKHZvaWQpIHsgcmV0dXJuOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgc2N0cF9zeXNjdGxfdW5yZWdpc3Rlcih2b2lkKSB7IHJldHVybjsgfQorc3RhdGljIGlubGluZSBpbnQgc2N0cF9zeXNjdGxfamlmZmllc19tcyhjdGxfdGFibGUgKnRhYmxlLCBpbnQgX191c2VyICpuYW1lLCBpbnQgbmxlbiwKKwkJdm9pZCBfX3VzZXIgKm9sZHZhbCwgc2l6ZV90IF9fdXNlciAqb2xkbGVucCwKKwkJdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbiwgdm9pZCAqKmNvbnRleHQpIHsKKwlyZXR1cm4gLUVOT1NZUzsKK30KKyNlbmRpZgorCisvKiBTaXplIG9mIFN1cHBvcnRlZCBBZGRyZXNzIFBhcmFtZXRlciBmb3IgJ3gnIGFkZHJlc3MgdHlwZXMuICovCisjZGVmaW5lIFNDVFBfU0FUX0xFTih4KSAoc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSArICh4KSAqIHNpemVvZihfX3UxNikpCisKKyNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKKworaW50IHNjdHBfdjZfaW5pdCh2b2lkKTsKK3ZvaWQgc2N0cF92Nl9leGl0KHZvaWQpOworCisjZWxzZSAvKiAjaWZkZWYgZGVmaW5lZChDT05GSUdfSVBWNikgKi8KKworc3RhdGljIGlubGluZSBpbnQgc2N0cF92Nl9pbml0KHZvaWQpIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBzY3RwX3Y2X2V4aXQodm9pZCkgeyByZXR1cm47IH0KKworI2VuZGlmIC8qICNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSAqLworCisvKiBTb21lIHdyYXBwZXJzLCBpbiBjYXNlIGNyeXB0byBub3QgYXZhaWxhYmxlLiAqLworI2lmIGRlZmluZWQgKENPTkZJR19DUllQVE9fSE1BQykKKyNkZWZpbmUgc2N0cF9jcnlwdG9fYWxsb2NfdGZtIGNyeXB0b19hbGxvY190Zm0KKyNkZWZpbmUgc2N0cF9jcnlwdG9fZnJlZV90Zm0gY3J5cHRvX2ZyZWVfdGZtCisjZGVmaW5lIHNjdHBfY3J5cHRvX2htYWMgY3J5cHRvX2htYWMKKyNlbHNlCisjZGVmaW5lIHNjdHBfY3J5cHRvX2FsbG9jX3RmbSh4Li4uKSBOVUxMCisjZGVmaW5lIHNjdHBfY3J5cHRvX2ZyZWVfdGZtKHguLi4pCisjZGVmaW5lIHNjdHBfY3J5cHRvX2htYWMoeC4uLikKKyNlbmRpZgorCisKKy8qIE1hcCBhbiBhc3NvY2lhdGlvbiB0byBhbiBhc3NvY19pZC4gKi8KK3N0YXRpYyBpbmxpbmUgc2N0cF9hc3NvY190IHNjdHBfYXNzb2MyaWQoY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpCit7CisJcmV0dXJuIChhc29jP2Fzb2MtPmFzc29jX2lkOjApOworfQorCisvKiBMb29rIHVwIHRoZSBhc3NvY2lhdGlvbiBieSBpdHMgaWQuICAqLworc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKnNjdHBfaWQyYXNzb2Moc3RydWN0IHNvY2sgKnNrLCBzY3RwX2Fzc29jX3QgaWQpOworCisKKy8qIEEgbWFjcm8gdG8gd2FsayBhIGxpc3Qgb2Ygc2ticy4gICovCisjZGVmaW5lIHNjdHBfc2tiX2Zvcl9lYWNoKHBvcywgaGVhZCwgdG1wKSBcCitmb3IgKHBvcyA9IChoZWFkKS0+bmV4dDtcCisgICAgIHRtcCA9IChwb3MpLT5uZXh0LCBwb3MgIT0gKChzdHJ1Y3Qgc2tfYnVmZiAqKShoZWFkKSk7XAorICAgICBwb3MgPSB0bXApCisKKworLyogQSBoZWxwZXIgdG8gYXBwZW5kIGFuIGVudGlyZSBza2IgbGlzdCAobGlzdCkgdG8gYW5vdGhlciAoaGVhZCkuICovCitzdGF0aWMgaW5saW5lIHZvaWQgc2N0cF9za2JfbGlzdF90YWlsKHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsCisJCQkJICAgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqaGVhZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc2N0cF9zcGluX2xvY2tfaXJxc2F2ZSgmaGVhZC0+bG9jaywgZmxhZ3MpOworCXNjdHBfc3Bpbl9sb2NrKCZsaXN0LT5sb2NrKTsKKworCWxpc3Rfc3BsaWNlKChzdHJ1Y3QgbGlzdF9oZWFkICopbGlzdCwgKHN0cnVjdCBsaXN0X2hlYWQgKiloZWFkLT5wcmV2KTsKKworCWhlYWQtPnFsZW4gKz0gbGlzdC0+cWxlbjsKKwlsaXN0LT5xbGVuID0gMDsKKworCXNjdHBfc3Bpbl91bmxvY2soJmxpc3QtPmxvY2spOworCXNjdHBfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGVhZC0+bG9jaywgZmxhZ3MpOworfQorCisvKioKKyAqCXNjdHBfbGlzdF9kZXF1ZXVlIC0gcmVtb3ZlIGZyb20gdGhlIGhlYWQgb2YgdGhlIHF1ZXVlCisgKglAbGlzdDogbGlzdCB0byBkZXF1ZXVlIGZyb20KKyAqCisgKglSZW1vdmUgdGhlIGhlYWQgb2YgdGhlIGxpc3QuIFRoZSBoZWFkIGl0ZW0gaXMKKyAqCXJldHVybmVkIG9yICVOVUxMIGlmIHRoZSBsaXN0IGlzIGVtcHR5LgorICovCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGxpc3RfaGVhZCAqc2N0cF9saXN0X2RlcXVldWUoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpyZXN1bHQgPSBOVUxMOworCisJaWYgKGxpc3QtPm5leHQgIT0gbGlzdCkgeworCQlyZXN1bHQgPSBsaXN0LT5uZXh0OworCQlsaXN0LT5uZXh0ID0gcmVzdWx0LT5uZXh0OworCQlsaXN0LT5uZXh0LT5wcmV2ID0gbGlzdDsKKwkJSU5JVF9MSVNUX0hFQUQocmVzdWx0KTsKKwl9CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyogVGVzdHMgaWYgdGhlIGxpc3QgaGFzIG9uZSBhbmQgb25seSBvbmUgZW50cnkuICovCitzdGF0aWMgaW5saW5lIGludCBzY3RwX2xpc3Rfc2luZ2xlX2VudHJ5KHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJcmV0dXJuICgoaGVhZC0+bmV4dCAhPSBoZWFkKSAmJiAoaGVhZC0+bmV4dCA9PSBoZWFkLT5wcmV2KSk7Cit9CisKKy8qIENhbGN1bGF0ZSB0aGUgc2l6ZSAoaW4gYnl0ZXMpIG9jY3VwaWVkIGJ5IHRoZSBkYXRhIG9mIGFuIGlvdmVjLiAgKi8KK3N0YXRpYyBpbmxpbmUgc2l6ZV90IGdldF91c2VyX2lvdl9zaXplKHN0cnVjdCBpb3ZlYyAqaW92LCBpbnQgaW92bGVuKQoreworCXNpemVfdCByZXR2YWwgPSAwOworCisJZm9yICg7IGlvdmxlbiA+IDA7IC0taW92bGVuKSB7CisJCXJldHZhbCArPSBpb3YtPmlvdl9sZW47CisJCWlvdisrOworCX0KKworCXJldHVybiByZXR2YWw7Cit9CisKKy8qIEdlbmVyYXRlIGEgcmFuZG9tIGppdHRlciBpbiB0aGUgcmFuZ2Ugb2YgLTUwJSB+ICs1MCUgb2YgaW5wdXQgUlRPLiAqLworc3RhdGljIGlubGluZSBfX3MzMiBzY3RwX2ppdHRlcihfX3UzMiBydG8pCit7CisJc3RhdGljIF9fdTMyIHNjdHBfcmFuZDsKKwlfX3MzMiByZXQ7CisKKwkvKiBBdm9pZCBkaXZpZGUgYnkgemVyby4gKi8KKwlpZiAoIXJ0bykKKwkJcnRvID0gMTsKKworCXNjdHBfcmFuZCArPSBqaWZmaWVzOworCXNjdHBfcmFuZCBePSAoc2N0cF9yYW5kIDw8IDEyKTsKKwlzY3RwX3JhbmQgXj0gKHNjdHBfcmFuZCA+PiAyMCk7CisKKwkvKiBDaG9vc2UgcmFuZG9tIG51bWJlciBmcm9tIDAgdG8gcnRvLCB0aGVuIG1vdmUgdG8gLTUwJSB+ICs1MCUKKwkgKiBvZiBydG8uCisJICovCisJcmV0ID0gc2N0cF9yYW5kICUgcnRvIC0gKHJ0byA+PiAxKTsKKwlyZXR1cm4gcmV0OworfQorCisvKiBCcmVhayBkb3duIGRhdGEgY2h1bmtzIGF0IHRoaXMgcG9pbnQuICAqLworc3RhdGljIGlubGluZSBpbnQgc2N0cF9mcmFnX3BvaW50KGNvbnN0IHN0cnVjdCBzY3RwX3NvY2sgKnNwLCBpbnQgcG10dSkKK3sKKwlpbnQgZnJhZyA9IHBtdHU7CisKKwlmcmFnIC09IHNwLT5wZi0+YWYtPm5ldF9oZWFkZXJfbGVuOworCWZyYWcgLT0gc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSArIHNpemVvZihzdHJ1Y3Qgc2N0cF9kYXRhX2NodW5rKTsKKworCWlmIChzcC0+dXNlcl9mcmFnKQorCQlmcmFnID0gbWluX3QoaW50LCBmcmFnLCBzcC0+dXNlcl9mcmFnKTsKKworCWZyYWcgPSBtaW5fdChpbnQsIGZyYWcsIFNDVFBfTUFYX0NIVU5LX0xFTik7CisKKwlyZXR1cm4gZnJhZzsKK30KKworLyogV2FsayB0aHJvdWdoIGEgbGlzdCBvZiBUTFYgcGFyYW1ldGVycy4gIERvbid0IHRydXN0IHRoZQorICogaW5kaXZpZHVhbCBwYXJhbWV0ZXIgbGVuZ3RocyBhbmQgaW5zdGVhZCBkZXBlbmQgb24KKyAqIHRoZSBjaHVuayBsZW5ndGggdG8gaW5kaWNhdGUgd2hlbiB0byBzdG9wLiAgTWFrZSBzdXJlCisgKiB0aGVyZSBpcyByb29tIGZvciBhIHBhcmFtIGhlYWRlciB0b28uCisgKi8KKyNkZWZpbmUgc2N0cF93YWxrX3BhcmFtcyhwb3MsIGNodW5rLCBtZW1iZXIpXAorX3NjdHBfd2Fsa19wYXJhbXMoKHBvcyksIChjaHVuayksIFdPUkRfUk9VTkQobnRvaHMoKGNodW5rKS0+Y2h1bmtfaGRyLmxlbmd0aCkpLCBtZW1iZXIpCisKKyNkZWZpbmUgX3NjdHBfd2Fsa19wYXJhbXMocG9zLCBjaHVuaywgZW5kLCBtZW1iZXIpXAorZm9yIChwb3MudiA9IGNodW5rLT5tZW1iZXI7XAorICAgICBwb3MudiA8PSAodm9pZCAqKWNodW5rICsgZW5kIC0gc2l6ZW9mKHNjdHBfcGFyYW1oZHJfdCkgJiZcCisgICAgIHBvcy52IDw9ICh2b2lkICopY2h1bmsgKyBlbmQgLSBXT1JEX1JPVU5EKG50b2hzKHBvcy5wLT5sZW5ndGgpKSAmJlwKKyAgICAgbnRvaHMocG9zLnAtPmxlbmd0aCkgPj0gc2l6ZW9mKHNjdHBfcGFyYW1oZHJfdCk7XAorICAgICBwb3MudiArPSBXT1JEX1JPVU5EKG50b2hzKHBvcy5wLT5sZW5ndGgpKSkKKworI2RlZmluZSBzY3RwX3dhbGtfZXJyb3JzKGVyciwgY2h1bmtfaGRyKVwKK19zY3RwX3dhbGtfZXJyb3JzKChlcnIpLCAoY2h1bmtfaGRyKSwgbnRvaHMoKGNodW5rX2hkciktPmxlbmd0aCkpCisKKyNkZWZpbmUgX3NjdHBfd2Fsa19lcnJvcnMoZXJyLCBjaHVua19oZHIsIGVuZClcCitmb3IgKGVyciA9IChzY3RwX2Vycmhkcl90ICopKCh2b2lkICopY2h1bmtfaGRyICsgXAorCSAgICBzaXplb2Yoc2N0cF9jaHVua2hkcl90KSk7XAorICAgICAodm9pZCAqKWVyciA8PSAodm9pZCAqKWNodW5rX2hkciArIGVuZCAtIHNpemVvZihzY3RwX2Vycmhkcl90KSAmJlwKKyAgICAgKHZvaWQgKillcnIgPD0gKHZvaWQgKiljaHVua19oZHIgKyBlbmQgLSBXT1JEX1JPVU5EKG50b2hzKGVyci0+bGVuZ3RoKSkgJiZcCisgICAgIG50b2hzKGVyci0+bGVuZ3RoKSA+PSBzaXplb2Yoc2N0cF9lcnJoZHJfdCk7IFwKKyAgICAgZXJyID0gKHNjdHBfZXJyaGRyX3QgKikoKHZvaWQgKillcnIgKyBXT1JEX1JPVU5EKG50b2hzKGVyci0+bGVuZ3RoKSkpKQorCisjZGVmaW5lIHNjdHBfd2Fsa19md2R0c24ocG9zLCBjaHVuaylcCitfc2N0cF93YWxrX2Z3ZHRzbigocG9zKSwgKGNodW5rKSwgbnRvaHMoKGNodW5rKS0+Y2h1bmtfaGRyLT5sZW5ndGgpIC0gc2l6ZW9mKHN0cnVjdCBzY3RwX2Z3ZHRzbl9jaHVuaykpCisKKyNkZWZpbmUgX3NjdHBfd2Fsa19md2R0c24ocG9zLCBjaHVuaywgZW5kKVwKK2ZvciAocG9zID0gY2h1bmstPnN1YmguZndkdHNuX2hkci0+c2tpcDtcCisgICAgICh2b2lkICopcG9zIDw9ICh2b2lkICopY2h1bmstPnN1YmguZndkdHNuX2hkci0+c2tpcCArIGVuZCAtIHNpemVvZihzdHJ1Y3Qgc2N0cF9md2R0c25fc2tpcCk7XAorICAgICBwb3MrKykKKworLyogUm91bmQgYW4gaW50IHVwIHRvIHRoZSBuZXh0IG11bHRpcGxlIG9mIDQuICAqLworI2RlZmluZSBXT1JEX1JPVU5EKHMpICgoKHMpKzMpJn4zKQorCisvKiBNYWtlIGEgbmV3IGluc3RhbmNlIG9mIHR5cGUuICAqLworI2RlZmluZSB0X25ldyh0eXBlLCBmbGFncykJKHR5cGUgKilrbWFsbG9jKHNpemVvZih0eXBlKSwgZmxhZ3MpCisKKy8qIENvbXBhcmUgdHdvIHRpbWV2YWxzLiAgKi8KKyNkZWZpbmUgdHZfbHQocywgdCkgXAorICAgKHMudHZfc2VjIDwgdC50dl9zZWMgfHwgKHMudHZfc2VjID09IHQudHZfc2VjICYmIHMudHZfdXNlYyA8IHQudHZfdXNlYykpCisKKy8qIEFkZCB0djEgdG8gdHYyLiAqLworI2RlZmluZSBUSU1FVkFMX0FERCh0djEsIHR2MikgXAorKHsgXAorICAgICAgICBzdXNlY29uZHNfdCB1c2VjcyA9ICh0djIpLnR2X3VzZWMgKyAodHYxKS50dl91c2VjOyBcCisgICAgICAgIHRpbWVfdCBzZWNzID0gKHR2MikudHZfc2VjICsgKHR2MSkudHZfc2VjOyBcCitcCisgICAgICAgIGlmICh1c2VjcyA+PSAxMDAwMDAwKSB7IFwKKyAgICAgICAgICAgICAgICB1c2VjcyAtPSAxMDAwMDAwOyBcCisgICAgICAgICAgICAgICAgc2VjcysrOyBcCisgICAgICAgIH0gXAorICAgICAgICAodHYyKS50dl9zZWMgPSBzZWNzOyBcCisgICAgICAgICh0djIpLnR2X3VzZWMgPSB1c2VjczsgXAorfSkKKworLyogRXh0ZXJuYWwgcmVmZXJlbmNlcy4gKi8KKworZXh0ZXJuIHN0cnVjdCBwcm90byBzY3RwX3Byb3Q7CitleHRlcm4gc3RydWN0IHByb3RvIHNjdHB2Nl9wcm90OworZXh0ZXJuIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19uZXRfc2N0cDsKK3ZvaWQgc2N0cF9wdXRfcG9ydChzdHJ1Y3Qgc29jayAqc2spOworCitleHRlcm4gc3RydWN0IGlkciBzY3RwX2Fzc29jc19pZDsKK2V4dGVybiBzcGlubG9ja190IHNjdHBfYXNzb2NzX2lkX2xvY2s7CisKKy8qIFN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zLiAqLworCisvKiBDb252ZXJ0IGZyb20gYW4gSVAgdmVyc2lvbiBudW1iZXIgdG8gYW4gQWRkcmVzcyBGYW1pbHkgc3ltYm9sLiAgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGlwdmVyMmFmKF9fdTggaXB2ZXIpCit7CisJc3dpdGNoIChpcHZlcikgeworCWNhc2UgNDoKKwkgICAgICAgIHJldHVybiAgQUZfSU5FVDsKKwljYXNlIDY6CisJCXJldHVybiBBRl9JTkVUNjsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9OworfQorCisvKiBDb252ZXJ0IGZyb20gYW4gYWRkcmVzcyBwYXJhbWV0ZXIgdHlwZSB0byBhbiBhZGRyZXNzIGZhbWlseS4gICovCitzdGF0aWMgaW5saW5lIGludCBwYXJhbV90eXBlMmFmKF9fdTE2IHR5cGUpCit7CisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBTQ1RQX1BBUkFNX0lQVjRfQUREUkVTUzoKKwkgICAgICAgIHJldHVybiAgQUZfSU5FVDsKKwljYXNlIFNDVFBfUEFSQU1fSVBWNl9BRERSRVNTOgorCQlyZXR1cm4gQUZfSU5FVDY7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfTsKK30KKworLyogUGVyZm9ybSBzb21lIHNhbml0eSBjaGVja3MuICovCitzdGF0aWMgaW5saW5lIGludCBzY3RwX3Nhbml0eV9jaGVjayh2b2lkKQoreworCVNDVFBfQVNTRVJUKHNpemVvZihzdHJ1Y3Qgc2N0cF91bHBldmVudCkgPD0KKwkJICAgIHNpemVvZigoKHN0cnVjdCBza19idWZmICopMCktPmNiKSwKKwkJICAgICJTQ1RQOiB1bHBldmVudCBkb2VzIG5vdCBmaXQgaW4gc2tiIVxuIiwgcmV0dXJuIDApOworCisJcmV0dXJuIDE7Cit9CisKKy8qIFdhcm5pbmc6IFRoZSBmb2xsb3dpbmcgaGFzaCBmdW5jdGlvbnMgYXNzdW1lIGEgcG93ZXIgb2YgdHdvICdzaXplJy4gKi8KKy8qIFRoaXMgaXMgdGhlIGhhc2ggZnVuY3Rpb24gZm9yIHRoZSBTQ1RQIHBvcnQgaGFzaCB0YWJsZS4gKi8KK3N0YXRpYyBpbmxpbmUgaW50IHNjdHBfcGhhc2hmbihfX3UxNiBscG9ydCkKK3sKKwlyZXR1cm4gKGxwb3J0ICYgKHNjdHBfcG9ydF9oYXNoc2l6ZSAtIDEpKTsKK30KKworLyogVGhpcyBpcyB0aGUgaGFzaCBmdW5jdGlvbiBmb3IgdGhlIGVuZHBvaW50IGhhc2ggdGFibGUuICovCitzdGF0aWMgaW5saW5lIGludCBzY3RwX2VwX2hhc2hmbihfX3UxNiBscG9ydCkKK3sKKwlyZXR1cm4gKGxwb3J0ICYgKHNjdHBfZXBfaGFzaHNpemUgLSAxKSk7Cit9CisKKy8qIFRoaXMgaXMgdGhlIGhhc2ggZnVuY3Rpb24gZm9yIHRoZSBhc3NvY2lhdGlvbiBoYXNoIHRhYmxlLiAqLworc3RhdGljIGlubGluZSBpbnQgc2N0cF9hc3NvY19oYXNoZm4oX191MTYgbHBvcnQsIF9fdTE2IHJwb3J0KQoreworCWludCBoID0gKGxwb3J0IDw8IDE2KSArIHJwb3J0OworCWggXj0gaD4+ODsKKwlyZXR1cm4gKGggJiAoc2N0cF9hc3NvY19oYXNoc2l6ZSAtIDEpKTsKK30KKworLyogVGhpcyBpcyB0aGUgaGFzaCBmdW5jdGlvbiBmb3IgdGhlIGFzc29jaWF0aW9uIGhhc2ggdGFibGUuICBUaGlzIGlzCisgKiBub3QgdXNlZCB5ZXQsIGJ1dCBjb3VsZCBiZSB1c2VkIGFzIGEgYmV0dGVyIGhhc2ggZnVuY3Rpb24gd2hlbgorICogd2UgaGF2ZSBhIHZ0YWcuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHNjdHBfdnRhZ19oYXNoZm4oX191MTYgbHBvcnQsIF9fdTE2IHJwb3J0LCBfX3UzMiB2dGFnKQoreworCWludCBoID0gKGxwb3J0IDw8IDE2KSArIHJwb3J0OworCWggXj0gdnRhZzsKKwlyZXR1cm4gKGggJiAoc2N0cF9hc3NvY19oYXNoc2l6ZS0xKSk7Cit9CisKKy8qIElzIGEgc29ja2V0IG9mIHRoaXMgc3R5bGU/ICovCisjZGVmaW5lIHNjdHBfc3R5bGUoc2ssIHN0eWxlKSBfX3NjdHBfc3R5bGUoKHNrKSwgKFNDVFBfU09DS0VUXyMjc3R5bGUpKQorc3RhdGljIGlubGluZSBpbnQgX19zY3RwX3N0eWxlKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc2N0cF9zb2NrZXRfdHlwZV90IHN0eWxlKQoreworCXJldHVybiBzY3RwX3NrKHNrKS0+dHlwZSA9PSBzdHlsZTsKK30KKworLyogSXMgdGhlIGFzc29jaWF0aW9uIGluIHRoaXMgc3RhdGU/ICovCisjZGVmaW5lIHNjdHBfc3RhdGUoYXNvYywgc3RhdGUpIF9fc2N0cF9zdGF0ZSgoYXNvYyksIChTQ1RQX1NUQVRFXyMjc3RhdGUpKQorc3RhdGljIGlubGluZSBpbnQgX19zY3RwX3N0YXRlKGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAorCQkJICAgICAgIHNjdHBfc3RhdGVfdCBzdGF0ZSkKK3sKKwlyZXR1cm4gYXNvYy0+c3RhdGUgPT0gc3RhdGU7Cit9CisKKy8qIElzIHRoZSBzb2NrZXQgaW4gdGhpcyBzdGF0ZT8gKi8KKyNkZWZpbmUgc2N0cF9zc3RhdGUoc2ssIHN0YXRlKSBfX3NjdHBfc3N0YXRlKChzayksIChTQ1RQX1NTXyMjc3RhdGUpKQorc3RhdGljIGlubGluZSBpbnQgX19zY3RwX3NzdGF0ZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHNjdHBfc29ja19zdGF0ZV90IHN0YXRlKQoreworCXJldHVybiBzay0+c2tfc3RhdGUgPT0gc3RhdGU7Cit9CisKKy8qIE1hcCB2NC1tYXBwZWQgdjYgYWRkcmVzcyBiYWNrIHRvIHY0IGFkZHJlc3MgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzY3RwX3Y2X21hcF92NCh1bmlvbiBzY3RwX2FkZHIgKmFkZHIpCit7CisJYWRkci0+djQuc2luX2ZhbWlseSA9IEFGX0lORVQ7CisJYWRkci0+djQuc2luX3BvcnQgPSBhZGRyLT52Ni5zaW42X3BvcnQ7CisJYWRkci0+djQuc2luX2FkZHIuc19hZGRyID0gYWRkci0+djYuc2luNl9hZGRyLnM2X2FkZHIzMlszXTsKK30KKworLyogTWFwIHY0IGFkZHJlc3MgdG8gdjQtbWFwcGVkIHY2IGFkZHJlc3MgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzY3RwX3Y0X21hcF92Nih1bmlvbiBzY3RwX2FkZHIgKmFkZHIpCit7CisJYWRkci0+djYuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKwlhZGRyLT52Ni5zaW42X3BvcnQgPSBhZGRyLT52NC5zaW5fcG9ydDsKKwlhZGRyLT52Ni5zaW42X2FkZHIuczZfYWRkcjMyWzNdID0gYWRkci0+djQuc2luX2FkZHIuc19hZGRyOworCWFkZHItPnY2LnNpbjZfYWRkci5zNl9hZGRyMzJbMF0gPSAwOworCWFkZHItPnY2LnNpbjZfYWRkci5zNl9hZGRyMzJbMV0gPSAwOworCWFkZHItPnY2LnNpbjZfYWRkci5zNl9hZGRyMzJbMl0gPSBodG9ubCgweDAwMDBmZmZmKTsKK30KKworI2VuZGlmIC8qIF9fbmV0X3NjdHBfaF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY3RwL3NtLmggYi9pbmNsdWRlL25ldC9zY3RwL3NtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU3NmRiNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L3NjdHAvc20uaApAQCAtMCwwICsxLDQ0MiBAQAorLyogU0NUUCBrZXJuZWwgcmVmZXJlbmNlIEltcGxlbWVudGF0aW9uCisgKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAyMDAxLCAyMDA0CisgKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMCBDaXNjbywgSW5jLgorICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDEgTW90b3JvbGEsIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAwMSBJbnRlbCBDb3JwLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTQ1RQIGtlcm5lbCByZWZlcmVuY2UgSW1wbGVtZW50YXRpb24KKyAqCisgKiBUaGVzZSBhcmUgZGVmaW5pdGlvbnMgbmVlZGVkIGJ5IHRoZSBzdGF0ZSBtYWNoaW5lLgorICoKKyAqIFRoZSBTQ1RQIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBpcyBmcmVlIHNvZnR3YXJlOworICogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YKKyAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoZSBTQ1RQIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0CisgKiB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQKKyAqICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCBHTlUgQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICogUGxlYXNlIHNlbmQgYW55IGJ1ZyByZXBvcnRzIG9yIGZpeGVzIHlvdSBtYWtlIHRvIHRoZQorICogZW1haWwgYWRkcmVzc2VzOgorICogICAgbGtzY3RwIGRldmVsb3BlcnMgPGxrc2N0cC1kZXZlbG9wZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD4KKyAqCisgKiBPciBzdWJtaXQgYSBidWcgcmVwb3J0IHRocm91Z2ggdGhlIGZvbGxvd2luZyB3ZWJzaXRlOgorICogICAgaHR0cDovL3d3dy5zZi5uZXQvcHJvamVjdHMvbGtzY3RwCisgKgorICogV3JpdHRlbiBvciBtb2RpZmllZCBieToKKyAqICAgIExhIE1vbnRlIEguUC4gWWFycm9sbCA8cGlnZ3lAYWNtLm9yZz4KKyAqICAgIEthcmwgS251dHNvbiA8a2FybEBhdGhlbmEuY2hpY2Fnby5pbC51cz4KKyAqICAgIFhpbmdhbmcgR3VvIDx4aW5nYW5nLmd1b0BpbnRlbC5jb20+CisgKiAgICBKb24gR3JpbW0gPGpncmltbUB1cy5pYm0uY29tPgorICogICAgRGFqaWFuZyBaaGFuZyA8ZGFqaWFuZy56aGFuZ0Bub2tpYS5jb20+CisgKiAgICBTcmlkaGFyIFNhbXVkcmFsYSA8c3JpQHVzLmlibS5jb20+CisgKiAgICBEYWlzeSBDaGFuZyA8ZGFpc3ljQHVzLmlibS5jb20+CisgKiAgICBBcmRlbGxlIEZhbiA8YXJkZWxsZS5mYW5AaW50ZWwuY29tPgorICogICAgS2V2aW4gR2FvIDxrZXZpbi5nYW9AaW50ZWwuY29tPgorICoKKyAqIEFueSBidWdzIHJlcG9ydGVkIGdpdmVuIHRvIHVzIHdlIHdpbGwgdHJ5IHRvIGZpeC4uLiBhbnkgZml4ZXMgc2hhcmVkIHdpbGwKKyAqIGJlIGluY29ycG9yYXRlZCBpbnRvIHRoZSBuZXh0IFNDVFAgcmVsZWFzZS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPG5ldC9zY3RwL2NvbW1hbmQuaD4KKyNpbmNsdWRlIDxuZXQvc2N0cC9zY3RwLmg+CisKKyNpZm5kZWYgX19zY3RwX3NtX2hfXworI2RlZmluZSBfX3NjdHBfc21faF9fCisKKy8qCisgKiBQb3NzaWJsZSB2YWx1ZXMgZm9yIHRoZSBkaXNwb3NpdGlvbiBhcmU6CisgKi8KK3R5cGVkZWYgZW51bSB7CisJU0NUUF9ESVNQT1NJVElPTl9ESVNDQVJELAkgLyogTm8gZnVydGhlciBwcm9jZXNzaW5nLiAgKi8KKwlTQ1RQX0RJU1BPU0lUSU9OX0NPTlNVTUUsCSAvKiBQcm9jZXNzIHJldHVybiB2YWx1ZXMgbm9ybWFsbHkuICAqLworCVNDVFBfRElTUE9TSVRJT05fTk9NRU0sCQkgLyogV2UgcmFuIG91dCBvZiBtZW1vcnktLXJlY292ZXIuICAqLworCVNDVFBfRElTUE9TSVRJT05fREVMRVRFX1RDQiwJIC8qIENsb3NlIHRoZSBhc3NvY2lhdGlvbi4gICovCisJU0NUUF9ESVNQT1NJVElPTl9BQk9SVCwJCSAvKiBDbG9zZSB0aGUgYXNzb2NpYXRpb24gTk9XLiAgKi8KKwlTQ1RQX0RJU1BPU0lUSU9OX1ZJT0xBVElPTiwJIC8qIFRoZSBwZWVyIGlzIG1pc2JlaGF2aW5nLiAgKi8KKwlTQ1RQX0RJU1BPU0lUSU9OX05PVF9JTVBMLAkgLyogVGhpcyBlbnRyeSBpcyBub3QgaW1wbGVtZW50ZWQuICAqLworCVNDVFBfRElTUE9TSVRJT05fRVJST1IsCQkgLyogVGhpcyBpcyBwbGFpbiBvbGQgdXNlciBlcnJvci4gICovCisJU0NUUF9ESVNQT1NJVElPTl9CVUcsCQkgLyogVGhpcyBpcyBhIGJ1Zy4gICovCit9IHNjdHBfZGlzcG9zaXRpb25fdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCWludCBuYW1lOworCWludCBhY3Rpb247Cit9IHNjdHBfc21fY29tbWFuZF90OworCit0eXBlZGVmIHNjdHBfZGlzcG9zaXRpb25fdCAoc2N0cF9zdGF0ZV9mbl90KSAoY29uc3Qgc3RydWN0IHNjdHBfZW5kcG9pbnQgKiwKKwkJCQkJICAgICAgY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKiwKKwkJCQkJICAgICAgY29uc3Qgc2N0cF9zdWJ0eXBlX3QgdHlwZSwKKwkJCQkJICAgICAgdm9pZCAqYXJnLAorCQkJCQkgICAgICBzY3RwX2NtZF9zZXFfdCAqKTsKK3R5cGVkZWYgdm9pZCAoc2N0cF90aW1lcl9ldmVudF90KSAodW5zaWduZWQgbG9uZyk7Cit0eXBlZGVmIHN0cnVjdCB7CisJc2N0cF9zdGF0ZV9mbl90ICpmbjsKKwljb25zdCBjaGFyICpuYW1lOworfSBzY3RwX3NtX3RhYmxlX2VudHJ5X3Q7CisKKy8qIEEgbmFtaW5nIGNvbnZlbnRpb24gb2YgInNjdHBfc2ZfeHh4IiBhcHBsaWVzIHRvIGFsbCB0aGUgc3RhdGUgZnVuY3Rpb25zCisgKiBjdXJyZW50bHkgaW4gdXNlLgorICovCisKKy8qIFByb3RvdHlwZXMgZm9yIGdlbmVyaWMgc3RhdGUgZnVuY3Rpb25zLiAqLworc2N0cF9zdGF0ZV9mbl90IHNjdHBfc2Zfbm90X2ltcGw7CitzY3RwX3N0YXRlX2ZuX3Qgc2N0cF9zZl9idWc7CisKKy8qIFByb3RvdHlwZXMgZm9yIGdlbmVyIHRpbWVyIHN0YXRlIGZ1bmN0aW9ucy4gKi8KK3NjdHBfc3RhdGVfZm5fdCBzY3RwX3NmX3RpbWVyX2lnbm9yZTsKKworLyogUHJvdG90eXBlcyBmb3IgY2h1bmsgc3RhdGUgZnVuY3Rpb25zLiAqLworc2N0cF9zdGF0ZV9mbl90IHNjdHBfc2ZfZG9fOV8xX2Fib3J0Oworc2N0cF9zdGF0ZV9mbl90IHNjdHBfc2ZfY29va2llX3dhaXRfYWJvcnQ7CitzY3RwX3N0YXRlX2ZuX3Qgc2N0cF9zZl9jb29raWVfZWNob2VkX2Fib3J0Oworc2N0cF9zdGF0ZV9mbl90IHNjdHBfc2Zfc2h1dGRvd25fcGVuZGluZ19hYm9ydDsKK3NjdHBfc3RhdGVfZm5fdCBzY3RwX3NmX3NodXRkb3duX3NlbnRfYWJvcnQ7CitzY3RwX3N0YXRlX2ZuX3Qgc2N0cF9zZl9zaHV0ZG93bl9hY2tfc2VudF9hYm9ydDsKK3NjdHBfc3RhdGVfZm5fdCBzY3RwX3NmX2RvXzVfMUJfaW5pdDsKK3NjdHBfc3RhdGVfZm5fdCBzY3RwX3NmX2RvXzVfMUNfYWNrOworc2N0cF9zdGF0ZV9mbl90IHNjdHBfc2ZfZG9fNV8xRF9jZTsKK3NjdHBfc3RhdGVfZm5fdCBzY3RwX3NmX2RvXzVfMUVfY2E7CitzY3RwX3N0YXRlX2ZuX3Qgc2N0cF9zZl9kb180X0M7CitzY3RwX3N0YXRlX2ZuX3Qgc2N0cF9zZl9lYXRfZGF0YV82XzI7CitzY3RwX3N0YXRlX2ZuX3Qgc2N0cF9zZl9lYXRfZGF0YV9mYXN0XzRfNDsKK3NjdHBfc3RhdGVfZm5fdCBzY3RwX3NmX2VhdF9zYWNrXzZfMjsKK3NjdHBfc3RhdGVfZm5fdCBzY3RwX3NmX3RhYm9ydF84XzRfODsKK3NjdHBfc3RhdGVfZm5fdCBzY3RwX3NmX29wZXJyX25vdGlmeTsKK3NjdHBfc3RhdGVfZm5fdCBzY3RwX3NmX3QxX3RpbWVyX2V4cGlyZTsKK3NjdHBfc3RhdGVfZm5fdCBzY3RwX3NmX3QyX3RpbWVyX2V4cGlyZTsKK3NjdHBfc3RhdGVfZm5fdCBzY3RwX3NmX3Q0X3RpbWVyX2V4cGlyZTsKK3NjdHBfc3RhdGVfZm5fdCBzY3RwX3NmX3Q1X3RpbWVyX2V4cGlyZTsKK3NjdHBfc3RhdGVfZm5fdCBzY3RwX3NmX3NlbmRiZWF0XzhfMzsKK3NjdHBfc3RhdGVfZm5fdCBzY3RwX3NmX2JlYXRfOF8zOworc2N0cF9zdGF0ZV9mbl90IHNjdHBfc2ZfYmFja2JlYXRfOF8zOworc2N0cF9zdGF0ZV9mbl90IHNjdHBfc2ZfZG9fOV8yX2ZpbmFsOworc2N0cF9zdGF0ZV9mbl90IHNjdHBfc2ZfZG9fOV8yX3NodXRkb3duOworc2N0cF9zdGF0ZV9mbl90IHNjdHBfc2ZfZG9fZWNuX2N3cjsKK3NjdHBfc3RhdGVfZm5fdCBzY3RwX3NmX2RvX2VjbmU7CitzY3RwX3N0YXRlX2ZuX3Qgc2N0cF9zZl9vb3RiOworc2N0cF9zdGF0ZV9mbl90IHNjdHBfc2ZfcGRpc2NhcmQ7CitzY3RwX3N0YXRlX2ZuX3Qgc2N0cF9zZl92aW9sYXRpb247CitzY3RwX3N0YXRlX2ZuX3Qgc2N0cF9zZl92aW9sYXRpb25fY2h1bmtsZW47CitzY3RwX3N0YXRlX2ZuX3Qgc2N0cF9zZl9kaXNjYXJkX2NodW5rOworc2N0cF9zdGF0ZV9mbl90IHNjdHBfc2ZfZG9fNV8yXzFfc2ltaW5pdDsKK3NjdHBfc3RhdGVfZm5fdCBzY3RwX3NmX2RvXzVfMl8yX2R1cGluaXQ7CitzY3RwX3N0YXRlX2ZuX3Qgc2N0cF9zZl9kb181XzJfNF9kdXBjb29rOworc2N0cF9zdGF0ZV9mbl90IHNjdHBfc2ZfdW5rX2NodW5rOworc2N0cF9zdGF0ZV9mbl90IHNjdHBfc2ZfZG9fOF81XzFfRV9zYTsKK3NjdHBfc3RhdGVfZm5fdCBzY3RwX3NmX2Nvb2tpZV9lY2hvZWRfZXJyOworc2N0cF9zdGF0ZV9mbl90IHNjdHBfc2ZfZG9fYXNjb25mOworc2N0cF9zdGF0ZV9mbl90IHNjdHBfc2ZfZG9fYXNjb25mX2FjazsKK3NjdHBfc3RhdGVfZm5fdCBzY3RwX3NmX2RvXzlfMl9yZXNodXRhY2s7CitzY3RwX3N0YXRlX2ZuX3Qgc2N0cF9zZl9lYXRfZndkX3RzbjsKK3NjdHBfc3RhdGVfZm5fdCBzY3RwX3NmX2VhdF9md2RfdHNuX2Zhc3Q7CisKKy8qIFByb3RvdHlwZXMgZm9yIHByaW1pdGl2ZSBldmVudCBzdGF0ZSBmdW5jdGlvbnMuICAqLworc2N0cF9zdGF0ZV9mbl90IHNjdHBfc2ZfZG9fcHJtX2Fzb2M7CitzY3RwX3N0YXRlX2ZuX3Qgc2N0cF9zZl9kb19wcm1fc2VuZDsKK3NjdHBfc3RhdGVfZm5fdCBzY3RwX3NmX2RvXzlfMl9wcm1fc2h1dGRvd247CitzY3RwX3N0YXRlX2ZuX3Qgc2N0cF9zZl9jb29raWVfd2FpdF9wcm1fc2h1dGRvd247CitzY3RwX3N0YXRlX2ZuX3Qgc2N0cF9zZl9jb29raWVfZWNob2VkX3BybV9zaHV0ZG93bjsKK3NjdHBfc3RhdGVfZm5fdCBzY3RwX3NmX2RvXzlfMV9wcm1fYWJvcnQ7CitzY3RwX3N0YXRlX2ZuX3Qgc2N0cF9zZl9jb29raWVfd2FpdF9wcm1fYWJvcnQ7CitzY3RwX3N0YXRlX2ZuX3Qgc2N0cF9zZl9jb29raWVfZWNob2VkX3BybV9hYm9ydDsKK3NjdHBfc3RhdGVfZm5fdCBzY3RwX3NmX3NodXRkb3duX3BlbmRpbmdfcHJtX2Fib3J0Oworc2N0cF9zdGF0ZV9mbl90IHNjdHBfc2Zfc2h1dGRvd25fc2VudF9wcm1fYWJvcnQ7CitzY3RwX3N0YXRlX2ZuX3Qgc2N0cF9zZl9zaHV0ZG93bl9hY2tfc2VudF9wcm1fYWJvcnQ7CitzY3RwX3N0YXRlX2ZuX3Qgc2N0cF9zZl9lcnJvcl9jbG9zZWQ7CitzY3RwX3N0YXRlX2ZuX3Qgc2N0cF9zZl9lcnJvcl9zaHV0ZG93bjsKK3NjdHBfc3RhdGVfZm5fdCBzY3RwX3NmX2lnbm9yZV9wcmltaXRpdmU7CitzY3RwX3N0YXRlX2ZuX3Qgc2N0cF9zZl9kb19wcm1fcmVxdWVzdGhlYXJ0YmVhdDsKK3NjdHBfc3RhdGVfZm5fdCBzY3RwX3NmX2RvX3BybV9hc2NvbmY7CisKKy8qIFByb3RvdHlwZXMgZm9yIG90aGVyIGV2ZW50IHN0YXRlIGZ1bmN0aW9ucy4gICovCitzY3RwX3N0YXRlX2ZuX3Qgc2N0cF9zZl9kb185XzJfc3RhcnRfc2h1dGRvd247CitzY3RwX3N0YXRlX2ZuX3Qgc2N0cF9zZl9kb185XzJfc2h1dGRvd25fYWNrOworc2N0cF9zdGF0ZV9mbl90IHNjdHBfc2ZfaWdub3JlX290aGVyOworc2N0cF9zdGF0ZV9mbl90IHNjdHBfc2ZfY29va2llX3dhaXRfaWNtcF9hYm9ydDsKKworLyogUHJvdG90eXBlcyBmb3IgdGltZW91dCBldmVudCBzdGF0ZSBmdW5jdGlvbnMuICAqLworc2N0cF9zdGF0ZV9mbl90IHNjdHBfc2ZfZG9fNl8zXzNfcnR4Oworc2N0cF9zdGF0ZV9mbl90IHNjdHBfc2ZfZG9fNl8yX3NhY2s7CitzY3RwX3N0YXRlX2ZuX3Qgc2N0cF9zZl9hdXRvY2xvc2VfdGltZXJfZXhwaXJlOworCisvKiBQcm90b3R5cGVzIGZvciB1dGlsaXR5IHN1cHBvcnQgZnVuY3Rpb25zLiAgKi8KK19fdTggc2N0cF9nZXRfY2h1bmtfdHlwZShzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmspOworY29uc3Qgc2N0cF9zbV90YWJsZV9lbnRyeV90ICpzY3RwX3NtX2xvb2t1cF9ldmVudChzY3RwX2V2ZW50X3QsCisJCQkJCSAgICBzY3RwX3N0YXRlX3QsCisJCQkJCSAgICBzY3RwX3N1YnR5cGVfdCk7CitpbnQgc2N0cF9jaHVua19paWYoY29uc3Qgc3RydWN0IHNjdHBfY2h1bmsgKik7CitzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqc2N0cF9tYWtlX3RlbXBfYXNvYyhjb25zdCBzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqLAorCQkJCQkgICAgIHN0cnVjdCBzY3RwX2NodW5rICosCisJCQkJCSAgICAgaW50IGdmcCk7CitfX3UzMiBzY3RwX2dlbmVyYXRlX3ZlcmlmaWNhdGlvbl90YWcodm9pZCk7Cit2b2lkIHNjdHBfcG9wdWxhdGVfdGllX3RhZ3MoX191OCAqY29va2llLCBfX3UzMiBjdXJUYWcsIF9fdTMyIGhpc1RhZyk7CisKKy8qIFByb3RvdHlwZXMgZm9yIGNodW5rLWJ1aWxkaW5nIGZ1bmN0aW9ucy4gICovCitzdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9tYWtlX2luaXQoY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKiwKKwkJCSAgICAgY29uc3Qgc3RydWN0IHNjdHBfYmluZF9hZGRyICosCisJCQkgICAgIGludCBnZnAsIGludCB2cGFyYW1fbGVuKTsKK3N0cnVjdCBzY3RwX2NodW5rICpzY3RwX21ha2VfaW5pdF9hY2soY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKiwKKwkJCQkgY29uc3Qgc3RydWN0IHNjdHBfY2h1bmsgKiwKKwkJCQkgY29uc3QgaW50IGdmcCwKKwkJCQkgY29uc3QgaW50IHVua3BhcmFtX2xlbik7CitzdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9tYWtlX2Nvb2tpZV9lY2hvKGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICosCisJCQkJICAgIGNvbnN0IHN0cnVjdCBzY3RwX2NodW5rICopOworc3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfbWFrZV9jb29raWVfYWNrKGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICosCisJCQkJICAgY29uc3Qgc3RydWN0IHNjdHBfY2h1bmsgKik7CitzdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9tYWtlX2N3cihjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqLAorCQkJCSBjb25zdCBfX3UzMiBsb3dlc3RfdHNuLAorCQkJCSBjb25zdCBzdHJ1Y3Qgc2N0cF9jaHVuayAqKTsKK3N0cnVjdCBzY3RwX2NodW5rICogc2N0cF9tYWtlX2RhdGFmcmFnX2VtcHR5KHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICosCisJCQkJCWNvbnN0IHN0cnVjdCBzY3RwX3NuZHJjdmluZm8gKnNpbmZvLAorCQkJCQlpbnQgbGVuLCBjb25zdCBfX3U4IGZsYWdzLAorCQkJCQlfX3UxNiBzc24pOworc3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfbWFrZV9lY25lKGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICosCisJCQkJICBjb25zdCBfX3UzMik7CitzdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9tYWtlX3NhY2soY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKik7CitzdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9tYWtlX3NodXRkb3duKGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBzY3RwX2NodW5rICpjaHVuayk7CitzdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9tYWtlX3NodXRkb3duX2Fjayhjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKKwkJCQkJICBjb25zdCBzdHJ1Y3Qgc2N0cF9jaHVuayAqKTsKK3N0cnVjdCBzY3RwX2NodW5rICpzY3RwX21ha2Vfc2h1dGRvd25fY29tcGxldGUoY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKiwKKwkJCQkJICBjb25zdCBzdHJ1Y3Qgc2N0cF9jaHVuayAqKTsKK3ZvaWQgc2N0cF9pbml0X2NhdXNlKHN0cnVjdCBzY3RwX2NodW5rICosIF9fdTE2IGNhdXNlLCBjb25zdCB2b2lkICosIHNpemVfdCk7CitzdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9tYWtlX2Fib3J0KGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICosCisJCQkgICAgICBjb25zdCBzdHJ1Y3Qgc2N0cF9jaHVuayAqLAorCQkJICAgICAgY29uc3Qgc2l6ZV90IGhpbnQpOworc3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfbWFrZV9hYm9ydF9ub19kYXRhKGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICosCisJCQkJICAgICAgY29uc3Qgc3RydWN0IHNjdHBfY2h1bmsgKiwKKwkJCQkgICAgICBfX3UzMiB0c24pOworc3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfbWFrZV9hYm9ydF91c2VyKGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICosCisJCQkJICAgY29uc3Qgc3RydWN0IHNjdHBfY2h1bmsgKiwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgbXNnaGRyICopOworc3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfbWFrZV9hYm9ydF92aW9sYXRpb24oY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKiwKKwkJCQkgICBjb25zdCBzdHJ1Y3Qgc2N0cF9jaHVuayAqLAorCQkJCSAgIGNvbnN0IF9fdTggKiwKKwkJCQkgICBjb25zdCBzaXplX3QgKTsKK3N0cnVjdCBzY3RwX2NodW5rICpzY3RwX21ha2VfaGVhcnRiZWF0KGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICosCisJCQkJICBjb25zdCBzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKiwKKwkJCQkgIGNvbnN0IHZvaWQgKnBheWxvYWQsCisJCQkJICBjb25zdCBzaXplX3QgcGF5bGVuKTsKK3N0cnVjdCBzY3RwX2NodW5rICpzY3RwX21ha2VfaGVhcnRiZWF0X2Fjayhjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBzY3RwX2NodW5rICosCisJCQkJICAgICAgY29uc3Qgdm9pZCAqcGF5bG9hZCwKKwkJCQkgICAgICBjb25zdCBzaXplX3QgcGF5bGVuKTsKK3N0cnVjdCBzY3RwX2NodW5rICpzY3RwX21ha2Vfb3BfZXJyb3IoY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKiwKKwkJCQkgY29uc3Qgc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rLAorCQkJCSBfX3UxNiBjYXVzZV9jb2RlLAorCQkJCSBjb25zdCB2b2lkICpwYXlsb2FkLAorCQkJCSBzaXplX3QgcGF5bGVuKTsKKworc3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfbWFrZV9hc2NvbmZfdXBkYXRlX2lwKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICosCisJCQkJCSAgICAgIHVuaW9uIHNjdHBfYWRkciAqLAorCQkJCQkgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKiwKKwkJCQkJICAgICAgaW50LCBfX3UxNik7CitzdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9tYWtlX2FzY29uZl9zZXRfcHJpbShzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKKwkJCQkJICAgICB1bmlvbiBzY3RwX2FkZHIgKmFkZHIpOworc3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfcHJvY2Vzc19hc2NvbmYoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCisJCQkJICAgICAgIHN0cnVjdCBzY3RwX2NodW5rICphc2NvbmYpOworaW50IHNjdHBfcHJvY2Vzc19hc2NvbmZfYWNrKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAorCQkJICAgIHN0cnVjdCBzY3RwX2NodW5rICphc2NvbmZfYWNrKTsKK3N0cnVjdCBzY3RwX2NodW5rICpzY3RwX21ha2VfZndkdHNuKGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAorCQkJCSAgICBfX3UzMiBuZXdfY3VtX3Rzbiwgc2l6ZV90IG5zdHJlYW1zLAorCQkJCSAgICBzdHJ1Y3Qgc2N0cF9md2R0c25fc2tpcCAqc2tpcGxpc3QpOworCit2b2lkIHNjdHBfY2h1bmtfYXNzaWduX3RzbihzdHJ1Y3Qgc2N0cF9jaHVuayAqKTsKK3ZvaWQgc2N0cF9jaHVua19hc3NpZ25fc3NuKHN0cnVjdCBzY3RwX2NodW5rICopOworCit2b2lkIHNjdHBfc3RvcF90MV9hbmRfYWJvcnQoc2N0cF9jbWRfc2VxX3QgKmNvbW1hbmRzLCBfX3UxNiBlcnJvcik7CisKKy8qIFByb3RvdHlwZXMgZm9yIHN0YXRldGFibGUgcHJvY2Vzc2luZy4gKi8KKworaW50IHNjdHBfZG9fc20oc2N0cF9ldmVudF90IGV2ZW50X3R5cGUsIHNjdHBfc3VidHlwZV90IHN1YnR5cGUsCisJICAgICAgIHNjdHBfc3RhdGVfdCBzdGF0ZSwKKyAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX2VuZHBvaW50ICosCisgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKKyAgICAgICAgICAgICAgIHZvaWQgKmV2ZW50X2FyZywKKyAgICAgICAgICAgICAgIGludCBnZnApOworCisvKiAybmQgbGV2ZWwgcHJvdG90eXBlcyAqLwordm9pZCBzY3RwX2dlbmVyYXRlX3QzX3J0eF9ldmVudCh1bnNpZ25lZCBsb25nIHBlZXIpOwordm9pZCBzY3RwX2dlbmVyYXRlX2hlYXJ0YmVhdF9ldmVudCh1bnNpZ25lZCBsb25nIHBlZXIpOworCit2b2lkIHNjdHBfb290Yl9wa3RfZnJlZShzdHJ1Y3Qgc2N0cF9wYWNrZXQgKik7CisKK3N0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICpzY3RwX3VucGFja19jb29raWUoY29uc3Qgc3RydWN0IHNjdHBfZW5kcG9pbnQgKiwKKwkJCQkgICAgICAgY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKiwKKwkJCQkgICAgICAgc3RydWN0IHNjdHBfY2h1bmsgKiwgaW50IGdmcCwgaW50ICplcnIsCisJCQkJICAgICAgIHN0cnVjdCBzY3RwX2NodW5rICoqZXJyX2Noa19wKTsKK2ludCBzY3RwX2FkZGlwX2FkZHJfY29uZmlnKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICosIHNjdHBfcGFyYW1fdCwKKwkJCSAgIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlKiwgaW50KTsKKworLyogM3JkIGxldmVsIHByb3RvdHlwZXMgKi8KK19fdTMyIHNjdHBfZ2VuZXJhdGVfdGFnKGNvbnN0IHN0cnVjdCBzY3RwX2VuZHBvaW50ICopOworX191MzIgc2N0cF9nZW5lcmF0ZV90c24oY29uc3Qgc3RydWN0IHNjdHBfZW5kcG9pbnQgKik7CisKKy8qIEV4dGVybiBkZWNsYXJhdGlvbnMgZm9yIG1ham9yIGRhdGEgc3RydWN0dXJlcy4gICovCitleHRlcm4gc2N0cF90aW1lcl9ldmVudF90ICpzY3RwX3RpbWVyX2V2ZW50c1tTQ1RQX05VTV9USU1FT1VUX1RZUEVTXTsKKworCisvKiBHZXQgdGhlIHNpemUgb2YgYSBEQVRBIGNodW5rIHBheWxvYWQuICovCitzdGF0aWMgaW5saW5lIF9fdTE2IHNjdHBfZGF0YV9zaXplKHN0cnVjdCBzY3RwX2NodW5rICpjaHVuaykKK3sKKwlfX3UxNiBzaXplOworCisJc2l6ZSA9IG50b2hzKGNodW5rLT5jaHVua19oZHItPmxlbmd0aCk7CisJc2l6ZSAtPSBzaXplb2Yoc2N0cF9kYXRhX2NodW5rX3QpOworCisJcmV0dXJuIHNpemU7Cit9CisKKy8qIENvbXBhcmUgdHdvIFRTTnMgKi8KKworLyogUkZDIDE5ODIgLSBTZXJpYWwgTnVtYmVyIEFyaXRobWV0aWMKKyAqCisgKiAyLiBDb21wYXJpc29uCisgKiAgVGhlbiwgczEgaXMgc2FpZCB0byBiZSBlcXVhbCB0byBzMiBpZiBhbmQgb25seSBpZiBpMSBpcyBlcXVhbCB0byBpMiwKKyAqICBpbiBhbGwgb3RoZXIgY2FzZXMsIHMxIGlzIG5vdCBlcXVhbCB0byBzMi4KKyAqCisgKiBzMSBpcyBzYWlkIHRvIGJlIGxlc3MgdGhhbiBzMiBpZiwgYW5kIG9ubHkgaWYsIHMxIGlzIG5vdCBlcXVhbCB0byBzMiwKKyAqIGFuZAorICoKKyAqICAgICAgKGkxIDwgaTIgYW5kIGkyIC0gaTEgPCAyXihTRVJJQUxfQklUUyAtIDEpKSBvcgorICogICAgICAoaTEgPiBpMiBhbmQgaTEgLSBpMiA+IDJeKFNFUklBTF9CSVRTIC0gMSkpCisgKgorICogczEgaXMgc2FpZCB0byBiZSBncmVhdGVyIHRoYW4gczIgaWYsIGFuZCBvbmx5IGlmLCBzMSBpcyBub3QgZXF1YWwgdG8KKyAqIHMyLCBhbmQKKyAqCisgKiAgICAgIChpMSA8IGkyIGFuZCBpMiAtIGkxID4gMl4oU0VSSUFMX0JJVFMgLSAxKSkgb3IKKyAqICAgICAgKGkxID4gaTIgYW5kIGkxIC0gaTIgPCAyXihTRVJJQUxfQklUUyAtIDEpKQorICovCisKKy8qCisgKiBSRkMgMjk2MAorICogIDEuNiBTZXJpYWwgTnVtYmVyIEFyaXRobWV0aWMKKyAqCisgKiBDb21wYXJpc29ucyBhbmQgYXJpdGhtZXRpYyBvbiBUU05zIGluIHRoaXMgZG9jdW1lbnQgU0hPVUxEIHVzZSBTZXJpYWwKKyAqIE51bWJlciBBcml0aG1ldGljIGFzIGRlZmluZWQgaW4gW1JGQzE5ODJdIHdoZXJlIFNFUklBTF9CSVRTID0gMzIuCisgKi8KKworZW51bSB7CisJVFNOX1NJR05fQklUID0gKDE8PDMxKQorfTsKKworc3RhdGljIGlubGluZSBpbnQgVFNOX2x0KF9fdTMyIHMsIF9fdTMyIHQpCit7CisJcmV0dXJuICgoKHMpIC0gKHQpKSAmIFRTTl9TSUdOX0JJVCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IFRTTl9sdGUoX191MzIgcywgX191MzIgdCkKK3sKKwlyZXR1cm4gKCgocykgPT0gKHQpKSB8fCAoKChzKSAtICh0KSkgJiBUU05fU0lHTl9CSVQpKTsKK30KKworLyogQ29tcGFyZSB0d28gU1NOcyAqLworCisvKgorICogUkZDIDI5NjAKKyAqICAxLjYgU2VyaWFsIE51bWJlciBBcml0aG1ldGljCisgKgorICogQ29tcGFyaXNvbnMgYW5kIGFyaXRobWV0aWMgb24gU3RyZWFtIFNlcXVlbmNlIE51bWJlcnMgaW4gdGhpcyBkb2N1bWVudAorICogU0hPVUxEIHVzZSBTZXJpYWwgTnVtYmVyIEFyaXRobWV0aWMgYXMgZGVmaW5lZCBpbiBbUkZDMTk4Ml0gd2hlcmUKKyAqIFNFUklBTF9CSVRTID0gMTYuCisgKi8KK2VudW0geworCVNTTl9TSUdOX0JJVCA9ICgxPDwxNSkKK307CisKK3N0YXRpYyBpbmxpbmUgaW50IFNTTl9sdChfX3UxNiBzLCBfX3UxNiB0KQoreworCXJldHVybiAoKChzKSAtICh0KSkgJiBTU05fU0lHTl9CSVQpOworfQorCitzdGF0aWMgaW5saW5lIGludCBTU05fbHRlKF9fdTE2IHMsIF9fdTE2IHQpCit7CisJcmV0dXJuICgoKHMpID09ICh0KSkgfHwgKCgocykgLSAodCkpICYgU1NOX1NJR05fQklUKSk7Cit9CisKKy8qCisgKiBBRERJUCAzLjEuMQorICogVGhlIHZhbGlkIHJhbmdlIG9mIFNlcmlhbCBOdW1iZXIgaXMgZnJvbSAwIHRvIDQyOTQ5NjcyOTUgKDIqKjMyIC0gMSkuIFNlcmlhbAorICogTnVtYmVycyB3cmFwIGJhY2sgdG8gMCBhZnRlciByZWFjaGluZyA0Mjk0OTY3Mjk1LgorICovCitlbnVtIHsKKwlBRERJUF9TRVJJQUxfU0lHTl9CSVQgPSAoMTw8MzEpCit9OworCitzdGF0aWMgaW5saW5lIGludCBBRERJUF9TRVJJQUxfZ3RlKF9fdTE2IHMsIF9fdTE2IHQpCit7CisJcmV0dXJuICgoKHMpID09ICh0KSkgfHwgKCgodCkgLSAocykpICYgQURESVBfU0VSSUFMX1NJR05fQklUKSk7Cit9CisKKworLyogUnVuIHNjdHBfYWRkX2NtZCgpIGdlbmVyYXRpbmcgYSBCVUcoKSBpZiB0aGVyZSBpcyBhIGZhaWx1cmUuICAqLworc3RhdGljIGlubGluZSB2b2lkIHNjdHBfYWRkX2NtZF9zZihzY3RwX2NtZF9zZXFfdCAqc2VxLCBzY3RwX3ZlcmJfdCB2ZXJiLCBzY3RwX2FyZ190IG9iaikKK3sKKwlpZiAodW5saWtlbHkoIXNjdHBfYWRkX2NtZChzZXEsIHZlcmIsIG9iaikpKQorCQlCVUcoKTsKK30KKworLyogQ2hlY2sgVlRBRyBvZiB0aGUgcGFja2V0IG1hdGNoZXMgdGhlIHNlbmRlcidzIG93biB0YWcuICovCitzdGF0aWMgaW5saW5lIGludAorc2N0cF92dGFnX3ZlcmlmeShjb25zdCBzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssCisJCSBjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYykKK3sKKwkvKiBSRkMgMjk2MCBTZWMgOC41IFdoZW4gcmVjZWl2aW5nIGFuIFNDVFAgcGFja2V0LCB0aGUgZW5kcG9pbnQKKwkgKiBNVVNUIGVuc3VyZSB0aGF0IHRoZSB2YWx1ZSBpbiB0aGUgVmVyaWZpY2F0aW9uIFRhZyBmaWVsZCBvZgorCSAqIHRoZSByZWNlaXZlZCBTQ1RQIHBhY2tldCBtYXRjaGVzIGl0cyBvd24gVGFnLiBJZiB0aGUgcmVjZWl2ZWQKKwkgKiBWZXJpZmljYXRpb24gVGFnIHZhbHVlIGRvZXMgbm90IG1hdGNoIHRoZSByZWNlaXZlcidzIG93bgorCSAqIHRhZyB2YWx1ZSwgdGhlIHJlY2VpdmVyIHNoYWxsIHNpbGVudGx5IGRpc2NhcmQgdGhlIHBhY2tldC4uLgorCSAqLworICAgICAgICBpZiAobnRvaGwoY2h1bmstPnNjdHBfaGRyLT52dGFnKSA9PSBhc29jLT5jLm15X3Z0YWcpCisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworLyogQ2hlY2sgVlRBRyBvZiB0aGUgcGFja2V0IG1hdGNoZXMgdGhlIHNlbmRlcidzIG93biB0YWcgT1IgaXRzIHBlZXIncworICogdGFnIGFuZCB0aGUgVCBiaXQgaXMgc2V0IGluIHRoZSBDaHVuayBGbGFncy4KKyAqLworc3RhdGljIGlubGluZSBpbnQKK3NjdHBfdnRhZ192ZXJpZnlfZWl0aGVyKGNvbnN0IHN0cnVjdCBzY3RwX2NodW5rICpjaHVuaywKKwkJCWNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKQoreworICAgICAgICAvKiBSRkMgMjk2MCBTZWN0aW9uIDguNS4xLCBzY3RwaW1wZ3VpZGUtMDYgU2VjdGlvbiAyLjEzLjIKKwkgKgorCSAqIEIpIFRoZSByZWNlaXZlciBvZiBhIEFCT1JUIHNoYWxsIGFjY2VwdCB0aGUgcGFja2V0IGlmIHRoZQorCSAqIFZlcmlmaWNhdGlvbiBUYWcgZmllbGQgb2YgdGhlIHBhY2tldCBtYXRjaGVzIGl0cyBvd24gdGFnIE9SIGl0CisJICogaXMgc2V0IHRvIGl0cyBwZWVyJ3MgdGFnIGFuZCB0aGUgVCBiaXQgaXMgc2V0IGluIHRoZSBDaHVuaworCSAqIEZsYWdzLiBPdGhlcndpc2UsIHRoZSByZWNlaXZlciBNVVNUIHNpbGVudGx5IGRpc2NhcmQgdGhlIHBhY2tldAorCSAqIGFuZCB0YWtlIG5vIGZ1cnRoZXIgYWN0aW9uLgorCSAqCisJICogKEMpIFRoZSByZWNlaXZlciBvZiBhIFNIVVRET1dOIENPTVBMRVRFIHNoYWxsIGFjY2VwdCB0aGUKKwkgKiBwYWNrZXQgaWYgdGhlIFZlcmlmaWNhdGlvbiBUYWcgZmllbGQgb2YgdGhlIHBhY2tldAorCSAqIG1hdGNoZXMgaXRzIG93biB0YWcgT1IgaXQgaXMgc2V0IHRvIGl0cyBwZWVyJ3MgdGFnIGFuZAorCSAqIHRoZSBUIGJpdCBpcyBzZXQgaW4gdGhlIENodW5rIEZsYWdzLiAgT3RoZXJ3aXNlLCB0aGUKKwkgKiByZWNlaXZlciBNVVNUIHNpbGVudGx5IGRpc2NhcmQgdGhlIHBhY2tldCBhbmQgdGFrZSBubworCSAqIGZ1cnRoZXIgYWN0aW9uLi4uLgorCSAqCisJICovCisgICAgICAgIGlmICgobnRvaGwoY2h1bmstPnNjdHBfaGRyLT52dGFnKSA9PSBhc29jLT5jLm15X3Z0YWcpIHx8CisJICAgIChzY3RwX3Rlc3RfVF9iaXQoY2h1bmspICYmIChudG9obChjaHVuay0+c2N0cF9oZHItPnZ0YWcpCisJICAgID09IGFzb2MtPmMucGVlcl92dGFnKSkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworI2VuZGlmIC8qIF9fc2N0cF9zbV9oX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oIGIvaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U2NGNmNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oCkBAIC0wLDAgKzEsMTc1MiBAQAorLyogU0NUUCBrZXJuZWwgcmVmZXJlbmNlIEltcGxlbWVudGF0aW9uCisgKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAyMDAxLCAyMDA0CisgKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMCBDaXNjbywgSW5jLgorICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDEgTW90b3JvbGEsIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAwMSBJbnRlbCBDb3JwLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTQ1RQIGtlcm5lbCByZWZlcmVuY2UgSW1wbGVtZW50YXRpb24KKyAqCisgKiBUaGUgU0NUUCByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gaXMgZnJlZSBzb2Z0d2FyZTsKKyAqIHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mCisgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGUgU0NUUCByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdAorICogd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkCisgKgkJICAgKioqKioqKioqKioqKioqKioqKioqKioqCisgKiB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggR05VIENDOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqIFBsZWFzZSBzZW5kIGFueSBidWcgcmVwb3J0cyBvciBmaXhlcyB5b3UgbWFrZSB0byB0aGUKKyAqIGVtYWlsIGFkZHJlc3NlczoKKyAqICAgIGxrc2N0cCBkZXZlbG9wZXJzIDxsa3NjdHAtZGV2ZWxvcGVyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+CisgKgorICogT3Igc3VibWl0IGEgYnVnIHJlcG9ydCB0aHJvdWdoIHRoZSBmb2xsb3dpbmcgd2Vic2l0ZToKKyAqICAgIGh0dHA6Ly93d3cuc2YubmV0L3Byb2plY3RzL2xrc2N0cAorICoKKyAqIFdyaXR0ZW4gb3IgbW9kaWZpZWQgYnk6CisgKiAgICBSYW5kYWxsIFN0ZXdhcnQJICAgIDxyYW5kYWxsQHNjdHAuY2hpY2Fnby5pbC51cz4KKyAqICAgIEtlbiBNb3JuZWF1CSAgICA8a21vcm5lYXVAY2lzY28uY29tPgorICogICAgUWlhb2JpbmcgWGllCSAgICA8cXhpZTFAZW1haWwubW90LmNvbT4KKyAqICAgIExhIE1vbnRlIEguUC4gWWFycm9sbCA8cGlnZ3lAYWNtLm9yZz4KKyAqICAgIEthcmwgS251dHNvbgkgICAgPGthcmxAYXRoZW5hLmNoaWNhZ28uaWwudXM+CisgKiAgICBKb24gR3JpbW0JCSAgICA8amdyaW1tQHVzLmlibS5jb20+CisgKiAgICBYaW5nYW5nIEd1bwkgICAgPHhpbmdhbmcuZ3VvQGludGVsLmNvbT4KKyAqICAgIEh1aSBIdWFuZwkJICAgIDxodWkuaHVhbmdAbm9raWEuY29tPgorICogICAgU3JpZGhhciBTYW11ZHJhbGEJICAgIDxzcmlAdXMuaWJtLmNvbT4KKyAqICAgIERhaXN5IENoYW5nCSAgICA8ZGFpc3ljQHVzLmlibS5jb20+CisgKiAgICBEYWppYW5nIFpoYW5nCSAgICA8ZGFqaWFuZy56aGFuZ0Bub2tpYS5jb20+CisgKiAgICBBcmRlbGxlIEZhbgkgICAgPGFyZGVsbGUuZmFuQGludGVsLmNvbT4KKyAqICAgIFJ5YW4gTGF5ZXIJICAgIDxybWxheWVyQHVzLmlibS5jb20+CisgKiAgICBBbnVwIFBlbW1haWFoCSAgICA8cGVtbWFpYWhAY2MudXN1LmVkdT4KKyAqICAgIEtldmluIEdhbyAgICAgICAgICAgICA8a2V2aW4uZ2FvQGludGVsLmNvbT4KKyAqCisgKiBBbnkgYnVncyByZXBvcnRlZCBnaXZlbiB0byB1cyB3ZSB3aWxsIHRyeSB0byBmaXguLi4gYW55IGZpeGVzIHNoYXJlZCB3aWxsCisgKiBiZSBpbmNvcnBvcmF0ZWQgaW50byB0aGUgbmV4dCBTQ1RQIHJlbGVhc2UuCisgKi8KKworI2lmbmRlZiBfX3NjdHBfc3RydWN0c19oX18KKyNkZWZpbmUgX19zY3RwX3N0cnVjdHNfaF9fCisKKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CQkvKiBXZSBnZXQgc3RydWN0IHRpbWVzcGVjLiAgICAqLworI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPgkvKiBsaW51eC9pbi5oIG5lZWRzIHRoaXMhISAgICAqLworI2luY2x1ZGUgPGxpbnV4L2luLmg+CQkvKiBXZSBnZXQgc3RydWN0IHNvY2thZGRyX2luLiAqLworI2luY2x1ZGUgPGxpbnV4L2luNi5oPgkJLyogV2UgZ2V0IHN0cnVjdCBpbjZfYWRkciAgICAgKi8KKyNpbmNsdWRlIDxsaW51eC9pcHY2Lmg+CisjaW5jbHVkZSA8YXNtL3BhcmFtLmg+CQkvKiBXZSBnZXQgTUFYSE9TVE5BTUVMRU4uICAgICAqLworI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4JCS8qIFRoaXMgZ2V0cyB1cyBhdG9taWMgY291bnRlcnMuICAqLworI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgkvKiBXZSBuZWVkIHNrX2J1ZmZfaGVhZC4gKi8KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4JLyogV2UgbmVlZCB0cV9zdHJ1Y3QuCSAqLworI2luY2x1ZGUgPGxpbnV4L3NjdHAuaD4JCS8qIFdlIG5lZWQgc2N0cCogaGVhZGVyIHN0cnVjdHMuICAqLworCisvKiBBIGNvbnZlbmllbmNlIHN0cnVjdHVyZSBmb3IgaGFuZGxpbmcgc29ja2FkZHIgc3RydWN0dXJlcy4KKyAqIFdlIHNob3VsZCB3ZWFuIG91cnNlbHZlcyBvZmYgdGhpcy4KKyAqLwordW5pb24gc2N0cF9hZGRyIHsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gdjQ7CisJc3RydWN0IHNvY2thZGRyX2luNiB2NjsKKwlzdHJ1Y3Qgc29ja2FkZHIgc2E7Cit9OworCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9ucyBmb3IgZGF0YSBzdHJ1Y3R1cmVzLiAqLworc3RydWN0IHNjdHBfZ2xvYmFsczsKK3N0cnVjdCBzY3RwX2VuZHBvaW50Oworc3RydWN0IHNjdHBfYXNzb2NpYXRpb247CitzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQ7CitzdHJ1Y3Qgc2N0cF9wYWNrZXQ7CitzdHJ1Y3Qgc2N0cF9jaHVuazsKK3N0cnVjdCBzY3RwX2lucTsKK3N0cnVjdCBzY3RwX291dHE7CitzdHJ1Y3Qgc2N0cF9iaW5kX2FkZHI7CitzdHJ1Y3Qgc2N0cF91bHBxOworc3RydWN0IHNjdHBfZXBfY29tbW9uOworc3RydWN0IHNjdHBfc3NubWFwOworCisKKyNpbmNsdWRlIDxuZXQvc2N0cC90c25tYXAuaD4KKyNpbmNsdWRlIDxuZXQvc2N0cC91bHBldmVudC5oPgorI2luY2x1ZGUgPG5ldC9zY3RwL3VscHF1ZXVlLmg+CisKKy8qIFN0cnVjdHVyZXMgdXNlZnVsIGZvciBtYW5hZ2luZyBiaW5kL2Nvbm5lY3QuICovCisKK3N0cnVjdCBzY3RwX2JpbmRfYnVja2V0IHsKKwl1bnNpZ25lZCBzaG9ydAlwb3J0OworCXVuc2lnbmVkIHNob3J0CWZhc3RyZXVzZTsKKwlzdHJ1Y3Qgc2N0cF9iaW5kX2J1Y2tldCAqbmV4dDsKKwlzdHJ1Y3Qgc2N0cF9iaW5kX2J1Y2tldCAqKnBwcmV2OworCXN0cnVjdCBobGlzdF9oZWFkCW93bmVyOworfTsKKworc3RydWN0IHNjdHBfYmluZF9oYXNoYnVja2V0IHsKKwlzcGlubG9ja190CWxvY2s7CisJc3RydWN0IHNjdHBfYmluZF9idWNrZXQJKmNoYWluOworfTsKKworLyogVXNlZCBmb3IgaGFzaGluZyBhbGwgYXNzb2NpYXRpb25zLiAgKi8KK3N0cnVjdCBzY3RwX2hhc2hidWNrZXQgeworCXJ3bG9ja190CWxvY2s7CisJc3RydWN0IHNjdHBfZXBfY29tbW9uICAqY2hhaW47Cit9IF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKDgpKSk7CisKKworLyogVGhlIFNDVFAgZ2xvYmFscyBzdHJ1Y3R1cmUuICovCitleHRlcm4gc3RydWN0IHNjdHBfZ2xvYmFscyB7CisJLyogUkZDMjk2MCBTZWN0aW9uIDE0LiBTdWdnZXN0ZWQgU0NUUCBQcm90b2NvbCBQYXJhbWV0ZXIgVmFsdWVzCisJICoKKwkgKiBUaGUgZm9sbG93aW5nIHByb3RvY29sIHBhcmFtZXRlcnMgYXJlIFJFQ09NTUVOREVEOgorCSAqCisJICogUlRPLkluaXRpYWwJCSAgICAtIDMJIHNlY29uZHMKKwkgKiBSVE8uTWluCQkgICAgLSAxCSBzZWNvbmQKKwkgKiBSVE8uTWF4CQkgICAtICA2MCBzZWNvbmRzCisJICogUlRPLkFscGhhCQkgICAgLSAxLzggICgzIHdoZW4gY29udmVydGVkIHRvIHJpZ2h0IHNoaWZ0cy4pCisJICogUlRPLkJldGEJCSAgICAtIDEvNCAgKDIgd2hlbiBjb252ZXJ0ZWQgdG8gcmlnaHQgc2hpZnRzLikKKwkgKi8KKwlfX3UzMiBydG9faW5pdGlhbDsKKwlfX3UzMiBydG9fbWluOworCV9fdTMyIHJ0b19tYXg7CisKKwkvKiBOb3RlOiBydG9fYWxwaGEgYW5kIHJ0b19iZXRhIGFyZSByZWFsbHkgZGVmaW5lZCBhcyBpbnZlcnNlCisJICogcG93ZXJzIG9mIHR3byB0byBmYWNpbGl0YXRlIGludGVnZXIgb3BlcmF0aW9ucy4KKwkgKi8KKwlpbnQgcnRvX2FscGhhOworCWludCBydG9fYmV0YTsKKworCS8qIE1heC5CdXJzdAkJICAgIC0gNCAqLworCWludCBtYXhfYnVyc3Q7CisKKwkvKiBWYWxpZC5Db29raWUuTGlmZQkgICAgLSA2MCAgc2Vjb25kcyAgKi8KKwlpbnQgdmFsaWRfY29va2llX2xpZmU7CisKKwkvKiBXaGV0aGVyIENvb2tpZSBQcmVzZXJ2YXRpdmUgaXMgZW5hYmxlZCgxKSBvciBub3QoMCkgKi8KKwlpbnQgY29va2llX3ByZXNlcnZlX2VuYWJsZTsKKworCS8qIEFzc29jaWF0aW9uLk1heC5SZXRyYW5zICAtIDEwIGF0dGVtcHRzCisJICogUGF0aC5NYXguUmV0cmFucwkgICAgLSA1CSBhdHRlbXB0cyAocGVyIGRlc3RpbmF0aW9uIGFkZHJlc3MpCisJICogTWF4LkluaXQuUmV0cmFuc21pdHMJICAgIC0gOAkgYXR0ZW1wdHMKKwkgKi8KKwlpbnQgbWF4X3JldHJhbnNfYXNzb2NpYXRpb247CisJaW50IG1heF9yZXRyYW5zX3BhdGg7CisJaW50IG1heF9yZXRyYW5zX2luaXQ7CisKKwkvKiBIQi5pbnRlcnZhbAkJICAgIC0gMzAgc2Vjb25kcyAgKi8KKwlpbnQgaGJfaW50ZXJ2YWw7CisKKwkvKiBUaGUgZm9sbG93aW5nIHZhcmlhYmxlcyBhcmUgaW1wbGVtZW50YXRpb24gc3BlY2lmaWMuCSAqLworCisJLyogRGVmYXVsdCBpbml0aWFsaXphdGlvbiB2YWx1ZXMgdG8gYmUgYXBwbGllZCB0byBuZXcgYXNzb2NpYXRpb25zLiAqLworCV9fdTE2IG1heF9pbnN0cmVhbXM7CisJX191MTYgbWF4X291dHN0cmVhbXM7CisKKwkvKiBUaGlzIGlzIGEgbGlzdCBvZiBncm91cHMgb2YgZnVuY3Rpb25zIGZvciBlYWNoIGFkZHJlc3MKKwkgKiBmYW1pbHkgdGhhdCB3ZSBzdXBwb3J0LgorCSAqLworCXN0cnVjdCBsaXN0X2hlYWQgYWRkcmVzc19mYW1pbGllczsKKworCS8qIFRoaXMgaXMgdGhlIGhhc2ggb2YgYWxsIGVuZHBvaW50cy4gKi8KKwlpbnQgZXBfaGFzaHNpemU7CisJc3RydWN0IHNjdHBfaGFzaGJ1Y2tldCAqZXBfaGFzaHRhYmxlOworCisJLyogVGhpcyBpcyB0aGUgaGFzaCBvZiBhbGwgYXNzb2NpYXRpb25zLiAqLworCWludCBhc3NvY19oYXNoc2l6ZTsKKwlzdHJ1Y3Qgc2N0cF9oYXNoYnVja2V0ICphc3NvY19oYXNodGFibGU7CisKKwkvKiBUaGlzIGlzIHRoZSBzY3RwIHBvcnQgY29udHJvbCBoYXNoLgkqLworCWludCBwb3J0X2hhc2hzaXplOworCWludCBwb3J0X3JvdmVyOworCXNwaW5sb2NrX3QgcG9ydF9hbGxvY19sb2NrOyAgLyogUHJvdGVjdHMgcG9ydF9yb3Zlci4gKi8KKwlzdHJ1Y3Qgc2N0cF9iaW5kX2hhc2hidWNrZXQgKnBvcnRfaGFzaHRhYmxlOworCisJLyogVGhpcyBpcyB0aGUgZ2xvYmFsIGxvY2FsIGFkZHJlc3MgbGlzdC4KKwkgKiBXZSBhY3RpdmVseSBtYWludGFpbiB0aGlzIGNvbXBsZXRlIGxpc3Qgb2YgaW50ZXJmYWNlcyBvbgorCSAqIHRoZSBzeXN0ZW0gYnkgY2F0Y2hpbmcgcm91dGluZyBldmVudHMuCisJICoKKwkgKiBJdCBpcyBhIGxpc3Qgb2Ygc2N0cF9zb2NrYWRkcl9lbnRyeS4KKwkgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGxvY2FsX2FkZHJfbGlzdDsKKwlzcGlubG9ja190IGxvY2FsX2FkZHJfbG9jazsKKwkKKwkvKiBGbGFnIHRvIGluZGljYXRlIGlmIGFkZGlwIGlzIGVuYWJsZWQuICovCisJaW50IGFkZGlwX2VuYWJsZTsKKworCS8qIEZsYWcgdG8gaW5kaWNhdGUgaWYgUFItU0NUUCBpcyBlbmFibGVkLiAqLworCWludCBwcnNjdHBfZW5hYmxlOworfSBzY3RwX2dsb2JhbHM7CisKKyNkZWZpbmUgc2N0cF9ydG9faW5pdGlhbAkJKHNjdHBfZ2xvYmFscy5ydG9faW5pdGlhbCkKKyNkZWZpbmUgc2N0cF9ydG9fbWluCQkJKHNjdHBfZ2xvYmFscy5ydG9fbWluKQorI2RlZmluZSBzY3RwX3J0b19tYXgJCQkoc2N0cF9nbG9iYWxzLnJ0b19tYXgpCisjZGVmaW5lIHNjdHBfcnRvX2FscGhhCQkJKHNjdHBfZ2xvYmFscy5ydG9fYWxwaGEpCisjZGVmaW5lIHNjdHBfcnRvX2JldGEJCQkoc2N0cF9nbG9iYWxzLnJ0b19iZXRhKQorI2RlZmluZSBzY3RwX21heF9idXJzdAkJCShzY3RwX2dsb2JhbHMubWF4X2J1cnN0KQorI2RlZmluZSBzY3RwX3ZhbGlkX2Nvb2tpZV9saWZlCQkoc2N0cF9nbG9iYWxzLnZhbGlkX2Nvb2tpZV9saWZlKQorI2RlZmluZSBzY3RwX2Nvb2tpZV9wcmVzZXJ2ZV9lbmFibGUJKHNjdHBfZ2xvYmFscy5jb29raWVfcHJlc2VydmVfZW5hYmxlKQorI2RlZmluZSBzY3RwX21heF9yZXRyYW5zX2Fzc29jaWF0aW9uCShzY3RwX2dsb2JhbHMubWF4X3JldHJhbnNfYXNzb2NpYXRpb24pCisjZGVmaW5lIHNjdHBfbWF4X3JldHJhbnNfcGF0aAkJKHNjdHBfZ2xvYmFscy5tYXhfcmV0cmFuc19wYXRoKQorI2RlZmluZSBzY3RwX21heF9yZXRyYW5zX2luaXQJCShzY3RwX2dsb2JhbHMubWF4X3JldHJhbnNfaW5pdCkKKyNkZWZpbmUgc2N0cF9oYl9pbnRlcnZhbAkJKHNjdHBfZ2xvYmFscy5oYl9pbnRlcnZhbCkKKyNkZWZpbmUgc2N0cF9tYXhfaW5zdHJlYW1zCQkoc2N0cF9nbG9iYWxzLm1heF9pbnN0cmVhbXMpCisjZGVmaW5lIHNjdHBfbWF4X291dHN0cmVhbXMJCShzY3RwX2dsb2JhbHMubWF4X291dHN0cmVhbXMpCisjZGVmaW5lIHNjdHBfYWRkcmVzc19mYW1pbGllcwkJKHNjdHBfZ2xvYmFscy5hZGRyZXNzX2ZhbWlsaWVzKQorI2RlZmluZSBzY3RwX2VwX2hhc2hzaXplCQkoc2N0cF9nbG9iYWxzLmVwX2hhc2hzaXplKQorI2RlZmluZSBzY3RwX2VwX2hhc2h0YWJsZQkJKHNjdHBfZ2xvYmFscy5lcF9oYXNodGFibGUpCisjZGVmaW5lIHNjdHBfYXNzb2NfaGFzaHNpemUJCShzY3RwX2dsb2JhbHMuYXNzb2NfaGFzaHNpemUpCisjZGVmaW5lIHNjdHBfYXNzb2NfaGFzaHRhYmxlCQkoc2N0cF9nbG9iYWxzLmFzc29jX2hhc2h0YWJsZSkKKyNkZWZpbmUgc2N0cF9wb3J0X2hhc2hzaXplCQkoc2N0cF9nbG9iYWxzLnBvcnRfaGFzaHNpemUpCisjZGVmaW5lIHNjdHBfcG9ydF9yb3ZlcgkJCShzY3RwX2dsb2JhbHMucG9ydF9yb3ZlcikKKyNkZWZpbmUgc2N0cF9wb3J0X2FsbG9jX2xvY2sJCShzY3RwX2dsb2JhbHMucG9ydF9hbGxvY19sb2NrKQorI2RlZmluZSBzY3RwX3BvcnRfaGFzaHRhYmxlCQkoc2N0cF9nbG9iYWxzLnBvcnRfaGFzaHRhYmxlKQorI2RlZmluZSBzY3RwX2xvY2FsX2FkZHJfbGlzdAkJKHNjdHBfZ2xvYmFscy5sb2NhbF9hZGRyX2xpc3QpCisjZGVmaW5lIHNjdHBfbG9jYWxfYWRkcl9sb2NrCQkoc2N0cF9nbG9iYWxzLmxvY2FsX2FkZHJfbG9jaykKKyNkZWZpbmUgc2N0cF9hZGRpcF9lbmFibGUJCShzY3RwX2dsb2JhbHMuYWRkaXBfZW5hYmxlKQorI2RlZmluZSBzY3RwX3Byc2N0cF9lbmFibGUJCShzY3RwX2dsb2JhbHMucHJzY3RwX2VuYWJsZSkKKworLyogU0NUUCBTb2NrZXQgdHlwZTogVURQIG9yIFRDUCBzdHlsZS4gKi8KK3R5cGVkZWYgZW51bSB7CisJU0NUUF9TT0NLRVRfVURQID0gMCwKKwlTQ1RQX1NPQ0tFVF9VRFBfSElHSF9CQU5EV0lEVEgsCisJU0NUUF9TT0NLRVRfVENQCit9IHNjdHBfc29ja2V0X3R5cGVfdDsKKworLyogUGVyIHNvY2tldCBTQ1RQIGluZm9ybWF0aW9uLiAqLworc3RydWN0IHNjdHBfc29jayB7CisJLyogaW5ldF9zb2NrIGhhcyB0byBiZSB0aGUgZmlyc3QgbWVtYmVyIG9mIHNjdHBfc29jayAqLworCXN0cnVjdCBpbmV0X3NvY2sgaW5ldDsKKwkvKiBXaGF0IGtpbmQgb2YgYSBzb2NrZXQgaXMgdGhpcz8gKi8KKwlzY3RwX3NvY2tldF90eXBlX3QgdHlwZTsKKworCS8qIFBGXyBmYW1pbHkgc3BlY2lmaWMgZnVuY3Rpb25zLiAgKi8KKwlzdHJ1Y3Qgc2N0cF9wZiAqcGY7CisKKwkvKiBBY2Nlc3MgdG8gSE1BQyB0cmFuc2Zvcm0uICovCisJc3RydWN0IGNyeXB0b190Zm0gKmhtYWM7CisKKwkvKiBXaGF0IGlzIG91ciBiYXNlIGVuZHBvaW50ZXI/ICovCisJc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwOworCisJc3RydWN0IHNjdHBfYmluZF9idWNrZXQgKmJpbmRfaGFzaDsKKwkvKiBWYXJpb3VzIFNvY2tldCBPcHRpb25zLiAgKi8KKwlfX3UxNiBkZWZhdWx0X3N0cmVhbTsKKwlfX3UzMiBkZWZhdWx0X3BwaWQ7CisJX191MTYgZGVmYXVsdF9mbGFnczsKKwlfX3UzMiBkZWZhdWx0X2NvbnRleHQ7CisJX191MzIgZGVmYXVsdF90aW1ldG9saXZlOworCisJc3RydWN0IHNjdHBfaW5pdG1zZyBpbml0bXNnOworCXN0cnVjdCBzY3RwX3J0b2luZm8gcnRvaW5mbzsKKwlzdHJ1Y3Qgc2N0cF9wYWRkcnBhcmFtcyBwYWRkcnBhcmFtOworCXN0cnVjdCBzY3RwX2V2ZW50X3N1YnNjcmliZSBzdWJzY3JpYmU7CisJc3RydWN0IHNjdHBfYXNzb2NwYXJhbXMgYXNzb2NwYXJhbXM7CisJaW50IHVzZXJfZnJhZzsKKwlfX3UzMiBhdXRvY2xvc2U7CisJX191OCBub2RlbGF5OworCV9fdTggZGlzYWJsZV9mcmFnbWVudHM7CisJX191OCBwZF9tb2RlOworCV9fdTggdjRtYXBwZWQ7CisJX191MzIgYWRhcHRpb25faW5kOworCisJLyogUmVjZWl2ZSB0byBoZXJlIHdoaWxlIHBhcnRpYWwgZGVsaXZlcnkgaXMgaW4gZWZmZWN0LiAqLworCXN0cnVjdCBza19idWZmX2hlYWQgcGRfbG9iYnk7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzY3RwX3NvY2sgKnNjdHBfc2soY29uc3Qgc3RydWN0IHNvY2sgKnNrKQoreworICAgICAgIHJldHVybiAoc3RydWN0IHNjdHBfc29jayAqKXNrOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzb2NrICpzY3RwX29wdDJzayhjb25zdCBzdHJ1Y3Qgc2N0cF9zb2NrICpzcCkKK3sKKyAgICAgICByZXR1cm4gKHN0cnVjdCBzb2NrICopc3A7Cit9CisKKyNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKK3N0cnVjdCBzY3RwNl9zb2NrIHsKKyAgICAgICBzdHJ1Y3Qgc2N0cF9zb2NrICBzY3RwOworICAgICAgIHN0cnVjdCBpcHY2X3BpbmZvIGluZXQ2OworfTsKKyNlbmRpZiAvKiBDT05GSUdfSVBWNiAqLworCisKKy8qIFRoaXMgaXMgb3VyIEFQUExJQ0FUSU9OLVNQRUNJRklDIHN0YXRlIGNvb2tpZS4KKyAqIFRISVMgSVMgTk9UIERJQ1RBVEVEIEJZIFRIRSBTUEVDSUZJQ0FUSU9OLgorICovCisvKiBUaGVzZSBhcmUgdGhlIHBhcnRzIG9mIGFuIGFzc29jaWF0aW9uIHdoaWNoIHdlIHNlbmQgaW4gdGhlIGNvb2tpZS4KKyAqIE1vc3Qgb2YgdGhlc2UgYXJlIHN0cmFpZ2h0IG91dCBvZjoKKyAqIFJGQzI5NjAgMTIuMiBQYXJhbWV0ZXJzIG5lY2Vzc2FyeSBwZXIgYXNzb2NpYXRpb24gKGkuZS4gdGhlIFRDQikKKyAqCisgKi8KKworc3RydWN0IHNjdHBfY29va2llIHsKKworCS8qIE15CSAgICAgICA6IFRhZyBleHBlY3RlZCBpbiBldmVyeSBpbmJvdW5kIHBhY2tldCBhbmQgc2VudAorCSAqIFZlcmlmaWNhdGlvbjogaW4gdGhlIElOSVQgb3IgSU5JVCBBQ0sgY2h1bmsuCisJICogVGFnCSAgICAgICA6CisJICovCisJX191MzIgbXlfdnRhZzsKKworCS8qIFBlZXIncyAgICAgIDogVGFnIGV4cGVjdGVkIGluIGV2ZXJ5IG91dGJvdW5kIHBhY2tldCBleGNlcHQKKwkgKiBWZXJpZmljYXRpb246IGluIHRoZSBJTklUIGNodW5rLgorCSAqIFRhZwkgICAgICAgOgorCSAqLworCV9fdTMyIHBlZXJfdnRhZzsKKworCS8qIFRoZSByZXN0IG9mIHRoZXNlIGFyZSBub3QgZnJvbSB0aGUgc3BlYywgYnV0IHJlYWxseSBuZWVkIHRvCisJICogYmUgaW4gdGhlIGNvb2tpZS4KKwkgKi8KKworCS8qIE15IFRpZSBUYWcgIDogQXNzaXN0IGluIGRpc2NvdmVyaW5nIGEgcmVzdGFydGluZyBhc3NvY2lhdGlvbi4gKi8KKwlfX3UzMiBteV90dGFnOworCisJLyogUGVlcidzIFRpZSBUYWc6IEFzc2lzdCBpbiBkaXNjb3ZlcmluZyBhIHJlc3RhcnRpbmcgYXNzb2NpYXRpb24uICovCisJX191MzIgcGVlcl90dGFnOworCisJLyogV2hlbiBkb2VzIHRoaXMgY29va2llIGV4cGlyZT8gKi8KKwlzdHJ1Y3QgdGltZXZhbCBleHBpcmF0aW9uOworCisJLyogTnVtYmVyIG9mIGluYm91bmQvb3V0Ym91bmQgc3RyZWFtcyB3aGljaCBhcmUgc2V0CisJICogYW5kIG5lZ290aWF0ZWQgZHVyaW5nIHRoZSBJTklUIHByb2Nlc3MuCisJICovCisJX191MTYgc2luaXRfbnVtX29zdHJlYW1zOworCV9fdTE2IHNpbml0X21heF9pbnN0cmVhbXM7CisKKwkvKiBUaGlzIGlzIHRoZSBmaXJzdCBzZXF1ZW5jZSBudW1iZXIgSSB1c2VkLiAgKi8KKwlfX3UzMiBpbml0aWFsX3RzbjsKKworCS8qIFRoaXMgaG9sZHMgdGhlIG9yaWdpbmF0aW5nIGFkZHJlc3Mgb2YgdGhlIElOSVQgcGFja2V0LiAgKi8KKwl1bmlvbiBzY3RwX2FkZHIgcGVlcl9hZGRyOworCisJLyogSUcgU2VjdGlvbiAyLjM1LjMgCisJICogSW5jbHVkZSB0aGUgc291cmNlIHBvcnQgb2YgdGhlIElOSVQtQUNLCisJICovCisJX191MTYJCW15X3BvcnQ7CisKKwlfX3U4IHByc2N0cF9jYXBhYmxlOworCisJLyogUGFkZGluZyBmb3IgZnV0dXJlIHVzZSAqLworCV9fdTggcGFkZGluZzsgIAkJCisKKwlfX3UzMiBhZGFwdGlvbl9pbmQ7CQorCisKKwkvKiBUaGlzIGlzIGEgc2hpbSBmb3IgbXkgcGVlcidzIElOSVQgcGFja2V0LCBmb2xsb3dlZCBieQorCSAqIGEgY29weSBvZiB0aGUgcmF3IGFkZHJlc3MgbGlzdCBvZiB0aGUgYXNzb2NpYXRpb24uCisJICogVGhlIGxlbmd0aCBvZiB0aGUgcmF3IGFkZHJlc3MgbGlzdCBpcyBzYXZlZCBpbiB0aGUKKwkgKiByYXdfYWRkcl9saXN0X2xlbiBmaWVsZCwgd2hpY2ggd2lsbCBiZSB1c2VkIGF0IHRoZSB0aW1lIHdoZW4KKwkgKiB0aGUgYXNzb2NpYXRpb24gVENCIGlzIHJlLWNvbnN0cnVjdGVkIGZyb20gdGhlIGNvb2tpZS4KKwkgKi8KKwlfX3UzMiByYXdfYWRkcl9saXN0X2xlbjsKKwlzdHJ1Y3Qgc2N0cF9pbml0X2NodW5rIHBlZXJfaW5pdFswXTsKK307CisKKworLyogVGhlIGZvcm1hdCBvZiBvdXIgY29va2llIHRoYXQgd2Ugc2VuZCB0byBvdXIgcGVlci4gKi8KK3N0cnVjdCBzY3RwX3NpZ25lZF9jb29raWUgeworCV9fdTggc2lnbmF0dXJlW1NDVFBfU0VDUkVUX1NJWkVdOworCXN0cnVjdCBzY3RwX2Nvb2tpZSBjOworfTsKKworLyogVGhpcyBpcyBhbm90aGVyIGNvbnZlbmllbmNlIHR5cGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBhZGRyZXNzCisgKiBwYXJhbXMgZm9yIHRoZSBtYXhpbXVtIHNpemUgYW5kIHBhc3Mgc3VjaCBzdHJ1Y3R1cmVzIGFyb3VuZAorICogaW50ZXJuYWxseS4KKyAqLwordW5pb24gc2N0cF9hZGRyX3BhcmFtIHsKKwlzdHJ1Y3Qgc2N0cF9pcHY0YWRkcl9wYXJhbSB2NDsKKwlzdHJ1Y3Qgc2N0cF9pcHY2YWRkcl9wYXJhbSB2NjsKK307CisKKy8qIEEgY29udmVuaWVuY2UgdHlwZSB0byBhbGxvdyB3YWxraW5nIHRocm91Z2ggdGhlIHZhcmlvdXMKKyAqIHBhcmFtZXRlcnMgYW5kIGF2b2lkIGNhc3RpbmcgYWxsIG92ZXIgdGhlIHBsYWNlLgorICovCit1bmlvbiBzY3RwX3BhcmFtcyB7CisJdm9pZCAqdjsKKwlzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqcDsKKwlzdHJ1Y3Qgc2N0cF9jb29raWVfcHJlc2VydmVfcGFyYW0gKmxpZmU7CisJc3RydWN0IHNjdHBfaG9zdG5hbWVfcGFyYW0gKmRuczsKKwlzdHJ1Y3Qgc2N0cF9jb29raWVfcGFyYW0gKmNvb2tpZTsKKwlzdHJ1Y3Qgc2N0cF9zdXBwb3J0ZWRfYWRkcnNfcGFyYW0gKnNhdDsKKwlzdHJ1Y3Qgc2N0cF9pcHY0YWRkcl9wYXJhbSAqdjQ7CisJc3RydWN0IHNjdHBfaXB2NmFkZHJfcGFyYW0gKnY2OworCXVuaW9uIHNjdHBfYWRkcl9wYXJhbSAqYWRkcjsKKwlzdHJ1Y3Qgc2N0cF9hZGFwdGlvbl9pbmRfcGFyYW0gKmFpbmQ7Cit9OworCisvKiBSRkMgMjk2MC4gIFNlY3Rpb24gMy4zLjUgSGVhcnRiZWF0LgorICogICAgSGVhcnRiZWF0IEluZm9ybWF0aW9uOiB2YXJpYWJsZSBsZW5ndGgKKyAqICAgIFRoZSBTZW5kZXItc3BlY2lmaWMgSGVhcnRiZWF0IEluZm8gZmllbGQgc2hvdWxkIG5vcm1hbGx5IGluY2x1ZGUKKyAqICAgIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzZW5kZXIncyBjdXJyZW50IHRpbWUgd2hlbiB0aGlzIEhFQVJUQkVBVAorICogICAgY2h1bmsgaXMgc2VudCBhbmQgdGhlIGRlc3RpbmF0aW9uIHRyYW5zcG9ydCBhZGRyZXNzIHRvIHdoaWNoIHRoaXMKKyAqICAgIEhFQVJUQkVBVCBpcyBzZW50IChzZWUgU2VjdGlvbiA4LjMpLgorICovCit0eXBlZGVmIHN0cnVjdCBzY3RwX3NlbmRlcl9oYl9pbmZvIHsKKwlzdHJ1Y3Qgc2N0cF9wYXJhbWhkciBwYXJhbV9oZHI7CisJdW5pb24gc2N0cF9hZGRyIGRhZGRyOworCXVuc2lnbmVkIGxvbmcgc2VudF9hdDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgc2N0cF9zZW5kZXJfaGJfaW5mb190OworCisvKgorICogIFJGQyAyOTYwIDEuMy4yIFNlcXVlbmNlZCBEZWxpdmVyeSB3aXRoaW4gU3RyZWFtcworICoKKyAqICBUaGUgdGVybSAic3RyZWFtIiBpcyB1c2VkIGluIFNDVFAgdG8gcmVmZXIgdG8gYSBzZXF1ZW5jZSBvZiB1c2VyCisgKiAgbWVzc2FnZXMgdGhhdCBhcmUgdG8gYmUgZGVsaXZlcmVkIHRvIHRoZSB1cHBlci1sYXllciBwcm90b2NvbCBpbgorICogIG9yZGVyIHdpdGggcmVzcGVjdCB0byBvdGhlciBtZXNzYWdlcyB3aXRoaW4gdGhlIHNhbWUgc3RyZWFtLiAgVGhpcyBpcworICogIGluIGNvbnRyYXN0IHRvIGl0cyB1c2FnZSBpbiBUQ1AsIHdoZXJlIGl0IHJlZmVycyB0byBhIHNlcXVlbmNlIG9mCisgKiAgYnl0ZXMgKGluIHRoaXMgZG9jdW1lbnQgYSBieXRlIGlzIGFzc3VtZWQgdG8gYmUgZWlnaHQgYml0cykuCisgKiAgLi4uCisgKgorICogIFRoaXMgaXMgdGhlIHN0cnVjdHVyZSB3ZSB1c2UgdG8gdHJhY2sgYm90aCBvdXIgb3V0Ym91bmQgYW5kIGluYm91bmQKKyAqICBTU04sIG9yIFN0cmVhbSBTZXF1ZW5jZSBOdW1iZXJzLgorICovCisKK3N0cnVjdCBzY3RwX3N0cmVhbSB7CisJX191MTYgKnNzbjsKKwl1bnNpZ25lZCBpbnQgbGVuOworfTsKKworc3RydWN0IHNjdHBfc3NubWFwIHsKKwlzdHJ1Y3Qgc2N0cF9zdHJlYW0gaW47CisJc3RydWN0IHNjdHBfc3RyZWFtIG91dDsKKwlpbnQgbWFsbG9jZWQ7Cit9OworCitzdHJ1Y3Qgc2N0cF9zc25tYXAgKnNjdHBfc3NubWFwX25ldyhfX3UxNiBpbiwgX191MTYgb3V0LCBpbnQgZ2ZwKTsKK3ZvaWQgc2N0cF9zc25tYXBfZnJlZShzdHJ1Y3Qgc2N0cF9zc25tYXAgKm1hcCk7Cit2b2lkIHNjdHBfc3NubWFwX2NsZWFyKHN0cnVjdCBzY3RwX3Nzbm1hcCAqbWFwKTsKKworLyogV2hhdCBpcyB0aGUgY3VycmVudCBTU04gbnVtYmVyIGZvciB0aGlzIHN0cmVhbT8gKi8KK3N0YXRpYyBpbmxpbmUgX191MTYgc2N0cF9zc25fcGVlayhzdHJ1Y3Qgc2N0cF9zdHJlYW0gKnN0cmVhbSwgX191MTYgaWQpCit7CisJcmV0dXJuIHN0cmVhbS0+c3NuW2lkXTsKK30KKworLyogUmV0dXJuIHRoZSBuZXh0IFNTTiBudW1iZXIgZm9yIHRoaXMgc3RyZWFtLgkqLworc3RhdGljIGlubGluZSBfX3UxNiBzY3RwX3Nzbl9uZXh0KHN0cnVjdCBzY3RwX3N0cmVhbSAqc3RyZWFtLCBfX3UxNiBpZCkKK3sKKwlyZXR1cm4gc3RyZWFtLT5zc25baWRdKys7Cit9CisKKy8qIFNraXAgb3ZlciB0aGlzIHNzbiBhbmQgYWxsIGJlbG93LiAqLworc3RhdGljIGlubGluZSB2b2lkIHNjdHBfc3NuX3NraXAoc3RydWN0IHNjdHBfc3RyZWFtICpzdHJlYW0sIF9fdTE2IGlkLCAKKwkJCQkgX191MTYgc3NuKQoreworCXN0cmVhbS0+c3NuW2lkXSA9IHNzbisxOworfQorICAgICAgICAgICAgICAKKy8qCisgKiBQb2ludGVycyB0byBhZGRyZXNzIHJlbGF0ZWQgU0NUUCBmdW5jdGlvbnMuCisgKiAoaS5lLiB0aGluZ3MgdGhhdCBkZXBlbmQgb24gdGhlIGFkZHJlc3MgZmFtaWx5LikKKyAqLworc3RydWN0IHNjdHBfYWYgeworCWludAkJKCpzY3RwX3htaXQpCShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgc3RydWN0IHNjdHBfdHJhbnNwb3J0ICosCisJCQkJCSBpbnQgaXBmcmFnb2spOworCWludAkJKCpzZXRzb2Nrb3B0KQkoc3RydWN0IHNvY2sgKnNrLAorCQkJCQkgaW50IGxldmVsLAorCQkJCQkgaW50IG9wdG5hbWUsCisJCQkJCSBjaGFyIF9fdXNlciAqb3B0dmFsLAorCQkJCQkgaW50IG9wdGxlbik7CisJaW50CQkoKmdldHNvY2tvcHQpCShzdHJ1Y3Qgc29jayAqc2ssCisJCQkJCSBpbnQgbGV2ZWwsCisJCQkJCSBpbnQgb3B0bmFtZSwKKwkJCQkJIGNoYXIgX191c2VyICpvcHR2YWwsCisJCQkJCSBpbnQgX191c2VyICpvcHRsZW4pOworCXN0cnVjdCBkc3RfZW50cnkgKigqZ2V0X2RzdCkJKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAorCQkJCQkgdW5pb24gc2N0cF9hZGRyICpkYWRkciwKKwkJCQkJIHVuaW9uIHNjdHBfYWRkciAqc2FkZHIpOworCXZvaWQJCSgqZ2V0X3NhZGRyKQkoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCisJCQkJCSBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsCisJCQkJCSB1bmlvbiBzY3RwX2FkZHIgKmRhZGRyLAorCQkJCQkgdW5pb24gc2N0cF9hZGRyICpzYWRkcik7CisJdm9pZAkJKCpjb3B5X2FkZHJsaXN0KSAoc3RydWN0IGxpc3RfaGVhZCAqLAorCQkJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICopOworCXZvaWQJCSgqZHN0X3NhZGRyKQkodW5pb24gc2N0cF9hZGRyICpzYWRkciwKKwkJCQkJIHN0cnVjdCBkc3RfZW50cnkgKmRzdCwKKwkJCQkJIHVuc2lnbmVkIHNob3J0IHBvcnQpOworCWludAkJKCpjbXBfYWRkcikJKGNvbnN0IHVuaW9uIHNjdHBfYWRkciAqYWRkcjEsCisJCQkJCSBjb25zdCB1bmlvbiBzY3RwX2FkZHIgKmFkZHIyKTsKKwl2b2lkCQkoKmFkZHJfY29weSkJKHVuaW9uIHNjdHBfYWRkciAqZHN0LAorCQkJCQkgdW5pb24gc2N0cF9hZGRyICpzcmMpOworCXZvaWQJCSgqZnJvbV9za2IpCSh1bmlvbiBzY3RwX2FkZHIgKiwKKwkJCQkJIHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSBpbnQgc2FkZHIpOworCXZvaWQJCSgqZnJvbV9zaykJKHVuaW9uIHNjdHBfYWRkciAqLAorCQkJCQkgc3RydWN0IHNvY2sgKnNrKTsKKwl2b2lkCQkoKnRvX3NrX3NhZGRyKQkodW5pb24gc2N0cF9hZGRyICosCisJCQkJCSBzdHJ1Y3Qgc29jayAqc2spOworCXZvaWQJCSgqdG9fc2tfZGFkZHIpCSh1bmlvbiBzY3RwX2FkZHIgKiwKKwkJCQkJIHN0cnVjdCBzb2NrICpzayk7CisJdm9pZAkJKCpmcm9tX2FkZHJfcGFyYW0pICh1bmlvbiBzY3RwX2FkZHIgKiwKKwkJCQkJICAgIHVuaW9uIHNjdHBfYWRkcl9wYXJhbSAqLAorCQkJCQkgICAgX191MTYgcG9ydCwgaW50IGlpZik7CQorCWludAkJKCp0b19hZGRyX3BhcmFtKSAoY29uc3QgdW5pb24gc2N0cF9hZGRyICosCisJCQkJCSAgdW5pb24gc2N0cF9hZGRyX3BhcmFtICopOyAKKwlpbnQJCSgqYWRkcl92YWxpZCkJKHVuaW9uIHNjdHBfYWRkciAqLAorCQkJCQkgc3RydWN0IHNjdHBfc29jayAqKTsKKwlzY3RwX3Njb3BlX3QJKCpzY29wZSkgKHVuaW9uIHNjdHBfYWRkciAqKTsKKwl2b2lkCQkoKmluYWRkcl9hbnkpCSh1bmlvbiBzY3RwX2FkZHIgKiwgdW5zaWduZWQgc2hvcnQpOworCWludAkJKCppc19hbnkpCShjb25zdCB1bmlvbiBzY3RwX2FkZHIgKik7CisJaW50CQkoKmF2YWlsYWJsZSkJKHVuaW9uIHNjdHBfYWRkciAqLAorCQkJCQkgc3RydWN0IHNjdHBfc29jayAqKTsKKwlpbnQJCSgqc2tiX2lpZikJKGNvbnN0IHN0cnVjdCBza19idWZmICpzayk7CisJaW50CQkoKmlzX2NlKQkoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrKTsKKwl2b2lkCQkoKnNlcV9kdW1wX2FkZHIpKHN0cnVjdCBzZXFfZmlsZSAqc2VxLAorCQkJCQkgdW5pb24gc2N0cF9hZGRyICphZGRyKTsKKwlfX3UxNgkJbmV0X2hlYWRlcl9sZW47CisJaW50CQlzb2NrYWRkcl9sZW47CisJc2FfZmFtaWx5X3QJc2FfZmFtaWx5OworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKK307CisKK3N0cnVjdCBzY3RwX2FmICpzY3RwX2dldF9hZl9zcGVjaWZpYyhzYV9mYW1pbHlfdCk7CitpbnQgc2N0cF9yZWdpc3Rlcl9hZihzdHJ1Y3Qgc2N0cF9hZiAqKTsKKworLyogUHJvdG9jb2wgZmFtaWx5IGZ1bmN0aW9ucy4gKi8KK3N0cnVjdCBzY3RwX3BmIHsKKwl2b2lkICgqZXZlbnRfbXNnbmFtZSkoc3RydWN0IHNjdHBfdWxwZXZlbnQgKiwgY2hhciAqLCBpbnQgKik7CisJdm9pZCAoKnNrYl9tc2duYW1lKSAgKHN0cnVjdCBza19idWZmICosIGNoYXIgKiwgaW50ICopOworCWludCAgKCphZl9zdXBwb3J0ZWQpIChzYV9mYW1pbHlfdCwgc3RydWN0IHNjdHBfc29jayAqKTsKKwlpbnQgICgqY21wX2FkZHIpIChjb25zdCB1bmlvbiBzY3RwX2FkZHIgKiwKKwkJCSAgY29uc3QgdW5pb24gc2N0cF9hZGRyICosCisJCQkgIHN0cnVjdCBzY3RwX3NvY2sgKik7CisJaW50ICAoKmJpbmRfdmVyaWZ5KSAoc3RydWN0IHNjdHBfc29jayAqLCB1bmlvbiBzY3RwX2FkZHIgKik7CisJaW50ICAoKnNlbmRfdmVyaWZ5KSAoc3RydWN0IHNjdHBfc29jayAqLCB1bmlvbiBzY3RwX2FkZHIgKik7CisJaW50ICAoKnN1cHBvcnRlZF9hZGRycykoY29uc3Qgc3RydWN0IHNjdHBfc29jayAqLCBfX3UxNiAqKTsKKwlzdHJ1Y3Qgc29jayAqKCpjcmVhdGVfYWNjZXB0X3NrKSAoc3RydWN0IHNvY2sgKnNrLAorCQkJCQkgIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKTsKKwl2b2lkICgqYWRkcl92NG1hcCkgKHN0cnVjdCBzY3RwX3NvY2sgKiwgdW5pb24gc2N0cF9hZGRyICopOworCXN0cnVjdCBzY3RwX2FmICphZjsKK307CisKKworLyogU3RydWN0dXJlIHRvIHRyYWNrIGNodW5rIGZyYWdtZW50cyB0aGF0IGhhdmUgYmVlbiBhY2tlZCwgYnV0IHBlZXIKKyAqIGZyYWdtZW50cyBvZiB0aGUgc2FtZSBtZXNzYWdlIGhhdmUgbm90LgorICovCitzdHJ1Y3Qgc2N0cF9kYXRhbXNnIHsKKwkvKiBDaHVua3Mgd2FpdGluZyB0byBiZSBzdWJtaXR0ZWQgdG8gbG93ZXIgbGF5ZXIuICovCisJc3RydWN0IGxpc3RfaGVhZCBjaHVua3M7CisJLyogQ2h1bmtzIHRoYXQgaGF2ZSBiZWVuIHRyYW5zbWl0dGVkLiAqLworCXN0cnVjdCBsaXN0X2hlYWQgdHJhY2s7CisJLyogUmVmZXJlbmNlIGNvdW50aW5nLiAqLworCWF0b21pY190IHJlZmNudDsKKwkvKiBXaGVuIGlzIHRoaXMgbWVzc2FnZSBubyBsb25nZXIgaW50ZXJlc3RpbmcgdG8gdGhlIHBlZXI/ICovCisJdW5zaWduZWQgbG9uZyBleHBpcmVzX2F0OworCS8qIERpZCB0aGUgbWVzc2VuZ2UgZmFpbCB0byBzZW5kPyAqLworCWludCBzZW5kX2Vycm9yOworCWNoYXIgc2VuZF9mYWlsZWQ7CisJLyogQ29udHJvbCB3aGV0aGVyIGNodW5rcyBmcm9tIHRoaXMgbWVzc2FnZSBjYW4gYmUgYWJhbmRvbmVkLiAqLworCWNoYXIgY2FuX2FiYW5kb247Cit9OworCitzdHJ1Y3Qgc2N0cF9kYXRhbXNnICpzY3RwX2RhdGFtc2dfZnJvbV91c2VyKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICosCisJCQkJCSAgICBzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvICosCisJCQkJCSAgICBzdHJ1Y3QgbXNnaGRyICosIGludCBsZW4pOwordm9pZCBzY3RwX2RhdGFtc2dfcHV0KHN0cnVjdCBzY3RwX2RhdGFtc2cgKik7Cit2b2lkIHNjdHBfZGF0YW1zZ19mcmVlKHN0cnVjdCBzY3RwX2RhdGFtc2cgKik7Cit2b2lkIHNjdHBfZGF0YW1zZ190cmFjayhzdHJ1Y3Qgc2N0cF9jaHVuayAqKTsKK3ZvaWQgc2N0cF9jaHVua19mYWlsKHN0cnVjdCBzY3RwX2NodW5rICosIGludCBlcnJvcik7CitpbnQgc2N0cF9jaHVua19hYmFuZG9uZWQoc3RydWN0IHNjdHBfY2h1bmsgKik7CisKKworLyogUkZDMjk2MCAxLjQgS2V5IFRlcm1zCisgKgorICogbyBDaHVuazogQSB1bml0IG9mIGluZm9ybWF0aW9uIHdpdGhpbiBhbiBTQ1RQIHBhY2tldCwgY29uc2lzdGluZyBvZgorICogYSBjaHVuayBoZWFkZXIgYW5kIGNodW5rLXNwZWNpZmljIGNvbnRlbnQuCisgKgorICogQXMgYSBtYXR0ZXIgb2YgY29udmVuaWVuY2UsIHdlIHJlbWVtYmVyIHRoZSBTQ1RQIGNvbW1vbiBoZWFkZXIgZm9yCisgKiBlYWNoIGNodW5rIGFzIHdlbGwgYXMgYSBmZXcgb3RoZXIgaGVhZGVyIHBvaW50ZXJzLi4uCisgKi8KK3N0cnVjdCBzY3RwX2NodW5rIHsKKwkvKiBUaGVzZSBmaXJzdCB0aHJlZSBlbGVtZW50cyBNVVNUIFBSRUNJU0VMWSBtYXRjaCB0aGUgZmlyc3QKKwkgKiB0aHJlZSBlbGVtZW50cyBvZiBzdHJ1Y3Qgc2tfYnVmZi4gIFRoaXMgYWxsb3dzIHVzIHRvIHJldXNlCisJICogYWxsIHRoZSBza2JfKiBxdWV1ZSBtYW5hZ2VtZW50IGZ1bmN0aW9ucy4KKwkgKi8KKwlzdHJ1Y3Qgc2N0cF9jaHVuayAqbmV4dDsKKwlzdHJ1Y3Qgc2N0cF9jaHVuayAqcHJldjsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0OworCWF0b21pY190IHJlZmNudDsKKworCS8qIFRoaXMgaXMgb3VyIGxpbmsgdG8gdGhlIHBlci10cmFuc3BvcnQgdHJhbnNtaXR0ZWQgbGlzdC4gICovCisJc3RydWN0IGxpc3RfaGVhZCB0cmFuc21pdHRlZF9saXN0OworCisJLyogVGhpcyBmaWVsZCBpcyB1c2VkIGJ5IGNodW5rcyB0aGF0IGhvbGQgZnJhZ21lbnRlZCBkYXRhLgorCSAqIEZvciB0aGUgZmlyc3QgZnJhZ21lbnQgdGhpcyBpcyB0aGUgbGlzdCB0aGF0IGhvbGRzIHRoZSByZXN0IG9mCisJICogZnJhZ21lbnRzLiBGb3IgdGhlIHJlbWFpbmluZyBmcmFnbWVudHMsIHRoaXMgaXMgdGhlIGxpbmsgdG8gdGhlCisJICogZnJhZ19saXN0IG1haW50YWluZWQgaW4gdGhlIGZpcnN0IGZyYWdtZW50LgorCSAqLworCXN0cnVjdCBsaXN0X2hlYWQgZnJhZ19saXN0OworCisJLyogVGhpcyBwb2ludHMgdG8gdGhlIHNrX2J1ZmYgY29udGFpbmluZyB0aGUgYWN0dWFsIGRhdGEuICAqLworCXN0cnVjdCBza19idWZmICpza2I7CisKKwkvKiBUaGVzZSBhcmUgdGhlIFNDVFAgaGVhZGVycyBieSByZXZlcnNlIG9yZGVyIGluIGEgcGFja2V0LgorCSAqIE5vdGUgdGhhdCBzb21lIG9mIHRoZXNlIG1heSBoYXBwZW4gbW9yZSB0aGFuIG9uY2UuICBJbiB0aGF0CisJICogY2FzZSwgd2UgcG9pbnQgYXQgdGhlICJjdXJyZW50IiBvbmUsIHdoYXRldmVyIHRoYXQgbWVhbnMKKwkgKiBmb3IgdGhhdCBsZXZlbCBvZiBoZWFkZXIuCisJICovCisKKwkvKiBXZSBwb2ludCB0aGlzIGF0IHRoZSBGSVJTVCBUTFYgcGFyYW1ldGVyIHRvIGNodW5rX2hkci4gICovCisJdW5pb24gc2N0cF9wYXJhbXMgcGFyYW1faGRyOworCXVuaW9uIHsKKwkJX191OCAqdjsKKwkJc3RydWN0IHNjdHBfZGF0YWhkciAqZGF0YV9oZHI7CisJCXN0cnVjdCBzY3RwX2luaXRoZHIgKmluaXRfaGRyOworCQlzdHJ1Y3Qgc2N0cF9zYWNraGRyICpzYWNrX2hkcjsKKwkJc3RydWN0IHNjdHBfaGVhcnRiZWF0aGRyICpoYl9oZHI7CisJCXN0cnVjdCBzY3RwX3NlbmRlcl9oYl9pbmZvICpoYnNfaGRyOworCQlzdHJ1Y3Qgc2N0cF9zaHV0ZG93bmhkciAqc2h1dGRvd25faGRyOworCQlzdHJ1Y3Qgc2N0cF9zaWduZWRfY29va2llICpjb29raWVfaGRyOworCQlzdHJ1Y3Qgc2N0cF9lY25laGRyICplY25lX2hkcjsKKwkJc3RydWN0IHNjdHBfY3dyaGRyICplY25fY3dyX2hkcjsKKwkJc3RydWN0IHNjdHBfZXJyaGRyICplcnJfaGRyOworCQlzdHJ1Y3Qgc2N0cF9hZGRpcGhkciAqYWRkaXBfaGRyOworCQlzdHJ1Y3Qgc2N0cF9md2R0c25faGRyICpmd2R0c25faGRyOworCX0gc3ViaDsKKworCV9fdTggKmNodW5rX2VuZDsKKworCXN0cnVjdCBzY3RwX2NodW5raGRyICpjaHVua19oZHI7CisJc3RydWN0IHNjdHBoZHIgKnNjdHBfaGRyOworCisJLyogVGhpcyBuZWVkcyB0byBiZSByZWNvdmVyYWJsZSBmb3IgU0NUUF9TRU5EX0ZBSUxFRCBldmVudHMuICovCisJc3RydWN0IHNjdHBfc25kcmN2aW5mbyBzaW5mbzsKKworCS8qIFdoaWNoIGFzc29jaWF0aW9uIGRvZXMgdGhpcyBiZWxvbmcgdG8/ICAqLworCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jOworCisJLyogV2hhdCBlbmRwb2ludCByZWNlaXZlZCB0aGlzIGNodW5rPyAqLworCXN0cnVjdCBzY3RwX2VwX2NvbW1vbiAqcmN2cjsKKworCS8qIFdlIGZpbGwgdGhpcyBpbiBpZiB3ZSBhcmUgY2FsY3VsYXRpbmcgUlRULiAqLworCXVuc2lnbmVkIGxvbmcgc2VudF9hdDsKKworCS8qIFdoYXQgaXMgdGhlIG9yaWdpbiBJUCBhZGRyZXNzIGZvciB0aGlzIGNodW5rPyAgKi8KKwl1bmlvbiBzY3RwX2FkZHIgc291cmNlOworCS8qIERlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIHRoaXMgY2h1bmsuICovCisJdW5pb24gc2N0cF9hZGRyIGRlc3Q7CisKKwkvKiBGb3Igb3V0Ym91bmQgbWVzc2FnZSwgdHJhY2sgYWxsIGZyYWdtZW50cyBmb3IgU0VORF9GQUlMRUQuICovCisJc3RydWN0IHNjdHBfZGF0YW1zZyAqbXNnOworCisJLyogRm9yIGFuIGluYm91bmQgY2h1bmssIHRoaXMgdGVsbHMgdXMgd2hlcmUgaXQgY2FtZSBmcm9tLgorCSAqIEZvciBhbiBvdXRib3VuZCBjaHVuaywgaXQgdGVsbHMgdXMgd2hlcmUgd2UnZCBsaWtlIGl0IHRvCisJICogZ28uCUl0IGlzIE5VTEwgaWYgd2UgaGF2ZSBubyBwcmVmZXJlbmNlLgorCSAqLworCXN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdHJhbnNwb3J0OworCisJX191OCBydHRfaW5fcHJvZ3Jlc3M7CS8qIElzIHRoaXMgY2h1bmsgdXNlZCBmb3IgUlRUIGNhbGN1bGF0aW9uPyAqLworCV9fdTggcmVzZW50OwkJLyogSGFzIHRoaXMgY2h1bmsgZXZlciBiZWVuIHJldHJhbnNtaXR0ZWQuICovCisJX191OCBoYXNfdHNuOwkJLyogRG9lcyB0aGlzIGNodW5rIGhhdmUgYSBUU04geWV0PyAqLworCV9fdTggaGFzX3NzbjsJCS8qIERvZXMgdGhpcyBjaHVuayBoYXZlIGEgU1NOIHlldD8gKi8KKwlfX3U4IHNpbmdsZXRvbjsJCS8qIFdhcyB0aGlzIHRoZSBvbmx5IGNodW5rIGluIHRoZSBwYWNrZXQ/ICovCisJX191OCBlbmRfb2ZfcGFja2V0OwkvKiBXYXMgdGhpcyB0aGUgbGFzdCBjaHVuayBpbiB0aGUgcGFja2V0PyAqLworCV9fdTggZWNuX2NlX2RvbmU7CS8qIEhhdmUgd2UgcHJvY2Vzc2VkIHRoZSBFQ04gQ0UgYml0PyAqLworCV9fdTggcGRpc2NhcmQ7CQkvKiBEaXNjYXJkIHRoZSB3aG9sZSBwYWNrZXQgbm93PyAqLworCV9fdTggdHNuX2dhcF9hY2tlZDsJLyogSXMgdGhpcyBjaHVuayBhY2tlZCBieSBhIEdBUCBBQ0s/ICovCisJX191OCBmYXN0X3JldHJhbnNtaXQ7CSAvKiBJcyB0aGlzIGNodW5rIGZhc3QgcmV0cmFuc21pdHRlZD8gKi8KKwlfX3U4IHRzbl9taXNzaW5nX3JlcG9ydDsgLyogRGF0YSBjaHVuayBtaXNzaW5nIGNvdW50ZXIuICovCit9OworCit2b2lkIHNjdHBfY2h1bmtfaG9sZChzdHJ1Y3Qgc2N0cF9jaHVuayAqKTsKK3ZvaWQgc2N0cF9jaHVua19wdXQoc3RydWN0IHNjdHBfY2h1bmsgKik7CitpbnQgc2N0cF91c2VyX2FkZHRvX2NodW5rKHN0cnVjdCBzY3RwX2NodW5rICpjaHVuaywgaW50IG9mZiwgaW50IGxlbiwKKwkJCSAgc3RydWN0IGlvdmVjICpkYXRhKTsKK3ZvaWQgc2N0cF9jaHVua19mcmVlKHN0cnVjdCBzY3RwX2NodW5rICopOwordm9pZCAgKnNjdHBfYWRkdG9fY2h1bmsoc3RydWN0IHNjdHBfY2h1bmsgKiwgaW50IGxlbiwgY29uc3Qgdm9pZCAqZGF0YSk7CitzdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9jaHVua2lmeShzdHJ1Y3Qgc2tfYnVmZiAqLAorCQkJCSBjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqLAorCQkJCSBzdHJ1Y3Qgc29jayAqKTsKK3ZvaWQgc2N0cF9pbml0X2FkZHJzKHN0cnVjdCBzY3RwX2NodW5rICosIHVuaW9uIHNjdHBfYWRkciAqLAorCQkgICAgIHVuaW9uIHNjdHBfYWRkciAqKTsKK2NvbnN0IHVuaW9uIHNjdHBfYWRkciAqc2N0cF9zb3VyY2UoY29uc3Qgc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rKTsKKworLyogVGhpcyBpcyBhIHN0cnVjdHVyZSBmb3IgaG9sZGluZyBlaXRoZXIgYW4gSVB2NiBvciBhbiBJUHY0IGFkZHJlc3MuICAqLworLyogc2luX2ZhbWlseSAtLSBBRl9JTkVUIG9yIEFGX0lORVQ2CisgKiBzaW5fcG9ydCAtLSBvcmRpbmFyeSBwb3J0IG51bWJlcgorICogc2luX2FkZHIgLS0gY2FzdCB0byBlaXRoZXIgKHN0cnVjdCBpbl9hZGRyKSBvciAoc3RydWN0IGluNl9hZGRyKQorICovCitzdHJ1Y3Qgc2N0cF9zb2NrYWRkcl9lbnRyeSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXVuaW9uIHNjdHBfYWRkciBhOworfTsKKwordHlwZWRlZiBzdHJ1Y3Qgc2N0cF9jaHVuayAqKHNjdHBfcGFja2V0X3BoYW5kbGVyX3QpKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICopOworCisvKiBUaGlzIHN0cnVjdHVyZSBob2xkcyBsaXN0cyBvZiBjaHVua3MgYXMgd2UgYXJlIGFzc2VtYmxpbmcgZm9yCisgKiB0cmFuc21pc3Npb24uCisgKi8KK3N0cnVjdCBzY3RwX3BhY2tldCB7CisJLyogVGhlc2UgYXJlIHRoZSBTQ1RQIGhlYWRlciB2YWx1ZXMgKGhvc3Qgb3JkZXIpIGZvciB0aGUgcGFja2V0LiAqLworCV9fdTE2IHNvdXJjZV9wb3J0OworCV9fdTE2IGRlc3RpbmF0aW9uX3BvcnQ7CisJX191MzIgdnRhZzsKKworCS8qIFRoaXMgY29udGFpbnMgdGhlIHBheWxvYWQgY2h1bmtzLiAgKi8KKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGNodW5rczsKKworCS8qIFRoaXMgaXMgdGhlIG92ZXJoZWFkIG9mIHRoZSBzY3RwIGFuZCBpcCBoZWFkZXJzLiAqLworCXNpemVfdCBvdmVyaGVhZDsKKwkvKiBUaGlzIGlzIHRoZSB0b3RhbCBzaXplIG9mIGFsbCBjaHVua3MgSU5DTFVESU5HIHBhZGRpbmcuICAqLworCXNpemVfdCBzaXplOworCisJLyogVGhlIHBhY2tldCBpcyBkZXN0aW5lZCBmb3IgdGhpcyB0cmFuc3BvcnQgYWRkcmVzcy4KKwkgKiBUaGUgZnVuY3Rpb24gd2UgZmluYWxseSB1c2UgdG8gcGFzcyBkb3duIHRvIHRoZSBuZXh0IGxvd2VyCisJICogbGF5ZXIgbGl2ZXMgaW4gdGhlIHRyYW5zcG9ydCBzdHJ1Y3R1cmUuCisJICovCisJc3RydWN0IHNjdHBfdHJhbnNwb3J0ICp0cmFuc3BvcnQ7CisKKwkvKiBUaGlzIHBhY2tldCBjb250YWlucyBhIENPT0tJRS1FQ0hPIGNodW5rLiAqLworCWNoYXIgaGFzX2Nvb2tpZV9lY2hvOworCisJLyogVGhpcyBwYWNrZXQgY29udGFpbnNhIFNBQ0sgY2h1bmsuICovCisJY2hhciBoYXNfc2FjazsKKworCS8qIFNDVFAgY2Fubm90IGZyYWdtZW50IHRoaXMgcGFja2V0LiBTbyBsZXQgaXAgZnJhZ21lbnQgaXQuICovCisJY2hhciBpcGZyYWdvazsKKworCWludCBtYWxsb2NlZDsKK307CisKK3N0cnVjdCBzY3RwX3BhY2tldCAqc2N0cF9wYWNrZXRfaW5pdChzdHJ1Y3Qgc2N0cF9wYWNrZXQgKiwKKwkJCQkgICAgIHN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqLAorCQkJCSAgICAgX191MTYgc3BvcnQsIF9fdTE2IGRwb3J0KTsKK3N0cnVjdCBzY3RwX3BhY2tldCAqc2N0cF9wYWNrZXRfY29uZmlnKHN0cnVjdCBzY3RwX3BhY2tldCAqLCBfX3UzMiB2dGFnLCBpbnQpOworc2N0cF94bWl0X3Qgc2N0cF9wYWNrZXRfdHJhbnNtaXRfY2h1bmsoc3RydWN0IHNjdHBfcGFja2V0ICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9jaHVuayAqKTsKK3NjdHBfeG1pdF90IHNjdHBfcGFja2V0X2FwcGVuZF9jaHVuayhzdHJ1Y3Qgc2N0cF9wYWNrZXQgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9jaHVuayAqKTsKK2ludCBzY3RwX3BhY2tldF90cmFuc21pdChzdHJ1Y3Qgc2N0cF9wYWNrZXQgKik7Cit2b2lkIHNjdHBfcGFja2V0X2ZyZWUoc3RydWN0IHNjdHBfcGFja2V0ICopOworCitzdGF0aWMgaW5saW5lIGludCBzY3RwX3BhY2tldF9lbXB0eShzdHJ1Y3Qgc2N0cF9wYWNrZXQgKnBhY2tldCkKK3sKKwlyZXR1cm4gKHBhY2tldC0+c2l6ZSA9PSBwYWNrZXQtPm92ZXJoZWFkKTsKK30KKworLyogVGhpcyByZXByZXNlbnRzIGEgcmVtb3RlIHRyYW5zcG9ydCBhZGRyZXNzLgorICogRm9yIGxvY2FsIHRyYW5zcG9ydCBhZGRyZXNzZXMsIHdlIGp1c3QgdXNlIHVuaW9uIHNjdHBfYWRkci4KKyAqCisgKiBSRkMyOTYwIFNlY3Rpb24gMS40IEtleSBUZXJtcworICoKKyAqICAgbwlUcmFuc3BvcnQgYWRkcmVzczogIEEgVHJhbnNwb3J0IEFkZHJlc3MgaXMgdHJhZGl0aW9uYWxseSBkZWZpbmVkCisgKglieSBOZXR3b3JrIExheWVyIGFkZHJlc3MsIFRyYW5zcG9ydCBMYXllciBwcm90b2NvbCBhbmQgVHJhbnNwb3J0CisgKglMYXllciBwb3J0IG51bWJlci4gIEluIHRoZSBjYXNlIG9mIFNDVFAgcnVubmluZyBvdmVyIElQLCBhCisgKgl0cmFuc3BvcnQgYWRkcmVzcyBpcyBkZWZpbmVkIGJ5IHRoZSBjb21iaW5hdGlvbiBvZiBhbiBJUCBhZGRyZXNzCisgKglhbmQgYW4gU0NUUCBwb3J0IG51bWJlciAod2hlcmUgU0NUUCBpcyB0aGUgVHJhbnNwb3J0IHByb3RvY29sKS4KKyAqCisgKiBSRkMyOTYwIFNlY3Rpb24gNy4xIFNDVFAgRGlmZmVyZW5jZXMgZnJvbSBUQ1AgQ29uZ2VzdGlvbiBjb250cm9sCisgKgorICogICBvCVRoZSBzZW5kZXIga2VlcHMgYSBzZXBhcmF0ZSBjb25nZXN0aW9uIGNvbnRyb2wgcGFyYW1ldGVyIHNldCBmb3IKKyAqCWVhY2ggb2YgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3NlcyBpdCBjYW4gc2VuZCB0byAobm90IGVhY2gKKyAqCXNvdXJjZS1kZXN0aW5hdGlvbiBwYWlyIGJ1dCBmb3IgZWFjaCBkZXN0aW5hdGlvbikuICBUaGUgcGFyYW1ldGVycworICoJc2hvdWxkIGRlY2F5IGlmIHRoZSBhZGRyZXNzIGlzIG5vdCB1c2VkIGZvciBhIGxvbmcgZW5vdWdoIHRpbWUKKyAqCXBlcmlvZC4KKyAqCisgKi8KK3N0cnVjdCBzY3RwX3RyYW5zcG9ydCB7CisJLyogQSBsaXN0IG9mIHRyYW5zcG9ydHMuICovCisJc3RydWN0IGxpc3RfaGVhZCB0cmFuc3BvcnRzOworCisJLyogUmVmZXJlbmNlIGNvdW50aW5nLiAqLworCWF0b21pY190IHJlZmNudDsKKwlpbnQJIGRlYWQ7CisKKwkvKiBUaGlzIGlzIHRoZSBwZWVyJ3MgSVAgYWRkcmVzcyBhbmQgcG9ydC4gKi8KKwl1bmlvbiBzY3RwX2FkZHIgaXBhZGRyOworCisJLyogVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgd2UgY2FsbCB0byBoYW5kbGUgTExQIHN0dWZmLgkgKi8KKwlzdHJ1Y3Qgc2N0cF9hZiAqYWZfc3BlY2lmaWM7CisKKwkvKiBXaGljaCBhc3NvY2lhdGlvbiBkbyB3ZSBiZWxvbmcgdG8/ICAqLworCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jOworCisJLyogUkZDMjk2MAorCSAqCisJICogMTIuMyBQZXIgVHJhbnNwb3J0IEFkZHJlc3MgRGF0YQorCSAqCisJICogRm9yIGVhY2ggZGVzdGluYXRpb24gdHJhbnNwb3J0IGFkZHJlc3MgaW4gdGhlIHBlZXIncworCSAqIGFkZHJlc3MgbGlzdCBkZXJpdmVkIGZyb20gdGhlIElOSVQgb3IgSU5JVCBBQ0sgY2h1bmssIGEKKwkgKiBudW1iZXIgb2YgZGF0YSBlbGVtZW50cyBuZWVkcyB0byBiZSBtYWludGFpbmVkIGluY2x1ZGluZzoKKwkgKi8KKwlfX3UzMiBydHQ7CQkvKiBUaGlzIGlzIHRoZSBtb3N0IHJlY2VudCBSVFQuCSAqLworCisJLyogUlRPCSAgICAgICA6IFRoZSBjdXJyZW50IHJldHJhbnNtaXNzaW9uIHRpbWVvdXQgdmFsdWUuICAqLworCV9fdTMyIHJ0bzsKKworCS8qIFJUVFZBUiAgICAgIDogVGhlIGN1cnJlbnQgUlRUIHZhcmlhdGlvbi4gICovCisJX191MzIgcnR0dmFyOworCisJLyogU1JUVAkgICAgICAgOiBUaGUgY3VycmVudCBzbW9vdGhlZCByb3VuZCB0cmlwIHRpbWUuCSovCisJX191MzIgc3J0dDsKKworCS8qIFJUTy1QZW5kaW5nIDogQSBmbGFnIHVzZWQgdG8gdHJhY2sgaWYgb25lIG9mIHRoZSBEQVRBCisJICoJCWNodW5rcyBzZW50IHRvIHRoaXMgYWRkcmVzcyBpcyBjdXJyZW50bHkgYmVpbmcKKwkgKgkJdXNlZCB0byBjb21wdXRlIGEgUlRULiBJZiB0aGlzIGZsYWcgaXMgMCwKKwkgKgkJdGhlIG5leHQgREFUQSBjaHVuayBzZW50IHRvIHRoaXMgZGVzdGluYXRpb24KKwkgKgkJc2hvdWxkIGJlIHVzZWQgdG8gY29tcHV0ZSBhIFJUVCBhbmQgdGhpcyBmbGFnCisJICoJCXNob3VsZCBiZSBzZXQuIEV2ZXJ5IHRpbWUgdGhlIFJUVAorCSAqCQljYWxjdWxhdGlvbiBjb21wbGV0ZXMgKGkuZS4gdGhlIERBVEEgY2h1bmsKKwkgKgkJaXMgU0FDSydkKSBjbGVhciB0aGlzIGZsYWcuCisJICovCisJaW50IHJ0b19wZW5kaW5nOworCisJLyoKKwkgKiBUaGVzZSBhcmUgdGhlIGNvbmdlc3Rpb24gc3RhdHMuCisJICovCisJLyogY3duZAkgICAgICAgOiBUaGUgY3VycmVudCBjb25nZXN0aW9uIHdpbmRvdy4JICovCisJX191MzIgY3duZDsJCSAgLyogVGhpcyBpcyB0aGUgYWN0dWFsIGN3bmQuICAqLworCisJLyogc3N0aHJlc2ggICAgOiBUaGUgY3VycmVudCBzbG93IHN0YXJ0IHRocmVzaG9sZCB2YWx1ZS4gICovCisJX191MzIgc3N0aHJlc2g7CisKKwkvKiBwYXJ0aWFsICAgICA6IFRoZSB0cmFja2luZyBtZXRob2QgZm9yIGluY3JlYXNlIG9mIGN3bmQgd2hlbiBpbgorCSAqIGJ5dGVzIGFja2VkIDogY29uZ2VzdGlvbiBhdm9pZGFuY2UgbW9kZSAoc2VlIFNlY3Rpb24gNi4yLjIpCisJICovCisJX191MzIgcGFydGlhbF9ieXRlc19hY2tlZDsKKworCS8qIERhdGEgdGhhdCBoYXMgYmVlbiBzZW50LCBidXQgbm90IGFja25vd2xlZGdlZC4gKi8KKwlfX3UzMiBmbGlnaHRfc2l6ZTsKKworCS8qIFBNVFUJICAgICAgOiBUaGUgY3VycmVudCBrbm93biBwYXRoIE1UVS4gICovCisJX191MzIgcG10dTsKKworCS8qIERlc3RpbmF0aW9uICovCisJc3RydWN0IGRzdF9lbnRyeSAqZHN0OworCS8qIFNvdXJjZSBhZGRyZXNzLiAqLworCXVuaW9uIHNjdHBfYWRkciBzYWRkcjsKKworCS8qIFdoZW4gd2FzIHRoZSBsYXN0IHRpbWUoaW4gamlmZmllcykgdGhhdCBhIGRhdGEgcGFja2V0IHdhcyBzZW50IG9uCisJICogdGhpcyB0cmFuc3BvcnQ/ICBUaGlzIGlzIHVzZWQgdG8gYWRqdXN0IHRoZSBjd25kIHdoZW4gdGhlIHRyYW5zcG9ydAorCSAqIGJlY29tZXMgaW5hY3RpdmUuCisJICovCisJdW5zaWduZWQgbG9uZyBsYXN0X3RpbWVfdXNlZDsKKworCS8qIEhlYXJ0YmVhdCBpbnRlcnZhbDogVGhlIGVuZHBvaW50IHNlbmRzIG91dCBhIEhlYXJ0YmVhdCBjaHVuayB0bworCSAqIHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzIGV2ZXJ5IGhlYXJ0YmVhdCBpbnRlcnZhbC4KKwkgKi8KKwlpbnQgaGJfaW50ZXJ2YWw7CisKKwkvKiBXaGVuIHdhcyB0aGUgbGFzdCB0aW1lIChpbiBqaWZmaWVzKSB0aGF0IHdlIGhlYXJkIGZyb20gdGhpcworCSAqIHRyYW5zcG9ydD8gIFdlIHVzZSB0aGlzIHRvIHBpY2sgbmV3IGFjdGl2ZSBhbmQgcmV0cmFuIHBhdGhzLgorCSAqLworCXVuc2lnbmVkIGxvbmcgbGFzdF90aW1lX2hlYXJkOworCisJLyogTGFzdCB0aW1lKGluIGppZmZpZXMpIHdoZW4gY3duZCBpcyByZWR1Y2VkIGR1ZSB0byB0aGUgY29uZ2VzdGlvbgorCSAqIGluZGljYXRpb24gYmFzZWQgb24gRUNORSBjaHVuay4KKwkgKi8KKwl1bnNpZ25lZCBsb25nIGxhc3RfdGltZV9lY25lX3JlZHVjZWQ7CisKKwkvKiBhY3RpdmUgICAgICA6IFRoZSBjdXJyZW50IGFjdGl2ZSBzdGF0ZSBvZiB0aGlzIGRlc3RpbmF0aW9uLAorCSAqCSAgICAgICA6ICBpLmUuIERPV04sIFVQLCBldGMuCisJICovCisJaW50IGFjdGl2ZTsKKworCS8qIGhiX2FsbG93ZWQgIDogVGhlIGN1cnJlbnQgaGVhcnRiZWF0IHN0YXRlIG9mIHRoaXMgZGVzdGluYXRpb24sCisJICoJICAgICAgIDogIGkuZS4gQUxMT1ctSEIsIE5PLUhFQVJUQkVBVCwgZXRjLgorCSAqLworCWludCBoYl9hbGxvd2VkOworCisJLyogVGhlc2UgYXJlIHRoZSBlcnJvciBzdGF0cyBmb3IgdGhpcyBkZXN0aW5hdGlvbi4gICovCisKKwkvKiBFcnJvciBjb3VudCA6IFRoZSBjdXJyZW50IGVycm9yIGNvdW50IGZvciB0aGlzIGRlc3RpbmF0aW9uLgkqLworCXVuc2lnbmVkIHNob3J0IGVycm9yX2NvdW50OworCisJLyogVGhpcyBpcyB0aGUgbWF4X3JldHJhbnMgdmFsdWUgZm9yIHRoZSB0cmFuc3BvcnQgYW5kIHdpbGwKKwkgKiBiZSBpbml0aWFsaXplZCB0byBwcm90by5tYXhfcmV0cmFucy5wYXRoLiAgVGhpcyBjYW4gYmUgY2hhbmdlZAorCSAqIHVzaW5nIFNDVFBfU0VUX1BFRVJfQUREUl9QQVJBTVMgc29ja2V0IG9wdGlvbi4KKwkgKi8KKwlpbnQgbWF4X3JldHJhbnM7CisKKwkvKiBQZXIJICAgICAgIDogQSB0aW1lciB1c2VkIGJ5IGVhY2ggZGVzdGluYXRpb24uCisJICogRGVzdGluYXRpb24gOgorCSAqIFRpbWVyICAgICAgIDoKKwkgKgorCSAqIFtFdmVyeXdoZXJlIGVsc2UgaW4gdGhlIHRleHQgdGhpcyBpcyBjYWxsZWQgVDMtcnR4LiAtZWRdCisJICovCisJc3RydWN0IHRpbWVyX2xpc3QgVDNfcnR4X3RpbWVyOworCisJLyogSGVhcnRiZWF0IHRpbWVyIGlzIHBlciBkZXN0aW5hdGlvbi4gKi8KKwlzdHJ1Y3QgdGltZXJfbGlzdCBoYl90aW1lcjsKKworCS8qIFNpbmNlIHdlJ3JlIHVzaW5nIHBlci1kZXN0aW5hdGlvbiByZXRyYW5zbWlzc2lvbiB0aW1lcnMKKwkgKiAoc2VlIGFib3ZlKSwgd2UncmUgYWxzbyB1c2luZyBwZXItZGVzdGluYXRpb24gInRyYW5zbWl0dGVkIgorCSAqIHF1ZXVlcy4gIFRoaXMgcHJvYmFibHkgb3VnaHQgdG8gYmUgYSBwcml2YXRlIHN0cnVjdAorCSAqIGFjY2Vzc2libGUgb25seSB3aXRoaW4gdGhlIG91dHF1ZXVlLCBidXQgaXQncyBub3QsIHlldC4KKwkgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHRyYW5zbWl0dGVkOworCisJLyogV2UgYnVpbGQgYnVuZGxlLWFibGUgcGFja2V0cyBmb3IgdGhpcyB0cmFuc3BvcnQgaGVyZS4gICovCisJc3RydWN0IHNjdHBfcGFja2V0IHBhY2tldDsKKworCS8qIFRoaXMgaXMgdGhlIGxpc3Qgb2YgdHJhbnNwb3J0cyB0aGF0IGhhdmUgY2h1bmtzIHRvIHNlbmQuICAqLworCXN0cnVjdCBsaXN0X2hlYWQgc2VuZF9yZWFkeTsKKworCWludCBtYWxsb2NlZDsgLyogSXMgdGhpcyBzdHJ1Y3R1cmUga2ZyZWUoKWFibGU/ICovCisKKwkvKiBTdGF0ZSBpbmZvcm1hdGlvbiBzYXZlZCBmb3IgU0ZSX0NBQ0MgYWxnb3JpdGhtLiBUaGUga2V5CisJICogaWRlYSBpbiBTRlJfQ0FDQyBpcyB0byBtYWludGFpbiBzdGF0ZSBhdCB0aGUgc2VuZGVyIG9uIGEKKwkgKiBwZXItZGVzdGluYXRpb24gYmFzaXMgd2hlbiBhIGNoYW5nZW92ZXIgaGFwcGVucy4KKwkgKgljaGFyIGNoYW5nZW92ZXJfYWN0aXZlOworCSAqCWNoYXIgY3ljbGluZ19jaGFuZ2VvdmVyOworCSAqCV9fdTMyIG5leHRfdHNuX2F0X2NoYW5nZTsKKwkgKgljaGFyIGNhY2Nfc2F3X25ld2FjazsKKwkgKi8KKwlzdHJ1Y3QgeworCQkvKiBBbiB1bnNpZ25lZCBpbnRlZ2VyLCB3aGljaCBzdG9yZXMgdGhlIG5leHQgVFNOIHRvIGJlCisJCSAqIHVzZWQgYnkgdGhlIHNlbmRlciwgYXQgdGhlIG1vbWVudCBvZiBjaGFuZ2VvdmVyLgorCQkgKi8KKwkJX191MzIgbmV4dF90c25fYXRfY2hhbmdlOworCisJCS8qIEEgZmxhZyB3aGljaCBpbmRpY2F0ZXMgdGhlIG9jY3VycmVuY2Ugb2YgYSBjaGFuZ2VvdmVyICovCisJCWNoYXIgY2hhbmdlb3Zlcl9hY3RpdmU7CisKKwkJLyogQSBmbGFnIHdoaWNoIGluZGljYXRlcyB3aGV0aGVyIHRoZSBjaGFuZ2Ugb2YgcHJpbWFyeSBpcworCQkgKiB0aGUgZmlyc3Qgc3dpdGNoIHRvIHRoaXMgZGVzdGluYXRpb24gYWRkcmVzcyBkdXJpbmcgYW4KKwkJICogYWN0aXZlIHN3aXRjaC4KKwkJICovCisJCWNoYXIgY3ljbGluZ19jaGFuZ2VvdmVyOworCisJCS8qIEEgdGVtcG9yYXJ5IGZsYWcsIHdoaWNoIGlzIHVzZWQgZHVyaW5nIHRoZSBwcm9jZXNzaW5nIG9mCisJCSAqIGEgU0FDSyB0byBlc3RpbWF0ZSB0aGUgY2F1c2F0aXZlIFRTTihzKSdzIGdyb3VwLgorCQkgKi8KKwkJY2hhciBjYWNjX3Nhd19uZXdhY2s7CisJfSBjYWNjOworfTsKKworc3RydWN0IHNjdHBfdHJhbnNwb3J0ICpzY3RwX3RyYW5zcG9ydF9uZXcoY29uc3QgdW5pb24gc2N0cF9hZGRyICosIGludCk7Cit2b2lkIHNjdHBfdHJhbnNwb3J0X3NldF9vd25lcihzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKiwKKwkJCSAgICAgIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICopOwordm9pZCBzY3RwX3RyYW5zcG9ydF9yb3V0ZShzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKiwgdW5pb24gc2N0cF9hZGRyICosCisJCQkgIHN0cnVjdCBzY3RwX3NvY2sgKik7Cit2b2lkIHNjdHBfdHJhbnNwb3J0X3BtdHUoc3RydWN0IHNjdHBfdHJhbnNwb3J0ICopOwordm9pZCBzY3RwX3RyYW5zcG9ydF9mcmVlKHN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqKTsKK3ZvaWQgc2N0cF90cmFuc3BvcnRfcmVzZXRfdGltZXJzKHN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqKTsKK3ZvaWQgc2N0cF90cmFuc3BvcnRfaG9sZChzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKik7Cit2b2lkIHNjdHBfdHJhbnNwb3J0X3B1dChzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKik7Cit2b2lkIHNjdHBfdHJhbnNwb3J0X3VwZGF0ZV9ydG8oc3RydWN0IHNjdHBfdHJhbnNwb3J0ICosIF9fdTMyKTsKK3ZvaWQgc2N0cF90cmFuc3BvcnRfcmFpc2VfY3duZChzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKiwgX191MzIsIF9fdTMyKTsKK3ZvaWQgc2N0cF90cmFuc3BvcnRfbG93ZXJfY3duZChzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKiwgc2N0cF9sb3dlcl9jd25kX3QpOwordW5zaWduZWQgbG9uZyBzY3RwX3RyYW5zcG9ydF90aW1lb3V0KHN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqKTsKKworCisvKiBUaGlzIGlzIHRoZSBzdHJ1Y3R1cmUgd2UgdXNlIHRvIHF1ZXVlIHBhY2tldHMgYXMgdGhleSBjb21lIGludG8KKyAqIFNDVFAuICBXZSB3cml0ZSBwYWNrZXRzIHRvIGl0IGFuZCByZWFkIGNodW5rcyBmcm9tIGl0LgorICovCitzdHJ1Y3Qgc2N0cF9pbnEgeworCS8qIFRoaXMgaXMgYWN0dWFsbHkgYSBxdWV1ZSBvZiBzY3RwX2NodW5rIGVhY2gKKwkgKiBjb250YWluaW5nIGEgcGFydGlhbGx5IGRlY29kZWQgcGFja2V0LgorCSAqLworCXN0cnVjdCBza19idWZmX2hlYWQgaW47CisJLyogVGhpcyBpcyB0aGUgcGFja2V0IHdoaWNoIGlzIGN1cnJlbnRseSBvZmYgdGhlIGluIHF1ZXVlIGFuZCBpcworCSAqIGJlaW5nIHdvcmtlZCBvbiB0aHJvdWdoIHRoZSBpbmJvdW5kIGNodW5rIHByb2Nlc3NpbmcuCisJICovCisJc3RydWN0IHNjdHBfY2h1bmsgKmluX3Byb2dyZXNzOworCisJLyogVGhpcyBpcyB0aGUgZGVsYXllZCB0YXNrIHRvIGZpbmlzaCBkZWxpdmVyaW5nIGluYm91bmQKKwkgKiBtZXNzYWdlcy4KKwkgKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgaW1tZWRpYXRlOworCisJaW50IG1hbGxvY2VkOwkgICAgIC8qIElzIHRoaXMgc3RydWN0dXJlIGtmcmVlKClhYmxlPwkqLworfTsKKwordm9pZCBzY3RwX2lucV9pbml0KHN0cnVjdCBzY3RwX2lucSAqKTsKK3ZvaWQgc2N0cF9pbnFfZnJlZShzdHJ1Y3Qgc2N0cF9pbnEgKik7Cit2b2lkIHNjdHBfaW5xX3B1c2goc3RydWN0IHNjdHBfaW5xICosIHN0cnVjdCBzY3RwX2NodW5rICpwYWNrZXQpOworc3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfaW5xX3BvcChzdHJ1Y3Qgc2N0cF9pbnEgKik7Cit2b2lkIHNjdHBfaW5xX3NldF90aF9oYW5kbGVyKHN0cnVjdCBzY3RwX2lucSAqLCB2b2lkICgqKSh2b2lkICopLCB2b2lkICopOworCisvKiBUaGlzIGlzIHRoZSBzdHJ1Y3R1cmUgd2UgdXNlIHRvIGhvbGQgb3V0Ym91bmQgY2h1bmtzLiAgWW91IHB1c2gKKyAqIGNodW5rcyBpbiBhbmQgdGhleSBhdXRvbWF0aWNhbGx5IHBvcCBvdXQgdGhlIG90aGVyIGVuZCBhcyBidW5kbGVkCisgKiBwYWNrZXRzIChpdCBjYWxscyAoKm91dHB1dF9oYW5kbGVyKSgpKS4KKyAqCisgKiBUaGlzIHN0cnVjdHVyZSBjb3ZlcnMgc2VjdGlvbnMgNi4zLCA2LjQsIDYuNywgNi44LCA2LjEwLCA3LiwgOC4xLAorICogYW5kIDguMiBvZiB0aGUgdjEzIGRyYWZ0LgorICoKKyAqIEl0IGhhbmRsZXMgcmV0cmFuc21pc3Npb25zLglUaGUgY29ubmVjdGlvbiB0byB0aGUgdGltZW91dCBwb3J0aW9uCisgKiBvZiB0aGUgc3RhdGUgbWFjaGluZSBpcyB0aHJvdWdoIHNjdHBfLi4uX3RpbWVvdXQoKSBhbmQgdGltZW91dF9oYW5kbGVyLgorICoKKyAqIElmIHlvdSBmZWVkIGl0IFNBQ0tzLCBpdCB3aWxsIGVhdCB0aGVtLgorICoKKyAqIElmIHlvdSBnaXZlIGl0IGJpZyBjaHVua3MsIGl0IHdpbGwgZnJhZ21lbnQgdGhlbS4KKyAqCisgKiBJdCBhc3NpZ25zIFRTTidzIHRvIGRhdGEgY2h1bmtzLiAgVGhpcyBoYXBwZW5zIGF0IHRoZSBsYXN0IHBvc3NpYmxlCisgKiBpbnN0YW50IGJlZm9yZSB0cmFuc21pc3Npb24uCisgKgorICogV2hlbiBmcmVlKCknZCwgaXQgZW1wdGllcyBpdHNlbGYgb3V0IHZpYSBvdXRwdXRfaGFuZGxlcigpLgorICovCitzdHJ1Y3Qgc2N0cF9vdXRxIHsKKwlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKKworCS8qIERhdGEgcGVuZGluZyB0aGF0IGhhcyBuZXZlciBiZWVuIHRyYW5zbWl0dGVkLiAgKi8KKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIG91dDsKKworCXVuc2lnbmVkIG91dF9xbGVuOwkvKiBUb3RhbCBsZW5ndGggb2YgcXVldWVkIGRhdGEgY2h1bmtzLiAqLworCisJLyogRXJyb3Igb2Ygc2VuZCBmYWlsZWQsIG1heSB1c2VkIGluIFNDVFBfU0VORF9GQUlMRUQgZXZlbnQuICovCisJdW5zaWduZWQgZXJyb3I7CisKKwkvKiBUaGVzZSBhcmUgY29udHJvbCBjaHVua3Mgd2Ugd2FudCB0byBzZW5kLiAgKi8KKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGNvbnRyb2w7CisKKwkvKiBUaGVzZSBhcmUgY2h1bmtzIHRoYXQgaGF2ZSBiZWVuIHNhY2tlZCBidXQgYXJlIGFib3ZlIHRoZQorCSAqIENUU04sIG9yIGN1bXVsYXRpdmUgdHNuIGFjayBwb2ludC4KKwkgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHNhY2tlZDsKKworCS8qIFB1dCBjaHVua3Mgb24gdGhpcyBsaXN0IHRvIHNjaGVkdWxlIHRoZW0gZm9yCisJICogcmV0cmFuc21pc3Npb24uCisJICovCisJc3RydWN0IGxpc3RfaGVhZCByZXRyYW5zbWl0OworCisJLyogUHV0IGNodW5rcyBvbiB0aGlzIGxpc3QgdG8gc2F2ZSB0aGVtIGZvciBGV0QgVFNOIHByb2Nlc3NpbmcgYXMKKwkgKiB0aGV5IHdlcmUgYWJhbmRvbmVkLgorCSAqLworCXN0cnVjdCBsaXN0X2hlYWQgYWJhbmRvbmVkOworCisJLyogSG93IG1hbnkgdW5hY2tkIGJ5dGVzIGRvIHdlIGhhdmUgaW4tZmxpZ2h0PwkqLworCV9fdTMyIG91dHN0YW5kaW5nX2J5dGVzOworCisJLyogQ29ya2VkPyAqLworCWNoYXIgY29yazsKKworCS8qIElzIHRoaXMgc3RydWN0dXJlIGVtcHR5PyAgKi8KKwljaGFyIGVtcHR5OworCisJLyogQXJlIHdlIGtmcmVlKClhYmxlPyAqLworCWNoYXIgbWFsbG9jZWQ7Cit9OworCit2b2lkIHNjdHBfb3V0cV9pbml0KHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICosIHN0cnVjdCBzY3RwX291dHEgKik7Cit2b2lkIHNjdHBfb3V0cV90ZWFyZG93bihzdHJ1Y3Qgc2N0cF9vdXRxICopOwordm9pZCBzY3RwX291dHFfZnJlZShzdHJ1Y3Qgc2N0cF9vdXRxKik7CitpbnQgc2N0cF9vdXRxX3RhaWwoc3RydWN0IHNjdHBfb3V0cSAqLCBzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmspOworaW50IHNjdHBfb3V0cV9mbHVzaChzdHJ1Y3Qgc2N0cF9vdXRxICosIGludCk7CitpbnQgc2N0cF9vdXRxX3NhY2soc3RydWN0IHNjdHBfb3V0cSAqLCBzdHJ1Y3Qgc2N0cF9zYWNraGRyICopOworaW50IHNjdHBfb3V0cV9pc19lbXB0eShjb25zdCBzdHJ1Y3Qgc2N0cF9vdXRxICopOwordm9pZCBzY3RwX291dHFfcmVzdGFydChzdHJ1Y3Qgc2N0cF9vdXRxICopOworCit2b2lkIHNjdHBfcmV0cmFuc21pdChzdHJ1Y3Qgc2N0cF9vdXRxICosIHN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqLAorCQkgICAgIHNjdHBfcmV0cmFuc21pdF9yZWFzb25fdCk7Cit2b2lkIHNjdHBfcmV0cmFuc21pdF9tYXJrKHN0cnVjdCBzY3RwX291dHEgKiwgc3RydWN0IHNjdHBfdHJhbnNwb3J0ICosIF9fdTgpOworaW50IHNjdHBfb3V0cV91bmNvcmsoc3RydWN0IHNjdHBfb3V0cSAqKTsKKy8qIFVuY29yayBhbmQgZmx1c2ggYW4gb3V0cXVldWUuICAqLworc3RhdGljIGlubGluZSB2b2lkIHNjdHBfb3V0cV9jb3JrKHN0cnVjdCBzY3RwX291dHEgKnEpCit7CisJcS0+Y29yayA9IDE7Cit9CisKKy8qIFRoZXNlIGJpbmQgYWRkcmVzcyBkYXRhIGZpZWxkcyBjb21tb24gYmV0d2VlbiBlbmRwb2ludHMgYW5kIGFzc29jaWF0aW9ucyAqLworc3RydWN0IHNjdHBfYmluZF9hZGRyIHsKKworCS8qIFJGQyAyOTYwIDEyLjEgUGFyYW1ldGVycyBuZWNlc3NhcnkgZm9yIHRoZSBTQ1RQIGluc3RhbmNlCisJICoKKwkgKiBTQ1RQIFBvcnQ6CVRoZSBsb2NhbCBTQ1RQIHBvcnQgbnVtYmVyIHRoZSBlbmRwb2ludCBpcworCSAqCQlib3VuZCB0by4KKwkgKi8KKwlfX3UxNiBwb3J0OworCisJLyogUkZDIDI5NjAgMTIuMSBQYXJhbWV0ZXJzIG5lY2Vzc2FyeSBmb3IgdGhlIFNDVFAgaW5zdGFuY2UKKwkgKgorCSAqIEFkZHJlc3MgTGlzdDogVGhlIGxpc3Qgb2YgSVAgYWRkcmVzc2VzIHRoYXQgdGhpcyBpbnN0YW5jZQorCSAqCWhhcyBib3VuZC4gIFRoaXMgaW5mb3JtYXRpb24gaXMgcGFzc2VkIHRvIG9uZSdzCisJICoJcGVlcihzKSBpbiBJTklUIGFuZCBJTklUIEFDSyBjaHVua3MuCisJICovCisJc3RydWN0IGxpc3RfaGVhZCBhZGRyZXNzX2xpc3Q7CisKKwlpbnQgbWFsbG9jZWQ7CSAgICAgLyogQXJlIHdlIGtmcmVlKClhYmxlPyAgKi8KK307CisKK3ZvaWQgc2N0cF9iaW5kX2FkZHJfaW5pdChzdHJ1Y3Qgc2N0cF9iaW5kX2FkZHIgKiwgX191MTYgcG9ydCk7Cit2b2lkIHNjdHBfYmluZF9hZGRyX2ZyZWUoc3RydWN0IHNjdHBfYmluZF9hZGRyICopOworaW50IHNjdHBfYmluZF9hZGRyX2NvcHkoc3RydWN0IHNjdHBfYmluZF9hZGRyICpkZXN0LAorCQkJY29uc3Qgc3RydWN0IHNjdHBfYmluZF9hZGRyICpzcmMsCisJCQlzY3RwX3Njb3BlX3Qgc2NvcGUsIGludCBnZnAsaW50IGZsYWdzKTsKK2ludCBzY3RwX2FkZF9iaW5kX2FkZHIoc3RydWN0IHNjdHBfYmluZF9hZGRyICosIHVuaW9uIHNjdHBfYWRkciAqLAorCQkgICAgICAgaW50IGdmcCk7CitpbnQgc2N0cF9kZWxfYmluZF9hZGRyKHN0cnVjdCBzY3RwX2JpbmRfYWRkciAqLCB1bmlvbiBzY3RwX2FkZHIgKik7CitpbnQgc2N0cF9iaW5kX2FkZHJfbWF0Y2goc3RydWN0IHNjdHBfYmluZF9hZGRyICosIGNvbnN0IHVuaW9uIHNjdHBfYWRkciAqLAorCQkJIHN0cnVjdCBzY3RwX3NvY2sgKik7Cit1bmlvbiBzY3RwX2FkZHIgKnNjdHBfZmluZF91bm1hdGNoX2FkZHIoc3RydWN0IHNjdHBfYmluZF9hZGRyCSpicCwKKwkJCQkJY29uc3QgdW5pb24gc2N0cF9hZGRyCSphZGRycywKKwkJCQkJaW50CQkJYWRkcmNudCwKKwkJCQkJc3RydWN0IHNjdHBfc29jawkqb3B0KTsKK3VuaW9uIHNjdHBfcGFyYW1zIHNjdHBfYmluZF9hZGRyc190b19yYXcoY29uc3Qgc3RydWN0IHNjdHBfYmluZF9hZGRyICpicCwKKwkJCQkJIGludCAqYWRkcnNfbGVuLCBpbnQgZ2ZwKTsKK2ludCBzY3RwX3Jhd190b19iaW5kX2FkZHJzKHN0cnVjdCBzY3RwX2JpbmRfYWRkciAqYnAsIF9fdTggKnJhdywgaW50IGxlbiwKKwkJCSAgIF9fdTE2IHBvcnQsIGludCBnZnApOworCitzY3RwX3Njb3BlX3Qgc2N0cF9zY29wZShjb25zdCB1bmlvbiBzY3RwX2FkZHIgKik7CitpbnQgc2N0cF9pbl9zY29wZShjb25zdCB1bmlvbiBzY3RwX2FkZHIgKmFkZHIsIGNvbnN0IHNjdHBfc2NvcGVfdCBzY29wZSk7CitpbnQgc2N0cF9pc19hbnkoY29uc3QgdW5pb24gc2N0cF9hZGRyICphZGRyKTsKK2ludCBzY3RwX2FkZHJfaXNfdmFsaWQoY29uc3QgdW5pb24gc2N0cF9hZGRyICphZGRyKTsKKworCisvKiBXaGF0IHR5cGUgb2YgZW5kcG9pbnQ/ICAqLwordHlwZWRlZiBlbnVtIHsKKwlTQ1RQX0VQX1RZUEVfU09DS0VULAorCVNDVFBfRVBfVFlQRV9BU1NPQ0lBVElPTiwKK30gc2N0cF9lbmRwb2ludF90eXBlX3Q7CisKKy8qCisgKiBBIGNvbW1vbiBiYXNlIGNsYXNzIHRvIGJyaWRnZSB0aGUgaW1wbG1lbnRhdGlvbiB2aWV3IG9mIGEKKyAqIHNvY2tldCAodXN1YWxseSBsaXN0ZW5pbmcpIGVuZHBvaW50IHZlcnN1cyBhbiBhc3NvY2lhdGlvbidzCisgKiBsb2NhbCBlbmRwb2ludC4KKyAqIFRoaXMgY29tbW9uIHN0cnVjdHVyZSBpcyB1c2VmdWwgZm9yIHNldmVyYWwgcHVycG9zZXM6CisgKiAgIDEpIENvbW1vbiBpbnRlcmZhY2UgZm9yIGxvb2t1cCByb3V0aW5lcy4KKyAqCWEpIFN1YmZ1bmN0aW9ucyB3b3JrIGZvciBlaXRoZXIgZW5kcG9pbnQgb3IgYXNzb2NpYXRpb24KKyAqCWIpIFNpbmdsZSBpbnRlcmZhY2UgdG8gbG9va3VwIGFsbG93cyBoaWRpbmcgdGhlIGxvb2t1cCBsb2NrIHJhdGhlcgorICoJICAgdGhhbiBhY3F1aXJpbmcgaXQgZXh0ZXJuYWxseS4KKyAqICAgMikgQ29tbW9uIGludGVyZmFjZSBmb3IgdGhlIGluYm91bmQgY2h1bmsgaGFuZGxpbmcvc3RhdGUgbWFjaGluZS4KKyAqICAgMykgQ29tbW9uIG9iamVjdCBoYW5kbGluZyByb3V0aW5lcyBmb3IgcmVmZXJlbmNlIGNvdW50aW5nLCBldGMuCisgKiAgIDQpIERpc2VudGFuZ2xlIGFzc29jaWF0aW9uIGxvb2t1cCBmcm9tIGVuZHBvaW50IGxvb2t1cCwgd2hlcmUgd2UKKyAqCWRvIG5vdCBoYXZlIHRvIGZpbmQgb3VyIGVuZHBvaW50IHRvIGZpbmQgb3VyIGFzc29jaWF0aW9uLgorICoKKyAqLworCitzdHJ1Y3Qgc2N0cF9lcF9jb21tb24geworCS8qIEZpZWxkcyB0byBoZWxwIHVzIG1hbmFnZSBvdXIgZW50cmllcyBpbiB0aGUgaGFzaCB0YWJsZXMuICovCisJc3RydWN0IHNjdHBfZXBfY29tbW9uICpuZXh0OworCXN0cnVjdCBzY3RwX2VwX2NvbW1vbiAqKnBwcmV2OworCWludCBoYXNoZW50OworCisJLyogUnVudGltZSB0eXBlIGluZm9ybWF0aW9uLiAgV2hhdCBraW5kIG9mIGVuZHBvaW50IGlzIHRoaXM/ICovCisJc2N0cF9lbmRwb2ludF90eXBlX3QgdHlwZTsKKworCS8qIFNvbWUgZmllbGRzIHRvIGhlbHAgdXMgbWFuYWdlIHRoaXMgb2JqZWN0LgorCSAqICAgcmVmY250ICAgLSBSZWZlcmVuY2UgY291bnQgYWNjZXNzIHRvIHRoaXMgb2JqZWN0LgorCSAqICAgZGVhZCAgICAgLSBEbyBub3QgYXR0ZW1wdCB0byB1c2UgdGhpcyBvYmplY3QuCisJICogICBtYWxsb2NlZCAtIERvIHdlIG5lZWQgdG8ga2ZyZWUgdGhpcyBvYmplY3Q/CisJICovCisJYXRvbWljX3QgICAgcmVmY250OworCWNoYXIJICAgIGRlYWQ7CisJY2hhcgkgICAgbWFsbG9jZWQ7CisKKwkvKiBXaGF0IHNvY2tldCBkb2VzIHRoaXMgZW5kcG9pbnQgYmVsb25nIHRvPyAgKi8KKwlzdHJ1Y3Qgc29jayAqc2s7CisKKwkvKiBUaGlzIGlzIHdoZXJlIHdlIHJlY2VpdmUgaW5ib3VuZCBjaHVua3MuICAqLworCXN0cnVjdCBzY3RwX2lucQkgIGlucXVldWU7CisKKwkvKiBUaGlzIHN1YnN0cnVjdHVyZSBpbmNsdWRlcyB0aGUgZGVmaW5pbmcgcGFyYW1ldGVycyBvZiB0aGUKKwkgKiBlbmRwb2ludDoKKwkgKiBiaW5kX2FkZHIucG9ydCBpcyBvdXIgc2hhcmVkIHBvcnQgbnVtYmVyLgorCSAqIGJpbmRfYWRkci5hZGRyZXNzX2xpc3QgaXMgb3VyIHNldCBvZiBsb2NhbCBJUCBhZGRyZXNzZXMuCisJICovCisJc3RydWN0IHNjdHBfYmluZF9hZGRyIGJpbmRfYWRkcjsKKworCS8qIFByb3RlY3Rpb24gZHVyaW5nIGFkZHJlc3MgbGlzdCBjb21wYXJpc29ucy4gKi8KKwlyd2xvY2tfdCAgIGFkZHJfbG9jazsKK307CisKKworLyogUkZDIFNlY3Rpb24gMS40IEtleSBUZXJtcworICoKKyAqIG8gU0NUUCBlbmRwb2ludDogVGhlIGxvZ2ljYWwgc2VuZGVyL3JlY2VpdmVyIG9mIFNDVFAgcGFja2V0cy4gT24gYQorICogICBtdWx0aS1ob21lZCBob3N0LCBhbiBTQ1RQIGVuZHBvaW50IGlzIHJlcHJlc2VudGVkIHRvIGl0cyBwZWVycyBhcyBhCisgKiAgIGNvbWJpbmF0aW9uIG9mIGEgc2V0IG9mIGVsaWdpYmxlIGRlc3RpbmF0aW9uIHRyYW5zcG9ydCBhZGRyZXNzZXMgdG8KKyAqICAgd2hpY2ggU0NUUCBwYWNrZXRzIGNhbiBiZSBzZW50IGFuZCBhIHNldCBvZiBlbGlnaWJsZSBzb3VyY2UKKyAqICAgdHJhbnNwb3J0IGFkZHJlc3NlcyBmcm9tIHdoaWNoIFNDVFAgcGFja2V0cyBjYW4gYmUgcmVjZWl2ZWQuCisgKiAgIEFsbCB0cmFuc3BvcnQgYWRkcmVzc2VzIHVzZWQgYnkgYW4gU0NUUCBlbmRwb2ludCBtdXN0IHVzZSB0aGUKKyAqICAgc2FtZSBwb3J0IG51bWJlciwgYnV0IGNhbiB1c2UgbXVsdGlwbGUgSVAgYWRkcmVzc2VzLiBBIHRyYW5zcG9ydAorICogICBhZGRyZXNzIHVzZWQgYnkgYW4gU0NUUCBlbmRwb2ludCBtdXN0IG5vdCBiZSB1c2VkIGJ5IGFub3RoZXIKKyAqICAgU0NUUCBlbmRwb2ludC4gSW4gb3RoZXIgd29yZHMsIGEgdHJhbnNwb3J0IGFkZHJlc3MgaXMgdW5pcXVlCisgKiAgIHRvIGFuIFNDVFAgZW5kcG9pbnQuCisgKgorICogRnJvbSBhbiBpbXBsZW1lbnRhdGlvbiBwZXJzcGVjdGl2ZSwgZWFjaCBzb2NrZXQgaGFzIG9uZSBvZiB0aGVzZS4KKyAqIEEgVENQLXN0eWxlIHNvY2tldCB3aWxsIGhhdmUgZXhhY3RseSBvbmUgYXNzb2NpYXRpb24gb24gb25lIG9mCisgKiB0aGVzZS4gIEFuIFVEUC1zdHlsZSBzb2NrZXQgd2lsbCBoYXZlIG11bHRpcGxlIGFzc29jaWF0aW9ucyBoYW5naW5nCisgKiBvZmYgb25lIG9mIHRoZXNlLgorICovCisKK3N0cnVjdCBzY3RwX2VuZHBvaW50IHsKKwkvKiBDb21tb24gc3Vic3RydWN0dXJlIGZvciBlbmRwb2ludCBhbmQgYXNzb2NpYXRpb24uICovCisJc3RydWN0IHNjdHBfZXBfY29tbW9uIGJhc2U7CisKKwkvKiBBc3NvY2lhdGlvbnM6IEEgbGlzdCBvZiBjdXJyZW50IGFzc29jaWF0aW9ucyBhbmQgbWFwcGluZ3MKKwkgKgkgICAgICB0byB0aGUgZGF0YSBjb25zdW1lcnMgZm9yIGVhY2ggYXNzb2NpYXRpb24uIFRoaXMKKwkgKgkgICAgICBtYXkgYmUgaW4gdGhlIGZvcm0gb2YgYSBoYXNoIHRhYmxlIG9yIG90aGVyCisJICoJICAgICAgaW1wbGVtZW50YXRpb24gZGVwZW5kZW50IHN0cnVjdHVyZS4gVGhlIGRhdGEKKwkgKgkgICAgICBjb25zdW1lcnMgbWF5IGJlIHByb2Nlc3MgaWRlbnRpZmljYXRpb24KKwkgKgkgICAgICBpbmZvcm1hdGlvbiBzdWNoIGFzIGZpbGUgZGVzY3JpcHRvcnMsIG5hbWVkIHBpcGUKKwkgKgkgICAgICBwb2ludGVyLCBvciB0YWJsZSBwb2ludGVycyBkZXBlbmRlbnQgb24gaG93IFNDVFAKKwkgKgkgICAgICBpcyBpbXBsZW1lbnRlZC4KKwkgKi8KKwkvKiBUaGlzIGlzIHJlYWxseSBhIGxpc3Qgb2Ygc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gZW50cmllcy4gKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGFzb2NzOworCisJLyogU2VjcmV0IEtleTogQSBzZWNyZXQga2V5IHVzZWQgYnkgdGhpcyBlbmRwb2ludCB0byBjb21wdXRlCisJICoJICAgICAgdGhlIE1BQy4JVGhpcyBTSE9VTEQgYmUgYSBjcnlwdG9ncmFwaGljIHF1YWxpdHkKKwkgKgkgICAgICByYW5kb20gbnVtYmVyIHdpdGggYSBzdWZmaWNpZW50IGxlbmd0aC4KKwkgKgkgICAgICBEaXNjdXNzaW9uIGluIFtSRkMxNzUwXSBjYW4gYmUgaGVscGZ1bCBpbgorCSAqCSAgICAgIHNlbGVjdGlvbiBvZiB0aGUga2V5LgorCSAqLworCV9fdTggc2VjcmV0X2tleVtTQ1RQX0hPV19NQU5ZX1NFQ1JFVFNdW1NDVFBfU0VDUkVUX1NJWkVdOworCWludCBjdXJyZW50X2tleTsKKwlpbnQgbGFzdF9rZXk7CisJaW50IGtleV9jaGFuZ2VkX2F0OworCisJLyogRGVmYXVsdCB0aW1lb3V0cy4gICovCisJaW50IHRpbWVvdXRzW1NDVFBfTlVNX1RJTUVPVVRfVFlQRVNdOworCisJLyogVmFyaW91cyB0aHJlc2hvbGRzLgkqLworCisJLyogTmFtZSBmb3IgZGVidWdnaW5nIG91dHB1dC4uLiAqLworCWNoYXIgKmRlYnVnX25hbWU7Cit9OworCisvKiBSZWNvdmVyIHRoZSBvdXR0ZXIgZW5kcG9pbnQgc3RydWN0dXJlLiAqLworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqc2N0cF9lcChzdHJ1Y3Qgc2N0cF9lcF9jb21tb24gKmJhc2UpCit7CisJc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwOworCisJZXAgPSBjb250YWluZXJfb2YoYmFzZSwgc3RydWN0IHNjdHBfZW5kcG9pbnQsIGJhc2UpOworCXJldHVybiBlcDsKK30KKworLyogVGhlc2UgYXJlIGZ1bmN0aW9uIHNpZ25hdHVyZXMgZm9yIG1hbmlwdWxhdGluZyBlbmRwb2ludHMuICAqLworc3RydWN0IHNjdHBfZW5kcG9pbnQgKnNjdHBfZW5kcG9pbnRfbmV3KHN0cnVjdCBzb2NrICosIGludCk7Cit2b2lkIHNjdHBfZW5kcG9pbnRfZnJlZShzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqKTsKK3ZvaWQgc2N0cF9lbmRwb2ludF9wdXQoc3RydWN0IHNjdHBfZW5kcG9pbnQgKik7Cit2b2lkIHNjdHBfZW5kcG9pbnRfaG9sZChzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqKTsKK3ZvaWQgc2N0cF9lbmRwb2ludF9hZGRfYXNvYyhzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqLCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqKTsKK3N0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICpzY3RwX2VuZHBvaW50X2xvb2t1cF9hc3NvYygKKwljb25zdCBzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsCisJY29uc3QgdW5pb24gc2N0cF9hZGRyICpwYWRkciwKKwlzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKiopOworaW50IHNjdHBfZW5kcG9pbnRfaXNfcGVlbGVkX29mZihzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqLAorCQkJCWNvbnN0IHVuaW9uIHNjdHBfYWRkciAqKTsKK3N0cnVjdCBzY3RwX2VuZHBvaW50ICpzY3RwX2VuZHBvaW50X2lzX21hdGNoKHN0cnVjdCBzY3RwX2VuZHBvaW50ICosCisJCQkJCWNvbnN0IHVuaW9uIHNjdHBfYWRkciAqKTsKK2ludCBzY3RwX2hhc19hc3NvY2lhdGlvbihjb25zdCB1bmlvbiBzY3RwX2FkZHIgKmxhZGRyLAorCQkJIGNvbnN0IHVuaW9uIHNjdHBfYWRkciAqcGFkZHIpOworCitpbnQgc2N0cF92ZXJpZnlfaW5pdChjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywgc2N0cF9jaWRfdCwKKwkJICAgICBzY3RwX2luaXRfY2h1bmtfdCAqcGVlcl9pbml0LCBzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssCisJCSAgICAgc3RydWN0IHNjdHBfY2h1bmsgKiplcnJfY2h1bmspOworaW50IHNjdHBfcHJvY2Vzc19pbml0KHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICosIHNjdHBfY2lkX3QgY2lkLAorCQkgICAgICBjb25zdCB1bmlvbiBzY3RwX2FkZHIgKnBlZXIsCisJCSAgICAgIHNjdHBfaW5pdF9jaHVua190ICppbml0LCBpbnQgZ2ZwKTsKK19fdTMyIHNjdHBfZ2VuZXJhdGVfdGFnKGNvbnN0IHN0cnVjdCBzY3RwX2VuZHBvaW50ICopOworX191MzIgc2N0cF9nZW5lcmF0ZV90c24oY29uc3Qgc3RydWN0IHNjdHBfZW5kcG9pbnQgKik7CisKKworLyogUkZDMjk2MAorICoKKyAqIDEyLiBSZWNvbW1lbmRlZCBUcmFuc21pc3Npb24gQ29udHJvbCBCbG9jayAoVENCKSBQYXJhbWV0ZXJzCisgKgorICogVGhpcyBzZWN0aW9uIGRldGFpbHMgYSByZWNvbW1lbmRlZCBzZXQgb2YgcGFyYW1ldGVycyB0aGF0IHNob3VsZAorICogYmUgY29udGFpbmVkIHdpdGhpbiB0aGUgVENCIGZvciBhbiBpbXBsZW1lbnRhdGlvbi4gVGhpcyBzZWN0aW9uIGlzCisgKiBmb3IgaWxsdXN0cmF0aXZlIHB1cnBvc2VzIGFuZCBzaG91bGQgbm90IGJlIGRlZW1lZCBhcyByZXF1aXJlbWVudHMKKyAqIG9uIGFuIGltcGxlbWVudGF0aW9uIG9yIGFzIGFuIGV4aGF1c3RpdmUgbGlzdCBvZiBhbGwgcGFyYW1ldGVycworICogaW5zaWRlIGFuIFNDVFAgVENCLiBFYWNoIGltcGxlbWVudGF0aW9uIG1heSBuZWVkIGl0cyBvd24gYWRkaXRpb25hbAorICogcGFyYW1ldGVycyBmb3Igb3B0aW1pemF0aW9uLgorICovCisKKworLyogSGVyZSB3ZSBoYXZlIGluZm9ybWF0aW9uIGFib3V0IGVhY2ggaW5kaXZpZHVhbCBhc3NvY2lhdGlvbi4gKi8KK3N0cnVjdCBzY3RwX2Fzc29jaWF0aW9uIHsKKworCS8qIEEgYmFzZSBzdHJ1Y3R1cmUgY29tbW9uIHRvIGVuZHBvaW50IGFuZCBhc3NvY2lhdGlvbi4KKwkgKiBJbiB0aGlzIGNvbnRleHQsIGl0IHJlcHJlc2VudHMgdGhlIGFzc29jaWF0aW9ucydzIHZpZXcKKwkgKiBvZiB0aGUgbG9jYWwgZW5kcG9pbnQgb2YgdGhlIGFzc29jaWF0aW9uLgorCSAqLworCXN0cnVjdCBzY3RwX2VwX2NvbW1vbiBiYXNlOworCisJLyogQXNzb2NpYXRpb25zIG9uIHRoZSBzYW1lIHNvY2tldC4gKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGFzb2NzOworCisJLyogYXNzb2NpYXRpb24gaWQuICovCisJc2N0cF9hc3NvY190IGFzc29jX2lkOworCisJLyogVGhpcyBpcyBvdXIgcGFyZW50IGVuZHBvaW50LgkgKi8KKwlzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXA7CisKKwkvKiBUaGVzZSBhcmUgdGhvc2UgYXNzb2NpYXRpb24gZWxlbWVudHMgbmVlZGVkIGluIHRoZSBjb29raWUuICAqLworCXN0cnVjdCBzY3RwX2Nvb2tpZSBjOworCisJLyogVGhpcyBpcyBhbGwgaW5mb3JtYXRpb24gYWJvdXQgb3VyIHBlZXIuICAqLworCXN0cnVjdCB7CisJCS8qIHJ3bmQKKwkJICoKKwkJICogUGVlciBSd25kICAgOiBDdXJyZW50IGNhbGN1bGF0ZWQgdmFsdWUgb2YgdGhlIHBlZXIncyByd25kLgorCQkgKi8KKwkJX191MzIgcnduZDsKKworCQkvKiB0cmFuc3BvcnRfYWRkcl9saXN0CisJCSAqCisJCSAqIFBlZXIJICAgICAgIDogQSBsaXN0IG9mIFNDVFAgdHJhbnNwb3J0IGFkZHJlc3NlcyB0aGF0IHRoZQorCQkgKiBUcmFuc3BvcnQgICA6IHBlZXIgaXMgYm91bmQgdG8uIFRoaXMgaW5mb3JtYXRpb24gaXMgZGVyaXZlZAorCQkgKiBBZGRyZXNzICAgICA6IGZyb20gdGhlIElOSVQgb3IgSU5JVCBBQ0sgYW5kIGlzIHVzZWQgdG8KKwkJICogTGlzdAkgICAgICAgOiBhc3NvY2lhdGUgYW4gaW5ib3VuZCBwYWNrZXQgd2l0aCBhIGdpdmVuCisJCSAqCSAgICAgICA6IGFzc29jaWF0aW9uLiBOb3JtYWxseSB0aGlzIGluZm9ybWF0aW9uIGlzCisJCSAqCSAgICAgICA6IGhhc2hlZCBvciBrZXllZCBmb3IgcXVpY2sgbG9va3VwIGFuZCBhY2Nlc3MKKwkJICoJICAgICAgIDogb2YgdGhlIFRDQi4KKwkJICoKKwkJICogSXQgaXMgYSBsaXN0IG9mIFNDVFBfdHJhbnNwb3J0J3MuCisJCSAqLworCQlzdHJ1Y3QgbGlzdF9oZWFkIHRyYW5zcG9ydF9hZGRyX2xpc3Q7CisKKwkJLyogcG9ydAorCQkgKiAgIFRoZSB0cmFuc3BvcnQgbGF5ZXIgcG9ydCBudW1iZXIuCisJCSAqLworCQlfX3UxNiBwb3J0OworCisJCS8qIHByaW1hcnlfcGF0aAorCQkgKgorCQkgKiBQcmltYXJ5ICAgICA6IFRoaXMgaXMgdGhlIGN1cnJlbnQgcHJpbWFyeSBkZXN0aW5hdGlvbgorCQkgKiBQYXRoCSAgICAgICA6IHRyYW5zcG9ydCBhZGRyZXNzIG9mIHRoZSBwZWVyIGVuZHBvaW50LiAgSXQKKwkJICoJICAgICAgIDogbWF5IGFsc28gc3BlY2lmeSBhIHNvdXJjZSB0cmFuc3BvcnQgYWRkcmVzcworCQkgKgkgICAgICAgOiBvbiB0aGlzIGVuZHBvaW50LgorCQkgKgorCQkgKiBBbGwgb2YgdGhlc2UgcGF0aHMgbGl2ZSBvbiB0cmFuc3BvcnRfYWRkcl9saXN0LgorCQkgKgorCQkgKiBBdCB0aGUgYmFrZW9mZnMsIHdlIGRpc2NvdmVyZWQgdGhhdCB0aGUgaW50ZW50IG9mCisJCSAqIHByaW1hcnlQYXRoIGlzIHRoYXQgaXQgb25seSBjaGFuZ2VzIHdoZW4gdGhlIFVMUAorCQkgKiBhc2tzIHRvIGhhdmUgaXQgY2hhbmdlZC4gIFdlIGFkZCB0aGUgYWN0aXZlUGF0aCB0bworCQkgKiBkZXNpZ25hdGUgdGhlIGNvbm5lY3Rpb24gd2UgYXJlIGN1cnJlbnRseSB1c2luZyB0bworCQkgKiB0cmFuc21pdCBuZXcgZGF0YSBhbmQgbW9zdCBjb250cm9sIGNodW5rcy4KKwkJICovCisJCXN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqcHJpbWFyeV9wYXRoOworCisJCS8qIENhY2hlIHRoZSBwcmltYXJ5IHBhdGggYWRkcmVzcyBoZXJlLCB3aGVuIHdlCisJCSAqIG5lZWQgYSBhbiBhZGRyZXNzIGZvciBtc2dfbmFtZS4KKwkJICovCisJCXVuaW9uIHNjdHBfYWRkciBwcmltYXJ5X2FkZHI7CisKKwkJLyogYWN0aXZlX3BhdGgKKwkJICogICBUaGUgcGF0aCB0aGF0IHdlIGFyZSBjdXJyZW50bHkgdXNpbmcgdG8KKwkJICogICB0cmFuc21pdCBuZXcgZGF0YSBhbmQgbW9zdCBjb250cm9sIGNodW5rcy4KKwkJICovCisJCXN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqYWN0aXZlX3BhdGg7CisKKwkJLyogcmV0cmFuX3BhdGgKKwkJICoKKwkJICogUkZDMjk2MCA2LjQgTXVsdGktaG9tZWQgU0NUUCBFbmRwb2ludHMKKwkJICogLi4uCisJCSAqIEZ1cnRoZXJtb3JlLCB3aGVuIGl0cyBwZWVyIGlzIG11bHRpLWhvbWVkLCBhbgorCQkgKiBlbmRwb2ludCBTSE9VTEQgdHJ5IHRvIHJldHJhbnNtaXQgYSBjaHVuayB0byBhbgorCQkgKiBhY3RpdmUgZGVzdGluYXRpb24gdHJhbnNwb3J0IGFkZHJlc3MgdGhhdCBpcworCQkgKiBkaWZmZXJlbnQgZnJvbSB0aGUgbGFzdCBkZXN0aW5hdGlvbiBhZGRyZXNzIHRvCisJCSAqIHdoaWNoIHRoZSBEQVRBIGNodW5rIHdhcyBzZW50LgorCQkgKi8KKwkJc3RydWN0IHNjdHBfdHJhbnNwb3J0ICpyZXRyYW5fcGF0aDsKKworCQkvKiBQb2ludGVyIHRvIGxhc3QgdHJhbnNwb3J0IEkgaGF2ZSBzZW50IG9uLiAgKi8KKwkJc3RydWN0IHNjdHBfdHJhbnNwb3J0ICpsYXN0X3NlbnRfdG87CisKKwkJLyogVGhpcyBpcyB0aGUgbGFzdCB0cmFuc3BvcnQgSSBoYXZlIHJlY2VpdmVkIERBVEEgb24uCSovCisJCXN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqbGFzdF9kYXRhX2Zyb207CisKKwkJLyoKKwkJICogTWFwcGluZyAgQW4gYXJyYXkgb2YgYml0cyBvciBieXRlcyBpbmRpY2F0aW5nIHdoaWNoIG91dCBvZgorCQkgKiBBcnJheSAgICBvcmRlciBUU04ncyBoYXZlIGJlZW4gcmVjZWl2ZWQgKHJlbGF0aXZlIHRvIHRoZQorCQkgKgkgICAgTGFzdCBSY3ZkIFRTTikuIElmIG5vIGdhcHMgZXhpc3QsIGkuZS4gbm8gb3V0IG9mCisJCSAqCSAgICBvcmRlciBwYWNrZXRzIGhhdmUgYmVlbiByZWNlaXZlZCwgdGhpcyBhcnJheQorCQkgKgkgICAgd2lsbCBiZSBzZXQgdG8gYWxsIHplcm8uIFRoaXMgc3RydWN0dXJlIG1heSBiZQorCQkgKgkgICAgaW4gdGhlIGZvcm0gb2YgYSBjaXJjdWxhciBidWZmZXIgb3IgYml0IGFycmF5LgorCQkgKgorCQkgKiBMYXN0IFJjdmQgICA6IFRoaXMgaXMgdGhlIGxhc3QgVFNOIHJlY2VpdmVkIGluCisJCSAqIFRTTgkgICAgICAgOiBzZXF1ZW5jZS4gVGhpcyB2YWx1ZSBpcyBzZXQgaW5pdGlhbGx5IGJ5CisJCSAqCSAgICAgICA6IHRha2luZyB0aGUgcGVlcidzIEluaXRpYWwgVFNOLCByZWNlaXZlZCBpbgorCQkgKgkgICAgICAgOiB0aGUgSU5JVCBvciBJTklUIEFDSyBjaHVuaywgYW5kIHN1YnRyYWN0aW5nCisJCSAqCSAgICAgICA6IG9uZSBmcm9tIGl0LgorCQkgKgorCQkgKiBUaHJvdWdob3V0IG1vc3Qgb2YgdGhlIHNwZWNpZmljYXRpb24gdGhpcyBpcyBjYWxsZWQgdGhlCisJCSAqICJDdW11bGF0aXZlIFRTTiBBQ0sgUG9pbnQiLglJbiB0aGlzIGNhc2UsIHdlCisJCSAqIGlnbm9yZSB0aGUgYWR2aWNlIGluIDEyLjIgaW4gZmF2b3VyIG9mIHRoZSB0ZXJtCisJCSAqIHVzZWQgaW4gdGhlIGJ1bGsgb2YgdGhlIHRleHQuICBUaGlzIHZhbHVlIGlzIGhpZGRlbgorCQkgKiBpbiB0c25fbWFwLS13ZSBnZXQgaXQgYnkgY2FsbGluZyBzY3RwX3Rzbm1hcF9nZXRfY3RzbigpLgorCQkgKi8KKwkJc3RydWN0IHNjdHBfdHNubWFwIHRzbl9tYXA7CisJCV9fdTggX21hcFtzY3RwX3Rzbm1hcF9zdG9yYWdlX3NpemUoU0NUUF9UU05fTUFQX1NJWkUpXTsKKworCQkvKiBBY2sgU3RhdGUgICA6IFRoaXMgZmxhZyBpbmRpY2F0ZXMgaWYgdGhlIG5leHQgcmVjZWl2ZWQKKwkJICogICAgICAgICAgICAgOiBwYWNrZXQgaXMgdG8gYmUgcmVzcG9uZGVkIHRvIHdpdGggYQorCQkgKiAgICAgICAgICAgICA6IFNBQ0suIFRoaXMgaXMgaW5pdGlhbGl6ZWR0byAwLiAgV2hlbiBhIHBhY2tldAorCQkgKiAgICAgICAgICAgICA6IGlzIHJlY2VpdmVkIGl0IGlzIGluY3JlbWVudGVkLiBJZiB0aGlzIHZhbHVlCisJCSAqICAgICAgICAgICAgIDogcmVhY2hlcyAyIG9yIG1vcmUsIGEgU0FDSyBpcyBzZW50IGFuZCB0aGUKKwkJICogICAgICAgICAgICAgOiB2YWx1ZSBpcyByZXNldCB0byAwLiBOb3RlOiBUaGlzIGlzIHVzZWQgb25seQorCQkgKiAgICAgICAgICAgICA6IHdoZW4gbm8gREFUQSBjaHVua3MgYXJlIHJlY2VpdmVkIG91dCBvZgorCQkgKiAgICAgICAgICAgICA6IG9yZGVyLiAgV2hlbiBEQVRBIGNodW5rcyBhcmUgb3V0IG9mIG9yZGVyLAorCQkgKiAgICAgICAgICAgICA6IFNBQ0sncyBhcmUgbm90IGRlbGF5ZWQgKHNlZSBTZWN0aW9uIDYpLgorCQkgKi8KKwkJX191OCAgICBzYWNrX25lZWRlZDsgICAgIC8qIERvIHdlIG5lZWQgdG8gc2FjayB0aGUgcGVlcj8gKi8KKworCQkvKiBUaGVzZSBhcmUgY2FwYWJpbGl0aWVzIHdoaWNoIG91ciBwZWVyIGFkdmVydGlzZWQuICAqLworCQlfX3U4CWVjbl9jYXBhYmxlOwkgLyogQ2FuIHBlZXIgZG8gRUNOPyAqLworCQlfX3U4CWlwdjRfYWRkcmVzczsJIC8qIFBlZXIgdW5kZXJzdGFuZHMgSVB2NCBhZGRyZXNzZXM/ICovCisJCV9fdTgJaXB2Nl9hZGRyZXNzOwkgLyogUGVlciB1bmRlcnN0YW5kcyBJUHY2IGFkZHJlc3Nlcz8gKi8KKwkJX191OAlob3N0bmFtZV9hZGRyZXNzOy8qIFBlZXIgdW5kZXJzdGFuZHMgRE5TIGFkZHJlc3Nlcz8gKi8KKwkJX191OCAgICBhc2NvbmZfY2FwYWJsZTsgIC8qIERvZXMgcGVlciBzdXBwb3J0IEFERElQPyAqLworCQlfX3U4ICAgIHByc2N0cF9jYXBhYmxlOyAgLyogQ2FuIHBlZXIgZG8gUFItU0NUUD8gKi8KKworCQlfX3UzMiAgIGFkYXB0aW9uX2luZDsJIC8qIEFkYXB0aW9uIENvZGUgcG9pbnQuICovCisKKwkJLyogVGhpcyBtYXNrIGlzIHVzZWQgdG8gZGlzYWJsZSBzZW5kaW5nIHRoZSBBU0NPTkYgY2h1bmsKKwkJICogd2l0aCBzcGVjaWZpZWQgcGFyYW1ldGVyIHRvIHBlZXIuCisJCSAqLworCQlfX3UxNiBhZGRpcF9kaXNhYmxlZF9tYXNrOworCisJCXN0cnVjdCBzY3RwX2luaXRoZHIgaTsKKwkJaW50IGNvb2tpZV9sZW47CisJCXZvaWQgKmNvb2tpZTsKKworCQkvKiBBRERJUCBTZWN0aW9uIDQuMiBVcG9uIHJlY2VwdGlvbiBvZiBhbiBBU0NPTkYgQ2h1bmsuCisJCSAqIEMxKSAuLi4gIlBlZXItU2VyaWFsLU51bWJlcicuIFRoaXMgdmFsdWUgTVVTVCBiZSBpbml0aWFsaXplZCB0byB0aGUKKwkJICogSW5pdGlhbCBUU04gVmFsdWUgbWludXMgMQorCQkgKi8KKwkJX191MzIgYWRkaXBfc2VyaWFsOworCX0gcGVlcjsKKworCS8qIFN0YXRlICAgICAgIDogQSBzdGF0ZSB2YXJpYWJsZSBpbmRpY2F0aW5nIHdoYXQgc3RhdGUgdGhlCisJICoJICAgICAgIDogYXNzb2NpYXRpb24gaXMgaW4sIGkuZS4gQ09PS0lFLVdBSVQsCisJICoJICAgICAgIDogQ09PS0lFLUVDSE9FRCwgRVNUQUJMSVNIRUQsIFNIVVRET1dOLVBFTkRJTkcsCisJICoJICAgICAgIDogU0hVVERPV04tU0VOVCwgU0hVVERPV04tUkVDRUlWRUQsIFNIVVRET1dOLUFDSy1TRU5ULgorCSAqCisJICoJCU5vdGU6IE5vICJDTE9TRUQiIHN0YXRlIGlzIGlsbHVzdHJhdGVkIHNpbmNlIGlmIGEKKwkgKgkJYXNzb2NpYXRpb24gaXMgIkNMT1NFRCIgaXRzIFRDQiBTSE9VTEQgYmUgcmVtb3ZlZC4KKwkgKgorCSAqCQlJbiB0aGlzIGltcGxlbWVudGF0aW9uIHdlIERPIGhhdmUgYSBDTE9TRUQKKwkgKgkJc3RhdGUgd2hpY2ggaXMgdXNlZCBkdXJpbmcgaW5pdGlhdGlvbiBhbmQgc2h1dGRvd24uCisJICoKKwkgKgkJU3RhdGUgdGFrZXMgdmFsdWVzIGZyb20gU0NUUF9TVEFURV8qLgorCSAqLworCXNjdHBfc3RhdGVfdCBzdGF0ZTsKKworCS8qIFRoZSBjb29raWUgbGlmZSBJIGF3YXJkIGZvciBhbnkgY29va2llLiAgKi8KKwlzdHJ1Y3QgdGltZXZhbCBjb29raWVfbGlmZTsKKworCS8qIE92ZXJhbGwgICAgIDogVGhlIG92ZXJhbGwgYXNzb2NpYXRpb24gZXJyb3IgY291bnQuCisJICogRXJyb3IgQ291bnQgOiBbQ2xlYXIgdGhpcyBhbnkgdGltZSBJIGdldCBzb21ldGhpbmcuXQorCSAqLworCWludCBvdmVyYWxsX2Vycm9yX2NvdW50OworCisJLyogVGhlc2UgYXJlIHRoZSBhc3NvY2lhdGlvbidzIGluaXRpYWwsIG1heCwgYW5kIG1pbiBSVE8gdmFsdWVzLgorCSAqIFRoZXNlIHZhbHVlcyB3aWxsIGJlIGluaXRpYWxpemVkIGJ5IHN5c3RlbSBkZWZhdWx0cywgYnV0IGNhbgorCSAqIGJlIG1vZGlmaWVkIHZpYSB0aGUgU0NUUF9SVE9JTkZPIHNvY2tldCBvcHRpb24uCisJICovCisJX191MzIgcnRvX2luaXRpYWw7CisJX191MzIgcnRvX21heDsKKwlfX3UzMiBydG9fbWluOworCisJLyogTWF4aW11bSBudW1iZXIgb2YgbmV3IGRhdGEgcGFja2V0cyB0aGF0IGNhbiBiZSBzZW50IGluIGEgYnVyc3QuICAqLworCWludCBtYXhfYnVyc3Q7CisKKwkvKiBUaGlzIGlzIHRoZSBtYXhfcmV0cmFucyB2YWx1ZSBmb3IgdGhlIGFzc29jaWF0aW9uLiAgVGhpcyB2YWx1ZSB3aWxsCisJICogYmUgaW5pdGlhbGl6ZWQgaW5pdGlhbGl6ZWQgZnJvbSBzeXN0ZW0gZGVmYXVsdHMsIGJ1dCBjYW4gYmUKKwkgKiBtb2RpZmllZCBieSB0aGUgU0NUUF9BU1NPQ0lORk8gc29ja2V0IG9wdGlvbi4KKwkgKi8KKwlpbnQgbWF4X3JldHJhbnM7CisKKwkvKiBNYXhpbXVtIG51bWJlciBvZiB0aW1lcyB0aGUgZW5kcG9pbnQgd2lsbCByZXRyYW5zbWl0IElOSVQgICovCisJX191MTYgbWF4X2luaXRfYXR0ZW1wdHM7CisKKwkvKiBIb3cgbWFueSB0aW1lcyBoYXZlIHdlIHJlc2VudCBhbiBJTklUPyAqLworCV9fdTE2IGluaXRfcmV0cmllczsKKworCS8qIFRoZSBsYXJnZXN0IHRpbWVvdXQgb3IgUlRPIHZhbHVlIHRvIHVzZSBpbiBhdHRlbXB0aW5nIGFuIElOSVQgKi8KKwlfX3UxNiBtYXhfaW5pdF90aW1lbzsKKworCWludCB0aW1lb3V0c1tTQ1RQX05VTV9USU1FT1VUX1RZUEVTXTsKKwlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcnNbU0NUUF9OVU1fVElNRU9VVF9UWVBFU107CisKKwkvKiBUcmFuc3BvcnQgdG8gd2hpY2ggU0hVVERPV04gY2h1bmsgd2FzIGxhc3Qgc2VudC4gICovCisJc3RydWN0IHNjdHBfdHJhbnNwb3J0ICpzaHV0ZG93bl9sYXN0X3NlbnRfdG87CisKKwkvKiBOZXh0IFRTTiAgICA6IFRoZSBuZXh0IFRTTiBudW1iZXIgdG8gYmUgYXNzaWduZWQgdG8gYSBuZXcKKwkgKgkgICAgICAgOiBEQVRBIGNodW5rLiAgVGhpcyBpcyBzZW50IGluIHRoZSBJTklUIG9yIElOSVQKKwkgKgkgICAgICAgOiBBQ0sgY2h1bmsgdG8gdGhlIHBlZXIgYW5kIGluY3JlbWVudGVkIGVhY2gKKwkgKgkgICAgICAgOiB0aW1lIGEgREFUQSBjaHVuayBpcyBhc3NpZ25lZCBhIFRTTgorCSAqCSAgICAgICA6IChub3JtYWxseSBqdXN0IHByaW9yIHRvIHRyYW5zbWl0IG9yIGR1cmluZworCSAqCSAgICAgICA6IGZyYWdtZW50YXRpb24pLgorCSAqLworCV9fdTMyIG5leHRfdHNuOworCisJLyoKKwkgKiBMYXN0IFJjdmQgICA6IFRoaXMgaXMgdGhlIGxhc3QgVFNOIHJlY2VpdmVkIGluIHNlcXVlbmNlLiAgVGhpcyB2YWx1ZQorCSAqIFRTTgkgICAgICAgOiBpcyBzZXQgaW5pdGlhbGx5IGJ5IHRha2luZyB0aGUgcGVlcidzIEluaXRpYWwgVFNOLAorCSAqCSAgICAgICA6IHJlY2VpdmVkIGluIHRoZSBJTklUIG9yIElOSVQgQUNLIGNodW5rLCBhbmQKKwkgKgkgICAgICAgOiBzdWJ0cmFjdGluZyBvbmUgZnJvbSBpdC4KKwkgKgorCSAqIE1vc3Qgb2YgUkZDIDI5NjAgcmVmZXJzIHRvIHRoaXMgYXMgdGhlIEN1bXVsYXRpdmUgVFNOIEFjayBQb2ludC4KKwkgKi8KKworCV9fdTMyIGN0c25fYWNrX3BvaW50OworCisJLyogUFItU0NUUCBBZHZhbmNlZC5QZWVyLkFjay5Qb2ludCAqLworCV9fdTMyIGFkdl9wZWVyX2Fja19wb2ludDsKKworCS8qIEhpZ2hlc3QgVFNOIHRoYXQgaXMgYWNrbm93bGVkZ2VkIGJ5IGluY29taW5nIFNBQ0tzLiAqLworCV9fdTMyIGhpZ2hlc3Rfc2Fja2VkOworCisJLyogVGhlIG51bWJlciBvZiB1bmFja25vd2xlZGdlZCBkYXRhIGNodW5rcy4gIFJlcG9ydGVkIHRocm91Z2gKKwkgKiB0aGUgU0NUUF9TVEFUVVMgc29ja29wdC4KKwkgKi8KKwlfX3UxNiB1bmFja19kYXRhOworCisJLyogVGhpcyBpcyB0aGUgYXNzb2NpYXRpb24ncyByZWNlaXZlIGJ1ZmZlciBzcGFjZS4gIFRoaXMgdmFsdWUgaXMgdXNlZAorCSAqIHRvIHNldCBhX3J3bmQgZmllbGQgaW4gYW4gSU5JVCBvciBhIFNBQ0sgY2h1bmsuCisJICovCisJX191MzIgcnduZDsKKworCS8qIFRoaXMgaXMgdGhlIGxhc3QgYWR2ZXJ0aXNlZCB2YWx1ZSBvZiByd25kIG92ZXIgYSBTQUNLIGNodW5rLiAqLworCV9fdTMyIGFfcnduZDsKKworCS8qIE51bWJlciBvZiBieXRlcyBieSB3aGljaCB0aGUgcnduZCBoYXMgc2xvcHBlZC4gIFRoZSByd25kIGlzIGFsbG93ZWQKKwkgKiB0byBzbG9wIG92ZXIgYSBtYXhpbXVtIG9mIHRoZSBhc3NvY2lhdGlvbidzIGZyYWdfcG9pbnQuCisJICovCisJX191MzIgcnduZF9vdmVyOworCisJLyogVGhpcyBpcyB0aGUgc25kYnVmIHNpemUgaW4gdXNlIGZvciB0aGUgYXNzb2NpYXRpb24uCisJICogVGhpcyBjb3JyZXNwb25kcyB0byB0aGUgc25kYnVmIHNpemUgZm9yIHRoZSBhc3NvY2lhdGlvbiwKKwkgKiBhcyBzcGVjaWZpZWQgaW4gdGhlIHNrLT5zbmRidWYuCisJICovCisJaW50IHNuZGJ1Zl91c2VkOworCisJLyogVGhpcyBpcyB0aGUgd2FpdCBxdWV1ZSBoZWFkIGZvciBzZW5kIHJlcXVlc3RzIHdhaXRpbmcgb24KKwkgKiB0aGUgYXNzb2NpYXRpb24gc25kYnVmIHNwYWNlLgorCSAqLworCXdhaXRfcXVldWVfaGVhZF90CXdhaXQ7CisKKwkvKiBBc3NvY2lhdGlvbiA6IFRoZSBzbWFsbGVzdCBQTVRVIGRpc2NvdmVyZWQgZm9yIGFsbCBvZiB0aGUKKwkgKiBQTVRVCSAgICAgICA6IHBlZXIncyB0cmFuc3BvcnQgYWRkcmVzc2VzLgorCSAqLworCV9fdTMyIHBtdHU7CisKKwkvKiBUaGUgbWVzc2FnZSBzaXplIGF0IHdoaWNoIFNDVFAgZnJhZ21lbnRhdGlvbiB3aWxsIG9jY3VyLiAqLworCV9fdTMyIGZyYWdfcG9pbnQ7CisKKwkvKiBDdXJyZW50bHkgb25seSBvbmUgY291bnRlciBpcyB1c2VkIHRvIGNvdW50IElOSVQgZXJyb3JzLiAqLworCWludCBjb3VudGVyc1tTQ1RQX05VTUJFUl9DT1VOVEVSU107CisKKwkvKiBEZWZhdWx0IHNlbmQgcGFyYW1ldGVycy4gKi8KKwlfX3UxNiBkZWZhdWx0X3N0cmVhbTsKKwlfX3UxNiBkZWZhdWx0X2ZsYWdzOworCV9fdTMyIGRlZmF1bHRfcHBpZDsKKwlfX3UzMiBkZWZhdWx0X2NvbnRleHQ7CisJX191MzIgZGVmYXVsdF90aW1ldG9saXZlOworCisJLyogVGhpcyB0cmFja3Mgb3V0Ym91bmQgc3NuIGZvciBhIGdpdmVuIHN0cmVhbS4JICovCisJc3RydWN0IHNjdHBfc3NubWFwICpzc25tYXA7CisKKwkvKiBBbGwgb3V0Ym91bmQgY2h1bmtzIGdvIHRocm91Z2ggdGhpcyBzdHJ1Y3R1cmUuICAqLworCXN0cnVjdCBzY3RwX291dHEgb3V0cXVldWU7CisKKwkvKiBBIHNtYXJ0IHBpcGUgdGhhdCB3aWxsIGhhbmRsZSByZW9yZGVyaW5nIGFuZCBmcmFnbWVudGF0aW9uLAorCSAqIGFzIHdlbGwgYXMgaGFuZGxlIHBhc3NpbmcgZXZlbnRzIHVwIHRvIHRoZSBVTFAuCisJICovCisJc3RydWN0IHNjdHBfdWxwcSB1bHBxOworCisJLyogTGFzdCBUU04gdGhhdCBjYXVzZWQgYW4gRUNORSBDaHVuayB0byBiZSBzZW50LiAgKi8KKwlfX3UzMiBsYXN0X2VjbmVfdHNuOworCisJLyogTGFzdCBUU04gdGhhdCBjYXVzZWQgYSBDV1IgQ2h1bmsgdG8gYmUgc2VudC4JICovCisJX191MzIgbGFzdF9jd3JfdHNuOworCisJLyogSG93IG1hbnkgZHVwbGljYXRlZCBUU05zIGhhdmUgd2Ugc2Vlbj8gICovCisJaW50IG51bWR1cHRzbnM7CisKKwkvKiBOdW1iZXIgb2Ygc2Vjb25kcyBvZiBpZGxlIHRpbWUgYmVmb3JlIGFuIGFzc29jaWF0aW9uIGlzIGNsb3NlZC4gICovCisJX191MzIgYXV0b2Nsb3NlOworCisJLyogVGhlc2UgYXJlIHRvIHN1cHBvcnQKKwkgKiAiU0NUUCBFeHRlbnNpb25zIGZvciBEeW5hbWljIFJlY29uZmlndXJhdGlvbiBvZiBJUCBBZGRyZXNzZXMKKwkgKiAgYW5kIEVuZm9yY2VtZW50IG9mIEZsb3cgYW5kIE1lc3NhZ2UgTGltaXRzIgorCSAqIDxkcmFmdC1pZXRmLXRzdndnLWFkZGlwLXNjdHAtMDIudHh0PgorCSAqIG9yICJBRERJUCIgZm9yIHNob3J0LgorCSAqLworCisKKworCS8qIEFERElQIFNlY3Rpb24gNC4xLjEgQ29uZ2VzdGlvbiBDb250cm9sIG9mIEFTQ09ORiBDaHVua3MKKwkgKgorCSAqIFIxKSBPbmUgYW5kIG9ubHkgb25lIEFTQ09ORiBDaHVuayBNQVkgYmUgaW4gdHJhbnNpdCBhbmQKKwkgKiB1bmFja25vd2xlZGdlZCBhdCBhbnkgb25lIHRpbWUuICBJZiBhIHNlbmRlciwgYWZ0ZXIgc2VuZGluZworCSAqIGFuIEFTQ09ORiBjaHVuaywgZGVjaWRlcyBpdCBuZWVkcyB0byB0cmFuc2ZlciBhbm90aGVyCisJICogQVNDT05GIENodW5rLCBpdCBNVVNUIHdhaXQgdW50aWwgdGhlIEFTQ09ORi1BQ0sgQ2h1bmsKKwkgKiByZXR1cm5zIGZyb20gdGhlIHByZXZpb3VzIEFTQ09ORiBDaHVuayBiZWZvcmUgc2VuZGluZyBhCisJICogc3Vic2VxdWVudCBBU0NPTkYuIE5vdGUgdGhpcyByZXN0cmljdGlvbiBiaW5kcyBlYWNoIHNpZGUsCisJICogc28gYXQgYW55IHRpbWUgdHdvIEFTQ09ORiBtYXkgYmUgaW4tdHJhbnNpdCBvbiBhbnkgZ2l2ZW4KKwkgKiBhc3NvY2lhdGlvbiAob25lIHNlbnQgZnJvbSBlYWNoIGVuZHBvaW50KS4KKwkgKgorCSAqIFtUaGlzIGlzIG91ciBvbmUtYW5kLW9ubHktb25lIEFTQ09ORiBpbiBmbGlnaHQuICBJZiB3ZSBkbworCSAqIG5vdCBoYXZlIGFuIEFTQ09ORiBpbiBmbGlnaHQsIHRoaXMgaXMgTlVMTC5dCisJICovCisJc3RydWN0IHNjdHBfY2h1bmsgKmFkZGlwX2xhc3RfYXNjb25mOworCisJLyogQURESVAgU2VjdGlvbiA0LjIgVXBvbiByZWNlcHRpb24gb2YgYW4gQVNDT05GIENodW5rLgorCSAqCisJICogSU1QTEVNRU5UQVRJT04gTk9URTogQXMgYW4gb3B0aW1pemF0aW9uIGEgcmVjZWl2ZXIgbWF5IHdpc2gKKwkgKiB0byBzYXZlIHRoZSBsYXN0IEFTQ09ORi1BQ0sgZm9yIHNvbWUgcHJlZGV0ZXJtaW5lZCBwZXJpb2QKKwkgKiBvZiB0aW1lIGFuZCBpbnN0ZWFkIG9mIHJlLXByb2Nlc3NpbmcgdGhlIEFTQ09ORiAod2l0aCB0aGUKKwkgKiBzYW1lIHNlcmlhbCBudW1iZXIpIGl0IG1heSBqdXN0IHJlLXRyYW5zbWl0IHRoZQorCSAqIEFTQ09ORi1BQ0suIEl0IG1heSB3aXNoIHRvIHVzZSB0aGUgYXJyaXZhbCBvZiBhIG5ldyBzZXJpYWwKKwkgKiBudW1iZXIgdG8gZGlzY2FyZCB0aGUgcHJldmlvdXNseSBzYXZlZCBBU0NPTkYtQUNLIG9yIGFueQorCSAqIG90aGVyIG1lYW5zIGl0IG1heSBjaG9vc2UgdG8gZXhwaXJlIHRoZSBzYXZlZCBBU0NPTkYtQUNLLgorCSAqCisJICogW1RoaXMgaXMgb3VyIHNhdmVkIEFTQ09ORi1BQ0suICBXZSBpbnZhbGlkYXRlIGl0IHdoZW4gYSBuZXcKKwkgKiBBU0NPTkYgc2VyaWFsIG51bWJlciBhcnJpdmVzLl0KKwkgKi8KKwlzdHJ1Y3Qgc2N0cF9jaHVuayAqYWRkaXBfbGFzdF9hc2NvbmZfYWNrOworCisJLyogVGhlc2UgQVNDT05GIGNodW5rcyBhcmUgd2FpdGluZyB0byBiZSBzZW50LgorCSAqCisJICogVGhlc2UgY2h1bmFrcyBjYW4ndCBiZSBwdXNoZWQgdG8gb3V0cXVldWUgdW50aWwgcmVjZWl2aW5nCisJICogQVNDT05GX0FDSyBmb3IgdGhlIHByZXZpb3VzIEFTQ09ORiBpbmRpY2F0ZWQgYnkKKwkgKiBhZGRpcF9sYXN0X2FzY29uZiwgc28gYXMgdG8gZ3VhcmFudGVlIHRoYXQgb25seSBvbmUgQVNDT05GCisJICogaXMgaW4gZmxpZ2h0IGF0IGFueSB0aW1lLgorCSAqCisJICogQURESVAgU2VjdGlvbiA0LjEuMSBDb25nZXN0aW9uIENvbnRyb2wgb2YgQVNDT05GIENodW5rcworCSAqCisJICogSW4gZGVmaW5pbmcgdGhlIEFTQ09ORiBDaHVuayB0cmFuc2ZlciBwcm9jZWR1cmVzLCBpdCBpcworCSAqIGVzc2VudGlhbCB0aGF0IHRoZXNlIHRyYW5zZmVycyBNVVNUIE5PVCBjYXVzZSBjb25nZXN0aW9uCisJICogd2l0aGluIHRoZSBuZXR3b3JrLglUbyBhY2hpZXZlIHRoaXMsIHdlIHBsYWNlIHRoZXNlCisJICogcmVzdHJpY3Rpb25zIG9uIHRoZSB0cmFuc2ZlciBvZiBBU0NPTkYgQ2h1bmtzOgorCSAqCisJICogUjEpIE9uZSBhbmQgb25seSBvbmUgQVNDT05GIENodW5rIE1BWSBiZSBpbiB0cmFuc2l0IGFuZAorCSAqIHVuYWNrbm93bGVkZ2VkIGF0IGFueSBvbmUgdGltZS4gIElmIGEgc2VuZGVyLCBhZnRlciBzZW5kaW5nCisJICogYW4gQVNDT05GIGNodW5rLCBkZWNpZGVzIGl0IG5lZWRzIHRvIHRyYW5zZmVyIGFub3RoZXIKKwkgKiBBU0NPTkYgQ2h1bmssIGl0IE1VU1Qgd2FpdCB1bnRpbCB0aGUgQVNDT05GLUFDSyBDaHVuaworCSAqIHJldHVybnMgZnJvbSB0aGUgcHJldmlvdXMgQVNDT05GIENodW5rIGJlZm9yZSBzZW5kaW5nIGEKKwkgKiBzdWJzZXF1ZW50IEFTQ09ORi4gTm90ZSB0aGlzIHJlc3RyaWN0aW9uIGJpbmRzIGVhY2ggc2lkZSwKKwkgKiBzbyBhdCBhbnkgdGltZSB0d28gQVNDT05GIG1heSBiZSBpbi10cmFuc2l0IG9uIGFueSBnaXZlbgorCSAqIGFzc29jaWF0aW9uIChvbmUgc2VudCBmcm9tIGVhY2ggZW5kcG9pbnQpLgorCSAqCisJICoKKwkgKiBbSSByZWFsbHkgdGhpbmsgdGhpcyBpcyBFWEFDVExZIHRoZSBzb3J0IG9mIGludGVsbGlnZW5jZQorCSAqICB3aGljaCBhbHJlYWR5IHJlc2lkZXMgaW4gc2N0cF9vdXRxLgkgUGxlYXNlIG1vdmUgdGhpcworCSAqICBxdWV1ZSBhbmQgaXRzIHN1cHBvcnRpbmcgbG9naWMgZG93biB0aGVyZS4JLS1waWdneV0KKwkgKi8KKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGFkZGlwX2NodW5rczsKKworCS8qIEFERElQIFNlY3Rpb24gNC4xIEFTQ09ORiBDaHVuayBQcm9jZWR1cmVzCisJICoKKwkgKiBBMikgQSBzZXJpYWwgbnVtYmVyIHNob3VsZCBiZSBhc3NpZ25lZCB0byB0aGUgQ2h1bmsuIFRoZQorCSAqIHNlcmlhbCBudW1iZXIgU0hPVUxEIGJlIGEgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nCisJICogbnVtYmVyLiBUaGUgc2VyaWFsIG51bWJlciBTSE9VTEQgYmUgaW5pdGlhbGl6ZWQgYXQKKwkgKiB0aGUgc3RhcnQgb2YgdGhlIGFzc29jaWF0aW9uIHRvIHRoZSBzYW1lIHZhbHVlIGFzIHRoZQorCSAqIEluaXRpYWwgVFNOIGFuZCBldmVyeSB0aW1lIGEgbmV3IEFTQ09ORiBjaHVuayBpcyBjcmVhdGVkCisJICogaXQgaXMgaW5jcmVtZW50ZWQgYnkgb25lIGFmdGVyIGFzc2lnbmluZyB0aGUgc2VyaWFsIG51bWJlcgorCSAqIHRvIHRoZSBuZXdseSBjcmVhdGVkIGNodW5rLgorCSAqCisJICogQURESVAKKwkgKiAzLjEuMSAgQWRkcmVzcy9TdHJlYW0gQ29uZmlndXJhdGlvbiBDaGFuZ2UgQ2h1bmsgKEFTQ09ORikKKwkgKgorCSAqIFNlcmlhbCBOdW1iZXIgOiAzMiBiaXRzICh1bnNpZ25lZCBpbnRlZ2VyKQorCSAqCisJICogVGhpcyB2YWx1ZSByZXByZXNlbnRzIGEgU2VyaWFsIE51bWJlciBmb3IgdGhlIEFTQ09ORgorCSAqIENodW5rLiBUaGUgdmFsaWQgcmFuZ2Ugb2YgU2VyaWFsIE51bWJlciBpcyBmcm9tIDAgdG8KKwkgKiA0Mjk0OTY3Mjk1ICgyXjMyIC0gMSkuICBTZXJpYWwgTnVtYmVycyB3cmFwIGJhY2sgdG8gMAorCSAqIGFmdGVyIHJlYWNoaW5nIDQyOTQ5NjcyOTUuCisJICovCisJX191MzIgYWRkaXBfc2VyaWFsOworCisJLyogTmVlZCB0byBzZW5kIGFuIEVDTkUgQ2h1bms/ICovCisJY2hhciBuZWVkX2VjbmU7CisKKwkvKiBJcyBpdCBhIHRlbXBvcmFyeSBhc3NvY2lhdGlvbj8gKi8KKwljaGFyIHRlbXA7Cit9OworCisKKy8qIEFuIGV5ZWNhdGNoZXIgZm9yIGRldGVybWluaW5nIGlmIHdlIGFyZSByZWFsbHkgbG9va2luZyBhdCBhbgorICogYXNzb2NpYXRpb24gZGF0YSBzdHJ1Y3R1cmUuCisgKi8KK2VudW0geworCVNDVFBfQVNTT0NfRVlFQ0FUQ0hFUiA9IDB4YTU1MGMxMjMsCit9OworCisvKiBSZWNvdmVyIHRoZSBvdXR0ZXIgYXNzb2NpYXRpb24gc3RydWN0dXJlLiAqLworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqc2N0cF9hc3NvYyhzdHJ1Y3Qgc2N0cF9lcF9jb21tb24gKmJhc2UpCit7CisJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7CisKKwlhc29jID0gY29udGFpbmVyX29mKGJhc2UsIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uLCBiYXNlKTsKKwlyZXR1cm4gYXNvYzsKK30KKworLyogVGhlc2UgYXJlIGZ1bmN0aW9uIHNpZ25hdHVyZXMgZm9yIG1hbmlwdWxhdGluZyBhc3NvY2lhdGlvbnMuCSAqLworCisKK3N0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICoKK3NjdHBfYXNzb2NpYXRpb25fbmV3KGNvbnN0IHN0cnVjdCBzY3RwX2VuZHBvaW50ICosIGNvbnN0IHN0cnVjdCBzb2NrICosCisJCSAgICAgc2N0cF9zY29wZV90IHNjb3BlLCBpbnQgZ2ZwKTsKK3ZvaWQgc2N0cF9hc3NvY2lhdGlvbl9mcmVlKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICopOwordm9pZCBzY3RwX2Fzc29jaWF0aW9uX3B1dChzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqKTsKK3ZvaWQgc2N0cF9hc3NvY2lhdGlvbl9ob2xkKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICopOworCitzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnNjdHBfYXNzb2NfY2hvb3NlX3NodXRkb3duX3RyYW5zcG9ydCgKKwlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqKTsKK3ZvaWQgc2N0cF9hc3NvY191cGRhdGVfcmV0cmFuX3BhdGgoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKik7CitzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnNjdHBfYXNzb2NfbG9va3VwX3BhZGRyKGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICosCisJCQkJCSAgY29uc3QgdW5pb24gc2N0cF9hZGRyICopOworaW50IHNjdHBfYXNzb2NfbG9va3VwX2xhZGRyKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAorCQkJICAgIGNvbnN0IHVuaW9uIHNjdHBfYWRkciAqbGFkZHIpOworc3RydWN0IHNjdHBfdHJhbnNwb3J0ICpzY3RwX2Fzc29jX2FkZF9wZWVyKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICosCisJCQkJICAgICBjb25zdCB1bmlvbiBzY3RwX2FkZHIgKmFkZHJlc3MsCisJCQkJICAgICBjb25zdCBpbnQgZ2ZwKTsKK3ZvaWQgc2N0cF9hc3NvY19kZWxfcGVlcihzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKKwkJCSBjb25zdCB1bmlvbiBzY3RwX2FkZHIgKmFkZHIpOwordm9pZCBzY3RwX2Fzc29jX2NvbnRyb2xfdHJhbnNwb3J0KHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICosCisJCQkJICBzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKiwKKwkJCQkgIHNjdHBfdHJhbnNwb3J0X2NtZF90LCBzY3RwX3NuX2Vycm9yX3QpOworc3RydWN0IHNjdHBfdHJhbnNwb3J0ICpzY3RwX2Fzc29jX2xvb2t1cF90c24oc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKiwgX191MzIpOworc3RydWN0IHNjdHBfdHJhbnNwb3J0ICpzY3RwX2Fzc29jX2lzX21hdGNoKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICosCisJCQkJCSAgIGNvbnN0IHVuaW9uIHNjdHBfYWRkciAqLAorCQkJCQkgICBjb25zdCB1bmlvbiBzY3RwX2FkZHIgKik7Cit2b2lkIHNjdHBfYXNzb2NfbWlncmF0ZShzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqLCBzdHJ1Y3Qgc29jayAqKTsKK3ZvaWQgc2N0cF9hc3NvY191cGRhdGUoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKm9sZCwKKwkJICAgICAgIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICpuZXcpOworCitfX3UzMiBzY3RwX2Fzc29jaWF0aW9uX2dldF9uZXh0X3RzbihzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqKTsKKwordm9pZCBzY3RwX2Fzc29jX3N5bmNfcG10dShzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqKTsKK3ZvaWQgc2N0cF9hc3NvY19yd25kX2luY3JlYXNlKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICosIHVuc2lnbmVkKTsKK3ZvaWQgc2N0cF9hc3NvY19yd25kX2RlY3JlYXNlKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICosIHVuc2lnbmVkKTsKK3ZvaWQgc2N0cF9hc3NvY19zZXRfcHJpbWFyeShzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqLAorCQkJICAgIHN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqKTsKK2ludCBzY3RwX2Fzc29jX3NldF9iaW5kX2FkZHJfZnJvbV9lcChzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqLCBpbnQpOworaW50IHNjdHBfYXNzb2Nfc2V0X2JpbmRfYWRkcl9mcm9tX2Nvb2tpZShzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqLAorCQkJCQkgc3RydWN0IHNjdHBfY29va2llKiwgaW50IGdmcCk7CisKK2ludCBzY3RwX2NtcF9hZGRyX2V4YWN0KGNvbnN0IHVuaW9uIHNjdHBfYWRkciAqc3MxLAorCQkJY29uc3QgdW5pb24gc2N0cF9hZGRyICpzczIpOworc3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfZ2V0X2VjbmVfcHJlcGVuZChzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyk7CisKKy8qIEEgY29udmVuaWVuY2Ugc3RydWN0dXJlIHRvIHBhcnNlIG91dCBTQ1RQIHNwZWNpZmljIENNU0dzLiAqLwordHlwZWRlZiBzdHJ1Y3Qgc2N0cF9jbXNncyB7CisJc3RydWN0IHNjdHBfaW5pdG1zZyAqaW5pdDsKKwlzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvICppbmZvOworfSBzY3RwX2Ntc2dzX3Q7CisKKy8qIFN0cnVjdHVyZSBmb3IgdHJhY2tpbmcgbWVtb3J5IG9iamVjdHMgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwljaGFyICpsYWJlbDsKKwlhdG9taWNfdCAqY291bnRlcjsKK30gc2N0cF9kYmdfb2JqY250X2VudHJ5X3Q7CisKKyNlbmRpZiAvKiBfX3NjdHBfc3RydWN0c19oX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NjdHAvdHNubWFwLmggYi9pbmNsdWRlL25ldC9zY3RwL3Rzbm1hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyMTk0N2QKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9zY3RwL3Rzbm1hcC5oCkBAIC0wLDAgKzEsMjA3IEBACisvKiBTQ1RQIGtlcm5lbCByZWZlcmVuY2UgSW1wbGVtZW50YXRpb24KKyAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDEsIDIwMDQKKyAqIENvcHlyaWdodCAoYykgMTk5OS0yMDAwIENpc2NvLCBJbmMuCisgKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMSBNb3Rvcm9sYSwgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDAxIEludGVsIENvcnAuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFNDVFAga2VybmVsIHJlZmVyZW5jZSBJbXBsZW1lbnRhdGlvbgorICoKKyAqIFRoZXNlIGFyZSB0aGUgZGVmaW5pdGlvbnMgbmVlZGVkIGZvciB0aGUgdHNubWFwIHR5cGUuICBUaGUgdHNubWFwIGlzIHVzZWQKKyAqIHRvIHRyYWNrIG91dCBvZiBvcmRlciBUU05zIHJlY2VpdmVkLgorICoKKyAqIFRoZSBTQ1RQIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBpcyBmcmVlIHNvZnR3YXJlOworICogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YKKyAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoZSBTQ1RQIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0CisgKiB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQKKyAqICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCBHTlUgQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICogUGxlYXNlIHNlbmQgYW55IGJ1ZyByZXBvcnRzIG9yIGZpeGVzIHlvdSBtYWtlIHRvIHRoZQorICogZW1haWwgYWRkcmVzcyhlcyk6CisgKiAgICBsa3NjdHAgZGV2ZWxvcGVycyA8bGtzY3RwLWRldmVsb3BlcnNAbGlzdHMuc291cmNlZm9yZ2UubmV0PgorICoKKyAqIE9yIHN1Ym1pdCBhIGJ1ZyByZXBvcnQgdGhyb3VnaCB0aGUgZm9sbG93aW5nIHdlYnNpdGU6CisgKiAgICBodHRwOi8vd3d3LnNmLm5ldC9wcm9qZWN0cy9sa3NjdHAKKyAqCisgKiBXcml0dGVuIG9yIG1vZGlmaWVkIGJ5OgorICogICBKb24gR3JpbW0gICAgICAgICAgICAgPGpncmltbUB1cy5pYm0uY29tPgorICogICBMYSBNb250ZSBILlAuIFlhcnJvbGwgPHBpZ2d5QGFjbS5vcmc+CisgKiAgIEthcmwgS251dHNvbiAgICAgICAgICA8a2FybEBhdGhlbmEuY2hpY2Fnby5pbC51cz4KKyAqICAgU3JpZGhhciBTYW11ZHJhbGEgICAgIDxzcmlAdXMuaWJtLmNvbT4KKyAqCisgKiBBbnkgYnVncyByZXBvcnRlZCBnaXZlbiB0byB1cyB3ZSB3aWxsIHRyeSB0byBmaXguLi4gYW55IGZpeGVzIHNoYXJlZCB3aWxsCisgKiBiZSBpbmNvcnBvcmF0ZWQgaW50byB0aGUgbmV4dCBTQ1RQIHJlbGVhc2UuCisgKi8KKyNpbmNsdWRlIDxuZXQvc2N0cC9jb25zdGFudHMuaD4KKworI2lmbmRlZiBfX3NjdHBfdHNubWFwX2hfXworI2RlZmluZSBfX3NjdHBfdHNubWFwX2hfXworCisvKiBSRkMgMjk2MCAxMi4yIFBhcmFtZXRlcnMgbmVjZXNzYXJ5IHBlciBhc3NvY2lhdGlvbiAoaS5lLiB0aGUgVENCKQorICogTWFwcGluZyAgQW4gYXJyYXkgb2YgYml0cyBvciBieXRlcyBpbmRpY2F0aW5nIHdoaWNoIG91dCBvZgorICogQXJyYXkgICAgb3JkZXIgVFNOJ3MgaGF2ZSBiZWVuIHJlY2VpdmVkIChyZWxhdGl2ZSB0byB0aGUKKyAqICAgICAgICAgIExhc3QgUmN2ZCBUU04pLiBJZiBubyBnYXBzIGV4aXN0LCBpLmUuIG5vIG91dCBvZgorICogICAgICAgICAgb3JkZXIgcGFja2V0cyBoYXZlIGJlZW4gcmVjZWl2ZWQsIHRoaXMgYXJyYXkKKyAqICAgICAgICAgIHdpbGwgYmUgc2V0IHRvIGFsbCB6ZXJvLiBUaGlzIHN0cnVjdHVyZSBtYXkgYmUKKyAqICAgICAgICAgIGluIHRoZSBmb3JtIG9mIGEgY2lyY3VsYXIgYnVmZmVyIG9yIGJpdCBhcnJheS4KKyAqLworc3RydWN0IHNjdHBfdHNubWFwIHsKKwkvKiBUaGlzIGFycmF5IGNvdW50cyB0aGUgbnVtYmVyIG9mIGNodW5rcyB3aXRoIGVhY2ggVFNOLgorCSAqIEl0IHBvaW50cyBhdCBvbmUgb2YgdGhlIHR3byBidWZmZXJzIHdpdGggd2hpY2ggd2Ugd2lsbAorCSAqIHBpbmctcG9uZyBiZXR3ZWVuLgorCSAqLworCV9fdTggKnRzbl9tYXA7CisKKwkvKiBUaGlzIG1hcmtzIHRoZSB0c24gd2hpY2ggb3ZlcmZsb3dzIHRoZSB0c25fbWFwLCB3aGVuIHRoZQorCSAqIGN1bXVsYXRpdmUgYWNrIHBvaW50IHJlYWNoZXMgdGhpcyBwb2ludCB3ZSBrbm93IHdlIGNhbiBzd2l0Y2gKKwkgKiBtYXBzICh0c25fbWFwIGFuZCBvdmVyZmxvd19tYXAgc3dhcCkuCisJICovCisJX191MzIgb3ZlcmZsb3dfdHNuOworCisJLyogVGhpcyBpcyB0aGUgb3ZlcmZsb3cgYXJyYXkgZm9yIHRzbl9tYXAuCisJICogSXQgcG9pbnRzIGF0IG9uZSBvZiB0aGUgb3RoZXIgcGluZy1wb25nIGJ1ZmZlcnMuCisJICovCisJX191OCAqb3ZlcmZsb3dfbWFwOworCisJLyogVGhpcyBpcyB0aGUgVFNOIGF0IHRzbl9tYXBbMF0uICAqLworCV9fdTMyIGJhc2VfdHNuOworCisJLyogTGFzdCBSY3ZkICAgOiBUaGlzIGlzIHRoZSBsYXN0IFRTTiByZWNlaXZlZCBpbgorCSAqIFRTTgkgICAgICAgOiBzZXF1ZW5jZS4gVGhpcyB2YWx1ZSBpcyBzZXQgaW5pdGlhbGx5IGJ5CisJICogICAgICAgICAgICAgOiB0YWtpbmcgdGhlIHBlZXIncyBJbml0aWFsIFRTTiwgcmVjZWl2ZWQgaW4KKwkgKiAgICAgICAgICAgICA6IHRoZSBJTklUIG9yIElOSVQgQUNLIGNodW5rLCBhbmQgc3VidHJhY3RpbmcKKwkgKiAgICAgICAgICAgICA6IG9uZSBmcm9tIGl0LgorCSAqCisJICogVGhyb3VnaG91dCBtb3N0IG9mIHRoZSBzcGVjaWZpY2F0aW9uIHRoaXMgaXMgY2FsbGVkIHRoZQorCSAqICJDdW11bGF0aXZlIFRTTiBBQ0sgUG9pbnQiLiAgSW4gdGhpcyBjYXNlLCB3ZQorCSAqIGlnbm9yZSB0aGUgYWR2aWNlIGluIDEyLjIgaW4gZmF2b3VyIG9mIHRoZSB0ZXJtCisJICogdXNlZCBpbiB0aGUgYnVsayBvZiB0aGUgdGV4dC4KKwkgKi8KKwlfX3UzMiBjdW11bGF0aXZlX3Rzbl9hY2tfcG9pbnQ7CisKKwkvKiBUaGlzIGlzIHRoZSBtaW5pbXVtIG51bWJlciBvZiBUU05zIHdlIGNhbiB0cmFjay4gIFRoaXMgY29ycmVzcG9uZHMKKwkgKiB0byB0aGUgc2l6ZSBvZiB0c25fbWFwLiAgIE5vdGU6IHRoZSBvdmVyZmxvd19tYXAgYWxsb3dzIHVzIHRvCisJICogcG90ZW50aWFsbHkgdHJhY2sgbW9yZSB0aGFuIHRoaXMgcXVhbnRpdHkuCisJICovCisJX191MTYgbGVuOworCisJLyogVGhpcyBpcyB0aGUgaGlnaGVzdCBUU04gd2UndmUgbWFya2VkLiAgKi8KKwlfX3UzMiBtYXhfdHNuX3NlZW47CisKKwkvKiBEYXRhIGNodW5rcyBwZW5kaW5nIHJlY2VpcHQuIHVzZWQgYnkgU0NUUF9TVEFUVVMgc29ja29wdCAqLworCV9fdTE2IHBlbmRpbmdfZGF0YTsKKworCS8qIFJlY29yZCBkdXBsaWNhdGUgVFNOcyBoZXJlLiAgV2UgY2xlYXIgdGhpcyBhZnRlcgorCSAqIGV2ZXJ5IFNBQ0suICBTdG9yZSB1cCB0byBTQ1RQX01BWF9EVVBfVFNOUyB3b3J0aCBvZgorCSAqIGluZm9ybWF0aW9uLgorCSAqLworCV9fdTMyIGR1cF90c25zW1NDVFBfTUFYX0RVUF9UU05TXTsKKwlfX3UxNiBudW1fZHVwX3RzbnM7CisKKwkvKiBSZWNvcmQgZ2FwIGFjayBibG9jayBpbmZvcm1hdGlvbiBoZXJlLiAgKi8KKwlzdHJ1Y3Qgc2N0cF9nYXBfYWNrX2Jsb2NrIGdhYnNbU0NUUF9NQVhfR0FCU107CisKKwlpbnQgbWFsbG9jZWQ7CisKKwlfX3U4IHJhd19tYXBbMF07Cit9OworCitzdHJ1Y3Qgc2N0cF90c25tYXBfaXRlciB7CisJX191MzIgc3RhcnQ7Cit9OworCisvKiBUaGlzIG1hY3JvIGFzc2lzdHMgaW4gY3JlYXRpb24gb2YgZXh0ZXJuYWwgc3RvcmFnZSBmb3IgdmFyaWFibGUgbGVuZ3RoCisgKiBpbnRlcm5hbCBidWZmZXJzLiAgV2UgZG91YmxlIGFsbG9jYXRlIHNvIHRoZSBvdmVyZmxvdyBtYXAgd29ya3MuCisgKi8KKyNkZWZpbmUgc2N0cF90c25tYXBfc3RvcmFnZV9zaXplKGNvdW50KSAoc2l6ZW9mKF9fdTgpICogKGNvdW50KSAqIDIpCisKKy8qIEluaXRpYWxpemUgYSBibG9jayBvZiBtZW1vcnkgYXMgYSB0c25tYXAuICAqLworc3RydWN0IHNjdHBfdHNubWFwICpzY3RwX3Rzbm1hcF9pbml0KHN0cnVjdCBzY3RwX3Rzbm1hcCAqLCBfX3UxNiBsZW4sCisJCQkJICAgICBfX3UzMiBpbml0aWFsX3Rzbik7CisKKy8qIFRlc3QgdGhlIHRyYWNraW5nIHN0YXRlIG9mIHRoaXMgVFNOLgorICogUmV0dXJuczoKKyAqICAgMCBpZiB0aGUgVFNOIGhhcyBub3QgeWV0IGJlZW4gc2VlbgorICogID4wIGlmIHRoZSBUU04gaGFzIGJlZW4gc2VlbiAoZHVwbGljYXRlKQorICogIDwwIGlmIHRoZSBUU04gaXMgaW52YWxpZCAodG9vIGxhcmdlIHRvIHRyYWNrKQorICovCitpbnQgc2N0cF90c25tYXBfY2hlY2soY29uc3Qgc3RydWN0IHNjdHBfdHNubWFwICosIF9fdTMyIHRzbik7CisKKy8qIE1hcmsgdGhpcyBUU04gYXMgc2Vlbi4gICovCit2b2lkIHNjdHBfdHNubWFwX21hcmsoc3RydWN0IHNjdHBfdHNubWFwICosIF9fdTMyIHRzbik7CisKKy8qIE1hcmsgdGhpcyBUU04gYW5kIGFsbCBsb3dlciBhcyBzZWVuLiAqLwordm9pZCBzY3RwX3Rzbm1hcF9za2lwKHN0cnVjdCBzY3RwX3Rzbm1hcCAqbWFwLCBfX3UzMiB0c24pOworCisvKiBSZXRyaWV2ZSB0aGUgQ3VtdWxhdGl2ZSBUU04gQUNLIFBvaW50LiAgKi8KK3N0YXRpYyBpbmxpbmUgX191MzIgc2N0cF90c25tYXBfZ2V0X2N0c24oY29uc3Qgc3RydWN0IHNjdHBfdHNubWFwICptYXApCit7CisJcmV0dXJuIG1hcC0+Y3VtdWxhdGl2ZV90c25fYWNrX3BvaW50OworfQorCisvKiBSZXRyaWV2ZSB0aGUgaGlnaGVzdCBUU04gd2UndmUgc2Vlbi4gICovCitzdGF0aWMgaW5saW5lIF9fdTMyIHNjdHBfdHNubWFwX2dldF9tYXhfdHNuX3NlZW4oY29uc3Qgc3RydWN0IHNjdHBfdHNubWFwICptYXApCit7CisJcmV0dXJuIG1hcC0+bWF4X3Rzbl9zZWVuOworfQorCisvKiBIb3cgbWFueSBkdXBsaWNhdGUgVFNOcyBhcmUgc3RvcmVkPyAqLworc3RhdGljIGlubGluZSBfX3UxNiBzY3RwX3Rzbm1hcF9udW1fZHVwcyhzdHJ1Y3Qgc2N0cF90c25tYXAgKm1hcCkKK3sKKwlyZXR1cm4gbWFwLT5udW1fZHVwX3RzbnM7Cit9CisKKy8qIFJldHVybiBwb2ludGVyIHRvIGR1cGxpY2F0ZSB0c24gYXJyYXkgYXMgbmVlZGVkIGJ5IFNBQ0suICovCitzdGF0aWMgaW5saW5lIF9fdTMyICpzY3RwX3Rzbm1hcF9nZXRfZHVwcyhzdHJ1Y3Qgc2N0cF90c25tYXAgKm1hcCkKK3sKKwltYXAtPm51bV9kdXBfdHNucyA9IDA7CisJcmV0dXJuIG1hcC0+ZHVwX3RzbnM7Cit9CisKKy8qIEhvdyBtYW55IGdhcCBhY2sgYmxvY2tzIGRvIHdlIGhhdmUgcmVjb3JkZWQ/ICovCitfX3UxNiBzY3RwX3Rzbm1hcF9udW1fZ2FicyhzdHJ1Y3Qgc2N0cF90c25tYXAgKm1hcCk7CisKKy8qIFJlZnJlc2ggdGhlIGNvdW50IG9uIHBlbmRpbmcgZGF0YS4gKi8KK19fdTE2IHNjdHBfdHNubWFwX3BlbmRpbmcoc3RydWN0IHNjdHBfdHNubWFwICptYXApOworCisvKiBSZXR1cm4gcG9pbnRlciB0byBnYXAgYWNrIGJsb2NrcyBhcyBuZWVkZWQgYnkgU0FDSy4gKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNjdHBfZ2FwX2Fja19ibG9jayAqc2N0cF90c25tYXBfZ2V0X2dhYnMoc3RydWN0IHNjdHBfdHNubWFwICptYXApCit7CisJcmV0dXJuIG1hcC0+Z2FiczsKK30KKworLyogSXMgdGhlcmUgYSBnYXAgaW4gdGhlIFRTTiBtYXA/ICAqLworc3RhdGljIGlubGluZSBpbnQgc2N0cF90c25tYXBfaGFzX2dhcChjb25zdCBzdHJ1Y3Qgc2N0cF90c25tYXAgKm1hcCkKK3sKKwlpbnQgaGFzX2dhcDsKKworCWhhc19nYXAgPSAobWFwLT5jdW11bGF0aXZlX3Rzbl9hY2tfcG9pbnQgIT0gbWFwLT5tYXhfdHNuX3NlZW4pOworCXJldHVybiBoYXNfZ2FwOworfQorCisvKiBNYXJrIGEgZHVwbGljYXRlIFRTTi4gIE5vdGU6ICBsaW1pdCB0aGUgc3RvcmFnZSBvZiBkdXBsaWNhdGUgVFNOCisgKiBpbmZvcm1hdGlvbi4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHNjdHBfdHNubWFwX21hcmtfZHVwKHN0cnVjdCBzY3RwX3Rzbm1hcCAqbWFwLCBfX3UzMiB0c24pCit7CisJaWYgKG1hcC0+bnVtX2R1cF90c25zIDwgU0NUUF9NQVhfRFVQX1RTTlMpCisJCW1hcC0+ZHVwX3RzbnNbbWFwLT5udW1fZHVwX3RzbnMrK10gPSBodG9ubCh0c24pOworfQorCisvKiBSZW5lZ2UgYSBUU04gdGhhdCB3YXMgc2Vlbi4gICovCit2b2lkIHNjdHBfdHNubWFwX3JlbmVnZShzdHJ1Y3Qgc2N0cF90c25tYXAgKiwgX191MzIgdHNuKTsKKworLyogSXMgdGhlcmUgYSBnYXAgaW4gdGhlIFRTTiBtYXA/ICovCitpbnQgc2N0cF90c25tYXBfaGFzX2dhcChjb25zdCBzdHJ1Y3Qgc2N0cF90c25tYXAgKik7CisKKyNlbmRpZiAvKiBfX3NjdHBfdHNubWFwX2hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2N0cC91bHBldmVudC5oIGIvaW5jbHVkZS9uZXQvc2N0cC91bHBldmVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwMTlkODMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9zY3RwL3VscGV2ZW50LmgKQEAgLTAsMCArMSwxNjIgQEAKKy8qIFNDVFAga2VybmVsIHJlZmVyZW5jZSBJbXBsZW1lbnRhdGlvbgorICogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwMSwgMjAwNAorICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDAgQ2lzY28sIEluYy4KKyAqIENvcHlyaWdodCAoYykgMTk5OS0yMDAxIE1vdG9yb2xhLCBJbmMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoYykgMjAwMSBOb2tpYSwgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDAxIExhIE1vbnRlIEguUC4gWWFycm9sbAorICoKKyAqIFRoZXNlIGFyZSB0aGUgZGVmaW5pdGlvbnMgbmVlZGVkIGZvciB0aGUgc2N0cF91bHBldmVudCB0eXBlLiAgVGhlCisgKiBzY3RwX3VscGV2ZW50IHR5cGUgaXMgdXNlZCB0byBjYXJyeSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzdGF0ZSBtYWNoaW5lCisgKiB1cHdhcmRzIHRvIHRoZSBVTFAuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFNDVFAga2VybmVsIHJlZmVyZW5jZSBJbXBsZW1lbnRhdGlvbgorICoKKyAqIFRoZSBTQ1RQIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBpcyBmcmVlIHNvZnR3YXJlOworICogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YKKyAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoZSBTQ1RQIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0CisgKiB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQKKyAqICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCBHTlUgQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICogUGxlYXNlIHNlbmQgYW55IGJ1ZyByZXBvcnRzIG9yIGZpeGVzIHlvdSBtYWtlIHRvIHRoZQorICogZW1haWwgYWRkcmVzcyhlcyk6CisgKiAgICBsa3NjdHAgZGV2ZWxvcGVycyA8bGtzY3RwLWRldmVsb3BlcnNAbGlzdHMuc291cmNlZm9yZ2UubmV0PgorICoKKyAqIE9yIHN1Ym1pdCBhIGJ1ZyByZXBvcnQgdGhyb3VnaCB0aGUgZm9sbG93aW5nIHdlYnNpdGU6CisgKiAgICBodHRwOi8vd3d3LnNmLm5ldC9wcm9qZWN0cy9sa3NjdHAKKyAqCisgKiBXcml0dGVuIG9yIG1vZGlmaWVkIGJ5OgorICogICBKb24gR3JpbW0gICAgICAgICAgICAgPGpncmltbUB1cy5pYm0uY29tPgorICogICBMYSBNb250ZSBILlAuIFlhcnJvbGwgPHBpZ2d5QGFjbS5vcmc+CisgKiAgIEthcmwgS251dHNvbiAgICAgICAgICA8a2FybEBhdGhlbmEuY2hpY2Fnby5pbC51cz4KKyAqICAgU3JpZGhhciBTYW11ZHJhbGEgICAgIDxzcmlAdXMuaWJtLmNvbT4KKyAqCisgKiBBbnkgYnVncyByZXBvcnRlZCBnaXZlbiB0byB1cyB3ZSB3aWxsIHRyeSB0byBmaXguLi4gYW55IGZpeGVzIHNoYXJlZCB3aWxsCisgKiBiZSBpbmNvcnBvcmF0ZWQgaW50byB0aGUgbmV4dCBTQ1RQIHJlbGVhc2UuCisgKi8KKworI2lmbmRlZiBfX3NjdHBfdWxwZXZlbnRfaF9fCisjZGVmaW5lIF9fc2N0cF91bHBldmVudF9oX18KKworLyogQSBzdHJ1Y3R1cmUgdG8gY2FycnkgaW5mb3JtYXRpb24gdG8gdGhlIFVMUCAoZS5nLiBTb2NrZXRzIEFQSSkgKi8KKy8qIFdhcm5pbmc6IFRoaXMgc2l0cyBpbnNpZGUgYW4gc2tiLmNiW10gYXJlYS4gIEJlIHZlcnkgY2FyZWZ1bCBvZgorICogZ3Jvd2luZyB0aGlzIHN0cnVjdHVyZSBhcyBpdCBpcyBhdCB0aGUgbWF4aW11bSBsaW1pdCBub3cuCisgKi8KK3N0cnVjdCBzY3RwX3VscGV2ZW50IHsKKwlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKKwlfX3UxNiBzdHJlYW07CisJX191MTYgc3NuOworCV9fdTE2IGZsYWdzOworCV9fdTMyIHBwaWQ7CisJX191MzIgdHNuOworCV9fdTMyIGN1bXRzbjsKKwlpbnQgbXNnX2ZsYWdzOworCWludCBpaWY7Cit9OworCisvKiBSZXRyaWV2ZSB0aGUgc2tiIHRoaXMgZXZlbnQgc2l0cyBpbnNpZGUgb2YuICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpzY3RwX2V2ZW50MnNrYihzdHJ1Y3Qgc2N0cF91bHBldmVudCAqZXYpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZigodm9pZCAqKWV2LCBzdHJ1Y3Qgc2tfYnVmZiwgY2IpOworfQorCisvKiBSZXRyaWV2ZSAmIGNhc3QgdGhlIGV2ZW50IHNpdHRpbmcgaW5zaWRlIHRoZSBza2IuICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzY3RwX3VscGV2ZW50ICpzY3RwX3NrYjJldmVudChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXJldHVybiAoc3RydWN0IHNjdHBfdWxwZXZlbnQgKilza2ItPmNiOworfQorCit2b2lkIHNjdHBfdWxwZXZlbnRfZnJlZShzdHJ1Y3Qgc2N0cF91bHBldmVudCAqKTsKK2ludCBzY3RwX3VscGV2ZW50X2lzX25vdGlmaWNhdGlvbihjb25zdCBzdHJ1Y3Qgc2N0cF91bHBldmVudCAqKTsKK3ZvaWQgc2N0cF9xdWV1ZV9wdXJnZV91bHBldmVudHMoc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCk7CisKK3N0cnVjdCBzY3RwX3VscGV2ZW50ICpzY3RwX3VscGV2ZW50X21ha2VfYXNzb2NfY2hhbmdlKAorCWNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAorCV9fdTE2IGZsYWdzLAorCV9fdTE2IHN0YXRlLAorCV9fdTE2IGVycm9yLAorCV9fdTE2IG91dGJvdW5kLAorCV9fdTE2IGluYm91bmQsCisJaW50IGdmcCk7CisKK3N0cnVjdCBzY3RwX3VscGV2ZW50ICpzY3RwX3VscGV2ZW50X21ha2VfcGVlcl9hZGRyX2NoYW5nZSgKKwljb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKKwljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqYWFkZHIsCisJaW50IGZsYWdzLAorCWludCBzdGF0ZSwKKwlpbnQgZXJyb3IsCisJaW50IGdmcCk7CisKK3N0cnVjdCBzY3RwX3VscGV2ZW50ICpzY3RwX3VscGV2ZW50X21ha2VfcmVtb3RlX2Vycm9yKAorCWNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAorCXN0cnVjdCBzY3RwX2NodW5rICpjaHVuaywKKwlfX3UxNiBmbGFncywKKwlpbnQgZ2ZwKTsKK3N0cnVjdCBzY3RwX3VscGV2ZW50ICpzY3RwX3VscGV2ZW50X21ha2Vfc2VuZF9mYWlsZWQoCisJY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCisJc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rLAorCV9fdTE2IGZsYWdzLAorCV9fdTMyIGVycm9yLAorCWludCBnZnApOworCitzdHJ1Y3Qgc2N0cF91bHBldmVudCAqc2N0cF91bHBldmVudF9tYWtlX3NodXRkb3duX2V2ZW50KAorCWNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAorCV9fdTE2IGZsYWdzLAorCWludCBnZnApOworCitzdHJ1Y3Qgc2N0cF91bHBldmVudCAqc2N0cF91bHBldmVudF9tYWtlX3BkYXBpKAorCWNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAorCV9fdTMyIGluZGljYXRpb24sIGludCBnZnApOworCitzdHJ1Y3Qgc2N0cF91bHBldmVudCAqc2N0cF91bHBldmVudF9tYWtlX2FkYXB0aW9uX2luZGljYXRpb24oCisJY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsIGludCBnZnApOworCitzdHJ1Y3Qgc2N0cF91bHBldmVudCAqc2N0cF91bHBldmVudF9tYWtlX3Jjdm1zZyhzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKKwlzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssCisJaW50IGdmcCk7CisKK3ZvaWQgc2N0cF91bHBldmVudF9yZWFkX3NuZHJjdmluZm8oY29uc3Qgc3RydWN0IHNjdHBfdWxwZXZlbnQgKmV2ZW50LAorCXN0cnVjdCBtc2doZHIgKik7CitfX3UxNiBzY3RwX3VscGV2ZW50X2dldF9ub3RpZmljYXRpb25fdHlwZShjb25zdCBzdHJ1Y3Qgc2N0cF91bHBldmVudCAqZXZlbnQpOworCisvKiBJcyB0aGlzIGV2ZW50IHR5cGUgZW5hYmxlZD8gKi8KK3N0YXRpYyBpbmxpbmUgaW50IHNjdHBfdWxwZXZlbnRfdHlwZV9lbmFibGVkKF9fdTE2IHNuX3R5cGUsCisJCQkJCSAgICAgc3RydWN0IHNjdHBfZXZlbnRfc3Vic2NyaWJlICptYXNrKQoreworCWNoYXIgKmFtYXNrID0gKGNoYXIgKikgbWFzazsKKwlyZXR1cm4gYW1hc2tbc25fdHlwZSAtIFNDVFBfU05fVFlQRV9CQVNFXTsKK30KKworLyogR2l2ZW4gYW4gZXZlbnQgc3Vic2NyaXB0aW9uLCBpcyB0aGlzIGV2ZW50IGVuYWJsZWQ/ICovCitzdGF0aWMgaW5saW5lIGludCBzY3RwX3VscGV2ZW50X2lzX2VuYWJsZWQoY29uc3Qgc3RydWN0IHNjdHBfdWxwZXZlbnQgKmV2ZW50LAorCQkJCQkgICBzdHJ1Y3Qgc2N0cF9ldmVudF9zdWJzY3JpYmUgKm1hc2spCit7CisJX191MTYgc25fdHlwZTsKKwlpbnQgZW5hYmxlZCA9IDE7CisKKwlpZiAoc2N0cF91bHBldmVudF9pc19ub3RpZmljYXRpb24oZXZlbnQpKSB7CisJCXNuX3R5cGUgPSBzY3RwX3VscGV2ZW50X2dldF9ub3RpZmljYXRpb25fdHlwZShldmVudCk7CisJCWVuYWJsZWQgPSBzY3RwX3VscGV2ZW50X3R5cGVfZW5hYmxlZChzbl90eXBlLCBtYXNrKTsKKwl9CisJcmV0dXJuIGVuYWJsZWQ7Cit9CisKKyNlbmRpZiAvKiBfX3NjdHBfdWxwZXZlbnRfaF9fICovCisKKworCisKKworCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NjdHAvdWxwcXVldWUuaCBiL2luY2x1ZGUvbmV0L3NjdHAvdWxwcXVldWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjE3MzZkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQvc2N0cC91bHBxdWV1ZS5oCkBAIC0wLDAgKzEsOTIgQEAKKy8qIFNDVFAga2VybmVsIHJlZmVyZW5jZSBJbXBsZW1lbnRhdGlvbgorICogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwMSwgMjAwNAorICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDAgQ2lzY28sIEluYy4KKyAqIENvcHlyaWdodCAoYykgMTk5OS0yMDAxIE1vdG9yb2xhLCBJbmMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoYykgMjAwMSBOb2tpYSwgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDAxIExhIE1vbnRlIEguUC4gWWFycm9sbAorICoKKyAqIFRoZXNlIGFyZSB0aGUgZGVmaW5pdGlvbnMgbmVlZGVkIGZvciB0aGUgc2N0cF91bHBxIHR5cGUuICBUaGUKKyAqIHNjdHBfdWxwcSBpcyB0aGUgaW50ZXJmYWNlIGJldHdlZW4gdGhlIFVwcGVyIExheWVyIFByb3RvY29sLCBvciBVTFAsCisgKiBhbmQgdGhlIGNvcmUgU0NUUCBzdGF0ZSBtYWNoaW5lLiAgVGhpcyBpcyB0aGUgY29tcG9uZW50IHdoaWNoIGhhbmRsZXMKKyAqIHJlYXNzZW1ibHkgYW5kIG9yZGVyaW5nLgorICoKKyAqIFRoZSBTQ1RQIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiAgaXMgZnJlZSBzb2Z0d2FyZTsKKyAqIHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mCisgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB0aGUgU0NUUCByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQKKyAqIHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZAorICogICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKgorICogd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICogU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIEdOVSBDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKiBQbGVhc2Ugc2VuZCBhbnkgYnVnIHJlcG9ydHMgb3IgZml4ZXMgeW91IG1ha2UgdG8gdGhlCisgKiBlbWFpbCBhZGRyZXNzZXM6CisgKiAgICBsa3NjdHAgZGV2ZWxvcGVycyA8bGtzY3RwLWRldmVsb3BlcnNAbGlzdHMuc291cmNlZm9yZ2UubmV0PgorICoKKyAqIE9yIHN1Ym1pdCBhIGJ1ZyByZXBvcnQgdGhyb3VnaCB0aGUgZm9sbG93aW5nIHdlYnNpdGU6CisgKiAgICBodHRwOi8vd3d3LnNmLm5ldC9wcm9qZWN0cy9sa3NjdHAKKyAqCisgKiBXcml0dGVuIG9yIG1vZGlmaWVkIGJ5OgorICogICBKb24gR3JpbW0gICAgICAgICAgICAgPGpncmltbUB1cy5pYm0uY29tPgorICogICBMYSBNb250ZSBILlAuIFlhcnJvbGwgPHBpZ2d5QGFjbS5vcmc+CisgKiAgIFNyaWRoYXIgU2FtdWRyYWxhICAgICA8c3JpQHVzLmlibS5jb20+CisgKgorICogQW55IGJ1Z3MgcmVwb3J0ZWQgZ2l2ZW4gdG8gdXMgd2Ugd2lsbCB0cnkgdG8gZml4Li4uIGFueSBmaXhlcyBzaGFyZWQgd2lsbAorICogYmUgaW5jb3Jwb3JhdGVkIGludG8gdGhlIG5leHQgU0NUUCByZWxlYXNlLgorICovCisKKyNpZm5kZWYgX19zY3RwX3VscHF1ZXVlX2hfXworI2RlZmluZSBfX3NjdHBfdWxwcXVldWVfaF9fCisKKy8qIEEgc3RydWN0dXJlIHRvIGNhcnJ5IGluZm9ybWF0aW9uIHRvIHRoZSBVTFAgKGUuZy4gU29ja2V0cyBBUEkpICovCitzdHJ1Y3Qgc2N0cF91bHBxIHsKKwljaGFyIG1hbGxvY2VkOworCWNoYXIgcGRfbW9kZTsKKwlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHJlYXNtOworCXN0cnVjdCBza19idWZmX2hlYWQgbG9iYnk7Cit9OworCisvKiBQcm90b3R5cGVzLiAqLworc3RydWN0IHNjdHBfdWxwcSAqc2N0cF91bHBxX2luaXQoc3RydWN0IHNjdHBfdWxwcSAqLAorCQkJCSBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqKTsKK3ZvaWQgc2N0cF91bHBxX2ZyZWUoc3RydWN0IHNjdHBfdWxwcSAqKTsKKworLyogQWRkIGEgbmV3IERBVEEgY2h1bmsgZm9yIHByb2Nlc3NpbmcuICovCitpbnQgc2N0cF91bHBxX3RhaWxfZGF0YShzdHJ1Y3Qgc2N0cF91bHBxICosIHN0cnVjdCBzY3RwX2NodW5rICosIGludCk7CisKKy8qIEFkZCBhIG5ldyBldmVudCBmb3IgcHJvcGFnYXRpb24gdG8gdGhlIFVMUC4gKi8KK2ludCBzY3RwX3VscHFfdGFpbF9ldmVudChzdHJ1Y3Qgc2N0cF91bHBxICosIHN0cnVjdCBzY3RwX3VscGV2ZW50ICpldik7CisKKy8qIFJlbmVnZSBwcmV2aW91c2x5IHJlY2VpdmVkIGNodW5rcy4gICovCit2b2lkIHNjdHBfdWxwcV9yZW5lZ2Uoc3RydWN0IHNjdHBfdWxwcSAqLCBzdHJ1Y3Qgc2N0cF9jaHVuayAqLCBpbnQpOworCisvKiBQZXJmb3JtIHBhcnRpYWwgZGVsaXZlcnkuICovCit2b2lkIHNjdHBfdWxwcV9wYXJ0aWFsX2RlbGl2ZXJ5KHN0cnVjdCBzY3RwX3VscHEgKiwgc3RydWN0IHNjdHBfY2h1bmsgKiwgaW50KTsKKworLyogQWJvcnQgdGhlIHBhcnRpYWwgZGVsaXZlcnkuICovCit2b2lkIHNjdHBfdWxwcV9hYm9ydF9wZChzdHJ1Y3Qgc2N0cF91bHBxICosIGludCk7CisKKy8qIENsZWFyIHRoZSBwYXJ0aWFsIGRhdGEgZGVsaXZlcnkgY29uZGl0aW9uIG9uIHRoaXMgc29ja2V0LiAqLworaW50IHNjdHBfY2xlYXJfcGQoc3RydWN0IHNvY2sgKnNrKTsKKworLyogU2tpcCBvdmVyIGFuIFNTTi4gKi8KK3ZvaWQgc2N0cF91bHBxX3NraXAoc3RydWN0IHNjdHBfdWxwcSAqdWxwcSwgX191MTYgc2lkLCBfX3UxNiBzc24pOworCisjZW5kaWYgLyogX19zY3RwX3VscHF1ZXVlX2hfXyAqLworCisKKworCisKKworCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY3RwL3VzZXIuaCBiL2luY2x1ZGUvbmV0L3NjdHAvdXNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3NThlOGMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9zY3RwL3VzZXIuaApAQCAtMCwwICsxLDU4OSBAQAorLyogU0NUUCBrZXJuZWwgcmVmZXJlbmNlIEltcGxlbWVudGF0aW9uCisgKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAyMDAxLCAyMDA0CisgKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMCBDaXNjbywgSW5jLgorICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDEgTW90b3JvbGEsIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAwMiBJbnRlbCBDb3JwLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTQ1RQIGtlcm5lbCByZWZlcmVuY2UgSW1wbGVtZW50YXRpb24KKyAqCisgKiBUaGlzIGhlYWRlciByZXByZXNlbnRzIHRoZSBzdHJ1Y3R1cmVzIGFuZCBjb25zdGFudHMgbmVlZGVkIHRvIHN1cHBvcnQKKyAqIHRoZSBTQ1RQIEV4dGVuc2lvbiB0byB0aGUgU29ja2V0cyBBUEkuCisgKgorICogVGhlIFNDVFAgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIGlzIGZyZWUgc29mdHdhcmU7CisgKiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZgorICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhlIFNDVFAgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQKKyAqIHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZAorICogICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKgorICogd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICogU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIEdOVSBDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKiBQbGVhc2Ugc2VuZCBhbnkgYnVnIHJlcG9ydHMgb3IgZml4ZXMgeW91IG1ha2UgdG8gdGhlCisgKiBlbWFpbCBhZGRyZXNzKGVzKToKKyAqICAgIGxrc2N0cCBkZXZlbG9wZXJzIDxsa3NjdHAtZGV2ZWxvcGVyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+CisgKgorICogT3Igc3VibWl0IGEgYnVnIHJlcG9ydCB0aHJvdWdoIHRoZSBmb2xsb3dpbmcgd2Vic2l0ZToKKyAqICAgIGh0dHA6Ly93d3cuc2YubmV0L3Byb2plY3RzL2xrc2N0cAorICoKKyAqIFdyaXR0ZW4gb3IgbW9kaWZpZWQgYnk6CisgKiAgICBMYSBNb250ZSBILlAuIFlhcnJvbGwgICAgPHBpZ2d5QGFjbS5vcmc+CisgKiAgICBSLiBTdGV3YXJ0ICAgICAgICAgICAgICAgPHJhbmRhbGxAc2N0cC5jaGljYWdvLmlsLnVzPgorICogICAgSy4gTW9ybmVhdSAgICAgICAgICAgICAgIDxrbW9ybmVhdUBjaXNjby5jb20+CisgKiAgICBRLiBYaWUgICAgICAgICAgICAgICAgICAgPHF4aWUxQGVtYWlsLm1vdC5jb20+CisgKiAgICBLYXJsIEtudXRzb24gICAgICAgICAgICAgPGthcmxAYXRoZW5hLmNoaWNhZ28uaWwudXM+CisgKiAgICBKb24gR3JpbW0gICAgICAgICAgICAgICAgPGpncmltbUB1cy5pYm0uY29tPgorICogICAgRGFpc3kgQ2hhbmcgICAgICAgICAgICAgIDxkYWlzeWNAdXMuaWJtLmNvbT4KKyAqICAgIFJ5YW4gTGF5ZXIgICAgICAgICAgICAgICA8cm1sYXllckB1cy5pYm0uY29tPgorICogICAgQXJkZWxsZSBGYW4JICAgICAgIDxhcmRlbGxlLmZhbkBpbnRlbC5jb20+CisgKiAgICBTcmlkaGFyIFNhbXVkcmFsYSAgICAgICAgPHNyaUB1cy5pYm0uY29tPgorICoKKyAqIEFueSBidWdzIHJlcG9ydGVkIGdpdmVuIHRvIHVzIHdlIHdpbGwgdHJ5IHRvIGZpeC4uLiBhbnkgZml4ZXMgc2hhcmVkIHdpbGwKKyAqIGJlIGluY29ycG9yYXRlZCBpbnRvIHRoZSBuZXh0IFNDVFAgcmVsZWFzZS4KKyAqLworCisjaWZuZGVmIF9fbmV0X3NjdHBfdXNlcl9oX18KKyNkZWZpbmUgX19uZXRfc2N0cF91c2VyX2hfXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KKwordHlwZWRlZiBfX3MzMiBzY3RwX2Fzc29jX3Q7CisKKy8qIFRoZSBmb2xsb3dpbmcgc3ltYm9scyBjb21lIGZyb20gdGhlIFNvY2tldHMgQVBJIEV4dGVuc2lvbnMgZm9yCisgKiBTQ1RQIDxkcmFmdC1pZXRmLXRzdndnLXNjdHBzb2NrZXQtMDcudHh0Pi4KKyAqLworZW51bSBzY3RwX29wdG5hbWUgeworCVNDVFBfUlRPSU5GTywKKyNkZWZpbmUgU0NUUF9SVE9JTkZPIFNDVFBfUlRPSU5GTworCVNDVFBfQVNTT0NJTkZPLAorI2RlZmluZSBTQ1RQX0FTU09DSU5GTyBTQ1RQX0FTU09DSU5GTworCVNDVFBfSU5JVE1TRywKKyNkZWZpbmUgU0NUUF9JTklUTVNHIFNDVFBfSU5JVE1TRworCVNDVFBfTk9ERUxBWSwgCS8qIEdldC9zZXQgbm9kZWxheSBvcHRpb24uICovCisjZGVmaW5lIFNDVFBfTk9ERUxBWQlTQ1RQX05PREVMQVkKKwlTQ1RQX0FVVE9DTE9TRSwKKyNkZWZpbmUgU0NUUF9BVVRPQ0xPU0UgU0NUUF9BVVRPQ0xPU0UKKwlTQ1RQX1NFVF9QRUVSX1BSSU1BUllfQUREUiwgCisjZGVmaW5lIFNDVFBfU0VUX1BFRVJfUFJJTUFSWV9BRERSIFNDVFBfU0VUX1BFRVJfUFJJTUFSWV9BRERSCisJU0NUUF9QUklNQVJZX0FERFIsCisjZGVmaW5lIFNDVFBfUFJJTUFSWV9BRERSIFNDVFBfUFJJTUFSWV9BRERSCisJU0NUUF9BREFQVElPTl9MQVlFUiwgICAgICAKKyNkZWZpbmUgU0NUUF9BREFQVElPTl9MQVlFUiBTQ1RQX0FEQVBUSU9OX0xBWUVSCisJU0NUUF9ESVNBQkxFX0ZSQUdNRU5UUywKKyNkZWZpbmUgU0NUUF9ESVNBQkxFX0ZSQUdNRU5UUyBTQ1RQX0RJU0FCTEVfRlJBR01FTlRTCisJU0NUUF9QRUVSX0FERFJfUEFSQU1TLAorI2RlZmluZSBTQ1RQX1BFRVJfQUREUl9QQVJBTVMgU0NUUF9QRUVSX0FERFJfUEFSQU1TCisJU0NUUF9ERUZBVUxUX1NFTkRfUEFSQU0sCisjZGVmaW5lIFNDVFBfREVGQVVMVF9TRU5EX1BBUkFNIFNDVFBfREVGQVVMVF9TRU5EX1BBUkFNCisJU0NUUF9FVkVOVFMsCisjZGVmaW5lIFNDVFBfRVZFTlRTIFNDVFBfRVZFTlRTCisJU0NUUF9JX1dBTlRfTUFQUEVEX1Y0X0FERFIsICAvKiBUdXJuIG9uL29mZiBtYXBwZWQgdjQgYWRkcmVzc2VzICAqLworI2RlZmluZSBTQ1RQX0lfV0FOVF9NQVBQRURfVjRfQUREUiBTQ1RQX0lfV0FOVF9NQVBQRURfVjRfQUREUgorCVNDVFBfTUFYU0VHLCAJLyogR2V0L3NldCBtYXhpbXVtIGZyYWdtZW50LiAqLworI2RlZmluZSBTQ1RQX01BWFNFRyAJU0NUUF9NQVhTRUcKKwlTQ1RQX1NUQVRVUywKKyNkZWZpbmUgU0NUUF9TVEFUVVMgU0NUUF9TVEFUVVMKKwlTQ1RQX0dFVF9QRUVSX0FERFJfSU5GTywKKyNkZWZpbmUgU0NUUF9HRVRfUEVFUl9BRERSX0lORk8gU0NUUF9HRVRfUEVFUl9BRERSX0lORk8KKworCS8qIEludGVybmFsIFNvY2tldCBPcHRpb25zLiBTb21lIG9mIHRoZSBzY3RwIGxpYnJhcnkgZnVuY3Rpb25zIGFyZSAKKwkgKiBpbXBsZW1lbnRlZCB1c2luZyB0aGVzZSBzb2NrZXQgb3B0aW9ucy4KKwkgKi8KKwlTQ1RQX1NPQ0tPUFRfQklORFhfQUREID0gMTAwLC8qIEJJTkRYIHJlcXVlc3RzIGZvciBhZGRpbmcgYWRkcmVzc2VzLiAqLworI2RlZmluZSBTQ1RQX1NPQ0tPUFRfQklORFhfQURECVNDVFBfU09DS09QVF9CSU5EWF9BREQKKwlTQ1RQX1NPQ0tPUFRfQklORFhfUkVNLCAvKiBCSU5EWCByZXF1ZXN0cyBmb3IgcmVtb3ZpbmcgYWRkcmVzc2VzLiAqLworI2RlZmluZSBTQ1RQX1NPQ0tPUFRfQklORFhfUkVNCVNDVFBfU09DS09QVF9CSU5EWF9SRU0KKwlTQ1RQX1NPQ0tPUFRfUEVFTE9GRiwgCS8qIHBlZWwgb2ZmIGFzc29jaWF0aW9uLiAqLworI2RlZmluZSBTQ1RQX1NPQ0tPUFRfUEVFTE9GRglTQ1RQX1NPQ0tPUFRfUEVFTE9GRgorCVNDVFBfR0VUX1BFRVJfQUREUlNfTlVNLCAJLyogR2V0IG51bWJlciBvZiBwZWVyIGFkZHJlc3NzLiAqLworI2RlZmluZSBTQ1RQX0dFVF9QRUVSX0FERFJTX05VTQlTQ1RQX0dFVF9QRUVSX0FERFJTX05VTQorCVNDVFBfR0VUX1BFRVJfQUREUlMsIAkvKiBHZXQgYWxsIHBlZXIgYWRkcmVzc3MuICovCisjZGVmaW5lIFNDVFBfR0VUX1BFRVJfQUREUlMJU0NUUF9HRVRfUEVFUl9BRERSUworCVNDVFBfR0VUX0xPQ0FMX0FERFJTX05VTSwgCS8qIEdldCBudW1iZXIgb2YgbG9jYWwgYWRkcmVzc3MuICovCisjZGVmaW5lIFNDVFBfR0VUX0xPQ0FMX0FERFJTX05VTQlTQ1RQX0dFVF9MT0NBTF9BRERSU19OVU0KKwlTQ1RQX0dFVF9MT0NBTF9BRERSUywgCS8qIEdldCBhbGwgbG9jYWwgYWRkcmVzc3MuICovCisjZGVmaW5lIFNDVFBfR0VUX0xPQ0FMX0FERFJTCVNDVFBfR0VUX0xPQ0FMX0FERFJTCit9OworCisvKgorICogNS4yLjEgU0NUUCBJbml0aWF0aW9uIFN0cnVjdHVyZSAoU0NUUF9JTklUKQorICoKKyAqICAgVGhpcyBjbXNnaGRyIHN0cnVjdHVyZSBwcm92aWRlcyBpbmZvcm1hdGlvbiBmb3IgaW5pdGlhbGl6aW5nIG5ldworICogICBTQ1RQIGFzc29jaWF0aW9ucyB3aXRoIHNlbmRtc2coKS4gIFRoZSBTQ1RQX0lOSVRNU0cgc29ja2V0IG9wdGlvbgorICogICB1c2VzIHRoaXMgc2FtZSBkYXRhIHN0cnVjdHVyZS4gIFRoaXMgc3RydWN0dXJlIGlzIG5vdCB1c2VkIGZvcgorICogICByZWN2bXNnKCkuCisgKgorICogICBjbXNnX2xldmVsICAgIGNtc2dfdHlwZSAgICAgIGNtc2dfZGF0YVtdCisgKiAgIC0tLS0tLS0tLS0tLSAgLS0tLS0tLS0tLS0tICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogICBJUFBST1RPX1NDVFAgIFNDVFBfSU5JVCAgICAgIHN0cnVjdCBzY3RwX2luaXRtc2cKKyAqCisgKi8KK3N0cnVjdCBzY3RwX2luaXRtc2cgeworCV9fdTE2IHNpbml0X251bV9vc3RyZWFtczsKKwlfX3UxNiBzaW5pdF9tYXhfaW5zdHJlYW1zOworCV9fdTE2IHNpbml0X21heF9hdHRlbXB0czsKKwlfX3UxNiBzaW5pdF9tYXhfaW5pdF90aW1lbzsKK307CisKKy8qCisgKiA1LjIuMiBTQ1RQIEhlYWRlciBJbmZvcm1hdGlvbiBTdHJ1Y3R1cmUgKFNDVFBfU05EUkNWKQorICoKKyAqICAgVGhpcyBjbXNnaGRyIHN0cnVjdHVyZSBzcGVjaWZpZXMgU0NUUCBvcHRpb25zIGZvciBzZW5kbXNnKCkgYW5kCisgKiAgIGRlc2NyaWJlcyBTQ1RQIGhlYWRlciBpbmZvcm1hdGlvbiBhYm91dCBhIHJlY2VpdmVkIG1lc3NhZ2UgdGhyb3VnaAorICogICByZWN2bXNnKCkuCisgKgorICogICBjbXNnX2xldmVsICAgIGNtc2dfdHlwZSAgICAgIGNtc2dfZGF0YVtdCisgKiAgIC0tLS0tLS0tLS0tLSAgLS0tLS0tLS0tLS0tICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogICBJUFBST1RPX1NDVFAgIFNDVFBfU05EUkNWICAgIHN0cnVjdCBzY3RwX3NuZHJjdmluZm8KKyAqCisgKi8KK3N0cnVjdCBzY3RwX3NuZHJjdmluZm8geworCV9fdTE2IHNpbmZvX3N0cmVhbTsKKwlfX3UxNiBzaW5mb19zc247CisJX191MTYgc2luZm9fZmxhZ3M7CisJX191MzIgc2luZm9fcHBpZDsKKwlfX3UzMiBzaW5mb19jb250ZXh0OworCV9fdTMyIHNpbmZvX3RpbWV0b2xpdmU7CisJX191MzIgc2luZm9fdHNuOworCV9fdTMyIHNpbmZvX2N1bXRzbjsKKwlzY3RwX2Fzc29jX3Qgc2luZm9fYXNzb2NfaWQ7Cit9OworCisvKgorICogIHNpbmZvX2ZsYWdzOiAxNiBiaXRzICh1bnNpZ25lZCBpbnRlZ2VyKQorICoKKyAqICAgVGhpcyBmaWVsZCBtYXkgY29udGFpbiBhbnkgb2YgdGhlIGZvbGxvd2luZyBmbGFncyBhbmQgaXMgY29tcG9zZWQgb2YKKyAqICAgYSBiaXR3aXNlIE9SIG9mIHRoZXNlIHZhbHVlcy4KKyAqLworCitlbnVtIHNjdHBfc2luZm9fZmxhZ3MgeworCU1TR19VTk9SREVSRUQgPSAxLCAgLyogU2VuZC9yZWNlaXZlIG1lc3NhZ2UgdW5vcmRlcmVkLiAqLworCU1TR19BRERSX09WRVIgPSAyLCAgLyogT3ZlcnJpZGUgdGhlIHByaW1hcnkgZGVzdGluYXRpb24uICovCisJTVNHX0FCT1JUPTQsICAgICAgICAvKiBTZW5kIGFuIEFCT1JUIG1lc3NhZ2UgdG8gdGhlIHBlZXIuICovCisJLyogTVNHX0VPRiBpcyBhbHJlYWR5IGRlZmluZWQgcGVyIHNvY2tldC5oICovCit9OworCisKK3R5cGVkZWYgdW5pb24geworCV9fdTggICAJCQlyYXc7CisJc3RydWN0IHNjdHBfaW5pdG1zZwlpbml0OworCXN0cnVjdCBzY3RwX3NuZHJjdmluZm8Jc25kcmN2OworfSBzY3RwX2Ntc2dfZGF0YV90OworCisvKiBUaGVzZSBhcmUgY21zZ190eXBlcy4gICovCit0eXBlZGVmIGVudW0gc2N0cF9jbXNnX3R5cGUgeworCVNDVFBfSU5JVCwgICAgICAgICAgICAgIC8qIDUuMi4xIFNDVFAgSW5pdGlhdGlvbiBTdHJ1Y3R1cmUgKi8KKwlTQ1RQX1NORFJDViwgICAgICAgICAgICAvKiA1LjIuMiBTQ1RQIEhlYWRlciBJbmZvcm1hdGlvbiBTdHJ1Y3R1cmUgKi8KK30gc2N0cF9jbXNnX3Q7CisKKworLyoKKyAqIDUuMy4xLjEgU0NUUF9BU1NPQ19DSEFOR0UKKyAqCisgKiAgIENvbW11bmljYXRpb24gbm90aWZpY2F0aW9ucyBpbmZvcm0gdGhlIFVMUCB0aGF0IGFuIFNDVFAgYXNzb2NpYXRpb24KKyAqICAgaGFzIGVpdGhlciBiZWd1biBvciBlbmRlZC4gVGhlIGlkZW50aWZpZXIgZm9yIGEgbmV3IGFzc29jaWF0aW9uIGlzCisgKiAgIHByb3ZpZGVkIGJ5IHRoaXMgbm90aWZpY2Fpb24uIFRoZSBub3RpZmljYXRpb24gaW5mb3JtYXRpb24gaGFzIHRoZQorICogICBmb2xsb3dpbmcgZm9ybWF0OgorICoKKyAqLworc3RydWN0IHNjdHBfYXNzb2NfY2hhbmdlIHsKKwlfX3UxNiBzYWNfdHlwZTsKKwlfX3UxNiBzYWNfZmxhZ3M7CisJX191MzIgc2FjX2xlbmd0aDsKKwlfX3UxNiBzYWNfc3RhdGU7CisJX191MTYgc2FjX2Vycm9yOworCV9fdTE2IHNhY19vdXRib3VuZF9zdHJlYW1zOworCV9fdTE2IHNhY19pbmJvdW5kX3N0cmVhbXM7CisJc2N0cF9hc3NvY190IHNhY19hc3NvY19pZDsKK307CisKKy8qCisgKiAgIHNhY19zdGF0ZTogMzIgYml0cyAoc2lnbmVkIGludGVnZXIpCisgKgorICogICBUaGlzIGZpZWxkIGhvbGRzIG9uZSBvZiBhIG51bWJlciBvZiB2YWx1ZXMgdGhhdCBjb21tdW5pY2F0ZSB0aGUKKyAqICAgZXZlbnQgdGhhdCBoYXBwZW5lZCB0byB0aGUgYXNzb2NpYXRpb24uICBUaGV5IGluY2x1ZGU6CisgKgorICogICBOb3RlOiAgVGhlIGZvbGxvd2luZyBzdGF0ZSBuYW1lcyBkZXZpYXRlIGZyb20gdGhlIEFQSSBkcmFmdCBhcworICogICB0aGUgbmFtZXMgY2xhc2ggdG9vIGVhc2lseSB3aXRoIG90aGVyIGtlcm5lbCBzeW1ib2xzLgorICovCitlbnVtIHNjdHBfc2FjX3N0YXRlIHsKKwlTQ1RQX0NPTU1fVVAsCisJU0NUUF9DT01NX0xPU1QsCisJU0NUUF9SRVNUQVJULAorCVNDVFBfU0hVVERPV05fQ09NUCwKKwlTQ1RQX0NBTlRfU1RSX0FTU09DLAorfTsKKworLyoKKyAqIDUuMy4xLjIgU0NUUF9QRUVSX0FERFJfQ0hBTkdFCisgKgorICogICBXaGVuIGEgZGVzdGluYXRpb24gYWRkcmVzcyBvbiBhIG11bHRpLWhvbWVkIHBlZXIgZW5jb3VudGVycyBhIGNoYW5nZQorICogICBhbiBpbnRlcmZhY2UgZGV0YWlscyBldmVudCBpcyBzZW50LiAgVGhlIGluZm9ybWF0aW9uIGhhcyB0aGUKKyAqICAgZm9sbG93aW5nIHN0cnVjdHVyZToKKyAqLworc3RydWN0IHNjdHBfcGFkZHJfY2hhbmdlIHsKKwlfX3UxNiBzcGNfdHlwZTsKKwlfX3UxNiBzcGNfZmxhZ3M7CisJX191MzIgc3BjX2xlbmd0aDsKKwlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzcGNfYWFkZHI7CisJaW50IHNwY19zdGF0ZTsKKwlpbnQgc3BjX2Vycm9yOworCXNjdHBfYXNzb2NfdCBzcGNfYXNzb2NfaWQ7Cit9OworCisvKgorICogICAgc3BjX3N0YXRlOiAgMzIgYml0cyAoc2lnbmVkIGludGVnZXIpCisgKgorICogICBUaGlzIGZpZWxkIGhvbGRzIG9uZSBvZiBhIG51bWJlciBvZiB2YWx1ZXMgdGhhdCBjb21tdW5pY2F0ZSB0aGUKKyAqICAgZXZlbnQgdGhhdCBoYXBwZW5lZCB0byB0aGUgYWRkcmVzcy4gIFRoZXkgaW5jbHVkZToKKyAqLworZW51bSBzY3RwX3NwY19zdGF0ZSB7CisJU0NUUF9BRERSX0FWQUlMQUJMRSwKKwlTQ1RQX0FERFJfVU5SRUFDSEFCTEUsCisJU0NUUF9BRERSX1JFTU9WRUQsCisJU0NUUF9BRERSX0FEREVELAorCVNDVFBfQUREUl9NQURFX1BSSU0sCit9OworCisKKy8qCisgKiA1LjMuMS4zIFNDVFBfUkVNT1RFX0VSUk9SCisgKgorICogICBBIHJlbW90ZSBwZWVyIG1heSBzZW5kIGFuIE9wZXJhdGlvbmFsIEVycm9yIG1lc3NhZ2UgdG8gaXRzIHBlZXIuCisgKiAgIFRoaXMgbWVzc2FnZSBpbmRpY2F0ZXMgYSB2YXJpZXR5IG9mIGVycm9yIGNvbmRpdGlvbnMgb24gYW4KKyAqICAgYXNzb2NpYXRpb24uIFRoZSBlbnRpcmUgZXJyb3IgVExWIGFzIGl0IGFwcGVhcnMgb24gdGhlIHdpcmUgaXMKKyAqICAgaW5jbHVkZWQgaW4gYSBTQ1RQX1JFTU9URV9FUlJPUiBldmVudC4gIFBsZWFzZSByZWZlciB0byB0aGUgU0NUUAorICogICBzcGVjaWZpY2F0aW9uIFtTQ1RQXSBhbmQgYW55IGV4dGVuc2lvbnMgZm9yIGEgbGlzdCBvZiBwb3NzaWJsZQorICogICBlcnJvciBmb3JtYXRzLiBTQ1RQIGVycm9yIFRMVnMgaGF2ZSB0aGUgZm9ybWF0OgorICovCitzdHJ1Y3Qgc2N0cF9yZW1vdGVfZXJyb3IgeworCV9fdTE2IHNyZV90eXBlOworCV9fdTE2IHNyZV9mbGFnczsKKwlfX3UzMiBzcmVfbGVuZ3RoOworCV9fdTE2IHNyZV9lcnJvcjsKKwlzY3RwX2Fzc29jX3Qgc3JlX2Fzc29jX2lkOworCV9fdTggc3JlX2RhdGFbMF07Cit9OworCisKKy8qCisgKiA1LjMuMS40IFNDVFBfU0VORF9GQUlMRUQKKyAqCisgKiAgIElmIFNDVFAgY2Fubm90IGRlbGl2ZXIgYSBtZXNzYWdlIGl0IG1heSByZXR1cm4gdGhlIG1lc3NhZ2UgYXMgYQorICogICBub3RpZmljYXRpb24uCisgKi8KK3N0cnVjdCBzY3RwX3NlbmRfZmFpbGVkIHsKKwlfX3UxNiBzc2ZfdHlwZTsKKwlfX3UxNiBzc2ZfZmxhZ3M7CisJX191MzIgc3NmX2xlbmd0aDsKKwlfX3UzMiBzc2ZfZXJyb3I7CisJc3RydWN0IHNjdHBfc25kcmN2aW5mbyBzc2ZfaW5mbzsKKwlzY3RwX2Fzc29jX3Qgc3NmX2Fzc29jX2lkOworCV9fdTggc3NmX2RhdGFbMF07Cit9OworCisvKgorICogICBzc2ZfZmxhZ3M6IDE2IGJpdHMgKHVuc2lnbmVkIGludGVnZXIpCisgKgorICogICBUaGUgZmxhZyB2YWx1ZSB3aWxsIHRha2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzCisgKgorICogICBTQ1RQX0RBVEFfVU5TRU5UICAtIEluZGljYXRlcyB0aGF0IHRoZSBkYXRhIHdhcyBuZXZlciBwdXQgb24KKyAqICAgICAgICAgICAgICAgICAgICAgICB0aGUgd2lyZS4KKyAqCisgKiAgIFNDVFBfREFUQV9TRU5UICAgIC0gSW5kaWNhdGVzIHRoYXQgdGhlIGRhdGEgd2FzIHB1dCBvbiB0aGUgd2lyZS4KKyAqICAgICAgICAgICAgICAgICAgICAgICBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBuZWNlc3NhcmlseSBtZWFuIHRoYXQgdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICAgZGF0YSB3YXMgKG9yIHdhcyBub3QpIHN1Y2Nlc3NmdWxseSBkZWxpdmVyZWQuCisgKi8KK2VudW0gc2N0cF9zc2ZfZmxhZ3MgeworCVNDVFBfREFUQV9VTlNFTlQsCisJU0NUUF9EQVRBX1NFTlQsCit9OworCisvKgorICogNS4zLjEuNSBTQ1RQX1NIVVRET1dOX0VWRU5UCisgKgorICogICBXaGVuIGEgcGVlciBzZW5kcyBhIFNIVVRET1dOLCBTQ1RQIGRlbGl2ZXJzIHRoaXMgbm90aWZpY2F0aW9uIHRvCisgKiAgIGluZm9ybSB0aGUgYXBwbGljYXRpb24gdGhhdCBpdCBzaG91bGQgY2Vhc2Ugc2VuZGluZyBkYXRhLgorICovCitzdHJ1Y3Qgc2N0cF9zaHV0ZG93bl9ldmVudCB7CisJX191MTYgc3NlX3R5cGU7CisJX191MTYgc3NlX2ZsYWdzOworCV9fdTMyIHNzZV9sZW5ndGg7CisJc2N0cF9hc3NvY190IHNzZV9hc3NvY19pZDsKK307CisKKy8qCisgKiA1LjMuMS42IFNDVFBfQURBUFRJT05fSU5ESUNBVElPTgorICoKKyAqICAgV2hlbiBhIHBlZXIgc2VuZHMgYSBBZGFwdGlvbiBMYXllciBJbmRpY2F0aW9uIHBhcmFtZXRlciAsIFNDVFAKKyAqICAgZGVsaXZlcnMgdGhpcyBub3RpZmljYXRpb24gdG8gaW5mb3JtIHRoZSBhcHBsaWNhdGlvbgorICogICB0aGF0IG9mIHRoZSBwZWVycyByZXF1ZXN0ZWQgYWRhcHRpb24gbGF5ZXIuCisgKi8KK3N0cnVjdCBzY3RwX2FkYXB0aW9uX2V2ZW50IHsKKwlfX3UxNiBzYWlfdHlwZTsKKwlfX3UxNiBzYWlfZmxhZ3M7CisJX191MzIgc2FpX2xlbmd0aDsKKwlfX3UzMiBzYWlfYWRhcHRpb25faW5kOworCXNjdHBfYXNzb2NfdCBzYWlfYXNzb2NfaWQ7Cit9OworCisvKgorICogNS4zLjEuNyBTQ1RQX1BBUlRJQUxfREVMSVZFUllfRVZFTlQKKyAqCisgKiAgIFdoZW4gYSByZWNlaXZlciBpcyBlbmdhZ2VkIGluIGEgcGFydGlhbCBkZWxpdmVyeSBvZiBhCisgKiAgIG1lc3NhZ2UgdGhpcyBub3RpZmljYXRpb24gd2lsbCBiZSB1c2VkIHRvIGluZGljYXRlCisgKiAgIHZhcmlvdXMgZXZlbnRzLgorICovCitzdHJ1Y3Qgc2N0cF9wZGFwaV9ldmVudCB7CisJX191MTYgcGRhcGlfdHlwZTsKKwlfX3UxNiBwZGFwaV9mbGFnczsKKwlfX3UzMiBwZGFwaV9sZW5ndGg7CisJX191MzIgcGRhcGlfaW5kaWNhdGlvbjsKKwlzY3RwX2Fzc29jX3QgcGRhcGlfYXNzb2NfaWQ7Cit9OworCitlbnVtIHsgU0NUUF9QQVJUSUFMX0RFTElWRVJZX0FCT1JURUQ9MCwgfTsKKworLyoKKyAqIERlc2NyaWJlZCBpbiBTZWN0aW9uIDcuMworICogICBBbmNpbGxhcnkgRGF0YSBhbmQgTm90aWZpY2F0aW9uIEludGVyZXN0IE9wdGlvbnMKKyAqLworc3RydWN0IHNjdHBfZXZlbnRfc3Vic2NyaWJlIHsKKwlfX3U4IHNjdHBfZGF0YV9pb19ldmVudDsKKwlfX3U4IHNjdHBfYXNzb2NpYXRpb25fZXZlbnQ7CisJX191OCBzY3RwX2FkZHJlc3NfZXZlbnQ7CisJX191OCBzY3RwX3NlbmRfZmFpbHVyZV9ldmVudDsKKwlfX3U4IHNjdHBfcGVlcl9lcnJvcl9ldmVudDsKKwlfX3U4IHNjdHBfc2h1dGRvd25fZXZlbnQ7CisJX191OCBzY3RwX3BhcnRpYWxfZGVsaXZlcnlfZXZlbnQ7CisJX191OCBzY3RwX2FkYXB0aW9uX2xheWVyX2V2ZW50OworfTsKKworLyoKKyAqIDUuMy4xIFNDVFAgTm90aWZpY2F0aW9uIFN0cnVjdHVyZQorICoKKyAqICAgVGhlIG5vdGlmaWNhdGlvbiBzdHJ1Y3R1cmUgaXMgZGVmaW5lZCBhcyB0aGUgdW5pb24gb2YgYWxsCisgKiAgIG5vdGlmaWNhdGlvbiB0eXBlcy4KKyAqCisgKi8KK3VuaW9uIHNjdHBfbm90aWZpY2F0aW9uIHsKKwlzdHJ1Y3QgeworCQlfX3UxNiBzbl90eXBlOyAgICAgICAgICAgICAvKiBOb3RpZmljYXRpb24gdHlwZS4gKi8KKwkJX191MTYgc25fZmxhZ3M7CisJCV9fdTMyIHNuX2xlbmd0aDsKKwl9IHNuX2hlYWRlcjsKKwlzdHJ1Y3Qgc2N0cF9hc3NvY19jaGFuZ2Ugc25fYXNzb2NfY2hhbmdlOworCXN0cnVjdCBzY3RwX3BhZGRyX2NoYW5nZSBzbl9wYWRkcl9jaGFuZ2U7CisJc3RydWN0IHNjdHBfcmVtb3RlX2Vycm9yIHNuX3JlbW90ZV9lcnJvcjsKKwlzdHJ1Y3Qgc2N0cF9zZW5kX2ZhaWxlZCBzbl9zZW5kX2ZhaWxlZDsKKwlzdHJ1Y3Qgc2N0cF9zaHV0ZG93bl9ldmVudCBzbl9zaHV0ZG93bl9ldmVudDsKKwlzdHJ1Y3Qgc2N0cF9hZGFwdGlvbl9ldmVudCBzbl9hZGFwdGlvbl9ldmVudDsKKwlzdHJ1Y3Qgc2N0cF9wZGFwaV9ldmVudCBzbl9wZGFwaV9ldmVudDsKK307CisKKy8qIFNlY3Rpb24gNS4zLjEKKyAqIEFsbCBzdGFuZGFyZCB2YWx1ZXMgZm9yIHNuX3R5cGUgZmxhZ3MgYXJlIGdyZWF0ZXIgdGhhbiAyXjE1LgorICogVmFsdWVzIGZyb20gMl4xNSBhbmQgZG93biBhcmUgcmVzZXJ2ZWQuCisgKi8KKworZW51bSBzY3RwX3NuX3R5cGUgeworCVNDVFBfU05fVFlQRV9CQVNFICAgICA9ICgxPDwxNSksCisJU0NUUF9BU1NPQ19DSEFOR0UsCisJU0NUUF9QRUVSX0FERFJfQ0hBTkdFLAorCVNDVFBfU0VORF9GQUlMRUQsCisJU0NUUF9SRU1PVEVfRVJST1IsCisJU0NUUF9TSFVURE9XTl9FVkVOVCwKKwlTQ1RQX1BBUlRJQUxfREVMSVZFUllfRVZFTlQsCisJU0NUUF9BREFQVElPTl9JTkRJQ0FUSU9OLAorfTsKKworLyogTm90aWZpY2F0aW9uIGVycm9yIGNvZGVzIHVzZWQgdG8gZmlsbCB1cCB0aGUgZXJyb3IgZmllbGRzIGluIHNvbWUKKyAqIG5vdGlmaWNhdGlvbnMuCisgKiBTQ1RQX1BFRVJfQUREUkVTU19DSEFHRSAJOiBzcGNfZXJyb3IKKyAqIFNDVFBfQVNTT0NfQ0hBTkdFCQk6IHNhY19lcnJvcgorICogVGhlc2UgbmFtZXMgc2hvdWxkIGJlIHBvdGVudGlhbGx5IGluY2x1ZGVkIGluIHRoZSBkcmFmdCAwNCBvZiB0aGUgU0NUUAorICogc29ja2V0cyBBUEkgc3BlY2lmaWNhdGlvbi4KKyAqLwordHlwZWRlZiBlbnVtIHNjdHBfc25fZXJyb3IgeworCVNDVFBfRkFJTEVEX1RIUkVTSE9MRCwKKwlTQ1RQX1JFQ0VJVkVEX1NBQ0ssCisJU0NUUF9IRUFSVEJFQVRfU1VDQ0VTUywKKwlTQ1RQX1JFU1BPTlNFX1RPX1VTRVJfUkVRLAorCVNDVFBfSU5URVJOQUxfRVJST1IsCisJU0NUUF9TSFVURE9XTl9HVUFSRF9FWFBJUkVTLAorCVNDVFBfUEVFUl9GQVVMVFksCit9IHNjdHBfc25fZXJyb3JfdDsKKworLyoKKyAqIDcuMS4xIFJldHJhbnNtaXNzaW9uIFRpbWVvdXQgUGFyYW1ldGVycyAoU0NUUF9SVE9JTkZPKQorICoKKyAqICAgVGhlIHByb3RvY29sIHBhcmFtZXRlcnMgdXNlZCB0byBpbml0aWFsaXplIGFuZCBib3VuZCByZXRyYW5zbWlzc2lvbgorICogICB0aW1lb3V0IChSVE8pIGFyZSB0dW5hYmxlLiAgU2VlIFtTQ1RQXSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cKKyAqICAgdGhlc2UgcGFyYW1ldGVycyBhcmUgdXNlZCBpbiBSVE8gY2FsY3VsYXRpb24uIAorICovCitzdHJ1Y3Qgc2N0cF9ydG9pbmZvIHsKKwlzY3RwX2Fzc29jX3QJc3J0b19hc3NvY19pZDsKKwlfX3UzMgkJc3J0b19pbml0aWFsOworCV9fdTMyCQlzcnRvX21heDsKKwlfX3UzMgkJc3J0b19taW47Cit9OworCisvKgorICogNy4xLjIgQXNzb2NpYXRpb24gUGFyYW1ldGVycyAoU0NUUF9BU1NPQ0lORk8pCisgKgorICogICBUaGlzIG9wdGlvbiBpcyB1c2VkIHRvIGJvdGggZXhhbWluZSBhbmQgc2V0IHZhcmlvdXMgYXNzb2NpYXRpb24gYW5kCisgKiAgIGVuZHBvaW50IHBhcmFtZXRlcnMuCisgKi8KK3N0cnVjdCBzY3RwX2Fzc29jcGFyYW1zIHsKKwlzY3RwX2Fzc29jX3QJc2Fzb2NfYXNzb2NfaWQ7CisJX191MTYJCXNhc29jX2Fzb2NtYXhyeHQ7CisJX191MTYJCXNhc29jX251bWJlcl9wZWVyX2Rlc3RpbmF0aW9uczsKKwlfX3UzMgkJc2Fzb2NfcGVlcl9yd25kOworCV9fdTMyCQlzYXNvY19sb2NhbF9yd25kOworCV9fdTMyCQlzYXNvY19jb29raWVfbGlmZTsKK307CisKKy8qCisgKiA3LjEuOSBTZXQgUGVlciBQcmltYXJ5IEFkZHJlc3MgKFNDVFBfU0VUX1BFRVJfUFJJTUFSWV9BRERSKQorICoKKyAqICBSZXF1ZXN0cyB0aGF0IHRoZSBwZWVyIG1hcmsgdGhlIGVuY2xvc2VkIGFkZHJlc3MgYXMgdGhlIGFzc29jaWF0aW9uCisgKiAgcHJpbWFyeS4gVGhlIGVuY2xvc2VkIGFkZHJlc3MgbXVzdCBiZSBvbmUgb2YgdGhlIGFzc29jaWF0aW9uJ3MKKyAqICBsb2NhbGx5IGJvdW5kIGFkZHJlc3Nlcy4gVGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBtYWtlIGEKKyAqICAgc2V0IHByaW1hcnkgcmVxdWVzdDoKKyAqLworc3RydWN0IHNjdHBfc2V0cGVlcnByaW0geworCXNjdHBfYXNzb2NfdCAgICAgICAgICAgIHNzcHBfYXNzb2NfaWQ7CisJc3RydWN0IHNvY2thZGRyX3N0b3JhZ2Ugc3NwcF9hZGRyOworfTsKKworLyoKKyAqIDcuMS4xMCBTZXQgUHJpbWFyeSBBZGRyZXNzIChTQ1RQX1BSSU1BUllfQUREUikKKyAqCisgKiAgUmVxdWVzdHMgdGhhdCB0aGUgbG9jYWwgU0NUUCBzdGFjayB1c2UgdGhlIGVuY2xvc2VkIHBlZXIgYWRkcmVzcyBhcworICogIHRoZSBhc3NvY2lhdGlvbiBwcmltYXJ5LiBUaGUgZW5jbG9zZWQgYWRkcmVzcyBtdXN0IGJlIG9uZSBvZiB0aGUKKyAqICBhc3NvY2lhdGlvbiBwZWVyJ3MgYWRkcmVzc2VzLiBUaGUgZm9sbG93aW5nIHN0cnVjdHVyZSBpcyB1c2VkIHRvCisgKiAgbWFrZSBhIHNldCBwZWVyIHByaW1hcnkgcmVxdWVzdDoKKyAqLworc3RydWN0IHNjdHBfcHJpbSB7CisJc2N0cF9hc3NvY190ICAgICAgICAgICAgc3NwX2Fzc29jX2lkOworCXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNzcF9hZGRyOworfTsKKworLyoKKyAqIDcuMS4xMSBTZXQgQWRhcHRpb24gTGF5ZXIgSW5kaWNhdG9yIChTQ1RQX0FEQVBUSU9OX0xBWUVSKQorICoKKyAqIFJlcXVlc3RzIHRoYXQgdGhlIGxvY2FsIGVuZHBvaW50IHNldCB0aGUgc3BlY2lmaWVkIEFkYXB0aW9uIExheWVyCisgKiBJbmRpY2F0aW9uIHBhcmFtZXRlciBmb3IgYWxsIGZ1dHVyZSBJTklUIGFuZCBJTklULUFDSyBleGNoYW5nZXMuCisgKi8KK3N0cnVjdCBzY3RwX3NldGFkYXB0aW9uIHsKKwlfX3UzMglzc2JfYWRhcHRpb25faW5kOworfTsKKworLyoKKyAqIDcuMS4xMyBQZWVyIEFkZHJlc3MgUGFyYW1ldGVycyAgKFNDVFBfUEVFUl9BRERSX1BBUkFNUykKKyAqCisgKiAgIEFwcGxpY2F0aW9ucyBjYW4gZW5hYmxlIG9yIGRpc2FibGUgaGVhcnRiZWF0cyBmb3IgYW55IHBlZXIgYWRkcmVzcworICogICBvZiBhbiBhc3NvY2lhdGlvbiwgbW9kaWZ5IGFuIGFkZHJlc3MncyBoZWFydGJlYXQgaW50ZXJ2YWwsIGZvcmNlIGEKKyAqICAgaGVhcnRiZWF0IHRvIGJlIHNlbnQgaW1tZWRpYXRlbHksIGFuZCBhZGp1c3QgdGhlIGFkZHJlc3MncyBtYXhpbXVtCisgKiAgIG51bWJlciBvZiByZXRyYW5zbWlzc2lvbnMgc2VudCBiZWZvcmUgYW4gYWRkcmVzcyBpcyBjb25zaWRlcmVkCisgKiAgIHVucmVhY2hhYmxlLiBUaGUgZm9sbG93aW5nIHN0cnVjdHVyZSBpcyB1c2VkIHRvIGFjY2VzcyBhbmQgbW9kaWZ5IGFuCisgKiAgIGFkZHJlc3MncyBwYXJhbWV0ZXJzOgorICovCitzdHJ1Y3Qgc2N0cF9wYWRkcnBhcmFtcyB7CisJc2N0cF9hc3NvY190CQlzcHBfYXNzb2NfaWQ7CisJc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UJc3BwX2FkZHJlc3M7CisJX191MzIJCQlzcHBfaGJpbnRlcnZhbDsKKwlfX3UxNgkJCXNwcF9wYXRobWF4cnh0OworfTsKKworLyoKKyAqIDcuMi4yIFBlZXIgQWRkcmVzcyBJbmZvcm1hdGlvbgorICoKKyAqICAgQXBwbGljYXRpb25zIGNhbiByZXRyaWV2ZSBpbmZvcm1hdGlvbiBhYm91dCBhIHNwZWNpZmljIHBlZXIgYWRkcmVzcworICogICBvZiBhbiBhc3NvY2lhdGlvbiwgaW5jbHVkaW5nIGl0cyByZWFjaGFiaWxpdHkgc3RhdGUsIGNvbmdlc3Rpb24KKyAqICAgd2luZG93LCBhbmQgcmV0cmFuc21pc3Npb24gdGltZXIgdmFsdWVzLiAgVGhpcyBpbmZvcm1hdGlvbiBpcworICogICByZWFkLW9ubHkuIFRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIGlzIHVzZWQgdG8gYWNjZXNzIHRoaXMKKyAqICAgaW5mb3JtYXRpb246CisgKi8KK3N0cnVjdCBzY3RwX3BhZGRyaW5mbyB7CisJc2N0cF9hc3NvY190CQlzcGluZm9fYXNzb2NfaWQ7CisJc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UJc3BpbmZvX2FkZHJlc3M7CisJX19zMzIJCQlzcGluZm9fc3RhdGU7CisJX191MzIJCQlzcGluZm9fY3duZDsKKwlfX3UzMgkJCXNwaW5mb19zcnR0OworCV9fdTMyCQkJc3BpbmZvX3J0bzsKKwlfX3UzMgkJCXNwaW5mb19tdHU7Cit9OworCisvKiBQZWVyIGFkZHJlc3NlcydzIHN0YXRlLiAqLworZW51bSBzY3RwX3NwaW5mb19zdGF0ZSB7CisJU0NUUF9JTkFDVElWRSwKKwlTQ1RQX0FDVElWRSwKK307CisKKy8qCisgKiA3LjIuMSBBc3NvY2lhdGlvbiBTdGF0dXMgKFNDVFBfU1RBVFVTKQorICoKKyAqICAgQXBwbGljYXRpb25zIGNhbiByZXRyaWV2ZSBjdXJyZW50IHN0YXR1cyBpbmZvcm1hdGlvbiBhYm91dCBhbgorICogICBhc3NvY2lhdGlvbiwgaW5jbHVkaW5nIGFzc29jaWF0aW9uIHN0YXRlLCBwZWVyIHJlY2VpdmVyIHdpbmRvdyBzaXplLAorICogICBudW1iZXIgb2YgdW5hY2tlZCBkYXRhIGNodW5rcywgYW5kIG51bWJlciBvZiBkYXRhIGNodW5rcyBwZW5kaW5nCisgKiAgIHJlY2VpcHQuICBUaGlzIGluZm9ybWF0aW9uIGlzIHJlYWQtb25seS4gIFRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIGlzCisgKiAgIHVzZWQgdG8gYWNjZXNzIHRoaXMgaW5mb3JtYXRpb246CisgKi8KK3N0cnVjdCBzY3RwX3N0YXR1cyB7CisJc2N0cF9hc3NvY190CQlzc3RhdF9hc3NvY19pZDsKKwlfX3MzMgkJCXNzdGF0X3N0YXRlOworCV9fdTMyCQkJc3N0YXRfcnduZDsKKwlfX3UxNgkJCXNzdGF0X3VuYWNrZGF0YTsKKwlfX3UxNgkJCXNzdGF0X3BlbmRkYXRhOworCV9fdTE2CQkJc3N0YXRfaW5zdHJtczsKKwlfX3UxNgkJCXNzdGF0X291dHN0cm1zOworCV9fdTMyCQkJc3N0YXRfZnJhZ21lbnRhdGlvbl9wb2ludDsKKwlzdHJ1Y3Qgc2N0cF9wYWRkcmluZm8Jc3N0YXRfcHJpbWFyeTsKK307CisKKy8qCisgKiA4LjMsIDguNSBnZXQgYWxsIHBlZXIvbG9jYWwgYWRkcmVzc2VzIGluIGFuIGFzc29jaWF0aW9uLgorICogVGhpcyBwYXJhbWV0ZXIgc3RydWN0IGlzIHVzZWQgYnkgU0NUUF9HRVRfUEVFUl9BRERSUyBhbmQgCisgKiBTQ1RQX0dFVF9MT0NBTF9BRERSUyBzb2NrZXQgb3B0aW9ucyB1c2VkIGludGVybmFsbHkgdG8gaW1wbGVtZW50CisgKiBzY3RwX2dldHBhZGRycygpIGFuZCBzY3RwX2dldGxhZGRycygpIEFQSS4gCisgKi8KK3N0cnVjdCBzY3RwX2dldGFkZHJzIHsKKwlzY3RwX2Fzc29jX3QgICAgICAgICAgICBhc3NvY19pZDsKKwlpbnQJCQlhZGRyX251bTsKKwlzdHJ1Y3Qgc29ja2FkZHIJCV9fdXNlciAqYWRkcnM7Cit9OworCisvKiBUaGVzZSBhcmUgYml0IGZpZWxkcyBmb3IgbXNnaGRyLT5tc2dfZmxhZ3MuICBTZWUgc2VjdGlvbiA1LjEuICAqLworLyogT24gdXNlciBzcGFjZSBMaW51eCwgdGhlc2UgbGl2ZSBpbiA8Yml0cy9zb2NrZXQuaD4gYXMgYW4gZW51bS4gICovCitlbnVtIHNjdHBfbXNnX2ZsYWdzIHsKKwlNU0dfTk9USUZJQ0FUSU9OID0gMHg4MDAwLAorI2RlZmluZSBNU0dfTk9USUZJQ0FUSU9OIE1TR19OT1RJRklDQVRJT04KK307CisKKy8qCisgKiA4LjEgc2N0cF9iaW5keCgpCisgKgorICogVGhlIGZsYWdzIHBhcmFtZXRlciBpcyBmb3JtZWQgZnJvbSB0aGUgYml0d2lzZSBPUiBvZiB6ZXJvIG9yIG1vcmUgb2YgdGhlCisgKiBmb2xsb3dpbmcgY3VycmVudGx5IGRlZmluZWQgZmxhZ3M6CisgKi8KKyNkZWZpbmUgU0NUUF9CSU5EWF9BRERfQUREUiAweDAxCisjZGVmaW5lIFNDVFBfQklORFhfUkVNX0FERFIgMHgwMgorCisvKiBUaGlzIGlzIHRoZSBzdHJ1Y3R1cmUgdGhhdCBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQob3B0dmFsKSB0bworICogZ2V0c29ja29wdChTQ1RQX1NPQ0tPUFRfUEVFTE9GRikuCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwlzY3RwX2Fzc29jX3QgYXNzb2NpZDsKKwlpbnQgc2Q7Cit9IHNjdHBfcGVlbG9mZl9hcmdfdDsKKworI2VuZGlmIC8qIF9fbmV0X3NjdHBfdXNlcl9oX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NsaGNfdmouaCBiL2luY2x1ZGUvbmV0L3NsaGNfdmouaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjJjMjc4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQvc2xoY192ai5oCkBAIC0wLDAgKzEsMTg4IEBACisjaWZuZGVmIF9TTEhDX0gKKyNkZWZpbmUgX1NMSENfSAorLyoKKyAqIERlZmluaXRpb25zIGZvciB0Y3AgY29tcHJlc3Npb24gcm91dGluZXMuCisgKgorICogJEhlYWRlcjogc2xjb21wcmVzcy5oLHYgMS4xMCA4OS8xMi8zMSAwODo1MzowMiB2YW4gRXhwICQKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5ODkgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zIGFyZSBwZXJtaXR0ZWQKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGFyYWdyYXBoIGFyZQorICogZHVwbGljYXRlZCBpbiBhbGwgc3VjaCBmb3JtcyBhbmQgdGhhdCBhbnkgZG9jdW1lbnRhdGlvbiwKKyAqIGFkdmVydGlzaW5nIG1hdGVyaWFscywgYW5kIG90aGVyIG1hdGVyaWFscyByZWxhdGVkIHRvIHN1Y2gKKyAqIGRpc3RyaWJ1dGlvbiBhbmQgdXNlIGFja25vd2xlZGdlIHRoYXQgdGhlIHNvZnR3YXJlIHdhcyBkZXZlbG9wZWQKKyAqIGJ5IHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEsIEJlcmtlbGV5LiAgVGhlIG5hbWUgb2YgdGhlCisgKiBVbml2ZXJzaXR5IG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKgorICoJVmFuIEphY29ic29uICh2YW5AaGVsaW9zLmVlLmxibC5nb3YpLCBEZWMgMzEsIDE5ODk6CisgKgktIEluaXRpYWwgZGlzdHJpYnV0aW9uLgorICoKKyAqCisgKiBtb2RpZmllZCBmb3IgS0E5USBJbnRlcm5ldCBTb2Z0d2FyZSBQYWNrYWdlIGJ5CisgKiBLYXRpZSBTdGV2ZW5zIChka3N0ZXZlbnNAdWNkYXZpcy5lZHUpCisgKiBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEsIERhdmlzCisgKiBDb21wdXRpbmcgU2VydmljZXMKKyAqCS0gMDEtMzEtOTAJaW5pdGlhbCBhZGFwdGF0aW9uCisgKgorICoJLSBGZWIgMTk5MQlCaWxsX1NpbXBzb25AdW0uY2MudW1pY2guZWR1CisgKgkJCXZhcmlhYmxlIG51bWJlciBvZiBjb252ZXJzYXRpb24gc2xvdHMKKyAqCQkJYWxsb3cgemVybyBvciBvbmUgc2xvdHMKKyAqCQkJc2VwYXJhdGUgcm91dGluZXMKKyAqCQkJc3RhdHVzIGRpc3BsYXkKKyAqLworCisvKgorICogQ29tcHJlc3NlZCBwYWNrZXQgZm9ybWF0OgorICoKKyAqIFRoZSBmaXJzdCBvY3RldCBjb250YWlucyB0aGUgcGFja2V0IHR5cGUgKHRvcCAzIGJpdHMpLCBUQ1AKKyAqICdwdXNoJyBiaXQsIGFuZCBmbGFncyB0aGF0IGluZGljYXRlIHdoaWNoIG9mIHRoZSA0IFRDUCBzZXF1ZW5jZQorICogbnVtYmVycyBoYXZlIGNoYW5nZWQgKGJvdHRvbSA1IGJpdHMpLiAgVGhlIG5leHQgb2N0ZXQgaXMgYQorICogY29udmVyc2F0aW9uIG51bWJlciB0aGF0IGFzc29jaWF0ZXMgYSBzYXZlZCBJUC9UQ1AgaGVhZGVyIHdpdGgKKyAqIHRoZSBjb21wcmVzc2VkIHBhY2tldC4gIFRoZSBuZXh0IHR3byBvY3RldHMgYXJlIHRoZSBUQ1AgY2hlY2tzdW0KKyAqIGZyb20gdGhlIG9yaWdpbmFsIGRhdGFncmFtLiAgVGhlIG5leHQgMCB0byAxNSBvY3RldHMgYXJlCisgKiBzZXF1ZW5jZSBudW1iZXIgY2hhbmdlcywgb25lIGNoYW5nZSBwZXIgYml0IHNldCBpbiB0aGUgaGVhZGVyCisgKiAodGhlcmUgbWF5IGJlIG5vIGNoYW5nZXMgYW5kIHRoZXJlIGFyZSB0d28gc3BlY2lhbCBjYXNlcyB3aGVyZQorICogdGhlIHJlY2VpdmVyIGltcGxpY2l0bHkga25vd3Mgd2hhdCBjaGFuZ2VkIC0tIHNlZSBiZWxvdykuCisgKgorICogVGhlcmUgYXJlIDUgbnVtYmVycyB3aGljaCBjYW4gY2hhbmdlICh0aGV5IGFyZSBhbHdheXMgaW5zZXJ0ZWQKKyAqIGluIHRoZSBmb2xsb3dpbmcgb3JkZXIpOiBUQ1AgdXJnZW50IHBvaW50ZXIsIHdpbmRvdywKKyAqIGFja25vd2xlZGdtZW50LCBzZXF1ZW5jZSBudW1iZXIgYW5kIElQIElELiAgKFRoZSB1cmdlbnQgcG9pbnRlcgorICogaXMgZGlmZmVyZW50IGZyb20gdGhlIG90aGVycyBpbiB0aGF0IGl0cyB2YWx1ZSBpcyBzZW50LCBub3QgdGhlCisgKiBjaGFuZ2UgaW4gdmFsdWUuKSAgU2luY2UgdHlwaWNhbCB1c2Ugb2YgU0xJUCBsaW5rcyBpcyBiaWFzZWQKKyAqIHRvd2FyZCBzbWFsbCBwYWNrZXRzIChzZWUgY29tbWVudHMgb24gTVRVL01TUyBiZWxvdyksIGNoYW5nZXMKKyAqIHVzZSBhIHZhcmlhYmxlIGxlbmd0aCBjb2Rpbmcgd2l0aCBvbmUgb2N0ZXQgZm9yIG51bWJlcnMgaW4gdGhlCisgKiByYW5nZSAxIC0gMjU1IGFuZCAzIG9jdGV0cyAoMCwgTVNCLCBMU0IpIGZvciBudW1iZXJzIGluIHRoZQorICogcmFuZ2UgMjU2IC0gNjU1MzUgb3IgMC4gIChJZiB0aGUgY2hhbmdlIGluIHNlcXVlbmNlIG51bWJlciBvcgorICogYWNrIGlzIG1vcmUgdGhhbiA2NTUzNSwgYW4gdW5jb21wcmVzc2VkIHBhY2tldCBpcyBzZW50LikKKyAqLworCisvKgorICogUGFja2V0IHR5cGVzIChtdXN0IG5vdCBjb25mbGljdCB3aXRoIElQIHByb3RvY29sIHZlcnNpb24pCisgKgorICogVGhlIHRvcCBuaWJibGUgb2YgdGhlIGZpcnN0IG9jdGV0IGlzIHRoZSBwYWNrZXQgdHlwZS4gIFRoZXJlIGFyZQorICogdGhyZWUgcG9zc2libGUgdHlwZXM6IElQIChub3QgcHJvdG8gVENQIG9yIHRjcCB3aXRoIG9uZSBvZiB0aGUKKyAqIGNvbnRyb2wgZmxhZ3Mgc2V0KTsgdW5jb21wcmVzc2VkIFRDUCAoYSBub3JtYWwgSVAvVENQIHBhY2tldCBidXQKKyAqIHdpdGggdGhlIDgtYml0IHByb3RvY29sIGZpZWxkIHJlcGxhY2VkIGJ5IGFuIDgtYml0IGNvbm5lY3Rpb24gaWQgLS0KKyAqIHRoaXMgdHlwZSBvZiBwYWNrZXQgc3luY3MgdGhlIHNlbmRlciAmIHJlY2VpdmVyKTsgYW5kIGNvbXByZXNzZWQKKyAqIFRDUCAoZGVzY3JpYmVkIGFib3ZlKS4KKyAqCisgKiBMU0Igb2YgNC1iaXQgZmllbGQgaXMgVENQICJQVVNIIiBiaXQgKGEgd29ydGhsZXNzIGFuYWNocm9uaXNtKSBhbmQKKyAqIGlzIGxvZ2ljYWxseSBwYXJ0IG9mIHRoZSA0LWJpdCAiY2hhbmdlcyIgZmllbGQgdGhhdCBmb2xsb3dzLiAgVG9wCisgKiB0aHJlZSBiaXRzIGFyZSBhY3R1YWwgcGFja2V0IHR5cGUuICBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eQorICogYW5kIGluIHRoZSBpbnRlcmVzdCBvZiBjb25zZXJ2aW5nIGJpdHMsIG51bWJlcnMgYXJlIGNob3NlbiBzbyB0aGUKKyAqIElQIHByb3RvY29sIHZlcnNpb24gbnVtYmVyICg0KSB3aGljaCBub3JtYWxseSBhcHBlYXJzIGluIHRoaXMgbmliYmxlCisgKiBtZWFucyAiSVAgcGFja2V0Ii4KKyAqLworCisKKyNpbmNsdWRlIDxsaW51eC9pcC5oPgorI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgorCisvKiBTTElQIGNvbXByZXNzaW9uIG1hc2tzIGZvciBsZW4vdmVycyBieXRlICovCisjZGVmaW5lIFNMX1RZUEVfSVAgMHg0MAorI2RlZmluZSBTTF9UWVBFX1VOQ09NUFJFU1NFRF9UQ1AgMHg3MAorI2RlZmluZSBTTF9UWVBFX0NPTVBSRVNTRURfVENQIDB4ODAKKyNkZWZpbmUgU0xfVFlQRV9FUlJPUiAweDAwCisKKy8qIEJpdHMgaW4gZmlyc3Qgb2N0ZXQgb2YgY29tcHJlc3NlZCBwYWNrZXQgKi8KKyNkZWZpbmUgTkVXX0MJMHg0MAkvKiBmbGFnIGJpdHMgZm9yIHdoYXQgY2hhbmdlZCBpbiBhIHBhY2tldCAqLworI2RlZmluZSBORVdfSQkweDIwCisjZGVmaW5lIE5FV19TCTB4MDgKKyNkZWZpbmUgTkVXX0EJMHgwNAorI2RlZmluZSBORVdfVwkweDAyCisjZGVmaW5lIE5FV19VCTB4MDEKKworLyogcmVzZXJ2ZWQsIHNwZWNpYWwtY2FzZSB2YWx1ZXMgb2YgYWJvdmUgKi8KKyNkZWZpbmUgU1BFQ0lBTF9JIChORVdfU3xORVdfV3xORVdfVSkJCS8qIGVjaG9lZCBpbnRlcmFjdGl2ZSB0cmFmZmljICovCisjZGVmaW5lIFNQRUNJQUxfRCAoTkVXX1N8TkVXX0F8TkVXX1d8TkVXX1UpCS8qIHVuaWRpcmVjdGlvbmFsIGRhdGEgKi8KKyNkZWZpbmUgU1BFQ0lBTFNfTUFTSyAoTkVXX1N8TkVXX0F8TkVXX1d8TkVXX1UpCisKKyNkZWZpbmUgVENQX1BVU0hfQklUIDB4MTAKKworLyoKKyAqIGRhdGEgdHlwZSBhbmQgc2l6ZXMgY29udmVyc2lvbiBhc3N1bXB0aW9uczoKKyAqCisgKglWSiBjb2RlCQlLQTlRIHN0eWxlCWdlbmVyaWMKKyAqCXVfY2hhcgkJYnl0ZV90CQl1bnNpZ25lZCBjaGFyCSA4IGJpdHMKKyAqCXVfc2hvcnQJCWludDE2CQl1bnNpZ25lZCBzaG9ydAkxNiBiaXRzCisgKgl1X2ludAkJaW50MTYJCXVuc2lnbmVkIHNob3J0CTE2IGJpdHMKKyAqCXVfbG9uZwkJdW5zaWduZWQgbG9uZwl1bnNpZ25lZCBsb25nCTMyIGJpdHMKKyAqCWludAkJaW50MzIJCWxvbmcJCTMyIGJpdHMKKyAqLworCit0eXBlZGVmIF9fdTggYnl0ZV90OwordHlwZWRlZiBfX3UzMiBpbnQzMjsKKworLyoKKyAqICJzdGF0ZSIgZGF0YSBmb3IgZWFjaCBhY3RpdmUgdGNwIGNvbnZlcnNhdGlvbiBvbiB0aGUgd2lyZS4gIFRoaXMgaXMKKyAqIGJhc2ljYWxseSBhIGNvcHkgb2YgdGhlIGVudGlyZSBJUC9UQ1AgaGVhZGVyIGZyb20gdGhlIGxhc3QgcGFja2V0CisgKiB3ZSBzYXcgZnJvbSB0aGUgY29udmVyc2F0aW9uIHRvZ2V0aGVyIHdpdGggYSBzbWFsbCBpZGVudGlmaWVyCisgKiB0aGUgdHJhbnNtaXQgJiByZWNlaXZlIGVuZHMgb2YgdGhlIGxpbmUgdXNlIHRvIGxvY2F0ZSBzYXZlZCBoZWFkZXIuCisgKi8KK3N0cnVjdCBjc3RhdGUgeworCWJ5dGVfdAljc190aGlzOwkvKiBjb25uZWN0aW9uIGlkIG51bWJlciAoeG1pdCkgKi8KKwlzdHJ1Y3QgY3N0YXRlICpuZXh0OwkvKiBuZXh0IGluIHJpbmcgKHhtaXQpICovCisJc3RydWN0IGlwaGRyIGNzX2lwOwkvKiBpcC90Y3AgaGRyIGZyb20gbW9zdCByZWNlbnQgcGFja2V0ICovCisJc3RydWN0IHRjcGhkciBjc190Y3A7CisJdW5zaWduZWQgY2hhciBjc19pcG9wdFs2NF07CisJdW5zaWduZWQgY2hhciBjc190Y3BvcHRbNjRdOworCWludCBjc19oc2l6ZTsKK307CisjZGVmaW5lIE5VTExTTFNUQVRFCShzdHJ1Y3QgY3N0YXRlICopMAorCisvKgorICogYWxsIHRoZSBzdGF0ZSBkYXRhIGZvciBvbmUgc2VyaWFsIGxpbmUgKHdlIG5lZWQgb25lIG9mIHRoZXNlIHBlciBsaW5lKS4KKyAqLworc3RydWN0IHNsY29tcHJlc3MgeworCXN0cnVjdCBjc3RhdGUgKnRzdGF0ZTsJLyogdHJhbnNtaXQgY29ubmVjdGlvbiBzdGF0ZXMgKGFycmF5KSovCisJc3RydWN0IGNzdGF0ZSAqcnN0YXRlOwkvKiByZWNlaXZlIGNvbm5lY3Rpb24gc3RhdGVzIChhcnJheSkqLworCisJYnl0ZV90IHRzbG90X2xpbWl0OwkvKiBoaWdoZXN0IHRyYW5zbWl0IHNsb3QgaWQgKDAtbCkqLworCWJ5dGVfdCByc2xvdF9saW1pdDsJLyogaGlnaGVzdCByZWNlaXZlIHNsb3QgaWQgKDAtbCkqLworCisJYnl0ZV90IHhtaXRfb2xkZXN0OwkvKiBvbGRlc3QgeG1pdCBpbiByaW5nICovCisJYnl0ZV90IHhtaXRfY3VycmVudDsJLyogbW9zdCByZWNlbnQgeG1pdCBpZCAqLworCWJ5dGVfdCByZWN2X2N1cnJlbnQ7CS8qIG1vc3QgcmVjZW50IHJjdmQgaWQgKi8KKworCWJ5dGVfdCBmbGFnczsKKyNkZWZpbmUgU0xGX1RPU1MJMHgwMQkvKiB0b3NzaW5nIHJjdmQgZnJhbWVzIHVudGlsIGlkIHJlY2VpdmVkICovCisKKwlpbnQzMiBzbHNfb19ub250Y3A7CS8qIG91dGJvdW5kIG5vbi1UQ1AgcGFja2V0cyAqLworCWludDMyIHNsc19vX3RjcDsJLyogb3V0Ym91bmQgVENQIHBhY2tldHMgKi8KKwlpbnQzMiBzbHNfb191bmNvbXByZXNzZWQ7CS8qIG91dGJvdW5kIHVuY29tcHJlc3NlZCBwYWNrZXRzICovCisJaW50MzIgc2xzX29fY29tcHJlc3NlZDsJLyogb3V0Ym91bmQgY29tcHJlc3NlZCBwYWNrZXRzICovCisJaW50MzIgc2xzX29fc2VhcmNoZXM7CS8qIHNlYXJjaGVzIGZvciBjb25uZWN0aW9uIHN0YXRlICovCisJaW50MzIgc2xzX29fbWlzc2VzOwkvKiB0aW1lcyBjb3VsZG4ndCBmaW5kIGNvbm4uIHN0YXRlICovCisKKwlpbnQzMiBzbHNfaV91bmNvbXByZXNzZWQ7CS8qIGluYm91bmQgdW5jb21wcmVzc2VkIHBhY2tldHMgKi8KKwlpbnQzMiBzbHNfaV9jb21wcmVzc2VkOwkvKiBpbmJvdW5kIGNvbXByZXNzZWQgcGFja2V0cyAqLworCWludDMyIHNsc19pX2Vycm9yOwkvKiBpbmJvdW5kIGVycm9yIHBhY2tldHMgKi8KKwlpbnQzMiBzbHNfaV90b3NzZWQ7CS8qIGluYm91bmQgcGFja2V0cyB0b3NzZWQgYmVjYXVzZSBvZiBlcnJvciAqLworCisJaW50MzIgc2xzX2lfcnVudDsKKwlpbnQzMiBzbHNfaV9iYWRjaGVjazsKK307CisjZGVmaW5lIE5VTExTTENPTVBSCShzdHJ1Y3Qgc2xjb21wcmVzcyAqKTAKKworI2RlZmluZSBfX0FSR1MoeCkgeAorCisvKiBJbiBzbGhjLmM6ICovCitzdHJ1Y3Qgc2xjb21wcmVzcyAqc2xoY19pbml0IF9fQVJHUygoaW50IHJzbG90cywgaW50IHRzbG90cykpOwordm9pZCBzbGhjX2ZyZWUgX19BUkdTKChzdHJ1Y3Qgc2xjb21wcmVzcyAqY29tcCkpOworCitpbnQgc2xoY19jb21wcmVzcyBfX0FSR1MoKHN0cnVjdCBzbGNvbXByZXNzICpjb21wLCB1bnNpZ25lZCBjaGFyICppY3AsCisJCQkgIGludCBpc2l6ZSwgdW5zaWduZWQgY2hhciAqb2NwLCB1bnNpZ25lZCBjaGFyICoqY3BwLAorCQkJICBpbnQgY29tcHJlc3NfY2lkKSk7CitpbnQgc2xoY191bmNvbXByZXNzIF9fQVJHUygoc3RydWN0IHNsY29tcHJlc3MgKmNvbXAsIHVuc2lnbmVkIGNoYXIgKmljcCwKKwkJCSAgICBpbnQgaXNpemUpKTsKK2ludCBzbGhjX3JlbWVtYmVyIF9fQVJHUygoc3RydWN0IHNsY29tcHJlc3MgKmNvbXAsIHVuc2lnbmVkIGNoYXIgKmljcCwKKwkJCSAgaW50IGlzaXplKSk7CitpbnQgc2xoY190b3NzIF9fQVJHUygoc3RydWN0IHNsY29tcHJlc3MgKmNvbXApKTsKKworI2VuZGlmCS8qIF9TTEhDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NubXAuaCBiL2luY2x1ZGUvbmV0L3NubXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTVhYjI1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQvc25tcC5oCkBAIC0wLDAgKzEsMTQ1IEBACisvKgorICoKKyAqCQlTTk1QIE1JQiBlbnRyaWVzIGZvciB0aGUgSVAgc3Vic3lzdGVtLgorICoJCQorICoJCUFsYW4gQ294IDxndzRwdHNAZ3c0cHRzLmFtcHIub3JnPgorICoKKyAqCQlXZSBkb24ndCBjaG9zZSB0byBpbXBsZW1lbnQgU05NUCBpbiB0aGUga2VybmVsICh0aGlzIHdvdWxkCisgKgkJYmUgc2lsbHkgYXMgU05NUCBpcyBhIHBhaW4gaW4gdGhlIGJhY2tzaWRlIGluIHBsYWNlcykuIFdlIGRvCisgKgkJaG93ZXZlciBuZWVkIHRvIGNvbGxlY3QgdGhlIE1JQiBzdGF0aXN0aWNzIGFuZCBleHBvcnQgdGhlbQorICoJCW91dCBvZiAvcHJvYyAoZXZlbnR1YWxseSkKKyAqCisgKgkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKgkJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKgkJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKgkJJElkOiBzbm1wLmgsdiAxLjE5IDIwMDEvMDYvMTQgMTM6NDA6NDYgZGF2ZW0gRXhwICQKKyAqCisgKi8KKyAKKyNpZm5kZWYgX1NOTVBfSAorI2RlZmluZSBfU05NUF9ICisKKyNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NubXAuaD4KKworLyoKKyAqIE1pYnMgYXJlIHN0b3JlZCBpbiBhcnJheSBvZiB1bnNpZ25lZCBsb25nLgorICovCisvKgorICogc3RydWN0IHNubXBfbWlie30KKyAqICAtIGxpc3Qgb2YgZW50cmllcyBmb3IgcGFydGljdWxhciBBUEkgKHN1Y2ggYXMgL3Byb2MvbmV0L3NubXApCisgKiAgLSBuYW1lIG9mIGVudHJpZXMuCisgKi8KK3N0cnVjdCBzbm1wX21pYiB7CisJY2hhciAqbmFtZTsKKwlpbnQgZW50cnk7Cit9OworCisjZGVmaW5lIFNOTVBfTUlCX0lURU0oX25hbWUsX2VudHJ5KQl7CVwKKwkubmFtZSA9IF9uYW1lLAkJCQlcCisJLmVudHJ5ID0gX2VudHJ5LAkJCVwKK30KKworI2RlZmluZSBTTk1QX01JQl9TRU5USU5FTCB7CVwKKwkubmFtZSA9IE5VTEwsCQlcCisJLmVudHJ5ID0gMCwJCVwKK30KKworLyoKKyAqIFdlIHVzZSBhbGwgdW5zaWduZWQgbG9uZ3MuIExpbnV4IHdpbGwgc29vbiBiZSBzbyByZWxpYWJsZSB0aGF0IGV2ZW4gCisgKiB0aGVzZSB3aWxsIHJhcGlkbHkgZ2V0IHRvbyBzbWFsbCA4LSkuIFNlcmlvdXNseSBjb25zaWRlciB0aGUgSXBJblJlY2VpdmVzIAorICogY291bnQgb24gdGhlIDIwR2IvcyArIG5ldHdvcmtzIHBlb3BsZSBleHBlY3QgaW4gYSBmZXcgeWVhcnMgdGltZSEKKyAqLworCisvKiAKKyAqIFRoZSBydWxlIGZvciBwYWRkaW5nOiAKKyAqIEJlc3QgaXMgcG93ZXIgb2YgdHdvIGJlY2F1c2UgdGhlbiB0aGUgcmlnaHQgc3RydWN0dXJlIGNhbiBiZSBmb3VuZCBieSBhIAorICogc2ltcGxlIHNoaWZ0LiBUaGUgc3RydWN0dXJlIHNob3VsZCBiZSBhbHdheXMgY2FjaGUgbGluZSBhbGlnbmVkLgorICogZ2NjIG5lZWRzIG49YWxpZ250byhjYWNoZWxpbmVzaXplLCBwb3BjbnQoc2l6ZW9mKGJsYV9taWIpKSkgc2hpZnQvYWRkIAorICogaW5zdHJ1Y3Rpb25zIHRvIGVtdWxhdGUgbXVsdGlwbHkgaW4gY2FzZSBpdCBpcyBub3QgcG93ZXItb2YtdHdvLiAKKyAqIEN1cnJlbnRseSBuIGlzIGFsd2F5cyA8PTMgZm9yIGFsbCBzaXplcyBzbyBzaW1wbGUgY2FjaGUgbGluZSBhbGlnbm1lbnQgCisgKiBpcyBlbm91Z2guIAorICogCisgKiBUaGUgYmVzdCBzb2x1dGlvbiB3b3VsZCBiZSBhIGdsb2JhbCBDUFUgbG9jYWwgYXJlYSAsIGVzcGVjaWFsbHkgb24gNjQgCisgKiBhbmQgMTI4Ynl0ZSBjYWNoZWxpbmUgbWFjaGluZSBpdCBtYWtlcyBhICpsb3QqIG9mIHNlbnNlIC1BSworICovIAorCisjZGVmaW5lIF9fU05NUF9NSUJfQUxJR05fXwlfX19fY2FjaGVsaW5lX2FsaWduZWQKKworLyogSVBzdGF0cyAqLworI2RlZmluZSBJUFNUQVRTX01JQl9NQVgJX19JUFNUQVRTX01JQl9NQVgKK3N0cnVjdCBpcHN0YXRzX21pYiB7CisJdW5zaWduZWQgbG9uZwltaWJzW0lQU1RBVFNfTUlCX01BWF07Cit9IF9fU05NUF9NSUJfQUxJR05fXzsKKworLyogSUNNUCAqLworI2RlZmluZSBJQ01QX01JQl9EVU1NWQlfX0lDTVBfTUlCX01BWAorI2RlZmluZSBJQ01QX01JQl9NQVgJKF9fSUNNUF9NSUJfTUFYICsgMSkKKworc3RydWN0IGljbXBfbWliIHsKKwl1bnNpZ25lZCBsb25nCW1pYnNbSUNNUF9NSUJfTUFYXTsKK30gX19TTk1QX01JQl9BTElHTl9fOworCisvKiBJQ01QNiAoSVB2Ni1JQ01QKSAqLworI2RlZmluZSBJQ01QNl9NSUJfTUFYCV9fSUNNUDZfTUlCX01BWAorc3RydWN0IGljbXB2Nl9taWIgeworCXVuc2lnbmVkIGxvbmcJbWlic1tJQ01QNl9NSUJfTUFYXTsKK30gX19TTk1QX01JQl9BTElHTl9fOworCisvKiBUQ1AgKi8KKyNkZWZpbmUgVENQX01JQl9NQVgJX19UQ1BfTUlCX01BWAorc3RydWN0IHRjcF9taWIgeworCXVuc2lnbmVkIGxvbmcJbWlic1tUQ1BfTUlCX01BWF07Cit9IF9fU05NUF9NSUJfQUxJR05fXzsKKworLyogVURQICovCisjZGVmaW5lIFVEUF9NSUJfTUFYCV9fVURQX01JQl9NQVgKK3N0cnVjdCB1ZHBfbWliIHsKKwl1bnNpZ25lZCBsb25nCW1pYnNbVURQX01JQl9NQVhdOworfSBfX1NOTVBfTUlCX0FMSUdOX187CisKKy8qIFNDVFAgKi8KKyNkZWZpbmUgU0NUUF9NSUJfTUFYCV9fU0NUUF9NSUJfTUFYCitzdHJ1Y3Qgc2N0cF9taWIgeworCXVuc2lnbmVkIGxvbmcJbWlic1tTQ1RQX01JQl9NQVhdOworfSBfX1NOTVBfTUlCX0FMSUdOX187CisKKy8qIExpbnV4ICovCisjZGVmaW5lIExJTlVYX01JQl9NQVgJX19MSU5VWF9NSUJfTUFYCitzdHJ1Y3QgbGludXhfbWliIHsKKwl1bnNpZ25lZCBsb25nCW1pYnNbTElOVVhfTUlCX01BWF07Cit9OworCisKKy8qIAorICogRklYTUU6IE9uIHg4NiBhbmQgc29tZSBvdGhlciBDUFVzIHRoZSBzcGxpdCBpbnRvIHVzZXIgYW5kIHNvZnRpcnEgcGFydHMKKyAqIGlzIG5vdCBuZWVkZWQgYmVjYXVzZSBhZGRsICQxLG1lbW9yeSBpcyBhdG9taWMgYWdhaW5zdCBpbnRlcnJ1cHRzIChidXQgCisgKiBhdG9taWNfaW5jIHdvdWxkIGJlIG92ZXJraWxsIGJlY2F1c2Ugb2YgdGhlIGxvY2sgY3ljbGVzKS4gV2FudHMgbmV3IAorICogbm9ubG9ja2VkX2F0b21pY19pbmMoKSBwcmltaXRpdmVzIC1BSworICovIAorI2RlZmluZSBERUZJTkVfU05NUF9TVEFUKHR5cGUsIG5hbWUpCVwKKwlfX3R5cGVvZl9fKHR5cGUpICpuYW1lWzJdCisjZGVmaW5lIERFQ0xBUkVfU05NUF9TVEFUKHR5cGUsIG5hbWUpCVwKKwlleHRlcm4gX190eXBlb2ZfXyh0eXBlKSAqbmFtZVsyXQorCisjZGVmaW5lIFNOTVBfU1RBVF9CSFBUUihuYW1lKQkobmFtZVswXSkKKyNkZWZpbmUgU05NUF9TVEFUX1VTUlBUUihuYW1lKQkobmFtZVsxXSkKKworI2RlZmluZSBTTk1QX0lOQ19TVEFUU19CSChtaWIsIGZpZWxkKSAJXAorCShwZXJfY3B1X3B0cihtaWJbMF0sIF9zbXBfcHJvY2Vzc29yX2lkKCkpLT5taWJzW2ZpZWxkXSsrKQorI2RlZmluZSBTTk1QX0lOQ19TVEFUU19PRkZTRVRfQkgobWliLCBmaWVsZCwgb2Zmc2V0KQlcCisJKHBlcl9jcHVfcHRyKG1pYlswXSwgX3NtcF9wcm9jZXNzb3JfaWQoKSktPm1pYnNbZmllbGQgKyAob2Zmc2V0KV0rKykKKyNkZWZpbmUgU05NUF9JTkNfU1RBVFNfVVNFUihtaWIsIGZpZWxkKSBcCisJKHBlcl9jcHVfcHRyKG1pYlsxXSwgX3NtcF9wcm9jZXNzb3JfaWQoKSktPm1pYnNbZmllbGRdKyspCisjZGVmaW5lIFNOTVBfSU5DX1NUQVRTKG1pYiwgZmllbGQpIAlcCisJKHBlcl9jcHVfcHRyKG1pYlshaW5fc29mdGlycSgpXSwgX3NtcF9wcm9jZXNzb3JfaWQoKSktPm1pYnNbZmllbGRdKyspCisjZGVmaW5lIFNOTVBfREVDX1NUQVRTKG1pYiwgZmllbGQpIAlcCisJKHBlcl9jcHVfcHRyKG1pYlshaW5fc29mdGlycSgpXSwgX3NtcF9wcm9jZXNzb3JfaWQoKSktPm1pYnNbZmllbGRdLS0pCisjZGVmaW5lIFNOTVBfQUREX1NUQVRTX0JIKG1pYiwgZmllbGQsIGFkZGVuZCkgCVwKKwkocGVyX2NwdV9wdHIobWliWzBdLCBfc21wX3Byb2Nlc3Nvcl9pZCgpKS0+bWlic1tmaWVsZF0gKz0gYWRkZW5kKQorI2RlZmluZSBTTk1QX0FERF9TVEFUU19VU0VSKG1pYiwgZmllbGQsIGFkZGVuZCkgCVwKKwkocGVyX2NwdV9wdHIobWliWzFdLCBfc21wX3Byb2Nlc3Nvcl9pZCgpKS0+bWlic1tmaWVsZF0gKz0gYWRkZW5kKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NvY2suaCBiL2luY2x1ZGUvbmV0L3NvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTgxY2FiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQvc29jay5oCkBAIC0wLDAgKzEsMTI5NyBAQAorLyoKKyAqIElORVQJCUFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBUQ1AvSVAgcHJvdG9jb2wgc3VpdGUgZm9yIHRoZSBMSU5VWAorICoJCW9wZXJhdGluZyBzeXN0ZW0uICBJTkVUIGlzIGltcGxlbWVudGVkIHVzaW5nIHRoZSAgQlNEIFNvY2tldAorICoJCWludGVyZmFjZSBhcyB0aGUgbWVhbnMgb2YgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSB1c2VyIGxldmVsLgorICoKKyAqCQlEZWZpbml0aW9ucyBmb3IgdGhlIEFGX0lORVQgc29ja2V0IGhhbmRsZXIuCisgKgorICogVmVyc2lvbjoJQCgjKXNvY2suaAkxLjAuNAkwNS8xMy85MworICoKKyAqIEF1dGhvcnM6CVJvc3MgQmlybywgPGJpcjdAbGVsYW5kLlN0YW5mb3JkLkVkdT4KKyAqCQlGcmVkIE4uIHZhbiBLZW1wZW4sIDx3YWx0amVAdVdhbHQuTkwuTXVnbmV0Lk9SRz4KKyAqCQlDb3JleSBNaW55YXJkIDx3Zi1yY2ghbWlueWFyZEByZWxheS5FVS5uZXQ+CisgKgkJRmxvcmlhbiBMYSBSb2NoZSA8ZmxsYUBzdHVkLnVuaS1zYi5kZT4KKyAqCisgKiBGaXhlczoKKyAqCQlBbGFuIENveAk6CVZvbGF0aWxlcyBpbiBza2J1ZmYgcG9pbnRlcnMuIFNlZQorICoJCQkJCXNrYnVmZiBjb21tZW50cy4gTWF5IGJlIG92ZXJkb25lLAorICoJCQkJCWJldHRlciB0byBwcm92ZSB0aGV5IGNhbiBiZSByZW1vdmVkCisgKgkJCQkJdGhhbiB0aGUgcmV2ZXJzZS4KKyAqCQlBbGFuIENveAk6CUFkZGVkIGEgemFwcGVkIGZpZWxkIGZvciB0Y3AgdG8gbm90ZQorICoJCQkJCWEgc29ja2V0IGlzIHJlc2V0IGFuZCBtdXN0IHN0YXkgc2h1dCB1cAorICoJCUFsYW4gQ294CToJTmV3IGZpZWxkcyBmb3Igb3B0aW9ucworICoJUGF1bGluZSBNaWRkZWxpbmsJOglpZGVudGQgc3VwcG9ydAorICoJCUFsYW4gQ294CToJRWxpbWluYXRlIGxvdyBsZXZlbCByZWN2L3JlY3Zmcm9tCisgKgkJRGF2aWQgUy4gTWlsbGVyCToJTmV3IHNvY2tldCBsb29rdXAgYXJjaGl0ZWN0dXJlLgorICogICAgICAgICAgICAgIFN0ZXZlIFdoaXRlaG91c2U6ICAgICAgIERlZmF1bHQgcm91dGluZXMgZm9yIHNvY2tfb3BzCisgKiAgICAgICAgICAgICAgQXJuYWxkbyBDLiBNZWxvIDoJcmVtb3ZlZCBuZXRfcGluZm8sIHRwX3BpbmZvIGFuZCBtYWRlCisgKiAgICAgICAgICAgICAgCQkJcHJvdGluZm8gYmUganVzdCBhIHZvaWQgcG9pbnRlciwgYXMgdGhlCisgKiAgICAgICAgICAgICAgCQkJcHJvdG9jb2wgc3BlY2lmaWMgcGFydHMgd2VyZSBtb3ZlZCB0bworICogICAgICAgICAgICAgIAkJCXJlc3BlY3RpdmUgaGVhZGVycyBhbmQgaXB2NC92NiwgZXRjIG5vdworICogICAgICAgICAgICAgIAkJCXVzZSBwcml2YXRlIHNsYWJjYWNoZXMgZm9yIGl0cyBzb2NrcworICogICAgICAgICAgICAgIFBlZHJvIEhvcnRhcwk6CU5ldyBmbGFncyBmaWVsZCBmb3Igc29ja2V0IG9wdGlvbnMKKyAqCisgKgorICoJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCQltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICoJCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICoJCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpZm5kZWYgX1NPQ0tfSAorI2RlZmluZSBfU09DS19ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgkvKiBzdHJ1Y3Qgc2tfYnVmZiAqLworI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CisKKyNpbmNsdWRlIDxsaW51eC9maWx0ZXIuaD4KKworI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlIDxuZXQvZHN0Lmg+CisjaW5jbHVkZSA8bmV0L2NoZWNrc3VtLmg+CisKKy8qCisgKiBUaGlzIHN0cnVjdHVyZSByZWFsbHkgbmVlZHMgdG8gYmUgY2xlYW5lZCB1cC4KKyAqIE1vc3Qgb2YgaXQgaXMgZm9yIFRDUCwgYW5kIG5vdCB1c2VkIGJ5IGFueSBvZgorICogdGhlIG90aGVyIHByb3RvY29scy4KKyAqLworCisvKiBEZWZpbmUgdGhpcyB0byBnZXQgdGhlIFNPQ0tfREJHIGRlYnVnZ2luZyBmYWNpbGl0eS4gKi8KKyNkZWZpbmUgU09DS19ERUJVR0dJTkcKKyNpZmRlZiBTT0NLX0RFQlVHR0lORworI2RlZmluZSBTT0NLX0RFQlVHKHNrLCBtc2cuLi4pIGRvIHsgaWYgKChzaykgJiYgc29ja19mbGFnKChzayksIFNPQ0tfREJHKSkgXAorCQkJCQlwcmludGsoS0VSTl9ERUJVRyBtc2cpOyB9IHdoaWxlICgwKQorI2Vsc2UKKyNkZWZpbmUgU09DS19ERUJVRyhzaywgbXNnLi4uKSBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKworLyogVGhpcyBpcyB0aGUgcGVyLXNvY2tldCBsb2NrLiAgVGhlIHNwaW5sb2NrIHByb3ZpZGVzIGEgc3luY2hyb25pemF0aW9uCisgKiBiZXR3ZWVuIHVzZXIgY29udGV4dHMgYW5kIHNvZnR3YXJlIGludGVycnVwdCBwcm9jZXNzaW5nLCB3aGVyZWFzIHRoZQorICogbWluaS1zZW1hcGhvcmUgc3luY2hyb25pemVzIG11bHRpcGxlIHVzZXJzIGFtb25nc3QgdGhlbXNlbHZlcy4KKyAqLworc3RydWN0IHNvY2tfaW9jYjsKK3R5cGVkZWYgc3RydWN0IHsKKwlzcGlubG9ja190CQlzbG9jazsKKwlzdHJ1Y3Qgc29ja19pb2NiCSpvd25lcjsKKwl3YWl0X3F1ZXVlX2hlYWRfdAl3cTsKK30gc29ja2V0X2xvY2tfdDsKKworI2RlZmluZSBzb2NrX2xvY2tfaW5pdChfX3NrKSBcCitkbyB7CXNwaW5fbG9ja19pbml0KCYoKF9fc2spLT5za19sb2NrLnNsb2NrKSk7IFwKKwkoX19zayktPnNrX2xvY2sub3duZXIgPSBOVUxMOyBcCisJaW5pdF93YWl0cXVldWVfaGVhZCgmKChfX3NrKS0+c2tfbG9jay53cSkpOyBcCit9IHdoaWxlKDApCisKK3N0cnVjdCBzb2NrOworCisvKioKKyAgKglzdHJ1Y3Qgc29ja19jb21tb24gLSBtaW5pbWFsIG5ldHdvcmsgbGF5ZXIgcmVwcmVzZW50YXRpb24gb2Ygc29ja2V0cworICAqCUBza2NfZmFtaWx5IC0gbmV0d29yayBhZGRyZXNzIGZhbWlseQorICAqCUBza2Nfc3RhdGUgLSBDb25uZWN0aW9uIHN0YXRlCisgICoJQHNrY19yZXVzZSAtICVTT19SRVVTRUFERFIgc2V0dGluZworICAqCUBza2NfYm91bmRfZGV2X2lmIC0gYm91bmQgZGV2aWNlIGluZGV4IGlmICE9IDAKKyAgKglAc2tjX25vZGUgLSBtYWluIGhhc2ggbGlua2FnZSBmb3IgdmFyaW91cyBwcm90b2NvbCBsb29rdXAgdGFibGVzCisgICoJQHNrY19iaW5kX25vZGUgLSBiaW5kIGhhc2ggbGlua2FnZSBmb3IgdmFyaW91cyBwcm90b2NvbCBsb29rdXAgdGFibGVzCisgICoJQHNrY19yZWZjbnQgLSByZWZlcmVuY2UgY291bnQKKyAgKgorICAqCVRoaXMgaXMgdGhlIG1pbmltYWwgbmV0d29yayBsYXllciByZXByZXNlbnRhdGlvbiBvZiBzb2NrZXRzLCB0aGUgaGVhZGVyCisgICoJZm9yIHN0cnVjdCBzb2NrIGFuZCBzdHJ1Y3QgdGNwX3R3X2J1Y2tldC4KKyAgKi8KK3N0cnVjdCBzb2NrX2NvbW1vbiB7CisJdW5zaWduZWQgc2hvcnQJCXNrY19mYW1pbHk7CisJdm9sYXRpbGUgdW5zaWduZWQgY2hhcglza2Nfc3RhdGU7CisJdW5zaWduZWQgY2hhcgkJc2tjX3JldXNlOworCWludAkJCXNrY19ib3VuZF9kZXZfaWY7CisJc3RydWN0IGhsaXN0X25vZGUJc2tjX25vZGU7CisJc3RydWN0IGhsaXN0X25vZGUJc2tjX2JpbmRfbm9kZTsKKwlhdG9taWNfdAkJc2tjX3JlZmNudDsKK307CisKKy8qKgorICAqCXN0cnVjdCBzb2NrIC0gbmV0d29yayBsYXllciByZXByZXNlbnRhdGlvbiBvZiBzb2NrZXRzCisgICoJQF9fc2tfY29tbW9uIC0gc2hhcmVkIGxheW91dCB3aXRoIHRjcF90d19idWNrZXQKKyAgKglAc2tfc2h1dGRvd24gLSBtYXNrIG9mICVTRU5EX1NIVVRET1dOIGFuZC9vciAlUkNWX1NIVVRET1dOCisgICoJQHNrX3VzZXJsb2NrcyAtICVTT19TTkRCVUYgYW5kICVTT19SQ1ZCVUYgc2V0dGluZ3MKKyAgKglAc2tfbG9jayAtCXN5bmNocm9uaXplcgorICAqCUBza19yY3ZidWYgLSBzaXplIG9mIHJlY2VpdmUgYnVmZmVyIGluIGJ5dGVzCisgICoJQHNrX3NsZWVwIC0gc29jayB3YWl0IHF1ZXVlCisgICoJQHNrX2RzdF9jYWNoZSAtIGRlc3RpbmF0aW9uIGNhY2hlCisgICoJQHNrX2RzdF9sb2NrIC0gZGVzdGluYXRpb24gY2FjaGUgbG9jaworICAqCUBza19wb2xpY3kgLSBmbG93IHBvbGljeQorICAqCUBza19ybWVtX2FsbG9jIC0gcmVjZWl2ZSBxdWV1ZSBieXRlcyBjb21taXR0ZWQKKyAgKglAc2tfcmVjZWl2ZV9xdWV1ZSAtIGluY29taW5nIHBhY2tldHMKKyAgKglAc2tfd21lbV9hbGxvYyAtIHRyYW5zbWl0IHF1ZXVlIGJ5dGVzIGNvbW1pdHRlZAorICAqCUBza193cml0ZV9xdWV1ZSAtIFBhY2tldCBzZW5kaW5nIHF1ZXVlCisgICoJQHNrX29tZW1fYWxsb2MgLSAibyIgaXMgIm9wdGlvbiIgb3IgIm90aGVyIgorICAqCUBza193bWVtX3F1ZXVlZCAtIHBlcnNpc3RlbnQgcXVldWUgc2l6ZQorICAqCUBza19mb3J3YXJkX2FsbG9jIC0gc3BhY2UgYWxsb2NhdGVkIGZvcndhcmQKKyAgKglAc2tfYWxsb2NhdGlvbiAtIGFsbG9jYXRpb24gbW9kZQorICAqCUBza19zbmRidWYgLSBzaXplIG9mIHNlbmQgYnVmZmVyIGluIGJ5dGVzCisgICoJQHNrX2ZsYWdzIC0gJVNPX0xJTkdFUiAobF9vbm9mZiksICVTT19CUk9BRENBU1QsICVTT19LRUVQQUxJVkUsICVTT19PT0JJTkxJTkUgc2V0dGluZ3MKKyAgKglAc2tfbm9fY2hlY2sgLSAlU09fTk9fQ0hFQ0sgc2V0dGluZywgd2V0aGVyIG9yIG5vdCBjaGVja3VwIHBhY2tldHMKKyAgKglAc2tfcm91dGVfY2FwcyAtIHJvdXRlIGNhcGFiaWxpdGllcyAoZS5nLiAlTkVUSUZfRl9UU08pCisgICoJQHNrX2xpbmdlcnRpbWUgLSAlU09fTElOR0VSIGxfbGluZ2VyIHNldHRpbmcKKyAgKglAc2tfaGFzaGVudCAtIGhhc2ggZW50cnkgaW4gc2V2ZXJhbCB0YWJsZXMgKGUuZy4gdGNwX2VoYXNoKQorICAqCUBza19iYWNrbG9nIC0gYWx3YXlzIHVzZWQgd2l0aCB0aGUgcGVyLXNvY2tldCBzcGlubG9jayBoZWxkCisgICoJQHNrX2NhbGxiYWNrX2xvY2sgLSB1c2VkIHdpdGggdGhlIGNhbGxiYWNrcyBpbiB0aGUgZW5kIG9mIHRoaXMgc3RydWN0CisgICoJQHNrX2Vycm9yX3F1ZXVlIC0gcmFyZWx5IHVzZWQKKyAgKglAc2tfcHJvdCAtIHByb3RvY29sIGhhbmRsZXJzIGluc2lkZSBhIG5ldHdvcmsgZmFtaWx5CisgICoJQHNrX2VyciAtIGxhc3QgZXJyb3IKKyAgKglAc2tfZXJyX3NvZnQgLSBlcnJvcnMgdGhhdCBkb24ndCBjYXVzZSBmYWlsdXJlIGJ1dCBhcmUgdGhlIGNhdXNlIG9mIGEgcGVyc2lzdGVudCBmYWlsdXJlIG5vdCBqdXN0ICd0aW1lZCBvdXQnCisgICoJQHNrX2Fja19iYWNrbG9nIC0gY3VycmVudCBsaXN0ZW4gYmFja2xvZworICAqCUBza19tYXhfYWNrX2JhY2tsb2cgLSBsaXN0ZW4gYmFja2xvZyBzZXQgaW4gbGlzdGVuKCkKKyAgKglAc2tfcHJpb3JpdHkgLSAlU09fUFJJT1JJVFkgc2V0dGluZworICAqCUBza190eXBlIC0gc29ja2V0IHR5cGUgKCVTT0NLX1NUUkVBTSwgZXRjKQorICAqCUBza19wcm90b2NvbCAtIHdoaWNoIHByb3RvY29sIHRoaXMgc29ja2V0IGJlbG9uZ3MgaW4gdGhpcyBuZXR3b3JrIGZhbWlseQorICAqCUBza19wZWVyY3JlZCAtICVTT19QRUVSQ1JFRCBzZXR0aW5nCisgICoJQHNrX3Jjdmxvd2F0IC0gJVNPX1JDVkxPV0FUIHNldHRpbmcKKyAgKglAc2tfcmN2dGltZW8gLSAlU09fUkNWVElNRU8gc2V0dGluZworICAqCUBza19zbmR0aW1lbyAtICVTT19TTkRUSU1FTyBzZXR0aW5nCisgICoJQHNrX2ZpbHRlciAtIHNvY2tldCBmaWx0ZXJpbmcgaW5zdHJ1Y3Rpb25zCisgICoJQHNrX3Byb3RpbmZvIC0gcHJpdmF0ZSBhcmVhLCBuZXQgZmFtaWx5IHNwZWNpZmljLCB3aGVuIG5vdCB1c2luZyBzbGFiCisgICoJQHNrX3RpbWVyIC0gc29jayBjbGVhbnVwIHRpbWVyCisgICoJQHNrX3N0YW1wIC0gdGltZSBzdGFtcCBvZiBsYXN0IHBhY2tldCByZWNlaXZlZAorICAqCUBza19zb2NrZXQgLSBJZGVudGQgYW5kIHJlcG9ydGluZyBJTyBzaWduYWxzCisgICoJQHNrX3VzZXJfZGF0YSAtIFJQQyBsYXllciBwcml2YXRlIGRhdGEKKyAgKglAc2tfc25kbXNnX3BhZ2UgLSBjYWNoZWQgcGFnZSBmb3Igc2VuZG1zZworICAqCUBza19zbmRtc2dfb2ZmIC0gY2FjaGVkIG9mZnNldCBmb3Igc2VuZG1zZworICAqCUBza19zZW5kX2hlYWQgLSBmcm9udCBvZiBzdHVmZiB0byB0cmFuc21pdAorICAqCUBza193cml0ZV9wZW5kaW5nIC0gYSB3cml0ZSB0byBzdHJlYW0gc29ja2V0IHdhaXRzIHRvIHN0YXJ0CisgICoJQHNrX3N0YXRlX2NoYW5nZSAtIGNhbGxiYWNrIHRvIGluZGljYXRlIGNoYW5nZSBpbiB0aGUgc3RhdGUgb2YgdGhlIHNvY2sKKyAgKglAc2tfZGF0YV9yZWFkeSAtIGNhbGxiYWNrIHRvIGluZGljYXRlIHRoZXJlIGlzIGRhdGEgdG8gYmUgcHJvY2Vzc2VkCisgICoJQHNrX3dyaXRlX3NwYWNlIC0gY2FsbGJhY2sgdG8gaW5kaWNhdGUgdGhlcmUgaXMgYmYgc2VuZGluZyBzcGFjZSBhdmFpbGFibGUKKyAgKglAc2tfZXJyb3JfcmVwb3J0IC0gY2FsbGJhY2sgdG8gaW5kaWNhdGUgZXJyb3JzIChlLmcuICVNU0dfRVJSUVVFVUUpCisgICoJQHNrX2JhY2tsb2dfcmN2IC0gY2FsbGJhY2sgdG8gcHJvY2VzcyB0aGUgYmFja2xvZworICAqCUBza19kZXN0cnVjdCAtIGNhbGxlZCBhdCBzb2NrIGZyZWVpbmcgdGltZSwgaS5lLiB3aGVuIGFsbCByZWZjbnQgPT0gMAorICovCitzdHJ1Y3Qgc29jayB7CisJLyoKKwkgKiBOb3cgc3RydWN0IHRjcF90d19idWNrZXQgYWxzbyB1c2VzIHNvY2tfY29tbW9uLCBzbyBwbGVhc2UganVzdAorCSAqIGRvbid0IGFkZCBub3RoaW5nIGJlZm9yZSB0aGlzIGZpcnN0IG1lbWJlciAoX19za19jb21tb24pIC0tYWNtZQorCSAqLworCXN0cnVjdCBzb2NrX2NvbW1vbglfX3NrX2NvbW1vbjsKKyNkZWZpbmUgc2tfZmFtaWx5CQlfX3NrX2NvbW1vbi5za2NfZmFtaWx5CisjZGVmaW5lIHNrX3N0YXRlCQlfX3NrX2NvbW1vbi5za2Nfc3RhdGUKKyNkZWZpbmUgc2tfcmV1c2UJCV9fc2tfY29tbW9uLnNrY19yZXVzZQorI2RlZmluZSBza19ib3VuZF9kZXZfaWYJCV9fc2tfY29tbW9uLnNrY19ib3VuZF9kZXZfaWYKKyNkZWZpbmUgc2tfbm9kZQkJCV9fc2tfY29tbW9uLnNrY19ub2RlCisjZGVmaW5lIHNrX2JpbmRfbm9kZQkJX19za19jb21tb24uc2tjX2JpbmRfbm9kZQorI2RlZmluZSBza19yZWZjbnQJCV9fc2tfY29tbW9uLnNrY19yZWZjbnQKKwl1bnNpZ25lZCBjaGFyCQlza19zaHV0ZG93biA6IDIsCisJCQkJc2tfbm9fY2hlY2sgOiAyLAorCQkJCXNrX3VzZXJsb2NrcyA6IDQ7CisJdW5zaWduZWQgY2hhcgkJc2tfcHJvdG9jb2w7CisJdW5zaWduZWQgc2hvcnQJCXNrX3R5cGU7CisJaW50CQkJc2tfcmN2YnVmOworCXNvY2tldF9sb2NrX3QJCXNrX2xvY2s7CisJd2FpdF9xdWV1ZV9oZWFkX3QJKnNrX3NsZWVwOworCXN0cnVjdCBkc3RfZW50cnkJKnNrX2RzdF9jYWNoZTsKKwlzdHJ1Y3QgeGZybV9wb2xpY3kJKnNrX3BvbGljeVsyXTsKKwlyd2xvY2tfdAkJc2tfZHN0X2xvY2s7CisJYXRvbWljX3QJCXNrX3JtZW1fYWxsb2M7CisJYXRvbWljX3QJCXNrX3dtZW1fYWxsb2M7CisJYXRvbWljX3QJCXNrX29tZW1fYWxsb2M7CisJc3RydWN0IHNrX2J1ZmZfaGVhZAlza19yZWNlaXZlX3F1ZXVlOworCXN0cnVjdCBza19idWZmX2hlYWQJc2tfd3JpdGVfcXVldWU7CisJaW50CQkJc2tfd21lbV9xdWV1ZWQ7CisJaW50CQkJc2tfZm9yd2FyZF9hbGxvYzsKKwl1bnNpZ25lZCBpbnQJCXNrX2FsbG9jYXRpb247CisJaW50CQkJc2tfc25kYnVmOworCWludAkJCXNrX3JvdXRlX2NhcHM7CisJaW50CQkJc2tfaGFzaGVudDsKKwl1bnNpZ25lZCBsb25nIAkJc2tfZmxhZ3M7CisJdW5zaWduZWQgbG9uZwkgICAgICAgIHNrX2xpbmdlcnRpbWU7CisJLyoKKwkgKiBUaGUgYmFja2xvZyBxdWV1ZSBpcyBzcGVjaWFsLCBpdCBpcyBhbHdheXMgdXNlZCB3aXRoCisJICogdGhlIHBlci1zb2NrZXQgc3BpbmxvY2sgaGVsZCBhbmQgcmVxdWlyZXMgbG93IGxhdGVuY3kKKwkgKiBhY2Nlc3MuIFRoZXJlZm9yZSB3ZSBzcGVjaWFsIGNhc2UgaXQncyBpbXBsZW1lbnRhdGlvbi4KKwkgKi8KKwlzdHJ1Y3QgeworCQlzdHJ1Y3Qgc2tfYnVmZiAqaGVhZDsKKwkJc3RydWN0IHNrX2J1ZmYgKnRhaWw7CisJfSBza19iYWNrbG9nOworCXN0cnVjdCBza19idWZmX2hlYWQJc2tfZXJyb3JfcXVldWU7CisJc3RydWN0IHByb3RvCQkqc2tfcHJvdDsKKwlyd2xvY2tfdAkJc2tfY2FsbGJhY2tfbG9jazsKKwlpbnQJCQlza19lcnIsCisJCQkJc2tfZXJyX3NvZnQ7CisJdW5zaWduZWQgc2hvcnQJCXNrX2Fja19iYWNrbG9nOworCXVuc2lnbmVkIHNob3J0CQlza19tYXhfYWNrX2JhY2tsb2c7CisJX191MzIJCQlza19wcmlvcml0eTsKKwlzdHJ1Y3QgdWNyZWQJCXNrX3BlZXJjcmVkOworCWludAkJCXNrX3Jjdmxvd2F0OworCWxvbmcJCQlza19yY3Z0aW1lbzsKKwlsb25nCQkJc2tfc25kdGltZW87CisJc3RydWN0IHNrX2ZpbHRlciAgICAgIAkqc2tfZmlsdGVyOworCXZvaWQJCQkqc2tfcHJvdGluZm87CisJc3RydWN0IHRpbWVyX2xpc3QJc2tfdGltZXI7CisJc3RydWN0IHRpbWV2YWwJCXNrX3N0YW1wOworCXN0cnVjdCBzb2NrZXQJCSpza19zb2NrZXQ7CisJdm9pZAkJCSpza191c2VyX2RhdGE7CisJc3RydWN0IHBhZ2UJCSpza19zbmRtc2dfcGFnZTsKKwlzdHJ1Y3Qgc2tfYnVmZgkJKnNrX3NlbmRfaGVhZDsKKwlfX3UzMgkJCXNrX3NuZG1zZ19vZmY7CisJaW50CQkJc2tfd3JpdGVfcGVuZGluZzsKKwl2b2lkCQkJKnNrX3NlY3VyaXR5OworCXZvaWQJCQkoKnNrX3N0YXRlX2NoYW5nZSkoc3RydWN0IHNvY2sgKnNrKTsKKwl2b2lkCQkJKCpza19kYXRhX3JlYWR5KShzdHJ1Y3Qgc29jayAqc2ssIGludCBieXRlcyk7CisJdm9pZAkJCSgqc2tfd3JpdGVfc3BhY2UpKHN0cnVjdCBzb2NrICpzayk7CisJdm9pZAkJCSgqc2tfZXJyb3JfcmVwb3J0KShzdHJ1Y3Qgc29jayAqc2spOworICAJaW50CQkJKCpza19iYWNrbG9nX3Jjdikoc3RydWN0IHNvY2sgKnNrLAorCQkJCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsgIAorCXZvaWQgICAgICAgICAgICAgICAgICAgICgqc2tfZGVzdHJ1Y3QpKHN0cnVjdCBzb2NrICpzayk7Cit9OworCisvKgorICogSGFzaGVkIGxpc3RzIGhlbHBlciByb3V0aW5lcworICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzb2NrICpfX3NrX2hlYWQoc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQpCit7CisJcmV0dXJuIGhsaXN0X2VudHJ5KGhlYWQtPmZpcnN0LCBzdHJ1Y3Qgc29jaywgc2tfbm9kZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNvY2sgKnNrX2hlYWQoc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQpCit7CisJcmV0dXJuIGhsaXN0X2VtcHR5KGhlYWQpID8gTlVMTCA6IF9fc2tfaGVhZChoZWFkKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc29jayAqc2tfbmV4dChzdHJ1Y3Qgc29jayAqc2spCit7CisJcmV0dXJuIHNrLT5za19ub2RlLm5leHQgPworCQlobGlzdF9lbnRyeShzay0+c2tfbm9kZS5uZXh0LCBzdHJ1Y3Qgc29jaywgc2tfbm9kZSkgOiBOVUxMOworfQorCitzdGF0aWMgaW5saW5lIGludCBza191bmhhc2hlZChzdHJ1Y3Qgc29jayAqc2spCit7CisJcmV0dXJuIGhsaXN0X3VuaGFzaGVkKCZzay0+c2tfbm9kZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNrX2hhc2hlZChzdHJ1Y3Qgc29jayAqc2spCit7CisJcmV0dXJuIHNrLT5za19ub2RlLnBwcmV2ICE9IE5VTEw7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgc2tfbm9kZV9pbml0KHN0cnVjdCBobGlzdF9ub2RlICpub2RlKQoreworCW5vZGUtPnBwcmV2ID0gTlVMTDsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX3NrX2RlbF9ub2RlKHN0cnVjdCBzb2NrICpzaykKK3sKKwlfX2hsaXN0X2RlbCgmc2stPnNrX25vZGUpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19za19kZWxfbm9kZV9pbml0KHN0cnVjdCBzb2NrICpzaykKK3sKKwlpZiAoc2tfaGFzaGVkKHNrKSkgeworCQlfX3NrX2RlbF9ub2RlKHNrKTsKKwkJc2tfbm9kZV9pbml0KCZzay0+c2tfbm9kZSk7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworLyogR3JhYiBzb2NrZXQgcmVmZXJlbmNlIGNvdW50LiBUaGlzIG9wZXJhdGlvbiBpcyB2YWxpZCBvbmx5CisgICB3aGVuIHNrIGlzIEFMUkVBRFkgZ3JhYmJlZCBmLmUuIGl0IGlzIGZvdW5kIGluIGhhc2ggdGFibGUKKyAgIG9yIGEgbGlzdCBhbmQgdGhlIGxvb2t1cCBpcyBtYWRlIHVuZGVyIGxvY2sgcHJldmVudGluZyBoYXNoIHRhYmxlCisgICBtb2RpZmljYXRpb25zLgorICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzb2NrX2hvbGQoc3RydWN0IHNvY2sgKnNrKQoreworCWF0b21pY19pbmMoJnNrLT5za19yZWZjbnQpOworfQorCisvKiBVbmdyYWIgc29ja2V0IGluIHRoZSBjb250ZXh0LCB3aGljaCBhc3N1bWVzIHRoYXQgc29ja2V0IHJlZmNudAorICAgY2Fubm90IGhpdCB6ZXJvLCBmLmUuIGl0IGlzIHRydWUgaW4gY29udGV4dCBvZiBhbnkgc29ja2V0Y2FsbC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIF9fc29ja19wdXQoc3RydWN0IHNvY2sgKnNrKQoreworCWF0b21pY19kZWMoJnNrLT5za19yZWZjbnQpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgc2tfZGVsX25vZGVfaW5pdChzdHJ1Y3Qgc29jayAqc2spCit7CisJaW50IHJjID0gX19za19kZWxfbm9kZV9pbml0KHNrKTsKKworCWlmIChyYykgeworCQkvKiBwYXJhbm9pZCBmb3IgYSB3aGlsZSAtYWNtZSAqLworCQlXQVJOX09OKGF0b21pY19yZWFkKCZzay0+c2tfcmVmY250KSA9PSAxKTsKKwkJX19zb2NrX3B1dChzayk7CisJfQorCXJldHVybiByYzsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX3NrX2FkZF9ub2RlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGhsaXN0X2hlYWQgKmxpc3QpCit7CisJaGxpc3RfYWRkX2hlYWQoJnNrLT5za19ub2RlLCBsaXN0KTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBza19hZGRfbm9kZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBobGlzdF9oZWFkICpsaXN0KQoreworCXNvY2tfaG9sZChzayk7CisJX19za19hZGRfbm9kZShzaywgbGlzdCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19za19kZWxfYmluZF9ub2RlKHN0cnVjdCBzb2NrICpzaykKK3sKKwlfX2hsaXN0X2RlbCgmc2stPnNrX2JpbmRfbm9kZSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgc2tfYWRkX2JpbmRfbm9kZShzdHJ1Y3Qgc29jayAqc2ssCisJCQkJCXN0cnVjdCBobGlzdF9oZWFkICpsaXN0KQoreworCWhsaXN0X2FkZF9oZWFkKCZzay0+c2tfYmluZF9ub2RlLCBsaXN0KTsKK30KKworI2RlZmluZSBza19mb3JfZWFjaChfX3NrLCBub2RlLCBsaXN0KSBcCisJaGxpc3RfZm9yX2VhY2hfZW50cnkoX19zaywgbm9kZSwgbGlzdCwgc2tfbm9kZSkKKyNkZWZpbmUgc2tfZm9yX2VhY2hfZnJvbShfX3NrLCBub2RlKSBcCisJaWYgKF9fc2sgJiYgKHsgbm9kZSA9ICYoX19zayktPnNrX25vZGU7IDE7IH0pKSBcCisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X2Zyb20oX19zaywgbm9kZSwgc2tfbm9kZSkKKyNkZWZpbmUgc2tfZm9yX2VhY2hfY29udGludWUoX19zaywgbm9kZSkgXAorCWlmIChfX3NrICYmICh7IG5vZGUgPSAmKF9fc2spLT5za19ub2RlOyAxOyB9KSkgXAorCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZShfX3NrLCBub2RlLCBza19ub2RlKQorI2RlZmluZSBza19mb3JfZWFjaF9zYWZlKF9fc2ssIG5vZGUsIHRtcCwgbGlzdCkgXAorCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoX19zaywgbm9kZSwgdG1wLCBsaXN0LCBza19ub2RlKQorI2RlZmluZSBza19mb3JfZWFjaF9ib3VuZChfX3NrLCBub2RlLCBsaXN0KSBcCisJaGxpc3RfZm9yX2VhY2hfZW50cnkoX19zaywgbm9kZSwgbGlzdCwgc2tfYmluZF9ub2RlKQorCisvKiBTb2NrIGZsYWdzICovCitlbnVtIHNvY2tfZmxhZ3MgeworCVNPQ0tfREVBRCwKKwlTT0NLX0RPTkUsCisJU09DS19VUkdJTkxJTkUsCisJU09DS19LRUVQT1BFTiwKKwlTT0NLX0xJTkdFUiwKKwlTT0NLX0RFU1RST1ksCisJU09DS19CUk9BRENBU1QsCisJU09DS19USU1FU1RBTVAsCisJU09DS19aQVBQRUQsCisJU09DS19VU0VfV1JJVEVfUVVFVUUsIC8qIHdoZXRoZXIgdG8gY2FsbCBzay0+c2tfd3JpdGVfc3BhY2UgaW4gc29ja193ZnJlZSAqLworCVNPQ0tfREJHLCAvKiAlU09fREVCVUcgc2V0dGluZyAqLworCVNPQ0tfUkNWVFNUQU1QLCAvKiAlU09fVElNRVNUQU1QIHNldHRpbmcgKi8KKwlTT0NLX05PX0xBUkdFU0VORCwgLyogd2hldGhlciB0byBzZW50IGxhcmdlIHNlZ21lbnRzIG9yIG5vdCAqLworCVNPQ0tfTE9DQUxST1VURSwgLyogcm91dGUgbG9jYWxseSBvbmx5LCAlU09fRE9OVFJPVVRFIHNldHRpbmcgKi8KKwlTT0NLX1FVRVVFX1NIUlVOSywgLyogd3JpdGUgcXVldWUgaGFzIGJlZW4gc2hydW5rIHJlY2VudGx5ICovCit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgc29ja19zZXRfZmxhZyhzdHJ1Y3Qgc29jayAqc2ssIGVudW0gc29ja19mbGFncyBmbGFnKQoreworCV9fc2V0X2JpdChmbGFnLCAmc2stPnNrX2ZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNvY2tfcmVzZXRfZmxhZyhzdHJ1Y3Qgc29jayAqc2ssIGVudW0gc29ja19mbGFncyBmbGFnKQoreworCV9fY2xlYXJfYml0KGZsYWcsICZzay0+c2tfZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIGludCBzb2NrX2ZsYWcoc3RydWN0IHNvY2sgKnNrLCBlbnVtIHNvY2tfZmxhZ3MgZmxhZykKK3sKKwlyZXR1cm4gdGVzdF9iaXQoZmxhZywgJnNrLT5za19mbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBza19hY2NlcHRxX3JlbW92ZWQoc3RydWN0IHNvY2sgKnNrKQoreworCXNrLT5za19hY2tfYmFja2xvZy0tOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2tfYWNjZXB0cV9hZGRlZChzdHJ1Y3Qgc29jayAqc2spCit7CisJc2stPnNrX2Fja19iYWNrbG9nKys7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNrX2FjY2VwdHFfaXNfZnVsbChzdHJ1Y3Qgc29jayAqc2spCit7CisJcmV0dXJuIHNrLT5za19hY2tfYmFja2xvZyA+IHNrLT5za19tYXhfYWNrX2JhY2tsb2c7Cit9CisKKy8qCisgKiBDb21wdXRlIG1pbmltYWwgZnJlZSB3cml0ZSBzcGFjZSBuZWVkZWQgdG8gcXVldWUgbmV3IHBhY2tldHMuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHNrX3N0cmVhbV9taW5fd3NwYWNlKHN0cnVjdCBzb2NrICpzaykKK3sKKwlyZXR1cm4gc2stPnNrX3dtZW1fcXVldWVkIC8gMjsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2tfc3RyZWFtX3dzcGFjZShzdHJ1Y3Qgc29jayAqc2spCit7CisJcmV0dXJuIHNrLT5za19zbmRidWYgLSBzay0+c2tfd21lbV9xdWV1ZWQ7Cit9CisKK2V4dGVybiB2b2lkIHNrX3N0cmVhbV93cml0ZV9zcGFjZShzdHJ1Y3Qgc29jayAqc2spOworCitzdGF0aWMgaW5saW5lIGludCBza19zdHJlYW1fbWVtb3J5X2ZyZWUoc3RydWN0IHNvY2sgKnNrKQoreworCXJldHVybiBzay0+c2tfd21lbV9xdWV1ZWQgPCBzay0+c2tfc25kYnVmOworfQorCitleHRlcm4gdm9pZCBza19zdHJlYW1fcmZyZWUoc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBza19zdHJlYW1fc2V0X293bmVyX3Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrKQoreworCXNrYi0+c2sgPSBzazsKKwlza2ItPmRlc3RydWN0b3IgPSBza19zdHJlYW1fcmZyZWU7CisJYXRvbWljX2FkZChza2ItPnRydWVzaXplLCAmc2stPnNrX3JtZW1fYWxsb2MpOworCXNrLT5za19mb3J3YXJkX2FsbG9jIC09IHNrYi0+dHJ1ZXNpemU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBza19zdHJlYW1fZnJlZV9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXNvY2tfc2V0X2ZsYWcoc2ssIFNPQ0tfUVVFVUVfU0hSVU5LKTsKKwlzay0+c2tfd21lbV9xdWV1ZWQgICAtPSBza2ItPnRydWVzaXplOworCXNrLT5za19mb3J3YXJkX2FsbG9jICs9IHNrYi0+dHJ1ZXNpemU7CisJX19rZnJlZV9za2Ioc2tiKTsKK30KKworLyogVGhlIHBlci1zb2NrZXQgc3BpbmxvY2sgbXVzdCBiZSBoZWxkIGhlcmUuICovCisjZGVmaW5lIHNrX2FkZF9iYWNrbG9nKF9fc2ssIF9fc2tiKQkJCQlcCitkbyB7CWlmICghKF9fc2spLT5za19iYWNrbG9nLnRhaWwpIHsJCQkJXAorCQkoX19zayktPnNrX2JhY2tsb2cuaGVhZCA9CQkJXAorCQkgICAgIChfX3NrKS0+c2tfYmFja2xvZy50YWlsID0gKF9fc2tiKTsJCVwKKwl9IGVsc2UgewkJCQkJCVwKKwkJKChfX3NrKS0+c2tfYmFja2xvZy50YWlsKS0+bmV4dCA9IChfX3NrYik7CVwKKwkJKF9fc2spLT5za19iYWNrbG9nLnRhaWwgPSAoX19za2IpOwkJXAorCX0JCQkJCQkJXAorCShfX3NrYiktPm5leHQgPSBOVUxMOwkJCQkJXAorfSB3aGlsZSgwKQorCisjZGVmaW5lIHNrX3dhaXRfZXZlbnQoX19zaywgX190aW1lbywgX19jb25kaXRpb24pCQlcCisoewlpbnQgcmM7CQkJCQkJCVwKKwlyZWxlYXNlX3NvY2soX19zayk7CQkJCQlcCisJcmMgPSBfX2NvbmRpdGlvbjsJCQkJCVwKKwlpZiAoIXJjKSB7CQkJCQkJXAorCQkqKF9fdGltZW8pID0gc2NoZWR1bGVfdGltZW91dCgqKF9fdGltZW8pKTsJXAorCQlyYyA9IF9fY29uZGl0aW9uOwkJCQlcCisJfQkJCQkJCQlcCisJbG9ja19zb2NrKF9fc2spOwkJCQkJXAorCXJjOwkJCQkJCQlcCit9KQorCitleHRlcm4gaW50IHNrX3N0cmVhbV93YWl0X2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrLCBsb25nICp0aW1lb19wKTsKK2V4dGVybiBpbnQgc2tfc3RyZWFtX3dhaXRfbWVtb3J5KHN0cnVjdCBzb2NrICpzaywgbG9uZyAqdGltZW9fcCk7CitleHRlcm4gdm9pZCBza19zdHJlYW1fd2FpdF9jbG9zZShzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgdGltZW9fcCk7CitleHRlcm4gaW50IHNrX3N0cmVhbV9lcnJvcihzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncywgaW50IGVycik7CitleHRlcm4gdm9pZCBza19zdHJlYW1fa2lsbF9xdWV1ZXMoc3RydWN0IHNvY2sgKnNrKTsKKworZXh0ZXJuIGludCBza193YWl0X2RhdGEoc3RydWN0IHNvY2sgKnNrLCBsb25nICp0aW1lbyk7CisKKy8qIE5ldHdvcmtpbmcgcHJvdG9jb2wgYmxvY2tzIHdlIGF0dGFjaCB0byBzb2NrZXRzLgorICogc29ja2V0IGxheWVyIC0+IHRyYW5zcG9ydCBsYXllciBpbnRlcmZhY2UKKyAqIHRyYW5zcG9ydCAtPiBuZXR3b3JrIGludGVyZmFjZSBpcyBkZWZpbmVkIGJ5IHN0cnVjdCBpbmV0X3Byb3RvCisgKi8KK3N0cnVjdCBwcm90byB7CisJdm9pZAkJCSgqY2xvc2UpKHN0cnVjdCBzb2NrICpzaywgCisJCQkJCWxvbmcgdGltZW91dCk7CisJaW50CQkJKCpjb25uZWN0KShzdHJ1Y3Qgc29jayAqc2ssCisJCQkJICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKnVhZGRyLCAKKwkJCQkJaW50IGFkZHJfbGVuKTsKKwlpbnQJCQkoKmRpc2Nvbm5lY3QpKHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWdzKTsKKworCXN0cnVjdCBzb2NrICoJCSgqYWNjZXB0KSAoc3RydWN0IHNvY2sgKnNrLCBpbnQgZmxhZ3MsIGludCAqZXJyKTsKKworCWludAkJCSgqaW9jdGwpKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgYXJnKTsKKwlpbnQJCQkoKmluaXQpKHN0cnVjdCBzb2NrICpzayk7CisJaW50CQkJKCpkZXN0cm95KShzdHJ1Y3Qgc29jayAqc2spOworCXZvaWQJCQkoKnNodXRkb3duKShzdHJ1Y3Qgc29jayAqc2ssIGludCBob3cpOworCWludAkJCSgqc2V0c29ja29wdCkoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIAorCQkJCQlpbnQgb3B0bmFtZSwgY2hhciBfX3VzZXIgKm9wdHZhbCwKKwkJCQkJaW50IG9wdGxlbik7CisJaW50CQkJKCpnZXRzb2Nrb3B0KShzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgCisJCQkJCWludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqb3B0dmFsLCAKKwkJCQkJaW50IF9fdXNlciAqb3B0aW9uKTsgIAkgCisJaW50CQkJKCpzZW5kbXNnKShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBzb2NrICpzaywKKwkJCQkJICAgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKTsKKwlpbnQJCQkoKnJlY3Ztc2cpKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IHNvY2sgKnNrLAorCQkJCQkgICBzdHJ1Y3QgbXNnaGRyICptc2csCisJCQkJCXNpemVfdCBsZW4sIGludCBub2Jsb2NrLCBpbnQgZmxhZ3MsIAorCQkJCQlpbnQgKmFkZHJfbGVuKTsKKwlpbnQJCQkoKnNlbmRwYWdlKShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJCQlpbnQgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKTsKKwlpbnQJCQkoKmJpbmQpKHN0cnVjdCBzb2NrICpzaywgCisJCQkJCXN0cnVjdCBzb2NrYWRkciAqdWFkZHIsIGludCBhZGRyX2xlbik7CisKKwlpbnQJCQkoKmJhY2tsb2dfcmN2KSAoc3RydWN0IHNvY2sgKnNrLCAKKwkJCQkJCXN0cnVjdCBza19idWZmICpza2IpOworCisJLyogS2VlcGluZyB0cmFjayBvZiBzaydzLCBsb29raW5nIHRoZW0gdXAsIGFuZCBwb3J0IHNlbGVjdGlvbiBtZXRob2RzLiAqLworCXZvaWQJCQkoKmhhc2gpKHN0cnVjdCBzb2NrICpzayk7CisJdm9pZAkJCSgqdW5oYXNoKShzdHJ1Y3Qgc29jayAqc2spOworCWludAkJCSgqZ2V0X3BvcnQpKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgc251bSk7CisKKwkvKiBNZW1vcnkgcHJlc3N1cmUgKi8KKwl2b2lkCQkJKCplbnRlcl9tZW1vcnlfcHJlc3N1cmUpKHZvaWQpOworCWF0b21pY190CQkqbWVtb3J5X2FsbG9jYXRlZDsJLyogQ3VycmVudCBhbGxvY2F0ZWQgbWVtb3J5LiAqLworCWF0b21pY190CQkqc29ja2V0c19hbGxvY2F0ZWQ7CS8qIEN1cnJlbnQgbnVtYmVyIG9mIHNvY2tldHMuICovCisJLyoKKwkgKiBQcmVzc3VyZSBmbGFnOiB0cnkgdG8gY29sbGFwc2UuCisJICogVGVjaG5pY2FsIG5vdGU6IGl0IGlzIHVzZWQgYnkgbXVsdGlwbGUgY29udGV4dHMgbm9uIGF0b21pY2FsbHkuCisJICogQWxsIHRoZSBza19zdHJlYW1fbWVtX3NjaGVkdWxlKCkgaXMgb2YgdGhpcyBuYXR1cmU6IGFjY291bnRpbmcKKwkgKiBpcyBzdHJpY3QsIGFjdGlvbnMgYXJlIGFkdmlzb3J5IGFuZCBoYXZlIHNvbWUgbGF0ZW5jeS4KKwkgKi8KKwlpbnQJCQkqbWVtb3J5X3ByZXNzdXJlOworCWludAkJCSpzeXNjdGxfbWVtOworCWludAkJCSpzeXNjdGxfd21lbTsKKwlpbnQJCQkqc3lzY3RsX3JtZW07CisJaW50CQkJbWF4X2hlYWRlcjsKKworCWttZW1fY2FjaGVfdAkJKnNsYWI7CisJdW5zaWduZWQgaW50CQlvYmpfc2l6ZTsKKworCXN0cnVjdCBtb2R1bGUJCSpvd25lcjsKKworCWNoYXIJCQluYW1lWzMyXTsKKworCXN0cnVjdCBsaXN0X2hlYWQJbm9kZTsKKworCXN0cnVjdCB7CisJCWludCBpbnVzZTsKKwkJdTggIF9fcGFkW1NNUF9DQUNIRV9CWVRFUyAtIHNpemVvZihpbnQpXTsKKwl9IHN0YXRzW05SX0NQVVNdOworfTsKKworZXh0ZXJuIGludCBwcm90b19yZWdpc3RlcihzdHJ1Y3QgcHJvdG8gKnByb3QsIGludCBhbGxvY19zbGFiKTsKK2V4dGVybiB2b2lkIHByb3RvX3VucmVnaXN0ZXIoc3RydWN0IHByb3RvICpwcm90KTsKKworLyogQ2FsbGVkIHdpdGggbG9jYWwgYmggZGlzYWJsZWQgKi8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgc29ja19wcm90X2luY191c2Uoc3RydWN0IHByb3RvICpwcm90KQoreworCXByb3QtPnN0YXRzW3NtcF9wcm9jZXNzb3JfaWQoKV0uaW51c2UrKzsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBzb2NrX3Byb3RfZGVjX3VzZShzdHJ1Y3QgcHJvdG8gKnByb3QpCit7CisJcHJvdC0+c3RhdHNbc21wX3Byb2Nlc3Nvcl9pZCgpXS5pbnVzZS0tOworfQorCisvKiBBYm91dCAxMCBzZWNvbmRzICovCisjZGVmaW5lIFNPQ0tfREVTVFJPWV9USU1FICgxMCpIWikKKworLyogU29ja2V0cyAwLTEwMjMgY2FuJ3QgYmUgYm91bmQgdG8gdW5sZXNzIHlvdSBhcmUgc3VwZXJ1c2VyICovCisjZGVmaW5lIFBST1RfU09DSwkxMDI0CisKKyNkZWZpbmUgU0hVVERPV05fTUFTSwkzCisjZGVmaW5lIFJDVl9TSFVURE9XTgkxCisjZGVmaW5lIFNFTkRfU0hVVERPV04JMgorCisjZGVmaW5lIFNPQ0tfU05EQlVGX0xPQ0sJMQorI2RlZmluZSBTT0NLX1JDVkJVRl9MT0NLCTIKKyNkZWZpbmUgU09DS19CSU5EQUREUl9MT0NLCTQKKyNkZWZpbmUgU09DS19CSU5EUE9SVF9MT0NLCTgKKworLyogc29ja19pb2NiOiB1c2VkIHRvIGtpY2sgb2ZmIGFzeW5jIHByb2Nlc3Npbmcgb2Ygc29ja2V0IGlvcyAqLworc3RydWN0IHNvY2tfaW9jYiB7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OworCisJaW50CQkJZmxhZ3M7CisJaW50CQkJc2l6ZTsKKwlzdHJ1Y3Qgc29ja2V0CQkqc29jazsKKwlzdHJ1Y3Qgc29jawkJKnNrOworCXN0cnVjdCBzY21fY29va2llCSpzY207CisJc3RydWN0IG1zZ2hkcgkJKm1zZywgYXN5bmNfbXNnOworCXN0cnVjdCBpb3ZlYwkJYXN5bmNfaW92OworCXN0cnVjdCBraW9jYgkJKmtpb2NiOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc29ja19pb2NiICpraW9jYl90b19zaW9jYihzdHJ1Y3Qga2lvY2IgKmlvY2IpCit7CisJcmV0dXJuIChzdHJ1Y3Qgc29ja19pb2NiICopaW9jYi0+cHJpdmF0ZTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3Qga2lvY2IgKnNpb2NiX3RvX2tpb2NiKHN0cnVjdCBzb2NrX2lvY2IgKnNpKQoreworCXJldHVybiBzaS0+a2lvY2I7Cit9CisKK3N0cnVjdCBzb2NrZXRfYWxsb2MgeworCXN0cnVjdCBzb2NrZXQgc29ja2V0OworCXN0cnVjdCBpbm9kZSB2ZnNfaW5vZGU7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzb2NrZXQgKlNPQ0tFVF9JKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJcmV0dXJuICZjb250YWluZXJfb2YoaW5vZGUsIHN0cnVjdCBzb2NrZXRfYWxsb2MsIHZmc19pbm9kZSktPnNvY2tldDsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgaW5vZGUgKlNPQ0tfSU5PREUoc3RydWN0IHNvY2tldCAqc29ja2V0KQoreworCXJldHVybiAmY29udGFpbmVyX29mKHNvY2tldCwgc3RydWN0IHNvY2tldF9hbGxvYywgc29ja2V0KS0+dmZzX2lub2RlOworfQorCitleHRlcm4gdm9pZCBfX3NrX3N0cmVhbV9tZW1fcmVjbGFpbShzdHJ1Y3Qgc29jayAqc2spOworZXh0ZXJuIGludCBza19zdHJlYW1fbWVtX3NjaGVkdWxlKHN0cnVjdCBzb2NrICpzaywgaW50IHNpemUsIGludCBraW5kKTsKKworI2RlZmluZSBTS19TVFJFQU1fTUVNX1FVQU5UVU0gKChpbnQpUEFHRV9TSVpFKQorCitzdGF0aWMgaW5saW5lIGludCBza19zdHJlYW1fcGFnZXMoaW50IGFtdCkKK3sKKwlyZXR1cm4gKGFtdCArIFNLX1NUUkVBTV9NRU1fUVVBTlRVTSAtIDEpIC8gU0tfU1RSRUFNX01FTV9RVUFOVFVNOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2tfc3RyZWFtX21lbV9yZWNsYWltKHN0cnVjdCBzb2NrICpzaykKK3sKKwlpZiAoc2stPnNrX2ZvcndhcmRfYWxsb2MgPj0gU0tfU1RSRUFNX01FTV9RVUFOVFVNKQorCQlfX3NrX3N0cmVhbV9tZW1fcmVjbGFpbShzayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBza19zdHJlYW1fd3JpdGVxdWV1ZV9wdXJnZShzdHJ1Y3Qgc29jayAqc2spCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCXdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZSgmc2stPnNrX3dyaXRlX3F1ZXVlKSkgIT0gTlVMTCkKKwkJc2tfc3RyZWFtX2ZyZWVfc2tiKHNrLCBza2IpOworCXNrX3N0cmVhbV9tZW1fcmVjbGFpbShzayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNrX3N0cmVhbV9ybWVtX3NjaGVkdWxlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlyZXR1cm4gKGludClza2ItPnRydWVzaXplIDw9IHNrLT5za19mb3J3YXJkX2FsbG9jIHx8CisJCXNrX3N0cmVhbV9tZW1fc2NoZWR1bGUoc2ssIHNrYi0+dHJ1ZXNpemUsIDEpOworfQorCisvKiBVc2VkIGJ5IHByb2Nlc3NlcyB0byAibG9jayIgYSBzb2NrZXQgc3RhdGUsIHNvIHRoYXQKKyAqIGludGVycnVwdHMgYW5kIGJvdHRvbSBoYWxmIGhhbmRsZXJzIHdvbid0IGNoYW5nZSBpdAorICogZnJvbSB1bmRlciB1cy4gSXQgZXNzZW50aWFsbHkgYmxvY2tzIGFueSBpbmNvbWluZworICogcGFja2V0cywgc28gdGhhdCB3ZSB3b24ndCBnZXQgYW55IG5ldyBkYXRhIG9yIGFueQorICogcGFja2V0cyB0aGF0IGNoYW5nZSB0aGUgc3RhdGUgb2YgdGhlIHNvY2tldC4KKyAqCisgKiBXaGlsZSBsb2NrZWQsIEJIIHByb2Nlc3Npbmcgd2lsbCBhZGQgbmV3IHBhY2tldHMgdG8KKyAqIHRoZSBiYWNrbG9nIHF1ZXVlLiAgVGhpcyBxdWV1ZSBpcyBwcm9jZXNzZWQgYnkgdGhlCisgKiBvd25lciBvZiB0aGUgc29ja2V0IGxvY2sgcmlnaHQgYmVmb3JlIGl0IGlzIHJlbGVhc2VkLgorICoKKyAqIFNpbmNlIH4yLjMuNSBpdCBpcyBhbHNvIGV4Y2x1c2l2ZSBzbGVlcCBsb2NrIHNlcmlhbGl6aW5nCisgKiBhY2Nlc3NlcyBmcm9tIHVzZXIgcHJvY2VzcyBjb250ZXh0LgorICovCisjZGVmaW5lIHNvY2tfb3duZWRfYnlfdXNlcihzaykJKChzayktPnNrX2xvY2sub3duZXIpCisKK2V4dGVybiB2b2lkIEZBU1RDQUxMKGxvY2tfc29jayhzdHJ1Y3Qgc29jayAqc2spKTsKK2V4dGVybiB2b2lkIEZBU1RDQUxMKHJlbGVhc2Vfc29jayhzdHJ1Y3Qgc29jayAqc2spKTsKKworLyogQkggY29udGV4dCBtYXkgb25seSB1c2UgdGhlIGZvbGxvd2luZyBsb2NraW5nIGludGVyZmFjZS4gKi8KKyNkZWZpbmUgYmhfbG9ja19zb2NrKF9fc2spCXNwaW5fbG9jaygmKChfX3NrKS0+c2tfbG9jay5zbG9jaykpCisjZGVmaW5lIGJoX3VubG9ja19zb2NrKF9fc2spCXNwaW5fdW5sb2NrKCYoKF9fc2spLT5za19sb2NrLnNsb2NrKSkKKworZXh0ZXJuIHN0cnVjdCBzb2NrCQkqc2tfYWxsb2MoaW50IGZhbWlseSwgaW50IHByaW9yaXR5LAorCQkJCQkgIHN0cnVjdCBwcm90byAqcHJvdCwgaW50IHplcm9faXQpOworZXh0ZXJuIHZvaWQJCQlza19mcmVlKHN0cnVjdCBzb2NrICpzayk7CisKK2V4dGVybiBzdHJ1Y3Qgc2tfYnVmZgkJKnNvY2tfd21hbGxvYyhzdHJ1Y3Qgc29jayAqc2ssCisJCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IGZvcmNlLAorCQkJCQkgICAgICBpbnQgcHJpb3JpdHkpOworZXh0ZXJuIHN0cnVjdCBza19idWZmCQkqc29ja19ybWFsbG9jKHN0cnVjdCBzb2NrICpzaywKKwkJCQkJICAgICAgdW5zaWduZWQgbG9uZyBzaXplLCBpbnQgZm9yY2UsCisJCQkJCSAgICAgIGludCBwcmlvcml0eSk7CitleHRlcm4gdm9pZAkJCXNvY2tfd2ZyZWUoc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gdm9pZAkJCXNvY2tfcmZyZWUoc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKK2V4dGVybiBpbnQJCQlzb2NrX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLAorCQkJCQkJaW50IG9wLCBjaGFyIF9fdXNlciAqb3B0dmFsLAorCQkJCQkJaW50IG9wdGxlbik7CisKK2V4dGVybiBpbnQJCQlzb2NrX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLAorCQkJCQkJaW50IG9wLCBjaGFyIF9fdXNlciAqb3B0dmFsLCAKKwkJCQkJCWludCBfX3VzZXIgKm9wdGxlbik7CitleHRlcm4gc3RydWN0IHNrX2J1ZmYgCQkqc29ja19hbGxvY19zZW5kX3NrYihzdHJ1Y3Qgc29jayAqc2ssCisJCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCQkJCSAgICAgaW50IG5vYmxvY2ssCisJCQkJCQkgICAgIGludCAqZXJyY29kZSk7CitleHRlcm4gdm9pZCAqc29ja19rbWFsbG9jKHN0cnVjdCBzb2NrICpzaywgaW50IHNpemUsIGludCBwcmlvcml0eSk7CitleHRlcm4gdm9pZCBzb2NrX2tmcmVlX3Moc3RydWN0IHNvY2sgKnNrLCB2b2lkICptZW0sIGludCBzaXplKTsKK2V4dGVybiB2b2lkIHNrX3NlbmRfc2lndXJnKHN0cnVjdCBzb2NrICpzayk7CisKKy8qCisgKiBGdW5jdGlvbnMgdG8gZmlsbCBpbiBlbnRyaWVzIGluIHN0cnVjdCBwcm90b19vcHMgd2hlbiBhIHByb3RvY29sCisgKiBkb2VzIG5vdCBpbXBsZW1lbnQgYSBwYXJ0aWN1bGFyIGZ1bmN0aW9uLgorICovCitleHRlcm4gaW50ICAgICAgICAgICAgICAgICAgICAgIHNvY2tfbm9fYmluZChzdHJ1Y3Qgc29ja2V0ICosIAorCQkJCQkgICAgIHN0cnVjdCBzb2NrYWRkciAqLCBpbnQpOworZXh0ZXJuIGludCAgICAgICAgICAgICAgICAgICAgICBzb2NrX25vX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqLAorCQkJCQkJc3RydWN0IHNvY2thZGRyICosIGludCwgaW50KTsKK2V4dGVybiBpbnQgICAgICAgICAgICAgICAgICAgICAgc29ja19ub19zb2NrZXRwYWlyKHN0cnVjdCBzb2NrZXQgKiwKKwkJCQkJCSAgIHN0cnVjdCBzb2NrZXQgKik7CitleHRlcm4gaW50ICAgICAgICAgICAgICAgICAgICAgIHNvY2tfbm9fYWNjZXB0KHN0cnVjdCBzb2NrZXQgKiwKKwkJCQkJICAgICAgIHN0cnVjdCBzb2NrZXQgKiwgaW50KTsKK2V4dGVybiBpbnQgICAgICAgICAgICAgICAgICAgICAgc29ja19ub19nZXRuYW1lKHN0cnVjdCBzb2NrZXQgKiwKKwkJCQkJCXN0cnVjdCBzb2NrYWRkciAqLCBpbnQgKiwgaW50KTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgICAgICAgICAgICAgc29ja19ub19wb2xsKHN0cnVjdCBmaWxlICosIHN0cnVjdCBzb2NrZXQgKiwKKwkJCQkJICAgICBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKik7CitleHRlcm4gaW50ICAgICAgICAgICAgICAgICAgICAgIHNvY2tfbm9faW9jdGwoc3RydWN0IHNvY2tldCAqLCB1bnNpZ25lZCBpbnQsCisJCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuIGludAkJCXNvY2tfbm9fbGlzdGVuKHN0cnVjdCBzb2NrZXQgKiwgaW50KTsKK2V4dGVybiBpbnQgICAgICAgICAgICAgICAgICAgICAgc29ja19ub19zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICosIGludCk7CitleHRlcm4gaW50CQkJc29ja19ub19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKiwgaW50ICwgaW50LAorCQkJCQkJICAgY2hhciBfX3VzZXIgKiwgaW50IF9fdXNlciAqKTsKK2V4dGVybiBpbnQJCQlzb2NrX25vX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqLCBpbnQsIGludCwKKwkJCQkJCSAgIGNoYXIgX191c2VyICosIGludCk7CitleHRlcm4gaW50ICAgICAgICAgICAgICAgICAgICAgIHNvY2tfbm9fc2VuZG1zZyhzdHJ1Y3Qga2lvY2IgKiwgc3RydWN0IHNvY2tldCAqLAorCQkJCQkJc3RydWN0IG1zZ2hkciAqLCBzaXplX3QpOworZXh0ZXJuIGludCAgICAgICAgICAgICAgICAgICAgICBzb2NrX25vX3JlY3Ztc2coc3RydWN0IGtpb2NiICosIHN0cnVjdCBzb2NrZXQgKiwKKwkJCQkJCXN0cnVjdCBtc2doZHIgKiwgc2l6ZV90LCBpbnQpOworZXh0ZXJuIGludAkJCXNvY2tfbm9fbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkJICAgICBzdHJ1Y3Qgc29ja2V0ICpzb2NrLAorCQkJCQkgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKK2V4dGVybiBzc2l6ZV90CQkJc29ja19ub19zZW5kcGFnZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLAorCQkJCQkJc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkJCQlpbnQgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwgCisJCQkJCQlpbnQgZmxhZ3MpOworCisvKgorICogRnVuY3Rpb25zIHRvIGZpbGwgaW4gZW50cmllcyBpbiBzdHJ1Y3QgcHJvdG9fb3BzIHdoZW4gYSBwcm90b2NvbAorICogdXNlcyB0aGUgaW5ldCBzdHlsZS4KKyAqLworZXh0ZXJuIGludCBzb2NrX2NvbW1vbl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCisJCQkJICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pOworZXh0ZXJuIGludCBzb2NrX2NvbW1vbl9yZWN2bXNnKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IHNvY2tldCAqc29jaywKKwkJCSAgICAgICBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpOworZXh0ZXJuIGludCBzb2NrX2NvbW1vbl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCisJCQkJICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgb3B0bGVuKTsKKworZXh0ZXJuIHZvaWQgc2tfY29tbW9uX3JlbGVhc2Uoc3RydWN0IHNvY2sgKnNrKTsKKworLyoKKyAqCURlZmF1bHQgc29ja2V0IGNhbGxiYWNrcyBhbmQgc2V0dXAgY29kZQorICovCisgCisvKiBJbml0aWFsaXNlIGNvcmUgc29ja2V0IHZhcmlhYmxlcyAqLworZXh0ZXJuIHZvaWQgc29ja19pbml0X2RhdGEoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2sgKnNrKTsKKworLyoqCisgKglza19maWx0ZXIgLSBydW4gYSBwYWNrZXQgdGhyb3VnaCBhIHNvY2tldCBmaWx0ZXIKKyAqCUBzazogc29jayBhc3NvY2lhdGVkIHdpdGggJnNrX2J1ZmYKKyAqCUBza2I6IGJ1ZmZlciB0byBmaWx0ZXIKKyAqCUBuZWVkbG9jazogc2V0IHRvIDEgaWYgdGhlIHNvY2sgaXMgbm90IGxvY2tlZCBieSBjYWxsZXIuCisgKgorICogUnVuIHRoZSBmaWx0ZXIgY29kZSBhbmQgdGhlbiBjdXQgc2tiLT5kYXRhIHRvIGNvcnJlY3Qgc2l6ZSByZXR1cm5lZCBieQorICogc2tfcnVuX2ZpbHRlci4gSWYgcGt0X2xlbiBpcyAwIHdlIHRvc3MgcGFja2V0LiBJZiBza2ItPmxlbiBpcyBzbWFsbGVyCisgKiB0aGFuIHBrdF9sZW4gd2Uga2VlcCB3aG9sZSBza2ItPmRhdGEuIFRoaXMgaXMgdGhlIHNvY2tldCBsZXZlbAorICogd3JhcHBlciB0byBza19ydW5fZmlsdGVyLiBJdCByZXR1cm5zIDAgaWYgdGhlIHBhY2tldCBzaG91bGQKKyAqIGJlIGFjY2VwdGVkIG9yIC1FUEVSTSBpZiB0aGUgcGFja2V0IHNob3VsZCBiZSB0b3NzZWQuCisgKgorICovCisKK3N0YXRpYyBpbmxpbmUgaW50IHNrX2ZpbHRlcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsIGludCBuZWVkbG9jaykKK3sKKwlpbnQgZXJyOworCQorCWVyciA9IHNlY3VyaXR5X3NvY2tfcmN2X3NrYihzaywgc2tiKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCQorCWlmIChzay0+c2tfZmlsdGVyKSB7CisJCXN0cnVjdCBza19maWx0ZXIgKmZpbHRlcjsKKwkJCisJCWlmIChuZWVkbG9jaykKKwkJCWJoX2xvY2tfc29jayhzayk7CisJCQorCQlmaWx0ZXIgPSBzay0+c2tfZmlsdGVyOworCQlpZiAoZmlsdGVyKSB7CisJCQlpbnQgcGt0X2xlbiA9IHNrX3J1bl9maWx0ZXIoc2tiLCBmaWx0ZXItPmluc25zLAorCQkJCQkJICAgIGZpbHRlci0+bGVuKTsKKwkJCWlmICghcGt0X2xlbikKKwkJCQllcnIgPSAtRVBFUk07CisJCQllbHNlCisJCQkJc2tiX3RyaW0oc2tiLCBwa3RfbGVuKTsKKwkJfQorCisJCWlmIChuZWVkbG9jaykKKwkJCWJoX3VubG9ja19zb2NrKHNrKTsKKwl9CisJcmV0dXJuIGVycjsKK30KKworLyoqCisgKglza19maWx0ZXJfcmVsZWFzZTogUmVsZWFzZSBhIHNvY2tldCBmaWx0ZXIKKyAqCUBzazogc29ja2V0CisgKglAZnA6IGZpbHRlciB0byByZW1vdmUKKyAqCisgKglSZW1vdmUgYSBmaWx0ZXIgZnJvbSBhIHNvY2tldCBhbmQgcmVsZWFzZSBpdHMgcmVzb3VyY2VzLgorICovCisgCitzdGF0aWMgaW5saW5lIHZvaWQgc2tfZmlsdGVyX3JlbGVhc2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfZmlsdGVyICpmcCkKK3sKKwl1bnNpZ25lZCBpbnQgc2l6ZSA9IHNrX2ZpbHRlcl9sZW4oZnApOworCisJYXRvbWljX3N1YihzaXplLCAmc2stPnNrX29tZW1fYWxsb2MpOworCisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmZwLT5yZWZjbnQpKQorCQlrZnJlZShmcCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBza19maWx0ZXJfY2hhcmdlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2ZpbHRlciAqZnApCit7CisJYXRvbWljX2luYygmZnAtPnJlZmNudCk7CisJYXRvbWljX2FkZChza19maWx0ZXJfbGVuKGZwKSwgJnNrLT5za19vbWVtX2FsbG9jKTsKK30KKworLyoKKyAqIFNvY2tldCByZWZlcmVuY2UgY291bnRpbmcgcG9zdHVsYXRlcy4KKyAqCisgKiAqIEVhY2ggdXNlciBvZiBzb2NrZXQgU0hPVUxEIGhvbGQgYSByZWZlcmVuY2UgY291bnQuCisgKiAqIEVhY2ggYWNjZXNzIHBvaW50IHRvIHNvY2tldCAoYW4gaGFzaCB0YWJsZSBidWNrZXQsIHJlZmVyZW5jZSBmcm9tIGEgbGlzdCwKKyAqICAgcnVubmluZyB0aW1lciwgc2tiIGluIGZsaWdodCBNVVNUIGhvbGQgYSByZWZlcmVuY2UgY291bnQuCisgKiAqIFdoZW4gcmVmZXJlbmNlIGNvdW50IGhpdHMgMCwgaXQgbWVhbnMgaXQgd2lsbCBuZXZlciBpbmNyZWFzZSBiYWNrLgorICogKiBXaGVuIHJlZmVyZW5jZSBjb3VudCBoaXRzIDAsIGl0IG1lYW5zIHRoYXQgbm8gcmVmZXJlbmNlcyBmcm9tCisgKiAgIG91dHNpZGUgZXhpc3QgdG8gdGhpcyBzb2NrZXQgYW5kIGN1cnJlbnQgcHJvY2VzcyBvbiBjdXJyZW50IENQVQorICogICBpcyBsYXN0IHVzZXIgYW5kIG1heS9zaG91bGQgZGVzdHJveSB0aGlzIHNvY2tldC4KKyAqICogc2tfZnJlZSBpcyBjYWxsZWQgZnJvbSBhbnkgY29udGV4dDogcHJvY2VzcywgQkgsIElSUS4gV2hlbgorICogICBpdCBpcyBjYWxsZWQsIHNvY2tldCBoYXMgbm8gcmVmZXJlbmNlcyBmcm9tIG91dHNpZGUgLT4gc2tfZnJlZQorICogICBtYXkgcmVsZWFzZSBkZXNjZW5kYW50IHJlc291cmNlcyBhbGxvY2F0ZWQgYnkgdGhlIHNvY2tldCwgYnV0CisgKiAgIHRvIHRoZSB0aW1lIHdoZW4gaXQgaXMgY2FsbGVkLCBzb2NrZXQgaXMgTk9UIHJlZmVyZW5jZWQgYnkgYW55CisgKiAgIGhhc2ggdGFibGVzLCBsaXN0cyBldGMuCisgKiAqIFBhY2tldHMsIGRlbGl2ZXJlZCBmcm9tIG91dHNpZGUgKGZyb20gbmV0d29yayBvciBmcm9tIGFub3RoZXIgcHJvY2VzcykKKyAqICAgYW5kIGVucXVldWVkIG9uIHJlY2VpdmUvZXJyb3IgcXVldWVzIFNIT1VMRCBOT1QgZ3JhYiByZWZlcmVuY2UgY291bnQsCisgKiAgIHdoZW4gdGhleSBzaXQgaW4gcXVldWUuIE90aGVyd2lzZSwgcGFja2V0cyB3aWxsIGxlYWsgdG8gaG9sZSwgd2hlbgorICogICBzb2NrZXQgaXMgbG9va2VkIHVwIGJ5IG9uZSBjcHUgYW5kIHVuaGFzaW5nIGlzIG1hZGUgYnkgYW5vdGhlciBDUFUuCisgKiAgIEl0IGlzIHRydWUgZm9yIHVkcC9yYXcsIG5ldGxpbmsgKGxlYWsgdG8gcmVjZWl2ZSBhbmQgZXJyb3IgcXVldWVzKSwgdGNwCisgKiAgIChsZWFrIHRvIGJhY2tsb2cpLiBQYWNrZXQgc29ja2V0IGRvZXMgYWxsIHRoZSBwcm9jZXNzaW5nIGluc2lkZQorICogICBCUl9ORVRQUk9UT19MT0NLLCBzbyB0aGF0IGl0IGhhcyBub3QgdGhpcyByYWNlIGNvbmRpdGlvbi4gVU5JWCBzb2NrZXRzCisgKiAgIHVzZSBzZXBhcmF0ZSBTTVAgbG9jaywgc28gdGhhdCB0aGV5IGFyZSBwcm9uZSB0b28uCisgKi8KKworLyogVW5ncmFiIHNvY2tldCBhbmQgZGVzdHJveSBpdCwgaWYgaXQgd2FzIHRoZSBsYXN0IHJlZmVyZW5jZS4gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzb2NrX3B1dChzdHJ1Y3Qgc29jayAqc2spCit7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnNrLT5za19yZWZjbnQpKQorCQlza19mcmVlKHNrKTsKK30KKworLyogRGV0YWNoIHNvY2tldCBmcm9tIHByb2Nlc3MgY29udGV4dC4KKyAqIEFubm91bmNlIHNvY2tldCBkZWFkLCBkZXRhY2ggaXQgZnJvbSB3YWl0IHF1ZXVlIGFuZCBpbm9kZS4KKyAqIE5vdGUgdGhhdCBwYXJlbnQgaW5vZGUgaGVsZCByZWZlcmVuY2UgY291bnQgb24gdGhpcyBzdHJ1Y3Qgc29jaywKKyAqIHdlIGRvIG5vdCByZWxlYXNlIGl0IGluIHRoaXMgZnVuY3Rpb24sIGJlY2F1c2UgcHJvdG9jb2wKKyAqIHByb2JhYmx5IHdhbnRzIHNvbWUgYWRkaXRpb25hbCBjbGVhbnVwcyBvciBldmVuIGNvbnRpbnVpbmcKKyAqIHRvIHdvcmsgd2l0aCB0aGlzIHNvY2tldCAoVENQKS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHNvY2tfb3JwaGFuKHN0cnVjdCBzb2NrICpzaykKK3sKKwl3cml0ZV9sb2NrX2JoKCZzay0+c2tfY2FsbGJhY2tfbG9jayk7CisJc29ja19zZXRfZmxhZyhzaywgU09DS19ERUFEKTsKKwlzay0+c2tfc29ja2V0ID0gTlVMTDsKKwlzay0+c2tfc2xlZXAgID0gTlVMTDsKKwl3cml0ZV91bmxvY2tfYmgoJnNrLT5za19jYWxsYmFja19sb2NrKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNvY2tfZ3JhZnQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29ja2V0ICpwYXJlbnQpCit7CisJd3JpdGVfbG9ja19iaCgmc2stPnNrX2NhbGxiYWNrX2xvY2spOworCXNrLT5za19zbGVlcCA9ICZwYXJlbnQtPndhaXQ7CisJcGFyZW50LT5zayA9IHNrOworCXNrLT5za19zb2NrZXQgPSBwYXJlbnQ7CisJd3JpdGVfdW5sb2NrX2JoKCZzay0+c2tfY2FsbGJhY2tfbG9jayk7Cit9CisKK2V4dGVybiBpbnQgc29ja19pX3VpZChzdHJ1Y3Qgc29jayAqc2spOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc29ja19pX2lubyhzdHJ1Y3Qgc29jayAqc2spOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkc3RfZW50cnkgKgorX19za19kc3RfZ2V0KHN0cnVjdCBzb2NrICpzaykKK3sKKwlyZXR1cm4gc2stPnNrX2RzdF9jYWNoZTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZHN0X2VudHJ5ICoKK3NrX2RzdF9nZXQoc3RydWN0IHNvY2sgKnNrKQoreworCXN0cnVjdCBkc3RfZW50cnkgKmRzdDsKKworCXJlYWRfbG9jaygmc2stPnNrX2RzdF9sb2NrKTsKKwlkc3QgPSBzay0+c2tfZHN0X2NhY2hlOworCWlmIChkc3QpCisJCWRzdF9ob2xkKGRzdCk7CisJcmVhZF91bmxvY2soJnNrLT5za19kc3RfbG9jayk7CisJcmV0dXJuIGRzdDsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitfX3NrX2RzdF9zZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpCit7CisJc3RydWN0IGRzdF9lbnRyeSAqb2xkX2RzdDsKKworCW9sZF9kc3QgPSBzay0+c2tfZHN0X2NhY2hlOworCXNrLT5za19kc3RfY2FjaGUgPSBkc3Q7CisJZHN0X3JlbGVhc2Uob2xkX2RzdCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorc2tfZHN0X3NldChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBkc3RfZW50cnkgKmRzdCkKK3sKKwl3cml0ZV9sb2NrKCZzay0+c2tfZHN0X2xvY2spOworCV9fc2tfZHN0X3NldChzaywgZHN0KTsKKwl3cml0ZV91bmxvY2soJnNrLT5za19kc3RfbG9jayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorX19za19kc3RfcmVzZXQoc3RydWN0IHNvY2sgKnNrKQoreworCXN0cnVjdCBkc3RfZW50cnkgKm9sZF9kc3Q7CisKKwlvbGRfZHN0ID0gc2stPnNrX2RzdF9jYWNoZTsKKwlzay0+c2tfZHN0X2NhY2hlID0gTlVMTDsKKwlkc3RfcmVsZWFzZShvbGRfZHN0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitza19kc3RfcmVzZXQoc3RydWN0IHNvY2sgKnNrKQoreworCXdyaXRlX2xvY2soJnNrLT5za19kc3RfbG9jayk7CisJX19za19kc3RfcmVzZXQoc2spOworCXdyaXRlX3VubG9jaygmc2stPnNrX2RzdF9sb2NrKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZHN0X2VudHJ5ICoKK19fc2tfZHN0X2NoZWNrKHN0cnVjdCBzb2NrICpzaywgdTMyIGNvb2tpZSkKK3sKKwlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSBzay0+c2tfZHN0X2NhY2hlOworCisJaWYgKGRzdCAmJiBkc3QtPm9ic29sZXRlICYmIGRzdC0+b3BzLT5jaGVjayhkc3QsIGNvb2tpZSkgPT0gTlVMTCkgeworCQlzay0+c2tfZHN0X2NhY2hlID0gTlVMTDsKKwkJZHN0X3JlbGVhc2UoZHN0KTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0dXJuIGRzdDsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZHN0X2VudHJ5ICoKK3NrX2RzdF9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIHUzMiBjb29raWUpCit7CisJc3RydWN0IGRzdF9lbnRyeSAqZHN0ID0gc2tfZHN0X2dldChzayk7CisKKwlpZiAoZHN0ICYmIGRzdC0+b2Jzb2xldGUgJiYgZHN0LT5vcHMtPmNoZWNrKGRzdCwgY29va2llKSA9PSBOVUxMKSB7CisJCXNrX2RzdF9yZXNldChzayk7CisJCWRzdF9yZWxlYXNlKGRzdCk7CisJCXJldHVybiBOVUxMOworCX0KKworCXJldHVybiBkc3Q7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBza19jaGFyZ2Vfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzay0+c2tfd21lbV9xdWV1ZWQgICArPSBza2ItPnRydWVzaXplOworCXNrLT5za19mb3J3YXJkX2FsbG9jIC09IHNrYi0+dHJ1ZXNpemU7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNrYl9jb3B5X3RvX3BhZ2Uoc3RydWN0IHNvY2sgKnNrLCBjaGFyIF9fdXNlciAqZnJvbSwKKwkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCQkgICBpbnQgb2ZmLCBpbnQgY29weSkKK3sKKwlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fTk9ORSkgeworCQlpbnQgZXJyID0gMDsKKwkJdW5zaWduZWQgaW50IGNzdW0gPSBjc3VtX2FuZF9jb3B5X2Zyb21fdXNlcihmcm9tLAorCQkJCQkJICAgICBwYWdlX2FkZHJlc3MocGFnZSkgKyBvZmYsCisJCQkJCQkJICAgIGNvcHksIDAsICZlcnIpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwkJc2tiLT5jc3VtID0gY3N1bV9ibG9ja19hZGQoc2tiLT5jc3VtLCBjc3VtLCBza2ItPmxlbik7CisJfSBlbHNlIGlmIChjb3B5X2Zyb21fdXNlcihwYWdlX2FkZHJlc3MocGFnZSkgKyBvZmYsIGZyb20sIGNvcHkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXNrYi0+bGVuCSAgICAgKz0gY29weTsKKwlza2ItPmRhdGFfbGVuCSAgICAgKz0gY29weTsKKwlza2ItPnRydWVzaXplCSAgICAgKz0gY29weTsKKwlzay0+c2tfd21lbV9xdWV1ZWQgICArPSBjb3B5OworCXNrLT5za19mb3J3YXJkX2FsbG9jIC09IGNvcHk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiAJUXVldWUgYSByZWNlaXZlZCBkYXRhZ3JhbSBpZiBpdCB3aWxsIGZpdC4gU3RyZWFtIGFuZCBzZXF1ZW5jZWQKKyAqCXByb3RvY29scyBjYW4ndCBub3JtYWxseSB1c2UgdGhpcyBhcyB0aGV5IG5lZWQgdG8gZml0IGJ1ZmZlcnMgaW4KKyAqCWFuZCBwbGF5IHdpdGggdGhlbS4KKyAqCisgKiAJSW5saW5lZCBhcyBpdCdzIHZlcnkgc2hvcnQgYW5kIGNhbGxlZCBmb3IgcHJldHR5IG11Y2ggZXZlcnkKKyAqCXBhY2tldCBldmVyIHJlY2VpdmVkLgorICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBza2Jfc2V0X293bmVyX3coc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrKQoreworCXNvY2tfaG9sZChzayk7CisJc2tiLT5zayA9IHNrOworCXNrYi0+ZGVzdHJ1Y3RvciA9IHNvY2tfd2ZyZWU7CisJYXRvbWljX2FkZChza2ItPnRydWVzaXplLCAmc2stPnNrX3dtZW1fYWxsb2MpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3NldF9vd25lcl9yKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaykKK3sKKwlza2ItPnNrID0gc2s7CisJc2tiLT5kZXN0cnVjdG9yID0gc29ja19yZnJlZTsKKwlhdG9taWNfYWRkKHNrYi0+dHJ1ZXNpemUsICZzay0+c2tfcm1lbV9hbGxvYyk7Cit9CisKK2V4dGVybiB2b2lkIHNrX3Jlc2V0X3RpbWVyKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRpbWVyX2xpc3QqIHRpbWVyLAorCQkJICAgdW5zaWduZWQgbG9uZyBleHBpcmVzKTsKKworZXh0ZXJuIHZvaWQgc2tfc3RvcF90aW1lcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0aW1lcl9saXN0KiB0aW1lcik7CisKK3N0YXRpYyBpbmxpbmUgaW50IHNvY2tfcXVldWVfcmN2X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCit7CisJaW50IGVyciA9IDA7CisJaW50IHNrYl9sZW47CisKKwkvKiBDYXN0IHNrYi0+cmN2YnVmIHRvIHVuc2lnbmVkLi4uIEl0J3MgcG9pbnRsZXNzLCBidXQgcmVkdWNlcworCSAgIG51bWJlciBvZiB3YXJuaW5ncyB3aGVuIGNvbXBpbGluZyB3aXRoIC1XIC0tQU5LCisJICovCisJaWYgKGF0b21pY19yZWFkKCZzay0+c2tfcm1lbV9hbGxvYykgKyBza2ItPnRydWVzaXplID49CisJICAgICh1bnNpZ25lZClzay0+c2tfcmN2YnVmKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCS8qIEl0IHdvdWxkIGJlIGRlYWRsb2NrLCBpZiBzb2NrX3F1ZXVlX3Jjdl9za2IgaXMgdXNlZAorCSAgIHdpdGggc29ja2V0IGxvY2shIFdlIGFzc3VtZSB0aGF0IHVzZXJzIG9mIHRoaXMKKwkgICBmdW5jdGlvbiBhcmUgbG9jayBmcmVlLgorCSovCisJZXJyID0gc2tfZmlsdGVyKHNrLCBza2IsIDEpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJc2tiLT5kZXYgPSBOVUxMOworCXNrYl9zZXRfb3duZXJfcihza2IsIHNrKTsKKworCS8qIENhY2hlIHRoZSBTS0IgbGVuZ3RoIGJlZm9yZSB3ZSB0YWNrIGl0IG9udG8gdGhlIHJlY2VpdmUKKwkgKiBxdWV1ZS4gIE9uY2UgaXQgaXMgYWRkZWQgaXQgbm8gbG9uZ2VyIGJlbG9uZ3MgdG8gdXMgYW5kCisJICogbWF5IGJlIGZyZWVkIGJ5IG90aGVyIHRocmVhZHMgb2YgY29udHJvbCBwdWxsaW5nIHBhY2tldHMKKwkgKiBmcm9tIHRoZSBxdWV1ZS4KKwkgKi8KKwlza2JfbGVuID0gc2tiLT5sZW47CisKKwlza2JfcXVldWVfdGFpbCgmc2stPnNrX3JlY2VpdmVfcXVldWUsIHNrYik7CisKKwlpZiAoIXNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkKKwkJc2stPnNrX2RhdGFfcmVhZHkoc2ssIHNrYl9sZW4pOworb3V0OgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNvY2tfcXVldWVfZXJyX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCit7CisJLyogQ2FzdCBza2ItPnJjdmJ1ZiB0byB1bnNpZ25lZC4uLiBJdCdzIHBvaW50bGVzcywgYnV0IHJlZHVjZXMKKwkgICBudW1iZXIgb2Ygd2FybmluZ3Mgd2hlbiBjb21waWxpbmcgd2l0aCAtVyAtLUFOSworCSAqLworCWlmIChhdG9taWNfcmVhZCgmc2stPnNrX3JtZW1fYWxsb2MpICsgc2tiLT50cnVlc2l6ZSA+PQorCSAgICAodW5zaWduZWQpc2stPnNrX3JjdmJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisJc2tiX3NldF9vd25lcl9yKHNrYiwgc2spOworCXNrYl9xdWV1ZV90YWlsKCZzay0+c2tfZXJyb3JfcXVldWUsIHNrYik7CisJaWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpCisJCXNrLT5za19kYXRhX3JlYWR5KHNrLCBza2ItPmxlbik7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKglSZWNvdmVyIGFuIGVycm9yIHJlcG9ydCBhbmQgY2xlYXIgYXRvbWljYWxseQorICovCisgCitzdGF0aWMgaW5saW5lIGludCBzb2NrX2Vycm9yKHN0cnVjdCBzb2NrICpzaykKK3sKKwlpbnQgZXJyID0geGNoZygmc2stPnNrX2VyciwgMCk7CisJcmV0dXJuIC1lcnI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzb2NrX3dzcGFjZShzdHJ1Y3Qgc29jayAqc2spCit7CisJaW50IGFtdCA9IDA7CisKKwlpZiAoIShzay0+c2tfc2h1dGRvd24gJiBTRU5EX1NIVVRET1dOKSkgeworCQlhbXQgPSBzay0+c2tfc25kYnVmIC0gYXRvbWljX3JlYWQoJnNrLT5za193bWVtX2FsbG9jKTsKKwkJaWYgKGFtdCA8IDApIAorCQkJYW10ID0gMDsKKwl9CisJcmV0dXJuIGFtdDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNrX3dha2VfYXN5bmMoc3RydWN0IHNvY2sgKnNrLCBpbnQgaG93LCBpbnQgYmFuZCkKK3sKKwlpZiAoc2stPnNrX3NvY2tldCAmJiBzay0+c2tfc29ja2V0LT5mYXN5bmNfbGlzdCkKKwkJc29ja193YWtlX2FzeW5jKHNrLT5za19zb2NrZXQsIGhvdywgYmFuZCk7Cit9CisKKyNkZWZpbmUgU09DS19NSU5fU05EQlVGIDIwNDgKKyNkZWZpbmUgU09DS19NSU5fUkNWQlVGIDI1NgorCitzdGF0aWMgaW5saW5lIHZvaWQgc2tfc3RyZWFtX21vZGVyYXRlX3NuZGJ1ZihzdHJ1Y3Qgc29jayAqc2spCit7CisJaWYgKCEoc2stPnNrX3VzZXJsb2NrcyAmIFNPQ0tfU05EQlVGX0xPQ0spKSB7CisJCXNrLT5za19zbmRidWYgPSBtaW4oc2stPnNrX3NuZGJ1Ziwgc2stPnNrX3dtZW1fcXVldWVkIC8gMik7CisJCXNrLT5za19zbmRidWYgPSBtYXgoc2stPnNrX3NuZGJ1ZiwgU09DS19NSU5fU05EQlVGKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKnNrX3N0cmVhbV9hbGxvY19wc2tiKHN0cnVjdCBzb2NrICpzaywKKwkJCQkJCSAgIGludCBzaXplLCBpbnQgbWVtLCBpbnQgZ2ZwKQoreworCXN0cnVjdCBza19idWZmICpza2IgPSBhbGxvY19za2Ioc2l6ZSArIHNrLT5za19wcm90LT5tYXhfaGVhZGVyLCBnZnApOworCisJaWYgKHNrYikgeworCQlza2ItPnRydWVzaXplICs9IG1lbTsKKwkJaWYgKHNrLT5za19mb3J3YXJkX2FsbG9jID49IChpbnQpc2tiLT50cnVlc2l6ZSB8fAorCQkgICAgc2tfc3RyZWFtX21lbV9zY2hlZHVsZShzaywgc2tiLT50cnVlc2l6ZSwgMCkpIHsKKwkJCXNrYl9yZXNlcnZlKHNrYiwgc2stPnNrX3Byb3QtPm1heF9oZWFkZXIpOworCQkJcmV0dXJuIHNrYjsKKwkJfQorCQlfX2tmcmVlX3NrYihza2IpOworCX0gZWxzZSB7CisJCXNrLT5za19wcm90LT5lbnRlcl9tZW1vcnlfcHJlc3N1cmUoKTsKKwkJc2tfc3RyZWFtX21vZGVyYXRlX3NuZGJ1Zihzayk7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpza19zdHJlYW1fYWxsb2Nfc2tiKHN0cnVjdCBzb2NrICpzaywKKwkJCQkJCSAgaW50IHNpemUsIGludCBnZnApCit7CisJcmV0dXJuIHNrX3N0cmVhbV9hbGxvY19wc2tiKHNrLCBzaXplLCAwLCBnZnApOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpza19zdHJlYW1fYWxsb2NfcGFnZShzdHJ1Y3Qgc29jayAqc2spCit7CisJc3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMOworCisJaWYgKHNrLT5za19mb3J3YXJkX2FsbG9jID49IChpbnQpUEFHRV9TSVpFIHx8CisJICAgIHNrX3N0cmVhbV9tZW1fc2NoZWR1bGUoc2ssIFBBR0VfU0laRSwgMCkpCisJCXBhZ2UgPSBhbGxvY19wYWdlcyhzay0+c2tfYWxsb2NhdGlvbiwgMCk7CisJZWxzZSB7CisJCXNrLT5za19wcm90LT5lbnRlcl9tZW1vcnlfcHJlc3N1cmUoKTsKKwkJc2tfc3RyZWFtX21vZGVyYXRlX3NuZGJ1Zihzayk7CisJfQorCXJldHVybiBwYWdlOworfQorCisjZGVmaW5lIHNrX3N0cmVhbV9mb3JfcmV0cmFuc19xdWV1ZShza2IsIHNrKQkJCQlcCisJCWZvciAoc2tiID0gKHNrKS0+c2tfd3JpdGVfcXVldWUubmV4dDsJCQlcCisJCSAgICAgKHNrYiAhPSAoc2spLT5za19zZW5kX2hlYWQpICYmCQkJXAorCQkgICAgIChza2IgIT0gKHN0cnVjdCBza19idWZmICopJihzayktPnNrX3dyaXRlX3F1ZXVlKTsJXAorCQkgICAgIHNrYiA9IHNrYi0+bmV4dCkKKworLyoKKyAqCURlZmF1bHQgd3JpdGUgcG9saWN5IGFzIHNob3duIHRvIHVzZXIgc3BhY2UgdmlhIHBvbGwvc2VsZWN0L1NJR0lPCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHNvY2tfd3JpdGVhYmxlKGNvbnN0IHN0cnVjdCBzb2NrICpzaykgCit7CisJcmV0dXJuIGF0b21pY19yZWFkKCZzay0+c2tfd21lbV9hbGxvYykgPCAoc2stPnNrX3NuZGJ1ZiAvIDIpOworfQorCitzdGF0aWMgaW5saW5lIGludCBnZnBfYW55KHZvaWQpCit7CisJcmV0dXJuIGluX3NvZnRpcnEoKSA/IEdGUF9BVE9NSUMgOiBHRlBfS0VSTkVMOworfQorCitzdGF0aWMgaW5saW5lIGxvbmcgc29ja19yY3Z0aW1lbyhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIGludCBub2Jsb2NrKQoreworCXJldHVybiBub2Jsb2NrID8gMCA6IHNrLT5za19yY3Z0aW1lbzsKK30KKworc3RhdGljIGlubGluZSBsb25nIHNvY2tfc25kdGltZW8oY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBpbnQgbm9ibG9jaykKK3sKKwlyZXR1cm4gbm9ibG9jayA/IDAgOiBzay0+c2tfc25kdGltZW87Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNvY2tfcmN2bG93YXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBpbnQgd2FpdGFsbCwgaW50IGxlbikKK3sKKwlyZXR1cm4gKHdhaXRhbGwgPyBsZW4gOiBtaW5fdChpbnQsIHNrLT5za19yY3Zsb3dhdCwgbGVuKSkgPyA6IDE7Cit9CisKKy8qIEFsYXMsIHdpdGggdGltZW91dCBzb2NrZXQgb3BlcmF0aW9ucyBhcmUgbm90IHJlc3RhcnRhYmxlLgorICogQ29tcGFyZSB0aGlzIHRvIHBvbGwoKS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgc29ja19pbnRyX2Vycm5vKGxvbmcgdGltZW8pCit7CisJcmV0dXJuIHRpbWVvID09IE1BWF9TQ0hFRFVMRV9USU1FT1VUID8gLUVSRVNUQVJUU1lTIDogLUVJTlRSOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkCitzb2NrX3JlY3ZfdGltZXN0YW1wKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCB0aW1ldmFsICpzdGFtcCA9ICZza2ItPnN0YW1wOworCWlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfUkNWVFNUQU1QKSkgeworCQkvKiBSYWNlIG9jY3VycmVkIGJldHdlZW4gdGltZXN0YW1wIGVuYWJsaW5nIGFuZCBwYWNrZXQKKwkJICAgcmVjZWl2aW5nLiAgRmlsbCBpbiB0aGUgY3VycmVudCB0aW1lIGZvciBub3cuICovCisJCWlmIChzdGFtcC0+dHZfc2VjID09IDApCisJCQlkb19nZXR0aW1lb2ZkYXkoc3RhbXApOworCQlwdXRfY21zZyhtc2csIFNPTF9TT0NLRVQsIFNPX1RJTUVTVEFNUCwgc2l6ZW9mKHN0cnVjdCB0aW1ldmFsKSwKKwkJCSBzdGFtcCk7CisJfSBlbHNlCisJCXNrLT5za19zdGFtcCA9ICpzdGFtcDsKK30KKworLyoqCisgKiBza19lYXRfc2tiIC0gUmVsZWFzZSBhIHNrYiBpZiBpdCBpcyBubyBsb25nZXIgbmVlZGVkCisgKiBAc2sgLSBzb2NrZXQgdG8gZWF0IHRoaXMgc2tiIGZyb20KKyAqIEBza2IgLSBzb2NrZXQgYnVmZmVyIHRvIGVhdAorICoKKyAqIFRoaXMgcm91dGluZSBtdXN0IGJlIGNhbGxlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQgb3Igd2l0aCB0aGUgc29ja2V0CisgKiBsb2NrZWQgc28gdGhhdCB0aGUgc2tfYnVmZiBxdWV1ZSBvcGVyYXRpb24gaXMgb2suCisqLworc3RhdGljIGlubGluZSB2b2lkIHNrX2VhdF9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCV9fc2tiX3VubGluayhza2IsICZzay0+c2tfcmVjZWl2ZV9xdWV1ZSk7CisJX19rZnJlZV9za2Ioc2tiKTsKK30KKworZXh0ZXJuIHZvaWQgc29ja19lbmFibGVfdGltZXN0YW1wKHN0cnVjdCBzb2NrICpzayk7CitleHRlcm4gaW50IHNvY2tfZ2V0X3RpbWVzdGFtcChzdHJ1Y3Qgc29jayAqLCBzdHJ1Y3QgdGltZXZhbCBfX3VzZXIgKik7CisKKy8qIAorICoJRW5hYmxlIGRlYnVnL2luZm8gbWVzc2FnZXMgCisgKi8KKworI2lmIDAKKyNkZWZpbmUgTkVUREVCVUcoeCkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBMSU1JVF9ORVRERUJVRyh4KSBkbyB7fSB3aGlsZSgwKQorI2Vsc2UKKyNkZWZpbmUgTkVUREVCVUcoeCkJZG8geyB4OyB9IHdoaWxlICgwKQorI2RlZmluZSBMSU1JVF9ORVRERUJVRyh4KSBkbyB7IGlmIChuZXRfcmF0ZWxpbWl0KCkpIHsgeDsgfSB9IHdoaWxlKDApCisjZW5kaWYKKworLyoKKyAqIE1hY3JvcyBmb3Igc2xlZXBpbmcgb24gYSBzb2NrZXQuIFVzZSB0aGVtIGxpa2UgdGhpczoKKyAqCisgKiBTT0NLX1NMRUVQX1BSRShzaykKKyAqIGlmIChjb25kaXRpb24pCisgKiAJc2NoZWR1bGUoKTsKKyAqIFNPQ0tfU0xFRVBfUE9TVChzaykKKyAqCisgKiBOLkIuIFRoZXNlIGFyZSBub3cgb2Jzb2xldGUgYW5kIHdlcmUsIGFmYWlrLCBvbmx5IGV2ZXIgdXNlZCBpbiBERUNuZXQKKyAqIGFuZCB3aGVuIHRoZSBsYXN0IHVzZSBvZiB0aGVtIGluIERFQ25ldCBoYXMgZ29uZSwgSSdtIGludGVuZGluZyB0bworICogcmVtb3ZlIHRoZW0uCisgKi8KKworI2RlZmluZSBTT0NLX1NMRUVQX1BSRShzaykgCXsgc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OyBcCisJCQkJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgdHNrKTsgXAorCQkJCXRzay0+c3RhdGUgPSBUQVNLX0lOVEVSUlVQVElCTEU7IFwKKwkJCQlhZGRfd2FpdF9xdWV1ZSgoc2spLT5za19zbGVlcCwgJndhaXQpOyBcCisJCQkJcmVsZWFzZV9zb2NrKHNrKTsKKworI2RlZmluZSBTT0NLX1NMRUVQX1BPU1Qoc2spCXRzay0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7IFwKKwkJCQlyZW1vdmVfd2FpdF9xdWV1ZSgoc2spLT5za19zbGVlcCwgJndhaXQpOyBcCisJCQkJbG9ja19zb2NrKHNrKTsgXAorCQkJCX0KKworc3RhdGljIGlubGluZSB2b2lkIHNvY2tfdmFsYm9vbF9mbGFnKHN0cnVjdCBzb2NrICpzaywgaW50IGJpdCwgaW50IHZhbGJvb2wpCit7CisJaWYgKHZhbGJvb2wpCisJCXNvY2tfc2V0X2ZsYWcoc2ssIGJpdCk7CisJZWxzZQorCQlzb2NrX3Jlc2V0X2ZsYWcoc2ssIGJpdCk7Cit9CisKK2V4dGVybiBfX3UzMiBzeXNjdGxfd21lbV9tYXg7CitleHRlcm4gX191MzIgc3lzY3RsX3JtZW1fbWF4OworCisjaWZkZWYgQ09ORklHX05FVAoraW50IHNpb2NkZXZwcml2YXRlX2lvY3RsKHVuc2lnbmVkIGludCBmZCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IHNpb2NkZXZwcml2YXRlX2lvY3RsKHVuc2lnbmVkIGludCBmZCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisjZW5kaWYKKworI2VuZGlmCS8qIF9TT0NLX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3N5bmNwcHAuaCBiL2luY2x1ZGUvbmV0L3N5bmNwcHAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTRjYjZiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQvc3luY3BwcC5oCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogRGVmaW5lcyBmb3Igc3luY2hyb25vdXMgUFBQL0Npc2NvIGxpbmsgbGV2ZWwgc3Vicm91dGluZXMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk0IENyb255eCBMdGQuCisgKiBBdXRob3I6IFNlcmdlIFZha3VsZW5rbywgPHZha0B6ZWJ1Yi5tc2suc3U+CisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCB3aXRoIE5PIFdBUlJBTlRJRVMsIG5vdCBldmVuIHRoZSBpbXBsaWVkCisgKiB3YXJyYW50aWVzIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKgorICogQXV0aG9ycyBncmFudCBhbnkgb3RoZXIgcGVyc29ucyBvciBvcmdhbml6YXRpb25zIHBlcm1pc3Npb24gdG8gdXNlCisgKiBvciBtb2RpZnkgdGhpcyBzb2Z0d2FyZSBhcyBsb25nIGFzIHRoaXMgbWVzc2FnZSBpcyBrZXB0IHdpdGggdGhlIHNvZnR3YXJlLAorICogYWxsIGRlcml2YXRpdmUgd29ya3Mgb3IgbW9kaWZpZWQgdmVyc2lvbnMuCisgKgorICogVmVyc2lvbiAxLjcsIFdlZCBKdW4gIDcgMjI6MTI6MDIgTVNEIDE5OTUKKyAqCisgKgorICoKKyAqLworCisjaWZuZGVmIF9TWU5DUFBQX0hfCisjZGVmaW5lIF9TWU5DUFBQX0hfIDEKKworI2lmZGVmIF9fS0VSTkVMX18KK3N0cnVjdCBzbGNwIHsKKwl1MTYJc3RhdGU7ICAgICAgICAgIC8qIHN0YXRlIG1hY2hpbmUgKi8KKwl1MzIJbWFnaWM7ICAgICAgICAgIC8qIGxvY2FsIG1hZ2ljIG51bWJlciAqLworCXVfY2hhcgllY2hvaWQ7ICAgICAgICAgLyogaWQgb2YgbGFzdCBrZWVwYWxpdmUgZWNobyByZXF1ZXN0ICovCisJdV9jaGFyCWNvbmZpZDsgICAgICAgICAvKiBpZCBvZiBsYXN0IGNvbmZpZ3VyYXRpb24gcmVxdWVzdCAqLworfTsKKworc3RydWN0IHNpcGNwIHsKKwl1MTYJc3RhdGU7ICAgICAgICAgIC8qIHN0YXRlIG1hY2hpbmUgKi8KKwl1X2NoYXIgIGNvbmZpZDsgICAgICAgICAvKiBpZCBvZiBsYXN0IGNvbmZpZ3VyYXRpb24gcmVxdWVzdCAqLworfTsKKworc3RydWN0IHNwcHAgCit7CisJc3RydWN0IHNwcHAgKglwcF9uZXh0OwkvKiBuZXh0IGludGVyZmFjZSBpbiBrZWVwYWxpdmUgbGlzdCAqLworCXUzMgkJcHBfZmxhZ3M7CS8qIHVzZSBDaXNjbyBwcm90b2NvbCBpbnN0ZWFkIG9mIFBQUCAqLworCXUxNgkJcHBfYWxpdmVjbnQ7CS8qIGtlZXBhbGl2ZSBwYWNrZXRzIGNvdW50ZXIgKi8KKwl1MTYJCXBwX2xvb3BjbnQ7CS8qIGxvb3BiYWNrIGRldGVjdGlvbiBjb3VudGVyICovCisJdTMyCQlwcF9zZXE7CQkvKiBsb2NhbCBzZXF1ZW5jZSBudW1iZXIgKi8KKwl1MzIJCXBwX3JzZXE7CS8qIHJlbW90ZSBzZXF1ZW5jZSBudW1iZXIgKi8KKwlzdHJ1Y3Qgc2xjcAlsY3A7CQkvKiBMQ1AgcGFyYW1zICovCisJc3RydWN0IHNpcGNwCWlwY3A7CQkvKiBJUENQIHBhcmFtcyAqLworCXUzMgkJaWJ5dGVzLG9ieXRlczsJLyogQnl0ZXMgaW4vb3V0ICovCisJdTMyCQlpcGt0cyxvcGt0czsJLyogUGFja2V0cyBpbi9vdXQgKi8KKwlzdHJ1Y3QgdGltZXJfbGlzdAlwcF90aW1lcjsKKwlzdHJ1Y3QgbmV0X2RldmljZQkqcHBfaWY7CisJY2hhcgkJcHBfbGlua19zdGF0ZTsJLyogTGluayBzdGF0dXMgKi8KKwlzcGlubG9ja190ICAgICAgbG9jazsKK307CisKK3N0cnVjdCBwcHBfZGV2aWNlCit7CQorCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CS8qIE5ldHdvcmsgZGV2aWNlIHBvaW50ZXIgKi8KKwlzdHJ1Y3Qgc3BwcCBzcHBwOwkvKiBTeW5jaHJvbm91cyBQUFAgKi8KK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNwcHAgKnNwcHBfb2Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldikgCit7CisJc3RydWN0IHBwcF9kZXZpY2UgKipwcHAgPSBkZXYtPnByaXY7CisJQlVHX09OKCgqcHBwKS0+ZGV2ICE9IGRldik7CisJcmV0dXJuICYoKnBwcCktPnNwcHA7Cit9CisKKyNkZWZpbmUgUFBfS0VFUEFMSVZFICAgIDB4MDEgICAgLyogdXNlIGtlZXBhbGl2ZSBwcm90b2NvbCAqLworI2RlZmluZSBQUF9DSVNDTyAgICAgICAgMHgwMiAgICAvKiB1c2UgQ2lzY28gcHJvdG9jb2wgaW5zdGVhZCBvZiBQUFAgKi8KKyNkZWZpbmUgUFBfVElNTyAgICAgICAgIDB4MDQgICAgLyogY3BfdGltZW91dCByb3V0aW5lIGFjdGl2ZSAqLworI2RlZmluZSBQUF9ERUJVRwkweDA4CisKKyNkZWZpbmUgUFBQX01UVSAgICAgICAgICAxNTAwICAgIC8qIG1heC4gdHJhbnNtaXQgdW5pdCAqLworCisjZGVmaW5lIExDUF9TVEFURV9DTE9TRUQgICAgICAgIDAgICAgICAgLyogTENQIHN0YXRlOiBjbG9zZWQgKGNvbmYtcmVxIHNlbnQpICovCisjZGVmaW5lIExDUF9TVEFURV9BQ0tfUkNWRCAgICAgIDEgICAgICAgLyogTENQIHN0YXRlOiBjb25mLWFjayByZWNlaXZlZCAqLworI2RlZmluZSBMQ1BfU1RBVEVfQUNLX1NFTlQgICAgICAyICAgICAgIC8qIExDUCBzdGF0ZTogY29uZi1hY2sgc2VudCAqLworI2RlZmluZSBMQ1BfU1RBVEVfT1BFTkVEICAgICAgICAzICAgICAgIC8qIExDUCBzdGF0ZTogb3BlbmVkICovCisKKyNkZWZpbmUgSVBDUF9TVEFURV9DTE9TRUQgICAgICAgMCAgICAgICAvKiBJUENQIHN0YXRlOiBjbG9zZWQgKGNvbmYtcmVxIHNlbnQpICovCisjZGVmaW5lIElQQ1BfU1RBVEVfQUNLX1JDVkQgICAgIDEgICAgICAgLyogSVBDUCBzdGF0ZTogY29uZi1hY2sgcmVjZWl2ZWQgKi8KKyNkZWZpbmUgSVBDUF9TVEFURV9BQ0tfU0VOVCAgICAgMiAgICAgICAvKiBJUENQIHN0YXRlOiBjb25mLWFjayBzZW50ICovCisjZGVmaW5lIElQQ1BfU1RBVEVfT1BFTkVEICAgICAgIDMgICAgICAgLyogSVBDUCBzdGF0ZTogb3BlbmVkICovCisKKyNkZWZpbmUgU1BQUF9MSU5LX0RPV04JCTAJLyogbGluayBkb3duIC0gbm8ga2VlcGFsaXZlICovCisjZGVmaW5lIFNQUFBfTElOS19VUAkJMQkvKiBsaW5rIGlzIHVwIC0ga2VlcGFsaXZlIG9rICovCisKK3ZvaWQgc3BwcF9hdHRhY2ggKHN0cnVjdCBwcHBfZGV2aWNlICpwZCk7Cit2b2lkIHNwcHBfZGV0YWNoIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3ZvaWQgc3BwcF9pbnB1dCAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKm0pOworaW50IHNwcHBfZG9faW9jdGwgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLCBpbnQgY21kKTsKK3N0cnVjdCBza19idWZmICpzcHBwX2RlcXVldWUgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworaW50IHNwcHBfaXNlbXB0eSAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Cit2b2lkIHNwcHBfZmx1c2ggKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworaW50IHNwcHBfb3BlbiAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitpbnQgc3BwcF9yZW9wZW4gKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworaW50IHNwcHBfY2xvc2UgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworI2VuZGlmCisKKyNkZWZpbmUgU1BQUElPQ0NJU0NPCShTSU9DREVWUFJJVkFURSkKKyNkZWZpbmUgU1BQUElPQ1BQUAkoU0lPQ0RFVlBSSVZBVEUrMSkKKyNkZWZpbmUgU1BQUElPQ0RFQlVHCShTSU9DREVWUFJJVkFURSsyKQorI2RlZmluZSBTUFBQSU9DU0ZMQUdTCShTSU9DREVWUFJJVkFURSszKQorI2RlZmluZSBTUFBQSU9DR0ZMQUdTCShTSU9DREVWUFJJVkFURSs0KQorCisjZW5kaWYgLyogX1NZTkNQUFBfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3RjX2FjdC90Y19nYWN0LmggYi9pbmNsdWRlL25ldC90Y19hY3QvdGNfZ2FjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5ZjBkOTYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC90Y19hY3QvdGNfZ2FjdC5oCkBAIC0wLDAgKzEsMTcgQEAKKyNpZm5kZWYgX19ORVRfVENfR0FDVF9ICisjZGVmaW5lIF9fTkVUX1RDX0dBQ1RfSAorCisjaW5jbHVkZSA8bmV0L2FjdF9hcGkuaD4KKworc3RydWN0IHRjZl9nYWN0Cit7CisgICAgICAgIHRjYV9nZW4oZ2FjdCk7CisjaWZkZWYgQ09ORklHX0dBQ1RfUFJPQgorICAgICAgICB1MTYgICAgICAgICAgICAgICAgIHB0eXBlOworICAgICAgICB1MTYgICAgICAgICAgICAgICAgIHB2YWw7CisgICAgICAgIGludCAgICAgICAgICAgICAgICAgcGFjdGlvbjsKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK307CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC90Y19hY3QvdGNfaXB0LmggYi9pbmNsdWRlL25ldC90Y19hY3QvdGNfaXB0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJlY2NlYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L3RjX2FjdC90Y19pcHQuaApAQCAtMCwwICsxLDE2IEBACisjaWZuZGVmIF9fTkVUX1RDX0lQVF9ICisjZGVmaW5lIF9fTkVUX1RDX0lQVF9ICisKKyNpbmNsdWRlIDxuZXQvYWN0X2FwaS5oPgorCitzdHJ1Y3QgaXB0X2VudHJ5X3RhcmdldDsKKworc3RydWN0IHRjZl9pcHQKK3sKKwl0Y2FfZ2VuKGlwdCk7CisJdTMyIGhvb2s7CisJY2hhciAqdG5hbWU7CisJc3RydWN0IGlwdF9lbnRyeV90YXJnZXQgKnQ7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3RjX2FjdC90Y19taXJyZWQuaCBiL2luY2x1ZGUvbmV0L3RjX2FjdC90Y19taXJyZWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWMzMmY2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQvdGNfYWN0L3RjX21pcnJlZC5oCkBAIC0wLDAgKzEsMTUgQEAKKyNpZm5kZWYgX19ORVRfVENfTUlSX0gKKyNkZWZpbmUgX19ORVRfVENfTUlSX0gKKworI2luY2x1ZGUgPG5ldC9hY3RfYXBpLmg+CisKK3N0cnVjdCB0Y2ZfbWlycmVkCit7CisJdGNhX2dlbihtaXJyZWQpOworCWludCBlYWN0aW9uOworCWludCBpZmluZGV4OworCWludCBva19wdXNoOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3RjX2FjdC90Y19wZWRpdC5oIGIvaW5jbHVkZS9uZXQvdGNfYWN0L3RjX3BlZGl0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWIyMTY4OQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L3RjX2FjdC90Y19wZWRpdC5oCkBAIC0wLDAgKzEsMTQgQEAKKyNpZm5kZWYgX19ORVRfVENfUEVEX0gKKyNkZWZpbmUgX19ORVRfVENfUEVEX0gKKworI2luY2x1ZGUgPG5ldC9hY3RfYXBpLmg+CisKK3N0cnVjdCB0Y2ZfcGVkaXQKK3sKKwl0Y2FfZ2VuKHBlZGl0KTsKKwl1bnNpZ25lZCBjaGFyICAgICAgICAgICBua2V5czsKKwl1bnNpZ25lZCBjaGFyICAgICAgICAgICBmbGFnczsKKwlzdHJ1Y3QgdGNfcGVkaXRfa2V5ICAgICAqa2V5czsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvdGNwLmggYi9pbmNsdWRlL25ldC90Y3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDM4MTBhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQvdGNwLmgKQEAgLTAsMCArMSwyMDIyIEBACisvKgorICogSU5FVAkJQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIFRDUC9JUCBwcm90b2NvbCBzdWl0ZSBmb3IgdGhlIExJTlVYCisgKgkJb3BlcmF0aW5nIHN5c3RlbS4gIElORVQgaXMgaW1wbGVtZW50ZWQgdXNpbmcgdGhlICBCU0QgU29ja2V0CisgKgkJaW50ZXJmYWNlIGFzIHRoZSBtZWFucyBvZiBjb21tdW5pY2F0aW9uIHdpdGggdGhlIHVzZXIgbGV2ZWwuCisgKgorICoJCURlZmluaXRpb25zIGZvciB0aGUgVENQIG1vZHVsZS4KKyAqCisgKiBWZXJzaW9uOglAKCMpdGNwLmgJMS4wLjUJMDUvMjMvOTMKKyAqCisgKiBBdXRob3JzOglSb3NzIEJpcm8sIDxiaXI3QGxlbGFuZC5TdGFuZm9yZC5FZHU+CisgKgkJRnJlZCBOLiB2YW4gS2VtcGVuLCA8d2FsdGplQHVXYWx0Lk5MLk11Z25ldC5PUkc+CisgKgorICoJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCQltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICoJCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICoJCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpZm5kZWYgX1RDUF9ICisjZGVmaW5lIF9UQ1BfSAorCisjZGVmaW5lIFRDUF9ERUJVRyAxCisjZGVmaW5lIEZBU1RSRVRSQU5TX0RFQlVHIDEKKworLyogQ2FuY2VsIHRpbWVycywgd2hlbiB0aGV5IGFyZSBub3QgcmVxdWlyZWQuICovCisjdW5kZWYgVENQX0NMRUFSX1RJTUVSUworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorI2luY2x1ZGUgPG5ldC9jaGVja3N1bS5oPgorI2luY2x1ZGUgPG5ldC9zb2NrLmg+CisjaW5jbHVkZSA8bmV0L3NubXAuaD4KKyNpbmNsdWRlIDxuZXQvaXAuaD4KKyNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkIChDT05GSUdfSVBWNl9NT0RVTEUpCisjaW5jbHVkZSA8bGludXgvaXB2Ni5oPgorI2VuZGlmCisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKworLyogVGhpcyBpcyBmb3IgYWxsIGNvbm5lY3Rpb25zIHdpdGggYSBmdWxsIGlkZW50aXR5LCBubyB3aWxkY2FyZHMuCisgKiBOZXcgc2NoZW1lLCBoYWxmIHRoZSB0YWJsZSBpcyBmb3IgVElNRV9XQUlULCB0aGUgb3RoZXIgaGFsZiBpcworICogZm9yIHRoZSByZXN0LiAgSSdsbCBleHBlcmltZW50IHdpdGggZHluYW1pYyB0YWJsZSBncm93dGggbGF0ZXIuCisgKi8KK3N0cnVjdCB0Y3BfZWhhc2hfYnVja2V0IHsKKwlyd2xvY2tfdAkgIGxvY2s7CisJc3RydWN0IGhsaXN0X2hlYWQgY2hhaW47Cit9IF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKDgpKSk7CisKKy8qIFRoaXMgaXMgZm9yIGxpc3RlbmluZyBzb2NrZXRzLCB0aHVzIGFsbCBzb2NrZXRzIHdoaWNoIHBvc3Nlc3Mgd2lsZGNhcmRzLiAqLworI2RlZmluZSBUQ1BfTEhUQUJMRV9TSVpFCTMyCS8qIFllcywgcmVhbGx5LCB0aGlzIGlzIGFsbCB5b3UgbmVlZC4gKi8KKworLyogVGhlcmUgYXJlIGEgZmV3IHNpbXBsZSBydWxlcywgd2hpY2ggYWxsb3cgZm9yIGxvY2FsIHBvcnQgcmV1c2UgYnkKKyAqIGFuIGFwcGxpY2F0aW9uLiAgSW4gZXNzZW5jZToKKyAqCisgKgkxKSBTb2NrZXRzIGJvdW5kIHRvIGRpZmZlcmVudCBpbnRlcmZhY2VzIG1heSBzaGFyZSBhIGxvY2FsIHBvcnQuCisgKgkgICBGYWlsaW5nIHRoYXQsIGdvdG8gdGVzdCAyLgorICoJMikgSWYgYWxsIHNvY2tldHMgaGF2ZSBzay0+c2tfcmV1c2Ugc2V0LCBhbmQgbm9uZSBvZiB0aGVtIGFyZSBpbgorICoJICAgVENQX0xJU1RFTiBzdGF0ZSwgdGhlIHBvcnQgbWF5IGJlIHNoYXJlZC4KKyAqCSAgIEZhaWxpbmcgdGhhdCwgZ290byB0ZXN0IDMuCisgKgkzKSBJZiBhbGwgc29ja2V0cyBhcmUgYm91bmQgdG8gYSBzcGVjaWZpYyBpbmV0X3NrKHNrKS0+cmN2X3NhZGRyIGxvY2FsCisgKgkgICBhZGRyZXNzLCBhbmQgbm9uZSBvZiB0aGVtIGFyZSB0aGUgc2FtZSwgdGhlIHBvcnQgbWF5IGJlCisgKgkgICBzaGFyZWQuCisgKgkgICBGYWlsaW5nIHRoaXMsIHRoZSBwb3J0IGNhbm5vdCBiZSBzaGFyZWQuCisgKgorICogVGhlIGludGVyZXN0aW5nIHBvaW50LCBpcyB0ZXN0ICMyLiAgVGhpcyBpcyB3aGF0IGFuIEZUUCBzZXJ2ZXIgZG9lcworICogYWxsIGRheS4gIFRvIG9wdGltaXplIHRoaXMgY2FzZSB3ZSB1c2UgYSBzcGVjaWZpYyBmbGFnIGJpdCBkZWZpbmVkCisgKiBiZWxvdy4gIEFzIHdlIGFkZCBzb2NrZXRzIHRvIGEgYmluZCBidWNrZXQgbGlzdCwgd2UgcGVyZm9ybSBhCisgKiBjaGVjayBvZjogKG5ld3NrLT5za19yZXVzZSAmJiAobmV3c2stPnNrX3N0YXRlICE9IFRDUF9MSVNURU4pKQorICogQXMgbG9uZyBhcyBhbGwgc29ja2V0cyBhZGRlZCB0byBhIGJpbmQgYnVja2V0IHBhc3MgdGhpcyB0ZXN0LAorICogdGhlIGZsYWcgYml0IHdpbGwgYmUgc2V0LgorICogVGhlIHJlc3VsdGluZyBzaXR1YXRpb24gaXMgdGhhdCB0Y3Bfdls0Nl1fdmVyaWZ5X2JpbmQoKSBjYW4ganVzdCBjaGVjaworICogZm9yIHRoaXMgZmxhZyBiaXQsIGlmIGl0IGlzIHNldCBhbmQgdGhlIHNvY2tldCB0cnlpbmcgdG8gYmluZCBoYXMKKyAqIHNrLT5za19yZXVzZSBzZXQsIHdlIGRvbid0IGV2ZW4gaGF2ZSB0byB3YWxrIHRoZSBvd25lcnMgbGlzdCBhdCBhbGwsCisgKiB3ZSByZXR1cm4gdGhhdCBpdCBpcyBvayB0byBiaW5kIHRoaXMgc29ja2V0IHRvIHRoZSByZXF1ZXN0ZWQgbG9jYWwgcG9ydC4KKyAqCisgKiBTb3VuZHMgbGlrZSBhIGxvdCBvZiB3b3JrLCBidXQgaXQgaXMgd29ydGggaXQuICBJbiBhIG1vcmUgbmFpdmUKKyAqIGltcGxlbWVudGF0aW9uIChpZS4gY3VycmVudCBGcmVlQlNEIGV0Yy4pIHRoZSBlbnRpcmUgbGlzdCBvZiBwb3J0cworICogbXVzdCBiZSB3YWxrZWQgZm9yIGVhY2ggZGF0YSBwb3J0IG9wZW5lZCBieSBhbiBmdHAgc2VydmVyLiAgTmVlZGxlc3MKKyAqIHRvIHNheSwgdGhpcyBkb2VzIG5vdCBzY2FsZSBhdCBhbGwuICBXaXRoIGEgY291cGxlIHRob3VzYW5kIEZUUAorICogdXNlcnMgbG9nZ2VkIG9udG8geW91ciBib3gsIGlzbid0IGl0IG5pY2UgdG8ga25vdyB0aGF0IG5ldyBkYXRhCisgKiBwb3J0cyBhcmUgY3JlYXRlZCBpbiBPKDEpIHRpbWU/ICBJIHRob3VnaHQgc28uIDstKQktRGF2ZU0KKyAqLworc3RydWN0IHRjcF9iaW5kX2J1Y2tldCB7CisJdW5zaWduZWQgc2hvcnQJCXBvcnQ7CisJc2lnbmVkIHNob3J0CQlmYXN0cmV1c2U7CisJc3RydWN0IGhsaXN0X25vZGUJbm9kZTsKKwlzdHJ1Y3QgaGxpc3RfaGVhZAlvd25lcnM7Cit9OworCisjZGVmaW5lIHRiX2Zvcl9lYWNoKHRiLCBub2RlLCBoZWFkKSBobGlzdF9mb3JfZWFjaF9lbnRyeSh0Yiwgbm9kZSwgaGVhZCwgbm9kZSkKKworc3RydWN0IHRjcF9iaW5kX2hhc2hidWNrZXQgeworCXNwaW5sb2NrX3QJCWxvY2s7CisJc3RydWN0IGhsaXN0X2hlYWQJY2hhaW47Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCB0Y3BfYmluZF9idWNrZXQgKl9fdGJfaGVhZChzdHJ1Y3QgdGNwX2JpbmRfaGFzaGJ1Y2tldCAqaGVhZCkKK3sKKwlyZXR1cm4gaGxpc3RfZW50cnkoaGVhZC0+Y2hhaW4uZmlyc3QsIHN0cnVjdCB0Y3BfYmluZF9idWNrZXQsIG5vZGUpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCB0Y3BfYmluZF9idWNrZXQgKnRiX2hlYWQoc3RydWN0IHRjcF9iaW5kX2hhc2hidWNrZXQgKmhlYWQpCit7CisJcmV0dXJuIGhsaXN0X2VtcHR5KCZoZWFkLT5jaGFpbikgPyBOVUxMIDogX190Yl9oZWFkKGhlYWQpOworfQorCitleHRlcm4gc3RydWN0IHRjcF9oYXNoaW5mbyB7CisJLyogVGhpcyBpcyBmb3Igc29ja2V0cyB3aXRoIGZ1bGwgaWRlbnRpdHkgb25seS4gIFNvY2tldHMgaGVyZSB3aWxsCisJICogYWx3YXlzIGJlIHdpdGhvdXQgd2lsZGNhcmRzIGFuZCB3aWxsIGhhdmUgdGhlIGZvbGxvd2luZyBpbnZhcmlhbnQ6CisJICoKKwkgKiAgICAgICAgICBUQ1BfRVNUQUJMSVNIRUQgPD0gc2stPnNrX3N0YXRlIDwgVENQX0NMT1NFCisJICoKKwkgKiBGaXJzdCBoYWxmIG9mIHRoZSB0YWJsZSBpcyBmb3Igc29ja2V0cyBub3QgaW4gVElNRV9XQUlULCBzZWNvbmQgaGFsZgorCSAqIGlzIGZvciBUSU1FX1dBSVQgc29ja2V0cyBvbmx5LgorCSAqLworCXN0cnVjdCB0Y3BfZWhhc2hfYnVja2V0ICpfX3RjcF9laGFzaDsKKworCS8qIE9rLCBsZXQncyB0cnkgdGhpcywgSSBnaXZlIHVwLCB3ZSBkbyBuZWVkIGEgbG9jYWwgYmluZGluZworCSAqIFRDUCBoYXNoIGFzIHdlbGwgYXMgdGhlIG90aGVycyBmb3IgZmFzdCBiaW5kL2Nvbm5lY3QuCisJICovCisJc3RydWN0IHRjcF9iaW5kX2hhc2hidWNrZXQgKl9fdGNwX2JoYXNoOworCisJaW50IF9fdGNwX2JoYXNoX3NpemU7CisJaW50IF9fdGNwX2VoYXNoX3NpemU7CisKKwkvKiBBbGwgc29ja2V0cyBpbiBUQ1BfTElTVEVOIHN0YXRlIHdpbGwgYmUgaW4gaGVyZS4gIFRoaXMgaXMgdGhlIG9ubHkKKwkgKiB0YWJsZSB3aGVyZSB3aWxkY2FyZCdkIFRDUCBzb2NrZXRzIGNhbiBleGlzdC4gIEhhc2ggZnVuY3Rpb24gaGVyZQorCSAqIGlzIGp1c3QgbG9jYWwgcG9ydCBudW1iZXIuCisJICovCisJc3RydWN0IGhsaXN0X2hlYWQgX190Y3BfbGlzdGVuaW5nX2hhc2hbVENQX0xIVEFCTEVfU0laRV07CisKKwkvKiBBbGwgdGhlIGFib3ZlIG1lbWJlcnMgYXJlIHdyaXR0ZW4gb25jZSBhdCBib290dXAgYW5kCisJICogbmV2ZXIgd3JpdHRlbiBhZ2FpbiBfb3JfIGFyZSBwcmVkb21pbmFudGx5IHJlYWQtYWNjZXNzLgorCSAqCisJICogTm93IGFsaWduIHRvIGEgbmV3IGNhY2hlIGxpbmUgYXMgYWxsIHRoZSBmb2xsb3dpbmcgbWVtYmVycworCSAqIGFyZSBvZnRlbiBkaXJ0eS4KKwkgKi8KKwlyd2xvY2tfdCBfX3RjcF9saGFzaF9sb2NrIF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKKwlhdG9taWNfdCBfX3RjcF9saGFzaF91c2VyczsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBfX3RjcF9saGFzaF93YWl0OworCXNwaW5sb2NrX3QgX190Y3BfcG9ydGFsbG9jX2xvY2s7Cit9IHRjcF9oYXNoaW5mbzsKKworI2RlZmluZSB0Y3BfZWhhc2gJKHRjcF9oYXNoaW5mby5fX3RjcF9laGFzaCkKKyNkZWZpbmUgdGNwX2JoYXNoCSh0Y3BfaGFzaGluZm8uX190Y3BfYmhhc2gpCisjZGVmaW5lIHRjcF9laGFzaF9zaXplCSh0Y3BfaGFzaGluZm8uX190Y3BfZWhhc2hfc2l6ZSkKKyNkZWZpbmUgdGNwX2JoYXNoX3NpemUJKHRjcF9oYXNoaW5mby5fX3RjcF9iaGFzaF9zaXplKQorI2RlZmluZSB0Y3BfbGlzdGVuaW5nX2hhc2ggKHRjcF9oYXNoaW5mby5fX3RjcF9saXN0ZW5pbmdfaGFzaCkKKyNkZWZpbmUgdGNwX2xoYXNoX2xvY2sJKHRjcF9oYXNoaW5mby5fX3RjcF9saGFzaF9sb2NrKQorI2RlZmluZSB0Y3BfbGhhc2hfdXNlcnMJKHRjcF9oYXNoaW5mby5fX3RjcF9saGFzaF91c2VycykKKyNkZWZpbmUgdGNwX2xoYXNoX3dhaXQJKHRjcF9oYXNoaW5mby5fX3RjcF9saGFzaF93YWl0KQorI2RlZmluZSB0Y3BfcG9ydGFsbG9jX2xvY2sgKHRjcF9oYXNoaW5mby5fX3RjcF9wb3J0YWxsb2NfbG9jaykKKworZXh0ZXJuIGttZW1fY2FjaGVfdCAqdGNwX2J1Y2tldF9jYWNoZXA7CitleHRlcm4gc3RydWN0IHRjcF9iaW5kX2J1Y2tldCAqdGNwX2J1Y2tldF9jcmVhdGUoc3RydWN0IHRjcF9iaW5kX2hhc2hidWNrZXQgKmhlYWQsCisJCQkJCQkgdW5zaWduZWQgc2hvcnQgc251bSk7CitleHRlcm4gdm9pZCB0Y3BfYnVja2V0X2Rlc3Ryb3koc3RydWN0IHRjcF9iaW5kX2J1Y2tldCAqdGIpOworZXh0ZXJuIHZvaWQgdGNwX2J1Y2tldF91bmxvY2soc3RydWN0IHNvY2sgKnNrKTsKK2V4dGVybiBpbnQgdGNwX3BvcnRfcm92ZXI7CisKKy8qIFRoZXNlIGFyZSBBRiBpbmRlcGVuZGVudC4gKi8KK3N0YXRpYyBfX2lubGluZV9fIGludCB0Y3BfYmhhc2hmbihfX3UxNiBscG9ydCkKK3sKKwlyZXR1cm4gKGxwb3J0ICYgKHRjcF9iaGFzaF9zaXplIC0gMSkpOworfQorCitleHRlcm4gdm9pZCB0Y3BfYmluZF9oYXNoKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRjcF9iaW5kX2J1Y2tldCAqdGIsCisJCQkgIHVuc2lnbmVkIHNob3J0IHNudW0pOworCisjaWYgKEJJVFNfUEVSX0xPTkcgPT0gNjQpCisjZGVmaW5lIFRDUF9BRERSQ01QX0FMSUdOX0JZVEVTIDgKKyNlbHNlCisjZGVmaW5lIFRDUF9BRERSQ01QX0FMSUdOX0JZVEVTIDQKKyNlbmRpZgorCisvKiBUaGlzIGlzIGEgVElNRV9XQUlUIGJ1Y2tldC4gIEl0IHdvcmtzIGFyb3VuZCB0aGUgbWVtb3J5IGNvbnN1bXB0aW9uCisgKiBwcm9ibGVtcyBvZiBzb2NrZXRzIGluIHN1Y2ggYSBzdGF0ZSBvbiBoZWF2aWx5IGxvYWRlZCBzZXJ2ZXJzLCBidXQKKyAqIHdpdGhvdXQgdmlvbGF0aW5nIHRoZSBwcm90b2NvbCBzcGVjaWZpY2F0aW9uLgorICovCitzdHJ1Y3QgdGNwX3R3X2J1Y2tldCB7CisJLyoKKwkgKiBOb3cgc3RydWN0IHNvY2sgYWxzbyB1c2VzIHNvY2tfY29tbW9uLCBzbyBwbGVhc2UganVzdAorCSAqIGRvbid0IGFkZCBub3RoaW5nIGJlZm9yZSB0aGlzIGZpcnN0IG1lbWJlciAoX190d19jb21tb24pIC0tYWNtZQorCSAqLworCXN0cnVjdCBzb2NrX2NvbW1vbglfX3R3X2NvbW1vbjsKKyNkZWZpbmUgdHdfZmFtaWx5CQlfX3R3X2NvbW1vbi5za2NfZmFtaWx5CisjZGVmaW5lIHR3X3N0YXRlCQlfX3R3X2NvbW1vbi5za2Nfc3RhdGUKKyNkZWZpbmUgdHdfcmV1c2UJCV9fdHdfY29tbW9uLnNrY19yZXVzZQorI2RlZmluZSB0d19ib3VuZF9kZXZfaWYJCV9fdHdfY29tbW9uLnNrY19ib3VuZF9kZXZfaWYKKyNkZWZpbmUgdHdfbm9kZQkJCV9fdHdfY29tbW9uLnNrY19ub2RlCisjZGVmaW5lIHR3X2JpbmRfbm9kZQkJX190d19jb21tb24uc2tjX2JpbmRfbm9kZQorI2RlZmluZSB0d19yZWZjbnQJCV9fdHdfY29tbW9uLnNrY19yZWZjbnQKKwl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyCXR3X3N1YnN0YXRlOworCXVuc2lnbmVkIGNoYXIJCXR3X3Jjdl93c2NhbGU7CisJX191MTYJCQl0d19zcG9ydDsKKwkvKiBTb2NrZXQgZGVtdWx0aXBsZXggY29tcGFyaXNvbnMgb24gaW5jb21pbmcgcGFja2V0cy4gKi8KKwkvKiB0aGVzZSBmaXZlIGFyZSBpbiBpbmV0X3NvY2sgKi8KKwlfX3UzMgkJCXR3X2RhZGRyCisJCV9fYXR0cmlidXRlX18oKGFsaWduZWQoVENQX0FERFJDTVBfQUxJR05fQllURVMpKSk7CisJX191MzIJCQl0d19yY3Zfc2FkZHI7CisJX191MTYJCQl0d19kcG9ydDsKKwlfX3UxNgkJCXR3X251bTsKKwkvKiBBbmQgdGhlc2UgYXJlIG91cnMuICovCisJaW50CQkJdHdfaGFzaGVudDsKKwlpbnQJCQl0d190aW1lb3V0OworCV9fdTMyCQkJdHdfcmN2X254dDsKKwlfX3UzMgkJCXR3X3NuZF9ueHQ7CisJX191MzIJCQl0d19yY3Zfd25kOworCV9fdTMyCQkJdHdfdHNfcmVjZW50OworCWxvbmcJCQl0d190c19yZWNlbnRfc3RhbXA7CisJdW5zaWduZWQgbG9uZwkJdHdfdHRkOworCXN0cnVjdCB0Y3BfYmluZF9idWNrZXQJKnR3X3RiOworCXN0cnVjdCBobGlzdF9ub2RlCXR3X2RlYXRoX25vZGU7CisjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCisJc3RydWN0IGluNl9hZGRyCQl0d192Nl9kYWRkcjsKKwlzdHJ1Y3QgaW42X2FkZHIJCXR3X3Y2X3Jjdl9zYWRkcjsKKwlpbnQJCQl0d192Nl9pcHY2b25seTsKKyNlbmRpZgorfTsKKworc3RhdGljIF9faW5saW5lX18gdm9pZCB0d19hZGRfbm9kZShzdHJ1Y3QgdGNwX3R3X2J1Y2tldCAqdHcsCisJCQkJICAgc3RydWN0IGhsaXN0X2hlYWQgKmxpc3QpCit7CisJaGxpc3RfYWRkX2hlYWQoJnR3LT50d19ub2RlLCBsaXN0KTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCB0d19hZGRfYmluZF9ub2RlKHN0cnVjdCB0Y3BfdHdfYnVja2V0ICp0dywKKwkJCQkJc3RydWN0IGhsaXN0X2hlYWQgKmxpc3QpCit7CisJaGxpc3RfYWRkX2hlYWQoJnR3LT50d19iaW5kX25vZGUsIGxpc3QpOworfQorCitzdGF0aWMgaW5saW5lIGludCB0d19kZWFkX2hhc2hlZChzdHJ1Y3QgdGNwX3R3X2J1Y2tldCAqdHcpCit7CisJcmV0dXJuIHR3LT50d19kZWF0aF9ub2RlLnBwcmV2ICE9IE5VTEw7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgdHdfZGVhZF9ub2RlX2luaXQoc3RydWN0IHRjcF90d19idWNrZXQgKnR3KQoreworCXR3LT50d19kZWF0aF9ub2RlLnBwcmV2ID0gTlVMTDsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX3R3X2RlbF9kZWFkX25vZGUoc3RydWN0IHRjcF90d19idWNrZXQgKnR3KQoreworCV9faGxpc3RfZGVsKCZ0dy0+dHdfZGVhdGhfbm9kZSk7CisJdHdfZGVhZF9ub2RlX2luaXQodHcpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgdHdfZGVsX2RlYWRfbm9kZShzdHJ1Y3QgdGNwX3R3X2J1Y2tldCAqdHcpCit7CisJaWYgKHR3X2RlYWRfaGFzaGVkKHR3KSkgeworCQlfX3R3X2RlbF9kZWFkX25vZGUodHcpOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgdHdfZm9yX2VhY2godHcsIG5vZGUsIGhlYWQpIFwKKwlobGlzdF9mb3JfZWFjaF9lbnRyeSh0dywgbm9kZSwgaGVhZCwgdHdfbm9kZSkKKworI2RlZmluZSB0d19mb3JfZWFjaF9pbm1hdGUodHcsIG5vZGUsIGphaWwpIFwKKwlobGlzdF9mb3JfZWFjaF9lbnRyeSh0dywgbm9kZSwgamFpbCwgdHdfZGVhdGhfbm9kZSkKKworI2RlZmluZSB0d19mb3JfZWFjaF9pbm1hdGVfc2FmZSh0dywgbm9kZSwgc2FmZSwgamFpbCkgXAorCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodHcsIG5vZGUsIHNhZmUsIGphaWwsIHR3X2RlYXRoX25vZGUpCisKKyNkZWZpbmUgdGNwdHdfc2soX19zaykJKChzdHJ1Y3QgdGNwX3R3X2J1Y2tldCAqKShfX3NrKSkKKworc3RhdGljIGlubGluZSB1MzIgdGNwX3Y0X3Jjdl9zYWRkcihjb25zdCBzdHJ1Y3Qgc29jayAqc2spCit7CisJcmV0dXJuIGxpa2VseShzay0+c2tfc3RhdGUgIT0gVENQX1RJTUVfV0FJVCkgPworCQlpbmV0X3NrKHNrKS0+cmN2X3NhZGRyIDogdGNwdHdfc2soc2spLT50d19yY3Zfc2FkZHI7Cit9CisKKyNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGluNl9hZGRyICpfX3RjcF92Nl9yY3Zfc2FkZHIoY29uc3Qgc3RydWN0IHNvY2sgKnNrKQoreworCXJldHVybiBsaWtlbHkoc2stPnNrX3N0YXRlICE9IFRDUF9USU1FX1dBSVQpID8KKwkJJmluZXQ2X3NrKHNrKS0+cmN2X3NhZGRyIDogJnRjcHR3X3NrKHNrKS0+dHdfdjZfcmN2X3NhZGRyOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpbjZfYWRkciAqdGNwX3Y2X3Jjdl9zYWRkcihjb25zdCBzdHJ1Y3Qgc29jayAqc2spCit7CisJcmV0dXJuIHNrLT5za19mYW1pbHkgPT0gQUZfSU5FVDYgPyBfX3RjcF92Nl9yY3Zfc2FkZHIoc2spIDogTlVMTDsKK30KKworI2RlZmluZSB0Y3B0d19za19pcHY2b25seShfX3NrKQkodGNwdHdfc2soX19zayktPnR3X3Y2X2lwdjZvbmx5KQorCitzdGF0aWMgaW5saW5lIGludCB0Y3BfdjZfaXB2Nm9ubHkoY29uc3Qgc3RydWN0IHNvY2sgKnNrKQoreworCXJldHVybiBsaWtlbHkoc2stPnNrX3N0YXRlICE9IFRDUF9USU1FX1dBSVQpID8KKwkJaXB2Nl9vbmx5X3NvY2soc2spIDogdGNwdHdfc2tfaXB2Nm9ubHkoc2spOworfQorI2Vsc2UKKyMgZGVmaW5lIF9fdGNwX3Y2X3Jjdl9zYWRkcihfX3NrKQlOVUxMCisjIGRlZmluZSB0Y3BfdjZfcmN2X3NhZGRyKF9fc2spCQlOVUxMCisjIGRlZmluZSB0Y3B0d19za19pcHY2b25seShfX3NrKQkwCisjIGRlZmluZSB0Y3BfdjZfaXB2Nm9ubHkoX19zaykJCTAKKyNlbmRpZgorCitleHRlcm4ga21lbV9jYWNoZV90ICp0Y3BfdGltZXdhaXRfY2FjaGVwOworCitzdGF0aWMgaW5saW5lIHZvaWQgdGNwX3R3X3B1dChzdHJ1Y3QgdGNwX3R3X2J1Y2tldCAqdHcpCit7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnR3LT50d19yZWZjbnQpKSB7CisjaWZkZWYgSU5FVF9SRUZDTlRfREVCVUcKKwkJcHJpbnRrKEtFUk5fREVCVUcgInR3X2J1Y2tldCAlcCByZWxlYXNlZFxuIiwgdHcpOworI2VuZGlmCisJCWttZW1fY2FjaGVfZnJlZSh0Y3BfdGltZXdhaXRfY2FjaGVwLCB0dyk7CisJfQorfQorCitleHRlcm4gYXRvbWljX3QgdGNwX29ycGhhbl9jb3VudDsKK2V4dGVybiBpbnQgdGNwX3R3X2NvdW50OworZXh0ZXJuIHZvaWQgdGNwX3RpbWVfd2FpdChzdHJ1Y3Qgc29jayAqc2ssIGludCBzdGF0ZSwgaW50IHRpbWVvKTsKK2V4dGVybiB2b2lkIHRjcF90d19kZXNjaGVkdWxlKHN0cnVjdCB0Y3BfdHdfYnVja2V0ICp0dyk7CisKKworLyogU29ja2V0IGRlbXV4IGVuZ2luZSB0b3lzLiAqLworI2lmZGVmIF9fQklHX0VORElBTgorI2RlZmluZSBUQ1BfQ09NQklORURfUE9SVFMoX19zcG9ydCwgX19kcG9ydCkgXAorCSgoKF9fdTMyKShfX3Nwb3J0KTw8MTYpIHwgKF9fdTMyKShfX2Rwb3J0KSkKKyNlbHNlIC8qIF9fTElUVExFX0VORElBTiAqLworI2RlZmluZSBUQ1BfQ09NQklORURfUE9SVFMoX19zcG9ydCwgX19kcG9ydCkgXAorCSgoKF9fdTMyKShfX2Rwb3J0KTw8MTYpIHwgKF9fdTMyKShfX3Nwb3J0KSkKKyNlbmRpZgorCisjaWYgKEJJVFNfUEVSX0xPTkcgPT0gNjQpCisjaWZkZWYgX19CSUdfRU5ESUFOCisjZGVmaW5lIFRDUF9WNF9BRERSX0NPT0tJRShfX25hbWUsIF9fc2FkZHIsIF9fZGFkZHIpIFwKKwlfX3U2NCBfX25hbWUgPSAoKChfX3U2NCkoX19zYWRkcikpPDwzMil8KChfX3U2NCkoX19kYWRkcikpOworI2Vsc2UgLyogX19MSVRUTEVfRU5ESUFOICovCisjZGVmaW5lIFRDUF9WNF9BRERSX0NPT0tJRShfX25hbWUsIF9fc2FkZHIsIF9fZGFkZHIpIFwKKwlfX3U2NCBfX25hbWUgPSAoKChfX3U2NCkoX19kYWRkcikpPDwzMil8KChfX3U2NCkoX19zYWRkcikpOworI2VuZGlmIC8qIF9fQklHX0VORElBTiAqLworI2RlZmluZSBUQ1BfSVBWNF9NQVRDSChfX3NrLCBfX2Nvb2tpZSwgX19zYWRkciwgX19kYWRkciwgX19wb3J0cywgX19kaWYpXAorCSgoKCooKF9fdTY0ICopJihpbmV0X3NrKF9fc2spLT5kYWRkcikpKT09IChfX2Nvb2tpZSkpCSYmCVwKKwkgKCgqKChfX3UzMiAqKSYoaW5ldF9zayhfX3NrKS0+ZHBvcnQpKSk9PSAoX19wb3J0cykpCSYmCVwKKwkgKCEoKF9fc2spLT5za19ib3VuZF9kZXZfaWYpIHx8ICgoX19zayktPnNrX2JvdW5kX2Rldl9pZiA9PSAoX19kaWYpKSkpCisjZGVmaW5lIFRDUF9JUFY0X1RXX01BVENIKF9fc2ssIF9fY29va2llLCBfX3NhZGRyLCBfX2RhZGRyLCBfX3BvcnRzLCBfX2RpZilcCisJKCgoKigoX191NjQgKikmKHRjcHR3X3NrKF9fc2spLT50d19kYWRkcikpKSA9PSAoX19jb29raWUpKSAmJglcCisJICgoKigoX191MzIgKikmKHRjcHR3X3NrKF9fc2spLT50d19kcG9ydCkpKSA9PSAoX19wb3J0cykpICYmCVwKKwkgKCEoKF9fc2spLT5za19ib3VuZF9kZXZfaWYpIHx8ICgoX19zayktPnNrX2JvdW5kX2Rldl9pZiA9PSAoX19kaWYpKSkpCisjZWxzZSAvKiAzMi1iaXQgYXJjaCAqLworI2RlZmluZSBUQ1BfVjRfQUREUl9DT09LSUUoX19uYW1lLCBfX3NhZGRyLCBfX2RhZGRyKQorI2RlZmluZSBUQ1BfSVBWNF9NQVRDSChfX3NrLCBfX2Nvb2tpZSwgX19zYWRkciwgX19kYWRkciwgX19wb3J0cywgX19kaWYpXAorCSgoaW5ldF9zayhfX3NrKS0+ZGFkZHIJCQk9PSAoX19zYWRkcikpCSYmCVwKKwkgKGluZXRfc2soX19zayktPnJjdl9zYWRkcgkJPT0gKF9fZGFkZHIpKQkmJglcCisJICgoKigoX191MzIgKikmKGluZXRfc2soX19zayktPmRwb3J0KSkpPT0gKF9fcG9ydHMpKQkmJglcCisJICghKChfX3NrKS0+c2tfYm91bmRfZGV2X2lmKSB8fCAoKF9fc2spLT5za19ib3VuZF9kZXZfaWYgPT0gKF9fZGlmKSkpKQorI2RlZmluZSBUQ1BfSVBWNF9UV19NQVRDSChfX3NrLCBfX2Nvb2tpZSwgX19zYWRkciwgX19kYWRkciwgX19wb3J0cywgX19kaWYpXAorCSgodGNwdHdfc2soX19zayktPnR3X2RhZGRyCQk9PSAoX19zYWRkcikpCSYmCVwKKwkgKHRjcHR3X3NrKF9fc2spLT50d19yY3Zfc2FkZHIJCT09IChfX2RhZGRyKSkJJiYJXAorCSAoKCooKF9fdTMyICopJih0Y3B0d19zayhfX3NrKS0+dHdfZHBvcnQpKSkgPT0gKF9fcG9ydHMpKSAmJglcCisJICghKChfX3NrKS0+c2tfYm91bmRfZGV2X2lmKSB8fCAoKF9fc2spLT5za19ib3VuZF9kZXZfaWYgPT0gKF9fZGlmKSkpKQorI2VuZGlmIC8qIDY0LWJpdCBhcmNoICovCisKKyNkZWZpbmUgVENQX0lQVjZfTUFUQ0goX19zaywgX19zYWRkciwgX19kYWRkciwgX19wb3J0cywgX19kaWYpCSAgIFwKKwkoKCgqKChfX3UzMiAqKSYoaW5ldF9zayhfX3NrKS0+ZHBvcnQpKSk9PSAoX19wb3J0cykpICAgCSYmIFwKKwkgKChfX3NrKS0+c2tfZmFtaWx5CQk9PSBBRl9JTkVUNikJCSYmIFwKKwkgaXB2Nl9hZGRyX2VxdWFsKCZpbmV0Nl9zayhfX3NrKS0+ZGFkZHIsIChfX3NhZGRyKSkJJiYgXAorCSBpcHY2X2FkZHJfZXF1YWwoJmluZXQ2X3NrKF9fc2spLT5yY3Zfc2FkZHIsIChfX2RhZGRyKSkJJiYgXAorCSAoISgoX19zayktPnNrX2JvdW5kX2Rldl9pZikgfHwgKChfX3NrKS0+c2tfYm91bmRfZGV2X2lmID09IChfX2RpZikpKSkKKworLyogVGhlc2UgY2FuIGhhdmUgd2lsZGNhcmRzLCBkb24ndCB0cnkgdG9vIGhhcmQuICovCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgdGNwX2xoYXNoZm4odW5zaWduZWQgc2hvcnQgbnVtKQoreworCXJldHVybiBudW0gJiAoVENQX0xIVEFCTEVfU0laRSAtIDEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgdGNwX3NrX2xpc3Rlbl9oYXNoZm4oc3RydWN0IHNvY2sgKnNrKQoreworCXJldHVybiB0Y3BfbGhhc2hmbihpbmV0X3NrKHNrKS0+bnVtKTsKK30KKworI2RlZmluZSBNQVhfVENQX0hFQURFUgkoMTI4ICsgTUFYX0hFQURFUikKKworLyogCisgKiBOZXZlciBvZmZlciBhIHdpbmRvdyBvdmVyIDMyNzY3IHdpdGhvdXQgdXNpbmcgd2luZG93IHNjYWxpbmcuIFNvbWUKKyAqIHBvb3Igc3RhY2tzIGRvIHNpZ25lZCAxNmJpdCBtYXRocyEgCisgKi8KKyNkZWZpbmUgTUFYX1RDUF9XSU5ET1cJCTMyNzY3VQorCisvKiBNaW5pbWFsIGFjY2VwdGVkIE1TUy4gSXQgaXMgKDYwKzYwKzgpIC0gKDIwKzIwKS4gKi8KKyNkZWZpbmUgVENQX01JTl9NU1MJCTg4VQorCisvKiBNaW5pbWFsIFJDVl9NU1MuICovCisjZGVmaW5lIFRDUF9NSU5fUkNWTVNTCQk1MzZVCisKKy8qIEFmdGVyIHJlY2VpdmluZyB0aGlzIGFtb3VudCBvZiBkdXBsaWNhdGUgQUNLcyBmYXN0IHJldHJhbnNtaXQgc3RhcnRzLiAqLworI2RlZmluZSBUQ1BfRkFTVFJFVFJBTlNfVEhSRVNIIDMKKworLyogTWF4aW1hbCByZW9yZGVyaW5nLiAqLworI2RlZmluZSBUQ1BfTUFYX1JFT1JERVJJTkcJMTI3CisKKy8qIE1heGltYWwgbnVtYmVyIG9mIEFDS3Mgc2VudCBxdWlja2x5IHRvIGFjY2VsZXJhdGUgc2xvdy1zdGFydC4gKi8KKyNkZWZpbmUgVENQX01BWF9RVUlDS0FDS1MJMTZVCisKKy8qIHVyZ19kYXRhIHN0YXRlcyAqLworI2RlZmluZSBUQ1BfVVJHX1ZBTElECTB4MDEwMAorI2RlZmluZSBUQ1BfVVJHX05PVFlFVAkweDAyMDAKKyNkZWZpbmUgVENQX1VSR19SRUFECTB4MDQwMAorCisjZGVmaW5lIFRDUF9SRVRSMQkzCS8qCisJCQkJICogVGhpcyBpcyBob3cgbWFueSByZXRyaWVzIGl0IGRvZXMgYmVmb3JlIGl0CisJCQkJICogdHJpZXMgdG8gZmlndXJlIG91dCBpZiB0aGUgZ2F0ZXdheSBpcworCQkJCSAqIGRvd24uIE1pbmltYWwgUkZDIHZhbHVlIGlzIDM7IGl0IGNvcnJlc3BvbmRzCisJCQkJICogdG8gfjNzZWMtOG1pbiBkZXBlbmRpbmcgb24gUlRPLgorCQkJCSAqLworCisjZGVmaW5lIFRDUF9SRVRSMgkxNQkvKgorCQkJCSAqIFRoaXMgc2hvdWxkIHRha2UgYXQgbGVhc3QKKwkJCQkgKiA5MCBtaW51dGVzIHRvIHRpbWUgb3V0LgorCQkJCSAqIFJGQzExMjIgc2F5cyB0aGF0IHRoZSBsaW1pdCBpcyAxMDAgc2VjLgorCQkJCSAqIDE1IGlzIH4xMy0zMG1pbiBkZXBlbmRpbmcgb24gUlRPLgorCQkJCSAqLworCisjZGVmaW5lIFRDUF9TWU5fUkVUUklFUwkgNQkvKiBudW1iZXIgb2YgdGltZXMgdG8gcmV0cnkgYWN0aXZlIG9wZW5pbmcgYQorCQkJCSAqIGNvbm5lY3Rpb246IH4xODBzZWMgaXMgUkZDIG1pbnVtdW0JKi8KKworI2RlZmluZSBUQ1BfU1lOQUNLX1JFVFJJRVMgNQkvKiBudW1iZXIgb2YgdGltZXMgdG8gcmV0cnkgcGFzc2l2ZSBvcGVuaW5nIGEKKwkJCQkgKiBjb25uZWN0aW9uOiB+MTgwc2VjIGlzIFJGQyBtaW51bXVtCSovCisKKworI2RlZmluZSBUQ1BfT1JQSEFOX1JFVFJJRVMgNwkvKiBudW1iZXIgb2YgdGltZXMgdG8gcmV0cnkgb24gYW4gb3JwaGFuZWQKKwkJCQkgKiBzb2NrZXQuIDcgaXMgfjUwc2VjLTE2bWluLgorCQkJCSAqLworCisKKyNkZWZpbmUgVENQX1RJTUVXQUlUX0xFTiAoNjAqSFopIC8qIGhvdyBsb25nIHRvIHdhaXQgdG8gZGVzdHJveSBUSU1FLVdBSVQKKwkJCQkgICogc3RhdGUsIGFib3V0IDYwIHNlY29uZHMJKi8KKyNkZWZpbmUgVENQX0ZJTl9USU1FT1VUCVRDUF9USU1FV0FJVF9MRU4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJTRCBzdHlsZSBGSU5fV0FJVDIgZGVhZGxvY2sgYnJlYWtlci4KKwkJCQkgICogSXQgdXNlZCB0byBiZSAzbWluLCBuZXcgdmFsdWUgaXMgNjBzZWMsCisJCQkJICAqIHRvIGNvbWJpbmUgRklOLVdBSVQtMiB0aW1lb3V0IHdpdGgKKwkJCQkgICogVElNRS1XQUlUIHRpbWVyLgorCQkJCSAgKi8KKworI2RlZmluZSBUQ1BfREVMQUNLX01BWAkoKHVuc2lnbmVkKShIWi81KSkJLyogbWF4aW1hbCB0aW1lIHRvIGRlbGF5IGJlZm9yZSBzZW5kaW5nIGFuIEFDSyAqLworI2lmIEhaID49IDEwMAorI2RlZmluZSBUQ1BfREVMQUNLX01JTgkoKHVuc2lnbmVkKShIWi8yNSkpCS8qIG1pbmltYWwgdGltZSB0byBkZWxheSBiZWZvcmUgc2VuZGluZyBhbiBBQ0sgKi8KKyNkZWZpbmUgVENQX0FUT19NSU4JKCh1bnNpZ25lZCkoSFovMjUpKQorI2Vsc2UKKyNkZWZpbmUgVENQX0RFTEFDS19NSU4JNFUKKyNkZWZpbmUgVENQX0FUT19NSU4JNFUKKyNlbmRpZgorI2RlZmluZSBUQ1BfUlRPX01BWAkoKHVuc2lnbmVkKSgxMjAqSFopKQorI2RlZmluZSBUQ1BfUlRPX01JTgkoKHVuc2lnbmVkKShIWi81KSkKKyNkZWZpbmUgVENQX1RJTUVPVVRfSU5JVCAoKHVuc2lnbmVkKSgzKkhaKSkJLyogUkZDIDExMjIgaW5pdGlhbCBSVE8gdmFsdWUJKi8KKworI2RlZmluZSBUQ1BfUkVTT1VSQ0VfUFJPQkVfSU5URVJWQUwgKCh1bnNpZ25lZCkoSFovMlUpKSAvKiBNYXhpbWFsIGludGVydmFsIGJldHdlZW4gcHJvYmVzCisJCQkJCSAgICAgICAgICAgICAgICAgKiBmb3IgbG9jYWwgcmVzb3VyY2VzLgorCQkJCQkgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVENQX0tFRVBBTElWRV9USU1FCSgxMjAqNjAqSFopCS8qIHR3byBob3VycyAqLworI2RlZmluZSBUQ1BfS0VFUEFMSVZFX1BST0JFUwk5CQkvKiBNYXggb2YgOSBrZWVwYWxpdmUgcHJvYmVzCSovCisjZGVmaW5lIFRDUF9LRUVQQUxJVkVfSU5UVkwJKDc1KkhaKQorCisjZGVmaW5lIE1BWF9UQ1BfS0VFUElETEUJMzI3NjcKKyNkZWZpbmUgTUFYX1RDUF9LRUVQSU5UVkwJMzI3NjcKKyNkZWZpbmUgTUFYX1RDUF9LRUVQQ05UCQkxMjcKKyNkZWZpbmUgTUFYX1RDUF9TWU5DTlQJCTEyNworCisjZGVmaW5lIFRDUF9TWU5RX0lOVEVSVkFMCShIWi81KQkvKiBQZXJpb2Qgb2YgU1lOQUNLIHRpbWVyICovCisjZGVmaW5lIFRDUF9TWU5RX0hTSVpFCQk1MTIJLyogU2l6ZSBvZiBTWU5BQ0sgaGFzaCB0YWJsZSAqLworCisjZGVmaW5lIFRDUF9QQVdTXzI0REFZUwkoNjAgKiA2MCAqIDI0ICogMjQpCisjZGVmaW5lIFRDUF9QQVdTX01TTAk2MAkJLyogUGVyLWhvc3QgdGltZXN0YW1wcyBhcmUgaW52YWxpZGF0ZWQKKwkJCQkJICogYWZ0ZXIgdGhpcyB0aW1lLiBJdCBzaG91bGQgYmUgZXF1YWwKKwkJCQkJICogKG9yIGdyZWF0ZXIgdGhhbikgVENQX1RJTUVXQUlUX0xFTgorCQkJCQkgKiB0byBwcm92aWRlIHJlbGlhYmlsaXR5IGVxdWFsIHRvIG9uZQorCQkJCQkgKiBwcm92aWRlZCBieSB0aW1ld2FpdCBzdGF0ZS4KKwkJCQkJICovCisjZGVmaW5lIFRDUF9QQVdTX1dJTkRPVwkxCQkvKiBSZXBsYXkgd2luZG93IGZvciBwZXItaG9zdAorCQkJCQkgKiB0aW1lc3RhbXBzLiBJdCBtdXN0IGJlIGxlc3MgdGhhbgorCQkJCQkgKiBtaW5pbWFsIHRpbWV3YWl0IGxpZmV0aW1lLgorCQkJCQkgKi8KKworI2RlZmluZSBUQ1BfVFdfUkVDWUNMRV9TTE9UU19MT0cJNQorI2RlZmluZSBUQ1BfVFdfUkVDWUNMRV9TTE9UUwkJKDE8PFRDUF9UV19SRUNZQ0xFX1NMT1RTX0xPRykKKworLyogSWYgdGltZSA+IDRzZWMsIGl0IGlzICJzbG93IiBwYXRoLCBubyByZWN5Y2xpbmcgaXMgcmVxdWlyZWQsCisgICBzbyB0aGF0IHdlIHNlbGVjdCB0aWNrIHRvIGdldCByYW5nZSBhYm91dCA0IHNlY29uZHMuCisgKi8KKworI2lmIEhaIDw9IDE2IHx8IEhaID4gNDA5NgorIyBlcnJvciBVbnN1cHBvcnRlZDogSFogPD0gMTYgb3IgSFogPiA0MDk2CisjZWxpZiBIWiA8PSAzMgorIyBkZWZpbmUgVENQX1RXX1JFQ1lDTEVfVElDSyAoNSsyLVRDUF9UV19SRUNZQ0xFX1NMT1RTX0xPRykKKyNlbGlmIEhaIDw9IDY0CisjIGRlZmluZSBUQ1BfVFdfUkVDWUNMRV9USUNLICg2KzItVENQX1RXX1JFQ1lDTEVfU0xPVFNfTE9HKQorI2VsaWYgSFogPD0gMTI4CisjIGRlZmluZSBUQ1BfVFdfUkVDWUNMRV9USUNLICg3KzItVENQX1RXX1JFQ1lDTEVfU0xPVFNfTE9HKQorI2VsaWYgSFogPD0gMjU2CisjIGRlZmluZSBUQ1BfVFdfUkVDWUNMRV9USUNLICg4KzItVENQX1RXX1JFQ1lDTEVfU0xPVFNfTE9HKQorI2VsaWYgSFogPD0gNTEyCisjIGRlZmluZSBUQ1BfVFdfUkVDWUNMRV9USUNLICg5KzItVENQX1RXX1JFQ1lDTEVfU0xPVFNfTE9HKQorI2VsaWYgSFogPD0gMTAyNAorIyBkZWZpbmUgVENQX1RXX1JFQ1lDTEVfVElDSyAoMTArMi1UQ1BfVFdfUkVDWUNMRV9TTE9UU19MT0cpCisjZWxpZiBIWiA8PSAyMDQ4CisjIGRlZmluZSBUQ1BfVFdfUkVDWUNMRV9USUNLICgxMSsyLVRDUF9UV19SRUNZQ0xFX1NMT1RTX0xPRykKKyNlbHNlCisjIGRlZmluZSBUQ1BfVFdfUkVDWUNMRV9USUNLICgxMisyLVRDUF9UV19SRUNZQ0xFX1NMT1RTX0xPRykKKyNlbmRpZgorCisjZGVmaW5lIEJJQ1RDUF9CRVRBX1NDQUxFICAgIDEwMjQJLyogU2NhbGUgZmFjdG9yIGJldGEgY2FsY3VsYXRpb24KKwkJCQkJICogbWF4X2N3bmQgPSBzbmRfY3duZCAqIGJldGEKKwkJCQkJICovCisjZGVmaW5lIEJJQ1RDUF9NQVhfSU5DUkVNRU5UIDMyCQkvKgorCQkJCQkgKiBMaW1pdCBvbiB0aGUgYW1vdW50IG9mCisJCQkJCSAqIGluY3JlbWVudCBhbGxvd2VkIGR1cmluZworCQkJCQkgKiBiaW5hcnkgc2VhcmNoLgorCQkJCQkgKi8KKyNkZWZpbmUgQklDVENQX0ZVTkNfT0ZfTUlOX0lOQ1IgMTEJLyoKKwkJCQkJICogbG9nKEIvU21pbikvbG9nKEIvKEItMSkpKzEsCisJCQkJCSAqIFNtaW46bWluIGluY3JlbWVudAorCQkJCQkgKiBCOmxvZyBmYWN0b3IKKwkJCQkJICovCisjZGVmaW5lIEJJQ1RDUF9CCQk0CSAvKgorCQkJCQkgICogSW4gYmluYXJ5IHNlYXJjaCwKKwkJCQkJICAqIGdvIHRvIHBvaW50IChtYXgrbWluKS9OCisJCQkJCSAgKi8KKworLyoKKyAqCVRDUCBvcHRpb24KKyAqLworIAorI2RlZmluZSBUQ1BPUFRfTk9QCQkxCS8qIFBhZGRpbmcgKi8KKyNkZWZpbmUgVENQT1BUX0VPTAkJMAkvKiBFbmQgb2Ygb3B0aW9ucyAqLworI2RlZmluZSBUQ1BPUFRfTVNTCQkyCS8qIFNlZ21lbnQgc2l6ZSBuZWdvdGlhdGluZyAqLworI2RlZmluZSBUQ1BPUFRfV0lORE9XCQkzCS8qIFdpbmRvdyBzY2FsaW5nICovCisjZGVmaW5lIFRDUE9QVF9TQUNLX1BFUk0gICAgICAgIDQgICAgICAgLyogU0FDSyBQZXJtaXR0ZWQgKi8KKyNkZWZpbmUgVENQT1BUX1NBQ0sgICAgICAgICAgICAgNSAgICAgICAvKiBTQUNLIEJsb2NrICovCisjZGVmaW5lIFRDUE9QVF9USU1FU1RBTVAJOAkvKiBCZXR0ZXIgUlRUIGVzdGltYXRpb25zL1BBV1MgKi8KKworLyoKKyAqICAgICBUQ1Agb3B0aW9uIGxlbmd0aHMKKyAqLworCisjZGVmaW5lIFRDUE9MRU5fTVNTICAgICAgICAgICAgNAorI2RlZmluZSBUQ1BPTEVOX1dJTkRPVyAgICAgICAgIDMKKyNkZWZpbmUgVENQT0xFTl9TQUNLX1BFUk0gICAgICAyCisjZGVmaW5lIFRDUE9MRU5fVElNRVNUQU1QICAgICAgMTAKKworLyogQnV0IHRoaXMgaXMgd2hhdCBzdGFja3MgcmVhbGx5IHNlbmQgb3V0LiAqLworI2RlZmluZSBUQ1BPTEVOX1RTVEFNUF9BTElHTkVECQkxMgorI2RlZmluZSBUQ1BPTEVOX1dTQ0FMRV9BTElHTkVECQk0CisjZGVmaW5lIFRDUE9MRU5fU0FDS1BFUk1fQUxJR05FRAk0CisjZGVmaW5lIFRDUE9MRU5fU0FDS19CQVNFCQkyCisjZGVmaW5lIFRDUE9MRU5fU0FDS19CQVNFX0FMSUdORUQJNAorI2RlZmluZSBUQ1BPTEVOX1NBQ0tfUEVSQkxPQ0sJCTgKKworI2RlZmluZSBUQ1BfVElNRV9SRVRSQU5TCTEJLyogUmV0cmFuc21pdCB0aW1lciAqLworI2RlZmluZSBUQ1BfVElNRV9EQUNLCQkyCS8qIERlbGF5ZWQgYWNrIHRpbWVyICovCisjZGVmaW5lIFRDUF9USU1FX1BST0JFMAkJMwkvKiBaZXJvIHdpbmRvdyBwcm9iZSB0aW1lciAqLworI2RlZmluZSBUQ1BfVElNRV9LRUVQT1BFTgk0CS8qIEtlZXBhbGl2ZSB0aW1lciAqLworCisvKiBGbGFncyBpbiB0cC0+bm9uYWdsZSAqLworI2RlZmluZSBUQ1BfTkFHTEVfT0ZGCQkxCS8qIE5hZ2xlJ3MgYWxnbyBpcyBkaXNhYmxlZCAqLworI2RlZmluZSBUQ1BfTkFHTEVfQ09SSwkJMgkvKiBTb2NrZXQgaXMgY29ya2VkCSAgICAqLworI2RlZmluZSBUQ1BfTkFHTEVfUFVTSAkJNAkvKiBDb3JrIGlzIG92ZXJyaWRlbiBmb3IgYWxyZWFkeSBxdWV1ZWQgZGF0YSAqLworCisvKiBzeXNjdGwgdmFyaWFibGVzIGZvciB0Y3AgKi8KK2V4dGVybiBpbnQgc3lzY3RsX21heF9zeW5fYmFja2xvZzsKK2V4dGVybiBpbnQgc3lzY3RsX3RjcF90aW1lc3RhbXBzOworZXh0ZXJuIGludCBzeXNjdGxfdGNwX3dpbmRvd19zY2FsaW5nOworZXh0ZXJuIGludCBzeXNjdGxfdGNwX3NhY2s7CitleHRlcm4gaW50IHN5c2N0bF90Y3BfZmluX3RpbWVvdXQ7CitleHRlcm4gaW50IHN5c2N0bF90Y3BfdHdfcmVjeWNsZTsKK2V4dGVybiBpbnQgc3lzY3RsX3RjcF9rZWVwYWxpdmVfdGltZTsKK2V4dGVybiBpbnQgc3lzY3RsX3RjcF9rZWVwYWxpdmVfcHJvYmVzOworZXh0ZXJuIGludCBzeXNjdGxfdGNwX2tlZXBhbGl2ZV9pbnR2bDsKK2V4dGVybiBpbnQgc3lzY3RsX3RjcF9zeW5fcmV0cmllczsKK2V4dGVybiBpbnQgc3lzY3RsX3RjcF9zeW5hY2tfcmV0cmllczsKK2V4dGVybiBpbnQgc3lzY3RsX3RjcF9yZXRyaWVzMTsKK2V4dGVybiBpbnQgc3lzY3RsX3RjcF9yZXRyaWVzMjsKK2V4dGVybiBpbnQgc3lzY3RsX3RjcF9vcnBoYW5fcmV0cmllczsKK2V4dGVybiBpbnQgc3lzY3RsX3RjcF9zeW5jb29raWVzOworZXh0ZXJuIGludCBzeXNjdGxfdGNwX3JldHJhbnNfY29sbGFwc2U7CitleHRlcm4gaW50IHN5c2N0bF90Y3Bfc3RkdXJnOworZXh0ZXJuIGludCBzeXNjdGxfdGNwX3JmYzEzMzc7CitleHRlcm4gaW50IHN5c2N0bF90Y3BfYWJvcnRfb25fb3ZlcmZsb3c7CitleHRlcm4gaW50IHN5c2N0bF90Y3BfbWF4X29ycGhhbnM7CitleHRlcm4gaW50IHN5c2N0bF90Y3BfbWF4X3R3X2J1Y2tldHM7CitleHRlcm4gaW50IHN5c2N0bF90Y3BfZmFjazsKK2V4dGVybiBpbnQgc3lzY3RsX3RjcF9yZW9yZGVyaW5nOworZXh0ZXJuIGludCBzeXNjdGxfdGNwX2VjbjsKK2V4dGVybiBpbnQgc3lzY3RsX3RjcF9kc2FjazsKK2V4dGVybiBpbnQgc3lzY3RsX3RjcF9tZW1bM107CitleHRlcm4gaW50IHN5c2N0bF90Y3Bfd21lbVszXTsKK2V4dGVybiBpbnQgc3lzY3RsX3RjcF9ybWVtWzNdOworZXh0ZXJuIGludCBzeXNjdGxfdGNwX2FwcF93aW47CitleHRlcm4gaW50IHN5c2N0bF90Y3BfYWR2X3dpbl9zY2FsZTsKK2V4dGVybiBpbnQgc3lzY3RsX3RjcF90d19yZXVzZTsKK2V4dGVybiBpbnQgc3lzY3RsX3RjcF9mcnRvOworZXh0ZXJuIGludCBzeXNjdGxfdGNwX2xvd19sYXRlbmN5OworZXh0ZXJuIGludCBzeXNjdGxfdGNwX3dlc3R3b29kOworZXh0ZXJuIGludCBzeXNjdGxfdGNwX3ZlZ2FzX2NvbmdfYXZvaWQ7CitleHRlcm4gaW50IHN5c2N0bF90Y3BfdmVnYXNfYWxwaGE7CitleHRlcm4gaW50IHN5c2N0bF90Y3BfdmVnYXNfYmV0YTsKK2V4dGVybiBpbnQgc3lzY3RsX3RjcF92ZWdhc19nYW1tYTsKK2V4dGVybiBpbnQgc3lzY3RsX3RjcF9ub21ldHJpY3Nfc2F2ZTsKK2V4dGVybiBpbnQgc3lzY3RsX3RjcF9iaWM7CitleHRlcm4gaW50IHN5c2N0bF90Y3BfYmljX2Zhc3RfY29udmVyZ2VuY2U7CitleHRlcm4gaW50IHN5c2N0bF90Y3BfYmljX2xvd193aW5kb3c7CitleHRlcm4gaW50IHN5c2N0bF90Y3BfYmljX2JldGE7CitleHRlcm4gaW50IHN5c2N0bF90Y3BfbW9kZXJhdGVfcmN2YnVmOworZXh0ZXJuIGludCBzeXNjdGxfdGNwX3Rzb193aW5fZGl2aXNvcjsKKworZXh0ZXJuIGF0b21pY190IHRjcF9tZW1vcnlfYWxsb2NhdGVkOworZXh0ZXJuIGF0b21pY190IHRjcF9zb2NrZXRzX2FsbG9jYXRlZDsKK2V4dGVybiBpbnQgdGNwX21lbW9yeV9wcmVzc3VyZTsKKworc3RydWN0IG9wZW5fcmVxdWVzdDsKKworc3RydWN0IG9yX2NhbGx0YWJsZSB7CisJaW50ICBmYW1pbHk7CisJaW50ICAoKnJ0eF9zeW5fYWNrKQkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgb3Blbl9yZXF1ZXN0ICpyZXEsIHN0cnVjdCBkc3RfZW50cnkqKTsKKwl2b2lkICgqc2VuZF9hY2spCShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgb3Blbl9yZXF1ZXN0ICpyZXEpOworCXZvaWQgKCpkZXN0cnVjdG9yKQkoc3RydWN0IG9wZW5fcmVxdWVzdCAqcmVxKTsKKwl2b2lkICgqc2VuZF9yZXNldCkJKHN0cnVjdCBza19idWZmICpza2IpOworfTsKKworc3RydWN0IHRjcF92NF9vcGVuX3JlcSB7CisJX191MzIJCQlsb2NfYWRkcjsKKwlfX3UzMgkJCXJtdF9hZGRyOworCXN0cnVjdCBpcF9vcHRpb25zCSpvcHQ7Cit9OworCisjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZCAoQ09ORklHX0lQVjZfTU9EVUxFKQorc3RydWN0IHRjcF92Nl9vcGVuX3JlcSB7CisJc3RydWN0IGluNl9hZGRyCQlsb2NfYWRkcjsKKwlzdHJ1Y3QgaW42X2FkZHIJCXJtdF9hZGRyOworCXN0cnVjdCBza19idWZmCQkqcGt0b3B0czsKKwlpbnQJCQlpaWY7Cit9OworI2VuZGlmCisKKy8qIHRoaXMgc3RydWN0dXJlIGlzIHRvbyBiaWcgKi8KK3N0cnVjdCBvcGVuX3JlcXVlc3QgeworCXN0cnVjdCBvcGVuX3JlcXVlc3QJKmRsX25leHQ7IC8qIE11c3QgYmUgZmlyc3QgbWVtYmVyISAqLworCV9fdTMyCQkJcmN2X2lzbjsKKwlfX3UzMgkJCXNudF9pc247CisJX191MTYJCQlybXRfcG9ydDsKKwlfX3UxNgkJCW1zczsKKwlfX3U4CQkJcmV0cmFuczsKKwlfX3U4CQkJX19wYWQ7CisJX191MTYJc25kX3dzY2FsZSA6IDQsIAorCQlyY3Zfd3NjYWxlIDogNCwgCisJCXRzdGFtcF9vayA6IDEsCisJCXNhY2tfb2sgOiAxLAorCQl3c2NhbGVfb2sgOiAxLAorCQllY25fb2sgOiAxLAorCQlhY2tlZCA6IDE7CisJLyogVGhlIGZvbGxvd2luZyB0d28gZmllbGRzIGNhbiBiZSBlYXNpbHkgcmVjb21wdXRlZCBJIHRoaW5rIC1BSyAqLworCV9fdTMyCQkJd2luZG93X2NsYW1wOwkvKiB3aW5kb3cgY2xhbXAgYXQgY3JlYXRpb24gdGltZSAqLworCV9fdTMyCQkJcmN2X3duZDsJLyogcmN2X3duZCBvZmZlcmVkIGZpcnN0IHRpbWUgKi8KKwlfX3UzMgkJCXRzX3JlY2VudDsKKwl1bnNpZ25lZCBsb25nCQlleHBpcmVzOworCXN0cnVjdCBvcl9jYWxsdGFibGUJKmNsYXNzOworCXN0cnVjdCBzb2NrCQkqc2s7CisJdW5pb24geworCQlzdHJ1Y3QgdGNwX3Y0X29wZW5fcmVxIHY0X3JlcTsKKyNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkIChDT05GSUdfSVBWNl9NT0RVTEUpCisJCXN0cnVjdCB0Y3BfdjZfb3Blbl9yZXEgdjZfcmVxOworI2VuZGlmCisJfSBhZjsKK307CisKKy8qIFNMQUIgY2FjaGUgZm9yIG9wZW4gcmVxdWVzdHMuICovCitleHRlcm4ga21lbV9jYWNoZV90ICp0Y3Bfb3BlbnJlcV9jYWNoZXA7CisKKyNkZWZpbmUgdGNwX29wZW5yZXFfYWxsb2MoKQkJa21lbV9jYWNoZV9hbGxvYyh0Y3Bfb3BlbnJlcV9jYWNoZXAsIFNMQUJfQVRPTUlDKQorI2RlZmluZSB0Y3Bfb3BlbnJlcV9mYXN0ZnJlZShyZXEpCWttZW1fY2FjaGVfZnJlZSh0Y3Bfb3BlbnJlcV9jYWNoZXAsIHJlcSkKKworc3RhdGljIGlubGluZSB2b2lkIHRjcF9vcGVucmVxX2ZyZWUoc3RydWN0IG9wZW5fcmVxdWVzdCAqcmVxKQoreworCXJlcS0+Y2xhc3MtPmRlc3RydWN0b3IocmVxKTsKKwl0Y3Bfb3BlbnJlcV9mYXN0ZnJlZShyZXEpOworfQorCisjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCisjZGVmaW5lIFRDUF9JTkVUX0ZBTUlMWShmYW0pICgoZmFtKSA9PSBBRl9JTkVUKQorI2Vsc2UKKyNkZWZpbmUgVENQX0lORVRfRkFNSUxZKGZhbSkgMQorI2VuZGlmCisKKy8qCisgKglQb2ludGVycyB0byBhZGRyZXNzIHJlbGF0ZWQgVENQIGZ1bmN0aW9ucworICoJKGkuZS4gdGhpbmdzIHRoYXQgZGVwZW5kIG9uIHRoZSBhZGRyZXNzIGZhbWlseSkKKyAqLworCitzdHJ1Y3QgdGNwX2Z1bmMgeworCWludAkJCSgqcXVldWVfeG1pdCkJCShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkJCSBpbnQgaXBmcmFnb2spOworCisJdm9pZAkJCSgqc2VuZF9jaGVjaykJCShzdHJ1Y3Qgc29jayAqc2ssCisJCQkJCQkJIHN0cnVjdCB0Y3BoZHIgKnRoLAorCQkJCQkJCSBpbnQgbGVuLAorCQkJCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKworCWludAkJCSgqcmVidWlsZF9oZWFkZXIpCShzdHJ1Y3Qgc29jayAqc2spOworCisJaW50CQkJKCpjb25uX3JlcXVlc3QpCQkoc3RydWN0IHNvY2sgKnNrLAorCQkJCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKworCXN0cnVjdCBzb2NrICoJCSgqc3luX3JlY3Zfc29jaykJKHN0cnVjdCBzb2NrICpzaywKKwkJCQkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJCQkgc3RydWN0IG9wZW5fcmVxdWVzdCAqcmVxLAorCQkJCQkJCSBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpOworICAgIAorCWludAkJCSgqcmVtZW1iZXJfc3RhbXApCShzdHJ1Y3Qgc29jayAqc2spOworCisJX191MTYJCQluZXRfaGVhZGVyX2xlbjsKKworCWludAkJCSgqc2V0c29ja29wdCkJCShzdHJ1Y3Qgc29jayAqc2ssIAorCQkJCQkJCSBpbnQgbGV2ZWwsIAorCQkJCQkJCSBpbnQgb3B0bmFtZSwgCisJCQkJCQkJIGNoYXIgX191c2VyICpvcHR2YWwsIAorCQkJCQkJCSBpbnQgb3B0bGVuKTsKKworCWludAkJCSgqZ2V0c29ja29wdCkJCShzdHJ1Y3Qgc29jayAqc2ssIAorCQkJCQkJCSBpbnQgbGV2ZWwsIAorCQkJCQkJCSBpbnQgb3B0bmFtZSwgCisJCQkJCQkJIGNoYXIgX191c2VyICpvcHR2YWwsIAorCQkJCQkJCSBpbnQgX191c2VyICpvcHRsZW4pOworCisKKwl2b2lkCQkJKCphZGRyMnNvY2thZGRyKQkoc3RydWN0IHNvY2sgKnNrLAorCQkJCQkJCSBzdHJ1Y3Qgc29ja2FkZHIgKik7CisKKwlpbnQgc29ja2FkZHJfbGVuOworfTsKKworLyoKKyAqIFRoZSBuZXh0IHJvdXRpbmVzIGRlYWwgd2l0aCBjb21wYXJpbmcgMzIgYml0IHVuc2lnbmVkIGludHMKKyAqIGFuZCB3b3JyeSBhYm91dCB3cmFwYXJvdW5kIChhdXRvbWF0aWMgd2l0aCB1bnNpZ25lZCBhcml0aG1ldGljKS4KKyAqLworCitzdGF0aWMgaW5saW5lIGludCBiZWZvcmUoX191MzIgc2VxMSwgX191MzIgc2VxMikKK3sKKyAgICAgICAgcmV0dXJuIChfX3MzMikoc2VxMS1zZXEyKSA8IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGFmdGVyKF9fdTMyIHNlcTEsIF9fdTMyIHNlcTIpCit7CisJcmV0dXJuIChfX3MzMikoc2VxMi1zZXExKSA8IDA7Cit9CisKKworLyogaXMgczI8PXMxPD1zMyA/ICovCitzdGF0aWMgaW5saW5lIGludCBiZXR3ZWVuKF9fdTMyIHNlcTEsIF9fdTMyIHNlcTIsIF9fdTMyIHNlcTMpCit7CisJcmV0dXJuIHNlcTMgLSBzZXEyID49IHNlcTEgLSBzZXEyOworfQorCisKK2V4dGVybiBzdHJ1Y3QgcHJvdG8gdGNwX3Byb3Q7CisKK0RFQ0xBUkVfU05NUF9TVEFUKHN0cnVjdCB0Y3BfbWliLCB0Y3Bfc3RhdGlzdGljcyk7CisjZGVmaW5lIFRDUF9JTkNfU1RBVFMoZmllbGQpCQlTTk1QX0lOQ19TVEFUUyh0Y3Bfc3RhdGlzdGljcywgZmllbGQpCisjZGVmaW5lIFRDUF9JTkNfU1RBVFNfQkgoZmllbGQpCQlTTk1QX0lOQ19TVEFUU19CSCh0Y3Bfc3RhdGlzdGljcywgZmllbGQpCisjZGVmaW5lIFRDUF9JTkNfU1RBVFNfVVNFUihmaWVsZCkgCVNOTVBfSU5DX1NUQVRTX1VTRVIodGNwX3N0YXRpc3RpY3MsIGZpZWxkKQorI2RlZmluZSBUQ1BfREVDX1NUQVRTKGZpZWxkKQkJU05NUF9ERUNfU1RBVFModGNwX3N0YXRpc3RpY3MsIGZpZWxkKQorI2RlZmluZSBUQ1BfQUREX1NUQVRTX0JIKGZpZWxkLCB2YWwpCVNOTVBfQUREX1NUQVRTX0JIKHRjcF9zdGF0aXN0aWNzLCBmaWVsZCwgdmFsKQorI2RlZmluZSBUQ1BfQUREX1NUQVRTX1VTRVIoZmllbGQsIHZhbCkJU05NUF9BRERfU1RBVFNfVVNFUih0Y3Bfc3RhdGlzdGljcywgZmllbGQsIHZhbCkKKworZXh0ZXJuIHZvaWQJCQl0Y3BfcHV0X3BvcnQoc3RydWN0IHNvY2sgKnNrKTsKK2V4dGVybiB2b2lkCQkJdGNwX2luaGVyaXRfcG9ydChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpjaGlsZCk7CisKK2V4dGVybiB2b2lkCQkJdGNwX3Y0X2VycihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIpOworCitleHRlcm4gdm9pZAkJCXRjcF9zaHV0ZG93biAoc3RydWN0IHNvY2sgKnNrLCBpbnQgaG93KTsKKworZXh0ZXJuIGludAkJCXRjcF92NF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKK2V4dGVybiBpbnQJCQl0Y3BfdjRfcmVtZW1iZXJfc3RhbXAoc3RydWN0IHNvY2sgKnNrKTsKKworZXh0ZXJuIGludAkJICAgIAl0Y3BfdjRfdHdfcmVtZW1iZXJfc3RhbXAoc3RydWN0IHRjcF90d19idWNrZXQgKnR3KTsKKworZXh0ZXJuIGludAkJCXRjcF9zZW5kbXNnKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IHNvY2sgKnNrLAorCQkJCQkgICAgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSk7CitleHRlcm4gc3NpemVfdAkJCXRjcF9zZW5kcGFnZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9mZnNldCwgc2l6ZV90IHNpemUsIGludCBmbGFncyk7CisKK2V4dGVybiBpbnQJCQl0Y3BfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCAKKwkJCQkJICBpbnQgY21kLCAKKwkJCQkJICB1bnNpZ25lZCBsb25nIGFyZyk7CisKK2V4dGVybiBpbnQJCQl0Y3BfcmN2X3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLCAKKwkJCQkJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCQkgICAgICBzdHJ1Y3QgdGNwaGRyICp0aCwKKwkJCQkJCSAgICAgIHVuc2lnbmVkIGxlbik7CisKK2V4dGVybiBpbnQJCQl0Y3BfcmN2X2VzdGFibGlzaGVkKHN0cnVjdCBzb2NrICpzaywgCisJCQkJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJCSAgICBzdHJ1Y3QgdGNwaGRyICp0aCwgCisJCQkJCQkgICAgdW5zaWduZWQgbGVuKTsKKworZXh0ZXJuIHZvaWQJCQl0Y3BfcmN2X3NwYWNlX2FkanVzdChzdHJ1Y3Qgc29jayAqc2spOworCitlbnVtIHRjcF9hY2tfc3RhdGVfdAoreworCVRDUF9BQ0tfU0NIRUQgPSAxLAorCVRDUF9BQ0tfVElNRVIgPSAyLAorCVRDUF9BQ0tfUFVTSEVEPSA0Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgdGNwX3NjaGVkdWxlX2FjayhzdHJ1Y3QgdGNwX3NvY2sgKnRwKQoreworCXRwLT5hY2sucGVuZGluZyB8PSBUQ1BfQUNLX1NDSEVEOworfQorCitzdGF0aWMgaW5saW5lIGludCB0Y3BfYWNrX3NjaGVkdWxlZChzdHJ1Y3QgdGNwX3NvY2sgKnRwKQoreworCXJldHVybiB0cC0+YWNrLnBlbmRpbmcmVENQX0FDS19TQ0hFRDsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCB0Y3BfZGVjX3F1aWNrYWNrX21vZGUoc3RydWN0IHRjcF9zb2NrICp0cCkKK3sKKwlpZiAodHAtPmFjay5xdWljayAmJiAtLXRwLT5hY2sucXVpY2sgPT0gMCkgeworCQkvKiBMZWF2aW5nIHF1aWNrYWNrIG1vZGUgd2UgZGVmbGF0ZSBBVE8uICovCisJCXRwLT5hY2suYXRvID0gVENQX0FUT19NSU47CisJfQorfQorCitleHRlcm4gdm9pZCB0Y3BfZW50ZXJfcXVpY2thY2tfbW9kZShzdHJ1Y3QgdGNwX3NvY2sgKnRwKTsKKworc3RhdGljIF9faW5saW5lX18gdm9pZCB0Y3BfZGVsYWNrX2luaXQoc3RydWN0IHRjcF9zb2NrICp0cCkKK3sKKwltZW1zZXQoJnRwLT5hY2ssIDAsIHNpemVvZih0cC0+YWNrKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0Y3BfY2xlYXJfb3B0aW9ucyhzdHJ1Y3QgdGNwX29wdGlvbnNfcmVjZWl2ZWQgKnJ4X29wdCkKK3sKKyAJcnhfb3B0LT50c3RhbXBfb2sgPSByeF9vcHQtPnNhY2tfb2sgPSByeF9vcHQtPndzY2FsZV9vayA9IHJ4X29wdC0+c25kX3dzY2FsZSA9IDA7Cit9CisKK2VudW0gdGNwX3R3X3N0YXR1cworeworCVRDUF9UV19TVUNDRVNTID0gMCwKKwlUQ1BfVFdfUlNUID0gMSwKKwlUQ1BfVFdfQUNLID0gMiwKKwlUQ1BfVFdfU1lOID0gMworfTsKKworCitleHRlcm4gZW51bSB0Y3BfdHdfc3RhdHVzCXRjcF90aW1ld2FpdF9zdGF0ZV9wcm9jZXNzKHN0cnVjdCB0Y3BfdHdfYnVja2V0ICp0dywKKwkJCQkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkJCSAgIHN0cnVjdCB0Y3BoZHIgKnRoLAorCQkJCQkJCSAgIHVuc2lnbmVkIGxlbik7CisKK2V4dGVybiBzdHJ1Y3Qgc29jayAqCQl0Y3BfY2hlY2tfcmVxKHN0cnVjdCBzb2NrICpzayxzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgICAgICBzdHJ1Y3Qgb3Blbl9yZXF1ZXN0ICpyZXEsCisJCQkJCSAgICAgIHN0cnVjdCBvcGVuX3JlcXVlc3QgKipwcmV2KTsKK2V4dGVybiBpbnQJCQl0Y3BfY2hpbGRfcHJvY2VzcyhzdHJ1Y3Qgc29jayAqcGFyZW50LAorCQkJCQkJICBzdHJ1Y3Qgc29jayAqY2hpbGQsCisJCQkJCQkgIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIHZvaWQJCQl0Y3BfZW50ZXJfZnJ0byhzdHJ1Y3Qgc29jayAqc2spOworZXh0ZXJuIHZvaWQJCQl0Y3BfZW50ZXJfbG9zcyhzdHJ1Y3Qgc29jayAqc2ssIGludCBob3cpOworZXh0ZXJuIHZvaWQJCQl0Y3BfY2xlYXJfcmV0cmFucyhzdHJ1Y3QgdGNwX3NvY2sgKnRwKTsKK2V4dGVybiB2b2lkCQkJdGNwX3VwZGF0ZV9tZXRyaWNzKHN0cnVjdCBzb2NrICpzayk7CisKK2V4dGVybiB2b2lkCQkJdGNwX2Nsb3NlKHN0cnVjdCBzb2NrICpzaywgCisJCQkJCSAgbG9uZyB0aW1lb3V0KTsKK2V4dGVybiBzdHJ1Y3Qgc29jayAqCQl0Y3BfYWNjZXB0KHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWdzLCBpbnQgKmVycik7CitleHRlcm4gdW5zaWduZWQgaW50CQl0Y3BfcG9sbChzdHJ1Y3QgZmlsZSAqIGZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqd2FpdCk7CisKK2V4dGVybiBpbnQJCQl0Y3BfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgCisJCQkJCSAgICAgICBpbnQgb3B0bmFtZSwKKwkJCQkJICAgICAgIGNoYXIgX191c2VyICpvcHR2YWwsIAorCQkJCQkgICAgICAgaW50IF9fdXNlciAqb3B0bGVuKTsKK2V4dGVybiBpbnQJCQl0Y3Bfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgCisJCQkJCSAgICAgICBpbnQgb3B0bmFtZSwgY2hhciBfX3VzZXIgKm9wdHZhbCwgCisJCQkJCSAgICAgICBpbnQgb3B0bGVuKTsKK2V4dGVybiB2b2lkCQkJdGNwX3NldF9rZWVwYWxpdmUoc3RydWN0IHNvY2sgKnNrLCBpbnQgdmFsKTsKK2V4dGVybiBpbnQJCQl0Y3BfcmVjdm1zZyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBzb2NrICpzaywKKwkJCQkJICAgIHN0cnVjdCBtc2doZHIgKm1zZywKKwkJCQkJICAgIHNpemVfdCBsZW4sIGludCBub25ibG9jaywgCisJCQkJCSAgICBpbnQgZmxhZ3MsIGludCAqYWRkcl9sZW4pOworCitleHRlcm4gaW50CQkJdGNwX2xpc3Rlbl9zdGFydChzdHJ1Y3Qgc29jayAqc2spOworCitleHRlcm4gdm9pZAkJCXRjcF9wYXJzZV9vcHRpb25zKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCQkgIHN0cnVjdCB0Y3Bfb3B0aW9uc19yZWNlaXZlZCAqb3B0X3J4LAorCQkJCQkJICBpbnQgZXN0YWIpOworCisvKgorICoJVENQIHY0IGZ1bmN0aW9ucyBleHBvcnRlZCBmb3IgdGhlIGluZXQ2IEFQSQorICovCisKK2V4dGVybiBpbnQJCSAgICAgICAJdGNwX3Y0X3JlYnVpbGRfaGVhZGVyKHN0cnVjdCBzb2NrICpzayk7CisKK2V4dGVybiBpbnQJCSAgICAgICAJdGNwX3Y0X2J1aWxkX2hlYWRlcihzdHJ1Y3Qgc29jayAqc2ssIAorCQkJCQkJICAgIHN0cnVjdCBza19idWZmICpza2IpOworCitleHRlcm4gdm9pZAkJICAgICAgIAl0Y3BfdjRfc2VuZF9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIAorCQkJCQkJICBzdHJ1Y3QgdGNwaGRyICp0aCwgaW50IGxlbiwgCisJCQkJCQkgIHN0cnVjdCBza19idWZmICpza2IpOworCitleHRlcm4gaW50CQkJdGNwX3Y0X2Nvbm5fcmVxdWVzdChzdHJ1Y3Qgc29jayAqc2ssCisJCQkJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKK2V4dGVybiBzdHJ1Y3Qgc29jayAqCQl0Y3BfY3JlYXRlX29wZW5yZXFfY2hpbGQoc3RydWN0IHNvY2sgKnNrLAorCQkJCQkJCSBzdHJ1Y3Qgb3Blbl9yZXF1ZXN0ICpyZXEsCisJCQkJCQkJIHN0cnVjdCBza19idWZmICpza2IpOworCitleHRlcm4gc3RydWN0IHNvY2sgKgkJdGNwX3Y0X3N5bl9yZWN2X3NvY2soc3RydWN0IHNvY2sgKnNrLAorCQkJCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkJICAgICBzdHJ1Y3Qgb3Blbl9yZXF1ZXN0ICpyZXEsCisJCQkJCQkJc3RydWN0IGRzdF9lbnRyeSAqZHN0KTsKKworZXh0ZXJuIGludAkJCXRjcF92NF9kb19yY3Yoc3RydWN0IHNvY2sgKnNrLAorCQkJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKworZXh0ZXJuIGludAkJCXRjcF92NF9jb25uZWN0KHN0cnVjdCBzb2NrICpzaywKKwkJCQkJICAgICAgIHN0cnVjdCBzb2NrYWRkciAqdWFkZHIsCisJCQkJCSAgICAgICBpbnQgYWRkcl9sZW4pOworCitleHRlcm4gaW50CQkJdGNwX2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrKTsKKworZXh0ZXJuIHN0cnVjdCBza19idWZmICoJCXRjcF9tYWtlX3N5bmFjayhzdHJ1Y3Qgc29jayAqc2ssCisJCQkJCQlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsCisJCQkJCQlzdHJ1Y3Qgb3Blbl9yZXF1ZXN0ICpyZXEpOworCitleHRlcm4gaW50CQkJdGNwX2Rpc2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrLCBpbnQgZmxhZ3MpOworCitleHRlcm4gdm9pZAkJCXRjcF91bmhhc2goc3RydWN0IHNvY2sgKnNrKTsKKworZXh0ZXJuIGludAkJCXRjcF92NF9oYXNoX2Nvbm5lY3Rpbmcoc3RydWN0IHNvY2sgKnNrKTsKKworCisvKiBGcm9tIHN5bmNvb2tpZXMuYyAqLworZXh0ZXJuIHN0cnVjdCBzb2NrICpjb29raWVfdjRfY2hlY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAKKwkJCQkgICAgc3RydWN0IGlwX29wdGlvbnMgKm9wdCk7CitleHRlcm4gX191MzIgY29va2llX3Y0X2luaXRfc2VxdWVuY2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAKKwkJCQkgICAgIF9fdTE2ICptc3MpOworCisvKiB0Y3Bfb3V0cHV0LmMgKi8KKworZXh0ZXJuIGludCB0Y3Bfd3JpdGVfeG1pdChzdHJ1Y3Qgc29jayAqLCBpbnQgbm9uYWdsZSk7CitleHRlcm4gaW50IHRjcF9yZXRyYW5zbWl0X3NrYihzdHJ1Y3Qgc29jayAqLCBzdHJ1Y3Qgc2tfYnVmZiAqKTsKK2V4dGVybiB2b2lkIHRjcF94bWl0X3JldHJhbnNtaXRfcXVldWUoc3RydWN0IHNvY2sgKik7CitleHRlcm4gdm9pZCB0Y3Bfc2ltcGxlX3JldHJhbnNtaXQoc3RydWN0IHNvY2sgKik7CitleHRlcm4gaW50IHRjcF90cmltX2hlYWQoc3RydWN0IHNvY2sgKiwgc3RydWN0IHNrX2J1ZmYgKiwgdTMyKTsKKworZXh0ZXJuIHZvaWQgdGNwX3NlbmRfcHJvYmUwKHN0cnVjdCBzb2NrICopOworZXh0ZXJuIHZvaWQgdGNwX3NlbmRfcGFydGlhbChzdHJ1Y3Qgc29jayAqKTsKK2V4dGVybiBpbnQgIHRjcF93cml0ZV93YWtldXAoc3RydWN0IHNvY2sgKik7CitleHRlcm4gdm9pZCB0Y3Bfc2VuZF9maW4oc3RydWN0IHNvY2sgKnNrKTsKK2V4dGVybiB2b2lkIHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzdHJ1Y3Qgc29jayAqc2ssIGludCBwcmlvcml0eSk7CitleHRlcm4gaW50ICB0Y3Bfc2VuZF9zeW5hY2soc3RydWN0IHNvY2sgKik7CitleHRlcm4gdm9pZCB0Y3BfcHVzaF9vbmUoc3RydWN0IHNvY2sgKiwgdW5zaWduZWQgbXNzX25vdyk7CitleHRlcm4gdm9pZCB0Y3Bfc2VuZF9hY2soc3RydWN0IHNvY2sgKnNrKTsKK2V4dGVybiB2b2lkIHRjcF9zZW5kX2RlbGF5ZWRfYWNrKHN0cnVjdCBzb2NrICpzayk7CisKKy8qIHRjcF90aW1lci5jICovCitleHRlcm4gdm9pZCB0Y3BfaW5pdF94bWl0X3RpbWVycyhzdHJ1Y3Qgc29jayAqKTsKK2V4dGVybiB2b2lkIHRjcF9jbGVhcl94bWl0X3RpbWVycyhzdHJ1Y3Qgc29jayAqKTsKKworZXh0ZXJuIHZvaWQgdGNwX2RlbGV0ZV9rZWVwYWxpdmVfdGltZXIoc3RydWN0IHNvY2sgKik7CitleHRlcm4gdm9pZCB0Y3BfcmVzZXRfa2VlcGFsaXZlX3RpbWVyKHN0cnVjdCBzb2NrICosIHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuIHVuc2lnbmVkIGludCB0Y3Bfc3luY19tc3Moc3RydWN0IHNvY2sgKnNrLCB1MzIgcG10dSk7CitleHRlcm4gdW5zaWduZWQgaW50IHRjcF9jdXJyZW50X21zcyhzdHJ1Y3Qgc29jayAqc2ssIGludCBsYXJnZSk7CisKKyNpZmRlZiBUQ1BfREVCVUcKK2V4dGVybiBjb25zdCBjaGFyIHRjcF90aW1lcl9idWdfbXNnW107CisjZW5kaWYKKworLyogdGNwX2RpYWcuYyAqLworZXh0ZXJuIHZvaWQgdGNwX2dldF9pbmZvKHN0cnVjdCBzb2NrICosIHN0cnVjdCB0Y3BfaW5mbyAqKTsKKworLyogUmVhZCAnc2VuZGZpbGUoKSctc3R5bGUgZnJvbSBhIFRDUCBzb2NrZXQgKi8KK3R5cGVkZWYgaW50ICgqc2tfcmVhZF9hY3Rvcl90KShyZWFkX2Rlc2NyaXB0b3JfdCAqLCBzdHJ1Y3Qgc2tfYnVmZiAqLAorCQkJCXVuc2lnbmVkIGludCwgc2l6ZV90KTsKK2V4dGVybiBpbnQgdGNwX3JlYWRfc29jayhzdHJ1Y3Qgc29jayAqc2ssIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLAorCQkJIHNrX3JlYWRfYWN0b3JfdCByZWN2X2FjdG9yKTsKKworc3RhdGljIGlubGluZSB2b2lkIHRjcF9jbGVhcl94bWl0X3RpbWVyKHN0cnVjdCBzb2NrICpzaywgaW50IHdoYXQpCit7CisJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CisJCisJc3dpdGNoICh3aGF0KSB7CisJY2FzZSBUQ1BfVElNRV9SRVRSQU5TOgorCWNhc2UgVENQX1RJTUVfUFJPQkUwOgorCQl0cC0+cGVuZGluZyA9IDA7CisKKyNpZmRlZiBUQ1BfQ0xFQVJfVElNRVJTCisJCXNrX3N0b3BfdGltZXIoc2ssICZ0cC0+cmV0cmFuc21pdF90aW1lcik7CisjZW5kaWYKKwkJYnJlYWs7CisJY2FzZSBUQ1BfVElNRV9EQUNLOgorCQl0cC0+YWNrLmJsb2NrZWQgPSAwOworCQl0cC0+YWNrLnBlbmRpbmcgPSAwOworCisjaWZkZWYgVENQX0NMRUFSX1RJTUVSUworCQlza19zdG9wX3RpbWVyKHNrLCAmdHAtPmRlbGFja190aW1lcik7CisjZW5kaWYKKwkJYnJlYWs7CisJZGVmYXVsdDoKKyNpZmRlZiBUQ1BfREVCVUcKKwkJcHJpbnRrKHRjcF90aW1lcl9idWdfbXNnKTsKKyNlbmRpZgorCQlyZXR1cm47CisJfTsKKworfQorCisvKgorICoJUmVzZXQgdGhlIHJldHJhbnNtaXNzaW9uIHRpbWVyCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB0Y3BfcmVzZXRfeG1pdF90aW1lcihzdHJ1Y3Qgc29jayAqc2ssIGludCB3aGF0LCB1bnNpZ25lZCBsb25nIHdoZW4pCit7CisJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CisKKwlpZiAod2hlbiA+IFRDUF9SVE9fTUFYKSB7CisjaWZkZWYgVENQX0RFQlVHCisJCXByaW50ayhLRVJOX0RFQlVHICJyZXNldF94bWl0X3RpbWVyIHNrPSVwICVkIHdoZW49MHglbHgsIGNhbGxlcj0lcFxuIiwgc2ssIHdoYXQsIHdoZW4sIGN1cnJlbnRfdGV4dF9hZGRyKCkpOworI2VuZGlmCisJCXdoZW4gPSBUQ1BfUlRPX01BWDsKKwl9CisKKwlzd2l0Y2ggKHdoYXQpIHsKKwljYXNlIFRDUF9USU1FX1JFVFJBTlM6CisJY2FzZSBUQ1BfVElNRV9QUk9CRTA6CisJCXRwLT5wZW5kaW5nID0gd2hhdDsKKwkJdHAtPnRpbWVvdXQgPSBqaWZmaWVzK3doZW47CisJCXNrX3Jlc2V0X3RpbWVyKHNrLCAmdHAtPnJldHJhbnNtaXRfdGltZXIsIHRwLT50aW1lb3V0KTsKKwkJYnJlYWs7CisKKwljYXNlIFRDUF9USU1FX0RBQ0s6CisJCXRwLT5hY2sucGVuZGluZyB8PSBUQ1BfQUNLX1RJTUVSOworCQl0cC0+YWNrLnRpbWVvdXQgPSBqaWZmaWVzK3doZW47CisJCXNrX3Jlc2V0X3RpbWVyKHNrLCAmdHAtPmRlbGFja190aW1lciwgdHAtPmFjay50aW1lb3V0KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorI2lmZGVmIFRDUF9ERUJVRworCQlwcmludGsodGNwX3RpbWVyX2J1Z19tc2cpOworI2VuZGlmCisJCXJldHVybjsKKwl9OworfQorCisvKiBJbml0aWFsaXplIFJDVl9NU1MgdmFsdWUuCisgKiBSQ1ZfTVNTIGlzIGFuIG91ciBndWVzcyBhYm91dCBNU1MgdXNlZCBieSB0aGUgcGVlci4KKyAqIFdlIGhhdmVuJ3QgYW55IGRpcmVjdCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgTVNTLgorICogSXQncyBiZXR0ZXIgdG8gdW5kZXJlc3RpbWF0ZSB0aGUgUkNWX01TUyByYXRoZXIgdGhhbiBvdmVyZXN0aW1hdGUuCisgKiBPdmVyZXN0aW1hdGlvbnMgbWFrZSB1cyBBQ0tpbmcgbGVzcyBmcmVxdWVudGx5IHRoYW4gbmVlZGVkLgorICogVW5kZXJlc3RpbWF0aW9ucyBhcmUgbW9yZSBlYXN5IHRvIGRldGVjdCBhbmQgZml4IGJ5IHRjcF9tZWFzdXJlX3Jjdl9tc3MoKS4KKyAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgdGNwX2luaXRpYWxpemVfcmN2X21zcyhzdHJ1Y3Qgc29jayAqc2spCit7CisJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CisJdW5zaWduZWQgaW50IGhpbnQgPSBtaW4odHAtPmFkdm1zcywgdHAtPm1zc19jYWNoZV9zdGQpOworCisJaGludCA9IG1pbihoaW50LCB0cC0+cmN2X3duZC8yKTsKKwloaW50ID0gbWluKGhpbnQsIFRDUF9NSU5fUkNWTVNTKTsKKwloaW50ID0gbWF4KGhpbnQsIFRDUF9NSU5fTVNTKTsKKworCXRwLT5hY2sucmN2X21zcyA9IGhpbnQ7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX190Y3BfZmFzdF9wYXRoX29uKHN0cnVjdCB0Y3Bfc29jayAqdHAsIHUzMiBzbmRfd25kKQoreworCXRwLT5wcmVkX2ZsYWdzID0gaHRvbmwoKHRwLT50Y3BfaGVhZGVyX2xlbiA8PCAyNikgfAorCQkJICAgICAgIG50b2hsKFRDUF9GTEFHX0FDSykgfAorCQkJICAgICAgIHNuZF93bmQpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHRjcF9mYXN0X3BhdGhfb24oc3RydWN0IHRjcF9zb2NrICp0cCkKK3sKKwlfX3RjcF9mYXN0X3BhdGhfb24odHAsIHRwLT5zbmRfd25kID4+IHRwLT5yeF9vcHQuc25kX3dzY2FsZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0Y3BfZmFzdF9wYXRoX2NoZWNrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRjcF9zb2NrICp0cCkKK3sKKwlpZiAoc2tiX3F1ZXVlX2xlbigmdHAtPm91dF9vZl9vcmRlcl9xdWV1ZSkgPT0gMCAmJgorCSAgICB0cC0+cmN2X3duZCAmJgorCSAgICBhdG9taWNfcmVhZCgmc2stPnNrX3JtZW1fYWxsb2MpIDwgc2stPnNrX3JjdmJ1ZiAmJgorCSAgICAhdHAtPnVyZ19kYXRhKQorCQl0Y3BfZmFzdF9wYXRoX29uKHRwKTsKK30KKworLyogQ29tcHV0ZSB0aGUgYWN0dWFsIHJlY2VpdmUgd2luZG93IHdlIGFyZSBjdXJyZW50bHkgYWR2ZXJ0aXNpbmcuCisgKiBSY3Zfbnh0IGNhbiBiZSBhZnRlciB0aGUgd2luZG93IGlmIG91ciBwZWVyIHB1c2ggbW9yZSBkYXRhCisgKiB0aGFuIHRoZSBvZmZlcmVkIHdpbmRvdy4KKyAqLworc3RhdGljIF9faW5saW5lX18gdTMyIHRjcF9yZWNlaXZlX3dpbmRvdyhjb25zdCBzdHJ1Y3QgdGNwX3NvY2sgKnRwKQoreworCXMzMiB3aW4gPSB0cC0+cmN2X3d1cCArIHRwLT5yY3Zfd25kIC0gdHAtPnJjdl9ueHQ7CisKKwlpZiAod2luIDwgMCkKKwkJd2luID0gMDsKKwlyZXR1cm4gKHUzMikgd2luOworfQorCisvKiBDaG9vc2UgYSBuZXcgd2luZG93LCB3aXRob3V0IGNoZWNrcyBmb3Igc2hyaW5raW5nLCBhbmQgd2l0aG91dAorICogc2NhbGluZyBhcHBsaWVkIHRvIHRoZSByZXN1bHQuICBUaGUgY2FsbGVyIGRvZXMgdGhlc2UgdGhpbmdzCisgKiBpZiBuZWNlc3NhcnkuICBUaGlzIGlzIGEgInJhdyIgd2luZG93IHNlbGVjdGlvbi4KKyAqLworZXh0ZXJuIHUzMglfX3RjcF9zZWxlY3Rfd2luZG93KHN0cnVjdCBzb2NrICpzayk7CisKKy8qIFRDUCB0aW1lc3RhbXBzIGFyZSBvbmx5IDMyLWJpdHMsIHRoaXMgY2F1c2VzIGEgc2xpZ2h0CisgKiBjb21wbGljYXRpb24gb24gNjQtYml0IHN5c3RlbXMgc2luY2Ugd2Ugc3RvcmUgYSBzbmFwc2hvdAorICogb2YgamlmZmllcyBpbiB0aGUgYnVmZmVyIGNvbnRyb2wgYmxvY2tzIGJlbG93LiAgV2UgZGVjaWRlbHkKKyAqIG9ubHkgdXNlIG9mIHRoZSBsb3cgMzItYml0cyBvZiBqaWZmaWVzIGFuZCBoaWRlIHRoZSB1Z2x5CisgKiBjYXN0cyB3aXRoIHRoZSBmb2xsb3dpbmcgbWFjcm8uCisgKi8KKyNkZWZpbmUgdGNwX3RpbWVfc3RhbXAJCSgoX191MzIpKGppZmZpZXMpKQorCisvKiBUaGlzIGlzIHdoYXQgdGhlIHNlbmQgcGFja2V0IHF1ZXVlaW5nIGVuZ2luZSB1c2VzIHRvIHBhc3MKKyAqIFRDUCBwZXItcGFja2V0IGNvbnRyb2wgaW5mb3JtYXRpb24gdG8gdGhlIHRyYW5zbWlzc2lvbgorICogY29kZS4gIFdlIGFsc28gc3RvcmUgdGhlIGhvc3Qtb3JkZXIgc2VxdWVuY2UgbnVtYmVycyBpbgorICogaGVyZSB0b28uICBUaGlzIGlzIDM2IGJ5dGVzIG9uIDMyLWJpdCBhcmNoaXRlY3R1cmVzLAorICogNDAgYnl0ZXMgb24gNjQtYml0IG1hY2hpbmVzLCBpZiB0aGlzIGdyb3dzIHBsZWFzZSBhZGp1c3QKKyAqIHNrYnVmZi5oOnNrYnVmZi0+Y2JbeHh4XSBzaXplIGFwcHJvcHJpYXRlbHkuCisgKi8KK3N0cnVjdCB0Y3Bfc2tiX2NiIHsKKwl1bmlvbiB7CisJCXN0cnVjdCBpbmV0X3NrYl9wYXJtCWg0OworI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQgKENPTkZJR19JUFY2X01PRFVMRSkKKwkJc3RydWN0IGluZXQ2X3NrYl9wYXJtCWg2OworI2VuZGlmCisJfSBoZWFkZXI7CS8qIEZvciBpbmNvbWluZyBmcmFtZXMJCSovCisJX191MzIJCXNlcTsJCS8qIFN0YXJ0aW5nIHNlcXVlbmNlIG51bWJlcgkqLworCV9fdTMyCQllbmRfc2VxOwkvKiBTRVEgKyBGSU4gKyBTWU4gKyBkYXRhbGVuCSovCisJX191MzIJCXdoZW47CQkvKiB1c2VkIHRvIGNvbXB1dGUgcnR0J3MJKi8KKwlfX3U4CQlmbGFnczsJCS8qIFRDUCBoZWFkZXIgZmxhZ3MuCQkqLworCisJLyogTk9URTogVGhlc2UgbXVzdCBtYXRjaCB1cCB0byB0aGUgZmxhZ3MgYnl0ZSBpbiBhCisJICogICAgICAgcmVhbCBUQ1AgaGVhZGVyLgorCSAqLworI2RlZmluZSBUQ1BDQl9GTEFHX0ZJTgkJMHgwMQorI2RlZmluZSBUQ1BDQl9GTEFHX1NZTgkJMHgwMgorI2RlZmluZSBUQ1BDQl9GTEFHX1JTVAkJMHgwNAorI2RlZmluZSBUQ1BDQl9GTEFHX1BTSAkJMHgwOAorI2RlZmluZSBUQ1BDQl9GTEFHX0FDSwkJMHgxMAorI2RlZmluZSBUQ1BDQl9GTEFHX1VSRwkJMHgyMAorI2RlZmluZSBUQ1BDQl9GTEFHX0VDRQkJMHg0MAorI2RlZmluZSBUQ1BDQl9GTEFHX0NXUgkJMHg4MAorCisJX191OAkJc2Fja2VkOwkJLyogU3RhdGUgZmxhZ3MgZm9yIFNBQ0svRkFDSy4JKi8KKyNkZWZpbmUgVENQQ0JfU0FDS0VEX0FDS0VECTB4MDEJLyogU0tCIEFDSydkIGJ5IGEgU0FDSyBibG9jawkqLworI2RlZmluZSBUQ1BDQl9TQUNLRURfUkVUUkFOUwkweDAyCS8qIFNLQiByZXRyYW5zbWl0dGVkCQkqLworI2RlZmluZSBUQ1BDQl9MT1NUCQkweDA0CS8qIFNLQiBpcyBsb3N0CQkJKi8KKyNkZWZpbmUgVENQQ0JfVEFHQklUUwkJMHgwNwkvKiBBbGwgdGFnIGJpdHMJCQkqLworCisjZGVmaW5lIFRDUENCX0VWRVJfUkVUUkFOUwkweDgwCS8qIEV2ZXIgcmV0cmFuc21pdHRlZCBmcmFtZQkqLworI2RlZmluZSBUQ1BDQl9SRVRSQU5TCQkoVENQQ0JfU0FDS0VEX1JFVFJBTlN8VENQQ0JfRVZFUl9SRVRSQU5TKQorCisjZGVmaW5lIFRDUENCX1VSRwkJMHgyMAkvKiBVcmdlbnQgcG9pbnRlciBhZHZlbmNlZCBoZXJlCSovCisKKyNkZWZpbmUgVENQQ0JfQVRfVEFJTAkJKFRDUENCX1VSRykKKworCV9fdTE2CQl1cmdfcHRyOwkvKiBWYWxpZCB3L1VSRyBmbGFncyBpcyBzZXQuCSovCisJX191MzIJCWFja19zZXE7CS8qIFNlcXVlbmNlIG51bWJlciBBQ0snZAkqLworfTsKKworI2RlZmluZSBUQ1BfU0tCX0NCKF9fc2tiKQkoKHN0cnVjdCB0Y3Bfc2tiX2NiICopJigoX19za2IpLT5jYlswXSkpCisKKyNpbmNsdWRlIDxuZXQvdGNwX2Vjbi5oPgorCisvKiBEdWUgdG8gVFNPLCBhbiBTS0IgY2FuIGJlIGNvbXBvc2VkIG9mIG11bHRpcGxlIGFjdHVhbAorICogcGFja2V0cy4gIFRvIGtlZXAgdGhlc2UgdHJhY2tlZCBwcm9wZXJseSwgd2UgdXNlIHRoaXMuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHRjcF9za2JfcGNvdW50KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCit7CisJcmV0dXJuIHNrYl9zaGluZm8oc2tiKS0+dHNvX3NlZ3M7Cit9CisKKy8qIFRoaXMgaXMgdmFsaWQgaWZmIHRjcF9za2JfcGNvdW50KCkgPiAxLiAqLworc3RhdGljIGlubGluZSBpbnQgdGNwX3NrYl9tc3MoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlyZXR1cm4gc2tiX3NoaW5mbyhza2IpLT50c29fc2l6ZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHRjcF9kZWNfcGNvdW50X2FwcHJveChfX3UzMiAqY291bnQsCisJCQkJCSBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWlmICgqY291bnQpIHsKKwkJKmNvdW50IC09IHRjcF9za2JfcGNvdW50KHNrYik7CisJCWlmICgoaW50KSpjb3VudCA8IDApCisJCQkqY291bnQgPSAwOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIHRjcF9wYWNrZXRzX291dF9pbmMoc3RydWN0IHNvY2sgKnNrLCAKKwkJCQkgICAgICAgc3RydWN0IHRjcF9zb2NrICp0cCwKKwkJCQkgICAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlpbnQgb3JpZyA9IHRwLT5wYWNrZXRzX291dDsKKworCXRwLT5wYWNrZXRzX291dCArPSB0Y3Bfc2tiX3Bjb3VudChza2IpOworCWlmICghb3JpZykKKwkJdGNwX3Jlc2V0X3htaXRfdGltZXIoc2ssIFRDUF9USU1FX1JFVFJBTlMsIHRwLT5ydG8pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdGNwX3BhY2tldHNfb3V0X2RlYyhzdHJ1Y3QgdGNwX3NvY2sgKnRwLCAKKwkJCQkgICAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwl0cC0+cGFja2V0c19vdXQgLT0gdGNwX3NrYl9wY291bnQoc2tiKTsKK30KKworLyogVGhpcyBkZXRlcm1pbmVzIGhvdyBtYW55IHBhY2tldHMgYXJlICJpbiB0aGUgbmV0d29yayIgdG8gdGhlIGJlc3QKKyAqIG9mIG91ciBrbm93bGVkZ2UuICBJbiBtYW55IGNhc2VzIGl0IGlzIGNvbnNlcnZhdGl2ZSwgYnV0IHdoZXJlCisgKiBkZXRhaWxlZCBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUgZnJvbSB0aGUgcmVjZWl2ZXIgKHZpYSBTQUNLCisgKiBibG9ja3MgZXRjLikgd2UgY2FuIG1ha2UgbW9yZSBhZ2dyZXNzaXZlIGNhbGN1bGF0aW9ucy4KKyAqCisgKiBVc2UgdGhpcyBmb3IgZGVjaXNpb25zIGludm9sdmluZyBjb25nZXN0aW9uIGNvbnRyb2wsIHVzZSBqdXN0CisgKiB0cC0+cGFja2V0c19vdXQgdG8gZGV0ZXJtaW5lIGlmIHRoZSBzZW5kIHF1ZXVlIGlzIGVtcHR5IG9yIG5vdC4KKyAqCisgKiBSZWFkIHRoaXMgZXF1YXRpb24gYXM6CisgKgorICoJIlBhY2tldHMgc2VudCBvbmNlIG9uIHRyYW5zbWlzc2lvbiBxdWV1ZSIgTUlOVVMKKyAqCSJQYWNrZXRzIGxlZnQgbmV0d29yaywgYnV0IG5vdCBob25lc3RseSBBQ0tlZCB5ZXQiIFBMVVMKKyAqCSJQYWNrZXRzIGZhc3QgcmV0cmFuc21pdHRlZCIKKyAqLworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IHRjcF9wYWNrZXRzX2luX2ZsaWdodChjb25zdCBzdHJ1Y3QgdGNwX3NvY2sgKnRwKQoreworCXJldHVybiAodHAtPnBhY2tldHNfb3V0IC0gdHAtPmxlZnRfb3V0ICsgdHAtPnJldHJhbnNfb3V0KTsKK30KKworLyoKKyAqIFdoaWNoIGNvbmdlc3Rpb24gYWxnb3JpdGhpbSBpcyBpbiB1c2Ugb24gdGhlIGNvbm5lY3Rpb24uCisgKi8KKyNkZWZpbmUgdGNwX2lzX3ZlZ2FzKF9fdHApCSgoX190cCktPmFkdl9jb25nID09IFRDUF9WRUdBUykKKyNkZWZpbmUgdGNwX2lzX3dlc3R3b29kKF9fdHApCSgoX190cCktPmFkdl9jb25nID09IFRDUF9XRVNUV09PRCkKKyNkZWZpbmUgdGNwX2lzX2JpYyhfX3RwKQkoKF9fdHApLT5hZHZfY29uZyA9PSBUQ1BfQklDKQorCisvKiBSZWNhbGN1bGF0ZSBzbmRfc3N0aHJlc2gsIHdlIHdhbnQgdG8gc2V0IGl0IHRvOgorICoKKyAqIFJlbm86CisgKiAJb25lIGhhbGYgdGhlIGN1cnJlbnQgY29uZ2VzdGlvbiB3aW5kb3csIGJ1dCBubworICoJbGVzcyB0aGFuIHR3byBzZWdtZW50cworICoKKyAqIEJJQzoKKyAqCWJlaGF2ZSBsaWtlIFJlbm8gdW50aWwgbG93X3dpbmRvdyBpcyByZWFjaGVkLAorICoJdGhlbiBpbmNyZWFzZSBjb25nZXN0aW9uIHdpbmRvdyBzbG93bHkKKyAqLworc3RhdGljIGlubGluZSBfX3UzMiB0Y3BfcmVjYWxjX3NzdGhyZXNoKHN0cnVjdCB0Y3Bfc29jayAqdHApCit7CisJaWYgKHRjcF9pc19iaWModHApKSB7CisJCWlmIChzeXNjdGxfdGNwX2JpY19mYXN0X2NvbnZlcmdlbmNlICYmCisJCSAgICB0cC0+c25kX2N3bmQgPCB0cC0+YmljdGNwLmxhc3RfbWF4X2N3bmQpCisJCQl0cC0+YmljdGNwLmxhc3RfbWF4X2N3bmQgPSAodHAtPnNuZF9jd25kICogCisJCQkJCQkgICAgKEJJQ1RDUF9CRVRBX1NDQUxFCisJCQkJCQkgICAgICsgc3lzY3RsX3RjcF9iaWNfYmV0YSkpCisJCQkJLyAoMiAqIEJJQ1RDUF9CRVRBX1NDQUxFKTsKKwkJZWxzZQorCQkJdHAtPmJpY3RjcC5sYXN0X21heF9jd25kID0gdHAtPnNuZF9jd25kOworCisJCWlmICh0cC0+c25kX2N3bmQgPiBzeXNjdGxfdGNwX2JpY19sb3dfd2luZG93KQorCQkJcmV0dXJuIG1heCgodHAtPnNuZF9jd25kICogc3lzY3RsX3RjcF9iaWNfYmV0YSkKKwkJCQkgICAvIEJJQ1RDUF9CRVRBX1NDQUxFLCAyVSk7CisJfQorCisJcmV0dXJuIG1heCh0cC0+c25kX2N3bmQgPj4gMVUsIDJVKTsKK30KKworLyogU3RvcCB0YWtpbmcgVmVnYXMgc2FtcGxlcyBmb3Igbm93LiAqLworI2RlZmluZSB0Y3BfdmVnYXNfZGlzYWJsZShfX3RwKQkoKF9fdHApLT52ZWdhcy5kb2luZ192ZWdhc19ub3cgPSAwKQorICAgIAorc3RhdGljIGlubGluZSB2b2lkIHRjcF92ZWdhc19lbmFibGUoc3RydWN0IHRjcF9zb2NrICp0cCkKK3sKKwkvKiBUaGVyZSBhcmUgc2V2ZXJhbCBzaXR1YXRpb25zIHdoZW4gd2UgbXVzdCAicmUtc3RhcnQiIFZlZ2FzOgorCSAqCisJICogIG8gd2hlbiBhIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQKKwkgKiAgbyBhZnRlciBhbiBSVE8KKwkgKiAgbyBhZnRlciBmYXN0IHJlY292ZXJ5CisJICogIG8gd2hlbiB3ZSBzZW5kIGEgcGFja2V0IGFuZCB0aGVyZSBpcyBubyBvdXRzdGFuZGluZworCSAqICAgIHVuYWNrbm93bGVkZ2VkIGRhdGEgKHJlc3RhcnRpbmcgYW4gaWRsZSBjb25uZWN0aW9uKQorCSAqCisJICogSW4gdGhlc2UgY2lyY3Vtc3RhbmNlcyB3ZSBjYW5ub3QgZG8gYSBWZWdhcyBjYWxjdWxhdGlvbiBhdCB0aGUKKwkgKiBlbmQgb2YgdGhlIGZpcnN0IFJUVCwgYmVjYXVzZSBhbnkgY2FsY3VsYXRpb24gd2UgZG8gaXMgdXNpbmcKKwkgKiBzdGFsZSBpbmZvIC0tIGJvdGggdGhlIHNhdmVkIGN3bmQgYW5kIGNvbmdlc3Rpb24gZmVlZGJhY2sgYXJlCisJICogc3RhbGUuCisJICoKKwkgKiBJbnN0ZWFkIHdlIG11c3Qgd2FpdCB1bnRpbCB0aGUgY29tcGxldGlvbiBvZiBhbiBSVFQgZHVyaW5nCisJICogd2hpY2ggd2UgYWN0dWFsbHkgcmVjZWl2ZSBBQ0tzLgorCSAqLworICAgIAorCS8qIEJlZ2luIHRha2luZyBWZWdhcyBzYW1wbGVzIG5leHQgdGltZSB3ZSBzZW5kIHNvbWV0aGluZy4gKi8KKwl0cC0+dmVnYXMuZG9pbmdfdmVnYXNfbm93ID0gMTsKKyAgICAgCisJLyogU2V0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5leHQgc2VuZCB3aW5kb3cuICovCisJdHAtPnZlZ2FzLmJlZ19zbmRfbnh0ID0gdHAtPnNuZF9ueHQ7CisKKwl0cC0+dmVnYXMuY250UlRUID0gMDsKKwl0cC0+dmVnYXMubWluUlRUID0gMHg3ZmZmZmZmZjsKK30KKworLyogU2hvdWxkIHdlIGJlIHRha2luZyBWZWdhcyBzYW1wbGVzIHJpZ2h0IG5vdz8gKi8KKyNkZWZpbmUgdGNwX3ZlZ2FzX2VuYWJsZWQoX190cCkJKChfX3RwKS0+dmVnYXMuZG9pbmdfdmVnYXNfbm93KQorCitleHRlcm4gdm9pZCB0Y3BfY2FfaW5pdChzdHJ1Y3QgdGNwX3NvY2sgKnRwKTsKKworc3RhdGljIGlubGluZSB2b2lkIHRjcF9zZXRfY2Ffc3RhdGUoc3RydWN0IHRjcF9zb2NrICp0cCwgdTggY2Ffc3RhdGUpCit7CisJaWYgKHRjcF9pc192ZWdhcyh0cCkpIHsKKwkJaWYgKGNhX3N0YXRlID09IFRDUF9DQV9PcGVuKSAKKwkJCXRjcF92ZWdhc19lbmFibGUodHApOworCQllbHNlCisJCQl0Y3BfdmVnYXNfZGlzYWJsZSh0cCk7CisJfQorCXRwLT5jYV9zdGF0ZSA9IGNhX3N0YXRlOworfQorCisvKiBJZiBjd25kID4gc3N0aHJlc2gsIHdlIG1heSByYWlzZSBzc3RocmVzaCB0byBiZSBoYWxmLXdheSB0byBjd25kLgorICogVGhlIGV4Y2VwdGlvbiBpcyByYXRlIGhhbHZpbmcgcGhhc2UsIHdoZW4gY3duZCBpcyBkZWNyZWFzaW5nIHRvd2FyZHMKKyAqIHNzdGhyZXNoLgorICovCitzdGF0aWMgaW5saW5lIF9fdTMyIHRjcF9jdXJyZW50X3NzdGhyZXNoKHN0cnVjdCB0Y3Bfc29jayAqdHApCit7CisJaWYgKCgxPDx0cC0+Y2Ffc3RhdGUpJihUQ1BGX0NBX0NXUnxUQ1BGX0NBX1JlY292ZXJ5KSkKKwkJcmV0dXJuIHRwLT5zbmRfc3N0aHJlc2g7CisJZWxzZQorCQlyZXR1cm4gbWF4KHRwLT5zbmRfc3N0aHJlc2gsCisJCQkgICAoKHRwLT5zbmRfY3duZCA+PiAxKSArCisJCQkgICAgKHRwLT5zbmRfY3duZCA+PiAyKSkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdGNwX3N5bmNfbGVmdF9vdXQoc3RydWN0IHRjcF9zb2NrICp0cCkKK3sKKwlpZiAodHAtPnJ4X29wdC5zYWNrX29rICYmCisJICAgICh0cC0+c2Fja2VkX291dCA+PSB0cC0+cGFja2V0c19vdXQgLSB0cC0+bG9zdF9vdXQpKQorCQl0cC0+c2Fja2VkX291dCA9IHRwLT5wYWNrZXRzX291dCAtIHRwLT5sb3N0X291dDsKKwl0cC0+bGVmdF9vdXQgPSB0cC0+c2Fja2VkX291dCArIHRwLT5sb3N0X291dDsKK30KKworZXh0ZXJuIHZvaWQgdGNwX2N3bmRfYXBwbGljYXRpb25fbGltaXRlZChzdHJ1Y3Qgc29jayAqc2spOworCisvKiBDb25nZXN0aW9uIHdpbmRvdyB2YWxpZGF0aW9uLiAoUkZDMjg2MSkgKi8KKworc3RhdGljIGlubGluZSB2b2lkIHRjcF9jd25kX3ZhbGlkYXRlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRjcF9zb2NrICp0cCkKK3sKKwlfX3UzMiBwYWNrZXRzX291dCA9IHRwLT5wYWNrZXRzX291dDsKKworCWlmIChwYWNrZXRzX291dCA+PSB0cC0+c25kX2N3bmQpIHsKKwkJLyogTmV0d29yayBpcyBmZWVkIGZ1bGx5LiAqLworCQl0cC0+c25kX2N3bmRfdXNlZCA9IDA7CisJCXRwLT5zbmRfY3duZF9zdGFtcCA9IHRjcF90aW1lX3N0YW1wOworCX0gZWxzZSB7CisJCS8qIE5ldHdvcmsgc3RhcnZlcy4gKi8KKwkJaWYgKHRwLT5wYWNrZXRzX291dCA+IHRwLT5zbmRfY3duZF91c2VkKQorCQkJdHAtPnNuZF9jd25kX3VzZWQgPSB0cC0+cGFja2V0c19vdXQ7CisKKwkJaWYgKChzMzIpKHRjcF90aW1lX3N0YW1wIC0gdHAtPnNuZF9jd25kX3N0YW1wKSA+PSB0cC0+cnRvKQorCQkJdGNwX2N3bmRfYXBwbGljYXRpb25fbGltaXRlZChzayk7CisJfQorfQorCisvKiBTZXQgc2xvdyBzdGFydCB0aHJlc2hvdWxkIGFuZCBjd25kIG5vdCBmYWxsaW5nIHRvIHNsb3cgc3RhcnQgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3RjcF9lbnRlcl9jd3Ioc3RydWN0IHRjcF9zb2NrICp0cCkKK3sKKwl0cC0+dW5kb19tYXJrZXIgPSAwOworCXRwLT5zbmRfc3N0aHJlc2ggPSB0Y3BfcmVjYWxjX3NzdGhyZXNoKHRwKTsKKwl0cC0+c25kX2N3bmQgPSBtaW4odHAtPnNuZF9jd25kLAorCQkJICAgdGNwX3BhY2tldHNfaW5fZmxpZ2h0KHRwKSArIDFVKTsKKwl0cC0+c25kX2N3bmRfY250ID0gMDsKKwl0cC0+aGlnaF9zZXEgPSB0cC0+c25kX254dDsKKwl0cC0+c25kX2N3bmRfc3RhbXAgPSB0Y3BfdGltZV9zdGFtcDsKKwlUQ1BfRUNOX3F1ZXVlX2N3cih0cCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0Y3BfZW50ZXJfY3dyKHN0cnVjdCB0Y3Bfc29jayAqdHApCit7CisJdHAtPnByaW9yX3NzdGhyZXNoID0gMDsKKwlpZiAodHAtPmNhX3N0YXRlIDwgVENQX0NBX0NXUikgeworCQlfX3RjcF9lbnRlcl9jd3IodHApOworCQl0Y3Bfc2V0X2NhX3N0YXRlKHRwLCBUQ1BfQ0FfQ1dSKTsKKwl9Cit9CisKK2V4dGVybiBfX3UzMiB0Y3BfaW5pdF9jd25kKHN0cnVjdCB0Y3Bfc29jayAqdHAsIHN0cnVjdCBkc3RfZW50cnkgKmRzdCk7CisKKy8qIFNsb3cgc3RhcnQgd2l0aCBkZWxhY2sgcHJvZHVjZXMgMyBwYWNrZXRzIG9mIGJ1cnN0LCBzbyB0aGF0CisgKiBpdCBpcyBzYWZlICJkZSBmYWN0byIuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIF9fdTMyIHRjcF9tYXhfYnVyc3QoY29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCkKK3sKKwlyZXR1cm4gMzsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IHRjcF9taW5zaGFsbF9jaGVjayhjb25zdCBzdHJ1Y3QgdGNwX3NvY2sgKnRwKQoreworCXJldHVybiBhZnRlcih0cC0+c25kX3NtbCx0cC0+c25kX3VuYSkgJiYKKwkJIWFmdGVyKHRwLT5zbmRfc21sLCB0cC0+c25kX254dCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgdGNwX21pbnNoYWxsX3VwZGF0ZShzdHJ1Y3QgdGNwX3NvY2sgKnRwLCBpbnQgbXNzLCAKKwkJCQkJICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlpZiAoc2tiLT5sZW4gPCBtc3MpCisJCXRwLT5zbmRfc21sID0gVENQX1NLQl9DQihza2IpLT5lbmRfc2VxOworfQorCisvKiBSZXR1cm4gMCwgaWYgcGFja2V0IGNhbiBiZSBzZW50IG5vdyB3aXRob3V0IHZpb2xhdGlvbiBOYWdsZSdzIHJ1bGVzOgorICAgMS4gSXQgaXMgZnVsbCBzaXplZC4KKyAgIDIuIE9yIGl0IGNvbnRhaW5zIEZJTi4KKyAgIDMuIE9yIFRDUF9OT0RFTEFZIHdhcyBzZXQuCisgICA0LiBPciBUQ1BfQ09SSyBpcyBub3Qgc2V0LCBhbmQgYWxsIHNlbnQgcGFja2V0cyBhcmUgQUNLZWQuCisgICAgICBXaXRoIE1pbnNoYWxsJ3MgbW9kaWZpY2F0aW9uOiBhbGwgc2VudCBzbWFsbCBwYWNrZXRzIGFyZSBBQ0tlZC4KKyAqLworCitzdGF0aWMgX19pbmxpbmVfXyBpbnQKK3RjcF9uYWdsZV9jaGVjayhjb25zdCBzdHJ1Y3QgdGNwX3NvY2sgKnRwLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAKKwkJdW5zaWduZWQgbXNzX25vdywgaW50IG5vbmFnbGUpCit7CisJcmV0dXJuIChza2ItPmxlbiA8IG1zc19ub3cgJiYKKwkJIShUQ1BfU0tCX0NCKHNrYiktPmZsYWdzICYgVENQQ0JfRkxBR19GSU4pICYmCisJCSgobm9uYWdsZSZUQ1BfTkFHTEVfQ09SSykgfHwKKwkJICghbm9uYWdsZSAmJgorCQkgIHRwLT5wYWNrZXRzX291dCAmJgorCQkgIHRjcF9taW5zaGFsbF9jaGVjayh0cCkpKSk7Cit9CisKK2V4dGVybiB2b2lkIHRjcF9zZXRfc2tiX3Rzb19zZWdzKHN0cnVjdCBza19idWZmICosIHVuc2lnbmVkIGludCk7CisKKy8qIFRoaXMgY2hlY2tzIGlmIHRoZSBkYXRhIGJlYXJpbmcgcGFja2V0IFNLQiAodXN1YWxseSBzay0+c2tfc2VuZF9oZWFkKQorICogc2hvdWxkIGJlIHB1dCBvbiB0aGUgd2lyZSByaWdodCBub3cuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIGludCB0Y3Bfc25kX3Rlc3QoY29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCwgCisJCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICB1bnNpZ25lZCBjdXJfbXNzLCBpbnQgbm9uYWdsZSkKK3sKKwlpbnQgcGt0cyA9IHRjcF9za2JfcGNvdW50KHNrYik7CisKKwlpZiAoIXBrdHMpIHsKKwkJdGNwX3NldF9za2JfdHNvX3NlZ3Moc2tiLCB0cC0+bXNzX2NhY2hlX3N0ZCk7CisJCXBrdHMgPSB0Y3Bfc2tiX3Bjb3VudChza2IpOworCX0KKworCS8qCVJGQyAxMTIyIC0gc2VjdGlvbiA0LjIuMy40CisJICoKKwkgKglXZSBtdXN0IHF1ZXVlIGlmCisJICoKKwkgKglhKSBUaGUgcmlnaHQgZWRnZSBvZiB0aGlzIGZyYW1lIGV4Y2VlZHMgdGhlIHdpbmRvdworCSAqCWIpIFRoZXJlIGFyZSBwYWNrZXRzIGluIGZsaWdodCBhbmQgd2UgaGF2ZSBhIHNtYWxsIHNlZ21lbnQKKwkgKgkgICBbU1dTIGF2b2lkYW5jZSBhbmQgTmFnbGUgYWxnb3JpdGhtXQorCSAqCSAgIChwYXJ0IG9mIFNXUyBpcyBkb25lIG9uIHBhY2tldGl6YXRpb24pCisJICoJICAgTWluc2hhbGwgdmVyc2lvbiBzb3VuZHM6IHRoZXJlIGFyZSBubyBfc21hbGxfCisJICoJICAgc2VnbWVudHMgaW4gZmxpZ2h0LiAodGNwX25hZ2xlX2NoZWNrKQorCSAqCWMpIFdlIGhhdmUgdG9vIG1hbnkgcGFja2V0cyAnaW4gZmxpZ2h0JworCSAqCisJICogCURvbid0IHVzZSB0aGUgbmFnbGUgcnVsZSBmb3IgdXJnZW50IGRhdGEgKG9yCisJICoJZm9yIHRoZSBmaW5hbCBGSU4gLURhdmVNKS4KKwkgKgorCSAqCUFsc28sIE5hZ2xlIHJ1bGUgZG9lcyBub3QgYXBwbHkgdG8gZnJhbWVzLCB3aGljaAorCSAqCXNpdCBpbiB0aGUgbWlkZGxlIG9mIHF1ZXVlICh0aGV5IGhhdmUgbm8gY2hhbmNlcworCSAqCXRvIGdldCBuZXcgZGF0YSkgYW5kIGlmIHJvb20gYXQgdGFpbCBvZiBza2IgaXMKKwkgKglub3QgZW5vdWdoIHRvIHNhdmUgc29tZXRoaW5nIHNlcmlvdXNseSAoPDMyIGZvciBub3cpLgorCSAqLworCisJLyogRG9uJ3QgYmUgc3RyaWN0IGFib3V0IHRoZSBjb25nZXN0aW9uIHdpbmRvdyBmb3IgdGhlCisJICogZmluYWwgRklOIGZyYW1lLiAgLURhdmVNCisJICovCisJcmV0dXJuICgoKG5vbmFnbGUmVENQX05BR0xFX1BVU0gpIHx8IHRwLT51cmdfbW9kZQorCQkgfHwgIXRjcF9uYWdsZV9jaGVjayh0cCwgc2tiLCBjdXJfbXNzLCBub25hZ2xlKSkgJiYKKwkJKCgodGNwX3BhY2tldHNfaW5fZmxpZ2h0KHRwKSArIChwa3RzLTEpKSA8IHRwLT5zbmRfY3duZCkgfHwKKwkJIChUQ1BfU0tCX0NCKHNrYiktPmZsYWdzICYgVENQQ0JfRkxBR19GSU4pKSAmJgorCQkhYWZ0ZXIoVENQX1NLQl9DQihza2IpLT5lbmRfc2VxLCB0cC0+c25kX3VuYSArIHRwLT5zbmRfd25kKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgdGNwX2NoZWNrX3Byb2JlX3RpbWVyKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRjcF9zb2NrICp0cCkKK3sKKwlpZiAoIXRwLT5wYWNrZXRzX291dCAmJiAhdHAtPnBlbmRpbmcpCisJCXRjcF9yZXNldF94bWl0X3RpbWVyKHNrLCBUQ1BfVElNRV9QUk9CRTAsIHRwLT5ydG8pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgdGNwX3NrYl9pc19sYXN0KGNvbnN0IHN0cnVjdCBzb2NrICpzaywgCisJCQkJICAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlyZXR1cm4gc2tiLT5uZXh0ID09IChzdHJ1Y3Qgc2tfYnVmZiAqKSZzay0+c2tfd3JpdGVfcXVldWU7Cit9CisKKy8qIFB1c2ggb3V0IGFueSBwZW5kaW5nIGZyYW1lcyB3aGljaCB3ZXJlIGhlbGQgYmFjayBkdWUgdG8KKyAqIFRDUF9DT1JLIG9yIGF0dGVtcHQgYXQgY29hbGVzY2luZyB0aW55IHBhY2tldHMuCisgKiBUaGUgc29ja2V0IG11c3QgYmUgbG9ja2VkIGJ5IHRoZSBjYWxsZXIuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX190Y3BfcHVzaF9wZW5kaW5nX2ZyYW1lcyhzdHJ1Y3Qgc29jayAqc2ssCisJCQkJCQkgc3RydWN0IHRjcF9zb2NrICp0cCwKKwkJCQkJCSB1bnNpZ25lZCBjdXJfbXNzLAorCQkJCQkJIGludCBub25hZ2xlKQoreworCXN0cnVjdCBza19idWZmICpza2IgPSBzay0+c2tfc2VuZF9oZWFkOworCisJaWYgKHNrYikgeworCQlpZiAoIXRjcF9za2JfaXNfbGFzdChzaywgc2tiKSkKKwkJCW5vbmFnbGUgPSBUQ1BfTkFHTEVfUFVTSDsKKwkJaWYgKCF0Y3Bfc25kX3Rlc3QodHAsIHNrYiwgY3VyX21zcywgbm9uYWdsZSkgfHwKKwkJICAgIHRjcF93cml0ZV94bWl0KHNrLCBub25hZ2xlKSkKKwkJCXRjcF9jaGVja19wcm9iZV90aW1lcihzaywgdHApOworCX0KKwl0Y3BfY3duZF92YWxpZGF0ZShzaywgdHApOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHRjcF9wdXNoX3BlbmRpbmdfZnJhbWVzKHN0cnVjdCBzb2NrICpzaywKKwkJCQkJICAgICAgIHN0cnVjdCB0Y3Bfc29jayAqdHApCit7CisJX190Y3BfcHVzaF9wZW5kaW5nX2ZyYW1lcyhzaywgdHAsIHRjcF9jdXJyZW50X21zcyhzaywgMSksIHRwLT5ub25hZ2xlKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IHRjcF9tYXlfc2VuZF9ub3coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGNwX3NvY2sgKnRwKQoreworCXN0cnVjdCBza19idWZmICpza2IgPSBzay0+c2tfc2VuZF9oZWFkOworCisJcmV0dXJuIChza2IgJiYKKwkJdGNwX3NuZF90ZXN0KHRwLCBza2IsIHRjcF9jdXJyZW50X21zcyhzaywgMSksCisJCQkgICAgIHRjcF9za2JfaXNfbGFzdChzaywgc2tiKSA/IFRDUF9OQUdMRV9QVVNIIDogdHAtPm5vbmFnbGUpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCB0Y3BfaW5pdF93bChzdHJ1Y3QgdGNwX3NvY2sgKnRwLCB1MzIgYWNrLCB1MzIgc2VxKQoreworCXRwLT5zbmRfd2wxID0gc2VxOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHRjcF91cGRhdGVfd2woc3RydWN0IHRjcF9zb2NrICp0cCwgdTMyIGFjaywgdTMyIHNlcSkKK3sKKwl0cC0+c25kX3dsMSA9IHNlcTsKK30KKworZXh0ZXJuIHZvaWQgdGNwX2Rlc3Ryb3lfc29jayhzdHJ1Y3Qgc29jayAqc2spOworCisKKy8qCisgKiBDYWxjdWxhdGUoL2NoZWNrKSBUQ1AgY2hlY2tzdW0KKyAqLworc3RhdGljIF9faW5saW5lX18gdTE2IHRjcF92NF9jaGVjayhzdHJ1Y3QgdGNwaGRyICp0aCwgaW50IGxlbiwKKwkJCQkgICB1bnNpZ25lZCBsb25nIHNhZGRyLCB1bnNpZ25lZCBsb25nIGRhZGRyLCAKKwkJCQkgICB1bnNpZ25lZCBsb25nIGJhc2UpCit7CisJcmV0dXJuIGNzdW1fdGNwdWRwX21hZ2ljKHNhZGRyLGRhZGRyLGxlbixJUFBST1RPX1RDUCxiYXNlKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fdGNwX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IpCit7CisJcmV0dXJuICh1bnNpZ25lZCBzaG9ydCljc3VtX2ZvbGQoc2tiX2NoZWNrc3VtKHNrYiwgMCwgc2tiLT5sZW4sIHNrYi0+Y3N1bSkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgdGNwX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IpCit7CisJcmV0dXJuIHNrYi0+aXBfc3VtbWVkICE9IENIRUNLU1VNX1VOTkVDRVNTQVJZICYmCisJCV9fdGNwX2NoZWNrc3VtX2NvbXBsZXRlKHNrYik7Cit9CisKKy8qIFByZXF1ZXVlIGZvciBWSiBzdHlsZSBjb3B5IHRvIHVzZXIsIGNvbWJpbmVkIHdpdGggY2hlY2tzdW1taW5nLiAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHRjcF9wcmVxdWV1ZV9pbml0KHN0cnVjdCB0Y3Bfc29jayAqdHApCit7CisJdHAtPnVjb3B5LnRhc2sgPSBOVUxMOworCXRwLT51Y29weS5sZW4gPSAwOworCXRwLT51Y29weS5tZW1vcnkgPSAwOworCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnRwLT51Y29weS5wcmVxdWV1ZSk7Cit9CisKKy8qIFBhY2tldCBpcyBhZGRlZCB0byBWSi1zdHlsZSBwcmVxdWV1ZSBmb3IgcHJvY2Vzc2luZyBpbiBwcm9jZXNzCisgKiBjb250ZXh0LCBpZiBhIHJlYWRlciB0YXNrIGlzIHdhaXRpbmcuIEFwcGFyZW50bHksIHRoaXMgZXhjaXRpbmcKKyAqIGlkZWEgKFZKJ3MgbWFpbCAiUmU6IHF1ZXJ5IGFib3V0IFRDUCBoZWFkZXIgb24gdGNwLWlwIiBvZiAwNyBTZXAgOTMpCisgKiBmYWlsZWQgc29tZXdoZXJlLiBMYXRlbmN5PyBCdXJzdGluZXNzPyBXZWxsLCBhdCBsZWFzdCBub3cgd2Ugd2lsbAorICogc2VlLCB3aHkgaXQgZmFpbGVkLiA4KTgpCQkJCSAgLS1BTksKKyAqCisgKiBOT1RFOiBpcyB0aGlzIG5vdCB0b28gYmlnIHRvIGlubGluZT8KKyAqLworc3RhdGljIF9faW5saW5lX18gaW50IHRjcF9wcmVxdWV1ZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CisKKwlpZiAoIXN5c2N0bF90Y3BfbG93X2xhdGVuY3kgJiYgdHAtPnVjb3B5LnRhc2spIHsKKwkJX19za2JfcXVldWVfdGFpbCgmdHAtPnVjb3B5LnByZXF1ZXVlLCBza2IpOworCQl0cC0+dWNvcHkubWVtb3J5ICs9IHNrYi0+dHJ1ZXNpemU7CisJCWlmICh0cC0+dWNvcHkubWVtb3J5ID4gc2stPnNrX3JjdmJ1ZikgeworCQkJc3RydWN0IHNrX2J1ZmYgKnNrYjE7CisKKwkJCUJVR19PTihzb2NrX293bmVkX2J5X3VzZXIoc2spKTsKKworCQkJd2hpbGUgKChza2IxID0gX19za2JfZGVxdWV1ZSgmdHAtPnVjb3B5LnByZXF1ZXVlKSkgIT0gTlVMTCkgeworCQkJCXNrLT5za19iYWNrbG9nX3Jjdihzaywgc2tiMSk7CisJCQkJTkVUX0lOQ19TVEFUU19CSChMSU5VWF9NSUJfVENQUFJFUVVFVUVEUk9QUEVEKTsKKwkJCX0KKworCQkJdHAtPnVjb3B5Lm1lbW9yeSA9IDA7CisJCX0gZWxzZSBpZiAoc2tiX3F1ZXVlX2xlbigmdHAtPnVjb3B5LnByZXF1ZXVlKSA9PSAxKSB7CisJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoc2stPnNrX3NsZWVwKTsKKwkJCWlmICghdGNwX2Fja19zY2hlZHVsZWQodHApKQorCQkJCXRjcF9yZXNldF94bWl0X3RpbWVyKHNrLCBUQ1BfVElNRV9EQUNLLCAoMypUQ1BfUlRPX01JTikvNCk7CisJCX0KKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCisKKyN1bmRlZiBTVEFURV9UUkFDRQorCisjaWZkZWYgU1RBVEVfVFJBQ0UKK3N0YXRpYyBjb25zdCBjaGFyICpzdGF0ZW5hbWVbXT17CisJIlVudXNlZCIsIkVzdGFibGlzaGVkIiwiU3luIFNlbnQiLCJTeW4gUmVjdiIsCisJIkZpbiBXYWl0IDEiLCJGaW4gV2FpdCAyIiwiVGltZSBXYWl0IiwgIkNsb3NlIiwKKwkiQ2xvc2UgV2FpdCIsIkxhc3QgQUNLIiwiTGlzdGVuIiwiQ2xvc2luZyIKK307CisjZW5kaWYKKworc3RhdGljIF9faW5saW5lX18gdm9pZCB0Y3Bfc2V0X3N0YXRlKHN0cnVjdCBzb2NrICpzaywgaW50IHN0YXRlKQoreworCWludCBvbGRzdGF0ZSA9IHNrLT5za19zdGF0ZTsKKworCXN3aXRjaCAoc3RhdGUpIHsKKwljYXNlIFRDUF9FU1RBQkxJU0hFRDoKKwkJaWYgKG9sZHN0YXRlICE9IFRDUF9FU1RBQkxJU0hFRCkKKwkJCVRDUF9JTkNfU1RBVFMoVENQX01JQl9DVVJSRVNUQUIpOworCQlicmVhazsKKworCWNhc2UgVENQX0NMT1NFOgorCQlpZiAob2xkc3RhdGUgPT0gVENQX0NMT1NFX1dBSVQgfHwgb2xkc3RhdGUgPT0gVENQX0VTVEFCTElTSEVEKQorCQkJVENQX0lOQ19TVEFUUyhUQ1BfTUlCX0VTVEFCUkVTRVRTKTsKKworCQlzay0+c2tfcHJvdC0+dW5oYXNoKHNrKTsKKwkJaWYgKHRjcF9zayhzayktPmJpbmRfaGFzaCAmJgorCQkgICAgIShzay0+c2tfdXNlcmxvY2tzICYgU09DS19CSU5EUE9SVF9MT0NLKSkKKwkJCXRjcF9wdXRfcG9ydChzayk7CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWRlZmF1bHQ6CisJCWlmIChvbGRzdGF0ZT09VENQX0VTVEFCTElTSEVEKQorCQkJVENQX0RFQ19TVEFUUyhUQ1BfTUlCX0NVUlJFU1RBQik7CisJfQorCisJLyogQ2hhbmdlIHN0YXRlIEFGVEVSIHNvY2tldCBpcyB1bmhhc2hlZCB0byBhdm9pZCBjbG9zZWQKKwkgKiBzb2NrZXQgc2l0dGluZyBpbiBoYXNoIHRhYmxlcy4KKwkgKi8KKwlzay0+c2tfc3RhdGUgPSBzdGF0ZTsKKworI2lmZGVmIFNUQVRFX1RSQUNFCisJU09DS19ERUJVRyhzaywgIlRDUCBzaz0lcCwgU3RhdGUgJXMgLT4gJXNcbiIsc2ssIHN0YXRlbmFtZVtvbGRzdGF0ZV0sc3RhdGVuYW1lW3N0YXRlXSk7CisjZW5kaWYJCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgdGNwX2RvbmUoc3RydWN0IHNvY2sgKnNrKQoreworCXRjcF9zZXRfc3RhdGUoc2ssIFRDUF9DTE9TRSk7CisJdGNwX2NsZWFyX3htaXRfdGltZXJzKHNrKTsKKworCXNrLT5za19zaHV0ZG93biA9IFNIVVRET1dOX01BU0s7CisKKwlpZiAoIXNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkKKwkJc2stPnNrX3N0YXRlX2NoYW5nZShzayk7CisJZWxzZQorCQl0Y3BfZGVzdHJveV9zb2NrKHNrKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCB0Y3Bfc2Fja19yZXNldChzdHJ1Y3QgdGNwX29wdGlvbnNfcmVjZWl2ZWQgKnJ4X29wdCkKK3sKKwlyeF9vcHQtPmRzYWNrID0gMDsKKwlyeF9vcHQtPmVmZl9zYWNrcyA9IDA7CisJcnhfb3B0LT5udW1fc2Fja3MgPSAwOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHRjcF9idWlsZF9hbmRfdXBkYXRlX29wdGlvbnMoX191MzIgKnB0ciwgc3RydWN0IHRjcF9zb2NrICp0cCwgX191MzIgdHN0YW1wKQoreworCWlmICh0cC0+cnhfb3B0LnRzdGFtcF9vaykgeworCQkqcHRyKysgPSBfX2NvbnN0YW50X2h0b25sKChUQ1BPUFRfTk9QIDw8IDI0KSB8CisJCQkJCSAgKFRDUE9QVF9OT1AgPDwgMTYpIHwKKwkJCQkJICAoVENQT1BUX1RJTUVTVEFNUCA8PCA4KSB8CisJCQkJCSAgVENQT0xFTl9USU1FU1RBTVApOworCQkqcHRyKysgPSBodG9ubCh0c3RhbXApOworCQkqcHRyKysgPSBodG9ubCh0cC0+cnhfb3B0LnRzX3JlY2VudCk7CisJfQorCWlmICh0cC0+cnhfb3B0LmVmZl9zYWNrcykgeworCQlzdHJ1Y3QgdGNwX3NhY2tfYmxvY2sgKnNwID0gdHAtPnJ4X29wdC5kc2FjayA/IHRwLT5kdXBsaWNhdGVfc2FjayA6IHRwLT5zZWxlY3RpdmVfYWNrczsKKwkJaW50IHRoaXNfc2FjazsKKworCQkqcHRyKysgPSBfX2NvbnN0YW50X2h0b25sKChUQ1BPUFRfTk9QIDw8IDI0KSB8CisJCQkJCSAgKFRDUE9QVF9OT1AgPDwgMTYpIHwKKwkJCQkJICAoVENQT1BUX1NBQ0sgPDwgOCkgfAorCQkJCQkgIChUQ1BPTEVOX1NBQ0tfQkFTRSArCisJCQkJCSAgICh0cC0+cnhfb3B0LmVmZl9zYWNrcyAqIFRDUE9MRU5fU0FDS19QRVJCTE9DSykpKTsKKwkJZm9yKHRoaXNfc2FjayA9IDA7IHRoaXNfc2FjayA8IHRwLT5yeF9vcHQuZWZmX3NhY2tzOyB0aGlzX3NhY2srKykgeworCQkJKnB0cisrID0gaHRvbmwoc3BbdGhpc19zYWNrXS5zdGFydF9zZXEpOworCQkJKnB0cisrID0gaHRvbmwoc3BbdGhpc19zYWNrXS5lbmRfc2VxKTsKKwkJfQorCQlpZiAodHAtPnJ4X29wdC5kc2FjaykgeworCQkJdHAtPnJ4X29wdC5kc2FjayA9IDA7CisJCQl0cC0+cnhfb3B0LmVmZl9zYWNrcy0tOworCQl9CisJfQorfQorCisvKiBDb25zdHJ1Y3QgYSB0Y3Agb3B0aW9ucyBoZWFkZXIgZm9yIGEgU1lOIG9yIFNZTl9BQ0sgcGFja2V0LgorICogSWYgdGhpcyBpcyBldmVyeSBjaGFuZ2VkIG1ha2Ugc3VyZSB0byBjaGFuZ2UgdGhlIGRlZmluaXRpb24gb2YKKyAqIE1BWF9TWU5fU0laRSB0byBtYXRjaCB0aGUgbmV3IG1heGltdW0gbnVtYmVyIG9mIG9wdGlvbnMgdGhhdCB5b3UKKyAqIGNhbiBnZW5lcmF0ZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHRjcF9zeW5fYnVpbGRfb3B0aW9ucyhfX3UzMiAqcHRyLCBpbnQgbXNzLCBpbnQgdHMsIGludCBzYWNrLAorCQkJCQkgICAgIGludCBvZmZlcl93c2NhbGUsIGludCB3c2NhbGUsIF9fdTMyIHRzdGFtcCwgX191MzIgdHNfcmVjZW50KQoreworCS8qIFdlIGFsd2F5cyBnZXQgYW4gTVNTIG9wdGlvbi4KKwkgKiBUaGUgb3B0aW9uIGJ5dGVzIHdoaWNoIHdpbGwgYmUgc2VlbiBpbiBub3JtYWwgZGF0YQorCSAqIHBhY2tldHMgc2hvdWxkIHRpbWVzdGFtcHMgYmUgdXNlZCwgbXVzdCBiZSBpbiB0aGUgTVNTCisJICogYWR2ZXJ0aXNlZC4gIEJ1dCB3ZSBzdWJ0cmFjdCB0aGVtIGZyb20gdHAtPm1zc19jYWNoZSBzbworCSAqIHRoYXQgY2FsY3VsYXRpb25zIGluIHRjcF9zZW5kbXNnIGFyZSBzaW1wbGVyIGV0Yy4KKwkgKiBTbyBhY2NvdW50IGZvciB0aGlzIGZhY3QgaGVyZSBpZiBuZWNlc3NhcnkuICBJZiB3ZQorCSAqIGRvbid0IGRvIHRoaXMgY29ycmVjdGx5LCBhcyBhIHJlY2VpdmVyIHdlIHdvbid0CisJICogcmVjb2duaXplIGRhdGEgcGFja2V0cyBhcyBiZWluZyBmdWxsIHNpemVkIHdoZW4gd2UKKwkgKiBzaG91bGQsIGFuZCB0aHVzIHdlIHdvbid0IGFiaWRlIGJ5IHRoZSBkZWxheWVkIEFDSworCSAqIHJ1bGVzIGNvcnJlY3RseS4KKwkgKiBTQUNLcyBkb24ndCBtYXR0ZXIsIHdlIG5ldmVyIGRlbGF5IGFuIEFDSyB3aGVuIHdlCisJICogaGF2ZSBhbnkgb2YgdGhvc2UgZ29pbmcgb3V0LgorCSAqLworCSpwdHIrKyA9IGh0b25sKChUQ1BPUFRfTVNTIDw8IDI0KSB8IChUQ1BPTEVOX01TUyA8PCAxNikgfCBtc3MpOworCWlmICh0cykgeworCQlpZihzYWNrKQorCQkJKnB0cisrID0gX19jb25zdGFudF9odG9ubCgoVENQT1BUX1NBQ0tfUEVSTSA8PCAyNCkgfCAoVENQT0xFTl9TQUNLX1BFUk0gPDwgMTYpIHwKKwkJCQkJCSAgKFRDUE9QVF9USU1FU1RBTVAgPDwgOCkgfCBUQ1BPTEVOX1RJTUVTVEFNUCk7CisJCWVsc2UKKwkJCSpwdHIrKyA9IF9fY29uc3RhbnRfaHRvbmwoKFRDUE9QVF9OT1AgPDwgMjQpIHwgKFRDUE9QVF9OT1AgPDwgMTYpIHwKKwkJCQkJCSAgKFRDUE9QVF9USU1FU1RBTVAgPDwgOCkgfCBUQ1BPTEVOX1RJTUVTVEFNUCk7CisJCSpwdHIrKyA9IGh0b25sKHRzdGFtcCk7CQkvKiBUU1ZBTCAqLworCQkqcHRyKysgPSBodG9ubCh0c19yZWNlbnQpOwkvKiBUU0VDUiAqLworCX0gZWxzZSBpZihzYWNrKQorCQkqcHRyKysgPSBfX2NvbnN0YW50X2h0b25sKChUQ1BPUFRfTk9QIDw8IDI0KSB8IChUQ1BPUFRfTk9QIDw8IDE2KSB8CisJCQkJCSAgKFRDUE9QVF9TQUNLX1BFUk0gPDwgOCkgfCBUQ1BPTEVOX1NBQ0tfUEVSTSk7CisJaWYgKG9mZmVyX3dzY2FsZSkKKwkJKnB0cisrID0gaHRvbmwoKFRDUE9QVF9OT1AgPDwgMjQpIHwgKFRDUE9QVF9XSU5ET1cgPDwgMTYpIHwgKFRDUE9MRU5fV0lORE9XIDw8IDgpIHwgKHdzY2FsZSkpOworfQorCisvKiBEZXRlcm1pbmUgYSB3aW5kb3cgc2NhbGluZyBhbmQgaW5pdGlhbCB3aW5kb3cgdG8gb2ZmZXIuICovCitleHRlcm4gdm9pZCB0Y3Bfc2VsZWN0X2luaXRpYWxfd2luZG93KGludCBfX3NwYWNlLCBfX3UzMiBtc3MsCisJCQkJICAgICAgX191MzIgKnJjdl93bmQsIF9fdTMyICp3aW5kb3dfY2xhbXAsCisJCQkJICAgICAgaW50IHdzY2FsZV9vaywgX191OCAqcmN2X3dzY2FsZSk7CisKK3N0YXRpYyBpbmxpbmUgaW50IHRjcF93aW5fZnJvbV9zcGFjZShpbnQgc3BhY2UpCit7CisJcmV0dXJuIHN5c2N0bF90Y3BfYWR2X3dpbl9zY2FsZTw9MCA/CisJCShzcGFjZT4+KC1zeXNjdGxfdGNwX2Fkdl93aW5fc2NhbGUpKSA6CisJCXNwYWNlIC0gKHNwYWNlPj5zeXNjdGxfdGNwX2Fkdl93aW5fc2NhbGUpOworfQorCisvKiBOb3RlOiBjYWxsZXIgbXVzdCBiZSBwcmVwYXJlZCB0byBkZWFsIHdpdGggbmVnYXRpdmUgcmV0dXJucyAqLyAKK3N0YXRpYyBpbmxpbmUgaW50IHRjcF9zcGFjZShjb25zdCBzdHJ1Y3Qgc29jayAqc2spCit7CisJcmV0dXJuIHRjcF93aW5fZnJvbV9zcGFjZShzay0+c2tfcmN2YnVmIC0KKwkJCQkgIGF0b21pY19yZWFkKCZzay0+c2tfcm1lbV9hbGxvYykpOworfSAKKworc3RhdGljIGlubGluZSBpbnQgdGNwX2Z1bGxfc3BhY2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrKQoreworCXJldHVybiB0Y3Bfd2luX2Zyb21fc3BhY2Uoc2stPnNrX3JjdmJ1Zik7IAorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdGNwX2FjY2VwdHFfcXVldWUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgb3Blbl9yZXF1ZXN0ICpyZXEsCisJCQkJCSBzdHJ1Y3Qgc29jayAqY2hpbGQpCit7CisJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CisKKwlyZXEtPnNrID0gY2hpbGQ7CisJc2tfYWNjZXB0cV9hZGRlZChzayk7CisKKwlpZiAoIXRwLT5hY2NlcHRfcXVldWVfdGFpbCkgeworCQl0cC0+YWNjZXB0X3F1ZXVlID0gcmVxOworCX0gZWxzZSB7CisJCXRwLT5hY2NlcHRfcXVldWVfdGFpbC0+ZGxfbmV4dCA9IHJlcTsKKwl9CisJdHAtPmFjY2VwdF9xdWV1ZV90YWlsID0gcmVxOworCXJlcS0+ZGxfbmV4dCA9IE5VTEw7Cit9CisKK3N0cnVjdCB0Y3BfbGlzdGVuX29wdAoreworCXU4CQkJbWF4X3FsZW5fbG9nOwkvKiBsb2dfMiBvZiBtYXhpbWFsIHF1ZXVlZCBTWU5zICovCisJaW50CQkJcWxlbjsKKwlpbnQJCQlxbGVuX3lvdW5nOworCWludAkJCWNsb2NrX2hhbmQ7CisJdTMyCQkJaGFzaF9ybmQ7CisJc3RydWN0IG9wZW5fcmVxdWVzdAkqc3luX3RhYmxlW1RDUF9TWU5RX0hTSVpFXTsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZAordGNwX3N5bnFfcmVtb3ZlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBvcGVuX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgdGNwX2xpc3Rlbl9vcHQgKmxvcHQgPSB0Y3Bfc2soc2spLT5saXN0ZW5fb3B0OworCisJaWYgKC0tbG9wdC0+cWxlbiA9PSAwKQorCQl0Y3BfZGVsZXRlX2tlZXBhbGl2ZV90aW1lcihzayk7CisJaWYgKHJlcS0+cmV0cmFucyA9PSAwKQorCQlsb3B0LT5xbGVuX3lvdW5nLS07Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0Y3Bfc3lucV9hZGRlZChzdHJ1Y3Qgc29jayAqc2spCit7CisJc3RydWN0IHRjcF9saXN0ZW5fb3B0ICpsb3B0ID0gdGNwX3NrKHNrKS0+bGlzdGVuX29wdDsKKworCWlmIChsb3B0LT5xbGVuKysgPT0gMCkKKwkJdGNwX3Jlc2V0X2tlZXBhbGl2ZV90aW1lcihzaywgVENQX1RJTUVPVVRfSU5JVCk7CisJbG9wdC0+cWxlbl95b3VuZysrOworfQorCitzdGF0aWMgaW5saW5lIGludCB0Y3Bfc3lucV9sZW4oc3RydWN0IHNvY2sgKnNrKQoreworCXJldHVybiB0Y3Bfc2soc2spLT5saXN0ZW5fb3B0LT5xbGVuOworfQorCitzdGF0aWMgaW5saW5lIGludCB0Y3Bfc3lucV95b3VuZyhzdHJ1Y3Qgc29jayAqc2spCit7CisJcmV0dXJuIHRjcF9zayhzayktPmxpc3Rlbl9vcHQtPnFsZW5feW91bmc7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHRjcF9zeW5xX2lzX2Z1bGwoc3RydWN0IHNvY2sgKnNrKQoreworCXJldHVybiB0Y3Bfc3lucV9sZW4oc2spID4+IHRjcF9zayhzayktPmxpc3Rlbl9vcHQtPm1heF9xbGVuX2xvZzsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHRjcF9zeW5xX3VubGluayhzdHJ1Y3QgdGNwX3NvY2sgKnRwLCBzdHJ1Y3Qgb3Blbl9yZXF1ZXN0ICpyZXEsCisJCQkJICAgICAgIHN0cnVjdCBvcGVuX3JlcXVlc3QgKipwcmV2KQoreworCXdyaXRlX2xvY2soJnRwLT5zeW5fd2FpdF9sb2NrKTsKKwkqcHJldiA9IHJlcS0+ZGxfbmV4dDsKKwl3cml0ZV91bmxvY2soJnRwLT5zeW5fd2FpdF9sb2NrKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHRjcF9zeW5xX2Ryb3Aoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgb3Blbl9yZXF1ZXN0ICpyZXEsCisJCQkJICAgICBzdHJ1Y3Qgb3Blbl9yZXF1ZXN0ICoqcHJldikKK3sKKwl0Y3Bfc3lucV91bmxpbmsodGNwX3NrKHNrKSwgcmVxLCBwcmV2KTsKKwl0Y3Bfc3lucV9yZW1vdmVkKHNrLCByZXEpOworCXRjcF9vcGVucmVxX2ZyZWUocmVxKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCB0Y3Bfb3BlbnJlcV9pbml0KHN0cnVjdCBvcGVuX3JlcXVlc3QgKnJlcSwKKwkJCQkJc3RydWN0IHRjcF9vcHRpb25zX3JlY2VpdmVkICpyeF9vcHQsCisJCQkJCXN0cnVjdCBza19idWZmICpza2IpCit7CisJcmVxLT5yY3Zfd25kID0gMDsJCS8qIFNvIHRoYXQgdGNwX3NlbmRfc3luYWNrKCkga25vd3MhICovCisJcmVxLT5yY3ZfaXNuID0gVENQX1NLQl9DQihza2IpLT5zZXE7CisJcmVxLT5tc3MgPSByeF9vcHQtPm1zc19jbGFtcDsKKwlyZXEtPnRzX3JlY2VudCA9IHJ4X29wdC0+c2F3X3RzdGFtcCA/IHJ4X29wdC0+cmN2X3RzdmFsIDogMDsKKwlyZXEtPnRzdGFtcF9vayA9IHJ4X29wdC0+dHN0YW1wX29rOworCXJlcS0+c2Fja19vayA9IHJ4X29wdC0+c2Fja19vazsKKwlyZXEtPnNuZF93c2NhbGUgPSByeF9vcHQtPnNuZF93c2NhbGU7CisJcmVxLT53c2NhbGVfb2sgPSByeF9vcHQtPndzY2FsZV9vazsKKwlyZXEtPmFja2VkID0gMDsKKwlyZXEtPmVjbl9vayA9IDA7CisJcmVxLT5ybXRfcG9ydCA9IHNrYi0+aC50aC0+c291cmNlOworfQorCitleHRlcm4gdm9pZCB0Y3BfZW50ZXJfbWVtb3J5X3ByZXNzdXJlKHZvaWQpOworCitleHRlcm4gdm9pZCB0Y3BfbGlzdGVuX3dsb2NrKHZvaWQpOworCisvKiAtIFdlIG1heSBzbGVlcCBpbnNpZGUgdGhpcyBsb2NrLgorICogLSBJZiBzbGVlcGluZyBpcyBub3QgcmVxdWlyZWQgKG9yIGNhbGxlZCBmcm9tIEJIKSwKKyAqICAgdXNlIHBsYWluIHJlYWRfKHVuKWxvY2soJnRjcF9saGFzaF9sb2NrKS4KKyAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgdGNwX2xpc3Rlbl9sb2NrKHZvaWQpCit7CisJLyogcmVhZF9sb2NrIHN5bmNocm9uaXplcyB0byBjYW5kaWRhdGVzIHRvIHdyaXRlcnMgKi8KKwlyZWFkX2xvY2soJnRjcF9saGFzaF9sb2NrKTsKKwlhdG9taWNfaW5jKCZ0Y3BfbGhhc2hfdXNlcnMpOworCXJlYWRfdW5sb2NrKCZ0Y3BfbGhhc2hfbG9jayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0Y3BfbGlzdGVuX3VubG9jayh2b2lkKQoreworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZ0Y3BfbGhhc2hfdXNlcnMpKQorCQl3YWtlX3VwKCZ0Y3BfbGhhc2hfd2FpdCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGtlZXBhbGl2ZV9pbnR2bF93aGVuKGNvbnN0IHN0cnVjdCB0Y3Bfc29jayAqdHApCit7CisJcmV0dXJuIHRwLT5rZWVwYWxpdmVfaW50dmwgPyA6IHN5c2N0bF90Y3Bfa2VlcGFsaXZlX2ludHZsOworfQorCitzdGF0aWMgaW5saW5lIGludCBrZWVwYWxpdmVfdGltZV93aGVuKGNvbnN0IHN0cnVjdCB0Y3Bfc29jayAqdHApCit7CisJcmV0dXJuIHRwLT5rZWVwYWxpdmVfdGltZSA/IDogc3lzY3RsX3RjcF9rZWVwYWxpdmVfdGltZTsKK30KKworc3RhdGljIGlubGluZSBpbnQgdGNwX2Zpbl90aW1lKGNvbnN0IHN0cnVjdCB0Y3Bfc29jayAqdHApCit7CisJaW50IGZpbl90aW1lb3V0ID0gdHAtPmxpbmdlcjIgPyA6IHN5c2N0bF90Y3BfZmluX3RpbWVvdXQ7CisKKwlpZiAoZmluX3RpbWVvdXQgPCAodHAtPnJ0bzw8MikgLSAodHAtPnJ0bz4+MSkpCisJCWZpbl90aW1lb3V0ID0gKHRwLT5ydG88PDIpIC0gKHRwLT5ydG8+PjEpOworCisJcmV0dXJuIGZpbl90aW1lb3V0OworfQorCitzdGF0aWMgaW5saW5lIGludCB0Y3BfcGF3c19jaGVjayhjb25zdCBzdHJ1Y3QgdGNwX29wdGlvbnNfcmVjZWl2ZWQgKnJ4X29wdCwgaW50IHJzdCkKK3sKKwlpZiAoKHMzMikocnhfb3B0LT5yY3ZfdHN2YWwgLSByeF9vcHQtPnRzX3JlY2VudCkgPj0gMCkKKwkJcmV0dXJuIDA7CisJaWYgKHh0aW1lLnR2X3NlYyA+PSByeF9vcHQtPnRzX3JlY2VudF9zdGFtcCArIFRDUF9QQVdTXzI0REFZUykKKwkJcmV0dXJuIDA7CisKKwkvKiBSU1Qgc2VnbWVudHMgYXJlIG5vdCByZWNvbW1lbmRlZCB0byBjYXJyeSB0aW1lc3RhbXAsCisJICAgYW5kLCBpZiB0aGV5IGRvLCBpdCBpcyByZWNvbW1lbmRlZCB0byBpZ25vcmUgUEFXUyBiZWNhdXNlCisJICAgInRoZWlyIGNsZWFudXAgZnVuY3Rpb24gc2hvdWxkIHRha2UgcHJlY2VkZW5jZSBvdmVyIHRpbWVzdGFtcHMuIgorCSAgIENlcnRhaW5seSwgaXQgaXMgbWlzdGFrZS4gSXQgaXMgbmVjZXNzYXJ5IHRvIHVuZGVyc3RhbmQgdGhlIHJlYXNvbnMKKwkgICBvZiB0aGlzIGNvbnN0cmFpbnQgdG8gcmVsYXggaXQ6IGlmIHBlZXIgcmVib290cywgY2xvY2sgbWF5IGdvCisJICAgb3V0LW9mLXN5bmMgYW5kIGhhbGYtb3BlbiBjb25uZWN0aW9ucyB3aWxsIG5vdCBiZSByZXNldC4KKwkgICBBY3R1YWxseSwgdGhlIHByb2JsZW0gd291bGQgYmUgbm90IGV4aXN0aW5nIGlmIGFsbAorCSAgIHRoZSBpbXBsZW1lbnRhdGlvbnMgZm9sbG93ZWQgZHJhZnQgYWJvdXQgbWFpbnRhaW5pbmcgY2xvY2sKKwkgICB2aWEgcmVib290cy4gTGludXgtMi4yIERPRVMgTk9UIQorCisJICAgSG93ZXZlciwgd2UgY2FuIHJlbGF4IHRpbWUgYm91bmRzIGZvciBSU1Qgc2VnbWVudHMgdG8gTVNMLgorCSAqLworCWlmIChyc3QgJiYgeHRpbWUudHZfc2VjID49IHJ4X29wdC0+dHNfcmVjZW50X3N0YW1wICsgVENQX1BBV1NfTVNMKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHRjcF92NF9zZXR1cF9jYXBzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGRzdF9lbnRyeSAqZHN0KQoreworCXNrLT5za19yb3V0ZV9jYXBzID0gZHN0LT5kZXYtPmZlYXR1cmVzOworCWlmIChzay0+c2tfcm91dGVfY2FwcyAmIE5FVElGX0ZfVFNPKSB7CisJCWlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfTk9fTEFSR0VTRU5EKSB8fCBkc3QtPmhlYWRlcl9sZW4pCisJCQlzay0+c2tfcm91dGVfY2FwcyAmPSB+TkVUSUZfRl9UU087CisJfQorfQorCisjZGVmaW5lIFRDUF9DSEVDS19USU1FUihzaykgZG8geyB9IHdoaWxlICgwKQorCitzdGF0aWMgaW5saW5lIGludCB0Y3BfdXNlX2ZydG8oY29uc3Qgc3RydWN0IHNvY2sgKnNrKQoreworCWNvbnN0IHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOworCQorCS8qIEYtUlRPIG11c3QgYmUgYWN0aXZhdGVkIGluIHN5c2N0bCBhbmQgdGhlcmUgbXVzdCBiZSBzb21lCisJICogdW5zZW50IG5ldyBkYXRhLCBhbmQgdGhlIGFkdmVydGlzZWQgd2luZG93IHNob3VsZCBhbGxvdworCSAqIHNlbmRpbmcgaXQuCisJICovCisJcmV0dXJuIChzeXNjdGxfdGNwX2ZydG8gJiYgc2stPnNrX3NlbmRfaGVhZCAmJgorCQkhYWZ0ZXIoVENQX1NLQl9DQihzay0+c2tfc2VuZF9oZWFkKS0+ZW5kX3NlcSwKKwkJICAgICAgIHRwLT5zbmRfdW5hICsgdHAtPnNuZF93bmQpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHRjcF9taWJfaW5pdCh2b2lkKQoreworCS8qIFNlZSBSRkMgMjAxMiAqLworCVRDUF9BRERfU1RBVFNfVVNFUihUQ1BfTUlCX1JUT0FMR09SSVRITSwgMSk7CisJVENQX0FERF9TVEFUU19VU0VSKFRDUF9NSUJfUlRPTUlOLCBUQ1BfUlRPX01JTioxMDAwL0haKTsKKwlUQ1BfQUREX1NUQVRTX1VTRVIoVENQX01JQl9SVE9NQVgsIFRDUF9SVE9fTUFYKjEwMDAvSFopOworCVRDUF9BRERfU1RBVFNfVVNFUihUQ1BfTUlCX01BWENPTk4sIC0xKTsKK30KKworLyogL3Byb2MgKi8KK2VudW0gdGNwX3NlcV9zdGF0ZXMgeworCVRDUF9TRVFfU1RBVEVfTElTVEVOSU5HLAorCVRDUF9TRVFfU1RBVEVfT1BFTlJFUSwKKwlUQ1BfU0VRX1NUQVRFX0VTVEFCTElTSEVELAorCVRDUF9TRVFfU1RBVEVfVElNRV9XQUlULAorfTsKKworc3RydWN0IHRjcF9zZXFfYWZpbmZvIHsKKwlzdHJ1Y3QgbW9kdWxlCQkqb3duZXI7CisJY2hhcgkJCSpuYW1lOworCXNhX2ZhbWlseV90CQlmYW1pbHk7CisJaW50CQkJKCpzZXFfc2hvdykgKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdik7CisJc3RydWN0IGZpbGVfb3BlcmF0aW9ucwkqc2VxX2ZvcHM7Cit9OworCitzdHJ1Y3QgdGNwX2l0ZXJfc3RhdGUgeworCXNhX2ZhbWlseV90CQlmYW1pbHk7CisJZW51bSB0Y3Bfc2VxX3N0YXRlcwlzdGF0ZTsKKwlzdHJ1Y3Qgc29jawkJKnN5bl93YWl0X3NrOworCWludAkJCWJ1Y2tldCwgc2J1Y2tldCwgbnVtLCB1aWQ7CisJc3RydWN0IHNlcV9vcGVyYXRpb25zCXNlcV9vcHM7Cit9OworCitleHRlcm4gaW50IHRjcF9wcm9jX3JlZ2lzdGVyKHN0cnVjdCB0Y3Bfc2VxX2FmaW5mbyAqYWZpbmZvKTsKK2V4dGVybiB2b2lkIHRjcF9wcm9jX3VucmVnaXN0ZXIoc3RydWN0IHRjcF9zZXFfYWZpbmZvICphZmluZm8pOworCisvKiBUQ1AgV2VzdHdvb2QgZnVuY3Rpb25zIGFuZCBjb25zdGFudHMgKi8KKworI2RlZmluZSBUQ1BfV0VTVFdPT0RfSU5JVF9SVFQgICgyMCpIWikgICAgICAgICAgIC8qIG1heWJlIHRvbyBjb25zZXJ2YXRpdmU/ISAqLworI2RlZmluZSBUQ1BfV0VTVFdPT0RfUlRUX01JTiAgIChIWi8yMCkgICAgICAgICAgIC8qIDUwbXMgKi8KKworc3RhdGljIGlubGluZSB2b2lkIHRjcF93ZXN0d29vZF91cGRhdGVfcnR0KHN0cnVjdCB0Y3Bfc29jayAqdHAsIF9fdTMyIHJ0dF9zZXEpCit7CisgICAgICAgIGlmICh0Y3BfaXNfd2VzdHdvb2QodHApKQorICAgICAgICAgICAgICAgIHRwLT53ZXN0d29vZC5ydHQgPSBydHRfc2VxOworfQorCitzdGF0aWMgaW5saW5lIF9fdTMyIF9fdGNwX3dlc3R3b29kX2J3X3J0dG1pbihjb25zdCBzdHJ1Y3QgdGNwX3NvY2sgKnRwKQoreworICAgICAgICByZXR1cm4gbWF4KCh0cC0+d2VzdHdvb2QuYndfZXN0KSAqICh0cC0+d2VzdHdvb2QucnR0X21pbikgLworCQkgICAoX191MzIpICh0cC0+bXNzX2NhY2hlX3N0ZCksCisJCSAgIDJVKTsKK30KKworc3RhdGljIGlubGluZSBfX3UzMiB0Y3Bfd2VzdHdvb2RfYndfcnR0bWluKGNvbnN0IHN0cnVjdCB0Y3Bfc29jayAqdHApCit7CisJcmV0dXJuIHRjcF9pc193ZXN0d29vZCh0cCkgPyBfX3RjcF93ZXN0d29vZF9id19ydHRtaW4odHApIDogMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgdGNwX3dlc3R3b29kX3NzdGhyZXNoKHN0cnVjdCB0Y3Bfc29jayAqdHApCit7CisJX191MzIgc3N0aHJlc2ggPSAwOworCisJaWYgKHRjcF9pc193ZXN0d29vZCh0cCkpIHsKKwkJc3N0aHJlc2ggPSBfX3RjcF93ZXN0d29vZF9id19ydHRtaW4odHApOworCQlpZiAoc3N0aHJlc2gpCisJCQl0cC0+c25kX3NzdGhyZXNoID0gc3N0aHJlc2g7ICAKKwl9CisKKwlyZXR1cm4gKHNzdGhyZXNoICE9IDApOworfQorCitzdGF0aWMgaW5saW5lIGludCB0Y3Bfd2VzdHdvb2RfY3duZChzdHJ1Y3QgdGNwX3NvY2sgKnRwKQoreworCV9fdTMyIGN3bmQgPSAwOworCisJaWYgKHRjcF9pc193ZXN0d29vZCh0cCkpIHsKKwkJY3duZCA9IF9fdGNwX3dlc3R3b29kX2J3X3J0dG1pbih0cCk7CisJCWlmIChjd25kKQorCQkJdHAtPnNuZF9jd25kID0gY3duZDsKKwl9CisKKwlyZXR1cm4gKGN3bmQgIT0gMCk7Cit9CisjZW5kaWYJLyogX1RDUF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC90Y3BfZWNuLmggYi9pbmNsdWRlL25ldC90Y3BfZWNuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGMxNDU2MwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L3RjcF9lY24uaApAQCAtMCwwICsxLDEyNiBAQAorI2lmbmRlZiBfTkVUX1RDUF9FQ05fSF8KKyNkZWZpbmUgX05FVF9UQ1BfRUNOX0hfIDEKKworI2luY2x1ZGUgPG5ldC9pbmV0X2Vjbi5oPgorCisjZGVmaW5lIFRDUF9IUF9CSVRTICh+KFRDUF9SRVNFUlZFRF9CSVRTfFRDUF9GTEFHX1BTSCkpCisKKyNkZWZpbmUJVENQX0VDTl9PSwkJMQorI2RlZmluZSBUQ1BfRUNOX1FVRVVFX0NXUgkyCisjZGVmaW5lIFRDUF9FQ05fREVNQU5EX0NXUgk0CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBUQ1BfRUNOX3F1ZXVlX2N3cihzdHJ1Y3QgdGNwX3NvY2sgKnRwKQoreworCWlmICh0cC0+ZWNuX2ZsYWdzJlRDUF9FQ05fT0spCisJCXRwLT5lY25fZmxhZ3MgfD0gVENQX0VDTl9RVUVVRV9DV1I7Cit9CisKKworLyogT3V0cHV0IGZ1bmN0aW9ucyAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgVENQX0VDTl9zZW5kX3N5bmFjayhzdHJ1Y3QgdGNwX3NvY2sgKnRwLAorCQkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCVRDUF9TS0JfQ0Ioc2tiKS0+ZmxhZ3MgJj0gflRDUENCX0ZMQUdfQ1dSOworCWlmICghKHRwLT5lY25fZmxhZ3MmVENQX0VDTl9PSykpCisJCVRDUF9TS0JfQ0Ioc2tiKS0+ZmxhZ3MgJj0gflRDUENCX0ZMQUdfRUNFOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgVENQX0VDTl9zZW5kX3N5bihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0Y3Bfc29jayAqdHAsCisJCQkJICAgIHN0cnVjdCBza19idWZmICpza2IpCit7CisJdHAtPmVjbl9mbGFncyA9IDA7CisJaWYgKHN5c2N0bF90Y3BfZWNuICYmICEoc2stPnNrX3JvdXRlX2NhcHMgJiBORVRJRl9GX1RTTykpIHsKKwkJVENQX1NLQl9DQihza2IpLT5mbGFncyB8PSBUQ1BDQl9GTEFHX0VDRXxUQ1BDQl9GTEFHX0NXUjsKKwkJdHAtPmVjbl9mbGFncyA9IFRDUF9FQ05fT0s7CisJCXNvY2tfc2V0X2ZsYWcoc2ssIFNPQ0tfTk9fTEFSR0VTRU5EKTsKKwl9Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQKK1RDUF9FQ05fbWFrZV9zeW5hY2soc3RydWN0IG9wZW5fcmVxdWVzdCAqcmVxLCBzdHJ1Y3QgdGNwaGRyICp0aCkKK3sKKwlpZiAocmVxLT5lY25fb2spCisJCXRoLT5lY2UgPSAxOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgVENQX0VDTl9zZW5kKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRjcF9zb2NrICp0cCwKKwkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdGNwX2hlYWRlcl9sZW4pCit7CisJaWYgKHRwLT5lY25fZmxhZ3MgJiBUQ1BfRUNOX09LKSB7CisJCS8qIE5vdC1yZXRyYW5zbWl0dGVkIGRhdGEgc2VnbWVudDogc2V0IEVDVCBhbmQgaW5qZWN0IENXUi4gKi8KKwkJaWYgKHNrYi0+bGVuICE9IHRjcF9oZWFkZXJfbGVuICYmCisJCSAgICAhYmVmb3JlKFRDUF9TS0JfQ0Ioc2tiKS0+c2VxLCB0cC0+c25kX254dCkpIHsKKwkJCUlORVRfRUNOX3htaXQoc2spOworCQkJaWYgKHRwLT5lY25fZmxhZ3MmVENQX0VDTl9RVUVVRV9DV1IpIHsKKwkJCQl0cC0+ZWNuX2ZsYWdzICY9IH5UQ1BfRUNOX1FVRVVFX0NXUjsKKwkJCQlza2ItPmgudGgtPmN3ciA9IDE7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBBQ0sgb3IgcmV0cmFuc21pdHRlZCBzZWdtZW50OiBjbGVhciBFQ1R8Q0UgKi8KKwkJCUlORVRfRUNOX2RvbnR4bWl0KHNrKTsKKwkJfQorCQlpZiAodHAtPmVjbl9mbGFncyAmIFRDUF9FQ05fREVNQU5EX0NXUikKKwkJCXNrYi0+aC50aC0+ZWNlID0gMTsKKwl9Cit9CisKKy8qIElucHV0IGZ1bmN0aW9ucyAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgVENQX0VDTl9hY2NlcHRfY3dyKHN0cnVjdCB0Y3Bfc29jayAqdHAsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJaWYgKHNrYi0+aC50aC0+Y3dyKQorCQl0cC0+ZWNuX2ZsYWdzICY9IH5UQ1BfRUNOX0RFTUFORF9DV1I7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBUQ1BfRUNOX3dpdGhkcmF3X2N3cihzdHJ1Y3QgdGNwX3NvY2sgKnRwKQoreworCXRwLT5lY25fZmxhZ3MgJj0gflRDUF9FQ05fREVNQU5EX0NXUjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIFRDUF9FQ05fY2hlY2tfY2Uoc3RydWN0IHRjcF9zb2NrICp0cCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlpZiAodHAtPmVjbl9mbGFncyZUQ1BfRUNOX09LKSB7CisJCWlmIChJTkVUX0VDTl9pc19jZShUQ1BfU0tCX0NCKHNrYiktPmZsYWdzKSkKKwkJCXRwLT5lY25fZmxhZ3MgfD0gVENQX0VDTl9ERU1BTkRfQ1dSOworCQkvKiBGdW5ueSBleHRlbnNpb246IGlmIEVDVCBpcyBub3Qgc2V0IG9uIGEgc2VnbWVudCwKKwkJICogaXQgaXMgc3VyZWx5IHJldHJhbnNtaXQuIEl0IGlzIG5vdCBpbiBFQ04gUkZDLAorCQkgKiBidXQgTGludXggZm9sbG93cyB0aGlzIHJ1bGUuICovCisJCWVsc2UgaWYgKElORVRfRUNOX2lzX25vdF9lY3QoKFRDUF9TS0JfQ0Ioc2tiKS0+ZmxhZ3MpKSkKKwkJCXRjcF9lbnRlcl9xdWlja2Fja19tb2RlKHRwKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBUQ1BfRUNOX3Jjdl9zeW5hY2soc3RydWN0IHRjcF9zb2NrICp0cCwgc3RydWN0IHRjcGhkciAqdGgpCit7CisJaWYgKCh0cC0+ZWNuX2ZsYWdzJlRDUF9FQ05fT0spICYmICghdGgtPmVjZSB8fCB0aC0+Y3dyKSkKKwkJdHAtPmVjbl9mbGFncyAmPSB+VENQX0VDTl9PSzsKK30KKworc3RhdGljIGlubGluZSB2b2lkIFRDUF9FQ05fcmN2X3N5bihzdHJ1Y3QgdGNwX3NvY2sgKnRwLCBzdHJ1Y3QgdGNwaGRyICp0aCkKK3sKKwlpZiAoKHRwLT5lY25fZmxhZ3MmVENQX0VDTl9PSykgJiYgKCF0aC0+ZWNlIHx8ICF0aC0+Y3dyKSkKKwkJdHAtPmVjbl9mbGFncyAmPSB+VENQX0VDTl9PSzsKK30KKworc3RhdGljIGlubGluZSBpbnQgVENQX0VDTl9yY3ZfZWNuX2VjaG8oc3RydWN0IHRjcF9zb2NrICp0cCwgc3RydWN0IHRjcGhkciAqdGgpCit7CisJaWYgKHRoLT5lY2UgJiYgIXRoLT5zeW4gJiYgKHRwLT5lY25fZmxhZ3MmVENQX0VDTl9PSykpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgVENQX0VDTl9vcGVucmVxX2NoaWxkKHN0cnVjdCB0Y3Bfc29jayAqdHAsCisJCQkJCSBzdHJ1Y3Qgb3Blbl9yZXF1ZXN0ICpyZXEpCit7CisJdHAtPmVjbl9mbGFncyA9IHJlcS0+ZWNuX29rID8gVENQX0VDTl9PSyA6IDA7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQKK1RDUF9FQ05fY3JlYXRlX3JlcXVlc3Qoc3RydWN0IG9wZW5fcmVxdWVzdCAqcmVxLCBzdHJ1Y3QgdGNwaGRyICp0aCkKK3sKKwlpZiAoc3lzY3RsX3RjcF9lY24gJiYgdGgtPmVjZSAmJiB0aC0+Y3dyKQorCQlyZXEtPmVjbl9vayA9IDE7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvdHJhbnNwX3Y2LmggYi9pbmNsdWRlL25ldC90cmFuc3BfdjYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjA3NWFiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQvdHJhbnNwX3Y2LmgKQEAgLTAsMCArMSw1MyBAQAorI2lmbmRlZiBfVFJBTlNQX1Y2X0gKKyNkZWZpbmUgX1RSQU5TUF9WNl9ICisKKyNpbmNsdWRlIDxuZXQvY2hlY2tzdW0uaD4KKworLyoKKyAqCUlQdjYgdHJhbnNwb3J0IHByb3RvY29scworICovCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKK2V4dGVybiBzdHJ1Y3QgcHJvdG8gcmF3djZfcHJvdDsKK2V4dGVybiBzdHJ1Y3QgcHJvdG8gdWRwdjZfcHJvdDsKK2V4dGVybiBzdHJ1Y3QgcHJvdG8gdGNwdjZfcHJvdDsKKworc3RydWN0IGZsb3dpOworCisvKiBleHRlbnRpb24gaGVhZGVycyAqLworZXh0ZXJuIHZvaWQJCQkJaXB2Nl9ydGhkcl9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQJCQkJaXB2Nl9mcmFnX2luaXQodm9pZCk7CitleHRlcm4gdm9pZAkJCQlpcHY2X25vZGF0YV9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQJCQkJaXB2Nl9kZXN0b3B0X2luaXQodm9pZCk7CisKKy8qIHRyYW5zcG9ydCBwcm90b2NvbHMgKi8KK2V4dGVybiB2b2lkCQkJCXJhd3Y2X2luaXQodm9pZCk7CitleHRlcm4gdm9pZAkJCQl1ZHB2Nl9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQJCQkJdGNwdjZfaW5pdCh2b2lkKTsKKworZXh0ZXJuIGludAkJCQl1ZHB2Nl9jb25uZWN0KHN0cnVjdCBzb2NrICpzaywKKwkJCQkJCSAgICAgIHN0cnVjdCBzb2NrYWRkciAqdWFkZHIsCisJCQkJCQkgICAgICBpbnQgYWRkcl9sZW4pOworCitleHRlcm4gaW50CQkJZGF0YWdyYW1fcmVjdl9jdGwoc3RydWN0IHNvY2sgKnNrLAorCQkJCQkJICBzdHJ1Y3QgbXNnaGRyICptc2csCisJCQkJCQkgIHN0cnVjdCBza19idWZmICpza2IpOworCitleHRlcm4gaW50CQkJZGF0YWdyYW1fc2VuZF9jdGwoc3RydWN0IG1zZ2hkciAqbXNnLAorCQkJCQkJICBzdHJ1Y3QgZmxvd2kgKmZsLAorCQkJCQkJICBzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMgKm9wdCwKKwkJCQkJCSAgaW50ICpobGltaXQpOworCisjZGVmaW5lCQlMT09QQkFDSzRfSVBWNgkJX19jb25zdGFudF9odG9ubCgweDdmMDAwMDA2KQorCisvKgorICoJYWRkcmVzcyBmYW1pbHkgc3BlY2lmaWMgZnVuY3Rpb25zCisgKi8KK2V4dGVybiBzdHJ1Y3QgdGNwX2Z1bmMJaXB2NF9zcGVjaWZpYzsKKworZXh0ZXJuIGludCBpbmV0Nl9kZXN0cm95X3NvY2soc3RydWN0IHNvY2sgKnNrKTsKKworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvdWRwLmggYi9pbmNsdWRlL25ldC91ZHAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDk2ZDEwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQvdWRwLmgKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAqIElORVQJCUFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBUQ1AvSVAgcHJvdG9jb2wgc3VpdGUgZm9yIHRoZSBMSU5VWAorICoJCW9wZXJhdGluZyBzeXN0ZW0uICBJTkVUIGlzIGltcGxlbWVudGVkIHVzaW5nIHRoZSAgQlNEIFNvY2tldAorICoJCWludGVyZmFjZSBhcyB0aGUgbWVhbnMgb2YgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSB1c2VyIGxldmVsLgorICoKKyAqCQlEZWZpbml0aW9ucyBmb3IgdGhlIFVEUCBtb2R1bGUuCisgKgorICogVmVyc2lvbjoJQCgjKXVkcC5oCTEuMC4yCTA1LzA3LzkzCisgKgorICogQXV0aG9yczoJUm9zcyBCaXJvLCA8YmlyN0BsZWxhbmQuU3RhbmZvcmQuRWR1PgorICoJCUZyZWQgTi4gdmFuIEtlbXBlbiwgPHdhbHRqZUB1V2FsdC5OTC5NdWduZXQuT1JHPgorICoKKyAqIEZpeGVzOgorICoJCUFsYW4gQ294CTogVHVybmVkIG9uIHVkcCBjaGVja3N1bXMuIEkgZG9uJ3Qgd2FudCB0bworICoJCQkJICBjaGFzZSAnbWVtb3J5IGNvcnJ1cHRpb24nIGJ1Z3MgdGhhdCBhcmVuJ3QhCisgKgorICoJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCQltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICoJCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICoJCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpZm5kZWYgX1VEUF9ICisjZGVmaW5lIF9VRFBfSAorCisjaW5jbHVkZSA8bGludXgvdWRwLmg+CisjaW5jbHVkZSA8bGludXgvaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bmV0L3NvY2suaD4KKyNpbmNsdWRlIDxuZXQvc25tcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisKKyNkZWZpbmUgVURQX0hUQUJMRV9TSVpFCQkxMjgKKworLyogdWRwLmM6IFRoaXMgbmVlZHMgdG8gYmUgc2hhcmVkIGJ5IHY0IGFuZCB2NiBiZWNhdXNlIHRoZSBsb29rdXAKKyAqICAgICAgICBhbmQgaGFzaGluZyBjb2RlIG5lZWRzIHRvIHdvcmsgd2l0aCBkaWZmZXJlbnQgQUYncyB5ZXQKKyAqICAgICAgICB0aGUgcG9ydCBzcGFjZSBpcyBzaGFyZWQuCisgKi8KK2V4dGVybiBzdHJ1Y3QgaGxpc3RfaGVhZCB1ZHBfaGFzaFtVRFBfSFRBQkxFX1NJWkVdOworZXh0ZXJuIHJ3bG9ja190IHVkcF9oYXNoX2xvY2s7CisKK2V4dGVybiBpbnQgdWRwX3BvcnRfcm92ZXI7CisKK3N0YXRpYyBpbmxpbmUgaW50IHVkcF9scG9ydF9pbnVzZSh1MTYgbnVtKQoreworCXN0cnVjdCBzb2NrICpzazsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKKworCXNrX2Zvcl9lYWNoKHNrLCBub2RlLCAmdWRwX2hhc2hbbnVtICYgKFVEUF9IVEFCTEVfU0laRSAtIDEpXSkKKwkJaWYgKGluZXRfc2soc2spLT5udW0gPT0gbnVtKQorCQkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKKy8qIE5vdGU6IHRoaXMgbXVzdCBtYXRjaCAndmFsYm9vbCcgaW4gc29ja19zZXRzb2Nrb3B0ICovCisjZGVmaW5lIFVEUF9DU1VNX05PWE1JVAkJMQorCisvKiBVc2VkIGJ5IFN1blJQQy94cHJ0IGxheWVyLiAqLworI2RlZmluZSBVRFBfQ1NVTV9OT1JDVgkJMgorCisvKiBEZWZhdWx0LCBhcyBwZXIgdGhlIFJGQywgaXMgdG8gYWx3YXlzIGRvIGNzdW1zLiAqLworI2RlZmluZSBVRFBfQ1NVTV9ERUZBVUxUCTAKKworZXh0ZXJuIHN0cnVjdCBwcm90byB1ZHBfcHJvdDsKKworCitleHRlcm4gdm9pZAl1ZHBfZXJyKHN0cnVjdCBza19idWZmICosIHUzMik7CisKK2V4dGVybiBpbnQJdWRwX3NlbmRtc2coc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3Qgc29jayAqc2ssCisJCQkgICAgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKTsKKworZXh0ZXJuIGludAl1ZHBfcmN2KHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludAl1ZHBfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CitleHRlcm4gaW50CXVkcF9kaXNjb25uZWN0KHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWdzKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgdWRwX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssCisJCQkgICAgIHBvbGxfdGFibGUgKndhaXQpOworCitERUNMQVJFX1NOTVBfU1RBVChzdHJ1Y3QgdWRwX21pYiwgdWRwX3N0YXRpc3RpY3MpOworI2RlZmluZSBVRFBfSU5DX1NUQVRTKGZpZWxkKQkJU05NUF9JTkNfU1RBVFModWRwX3N0YXRpc3RpY3MsIGZpZWxkKQorI2RlZmluZSBVRFBfSU5DX1NUQVRTX0JIKGZpZWxkKQkJU05NUF9JTkNfU1RBVFNfQkgodWRwX3N0YXRpc3RpY3MsIGZpZWxkKQorI2RlZmluZSBVRFBfSU5DX1NUQVRTX1VTRVIoZmllbGQpIAlTTk1QX0lOQ19TVEFUU19VU0VSKHVkcF9zdGF0aXN0aWNzLCBmaWVsZCkKKworLyogL3Byb2MgKi8KK3N0cnVjdCB1ZHBfc2VxX2FmaW5mbyB7CisJc3RydWN0IG1vZHVsZQkJKm93bmVyOworCWNoYXIJCQkqbmFtZTsKKwlzYV9mYW1pbHlfdAkJZmFtaWx5OworCWludCAJCQkoKnNlcV9zaG93KSAoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KTsKKwlzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zCSpzZXFfZm9wczsKK307CisKK3N0cnVjdCB1ZHBfaXRlcl9zdGF0ZSB7CisJc2FfZmFtaWx5X3QJCWZhbWlseTsKKwlpbnQJCQlidWNrZXQ7CisJc3RydWN0IHNlcV9vcGVyYXRpb25zCXNlcV9vcHM7Cit9OworCitleHRlcm4gaW50IHVkcF9wcm9jX3JlZ2lzdGVyKHN0cnVjdCB1ZHBfc2VxX2FmaW5mbyAqYWZpbmZvKTsKK2V4dGVybiB2b2lkIHVkcF9wcm9jX3VucmVnaXN0ZXIoc3RydWN0IHVkcF9zZXFfYWZpbmZvICphZmluZm8pOworI2VuZGlmCS8qIF9VRFBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQveDI1LmggYi9pbmNsdWRlL25ldC94MjUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTFiYTViCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQveDI1LmgKQEAgLTAsMCArMSwyNzMgQEAKKy8qCisgKglEZWNsYXJhdGlvbnMgb2YgWC4yNSBQYWNrZXQgTGF5ZXIgdHlwZSBvYmplY3RzLgorICoKKyAqIAlIaXN0b3J5CisgKglub3YvMTcvOTYJSm9uYXRoYW4gTmF5bG9yCSAgSW5pdGlhbCB2ZXJzaW9uLgkJCisgKgltYXIvMjAvMDAJRGFuaWVsYSBTcXVhc3NvbmkgRGlzYWJsaW5nL2VuYWJsaW5nIG9mIGZhY2lsaXRpZXMgCisgKgkJCQkJICBuZWdvdGlhdGlvbi4KKyAqLworCisjaWZuZGVmIF9YMjVfSAorI2RlZmluZSBfWDI1X0ggCisjaW5jbHVkZSA8bGludXgveDI1Lmg+CisjaW5jbHVkZSA8bmV0L3NvY2suaD4KKworI2RlZmluZQlYMjVfQUREUl9MRU4JCQkxNgorCisjZGVmaW5lCVgyNV9NQVhfTDJfTEVOCQkJMTgJLyogODAyLjIgTExDICovCisKKyNkZWZpbmUJWDI1X1NURF9NSU5fTEVOCQkJMworI2RlZmluZQlYMjVfRVhUX01JTl9MRU4JCQk0CisKKyNkZWZpbmUJWDI1X0dGSV9TRVFfTUFTSwkJMHgzMAorI2RlZmluZQlYMjVfR0ZJX1NURFNFUQkJCTB4MTAKKyNkZWZpbmUJWDI1X0dGSV9FWFRTRVEJCQkweDIwCisKKyNkZWZpbmUJWDI1X1FfQklUCQkJMHg4MAorI2RlZmluZQlYMjVfRF9CSVQJCQkweDQwCisjZGVmaW5lCVgyNV9TVERfTV9CSVQJCQkweDEwCisjZGVmaW5lCVgyNV9FWFRfTV9CSVQJCQkweDAxCisKKyNkZWZpbmUJWDI1X0NBTExfUkVRVUVTVAkJMHgwQgorI2RlZmluZQlYMjVfQ0FMTF9BQ0NFUFRFRAkJMHgwRgorI2RlZmluZQlYMjVfQ0xFQVJfUkVRVUVTVAkJMHgxMworI2RlZmluZQlYMjVfQ0xFQVJfQ09ORklSTUFUSU9OCQkweDE3CisjZGVmaW5lCVgyNV9EQVRBCQkJMHgwMAorI2RlZmluZQlYMjVfSU5URVJSVVBUCQkJMHgyMworI2RlZmluZQlYMjVfSU5URVJSVVBUX0NPTkZJUk1BVElPTgkweDI3CisjZGVmaW5lCVgyNV9SUgkJCQkweDAxCisjZGVmaW5lCVgyNV9STlIJCQkJMHgwNQorI2RlZmluZQlYMjVfUkVKCQkJCTB4MDkKKyNkZWZpbmUJWDI1X1JFU0VUX1JFUVVFU1QJCTB4MUIKKyNkZWZpbmUJWDI1X1JFU0VUX0NPTkZJUk1BVElPTgkJMHgxRgorI2RlZmluZQlYMjVfUkVHSVNUUkFUSU9OX1JFUVVFU1QJMHhGMworI2RlZmluZQlYMjVfUkVHSVNUUkFUSU9OX0NPTkZJUk1BVElPTgkweEY3CisjZGVmaW5lCVgyNV9SRVNUQVJUX1JFUVVFU1QJCTB4RkIKKyNkZWZpbmUJWDI1X1JFU1RBUlRfQ09ORklSTUFUSU9OCTB4RkYKKyNkZWZpbmUJWDI1X0RJQUdOT1NUSUMJCQkweEYxCisjZGVmaW5lCVgyNV9JTExFR0FMCQkJMHhGRAorCisvKiBEZWZpbmUgdGhlIHZhcmlvdXMgY29uZGl0aW9ucyB0aGF0IG1heSBleGlzdCAqLworCisjZGVmaW5lCVgyNV9DT05EX0FDS19QRU5ESU5HCTB4MDEKKyNkZWZpbmUJWDI1X0NPTkRfT1dOX1JYX0JVU1kJMHgwMgorI2RlZmluZQlYMjVfQ09ORF9QRUVSX1JYX0JVU1kJMHgwNAorCisvKiBEZWZpbmUgTGluayBTdGF0ZSBjb25zdGFudHMuICovCitlbnVtIHsKKwlYMjVfU1RBVEVfMCwJCS8qIFJlYWR5ICovCisJWDI1X1NUQVRFXzEsCQkvKiBBd2FpdGluZyBDYWxsIEFjY2VwdGVkICovCisJWDI1X1NUQVRFXzIsCQkvKiBBd2FpdGluZyBDbGVhciBDb25maXJtYXRpb24gKi8KKwlYMjVfU1RBVEVfMywJCS8qIERhdGEgVHJhbnNmZXIgKi8KKwlYMjVfU1RBVEVfNAkJLyogQXdhaXRpbmcgUmVzZXQgQ29uZmlybWF0aW9uICovCit9OworCitlbnVtIHsKKwlYMjVfTElOS19TVEFURV8wLAorCVgyNV9MSU5LX1NUQVRFXzEsCisJWDI1X0xJTktfU1RBVEVfMiwKKwlYMjVfTElOS19TVEFURV8zCit9OworCisjZGVmaW5lIFgyNV9ERUZBVUxUX1QyMAkJKDE4MCAqIEhaKQkJLyogRGVmYXVsdCBUMjAgdmFsdWUgKi8KKyNkZWZpbmUgWDI1X0RFRkFVTFRfVDIxCQkoMjAwICogSFopCQkvKiBEZWZhdWx0IFQyMSB2YWx1ZSAqLworI2RlZmluZSBYMjVfREVGQVVMVF9UMjIJCSgxODAgKiBIWikJCS8qIERlZmF1bHQgVDIyIHZhbHVlICovCisjZGVmaW5lCVgyNV9ERUZBVUxUX1QyMwkJKDE4MCAqIEhaKQkJLyogRGVmYXVsdCBUMjMgdmFsdWUgKi8KKyNkZWZpbmUJWDI1X0RFRkFVTFRfVDIJCSgzICAgKiBIWikJCS8qIERlZmF1bHQgYWNrIGhvbGRiYWNrIHZhbHVlICovCisKKyNkZWZpbmUJWDI1X0RFRkFVTFRfV0lORE9XX1NJWkUJMgkJCS8qIERlZmF1bHQgV2luZG93IFNpemUJKi8KKyNkZWZpbmUJWDI1X0RFRkFVTFRfUEFDS0VUX1NJWkUJWDI1X1BTMTI4CQkvKiBEZWZhdWx0IFBhY2tldCBTaXplICovCisjZGVmaW5lCVgyNV9ERUZBVUxUX1RIUk9VR0hQVVQJMHgwQQkJCS8qIERlYWZ1bHQgVGhyb3VnaHB1dCAqLworI2RlZmluZQlYMjVfREVGQVVMVF9SRVZFUlNFCTB4MDAJCQkvKiBEZWZhdWx0IFJldmVyc2UgQ2hhcmdpbmcgKi8KKworI2RlZmluZSBYMjVfU01PRFVMVVMgCQk4CisjZGVmaW5lCVgyNV9FTU9EVUxVUwkJMTI4CisKKy8qCisgKglYLjI1IEZhY2lsaXRpZXMgY29uc3RhbnRzLgorICovCisKKyNkZWZpbmUJWDI1X0ZBQ19DTEFTU19NQVNLCTB4QzAKKworI2RlZmluZQlYMjVfRkFDX0NMQVNTX0EJCTB4MDAKKyNkZWZpbmUJWDI1X0ZBQ19DTEFTU19CCQkweDQwCisjZGVmaW5lCVgyNV9GQUNfQ0xBU1NfQwkJMHg4MAorI2RlZmluZQlYMjVfRkFDX0NMQVNTX0QJCTB4QzAKKworI2RlZmluZQlYMjVfRkFDX1JFVkVSU0UJCTB4MDEKKyNkZWZpbmUJWDI1X0ZBQ19USFJPVUdIUFVUCTB4MDIKKyNkZWZpbmUJWDI1X0ZBQ19QQUNLRVRfU0laRQkweDQyCisjZGVmaW5lCVgyNV9GQUNfV0lORE9XX1NJWkUJMHg0MworCisjZGVmaW5lCVgyNV9NQVhfRkFDX0xFTgkJMjAJCS8qIFBsZW50eSB0byBzcGFyZSAqLworI2RlZmluZQlYMjVfTUFYX0NVRF9MRU4JCTEyOAorCisvKioKKyAqCXN0cnVjdCB4MjVfcm91dGUgLSB4MjUgcm91dGluZyBlbnRyeQorICoJQG5vZGUgLSBlbnRyeSBpbiB4MjVfbGlzdF9sb2NrCisgKglAYWRkcmVzcyAtIFN0YXJ0IG9mIGFkZHJlc3MgcmFuZ2UKKyAqCUBzaWdkaWdpdHMgLSBOdW1iZXIgb2Ygc2lnIGRpZ2l0cworICoJQGRldiAtIE1vcmUgdGhhbiBvbmUgZm9yIE1MUAorICoJQHJlZmNudCAtIHJlZmVyZW5jZSBjb3VudGVyCisgKi8KK3N0cnVjdCB4MjVfcm91dGUgeworCXN0cnVjdCBsaXN0X2hlYWQJbm9kZTsJCQorCXN0cnVjdCB4MjVfYWRkcmVzcwlhZGRyZXNzOworCXVuc2lnbmVkIGludAkJc2lnZGlnaXRzOworCXN0cnVjdCBuZXRfZGV2aWNlCSpkZXY7CisJYXRvbWljX3QJCXJlZmNudDsKK307CisKK3N0cnVjdCB4MjVfbmVpZ2ggeworCXN0cnVjdCBsaXN0X2hlYWQJbm9kZTsKKwlzdHJ1Y3QgbmV0X2RldmljZQkqZGV2OworCXVuc2lnbmVkIGludAkJc3RhdGU7CisJdW5zaWduZWQgaW50CQlleHRlbmRlZDsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkCXF1ZXVlOworCXVuc2lnbmVkIGxvbmcJCXQyMDsKKwlzdHJ1Y3QgdGltZXJfbGlzdAl0MjB0aW1lcjsKKwl1bnNpZ25lZCBsb25nCQlnbG9iYWxfZmFjaWxfbWFzazsKKwlhdG9taWNfdAkJcmVmY250OworfTsKKworc3RydWN0IHgyNV9zb2NrIHsKKwlzdHJ1Y3Qgc29jawkJc2s7CisJc3RydWN0IHgyNV9hZGRyZXNzCXNvdXJjZV9hZGRyLCBkZXN0X2FkZHI7CisJc3RydWN0IHgyNV9uZWlnaAkqbmVpZ2hib3VyOworCXVuc2lnbmVkIGludAkJbGNpOworCXVuc2lnbmVkIGNoYXIJCXN0YXRlLCBjb25kaXRpb24sIHFiaXRpbmNsLCBpbnRmbGFnOworCXVuc2lnbmVkIHNob3J0CQl2cywgdnIsIHZhLCB2bDsKKwl1bnNpZ25lZCBsb25nCQl0MiwgdDIxLCB0MjIsIHQyMzsKKwl1bnNpZ25lZCBzaG9ydAkJZnJhZ2xlbjsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkCWFja19xdWV1ZTsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkCWZyYWdtZW50X3F1ZXVlOworCXN0cnVjdCBza19idWZmX2hlYWQJaW50ZXJydXB0X2luX3F1ZXVlOworCXN0cnVjdCBza19idWZmX2hlYWQJaW50ZXJydXB0X291dF9xdWV1ZTsKKwlzdHJ1Y3QgdGltZXJfbGlzdAl0aW1lcjsKKwlzdHJ1Y3QgeDI1X2NhdXNlZGlhZwljYXVzZWRpYWc7CisJc3RydWN0IHgyNV9mYWNpbGl0aWVzCWZhY2lsaXRpZXM7CisJc3RydWN0IHgyNV9jYWxsdXNlcmRhdGEJY2FsbHVzZXJkYXRhOworCXVuc2lnbmVkIGxvbmcgCQl2Y19mYWNpbF9tYXNrOwkvKiBpbmNfY2FsbCBmYWNpbGl0aWVzIG1hc2sgKi8KK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHgyNV9zb2NrICp4MjVfc2soY29uc3Qgc3RydWN0IHNvY2sgKnNrKQoreworCXJldHVybiAoc3RydWN0IHgyNV9zb2NrICopc2s7Cit9CisKKy8qIGFmX3gyNS5jICovCitleHRlcm4gaW50ICBzeXNjdGxfeDI1X3Jlc3RhcnRfcmVxdWVzdF90aW1lb3V0OworZXh0ZXJuIGludCAgc3lzY3RsX3gyNV9jYWxsX3JlcXVlc3RfdGltZW91dDsKK2V4dGVybiBpbnQgIHN5c2N0bF94MjVfcmVzZXRfcmVxdWVzdF90aW1lb3V0OworZXh0ZXJuIGludCAgc3lzY3RsX3gyNV9jbGVhcl9yZXF1ZXN0X3RpbWVvdXQ7CitleHRlcm4gaW50ICBzeXNjdGxfeDI1X2Fja19ob2xkYmFja190aW1lb3V0OworCitleHRlcm4gaW50ICB4MjVfYWRkcl9udG9hKHVuc2lnbmVkIGNoYXIgKiwgc3RydWN0IHgyNV9hZGRyZXNzICosCisJCQkgIHN0cnVjdCB4MjVfYWRkcmVzcyAqKTsKK2V4dGVybiBpbnQgIHgyNV9hZGRyX2F0b24odW5zaWduZWQgY2hhciAqLCBzdHJ1Y3QgeDI1X2FkZHJlc3MgKiwKKwkJCSAgc3RydWN0IHgyNV9hZGRyZXNzICopOworZXh0ZXJuIHN0cnVjdCBzb2NrICp4MjVfZmluZF9zb2NrZXQodW5zaWduZWQgaW50LCBzdHJ1Y3QgeDI1X25laWdoICopOworZXh0ZXJuIHZvaWQgeDI1X2Rlc3Ryb3lfc29ja2V0KHN0cnVjdCBzb2NrICopOworZXh0ZXJuIGludCAgeDI1X3J4X2NhbGxfcmVxdWVzdChzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3QgeDI1X25laWdoICosIHVuc2lnbmVkIGludCk7CitleHRlcm4gdm9pZCB4MjVfa2lsbF9ieV9uZWlnaChzdHJ1Y3QgeDI1X25laWdoICopOworCisvKiB4MjVfZGV2LmMgKi8KK2V4dGVybiB2b2lkIHgyNV9zZW5kX2ZyYW1lKHN0cnVjdCBza19idWZmICosIHN0cnVjdCB4MjVfbmVpZ2ggKik7CitleHRlcm4gaW50ICB4MjVfbGFwYl9yZWNlaXZlX2ZyYW1lKHN0cnVjdCBza19idWZmICosIHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBwYWNrZXRfdHlwZSAqKTsKK2V4dGVybiB2b2lkIHgyNV9lc3RhYmxpc2hfbGluayhzdHJ1Y3QgeDI1X25laWdoICopOworZXh0ZXJuIHZvaWQgeDI1X3Rlcm1pbmF0ZV9saW5rKHN0cnVjdCB4MjVfbmVpZ2ggKik7CisKKy8qIHgyNV9mYWNpbGl0aWVzLmMgKi8KK2V4dGVybiBpbnQgIHgyNV9wYXJzZV9mYWNpbGl0aWVzKHN0cnVjdCBza19idWZmICosIHN0cnVjdCB4MjVfZmFjaWxpdGllcyAqLCB1bnNpZ25lZCBsb25nICopOworZXh0ZXJuIGludCAgeDI1X2NyZWF0ZV9mYWNpbGl0aWVzKHVuc2lnbmVkIGNoYXIgKiwgc3RydWN0IHgyNV9mYWNpbGl0aWVzICosIHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuIGludCAgeDI1X25lZ290aWF0ZV9mYWNpbGl0aWVzKHN0cnVjdCBza19idWZmICosIHN0cnVjdCBzb2NrICosIHN0cnVjdCB4MjVfZmFjaWxpdGllcyAqKTsKK2V4dGVybiB2b2lkIHgyNV9saW1pdF9mYWNpbGl0aWVzKHN0cnVjdCB4MjVfZmFjaWxpdGllcyAqLCBzdHJ1Y3QgeDI1X25laWdoICopOworCisvKiB4MjVfaW4uYyAqLworZXh0ZXJuIGludCAgeDI1X3Byb2Nlc3NfcnhfZnJhbWUoc3RydWN0IHNvY2sgKiwgc3RydWN0IHNrX2J1ZmYgKik7CitleHRlcm4gaW50ICB4MjVfYmFja2xvZ19yY3Yoc3RydWN0IHNvY2sgKiwgc3RydWN0IHNrX2J1ZmYgKik7CisKKy8qIHgyNV9saW5rLmMgKi8KK2V4dGVybiB2b2lkIHgyNV9saW5rX2NvbnRyb2woc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IHgyNV9uZWlnaCAqLCB1bnNpZ25lZCBzaG9ydCk7CitleHRlcm4gdm9pZCB4MjVfbGlua19kZXZpY2VfdXAoc3RydWN0IG5ldF9kZXZpY2UgKik7CitleHRlcm4gdm9pZCB4MjVfbGlua19kZXZpY2VfZG93bihzdHJ1Y3QgbmV0X2RldmljZSAqKTsKK2V4dGVybiB2b2lkIHgyNV9saW5rX2VzdGFibGlzaGVkKHN0cnVjdCB4MjVfbmVpZ2ggKik7CitleHRlcm4gdm9pZCB4MjVfbGlua190ZXJtaW5hdGVkKHN0cnVjdCB4MjVfbmVpZ2ggKik7CitleHRlcm4gdm9pZCB4MjVfdHJhbnNtaXRfY2xlYXJfcmVxdWVzdChzdHJ1Y3QgeDI1X25laWdoICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgY2hhcik7CitleHRlcm4gdm9pZCB4MjVfdHJhbnNtaXRfbGluayhzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3QgeDI1X25laWdoICopOworZXh0ZXJuIGludCAgeDI1X3N1YnNjcl9pb2N0bCh1bnNpZ25lZCBpbnQsIHZvaWQgX191c2VyICopOworZXh0ZXJuIHN0cnVjdCB4MjVfbmVpZ2ggKngyNV9nZXRfbmVpZ2goc3RydWN0IG5ldF9kZXZpY2UgKik7CitleHRlcm4gdm9pZCB4MjVfbGlua19mcmVlKHZvaWQpOworCisvKiB4MjVfbmVpZ2guYyAqLworc3RhdGljIF9faW5saW5lX18gdm9pZCB4MjVfbmVpZ2hfaG9sZChzdHJ1Y3QgeDI1X25laWdoICpuYikKK3sKKwlhdG9taWNfaW5jKCZuYi0+cmVmY250KTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCB4MjVfbmVpZ2hfcHV0KHN0cnVjdCB4MjVfbmVpZ2ggKm5iKQoreworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZuYi0+cmVmY250KSkKKwkJa2ZyZWUobmIpOworfQorCisvKiB4MjVfb3V0LmMgKi8KK2V4dGVybiAgaW50IHgyNV9vdXRwdXQoc3RydWN0IHNvY2sgKiwgc3RydWN0IHNrX2J1ZmYgKik7CitleHRlcm4gdm9pZCB4MjVfa2ljayhzdHJ1Y3Qgc29jayAqKTsKK2V4dGVybiB2b2lkIHgyNV9lbnF1aXJ5X3Jlc3BvbnNlKHN0cnVjdCBzb2NrICopOworCisvKiB4MjVfcm91dGUuYyAqLworZXh0ZXJuIHN0cnVjdCB4MjVfcm91dGUgKngyNV9nZXRfcm91dGUoc3RydWN0IHgyNV9hZGRyZXNzICphZGRyKTsKK2V4dGVybiBzdHJ1Y3QgbmV0X2RldmljZSAqeDI1X2Rldl9nZXQoY2hhciAqKTsKK2V4dGVybiB2b2lkIHgyNV9yb3V0ZV9kZXZpY2VfZG93bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK2V4dGVybiBpbnQgIHgyNV9yb3V0ZV9pb2N0bCh1bnNpZ25lZCBpbnQsIHZvaWQgX191c2VyICopOworZXh0ZXJuIHZvaWQgeDI1X3JvdXRlX2ZyZWUodm9pZCk7CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgeDI1X3JvdXRlX2hvbGQoc3RydWN0IHgyNV9yb3V0ZSAqcnQpCit7CisJYXRvbWljX2luYygmcnQtPnJlZmNudCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgeDI1X3JvdXRlX3B1dChzdHJ1Y3QgeDI1X3JvdXRlICpydCkKK3sKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmcnQtPnJlZmNudCkpCisJCWtmcmVlKHJ0KTsKK30KKworLyogeDI1X3N1YnIuYyAqLworZXh0ZXJuIHZvaWQgeDI1X2NsZWFyX3F1ZXVlcyhzdHJ1Y3Qgc29jayAqKTsKK2V4dGVybiB2b2lkIHgyNV9mcmFtZXNfYWNrZWQoc3RydWN0IHNvY2sgKiwgdW5zaWduZWQgc2hvcnQpOworZXh0ZXJuIHZvaWQgeDI1X3JlcXVldWVfZnJhbWVzKHN0cnVjdCBzb2NrICopOworZXh0ZXJuIGludCAgeDI1X3ZhbGlkYXRlX25yKHN0cnVjdCBzb2NrICosIHVuc2lnbmVkIHNob3J0KTsKK2V4dGVybiB2b2lkIHgyNV93cml0ZV9pbnRlcm5hbChzdHJ1Y3Qgc29jayAqLCBpbnQpOworZXh0ZXJuIGludCAgeDI1X2RlY29kZShzdHJ1Y3Qgc29jayAqLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBpbnQgKiwgaW50ICosIGludCAqLCBpbnQgKiwgaW50ICopOworZXh0ZXJuIHZvaWQgeDI1X2Rpc2Nvbm5lY3Qoc3RydWN0IHNvY2sgKiwgaW50LCB1bnNpZ25lZCBjaGFyLCB1bnNpZ25lZCBjaGFyKTsKK2V4dGVybiBpbnQgeDI1X2NoZWNrX2NhbGx1c2VyZGF0YShzdHJ1Y3QgeDI1X2NhbGx1c2VyZGF0YSAqLHN0cnVjdCB4MjVfY2FsbHVzZXJkYXRhICopOworCisvKiB4MjVfdGltZXIuYyAqLworZXh0ZXJuIHZvaWQgeDI1X3N0YXJ0X2hlYXJ0YmVhdChzdHJ1Y3Qgc29jayAqKTsKK2V4dGVybiB2b2lkIHgyNV9zdGFydF90MnRpbWVyKHN0cnVjdCBzb2NrICopOworZXh0ZXJuIHZvaWQgeDI1X3N0YXJ0X3QyMXRpbWVyKHN0cnVjdCBzb2NrICopOworZXh0ZXJuIHZvaWQgeDI1X3N0YXJ0X3QyMnRpbWVyKHN0cnVjdCBzb2NrICopOworZXh0ZXJuIHZvaWQgeDI1X3N0YXJ0X3QyM3RpbWVyKHN0cnVjdCBzb2NrICopOworZXh0ZXJuIHZvaWQgeDI1X3N0b3BfaGVhcnRiZWF0KHN0cnVjdCBzb2NrICopOworZXh0ZXJuIHZvaWQgeDI1X3N0b3BfdGltZXIoc3RydWN0IHNvY2sgKik7CitleHRlcm4gdW5zaWduZWQgbG9uZyB4MjVfZGlzcGxheV90aW1lcihzdHJ1Y3Qgc29jayAqKTsKK2V4dGVybiB2b2lkIHgyNV9jaGVja19yYnVmKHN0cnVjdCBzb2NrICopOworCisvKiBzeXNjdGxfbmV0X3gyNS5jICovCitleHRlcm4gdm9pZCB4MjVfcmVnaXN0ZXJfc3lzY3RsKHZvaWQpOworZXh0ZXJuIHZvaWQgeDI1X3VucmVnaXN0ZXJfc3lzY3RsKHZvaWQpOworc3RydWN0IHgyNV9za2JfY2IgeworCXVuc2lnbmVkIGZsYWdzOworfTsKKyNkZWZpbmUgWDI1X1NLQl9DQihzKSAoKHN0cnVjdCB4MjVfc2tiX2NiICopICgocyktPmNiKSkKKworZXh0ZXJuIHN0cnVjdCBobGlzdF9oZWFkIHgyNV9saXN0OworZXh0ZXJuIHJ3bG9ja190IHgyNV9saXN0X2xvY2s7CitleHRlcm4gc3RydWN0IGxpc3RfaGVhZCB4MjVfcm91dGVfbGlzdDsKK2V4dGVybiByd2xvY2tfdCB4MjVfcm91dGVfbGlzdF9sb2NrOworCitleHRlcm4gaW50IHgyNV9wcm9jX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCB4MjVfcHJvY19leGl0KHZvaWQpOworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC94MjVkZXZpY2UuaCBiL2luY2x1ZGUvbmV0L3gyNWRldmljZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmMzZhMjAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC94MjVkZXZpY2UuaApAQCAtMCwwICsxLDE3IEBACisjaWZuZGVmIF9YMjVERVZJQ0VfSAorI2RlZmluZSBfWDI1REVWSUNFX0gKKworI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CisjaW5jbHVkZSA8bGludXgvaWZfcGFja2V0Lmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgeDI1X3R5cGVfdHJhbnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc2tiLT5tYWMucmF3ID0gc2tiLT5kYXRhOworCXNrYi0+aW5wdXRfZGV2ID0gc2tiLT5kZXYgPSBkZXY7CisJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9IT1NUOworCQorCXJldHVybiBodG9ucyhFVEhfUF9YMjUpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC94ZnJtLmggYi9pbmNsdWRlL25ldC94ZnJtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNlOWE4YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L3hmcm0uaApAQCAtMCwwICsxLDkwNSBAQAorI2lmbmRlZiBfTkVUX1hGUk1fSAorI2RlZmluZSBfTkVUX1hGUk1fSAorCisjaW5jbHVkZSA8bGludXgveGZybS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgorI2luY2x1ZGUgPGxpbnV4L3Bma2V5djIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbjYuaD4KKworI2luY2x1ZGUgPG5ldC9zb2NrLmg+CisjaW5jbHVkZSA8bmV0L2RzdC5oPgorI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPgorI2luY2x1ZGUgPG5ldC9pcHY2Lmg+CisjaW5jbHVkZSA8bmV0L2lwNl9maWIuaD4KKworI2RlZmluZSBYRlJNX0FMSUdOOChsZW4pCSgoKGxlbikgKyA3KSAmIH43KQorCitleHRlcm4gc3RydWN0IHNlbWFwaG9yZSB4ZnJtX2NmZ19zZW07CisKKy8qIE9yZ2FuaXphdGlvbiBvZiBTUEQgYWthICJYRlJNIHJ1bGVzIgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgIEJhc2ljIG9iamVjdHM6CisgICAtIHBvbGljeSBydWxlLCBzdHJ1Y3QgeGZybV9wb2xpY3kgKD1TUEQgZW50cnkpCisgICAtIGJ1bmRsZSBvZiB0cmFuc2Zvcm1hdGlvbnMsIHN0cnVjdCBkc3RfZW50cnkgPT0gc3RydWN0IHhmcm1fZHN0ICg9U0EgYnVuZGxlKQorICAgLSBpbnN0YW5jZSBvZiBhIHRyYW5zZm9ybWVyLCBzdHJ1Y3QgeGZybV9zdGF0ZSAoPVNBKQorICAgLSB0ZW1wbGF0ZSB0byBjbG9uZSB4ZnJtX3N0YXRlLCBzdHJ1Y3QgeGZybV90bXBsCisKKyAgIFNQRCBpcyBwbGFpbiBsaW5lYXIgbGlzdCBvZiB4ZnJtX3BvbGljeSBydWxlcywgb3JkZXJlZCBieSBwcmlvcml0eS4KKyAgIChUbyBiZSBjb21wYXRpYmxlIHdpdGggZXhpc3RpbmcgcGZrZXl2MiBpbXBsZW1lbnRhdGlvbnMsCisgICBtYW55IHJ1bGVzIHdpdGggcHJpb3JpdHkgb2YgMHg3ZmZmZmZmZiBhcmUgYWxsb3dlZCB0byBleGlzdCBhbmQKKyAgIHN1Y2ggcnVsZXMgYXJlIG9yZGVyZWQgaW4gYW4gdW5wcmVkaWN0YWJsZSB3YXksIHRoYW5rcyB0byBic2QgZm9sa3MuKQorCisgICBMb29rdXAgaXMgcGxhaW4gbGluZWFyIHNlYXJjaCB1bnRpbCB0aGUgZmlyc3QgbWF0Y2ggd2l0aCBzZWxlY3Rvci4KKworICAgSWYgImFjdGlvbiIgaXMgImJsb2NrIiwgdGhlbiB3ZSBwcm9oaWJpdCB0aGUgZmxvdywgb3RoZXJ3aXNlOgorICAgaWYgInhmcm1zX25yIiBpcyB6ZXJvLCB0aGUgZmxvdyBwYXNzZXMgdW50cmFuc2Zvcm1lZC4gT3RoZXJ3aXNlLAorICAgcG9saWN5IGVudHJ5IGhhcyBsaXN0IG9mIHVwIHRvIFhGUk1fTUFYX0RFUFRIIHRyYW5zZm9ybWF0aW9ucywKKyAgIGRlc2NyaWJlZCBieSB0ZW1wbGF0ZXMgeGZybV90bXBsLiBFYWNoIHRlbXBsYXRlIGlzIHJlc29sdmVkCisgICB0byBhIGNvbXBsZXRlIHhmcm1fc3RhdGUgKHNlZSBiZWxvdykgYW5kIHdlIHBhY2sgYnVuZGxlIG9mIHRyYW5zZm9ybWF0aW9ucworICAgdG8gYSBkc3RfZW50cnkgcmV0dXJuZWQgdG8gcmVxdWVzdG9yLgorCisgICBkc3QgLS4geGZybSAgLi0+IHhmcm1fc3RhdGUgIzEKKyAgICB8LS0tLiBjaGlsZCAuLT4gZHN0IC0uIHhmcm0gLi0+IHhmcm1fc3RhdGUgIzIKKyAgICAgICAgICAgICAgICAgICAgIHwtLS0uIGNoaWxkIC4tPiBkc3QgLS4geGZybSAuLT4geGZybV9zdGF0ZSAjMworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8LS0tLiBjaGlsZCAuLT4gTlVMTAorCisgICBCdW5kbGVzIGFyZSBjYWNoZWQgYXQgeHJmbV9wb2xpY3kgc3RydWN0IChmaWVsZCAtPmJ1bmRsZXMpLgorCisKKyAgIFJlc29sdXRpb24gb2YgeHJmbV90bXBsCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgVGVtcGxhdGUgY29udGFpbnM6CisgICAxLiAtPm1vZGUJCU1vZGU6IHRyYW5zcG9ydCBvciB0dW5uZWwKKyAgIDIuIC0+aWQucHJvdG8JUHJvdG9jb2w6IEFIL0VTUC9JUENPTVAKKyAgIDMuIC0+aWQuZGFkZHIJUmVtb3RlIHR1bm5lbCBlbmRwb2ludCwgaWdub3JlZCBmb3IgdHJhbnNwb3J0IG1vZGUuCisgICAgICBROiBhbGxvdyB0byByZXNvbHZlIHNlY3VyaXR5IGdhdGV3YXk/CisgICA0LiAtPmlkLnNwaSAgICAgICAgICBJZiBub3QgemVybywgc3RhdGljIFNQSS4KKyAgIDUuIC0+c2FkZHIJCUxvY2FsIHR1bm5lbCBlbmRwb2ludCwgaWdub3JlZCBmb3IgdHJhbnNwb3J0IG1vZGUuCisgICA2LiAtPmFsZ29zCQlMaXN0IG9mIGFsbG93ZWQgYWxnb3MuIFBsYWluIGJpdG1hc2sgbm93LgorICAgICAgUTogZWFsZ29zLCBhYWxnb3MsIGNhbGdvcy4gV2hhdCBhIG1lc3MuLi4KKyAgIDcuIC0+c2hhcmUJCVNoYXJpbmcgbW9kZS4KKyAgICAgIFE6IGhvdyB0byBpbXBsZW1lbnQgcHJpdmF0ZSBzaGFyaW5nIG1vZGU/IFRvIGFkZCBzdHJ1Y3Qgc29jayogdG8KKyAgICAgIGZsb3cgaWQ/CisKKyAgIEhhdmluZyB0aGlzIHRlbXBsYXRlIHdlIHNlYXJjaCB0aHJvdWdoIFNBRCBzZWFyY2hpbmcgZm9yIGVudHJpZXMKKyAgIHdpdGggYXBwcm9wcmlhdGUgbW9kZS9wcm90by9hbGdvLCBwZXJtaXR0ZWQgYnkgc2VsZWN0b3IuCisgICBJZiBubyBhcHByb3ByaWF0ZSBlbnRyeSBmb3VuZCwgaXQgaXMgcmVxdWVzdGVkIGZyb20ga2V5IG1hbmFnZXIuCisKKyAgIFBST0JMRU1TOgorICAgUTogSG93IHRvIGZpbmQgYWxsIHRoZSBidW5kbGVzIHJlZmVycmluZyB0byBhIHBoeXNpY2FsIHBhdGggZm9yCisgICAgICBQTVRVIGRpc2NvdmVyeT8gU2VlbXMsIGRzdCBzaG91bGQgY29udGFpbiBsaXN0IG9mIGFsbCBwYXJlbnRzLi4uCisgICAgICBhbmQgZW50ZXIgdG8gaW5maW5pdGUgbG9ja2luZyBoaWVyYXJjaHkgZGlzYXN0ZXIuCisgICAgICBObyEgSXQgaXMgZWFzaWVyLCB3ZSB3aWxsIG5vdCBzZWFyY2ggZm9yIHRoZW0sIGxldCB0aGVtIGZpbmQgdXMuCisgICAgICBXZSBhZGQgZ2VuaWQgdG8gZWFjaCBkc3QgcGx1cyBwb2ludGVyIHRvIGdlbmlkIG9mIHJhdyBJUCByb3V0ZSwKKyAgICAgIHBtdHUgZGlzYyB3aWxsIHVwZGF0ZSBwbXR1IG9uIHJhdyBJUCByb3V0ZSBhbmQgaW5jcmVhc2UgaXRzIGdlbmlkLgorICAgICAgZHN0X2NoZWNrKCkgd2lsbCBzZWUgdGhpcyBmb3IgdG9wIGxldmVsIGFuZCB0cmlnZ2VyIHJlc3luY2luZworICAgICAgbWV0cmljcy4gUGx1cywgaXQgd2lsbCBiZSBtYWRlIHZpYSBzay0+c2tfZHN0X2NhY2hlLiBTb2x2ZWQuCisgKi8KKworLyogRnVsbCBkZXNjcmlwdGlvbiBvZiBzdGF0ZSBvZiB0cmFuc2Zvcm1lci4gKi8KK3N0cnVjdCB4ZnJtX3N0YXRlCit7CisJLyogTm90ZTogYnlkc3QgaXMgcmUtdXNlZCBkdXJpbmcgZ2MgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCWJ5ZHN0OworCXN0cnVjdCBsaXN0X2hlYWQJYnlzcGk7CisKKwlhdG9taWNfdAkJcmVmY250OworCXNwaW5sb2NrX3QJCWxvY2s7CisKKwlzdHJ1Y3QgeGZybV9pZAkJaWQ7CisJc3RydWN0IHhmcm1fc2VsZWN0b3IJc2VsOworCisJLyogS2V5IG1hbmdlciBiaXRzICovCisJc3RydWN0IHsKKwkJdTgJCXN0YXRlOworCQl1OAkJZHlpbmc7CisJCXUzMgkJc2VxOworCX0ga207CisKKwkvKiBQYXJhbWV0ZXJzIG9mIHRoaXMgc3RhdGUuICovCisJc3RydWN0IHsKKwkJdTMyCQlyZXFpZDsKKwkJdTgJCW1vZGU7CisJCXU4CQlyZXBsYXlfd2luZG93OworCQl1OAkJYWFsZ28sIGVhbGdvLCBjYWxnbzsKKwkJdTgJCWZsYWdzOworCQl1MTYJCWZhbWlseTsKKwkJeGZybV9hZGRyZXNzX3QJc2FkZHI7CisJCWludAkJaGVhZGVyX2xlbjsKKwkJaW50CQl0cmFpbGVyX2xlbjsKKwl9IHByb3BzOworCisJc3RydWN0IHhmcm1fbGlmZXRpbWVfY2ZnIGxmdDsKKworCS8qIERhdGEgZm9yIHRyYW5zZm9ybWVyICovCisJc3RydWN0IHhmcm1fYWxnbwkqYWFsZzsKKwlzdHJ1Y3QgeGZybV9hbGdvCSplYWxnOworCXN0cnVjdCB4ZnJtX2FsZ28JKmNhbGc7CisKKwkvKiBEYXRhIGZvciBlbmNhcHN1bGF0b3IgKi8KKwlzdHJ1Y3QgeGZybV9lbmNhcF90bXBsCSplbmNhcDsKKworCS8qIElQQ29tcCBuZWVkcyBhbiBJUElQIHR1bm5lbCBmb3IgaGFuZGxpbmcgdW5jb21wcmVzc2VkIHBhY2tldHMgKi8KKwlzdHJ1Y3QgeGZybV9zdGF0ZQkqdHVubmVsOworCisJLyogSWYgYSB0dW5uZWwsIG51bWJlciBvZiB1c2VycyArIDEgKi8KKwlhdG9taWNfdAkJdHVubmVsX3VzZXJzOworCisJLyogU3RhdGUgZm9yIHJlcGxheSBkZXRlY3Rpb24gKi8KKwlzdHJ1Y3QgeGZybV9yZXBsYXlfc3RhdGUgcmVwbGF5OworCisJLyogU3RhdGlzdGljcyAqLworCXN0cnVjdCB4ZnJtX3N0YXRzCXN0YXRzOworCisJc3RydWN0IHhmcm1fbGlmZXRpbWVfY3VyIGN1cmxmdDsKKwlzdHJ1Y3QgdGltZXJfbGlzdAl0aW1lcjsKKworCS8qIFJlZmVyZW5jZSB0byBkYXRhIGNvbW1vbiB0byBhbGwgdGhlIGluc3RhbmNlcyBvZiB0aGlzCisJICogdHJhbnNmb3JtZXIuICovCisJc3RydWN0IHhmcm1fdHlwZQkqdHlwZTsKKworCS8qIFByaXZhdGUgZGF0YSBvZiB0aGlzIHRyYW5zZm9ybWVyLCBmb3JtYXQgaXMgb3BhcXVlLAorCSAqIGludGVycHJldGVkIGJ5IHhmcm1fdHlwZSBtZXRob2RzLiAqLworCXZvaWQJCQkqZGF0YTsKK307CisKK2VudW0geworCVhGUk1fU1RBVEVfVk9JRCwKKwlYRlJNX1NUQVRFX0FDUSwKKwlYRlJNX1NUQVRFX1ZBTElELAorCVhGUk1fU1RBVEVfRVJST1IsCisJWEZSTV9TVEFURV9FWFBJUkVELAorCVhGUk1fU1RBVEVfREVBRAorfTsKKworc3RydWN0IHhmcm1fdHlwZTsKK3N0cnVjdCB4ZnJtX2RzdDsKK3N0cnVjdCB4ZnJtX3BvbGljeV9hZmluZm8geworCXVuc2lnbmVkIHNob3J0CQlmYW1pbHk7CisJcndsb2NrX3QJCWxvY2s7CisJc3RydWN0IHhmcm1fdHlwZV9tYXAJKnR5cGVfbWFwOworCXN0cnVjdCBkc3Rfb3BzCQkqZHN0X29wczsKKwl2b2lkCQkJKCpnYXJiYWdlX2NvbGxlY3QpKHZvaWQpOworCWludAkJCSgqZHN0X2xvb2t1cCkoc3RydWN0IHhmcm1fZHN0ICoqZHN0LCBzdHJ1Y3QgZmxvd2kgKmZsKTsKKwlzdHJ1Y3QgZHN0X2VudHJ5CSooKmZpbmRfYnVuZGxlKShzdHJ1Y3QgZmxvd2kgKmZsLCBzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbGljeSk7CisJaW50CQkJKCpidW5kbGVfY3JlYXRlKShzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbGljeSwgCisJCQkJCQkgc3RydWN0IHhmcm1fc3RhdGUgKip4ZnJtLCAKKwkJCQkJCSBpbnQgbngsCisJCQkJCQkgc3RydWN0IGZsb3dpICpmbCwgCisJCQkJCQkgc3RydWN0IGRzdF9lbnRyeSAqKmRzdF9wKTsKKwl2b2lkCQkJKCpkZWNvZGVfc2Vzc2lvbikoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJCSAgc3RydWN0IGZsb3dpICpmbCk7Cit9OworCitleHRlcm4gaW50IHhmcm1fcG9saWN5X3JlZ2lzdGVyX2FmaW5mbyhzdHJ1Y3QgeGZybV9wb2xpY3lfYWZpbmZvICphZmluZm8pOworZXh0ZXJuIGludCB4ZnJtX3BvbGljeV91bnJlZ2lzdGVyX2FmaW5mbyhzdHJ1Y3QgeGZybV9wb2xpY3lfYWZpbmZvICphZmluZm8pOworCisjZGVmaW5lIFhGUk1fQUNRX0VYUElSRVMJMzAKKworc3RydWN0IHhmcm1fdG1wbDsKK3N0cnVjdCB4ZnJtX3N0YXRlX2FmaW5mbyB7CisJdW5zaWduZWQgc2hvcnQJCWZhbWlseTsKKwlyd2xvY2tfdAkJbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkCSpzdGF0ZV9ieWRzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCSpzdGF0ZV9ieXNwaTsKKwl2b2lkCQkJKCppbml0X3RlbXBzZWwpKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3QgZmxvd2kgKmZsLAorCQkJCQkJc3RydWN0IHhmcm1fdG1wbCAqdG1wbCwKKwkJCQkJCXhmcm1fYWRkcmVzc190ICpkYWRkciwgeGZybV9hZGRyZXNzX3QgKnNhZGRyKTsKKwlzdHJ1Y3QgeGZybV9zdGF0ZQkqKCpzdGF0ZV9sb29rdXApKHhmcm1fYWRkcmVzc190ICpkYWRkciwgdTMyIHNwaSwgdTggcHJvdG8pOworCXN0cnVjdCB4ZnJtX3N0YXRlCSooKmZpbmRfYWNxKSh1OCBtb2RlLCB1MzIgcmVxaWQsIHU4IHByb3RvLCAKKwkJCQkJICAgICB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsIHhmcm1fYWRkcmVzc190ICpzYWRkciwgCisJCQkJCSAgICAgaW50IGNyZWF0ZSk7Cit9OworCitleHRlcm4gaW50IHhmcm1fc3RhdGVfcmVnaXN0ZXJfYWZpbmZvKHN0cnVjdCB4ZnJtX3N0YXRlX2FmaW5mbyAqYWZpbmZvKTsKK2V4dGVybiBpbnQgeGZybV9zdGF0ZV91bnJlZ2lzdGVyX2FmaW5mbyhzdHJ1Y3QgeGZybV9zdGF0ZV9hZmluZm8gKmFmaW5mbyk7CisKK2V4dGVybiB2b2lkIHhmcm1fc3RhdGVfZGVsZXRlX3R1bm5lbChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCk7CisKK3N0cnVjdCB4ZnJtX2RlY2FwX3N0YXRlOworc3RydWN0IHhmcm1fdHlwZQoreworCWNoYXIJCQkqZGVzY3JpcHRpb247CisJc3RydWN0IG1vZHVsZQkJKm93bmVyOworCV9fdTgJCQlwcm90bzsKKworCWludAkJCSgqaW5pdF9zdGF0ZSkoc3RydWN0IHhmcm1fc3RhdGUgKngsIHZvaWQgKmFyZ3MpOworCXZvaWQJCQkoKmRlc3RydWN0b3IpKHN0cnVjdCB4ZnJtX3N0YXRlICopOworCWludAkJCSgqaW5wdXQpKHN0cnVjdCB4ZnJtX3N0YXRlICosIHN0cnVjdCB4ZnJtX2RlY2FwX3N0YXRlICosIHN0cnVjdCBza19idWZmICpza2IpOworCWludAkJCSgqcG9zdF9pbnB1dCkoc3RydWN0IHhmcm1fc3RhdGUgKiwgc3RydWN0IHhmcm1fZGVjYXBfc3RhdGUgKiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisJaW50CQkJKCpvdXRwdXQpKHN0cnVjdCB4ZnJtX3N0YXRlICosIHN0cnVjdCBza19idWZmICpwc2tiKTsKKwkvKiBFc3RpbWF0ZSBtYXhpbWFsIHNpemUgb2YgcmVzdWx0IG9mIHRyYW5zZm9ybWF0aW9uIG9mIGEgZGdyYW0gKi8KKwl1MzIJCQkoKmdldF9tYXhfc2l6ZSkoc3RydWN0IHhmcm1fc3RhdGUgKiwgaW50IHNpemUpOworfTsKKworc3RydWN0IHhmcm1fdHlwZV9tYXAgeworCXJ3bG9ja190CQlsb2NrOworCXN0cnVjdCB4ZnJtX3R5cGUJKm1hcFsyNTZdOworfTsKKworZXh0ZXJuIGludCB4ZnJtX3JlZ2lzdGVyX3R5cGUoc3RydWN0IHhmcm1fdHlwZSAqdHlwZSwgdW5zaWduZWQgc2hvcnQgZmFtaWx5KTsKK2V4dGVybiBpbnQgeGZybV91bnJlZ2lzdGVyX3R5cGUoc3RydWN0IHhmcm1fdHlwZSAqdHlwZSwgdW5zaWduZWQgc2hvcnQgZmFtaWx5KTsKK2V4dGVybiBzdHJ1Y3QgeGZybV90eXBlICp4ZnJtX2dldF90eXBlKHU4IHByb3RvLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpOworZXh0ZXJuIHZvaWQgeGZybV9wdXRfdHlwZShzdHJ1Y3QgeGZybV90eXBlICp0eXBlKTsKKworc3RydWN0IHhmcm1fdG1wbAoreworLyogaWQgaW4gdGVtcGxhdGUgaXMgaW50ZXJwcmV0ZWQgYXM6CisgKiBkYWRkciAtIGRlc3RpbmF0aW9uIG9mIHR1bm5lbCwgbWF5IGJlIHplcm8gZm9yIHRyYW5zcG9ydCBtb2RlLgorICogc3BpICAgLSB6ZXJvIHRvIGFjcXVpcmUgc3BpLiBOb3QgemVybyBpZiBzcGkgaXMgc3RhdGljLCB0aGVuCisgKgkgICBkYWRkciBtdXN0IGJlIGZpeGVkIHRvby4KKyAqIHByb3RvIC0gQUgvRVNQL0lQQ09NUAorICovCisJc3RydWN0IHhmcm1faWQJCWlkOworCisvKiBTb3VyY2UgYWRkcmVzcyBvZiB0dW5uZWwuIElnbm9yZWQsIGlmIGl0IGlzIG5vdCBhIHR1bm5lbC4gKi8KKwl4ZnJtX2FkZHJlc3NfdAkJc2FkZHI7CisKKwlfX3UzMgkJCXJlcWlkOworCisvKiBNb2RlOiB0cmFuc3BvcnQvdHVubmVsICovCisJX191OAkJCW1vZGU7CisKKy8qIFNoYXJpbmcgbW9kZTogdW5pcXVlLCB0aGlzIHNlc3Npb24gb25seSwgdGhpcyB1c2VyIG9ubHkgZXRjLiAqLworCV9fdTgJCQlzaGFyZTsKKworLyogTWF5IHNraXAgdGhpcyB0cmFuc2ZvbXJhdGlvbiBpZiBubyBTQSBpcyBmb3VuZCAqLworCV9fdTgJCQlvcHRpb25hbDsKKworLyogQml0IG1hc2sgb2YgYWxnb3MgYWxsb3dlZCBmb3IgYWNxdWlzaXRpb24gKi8KKwlfX3UzMgkJCWFhbGdvczsKKwlfX3UzMgkJCWVhbGdvczsKKwlfX3UzMgkJCWNhbGdvczsKK307CisKKyNkZWZpbmUgWEZSTV9NQVhfREVQVEgJCTQKKworc3RydWN0IHhmcm1fcG9saWN5Cit7CisJc3RydWN0IHhmcm1fcG9saWN5CSpuZXh0OworCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKKworCS8qIFRoaXMgbG9jayBvbmx5IGFmZmVjdHMgZWxlbWVudHMgZXhjZXB0IGZvciBlbnRyeS4gKi8KKwlyd2xvY2tfdAkJbG9jazsKKwlhdG9taWNfdAkJcmVmY250OworCXN0cnVjdCB0aW1lcl9saXN0CXRpbWVyOworCisJdTMyCQkJcHJpb3JpdHk7CisJdTMyCQkJaW5kZXg7CisJc3RydWN0IHhmcm1fc2VsZWN0b3IJc2VsZWN0b3I7CisJc3RydWN0IHhmcm1fbGlmZXRpbWVfY2ZnIGxmdDsKKwlzdHJ1Y3QgeGZybV9saWZldGltZV9jdXIgY3VybGZ0OworCXN0cnVjdCBkc3RfZW50cnkgICAgICAgKmJ1bmRsZXM7CisJX191MTYJCQlmYW1pbHk7CisJX191OAkJCWFjdGlvbjsKKwlfX3U4CQkJZmxhZ3M7CisJX191OAkJCWRlYWQ7CisJX191OAkJCXhmcm1fbnI7CisJc3RydWN0IHhmcm1fdG1wbCAgICAgICAJeGZybV92ZWNbWEZSTV9NQVhfREVQVEhdOworfTsKKworI2RlZmluZSBYRlJNX0tNX1RJTUVPVVQJCTMwCisKK3N0cnVjdCB4ZnJtX21ncgoreworCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKKwljaGFyCQkJKmlkOworCWludAkJCSgqbm90aWZ5KShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgaW50IGV2ZW50KTsKKwlpbnQJCQkoKmFjcXVpcmUpKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3QgeGZybV90bXBsICosIHN0cnVjdCB4ZnJtX3BvbGljeSAqeHAsIGludCBkaXIpOworCXN0cnVjdCB4ZnJtX3BvbGljeQkqKCpjb21waWxlX3BvbGljeSkodTE2IGZhbWlseSwgaW50IG9wdCwgdTggKmRhdGEsIGludCBsZW4sIGludCAqZGlyKTsKKwlpbnQJCQkoKm5ld19tYXBwaW5nKShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgeGZybV9hZGRyZXNzX3QgKmlwYWRkciwgdTE2IHNwb3J0KTsKKwlpbnQJCQkoKm5vdGlmeV9wb2xpY3kpKHN0cnVjdCB4ZnJtX3BvbGljeSAqeCwgaW50IGRpciwgaW50IGV2ZW50KTsKK307CisKK2V4dGVybiBpbnQgeGZybV9yZWdpc3Rlcl9rbShzdHJ1Y3QgeGZybV9tZ3IgKmttKTsKK2V4dGVybiBpbnQgeGZybV91bnJlZ2lzdGVyX2ttKHN0cnVjdCB4ZnJtX21nciAqa20pOworCisKK2V4dGVybiBzdHJ1Y3QgeGZybV9wb2xpY3kgKnhmcm1fcG9saWN5X2xpc3RbWEZSTV9QT0xJQ1lfTUFYKjJdOworCitzdGF0aWMgaW5saW5lIHZvaWQgeGZybV9wb2xfaG9sZChzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbGljeSkKK3sKKwlpZiAobGlrZWx5KHBvbGljeSAhPSBOVUxMKSkKKwkJYXRvbWljX2luYygmcG9saWN5LT5yZWZjbnQpOworfQorCitleHRlcm4gdm9pZCBfX3hmcm1fcG9saWN5X2Rlc3Ryb3koc3RydWN0IHhmcm1fcG9saWN5ICpwb2xpY3kpOworCitzdGF0aWMgaW5saW5lIHZvaWQgeGZybV9wb2xfcHV0KHN0cnVjdCB4ZnJtX3BvbGljeSAqcG9saWN5KQoreworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZwb2xpY3ktPnJlZmNudCkpCisJCV9feGZybV9wb2xpY3lfZGVzdHJveShwb2xpY3kpOworfQorCisjZGVmaW5lIFhGUk1fRFNUX0hTSVpFCQkxMDI0CisKK3N0YXRpYyBfX2lubGluZV9fCit1bnNpZ25lZCBfX3hmcm00X2RzdF9oYXNoKHhmcm1fYWRkcmVzc190ICphZGRyKQoreworCXVuc2lnbmVkIGg7CisJaCA9IG50b2hsKGFkZHItPmE0KTsKKwloID0gKGggXiAoaD4+MTYpKSAlIFhGUk1fRFNUX0hTSVpFOworCXJldHVybiBoOworfQorCitzdGF0aWMgX19pbmxpbmVfXwordW5zaWduZWQgX194ZnJtNl9kc3RfaGFzaCh4ZnJtX2FkZHJlc3NfdCAqYWRkcikKK3sKKwl1bnNpZ25lZCBoOworCWggPSBudG9obChhZGRyLT5hNlsyXV5hZGRyLT5hNlszXSk7CisJaCA9IChoIF4gKGg+PjE2KSkgJSBYRlJNX0RTVF9IU0laRTsKKwlyZXR1cm4gaDsKK30KKworc3RhdGljIF9faW5saW5lX18KK3Vuc2lnbmVkIHhmcm1fZHN0X2hhc2goeGZybV9hZGRyZXNzX3QgKmFkZHIsIHVuc2lnbmVkIHNob3J0IGZhbWlseSkKK3sKKwlzd2l0Y2ggKGZhbWlseSkgeworCWNhc2UgQUZfSU5FVDoKKwkJcmV0dXJuIF9feGZybTRfZHN0X2hhc2goYWRkcik7CisJY2FzZSBBRl9JTkVUNjoKKwkJcmV0dXJuIF9feGZybTZfZHN0X2hhc2goYWRkcik7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgX19pbmxpbmVfXwordW5zaWduZWQgX194ZnJtNF9zcGlfaGFzaCh4ZnJtX2FkZHJlc3NfdCAqYWRkciwgdTMyIHNwaSwgdTggcHJvdG8pCit7CisJdW5zaWduZWQgaDsKKwloID0gbnRvaGwoYWRkci0+YTRec3BpXnByb3RvKTsKKwloID0gKGggXiAoaD4+MTApIF4gKGg+PjIwKSkgJSBYRlJNX0RTVF9IU0laRTsKKwlyZXR1cm4gaDsKK30KKworc3RhdGljIF9faW5saW5lX18KK3Vuc2lnbmVkIF9feGZybTZfc3BpX2hhc2goeGZybV9hZGRyZXNzX3QgKmFkZHIsIHUzMiBzcGksIHU4IHByb3RvKQoreworCXVuc2lnbmVkIGg7CisJaCA9IG50b2hsKGFkZHItPmE2WzJdXmFkZHItPmE2WzNdXnNwaV5wcm90byk7CisJaCA9IChoIF4gKGg+PjEwKSBeIChoPj4yMCkpICUgWEZSTV9EU1RfSFNJWkU7CisJcmV0dXJuIGg7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fCit1bnNpZ25lZCB4ZnJtX3NwaV9oYXNoKHhmcm1fYWRkcmVzc190ICphZGRyLCB1MzIgc3BpLCB1OCBwcm90bywgdW5zaWduZWQgc2hvcnQgZmFtaWx5KQoreworCXN3aXRjaCAoZmFtaWx5KSB7CisJY2FzZSBBRl9JTkVUOgorCQlyZXR1cm4gX194ZnJtNF9zcGlfaGFzaChhZGRyLCBzcGksIHByb3RvKTsKKwljYXNlIEFGX0lORVQ2OgorCQlyZXR1cm4gX194ZnJtNl9zcGlfaGFzaChhZGRyLCBzcGksIHByb3RvKTsKKwl9CisJcmV0dXJuIDA7CS8qWFhYKi8KK30KKworZXh0ZXJuIHZvaWQgX194ZnJtX3N0YXRlX2Rlc3Ryb3koc3RydWN0IHhmcm1fc3RhdGUgKik7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB4ZnJtX3N0YXRlX3B1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCkKK3sKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmeC0+cmVmY250KSkKKwkJX194ZnJtX3N0YXRlX2Rlc3Ryb3koeCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB4ZnJtX3N0YXRlX2hvbGQoc3RydWN0IHhmcm1fc3RhdGUgKngpCit7CisJYXRvbWljX2luYygmeC0+cmVmY250KTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IGFkZHJfbWF0Y2godm9pZCAqdG9rZW4xLCB2b2lkICp0b2tlbjIsIGludCBwcmVmaXhsZW4pCit7CisJX191MzIgKmExID0gdG9rZW4xOworCV9fdTMyICphMiA9IHRva2VuMjsKKwlpbnQgcGR3OworCWludCBwYmk7CisKKwlwZHcgPSBwcmVmaXhsZW4gPj4gNTsJICAvKiBudW0gb2Ygd2hvbGUgX191MzIgaW4gcHJlZml4ICovCisJcGJpID0gcHJlZml4bGVuICYgIDB4MWY7ICAvKiBudW0gb2YgYml0cyBpbiBpbmNvbXBsZXRlIHUzMiBpbiBwcmVmaXggKi8KKworCWlmIChwZHcpCisJCWlmIChtZW1jbXAoYTEsIGEyLCBwZHcgPDwgMikpCisJCQlyZXR1cm4gMDsKKworCWlmIChwYmkpIHsKKwkJX191MzIgbWFzazsKKworCQltYXNrID0gaHRvbmwoKDB4ZmZmZmZmZmYpIDw8ICgzMiAtIHBiaSkpOworCisJCWlmICgoYTFbcGR3XSBeIGEyW3Bkd10pICYgbWFzaykKKwkJCXJldHVybiAwOworCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgX19pbmxpbmVfXwordTE2IHhmcm1fZmxvd2lfc3BvcnQoc3RydWN0IGZsb3dpICpmbCkKK3sKKwl1MTYgcG9ydDsKKwlzd2l0Y2goZmwtPnByb3RvKSB7CisJY2FzZSBJUFBST1RPX1RDUDoKKwljYXNlIElQUFJPVE9fVURQOgorCWNhc2UgSVBQUk9UT19TQ1RQOgorCQlwb3J0ID0gZmwtPmZsX2lwX3Nwb3J0OworCQlicmVhazsKKwljYXNlIElQUFJPVE9fSUNNUDoKKwljYXNlIElQUFJPVE9fSUNNUFY2OgorCQlwb3J0ID0gaHRvbnMoZmwtPmZsX2ljbXBfdHlwZSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXBvcnQgPSAwOwkvKlhYWCovCisJfQorCXJldHVybiBwb3J0OworfQorCitzdGF0aWMgX19pbmxpbmVfXwordTE2IHhmcm1fZmxvd2lfZHBvcnQoc3RydWN0IGZsb3dpICpmbCkKK3sKKwl1MTYgcG9ydDsKKwlzd2l0Y2goZmwtPnByb3RvKSB7CisJY2FzZSBJUFBST1RPX1RDUDoKKwljYXNlIElQUFJPVE9fVURQOgorCWNhc2UgSVBQUk9UT19TQ1RQOgorCQlwb3J0ID0gZmwtPmZsX2lwX2Rwb3J0OworCQlicmVhazsKKwljYXNlIElQUFJPVE9fSUNNUDoKKwljYXNlIElQUFJPVE9fSUNNUFY2OgorCQlwb3J0ID0gaHRvbnMoZmwtPmZsX2ljbXBfY29kZSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXBvcnQgPSAwOwkvKlhYWCovCisJfQorCXJldHVybiBwb3J0OworfQorCitzdGF0aWMgaW5saW5lIGludAorX194ZnJtNF9zZWxlY3Rvcl9tYXRjaChzdHJ1Y3QgeGZybV9zZWxlY3RvciAqc2VsLCBzdHJ1Y3QgZmxvd2kgKmZsKQoreworCXJldHVybiAgYWRkcl9tYXRjaCgmZmwtPmZsNF9kc3QsICZzZWwtPmRhZGRyLCBzZWwtPnByZWZpeGxlbl9kKSAmJgorCQlhZGRyX21hdGNoKCZmbC0+Zmw0X3NyYywgJnNlbC0+c2FkZHIsIHNlbC0+cHJlZml4bGVuX3MpICYmCisJCSEoKHhmcm1fZmxvd2lfZHBvcnQoZmwpIF4gc2VsLT5kcG9ydCkgJiBzZWwtPmRwb3J0X21hc2spICYmCisJCSEoKHhmcm1fZmxvd2lfc3BvcnQoZmwpIF4gc2VsLT5zcG9ydCkgJiBzZWwtPnNwb3J0X21hc2spICYmCisJCShmbC0+cHJvdG8gPT0gc2VsLT5wcm90byB8fCAhc2VsLT5wcm90bykgJiYKKwkJKGZsLT5vaWYgPT0gc2VsLT5pZmluZGV4IHx8ICFzZWwtPmlmaW5kZXgpOworfQorCitzdGF0aWMgaW5saW5lIGludAorX194ZnJtNl9zZWxlY3Rvcl9tYXRjaChzdHJ1Y3QgeGZybV9zZWxlY3RvciAqc2VsLCBzdHJ1Y3QgZmxvd2kgKmZsKQoreworCXJldHVybiAgYWRkcl9tYXRjaCgmZmwtPmZsNl9kc3QsICZzZWwtPmRhZGRyLCBzZWwtPnByZWZpeGxlbl9kKSAmJgorCQlhZGRyX21hdGNoKCZmbC0+Zmw2X3NyYywgJnNlbC0+c2FkZHIsIHNlbC0+cHJlZml4bGVuX3MpICYmCisJCSEoKHhmcm1fZmxvd2lfZHBvcnQoZmwpIF4gc2VsLT5kcG9ydCkgJiBzZWwtPmRwb3J0X21hc2spICYmCisJCSEoKHhmcm1fZmxvd2lfc3BvcnQoZmwpIF4gc2VsLT5zcG9ydCkgJiBzZWwtPnNwb3J0X21hc2spICYmCisJCShmbC0+cHJvdG8gPT0gc2VsLT5wcm90byB8fCAhc2VsLT5wcm90bykgJiYKKwkJKGZsLT5vaWYgPT0gc2VsLT5pZmluZGV4IHx8ICFzZWwtPmlmaW5kZXgpOworfQorCitzdGF0aWMgaW5saW5lIGludAoreGZybV9zZWxlY3Rvcl9tYXRjaChzdHJ1Y3QgeGZybV9zZWxlY3RvciAqc2VsLCBzdHJ1Y3QgZmxvd2kgKmZsLAorCQkgICAgdW5zaWduZWQgc2hvcnQgZmFtaWx5KQoreworCXN3aXRjaCAoZmFtaWx5KSB7CisJY2FzZSBBRl9JTkVUOgorCQlyZXR1cm4gX194ZnJtNF9zZWxlY3Rvcl9tYXRjaChzZWwsIGZsKTsKKwljYXNlIEFGX0lORVQ2OgorCQlyZXR1cm4gX194ZnJtNl9zZWxlY3Rvcl9tYXRjaChzZWwsIGZsKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIEEgc3RydWN0IGVuY29kaW5nIGJ1bmRsZSBvZiB0cmFuc2Zvcm1hdGlvbnMgdG8gYXBwbHkgdG8gc29tZSBzZXQgb2YgZmxvdy4KKyAqCisgKiBkc3QtPmNoaWxkIHBvaW50cyB0byB0aGUgbmV4dCBlbGVtZW50IG9mIGJ1bmRsZS4KKyAqIGRzdC0+eGZybSAgcG9pbnRzIHRvIGFuIGluc3RhbnNlIG9mIHRyYW5zZm9ybWVyLgorICoKKyAqIER1ZSB0byB1bmZvcnR1bmF0ZSBsaW1pdGF0aW9ucyBvZiBjdXJyZW50IHJvdXRpbmcgY2FjaGUsIHdoaWNoIHdlCisgKiBoYXZlIG5vIHRpbWUgdG8gZml4LCBpdCBtaXJyb3JzIHN0cnVjdCBydGFibGUgYW5kIGJvdW5kIHRvIHRoZSBzYW1lCisgKiByb3V0aW5nIGtleSwgaW5jbHVkaW5nIHNhZGRyLGRhZGRyLiBIb3dldmVyLCB3ZSBjYW4gaGF2ZSBtYW55IG9mCisgKiBidW5kbGVzIGRpZmZlcmluZyBieSBzZXNzaW9uIGlkLiBBbGwgdGhlIGJ1bmRsZXMgZ3JvdyBmcm9tIGEgcGFyZW50CisgKiBwb2xpY3kgcnVsZS4KKyAqLworc3RydWN0IHhmcm1fZHN0Cit7CisJdW5pb24geworCQlzdHJ1Y3QgeGZybV9kc3QJCSpuZXh0OworCQlzdHJ1Y3QgZHN0X2VudHJ5CWRzdDsKKwkJc3RydWN0IHJ0YWJsZQkJcnQ7CisJCXN0cnVjdCBydDZfaW5mbwkJcnQ2OworCX0gdTsKKwlzdHJ1Y3QgZHN0X2VudHJ5ICpyb3V0ZTsKKwl1MzIgcm91dGVfbXR1X2NhY2hlZDsKKwl1MzIgY2hpbGRfbXR1X2NhY2hlZDsKK307CisKKy8qIERlY2Fwc3VsYXRpb24gc3RhdGUsIHVzZWQgYnkgdGhlIGlucHV0IHRvIHN0b3JlIGRhdGEgZHVyaW5nCisgKiBkZWNhcHN1bGF0aW9uIHByb2NlZHVyZSwgdG8gYmUgdXNlZCBsYXRlciAoZHVyaW5nIHRoZSBwb2xpY3kKKyAqIGNoZWNrCisgKi8KK3N0cnVjdCB4ZnJtX2RlY2FwX3N0YXRlIHsKKwljaGFyCWRlY2FwX2RhdGFbMjBdOworCV9fdTE2CWRlY2FwX3R5cGU7Cit9OyAgIAorCitzdHJ1Y3Qgc2VjX2RlY2FwX3N0YXRlIHsKKwlzdHJ1Y3QgeGZybV9zdGF0ZQkqeHZlYzsKKwlzdHJ1Y3QgeGZybV9kZWNhcF9zdGF0ZSBkZWNhcDsKK307CisKK3N0cnVjdCBzZWNfcGF0aAoreworCWF0b21pY190CQlyZWZjbnQ7CisJaW50CQkJbGVuOworCXN0cnVjdCBzZWNfZGVjYXBfc3RhdGUJeFtYRlJNX01BWF9ERVBUSF07Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzZWNfcGF0aCAqCitzZWNwYXRoX2dldChzdHJ1Y3Qgc2VjX3BhdGggKnNwKQoreworCWlmIChzcCkKKwkJYXRvbWljX2luYygmc3AtPnJlZmNudCk7CisJcmV0dXJuIHNwOworfQorCitleHRlcm4gdm9pZCBfX3NlY3BhdGhfZGVzdHJveShzdHJ1Y3Qgc2VjX3BhdGggKnNwKTsKKworc3RhdGljIGlubGluZSB2b2lkCitzZWNwYXRoX3B1dChzdHJ1Y3Qgc2VjX3BhdGggKnNwKQoreworCWlmIChzcCAmJiBhdG9taWNfZGVjX2FuZF90ZXN0KCZzcC0+cmVmY250KSkKKwkJX19zZWNwYXRoX2Rlc3Ryb3koc3ApOworfQorCitleHRlcm4gc3RydWN0IHNlY19wYXRoICpzZWNwYXRoX2R1cChzdHJ1Y3Qgc2VjX3BhdGggKnNyYyk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorc2VjcGF0aF9yZXNldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworI2lmZGVmIENPTkZJR19YRlJNCisJc2VjcGF0aF9wdXQoc2tiLT5zcCk7CisJc2tiLT5zcCA9IE5VTEw7CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSBpbnQKK19feGZybTRfc3RhdGVfYWRkcl9jbXAoc3RydWN0IHhmcm1fdG1wbCAqdG1wbCwgc3RydWN0IHhmcm1fc3RhdGUgKngpCit7CisJcmV0dXJuCSh0bXBsLT5zYWRkci5hNCAmJgorCQkgdG1wbC0+c2FkZHIuYTQgIT0geC0+cHJvcHMuc2FkZHIuYTQpOworfQorCitzdGF0aWMgaW5saW5lIGludAorX194ZnJtNl9zdGF0ZV9hZGRyX2NtcChzdHJ1Y3QgeGZybV90bXBsICp0bXBsLCBzdHJ1Y3QgeGZybV9zdGF0ZSAqeCkKK3sKKwlyZXR1cm4JKCFpcHY2X2FkZHJfYW55KChzdHJ1Y3QgaW42X2FkZHIqKSZ0bXBsLT5zYWRkcikgJiYKKwkJIGlwdjZfYWRkcl9jbXAoKHN0cnVjdCBpbjZfYWRkciAqKSZ0bXBsLT5zYWRkciwgKHN0cnVjdCBpbjZfYWRkciopJngtPnByb3BzLnNhZGRyKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50Cit4ZnJtX3N0YXRlX2FkZHJfY21wKHN0cnVjdCB4ZnJtX3RtcGwgKnRtcGwsIHN0cnVjdCB4ZnJtX3N0YXRlICp4LCB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpCit7CisJc3dpdGNoIChmYW1pbHkpIHsKKwljYXNlIEFGX0lORVQ6CisJCXJldHVybiBfX3hmcm00X3N0YXRlX2FkZHJfY21wKHRtcGwsIHgpOworCWNhc2UgQUZfSU5FVDY6CisJCXJldHVybiBfX3hmcm02X3N0YXRlX2FkZHJfY21wKHRtcGwsIHgpOworCX0KKwlyZXR1cm4gITA7Cit9CisKKyNpZmRlZiBDT05GSUdfWEZSTQorCitleHRlcm4gaW50IF9feGZybV9wb2xpY3lfY2hlY2soc3RydWN0IHNvY2sgKiwgaW50IGRpciwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgc2hvcnQgZmFtaWx5KTsKKworc3RhdGljIGlubGluZSBpbnQgeGZybV9wb2xpY3lfY2hlY2soc3RydWN0IHNvY2sgKnNrLCBpbnQgZGlyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpCit7CisJaWYgKHNrICYmIHNrLT5za19wb2xpY3lbWEZSTV9QT0xJQ1lfSU5dKQorCQlyZXR1cm4gX194ZnJtX3BvbGljeV9jaGVjayhzaywgZGlyLCBza2IsIGZhbWlseSk7CisJCQorCXJldHVybgkoIXhmcm1fcG9saWN5X2xpc3RbZGlyXSAmJiAhc2tiLT5zcCkgfHwKKwkJKHNrYi0+ZHN0LT5mbGFncyAmIERTVF9OT1BPTElDWSkgfHwKKwkJX194ZnJtX3BvbGljeV9jaGVjayhzaywgZGlyLCBza2IsIGZhbWlseSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHhmcm00X3BvbGljeV9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIGludCBkaXIsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJcmV0dXJuIHhmcm1fcG9saWN5X2NoZWNrKHNrLCBkaXIsIHNrYiwgQUZfSU5FVCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHhmcm02X3BvbGljeV9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIGludCBkaXIsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJcmV0dXJuIHhmcm1fcG9saWN5X2NoZWNrKHNrLCBkaXIsIHNrYiwgQUZfSU5FVDYpOworfQorCisKK2V4dGVybiBpbnQgX194ZnJtX3JvdXRlX2ZvcndhcmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgc2hvcnQgZmFtaWx5KTsKKworc3RhdGljIGlubGluZSBpbnQgeGZybV9yb3V0ZV9mb3J3YXJkKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIHNob3J0IGZhbWlseSkKK3sKKwlyZXR1cm4JIXhmcm1fcG9saWN5X2xpc3RbWEZSTV9QT0xJQ1lfT1VUXSB8fAorCQkoc2tiLT5kc3QtPmZsYWdzICYgRFNUX05PWEZSTSkgfHwKKwkJX194ZnJtX3JvdXRlX2ZvcndhcmQoc2tiLCBmYW1pbHkpOworfQorCitzdGF0aWMgaW5saW5lIGludCB4ZnJtNF9yb3V0ZV9mb3J3YXJkKHN0cnVjdCBza19idWZmICpza2IpCit7CisJcmV0dXJuIHhmcm1fcm91dGVfZm9yd2FyZChza2IsIEFGX0lORVQpOworfQorCitzdGF0aWMgaW5saW5lIGludCB4ZnJtNl9yb3V0ZV9mb3J3YXJkKHN0cnVjdCBza19idWZmICpza2IpCit7CisJcmV0dXJuIHhmcm1fcm91dGVfZm9yd2FyZChza2IsIEFGX0lORVQ2KTsKK30KKworZXh0ZXJuIGludCBfX3hmcm1fc2tfY2xvbmVfcG9saWN5KHN0cnVjdCBzb2NrICpzayk7CisKK3N0YXRpYyBpbmxpbmUgaW50IHhmcm1fc2tfY2xvbmVfcG9saWN5KHN0cnVjdCBzb2NrICpzaykKK3sKKwlpZiAodW5saWtlbHkoc2stPnNrX3BvbGljeVswXSB8fCBzay0+c2tfcG9saWN5WzFdKSkKKwkJcmV0dXJuIF9feGZybV9za19jbG9uZV9wb2xpY3koc2spOworCXJldHVybiAwOworfQorCitleHRlcm4gdm9pZCB4ZnJtX3BvbGljeV9kZWxldGUoc3RydWN0IHhmcm1fcG9saWN5ICpwb2wsIGludCBkaXIpOworCitzdGF0aWMgaW5saW5lIHZvaWQgeGZybV9za19mcmVlX3BvbGljeShzdHJ1Y3Qgc29jayAqc2spCit7CisJaWYgKHVubGlrZWx5KHNrLT5za19wb2xpY3lbMF0gIT0gTlVMTCkpIHsKKwkJeGZybV9wb2xpY3lfZGVsZXRlKHNrLT5za19wb2xpY3lbMF0sIFhGUk1fUE9MSUNZX01BWCk7CisJCXNrLT5za19wb2xpY3lbMF0gPSBOVUxMOworCX0KKwlpZiAodW5saWtlbHkoc2stPnNrX3BvbGljeVsxXSAhPSBOVUxMKSkgeworCQl4ZnJtX3BvbGljeV9kZWxldGUoc2stPnNrX3BvbGljeVsxXSwgWEZSTV9QT0xJQ1lfTUFYKzEpOworCQlzay0+c2tfcG9saWN5WzFdID0gTlVMTDsKKwl9Cit9CisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgdm9pZCB4ZnJtX3NrX2ZyZWVfcG9saWN5KHN0cnVjdCBzb2NrICpzaykge30KK3N0YXRpYyBpbmxpbmUgaW50IHhmcm1fc2tfY2xvbmVfcG9saWN5KHN0cnVjdCBzb2NrICpzaykgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSBpbnQgeGZybTZfcm91dGVfZm9yd2FyZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSB7IHJldHVybiAxOyB9ICAKK3N0YXRpYyBpbmxpbmUgaW50IHhmcm00X3JvdXRlX2ZvcndhcmQoc3RydWN0IHNrX2J1ZmYgKnNrYikgeyByZXR1cm4gMTsgfSAKK3N0YXRpYyBpbmxpbmUgaW50IHhmcm02X3BvbGljeV9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIGludCBkaXIsIHN0cnVjdCBza19idWZmICpza2IpCit7IAorCXJldHVybiAxOyAKK30gCitzdGF0aWMgaW5saW5lIGludCB4ZnJtNF9wb2xpY3lfY2hlY2soc3RydWN0IHNvY2sgKnNrLCBpbnQgZGlyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXJldHVybiAxOworfQorc3RhdGljIGlubGluZSBpbnQgeGZybV9wb2xpY3lfY2hlY2soc3RydWN0IHNvY2sgKnNrLCBpbnQgZGlyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpCit7CisJcmV0dXJuIDE7Cit9CisjZW5kaWYKKworc3RhdGljIF9faW5saW5lX18KK3hmcm1fYWRkcmVzc190ICp4ZnJtX2Zsb3dpX2RhZGRyKHN0cnVjdCBmbG93aSAqZmwsIHVuc2lnbmVkIHNob3J0IGZhbWlseSkKK3sKKwlzd2l0Y2ggKGZhbWlseSl7CisJY2FzZSBBRl9JTkVUOgorCQlyZXR1cm4gKHhmcm1fYWRkcmVzc190ICopJmZsLT5mbDRfZHN0OworCWNhc2UgQUZfSU5FVDY6CisJCXJldHVybiAoeGZybV9hZGRyZXNzX3QgKikmZmwtPmZsNl9kc3Q7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgX19pbmxpbmVfXworeGZybV9hZGRyZXNzX3QgKnhmcm1fZmxvd2lfc2FkZHIoc3RydWN0IGZsb3dpICpmbCwgdW5zaWduZWQgc2hvcnQgZmFtaWx5KQoreworCXN3aXRjaCAoZmFtaWx5KXsKKwljYXNlIEFGX0lORVQ6CisJCXJldHVybiAoeGZybV9hZGRyZXNzX3QgKikmZmwtPmZsNF9zcmM7CisJY2FzZSBBRl9JTkVUNjoKKwkJcmV0dXJuICh4ZnJtX2FkZHJlc3NfdCAqKSZmbC0+Zmw2X3NyYzsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludAorX194ZnJtNF9zdGF0ZV9hZGRyX2NoZWNrKHN0cnVjdCB4ZnJtX3N0YXRlICp4LAorCQkJIHhmcm1fYWRkcmVzc190ICpkYWRkciwgeGZybV9hZGRyZXNzX3QgKnNhZGRyKQoreworCWlmIChkYWRkci0+YTQgPT0geC0+aWQuZGFkZHIuYTQgJiYKKwkgICAgKHNhZGRyLT5hNCA9PSB4LT5wcm9wcy5zYWRkci5hNCB8fCAhc2FkZHItPmE0IHx8ICF4LT5wcm9wcy5zYWRkci5hNCkpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQKK19feGZybTZfc3RhdGVfYWRkcl9jaGVjayhzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwKKwkJCSB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsIHhmcm1fYWRkcmVzc190ICpzYWRkcikKK3sKKwlpZiAoIWlwdjZfYWRkcl9jbXAoKHN0cnVjdCBpbjZfYWRkciAqKWRhZGRyLCAoc3RydWN0IGluNl9hZGRyICopJngtPmlkLmRhZGRyKSAmJgorCSAgICAoIWlwdjZfYWRkcl9jbXAoKHN0cnVjdCBpbjZfYWRkciAqKXNhZGRyLCAoc3RydWN0IGluNl9hZGRyICopJngtPnByb3BzLnNhZGRyKXx8IAorCSAgICAgaXB2Nl9hZGRyX2FueSgoc3RydWN0IGluNl9hZGRyICopc2FkZHIpIHx8IAorCSAgICAgaXB2Nl9hZGRyX2FueSgoc3RydWN0IGluNl9hZGRyICopJngtPnByb3BzLnNhZGRyKSkpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQKK3hmcm1fc3RhdGVfYWRkcl9jaGVjayhzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwKKwkJICAgICAgeGZybV9hZGRyZXNzX3QgKmRhZGRyLCB4ZnJtX2FkZHJlc3NfdCAqc2FkZHIsCisJCSAgICAgIHVuc2lnbmVkIHNob3J0IGZhbWlseSkKK3sKKwlzd2l0Y2ggKGZhbWlseSkgeworCWNhc2UgQUZfSU5FVDoKKwkJcmV0dXJuIF9feGZybTRfc3RhdGVfYWRkcl9jaGVjayh4LCBkYWRkciwgc2FkZHIpOworCWNhc2UgQUZfSU5FVDY6CisJCXJldHVybiBfX3hmcm02X3N0YXRlX2FkZHJfY2hlY2soeCwgZGFkZHIsIHNhZGRyKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHhmcm1fc3RhdGVfa2VybihzdHJ1Y3QgeGZybV9zdGF0ZSAqeCkKK3sKKwlyZXR1cm4gYXRvbWljX3JlYWQoJngtPnR1bm5lbF91c2Vycyk7Cit9CisKKy8qCisgKiB4ZnJtIGFsZ29yaXRobSBpbmZvcm1hdGlvbgorICovCitzdHJ1Y3QgeGZybV9hbGdvX2F1dGhfaW5mbyB7CisJdTE2IGljdl90cnVuY2JpdHM7CisJdTE2IGljdl9mdWxsYml0czsKK307CisKK3N0cnVjdCB4ZnJtX2FsZ29fZW5jcl9pbmZvIHsKKwl1MTYgYmxvY2tiaXRzOworCXUxNiBkZWZrZXliaXRzOworfTsKKworc3RydWN0IHhmcm1fYWxnb19jb21wX2luZm8geworCXUxNiB0aHJlc2hvbGQ7Cit9OworCitzdHJ1Y3QgeGZybV9hbGdvX2Rlc2MgeworCWNoYXIgKm5hbWU7CisJdTggYXZhaWxhYmxlOjE7CisJdW5pb24geworCQlzdHJ1Y3QgeGZybV9hbGdvX2F1dGhfaW5mbyBhdXRoOworCQlzdHJ1Y3QgeGZybV9hbGdvX2VuY3JfaW5mbyBlbmNyOworCQlzdHJ1Y3QgeGZybV9hbGdvX2NvbXBfaW5mbyBjb21wOworCX0gdWluZm87CisJc3RydWN0IHNhZGJfYWxnIGRlc2M7Cit9OworCisvKiBYRlJNIHR1bm5lbCBoYW5kbGVycy4gICovCitzdHJ1Y3QgeGZybV90dW5uZWwgeworCWludCAoKmhhbmRsZXIpKHN0cnVjdCBza19idWZmICpza2IpOworCXZvaWQgKCplcnJfaGFuZGxlcikoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqaW5mbyk7Cit9OworCitzdHJ1Y3QgeGZybTZfdHVubmVsIHsKKwlpbnQgKCpoYW5kbGVyKShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsIHVuc2lnbmVkIGludCAqbmhvZmZwKTsKKwl2b2lkICgqZXJyX2hhbmRsZXIpKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9za2JfcGFybSAqb3B0LAorCQkJICAgIGludCB0eXBlLCBpbnQgY29kZSwgaW50IG9mZnNldCwgX191MzIgaW5mbyk7Cit9OworCitleHRlcm4gdm9pZCB4ZnJtX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCB4ZnJtNF9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgeGZybTZfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIHhmcm02X2Zpbmkodm9pZCk7CitleHRlcm4gdm9pZCB4ZnJtX3N0YXRlX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCB4ZnJtNF9zdGF0ZV9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgeGZybTRfc3RhdGVfZmluaSh2b2lkKTsKK2V4dGVybiB2b2lkIHhmcm02X3N0YXRlX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCB4ZnJtNl9zdGF0ZV9maW5pKHZvaWQpOworCitleHRlcm4gaW50IHhmcm1fc3RhdGVfd2Fsayh1OCBwcm90bywgaW50ICgqZnVuYykoc3RydWN0IHhmcm1fc3RhdGUgKiwgaW50LCB2b2lkKiksIHZvaWQgKik7CitleHRlcm4gc3RydWN0IHhmcm1fc3RhdGUgKnhmcm1fc3RhdGVfYWxsb2Modm9pZCk7CitleHRlcm4gc3RydWN0IHhmcm1fc3RhdGUgKnhmcm1fc3RhdGVfZmluZCh4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsIHhmcm1fYWRkcmVzc190ICpzYWRkciwgCisJCQkJCSAgc3RydWN0IGZsb3dpICpmbCwgc3RydWN0IHhmcm1fdG1wbCAqdG1wbCwKKwkJCQkJICBzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbCwgaW50ICplcnIsCisJCQkJCSAgdW5zaWduZWQgc2hvcnQgZmFtaWx5KTsKK2V4dGVybiBpbnQgeGZybV9zdGF0ZV9jaGVja19leHBpcmUoc3RydWN0IHhmcm1fc3RhdGUgKngpOworZXh0ZXJuIHZvaWQgeGZybV9zdGF0ZV9pbnNlcnQoc3RydWN0IHhmcm1fc3RhdGUgKngpOworZXh0ZXJuIGludCB4ZnJtX3N0YXRlX2FkZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCk7CitleHRlcm4gaW50IHhmcm1fc3RhdGVfdXBkYXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KTsKK2V4dGVybiBzdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV9zdGF0ZV9sb29rdXAoeGZybV9hZGRyZXNzX3QgKmRhZGRyLCB1MzIgc3BpLCB1OCBwcm90bywgdW5zaWduZWQgc2hvcnQgZmFtaWx5KTsKK2V4dGVybiBzdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV9maW5kX2FjcV9ieXNlcSh1MzIgc2VxKTsKK2V4dGVybiB2b2lkIHhmcm1fc3RhdGVfZGVsZXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KTsKK2V4dGVybiB2b2lkIHhmcm1fc3RhdGVfZmx1c2godTggcHJvdG8pOworZXh0ZXJuIGludCB4ZnJtX3JlcGxheV9jaGVjayhzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgdTMyIHNlcSk7CitleHRlcm4gdm9pZCB4ZnJtX3JlcGxheV9hZHZhbmNlKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCB1MzIgc2VxKTsKK2V4dGVybiBpbnQgeGZybV9zdGF0ZV9jaGVjayhzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IHhmcm1fc3RhdGVfbXR1KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBpbnQgbXR1KTsKK2V4dGVybiBpbnQgeGZybTRfcmN2KHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCB4ZnJtNF9vdXRwdXQoc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IHhmcm00X3R1bm5lbF9yZWdpc3RlcihzdHJ1Y3QgeGZybV90dW5uZWwgKmhhbmRsZXIpOworZXh0ZXJuIGludCB4ZnJtNF90dW5uZWxfZGVyZWdpc3RlcihzdHJ1Y3QgeGZybV90dW5uZWwgKmhhbmRsZXIpOworZXh0ZXJuIGludCB4ZnJtNl9yY3Zfc3BpKHN0cnVjdCBza19idWZmICoqcHNrYiwgdW5zaWduZWQgaW50ICpuaG9mZnAsIHUzMiBzcGkpOworZXh0ZXJuIGludCB4ZnJtNl9yY3Yoc3RydWN0IHNrX2J1ZmYgKipwc2tiLCB1bnNpZ25lZCBpbnQgKm5ob2ZmcCk7CitleHRlcm4gaW50IHhmcm02X3R1bm5lbF9yZWdpc3RlcihzdHJ1Y3QgeGZybTZfdHVubmVsICpoYW5kbGVyKTsKK2V4dGVybiBpbnQgeGZybTZfdHVubmVsX2RlcmVnaXN0ZXIoc3RydWN0IHhmcm02X3R1bm5lbCAqaGFuZGxlcik7CitleHRlcm4gdTMyIHhmcm02X3R1bm5lbF9hbGxvY19zcGkoeGZybV9hZGRyZXNzX3QgKnNhZGRyKTsKK2V4dGVybiB2b2lkIHhmcm02X3R1bm5lbF9mcmVlX3NwaSh4ZnJtX2FkZHJlc3NfdCAqc2FkZHIpOworZXh0ZXJuIHUzMiB4ZnJtNl90dW5uZWxfc3BpX2xvb2t1cCh4ZnJtX2FkZHJlc3NfdCAqc2FkZHIpOworZXh0ZXJuIGludCB4ZnJtNl9vdXRwdXQoc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKKyNpZmRlZiBDT05GSUdfWEZSTQorZXh0ZXJuIGludCB4ZnJtNF9yY3ZfZW5jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgX191MTYgZW5jYXBfdHlwZSk7CitleHRlcm4gaW50IHhmcm1fdXNlcl9wb2xpY3koc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgdTggX191c2VyICpvcHR2YWwsIGludCBvcHRsZW4pOworZXh0ZXJuIGludCB4ZnJtX2RzdF9sb29rdXAoc3RydWN0IHhmcm1fZHN0ICoqZHN0LCBzdHJ1Y3QgZmxvd2kgKmZsLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IHhmcm1fdXNlcl9wb2xpY3koc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgdTggX191c2VyICpvcHR2YWwsIGludCBvcHRsZW4pCit7CisgCXJldHVybiAtRU5PUFJPVE9PUFQ7Cit9IAorCitzdGF0aWMgaW5saW5lIGludCB4ZnJtNF9yY3ZfZW5jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgX191MTYgZW5jYXBfdHlwZSkKK3sKKyAJLyogc2hvdWxkIG5vdCBoYXBwZW4gKi8KKyAJa2ZyZWVfc2tiKHNrYik7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW5saW5lIGludCB4ZnJtX2RzdF9sb29rdXAoc3RydWN0IHhmcm1fZHN0ICoqZHN0LCBzdHJ1Y3QgZmxvd2kgKmZsLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9IAorI2VuZGlmCisKK3N0cnVjdCB4ZnJtX3BvbGljeSAqeGZybV9wb2xpY3lfYWxsb2MoaW50IGdmcCk7CitleHRlcm4gaW50IHhmcm1fcG9saWN5X3dhbGsoaW50ICgqZnVuYykoc3RydWN0IHhmcm1fcG9saWN5ICosIGludCwgaW50LCB2b2lkKiksIHZvaWQgKik7CitpbnQgeGZybV9wb2xpY3lfaW5zZXJ0KGludCBkaXIsIHN0cnVjdCB4ZnJtX3BvbGljeSAqcG9saWN5LCBpbnQgZXhjbCk7CitzdHJ1Y3QgeGZybV9wb2xpY3kgKnhmcm1fcG9saWN5X2J5c2VsKGludCBkaXIsIHN0cnVjdCB4ZnJtX3NlbGVjdG9yICpzZWwsCisJCQkJICAgICAgaW50IGRlbGV0ZSk7CitzdHJ1Y3QgeGZybV9wb2xpY3kgKnhmcm1fcG9saWN5X2J5aWQoaW50IGRpciwgdTMyIGlkLCBpbnQgZGVsZXRlKTsKK3ZvaWQgeGZybV9wb2xpY3lfZmx1c2godm9pZCk7Cit1MzIgeGZybV9nZXRfYWNxc2VxKHZvaWQpOwordm9pZCB4ZnJtX2FsbG9jX3NwaShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgdTMyIG1pbnNwaSwgdTMyIG1heHNwaSk7CitzdHJ1Y3QgeGZybV9zdGF0ZSAqIHhmcm1fZmluZF9hY3EodTggbW9kZSwgdTMyIHJlcWlkLCB1OCBwcm90bywgCisJCQkJICB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsIHhmcm1fYWRkcmVzc190ICpzYWRkciwgCisJCQkJICBpbnQgY3JlYXRlLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpOworZXh0ZXJuIHZvaWQgeGZybV9wb2xpY3lfZmx1c2godm9pZCk7CitleHRlcm4gaW50IHhmcm1fc2tfcG9saWN5X2luc2VydChzdHJ1Y3Qgc29jayAqc2ssIGludCBkaXIsIHN0cnVjdCB4ZnJtX3BvbGljeSAqcG9sKTsKK2V4dGVybiBpbnQgeGZybV9mbHVzaF9idW5kbGVzKHZvaWQpOworZXh0ZXJuIGludCB4ZnJtX2J1bmRsZV9vayhzdHJ1Y3QgeGZybV9kc3QgKnhkc3QsIHN0cnVjdCBmbG93aSAqZmwsIGludCBmYW1pbHkpOworZXh0ZXJuIHZvaWQgeGZybV9pbml0X3BtdHUoc3RydWN0IGRzdF9lbnRyeSAqZHN0KTsKKworZXh0ZXJuIHdhaXRfcXVldWVfaGVhZF90IGttX3dhaXRxOworZXh0ZXJuIGludCBrbV9uZXdfbWFwcGluZyhzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgeGZybV9hZGRyZXNzX3QgKmlwYWRkciwgdTE2IHNwb3J0KTsKK2V4dGVybiB2b2lkIGttX3BvbGljeV9leHBpcmVkKHN0cnVjdCB4ZnJtX3BvbGljeSAqcG9sLCBpbnQgZGlyLCBpbnQgaGFyZCk7CisKK2V4dGVybiB2b2lkIHhmcm1faW5wdXRfaW5pdCh2b2lkKTsKK2V4dGVybiBpbnQgeGZybV9wYXJzZV9zcGkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggbmV4dGhkciwgdTMyICpzcGksIHUzMiAqc2VxKTsKKworZXh0ZXJuIHZvaWQgeGZybV9wcm9iZV9hbGdzKHZvaWQpOworZXh0ZXJuIGludCB4ZnJtX2NvdW50X2F1dGhfc3VwcG9ydGVkKHZvaWQpOworZXh0ZXJuIGludCB4ZnJtX2NvdW50X2VuY19zdXBwb3J0ZWQodm9pZCk7CitleHRlcm4gc3RydWN0IHhmcm1fYWxnb19kZXNjICp4ZnJtX2FhbGdfZ2V0X2J5aWR4KHVuc2lnbmVkIGludCBpZHgpOworZXh0ZXJuIHN0cnVjdCB4ZnJtX2FsZ29fZGVzYyAqeGZybV9lYWxnX2dldF9ieWlkeCh1bnNpZ25lZCBpbnQgaWR4KTsKK2V4dGVybiBzdHJ1Y3QgeGZybV9hbGdvX2Rlc2MgKnhmcm1fYWFsZ19nZXRfYnlpZChpbnQgYWxnX2lkKTsKK2V4dGVybiBzdHJ1Y3QgeGZybV9hbGdvX2Rlc2MgKnhmcm1fZWFsZ19nZXRfYnlpZChpbnQgYWxnX2lkKTsKK2V4dGVybiBzdHJ1Y3QgeGZybV9hbGdvX2Rlc2MgKnhmcm1fY2FsZ19nZXRfYnlpZChpbnQgYWxnX2lkKTsKK2V4dGVybiBzdHJ1Y3QgeGZybV9hbGdvX2Rlc2MgKnhmcm1fYWFsZ19nZXRfYnluYW1lKGNoYXIgKm5hbWUsIGludCBwcm9iZSk7CitleHRlcm4gc3RydWN0IHhmcm1fYWxnb19kZXNjICp4ZnJtX2VhbGdfZ2V0X2J5bmFtZShjaGFyICpuYW1lLCBpbnQgcHJvYmUpOworZXh0ZXJuIHN0cnVjdCB4ZnJtX2FsZ29fZGVzYyAqeGZybV9jYWxnX2dldF9ieW5hbWUoY2hhciAqbmFtZSwgaW50IHByb2JlKTsKKworc3RydWN0IGNyeXB0b190Zm07Cit0eXBlZGVmIHZvaWQgKGljdl91cGRhdGVfZm5fdCkoc3RydWN0IGNyeXB0b190Zm0gKiwgc3RydWN0IHNjYXR0ZXJsaXN0ICosIHVuc2lnbmVkIGludCk7CisKK2V4dGVybiB2b2lkIHNrYl9pY3Zfd2Fsayhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLAorCQkJIGludCBvZmZzZXQsIGludCBsZW4sIGljdl91cGRhdGVfZm5fdCBpY3ZfdXBkYXRlKTsKKworc3RhdGljIGlubGluZSBpbnQgeGZybV9hZGRyX2NtcCh4ZnJtX2FkZHJlc3NfdCAqYSwgeGZybV9hZGRyZXNzX3QgKmIsCisJCQkJaW50IGZhbWlseSkKK3sKKwlzd2l0Y2ggKGZhbWlseSkgeworCWRlZmF1bHQ6CisJY2FzZSBBRl9JTkVUOgorCQlyZXR1cm4gYS0+YTQgLSBiLT5hNDsKKwljYXNlIEFGX0lORVQ2OgorCQlyZXR1cm4gaXB2Nl9hZGRyX2NtcCgoc3RydWN0IGluNl9hZGRyICopYSwKKwkJCQkgICAgIChzdHJ1Y3QgaW42X2FkZHIgKiliKTsKKwl9Cit9CisKKyNlbmRpZgkvKiBfTkVUX1hGUk1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9wY21jaWEvYnVsa21lbS5oIGIvaW5jbHVkZS9wY21jaWEvYnVsa21lbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1M2I3OGQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3BjbWNpYS9idWxrbWVtLmgKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIGJ1bGttZW0uaCAtLSBEZWZpbml0aW9ucyBmb3IgYnVsayBtZW1vcnkgc2VydmljZXMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoZSBpbml0aWFsIGRldmVsb3BlciBvZiB0aGUgb3JpZ2luYWwgY29kZSBpcyBEYXZpZCBBLiBIaW5kcworICogPGRhaGluZHNAdXNlcnMuc291cmNlZm9yZ2UubmV0Pi4gIFBvcnRpb25zIGNyZWF0ZWQgYnkgRGF2aWQgQS4gSGluZHMKKyAqIGFyZSBDb3B5cmlnaHQgKEMpIDE5OTkgRGF2aWQgQS4gSGluZHMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIChDKSAxOTk5CQlEYXZpZCBBLiBIaW5kcworICovCisKKyNpZm5kZWYgX0xJTlVYX0JVTEtNRU1fSAorI2RlZmluZSBfTElOVVhfQlVMS01FTV9ICisKKy8qIEZvciBHZXRGaXJzdFJlZ2lvbiBhbmQgR2V0TmV4dFJlZ2lvbiAqLwordHlwZWRlZiBzdHJ1Y3QgcmVnaW9uX2luZm9fdCB7CisgICAgdV9pbnQJCUF0dHJpYnV0ZXM7CisgICAgdV9pbnQJCUNhcmRPZmZzZXQ7CisgICAgdV9pbnQJCVJlZ2lvblNpemU7CisgICAgdV9pbnQJCUFjY2Vzc1NwZWVkOworICAgIHVfaW50CQlCbG9ja1NpemU7CisgICAgdV9pbnQJCVBhcnRNdWx0aXBsZTsKKyAgICB1X2NoYXIJCUplZGVjTWZyLCBKZWRlY0luZm87CisgICAgbWVtb3J5X2hhbmRsZV90CW5leHQ7Cit9IHJlZ2lvbl9pbmZvX3Q7CisKKyNkZWZpbmUgUkVHSU9OX1RZUEUJCTB4MDAwMQorI2RlZmluZSBSRUdJT05fVFlQRV9DTQkJMHgwMDAwCisjZGVmaW5lIFJFR0lPTl9UWVBFX0FNCQkweDAwMDEKKyNkZWZpbmUgUkVHSU9OX1BSRUZFVENICQkweDAwMDgKKyNkZWZpbmUgUkVHSU9OX0NBQ0hFQUJMRQkweDAwMTAKKyNkZWZpbmUgUkVHSU9OX0JBUl9NQVNLCQkweGUwMDAKKyNkZWZpbmUgUkVHSU9OX0JBUl9TSElGVAkxMworCitpbnQgcGNtY2lhX2dldF9maXJzdF9yZWdpb24oY2xpZW50X2hhbmRsZV90IGhhbmRsZSwgcmVnaW9uX2luZm9fdCAqcmduKTsKK2ludCBwY21jaWFfZ2V0X25leHRfcmVnaW9uKGNsaWVudF9oYW5kbGVfdCBoYW5kbGUsIHJlZ2lvbl9pbmZvX3QgKnJnbik7CisKKyNlbmRpZiAvKiBfTElOVVhfQlVMS01FTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3BjbWNpYS9jaXNjb2RlLmggYi9pbmNsdWRlL3BjbWNpYS9jaXNjb2RlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjAwMGI0MwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvcGNtY2lhL2Npc2NvZGUuaApAQCAtMCwwICsxLDEyMyBAQAorLyoKKyAqIGNpc2NvZGUuaCAtLSBEZWZpbml0aW9ucyBmb3IgYnVsayBtZW1vcnkgc2VydmljZXMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoZSBpbml0aWFsIGRldmVsb3BlciBvZiB0aGUgb3JpZ2luYWwgY29kZSBpcyBEYXZpZCBBLiBIaW5kcworICogPGRhaGluZHNAdXNlcnMuc291cmNlZm9yZ2UubmV0Pi4gIFBvcnRpb25zIGNyZWF0ZWQgYnkgRGF2aWQgQS4gSGluZHMKKyAqIGFyZSBDb3B5cmlnaHQgKEMpIDE5OTkgRGF2aWQgQS4gSGluZHMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIChDKSAxOTk5CQlEYXZpZCBBLiBIaW5kcworICovCisKKyNpZm5kZWYgX0xJTlVYX0NJU0NPREVfSAorI2RlZmluZSBfTElOVVhfQ0lTQ09ERV9ICisKKy8qIE1hbnVmYWN0dXJlciBhbmQgUHJvZHVjdCBJRCBjb2RlcyAqLworCisjZGVmaW5lIE1BTkZJRF8zQ09NCQkJMHgwMTAxCisjZGVmaW5lIFBST0RJRF8zQ09NXzNDWEVNNTU2CQkweDAwMzUKKyNkZWZpbmUgUFJPRElEXzNDT01fM0NDRkVNNTU2CQkweDA1NTYKKyNkZWZpbmUgUFJPRElEXzNDT01fM0M1NjIJCTB4MDU2MgorCisjZGVmaW5lIE1BTkZJRF9BQ0NUT04JCQkweDAxYmYKKyNkZWZpbmUgUFJPRElEX0FDQ1RPTl9FTjIyMjYJCTB4MDEwYQorCisjZGVmaW5lIE1BTkZJRF9BREFQVEVDCQkJMHgwMTJmCisjZGVmaW5lIFBST0RJRF9BREFQVEVDX1NDU0kJCTB4MDAwMQorCisjZGVmaW5lIE1BTkZJRF9BVFQJCQkweGZmZmYKKyNkZWZpbmUgUFJPRElEX0FUVF9LSVQJCQkweDAxMDAKKworI2RlZmluZSBNQU5GSURfQ09OVEVDCQkJMHhjMDAxCisKKyNkZWZpbmUgTUFORklEX0ZVSklUU1UJCQkweDAwMDQKKyNkZWZpbmUgUFJPRElEX0ZVSklUU1VfTUJIMTAzMDIJCTB4MDAwNAorI2RlZmluZSBQUk9ESURfRlVKSVRTVV9NQkgxMDMwNAkJMHgxMDAzCisjZGVmaW5lIFBST0RJRF9GVUpJVFNVX0xBNTAxCQkweDIwMDAKKworI2RlZmluZSBNQU5GSURfSUJNCQkJMHgwMGE0CisjZGVmaW5lIFBST0RJRF9JQk1fSE9NRV9BTkRfQVdBWQkweDAwMmUKKworI2RlZmluZSBNQU5GSURfSU5URUwJCQkweDAwODkKKyNkZWZpbmUgUFJPRElEX0lOVEVMX0RVQUxfUlMyMzIJCTB4MDMwMQorI2RlZmluZSBQUk9ESURfSU5URUxfMlBMVVMJCTB4ODQyMgorCisjZGVmaW5lIE1BTkZJRF9LTUUJCQkweDAwMzIKKyNkZWZpbmUgUFJPRElEX0tNRV9LWExDMDA1X0EJCTB4MDcwNAorI2RlZmluZSBQUk9ESURfS01FX0tYTEMwMDVfQgkJMHgyOTA0CisKKyNkZWZpbmUgTUFORklEX0xJTktTWVMJCQkweDAxNDMKKyNkZWZpbmUgUFJPRElEX0xJTktTWVNfUENNTE0yOAkJMHhjMGFiCisjZGVmaW5lIFBST0RJRF9MSU5LU1lTXzM0MDAJCTB4MzM0MQorCisjZGVmaW5lIE1BTkZJRF9NRUdBSEVSVFoJCTB4MDEwMgorI2RlZmluZSBQUk9ESURfTUVHQUhFUlRaX1ZBUklPVVMJMHgwMDAwCisjZGVmaW5lIFBST0RJRF9NRUdBSEVSVFpfRU0zMjg4CQkweDAwMDYKKworI2RlZmluZSBNQU5GSURfTUFDTklDQQkJCTB4YzAwYgorCisjZGVmaW5lIE1BTkZJRF9NT1RPUk9MQQkJCTB4MDEwOQorI2RlZmluZSBQUk9ESURfTU9UT1JPTEFfTUFSSU5FUgkJMHgwNTAxCisKKyNkZWZpbmUgTUFORklEX05BVElOU1QJCQkweDAxMGIKKyNkZWZpbmUgUFJPRElEX05BVElOU1RfUVVBRF9SUzIzMgkweGQxODAKKworI2RlZmluZSBNQU5GSURfTkVXX01FRElBCQkweDAwNTcKKworI2RlZmluZSBNQU5GSURfTk9LSUEJCQkweDAxMjQKKyNkZWZpbmUgUFJPRElEX05PS0lBX0NBUkRQSE9ORQkJMHgwOTAwCisKKyNkZWZpbmUgTUFORklEX09MSUNPTQkJCTB4MDEyMQorI2RlZmluZSBQUk9ESURfT0xJQ09NX09DMjIzMQkJMHgzMTIyCisjZGVmaW5lIFBST0RJRF9PTElDT01fT0MyMjMyCQkweDMyMjIKKworI2RlZmluZSBNQU5GSURfT01FR0EJCQkweDAxMzcKKyNkZWZpbmUgUFJPRElEX09NRUdBX1FTUF8xMDAJCTB4MDAyNQorCisjZGVmaW5lIE1BTkZJRF9PU0lURUNICQkJMHgwMTQwCisjZGVmaW5lIFBST0RJRF9PU0lURUNIX0pBQ0tfMTQ0CQkweDAwMDEKKyNkZWZpbmUgUFJPRElEX09TSVRFQ0hfSkFDS18yODgJCTB4MDAwMgorI2RlZmluZSBQUk9ESURfT1NJVEVDSF9KQUNLXzMzNgkJMHgwMDA3CisjZGVmaW5lIFBST0RJRF9PU0lURUNIX1NFVkVOCQkweDAwMDgKKworI2RlZmluZSBNQU5GSURfT1hTRU1JCQkJMHgwMjc5CisKKyNkZWZpbmUgTUFORklEX1BJT05FRVIJCQkweDAwMGIKKworI2RlZmluZSBNQU5GSURfUFNJT04JCQkweDAxNmMKKyNkZWZpbmUgUFJPRElEX1BTSU9OX05FVDEwMAkJMHgwMDIzCisKKyNkZWZpbmUgTUFORklEX1FVQVRFQ0gJCQkweDAxMzcKKyNkZWZpbmUgUFJPRElEX1FVQVRFQ0hfU1BQMTAwCQkweDAwMDMKKyNkZWZpbmUgUFJPRElEX1FVQVRFQ0hfRFVBTF9SUzIzMgkweDAwMTIKKyNkZWZpbmUgUFJPRElEX1FVQVRFQ0hfRFVBTF9SUzIzMl9EMQkweDAwMDcKKyNkZWZpbmUgUFJPRElEX1FVQVRFQ0hfRFVBTF9SUzIzMl9EMgkweDAwNTIKKyNkZWZpbmUgUFJPRElEX1FVQVRFQ0hfUVVBRF9SUzIzMgkweDAwMWIKKyNkZWZpbmUgUFJPRElEX1FVQVRFQ0hfRFVBTF9SUzQyMgkweDAwMGUKKyNkZWZpbmUgUFJPRElEX1FVQVRFQ0hfUVVBRF9SUzQyMgkweDAwNDUKKworI2RlZmluZSBNQU5GSURfU01DCQkJMHgwMTA4CisjZGVmaW5lIFBST0RJRF9TTUNfRVRIRVIJCTB4MDEwNQorCisjZGVmaW5lIE1BTkZJRF9TT0NLRVQJCQkweDAxMDQKKyNkZWZpbmUgUFJPRElEX1NPQ0tFVF9EVUFMX1JTMjMyCTB4MDAwNgorI2RlZmluZSBQUk9ESURfU09DS0VUX0VJTwkJMHgwMDBhCisjZGVmaW5lIFBST0RJRF9TT0NLRVRfTFBFCQkweDAwMGQKKyNkZWZpbmUgUFJPRElEX1NPQ0tFVF9MUEVfQ0YJCTB4MDA3NQorCisjZGVmaW5lIE1BTkZJRF9TVU5ESVNLCQkJMHgwMDQ1CisKKyNkZWZpbmUgTUFORklEX1RESwkJCTB4MDEwNQorI2RlZmluZSBQUk9ESURfVERLX0NGMDEwCQkweDA5MDAKKyNkZWZpbmUgUFJPRElEX1RES19HTjM0MTAJCTB4NDgxNQorCisjZGVmaW5lIE1BTkZJRF9UT1NISUJBCQkJMHgwMDk4CisKKyNkZWZpbmUgTUFORklEX1VOR0VSTUFOTiAweDAyYzAKKworI2RlZmluZSBNQU5GSURfWElSQ09NCQkJMHgwMTA1CisKKyNlbmRpZiAvKiBfTElOVVhfQ0lTQ09ERV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3BjbWNpYS9jaXNyZWcuaCBiL2luY2x1ZGUvcGNtY2lhL2Npc3JlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkYWFkNDYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3BjbWNpYS9jaXNyZWcuaApAQCAtMCwwICsxLDEyMCBAQAorLyoKKyAqIGNpc3JlZy5oCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGUgaW5pdGlhbCBkZXZlbG9wZXIgb2YgdGhlIG9yaWdpbmFsIGNvZGUgaXMgRGF2aWQgQS4gSGluZHMKKyAqIDxkYWhpbmRzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4uICBQb3J0aW9ucyBjcmVhdGVkIGJ5IERhdmlkIEEuIEhpbmRzCisgKiBhcmUgQ29weXJpZ2h0IChDKSAxOTk5IERhdmlkIEEuIEhpbmRzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAoQykgMTk5OSAgICAgICAgICAgICBEYXZpZCBBLiBIaW5kcworICovCisKKyNpZm5kZWYgX0xJTlVYX0NJU1JFR19ICisjZGVmaW5lIF9MSU5VWF9DSVNSRUdfSAorCisvKgorICogT2Zmc2V0cyBmcm9tIENvbmZpZ0Jhc2UgZm9yIENJUyByZWdpc3RlcnMKKyAqLworI2RlZmluZSBDSVNSRUdfQ09SCQkweDAwCisjZGVmaW5lIENJU1JFR19DQ1NSCQkweDAyCisjZGVmaW5lIENJU1JFR19QUlIJCTB4MDQKKyNkZWZpbmUgQ0lTUkVHX1NDUgkJMHgwNgorI2RlZmluZSBDSVNSRUdfRVNSCQkweDA4CisjZGVmaW5lIENJU1JFR19JT0JBU0VfMAkJMHgwYQorI2RlZmluZSBDSVNSRUdfSU9CQVNFXzEJCTB4MGMKKyNkZWZpbmUgQ0lTUkVHX0lPQkFTRV8yCQkweDBlCisjZGVmaW5lIENJU1JFR19JT0JBU0VfMwkJMHgxMAorI2RlZmluZSBDSVNSRUdfSU9TSVpFCQkweDEyCisKKy8qCisgKiBDb25maWd1cmF0aW9uIE9wdGlvbiBSZWdpc3RlcgorICovCisjZGVmaW5lIENPUl9DT05GSUdfTUFTSwkJMHgzZgorI2RlZmluZSBDT1JfTUZDX0NPTkZJR19NQVNLCTB4MzgKKyNkZWZpbmUgQ09SX0ZVTkNfRU5BCQkweDAxCisjZGVmaW5lIENPUl9BRERSX0RFQ09ERQkJMHgwMgorI2RlZmluZSBDT1JfSVJFUV9FTkEJCTB4MDQKKyNkZWZpbmUgQ09SX0xFVkVMX1JFUQkJMHg0MAorI2RlZmluZSBDT1JfU09GVF9SRVNFVAkJMHg4MAorCisvKgorICogQ2FyZCBDb25maWd1cmF0aW9uIGFuZCBTdGF0dXMgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBDQ1NSX0lOVFJfQUNLCQkweDAxCisjZGVmaW5lIENDU1JfSU5UUl9QRU5ESU5HCTB4MDIKKyNkZWZpbmUgQ0NTUl9QT1dFUl9ET1dOCQkweDA0CisjZGVmaW5lIENDU1JfQVVESU9fRU5BCQkweDA4CisjZGVmaW5lIENDU1JfSU9JUzgJCTB4MjAKKyNkZWZpbmUgQ0NTUl9TSUdDSEdfRU5BCQkweDQwCisjZGVmaW5lIENDU1JfQ0hBTkdFRAkJMHg4MAorCisvKgorICogUGluIFJlcGxhY2VtZW50IFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgUFJSX1dQX1NUQVRVUwkJMHgwMQorI2RlZmluZSBQUlJfUkVBRFlfU1RBVFVTCTB4MDIKKyNkZWZpbmUgUFJSX0JWRDJfU1RBVFVTCQkweDA0CisjZGVmaW5lIFBSUl9CVkQxX1NUQVRVUwkJMHgwOAorI2RlZmluZSBQUlJfV1BfRVZFTlQJCTB4MTAKKyNkZWZpbmUgUFJSX1JFQURZX0VWRU5UCQkweDIwCisjZGVmaW5lIFBSUl9CVkQyX0VWRU5UCQkweDQwCisjZGVmaW5lIFBSUl9CVkQxX0VWRU5UCQkweDgwCisKKy8qCisgKiBTb2NrZXQgYW5kIENvcHkgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBTQ1JfU09DS0VUX05VTQkJMHgwZgorI2RlZmluZSBTQ1JfQ09QWV9OVU0JCTB4NzAKKworLyoKKyAqIEV4dGVuZGVkIFN0YXR1cyBSZWdpc3RlcgorICovCisjZGVmaW5lIEVTUl9SRVFfQVRUTl9FTkEJMHgwMQorI2RlZmluZSBFU1JfUkVRX0FUVE4JCTB4MTAKKworLyoKKyAqIENhcmRCdXMgRnVuY3Rpb24gU3RhdHVzIFJlZ2lzdGVycworICovCisjZGVmaW5lIENCRk5fRVZFTlQJCTB4MDAKKyNkZWZpbmUgQ0JGTl9NQVNLCQkweDA0CisjZGVmaW5lIENCRk5fU1RBVEUJCTB4MDgKKyNkZWZpbmUgQ0JGTl9GT1JDRQkJMHgwYworCisvKgorICogVGhlc2UgYXBwbHkgdG8gYWxsIHRoZSBDYXJkQnVzIGZ1bmN0aW9uIHJlZ2lzdGVycworICovCisjZGVmaW5lIENCRk5fV1AJCQkweDAwMDEKKyNkZWZpbmUgQ0JGTl9SRUFEWQkJMHgwMDAyCisjZGVmaW5lIENCRk5fQlZEMgkJMHgwMDA0CisjZGVmaW5lIENCRk5fQlZEMQkJMHgwMDA4CisjZGVmaW5lIENCRk5fR1dBS0UJCTB4MDAxMAorI2RlZmluZSBDQkZOX0lOVFIJCTB4ODAwMAorCisvKgorICogRXh0cmEgYml0cyBpbiB0aGUgRnVuY3Rpb24gRXZlbnQgTWFzayBSZWdpc3RlcgorICovCisjZGVmaW5lIEZFTVJfQkFNX0VOQQkJMHgwMDIwCisjZGVmaW5lIEZFTVJfUFdNX0VOQQkJMHgwMDQwCisjZGVmaW5lIEZFTVJfV0tVUF9NQVNLCQkweDQwMDAKKworLyoKKyAqIEluZGlyZWN0IEFkZHJlc3NpbmcgUmVnaXN0ZXJzIGZvciBab29tZWQgVmlkZW86IHRoZXNlIGFyZSBhZGRyZXNzZXMKKyAqIGluIGNvbW1vbiBtZW1vcnkgc3BhY2UKKyAqLworI2RlZmluZSBDSVNSRUdfSUNUUkwwCQkweDAyCS8qIGNvbnRyb2wgcmVnaXN0ZXJzICovCisjZGVmaW5lIENJU1JFR19JQ1RSTDEJCTB4MDMKKyNkZWZpbmUgQ0lTUkVHX0lBRERSMAkJMHgwNAkvKiBhZGRyZXNzIHJlZ2lzdGVycyAqLworI2RlZmluZSBDSVNSRUdfSUFERFIxCQkweDA1CisjZGVmaW5lIENJU1JFR19JQUREUjIJCTB4MDYKKyNkZWZpbmUgQ0lTUkVHX0lBRERSMwkJMHgwNworI2RlZmluZSBDSVNSRUdfSURBVEEwCQkweDA4CS8qIGRhdGEgcmVnaXN0ZXJzICovCisjZGVmaW5lIENJU1JFR19JREFUQTEJCTB4MDkKKworI2RlZmluZSBJQ1RSTDBfQ09NTU9OCQkweDAxCisjZGVmaW5lIElDVFJMMF9BVVRPSU5DCQkweDAyCisjZGVmaW5lIElDVFJMMF9CWVRFR1JBTgkJMHgwNAorCisjZW5kaWYgLyogX0xJTlVYX0NJU1JFR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3BjbWNpYS9jaXN0cGwuaCBiL2luY2x1ZGUvcGNtY2lhL2Npc3RwbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2YTA2OTUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3BjbWNpYS9jaXN0cGwuaApAQCAtMCwwICsxLDYwNSBAQAorLyoKKyAqIGNpc3RwbC5oCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGUgaW5pdGlhbCBkZXZlbG9wZXIgb2YgdGhlIG9yaWdpbmFsIGNvZGUgaXMgRGF2aWQgQS4gSGluZHMKKyAqIDxkYWhpbmRzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4uICBQb3J0aW9ucyBjcmVhdGVkIGJ5IERhdmlkIEEuIEhpbmRzCisgKiBhcmUgQ29weXJpZ2h0IChDKSAxOTk5IERhdmlkIEEuIEhpbmRzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAoQykgMTk5OSAgICAgICAgICAgICBEYXZpZCBBLiBIaW5kcworICovCisKKyNpZm5kZWYgX0xJTlVYX0NJU1RQTF9ICisjZGVmaW5lIF9MSU5VWF9DSVNUUExfSAorCisjZGVmaW5lIENJU1RQTF9OVUxMCQkweDAwCisjZGVmaW5lIENJU1RQTF9ERVZJQ0UJCTB4MDEKKyNkZWZpbmUgQ0lTVFBMX0xPTkdMSU5LX0NCCTB4MDIKKyNkZWZpbmUgQ0lTVFBMX0lORElSRUNUCQkweDAzCisjZGVmaW5lIENJU1RQTF9DT05GSUdfQ0IJMHgwNAorI2RlZmluZSBDSVNUUExfQ0ZUQUJMRV9FTlRSWV9DQgkweDA1CisjZGVmaW5lIENJU1RQTF9MT05HTElOS19NRkMJMHgwNgorI2RlZmluZSBDSVNUUExfQkFSCQkweDA3CisjZGVmaW5lIENJU1RQTF9QV1JfTUdNTlQJMHgwOAorI2RlZmluZSBDSVNUUExfRVhUREVWSUNFCTB4MDkKKyNkZWZpbmUgQ0lTVFBMX0NIRUNLU1VNCQkweDEwCisjZGVmaW5lIENJU1RQTF9MT05HTElOS19BCTB4MTEKKyNkZWZpbmUgQ0lTVFBMX0xPTkdMSU5LX0MJMHgxMgorI2RlZmluZSBDSVNUUExfTElOS1RBUkdFVAkweDEzCisjZGVmaW5lIENJU1RQTF9OT19MSU5LCQkweDE0CisjZGVmaW5lIENJU1RQTF9WRVJTXzEJCTB4MTUKKyNkZWZpbmUgQ0lTVFBMX0FMVFNUUgkJMHgxNgorI2RlZmluZSBDSVNUUExfREVWSUNFX0EJCTB4MTcKKyNkZWZpbmUgQ0lTVFBMX0pFREVDX0MJCTB4MTgKKyNkZWZpbmUgQ0lTVFBMX0pFREVDX0EJCTB4MTkKKyNkZWZpbmUgQ0lTVFBMX0NPTkZJRwkJMHgxYQorI2RlZmluZSBDSVNUUExfQ0ZUQUJMRV9FTlRSWQkweDFiCisjZGVmaW5lIENJU1RQTF9ERVZJQ0VfT0MJMHgxYworI2RlZmluZSBDSVNUUExfREVWSUNFX09BCTB4MWQKKyNkZWZpbmUgQ0lTVFBMX0RFVklDRV9HRU8JMHgxZQorI2RlZmluZSBDSVNUUExfREVWSUNFX0dFT19BCTB4MWYKKyNkZWZpbmUgQ0lTVFBMX01BTkZJRAkJMHgyMAorI2RlZmluZSBDSVNUUExfRlVOQ0lECQkweDIxCisjZGVmaW5lIENJU1RQTF9GVU5DRQkJMHgyMgorI2RlZmluZSBDSVNUUExfU1dJTAkJMHgyMworI2RlZmluZSBDSVNUUExfRU5ECQkweGZmCisvKiBMYXllciAyIHR1cGxlcyAqLworI2RlZmluZSBDSVNUUExfVkVSU18yCQkweDQwCisjZGVmaW5lIENJU1RQTF9GT1JNQVQJCTB4NDEKKyNkZWZpbmUgQ0lTVFBMX0dFT01FVFJZCQkweDQyCisjZGVmaW5lIENJU1RQTF9CWVRFT1JERVIJMHg0MworI2RlZmluZSBDSVNUUExfREFURQkJMHg0NAorI2RlZmluZSBDSVNUUExfQkFUVEVSWQkJMHg0NQorI2RlZmluZSBDSVNUUExfRk9STUFUX0EJCTB4NDcKKy8qIExheWVyIDMgdHVwbGVzICovCisjZGVmaW5lIENJU1RQTF9PUkcJCTB4NDYKKyNkZWZpbmUgQ0lTVFBMX1NQQ0wJCTB4OTAKKwordHlwZWRlZiBzdHJ1Y3QgY2lzdHBsX2xvbmdsaW5rX3QgeworICAgIHVfaW50CWFkZHI7Cit9IGNpc3RwbF9sb25nbGlua190OworCit0eXBlZGVmIHN0cnVjdCBjaXN0cGxfY2hlY2tzdW1fdCB7CisgICAgdV9zaG9ydAlhZGRyOworICAgIHVfc2hvcnQJbGVuOworICAgIHVfY2hhcglzdW07Cit9IGNpc3RwbF9jaGVja3N1bV90OworCisjZGVmaW5lIENJU1RQTF9NQVhfRlVOQ1RJT05TCTgKKyNkZWZpbmUgQ0lTVFBMX01GQ19BVFRSCQkweDAwCisjZGVmaW5lIENJU1RQTF9NRkNfQ09NTU9OCTB4MDEKKwordHlwZWRlZiBzdHJ1Y3QgY2lzdHBsX2xvbmdsaW5rX21mY190IHsKKyAgICB1X2NoYXIJbmZuOworICAgIHN0cnVjdCB7CisJdV9jaGFyCXNwYWNlOworCXVfaW50CWFkZHI7CisgICAgfSBmbltDSVNUUExfTUFYX0ZVTkNUSU9OU107Cit9IGNpc3RwbF9sb25nbGlua19tZmNfdDsKKworI2RlZmluZSBDSVNUUExfTUFYX0FMVFNUUl9TVFJJTkdTCTQKKwordHlwZWRlZiBzdHJ1Y3QgY2lzdHBsX2FsdHN0cl90IHsKKyAgICB1X2NoYXIJbnM7CisgICAgdV9jaGFyCW9mc1tDSVNUUExfTUFYX0FMVFNUUl9TVFJJTkdTXTsKKyAgICBjaGFyCXN0clsyNTRdOworfSBjaXN0cGxfYWx0c3RyX3Q7CisKKyNkZWZpbmUgQ0lTVFBMX0RUWVBFX05VTEwJMHgwMAorI2RlZmluZSBDSVNUUExfRFRZUEVfUk9NCTB4MDEKKyNkZWZpbmUgQ0lTVFBMX0RUWVBFX09UUFJPTQkweDAyCisjZGVmaW5lIENJU1RQTF9EVFlQRV9FUFJPTQkweDAzCisjZGVmaW5lIENJU1RQTF9EVFlQRV9FRVBST00JMHgwNAorI2RlZmluZSBDSVNUUExfRFRZUEVfRkxBU0gJMHgwNQorI2RlZmluZSBDSVNUUExfRFRZUEVfU1JBTQkweDA2CisjZGVmaW5lIENJU1RQTF9EVFlQRV9EUkFNCTB4MDcKKyNkZWZpbmUgQ0lTVFBMX0RUWVBFX0ZVTkNTUEVDCTB4MGQKKyNkZWZpbmUgQ0lTVFBMX0RUWVBFX0VYVEVORAkweDBlCisKKyNkZWZpbmUgQ0lTVFBMX01BWF9ERVZJQ0VTCTQKKwordHlwZWRlZiBzdHJ1Y3QgY2lzdHBsX2RldmljZV90IHsKKyAgICB1X2NoYXIJbmRldjsKKyAgICBzdHJ1Y3QgeworCXVfY2hhciAJdHlwZTsKKwl1X2NoYXIJd3A7CisJdV9pbnQJc3BlZWQ7CisJdV9pbnQJc2l6ZTsKKyAgICB9IGRldltDSVNUUExfTUFYX0RFVklDRVNdOworfSBjaXN0cGxfZGV2aWNlX3Q7CisKKyNkZWZpbmUgQ0lTVFBMX0RFVklDRV9NV0FJVAkweDAxCisjZGVmaW5lIENJU1RQTF9ERVZJQ0VfM1ZDQwkweDAyCisKK3R5cGVkZWYgc3RydWN0IGNpc3RwbF9kZXZpY2Vfb190IHsKKyAgICB1X2NoYXIJCWZsYWdzOworICAgIGNpc3RwbF9kZXZpY2VfdAlkZXZpY2U7Cit9IGNpc3RwbF9kZXZpY2Vfb190OworCisjZGVmaW5lIENJU1RQTF9WRVJTXzFfTUFYX1BST0RfU1RSSU5HUwk0CisKK3R5cGVkZWYgc3RydWN0IGNpc3RwbF92ZXJzXzFfdCB7CisgICAgdV9jaGFyCW1ham9yOworICAgIHVfY2hhcgltaW5vcjsKKyAgICB1X2NoYXIJbnM7CisgICAgdV9jaGFyCW9mc1tDSVNUUExfVkVSU18xX01BWF9QUk9EX1NUUklOR1NdOworICAgIGNoYXIJc3RyWzI1NF07Cit9IGNpc3RwbF92ZXJzXzFfdDsKKwordHlwZWRlZiBzdHJ1Y3QgY2lzdHBsX2plZGVjX3QgeworICAgIHVfY2hhcgluaWQ7CisgICAgc3RydWN0IHsKKwl1X2NoYXIJbWZyOworCXVfY2hhcglpbmZvOworICAgIH0gaWRbQ0lTVFBMX01BWF9ERVZJQ0VTXTsKK30gY2lzdHBsX2plZGVjX3Q7CisKK3R5cGVkZWYgc3RydWN0IGNpc3RwbF9tYW5maWRfdCB7CisgICAgdV9zaG9ydAltYW5mOworICAgIHVfc2hvcnQJY2FyZDsKK30gY2lzdHBsX21hbmZpZF90OworCisjZGVmaW5lIENJU1RQTF9GVU5DSURfTVVMVEkJMHgwMAorI2RlZmluZSBDSVNUUExfRlVOQ0lEX01FTU9SWQkweDAxCisjZGVmaW5lIENJU1RQTF9GVU5DSURfU0VSSUFMCTB4MDIKKyNkZWZpbmUgQ0lTVFBMX0ZVTkNJRF9QQVJBTExFTAkweDAzCisjZGVmaW5lIENJU1RQTF9GVU5DSURfRklYRUQJMHgwNAorI2RlZmluZSBDSVNUUExfRlVOQ0lEX1ZJREVPCTB4MDUKKyNkZWZpbmUgQ0lTVFBMX0ZVTkNJRF9ORVRXT1JLCTB4MDYKKyNkZWZpbmUgQ0lTVFBMX0ZVTkNJRF9BSU1TCTB4MDcKKyNkZWZpbmUgQ0lTVFBMX0ZVTkNJRF9TQ1NJCTB4MDgKKworI2RlZmluZSBDSVNUUExfU1lTSU5JVF9QT1NUCTB4MDEKKyNkZWZpbmUgQ0lTVFBMX1NZU0lOSVRfUk9NCTB4MDIKKwordHlwZWRlZiBzdHJ1Y3QgY2lzdHBsX2Z1bmNpZF90IHsKKyAgICB1X2NoYXIJZnVuYzsKKyAgICB1X2NoYXIJc3lzaW5pdDsKK30gY2lzdHBsX2Z1bmNpZF90OworCit0eXBlZGVmIHN0cnVjdCBjaXN0cGxfZnVuY2VfdCB7CisgICAgdV9jaGFyCXR5cGU7CisgICAgdV9jaGFyCWRhdGFbMF07Cit9IGNpc3RwbF9mdW5jZV90OworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgIE1vZGVtIEZ1bmN0aW9uIEV4dGVuc2lvbiBUdXBsZXMKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKyNkZWZpbmUgQ0lTVFBMX0ZVTkNFX1NFUklBTF9JRgkJMHgwMAorI2RlZmluZSBDSVNUUExfRlVOQ0VfU0VSSUFMX0NBUAkJMHgwMQorI2RlZmluZSBDSVNUUExfRlVOQ0VfU0VSSUFMX1NFUlZfREFUQQkweDAyCisjZGVmaW5lIENJU1RQTF9GVU5DRV9TRVJJQUxfU0VSVl9GQVgJMHgwMworI2RlZmluZSBDSVNUUExfRlVOQ0VfU0VSSUFMX1NFUlZfVk9JQ0UJMHgwNAorI2RlZmluZSBDSVNUUExfRlVOQ0VfU0VSSUFMX0NBUF9EQVRBCTB4MDUKKyNkZWZpbmUgQ0lTVFBMX0ZVTkNFX1NFUklBTF9DQVBfRkFYCTB4MDYKKyNkZWZpbmUgQ0lTVFBMX0ZVTkNFX1NFUklBTF9DQVBfVk9JQ0UJMHgwNworI2RlZmluZSBDSVNUUExfRlVOQ0VfU0VSSUFMX0lGX0RBVEEJMHgwOAorI2RlZmluZSBDSVNUUExfRlVOQ0VfU0VSSUFMX0lGX0ZBWAkweDA5CisjZGVmaW5lIENJU1RQTF9GVU5DRV9TRVJJQUxfSUZfVk9JQ0UJMHgwYQorCisvKiBVQVJUIGlkZW50aWZpY2F0aW9uICovCisjZGVmaW5lIENJU1RQTF9TRVJJQUxfVUFSVF84MjUwCQkweDAwCisjZGVmaW5lIENJU1RQTF9TRVJJQUxfVUFSVF8xNjQ1MAkweDAxCisjZGVmaW5lIENJU1RQTF9TRVJJQUxfVUFSVF8xNjU1MAkweDAyCisjZGVmaW5lIENJU1RQTF9TRVJJQUxfVUFSVF84MjUxCQkweDAzCisjZGVmaW5lIENJU1RQTF9TRVJJQUxfVUFSVF84NTMwCQkweDA0CisjZGVmaW5lIENJU1RQTF9TRVJJQUxfVUFSVF84NTIzMAkweDA1CisKKy8qIFVBUlQgY2FwYWJpbGl0aWVzICovCisjZGVmaW5lIENJU1RQTF9TRVJJQUxfVUFSVF9TUEFDRQkweDAxCisjZGVmaW5lIENJU1RQTF9TRVJJQUxfVUFSVF9NQVJLCQkweDAyCisjZGVmaW5lIENJU1RQTF9TRVJJQUxfVUFSVF9PREQJCTB4MDQKKyNkZWZpbmUgQ0lTVFBMX1NFUklBTF9VQVJUX0VWRU4JCTB4MDgKKyNkZWZpbmUgQ0lTVFBMX1NFUklBTF9VQVJUXzVCSVQJCTB4MDEKKyNkZWZpbmUgQ0lTVFBMX1NFUklBTF9VQVJUXzZCSVQJCTB4MDIKKyNkZWZpbmUgQ0lTVFBMX1NFUklBTF9VQVJUXzdCSVQJCTB4MDQKKyNkZWZpbmUgQ0lTVFBMX1NFUklBTF9VQVJUXzhCSVQJCTB4MDgKKyNkZWZpbmUgQ0lTVFBMX1NFUklBTF9VQVJUXzFTVE9QCTB4MTAKKyNkZWZpbmUgQ0lTVFBMX1NFUklBTF9VQVJUX01TVE9QCTB4MjAKKyNkZWZpbmUgQ0lTVFBMX1NFUklBTF9VQVJUXzJTVE9QCTB4NDAKKwordHlwZWRlZiBzdHJ1Y3QgY2lzdHBsX3NlcmlhbF90IHsKKyAgICB1X2NoYXIJdWFydF90eXBlOworICAgIHVfY2hhcgl1YXJ0X2NhcF8wOworICAgIHVfY2hhcgl1YXJ0X2NhcF8xOworfSBjaXN0cGxfc2VyaWFsX3Q7CisKK3R5cGVkZWYgc3RydWN0IGNpc3RwbF9tb2RlbV9jYXBfdCB7CisgICAgdV9jaGFyCWZsb3c7CisgICAgdV9jaGFyCWNtZF9idWY7CisgICAgdV9jaGFyCXJjdl9idWZfMCwgcmN2X2J1Zl8xLCByY3ZfYnVmXzI7CisgICAgdV9jaGFyCXhtaXRfYnVmXzAsIHhtaXRfYnVmXzEsIHhtaXRfYnVmXzI7Cit9IGNpc3RwbF9tb2RlbV9jYXBfdDsKKworI2RlZmluZSBDSVNUUExfU0VSSUFMX01PRF8xMDMJCTB4MDEKKyNkZWZpbmUgQ0lTVFBMX1NFUklBTF9NT0RfVjIxCQkweDAyCisjZGVmaW5lIENJU1RQTF9TRVJJQUxfTU9EX1YyMwkJMHgwNAorI2RlZmluZSBDSVNUUExfU0VSSUFMX01PRF9WMjIJCTB4MDgKKyNkZWZpbmUgQ0lTVFBMX1NFUklBTF9NT0RfMjEyQQkJMHgxMAorI2RlZmluZSBDSVNUUExfU0VSSUFMX01PRF9WMjJCSVMJMHgyMAorI2RlZmluZSBDSVNUUExfU0VSSUFMX01PRF9WMjYJCTB4NDAKKyNkZWZpbmUgQ0lTVFBMX1NFUklBTF9NT0RfVjI2QklTCTB4ODAKKyNkZWZpbmUgQ0lTVFBMX1NFUklBTF9NT0RfVjI3QklTCTB4MDEKKyNkZWZpbmUgQ0lTVFBMX1NFUklBTF9NT0RfVjI5CQkweDAyCisjZGVmaW5lIENJU1RQTF9TRVJJQUxfTU9EX1YzMgkJMHgwNAorI2RlZmluZSBDSVNUUExfU0VSSUFMX01PRF9WMzJCSVMJMHgwOAorI2RlZmluZSBDSVNUUExfU0VSSUFMX01PRF9WMzQJCTB4MTAKKworI2RlZmluZSBDSVNUUExfU0VSSUFMX0VSUl9NTlAyXzQJMHgwMQorI2RlZmluZSBDSVNUUExfU0VSSUFMX0VSUl9WNDJfTEFQTQkweDAyCisKKyNkZWZpbmUgQ0lTVFBMX1NFUklBTF9DTVBSX1Y0MkJJUwkweDAxCisjZGVmaW5lIENJU1RQTF9TRVJJQUxfQ01QUl9NTlA1CQkweDAyCisKKyNkZWZpbmUgQ0lTVFBMX1NFUklBTF9DTURfQVQxCQkweDAxCisjZGVmaW5lIENJU1RQTF9TRVJJQUxfQ01EX0FUMgkJMHgwMgorI2RlZmluZSBDSVNUUExfU0VSSUFMX0NNRF9BVDMJCTB4MDQKKyNkZWZpbmUgQ0lTVFBMX1NFUklBTF9DTURfTU5QX0FUCTB4MDgKKyNkZWZpbmUgQ0lTVFBMX1NFUklBTF9DTURfVjI1QklTCTB4MTAKKyNkZWZpbmUgQ0lTVFBMX1NFUklBTF9DTURfVjI1QQkJMHgyMAorI2RlZmluZSBDSVNUUExfU0VSSUFMX0NNRF9ETUNMCQkweDQwCisKK3R5cGVkZWYgc3RydWN0IGNpc3RwbF9kYXRhX3NlcnZfdCB7CisgICAgdV9jaGFyCW1heF9kYXRhXzA7CisgICAgdV9jaGFyCW1heF9kYXRhXzE7CisgICAgdV9jaGFyCW1vZHVsYXRpb25fMDsKKyAgICB1X2NoYXIJbW9kdWxhdGlvbl8xOworICAgIHVfY2hhcgllcnJvcl9jb250cm9sOworICAgIHVfY2hhcgljb21wcmVzc2lvbjsKKyAgICB1X2NoYXIJY21kX3Byb3RvY29sOworICAgIHVfY2hhcgllc2NhcGU7CisgICAgdV9jaGFyCWVuY3J5cHQ7CisgICAgdV9jaGFyCW1pc2NfZmVhdHVyZXM7CisgICAgdV9jaGFyCWNjaXR0X2NvZGVbMF07Cit9IGNpc3RwbF9kYXRhX3NlcnZfdDsKKwordHlwZWRlZiBzdHJ1Y3QgY2lzdHBsX2ZheF9zZXJ2X3QgeworICAgIHVfY2hhcgltYXhfZGF0YV8wOworICAgIHVfY2hhcgltYXhfZGF0YV8xOworICAgIHVfY2hhcgltb2R1bGF0aW9uOworICAgIHVfY2hhcgllbmNyeXB0OworICAgIHVfY2hhcglmZWF0dXJlc18wOworICAgIHVfY2hhcglmZWF0dXJlc18xOworICAgIHVfY2hhcgljY2l0dF9jb2RlWzBdOworfSBjaXN0cGxfZmF4X3NlcnZfdDsKKwordHlwZWRlZiBzdHJ1Y3QgY2lzdHBsX3ZvaWNlX3NlcnZfdCB7CisgICAgdV9jaGFyCW1heF9kYXRhXzA7CisgICAgdV9jaGFyCW1heF9kYXRhXzE7Cit9IGNpc3RwbF92b2ljZV9zZXJ2X3Q7CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgTEFOIEZ1bmN0aW9uIEV4dGVuc2lvbiBUdXBsZXMKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKyNkZWZpbmUgQ0lTVFBMX0ZVTkNFX0xBTl9URUNICQkweDAxCisjZGVmaW5lIENJU1RQTF9GVU5DRV9MQU5fU1BFRUQJCTB4MDIKKyNkZWZpbmUgQ0lTVFBMX0ZVTkNFX0xBTl9NRURJQQkJMHgwMworI2RlZmluZSBDSVNUUExfRlVOQ0VfTEFOX05PREVfSUQJMHgwNAorI2RlZmluZSBDSVNUUExfRlVOQ0VfTEFOX0NPTk5FQ1RPUgkweDA1CisKKy8qIExBTiB0ZWNobm9sb2dpZXMgKi8KKyNkZWZpbmUgQ0lTVFBMX0xBTl9URUNIX0FSQ05FVAkJMHgwMQorI2RlZmluZSBDSVNUUExfTEFOX1RFQ0hfRVRIRVJORVQJMHgwMgorI2RlZmluZSBDSVNUUExfTEFOX1RFQ0hfVE9LRU5SSU5HCTB4MDMKKyNkZWZpbmUgQ0lTVFBMX0xBTl9URUNIX0xPQ0FMVEFMSwkweDA0CisjZGVmaW5lIENJU1RQTF9MQU5fVEVDSF9GRERJCQkweDA1CisjZGVmaW5lIENJU1RQTF9MQU5fVEVDSF9BVE0JCTB4MDYKKyNkZWZpbmUgQ0lTVFBMX0xBTl9URUNIX1dJUkVMRVNTCTB4MDcKKwordHlwZWRlZiBzdHJ1Y3QgY2lzdHBsX2xhbl90ZWNoX3QgeworICAgIHVfY2hhcgl0ZWNoOworfSBjaXN0cGxfbGFuX3RlY2hfdDsKKwordHlwZWRlZiBzdHJ1Y3QgY2lzdHBsX2xhbl9zcGVlZF90IHsKKyAgICB1X2ludAlzcGVlZDsKK30gY2lzdHBsX2xhbl9zcGVlZF90OworCisvKiBMQU4gbWVkaWEgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQ0lTVFBMX0xBTl9NRURJQV9VVFAJCTB4MDEKKyNkZWZpbmUgQ0lTVFBMX0xBTl9NRURJQV9TVFAJCTB4MDIKKyNkZWZpbmUgQ0lTVFBMX0xBTl9NRURJQV9USElOX0NPQVgJMHgwMworI2RlZmluZSBDSVNUUExfTEFOX01FRElBX1RISUNLX0NPQVgJMHgwNAorI2RlZmluZSBDSVNUUExfTEFOX01FRElBX0ZJQkVSCQkweDA1CisjZGVmaW5lIENJU1RQTF9MQU5fTUVESUFfOTAwTUhaCQkweDA2CisjZGVmaW5lIENJU1RQTF9MQU5fTUVESUFfMkdIWgkJMHgwNworI2RlZmluZSBDSVNUUExfTEFOX01FRElBXzVHSFoJCTB4MDgKKyNkZWZpbmUgQ0lTVFBMX0xBTl9NRURJQV9ESUZGX0lSCTB4MDkKKyNkZWZpbmUgQ0lTVFBMX0xBTl9NRURJQV9QVFBfSVIJCTB4MGEKKwordHlwZWRlZiBzdHJ1Y3QgY2lzdHBsX2xhbl9tZWRpYV90IHsKKyAgICB1X2NoYXIJbWVkaWE7Cit9IGNpc3RwbF9sYW5fbWVkaWFfdDsKKwordHlwZWRlZiBzdHJ1Y3QgY2lzdHBsX2xhbl9ub2RlX2lkX3QgeworICAgIHVfY2hhcgluYjsKKyAgICB1X2NoYXIJaWRbMTZdOworfSBjaXN0cGxfbGFuX25vZGVfaWRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgY2lzdHBsX2xhbl9jb25uZWN0b3JfdCB7CisgICAgdV9jaGFyCWNvZGU7Cit9IGNpc3RwbF9sYW5fY29ubmVjdG9yX3Q7CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgSURFIEZ1bmN0aW9uIEV4dGVuc2lvbiBUdXBsZXMKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKyNkZWZpbmUgQ0lTVFBMX0lERV9JTlRFUkZBQ0UJCTB4MDEKKwordHlwZWRlZiBzdHJ1Y3QgY2lzdHBsX2lkZV9pbnRlcmZhY2VfdCB7CisgICAgdV9jaGFyCWludGVyZmFjZTsKK30gY2lzdHBsX2lkZV9pbnRlcmZhY2VfdDsKKworLyogRmlyc3QgZmVhdHVyZSBieXRlICovCisjZGVmaW5lIENJU1RQTF9JREVfU0lMSUNPTgkJMHgwNAorI2RlZmluZSBDSVNUUExfSURFX1VOSVFVRQkJMHgwOAorI2RlZmluZSBDSVNUUExfSURFX0RVQUwJCQkweDEwCisKKy8qIFNlY29uZCBmZWF0dXJlIGJ5dGUgKi8KKyNkZWZpbmUgQ0lTVFBMX0lERV9IQVNfU0xFRVAJCTB4MDEKKyNkZWZpbmUgQ0lTVFBMX0lERV9IQVNfU1RBTkRCWQkJMHgwMgorI2RlZmluZSBDSVNUUExfSURFX0hBU19JRExFCQkweDA0CisjZGVmaW5lIENJU1RQTF9JREVfTE9XX1BPV0VSCQkweDA4CisjZGVmaW5lIENJU1RQTF9JREVfUkVHX0lOSElCSVQJCTB4MTAKKyNkZWZpbmUgQ0lTVFBMX0lERV9IQVNfSU5ERVgJCTB4MjAKKyNkZWZpbmUgQ0lTVFBMX0lERV9JT0lTMTYJCTB4NDAKKwordHlwZWRlZiBzdHJ1Y3QgY2lzdHBsX2lkZV9mZWF0dXJlX3QgeworICAgIHVfY2hhcglmZWF0dXJlMTsKKyAgICB1X2NoYXIJZmVhdHVyZTI7Cit9IGNpc3RwbF9pZGVfZmVhdHVyZV90OworCisjZGVmaW5lIENJU1RQTF9GVU5DRV9JREVfSUZBQ0UJCTB4MDEKKyNkZWZpbmUgQ0lTVFBMX0ZVTkNFX0lERV9NQVNURVIJCTB4MDIKKyNkZWZpbmUgQ0lTVFBMX0ZVTkNFX0lERV9TTEFWRQkJMHgwMworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgIENvbmZpZ3VyYXRpb24gVGFibGUgRW50cmllcworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworI2RlZmluZSBDSVNUUExfQkFSX1NQQUNFCTB4MDcKKyNkZWZpbmUgQ0lTVFBMX0JBUl9TUEFDRV9JTwkweDEwCisjZGVmaW5lIENJU1RQTF9CQVJfUFJFRkVUQ0gJMHgyMAorI2RlZmluZSBDSVNUUExfQkFSX0NBQ0hFQUJMRQkweDQwCisjZGVmaW5lIENJU1RQTF9CQVJfMU1FR19NQVAJMHg4MAorCit0eXBlZGVmIHN0cnVjdCBjaXN0cGxfYmFyX3QgeworICAgIHVfY2hhcglhdHRyOworICAgIHVfaW50CXNpemU7Cit9IGNpc3RwbF9iYXJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgY2lzdHBsX2NvbmZpZ190IHsKKyAgICB1X2NoYXIJbGFzdF9pZHg7CisgICAgdV9pbnQJYmFzZTsKKyAgICB1X2ludAlybWFza1s0XTsKKyAgICB1X2NoYXIJc3VidHVwbGVzOworfSBjaXN0cGxfY29uZmlnX3Q7CisKKy8qIFRoZXNlIGFyZSBiaXRzIGluIHRoZSAncHJlc2VudCcgZmllbGQsIGFuZCBpbmRpY2VzIGluICdwYXJhbScgKi8KKyNkZWZpbmUgQ0lTVFBMX1BPV0VSX1ZOT00JMAorI2RlZmluZSBDSVNUUExfUE9XRVJfVk1JTgkxCisjZGVmaW5lIENJU1RQTF9QT1dFUl9WTUFYCTIKKyNkZWZpbmUgQ0lTVFBMX1BPV0VSX0lTVEFUSUMJMworI2RlZmluZSBDSVNUUExfUE9XRVJfSUFWRwk0CisjZGVmaW5lIENJU1RQTF9QT1dFUl9JUEVBSwk1CisjZGVmaW5lIENJU1RQTF9QT1dFUl9JRE9XTgk2CisKKyNkZWZpbmUgQ0lTVFBMX1BPV0VSX0hJR0haX09LCTB4MDEKKyNkZWZpbmUgQ0lTVFBMX1BPV0VSX0hJR0haX1JFUQkweDAyCisKK3R5cGVkZWYgc3RydWN0IGNpc3RwbF9wb3dlcl90IHsKKyAgICB1X2NoYXIJcHJlc2VudDsKKyAgICB1X2NoYXIJZmxhZ3M7CisgICAgdV9pbnQJcGFyYW1bN107Cit9IGNpc3RwbF9wb3dlcl90OworCit0eXBlZGVmIHN0cnVjdCBjaXN0cGxfdGltaW5nX3QgeworICAgIHVfaW50CXdhaXQsIHdhaXRzY2FsZTsKKyAgICB1X2ludAlyZWFkeSwgcmR5c2NhbGU7CisgICAgdV9pbnQJcmVzZXJ2ZWQsIHJzdnNjYWxlOworfSBjaXN0cGxfdGltaW5nX3Q7CisKKyNkZWZpbmUgQ0lTVFBMX0lPX0xJTkVTX01BU0sJMHgxZgorI2RlZmluZSBDSVNUUExfSU9fOEJJVAkJMHgyMAorI2RlZmluZSBDSVNUUExfSU9fMTZCSVQJCTB4NDAKKyNkZWZpbmUgQ0lTVFBMX0lPX1JBTkdFCQkweDgwCisKKyNkZWZpbmUgQ0lTVFBMX0lPX01BWF9XSU4JMTYKKwordHlwZWRlZiBzdHJ1Y3QgY2lzdHBsX2lvX3QgeworICAgIHVfY2hhcglmbGFnczsKKyAgICB1X2NoYXIJbndpbjsKKyAgICBzdHJ1Y3QgeworCXVfaW50CWJhc2U7CisJdV9pbnQJbGVuOworICAgIH0gd2luW0NJU1RQTF9JT19NQVhfV0lOXTsKK30gY2lzdHBsX2lvX3Q7CisKK3R5cGVkZWYgc3RydWN0IGNpc3RwbF9pcnFfdCB7CisgICAgdV9pbnQJSVJRSW5mbzE7CisgICAgdV9pbnQJSVJRSW5mbzI7Cit9IGNpc3RwbF9pcnFfdDsKKworI2RlZmluZSBDSVNUUExfTUVNX01BWF9XSU4JOAorCit0eXBlZGVmIHN0cnVjdCBjaXN0cGxfbWVtX3QgeworICAgIHVfY2hhcglmbGFnczsKKyAgICB1X2NoYXIJbndpbjsKKyAgICBzdHJ1Y3QgeworCXVfaW50CWxlbjsKKwl1X2ludAljYXJkX2FkZHI7CisJdV9pbnQJaG9zdF9hZGRyOworICAgIH0gd2luW0NJU1RQTF9NRU1fTUFYX1dJTl07Cit9IGNpc3RwbF9tZW1fdDsKKworI2RlZmluZSBDSVNUUExfQ0ZUQUJMRV9ERUZBVUxUCQkweDAwMDEKKyNkZWZpbmUgQ0lTVFBMX0NGVEFCTEVfQlZEUwkJMHgwMDAyCisjZGVmaW5lIENJU1RQTF9DRlRBQkxFX1dQCQkweDAwMDQKKyNkZWZpbmUgQ0lTVFBMX0NGVEFCTEVfUkRZQlNZCQkweDAwMDgKKyNkZWZpbmUgQ0lTVFBMX0NGVEFCTEVfTVdBSVQJCTB4MDAxMAorI2RlZmluZSBDSVNUUExfQ0ZUQUJMRV9BVURJTwkJMHgwODAwCisjZGVmaW5lIENJU1RQTF9DRlRBQkxFX1JFQURPTkxZCQkweDEwMDAKKyNkZWZpbmUgQ0lTVFBMX0NGVEFCTEVfUFdSRE9XTgkJMHgyMDAwCisKK3R5cGVkZWYgc3RydWN0IGNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgeworICAgIHVfY2hhcgkJaW5kZXg7CisgICAgdV9zaG9ydAkJZmxhZ3M7CisgICAgdV9jaGFyCQlpbnRlcmZhY2U7CisgICAgY2lzdHBsX3Bvd2VyX3QJdmNjLCB2cHAxLCB2cHAyOworICAgIGNpc3RwbF90aW1pbmdfdAl0aW1pbmc7CisgICAgY2lzdHBsX2lvX3QJCWlvOworICAgIGNpc3RwbF9pcnFfdAlpcnE7CisgICAgY2lzdHBsX21lbV90CW1lbTsKKyAgICB1X2NoYXIJCXN1YnR1cGxlczsKK30gY2lzdHBsX2NmdGFibGVfZW50cnlfdDsKKworI2RlZmluZSBDSVNUUExfQ0ZUQUJMRV9NQVNURVIJCTB4MDAwMTAwCisjZGVmaW5lIENJU1RQTF9DRlRBQkxFX0lOVkFMSURBVEUJMHgwMDAyMDAKKyNkZWZpbmUgQ0lTVFBMX0NGVEFCTEVfVkdBX1BBTEVUVEUJMHgwMDA0MDAKKyNkZWZpbmUgQ0lTVFBMX0NGVEFCTEVfUEFSSVRZCQkweDAwMDgwMAorI2RlZmluZSBDSVNUUExfQ0ZUQUJMRV9XQUlUCQkweDAwMTAwMAorI2RlZmluZSBDSVNUUExfQ0ZUQUJMRV9TRVJSCQkweDAwMjAwMAorI2RlZmluZSBDSVNUUExfQ0ZUQUJMRV9GQVNUX0JBQ0sJMHgwMDQwMDAKKyNkZWZpbmUgQ0lTVFBMX0NGVEFCTEVfQklOQVJZX0FVRElPCTB4MDEwMDAwCisjZGVmaW5lIENJU1RQTF9DRlRBQkxFX1BXTV9BVURJTwkweDAyMDAwMAorCit0eXBlZGVmIHN0cnVjdCBjaXN0cGxfY2Z0YWJsZV9lbnRyeV9jYl90IHsKKyAgICB1X2NoYXIJCWluZGV4OworICAgIHVfaW50CQlmbGFnczsKKyAgICBjaXN0cGxfcG93ZXJfdAl2Y2MsIHZwcDEsIHZwcDI7CisgICAgdV9jaGFyCQlpbzsKKyAgICBjaXN0cGxfaXJxX3QJaXJxOworICAgIHVfY2hhcgkJbWVtOworICAgIHVfY2hhcgkJc3VidHVwbGVzOworfSBjaXN0cGxfY2Z0YWJsZV9lbnRyeV9jYl90OworCit0eXBlZGVmIHN0cnVjdCBjaXN0cGxfZGV2aWNlX2dlb190IHsKKyAgICB1X2NoYXIJCW5nZW87CisgICAgc3RydWN0IHsKKwl1X2NoYXIJCWJ1c3dpZHRoOworCXVfaW50CQllcmFzZV9ibG9jazsKKwl1X2ludAkJcmVhZF9ibG9jazsKKwl1X2ludAkJd3JpdGVfYmxvY2s7CisJdV9pbnQJCXBhcnRpdGlvbjsKKwl1X2ludAkJaW50ZXJsZWF2ZTsKKyAgICB9IGdlb1tDSVNUUExfTUFYX0RFVklDRVNdOworfSBjaXN0cGxfZGV2aWNlX2dlb190OworCit0eXBlZGVmIHN0cnVjdCBjaXN0cGxfdmVyc18yX3QgeworICAgIHVfY2hhcgl2ZXJzOworICAgIHVfY2hhcgljb21wbHk7CisgICAgdV9zaG9ydAlkaW5kZXg7CisgICAgdV9jaGFyCXZzcGVjOCwgdnNwZWM5OworICAgIHVfY2hhcgluaGRyOworICAgIHVfY2hhcgl2ZW5kb3IsIGluZm87CisgICAgY2hhcglzdHJbMjQ0XTsKK30gY2lzdHBsX3ZlcnNfMl90OworCit0eXBlZGVmIHN0cnVjdCBjaXN0cGxfb3JnX3QgeworICAgIHVfY2hhcglkYXRhX29yZzsKKyAgICBjaGFyCWRlc2NbMzBdOworfSBjaXN0cGxfb3JnX3Q7CisKKyNkZWZpbmUgQ0lTVFBMX09SR19GUwkJMHgwMAorI2RlZmluZSBDSVNUUExfT1JHX0FQUFNQRUMJMHgwMQorI2RlZmluZSBDSVNUUExfT1JHX1hJUAkJMHgwMgorCit0eXBlZGVmIHN0cnVjdCBjaXN0cGxfZm9ybWF0X3QgeworICAgIHVfY2hhcgl0eXBlOworICAgIHVfY2hhcgllZGM7CisgICAgdV9pbnQJb2Zmc2V0OworICAgIHVfaW50CWxlbmd0aDsKK30gY2lzdHBsX2Zvcm1hdF90OworCisjZGVmaW5lIENJU1RQTF9GT1JNQVRfRElTSwkweDAwCisjZGVmaW5lIENJU1RQTF9GT1JNQVRfTUVNCTB4MDEKKworI2RlZmluZSBDSVNUUExfRURDX05PTkUJCTB4MDAKKyNkZWZpbmUgQ0lTVFBMX0VEQ19DS1NVTQkweDAxCisjZGVmaW5lIENJU1RQTF9FRENfQ1JDCQkweDAyCisjZGVmaW5lIENJU1RQTF9FRENfUENDCQkweDAzCisKK3R5cGVkZWYgdW5pb24gY2lzcGFyc2VfdCB7CisgICAgY2lzdHBsX2RldmljZV90CQlkZXZpY2U7CisgICAgY2lzdHBsX2NoZWNrc3VtX3QJCWNoZWNrc3VtOworICAgIGNpc3RwbF9sb25nbGlua190CQlsb25nbGluazsKKyAgICBjaXN0cGxfbG9uZ2xpbmtfbWZjX3QJbG9uZ2xpbmtfbWZjOworICAgIGNpc3RwbF92ZXJzXzFfdAkJdmVyc2lvbl8xOworICAgIGNpc3RwbF9hbHRzdHJfdAkJYWx0c3RyOworICAgIGNpc3RwbF9qZWRlY190CQlqZWRlYzsKKyAgICBjaXN0cGxfbWFuZmlkX3QJCW1hbmZpZDsKKyAgICBjaXN0cGxfZnVuY2lkX3QJCWZ1bmNpZDsKKyAgICBjaXN0cGxfZnVuY2VfdAkJZnVuY2U7CisgICAgY2lzdHBsX2Jhcl90CQliYXI7CisgICAgY2lzdHBsX2NvbmZpZ190CQljb25maWc7CisgICAgY2lzdHBsX2NmdGFibGVfZW50cnlfdAljZnRhYmxlX2VudHJ5OworICAgIGNpc3RwbF9jZnRhYmxlX2VudHJ5X2NiX3QJY2Z0YWJsZV9lbnRyeV9jYjsKKyAgICBjaXN0cGxfZGV2aWNlX2dlb190CQlkZXZpY2VfZ2VvOworICAgIGNpc3RwbF92ZXJzXzJfdAkJdmVyc18yOworICAgIGNpc3RwbF9vcmdfdAkJb3JnOworICAgIGNpc3RwbF9mb3JtYXRfdAkJZm9ybWF0OworfSBjaXNwYXJzZV90OworCit0eXBlZGVmIHN0cnVjdCB0dXBsZV90IHsKKyAgICB1X2ludAlBdHRyaWJ1dGVzOworICAgIGNpc2RhdGFfdCAJRGVzaXJlZFR1cGxlOworICAgIHVfaW50CUZsYWdzOwkJLyogaW50ZXJuYWwgdXNlICovCisgICAgdV9pbnQJTGlua09mZnNldDsJLyogaW50ZXJuYWwgdXNlICovCisgICAgdV9pbnQJQ0lTT2Zmc2V0OwkvKiBpbnRlcm5hbCB1c2UgKi8KKyAgICBjaXNkYXRhX3QJVHVwbGVDb2RlOworICAgIGNpc2RhdGFfdAlUdXBsZUxpbms7CisgICAgY2lzZGF0YV90CVR1cGxlT2Zmc2V0OworICAgIGNpc2RhdGFfdAlUdXBsZURhdGFNYXg7CisgICAgY2lzZGF0YV90CVR1cGxlRGF0YUxlbjsKKyAgICBjaXNkYXRhX3QJKlR1cGxlRGF0YTsKK30gdHVwbGVfdDsKKworLyogU3BlY2lhbCBjaXNkYXRhX3QgdmFsdWUgKi8KKyNkZWZpbmUgUkVUVVJOX0ZJUlNUX1RVUExFCTB4ZmYKKworLyogQXR0cmlidXRlcyBmb3IgdHVwbGUgY2FsbHMgKi8KKyNkZWZpbmUgVFVQTEVfUkVUVVJOX0xJTksJMHgwMQorI2RlZmluZSBUVVBMRV9SRVRVUk5fQ09NTU9OCTB4MDIKKworLyogRm9yIFZhbGlkYXRlQ0lTICovCit0eXBlZGVmIHN0cnVjdCBjaXNpbmZvX3QgeworICAgIHVfaW50CUNoYWluczsKK30gY2lzaW5mb190OworCisjZGVmaW5lIENJU1RQTF9NQVhfQ0lTX1NJWkUJMHgyMDAKKworLyogRm9yIFJlcGxhY2VDSVMgKi8KK3R5cGVkZWYgc3RydWN0IGNpc2R1bXBfdCB7CisgICAgdV9pbnQJTGVuZ3RoOworICAgIGNpc2RhdGFfdAlEYXRhW0NJU1RQTF9NQVhfQ0lTX1NJWkVdOworfSBjaXNkdW1wX3Q7CisKK2ludCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGNsaWVudF9oYW5kbGVfdCBoYW5kbGUsIHR1cGxlX3QgKnR1cGxlKTsKK2ludCBwY21jaWFfZ2V0X25leHRfdHVwbGUoY2xpZW50X2hhbmRsZV90IGhhbmRsZSwgdHVwbGVfdCAqdHVwbGUpOworaW50IHBjbWNpYV9nZXRfdHVwbGVfZGF0YShjbGllbnRfaGFuZGxlX3QgaGFuZGxlLCB0dXBsZV90ICp0dXBsZSk7CitpbnQgcGNtY2lhX3BhcnNlX3R1cGxlKGNsaWVudF9oYW5kbGVfdCBoYW5kbGUsIHR1cGxlX3QgKnR1cGxlLCBjaXNwYXJzZV90ICpwYXJzZSk7CisKK2ludCBwY21jaWFfdmFsaWRhdGVfY2lzKGNsaWVudF9oYW5kbGVfdCBoYW5kbGUsIGNpc2luZm9fdCAqaW5mbyk7CitpbnQgcGNtY2lhX3JlcGxhY2VfY2lzKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBjaXNkdW1wX3QgKmNpcyk7CisKKy8qIGRvbid0IHVzZSBvdXRzaWRlIG9mIFBDTUNJQSBjb3JlIHlldCAqLworaW50IHBjY2FyZF9nZXRfbmV4dF90dXBsZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgdW5zaWduZWQgaW50IGZ1bmMsIHR1cGxlX3QgKnR1cGxlKTsKK2ludCBwY2NhcmRfZ2V0X2ZpcnN0X3R1cGxlKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB1bnNpZ25lZCBpbnQgZnVuY3Rpb24sIHR1cGxlX3QgKnR1cGxlKTsKK2ludCBwY2NhcmRfZ2V0X3R1cGxlX2RhdGEoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHR1cGxlX3QgKnR1cGxlKTsKK2ludCBwY2NhcmRfcGFyc2VfdHVwbGUodHVwbGVfdCAqdHVwbGUsIGNpc3BhcnNlX3QgKnBhcnNlKTsKKworaW50IHBjY2FyZF92YWxpZGF0ZV9jaXMoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGludCBmdW5jdGlvbiwgY2lzaW5mb190ICppbmZvKTsKKworI2VuZGlmIC8qIExJTlVYX0NJU1RQTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3BjbWNpYS9jcy5oIGIvaW5jbHVkZS9wY21jaWEvY3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDg2NDNhZGMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3BjbWNpYS9jcy5oCkBAIC0wLDAgKzEsNDI3IEBACisvKgorICogY3MuaAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhlIGluaXRpYWwgZGV2ZWxvcGVyIG9mIHRoZSBvcmlnaW5hbCBjb2RlIGlzIERhdmlkIEEuIEhpbmRzCisgKiA8ZGFoaW5kc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+LiAgUG9ydGlvbnMgY3JlYXRlZCBieSBEYXZpZCBBLiBIaW5kcworICogYXJlIENvcHlyaWdodCAoQykgMTk5OSBEYXZpZCBBLiBIaW5kcy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogKEMpIDE5OTkgICAgICAgICAgICAgRGF2aWQgQS4gSGluZHMKKyAqLworCisjaWZuZGVmIF9MSU5VWF9DU19ICisjZGVmaW5lIF9MSU5VWF9DU19ICisKKy8qIEZvciBBY2Nlc3NDb25maWd1cmF0aW9uUmVnaXN0ZXIgKi8KK3R5cGVkZWYgc3RydWN0IGNvbmZfcmVnX3QgeworICAgIHVfY2hhcglGdW5jdGlvbjsKKyAgICB1X2ludAlBY3Rpb247CisgICAgb2ZmX3QJT2Zmc2V0OworICAgIHVfaW50CVZhbHVlOworfSBjb25mX3JlZ190OworCisvKiBBY3Rpb25zICovCisjZGVmaW5lIENTX1JFQUQJCTEKKyNkZWZpbmUgQ1NfV1JJVEUJMgorCisvKiBmb3IgQWRqdXN0UmVzb3VyY2VJbmZvICovCit0eXBlZGVmIHN0cnVjdCBhZGp1c3RfdCB7CisgICAgdV9pbnQJQWN0aW9uOworICAgIHVfaW50CVJlc291cmNlOworICAgIHVfaW50CUF0dHJpYnV0ZXM7CisgICAgdW5pb24geworCXN0cnVjdCBtZW1vcnkgeworCSAgICB1X2xvbmcJQmFzZTsKKwkgICAgdV9sb25nCVNpemU7CisJfSBtZW1vcnk7CisJc3RydWN0IGlvIHsKKwkgICAgaW9hZGRyX3QJQmFzZVBvcnQ7CisJICAgIGlvYWRkcl90CU51bVBvcnRzOworCSAgICB1X2ludAlJT0FkZHJMaW5lczsKKwl9IGlvOworCXN0cnVjdCBpcnEgeworCSAgICB1X2ludAlJUlE7CisJfSBpcnE7CisgICAgfSByZXNvdXJjZTsKK30gYWRqdXN0X3Q7CisKKy8qIEFjdGlvbiBmaWVsZCAqLworI2RlZmluZSBSRU1PVkVfTUFOQUdFRF9SRVNPVVJDRQkJMQorI2RlZmluZSBBRERfTUFOQUdFRF9SRVNPVVJDRQkJMgorI2RlZmluZSBHRVRfRklSU1RfTUFOQUdFRF9SRVNPVVJDRQkzCisjZGVmaW5lIEdFVF9ORVhUX01BTkFHRURfUkVTT1VSQ0UJNAorLyogUmVzb3VyY2UgZmllbGQgKi8KKyNkZWZpbmUgUkVTX01FTU9SWV9SQU5HRQkJMQorI2RlZmluZSBSRVNfSU9fUkFOR0UJCQkyCisjZGVmaW5lIFJFU19JUlEJCQkJMworLyogQXR0cmlidXRlIGZpZWxkICovCisjZGVmaW5lIFJFU19JUlFfVFlQRQkJCTB4MDMKKyNkZWZpbmUgUkVTX0lSUV9UWVBFX0VYQ0xVU0lWRQkJMAorI2RlZmluZSBSRVNfSVJRX1RZUEVfVElNRQkJMQorI2RlZmluZSBSRVNfSVJRX1RZUEVfRFlOQU1JQwkJMgorI2RlZmluZSBSRVNfSVJRX0NTQwkJCTB4MDQKKyNkZWZpbmUgUkVTX1NIQVJFRAkJCTB4MDgKKyNkZWZpbmUgUkVTX1JFU0VSVkVECQkJMHgxMAorI2RlZmluZSBSRVNfQUxMT0NBVEVECQkJMHgyMAorI2RlZmluZSBSRVNfUkVNT1ZFRAkJCTB4NDAKKwordHlwZWRlZiBzdHJ1Y3Qgc2VydmluZm9fdCB7CisgICAgY2hhcglTaWduYXR1cmVbMl07CisgICAgdV9pbnQJQ291bnQ7CisgICAgdV9pbnQJUmV2aXNpb247CisgICAgdV9pbnQJQ1NMZXZlbDsKKyAgICBjaGFyCSpWZW5kb3JTdHJpbmc7Cit9IHNlcnZpbmZvX3Q7CisKK3R5cGVkZWYgc3RydWN0IGV2ZW50X2NhbGxiYWNrX2FyZ3NfdCB7CisgICAgY2xpZW50X2hhbmRsZV90IGNsaWVudF9oYW5kbGU7CisgICAgdm9pZAkqaW5mbzsKKyAgICB2b2lkCSptdGRyZXF1ZXN0OworICAgIHZvaWQJKmJ1ZmZlcjsKKyAgICB2b2lkCSptaXNjOworICAgIHZvaWQJKmNsaWVudF9kYXRhOworfSBldmVudF9jYWxsYmFja19hcmdzX3Q7CisKKy8qIGZvciBHZXRDb25maWd1cmF0aW9uSW5mbyAqLwordHlwZWRlZiBzdHJ1Y3QgY29uZmlnX2luZm9fdCB7CisgICAgdV9jaGFyCUZ1bmN0aW9uOworICAgIHVfaW50CUF0dHJpYnV0ZXM7CisgICAgdV9pbnQJVmNjLCBWcHAxLCBWcHAyOworICAgIHVfaW50CUludFR5cGU7CisgICAgdV9pbnQJQ29uZmlnQmFzZTsKKyAgICB1X2NoYXIJU3RhdHVzLCBQaW4sIENvcHksIE9wdGlvbiwgRXh0U3RhdHVzOworICAgIHVfaW50CVByZXNlbnQ7CisgICAgdV9pbnQJQ2FyZFZhbHVlczsKKyAgICB1X2ludAlBc3NpZ25lZElSUTsKKyAgICB1X2ludAlJUlFBdHRyaWJ1dGVzOworICAgIGlvYWRkcl90CUJhc2VQb3J0MTsKKyAgICBpb2FkZHJfdAlOdW1Qb3J0czE7CisgICAgdV9pbnQJQXR0cmlidXRlczE7CisgICAgaW9hZGRyX3QJQmFzZVBvcnQyOworICAgIGlvYWRkcl90CU51bVBvcnRzMjsKKyAgICB1X2ludAlBdHRyaWJ1dGVzMjsKKyAgICB1X2ludAlJT0FkZHJMaW5lczsKK30gY29uZmlnX2luZm9fdDsKKworLyogRm9yIENhcmRWYWx1ZXMgZmllbGQgKi8KKyNkZWZpbmUgQ1ZfT1BUSU9OX1ZBTFVFCQkweDAxCisjZGVmaW5lIENWX1NUQVRVU19WQUxVRQkJMHgwMgorI2RlZmluZSBDVl9QSU5fUkVQTEFDRU1FTlQJMHgwNAorI2RlZmluZSBDVl9DT1BZX1ZBTFVFCQkweDA4CisjZGVmaW5lIENWX0VYVF9TVEFUVVMJCTB4MTAKKworLyogRm9yIEdldEZpcnN0L05leHRDbGllbnQgKi8KK3R5cGVkZWYgc3RydWN0IGNsaWVudF9yZXFfdCB7CisgICAgc29ja2V0X3QJU29ja2V0OworICAgIHVfaW50CUF0dHJpYnV0ZXM7Cit9IGNsaWVudF9yZXFfdDsKKworI2RlZmluZSBDTElFTlRfVEhJU19TT0NLRVQJMHgwMQorCisvKiBGb3IgUmVnaXN0ZXJDbGllbnQgKi8KK3R5cGVkZWYgc3RydWN0IGNsaWVudF9yZWdfdCB7CisgICAgZGV2X2luZm9fdAkqZGV2X2luZm87CisgICAgdV9pbnQJQXR0cmlidXRlczsgIC8qIFVOVVNFRCAqLworICAgIHVfaW50CUV2ZW50TWFzazsKKyAgICBpbnQJCSgqZXZlbnRfaGFuZGxlcikoZXZlbnRfdCBldmVudCwgaW50IHByaW9yaXR5LAorCQkJCSBldmVudF9jYWxsYmFja19hcmdzX3QgKik7CisgICAgZXZlbnRfY2FsbGJhY2tfYXJnc190IGV2ZW50X2NhbGxiYWNrX2FyZ3M7CisgICAgdV9pbnQJVmVyc2lvbjsKK30gY2xpZW50X3JlZ190OworCisvKiBNb2RpZnlDb25maWd1cmF0aW9uICovCit0eXBlZGVmIHN0cnVjdCBtb2Rjb25mX3QgeworICAgIHVfaW50CUF0dHJpYnV0ZXM7CisgICAgdV9pbnQJVmNjLCBWcHAxLCBWcHAyOworfSBtb2Rjb25mX3Q7CisKKy8qIEF0dHJpYnV0ZXMgZm9yIE1vZGlmeUNvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgQ09ORl9JUlFfQ0hBTkdFX1ZBTElECTB4MTAwCisjZGVmaW5lIENPTkZfVkNDX0NIQU5HRV9WQUxJRAkweDIwMAorI2RlZmluZSBDT05GX1ZQUDFfQ0hBTkdFX1ZBTElECTB4NDAwCisjZGVmaW5lIENPTkZfVlBQMl9DSEFOR0VfVkFMSUQJMHg4MDAKKworLyogRm9yIFJlcXVlc3RDb25maWd1cmF0aW9uICovCit0eXBlZGVmIHN0cnVjdCBjb25maWdfcmVxX3QgeworICAgIHVfaW50CUF0dHJpYnV0ZXM7CisgICAgdV9pbnQJVmNjLCBWcHAxLCBWcHAyOworICAgIHVfaW50CUludFR5cGU7CisgICAgdV9pbnQJQ29uZmlnQmFzZTsKKyAgICB1X2NoYXIJU3RhdHVzLCBQaW4sIENvcHksIEV4dFN0YXR1czsKKyAgICB1X2NoYXIJQ29uZmlnSW5kZXg7CisgICAgdV9pbnQJUHJlc2VudDsKK30gY29uZmlnX3JlcV90OworCisvKiBBdHRyaWJ1dGVzIGZvciBSZXF1ZXN0Q29uZmlndXJhdGlvbiAqLworI2RlZmluZSBDT05GX0VOQUJMRV9JUlEJCTB4MDEKKyNkZWZpbmUgQ09ORl9FTkFCTEVfRE1BCQkweDAyCisjZGVmaW5lIENPTkZfRU5BQkxFX1NQS1IJMHgwNAorI2RlZmluZSBDT05GX1ZBTElEX0NMSUVOVAkweDEwMAorCisvKiBJbnRUeXBlIGZpZWxkICovCisjZGVmaW5lIElOVF9NRU1PUlkJCTB4MDEKKyNkZWZpbmUgSU5UX01FTU9SWV9BTkRfSU8JMHgwMgorI2RlZmluZSBJTlRfQ0FSREJVUwkJMHgwNAorI2RlZmluZSBJTlRfWk9PTUVEX1ZJREVPCTB4MDgKKworLyogRm9yIFJlcXVlc3RJTyBhbmQgUmVsZWFzZUlPICovCit0eXBlZGVmIHN0cnVjdCBpb19yZXFfdCB7CisgICAgaW9hZGRyX3QJQmFzZVBvcnQxOworICAgIGlvYWRkcl90CU51bVBvcnRzMTsKKyAgICB1X2ludAlBdHRyaWJ1dGVzMTsKKyAgICBpb2FkZHJfdAlCYXNlUG9ydDI7CisgICAgaW9hZGRyX3QJTnVtUG9ydHMyOworICAgIHVfaW50CUF0dHJpYnV0ZXMyOworICAgIHVfaW50CUlPQWRkckxpbmVzOworfSBpb19yZXFfdDsKKworLyogQXR0cmlidXRlcyBmb3IgUmVxdWVzdElPIGFuZCBSZWxlYXNlSU8gKi8KKyNkZWZpbmUgSU9fU0hBUkVECQkweDAxCisjZGVmaW5lIElPX0ZJUlNUX1NIQVJFRAkJMHgwMgorI2RlZmluZSBJT19GT1JDRV9BTElBU19BQ0NFU1MJMHgwNAorI2RlZmluZSBJT19EQVRBX1BBVEhfV0lEVEgJMHgxOAorI2RlZmluZSBJT19EQVRBX1BBVEhfV0lEVEhfOAkweDAwCisjZGVmaW5lIElPX0RBVEFfUEFUSF9XSURUSF8xNgkweDA4CisjZGVmaW5lIElPX0RBVEFfUEFUSF9XSURUSF9BVVRPCTB4MTAKKworLyogRm9yIFJlcXVlc3RJUlEgYW5kIFJlbGVhc2VJUlEgKi8KK3R5cGVkZWYgc3RydWN0IGlycV9yZXFfdCB7CisgICAgdV9pbnQJQXR0cmlidXRlczsKKyAgICB1X2ludAlBc3NpZ25lZElSUTsKKyAgICB1X2ludAlJUlFJbmZvMSwgSVJRSW5mbzI7IC8qIElSUUluZm8yIGlzIGlnbm9yZWQgKi8KKyAgICB2b2lkCSpIYW5kbGVyOworICAgIHZvaWQJKkluc3RhbmNlOworfSBpcnFfcmVxX3Q7CisKKy8qIEF0dHJpYnV0ZXMgZm9yIFJlcXVlc3RJUlEgYW5kIFJlbGVhc2VJUlEgKi8KKyNkZWZpbmUgSVJRX1RZUEUJCQkweDAzCisjZGVmaW5lIElSUV9UWVBFX0VYQ0xVU0lWRQkJMHgwMAorI2RlZmluZSBJUlFfVFlQRV9USU1FCQkJMHgwMQorI2RlZmluZSBJUlFfVFlQRV9EWU5BTUlDX1NIQVJJTkcJMHgwMgorI2RlZmluZSBJUlFfRk9SQ0VEX1BVTFNFCQkweDA0CisjZGVmaW5lIElSUV9GSVJTVF9TSEFSRUQJCTB4MDgKKyNkZWZpbmUgSVJRX0hBTkRMRV9QUkVTRU5UCQkweDEwCisjZGVmaW5lIElSUV9QVUxTRV9BTExPQ0FURUQJCTB4MTAwCisKKy8qIEJpdHMgaW4gSVJRSW5mbzEgZmllbGQgKi8KKyNkZWZpbmUgSVJRX01BU0sJCTB4MGYKKyNkZWZpbmUgSVJRX05NSV9JRAkJMHgwMQorI2RlZmluZSBJUlFfSU9DS19JRAkJMHgwMgorI2RlZmluZSBJUlFfQkVSUl9JRAkJMHgwNAorI2RlZmluZSBJUlFfVkVORF9JRAkJMHgwOAorI2RlZmluZSBJUlFfSU5GTzJfVkFMSUQJCTB4MTAKKyNkZWZpbmUgSVJRX0xFVkVMX0lECQkweDIwCisjZGVmaW5lIElSUV9QVUxTRV9JRAkJMHg0MAorI2RlZmluZSBJUlFfU0hBUkVfSUQJCTB4ODAKKwordHlwZWRlZiBzdHJ1Y3QgZXZlbnRtYXNrX3QgeworICAgIHVfaW50CUF0dHJpYnV0ZXM7CisgICAgdV9pbnQJRXZlbnRNYXNrOworfSBldmVudG1hc2tfdDsKKworI2RlZmluZSBDT05GX0VWRU5UX01BU0tfVkFMSUQJMHgwMQorCisvKiBDb25maWd1cmF0aW9uIHJlZ2lzdGVycyBwcmVzZW50ICovCisjZGVmaW5lIFBSRVNFTlRfT1BUSU9OCQkweDAwMQorI2RlZmluZSBQUkVTRU5UX1NUQVRVUwkJMHgwMDIKKyNkZWZpbmUgUFJFU0VOVF9QSU5fUkVQTEFDRQkweDAwNAorI2RlZmluZSBQUkVTRU5UX0NPUFkJCTB4MDA4CisjZGVmaW5lIFBSRVNFTlRfRVhUX1NUQVRVUwkweDAxMAorI2RlZmluZSBQUkVTRU5UX0lPQkFTRV8wCTB4MDIwCisjZGVmaW5lIFBSRVNFTlRfSU9CQVNFXzEJMHgwNDAKKyNkZWZpbmUgUFJFU0VOVF9JT0JBU0VfMgkweDA4MAorI2RlZmluZSBQUkVTRU5UX0lPQkFTRV8zCTB4MTAwCisjZGVmaW5lIFBSRVNFTlRfSU9TSVpFCQkweDIwMAorCisvKiBGb3IgR2V0TWVtUGFnZSwgTWFwTWVtUGFnZSAqLwordHlwZWRlZiBzdHJ1Y3QgbWVtcmVxX3QgeworICAgIHVfaW50CUNhcmRPZmZzZXQ7CisgICAgcGFnZV90CVBhZ2U7Cit9IG1lbXJlcV90OworCisvKiBGb3IgTW9kaWZ5V2luZG93ICovCit0eXBlZGVmIHN0cnVjdCBtb2R3aW5fdCB7CisgICAgdV9pbnQJQXR0cmlidXRlczsKKyAgICB1X2ludAlBY2Nlc3NTcGVlZDsKK30gbW9kd2luX3Q7CisKKy8qIEZvciBSZXF1ZXN0V2luZG93ICovCit0eXBlZGVmIHN0cnVjdCB3aW5fcmVxX3QgeworICAgIHVfaW50CUF0dHJpYnV0ZXM7CisgICAgdV9sb25nCUJhc2U7CisgICAgdV9pbnQJU2l6ZTsKKyAgICB1X2ludAlBY2Nlc3NTcGVlZDsKK30gd2luX3JlcV90OworCisvKiBBdHRyaWJ1dGVzIGZvciBSZXF1ZXN0V2luZG93ICovCisjZGVmaW5lIFdJTl9BRERSX1NQQUNFCQkweDAwMDEKKyNkZWZpbmUgV0lOX0FERFJfU1BBQ0VfTUVNCTB4MDAwMAorI2RlZmluZSBXSU5fQUREUl9TUEFDRV9JTwkweDAwMDEKKyNkZWZpbmUgV0lOX01FTU9SWV9UWVBFCQkweDAwMDIKKyNkZWZpbmUgV0lOX01FTU9SWV9UWVBFX0NNCTB4MDAwMAorI2RlZmluZSBXSU5fTUVNT1JZX1RZUEVfQU0JMHgwMDAyCisjZGVmaW5lIFdJTl9FTkFCTEUJCTB4MDAwNAorI2RlZmluZSBXSU5fREFUQV9XSURUSAkJMHgwMDE4CisjZGVmaW5lIFdJTl9EQVRBX1dJRFRIXzgJMHgwMDAwCisjZGVmaW5lIFdJTl9EQVRBX1dJRFRIXzE2CTB4MDAwOAorI2RlZmluZSBXSU5fREFUQV9XSURUSF8zMgkweDAwMTAKKyNkZWZpbmUgV0lOX1BBR0VECQkweDAwMjAKKyNkZWZpbmUgV0lOX1NIQVJFRAkJMHgwMDQwCisjZGVmaW5lIFdJTl9GSVJTVF9TSEFSRUQJMHgwMDgwCisjZGVmaW5lIFdJTl9VU0VfV0FJVAkJMHgwMTAwCisjZGVmaW5lIFdJTl9TVFJJQ1RfQUxJR04JMHgwMjAwCisjZGVmaW5lIFdJTl9NQVBfQkVMT1dfMU1CCTB4MDQwMAorI2RlZmluZSBXSU5fUFJFRkVUQ0gJCTB4MDgwMAorI2RlZmluZSBXSU5fQ0FDSEVBQkxFCQkweDEwMDAKKyNkZWZpbmUgV0lOX0JBUl9NQVNLCQkweGUwMDAKKyNkZWZpbmUgV0lOX0JBUl9TSElGVAkJMTMKKworLyogQXR0cmlidXRlcyBmb3IgUmVnaXN0ZXJDbGllbnQgLS0gVU5VU0VEIC0tICovCisjZGVmaW5lIElORk9fTUFTVEVSX0NMSUVOVAkweDAxCisjZGVmaW5lIElORk9fSU9fQ0xJRU5UCQkweDAyCisjZGVmaW5lIElORk9fTVREX0NMSUVOVAkJMHgwNAorI2RlZmluZSBJTkZPX01FTV9DTElFTlQJCTB4MDgKKyNkZWZpbmUgTUFYX05VTV9DTElFTlRTCQkzCisKKyNkZWZpbmUgSU5GT19DQVJEX1NIQVJFCQkweDEwCisjZGVmaW5lIElORk9fQ0FSRF9FWENMCQkweDIwCisKK3R5cGVkZWYgc3RydWN0IGNzX3N0YXR1c190IHsKKyAgICB1X2NoYXIJRnVuY3Rpb247CisgICAgZXZlbnRfdCAJQ2FyZFN0YXRlOworICAgIGV2ZW50X3QJU29ja2V0U3RhdGU7Cit9IGNzX3N0YXR1c190OworCit0eXBlZGVmIHN0cnVjdCBlcnJvcl9pbmZvX3QgeworICAgIGludAkJZnVuYzsKKyAgICBpbnQJCXJldGNvZGU7Cit9IGVycm9yX2luZm9fdDsKKworLyogRmxhZyB0byBiaW5kIHRvIGFsbCBmdW5jdGlvbnMgKi8KKyNkZWZpbmUgQklORF9GTl9BTEwJMHhmZgorCisvKiBFdmVudHMgKi8KKyNkZWZpbmUgQ1NfRVZFTlRfUFJJX0xPVwkJMAorI2RlZmluZSBDU19FVkVOVF9QUklfSElHSAkJMQorCisjZGVmaW5lIENTX0VWRU5UX1dSSVRFX1BST1RFQ1QJCTB4MDAwMDAxCisjZGVmaW5lIENTX0VWRU5UX0NBUkRfTE9DSwkJMHgwMDAwMDIKKyNkZWZpbmUgQ1NfRVZFTlRfQ0FSRF9JTlNFUlRJT04JCTB4MDAwMDA0CisjZGVmaW5lIENTX0VWRU5UX0NBUkRfUkVNT1ZBTAkJMHgwMDAwMDgKKyNkZWZpbmUgQ1NfRVZFTlRfQkFUVEVSWV9ERUFECQkweDAwMDAxMAorI2RlZmluZSBDU19FVkVOVF9CQVRURVJZX0xPVwkJMHgwMDAwMjAKKyNkZWZpbmUgQ1NfRVZFTlRfUkVBRFlfQ0hBTkdFCQkweDAwMDA0MAorI2RlZmluZSBDU19FVkVOVF9DQVJEX0RFVEVDVAkJMHgwMDAwODAKKyNkZWZpbmUgQ1NfRVZFTlRfUkVTRVRfUkVRVUVTVAkJMHgwMDAxMDAKKyNkZWZpbmUgQ1NfRVZFTlRfUkVTRVRfUEhZU0lDQUwJCTB4MDAwMjAwCisjZGVmaW5lIENTX0VWRU5UX0NBUkRfUkVTRVQJCTB4MDAwNDAwCisjZGVmaW5lIENTX0VWRU5UX1JFR0lTVFJBVElPTl9DT01QTEVURQkweDAwMDgwMAorI2RlZmluZSBDU19FVkVOVF9QTV9TVVNQRU5ECQkweDAwMjAwMAorI2RlZmluZSBDU19FVkVOVF9QTV9SRVNVTUUJCTB4MDA0MDAwCisjZGVmaW5lIENTX0VWRU5UX0lOU0VSVElPTl9SRVFVRVNUCTB4MDA4MDAwCisjZGVmaW5lIENTX0VWRU5UX0VKRUNUSU9OX1JFUVVFU1QJMHgwMTAwMDAKKyNkZWZpbmUgQ1NfRVZFTlRfTVREX1JFUVVFU1QJCTB4MDIwMDAwCisjZGVmaW5lIENTX0VWRU5UX0VSQVNFX0NPTVBMRVRFCQkweDA0MDAwMAorI2RlZmluZSBDU19FVkVOVF9SRVFVRVNUX0FUVEVOVElPTgkweDA4MDAwMAorI2RlZmluZSBDU19FVkVOVF9DQl9ERVRFQ1QJCTB4MTAwMDAwCisjZGVmaW5lIENTX0VWRU5UXzNWQ0FSRAkJCTB4MjAwMDAwCisjZGVmaW5lIENTX0VWRU5UX1hWQ0FSRAkJCTB4NDAwMDAwCisKKy8qIFJldHVybiBjb2RlcyAqLworI2RlZmluZSBDU19TVUNDRVNTCQkweDAwCisjZGVmaW5lIENTX0JBRF9BREFQVEVSCQkweDAxCisjZGVmaW5lIENTX0JBRF9BVFRSSUJVVEUJMHgwMgorI2RlZmluZSBDU19CQURfQkFTRQkJMHgwMworI2RlZmluZSBDU19CQURfRURDCQkweDA0CisjZGVmaW5lIENTX0JBRF9JUlEJCTB4MDYKKyNkZWZpbmUgQ1NfQkFEX09GRlNFVAkJMHgwNworI2RlZmluZSBDU19CQURfUEFHRQkJMHgwOAorI2RlZmluZSBDU19SRUFEX0ZBSUxVUkUJCTB4MDkKKyNkZWZpbmUgQ1NfQkFEX1NJWkUJCTB4MGEKKyNkZWZpbmUgQ1NfQkFEX1NPQ0tFVAkJMHgwYgorI2RlZmluZSBDU19CQURfVFlQRQkJMHgwZAorI2RlZmluZSBDU19CQURfVkNDCQkweDBlCisjZGVmaW5lIENTX0JBRF9WUFAJCTB4MGYKKyNkZWZpbmUgQ1NfQkFEX1dJTkRPVwkJMHgxMQorI2RlZmluZSBDU19XUklURV9GQUlMVVJFCTB4MTIKKyNkZWZpbmUgQ1NfTk9fQ0FSRAkJMHgxNAorI2RlZmluZSBDU19VTlNVUFBPUlRFRF9GVU5DVElPTgkweDE1CisjZGVmaW5lIENTX1VOU1VQUE9SVEVEX01PREUJMHgxNgorI2RlZmluZSBDU19CQURfU1BFRUQJCTB4MTcKKyNkZWZpbmUgQ1NfQlVTWQkJCTB4MTgKKyNkZWZpbmUgQ1NfR0VORVJBTF9GQUlMVVJFCTB4MTkKKyNkZWZpbmUgQ1NfV1JJVEVfUFJPVEVDVEVECTB4MWEKKyNkZWZpbmUgQ1NfQkFEX0FSR19MRU5HVEgJMHgxYgorI2RlZmluZSBDU19CQURfQVJHUwkJMHgxYworI2RlZmluZSBDU19DT05GSUdVUkFUSU9OX0xPQ0tFRAkweDFkCisjZGVmaW5lIENTX0lOX1VTRQkJMHgxZQorI2RlZmluZSBDU19OT19NT1JFX0lURU1TCTB4MWYKKyNkZWZpbmUgQ1NfT1VUX09GX1JFU09VUkNFCTB4MjAKKyNkZWZpbmUgQ1NfQkFEX0hBTkRMRQkJMHgyMQorCisjZGVmaW5lIENTX0JBRF9UVVBMRQkJMHg0MAorCisjaWZkZWYgX19LRVJORUxfXworCisvKgorICogIFRoZSBtYWluIENhcmQgU2VydmljZXMgZW50cnkgcG9pbnQKKyAqLworCitlbnVtIHNlcnZpY2UgeworICAgIEFjY2Vzc0NvbmZpZ3VyYXRpb25SZWdpc3RlciwgQWRkU29ja2V0U2VydmljZXMsCisgICAgQWRqdXN0UmVzb3VyY2VJbmZvLCBDaGVja0VyYXNlUXVldWUsIENsb3NlTWVtb3J5LCBDb3B5TWVtb3J5LAorICAgIERlcmVnaXN0ZXJDbGllbnQsIERlcmVnaXN0ZXJFcmFzZVF1ZXVlLCBHZXRDYXJkU2VydmljZXNJbmZvLAorICAgIEdldENsaWVudEluZm8sIEdldENvbmZpZ3VyYXRpb25JbmZvLCBHZXRFdmVudE1hc2ssCisgICAgR2V0Rmlyc3RDbGllbnQsIEdldEZpcnN0UGFydGlvbiwgR2V0Rmlyc3RSZWdpb24sIEdldEZpcnN0VHVwbGUsCisgICAgR2V0TmV4dENsaWVudCwgR2V0TmV4dFBhcnRpdGlvbiwgR2V0TmV4dFJlZ2lvbiwgR2V0TmV4dFR1cGxlLAorICAgIEdldFN0YXR1cywgR2V0VHVwbGVEYXRhLCBNYXBMb2dTb2NrZXQsIE1hcExvZ1dpbmRvdywgTWFwTWVtUGFnZSwKKyAgICBNYXBQaHlTb2NrZXQsIE1hcFBoeVdpbmRvdywgTW9kaWZ5Q29uZmlndXJhdGlvbiwgTW9kaWZ5V2luZG93LAorICAgIE9wZW5NZW1vcnksIFBhcnNlVHVwbGUsIFJlYWRNZW1vcnksIFJlZ2lzdGVyQ2xpZW50LAorICAgIFJlZ2lzdGVyRXJhc2VRdWV1ZSwgUmVnaXN0ZXJNVEQsIFJlZ2lzdGVyVGltZXIsCisgICAgUmVsZWFzZUNvbmZpZ3VyYXRpb24sIFJlbGVhc2VFeGNsdXNpdmUsIFJlbGVhc2VJTywgUmVsZWFzZUlSUSwKKyAgICBSZWxlYXNlU29ja2V0TWFzaywgUmVsZWFzZVdpbmRvdywgUmVwbGFjZVNvY2tldFNlcnZpY2VzLAorICAgIFJlcXVlc3RDb25maWd1cmF0aW9uLCBSZXF1ZXN0RXhjbHVzaXZlLCBSZXF1ZXN0SU8sIFJlcXVlc3RJUlEsCisgICAgUmVxdWVzdFNvY2tldE1hc2ssIFJlcXVlc3RXaW5kb3csIFJlc2V0Q2FyZCwgUmV0dXJuU1NFbnRyeSwKKyAgICBTZXRFdmVudE1hc2ssIFNldFJlZ2lvbiwgVmFsaWRhdGVDSVMsIFZlbmRvclNwZWNpZmljLAorICAgIFdyaXRlTWVtb3J5LCBCaW5kRGV2aWNlLCBCaW5kTVRELCBSZXBvcnRFcnJvciwKKyAgICBTdXNwZW5kQ2FyZCwgUmVzdW1lQ2FyZCwgRWplY3RDYXJkLCBJbnNlcnRDYXJkLCBSZXBsYWNlQ0lTLAorICAgIEdldEZpcnN0V2luZG93LCBHZXROZXh0V2luZG93LCBHZXRNZW1QYWdlCit9OworCitzdHJ1Y3QgcGNtY2lhX3NvY2tldDsKKworaW50IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcihjbGllbnRfaGFuZGxlX3QgaGFuZGxlLCBjb25mX3JlZ190ICpyZWcpOworaW50IHBjbWNpYV9kZXJlZ2lzdGVyX2NsaWVudChjbGllbnRfaGFuZGxlX3QgaGFuZGxlKTsKK2ludCBwY21jaWFfZ2V0X2NvbmZpZ3VyYXRpb25faW5mbyhjbGllbnRfaGFuZGxlX3QgaGFuZGxlLCBjb25maWdfaW5mb190ICpjb25maWcpOworaW50IHBjbWNpYV9nZXRfY2FyZF9zZXJ2aWNlc19pbmZvKHNlcnZpbmZvX3QgKmluZm8pOworaW50IHBjbWNpYV9nZXRfZmlyc3Rfd2luZG93KHdpbmRvd19oYW5kbGVfdCAqd2luLCB3aW5fcmVxX3QgKnJlcSk7CitpbnQgcGNtY2lhX2dldF9uZXh0X3dpbmRvdyh3aW5kb3dfaGFuZGxlX3QgKndpbiwgd2luX3JlcV90ICpyZXEpOworaW50IHBjbWNpYV9nZXRfc3RhdHVzKGNsaWVudF9oYW5kbGVfdCBoYW5kbGUsIGNzX3N0YXR1c190ICpzdGF0dXMpOworaW50IHBjbWNpYV9nZXRfbWVtX3BhZ2Uod2luZG93X2hhbmRsZV90IHdpbiwgbWVtcmVxX3QgKnJlcSk7CitpbnQgcGNtY2lhX21hcF9tZW1fcGFnZSh3aW5kb3dfaGFuZGxlX3Qgd2luLCBtZW1yZXFfdCAqcmVxKTsKK2ludCBwY21jaWFfbW9kaWZ5X2NvbmZpZ3VyYXRpb24oY2xpZW50X2hhbmRsZV90IGhhbmRsZSwgbW9kY29uZl90ICptb2QpOworaW50IHBjbWNpYV9yZWdpc3Rlcl9jbGllbnQoY2xpZW50X2hhbmRsZV90ICpoYW5kbGUsIGNsaWVudF9yZWdfdCAqcmVxKTsKK2ludCBwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGNsaWVudF9oYW5kbGVfdCBoYW5kbGUpOworaW50IHBjbWNpYV9yZWxlYXNlX2lvKGNsaWVudF9oYW5kbGVfdCBoYW5kbGUsIGlvX3JlcV90ICpyZXEpOworaW50IHBjbWNpYV9yZWxlYXNlX2lycShjbGllbnRfaGFuZGxlX3QgaGFuZGxlLCBpcnFfcmVxX3QgKnJlcSk7CitpbnQgcGNtY2lhX3JlbGVhc2Vfd2luZG93KHdpbmRvd19oYW5kbGVfdCB3aW4pOworaW50IHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24oY2xpZW50X2hhbmRsZV90IGhhbmRsZSwgY29uZmlnX3JlcV90ICpyZXEpOworaW50IHBjbWNpYV9yZXF1ZXN0X2lvKGNsaWVudF9oYW5kbGVfdCBoYW5kbGUsIGlvX3JlcV90ICpyZXEpOworaW50IHBjbWNpYV9yZXF1ZXN0X2lycShjbGllbnRfaGFuZGxlX3QgaGFuZGxlLCBpcnFfcmVxX3QgKnJlcSk7CitpbnQgcGNtY2lhX3JlcXVlc3Rfd2luZG93KGNsaWVudF9oYW5kbGVfdCAqaGFuZGxlLCB3aW5fcmVxX3QgKnJlcSwgd2luZG93X2hhbmRsZV90ICp3aCk7CitpbnQgcGNtY2lhX3Jlc2V0X2NhcmQoY2xpZW50X2hhbmRsZV90IGhhbmRsZSwgY2xpZW50X3JlcV90ICpyZXEpOworaW50IHBjbWNpYV9zdXNwZW5kX2NhcmQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCk7CitpbnQgcGNtY2lhX3Jlc3VtZV9jYXJkKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpOworaW50IHBjbWNpYV9lamVjdF9jYXJkKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpOworaW50IHBjbWNpYV9pbnNlcnRfY2FyZChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KTsKK2ludCBwY21jaWFfcmVwb3J0X2Vycm9yKGNsaWVudF9oYW5kbGVfdCBoYW5kbGUsIGVycm9yX2luZm9fdCAqZXJyKTsKKworc3RydWN0IHBjbWNpYV9zb2NrZXQgKiBwY21jaWFfZ2V0X3NvY2tldChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KTsKK3ZvaWQgcGNtY2lhX3B1dF9zb2NrZXQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCk7CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfTElOVVhfQ1NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9wY21jaWEvY3NfdHlwZXMuaCBiL2luY2x1ZGUvcGNtY2lhL2NzX3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg4MWQ0MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvcGNtY2lhL2NzX3R5cGVzLmgKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIGNzX3R5cGVzLmgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoZSBpbml0aWFsIGRldmVsb3BlciBvZiB0aGUgb3JpZ2luYWwgY29kZSBpcyBEYXZpZCBBLiBIaW5kcworICogPGRhaGluZHNAdXNlcnMuc291cmNlZm9yZ2UubmV0Pi4gIFBvcnRpb25zIGNyZWF0ZWQgYnkgRGF2aWQgQS4gSGluZHMKKyAqIGFyZSBDb3B5cmlnaHQgKEMpIDE5OTkgRGF2aWQgQS4gSGluZHMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIChDKSAxOTk5ICAgICAgICAgICAgIERhdmlkIEEuIEhpbmRzCisgKi8KKworI2lmbmRlZiBfTElOVVhfQ1NfVFlQRVNfSAorI2RlZmluZSBfTElOVVhfQ1NfVFlQRVNfSAorCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjZWxzZQorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fYXJtX18pIHx8IGRlZmluZWQoX19taXBzX18pCisvKiBUaGlzIChpb2FkZHJfdCkgaXMgZXhwb3NlZCB0byB1c2Vyc3BhY2UgJiBoZW5jZSBjYW5ub3QgYmUgY2hhbmdlZC4gKi8KK3R5cGVkZWYgdV9pbnQgICBpb2FkZHJfdDsKKyNlbHNlCit0eXBlZGVmIHVfc2hvcnQJaW9hZGRyX3Q7CisjZW5kaWYKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBraW9fYWRkcl90OworCit0eXBlZGVmIHVfc2hvcnQJc29ja2V0X3Q7Cit0eXBlZGVmIHVfaW50CWV2ZW50X3Q7Cit0eXBlZGVmIHVfY2hhcgljaXNkYXRhX3Q7Cit0eXBlZGVmIHVfc2hvcnQJcGFnZV90OworCitzdHJ1Y3QgY2xpZW50X3Q7Cit0eXBlZGVmIHN0cnVjdCBjbGllbnRfdCAqY2xpZW50X2hhbmRsZV90OworCitzdHJ1Y3Qgd2luZG93X3Q7Cit0eXBlZGVmIHN0cnVjdCB3aW5kb3dfdCAqd2luZG93X2hhbmRsZV90OworCitzdHJ1Y3QgcmVnaW9uX3Q7Cit0eXBlZGVmIHN0cnVjdCByZWdpb25fdCAqbWVtb3J5X2hhbmRsZV90OworCisjaWZuZGVmIERFVl9OQU1FX0xFTgorI2RlZmluZSBERVZfTkFNRV9MRU4gMzIKKyNlbmRpZgorCit0eXBlZGVmIGNoYXIgZGV2X2luZm9fdFtERVZfTkFNRV9MRU5dOworCisjZW5kaWYgLyogX0xJTlVYX0NTX1RZUEVTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvcGNtY2lhL2RzLmggYi9pbmNsdWRlL3BjbWNpYS9kcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxMmZkOTUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3BjbWNpYS9kcy5oCkBAIC0wLDAgKzEsMjAwIEBACisvKgorICogZHMuaCAtLSAxNi1iaXQgUENNQ0lBIGNvcmUgc3VwcG9ydAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhlIGluaXRpYWwgZGV2ZWxvcGVyIG9mIHRoZSBvcmlnaW5hbCBjb2RlIGlzIERhdmlkIEEuIEhpbmRzCisgKiA8ZGFoaW5kc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+LiAgUG9ydGlvbnMgY3JlYXRlZCBieSBEYXZpZCBBLiBIaW5kcworICogYXJlIENvcHlyaWdodCAoQykgMTk5OSBEYXZpZCBBLiBIaW5kcy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogKEMpIDE5OTkJCURhdmlkIEEuIEhpbmRzCisgKiAoQykgMjAwMyAtIDIwMDQJRG9taW5payBCcm9kb3dza2kKKyAqLworCisjaWZuZGVmIF9MSU5VWF9EU19ICisjZGVmaW5lIF9MSU5VWF9EU19ICisKKyNpbmNsdWRlIDxwY21jaWEvYnVsa21lbS5oPgorI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgorCit0eXBlZGVmIHN0cnVjdCB0dXBsZV9wYXJzZV90IHsKKyAgICB0dXBsZV90CQl0dXBsZTsKKyAgICBjaXNkYXRhX3QJCWRhdGFbMjU1XTsKKyAgICBjaXNwYXJzZV90CQlwYXJzZTsKK30gdHVwbGVfcGFyc2VfdDsKKwordHlwZWRlZiBzdHJ1Y3Qgd2luX2luZm9fdCB7CisgICAgd2luZG93X2hhbmRsZV90CWhhbmRsZTsKKyAgICB3aW5fcmVxX3QJCXdpbmRvdzsKKyAgICBtZW1yZXFfdAkJbWFwOworfSB3aW5faW5mb190OworICAgIAordHlwZWRlZiBzdHJ1Y3QgYmluZF9pbmZvX3QgeworICAgIGRldl9pbmZvX3QJCWRldl9pbmZvOworICAgIHVfY2hhcgkJZnVuY3Rpb247CisgICAgc3RydWN0IGRldl9saW5rX3QJKmluc3RhbmNlOworICAgIGNoYXIJCW5hbWVbREVWX05BTUVfTEVOXTsKKyAgICB1X3Nob3J0CQltYWpvciwgbWlub3I7CisgICAgdm9pZAkJKm5leHQ7Cit9IGJpbmRfaW5mb190OworCit0eXBlZGVmIHN0cnVjdCBtdGRfaW5mb190IHsKKyAgICBkZXZfaW5mb190CQlkZXZfaW5mbzsKKyAgICB1X2ludAkJQXR0cmlidXRlczsKKyAgICB1X2ludAkJQ2FyZE9mZnNldDsKK30gbXRkX2luZm9fdDsKKwordHlwZWRlZiB1bmlvbiBkc19pb2N0bF9hcmdfdCB7CisgICAgc2VydmluZm9fdAkJc2VydmluZm87CisgICAgYWRqdXN0X3QJCWFkanVzdDsKKyAgICBjb25maWdfaW5mb190CWNvbmZpZzsKKyAgICB0dXBsZV90CQl0dXBsZTsKKyAgICB0dXBsZV9wYXJzZV90CXR1cGxlX3BhcnNlOworICAgIGNsaWVudF9yZXFfdAljbGllbnRfcmVxOworICAgIGNzX3N0YXR1c190CQlzdGF0dXM7CisgICAgY29uZl9yZWdfdAkJY29uZl9yZWc7CisgICAgY2lzaW5mb190CQljaXNpbmZvOworICAgIHJlZ2lvbl9pbmZvX3QJcmVnaW9uOworICAgIGJpbmRfaW5mb190CQliaW5kX2luZm87CisgICAgbXRkX2luZm9fdAkJbXRkX2luZm87CisgICAgd2luX2luZm9fdAkJd2luX2luZm87CisgICAgY2lzZHVtcF90CQljaXNkdW1wOworfSBkc19pb2N0bF9hcmdfdDsKKworI2RlZmluZSBEU19HRVRfQ0FSRF9TRVJWSUNFU19JTkZPCV9JT1IgKCdkJywgMSwgc2VydmluZm9fdCkKKyNkZWZpbmUgRFNfQURKVVNUX1JFU09VUkNFX0lORk8JCV9JT1dSKCdkJywgMiwgYWRqdXN0X3QpCisjZGVmaW5lIERTX0dFVF9DT05GSUdVUkFUSU9OX0lORk8JX0lPV1IoJ2QnLCAzLCBjb25maWdfaW5mb190KQorI2RlZmluZSBEU19HRVRfRklSU1RfVFVQTEUJCV9JT1dSKCdkJywgNCwgdHVwbGVfdCkKKyNkZWZpbmUgRFNfR0VUX05FWFRfVFVQTEUJCV9JT1dSKCdkJywgNSwgdHVwbGVfdCkKKyNkZWZpbmUgRFNfR0VUX1RVUExFX0RBVEEJCV9JT1dSKCdkJywgNiwgdHVwbGVfcGFyc2VfdCkKKyNkZWZpbmUgRFNfUEFSU0VfVFVQTEUJCQlfSU9XUignZCcsIDcsIHR1cGxlX3BhcnNlX3QpCisjZGVmaW5lIERTX1JFU0VUX0NBUkQJCQlfSU8gICgnZCcsIDgpCisjZGVmaW5lIERTX0dFVF9TVEFUVVMJCQlfSU9XUignZCcsIDksIGNzX3N0YXR1c190KQorI2RlZmluZSBEU19BQ0NFU1NfQ09ORklHVVJBVElPTl9SRUdJU1RFUiBfSU9XUignZCcsIDEwLCBjb25mX3JlZ190KQorI2RlZmluZSBEU19WQUxJREFURV9DSVMJCQlfSU9SICgnZCcsIDExLCBjaXNpbmZvX3QpCisjZGVmaW5lIERTX1NVU1BFTkRfQ0FSRAkJCV9JTyAgKCdkJywgMTIpCisjZGVmaW5lIERTX1JFU1VNRV9DQVJECQkJX0lPICAoJ2QnLCAxMykKKyNkZWZpbmUgRFNfRUpFQ1RfQ0FSRAkJCV9JTyAgKCdkJywgMTQpCisjZGVmaW5lIERTX0lOU0VSVF9DQVJECQkJX0lPICAoJ2QnLCAxNSkKKyNkZWZpbmUgRFNfR0VUX0ZJUlNUX1JFR0lPTgkJX0lPV1IoJ2QnLCAxNiwgcmVnaW9uX2luZm9fdCkKKyNkZWZpbmUgRFNfR0VUX05FWFRfUkVHSU9OCQlfSU9XUignZCcsIDE3LCByZWdpb25faW5mb190KQorI2RlZmluZSBEU19SRVBMQUNFX0NJUwkJCV9JT1dSKCdkJywgMTgsIGNpc2R1bXBfdCkKKyNkZWZpbmUgRFNfR0VUX0ZJUlNUX1dJTkRPVwkJX0lPUiAoJ2QnLCAxOSwgd2luX2luZm9fdCkKKyNkZWZpbmUgRFNfR0VUX05FWFRfV0lORE9XCQlfSU9XUignZCcsIDIwLCB3aW5faW5mb190KQorI2RlZmluZSBEU19HRVRfTUVNX1BBR0UJCQlfSU9XUignZCcsIDIxLCB3aW5faW5mb190KQorCisjZGVmaW5lIERTX0JJTkRfUkVRVUVTVAkJCV9JT1dSKCdkJywgNjAsIGJpbmRfaW5mb190KQorI2RlZmluZSBEU19HRVRfREVWSUNFX0lORk8JCV9JT1dSKCdkJywgNjEsIGJpbmRfaW5mb190KSAKKyNkZWZpbmUgRFNfR0VUX05FWFRfREVWSUNFCQlfSU9XUignZCcsIDYyLCBiaW5kX2luZm9fdCkgCisjZGVmaW5lIERTX1VOQklORF9SRVFVRVNUCQlfSU9XICgnZCcsIDYzLCBiaW5kX2luZm9fdCkKKyNkZWZpbmUgRFNfQklORF9NVEQJCQlfSU9XUignZCcsIDY0LCBtdGRfaW5mb190KQorCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorCit0eXBlZGVmIHN0cnVjdCBkZXZfbm9kZV90IHsKKyAgICBjaGFyCQlkZXZfbmFtZVtERVZfTkFNRV9MRU5dOworICAgIHVfc2hvcnQJCW1ham9yLCBtaW5vcjsKKyAgICBzdHJ1Y3QgZGV2X25vZGVfdAkqbmV4dDsKK30gZGV2X25vZGVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgZGV2X2xpbmtfdCB7CisgICAgZGV2X25vZGVfdAkJKmRldjsKKyAgICB1X2ludAkJc3RhdGUsIG9wZW47CisgICAgd2FpdF9xdWV1ZV9oZWFkX3QJcGVuZGluZzsKKyAgICBjbGllbnRfaGFuZGxlX3QJaGFuZGxlOworICAgIGlvX3JlcV90CQlpbzsKKyAgICBpcnFfcmVxX3QJCWlycTsKKyAgICBjb25maWdfcmVxX3QJY29uZjsKKyAgICB3aW5kb3dfaGFuZGxlX3QJd2luOworICAgIHZvaWQJCSpwcml2OworICAgIHN0cnVjdCBkZXZfbGlua190CSpuZXh0OworfSBkZXZfbGlua190OworCisvKiBGbGFncyBmb3IgZGV2aWNlIHN0YXRlICovCisjZGVmaW5lIERFVl9QUkVTRU5UCQkweDAxCisjZGVmaW5lIERFVl9DT05GSUcJCTB4MDIKKyNkZWZpbmUgREVWX1NUQUxFX0NPTkZJRwkweDA0CS8qIHJlbGVhc2Ugb24gY2xvc2UgKi8KKyNkZWZpbmUgREVWX1NUQUxFX0xJTksJCTB4MDgJLyogZGV0YWNoIG9uIHJlbGVhc2UgKi8KKyNkZWZpbmUgREVWX0NPTkZJR19QRU5ESU5HCTB4MTAKKyNkZWZpbmUgREVWX1JFTEVBU0VfUEVORElORwkweDIwCisjZGVmaW5lIERFVl9TVVNQRU5ECQkweDQwCisjZGVmaW5lIERFVl9CVVNZCQkweDgwCisKKyNkZWZpbmUgREVWX09LKGwpIFwKKyAgICAoKGwpICYmICgobC0+c3RhdGUgJiB+REVWX0JVU1kpID09IChERVZfQ09ORklHfERFVl9QUkVTRU5UKSkpCisKKworc3RydWN0IHBjbWNpYV9zb2NrZXQ7CisKK2V4dGVybiBzdHJ1Y3QgYnVzX3R5cGUgcGNtY2lhX2J1c190eXBlOworCitzdHJ1Y3QgcGNtY2lhX2RyaXZlciB7CisJZGV2X2xpbmtfdAkJKigqYXR0YWNoKSh2b2lkKTsKKwl2b2lkCQkJKCpkZXRhY2gpKGRldl9saW5rX3QgKik7CisJc3RydWN0IG1vZHVsZQkJKm93bmVyOworCXN0cnVjdCBkZXZpY2VfZHJpdmVyCWRydjsKK307CisKKy8qIGRyaXZlciByZWdpc3RyYXRpb24gKi8KK2ludCBwY21jaWFfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBwY21jaWFfZHJpdmVyICpkcml2ZXIpOwordm9pZCBwY21jaWFfdW5yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHBjbWNpYV9kcml2ZXIgKmRyaXZlcik7CisKK3N0cnVjdCBwY21jaWFfZGV2aWNlIHsKKwkvKiB0aGUgc29ja2V0IGFuZCB0aGUgZGV2aWNlX25vIFtmb3IgbXVsdGlmdW5jdGlvbiBkZXZpY2VzXQorCSAgIHVuaXF1ZWx5IGRlZmluZSBhIHBjbWNpYV9kZXZpY2UgKi8KKwlzdHJ1Y3QgcGNtY2lhX3NvY2tldAkqc29ja2V0OworCisJdTgJCQlkZXZpY2Vfbm87CisKKwkvKiB0aGUgaGFyZHdhcmUgImZ1bmN0aW9uIiBkZXZpY2U7IGNlcnRhaW4gc3ViZGV2aWNlcyBjYW4KKwkgKiBzaGFyZSBvbmUgaGFyZHdhcmUgImZ1bmN0aW9uIiBkZXZpY2UuICovCisJdTgJCQlmdW5jOworCisJc3RydWN0IGxpc3RfaGVhZAlzb2NrZXRfZGV2aWNlX2xpc3Q7CisKKwkvKiBkZXByZWNhdGVkLCBhIGNsZWFuZWQgdXAgdmVyc2lvbiB3aWxsIGJlIG1vdmVkIGludG8gdGhpcworCSAgIHN0cnVjdCBzb29uICovCisJZGV2X2xpbmtfdAkJKmluc3RhbmNlOworCXN0cnVjdCBjbGllbnRfdCB7CisJCXVfc2hvcnQJCQljbGllbnRfbWFnaWM7CisJCXN0cnVjdCBwY21jaWFfc29ja2V0CSpTb2NrZXQ7CisJCXVfY2hhcgkJCUZ1bmN0aW9uOworCQl1X2ludAkJCXN0YXRlOworCQlldmVudF90CQkJRXZlbnRNYXNrOworCQlpbnQgKCpldmVudF9oYW5kbGVyKQkoZXZlbnRfdCBldmVudCwgaW50IHByaW9yaXR5LAorCQkJCQkgZXZlbnRfY2FsbGJhY2tfYXJnc190ICopOworCQlldmVudF9jYWxsYmFja19hcmdzX3QgCWV2ZW50X2NhbGxiYWNrX2FyZ3M7CisJfQkJCWNsaWVudDsKKworCS8qIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgZGV2aWNlICovCisJdTgJCQloYXNfbWFuZl9pZDoxOworCXU4CQkJaGFzX2NhcmRfaWQ6MTsKKwl1OAkJCWhhc19mdW5jX2lkOjE7CisJdTgJCQlyZXNlcnZlZDo1OworCisJdTgJCQlmdW5jX2lkOworCXUxNgkJCW1hbmZfaWQ7CisJdTE2CQkJY2FyZF9pZDsKKworCWNoYXIgKgkJCXByb2RfaWRbNF07CisKKwkvKiBkZXZpY2UgZHJpdmVyIHdhbnRlZCBieSBjYXJkbWdyICovCisJc3RydWN0IHBjbWNpYV9kcml2ZXIgKgljYXJkbWdyOworCisJc3RydWN0IGRldmljZQkJZGV2OworfTsKKworI2RlZmluZSB0b19wY21jaWFfZGV2KG4pIGNvbnRhaW5lcl9vZihuLCBzdHJ1Y3QgcGNtY2lhX2RldmljZSwgZGV2KQorI2RlZmluZSB0b19wY21jaWFfZHJ2KG4pIGNvbnRhaW5lcl9vZihuLCBzdHJ1Y3QgcGNtY2lhX2RyaXZlciwgZHJ2KQorCisjZGVmaW5lIGhhbmRsZV90b19wZGV2KGhhbmRsZSkgY29udGFpbmVyX29mKGhhbmRsZSwgc3RydWN0IHBjbWNpYV9kZXZpY2UsIGNsaWVudCk7CisjZGVmaW5lIGhhbmRsZV90b19kZXYoaGFuZGxlKSAoKGNvbnRhaW5lcl9vZihoYW5kbGUsIHN0cnVjdCBwY21jaWFfZGV2aWNlLCBjbGllbnQpKS0+ZGV2KQorCisvKiBlcnJvciByZXBvcnRpbmcgKi8KK3ZvaWQgY3NfZXJyb3IoY2xpZW50X2hhbmRsZV90IGhhbmRsZSwgaW50IGZ1bmMsIGludCByZXQpOworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9MSU5VWF9EU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3BjbWNpYS9tZW1fb3AuaCBiL2luY2x1ZGUvcGNtY2lhL21lbV9vcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkMTliOTQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3BjbWNpYS9tZW1fb3AuaApAQCAtMCwwICsxLDExNiBAQAorLyoKKyAqIG1lbV9vcC5oCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGUgaW5pdGlhbCBkZXZlbG9wZXIgb2YgdGhlIG9yaWdpbmFsIGNvZGUgaXMgRGF2aWQgQS4gSGluZHMKKyAqIDxkYWhpbmRzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4uICBQb3J0aW9ucyBjcmVhdGVkIGJ5IERhdmlkIEEuIEhpbmRzCisgKiBhcmUgQ29weXJpZ2h0IChDKSAxOTk5IERhdmlkIEEuIEhpbmRzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAoQykgMTk5OSAgICAgICAgICAgICBEYXZpZCBBLiBIaW5kcworICovCisKKyNpZm5kZWYgX0xJTlVYX01FTV9PUF9ICisjZGVmaW5lIF9MSU5VWF9NRU1fT1BfSAorCisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworLyoKKyAgIElmIFVOU0FGRV9NRU1DUFkgaXMgZGVmaW5lZCwgd2UgdXNlIHRoZSAob3B0aW1pemVkKSBzeXN0ZW0gcm91dGluZXMKKyAgIHRvIGNvcHkgYmV0d2VlbiBhIGNhcmQgYW5kIGtlcm5lbCBtZW1vcnkuICBUaGVzZSByb3V0aW5lcyBkbyAzMi1iaXQKKyAgIG9wZXJhdGlvbnMgd2hpY2ggbWF5IG5vdCB3b3JrIHdpdGggYWxsIFBDTUNJQSBjb250cm9sbGVycy4gIFRoZQorICAgc2FmZSB2ZXJzaW9ucyBkZWZpbmVkIGhlcmUgd2lsbCBkbyBvbmx5IDgtYml0IGFuZCAxNi1iaXQgYWNjZXNzZXMuCisqLworCisjaWZkZWYgVU5TQUZFX01FTUNQWQorCisjZGVmaW5lIGNvcHlfZnJvbV9wYyBtZW1jcHlfZnJvbWlvCisjZGVmaW5lIGNvcHlfdG9fcGMgbWVtY3B5X3RvaW8KKworc3RhdGljIGlubGluZSB2b2lkIGNvcHlfcGNfdG9fdXNlcih2b2lkICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgc2l6ZV90IG4pCit7CisgICAgc2l6ZV90IG9kZCA9IChuICYgMyk7CisgICAgbiAtPSBvZGQ7CisgICAgd2hpbGUgKG4pIHsKKwlwdXRfdXNlcihfX3Jhd19yZWFkbChmcm9tKSwgKGludCAqKXRvKTsKKwkoY2hhciAqKWZyb20gKz0gNDsgKGNoYXIgKil0byArPSA0OyBuIC09IDQ7CisgICAgfQorICAgIHdoaWxlIChvZGQtLSkKKwlwdXRfdXNlcihyZWFkYigoY2hhciAqKWZyb20rKyksIChjaGFyICopdG8rKyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5X3VzZXJfdG9fcGModm9pZCAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHNpemVfdCBuKQoreworICAgIGludCBsOworICAgIGNoYXIgYzsKKyAgICBzaXplX3Qgb2RkID0gKG4gJiAzKTsKKyAgICBuIC09IG9kZDsKKyAgICB3aGlsZSAobikgeworCWdldF91c2VyKGwsIChpbnQgKilmcm9tKTsKKwlfX3Jhd193cml0ZWwobCwgdG8pOworCShjaGFyICopdG8gKz0gNDsgKGNoYXIgKilmcm9tICs9IDQ7IG4gLT0gNDsKKyAgICB9CisgICAgd2hpbGUgKG9kZC0tKSB7CisJZ2V0X3VzZXIoYywgKGNoYXIgKilmcm9tKyspOworCXdyaXRlYihjLCAoY2hhciAqKXRvKyspOworICAgIH0KK30KKworI2Vsc2UgLyogVU5TQUZFX01FTUNQWSAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgY29weV9mcm9tX3BjKHZvaWQgKnRvLCB2b2lkIF9faW9tZW0gKmZyb20sIHNpemVfdCBuKQoreworCV9fdTE2ICp0ID0gdG87CisJX191MTYgX19pb21lbSAqZiA9IGZyb207CisJc2l6ZV90IG9kZCA9IChuICYgMSk7CisJZm9yIChuID4+PSAxOyBuOyBuLS0pCisJCSp0KysgPSBfX3Jhd19yZWFkdyhmKyspOworCWlmIChvZGQpCisJCSooX191OCAqKXQgPSByZWFkYihmKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNvcHlfdG9fcGModm9pZCBfX2lvbWVtICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgc2l6ZV90IG4pCit7CisJX191MTYgX19pb21lbSAqdCA9IHRvOworCWNvbnN0IF9fdTE2ICpmID0gZnJvbTsKKwlzaXplX3Qgb2RkID0gKG4gJiAxKTsKKwlmb3IgKG4gPj49IDE7IG4gOyBuLS0pCisJCV9fcmF3X3dyaXRldygqZisrLCB0KyspOworCWlmIChvZGQpCisJCXdyaXRlYigqKF9fdTggKilmLCB0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNvcHlfcGNfdG9fdXNlcih2b2lkIF9fdXNlciAqdG8sIHZvaWQgX19pb21lbSAqZnJvbSwgc2l6ZV90IG4pCit7CisJX191MTYgX191c2VyICp0ID0gdG87CisJX191MTYgX19pb21lbSAqZiA9IGZyb207CisJc2l6ZV90IG9kZCA9IChuICYgMSk7CisJZm9yIChuID4+PSAxOyBuIDsgbi0tKQorCQlwdXRfdXNlcihfX3Jhd19yZWFkdyhmKyspLCB0KyspOworCWlmIChvZGQpCisJCXB1dF91c2VyKHJlYWRiKGYpLCAoY2hhciBfX3VzZXIgKil0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNvcHlfdXNlcl90b19wYyh2b2lkIF9faW9tZW0gKnRvLCB2b2lkIF9fdXNlciAqZnJvbSwgc2l6ZV90IG4pCit7CisJX191MTYgX191c2VyICpmID0gZnJvbTsKKwlfX3UxNiBfX2lvbWVtICp0ID0gdG87CisJc2hvcnQgczsKKwljaGFyIGM7CisJc2l6ZV90IG9kZCA9IChuICYgMSk7CisJZm9yIChuID4+PSAxOyBuOyBuLS0pIHsKKwkJZ2V0X3VzZXIocywgZisrKTsKKwkJX19yYXdfd3JpdGV3KHMsIHQrKyk7CisJfQorCWlmIChvZGQpIHsKKwkJZ2V0X3VzZXIoYywgKGNoYXIgX191c2VyICopZik7CisJCXdyaXRlYihjLCB0KTsKKwl9Cit9CisKKyNlbmRpZiAvKiBVTlNBRkVfTUVNQ1BZICovCisKKyNlbmRpZiAvKiBfTElOVVhfTUVNX09QX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvcGNtY2lhL3NzLmggYi9pbmNsdWRlL3BjbWNpYS9zcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkMzQxM2EKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3BjbWNpYS9zcy5oCkBAIC0wLDAgKzEsMjY1IEBACisvKgorICogc3MuaAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhlIGluaXRpYWwgZGV2ZWxvcGVyIG9mIHRoZSBvcmlnaW5hbCBjb2RlIGlzIERhdmlkIEEuIEhpbmRzCisgKiA8ZGFoaW5kc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+LiAgUG9ydGlvbnMgY3JlYXRlZCBieSBEYXZpZCBBLiBIaW5kcworICogYXJlIENvcHlyaWdodCAoQykgMTk5OSBEYXZpZCBBLiBIaW5kcy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogKEMpIDE5OTkgICAgICAgICAgICAgRGF2aWQgQS4gSGluZHMKKyAqLworCisjaWZuZGVmIF9MSU5VWF9TU19ICisjZGVmaW5lIF9MSU5VWF9TU19ICisKKyNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KKyNpbmNsdWRlIDxwY21jaWEvY3MuaD4KKyNpbmNsdWRlIDxwY21jaWEvYnVsa21lbS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorCisvKiBEZWZpbml0aW9ucyBmb3IgY2FyZCBzdGF0dXMgZmxhZ3MgZm9yIEdldFN0YXR1cyAqLworI2RlZmluZSBTU19XUlBST1QJMHgwMDAxCisjZGVmaW5lIFNTX0NBUkRMT0NLCTB4MDAwMgorI2RlZmluZSBTU19FSkVDVElPTgkweDAwMDQKKyNkZWZpbmUgU1NfSU5TRVJUSU9OCTB4MDAwOAorI2RlZmluZSBTU19CQVRERUFECTB4MDAxMAorI2RlZmluZSBTU19CQVRXQVJOCTB4MDAyMAorI2RlZmluZSBTU19SRUFEWQkweDAwNDAKKyNkZWZpbmUgU1NfREVURUNUCTB4MDA4MAorI2RlZmluZSBTU19QT1dFUk9OCTB4MDEwMAorI2RlZmluZSBTU19HUEkJCTB4MDIwMAorI2RlZmluZSBTU19TVFNDSEcJMHgwNDAwCisjZGVmaW5lIFNTX0NBUkRCVVMJMHgwODAwCisjZGVmaW5lIFNTXzNWQ0FSRAkweDEwMDAKKyNkZWZpbmUgU1NfWFZDQVJECTB4MjAwMAorI2RlZmluZSBTU19QRU5ESU5HCTB4NDAwMAorI2RlZmluZSBTU19aVkNBUkQJMHg4MDAwCisKKy8qIElucXVpcmVTb2NrZXQgY2FwYWJpbGl0aWVzICovCisjZGVmaW5lIFNTX0NBUF9QQUdFX1JFR1MJMHgwMDAxCisjZGVmaW5lIFNTX0NBUF9WSVJUVUFMX0JVUwkweDAwMDIKKyNkZWZpbmUgU1NfQ0FQX01FTV9BTElHTgkweDAwMDQKKyNkZWZpbmUgU1NfQ0FQX1NUQVRJQ19NQVAJMHgwMDA4CisjZGVmaW5lIFNTX0NBUF9QQ0NBUkQJCTB4NDAwMAorI2RlZmluZSBTU19DQVBfQ0FSREJVUwkJMHg4MDAwCisKKy8qIGZvciBHZXRTb2NrZXQsIFNldFNvY2tldCAqLwordHlwZWRlZiBzdHJ1Y3Qgc29ja2V0X3N0YXRlX3QgeworICAgIHVfaW50CWZsYWdzOworICAgIHVfaW50CWNzY19tYXNrOworICAgIHVfY2hhcglWY2MsIFZwcDsKKyAgICB1X2NoYXIJaW9faXJxOworfSBzb2NrZXRfc3RhdGVfdDsKKworZXh0ZXJuIHNvY2tldF9zdGF0ZV90IGRlYWRfc29ja2V0OworCisvKiBTb2NrZXQgY29uZmlndXJhdGlvbiBmbGFncyAqLworI2RlZmluZSBTU19QV1JfQVVUTwkweDAwMTAKKyNkZWZpbmUgU1NfSU9DQVJECTB4MDAyMAorI2RlZmluZSBTU19SRVNFVAkweDAwNDAKKyNkZWZpbmUgU1NfRE1BX01PREUJMHgwMDgwCisjZGVmaW5lIFNTX1NQS1JfRU5BCTB4MDEwMAorI2RlZmluZSBTU19PVVRQVVRfRU5BCTB4MDIwMAorCisvKiBGbGFncyBmb3IgSS9PIHBvcnQgYW5kIG1lbW9yeSB3aW5kb3dzICovCisjZGVmaW5lIE1BUF9BQ1RJVkUJMHgwMQorI2RlZmluZSBNQVBfMTZCSVQJMHgwMgorI2RlZmluZSBNQVBfQVVUT1NaCTB4MDQKKyNkZWZpbmUgTUFQXzBXUwkJMHgwOAorI2RlZmluZSBNQVBfV1JQUk9UCTB4MTAKKyNkZWZpbmUgTUFQX0FUVFJJQgkweDIwCisjZGVmaW5lIE1BUF9VU0VfV0FJVAkweDQwCisjZGVmaW5lIE1BUF9QUkVGRVRDSAkweDgwCisKKy8qIFVzZSB0aGlzIGp1c3QgZm9yIGJyaWRnZSB3aW5kb3dzICovCisjZGVmaW5lIE1BUF9JT1NQQUNFCTB4MjAKKwordHlwZWRlZiBzdHJ1Y3QgcGNjYXJkX2lvX21hcCB7CisgICAgdV9jaGFyCW1hcDsKKyAgICB1X2NoYXIJZmxhZ3M7CisgICAgdV9zaG9ydAlzcGVlZDsKKyAgICBraW9fYWRkcl90CXN0YXJ0LCBzdG9wOworfSBwY2NhcmRfaW9fbWFwOworCit0eXBlZGVmIHN0cnVjdCBwY2NhcmRfbWVtX21hcCB7CisgICAgdV9jaGFyCW1hcDsKKyAgICB1X2NoYXIJZmxhZ3M7CisgICAgdV9zaG9ydAlzcGVlZDsKKyAgICB1X2xvbmcJc3RhdGljX3N0YXJ0OworICAgIHVfaW50CWNhcmRfc3RhcnQ7CisgICAgc3RydWN0IHJlc291cmNlICpyZXM7Cit9IHBjY2FyZF9tZW1fbWFwOworCit0eXBlZGVmIHN0cnVjdCBjYl9icmlkZ2VfbWFwIHsKKyAgICB1X2NoYXIJbWFwOworICAgIHVfY2hhcglmbGFnczsKKyAgICB1X2ludAlzdGFydCwgc3RvcDsKK30gY2JfYnJpZGdlX21hcDsKKworLyoKKyAqIFNvY2tldCBvcGVyYXRpb25zLgorICovCitzdHJ1Y3QgcGNtY2lhX3NvY2tldDsKKworc3RydWN0IHBjY2FyZF9vcGVyYXRpb25zIHsKKwlpbnQgKCppbml0KShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc29jayk7CisJaW50ICgqc3VzcGVuZCkoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNvY2spOworCWludCAoKnJlZ2lzdGVyX2NhbGxiYWNrKShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc29jaywgdm9pZCAoKmhhbmRsZXIpKHZvaWQgKiwgdW5zaWduZWQgaW50KSwgdm9pZCAqIGluZm8pOworCWludCAoKmdldF9zdGF0dXMpKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzb2NrLCB1X2ludCAqdmFsdWUpOworCWludCAoKmdldF9zb2NrZXQpKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzb2NrLCBzb2NrZXRfc3RhdGVfdCAqc3RhdGUpOworCWludCAoKnNldF9zb2NrZXQpKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzb2NrLCBzb2NrZXRfc3RhdGVfdCAqc3RhdGUpOworCWludCAoKnNldF9pb19tYXApKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzb2NrLCBzdHJ1Y3QgcGNjYXJkX2lvX21hcCAqaW8pOworCWludCAoKnNldF9tZW1fbWFwKShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc29jaywgc3RydWN0IHBjY2FyZF9tZW1fbWFwICptZW0pOworfTsKKworc3RydWN0IHBjY2FyZF9yZXNvdXJjZV9vcHMgeworCXZvaWQJKCp2YWxpZGF0ZV9tZW0pCQkoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOworCWludAkoKmFkanVzdF9pb19yZWdpb24pCShzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKKwkJCQkJIHVuc2lnbmVkIGxvbmcgcl9zdGFydCwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgcl9lbmQsCisJCQkJCSBzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyk7CisJc3RydWN0IHJlc291cmNlKiAoKmZpbmRfaW8pCSh1bnNpZ25lZCBsb25nIGJhc2UsIGludCBudW0sCisJCQkJCSB1bnNpZ25lZCBsb25nIGFsaWduLAorCQkJCQkgc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOworCXN0cnVjdCByZXNvdXJjZSogKCpmaW5kX21lbSkJKHVuc2lnbmVkIGxvbmcgYmFzZSwgdW5zaWduZWQgbG9uZyBudW0sCisJCQkJCSB1bnNpZ25lZCBsb25nIGFsaWduLCBpbnQgbG93LAorCQkJCQkgc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOworCWludAkoKmFkanVzdF9yZXNvdXJjZSkJKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLAorCQkJCQkgYWRqdXN0X3QgKmFkaik7CisJaW50CSgqaW5pdCkJCQkoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOworCXZvaWQJKCpleGl0KQkJCShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyk7Cit9OworLyogU1NfQ0FQX1NUQVRJQ19NQVAgKi8KK2V4dGVybiBzdHJ1Y3QgcGNjYXJkX3Jlc291cmNlX29wcyBwY2NhcmRfc3RhdGljX29wczsKKy8qICFTU19DQVBfU1RBVElDX01BUCAqLworZXh0ZXJuIHN0cnVjdCBwY2NhcmRfcmVzb3VyY2Vfb3BzIHBjY2FyZF9ub25zdGF0aWNfb3BzOworCisvKgorICogIENhbGxzIHRvIHNldCB1cCBsb3ctbGV2ZWwgIlNvY2tldCBTZXJ2aWNlcyIgZHJpdmVycworICovCitzdHJ1Y3QgcGNtY2lhX3NvY2tldDsKKwordHlwZWRlZiBzdHJ1Y3QgaW9fd2luZG93X3QgeworCXVfaW50CQkJQXR0cmlidXRlczsKKwlraW9fYWRkcl90CQlCYXNlUG9ydCwgTnVtUG9ydHM7CisJa2lvX2FkZHJfdAkJSW5Vc2UsIENvbmZpZzsKKwlzdHJ1Y3QgcmVzb3VyY2UJCSpyZXM7Cit9IGlvX3dpbmRvd190OworCisjZGVmaW5lIFdJTkRPV19NQUdJQwkweEIzNUMKK3R5cGVkZWYgc3RydWN0IHdpbmRvd190IHsKKwl1X3Nob3J0CQkJbWFnaWM7CisJdV9zaG9ydAkJCWluZGV4OworCWNsaWVudF9oYW5kbGVfdAkJaGFuZGxlOworCXN0cnVjdCBwY21jaWFfc29ja2V0IAkqc29jazsKKwlwY2NhcmRfbWVtX21hcAkJY3RsOworfSB3aW5kb3dfdDsKKworLyogTWF4aW11bSBudW1iZXIgb2YgSU8gd2luZG93cyBwZXIgc29ja2V0ICovCisjZGVmaW5lIE1BWF9JT19XSU4gMgorCisvKiBNYXhpbXVtIG51bWJlciBvZiBtZW1vcnkgd2luZG93cyBwZXIgc29ja2V0ICovCisjZGVmaW5lIE1BWF9XSU4gNAorCitzdHJ1Y3QgY29uZmlnX3Q7CitzdHJ1Y3QgcGNtY2lhX2NhbGxiYWNrOworCisKK3N0cnVjdCBwY21jaWFfc29ja2V0IHsKKwlzdHJ1Y3QgbW9kdWxlCQkJKm93bmVyOworCXNwaW5sb2NrX3QJCQlsb2NrOworCXNvY2tldF9zdGF0ZV90CQkJc29ja2V0OworCXVfaW50CQkJCXN0YXRlOworCXVfc2hvcnQJCQkJZnVuY3Rpb25zOworCXVfc2hvcnQJCQkJbG9ja19jb3VudDsKKwlwY2NhcmRfbWVtX21hcAkJCWNpc19tZW07CisJdm9pZCBfX2lvbWVtIAkJCSpjaXNfdmlydDsKKwlzdHJ1Y3QgY29uZmlnX3QJCQkqY29uZmlnOworCXN0cnVjdCB7CisJCXVfaW50CQkJQXNzaWduZWRJUlE7CisJCXVfaW50CQkJQ29uZmlnOworCX0gaXJxOworCWlvX3dpbmRvd190CQkJaW9bTUFYX0lPX1dJTl07CisJd2luZG93X3QJCQl3aW5bTUFYX1dJTl07CisJc3RydWN0IGxpc3RfaGVhZAkJY2lzX2NhY2hlOworCXVfaW50CQkJCWZha2VfY2lzX2xlbjsKKwljaGFyCQkJCSpmYWtlX2NpczsKKworCXN0cnVjdCBsaXN0X2hlYWQJCXNvY2tldF9saXN0OworCXN0cnVjdCBjb21wbGV0aW9uCQlzb2NrZXRfcmVsZWFzZWQ7CisKKyAJLyogZGVwcmVjYXRlZCAqLworCXVuc2lnbmVkIGludAkJCXNvY2s7CQkvKiBzb2NrZXQgbnVtYmVyICovCisKKworCS8qIHNvY2tldCBjYXBhYmlsaXRpZXMgKi8KKwl1X2ludAkJCQlmZWF0dXJlczsKKwl1X2ludAkJCQlpcnFfbWFzazsKKwl1X2ludAkJCQltYXBfc2l6ZTsKKwlraW9fYWRkcl90CQkJaW9fb2Zmc2V0OworCXVfY2hhcgkJCQlwY2lfaXJxOworCXN0cnVjdCBwY2lfZGV2ICoJCWNiX2RldjsKKworCisJLyogc29ja2V0IHNldHVwIGlzIGRvbmUgc28gcmVzb3VyY2VzIHNob3VsZCBiZSBhYmxlIHRvIGJlIGFsbG9jYXRlZC4gT25seQorCSAqIGlmIHNldCB0byAxLCBjYWxscyB0byBmaW5kX3tpbyxtZW19X3JlZ2lvbiBhcmUgaGFuZGxlZCwgYW5kIGluc2VydGlvbgorCSAqIGV2ZW50cyBhcmUgYWN0dWFsbHkgbWFuYWdlZCBieSB0aGUgUENNQ0lBIGxheWVyLiovCisJdTgJCQkJcmVzb3VyY2Vfc2V0dXBfZG9uZToxOworCisJLyogaXMgc2V0IHRvIG9uZSBpZiByZXNvdXJjZSBzZXR1cCBpcyBkb25lIHVzaW5nIGFkanVzdF9yZXNvdXJjZV9pbmZvKCkgKi8KKwl1OAkJCQlyZXNvdXJjZV9zZXR1cF9vbGQ6MTsKKworCXU4CQkJCXJlc2VydmVkOjY7CisKKwkvKiBzb2NrZXQgb3BlcmF0aW9ucyAqLworCXN0cnVjdCBwY2NhcmRfb3BlcmF0aW9ucyAqCW9wczsKKwlzdHJ1Y3QgcGNjYXJkX3Jlc291cmNlX29wcyAqCXJlc291cmNlX29wczsKKwl2b2lkICoJCQkJcmVzb3VyY2VfZGF0YTsKKworCS8qIFpvb20gdmlkZW8gYmVoYXZpb3VyIGlzIHNvIGNoaXAgc3BlY2lmaWMgaXRzIG5vdCB3b3J0aCBhZGRpbmcKKwkgICB0aGlzIHRvIF9vcHMgKi8KKwl2b2lkIAkJCQkoKnpvb21fdmlkZW8pKHN0cnVjdCBwY21jaWFfc29ja2V0ICosIGludCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwkvKiBzdGF0ZSB0aHJlYWQgKi8KKwlzdHJ1Y3Qgc2VtYXBob3JlCQlza3Rfc2VtOwkvKiBwcm90ZWN0cyBzb2NrZXQgaC93IHN0YXRlICovCisKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QJCSp0aHJlYWQ7CisJc3RydWN0IGNvbXBsZXRpb24JCXRocmVhZF9kb25lOworCXdhaXRfcXVldWVfaGVhZF90CQl0aHJlYWRfd2FpdDsKKwlzcGlubG9ja190CQkJdGhyZWFkX2xvY2s7CS8qIHByb3RlY3RzIHRocmVhZF9ldmVudHMgKi8KKwl1bnNpZ25lZCBpbnQJCQl0aHJlYWRfZXZlbnRzOworCisJLyogcGNtY2lhICgxNi1iaXQpICovCisJc3RydWN0IHBjbWNpYV9idXNfc29ja2V0CSpwY21jaWE7CisJc3RydWN0IHBjbWNpYV9jYWxsYmFjawkJKmNhbGxiYWNrOworCisJLyogY2FyZGJ1cyAoMzItYml0KSAqLworI2lmZGVmIENPTkZJR19DQVJEQlVTCisJc3RydWN0IHJlc291cmNlICoJCWNiX2Npc19yZXM7CisJdm9pZCBfX2lvbWVtCQkJKmNiX2Npc192aXJ0OworI2VuZGlmCisKKwkvKiBzb2NrZXQgZGV2aWNlICovCisJc3RydWN0IGNsYXNzX2RldmljZQkJZGV2OworCXZvaWQJCQkJKmRyaXZlcl9kYXRhOwkvKiBkYXRhIGludGVybmFsIHRvIHRoZSBzb2NrZXQgZHJpdmVyICovCisKK307CisKK3N0cnVjdCBwY21jaWFfc29ja2V0ICogcGNtY2lhX2dldF9zb2NrZXRfYnlfbnIodW5zaWduZWQgaW50IG5yKTsKKworCisKK2V4dGVybiB2b2lkIHBjbWNpYV9wYXJzZV9ldmVudHMoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNvY2tldCwgdW5zaWduZWQgaW50IGV2ZW50cyk7CitleHRlcm4gaW50IHBjbWNpYV9yZWdpc3Rlcl9zb2NrZXQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNvY2tldCk7CitleHRlcm4gdm9pZCBwY21jaWFfdW5yZWdpc3Rlcl9zb2NrZXQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNvY2tldCk7CisKK2V4dGVybiBzdHJ1Y3QgY2xhc3MgcGNtY2lhX3NvY2tldF9jbGFzczsKKworLyogc29ja2V0IGRyaXZlcnMgYXJlIGV4cGVjdGVkIHRvIHVzZSB0aGVzZSBjYWxsYmFja3MgaW4gdGhlaXIgLmRydiBzdHJ1Y3QgKi8KK2V4dGVybiBpbnQgcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSk7CitleHRlcm4gaW50IHBjbWNpYV9zb2NrZXRfZGV2X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpOworCisjZW5kaWYgLyogX0xJTlVYX1NTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvcGNtY2lhL3ZlcnNpb24uaCBiL2luY2x1ZGUvcGNtY2lhL3ZlcnNpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjg4MjYzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9wY21jaWEvdmVyc2lvbi5oCkBAIC0wLDAgKzEsNCBAQAorLyogdmVyc2lvbi5oIDEuOTQgMjAwMC8xMC8wMyAxNzo1NTo0OCAoRGF2aWQgSGluZHMpICovCisKKyNkZWZpbmUgQ1NfUkVMRUFTRSAiMy4xLjIyIgorI2RlZmluZSBDU19SRUxFQVNFX0NPREUgMHgzMTE2CmRpZmYgLS1naXQgYS9pbmNsdWRlL3J4cnBjL2NhbGwuaCBiL2luY2x1ZGUvcnhycGMvY2FsbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0OGYyN2UKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3J4cnBjL2NhbGwuaApAQCAtMCwwICsxLDIxMiBAQAorLyogY2FsbC5oOiBSeCBjYWxsIHJlY29yZAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMiBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9MSU5VWF9SWFJQQ19DQUxMX0gKKyNkZWZpbmUgX0xJTlVYX1JYUlBDX0NBTExfSAorCisjaW5jbHVkZSA8cnhycGMvdHlwZXMuaD4KKyNpbmNsdWRlIDxyeHJwYy9yeHJwYy5oPgorI2luY2x1ZGUgPHJ4cnBjL3BhY2tldC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisKKyNkZWZpbmUgUlhSUENfQ0FMTF9BQ0tfV0lORE9XX1NJWkUJMTYKKworZXh0ZXJuIHVuc2lnbmVkIHJ4cnBjX2NhbGxfcmN2X3RpbWVvdXQ7CQkvKiByZWNlaXZlIGFjdGl2aXR5IHRpbWVvdXQgKHNlY3MpICovCisKKy8qIGFwcGxpY2F0aW9uIGNhbGwgc3RhdGUKKyAqIC0gb25seSBzdGF0ZSAwIGFuZCBmZmZmIGFyZSByZXNlcnZlZCwgdGhlIHN0YXRlIGlzIHNldCB0byAxIGFmdGVyIGFuIG9waWQgaXMgcmVjZWl2ZWQKKyAqLworZW51bSByeHJwY19hcHBfY3N0YXRlIHsKKwlSWFJQQ19DU1RBVEVfQ09NUExFVEUJCT0gMCwJLyogb3BlcmF0aW9uIGNvbXBsZXRlICovCisJUlhSUENfQ1NUQVRFX0VSUk9SLAkJCS8qIG9wZXJhdGlvbiBJQ01QIGVycm9yIG9yIGFib3J0ZWQgKi8KKwlSWFJQQ19DU1RBVEVfU1JWUl9SQ1ZfT1BJRCwJCS8qIFtTRVJWRVJdIHJlY2VpdmluZyBvcGVyYXRpb24gSUQgKi8KKwlSWFJQQ19DU1RBVEVfU1JWUl9SQ1ZfQVJHUywJCS8qIFtTRVJWRVJdIHJlY2VpdmluZyBvcGVyYXRpb24gZGF0YSAqLworCVJYUlBDX0NTVEFURV9TUlZSX0dPVF9BUkdTLAkJLyogW1NFUlZFUl0gY29tcGxldGVseSByZWNlaXZlZCBvcGVyYXRpb24gZGF0YSAqLworCVJYUlBDX0NTVEFURV9TUlZSX1NORF9SRVBMWSwJCS8qIFtTRVJWRVJdIHNlbmRpbmcgb3BlcmF0aW9uIHJlcGx5ICovCisJUlhSUENfQ1NUQVRFX1NSVlJfUkNWX0ZJTkFMX0FDSywJLyogW1NFUlZFUl0gcmVjZWl2aW5nIGZpbmFsIEFDSyAqLworCVJYUlBDX0NTVEFURV9DTE5UX1NORF9BUkdTLAkJLyogW0NMSUVOVF0gc2VuZGluZyBvcGVyYXRpb24gYXJncyAqLworCVJYUlBDX0NTVEFURV9DTE5UX1JDVl9SRVBMWSwJCS8qIFtDTElFTlRdIHJlY2VpdmluZyBvcGVyYXRpb24gcmVwbHkgKi8KKwlSWFJQQ19DU1RBVEVfQ0xOVF9HT1RfUkVQTFksCQkvKiBbQ0xJRU5UXSBjb21wbGV0ZWx5IHJlY2VpdmVkIG9wZXJhdGlvbiByZXBseSAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworZXh0ZXJuIGNvbnN0IGNoYXIgKnJ4cnBjX2NhbGxfc3RhdGVzW107CisKK2VudW0gcnhycGNfYXBwX2VzdGF0ZSB7CisJUlhSUENfRVNUQVRFX05PX0VSUk9SCQk9IDAsCS8qIG5vIGVycm9yICovCisJUlhSUENfRVNUQVRFX0xPQ0FMX0FCT1JULAkJLyogYWJvcnRlZCBsb2NhbGx5IGJ5IGFwcGxpY2F0aW9uIGxheWVyICovCisJUlhSUENfRVNUQVRFX1BFRVJfQUJPUlQsCQkvKiBhYm9ydGVkIHJlbW90ZWx5IGJ5IHBlZXIgKi8KKwlSWFJQQ19FU1RBVEVfTE9DQUxfRVJST1IsCQkvKiBsb2NhbCBJQ01QIG5ldHdvcmsgZXJyb3IgKi8KKwlSWFJQQ19FU1RBVEVfUkVNT1RFX0VSUk9SLAkJLyogcmVtb3RlIElDTVAgbmV0d29yayBlcnJvciAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworZXh0ZXJuIGNvbnN0IGNoYXIgKnJ4cnBjX2NhbGxfZXJyb3Jfc3RhdGVzW107CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBSeCBjYWxsIHJlY29yZCBhbmQgYXBwbGljYXRpb24gc2NyYXRjaCBidWZmZXIKKyAqIC0gdGhlIGNhbGwgcmVjb3JkIG9jY3VwaWVzIHRoZSBib3R0b20gb2YgYSBjb21wbGV0ZSBwYWdlCisgKiAtIHRoZSBhcHBsaWNhdGlvbiBzY3JhdGNoIGJ1ZmZlciBvY2N1cGllcyB0aGUgcmVzdAorICovCitzdHJ1Y3QgcnhycGNfY2FsbAoreworCWF0b21pY190CQl1c2FnZTsKKwlzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbgkqY29ubjsJCS8qIGNvbm5lY3Rpb24gdXBvbiB3aGljaCBhY3RpdmUgKi8KKwlzcGlubG9ja190CQlsb2NrOwkJLyogYWNjZXNzIGxvY2sgKi8KKwlzdHJ1Y3QgbW9kdWxlCQkqb3duZXI7CQkvKiBvd25lciBtb2R1bGUgKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdAl3YWl0cTsJCS8qIHdhaXQgcXVldWUgZm9yIGV2ZW50cyB0byBoYXBwZW4gKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpbms7CQkvKiBnZW5lcmFsIGludGVybmFsIGxpc3QgbGluayAqLworCXN0cnVjdCBsaXN0X2hlYWQJY2FsbF9saW5rOwkvKiBtYXN0ZXIgY2FsbCBsaXN0IGxpbmsgKi8KKwlfX2JlMzIJCQljaGFuX2l4OwkvKiBjb25uZWN0aW9uIGNoYW5uZWwgaW5kZXggICovCisJX19iZTMyCQkJY2FsbF9pZDsJLyogY2FsbCBJRCBvbiBjb25uZWN0aW9uICAqLworCXVuc2lnbmVkIGxvbmcJCWNqaWY7CQkvKiBqaWZmaWVzIGF0IGNhbGwgY3JlYXRpb24gKi8KKwl1bnNpZ25lZCBsb25nCQlmbGFnczsJCS8qIGNvbnRyb2wgZmxhZ3MgKi8KKyNkZWZpbmUgUlhSUENfQ0FMTF9BQ0tTX1RJTU8JMHgwMDAwMDAwMQkvKiBBQ0tTIHRpbWVvdXQgcmVhY2hlZCAqLworI2RlZmluZSBSWFJQQ19DQUxMX0FDS1JfVElNTwkweDAwMDAwMDAyCS8qIEFDS1IgdGltZW91dCByZWFjaGVkICovCisjZGVmaW5lIFJYUlBDX0NBTExfUkNWX1RJTU8JMHgwMDAwMDAwNAkvKiBSQ1YgdGltZW91dCByZWFjaGVkICovCisjZGVmaW5lIFJYUlBDX0NBTExfUkNWX1BLVAkweDAwMDAwMDA4CS8qIHJlY2VpdmVkIHBhY2tldCAqLworCisJLyogdHJhbnNtaXNzaW9uICovCisJcnhycGNfc2VxX3QJCXNuZF9zZXFfY291bnQ7CS8qIG91dGdvaW5nIHBhY2tldCBzZXF1ZW5jZSBudW1iZXIgY291bnRlciAqLworCXN0cnVjdCByeHJwY19tZXNzYWdlCSpzbmRfbmV4dG1zZzsJLyogbmV4dCBtZXNzYWdlIGJlaW5nIGNvbnN0cnVjdGVkIGZvciBzZW5kaW5nICovCisJc3RydWN0IHJ4cnBjX21lc3NhZ2UJKnNuZF9waW5nOwkvKiBsYXN0IHBpbmcgbWVzc2FnZSBzZW50ICovCisJdW5zaWduZWQgc2hvcnQJCXNuZF9yZXNlbmRfY250OwkvKiBjb3VudCBvZiByZXNlbmRzIHNpbmNlIGxhc3QgQUNLICovCisKKwkvKiB0cmFuc21pc3Npb24gQUNLIHRyYWNraW5nICovCisJc3RydWN0IGxpc3RfaGVhZAlhY2tzX3BlbmRxOwkvKiBtZXNzYWdlcyBwZW5kaW5nIEFDSyAob3JkZXJlZCBieSBzZXEpICovCisJdW5zaWduZWQJCWFja3NfcGVuZF9jbnQ7CS8qIG51bWJlciBvZiB1bi1BQ0snZCBwYWNrZXRzICovCisJcnhycGNfc2VxX3QJCWFja3NfZGZ0dl9zZXE7CS8qIGhpZ2hlc3QgZGVmaW5pdGl2ZWx5IEFDSydkIG1zZyBzZXEgKi8KKwlzdHJ1Y3QgdGltZXJfbGlzdAlhY2tzX3RpbWVvdXQ7CS8qIHRpbWVvdXQgb24gZXhwZWN0ZWQgQUNLICovCisKKwkvKiByZWNlcHRpb24gKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCXJjdl9yZWNlaXZlcTsJLyogbWVzc2FnZXMgcGVuZGluZyByZWNlcHRpb24gKG9yZGVyZWQgYnkgc2VxKSAqLworCXN0cnVjdCBsaXN0X2hlYWQJcmN2X2tyeGlvZHFfbGs7CS8qIGtyeGlvZCBxdWV1ZSBmb3IgbmV3IGluYm91bmQgcGFja2V0cyAqLworCXN0cnVjdCB0aW1lcl9saXN0CXJjdl90aW1lb3V0OwkvKiBjYWxsIHJlY2VpdmUgYWN0aXZpdHkgdGltZW91dCAqLworCisJLyogcmVjZXB0aW9uIEFDSydpbmcgKi8KKwlyeHJwY19zZXFfdAkJYWNrcl93aW5fYm90OwkvKiBib3R0b20gb2YgQUNLIHdpbmRvdyAqLworCXJ4cnBjX3NlcV90CQlhY2tyX3dpbl90b3A7CS8qIHRvcCBvZiBBQ0sgd2luZG93ICovCisJcnhycGNfc2VxX3QJCWFja3JfaGlnaF9zZXE7CS8qIGhpZ2hlc3Qgc2Vxbm8geWV0IHJlY2VpdmVkICovCisJcnhycGNfc2VxX25ldF90CQlhY2tyX3ByZXZfc2VxOwkvKiBwcmV2aW91cyBzZXFubyByZWNlaXZlZCAqLworCXVuc2lnbmVkCQlhY2tyX3BlbmRfY250OwkvKiBudW1iZXIgb2YgcGVuZGluZyBBQ0tzICovCisJc3RydWN0IHRpbWVyX2xpc3QJYWNrcl9kZnJfdGltbzsJLyogdGltZW91dCBvbiBkZWZlcnJlZCBBQ0sgKi8KKwljaGFyCQkJYWNrcl9kZnJfcGVybTsJLyogcmVxdWVzdCBmb3IgZGVmZXJyZWQgQUNLcyBwZXJtaXR0ZWQgKi8KKwlyeHJwY19zZXFfdAkJYWNrcl9kZnJfc2VxOwkvKiBzZXFubyBmb3IgZGVmZXJyZWQgQUNLICovCisJc3RydWN0IHJ4cnBjX2Fja3BhY2tldAlhY2tyOwkJLyogcGVuZGluZyBub3JtYWwgQUNLIHBhY2tldCAqLworCXVpbnQ4X3QJCQlhY2tyX2FycmF5W1JYUlBDX0NBTExfQUNLX1dJTkRPV19TSVpFXTsJLyogQUNLIHJlY29yZHMgKi8KKworCS8qIHByZXNlbnRhdGlvbiBsYXllciAqLworCWNoYXIJCQlhcHBfbGFzdF9yY3Y7CS8qIFQgaWYgcmVjZWl2ZWQgbGFzdCBwYWNrZXQgZnJvbSByZW1vdGUgZW5kICovCisJZW51bSByeHJwY19hcHBfY3N0YXRlCWFwcF9jYWxsX3N0YXRlOwkvKiBjYWxsIHN0YXRlICovCisJZW51bSByeHJwY19hcHBfZXN0YXRlCWFwcF9lcnJfc3RhdGU7CS8qIGFib3J0L2Vycm9yIHN0YXRlICovCisJc3RydWN0IGxpc3RfaGVhZAlhcHBfcmVhZHlxOwkvKiBvcmRlcmVkIHJlYWR5IHJlY2VpdmVkIHBhY2tldCBxdWV1ZSAqLworCXN0cnVjdCBsaXN0X2hlYWQJYXBwX3VucmVhZHlxOwkvKiBvcmRlcmVkIHBvc3QtaG9sZSByZWN2J2QgcGFja2V0IHF1ZXVlICovCisJcnhycGNfc2VxX3QJCWFwcF9yZWFkeV9zZXE7CS8qIGxhc3Qgc2VxIG51bWJlciBkcm9wcGVkIGludG8gcmVhZHlxICovCisJc2l6ZV90CQkJYXBwX3JlYWR5X3F0eTsJLyogYW1vdW50IG9mIGRhdGEgcmVhZHkgaW4gcmVhZHlxICovCisJdW5zaWduZWQJCWFwcF9vcGNvZGU7CS8qIG9wZXJhdGlvbiBJRCAqLworCXVuc2lnbmVkCQlhcHBfYWJvcnRfY29kZTsJLyogYWJvcnQgY29kZSAod2hlbiBhYm9ydGVkKSAqLworCWludAkJCWFwcF9lcnJubzsJLyogZXJyb3IgbnVtYmVyICh3aGVuIElDTVAgZXJyb3IgcmVjZWl2ZWQpICovCisKKwkvKiBzdGF0aXNpY3MgKi8KKwl1bnNpZ25lZAkJcGt0X3Jjdl9jb3VudDsJLyogY291bnQgb2YgcmVjZWl2ZWQgcGFja2V0cyBvbiB0aGlzIGNhbGwgKi8KKwl1bnNpZ25lZAkJcGt0X3NuZF9jb3VudDsJLyogY291bnQgb2Ygc2VudCBwYWNrZXRzIG9uIHRoaXMgY2FsbCAqLworCXVuc2lnbmVkCQlhcHBfcmVhZF9jb3VudDsJLyogbnVtYmVyIG9mIHJlYWRzIGlzc3VlZCAqLworCisJLyogYml0cyBmb3IgdGhlIGFwcGxpY2F0aW9uIHRvIHVzZSAqLworCXJ4cnBjX2NhbGxfYXR0bl9mdW5jX3QJYXBwX2F0dG5fZnVuYzsJLyogY2FsbGJhY2sgd2hlbiBhdHRlbnRpb24gcmVxdWlyZWQgKi8KKwlyeHJwY19jYWxsX2Vycm9yX2Z1bmNfdAlhcHBfZXJyb3JfZnVuYzsJLyogY2FsbGJhY2sgd2hlbiBhYm9ydCBzZW50IChjbGVhbnVwIGFuZCBwdXQpICovCisJcnhycGNfY2FsbF9hZW1hcF9mdW5jX3QJYXBwX2FlbWFwX2Z1bmM7CS8qIGNhbGxiYWNrIHRvIG1hcCBhYm9ydCBjb2RlIHRvL2Zyb20gZXJybm8gKi8KKwl2b2lkCQkJKmFwcF91c2VyOwkvKiBhcHBsaWNhdGlvbiBkYXRhICovCisJc3RydWN0IGxpc3RfaGVhZAlhcHBfbGluazsJLyogYXBwbGljYXRpb24gbGlzdCBsaW5rYWdlICovCisJc3RydWN0IGxpc3RfaGVhZAlhcHBfYXR0bl9saW5rOwkvKiBhcHBsaWNhdGlvbiBhdHRlbnRpb24gbGlzdCBsaW5rYWdlICovCisJc2l6ZV90CQkJYXBwX21hcms7CS8qIHRyaWdnZXIgY2FsbGJhY2sgd2hlbiBhcHBfcmVhZHlfcXR5Pj1hcHBfbWFyayAqLworCWNoYXIJCQlhcHBfYXN5bmNfcmVhZDsJLyogVCBpZiBpbiBhc3luYy1yZWFkIG1vZGUgKi8KKwl1aW50OF90CQkJKmFwcF9yZWFkX2J1ZjsJLyogYXBwbGljYXRpb24gYXN5bmMgcmVhZCBidWZmZXIgKGFwcF9tYXJrIHNpemUpICovCisJdWludDhfdAkJCSphcHBfc2NyX2FsbG9jOwkvKiBhcHBsaWNhdGlvbiBzY3JhdGNoIGFsbG9jYXRpb24gcG9pbnRlciAqLworCXZvaWQJCQkqYXBwX3Njcl9wdHI7CS8qIGFwcGxpY2F0aW9uIHBvaW50ZXIgaW50byBzY3JhdGNoIGJ1ZmZlciAqLworCisjZGVmaW5lIFJYUlBDX0FQUF9NQVJLX0VPRiAweEZGRkZGRkZGVQkvKiBtYXJrIGF0IGVuZCBvZiBpbnB1dCAqLworCisJLyogYXBwbGljYXRpb24gc2NyYXRjaCBidWZmZXIgKi8KKwl1aW50OF90CQkJYXBwX3NjcmF0Y2hbMF0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZChzaXplb2YobG9uZykpKSk7Cit9OworCisjZGVmaW5lIFJYUlBDX0NBTExfU0NSQVRDSF9TSVpFIChQQUdFX1NJWkUgLSBzaXplb2Yoc3RydWN0IHJ4cnBjX2NhbGwpKQorCisjZGVmaW5lIHJ4cnBjX2NhbGxfcmVzZXRfc2NyYXRjaChDQUxMKSBcCitkbyB7IChDQUxMKS0+YXBwX3Njcl9hbGxvYyA9IChDQUxMKS0+YXBwX3NjcmF0Y2g7IH0gd2hpbGUoMCkKKworI2RlZmluZSByeHJwY19jYWxsX2FsbG9jX3NjcmF0Y2goQ0FMTCxTSVpFKQkJCQkJCVwKKyh7CQkJCQkJCQkJCQlcCisJdm9pZCAqcHRyOwkJCQkJCQkJCVwKKwlwdHIgPSAoQ0FMTCktPmFwcF9zY3JfYWxsb2M7CQkJCQkJCVwKKwkoQ0FMTCktPmFwcF9zY3JfYWxsb2MgKz0gKFNJWkUpOwkJCQkJCVwKKwlpZiAoKFNJWkUpPlJYUlBDX0NBTExfU0NSQVRDSF9TSVpFIHx8CQkJCQkJXAorCSAgICAoc2l6ZV90KSgoQ0FMTCktPmFwcF9zY3JfYWxsb2MgLSAodTgqKShDQUxMKSkgPiBSWFJQQ19DQUxMX1NDUkFUQ0hfU0laRSkgewlcCisJCXByaW50aygicnhycGNfY2FsbF9hbGxvY19zY3JhdGNoKCVwLCVadSlcbiIsKENBTEwpLChzaXplX3QpKFNJWkUpKTsJXAorCQlCVUcoKTsJCQkJCQkJCQlcCisJfQkJCQkJCQkJCQlcCisJcHRyOwkJCQkJCQkJCQlcCit9KQorCisjZGVmaW5lIHJ4cnBjX2NhbGxfYWxsb2Nfc2NyYXRjaF9zKENBTEwsVFlQRSkJCQkJCQlcCisoewkJCQkJCQkJCQkJXAorCXNpemVfdCBzaXplID0gc2l6ZW9mKFRZUEUpOwkJCQkJCQlcCisJVFlQRSAqcHRyOwkJCQkJCQkJCVwKKwlwdHIgPSAoVFlQRSopKENBTEwpLT5hcHBfc2NyX2FsbG9jOwkJCQkJCVwKKwkoQ0FMTCktPmFwcF9zY3JfYWxsb2MgKz0gc2l6ZTsJCQkJCQkJXAorCWlmIChzaXplPlJYUlBDX0NBTExfU0NSQVRDSF9TSVpFIHx8CQkJCQkJXAorCSAgICAoc2l6ZV90KSgoQ0FMTCktPmFwcF9zY3JfYWxsb2MgLSAodTgqKShDQUxMKSkgPiBSWFJQQ19DQUxMX1NDUkFUQ0hfU0laRSkgewlcCisJCXByaW50aygicnhycGNfY2FsbF9hbGxvY19zY3JhdGNoKCVwLCVadSlcbiIsKENBTEwpLHNpemUpOwkJXAorCQlCVUcoKTsJCQkJCQkJCQlcCisJfQkJCQkJCQkJCQlcCisJcHRyOwkJCQkJCQkJCQlcCit9KQorCisjZGVmaW5lIHJ4cnBjX2NhbGxfaXNfYWNrX3BlbmRpbmcoQ0FMTCkgKChDQUxMKS0+YWNrci5yZWFzb24gIT0gMCkKKworZXh0ZXJuIGludCByeHJwY19jcmVhdGVfY2FsbChzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubiwKKwkJCSAgICAgcnhycGNfY2FsbF9hdHRuX2Z1bmNfdCBhdHRuLAorCQkJICAgICByeHJwY19jYWxsX2Vycm9yX2Z1bmNfdCBlcnJvciwKKwkJCSAgICAgcnhycGNfY2FsbF9hZW1hcF9mdW5jX3QgYWVtYXAsCisJCQkgICAgIHN0cnVjdCByeHJwY19jYWxsICoqX2NhbGwpOworCitleHRlcm4gaW50IHJ4cnBjX2luY29taW5nX2NhbGwoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sCisJCQkgICAgICAgc3RydWN0IHJ4cnBjX21lc3NhZ2UgKm1zZywKKwkJCSAgICAgICBzdHJ1Y3QgcnhycGNfY2FsbCAqKl9jYWxsKTsKKworc3RhdGljIGlubGluZSB2b2lkIHJ4cnBjX2dldF9jYWxsKHN0cnVjdCByeHJwY19jYWxsICpjYWxsKQoreworCUJVR19PTihhdG9taWNfcmVhZCgmY2FsbC0+dXNhZ2UpPD0wKTsKKwlhdG9taWNfaW5jKCZjYWxsLT51c2FnZSk7CisJLypwcmludGsoInJ4cnBjX2dldF9jYWxsKCVwe3U9JWR9KVxuIiwoQyksYXRvbWljX3JlYWQoJihDKS0+dXNhZ2UpKTsqLworfQorCitleHRlcm4gdm9pZCByeHJwY19wdXRfY2FsbChzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCk7CisKK2V4dGVybiB2b2lkIHJ4cnBjX2NhbGxfZG9fc3R1ZmYoc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwpOworCitleHRlcm4gaW50IHJ4cnBjX2NhbGxfYWJvcnQoc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwsIGludCBlcnJvcik7CisKKyNkZWZpbmUgUlhSUENfQ0FMTF9SRUFEX0JMT0NLCTB4MDAwMQkvKiBibG9jayBpZiBub3QgZW5vdWdoIGRhdGEgYW5kIG5vdCB5ZXQgRU9GICovCisjZGVmaW5lIFJYUlBDX0NBTExfUkVBRF9BTEwJMHgwMDAyCS8qIGVycm9yIGlmIGluc3VmZmljaWVudCBkYXRhIHJlY2VpdmVkICovCitleHRlcm4gaW50IHJ4cnBjX2NhbGxfcmVhZF9kYXRhKHN0cnVjdCByeHJwY19jYWxsICpjYWxsLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpOworCitleHRlcm4gaW50IHJ4cnBjX2NhbGxfd3JpdGVfZGF0YShzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCwKKwkJCQkgc2l6ZV90IHNpb2MsCisJCQkJIHN0cnVjdCBrdmVjICpzaW92LAorCQkJCSB1aW50OF90IHJ4aGRyX2ZsYWdzLAorCQkJCSBpbnQgYWxsb2NfZmxhZ3MsCisJCQkJIGludCBkdXBfZGF0YSwKKwkJCQkgc2l6ZV90ICpzaXplX3NlbnQpOworCitleHRlcm4gdm9pZCByeHJwY19jYWxsX2hhbmRsZV9lcnJvcihzdHJ1Y3QgcnhycGNfY2FsbCAqY29ubiwgaW50IGxvY2FsLCBpbnQgZXJybm8pOworCisjZW5kaWYgLyogX0xJTlVYX1JYUlBDX0NBTExfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9yeHJwYy9jb25uZWN0aW9uLmggYi9pbmNsdWRlL3J4cnBjL2Nvbm5lY3Rpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWU2NzgxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9yeHJwYy9jb25uZWN0aW9uLmgKQEAgLTAsMCArMSw4MyBAQAorLyogY29ubmVjdGlvbi5oOiBSeCBjb25uZWN0aW9uIHJlY29yZAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMiBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9MSU5VWF9SWFJQQ19DT05ORUNUSU9OX0gKKyNkZWZpbmUgX0xJTlVYX1JYUlBDX0NPTk5FQ1RJT05fSAorCisjaW5jbHVkZSA8cnhycGMvdHlwZXMuaD4KKyNpbmNsdWRlIDxyeHJwYy9rcnh0aW1vZC5oPgorCitzdHJ1Y3Qgc2tfYnVmZjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIFJ4IGNvbm5lY3Rpb24KKyAqIC0gY29ubmVjdGlvbnMgYXJlIG1hdGNoZWQgYnkgKHJtdF9wb3J0LHJtdF9hZGRyLHNlcnZpY2VfaWQsY29ubl9pZCxjbGllbnRmbGFnKQorICogLSBjb25uZWN0aW9ucyBvbmx5IHJldGFpbiBhIHJlZmNvdW50IG9uIHRoZSBwZWVyIHdoZW4gdGhleSBhcmUgYWN0aXZlCisgKiAtIGNvbm5lY3Rpb25zIHdpdGggcmVmY291bnQ9PTAgYXJlIGluYWN0aXZlIGFuZCByZXNpZGUgaW4gdGhlIHBlZXIncyBncmF2ZXlhcmQKKyAqLworc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24KK3sKKwlhdG9taWNfdAkJdXNhZ2U7CisJc3RydWN0IHJ4cnBjX3RyYW5zcG9ydAkqdHJhbnM7CQkvKiB0cmFuc3BvcnQgZW5kcG9pbnQgKi8KKwlzdHJ1Y3QgcnhycGNfcGVlcgkqcGVlcjsJCS8qIHBlZXIgZnJvbS90byB3aGljaCBjb25uZWN0ZWQgKi8KKwlzdHJ1Y3QgcnhycGNfc2VydmljZQkqc2VydmljZTsJLyogcmVzcG9uc2libGUgc2VydmljZSAoaW5ib3VuZCBjb25ucykgKi8KKwlzdHJ1Y3QgcnhycGNfdGltZXIJdGltZW91dDsJLyogZGVjYWNoaW5nIHRpbWVyICovCisJc3RydWN0IGxpc3RfaGVhZAlsaW5rOwkJLyogbGluayBpbiBwZWVyJ3MgbGlzdCAqLworCXN0cnVjdCBsaXN0X2hlYWQJcHJvY19saW5rOwkvKiBsaW5rIGluIHByb2MgbGlzdCAqLworCXN0cnVjdCBsaXN0X2hlYWQJZXJyX2xpbms7CS8qIGxpbmsgaW4gSUNNUCBlcnJvciBwcm9jZXNzaW5nIGxpc3QgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCWlkX2xpbms7CS8qIGxpbmsgaW4gSUQgZ3JhbnQgbGlzdCAqLworCXN0cnVjdCBzb2NrYWRkcl9pbglhZGRyOwkJLyogcmVtb3RlIGFkZHJlc3MgKi8KKwlzdHJ1Y3QgcnhycGNfY2FsbAkqY2hhbm5lbHNbNF07CS8qIGNoYW5uZWxzIChhY3RpdmUgY2FsbHMpICovCisJd2FpdF9xdWV1ZV9oZWFkX3QJY2hhbndhaXQ7CS8qIHdhaXQgZm9yIGNoYW5uZWwgdG8gYmVjb21lIGF2YWlsYWJsZSAqLworCXNwaW5sb2NrX3QJCWxvY2s7CQkvKiBhY2Nlc3MgbG9jayAqLworCXN0cnVjdCB0aW1ldmFsCQlhdGltZTsJCS8qIGxhc3QgYWNjZXNzIHRpbWUgKi8KKwlzaXplX3QJCQltdHVfc2l6ZTsJLyogTVRVIHNpemUgZm9yIG91dGJvdW5kIG1lc3NhZ2VzICovCisJdW5zaWduZWQJCWNhbGxfY291bnRlcjsJLyogY2FsbCBJRCBjb3VudGVyICovCisJcnhycGNfc2VyaWFsX3QJCXNlcmlhbF9jb3VudGVyOwkvKiBwYWNrZXQgc2VyaWFsIG51bWJlciBjb3VudGVyICovCisKKwkvKiB0aGUgZm9sbG93aW5nIHNob3VsZCBhbGwgYmUgaW4gbmV0IG9yZGVyICovCisJX19iZTMyCQkJaW5fZXBvY2g7CS8qIHBlZXIncyBlcG9jaCAqLworCV9fYmUzMgkJCW91dF9lcG9jaDsJLyogbXkgZXBvY2ggKi8KKwlfX2JlMzIJCQljb25uX2lkOwkvKiBjb25uZWN0aW9uIElELCBhcHByb3ByaWF0ZWx5IHNoaWZ0ZWQgKi8KKwlfX2JlMTYJCQlzZXJ2aWNlX2lkOwkvKiBzZXJ2aWNlIElEICovCisJdWludDhfdAkJCXNlY3VyaXR5X2l4OwkvKiBzZWN1cml0eSBJRCAqLworCXVpbnQ4X3QJCQlpbl9jbGllbnRmbGFnOwkvKiBSWFJQQ19DTElFTlRfSU5JVElBVEVEIGlmIHdlIGFyZSBzZXJ2ZXIgKi8KKwl1aW50OF90CQkJb3V0X2NsaWVudGZsYWc7CS8qIFJYUlBDX0NMSUVOVF9JTklUSUFURUQgaWYgd2UgYXJlIGNsaWVudCAqLworfTsKKworZXh0ZXJuIGludCByeHJwY19jcmVhdGVfY29ubmVjdGlvbihzdHJ1Y3QgcnhycGNfdHJhbnNwb3J0ICp0cmFucywKKwkJCQkgICBfX2JlMTYgcG9ydCwKKwkJCQkgICBfX2JlMzIgYWRkciwKKwkJCQkgICB1aW50MTZfdCBzZXJ2aWNlX2lkLAorCQkJCSAgIHZvaWQgKnNlY3VyaXR5LAorCQkJCSAgIHN0cnVjdCByeHJwY19jb25uZWN0aW9uICoqX2Nvbm4pOworCitleHRlcm4gaW50IHJ4cnBjX2Nvbm5lY3Rpb25fbG9va3VwKHN0cnVjdCByeHJwY19wZWVyICpwZWVyLAorCQkJCSAgIHN0cnVjdCByeHJwY19tZXNzYWdlICptc2csCisJCQkJICAgc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKipfY29ubik7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByeHJwY19nZXRfY29ubmVjdGlvbihzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubikKK3sKKwlCVUdfT04oYXRvbWljX3JlYWQoJmNvbm4tPnVzYWdlKTwwKTsKKwlhdG9taWNfaW5jKCZjb25uLT51c2FnZSk7CisJLy9wcmludGsoInJ4cnBjX2dldF9jb25uKCVwe3U9JWR9KVxuIixjb25uLGF0b21pY19yZWFkKCZjb25uLT51c2FnZSkpOworfQorCitleHRlcm4gdm9pZCByeHJwY19wdXRfY29ubmVjdGlvbihzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubik7CisKK2V4dGVybiBpbnQgcnhycGNfY29ubl9yZWNlaXZlX2NhbGxfcGFja2V0KHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLAorCQkJCQkgIHN0cnVjdCByeHJwY19jYWxsICpjYWxsLAorCQkJCQkgIHN0cnVjdCByeHJwY19tZXNzYWdlICptc2cpOworCitleHRlcm4gdm9pZCByeHJwY19jb25uX2hhbmRsZV9lcnJvcihzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubiwgaW50IGxvY2FsLCBpbnQgZXJybm8pOworCisjZW5kaWYgLyogX0xJTlVYX1JYUlBDX0NPTk5FQ1RJT05fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9yeHJwYy9rcnhpb2QuaCBiL2luY2x1ZGUvcnhycGMva3J4aW9kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBlMGU4MgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvcnhycGMva3J4aW9kLmgKQEAgLTAsMCArMSwyNyBAQAorLyoga3J4aW9kLmg6IFJ4IFJQQyBJL08ga2VybmVsIHRocmVhZCBpbnRlcmZhY2UKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfTElOVVhfUlhSUENfS1JYSU9EX0gKKyNkZWZpbmUgX0xJTlVYX1JYUlBDX0tSWElPRF9ICisKKyNpbmNsdWRlIDxyeHJwYy90eXBlcy5oPgorCitleHRlcm4gaW50IHJ4cnBjX2tyeGlvZF9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgcnhycGNfa3J4aW9kX2tpbGwodm9pZCk7CitleHRlcm4gdm9pZCByeHJwY19rcnhpb2RfcXVldWVfdHJhbnNwb3J0KHN0cnVjdCByeHJwY190cmFuc3BvcnQgKnRyYW5zKTsKK2V4dGVybiB2b2lkIHJ4cnBjX2tyeGlvZF9kZXF1ZXVlX3RyYW5zcG9ydChzdHJ1Y3QgcnhycGNfdHJhbnNwb3J0ICp0cmFucyk7CitleHRlcm4gdm9pZCByeHJwY19rcnhpb2RfcXVldWVfcGVlcihzdHJ1Y3QgcnhycGNfcGVlciAqcGVlcik7CitleHRlcm4gdm9pZCByeHJwY19rcnhpb2RfZGVxdWV1ZV9wZWVyKHN0cnVjdCByeHJwY19wZWVyICpwZWVyKTsKK2V4dGVybiB2b2lkIHJ4cnBjX2tyeGlvZF9jbGVhcl9wZWVycyhzdHJ1Y3QgcnhycGNfdHJhbnNwb3J0ICp0cmFucyk7CitleHRlcm4gdm9pZCByeHJwY19rcnhpb2RfcXVldWVfY2FsbChzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCk7CitleHRlcm4gdm9pZCByeHJwY19rcnhpb2RfZGVxdWV1ZV9jYWxsKHN0cnVjdCByeHJwY19jYWxsICpjYWxsKTsKKworI2VuZGlmIC8qIF9MSU5VWF9SWFJQQ19LUlhJT0RfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9yeHJwYy9rcnhzZWNkLmggYi9pbmNsdWRlL3J4cnBjL2tyeHNlY2QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWNlNDNhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9yeHJwYy9rcnhzZWNkLmgKQEAgLTAsMCArMSwyMiBAQAorLyoga3J4c2VjZC5oOiBSeCBSUEMgc2VjdXJpdHkga2VybmVsIHRocmVhZCBpbnRlcmZhY2UKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfTElOVVhfUlhSUENfS1JYU0VDRF9ICisjZGVmaW5lIF9MSU5VWF9SWFJQQ19LUlhTRUNEX0gKKworI2luY2x1ZGUgPHJ4cnBjL3R5cGVzLmg+CisKK2V4dGVybiBpbnQgcnhycGNfa3J4c2VjZF9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgcnhycGNfa3J4c2VjZF9raWxsKHZvaWQpOworZXh0ZXJuIHZvaWQgcnhycGNfa3J4c2VjZF9jbGVhcl90cmFuc3BvcnQoc3RydWN0IHJ4cnBjX3RyYW5zcG9ydCAqdHJhbnMpOworZXh0ZXJuIHZvaWQgcnhycGNfa3J4c2VjZF9xdWV1ZV9pbmNvbWluZ19jYWxsKHN0cnVjdCByeHJwY19tZXNzYWdlICptc2cpOworCisjZW5kaWYgLyogX0xJTlVYX1JYUlBDX0tSWFNFQ0RfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9yeHJwYy9rcnh0aW1vZC5oIGIvaW5jbHVkZS9yeHJwYy9rcnh0aW1vZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzZDI5OGIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3J4cnBjL2tyeHRpbW9kLmgKQEAgLTAsMCArMSw0NSBAQAorLyoga3J4dGltb2QuaDogUnhSUEMgdGltZW91dCBkYWVtb24KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfTElOVVhfUlhSUENfS1JYVElNT0RfSAorI2RlZmluZSBfTElOVVhfUlhSUENfS1JYVElNT0RfSAorCisjaW5jbHVkZSA8cnhycGMvdHlwZXMuaD4KKworc3RydWN0IHJ4cnBjX3RpbWVyX29wcyB7CisJLyogY2FsbGVkIHdoZW4gdGhlIGZyb250IG9mIHRoZSB0aW1lciBxdWV1ZSBoYXMgdGltZWQgb3V0ICovCisJdm9pZCAoKnRpbWVkX291dCkoc3RydWN0IHJ4cnBjX3RpbWVyICp0aW1lcik7Cit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogUlhSUEMgdGltZXIvdGltZW91dCByZWNvcmQKKyAqLworc3RydWN0IHJ4cnBjX3RpbWVyCit7CisJc3RydWN0IGxpc3RfaGVhZAkJbGluazsJCS8qIGxpbmsgaW4gdGltZXIgcXVldWUgKi8KKwl1bnNpZ25lZCBsb25nCQkJdGltb19qaWY7CS8qIHRpbWVvdXQgdGltZSAqLworCWNvbnN0IHN0cnVjdCByeHJwY190aW1lcl9vcHMJKm9wczsJCS8qIHRpbWVvdXQgZXhwaXJ5IGZ1bmN0aW9uICovCit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgcnhycGNfdGltZXJfaW5pdChyeHJwY190aW1lcl90ICp0aW1lciwgY29uc3Qgc3RydWN0IHJ4cnBjX3RpbWVyX29wcyAqb3BzKQoreworCUlOSVRfTElTVF9IRUFEKCZ0aW1lci0+bGluayk7CisJdGltZXItPm9wcyA9IG9wczsKK30KKworZXh0ZXJuIGludCByeHJwY19rcnh0aW1vZF9zdGFydCh2b2lkKTsKK2V4dGVybiB2b2lkIHJ4cnBjX2tyeHRpbW9kX2tpbGwodm9pZCk7CisKK2V4dGVybiB2b2lkIHJ4cnBjX2tyeHRpbW9kX2FkZF90aW1lcihyeHJwY190aW1lcl90ICp0aW1lciwgdW5zaWduZWQgbG9uZyB0aW1lb3V0KTsKK2V4dGVybiBpbnQgcnhycGNfa3J4dGltb2RfZGVsX3RpbWVyKHJ4cnBjX3RpbWVyX3QgKnRpbWVyKTsKKworI2VuZGlmIC8qIF9MSU5VWF9SWFJQQ19LUlhUSU1PRF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3J4cnBjL21lc3NhZ2UuaCBiL2luY2x1ZGUvcnhycGMvbWVzc2FnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhNTlkZjYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3J4cnBjL21lc3NhZ2UuaApAQCAtMCwwICsxLDcxIEBACisvKiBtZXNzYWdlLmg6IFJ4IG1lc3NhZ2UgY2FjaGluZworICoKKyAqIENvcHlyaWdodCAoQykgMjAwMiBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9MSU5VWF9SWFJQQ19NRVNTQUdFX0gKKyNkZWZpbmUgX0xJTlVYX1JYUlBDX01FU1NBR0VfSAorCisjaW5jbHVkZSA8cnhycGMvcGFja2V0Lmg+CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBSeCBtZXNzYWdlIHJlY29yZAorICovCitzdHJ1Y3QgcnhycGNfbWVzc2FnZQoreworCWF0b21pY190CQl1c2FnZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpbms7CQkvKiBsaXN0IGxpbmsgKi8KKwlzdHJ1Y3QgdGltZXZhbAkJc3RhbXA7CQkvKiB0aW1lIHJlY2VpdmVkIG9yIGxhc3Qgc2VudCAqLworCXJ4cnBjX3NlcV90CQlzZXE7CQkvKiBtZXNzYWdlIHNlcXVlbmNlIG51bWJlciAqLworCisJaW50CQkJc3RhdGU7CQkvKiB0aGUgc3RhdGUgdGhlIG1lc3NhZ2UgaXMgY3VycmVudGx5IGluICovCisjZGVmaW5lIFJYUlBDX01TR19QUkVQQVJFRAkwCisjZGVmaW5lIFJYUlBDX01TR19TRU5UCQkxCisjZGVmaW5lIFJYUlBDX01TR19BQ0tFRAkJMgkJLyogcHJvdmlzaW9uYWxseSBBQ0snZCAqLworI2RlZmluZSBSWFJQQ19NU0dfRE9ORQkJMwkJLyogZGVmaW5pdGl2ZWx5IEFDSydkIChtc2ctPnNlcTxhY2suZmlyc3RQYWNrZXQpICovCisjZGVmaW5lIFJYUlBDX01TR19SRUNFSVZFRAk0CisjZGVmaW5lIFJYUlBDX01TR19FUlJPUgkJLTEKKwljaGFyCQkJcnR0ZG9uZTsJLyogdXNlZCBmb3IgUlRUICovCisKKwlzdHJ1Y3QgcnhycGNfdHJhbnNwb3J0CSp0cmFuczsJCS8qIHRyYW5zcG9ydCByZWNlaXZlZCB0aHJvdWdoICovCisJc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24JKmNvbm47CQkvKiBjb25uZWN0aW9uIHJlY2VpdmVkIG92ZXIgKi8KKwlzdHJ1Y3Qgc2tfYnVmZgkJKnBrdDsJCS8qIHJlY2VpdmVkIHBhY2tldCAqLworCW9mZl90CQkJb2Zmc2V0OwkJLyogb2Zmc2V0IGludG8gcGt0IG9mIG5leHQgYnl0ZSBvZiBkYXRhICovCisKKwlzdHJ1Y3QgcnhycGNfaGVhZGVyCWhkcjsJCS8qIG1lc3NhZ2UgaGVhZGVyICovCisKKwlpbnQJCQlkY291bnQ7CQkvKiBkYXRhIHBhcnQgY291bnQgKi8KKwlzaXplX3QJCQlkc2l6ZTsJCS8qIGRhdGEgc2l6ZSAqLworI2RlZmluZSBSWFJQQ19NU0dfTUFYX0lPQ1MgOAorCXN0cnVjdCBrdmVjCQlkYXRhW1JYUlBDX01TR19NQVhfSU9DU107IC8qIG1lc3NhZ2UgZGF0YSAqLworCXVuc2lnbmVkIGxvbmcJCWRmcmVlOwkJLyogYml0IG1hc2sgaW5kaWNhdGluZyBrZnJlZShkYXRhW3hdKSBpZiBUICovCit9OworCisjZGVmaW5lIHJ4cnBjX2dldF9tZXNzYWdlKE0pIGRvIHsgYXRvbWljX2luYygmKE0pLT51c2FnZSk7IH0gd2hpbGUoMCkKKworZXh0ZXJuIHZvaWQgX19yeHJwY19wdXRfbWVzc2FnZShzdHJ1Y3QgcnhycGNfbWVzc2FnZSAqbXNnKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCByeHJwY19wdXRfbWVzc2FnZShzdHJ1Y3QgcnhycGNfbWVzc2FnZSAqbXNnKQoreworCUJVR19PTihhdG9taWNfcmVhZCgmbXNnLT51c2FnZSk8PTApOworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZtc2ctPnVzYWdlKSkKKwkJX19yeHJwY19wdXRfbWVzc2FnZShtc2cpOworfQorCitleHRlcm4gaW50IHJ4cnBjX2Nvbm5fbmV3bXNnKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLAorCQkJICAgICBzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCwKKwkJCSAgICAgdWludDhfdCB0eXBlLAorCQkJICAgICBpbnQgY291bnQsCisJCQkgICAgIHN0cnVjdCBrdmVjICpkaW92LAorCQkJICAgICBpbnQgYWxsb2NfZmxhZ3MsCisJCQkgICAgIHN0cnVjdCByeHJwY19tZXNzYWdlICoqX21zZyk7CisKK2V4dGVybiBpbnQgcnhycGNfY29ubl9zZW5kbXNnKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLCBzdHJ1Y3QgcnhycGNfbWVzc2FnZSAqbXNnKTsKKworI2VuZGlmIC8qIF9MSU5VWF9SWFJQQ19NRVNTQUdFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvcnhycGMvcGFja2V0LmggYi9pbmNsdWRlL3J4cnBjL3BhY2tldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0NDdmMGEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3J4cnBjL3BhY2tldC5oCkBAIC0wLDAgKzEsMTI3IEBACisvKiBwYWNrZXQuaDogUnggcGFja2V0IGxheW91dCBhbmQgZGVmaW5pdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfTElOVVhfUlhSUENfUEFDS0VUX0gKKyNkZWZpbmUgX0xJTlVYX1JYUlBDX1BBQ0tFVF9ICisKKyNpbmNsdWRlIDxyeHJwYy90eXBlcy5oPgorCisjZGVmaW5lIFJYUlBDX0lQVURQX1NJWkUJCTI4CitleHRlcm4gc2l6ZV90IFJYUlBDX01BWF9QQUNLRVRfU0laRTsKKyNkZWZpbmUgUlhSUENfTUFYX1BBQ0tFVF9EQVRBX1NJWkUJKFJYUlBDX01BWF9QQUNLRVRfU0laRSAtIHNpemVvZihzdHJ1Y3QgcnhycGNfaGVhZGVyKSkKKyNkZWZpbmUgUlhSUENfTE9DQUxfUEFDS0VUX1NJWkUJCVJYUlBDX01BWF9QQUNLRVRfU0laRQorI2RlZmluZSBSWFJQQ19SRU1PVEVfUEFDS0VUX1NJWkUJKDU3NiAtIFJYUlBDX0lQVURQX1NJWkUpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBvbi10aGUtd2lyZSBSeCBwYWNrZXQgaGVhZGVyCisgKiAtIGFsbCBtdWx0aWJ5dGUgZmllbGRzIHNob3VsZCBiZSBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIKKyAqLworc3RydWN0IHJ4cnBjX2hlYWRlcgoreworCV9fYmUzMgkJZXBvY2g7CQkvKiBjbGllbnQgYm9vdCB0aW1lc3RhbXAgKi8KKworCV9fYmUzMgkJY2lkOwkJLyogY29ubmVjdGlvbiBhbmQgY2hhbm5lbCBJRCAqLworI2RlZmluZSBSWFJQQ19NQVhDQUxMUwkJNAkJCS8qIG1heCBhY3RpdmUgY2FsbHMgcGVyIGNvbm4gKi8KKyNkZWZpbmUgUlhSUENfQ0hBTk5FTE1BU0sJKFJYUlBDX01BWENBTExTLTEpCS8qIG1hc2sgZm9yIGNoYW5uZWwgSUQgKi8KKyNkZWZpbmUgUlhSUENfQ0lETUFTSwkJKH5SWFJQQ19DSEFOTkVMTUFTSykJLyogbWFzayBmb3IgY29ubmVjdGlvbiBJRCAqLworI2RlZmluZSBSWFJQQ19DSURTSElGVAkJMgkJCS8qIHNoaWZ0IGZvciBjb25uZWN0aW9uIElEICovCisKKwlfX2JlMzIJCWNhbGxOdW1iZXI7CS8qIGNhbGwgSUQgKDAgZm9yIGNvbm5lY3Rpb24tbGV2ZWwgcGFja2V0cykgKi8KKyNkZWZpbmUgUlhSUENfUFJPQ0VTU19NQVhDQUxMUwkoMTw8MikJLyogbWF4aW11bSBudW1iZXIgb2YgYWN0aXZlIGNhbGxzIHBlciBjb25uIChwb3dlciBvZiAyKSAqLworCisJX19iZTMyCQlzZXE7CQkvKiBzZXF1ZW5jZSBudW1iZXIgb2YgcGt0IGluIGNhbGwgc3RyZWFtICovCisJX19iZTMyCQlzZXJpYWw7CQkvKiBzZXJpYWwgbnVtYmVyIG9mIHBrdCBzZW50IHRvIG5ldHdvcmsgKi8KKworCXVpbnQ4X3QJCXR5cGU7CQkvKiBwYWNrZXQgdHlwZSAqLworI2RlZmluZSBSWFJQQ19QQUNLRVRfVFlQRV9EQVRBCQkxCS8qIGRhdGEgKi8KKyNkZWZpbmUgUlhSUENfUEFDS0VUX1RZUEVfQUNLCQkyCS8qIEFDSyAqLworI2RlZmluZSBSWFJQQ19QQUNLRVRfVFlQRV9CVVNZCQkzCS8qIGNhbGwgcmVqZWN0ICovCisjZGVmaW5lIFJYUlBDX1BBQ0tFVF9UWVBFX0FCT1JUCQk0CS8qIGNhbGwvY29ubmVjdGlvbiBhYm9ydCAqLworI2RlZmluZSBSWFJQQ19QQUNLRVRfVFlQRV9BQ0tBTEwJNQkvKiBBQ0sgYWxsIG91dHN0YW5kaW5nIHBhY2tldHMgb24gY2FsbCAqLworI2RlZmluZSBSWFJQQ19QQUNLRVRfVFlQRV9DSEFMTEVOR0UJNgkvKiBjb25uZWN0aW9uIHNlY3VyaXR5IGNoYWxsZW5nZSAoU1JWUi0+Q0xOVCkgKi8KKyNkZWZpbmUgUlhSUENfUEFDS0VUX1RZUEVfUkVTUE9OU0UJNwkvKiBjb25uZWN0aW9uIHNlY3V0aXR5IHJlc3BvbnNlIChDTE5ULT5TUlZSKSAqLworI2RlZmluZSBSWFJQQ19QQUNLRVRfVFlQRV9ERUJVRwkJOAkvKiBkZWJ1ZyBpbmZvIHJlcXVlc3QgKi8KKyNkZWZpbmUgUlhSUENfTl9QQUNLRVRfVFlQRVMJCTkJLyogbnVtYmVyIG9mIHBhY2tldCB0eXBlcyAoaW5jbCB0eXBlIDApICovCisKKwl1aW50OF90CQlmbGFnczsJCS8qIHBhY2tldCBmbGFncyAqLworI2RlZmluZSBSWFJQQ19DTElFTlRfSU5JVElBVEVECTB4MDEJCS8qIHNpZ25pZmllcyBhIHBhY2tldCBnZW5lcmF0ZWQgYnkgYSBjbGllbnQgKi8KKyNkZWZpbmUgUlhSUENfUkVRVUVTVF9BQ0sJMHgwMgkJLyogcmVxdWVzdCBhbiB1bmNvbmRpdGlvbmFsIEFDSyBvZiB0aGlzIHBhY2tldCAqLworI2RlZmluZSBSWFJQQ19MQVNUX1BBQ0tFVAkweDA0CQkvKiB0aGUgbGFzdCBwYWNrZXQgZnJvbSB0aGlzIHNpZGUgZm9yIHRoaXMgY2FsbCAqLworI2RlZmluZSBSWFJQQ19NT1JFX1BBQ0tFVFMJMHgwOAkJLyogbW9yZSBwYWNrZXRzIHRvIGNvbWUgKi8KKyNkZWZpbmUgUlhSUENfSlVNQk9fUEFDS0VUCTB4MjAJCS8qIFtEQVRBXSB0aGlzIGlzIGEganVtYm8gcGFja2V0ICovCisjZGVmaW5lIFJYUlBDX1NMT1dfU1RBUlRfT0sJMHgyMAkJLyogW0FDS10gc2xvdyBzdGFydCBzdXBwb3J0ZWQgKi8KKworCXVpbnQ4X3QJCXVzZXJTdGF0dXM7CS8qIGFwcC1sYXllciBkZWZpbmVkIHN0YXR1cyAqLworCXVpbnQ4X3QJCXNlY3VyaXR5SW5kZXg7CS8qIHNlY3VyaXR5IHByb3RvY29sIElEICovCisJX19iZTE2CQlfcnN2ZDsJCS8qIHJlc2VydmVkICh1c2VkIGJ5IGtlcmJlcm9zIHNlY3VyaXR5IGFzIGNrc3VtKSAqLworCV9fYmUxNgkJc2VydmljZUlkOwkvKiBzZXJ2aWNlIElEICovCisKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgX19yeHJwY19oZWFkZXJfb2ZmKFgpIG9mZnNldG9mKHN0cnVjdCByeHJwY19oZWFkZXIsWCkKKworZXh0ZXJuIGNvbnN0IGNoYXIgKnJ4cnBjX3BrdHNbXTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIGp1bWJvIHBhY2tldCBzZWNvbmRhcnkgaGVhZGVyCisgKiAtIGNhbiBiZSBtYXBwZWQgdG8gcmVhZCBoZWFkZXIgYnk6CisgKiAgIC0gbmV3X3NlcmlhbCA9IHNlcmlhbCArIDEKKyAqICAgLSBuZXdfc2VxID0gc2VxICsgMQorICogICAtIG5ld19mbGFncyA9IGpfZmxhZ3MKKyAqICAgLSBuZXdfX3JzdmQgPSBqX19yc3ZkCisgKiAgIC0gZHVwbGljYXRpbmcgYWxsIG90aGVyIGZpZWxkcworICovCitzdHJ1Y3QgcnhycGNfanVtYm9faGVhZGVyCit7CisJdWludDhfdAkJZmxhZ3M7CQkvKiBwYWNrZXQgZmxhZ3MgKGFzIHBlciByeHJwY19oZWFkZXIpICovCisJdWludDhfdAkJcGFkOworCV9fYmUxNgkJX3JzdmQ7CQkvKiByZXNlcnZlZCAodXNlZCBieSBrZXJiZXJvcyBzZWN1cml0eSBhcyBja3N1bSkgKi8KK307CisKKyNkZWZpbmUgUlhSUENfSlVNQk9fREFUQUxFTgkxNDEyCS8qIG5vbi10ZXJtaW5hbCBqdW1ibyBwYWNrZXQgZGF0YSBsZW5ndGggKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIG9uLXRoZS13aXJlIFJ4IEFDSyBwYWNrZXQgZGF0YSBwYXlsb2FkCisgKiAtIGFsbCBtdWx0aWJ5dGUgZmllbGRzIHNob3VsZCBiZSBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIKKyAqLworc3RydWN0IHJ4cnBjX2Fja3BhY2tldAoreworCV9fYmUxNgkJYnVmZmVyU3BhY2U7CS8qIG51bWJlciBvZiBwYWNrZXQgYnVmZmVycyBhdmFpbGFibGUgKi8KKwlfX2JlMTYJCW1heFNrZXc7CS8qIGRpZmYgYmV0d2VlbiBzZXJubyBiZWluZyBBQ0snZCBhbmQgaGlnaGVzdCBzZXJpYWwgbm8KKwkJCQkJICogcmVjZWl2ZWQgKi8KKwlfX2JlMzIJCWZpcnN0UGFja2V0OwkvKiBzZXF1ZW5jZSBubyBvZiBmaXJzdCBBQ0snZCBwYWNrZXQgaW4gYXR0YWNoZWQgbGlzdCAqLworCV9fYmUzMgkJcHJldmlvdXNQYWNrZXQ7CS8qIHNlcXVlbmNlIG5vIG9mIHByZXZpb3VzIHBhY2tldCByZWNlaXZlZCAqLworCV9fYmUzMgkJc2VyaWFsOwkJLyogc2VyaWFsIG5vIG9mIHBhY2tldCB0aGF0IHByb21wdGVkIHRoaXMgQUNLICovCisKKwl1aW50OF90CQlyZWFzb247CQkvKiByZWFzb24gZm9yIEFDSyAqLworI2RlZmluZSBSWFJQQ19BQ0tfUkVRVUVTVEVECQkxCS8qIEFDSyB3YXMgcmVxdWVzdGVkIG9uIHBhY2tldCAqLworI2RlZmluZSBSWFJQQ19BQ0tfRFVQTElDQVRFCQkyCS8qIGR1cGxpY2F0ZSBwYWNrZXQgcmVjZWl2ZWQgKi8KKyNkZWZpbmUgUlhSUENfQUNLX09VVF9PRl9TRVFVRU5DRQkzCS8qIG91dCBvZiBzZXF1ZW5jZSBwYWNrZXQgcmVjZWl2ZWQgKi8KKyNkZWZpbmUgUlhSUENfQUNLX0VYQ0VFRFNfV0lORE9XCTQJLyogcGFja2V0IHJlY2VpdmVkIGJleW9uZCBlbmQgb2YgQUNLIHdpbmRvdyAqLworI2RlZmluZSBSWFJQQ19BQ0tfTk9TUEFDRQkJNQkvKiBwYWNrZXQgZGlzY2FyZGVkIGR1ZSB0byBsYWNrIG9mIGJ1ZmZlciBzcGFjZSAqLworI2RlZmluZSBSWFJQQ19BQ0tfUElORwkJCTYJLyoga2VlcCBhbGl2ZSBBQ0sgKi8KKyNkZWZpbmUgUlhSUENfQUNLX1BJTkdfUkVTUE9OU0UJCTcJLyogcmVzcG9uc2UgdG8gUlhSUENfQUNLX1BJTkcgKi8KKyNkZWZpbmUgUlhSUENfQUNLX0RFTEFZCQkJOAkvKiBub3RoaW5nIGhhcHBlbmVkIHNpbmNlIHJlY2VpdmVkIHBhY2tldCAqLworI2RlZmluZSBSWFJQQ19BQ0tfSURMRQkJCTkJLyogQUNLIGR1ZSB0byBmdWxseSByZWNlaXZlZCBBQ0sgd2luZG93ICovCisKKwl1aW50OF90CQluQWNrczsJCS8qIG51bWJlciBvZiBBQ0tzICovCisjZGVmaW5lIFJYUlBDX01BWEFDS1MJMjU1CisKKwl1aW50OF90CQlhY2tzWzBdOwkvKiBsaXN0IG9mIEFDSy9OQUtzICovCisjZGVmaW5lIFJYUlBDX0FDS19UWVBFX05BQ0sJCTAKKyNkZWZpbmUgUlhSUENfQUNLX1RZUEVfQUNLCQkxCisKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNlbmRpZiAvKiBfTElOVVhfUlhSUENfUEFDS0VUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvcnhycGMvcGVlci5oIGIvaW5jbHVkZS9yeHJwYy9wZWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI4ZmU5NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvcnhycGMvcGVlci5oCkBAIC0wLDAgKzEsODIgQEAKKy8qIHBlZXIuaDogUnggUlBDIHBlci10cmFuc3BvcnQgcGVlciByZWNvcmQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfTElOVVhfUlhSUENfUEVFUl9ICisjZGVmaW5lIF9MSU5VWF9SWFJQQ19QRUVSX0gKKworI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxyeHJwYy90eXBlcy5oPgorI2luY2x1ZGUgPHJ4cnBjL2tyeHRpbW9kLmg+CisKK3N0cnVjdCByeHJwY19wZWVyX29wcworeworCS8qIHBlZXIgcmVjb3JkIGJlaW5nIGFkZGVkICovCisJaW50ICgqYWRkaW5nKShzdHJ1Y3QgcnhycGNfcGVlciAqcGVlcik7CisKKwkvKiBwZWVyIHJlY29yZCBiZWluZyBkaXNjYXJkZWQgZnJvbSBncmF2ZXlhcmQgKi8KKwl2b2lkICgqZGlzY2FyZGluZykoc3RydWN0IHJ4cnBjX3BlZXIgKnBlZXIpOworCisJLyogY2hhbmdlIG9mIGVwb2NoIGRldGVjdGVkIG9uIGNvbm5lY3Rpb24gKi8KKwl2b2lkICgqY2hhbmdlX29mX2Vwb2NoKShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubik7Cit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogUnggUlBDIHBlci10cmFuc3BvcnQgcGVlciByZWNvcmQKKyAqIC0gcGVlcnMgb25seSByZXRhaW4gYSByZWZjb3VudCBvbiB0aGUgdHJhbnNwb3J0IHdoZW4gdGhleSBhcmUgYWN0aXZlCisgKiAtIHBlZXJzIHdpdGggcmVmY291bnQ9PTAgYXJlIGluYWN0aXZlIGFuZCByZXNpZGUgaW4gdGhlIHRyYW5zcG9ydCdzIGdyYXZleWFyZAorICovCitzdHJ1Y3QgcnhycGNfcGVlcgoreworCWF0b21pY190CQl1c2FnZTsKKwlzdHJ1Y3QgcnhycGNfcGVlcl9vcHMJKm9wczsJCS8qIG9wZXJhdGlvbnMgb24gdGhpcyBwZWVyICovCisJc3RydWN0IHJ4cnBjX3RyYW5zcG9ydAkqdHJhbnM7CQkvKiBvd25lciB0cmFuc3BvcnQgKi8KKwlzdHJ1Y3QgcnhycGNfdGltZXIJdGltZW91dDsJLyogdGltZW91dCBmb3IgZ3JhdmUgZGVzdHJ1Y3Rpb24gKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpbms7CQkvKiBsaW5rIGluIHRyYW5zcG9ydCdzIHBlZXIgbGlzdCAqLworCXN0cnVjdCBsaXN0X2hlYWQJcHJvY19saW5rOwkvKiBsaW5rIGluIC9wcm9jIGxpc3QgKi8KKwlyd2xvY2tfdAkJY29ubl9pZGxvY2s7CS8qIGxvY2sgZm9yIGNvbm5lY3Rpb24gSURzICovCisJc3RydWN0IGxpc3RfaGVhZAljb25uX2lkbGlzdDsJLyogbGlzdCBvZiBjb25uZWN0aW9ucyBncmFudGVkIElEcyAqLworCXVpbnQzMl90CQljb25uX2lkY291bnRlcjsJLyogY29ubmVjdGlvbiBJRCBjb3VudGVyICovCisJcndsb2NrX3QJCWNvbm5fbG9jazsJLyogbG9jayBmb3IgYWN0aXZlL2RlYWQgY29ubmVjdGlvbnMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCWNvbm5fYWN0aXZlOwkvKiBhY3RpdmUgY29ubmVjdGlvbnMgdG8vZnJvbSB0aGlzIHBlZXIgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCWNvbm5fZ3JhdmV5YXJkOwkvKiBncmF2ZXlhcmQgZm9yIGluYWN0aXZlIGNvbm5lY3Rpb25zICovCisJc3BpbmxvY2tfdAkJY29ubl9neWxvY2s7CS8qIGxvY2sgZm9yIGNvbm5fZ3JhdmV5YXJkICovCisJd2FpdF9xdWV1ZV9oZWFkX3QJY29ubl9neV93YWl0cTsJLyogd2FpdCBxdWV1ZSBoaXQgd2hlbiBncmF2ZXlhcmQgaXMgZW1wdHkgKi8KKwlhdG9taWNfdAkJY29ubl9jb3VudDsJLyogbnVtYmVyIG9mIGF0dGFjaGVkIGNvbm5lY3Rpb25zICovCisJc3RydWN0IGluX2FkZHIJCWFkZHI7CQkvKiByZW1vdGUgYWRkcmVzcyAqLworCXNpemVfdAkJCWlmX210dTsJCS8qIGludGVyZmFjZSBNVFUgZm9yIHRoaXMgcGVlciAqLworCXNwaW5sb2NrX3QJCWxvY2s7CQkvKiBhY2Nlc3MgbG9jayAqLworCisJdm9pZAkJCSp1c2VyOwkJLyogYXBwbGljYXRpb24gbGF5ZXIgZGF0YSAqLworCisJLyogY2FsY3VsYXRlZCBSVFQgY2FjaGUgKi8KKyNkZWZpbmUgUlhSUENfUlRUX0NBQ0hFX1NJWkUgMzIKKwlzdXNlY29uZHNfdAkJcnR0OwkJLyogY3VycmVudCBSVFQgZXN0aW1hdGUgKGluIHVTKSAqLworCXVuc2lnbmVkCQlydHRfcG9pbnQ7CS8qIG5leHQgZW50cnkgYXQgd2hpY2ggdG8gaW5zZXJ0ICovCisJdW5zaWduZWQJCXJ0dF91c2FnZTsJLyogYW1vdW50IG9mIGNhY2hlIGFjdHVhbGx5IHVzZWQgKi8KKwlzdXNlY29uZHNfdAkJcnR0X2NhY2hlW1JYUlBDX1JUVF9DQUNIRV9TSVpFXTsgLyogY2FsY3VsYXRlZCBSVFQgY2FjaGUgKi8KK307CisKKworZXh0ZXJuIGludCByeHJwY19wZWVyX2xvb2t1cChzdHJ1Y3QgcnhycGNfdHJhbnNwb3J0ICp0cmFucywKKwkJCSAgICAgX19iZTMyIGFkZHIsCisJCQkgICAgIHN0cnVjdCByeHJwY19wZWVyICoqX3BlZXIpOworCitzdGF0aWMgaW5saW5lIHZvaWQgcnhycGNfZ2V0X3BlZXIoc3RydWN0IHJ4cnBjX3BlZXIgKnBlZXIpCit7CisJQlVHX09OKGF0b21pY19yZWFkKCZwZWVyLT51c2FnZSk8MCk7CisJYXRvbWljX2luYygmcGVlci0+dXNhZ2UpOworCS8vcHJpbnRrKCJyeHJwY19nZXRfcGVlciglcHt1PSVkfSlcbiIscGVlcixhdG9taWNfcmVhZCgmcGVlci0+dXNhZ2UpKTsKK30KKworZXh0ZXJuIHZvaWQgcnhycGNfcHV0X3BlZXIoc3RydWN0IHJ4cnBjX3BlZXIgKnBlZXIpOworCisjZW5kaWYgLyogX0xJTlVYX1JYUlBDX1BFRVJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9yeHJwYy9yeHJwYy5oIGIvaW5jbHVkZS9yeHJwYy9yeHJwYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkOTg3NGMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3J4cnBjL3J4cnBjLmgKQEAgLTAsMCArMSwzNiBAQAorLyogcnguaDogUnggUlBDIGludGVyZmFjZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMiBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9MSU5VWF9SWFJQQ19SWFJQQ19ICisjZGVmaW5lIF9MSU5VWF9SWFJQQ19SWFJQQ19ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisKK2V4dGVybiBfX2JlMzIgcnhycGNfZXBvY2g7CisKKyNpZmRlZiBDT05GSUdfU1lTQ1RMCitleHRlcm4gaW50IHJ4cnBjX2t0cmFjZTsKK2V4dGVybiBpbnQgcnhycGNfa2RlYnVnOworZXh0ZXJuIGludCByeHJwY19rcHJvdG87CitleHRlcm4gaW50IHJ4cnBjX2tuZXQ7CisjZWxzZQorI2RlZmluZSByeHJwY19rdHJhY2UJMAorI2RlZmluZSByeHJwY19rZGVidWcJMAorI2RlZmluZSByeHJwY19rcHJvdG8JMAorI2RlZmluZSByeHJwY19rbmV0CTAKKyNlbmRpZgorCitleHRlcm4gaW50IHJ4cnBjX3N5c2N0bF9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgcnhycGNfc3lzY3RsX2NsZWFudXAodm9pZCk7CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfTElOVVhfUlhSUENfUlhSUENfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9yeHJwYy90cmFuc3BvcnQuaCBiL2luY2x1ZGUvcnhycGMvdHJhbnNwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M3Yjk2OAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvcnhycGMvdHJhbnNwb3J0LmgKQEAgLTAsMCArMSwxMDYgQEAKKy8qIHRyYW5zcG9ydC5oOiBSeCB0cmFuc3BvcnQgbWFuYWdlbWVudAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMiBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9MSU5VWF9SWFJQQ19UUkFOU1BPUlRfSAorI2RlZmluZSBfTElOVVhfUlhSUENfVFJBTlNQT1JUX0gKKworI2luY2x1ZGUgPHJ4cnBjL3R5cGVzLmg+CisjaW5jbHVkZSA8cnhycGMva3J4aW9kLmg+CisjaW5jbHVkZSA8cnhycGMvcnhycGMuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgorCit0eXBlZGVmIGludCAoKnJ4cnBjX25ld2NhbGxfZm54X3QpKHN0cnVjdCByeHJwY19jYWxsICpjYWxsKTsKKworZXh0ZXJuIHdhaXRfcXVldWVfaGVhZF90IHJ4cnBjX2tyeGlvZF93cTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIFJ4IG9wZXJhdGlvbiBzcGVjaWZpY2F0aW9uCisgKiAtIHRhYmxlcyBvZiB0aGVzZSBtdXN0IGJlIHNvcnRlZCBieSBvcCBJRCBzbyB0aGF0IHRoZXkgY2FuIGJlIGJpbmFyeS1jaG9wIHNlYXJjaGVkCisgKi8KK3N0cnVjdCByeHJwY19vcGVyYXRpb24KK3sKKwl1bnNpZ25lZAkJaWQ7CQkvKiBvcGVyYXRpb24gSUQgKi8KKwlzaXplX3QJCQlhc2l6ZTsJCS8qIG1pbmltdW0gc2l6ZSBvZiBhcmd1bWVudCBibG9jayAqLworCWNvbnN0IGNoYXIJCSpuYW1lOwkJLyogbmFtZSBvZiBvcGVyYXRpb24gKi8KKwl2b2lkCQkJKnVzZXI7CQkvKiBpbml0aWFsIHVzZXIgZGF0YSAqLworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIFJ4IHRyYW5zcG9ydCBzZXJ2aWNlIHJlY29yZAorICovCitzdHJ1Y3QgcnhycGNfc2VydmljZQoreworCXN0cnVjdCBsaXN0X2hlYWQJbGluazsJCS8qIGxpbmsgaW4gc2VydmljZXMgbGlzdCBvbiB0cmFuc3BvcnQgKi8KKwlzdHJ1Y3QgbW9kdWxlCQkqb3duZXI7CQkvKiBvd25lciBtb2R1bGUgKi8KKwlyeHJwY19uZXdjYWxsX2ZueF90CW5ld19jYWxsOwkvKiBuZXcgY2FsbCBoYW5kbGVyIGZ1bmN0aW9uICovCisJY29uc3QgY2hhcgkJKm5hbWU7CQkvKiBuYW1lIG9mIHNlcnZpY2UgKi8KKwl1bnNpZ25lZCBzaG9ydAkJc2VydmljZV9pZDsJLyogUnggc2VydmljZSBJRCAqLworCXJ4cnBjX2NhbGxfYXR0bl9mdW5jX3QJYXR0bl9mdW5jOwkvKiBjYWxsIHJlcXVpcmVzIGF0dGVudGlvbiBjYWxsYmFjayAqLworCXJ4cnBjX2NhbGxfZXJyb3JfZnVuY190CWVycm9yX2Z1bmM7CS8qIGNhbGwgZXJyb3IgY2FsbGJhY2sgKi8KKwlyeHJwY19jYWxsX2FlbWFwX2Z1bmNfdAlhZW1hcF9mdW5jOwkvKiBhYm9ydCAtPiBlcnJubyBtYXBwaW5nIGNhbGxiYWNrICovCisKKwljb25zdCBzdHJ1Y3QgcnhycGNfb3BlcmF0aW9uCSpvcHNfYmVnaW47CS8qIGJlZ2lubmluZyBvZiBvcGVyYXRpb25zIHRhYmxlICovCisJY29uc3Qgc3RydWN0IHJ4cnBjX29wZXJhdGlvbgkqb3BzX2VuZDsJLyogZW5kIG9mIG9wZXJhdGlvbnMgdGFibGUgKi8KK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBSeCB0cmFuc3BvcnQgZW5kcG9pbnQgcmVjb3JkCisgKi8KK3N0cnVjdCByeHJwY190cmFuc3BvcnQKK3sKKwlhdG9taWNfdAkJdXNhZ2U7CisJc3RydWN0IHNvY2tldAkJKnNvY2tldDsJLyogbXkgVURQIHNvY2tldCAqLworCXN0cnVjdCBsaXN0X2hlYWQJc2VydmljZXM7CS8qIHNlcnZpY2VzIGxpc3RlbmluZyBvbiB0aGlzIHNvY2tldCAqLworCXN0cnVjdCBsaXN0X2hlYWQJbGluazsJCS8qIGxpbmsgaW4gdHJhbnNwb3J0IGxpc3QgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCXByb2NfbGluazsJLyogbGluayBpbiB0cmFuc3BvcnQgcHJvYyBsaXN0ICovCisJc3RydWN0IGxpc3RfaGVhZAlrcnhpb2RxX2xpbms7CS8qIGtyeGlvZCBhdHRlbnRpb24gcXVldWUgbGluayAqLworCXNwaW5sb2NrX3QJCWxvY2s7CQkvKiBhY2Nlc3MgbG9jayAqLworCXN0cnVjdCBsaXN0X2hlYWQJcGVlcl9hY3RpdmU7CS8qIGFjdGl2ZSBwZWVycyBjb25uZWN0ZWQgdG8gb3ZlciB0aGlzIHNvY2tldCAqLworCXN0cnVjdCBsaXN0X2hlYWQJcGVlcl9ncmF2ZXlhcmQ7CS8qIGluYWN0aXZlIHBlZXIgbGlzdCAqLworCXNwaW5sb2NrX3QJCXBlZXJfZ3lsb2NrOwkvKiBwZWVyIGdyYXZleWFyZCBsb2NrICovCisJd2FpdF9xdWV1ZV9oZWFkX3QJcGVlcl9neV93YWl0cTsJLyogd2FpdCBxdWV1ZSBoaXQgd2hlbiBwZWVyIGdyYXZleWFyZCBpcyBlbXB0eSAqLworCXJ3bG9ja190CQlwZWVyX2xvY2s7CS8qIHBlZXIgbGlzdCBhY2Nlc3MgbG9jayAqLworCWF0b21pY190CQlwZWVyX2NvdW50OwkvKiBudW1iZXIgb2YgcGVlcnMgKi8KKwlzdHJ1Y3QgcnhycGNfcGVlcl9vcHMJKnBlZXJfb3BzOwkvKiBkZWZhdWx0IHBlZXIgb3BlcmF0aW9ucyAqLworCXVuc2lnbmVkIHNob3J0CQlwb3J0OwkJLyogcG9ydCB1cG9uIHdoaWNoIGxpc3RlbmluZyAqLworCXZvbGF0aWxlIGNoYXIJCWVycm9yX3JjdmQ7CS8qIFQgaWYgcmVjZWl2ZWQgSUNNUCBlcnJvciBvdXRzdGFuZGluZyAqLworfTsKKworZXh0ZXJuIGludCByeHJwY19jcmVhdGVfdHJhbnNwb3J0KHVuc2lnbmVkIHNob3J0IHBvcnQsCisJCQkJICBzdHJ1Y3QgcnhycGNfdHJhbnNwb3J0ICoqX3RyYW5zKTsKKworc3RhdGljIGlubGluZSB2b2lkIHJ4cnBjX2dldF90cmFuc3BvcnQoc3RydWN0IHJ4cnBjX3RyYW5zcG9ydCAqdHJhbnMpCit7CisJQlVHX09OKGF0b21pY19yZWFkKCZ0cmFucy0+dXNhZ2UpIDw9IDApOworCWF0b21pY19pbmMoJnRyYW5zLT51c2FnZSk7CisJLy9wcmludGsoInJ4cnBjX2dldF90cmFuc3BvcnQoJXB7dT0lZH0pXG4iLAorCS8vICAgICAgIHRyYW5zLCBhdG9taWNfcmVhZCgmdHJhbnMtPnVzYWdlKSk7Cit9CisKK2V4dGVybiB2b2lkIHJ4cnBjX3B1dF90cmFuc3BvcnQoc3RydWN0IHJ4cnBjX3RyYW5zcG9ydCAqdHJhbnMpOworCitleHRlcm4gaW50IHJ4cnBjX2FkZF9zZXJ2aWNlKHN0cnVjdCByeHJwY190cmFuc3BvcnQgKnRyYW5zLAorCQkJICAgICBzdHJ1Y3QgcnhycGNfc2VydmljZSAqc3J2KTsKKworZXh0ZXJuIHZvaWQgcnhycGNfZGVsX3NlcnZpY2Uoc3RydWN0IHJ4cnBjX3RyYW5zcG9ydCAqdHJhbnMsCisJCQkgICAgICBzdHJ1Y3QgcnhycGNfc2VydmljZSAqc3J2KTsKKworZXh0ZXJuIHZvaWQgcnhycGNfdHJhbnNfcmVjZWl2ZV9wYWNrZXQoc3RydWN0IHJ4cnBjX3RyYW5zcG9ydCAqdHJhbnMpOworCitleHRlcm4gaW50IHJ4cnBjX3RyYW5zX2ltbWVkaWF0ZV9hYm9ydChzdHJ1Y3QgcnhycGNfdHJhbnNwb3J0ICp0cmFucywKKwkJCQkgICAgICAgc3RydWN0IHJ4cnBjX21lc3NhZ2UgKm1zZywKKwkJCQkgICAgICAgaW50IGVycm9yKTsKKworI2VuZGlmIC8qIF9MSU5VWF9SWFJQQ19UUkFOU1BPUlRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9yeHJwYy90eXBlcy5oIGIvaW5jbHVkZS9yeHJwYy90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyN2E1ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3J4cnBjL3R5cGVzLmgKQEAgLTAsMCArMSw0MSBAQAorLyogdHlwZXMuaDogUnggdHlwZXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfTElOVVhfUlhSUENfVFlQRVNfSAorI2RlZmluZSBfTElOVVhfUlhSUENfVFlQRVNfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKwordHlwZWRlZiB1aW50MzJfdAlyeHJwY19zZXFfdDsJLyogUnggbWVzc2FnZSBzZXF1ZW5jZSBudW1iZXIgKi8KK3R5cGVkZWYgdWludDMyX3QJcnhycGNfc2VyaWFsX3Q7CS8qIFJ4IG1lc3NhZ2Ugc2VyaWFsIG51bWJlciAqLwordHlwZWRlZiBfX2JlMzIJcnhycGNfc2VxX25ldF90OyAvKiBvbi10aGUtd2lyZSBSeCBtZXNzYWdlIHNlcXVlbmNlIG51bWJlciAqLwordHlwZWRlZiBfX2JlMzIJcnhycGNfc2VyaWFsX25ldF90OyAvKiBvbi10aGUtd2lyZSBSeCBtZXNzYWdlIHNlcmlhbCBudW1iZXIgKi8KKworc3RydWN0IHJ4cnBjX2NhbGw7CitzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbjsKK3N0cnVjdCByeHJwY19oZWFkZXI7CitzdHJ1Y3QgcnhycGNfbWVzc2FnZTsKK3N0cnVjdCByeHJwY19vcGVyYXRpb247CitzdHJ1Y3QgcnhycGNfcGVlcjsKK3N0cnVjdCByeHJwY19zZXJ2aWNlOwordHlwZWRlZiBzdHJ1Y3QgcnhycGNfdGltZXIgcnhycGNfdGltZXJfdDsKK3N0cnVjdCByeHJwY190cmFuc3BvcnQ7CisKK3R5cGVkZWYgdm9pZCAoKnJ4cnBjX2NhbGxfYXR0bl9mdW5jX3QpKHN0cnVjdCByeHJwY19jYWxsICpjYWxsKTsKK3R5cGVkZWYgdm9pZCAoKnJ4cnBjX2NhbGxfZXJyb3JfZnVuY190KShzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCk7Cit0eXBlZGVmIHZvaWQgKCpyeHJwY19jYWxsX2FlbWFwX2Z1bmNfdCkoc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwpOworCisjZW5kaWYgLyogX0xJTlVYX1JYUlBDX1RZUEVTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpLmggYi9pbmNsdWRlL3Njc2kvc2NzaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkNTRjMDYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaS5oCkBAIC0wLDAgKzEsNDEyIEBACisvKgorICogVGhpcyBoZWFkZXIgZmlsZSBjb250YWlucyBwdWJsaWMgY29uc3RhbnRzIGFuZCBzdHJ1Y3R1cmVzIHVzZWQgYnkKKyAqIHRoZSBzY3NpIGNvZGUgZm9yIGxpbnV4LgorICoKKyAqIEZvciBkb2N1bWVudGF0aW9uIG9uIHRoZSBPUENPREVTLCBNRVNTQUdFUywgYW5kIFNFTlNFIHZhbHVlcywKKyAqIHBsZWFzZSBjb25zdWx0IHRoZSBTQ1NJIHN0YW5kYXJkLgorICovCisjaWZuZGVmIF9TQ1NJX1NDU0lfSAorI2RlZmluZSBfU0NTSV9TQ1NJX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qCisgKglUaGUgbWF4aW11bSBzZyBsaXN0IGxlbmd0aCBTQ1NJIGNhbiBjb3BlIHdpdGgKKyAqCShjdXJyZW50bHkgbXVzdCBiZSBhIHBvd2VyIG9mIDIgYmV0d2VlbiAzMiBhbmQgMjU2KQorICovCisjZGVmaW5lIFNDU0lfTUFYX1BIWVNfU0VHTUVOVFMJTUFYX1BIWVNfU0VHTUVOVFMKKworCisvKgorICoJU0NTSSBjb21tYW5kIGxlbmd0aHMKKyAqLworCitleHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBzY3NpX2NvbW1hbmRfc2l6ZVs4XTsKKyNkZWZpbmUgQ09NTUFORF9TSVpFKG9wY29kZSkgc2NzaV9jb21tYW5kX3NpemVbKChvcGNvZGUpID4+IDUpICYgN10KKworLyoKKyAqCVNDU0kgZGV2aWNlIHR5cGVzCisgKi8KKworI2RlZmluZSBNQVhfU0NTSV9ERVZJQ0VfQ09ERSAxNAorZXh0ZXJuIGNvbnN0IGNoYXIgKmNvbnN0IHNjc2lfZGV2aWNlX3R5cGVzW01BWF9TQ1NJX0RFVklDRV9DT0RFXTsKKworLyoKKyAqICAgICAgU0NTSSBvcGNvZGVzCisgKi8KKworI2RlZmluZSBURVNUX1VOSVRfUkVBRFkgICAgICAgMHgwMAorI2RlZmluZSBSRVpFUk9fVU5JVCAgICAgICAgICAgMHgwMQorI2RlZmluZSBSRVFVRVNUX1NFTlNFICAgICAgICAgMHgwMworI2RlZmluZSBGT1JNQVRfVU5JVCAgICAgICAgICAgMHgwNAorI2RlZmluZSBSRUFEX0JMT0NLX0xJTUlUUyAgICAgMHgwNQorI2RlZmluZSBSRUFTU0lHTl9CTE9DS1MgICAgICAgMHgwNworI2RlZmluZSBSRUFEXzYgICAgICAgICAgICAgICAgMHgwOAorI2RlZmluZSBXUklURV82ICAgICAgICAgICAgICAgMHgwYQorI2RlZmluZSBTRUVLXzYgICAgICAgICAgICAgICAgMHgwYgorI2RlZmluZSBSRUFEX1JFVkVSU0UgICAgICAgICAgMHgwZgorI2RlZmluZSBXUklURV9GSUxFTUFSS1MgICAgICAgMHgxMAorI2RlZmluZSBTUEFDRSAgICAgICAgICAgICAgICAgMHgxMQorI2RlZmluZSBJTlFVSVJZICAgICAgICAgICAgICAgMHgxMgorI2RlZmluZSBSRUNPVkVSX0JVRkZFUkVEX0RBVEEgMHgxNAorI2RlZmluZSBNT0RFX1NFTEVDVCAgICAgICAgICAgMHgxNQorI2RlZmluZSBSRVNFUlZFICAgICAgICAgICAgICAgMHgxNgorI2RlZmluZSBSRUxFQVNFICAgICAgICAgICAgICAgMHgxNworI2RlZmluZSBDT1BZICAgICAgICAgICAgICAgICAgMHgxOAorI2RlZmluZSBFUkFTRSAgICAgICAgICAgICAgICAgMHgxOQorI2RlZmluZSBNT0RFX1NFTlNFICAgICAgICAgICAgMHgxYQorI2RlZmluZSBTVEFSVF9TVE9QICAgICAgICAgICAgMHgxYgorI2RlZmluZSBSRUNFSVZFX0RJQUdOT1NUSUMgICAgMHgxYworI2RlZmluZSBTRU5EX0RJQUdOT1NUSUMgICAgICAgMHgxZAorI2RlZmluZSBBTExPV19NRURJVU1fUkVNT1ZBTCAgMHgxZQorCisjZGVmaW5lIFNFVF9XSU5ET1cgICAgICAgICAgICAweDI0CisjZGVmaW5lIFJFQURfQ0FQQUNJVFkgICAgICAgICAweDI1CisjZGVmaW5lIFJFQURfMTAgICAgICAgICAgICAgICAweDI4CisjZGVmaW5lIFdSSVRFXzEwICAgICAgICAgICAgICAweDJhCisjZGVmaW5lIFNFRUtfMTAgICAgICAgICAgICAgICAweDJiCisjZGVmaW5lIFdSSVRFX1ZFUklGWSAgICAgICAgICAweDJlCisjZGVmaW5lIFZFUklGWSAgICAgICAgICAgICAgICAweDJmCisjZGVmaW5lIFNFQVJDSF9ISUdIICAgICAgICAgICAweDMwCisjZGVmaW5lIFNFQVJDSF9FUVVBTCAgICAgICAgICAweDMxCisjZGVmaW5lIFNFQVJDSF9MT1cgICAgICAgICAgICAweDMyCisjZGVmaW5lIFNFVF9MSU1JVFMgICAgICAgICAgICAweDMzCisjZGVmaW5lIFBSRV9GRVRDSCAgICAgICAgICAgICAweDM0CisjZGVmaW5lIFJFQURfUE9TSVRJT04gICAgICAgICAweDM0CisjZGVmaW5lIFNZTkNIUk9OSVpFX0NBQ0hFICAgICAweDM1CisjZGVmaW5lIExPQ0tfVU5MT0NLX0NBQ0hFICAgICAweDM2CisjZGVmaW5lIFJFQURfREVGRUNUX0RBVEEgICAgICAweDM3CisjZGVmaW5lIE1FRElVTV9TQ0FOICAgICAgICAgICAweDM4CisjZGVmaW5lIENPTVBBUkUgICAgICAgICAgICAgICAweDM5CisjZGVmaW5lIENPUFlfVkVSSUZZICAgICAgICAgICAweDNhCisjZGVmaW5lIFdSSVRFX0JVRkZFUiAgICAgICAgICAweDNiCisjZGVmaW5lIFJFQURfQlVGRkVSICAgICAgICAgICAweDNjCisjZGVmaW5lIFVQREFURV9CTE9DSyAgICAgICAgICAweDNkCisjZGVmaW5lIFJFQURfTE9ORyAgICAgICAgICAgICAweDNlCisjZGVmaW5lIFdSSVRFX0xPTkcgICAgICAgICAgICAweDNmCisjZGVmaW5lIENIQU5HRV9ERUZJTklUSU9OICAgICAweDQwCisjZGVmaW5lIFdSSVRFX1NBTUUgICAgICAgICAgICAweDQxCisjZGVmaW5lIFJFQURfVE9DICAgICAgICAgICAgICAweDQzCisjZGVmaW5lIExPR19TRUxFQ1QgICAgICAgICAgICAweDRjCisjZGVmaW5lIExPR19TRU5TRSAgICAgICAgICAgICAweDRkCisjZGVmaW5lIE1PREVfU0VMRUNUXzEwICAgICAgICAweDU1CisjZGVmaW5lIFJFU0VSVkVfMTAgICAgICAgICAgICAweDU2CisjZGVmaW5lIFJFTEVBU0VfMTAgICAgICAgICAgICAweDU3CisjZGVmaW5lIE1PREVfU0VOU0VfMTAgICAgICAgICAweDVhCisjZGVmaW5lIFBFUlNJU1RFTlRfUkVTRVJWRV9JTiAweDVlCisjZGVmaW5lIFBFUlNJU1RFTlRfUkVTRVJWRV9PVVQgMHg1ZgorI2RlZmluZSBSRVBPUlRfTFVOUyAgICAgICAgICAgMHhhMAorI2RlZmluZSBNT1ZFX01FRElVTSAgICAgICAgICAgMHhhNQorI2RlZmluZSBSRUFEXzEyICAgICAgICAgICAgICAgMHhhOAorI2RlZmluZSBXUklURV8xMiAgICAgICAgICAgICAgMHhhYQorI2RlZmluZSBXUklURV9WRVJJRllfMTIgICAgICAgMHhhZQorI2RlZmluZSBTRUFSQ0hfSElHSF8xMiAgICAgICAgMHhiMAorI2RlZmluZSBTRUFSQ0hfRVFVQUxfMTIgICAgICAgMHhiMQorI2RlZmluZSBTRUFSQ0hfTE9XXzEyICAgICAgICAgMHhiMgorI2RlZmluZSBSRUFEX0VMRU1FTlRfU1RBVFVTICAgMHhiOAorI2RlZmluZSBTRU5EX1ZPTFVNRV9UQUcgICAgICAgMHhiNgorI2RlZmluZSBXUklURV9MT05HXzIgICAgICAgICAgMHhlYQorI2RlZmluZSBSRUFEXzE2ICAgICAgICAgICAgICAgMHg4OAorI2RlZmluZSBXUklURV8xNiAgICAgICAgICAgICAgMHg4YQorI2RlZmluZSBWRVJJRllfMTYJICAgICAgMHg4ZgorI2RlZmluZSBTRVJWSUNFX0FDVElPTl9JTiAgICAgMHg5ZQorLyogdmFsdWVzIGZvciBzZXJ2aWNlIGFjdGlvbiBpbiAqLworI2RlZmluZQlTQUlfUkVBRF9DQVBBQ0lUWV8xNiAgMHgxMAorCisKKy8qCisgKiAgU0NTSSBBcmNoaXRlY3R1cmUgTW9kZWwgKFNBTSkgU3RhdHVzIGNvZGVzLiBUYWtlbiBmcm9tIFNBTS0zIGRyYWZ0CisgKiAgVDEwLzE1NjEtRCBSZXZpc2lvbiA0IERyYWZ0IGRhdGVkIDd0aCBOb3ZlbWJlciAyMDAyLgorICovCisjZGVmaW5lIFNBTV9TVEFUX0dPT0QgICAgICAgICAgICAweDAwCisjZGVmaW5lIFNBTV9TVEFUX0NIRUNLX0NPTkRJVElPTiAweDAyCisjZGVmaW5lIFNBTV9TVEFUX0NPTkRJVElPTl9NRVQgICAweDA0CisjZGVmaW5lIFNBTV9TVEFUX0JVU1kgICAgICAgICAgICAweDA4CisjZGVmaW5lIFNBTV9TVEFUX0lOVEVSTUVESUFURSAgICAweDEwCisjZGVmaW5lIFNBTV9TVEFUX0lOVEVSTUVESUFURV9DT05ESVRJT05fTUVUIDB4MTQKKyNkZWZpbmUgU0FNX1NUQVRfUkVTRVJWQVRJT05fQ09ORkxJQ1QgMHgxOAorI2RlZmluZSBTQU1fU1RBVF9DT01NQU5EX1RFUk1JTkFURUQgMHgyMgkvKiBvYnNvbGV0ZSBpbiBTQU0tMyAqLworI2RlZmluZSBTQU1fU1RBVF9UQVNLX1NFVF9GVUxMICAgMHgyOAorI2RlZmluZSBTQU1fU1RBVF9BQ0FfQUNUSVZFICAgICAgMHgzMAorI2RlZmluZSBTQU1fU1RBVF9UQVNLX0FCT1JURUQgICAgMHg0MAorCisvKiogc2NzaV9zdGF0dXNfaXNfZ29vZCAtIGNoZWNrIHRoZSBzdGF0dXMgcmV0dXJuLgorICoKKyAqIEBzdGF0dXM6IHRoZSBzdGF0dXMgcGFzc2VkIHVwIGZyb20gdGhlIGRyaXZlciAoaW5jbHVkaW5nIGhvc3QgYW5kCisgKiAgICAgICAgICBkcml2ZXIgY29tcG9uZW50cykKKyAqCisgKiBUaGlzIHJldHVybnMgdHJ1ZSBmb3Iga25vd24gZ29vZCBjb25kaXRpb25zIHRoYXQgbWF5IGJlIHRyZWF0ZWQgYXMKKyAqIGNvbW1hbmQgY29tcGxldGVkIG5vcm1hbGx5CisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHNjc2lfc3RhdHVzX2lzX2dvb2QoaW50IHN0YXR1cykKK3sKKwkvKgorCSAqIEZJWE1FOiBiaXQwIGlzIGxpc3RlZCBhcyByZXNlcnZlZCBpbiBTQ1NJLTIsIGJ1dCBpcworCSAqIHNpZ25pZmljYW50IGluIFNDU0ktMy4gIEZvciBub3csIHdlIGZvbGxvdyB0aGUgU0NTSS0yCisJICogYmVoYXZpb3VyIGFuZCBpZ25vcmUgcmVzZXJ2ZWQgYml0cy4KKwkgKi8KKwlzdGF0dXMgJj0gMHhmZTsKKwlyZXR1cm4gKChzdGF0dXMgPT0gU0FNX1NUQVRfR09PRCkgfHwKKwkJKHN0YXR1cyA9PSBTQU1fU1RBVF9JTlRFUk1FRElBVEUpIHx8CisJCShzdGF0dXMgPT0gU0FNX1NUQVRfSU5URVJNRURJQVRFX0NPTkRJVElPTl9NRVQpIHx8CisJCS8qIEZJWE1FOiB0aGlzIGlzIG9ic29sZXRlIGluIFNBTS0zICovCisJCShzdGF0dXMgPT0gU0FNX1NUQVRfQ09NTUFORF9URVJNSU5BVEVEKSk7Cit9CisKKy8qCisgKiAgU3RhdHVzIGNvZGVzLiBUaGVzZSBhcmUgZGVwcmVjYXRlZCBhcyB0aGV5IGFyZSBzaGlmdGVkIDEgYml0IHJpZ2h0CisgKiAgZnJvbSB0aG9zZSBmb3VuZCBpbiB0aGUgU0NTSSBzdGFuZGFyZHMuIFRoaXMgY2F1c2VzIGNvbmZ1c2lvbiBmb3IKKyAqICBhcHBsaWNhdGlvbnMgdGhhdCBhcmUgcG9ydGVkIHRvIHNldmVyYWwgT1Nlcy4gUHJlZmVyIFNBTSBTdGF0dXMgY29kZXMKKyAqICBhYm92ZS4KKyAqLworCisjZGVmaW5lIEdPT0QgICAgICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgQ0hFQ0tfQ09ORElUSU9OICAgICAgMHgwMQorI2RlZmluZSBDT05ESVRJT05fR09PRCAgICAgICAweDAyCisjZGVmaW5lIEJVU1kgICAgICAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgSU5URVJNRURJQVRFX0dPT0QgICAgMHgwOAorI2RlZmluZSBJTlRFUk1FRElBVEVfQ19HT09EICAweDBhCisjZGVmaW5lIFJFU0VSVkFUSU9OX0NPTkZMSUNUIDB4MGMKKyNkZWZpbmUgQ09NTUFORF9URVJNSU5BVEVEICAgMHgxMQorI2RlZmluZSBRVUVVRV9GVUxMICAgICAgICAgICAweDE0CisjZGVmaW5lIEFDQV9BQ1RJVkUgICAgICAgICAgIDB4MTgKKyNkZWZpbmUgVEFTS19BQk9SVEVEICAgICAgICAgMHgyMAorCisjZGVmaW5lIFNUQVRVU19NQVNLICAgICAgICAgIDB4ZmUKKworLyoKKyAqICBTRU5TRSBLRVlTCisgKi8KKworI2RlZmluZSBOT19TRU5TRSAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgUkVDT1ZFUkVEX0VSUk9SICAgICAweDAxCisjZGVmaW5lIE5PVF9SRUFEWSAgICAgICAgICAgMHgwMgorI2RlZmluZSBNRURJVU1fRVJST1IgICAgICAgIDB4MDMKKyNkZWZpbmUgSEFSRFdBUkVfRVJST1IgICAgICAweDA0CisjZGVmaW5lIElMTEVHQUxfUkVRVUVTVCAgICAgMHgwNQorI2RlZmluZSBVTklUX0FUVEVOVElPTiAgICAgIDB4MDYKKyNkZWZpbmUgREFUQV9QUk9URUNUICAgICAgICAweDA3CisjZGVmaW5lIEJMQU5LX0NIRUNLICAgICAgICAgMHgwOAorI2RlZmluZSBDT1BZX0FCT1JURUQgICAgICAgIDB4MGEKKyNkZWZpbmUgQUJPUlRFRF9DT01NQU5EICAgICAweDBiCisjZGVmaW5lIFZPTFVNRV9PVkVSRkxPVyAgICAgMHgwZAorI2RlZmluZSBNSVNDT01QQVJFICAgICAgICAgIDB4MGUKKworCisvKgorICogIERFVklDRSBUWVBFUworICovCisKKyNkZWZpbmUgVFlQRV9ESVNLICAgICAgICAgICAweDAwCisjZGVmaW5lIFRZUEVfVEFQRSAgICAgICAgICAgMHgwMQorI2RlZmluZSBUWVBFX1BSSU5URVIgICAgICAgIDB4MDIKKyNkZWZpbmUgVFlQRV9QUk9DRVNTT1IgICAgICAweDAzICAgIC8qIEhQIHNjYW5uZXJzIHVzZSB0aGlzICovCisjZGVmaW5lIFRZUEVfV09STSAgICAgICAgICAgMHgwNCAgICAvKiBUcmVhdGVkIGFzIFJPTSBieSBvdXIgc3lzdGVtICovCisjZGVmaW5lIFRZUEVfUk9NICAgICAgICAgICAgMHgwNQorI2RlZmluZSBUWVBFX1NDQU5ORVIgICAgICAgIDB4MDYKKyNkZWZpbmUgVFlQRV9NT0QgICAgICAgICAgICAweDA3ICAgIC8qIE1hZ25ldG8tb3B0aWNhbCBkaXNrIC0gCisJCQkJICAgICAqIC0gdHJlYXRlZCBhcyBUWVBFX0RJU0sgKi8KKyNkZWZpbmUgVFlQRV9NRURJVU1fQ0hBTkdFUiAweDA4CisjZGVmaW5lIFRZUEVfQ09NTSAgICAgICAgICAgMHgwOSAgICAvKiBDb21tdW5pY2F0aW9ucyBkZXZpY2UgKi8KKyNkZWZpbmUgVFlQRV9FTkNMT1NVUkUgICAgICAweDBkICAgIC8qIEVuY2xvc3VyZSBTZXJ2aWNlcyBEZXZpY2UgKi8KKyNkZWZpbmUgVFlQRV9SQUlEICAgICAgICAgICAweDBjCisjZGVmaW5lIFRZUEVfTk9fTFVOICAgICAgICAgMHg3ZgorCisvKgorICogc3RhbmRhcmQgbW9kZS1zZWxlY3QgaGVhZGVyIHByZXBlbmRlZCB0byBhbGwgbW9kZS1zZWxlY3QgY29tbWFuZHMKKyAqLworCitzdHJ1Y3QgY2NzX21vZGVzZWxfaGVhZCB7CisJX191OCBfcjE7CQkJLyogcmVzZXJ2ZWQgKi8KKwlfX3U4IG1lZGl1bTsJCS8qIGRldmljZS1zcGVjaWZpYyBtZWRpdW0gdHlwZSAqLworCV9fdTggX3IyOwkJCS8qIHJlc2VydmVkICovCisJX191OCBibG9ja19kZXNjX2xlbmd0aDsJLyogYmxvY2sgZGVzY3JpcHRvciBsZW5ndGggKi8KKwlfX3U4IGRlbnNpdHk7CQkvKiBkZXZpY2Utc3BlY2lmaWMgZGVuc2l0eSBjb2RlICovCisJX191OCBudW1iZXJfYmxvY2tzX2hpOwkvKiBudW1iZXIgb2YgYmxvY2tzIGluIHRoaXMgYmxvY2sgZGVzYyAqLworCV9fdTggbnVtYmVyX2Jsb2Nrc19tZWQ7CisJX191OCBudW1iZXJfYmxvY2tzX2xvOworCV9fdTggX3IzOworCV9fdTggYmxvY2tfbGVuZ3RoX2hpOwkvKiBibG9jayBsZW5ndGggZm9yIGJsb2NrcyBpbiB0aGlzIGRlc2MgKi8KKwlfX3U4IGJsb2NrX2xlbmd0aF9tZWQ7CisJX191OCBibG9ja19sZW5ndGhfbG87Cit9OworCisvKgorICogU2NzaUx1bjogOCBieXRlIExVTi4KKyAqLworc3RydWN0IHNjc2lfbHVuIHsKKwlfX3U4IHNjc2lfbHVuWzhdOworfTsKKworLyoKKyAqICBNRVNTQUdFIENPREVTCisgKi8KKworI2RlZmluZSBDT01NQU5EX0NPTVBMRVRFICAgIDB4MDAKKyNkZWZpbmUgRVhURU5ERURfTUVTU0FHRSAgICAweDAxCisjZGVmaW5lICAgICBFWFRFTkRFRF9NT0RJRllfREFUQV9QT0lOVEVSICAgIDB4MDAKKyNkZWZpbmUgICAgIEVYVEVOREVEX1NEVFIgICAgICAgICAgICAgICAgICAgMHgwMQorI2RlZmluZSAgICAgRVhURU5ERURfRVhURU5ERURfSURFTlRJRlkgICAgICAweDAyICAgIC8qIFNDU0ktSSBvbmx5ICovCisjZGVmaW5lICAgICBFWFRFTkRFRF9XRFRSICAgICAgICAgICAgICAgICAgIDB4MDMKKyNkZWZpbmUgICAgIEVYVEVOREVEX1BQUiAgICAgICAgICAgICAgICAgICAgMHgwNAorI2RlZmluZSAgICAgRVhURU5ERURfTU9ESUZZX0JJRElfREFUQV9QVFIgICAweDA1CisjZGVmaW5lIFNBVkVfUE9JTlRFUlMgICAgICAgMHgwMgorI2RlZmluZSBSRVNUT1JFX1BPSU5URVJTICAgIDB4MDMKKyNkZWZpbmUgRElTQ09OTkVDVCAgICAgICAgICAweDA0CisjZGVmaW5lIElOSVRJQVRPUl9FUlJPUiAgICAgMHgwNQorI2RlZmluZSBBQk9SVF9UQVNLX1NFVCAgICAgIDB4MDYKKyNkZWZpbmUgTUVTU0FHRV9SRUpFQ1QgICAgICAweDA3CisjZGVmaW5lIE5PUCAgICAgICAgICAgICAgICAgMHgwOAorI2RlZmluZSBNU0dfUEFSSVRZX0VSUk9SICAgIDB4MDkKKyNkZWZpbmUgTElOS0VEX0NNRF9DT01QTEVURSAweDBhCisjZGVmaW5lIExJTktFRF9GTEdfQ01EX0NPTVBMRVRFIDB4MGIKKyNkZWZpbmUgVEFSR0VUX1JFU0VUICAgICAgICAweDBjCisjZGVmaW5lIEFCT1JUX1RBU0sgICAgICAgICAgMHgwZAorI2RlZmluZSBDTEVBUl9UQVNLX1NFVCAgICAgIDB4MGUKKyNkZWZpbmUgSU5JVElBVEVfUkVDT1ZFUlkgICAweDBmICAgICAgICAgICAgLyogU0NTSS1JSSBvbmx5ICovCisjZGVmaW5lIFJFTEVBU0VfUkVDT1ZFUlkgICAgMHgxMCAgICAgICAgICAgIC8qIFNDU0ktSUkgb25seSAqLworI2RlZmluZSBDTEVBUl9BQ0EgICAgICAgICAgIDB4MTYKKyNkZWZpbmUgTE9HSUNBTF9VTklUX1JFU0VUICAweDE3CisjZGVmaW5lIFNJTVBMRV9RVUVVRV9UQUcgICAgMHgyMAorI2RlZmluZSBIRUFEX09GX1FVRVVFX1RBRyAgIDB4MjEKKyNkZWZpbmUgT1JERVJFRF9RVUVVRV9UQUcgICAweDIyCisjZGVmaW5lIElHTk9SRV9XSURFX1JFU0lEVUUgMHgyMworI2RlZmluZSBBQ0EgICAgICAgICAgICAgICAgIDB4MjQKKyNkZWZpbmUgUUFTX1JFUVVFU1QgICAgICAgICAweDU1CisKKy8qIE9sZCBTQ1NJMiBuYW1lcywgZG9uJ3QgdXNlIGluIG5ldyBjb2RlICovCisjZGVmaW5lIEJVU19ERVZJQ0VfUkVTRVQgICAgVEFSR0VUX1JFU0VUCisjZGVmaW5lIEFCT1JUICAgICAgICAgICAgICAgQUJPUlRfVEFTS19TRVQKKworLyoKKyAqIEhvc3QgYnl0ZSBjb2RlcworICovCisKKyNkZWZpbmUgRElEX09LICAgICAgICAgIDB4MDAJLyogTk8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERJRF9OT19DT05ORUNUICAweDAxCS8qIENvdWxkbid0IGNvbm5lY3QgYmVmb3JlIHRpbWVvdXQgcGVyaW9kICAqLworI2RlZmluZSBESURfQlVTX0JVU1kgICAgMHgwMgkvKiBCVVMgc3RheWVkIGJ1c3kgdGhyb3VnaCB0aW1lIG91dCBwZXJpb2QgKi8KKyNkZWZpbmUgRElEX1RJTUVfT1VUICAgIDB4MDMJLyogVElNRUQgT1VUIGZvciBvdGhlciByZWFzb24gICAgICAgICAgICAgICovCisjZGVmaW5lIERJRF9CQURfVEFSR0VUICAweDA0CS8qIEJBRCB0YXJnZXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBESURfQUJPUlQgICAgICAgMHgwNQkvKiBUb2xkIHRvIGFib3J0IGZvciBzb21lIG90aGVyIHJlYXNvbiAgICAgKi8KKyNkZWZpbmUgRElEX1BBUklUWSAgICAgIDB4MDYJLyogUGFyaXR5IGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERJRF9FUlJPUiAgICAgICAweDA3CS8qIEludGVybmFsIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBESURfUkVTRVQgICAgICAgMHgwOAkvKiBSZXNldCBieSBzb21lYm9keS4gICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRElEX0JBRF9JTlRSICAgIDB4MDkJLyogR290IGFuIGludGVycnVwdCB3ZSB3ZXJlbid0IGV4cGVjdGluZy4gICovCisjZGVmaW5lIERJRF9QQVNTVEhST1VHSCAweDBhCS8qIEZvcmNlIGNvbW1hbmQgcGFzdCBtaWQtbGF5ZXIgICAgICAgICAgICAqLworI2RlZmluZSBESURfU09GVF9FUlJPUiAgMHgwYgkvKiBUaGUgbG93IGxldmVsIGRyaXZlciBqdXN0IHdpc2ggYSByZXRyeSAgKi8KKyNkZWZpbmUgRElEX0lNTV9SRVRSWSAgIDB4MGMJLyogUmV0cnkgd2l0aG91dCBkZWNyZW1lbnRpbmcgcmV0cnkgY291bnQgICovCisjZGVmaW5lIERSSVZFUl9PSyAgICAgICAweDAwCS8qIERyaXZlciBzdGF0dXMgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisvKgorICogIFRoZXNlIGluZGljYXRlIHRoZSBlcnJvciB0aGF0IG9jY3VycmVkLCBhbmQgd2hhdCBpcyBhdmFpbGFibGUuCisgKi8KKworI2RlZmluZSBEUklWRVJfQlVTWSAgICAgICAgIDB4MDEKKyNkZWZpbmUgRFJJVkVSX1NPRlQgICAgICAgICAweDAyCisjZGVmaW5lIERSSVZFUl9NRURJQSAgICAgICAgMHgwMworI2RlZmluZSBEUklWRVJfRVJST1IgICAgICAgIDB4MDQKKworI2RlZmluZSBEUklWRVJfSU5WQUxJRCAgICAgIDB4MDUKKyNkZWZpbmUgRFJJVkVSX1RJTUVPVVQgICAgICAweDA2CisjZGVmaW5lIERSSVZFUl9IQVJEICAgICAgICAgMHgwNworI2RlZmluZSBEUklWRVJfU0VOU0UJICAgIDB4MDgKKworI2RlZmluZSBTVUdHRVNUX1JFVFJZICAgICAgIDB4MTAKKyNkZWZpbmUgU1VHR0VTVF9BQk9SVCAgICAgICAweDIwCisjZGVmaW5lIFNVR0dFU1RfUkVNQVAgICAgICAgMHgzMAorI2RlZmluZSBTVUdHRVNUX0RJRSAgICAgICAgIDB4NDAKKyNkZWZpbmUgU1VHR0VTVF9TRU5TRSAgICAgICAweDgwCisjZGVmaW5lIFNVR0dFU1RfSVNfT0sgICAgICAgMHhmZgorCisjZGVmaW5lIERSSVZFUl9NQVNLICAgICAgICAgMHgwZgorI2RlZmluZSBTVUdHRVNUX01BU0sgICAgICAgIDB4ZjAKKworLyoKKyAqIEludGVybmFsIHJldHVybiB2YWx1ZXMuCisgKi8KKworI2RlZmluZSBORUVEU19SRVRSWSAgICAgMHgyMDAxCisjZGVmaW5lIFNVQ0NFU1MgICAgICAgICAweDIwMDIKKyNkZWZpbmUgRkFJTEVEICAgICAgICAgIDB4MjAwMworI2RlZmluZSBRVUVVRUQgICAgICAgICAgMHgyMDA0CisjZGVmaW5lIFNPRlRfRVJST1IgICAgICAweDIwMDUKKyNkZWZpbmUgQUREX1RPX01MUVVFVUUgIDB4MjAwNgorI2RlZmluZSBUSU1FT1VUX0VSUk9SICAgMHgyMDA3CisKKy8qCisgKiBNaWRsZXZlbCBxdWV1ZSByZXR1cm4gdmFsdWVzLgorICovCisjZGVmaW5lIFNDU0lfTUxRVUVVRV9IT1NUX0JVU1kgICAweDEwNTUKKyNkZWZpbmUgU0NTSV9NTFFVRVVFX0RFVklDRV9CVVNZIDB4MTA1NgorI2RlZmluZSBTQ1NJX01MUVVFVUVfRUhfUkVUUlkgICAgMHgxMDU3CisKKy8qCisgKiAgVXNlIHRoZXNlIHRvIHNlcGFyYXRlIHN0YXR1cyBtc2cgYW5kIG91ciBieXRlcworICoKKyAqICBUaGVzZSBhcmUgc2V0IGJ5OgorICoKKyAqICAgICAgc3RhdHVzIGJ5dGUgPSBzZXQgZnJvbSB0YXJnZXQgZGV2aWNlCisgKiAgICAgIG1zZ19ieXRlICAgID0gcmV0dXJuIHN0YXR1cyBmcm9tIGhvc3QgYWRhcHRlciBpdHNlbGYuCisgKiAgICAgIGhvc3RfYnl0ZSAgID0gc2V0IGJ5IGxvdy1sZXZlbCBkcml2ZXIgdG8gaW5kaWNhdGUgc3RhdHVzLgorICogICAgICBkcml2ZXJfYnl0ZSA9IHNldCBieSBtaWQtbGV2ZWwuCisgKi8KKyNkZWZpbmUgc3RhdHVzX2J5dGUocmVzdWx0KSAoKChyZXN1bHQpID4+IDEpICYgMHg3ZikKKyNkZWZpbmUgbXNnX2J5dGUocmVzdWx0KSAgICAoKChyZXN1bHQpID4+IDgpICYgMHhmZikKKyNkZWZpbmUgaG9zdF9ieXRlKHJlc3VsdCkgICAoKChyZXN1bHQpID4+IDE2KSAmIDB4ZmYpCisjZGVmaW5lIGRyaXZlcl9ieXRlKHJlc3VsdCkgKCgocmVzdWx0KSA+PiAyNCkgJiAweGZmKQorI2RlZmluZSBzdWdnZXN0aW9uKHJlc3VsdCkgIChkcml2ZXJfYnl0ZShyZXN1bHQpICYgU1VHR0VTVF9NQVNLKQorCisjZGVmaW5lIHNlbnNlX2NsYXNzKHNlbnNlKSAgKCgoc2Vuc2UpID4+IDQpICYgMHg3KQorI2RlZmluZSBzZW5zZV9lcnJvcihzZW5zZSkgICgoc2Vuc2UpICYgMHhmKQorI2RlZmluZSBzZW5zZV92YWxpZChzZW5zZSkgICgoc2Vuc2UpICYgMHg4MCk7CisKKworI2RlZmluZSBJREVOVElGWV9CQVNFICAgICAgIDB4ODAKKyNkZWZpbmUgSURFTlRJRlkoY2FuX2Rpc2Nvbm5lY3QsIGx1bikgICAoSURFTlRJRllfQkFTRSB8XAorCQkgICAgICgoY2FuX2Rpc2Nvbm5lY3QpID8gIDB4NDAgOiAwKSB8XAorCQkgICAgICgobHVuKSAmIDB4MDcpKQorCisvKgorICogIHN0cnVjdCBzY3NpX2RldmljZTo6c2NzaV9sZXZlbCB2YWx1ZXMuIEZvciBTQ1NJIGRldmljZXMgb3RoZXIgdGhhbiB0aG9zZQorICogIHByaW9yIHRvIFNDU0ktMiAoaS5lLiBvdmVyIDEyIHllYXJzIG9sZCkgdGhpcyB2YWx1ZSBpcyAocmVzcFsyXSArIDEpCisgKiAgd2hlcmUgInJlc3AiIGlzIGEgYnl0ZSBhcnJheSBvZiB0aGUgcmVzcG9uc2UgdG8gYW4gSU5RVUlSWS4gVGhlIHNjc2lfbGV2ZWwKKyAqICB2YXJpYWJsZSBpcyB2aXNpYmxlIHRvIHRoZSB1c2VyIHZpYSBzeXNmcy4KKyAqLworCisjZGVmaW5lIFNDU0lfVU5LTk9XTiAgICAwCisjZGVmaW5lIFNDU0lfMSAgICAgICAgICAxCisjZGVmaW5lIFNDU0lfMV9DQ1MgICAgICAyCisjZGVmaW5lIFNDU0lfMiAgICAgICAgICAzCisjZGVmaW5lIFNDU0lfMyAgICAgICAgICA0ICAgICAgICAvKiBTUEMgKi8KKyNkZWZpbmUgU0NTSV9TUENfMiAgICAgIDUKKyNkZWZpbmUgU0NTSV9TUENfMyAgICAgIDYKKworLyoKKyAqIElOUSBQRVJJUEhFUkFMIFFVQUxJRklFUlMKKyAqLworI2RlZmluZSBTQ1NJX0lOUV9QUV9DT04gICAgICAgICAweDAwCisjZGVmaW5lIFNDU0lfSU5RX1BRX05PVF9DT04gICAgIDB4MDEKKyNkZWZpbmUgU0NTSV9JTlFfUFFfTk9UX0NBUCAgICAgMHgwMworCisKKy8qCisgKiBIZXJlIGFyZSBzb21lIHNjc2kgc3BlY2lmaWMgaW9jdGwgY29tbWFuZHMgd2hpY2ggYXJlIHNvbWV0aW1lcyB1c2VmdWwuCisgKgorICogTm90ZSB0aGF0IGluY2x1ZGUvbGludXgvY2Ryb20uaCBhbHNvIGRlZmluZXMgSU9DVEwgMHg1MzAwIC0gMHg1Mzk1CisgKi8KKworLyogVXNlZCB0byBvYnRhaW4gUFVOIGFuZCBMVU4gaW5mby4gIENvbmZsaWN0cyB3aXRoIENEUk9NQVVESU9CVUZTSVogKi8KKyNkZWZpbmUgU0NTSV9JT0NUTF9HRVRfSURMVU4JCTB4NTM4MgorCisvKiAweDUzODMgYW5kIDB4NTM4NCB3ZXJlIHVzZWQgZm9yIFNDU0lfSU9DVExfVEFHR0VEX3tFTkFCTEUsRElTQUJMRX0gKi8KKworLyogVXNlZCB0byBvYnRhaW4gdGhlIGhvc3QgbnVtYmVyIG9mIGEgZGV2aWNlLiAqLworI2RlZmluZSBTQ1NJX0lPQ1RMX1BST0JFX0hPU1QJCTB4NTM4NQorCisvKiBVc2VkIHRvIG9idGFpbiB0aGUgYnVzIG51bWJlciBmb3IgYSBkZXZpY2UgKi8KKyNkZWZpbmUgU0NTSV9JT0NUTF9HRVRfQlVTX05VTUJFUgkweDUzODYKKworLyogVXNlZCB0byBvYnRhaW4gdGhlIFBDSSBsb2NhdGlvbiBvZiBhIGRldmljZSAqLworI2RlZmluZSBTQ1NJX0lPQ1RMX0dFVF9QQ0kJCTB4NTM4NworCisjZW5kaWYgLyogX1NDU0lfU0NTSV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2NzaV9jbW5kLmggYi9pbmNsdWRlL3Njc2kvc2NzaV9jbW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ5ODcxYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvc2NzaS9zY3NpX2NtbmQuaApAQCAtMCwwICsxLDE2NSBAQAorI2lmbmRlZiBfU0NTSV9TQ1NJX0NNTkRfSAorI2RlZmluZSBfU0NTSV9TQ1NJX0NNTkRfSAorCisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IHJlcXVlc3Q7CitzdHJ1Y3Qgc2NhdHRlcmxpc3Q7CitzdHJ1Y3Qgc2NzaV9kZXZpY2U7CitzdHJ1Y3Qgc2NzaV9yZXF1ZXN0OworCisKKy8qIGVtYmVkZGVkIGluIHNjc2lfY21uZCAqLworc3RydWN0IHNjc2lfcG9pbnRlciB7CisJY2hhciAqcHRyOwkJLyogZGF0YSBwb2ludGVyICovCisJaW50IHRoaXNfcmVzaWR1YWw7CS8qIGxlZnQgaW4gdGhpcyBidWZmZXIgKi8KKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmJ1ZmZlcjsJLyogd2hpY2ggYnVmZmVyICovCisJaW50IGJ1ZmZlcnNfcmVzaWR1YWw7CS8qIGhvdyBtYW55IGJ1ZmZlcnMgbGVmdCAqLworCisgICAgICAgIGRtYV9hZGRyX3QgZG1hX2hhbmRsZTsKKworCXZvbGF0aWxlIGludCBTdGF0dXM7CisJdm9sYXRpbGUgaW50IE1lc3NhZ2U7CisJdm9sYXRpbGUgaW50IGhhdmVfZGF0YV9pbjsKKwl2b2xhdGlsZSBpbnQgc2VudF9jb21tYW5kOworCXZvbGF0aWxlIGludCBwaGFzZTsKK307CisKK3N0cnVjdCBzY3NpX2NtbmQgeworCWludCAgICAgc2NfbWFnaWM7CisKKwlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldmljZTsKKwl1bnNpZ25lZCBzaG9ydCBzdGF0ZTsKKwl1bnNpZ25lZCBzaG9ydCBvd25lcjsKKwlzdHJ1Y3Qgc2NzaV9yZXF1ZXN0ICpzY19yZXF1ZXN0OworCisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OyAgLyogc2NzaV9jbW5kIHBhcnRpY2lwYXRlcyBpbiBxdWV1ZSBsaXN0cyAqLworCisJc3RydWN0IGxpc3RfaGVhZCBlaF9lbnRyeTsgLyogZW50cnkgZm9yIHRoZSBob3N0IGVoX2NtZF9xICovCisJaW50IGVoX3N0YXRlOwkJLyogVXNlZCBmb3Igc3RhdGUgdHJhY2tpbmcgaW4gZXJyb3IgaGFuZGxyICovCisJaW50IGVoX2VmbGFnczsJCS8qIFVzZWQgYnkgZXJyb3IgaGFuZGxyICovCisJdm9pZCAoKmRvbmUpIChzdHJ1Y3Qgc2NzaV9jbW5kICopOwkvKiBNaWQtbGV2ZWwgZG9uZSBmdW5jdGlvbiAqLworCisJLyoKKwkgKiBBIFNDU0kgQ29tbWFuZCBpcyBhc3NpZ25lZCBhIG5vbnplcm8gc2VyaWFsX251bWJlciB3aGVuIGludGVybmFsX2NtbmQKKwkgKiBwYXNzZXMgaXQgdG8gdGhlIGRyaXZlcidzIHF1ZXVlIGNvbW1hbmQgZnVuY3Rpb24uICBUaGUgc2VyaWFsX251bWJlcgorCSAqIGlzIGNsZWFyZWQgd2hlbiBzY3NpX2RvbmUgaXMgZW50ZXJlZCBpbmRpY2F0aW5nIHRoYXQgdGhlIGNvbW1hbmQgaGFzCisJICogYmVlbiBjb21wbGV0ZWQuICBJZiBhIHRpbWVvdXQgb2NjdXJzLCB0aGUgc2VyaWFsIG51bWJlciBhdCB0aGUgbW9tZW50CisJICogb2YgdGltZW91dCBpcyBjb3BpZWQgaW50byBzZXJpYWxfbnVtYmVyX2F0X3RpbWVvdXQuICBCeSBzdWJzZXF1ZW50bHkKKwkgKiBjb21wYXJpbmcgdGhlIHNlcmlhbF9udW1iZXIgYW5kIHNlcmlhbF9udW1iZXJfYXRfdGltZW91dCBmaWVsZHMKKwkgKiBkdXJpbmcgYWJvcnQgb3IgcmVzZXQgcHJvY2Vzc2luZywgd2UgY2FuIGRldGVjdCB3aGV0aGVyIHRoZSBjb21tYW5kCisJICogaGFzIGFscmVhZHkgY29tcGxldGVkLiAgVGhpcyBhbHNvIGRldGVjdHMgY2FzZXMgd2hlcmUgdGhlIGNvbW1hbmQgaGFzCisJICogY29tcGxldGVkIGFuZCB0aGUgU0NTSSBDb21tYW5kIHN0cnVjdHVyZSBoYXMgYWxyZWFkeSBiZWluZyByZXVzZWQKKwkgKiBmb3IgYW5vdGhlciBjb21tYW5kLCBzbyB0aGF0IHdlIGNhbiBhdm9pZCBpbmNvcnJlY3RseSBhYm9ydGluZyBvcgorCSAqIHJlc2V0dGluZyB0aGUgbmV3IGNvbW1hbmQuCisJICogVGhlIHNlcmlhbCBudW1iZXIgaXMgb25seSB1bmlxdWUgcGVyIGhvc3QuCisJICovCisJdW5zaWduZWQgbG9uZyBzZXJpYWxfbnVtYmVyOworCXVuc2lnbmVkIGxvbmcgc2VyaWFsX251bWJlcl9hdF90aW1lb3V0OworCisJaW50IHJldHJpZXM7CisJaW50IGFsbG93ZWQ7CisJaW50IHRpbWVvdXRfcGVyX2NvbW1hbmQ7CisJaW50IHRpbWVvdXRfdG90YWw7CisJaW50IHRpbWVvdXQ7CisKKwkvKgorCSAqIFdlIGhhbmRsZSB0aGUgdGltZW91dCBkaWZmZXJlbnRseSBpZiBpdCBoYXBwZW5zIHdoZW4gYSByZXNldCwgCisJICogYWJvcnQsIGV0YyBhcmUgaW4gcHJvY2Vzcy4gCisJICovCisJdW5zaWduZWQgdm9sYXRpbGUgY2hhciBpbnRlcm5hbF90aW1lb3V0OworCisJdW5zaWduZWQgY2hhciBjbWRfbGVuOworCXVuc2lnbmVkIGNoYXIgb2xkX2NtZF9sZW47CisJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gc2NfZGF0YV9kaXJlY3Rpb247CisJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gc2Nfb2xkX2RhdGFfZGlyZWN0aW9uOworCisJLyogVGhlc2UgZWxlbWVudHMgZGVmaW5lIHRoZSBvcGVyYXRpb24gd2UgYXJlIGFib3V0IHRvIHBlcmZvcm0gKi8KKyNkZWZpbmUgTUFYX0NPTU1BTkRfU0laRQkxNgorCXVuc2lnbmVkIGNoYXIgY21uZFtNQVhfQ09NTUFORF9TSVpFXTsKKwl1bnNpZ25lZCByZXF1ZXN0X2J1ZmZsZW47CS8qIEFjdHVhbCByZXF1ZXN0IHNpemUgKi8KKworCXN0cnVjdCB0aW1lcl9saXN0IGVoX3RpbWVvdXQ7CS8qIFVzZWQgdG8gdGltZSBvdXQgdGhlIGNvbW1hbmQuICovCisJdm9pZCAqcmVxdWVzdF9idWZmZXI7CQkvKiBBY3R1YWwgcmVxdWVzdGVkIGJ1ZmZlciAqLworCisJLyogVGhlc2UgZWxlbWVudHMgZGVmaW5lIHRoZSBvcGVyYXRpb24gd2UgdWx0aW1hdGVseSB3YW50IHRvIHBlcmZvcm0gKi8KKwl1bnNpZ25lZCBjaGFyIGRhdGFfY21uZFtNQVhfQ09NTUFORF9TSVpFXTsKKwl1bnNpZ25lZCBzaG9ydCBvbGRfdXNlX3NnOwkvKiBXZSBzYXZlICB1c2Vfc2cgaGVyZSB3aGVuIHJlcXVlc3RpbmcKKwkJCQkJICogc2Vuc2UgaW5mbyAqLworCXVuc2lnbmVkIHNob3J0IHVzZV9zZzsJLyogTnVtYmVyIG9mIHBpZWNlcyBvZiBzY2F0dGVyLWdhdGhlciAqLworCXVuc2lnbmVkIHNob3J0IHNnbGlzdF9sZW47CS8qIHNpemUgb2YgbWFsbG9jJ2Qgc2NhdHRlci1nYXRoZXIgbGlzdCAqLworCXVuc2lnbmVkIHNob3J0IGFib3J0X3JlYXNvbjsJLyogSWYgdGhlIG1pZC1sZXZlbCBjb2RlIHJlcXVlc3RzIGFuCisJCQkJCSAqIGFib3J0LCB0aGlzIGlzIHRoZSByZWFzb24uICovCisJdW5zaWduZWQgYnVmZmxlbjsJLyogU2l6ZSBvZiBkYXRhIGJ1ZmZlciAqLworCXZvaWQgKmJ1ZmZlcjsJCS8qIERhdGEgYnVmZmVyICovCisKKwl1bnNpZ25lZCB1bmRlcmZsb3c7CS8qIFJldHVybiBlcnJvciBpZiBsZXNzIHRoYW4KKwkJCQkgICB0aGlzIGFtb3VudCBpcyB0cmFuc2ZlcnJlZCAqLworCXVuc2lnbmVkIG9sZF91bmRlcmZsb3c7CS8qIHNhdmUgdW5kZXJmbG93IGhlcmUgd2hlbiByZXVzaW5nIHRoZQorCQkJCSAqIGNvbW1hbmQgZm9yIGVycm9yIGhhbmRsaW5nICovCisKKwl1bnNpZ25lZCB0cmFuc2ZlcnNpemU7CS8qIEhvdyBtdWNoIHdlIGFyZSBndWFyYW50ZWVkIHRvCisJCQkJICAgdHJhbnNmZXIgd2l0aCBlYWNoIFNDU0kgdHJhbnNmZXIKKwkJCQkgICAoaWUsIGJldHdlZW4gZGlzY29ubmVjdCAvIAorCQkJCSAgIHJlY29ubmVjdHMuICAgUHJvYmFibHkgPT0gc2VjdG9yCisJCQkJICAgc2l6ZSAqLworCisJaW50IHJlc2lkOwkJLyogTnVtYmVyIG9mIGJ5dGVzIHJlcXVlc3RlZCB0byBiZQorCQkJCSAgIHRyYW5zZmVycmVkIGxlc3MgYWN0dWFsIG51bWJlcgorCQkJCSAgIHRyYW5zZmVycmVkICgwIGlmIG5vdCBzdXBwb3J0ZWQpICovCisKKwlzdHJ1Y3QgcmVxdWVzdCAqcmVxdWVzdDsJLyogVGhlIGNvbW1hbmQgd2UgYXJlCisJCQkJICAgCSAgIHdvcmtpbmcgb24gKi8KKworI2RlZmluZSBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUgCTk2CisJdW5zaWduZWQgY2hhciBzZW5zZV9idWZmZXJbU0NTSV9TRU5TRV9CVUZGRVJTSVpFXTsJCS8qIG9idGFpbmVkIGJ5IFJFUVVFU1QgU0VOU0UKKwkJCQkJCSAqIHdoZW4gQ0hFQ0sgQ09ORElUSU9OIGlzCisJCQkJCQkgKiByZWNlaXZlZCBvbiBvcmlnaW5hbCBjb21tYW5kIAorCQkJCQkJICogKGF1dG8tc2Vuc2UpICovCisKKwkvKiBMb3ctbGV2ZWwgZG9uZSBmdW5jdGlvbiAtIGNhbiBiZSB1c2VkIGJ5IGxvdy1sZXZlbCBkcml2ZXIgdG8gcG9pbnQKKwkgKiAgICAgICAgdG8gY29tcGxldGlvbiBmdW5jdGlvbi4gIE5vdCB1c2VkIGJ5IG1pZC91cHBlciBsZXZlbCBjb2RlLiAqLworCXZvaWQgKCpzY3NpX2RvbmUpIChzdHJ1Y3Qgc2NzaV9jbW5kICopOworCisJLyoKKwkgKiBUaGUgZm9sbG93aW5nIGZpZWxkcyBjYW4gYmUgd3JpdHRlbiB0byBieSB0aGUgaG9zdCBzcGVjaWZpYyBjb2RlLiAKKwkgKiBFdmVyeXRoaW5nIGVsc2Ugc2hvdWxkIGJlIGxlZnQgYWxvbmUuIAorCSAqLworCXN0cnVjdCBzY3NpX3BvaW50ZXIgU0NwOwkvKiBTY3JhdGNocGFkIHVzZWQgYnkgc29tZSBob3N0IGFkYXB0ZXJzICovCisKKwl1bnNpZ25lZCBjaGFyICpob3N0X3NjcmliYmxlOwkvKiBUaGUgaG9zdCBhZGFwdGVyIGlzIGFsbG93ZWQgdG8KKwkJCQkJICAgKiBjYWxsIHNjc2lfbWFsbG9jIGFuZCBnZXQgc29tZSBtZW1vcnkKKwkJCQkJICAgKiBhbmQgaGFuZyBpdCBoZXJlLiAgICAgVGhlIGhvc3QgYWRhcHRlcgorCQkJCQkgICAqIGlzIGFsc28gZXhwZWN0ZWQgdG8gY2FsbCBzY3NpX2ZyZWUKKwkJCQkJICAgKiB0byByZWxlYXNlIHRoaXMgbWVtb3J5LiAgKFRoZSBtZW1vcnkKKwkJCQkJICAgKiBvYnRhaW5lZCBieSBzY3NpX21hbGxvYyBpcyBndWFyYW50ZWVkCisJCQkJCSAgICogdG8gYmUgYXQgYW4gYWRkcmVzcyA8IDE2TWIpLiAqLworCisJaW50IHJlc3VsdDsJCS8qIFN0YXR1cyBjb2RlIGZyb20gbG93ZXIgbGV2ZWwgZHJpdmVyICovCisKKwl1bnNpZ25lZCBjaGFyIHRhZzsJLyogU0NTSS1JSSBxdWV1ZWQgY29tbWFuZCB0YWcgKi8KKwl1bnNpZ25lZCBsb25nIHBpZDsJLyogUHJvY2VzcyBJRCwgc3RhcnRzIGF0IDAuIFVuaXF1ZSBwZXIgaG9zdC4gKi8KK307CisKKy8qCisgKiBUaGVzZSBhcmUgdGhlIHZhbHVlcyB0aGF0IHNjc2lfY21kLT5zdGF0ZSBjYW4gdGFrZS4KKyAqLworI2RlZmluZSBTQ1NJX1NUQVRFX1RJTUVPVVQgICAgICAgICAweDEwMDAKKyNkZWZpbmUgU0NTSV9TVEFURV9GSU5JU0hFRCAgICAgICAgMHgxMDAxCisjZGVmaW5lIFNDU0lfU1RBVEVfRkFJTEVEICAgICAgICAgIDB4MTAwMgorI2RlZmluZSBTQ1NJX1NUQVRFX1FVRVVFRCAgICAgICAgICAweDEwMDMKKyNkZWZpbmUgU0NTSV9TVEFURV9VTlVTRUQgICAgICAgICAgMHgxMDA2CisjZGVmaW5lIFNDU0lfU1RBVEVfRElTQ09OTkVDVElORyAgIDB4MTAwOAorI2RlZmluZSBTQ1NJX1NUQVRFX0lOSVRJQUxJWklORyAgICAweDEwMDkKKyNkZWZpbmUgU0NTSV9TVEFURV9CSFFVRVVFICAgICAgICAgMHgxMDBhCisjZGVmaW5lIFNDU0lfU1RBVEVfTUxRVUVVRSAgICAgICAgIDB4MTAwYgorCisKK2V4dGVybiBzdHJ1Y3Qgc2NzaV9jbW5kICpzY3NpX2dldF9jb21tYW5kKHN0cnVjdCBzY3NpX2RldmljZSAqLCBpbnQpOworZXh0ZXJuIHZvaWQgc2NzaV9wdXRfY29tbWFuZChzdHJ1Y3Qgc2NzaV9jbW5kICopOworZXh0ZXJuIHZvaWQgc2NzaV9pb19jb21wbGV0aW9uKHN0cnVjdCBzY3NpX2NtbmQgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOworZXh0ZXJuIHZvaWQgc2NzaV9maW5pc2hfY29tbWFuZChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpOworCisjZW5kaWYgLyogX1NDU0lfU0NTSV9DTU5EX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpX2RiZy5oIGIvaW5jbHVkZS9zY3NpL3Njc2lfZGJnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJlOTA5MwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvc2NzaS9zY3NpX2RiZy5oCkBAIC0wLDAgKzEsMjEgQEAKKyNpZm5kZWYgX1NDU0lfU0NTSV9EQkdfSAorI2RlZmluZSBfU0NTSV9TQ1NJX0RCR19ICisKK3N0cnVjdCBzY3NpX2NtbmQ7CitzdHJ1Y3Qgc2NzaV9yZXF1ZXN0OworCitleHRlcm4gdm9pZCBzY3NpX3ByaW50X2NvbW1hbmQoc3RydWN0IHNjc2lfY21uZCAqKTsKK2V4dGVybiB2b2lkIF9fc2NzaV9wcmludF9jb21tYW5kKHVuc2lnbmVkIGNoYXIgKik7CitleHRlcm4gdm9pZCBzY3NpX3ByaW50X3NlbnNlKGNvbnN0IGNoYXIgKiwgc3RydWN0IHNjc2lfY21uZCAqKTsKK2V4dGVybiB2b2lkIHNjc2lfcHJpbnRfcmVxX3NlbnNlKGNvbnN0IGNoYXIgKiwgc3RydWN0IHNjc2lfcmVxdWVzdCAqKTsKK2V4dGVybiB2b2lkIF9fc2NzaV9wcmludF9zZW5zZShjb25zdCBjaGFyICpuYW1lLAorCQkJICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlbnNlX2J1ZmZlciwKKwkJCSAgICAgICBpbnQgc2Vuc2VfbGVuKTsKK2V4dGVybiB2b2lkIHNjc2lfcHJpbnRfZHJpdmVyYnl0ZShpbnQpOworZXh0ZXJuIHZvaWQgc2NzaV9wcmludF9ob3N0Ynl0ZShpbnQpOworZXh0ZXJuIHZvaWQgc2NzaV9wcmludF9zdGF0dXModW5zaWduZWQgY2hhcik7CitleHRlcm4gaW50IHNjc2lfcHJpbnRfbXNnKGNvbnN0IHVuc2lnbmVkIGNoYXIgKik7CitleHRlcm4gY29uc3QgY2hhciAqc2NzaV9zZW5zZV9rZXlfc3RyaW5nKHVuc2lnbmVkIGNoYXIpOworZXh0ZXJuIGNvbnN0IGNoYXIgKnNjc2lfZXh0ZF9zZW5zZV9mb3JtYXQodW5zaWduZWQgY2hhciwgdW5zaWduZWQgY2hhcik7CisKKyNlbmRpZiAvKiBfU0NTSV9TQ1NJX0RCR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2NzaV9kZXZpY2UuaCBiL2luY2x1ZGUvc2NzaS9zY3NpX2RldmljZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3ZDk3NDA1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9zY3NpL3Njc2lfZGV2aWNlLmgKQEAgLTAsMCArMSwyODIgQEAKKyNpZm5kZWYgX1NDU0lfU0NTSV9ERVZJQ0VfSAorI2RlZmluZSBfU0NTSV9TQ1NJX0RFVklDRV9ICisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisKK3N0cnVjdCByZXF1ZXN0X3F1ZXVlOworc3RydWN0IHNjc2lfY21uZDsKK3N0cnVjdCBzY3NpX21vZGVfZGF0YTsKKworCisvKgorICogc2RldiBzdGF0ZTogSWYgeW91IGFsdGVyIHRoaXMsIHlvdSBhbHNvIG5lZWQgdG8gYWx0ZXIgc2NzaV9zeXNmcy5jCisgKiAoZm9yIHRoZSBhc2NpaSBkZXNjcmlwdGlvbnMpIGFuZCB0aGUgc3RhdGUgbW9kZWwgZW5mb3JjZXI6CisgKiBzY3NpX2xpYjpzY3NpX2RldmljZV9zZXRfc3RhdGUoKS4KKyAqLworZW51bSBzY3NpX2RldmljZV9zdGF0ZSB7CisJU0RFVl9DUkVBVEVEID0gMSwJLyogZGV2aWNlIGNyZWF0ZWQgYnV0IG5vdCBhZGRlZCB0byBzeXNmcworCQkJCSAqIE9ubHkgaW50ZXJuYWwgY29tbWFuZHMgYWxsb3dlZCAoZm9yIGlucSkgKi8KKwlTREVWX1JVTk5JTkcsCQkvKiBkZXZpY2UgcHJvcGVybHkgY29uZmlndXJlZAorCQkJCSAqIEFsbCBjb21tYW5kcyBhbGxvd2VkICovCisJU0RFVl9DQU5DRUwsCQkvKiBiZWdpbm5pbmcgdG8gZGVsZXRlIGRldmljZQorCQkJCSAqIE9ubHkgZXJyb3IgaGFuZGxlciBjb21tYW5kcyBhbGxvd2VkICovCisJU0RFVl9ERUwsCQkvKiBkZXZpY2UgZGVsZXRlZCAKKwkJCQkgKiBubyBjb21tYW5kcyBhbGxvd2VkICovCisJU0RFVl9RVUlFU0NFLAkJLyogRGV2aWNlIHF1aWVzY2VudC4gIE5vIGJsb2NrIGNvbW1hbmRzCisJCQkJICogd2lsbCBiZSBhY2NlcHRlZCwgb25seSBzcGVjaWFscyAod2hpY2gKKwkJCQkgKiBvcmlnaW5hdGUgaW4gdGhlIG1pZC1sYXllcikgKi8KKwlTREVWX09GRkxJTkUsCQkvKiBEZXZpY2Ugb2ZmbGluZWQgKGJ5IGVycm9yIGhhbmRsaW5nIG9yCisJCQkJICogdXNlciByZXF1ZXN0ICovCisJU0RFVl9CTE9DSywJCS8qIERldmljZSBibG9ja2VkIGJ5IHNjc2kgbGxkLiAgTm8gc2NzaSAKKwkJCQkgKiBjb21tYW5kcyBmcm9tIHVzZXIgb3IgbWlkbGF5ZXIgc2hvdWxkIGJlIGlzc3VlZAorCQkJCSAqIHRvIHRoZSBzY3NpIGxsZC4gKi8KK307CisKK3N0cnVjdCBzY3NpX2RldmljZSB7CisJc3RydWN0IFNjc2lfSG9zdCAqaG9zdDsKKwlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcmVxdWVzdF9xdWV1ZTsKKworCS8qIHRoZSBuZXh0IHR3byBhcmUgcHJvdGVjdGVkIGJ5IHRoZSBob3N0LT5ob3N0X2xvY2sgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkICAgIHNpYmxpbmdzOyAgIC8qIGxpc3Qgb2YgYWxsIGRldmljZXMgb24gdGhpcyBob3N0ICovCisJc3RydWN0IGxpc3RfaGVhZCAgICBzYW1lX3RhcmdldF9zaWJsaW5nczsgLyoganVzdCB0aGUgZGV2aWNlcyBzaGFyaW5nIHNhbWUgdGFyZ2V0IGlkICovCisKKwl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBkZXZpY2VfYnVzeTsJLyogY29tbWFuZHMgYWN0dWFsbHkgYWN0aXZlIG9uIGxvdy1sZXZlbCAqLworCXNwaW5sb2NrX3Qgc2Rldl9sb2NrOyAgICAgICAgICAgLyogYWxzbyB0aGUgcmVxdWVzdCBxdWV1ZV9sb2NrICovCisJc3BpbmxvY2tfdCBsaXN0X2xvY2s7CisJc3RydWN0IGxpc3RfaGVhZCBjbWRfbGlzdDsJLyogcXVldWUgb2YgaW4gdXNlIFNDU0kgQ29tbWFuZCBzdHJ1Y3R1cmVzICovCisJc3RydWN0IGxpc3RfaGVhZCBzdGFydmVkX2VudHJ5OworCXN0cnVjdCBzY3NpX2NtbmQgKmN1cnJlbnRfY21uZDsJLyogY3VycmVudGx5IGFjdGl2ZSBjb21tYW5kICovCisJdW5zaWduZWQgc2hvcnQgcXVldWVfZGVwdGg7CS8qIEhvdyBkZWVwIG9mIGEgcXVldWUgd2Ugd2FudCAqLworCXVuc2lnbmVkIHNob3J0IGxhc3RfcXVldWVfZnVsbF9kZXB0aDsgLyogVGhlc2UgdHdvIGFyZSB1c2VkIGJ5ICovCisJdW5zaWduZWQgc2hvcnQgbGFzdF9xdWV1ZV9mdWxsX2NvdW50OyAvKiBzY3NpX3RyYWNrX3F1ZXVlX2Z1bGwoKSAqLworCXVuc2lnbmVkIGxvbmcgbGFzdF9xdWV1ZV9mdWxsX3RpbWU7LyogZG9uJ3QgbGV0IFFVRVVFX0ZVTExzIG9uIHRoZSBzYW1lCisJCQkJCSAgIGppZmZpZSBjb3VudCBvbiBvdXIgY291bnRlciwgdGhleQorCQkJCQkgICBjb3VsZCBhbGwgYmUgZnJvbSB0aGUgc2FtZSBldmVudC4gKi8KKworCXVuc2lnbmVkIGludCBpZCwgbHVuLCBjaGFubmVsOworCisJdW5zaWduZWQgaW50IG1hbnVmYWN0dXJlcjsJLyogTWFudWZhY3R1cmVyIG9mIGRldmljZSwgZm9yIHVzaW5nIAorCQkJCQkgKiB2ZW5kb3Itc3BlY2lmaWMgY21kJ3MgKi8KKwl1bnNpZ25lZCBzZWN0b3Jfc2l6ZTsJLyogc2l6ZSBpbiBieXRlcyAqLworCisJdm9pZCAqaG9zdGRhdGE7CQkvKiBhdmFpbGFibGUgdG8gbG93LWxldmVsIGRyaXZlciAqLworCWNoYXIgZGV2ZnNfbmFtZVsyNTZdOwkvKiBkZXZmcyBqdW5rICovCisJY2hhciB0eXBlOworCWNoYXIgc2NzaV9sZXZlbDsKKwljaGFyIGlucV9wZXJpcGhfcXVhbDsJLyogUFEgZnJvbSBJTlFVSVJZIGRhdGEgKi8JCisJdW5zaWduZWQgY2hhciBpbnF1aXJ5X2xlbjsJLyogdmFsaWQgYnl0ZXMgaW4gJ2lucXVpcnknICovCisJdW5zaWduZWQgY2hhciAqIGlucXVpcnk7CS8qIElOUVVJUlkgcmVzcG9uc2UgZGF0YSAqLworCWNoYXIgKiB2ZW5kb3I7CQkvKiBbYmFja19jb21wYXRdIHBvaW50IGludG8gJ2lucXVpcnknIC4uLiAqLworCWNoYXIgKiBtb2RlbDsJCS8qIC4uLiBhZnRlciBzY2FuOyBwb2ludCB0byBzdGF0aWMgc3RyaW5nICovCisJY2hhciAqIHJldjsJCS8qIC4uLiAibnVsbG51bGxudWxsbnVsbCIgYmVmb3JlIHNjYW4gKi8KKwl1bnNpZ25lZCBjaGFyIGN1cnJlbnRfdGFnOwkvKiBjdXJyZW50IHRhZyAqLworCXN0cnVjdCBzY3NpX3RhcmdldCAgICAgICpzZGV2X3RhcmdldDsgICAvKiB1c2VkIG9ubHkgZm9yIHNpbmdsZV9sdW4gKi8KKworCXVuc2lnbmVkIGludAlzZGV2X2JmbGFnczsgLyogYmxhY2svd2hpdGUgZmxhZ3MgYXMgYWxzbyBmb3VuZCBpbgorCQkJCSAqIHNjc2lfZGV2aW5mby5baGNdLiBGb3Igbm93IHVzZWQgb25seSB0bworCQkJCSAqIHBhc3Mgc2V0dGluZ3MgZnJvbSBzbGF2ZV9hbGxvYyB0byBzY3NpCisJCQkJICogY29yZS4gKi8KKwl1bnNpZ25lZCB3cml0ZWFibGU6MTsKKwl1bnNpZ25lZCByZW1vdmFibGU6MTsKKwl1bnNpZ25lZCBjaGFuZ2VkOjE7CS8qIERhdGEgaW52YWxpZCBkdWUgdG8gbWVkaWEgY2hhbmdlICovCisJdW5zaWduZWQgYnVzeToxOwkvKiBVc2VkIHRvIHByZXZlbnQgcmFjZXMgKi8KKwl1bnNpZ25lZCBsb2NrYWJsZToxOwkvKiBBYmxlIHRvIHByZXZlbnQgbWVkaWEgcmVtb3ZhbCAqLworCXVuc2lnbmVkIGxvY2tlZDoxOyAgICAgIC8qIE1lZGlhIHJlbW92YWwgZGlzYWJsZWQgKi8KKwl1bnNpZ25lZCBib3JrZW46MTsJLyogVGVsbCB0aGUgU2VhZ2F0ZSBkcml2ZXIgdG8gYmUgCisJCQkJICogcGFpbmZ1bGx5IHNsb3cgb24gdGhpcyBkZXZpY2UgKi8KKwl1bnNpZ25lZCBkaXNjb25uZWN0OjE7CS8qIGNhbiBkaXNjb25uZWN0ICovCisJdW5zaWduZWQgc29mdF9yZXNldDoxOwkvKiBVc2VzIHNvZnQgcmVzZXQgb3B0aW9uICovCisJdW5zaWduZWQgc2R0cjoxOwkvKiBEZXZpY2Ugc3VwcG9ydHMgU0RUUiBtZXNzYWdlcyAqLworCXVuc2lnbmVkIHdkdHI6MTsJLyogRGV2aWNlIHN1cHBvcnRzIFdEVFIgbWVzc2FnZXMgKi8KKwl1bnNpZ25lZCBwcHI6MTsJCS8qIERldmljZSBzdXBwb3J0cyBQUFIgbWVzc2FnZXMgKi8KKwl1bnNpZ25lZCB0YWdnZWRfc3VwcG9ydGVkOjE7CS8qIFN1cHBvcnRzIFNDU0ktSUkgdGFnZ2VkIHF1ZXVpbmcgKi8KKwl1bnNpZ25lZCBzaW1wbGVfdGFnczoxOwkvKiBzaW1wbGUgcXVldWUgdGFnIG1lc3NhZ2VzIGFyZSBlbmFibGVkICovCisJdW5zaWduZWQgb3JkZXJlZF90YWdzOjE7Lyogb3JkZXJlZCBxdWV1ZSB0YWcgbWVzc2FnZXMgYXJlIGVuYWJsZWQgKi8KKwl1bnNpZ25lZCBzaW5nbGVfbHVuOjE7CS8qIEluZGljYXRlcyB3ZSBzaG91bGQgb25seSBhbGxvdyBJL08gdG8KKwkJCQkgKiBvbmUgb2YgdGhlIGx1bnMgZm9yIHRoZSBkZXZpY2UgYXQgYSAKKwkJCQkgKiB0aW1lLiAqLworCXVuc2lnbmVkIHdhc19yZXNldDoxOwkvKiBUaGVyZSB3YXMgYSBidXMgcmVzZXQgb24gdGhlIGJ1cyBmb3IgCisJCQkJICogdGhpcyBkZXZpY2UgKi8KKwl1bnNpZ25lZCBleHBlY3RpbmdfY2NfdWE6MTsgLyogRXhwZWN0aW5nIGEgQ0hFQ0tfQ09ORElUSU9OL1VOSVRfQVRUTgorCQkJCSAgICAgKiBiZWNhdXNlIHdlIGRpZCBhIGJ1cyByZXNldC4gKi8KKwl1bnNpZ25lZCB1c2VfMTBfZm9yX3J3OjE7IC8qIGZpcnN0IHRyeSAxMC1ieXRlIHJlYWQgLyB3cml0ZSAqLworCXVuc2lnbmVkIHVzZV8xMF9mb3JfbXM6MTsgLyogZmlyc3QgdHJ5IDEwLWJ5dGUgbW9kZSBzZW5zZS9zZWxlY3QgKi8KKwl1bnNpZ25lZCBza2lwX21zX3BhZ2VfODoxOwkvKiBkbyBub3QgdXNlIE1PREUgU0VOU0UgcGFnZSAweDA4ICovCisJdW5zaWduZWQgc2tpcF9tc19wYWdlXzNmOjE7CS8qIGRvIG5vdCB1c2UgTU9ERSBTRU5TRSBwYWdlIDB4M2YgKi8KKwl1bnNpZ25lZCB1c2VfMTkyX2J5dGVzX2Zvcl8zZjoxOyAvKiBhc2sgZm9yIDE5MiBieXRlcyBmcm9tIHBhZ2UgMHgzZiAqLworCXVuc2lnbmVkIG5vX3N0YXJ0X29uX2FkZDoxOwkvKiBkbyBub3QgaXNzdWUgc3RhcnQgb24gYWRkICovCisJdW5zaWduZWQgYWxsb3dfcmVzdGFydDoxOyAvKiBpc3N1ZSBTVEFSVF9VTklUIGluIGVycm9yIGhhbmRsZXIgKi8KKwl1bnNpZ25lZCBub191bGRfYXR0YWNoOjE7IC8qIGRpc2FibGUgY29ubmVjdGluZyB0byB1cHBlciBsZXZlbCBkcml2ZXJzICovCisJdW5zaWduZWQgc2VsZWN0X25vX2F0bjoxOworCXVuc2lnbmVkIGZpeF9jYXBhY2l0eToxOwkvKiBSRUFEX0NBUEFDSVRZIGlzIHRvbyBoaWdoIGJ5IDEgKi8KKwl1bnNpZ25lZCByZXRyeV9od2Vycm9yOjE7CS8qIFJldHJ5IEhBUkRXQVJFX0VSUk9SICovCisKKwl1bnNpZ25lZCBpbnQgZGV2aWNlX2Jsb2NrZWQ7CS8qIERldmljZSByZXR1cm5lZCBRVUVVRV9GVUxMLiAqLworCisJdW5zaWduZWQgaW50IG1heF9kZXZpY2VfYmxvY2tlZDsgLyogd2hhdCBkZXZpY2VfYmxvY2tlZCBjb3VudHMgZG93biBmcm9tICAqLworI2RlZmluZSBTQ1NJX0RFRkFVTFRfREVWSUNFX0JMT0NLRUQJMworCisJYXRvbWljX3QgaW9yZXF1ZXN0X2NudDsKKwlhdG9taWNfdCBpb2RvbmVfY250OworCWF0b21pY190IGlvZXJyX2NudDsKKworCWludCB0aW1lb3V0OworCisJc3RydWN0IGRldmljZQkJc2Rldl9nZW5kZXY7CisJc3RydWN0IGNsYXNzX2RldmljZQlzZGV2X2NsYXNzZGV2OworCisJZW51bSBzY3NpX2RldmljZV9zdGF0ZSBzZGV2X3N0YXRlOworCXVuc2lnbmVkIGxvbmcJCXNkZXZfZGF0YVswXTsKK30gX19hdHRyaWJ1dGVfXygoYWxpZ25lZChzaXplb2YodW5zaWduZWQgbG9uZykpKSk7CisjZGVmaW5lCXRvX3Njc2lfZGV2aWNlKGQpCVwKKwljb250YWluZXJfb2YoZCwgc3RydWN0IHNjc2lfZGV2aWNlLCBzZGV2X2dlbmRldikKKyNkZWZpbmUJY2xhc3NfdG9fc2RldihkKQlcCisJY29udGFpbmVyX29mKGQsIHN0cnVjdCBzY3NpX2RldmljZSwgc2Rldl9jbGFzc2RldikKKyNkZWZpbmUgdHJhbnNwb3J0X2NsYXNzX3RvX3NkZXYoY2xhc3NfZGV2KSBcCisJdG9fc2NzaV9kZXZpY2UoY2xhc3NfZGV2LT5kZXYpCisKKy8qCisgKiBzY3NpX3RhcmdldDogcmVwcmVzZW50YXRpb24gb2YgYSBzY3NpIHRhcmdldCwgZm9yIG5vdywgdGhpcyBpcyBvbmx5CisgKiB1c2VkIGZvciBzaW5nbGVfbHVuIGRldmljZXMuIElmIG5vIG9uZSBoYXMgYWN0aXZlIElPIHRvIHRoZSB0YXJnZXQsCisgKiBzdGFyZ2V0X3NkZXZfdXNlciBpcyBOVUxMLCBlbHNlIGl0IHBvaW50cyB0byB0aGUgYWN0aXZlIHNkZXYuCisgKi8KK3N0cnVjdCBzY3NpX3RhcmdldCB7CisJc3RydWN0IHNjc2lfZGV2aWNlCSpzdGFyZ2V0X3NkZXZfdXNlcjsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXNpYmxpbmdzOworCXN0cnVjdCBsaXN0X2hlYWQJZGV2aWNlczsKKwlzdHJ1Y3QgZGV2aWNlCQlkZXY7CisJdW5zaWduZWQgaW50CQlyZWFwX3JlZjsgLyogcHJvdGVjdGVkIGJ5IHRoZSBob3N0IGxvY2sgKi8KKwl1bnNpZ25lZCBpbnQJCWNoYW5uZWw7CisJdW5zaWduZWQgaW50CQlpZDsgLyogdGFyZ2V0IGlkIC4uLiByZXBsYWNlCisJCQkJICAgICAqIHNjc2lfZGV2aWNlLmlkIGV2ZW50dWFsbHkgKi8KKwl1bnNpZ25lZCBsb25nCQljcmVhdGU6MTsgLyogc2lnbmFsIHRoYXQgaXQgbmVlZHMgdG8gYmUgYWRkZWQgKi8KKwl1bnNpZ25lZCBsb25nCQlzdGFyZ2V0X2RhdGFbMF07Cit9IF9fYXR0cmlidXRlX18oKGFsaWduZWQoc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSkpOworCisjZGVmaW5lIHRvX3Njc2lfdGFyZ2V0KGQpCWNvbnRhaW5lcl9vZihkLCBzdHJ1Y3Qgc2NzaV90YXJnZXQsIGRldikKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNjc2lfdGFyZ2V0ICpzY3NpX3RhcmdldChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCit7CisJcmV0dXJuIHRvX3Njc2lfdGFyZ2V0KHNkZXYtPnNkZXZfZ2VuZGV2LnBhcmVudCk7Cit9CisjZGVmaW5lIHRyYW5zcG9ydF9jbGFzc190b19zdGFyZ2V0KGNsYXNzX2RldikgXAorCXRvX3Njc2lfdGFyZ2V0KGNsYXNzX2Rldi0+ZGV2KQorCitleHRlcm4gc3RydWN0IHNjc2lfZGV2aWNlICpfX3Njc2lfYWRkX2RldmljZShzdHJ1Y3QgU2NzaV9Ib3N0ICosCisJCXVpbnQsIHVpbnQsIHVpbnQsIHZvaWQgKmhvc3RkYXRhKTsKKyNkZWZpbmUgc2NzaV9hZGRfZGV2aWNlKGhvc3QsIGNoYW5uZWwsIHRhcmdldCwgbHVuKSBcCisJX19zY3NpX2FkZF9kZXZpY2UoaG9zdCwgY2hhbm5lbCwgdGFyZ2V0LCBsdW4sIE5VTEwpCitleHRlcm4gdm9pZCBzY3NpX3JlbW92ZV9kZXZpY2Uoc3RydWN0IHNjc2lfZGV2aWNlICopOworZXh0ZXJuIGludCBzY3NpX2RldmljZV9jYW5jZWwoc3RydWN0IHNjc2lfZGV2aWNlICosIGludCk7CisKK2V4dGVybiBpbnQgc2NzaV9kZXZpY2VfZ2V0KHN0cnVjdCBzY3NpX2RldmljZSAqKTsKK2V4dGVybiB2b2lkIHNjc2lfZGV2aWNlX3B1dChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKik7CitleHRlcm4gc3RydWN0IHNjc2lfZGV2aWNlICpzY3NpX2RldmljZV9sb29rdXAoc3RydWN0IFNjc2lfSG9zdCAqLAorCQkJCQkgICAgICB1aW50LCB1aW50LCB1aW50KTsKK2V4dGVybiBzdHJ1Y3Qgc2NzaV9kZXZpY2UgKl9fc2NzaV9kZXZpY2VfbG9va3VwKHN0cnVjdCBTY3NpX0hvc3QgKiwKKwkJCQkJCXVpbnQsIHVpbnQsIHVpbnQpOworZXh0ZXJuIHN0cnVjdCBzY3NpX2RldmljZSAqc2NzaV9kZXZpY2VfbG9va3VwX2J5X3RhcmdldChzdHJ1Y3Qgc2NzaV90YXJnZXQgKiwKKwkJCQkJCQl1aW50KTsKK2V4dGVybiBzdHJ1Y3Qgc2NzaV9kZXZpY2UgKl9fc2NzaV9kZXZpY2VfbG9va3VwX2J5X3RhcmdldChzdHJ1Y3Qgc2NzaV90YXJnZXQgKiwKKwkJCQkJCQkgIHVpbnQpOworZXh0ZXJuIHZvaWQgc3RhcmdldF9mb3JfZWFjaF9kZXZpY2Uoc3RydWN0IHNjc2lfdGFyZ2V0ICosIHZvaWQgKiwKKwkJICAgICB2b2lkICgqZm4pKHN0cnVjdCBzY3NpX2RldmljZSAqLCB2b2lkICopKTsKKworLyogb25seSBleHBvc2VkIHRvIGltcGxlbWVudCBzaG9zdF9mb3JfZWFjaF9kZXZpY2UgKi8KK2V4dGVybiBzdHJ1Y3Qgc2NzaV9kZXZpY2UgKl9fc2NzaV9pdGVyYXRlX2RldmljZXMoc3RydWN0IFNjc2lfSG9zdCAqLAorCQkJCQkJICBzdHJ1Y3Qgc2NzaV9kZXZpY2UgKik7CisKKy8qKgorICogc2hvc3RfZm9yX2VhY2hfZGV2aWNlICAtICBpdGVyYXRlIG92ZXIgYWxsIGRldmljZXMgb2YgYSBob3N0CisgKiBAc2RldjoJaXRlcmF0b3IKKyAqIEBob3N0Oglob3N0IHdoaWNoZXMgZGV2aWNlcyB3ZSB3YW50IHRvIGl0ZXJhdGUgb3ZlcgorICoKKyAqIFRoaXMgdHJhdmVyc2VzIG92ZXIgZWFjaCBkZXZpY2VzIG9mIEBzaG9zdC4gIFRoZSBkZXZpY2VzIGhhdmUKKyAqIGEgcmVmZXJlbmNlIHRoYXQgbXVzdCBiZSByZWxlYXNlZCBieSBzY3NpX2hvc3RfcHV0IHdoZW4gYnJlYWtpbmcKKyAqIG91dCBvZiB0aGUgbG9vcC4KKyAqLworI2RlZmluZSBzaG9zdF9mb3JfZWFjaF9kZXZpY2Uoc2Rldiwgc2hvc3QpIFwKKwlmb3IgKChzZGV2KSA9IF9fc2NzaV9pdGVyYXRlX2RldmljZXMoKHNob3N0KSwgTlVMTCk7IFwKKwkgICAgIChzZGV2KTsgXAorCSAgICAgKHNkZXYpID0gX19zY3NpX2l0ZXJhdGVfZGV2aWNlcygoc2hvc3QpLCAoc2RldikpKQorCisvKioKKyAqIF9fc2hvc3RfZm9yX2VhY2hfZGV2aWNlICAtICBpdGVyYXRlIG92ZXIgYWxsIGRldmljZXMgb2YgYSBob3N0IChVTkxPQ0tFRCkKKyAqIEBzZGV2OglpdGVyYXRvcgorICogQGhvc3Q6CWhvc3Qgd2hpY2hlcyBkZXZpY2VzIHdlIHdhbnQgdG8gaXRlcmF0ZSBvdmVyCisgKgorICogVGhpcyB0cmF2ZXJzZXMgb3ZlciBlYWNoIGRldmljZXMgb2YgQHNob3N0LiAgSXQgZG9lcyBfbm90XyB0YWtlIGEKKyAqIHJlZmVyZW5jZSBvbiB0aGUgc2NzaV9kZXZpY2UsIHRodXMgaXQgdGhlIHdob2xlIGxvb3AgbXVzdCBiZSBwcm90ZWN0ZWQKKyAqIGJ5IHNob3N0LT5ob3N0X2xvY2suCisgKgorICogTm90ZTogIFRoZSBvbmx5IHJlYXNvbiB3aHkgZHJpdmVycyB3b3VsZCB3YW50IHRvIHVzZSB0aGlzIGlzIGJlY2F1c2UKKyAqIHRoZXkncmUgbmVlZCB0byBhY2Nlc3MgdGhlIGRldmljZSBsaXN0IGluIGlycSBjb250ZXh0LiAgT3RoZXJ3aXNlIHlvdQorICogcmVhbGx5IHdhbnQgdG8gdXNlIHNob3N0X2Zvcl9lYWNoX2RldmljZSBpbnN0ZWFkLgorICovCisjZGVmaW5lIF9fc2hvc3RfZm9yX2VhY2hfZGV2aWNlKHNkZXYsIHNob3N0KSBcCisJbGlzdF9mb3JfZWFjaF9lbnRyeSgoc2RldiksICYoKHNob3N0KS0+X19kZXZpY2VzKSwgc2libGluZ3MpCisKK2V4dGVybiB2b2lkIHNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqLCBpbnQsIGludCk7CitleHRlcm4gaW50IHNjc2lfdHJhY2tfcXVldWVfZnVsbChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKiwgaW50KTsKKworZXh0ZXJuIGludCBzY3NpX3NldF9tZWRpdW1fcmVtb3ZhbChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKiwgY2hhcik7CisKK2V4dGVybiBpbnQgc2NzaV9tb2RlX3NlbnNlKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IGRiZCwgaW50IG1vZGVwYWdlLAorCQkJICAgdW5zaWduZWQgY2hhciAqYnVmZmVyLCBpbnQgbGVuLCBpbnQgdGltZW91dCwKKwkJCSAgIGludCByZXRyaWVzLCBzdHJ1Y3Qgc2NzaV9tb2RlX2RhdGEgKmRhdGEpOworZXh0ZXJuIGludCBzY3NpX3Rlc3RfdW5pdF9yZWFkeShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCB0aW1lb3V0LAorCQkJCWludCByZXRyaWVzKTsKK2V4dGVybiBpbnQgc2NzaV9kZXZpY2Vfc2V0X3N0YXRlKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwKKwkJCQkgZW51bSBzY3NpX2RldmljZV9zdGF0ZSBzdGF0ZSk7CitleHRlcm4gaW50IHNjc2lfZGV2aWNlX3F1aWVzY2Uoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KTsKK2V4dGVybiB2b2lkIHNjc2lfZGV2aWNlX3Jlc3VtZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpOworZXh0ZXJuIHZvaWQgc2NzaV90YXJnZXRfcXVpZXNjZShzdHJ1Y3Qgc2NzaV90YXJnZXQgKik7CitleHRlcm4gdm9pZCBzY3NpX3RhcmdldF9yZXN1bWUoc3RydWN0IHNjc2lfdGFyZ2V0ICopOworZXh0ZXJuIHZvaWQgc2NzaV9zY2FuX3RhcmdldChzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIHVuc2lnbmVkIGludCBjaGFubmVsLAorCQkJICAgICB1bnNpZ25lZCBpbnQgaWQsIHVuc2lnbmVkIGludCBsdW4sIGludCByZXNjYW4pOworZXh0ZXJuIHZvaWQgc2NzaV90YXJnZXRfcmVhcChzdHJ1Y3Qgc2NzaV90YXJnZXQgKik7CitleHRlcm4gdm9pZCBzY3NpX3RhcmdldF9ibG9jayhzdHJ1Y3QgZGV2aWNlICopOworZXh0ZXJuIHZvaWQgc2NzaV90YXJnZXRfdW5ibG9jayhzdHJ1Y3QgZGV2aWNlICopOworZXh0ZXJuIHZvaWQgc2NzaV9yZW1vdmVfdGFyZ2V0KHN0cnVjdCBkZXZpY2UgKik7CitleHRlcm4gY29uc3QgY2hhciAqc2NzaV9kZXZpY2Vfc3RhdGVfbmFtZShlbnVtIHNjc2lfZGV2aWNlX3N0YXRlKTsKK2V4dGVybiBpbnQgc2NzaV9pc19zZGV2X2RldmljZShjb25zdCBzdHJ1Y3QgZGV2aWNlICopOworZXh0ZXJuIGludCBzY3NpX2lzX3RhcmdldF9kZXZpY2UoY29uc3Qgc3RydWN0IGRldmljZSAqKTsKK3N0YXRpYyBpbmxpbmUgaW50IHNjc2lfZGV2aWNlX29ubGluZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCit7CisJcmV0dXJuIHNkZXYtPnNkZXZfc3RhdGUgIT0gU0RFVl9PRkZMSU5FOworfQorCisvKiBhY2Nlc3NvciBmdW5jdGlvbnMgZm9yIHRoZSBTQ1NJIHBhcmFtZXRlcnMgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHNjc2lfZGV2aWNlX3N5bmMoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQoreworCXJldHVybiBzZGV2LT5zZHRyOworfQorc3RhdGljIGlubGluZSBpbnQgc2NzaV9kZXZpY2Vfd2lkZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCit7CisJcmV0dXJuIHNkZXYtPndkdHI7Cit9CitzdGF0aWMgaW5saW5lIGludCBzY3NpX2RldmljZV9kdChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCit7CisJcmV0dXJuIHNkZXYtPnBwcjsKK30KK3N0YXRpYyBpbmxpbmUgaW50IHNjc2lfZGV2aWNlX2R0X29ubHkoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQoreworCWlmIChzZGV2LT5pbnF1aXJ5X2xlbiA8IDU3KQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gKHNkZXYtPmlucXVpcnlbNTZdICYgMHgwYykgPT0gMHgwNDsKK30KK3N0YXRpYyBpbmxpbmUgaW50IHNjc2lfZGV2aWNlX2l1cyhzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCit7CisJaWYgKHNkZXYtPmlucXVpcnlfbGVuIDwgNTcpCisJCXJldHVybiAwOworCXJldHVybiBzZGV2LT5pbnF1aXJ5WzU2XSAmIDB4MDE7Cit9CitzdGF0aWMgaW5saW5lIGludCBzY3NpX2RldmljZV9xYXMoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQoreworCWlmIChzZGV2LT5pbnF1aXJ5X2xlbiA8IDU3KQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gc2Rldi0+aW5xdWlyeVs1Nl0gJiAweDAyOworfQorI2VuZGlmIC8qIF9TQ1NJX1NDU0lfREVWSUNFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpX2RldmluZm8uaCBiL2luY2x1ZGUvc2NzaS9zY3NpX2RldmluZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzQxMDFiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9zY3NpL3Njc2lfZGV2aW5mby5oCkBAIC0wLDAgKzEsMzEgQEAKKyNpZm5kZWYgX1NDU0lfU0NTSV9ERVZJTkZPX0gKKyNkZWZpbmUgX1NDU0lfU0NTSV9ERVZJTkZPX0gKKy8qCisgKiBGbGFncyBmb3IgU0NTSSBkZXZpY2VzIHRoYXQgbmVlZCBzcGVjaWFsIHRyZWF0bWVudAorICovCisjZGVmaW5lIEJMSVNUX05PTFVOICAgICAJMHgwMDEJLyogT25seSBzY2FuIExVTiAwICovCisjZGVmaW5lIEJMSVNUX0ZPUkNFTFVOICAJMHgwMDIJLyogS25vd24gdG8gaGF2ZSBMVU5zLCBmb3JjZSBzY2FubmluZywKKwkJCQkJICAgZGVwcmVjYXRlZDogVXNlIG1heF9sdW5zPU4gKi8KKyNkZWZpbmUgQkxJU1RfQk9SS0VOICAgIAkweDAwNAkvKiBGbGFnIGZvciBicm9rZW4gaGFuZHNoYWtpbmcgKi8KKyNkZWZpbmUgQkxJU1RfS0VZICAgICAgIAkweDAwOAkvKiB1bmxvY2sgYnkgc3BlY2lhbCBjb21tYW5kICovCisjZGVmaW5lIEJMSVNUX1NJTkdMRUxVTiAJMHgwMTAJLyogRG8gbm90IHVzZSBMVU5zIGluIHBhcmFsbGVsICovCisjZGVmaW5lIEJMSVNUX05PVFEJCTB4MDIwCS8qIEJ1Z2d5IFRhZ2dlZCBDb21tYW5kIFF1ZXVpbmcgKi8KKyNkZWZpbmUgQkxJU1RfU1BBUlNFTFVOIAkweDA0MAkvKiBOb24gY29uc2VjdXRpdmUgTFVOIG51bWJlcmluZyAqLworI2RlZmluZSBCTElTVF9NQVg1TFVOCQkweDA4MAkvKiBBdm9pZCBMVU5TID49IDUgKi8KKyNkZWZpbmUgQkxJU1RfSVNST00gICAgIAkweDEwMAkvKiBUcmVhdCBhcyAocmVtb3ZhYmxlKSBDRC1ST00gKi8KKyNkZWZpbmUgQkxJU1RfTEFSR0VMVU4JCTB4MjAwCS8qIExVTnMgcGFzdCA3IG9uIGEgU0NTSS0yIGRldmljZSAqLworI2RlZmluZSBCTElTVF9JTlFVSVJZXzM2CTB4NDAwCS8qIG92ZXJyaWRlIGFkZGl0aW9uYWwgbGVuZ3RoIGZpZWxkICovCisjZGVmaW5lIEJMSVNUX0lOUVVJUllfNTgJMHg4MDAJLyogLi4uIGZvciBicm9rZW4gaW5xdWlyeSByZXNwb25zZXMgKi8KKyNkZWZpbmUgQkxJU1RfTk9TVEFSVE9OQURECTB4MTAwMAkvKiBkbyBub3QgZG8gYXV0b21hdGljIHN0YXJ0IG9uIGFkZCAqLworI2RlZmluZSBCTElTVF9NU19TS0lQX1BBR0VfMDgJMHgyMDAwCS8qIGRvIG5vdCBzZW5kIG1zIHBhZ2UgMHgwOCAqLworI2RlZmluZSBCTElTVF9NU19TS0lQX1BBR0VfM0YJMHg0MDAwCS8qIGRvIG5vdCBzZW5kIG1zIHBhZ2UgMHgzZiAqLworI2RlZmluZSBCTElTVF9VU0VfMTBfQllURV9NUwkweDgwMDAJLyogdXNlIDEwIGJ5dGUgbXMgYmVmb3JlIDYgYnl0ZSBtcyAqLworI2RlZmluZSBCTElTVF9NU18xOTJfQllURVNfRk9SXzNGCTB4MTAwMDAJLyogIDE5MiBieXRlIG1zIHBhZ2UgMHgzZiByZXF1ZXN0ICovCisjZGVmaW5lIEJMSVNUX1JFUE9SVExVTjIJMHgyMDAwMAkvKiB0cnkgUkVQT1JUX0xVTlMgZXZlbiBmb3IgU0NTSS0yIGRldnMKKyAJCQkJCSAgIChpZiBIQkEgc3VwcG9ydHMgbW9yZSB0aGFuIDggTFVOcykgKi8KKyNkZWZpbmUgQkxJU1RfTk9SRVBPUlRMVU4JMHg0MDAwMAkvKiBkb24ndCB0cnkgUkVQT1JUX0xVTlMgc2NhbiAoU0NTSS0zIGRldnMpICovCisjZGVmaW5lIEJMSVNUX05PVF9MT0NLQUJMRQkweDgwMDAwCS8qIGRvbid0IHVzZSBQUkVWRU5ULUFMTE9XIGNvbW1hbmRzICovCisjZGVmaW5lIEJMSVNUX05PX1VMRF9BVFRBQ0gJMHgxMDAwMDAgLyogZGV2aWNlIGlzIGFjdHVhbGx5IGZvciBSQUlEIGNvbmZpZyAqLworI2RlZmluZSBCTElTVF9TRUxFQ1RfTk9fQVROCTB4MjAwMDAwIC8qIHNlbGVjdCB3aXRob3V0IEFUTiAqLworI2RlZmluZSBCTElTVF9SRVRSWV9IV0VSUk9SCTB4NDAwMDAwIC8qIHJldHJ5IEhBUkRXQVJFX0VSUk9SICovCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpX2RyaXZlci5oIGIvaW5jbHVkZS9zY3NpL3Njc2lfZHJpdmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODUwZGZhOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvc2NzaS9zY3NpX2RyaXZlci5oCkBAIC0wLDAgKzEsMzEgQEAKKyNpZm5kZWYgX1NDU0lfU0NTSV9EUklWRVJfSAorI2RlZmluZSBfU0NTSV9TQ1NJX0RSSVZFUl9ICisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKworc3RydWN0IG1vZHVsZTsKK3N0cnVjdCBzY3NpX2NtbmQ7CisKKworc3RydWN0IHNjc2lfZHJpdmVyIHsKKwlzdHJ1Y3QgbW9kdWxlCQkqb3duZXI7CisJc3RydWN0IGRldmljZV9kcml2ZXIJZ2VuZHJ2OworCisJaW50ICgqaW5pdF9jb21tYW5kKShzdHJ1Y3Qgc2NzaV9jbW5kICopOworCXZvaWQgKCpyZXNjYW4pKHN0cnVjdCBkZXZpY2UgKik7CisJaW50ICgqaXNzdWVfZmx1c2gpKHN0cnVjdCBkZXZpY2UgKiwgc2VjdG9yX3QgKik7CisJaW50ICgqcHJlcGFyZV9mbHVzaCkoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgc3RydWN0IHJlcXVlc3QgKik7CisJdm9pZCAoKmVuZF9mbHVzaCkoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgc3RydWN0IHJlcXVlc3QgKik7Cit9OworI2RlZmluZSB0b19zY3NpX2RyaXZlcihkcnYpIFwKKwljb250YWluZXJfb2YoKGRydiksIHN0cnVjdCBzY3NpX2RyaXZlciwgZ2VuZHJ2KQorCitleHRlcm4gaW50IHNjc2lfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBkZXZpY2VfZHJpdmVyICopOworI2RlZmluZSBzY3NpX3VucmVnaXN0ZXJfZHJpdmVyKGRydikgXAorCWRyaXZlcl91bnJlZ2lzdGVyKGRydik7CisKK2V4dGVybiBpbnQgc2NzaV9yZWdpc3Rlcl9pbnRlcmZhY2Uoc3RydWN0IGNsYXNzX2ludGVyZmFjZSAqKTsKKyNkZWZpbmUgc2NzaV91bnJlZ2lzdGVyX2ludGVyZmFjZShpbnRmKSBcCisJY2xhc3NfaW50ZXJmYWNlX3VucmVnaXN0ZXIoaW50ZikKKworI2VuZGlmIC8qIF9TQ1NJX1NDU0lfRFJJVkVSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpX2VoLmggYi9pbmNsdWRlL3Njc2kvc2NzaV9laC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwNTU3ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaV9laC5oCkBAIC0wLDAgKzEsNjMgQEAKKyNpZm5kZWYgX1NDU0lfU0NTSV9FSF9ICisjZGVmaW5lIF9TQ1NJX1NDU0lfRUhfSAorCitzdHJ1Y3Qgc2NzaV9jbW5kOworc3RydWN0IHNjc2lfZGV2aWNlOworc3RydWN0IHNjc2lfcmVxdWVzdDsKK3N0cnVjdCBTY3NpX0hvc3Q7CisKKy8qCisgKiBUaGlzIGlzIGEgc2xpZ2h0bHkgbW9kaWZpZWQgU0NTSSBzZW5zZSAiZGVzY3JpcHRvciIgZm9ybWF0IGhlYWRlci4KKyAqIFRoZSBhZGRpdGlvbiBpcyB0byBhbGxvdyB0aGUgMHg3MCBhbmQgMHg3MSByZXNwb25zZSBjb2Rlcy4gVGhlIGlkZWEKKyAqIGlzIHRvIHBsYWNlIHRoZSBzYWxpZW50IGRhdGEgZnJvbSBlaXRoZXIgImZpeGVkIiBvciAiZGVzY3JpcHRvciIgc2Vuc2UKKyAqIGZvcm1hdCBpbnRvIG9uZSBzdHJ1Y3R1cmUgdG8gZWFzZSBhcHBsaWNhdGlvbiBwcm9jZXNzaW5nLgorICoKKyAqIFRoZSBvcmlnaW5hbCBzZW5zZSBidWZmZXIgc2hvdWxkIGJlIGtlcHQgYXJvdW5kIGZvciB0aG9zZSBjYXNlcworICogaW4gd2hpY2ggbW9yZSBpbmZvcm1hdGlvbiBpcyByZXF1aXJlZCAoZS5nLiB0aGUgTEJBIG9mIGEgTUVESVVNIEVSUk9SKS4KKyAqLworc3RydWN0IHNjc2lfc2Vuc2VfaGRyIHsJCS8qIFNlZSBTUEMtMyBzZWN0aW9uIDQuNSAqLworCXU4IHJlc3BvbnNlX2NvZGU7CS8qIHBlcm1pdDogMHgwLCAweDcwLCAweDcxLCAweDcyLCAweDczICovCisJdTggc2Vuc2Vfa2V5OworCXU4IGFzYzsKKwl1OCBhc2NxOworCXU4IGJ5dGU0OworCXU4IGJ5dGU1OworCXU4IGJ5dGU2OworCXU4IGFkZGl0aW9uYWxfbGVuZ3RoOwkvKiBhbHdheXMgMCBmb3IgZml4ZWQgc2Vuc2UgZm9ybWF0ICovCit9OworCisKK2V4dGVybiB2b2lkIHNjc2lfYWRkX3RpbWVyKHN0cnVjdCBzY3NpX2NtbmQgKiwgaW50LAorCQl2b2lkICgqKShzdHJ1Y3Qgc2NzaV9jbW5kICopKTsKK2V4dGVybiBpbnQgc2NzaV9kZWxldGVfdGltZXIoc3RydWN0IHNjc2lfY21uZCAqKTsKK2V4dGVybiB2b2lkIHNjc2lfcmVwb3J0X2J1c19yZXNldChzdHJ1Y3QgU2NzaV9Ib3N0ICosIGludCk7CitleHRlcm4gdm9pZCBzY3NpX3JlcG9ydF9kZXZpY2VfcmVzZXQoc3RydWN0IFNjc2lfSG9zdCAqLCBpbnQsIGludCk7CitleHRlcm4gaW50IHNjc2lfYmxvY2tfd2hlbl9wcm9jZXNzaW5nX2Vycm9ycyhzdHJ1Y3Qgc2NzaV9kZXZpY2UgKik7CitleHRlcm4gaW50IHNjc2lfbm9ybWFsaXplX3NlbnNlKGNvbnN0IHU4ICpzZW5zZV9idWZmZXIsIGludCBzYl9sZW4sCisJCXN0cnVjdCBzY3NpX3NlbnNlX2hkciAqc3NoZHIpOworZXh0ZXJuIGludCBzY3NpX3JlcXVlc3Rfbm9ybWFsaXplX3NlbnNlKHN0cnVjdCBzY3NpX3JlcXVlc3QgKnNyZXEsCisJCXN0cnVjdCBzY3NpX3NlbnNlX2hkciAqc3NoZHIpOworZXh0ZXJuIGludCBzY3NpX2NvbW1hbmRfbm9ybWFsaXplX3NlbnNlKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwKKwkJc3RydWN0IHNjc2lfc2Vuc2VfaGRyICpzc2hkcik7CisKK3N0YXRpYyBpbmxpbmUgaW50IHNjc2lfc2Vuc2VfaXNfZGVmZXJyZWQoc3RydWN0IHNjc2lfc2Vuc2VfaGRyICpzc2hkcikKK3sKKwlyZXR1cm4gKChzc2hkci0+cmVzcG9uc2VfY29kZSA+PSAweDcwKSAmJiAoc3NoZHItPnJlc3BvbnNlX2NvZGUgJiAxKSk7Cit9CisKK2V4dGVybiBjb25zdCB1OCAqIHNjc2lfc2Vuc2VfZGVzY19maW5kKGNvbnN0IHU4ICogc2Vuc2VfYnVmZmVyLCBpbnQgc2JfbGVuLAorCQkJCSAgICAgICBpbnQgZGVzY190eXBlKTsKKworZXh0ZXJuIGludCBzY3NpX2dldF9zZW5zZV9pbmZvX2ZsZChjb25zdCB1OCAqIHNlbnNlX2J1ZmZlciwgaW50IHNiX2xlbiwKKwkJCQkgICB1NjQgKiBpbmZvX291dCk7CisgCisvKgorICogUmVzZXQgcmVxdWVzdCBmcm9tIGV4dGVybmFsIHNvdXJjZQorICovCisjZGVmaW5lIFNDU0lfVFJZX1JFU0VUX0RFVklDRQkxCisjZGVmaW5lIFNDU0lfVFJZX1JFU0VUX0JVUwkyCisjZGVmaW5lIFNDU0lfVFJZX1JFU0VUX0hPU1QJMworCitleHRlcm4gaW50IHNjc2lfcmVzZXRfcHJvdmlkZXIoc3RydWN0IHNjc2lfZGV2aWNlICosIGludCk7CisKKyNlbmRpZiAvKiBfU0NTSV9TQ1NJX0VIX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpX2hvc3QuaCBiL2luY2x1ZGUvc2NzaS9zY3NpX2hvc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2YyYzRlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9zY3NpL3Njc2lfaG9zdC5oCkBAIC0wLDAgKzEsNjQyIEBACisjaWZuZGVmIF9TQ1NJX1NDU0lfSE9TVF9ICisjZGVmaW5lIF9TQ1NJX1NDU0lfSE9TVF9ICisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKworc3RydWN0IGJsb2NrX2RldmljZTsKK3N0cnVjdCBtb2R1bGU7CitzdHJ1Y3Qgc2NzaV9jbW5kOworc3RydWN0IHNjc2lfZGV2aWNlOworc3RydWN0IFNjc2lfSG9zdDsKK3N0cnVjdCBzY3NpX2hvc3RfY21kX3Bvb2w7CitzdHJ1Y3Qgc2NzaV90cmFuc3BvcnRfdGVtcGxhdGU7CisKKworLyoKKyAqIFRoZSB2YXJpb3VzIGNob2ljZXMgbWVhbjoKKyAqIE5PTkU6IFNlbGYgZXZpZGVudC4JSG9zdCBhZGFwdGVyIGlzIG5vdCBjYXBhYmxlIG9mIHNjYXR0ZXItZ2F0aGVyLgorICogQUxMOgkgTWVhbnMgdGhhdCB0aGUgaG9zdCBhZGFwdGVyIG1vZHVsZSBjYW4gZG8gc2NhdHRlci1nYXRoZXIsCisgKgkgYW5kIHRoYXQgdGhlcmUgaXMgbm8gbGltaXQgdG8gdGhlIHNpemUgb2YgdGhlIHRhYmxlIHRvIHdoaWNoCisgKgkgd2Ugc2NhdHRlci9nYXRoZXIgZGF0YS4KKyAqIEFueXRoaW5nIGVsc2U6ICBJbmRpY2F0ZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNoYWlucyB0aGF0IGNhbiBiZQorICoJIHVzZWQgaW4gb25lIHNjYXR0ZXItZ2F0aGVyIHJlcXVlc3QuCisgKi8KKyNkZWZpbmUgU0dfTk9ORSAwCisjZGVmaW5lIFNHX0FMTCAweGZmCisKKworI2RlZmluZSBESVNBQkxFX0NMVVNURVJJTkcgMAorI2RlZmluZSBFTkFCTEVfQ0xVU1RFUklORyAxCisKK2VudW0gc2NzaV9laF90aW1lcl9yZXR1cm4geworCUVIX05PVF9IQU5ETEVELAorCUVIX0hBTkRMRUQsCisJRUhfUkVTRVRfVElNRVIsCit9OworCisKK3N0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgeworCXN0cnVjdCBtb2R1bGUgKm1vZHVsZTsKKwljb25zdCBjaGFyICpuYW1lOworCisJLyoKKwkgKiBVc2VkIHRvIGluaXRpYWxpemUgb2xkLXN0eWxlIGRyaXZlcnMuICBGb3IgbmV3LXN0eWxlIGRyaXZlcnMKKwkgKiBqdXN0IHBlcmZvcm0gYWxsIHdvcmsgaW4geW91ciBtb2R1bGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24uCisJICoKKwkgKiBTdGF0dXM6ICBPQlNPTEVURQorCSAqLworCWludCAoKiBkZXRlY3QpKHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKik7CisKKwkvKgorCSAqIFVzZWQgYXMgdW5sb2FkIGNhbGxiYWNrIGZvciBob3N0cyB3aXRoIG9sZC1zdHlsZSBkcml2ZXJzLgorCSAqCisJICogU3RhdHVzOiBPQlNPTEVURQorCSAqLworCWludCAoKiByZWxlYXNlKShzdHJ1Y3QgU2NzaV9Ib3N0ICopOworCisJLyoKKwkgKiBUaGUgaW5mbyBmdW5jdGlvbiB3aWxsIHJldHVybiB3aGF0ZXZlciB1c2VmdWwgaW5mb3JtYXRpb24gdGhlCisJICogZGV2ZWxvcGVyIHNlZXMgZml0LiAgSWYgbm90IHByb3ZpZGVkLCB0aGVuIHRoZSBuYW1lIGZpZWxkIHdpbGwKKwkgKiBiZSB1c2VkIGluc3RlYWQuCisJICoKKwkgKiBTdGF0dXM6IE9QVElPTkFMCisJICovCisJY29uc3QgY2hhciAqKCogaW5mbykoc3RydWN0IFNjc2lfSG9zdCAqKTsKKworCS8qCisJICogSW9jdGwgaW50ZXJmYWNlCisJICoKKwkgKiBTdGF0dXM6IE9QVElPTkFMCisJICovCisJaW50ICgqIGlvY3RsKShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldiwgaW50IGNtZCwgdm9pZCBfX3VzZXIgKmFyZyk7CisKKworI2lmZGVmIENPTkZJR19DT01QQVQKKwkvKiAKKwkgKiBDb21wYXQgaGFuZGxlci4gSGFuZGxlIDMyYml0IEFCSS4KKwkgKiBXaGVuIHVua25vd24gaW9jdGwgaXMgcGFzc2VkIHJldHVybiAtRU5PSU9DVExDTUQuCisJICoKKwkgKiBTdGF0dXM6IE9QVElPTkFMCisJICovCisJaW50ICgqIGNvbXBhdF9pb2N0bCkoc3RydWN0IHNjc2lfZGV2aWNlICpkZXYsIGludCBjbWQsIHZvaWQgX191c2VyICphcmcpOworI2VuZGlmCisKKwkvKgorCSAqIFRoZSBxdWV1ZWNvbW1hbmQgZnVuY3Rpb24gaXMgdXNlZCB0byBxdWV1ZSB1cCBhIHNjc2kKKwkgKiBjb21tYW5kIGJsb2NrIHRvIHRoZSBMTERELiAgV2hlbiB0aGUgZHJpdmVyIGZpbmlzaGVkCisJICogcHJvY2Vzc2luZyB0aGUgY29tbWFuZCB0aGUgZG9uZSBjYWxsYmFjayBpcyBpbnZva2VkLgorCSAqCisJICogSWYgcXVldWVjb21tYW5kIHJldHVybnMgMCwgdGhlbiB0aGUgSEJBIGhhcyBhY2NlcHRlZCB0aGUKKwkgKiBjb21tYW5kLiAgVGhlIGRvbmUoKSBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBvbiB0aGUgY29tbWFuZAorCSAqIHdoZW4gdGhlIGRyaXZlciBoYXMgZmluaXNoZWQgd2l0aCBpdC4gKHlvdSBtYXkgY2FsbCBkb25lIG9uIHRoZQorCSAqIGNvbW1hbmQgYmVmb3JlIHF1ZXVlY29tbWFuZCByZXR1cm5zLCBidXQgaW4gdGhpcyBjYXNlIHlvdQorCSAqICptdXN0KiByZXR1cm4gMCBmcm9tIHF1ZXVlY29tbWFuZCkuCisJICoKKwkgKiBRdWV1ZWNvbW1hbmQgbWF5IGFsc28gcmVqZWN0IHRoZSBjb21tYW5kLCBpbiB3aGljaCBjYXNlIGl0IG1heQorCSAqIG5vdCB0b3VjaCB0aGUgY29tbWFuZCBhbmQgbXVzdCBub3QgY2FsbCBkb25lKCkgZm9yIGl0LgorCSAqCisJICogVGhlcmUgYXJlIHR3byBwb3NzaWJsZSByZWplY3Rpb24gcmV0dXJuczoKKwkgKgorCSAqICAgU0NTSV9NTFFVRVVFX0RFVklDRV9CVVNZOiBCbG9jayB0aGlzIGRldmljZSB0ZW1wb3JhcmlseSwgYnV0CisJICogICBhbGxvdyBjb21tYW5kcyB0byBvdGhlciBkZXZpY2VzIHNlcnZpY2VkIGJ5IHRoaXMgaG9zdC4KKwkgKgorCSAqICAgU0NTSV9NTFFVRVVFX0hPU1RfQlVTWTogQmxvY2sgYWxsIGRldmljZXMgc2VydmVkIGJ5IHRoaXMKKwkgKiAgIGhvc3QgdGVtcG9yYXJpbHkuCisJICoKKyAgICAgICAgICogRm9yIGNvbXBhdGliaWxpdHksIGFueSBvdGhlciBub24temVybyByZXR1cm4gaXMgdHJlYXRlZCB0aGUKKyAgICAgICAgICogc2FtZSBhcyBTQ1NJX01MUVVFVUVfSE9TVF9CVVNZLgorCSAqCisJICogTk9URTogInRlbXBvcmFyaWx5IiBtZWFucyBlaXRoZXIgdW50aWwgdGhlIG5leHQgY29tbWFuZCBmb3IjCisJICogdGhpcyBkZXZpY2UvaG9zdCBjb21wbGV0ZXMsIG9yIGEgcGVyaW9kIG9mIHRpbWUgZGV0ZXJtaW5lZCBieQorCSAqIEkvTyBwcmVzc3VyZSBpbiB0aGUgc3lzdGVtIGlmIHRoZXJlIGFyZSBubyBvdGhlciBvdXRzdGFuZGluZworCSAqIGNvbW1hbmRzLgorCSAqCisJICogU1RBVFVTOiBSRVFVSVJFRAorCSAqLworCWludCAoKiBxdWV1ZWNvbW1hbmQpKHN0cnVjdCBzY3NpX2NtbmQgKiwKKwkJCSAgICAgdm9pZCAoKmRvbmUpKHN0cnVjdCBzY3NpX2NtbmQgKikpOworCisJLyoKKwkgKiBUaGlzIGlzIGFuIGVycm9yIGhhbmRsaW5nIHN0cmF0ZWd5IHJvdXRpbmUuICBZb3UgZG9uJ3QgbmVlZCB0bworCSAqIGRlZmluZSBvbmUgb2YgdGhlc2UgaWYgeW91IGRvbid0IHdhbnQgdG8gLSB0aGVyZSBpcyBhIGRlZmF1bHQKKwkgKiByb3V0aW5lIHRoYXQgaXMgcHJlc2VudCB0aGF0IHNob3VsZCB3b3JrIGluIG1vc3QgY2FzZXMuICBGb3IgdGhvc2UKKwkgKiBkcml2ZXIgYXV0aG9ycyB0aGF0IGhhdmUgdGhlIGluY2xpbmF0aW9uIGFuZCBhYmlsaXR5IHRvIHdyaXRlIHRoZWlyCisJICogb3duIHN0cmF0ZWd5IHJvdXRpbmUsIHRoaXMgaXMgd2hlcmUgaXQgaXMgc3BlY2lmaWVkLiAgTm90ZSAtIHRoZQorCSAqIHN0cmF0ZWd5IHJvdXRpbmUgaXMgKkFMV0FZUyogcnVuIGluIHRoZSBjb250ZXh0IG9mIHRoZSBrZXJuZWwgZWgKKwkgKiB0aHJlYWQuICBUaHVzIHlvdSBhcmUgZ3VhcmFudGVlZCB0byAqTk9UKiBiZSBpbiBhbiBpbnRlcnJ1cHQKKwkgKiBoYW5kbGVyIHdoZW4geW91IGV4ZWN1dGUgdGhpcywgYW5kIHlvdSBhcmUgYWxzbyBndWFyYW50ZWVkIHRvCisJICogKk5PVCogaGF2ZSBhbnkgb3RoZXIgY29tbWFuZHMgYmVpbmcgcXVldWVkIHdoaWxlIHlvdSBhcmUgaW4gdGhlCisJICogc3RyYXRlZ3kgcm91dGluZS4gV2hlbiB5b3UgcmV0dXJuIGZyb20gdGhpcyBmdW5jdGlvbiwgb3BlcmF0aW9ucworCSAqIHJldHVybiB0byBub3JtYWwuCisJICoKKwkgKiBTZWUgc2NzaV9lcnJvci5jIHNjc2lfdW5qYW1faG9zdCBmb3IgYWRkaXRpb25hbCBjb21tZW50cyBhYm91dAorCSAqIHdoYXQgdGhpcyBmdW5jdGlvbiBzaG91bGQgYW5kIHNob3VsZCBub3QgYmUgYXR0ZW1wdGluZyB0byBkby4KKwkgKgorCSAqIFN0YXR1czogUkVRVUlSRUQJKGF0IGxlYXN0IG9uZSBvZiB0aGVtKQorCSAqLworCWludCAoKiBlaF9zdHJhdGVneV9oYW5kbGVyKShzdHJ1Y3QgU2NzaV9Ib3N0ICopOworCWludCAoKiBlaF9hYm9ydF9oYW5kbGVyKShzdHJ1Y3Qgc2NzaV9jbW5kICopOworCWludCAoKiBlaF9kZXZpY2VfcmVzZXRfaGFuZGxlcikoc3RydWN0IHNjc2lfY21uZCAqKTsKKwlpbnQgKCogZWhfYnVzX3Jlc2V0X2hhbmRsZXIpKHN0cnVjdCBzY3NpX2NtbmQgKik7CisJaW50ICgqIGVoX2hvc3RfcmVzZXRfaGFuZGxlcikoc3RydWN0IHNjc2lfY21uZCAqKTsKKworCS8qCisJICogVGhpcyBpcyBhbiBvcHRpb25hbCByb3V0aW5lIHRvIG5vdGlmeSB0aGUgaG9zdCB0aGF0IHRoZSBzY3NpCisJICogdGltZXIganVzdCBmaXJlZC4gIFRoZSByZXR1cm5zIHRlbGwgdGhlIHRpbWVyIHJvdXRpbmUgd2hhdCB0bworCSAqIGRvIGFib3V0IHRoaXM6CisJICoKKwkgKiBFSF9IQU5ETEVEOgkJSSBmaXhlZCB0aGUgZXJyb3IsIHBsZWFzZSBjb21wbGV0ZSB0aGUgY29tbWFuZAorCSAqIEVIX1JFU0VUX1RJTUVSOglJIG5lZWQgbW9yZSB0aW1lLCByZXNldCB0aGUgdGltZXIgYW5kCisJICoJCQliZWdpbiBjb3VudGluZyBhZ2FpbgorCSAqIEVIX05PVF9IQU5ETEVECUJlZ2luIG5vcm1hbCBlcnJvciByZWNvdmVyeQorCSAqCisJICogU3RhdHVzOiBPUFRJT05BTAorCSAqLworCWVudW0gc2NzaV9laF90aW1lcl9yZXR1cm4gKCogZWhfdGltZWRfb3V0KShzdHJ1Y3Qgc2NzaV9jbW5kICopOworCisJLyoKKwkgKiBCZWZvcmUgdGhlIG1pZCBsYXllciBhdHRlbXB0cyB0byBzY2FuIGZvciBhIG5ldyBkZXZpY2Ugd2hlcmUgbm9uZQorCSAqIGN1cnJlbnRseSBleGlzdHMsIGl0IHdpbGwgY2FsbCB0aGlzIGVudHJ5IGluIHlvdXIgZHJpdmVyLiAgU2hvdWxkCisJICogeW91ciBkcml2ZXIgbmVlZCB0byBhbGxvY2F0ZSBhbnkgc3RydWN0cyBvciBwZXJmb3JtIGFueSBvdGhlciBpbml0CisJICogaXRlbXMgaW4gb3JkZXIgdG8gc2VuZCBjb21tYW5kcyB0byBhIGN1cnJlbnRseSB1bnVzZWQgdGFyZ2V0L2x1bgorCSAqIGNvbWJvLCB0aGVuIHRoaXMgaXMgd2hlcmUgeW91IGNhbiBwZXJmb3JtIHRob3NlIGFsbG9jYXRpb25zLiAgVGhpcworCSAqIGlzIHNwZWNpZmljYWxseSBzbyB0aGF0IGRyaXZlcnMgd29uJ3QgaGF2ZSB0byBwZXJmb3JtIGFueSBraW5kIG9mCisJICogImlzIHRoaXMgYSBuZXcgZGV2aWNlIiBjaGVja3MgaW4gdGhlaXIgcXVldWVjb21tYW5kIHJvdXRpbmUsCisJICogdGhlcmVieSBtYWtpbmcgdGhlIGhvdCBwYXRoIGEgYml0IHF1aWNrZXIuCisJICoKKwkgKiBSZXR1cm4gdmFsdWVzOiAwIG9uIHN1Y2Nlc3MsIG5vbi0wIG9uIGZhaWx1cmUKKwkgKgorCSAqIERlYWxsb2NhdGlvbjogIElmIHdlIGRpZG4ndCBmaW5kIGFueSBkZXZpY2VzIGF0IHRoaXMgSUQsIHlvdSB3aWxsCisJICogZ2V0IGFuIGltbWVkaWF0ZSBjYWxsIHRvIHNsYXZlX2Rlc3Ryb3koKS4gIElmIHdlIGZpbmQgc29tZXRoaW5nCisJICogaGVyZSB0aGVuIHlvdSB3aWxsIGdldCBhIGNhbGwgdG8gc2xhdmVfY29uZmlndXJlKCksIHRoZW4gdGhlCisJICogZGV2aWNlIHdpbGwgYmUgdXNlZCBmb3IgaG93ZXZlciBsb25nIGl0IGlzIGtlcHQgYXJvdW5kLCB0aGVuIHdoZW4KKwkgKiB0aGUgZGV2aWNlIGlzIHJlbW92ZWQgZnJvbSB0aGUgc3lzdGVtIChvciAqIHBvc3NpYmx5IGF0IHJlYm9vdAorCSAqIHRpbWUpLCB5b3Ugd2lsbCB0aGVuIGdldCBhIGNhbGwgdG8gc2xhdmVfZGVzdHJveSgpLiAgVGhpcyBpcworCSAqIGFzc3VtaW5nIHlvdSBpbXBsZW1lbnQgc2xhdmVfY29uZmlndXJlIGFuZCBzbGF2ZV9kZXN0cm95LgorCSAqIEhvd2V2ZXIsIGlmIHlvdSBhbGxvY2F0ZSBtZW1vcnkgYW5kIGhhbmcgaXQgb2ZmIHRoZSBkZXZpY2Ugc3RydWN0LAorCSAqIHRoZW4geW91IG11c3QgaW1wbGVtZW50IHRoZSBzbGF2ZV9kZXN0cm95KCkgcm91dGluZSBhdCBhIG1pbmltdW0KKwkgKiBpbiBvcmRlciB0byBhdm9pZCBsZWFraW5nIG1lbW9yeQorCSAqIGVhY2ggdGltZSBhIGRldmljZSBpcyB0b3JlIGRvd24uCisJICoKKwkgKiBTdGF0dXM6IE9QVElPTkFMCisJICovCisJaW50ICgqIHNsYXZlX2FsbG9jKShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKik7CisKKwkvKgorCSAqIE9uY2UgdGhlIGRldmljZSBoYXMgcmVzcG9uZGVkIHRvIGFuIElOUVVJUlkgYW5kIHdlIGtub3cgdGhlCisJICogZGV2aWNlIGlzIG9ubGluZSwgd2UgY2FsbCBpbnRvIHRoZSBsb3cgbGV2ZWwgZHJpdmVyIHdpdGggdGhlCisJICogc3RydWN0IHNjc2lfZGV2aWNlICouICBJZiB0aGUgbG93IGxldmVsIGRldmljZSBkcml2ZXIgaW1wbGVtZW50cworCSAqIHRoaXMgZnVuY3Rpb24sIGl0ICptdXN0KiBwZXJmb3JtIHRoZSB0YXNrIG9mIHNldHRpbmcgdGhlIHF1ZXVlCisJICogZGVwdGggb24gdGhlIGRldmljZS4gIEFsbCBvdGhlciB0YXNrcyBhcmUgb3B0aW9uYWwgYW5kIGRlcGVuZAorCSAqIG9uIHdoYXQgdGhlIGRyaXZlciBzdXBwb3J0cyBhbmQgdmFyaW91cyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLgorCSAqIAorCSAqIFRoaW5ncyBjdXJyZW50bHkgcmVjb21tZW5kZWQgdG8gYmUgaGFuZGxlZCBhdCB0aGlzIHRpbWUgaW5jbHVkZToKKwkgKgorCSAqIDEuICBTZXR0aW5nIHRoZSBkZXZpY2UgcXVldWUgZGVwdGguICBQcm9wZXIgc2V0dGluZyBvZiB0aGlzIGlzCisJICogICAgIGRlc2NyaWJlZCBpbiB0aGUgY29tbWVudHMgZm9yIHNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoLgorCSAqIDIuICBEZXRlcm1pbmluZyBpZiB0aGUgZGV2aWNlIHN1cHBvcnRzIHRoZSB2YXJpb3VzIHN5bmNocm9ub3VzCisJICogICAgIG5lZ290aWF0aW9uIHByb3RvY29scy4gIFRoZSBkZXZpY2Ugc3RydWN0IHdpbGwgYWxyZWFkeSBoYXZlCisJICogICAgIHJlc3BvbmRlZCB0byBJTlFVSVJZIGFuZCB0aGUgcmVzdWx0cyBvZiB0aGUgc3RhbmRhcmQgaXRlbXMKKwkgKiAgICAgd2lsbCBoYXZlIGJlZW4gc2hvdmVkIGludG8gdGhlIHZhcmlvdXMgZGV2aWNlIGZsYWcgYml0cywgZWcuCisJICogICAgIGRldmljZS0+c2R0ciB3aWxsIGJlIHRydWUgaWYgdGhlIGRldmljZSBzdXBwb3J0cyBTRFRSIG1lc3NhZ2VzLgorCSAqIDMuICBBbGxvY2F0aW5nIGNvbW1hbmQgc3RydWN0cyB0aGF0IHRoZSBkZXZpY2Ugd2lsbCBuZWVkLgorCSAqIDQuICBTZXR0aW5nIHRoZSBkZWZhdWx0IHRpbWVvdXQgb24gdGhpcyBkZXZpY2UgKGlmIG5lZWRlZCkuCisJICogNS4gIEFueXRoaW5nIGVsc2UgdGhlIGxvdyBsZXZlbCBkcml2ZXIgbWlnaHQgd2FudCB0byBkbyBvbiBhIGRldmljZQorCSAqICAgICBzcGVjaWZpYyBzZXR1cCBiYXNpcy4uLgorCSAqIDYuICBSZXR1cm4gMCBvbiBzdWNjZXNzLCBub24tMCBvbiBlcnJvci4gIFRoZSBkZXZpY2Ugd2lsbCBiZSBtYXJrZWQKKwkgKiAgICAgYXMgb2ZmbGluZSBvbiBlcnJvciBzbyB0aGF0IG5vIGFjY2VzcyB3aWxsIG9jY3VyLiAgSWYgeW91IHJldHVybgorCSAqICAgICBub24tMCwgeW91ciBzbGF2ZV9kZXN0cm95IHJvdXRpbmUgd2lsbCBuZXZlciBnZXQgY2FsbGVkIGZvciB0aGlzCisJICogICAgIGRldmljZSwgc28gZG9uJ3QgbGVhdmUgYW55IGxvb3NlIG1lbW9yeSBoYW5naW5nIGFyb3VuZCwgY2xlYW4KKwkgKiAgICAgdXAgYWZ0ZXIgeW91cnNlbGYgYmVmb3JlIHJldHVybmluZyBub24tMAorCSAqCisJICogU3RhdHVzOiBPUFRJT05BTAorCSAqLworCWludCAoKiBzbGF2ZV9jb25maWd1cmUpKHN0cnVjdCBzY3NpX2RldmljZSAqKTsKKworCS8qCisJICogSW1tZWRpYXRlbHkgcHJpb3IgdG8gZGVhbGxvY2F0aW5nIHRoZSBkZXZpY2UgYW5kIGFmdGVyIGFsbCBhY3Rpdml0eQorCSAqIGhhcyBjZWFzZWQgdGhlIG1pZCBsYXllciBjYWxscyB0aGlzIHBvaW50IHNvIHRoYXQgdGhlIGxvdyBsZXZlbAorCSAqIGRyaXZlciBtYXkgY29tcGxldGVseSBkZXRhY2ggaXRzZWxmIGZyb20gdGhlIHNjc2kgZGV2aWNlIGFuZCB2aWNlCisJICogdmVyc2EuICBUaGUgbG93IGxldmVsIGRyaXZlciBpcyByZXNwb25zaWJsZSBmb3IgZnJlZWluZyBhbnkgbWVtb3J5CisJICogaXQgYWxsb2NhdGVkIGluIHRoZSBzbGF2ZV9hbGxvYyBvciBzbGF2ZV9jb25maWd1cmUgY2FsbHMuIAorCSAqCisJICogU3RhdHVzOiBPUFRJT05BTAorCSAqLworCXZvaWQgKCogc2xhdmVfZGVzdHJveSkoc3RydWN0IHNjc2lfZGV2aWNlICopOworCisJLyoKKwkgKiBmaWxsIGluIHRoaXMgZnVuY3Rpb24gdG8gYWxsb3cgdGhlIHF1ZXVlIGRlcHRoIG9mIHRoaXMgaG9zdAorCSAqIHRvIGJlIGNoYW5nZWFibGUgKG9uIGEgcGVyIGRldmljZSBiYXNpcykuICByZXR1cm5zIGVpdGhlcgorCSAqIHRoZSBjdXJyZW50IHF1ZXVlIGRlcHRoIHNldHRpbmcgKG1heSBiZSBkaWZmZXJlbnQgZnJvbSB3aGF0CisJICogd2FzIHBhc3NlZCBpbikgb3IgYW4gZXJyb3IuICBBbiBlcnJvciBzaG91bGQgb25seSBiZQorCSAqIHJldHVybmVkIGlmIHRoZSByZXF1ZXN0ZWQgZGVwdGggaXMgbGVnYWwgYnV0IHRoZSBkcml2ZXIgd2FzCisJICogdW5hYmxlIHRvIHNldCBpdC4gIElmIHRoZSByZXF1ZXN0ZWQgZGVwdGggaXMgaWxsZWdhbCwgdGhlCisJICogZHJpdmVyIHNob3VsZCBzZXQgYW5kIHJldHVybiB0aGUgY2xvc2VzdCBsZWdhbCBxdWV1ZSBkZXB0aC4KKwkgKgorCSAqLworCWludCAoKiBjaGFuZ2VfcXVldWVfZGVwdGgpKHN0cnVjdCBzY3NpX2RldmljZSAqLCBpbnQpOworCisJLyoKKwkgKiBmaWxsIGluIHRoaXMgZnVuY3Rpb24gdG8gYWxsb3cgdGhlIGNoYW5naW5nIG9mIHRhZyB0eXBlcworCSAqICh0aGlzIGFsc28gYWxsb3dzIHRoZSBlbmFibGluZy9kaXNhYmxpbmcgb2YgdGFnIGNvbW1hbmQKKwkgKiBxdWV1ZWluZykuICBBbiBlcnJvciBzaG91bGQgb25seSBiZSByZXR1cm5lZCBpZiBzb21ldGhpbmcKKwkgKiB3ZW50IHdyb25nIGluIHRoZSBkcml2ZXIgd2hpbGUgdHJ5aW5nIHRvIHNldCB0aGUgdGFnIHR5cGUuCisJICogSWYgdGhlIGRyaXZlciBkb2Vzbid0IHN1cHBvcnQgdGhlIHJlcXVlc3RlZCB0YWcgdHlwZSwgdGhlbgorCSAqIGl0IHNob3VsZCBzZXQgdGhlIGNsb3Nlc3QgdHlwZSBpdCBkb2VzIHN1cHBvcnQgd2l0aG91dAorCSAqIHJldHVybmluZyBhbiBlcnJvci4gIFJldHVybnMgdGhlIGFjdHVhbCB0YWcgdHlwZSBzZXQuCisJICovCisJaW50ICgqIGNoYW5nZV9xdWV1ZV90eXBlKShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKiwgaW50KTsKKworCS8qCisJICogVGhpcyBmdW5jdGlvbiBkZXRlcm1pbmVzIHRoZSBiaW9zIHBhcmFtZXRlcnMgZm9yIGEgZ2l2ZW4KKwkgKiBoYXJkZGlzay4gIFRoZXNlIHRlbmQgdG8gYmUgbnVtYmVycyB0aGF0IGFyZSBtYWRlIHVwIGJ5CisJICogdGhlIGhvc3QgYWRhcHRlci4gIFBhcmFtZXRlcnM6CisJICogc2l6ZSwgZGV2aWNlLCBsaXN0IChoZWFkcywgc2VjdG9ycywgY3lsaW5kZXJzKQorCSAqCisJICogU3RhdHVzOiBPUFRJT05BTCAqLworCWludCAoKiBiaW9zX3BhcmFtKShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKiwgc3RydWN0IGJsb2NrX2RldmljZSAqLAorCQkJc2VjdG9yX3QsIGludCBbXSk7CisKKwkvKgorCSAqIENhbiBiZSB1c2VkIHRvIGV4cG9ydCBkcml2ZXIgc3RhdGlzdGljcyBhbmQgb3RoZXIgaW5mb3MgdG8gdGhlCisJICogd29ybGQgb3V0c2lkZSB0aGUga2VybmVsIGllLiB1c2Vyc3BhY2UgYW5kIGl0IGFsc28gcHJvdmlkZXMgYW4KKwkgKiBpbnRlcmZhY2UgdG8gZmVlZCB0aGUgZHJpdmVyIHdpdGggaW5mb3JtYXRpb24uCisJICoKKwkgKiBTdGF0dXM6IE9CU09MRVRFCisJICovCisJaW50ICgqcHJvY19pbmZvKShzdHJ1Y3QgU2NzaV9Ib3N0ICosIGNoYXIgKiwgY2hhciAqKiwgb2ZmX3QsIGludCwgaW50KTsKKworCS8qCisJICogTmFtZSBvZiBwcm9jIGRpcmVjdG9yeQorCSAqLworCWNoYXIgKnByb2NfbmFtZTsKKworCS8qCisJICogVXNlZCB0byBzdG9yZSB0aGUgcHJvY2ZzIGRpcmVjdG9yeSBpZiBhIGRyaXZlciBpbXBsZW1lbnRzIHRoZQorCSAqIHByb2NfaW5mbyBtZXRob2QuCisJICovCisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX2RpcjsKKworCS8qCisJICogVGhpcyBkZXRlcm1pbmVzIGlmIHdlIHdpbGwgdXNlIGEgbm9uLWludGVycnVwdCBkcml2ZW4KKwkgKiBvciBhbiBpbnRlcnJ1cHQgZHJpdmVuIHNjaGVtZSwgIEl0IGlzIHNldCB0byB0aGUgbWF4aW11bSBudW1iZXIKKwkgKiBvZiBzaW11bHRhbmVvdXMgY29tbWFuZHMgYSBnaXZlbiBob3N0IGFkYXB0ZXIgd2lsbCBhY2NlcHQuCisJICovCisJaW50IGNhbl9xdWV1ZTsKKworCS8qCisJICogSW4gbWFueSBpbnN0YW5jZXMsIGVzcGVjaWFsbHkgd2hlcmUgZGlzY29ubmVjdCAvIHJlY29ubmVjdCBhcmUKKwkgKiBzdXBwb3J0ZWQsIG91ciBob3N0IGFsc28gaGFzIGFuIElEIG9uIHRoZSBTQ1NJIGJ1cy4gIElmIHRoaXMgaXMKKwkgKiB0aGUgY2FzZSwgdGhlbiBpdCBtdXN0IGJlIHJlc2VydmVkLiAgUGxlYXNlIHNldCB0aGlzX2lkIHRvIC0xIGlmCisJICogeW91ciBzZXR1cCBpcyBpbiBzaW5nbGUgaW5pdGlhdG9yIG1vZGUsIGFuZCB0aGUgaG9zdCBsYWNrcyBhbgorCSAqIElELgorCSAqLworCWludCB0aGlzX2lkOworCisJLyoKKwkgKiBUaGlzIGRldGVybWluZXMgdGhlIGRlZ3JlZSB0byB3aGljaCB0aGUgaG9zdCBhZGFwdGVyIGlzIGNhcGFibGUKKwkgKiBvZiBzY2F0dGVyLWdhdGhlci4KKwkgKi8KKwl1bnNpZ25lZCBzaG9ydCBzZ190YWJsZXNpemU7CisKKwkvKgorCSAqIElmIHRoZSBob3N0IGFkYXB0ZXIgaGFzIGxpbWl0YXRpb25zIGJlc2lkZSBzZWdtZW50IGNvdW50CisJICovCisJdW5zaWduZWQgc2hvcnQgbWF4X3NlY3RvcnM7CisKKwkvKgorCSAqIGRtYSBzY2F0dGVyIGdhdGhlciBzZWdtZW50IGJvdW5kYXJ5IGxpbWl0LiBhIHNlZ21lbnQgY3Jvc3NpbmcgdGhpcworCSAqIGJvdW5kYXJ5IHdpbGwgYmUgc3BsaXQgaW4gdHdvLgorCSAqLworCXVuc2lnbmVkIGxvbmcgZG1hX2JvdW5kYXJ5OworCisJLyoKKwkgKiBUaGlzIHNwZWNpZmllcyAibWFjaGluZSBpbmZpbml0eSIgZm9yIGhvc3QgdGVtcGxhdGVzIHdoaWNoIGRvbid0CisJICogbGltaXQgdGhlIHRyYW5zZmVyIHNpemUuICBOb3RlIHRoaXMgbGltaXQgcmVwcmVzZW50cyBhbiBhYnNvbHV0ZQorCSAqIG1heGltdW0sIGFuZCBtYXkgYmUgb3ZlciB0aGUgdHJhbnNmZXIgbGltaXRzIGFsbG93ZWQgZm9yCisJICogaW5kaXZpZHVhbCBkZXZpY2VzIChlLmcuIDI1NiBmb3IgU0NTSS0xKQorCSAqLworI2RlZmluZSBTQ1NJX0RFRkFVTFRfTUFYX1NFQ1RPUlMJMTAyNAorCisJLyoKKwkgKiBUcnVlIGlmIHRoaXMgaG9zdCBhZGFwdGVyIGNhbiBtYWtlIGdvb2QgdXNlIG9mIGxpbmtlZCBjb21tYW5kcy4KKwkgKiBUaGlzIHdpbGwgYWxsb3cgbW9yZSB0aGFuIG9uZSBjb21tYW5kIHRvIGJlIHF1ZXVlZCB0byBhIGdpdmVuCisJICogdW5pdCBvbiBhIGdpdmVuIGhvc3QuICBTZXQgdGhpcyB0byB0aGUgbWF4aW11bSBudW1iZXIgb2YgY29tbWFuZAorCSAqIGJsb2NrcyB0byBiZSBwcm92aWRlZCBmb3IgZWFjaCBkZXZpY2UuICBTZXQgdGhpcyB0byAxIGZvciBvbmUKKwkgKiBjb21tYW5kIGJsb2NrIHBlciBsdW4sIDIgZm9yIHR3bywgZXRjLiAgRG8gbm90IHNldCB0aGlzIHRvIDAuCisJICogWW91IHNob3VsZCBtYWtlIHN1cmUgdGhhdCB0aGUgaG9zdCBhZGFwdGVyIHdpbGwgZG8gdGhlIHJpZ2h0IHRoaW5nCisJICogYmVmb3JlIHlvdSB0cnkgc2V0dGluZyB0aGlzIGFib3ZlIDEuCisJICovCisJc2hvcnQgY21kX3Blcl9sdW47CisKKwkvKgorCSAqIHByZXNlbnQgY29udGFpbnMgY291bnRlciBpbmRpY2F0aW5nIGhvdyBtYW55IGJvYXJkcyBvZiB0aGlzCisJICogdHlwZSB3ZXJlIGZvdW5kIHdoZW4gd2UgZGlkIHRoZSBzY2FuLgorCSAqLworCXVuc2lnbmVkIGNoYXIgcHJlc2VudDsKKworCS8qCisJICogdHJ1ZSBpZiB0aGlzIGhvc3QgYWRhcHRlciB1c2VzIHVuY2hlY2tlZCBETUEgb250byBhbiBJU0EgYnVzLgorCSAqLworCXVuc2lnbmVkIHVuY2hlY2tlZF9pc2FfZG1hOjE7CisKKwkvKgorCSAqIHRydWUgaWYgdGhpcyBob3N0IGFkYXB0ZXIgY2FuIG1ha2UgZ29vZCB1c2Ugb2YgY2x1c3RlcmluZy4KKwkgKiBJIG9yaWdpbmFsbHkgdGhvdWdodCB0aGF0IGlmIHRoZSB0YWJsZXNpemUgd2FzIGxhcmdlIHRoYXQgaXQKKwkgKiB3YXMgYSB3YXN0ZSBvZiBDUFUgY3ljbGVzIHRvIHByZXBhcmUgYSBjbHVzdGVyIGxpc3QsIGJ1dAorCSAqIGl0IHdvcmtzIG91dCB0aGF0IHRoZSBCdXNsb2dpYyBpcyBmYXN0ZXIgaWYgeW91IHVzZSBhIHNtYWxsZXIKKwkgKiBudW1iZXIgb2Ygc2VnbWVudHMgKGkuZS4gdXNlIGNsdXN0ZXJpbmcpLiAgSSBndWVzcyBpdCBpcworCSAqIGluZWZmaWNpZW50LgorCSAqLworCXVuc2lnbmVkIHVzZV9jbHVzdGVyaW5nOjE7CisKKwkvKgorCSAqIFRydWUgZm9yIGVtdWxhdGVkIFNDU0kgaG9zdCBhZGFwdGVycyAoZS5nLiBBVEFQSSkKKwkgKi8KKwl1bnNpZ25lZCBlbXVsYXRlZDoxOworCisJLyoKKwkgKiBUcnVlIGlmIHRoZSBsb3ctbGV2ZWwgZHJpdmVyIHBlcmZvcm1zIGl0cyBvd24gcmVzZXQtc2V0dGxlIGRlbGF5cy4KKwkgKi8KKwl1bnNpZ25lZCBza2lwX3NldHRsZV9kZWxheToxOworCisJLyoKKwkgKiBvcmRlcmVkIHdyaXRlIHN1cHBvcnQKKwkgKi8KKwl1bnNpZ25lZCBvcmRlcmVkX2ZsdXNoOjE7CisJdW5zaWduZWQgb3JkZXJlZF90YWc6MTsKKworCS8qCisJICogQ291bnRkb3duIGZvciBob3N0IGJsb2NraW5nIHdpdGggbm8gY29tbWFuZHMgb3V0c3RhbmRpbmcKKwkgKi8KKwl1bnNpZ25lZCBpbnQgbWF4X2hvc3RfYmxvY2tlZDsKKworCS8qCisJICogRGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGJsb2NraW5nLiAgSWYgdGhlIHF1ZXVlIGlzIGVtcHR5LAorCSAqIGhvc3RfYmxvY2tlZCBjb3VudHMgZG93biBpbiB0aGUgcmVxdWVzdF9mbiB1bnRpbCBpdCByZXN0YXJ0cworCSAqIGhvc3Qgb3BlcmF0aW9ucyBhcyB6ZXJvIGlzIHJlYWNoZWQuICAKKwkgKgorCSAqIEZJWE1FOiBUaGlzIHNob3VsZCBwcm9iYWJseSBiZSBhIHZhbHVlIGluIHRoZSB0ZW1wbGF0ZQorCSAqLworI2RlZmluZSBTQ1NJX0RFRkFVTFRfSE9TVF9CTE9DS0VECTcKKworCS8qCisJICogUG9pbnRlciB0byB0aGUgc3lzZnMgY2xhc3MgcHJvcGVydGllcyBmb3IgdGhpcyBob3N0LCBOVUxMIHRlcm1pbmF0ZWQuCisJICovCisJc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgKipzaG9zdF9hdHRyczsKKworCS8qCisJICogUG9pbnRlciB0byB0aGUgU0NTSSBkZXZpY2UgcHJvcGVydGllcyBmb3IgdGhpcyBob3N0LCBOVUxMIHRlcm1pbmF0ZWQuCisJICovCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKipzZGV2X2F0dHJzOworCisJLyoKKwkgKiBMaXN0IG9mIGhvc3RzIHBlciB0ZW1wbGF0ZS4KKwkgKgorCSAqIFRoaXMgaXMgb25seSBmb3IgdXNlIGJ5IHNjc2lfbW9kdWxlLmMgZm9yIGxlZ2FjeSB0ZW1wbGF0ZXMuCisJICogRm9yIHRoZXNlIGFjY2VzcyB0byBpdCBpcyBzeW5jaHJvbml6ZWQgaW1wbGljaXRseSBieQorCSAqIG1vZHVsZV9pbml0L21vZHVsZV9leGl0LgorCSAqLworCXN0cnVjdCBsaXN0X2hlYWQgbGVnYWN5X2hvc3RzOworfTsKKworLyoKKyAqIHNob3N0IHN0YXRlcworICovCitlbnVtIHsKKwlTSE9TVF9BREQsCisJU0hPU1RfREVMLAorCVNIT1NUX0NBTkNFTCwKKwlTSE9TVF9SRUNPVkVSWSwKK307CisKK3N0cnVjdCBTY3NpX0hvc3QgeworCS8qCisJICogX19kZXZpY2VzIGlzIHByb3RlY3RlZCBieSB0aGUgaG9zdF9sb2NrLCBidXQgeW91IHNob3VsZAorCSAqIHVzdWFsbHkgdXNlIHNjc2lfZGV2aWNlX2xvb2t1cCAvIHNob3N0X2Zvcl9lYWNoX2RldmljZQorCSAqIHRvIGFjY2VzcyBpdCBhbmQgZG9uJ3QgY2FyZSBhYm91dCBsb2NraW5nIHlvdXJzZWxmLgorCSAqIEluIHRoZSByYXJlIGNhc2Ugb2YgYmVlaW5nIGluIGlycSBjb250ZXh0IHlvdSBjYW4gdXNlCisJICogdGhlaXIgX18gcHJlZml4ZWQgdmFyaWFudHMgd2l0aCB0aGUgbG9jayBoZWxkLiBORVZFUgorCSAqIGFjY2VzcyB0aGlzIGxpc3QgZGlyZWN0bHkgZnJvbSBhIGRyaXZlci4KKwkgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCV9fZGV2aWNlczsKKwlzdHJ1Y3QgbGlzdF9oZWFkCV9fdGFyZ2V0czsKKwkKKwlzdHJ1Y3Qgc2NzaV9ob3N0X2NtZF9wb29sICpjbWRfcG9vbDsKKwlzcGlubG9ja190CQlmcmVlX2xpc3RfbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWZyZWVfbGlzdDsgLyogYmFja3VwIHN0b3JlIG9mIGNtZCBzdHJ1Y3RzICovCisJc3RydWN0IGxpc3RfaGVhZAlzdGFydmVkX2xpc3Q7CisKKwlzcGlubG9ja190CQlkZWZhdWx0X2xvY2s7CisJc3BpbmxvY2tfdAkJKmhvc3RfbG9jazsKKworCXN0cnVjdCBzZW1hcGhvcmUJc2Nhbl9tdXRleDsvKiBzZXJpYWxpemUgc2Nhbm5pbmcgYWN0aXZpdHkgKi8KKworCXN0cnVjdCBsaXN0X2hlYWQJZWhfY21kX3E7CisJc3RydWN0IHRhc2tfc3RydWN0ICAgICogZWhhbmRsZXI7ICAvKiBFcnJvciByZWNvdmVyeSB0aHJlYWQuICovCisJc3RydWN0IHNlbWFwaG9yZSAgICAgICogZWhfd2FpdDsgICAvKiBUaGUgZXJyb3IgcmVjb3ZlcnkgdGhyZWFkIHdhaXRzCisJCQkJCSAgICAgIG9uIHRoaXMuICovCisJc3RydWN0IGNvbXBsZXRpb24gICAgICogZWhfbm90aWZ5OyAvKiB3YWl0IGZvciBlaCB0byBiZWdpbiBvciBlbmQgKi8KKwlzdHJ1Y3Qgc2VtYXBob3JlICAgICAgKiBlaF9hY3Rpb247IC8qIFdhaXQgZm9yIHNwZWNpZmljIGFjdGlvbnMgb24gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3N0LiAqLworCXVuc2lnbmVkIGludCAgICAgICAgICAgIGVoX2FjdGl2ZToxOyAvKiBJbmRpY2F0ZXMgdGhlIGVoIHRocmVhZCBpcyBhd2FrZSBhbmQgYWN0aXZlIGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIGlzIHRydWUuICovCisJdW5zaWduZWQgaW50ICAgICAgICAgICAgZWhfa2lsbDoxOyAvKiBzZXQgd2hlbiBraWxsaW5nIHRoZSBlaCB0aHJlYWQgKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdCAgICAgICBob3N0X3dhaXQ7CisJc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqaG9zdHQ7CisJc3RydWN0IHNjc2lfdHJhbnNwb3J0X3RlbXBsYXRlICp0cmFuc3BvcnR0OworCXZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGhvc3RfYnVzeTsgICAvKiBjb21tYW5kcyBhY3R1YWxseSBhY3RpdmUgb24gbG93LWxldmVsICovCisJdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaG9zdF9mYWlsZWQ7IC8qIGNvbW1hbmRzIHRoYXQgZmFpbGVkLiAqLworICAgIAorCXVuc2lnbmVkIHNob3J0IGhvc3Rfbm87ICAvKiBVc2VkIGZvciBJT0NUTF9HRVRfSURMVU4sIC9wcm9jL3Njc2kgZXQgYWwuICovCisJaW50IHJlc2V0dGluZzsgLyogaWYgc2V0LCBpdCBtZWFucyB0aGF0IGxhc3RfcmVzZXQgaXMgYSB2YWxpZCB2YWx1ZSAqLworCXVuc2lnbmVkIGxvbmcgbGFzdF9yZXNldDsKKworCS8qCisJICogVGhlc2UgdGhyZWUgcGFyYW1ldGVycyBjYW4gYmUgdXNlZCB0byBhbGxvdyBmb3Igd2lkZSBzY3NpLAorCSAqIGFuZCBmb3IgaG9zdCBhZGFwdGVycyB0aGF0IHN1cHBvcnQgbXVsdGlwbGUgYnVzc2VzCisJICogVGhlIGZpcnN0IHR3byBzaG91bGQgYmUgc2V0IHRvIDEgbW9yZSB0aGFuIHRoZSBhY3R1YWwgbWF4IGlkCisJICogb3IgbHVuIChpLmUuIDggZm9yIG5vcm1hbCBzeXN0ZW1zKS4KKwkgKi8KKwl1bnNpZ25lZCBpbnQgbWF4X2lkOworCXVuc2lnbmVkIGludCBtYXhfbHVuOworCXVuc2lnbmVkIGludCBtYXhfY2hhbm5lbDsKKworCS8qCisJICogVGhpcyBpcyBhIHVuaXF1ZSBpZGVudGlmaWVyIHRoYXQgbXVzdCBiZSBhc3NpZ25lZCBzbyB0aGF0IHdlCisJICogaGF2ZSBzb21lIHdheSBvZiBpZGVudGlmeWluZyBlYWNoIGRldGVjdGVkIGhvc3QgYWRhcHRlciBwcm9wZXJseQorCSAqIGFuZCB1bmlxdWVseS4gIEZvciBob3N0cyB0aGF0IGRvIG5vdCBzdXBwb3J0IG1vcmUgdGhhbiBvbmUgY2FyZAorCSAqIGluIHRoZSBzeXN0ZW0gYXQgb25lIHRpbWUsIHRoaXMgZG9lcyBub3QgbmVlZCB0byBiZSBzZXQuICBJdCBpcworCSAqIGluaXRpYWxpemVkIHRvIDAgaW4gc2NzaV9yZWdpc3Rlci4KKwkgKi8KKwl1bnNpZ25lZCBpbnQgdW5pcXVlX2lkOworCisJLyoKKwkgKiBUaGUgbWF4aW11bSBsZW5ndGggb2YgU0NTSSBjb21tYW5kcyB0aGF0IHRoaXMgaG9zdCBjYW4gYWNjZXB0LgorCSAqIFByb2JhYmx5IDEyIGZvciBtb3N0IGhvc3QgYWRhcHRlcnMsIGJ1dCBjb3VsZCBiZSAxNiBmb3Igb3RoZXJzLgorCSAqIEZvciBkcml2ZXJzIHRoYXQgZG9uJ3Qgc2V0IHRoaXMgZmllbGQsIGEgdmFsdWUgb2YgMTIgaXMKKwkgKiBhc3N1bWVkLiAgSSBhbSBsZWF2aW5nIHRoaXMgYXMgYSBudW1iZXIgcmF0aGVyIHRoYW4gYSBiaXQKKwkgKiBiZWNhdXNlIHlvdSBuZXZlciBrbm93IHdoYXQgc3Vic2VxdWVudCBTQ1NJIHN0YW5kYXJkcyBtaWdodCBkbworCSAqIChpLmUuIGNvdWxkIHRoZXJlIGJlIGEgMjAgYnl0ZSBvciBhIDI0LWJ5dGUgY29tbWFuZCBhIGZldyB5ZWFycworCSAqIGRvd24gdGhlIHJvYWQ/KS4gIAorCSAqLworCXVuc2lnbmVkIGNoYXIgbWF4X2NtZF9sZW47CisKKwlpbnQgdGhpc19pZDsKKwlpbnQgY2FuX3F1ZXVlOworCXNob3J0IGNtZF9wZXJfbHVuOworCXNob3J0IHVuc2lnbmVkIGludCBzZ190YWJsZXNpemU7CisJc2hvcnQgdW5zaWduZWQgaW50IG1heF9zZWN0b3JzOworCXVuc2lnbmVkIGxvbmcgZG1hX2JvdW5kYXJ5OworCS8qIAorCSAqIFVzZWQgdG8gYXNzaWduIHNlcmlhbCBudW1iZXJzIHRvIHRoZSBjbWRzLgorCSAqIFByb3RlY3RlZCBieSB0aGUgaG9zdCBsb2NrLgorCSAqLworCXVuc2lnbmVkIGxvbmcgY21kX3NlcmlhbF9udW1iZXIsIGNtZF9waWQ7IAorCQorCXVuc2lnbmVkIHVuY2hlY2tlZF9pc2FfZG1hOjE7CisJdW5zaWduZWQgdXNlX2NsdXN0ZXJpbmc6MTsKKwl1bnNpZ25lZCB1c2VfYmxrX3RjcToxOworCisJLyoKKwkgKiBIb3N0IGhhcyByZXF1ZXN0ZWQgdGhhdCBubyBmdXJ0aGVyIHJlcXVlc3RzIGNvbWUgdGhyb3VnaCBmb3IgdGhlCisJICogdGltZSBiZWluZy4KKwkgKi8KKwl1bnNpZ25lZCBob3N0X3NlbGZfYmxvY2tlZDoxOworICAgIAorCS8qCisJICogSG9zdCB1c2VzIGNvcnJlY3QgU0NTSSBvcmRlcmluZyBub3QgUEMgb3JkZXJpbmcuIFRoZSBiaXQgaXMKKwkgKiBzZXQgZm9yIHRoZSBtaW5vcml0eSBvZiBkcml2ZXJzIHdob3NlIGF1dGhvcnMgYWN0dWFsbHkgcmVhZAorCSAqIHRoZSBzcGVjIDspCisJICovCisJdW5zaWduZWQgcmV2ZXJzZV9vcmRlcmluZzoxOworCisJLyoKKwkgKiBvcmRlcmVkIHdyaXRlIHN1cHBvcnQKKwkgKi8KKwl1bnNpZ25lZCBvcmRlcmVkX2ZsdXNoOjE7CisJdW5zaWduZWQgb3JkZXJlZF90YWc6MTsKKworCS8qCisJICogT3B0aW9uYWwgd29yayBxdWV1ZSB0byBiZSB1dGlsaXplZCBieSB0aGUgdHJhbnNwb3J0CisJICovCisJY2hhciB3b3JrX3FfbmFtZVtLT0JKX05BTUVfTEVOXTsKKwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd29ya19xOworCisJLyoKKwkgKiBIb3N0IGhhcyByZWplY3RlZCBhIGNvbW1hbmQgYmVjYXVzZSBpdCB3YXMgYnVzeS4KKwkgKi8KKwl1bnNpZ25lZCBpbnQgaG9zdF9ibG9ja2VkOworCisJLyoKKwkgKiBWYWx1ZSBob3N0X2Jsb2NrZWQgY291bnRzIGRvd24gZnJvbQorCSAqLworCXVuc2lnbmVkIGludCBtYXhfaG9zdF9ibG9ja2VkOworCisJLyogbGVnYWN5IGNyYXAgKi8KKwl1bnNpZ25lZCBsb25nIGJhc2U7CisJdW5zaWduZWQgbG9uZyBpb19wb3J0OworCXVuc2lnbmVkIGNoYXIgbl9pb19wb3J0OworCXVuc2lnbmVkIGNoYXIgZG1hX2NoYW5uZWw7CisJdW5zaWduZWQgaW50ICBpcnE7CisJCisKKwl1bnNpZ25lZCBsb25nIHNob3N0X3N0YXRlOworCisJLyogbGRtIGJpdHMgKi8KKwlzdHJ1Y3QgZGV2aWNlCQlzaG9zdF9nZW5kZXY7CisJc3RydWN0IGNsYXNzX2RldmljZQlzaG9zdF9jbGFzc2RldjsKKworCS8qCisJICogTGlzdCBvZiBob3N0cyBwZXIgdGVtcGxhdGUuCisJICoKKwkgKiBUaGlzIGlzIG9ubHkgZm9yIHVzZSBieSBzY3NpX21vZHVsZS5jIGZvciBsZWdhY3kgdGVtcGxhdGVzLgorCSAqIEZvciB0aGVzZSBhY2Nlc3MgdG8gaXQgaXMgc3luY2hyb25pemVkIGltcGxpY2l0bHkgYnkKKwkgKiBtb2R1bGVfaW5pdC9tb2R1bGVfZXhpdC4KKwkgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHNodF9sZWdhY3lfbGlzdDsKKworCS8qCisJICogUG9pbnRzIHRvIHRoZSB0cmFuc3BvcnQgZGF0YSAoaWYgYW55KSB3aGljaCBpcyBhbGxvY2F0ZWQKKwkgKiBzZXBhcmF0ZWx5CisJICovCisJdm9pZCAqc2hvc3RfZGF0YTsKKworCS8qCisJICogV2Ugc2hvdWxkIGVuc3VyZSB0aGF0IHRoaXMgaXMgYWxpZ25lZCwgYm90aCBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlCisJICogYW5kIGFsc28gYmVjYXVzZSBzb21lIGNvbXBpbGVycyAobTY4aykgZG9uJ3QgYXV0b21hdGljYWxseSBmb3JjZQorCSAqIGFsaWdubWVudCB0byBhIGxvbmcgYm91bmRhcnkuCisJICovCisJdW5zaWduZWQgbG9uZyBob3N0ZGF0YVswXSAgLyogVXNlZCBmb3Igc3RvcmFnZSBvZiBob3N0IHNwZWNpZmljIHN0dWZmICovCisJCV9fYXR0cmlidXRlX18gKChhbGlnbmVkIChzaXplb2YodW5zaWduZWQgbG9uZykpKSk7Cit9OworCisjZGVmaW5lCQljbGFzc190b19zaG9zdChkKQlcCisJY29udGFpbmVyX29mKGQsIHN0cnVjdCBTY3NpX0hvc3QsIHNob3N0X2NsYXNzZGV2KQorCitpbnQgc2NzaV9pc19ob3N0X2RldmljZShjb25zdCBzdHJ1Y3QgZGV2aWNlICopOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBTY3NpX0hvc3QgKmRldl90b19zaG9zdChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJd2hpbGUgKCFzY3NpX2lzX2hvc3RfZGV2aWNlKGRldikpIHsKKwkJaWYgKCFkZXYtPnBhcmVudCkKKwkJCXJldHVybiBOVUxMOworCQlkZXYgPSBkZXYtPnBhcmVudDsKKwl9CisJcmV0dXJuIGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBTY3NpX0hvc3QsIHNob3N0X2dlbmRldik7Cit9CisKK2V4dGVybiBpbnQgc2NzaV9xdWV1ZV93b3JrKHN0cnVjdCBTY3NpX0hvc3QgKiwgc3RydWN0IHdvcmtfc3RydWN0ICopOworZXh0ZXJuIHZvaWQgc2NzaV9mbHVzaF93b3JrKHN0cnVjdCBTY3NpX0hvc3QgKik7CisKK2V4dGVybiBzdHJ1Y3QgU2NzaV9Ib3N0ICpzY3NpX2hvc3RfYWxsb2Moc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqLCBpbnQpOworZXh0ZXJuIGludCBfX211c3RfY2hlY2sgc2NzaV9hZGRfaG9zdChzdHJ1Y3QgU2NzaV9Ib3N0ICosIHN0cnVjdCBkZXZpY2UgKik7CitleHRlcm4gdm9pZCBzY3NpX3NjYW5faG9zdChzdHJ1Y3QgU2NzaV9Ib3N0ICopOworZXh0ZXJuIHZvaWQgc2NzaV9zY2FuX3NpbmdsZV90YXJnZXQoc3RydWN0IFNjc2lfSG9zdCAqLCB1bnNpZ25lZCBpbnQsCisJdW5zaWduZWQgaW50KTsKK2V4dGVybiB2b2lkIHNjc2lfcmVzY2FuX2RldmljZShzdHJ1Y3QgZGV2aWNlICopOworZXh0ZXJuIHZvaWQgc2NzaV9yZW1vdmVfaG9zdChzdHJ1Y3QgU2NzaV9Ib3N0ICopOworZXh0ZXJuIHN0cnVjdCBTY3NpX0hvc3QgKnNjc2lfaG9zdF9nZXQoc3RydWN0IFNjc2lfSG9zdCAqKTsKK2V4dGVybiB2b2lkIHNjc2lfaG9zdF9wdXQoc3RydWN0IFNjc2lfSG9zdCAqdCk7CitleHRlcm4gc3RydWN0IFNjc2lfSG9zdCAqc2NzaV9ob3N0X2xvb2t1cCh1bnNpZ25lZCBzaG9ydCk7CisKK2V4dGVybiB1NjQgc2NzaV9jYWxjdWxhdGVfYm91bmNlX2xpbWl0KHN0cnVjdCBTY3NpX0hvc3QgKik7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzY3NpX2Fzc2lnbl9sb2NrKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0LCBzcGlubG9ja190ICpsb2NrKQoreworCXNob3N0LT5ob3N0X2xvY2sgPSBsb2NrOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2NzaV9zZXRfZGV2aWNlKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisgICAgICAgIHNob3N0LT5zaG9zdF9nZW5kZXYucGFyZW50ID0gZGV2OworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkZXZpY2UgKnNjc2lfZ2V0X2RldmljZShzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCkKK3sKKyAgICAgICAgcmV0dXJuIHNob3N0LT5zaG9zdF9nZW5kZXYucGFyZW50OworfQorCitleHRlcm4gdm9pZCBzY3NpX3VuYmxvY2tfcmVxdWVzdHMoc3RydWN0IFNjc2lfSG9zdCAqKTsKK2V4dGVybiB2b2lkIHNjc2lfYmxvY2tfcmVxdWVzdHMoc3RydWN0IFNjc2lfSG9zdCAqKTsKKworc3RydWN0IGNsYXNzX2NvbnRhaW5lcjsKKy8qCisgKiBUaGVzZSB0d28gZnVuY3Rpb25zIGFyZSB1c2VkIHRvIGFsbG9jYXRlIGFuZCBmcmVlIGEgcHNldWRvIGRldmljZQorICogd2hpY2ggd2lsbCBjb25uZWN0IHRvIHRoZSBob3N0IGFkYXB0ZXIgaXRzZWxmIHJhdGhlciB0aGFuIGFueQorICogcGh5c2ljYWwgZGV2aWNlLiAgWW91IG11c3QgZGVhbGxvY2F0ZSB3aGVuIHlvdSBhcmUgZG9uZSB3aXRoIHRoZQorICogdGhpbmcuICBUaGlzIHBoeXNpY2FsIHBzZXVkby1kZXZpY2UgaXNuJ3QgcmVhbCBhbmQgd29uJ3QgYmUgYXZhaWxhYmxlCisgKiBmcm9tIGFueSBoaWdoLWxldmVsIGRyaXZlcnMuCisgKi8KK2V4dGVybiB2b2lkIHNjc2lfZnJlZV9ob3N0X2RldihzdHJ1Y3Qgc2NzaV9kZXZpY2UgKik7CitleHRlcm4gc3RydWN0IHNjc2lfZGV2aWNlICpzY3NpX2dldF9ob3N0X2RldihzdHJ1Y3QgU2NzaV9Ib3N0ICopOworCisvKiBsZWdhY3kgaW50ZXJmYWNlcyAqLworZXh0ZXJuIHN0cnVjdCBTY3NpX0hvc3QgKnNjc2lfcmVnaXN0ZXIoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqLCBpbnQpOworZXh0ZXJuIHZvaWQgc2NzaV91bnJlZ2lzdGVyKHN0cnVjdCBTY3NpX0hvc3QgKik7CisKKyNlbmRpZiAvKiBfU0NTSV9TQ1NJX0hPU1RfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3Njc2lfaW9jdGwuaCBiL2luY2x1ZGUvc2NzaS9zY3NpX2lvY3RsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRiZTRkOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvc2NzaS9zY3NpX2lvY3RsLmgKQEAgLTAsMCArMSw1MCBAQAorI2lmbmRlZiBfU0NTSV9JT0NUTF9ICisjZGVmaW5lIF9TQ1NJX0lPQ1RMX0ggCisKKyNkZWZpbmUgU0NTSV9JT0NUTF9TRU5EX0NPTU1BTkQgMQorI2RlZmluZSBTQ1NJX0lPQ1RMX1RFU1RfVU5JVF9SRUFEWSAyCisjZGVmaW5lIFNDU0lfSU9DVExfQkVOQ0hNQVJLX0NPTU1BTkQgMworI2RlZmluZSBTQ1NJX0lPQ1RMX1NZTkMgNAkJCS8qIFJlcXVlc3Qgc3luY2hyb25vdXMgcGFyYW1ldGVycyAqLworI2RlZmluZSBTQ1NJX0lPQ1RMX1NUQVJUX1VOSVQgNQorI2RlZmluZSBTQ1NJX0lPQ1RMX1NUT1BfVU5JVCA2CisvKiBUaGUgZG9vciBsb2NrL3VubG9jayBjb25zdGFudHMgYXJlIGNvbXBhdGlibGUgd2l0aCBTdW4gY29uc3RhbnRzIGZvcgorICAgdGhlIGNkcm9tICovCisjZGVmaW5lIFNDU0lfSU9DVExfRE9PUkxPQ0sgMHg1MzgwCQkvKiBsb2NrIHRoZSBlamVjdCBtZWNoYW5pc20gKi8KKyNkZWZpbmUgU0NTSV9JT0NUTF9ET09SVU5MT0NLIDB4NTM4MQkJLyogdW5sb2NrIHRoZSBtZWNoYW5pc20JICAqLworCisjZGVmaW5lCVNDU0lfUkVNT1ZBTF9QUkVWRU5UCTEKKyNkZWZpbmUJU0NTSV9SRU1PVkFMX0FMTE9XCTAKKworI2lmZGVmIF9fS0VSTkVMX18KKworc3RydWN0IHNjc2lfZGV2aWNlOworCisvKgorICogU3RydWN0dXJlcyB1c2VkIGZvciBzY3NpX2lvY3RsIGV0IGFsLgorICovCisKK3R5cGVkZWYgc3RydWN0IHNjc2lfaW9jdGxfY29tbWFuZCB7CisJdW5zaWduZWQgaW50IGlubGVuOworCXVuc2lnbmVkIGludCBvdXRsZW47CisJdW5zaWduZWQgY2hhciBkYXRhWzBdOworfSBTY3NpX0lvY3RsX0NvbW1hbmQ7CisKK3R5cGVkZWYgc3RydWN0IHNjc2lfaWRsdW4geworCV9fdTMyIGRldl9pZDsKKwlfX3UzMiBob3N0X3VuaXF1ZV9pZDsKK30gU2NzaV9JZGx1bjsKKworLyogRmlicmUgQ2hhbm5lbCBXV04sIHBvcnRfaWQgc3RydWN0ICovCit0eXBlZGVmIHN0cnVjdCBzY3NpX2ZjdGFyZ2FkZHJlc3MgeworCV9fdTMyIGhvc3RfcG9ydF9pZDsKKwl1bnNpZ25lZCBjaGFyIGhvc3Rfd3duWzhdOyAvLyBpbmNsdWRlIE5VTEwgdGVybS4KK30gU2NzaV9GQ1RhcmdBZGRyZXNzOworCitleHRlcm4gaW50IHNjc2lfaW9jdGwoc3RydWN0IHNjc2lfZGV2aWNlICosIGludCwgdm9pZCBfX3VzZXIgKik7CitleHRlcm4gaW50IHNjc2lfaW9jdGxfc2VuZF9jb21tYW5kKHN0cnVjdCBzY3NpX2RldmljZSAqLAorCQkJCSAgIHN0cnVjdCBzY3NpX2lvY3RsX2NvbW1hbmQgX191c2VyICopOworZXh0ZXJuIGludCBzY3NpX25vbmJsb2NrYWJsZV9pb2N0bChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBjbWQsCisJCQkJICAgdm9pZCBfX3VzZXIgKmFyZywgc3RydWN0IGZpbGUgKmZpbHApOworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9TQ1NJX0lPQ1RMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpX3JlcXVlc3QuaCBiL2luY2x1ZGUvc2NzaS9zY3NpX3JlcXVlc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODcxOTQwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9zY3NpL3Njc2lfcmVxdWVzdC5oCkBAIC0wLDAgKzEsNzMgQEAKKyNpZm5kZWYgX1NDU0lfU0NTSV9SRVFVRVNUX0gKKyNkZWZpbmUgX1NDU0lfU0NTSV9SRVFVRVNUX0gKKworI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CisKK3N0cnVjdCByZXF1ZXN0Oworc3RydWN0IHNjc2lfY21uZDsKK3N0cnVjdCBzY3NpX2RldmljZTsKK3N0cnVjdCBTY3NpX0hvc3Q7CisKKworLyoKKyAqIFRoaXMgaXMgZXNzZW50aWFsbHkgYSBzbGltbWVkIGRvd24gdmVyc2lvbiBvZiBTY3NpX0NtbmQuICBUaGUgcG9pbnQgb2YKKyAqIGhhdmluZyB0aGlzIGlzIHRoYXQgcmVxdWVzdHMgdGhhdCBhcmUgaW5qZWN0ZWQgaW50byB0aGUgcXVldWUgYXMgcmVzdWx0CisgKiBvZiB0aGluZ3MgbGlrZSBpb2N0bHMgYW5kIGNoYXJhY3RlciBkZXZpY2VzIHNob3VsZG4ndCBiZSB1c2luZyBhCisgKiBTY3NpX0NtbmQgdW50aWwgc3VjaCBhIHRpbWUgdGhhdCB0aGUgY29tbWFuZCBpcyBhY3R1YWxseSBhdCB0aGUgaGVhZAorICogb2YgdGhlIHF1ZXVlIGFuZCBiZWluZyBzZW50IHRvIHRoZSBkcml2ZXIuCisgKi8KK3N0cnVjdCBzY3NpX3JlcXVlc3QgeworCWludCAgICAgc3JfbWFnaWM7CisJaW50ICAgICBzcl9yZXN1bHQ7CS8qIFN0YXR1cyBjb2RlIGZyb20gbG93ZXIgbGV2ZWwgZHJpdmVyICovCisJdW5zaWduZWQgY2hhciBzcl9zZW5zZV9idWZmZXJbU0NTSV9TRU5TRV9CVUZGRVJTSVpFXTsJCS8qIG9idGFpbmVkIGJ5IFJFUVVFU1QgU0VOU0UKKwkJCQkJCSAqIHdoZW4gQ0hFQ0sgQ09ORElUSU9OIGlzCisJCQkJCQkgKiByZWNlaXZlZCBvbiBvcmlnaW5hbCBjb21tYW5kIAorCQkJCQkJICogKGF1dG8tc2Vuc2UpICovCisKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzcl9ob3N0OworCXN0cnVjdCBzY3NpX2RldmljZSAqc3JfZGV2aWNlOworCXN0cnVjdCBzY3NpX2NtbmQgKnNyX2NvbW1hbmQ7CisJc3RydWN0IHJlcXVlc3QgKnNyX3JlcXVlc3Q7CS8qIEEgY29weSBvZiB0aGUgY29tbWFuZCB3ZSBhcmUKKwkJCQkgICB3b3JraW5nIG9uICovCisJdW5zaWduZWQgc3JfYnVmZmxlbjsJLyogU2l6ZSBvZiBkYXRhIGJ1ZmZlciAqLworCXZvaWQgKnNyX2J1ZmZlcjsJCS8qIERhdGEgYnVmZmVyICovCisJaW50IHNyX2FsbG93ZWQ7CisJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gc3JfZGF0YV9kaXJlY3Rpb247CisJdW5zaWduZWQgY2hhciBzcl9jbWRfbGVuOworCXVuc2lnbmVkIGNoYXIgc3JfY21uZFtNQVhfQ09NTUFORF9TSVpFXTsKKwl2b2lkICgqc3JfZG9uZSkgKHN0cnVjdCBzY3NpX2NtbmQgKik7CS8qIE1pZC1sZXZlbCBkb25lIGZ1bmN0aW9uICovCisJaW50IHNyX3RpbWVvdXRfcGVyX2NvbW1hbmQ7CisJdW5zaWduZWQgc2hvcnQgc3JfdXNlX3NnOwkvKiBOdW1iZXIgb2YgcGllY2VzIG9mIHNjYXR0ZXItZ2F0aGVyICovCisJdW5zaWduZWQgc2hvcnQgc3Jfc2dsaXN0X2xlbjsJLyogc2l6ZSBvZiBtYWxsb2MnZCBzY2F0dGVyLWdhdGhlciBsaXN0ICovCisJdW5zaWduZWQgc3JfdW5kZXJmbG93OwkvKiBSZXR1cm4gZXJyb3IgaWYgbGVzcyB0aGFuCisJCQkJICAgdGhpcyBhbW91bnQgaXMgdHJhbnNmZXJyZWQgKi8KKyAJdm9pZCAqdXBwZXJfcHJpdmF0ZV9kYXRhOwkvKiByZXNlcnZlZCBmb3Igb3duZXIgKHVzdWFsbHkgdXBwZXIKKyAJCQkJCSAgIGxldmVsIGRyaXZlcikgb2YgdGhpcyByZXF1ZXN0ICovCit9OworCitleHRlcm4gc3RydWN0IHNjc2lfcmVxdWVzdCAqc2NzaV9hbGxvY2F0ZV9yZXF1ZXN0KHN0cnVjdCBzY3NpX2RldmljZSAqLCBpbnQpOworZXh0ZXJuIHZvaWQgc2NzaV9yZWxlYXNlX3JlcXVlc3Qoc3RydWN0IHNjc2lfcmVxdWVzdCAqKTsKK2V4dGVybiB2b2lkIHNjc2lfd2FpdF9yZXEoc3RydWN0IHNjc2lfcmVxdWVzdCAqLCBjb25zdCB2b2lkICpjbW5kLAorCQkJICB2b2lkICpidWZmZXIsIHVuc2lnbmVkIGJ1ZmZsZW4sCisJCQkgIGludCB0aW1lb3V0LCBpbnQgcmV0cmllcyk7CitleHRlcm4gdm9pZCBzY3NpX2RvX3JlcShzdHJ1Y3Qgc2NzaV9yZXF1ZXN0ICosIGNvbnN0IHZvaWQgKmNtbmQsCisJCQl2b2lkICpidWZmZXIsIHVuc2lnbmVkIGJ1ZmZsZW4sCisJCQl2b2lkICgqZG9uZSkgKHN0cnVjdCBzY3NpX2NtbmQgKiksCisJCQlpbnQgdGltZW91dCwgaW50IHJldHJpZXMpOworCitzdHJ1Y3Qgc2NzaV9tb2RlX2RhdGEgeworCV9fdTMyCWxlbmd0aDsKKwlfX3UxNglibG9ja19kZXNjcmlwdG9yX2xlbmd0aDsKKwlfX3U4CW1lZGl1bV90eXBlOworCV9fdTgJZGV2aWNlX3NwZWNpZmljOworCV9fdTgJaGVhZGVyX2xlbmd0aDsKKwlfX3U4CWxvbmdsYmE6MTsKK307CisKK2V4dGVybiBpbnQgX19zY3NpX21vZGVfc2Vuc2Uoc3RydWN0IHNjc2lfcmVxdWVzdCAqU1JwbnQsIGludCBkYmQsCisJCQkgICAgIGludCBtb2RlcGFnZSwgdW5zaWduZWQgY2hhciAqYnVmZmVyLCBpbnQgbGVuLAorCQkJICAgICBpbnQgdGltZW91dCwgaW50IHJldHJpZXMsCisJCQkgICAgIHN0cnVjdCBzY3NpX21vZGVfZGF0YSAqZGF0YSk7CisKKworI2VuZGlmIC8qIF9TQ1NJX1NDU0lfUkVRVUVTVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2NzaV90Y3EuaCBiL2luY2x1ZGUvc2NzaS9zY3NpX3RjcS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0N2UzNmEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaV90Y3EuaApAQCAtMCwwICsxLDEzNCBAQAorI2lmbmRlZiBfU0NTSV9TQ1NJX1RDUV9ICisjZGVmaW5lIF9TQ1NJX1NDU0lfVENRX0gKKworI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2RldmljZS5oPgorCisKKyNkZWZpbmUgTVNHX1NJTVBMRV9UQUcJMHgyMAorI2RlZmluZSBNU0dfSEVBRF9UQUcJMHgyMQorI2RlZmluZSBNU0dfT1JERVJFRF9UQUcJMHgyMgorCisjZGVmaW5lIFNDU0lfTk9fVEFHCSgtMSkgICAgLyogaWRlbnRpZnkgbm8gdGFnIGluIHVzZSAqLworCisKKworLyoqCisgKiBzY3NpX2dldF90YWdfdHlwZSAtIGdldCB0aGUgdHlwZSBvZiB0YWcgdGhlIGRldmljZSBzdXBwb3J0cworICogQHNkZXY6CXRoZSBzY3NpIGRldmljZQorICoKKyAqIE5vdGVzOgorICoJSWYgdGhlIGRyaXZlIG9ubHkgc3VwcG9ydHMgc2ltcGxlIHRhZ3MsIHJldHVybnMgTVNHX1NJTVBMRV9UQUcKKyAqCWlmIGl0IHN1cHBvcnRzIGFsbCB0YWcgdHlwZXMsIHJldHVybnMgTVNHX09SREVSRURfVEFHLgorICovCitzdGF0aWMgaW5saW5lIGludCBzY3NpX2dldF90YWdfdHlwZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCit7CisJaWYgKCFzZGV2LT50YWdnZWRfc3VwcG9ydGVkKQorCQlyZXR1cm4gMDsKKwlpZiAoc2Rldi0+b3JkZXJlZF90YWdzKQorCQlyZXR1cm4gTVNHX09SREVSRURfVEFHOworCWlmIChzZGV2LT5zaW1wbGVfdGFncykKKwkJcmV0dXJuIE1TR19TSU1QTEVfVEFHOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2NzaV9zZXRfdGFnX3R5cGUoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgdGFnKQoreworCXN3aXRjaCAodGFnKSB7CisJY2FzZSBNU0dfT1JERVJFRF9UQUc6CisJCXNkZXYtPm9yZGVyZWRfdGFncyA9IDE7CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgTVNHX1NJTVBMRV9UQUc6CisJCXNkZXYtPnNpbXBsZV90YWdzID0gMTsKKwkJYnJlYWs7CisJY2FzZSAwOgorCQkvKiBmYWxsIHRocm91Z2ggKi8KKwlkZWZhdWx0OgorCQlzZGV2LT5vcmRlcmVkX3RhZ3MgPSAwOworCQlzZGV2LT5zaW1wbGVfdGFncyA9IDA7CisJCWJyZWFrOworCX0KK30KKy8qKgorICogc2NzaV9hY3RpdmF0ZV90Y3EgLSB0dXJuIG9uIHRhZyBjb21tYW5kIHF1ZXVlaW5nCisgKiBAU0RwbnQ6CWRldmljZSB0byB0dXJuIG9uIFRDUSBmb3IKKyAqIEBkZXB0aDoJcXVldWUgZGVwdGgKKyAqCisgKiBOb3RlczoKKyAqCUV2ZW50dWFsbHksIEkgaG9wZSBkZXB0aCB3b3VsZCBiZSB0aGUgbWF4aW11bSBkZXB0aAorICoJdGhlIGRldmljZSBjb3VsZCBjb3BlIHdpdGggYW5kIHRoZSByZWFsIHF1ZXVlIGRlcHRoCisgKgl3b3VsZCBiZSBhZGp1c3RhYmxlIGZyb20gMCB0byBkZXB0aC4KKyAqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzY3NpX2FjdGl2YXRlX3RjcShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBkZXB0aCkKK3sKKwlpZiAoIXNkZXYtPnRhZ2dlZF9zdXBwb3J0ZWQpCisJCXJldHVybjsKKworCWlmICghYmxrX3F1ZXVlX3RhZ2dlZChzZGV2LT5yZXF1ZXN0X3F1ZXVlKSkKKwkJYmxrX3F1ZXVlX2luaXRfdGFncyhzZGV2LT5yZXF1ZXN0X3F1ZXVlLCBkZXB0aCwgTlVMTCk7CisKKwlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzZGV2LCBzY3NpX2dldF90YWdfdHlwZShzZGV2KSwgZGVwdGgpOworfQorCisvKioKKyAqIHNjc2lfZGVhY3RpdmF0ZV90Y3EgLSB0dXJuIG9mZiB0YWcgY29tbWFuZCBxdWV1ZWluZworICogQFNEcG50OglkZXZpY2UgdG8gdHVybiBvZmYgVENRIGZvcgorICoqLworc3RhdGljIGlubGluZSB2b2lkIHNjc2lfZGVhY3RpdmF0ZV90Y3Eoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgZGVwdGgpCit7CisJaWYgKGJsa19xdWV1ZV90YWdnZWQoc2Rldi0+cmVxdWVzdF9xdWV1ZSkpCisJCWJsa19xdWV1ZV9mcmVlX3RhZ3Moc2Rldi0+cmVxdWVzdF9xdWV1ZSk7CisJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2RldiwgMCwgZGVwdGgpOworfQorCisvKioKKyAqIHNjc2lfcG9wdWxhdGVfdGFnX21zZyAtIHBsYWNlIGEgdGFnIG1lc3NhZ2UgaW4gYSBidWZmZXIKKyAqIEBTQ3BudDoJcG9pbnRlciB0byB0aGUgU2NzaV9DbW5kIGZvciB0aGUgdGFnCisgKiBAbXNnOglwb2ludGVyIHRvIHRoZSBhcmVhIHRvIHBsYWNlIHRoZSB0YWcKKyAqCisgKiBOb3RlczoKKyAqCWRlc2lnbmVkIHRvIGNyZWF0ZSB0aGUgY29ycmVjdCB0eXBlIG9mIHRhZyBtZXNzYWdlIGZvciB0aGUgCisgKglwYXJ0aWN1bGFyIHJlcXVlc3QuICBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSB0YWcgbWVzc2FnZS4KKyAqCU1heSByZXR1cm4gMCBpZiBUQ1EgaXMgZGlzYWJsZWQgZm9yIHRoaXMgZGV2aWNlLgorICoqLworc3RhdGljIGlubGluZSBpbnQgc2NzaV9wb3B1bGF0ZV90YWdfbXNnKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwgY2hhciAqbXNnKQoreworICAgICAgICBzdHJ1Y3QgcmVxdWVzdCAqcmVxID0gY21kLT5yZXF1ZXN0OworCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldiA9IGNtZC0+ZGV2aWNlOworCisgICAgICAgIGlmIChibGtfcnFfdGFnZ2VkKHJlcSkpIHsKKwkJaWYgKHNkZXYtPm9yZGVyZWRfdGFncyAmJiByZXEtPmZsYWdzICYgUkVRX0hBUkRCQVJSSUVSKQorICAgICAgICAJICAgICAgICAqbXNnKysgPSBNU0dfT1JERVJFRF9UQUc7CisgICAgICAgIAllbHNlCisgICAgICAgIAkgICAgICAgICptc2crKyA9IE1TR19TSU1QTEVfVEFHOworICAgICAgICAJKm1zZysrID0gcmVxLT50YWc7CisgICAgICAgIAlyZXR1cm4gMjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBzY3NpX2ZpbmRfdGFnIC0gZmluZCBhIHRhZ2dlZCBjb21tYW5kIGJ5IGRldmljZQorICogQFNEcG50Oglwb2ludGVyIHRvIHRoZSBTY1NJIGRldmljZQorICogQHRhZzoJdGhlIHRhZyBudW1iZXIKKyAqCisgKiBOb3RlczoKKyAqCU9ubHkgd29ya3Mgd2l0aCB0YWdzIGFsbG9jYXRlZCBieSB0aGUgZ2VuZXJpYyBibGsgbGF5ZXIuCisgKiovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzY3NpX2NtbmQgKnNjc2lfZmluZF90YWcoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgdGFnKQoreworCisgICAgICAgIHN0cnVjdCByZXF1ZXN0ICpyZXE7CisKKyAgICAgICAgaWYgKHRhZyAhPSBTQ1NJX05PX1RBRykgeworICAgICAgICAJcmVxID0gYmxrX3F1ZXVlX2ZpbmRfdGFnKHNkZXYtPnJlcXVlc3RfcXVldWUsIHRhZyk7CisJICAgICAgICByZXR1cm4gcmVxID8gKHN0cnVjdCBzY3NpX2NtbmQgKilyZXEtPnNwZWNpYWwgOiBOVUxMOworCX0KKworCS8qIHNpbmdsZSBjb21tYW5kLCBsb29rIGluIHNwYWNlICovCisJcmV0dXJuIHNkZXYtPmN1cnJlbnRfY21uZDsKK30KKworI2VuZGlmIC8qIF9TQ1NJX1NDU0lfVENRX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydC5oIGIvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRjZWU3YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydC5oCkBAIC0wLDAgKzEsNDggQEAKKy8qIAorICogIFRyYW5zcG9ydCBzcGVjaWZpYyBhdHRyaWJ1dGVzLgorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDMgU2lsaWNvbiBHcmFwaGljcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworI2lmbmRlZiBTQ1NJX1RSQU5TUE9SVF9ICisjZGVmaW5lIFNDU0lfVFJBTlNQT1JUX0gKKworI2luY2x1ZGUgPGxpbnV4L3RyYW5zcG9ydF9jbGFzcy5oPgorCitzdHJ1Y3Qgc2NzaV90cmFuc3BvcnRfdGVtcGxhdGUgeworCS8qIHRoZSBhdHRyaWJ1dGUgY29udGFpbmVycyAqLworCXN0cnVjdCB0cmFuc3BvcnRfY29udGFpbmVyIGhvc3RfYXR0cnM7CisJc3RydWN0IHRyYW5zcG9ydF9jb250YWluZXIgdGFyZ2V0X2F0dHJzOworCXN0cnVjdCB0cmFuc3BvcnRfY29udGFpbmVyIGRldmljZV9hdHRyczsKKworCS8qIFRoZSBzaXplIG9mIHRoZSBzcGVjaWZpYyB0cmFuc3BvcnQgYXR0cmlidXRlIHN0cnVjdHVyZSAoYQorCSAqIHNwYWNlIG9mIHRoaXMgc2l6ZSB3aWxsIGJlIGxlZnQgYXQgdGhlIGVuZCBvZiB0aGUKKwkgKiBzY3NpXyogc3RydWN0dXJlICovCisJaW50CWRldmljZV9zaXplOworCWludAl0YXJnZXRfc2l6ZTsKKwlpbnQJaG9zdF9zaXplOworCisJLyoKKwkgKiBUcnVlIGlmIHRoZSB0cmFuc3BvcnQgd2FudHMgdG8gdXNlIGEgaG9zdC1iYXNlZCB3b3JrLXF1ZXVlCisJICovCisJdW5zaWduZWQgaW50IGNyZWF0ZV93b3JrX3F1ZXVlIDogMTsKK307CisKKyNkZWZpbmUgdHJhbnNwb3J0X2NsYXNzX3RvX3Nob3N0KHRjKSBcCisJZGV2X3RvX3Nob3N0KCh0YyktPmRldikKKworCisjZW5kaWYgLyogU0NTSV9UUkFOU1BPUlRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmggYi9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGFkMTYzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmgKQEAgLTAsMCArMSw0NDIgQEAKKy8qIAorICogIEZpYmVyQ2hhbm5lbCB0cmFuc3BvcnQgc3BlY2lmaWMgYXR0cmlidXRlcyBleHBvcnRlZCB0byBzeXNmcy4KKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDAzIFNpbGljb24gR3JhcGhpY3MsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICogID09PT09PT09CisgKgorICogIENvcHlyaWdodCAoQykgMjAwNC0yMDA1ICAgSmFtZXMgU21hcnQsIEVtdWxleCBDb3Jwb3JhdGlvbgorICogICAgUmV3cml0ZSBmb3IgaG9zdCwgdGFyZ2V0LCBkZXZpY2UsIGFuZCByZW1vdGUgcG9ydCBhdHRyaWJ1dGVzLAorICogICAgc3RhdGlzdGljcywgYW5kIHNlcnZpY2UgZnVuY3Rpb25zLi4uCisgKgorICovCisjaWZuZGVmIFNDU0lfVFJBTlNQT1JUX0ZDX0gKKyNkZWZpbmUgU0NTSV9UUkFOU1BPUlRfRkNfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKK3N0cnVjdCBzY3NpX3RyYW5zcG9ydF90ZW1wbGF0ZTsKKworCisvKgorICogRkMgUG9ydCBkZWZpbml0aW9ucyAtIEZvbGxvd2luZyBGQyBIQkFBUEkgZ3VpZGVsaW5lcworICoKKyAqIE5vdGU6IE5vdCBhbGwgYmluYXJ5IHZhbHVlcyBmb3IgdGhlIGRpZmZlcmVudCBmaWVsZHMgbWF0Y2ggSEJBQVBJLgorICogIEluc3RlYWQsIHdlIHVzZSBkZW5zZWx5IHBhY2tlZCBvcmRpbmFsIHZhbHVlcyBvciBlbnVtcy4KKyAqICBXZSBnZXQgYXdheSB3aXRoIHRoaXMgYXMgd2UgbmV2ZXIgcHJlc2VudCB0aGUgYWN0dWFsIGJpbmFyeSB2YWx1ZXMKKyAqICBleHRlcm5hbGx5LiBGb3Igc3lzZnMsIHdlIGFsd2F5cyBwcmVzZW50IHRoZSBzdHJpbmcgdGhhdCBkZXNjcmliZXMKKyAqICB0aGUgdmFsdWUuIFRodXMsIGFuIGFkbWluIGRvZXNuJ3QgbmVlZCBhIG1hZ2ljIEhCQUFQSSBkZWNvZGVyIHJpbmcKKyAqICB0byB1bmRlcnN0YW5kIHRoZSB2YWx1ZXMuIFRoZSBIQkFBUEkgdXNlci1zcGFjZSBsaWJyYXJ5IGlzIGZyZWUgdG8KKyAqICBjb252ZXJ0IHRoZSBzdHJpbmdzIGludG8gdGhlIEhCQUFQSS1zcGVjaWZpZWQgYmluYXJ5IHZhbHVlcy4KKyAqCisgKiBOb3RlOiBOb3QgYWxsIEhCQUFQSS1kZWZpbmVkIHZhbHVlcyBhcmUgY29udGFpbmVkIGluIHRoZSBkZWZpbml0aW9ucworICogIGJlbG93LiBUaG9zZSBub3QgYXBwcm9wcmlhdGUgdG8gYW4gZmNfaG9zdCAoZS5nLiBGQ1AgaW5pdGlhdG9yKSBoYXZlCisgKiAgYmVlbiByZW1vdmVkLgorICovCisKKy8qCisgKiBmY19wb3J0X3R5cGU6IElmIHlvdSBhbHRlciB0aGlzLCB5b3UgYWxzbyBuZWVkIHRvIGFsdGVyIHNjc2lfdHJhbnNwb3J0X2ZjLmMKKyAqIChmb3IgdGhlIGFzY2lpIGRlc2NyaXB0aW9ucykuCisgKi8KK2VudW0gZmNfcG9ydF90eXBlIHsKKwlGQ19QT1JUVFlQRV9VTktOT1dOLAorCUZDX1BPUlRUWVBFX09USEVSLAorCUZDX1BPUlRUWVBFX05PVFBSRVNFTlQsCisJRkNfUE9SVFRZUEVfTlBPUlQsCQkvKiBBdHRhY2hlZCB0byBGUG9ydCAqLworCUZDX1BPUlRUWVBFX05MUE9SVCwJCS8qIChQdWJsaWMpIExvb3Agdy8gRkxQb3J0ICovCisJRkNfUE9SVFRZUEVfTFBPUlQsCQkvKiAoUHJpdmF0ZSkgTG9vcCB3L28gRkxQb3J0ICovCisJRkNfUE9SVFRZUEVfUFRQLAkJLyogUG9pbnQgdG8gUG9pbnQgdy8gYW5vdGhlciBOUG9ydCAqLworfTsKKworLyoKKyAqIGZjX3BvcnRfc3RhdGU6IElmIHlvdSBhbHRlciB0aGlzLCB5b3UgYWxzbyBuZWVkIHRvIGFsdGVyIHNjc2lfdHJhbnNwb3J0X2ZjLmMKKyAqIChmb3IgdGhlIGFzY2lpIGRlc2NyaXB0aW9ucykuCisgKi8KK2VudW0gZmNfcG9ydF9zdGF0ZSB7CisJRkNfUE9SVFNUQVRFX1VOS05PV04sCisJRkNfUE9SVFNUQVRFX05PVFBSRVNFTlQsCisJRkNfUE9SVFNUQVRFX09OTElORSwKKwlGQ19QT1JUU1RBVEVfT0ZGTElORSwJCS8qIFVzZXIgaGFzIHRha2VuIFBvcnQgT2ZmbGluZSAqLworCUZDX1BPUlRTVEFURV9CTE9DS0VELAorCUZDX1BPUlRTVEFURV9CWVBBU1NFRCwKKwlGQ19QT1JUU1RBVEVfRElBR05PU1RJQ1MsCisJRkNfUE9SVFNUQVRFX0xJTktET1dOLAorCUZDX1BPUlRTVEFURV9FUlJPUiwKKwlGQ19QT1JUU1RBVEVfTE9PUEJBQ0ssCit9OworCisKKy8qIAorICogRkMgQ2xhc3NlcyBvZiBTZXJ2aWNlCisgKiBOb3RlOiB2YWx1ZXMgYXJlIG5vdCBlbnVtZXJhdGVkLCBhcyB0aGV5IGNhbiBiZSAib3InZCIgdG9nZXRoZXIKKyAqIGZvciByZXBvcnRpbmcgKGUuZy4gcmVwb3J0IHN1cHBvcnRlZF9jbGFzc2VzKS4gSWYgeW91IGFsdGVyIHRoaXMgbGlzdCwKKyAqIHlvdSBhbHNvIG5lZWQgdG8gYWx0ZXIgc2NzaV90cmFuc3BvcnRfZmMuYyAoZm9yIHRoZSBhc2NpaSBkZXNjcmlwdGlvbnMpLgorICovCisjZGVmaW5lIEZDX0NPU19VTlNQRUNJRklFRAkJMAorI2RlZmluZSBGQ19DT1NfQ0xBU1MxCQkJMgorI2RlZmluZSBGQ19DT1NfQ0xBU1MyCQkJNAorI2RlZmluZSBGQ19DT1NfQ0xBU1MzCQkJOAorI2RlZmluZSBGQ19DT1NfQ0xBU1M0CQkJMHgxMAorI2RlZmluZSBGQ19DT1NfQ0xBU1M2CQkJMHg0MAorCisvKiAKKyAqIEZDIFBvcnQgU3BlZWRzCisgKiBOb3RlOiB2YWx1ZXMgYXJlIG5vdCBlbnVtZXJhdGVkLCBhcyB0aGV5IGNhbiBiZSAib3InZCIgdG9nZXRoZXIKKyAqIGZvciByZXBvcnRpbmcgKGUuZy4gcmVwb3J0IHN1cHBvcnRlZF9zcGVlZHMpLiBJZiB5b3UgYWx0ZXIgdGhpcyBsaXN0LAorICogeW91IGFsc28gbmVlZCB0byBhbHRlciBzY3NpX3RyYW5zcG9ydF9mYy5jIChmb3IgdGhlIGFzY2lpIGRlc2NyaXB0aW9ucykuCisgKi8KKyNkZWZpbmUgRkNfUE9SVFNQRUVEX1VOS05PV04JCTAgLyogVW5rbm93biAtIHRyYW5zY2VpdmVyCisJCQkJCSAgICAgaW5jYXBhYmxlIG9mIHJlcG9ydGluZyAqLworI2RlZmluZSBGQ19QT1JUU1BFRURfMUdCSVQJCTEKKyNkZWZpbmUgRkNfUE9SVFNQRUVEXzJHQklUCQkyCisjZGVmaW5lIEZDX1BPUlRTUEVFRF8xMEdCSVQJCTQKKyNkZWZpbmUgRkNfUE9SVFNQRUVEXzRHQklUCQk4CisjZGVmaW5lIEZDX1BPUlRTUEVFRF9OT1RfTkVHT1RJQVRFRAkoMSA8PCAxNSkgLyogU3BlZWQgbm90IGVzdGFibGlzaGVkICovCisKKy8qCisgKiBmY190Z3RpZF9iaW5kaW5nX3R5cGU6IElmIHlvdSBhbHRlciB0aGlzLCB5b3UgYWxzbyBuZWVkIHRvIGFsdGVyCisgKiBzY3NpX3RyYW5zcG9ydF9mYy5jIChmb3IgdGhlIGFzY2lpIGRlc2NyaXB0aW9ucykuCisgKi8KK2VudW0gZmNfdGd0aWRfYmluZGluZ190eXBlICB7CisJRkNfVEdUSURfQklORF9OT05FLAorCUZDX1RHVElEX0JJTkRfQllfV1dQTiwKKwlGQ19UR1RJRF9CSU5EX0JZX1dXTk4sCisJRkNfVEdUSURfQklORF9CWV9JRCwKK307CisKKy8qCisgKiBGQyBSZW1vdGUgUG9ydCBSb2xlcworICogTm90ZTogdmFsdWVzIGFyZSBub3QgZW51bWVyYXRlZCwgYXMgdGhleSBjYW4gYmUgIm9yJ2QiIHRvZ2V0aGVyCisgKiBmb3IgcmVwb3J0aW5nIChlLmcuIHJlcG9ydCByb2xlcykuIElmIHlvdSBhbHRlciB0aGlzIGxpc3QsCisgKiB5b3UgYWxzbyBuZWVkIHRvIGFsdGVyIHNjc2lfdHJhbnNwb3J0X2ZjLmMgKGZvciB0aGUgYXNjaWkgZGVzY3JpcHRpb25zKS4KKyAqLworI2RlZmluZSBGQ19SUE9SVF9ST0xFX1VOS05PV04JCQkweDAwCisjZGVmaW5lIEZDX1JQT1JUX1JPTEVfRkNQX1RBUkdFVAkJMHgwMQorI2RlZmluZSBGQ19SUE9SVF9ST0xFX0ZDUF9JTklUSUFUT1IJCTB4MDIKKyNkZWZpbmUgRkNfUlBPUlRfUk9MRV9JUF9QT1JUCQkJMHgwNAorCisKKy8qCisgKiBmY19ycG9ydF9pZGVudGlmaWVyczogVGhpcyBzZXQgb2YgZGF0YSBjb250YWlucyBhbGwgZWxlbWVudHMKKyAqIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IGEgcmVtb3RlIEZDIHBvcnQuIFRoZSBkcml2ZXIgdXNlcyB0aGlzIGRhdGEKKyAqIHRvIHJlcG9ydCB0aGUgZXhpc3RlbmNlIG9mIGEgcmVtb3RlIEZDIHBvcnQgaW4gdGhlIHRvcG9sb2d5LiBJbnRlcm5hbGx5LAorICogdGhlIHRyYW5zcG9ydCB1c2VzIHRoaXMgZGF0YSBmb3IgYXR0cmlidXRlcyBhbmQgdG8gbWFuYWdlIGNvbnNpc3RlbnQKKyAqIHRhcmdldCBpZCBiaW5kaW5ncy4KKyAqLworc3RydWN0IGZjX3Jwb3J0X2lkZW50aWZpZXJzIHsKKwl1NjQgbm9kZV9uYW1lOworCXU2NCBwb3J0X25hbWU7CisJdTMyIHBvcnRfaWQ7CisJdTMyIHJvbGVzOworfTsKKworLyogTWFjcm8gZm9yIHVzZSBpbiBkZWZpbmluZyBSZW1vdGUgUG9ydCBhdHRyaWJ1dGVzICovCisjZGVmaW5lIEZDX1JQT1JUX0FUVFIoX25hbWUsX21vZGUsX3Nob3csX3N0b3JlKQkJCQlcCitzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSBjbGFzc19kZXZpY2VfYXR0cl9ycG9ydF8jI19uYW1lID0gCVwKKwlfX0FUVFIoX25hbWUsX21vZGUsX3Nob3csX3N0b3JlKQorCisKKy8qCisgKiBGQyBSZW1vdGUgUG9ydCBBdHRyaWJ1dGVzCisgKgorICogVGhpcyBzdHJ1Y3R1cmUgZXhpc3RzIGZvciBlYWNoIHJlbW90ZSBGQyBwb3J0IHRoYXQgYSBMTEREIG5vdGlmaWVzCisgKiB0aGUgc3Vic3lzdGVtIG9mLiAgQSByZW1vdGUgRkMgcG9ydCBtYXkgb3IgbWF5IG5vdCBiZSBhIFNDU0kgVGFyZ2V0LAorICogYWxzbyBiZSBhIFNDU0kgaW5pdGlhdG9yLCBJUCBlbmRwb2ludCwgZXRjLiBBcyBzdWNoLCB0aGUgcmVtb3RlCisgKiBwb3J0IGlzIGNvbnNpZGVyZWQgYSBzZXBhcmF0ZSBlbnRpdHksIGluZGVwZW5kZW50IG9mICJyb2xlIiAoc3VjaAorICogYXMgc2NzaSB0YXJnZXQpLgorICoKKyAqIC0tCisgKgorICogQXR0cmlidXRlcyBhcmUgYmFzZWQgb24gSEJBQVBJIFYyLjAgZGVmaW5pdGlvbnMuIE9ubHkgdGhvc2UKKyAqIGF0dHJpYnV0ZXMgdGhhdCBhcmUgZGV0ZXJtaW5hYmxlIGJ5IHRoZSBsb2NhbCBwb3J0IChha2EgSG9zdCkKKyAqIGFyZSBjb250YWluZWQuCisgKgorICogRml4ZWQgYXR0cmlidXRlcyBhcmUgbm90IGV4cGVjdGVkIHRvIGNoYW5nZS4gVGhlIGRyaXZlciBpcworICogZXhwZWN0ZWQgdG8gc2V0IHRoZXNlIHZhbHVlcyBhZnRlciBzdWNjZXNzZnVsbHkgY2FsbGluZworICogZmNfcmVtb3RlX3BvcnRfYWRkKCkuIFRoZSB0cmFuc3BvcnQgZnVsbHkgbWFuYWdlcyBhbGwgZ2V0IGZ1bmN0aW9ucworICogdy9vIGRyaXZlciBpbnRlcmFjdGlvbi4KKyAqCisgKiBEeW5hbWljIGF0dHJpYnV0ZXMgYXJlIGV4cGVjdGVkIHRvIGNoYW5nZS4gVGhlIGRyaXZlciBwYXJ0aWNpcGF0ZXMKKyAqIGluIGFsbCBnZXQvc2V0IG9wZXJhdGlvbnMgdmlhIGZ1bmN0aW9ucyBwcm92aWRlZCBieSB0aGUgZHJpdmVyLgorICoKKyAqIFByaXZhdGUgYXR0cmlidXRlcyBhcmUgdHJhbnNwb3J0LW1hbmFnZWQgdmFsdWVzLiBUaGV5IGFyZSBmdWxseQorICogbWFuYWdlZCBieSB0aGUgdHJhbnNwb3J0IHcvbyBkcml2ZXIgaW50ZXJhY3Rpb24uCisgKi8KKworc3RydWN0IGZjX3Jwb3J0IHsJLyogYWthIGZjX3N0YXJnZXRfYXR0cnMgKi8KKwkvKiBGaXhlZCBBdHRyaWJ1dGVzICovCisJdTMyIG1heGZyYW1lX3NpemU7CisJdTMyIHN1cHBvcnRlZF9jbGFzc2VzOworCisJLyogRHluYW1pYyBBdHRyaWJ1dGVzICovCisJdTMyIGRldl9sb3NzX3RtbzsJLyogUmVtb3RlIFBvcnQgbG9zcyB0aW1lb3V0IGluIHNlY29uZHMuICovCisKKwkvKiBQcml2YXRlIChUcmFuc3BvcnQtbWFuYWdlZCkgQXR0cmlidXRlcyAqLworCXU2NCBub2RlX25hbWU7CisJdTY0IHBvcnRfbmFtZTsKKwl1MzIgcG9ydF9pZDsKKwl1MzIgcm9sZXM7CisJZW51bSBmY19wb3J0X3N0YXRlIHBvcnRfc3RhdGU7CS8qIFdpbGwgb25seSBiZSBPTkxJTkUgb3IgVU5LTk9XTiAqLworCXUzMiBzY3NpX3RhcmdldF9pZDsKKworCS8qIGV4cG9ydGVkIGRhdGEgKi8KKwl2b2lkICpkZF9kYXRhOwkJCS8qIFVzZWQgZm9yIGRyaXZlci1zcGVjaWZpYyBzdG9yYWdlICovCisKKwkvKiBpbnRlcm5hbCBkYXRhICovCisJdW5zaWduZWQgaW50IGNoYW5uZWw7CisJdTMyIG51bWJlcjsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHBlZXJzOworCXN0cnVjdCBkZXZpY2UgZGV2OworIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZGV2X2xvc3Nfd29yazsKKyAJc3RydWN0IHdvcmtfc3RydWN0IHNjYW5fd29yazsKK30gX19hdHRyaWJ1dGVfXygoYWxpZ25lZChzaXplb2YodW5zaWduZWQgbG9uZykpKSk7CisKKyNkZWZpbmUJZGV2X3RvX3Jwb3J0KGQpCQkJCVwKKwljb250YWluZXJfb2YoZCwgc3RydWN0IGZjX3Jwb3J0LCBkZXYpCisjZGVmaW5lIHRyYW5zcG9ydF9jbGFzc190b19ycG9ydChjbGFzc2RldikJXAorCWRldl90b19ycG9ydChjbGFzc2Rldi0+ZGV2KQorI2RlZmluZSBycG9ydF90b19zaG9zdChyKQkJCVwKKwlkZXZfdG9fc2hvc3Qoci0+ZGV2LnBhcmVudCkKKworLyoKKyAqIEZDIFNDU0kgVGFyZ2V0IEF0dHJpYnV0ZXMKKyAqCisgKiBUaGUgU0NTSSBUYXJnZXQgaXMgY29uc2lkZXJlZCBhbiBleHRlbnRpb24gb2YgYSByZW1vdGUgcG9ydCAoYXMKKyAqIGEgcmVtb3RlIHBvcnQgY2FuIGJlIG1vcmUgdGhhbiBhIFNDU0kgVGFyZ2V0KS4gV2l0aGluIHRoZSBzY3NpCisgKiBzdWJzeXN0ZW0sIHdlIGxlYXZlIHRoZSBUYXJnZXQgYXMgYSBzZXBhcmF0ZSBlbnRpdHkuIERvaW5nIHNvCisgKiBwcm92aWRlcyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggcHJpb3IgRkMgdHJhbnNwb3J0IGFwaSdzLAorICogYW5kIGxldHMgcmVtb3RlIHBvcnRzIGJlIGhhbmRsZWQgZW50aXJlbHkgd2l0aGluIHRoZSBGQyB0cmFuc3BvcnQKKyAqIGFuZCBpbmRlcGVuZGVudGx5IGZyb20gdGhlIHNjc2kgc3Vic3lzdGVtLiBUaGUgZHJhd2JhY2sgaXMgdGhhdAorICogc29tZSBkYXRhIHdpbGwgYmUgZHVwbGljYXRlZC4KKyAqLworCitzdHJ1Y3QgZmNfc3RhcmdldF9hdHRycyB7CS8qIGFrYSBmY190YXJnZXRfYXR0cnMgKi8KKwkvKiBEeW5hbWljIEF0dHJpYnV0ZXMgKi8KKwl1NjQgbm9kZV9uYW1lOworCXU2NCBwb3J0X25hbWU7CisJdTMyIHBvcnRfaWQ7Cit9OworCisjZGVmaW5lIGZjX3N0YXJnZXRfbm9kZV9uYW1lKHgpIFwKKwkoKChzdHJ1Y3QgZmNfc3RhcmdldF9hdHRycyAqKSYoeCktPnN0YXJnZXRfZGF0YSktPm5vZGVfbmFtZSkKKyNkZWZpbmUgZmNfc3RhcmdldF9wb3J0X25hbWUoeCkJXAorCSgoKHN0cnVjdCBmY19zdGFyZ2V0X2F0dHJzICopJih4KS0+c3RhcmdldF9kYXRhKS0+cG9ydF9uYW1lKQorI2RlZmluZSBmY19zdGFyZ2V0X3BvcnRfaWQoeCkgXAorCSgoKHN0cnVjdCBmY19zdGFyZ2V0X2F0dHJzICopJih4KS0+c3RhcmdldF9kYXRhKS0+cG9ydF9pZCkKKworI2RlZmluZSBzdGFyZ2V0X3RvX3Jwb3J0KHMpCQkJXAorCXNjc2lfaXNfZmNfcnBvcnQocy0+ZGV2LnBhcmVudCkgPyBkZXZfdG9fcnBvcnQocy0+ZGV2LnBhcmVudCkgOiBOVUxMCisKKworLyoKKyAqIEZDIExvY2FsIFBvcnQgKEhvc3QpIFN0YXRpc3RpY3MKKyAqLworCisvKiBGQyBTdGF0aXN0aWNzIC0gRm9sbG93aW5nIEZDIEhCQUFQSSB2Mi4wIGd1aWRlbGluZXMgKi8KK3N0cnVjdCBmY19ob3N0X3N0YXRpc3RpY3MgeworCS8qIHBvcnQgc3RhdGlzdGljcyAqLworCXU2NCBzZWNvbmRzX3NpbmNlX2xhc3RfcmVzZXQ7CisJdTY0IHR4X2ZyYW1lczsKKwl1NjQgdHhfd29yZHM7CisJdTY0IHJ4X2ZyYW1lczsKKwl1NjQgcnhfd29yZHM7CisJdTY0IGxpcF9jb3VudDsKKwl1NjQgbm9zX2NvdW50OworCXU2NCBlcnJvcl9mcmFtZXM7CisJdTY0IGR1bXBlZF9mcmFtZXM7CisJdTY0IGxpbmtfZmFpbHVyZV9jb3VudDsKKwl1NjQgbG9zc19vZl9zeW5jX2NvdW50OworCXU2NCBsb3NzX29mX3NpZ25hbF9jb3VudDsKKwl1NjQgcHJpbV9zZXFfcHJvdG9jb2xfZXJyX2NvdW50OworCXU2NCBpbnZhbGlkX3R4X3dvcmRfY291bnQ7CisJdTY0IGludmFsaWRfY3JjX2NvdW50OworCQorCS8qIGZjNCBzdGF0aXN0aWNzICAob25seSBGQ1Agc3VwcG9ydGVkIGN1cnJlbnRseSkgKi8KKwl1NjQgZmNwX2lucHV0X3JlcXVlc3RzOworCXU2NCBmY3Bfb3V0cHV0X3JlcXVlc3RzOworCXU2NCBmY3BfY29udHJvbF9yZXF1ZXN0czsKKwl1NjQgZmNwX2lucHV0X21lZ2FieXRlczsKKwl1NjQgZmNwX291dHB1dF9tZWdhYnl0ZXM7Cit9OworCisKKy8qCisgKiBGQyBMb2NhbCBQb3J0IChIb3N0KSBBdHRyaWJ1dGVzCisgKgorICogQXR0cmlidXRlcyBhcmUgYmFzZWQgb24gSEJBQVBJIFYyLjAgZGVmaW5pdGlvbnMuCisgKiBOb3RlOiBPU0RldmljZU5hbWUgaXMgZGV0ZXJtaW5lZCBieSB1c2VyLXNwYWNlIGxpYnJhcnkKKyAqCisgKiBGaXhlZCBhdHRyaWJ1dGVzIGFyZSBub3QgZXhwZWN0ZWQgdG8gY2hhbmdlLiBUaGUgZHJpdmVyIGlzCisgKiBleHBlY3RlZCB0byBzZXQgdGhlc2UgdmFsdWVzIGFmdGVyIHN1Y2Nlc3NmdWxseSBjYWxsaW5nIHNjc2lfYWRkX2hvc3QoKS4KKyAqIFRoZSB0cmFuc3BvcnQgZnVsbHkgbWFuYWdlcyBhbGwgZ2V0IGZ1bmN0aW9ucyB3L28gZHJpdmVyIGludGVyYWN0aW9uLgorICoKKyAqIER5bmFtaWMgYXR0cmlidXRlcyBhcmUgZXhwZWN0ZWQgdG8gY2hhbmdlLiBUaGUgZHJpdmVyIHBhcnRpY2lwYXRlcworICogaW4gYWxsIGdldC9zZXQgb3BlcmF0aW9ucyB2aWEgZnVuY3Rpb25zIHByb3ZpZGVkIGJ5IHRoZSBkcml2ZXIuCisgKgorICogUHJpdmF0ZSBhdHRyaWJ1dGVzIGFyZSB0cmFuc3BvcnQtbWFuYWdlZCB2YWx1ZXMuIFRoZXkgYXJlIGZ1bGx5CisgKiBtYW5hZ2VkIGJ5IHRoZSB0cmFuc3BvcnQgdy9vIGRyaXZlciBpbnRlcmFjdGlvbi4KKyAqLworCisjZGVmaW5lIEZDX0ZDNF9MSVNUX1NJWkUJCTMyCisjZGVmaW5lIEZDX1NZTUJPTElDX05BTUVfU0laRQkJMjU2CisjZGVmaW5lIEZDX1ZFUlNJT05fU1RSSU5HX1NJWkUJCTY0CisjZGVmaW5lIEZDX1NFUklBTF9OVU1CRVJfU0laRQkJODAKKworc3RydWN0IGZjX2hvc3RfYXR0cnMgeworCS8qIEZpeGVkIEF0dHJpYnV0ZXMgKi8KKwl1NjQgbm9kZV9uYW1lOworCXU2NCBwb3J0X25hbWU7CisJdTMyIHN1cHBvcnRlZF9jbGFzc2VzOworCXU4ICBzdXBwb3J0ZWRfZmM0c1tGQ19GQzRfTElTVF9TSVpFXTsKKwljaGFyIHN5bWJvbGljX25hbWVbRkNfU1lNQk9MSUNfTkFNRV9TSVpFXTsKKwl1MzIgc3VwcG9ydGVkX3NwZWVkczsKKwl1MzIgbWF4ZnJhbWVfc2l6ZTsKKwljaGFyIHNlcmlhbF9udW1iZXJbRkNfU0VSSUFMX05VTUJFUl9TSVpFXTsKKworCS8qIER5bmFtaWMgQXR0cmlidXRlcyAqLworCXUzMiBwb3J0X2lkOworCWVudW0gZmNfcG9ydF90eXBlIHBvcnRfdHlwZTsKKwllbnVtIGZjX3BvcnRfc3RhdGUgcG9ydF9zdGF0ZTsKKwl1OCAgYWN0aXZlX2ZjNHNbRkNfRkM0X0xJU1RfU0laRV07CisJdTMyIHNwZWVkOworCXU2NCBmYWJyaWNfbmFtZTsKKworCS8qIFByaXZhdGUgKFRyYW5zcG9ydC1tYW5hZ2VkKSBBdHRyaWJ1dGVzICovCisJZW51bSBmY190Z3RpZF9iaW5kaW5nX3R5cGUgIHRndGlkX2JpbmRfdHlwZTsKKworCS8qIGludGVybmFsIGRhdGEgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHJwb3J0czsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHJwb3J0X2JpbmRpbmdzOworCXUzMiBuZXh0X3Jwb3J0X251bWJlcjsKKwl1MzIgbmV4dF90YXJnZXRfaWQ7Cit9OworCisjZGVmaW5lIGZjX2hvc3Rfbm9kZV9uYW1lKHgpIFwKKwkoKChzdHJ1Y3QgZmNfaG9zdF9hdHRycyAqKSh4KS0+c2hvc3RfZGF0YSktPm5vZGVfbmFtZSkKKyNkZWZpbmUgZmNfaG9zdF9wb3J0X25hbWUoeCkJXAorCSgoKHN0cnVjdCBmY19ob3N0X2F0dHJzICopKHgpLT5zaG9zdF9kYXRhKS0+cG9ydF9uYW1lKQorI2RlZmluZSBmY19ob3N0X3N1cHBvcnRlZF9jbGFzc2VzKHgpCVwKKwkoKChzdHJ1Y3QgZmNfaG9zdF9hdHRycyAqKSh4KS0+c2hvc3RfZGF0YSktPnN1cHBvcnRlZF9jbGFzc2VzKQorI2RlZmluZSBmY19ob3N0X3N1cHBvcnRlZF9mYzRzKHgpCVwKKwkoKChzdHJ1Y3QgZmNfaG9zdF9hdHRycyAqKSh4KS0+c2hvc3RfZGF0YSktPnN1cHBvcnRlZF9mYzRzKQorI2RlZmluZSBmY19ob3N0X3N5bWJvbGljX25hbWUoeCkJXAorCSgoKHN0cnVjdCBmY19ob3N0X2F0dHJzICopKHgpLT5zaG9zdF9kYXRhKS0+c3ltYm9saWNfbmFtZSkKKyNkZWZpbmUgZmNfaG9zdF9zdXBwb3J0ZWRfc3BlZWRzKHgpCVwKKwkoKChzdHJ1Y3QgZmNfaG9zdF9hdHRycyAqKSh4KS0+c2hvc3RfZGF0YSktPnN1cHBvcnRlZF9zcGVlZHMpCisjZGVmaW5lIGZjX2hvc3RfbWF4ZnJhbWVfc2l6ZSh4KQlcCisJKCgoc3RydWN0IGZjX2hvc3RfYXR0cnMgKikoeCktPnNob3N0X2RhdGEpLT5tYXhmcmFtZV9zaXplKQorI2RlZmluZSBmY19ob3N0X3NlcmlhbF9udW1iZXIoeCkJXAorCSgoKHN0cnVjdCBmY19ob3N0X2F0dHJzICopKHgpLT5zaG9zdF9kYXRhKS0+c2VyaWFsX251bWJlcikKKyNkZWZpbmUgZmNfaG9zdF9wb3J0X2lkKHgpCVwKKwkoKChzdHJ1Y3QgZmNfaG9zdF9hdHRycyAqKSh4KS0+c2hvc3RfZGF0YSktPnBvcnRfaWQpCisjZGVmaW5lIGZjX2hvc3RfcG9ydF90eXBlKHgpCVwKKwkoKChzdHJ1Y3QgZmNfaG9zdF9hdHRycyAqKSh4KS0+c2hvc3RfZGF0YSktPnBvcnRfdHlwZSkKKyNkZWZpbmUgZmNfaG9zdF9wb3J0X3N0YXRlKHgpCVwKKwkoKChzdHJ1Y3QgZmNfaG9zdF9hdHRycyAqKSh4KS0+c2hvc3RfZGF0YSktPnBvcnRfc3RhdGUpCisjZGVmaW5lIGZjX2hvc3RfYWN0aXZlX2ZjNHMoeCkJXAorCSgoKHN0cnVjdCBmY19ob3N0X2F0dHJzICopKHgpLT5zaG9zdF9kYXRhKS0+YWN0aXZlX2ZjNHMpCisjZGVmaW5lIGZjX2hvc3Rfc3BlZWQoeCkJXAorCSgoKHN0cnVjdCBmY19ob3N0X2F0dHJzICopKHgpLT5zaG9zdF9kYXRhKS0+c3BlZWQpCisjZGVmaW5lIGZjX2hvc3RfZmFicmljX25hbWUoeCkJXAorCSgoKHN0cnVjdCBmY19ob3N0X2F0dHJzICopKHgpLT5zaG9zdF9kYXRhKS0+ZmFicmljX25hbWUpCisjZGVmaW5lIGZjX2hvc3RfdGd0aWRfYmluZF90eXBlKHgpIFwKKwkoKChzdHJ1Y3QgZmNfaG9zdF9hdHRycyAqKSh4KS0+c2hvc3RfZGF0YSktPnRndGlkX2JpbmRfdHlwZSkKKyNkZWZpbmUgZmNfaG9zdF9ycG9ydHMoeCkgXAorCSgoKHN0cnVjdCBmY19ob3N0X2F0dHJzICopKHgpLT5zaG9zdF9kYXRhKS0+cnBvcnRzKQorI2RlZmluZSBmY19ob3N0X3Jwb3J0X2JpbmRpbmdzKHgpIFwKKwkoKChzdHJ1Y3QgZmNfaG9zdF9hdHRycyAqKSh4KS0+c2hvc3RfZGF0YSktPnJwb3J0X2JpbmRpbmdzKQorI2RlZmluZSBmY19ob3N0X25leHRfcnBvcnRfbnVtYmVyKHgpIFwKKwkoKChzdHJ1Y3QgZmNfaG9zdF9hdHRycyAqKSh4KS0+c2hvc3RfZGF0YSktPm5leHRfcnBvcnRfbnVtYmVyKQorI2RlZmluZSBmY19ob3N0X25leHRfdGFyZ2V0X2lkKHgpIFwKKwkoKChzdHJ1Y3QgZmNfaG9zdF9hdHRycyAqKSh4KS0+c2hvc3RfZGF0YSktPm5leHRfdGFyZ2V0X2lkKQorCisKKy8qIFRoZSBmdW5jdGlvbnMgYnkgd2hpY2ggdGhlIHRyYW5zcG9ydCBjbGFzcyBhbmQgdGhlIGRyaXZlciBjb21tdW5pY2F0ZSAqLworc3RydWN0IGZjX2Z1bmN0aW9uX3RlbXBsYXRlIHsKKwl2b2lkICAgICgqZ2V0X3Jwb3J0X2Rldl9sb3NzX3Rtbykoc3RydWN0IGZjX3Jwb3J0ICopOworCXZvaWQJKCpzZXRfcnBvcnRfZGV2X2xvc3NfdG1vKShzdHJ1Y3QgZmNfcnBvcnQgKiwgdTMyKTsKKworCXZvaWQJKCpnZXRfc3RhcmdldF9ub2RlX25hbWUpKHN0cnVjdCBzY3NpX3RhcmdldCAqKTsKKwl2b2lkCSgqZ2V0X3N0YXJnZXRfcG9ydF9uYW1lKShzdHJ1Y3Qgc2NzaV90YXJnZXQgKik7CisJdm9pZCAJKCpnZXRfc3RhcmdldF9wb3J0X2lkKShzdHJ1Y3Qgc2NzaV90YXJnZXQgKik7CisKKwl2b2lkIAkoKmdldF9ob3N0X3BvcnRfaWQpKHN0cnVjdCBTY3NpX0hvc3QgKik7CisJdm9pZAkoKmdldF9ob3N0X3BvcnRfdHlwZSkoc3RydWN0IFNjc2lfSG9zdCAqKTsKKwl2b2lkCSgqZ2V0X2hvc3RfcG9ydF9zdGF0ZSkoc3RydWN0IFNjc2lfSG9zdCAqKTsKKwl2b2lkCSgqZ2V0X2hvc3RfYWN0aXZlX2ZjNHMpKHN0cnVjdCBTY3NpX0hvc3QgKik7CisJdm9pZAkoKmdldF9ob3N0X3NwZWVkKShzdHJ1Y3QgU2NzaV9Ib3N0ICopOworCXZvaWQJKCpnZXRfaG9zdF9mYWJyaWNfbmFtZSkoc3RydWN0IFNjc2lfSG9zdCAqKTsKKworCXN0cnVjdCBmY19ob3N0X3N0YXRpc3RpY3MgKiAoKmdldF9mY19ob3N0X3N0YXRzKShzdHJ1Y3QgU2NzaV9Ib3N0ICopOworCXZvaWQJKCpyZXNldF9mY19ob3N0X3N0YXRzKShzdHJ1Y3QgU2NzaV9Ib3N0ICopOworCisJLyogYWxsb2NhdGlvbiBsZW5ndGhzIGZvciBob3N0LXNwZWNpZmljIGRhdGEgKi8KKwl1MzIJIAkJCWRkX2ZjcnBvcnRfc2l6ZTsKKworCS8qIAorCSAqIFRoZSBkcml2ZXIgc2V0cyB0aGVzZSB0byB0ZWxsIHRoZSB0cmFuc3BvcnQgY2xhc3MgaXQKKwkgKiB3YW50cyB0aGUgYXR0cmlidXRlcyBkaXNwbGF5ZWQgaW4gc3lzZnMuICBJZiB0aGUgc2hvd18gZmxhZworCSAqIGlzIG5vdCBzZXQsIHRoZSBhdHRyaWJ1dGUgd2lsbCBiZSBwcml2YXRlIHRvIHRoZSB0cmFuc3BvcnQKKwkgKiBjbGFzcyAKKwkgKi8KKworCS8qIHJlbW90ZSBwb3J0IGZpeGVkIGF0dHJpYnV0ZXMgKi8KKwl1bnNpZ25lZCBsb25nCXNob3dfcnBvcnRfbWF4ZnJhbWVfc2l6ZToxOworCXVuc2lnbmVkIGxvbmcJc2hvd19ycG9ydF9zdXBwb3J0ZWRfY2xhc3NlczoxOworCXVuc2lnbmVkIGxvbmcgICBzaG93X3Jwb3J0X2Rldl9sb3NzX3RtbzoxOworCisJLyoKKwkgKiB0YXJnZXQgZHluYW1pYyBhdHRyaWJ1dGVzCisJICogVGhlc2Ugc2hvdWxkIGFsbCBiZSAiMSIgaWYgdGhlIGRyaXZlciB1c2VzIHRoZSByZW1vdGUgcG9ydAorCSAqIGFkZC9kZWxldGUgZnVuY3Rpb25zIChzbyBhdHRyaWJ1dGVzIHJlZmxlY3QgcnBvcnQgdmFsdWVzKS4KKwkgKi8KKwl1bnNpZ25lZCBsb25nCXNob3dfc3RhcmdldF9ub2RlX25hbWU6MTsKKwl1bnNpZ25lZCBsb25nCXNob3dfc3RhcmdldF9wb3J0X25hbWU6MTsKKwl1bnNpZ25lZCBsb25nCXNob3dfc3RhcmdldF9wb3J0X2lkOjE7CisKKwkvKiBob3N0IGZpeGVkIGF0dHJpYnV0ZXMgKi8KKwl1bnNpZ25lZCBsb25nCXNob3dfaG9zdF9ub2RlX25hbWU6MTsKKwl1bnNpZ25lZCBsb25nCXNob3dfaG9zdF9wb3J0X25hbWU6MTsKKwl1bnNpZ25lZCBsb25nCXNob3dfaG9zdF9zdXBwb3J0ZWRfY2xhc3NlczoxOworCXVuc2lnbmVkIGxvbmcJc2hvd19ob3N0X3N1cHBvcnRlZF9mYzRzOjE7CisJdW5zaWduZWQgbG9uZwlzaG93X2hvc3Rfc3ltYm9saWNfbmFtZToxOworCXVuc2lnbmVkIGxvbmcJc2hvd19ob3N0X3N1cHBvcnRlZF9zcGVlZHM6MTsKKwl1bnNpZ25lZCBsb25nCXNob3dfaG9zdF9tYXhmcmFtZV9zaXplOjE7CisJdW5zaWduZWQgbG9uZwlzaG93X2hvc3Rfc2VyaWFsX251bWJlcjoxOworCS8qIGhvc3QgZHluYW1pYyBhdHRyaWJ1dGVzICovCisJdW5zaWduZWQgbG9uZwlzaG93X2hvc3RfcG9ydF9pZDoxOworCXVuc2lnbmVkIGxvbmcJc2hvd19ob3N0X3BvcnRfdHlwZToxOworCXVuc2lnbmVkIGxvbmcJc2hvd19ob3N0X3BvcnRfc3RhdGU6MTsKKwl1bnNpZ25lZCBsb25nCXNob3dfaG9zdF9hY3RpdmVfZmM0czoxOworCXVuc2lnbmVkIGxvbmcJc2hvd19ob3N0X3NwZWVkOjE7CisJdW5zaWduZWQgbG9uZwlzaG93X2hvc3RfZmFicmljX25hbWU6MTsKK307CisKKworc3RydWN0IHNjc2lfdHJhbnNwb3J0X3RlbXBsYXRlICpmY19hdHRhY2hfdHJhbnNwb3J0KAorCQkJc3RydWN0IGZjX2Z1bmN0aW9uX3RlbXBsYXRlICopOwordm9pZCBmY19yZWxlYXNlX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV90cmFuc3BvcnRfdGVtcGxhdGUgKik7Cit2b2lkIGZjX3JlbW92ZV9ob3N0KHN0cnVjdCBTY3NpX0hvc3QgKik7CitzdHJ1Y3QgZmNfcnBvcnQgKmZjX3JlbW90ZV9wb3J0X2FkZChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCwKKwkJCWludCBjaGFubmVsLCBzdHJ1Y3QgZmNfcnBvcnRfaWRlbnRpZmllcnMgICppZHMpOwordm9pZCBmY19yZW1vdGVfcG9ydF9kZWxldGUoc3RydWN0IGZjX3Jwb3J0ICAqcnBvcnQpOwordm9pZCBmY19yZW1vdGVfcG9ydF9yb2xlY2hnKHN0cnVjdCBmY19ycG9ydCAgKnJwb3J0LCB1MzIgcm9sZXMpOworaW50IGZjX3JlbW90ZV9wb3J0X2Jsb2NrKHN0cnVjdCBmY19ycG9ydCAqcnBvcnQpOwordm9pZCBmY19yZW1vdGVfcG9ydF91bmJsb2NrKHN0cnVjdCBmY19ycG9ydCAqcnBvcnQpOworaW50IHNjc2lfaXNfZmNfcnBvcnQoY29uc3Qgc3RydWN0IGRldmljZSAqKTsKKworI2VuZGlmIC8qIFNDU0lfVFJBTlNQT1JUX0ZDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5oIGIvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIyNmE2YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5oCkBAIC0wLDAgKzEsMTc4IEBACisvKiAKKyAqIGlTQ1NJIHRyYW5zcG9ydCBjbGFzcyBkZWZpbml0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgSUJNIENvcnBvcmF0aW9uLCAyMDA0CisgKiBDb3B5cmlnaHQgKEMpIE1pa2UgQ2hyaXN0aWUsIDIwMDQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisjaWZuZGVmIFNDU0lfVFJBTlNQT1JUX0lTQ1NJX0gKKyNkZWZpbmUgU0NTSV9UUkFOU1BPUlRfSVNDU0lfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvaW42Lmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKworc3RydWN0IHNjc2lfdHJhbnNwb3J0X3RlbXBsYXRlOworCitzdHJ1Y3QgaXNjc2lfY2xhc3Nfc2Vzc2lvbiB7CisJdWludDhfdCBpc2lkWzZdOworCXVpbnQxNl90IHRzaWg7CisJaW50IGhlYWRlcl9kaWdlc3Q7CQkvKiAxIENSQzMyLCAwIE5vbmUgKi8KKwlpbnQgZGF0YV9kaWdlc3Q7CQkvKiAxIENSQzMyLCAwIE5vbmUgKi8KKwl1aW50MTZfdCB0cGd0OworCXVuaW9uIHsKKwkJc3RydWN0IGluNl9hZGRyIHNpbjZfYWRkcjsKKwkJc3RydWN0IGluX2FkZHIgc2luX2FkZHI7CisJfSB1OworCXNhX2ZhbWlseV90IGFkZHJfdHlwZTsJCS8qIG11c3QgYmUgQUZfSU5FVCBvciBBRl9JTkVUNiAqLworCXVpbnQxNl90IHBvcnQ7CQkJLyogbXVzdCBiZSBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIgKi8KKwlpbnQgaW5pdGlhbF9yMnQ7CQkvKiAxIFllcywgMCBObyAqLworCWludCBpbW1lZGlhdGVfZGF0YTsJCS8qIDEgWWVzLCAwIE5vICovCisJdWludDMyX3QgbWF4X3JlY3ZfZGF0YV9zZWdtZW50X2xlbjsKKwl1aW50MzJfdCBtYXhfYnVyc3RfbGVuOworCXVpbnQzMl90IGZpcnN0X2J1cnN0X2xlbjsKKwl1aW50MTZfdCBkZWZfdGltZTJ3YWl0OworCXVpbnQxNl90IGRlZl90aW1lMnJldGFpbjsKKwl1aW50MTZfdCBtYXhfb3V0c3RhbmRpbmdfcjJ0OworCWludCBkYXRhX3BkdV9pbl9vcmRlcjsJCS8qIDEgWWVzLCAwIE5vICovCisJaW50IGRhdGFfc2VxdWVuY2VfaW5fb3JkZXI7CS8qIDEgWWVzLCAwIE5vICovCisJaW50IGVybDsKK307CisKKy8qCisgKiBhY2Nlc3NvciBtYWNyb3MKKyAqLworI2RlZmluZSBpc2NzaV9pc2lkKHgpIFwKKwkoKChzdHJ1Y3QgaXNjc2lfY2xhc3Nfc2Vzc2lvbiAqKSYoeCktPnN0YXJnZXRfZGF0YSktPmlzaWQpCisjZGVmaW5lIGlzY3NpX3RzaWgoeCkgXAorCSgoKHN0cnVjdCBpc2NzaV9jbGFzc19zZXNzaW9uICopJih4KS0+c3RhcmdldF9kYXRhKS0+dHNpaCkKKyNkZWZpbmUgaXNjc2lfaGVhZGVyX2RpZ2VzdCh4KSBcCisJKCgoc3RydWN0IGlzY3NpX2NsYXNzX3Nlc3Npb24gKikmKHgpLT5zdGFyZ2V0X2RhdGEpLT5oZWFkZXJfZGlnZXN0KQorI2RlZmluZSBpc2NzaV9kYXRhX2RpZ2VzdCh4KSBcCisJKCgoc3RydWN0IGlzY3NpX2NsYXNzX3Nlc3Npb24gKikmKHgpLT5zdGFyZ2V0X2RhdGEpLT5kYXRhX2RpZ2VzdCkKKyNkZWZpbmUgaXNjc2lfcG9ydCh4KSBcCisJKCgoc3RydWN0IGlzY3NpX2NsYXNzX3Nlc3Npb24gKikmKHgpLT5zdGFyZ2V0X2RhdGEpLT5wb3J0KQorI2RlZmluZSBpc2NzaV9hZGRyX3R5cGUoeCkgXAorCSgoKHN0cnVjdCBpc2NzaV9jbGFzc19zZXNzaW9uICopJih4KS0+c3RhcmdldF9kYXRhKS0+YWRkcl90eXBlKQorI2RlZmluZSBpc2NzaV9zaW5fYWRkcih4KSBcCisJKCgoc3RydWN0IGlzY3NpX2NsYXNzX3Nlc3Npb24gKikmKHgpLT5zdGFyZ2V0X2RhdGEpLT51LnNpbl9hZGRyKQorI2RlZmluZSBpc2NzaV9zaW42X2FkZHIoeCkgXAorCSgoKHN0cnVjdCBpc2NzaV9jbGFzc19zZXNzaW9uICopJih4KS0+c3RhcmdldF9kYXRhKS0+dS5zaW42X2FkZHIpCisjZGVmaW5lIGlzY3NpX3RwZ3QoeCkgXAorCSgoKHN0cnVjdCBpc2NzaV9jbGFzc19zZXNzaW9uICopJih4KS0+c3RhcmdldF9kYXRhKS0+dHBndCkKKyNkZWZpbmUgaXNjc2lfaW5pdGlhbF9yMnQoeCkgXAorCSgoKHN0cnVjdCBpc2NzaV9jbGFzc19zZXNzaW9uICopJih4KS0+c3RhcmdldF9kYXRhKS0+aW5pdGlhbF9yMnQpCisjZGVmaW5lIGlzY3NpX2ltbWVkaWF0ZV9kYXRhKHgpIFwKKwkoKChzdHJ1Y3QgaXNjc2lfY2xhc3Nfc2Vzc2lvbiAqKSYoeCktPnN0YXJnZXRfZGF0YSktPmltbWVkaWF0ZV9kYXRhKQorI2RlZmluZSBpc2NzaV9tYXhfcmVjdl9kYXRhX3NlZ21lbnRfbGVuKHgpIFwKKwkoKChzdHJ1Y3QgaXNjc2lfY2xhc3Nfc2Vzc2lvbiAqKSYoeCktPnN0YXJnZXRfZGF0YSktPm1heF9yZWN2X2RhdGFfc2VnbWVudF9sZW4pCisjZGVmaW5lIGlzY3NpX21heF9idXJzdF9sZW4oeCkgXAorCSgoKHN0cnVjdCBpc2NzaV9jbGFzc19zZXNzaW9uICopJih4KS0+c3RhcmdldF9kYXRhKS0+bWF4X2J1cnN0X2xlbikKKyNkZWZpbmUgaXNjc2lfZmlyc3RfYnVyc3RfbGVuKHgpIFwKKwkoKChzdHJ1Y3QgaXNjc2lfY2xhc3Nfc2Vzc2lvbiAqKSYoeCktPnN0YXJnZXRfZGF0YSktPmZpcnN0X2J1cnN0X2xlbikKKyNkZWZpbmUgaXNjc2lfZGVmX3RpbWUyd2FpdCh4KSBcCisJKCgoc3RydWN0IGlzY3NpX2NsYXNzX3Nlc3Npb24gKikmKHgpLT5zdGFyZ2V0X2RhdGEpLT5kZWZfdGltZTJ3YWl0KQorI2RlZmluZSBpc2NzaV9kZWZfdGltZTJyZXRhaW4oeCkgXAorCSgoKHN0cnVjdCBpc2NzaV9jbGFzc19zZXNzaW9uICopJih4KS0+c3RhcmdldF9kYXRhKS0+ZGVmX3RpbWUycmV0YWluKQorI2RlZmluZSBpc2NzaV9tYXhfb3V0c3RhbmRpbmdfcjJ0KHgpIFwKKwkoKChzdHJ1Y3QgaXNjc2lfY2xhc3Nfc2Vzc2lvbiAqKSYoeCktPnN0YXJnZXRfZGF0YSktPm1heF9vdXRzdGFuZGluZ19yMnQpCisjZGVmaW5lIGlzY3NpX2RhdGFfcGR1X2luX29yZGVyKHgpIFwKKwkoKChzdHJ1Y3QgaXNjc2lfY2xhc3Nfc2Vzc2lvbiAqKSYoeCktPnN0YXJnZXRfZGF0YSktPmRhdGFfcGR1X2luX29yZGVyKQorI2RlZmluZSBpc2NzaV9kYXRhX3NlcXVlbmNlX2luX29yZGVyKHgpIFwKKwkoKChzdHJ1Y3QgaXNjc2lfY2xhc3Nfc2Vzc2lvbiAqKSYoeCktPnN0YXJnZXRfZGF0YSktPmRhdGFfc2VxdWVuY2VfaW5fb3JkZXIpCisjZGVmaW5lIGlzY3NpX2VybCh4KSBcCisJKCgoc3RydWN0IGlzY3NpX2NsYXNzX3Nlc3Npb24gKikmKHgpLT5zdGFyZ2V0X2RhdGEpLT5lcmwpCisKKy8qCisgKiBUaGUgZnVuY3Rpb25zIGJ5IHdoaWNoIHRoZSB0cmFuc3BvcnQgY2xhc3MgYW5kIHRoZSBkcml2ZXIgY29tbXVuaWNhdGUKKyAqLworc3RydWN0IGlzY3NpX2Z1bmN0aW9uX3RlbXBsYXRlIHsKKwkvKgorCSAqIHRhcmdldCBhdHRycworCSAqLworCXZvaWQgKCpnZXRfaXNpZCkoc3RydWN0IHNjc2lfdGFyZ2V0ICopOworCXZvaWQgKCpnZXRfdHNpaCkoc3RydWN0IHNjc2lfdGFyZ2V0ICopOworCXZvaWQgKCpnZXRfaGVhZGVyX2RpZ2VzdCkoc3RydWN0IHNjc2lfdGFyZ2V0ICopOworCXZvaWQgKCpnZXRfZGF0YV9kaWdlc3QpKHN0cnVjdCBzY3NpX3RhcmdldCAqKTsKKwl2b2lkICgqZ2V0X3BvcnQpKHN0cnVjdCBzY3NpX3RhcmdldCAqKTsKKwl2b2lkICgqZ2V0X3RwZ3QpKHN0cnVjdCBzY3NpX3RhcmdldCAqKTsKKwkvKgorCSAqIEluIGdldF9pcF9hZGRyZXNzIHRoZSBsbGQgbXVzdCBzZXQgdGhlIGFkZHJlc3MgYW5kCisJICogdGhlIGFkZHJlc3MgdHlwZQorCSAqLworCXZvaWQgKCpnZXRfaXBfYWRkcmVzcykoc3RydWN0IHNjc2lfdGFyZ2V0ICopOworCS8qCisJICogVGhlIGxsZCBzaG91bGQgc25wcmludGYgdGhlIG5hbWUgb3IgYWxpYXMgdG8gdGhlIGJ1ZmZlcgorCSAqLworCXNzaXplX3QgKCpnZXRfdGFyZ2V0X25hbWUpKHN0cnVjdCBzY3NpX3RhcmdldCAqLCBjaGFyICosIHNzaXplX3QpOworCXNzaXplX3QgKCpnZXRfdGFyZ2V0X2FsaWFzKShzdHJ1Y3Qgc2NzaV90YXJnZXQgKiwgY2hhciAqLCBzc2l6ZV90KTsKKwl2b2lkICgqZ2V0X2luaXRpYWxfcjJ0KShzdHJ1Y3Qgc2NzaV90YXJnZXQgKik7CisJdm9pZCAoKmdldF9pbW1lZGlhdGVfZGF0YSkoc3RydWN0IHNjc2lfdGFyZ2V0ICopOworCXZvaWQgKCpnZXRfbWF4X3JlY3ZfZGF0YV9zZWdtZW50X2xlbikoc3RydWN0IHNjc2lfdGFyZ2V0ICopOworCXZvaWQgKCpnZXRfbWF4X2J1cnN0X2xlbikoc3RydWN0IHNjc2lfdGFyZ2V0ICopOworCXZvaWQgKCpnZXRfZmlyc3RfYnVyc3RfbGVuKShzdHJ1Y3Qgc2NzaV90YXJnZXQgKik7CisJdm9pZCAoKmdldF9kZWZfdGltZTJ3YWl0KShzdHJ1Y3Qgc2NzaV90YXJnZXQgKik7CisJdm9pZCAoKmdldF9kZWZfdGltZTJyZXRhaW4pKHN0cnVjdCBzY3NpX3RhcmdldCAqKTsKKwl2b2lkICgqZ2V0X21heF9vdXRzdGFuZGluZ19yMnQpKHN0cnVjdCBzY3NpX3RhcmdldCAqKTsKKwl2b2lkICgqZ2V0X2RhdGFfcGR1X2luX29yZGVyKShzdHJ1Y3Qgc2NzaV90YXJnZXQgKik7CisJdm9pZCAoKmdldF9kYXRhX3NlcXVlbmNlX2luX29yZGVyKShzdHJ1Y3Qgc2NzaV90YXJnZXQgKik7CisJdm9pZCAoKmdldF9lcmwpKHN0cnVjdCBzY3NpX3RhcmdldCAqKTsKKworCS8qCisJICogaG9zdCBhdHRzCisJICovCisKKwkvKgorCSAqIFRoZSBsbGQgc2hvdWxkIHNucHJpbnRmIHRoZSBuYW1lIG9yIGFsaWFzIHRvIHRoZSBidWZmZXIKKwkgKi8KKwlzc2l6ZV90ICgqZ2V0X2luaXRpYXRvcl9hbGlhcykoc3RydWN0IFNjc2lfSG9zdCAqLCBjaGFyICosIHNzaXplX3QpOworCXNzaXplX3QgKCpnZXRfaW5pdGlhdG9yX25hbWUpKHN0cnVjdCBTY3NpX0hvc3QgKiwgY2hhciAqLCBzc2l6ZV90KTsKKwkvKgorCSAqIFRoZSBkcml2ZXIgc2V0cyB0aGVzZSB0byB0ZWxsIHRoZSB0cmFuc3BvcnQgY2xhc3MgaXQKKwkgKiB3YW50cyB0aGUgYXR0cmlidXRlcyBkaXNwbGF5ZWQgaW4gc3lzZnMuICBJZiB0aGUgc2hvd18gZmxhZworCSAqIGlzIG5vdCBzZXQsIHRoZSBhdHRyaWJ1dGUgd2lsbCBiZSBwcml2YXRlIHRvIHRoZSB0cmFuc3BvcnQKKwkgKiBjbGFzcy4gV2UgY291bGQgcHJvYmFibHkganVzdCB0ZXN0IGlmIGEgZ2V0XyBmbiB3YXMgc2V0CisJICogc2luY2Ugd2Ugb25seSB1c2UgdGhlIHZhbHVlcyBmb3Igc3lzZnMgYnV0IHRoaXMgaXMgaG93CisJICogZmMgZG9lcyBpdCB0b28uCisJICovCisJdW5zaWduZWQgbG9uZyBzaG93X2lzaWQ6MTsKKwl1bnNpZ25lZCBsb25nIHNob3dfdHNpaDoxOworCXVuc2lnbmVkIGxvbmcgc2hvd19oZWFkZXJfZGlnZXN0OjE7CisJdW5zaWduZWQgbG9uZyBzaG93X2RhdGFfZGlnZXN0OjE7CisJdW5zaWduZWQgbG9uZyBzaG93X3BvcnQ6MTsKKwl1bnNpZ25lZCBsb25nIHNob3dfdHBndDoxOworCXVuc2lnbmVkIGxvbmcgc2hvd19pcF9hZGRyZXNzOjE7CisJdW5zaWduZWQgbG9uZyBzaG93X3RhcmdldF9uYW1lOjE7CisJdW5zaWduZWQgbG9uZyBzaG93X3RhcmdldF9hbGlhczoxOworCXVuc2lnbmVkIGxvbmcgc2hvd19pbml0aWFsX3IydDoxOworCXVuc2lnbmVkIGxvbmcgc2hvd19pbW1lZGlhdGVfZGF0YToxOworCXVuc2lnbmVkIGxvbmcgc2hvd19tYXhfcmVjdl9kYXRhX3NlZ21lbnRfbGVuOjE7CisJdW5zaWduZWQgbG9uZyBzaG93X21heF9idXJzdF9sZW46MTsKKwl1bnNpZ25lZCBsb25nIHNob3dfZmlyc3RfYnVyc3RfbGVuOjE7CisJdW5zaWduZWQgbG9uZyBzaG93X2RlZl90aW1lMndhaXQ6MTsKKwl1bnNpZ25lZCBsb25nIHNob3dfZGVmX3RpbWUycmV0YWluOjE7CisJdW5zaWduZWQgbG9uZyBzaG93X21heF9vdXRzdGFuZGluZ19yMnQ6MTsKKwl1bnNpZ25lZCBsb25nIHNob3dfZGF0YV9wZHVfaW5fb3JkZXI6MTsKKwl1bnNpZ25lZCBsb25nIHNob3dfZGF0YV9zZXF1ZW5jZV9pbl9vcmRlcjoxOworCXVuc2lnbmVkIGxvbmcgc2hvd19lcmw6MTsKKwl1bnNpZ25lZCBsb25nIHNob3dfaW5pdGlhdG9yX25hbWU6MTsKKwl1bnNpZ25lZCBsb25nIHNob3dfaW5pdGlhdG9yX2FsaWFzOjE7Cit9OworCitzdHJ1Y3Qgc2NzaV90cmFuc3BvcnRfdGVtcGxhdGUgKmlzY3NpX2F0dGFjaF90cmFuc3BvcnQoc3RydWN0IGlzY3NpX2Z1bmN0aW9uX3RlbXBsYXRlICopOwordm9pZCBpc2NzaV9yZWxlYXNlX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV90cmFuc3BvcnRfdGVtcGxhdGUgKik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0X3NwaS5oIGIvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0X3NwaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkY2Y0OTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfc3BpLmgKQEAgLTAsMCArMSwxMzUgQEAKKy8qIAorICogIFBhcmFsbGVsIFNDU0kgKFNQSSkgdHJhbnNwb3J0IHNwZWNpZmljIGF0dHJpYnV0ZXMgZXhwb3J0ZWQgdG8gc3lzZnMuCisgKgorICogIENvcHlyaWdodCAoYykgMjAwMyBTaWxpY29uIEdyYXBoaWNzLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisjaWZuZGVmIFNDU0lfVFJBTlNQT1JUX1NQSV9ICisjZGVmaW5lIFNDU0lfVFJBTlNQT1JUX1NQSV9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC90cmFuc3BvcnRfY2xhc3MuaD4KKworc3RydWN0IHNjc2lfdHJhbnNwb3J0X3RlbXBsYXRlOworCitzdHJ1Y3Qgc3BpX3RyYW5zcG9ydF9hdHRycyB7CisJaW50IHBlcmlvZDsJCS8qIHZhbHVlIGluIHRoZSBQUFIvU0RUUiBjb21tYW5kICovCisJaW50IG9mZnNldDsKKwl1bnNpZ25lZCBpbnQgd2lkdGg6MTsJLyogMCAtIG5hcnJvdywgMSAtIHdpZGUgKi8KKwl1bnNpZ25lZCBpbnQgaXU6MTsJLyogSW5mb3JtYXRpb24gVW5pdHMgZW5hYmxlZCAqLworCXVuc2lnbmVkIGludCBkdDoxOwkvKiBEVCBjbG9ja2luZyBlbmFibGVkICovCisJdW5zaWduZWQgaW50IHFhczoxOwkvKiBRdWljayBBcmJpdHJhdGlvbiBhbmQgU2VsZWN0aW9uIGVuYWJsZWQgKi8KKwl1bnNpZ25lZCBpbnQgd3JfZmxvdzoxOwkvKiBXcml0ZSBGbG93IGNvbnRyb2wgZW5hYmxlZCAqLworCXVuc2lnbmVkIGludCByZF9zdHJtOjE7CS8qIFJlYWQgc3RyZWFtaW5nIGVuYWJsZWQgKi8KKwl1bnNpZ25lZCBpbnQgcnRpOjE7CS8qIFJldGFpbiBUcmFpbmluZyBJbmZvcm1hdGlvbiAqLworCXVuc2lnbmVkIGludCBwY29tcF9lbjoxOy8qIFByZWNvbXBlbnNhdGlvbiBlbmFibGVkICovCisJdW5zaWduZWQgaW50IGluaXRpYWxfZHY6MTsgLyogRFYgZG9uZSB0byB0aGlzIHRhcmdldCB5ZXQgICovCisJdW5zaWduZWQgbG9uZyBmbGFnczsJLyogZmxhZ3MgZmllbGQgZm9yIGRyaXZlcnMgdG8gdXNlICovCisJLyogRGV2aWNlIFByb3BlcnRpZXMgZmllbGRzICovCisJdW5zaWduZWQgaW50IHN1cHBvcnRfc3luYzoxOyAvKiBzeW5jaHJvbm91cyBzdXBwb3J0ICovCisJdW5zaWduZWQgaW50IHN1cHBvcnRfd2lkZToxOyAvKiB3aWRlIHN1cHBvcnQgKi8KKwl1bnNpZ25lZCBpbnQgc3VwcG9ydF9kdDoxOyAvKiBhbGxvd3MgRFQgcGhhc2VzICovCisJdW5zaWduZWQgaW50IHN1cHBvcnRfZHRfb25seTsgLyogZGlzYWxsb3dzIFNUIHBoYXNlcyAqLworCXVuc2lnbmVkIGludCBzdXBwb3J0X2l1czsgLyogc3VwcG9ydCBJbmZvcm1hdGlvbiBVbml0cyAqLworCXVuc2lnbmVkIGludCBzdXBwb3J0X3FhczsgLyogc3VwcG9ydHMgcXVpY2sgYXJiaXRyYXRpb24gYW5kIHNlbGVjdGlvbiAqLworCS8qIFByaXZhdGUgRmllbGRzICovCisJdW5zaWduZWQgaW50IGR2X3BlbmRpbmc6MTsgLyogSW50ZXJuYWwgZmxhZyAqLworCXN0cnVjdCBzZW1hcGhvcmUgZHZfc2VtOyAvKiBzZW1hcGhvcmUgdG8gc2VyaWFsaXNlIGR2ICovCit9OworCitlbnVtIHNwaV9zaWduYWxfdHlwZSB7CisJU1BJX1NJR05BTF9VTktOT1dOID0gMSwKKwlTUElfU0lHTkFMX1NFLAorCVNQSV9TSUdOQUxfTFZELAorCVNQSV9TSUdOQUxfSFZELAorfTsKKworc3RydWN0IHNwaV9ob3N0X2F0dHJzIHsKKwllbnVtIHNwaV9zaWduYWxfdHlwZSBzaWduYWxsaW5nOworfTsKKworLyogYWNjZXNzb3IgZnVuY3Rpb25zICovCisjZGVmaW5lIHNwaV9wZXJpb2QoeCkJKCgoc3RydWN0IHNwaV90cmFuc3BvcnRfYXR0cnMgKikmKHgpLT5zdGFyZ2V0X2RhdGEpLT5wZXJpb2QpCisjZGVmaW5lIHNwaV9vZmZzZXQoeCkJKCgoc3RydWN0IHNwaV90cmFuc3BvcnRfYXR0cnMgKikmKHgpLT5zdGFyZ2V0X2RhdGEpLT5vZmZzZXQpCisjZGVmaW5lIHNwaV93aWR0aCh4KQkoKChzdHJ1Y3Qgc3BpX3RyYW5zcG9ydF9hdHRycyAqKSYoeCktPnN0YXJnZXRfZGF0YSktPndpZHRoKQorI2RlZmluZSBzcGlfaXUoeCkJKCgoc3RydWN0IHNwaV90cmFuc3BvcnRfYXR0cnMgKikmKHgpLT5zdGFyZ2V0X2RhdGEpLT5pdSkKKyNkZWZpbmUgc3BpX2R0KHgpCSgoKHN0cnVjdCBzcGlfdHJhbnNwb3J0X2F0dHJzICopJih4KS0+c3RhcmdldF9kYXRhKS0+ZHQpCisjZGVmaW5lIHNwaV9xYXMoeCkJKCgoc3RydWN0IHNwaV90cmFuc3BvcnRfYXR0cnMgKikmKHgpLT5zdGFyZ2V0X2RhdGEpLT5xYXMpCisjZGVmaW5lIHNwaV93cl9mbG93KHgpCSgoKHN0cnVjdCBzcGlfdHJhbnNwb3J0X2F0dHJzICopJih4KS0+c3RhcmdldF9kYXRhKS0+d3JfZmxvdykKKyNkZWZpbmUgc3BpX3JkX3N0cm0oeCkJKCgoc3RydWN0IHNwaV90cmFuc3BvcnRfYXR0cnMgKikmKHgpLT5zdGFyZ2V0X2RhdGEpLT5yZF9zdHJtKQorI2RlZmluZSBzcGlfcnRpKHgpCSgoKHN0cnVjdCBzcGlfdHJhbnNwb3J0X2F0dHJzICopJih4KS0+c3RhcmdldF9kYXRhKS0+cnRpKQorI2RlZmluZSBzcGlfcGNvbXBfZW4oeCkJKCgoc3RydWN0IHNwaV90cmFuc3BvcnRfYXR0cnMgKikmKHgpLT5zdGFyZ2V0X2RhdGEpLT5wY29tcF9lbikKKyNkZWZpbmUgc3BpX2luaXRpYWxfZHYoeCkJKCgoc3RydWN0IHNwaV90cmFuc3BvcnRfYXR0cnMgKikmKHgpLT5zdGFyZ2V0X2RhdGEpLT5pbml0aWFsX2R2KQorCisjZGVmaW5lIHNwaV9zdXBwb3J0X3N5bmMoeCkJKCgoc3RydWN0IHNwaV90cmFuc3BvcnRfYXR0cnMgKikmKHgpLT5zdGFyZ2V0X2RhdGEpLT5zdXBwb3J0X3N5bmMpCisjZGVmaW5lIHNwaV9zdXBwb3J0X3dpZGUoeCkJKCgoc3RydWN0IHNwaV90cmFuc3BvcnRfYXR0cnMgKikmKHgpLT5zdGFyZ2V0X2RhdGEpLT5zdXBwb3J0X3dpZGUpCisjZGVmaW5lIHNwaV9zdXBwb3J0X2R0KHgpCSgoKHN0cnVjdCBzcGlfdHJhbnNwb3J0X2F0dHJzICopJih4KS0+c3RhcmdldF9kYXRhKS0+c3VwcG9ydF9kdCkKKyNkZWZpbmUgc3BpX3N1cHBvcnRfZHRfb25seSh4KQkoKChzdHJ1Y3Qgc3BpX3RyYW5zcG9ydF9hdHRycyAqKSYoeCktPnN0YXJnZXRfZGF0YSktPnN1cHBvcnRfZHRfb25seSkKKyNkZWZpbmUgc3BpX3N1cHBvcnRfaXVzKHgpCSgoKHN0cnVjdCBzcGlfdHJhbnNwb3J0X2F0dHJzICopJih4KS0+c3RhcmdldF9kYXRhKS0+c3VwcG9ydF9pdXMpCisjZGVmaW5lIHNwaV9zdXBwb3J0X3Fhcyh4KQkoKChzdHJ1Y3Qgc3BpX3RyYW5zcG9ydF9hdHRycyAqKSYoeCktPnN0YXJnZXRfZGF0YSktPnN1cHBvcnRfcWFzKQorCisjZGVmaW5lIHNwaV9mbGFncyh4KQkoKChzdHJ1Y3Qgc3BpX3RyYW5zcG9ydF9hdHRycyAqKSYoeCktPnN0YXJnZXRfZGF0YSktPmZsYWdzKQorI2RlZmluZSBzcGlfc2lnbmFsbGluZyhoKQkoKChzdHJ1Y3Qgc3BpX2hvc3RfYXR0cnMgKikoaCktPnNob3N0X2RhdGEpLT5zaWduYWxsaW5nKQorCisKKworLyogVGhlIGZ1bmN0aW9ucyBieSB3aGljaCB0aGUgdHJhbnNwb3J0IGNsYXNzIGFuZCB0aGUgZHJpdmVyIGNvbW11bmljYXRlICovCitzdHJ1Y3Qgc3BpX2Z1bmN0aW9uX3RlbXBsYXRlIHsKKwl2b2lkCSgqZ2V0X3BlcmlvZCkoc3RydWN0IHNjc2lfdGFyZ2V0ICopOworCXZvaWQJKCpzZXRfcGVyaW9kKShzdHJ1Y3Qgc2NzaV90YXJnZXQgKiwgaW50KTsKKwl2b2lkCSgqZ2V0X29mZnNldCkoc3RydWN0IHNjc2lfdGFyZ2V0ICopOworCXZvaWQJKCpzZXRfb2Zmc2V0KShzdHJ1Y3Qgc2NzaV90YXJnZXQgKiwgaW50KTsKKwl2b2lkCSgqZ2V0X3dpZHRoKShzdHJ1Y3Qgc2NzaV90YXJnZXQgKik7CisJdm9pZAkoKnNldF93aWR0aCkoc3RydWN0IHNjc2lfdGFyZ2V0ICosIGludCk7CisJdm9pZAkoKmdldF9pdSkoc3RydWN0IHNjc2lfdGFyZ2V0ICopOworCXZvaWQJKCpzZXRfaXUpKHN0cnVjdCBzY3NpX3RhcmdldCAqLCBpbnQpOworCXZvaWQJKCpnZXRfZHQpKHN0cnVjdCBzY3NpX3RhcmdldCAqKTsKKwl2b2lkCSgqc2V0X2R0KShzdHJ1Y3Qgc2NzaV90YXJnZXQgKiwgaW50KTsKKwl2b2lkCSgqZ2V0X3Fhcykoc3RydWN0IHNjc2lfdGFyZ2V0ICopOworCXZvaWQJKCpzZXRfcWFzKShzdHJ1Y3Qgc2NzaV90YXJnZXQgKiwgaW50KTsKKwl2b2lkCSgqZ2V0X3dyX2Zsb3cpKHN0cnVjdCBzY3NpX3RhcmdldCAqKTsKKwl2b2lkCSgqc2V0X3dyX2Zsb3cpKHN0cnVjdCBzY3NpX3RhcmdldCAqLCBpbnQpOworCXZvaWQJKCpnZXRfcmRfc3RybSkoc3RydWN0IHNjc2lfdGFyZ2V0ICopOworCXZvaWQJKCpzZXRfcmRfc3RybSkoc3RydWN0IHNjc2lfdGFyZ2V0ICosIGludCk7CisJdm9pZAkoKmdldF9ydGkpKHN0cnVjdCBzY3NpX3RhcmdldCAqKTsKKwl2b2lkCSgqc2V0X3J0aSkoc3RydWN0IHNjc2lfdGFyZ2V0ICosIGludCk7CisJdm9pZAkoKmdldF9wY29tcF9lbikoc3RydWN0IHNjc2lfdGFyZ2V0ICopOworCXZvaWQJKCpzZXRfcGNvbXBfZW4pKHN0cnVjdCBzY3NpX3RhcmdldCAqLCBpbnQpOworCXZvaWQJKCpnZXRfc2lnbmFsbGluZykoc3RydWN0IFNjc2lfSG9zdCAqKTsKKwl2b2lkCSgqc2V0X3NpZ25hbGxpbmcpKHN0cnVjdCBTY3NpX0hvc3QgKiwgZW51bSBzcGlfc2lnbmFsX3R5cGUpOworCS8qIFRoZSBkcml2ZXIgc2V0cyB0aGVzZSB0byB0ZWxsIHRoZSB0cmFuc3BvcnQgY2xhc3MgaXQKKwkgKiB3YW50cyB0aGUgYXR0cmlidXRlcyBkaXNwbGF5ZWQgaW4gc3lzZnMuICBJZiB0aGUgc2hvd18gZmxhZworCSAqIGlzIG5vdCBzZXQsIHRoZSBhdHRyaWJ1dGUgd2lsbCBiZSBwcml2YXRlIHRvIHRoZSB0cmFuc3BvcnQKKwkgKiBjbGFzcyAqLworCXVuc2lnbmVkIGxvbmcJc2hvd19wZXJpb2Q6MTsKKwl1bnNpZ25lZCBsb25nCXNob3dfb2Zmc2V0OjE7CisJdW5zaWduZWQgbG9uZwlzaG93X3dpZHRoOjE7CisJdW5zaWduZWQgbG9uZwlzaG93X2l1OjE7CisJdW5zaWduZWQgbG9uZwlzaG93X2R0OjE7CisJdW5zaWduZWQgbG9uZwlzaG93X3FhczoxOworCXVuc2lnbmVkIGxvbmcJc2hvd193cl9mbG93OjE7CisJdW5zaWduZWQgbG9uZwlzaG93X3JkX3N0cm06MTsKKwl1bnNpZ25lZCBsb25nCXNob3dfcnRpOjE7CisJdW5zaWduZWQgbG9uZwlzaG93X3Bjb21wX2VuOjE7Cit9OworCitzdHJ1Y3Qgc2NzaV90cmFuc3BvcnRfdGVtcGxhdGUgKnNwaV9hdHRhY2hfdHJhbnNwb3J0KHN0cnVjdCBzcGlfZnVuY3Rpb25fdGVtcGxhdGUgKik7Cit2b2lkIHNwaV9yZWxlYXNlX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV90cmFuc3BvcnRfdGVtcGxhdGUgKik7Cit2b2lkIHNwaV9zY2hlZHVsZV9kdl9kZXZpY2Uoc3RydWN0IHNjc2lfZGV2aWNlICopOwordm9pZCBzcGlfZHZfZGV2aWNlKHN0cnVjdCBzY3NpX2RldmljZSAqKTsKK3ZvaWQgc3BpX2Rpc3BsYXlfeGZlcl9hZ3JlZW1lbnQoc3RydWN0IHNjc2lfdGFyZ2V0ICopOworCisjZW5kaWYgLyogU0NTSV9UUkFOU1BPUlRfU1BJX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpY2FtLmggYi9pbmNsdWRlL3Njc2kvc2NzaWNhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0ZWRlNDcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaWNhbS5oCkBAIC0wLDAgKzEsMTkgQEAKKy8qCisgKiBzY3NpY2FtLmggLSBTQ1NJIENBTSBzdXBwb3J0IGZ1bmN0aW9ucywgdXNlIGZvciBIRElPX0dFVEdFTywgZXRjLgorICoKKyAqIENvcHlyaWdodCAxOTkzLCAxOTk0IERyZXcgRWNraGFyZHQKKyAqICAgICAgVmlzaW9uYXJ5IENvbXB1dGluZyAKKyAqICAgICAgKFVuaXggYW5kIExpbnV4IGNvbnN1bHRpbmcgYW5kIGN1c3RvbSBwcm9ncmFtbWluZykKKyAqICAgICAgZHJld0BDb2xvcmFkby5FRFUKKyAqCSsxICgzMDMpIDc4Ni03OTc1CisgKgorICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSBjb25zdWx0IHRoZSBTQ1NJLUNBTSBkcmFmdC4KKyAqLworCisjaWZuZGVmIFNDU0lDQU1fSAorI2RlZmluZSBTQ1NJQ0FNX0gKK2V4dGVybiBpbnQgc2NzaWNhbV9iaW9zX3BhcmFtIChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBjYXBhY2l0eSwgaW50ICppcCk7CitleHRlcm4gaW50IHNjc2lfcGFydHNpemUodW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBsb25nIGNhcGFjaXR5LAorICAgICAgICAgICB1bnNpZ25lZCBpbnQgICpjeWxzLCB1bnNpZ25lZCBpbnQgKmhkcywgdW5zaWduZWQgaW50ICpzZWNzKTsKK2V4dGVybiB1bnNpZ25lZCBjaGFyICpzY3NpX2Jpb3NfcHRhYmxlKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpOworI2VuZGlmIC8qIGRlZiBTQ1NJQ0FNX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zZy5oIGIvaW5jbHVkZS9zY3NpL3NnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE0ODdmZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvc2NzaS9zZy5oCkBAIC0wLDAgKzEsMzI2IEBACisjaWZuZGVmIF9TQ1NJX0dFTkVSSUNfSAorI2RlZmluZSBfU0NTSV9HRU5FUklDX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisKKy8qCisgICBIaXN0b3J5OgorICAgIFN0YXJ0ZWQ6IEF1ZyA5IGJ5IExhd3JlbmNlIEZvYXJkIChlbnRyb3B5QHdvcmxkLnN0ZC5jb20pLCB0byBhbGxvdyB1c2VyCisgICAgIHByb2Nlc3MgY29udHJvbCBvZiBTQ1NJIGRldmljZXMuCisgICAgRGV2ZWxvcG1lbnQgU3BvbnNvcmVkIGJ5IEtpbGx5IENvcnAuIE5ZIE5ZCitPcmlnaW5hbCBkcml2ZXIgKHNnLmgpOgorKiAgICAgICBDb3B5cmlnaHQgKEMpIDE5OTIgTGF3cmVuY2UgRm9hcmQKK1ZlcnNpb24gMiBhbmQgMyBleHRlbnNpb25zIHRvIGRyaXZlcjoKKyogICAgICAgQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAwMyBEb3VnbGFzIEdpbGJlcnQKKworICAgIFZlcnNpb246IDMuNS4yOSAoMjAwMzA1MjkpCisgICAgVGhpcyB2ZXJzaW9uIGlzIGZvciAyLjUgc2VyaWVzIGtlcm5lbHMuCisKKyAgICBDaGFuZ2VzIHNpbmNlIDMuNS4yOCAoMjAwMzAzMDgpCisJLSBmaXggYnVnIGludHJvZHVjZWQgaW4gdmVyc2lvbiAzLjEuMjQgKGxhc3Qgc2VnbWVudCBvZiBzZ2F0IGxpc3QpCisgICAgQ2hhbmdlcyBzaW5jZSAzLjUuMjcgKDIwMDIwODEyKQorICAgIAktIHJlbW92ZSBwcm9jZnMgZW50cmllczogaG9zdHMsIGhvc3RfaGRyICsgaG9zdF9zdHJzIChub3cgaW4gc3lzZnMpCisJLSBhZGQgc3lzZnMgc2cgZHJpdmVyIHBhcmFtczogZGVmX3Jlc2VydmVkX3NpemUsIGFsbG93X2RpbywgdmVyc2lvbgorCS0gbmV3IGJvb3Qgb3B0aW9uOiAic2dfYWxsb3dfZGlvIiBhbmQgbW9kdWxlIHBhcmFtZXRlcjogImFsbG93X2RpbyIKKyAgICAgICAgLSBtdWx0aXBsZSBpbnRlcm5hbCBjaGFuZ2VzIGR1ZSB0byBzY3NpIHN1YnN5c3RlbSByZXdvcmsJCisgICAgQ2hhbmdlcyBzaW5jZSAzLjUuMjYgKDIwMDIwNzA4KQorCS0gcmUtYWRkIGRpcmVjdCBJTyB1c2luZyBLYWkgTWFraXNhcmEncyB3b3JrCisJLSByZS10YWIgdG8gOCwgc3RhcnQgdXNpbmcgQzk5LWlzbXMKKwktIHNpbXBsaWZ5IG1lbW9yeSBtYW5hZ2VtZW50CisgICAgQ2hhbmdlcyBzaW5jZSAzLjUuMjUgKDIwMDIwNTA0KQorCS0gZHJpdmVyZnMgYWRkaXRpb25zCisJLSBjb3B5X3RvL2Zyb21fdXNlcigpIGZpeGVzIFtXaWxsaWFtIFN0aW5zb25dCisJLSBkaXNhYmxlIGtpb2J1ZnMgc3VwcG9ydAorCisgICAgRm9yIGEgZnVsbCBjaGFuZ2Vsb2cgc2VlIGh0dHA6Ly93d3cudG9ycXVlLm5ldC9zZworCitNYXAgb2YgU0cgdmVyaW9ucyB0byB0aGUgTGludXgga2VybmVscyBpbiB3aGljaCB0aGV5IGFwcGVhcjoKKyAgICAgICAtLS0tLS0tLS0tICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgb3JpZ2luYWwgICAgICAgICAgYWxsIGtlcm5lbHMgPCAyLjIuNgorICAgICAgIDIuMS40MCAgICAgICAgICAgIDIuMi4yMAorICAgICAgIDMuMC54ICAgICAgICAgICAgIG9wdGlvbmFsIHZlcnNpb24gMyBzZyBkcml2ZXIgZm9yIDIuMiBzZXJpZXMKKyAgICAgICAzLjEuMTcrKyAgICAgICAgICAyLjQuMCsrCisgICAgICAgMy41LjIzKysgICAgICAgICAgMi41LjArKworCitNYWpvciBuZXcgZmVhdHVyZXMgaW4gU0cgMy54IGRyaXZlciAoY2YgU0cgMi54IGRyaXZlcnMpCisJLSBTR19JTyBpb2N0bCgpIGNvbWJpbmVzIGZ1bmN0aW9uIGlmIHdyaXRlKCkgYW5kIHJlYWQoKQorCS0gbmV3IGludGVyZmFjZSAoc2dfaW9faGRyX3QpIGJ1dCBzdGlsbCBzdXBwb3J0cyBvbGQgaW50ZXJmYWNlCisJLSBzY2F0dGVyL2dhdGhlciBpbiB1c2VyIHNwYWNlLCBkaXJlY3QgSU8sIGFuZCBtbWFwIHN1cHBvcnRlZAorCisgVGhlIG5vcm1hbCBhY3Rpb24gb2YgdGhpcyBkcml2ZXIgaXMgdG8gdXNlIHRoZSBhZGFwdGVyIChIQkEpIGRyaXZlciB0byBETUEKKyBkYXRhIGludG8ga2VybmVsIGJ1ZmZlcnMgYW5kIHRoZW4gdXNlIHRoZSBDUFUgdG8gY29weSB0aGUgZGF0YSBpbnRvIHRoZSAKKyB1c2VyIHNwYWNlICh2aWNlIHZlcnNhIGZvciB3cml0ZXMpLiBUaGF0IGlzIGNhbGxlZCAiaW5kaXJlY3QiIElPIGR1ZSB0byAKKyB0aGUgZG91YmxlIGhhbmRsaW5nIG9mIGRhdGEuIFRoZXJlIGFyZSB0d28gbWV0aG9kcyBvZmZlcmVkIHRvIHJlbW92ZSB0aGUKKyByZWR1bmRhbnQgY29weTogMSkgZGlyZWN0IElPIHdoaWNoIHVzZXMgdGhlIGtlcm5lbCBraW9idWYgbWVjaGFuaXNtIGFuZCAKKyAyKSB1c2luZyB0aGUgbW1hcCgpIHN5c3RlbSBjYWxsIHRvIG1hcCB0aGUgcmVzZXJ2ZSBidWZmZXIgKHRoaXMgZHJpdmVyIGhhcyAKKyBvbmUgcmVzZXJ2ZSBidWZmZXIgcGVyIGZkKSBpbnRvIHRoZSB1c2VyIHNwYWNlLiBCb3RoIGhhdmUgdGhlaXIgYWR2YW50YWdlcy4KKyBJbiB0ZXJtcyBvZiBhYnNvbHV0ZSBzcGVlZCBtbWFwKCkgaXMgZmFzdGVyLiBJZiBzcGVlZCBpcyBub3QgYSBjb25jZXJuLCAKKyBpbmRpcmVjdCBJTyBzaG91bGQgYmUgZmluZS4gUmVhZCB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworICoqIE4uQi4gVG8gdXNlIGRpcmVjdCBJTyAnZWNobyAxID4gL3Byb2Mvc2NzaS9zZy9hbGxvd19kaW8nIG1heSBiZQorICAgICAgICAgbmVlZGVkLiBUaGF0IHBzZXVkbyBmaWxlJ3MgY29udGVudCBpcyBkZWZhdWx0ZWQgdG8gMC4gKioKKyAKKyBIaXN0b3JpY2FsIG5vdGU6IHRoaXMgU0NTSSBwYXNzLXRocm91Z2ggZHJpdmVyIGhhcyBiZWVuIGtub3duIGFzICJzZyIgZm9yIAorIGEgZGVjYWRlLiBJbiBicm9hZGVyIGtlcm5lbCBkaXNjdXNzaW9ucyAic2ciIGlzIHVzZWQgdG8gcmVmZXIgdG8gc2NhdHRlcgorIGdhdGhlciB0ZWNobmlxdWVzLiBUaGUgY29udGV4dCBzaG91bGQgY2xhcmlmeSB3aGljaCAic2ciIGlzIHJlZmVycmVkIHRvLgorCisgRG9jdW1lbnRhdGlvbgorID09PT09PT09PT09PT0KKyBBIHdlYiBzaXRlIGZvciB0aGUgU0cgZGV2aWNlIGRyaXZlciBjYW4gYmUgZm91bmQgYXQ6CisJaHR0cDovL3d3dy50b3JxdWUubmV0L3NnICBbYWx0ZXJuYXRpdmVseSBjaGVjayB0aGUgTUFJTlRBSU5FUlMgZmlsZV0KKyBUaGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIHNnIHZlcnNpb24gMyBkcml2ZXIgY2FuIGJlIGZvdW5kIGF0OgorIAlodHRwOi8vd3d3LnRvcnF1ZS5uZXQvc2cvcC9zZ192M19oby5odG1sCisgVGhpcyBpcyBhIHJlbmRlcmluZyBmcm9tIERvY0Jvb2sgc291cmNlIFtjaGFuZ2UgdGhlIGV4dGVuc2lvbiB0byAic2dtbCIKKyBvciAieG1sIl0uIFRoZXJlIGFyZSByZW5kZXJpbmdzIGluICJwcyIsICJwZGYiLCAicnRmIiBhbmQgInR4dCIgKHNvb24pLgorCisgVGhlIG9sZGVyLCB2ZXJzaW9uIDIgZG9jdW1lbnRzIGRpc2N1c3MgdGhlIG9yaWdpbmFsIHNnIGludGVyZmFjZSBpbiBkZXRhaWw6CisJaHR0cDovL3d3dy50b3JxdWUubmV0L3NnL3Avc2NzaS1nZW5lcmljLnR4dAorCWh0dHA6Ly93d3cudG9ycXVlLm5ldC9zZy9wL3Njc2ktZ2VuZXJpY19sb25nLnR4dAorIEEgdmVyc2lvbiBvZiB0aGlzIGRvY3VtZW50IChwb3RlbnRpYWxseSBvdXQgb2YgZGF0ZSkgbWF5IGFsc28gYmUgZm91bmQgaW4KKyB0aGUga2VybmVsIHNvdXJjZSB0cmVlLCBwcm9iYWJseSBhdDoKKyAgICAgICAgRG9jdW1lbnRhdGlvbi9zY3NpL3Njc2ktZ2VuZXJpYy50eHQgLgorCisgVXRpbGl0eSBhbmQgdGVzdCBwcm9ncmFtcyBhcmUgYXZhaWxhYmxlIGF0IHRoZSBzZyB3ZWIgc2l0ZS4gVGhleSBhcmUgCisgYnVuZGxlZCBhcyBzZ191dGlscyAoZm9yIHRoZSBsayAyLjIgc2VyaWVzKSBhbmQgc2czX3V0aWxzIChmb3IgdGhlCisgbGsgMi40IHNlcmllcykuCisKKyBUaGVyZSBpcyBhIEhPV1RPIG9uIHRoZSBMaW51eCBTQ1NJIHN1YnN5c3RlbSBpbiB0aGUgbGsgMi40IHNlcmllcyBhdDoKKyAJaHR0cDovL3d3dy5saW51eGRvYy5vcmcvSE9XVE8vU0NTSS0yLjQtSE9XVE8KKyovCisKKworLyogTmV3IGludGVyZmFjZSBpbnRyb2R1Y2VkIGluIHRoZSAzLnggU0cgZHJpdmVycyBmb2xsb3dzICovCisKK3R5cGVkZWYgc3RydWN0IHNnX2lvdmVjIC8qIHNhbWUgc3RydWN0dXJlIGFzIHVzZWQgYnkgcmVhZHYoKSBMaW51eCBzeXN0ZW0gKi8KK3sgICAgICAgICAgICAgICAgICAgICAgIC8qIGNhbGwuIEl0IGRlZmluZXMgb25lIHNjYXR0ZXItZ2F0aGVyIGVsZW1lbnQuICovCisgICAgdm9pZCBfX3VzZXIgKmlvdl9iYXNlOyAgICAgIC8qIFN0YXJ0aW5nIGFkZHJlc3MgICovCisgICAgc2l6ZV90IGlvdl9sZW47ICAgICAgICAgICAgIC8qIExlbmd0aCBpbiBieXRlcyAgKi8KK30gc2dfaW92ZWNfdDsKKworCit0eXBlZGVmIHN0cnVjdCBzZ19pb19oZHIKK3sKKyAgICBpbnQgaW50ZXJmYWNlX2lkOyAgICAgICAgICAgLyogW2ldICdTJyBmb3IgU0NTSSBnZW5lcmljIChyZXF1aXJlZCkgKi8KKyAgICBpbnQgZHhmZXJfZGlyZWN0aW9uOyAgICAgICAgLyogW2ldIGRhdGEgdHJhbnNmZXIgZGlyZWN0aW9uICAqLworICAgIHVuc2lnbmVkIGNoYXIgY21kX2xlbjsgICAgICAvKiBbaV0gU0NTSSBjb21tYW5kIGxlbmd0aCAoIDw9IDE2IGJ5dGVzKSAqLworICAgIHVuc2lnbmVkIGNoYXIgbXhfc2JfbGVuOyAgICAvKiBbaV0gbWF4IGxlbmd0aCB0byB3cml0ZSB0byBzYnAgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCBpb3ZlY19jb3VudDsgLyogW2ldIDAgaW1wbGllcyBubyBzY2F0dGVyIGdhdGhlciAqLworICAgIHVuc2lnbmVkIGludCBkeGZlcl9sZW47ICAgICAvKiBbaV0gYnl0ZSBjb3VudCBvZiBkYXRhIHRyYW5zZmVyICovCisgICAgdm9pZCBfX3VzZXIgKmR4ZmVycDsJLyogW2ldLCBbKmlvXSBwb2ludHMgdG8gZGF0YSB0cmFuc2ZlciBtZW1vcnkKKwkJCQkJICAgICAgb3Igc2NhdHRlciBnYXRoZXIgbGlzdCAqLworICAgIHVuc2lnbmVkIGNoYXIgX191c2VyICpjbWRwOyAvKiBbaV0sIFsqaV0gcG9pbnRzIHRvIGNvbW1hbmQgdG8gcGVyZm9ybSAqLworICAgIHZvaWQgX191c2VyICpzYnA7CQkvKiBbaV0sIFsqb10gcG9pbnRzIHRvIHNlbnNlX2J1ZmZlciBtZW1vcnkgKi8KKyAgICB1bnNpZ25lZCBpbnQgdGltZW91dDsgICAgICAgLyogW2ldIE1BWF9VSU5ULT5ubyB0aW1lb3V0ICh1bml0OiBtaWxsaXNlYykgKi8KKyAgICB1bnNpZ25lZCBpbnQgZmxhZ3M7ICAgICAgICAgLyogW2ldIDAgLT4gZGVmYXVsdCwgc2VlIFNHX0ZMQUcuLi4gKi8KKyAgICBpbnQgcGFja19pZDsgICAgICAgICAgICAgICAgLyogW2ktPm9dIHVudXNlZCBpbnRlcm5hbGx5IChub3JtYWxseSkgKi8KKyAgICB2b2lkIF9fdXNlciAqIHVzcl9wdHI7ICAgICAgLyogW2ktPm9dIHVudXNlZCBpbnRlcm5hbGx5ICovCisgICAgdW5zaWduZWQgY2hhciBzdGF0dXM7ICAgICAgIC8qIFtvXSBzY3NpIHN0YXR1cyAqLworICAgIHVuc2lnbmVkIGNoYXIgbWFza2VkX3N0YXR1czsvKiBbb10gc2hpZnRlZCwgbWFza2VkIHNjc2kgc3RhdHVzICovCisgICAgdW5zaWduZWQgY2hhciBtc2dfc3RhdHVzOyAgIC8qIFtvXSBtZXNzYWdpbmcgbGV2ZWwgZGF0YSAob3B0aW9uYWwpICovCisgICAgdW5zaWduZWQgY2hhciBzYl9sZW5fd3I7ICAgIC8qIFtvXSBieXRlIGNvdW50IGFjdHVhbGx5IHdyaXR0ZW4gdG8gc2JwICovCisgICAgdW5zaWduZWQgc2hvcnQgaG9zdF9zdGF0dXM7IC8qIFtvXSBlcnJvcnMgZnJvbSBob3N0IGFkYXB0ZXIgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCBkcml2ZXJfc3RhdHVzOy8qIFtvXSBlcnJvcnMgZnJvbSBzb2Z0d2FyZSBkcml2ZXIgKi8KKyAgICBpbnQgcmVzaWQ7ICAgICAgICAgICAgICAgICAgLyogW29dIGR4ZmVyX2xlbiAtIGFjdHVhbF90cmFuc2ZlcnJlZCAqLworICAgIHVuc2lnbmVkIGludCBkdXJhdGlvbjsgICAgICAvKiBbb10gdGltZSB0YWtlbiBieSBjbWQgKHVuaXQ6IG1pbGxpc2VjKSAqLworICAgIHVuc2lnbmVkIGludCBpbmZvOyAgICAgICAgICAvKiBbb10gYXV4aWxpYXJ5IGluZm9ybWF0aW9uICovCit9IHNnX2lvX2hkcl90OyAgLyogNjQgYnl0ZXMgbG9uZyAob24gaTM4NikgKi8KKworI2RlZmluZSBTR19JTlRFUkZBQ0VfSURfT1JJRyAnUycKKworLyogVXNlIG5lZ2F0aXZlIHZhbHVlcyB0byBmbGFnIGRpZmZlcmVuY2UgZnJvbSBvcmlnaW5hbCBzZ19oZWFkZXIgc3RydWN0dXJlICovCisjZGVmaW5lIFNHX0RYRkVSX05PTkUgKC0xKSAgICAgIC8qIGUuZy4gYSBTQ1NJIFRlc3QgVW5pdCBSZWFkeSBjb21tYW5kICovCisjZGVmaW5lIFNHX0RYRkVSX1RPX0RFViAoLTIpICAgIC8qIGUuZy4gYSBTQ1NJIFdSSVRFIGNvbW1hbmQgKi8KKyNkZWZpbmUgU0dfRFhGRVJfRlJPTV9ERVYgKC0zKSAgLyogZS5nLiBhIFNDU0kgUkVBRCBjb21tYW5kICovCisjZGVmaW5lIFNHX0RYRkVSX1RPX0ZST01fREVWICgtNCkgLyogdHJlYXRlZCBsaWtlIFNHX0RYRkVSX0ZST01fREVWIHdpdGggdGhlCisJCQkJICAgYWRkaXRpb25hbCBwcm9wZXJ0eSB0aGFuIGR1cmluZyBpbmRpcmVjdAorCQkJCSAgIElPIHRoZSB1c2VyIGJ1ZmZlciBpcyBjb3BpZWQgaW50byB0aGUKKwkJCQkgICBrZXJuZWwgYnVmZmVycyBiZWZvcmUgdGhlIHRyYW5zZmVyICovCisjZGVmaW5lIFNHX0RYRkVSX1VOS05PV04gKC01KSAgIC8qIFVua25vd24gZGF0YSBkaXJlY3Rpb24gKi8KKworLyogZm9sbG93aW5nIGZsYWcgdmFsdWVzIGNhbiBiZSAib3IiLWVkIHRvZ2V0aGVyICovCisjZGVmaW5lIFNHX0ZMQUdfRElSRUNUX0lPIDEgICAgIC8qIGRlZmF1bHQgaXMgaW5kaXJlY3QgSU8gKi8KKyNkZWZpbmUgU0dfRkxBR19VTlVTRURfTFVOX0lOSElCSVQgMiAgIC8qIGRlZmF1bHQgaXMgb3ZlcndyaXRlIGx1biBpbiBTQ1NJICovCisJCQkJLyogY29tbWFuZCBibG9jayAod2hlbiA8PSBTQ1NJXzIpICovCisjZGVmaW5lIFNHX0ZMQUdfTU1BUF9JTyA0ICAgICAgIC8qIHJlcXVlc3QgbWVtb3J5IG1hcHBlZCBJTyAqLworI2RlZmluZSBTR19GTEFHX05PX0RYRkVSIDB4MTAwMDAgLyogbm8gdHJhbnNmZXIgb2Yga2VybmVsIGJ1ZmZlcnMgdG8vZnJvbSAqLworCQkJCS8qIHVzZXIgc3BhY2UgKGRlYnVnIGluZGlyZWN0IElPKSAqLworCisvKiBmb2xsb3dpbmcgJ2luZm8nIHZhbHVlcyBhcmUgIm9yIi1lZCB0b2dldGhlciAqLworI2RlZmluZSBTR19JTkZPX09LX01BU0sgMHgxCisjZGVmaW5lIFNHX0lORk9fT0sgMHgwICAgICAgICAgIC8qIG5vIHNlbnNlLCBob3N0IG5vciBkcml2ZXIgIm5vaXNlIiAqLworI2RlZmluZSBTR19JTkZPX0NIRUNLIDB4MSAgICAgICAvKiBzb21ldGhpbmcgYWJub3JtYWwgaGFwcGVuZWQgKi8KKworI2RlZmluZSBTR19JTkZPX0RJUkVDVF9JT19NQVNLIDB4NgorI2RlZmluZSBTR19JTkZPX0lORElSRUNUX0lPIDB4MCAvKiBkYXRhIHhmZXIgdmlhIGtlcm5lbCBidWZmZXJzIChvciBubyB4ZmVyKSAqLworI2RlZmluZSBTR19JTkZPX0RJUkVDVF9JTyAweDIgICAvKiBkaXJlY3QgSU8gcmVxdWVzdGVkIGFuZCBwZXJmb3JtZWQgKi8KKyNkZWZpbmUgU0dfSU5GT19NSVhFRF9JTyAweDQgICAgLyogcGFydCBkaXJlY3QsIHBhcnQgaW5kaXJlY3QgSU8gKi8KKworCit0eXBlZGVmIHN0cnVjdCBzZ19zY3NpX2lkIHsgLyogdXNlZCBieSBTR19HRVRfU0NTSV9JRCBpb2N0bCgpICovCisgICAgaW50IGhvc3Rfbm87ICAgICAgICAvKiBhcyBpbiAic2NzaTxuPiIgd2hlcmUgJ24nIGlzIG9uZSBvZiAwLCAxLCAyIGV0YyAqLworICAgIGludCBjaGFubmVsOworICAgIGludCBzY3NpX2lkOyAgICAgICAgLyogc2NzaSBpZCBvZiB0YXJnZXQgZGV2aWNlICovCisgICAgaW50IGx1bjsKKyAgICBpbnQgc2NzaV90eXBlOyAgICAgIC8qIFRZUEVfLi4uIGRlZmluZWQgaW4gc2NzaS9zY3NpLmggKi8KKyAgICBzaG9ydCBoX2NtZF9wZXJfbHVuOy8qIGhvc3QgKGFkYXB0ZXIpIG1heGltdW0gY29tbWFuZHMgcGVyIGx1biAqLworICAgIHNob3J0IGRfcXVldWVfZGVwdGg7LyogZGV2aWNlIChvciBhZGFwdGVyKSBtYXhpbXVtIHF1ZXVlIGxlbmd0aCAqLworICAgIGludCB1bnVzZWRbMl07ICAgICAgLyogcHJvYmFibHkgZmluZCBhIGdvb2QgdXNlLCBzZXQgMCBmb3Igbm93ICovCit9IHNnX3Njc2lfaWRfdDsgLyogMzIgYnl0ZXMgbG9uZyBvbiBpMzg2ICovCisKK3R5cGVkZWYgc3RydWN0IHNnX3JlcV9pbmZvIHsgLyogdXNlZCBieSBTR19HRVRfUkVRVUVTVF9UQUJMRSBpb2N0bCgpICovCisgICAgY2hhciByZXFfc3RhdGU7ICAgICAvKiAwIC0+IG5vdCB1c2VkLCAxIC0+IHdyaXR0ZW4sIDIgLT4gcmVhZHkgdG8gcmVhZCAqLworICAgIGNoYXIgb3JwaGFuOyAgICAgICAgLyogMCAtPiBub3JtYWwgcmVxdWVzdCwgMSAtPiBmcm9tIGludGVycnVwZWQgU0dfSU8gKi8KKyAgICBjaGFyIHNnX2lvX293bmVkOyAgIC8qIDAgLT4gY29tcGxldGUgd2l0aCByZWFkKCksIDEgLT4gb3duZWQgYnkgU0dfSU8gKi8KKyAgICBjaGFyIHByb2JsZW07ICAgICAgIC8qIDAgLT4gbm8gcHJvYmxlbSBkZXRlY3RlZCwgMSAtPiBlcnJvciB0byByZXBvcnQgKi8KKyAgICBpbnQgcGFja19pZDsgICAgICAgIC8qIHBhY2tfaWQgYXNzb2NpYXRlZCB3aXRoIHJlcXVlc3QgKi8KKyAgICB2b2lkIF9fdXNlciAqdXNyX3B0cjsgICAgIC8qIHVzZXIgcHJvdmlkZWQgcG9pbnRlciAoaW4gbmV3IGludGVyZmFjZSkgKi8KKyAgICB1bnNpZ25lZCBpbnQgZHVyYXRpb247IC8qIG1pbGxpc2VjcyBlbGFwc2VkIHNpbmNlIHdyaXR0ZW4gKHJlcV9zdGF0ZT09MSkKKwkJCSAgICAgIG9yIHJlcXVlc3QgZHVyYXRpb24gKHJlcV9zdGF0ZT09MikgKi8KKyAgICBpbnQgdW51c2VkOworfSBzZ19yZXFfaW5mb190OyAvKiAyMCBieXRlcyBsb25nIG9uIGkzODYgKi8KKworCisvKiBJT0NUTHM6IFRob3NlIGlvY3RscyB0aGF0IGFyZSByZWxldmFudCB0byB0aGUgU0cgMy54IGRyaXZlcnMgZm9sbG93LgorIFtUaG9zZSB0aGF0IG9ubHkgYXBwbHkgdG8gdGhlIFNHIDIueCBkcml2ZXJzIGFyZSBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLl0KKyAoX0dFVF9zIHlpZWxkIHJlc3VsdCB2aWEgJ2ludCAqJyAzcmQgYXJndW1lbnQgdW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQpICovCisKKyNkZWZpbmUgU0dfRU1VTEFURURfSE9TVCAweDIyMDMgLyogdHJ1ZSBmb3IgZW11bGF0ZWQgaG9zdCBhZGFwdGVyIChBVEFQSSkgKi8KKworLyogVXNlZCB0byBjb25maWd1cmUgU0NTSSBjb21tYW5kIHRyYW5zZm9ybWF0aW9uIGxheWVyIGZvciBBVEFQSSBkZXZpY2VzICovCisvKiBPbmx5IHN1cHBvcnRlZCBieSB0aGUgaWRlLXNjc2kgZHJpdmVyICovCisjZGVmaW5lIFNHX1NFVF9UUkFOU0ZPUk0gMHgyMjA0IC8qIE4uQi4gM3JkIGFyZyBpcyBub3QgcG9pbnRlciBidXQgdmFsdWU6ICovCisJCSAgICAgIC8qIDNyZCBhcmcgPSAwIHRvIGRpc2FibGUgdHJhbnNmb3JtLCAxIHRvIGVuYWJsZSBpdCAqLworI2RlZmluZSBTR19HRVRfVFJBTlNGT1JNIDB4MjIwNQorCisjZGVmaW5lIFNHX1NFVF9SRVNFUlZFRF9TSVpFIDB4MjI3NSAgLyogcmVxdWVzdCBhIG5ldyByZXNlcnZlZCBidWZmZXIgc2l6ZSAqLworI2RlZmluZSBTR19HRVRfUkVTRVJWRURfU0laRSAweDIyNzIgIC8qIGFjdHVhbCBzaXplIG9mIHJlc2VydmVkIGJ1ZmZlciAqLworCisvKiBUaGUgZm9sbG93aW5nIGlvY3RsIGhhcyBhICdzZ19zY3NpX2lkX3QgKicgb2JqZWN0IGFzIGl0cyAzcmQgYXJndW1lbnQuICovCisjZGVmaW5lIFNHX0dFVF9TQ1NJX0lEIDB4MjI3NiAgIC8qIFlpZWxkcyBmZCdzIGJ1cywgY2hhbiwgZGV2LCBsdW4gKyB0eXBlICovCisvKiBTQ1NJIGlkIGluZm9ybWF0aW9uIGNhbiBhbHNvIGJlIG9idGFpbmVkIGZyb20gU0NTSV9JT0NUTF9HRVRfSURMVU4gKi8KKworLyogT3ZlcnJpZGUgaG9zdCBzZXR0aW5nIGFuZCBhbHdheXMgRE1BIHVzaW5nIGxvdyBtZW1vcnkgKCA8MTZNQiBvbiBpMzg2KSAqLworI2RlZmluZSBTR19TRVRfRk9SQ0VfTE9XX0RNQSAweDIyNzkgIC8qIDAtPiB1c2UgYWRhcHRlciBzZXR0aW5nLCAxLT4gZm9yY2UgKi8KKyNkZWZpbmUgU0dfR0VUX0xPV19ETUEgMHgyMjdhICAgLyogMC0+IHVzZSBhbGwgcmFtIGZvciBkbWE7IDEtPiBsb3cgZG1hIHJhbSAqLworCisvKiBXaGVuIFNHX1NFVF9GT1JDRV9QQUNLX0lEIHNldCB0byAxLCBwYWNrX2lkIGlzIGlucHV0IHRvIHJlYWQoKSB3aGljaAorICAgdHJpZXMgdG8gZmV0Y2ggYSBwYWNrZXQgd2l0aCBhIG1hdGNoaW5nIHBhY2tfaWQsIHdhaXRzLCBvciByZXR1cm5zIEVBR0FJTi4KKyAgIElmIHBhY2tfaWQgaXMgLTEgdGhlbiByZWFkIG9sZGVzdCB3YWl0aW5nLiBXaGVuIC4uLkZPUkNFX1BBQ0tfSUQgc2V0IHRvIDAKKyAgIHRoZW4gcGFja19pZCBpZ25vcmVkIGJ5IHJlYWQoKSBhbmQgb2xkZXN0IHJlYWRhYmxlIGZldGNoZWQuICovCisjZGVmaW5lIFNHX1NFVF9GT1JDRV9QQUNLX0lEIDB4MjI3YgorI2RlZmluZSBTR19HRVRfUEFDS19JRCAweDIyN2MgLyogWWllbGRzIG9sZGVzdCByZWFkYWJsZSBwYWNrX2lkIChvciAtMSkgKi8KKworI2RlZmluZSBTR19HRVRfTlVNX1dBSVRJTkcgMHgyMjdkIC8qIE51bWJlciBvZiBjb21tYW5kcyBhd2FpdGluZyByZWFkKCkgKi8KKworLyogWWllbGRzIG1heCBzY2F0dGVyIGdhdGhlciB0YWJsZXNpemUgYWxsb3dlZCBieSBjdXJyZW50IGhvc3QgYWRhcHRlciAqLworI2RlZmluZSBTR19HRVRfU0dfVEFCTEVTSVpFIDB4MjI3RiAgLyogMCBpbXBsaWVzIGNhbid0IGRvIHNjYXR0ZXIgZ2F0aGVyICovCisKKyNkZWZpbmUgU0dfR0VUX1ZFUlNJT05fTlVNIDB4MjI4MiAvKiBFeGFtcGxlOiB2ZXJzaW9uIDIuMS4zNCB5aWVsZHMgMjAxMzQgKi8KKworLyogUmV0dXJucyAtRUJVU1kgaWYgb2NjdXBpZWQuIDNyZCBhcmd1bWVudCBwb2ludGVyIHRvIGludCAoc2VlIG5leHQpICovCisjZGVmaW5lIFNHX1NDU0lfUkVTRVQgMHgyMjg0CisvKiBBc3NvY2lhdGVkIHZhbHVlcyB0aGF0IGNhbiBiZSBnaXZlbiB0byBTR19TQ1NJX1JFU0VUIGZvbGxvdyAqLworI2RlZmluZQkJU0dfU0NTSV9SRVNFVF9OT1RISU5HCTAKKyNkZWZpbmUJCVNHX1NDU0lfUkVTRVRfREVWSUNFCTEKKyNkZWZpbmUJCVNHX1NDU0lfUkVTRVRfQlVTCTIKKyNkZWZpbmUJCVNHX1NDU0lfUkVTRVRfSE9TVAkzCisKKy8qIHN5bmNocm9ub3VzIFNDU0kgY29tbWFuZCBpb2N0bCwgKG9ubHkgaW4gdmVyc2lvbiAzIGludGVyZmFjZSkgKi8KKyNkZWZpbmUgU0dfSU8gMHgyMjg1ICAgLyogc2ltaWxhciBlZmZlY3QgYXMgd3JpdGUoKSBmb2xsb3dlZCBieSByZWFkKCkgKi8KKworI2RlZmluZSBTR19HRVRfUkVRVUVTVF9UQUJMRSAweDIyODYgICAvKiB5aWVsZHMgdGFibGUgb2YgYWN0aXZlIHJlcXVlc3RzICovCisKKy8qIEhvdyB0byB0cmVhdCBFSU5UUiBkdXJpbmcgU0dfSU8gaW9jdGwoKSwgb25seSBpbiBTRyAzLnggc2VyaWVzICovCisjZGVmaW5lIFNHX1NFVF9LRUVQX09SUEhBTiAweDIyODcgLyogMSAtPiBob2xkIGZvciByZWFkKCksIDAgLT4gZHJvcCAoZGVmKSAqLworI2RlZmluZSBTR19HRVRfS0VFUF9PUlBIQU4gMHgyMjg4CisKKy8qIHlpZWxkcyBzY3NpIG1pZGxldmVsJ3MgYWNjZXNzX2NvdW50IGZvciB0aGlzIFNDU0kgZGV2aWNlICovCisjZGVmaW5lIFNHX0dFVF9BQ0NFU1NfQ09VTlQgMHgyMjg5ICAKKworCisjZGVmaW5lIFNHX1NDQVRURVJfU1ogKDggKiA0MDk2KSAgLyogUEFHRV9TSVpFIG5vdCBhdmFpbGFibGUgdG8gdXNlciAqLworLyogTGFyZ2VzdCBzaXplIChpbiBieXRlcykgYSBzaW5nbGUgc2NhdHRlci1nYXRoZXIgbGlzdCBlbGVtZW50IGNhbiBoYXZlLgorICAgVGhlIHZhbHVlIG11c3QgYmUgYSBwb3dlciBvZiAyIGFuZCA8PSAoUEFHRV9TSVpFICogMzIpIFsxMzEwNzIgYnl0ZXMgb24KKyAgIGkzODZdLiBUaGUgbWluaW11bSB2YWx1ZSBpcyBQQUdFX1NJWkUuIElmIHNjYXR0ZXItZ2F0aGVyIG5vdCBzdXBwb3J0ZWQKKyAgIGJ5IGFkYXB0ZXIgdGhlbiB0aGlzIHZhbHVlIGlzIHRoZSBsYXJnZXN0IGRhdGEgYmxvY2sgdGhhdCBjYW4gYmUKKyAgIHJlYWQvd3JpdHRlbiBieSBhIHNpbmdsZSBzY3NpIGNvbW1hbmQuIFRoZSB1c2VyIGNhbiBmaW5kIHRoZSB2YWx1ZSBvZgorICAgUEFHRV9TSVpFIGJ5IGNhbGxpbmcgZ2V0cGFnZXNpemUoKSBkZWZpbmVkIGluIHVuaXN0ZC5oIC4gKi8KKworI2RlZmluZSBTR19ERUZBVUxUX1JFVFJJRVMgMAorCisvKiBEZWZhdWx0cywgY29tbWVudGVkIGlmIHRoZXkgZGlmZmVyIGZyb20gb3JpZ2luYWwgc2cgZHJpdmVyICovCisjZGVmaW5lIFNHX0RFRl9GT1JDRV9MT1dfRE1BIDAgIC8qIHdhcyAxIC0+IG1lbW9yeSBiZWxvdyAxNk1CIG9uIGkzODYgKi8KKyNkZWZpbmUgU0dfREVGX0ZPUkNFX1BBQ0tfSUQgMAorI2RlZmluZSBTR19ERUZfS0VFUF9PUlBIQU4gMAorI2RlZmluZSBTR19ERUZfUkVTRVJWRURfU0laRSBTR19TQ0FUVEVSX1NaIC8qIGxvYWQgdGltZSBvcHRpb24gKi8KKworLyogbWF4aW11bSBvdXRzdGFuZGluZyByZXF1ZXN0cywgd3JpdGUoKSB5aWVsZHMgRURPTSBpZiBleGNlZWRlZCAqLworI2RlZmluZSBTR19NQVhfUVVFVUUgMTYKKworI2RlZmluZSBTR19CSUdfQlVGRiBTR19ERUZfUkVTRVJWRURfU0laRSAgICAvKiBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSAqLworCisvKiBBbHRlcm5hdGUgc3R5bGUgdHlwZSBuYW1lcywgIi4uLl90IiB2YXJpYW50cyBwcmVmZXJyZWQgKi8KK3R5cGVkZWYgc3RydWN0IHNnX2lvX2hkciBTZ19pb19oZHI7Cit0eXBlZGVmIHN0cnVjdCBzZ19pb192ZWMgU2dfaW9fdmVjOwordHlwZWRlZiBzdHJ1Y3Qgc2dfc2NzaV9pZCBTZ19zY3NpX2lkOwordHlwZWRlZiBzdHJ1Y3Qgc2dfcmVxX2luZm8gU2dfcmVxX2luZm87CisKKworLyogdnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2diAqLworLyogICBUaGUgb2xkZXIgU0cgaW50ZXJmYWNlIGJhc2VkIG9uIHRoZSAnc2dfaGVhZGVyJyBzdHJ1Y3R1cmUgZm9sbG93cy4gICAqLworLyogXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXiAqLworCisjZGVmaW5lIFNHX01BWF9TRU5TRSAxNiAgIC8qIHRoaXMgb25seSBhcHBsaWVzIHRvIHRoZSBzZ19oZWFkZXIgaW50ZXJmYWNlICovCisKK3N0cnVjdCBzZ19oZWFkZXIKK3sKKyAgICBpbnQgcGFja19sZW47ICAgIC8qIFtvXSByZXBseV9sZW4gKGllIHVzZWxlc3MpLCBpZ25vcmVkIGFzIGlucHV0ICovCisgICAgaW50IHJlcGx5X2xlbjsgICAvKiBbaV0gbWF4IGxlbmd0aCBvZiBleHBlY3RlZCByZXBseSAoaW5jLiBzZ19oZWFkZXIpICovCisgICAgaW50IHBhY2tfaWQ7ICAgICAvKiBbaW9dIGlkIG51bWJlciBvZiBwYWNrZXQgKHVzZSBpbnRzID49IDApICovCisgICAgaW50IHJlc3VsdDsgICAgICAvKiBbb10gMD09b2ssIGVsc2UgKCt2ZSkgVW5peCBlcnJubyAoYmVzdCBpZ25vcmVkKSAqLworICAgIHVuc2lnbmVkIGludCB0d2VsdmVfYnl0ZToxOworCS8qIFtpXSBGb3JjZSAxMiBieXRlIGNvbW1hbmQgbGVuZ3RoIGZvciBncm91cCA2ICYgNyBjb21tYW5kcyAgKi8KKyAgICB1bnNpZ25lZCBpbnQgdGFyZ2V0X3N0YXR1czo1OyAgIC8qIFtvXSBzY3NpIHN0YXR1cyBmcm9tIHRhcmdldCAqLworICAgIHVuc2lnbmVkIGludCBob3N0X3N0YXR1czo4OyAgICAgLyogW29dIGhvc3Qgc3RhdHVzIChzZWUgIkRJRCIgY29kZXMpICovCisgICAgdW5zaWduZWQgaW50IGRyaXZlcl9zdGF0dXM6ODsgICAvKiBbb10gZHJpdmVyIHN0YXR1cytzdWdnZXN0aW9uICovCisgICAgdW5zaWduZWQgaW50IG90aGVyX2ZsYWdzOjEwOyAgICAvKiB1bnVzZWQgKi8KKyAgICB1bnNpZ25lZCBjaGFyIHNlbnNlX2J1ZmZlcltTR19NQVhfU0VOU0VdOyAvKiBbb10gT3V0cHV0IGluIDMgY2FzZXM6CisJICAgd2hlbiB0YXJnZXRfc3RhdHVzIGlzIENIRUNLX0NPTkRJVElPTiBvcgorCSAgIHdoZW4gdGFyZ2V0X3N0YXR1cyBpcyBDT01NQU5EX1RFUk1JTkFURUQgb3IKKwkgICB3aGVuIChkcml2ZXJfc3RhdHVzICYgRFJJVkVSX1NFTlNFKSBpcyB0cnVlLiAqLworfTsgICAgICAvKiBUaGlzIHN0cnVjdHVyZSBpcyAzNiBieXRlcyBsb25nIG9uIGkzODYgKi8KKworCisvKiBJT0NUTHM6IFRoZSBmb2xsb3dpbmcgYXJlIG5vdCByZXF1aXJlZCAob3IgaWdub3JlZCkgd2hlbiB0aGUgc2dfaW9faGRyX3QKKwkgICBpbnRlcmZhY2UgaXMgdXNlZC4gVGhleSBhcmUga2VwdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoCisJICAgdGhlIG9yaWdpbmFsIGFuZCB2ZXJzaW9uIDIgZHJpdmVycy4gKi8KKworI2RlZmluZSBTR19TRVRfVElNRU9VVCAweDIyMDEgIC8qIHVuaXQ6IGppZmZpZXMgKDEwbXMgb24gaTM4NikgKi8KKyNkZWZpbmUgU0dfR0VUX1RJTUVPVVQgMHgyMjAyICAvKiB5aWVsZCB0aW1lb3V0IGFzIF9yZXR1cm5fIHZhbHVlICovCisKKy8qIEdldC9zZXQgY29tbWFuZCBxdWV1aW5nIHN0YXRlIHBlciBmZCAoZGVmYXVsdCBpcyBTR19ERUZfQ09NTUFORF9RLgorICAgRWFjaCB0aW1lIGEgc2dfaW9faGRyX3Qgb2JqZWN0IGlzIHNlZW4gb24gdGhpcyBmaWxlIGRlc2NyaXB0b3IsIHRoaXMKKyAgIGNvbW1hbmQgcXVldWluZyBmbGFnIGlzIHNldCBvbiAob3ZlcnJpZGluZyB0aGUgcHJldmlvdXMgc2V0dGluZykuICovCisjZGVmaW5lIFNHX0dFVF9DT01NQU5EX1EgMHgyMjcwICAgLyogWWllbGRzIDAgKHF1ZXVpbmcgb2ZmKSBvciAxIChvbikgKi8KKyNkZWZpbmUgU0dfU0VUX0NPTU1BTkRfUSAweDIyNzEgICAvKiBDaGFuZ2UgcXVldWluZyBzdGF0ZSB3aXRoIDAgb3IgMSAqLworCisvKiBUdXJuIG9uL29mZiBlcnJvciBzZW5zZSB0cmFjZSAoMSBhbmQgMCByZXNwZWN0aXZlbHksIGRlZmF1bHQgaXMgb2ZmKS4KKyAgIFRyeSB1c2luZzogIiMgY2F0IC9wcm9jL3Njc2kvc2cvZGVidWciIGluc3RlYWQgaW4gdGhlIHYzIGRyaXZlciAqLworI2RlZmluZSBTR19TRVRfREVCVUcgMHgyMjdlICAgIC8qIDAgLT4gdHVybiBvZmYgZGVidWcgKi8KKworI2RlZmluZSBTR19ORVhUX0NNRF9MRU4gMHgyMjgzICAvKiBvdmVycmlkZSBTQ1NJIGNvbW1hbmQgbGVuZ3RoIHdpdGggZ2l2ZW4KKwkJICAgbnVtYmVyIG9uIHRoZSBuZXh0IHdyaXRlKCkgb24gdGhpcyBmaWxlIGRlc2NyaXB0b3IgKi8KKworCisvKiBEZWZhdWx0cywgY29tbWVudGVkIGlmIHRoZXkgZGlmZmVyIGZyb20gb3JpZ2luYWwgc2cgZHJpdmVyICovCisjaWZkZWYgX19LRVJORUxfXworI2RlZmluZSBTR19ERUZBVUxUX1RJTUVPVVRfVVNFUgkoNjAqVVNFUl9IWikgLyogSFogPT0gJ2ppZmZpZXMgaW4gMSBzZWNvbmQnICovCisjZWxzZQorI2RlZmluZSBTR19ERUZBVUxUX1RJTUVPVVQJKDYwKkhaKQkgICAgIC8qIEhaID09ICdqaWZmaWVzIGluIDEgc2Vjb25kJyAqLworI2VuZGlmCisKKyNkZWZpbmUgU0dfREVGX0NPTU1BTkRfUSAwICAgICAvKiBjb21tYW5kIHF1ZXVpbmcgaXMgYWx3YXlzIG9uIHdoZW4KKwkJCQkgIHRoZSBuZXcgaW50ZXJmYWNlIGlzIHVzZWQgKi8KKyNkZWZpbmUgU0dfREVGX1VOREVSUlVOX0ZMQUcgMAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvYWM5N19jb2RlYy5oIGIvaW5jbHVkZS9zb3VuZC9hYzk3X2NvZGVjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQzM2UyNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvc291bmQvYWM5N19jb2RlYy5oCkBAIC0wLDAgKzEsNTk4IEBACisjaWZuZGVmIF9fU09VTkRfQUM5N19DT0RFQ19ICisjZGVmaW5lIF9fU09VTkRfQUM5N19DT0RFQ19ICisKKy8qCisgKiAgQ29weXJpZ2h0IChjKSBieSBKYXJvc2xhdiBLeXNlbGEgPHBlcmV4QHN1c2UuY3o+CisgKiAgVW5pdmVyc2FsIGludGVyZmFjZSBmb3IgQXVkaW8gQ29kZWMgJzk3CisgKgorICogIEZvciBtb3JlIGRldGFpbHMgbG9vayB0byBBQyAnOTcgY29tcG9uZW50IHNwZWNpZmljYXRpb24gcmV2aXNpb24gMi4xCisgKiAgYnkgSW50ZWwgQ29ycG9yYXRpb24gKGh0dHA6Ly9kZXZlbG9wZXIuaW50ZWwuY29tKS4KKyAqCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSAicGNtLmgiCisjaW5jbHVkZSAiY29udHJvbC5oIgorI2luY2x1ZGUgImluZm8uaCIKKworLyoKKyAqICBBQyc5NyBjb2RlYyByZWdpc3RlcnMKKyAqLworCisjZGVmaW5lIEFDOTdfUkVTRVQJCTB4MDAJLyogUmVzZXQgKi8KKyNkZWZpbmUgQUM5N19NQVNURVIJCTB4MDIJLyogTWFzdGVyIFZvbHVtZSAqLworI2RlZmluZSBBQzk3X0hFQURQSE9ORQkJMHgwNAkvKiBIZWFkcGhvbmUgVm9sdW1lIChvcHRpb25hbCkgKi8KKyNkZWZpbmUgQUM5N19NQVNURVJfTU9OTwkweDA2CS8qIE1hc3RlciBWb2x1bWUgTW9ubyAob3B0aW9uYWwpICovCisjZGVmaW5lIEFDOTdfTUFTVEVSX1RPTkUJMHgwOAkvKiBNYXN0ZXIgVG9uZSAoQmFzcyAmIFRyZWJsZSkgKG9wdGlvbmFsKSAqLworI2RlZmluZSBBQzk3X1BDX0JFRVAJCTB4MGEJLyogUEMgQmVlcCBWb2x1bWUgKG9wdGluYWwpICovCisjZGVmaW5lIEFDOTdfUEhPTkUJCTB4MGMJLyogUGhvbmUgVm9sdW1lIChvcHRpb25hbCkgKi8KKyNkZWZpbmUgQUM5N19NSUMJCTB4MGUJLyogTUlDIFZvbHVtZSAqLworI2RlZmluZSBBQzk3X0xJTkUJCTB4MTAJLyogTGluZSBJbiBWb2x1bWUgKi8KKyNkZWZpbmUgQUM5N19DRAkJCTB4MTIJLyogQ0QgVm9sdW1lICovCisjZGVmaW5lIEFDOTdfVklERU8JCTB4MTQJLyogVmlkZW8gVm9sdW1lIChvcHRpb25hbCkgKi8KKyNkZWZpbmUgQUM5N19BVVgJCTB4MTYJLyogQVVYIFZvbHVtZSAob3B0aW9uYWwpICovCisjZGVmaW5lIEFDOTdfUENNCQkweDE4CS8qIFBDTSBWb2x1bWUgKi8KKyNkZWZpbmUgQUM5N19SRUNfU0VMCQkweDFhCS8qIFJlY29yZCBTZWxlY3QgKi8KKyNkZWZpbmUgQUM5N19SRUNfR0FJTgkJMHgxYwkvKiBSZWNvcmQgR2FpbiAqLworI2RlZmluZSBBQzk3X1JFQ19HQUlOX01JQwkweDFlCS8qIFJlY29yZCBHYWluIE1JQyAob3B0aW9uYWwpICovCisjZGVmaW5lIEFDOTdfR0VORVJBTF9QVVJQT1NFCTB4MjAJLyogR2VuZXJhbCBQdXJwb3NlIChvcHRpb25hbCkgKi8KKyNkZWZpbmUgQUM5N18zRF9DT05UUk9MCQkweDIyCS8qIDNEIENvbnRyb2wgKG9wdGlvbmFsKSAqLworI2RlZmluZSBBQzk3X0lOVF9QQUdJTkcJCTB4MjQJLyogQXVkaW8gSW50ZXJydXB0ICYgUGFnaW5nIChBQyc5NyAyLjMpICovCisjZGVmaW5lIEFDOTdfUE9XRVJET1dOCQkweDI2CS8qIFBvd2VyZG93biBjb250cm9sIC8gc3RhdHVzICovCisvKiByYW5nZSAweDI4LTB4M2EgLSBBVURJTyBBQyc5NyAyLjAgZXh0ZW5zaW9ucyAqLworI2RlZmluZSBBQzk3X0VYVEVOREVEX0lECTB4MjgJLyogRXh0ZW5kZWQgQXVkaW8gSUQgKi8KKyNkZWZpbmUgQUM5N19FWFRFTkRFRF9TVEFUVVMJMHgyYQkvKiBFeHRlbmRlZCBBdWRpbyBTdGF0dXMgYW5kIENvbnRyb2wgKi8KKyNkZWZpbmUgQUM5N19QQ01fRlJPTlRfREFDX1JBVEUgMHgyYwkvKiBQQ00gRnJvbnQgREFDIFJhdGUgKi8KKyNkZWZpbmUgQUM5N19QQ01fU1VSUl9EQUNfUkFURQkweDJlCS8qIFBDTSBTdXJyb3VuZCBEQUMgUmF0ZSAqLworI2RlZmluZSBBQzk3X1BDTV9MRkVfREFDX1JBVEUJMHgzMAkvKiBQQ00gTEZFIERBQyBSYXRlICovCisjZGVmaW5lIEFDOTdfUENNX0xSX0FEQ19SQVRFCTB4MzIJLyogUENNIExSIEFEQyBSYXRlICovCisjZGVmaW5lIEFDOTdfUENNX01JQ19BRENfUkFURQkweDM0CS8qIFBDTSBNSUMgQURDIFJhdGUgKi8KKyNkZWZpbmUgQUM5N19DRU5URVJfTEZFX01BU1RFUgkweDM2CS8qIENlbnRlciArIExGRSBNYXN0ZXIgVm9sdW1lICovCisjZGVmaW5lIEFDOTdfU1VSUk9VTkRfTUFTVEVSCTB4MzgJLyogU3Vycm91bmQgKFJlYXIpIE1hc3RlciBWb2x1bWUgKi8KKyNkZWZpbmUgQUM5N19TUERJRgkJMHgzYQkvKiBTL1BESUYgY29udHJvbCAqLworLyogcmFuZ2UgMHgzYy0weDU4IC0gTU9ERU0gKi8KKyNkZWZpbmUgQUM5N19FWFRFTkRFRF9NSUQJMHgzYwkvKiBFeHRlbmRlZCBNb2RlbSBJRCAqLworI2RlZmluZSBBQzk3X0VYVEVOREVEX01TVEFUVVMJMHgzZQkvKiBFeHRlbmRlZCBNb2RlbSBTdGF0dXMgYW5kIENvbnRyb2wgKi8KKyNkZWZpbmUgQUM5N19MSU5FMV9SQVRFCQkweDQwCS8qIExpbmUxIERBQy9BREMgUmF0ZSAqLworI2RlZmluZSBBQzk3X0xJTkUyX1JBVEUJCTB4NDIJLyogTGluZTIgREFDL0FEQyBSYXRlICovCisjZGVmaW5lIEFDOTdfSEFORFNFVF9SQVRFCTB4NDQJLyogSGFuZHNldCBEQUMvQURDIFJhdGUgKi8KKyNkZWZpbmUgQUM5N19MSU5FMV9MRVZFTAkweDQ2CS8qIExpbmUxIERBQy9BREMgTGV2ZWwgKi8KKyNkZWZpbmUgQUM5N19MSU5FMl9MRVZFTAkweDQ4CS8qIExpbmUyIERBQy9BREMgTGV2ZWwgKi8KKyNkZWZpbmUgQUM5N19IQU5EU0VUX0xFVkVMCTB4NGEJLyogSGFuZHNldCBEQUMvQURDIExldmVsICovCisjZGVmaW5lIEFDOTdfR1BJT19DRkcJCTB4NGMJLyogR1BJTyBDb25maWd1cmF0aW9uICovCisjZGVmaW5lIEFDOTdfR1BJT19QT0xBUklUWQkweDRlCS8qIEdQSU8gUGluIFBvbGFyaXR5L1R5cGUsIDA9bG93LCAxPWhpZ2ggYWN0aXZlICovCisjZGVmaW5lIEFDOTdfR1BJT19TVElDS1kJMHg1MAkvKiBHUElPIFBpbiBTdGlja3ksIDA9bm90LCAxPXN0aWNreSAqLworI2RlZmluZSBBQzk3X0dQSU9fV0FLRVVQCTB4NTIJLyogR1BJTyBQaW4gV2FrZXVwLCAwPW5vIGludCwgMT15ZXMgaW50ICovCisjZGVmaW5lIEFDOTdfR1BJT19TVEFUVVMJMHg1NAkvKiBHUElPIFBpbiBTdGF0dXMsIHNsb3QgMTIgKi8KKyNkZWZpbmUgQUM5N19NSVNDX0FGRQkJMHg1NgkvKiBNaXNjZWxsYW5lb3VzIE1vZGVtIEFGRSBTdGF0dXMgYW5kIENvbnRyb2wgKi8KKy8qIHJhbmdlIDB4NWEtMHg3YiAtIFZlbmRvciBTcGVjaWZpYyAqLworI2RlZmluZSBBQzk3X1ZFTkRPUl9JRDEJCTB4N2MJLyogVmVuZG9yIElEMSAqLworI2RlZmluZSBBQzk3X1ZFTkRPUl9JRDIJCTB4N2UJLyogVmVuZG9yIElEMiAvIHJldmlzaW9uICovCisvKiByYW5nZSAweDYwLTB4NmYgKHBhZ2UgMSkgLSBleHRlbmRlZCBjb2RlYyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgQUM5N19DT0RFQ19DTEFTU19SRVYJMHg2MAkvKiBDb2RlYyBDbGFzcy9SZXZpc2lvbiAqLworI2RlZmluZSBBQzk3X1BDSV9TVklECQkweDYyCS8qIFBDSSBTdWJzeXN0ZW0gVmVuZG9yIElEICovCisjZGVmaW5lIEFDOTdfUENJX1NJRAkJMHg2NAkvKiBQQ0kgU3Vic3lzdGVtIElEICovCisjZGVmaW5lIEFDOTdfRlVOQ19TRUxFQ1QJMHg2NgkvKiBGdW5jdGlvbiBTZWxlY3QgKi8KKyNkZWZpbmUgQUM5N19GVU5DX0lORk8JCTB4NjgJLyogRnVuY3Rpb24gSW5mb3JtYXRpb24gKi8KKyNkZWZpbmUgQUM5N19TRU5TRV9JTkZPCQkweDZhCS8qIFNlbnNlIERldGFpbHMgKi8KKworLyogc2xvdCBhbGxvY2F0aW9uICovCisjZGVmaW5lIEFDOTdfU0xPVF9UQUcJCTAKKyNkZWZpbmUgQUM5N19TTE9UX0NNRF9BRERSCTEKKyNkZWZpbmUgQUM5N19TTE9UX0NNRF9EQVRBCTIKKyNkZWZpbmUgQUM5N19TTE9UX1BDTV9MRUZUCTMKKyNkZWZpbmUgQUM5N19TTE9UX1BDTV9SSUdIVAk0CisjZGVmaW5lIEFDOTdfU0xPVF9NT0RFTV9MSU5FMQk1CisjZGVmaW5lIEFDOTdfU0xPVF9QQ01fQ0VOVEVSCTYKKyNkZWZpbmUgQUM5N19TTE9UX01JQwkJNgkvKiBpbnB1dCAqLworI2RlZmluZSBBQzk3X1NMT1RfU1BESUZfTEVGVDEJNgorI2RlZmluZSBBQzk3X1NMT1RfUENNX1NMRUZUCTcJLyogc3Vycm91bmQgbGVmdCAqLworI2RlZmluZSBBQzk3X1NMT1RfUENNX0xFRlRfMAk3CS8qIGRvdWJsZSByYXRlIG9wZXJhdGlvbiAqLworI2RlZmluZSBBQzk3X1NMT1RfU1BESUZfTEVGVAk3CisjZGVmaW5lIEFDOTdfU0xPVF9QQ01fU1JJR0hUCTgJLyogc3Vycm91bmQgcmlnaHQgKi8KKyNkZWZpbmUgQUM5N19TTE9UX1BDTV9SSUdIVF8wCTgJLyogZG91YmxlIHJhdGUgb3BlcmF0aW9uICovCisjZGVmaW5lIEFDOTdfU0xPVF9TUERJRl9SSUdIVAk4CisjZGVmaW5lIEFDOTdfU0xPVF9MRkUJCTkKKyNkZWZpbmUgQUM5N19TTE9UX1NQRElGX1JJR0hUMQk5CisjZGVmaW5lIEFDOTdfU0xPVF9NT0RFTV9MSU5FMgkxMAorI2RlZmluZSBBQzk3X1NMT1RfUENNX0xFRlRfMQkxMAkvKiBkb3VibGUgcmF0ZSBvcGVyYXRpb24gKi8KKyNkZWZpbmUgQUM5N19TTE9UX1NQRElGX0xFRlQyCTEwCisjZGVmaW5lIEFDOTdfU0xPVF9IQU5EU0VUCTExCS8qIG91dHB1dCAqLworI2RlZmluZSBBQzk3X1NMT1RfUENNX1JJR0hUXzEJMTEJLyogZG91YmxlIHJhdGUgb3BlcmF0aW9uICovCisjZGVmaW5lIEFDOTdfU0xPVF9TUERJRl9SSUdIVDIJMTEKKyNkZWZpbmUgQUM5N19TTE9UX01PREVNX0dQSU8JMTIJLyogbW9kZW0gR1BJTyAqLworI2RlZmluZSBBQzk3X1NMT1RfUENNX0NFTlRFUl8xCTEyCS8qIGRvdWJsZSByYXRlIG9wZXJhdGlvbiAqLworCisvKiBiYXNpYyBjYXBhYmlsaXRpZXMgKHJlc2V0IHJlZ2lzdGVyKSAqLworI2RlZmluZSBBQzk3X0JDX0RFRElDQVRFRF9NSUMJMHgwMDAxCS8qIERlZGljYXRlZCBNaWMgUENNIEluIENoYW5uZWwgKi8KKyNkZWZpbmUgQUM5N19CQ19SRVNFUlZFRDEJMHgwMDAyCS8qIFJlc2VydmVkICh3YXMgTW9kZW0gTGluZSBDb2RlYyBzdXBwb3J0KSAqLworI2RlZmluZSBBQzk3X0JDX0JBU1NfVFJFQkxFCTB4MDAwNAkvKiBCYXNzICYgVHJlYmxlIENvbnRyb2wgKi8KKyNkZWZpbmUgQUM5N19CQ19TSU1fU1RFUkVPCTB4MDAwOAkvKiBTaW11bGF0ZWQgc3RlcmVvICovCisjZGVmaW5lIEFDOTdfQkNfSEVBRFBIT05FCTB4MDAxMAkvKiBIZWFkcGhvbmUgT3V0IFN1cHBvcnQgKi8KKyNkZWZpbmUgQUM5N19CQ19MT1VETkVTUwkweDAwMjAJLyogTG91ZG5lc3MgKGJhc3MgYm9vc3QpIFN1cHBvcnQgKi8KKyNkZWZpbmUgQUM5N19CQ18xNkJJVF9EQUMJMHgwMDAwCS8qIDE2LWJpdCBEQUMgcmVzb2x1dGlvbiAqLworI2RlZmluZSBBQzk3X0JDXzE4QklUX0RBQwkweDAwNDAJLyogMTgtYml0IERBQyByZXNvbHV0aW9uICovCisjZGVmaW5lIEFDOTdfQkNfMjBCSVRfREFDCTB4MDA4MAkvKiAyMC1iaXQgREFDIHJlc29sdXRpb24gKi8KKyNkZWZpbmUgQUM5N19CQ19EQUNfTUFTSwkweDAwYzAKKyNkZWZpbmUgQUM5N19CQ18xNkJJVF9BREMJMHgwMDAwCS8qIDE2LWJpdCBBREMgcmVzb2x1dGlvbiAqLworI2RlZmluZSBBQzk3X0JDXzE4QklUX0FEQwkweDAxMDAJLyogMTgtYml0IEFEQyByZXNvbHV0aW9uICovCisjZGVmaW5lIEFDOTdfQkNfMjBCSVRfQURDCTB4MDIwMAkvKiAyMC1iaXQgQURDIHJlc29sdXRpb24gKi8KKyNkZWZpbmUgQUM5N19CQ19BRENfTUFTSwkweDAzMDAKKworLyogZ2VuZXJhbCBwdXJwb3NlICovCisjZGVmaW5lIEFDOTdfR1BfRFJTU19NQVNLCTB4MGMwMAkvKiBkb3VibGUgcmF0ZSBzbG90IHNlbGVjdCAqLworI2RlZmluZSBBQzk3X0dQX0RSU1NfMTAxMQkweDAwMDAJLyogTFIoQykgMTArMTEoKzEyKSAqLworI2RlZmluZSBBQzk3X0dQX0RSU1NfNzgJCTB4MDQwMAkvKiBMUiA3KzggKi8KKworLyogZXh0ZW5kZWQgYXVkaW8gSUQgYml0IGRlZmluZXMgKi8KKyNkZWZpbmUgQUM5N19FSV9WUkEJCTB4MDAwMQkvKiBWYXJpYWJsZSBiaXQgcmF0ZSBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUgQUM5N19FSV9EUkEJCTB4MDAwMgkvKiBEb3VibGUgcmF0ZSBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUgQUM5N19FSV9TUERJRgkJMHgwMDA0CS8qIFMvUERJRiBvdXQgc3VwcG9ydGVkICovCisjZGVmaW5lIEFDOTdfRUlfVlJNCQkweDAwMDgJLyogVmFyaWFibGUgYml0IHJhdGUgc3VwcG9ydGVkIGZvciBNSUMgKi8KKyNkZWZpbmUgQUM5N19FSV9EQUNTX1NMT1RfTUFTSwkweDAwMzAJLyogREFDcyBzbG90IGFzc2lnbm1lbnQgKi8KKyNkZWZpbmUgQUM5N19FSV9EQUNTX1NMT1RfU0hJRlQJNAorI2RlZmluZSBBQzk3X0VJX0NEQUMJCTB4MDA0MAkvKiBQQ00gQ2VudGVyIERBQyBhdmFpbGFibGUgKi8KKyNkZWZpbmUgQUM5N19FSV9TREFDCQkweDAwODAJLyogUENNIFN1cnJvdW5kIERBQ3MgYXZhaWxhYmxlICovCisjZGVmaW5lIEFDOTdfRUlfTERBQwkJMHgwMTAwCS8qIFBDTSBMRkUgREFDIGF2YWlsYWJsZSAqLworI2RlZmluZSBBQzk3X0VJX0FNQVAJCTB4MDIwMAkvKiBpbmRpY2F0ZXMgb3B0aW9uYWwgc2xvdC9EQUMgbWFwcGluZyBiYXNlZCBvbiBjb2RlYyBJRCAqLworI2RlZmluZSBBQzk3X0VJX1JFVl9NQVNLCTB4MGMwMAkvKiBBQyc5NyByZXZpc2lvbiBtYXNrICovCisjZGVmaW5lIEFDOTdfRUlfUkVWXzIyCQkweDA0MDAJLyogQUMnOTcgcmV2aXNpb24gMi4yICovCisjZGVmaW5lIEFDOTdfRUlfUkVWXzIzCQkweDA4MDAJLyogQUMnOTcgcmV2aXNpb24gMi4zICovCisjZGVmaW5lIEFDOTdfRUlfUkVWX1NISUZUCTEwCisjZGVmaW5lIEFDOTdfRUlfQUREUl9NQVNLCTB4YzAwMAkvKiBwaHlzaWNhbCBjb2RlYyBJRCAoYWRkcmVzcykgKi8KKyNkZWZpbmUgQUM5N19FSV9BRERSX1NISUZUCTE0CisKKy8qIGV4dGVuZGVkIGF1ZGlvIHN0YXR1cyBhbmQgY29udHJvbCBiaXQgZGVmaW5lcyAqLworI2RlZmluZSBBQzk3X0VBX1ZSQQkJMHgwMDAxCS8qIFZhcmlhYmxlIGJpdCByYXRlIGVuYWJsZSBiaXQgKi8KKyNkZWZpbmUgQUM5N19FQV9EUkEJCTB4MDAwMgkvKiBEb3VibGUtcmF0ZSBhdWRpbyBlbmFibGUgYml0ICovCisjZGVmaW5lIEFDOTdfRUFfU1BESUYJCTB4MDAwNAkvKiBTL1BESUYgb3V0IGVuYWJsZSBiaXQgKi8KKyNkZWZpbmUgQUM5N19FQV9WUk0JCTB4MDAwOAkvKiBWYXJpYWJsZSBiaXQgcmF0ZSBmb3IgTUlDIGVuYWJsZSBiaXQgKi8KKyNkZWZpbmUgQUM5N19FQV9TUFNBX1NMT1RfTUFTSwkweDAwMzAJLyogTWFzayBmb3Igc2xvdCBhc3NpZ25tZW50IGJpdHMgKi8KKyNkZWZpbmUgQUM5N19FQV9TUFNBX1NMT1RfU0hJRlQgNAorI2RlZmluZSBBQzk3X0VBX1NQU0FfM180CTB4MDAwMAkvKiBTbG90IGFzc2lnbmVkIHRvIDMgJiA0ICovCisjZGVmaW5lIEFDOTdfRUFfU1BTQV83XzgJMHgwMDEwCS8qIFNsb3QgYXNzaWduZWQgdG8gNyAmIDggKi8KKyNkZWZpbmUgQUM5N19FQV9TUFNBXzZfOQkweDAwMjAJLyogU2xvdCBhc3NpZ25lZCB0byA2ICYgOSAqLworI2RlZmluZSBBQzk3X0VBX1NQU0FfMTBfMTEJMHgwMDMwCS8qIFNsb3QgYXNzaWduZWQgdG8gMTAgJiAxMSAqLworI2RlZmluZSBBQzk3X0VBX0NEQUMJCTB4MDA0MAkvKiBQQ00gQ2VudGVyIERBQyBpcyByZWFkeSAoUmVhZCBvbmx5KSAqLworI2RlZmluZSBBQzk3X0VBX1NEQUMJCTB4MDA4MAkvKiBQQ00gU3Vycm91bmQgREFDcyBhcmUgcmVhZHkgKFJlYWQgb25seSkgKi8KKyNkZWZpbmUgQUM5N19FQV9MREFDCQkweDAxMDAJLyogUENNIExGRSBEQUMgaXMgcmVhZHkgKFJlYWQgb25seSkgKi8KKyNkZWZpbmUgQUM5N19FQV9NREFDCQkweDAyMDAJLyogTUlDIEFEQyBpcyByZWFkeSAoUmVhZCBvbmx5KSAqLworI2RlZmluZSBBQzk3X0VBX1NQQ1YJCTB4MDQwMAkvKiBTL1BESUYgY29uZmlndXJhdGlvbiB2YWxpZCAoUmVhZCBvbmx5KSAqLworI2RlZmluZSBBQzk3X0VBX1BSSQkJMHgwODAwCS8qIFR1cm5zIHRoZSBQQ00gQ2VudGVyIERBQyBvZmYgKi8KKyNkZWZpbmUgQUM5N19FQV9QUkoJCTB4MTAwMAkvKiBUdXJucyB0aGUgUENNIFN1cnJvdW5kIERBQ3Mgb2ZmICovCisjZGVmaW5lIEFDOTdfRUFfUFJLCQkweDIwMDAJLyogVHVybnMgdGhlIFBDTSBMRkUgREFDIG9mZiAqLworI2RlZmluZSBBQzk3X0VBX1BSTAkJMHg0MDAwCS8qIFR1cm5zIHRoZSBNSUMgQURDIG9mZiAqLworCisvKiBTL1BESUYgY29udHJvbCBiaXQgZGVmaW5lcyAqLworI2RlZmluZSBBQzk3X1NDX1BSTwkJMHgwMDAxCS8qIFByb2Zlc3Npb25hbCBzdGF0dXMgKi8KKyNkZWZpbmUgQUM5N19TQ19OQVVESU8JCTB4MDAwMgkvKiBOb24gYXVkaW8gc3RyZWFtICovCisjZGVmaW5lIEFDOTdfU0NfQ09QWQkJMHgwMDA0CS8qIENvcHlyaWdodCBzdGF0dXMgKi8KKyNkZWZpbmUgQUM5N19TQ19QUkUJCTB4MDAwOAkvKiBQcmVlbXBoYXNpcyBzdGF0dXMgKi8KKyNkZWZpbmUgQUM5N19TQ19DQ19NQVNLCQkweDA3ZjAJLyogQ2F0ZWdvcnkgQ29kZSBtYXNrICovCisjZGVmaW5lIEFDOTdfU0NfQ0NfU0hJRlQJNAorI2RlZmluZSBBQzk3X1NDX0wJCTB4MDgwMAkvKiBHZW5lcmF0aW9uIExldmVsIHN0YXR1cyAqLworI2RlZmluZSBBQzk3X1NDX1NQU1JfTUFTSwkweDMwMDAJLyogUy9QRElGIFNhbXBsZSBSYXRlIGJpdHMgKi8KKyNkZWZpbmUgQUM5N19TQ19TUFNSX1NISUZUCTEyCisjZGVmaW5lIEFDOTdfU0NfU1BTUl80NEsJMHgwMDAwCS8qIFVzZSA0NC4xa0h6IFNhbXBsZSByYXRlICovCisjZGVmaW5lIEFDOTdfU0NfU1BTUl80OEsJMHgyMDAwCS8qIFVzZSA0OGtIeiBTYW1wbGUgcmF0ZSAqLworI2RlZmluZSBBQzk3X1NDX1NQU1JfMzJLCTB4MzAwMAkvKiBVc2UgMzJrSHogU2FtcGxlIHJhdGUgKi8KKyNkZWZpbmUgQUM5N19TQ19EUlMJCTB4NDAwMAkvKiBEb3VibGUgUmF0ZSBTL1BESUYgKi8KKyNkZWZpbmUgQUM5N19TQ19WCQkweDgwMDAJLyogVmFsaWRpdHkgc3RhdHVzICovCisKKy8qIEludGVycnVwdCBhbmQgUGFnaW5nIGJpdCBkZWZpbmVzIChBQyc5NyAyLjMpICovCisjZGVmaW5lIEFDOTdfUEFHRV9NQVNLCQkweDAwMGYJLyogUGFnZSBTZWxlY3RvciAqLworI2RlZmluZSBBQzk3X1BBR0VfVkVORE9SCTAJLyogVmVuZG9yLXNwZWNpZmljIHJlZ2lzdGVycyAqLworI2RlZmluZSBBQzk3X1BBR0VfMQkJMQkvKiBFeHRlbmRlZCBDb2RlYyBSZWdpc3RlcnMgcGFnZSAxICovCisjZGVmaW5lIEFDOTdfSU5UX0VOQUJMRQkJMHgwODAwCS8qIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgQUM5N19JTlRfU0VOU0UJCTB4MTAwMAkvKiBTZW5zZSBDeWNsZSAqLworI2RlZmluZSBBQzk3X0lOVF9DQVVTRV9TRU5TRQkweDIwMDAJLyogU2Vuc2UgQ3ljbGUgQ29tcGxldGVkIChSTykgKi8KKyNkZWZpbmUgQUM5N19JTlRfQ0FVU0VfR1BJTwkweDQwMDAJLyogR1BJTyBiaXRzIGNoYW5nZWQgKFJPKSAqLworI2RlZmluZSBBQzk3X0lOVF9TVEFUVVMJCTB4ODAwMAkvKiBJbnRlcnJ1cHQgU3RhdHVzICovCisKKy8qIGV4dGVuZGVkIG1vZGVtIElEIGJpdCBkZWZpbmVzICovCisjZGVmaW5lIEFDOTdfTUVJX0xJTkUxCQkweDAwMDEJLyogTGluZTEgcHJlc2VudCAqLworI2RlZmluZSBBQzk3X01FSV9MSU5FMgkJMHgwMDAyCS8qIExpbmUyIHByZXNlbnQgKi8KKyNkZWZpbmUgQUM5N19NRUlfSEFORFNFVAkweDAwMDQJLyogSGFuZHNldCBwcmVzZW50ICovCisjZGVmaW5lIEFDOTdfTUVJX0NJRDEJCTB4MDAwOAkvKiBjYWxsZXIgSUQgZGVjb2RlIGZvciBMaW5lMSBpcyBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUgQUM5N19NRUlfQ0lEMgkJMHgwMDEwCS8qIGNhbGxlciBJRCBkZWNvZGUgZm9yIExpbmUyIGlzIHN1cHBvcnRlZCAqLworI2RlZmluZSBBQzk3X01FSV9BRERSX01BU0sJMHhjMDAwCS8qIHBoeXNpY2FsIGNvZGVjIElEIChhZGRyZXNzKSAqLworI2RlZmluZSBBQzk3X01FSV9BRERSX1NISUZUCTE0CisKKy8qIGV4dGVuZGVkIG1vZGVtIHN0YXR1cyBhbmQgY29udHJvbCBiaXQgZGVmaW5lcyAqLworI2RlZmluZSBBQzk3X01FQV9HUElPCQkweDAwMDEJLyogR1BJTyBpcyByZWFkeSAocm8pICovCisjZGVmaW5lIEFDOTdfTUVBX01SRUYJCTB4MDAwMgkvKiBWcmVmIGlzIHVwIHRvIG5vbWluYWwgbGV2ZWwgKHJvKSAqLworI2RlZmluZSBBQzk3X01FQV9BREMxCQkweDAwMDQJLyogQURDMSBvcGVyYXRpb25hbCAocm8pICovCisjZGVmaW5lIEFDOTdfTUVBX0RBQzEJCTB4MDAwOAkvKiBEQUMxIG9wZXJhdGlvbmFsIChybykgKi8KKyNkZWZpbmUgQUM5N19NRUFfQURDMgkJMHgwMDEwCS8qIEFEQzIgb3BlcmF0aW9uYWwgKHJvKSAqLworI2RlZmluZSBBQzk3X01FQV9EQUMyCQkweDAwMjAJLyogREFDMiBvcGVyYXRpb25hbCAocm8pICovCisjZGVmaW5lIEFDOTdfTUVBX0hBREMJCTB4MDA0MAkvKiBIQURDIG9wZXJhdGlvbmFsIChybykgKi8KKyNkZWZpbmUgQUM5N19NRUFfSERBQwkJMHgwMDgwCS8qIEhEQUMgb3BlcmF0aW9uYWwgKHJvKSAqLworI2RlZmluZSBBQzk3X01FQV9QUkEJCTB4MDEwMAkvKiBHUElPIHBvd2VyIGRvd24gKGhpZ2gpICovCisjZGVmaW5lIEFDOTdfTUVBX1BSQgkJMHgwMjAwCS8qIHJlc2VydmVkICovCisjZGVmaW5lIEFDOTdfTUVBX1BSQwkJMHgwNDAwCS8qIEFEQzEgcG93ZXIgZG93biAoaGlnaCkgKi8KKyNkZWZpbmUgQUM5N19NRUFfUFJECQkweDA4MDAJLyogREFDMSBwb3dlciBkb3duIChoaWdoKSAqLworI2RlZmluZSBBQzk3X01FQV9QUkUJCTB4MTAwMAkvKiBBREMyIHBvd2VyIGRvd24gKGhpZ2gpICovCisjZGVmaW5lIEFDOTdfTUVBX1BSRgkJMHgyMDAwCS8qIERBQzIgcG93ZXIgZG93biAoaGlnaCkgKi8KKyNkZWZpbmUgQUM5N19NRUFfUFJHCQkweDQwMDAJLyogSEFEQyBwb3dlciBkb3duIChoaWdoKSAqLworI2RlZmluZSBBQzk3X01FQV9QUkgJCTB4ODAwMAkvKiBIREFDIHBvd2VyIGRvd24gKGhpZ2gpICovCisKKy8qIG1vZGVtIGdwaW8gc3RhdHVzIGRlZmluZXMgKi8KKyNkZWZpbmUgQUM5N19HUElPX0xJTkUxX09IICAgICAgMHgwMDAxICAvKiBPZmYgSG9vayBMaW5lMSAqLworI2RlZmluZSBBQzk3X0dQSU9fTElORTFfUkkgICAgICAweDAwMDIgIC8qIFJpbmcgRGV0ZWN0IExpbmUxICovCisjZGVmaW5lIEFDOTdfR1BJT19MSU5FMV9DSUQgICAgIDB4MDAwNCAgLyogQ2FsbGVyIElEIHBhdGggZW5hYmxlIExpbmUxICovCisjZGVmaW5lIEFDOTdfR1BJT19MSU5FMV9MQ1MgICAgIDB4MDAwOCAgLyogTG9vcCBDdXJyZW50IFNlbnNlIExpbmUxICovCisjZGVmaW5lIEFDOTdfR1BJT19MSU5FMV9QVUxTRSAgIDB4MDAxMCAgLyogT3B0Li8gUHVsc2UgRGlhbCBMaW5lMSAob3V0KSAqLworI2RlZmluZSBBQzk3X0dQSU9fTElORTFfSEwxUiAgICAweDAwMjAgIC8qIE9wdC4vIEhhbmRzZXQgdG8gTGluZTEgcmVsYXkgY29udHJvbCAob3V0KSAqLworI2RlZmluZSBBQzk3X0dQSU9fTElORTFfSE9IRCAgICAweDAwNDAgIC8qIE9wdC4vIEhhbmRzZXQgb2ZmIGhvb2sgZGV0ZWN0IExpbmUxIChpbikgKi8KKyNkZWZpbmUgQUM5N19HUElPX0xJTkUxMl9BQyAgICAgMHgwMDgwICAvKiBPcHQuLyBJbnQuYml0IDEgLyBMaW5lMS8yIEFDIChvdXQpICovCisjZGVmaW5lIEFDOTdfR1BJT19MSU5FMTJfREMgICAgIDB4MDEwMCAgLyogT3B0Li8gSW50LmJpdCAyIC8gTGluZTEvMiBEQyAob3V0KSAqLworI2RlZmluZSBBQzk3X0dQSU9fTElORTEyX1JTICAgICAweDAyMDAgIC8qIE9wdC4vIEludC5iaXQgMyAvIExpbmUxLzIgUlMgKG91dCkgKi8KKyNkZWZpbmUgQUM5N19HUElPX0xJTkUyX09IICAgICAgMHgwNDAwICAvKiBPZmYgSG9vayBMaW5lMiAqLworI2RlZmluZSBBQzk3X0dQSU9fTElORTJfUkkgICAgICAweDA4MDAgIC8qIFJpbmcgRGV0ZWN0IExpbmUyICovCisjZGVmaW5lIEFDOTdfR1BJT19MSU5FMl9DSUQgICAgIDB4MTAwMCAgLyogQ2FsbGVyIElEIHBhdGggZW5hYmxlIExpbmUyICovCisjZGVmaW5lIEFDOTdfR1BJT19MSU5FMl9MQ1MgICAgIDB4MjAwMCAgLyogTG9vcCBDdXJyZW50IFNlbnNlIExpbmUyICovCisjZGVmaW5lIEFDOTdfR1BJT19MSU5FMl9QVUxTRSAgIDB4NDAwMCAgLyogT3B0Li8gUHVsc2UgRGlhbCBMaW5lMiAob3V0KSAqLworI2RlZmluZSBBQzk3X0dQSU9fTElORTJfSEwxUiAgICAweDgwMDAgIC8qIE9wdC4vIEhhbmRzZXQgdG8gTGluZTIgcmVsYXkgY29udHJvbCAob3V0KSAqLworCisvKiBzcGVjaWZpYyAtIFNpZ21hVGVsICovCisjZGVmaW5lIEFDOTdfU0lHTUFURUxfT1VUU0VMCTB4NjQJLyogT3V0cHV0IFNlbGVjdCwgU1RBQzk3NTggKi8KKyNkZWZpbmUgQUM5N19TSUdNQVRFTF9JTlNFTAkweDY2CS8qIElucHV0IFNlbGVjdCwgU1RBQzk3NTggKi8KKyNkZWZpbmUgQUM5N19TSUdNQVRFTF9JT01JU0MJMHg2OAkvKiBTVEFDOTc1OCAqLworI2RlZmluZSBBQzk3X1NJR01BVEVMX0FOQUxPRwkweDZjCS8qIEFuYWxvZyBTcGVjaWFsICovCisjZGVmaW5lIEFDOTdfU0lHTUFURUxfREFDMklOVkVSVCAweDZlCisjZGVmaW5lIEFDOTdfU0lHTUFURUxfQklBUzEJMHg3MAorI2RlZmluZSBBQzk3X1NJR01BVEVMX0JJQVMyCTB4NzIKKyNkZWZpbmUgQUM5N19TSUdNQVRFTF9WQVJJT1VTCTB4NzIJLyogU1RBQzk3NTggKi8KKyNkZWZpbmUgQUM5N19TSUdNQVRFTF9NVUxUSUNITgkweDc0CS8qIE11bHRpLUNoYW5uZWwgcHJvZ3JhbW1pbmcgKi8KKyNkZWZpbmUgQUM5N19TSUdNQVRFTF9DSUMxCTB4NzYKKyNkZWZpbmUgQUM5N19TSUdNQVRFTF9DSUMyCTB4NzgKKworLyogc3BlY2lmaWMgLSBBbmFsb2cgRGV2aWNlcyAqLworI2RlZmluZSBBQzk3X0FEX1RFU1QJCTB4NWEJLyogdGVzdCByZWdpc3RlciAqLworI2RlZmluZSBBQzk3X0FEX0NPREVDX0NGRwkweDcwCS8qIGNvZGVjIGNvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgQUM5N19BRF9KQUNLX1NQRElGCTB4NzIJLyogSmFjayBTZW5zZSAmIFMvUERJRiAqLworI2RlZmluZSBBQzk3X0FEX1NFUklBTF9DRkcJMHg3NAkvKiBTZXJpYWwgQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSBBQzk3X0FEX01JU0MJCTB4NzYJLyogTWlzYyBDb250cm9sIEJpdHMgKi8KKworLyogc3BlY2lmaWMgLSBDaXJydXMgTG9naWMgKi8KKyNkZWZpbmUgQUM5N19DU1JfQUNNT0RFCQkweDVlCS8qIEFDIE1vZGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQUM5N19DU1JfTUlTQ19DUllTVEFMCTB4NjAJLyogTWlzYyBDcnlzdGFsIENvbnRyb2wgKi8KKyNkZWZpbmUgQUM5N19DU1JfU1BESUYJCTB4NjgJLyogUy9QRElGIFJlZ2lzdGVyICovCisjZGVmaW5lIEFDOTdfQ1NSX1NFUklBTAkJMHg2YQkvKiBTZXJpYWwgUG9ydCBDb250cm9sICovCisjZGVmaW5lIEFDOTdfQ1NSX1NQRUNGX0FERFIJMHg2YwkvKiBTcGVjaWFsIEZlYXR1cmUgQWRkcmVzcyAqLworI2RlZmluZSBBQzk3X0NTUl9TUEVDRl9EQVRBCTB4NmUJLyogU3BlY2lhbCBGZWF0dXJlIERhdGEgKi8KKyNkZWZpbmUgQUM5N19DU1JfQkRJX1NUQVRVUwkweDdhCS8qIEJESSBTdGF0dXMgKi8KKworLyogc3BlY2lmaWMgLSBDb25leGFudCAqLworI2RlZmluZSBBQzk3X0NYUl9BVURJT19NSVNDCTB4NWMKKyNkZWZpbmUgQUM5N19DWFJfU1BESUZFTgkoMTw8MykKKyNkZWZpbmUgQUM5N19DWFJfQ09QWVJHVAkoMTw8MikKKyNkZWZpbmUgQUM5N19DWFJfU1BESUZfTUFTSwkoMzw8MCkKKyNkZWZpbmUgQUM5N19DWFJfU1BESUZfUENNCTB4MAorI2RlZmluZSBBQzk3X0NYUl9TUERJRl9BQzMJMHgyCisKKy8qIHNwZWNpZmljIC0gQUxDICovCisjZGVmaW5lIEFDOTdfQUxDNjUwX1NQRElGX0lOUFVUX1NUQVRVUzEJMHg2MAorLyogUy9QRElGIGlucHV0IHN0YXR1cyAxIGJpdCBkZWZpbmVzICovCisjZGVmaW5lIEFDOTdfQUxDNjUwX1BSTyAgICAgICAgICAgICAweDAwMDEgIC8qIFByb2Zlc3Npb25hbCBzdGF0dXMgKi8KKyNkZWZpbmUgQUM5N19BTEM2NTBfTkFVRElPICAgICAgICAgIDB4MDAwMiAgLyogTm9uIGF1ZGlvIHN0cmVhbSAqLworI2RlZmluZSBBQzk3X0FMQzY1MF9DT1BZICAgICAgICAgICAgMHgwMDA0ICAvKiBDb3B5cmlnaHQgc3RhdHVzICovCisjZGVmaW5lIEFDOTdfQUxDNjUwX1BSRSAgICAgICAgICAgICAweDAwMzggIC8qIFByZWVtcGhhc2lzIHN0YXR1cyAqLworI2RlZmluZSBBQzk3X0FMQzY1MF9QUkVfU0hJRlQgICAgICAgMworI2RlZmluZSBBQzk3X0FMQzY1MF9NT0RFICAgICAgICAgICAgMHgwMEMwICAvKiBQcmVlbXBoYXNpcyBzdGF0dXMgKi8KKyNkZWZpbmUgQUM5N19BTEM2NTBfTU9ERV9TSElGVCAgICAgIDYKKyNkZWZpbmUgQUM5N19BTEM2NTBfQ0NfTUFTSyAgICAgICAgIDB4N2YwMCAgLyogQ2F0ZWdvcnkgQ29kZSBtYXNrICovCisjZGVmaW5lIEFDOTdfQUxDNjUwX0NDX1NISUZUICAgICAgICA4CisjZGVmaW5lIEFDOTdfQUxDNjUwX0wgICAgICAgICAgICAgICAweDgwMDAgIC8qIEdlbmVyYXRpb24gTGV2ZWwgc3RhdHVzICovCisKKyNkZWZpbmUgQUM5N19BTEM2NTBfU1BESUZfSU5QVVRfU1RBVFVTMgkweDYyCisvKiBTL1BESUYgaW5wdXQgc3RhdHVzIDIgYml0IGRlZmluZXMgKi8KKyNkZWZpbmUgQUM5N19BTEM2NTBfU09VQ0VfTUFTSyAgICAgIDB4MDAwZiAgLyogU291cmNlIG51bWJlciAqLworI2RlZmluZSBBQzk3X0FMQzY1MF9DSEFOTkVMX01BU0sgICAgMHgwMGYwICAvKiBDaGFubmVsIG51bWJlciAqLworI2RlZmluZSBBQzk3X0FMQzY1MF9DSEFOTkVMX1NISUZUICAgNCAKKyNkZWZpbmUgQUM5N19BTEM2NTBfU1BTUl9NQVNLICAgICAgIDB4MGYwMCAgLyogUy9QRElGIFNhbXBsZSBSYXRlIGJpdHMgKi8KKyNkZWZpbmUgQUM5N19BTEM2NTBfU1BTUl9TSElGVCAgICAgIDgKKyNkZWZpbmUgQUM5N19BTEM2NTBfU1BTUl80NEsgICAgICAgIDB4MDAwMCAgLyogVXNlIDQ0LjFrSHogU2FtcGxlIHJhdGUgKi8KKyNkZWZpbmUgQUM5N19BTEM2NTBfU1BTUl80OEsgICAgICAgIDB4MDIwMCAgLyogVXNlIDQ4a0h6IFNhbXBsZSByYXRlICovCisjZGVmaW5lIEFDOTdfQUxDNjUwX1NQU1JfMzJLICAgICAgICAweDAzMDAgIC8qIFVzZSAzMmtIeiBTYW1wbGUgcmF0ZSAqLworI2RlZmluZSBBQzk3X0FMQzY1MF9DTE9DS19BQ0NVUkFDWSAgMHgzMDAwICAvKiBDbG9jayBhY2N1cmFjeSAqLworI2RlZmluZSBBQzk3X0FMQzY1MF9DTE9DS19TSElGVCAgICAgMTIKKyNkZWZpbmUgQUM5N19BTEM2NTBfQ0xPQ0tfTE9DSyAgICAgIDB4NDAwMCAgLyogQ2xvY2sgbG9ja2VkIHN0YXR1cyAqLworI2RlZmluZSBBQzk3X0FMQzY1MF9WICAgICAgICAgICAgICAgMHg4MDAwICAvKiBWYWxpZGl0eSBzdGF0dXMgKi8KKworI2RlZmluZSBBQzk3X0FMQzY1MF9TVVJSX0RBQ19WT0wJMHg2NAorI2RlZmluZSBBQzk3X0FMQzY1MF9MRkVfREFDX1ZPTAkJMHg2NgorI2RlZmluZSBBQzk3X0FMQzY1MF9VTktOT1dOMQkJMHg2OAorI2RlZmluZSBBQzk3X0FMQzY1MF9NVUxUSUNICQkweDZhCisjZGVmaW5lIEFDOTdfQUxDNjUwX1VOS05PV04yCQkweDZjCisjZGVmaW5lIEFDOTdfQUxDNjUwX1JFVklTSU9OCQkweDZlCisjZGVmaW5lIEFDOTdfQUxDNjUwX1VOS05PV04zCQkweDcwCisjZGVmaW5lIEFDOTdfQUxDNjUwX1VOS05PV040CQkweDcyCisjZGVmaW5lIEFDOTdfQUxDNjUwX01JU0MJCTB4NzQKKyNkZWZpbmUgQUM5N19BTEM2NTBfR1BJT19TRVRVUAkJMHg3NgorI2RlZmluZSBBQzk3X0FMQzY1MF9HUElPX1NUQVRVUwkJMHg3OAorI2RlZmluZSBBQzk3X0FMQzY1MF9DTE9DSwkJMHg3YQorCisvKiBzcGVjaWZpYyAtIFlhbWFoYSBZTUY3NTMgKi8KKyNkZWZpbmUgQUM5N19ZTUY3NTNfRElUX0NUUkwyCTB4NjYJLyogRElUIENvbnRyb2wgMiAqLworI2RlZmluZSBBQzk3X1lNRjc1M18zRF9NT0RFX1NFTAkweDY4CS8qIDNEIE1vZGUgU2VsZWN0ICovCisKKy8qIHNwZWNpZmljIC0gQy1NZWRpYSAqLworI2RlZmluZSBBQzk3X0NNOTczOF9WRU5ET1JfQ1RSTAkweDVhCisjZGVmaW5lIEFDOTdfQ005NzM5X01VTFRJX0NIQU4JMHg2NAorI2RlZmluZSBBQzk3X0NNOTczOV9TUERJRl9JTl9TVEFUVVMJMHg2OCAvKiAzMmJpdCAqLworI2RlZmluZSBBQzk3X0NNOTczOV9TUERJRl9DVFJMCTB4NmMKKworLyogc3BlY2lmaWMgLSB3b2xmc29uICovCisjZGVmaW5lIEFDOTdfV005N1hYX0ZNSVhFUl9WT0wgIDB4NzIKKyNkZWZpbmUgQUM5N19XTTk3MDRfUk1JWEVSX1ZPTCAgMHg3NAorI2RlZmluZSBBQzk3X1dNOTcwNF9URVNUICAgICAgICAweDVhCisjZGVmaW5lIEFDOTdfV005NzA0X1JQQ01fVk9MICAgIDB4NzAKKyNkZWZpbmUgQUM5N19XTTk3MTFfT1VUM1ZPTCAgICAgMHgxNgorCisKKy8qIGFjOTctPnNjYXBzICovCisjZGVmaW5lIEFDOTdfU0NBUF9BVURJTwkJKDE8PDApCS8qIGF1ZGlvIGNvZGVjIDk3ICovCisjZGVmaW5lIEFDOTdfU0NBUF9NT0RFTQkJKDE8PDEpCS8qIG1vZGVtIGNvZGVjIDk3ICovCisjZGVmaW5lIEFDOTdfU0NBUF9TVVJST1VORF9EQUMJKDE8PDIpCS8qIHN1cnJvdW5kIEwmUiBEQUNzIGFyZSBwcmVzZW50ICovCisjZGVmaW5lIEFDOTdfU0NBUF9DRU5URVJfTEZFX0RBQyAoMTw8MykJLyogY2VudGVyIGFuZCBMRkUgREFDcyBhcmUgcHJlc2VudCAqLworI2RlZmluZSBBQzk3X1NDQVBfU0tJUF9BVURJTwkoMTw8NCkJLyogc2tpcCBhdWRpbyBwYXJ0IG9mIGNvZGVjICovCisjZGVmaW5lIEFDOTdfU0NBUF9TS0lQX01PREVNCSgxPDw1KQkvKiBza2lwIG1vZGVtIHBhcnQgb2YgY29kZWMgKi8KKyNkZWZpbmUgQUM5N19TQ0FQX0lOREVQX1NESU4JKDE8PDYpCS8qIGluZGVwZW5kZW50IFNESU4gKi8KKyNkZWZpbmUgQUM5N19TQ0FQX0lOVl9FQVBECSgxPDw3KQkvKiBpbnZlcnRlZCBFQVBEICovCisjZGVmaW5lIEFDOTdfU0NBUF9ERVRFQ1RfQllfVkVORE9SICgxPDw4KSAvKiB1c2UgdmVuZG9yIHJlZ2lzdGVycyBmb3IgcmVhZCB0ZXN0cyAqLworI2RlZmluZSBBQzk3X1NDQVBfTk9fU1BESUYJKDE8PDkpCS8qIGRvbid0IGJ1aWxkIFNQRElGIGNvbnRyb2xzICovCisKKy8qIGFjOTctPmZsYWdzICovCisjZGVmaW5lIEFDOTdfSEFTX1BDX0JFRVAJKDE8PDApCS8qIGZvcmNlIFBDIFNwZWFrZXIgdXNhZ2UgKi8KKyNkZWZpbmUgQUM5N19BRF9NVUxUSQkJKDE8PDEpCS8qIEFuYWxvZyBEZXZpY2VzIC0gbXVsdGkgY29kZWNzICovCisjZGVmaW5lIEFDOTdfQ1NfU1BESUYJCSgxPDwyKQkvKiBDaXJydXMgTG9naWMgdXNlcyBmdW5reSBTUERJRiAqLworI2RlZmluZSBBQzk3X0NYX1NQRElGCQkoMTw8MykJLyogQ29uZXhhbnQncyBzcGRpZiBpbnRlcmZhY2UgKi8KKyNkZWZpbmUgQUM5N19TVEVSRU9fTVVURVMJKDE8PDQpCS8qIGhhcyBzdGVyZW8gbXV0ZSBiaXRzICovCisjZGVmaW5lIEFDOTdfRE9VQkxFX1JBVEUJKDE8PDUpCS8qIHN1cHBvcnRzIGRvdWJsZSByYXRlIHBsYXliYWNrICovCisjZGVmaW5lIEFDOTdfSEFTX05PX01BU1RFUl9WT0wJKDE8PDYpCS8qIG5vIE1hc3RlciB2b2x1bWUgKi8KKyNkZWZpbmUgQUM5N19IQVNfTk9fUENNX1ZPTAkoMTw8NykJLyogbm8gUENNIHZvbHVtZSAqLworI2RlZmluZSBBQzk3X0RFRkFVTFRfUE9XRVJfT0ZGCSgxPDw4KQkvKiBubyBSRVNFVCB3cml0ZSAqLworI2RlZmluZSBBQzk3X01PREVNX1BBVENICSgxPDw5KQkvKiBtb2RlbSBwYXRjaCAqLworI2RlZmluZSBBQzk3X0hBU19OT19SRUNfR0FJTgkoMTw8MTApIC8qIG5vIFJlY29yZCBnYWluICovCisjZGVmaW5lIEFDOTdfSEFTX05PX1BIT05FCSgxPDwxMSkgLyogbm8gUEhPTkUgdm9sdW1lICovCisjZGVmaW5lIEFDOTdfSEFTX05PX1BDX0JFRVAJKDE8PDEyKSAvKiBubyBQQyBCZWVwIHZvbHVtZSAqLworI2RlZmluZSBBQzk3X0hBU19OT19WSURFTwkoMTw8MTMpIC8qIG5vIFZpZGVvIHZvbHVtZSAqLworI2RlZmluZSBBQzk3X0hBU19OT19DRAkJKDE8PDE0KSAvKiBubyBDRCB2b2x1bWUgKi8KKworLyogcmF0ZXMgaW5kZXhlcyAqLworI2RlZmluZSBBQzk3X1JBVEVTX0ZST05UX0RBQwkwCisjZGVmaW5lIEFDOTdfUkFURVNfU1VSUl9EQUMJMQorI2RlZmluZSBBQzk3X1JBVEVTX0xGRV9EQUMJMgorI2RlZmluZSBBQzk3X1JBVEVTX0FEQwkJMworI2RlZmluZSBBQzk3X1JBVEVTX01JQ19BREMJNAorI2RlZmluZSBBQzk3X1JBVEVTX1NQRElGCTUKKworLyogc2hhcmVkIGNvbnRyb2xsZXJzICovCitlbnVtIHsKKwlBQzk3X1NIQVJFRF9UWVBFX05PTkUsCisJQUM5N19TSEFSRURfVFlQRV9JQ0gsCisJQUM5N19TSEFSRURfVFlQRV9BVElJWFAsCisJQUM5N19TSEFSRURfVFlQRV9WSUEsCisJQUM5N19TSEFSRURfVFlQRVMKK307CisKKy8qCisgKgorICovCisKK3R5cGVkZWYgc3RydWN0IF9zbmRfYWM5N19idXMgYWM5N19idXNfdDsKK3R5cGVkZWYgc3RydWN0IF9zbmRfYWM5N19idXNfb3BzIGFjOTdfYnVzX29wc190OwordHlwZWRlZiBzdHJ1Y3QgX3NuZF9hYzk3X3RlbXBsYXRlIGFjOTdfdGVtcGxhdGVfdDsKK3R5cGVkZWYgc3RydWN0IF9zbmRfYWM5NyBhYzk3X3Q7CisKK2VudW0gYWM5N19wY21fY2ZnIHsKKwlBQzk3X1BDTV9DRkdfRlJPTlQgPSAyLAorCUFDOTdfUENNX0NGR19SRUFSID0gMTAsCQkvKiBhbGlhcyBzdXJyb3VuZCAqLworCUFDOTdfUENNX0NGR19MRkUgPSAxMSwJCS8qIGNlbnRlciArIGxmZSAqLworCUFDOTdfUENNX0NGR180MCA9IDQsCQkvKiBmcm9udCArIHJlYXIgKi8KKwlBQzk3X1BDTV9DRkdfNTEgPSA2LAkJLyogZnJvbnQgKyByZWFyICsgY2VudGVyL2xmZSAqLworCUFDOTdfUENNX0NGR19TUERJRiA9IDIwCit9OworCisvKiBQQ00gYWxsb2NhdGlvbiAqLworc3RydWN0IGFjOTdfcGNtIHsKKwlhYzk3X2J1c190ICpidXM7CisJdW5zaWduZWQgaW50IHN0cmVhbTogMSwJICAgCSAgIC8qIHN0cmVhbSB0eXBlOiAxID0gY2FwdHVyZSAqLworCQkgICAgIGV4Y2x1c2l2ZTogMSwJICAgLyogZXhjbHVzaXZlIG1vZGUsIGRvbid0IG92ZXJyaWRlIHdpdGggb3RoZXIgcGNtcyAqLworCQkgICAgIGNvcHlfZmxhZzogMSwJICAgLyogbG93bGV2ZWwgZHJpdmVyIG11c3QgZmlsbCBhbGwgZW50cmllcyAqLworCQkgICAgIHNwZGlmOiAxOwkJICAgLyogc3BkaWYgcGNtICovCisJdW5zaWduZWQgc2hvcnQgYXNsb3RzOwkJICAgLyogYWN0aXZlIHNsb3RzICovCisJdW5zaWduZWQgaW50IHJhdGVzOwkJICAgLyogYXZhaWxhYmxlIHJhdGVzICovCisJc3RydWN0IHsKKwkJdW5zaWduZWQgc2hvcnQgc2xvdHM7CSAgIC8qIGRyaXZlciBpbnB1dDogcmVxdWVzdGVkIEFDOTcgc2xvdCBudW1iZXJzICovCisJCXVuc2lnbmVkIHNob3J0IHJzbG90c1s0XTsgIC8qIGFsbG9jYXRlZCBzbG90cyBwZXIgY29kZWNzICovCisJCXVuc2lnbmVkIGNoYXIgcmF0ZV90YWJsZVs0XTsKKwkJYWM5N190ICpjb2RlY1s0XTsJICAgLyogYWxsb2NhdGVkIGNvZGVjcyAqLworCX0gclsyXTsJCQkJICAgLyogMCA9IHN0YW5kYXJkIHJhdGVzLCAxID0gZG91YmxlIHJhdGVzICovCisJdW5zaWduZWQgbG9uZyBwcml2YXRlX3ZhbHVlOwkgICAvKiB1c2VkIGJ5IHRoZSBoYXJkd2FyZSBkcml2ZXIgKi8KK307CisKK3N0cnVjdCBzbmRfYWM5N19idWlsZF9vcHMgeworCWludCAoKmJ1aWxkXzNkKSAoYWM5N190ICphYzk3KTsKKwlpbnQgKCpidWlsZF9zcGVjaWZpYykgKGFjOTdfdCAqYWM5Nyk7CisJaW50ICgqYnVpbGRfc3BkaWYpIChhYzk3X3QgKmFjOTcpOworCWludCAoKmJ1aWxkX3Bvc3Rfc3BkaWYpIChhYzk3X3QgKmFjOTcpOworI2lmZGVmIENPTkZJR19QTQorCXZvaWQgKCpzdXNwZW5kKSAoYWM5N190ICphYzk3KTsKKwl2b2lkICgqcmVzdW1lKSAoYWM5N190ICphYzk3KTsKKyNlbmRpZgorfTsKKworc3RydWN0IF9zbmRfYWM5N19idXNfb3BzIHsKKwl2b2lkICgqcmVzZXQpIChhYzk3X3QgKmFjOTcpOworCXZvaWQgKCp3cml0ZSkgKGFjOTdfdCAqYWM5NywgdW5zaWduZWQgc2hvcnQgcmVnLCB1bnNpZ25lZCBzaG9ydCB2YWwpOworCXVuc2lnbmVkIHNob3J0ICgqcmVhZCkgKGFjOTdfdCAqYWM5NywgdW5zaWduZWQgc2hvcnQgcmVnKTsKKwl2b2lkICgqd2FpdCkgKGFjOTdfdCAqYWM5Nyk7CisJdm9pZCAoKmluaXQpIChhYzk3X3QgKmFjOTcpOworfTsKKworc3RydWN0IF9zbmRfYWM5N19idXMgeworCS8qIC0tIGxvd2xldmVsIChoYXJkd2FyZSkgZHJpdmVyIHNwZWNpZmljIC0tICovCisJYWM5N19idXNfb3BzX3QgKm9wczsKKwl2b2lkICpwcml2YXRlX2RhdGE7CisJdm9pZCAoKnByaXZhdGVfZnJlZSkgKGFjOTdfYnVzX3QgKmJ1cyk7CisJLyogLS0tICovCisJc25kX2NhcmRfdCAqY2FyZDsKKwl1bnNpZ25lZCBzaG9ydCBudW07CS8qIGJ1cyBudW1iZXIgKi8KKwl1bnNpZ25lZCBzaG9ydCBub192cmE6IDEsIC8qIGJyaWRnZSBkb2Vzbid0IHN1cHBvcnQgVlJBICovCisJCSAgICAgICBkcmE6IDEsCS8qIGJyaWRnZSBzdXBwb3J0cyBkb3VibGUgcmF0ZSAqLworCQkgICAgICAgaXNkaW46IDE7LyogaW5kZXBlbmRlbnQgU0RJTiAqLworCXVuc2lnbmVkIGludCBjbG9jazsJLyogQUMnOTcgYmFzZSBjbG9jayAodXN1YWxseSA0ODAwMEh6KSAqLworCXNwaW5sb2NrX3QgYnVzX2xvY2s7CS8qIHVzZWQgbWFpbmx5IGZvciBzbG90IGFsbG9jYXRpb24gKi8KKwl1bnNpZ25lZCBzaG9ydCB1c2VkX3Nsb3RzWzJdWzRdOyAvKiBhY3R1YWxseSB1c2VkIFBDTSBzbG90cyAqLworCXVuc2lnbmVkIHNob3J0IHBjbXNfY291bnQ7IC8qIGNvdW50IG9mIFBDTXMgKi8KKwlzdHJ1Y3QgYWM5N19wY20gKnBjbXM7CisJdW5zaWduZWQgaW50IHNoYXJlZF90eXBlOwkvKiB0eXBlIG9mIHNoYXJlZCBjb250cm9sbGVyIGJldHdlbiBhdWRpbyBhbmQgbW9kZW0gKi8KKwlhYzk3X3QgKmNvZGVjWzRdOworCXNuZF9pbmZvX2VudHJ5X3QgKnByb2M7Cit9OworCitzdHJ1Y3QgX3NuZF9hYzk3X3RlbXBsYXRlIHsKKwl2b2lkICpwcml2YXRlX2RhdGE7CisJdm9pZCAoKnByaXZhdGVfZnJlZSkgKGFjOTdfdCAqYWM5Nyk7CisJc3RydWN0IHBjaV9kZXYgKnBjaTsJLyogYXNzaWduZWQgUENJIGRldmljZSAtIHVzZWQgZm9yIHF1aXJrcyAqLworCXVuc2lnbmVkIHNob3J0IG51bTsJLyogbnVtYmVyIG9mIGNvZGVjOiAwID0gcHJpbWFyeSwgMSA9IHNlY29uZGFyeSAqLworCXVuc2lnbmVkIHNob3J0IGFkZHI7CS8qIHBoeXNpY2FsIGFkZHJlc3Mgb2YgY29kZWMgWzAtM10gKi8KKwl1bnNpZ25lZCBpbnQgc2NhcHM7CS8qIGRyaXZlciBjYXBhYmlsaXRpZXMgKi8KKwl1bnNpZ25lZCBpbnQgbGltaXRlZF9yZWdzOyAvKiBhbGxvdyBsaW1pdGVkIHJlZ2lzdGVycyBvbmx5ICovCisJREVDTEFSRV9CSVRNQVAocmVnX2FjY2Vzc2VkLCAweDgwKTsgLyogYml0IGZsYWdzICovCit9OworCitzdHJ1Y3QgX3NuZF9hYzk3IHsKKwkvKiAtLSBsb3dsZXZlbCAoaGFyZHdhcmUpIGRyaXZlciBzcGVjaWZpYyAtLSAqLworCXN0cnVjdCBzbmRfYWM5N19idWlsZF9vcHMgKiBidWlsZF9vcHM7CisJdm9pZCAqcHJpdmF0ZV9kYXRhOworCXZvaWQgKCpwcml2YXRlX2ZyZWUpIChhYzk3X3QgKmFjOTcpOworCS8qIC0tLSAqLworCWFjOTdfYnVzX3QgKmJ1czsKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpOwkvKiBhc3NpZ25lZCBQQ0kgZGV2aWNlIC0gdXNlZCBmb3IgcXVpcmtzICovCisJc25kX2luZm9fZW50cnlfdCAqcHJvYzsKKwlzbmRfaW5mb19lbnRyeV90ICpwcm9jX3JlZ3M7CisJdW5zaWduZWQgc2hvcnQgc3Vic3lzdGVtX3ZlbmRvcjsKKwl1bnNpZ25lZCBzaG9ydCBzdWJzeXN0ZW1fZGV2aWNlOworCXN0cnVjdCBzZW1hcGhvcmUgcmVnX211dGV4OworCXN0cnVjdCBzZW1hcGhvcmUgcGFnZV9tdXRleDsJLyogbXV0ZXggZm9yIEFEMTh4eCBtdWx0aS1jb2RlY3MgYW5kIHBhZ2luZyAoMi4zKSAqLworCXVuc2lnbmVkIHNob3J0IG51bTsJLyogbnVtYmVyIG9mIGNvZGVjOiAwID0gcHJpbWFyeSwgMSA9IHNlY29uZGFyeSAqLworCXVuc2lnbmVkIHNob3J0IGFkZHI7CS8qIHBoeXNpY2FsIGFkZHJlc3Mgb2YgY29kZWMgWzAtM10gKi8KKwl1bnNpZ25lZCBpbnQgaWQ7CS8qIGlkZW50aWZpY2F0aW9uIG9mIGNvZGVjICovCisJdW5zaWduZWQgc2hvcnQgY2FwczsJLyogY2FwYWJpbGl0aWVzIChyZWdpc3RlciAwKSAqLworCXVuc2lnbmVkIHNob3J0IGV4dF9pZDsJLyogZXh0ZW5kZWQgZmVhdHVyZSBpZGVudGlmaWNhdGlvbiAocmVnaXN0ZXIgMjgpICovCisJdW5zaWduZWQgc2hvcnQgZXh0X21pZDsJLyogZXh0ZW5kZWQgbW9kZW0gSUQgKHJlZ2lzdGVyIDNDKSAqLworCXVuc2lnbmVkIGludCBzY2FwczsJLyogZHJpdmVyIGNhcGFiaWxpdGllcyAqLworCXVuc2lnbmVkIGludCBmbGFnczsJLyogc3BlY2lmaWMgY29kZSAqLworCXVuc2lnbmVkIGludCByYXRlc1s2XTsJLyogc2VlIEFDOTdfUkFURVNfKiBkZWZpbmVzICovCisJdW5zaWduZWQgaW50IHNwZGlmX3N0YXR1czsKKwl1bnNpZ25lZCBzaG9ydCByZWdzWzB4ODBdOyAvKiByZWdpc3RlciBjYWNoZSAqLworCXVuc2lnbmVkIGludCBsaW1pdGVkX3JlZ3M7IC8qIGFsbG93IGxpbWl0ZWQgcmVnaXN0ZXJzIG9ubHkgKi8KKwlERUNMQVJFX0JJVE1BUChyZWdfYWNjZXNzZWQsIDB4ODApOyAvKiBiaXQgZmxhZ3MgKi8KKwl1bmlvbiB7CQkJLyogdmVuZG9yIHNwZWNpZmljIGNvZGUgKi8KKwkJc3RydWN0IHsKKwkJCXVuc2lnbmVkIHNob3J0IHVuY2hhaW5lZFszXTsJLy8gMCA9IEMzNCwgMSA9IEM3OSwgMiA9IEM2OQorCQkJdW5zaWduZWQgc2hvcnQgY2hhaW5lZFszXTsJLy8gMCA9IEMzNCwgMSA9IEM3OSwgMiA9IEM2OQorCQkJdW5zaWduZWQgc2hvcnQgaWRbM107CQkvLyBjb2RlYyBJRHMgKGxvd2VyIDE2LWJpdCB3b3JkKQorCQkJdW5zaWduZWQgc2hvcnQgcGNtcmVnWzNdOwkvLyBQQ00gcmVnaXN0ZXJzCisJCQl1bnNpZ25lZCBzaG9ydCBjb2RlY19jZmdbM107CS8vIENPREVDX0NGRyBiaXRzCisJCX0gYWQxOHh4OworCQl1bnNpZ25lZCBpbnQgZGV2X2ZsYWdzOwkJLyogZGV2aWNlIHNwZWNpZmljICovCisJfSBzcGVjOworfTsKKworLyogY29uZGl0aW9ucyAqLworc3RhdGljIGlubGluZSBpbnQgYWM5N19pc19hdWRpbyhhYzk3X3QgKiBhYzk3KQoreworCXJldHVybiAoYWM5Ny0+c2NhcHMgJiBBQzk3X1NDQVBfQVVESU8pOworfQorc3RhdGljIGlubGluZSBpbnQgYWM5N19pc19tb2RlbShhYzk3X3QgKiBhYzk3KQoreworCXJldHVybiAoYWM5Ny0+c2NhcHMgJiBBQzk3X1NDQVBfTU9ERU0pOworfQorc3RhdGljIGlubGluZSBpbnQgYWM5N19pc19yZXYyMihhYzk3X3QgKiBhYzk3KQoreworCXJldHVybiAoYWM5Ny0+ZXh0X2lkICYgQUM5N19FSV9SRVZfTUFTSykgPj0gQUM5N19FSV9SRVZfMjI7Cit9CitzdGF0aWMgaW5saW5lIGludCBhYzk3X2Nhbl9hbWFwKGFjOTdfdCAqIGFjOTcpCit7CisJcmV0dXJuIChhYzk3LT5leHRfaWQgJiBBQzk3X0VJX0FNQVApICE9IDA7Cit9CitzdGF0aWMgaW5saW5lIGludCBhYzk3X2Nhbl9zcGRpZihhYzk3X3QgKiBhYzk3KQoreworCXJldHVybiAoYWM5Ny0+ZXh0X2lkICYgQUM5N19FSV9TUERJRikgIT0gMDsKK30KKworLyogZnVuY3Rpb25zICovCitpbnQgc25kX2FjOTdfYnVzKHNuZF9jYXJkX3QgKmNhcmQsIGludCBudW0sIGFjOTdfYnVzX29wc190ICpvcHMsIHZvaWQgKnByaXZhdGVfZGF0YSwgYWM5N19idXNfdCAqKnJidXMpOyAvKiBjcmVhdGUgbmV3IEFDOTcgYnVzICovCitpbnQgc25kX2FjOTdfbWl4ZXIoYWM5N19idXNfdCAqYnVzLCBhYzk3X3RlbXBsYXRlX3QgKnRlbXBsYXRlLCBhYzk3X3QgKipyYWM5Nyk7CS8qIGNyZWF0ZSBtaXhlciBjb250cm9scyAqLworY29uc3QgY2hhciAqc25kX2FjOTdfZ2V0X3Nob3J0X25hbWUoYWM5N190ICphYzk3KTsKKwordm9pZCBzbmRfYWM5N193cml0ZShhYzk3X3QgKmFjOTcsIHVuc2lnbmVkIHNob3J0IHJlZywgdW5zaWduZWQgc2hvcnQgdmFsdWUpOwordW5zaWduZWQgc2hvcnQgc25kX2FjOTdfcmVhZChhYzk3X3QgKmFjOTcsIHVuc2lnbmVkIHNob3J0IHJlZyk7Cit2b2lkIHNuZF9hYzk3X3dyaXRlX2NhY2hlKGFjOTdfdCAqYWM5NywgdW5zaWduZWQgc2hvcnQgcmVnLCB1bnNpZ25lZCBzaG9ydCB2YWx1ZSk7CitpbnQgc25kX2FjOTdfdXBkYXRlKGFjOTdfdCAqYWM5NywgdW5zaWduZWQgc2hvcnQgcmVnLCB1bnNpZ25lZCBzaG9ydCB2YWx1ZSk7CitpbnQgc25kX2FjOTdfdXBkYXRlX2JpdHMoYWM5N190ICphYzk3LCB1bnNpZ25lZCBzaG9ydCByZWcsIHVuc2lnbmVkIHNob3J0IG1hc2ssIHVuc2lnbmVkIHNob3J0IHZhbHVlKTsKKyNpZmRlZiBDT05GSUdfUE0KK3ZvaWQgc25kX2FjOTdfc3VzcGVuZChhYzk3X3QgKmFjOTcpOwordm9pZCBzbmRfYWM5N19yZXN1bWUoYWM5N190ICphYzk3KTsKKyNlbmRpZgorCisvKiBxdWlyayB0eXBlcyAqLworZW51bSB7CisJQUM5N19UVU5FX0RFRkFVTFQgPSAtMSwJLyogdXNlIGRlZmF1bHQgZnJvbSBxdWlyayBsaXN0IChub3QgdmFsaWQgaW4gbGlzdCkgKi8KKwlBQzk3X1RVTkVfTk9ORSA9IDAsCS8qIG5vdGhpbmcgZXh0cmEgdG8gZG8gKi8KKwlBQzk3X1RVTkVfSFBfT05MWSwJLyogaGVhZHBob25lICh0cnVlIGxpbmUtb3V0KSBjb250cm9sIGFzIG1hc3RlciBvbmx5ICovCisJQUM5N19UVU5FX1NXQVBfSFAsCS8qIHN3YXAgaGVhZHBob25lIGFuZCBtYXN0ZXIgY29udHJvbHMgKi8KKwlBQzk3X1RVTkVfU1dBUF9TVVJST1VORCwgLyogc3dhcCBtYXN0ZXIgYW5kIHN1cnJvdW5kIGNvbnRyb2xzICovCisJQUM5N19UVU5FX0FEX1NIQVJJTkcsCS8qIGZvciBBRDE5ODUsIHR1cm4gb24gT01TIGJpdCBhbmQgdXNlIGhlYWRwaG9uZSAqLworCUFDOTdfVFVORV9BTENfSkFDSywJLyogZm9yIFJlYWx0ZWssIGVuYWJsZSBKQUNLIGRldGVjdGlvbiAqLworCUFDOTdfVFVORV9JTlZfRUFQRCwJLyogaW52ZXJ0ZWQgRUFQRCBpbXBsZW1lbnRhdGlvbiAqLworCUFDOTdfVFVORV9NVVRFX0xFRCwJLyogRUFQRCBiaXQgd29ya3MgYXMgbXV0ZSBMRUQgKi8KK307CisKK3N0cnVjdCBhYzk3X3F1aXJrIHsKKwl1bnNpZ25lZCBzaG9ydCB2ZW5kb3I7CS8qIFBDSSB2ZW5kb3IgaWQgKi8KKwl1bnNpZ25lZCBzaG9ydCBkZXZpY2U7CS8qIFBDSSBkZXZpY2UgaWQgKi8KKwl1bnNpZ25lZCBzaG9ydCBtYXNrOwkvKiBkZXZpY2UgaWQgYml0IG1hc2ssIDAgPSBhY2NlcHQgYWxsICovCisJdW5zaWduZWQgaW50IGNvZGVjX2lkOwkvKiBjb2RlYyBpZCAoaWYgYW55KSwgMCA9IGFjY2VwdCBhbGwgKi8KKwljb25zdCBjaGFyICpuYW1lOwkvKiBuYW1lIHNob3duIGFzIGluZm8gKi8KKwlpbnQgdHlwZTsJCS8qIHF1aXJrIHR5cGUgYWJvdmUgKi8KK307CisKK2ludCBzbmRfYWM5N190dW5lX2hhcmR3YXJlKGFjOTdfdCAqYWM5Nywgc3RydWN0IGFjOTdfcXVpcmsgKnF1aXJrLCBjb25zdCBjaGFyICpvdmVycmlkZSk7CitpbnQgc25kX2FjOTdfc2V0X3JhdGUoYWM5N190ICphYzk3LCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQgcmF0ZSk7CisKK2ludCBzbmRfYWM5N19wY21fYXNzaWduKGFjOTdfYnVzX3QgKmFjOTcsCisJCQl1bnNpZ25lZCBzaG9ydCBwY21zX2NvdW50LAorCQkJY29uc3Qgc3RydWN0IGFjOTdfcGNtICpwY21zKTsKK2ludCBzbmRfYWM5N19wY21fb3BlbihzdHJ1Y3QgYWM5N19wY20gKnBjbSwgdW5zaWduZWQgaW50IHJhdGUsCisJCSAgICAgIGVudW0gYWM5N19wY21fY2ZnIGNmZywgdW5zaWduZWQgc2hvcnQgc2xvdHMpOworaW50IHNuZF9hYzk3X3BjbV9jbG9zZShzdHJ1Y3QgYWM5N19wY20gKnBjbSk7CitpbnQgc25kX2FjOTdfcGNtX2RvdWJsZV9yYXRlX3J1bGVzKHNuZF9wY21fcnVudGltZV90ICpydW50aW1lKTsKKworc3RydWN0IGFjOTdfZW51bSB7CisJdW5zaWduZWQgY2hhciByZWc7CisJdW5zaWduZWQgY2hhciBzaGlmdF9sOworCXVuc2lnbmVkIGNoYXIgc2hpZnRfcjsKKwl1bnNpZ25lZCBzaG9ydCBtYXNrOworCWNvbnN0IGNoYXIgKip0ZXh0czsKK307CisjZW5kaWYgLyogX19TT1VORF9BQzk3X0NPREVDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvYWQxODE2YS5oIGIvaW5jbHVkZS9zb3VuZC9hZDE4MTZhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk1OTc4ZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvc291bmQvYWQxODE2YS5oCkBAIC0wLDAgKzEsMTc0IEBACisjaWZuZGVmIF9fU09VTkRfQUQxODE2QV9ICisjZGVmaW5lIF9fU09VTkRfQUQxODE2QV9ICisKKy8qCisgICAgYWQxODE2YS5oIC0gZGVmaW5pdGlvbnMgZm9yIEFESSBTb3VuZFBvcnQgQUQxODE2QSBjaGlwLgorICAgIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIGJ5IE1hc3NpbW8gUGljY2lvbmkgPGRhZmFzdGlkaW9AbGliZXJvLml0PgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisqLworCisjaW5jbHVkZSAiY29udHJvbC5oIgorI2luY2x1ZGUgInBjbS5oIgorI2luY2x1ZGUgInRpbWVyLmgiCisKKyNkZWZpbmUgQUQxODE2QV9SRUcocikJCQkoY2hpcC0+cG9ydCArIHIpCisKKyNkZWZpbmUgQUQxODE2QV9DSElQX1NUQVRVUwkJMHgwMAorI2RlZmluZSBBRDE4MTZBX0lORElSX0FERFIJCTB4MDAKKyNkZWZpbmUgQUQxODE2QV9JTlRFUlJVUFRfU1RBVFVTCTB4MDEKKyNkZWZpbmUgQUQxODE2QV9JTkRJUl9EQVRBX0xPVwkJMHgwMgorI2RlZmluZSBBRDE4MTZBX0lORElSX0RBVEFfSElHSAkJMHgwMworI2RlZmluZSBBRDE4MTZBX1BJT19ERUJVRwkJMHgwNAorI2RlZmluZSBBRDE4MTZBX1BJT19TVEFUVVMJCTB4MDUKKyNkZWZpbmUgQUQxODE2QV9QSU9fREFUQQkJMHgwNgorI2RlZmluZSBBRDE4MTZBX1JFU0VSVkVEXzcJCTB4MDcKKyNkZWZpbmUgQUQxODE2QV9QTEFZQkFDS19DT05GSUcJCTB4MDgKKyNkZWZpbmUgQUQxODE2QV9DQVBUVVJFX0NPTkZJRwkJMHgwOQorI2RlZmluZSBBRDE4MTZBX1JFU0VSVkVEXzEwCQkweDBhCisjZGVmaW5lIEFEMTgxNkFfUkVTRVJWRURfMTEJCTB4MGIKKyNkZWZpbmUgQUQxODE2QV9KT1lTVElDS19SQVdfREFUQQkweDBjCisjZGVmaW5lIEFEMTgxNkFfSk9ZU1RJQ0tfQ1RSTAkJMHgwZAorI2RlZmluZSBBRDE4MTZBX0pPWV9QT1NfREFUQV9MT1cJMHgwZQorI2RlZmluZSBBRDE4MTZBX0pPWV9QT1NfREFUQV9ISUdICTB4MGYKKworI2RlZmluZSBBRDE4MTZBX0xPV19CWVRFX1RNUAkJMHgwMAorI2RlZmluZSBBRDE4MTZBX0lOVEVSUlVQVF9FTkFCTEUJMHgwMQorI2RlZmluZSBBRDE4MTZBX0VYVEVSTkFMX0NUUkwJCTB4MDEKKyNkZWZpbmUgQUQxODE2QV9QTEFZQkFDS19TQU1QTEVfUkFURQkweDAyCisjZGVmaW5lIEFEMTgxNkFfQ0FQVFVSRV9TQU1QTEVfUkFURQkweDAzCisjZGVmaW5lIEFEMTgxNkFfVk9JQ0VfQVRUCQkweDA0CisjZGVmaW5lIEFEMTgxNkFfRk1fQVRUCQkJMHgwNQorI2RlZmluZSBBRDE4MTZBX0kyU18xX0FUVAkJMHgwNgorI2RlZmluZSBBRDE4MTZBX0kyU18wX0FUVAkJMHgwNworI2RlZmluZSBBRDE4MTZBX1BMQVlCQUNLX0JBU0VfQ09VTlQJMHgwOAorI2RlZmluZSBBRDE4MTZBX1BMQVlCQUNLX0NVUlJfQ09VTlQJMHgwOQorI2RlZmluZSBBRDE4MTZBX0NBUFRVUkVfQkFTRV9DT1VOVAkweDBhCisjZGVmaW5lIEFEMTgxNkFfQ0FQVFVSRV9DVVJSX0NPVU5UCTB4MGIKKyNkZWZpbmUgQUQxODE2QV9USU1FUl9CQVNFX0NPVU5UCTB4MGMKKyNkZWZpbmUgQUQxODE2QV9USU1FUl9DVVJSX0NPVU5UCTB4MGQKKyNkZWZpbmUgQUQxODE2QV9NQVNURVJfQVRUCQkweDBlCisjZGVmaW5lIEFEMTgxNkFfQ0RfR0FJTl9BVFQJCTB4MGYKKyNkZWZpbmUgQUQxODE2QV9TWU5USF9HQUlOX0FUVAkJMHgxMAorI2RlZmluZSBBRDE4MTZBX1ZJRF9HQUlOX0FUVAkJMHgxMQorI2RlZmluZSBBRDE4MTZBX0xJTkVfR0FJTl9BVFQJCTB4MTIKKyNkZWZpbmUgQUQxODE2QV9NSUNfR0FJTl9BVFQJCTB4MTMKKyNkZWZpbmUgQUQxODE2QV9QSE9ORV9JTl9HQUlOX0FUVAkweDEzCisjZGVmaW5lIEFEMTgxNkFfQURDX1NPVVJDRV9TRUwJCTB4MTQKKyNkZWZpbmUgQUQxODE2QV9BRENfUEdBCQkJMHgxNAorI2RlZmluZSBBRDE4MTZBX0NISVBfQ09ORklHCQkweDIwCisjZGVmaW5lIEFEMTgxNkFfRFNQX0NPTkZJRwkJMHgyMQorI2RlZmluZSBBRDE4MTZBX0ZNX1NBTVBMRV9SQVRFCQkweDIyCisjZGVmaW5lIEFEMTgxNkFfSTJTXzFfU0FNUExFX1JBVEUJMHgyMworI2RlZmluZSBBRDE4MTZBX0kyU18wX1NBTVBMRV9SQVRFCTB4MjQKKyNkZWZpbmUgQUQxODE2QV9SRVNFUlZFRF8zNwkJMHgyNQorI2RlZmluZSBBRDE4MTZBX1BST0dSQU1fQ0xPQ0tfUkFURQkweDI2CisjZGVmaW5lIEFEMTgxNkFfM0RfUEhBVF9DVFJMCQkweDI3CisjZGVmaW5lIEFEMTgxNkFfUEhPTkVfT1VUX0FUVAkJMHgyNworI2RlZmluZSBBRDE4MTZBX1JFU0VSVkVEXzQwCQkweDI4CisjZGVmaW5lIEFEMTgxNkFfSFdfVk9MX0JVVAkJMHgyOQorI2RlZmluZSBBRDE4MTZBX0RTUF9NQUlMQk9YXzAJCTB4MmEKKyNkZWZpbmUgQUQxODE2QV9EU1BfTUFJTEJPWF8xCQkweDJiCisjZGVmaW5lIEFEMTgxNkFfUE9XRVJET1dOX0NUUkwJCTB4MmMKKyNkZWZpbmUgQUQxODE2QV9USU1FUl9DVFJMCQkweDJjCisjZGVmaW5lIEFEMTgxNkFfVkVSU0lPTl9JRAkJMHgyZAorI2RlZmluZSBBRDE4MTZBX1JFU0VSVkVEXzQ2CQkweDJlCisKKyNkZWZpbmUgQUQxODE2QV9SRUFEWQkJCTB4ODAKKworI2RlZmluZSBBRDE4MTZBX1BMQVlCQUNLX0lSUV9QRU5ESU5HCTB4ODAKKyNkZWZpbmUgQUQxODE2QV9DQVBUVVJFX0lSUV9QRU5ESU5HCTB4NDAKKyNkZWZpbmUgQUQxODE2QV9USU1FUl9JUlFfUEVORElORwkweDIwCisKKyNkZWZpbmUgQUQxODE2QV9QTEFZQkFDS19FTkFCTEUJCTB4MDEKKyNkZWZpbmUgQUQxODE2QV9QTEFZQkFDS19QSU8JCTB4MDIKKyNkZWZpbmUgQUQxODE2QV9DQVBUVVJFX0VOQUJMRQkJMHgwMQorI2RlZmluZSBBRDE4MTZBX0NBUFRVUkVfUElPCQkweDAyCisKKyNkZWZpbmUgQUQxODE2QV9GTVRfTElORUFSXzgJCTB4MDAKKyNkZWZpbmUgQUQxODE2QV9GTVRfVUxBV184CQkweDA4CisjZGVmaW5lIEFEMTgxNkFfRk1UX0xJTkVBUl8xNl9MSVQJMHgxMAorI2RlZmluZSBBRDE4MTZBX0ZNVF9BTEFXXzgJCTB4MTgKKyNkZWZpbmUgQUQxODE2QV9GTVRfTElORUFSXzE2X0JJRwkweDMwCisjZGVmaW5lIEFEMTgxNkFfRk1UX0FMTAkJCTB4MzgKKyNkZWZpbmUgQUQxODE2QV9GTVRfU1RFUkVPCQkweDA0CisKKyNkZWZpbmUgQUQxODE2QV9QTEFZQkFDS19JUlFfRU5BQkxFCTB4ODAwMAorI2RlZmluZSBBRDE4MTZBX0NBUFRVUkVfSVJRX0VOQUJMRQkweDQwMDAKKyNkZWZpbmUgQUQxODE2QV9USU1FUl9JUlFfRU5BQkxFCTB4MjAwMAorI2RlZmluZSBBRDE4MTZBX1RJTUVSX0VOQUJMRQkJMHgwMDgwCisKKyNkZWZpbmUgQUQxODE2QV9TUkNfTElORQkJMHgwMAorI2RlZmluZSBBRDE4MTZBX1NSQ19PVVQJCQkweDEwCisjZGVmaW5lIEFEMTgxNkFfU1JDX0NECQkJMHgyMAorI2RlZmluZSBBRDE4MTZBX1NSQ19TWU5USAkJMHgzMAorI2RlZmluZSBBRDE4MTZBX1NSQ19WSURFTwkJMHg0MAorI2RlZmluZSBBRDE4MTZBX1NSQ19NSUMJCQkweDUwCisjZGVmaW5lIEFEMTgxNkFfU1JDX01PTk8JCTB4NTAKKyNkZWZpbmUgQUQxODE2QV9TUkNfUEhPTkVfSU4JCTB4NjAKKyNkZWZpbmUgQUQxODE2QV9TUkNfTUFTSwkJMHg3MAorCisjZGVmaW5lIEFEMTgxNkFfQ0FQVFVSRV9OT1RfRVFVQUwJMHgxMDAwCisjZGVmaW5lIEFEMTgxNkFfV1NTX0VOQUJMRQkJMHg4MDAwCisKK3R5cGVkZWYgc3RydWN0IF9zbmRfYWQxODE2YSBhZDE4MTZhX3Q7CisKK3N0cnVjdCBfc25kX2FkMTgxNmEgeworCXVuc2lnbmVkIGxvbmcgcG9ydDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlc19wb3J0OworCWludCBpcnE7CisJaW50IGRtYTE7CisJaW50IGRtYTI7CisKKwl1bnNpZ25lZCBzaG9ydCBoYXJkd2FyZTsKKwl1bnNpZ25lZCBzaG9ydCB2ZXJzaW9uOworCisJc3BpbmxvY2tfdCBsb2NrOworCisJdW5zaWduZWQgc2hvcnQgbW9kZTsKKworCXNuZF9jYXJkX3QgKmNhcmQ7CisJc25kX3BjbV90ICpwY207CisKKwlzbmRfcGNtX3N1YnN0cmVhbV90ICpwbGF5YmFja19zdWJzdHJlYW07CisJc25kX3BjbV9zdWJzdHJlYW1fdCAqY2FwdHVyZV9zdWJzdHJlYW07CisJdW5zaWduZWQgaW50IHBfZG1hX3NpemU7CisJdW5zaWduZWQgaW50IGNfZG1hX3NpemU7CisKKwlzbmRfdGltZXJfdCAqdGltZXI7Cit9OworCisKKyNkZWZpbmUgQUQxODE2QV9IV19BVVRPCQkwCisjZGVmaW5lIEFEMTgxNkFfSFdfQUQxODE2QQkxCisjZGVmaW5lIEFEMTgxNkFfSFdfQUQxODE1CTIKKyNkZWZpbmUgQUQxODE2QV9IV19BRDE4TUFYMTAJMworCisjZGVmaW5lIEFEMTgxNkFfTU9ERV9QTEFZQkFDSwkweDAxCisjZGVmaW5lIEFEMTgxNkFfTU9ERV9DQVBUVVJFCTB4MDIKKyNkZWZpbmUgQUQxODE2QV9NT0RFX1RJTUVSCTB4MDQKKyNkZWZpbmUgQUQxODE2QV9NT0RFX09QRU4JKEFEMTgxNkFfTU9ERV9QTEFZQkFDSyB8CVwKKwkJCQlBRDE4MTZBX01PREVfQ0FQVFVSRSB8CQlcCisJCQkJQUQxODE2QV9NT0RFX1RJTUVSKQorCisKK2V4dGVybiBpbnQgc25kX2FkMTgxNmFfY3JlYXRlKHNuZF9jYXJkX3QgKmNhcmQsIHVuc2lnbmVkIGxvbmcgcG9ydCwKKwkJCSAgICAgIGludCBpcnEsIGludCBkbWExLCBpbnQgZG1hMiwKKwkJCSAgICAgIGFkMTgxNmFfdCAqKmNoaXApOworCitleHRlcm4gaW50IHNuZF9hZDE4MTZhX3BjbShhZDE4MTZhX3QgKmNoaXAsIGludCBkZXZpY2UsIHNuZF9wY21fdCAqKnJwY20pOworZXh0ZXJuIGludCBzbmRfYWQxODE2YV9taXhlcihhZDE4MTZhX3QgKmNoaXApOworCisjZW5kaWYJLyogX19TT1VORF9BRDE4MTZBX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvYWQxODQ4LmggYi9pbmNsdWRlL3NvdW5kL2FkMTg0OC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlMzNiMTEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3NvdW5kL2FkMTg0OC5oCkBAIC0wLDAgKzEsMjA2IEBACisjaWZuZGVmIF9fU09VTkRfQUQxODQ4X0gKKyNkZWZpbmUgX19TT1VORF9BRDE4NDhfSAorCisvKgorICogIENvcHlyaWdodCAoYykgYnkgSmFyb3NsYXYgS3lzZWxhIDxwZXJleEBzdXNlLmN6PgorICogIERlZmluaXRpb25zIGZvciBBRDE4NDcvQUQxODQ4L0NTNDI0OCBjaGlwcworICoKKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKgorICovCisKKyNpbmNsdWRlICJwY20uaCIKKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKworLyogSU8gcG9ydHMgKi8KKworI2RlZmluZSBBRDE4NDhQKCBjb2RlYywgeCApICggKGNoaXApIC0+IHBvcnQgKyBjX2RfY19BRDE4NDgjI3ggKQorCisjZGVmaW5lIGNfZF9jX0FEMTg0OFJFR1NFTAkwCisjZGVmaW5lIGNfZF9jX0FEMTg0OFJFRwkJMQorI2RlZmluZSBjX2RfY19BRDE4NDhTVEFUVVMJMgorI2RlZmluZSBjX2RfY19BRDE4NDhQSU8JCTMKKworLyogY29kZWMgcmVnaXN0ZXJzICovCisKKyNkZWZpbmUgQUQxODQ4X0xFRlRfSU5QVVQJMHgwMAkvKiBsZWZ0IGlucHV0IGNvbnRyb2wgKi8KKyNkZWZpbmUgQUQxODQ4X1JJR0hUX0lOUFVUCTB4MDEJLyogcmlnaHQgaW5wdXQgY29udHJvbCAqLworI2RlZmluZSBBRDE4NDhfQVVYMV9MRUZUX0lOUFVUCTB4MDIJLyogbGVmdCBBVVgxIGlucHV0IGNvbnRyb2wgKi8KKyNkZWZpbmUgQUQxODQ4X0FVWDFfUklHSFRfSU5QVVQJMHgwMwkvKiByaWdodCBBVVgxIGlucHV0IGNvbnRyb2wgKi8KKyNkZWZpbmUgQUQxODQ4X0FVWDJfTEVGVF9JTlBVVAkweDA0CS8qIGxlZnQgQVVYMiBpbnB1dCBjb250cm9sICovCisjZGVmaW5lIEFEMTg0OF9BVVgyX1JJR0hUX0lOUFVUCTB4MDUJLyogcmlnaHQgQVVYMiBpbnB1dCBjb250cm9sICovCisjZGVmaW5lIEFEMTg0OF9MRUZUX09VVFBVVAkweDA2CS8qIGxlZnQgb3V0cHV0IGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQUQxODQ4X1JJR0hUX09VVFBVVAkweDA3CS8qIHJpZ2h0IG91dHB1dCBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIEFEMTg0OF9EQVRBX0ZPUk1BVAkweDA4CS8qIGNsb2NrIGFuZCBkYXRhIGZvcm1hdCAtIHBsYXliYWNrL2NhcHR1cmUgLSBiaXRzIDctMCBNQ0UgKi8KKyNkZWZpbmUgQUQxODQ4X0lGQUNFX0NUUkwJMHgwOQkvKiBpbnRlcmZhY2UgY29udHJvbCAtIGJpdHMgNy0yIE1DRSAqLworI2RlZmluZSBBRDE4NDhfUElOX0NUUkwJCTB4MGEJLyogcGluIGNvbnRyb2wgKi8KKyNkZWZpbmUgQUQxODQ4X1RFU1RfSU5JVAkweDBiCS8qIHRlc3QgYW5kIGluaXRpYWxpemF0aW9uICovCisjZGVmaW5lIEFEMTg0OF9NSVNDX0lORk8JMHgwYwkvKiBtaXNjZWxsYW5lYW91cyBpbmZvcm1hdGlvbiAqLworI2RlZmluZSBBRDE4NDhfTE9PUEJBQ0sJCTB4MGQJLyogbG9vcGJhY2sgY29udHJvbCAqLworI2RlZmluZSBBRDE4NDhfREFUQV9VUFJfQ05UCTB4MGUJLyogcGxheWJhY2svY2FwdHVyZSB1cHBlciBiYXNlIGNvdW50ICovCisjZGVmaW5lIEFEMTg0OF9EQVRBX0xXUl9DTlQJMHgwZgkvKiBwbGF5YmFjay9jYXB0dXJlIGxvd2VyIGJhc2UgY291bnQgKi8KKworLyogZGVmaW5pdGlvbnMgZm9yIGNvZGVjIHJlZ2lzdGVyIHNlbGVjdCBwb3J0IC0gQ09ERUNQKCBSRUdTRUwgKSAqLworCisjZGVmaW5lIEFEMTg0OF9JTklUCQkweDgwCS8qIENPREVDIGlzIGluaXRpYWxpemluZyAqLworI2RlZmluZSBBRDE4NDhfTUNFCQkweDQwCS8qIG1vZGUgY2hhbmdlIGVuYWJsZSAqLworI2RlZmluZSBBRDE4NDhfVFJECQkweDIwCS8qIHRyYW5zZmVyIHJlcXVlc3QgZGlzYWJsZSAqLworCisvKiBkZWZpbml0aW9ucyBmb3IgY29kZWMgc3RhdHVzIHJlZ2lzdGVyIC0gQ09ERUNQKCBTVEFUVVMgKSAqLworCisjZGVmaW5lIEFEMTg0OF9HTE9CQUxJUlEJMHgwMQkvKiBJUlEgaXMgYWN0aXZlICovCisKKy8qIGRlZmluaXRpb25zIGZvciBBRDE4NDhfTEVGVF9JTlBVVCBhbmQgQUQxODQ4X1JJR0hUX0lOUFVUIHJlZ2lzdGVycyAqLworCisjZGVmaW5lIEFEMTg0OF9FTkFCTEVfTUlDX0dBSU4JMHgyMAorCisjZGVmaW5lIEFEMTg0OF9NSVhTX0xJTkUxCTB4MDAKKyNkZWZpbmUgQUQxODQ4X01JWFNfQVVYMQkweDQwCisjZGVmaW5lIEFEMTg0OF9NSVhTX0xJTkUyCTB4ODAKKyNkZWZpbmUgQUQxODQ4X01JWFNfQUxMCQkweGMwCisKKy8qIGRlZmluaXRpb25zIGZvciBjbG9jayBhbmQgZGF0YSBmb3JtYXQgcmVnaXN0ZXIgLSBBRDE4NDhfUExBWUJLX0ZPUk1BVCAqLworCisjZGVmaW5lIEFEMTg0OF9MSU5FQVJfOAkJMHgwMAkvKiA4LWJpdCB1bnNpZ25lZCBkYXRhICovCisjZGVmaW5lIEFEMTg0OF9BTEFXXzgJCTB4NjAJLyogOC1iaXQgQS1sYXcgY29tcGFuZGVkICovCisjZGVmaW5lIEFEMTg0OF9VTEFXXzgJCTB4MjAJLyogOC1iaXQgVS1sYXcgY29tcGFuZGVkICovCisjZGVmaW5lIEFEMTg0OF9MSU5FQVJfMTYJMHg0MAkvKiAxNi1iaXQgdHdvcyBjb21wbGVtZW50IGRhdGEgLSBsaXR0bGUgZW5kaWFuICovCisjZGVmaW5lIEFEMTg0OF9TVEVSRU8JCTB4MTAJLyogc3RlcmVvIG1vZGUgKi8KKy8qIGJpdHMgMy0xIGRlZmluZSBmcmVxdWVuY3kgZGl2aXNvciAqLworI2RlZmluZSBBRDE4NDhfWFRBTDEJCTB4MDAJLyogMjQuNTc2IGNyeXN0YWwgKi8KKyNkZWZpbmUgQUQxODQ4X1hUQUwyCQkweDAxCS8qIDE2LjkzNDQgY3J5c3RhbCAqLworCisvKiBkZWZpbml0aW9ucyBmb3IgaW50ZXJmYWNlIGNvbnRyb2wgcmVnaXN0ZXIgLSBBRDE4NDhfSUZBQ0VfQ1RSTCAqLworCisjZGVmaW5lIEFEMTg0OF9DQVBUVVJFX1BJTwkweDgwCS8qIGNhcHR1cmUgUElPIGVuYWJsZSAqLworI2RlZmluZSBBRDE4NDhfUExBWUJBQ0tfUElPCTB4NDAJLyogcGxheWJhY2sgUElPIGVuYWJsZSAqLworI2RlZmluZSBBRDE4NDhfQ0FMSUJfTU9ERQkweDE4CS8qIGNhbGlicmF0aW9uIG1vZGUgYml0cyAqLworI2RlZmluZSBBRDE4NDhfQVVUT0NBTElCCTB4MDgJLyogYXV0byBjYWxpYnJhdGUgKi8KKyNkZWZpbmUgQUQxODQ4X1NJTkdMRV9ETUEJMHgwNAkvKiB1c2Ugc2luZ2xlIERNQSBjaGFubmVsICovCisjZGVmaW5lIEFEMTg0OF9DQVBUVVJFX0VOQUJMRQkweDAyCS8qIGNhcHR1cmUgZW5hYmxlICovCisjZGVmaW5lIEFEMTg0OF9QTEFZQkFDS19FTkFCTEUJMHgwMQkvKiBwbGF5YmFjayBlbmFibGUgKi8KKworLyogZGVmaW5pdGlvbnMgZm9yIHBpbiBjb250cm9sIHJlZ2lzdGVyIC0gQUQxODQ4X1BJTl9DVFJMICovCisKKyNkZWZpbmUgQUQxODQ4X0lSUV9FTkFCTEUJMHgwMgkvKiBlbmFibGUgSVJRICovCisjZGVmaW5lIEFEMTg0OF9YQ1RMMQkJMHg0MAkvKiBleHRlcm5hbCBjb250cm9sICMxICovCisjZGVmaW5lIEFEMTg0OF9YQ1RMMAkJMHg4MAkvKiBleHRlcm5hbCBjb250cm9sICMwICovCisKKy8qIGRlZmluaXRpb25zIGZvciB0ZXN0IGFuZCBpbml0IHJlZ2lzdGVyIC0gQUQxODQ4X1RFU1RfSU5JVCAqLworCisjZGVmaW5lIEFEMTg0OF9DQUxJQl9JTl9QUk9HUkVTUyAweDIwCS8qIGF1dG8gY2FsaWJyYXRlIGluIHByb2dyZXNzICovCisjZGVmaW5lIEFEMTg0OF9ETUFfUkVRVUVTVAkweDEwCS8qIERNQSByZXF1ZXN0IGluIHByb2dyZXNzICovCisKKy8qIGRlZmluZXMgZm9yIGNvZGVjLm1vZGUgKi8KKworI2RlZmluZSBBRDE4NDhfTU9ERV9OT05FCTB4MDAwMAorI2RlZmluZSBBRDE4NDhfTU9ERV9QTEFZCTB4MDAwMQorI2RlZmluZSBBRDE4NDhfTU9ERV9DQVBUVVJFCTB4MDAwMgorI2RlZmluZSBBRDE4NDhfTU9ERV9USU1FUgkweDAwMDQKKyNkZWZpbmUgQUQxODQ4X01PREVfT1BFTgkoQUQxODQ4X01PREVfUExBWXxBRDE4NDhfTU9ERV9DQVBUVVJFfEFEMTg0OF9NT0RFX1RJTUVSKQorI2RlZmluZSBBRDE4NDhfTU9ERV9SVU5OSU5HCTB4MDAxMAorCisvKiBkZWZpbmVzIGZvciBjb2RlYy5oYXJkd2FyZSAqLworCisjZGVmaW5lIEFEMTg0OF9IV19ERVRFQ1QJMHgwMDAwCS8qIGxldCBBRDE4NDggZHJpdmVyIGRldGVjdCBjaGlwICovCisjZGVmaW5lIEFEMTg0OF9IV19BRDE4NDcJMHgwMDAxCS8qIEFEMTg0NyBjaGlwICovCisjZGVmaW5lIEFEMTg0OF9IV19BRDE4NDgJMHgwMDAyCS8qIEFEMTg0OCBjaGlwICovCisjZGVmaW5lIEFEMTg0OF9IV19DUzQyNDgJMHgwMDAzCS8qIENTNDI0OCBjaGlwICovCisjZGVmaW5lIEFEMTg0OF9IV19DTUk4MzMwCTB4MDAwNAkvKiBDTUk4MzMwIGNoaXAgKi8KKyNkZWZpbmUgQUQxODQ4X0hXX1RISU5LUEFECTB4MDAwNQkvKiBUaGlua3BhZCAzNjAvNzUwLzc1NSAqLworCisvKiBJQk0gVGhpbmtwYWQgc3BlY2lmaWMgc3R1ZmYgKi8KKyNkZWZpbmUgQUQxODQ4X1RISU5LUEFEX0NUTF9QT1JUMQkJMHgxNWU4CisjZGVmaW5lIEFEMTg0OF9USElOS1BBRF9DVExfUE9SVDIJCTB4MTVlOQorI2RlZmluZSBBRDE4NDhfVEhJTktQQURfQ1M0MjQ4X0VOQUJMRV9CSVQJMHgwMgorCitzdHJ1Y3QgX3NuZF9hZDE4NDggeworCXVuc2lnbmVkIGxvbmcgcG9ydDsJCS8qIGkvbyBwb3J0ICovCisJc3RydWN0IHJlc291cmNlICpyZXNfcG9ydDsKKwlpbnQgaXJxOwkJCS8qIElSUSBsaW5lICovCisJaW50IGRtYTsJCQkvKiBkYXRhIERNQSAqLworCXVuc2lnbmVkIHNob3J0IHZlcnNpb247CQkvKiB2ZXJzaW9uIG9mIENPREVDIGNoaXAgKi8KKwl1bnNpZ25lZCBzaG9ydCBtb2RlOwkJLyogc2VlIHRvIEFEMTg0OF9NT0RFX1hYWFggKi8KKwl1bnNpZ25lZCBzaG9ydCBoYXJkd2FyZTsJLyogc2VlIHRvIEFEMTg0OF9IV19YWFhYICovCisJdW5zaWduZWQgc2hvcnQgc2luZ2xlX2RtYToxOwkvKiBmb3JjZWQgc2luZ2xlIERNQSBtb2RlIChHVVMgMTYtYml0IGRhdWdodGVyIGJvYXJkKSBvciBkbWExID09IGRtYTIgKi8KKworCXNuZF9wY21fdCAqcGNtOworCXNuZF9wY21fc3Vic3RyZWFtX3QgKnBsYXliYWNrX3N1YnN0cmVhbTsKKwlzbmRfcGNtX3N1YnN0cmVhbV90ICpjYXB0dXJlX3N1YnN0cmVhbTsKKwlzbmRfY2FyZF90ICpjYXJkOworCisJdW5zaWduZWQgY2hhciBpbWFnZVszMl07CS8qIFNHYWxheHkgbmVlZHMgYW4gYWNjZXNzIHRvIGV4dGVuZGVkIHJlZ2lzdGVycyAqLworCWludCBtY2VfYml0OworCWludCBjYWxpYnJhdGVfbXV0ZTsKKwlpbnQgZG1hX3NpemU7CisJaW50IHRoaW5rcGFkX2ZsYWc7CQkvKiBUaGlua3BhZCBDUzQyNDggbmVlZHMgc29tZSBleHRyYSBoZWxwICovCisKKwlzcGlubG9ja190IHJlZ19sb2NrOworCXN0cnVjdCBzZW1hcGhvcmUgb3Blbl9tdXRleDsKK307CisKK3R5cGVkZWYgc3RydWN0IF9zbmRfYWQxODQ4IGFkMTg0OF90OworCisvKiBleHBvcnRlZCBmdW5jdGlvbnMgKi8KKwordm9pZCBzbmRfYWQxODQ4X291dChhZDE4NDhfdCAqY2hpcCwgdW5zaWduZWQgY2hhciByZWcsIHVuc2lnbmVkIGNoYXIgdmFsdWUpOworCitpbnQgc25kX2FkMTg0OF9jcmVhdGUoc25kX2NhcmRfdCAqIGNhcmQsCisJCSAgICAgIHVuc2lnbmVkIGxvbmcgcG9ydCwKKwkJICAgICAgaW50IGlycSwgaW50IGRtYSwKKwkJICAgICAgdW5zaWduZWQgc2hvcnQgaGFyZHdhcmUsCisJCSAgICAgIGFkMTg0OF90ICoqIGNoaXApOworCitpbnQgc25kX2FkMTg0OF9wY20oYWQxODQ4X3QgKiBjaGlwLCBpbnQgZGV2aWNlLCBzbmRfcGNtX3QgKipycGNtKTsKK2NvbnN0IHNuZF9wY21fb3BzX3QgKnNuZF9hZDE4NDhfZ2V0X3BjbV9vcHMoaW50IGRpcmVjdGlvbik7CitpbnQgc25kX2FkMTg0OF9taXhlcihhZDE4NDhfdCAqIGNoaXApOworCisvKiBleHBvcnRlZCBtaXhlciBzdHVmZnMgKi8KK2VudW0geyBBRDE4NDhfTUlYX1NJTkdMRSwgQUQxODQ4X01JWF9ET1VCTEUsIEFEMTg0OF9NSVhfQ0FQVFVSRSB9OworCisjZGVmaW5lIEFEMTg0OF9NSVhWQUxfU0lOR0xFKHJlZywgc2hpZnQsIG1hc2ssIGludmVydCkgXAorCSgocmVnKSB8ICgoc2hpZnQpIDw8IDgpIHwgKChtYXNrKSA8PCAxNikgfCAoKGludmVydCkgPDwgMjQpKQorI2RlZmluZSBBRDE4NDhfTUlYVkFMX0RPVUJMRShsZWZ0X3JlZywgcmlnaHRfcmVnLCBzaGlmdF9sZWZ0LCBzaGlmdF9yaWdodCwgbWFzaywgaW52ZXJ0KSBcCisJKChsZWZ0X3JlZykgfCAoKHJpZ2h0X3JlZykgPDwgOCkgfCAoKHNoaWZ0X2xlZnQpIDw8IDE2KSB8ICgoc2hpZnRfcmlnaHQpIDw8IDE5KSB8ICgobWFzaykgPDwgMjQpIHwgKChpbnZlcnQpIDw8IDIyKSkKKworaW50IHNuZF9hZDE4NDhfYWRkX2N0bChhZDE4NDhfdCAqY2hpcCwgY29uc3QgY2hhciAqbmFtZSwgaW50IGluZGV4LCBpbnQgdHlwZSwgdW5zaWduZWQgbG9uZyB2YWx1ZSk7CisKKy8qIGZvciBlYXNlIG9mIHVzZSAqLworc3RydWN0IGFkMTg0OF9taXhfZWxlbSB7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgaW5kZXg7CisJaW50IHR5cGU7CisJdW5zaWduZWQgbG9uZyBwcml2YXRlX3ZhbHVlOworfTsKKworI2RlZmluZSBBRDE4NDhfU0lOR0xFKHhuYW1lLCB4aW5kZXgsIHJlZywgc2hpZnQsIG1hc2ssIGludmVydCkgXAoreyAubmFtZSA9IHhuYW1lLCBcCisgIC5pbmRleCA9IHhpbmRleCwgXAorICAudHlwZSA9IEFEMTg0OF9NSVhfU0lOR0xFLCBcCisgIC5wcml2YXRlX3ZhbHVlID0gQUQxODQ4X01JWFZBTF9TSU5HTEUocmVnLCBzaGlmdCwgbWFzaywgaW52ZXJ0KSB9CisKKyNkZWZpbmUgQUQxODQ4X0RPVUJMRSh4bmFtZSwgeGluZGV4LCBsZWZ0X3JlZywgcmlnaHRfcmVnLCBzaGlmdF9sZWZ0LCBzaGlmdF9yaWdodCwgbWFzaywgaW52ZXJ0KSBcCit7IC5uYW1lID0geG5hbWUsIFwKKyAgLmluZGV4ID0geGluZGV4LCBcCisgIC50eXBlID0gQUQxODQ4X01JWF9ET1VCTEUsIFwKKyAgLnByaXZhdGVfdmFsdWUgPSBBRDE4NDhfTUlYVkFMX0RPVUJMRShsZWZ0X3JlZywgcmlnaHRfcmVnLCBzaGlmdF9sZWZ0LCBzaGlmdF9yaWdodCwgbWFzaywgaW52ZXJ0KSB9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNuZF9hZDE4NDhfYWRkX2N0bF9lbGVtKGFkMTg0OF90ICpjaGlwLCBjb25zdCBzdHJ1Y3QgYWQxODQ4X21peF9lbGVtICpjKQoreworCXJldHVybiBzbmRfYWQxODQ4X2FkZF9jdGwoY2hpcCwgYy0+bmFtZSwgYy0+aW5kZXgsIGMtPnR5cGUsIGMtPnByaXZhdGVfdmFsdWUpOworfQorCisjZW5kaWYgLyogX19TT1VORF9BRDE4NDhfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9haW5zdHJfZm0uaCBiL2luY2x1ZGUvc291bmQvYWluc3RyX2ZtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGVjMDI5NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvc291bmQvYWluc3RyX2ZtLmgKQEAgLTAsMCArMSwxMzAgQEAKKy8qCisgKiAgQWR2YW5jZWQgTGludXggU291bmQgQXJjaGl0ZWN0dXJlCisgKgorICogIEZNIChPUEwyLzMpIEluc3RydW1lbnQgRm9ybWF0CisgKiAgQ29weXJpZ2h0IChjKSAyMDAwIFVyb3MgQml6amFrIDx1cm9zQGtzcy1sb2thLnNpPgorICoKKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKgorICovCisKKyNpZm5kZWYgX19TT1VORF9BSU5TVFJfRk1fSAorI2RlZmluZSBfX1NPVU5EX0FJTlNUUl9GTV9ICisKKyNpZm5kZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKyNlbmRpZgorCisvKgorICogIHNoYXJlIHR5cGVzIChzaGFyZSBJRCAxKQorICovCisKKyNkZWZpbmUgRk1fU0hBUkVfRklMRQkJMAorCisvKgorICogRk0gb3BlcmF0b3IKKyAqLworCit0eXBlZGVmIHN0cnVjdCBmbV9vcGVyYXRvciB7CisJdW5zaWduZWQgY2hhciBhbV92aWI7CisJdW5zaWduZWQgY2hhciBrc2xfbGV2ZWw7CisJdW5zaWduZWQgY2hhciBhdHRhY2tfZGVjYXk7CisJdW5zaWduZWQgY2hhciBzdXN0YWluX3JlbGVhc2U7CisJdW5zaWduZWQgY2hhciB3YXZlX3NlbGVjdDsKK30gZm1fb3BlcmF0b3JfdDsKKworLyoKKyAqICBJbnN0cnVtZW50CisgKi8KKworI2RlZmluZSBGTV9QQVRDSF9PUEwyCTB4MDEJCS8qIE9QTDIgMiBvcGVyYXRvcnMgRk0gaW5zdHJ1bWVudCAqLworI2RlZmluZSBGTV9QQVRDSF9PUEwzCTB4MDIJCS8qIE9QTDMgNCBvcGVyYXRvcnMgRk0gaW5zdHJ1bWVudCAqLworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgaW50IHNoYXJlX2lkWzRdOwkvKiBzaGFyZSBpZCAtIHplcm8gPSBubyBzaGFyaW5nICovCisJdW5zaWduZWQgY2hhciB0eXBlOwkJLyogaW5zdHJ1bWVudCB0eXBlICovCisKKwlmbV9vcGVyYXRvcl90IG9wWzRdOworCXVuc2lnbmVkIGNoYXIgZmVlZGJhY2tfY29ubmVjdGlvblsyXTsKKworCXVuc2lnbmVkIGNoYXIgZWNob19kZWxheTsKKwl1bnNpZ25lZCBjaGFyIGVjaG9fYXR0ZW47CisJdW5zaWduZWQgY2hhciBjaG9ydXNfc3ByZWFkOworCXVuc2lnbmVkIGNoYXIgdHJuc3BzOworCXVuc2lnbmVkIGNoYXIgZml4X2R1cjsKKwl1bnNpZ25lZCBjaGFyIG1vZGVzOworCXVuc2lnbmVkIGNoYXIgZml4X2tleTsKK30gZm1faW5zdHJ1bWVudF90OworCisvKgorICoKKyAqICAgIEtlcm5lbCA8LT4gdXNlciBzcGFjZQorICogICAgSGFyZHdhcmUgKENQVSkgaW5kZXBlbmRlbnQgc2VjdGlvbgorICoKKyAqICAgICogPSB6ZXJvIG9yIG1vcmUKKyAqICAgICsgPSBvbmUgb3IgbW9yZQorICoKKyAqICAgIGZtX3hpbnN0cnVtZW50CUZNX1NUUlVfSU5TVFIKKyAqCisgKi8KKworI2RlZmluZSBGTV9TVFJVX0lOU1RSCV9fY3B1X3RvX2JlMzIoKCdJJzw8MjQpfCgnTic8PDE2KXwoJ1MnPDw4KXwnVCcpCisKKy8qCisgKiBGTSBvcGVyYXRvcgorICovCisKK3R5cGVkZWYgc3RydWN0IGZtX3hvcGVyYXRvciB7CisJX191OCBhbV92aWI7CisJX191OCBrc2xfbGV2ZWw7CisJX191OCBhdHRhY2tfZGVjYXk7CisJX191OCBzdXN0YWluX3JlbGVhc2U7CisJX191OCB3YXZlX3NlbGVjdDsKK30gZm1feG9wZXJhdG9yX3Q7CisKKy8qCisgKiAgSW5zdHJ1bWVudAorICovCisKK3R5cGVkZWYgc3RydWN0IGZtX3hpbnN0cnVtZW50IHsKKwlfX3UzMiBzdHlwZTsJCQkvKiBzdHJ1Y3R1cmUgdHlwZSAqLworCisJX191MzIgc2hhcmVfaWRbNF07CQkvKiBzaGFyZSBpZCAtIHplcm8gPSBubyBzaGFyaW5nICovCisJX191OCB0eXBlOwkJCS8qIGluc3RydW1lbnQgdHlwZSAqLworCisJZm1feG9wZXJhdG9yX3Qgb3BbNF07CQkvKiBmbSBvcGVyYXRvcnMgKi8KKwlfX3U4IGZlZWRiYWNrX2Nvbm5lY3Rpb25bMl07CisKKwlfX3U4IGVjaG9fZGVsYXk7CisJX191OCBlY2hvX2F0dGVuOworCV9fdTggY2hvcnVzX3NwcmVhZDsKKwlfX3U4IHRybnNwczsKKwlfX3U4IGZpeF9kdXI7CisJX191OCBtb2RlczsKKwlfX3U4IGZpeF9rZXk7Cit9IGZtX3hpbnN0cnVtZW50X3Q7CisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlICJzZXFfaW5zdHIuaCIKKworaW50IHNuZF9zZXFfZm1faW5pdChzbmRfc2VxX2tpbnN0cl9vcHNfdCAqIG9wcywKKwkJICAgIHNuZF9zZXFfa2luc3RyX29wc190ICogbmV4dCk7CisKKyNlbmRpZgorCisjZW5kaWYJLyogX19TT1VORF9BSU5TVFJfRk1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9haW5zdHJfZ2YxLmggYi9pbmNsdWRlL3NvdW5kL2FpbnN0cl9nZjEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTJkZGRhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9zb3VuZC9haW5zdHJfZ2YxLmgKQEAgLTAsMCArMSwyMjUgQEAKKy8qCisgKiAgQWR2YW5jZWQgTGludXggU291bmQgQXJjaGl0ZWN0dXJlCisgKgorICogIEdGMSAoR1VTKSBQYXRjaCBJbnN0cnVtZW50IEZvcm1hdAorICogIENvcHlyaWdodCAoYykgMTk5NC05OSBieSBKYXJvc2xhdiBLeXNlbGEgPHBlcmV4QHN1c2UuY3o+CisgKgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBfX1NPVU5EX0FJTlNUUl9HRjFfSAorI2RlZmluZSBfX1NPVU5EX0FJTlNUUl9HRjFfSAorCisjaWZuZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisjZW5kaWYKKworLyoKKyAqICBzaGFyZSB0eXBlcyAoc2hhcmUgSUQgMSkKKyAqLworCisjZGVmaW5lIEdGMV9TSEFSRV9GSUxFCQkJMAorCisvKgorICogIHdhdmUgZm9ybWF0cworICovCisKKyNkZWZpbmUgR0YxX1dBVkVfMTZCSVQJCQkweDAwMDEgIC8qIDE2LWJpdCB3YXZlICovCisjZGVmaW5lIEdGMV9XQVZFX1VOU0lHTkVECQkweDAwMDIgIC8qIHVuc2lnbmVkIHdhdmUgKi8KKyNkZWZpbmUgR0YxX1dBVkVfSU5WRVJUCQkJMHgwMDAyICAvKiBzYW1lIGFzIHVuc2lnbmVkIHdhdmUgKi8KKyNkZWZpbmUgR0YxX1dBVkVfQkFDS1dBUkQJCTB4MDAwNCAgLyogYmFja3dhcmQgbW9kZSAobWF5YmUgdXNlZCBmb3IgcmV2ZXJiIG9yIHBpbmctcGluZyBsb29wKSAqLworI2RlZmluZSBHRjFfV0FWRV9MT09QCQkJMHgwMDA4ICAvKiBsb29wIG1vZGUgKi8KKyNkZWZpbmUgR0YxX1dBVkVfQklESVIJCQkweDAwMTAgIC8qIGJpZGlyZWN0aW9uYWwgbW9kZSAqLworI2RlZmluZSBHRjFfV0FWRV9TVEVSRU8JCQkweDAxMDAJLyogc3RlcmVvIG1vZGUgKi8KKyNkZWZpbmUgR0YxX1dBVkVfVUxBVwkJCTB4MDIwMAkvKiB1TGF3IGNvbXByZXNzaW9uIG1vZGUgKi8KKworLyoKKyAqICBXYXZldGFibGUgZGVmaW5pdGlvbnMKKyAqLworCit0eXBlZGVmIHN0cnVjdCBnZjFfd2F2ZSB7CisJdW5zaWduZWQgaW50IHNoYXJlX2lkWzRdOwkvKiBzaGFyZSBpZCAtIHplcm8gPSBubyBzaGFyaW5nICovCisJdW5zaWduZWQgaW50IGZvcm1hdDsJCS8qIHdhdmUgZm9ybWF0ICovCisKKwlzdHJ1Y3QgeworCQl1bnNpZ25lZCBpbnQgbnVtYmVyOwkvKiBzb21lIG90aGVyIElEIGZvciB0aGlzIGluc3RydW1lbnQgKi8KKwkJdW5zaWduZWQgaW50IG1lbW9yeTsJLyogYmVnaW4gb2Ygd2F2ZWZvcm0gaW4gb25ib2FyZCBtZW1vcnkgKi8KKwkJdW5zaWduZWQgY2hhciAqcHRyOwkvKiBwb2ludGVyIHRvIHdhdmVmb3JtIGluIHN5c3RlbSBtZW1vcnkgKi8KKwl9IGFkZHJlc3M7CisKKwl1bnNpZ25lZCBpbnQgc2l6ZTsJCS8qIHNpemUgb2Ygd2F2ZWZvcm0gaW4gc2FtcGxlcyAqLworCXVuc2lnbmVkIGludCBzdGFydDsJCS8qIHN0YXJ0IG9mZnNldCBpbiBzYW1wbGVzICogMTYgKGxvd2VzdCA0IGJpdHMgLSBmcmFjdGlvbikgKi8KKwl1bnNpZ25lZCBpbnQgbG9vcF9zdGFydDsJLyogYml0cyBsb29wIHN0YXJ0IG9mZnNldCBpbiBzYW1wbGVzICogMTYgKGxvd2VzdCA0IGJpdHMgLSBmcmFjdGlvbikgKi8KKwl1bnNpZ25lZCBpbnQgbG9vcF9lbmQ7CQkvKiBsb29wIHN0YXJ0IG9mZnNldCBpbiBzYW1wbGVzICogMTYgKGxvd2VzdCA0IGJpdHMgLSBmcmFjdGlvbikgKi8KKwl1bnNpZ25lZCBzaG9ydCBsb29wX3JlcGVhdDsJLyogbG9vcCByZXBlYXQgLSAwID0gZm9yZXZlciAqLworCisJdW5zaWduZWQgY2hhciBmbGFnczsJCS8qIEdGMSBwYXRjaCBmbGFncyAqLworCXVuc2lnbmVkIGNoYXIgcGFkOworCXVuc2lnbmVkIGludCBzYW1wbGVfcmF0ZTsJLyogc2FtcGxlIHJhdGUgaW4gSHogKi8KKwl1bnNpZ25lZCBpbnQgbG93X2ZyZXF1ZW5jeTsJLyogbG93IGZyZXF1ZW5jeSByYW5nZSAqLworCXVuc2lnbmVkIGludCBoaWdoX2ZyZXF1ZW5jeTsJLyogaGlnaCBmcmVxdWVuY3kgcmFuZ2UgKi8KKwl1bnNpZ25lZCBpbnQgcm9vdF9mcmVxdWVuY3k7CS8qIHJvb3QgZnJlcXVlbmN5IHJhbmdlICovCisJc2lnbmVkIHNob3J0IHR1bmU7CisJdW5zaWduZWQgY2hhciBiYWxhbmNlOworCXVuc2lnbmVkIGNoYXIgZW52ZWxvcGVfcmF0ZVs2XTsKKwl1bnNpZ25lZCBjaGFyIGVudmVsb3BlX29mZnNldFs2XTsKKwl1bnNpZ25lZCBjaGFyIHRyZW1vbG9fc3dlZXA7CisJdW5zaWduZWQgY2hhciB0cmVtb2xvX3JhdGU7CisJdW5zaWduZWQgY2hhciB0cmVtb2xvX2RlcHRoOworCXVuc2lnbmVkIGNoYXIgdmlicmF0b19zd2VlcDsKKwl1bnNpZ25lZCBjaGFyIHZpYnJhdG9fcmF0ZTsKKwl1bnNpZ25lZCBjaGFyIHZpYnJhdG9fZGVwdGg7CisJdW5zaWduZWQgc2hvcnQgc2NhbGVfZnJlcXVlbmN5OworCXVuc2lnbmVkIHNob3J0IHNjYWxlX2ZhY3RvcjsJLyogMC0yMDQ4IG9yIDAtMiAqLworICAKKwlzdHJ1Y3QgZ2YxX3dhdmUgKm5leHQ7Cit9IGdmMV93YXZlX3Q7CisKKy8qCisgKiAgSW5zdHJ1bWVudAorICovCisKKyNkZWZpbmUgSVdGRkZGX0VYQ0xVREVfTk9ORQkJMHgwMDAwCS8qIGV4Y2x1c2lvbiBtb2RlIC0gbm9uZSAqLworI2RlZmluZSBJV0ZGRkZfRVhDTFVERV9TSU5HTEUJCTB4MDAwMQkvKiBleGNsdWRlIHNpbmdsZSAtIHNpbmdsZSBub3RlIGZyb20gdGhlIGluc3RydW1lbnQgZ3JvdXAgKi8KKyNkZWZpbmUgSVdGRkZGX0VYQ0xVREVfTVVMVElQTEUJCTB4MDAwMgkvKiBleGNsdWRlIG11bHRpcGxlIC0gc3RvcCBvbmx5IHNhbWUgbm90ZSBmcm9tIHRoaXMgaW5zdHJ1bWVudCAqLworCisjZGVmaW5lIElXRkZGRl9FRkZFQ1RfTk9ORQkJMAorI2RlZmluZSBJV0ZGRkZfRUZGRUNUX1JFVkVSQgkJMQorI2RlZmluZSBJV0ZGRkZfRUZGRUNUX0NIT1JVUwkJMgorI2RlZmluZSBJV0ZGRkZfRUZGRUNUX0VDSE8JCTMKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIHNob3J0IGV4Y2x1c2lvbjsKKwl1bnNpZ25lZCBzaG9ydCBleGNsdXNpb25fZ3JvdXA7CS8qIDAgLSBub25lLCAxLTY1NTM1ICovCisKKwl1bnNpZ25lZCBjaGFyIGVmZmVjdDE7CQkvKiBlZmZlY3QgMSAqLworCXVuc2lnbmVkIGNoYXIgZWZmZWN0MV9kZXB0aDsJLyogMC0xMjcgKi8KKwl1bnNpZ25lZCBjaGFyIGVmZmVjdDI7CQkvKiBlZmZlY3QgMiAqLworCXVuc2lnbmVkIGNoYXIgZWZmZWN0Ml9kZXB0aDsJLyogMC0xMjcgKi8KKworCWdmMV93YXZlX3QgKndhdmU7CQkvKiBmaXJzdCB3YXZlZm9ybSAqLworfSBnZjFfaW5zdHJ1bWVudF90OworCisvKgorICoKKyAqICAgIEtlcm5lbCA8LT4gdXNlciBzcGFjZQorICogICAgSGFyZHdhcmUgKENQVSkgaW5kZXBlbmRlbnQgc2VjdGlvbgorICoKKyAqICAgICogPSB6ZXJvIG9yIG1vcmUKKyAqICAgICsgPSBvbmUgb3IgbW9yZQorICoKKyAqICAgIGdmMV94aW5zdHJ1bWVudAkJSVdGRkZGX1NUUlVfSU5TVFIKKyAqICAgICAgK2dmMV94d2F2ZQkJSVdGRkZGX1NUUlVfV0FWRQorICoKKyAqLworCisjZGVmaW5lIEdGMV9TVFJVX1dBVkUJCV9fY3B1X3RvX2JlMzIoKCdXJzw8MjQpfCgnQSc8PDE2KXwoJ1YnPDw4KXwnRScpCisjZGVmaW5lIEdGMV9TVFJVX0lOU1RSCQlfX2NwdV90b19iZTMyKCgnSSc8PDI0KXwoJ04nPDwxNil8KCdTJzw8OCl8J1QnKQorCisvKgorICogIFdhdmV0YWJsZSBkZWZpbml0aW9ucworICovCisKK3R5cGVkZWYgc3RydWN0IGdmMV94d2F2ZSB7CisJX191MzIgc3R5cGU7CQkJLyogc3RydWN0dXJlIHR5cGUgKi8KKworCV9fdTMyIHNoYXJlX2lkWzRdOwkJLyogc2hhcmUgaWQgLSB6ZXJvID0gbm8gc2hhcmluZyAqLworCV9fdTMyIGZvcm1hdDsJCQkvKiB3YXZlIGZvcm1hdCAqLworCisJX191MzIgc2l6ZTsJCQkvKiBzaXplIG9mIHdhdmVmb3JtIGluIHNhbXBsZXMgKi8KKwlfX3UzMiBzdGFydDsJCQkvKiBzdGFydCBvZmZzZXQgaW4gc2FtcGxlcyAqIDE2IChsb3dlc3QgNCBiaXRzIC0gZnJhY3Rpb24pICovCisJX191MzIgbG9vcF9zdGFydDsJCS8qIGJpdHMgbG9vcCBzdGFydCBvZmZzZXQgaW4gc2FtcGxlcyAqIDE2IChsb3dlc3QgNCBiaXRzIC0gZnJhY3Rpb24pICovCisJX191MzIgbG9vcF9lbmQ7CQkJLyogbG9vcCBzdGFydCBvZmZzZXQgaW4gc2FtcGxlcyAqIDE2IChsb3dlc3QgNCBiaXRzIC0gZnJhY3Rpb24pICovCisJX191MTYgbG9vcF9yZXBlYXQ7CQkvKiBsb29wIHJlcGVhdCAtIDAgPSBmb3JldmVyICovCisKKwlfX3U4IGZsYWdzOwkJCS8qIEdGMSBwYXRjaCBmbGFncyAqLworCV9fdTggcGFkOworCV9fdTMyIHNhbXBsZV9yYXRlOwkJLyogc2FtcGxlIHJhdGUgaW4gSHogKi8KKwlfX3UzMiBsb3dfZnJlcXVlbmN5OwkJLyogbG93IGZyZXF1ZW5jeSByYW5nZSAqLworCV9fdTMyIGhpZ2hfZnJlcXVlbmN5OwkJLyogaGlnaCBmcmVxdWVuY3kgcmFuZ2UgKi8KKwlfX3UzMiByb290X2ZyZXF1ZW5jeTsJCS8qIHJvb3QgZnJlcXVlbmN5IHJhbmdlICovCisJX19zMTYgdHVuZTsKKwlfX3U4IGJhbGFuY2U7CisJX191OCBlbnZlbG9wZV9yYXRlWzZdOworCV9fdTggZW52ZWxvcGVfb2Zmc2V0WzZdOworCV9fdTggdHJlbW9sb19zd2VlcDsKKwlfX3U4IHRyZW1vbG9fcmF0ZTsKKwlfX3U4IHRyZW1vbG9fZGVwdGg7CisJX191OCB2aWJyYXRvX3N3ZWVwOworCV9fdTggdmlicmF0b19yYXRlOworCV9fdTggdmlicmF0b19kZXB0aDsKKwlfX3UxNiBzY2FsZV9mcmVxdWVuY3k7CisJX191MTYgc2NhbGVfZmFjdG9yOwkJLyogMC0yMDQ4IG9yIDAtMiAqLyAgCit9IGdmMV94d2F2ZV90OworCisvKgorICogIEluc3RydW1lbnQKKyAqLworCit0eXBlZGVmIHN0cnVjdCBnZjFfeGluc3RydW1lbnQgeworCV9fdTMyIHN0eXBlOworCQorCV9fdTE2IGV4Y2x1c2lvbjsKKwlfX3UxNiBleGNsdXNpb25fZ3JvdXA7CQkvKiAwIC0gbm9uZSwgMS02NTUzNSAqLworCisJX191OCBlZmZlY3QxOwkJCS8qIGVmZmVjdCAxICovCisJX191OCBlZmZlY3QxX2RlcHRoOwkJLyogMC0xMjcgKi8KKwlfX3U4IGVmZmVjdDI7CQkJLyogZWZmZWN0IDIgKi8KKwlfX3U4IGVmZmVjdDJfZGVwdGg7CQkvKiAwLTEyNyAqLworfSBnZjFfeGluc3RydW1lbnRfdDsKKworLyoKKyAqICBJbnN0cnVtZW50IGluZm8KKyAqLworCisjZGVmaW5lIEdGMV9JTkZPX0VOVkVMT1BFCQkoMTw8MCkKKyNkZWZpbmUgR0YxX0lORk9fVFJFTU9MTwkJKDE8PDEpCisjZGVmaW5lIEdGMV9JTkZPX1ZJQlJBVE8JCSgxPDwyKQorCit0eXBlZGVmIHN0cnVjdCBnZjFfaW5mbyB7CisJdW5zaWduZWQgY2hhciBmbGFnczsJCS8qIHN1cHBvcnRlZCB3YXZlIGZsYWdzICovCisJdW5zaWduZWQgY2hhciBwYWRbM107CisJdW5zaWduZWQgaW50IGZlYXR1cmVzOwkJLyogc3VwcG9ydGVkIGZlYXR1cmVzICovCisJdW5zaWduZWQgaW50IG1heDhfbGVuOwkJLyogbWF4aW11bSA4LWJpdCB3YXZlIGxlbmd0aCAqLworCXVuc2lnbmVkIGludCBtYXgxNl9sZW47CQkvKiBtYXhpbXVtIDE2LWJpdCB3YXZlIGxlbmd0aCAqLworfSBnZjFfaW5mb190OworCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSAic2VxX2luc3RyLmgiCisKK3R5cGVkZWYgc3RydWN0IHsKKwl2b2lkICpwcml2YXRlX2RhdGE7CisJaW50ICgqaW5mbykodm9pZCAqcHJpdmF0ZV9kYXRhLCBnZjFfaW5mb190ICppbmZvKTsKKwlpbnQgKCpwdXRfc2FtcGxlKSh2b2lkICpwcml2YXRlX2RhdGEsIGdmMV93YXZlX3QgKndhdmUsCisJICAgICAgICAgICAgICAgICAgY2hhciBfX3VzZXIgKmRhdGEsIGxvbmcgbGVuLCBpbnQgYXRvbWljKTsKKwlpbnQgKCpnZXRfc2FtcGxlKSh2b2lkICpwcml2YXRlX2RhdGEsIGdmMV93YXZlX3QgKndhdmUsCisJCQkgIGNoYXIgX191c2VyICpkYXRhLCBsb25nIGxlbiwgaW50IGF0b21pYyk7CisJaW50ICgqcmVtb3ZlX3NhbXBsZSkodm9pZCAqcHJpdmF0ZV9kYXRhLCBnZjFfd2F2ZV90ICp3YXZlLAorCQkJICAgICBpbnQgYXRvbWljKTsKKwl2b2lkICgqbm90aWZ5KSh2b2lkICpwcml2YXRlX2RhdGEsIHNuZF9zZXFfa2luc3RyX3QgKmluc3RyLCBpbnQgd2hhdCk7CisJc25kX3NlcV9raW5zdHJfb3BzX3Qga29wczsKK30gc25kX2dmMV9vcHNfdDsKKworaW50IHNuZF9zZXFfZ2YxX2luaXQoc25kX2dmMV9vcHNfdCAqb3BzLAorCQkgICAgIHZvaWQgKnByaXZhdGVfZGF0YSwKKwkJICAgICBzbmRfc2VxX2tpbnN0cl9vcHNfdCAqbmV4dCk7CisKKyNlbmRpZgorCisjZW5kaWYgLyogX19TT1VORF9BSU5TVFJfR0YxX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvYWluc3RyX2l3LmggYi9pbmNsdWRlL3NvdW5kL2FpbnN0cl9pdy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhZGY3NDQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3NvdW5kL2FpbnN0cl9pdy5oCkBAIC0wLDAgKzEsMzczIEBACisvKgorICogIEFkdmFuY2VkIExpbnV4IFNvdW5kIEFyY2hpdGVjdHVyZQorICoKKyAqICBJbnRlcldhdmUgRkZGRiBJbnN0cnVtZW50IEZvcm1hdAorICogIENvcHlyaWdodCAoYykgMTk5NC05OSBieSBKYXJvc2xhdiBLeXNlbGEgPHBlcmV4QHN1c2UuY3o+CisgKgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBfX1NPVU5EX0FJTlNUUl9JV19ICisjZGVmaW5lIF9fU09VTkRfQUlOU1RSX0lXX0gKKworI2lmbmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2VuZGlmCisKKy8qCisgKiAgc2hhcmUgdHlwZXMgKHNoYXJlIElEIDEpCisgKi8KKworI2RlZmluZSBJV0ZGRkZfU0hBUkVfRklMRQkJMAorCisvKgorICogIHdhdmUgZm9ybWF0cworICovCisKKyNkZWZpbmUgSVdGRkZGX1dBVkVfMTZCSVQJCTB4MDAwMSAgLyogMTYtYml0IHdhdmUgKi8KKyNkZWZpbmUgSVdGRkZGX1dBVkVfVU5TSUdORUQJCTB4MDAwMiAgLyogdW5zaWduZWQgd2F2ZSAqLworI2RlZmluZSBJV0ZGRkZfV0FWRV9JTlZFUlQJCTB4MDAwMiAgLyogc2FtZSBhcyB1bnNpZ25lZCB3YXZlICovCisjZGVmaW5lIElXRkZGRl9XQVZFX0JBQ0tXQVJECQkweDAwMDQgIC8qIGJhY2t3YXJkIG1vZGUgKG1heWJlIHVzZWQgZm9yIHJldmVyYiBvciBwaW5nLXBpbmcgbG9vcCkgKi8KKyNkZWZpbmUgSVdGRkZGX1dBVkVfTE9PUAkJMHgwMDA4ICAvKiBsb29wIG1vZGUgKi8KKyNkZWZpbmUgSVdGRkZGX1dBVkVfQklESVIJCTB4MDAxMCAgLyogYmlkaXJlY3Rpb25hbCBtb2RlICovCisjZGVmaW5lIElXRkZGRl9XQVZFX1VMQVcJCTB4MDAyMCAgLyogdUxhdyBjb21wcmVzc2VkIHdhdmUgKi8KKyNkZWZpbmUgSVdGRkZGX1dBVkVfUkFNCQkJMHgwMDQwICAvKiB3YXZlIGlzIF9wcmVsb2FkZWRfIGluIFJBTSAoaXQgaXMgdXNlZCBmb3IgUk9NIHNpbXVsYXRpb24pICovCisjZGVmaW5lIElXRkZGRl9XQVZFX1JPTQkJCTB4MDA4MCAgLyogd2F2ZSBpcyBpbiBST00gKi8KKyNkZWZpbmUgSVdGRkZGX1dBVkVfU1RFUkVPCQkweDAxMDAJLyogd2F2ZSBpcyBzdGVyZW8gKi8KKworLyoKKyAqICBXYXZldGFibGUgZGVmaW5pdGlvbnMKKyAqLworCit0eXBlZGVmIHN0cnVjdCBpd2ZmZmZfd2F2ZSB7CisJdW5zaWduZWQgaW50IHNoYXJlX2lkWzRdOwkvKiBzaGFyZSBpZCAtIHplcm8gPSBubyBzaGFyaW5nICovCisJdW5zaWduZWQgaW50IGZvcm1hdDsJCS8qIHdhdmUgZm9ybWF0ICovCisKKwlzdHJ1Y3QgeworCQl1bnNpZ25lZCBpbnQgbnVtYmVyOwkvKiBzb21lIG90aGVyIElEIGZvciB0aGlzIHdhdmUgKi8KKwkJdW5zaWduZWQgaW50IG1lbW9yeTsJLyogYmVnaW4gb2Ygd2F2ZWZvcm0gaW4gb25ib2FyZCBtZW1vcnkgKi8KKwkJdW5zaWduZWQgY2hhciAqcHRyOwkvKiBwb2ludGVyIHRvIHdhdmVmb3JtIGluIHN5c3RlbSBtZW1vcnkgKi8KKwl9IGFkZHJlc3M7CisKKwl1bnNpZ25lZCBpbnQgc2l6ZTsJCS8qIHNpemUgb2Ygd2F2ZWZvcm0gaW4gc2FtcGxlcyAqLworCXVuc2lnbmVkIGludCBzdGFydDsJCS8qIHN0YXJ0IG9mZnNldCBpbiBzYW1wbGVzICogMTYgKGxvd2VzdCA0IGJpdHMgLSBmcmFjdGlvbikgKi8KKwl1bnNpZ25lZCBpbnQgbG9vcF9zdGFydDsJLyogYml0cyBsb29wIHN0YXJ0IG9mZnNldCBpbiBzYW1wbGVzICogMTYgKGxvd2VzdCA0IGJpdHMgLSBmcmFjdGlvbikgKi8KKwl1bnNpZ25lZCBpbnQgbG9vcF9lbmQ7CQkvKiBsb29wIHN0YXJ0IG9mZnNldCBpbiBzYW1wbGVzICogMTYgKGxvd2VzdCA0IGJpdHMgLSBmcmFjdGlvbikgKi8KKwl1bnNpZ25lZCBzaG9ydCBsb29wX3JlcGVhdDsJLyogbG9vcCByZXBlYXQgLSAwID0gZm9yZXZlciAqLworCXVuc2lnbmVkIGludCBzYW1wbGVfcmF0aW87CS8qIHNhbXBsZSByYXRpbyAoNDQxMDAgKiAxMDI0IC8gcmF0ZSkgKi8KKwl1bnNpZ25lZCBjaGFyIGF0dGVudWF0aW9uOwkvKiAwIC0gMTI3IChubyBjb3JyZXNwb25kaW5nIG1pZGkgY29udHJvbGxlcikgKi8KKwl1bnNpZ25lZCBjaGFyIGxvd19ub3RlOwkJLyogbG93ZXIgZnJlcXVlbmN5IHJhbmdlIGZvciB0aGlzIHdhdmVmb3JtICovCisJdW5zaWduZWQgY2hhciBoaWdoX25vdGU7CS8qIGhpZ2hlciBmcmVxdWVuY3kgcmFuZ2UgZm9yIHRoaXMgd2F2ZWZvcm0gKi8KKwl1bnNpZ25lZCBjaGFyIHBhZDsKKyAgCisJc3RydWN0IGl3ZmZmZl93YXZlICpuZXh0OworfSBpd2ZmZmZfd2F2ZV90OworCisvKgorICogIExheWVyCisgKi8KKworI2RlZmluZSBJV0ZGRkZfTEZPX1NIQVBFX1RSSUFOR0xFCTAKKyNkZWZpbmUgSVdGRkZGX0xGT19TSEFQRV9QT1NUUklBTkdMRQkxCisKK3R5cGVkZWYgc3RydWN0IGl3ZmZmZl9sZm8geworCXVuc2lnbmVkIHNob3J0IGZyZXE7CQkvKiAoMC0yMDQ3KSAwLjAxSHogLSAyMS41SHogKi8KKwlzaWduZWQgc2hvcnQgZGVwdGg7CQkvKiB2b2x1bWUgKy0gKDAtMjU1KSAwLjQ4Njc1ZEIvc3RlcCAqLworCXNpZ25lZCBzaG9ydCBzd2VlcDsJCS8qIDAgLSA5NTAgZGVjaXNlY29uZHMgKi8KKwl1bnNpZ25lZCBjaGFyIHNoYXBlOwkJLyogc2VlIHRvIElXRkZGRl9MRk9fU0hBUEVfWFhYWCAqLworCXVuc2lnbmVkIGNoYXIgZGVsYXk7CQkvKiAwIC0gMjU1IGRlY2lzZWNvbmRzICovCit9IGl3ZmZmZl9sZm9fdDsKKworI2RlZmluZSBJV0ZGRkZfRU5WX0ZMQUdfUkVUUklHR0VSCTB4MDAwMQkvKiBmbGFnIC0gcmV0cmlnZ2VyICovCisKKyNkZWZpbmUgSVdGRkZGX0VOVl9NT0RFX09ORV9TSE9UCTB4MDAwMQkvKiBtb2RlIC0gb25lIHNob3QgKi8KKyNkZWZpbmUgSVdGRkZGX0VOVl9NT0RFX1NVU1RBSU4JCTB4MDAwMgkvKiBtb2RlIC0gc3VzdGFpbiAqLworI2RlZmluZSBJV0ZGRkZfRU5WX01PREVfTk9fU1VTVEFJTgkweDAwMDMJLyogbW9kZSAtIG5vIHN1c3RhaW4gKi8KKworI2RlZmluZSBJV0ZGRkZfRU5WX0lOREVYX1ZFTE9DSVRZCTB4MDAwMQkvKiBpbmRleCAtIHZlbG9jaXR5ICovCisjZGVmaW5lIElXRkZGRl9FTlZfSU5ERVhfRlJFUVVFTkNZCTB4MDAwMgkvKiBpbmRleCAtIGZyZXF1ZW5jeSAqLworCit0eXBlZGVmIHN0cnVjdCBpd2ZmZmZfZW52X3BvaW50IHsKKwl1bnNpZ25lZCBzaG9ydCBvZmZzZXQ7CisJdW5zaWduZWQgc2hvcnQgcmF0ZTsKK30gaXdmZmZmX2Vudl9wb2ludF90OworCit0eXBlZGVmIHN0cnVjdCBpd2ZmZmZfZW52X3JlY29yZCB7CisJdW5zaWduZWQgc2hvcnQgbmF0dGFjazsKKwl1bnNpZ25lZCBzaG9ydCBucmVsZWFzZTsKKwl1bnNpZ25lZCBzaG9ydCBzdXN0YWluX29mZnNldDsKKwl1bnNpZ25lZCBzaG9ydCBzdXN0YWluX3JhdGU7CisJdW5zaWduZWQgc2hvcnQgcmVsZWFzZV9yYXRlOworCXVuc2lnbmVkIGNoYXIgaGlyYW5nZTsKKwl1bnNpZ25lZCBjaGFyIHBhZDsKKwlzdHJ1Y3QgaXdmZmZmX2Vudl9yZWNvcmQgKm5leHQ7CisJLyogcG9pbnRzIGFyZSBzdG9yZWQgaGVyZSAqLworCS8qIGNvdW50IG9mIHBvaW50cyA9IG5hdHRhY2sgKyBucmVsZWFzZSAqLworfSBpd2ZmZmZfZW52X3JlY29yZF90OworCit0eXBlZGVmIHN0cnVjdCBpd2ZmZmZfZW52IHsKKwl1bnNpZ25lZCBjaGFyIGZsYWdzOworICAJdW5zaWduZWQgY2hhciBtb2RlOworICAJdW5zaWduZWQgY2hhciBpbmRleDsKKwl1bnNpZ25lZCBjaGFyIHBhZDsKKwlzdHJ1Y3QgaXdmZmZmX2Vudl9yZWNvcmQgKnJlY29yZDsKK30gaXdmZmZmX2Vudl90OworCisjZGVmaW5lIElXRkZGRl9MQVlFUl9GTEFHX1JFVFJJR0dFUgkweDAwMDEJLyogcmV0cmlnZ2VyICovCisKKyNkZWZpbmUgSVdGRkZGX0xBWUVSX1ZFTE9DSVRZX1RJTUUJMHgwMDAwCS8qIHZlbG9jaXR5IG1vZGUgPSB0aW1lICovCisjZGVmaW5lIElXRkZGRl9MQVlFUl9WRUxPQ0lUWV9SQVRFCTB4MDAwMQkvKiB2ZWxvY2l0eSBtb2RlID0gcmF0ZSAqLworCisjZGVmaW5lIElXRkZGRl9MQVlFUl9FVkVOVF9LVVAJCTB4MDAwMAkvKiBsYXllciBldmVudCAtIGtleSB1cCAqLworI2RlZmluZSBJV0ZGRkZfTEFZRVJfRVZFTlRfS0RPV04JMHgwMDAxCS8qIGxheWVyIGV2ZW50IC0ga2V5IGRvd24gKi8KKyNkZWZpbmUgSVdGRkZGX0xBWUVSX0VWRU5UX1JFVFJJRwkweDAwMDIJLyogbGF5ZXIgZXZlbnQgLSByZXRyaWdnZXIgKi8KKyNkZWZpbmUgSVdGRkZGX0xBWUVSX0VWRU5UX0xFR0FUTwkweDAwMDMJLyogbGF5ZXIgZXZlbnQgLSBsZWdhdG8gKi8KKwordHlwZWRlZiBzdHJ1Y3QgaXdmZmZmX2xheWVyIHsKKwl1bnNpZ25lZCBjaGFyIGZsYWdzOworCXVuc2lnbmVkIGNoYXIgdmVsb2NpdHlfbW9kZTsKKyAgICAgIAl1bnNpZ25lZCBjaGFyIGxheWVyX2V2ZW50OworCXVuc2lnbmVkIGNoYXIgbG93X3JhbmdlOwkvKiByYW5nZSBmb3IgbGF5ZXIgYmFzZWQgKi8KKwl1bnNpZ25lZCBjaGFyIGhpZ2hfcmFuZ2U7CS8qIG9uIGVpdGhlciB2ZWxvY2l0eSBvciBmcmVxdWVuY3kgKi8KKwl1bnNpZ25lZCBjaGFyIHBhbjsJCS8qIHBhbiBvZmZzZXQgZnJvbSBDQzEgKDAgbGVmdCAtIDEyNyByaWdodCkgKi8KKwl1bnNpZ25lZCBjaGFyIHBhbl9mcmVxX3NjYWxlOwkvKiBwb3NpdGlvbiBiYXNlZCBvbiBmcmVxdWVuY3kgKDAtMTI3KSAqLworCXVuc2lnbmVkIGNoYXIgYXR0ZW51YXRpb247CS8qIDAtMTI3IChubyBjb3JyZXNwb25kaW5nIG1pZGkgY29udHJvbGxlcikgKi8KKwlpd2ZmZmZfbGZvX3QgdHJlbW9sbzsJCS8qIHRyZW1vbG8gZWZmZWN0ICovCisJaXdmZmZmX2xmb190IHZpYnJhdG87CQkvKiB2aWJyYXRvIGVmZmVjdCAqLworCXVuc2lnbmVkIHNob3J0IGZyZXFfc2NhbGU7CS8qIDAtMjA0OCwgMTAyNCBpcyBlcXVhbCB0byBzZW1pdG9uZSBzY2FsaW5nICovCisJdW5zaWduZWQgY2hhciBmcmVxX2NlbnRlcjsJLyogY2VudGVyIGZvciBrZXlib2FyZCBmcmVxdWVuY3kgc2NhbGluZyAqLworCXVuc2lnbmVkIGNoYXIgcGFkOworCWl3ZmZmZl9lbnZfdCBwZW52OwkJLyogcGl0Y2ggZW52ZWxvcGUgKi8KKwlpd2ZmZmZfZW52X3QgdmVudjsJCS8qIHZvbHVtZSBlbnZlbG9wZSAqLworCisJaXdmZmZmX3dhdmVfdCAqd2F2ZTsKKwlzdHJ1Y3QgaXdmZmZmX2xheWVyICpuZXh0OworfSBpd2ZmZmZfbGF5ZXJfdDsKKworLyoKKyAqICBJbnN0cnVtZW50CisgKi8KKworI2RlZmluZSBJV0ZGRkZfRVhDTFVERV9OT05FCQkweDAwMDAJLyogZXhjbHVzaW9uIG1vZGUgLSBub25lICovCisjZGVmaW5lIElXRkZGRl9FWENMVURFX1NJTkdMRQkJMHgwMDAxCS8qIGV4Y2x1ZGUgc2luZ2xlIC0gc2luZ2xlIG5vdGUgZnJvbSB0aGUgaW5zdHJ1bWVudCBncm91cCAqLworI2RlZmluZSBJV0ZGRkZfRVhDTFVERV9NVUxUSVBMRQkJMHgwMDAyCS8qIGV4Y2x1ZGUgbXVsdGlwbGUgLSBzdG9wIG9ubHkgc2FtZSBub3RlIGZyb20gdGhpcyBpbnN0cnVtZW50ICovCisKKyNkZWZpbmUgSVdGRkZGX0xBWUVSX05PTkUJCTB4MDAwMAkvKiBub3QgbGF5ZXJlZCAqLworI2RlZmluZSBJV0ZGRkZfTEFZRVJfT04JCQkweDAwMDEJLyogbGF5ZXJlZCAqLworI2RlZmluZSBJV0ZGRkZfTEFZRVJfVkVMT0NJVFkJCTB4MDAwMgkvKiBsYXllcmVkIGJ5IHZlbG9jaXR5ICovCisjZGVmaW5lIElXRkZGRl9MQVlFUl9GUkVRVUVOQ1kJCTB4MDAwMwkvKiBsYXllcmVkIGJ5IGZyZXF1ZW5jeSAqLworCisjZGVmaW5lIElXRkZGRl9FRkZFQ1RfTk9ORQkJMAorI2RlZmluZSBJV0ZGRkZfRUZGRUNUX1JFVkVSQgkJMQorI2RlZmluZSBJV0ZGRkZfRUZGRUNUX0NIT1JVUwkJMgorI2RlZmluZSBJV0ZGRkZfRUZGRUNUX0VDSE8JCTMKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIHNob3J0IGV4Y2x1c2lvbjsKKwl1bnNpZ25lZCBzaG9ydCBsYXllcl90eXBlOworCXVuc2lnbmVkIHNob3J0IGV4Y2x1c2lvbl9ncm91cDsJLyogMCAtIG5vbmUsIDEtNjU1MzUgKi8KKworCXVuc2lnbmVkIGNoYXIgZWZmZWN0MTsJCS8qIGVmZmVjdCAxICovCisJdW5zaWduZWQgY2hhciBlZmZlY3QxX2RlcHRoOwkvKiAwLTEyNyAqLworCXVuc2lnbmVkIGNoYXIgZWZmZWN0MjsJCS8qIGVmZmVjdCAyICovCisJdW5zaWduZWQgY2hhciBlZmZlY3QyX2RlcHRoOwkvKiAwLTEyNyAqLworCisJaXdmZmZmX2xheWVyX3QgKmxheWVyOwkJLyogZmlyc3QgbGF5ZXIgKi8KK30gaXdmZmZmX2luc3RydW1lbnRfdDsKKworLyoKKyAqCisgKiAgICBLZXJuZWwgPC0+IHVzZXIgc3BhY2UKKyAqICAgIEhhcmR3YXJlIChDUFUpIGluZGVwZW5kZW50IHNlY3Rpb24KKyAqCisgKiAgICAqID0gemVybyBvciBtb3JlCisgKiAgICArID0gb25lIG9yIG1vcmUKKyAqCisgKiAgICBpd2ZmZmZfeGluc3RydW1lbnQJCUlXRkZGRl9TVFJVX0lOU1RSCisgKiAgICAgICtpd2ZmZmZfeGxheWVyCQkJSVdGRkZGX1NUUlVfTEFZRVIKKyAqICAgICAgICAqaXdmZmZmX3hlbnZfcmVjb3JkCQlJV0ZGRkZfU1RSVV9FTlZfUkVDVCAodHJlbW9sbykKKyAqICAgICAgICAqaXdmZmZmX3hlbnZfcmVjb3JkCQlJV0ZGRkZfU1RSVV9FVk5fUkVDVCAodmlicmF0bykKKyAqICAgICAgICAgICtpd2ZmZmZfeHdhdmUJCUlXRkZGRl9TVFJVX1dBVkUKKyAqCisgKi8KKworI2RlZmluZSBJV0ZGRkZfU1RSVV9XQVZFCV9fY3B1X3RvX2JlMzIoKCdXJzw8MjQpfCgnQSc8PDE2KXwoJ1YnPDw4KXwnRScpCisjZGVmaW5lIElXRkZGRl9TVFJVX0VOVl9SRUNQCV9fY3B1X3RvX2JlMzIoKCdFJzw8MjQpfCgnTic8PDE2KXwoJ1InPDw4KXwnUCcpCisjZGVmaW5lIElXRkZGRl9TVFJVX0VOVl9SRUNWCV9fY3B1X3RvX2JlMzIoKCdFJzw8MjQpfCgnTic8PDE2KXwoJ1InPDw4KXwnVicpCisjZGVmaW5lIElXRkZGRl9TVFJVX0xBWUVSIAlfX2NwdV90b19iZTMyKCgnTCc8PDI0KXwoJ0EnPDwxNil8KCdZJzw8OCl8J1InKQorI2RlZmluZSBJV0ZGRkZfU1RSVV9JTlNUUiAJX19jcHVfdG9fYmUzMigoJ0knPDwyNCl8KCdOJzw8MTYpfCgnUyc8PDgpfCdUJykKKworLyoKKyAqICBXYXZldGFibGUgZGVmaW5pdGlvbnMKKyAqLworCit0eXBlZGVmIHN0cnVjdCBpd2ZmZmZfeHdhdmUgeworCV9fdTMyIHN0eXBlOwkJCS8qIHN0cnVjdHVyZSB0eXBlICovCisKKwlfX3UzMiBzaGFyZV9pZFs0XTsJCS8qIHNoYXJlIGlkIC0gemVybyA9IG5vIHNoYXJpbmcgKi8KKworCV9fdTMyIGZvcm1hdDsJCQkvKiB3YXZlIGZvcm1hdCAqLworCV9fdTMyIG9mZnNldDsJCQkvKiBvZmZzZXQgdG8gUk9NIChhZGRyZXNzKSAqLworCisJX191MzIgc2l6ZTsJCQkvKiBzaXplIG9mIHdhdmVmb3JtIGluIHNhbXBsZXMgKi8KKwlfX3UzMiBzdGFydDsJCQkvKiBzdGFydCBvZmZzZXQgaW4gc2FtcGxlcyAqIDE2IChsb3dlc3QgNCBiaXRzIC0gZnJhY3Rpb24pICovCisJX191MzIgbG9vcF9zdGFydDsJCS8qIGJpdHMgbG9vcCBzdGFydCBvZmZzZXQgaW4gc2FtcGxlcyAqIDE2IChsb3dlc3QgNCBiaXRzIC0gZnJhY3Rpb24pICovCisJX191MzIgbG9vcF9lbmQ7CQkJLyogbG9vcCBzdGFydCBvZmZzZXQgaW4gc2FtcGxlcyAqIDE2IChsb3dlc3QgNCBiaXRzIC0gZnJhY3Rpb24pICovCisJX191MTYgbG9vcF9yZXBlYXQ7CQkvKiBsb29wIHJlcGVhdCAtIDAgPSBmb3JldmVyICovCisJX191MzIgc2FtcGxlX3JhdGlvOwkJLyogc2FtcGxlIHJhdGlvICg0NDEwMCAqIDEwMjQgLyByYXRlKSAqLworCV9fdTggYXR0ZW51YXRpb247CQkvKiAwIC0gMTI3IChubyBjb3JyZXNwb25kaW5nIG1pZGkgY29udHJvbGxlcikgKi8KKwlfX3U4IGxvd19ub3RlOwkJCS8qIGxvd2VyIGZyZXF1ZW5jeSByYW5nZSBmb3IgdGhpcyB3YXZlZm9ybSAqLworCV9fdTggaGlnaF9ub3RlOwkJCS8qIGhpZ2hlciBmcmVxdWVuY3kgcmFuZ2UgZm9yIHRoaXMgd2F2ZWZvcm0gKi8KKwlfX3U4IHBhZDsKK30gaXdmZmZmX3h3YXZlX3Q7CisKKy8qCisgKiAgTGF5ZXIKKyAqLworCit0eXBlZGVmIHN0cnVjdCBpd2ZmZmZfeGxmbyB7CisJX191MTYgZnJlcTsJCQkvKiAoMC0yMDQ3KSAwLjAxSHogLSAyMS41SHogKi8KKwlfX3MxNiBkZXB0aDsJCQkvKiB2b2x1bWUgKy0gKDAtMjU1KSAwLjQ4Njc1ZEIvc3RlcCAqLworCV9fczE2IHN3ZWVwOwkJCS8qIDAgLSA5NTAgZGVjaXNlY29uZHMgKi8KKwlfX3U4IHNoYXBlOwkJCS8qIHNlZSB0byBVTFRSQV9JV19MRk9fU0hBUEVfWFhYWCAqLworCV9fdTggZGVsYXk7CQkJLyogMCAtIDI1NSBkZWNpc2Vjb25kcyAqLworfSBpd2ZmZmZfeGxmb190OworCit0eXBlZGVmIHN0cnVjdCBpd2ZmZmZfeGVudl9wb2ludCB7CisJX191MTYgb2Zmc2V0OworCV9fdTE2IHJhdGU7Cit9IGl3ZmZmZl94ZW52X3BvaW50X3Q7CisKK3R5cGVkZWYgc3RydWN0IGl3ZmZmZl94ZW52X3JlY29yZCB7CisJX191MzIgc3R5cGU7CisJX191MTYgbmF0dGFjazsKKwlfX3UxNiBucmVsZWFzZTsKKwlfX3UxNiBzdXN0YWluX29mZnNldDsKKwlfX3UxNiBzdXN0YWluX3JhdGU7CisJX191MTYgcmVsZWFzZV9yYXRlOworCV9fdTggaGlyYW5nZTsKKwlfX3U4IHBhZDsKKwkvKiBwb2ludHMgYXJlIHN0b3JlZCBoZXJlLi4gKi8KKwkvKiBjb3VudCBvZiBwb2ludHMgPSBuYXR0YWNrICsgbnJlbGVhc2UgKi8KK30gaXdmZmZmX3hlbnZfcmVjb3JkX3Q7CisKK3R5cGVkZWYgc3RydWN0IGl3ZmZmZl94ZW52IHsKKwlfX3U4IGZsYWdzOworICAJX191OCBtb2RlOworICAJX191OCBpbmRleDsKKwlfX3U4IHBhZDsKK30gaXdmZmZmX3hlbnZfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaXdmZmZmX3hsYXllciB7CisJX191MzIgc3R5cGU7CisJX191OCBmbGFnczsKKwlfX3U4IHZlbG9jaXR5X21vZGU7CisgICAgICAJX191OCBsYXllcl9ldmVudDsKKwlfX3U4IGxvd19yYW5nZTsJCQkvKiByYW5nZSBmb3IgbGF5ZXIgYmFzZWQgKi8KKwlfX3U4IGhpZ2hfcmFuZ2U7CQkvKiBvbiBlaXRoZXIgdmVsb2NpdHkgb3IgZnJlcXVlbmN5ICovCisJX191OCBwYW47CQkJLyogcGFuIG9mZnNldCBmcm9tIENDMSAoMCBsZWZ0IC0gMTI3IHJpZ2h0KSAqLworCV9fdTggcGFuX2ZyZXFfc2NhbGU7CQkvKiBwb3NpdGlvbiBiYXNlZCBvbiBmcmVxdWVuY3kgKDAtMTI3KSAqLworCV9fdTggYXR0ZW51YXRpb247CQkvKiAwLTEyNyAobm8gY29ycmVzcG9uZGluZyBtaWRpIGNvbnRyb2xsZXIpICovCisJaXdmZmZmX3hsZm9fdCB0cmVtb2xvOwkJLyogdHJlbW9sbyBlZmZlY3QgKi8KKwlpd2ZmZmZfeGxmb190IHZpYnJhdG87CQkvKiB2aWJyYXRvIGVmZmVjdCAqLworCV9fdTE2IGZyZXFfc2NhbGU7CQkvKiAwLTIwNDgsIDEwMjQgaXMgZXF1YWwgdG8gc2VtaXRvbmUgc2NhbGluZyAqLworCV9fdTggZnJlcV9jZW50ZXI7CQkvKiBjZW50ZXIgZm9yIGtleWJvYXJkIGZyZXF1ZW5jeSBzY2FsaW5nICovCisJX191OCBwYWQ7CisJaXdmZmZmX3hlbnZfdCBwZW52OwkJLyogcGl0Y2ggZW52ZWxvcGUgKi8KKwlpd2ZmZmZfeGVudl90IHZlbnY7CQkvKiB2b2x1bWUgZW52ZWxvcGUgKi8KK30gaXdmZmZmX3hsYXllcl90OworCisvKgorICogIEluc3RydW1lbnQKKyAqLworCit0eXBlZGVmIHN0cnVjdCBpd2ZmZmZfeGluc3RydW1lbnQgeworCV9fdTMyIHN0eXBlOworCQorCV9fdTE2IGV4Y2x1c2lvbjsKKwlfX3UxNiBsYXllcl90eXBlOworCV9fdTE2IGV4Y2x1c2lvbl9ncm91cDsJCS8qIDAgLSBub25lLCAxLTY1NTM1ICovCisKKwlfX3U4IGVmZmVjdDE7CQkJLyogZWZmZWN0IDEgKi8KKwlfX3U4IGVmZmVjdDFfZGVwdGg7CQkvKiAwLTEyNyAqLworCV9fdTggZWZmZWN0MjsJCQkvKiBlZmZlY3QgMiAqLworCV9fdTggZWZmZWN0Ml9kZXB0aDsJCS8qIDAtMTI3ICovCit9IGl3ZmZmZl94aW5zdHJ1bWVudF90OworCisvKgorICogIFJPTSBzdXBwb3J0CisgKiAgICBJbnRlcldhdmUgUk9NcyBhcmUgTGl0dGxlLUVuZGlhbiAoeDg2KQorICovCisKKyNkZWZpbmUgSVdGRkZGX1JPTV9IRFJfU0laRQk1MTIKKwordHlwZWRlZiBzdHJ1Y3QgeworCV9fdTggaXdhdmVbOF07CisJX191OCByZXZpc2lvbjsKKwlfX3U4IHNlcmllc19udW1iZXI7CisJX191OCBzZXJpZXNfbmFtZVsxNl07CisJX191OCBkYXRlWzEwXTsKKwlfX3UxNiB2ZW5kb3JfcmV2aXNpb25fbWFqb3I7CisJX191MTYgdmVuZG9yX3JldmlzaW9uX21pbm9yOworCV9fdTMyIHJvbV9zaXplOworCV9fdTggY29weXJpZ2h0WzEyOF07CisJX191OCB2ZW5kb3JfbmFtZVs2NF07CisJX191OCBkZXNjcmlwdGlvblsxMjhdOworfSBpd2ZmZmZfcm9tX2hlYWRlcl90OworCisvKgorICogIEluc3RydW1lbnQgaW5mbworICovCisKKyNkZWZpbmUgSVdGRkZGX0lORk9fTEZPX1ZJQlJBVE8JCSgxPDwwKQorI2RlZmluZSBJV0ZGRkZfSU5GT19MRk9fVklCUkFUT19TSEFQRQkoMTw8MSkKKyNkZWZpbmUgSVdGRkZGX0lORk9fTEZPX1RSRU1PTE8JCSgxPDwyKQorI2RlZmluZSBJV0ZGRkZfSU5GT19MRk9fVFJFTU9MT19TSEFQRQkoMTw8MykKKwordHlwZWRlZiBzdHJ1Y3QgaXdmZmZmX2luZm8geworCXVuc2lnbmVkIGludCBmb3JtYXQ7CQkvKiBzdXBwb3J0ZWQgZm9ybWF0IGJpdHMgKi8KKwl1bnNpZ25lZCBpbnQgZWZmZWN0czsJCS8qIHN1cHBvcnRlZCBlZmZlY3RzICgxIDw8IElXRkZGRl9FRkZFQ1QqKSAqLworCXVuc2lnbmVkIGludCBsZm9zOwkJLyogTEZPIGVmZmVjdHMgKi8KKwl1bnNpZ25lZCBpbnQgbWF4OF9sZW47CQkvKiBtYXhpbXVtIDgtYml0IHdhdmUgbGVuZ3RoICovCisJdW5zaWduZWQgaW50IG1heDE2X2xlbjsJCS8qIG1heGltdW0gMTYtYml0IHdhdmUgbGVuZ3RoICovCit9IGl3ZmZmZl9pbmZvX3Q7CisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlICJzZXFfaW5zdHIuaCIKKwordHlwZWRlZiBzdHJ1Y3QgeworCXZvaWQgKnByaXZhdGVfZGF0YTsKKwlpbnQgKCppbmZvKSh2b2lkICpwcml2YXRlX2RhdGEsIGl3ZmZmZl9pbmZvX3QgKmluZm8pOworCWludCAoKnB1dF9zYW1wbGUpKHZvaWQgKnByaXZhdGVfZGF0YSwgaXdmZmZmX3dhdmVfdCAqd2F2ZSwKKwkgICAgICAgICAgICAgICAgICBjaGFyIF9fdXNlciAqZGF0YSwgbG9uZyBsZW4sIGludCBhdG9taWMpOworCWludCAoKmdldF9zYW1wbGUpKHZvaWQgKnByaXZhdGVfZGF0YSwgaXdmZmZmX3dhdmVfdCAqd2F2ZSwKKwkJCSAgY2hhciBfX3VzZXIgKmRhdGEsIGxvbmcgbGVuLCBpbnQgYXRvbWljKTsKKwlpbnQgKCpyZW1vdmVfc2FtcGxlKSh2b2lkICpwcml2YXRlX2RhdGEsIGl3ZmZmZl93YXZlX3QgKndhdmUsCisJCQkgICAgIGludCBhdG9taWMpOworCXZvaWQgKCpub3RpZnkpKHZvaWQgKnByaXZhdGVfZGF0YSwgc25kX3NlcV9raW5zdHJfdCAqaW5zdHIsIGludCB3aGF0KTsKKwlzbmRfc2VxX2tpbnN0cl9vcHNfdCBrb3BzOworfSBzbmRfaXdmZmZmX29wc190OworCitpbnQgc25kX3NlcV9pd2ZmZmZfaW5pdChzbmRfaXdmZmZmX29wc190ICpvcHMsCisJCQl2b2lkICpwcml2YXRlX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICBzbmRfc2VxX2tpbnN0cl9vcHNfdCAqbmV4dCk7CisKKyNlbmRpZgorCisjZW5kaWYgLyogX19TT1VORF9BSU5TVFJfSVdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9haW5zdHJfc2ltcGxlLmggYi9pbmNsdWRlL3NvdW5kL2FpbnN0cl9zaW1wbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDgyNGI0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9zb3VuZC9haW5zdHJfc2ltcGxlLmgKQEAgLTAsMCArMSwxNTYgQEAKKy8qCisgKiAgQWR2YW5jZWQgTGludXggU291bmQgQXJjaGl0ZWN0dXJlCisgKgorICogIFNpbXBsZSAoTU9EIHBsYXllcikgSW5zdHJ1bWVudCBGb3JtYXQKKyAqICBDb3B5cmlnaHQgKGMpIDE5OTQtOTkgYnkgSmFyb3NsYXYgS3lzZWxhIDxwZXJleEBzdXNlLmN6PgorICoKKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKgorICovCisKKyNpZm5kZWYgX19TT1VORF9BSU5TVFJfU0lNUExFX0gKKyNkZWZpbmUgX19TT1VORF9BSU5TVFJfU0lNUExFX0gKKworI2lmbmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2VuZGlmCisKKy8qCisgKiAgc2hhcmUgdHlwZXMgKHNoYXJlIElEIDEpCisgKi8KKworI2RlZmluZSBTSU1QTEVfU0hBUkVfRklMRQkJMAorCisvKgorICogIHdhdmUgZm9ybWF0cworICovCisKKyNkZWZpbmUgU0lNUExFX1dBVkVfMTZCSVQJCTB4MDAwMSAgLyogMTYtYml0IHdhdmUgKi8KKyNkZWZpbmUgU0lNUExFX1dBVkVfVU5TSUdORUQJCTB4MDAwMiAgLyogdW5zaWduZWQgd2F2ZSAqLworI2RlZmluZSBTSU1QTEVfV0FWRV9JTlZFUlQJCTB4MDAwMiAgLyogc2FtZSBhcyB1bnNpZ25lZCB3YXZlICovCisjZGVmaW5lIFNJTVBMRV9XQVZFX0JBQ0tXQVJECQkweDAwMDQgIC8qIGJhY2t3YXJkIG1vZGUgKG1heWJlIHVzZWQgZm9yIHJldmVyYiBvciBwaW5nLXBpbmcgbG9vcCkgKi8KKyNkZWZpbmUgU0lNUExFX1dBVkVfTE9PUAkJMHgwMDA4ICAvKiBsb29wIG1vZGUgKi8KKyNkZWZpbmUgU0lNUExFX1dBVkVfQklESVIJCTB4MDAxMCAgLyogYmlkaXJlY3Rpb25hbCBtb2RlICovCisjZGVmaW5lIFNJTVBMRV9XQVZFX1NURVJFTwkJMHgwMTAwCS8qIHN0ZXJlbyB3YXZlICovCisjZGVmaW5lIFNJTVBMRV9XQVZFX1VMQVcJCTB4MDIwMAkvKiB1TGF3IGNvbXByZXNzaW9uIG1vZGUgKi8KKworLyoKKyAqICBpbnN0cnVtZW50IGVmZmVjdHMKKyAqLworCisjZGVmaW5lIFNJTVBMRV9FRkZFQ1RfTk9ORQkJMAorI2RlZmluZSBTSU1QTEVfRUZGRUNUX1JFVkVSQgkJMQorI2RlZmluZSBTSU1QTEVfRUZGRUNUX0NIT1JVUwkJMgorI2RlZmluZSBTSU1QTEVfRUZGRUNUX0VDSE8JCTMKKworLyoKKyAqICBpbnN0cnVtZW50IGluZm8KKyAqLworCit0eXBlZGVmIHN0cnVjdCBzaW1wbGVfaW5zdHJ1bWVudF9pbmZvIHsKKwl1bnNpZ25lZCBpbnQgZm9ybWF0OwkJLyogc3VwcG9ydGVkIGZvcm1hdCBiaXRzICovCisJdW5zaWduZWQgaW50IGVmZmVjdHM7CQkvKiBzdXBwb3J0ZWQgZWZmZWN0cyAoMSA8PCBTSU1QTEVfRUZGRUNUXyopICovCisJdW5zaWduZWQgaW50IG1heDhfbGVuOwkJLyogbWF4aW11bSA4LWJpdCB3YXZlIGxlbmd0aCAqLworCXVuc2lnbmVkIGludCBtYXgxNl9sZW47CQkvKiBtYXhpbXVtIDE2LWJpdCB3YXZlIGxlbmd0aCAqLworfSBzaW1wbGVfaW5zdHJ1bWVudF9pbmZvX3Q7CisKKy8qCisgKiAgSW5zdHJ1bWVudAorICovCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQgc2hhcmVfaWRbNF07CS8qIHNoYXJlIGlkIC0gemVybyA9IG5vIHNoYXJpbmcgKi8KKwl1bnNpZ25lZCBpbnQgZm9ybWF0OwkJLyogd2F2ZSBmb3JtYXQgKi8KKworCXN0cnVjdCB7CisJCXVuc2lnbmVkIGludCBudW1iZXI7CS8qIHNvbWUgb3RoZXIgSUQgZm9yIHRoaXMgaW5zdHJ1bWVudCAqLworCQl1bnNpZ25lZCBpbnQgbWVtb3J5OwkvKiBiZWdpbiBvZiB3YXZlZm9ybSBpbiBvbmJvYXJkIG1lbW9yeSAqLworCQl1bnNpZ25lZCBjaGFyICpwdHI7CS8qIHBvaW50ZXIgdG8gd2F2ZWZvcm0gaW4gc3lzdGVtIG1lbW9yeSAqLworCX0gYWRkcmVzczsKKworCXVuc2lnbmVkIGludCBzaXplOwkJLyogc2l6ZSBvZiB3YXZlZm9ybSBpbiBzYW1wbGVzICovCisJdW5zaWduZWQgaW50IHN0YXJ0OwkJLyogc3RhcnQgb2Zmc2V0IGluIHNhbXBsZXMgKiAxNiAobG93ZXN0IDQgYml0cyAtIGZyYWN0aW9uKSAqLworCXVuc2lnbmVkIGludCBsb29wX3N0YXJ0OwkvKiBsb29wIHN0YXJ0IG9mZnNldCBpbiBzYW1wbGVzICogMTYgKGxvd2VzdCA0IGJpdHMgLSBmcmFjdGlvbikgKi8KKwl1bnNpZ25lZCBpbnQgbG9vcF9lbmQ7CQkvKiBsb29wIGVuZCBvZmZzZXQgaW4gc2FtcGxlcyAqIDE2IChsb3dlc3QgNCBiaXRzIC0gZnJhY3Rpb24pICovCisJdW5zaWduZWQgc2hvcnQgbG9vcF9yZXBlYXQ7CS8qIGxvb3AgcmVwZWF0IC0gMCA9IGZvcmV2ZXIgKi8KKworCXVuc2lnbmVkIGNoYXIgZWZmZWN0MTsJCS8qIGVmZmVjdCAxICovCisJdW5zaWduZWQgY2hhciBlZmZlY3QxX2RlcHRoOwkvKiAwLTEyNyAqLworCXVuc2lnbmVkIGNoYXIgZWZmZWN0MjsJCS8qIGVmZmVjdCAyICovCisJdW5zaWduZWQgY2hhciBlZmZlY3QyX2RlcHRoOwkvKiAwLTEyNyAqLworfSBzaW1wbGVfaW5zdHJ1bWVudF90OworCisvKgorICoKKyAqICAgIEtlcm5lbCA8LT4gdXNlciBzcGFjZQorICogICAgSGFyZHdhcmUgKENQVSkgaW5kZXBlbmRlbnQgc2VjdGlvbgorICoKKyAqICAgICogPSB6ZXJvIG9yIG1vcmUKKyAqICAgICsgPSBvbmUgb3IgbW9yZQorICoKKyAqICAgIHNpbXBsZV94aW5zdHJ1bWVudAlTSU1QTEVfU1RSVV9JTlNUUgorICoKKyAqLworCisjZGVmaW5lIFNJTVBMRV9TVFJVX0lOU1RSCV9fY3B1X3RvX2JlMzIoKCdJJzw8MjQpfCgnTic8PDE2KXwoJ1MnPDw4KXwnVCcpCisKKy8qCisgKiAgSW5zdHJ1bWVudAorICovCisKK3R5cGVkZWYgc3RydWN0IHNpbXBsZV94aW5zdHJ1bWVudCB7CisJX191MzIgc3R5cGU7CisKKwlfX3UzMiBzaGFyZV9pZFs0XTsJCS8qIHNoYXJlIGlkIC0gemVybyA9IG5vIHNoYXJpbmcgKi8KKwlfX3UzMiBmb3JtYXQ7CQkJLyogd2F2ZSBmb3JtYXQgKi8KKworCV9fdTMyIHNpemU7CQkJLyogc2l6ZSBvZiB3YXZlZm9ybSBpbiBzYW1wbGVzICovCisJX191MzIgc3RhcnQ7CQkJLyogc3RhcnQgb2Zmc2V0IGluIHNhbXBsZXMgKiAxNiAobG93ZXN0IDQgYml0cyAtIGZyYWN0aW9uKSAqLworCV9fdTMyIGxvb3Bfc3RhcnQ7CQkvKiBiaXRzIGxvb3Agc3RhcnQgb2Zmc2V0IGluIHNhbXBsZXMgKiAxNiAobG93ZXN0IDQgYml0cyAtIGZyYWN0aW9uKSAqLworCV9fdTMyIGxvb3BfZW5kOwkJCS8qIGxvb3Agc3RhcnQgb2Zmc2V0IGluIHNhbXBsZXMgKiAxNiAobG93ZXN0IDQgYml0cyAtIGZyYWN0aW9uKSAqLworCV9fdTE2IGxvb3BfcmVwZWF0OwkJLyogbG9vcCByZXBlYXQgLSAwID0gZm9yZXZlciAqLworCQorCV9fdTggZWZmZWN0MTsJCQkvKiBlZmZlY3QgMSAqLworCV9fdTggZWZmZWN0MV9kZXB0aDsJCS8qIDAtMTI3ICovCisJX191OCBlZmZlY3QyOwkJCS8qIGVmZmVjdCAyICovCisJX191OCBlZmZlY3QyX2RlcHRoOwkJLyogMC0xMjcgKi8KK30gc2ltcGxlX3hpbnN0cnVtZW50X3Q7CisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlICJzZXFfaW5zdHIuaCIKKwordHlwZWRlZiBzdHJ1Y3QgeworCXZvaWQgKnByaXZhdGVfZGF0YTsKKwlpbnQgKCppbmZvKSh2b2lkICpwcml2YXRlX2RhdGEsIHNpbXBsZV9pbnN0cnVtZW50X2luZm9fdCAqaW5mbyk7CisJaW50ICgqcHV0X3NhbXBsZSkodm9pZCAqcHJpdmF0ZV9kYXRhLCBzaW1wbGVfaW5zdHJ1bWVudF90ICppbnN0ciwKKwkgICAgICAgICAgICAgICAgICBjaGFyIF9fdXNlciAqZGF0YSwgbG9uZyBsZW4sIGludCBhdG9taWMpOworCWludCAoKmdldF9zYW1wbGUpKHZvaWQgKnByaXZhdGVfZGF0YSwgc2ltcGxlX2luc3RydW1lbnRfdCAqaW5zdHIsCisJCQkgIGNoYXIgX191c2VyICpkYXRhLCBsb25nIGxlbiwgaW50IGF0b21pYyk7CisJaW50ICgqcmVtb3ZlX3NhbXBsZSkodm9pZCAqcHJpdmF0ZV9kYXRhLCBzaW1wbGVfaW5zdHJ1bWVudF90ICppbnN0ciwKKwkJCSAgICAgaW50IGF0b21pYyk7CisJdm9pZCAoKm5vdGlmeSkodm9pZCAqcHJpdmF0ZV9kYXRhLCBzbmRfc2VxX2tpbnN0cl90ICppbnN0ciwgaW50IHdoYXQpOworCXNuZF9zZXFfa2luc3RyX29wc190IGtvcHM7Cit9IHNuZF9zaW1wbGVfb3BzX3Q7CisKK2ludCBzbmRfc2VxX3NpbXBsZV9pbml0KHNuZF9zaW1wbGVfb3BzX3QgKm9wcywKKwkJCXZvaWQgKnByaXZhdGVfZGF0YSwKKwkJCXNuZF9zZXFfa2luc3RyX29wc190ICpuZXh0KTsKKworI2VuZGlmCisKKyNlbmRpZiAvKiBfX1NPVU5EX0FJTlNUUl9TSU1QTEVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9hazQxMTQuaCBiL2luY2x1ZGUvc291bmQvYWs0MTE0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNmMmMzZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvc291bmQvYWs0MTE0LmgKQEAgLTAsMCArMSwyMDUgQEAKKyNpZm5kZWYgX19TT1VORF9BSzQxMTRfSAorI2RlZmluZSBfX1NPVU5EX0FLNDExNF9ICisKKy8qCisgKiAgUm91dGluZXMgZm9yIEFzYWhpIEthc2VpIEFLNDExNAorICogIENvcHlyaWdodCAoYykgYnkgSmFyb3NsYXYgS3lzZWxhIDxwZXJleEBzdXNlLmN6PiwKKyAqCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICoKKyAqLworCisvKiBBSzQxMTQgcmVnaXN0ZXJzICovCisjZGVmaW5lIEFLNDExNF9SRUdfUFdSRE4JMHgwMAkvKiBwb3dlciBkb3duICovCisjZGVmaW5lIEFLNDExNF9SRUdfRk9STUFUCTB4MDEJLyogZm9ybWF0IGNvbnRyb2wgKi8KKyNkZWZpbmUgQUs0MTE0X1JFR19JTzAJCTB4MDIJLyogaW5wdXQvb3V0cHV0IGNvbnRyb2wgKi8KKyNkZWZpbmUgQUs0MTE0X1JFR19JTzEJCTB4MDMJLyogaW5wdXQvb3V0cHV0IGNvbnRyb2wgKi8KKyNkZWZpbmUgQUs0MTE0X1JFR19JTlQwX01BU0sJMHgwNAkvKiBpbnRlcnJ1cHQwIG1hc2sgKi8KKyNkZWZpbmUgQUs0MTE0X1JFR19JTlQxX01BU0sJMHgwNQkvKiBpbnRlcnJ1cHQxIG1hc2sgKi8KKyNkZWZpbmUgQUs0MTE0X1JFR19SQ1MwCQkweDA2CS8qIHJlY2VpdmVyIHN0YXR1cyAwICovCisjZGVmaW5lIEFLNDExNF9SRUdfUkNTMQkJMHgwNwkvKiByZWNlaXZlciBzdGF0dXMgMSAqLworI2RlZmluZSBBSzQxMTRfUkVHX1JYQ1NCMAkweDA4CS8qIFJYIGNoYW5uZWwgc3RhdHVzIGJ5dGUgMCAqLworI2RlZmluZSBBSzQxMTRfUkVHX1JYQ1NCMQkweDA5CS8qIFJYIGNoYW5uZWwgc3RhdHVzIGJ5dGUgMSAqLworI2RlZmluZSBBSzQxMTRfUkVHX1JYQ1NCMgkweDBhCS8qIFJYIGNoYW5uZWwgc3RhdHVzIGJ5dGUgMiAqLworI2RlZmluZSBBSzQxMTRfUkVHX1JYQ1NCMwkweDBiCS8qIFJYIGNoYW5uZWwgc3RhdHVzIGJ5dGUgMyAqLworI2RlZmluZSBBSzQxMTRfUkVHX1JYQ1NCNAkweDBjCS8qIFJYIGNoYW5uZWwgc3RhdHVzIGJ5dGUgNCAqLworI2RlZmluZSBBSzQxMTRfUkVHX1RYQ1NCMAkweDBkCS8qIFRYIGNoYW5uZWwgc3RhdHVzIGJ5dGUgMCAqLworI2RlZmluZSBBSzQxMTRfUkVHX1RYQ1NCMQkweDBlCS8qIFRYIGNoYW5uZWwgc3RhdHVzIGJ5dGUgMSAqLworI2RlZmluZSBBSzQxMTRfUkVHX1RYQ1NCMgkweDBmCS8qIFRYIGNoYW5uZWwgc3RhdHVzIGJ5dGUgMiAqLworI2RlZmluZSBBSzQxMTRfUkVHX1RYQ1NCMwkweDEwCS8qIFRYIGNoYW5uZWwgc3RhdHVzIGJ5dGUgMyAqLworI2RlZmluZSBBSzQxMTRfUkVHX1RYQ1NCNAkweDExCS8qIFRYIGNoYW5uZWwgc3RhdHVzIGJ5dGUgNCAqLworI2RlZmluZSBBSzQxMTRfUkVHX1BjMAkJMHgxMgkvKiBidXJzdCBwcmVhbWJsZSBQYyBieXRlIDAgKi8KKyNkZWZpbmUgQUs0MTE0X1JFR19QYzEJCTB4MTMJLyogYnVyc3QgcHJlYW1ibGUgUGMgYnl0ZSAxICovCisjZGVmaW5lIEFLNDExNF9SRUdfUGQwCQkweDE0CS8qIGJ1cnN0IHByZWFtYmxlIFBkIGJ5dGUgMCAqLworI2RlZmluZSBBSzQxMTRfUkVHX1BkMQkJMHgxNQkvKiBidXJzdCBwcmVhbWJsZSBQZCBieXRlIDEgKi8KKyNkZWZpbmUgQUs0MTE0X1JFR19RU1VCX0FERFIJMHgxNgkvKiBRLXN1YmNvZGUgYWRkcmVzcyArIGNvbnRyb2wgKi8KKyNkZWZpbmUgQUs0MTE0X1JFR19RU1VCX1RSQUNLCTB4MTcJLyogUS1zdWJjb2RlIHRyYWNrICovCisjZGVmaW5lIEFLNDExNF9SRUdfUVNVQl9JTkRFWAkweDE4CS8qIFEtc3ViY29kZSBpbmRleCAqLworI2RlZmluZSBBSzQxMTRfUkVHX1FTVUJfTUlOVVRFCTB4MTkJLyogUS1zdWJjb2RlIG1pbnV0ZSAqLworI2RlZmluZSBBSzQxMTRfUkVHX1FTVUJfU0VDT05ECTB4MWEJLyogUS1zdWJjb2RlIHNlY29uZCAqLworI2RlZmluZSBBSzQxMTRfUkVHX1FTVUJfRlJBTUUJMHgxYgkvKiBRLXN1YmNvZGUgZnJhbWUgKi8KKyNkZWZpbmUgQUs0MTE0X1JFR19RU1VCX1pFUk8JMHgxYwkvKiBRLXN1YmNvZGUgemVybyAqLworI2RlZmluZSBBSzQxMTRfUkVHX1FTVUJfQUJTTUlOCTB4MWQJLyogUS1zdWJjb2RlIGFic29sdXRlIG1pbnV0ZSAqLworI2RlZmluZSBBSzQxMTRfUkVHX1FTVUJfQUJTU0VDCTB4MWUJLyogUS1zdWJjb2RlIGFic29sdXRlIHNlY29uZCAqLworI2RlZmluZSBBSzQxMTRfUkVHX1FTVUJfQUJTRlJNCTB4MWYJLyogUS1zdWJjb2RlIGFic29sdXRlIGZyYW1lICovCisKKy8qIHNpemVzICovCisjZGVmaW5lIEFLNDExNF9SRUdfUlhDU0JfU0laRQkoKEFLNDExNF9SRUdfUlhDU0I0LUFLNDExNF9SRUdfUlhDU0IwKSsxKQorI2RlZmluZSBBSzQxMTRfUkVHX1RYQ1NCX1NJWkUJKChBSzQxMTRfUkVHX1RYQ1NCNC1BSzQxMTRfUkVHX1RYQ1NCMCkrMSkKKyNkZWZpbmUgQUs0MTE0X1JFR19RU1VCX1NJWkUJKChBSzQxMTRfUkVHX1FTVUJfQUJTRlJNLUFLNDExNF9SRUdfUVNVQl9BRERSKSsxKQorCisvKiBBSzQxMTdfUkVHX1BXUkROIGJpdHMgKi8KKyNkZWZpbmUgQUs0MTE0X0NTMTIJCSgxPDw3KQkvKiBDaGFubmVsIFN0YXR1cyBTZWxlY3QgKi8KKyNkZWZpbmUgQUs0MTE0X0JDVQkJKDE8PDYpCS8qIEJsb2NrIFN0YXJ0ICYgQy9VIE91dHB1dCBNb2RlICovCisjZGVmaW5lIEFLNDExNF9DTTEJCSgxPDw1KQkvKiBNYXN0ZXIgQ2xvY2sgT3BlcmF0aW9uIFNlbGVjdCAqLworI2RlZmluZSBBSzQxMTRfQ00wCQkoMTw8NCkJLyogTWFzdGVyIENsb2NrIE9wZXJhdGlvbiBTZWxlY3QgKi8KKyNkZWZpbmUgQUs0MTE0X09DS1MxCQkoMTw8MykJLyogTWFzdGVyIENsb2NrIEZyZXF1ZW5jeSBTZWxlY3QgKi8KKyNkZWZpbmUgQUs0MTE0X09DS1MwCQkoMTw8MikJLyogTWFzdGVyIENsb2NrIEZyZXF1ZW5jeSBTZWxlY3QgKi8KKyNkZWZpbmUgQUs0MTE0X1BXTgkJKDE8PDEpCS8qIDAgPSBwb3dlciBkb3duLCAxID0gbm9ybWFsIG9wZXJhdGlvbiAqLworI2RlZmluZSBBSzQxMTRfUlNUCQkoMTw8MCkJLyogMCA9IHJlc2V0ICYgaW5pdGlhbGl6ZSAoZXhjZXB0IHRoaXMgcmVnaXN0ZXIpLCAxID0gbm9ybWFsIG9wZXJhdGlvbiAqLworCisvKiBBSzQxMTRfUkVRX0ZPUk1BVCBiaXRzICovCisjZGVmaW5lIEFLNDExNF9NT05PCQkoMTw8NykJLyogRG91YmxlIFNhbXBsaW5nIEZyZXF1ZW5jeSBNb2RlOiAwID0gc3RlcmVvLCAxID0gbW9ubyAqLworI2RlZmluZSBBSzQxMTRfRElGMgkJKDE8PDUpCS8qIEF1ZGlvIERhdGEgQ29udHJvbCAqLworI2RlZmluZSBBSzQxMTRfRElGMQkJKDE8PDUpCS8qIEF1ZGlvIERhdGEgQ29udHJvbCAqLworI2RlZmluZSBBSzQxMTRfRElGMAkJKDE8PDQpCS8qIEF1ZGlvIERhdGEgQ29udHJvbCAqLworI2RlZmluZSBBSzQxMTRfRElGXzE2UgkJKDApCQkJCS8qIFNURE86IDE2LWJpdCwgcmlnaHQganVzdGlmaWVkICovCisjZGVmaW5lIEFLNDExNF9ESUZfMThSCQkoQUs0MTE0X0RJRjApCQkJLyogU1RETzogMTgtYml0LCByaWdodCBqdXN0aWZpZWQgKi8KKyNkZWZpbmUgQUs0MTE0X0RJRl8yMFIJCShBSzQxMTRfRElGMSkJCQkvKiBTVERPOiAyMC1iaXQsIHJpZ2h0IGp1c3RpZmllZCAqLworI2RlZmluZSBBSzQxMTRfRElGXzI0UgkJKEFLNDExNF9ESUYxfEFLNDExNF9ESUYwKQkvKiBTVERPOiAyNC1iaXQsIHJpZ2h0IGp1c3RpZmllZCAqLworI2RlZmluZSBBSzQxMTRfRElGXzI0TAkJKEFLNDExNF9ESUYyKQkJCS8qIFNURE86IDI0LWJpdCwgbGVmdCBqdXN0aWZpZWQgKi8KKyNkZWZpbmUgQUs0MTE0X0RJRl8yNEkyUwkoQUs0MTE0X0RJRjJ8QUs0MTE0X0RJRjApCS8qIFNURE86IEkyUyAqLworI2RlZmluZSBBSzQxMTRfRElGX0kyNEwJCShBSzQxMTRfRElGMnxBSzQxMTRfRElGMSkJLyogU1RETzogMjQtYml0LCBsZWZ0IGp1c3RpZmllZDsgTFJDTEssIEJJQ0sgPSBJbnB1dCAqLworI2RlZmluZSBBSzQxMTRfRElGX0kyNEkyUwkoQUs0MTE0X0RJRjJ8QUs0MTE0X0RJRjF8QUs0MTE0X0RJRjApIC8qIFNURE86IEkyUzsgIExSQ0xLLCBCSUNLID0gSW5wdXQgKi8KKyNkZWZpbmUgQUs0MTE0X0RFQVUJCSgxPDwzKQkvKiBEZWVtcGhhc2lzIEF1dG9kZXRlY3QgRW5hYmxlICgxID0gZW5hYmxlKSAqLworI2RlZmluZSBBSzQxMTRfREVNMQkJKDE8PDIpCS8qIDMya0h6LTQ4a0h6IERlZW1waGFzaXMgQ29udHJvbCAqLworI2RlZmluZSBBSzQxMTRfREVNMAkJKDE8PDEpCS8qIDMya0h6LTQ4a0h6IERlZW1waGFzaXMgQ29udHJvbCAqLworI2RlZmluZSBBSzQxMTRfREVNXzQ0S0haCSgwKQorI2RlZmluZSBBSzQxMTRfREVNXzQ4S0haCShBSzQxMTRfREVNMSkKKyNkZWZpbmUgQUs0MTE0X0RFTV8zMktIWgkoQUs0MTE0X0RFTTB8QUs0MTE0X0RFTTEpCisjZGVmaW5lIEFLNDExNF9ERU1fOTZLSFoJKEFLNDExNF9ERU0xKQkvKiBERlMgbXVzdCBiZSBzZXQgKi8KKyNkZWZpbmUgQUs0MTE0X0RGUwkJKDE8PDApCS8qIDk2a0h6IERlZW1waGFzaXMgQ29udHJvbCAqLworCisvKiBBSzQxMTRfUkVHX0lPMCAqLworI2RlZmluZSBBSzQxMTRfVFgxRQkJKDE8PDcpCS8qIFRYMSBPdXRwdXQgRW5hYmxlICgxID0gZW5hYmxlKSAqLworI2RlZmluZSBBSzQxMTRfT1BTMTIJCSgxPDwyKQkvKiBPdXRwdXQgVGhvdWdoIERhdGEgU2VsZWN0b3IgZm9yIFRYMSBwaW4gKi8KKyNkZWZpbmUgQUs0MTE0X09QUzExCQkoMTw8MSkJLyogT3V0cHV0IFRob3VnaCBEYXRhIFNlbGVjdG9yIGZvciBUWDEgcGluICovCisjZGVmaW5lIEFLNDExNF9PUFMxMAkJKDE8PDApCS8qIE91dHB1dCBUaG91Z2ggRGF0YSBTZWxlY3RvciBmb3IgVFgxIHBpbiAqLworI2RlZmluZSBBSzQxMTRfVFgwRQkJKDE8PDMpCS8qIFRYMCBPdXRwdXQgRW5hYmxlICgxID0gZW5hYmxlKSAqLworI2RlZmluZSBBSzQxMTRfT1BTMDIJCSgxPDwyKQkvKiBPdXRwdXQgVGhvdWdoIERhdGEgU2VsZWN0b3IgZm9yIFRYMCBwaW4gKi8KKyNkZWZpbmUgQUs0MTE0X09QUzAxCQkoMTw8MSkJLyogT3V0cHV0IFRob3VnaCBEYXRhIFNlbGVjdG9yIGZvciBUWDAgcGluICovCisjZGVmaW5lIEFLNDExNF9PUFMwMAkJKDE8PDApCS8qIE91dHB1dCBUaG91Z2ggRGF0YSBTZWxlY3RvciBmb3IgVFgwIHBpbiAqLworCisvKiBBSzQxMTRfUkVHX0lPMSAqLworI2RlZmluZSBBSzQxMTRfRUZIMQkJKDE8PDcpCS8qIEludGVycnVwdCAwIHBpbiBIb2xkICovCisjZGVmaW5lIEFLNDExNF9FRkgwCQkoMTw8NikJLyogSW50ZXJydXB0IDAgcGluIEhvbGQgKi8KKyNkZWZpbmUgQUs0MTE0X0VGSF81MTIJCSgwKQorI2RlZmluZSBBSzQxMTRfRUZIXzEwMjQJCShBSzQxMTRfRUZIMCkKKyNkZWZpbmUgQUs0MTE0X0VGSF8yMDQ4CQkoQUs0MTE0X0VGSDEpCisjZGVmaW5lIEFLNDExNF9FRkhfNDA5NgkJKEFLNDExNF9FRkgxfEFLNDExNF9FRkgwKQorI2RlZmluZSBBSzQxMTRfVURJVAkJKDE8PDUpCS8qIFUtYml0IENvbnRyb2wgZm9yIERJVCAoMCA9IGZpeGVkICcwJywgMSA9IHJlY292ZXJlZCkgKi8KKyNkZWZpbmUgQUs0MTE0X1RMUgkJKDE8PDQpCS8qIERvdWJsZSBTYW1wbGluZyBGcmVxdWVuY3kgU2VsZWN0IGZvciBESVQgKDAgPSBMIGNoYW5uZWwsIDEgPSBSIGNoYW5uZWwpICovCisjZGVmaW5lIEFLNDExNF9ESVQJCSgxPDwzKQkvKiBUWDEgb3V0OiAwID0gVGhyb3VnaCBEYXRhIChSWCBkYXRhKSwgMSA9IFRyYW5zbWl0IERhdGEgKERBVVggZGF0YSkgKi8KKyNkZWZpbmUgQUs0MTE0X0lQUzIJCSgxPDwyKQkvKiBJbnB1dCBSZWNvdmVyeSBEYXRhIFNlbGVjdCAqLworI2RlZmluZSBBSzQxMTRfSVBTMQkJKDE8PDEpCS8qIElucHV0IFJlY292ZXJ5IERhdGEgU2VsZWN0ICovCisjZGVmaW5lIEFLNDExNF9JUFMwCQkoMTw8MCkJLyogSW5wdXQgUmVjb3ZlcnkgRGF0YSBTZWxlY3QgKi8KKyNkZWZpbmUgQUs0MTE0X0lQUyh4KQkJKCh4KSY3KQorCisvKiBBSzQxMTRfUkVHX0lOVDBfTUFTSyAmJiBBSzQxMTRfUkVHX0lOVDFfTUFTSyovCisjZGVmaW5lIEFLNDExN19NUUkgICAgICAgICAgICAgICgxPDw3KSAgLyogbWFzayBlbmFibGUgZm9yIFFJTlQgYml0ICovCisjZGVmaW5lIEFLNDExN19NQVQgICAgICAgICAgICAgICgxPDw2KSAgLyogbWFzayBlbmFibGUgZm9yIEFVVE8gYml0ICovCisjZGVmaW5lIEFLNDExN19NQ0kgICAgICAgICAgICAgICgxPDw1KSAgLyogbWFzayBlbmFibGUgZm9yIENJTlQgYml0ICovCisjZGVmaW5lIEFLNDExN19NVUwgICAgICAgICAgICAgICgxPDw0KSAgLyogbWFzayBlbmFibGUgZm9yIFVOTE9DSyBiaXQgKi8KKyNkZWZpbmUgQUs0MTE3X01EVFMgICAgICAgICAgICAgKDE8PDMpICAvKiBtYXNrIGVuYWJsZSBmb3IgRFRTQ0QgYml0ICovCisjZGVmaW5lIEFLNDExN19NUEUgICAgICAgICAgICAgICgxPDwyKSAgLyogbWFzayBlbmFibGUgZm9yIFBFTSBiaXQgKi8KKyNkZWZpbmUgQUs0MTE3X01BTiAgICAgICAgICAgICAgKDE8PDEpICAvKiBtYXNrIGVuYWJsZSBmb3IgQVVETiBiaXQgKi8KKyNkZWZpbmUgQUs0MTE3X01QUiAgICAgICAgICAgICAgKDE8PDApICAvKiBtYXNrIGVuYWJsZSBmb3IgUEFSIGJpdCAqLworCisvKiBBSzQxMTRfUkVHX1JDUzAgKi8KKyNkZWZpbmUgQUs0MTE0X1FJTlQJCSgxPDw3KQkvKiBRLXN1YmNvZGUgYnVmZmVyIGludGVycnVwdCwgMCA9IG5vIGNoYW5nZSwgMSA9IGNoYW5nZWQgKi8KKyNkZWZpbmUgQUs0MTE0X0FVVE8JCSgxPDw2KQkvKiBOb24tUENNIG9yIERUUyBzdHJlYW0gYXV0byBkZXRlY3Rpb24sIDAgPSBubyBkZXRlY3QsIDEgPSBkZXRlY3QgKi8KKyNkZWZpbmUgQUs0MTE0X0NJTlQJCSgxPDw1KQkvKiBjaGFubmVsIHN0YXR1cyBidWZmZXIgaW50ZXJydXB0LCAwID0gbm8gY2hhbmdlLCAxID0gY2hhbmdlICovCisjZGVmaW5lIEFLNDExNF9VTkxDSwkJKDE8PDQpCS8qIFBMTCBsb2NrIHN0YXR1cywgMCA9IGxvY2ssIDEgPSB1bmxvY2sgKi8KKyNkZWZpbmUgQUs0MTE0X0RUU0NECQkoMTw8MykJLyogRFRTLUNEIERldGVjdCwgMCA9IE5vIGRldGVjdCwgMSA9IERldGVjdCAqLworI2RlZmluZSBBSzQxMTRfUEVNCQkoMTw8MikJLyogUHJlLWVtcGhhc2lzIERldGVjdCwgMCA9IE9GRiwgMSA9IE9OICovCisjZGVmaW5lIEFLNDExNF9BVURJT04JCSgxPDwxKQkvKiBhdWRpbyBiaXQgb3V0cHV0LCAwID0gYXVkaW8sIDEgPSBub24tYXVkaW8gKi8KKyNkZWZpbmUgQUs0MTE0X1BBUgkJKDE8PDApCS8qIHBhcml0eSBlcnJvciBvciBiaXBoYXNlIGVycm9yIHN0YXR1cywgMCA9IG5vIGVycm9yLCAxID0gZXJyb3IgKi8KKworLyogQUs0MTE0X1JFR19SQ1MxICovCisjZGVmaW5lIEFLNDExNF9GUzMJCSgxPDw3KQkvKiBzYW1wbGluZyBmcmVxdWVuY3kgZGV0ZWN0aW9uICovCisjZGVmaW5lIEFLNDExNF9GUzIJCSgxPDw2KQorI2RlZmluZSBBSzQxMTRfRlMxCQkoMTw8NSkKKyNkZWZpbmUgQUs0MTE0X0ZTMAkJKDE8PDQpCisjZGVmaW5lIEFLNDExNF9GU180NDEwMEhaCSgwKQorI2RlZmluZSBBSzQxMTRfRlNfNDgwMDBIWgkoQUs0MTE0X0ZTMSkKKyNkZWZpbmUgQUs0MTE0X0ZTXzMyMDAwSFoJKEFLNDExNF9GUzF8QUs0MTE0X0ZTMCkKKyNkZWZpbmUgQUs0MTE0X0ZTXzg4MjAwSFoJKEFLNDExNF9GUzMpCisjZGVmaW5lIEFLNDExNF9GU185NjAwMEhaCShBSzQxMTRfRlMzfEFLNDExNF9GUzEpCisjZGVmaW5lIEFLNDExNF9GU18xNzY0MDBIWgkoQUs0MTE0X0ZTM3xBSzQxMTRfRlMyKQorI2RlZmluZSBBSzQxMTRfRlNfMTkyMDAwSFoJKEFLNDExNF9GUzN8QUs0MTE0X0ZTMnxBSzQxMTRfRlMxKQorI2RlZmluZSBBSzQxMTRfVgkJKDE8PDMpCS8qIFZhbGlkaXR5IG9mIENoYW5uZWwgU3RhdHVzLCAwID0gVmFsaWQsIDEgPSBJbnZhbGlkICovCisjZGVmaW5lIEFLNDExNF9RQ1JDCQkoMTw8MSkJLyogQ1JDIGZvciBRLXN1YmNvZGUsIDAgPSBubyBlcnJvciwgMSA9IGVycm9yICovCisjZGVmaW5lIEFLNDExNF9DQ1JDCQkoMTw8MCkJLyogQ1JDIGZvciBjaGFubmVsIHN0YXR1cywgMCA9IG5vIGVycm9yLCAxID0gZXJyb3IgKi8KKworLyogZmxhZ3MgZm9yIHNuZF9hazQxMTRfY2hlY2tfcmF0ZV9hbmRfZXJyb3JzKCkgKi8KKyNkZWZpbmUgQUs0MTE0X0NIRUNLX05PX1NUQVQJKDE8PDApCS8qIG5vIHN0YXRpc3RpY3MgKi8KKyNkZWZpbmUgQUs0MTE0X0NIRUNLX05PX1JBVEUJKDE8PDEpCS8qIG5vIHJhdGUgY2hlY2sgKi8KKworI2RlZmluZSBBSzQxMTRfQ09OVFJPTFMJCTE0CisKK3R5cGVkZWYgdm9pZCAoYWs0MTE0X3dyaXRlX3QpKHZvaWQgKnByaXZhdGVfZGF0YSwgdW5zaWduZWQgY2hhciBhZGRyLCB1bnNpZ25lZCBjaGFyIGRhdGEpOwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIChhazQxMTRfcmVhZF90KSh2b2lkICpwcml2YXRlX2RhdGEsIHVuc2lnbmVkIGNoYXIgYWRkcik7CisKK3R5cGVkZWYgc3RydWN0IGFrNDExNCBhazQxMTRfdDsKKworc3RydWN0IGFrNDExNCB7CisJc25kX2NhcmRfdCAqIGNhcmQ7CisJYWs0MTE0X3dyaXRlX3QgKiB3cml0ZTsKKwlhazQxMTRfcmVhZF90ICogcmVhZDsKKwl2b2lkICogcHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGludCBpbml0OiAxOworCXNwaW5sb2NrX3QgbG9jazsKKwl1bnNpZ25lZCBjaGFyIHJlZ21hcFs3XTsKKwl1bnNpZ25lZCBjaGFyIHR4Y3NiWzVdOworCXNuZF9rY29udHJvbF90ICprY3Rsc1tBSzQxMTRfQ09OVFJPTFNdOworCXNuZF9wY21fc3Vic3RyZWFtX3QgKnBsYXliYWNrX3N1YnN0cmVhbTsKKwlzbmRfcGNtX3N1YnN0cmVhbV90ICpjYXB0dXJlX3N1YnN0cmVhbTsKKwl1bnNpZ25lZCBsb25nIHBhcml0eV9lcnJvcnM7CisJdW5zaWduZWQgbG9uZyB2X2JpdF9lcnJvcnM7CisJdW5zaWduZWQgbG9uZyBxY3JjX2Vycm9yczsKKwl1bnNpZ25lZCBsb25nIGNjcmNfZXJyb3JzOworCXVuc2lnbmVkIGNoYXIgcmNzMDsKKwl1bnNpZ25lZCBjaGFyIHJjczE7CisJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndvcmtxdWV1ZTsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKKwl2b2lkICpjaGFuZ2VfY2FsbGJhY2tfcHJpdmF0ZTsKKwl2b2lkICgqY2hhbmdlX2NhbGxiYWNrKShhazQxMTRfdCAqYWs0MTE0LCB1bnNpZ25lZCBjaGFyIGMwLCB1bnNpZ25lZCBjaGFyIGMxKTsKK307CisKK2ludCBzbmRfYWs0MTE0X2NyZWF0ZShzbmRfY2FyZF90ICpjYXJkLAorCQkgICAgICBhazQxMTRfcmVhZF90ICpyZWFkLCBhazQxMTRfd3JpdGVfdCAqd3JpdGUsCisJCSAgICAgIHVuc2lnbmVkIGNoYXIgcGdtWzddLCB1bnNpZ25lZCBjaGFyIHR4Y3NiWzVdLAorCQkgICAgICB2b2lkICpwcml2YXRlX2RhdGEsIGFrNDExNF90ICoqcl9hazQxMTQpOwordm9pZCBzbmRfYWs0MTE0X3JlZ193cml0ZShhazQxMTRfdCAqYWs0MTE0LCB1bnNpZ25lZCBjaGFyIHJlZywgdW5zaWduZWQgY2hhciBtYXNrLCB1bnNpZ25lZCBjaGFyIHZhbCk7Cit2b2lkIHNuZF9hazQxMTRfcmVpbml0KGFrNDExNF90ICphazQxMTQpOworaW50IHNuZF9hazQxMTRfYnVpbGQoYWs0MTE0X3QgKmFrNDExNCwKKwkJICAgICBzbmRfcGNtX3N1YnN0cmVhbV90ICpwbGF5YmFja19zdWJzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICBzbmRfcGNtX3N1YnN0cmVhbV90ICpjYXB0dXJlX3N1YnN0cmVhbSk7CitpbnQgc25kX2FrNDExNF9leHRlcm5hbF9yYXRlKGFrNDExNF90ICphazQxMTQpOworaW50IHNuZF9hazQxMTRfY2hlY2tfcmF0ZV9hbmRfZXJyb3JzKGFrNDExNF90ICphazQxMTQsIHVuc2lnbmVkIGludCBmbGFncyk7CisKKyNlbmRpZiAvKiBfX1NPVU5EX0FLNDExNF9IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvYWs0MTE3LmggYi9pbmNsdWRlL3NvdW5kL2FrNDExNy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllMWRhYjEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3NvdW5kL2FrNDExNy5oCkBAIC0wLDAgKzEsMTkxIEBACisjaWZuZGVmIF9fU09VTkRfQUs0MTE3X0gKKyNkZWZpbmUgX19TT1VORF9BSzQxMTdfSAorCisvKgorICogIFJvdXRpbmVzIGZvciBBc2FoaSBLYXNlaSBBSzQxMTcKKyAqICBDb3B5cmlnaHQgKGMpIGJ5IEphcm9zbGF2IEt5c2VsYSA8cGVyZXhAc3VzZS5jej4sCisgKgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqCisgKi8KKworI2RlZmluZSBBSzQxMTdfUkVHX1BXUkROCTB4MDAJLyogcG93ZXIgZG93biAqLworI2RlZmluZSBBSzQxMTdfUkVHX0NMT0NLCTB4MDEJLyogY2xvY2sgY29udHJvbCAqLworI2RlZmluZSBBSzQxMTdfUkVHX0lPCQkweDAyCS8qIGlucHV0L291dHB1dCBjb250cm9sICovCisjZGVmaW5lIEFLNDExN19SRUdfSU5UMF9NQVNLCTB4MDMJLyogaW50ZXJydXB0MCBtYXNrICovCisjZGVmaW5lIEFLNDExN19SRUdfSU5UMV9NQVNLCTB4MDQJLyogaW50ZXJydXB0MSBtYXNrICovCisjZGVmaW5lIEFLNDExN19SRUdfUkNTMAkJMHgwNQkvKiByZWNlaXZlciBzdGF0dXMgMCAqLworI2RlZmluZSBBSzQxMTdfUkVHX1JDUzEJCTB4MDYJLyogcmVjZWl2ZXIgc3RhdHVzIDEgKi8KKyNkZWZpbmUgQUs0MTE3X1JFR19SQ1MyCQkweDA3CS8qIHJlY2VpdmVyIHN0YXR1cyAyICovCisjZGVmaW5lIEFLNDExN19SRUdfUlhDU0IwCTB4MDgJLyogUlggY2hhbm5lbCBzdGF0dXMgYnl0ZSAwICovCisjZGVmaW5lIEFLNDExN19SRUdfUlhDU0IxCTB4MDkJLyogUlggY2hhbm5lbCBzdGF0dXMgYnl0ZSAxICovCisjZGVmaW5lIEFLNDExN19SRUdfUlhDU0IyCTB4MGEJLyogUlggY2hhbm5lbCBzdGF0dXMgYnl0ZSAyICovCisjZGVmaW5lIEFLNDExN19SRUdfUlhDU0IzCTB4MGIJLyogUlggY2hhbm5lbCBzdGF0dXMgYnl0ZSAzICovCisjZGVmaW5lIEFLNDExN19SRUdfUlhDU0I0CTB4MGMJLyogUlggY2hhbm5lbCBzdGF0dXMgYnl0ZSA0ICovCisjZGVmaW5lIEFLNDExN19SRUdfUGMwCQkweDBkCS8qIGJ1cnN0IHByZWFtYmxlIFBjIGJ5dGUgMCAqLworI2RlZmluZSBBSzQxMTdfUkVHX1BjMQkJMHgwZQkvKiBidXJzdCBwcmVhbWJsZSBQYyBieXRlIDEgKi8KKyNkZWZpbmUgQUs0MTE3X1JFR19QZDAJCTB4MGYJLyogYnVyc3QgcHJlYW1ibGUgUGQgYnl0ZSAwICovCisjZGVmaW5lIEFLNDExN19SRUdfUGQxCQkweDEwCS8qIGJ1cnN0IHByZWFtYmxlIFBkIGJ5dGUgMSAqLworI2RlZmluZSBBSzQxMTdfUkVHX1FTVUJfQUREUgkweDExCS8qIFEtc3ViY29kZSBhZGRyZXNzICsgY29udHJvbCAqLworI2RlZmluZSBBSzQxMTdfUkVHX1FTVUJfVFJBQ0sJMHgxMgkvKiBRLXN1YmNvZGUgdHJhY2sgKi8KKyNkZWZpbmUgQUs0MTE3X1JFR19RU1VCX0lOREVYCTB4MTMJLyogUS1zdWJjb2RlIGluZGV4ICovCisjZGVmaW5lIEFLNDExN19SRUdfUVNVQl9NSU5VVEUJMHgxNAkvKiBRLXN1YmNvZGUgbWludXRlICovCisjZGVmaW5lIEFLNDExN19SRUdfUVNVQl9TRUNPTkQJMHgxNQkvKiBRLXN1YmNvZGUgc2Vjb25kICovCisjZGVmaW5lIEFLNDExN19SRUdfUVNVQl9GUkFNRQkweDE2CS8qIFEtc3ViY29kZSBmcmFtZSAqLworI2RlZmluZSBBSzQxMTdfUkVHX1FTVUJfWkVSTwkweDE3CS8qIFEtc3ViY29kZSB6ZXJvICovCisjZGVmaW5lIEFLNDExN19SRUdfUVNVQl9BQlNNSU4JMHgxOAkvKiBRLXN1YmNvZGUgYWJzb2x1dGUgbWludXRlICovCisjZGVmaW5lIEFLNDExN19SRUdfUVNVQl9BQlNTRUMJMHgxOQkvKiBRLXN1YmNvZGUgYWJzb2x1dGUgc2Vjb25kICovCisjZGVmaW5lIEFLNDExN19SRUdfUVNVQl9BQlNGUk0JMHgxYQkvKiBRLXN1YmNvZGUgYWJzb2x1dGUgZnJhbWUgKi8KKworLyogc2l6ZXMgKi8KKyNkZWZpbmUgQUs0MTE3X1JFR19SWENTQl9TSVpFCSgoQUs0MTE3X1JFR19SWENTQjQtQUs0MTE3X1JFR19SWENTQjApKzEpCisjZGVmaW5lIEFLNDExN19SRUdfUVNVQl9TSVpFCSgoQUs0MTE3X1JFR19RU1VCX0FCU0ZSTS1BSzQxMTdfUkVHX1FTVUJfQUREUikrMSkKKworLyogQUs0MTE3X1JFR19QV1JETiBiaXRzICovCisjZGVmaW5lIEFLNDExN19FWENUCQkoMTw8NCkJLyogMCA9IFgndGFsIG1vZGUsIDEgPSBleHRlcm5hbCBjbG9jayBtb2RlICovCisjZGVmaW5lIEFLNDExN19YVEwxCQkoMTw8MykJLyogWFRMMT0wLFhUTDA9MCAtPiAxMS4yODk2TWh6OyBYVEwxPTAsWFRMMD0xIC0+IDEyLjI4OE1oeiAqLworI2RlZmluZSBBSzQxMTdfWFRMMAkJKDE8PDIpCS8qIFhUTDE9MSxYVEwwPTAgLT4gMjQuNTc2TWh6OyBYVEwxPTEsWFRMMD0xIC0+IHVzZSBjaGFubmVsIHN0YXR1cyAqLworI2RlZmluZSBBSzQxMTdfWFRMXzExXzI4OTZNCSgwKQorI2RlZmluZSBBSzQxMTdfWFRMXzEyXzI4OE0JQUs0MTE3X1hUTDAKKyNkZWZpbmUgQUs0MTE3X1hUTF8yNF81NzZNCUFLNDExN19YVEwxCisjZGVmaW5lIEFLNDExN19YVExfRVhUCQkoQUs0MTE3X1hUTDF8QUs0MTE3X1hUTDApCisjZGVmaW5lIEFLNDExN19QV04JCSgxPDwxKQkvKiAwID0gcG93ZXIgZG93biwgMSA9IG5vcm1hbCBvcGVyYXRpb24gKi8KKyNkZWZpbmUgQUs0MTE3X1JTVAkJKDE8PDApCS8qIDAgPSByZXNldCAmIGluaXRpYWxpemUgKGV4Y2VwdCB0aGlzIHJlZ2lzdGVyKSwgMSA9IG5vcm1hbCBvcGVyYXRpb24gKi8KKworLyogQUs0MTE3X1JFUV9DTE9DSyBiaXRzICovCisjZGVmaW5lIEFLNDExN19MUAkJKDE8PDcpCS8qIDAgPSBub3JtYWwgbW9kZSwgMSA9IGxvdyBwb3dlciBtb2RlIChGcyB1cCB0byA0OGtIeiBvbmx5KSAqLworI2RlZmluZSBBSzQxMTdfUEtDUzEJCSgxPDw2KQkvKiBtYXN0ZXIgY2xvY2sgZnJlcXVlbmN5IGF0IFBMTCBtb2RlICh3aGVuIExQID09IDApICovCisjZGVmaW5lIEFLNDExN19QS0NTMAkJKDE8PDUpCisjZGVmaW5lIEFLNDExN19QS0NTXzUxMmZzCSgwKQorI2RlZmluZSBBSzQxMTdfUEtDU18yNTZmcwlBSzQxMTdfUEtDUzAKKyNkZWZpbmUgQUs0MTE3X1BLQ1NfMTI4ZnMJQUs0MTE3X1BLQ1MxCisjZGVmaW5lIEFLNDExN19ESVYJCSgxPDw0KQkvKiAwID0gTUNLTyA9PSBGcywgMSA9IE1DS08gPT0gRnMgLyAyOyBYJ3RhbCBtb2RlIG9ubHkgKi8KKyNkZWZpbmUgQUs0MTE3X1hDS1MxCQkoMTw8MykJLyogbWFzdGVyIGNsb2NrIGZyZXF1ZW5jeSBhdCBYJ3RhbCBtb2RlICovCisjZGVmaW5lIEFLNDExN19YQ0tTMAkJKDE8PDIpCisjZGVmaW5lIEFLNDExN19YQ0tTXzEyOGZzCSgwKQorI2RlZmluZSBBSzQxMTdfWENLU18yNTZmcwlBSzQxMTdfWENLUzAKKyNkZWZpbmUgQUs0MTE3X1hDS1NfNTEyZnMJQUs0MTE3X1hDS1MxCisjZGVmaW5lIEFLNDExN19YQ0tTXzEwMjRmcwkoQUs0MTE3X1hDS1MxfEFLNDExN19YQ0tTMCkKKyNkZWZpbmUgQUs0MTE3X0NNMQkJKDE8PDEpCS8qIE1DS08gb3BlcmF0aW9uIG1vZGUgc2VsZWN0ICovCisjZGVmaW5lIEFLNDExN19DTTAJCSgxPDwwKQorI2RlZmluZSBBSzQxMTdfQ01fUExMCQkoMCkJCS8qIHVzZSBSWCBpbnB1dCBhcyBtYXN0ZXIgY2xvY2sgKi8KKyNkZWZpbmUgQUs0MTE3X0NNX1hUQUwJCShBSzQxMTdfQ00wKQkvKiB1c2UgWCd0YWwgYXMgbWFzdGVyIGNsb2NrICovCisjZGVmaW5lIEFLNDExN19DTV9QTExfWFRBTAkoQUs0MTE3X0NNMSkJLyogdXNlIFJ4IGlucHV0IGJ1dCBYJ3RhbCB3aGVuIFBMTCBsb3NlcyBsb2NrICovCisjZGVmaW5lIEFLNDExN19DTV9NT05JVE9SCShBSzQxMTdfQ00wfEFLNDExN19DTTEpIC8qIHVzZSBYJ3RhbCBhcyBtYXN0ZXIgY2xvY2ssIGJ1dCB1c2UgUExMIGZvciBtb25pdG9yaW5nICovCisKKy8qIEFLNDExN19SRUdfSU8gKi8KKyNkZWZpbmUgQUs0MTE3X0lQUwkJKDE8PDcpCS8qIElucHV0IFJlY292ZXJ5IERhdGEgU2VsZWN0LCAwID0gUlgwLCAxID0gUlgxICovCisjZGVmaW5lIEFLNDExN19VT1VURQkJKDE8PDYpCS8qIFUtYml0IG91dHB1dCBlbmFibGUgdG8gVU9VVCwgMCA9IGRpc2FibGUsIDEgPSBlbmFibGUgKi8KKyNkZWZpbmUgQUs0MTE3X0NTMTIJCSgxPDw1KQkvKiBjaGFubmVsIHN0YXR1cyBzZWxlY3QsIDAgPSBjaGFubmVsMSwgMSA9IGNoYW5uZWwyICovCisjZGVmaW5lIEFLNDExN19FRkgyCQkoMTw8NCkJLyogSU5UMCBwaW4gaG9sZCBjb3VudCBzZWxlY3QgKi8KKyNkZWZpbmUgQUs0MTE3X0VGSDEJCSgxPDwzKQorI2RlZmluZSBBSzQxMTdfRUZIXzUxMkxSQ0xLCSgwKQorI2RlZmluZSBBSzQxMTdfRUZIXzEwMjRMUkNMSwkoQUs0MTE3X0VGSDEpCisjZGVmaW5lIEFLNDExN19FRkhfMjA0OExSQ0xLCShBSzQxMTdfRUZIMikKKyNkZWZpbmUgQUs0MTE3X0VGSF80MDk2TFJDTEsJKEFLNDExN19FRkgxfEFLNDExN19FRkgyKQorI2RlZmluZSBBSzQxMTdfRElGMgkJKDE8PDIpCS8qIGF1ZGlvIGRhdGEgZm9ybWF0IGNvbnRyb2wgKi8KKyNkZWZpbmUgQUs0MTE3X0RJRjEJCSgxPDwxKQorI2RlZmluZSBBSzQxMTdfRElGMAkJKDE8PDApCisjZGVmaW5lIEFLNDExN19ESUZfMTZSCQkoMCkJCQkJLyogU1RETzogMTYtYml0LCByaWdodCBqdXN0aWZpZWQgKi8KKyNkZWZpbmUgQUs0MTE3X0RJRl8xOFIJCShBSzQxMTdfRElGMCkJCQkvKiBTVERPOiAxOC1iaXQsIHJpZ2h0IGp1c3RpZmllZCAqLworI2RlZmluZSBBSzQxMTdfRElGXzIwUgkJKEFLNDExN19ESUYxKQkJCS8qIFNURE86IDIwLWJpdCwgcmlnaHQganVzdGlmaWVkICovCisjZGVmaW5lIEFLNDExN19ESUZfMjRSCQkoQUs0MTE3X0RJRjF8QUs0MTE3X0RJRjApCS8qIFNURE86IDI0LWJpdCwgcmlnaHQganVzdGlmaWVkICovCisjZGVmaW5lIEFLNDExN19ESUZfMjRMCQkoQUs0MTE3X0RJRjIpCQkJLyogU1RETzogMjQtYml0LCBsZWZ0IGp1c3RpZmllZCAqLworI2RlZmluZSBBSzQxMTdfRElGXzI0STJTCShBSzQxMTdfRElGMnxBSzQxMTdfRElGMCkJLyogU1RETzogSTJTICovCisKKy8qIEFLNDExN19SRUdfSU5UMF9NQVNLICYgQUs0MTE3X1JFR19JTlQxX01BU0sgKi8KKyNkZWZpbmUgQUs0MTE3X01VTEsJCSgxPDw3KQkvKiBtYXNrIGVuYWJsZSBmb3IgVU5MT0NLIGJpdCAqLworI2RlZmluZSBBSzQxMTdfTVBBUgkJKDE8PDYpCS8qIG1hc2sgZW5hYmxlIGZvciBQQVIgYml0ICovCisjZGVmaW5lIEFLNDExN19NQVVUTwkJKDE8PDUpCS8qIG1hc2sgZW5hYmxlIGZvciBBVVRPIGJpdCAqLworI2RlZmluZSBBSzQxMTdfTVYJCSgxPDw0KQkvKiBtYXNrIGVuYWJsZSBmb3IgViBiaXQgKi8KKyNkZWZpbmUgQUs0MTE3X01BVUQJCSgxPDwzKQkvKiBtYXNrIGVuYWJsZSBmb3IgQVVESU9OIGJpdCAqLworI2RlZmluZSBBSzQxMTdfTVNUQwkJKDE8PDIpCS8qIG1hc2sgZW5hYmxlIGZvciBTVEMgYml0ICovCisjZGVmaW5lIEFLNDExN19NQ0lUCQkoMTw8MSkJLyogbWFzayBlbmFibGUgZm9yIENJTlQgYml0ICovCisjZGVmaW5lIEFLNDExN19NUUlUCQkoMTw8MCkJLyogbWFzayBlbmFibGUgZm9yIFFJTlQgYml0ICovCisKKy8qIEFLNDExN19SRUdfUkNTMCAqLworI2RlZmluZSBBSzQxMTdfVU5MQ0sJCSgxPDw3KQkvKiBQTEwgbG9jayBzdGF0dXMsIDAgPSBsb2NrLCAxID0gdW5sb2NrICovCisjZGVmaW5lIEFLNDExN19QQVIJCSgxPDw2KQkvKiBwYXJpdHkgZXJyb3Igb3IgYmlwaGFzZSBlcnJvciBzdGF0dXMsIDAgPSBubyBlcnJvciwgMSA9IGVycm9yICovCisjZGVmaW5lIEFLNDExN19BVVRPCQkoMTw8NSkJLyogTm9uLVBDTSBvciBEVFMgc3RyZWFtIGF1dG8gZGV0ZWN0aW9uLCAwID0gbm8gZGV0ZWN0LCAxID0gZGV0ZWN0ICovCisjZGVmaW5lIEFLNDExN19WCQkoMTw8NCkJLyogVmFsaWRpdHkgYml0LCAwID0gdmFsaWQsIDEgPSBpbnZhbGlkICovCisjZGVmaW5lIEFLNDExN19BVURJT04JCSgxPDwzKQkvKiBhdWRpbyBiaXQgb3V0cHV0LCAwID0gYXVkaW8sIDEgPSBub24tYXVkaW8gKi8KKyNkZWZpbmUgQUs0MTE3X1NUQwkJKDE8PDIpCS8qIHNhbXBsaW5nIGZyZXF1ZW5jeSBvciBQcmUtZW1waGFzaXMgY2hhbmdlLCAwID0gbm8gZGV0ZWN0LCAxID0gZGV0ZWN0ICovCisjZGVmaW5lIEFLNDExN19DSU5UCQkoMTw8MSkJLyogY2hhbm5lbCBzdGF0dXMgYnVmZmVyIGludGVycnVwdCwgMCA9IG5vIGNoYW5nZSwgMSA9IGNoYW5nZSAqLworI2RlZmluZSBBSzQxMTdfUUlOVAkJKDE8PDApCS8qIFEtc3ViY29kZSBidWZmZXIgaW50ZXJydXB0LCAwID0gbm8gY2hhbmdlLCAxID0gY2hhbmdlZCAqLworCisvKiBBSzQxMTdfUkVHX1JDUzEgKi8KKyNkZWZpbmUgQUs0MTE3X0RUU0NECQkoMTw8NikJLyogRFRTLUNEIGJpdCBhdWRpbyBzdHJlYW0gZGV0ZWN0LCAwID0gbm8gZGV0ZWN0LCAxID0gZGV0ZWN0ICovCisjZGVmaW5lIEFLNDExN19OUENNCQkoMTw8NSkJLyogTm9uLVBDTSBiaXQgc3RyZWFtIGRldGVjdGlvbiwgMCA9IG5vIGRldGVjdCwgMSA9IGRldGVjdCAqLworI2RlZmluZSBBSzQxMTdfUEVNCQkoMTw8NCkJLyogUHJlLWVtcGhhc2lzIGRldGVjdCwgMCA9IE9GRiwgMSA9IE9OICovCisjZGVmaW5lIEFLNDExN19GUzMJCSgxPDwzKQkvKiBzYW1wbGluZyBmcmVxdWVuY3kgZGV0ZWN0aW9uICovCisjZGVmaW5lIEFLNDExN19GUzIJCSgxPDwyKQorI2RlZmluZSBBSzQxMTdfRlMxCQkoMTw8MSkKKyNkZWZpbmUgQUs0MTE3X0ZTMAkJKDE8PDApCisjZGVmaW5lIEFLNDExN19GU180NDEwMEhaCSgwKQorI2RlZmluZSBBSzQxMTdfRlNfNDgwMDBIWgkoQUs0MTE3X0ZTMSkKKyNkZWZpbmUgQUs0MTE3X0ZTXzMyMDAwSFoJKEFLNDExN19GUzF8QUs0MTE3X0ZTMCkKKyNkZWZpbmUgQUs0MTE3X0ZTXzg4MjAwSFoJKEFLNDExN19GUzMpCisjZGVmaW5lIEFLNDExN19GU185NjAwMEhaCShBSzQxMTdfRlMzfEFLNDExN19GUzEpCisjZGVmaW5lIEFLNDExN19GU18xNzY0MDBIWgkoQUs0MTE3X0ZTM3xBSzQxMTdfRlMyKQorI2RlZmluZSBBSzQxMTdfRlNfMTkyMDAwSFoJKEFLNDExN19GUzN8QUs0MTE3X0ZTMnxBSzQxMTdfRlMxKQorCisvKiBBSzQxMTdfUkVHX1JDUzIgKi8KKyNkZWZpbmUgQUs0MTE3X0NDUkMJCSgxPDwxKQkvKiBDUkMgZm9yIGNoYW5uZWwgc3RhdHVzLCAwID0gbm8gZXJyb3IsIDEgPSBlcnJvciAqLworI2RlZmluZSBBSzQxMTdfUUNSQwkJKDE8PDApCS8qIENSQyBmb3IgUS1zdWJjb2RlLCAwID0gbm8gZXJyb3IsIDEgPSBlcnJvciAqLworCisvKiBmbGFncyBmb3Igc25kX2FrNDExN19jaGVja19yYXRlX2FuZF9lcnJvcnMoKSAqLworI2RlZmluZSBBSzQxMTdfQ0hFQ0tfTk9fU1RBVAkoMTw8MCkJLyogbm8gc3RhdGlzdGljcyAqLworI2RlZmluZSBBSzQxMTdfQ0hFQ0tfTk9fUkFURQkoMTw8MSkJLyogbm8gcmF0ZSBjaGVjayAqLworCisjZGVmaW5lIEFLNDExN19DT05UUk9MUwkJMTMKKwordHlwZWRlZiB2b2lkIChhazQxMTdfd3JpdGVfdCkodm9pZCAqcHJpdmF0ZV9kYXRhLCB1bnNpZ25lZCBjaGFyIGFkZHIsIHVuc2lnbmVkIGNoYXIgZGF0YSk7Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgKGFrNDExN19yZWFkX3QpKHZvaWQgKnByaXZhdGVfZGF0YSwgdW5zaWduZWQgY2hhciBhZGRyKTsKKwordHlwZWRlZiBzdHJ1Y3QgYWs0MTE3IGFrNDExN190OworCitzdHJ1Y3QgYWs0MTE3IHsKKwlzbmRfY2FyZF90ICogY2FyZDsKKwlhazQxMTdfd3JpdGVfdCAqIHdyaXRlOworCWFrNDExN19yZWFkX3QgKiByZWFkOworCXZvaWQgKiBwcml2YXRlX2RhdGE7CisJdW5zaWduZWQgaW50IGluaXQ6IDE7CisJc3BpbmxvY2tfdCBsb2NrOworCXVuc2lnbmVkIGNoYXIgcmVnbWFwWzVdOworCXNuZF9rY29udHJvbF90ICprY3Rsc1tBSzQxMTdfQ09OVFJPTFNdOworCXNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbTsKKwl1bnNpZ25lZCBsb25nIHBhcml0eV9lcnJvcnM7CisJdW5zaWduZWQgbG9uZyB2X2JpdF9lcnJvcnM7CisJdW5zaWduZWQgbG9uZyBxY3JjX2Vycm9yczsKKwl1bnNpZ25lZCBsb25nIGNjcmNfZXJyb3JzOworCXVuc2lnbmVkIGNoYXIgcmNzMDsKKwl1bnNpZ25lZCBjaGFyIHJjczE7CisJdW5zaWduZWQgY2hhciByY3MyOworCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOwkvKiBzdGF0aXN0aWMgdGltZXIgKi8KKwl2b2lkICpjaGFuZ2VfY2FsbGJhY2tfcHJpdmF0ZTsKKwl2b2lkICgqY2hhbmdlX2NhbGxiYWNrKShhazQxMTdfdCAqYWs0MTE3LCB1bnNpZ25lZCBjaGFyIGMwLCB1bnNpZ25lZCBjaGFyIGMxKTsKK307CisKK2ludCBzbmRfYWs0MTE3X2NyZWF0ZShzbmRfY2FyZF90ICpjYXJkLCBhazQxMTdfcmVhZF90ICpyZWFkLCBhazQxMTdfd3JpdGVfdCAqd3JpdGUsCisJCSAgICAgIHVuc2lnbmVkIGNoYXIgcGdtWzVdLCB2b2lkICpwcml2YXRlX2RhdGEsIGFrNDExN190ICoqcl9hazQxMTcpOwordm9pZCBzbmRfYWs0MTE3X3JlZ193cml0ZShhazQxMTdfdCAqYWs0MTE3LCB1bnNpZ25lZCBjaGFyIHJlZywgdW5zaWduZWQgY2hhciBtYXNrLCB1bnNpZ25lZCBjaGFyIHZhbCk7Cit2b2lkIHNuZF9hazQxMTdfcmVpbml0KGFrNDExN190ICphazQxMTcpOworaW50IHNuZF9hazQxMTdfYnVpbGQoYWs0MTE3X3QgKmFrNDExNywgc25kX3BjbV9zdWJzdHJlYW1fdCAqY2FwdHVyZV9zdWJzdHJlYW0pOworaW50IHNuZF9hazQxMTdfZXh0ZXJuYWxfcmF0ZShhazQxMTdfdCAqYWs0MTE3KTsKK2ludCBzbmRfYWs0MTE3X2NoZWNrX3JhdGVfYW5kX2Vycm9ycyhhazQxMTdfdCAqYWs0MTE3LCB1bnNpZ25lZCBpbnQgZmxhZ3MpOworCisjZW5kaWYgLyogX19TT1VORF9BSzQxMTdfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL2FrNDUzMV9jb2RlYy5oIGIvaW5jbHVkZS9zb3VuZC9hazQ1MzFfY29kZWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjE4OTkyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9zb3VuZC9hazQ1MzFfY29kZWMuaApAQCAtMCwwICsxLDgwIEBACisjaWZuZGVmIF9fU09VTkRfQUs0NTMxX0NPREVDX0gKKyNkZWZpbmUgX19TT1VORF9BSzQ1MzFfQ09ERUNfSAorCisvKgorICogIENvcHlyaWdodCAoYykgYnkgSmFyb3NsYXYgS3lzZWxhIDxwZXJleEBzdXNlLmN6PgorICogIFVuaXZlcnNhbCBpbnRlcmZhY2UgZm9yIEF1ZGlvIENvZGVjICc5NworICoKKyAqICBGb3IgbW9yZSBkZXRhaWxzIGxvb2sgdG8gQUMgJzk3IGNvbXBvbmVudCBzcGVjaWZpY2F0aW9uIHJldmlzaW9uIDIuMQorICogIGJ5IEludGVsIENvcnBvcmF0aW9uIChodHRwOi8vZGV2ZWxvcGVyLmludGVsLmNvbSkuCisgKgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgImluZm8uaCIKKyNpbmNsdWRlICJjb250cm9sLmgiCisKKy8qCisgKiAgQVNBSEkgS0FTRUkgLSBBSzQ1MzEgY29kZWMKKyAqICAtIG5vdCByZWFsbHkgQUMnOTcgY29kZWMsIGJ1dCBpdCB1c2VzIHZlcnkgc2ltaWxhciBpbnRlcmZhY2UgYXMgQUMnOTcKKyAqLworCisvKgorICogIEFLNDUzMSBjb2RlYyByZWdpc3RlcnMKKyAqLworCisjZGVmaW5lIEFLNDUzMV9MTUFTVEVSICAweDAwCS8qIG1hc3RlciB2b2x1bWUgbGVmdCAqLworI2RlZmluZSBBSzQ1MzFfUk1BU1RFUiAgMHgwMQkvKiBtYXN0ZXIgdm9sdW1lIHJpZ2h0ICovCisjZGVmaW5lIEFLNDUzMV9MVk9JQ0UgICAweDAyCS8qIGNoYW5uZWwgdm9sdW1lIGxlZnQgKi8KKyNkZWZpbmUgQUs0NTMxX1JWT0lDRSAgIDB4MDMJLyogY2hhbm5lbCB2b2x1bWUgcmlnaHQgKi8KKyNkZWZpbmUgQUs0NTMxX0xGTSAgICAgIDB4MDQJLyogRk0gdm9sdW1lIGxlZnQgKi8KKyNkZWZpbmUgQUs0NTMxX1JGTSAgICAgIDB4MDUJLyogRk0gdm9sdW1lIHJpZ2h0ICovCisjZGVmaW5lIEFLNDUzMV9MQ0QgICAgICAweDA2CS8qIENEIHZvbHVtZSBsZWZ0ICovCisjZGVmaW5lIEFLNDUzMV9SQ0QgICAgICAweDA3CS8qIENEIHZvbHVtZSByaWdodCAqLworI2RlZmluZSBBSzQ1MzFfTExJTkUgICAgMHgwOAkvKiBMSU5FIHZvbHVtZSBsZWZ0ICovCisjZGVmaW5lIEFLNDUzMV9STElORSAgICAweDA5CS8qIExJTkUgdm9sdW1lIHJpZ2h0ICovCisjZGVmaW5lIEFLNDUzMV9MQVVYQSAgICAweDBhCS8qIEFVWEEgdm9sdW1lIGxlZnQgKi8KKyNkZWZpbmUgQUs0NTMxX1JBVVhBICAgIDB4MGIJLyogQVVYQSB2b2x1bWUgcmlnaHQgKi8KKyNkZWZpbmUgQUs0NTMxX01PTk8xICAgIDB4MGMJLyogTU9OTzEgdm9sdW1lIGxlZnQgKi8KKyNkZWZpbmUgQUs0NTMxX01PTk8yICAgIDB4MGQJLyogTU9OTzEgdm9sdW1lIHJpZ2h0ICovCisjZGVmaW5lIEFLNDUzMV9NSUMgICAgICAweDBlCS8qIE1JQyB2b2x1bWUgKi8KKyNkZWZpbmUgQUs0NTMxX01PTk9fT1VUIDB4MGYJLyogTW9uby1vdXQgdm9sdW1lICovCisjZGVmaW5lIEFLNDUzMV9PVVRfU1cxICAweDEwCS8qIE91dHB1dCBtaXhlciBzd2l0Y2ggMSAqLworI2RlZmluZSBBSzQ1MzFfT1VUX1NXMiAgMHgxMQkvKiBPdXRwdXQgbWl4ZXIgc3dpdGNoIDIgKi8KKyNkZWZpbmUgQUs0NTMxX0xJTl9TVzEgIDB4MTIJLyogSW5wdXQgbGVmdCBtaXhlciBzd2l0Y2ggMSAqLworI2RlZmluZSBBSzQ1MzFfUklOX1NXMSAgMHgxMwkvKiBJbnB1dCByaWdodCBtaXhlciBzd2l0Y2ggMSAqLworI2RlZmluZSBBSzQ1MzFfTElOX1NXMiAgMHgxNAkvKiBJbnB1dCBsZWZ0IG1peGVyIHN3aXRjaCAyICovCisjZGVmaW5lIEFLNDUzMV9SSU5fU1cyICAweDE1CS8qIElucHV0IHJpZ2h0IG1peGVyIHN3aXRjaCAyICovCisjZGVmaW5lIEFLNDUzMV9SRVNFVCAgICAweDE2CS8qIFJlc2V0ICYgcG93ZXIgZG93biAqLworI2RlZmluZSBBSzQ1MzFfQ0xPQ0sgICAgMHgxNwkvKiBDbG9jayBzZWxlY3QgKi8KKyNkZWZpbmUgQUs0NTMxX0FEX0lOICAgIDB4MTgJLyogQUQgaW5wdXQgc2VsZWN0ICovCisjZGVmaW5lIEFLNDUzMV9NSUNfR0FJTiAweDE5CS8qIE1JQyBhbXBsaWZpZWQgZ2FpbiAqLworCit0eXBlZGVmIHN0cnVjdCBfc25kX2FrNDUzMSBhazQ1MzFfdDsKKworc3RydWN0IF9zbmRfYWs0NTMxIHsKKwl2b2lkICgqd3JpdGUpIChhazQ1MzFfdCAqYWs0NTMxLCB1bnNpZ25lZCBzaG9ydCByZWcsIHVuc2lnbmVkIHNob3J0IHZhbCk7CisJdm9pZCAqcHJpdmF0ZV9kYXRhOworCXZvaWQgKCpwcml2YXRlX2ZyZWUpIChhazQ1MzFfdCAqYWs0NTMxKTsKKwkvKiAtLS0gKi8KKwl1bnNpZ25lZCBjaGFyIHJlZ3NbMHgyMF07CisJc3RydWN0IHNlbWFwaG9yZSByZWdfbXV0ZXg7Cit9OworCitpbnQgc25kX2FrNDUzMV9taXhlcihzbmRfY2FyZF90ICogY2FyZCwgYWs0NTMxX3QgKiBfYWs0NTMxLCBhazQ1MzFfdCAqKiByYWs0NTMxKTsKKworI2VuZGlmIC8qIF9fU09VTkRfQUs0NTMxX0NPREVDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvYWs0eHh4LWFkZGEuaCBiL2luY2x1ZGUvc291bmQvYWs0eHh4LWFkZGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTRhYzAyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9zb3VuZC9hazR4eHgtYWRkYS5oCkBAIC0wLDAgKzEsNjkgQEAKKyNpZm5kZWYgX19TT1VORF9BSzRYWFhfQUREQV9ICisjZGVmaW5lIF9fU09VTkRfQUs0WFhYX0FEREFfSAorCisvKgorICogICBBTFNBIGRyaXZlciBmb3IgQUs0NTI0IC8gQUs0NTI4IC8gQUs0NTI5IC8gQUs0MzU1IC8gQUs0MzgxCisgKiAgIEFEIGFuZCBEQSBjb252ZXJ0ZXJzCisgKgorICoJQ29weXJpZ2h0IChjKSAyMDAwIEphcm9zbGF2IEt5c2VsYSA8cGVyZXhAc3VzZS5jej4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKgorICovICAgICAgCisKKyNpZm5kZWYgQUs0WFhYX01BWF9DSElQUworI2RlZmluZSBBSzRYWFhfTUFYX0NISVBTCTQKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCBzbmRfYWttNHh4eCBha200eHh4X3Q7CisKK3N0cnVjdCBzbmRfYWs0eHh4X29wcyB7CisJdm9pZCAoKmxvY2spKGFrbTR4eHhfdCAqYWssIGludCBjaGlwKTsKKwl2b2lkICgqdW5sb2NrKShha200eHh4X3QgKmFrLCBpbnQgY2hpcCk7CisJdm9pZCAoKndyaXRlKShha200eHh4X3QgKmFrLCBpbnQgY2hpcCwgdW5zaWduZWQgY2hhciByZWcsIHVuc2lnbmVkIGNoYXIgdmFsKTsKKwkvLyB1bnNpZ25lZCBjaGFyICgqcmVhZCkoYWttNHh4eF90ICphaywgaW50IGNoaXAsIHVuc2lnbmVkIGNoYXIgcmVnKTsKKwl2b2lkICgqc2V0X3JhdGVfdmFsKShha200eHh4X3QgKmFrLCB1bnNpZ25lZCBpbnQgcmF0ZSk7Cit9OworCisjZGVmaW5lIEFLNFhYWF9JTUFHRV9TSVpFCShBSzRYWFhfTUFYX0NISVBTICogMTYpCS8qIDY0IGJ5dGVzICovCisKK3N0cnVjdCBzbmRfYWttNHh4eCB7CisJc25kX2NhcmRfdCAqY2FyZDsKKwl1bnNpZ25lZCBpbnQgbnVtX2FkY3M7CQkJCS8qIEFLNDUyNCBvciBBSzQ1MjggQURDcyAqLworCXVuc2lnbmVkIGludCBudW1fZGFjczsJCQkJLyogQUs0NTI0IG9yIEFLNDUyOCBEQUNzICovCisJdW5zaWduZWQgY2hhciBpbWFnZXNbQUs0WFhYX0lNQUdFX1NJWkVdOwkvKiBzYXZlZCByZWdpc3RlciBpbWFnZSAqLworCXVuc2lnbmVkIGNoYXIgaXBnYV9nYWluW0FLNFhYWF9NQVhfQ0hJUFNdWzJdOwkvKiBzYXZlZCByZWdpc3RlciBpbWFnZSBmb3IgSVBHQSAoQUs0NTI4KSAqLworCXVuc2lnbmVkIGxvbmcgcHJpdmF0ZV92YWx1ZVtBSzRYWFhfTUFYX0NISVBTXTsJLyogaGVscGVyIGZvciBkcml2ZXIgKi8KKwl2b2lkICpwcml2YXRlX2RhdGFbQUs0WFhYX01BWF9DSElQU107CQkvKiBoZWxwZXIgZm9yIGRyaXZlciAqLworCS8qIHRlbXBsYXRlIHNob3VsZCBmaWxsIHRoZSBmb2xsb3dpbmcgZmllbGRzICovCisJdW5zaWduZWQgaW50IGlkeF9vZmZzZXQ7CQkJLyogY29udHJvbCBpbmRleCBvZmZzZXQgKi8KKwllbnVtIHsKKwkJU05EX0FLNDUyNCwgU05EX0FLNDUyOCwgU05EX0FLNDUyOSwKKwkJU05EX0FLNDM1NSwgU05EX0FLNDM1OCwgU05EX0FLNDM4MQorCX0gdHlwZTsKKwlzdHJ1Y3Qgc25kX2FrNHh4eF9vcHMgb3BzOworfTsKKwordm9pZCBzbmRfYWttNHh4eF93cml0ZShha200eHh4X3QgKmFrLCBpbnQgY2hpcCwgdW5zaWduZWQgY2hhciByZWcsIHVuc2lnbmVkIGNoYXIgdmFsKTsKK3ZvaWQgc25kX2FrbTR4eHhfcmVzZXQoYWttNHh4eF90ICphaywgaW50IHN0YXRlKTsKK3ZvaWQgc25kX2FrbTR4eHhfaW5pdChha200eHh4X3QgKmFrKTsKK2ludCBzbmRfYWttNHh4eF9idWlsZF9jb250cm9scyhha200eHh4X3QgKmFrKTsKKworI2RlZmluZSBzbmRfYWttNHh4eF9nZXQoYWssY2hpcCxyZWcpIChhayktPmltYWdlc1soY2hpcCkgKiAxNiArIChyZWcpXQorI2RlZmluZSBzbmRfYWttNHh4eF9zZXQoYWssY2hpcCxyZWcsdmFsKSAoKGFrKS0+aW1hZ2VzWyhjaGlwKSAqIDE2ICsgKHJlZyldID0gKHZhbCkpCisjZGVmaW5lIHNuZF9ha200eHh4X2dldF9pcGdhKGFrLGNoaXAscmVnKSAoYWspLT5pcGdhX2dhaW5bY2hpcF1bKHJlZyktNF0KKyNkZWZpbmUgc25kX2FrbTR4eHhfc2V0X2lwZ2EoYWssY2hpcCxyZWcsdmFsKSAoKGFrKS0+aXBnYV9nYWluW2NoaXBdWyhyZWcpLTRdID0gKHZhbCkpCisKKyNlbmRpZiAvKiBfX1NPVU5EX0FLNFhYWF9BRERBX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvYXNlcXVlbmNlci5oIGIvaW5jbHVkZS9zb3VuZC9hc2VxdWVuY2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI4ZWZkNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvc291bmQvYXNlcXVlbmNlci5oCkBAIC0wLDAgKzEsOTA4IEBACisvKgorICogIE1haW4gaGVhZGVyIGZpbGUgZm9yIHRoZSBBTFNBIHNlcXVlbmNlcgorICogIENvcHlyaWdodCAoYykgMTk5OC0xOTk5IGJ5IEZyYW5rIHZhbiBkZSBQb2wgPGZ2ZHBvbEBjb2lsLmRlbW9uLm5sPgorICogICAgICAgICAgICAoYykgMTk5OC0xOTk5IGJ5IEphcm9zbGF2IEt5c2VsYSA8cGVyZXhAc3VzZS5jej4KKyAqCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICoKKyAqLworI2lmbmRlZiBfX1NPVU5EX0FTRVFVRU5DRVJfSAorI2RlZmluZSBfX1NPVU5EX0FTRVFVRU5DRVJfSAorCisjaWZuZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzb3VuZC9hc291bmQuaD4KKworLyoqIHZlcnNpb24gb2YgdGhlIHNlcXVlbmNlciAqLworI2RlZmluZSBTTkRSVl9TRVFfVkVSU0lPTiBTTkRSVl9QUk9UT0NPTF9WRVJTSU9OICgxLCAwLCAxKQorCisvKioKKyAqIGRlZmluaXRpb24gb2Ygc2VxdWVuY2VyIGV2ZW50IHR5cGVzCisgKi8KKworLyoqIHN5c3RlbSBtZXNzYWdlcworICogZXZlbnQgZGF0YSB0eXBlID0gI3NuZHJ2X3NlcV9yZXN1bHRfdAorICovCisjZGVmaW5lIFNORFJWX1NFUV9FVkVOVF9TWVNURU0JCTAKKyNkZWZpbmUgU05EUlZfU0VRX0VWRU5UX1JFU1VMVAkJMQorCisvKiogbm90ZSBtZXNzYWdlcyAoY2hhbm5lbCBzcGVjaWZpYykKKyAqIGV2ZW50IGRhdGEgdHlwZSA9ICNzbmRydl9zZXFfZXZfbm90ZQorICovCisjZGVmaW5lIFNORFJWX1NFUV9FVkVOVF9OT1RFCQk1CisjZGVmaW5lIFNORFJWX1NFUV9FVkVOVF9OT1RFT04JCTYKKyNkZWZpbmUgU05EUlZfU0VRX0VWRU5UX05PVEVPRkYJCTcKKyNkZWZpbmUgU05EUlZfU0VRX0VWRU5UX0tFWVBSRVNTCTgKKwkKKy8qKiBjb250cm9sIG1lc3NhZ2VzIChjaGFubmVsIHNwZWNpZmljKQorICogZXZlbnQgZGF0YSB0eXBlID0gI3NuZHJ2X3NlcV9ldl9jdHJsCisgKi8KKyNkZWZpbmUgU05EUlZfU0VRX0VWRU5UX0NPTlRST0xMRVIJMTAKKyNkZWZpbmUgU05EUlZfU0VRX0VWRU5UX1BHTUNIQU5HRQkxMQorI2RlZmluZSBTTkRSVl9TRVFfRVZFTlRfQ0hBTlBSRVNTCTEyCisjZGVmaW5lIFNORFJWX1NFUV9FVkVOVF9QSVRDSEJFTkQJMTMJLyoqPCBmcm9tIC04MTkyIHRvIDgxOTEgKi8KKyNkZWZpbmUgU05EUlZfU0VRX0VWRU5UX0NPTlRST0wxNAkxNAkvKio8IDE0IGJpdCBjb250cm9sbGVyIHZhbHVlICovCisjZGVmaW5lIFNORFJWX1NFUV9FVkVOVF9OT05SRUdQQVJBTQkxNQkvKio8IDE0IGJpdCBOUlBOIGFkZHJlc3MgKyAxNCBiaXQgdW5zaWduZWQgdmFsdWUgKi8KKyNkZWZpbmUgU05EUlZfU0VRX0VWRU5UX1JFR1BBUkFNCTE2CS8qKjwgMTQgYml0IFJQTiBhZGRyZXNzICsgMTQgYml0IHVuc2lnbmVkIHZhbHVlICovCisKKy8qKiBzeW5jaHJvbmlzYXRpb24gbWVzc2FnZXMKKyAqIGV2ZW50IGRhdGEgdHlwZSA9ICNzbmRydl9zZXFfZXZfY3RybAorICovCisjZGVmaW5lIFNORFJWX1NFUV9FVkVOVF9TT05HUE9TCQkyMAkvKiBTb25nIFBvc2l0aW9uIFBvaW50ZXIgd2l0aCBMU0IgYW5kIE1TQiB2YWx1ZXMgKi8KKyNkZWZpbmUgU05EUlZfU0VRX0VWRU5UX1NPTkdTRUwJCTIxCS8qIFNvbmcgU2VsZWN0IHdpdGggc29uZyBJRCBudW1iZXIgKi8KKyNkZWZpbmUgU05EUlZfU0VRX0VWRU5UX1FGUkFNRQkJMjIJLyogbWlkaSB0aW1lIGNvZGUgcXVhcnRlciBmcmFtZSAqLworI2RlZmluZSBTTkRSVl9TRVFfRVZFTlRfVElNRVNJR04JMjMJLyogU01GIFRpbWUgU2lnbmF0dXJlIGV2ZW50ICovCisjZGVmaW5lIFNORFJWX1NFUV9FVkVOVF9LRVlTSUdOCQkyNAkvKiBTTUYgS2V5IFNpZ25hdHVyZSBldmVudCAqLworCSAgICAgICAgCisvKiogdGltZXIgbWVzc2FnZXMKKyAqIGV2ZW50IGRhdGEgdHlwZSA9IHNuZHJ2X3NlcV9ldl9xdWV1ZV9jb250cm9sX3QKKyAqLworI2RlZmluZSBTTkRSVl9TRVFfRVZFTlRfU1RBUlQJCTMwCS8qIG1pZGkgUmVhbCBUaW1lIFN0YXJ0IG1lc3NhZ2UgKi8KKyNkZWZpbmUgU05EUlZfU0VRX0VWRU5UX0NPTlRJTlVFCTMxCS8qIG1pZGkgUmVhbCBUaW1lIENvbnRpbnVlIG1lc3NhZ2UgKi8KKyNkZWZpbmUgU05EUlZfU0VRX0VWRU5UX1NUT1AJCTMyCS8qIG1pZGkgUmVhbCBUaW1lIFN0b3AgbWVzc2FnZSAqLwkKKyNkZWZpbmUJU05EUlZfU0VRX0VWRU5UX1NFVFBPU19USUNLCTMzCS8qIHNldCB0aWNrIHF1ZXVlIHBvc2l0aW9uICovCisjZGVmaW5lIFNORFJWX1NFUV9FVkVOVF9TRVRQT1NfVElNRQkzNAkvKiBzZXQgcmVhbHRpbWUgcXVldWUgcG9zaXRpb24gKi8KKyNkZWZpbmUgU05EUlZfU0VRX0VWRU5UX1RFTVBPCQkzNQkvKiAoU01GKSBUZW1wbyBldmVudCAqLworI2RlZmluZSBTTkRSVl9TRVFfRVZFTlRfQ0xPQ0sJCTM2CS8qIG1pZGkgUmVhbCBUaW1lIENsb2NrIG1lc3NhZ2UgKi8KKyNkZWZpbmUgU05EUlZfU0VRX0VWRU5UX1RJQ0sJCTM3CS8qIG1pZGkgUmVhbCBUaW1lIFRpY2sgbWVzc2FnZSAqLworI2RlZmluZSBTTkRSVl9TRVFfRVZFTlRfUVVFVUVfU0tFVwkzOAkvKiBza2V3IHF1ZXVlIHRlbXBvICovCisKKy8qKiBvdGhlcnMKKyAqIGV2ZW50IGRhdGEgdHlwZSA9IG5vbmUKKyAqLworI2RlZmluZSBTTkRSVl9TRVFfRVZFTlRfVFVORV9SRVFVRVNUCTQwCS8qIHR1bmUgcmVxdWVzdCAqLworI2RlZmluZSBTTkRSVl9TRVFfRVZFTlRfUkVTRVQJCTQxCS8qIHJlc2V0IHRvIHBvd2VyLW9uIHN0YXRlICovCisjZGVmaW5lIFNORFJWX1NFUV9FVkVOVF9TRU5TSU5HCQk0MgkvKiAiYWN0aXZlIHNlbnNpbmciIGV2ZW50ICovCisKKy8qKiBlY2hvIGJhY2ssIGtlcm5lbCBwcml2YXRlIG1lc3NhZ2VzCisgKiBldmVudCBkYXRhIHR5cGUgPSBhbnkgdHlwZQorICovCisjZGVmaW5lIFNORFJWX1NFUV9FVkVOVF9FQ0hPCQk1MAkvKiBlY2hvIGV2ZW50ICovCisjZGVmaW5lIFNORFJWX1NFUV9FVkVOVF9PU1MJCTUxCS8qIE9TUyByYXcgZXZlbnQgKi8KKworLyoqIHN5c3RlbSBzdGF0dXMgbWVzc2FnZXMgKGJyb2FkY2FzdCBmb3Igc3Vic2NyaWJlcnMpCisgKiBldmVudCBkYXRhIHR5cGUgPSBzbmRydl9zZXFfYWRkcl90CisgKi8KKyNkZWZpbmUgU05EUlZfU0VRX0VWRU5UX0NMSUVOVF9TVEFSVAk2MAkvKiBuZXcgY2xpZW50IGhhcyBjb25uZWN0ZWQgKi8KKyNkZWZpbmUgU05EUlZfU0VRX0VWRU5UX0NMSUVOVF9FWElUCTYxCS8qIGNsaWVudCBoYXMgbGVmdCB0aGUgc3lzdGVtICovCisjZGVmaW5lIFNORFJWX1NFUV9FVkVOVF9DTElFTlRfQ0hBTkdFCTYyCS8qIGNsaWVudCBzdGF0dXMvaW5mbyBoYXMgY2hhbmdlZCAqLworI2RlZmluZSBTTkRSVl9TRVFfRVZFTlRfUE9SVF9TVEFSVAk2MwkvKiBuZXcgcG9ydCB3YXMgY3JlYXRlZCAqLworI2RlZmluZSBTTkRSVl9TRVFfRVZFTlRfUE9SVF9FWElUCTY0CS8qIHBvcnQgd2FzIGRlbGV0ZWQgZnJvbSBzeXN0ZW0gKi8KKyNkZWZpbmUgU05EUlZfU0VRX0VWRU5UX1BPUlRfQ0hBTkdFCTY1CS8qIHBvcnQgc3RhdHVzL2luZm8gaGFzIGNoYW5nZWQgKi8KKworLyoqIHBvcnQgY29ubmVjdGlvbiBjaGFuZ2VzCisgKiBldmVudCBkYXRhIHR5cGUgPSBzbmRydl9zZXFfY29ubmVjdF90CisgKi8KKyNkZWZpbmUgU05EUlZfU0VRX0VWRU5UX1BPUlRfU1VCU0NSSUJFRAk2NgkvKiBwb3J0cyBjb25uZWN0ZWQgKi8KKyNkZWZpbmUgU05EUlZfU0VRX0VWRU5UX1BPUlRfVU5TVUJTQ1JJQkVEIDY3CS8qIHBvcnRzIGRpc2Nvbm5lY3RlZCAqLworCisvKiogc3ludGhlc2l6ZXIgZXZlbnRzCisgKiBldmVudCBkYXRhIHR5cGUgPSBzbmRydl9zZXFfZXZlX3NhbXBsZV9jb250cm9sX3QKKyAqLworI2RlZmluZSBTTkRSVl9TRVFfRVZFTlRfU0FNUExFCQk3MAkvKiBzYW1wbGUgc2VsZWN0ICovCisjZGVmaW5lIFNORFJWX1NFUV9FVkVOVF9TQU1QTEVfQ0xVU1RFUgk3MQkvKiBzYW1wbGUgY2x1c3RlciBzZWxlY3QgKi8KKyNkZWZpbmUgU05EUlZfU0VRX0VWRU5UX1NBTVBMRV9TVEFSVAk3MgkvKiB2b2ljZSBzdGFydCAqLworI2RlZmluZSBTTkRSVl9TRVFfRVZFTlRfU0FNUExFX1NUT1AJNzMJLyogdm9pY2Ugc3RvcCAqLworI2RlZmluZSBTTkRSVl9TRVFfRVZFTlRfU0FNUExFX0ZSRVEJNzQJLyogcGxheWJhY2sgZnJlcXVlbmN5ICovCisjZGVmaW5lIFNORFJWX1NFUV9FVkVOVF9TQU1QTEVfVk9MVU1FCTc1CS8qIHZvbHVtZSBhbmQgYmFsYW5jZSAqLworI2RlZmluZSBTTkRSVl9TRVFfRVZFTlRfU0FNUExFX0xPT1AJNzYJLyogc2FtcGxlIGxvb3AgKi8KKyNkZWZpbmUgU05EUlZfU0VRX0VWRU5UX1NBTVBMRV9QT1NJVElPTgk3NwkvKiBzYW1wbGUgcG9zaXRpb24gKi8KKyNkZWZpbmUgU05EUlZfU0VRX0VWRU5UX1NBTVBMRV9QUklWQVRFMQk3OAkvKiBwcml2YXRlIChoYXJkd2FyZSBkZXBlbmRlbnQpIGV2ZW50ICovCisKKy8qKiB1c2VyLWRlZmluZWQgZXZlbnRzIHdpdGggZml4ZWQgbGVuZ3RoCisgKiBldmVudCBkYXRhIHR5cGUgPSBhbnkKKyAqLworI2RlZmluZSBTTkRSVl9TRVFfRVZFTlRfVVNSMAkJOTAKKyNkZWZpbmUgU05EUlZfU0VRX0VWRU5UX1VTUjEJCTkxCisjZGVmaW5lIFNORFJWX1NFUV9FVkVOVF9VU1IyCQk5MgorI2RlZmluZSBTTkRSVl9TRVFfRVZFTlRfVVNSMwkJOTMKKyNkZWZpbmUgU05EUlZfU0VRX0VWRU5UX1VTUjQJCTk0CisjZGVmaW5lIFNORFJWX1NFUV9FVkVOVF9VU1I1CQk5NQorI2RlZmluZSBTTkRSVl9TRVFfRVZFTlRfVVNSNgkJOTYKKyNkZWZpbmUgU05EUlZfU0VRX0VWRU5UX1VTUjcJCTk3CisjZGVmaW5lIFNORFJWX1NFUV9FVkVOVF9VU1I4CQk5OAorI2RlZmluZSBTTkRSVl9TRVFfRVZFTlRfVVNSOQkJOTkKKworLyoqIGluc3RydW1lbnQgbGF5ZXIKKyAqIHZhcmlhYmxlIGxlbmd0aCBkYXRhIGNhbiBiZSBwYXNzZWQgZGlyZWN0bHkgdG8gdGhlIGRyaXZlcgorICovCisjZGVmaW5lIFNORFJWX1NFUV9FVkVOVF9JTlNUUl9CRUdJTgkxMDAJLyogYmVnaW4gb2YgaW5zdHJ1bWVudCBtYW5hZ2VtZW50ICovCisjZGVmaW5lIFNORFJWX1NFUV9FVkVOVF9JTlNUUl9FTkQJMTAxCS8qIGVuZCBvZiBpbnN0cnVtZW50IG1hbmFnZW1lbnQgKi8KKyNkZWZpbmUgU05EUlZfU0VRX0VWRU5UX0lOU1RSX0lORk8JMTAyCS8qIGluc3RydW1lbnQgaW50ZXJmYWNlIGluZm8gKi8KKyNkZWZpbmUgU05EUlZfU0VRX0VWRU5UX0lOU1RSX0lORk9fUkVTVUxUIDEwMwkvKiByZXN1bHQgKi8KKyNkZWZpbmUgU05EUlZfU0VRX0VWRU5UX0lOU1RSX0ZJTkZPCTEwNAkvKiBnZXQgZm9ybWF0IGluZm8gKi8KKyNkZWZpbmUgU05EUlZfU0VRX0VWRU5UX0lOU1RSX0ZJTkZPX1JFU1VMVCAxMDUJLyogZ2V0IGZvcm1hdCBpbmZvICovCisjZGVmaW5lIFNORFJWX1NFUV9FVkVOVF9JTlNUUl9SRVNFVAkxMDYJLyogcmVzZXQgaW5zdHJ1bWVudCBtZW1vcnkgKi8KKyNkZWZpbmUgU05EUlZfU0VRX0VWRU5UX0lOU1RSX1NUQVRVUwkxMDcJLyogaW5zdHJ1bWVudCBpbnRlcmZhY2Ugc3RhdHVzICovCisjZGVmaW5lIFNORFJWX1NFUV9FVkVOVF9JTlNUUl9TVEFUVVNfUkVTVUxUIDEwOAkvKiByZXN1bHQgKi8KKyNkZWZpbmUgU05EUlZfU0VRX0VWRU5UX0lOU1RSX1BVVAkxMDkJLyogcHV0IGluc3RydW1lbnQgdG8gcG9ydCAqLworI2RlZmluZSBTTkRSVl9TRVFfRVZFTlRfSU5TVFJfR0VUCTExMAkvKiBnZXQgaW5zdHJ1bWVudCBmcm9tIHBvcnQgKi8KKyNkZWZpbmUgU05EUlZfU0VRX0VWRU5UX0lOU1RSX0dFVF9SRVNVTFQgMTExCS8qIHJlc3VsdCAqLworI2RlZmluZSBTTkRSVl9TRVFfRVZFTlRfSU5TVFJfRlJFRQkxMTIJLyogZnJlZSBpbnN0cnVtZW50KHMpICovCisjZGVmaW5lIFNORFJWX1NFUV9FVkVOVF9JTlNUUl9MSVNUCTExMwkvKiBpbnN0cnVtZW50IGxpc3QgKi8KKyNkZWZpbmUgU05EUlZfU0VRX0VWRU5UX0lOU1RSX0xJU1RfUkVTVUxUIDExNAkvKiByZXN1bHQgKi8KKyNkZWZpbmUgU05EUlZfU0VRX0VWRU5UX0lOU1RSX0NMVVNURVIJMTE1CS8qIGNsdXN0ZXIgcGFyYW1ldGVycyAqLworI2RlZmluZSBTTkRSVl9TRVFfRVZFTlRfSU5TVFJfQ0xVU1RFUl9HRVQgMTE2CS8qIGdldCBjbHVzdGVyIHBhcmFtZXRlcnMgKi8KKyNkZWZpbmUgU05EUlZfU0VRX0VWRU5UX0lOU1RSX0NMVVNURVJfUkVTVUxUIDExNyAvKiByZXN1bHQgKi8KKyNkZWZpbmUgU05EUlZfU0VRX0VWRU5UX0lOU1RSX0NIQU5HRQkxMTgJLyogaW5zdHJ1bWVudCBjaGFuZ2UgKi8KKy8qIDExOS0xMjk6IHJlc2VydmVkICovCisKKy8qIDEzMC0xMzk6IHZhcmlhYmxlIGxlbmd0aCBldmVudHMKKyAqIGV2ZW50IGRhdGEgdHlwZSA9IHNuZHJ2X3NlcV9ldl9leHQKKyAqIChTTkRSVl9TRVFfRVZFTlRfTEVOR1RIX1ZBUklBQkxFIG11c3QgYmUgc2V0KQorICovCisjZGVmaW5lIFNORFJWX1NFUV9FVkVOVF9TWVNFWAkJMTMwCS8qIHN5c3RlbSBleGNsdXNpdmUgZGF0YSAodmFyaWFibGUgbGVuZ3RoKSAqLworI2RlZmluZSBTTkRSVl9TRVFfRVZFTlRfQk9VTkNFCQkxMzEJLyogZXJyb3IgZXZlbnQgKi8KKy8qIDEzMi0xMzQ6IHJlc2VydmVkICovCisjZGVmaW5lIFNORFJWX1NFUV9FVkVOVF9VU1JfVkFSMAkxMzUKKyNkZWZpbmUgU05EUlZfU0VRX0VWRU5UX1VTUl9WQVIxCTEzNgorI2RlZmluZSBTTkRSVl9TRVFfRVZFTlRfVVNSX1ZBUjIJMTM3CisjZGVmaW5lIFNORFJWX1NFUV9FVkVOVF9VU1JfVkFSMwkxMzgKKyNkZWZpbmUgU05EUlZfU0VRX0VWRU5UX1VTUl9WQVI0CTEzOQorCisvKiAxNTAtMTUxOiBrZXJuZWwgZXZlbnRzIHdpdGggcXVvdGUgLSBETyBOT1QgdXNlIGluIHVzZXIgY2xpZW50cyAqLworI2RlZmluZSBTTkRSVl9TRVFfRVZFTlRfS0VSTkVMX0VSUk9SCTE1MAorI2RlZmluZSBTTkRSVl9TRVFfRVZFTlRfS0VSTkVMX1FVT1RFCTE1MQkvKiBvYnNvbGV0ZSAqLworCisvKiAxNTItMTkxOiByZXNlcnZlZCAqLworCisvKiAxOTItMjU0OiBoYXJkd2FyZSBzcGVjaWZpYyBldmVudHMgKi8KKworLyogMjU1OiBzcGVjaWFsIGV2ZW50ICovCisjZGVmaW5lIFNORFJWX1NFUV9FVkVOVF9OT05FCQkyNTUKKworCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgc25kcnZfc2VxX2V2ZW50X3R5cGVfdDsKKworLyoqIGV2ZW50IGFkZHJlc3MgKi8KK3N0cnVjdCBzbmRydl9zZXFfYWRkciB7CisJdW5zaWduZWQgY2hhciBjbGllbnQ7CS8qKjwgQ2xpZW50IG51bWJlcjogICAgICAgICAwLi4yNTUsIDI1NSA9IGJyb2FkY2FzdCB0byBhbGwgY2xpZW50cyAqLworCXVuc2lnbmVkIGNoYXIgcG9ydDsJLyoqPCBQb3J0IHdpdGhpbiBjbGllbnQ6ICAgIDAuLjI1NSwgMjU1ID0gYnJvYWRjYXN0IHRvIGFsbCBwb3J0cyAqLworfTsKKworLyoqIHBvcnQgY29ubmVjdGlvbiAqLworc3RydWN0IHNuZHJ2X3NlcV9jb25uZWN0IHsKKwlzdHJ1Y3Qgc25kcnZfc2VxX2FkZHIgc2VuZGVyOworCXN0cnVjdCBzbmRydl9zZXFfYWRkciBkZXN0OworfTsKKworCisjZGVmaW5lIFNORFJWX1NFUV9BRERSRVNTX1VOS05PV04JMjUzCS8qIHVua25vd24gc291cmNlICovCisjZGVmaW5lIFNORFJWX1NFUV9BRERSRVNTX1NVQlNDUklCRVJTCTI1NAkvKiBzZW5kIGV2ZW50IHRvIGFsbCBzdWJzY3JpYmVkIHBvcnRzICovCisjZGVmaW5lIFNORFJWX1NFUV9BRERSRVNTX0JST0FEQ0FTVAkyNTUJLyogc2VuZCBldmVudCB0byBhbGwgcXVldWVzL2NsaWVudHMvcG9ydHMvY2hhbm5lbHMgKi8KKyNkZWZpbmUgU05EUlZfU0VRX1FVRVVFX0RJUkVDVAkJMjUzCS8qIGRpcmVjdCBkaXNwYXRjaCAqLworCisJLyogZXZlbnQgbW9kZSBmbGFnIC0gTk9URTogb25seSA4IGJpdHMgYXZhaWxhYmxlISAqLworI2RlZmluZSBTTkRSVl9TRVFfVElNRV9TVEFNUF9USUNLCSgwPDwwKSAvKiB0aW1lc3RhbXAgaW4gY2xvY2sgdGlja3MgKi8KKyNkZWZpbmUgU05EUlZfU0VRX1RJTUVfU1RBTVBfUkVBTAkoMTw8MCkgLyogdGltZXN0YW1wIGluIHJlYWwgdGltZSAqLworI2RlZmluZSBTTkRSVl9TRVFfVElNRV9TVEFNUF9NQVNLCSgxPDwwKQorCisjZGVmaW5lIFNORFJWX1NFUV9USU1FX01PREVfQUJTCQkoMDw8MSkJLyogYWJzb2x1dGUgdGltZXN0YW1wICovCisjZGVmaW5lIFNORFJWX1NFUV9USU1FX01PREVfUkVMCQkoMTw8MSkJLyogcmVsYXRpdmUgdG8gY3VycmVudCB0aW1lICovCisjZGVmaW5lIFNORFJWX1NFUV9USU1FX01PREVfTUFTSwkoMTw8MSkKKworI2RlZmluZSBTTkRSVl9TRVFfRVZFTlRfTEVOR1RIX0ZJWEVECSgwPDwyKQkvKiBmaXhlZCBldmVudCBzaXplICovCisjZGVmaW5lIFNORFJWX1NFUV9FVkVOVF9MRU5HVEhfVkFSSUFCTEUJKDE8PDIpCS8qIHZhcmlhYmxlIGV2ZW50IHNpemUgKi8KKyNkZWZpbmUgU05EUlZfU0VRX0VWRU5UX0xFTkdUSF9WQVJVU1IJKDI8PDIpCS8qIHZhcmlhYmxlIGV2ZW50IHNpemUgLSB1c2VyIG1lbW9yeSBzcGFjZSAqLworI2RlZmluZSBTTkRSVl9TRVFfRVZFTlRfTEVOR1RIX01BU0sJKDM8PDIpCisKKyNkZWZpbmUgU05EUlZfU0VRX1BSSU9SSVRZX05PUk1BTAkoMDw8NCkJLyogbm9ybWFsIHByaW9yaXR5ICovCisjZGVmaW5lIFNORFJWX1NFUV9QUklPUklUWV9ISUdICQkoMTw8NCkJLyogZXZlbnQgc2hvdWxkIGJlIHByb2Nlc3NlZCBiZWZvcmUgb3RoZXJzICovCisjZGVmaW5lIFNORFJWX1NFUV9QUklPUklUWV9NQVNLCQkoMTw8NCkKKworCisJLyogbm90ZSBldmVudCAqLworc3RydWN0IHNuZHJ2X3NlcV9ldl9ub3RlIHsKKwl1bnNpZ25lZCBjaGFyIGNoYW5uZWw7CisJdW5zaWduZWQgY2hhciBub3RlOworCXVuc2lnbmVkIGNoYXIgdmVsb2NpdHk7CisJdW5zaWduZWQgY2hhciBvZmZfdmVsb2NpdHk7CS8qIG9ubHkgZm9yIFNORFJWX1NFUV9FVkVOVF9OT1RFICovCisJdW5zaWduZWQgaW50IGR1cmF0aW9uOwkJLyogb25seSBmb3IgU05EUlZfU0VRX0VWRU5UX05PVEUgKi8KK307CisKKwkvKiBjb250cm9sbGVyIGV2ZW50ICovCitzdHJ1Y3Qgc25kcnZfc2VxX2V2X2N0cmwgeworCXVuc2lnbmVkIGNoYXIgY2hhbm5lbDsKKwl1bnNpZ25lZCBjaGFyIHVudXNlZDEsIHVudXNlZDIsIHVudXNlZDM7CS8qIHBhZCAqLworCXVuc2lnbmVkIGludCBwYXJhbTsKKwlzaWduZWQgaW50IHZhbHVlOworfTsKKworCS8qIGdlbmVyaWMgc2V0IG9mIGJ5dGVzICgxMng4IGJpdCkgKi8KK3N0cnVjdCBzbmRydl9zZXFfZXZfcmF3OCB7CisJdW5zaWduZWQgY2hhciBkWzEyXTsJLyogOCBiaXQgdmFsdWUgKi8KK307CisKKwkvKiBnZW5lcmljIHNldCBvZiBpbnRlZ2VycyAoM3gzMiBiaXQpICovCitzdHJ1Y3Qgc25kcnZfc2VxX2V2X3JhdzMyIHsKKwl1bnNpZ25lZCBpbnQgZFszXTsJLyogMzIgYml0IHZhbHVlICovCit9OworCisJLyogZXh0ZXJuYWwgc3RvcmVkIGRhdGEgKi8KK3N0cnVjdCBzbmRydl9zZXFfZXZfZXh0IHsKKwl1bnNpZ25lZCBpbnQgbGVuOwkvKiBsZW5ndGggb2YgZGF0YSAqLworCXZvaWQgKnB0cjsJCS8qIHBvaW50ZXIgdG8gZGF0YSAobm90ZTogbWF5YmUgNjQtYml0KSAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyogSW5zdHJ1bWVudCBjbHVzdGVyIHR5cGUgKi8KK3R5cGVkZWYgdW5zaWduZWQgaW50IHNuZHJ2X3NlcV9pbnN0cl9jbHVzdGVyX3Q7CisKKy8qIEluc3RydW1lbnQgdHlwZSAqLworc3RydWN0IHNuZHJ2X3NlcV9pbnN0ciB7CisJc25kcnZfc2VxX2luc3RyX2NsdXN0ZXJfdCBjbHVzdGVyOworCXVuc2lnbmVkIGludCBzdGQ7CQkvKiB0aGUgdXBwZXIgYnl0ZSBtZWFucyBhIHByaXZhdGUgaW5zdHJ1bWVudCAob3duZXIgLSBjbGllbnQgIykgKi8KKwl1bnNpZ25lZCBzaG9ydCBiYW5rOworCXVuc2lnbmVkIHNob3J0IHByZzsKK307CisKKwkvKiBzYW1wbGUgbnVtYmVyICovCitzdHJ1Y3Qgc25kcnZfc2VxX2V2X3NhbXBsZSB7CisJdW5zaWduZWQgaW50IHN0ZDsKKwl1bnNpZ25lZCBzaG9ydCBiYW5rOworCXVuc2lnbmVkIHNob3J0IHByZzsKK307CisKKwkvKiBzYW1wbGUgY2x1c3RlciAqLworc3RydWN0IHNuZHJ2X3NlcV9ldl9jbHVzdGVyIHsKKwlzbmRydl9zZXFfaW5zdHJfY2x1c3Rlcl90IGNsdXN0ZXI7Cit9OworCisJLyogc2FtcGxlIHBvc2l0aW9uICovCit0eXBlZGVmIHVuc2lnbmVkIGludCBzbmRydl9zZXFfcG9zaXRpb25fdDsgLyogcGxheWJhY2sgcG9zaXRpb24gKGluIHNhbXBsZXMpICogMTYgKi8KKworCS8qIHNhbXBsZSBzdG9wIG1vZGUgKi8KK2VudW0gc25kcnZfc2VxX3N0b3BfbW9kZSB7CisJU0FNUExFX1NUT1BfSU1NRURJQVRFTFkgPSAwLAkvKiB0ZXJtaW5hdGUgcGxheWluZyBpbW1lZGlhdGVseSAqLworCVNBTVBMRV9TVE9QX1ZFTlZFTE9QRSA9IDEsCS8qIGZpbmlzaCB2b2x1bWUgZW52ZWxvcGUgKi8KKwlTQU1QTEVfU1RPUF9MT09QID0gMgkJLyogdGVybWluYXRlIGxvb3AgYW5kIGZpbmlzaCB3YXZlICovCit9OworCisJLyogc2FtcGxlIGZyZXF1ZW5jeSAqLwordHlwZWRlZiBpbnQgc25kcnZfc2VxX2ZyZXF1ZW5jeV90OyAvKiBwbGF5YmFjayBmcmVxdWVuY3kgaW4gSFogKiAxNiAqLworCisJLyogc2FtcGxlIHZvbHVtZSBjb250cm9sOyBpZiBhbnkgdmFsdWUgaXMgc2V0IHRvIC0xID09IGRvIG5vdCBjaGFuZ2UgKi8KK3N0cnVjdCBzbmRydl9zZXFfZXZfdm9sdW1lIHsKKwlzaWduZWQgc2hvcnQgdm9sdW1lOwkvKiByYW5nZTogMC0xNjM4MyAqLworCXNpZ25lZCBzaG9ydCBscjsJLyogbGVmdC1yaWdodCBiYWxhbmNlOyByYW5nZTogMC0xNjM4MyAqLworCXNpZ25lZCBzaG9ydCBmcjsJLyogZnJvbnQtcmVhciBiYWxhbmNlOyByYW5nZTogMC0xNjM4MyAqLworCXNpZ25lZCBzaG9ydCBkdTsJLyogZG93bi11cCBiYWxhbmNlOyByYW5nZTogMC0xNjM4MyAqLworfTsKKworCS8qIHNpbXBsZSBsb29wIHJlZGVmaW5pdGlvbiAqLworc3RydWN0IHNuZHJ2X3NlcV9ldl9sb29wIHsKKwl1bnNpZ25lZCBpbnQgc3RhcnQ7CS8qIGxvb3Agc3RhcnQgKGluIHNhbXBsZXMpICogMTYgKi8KKwl1bnNpZ25lZCBpbnQgZW5kOwkvKiBsb29wIGVuZCAoaW4gc2FtcGxlcykgKiAxNiAqLworfTsKKworc3RydWN0IHNuZHJ2X3NlcV9ldl9zYW1wbGVfY29udHJvbCB7CisJdW5zaWduZWQgY2hhciBjaGFubmVsOworCXVuc2lnbmVkIGNoYXIgdW51c2VkMSwgdW51c2VkMiwgdW51c2VkMzsJLyogcGFkICovCisJdW5pb24geworCQlzdHJ1Y3Qgc25kcnZfc2VxX2V2X3NhbXBsZSBzYW1wbGU7CisJCXN0cnVjdCBzbmRydl9zZXFfZXZfY2x1c3RlciBjbHVzdGVyOworCQlzbmRydl9zZXFfcG9zaXRpb25fdCBwb3NpdGlvbjsKKwkJZW51bSBzbmRydl9zZXFfc3RvcF9tb2RlIHN0b3BfbW9kZTsKKwkJc25kcnZfc2VxX2ZyZXF1ZW5jeV90IGZyZXF1ZW5jeTsKKwkJc3RydWN0IHNuZHJ2X3NlcV9ldl92b2x1bWUgdm9sdW1lOworCQlzdHJ1Y3Qgc25kcnZfc2VxX2V2X2xvb3AgbG9vcDsKKwkJdW5zaWduZWQgY2hhciByYXc4WzhdOworCX0gcGFyYW07Cit9OworCisKKworLyogSU5TVFJfQkVHSU4gZXZlbnQgKi8KK3N0cnVjdCBzbmRydl9zZXFfZXZfaW5zdHJfYmVnaW4geworCWludCB0aW1lb3V0OwkJLyogemVybyA9IGZvcmV2ZXIsIG90aGVyd2lzZSB0aW1lb3V0IGluIG1zICovCit9OworCitzdHJ1Y3Qgc25kcnZfc2VxX3Jlc3VsdCB7CisJaW50IGV2ZW50OwkJLyogcHJvY2Vzc2VkIGV2ZW50IHR5cGUgKi8KKwlpbnQgcmVzdWx0OworfTsKKworCitzdHJ1Y3Qgc25kcnZfc2VxX3JlYWxfdGltZSB7CisJdW5zaWduZWQgaW50IHR2X3NlYzsJLyogc2Vjb25kcyAqLworCXVuc2lnbmVkIGludCB0dl9uc2VjOwkvKiBuYW5vc2Vjb25kcyAqLworfTsKKwordHlwZWRlZiB1bnNpZ25lZCBpbnQgc25kcnZfc2VxX3RpY2tfdGltZV90OwkvKiBtaWRpIHRpY2tzICovCisKK3VuaW9uIHNuZHJ2X3NlcV90aW1lc3RhbXAgeworCXNuZHJ2X3NlcV90aWNrX3RpbWVfdCB0aWNrOworCXN0cnVjdCBzbmRydl9zZXFfcmVhbF90aW1lIHRpbWU7Cit9OworCitzdHJ1Y3Qgc25kcnZfc2VxX3F1ZXVlX3NrZXcgeworCXVuc2lnbmVkIGludCB2YWx1ZTsKKwl1bnNpZ25lZCBpbnQgYmFzZTsKK307CisKKwkvKiBxdWV1ZSB0aW1lciBjb250cm9sICovCitzdHJ1Y3Qgc25kcnZfc2VxX2V2X3F1ZXVlX2NvbnRyb2wgeworCXVuc2lnbmVkIGNoYXIgcXVldWU7CQkJLyogYWZmZWN0ZWQgcXVldWUgKi8KKwl1bnNpZ25lZCBjaGFyIHBhZFszXTsJCQkvKiByZXNlcnZlZCAqLworCXVuaW9uIHsKKwkJc2lnbmVkIGludCB2YWx1ZTsJCS8qIGFmZmVjdGVkIHZhbHVlIChlLmcuIHRlbXBvKSAqLworCQl1bmlvbiBzbmRydl9zZXFfdGltZXN0YW1wIHRpbWU7CS8qIHRpbWUgKi8KKwkJdW5zaWduZWQgaW50IHBvc2l0aW9uOwkJLyogc3luYyBwb3NpdGlvbiAqLworCQlzdHJ1Y3Qgc25kcnZfc2VxX3F1ZXVlX3NrZXcgc2tldzsKKwkJdW5zaWduZWQgaW50IGQzMlsyXTsKKwkJdW5zaWduZWQgY2hhciBkOFs4XTsKKwl9IHBhcmFtOworfTsKKworCS8qIHF1b3RlZCBldmVudCAtIGluc2lkZSB0aGUga2VybmVsIG9ubHkgKi8KK3N0cnVjdCBzbmRydl9zZXFfZXZfcXVvdGUgeworCXN0cnVjdCBzbmRydl9zZXFfYWRkciBvcmlnaW47CQkvKiBvcmlnaW5hbCBzZW5kZXIgKi8KKwl1bnNpZ25lZCBzaG9ydCB2YWx1ZTsJCS8qIG9wdGlvbmFsIGRhdGEgKi8KKwlzdHJ1Y3Qgc25kcnZfc2VxX2V2ZW50ICpldmVudDsJCS8qIHF1b3RlZCBldmVudCAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworCisJLyogc2VxdWVuY2VyIGV2ZW50ICovCitzdHJ1Y3Qgc25kcnZfc2VxX2V2ZW50IHsKKwlzbmRydl9zZXFfZXZlbnRfdHlwZV90IHR5cGU7CS8qIGV2ZW50IHR5cGUgKi8KKwl1bnNpZ25lZCBjaGFyIGZsYWdzOwkJLyogZXZlbnQgZmxhZ3MgKi8KKwljaGFyIHRhZzsKKwkKKwl1bnNpZ25lZCBjaGFyIHF1ZXVlOwkJLyogc2NoZWR1bGUgcXVldWUgKi8KKwl1bmlvbiBzbmRydl9zZXFfdGltZXN0YW1wIHRpbWU7CS8qIHNjaGVkdWxlIHRpbWUgKi8KKworCisJc3RydWN0IHNuZHJ2X3NlcV9hZGRyIHNvdXJjZTsJLyogc291cmNlIGFkZHJlc3MgKi8KKwlzdHJ1Y3Qgc25kcnZfc2VxX2FkZHIgZGVzdDsJLyogZGVzdGluYXRpb24gYWRkcmVzcyAqLworCisJdW5pb24gewkJCQkvKiBldmVudCBkYXRhLi4uICovCisJCXN0cnVjdCBzbmRydl9zZXFfZXZfbm90ZSBub3RlOworCQlzdHJ1Y3Qgc25kcnZfc2VxX2V2X2N0cmwgY29udHJvbDsKKwkJc3RydWN0IHNuZHJ2X3NlcV9ldl9yYXc4IHJhdzg7CisJCXN0cnVjdCBzbmRydl9zZXFfZXZfcmF3MzIgcmF3MzI7CisJCXN0cnVjdCBzbmRydl9zZXFfZXZfZXh0IGV4dDsKKwkJc3RydWN0IHNuZHJ2X3NlcV9ldl9xdWV1ZV9jb250cm9sIHF1ZXVlOworCQl1bmlvbiBzbmRydl9zZXFfdGltZXN0YW1wIHRpbWU7CisJCXN0cnVjdCBzbmRydl9zZXFfYWRkciBhZGRyOworCQlzdHJ1Y3Qgc25kcnZfc2VxX2Nvbm5lY3QgY29ubmVjdDsKKwkJc3RydWN0IHNuZHJ2X3NlcV9yZXN1bHQgcmVzdWx0OworCQlzdHJ1Y3Qgc25kcnZfc2VxX2V2X2luc3RyX2JlZ2luIGluc3RyX2JlZ2luOworCQlzdHJ1Y3Qgc25kcnZfc2VxX2V2X3NhbXBsZV9jb250cm9sIHNhbXBsZTsKKwkJc3RydWN0IHNuZHJ2X3NlcV9ldl9xdW90ZSBxdW90ZTsKKwl9IGRhdGE7Cit9OworCisKKy8qCisgKiBib3VuY2UgZXZlbnQgLSBzdG9yZWQgYXMgdmFyaWFibGUgc2l6ZSBkYXRhCisgKi8KK3N0cnVjdCBzbmRydl9zZXFfZXZlbnRfYm91bmNlIHsKKwlpbnQgZXJyOworCXN0cnVjdCBzbmRydl9zZXFfZXZlbnQgZXZlbnQ7CisJLyogZXh0ZXJuYWwgZGF0YSBmb2xsb3dzIGhlcmUuICovCit9OworCisjZGVmaW5lIHNuZHJ2X3NlcV9ldmVudF9ib3VuY2VfZXh0X2RhdGEoZXYpICgodm9pZCopKChjaGFyICopKGV2KS0+ZGF0YS5leHQucHRyICsgc2l6ZW9mKHNuZHJ2X3NlcV9ldmVudF9ib3VuY2VfdCkpKQorCisvKgorICogdHlwZSBjaGVjayBtYWNyb3MKKyAqLworLyogcmVzdWx0IGV2ZW50czogMC00ICovCisjZGVmaW5lIHNuZHJ2X3NlcV9ldl9pc19yZXN1bHRfdHlwZShldikJKChldiktPnR5cGUgPCA1KQorLyogY2hhbm5lbCBzcGVjaWZpYyBldmVudHM6IDUtMTkgKi8KKyNkZWZpbmUgc25kcnZfc2VxX2V2X2lzX2NoYW5uZWxfdHlwZShldikJKChldiktPnR5cGUgPj0gNSAmJiAoZXYpLT50eXBlIDwgMjApCisvKiBub3RlIGV2ZW50czogNS05ICovCisjZGVmaW5lIHNuZHJ2X3NlcV9ldl9pc19ub3RlX3R5cGUoZXYpCSgoZXYpLT50eXBlID49IDUgJiYgKGV2KS0+dHlwZSA8IDEwKQorLyogY29udHJvbCBldmVudHM6IDEwLTE5ICovCisjZGVmaW5lIHNuZHJ2X3NlcV9ldl9pc19jb250cm9sX3R5cGUoZXYpCSgoZXYpLT50eXBlID49IDEwICYmIChldiktPnR5cGUgPCAyMCkKKy8qIHF1ZXVlIGNvbnRyb2wgZXZlbnRzOiAzMC0zOSAqLworI2RlZmluZSBzbmRydl9zZXFfZXZfaXNfcXVldWVfdHlwZShldikJKChldiktPnR5cGUgPj0gMzAgJiYgKGV2KS0+dHlwZSA8IDQwKQorLyogc3lzdGVtIHN0YXR1cyBtZXNzYWdlcyAqLworI2RlZmluZSBzbmRydl9zZXFfZXZfaXNfbWVzc2FnZV90eXBlKGV2KQkoKGV2KS0+dHlwZSA+PSA2MCAmJiAoZXYpLT50eXBlIDwgNjkpCisvKiBzYW1wbGUgbWVzc2FnZXMgKi8KKyNkZWZpbmUgc25kcnZfc2VxX2V2X2lzX3NhbXBsZV90eXBlKGV2KQkoKGV2KS0+dHlwZSA+PSA3MCAmJiAoZXYpLT50eXBlIDwgNzkpCisvKiB1c2VyLWRlZmluZWQgbWVzc2FnZXMgKi8KKyNkZWZpbmUgc25kcnZfc2VxX2V2X2lzX3VzZXJfdHlwZShldikJKChldiktPnR5cGUgPj0gOTAgJiYgKGV2KS0+dHlwZSA8IDk5KQorLyogZml4ZWQgbGVuZ3RoIGV2ZW50czogMC05OSAqLworI2RlZmluZSBzbmRydl9zZXFfZXZfaXNfZml4ZWRfdHlwZShldikJKChldiktPnR5cGUgPCAxMDApCisvKiBpbnN0cnVtZW50IGxheWVyIGV2ZW50czogMTAwLTEyOSAqLworI2RlZmluZSBzbmRydl9zZXFfZXZfaXNfaW5zdHJfdHlwZShldikJKChldiktPnR5cGUgPj0gMTAwICYmIChldiktPnR5cGUgPCAxMzApCisvKiB2YXJpYWJsZSBsZW5ndGggZXZlbnRzOiAxMzAtMTM5ICovCisjZGVmaW5lIHNuZHJ2X3NlcV9ldl9pc192YXJpYWJsZV90eXBlKGV2KQkoKGV2KS0+dHlwZSA+PSAxMzAgJiYgKGV2KS0+dHlwZSA8IDE0MCkKKy8qIHJlc2VydmVkIGZvciBrZXJuZWwgKi8KKyNkZWZpbmUgc25kcnZfc2VxX2V2X2lzX3Jlc2VydmVkKGV2KQkoKGV2KS0+dHlwZSA+PSAxNTApCisKKy8qIGRpcmVjdCBkaXNwYXRjaGVkIGV2ZW50cyAqLworI2RlZmluZSBzbmRydl9zZXFfZXZfaXNfZGlyZWN0KGV2KQkoKGV2KS0+cXVldWUgPT0gU05EUlZfU0VRX1FVRVVFX0RJUkVDVCkKKworLyoKKyAqIG1hY3JvcyB0byBjaGVjayBldmVudCBmbGFncworICovCisvKiBwcmlvciBldmVudHMgKi8KKyNkZWZpbmUgc25kcnZfc2VxX2V2X2lzX3ByaW9yKGV2KQkJKCgoZXYpLT5mbGFncyAmIFNORFJWX1NFUV9QUklPUklUWV9NQVNLKSA9PSBTTkRSVl9TRVFfUFJJT1JJVFlfSElHSCkKKworLyogZXZlbnQgbGVuZ3RoIHR5cGUgKi8KKyNkZWZpbmUgc25kcnZfc2VxX2V2X2xlbmd0aF90eXBlKGV2KQkoKGV2KS0+ZmxhZ3MgJiBTTkRSVl9TRVFfRVZFTlRfTEVOR1RIX01BU0spCisjZGVmaW5lIHNuZHJ2X3NlcV9ldl9pc19maXhlZChldikJCShzbmRydl9zZXFfZXZfbGVuZ3RoX3R5cGUoZXYpID09IFNORFJWX1NFUV9FVkVOVF9MRU5HVEhfRklYRUQpCisjZGVmaW5lIHNuZHJ2X3NlcV9ldl9pc192YXJpYWJsZShldikJKHNuZHJ2X3NlcV9ldl9sZW5ndGhfdHlwZShldikgPT0gU05EUlZfU0VRX0VWRU5UX0xFTkdUSF9WQVJJQUJMRSkKKyNkZWZpbmUgc25kcnZfc2VxX2V2X2lzX3ZhcnVzcihldikJKHNuZHJ2X3NlcV9ldl9sZW5ndGhfdHlwZShldikgPT0gU05EUlZfU0VRX0VWRU5UX0xFTkdUSF9WQVJVU1IpCisKKy8qIHRpbWUtc3RhbXAgdHlwZSAqLworI2RlZmluZSBzbmRydl9zZXFfZXZfdGltZXN0YW1wX3R5cGUoZXYpCSgoZXYpLT5mbGFncyAmIFNORFJWX1NFUV9USU1FX1NUQU1QX01BU0spCisjZGVmaW5lIHNuZHJ2X3NlcV9ldl9pc190aWNrKGV2KQkJKHNuZHJ2X3NlcV9ldl90aW1lc3RhbXBfdHlwZShldikgPT0gU05EUlZfU0VRX1RJTUVfU1RBTVBfVElDSykKKyNkZWZpbmUgc25kcnZfc2VxX2V2X2lzX3JlYWwoZXYpCQkoc25kcnZfc2VxX2V2X3RpbWVzdGFtcF90eXBlKGV2KSA9PSBTTkRSVl9TRVFfVElNRV9TVEFNUF9SRUFMKQorCisvKiB0aW1lLW1vZGUgdHlwZSAqLworI2RlZmluZSBzbmRydl9zZXFfZXZfdGltZW1vZGVfdHlwZShldikJKChldiktPmZsYWdzICYgU05EUlZfU0VRX1RJTUVfTU9ERV9NQVNLKQorI2RlZmluZSBzbmRydl9zZXFfZXZfaXNfYWJzdGltZShldikJKHNuZHJ2X3NlcV9ldl90aW1lbW9kZV90eXBlKGV2KSA9PSBTTkRSVl9TRVFfVElNRV9NT0RFX0FCUykKKyNkZWZpbmUgc25kcnZfc2VxX2V2X2lzX3JlbHRpbWUoZXYpCShzbmRydl9zZXFfZXZfdGltZW1vZGVfdHlwZShldikgPT0gU05EUlZfU0VRX1RJTUVfTU9ERV9SRUwpCisKKy8qIHF1ZXVlIHN5bmMgcG9ydCAqLworI2RlZmluZSBzbmRydl9zZXFfcXVldWVfc3luY19wb3J0KHEpCSgocSkgKyAxNikKKworCS8qIHN5c3RlbSBpbmZvcm1hdGlvbiAqLworc3RydWN0IHNuZHJ2X3NlcV9zeXN0ZW1faW5mbyB7CisJaW50IHF1ZXVlczsJCQkvKiBtYXhpbXVtIHF1ZXVlcyBjb3VudCAqLworCWludCBjbGllbnRzOwkJCS8qIG1heGltdW0gY2xpZW50cyBjb3VudCAqLworCWludCBwb3J0czsJCQkvKiBtYXhpbXVtIHBvcnRzIHBlciBjbGllbnQgKi8KKwlpbnQgY2hhbm5lbHM7CQkJLyogbWF4aW11bSBjaGFubmVscyBwZXIgcG9ydCAqLworCWludCBjdXJfY2xpZW50czsJCS8qIGN1cnJlbnQgY2xpZW50cyAqLworCWludCBjdXJfcXVldWVzOwkJCS8qIGN1cnJlbnQgcXVldWVzICovCisJY2hhciByZXNlcnZlZFsyNF07Cit9OworCisKKwkvKiBzeXN0ZW0gcnVubmluZyBpbmZvcm1hdGlvbiAqLworc3RydWN0IHNuZHJ2X3NlcV9ydW5uaW5nX2luZm8geworCXVuc2lnbmVkIGNoYXIgY2xpZW50OwkJLyogY2xpZW50IGlkICovCisJdW5zaWduZWQgY2hhciBiaWdfZW5kaWFuOwkvKiAxID0gYmlnLWVuZGlhbiAqLworCXVuc2lnbmVkIGNoYXIgY3B1X21vZGU7CQkvKiA0ID0gMzJiaXQsIDggPSA2NGJpdCAqLworCXVuc2lnbmVkIGNoYXIgcGFkOwkJLyogcmVzZXJ2ZWQgKi8KKwl1bnNpZ25lZCBjaGFyIHJlc2VydmVkWzEyXTsKK307CisKKworCS8qIGtub3duIGNsaWVudCBudW1iZXJzICovCisjZGVmaW5lIFNORFJWX1NFUV9DTElFTlRfU1lTVEVNCQkwCisjZGVmaW5lIFNORFJWX1NFUV9DTElFTlRfRFVNTVkJCTYyCS8qIGR1bW15IHBvcnRzICovCisjZGVmaW5lIFNORFJWX1NFUV9DTElFTlRfT1NTCQk2MwkvKiBvc3Mgc2VxdWVuY2VyIGVtdWxhdG9yICovCisKKworCS8qIGNsaWVudCB0eXBlcyAqLworZW51bSBzbmRydl9zZXFfY2xpZW50X3R5cGUgeworCU5PX0NMSUVOVCAgICAgICA9IDAsCisJVVNFUl9DTElFTlQgICAgID0gMSwKKwlLRVJORUxfQ0xJRU5UICAgPSAyCit9OworICAgICAgICAgICAgICAgICAgICAgICAgCisJLyogZXZlbnQgZmlsdGVyIGZsYWdzICovCisjZGVmaW5lIFNORFJWX1NFUV9GSUxURVJfQlJPQURDQVNUCSgxPDwwKQkvKiBhY2NlcHQgYnJvYWRjYXN0IG1lc3NhZ2VzICovCisjZGVmaW5lIFNORFJWX1NFUV9GSUxURVJfTVVMVElDQVNUCSgxPDwxKQkvKiBhY2NlcHQgbXVsdGljYXN0IG1lc3NhZ2VzICovCisjZGVmaW5lIFNORFJWX1NFUV9GSUxURVJfQk9VTkNFCQkoMTw8MikJLyogYWNjZXB0IGJvdW5jZSBldmVudCBpbiBlcnJvciAqLworI2RlZmluZSBTTkRSVl9TRVFfRklMVEVSX1VTRV9FVkVOVAkoMTw8MzEpCS8qIHVzZSBldmVudCBmaWx0ZXIgKi8KKworc3RydWN0IHNuZHJ2X3NlcV9jbGllbnRfaW5mbyB7CisJaW50IGNsaWVudDsJCQkvKiBjbGllbnQgbnVtYmVyIHRvIGlucXVpcmUgKi8KKwllbnVtIHNuZHJ2X3NlcV9jbGllbnRfdHlwZSB0eXBlOwkvKiBjbGllbnQgdHlwZSAqLworCWNoYXIgbmFtZVs2NF07CQkJLyogY2xpZW50IG5hbWUgKi8KKwl1bnNpZ25lZCBpbnQgZmlsdGVyOwkJLyogZmlsdGVyIGZsYWdzICovCisJdW5zaWduZWQgY2hhciBtdWx0aWNhc3RfZmlsdGVyWzhdOyAvKiBtdWx0aWNhc3QgZmlsdGVyIGJpdG1hcCAqLworCXVuc2lnbmVkIGNoYXIgZXZlbnRfZmlsdGVyWzMyXTsJLyogZXZlbnQgZmlsdGVyIGJpdG1hcCAqLworCWludCBudW1fcG9ydHM7CQkJLyogUk86IG51bWJlciBvZiBwb3J0cyAqLworCWludCBldmVudF9sb3N0OwkJCS8qIG51bWJlciBvZiBsb3N0IGV2ZW50cyAqLworCWNoYXIgcmVzZXJ2ZWRbNjRdOwkJLyogZm9yIGZ1dHVyZSB1c2UgKi8KK307CisKKworLyogY2xpZW50IHBvb2wgc2l6ZSAqLworc3RydWN0IHNuZHJ2X3NlcV9jbGllbnRfcG9vbCB7CisJaW50IGNsaWVudDsJCQkvKiBjbGllbnQgbnVtYmVyIHRvIGlucXVpcmUgKi8KKwlpbnQgb3V0cHV0X3Bvb2w7CQkvKiBvdXRnb2luZyAod3JpdGUpIHBvb2wgc2l6ZSAqLworCWludCBpbnB1dF9wb29sOwkJCS8qIGluY29taW5nIChyZWFkKSBwb29sIHNpemUgKi8KKwlpbnQgb3V0cHV0X3Jvb207CQkvKiBtaW5pbXVtIGZyZWUgcG9vbCBzaXplIGZvciBzZWxlY3QvYmxvY2tpbmcgbW9kZSAqLworCWludCBvdXRwdXRfZnJlZTsJCS8qIHVudXNlZCBzaXplICovCisJaW50IGlucHV0X2ZyZWU7CQkJLyogdW51c2VkIHNpemUgKi8KKwljaGFyIHJlc2VydmVkWzY0XTsKK307CisKKworLyogUmVtb3ZlIGV2ZW50cyBieSBzcGVjaWZpZWQgY3JpdGVyaWEgKi8KKworI2RlZmluZSBTTkRSVl9TRVFfUkVNT1ZFX0lOUFVUCQkoMTw8MCkJLyogRmx1c2ggaW5wdXQgcXVldWVzICovCisjZGVmaW5lIFNORFJWX1NFUV9SRU1PVkVfT1VUUFVUCQkoMTw8MSkJLyogRmx1c2ggb3V0cHV0IHF1ZXVlcyAqLworI2RlZmluZSBTTkRSVl9TRVFfUkVNT1ZFX0RFU1QJCSgxPDwyKQkvKiBSZXN0cmljdCBieSBkZXN0aW5hdGlvbiBxOmNsaWVudDpwb3J0ICovCisjZGVmaW5lIFNORFJWX1NFUV9SRU1PVkVfREVTVF9DSEFOTkVMCSgxPDwzKQkvKiBSZXN0cmljdCBieSBjaGFubmVsICovCisjZGVmaW5lIFNORFJWX1NFUV9SRU1PVkVfVElNRV9CRUZPUkUJKDE8PDQpCS8qIFJlc3RyaWN0IHRvIGJlZm9yZSB0aW1lICovCisjZGVmaW5lIFNORFJWX1NFUV9SRU1PVkVfVElNRV9BRlRFUgkoMTw8NSkJLyogUmVzdHJpY3QgdG8gdGltZSBvciBhZnRlciAqLworI2RlZmluZSBTTkRSVl9TRVFfUkVNT1ZFX1RJTUVfVElDSwkoMTw8NikJLyogVGltZSBpcyBpbiB0aWNrcyAqLworI2RlZmluZSBTTkRSVl9TRVFfUkVNT1ZFX0VWRU5UX1RZUEUJKDE8PDcpCS8qIFJlc3RyaWN0IHRvIGV2ZW50IHR5cGUgKi8KKyNkZWZpbmUgU05EUlZfU0VRX1JFTU9WRV9JR05PUkVfT0ZGIAkoMTw8OCkJLyogRG8gbm90IGZsdXNoIG9mZiBldmVudHMgKi8KKyNkZWZpbmUgU05EUlZfU0VRX1JFTU9WRV9UQUdfTUFUQ0ggCSgxPDw5KQkvKiBSZXN0cmljdCB0byBldmVudHMgd2l0aCBnaXZlbiB0YWcgKi8KKworc3RydWN0IHNuZHJ2X3NlcV9yZW1vdmVfZXZlbnRzIHsKKwl1bnNpZ25lZCBpbnQgIHJlbW92ZV9tb2RlOwkvKiBGbGFncyB0aGF0IGRldGVybWluZSB3aGF0IGdldHMgcmVtb3ZlZCAqLworCisJdW5pb24gc25kcnZfc2VxX3RpbWVzdGFtcCB0aW1lOworCisJdW5zaWduZWQgY2hhciBxdWV1ZTsJLyogUXVldWUgZm9yIFJFTU9WRV9ERVNUICovCisJc3RydWN0IHNuZHJ2X3NlcV9hZGRyIGRlc3Q7CS8qIEFkZHJlc3MgZm9yIFJFTU9WRV9ERVNUICovCisJdW5zaWduZWQgY2hhciBjaGFubmVsOwkvKiBDaGFubmVsIGZvciBSRU1PVkVfREVTVCAqLworCisJaW50ICB0eXBlOwkvKiBGb3IgUkVNT1ZFX0VWRU5UX1RZUEUgKi8KKwljaGFyICB0YWc7CS8qIFRhZyBmb3IgUkVNT1ZFX1RBRyAqLworCisJaW50ICByZXNlcnZlZFsxMF07CS8qIFRvIGFsbG93IGZvciBmdXR1cmUgYmluYXJ5IGNvbXBhdGliaWxpdHkgKi8KKworfTsKKworCisJLyoga25vd24gcG9ydCBudW1iZXJzICovCisjZGVmaW5lIFNORFJWX1NFUV9QT1JUX1NZU1RFTV9USU1FUgkwCisjZGVmaW5lIFNORFJWX1NFUV9QT1JUX1NZU1RFTV9BTk5PVU5DRQkxCisKKwkvKiBwb3J0IGNhcGFiaWxpdGllcyAoMzIgYml0cykgKi8KKyNkZWZpbmUgU05EUlZfU0VRX1BPUlRfQ0FQX1JFQUQJCSgxPDwwKQkvKiByZWFkYWJsZSBmcm9tIHRoaXMgcG9ydCAqLworI2RlZmluZSBTTkRSVl9TRVFfUE9SVF9DQVBfV1JJVEUJKDE8PDEpCS8qIHdyaXRhYmxlIHRvIHRoaXMgcG9ydCAqLworCisjZGVmaW5lIFNORFJWX1NFUV9QT1JUX0NBUF9TWU5DX1JFQUQJKDE8PDIpCisjZGVmaW5lIFNORFJWX1NFUV9QT1JUX0NBUF9TWU5DX1dSSVRFCSgxPDwzKQorCisjZGVmaW5lIFNORFJWX1NFUV9QT1JUX0NBUF9EVVBMRVgJKDE8PDQpCisKKyNkZWZpbmUgU05EUlZfU0VRX1BPUlRfQ0FQX1NVQlNfUkVBRAkoMTw8NSkJLyogYWxsb3cgcmVhZCBzdWJzY3JpcHRpb24gKi8KKyNkZWZpbmUgU05EUlZfU0VRX1BPUlRfQ0FQX1NVQlNfV1JJVEUJKDE8PDYpCS8qIGFsbG93IHdyaXRlIHN1YnNjcmlwdGlvbiAqLworI2RlZmluZSBTTkRSVl9TRVFfUE9SVF9DQVBfTk9fRVhQT1JUCSgxPDw3KQkvKiByb3V0aW5nIG5vdCBhbGxvd2VkICovCisKKwkvKiBwb3J0IHR5cGUgKi8KKyNkZWZpbmUgU05EUlZfU0VRX1BPUlRfVFlQRV9TUEVDSUZJQwkoMTw8MCkJLyogaGFyZHdhcmUgc3BlY2lmaWMgKi8KKyNkZWZpbmUgU05EUlZfU0VRX1BPUlRfVFlQRV9NSURJX0dFTkVSSUMgKDE8PDEpCS8qIGdlbmVyaWMgTUlESSBkZXZpY2UgKi8KKyNkZWZpbmUgU05EUlZfU0VRX1BPUlRfVFlQRV9NSURJX0dNCSgxPDwyKQkvKiBHZW5lcmFsIE1JREkgY29tcGF0aWJsZSBkZXZpY2UgKi8KKyNkZWZpbmUgU05EUlZfU0VRX1BPUlRfVFlQRV9NSURJX0dTCSgxPDwzKQkvKiBHUyBjb21wYXRpYmxlIGRldmljZSAqLworI2RlZmluZSBTTkRSVl9TRVFfUE9SVF9UWVBFX01JRElfWEcJKDE8PDQpCS8qIFhHIGNvbXBhdGlibGUgZGV2aWNlICovCisjZGVmaW5lIFNORFJWX1NFUV9QT1JUX1RZUEVfTUlESV9NVDMyCSgxPDw1KQkvKiBNVC0zMiBjb21wYXRpYmxlIGRldmljZSAqLworI2RlZmluZSBTTkRSVl9TRVFfUE9SVF9UWVBFX01JRElfR00yCSgxPDw2KQkvKiBHZW5lcmFsIE1JREkgMiBjb21wYXRpYmxlIGRldmljZSAqLworCisvKiBvdGhlciBzdGFuZGFyZHMuLi4qLworI2RlZmluZSBTTkRSVl9TRVFfUE9SVF9UWVBFX1NZTlRICSgxPDwxMCkJLyogU3ludGggZGV2aWNlIChubyBNSURJIGNvbXBhdGlibGUgLSBkaXJlY3Qgd2F2ZXRhYmxlKSAqLworI2RlZmluZSBTTkRSVl9TRVFfUE9SVF9UWVBFX0RJUkVDVF9TQU1QTEUgKDE8PDExKQkvKiBTYW1wbGluZyBkZXZpY2UgKHN1cHBvcnQgc2FtcGxlIGRvd25sb2FkKSAqLworI2RlZmluZSBTTkRSVl9TRVFfUE9SVF9UWVBFX1NBTVBMRQkoMTw8MTIpCS8qIFNhbXBsaW5nIGRldmljZSAoc2FtcGxlIGNhbiBiZSBkb3dubG9hZGVkIGF0IGFueSB0aW1lKSAqLworLyouLi4qLworI2RlZmluZSBTTkRSVl9TRVFfUE9SVF9UWVBFX0FQUExJQ0FUSU9OCSgxPDwyMCkJLyogYXBwbGljYXRpb24gKHNlcXVlbmNlci9lZGl0b3IpICovCisKKy8qIG1pc2MuIGNvbmRpdGlvbmluZyBmbGFncyAqLworI2RlZmluZSBTTkRSVl9TRVFfUE9SVF9GTEdfR0lWRU5fUE9SVAkoMTw8MCkKKyNkZWZpbmUgU05EUlZfU0VRX1BPUlRfRkxHX1RJTUVTVEFNUAkoMTw8MSkKKyNkZWZpbmUgU05EUlZfU0VRX1BPUlRfRkxHX1RJTUVfUkVBTAkoMTw8MikKKworc3RydWN0IHNuZHJ2X3NlcV9wb3J0X2luZm8geworCXN0cnVjdCBzbmRydl9zZXFfYWRkciBhZGRyOwkvKiBjbGllbnQvcG9ydCBudW1iZXJzICovCisJY2hhciBuYW1lWzY0XTsJCQkvKiBwb3J0IG5hbWUgKi8KKworCXVuc2lnbmVkIGludCBjYXBhYmlsaXR5OwkvKiBwb3J0IGNhcGFiaWxpdHkgYml0cyAqLworCXVuc2lnbmVkIGludCB0eXBlOwkJLyogcG9ydCB0eXBlIGJpdHMgKi8KKwlpbnQgbWlkaV9jaGFubmVsczsJCS8qIGNoYW5uZWxzIHBlciBNSURJIHBvcnQgKi8KKwlpbnQgbWlkaV92b2ljZXM7CQkvKiB2b2ljZXMgcGVyIE1JREkgcG9ydCAqLworCWludCBzeW50aF92b2ljZXM7CQkvKiB2b2ljZXMgcGVyIFNZTlRIIHBvcnQgKi8KKworCWludCByZWFkX3VzZTsJCQkvKiBSL086IHN1YnNjcmliZXJzIGZvciBvdXRwdXQgKGZyb20gdGhpcyBwb3J0KSAqLworCWludCB3cml0ZV91c2U7CQkJLyogUi9POiBzdWJzY3JpYmVycyBmb3IgaW5wdXQgKHRvIHRoaXMgcG9ydCkgKi8KKworCXZvaWQgKmtlcm5lbDsJCQkvKiByZXNlcnZlZCBmb3Iga2VybmVsIHVzZSAobXVzdCBiZSBOVUxMKSAqLworCXVuc2lnbmVkIGludCBmbGFnczsJCS8qIG1pc2MuIGNvbmRpdGlvbmluZyAqLworCXVuc2lnbmVkIGNoYXIgdGltZV9xdWV1ZTsJLyogcXVldWUgIyBmb3IgdGltZXN0YW1waW5nICovCisJY2hhciByZXNlcnZlZFs1OV07CQkvKiBmb3IgZnV0dXJlIHVzZSAqLworfTsKKworCisvKiBxdWV1ZSBmbGFncyAqLworI2RlZmluZSBTTkRSVl9TRVFfUVVFVUVfRkxHX1NZTkMJKDE8PDApCS8qIHN5bmMgZW5hYmxlZCAqLworCisvKiBxdWV1ZSBpbmZvcm1hdGlvbiAqLworc3RydWN0IHNuZHJ2X3NlcV9xdWV1ZV9pbmZvIHsKKwlpbnQgcXVldWU7CQkvKiBxdWV1ZSBpZCAqLworCisJLyoKKwkgKiAgc2VjdXJpdHkgc2V0dGluZ3MsIG9ubHkgb3duZXIgb2YgdGhpcyBxdWV1ZSBjYW4gc3RhcnQvc3RvcCB0aW1lcgorCSAqICBldGMuIGlmIHRoZSBxdWV1ZSBpcyBsb2NrZWQgZm9yIG90aGVyIGNsaWVudHMKKwkgKi8KKwlpbnQgb3duZXI7CQkvKiBjbGllbnQgaWQgZm9yIG93bmVyIG9mIHRoZSBxdWV1ZSAqLworCXVuc2lnbmVkIGxvY2tlZDoxOwkvKiB0aW1pbmcgcXVldWUgbG9ja2VkIGZvciBvdGhlciBxdWV1ZXMgKi8KKwljaGFyIG5hbWVbNjRdOwkJLyogbmFtZSBvZiB0aGlzIHF1ZXVlICovCisJdW5zaWduZWQgaW50IGZsYWdzOwkvKiBmbGFncyAqLworCWNoYXIgcmVzZXJ2ZWRbNjBdOwkvKiBmb3IgZnV0dXJlIHVzZSAqLworCit9OworCisvKiBxdWV1ZSBpbmZvL3N0YXR1cyAqLworc3RydWN0IHNuZHJ2X3NlcV9xdWV1ZV9zdGF0dXMgeworCWludCBxdWV1ZTsJCQkvKiBxdWV1ZSBpZCAqLworCWludCBldmVudHM7CQkJLyogcmVhZC1vbmx5IC0gcXVldWUgc2l6ZSAqLworCXNuZHJ2X3NlcV90aWNrX3RpbWVfdCB0aWNrOwkvKiBjdXJyZW50IHRpY2sgKi8KKwlzdHJ1Y3Qgc25kcnZfc2VxX3JlYWxfdGltZSB0aW1lOyAvKiBjdXJyZW50IHRpbWUgKi8KKwlpbnQgcnVubmluZzsJCQkvKiBydW5uaW5nIHN0YXRlIG9mIHF1ZXVlICovCisJaW50IGZsYWdzOwkJCS8qIHZhcmlvdXMgZmxhZ3MgKi8KKwljaGFyIHJlc2VydmVkWzY0XTsJCS8qIGZvciB0aGUgZnV0dXJlICovCit9OworCisKKy8qIHF1ZXVlIHRlbXBvICovCitzdHJ1Y3Qgc25kcnZfc2VxX3F1ZXVlX3RlbXBvIHsKKwlpbnQgcXVldWU7CQkJLyogc2VxdWVuY2VyIHF1ZXVlICovCisJdW5zaWduZWQgaW50IHRlbXBvOwkJLyogY3VycmVudCB0ZW1wbywgdXMvdGljayAqLworCWludCBwcHE7CQkJLyogdGltZSByZXNvbHV0aW9uLCB0aWNrcy9xdWFydGVyICovCisJdW5zaWduZWQgaW50IHNrZXdfdmFsdWU7CS8qIHF1ZXVlIHNrZXcgKi8KKwl1bnNpZ25lZCBpbnQgc2tld19iYXNlOwkJLyogcXVldWUgc2tldyBiYXNlICovCisJY2hhciByZXNlcnZlZFsyNF07CQkvKiBmb3IgdGhlIGZ1dHVyZSAqLworfTsKKworCisvKiBzZXF1ZW5jZXIgdGltZXIgc291cmNlcyAqLworI2RlZmluZSBTTkRSVl9TRVFfVElNRVJfQUxTQQkJMAkvKiBBTFNBIHRpbWVyICovCisjZGVmaW5lIFNORFJWX1NFUV9USU1FUl9NSURJX0NMT0NLCTEJLyogTWlkaSBDbG9jayAoQ0xPQ0sgZXZlbnQpICovCisjZGVmaW5lIFNORFJWX1NFUV9USU1FUl9NSURJX1RJQ0sJMgkvKiBNaWRpIFRpbWVyIFRpY2sgKFRJQ0sgZXZlbnQpICovCisKKy8qIHF1ZXVlIHRpbWVyIGluZm8gKi8KK3N0cnVjdCBzbmRydl9zZXFfcXVldWVfdGltZXIgeworCWludCBxdWV1ZTsJCQkvKiBzZXF1ZW5jZXIgcXVldWUgKi8KKwlpbnQgdHlwZTsJCQkvKiBzb3VyY2UgdGltZXIgdHlwZSAqLworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXN0cnVjdCBzbmRydl90aW1lcl9pZCBpZDsJLyogQUxTQSdzIHRpbWVyIElEICovCisJCQl1bnNpZ25lZCBpbnQgcmVzb2x1dGlvbjsJLyogcmVzb2x1dGlvbiBpbiBIeiAqLworCQl9IGFsc2E7CisJfSB1OworCWNoYXIgcmVzZXJ2ZWRbNjRdOwkJLyogZm9yIHRoZSBmdXR1cmUgdXNlICovCit9OworCisKK3N0cnVjdCBzbmRydl9zZXFfcXVldWVfY2xpZW50IHsKKwlpbnQgcXVldWU7CQkvKiBzZXF1ZW5jZXIgcXVldWUgKi8KKwlpbnQgY2xpZW50OwkJLyogc2VxdWVuY2VyIGNsaWVudCAqLworCWludCB1c2VkOwkJLyogcXVldWUgaXMgdXNlZCB3aXRoIHRoaXMgY2xpZW50CisJCQkJICAgKG11c3QgYmUgc2V0IGZvciBhY2NlcHRpbmcgZXZlbnRzKSAqLworCS8qIHBlciBjbGllbnQgd2F0ZXJtYXJrcyAqLworCWNoYXIgcmVzZXJ2ZWRbNjRdOwkvKiBmb3IgZnV0dXJlIHVzZSAqLworfTsKKworCisjZGVmaW5lIFNORFJWX1NFUV9QT1JUX1NVQlNfRVhDTFVTSVZFCSgxPDwwKQkvKiBleGNsdXNpdmUgY29ubmVjdGlvbiAqLworI2RlZmluZSBTTkRSVl9TRVFfUE9SVF9TVUJTX1RJTUVTVEFNUAkoMTw8MSkKKyNkZWZpbmUgU05EUlZfU0VRX1BPUlRfU1VCU19USU1FX1JFQUwJKDE8PDIpCisKK3N0cnVjdCBzbmRydl9zZXFfcG9ydF9zdWJzY3JpYmUgeworCXN0cnVjdCBzbmRydl9zZXFfYWRkciBzZW5kZXI7CS8qIHNlbmRlciBhZGRyZXNzICovCisJc3RydWN0IHNuZHJ2X3NlcV9hZGRyIGRlc3Q7CS8qIGRlc3RpbmF0aW9uIGFkZHJlc3MgKi8KKwl1bnNpZ25lZCBpbnQgdm9pY2VzOwkJLyogbnVtYmVyIG9mIHZvaWNlcyB0byBiZSBhbGxvY2F0ZWQgKDAgPSBkb24ndCBjYXJlKSAqLworCXVuc2lnbmVkIGludCBmbGFnczsJCS8qIG1vZGVzICovCisJdW5zaWduZWQgY2hhciBxdWV1ZTsJCS8qIGlucHV0IHRpbWUtc3RhbXAgcXVldWUgKG9wdGlvbmFsKSAqLworCXVuc2lnbmVkIGNoYXIgcGFkWzNdOwkJLyogcmVzZXJ2ZWQgKi8KKwljaGFyIHJlc2VydmVkWzY0XTsKK307CisKKy8qIHR5cGUgb2YgcXVlcnkgc3Vic2NyaXB0aW9uICovCisjZGVmaW5lIFNORFJWX1NFUV9RVUVSWV9TVUJTX1JFQUQJMAorI2RlZmluZSBTTkRSVl9TRVFfUVVFUllfU1VCU19XUklURQkxCisKK3N0cnVjdCBzbmRydl9zZXFfcXVlcnlfc3VicyB7CisJc3RydWN0IHNuZHJ2X3NlcV9hZGRyIHJvb3Q7CS8qIGNsaWVudC9wb3J0IGlkIHRvIGJlIHNlYXJjaGVkICovCisJaW50IHR5cGU7CQkvKiBSRUFEIG9yIFdSSVRFICovCisJaW50IGluZGV4OwkJLyogMC4uTi0xICovCisJaW50IG51bV9zdWJzOwkJLyogUi9POiBudW1iZXIgb2Ygc3Vic2NyaXB0aW9ucyBvbiB0aGlzIHBvcnQgKi8KKwlzdHJ1Y3Qgc25kcnZfc2VxX2FkZHIgYWRkcjsJLyogUi9POiByZXN1bHQgKi8KKwl1bnNpZ25lZCBjaGFyIHF1ZXVlOwkvKiBSL086IHJlc3VsdCAqLworCXVuc2lnbmVkIGludCBmbGFnczsJLyogUi9POiByZXN1bHQgKi8KKwljaGFyIHJlc2VydmVkWzY0XTsJLyogZm9yIGZ1dHVyZSB1c2UgKi8KK307CisKKworLyoKKyAqICBJbnN0cnVtZW50IGFic3RyYWN0aW9uIGxheWVyCisgKiAgICAgLSBiYXNlZCBvbiBldmVudHMKKyAqLworCisvKiBpbnN0cnVtZW50IHR5cGVzICovCisjZGVmaW5lIFNORFJWX1NFUV9JTlNUUl9BVFlQRV9EQVRBCTAJLyogaW5zdHJ1bWVudCBkYXRhICovCisjZGVmaW5lIFNORFJWX1NFUV9JTlNUUl9BVFlQRV9BTElBUwkxCS8qIGluc3RydW1lbnQgYWxpYXMgKi8KKworLyogaW5zdHJ1bWVudCBBU0NJSSBpZGVudGlmaWVycyAqLworI2RlZmluZSBTTkRSVl9TRVFfSU5TVFJfSURfRExTMQkJIkRMUzEiCisjZGVmaW5lIFNORFJWX1NFUV9JTlNUUl9JRF9ETFMyCQkiRExTMiIKKyNkZWZpbmUgU05EUlZfU0VRX0lOU1RSX0lEX1NJTVBMRQkiU2ltcGxlIFdhdmUiCisjZGVmaW5lIFNORFJWX1NFUV9JTlNUUl9JRF9TT1VOREZPTlQJIlNvdW5kRm9udCIKKyNkZWZpbmUgU05EUlZfU0VRX0lOU1RSX0lEX0dVU19QQVRDSAkiR1VTIFBhdGNoIgorI2RlZmluZSBTTkRSVl9TRVFfSU5TVFJfSURfSU5URVJXQVZFCSJJbnRlcldhdmUgRkZGRiIKKyNkZWZpbmUgU05EUlZfU0VRX0lOU1RSX0lEX09QTDJfMwkiT1BMMi8zIEZNIgorI2RlZmluZSBTTkRSVl9TRVFfSU5TVFJfSURfT1BMNAkJIk9QTDQiCisKKy8qIGluc3RydW1lbnQgdHlwZXMgKi8KKyNkZWZpbmUgU05EUlZfU0VRX0lOU1RSX1RZUEUwX0RMUzEJKDE8PDApCS8qIE1JREkgRExTIHYxICovCisjZGVmaW5lIFNORFJWX1NFUV9JTlNUUl9UWVBFMF9ETFMyCSgxPDwxKQkvKiBNSURJIERMUyB2MiAqLworI2RlZmluZSBTTkRSVl9TRVFfSU5TVFJfVFlQRTFfU0lNUExFCSgxPDwwKQkvKiBTaW1wbGUgV2F2ZSAqLworI2RlZmluZSBTTkRSVl9TRVFfSU5TVFJfVFlQRTFfU09VTkRGT05UCSgxPDwxKQkvKiBFTVUgU291bmRGb250ICovCisjZGVmaW5lIFNORFJWX1NFUV9JTlNUUl9UWVBFMV9HVVNfUEFUQ0gJKDE8PDIpCS8qIEdyYXZpcyBVbHRyYVNvdW5kIFBhdGNoICovCisjZGVmaW5lIFNORFJWX1NFUV9JTlNUUl9UWVBFMV9JTlRFUldBVkUJKDE8PDMpCS8qIEludGVyV2F2ZSBGRkZGICovCisjZGVmaW5lIFNORFJWX1NFUV9JTlNUUl9UWVBFMl9PUEwyXzMJKDE8PDApCS8qIFlhbWFoYSBPUEwyLzMgRk0gKi8KKyNkZWZpbmUgU05EUlZfU0VRX0lOU1RSX1RZUEUyX09QTDQJKDE8PDEpCS8qIFlhbWFoYSBPUEw0ICovCisKKy8qIHB1dCBjb21tYW5kcyAqLworI2RlZmluZSBTTkRSVl9TRVFfSU5TVFJfUFVUX0NNRF9DUkVBVEUJMAorI2RlZmluZSBTTkRSVl9TRVFfSU5TVFJfUFVUX0NNRF9SRVBMQUNFCTEKKyNkZWZpbmUgU05EUlZfU0VRX0lOU1RSX1BVVF9DTURfTU9ESUZZCTIKKyNkZWZpbmUgU05EUlZfU0VRX0lOU1RSX1BVVF9DTURfQURECTMKKyNkZWZpbmUgU05EUlZfU0VRX0lOU1RSX1BVVF9DTURfUkVNT1ZFCTQKKworLyogZ2V0IGNvbW1hbmRzICovCisjZGVmaW5lIFNORFJWX1NFUV9JTlNUUl9HRVRfQ01EX0ZVTEwJMAorI2RlZmluZSBTTkRSVl9TRVFfSU5TVFJfR0VUX0NNRF9QQVJUSUFMCTEKKworLyogcXVlcnkgZmxhZ3MgKi8KKyNkZWZpbmUgU05EUlZfU0VRX0lOU1RSX1FVRVJZX0ZPTExPV19BTElBUyAoMTw8MCkKKworLyogZnJlZSBjb21tYW5kcyAqLworI2RlZmluZSBTTkRSVl9TRVFfSU5TVFJfRlJFRV9DTURfQUxMCQkwCisjZGVmaW5lIFNORFJWX1NFUV9JTlNUUl9GUkVFX0NNRF9QUklWQVRFCTEKKyNkZWZpbmUgU05EUlZfU0VRX0lOU1RSX0ZSRUVfQ01EX0NMVVNURVIJMgorI2RlZmluZSBTTkRSVl9TRVFfSU5TVFJfRlJFRV9DTURfU0lOR0xFCQkzCisKKy8qIHNpemUgb2YgUk9NL1JBTSAqLwordHlwZWRlZiB1bnNpZ25lZCBpbnQgc25kcnZfc2VxX2luc3RyX3NpemVfdDsKKworLyogSU5TVFJfSU5GTyAqLworCitzdHJ1Y3Qgc25kcnZfc2VxX2luc3RyX2luZm8geworCWludCByZXN1bHQ7CQkJLyogb3BlcmF0aW9uIHJlc3VsdCAqLworCXVuc2lnbmVkIGludCBmb3JtYXRzWzhdOwkvKiBiaXRtYXAgb2Ygc3VwcG9ydGVkIGZvcm1hdHMgKi8KKwlpbnQgcmFtX2NvdW50OwkJCS8qIGNvdW50IG9mIFJBTSBiYW5rcyAqLworCXNuZHJ2X3NlcV9pbnN0cl9zaXplX3QgcmFtX3NpemVzWzE2XTsgLyogc2l6ZSBvZiBSQU0gYmFua3MgKi8KKwlpbnQgcm9tX2NvdW50OwkJCS8qIGNvdW50IG9mIFJPTSBiYW5rcyAqLworCXNuZHJ2X3NlcV9pbnN0cl9zaXplX3Qgcm9tX3NpemVzWzhdOyAvKiBzaXplIG9mIFJPTSBiYW5rcyAqLworCWNoYXIgcmVzZXJ2ZWRbMTI4XTsKK307CisKKy8qIElOU1RSX1NUQVRVUyAqLworCitzdHJ1Y3Qgc25kcnZfc2VxX2luc3RyX3N0YXR1cyB7CisJaW50IHJlc3VsdDsJCQkvKiBvcGVyYXRpb24gcmVzdWx0ICovCisJc25kcnZfc2VxX2luc3RyX3NpemVfdCBmcmVlX3JhbVsxNl07IC8qIGZyZWUgUkFNIGluIGJhbmtzICovCisJaW50IGluc3RydW1lbnRfY291bnQ7CQkvKiBjb3VudCBvZiBkb3dubG9hZGVkIGluc3RydW1lbnRzICovCisJY2hhciByZXNlcnZlZFsxMjhdOworfTsKKworLyogSU5TVFJfRk9STUFUX0lORk8gKi8KKworc3RydWN0IHNuZHJ2X3NlcV9pbnN0cl9mb3JtYXRfaW5mbyB7CisJY2hhciBmb3JtYXRbMTZdOwkJLyogZm9ybWF0IGlkZW50aWZpZXIgLSBTTkRSVl9TRVFfSU5TVFJfSURfKiAqLwkKKwl1bnNpZ25lZCBpbnQgbGVuOwkJLyogbWF4IGRhdGEgbGVuZ3RoICh3aXRob3V0IHRoaXMgc3RydWN0dXJlKSAqLworfTsKKworc3RydWN0IHNuZHJ2X3NlcV9pbnN0cl9mb3JtYXRfaW5mb19yZXN1bHQgeworCWludCByZXN1bHQ7CQkJLyogb3BlcmF0aW9uIHJlc3VsdCAqLworCWNoYXIgZm9ybWF0WzE2XTsJCS8qIGZvcm1hdCBpZGVudGlmaWVyICovCisJdW5zaWduZWQgaW50IGxlbjsJCS8qIGZpbGxlZCBkYXRhIGxlbmd0aCAod2l0aG91dCB0aGlzIHN0cnVjdHVyZSkgKi8KK307CisKKy8qIGluc3RydW1lbnQgZGF0YSAqLworc3RydWN0IHNuZHJ2X3NlcV9pbnN0cl9kYXRhIHsKKwljaGFyIG5hbWVbMzJdOwkJCS8qIGluc3RydW1lbnQgbmFtZSAqLworCWNoYXIgcmVzZXJ2ZWRbMTZdOwkJLyogZm9yIHRoZSBmdXR1cmUgdXNlICovCisJaW50IHR5cGU7CQkJLyogaW5zdHJ1bWVudCB0eXBlICovCisJdW5pb24geworCQljaGFyIGZvcm1hdFsxNl07CS8qIGZvcm1hdCBpZGVudGlmaWVyICovCisJCXN0cnVjdCBzbmRydl9zZXFfaW5zdHIgYWxpYXM7CisJfSBkYXRhOworfTsKKworLyogSU5TVFJfUFVUL0dFVCwgZGF0YSBhcmUgc3RvcmVkIGluIG9uZSBibG9jayAoZXh0ZW5kZWQpLCBoZWFkZXIgKyBkYXRhICovCisKK3N0cnVjdCBzbmRydl9zZXFfaW5zdHJfaGVhZGVyIHsKKwl1bmlvbiB7CisJCXN0cnVjdCBzbmRydl9zZXFfaW5zdHIgaW5zdHI7CisJCXNuZHJ2X3NlcV9pbnN0cl9jbHVzdGVyX3QgY2x1c3RlcjsKKwl9IGlkOwkJCQkvKiBpbnN0cnVtZW50IGlkZW50aWZpZXIgKi8KKwl1bnNpZ25lZCBpbnQgY21kOwkJLyogZ2V0L3B1dC9mcmVlIGNvbW1hbmQgKi8KKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CQkvKiBxdWVyeSBmbGFncyAob25seSBmb3IgZ2V0KSAqLworCXVuc2lnbmVkIGludCBsZW47CQkvKiByZWFsIGluc3RydW1lbnQgZGF0YSBsZW5ndGggKHdpdGhvdXQgaGVhZGVyKSAqLworCWludCByZXN1bHQ7CQkJLyogb3BlcmF0aW9uIHJlc3VsdCAqLworCWNoYXIgcmVzZXJ2ZWRbMTZdOwkJLyogZm9yIHRoZSBmdXR1cmUgKi8KKwlzdHJ1Y3Qgc25kcnZfc2VxX2luc3RyX2RhdGEgZGF0YTsgLyogaW5zdHJ1bWVudCBkYXRhIChmb3IgcHV0L2dldCByZXN1bHQpICovCit9OworCisvKiBJTlNUUl9DTFVTVEVSX1NFVCAqLworCitzdHJ1Y3Qgc25kcnZfc2VxX2luc3RyX2NsdXN0ZXJfc2V0IHsKKwlzbmRydl9zZXFfaW5zdHJfY2x1c3Rlcl90IGNsdXN0ZXI7IC8qIGNsdXN0ZXIgaWRlbnRpZmllciAqLworCWNoYXIgbmFtZVszMl07CQkJLyogY2x1c3RlciBuYW1lICovCisJaW50IHByaW9yaXR5OwkJCS8qIGNsdXN0ZXIgcHJpb3JpdHkgKi8KKwljaGFyIHJlc2VydmVkWzY0XTsJCS8qIGZvciB0aGUgZnV0dXJlIHVzZSAqLworfTsKKworLyogSU5TVFJfQ0xVU1RFUl9HRVQgKi8KKworc3RydWN0IHNuZHJ2X3NlcV9pbnN0cl9jbHVzdGVyX2dldCB7CisJc25kcnZfc2VxX2luc3RyX2NsdXN0ZXJfdCBjbHVzdGVyOyAvKiBjbHVzdGVyIGlkZW50aWZpZXIgKi8KKwljaGFyIG5hbWVbMzJdOwkJCS8qIGNsdXN0ZXIgbmFtZSAqLworCWludCBwcmlvcml0eTsJCQkvKiBjbHVzdGVyIHByaW9yaXR5ICovCisJY2hhciByZXNlcnZlZFs2NF07CQkvKiBmb3IgdGhlIGZ1dHVyZSB1c2UgKi8KK307CisKKy8qCisgKiAgSU9DVEwgY29tbWFuZHMKKyAqLworCisjZGVmaW5lIFNORFJWX1NFUV9JT0NUTF9QVkVSU0lPTglfSU9SICgnUycsIDB4MDAsIGludCkKKyNkZWZpbmUgU05EUlZfU0VRX0lPQ1RMX0NMSUVOVF9JRAlfSU9SICgnUycsIDB4MDEsIGludCkKKyNkZWZpbmUgU05EUlZfU0VRX0lPQ1RMX1NZU1RFTV9JTkZPCV9JT1dSKCdTJywgMHgwMiwgc3RydWN0IHNuZHJ2X3NlcV9zeXN0ZW1faW5mbykKKyNkZWZpbmUgU05EUlZfU0VRX0lPQ1RMX1JVTk5JTkdfTU9ERQlfSU9XUignUycsIDB4MDMsIHN0cnVjdCBzbmRydl9zZXFfcnVubmluZ19pbmZvKQorCisjZGVmaW5lIFNORFJWX1NFUV9JT0NUTF9HRVRfQ0xJRU5UX0lORk8JX0lPV1IoJ1MnLCAweDEwLCBzdHJ1Y3Qgc25kcnZfc2VxX2NsaWVudF9pbmZvKQorI2RlZmluZSBTTkRSVl9TRVFfSU9DVExfU0VUX0NMSUVOVF9JTkZPCV9JT1cgKCdTJywgMHgxMSwgc3RydWN0IHNuZHJ2X3NlcV9jbGllbnRfaW5mbykKKworI2RlZmluZSBTTkRSVl9TRVFfSU9DVExfQ1JFQVRFX1BPUlQJX0lPV1IoJ1MnLCAweDIwLCBzdHJ1Y3Qgc25kcnZfc2VxX3BvcnRfaW5mbykKKyNkZWZpbmUgU05EUlZfU0VRX0lPQ1RMX0RFTEVURV9QT1JUCV9JT1cgKCdTJywgMHgyMSwgc3RydWN0IHNuZHJ2X3NlcV9wb3J0X2luZm8pCisjZGVmaW5lIFNORFJWX1NFUV9JT0NUTF9HRVRfUE9SVF9JTkZPCV9JT1dSKCdTJywgMHgyMiwgc3RydWN0IHNuZHJ2X3NlcV9wb3J0X2luZm8pCisjZGVmaW5lIFNORFJWX1NFUV9JT0NUTF9TRVRfUE9SVF9JTkZPCV9JT1cgKCdTJywgMHgyMywgc3RydWN0IHNuZHJ2X3NlcV9wb3J0X2luZm8pCisKKyNkZWZpbmUgU05EUlZfU0VRX0lPQ1RMX1NVQlNDUklCRV9QT1JUCV9JT1cgKCdTJywgMHgzMCwgc3RydWN0IHNuZHJ2X3NlcV9wb3J0X3N1YnNjcmliZSkKKyNkZWZpbmUgU05EUlZfU0VRX0lPQ1RMX1VOU1VCU0NSSUJFX1BPUlQgX0lPVyAoJ1MnLCAweDMxLCBzdHJ1Y3Qgc25kcnZfc2VxX3BvcnRfc3Vic2NyaWJlKQorCisjZGVmaW5lIFNORFJWX1NFUV9JT0NUTF9DUkVBVEVfUVVFVUUJX0lPV1IoJ1MnLCAweDMyLCBzdHJ1Y3Qgc25kcnZfc2VxX3F1ZXVlX2luZm8pCisjZGVmaW5lIFNORFJWX1NFUV9JT0NUTF9ERUxFVEVfUVVFVUUJX0lPVyAoJ1MnLCAweDMzLCBzdHJ1Y3Qgc25kcnZfc2VxX3F1ZXVlX2luZm8pCisjZGVmaW5lIFNORFJWX1NFUV9JT0NUTF9HRVRfUVVFVUVfSU5GTwlfSU9XUignUycsIDB4MzQsIHN0cnVjdCBzbmRydl9zZXFfcXVldWVfaW5mbykKKyNkZWZpbmUgU05EUlZfU0VRX0lPQ1RMX1NFVF9RVUVVRV9JTkZPCV9JT1dSKCdTJywgMHgzNSwgc3RydWN0IHNuZHJ2X3NlcV9xdWV1ZV9pbmZvKQorI2RlZmluZSBTTkRSVl9TRVFfSU9DVExfR0VUX05BTUVEX1FVRVVFCV9JT1dSKCdTJywgMHgzNiwgc3RydWN0IHNuZHJ2X3NlcV9xdWV1ZV9pbmZvKQorI2RlZmluZSBTTkRSVl9TRVFfSU9DVExfR0VUX1FVRVVFX1NUQVRVUyBfSU9XUignUycsIDB4NDAsIHN0cnVjdCBzbmRydl9zZXFfcXVldWVfc3RhdHVzKQorI2RlZmluZSBTTkRSVl9TRVFfSU9DVExfR0VUX1FVRVVFX1RFTVBPCV9JT1dSKCdTJywgMHg0MSwgc3RydWN0IHNuZHJ2X3NlcV9xdWV1ZV90ZW1wbykKKyNkZWZpbmUgU05EUlZfU0VRX0lPQ1RMX1NFVF9RVUVVRV9URU1QTwlfSU9XICgnUycsIDB4NDIsIHN0cnVjdCBzbmRydl9zZXFfcXVldWVfdGVtcG8pCisjZGVmaW5lIFNORFJWX1NFUV9JT0NUTF9HRVRfUVVFVUVfT1dORVIJX0lPV1IoJ1MnLCAweDQzLCBzdHJ1Y3Qgc25kcnZfc2VxX3F1ZXVlX293bmVyKQorI2RlZmluZSBTTkRSVl9TRVFfSU9DVExfU0VUX1FVRVVFX09XTkVSCV9JT1cgKCdTJywgMHg0NCwgc3RydWN0IHNuZHJ2X3NlcV9xdWV1ZV9vd25lcikKKyNkZWZpbmUgU05EUlZfU0VRX0lPQ1RMX0dFVF9RVUVVRV9USU1FUglfSU9XUignUycsIDB4NDUsIHN0cnVjdCBzbmRydl9zZXFfcXVldWVfdGltZXIpCisjZGVmaW5lIFNORFJWX1NFUV9JT0NUTF9TRVRfUVVFVUVfVElNRVIJX0lPVyAoJ1MnLCAweDQ2LCBzdHJ1Y3Qgc25kcnZfc2VxX3F1ZXVlX3RpbWVyKQorLyogWFhYCisjZGVmaW5lIFNORFJWX1NFUV9JT0NUTF9HRVRfUVVFVUVfU1lOQwlfSU9XUignUycsIDB4NTMsIHN0cnVjdCBzbmRydl9zZXFfcXVldWVfc3luYykKKyNkZWZpbmUgU05EUlZfU0VRX0lPQ1RMX1NFVF9RVUVVRV9TWU5DCV9JT1cgKCdTJywgMHg1NCwgc3RydWN0IHNuZHJ2X3NlcV9xdWV1ZV9zeW5jKQorKi8KKyNkZWZpbmUgU05EUlZfU0VRX0lPQ1RMX0dFVF9RVUVVRV9DTElFTlQJX0lPV1IoJ1MnLCAweDQ5LCBzdHJ1Y3Qgc25kcnZfc2VxX3F1ZXVlX2NsaWVudCkKKyNkZWZpbmUgU05EUlZfU0VRX0lPQ1RMX1NFVF9RVUVVRV9DTElFTlQJX0lPVyAoJ1MnLCAweDRhLCBzdHJ1Y3Qgc25kcnZfc2VxX3F1ZXVlX2NsaWVudCkKKyNkZWZpbmUgU05EUlZfU0VRX0lPQ1RMX0dFVF9DTElFTlRfUE9PTAlfSU9XUignUycsIDB4NGIsIHN0cnVjdCBzbmRydl9zZXFfY2xpZW50X3Bvb2wpCisjZGVmaW5lIFNORFJWX1NFUV9JT0NUTF9TRVRfQ0xJRU5UX1BPT0wJX0lPVyAoJ1MnLCAweDRjLCBzdHJ1Y3Qgc25kcnZfc2VxX2NsaWVudF9wb29sKQorI2RlZmluZSBTTkRSVl9TRVFfSU9DVExfUkVNT1ZFX0VWRU5UUwlfSU9XICgnUycsIDB4NGUsIHN0cnVjdCBzbmRydl9zZXFfcmVtb3ZlX2V2ZW50cykKKyNkZWZpbmUgU05EUlZfU0VRX0lPQ1RMX1FVRVJZX1NVQlMJX0lPV1IoJ1MnLCAweDRmLCBzdHJ1Y3Qgc25kcnZfc2VxX3F1ZXJ5X3N1YnMpCisjZGVmaW5lIFNORFJWX1NFUV9JT0NUTF9HRVRfU1VCU0NSSVBUSU9OCV9JT1dSKCdTJywgMHg1MCwgc3RydWN0IHNuZHJ2X3NlcV9wb3J0X3N1YnNjcmliZSkKKyNkZWZpbmUgU05EUlZfU0VRX0lPQ1RMX1FVRVJZX05FWFRfQ0xJRU5UCV9JT1dSKCdTJywgMHg1MSwgc3RydWN0IHNuZHJ2X3NlcV9jbGllbnRfaW5mbykKKyNkZWZpbmUgU05EUlZfU0VRX0lPQ1RMX1FVRVJZX05FWFRfUE9SVAlfSU9XUignUycsIDB4NTIsIHN0cnVjdCBzbmRydl9zZXFfcG9ydF9pbmZvKQorCisjZW5kaWYgLyogX19TT1VORF9BU0VRVUVOQ0VSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvYXNvdW5kLmggYi9pbmNsdWRlL3NvdW5kL2Fzb3VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0ZDE0OWYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3NvdW5kL2Fzb3VuZC5oCkBAIC0wLDAgKzEsOTI3IEBACisvKgorICogIEFkdmFuY2VkIExpbnV4IFNvdW5kIEFyY2hpdGVjdHVyZSAtIEFMU0EgLSBEcml2ZXIKKyAqICBDb3B5cmlnaHQgKGMpIDE5OTQtMjAwMyBieSBKYXJvc2xhdiBLeXNlbGEgPHBlcmV4QHN1c2UuY3o+LAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFicmFtbyBCYWduYXJhIDxhYnJhbW9AYWxzYS1wcm9qZWN0Lm9yZz4KKyAqCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICoKKyAqLworCisjaWZuZGVmIF9fU09VTkRfQVNPVU5EX0gKKyNkZWZpbmUgX19TT1VORF9BU09VTkRfSAorCisjaWYgZGVmaW5lZChMSU5VWCkgfHwgZGVmaW5lZChfX0xJTlVYX18pIHx8IGRlZmluZWQoX19saW51eF9fKQorCisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKworI2lmZGVmICBfX0xJVFRMRV9FTkRJQU4KKyNkZWZpbmUgU05EUlZfTElUVExFX0VORElBTgorI2Vsc2UKKyNpZmRlZiBfX0JJR19FTkRJQU4KKyNkZWZpbmUgU05EUlZfQklHX0VORElBTgorI2Vsc2UKKyNlcnJvciAiVW5zdXBwb3J0ZWQgZW5kaWFuLi4uIgorI2VuZGlmCisjZW5kaWYKKworI2Vsc2UgLyogIV9fS0VSTkVMX18gKi8KKworI2luY2x1ZGUgPGVuZGlhbi5oPgorI2lmIF9fQllURV9PUkRFUiA9PSBfX0xJVFRMRV9FTkRJQU4KKyNkZWZpbmUgU05EUlZfTElUVExFX0VORElBTgorI2VsaWYgX19CWVRFX09SREVSID09IF9fQklHX0VORElBTgorI2RlZmluZSBTTkRSVl9CSUdfRU5ESUFOCisjZWxzZQorI2Vycm9yICJVbnN1cHBvcnRlZCBlbmRpYW4uLi4iCisjZW5kaWYKKworI2VuZGlmIC8qIF9fS0VSTkVMICoqLworCisjZW5kaWYgLyogTElOVVggKi8KKworI2lmbmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorCisvKgorICogIHByb3RvY29sIHZlcnNpb24KKyAqLworCisjZGVmaW5lIFNORFJWX1BST1RPQ09MX1ZFUlNJT04obWFqb3IsIG1pbm9yLCBzdWJtaW5vcikgKCgobWFqb3IpPDwxNil8KChtaW5vcik8PDgpfChzdWJtaW5vcikpCisjZGVmaW5lIFNORFJWX1BST1RPQ09MX01BSk9SKHZlcnNpb24pICgoKHZlcnNpb24pPj4xNikmMHhmZmZmKQorI2RlZmluZSBTTkRSVl9QUk9UT0NPTF9NSU5PUih2ZXJzaW9uKSAoKCh2ZXJzaW9uKT4+OCkmMHhmZikKKyNkZWZpbmUgU05EUlZfUFJPVE9DT0xfTUlDUk8odmVyc2lvbikgKCh2ZXJzaW9uKSYweGZmKQorI2RlZmluZSBTTkRSVl9QUk9UT0NPTF9JTkNPTVBBVElCTEUoa3ZlcnNpb24sIHV2ZXJzaW9uKSBcCisJKFNORFJWX1BST1RPQ09MX01BSk9SKGt2ZXJzaW9uKSAhPSBTTkRSVl9QUk9UT0NPTF9NQUpPUih1dmVyc2lvbikgfHwgXAorCSAoU05EUlZfUFJPVE9DT0xfTUFKT1Ioa3ZlcnNpb24pID09IFNORFJWX1BST1RPQ09MX01BSk9SKHV2ZXJzaW9uKSAmJiBcCisJICAgU05EUlZfUFJPVE9DT0xfTUlOT1Ioa3ZlcnNpb24pICE9IFNORFJWX1BST1RPQ09MX01JTk9SKHV2ZXJzaW9uKSkpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgIERpZ2l0YWwgYXVkaW8gaW50ZXJmYWNlCQkJCQkgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdHJ1Y3Qgc25kcnZfYWVzX2llYzk1OCB7CisJdW5zaWduZWQgY2hhciBzdGF0dXNbMjRdOwkvKiBBRVMvSUVDOTU4IGNoYW5uZWwgc3RhdHVzIGJpdHMgKi8KKwl1bnNpZ25lZCBjaGFyIHN1YmNvZGVbMTQ3XTsJLyogQUVTL0lFQzk1OCBzdWJjb2RlIGJpdHMgKi8KKwl1bnNpZ25lZCBjaGFyIHBhZDsJCS8qIG5vdGhpbmcgKi8KKwl1bnNpZ25lZCBjaGFyIGRpZ19zdWJmcmFtZVs0XTsJLyogQUVTL0lFQzk1OCBzdWJmcmFtZSBiaXRzICovCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgU2VjdGlvbiBmb3IgZHJpdmVyIGhhcmR3YXJlIGRlcGVuZGVudCBpbnRlcmZhY2UgLSAvZGV2L3NuZC9odz8gICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgU05EUlZfSFdERVBfVkVSU0lPTgkJU05EUlZfUFJPVE9DT0xfVkVSU0lPTigxLCAwLCAxKQorCitlbnVtIHNuZHJ2X2h3ZGVwX2lmYWNlIHsKKwlTTkRSVl9IV0RFUF9JRkFDRV9PUEwyID0gMCwKKwlTTkRSVl9IV0RFUF9JRkFDRV9PUEwzLAorCVNORFJWX0hXREVQX0lGQUNFX09QTDQsCisJU05EUlZfSFdERVBfSUZBQ0VfU0IxNkNTUCwJLyogQ3JlYXRpdmUgU2lnbmFsIFByb2Nlc3NvciAqLworCVNORFJWX0hXREVQX0lGQUNFX0VNVTEwSzEsCS8qIEZYODAxMCBwcm9jZXNzb3IgaW4gRU1VMTBLMSBjaGlwICovCisJU05EUlZfSFdERVBfSUZBQ0VfWVNTMjI1LAkvKiBZYW1haGEgRlggcHJvY2Vzc29yICovCisJU05EUlZfSFdERVBfSUZBQ0VfSUNTMjExNSwJLyogV2F2ZXRhYmxlIHN5bnRoICovCisJU05EUlZfSFdERVBfSUZBQ0VfU1NDQVBFLAkvKiBFbnNvbmlxIFNvdW5kU2NhcGUgSVNBIGNhcmQgKE1DNjhFQzAwMCkgKi8KKwlTTkRSVl9IV0RFUF9JRkFDRV9WWCwJCS8qIERpZ2lncmFtIFZYIGNhcmRzICovCisJU05EUlZfSFdERVBfSUZBQ0VfTUlYQVJULAkvKiBEaWdpZ3JhbSBtaVhhcnQgY2FyZHMgKi8KKwlTTkRSVl9IV0RFUF9JRkFDRV9VU1gyWSwJLyogVGFzY2FtIFVTMTIyLCBVUzIyNCAmIFVTNDI4IHVzYiAqLworCVNORFJWX0hXREVQX0lGQUNFX0VNVVhfV0FWRVRBQkxFLCAvKiBFbXVYIHdhdmV0YWJsZSAqLwkKKwlTTkRSVl9IV0RFUF9JRkFDRV9CTFVFVE9PVEgsCS8qIEJsdWV0b290aCBhdWRpbyAqLworCVNORFJWX0hXREVQX0lGQUNFX1VTWDJZX1BDTSwJLyogVGFzY2FtIFVTMTIyLCBVUzIyNCAmIFVTNDI4IHJhd3VzYiBwY20gKi8KKwlTTkRSVl9IV0RFUF9JRkFDRV9QQ1hIUiwJLyogRGlnaWdyYW0gUENYSFIgKi8KKworCS8qIERvbid0IGZvcmdldCB0byBjaGFuZ2UgdGhlIGZvbGxvd2luZzogKi8KKwlTTkRSVl9IV0RFUF9JRkFDRV9MQVNUID0gU05EUlZfSFdERVBfSUZBQ0VfUENYSFIKK307CisKK3N0cnVjdCBzbmRydl9od2RlcF9pbmZvIHsKKwl1bnNpZ25lZCBpbnQgZGV2aWNlOwkJLyogV1I6IGRldmljZSBudW1iZXIgKi8KKwlpbnQgY2FyZDsJCQkvKiBSOiBjYXJkIG51bWJlciAqLworCXVuc2lnbmVkIGNoYXIgaWRbNjRdOwkJLyogSUQgKHVzZXIgc2VsZWN0YWJsZSkgKi8KKwl1bnNpZ25lZCBjaGFyIG5hbWVbODBdOwkJLyogaHdkZXAgbmFtZSAqLworCWVudW0gc25kcnZfaHdkZXBfaWZhY2UgaWZhY2U7CS8qIGh3ZGVwIGludGVyZmFjZSAqLworCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRbNjRdOwkvKiByZXNlcnZlZCBmb3IgZnV0dXJlICovCit9OworCisvKiBnZW5lcmljIERTUCBsb2FkZXIgKi8KK3N0cnVjdCBzbmRydl9od2RlcF9kc3Bfc3RhdHVzIHsKKwl1bnNpZ25lZCBpbnQgdmVyc2lvbjsJCS8qIFI6IGRyaXZlci1zcGVjaWZpYyB2ZXJzaW9uICovCisJdW5zaWduZWQgY2hhciBpZFszMl07CQkvKiBSOiBkcml2ZXItc3BlY2lmaWMgSUQgc3RyaW5nICovCisJdW5zaWduZWQgaW50IG51bV9kc3BzOwkJLyogUjogbnVtYmVyIG9mIERTUCBpbWFnZXMgdG8gdHJhbnNmZXIgKi8KKwl1bnNpZ25lZCBpbnQgZHNwX2xvYWRlZDsJLyogUjogYml0IGZsYWdzIGluZGljYXRpbmcgdGhlIGxvYWRlZCBEU1BzICovCisJdW5zaWduZWQgaW50IGNoaXBfcmVhZHk7CS8qIFI6IDEgPSBpbml0aWFsaXphdGlvbiBmaW5pc2hlZCAqLworCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRbMTZdOwkvKiByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqLworfTsKKworc3RydWN0IHNuZHJ2X2h3ZGVwX2RzcF9pbWFnZSB7CisJdW5zaWduZWQgaW50IGluZGV4OwkJLyogVzogRFNQIGluZGV4ICovCisJdW5zaWduZWQgY2hhciBuYW1lWzY0XTsJCS8qIFc6IElEIChlLmcuIGZpbGUgbmFtZSkgKi8KKwl1bnNpZ25lZCBjaGFyIF9fdXNlciAqaW1hZ2U7CS8qIFc6IGJpbmFyeSBpbWFnZSAqLworCXNpemVfdCBsZW5ndGg7CQkJLyogVzogc2l6ZSBvZiBpbWFnZSBpbiBieXRlcyAqLworCXVuc2lnbmVkIGxvbmcgZHJpdmVyX2RhdGE7CS8qIFc6IGRyaXZlci1zcGVjaWZpYyBkYXRhICovCit9OworCitlbnVtIHsKKwlTTkRSVl9IV0RFUF9JT0NUTF9QVkVSU0lPTiA9IF9JT1IgKCdIJywgMHgwMCwgaW50KSwKKwlTTkRSVl9IV0RFUF9JT0NUTF9JTkZPID0gX0lPUiAoJ0gnLCAweDAxLCBzdHJ1Y3Qgc25kcnZfaHdkZXBfaW5mbyksCisJU05EUlZfSFdERVBfSU9DVExfRFNQX1NUQVRVUyA9IF9JT1IoJ0gnLCAweDAyLCBzdHJ1Y3Qgc25kcnZfaHdkZXBfZHNwX3N0YXR1cyksCisJU05EUlZfSFdERVBfSU9DVExfRFNQX0xPQUQgICA9IF9JT1coJ0gnLCAweDAzLCBzdHJ1Y3Qgc25kcnZfaHdkZXBfZHNwX2ltYWdlKQorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgIERpZ2l0YWwgQXVkaW8gKFBDTSkgaW50ZXJmYWNlIC0gL2Rldi9zbmQvcGNtPz8gICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgU05EUlZfUENNX1ZFUlNJT04JCVNORFJWX1BST1RPQ09MX1ZFUlNJT04oMiwgMCwgNykKKwordHlwZWRlZiB1bnNpZ25lZCBsb25nIHNuZHJ2X3BjbV91ZnJhbWVzX3Q7Cit0eXBlZGVmIGxvbmcgc25kcnZfcGNtX3NmcmFtZXNfdDsKKworZW51bSBzbmRydl9wY21fY2xhc3MgeworCVNORFJWX1BDTV9DTEFTU19HRU5FUklDID0gMCwJLyogc3RhbmRhcmQgbW9ubyBvciBzdGVyZW8gZGV2aWNlICovCisJU05EUlZfUENNX0NMQVNTX01VTFRJLAkJLyogbXVsdGljaGFubmVsIGRldmljZSAqLworCVNORFJWX1BDTV9DTEFTU19NT0RFTSwJCS8qIHNvZnR3YXJlIG1vZGVtIGNsYXNzICovCisJU05EUlZfUENNX0NMQVNTX0RJR0lUSVpFUiwJLyogZGlnaXRpemVyIGNsYXNzICovCisJLyogRG9uJ3QgZm9yZ2V0IHRvIGNoYW5nZSB0aGUgZm9sbG93aW5nOiAqLworCVNORFJWX1BDTV9DTEFTU19MQVNUID0gU05EUlZfUENNX0NMQVNTX0RJR0lUSVpFUiwKK307CisKK2VudW0gc25kcnZfcGNtX3N1YmNsYXNzIHsKKwlTTkRSVl9QQ01fU1VCQ0xBU1NfR0VORVJJQ19NSVggPSAwLCAvKiBtb25vIG9yIHN0ZXJlbyBzdWJkZXZpY2VzIGFyZSBtaXhlZCB0b2dldGhlciAqLworCVNORFJWX1BDTV9TVUJDTEFTU19NVUxUSV9NSVgsCS8qIG11bHRpY2hhbm5lbCBzdWJkZXZpY2VzIGFyZSBtaXhlZCB0b2dldGhlciAqLworCS8qIERvbid0IGZvcmdldCB0byBjaGFuZ2UgdGhlIGZvbGxvd2luZzogKi8KKwlTTkRSVl9QQ01fU1VCQ0xBU1NfTEFTVCA9IFNORFJWX1BDTV9TVUJDTEFTU19NVUxUSV9NSVgsCit9OworCitlbnVtIHNuZHJ2X3BjbV9zdHJlYW0geworCVNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0sgPSAwLAorCVNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSwKKwlTTkRSVl9QQ01fU1RSRUFNX0xBU1QgPSBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUsCit9OworCitlbnVtIHNuZHJ2X3BjbV9hY2Nlc3MgeworCVNORFJWX1BDTV9BQ0NFU1NfTU1BUF9JTlRFUkxFQVZFRCA9IDAsCS8qIGludGVybGVhdmVkIG1tYXAgKi8KKwlTTkRSVl9QQ01fQUNDRVNTX01NQVBfTk9OSU5URVJMRUFWRUQsIAkvKiBub25pbnRlcmxlYXZlZCBtbWFwICovCisJU05EUlZfUENNX0FDQ0VTU19NTUFQX0NPTVBMRVgsCQkvKiBjb21wbGV4IG1tYXAgKi8KKwlTTkRSVl9QQ01fQUNDRVNTX1JXX0lOVEVSTEVBVkVELAkvKiByZWFkaS93cml0ZWkgKi8KKwlTTkRSVl9QQ01fQUNDRVNTX1JXX05PTklOVEVSTEVBVkVELAkvKiByZWFkbi93cml0ZW4gKi8KKwlTTkRSVl9QQ01fQUNDRVNTX0xBU1QgPSBTTkRSVl9QQ01fQUNDRVNTX1JXX05PTklOVEVSTEVBVkVELAorfTsKKworZW51bSBzbmRydl9wY21fZm9ybWF0IHsKKwlTTkRSVl9QQ01fRk9STUFUX1M4ID0gMCwKKwlTTkRSVl9QQ01fRk9STUFUX1U4LAorCVNORFJWX1BDTV9GT1JNQVRfUzE2X0xFLAorCVNORFJWX1BDTV9GT1JNQVRfUzE2X0JFLAorCVNORFJWX1BDTV9GT1JNQVRfVTE2X0xFLAorCVNORFJWX1BDTV9GT1JNQVRfVTE2X0JFLAorCVNORFJWX1BDTV9GT1JNQVRfUzI0X0xFLAkvKiBsb3cgdGhyZWUgYnl0ZXMgKi8KKwlTTkRSVl9QQ01fRk9STUFUX1MyNF9CRSwJLyogbG93IHRocmVlIGJ5dGVzICovCisJU05EUlZfUENNX0ZPUk1BVF9VMjRfTEUsCS8qIGxvdyB0aHJlZSBieXRlcyAqLworCVNORFJWX1BDTV9GT1JNQVRfVTI0X0JFLAkvKiBsb3cgdGhyZWUgYnl0ZXMgKi8KKwlTTkRSVl9QQ01fRk9STUFUX1MzMl9MRSwKKwlTTkRSVl9QQ01fRk9STUFUX1MzMl9CRSwKKwlTTkRSVl9QQ01fRk9STUFUX1UzMl9MRSwKKwlTTkRSVl9QQ01fRk9STUFUX1UzMl9CRSwKKwlTTkRSVl9QQ01fRk9STUFUX0ZMT0FUX0xFLAkvKiA0LWJ5dGUgZmxvYXQsIElFRUUtNzU0IDMyLWJpdCwgcmFuZ2UgLTEuMCB0byAxLjAgKi8KKwlTTkRSVl9QQ01fRk9STUFUX0ZMT0FUX0JFLAkvKiA0LWJ5dGUgZmxvYXQsIElFRUUtNzU0IDMyLWJpdCwgcmFuZ2UgLTEuMCB0byAxLjAgKi8KKwlTTkRSVl9QQ01fRk9STUFUX0ZMT0FUNjRfTEUsCS8qIDgtYnl0ZSBmbG9hdCwgSUVFRS03NTQgNjQtYml0LCByYW5nZSAtMS4wIHRvIDEuMCAqLworCVNORFJWX1BDTV9GT1JNQVRfRkxPQVQ2NF9CRSwJLyogOC1ieXRlIGZsb2F0LCBJRUVFLTc1NCA2NC1iaXQsIHJhbmdlIC0xLjAgdG8gMS4wICovCisJU05EUlZfUENNX0ZPUk1BVF9JRUM5NThfU1VCRlJBTUVfTEUsCS8qIElFQy05NTggc3ViZnJhbWUsIExpdHRsZSBFbmRpYW4gKi8KKwlTTkRSVl9QQ01fRk9STUFUX0lFQzk1OF9TVUJGUkFNRV9CRSwJLyogSUVDLTk1OCBzdWJmcmFtZSwgQmlnIEVuZGlhbiAqLworCVNORFJWX1BDTV9GT1JNQVRfTVVfTEFXLAorCVNORFJWX1BDTV9GT1JNQVRfQV9MQVcsCisJU05EUlZfUENNX0ZPUk1BVF9JTUFfQURQQ00sCisJU05EUlZfUENNX0ZPUk1BVF9NUEVHLAorCVNORFJWX1BDTV9GT1JNQVRfR1NNLAorCVNORFJWX1BDTV9GT1JNQVRfU1BFQ0lBTCA9IDMxLAorCVNORFJWX1BDTV9GT1JNQVRfUzI0XzNMRSA9IDMyLAkvKiBpbiB0aHJlZSBieXRlcyAqLworCVNORFJWX1BDTV9GT1JNQVRfUzI0XzNCRSwJLyogaW4gdGhyZWUgYnl0ZXMgKi8KKwlTTkRSVl9QQ01fRk9STUFUX1UyNF8zTEUsCS8qIGluIHRocmVlIGJ5dGVzICovCisJU05EUlZfUENNX0ZPUk1BVF9VMjRfM0JFLAkvKiBpbiB0aHJlZSBieXRlcyAqLworCVNORFJWX1BDTV9GT1JNQVRfUzIwXzNMRSwJLyogaW4gdGhyZWUgYnl0ZXMgKi8KKwlTTkRSVl9QQ01fRk9STUFUX1MyMF8zQkUsCS8qIGluIHRocmVlIGJ5dGVzICovCisJU05EUlZfUENNX0ZPUk1BVF9VMjBfM0xFLAkvKiBpbiB0aHJlZSBieXRlcyAqLworCVNORFJWX1BDTV9GT1JNQVRfVTIwXzNCRSwJLyogaW4gdGhyZWUgYnl0ZXMgKi8KKwlTTkRSVl9QQ01fRk9STUFUX1MxOF8zTEUsCS8qIGluIHRocmVlIGJ5dGVzICovCisJU05EUlZfUENNX0ZPUk1BVF9TMThfM0JFLAkvKiBpbiB0aHJlZSBieXRlcyAqLworCVNORFJWX1BDTV9GT1JNQVRfVTE4XzNMRSwJLyogaW4gdGhyZWUgYnl0ZXMgKi8KKwlTTkRSVl9QQ01fRk9STUFUX1UxOF8zQkUsCS8qIGluIHRocmVlIGJ5dGVzICovCisJU05EUlZfUENNX0ZPUk1BVF9MQVNUID0gU05EUlZfUENNX0ZPUk1BVF9VMThfM0JFLAorCisjaWZkZWYgU05EUlZfTElUVExFX0VORElBTgorCVNORFJWX1BDTV9GT1JNQVRfUzE2ID0gU05EUlZfUENNX0ZPUk1BVF9TMTZfTEUsCisJU05EUlZfUENNX0ZPUk1BVF9VMTYgPSBTTkRSVl9QQ01fRk9STUFUX1UxNl9MRSwKKwlTTkRSVl9QQ01fRk9STUFUX1MyNCA9IFNORFJWX1BDTV9GT1JNQVRfUzI0X0xFLAorCVNORFJWX1BDTV9GT1JNQVRfVTI0ID0gU05EUlZfUENNX0ZPUk1BVF9VMjRfTEUsCisJU05EUlZfUENNX0ZPUk1BVF9TMzIgPSBTTkRSVl9QQ01fRk9STUFUX1MzMl9MRSwKKwlTTkRSVl9QQ01fRk9STUFUX1UzMiA9IFNORFJWX1BDTV9GT1JNQVRfVTMyX0xFLAorCVNORFJWX1BDTV9GT1JNQVRfRkxPQVQgPSBTTkRSVl9QQ01fRk9STUFUX0ZMT0FUX0xFLAorCVNORFJWX1BDTV9GT1JNQVRfRkxPQVQ2NCA9IFNORFJWX1BDTV9GT1JNQVRfRkxPQVQ2NF9MRSwKKwlTTkRSVl9QQ01fRk9STUFUX0lFQzk1OF9TVUJGUkFNRSA9IFNORFJWX1BDTV9GT1JNQVRfSUVDOTU4X1NVQkZSQU1FX0xFLAorI2VuZGlmCisjaWZkZWYgU05EUlZfQklHX0VORElBTgorCVNORFJWX1BDTV9GT1JNQVRfUzE2ID0gU05EUlZfUENNX0ZPUk1BVF9TMTZfQkUsCisJU05EUlZfUENNX0ZPUk1BVF9VMTYgPSBTTkRSVl9QQ01fRk9STUFUX1UxNl9CRSwKKwlTTkRSVl9QQ01fRk9STUFUX1MyNCA9IFNORFJWX1BDTV9GT1JNQVRfUzI0X0JFLAorCVNORFJWX1BDTV9GT1JNQVRfVTI0ID0gU05EUlZfUENNX0ZPUk1BVF9VMjRfQkUsCisJU05EUlZfUENNX0ZPUk1BVF9TMzIgPSBTTkRSVl9QQ01fRk9STUFUX1MzMl9CRSwKKwlTTkRSVl9QQ01fRk9STUFUX1UzMiA9IFNORFJWX1BDTV9GT1JNQVRfVTMyX0JFLAorCVNORFJWX1BDTV9GT1JNQVRfRkxPQVQgPSBTTkRSVl9QQ01fRk9STUFUX0ZMT0FUX0JFLAorCVNORFJWX1BDTV9GT1JNQVRfRkxPQVQ2NCA9IFNORFJWX1BDTV9GT1JNQVRfRkxPQVQ2NF9CRSwKKwlTTkRSVl9QQ01fRk9STUFUX0lFQzk1OF9TVUJGUkFNRSA9IFNORFJWX1BDTV9GT1JNQVRfSUVDOTU4X1NVQkZSQU1FX0JFLAorI2VuZGlmCit9OworCitlbnVtIHNuZHJ2X3BjbV9zdWJmb3JtYXQgeworCVNORFJWX1BDTV9TVUJGT1JNQVRfU1REID0gMCwKKwlTTkRSVl9QQ01fU1VCRk9STUFUX0xBU1QgPSBTTkRSVl9QQ01fU1VCRk9STUFUX1NURCwKK307CisKKyNkZWZpbmUgU05EUlZfUENNX0lORk9fTU1BUAkJMHgwMDAwMDAwMQkvKiBoYXJkd2FyZSBzdXBwb3J0cyBtbWFwICovCisjZGVmaW5lIFNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQJMHgwMDAwMDAwMgkvKiBwZXJpb2QgZGF0YSBhcmUgdmFsaWQgZHVyaW5nIHRyYW5zZmVyICovCisjZGVmaW5lIFNORFJWX1BDTV9JTkZPX0RPVUJMRQkJMHgwMDAwMDAwNAkvKiBEb3VibGUgYnVmZmVyaW5nIG5lZWRlZCBmb3IgUENNIHN0YXJ0L3N0b3AgKi8KKyNkZWZpbmUgU05EUlZfUENNX0lORk9fQkFUQ0gJCTB4MDAwMDAwMTAJLyogZG91YmxlIGJ1ZmZlcmluZyAqLworI2RlZmluZSBTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRAkweDAwMDAwMTAwCS8qIGNoYW5uZWxzIGFyZSBpbnRlcmxlYXZlZCAqLworI2RlZmluZSBTTkRSVl9QQ01fSU5GT19OT05JTlRFUkxFQVZFRAkweDAwMDAwMjAwCS8qIGNoYW5uZWxzIGFyZSBub3QgaW50ZXJsZWF2ZWQgKi8KKyNkZWZpbmUgU05EUlZfUENNX0lORk9fQ09NUExFWAkJMHgwMDAwMDQwMAkvKiBjb21wbGV4IGZyYW1lIG9yZ2FuaXphdGlvbiAobW1hcCBvbmx5KSAqLworI2RlZmluZSBTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUgkweDAwMDEwMDAwCS8qIGhhcmR3YXJlIHRyYW5zZmVyIGJsb2NrIG9mIHNhbXBsZXMgKi8KKyNkZWZpbmUgU05EUlZfUENNX0lORk9fT1ZFUlJBTkdFCTB4MDAwMjAwMDAJLyogaGFyZHdhcmUgc3VwcG9ydHMgQURDIChjYXB0dXJlKSBvdmVycmFuZ2UgZGV0ZWN0aW9uICovCisjZGVmaW5lIFNORFJWX1BDTV9JTkZPX1JFU1VNRQkJMHgwMDA0MDAwMAkvKiBoYXJkd2FyZSBzdXBwb3J0cyBzdHJlYW0gcmVzdW1lIGFmdGVyIHN1c3BlbmQgKi8KKyNkZWZpbmUgU05EUlZfUENNX0lORk9fUEFVU0UJCTB4MDAwODAwMDAJLyogcGF1c2UgaW9jdGwgaXMgc3VwcG9ydGVkICovCisjZGVmaW5lIFNORFJWX1BDTV9JTkZPX0hBTEZfRFVQTEVYCTB4MDAxMDAwMDAJLyogb25seSBoYWxmIGR1cGxleCAqLworI2RlZmluZSBTTkRSVl9QQ01fSU5GT19KT0lOVF9EVVBMRVgJMHgwMDIwMDAwMAkvKiBwbGF5YmFjayBhbmQgY2FwdHVyZSBzdHJlYW0gYXJlIHNvbWV3aGF0IGNvcnJlbGF0ZWQgKi8KKyNkZWZpbmUgU05EUlZfUENNX0lORk9fU1lOQ19TVEFSVAkweDAwNDAwMDAwCS8qIHBjbSBzdXBwb3J0IHNvbWUga2luZCBvZiBzeW5jIGdvICovCisKK2VudW0gc25kcnZfcGNtX3N0YXRlIHsKKwlTTkRSVl9QQ01fU1RBVEVfT1BFTiA9IDAsCS8qIHN0cmVhbSBpcyBvcGVuICovCisJU05EUlZfUENNX1NUQVRFX1NFVFVQLAkJLyogc3RyZWFtIGhhcyBhIHNldHVwICovCisJU05EUlZfUENNX1NUQVRFX1BSRVBBUkVELAkvKiBzdHJlYW0gaXMgcmVhZHkgdG8gc3RhcnQgKi8KKwlTTkRSVl9QQ01fU1RBVEVfUlVOTklORywJLyogc3RyZWFtIGlzIHJ1bm5pbmcgKi8KKwlTTkRSVl9QQ01fU1RBVEVfWFJVTiwJCS8qIHN0cmVhbSByZWFjaGVkIGFuIHhydW4gKi8KKwlTTkRSVl9QQ01fU1RBVEVfRFJBSU5JTkcsCS8qIHN0cmVhbSBpcyBkcmFpbmluZyAqLworCVNORFJWX1BDTV9TVEFURV9QQVVTRUQsCQkvKiBzdHJlYW0gaXMgcGF1c2VkICovCisJU05EUlZfUENNX1NUQVRFX1NVU1BFTkRFRCwJLyogaGFyZHdhcmUgaXMgc3VzcGVuZGVkICovCisJU05EUlZfUENNX1NUQVRFX0RJU0NPTk5FQ1RFRCwJLyogaGFyZHdhcmUgaXMgZGlzY29ubmVjdGVkICovCisJU05EUlZfUENNX1NUQVRFX0xBU1QgPSBTTkRSVl9QQ01fU1RBVEVfRElTQ09OTkVDVEVELAorfTsKKworZW51bSB7CisJU05EUlZfUENNX01NQVBfT0ZGU0VUX0RBVEEgPSAweDAwMDAwMDAwLAorCVNORFJWX1BDTV9NTUFQX09GRlNFVF9TVEFUVVMgPSAweDgwMDAwMDAwLAorCVNORFJWX1BDTV9NTUFQX09GRlNFVF9DT05UUk9MID0gMHg4MTAwMDAwMCwKK307CisKK3VuaW9uIHNuZHJ2X3BjbV9zeW5jX2lkIHsKKwl1bnNpZ25lZCBjaGFyIGlkWzE2XTsKKwl1bnNpZ25lZCBzaG9ydCBpZDE2WzhdOworCXVuc2lnbmVkIGludCBpZDMyWzRdOworfTsKKworc3RydWN0IHNuZHJ2X3BjbV9pbmZvIHsKKwl1bnNpZ25lZCBpbnQgZGV2aWNlOwkJLyogUk8vV1IgKGNvbnRyb2wpOiBkZXZpY2UgbnVtYmVyICovCisJdW5zaWduZWQgaW50IHN1YmRldmljZTsJCS8qIFJPL1dSIChjb250cm9sKTogc3ViZGV2aWNlIG51bWJlciAqLworCWVudW0gc25kcnZfcGNtX3N0cmVhbSBzdHJlYW07CS8qIFJPL1dSIChjb250cm9sKTogc3RyZWFtIG51bWJlciAqLworCWludCBjYXJkOwkJCS8qIFI6IGNhcmQgbnVtYmVyICovCisJdW5zaWduZWQgY2hhciBpZFs2NF07CQkvKiBJRCAodXNlciBzZWxlY3RhYmxlKSAqLworCXVuc2lnbmVkIGNoYXIgbmFtZVs4MF07CQkvKiBuYW1lIG9mIHRoaXMgZGV2aWNlICovCisJdW5zaWduZWQgY2hhciBzdWJuYW1lWzMyXTsJLyogc3ViZGV2aWNlIG5hbWUgKi8KKwllbnVtIHNuZHJ2X3BjbV9jbGFzcyBkZXZfY2xhc3M7CS8qIFNORFJWX1BDTV9DTEFTU18qICovCisJZW51bSBzbmRydl9wY21fc3ViY2xhc3MgZGV2X3N1YmNsYXNzOyAvKiBTTkRSVl9QQ01fU1VCQ0xBU1NfKiAqLworCXVuc2lnbmVkIGludCBzdWJkZXZpY2VzX2NvdW50OworCXVuc2lnbmVkIGludCBzdWJkZXZpY2VzX2F2YWlsOworCXVuaW9uIHNuZHJ2X3BjbV9zeW5jX2lkIHN5bmM7CS8qIGhhcmR3YXJlIHN5bmNocm9uaXphdGlvbiBJRCAqLworCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRbNjRdOwkvKiByZXNlcnZlZCBmb3IgZnV0dXJlLi4uICovCit9OworCitlbnVtIHNuZHJ2X3BjbV9od19wYXJhbSB7CisJU05EUlZfUENNX0hXX1BBUkFNX0FDQ0VTUyA9IDAsCS8qIEFjY2VzcyB0eXBlICovCisJU05EUlZfUENNX0hXX1BBUkFNX0ZJUlNUX01BU0sgPSBTTkRSVl9QQ01fSFdfUEFSQU1fQUNDRVNTLAorCVNORFJWX1BDTV9IV19QQVJBTV9GT1JNQVQsCS8qIEZvcm1hdCAqLworCVNORFJWX1BDTV9IV19QQVJBTV9TVUJGT1JNQVQsCS8qIFN1YmZvcm1hdCAqLworCVNORFJWX1BDTV9IV19QQVJBTV9MQVNUX01BU0sgPSBTTkRSVl9QQ01fSFdfUEFSQU1fU1VCRk9STUFULAorCisJU05EUlZfUENNX0hXX1BBUkFNX1NBTVBMRV9CSVRTID0gOCwgLyogQml0cyBwZXIgc2FtcGxlICovCisJU05EUlZfUENNX0hXX1BBUkFNX0ZJUlNUX0lOVEVSVkFMID0gU05EUlZfUENNX0hXX1BBUkFNX1NBTVBMRV9CSVRTLAorCVNORFJWX1BDTV9IV19QQVJBTV9GUkFNRV9CSVRTLAkvKiBCaXRzIHBlciBmcmFtZSAqLworCVNORFJWX1BDTV9IV19QQVJBTV9DSEFOTkVMUywJLyogQ2hhbm5lbHMgKi8KKwlTTkRSVl9QQ01fSFdfUEFSQU1fUkFURSwJLyogQXBwcm94IHJhdGUgKi8KKwlTTkRSVl9QQ01fSFdfUEFSQU1fUEVSSU9EX1RJTUUsCS8qIEFwcHJveCBkaXN0YW5jZSBiZXR3ZWVuIGludGVycnVwdHMKKwkJCQkJICAgaW4gdXMgKi8KKwlTTkRSVl9QQ01fSFdfUEFSQU1fUEVSSU9EX1NJWkUsCS8qIEFwcHJveCBmcmFtZXMgYmV0d2VlbiBpbnRlcnJ1cHRzICovCisJU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRF9CWVRFUywgLyogQXBwcm94IGJ5dGVzIGJldHdlZW4gaW50ZXJydXB0cyAqLworCVNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RTLAkvKiBBcHByb3ggaW50ZXJydXB0cyBwZXIgYnVmZmVyICovCisJU05EUlZfUENNX0hXX1BBUkFNX0JVRkZFUl9USU1FLAkvKiBBcHByb3ggZHVyYXRpb24gb2YgYnVmZmVyIGluIHVzICovCisJU05EUlZfUENNX0hXX1BBUkFNX0JVRkZFUl9TSVpFLAkvKiBTaXplIG9mIGJ1ZmZlciBpbiBmcmFtZXMgKi8KKwlTTkRSVl9QQ01fSFdfUEFSQU1fQlVGRkVSX0JZVEVTLCAvKiBTaXplIG9mIGJ1ZmZlciBpbiBieXRlcyAqLworCVNORFJWX1BDTV9IV19QQVJBTV9USUNLX1RJTUUsCS8qIEFwcHJveCB0aWNrIGR1cmF0aW9uIGluIHVzICovCisJU05EUlZfUENNX0hXX1BBUkFNX0xBU1RfSU5URVJWQUwgPSBTTkRSVl9QQ01fSFdfUEFSQU1fVElDS19USU1FCit9OworCisjZGVmaW5lIFNORFJWX1BDTV9IV19QQVJBTVNfUlVOVElNRQkJKDE8PDApCisKK3N0cnVjdCBzbmRydl9pbnRlcnZhbCB7CisJdW5zaWduZWQgaW50IG1pbiwgbWF4OworCXVuc2lnbmVkIGludCBvcGVubWluOjEsCisJCSAgICAgb3Blbm1heDoxLAorCQkgICAgIGludGVnZXI6MSwKKwkJICAgICBlbXB0eToxOworfTsKKworI2RlZmluZSBTTkRSVl9NQVNLX01BWAkyNTYKKworc3RydWN0IHNuZHJ2X21hc2sgeworCXVfaW50MzJfdCBiaXRzWyhTTkRSVl9NQVNLX01BWCszMSkvMzJdOworfTsKKworc3RydWN0IHNuZHJ2X3BjbV9od19wYXJhbXMgeworCXVuc2lnbmVkIGludCBmbGFnczsKKwlzdHJ1Y3Qgc25kcnZfbWFzayBtYXNrc1tTTkRSVl9QQ01fSFdfUEFSQU1fTEFTVF9NQVNLIC0gCisJCQkgICAgICAgU05EUlZfUENNX0hXX1BBUkFNX0ZJUlNUX01BU0sgKyAxXTsKKwlzdHJ1Y3Qgc25kcnZfbWFzayBtcmVzWzVdOwkvKiByZXNlcnZlZCBtYXNrcyAqLworCXN0cnVjdCBzbmRydl9pbnRlcnZhbCBpbnRlcnZhbHNbU05EUlZfUENNX0hXX1BBUkFNX0xBU1RfSU5URVJWQUwgLQorCQkJCSAgICAgICAgU05EUlZfUENNX0hXX1BBUkFNX0ZJUlNUX0lOVEVSVkFMICsgMV07CisJc3RydWN0IHNuZHJ2X2ludGVydmFsIGlyZXNbOV07CS8qIHJlc2VydmVkIGludGVydmFscyAqLworCXVuc2lnbmVkIGludCBybWFzazsJCS8qIFc6IHJlcXVlc3RlZCBtYXNrcyAqLworCXVuc2lnbmVkIGludCBjbWFzazsJCS8qIFI6IGNoYW5nZWQgbWFza3MgKi8KKwl1bnNpZ25lZCBpbnQgaW5mbzsJCS8qIFI6IEluZm8gZmxhZ3MgZm9yIHJldHVybmVkIHNldHVwICovCisJdW5zaWduZWQgaW50IG1zYml0czsJCS8qIFI6IHVzZWQgbW9zdCBzaWduaWZpY2FudCBiaXRzICovCisJdW5zaWduZWQgaW50IHJhdGVfbnVtOwkJLyogUjogcmF0ZSBudW1lcmF0b3IgKi8KKwl1bnNpZ25lZCBpbnQgcmF0ZV9kZW47CQkvKiBSOiByYXRlIGRlbm9taW5hdG9yICovCisJc25kcnZfcGNtX3VmcmFtZXNfdCBmaWZvX3NpemU7CS8qIFI6IGNoaXAgRklGTyBzaXplIGluIGZyYW1lcyAqLworCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRbNjRdOwkvKiByZXNlcnZlZCBmb3IgZnV0dXJlICovCit9OworCitlbnVtIHNuZHJ2X3BjbV90c3RhbXAgeworCVNORFJWX1BDTV9UU1RBTVBfTk9ORSA9IDAsCisJU05EUlZfUENNX1RTVEFNUF9NTUFQLAorCVNORFJWX1BDTV9UU1RBTVBfTEFTVCA9IFNORFJWX1BDTV9UU1RBTVBfTU1BUCwKK307CisKK3N0cnVjdCBzbmRydl9wY21fc3dfcGFyYW1zIHsKKwllbnVtIHNuZHJ2X3BjbV90c3RhbXAgdHN0YW1wX21vZGU7CS8qIHRpbWVzdGFtcCBtb2RlICovCisJdW5zaWduZWQgaW50IHBlcmlvZF9zdGVwOworCXVuc2lnbmVkIGludCBzbGVlcF9taW47CQkJLyogbWluIHRpY2tzIHRvIHNsZWVwICovCisJc25kcnZfcGNtX3VmcmFtZXNfdCBhdmFpbF9taW47CQkvKiBtaW4gYXZhaWwgZnJhbWVzIGZvciB3YWtldXAgKi8KKwlzbmRydl9wY21fdWZyYW1lc190IHhmZXJfYWxpZ247CQkvKiB4ZmVyIHNpemUgbmVlZCB0byBiZSBhIG11bHRpcGxlICovCisJc25kcnZfcGNtX3VmcmFtZXNfdCBzdGFydF90aHJlc2hvbGQ7CS8qIG1pbiBod19hdmFpbCBmcmFtZXMgZm9yIGF1dG9tYXRpYyBzdGFydCAqLworCXNuZHJ2X3BjbV91ZnJhbWVzX3Qgc3RvcF90aHJlc2hvbGQ7CS8qIG1pbiBhdmFpbCBmcmFtZXMgZm9yIGF1dG9tYXRpYyBzdG9wICovCisJc25kcnZfcGNtX3VmcmFtZXNfdCBzaWxlbmNlX3RocmVzaG9sZDsJLyogbWluIGRpc3RhbmNlIGZyb20gbm9pc2UgZm9yIHNpbGVuY2UgZmlsbGluZyAqLworCXNuZHJ2X3BjbV91ZnJhbWVzX3Qgc2lsZW5jZV9zaXplOwkvKiBzaWxlbmNlIGJsb2NrIHNpemUgKi8KKwlzbmRydl9wY21fdWZyYW1lc190IGJvdW5kYXJ5OwkJLyogcG9pbnRlcnMgd3JhcCBwb2ludCAqLworCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRbNjRdOwkJLyogcmVzZXJ2ZWQgZm9yIGZ1dHVyZSAqLworfTsKKworc3RydWN0IHNuZHJ2X3BjbV9jaGFubmVsX2luZm8geworCXVuc2lnbmVkIGludCBjaGFubmVsOworCW9mZl90IG9mZnNldDsJCQkvKiBtbWFwIG9mZnNldCAqLworCXVuc2lnbmVkIGludCBmaXJzdDsJCS8qIG9mZnNldCB0byBmaXJzdCBzYW1wbGUgaW4gYml0cyAqLworCXVuc2lnbmVkIGludCBzdGVwOwkJLyogc2FtcGxlcyBkaXN0YW5jZSBpbiBiaXRzICovCit9OworCitzdHJ1Y3Qgc25kcnZfcGNtX3N0YXR1cyB7CisJZW51bSBzbmRydl9wY21fc3RhdGUgc3RhdGU7CS8qIHN0cmVhbSBzdGF0ZSAqLworCXN0cnVjdCB0aW1lc3BlYyB0cmlnZ2VyX3RzdGFtcDsJLyogdGltZSB3aGVuIHN0cmVhbSB3YXMgc3RhcnRlZC9zdG9wcGVkL3BhdXNlZCAqLworCXN0cnVjdCB0aW1lc3BlYyB0c3RhbXA7CQkvKiByZWZlcmVuY2UgdGltZXN0YW1wICovCisJc25kcnZfcGNtX3VmcmFtZXNfdCBhcHBsX3B0cjsJLyogYXBwbCBwdHIgKi8KKwlzbmRydl9wY21fdWZyYW1lc190IGh3X3B0cjsJLyogaHcgcHRyICovCisJc25kcnZfcGNtX3NmcmFtZXNfdCBkZWxheTsJLyogY3VycmVudCBkZWxheSBpbiBmcmFtZXMgKi8KKwlzbmRydl9wY21fdWZyYW1lc190IGF2YWlsOwkvKiBudW1iZXIgb2YgZnJhbWVzIGF2YWlsYWJsZSAqLworCXNuZHJ2X3BjbV91ZnJhbWVzX3QgYXZhaWxfbWF4OwkvKiBtYXggZnJhbWVzIGF2YWlsYWJsZSBvbiBodyBzaW5jZSBsYXN0IHN0YXR1cyAqLworCXNuZHJ2X3BjbV91ZnJhbWVzX3Qgb3ZlcnJhbmdlOwkvKiBjb3VudCBvZiBBREMgKGNhcHR1cmUpIG92ZXJyYW5nZSBkZXRlY3Rpb25zIGZyb20gbGFzdCBzdGF0dXMgKi8KKwllbnVtIHNuZHJ2X3BjbV9zdGF0ZSBzdXNwZW5kZWRfc3RhdGU7IC8qIHN1c3BlbmRlZCBzdHJlYW0gc3RhdGUgKi8KKwl1bnNpZ25lZCBjaGFyIHJlc2VydmVkWzYwXTsJLyogbXVzdCBiZSBmaWxsZWQgd2l0aCB6ZXJvICovCit9OworCitzdHJ1Y3Qgc25kcnZfcGNtX21tYXBfc3RhdHVzIHsKKwllbnVtIHNuZHJ2X3BjbV9zdGF0ZSBzdGF0ZTsJLyogUk86IHN0YXRlIC0gU05EUlZfUENNX1NUQVRFX1hYWFggKi8KKwlpbnQgcGFkMTsJCQkvKiBOZWVkZWQgZm9yIDY0IGJpdCBhbGlnbm1lbnQgKi8KKwlzbmRydl9wY21fdWZyYW1lc190IGh3X3B0cjsJLyogUk86IGh3IHB0ciAoMC4uLmJvdW5kYXJ5LTEpICovCisJc3RydWN0IHRpbWVzcGVjIHRzdGFtcDsJCS8qIFRpbWVzdGFtcCAqLworCWVudW0gc25kcnZfcGNtX3N0YXRlIHN1c3BlbmRlZF9zdGF0ZTsgLyogUk86IHN1c3BlbmRlZCBzdHJlYW0gc3RhdGUgKi8KK307CisKK3N0cnVjdCBzbmRydl9wY21fbW1hcF9jb250cm9sIHsKKwlzbmRydl9wY21fdWZyYW1lc190IGFwcGxfcHRyOwkvKiBSVzogYXBwbCBwdHIgKDAuLi5ib3VuZGFyeS0xKSAqLworCXNuZHJ2X3BjbV91ZnJhbWVzX3QgYXZhaWxfbWluOwkvKiBSVzogbWluIGF2YWlsYWJsZSBmcmFtZXMgZm9yIHdha2V1cCAqLworfTsKKworI2RlZmluZSBTTkRSVl9QQ01fU1lOQ19QVFJfSFdTWU5DCSgxPDwwKQkvKiBleGVjdXRlIGh3c3luYyAqLworI2RlZmluZSBTTkRSVl9QQ01fU1lOQ19QVFJfQVBQTAkJKDE8PDEpCS8qIGdldCBhcHBsX3B0ciBmcm9tIGRyaXZlciAoci93IG9wKSAqLworI2RlZmluZSBTTkRSVl9QQ01fU1lOQ19QVFJfQVZBSUxfTUlOCSgxPDwyKQkvKiBnZXQgYXZhaWxfbWluIGZyb20gZHJpdmVyICovCisKK3N0cnVjdCBzbmRydl9wY21fc3luY19wdHIgeworCXVuc2lnbmVkIGludCBmbGFnczsKKwl1bmlvbiB7CisJCXN0cnVjdCBzbmRydl9wY21fbW1hcF9zdGF0dXMgc3RhdHVzOworCQl1bnNpZ25lZCBjaGFyIHJlc2VydmVkWzY0XTsKKwl9IHM7CisJdW5pb24geworCQlzdHJ1Y3Qgc25kcnZfcGNtX21tYXBfY29udHJvbCBjb250cm9sOworCQl1bnNpZ25lZCBjaGFyIHJlc2VydmVkWzY0XTsKKwl9IGM7Cit9OworCitzdHJ1Y3Qgc25kcnZfeGZlcmkgeworCXNuZHJ2X3BjbV9zZnJhbWVzX3QgcmVzdWx0OworCXZvaWQgX191c2VyICpidWY7CisJc25kcnZfcGNtX3VmcmFtZXNfdCBmcmFtZXM7Cit9OworCitzdHJ1Y3Qgc25kcnZfeGZlcm4geworCXNuZHJ2X3BjbV9zZnJhbWVzX3QgcmVzdWx0OworCXZvaWQgX191c2VyICogX191c2VyICpidWZzOworCXNuZHJ2X3BjbV91ZnJhbWVzX3QgZnJhbWVzOworfTsKKworZW51bSB7CisJU05EUlZfUENNX0lPQ1RMX1BWRVJTSU9OID0gX0lPUignQScsIDB4MDAsIGludCksCisJU05EUlZfUENNX0lPQ1RMX0lORk8gPSBfSU9SKCdBJywgMHgwMSwgc3RydWN0IHNuZHJ2X3BjbV9pbmZvKSwKKwlTTkRSVl9QQ01fSU9DVExfVFNUQU1QID0gX0lPVygnQScsIDB4MDIsIGludCksCisJU05EUlZfUENNX0lPQ1RMX0hXX1JFRklORSA9IF9JT1dSKCdBJywgMHgxMCwgc3RydWN0IHNuZHJ2X3BjbV9od19wYXJhbXMpLAorCVNORFJWX1BDTV9JT0NUTF9IV19QQVJBTVMgPSBfSU9XUignQScsIDB4MTEsIHN0cnVjdCBzbmRydl9wY21faHdfcGFyYW1zKSwKKwlTTkRSVl9QQ01fSU9DVExfSFdfRlJFRSA9IF9JTygnQScsIDB4MTIpLAorCVNORFJWX1BDTV9JT0NUTF9TV19QQVJBTVMgPSBfSU9XUignQScsIDB4MTMsIHN0cnVjdCBzbmRydl9wY21fc3dfcGFyYW1zKSwKKwlTTkRSVl9QQ01fSU9DVExfU1RBVFVTID0gX0lPUignQScsIDB4MjAsIHN0cnVjdCBzbmRydl9wY21fc3RhdHVzKSwKKwlTTkRSVl9QQ01fSU9DVExfREVMQVkgPSBfSU9SKCdBJywgMHgyMSwgc25kcnZfcGNtX3NmcmFtZXNfdCksCisJU05EUlZfUENNX0lPQ1RMX0hXU1lOQyA9IF9JTygnQScsIDB4MjIpLAorCVNORFJWX1BDTV9JT0NUTF9TWU5DX1BUUiA9IF9JT1dSKCdBJywgMHgyMywgc3RydWN0IHNuZHJ2X3BjbV9zeW5jX3B0ciksCisJU05EUlZfUENNX0lPQ1RMX0NIQU5ORUxfSU5GTyA9IF9JT1IoJ0EnLCAweDMyLCBzdHJ1Y3Qgc25kcnZfcGNtX2NoYW5uZWxfaW5mbyksCisJU05EUlZfUENNX0lPQ1RMX1BSRVBBUkUgPSBfSU8oJ0EnLCAweDQwKSwKKwlTTkRSVl9QQ01fSU9DVExfUkVTRVQgPSBfSU8oJ0EnLCAweDQxKSwKKwlTTkRSVl9QQ01fSU9DVExfU1RBUlQgPSBfSU8oJ0EnLCAweDQyKSwKKwlTTkRSVl9QQ01fSU9DVExfRFJPUCA9IF9JTygnQScsIDB4NDMpLAorCVNORFJWX1BDTV9JT0NUTF9EUkFJTiA9IF9JTygnQScsIDB4NDQpLAorCVNORFJWX1BDTV9JT0NUTF9QQVVTRSA9IF9JT1coJ0EnLCAweDQ1LCBpbnQpLAorCVNORFJWX1BDTV9JT0NUTF9SRVdJTkQgPSBfSU9XKCdBJywgMHg0Niwgc25kcnZfcGNtX3VmcmFtZXNfdCksCisJU05EUlZfUENNX0lPQ1RMX1JFU1VNRSA9IF9JTygnQScsIDB4NDcpLAorCVNORFJWX1BDTV9JT0NUTF9YUlVOID0gX0lPKCdBJywgMHg0OCksCisJU05EUlZfUENNX0lPQ1RMX0ZPUldBUkQgPSBfSU9XKCdBJywgMHg0OSwgc25kcnZfcGNtX3VmcmFtZXNfdCksCisJU05EUlZfUENNX0lPQ1RMX1dSSVRFSV9GUkFNRVMgPSBfSU9XKCdBJywgMHg1MCwgc3RydWN0IHNuZHJ2X3hmZXJpKSwKKwlTTkRSVl9QQ01fSU9DVExfUkVBRElfRlJBTUVTID0gX0lPUignQScsIDB4NTEsIHN0cnVjdCBzbmRydl94ZmVyaSksCisJU05EUlZfUENNX0lPQ1RMX1dSSVRFTl9GUkFNRVMgPSBfSU9XKCdBJywgMHg1Miwgc3RydWN0IHNuZHJ2X3hmZXJuKSwKKwlTTkRSVl9QQ01fSU9DVExfUkVBRE5fRlJBTUVTID0gX0lPUignQScsIDB4NTMsIHN0cnVjdCBzbmRydl94ZmVybiksCisJU05EUlZfUENNX0lPQ1RMX0xJTksgPSBfSU9XKCdBJywgMHg2MCwgaW50KSwKKwlTTkRSVl9QQ01fSU9DVExfVU5MSU5LID0gX0lPKCdBJywgMHg2MSksCit9OworCisvKiBUcmljayB0byBtYWtlIGFsc2EtbGliL2FjaW5jbHVkZS5tNCBoYXBweSAqLworI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfUkVXSU5EIFNORFJWX1BDTV9JT0NUTF9SRVdJTkQKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1JREkgdjEuMCBpbnRlcmZhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiAgUmF3IE1JREkgc2VjdGlvbiAtIC9kZXYvc25kL21pZGk/PworICovCisKKyNkZWZpbmUgU05EUlZfUkFXTUlESV9WRVJTSU9OCQlTTkRSVl9QUk9UT0NPTF9WRVJTSU9OKDIsIDAsIDApCisKK2VudW0gc25kcnZfcmF3bWlkaV9zdHJlYW0geworCVNORFJWX1JBV01JRElfU1RSRUFNX09VVFBVVCA9IDAsCisJU05EUlZfUkFXTUlESV9TVFJFQU1fSU5QVVQsCisJU05EUlZfUkFXTUlESV9TVFJFQU1fTEFTVCA9IFNORFJWX1JBV01JRElfU1RSRUFNX0lOUFVULAorfTsKKworI2RlZmluZSBTTkRSVl9SQVdNSURJX0lORk9fT1VUUFVUCQkweDAwMDAwMDAxCisjZGVmaW5lIFNORFJWX1JBV01JRElfSU5GT19JTlBVVAkJMHgwMDAwMDAwMgorI2RlZmluZSBTTkRSVl9SQVdNSURJX0lORk9fRFVQTEVYCQkweDAwMDAwMDA0CisKK3N0cnVjdCBzbmRydl9yYXdtaWRpX2luZm8geworCXVuc2lnbmVkIGludCBkZXZpY2U7CQkvKiBSTy9XUiAoY29udHJvbCk6IGRldmljZSBudW1iZXIgKi8KKwl1bnNpZ25lZCBpbnQgc3ViZGV2aWNlOwkJLyogUk8vV1IgKGNvbnRyb2wpOiBzdWJkZXZpY2UgbnVtYmVyICovCisJZW51bSBzbmRydl9yYXdtaWRpX3N0cmVhbSBzdHJlYW07IC8qIFdSOiBzdHJlYW0gKi8KKwlpbnQgY2FyZDsJCQkvKiBSOiBjYXJkIG51bWJlciAqLworCXVuc2lnbmVkIGludCBmbGFnczsJCS8qIFNORFJWX1JBV01JRElfSU5GT19YWFhYICovCisJdW5zaWduZWQgY2hhciBpZFs2NF07CQkvKiBJRCAodXNlciBzZWxlY3RhYmxlKSAqLworCXVuc2lnbmVkIGNoYXIgbmFtZVs4MF07CQkvKiBuYW1lIG9mIGRldmljZSAqLworCXVuc2lnbmVkIGNoYXIgc3VibmFtZVszMl07CS8qIG5hbWUgb2YgYWN0aXZlIG9yIHNlbGVjdGVkIHN1YmRldmljZSAqLworCXVuc2lnbmVkIGludCBzdWJkZXZpY2VzX2NvdW50OworCXVuc2lnbmVkIGludCBzdWJkZXZpY2VzX2F2YWlsOworCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRbNjRdOwkvKiByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqLworfTsKKworc3RydWN0IHNuZHJ2X3Jhd21pZGlfcGFyYW1zIHsKKwllbnVtIHNuZHJ2X3Jhd21pZGlfc3RyZWFtIHN0cmVhbTsKKwlzaXplX3QgYnVmZmVyX3NpemU7CQkvKiBxdWV1ZSBzaXplIGluIGJ5dGVzICovCisJc2l6ZV90IGF2YWlsX21pbjsJCS8qIG1pbmltdW0gYXZhaWwgYnl0ZXMgZm9yIHdha2V1cCAqLworCXVuc2lnbmVkIGludCBub19hY3RpdmVfc2Vuc2luZzogMTsgLyogZG8gbm90IHNlbmQgYWN0aXZlIHNlbnNpbmcgYnl0ZSBpbiBjbG9zZSgpICovCisJdW5zaWduZWQgY2hhciByZXNlcnZlZFsxNl07CS8qIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovCit9OworCitzdHJ1Y3Qgc25kcnZfcmF3bWlkaV9zdGF0dXMgeworCWVudW0gc25kcnZfcmF3bWlkaV9zdHJlYW0gc3RyZWFtOworCXN0cnVjdCB0aW1lc3BlYyB0c3RhbXA7CQkvKiBUaW1lc3RhbXAgKi8KKwlzaXplX3QgYXZhaWw7CQkJLyogYXZhaWxhYmxlIGJ5dGVzICovCisJc2l6ZV90IHhydW5zOwkJCS8qIGNvdW50IG9mIG92ZXJydW5zIHNpbmNlIGxhc3Qgc3RhdHVzIChpbiBieXRlcykgKi8KKwl1bnNpZ25lZCBjaGFyIHJlc2VydmVkWzE2XTsJLyogcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKi8KK307CisKK2VudW0geworCVNORFJWX1JBV01JRElfSU9DVExfUFZFUlNJT04gPSBfSU9SKCdXJywgMHgwMCwgaW50KSwKKwlTTkRSVl9SQVdNSURJX0lPQ1RMX0lORk8gPSBfSU9SKCdXJywgMHgwMSwgc3RydWN0IHNuZHJ2X3Jhd21pZGlfaW5mbyksCisJU05EUlZfUkFXTUlESV9JT0NUTF9QQVJBTVMgPSBfSU9XUignVycsIDB4MTAsIHN0cnVjdCBzbmRydl9yYXdtaWRpX3BhcmFtcyksCisJU05EUlZfUkFXTUlESV9JT0NUTF9TVEFUVVMgPSBfSU9XUignVycsIDB4MjAsIHN0cnVjdCBzbmRydl9yYXdtaWRpX3N0YXR1cyksCisJU05EUlZfUkFXTUlESV9JT0NUTF9EUk9QID0gX0lPVygnVycsIDB4MzAsIGludCksCisJU05EUlZfUkFXTUlESV9JT0NUTF9EUkFJTiA9IF9JT1coJ1cnLCAweDMxLCBpbnQpLAorfTsKKworLyoKKyAqICBUaW1lciBzZWN0aW9uIC0gL2Rldi9zbmQvdGltZXIKKyAqLworCisjZGVmaW5lIFNORFJWX1RJTUVSX1ZFUlNJT04JCVNORFJWX1BST1RPQ09MX1ZFUlNJT04oMiwgMCwgMikKKworZW51bSBzbmRydl90aW1lcl9jbGFzcyB7CisJU05EUlZfVElNRVJfQ0xBU1NfTk9ORSA9IC0xLAorCVNORFJWX1RJTUVSX0NMQVNTX1NMQVZFID0gMCwKKwlTTkRSVl9USU1FUl9DTEFTU19HTE9CQUwsCisJU05EUlZfVElNRVJfQ0xBU1NfQ0FSRCwKKwlTTkRSVl9USU1FUl9DTEFTU19QQ00sCisJU05EUlZfVElNRVJfQ0xBU1NfTEFTVCA9IFNORFJWX1RJTUVSX0NMQVNTX1BDTSwKK307CisKKy8qIHNsYXZlIHRpbWVyIGNsYXNzZXMgKi8KK2VudW0gc25kcnZfdGltZXJfc2xhdmVfY2xhc3MgeworCVNORFJWX1RJTUVSX1NDTEFTU19OT05FID0gMCwKKwlTTkRSVl9USU1FUl9TQ0xBU1NfQVBQTElDQVRJT04sCisJU05EUlZfVElNRVJfU0NMQVNTX1NFUVVFTkNFUiwJCS8qIGFsaWFzICovCisJU05EUlZfVElNRVJfU0NMQVNTX09TU19TRVFVRU5DRVIsCS8qIGFsaWFzICovCisJU05EUlZfVElNRVJfU0NMQVNTX0xBU1QgPSBTTkRSVl9USU1FUl9TQ0xBU1NfT1NTX1NFUVVFTkNFUiwKK307CisKKy8qIGdsb2JhbCB0aW1lcnMgKGRldmljZSBtZW1iZXIpICovCisjZGVmaW5lIFNORFJWX1RJTUVSX0dMT0JBTF9TWVNURU0JMAorI2RlZmluZSBTTkRSVl9USU1FUl9HTE9CQUxfUlRDCQkxCisjZGVmaW5lIFNORFJWX1RJTUVSX0dMT0JBTF9IUEVUCQkyCisKKy8qIGluZm8gZmxhZ3MgKi8KKyNkZWZpbmUgU05EUlZfVElNRVJfRkxHX1NMQVZFCQkoMTw8MCkJLyogY2Fubm90IGJlIGNvbnRyb2xsZWQgKi8KKworc3RydWN0IHNuZHJ2X3RpbWVyX2lkIHsKKwllbnVtIHNuZHJ2X3RpbWVyX2NsYXNzIGRldl9jbGFzczsJCisJZW51bSBzbmRydl90aW1lcl9zbGF2ZV9jbGFzcyBkZXZfc2NsYXNzOworCWludCBjYXJkOworCWludCBkZXZpY2U7CisJaW50IHN1YmRldmljZTsKK307CisKK3N0cnVjdCBzbmRydl90aW1lcl9naW5mbyB7CisJc3RydWN0IHNuZHJ2X3RpbWVyX2lkIHRpZDsJLyogcmVxdWVzdGVkIHRpbWVyIElEICovCisJdW5zaWduZWQgaW50IGZsYWdzOwkJLyogdGltZXIgZmxhZ3MgLSBTTkRSVl9USU1FUl9GTEdfKiAqLworCWludCBjYXJkOwkJCS8qIGNhcmQgbnVtYmVyICovCisJdW5zaWduZWQgY2hhciBpZFs2NF07CQkvKiB0aW1lciBpZGVudGlmaWNhdGlvbiAqLworCXVuc2lnbmVkIGNoYXIgbmFtZVs4MF07CQkvKiB0aW1lciBuYW1lICovCisJdW5zaWduZWQgbG9uZyByZXNlcnZlZDA7CS8qIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovCisJdW5zaWduZWQgbG9uZyByZXNvbHV0aW9uOwkvKiBhdmVyYWdlIHBlcmlvZCByZXNvbHV0aW9uIGluIG5zICovCisJdW5zaWduZWQgbG9uZyByZXNvbHV0aW9uX21pbjsJLyogbWluaW1hbCBwZXJpb2QgcmVzb2x1dGlvbiBpbiBucyAqLworCXVuc2lnbmVkIGxvbmcgcmVzb2x1dGlvbl9tYXg7CS8qIG1heGltYWwgcGVyaW9kIHJlc29sdXRpb24gaW4gbnMgKi8KKwl1bnNpZ25lZCBpbnQgY2xpZW50czsJCS8qIGFjdGl2ZSB0aW1lciBjbGllbnRzICovCisJdW5zaWduZWQgY2hhciByZXNlcnZlZFszMl07Cit9OworCitzdHJ1Y3Qgc25kcnZfdGltZXJfZ3BhcmFtcyB7CisJc3RydWN0IHNuZHJ2X3RpbWVyX2lkIHRpZDsJLyogcmVxdWVzdGVkIHRpbWVyIElEICovCisJdW5zaWduZWQgbG9uZyBwZXJpb2RfbnVtOwkvKiByZXF1ZXN0ZWQgcHJlY2lzZSBwZXJpb2QgZHVyYXRpb24gKGluIHNlY29uZHMpIC0gbnVtZXJhdG9yICovCisJdW5zaWduZWQgbG9uZyBwZXJpb2RfZGVuOwkvKiByZXF1ZXN0ZWQgcHJlY2lzZSBwZXJpb2QgZHVyYXRpb24gKGluIHNlY29uZHMpIC0gZGVub21pbmF0b3IgKi8KKwl1bnNpZ25lZCBjaGFyIHJlc2VydmVkWzMyXTsKK307CisKK3N0cnVjdCBzbmRydl90aW1lcl9nc3RhdHVzIHsKKwlzdHJ1Y3Qgc25kcnZfdGltZXJfaWQgdGlkOwkvKiByZXF1ZXN0ZWQgdGltZXIgSUQgKi8KKwl1bnNpZ25lZCBsb25nIHJlc29sdXRpb247CS8qIGN1cnJlbnQgcGVyaW9kIHJlc29sdXRpb24gaW4gbnMgKi8KKwl1bnNpZ25lZCBsb25nIHJlc29sdXRpb25fbnVtOwkvKiBwcmVjaXNlIGN1cnJlbnQgcGVyaW9kIHJlc29sdXRpb24gKGluIHNlY29uZHMpIC0gbnVtZXJhdG9yICovCisJdW5zaWduZWQgbG9uZyByZXNvbHV0aW9uX2RlbjsJLyogcHJlY2lzZSBjdXJyZW50IHBlcmlvZCByZXNvbHV0aW9uIChpbiBzZWNvbmRzKSAtIGRlbm9taW5hdG9yICovCisJdW5zaWduZWQgY2hhciByZXNlcnZlZFszMl07Cit9OworCitzdHJ1Y3Qgc25kcnZfdGltZXJfc2VsZWN0IHsKKwlzdHJ1Y3Qgc25kcnZfdGltZXJfaWQgaWQ7CS8qIGJpbmQgdG8gdGltZXIgSUQgKi8KKwl1bnNpZ25lZCBjaGFyIHJlc2VydmVkWzMyXTsJLyogcmVzZXJ2ZWQgKi8KK307CisKK3N0cnVjdCBzbmRydl90aW1lcl9pbmZvIHsKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CQkvKiB0aW1lciBmbGFncyAtIFNORFJWX1RJTUVSX0ZMR18qICovCisJaW50IGNhcmQ7CQkJLyogY2FyZCBudW1iZXIgKi8KKwl1bnNpZ25lZCBjaGFyIGlkWzY0XTsJCS8qIHRpbWVyIGlkZW50aWZpY2F0b3IgKi8KKwl1bnNpZ25lZCBjaGFyIG5hbWVbODBdOwkJLyogdGltZXIgbmFtZSAqLworCXVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWQwOwkvKiByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqLworCXVuc2lnbmVkIGxvbmcgcmVzb2x1dGlvbjsJLyogYXZlcmFnZSBwZXJpb2QgcmVzb2x1dGlvbiBpbiBucyAqLworCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRbNjRdOwkvKiByZXNlcnZlZCAqLworfTsKKworI2RlZmluZSBTTkRSVl9USU1FUl9QU0ZMR19BVVRPCQkoMTw8MCkJLyogYXV0byBzdGFydCwgb3RoZXJ3aXNlIG9uZS1zaG90ICovCisjZGVmaW5lIFNORFJWX1RJTUVSX1BTRkxHX0VYQ0xVU0lWRQkoMTw8MSkJLyogZXhjbHVzaXZlIHVzZSwgcHJlY2lzZSBzdGFydC9zdG9wL3BhdXNlL2NvbnRpbnVlICovCisjZGVmaW5lIFNORFJWX1RJTUVSX1BTRkxHX0VBUkxZX0VWRU5UCSgxPDwyKQkvKiB3cml0ZSBlYXJseSBldmVudCB0byB0aGUgcG9sbCBxdWV1ZSAqLworCitzdHJ1Y3Qgc25kcnZfdGltZXJfcGFyYW1zIHsKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CQkvKiBmbGFncyAtIFNORFJWX01JWEVSX1BTRkxHXyogKi8KKwl1bnNpZ25lZCBpbnQgdGlja3M7CQkvKiByZXF1ZXN0ZWQgcmVzb2x1dGlvbiBpbiB0aWNrcyAqLworCXVuc2lnbmVkIGludCBxdWV1ZV9zaXplOwkvKiB0b3RhbCBzaXplIG9mIHF1ZXVlICgzMi0xMDI0KSAqLworCXVuc2lnbmVkIGludCByZXNlcnZlZDA7CQkvKiByZXNlcnZlZCwgd2FzOiBmYWlsdXJlIGxvY2F0aW9ucyAqLworCXVuc2lnbmVkIGludCBmaWx0ZXI7CQkvKiBldmVudCBmaWx0ZXIgKGJpdG1hc2sgb2YgU05EUlZfVElNRVJfRVZFTlRfKikgKi8KKwl1bnNpZ25lZCBjaGFyIHJlc2VydmVkWzYwXTsJLyogcmVzZXJ2ZWQgKi8KK307CisKK3N0cnVjdCBzbmRydl90aW1lcl9zdGF0dXMgeworCXN0cnVjdCB0aW1lc3BlYyB0c3RhbXA7CQkvKiBUaW1lc3RhbXAgLSBsYXN0IHVwZGF0ZSAqLworCXVuc2lnbmVkIGludCByZXNvbHV0aW9uOwkvKiBjdXJyZW50IHBlcmlvZCByZXNvbHV0aW9uIGluIG5zICovCisJdW5zaWduZWQgaW50IGxvc3Q7CQkvKiBjb3VudGVyIG9mIG1hc3RlciB0aWNrIGxvc3QgKi8KKwl1bnNpZ25lZCBpbnQgb3ZlcnJ1bjsJCS8qIGNvdW50IG9mIHJlYWQgcXVldWUgb3ZlcnJ1bnMgKi8KKwl1bnNpZ25lZCBpbnQgcXVldWU7CQkvKiB1c2VkIHF1ZXVlIHNpemUgKi8KKwl1bnNpZ25lZCBjaGFyIHJlc2VydmVkWzY0XTsJLyogcmVzZXJ2ZWQgKi8KK307CisKK2VudW0geworCVNORFJWX1RJTUVSX0lPQ1RMX1BWRVJTSU9OID0gX0lPUignVCcsIDB4MDAsIGludCksCisJU05EUlZfVElNRVJfSU9DVExfTkVYVF9ERVZJQ0UgPSBfSU9XUignVCcsIDB4MDEsIHN0cnVjdCBzbmRydl90aW1lcl9pZCksCisJU05EUlZfVElNRVJfSU9DVExfVFJFQUQgPSBfSU9XKCdUJywgMHgwMiwgaW50KSwKKwlTTkRSVl9USU1FUl9JT0NUTF9HSU5GTyA9IF9JT1dSKCdUJywgMHgwMywgc3RydWN0IHNuZHJ2X3RpbWVyX2dpbmZvKSwKKwlTTkRSVl9USU1FUl9JT0NUTF9HUEFSQU1TID0gX0lPVygnVCcsIDB4MDQsIHN0cnVjdCBzbmRydl90aW1lcl9ncGFyYW1zKSwKKwlTTkRSVl9USU1FUl9JT0NUTF9HU1RBVFVTID0gX0lPV1IoJ1QnLCAweDA1LCBzdHJ1Y3Qgc25kcnZfdGltZXJfZ3N0YXR1cyksCisJU05EUlZfVElNRVJfSU9DVExfU0VMRUNUID0gX0lPVygnVCcsIDB4MTAsIHN0cnVjdCBzbmRydl90aW1lcl9zZWxlY3QpLAorCVNORFJWX1RJTUVSX0lPQ1RMX0lORk8gPSBfSU9SKCdUJywgMHgxMSwgc3RydWN0IHNuZHJ2X3RpbWVyX2luZm8pLAorCVNORFJWX1RJTUVSX0lPQ1RMX1BBUkFNUyA9IF9JT1coJ1QnLCAweDEyLCBzdHJ1Y3Qgc25kcnZfdGltZXJfcGFyYW1zKSwKKwlTTkRSVl9USU1FUl9JT0NUTF9TVEFUVVMgPSBfSU9SKCdUJywgMHgxNCwgc3RydWN0IHNuZHJ2X3RpbWVyX3N0YXR1cyksCisJU05EUlZfVElNRVJfSU9DVExfU1RBUlQgPSBfSU8oJ1QnLCAweDIwKSwKKwlTTkRSVl9USU1FUl9JT0NUTF9TVE9QID0gX0lPKCdUJywgMHgyMSksCisJU05EUlZfVElNRVJfSU9DVExfQ09OVElOVUUgPSBfSU8oJ1QnLCAweDIyKSwKKwlTTkRSVl9USU1FUl9JT0NUTF9QQVVTRSA9IF9JTygnVCcsIDB4MjMpLAorfTsKKworc3RydWN0IHNuZHJ2X3RpbWVyX3JlYWQgeworCXVuc2lnbmVkIGludCByZXNvbHV0aW9uOworCXVuc2lnbmVkIGludCB0aWNrczsKK307CisKK2VudW0gc25kcnZfdGltZXJfZXZlbnQgeworCVNORFJWX1RJTUVSX0VWRU5UX1JFU09MVVRJT04gPSAwLAkvKiB2YWwgPSByZXNvbHV0aW9uIGluIG5zICovCisJU05EUlZfVElNRVJfRVZFTlRfVElDSywJCQkvKiB2YWwgPSB0aWNrcyAqLworCVNORFJWX1RJTUVSX0VWRU5UX1NUQVJULAkJLyogdmFsID0gcmVzb2x1dGlvbiBpbiBucyAqLworCVNORFJWX1RJTUVSX0VWRU5UX1NUT1AsCQkJLyogdmFsID0gMCAqLworCVNORFJWX1RJTUVSX0VWRU5UX0NPTlRJTlVFLAkJLyogdmFsID0gcmVzb2x1dGlvbiBpbiBucyAqLworCVNORFJWX1RJTUVSX0VWRU5UX1BBVVNFLAkJLyogdmFsID0gMCAqLworCVNORFJWX1RJTUVSX0VWRU5UX0VBUkxZLAkJLyogdmFsID0gMCwgZWFybHkgZXZlbnQgKi8KKwkvKiBtYXN0ZXIgdGltZXIgZXZlbnRzIGZvciBzbGF2ZSB0aW1lciBpbnN0YW5jZXMgKi8KKwlTTkRSVl9USU1FUl9FVkVOVF9NU1RBUlQgPSBTTkRSVl9USU1FUl9FVkVOVF9TVEFSVCArIDEwLAorCVNORFJWX1RJTUVSX0VWRU5UX01TVE9QID0gU05EUlZfVElNRVJfRVZFTlRfU1RPUCArIDEwLAorCVNORFJWX1RJTUVSX0VWRU5UX01DT05USU5VRSA9IFNORFJWX1RJTUVSX0VWRU5UX0NPTlRJTlVFICsgMTAsCisJU05EUlZfVElNRVJfRVZFTlRfTVBBVVNFID0gU05EUlZfVElNRVJfRVZFTlRfUEFVU0UgKyAxMCwKK307CisKK3N0cnVjdCBzbmRydl90aW1lcl90cmVhZCB7CisJZW51bSBzbmRydl90aW1lcl9ldmVudCBldmVudDsKKwlzdHJ1Y3QgdGltZXNwZWMgdHN0YW1wOworCXVuc2lnbmVkIGludCB2YWw7Cit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICBTZWN0aW9uIGZvciBkcml2ZXIgY29udHJvbCBpbnRlcmZhY2UgLSAvZGV2L3NuZC9jb250cm9sPyAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgU05EUlZfQ1RMX1ZFUlNJT04JCVNORFJWX1BST1RPQ09MX1ZFUlNJT04oMiwgMCwgMykKKworc3RydWN0IHNuZHJ2X2N0bF9jYXJkX2luZm8geworCWludCBjYXJkOwkJCS8qIGNhcmQgbnVtYmVyICovCisJaW50IHBhZDsJCQkvKiByZXNlcnZlZCBmb3IgZnV0dXJlICh3YXMgdHlwZSkgKi8KKwl1bnNpZ25lZCBjaGFyIGlkWzE2XTsJCS8qIElEIG9mIGNhcmQgKHVzZXIgc2VsZWN0YWJsZSkgKi8KKwl1bnNpZ25lZCBjaGFyIGRyaXZlclsxNl07CS8qIERyaXZlciBuYW1lICovCisJdW5zaWduZWQgY2hhciBuYW1lWzMyXTsJCS8qIFNob3J0IG5hbWUgb2Ygc291bmRjYXJkICovCisJdW5zaWduZWQgY2hhciBsb25nbmFtZVs4MF07CS8qIG5hbWUgKyBpbmZvIHRleHQgYWJvdXQgc291bmRjYXJkICovCisJdW5zaWduZWQgY2hhciByZXNlcnZlZF9bMTZdOwkvKiByZXNlcnZlZCBmb3IgZnV0dXJlICh3YXMgSUQgb2YgbWl4ZXIpICovCisJdW5zaWduZWQgY2hhciBtaXhlcm5hbWVbODBdOwkvKiB2aXN1YWwgbWl4ZXIgaWRlbnRpZmljYXRpb24gKi8KKwl1bnNpZ25lZCBjaGFyIGNvbXBvbmVudHNbODBdOwkvKiBjYXJkIGNvbXBvbmVudHMgLyBmaW5lIGlkZW50aWZpY2F0aW9uLCBkZWxpbWl0ZWQgd2l0aCBvbmUgc3BhY2UgKEFDOTcgZXRjLi4pICovCisJdW5zaWduZWQgY2hhciByZXNlcnZlZFs0OF07CS8qIHJlc2VydmVkIGZvciBmdXR1cmUgKi8KK307CisKK2VudW0gc25kcnZfY3RsX2VsZW1fdHlwZSB7CisJU05EUlZfQ1RMX0VMRU1fVFlQRV9OT05FID0gMCwJCS8qIGludmFsaWQgKi8KKwlTTkRSVl9DVExfRUxFTV9UWVBFX0JPT0xFQU4sCQkvKiBib29sZWFuIHR5cGUgKi8KKwlTTkRSVl9DVExfRUxFTV9UWVBFX0lOVEVHRVIsCQkvKiBpbnRlZ2VyIHR5cGUgKi8KKwlTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQsCQkvKiBlbnVtZXJhdGVkIHR5cGUgKi8KKwlTTkRSVl9DVExfRUxFTV9UWVBFX0JZVEVTLAkJLyogYnl0ZSBhcnJheSAqLworCVNORFJWX0NUTF9FTEVNX1RZUEVfSUVDOTU4LAkJLyogSUVDOTU4IChTL1BESUYpIHNldHVwICovCisJU05EUlZfQ1RMX0VMRU1fVFlQRV9JTlRFR0VSNjQsCQkvKiA2NC1iaXQgaW50ZWdlciB0eXBlICovCisJU05EUlZfQ1RMX0VMRU1fVFlQRV9MQVNUID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9JTlRFR0VSNjQsCit9OworCitlbnVtIHNuZHJ2X2N0bF9lbGVtX2lmYWNlIHsKKwlTTkRSVl9DVExfRUxFTV9JRkFDRV9DQVJEID0gMCwJCS8qIGdsb2JhbCBjb250cm9sICovCisJU05EUlZfQ1RMX0VMRU1fSUZBQ0VfSFdERVAsCQkvKiBoYXJkd2FyZSBkZXBlbmRlbnQgZGV2aWNlICovCisJU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCQkvKiB2aXJ0dWFsIG1peGVyIGRldmljZSAqLworCVNORFJWX0NUTF9FTEVNX0lGQUNFX1BDTSwJCS8qIFBDTSBkZXZpY2UgKi8KKwlTTkRSVl9DVExfRUxFTV9JRkFDRV9SQVdNSURJLAkJLyogUmF3TWlkaSBkZXZpY2UgKi8KKwlTTkRSVl9DVExfRUxFTV9JRkFDRV9USU1FUiwJCS8qIHRpbWVyIGRldmljZSAqLworCVNORFJWX0NUTF9FTEVNX0lGQUNFX1NFUVVFTkNFUiwJCS8qIHNlcXVlbmNlciBjbGllbnQgKi8KKwlTTkRSVl9DVExfRUxFTV9JRkFDRV9MQVNUID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfU0VRVUVOQ0VSLAorfTsKKworI2RlZmluZSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRAkJKDE8PDApCisjZGVmaW5lIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19XUklURQkJKDE8PDEpCisjZGVmaW5lIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEV1JJVEUJCShTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRHxTTkRSVl9DVExfRUxFTV9BQ0NFU1NfV1JJVEUpCisjZGVmaW5lIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19WT0xBVElMRQkJKDE8PDIpCS8qIGNvbnRyb2wgdmFsdWUgbWF5IGJlIGNoYW5nZWQgd2l0aG91dCBhIG5vdGlmaWNhdGlvbiAqLworI2RlZmluZSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVElNRVNUQU1QCQkoMTw8MikJLyogd2hlbiB3YXMgY29udHJvbCBjaGFuZ2VkICovCisjZGVmaW5lIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19JTkFDVElWRQkJKDE8PDgpCS8qIGNvbnRyb2wgZG9lcyBhY3R1YWxseSBub3RoaW5nLCBidXQgbWF5IGJlIHVwZGF0ZWQgKi8KKyNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX0xPQ0sJCSgxPDw5KQkvKiB3cml0ZSBsb2NrICovCisjZGVmaW5lIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19PV05FUgkJKDE8PDEwKQkvKiB3cml0ZSBsb2NrIG93bmVyICovCisjZGVmaW5lIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19VU0VSCQkoMTw8MjkpIC8qIHVzZXIgc3BhY2UgZWxlbWVudCAqLworI2RlZmluZSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfRElORElSRUNUCQkoMTw8MzApCS8qIGluZGlyZWN0IGFjY2VzcyBmb3IgbWF0cml4IGRpbWVuc2lvbnMgaW4gdGhlIGluZm8gc3RydWN0dXJlICovCisjZGVmaW5lIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19JTkRJUkVDVAkJKDE8PDMxKQkvKiBpbmRpcmVjdCBhY2Nlc3MgZm9yIGVsZW1lbnQgdmFsdWUgaW4gdGhlIHZhbHVlIHN0cnVjdHVyZSAqLworCisvKiBmb3IgZnVydGhlciBkZXRhaWxzIHNlZSB0aGUgQUNQSSBhbmQgUENJIHBvd2VyIG1hbmFnZW1lbnQgc3BlY2lmaWNhdGlvbiAqLworI2RlZmluZSBTTkRSVl9DVExfUE9XRVJfRDAJCTB4MDAwMAkvKiBmdWxsIE9uICovCisjZGVmaW5lIFNORFJWX0NUTF9QT1dFUl9EMQkJMHgwMTAwCS8qIHBhcnRpYWwgT24gKi8KKyNkZWZpbmUgU05EUlZfQ1RMX1BPV0VSX0QyCQkweDAyMDAJLyogcGFydGlhbCBPbiAqLworI2RlZmluZSBTTkRSVl9DVExfUE9XRVJfRDMJCTB4MDMwMAkvKiBPZmYgKi8KKyNkZWZpbmUgU05EUlZfQ1RMX1BPV0VSX0QzaG90CQkoU05EUlZfQ1RMX1BPV0VSX0QzfDB4MDAwMCkJLyogT2ZmLCB3aXRoIHBvd2VyICovCisjZGVmaW5lIFNORFJWX0NUTF9QT1dFUl9EM2NvbGQJCShTTkRSVl9DVExfUE9XRVJfRDN8MHgwMDAxKQkvKiBPZmYsIHdpdGhvdXQgcG93ZXIgKi8KKworc3RydWN0IHNuZHJ2X2N0bF9lbGVtX2lkIHsKKwl1bnNpZ25lZCBpbnQgbnVtaWQ7CQkvKiBudW1lcmljIGlkZW50aWZpZXIsIHplcm8gPSBpbnZhbGlkICovCisJZW51bSBzbmRydl9jdGxfZWxlbV9pZmFjZSBpZmFjZTsgLyogaW50ZXJmYWNlIGlkZW50aWZpZXIgKi8KKwl1bnNpZ25lZCBpbnQgZGV2aWNlOwkJLyogZGV2aWNlL2NsaWVudCBudW1iZXIgKi8KKwl1bnNpZ25lZCBpbnQgc3ViZGV2aWNlOwkJLyogc3ViZGV2aWNlIChzdWJzdHJlYW0pIG51bWJlciAqLworICAgICAgICB1bnNpZ25lZCBjaGFyIG5hbWVbNDRdOwkJLyogQVNDSUkgbmFtZSBvZiBpdGVtICovCisJdW5zaWduZWQgaW50IGluZGV4OwkJLyogaW5kZXggb2YgaXRlbSAqLworfTsKKworc3RydWN0IHNuZHJ2X2N0bF9lbGVtX2xpc3QgeworCXVuc2lnbmVkIGludCBvZmZzZXQ7CQkvKiBXOiBmaXJzdCBlbGVtZW50IElEIHRvIGdldCAqLworCXVuc2lnbmVkIGludCBzcGFjZTsJCS8qIFc6IGNvdW50IG9mIGVsZW1lbnQgSURzIHRvIGdldCAqLworCXVuc2lnbmVkIGludCB1c2VkOwkJLyogUjogY291bnQgb2YgZWxlbWVudCBJRHMgc2V0ICovCisJdW5zaWduZWQgaW50IGNvdW50OwkJLyogUjogY291bnQgb2YgYWxsIGVsZW1lbnRzICovCisJc3RydWN0IHNuZHJ2X2N0bF9lbGVtX2lkIF9fdXNlciAqcGlkczsgLyogUjogSURzICovCisJdW5zaWduZWQgY2hhciByZXNlcnZlZFs1MF07Cit9OworCitzdHJ1Y3Qgc25kcnZfY3RsX2VsZW1faW5mbyB7CisJc3RydWN0IHNuZHJ2X2N0bF9lbGVtX2lkIGlkOwkvKiBXOiBlbGVtZW50IElEICovCisJZW51bSBzbmRydl9jdGxfZWxlbV90eXBlIHR5cGU7CS8qIFI6IHZhbHVlIHR5cGUgLSBTTkRSVl9DVExfRUxFTV9UWVBFXyogKi8KKwl1bnNpZ25lZCBpbnQgYWNjZXNzOwkJLyogUjogdmFsdWUgYWNjZXNzIChiaXRtYXNrKSAtIFNORFJWX0NUTF9FTEVNX0FDQ0VTU18qICovCisJdW5zaWduZWQgaW50IGNvdW50OwkJLyogY291bnQgb2YgdmFsdWVzICovCisJcGlkX3Qgb3duZXI7CQkJLyogb3duZXIncyBQSUQgb2YgdGhpcyBjb250cm9sICovCisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJbG9uZyBtaW47CQkvKiBSOiBtaW5pbXVtIHZhbHVlICovCisJCQlsb25nIG1heDsJCS8qIFI6IG1heGltdW0gdmFsdWUgKi8KKwkJCWxvbmcgc3RlcDsJCS8qIFI6IHN0ZXAgKDAgdmFyaWFibGUpICovCisJCX0gaW50ZWdlcjsKKwkJc3RydWN0IHsKKwkJCWxvbmcgbG9uZyBtaW47CQkvKiBSOiBtaW5pbXVtIHZhbHVlICovCisJCQlsb25nIGxvbmcgbWF4OwkJLyogUjogbWF4aW11bSB2YWx1ZSAqLworCQkJbG9uZyBsb25nIHN0ZXA7CQkvKiBSOiBzdGVwICgwIHZhcmlhYmxlKSAqLworCQl9IGludGVnZXI2NDsKKwkJc3RydWN0IHsKKwkJCXVuc2lnbmVkIGludCBpdGVtczsJLyogUjogbnVtYmVyIG9mIGl0ZW1zICovCisJCQl1bnNpZ25lZCBpbnQgaXRlbTsJLyogVzogaXRlbSBudW1iZXIgKi8KKwkJCWNoYXIgbmFtZVs2NF07CQkvKiBSOiB2YWx1ZSBuYW1lICovCisJCX0gZW51bWVyYXRlZDsKKwkJdW5zaWduZWQgY2hhciByZXNlcnZlZFsxMjhdOworCX0gdmFsdWU7CisJdW5pb24geworCQl1bnNpZ25lZCBzaG9ydCBkWzRdOwkJLyogZGltZW5zaW9ucyAqLworCQl1bnNpZ25lZCBzaG9ydCAqZF9wdHI7CQkvKiBpbmRpcmVjdCAqLworCX0gZGltZW47CisJdW5zaWduZWQgY2hhciByZXNlcnZlZFs2NC00KnNpemVvZih1bnNpZ25lZCBzaG9ydCldOworfTsKKworc3RydWN0IHNuZHJ2X2N0bF9lbGVtX3ZhbHVlIHsKKwlzdHJ1Y3Qgc25kcnZfY3RsX2VsZW1faWQgaWQ7CS8qIFc6IGVsZW1lbnQgSUQgKi8KKwl1bnNpZ25lZCBpbnQgaW5kaXJlY3Q6IDE7CS8qIFc6IHVzZSBpbmRpcmVjdCBwb2ludGVyICh4eHhfcHRyIG1lbWJlcikgKi8KKyAgICAgICAgdW5pb24geworCQl1bmlvbiB7CisJCQlsb25nIHZhbHVlWzEyOF07CisJCQlsb25nICp2YWx1ZV9wdHI7CisJCX0gaW50ZWdlcjsKKwkJdW5pb24geworCQkJbG9uZyBsb25nIHZhbHVlWzY0XTsKKwkJCWxvbmcgbG9uZyAqdmFsdWVfcHRyOworCQl9IGludGVnZXI2NDsKKwkJdW5pb24geworCQkJdW5zaWduZWQgaW50IGl0ZW1bMTI4XTsKKwkJCXVuc2lnbmVkIGludCAqaXRlbV9wdHI7CisJCX0gZW51bWVyYXRlZDsKKwkJdW5pb24geworCQkJdW5zaWduZWQgY2hhciBkYXRhWzUxMl07CisJCQl1bnNpZ25lZCBjaGFyICpkYXRhX3B0cjsKKwkJfSBieXRlczsKKwkJc3RydWN0IHNuZHJ2X2Flc19pZWM5NTggaWVjOTU4OworICAgICAgICB9IHZhbHVlOyAgICAgICAgICAgICAgICAvKiBSTyAqLworCXN0cnVjdCB0aW1lc3BlYyB0c3RhbXA7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRbMTI4LXNpemVvZihzdHJ1Y3QgdGltZXNwZWMpXTsKK307CisKK2VudW0geworCVNORFJWX0NUTF9JT0NUTF9QVkVSU0lPTiA9IF9JT1IoJ1UnLCAweDAwLCBpbnQpLAorCVNORFJWX0NUTF9JT0NUTF9DQVJEX0lORk8gPSBfSU9SKCdVJywgMHgwMSwgc3RydWN0IHNuZHJ2X2N0bF9jYXJkX2luZm8pLAorCVNORFJWX0NUTF9JT0NUTF9FTEVNX0xJU1QgPSBfSU9XUignVScsIDB4MTAsIHN0cnVjdCBzbmRydl9jdGxfZWxlbV9saXN0KSwKKwlTTkRSVl9DVExfSU9DVExfRUxFTV9JTkZPID0gX0lPV1IoJ1UnLCAweDExLCBzdHJ1Y3Qgc25kcnZfY3RsX2VsZW1faW5mbyksCisJU05EUlZfQ1RMX0lPQ1RMX0VMRU1fUkVBRCA9IF9JT1dSKCdVJywgMHgxMiwgc3RydWN0IHNuZHJ2X2N0bF9lbGVtX3ZhbHVlKSwKKwlTTkRSVl9DVExfSU9DVExfRUxFTV9XUklURSA9IF9JT1dSKCdVJywgMHgxMywgc3RydWN0IHNuZHJ2X2N0bF9lbGVtX3ZhbHVlKSwKKwlTTkRSVl9DVExfSU9DVExfRUxFTV9MT0NLID0gX0lPVygnVScsIDB4MTQsIHN0cnVjdCBzbmRydl9jdGxfZWxlbV9pZCksCisJU05EUlZfQ1RMX0lPQ1RMX0VMRU1fVU5MT0NLID0gX0lPVygnVScsIDB4MTUsIHN0cnVjdCBzbmRydl9jdGxfZWxlbV9pZCksCisJU05EUlZfQ1RMX0lPQ1RMX1NVQlNDUklCRV9FVkVOVFMgPSBfSU9XUignVScsIDB4MTYsIGludCksCisJU05EUlZfQ1RMX0lPQ1RMX0VMRU1fQUREID0gX0lPV1IoJ1UnLCAweDE3LCBzdHJ1Y3Qgc25kcnZfY3RsX2VsZW1faW5mbyksCisJU05EUlZfQ1RMX0lPQ1RMX0VMRU1fUkVQTEFDRSA9IF9JT1dSKCdVJywgMHgxOCwgc3RydWN0IHNuZHJ2X2N0bF9lbGVtX2luZm8pLAorCVNORFJWX0NUTF9JT0NUTF9FTEVNX1JFTU9WRSA9IF9JT1dSKCdVJywgMHgxOSwgc3RydWN0IHNuZHJ2X2N0bF9lbGVtX2lkKSwKKwlTTkRSVl9DVExfSU9DVExfSFdERVBfTkVYVF9ERVZJQ0UgPSBfSU9XUignVScsIDB4MjAsIGludCksCisJU05EUlZfQ1RMX0lPQ1RMX0hXREVQX0lORk8gPSBfSU9SKCdVJywgMHgyMSwgc3RydWN0IHNuZHJ2X2h3ZGVwX2luZm8pLAorCVNORFJWX0NUTF9JT0NUTF9QQ01fTkVYVF9ERVZJQ0UgPSBfSU9SKCdVJywgMHgzMCwgaW50KSwKKwlTTkRSVl9DVExfSU9DVExfUENNX0lORk8gPSBfSU9XUignVScsIDB4MzEsIHN0cnVjdCBzbmRydl9wY21faW5mbyksCisJU05EUlZfQ1RMX0lPQ1RMX1BDTV9QUkVGRVJfU1VCREVWSUNFID0gX0lPVygnVScsIDB4MzIsIGludCksCisJU05EUlZfQ1RMX0lPQ1RMX1JBV01JRElfTkVYVF9ERVZJQ0UgPSBfSU9XUignVScsIDB4NDAsIGludCksCisJU05EUlZfQ1RMX0lPQ1RMX1JBV01JRElfSU5GTyA9IF9JT1dSKCdVJywgMHg0MSwgc3RydWN0IHNuZHJ2X3Jhd21pZGlfaW5mbyksCisJU05EUlZfQ1RMX0lPQ1RMX1JBV01JRElfUFJFRkVSX1NVQkRFVklDRSA9IF9JT1coJ1UnLCAweDQyLCBpbnQpLAorCVNORFJWX0NUTF9JT0NUTF9QT1dFUiA9IF9JT1dSKCdVJywgMHhkMCwgaW50KSwKKwlTTkRSVl9DVExfSU9DVExfUE9XRVJfU1RBVEUgPSBfSU9SKCdVJywgMHhkMSwgaW50KSwKK307CisKKy8qCisgKiAgUmVhZCBpbnRlcmZhY2UuCisgKi8KKworZW51bSBzbmRydl9jdGxfZXZlbnRfdHlwZSB7CisJU05EUlZfQ1RMX0VWRU5UX0VMRU0gPSAwLAorCVNORFJWX0NUTF9FVkVOVF9MQVNUID0gU05EUlZfQ1RMX0VWRU5UX0VMRU0sCit9OworCisjZGVmaW5lIFNORFJWX0NUTF9FVkVOVF9NQVNLX1ZBTFVFCSgxPDwwKQkvKiBlbGVtZW50IHZhbHVlIHdhcyBjaGFuZ2VkICovCisjZGVmaW5lIFNORFJWX0NUTF9FVkVOVF9NQVNLX0lORk8JKDE8PDEpCS8qIGVsZW1lbnQgaW5mbyB3YXMgY2hhbmdlZCAqLworI2RlZmluZSBTTkRSVl9DVExfRVZFTlRfTUFTS19BREQJKDE8PDIpCS8qIGVsZW1lbnQgd2FzIGFkZGVkICovCisjZGVmaW5lIFNORFJWX0NUTF9FVkVOVF9NQVNLX1JFTU9WRQkofjBVKQkvKiBlbGVtZW50IHdhcyByZW1vdmVkICovCisKK3N0cnVjdCBzbmRydl9jdGxfZXZlbnQgeworCWVudW0gc25kcnZfY3RsX2V2ZW50X3R5cGUgdHlwZTsJLyogZXZlbnQgdHlwZSAtIFNORFJWX0NUTF9FVkVOVF8qICovCisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJdW5zaWduZWQgaW50IG1hc2s7CisJCQlzdHJ1Y3Qgc25kcnZfY3RsX2VsZW1faWQgaWQ7CisJCX0gZWxlbTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGRhdGE4WzYwXTsKKyAgICAgICAgfSBkYXRhOworfTsKKworLyoKKyAqICBDb250cm9sIG5hbWVzCisgKi8KKworI2RlZmluZSBTTkRSVl9DVExfTkFNRV9OT05FCQkJCSIiCisjZGVmaW5lIFNORFJWX0NUTF9OQU1FX1BMQVlCQUNLCQkJCSJQbGF5YmFjayAiCisjZGVmaW5lIFNORFJWX0NUTF9OQU1FX0NBUFRVUkUJCQkJIkNhcHR1cmUgIgorCisjZGVmaW5lIFNORFJWX0NUTF9OQU1FX0lFQzk1OF9OT05FCQkJIiIKKyNkZWZpbmUgU05EUlZfQ1RMX05BTUVfSUVDOTU4X1NXSVRDSAkJCSJTd2l0Y2giCisjZGVmaW5lIFNORFJWX0NUTF9OQU1FX0lFQzk1OF9WT0xVTUUJCQkiVm9sdW1lIgorI2RlZmluZSBTTkRSVl9DVExfTkFNRV9JRUM5NThfREVGQVVMVAkJCSJEZWZhdWx0IgorI2RlZmluZSBTTkRSVl9DVExfTkFNRV9JRUM5NThfTUFTSwkJCSJNYXNrIgorI2RlZmluZSBTTkRSVl9DVExfTkFNRV9JRUM5NThfQ09OX01BU0sJCQkiQ29uIE1hc2siCisjZGVmaW5lIFNORFJWX0NUTF9OQU1FX0lFQzk1OF9QUk9fTUFTSwkJCSJQcm8gTWFzayIKKyNkZWZpbmUgU05EUlZfQ1RMX05BTUVfSUVDOTU4X1BDTV9TVFJFQU0JCSJQQ00gU3RyZWFtIgorI2RlZmluZSBTTkRSVl9DVExfTkFNRV9JRUM5NTgoZXhwbCxkaXJlY3Rpb24sd2hhdCkJIklFQzk1OCAiIGV4cGwgU05EUlZfQ1RMX05BTUVfIyNkaXJlY3Rpb24gU05EUlZfQ1RMX05BTUVfSUVDOTU4XyMjd2hhdAorCisvKgorICoKKyAqLworCitzdHJ1Y3Qgc25kcnZfeGZlcnYgeworCWNvbnN0IHN0cnVjdCBpb3ZlYyAqdmVjdG9yOworCXVuc2lnbmVkIGxvbmcgY291bnQ7Cit9OworCitlbnVtIHsKKwlTTkRSVl9JT0NUTF9SRUFEViA9IF9JT1coJ0snLCAweDAwLCBzdHJ1Y3Qgc25kcnZfeGZlcnYpLAorCVNORFJWX0lPQ1RMX1dSSVRFViA9IF9JT1coJ0snLCAweDAxLCBzdHJ1Y3Qgc25kcnZfeGZlcnYpLAorfTsKKworI2VuZGlmIC8qIF9fU09VTkRfQVNPVU5EX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvYXNvdW5kX2ZtLmggYi9pbmNsdWRlL3NvdW5kL2Fzb3VuZF9mbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwZGE2NzcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3NvdW5kL2Fzb3VuZF9mbS5oCkBAIC0wLDAgKzEsMTE1IEBACisjaWZuZGVmIF9fU09VTkRfQVNPVU5EX0ZNX0gKKyNkZWZpbmUgX19TT1VORF9BU09VTkRfRk1fSAorCisvKgorICogIEFkdmFuY2VkIExpbnV4IFNvdW5kIEFyY2hpdGVjdHVyZSAtIEFMU0EKKyAqCisgKiAgSW50ZXJmYWNlIGZpbGUgYmV0d2VlbiBBTFNBIGRyaXZlciAmIHVzZXIgc3BhY2UKKyAqICBDb3B5cmlnaHQgKGMpIDE5OTQtOTggYnkgSmFyb3NsYXYgS3lzZWxhIDxwZXJleEBzdXNlLmN6PiwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgNEZyb250IFRlY2hub2xvZ2llcworICoKKyAqICBEaXJlY3QgRk0gY29udHJvbAorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqCisgKi8KKworI2RlZmluZSBTTkRSVl9ETV9GTV9NT0RFX09QTDIJMHgwMAorI2RlZmluZSBTTkRSVl9ETV9GTV9NT0RFX09QTDMJMHgwMQorCit0eXBlZGVmIHN0cnVjdCBzbmRfZG1fZm1faW5mbyB7CisJdW5zaWduZWQgY2hhciBmbV9tb2RlOwkJLyogT1BMIG1vZGUsIHNlZSBTTkRSVl9ETV9GTV9NT0RFX1hYWCAqLworCXVuc2lnbmVkIGNoYXIgcmh5dGhtOwkJLyogcGVyY3Vzc2lvbiBtb2RlIGZsYWcgKi8KK30gc25kX2RtX2ZtX2luZm9fdDsKKworLyoKKyAqICBEYXRhIHN0cnVjdHVyZSBjb21wb3NpbmcgYW4gRk0gIm5vdGUiIG9yIHNvdW5kIGV2ZW50LgorICovCisKK3R5cGVkZWYgc3RydWN0IHNuZF9kbV9mbV92b2ljZSB7CisJdW5zaWduZWQgY2hhciBvcDsJCS8qIG9wZXJhdG9yIGNlbGwgKDAgb3IgMSkgKi8KKwl1bnNpZ25lZCBjaGFyIHZvaWNlOwkJLyogRk0gdm9pY2UgKDAgdG8gMTcpICovCisKKwl1bnNpZ25lZCBjaGFyIGFtOwkJLyogYW1wbGl0dWRlIG1vZHVsYXRpb24gKi8KKwl1bnNpZ25lZCBjaGFyIHZpYnJhdG87CQkvKiB2aWJyYXRvIGVmZmVjdCAqLworCXVuc2lnbmVkIGNoYXIgZG9fc3VzdGFpbjsJLyogc3VzdGFpbiBwaGFzZSAqLworCXVuc2lnbmVkIGNoYXIga2JkX3NjYWxlOwkvKiBrZXlib2FyZCBzY2FsaW5nICovCisJdW5zaWduZWQgY2hhciBoYXJtb25pYzsJCS8qIDQgYml0czogaGFybW9uaWMgYW5kIG11bHRpcGxpZXIgKi8KKwl1bnNpZ25lZCBjaGFyIHNjYWxlX2xldmVsOwkvKiAyIGJpdHM6IGRlY3JlYXNlIG91dHB1dCBmcmVxIHJpc2VzICovCisJdW5zaWduZWQgY2hhciB2b2x1bWU7CQkvKiA2IGJpdHM6IHZvbHVtZSAqLworCisJdW5zaWduZWQgY2hhciBhdHRhY2s7CQkvKiA0IGJpdHM6IGF0dGFjayByYXRlICovCisJdW5zaWduZWQgY2hhciBkZWNheTsJCS8qIDQgYml0czogZGVjYXkgcmF0ZSAqLworCXVuc2lnbmVkIGNoYXIgc3VzdGFpbjsJCS8qIDQgYml0czogc3VzdGFpbiBsZXZlbCAqLworCXVuc2lnbmVkIGNoYXIgcmVsZWFzZTsJCS8qIDQgYml0czogcmVsZWFzZSByYXRlICovCisKKwl1bnNpZ25lZCBjaGFyIGZlZWRiYWNrOwkJLyogMyBiaXRzOiBmZWVkYmFjayBmb3Igb3AwICovCisJdW5zaWduZWQgY2hhciBjb25uZWN0aW9uOwkvKiAwIGZvciBzZXJpYWwsIDEgZm9yIHBhcmFsbGVsICovCisJdW5zaWduZWQgY2hhciBsZWZ0OwkJLyogc3RlcmVvIGxlZnQgKi8KKwl1bnNpZ25lZCBjaGFyIHJpZ2h0OwkJLyogc3RlcmVvIHJpZ2h0ICovCisJdW5zaWduZWQgY2hhciB3YXZlZm9ybTsJCS8qIDMgYml0czogd2F2ZWZvcm0gc2hhcGUgKi8KK30gc25kX2RtX2ZtX3ZvaWNlX3Q7CisKKy8qCisgKiAgVGhpcyBkZXNjcmliZXMgYW4gRk0gbm90ZSBieSBpdHMgdm9pY2UsIG9jdGF2ZSwgZnJlcXVlbmN5IG51bWJlciAoMTBiaXQpCisgKiAgYW5kIGtleSBvbi9vZmYuCisgKi8KKwordHlwZWRlZiBzdHJ1Y3Qgc25kX2RtX2ZtX25vdGUgeworCXVuc2lnbmVkIGNoYXIgdm9pY2U7CS8qIDAtMTcgdm9pY2UgY2hhbm5lbCAqLworCXVuc2lnbmVkIGNoYXIgb2N0YXZlOwkvKiAzIGJpdHM6IHdoYXQgb2N0YXZlIHRvIHBsYXkgKi8KKwl1bnNpZ25lZCBpbnQgZm51bTsJLyogMTAgYml0czogZnJlcXVlbmN5IG51bWJlciAqLworCXVuc2lnbmVkIGNoYXIga2V5X29uOwkvKiBzZXQgZm9yIGFjdGl2ZSwgY2xlYXIgZm9yIHNpbGVudCAqLworfSBzbmRfZG1fZm1fbm90ZV90OworCisvKgorICogIEZNIHBhcmFtZXRlcnMgdGhhdCBhcHBseSBnbG9iYWxseSB0byBhbGwgdm9pY2VzLCBhbmQgdGh1cyBhcmUgbm90ICJub3RlcyIKKyAqLworCit0eXBlZGVmIHN0cnVjdCBzbmRfZG1fZm1fcGFyYW1zIHsKKwl1bnNpZ25lZCBjaGFyIGFtX2RlcHRoOwkJLyogYW1wbGl0dWRlIG1vZHVsYXRpb24gZGVwdGggKDE9aGkpICovCisJdW5zaWduZWQgY2hhciB2aWJfZGVwdGg7CS8qIHZpYnJhdG8gZGVwdGggKDE9aGkpICovCisJdW5zaWduZWQgY2hhciBrYmRfc3BsaXQ7CS8qIGtleWJvYXJkIHNwbGl0ICovCisJdW5zaWduZWQgY2hhciByaHl0aG07CQkvKiBwZXJjdXNzaW9uIG1vZGUgc2VsZWN0ICovCisKKwkvKiBUaGlzIGJsb2NrIGlzIHRoZSBwZXJjdXNzaW9uIGluc3RydW1lbnQgZGF0YSAqLworCXVuc2lnbmVkIGNoYXIgYmFzczsKKwl1bnNpZ25lZCBjaGFyIHNuYXJlOworCXVuc2lnbmVkIGNoYXIgdG9tdG9tOworCXVuc2lnbmVkIGNoYXIgY3ltYmFsOworCXVuc2lnbmVkIGNoYXIgaGloYXQ7Cit9IHNuZF9kbV9mbV9wYXJhbXNfdDsKKworLyoKKyAqICBGTSBtb2RlIGlvY3RsIHNldHRpbmdzCisgKi8KKworI2RlZmluZSBTTkRSVl9ETV9GTV9JT0NUTF9JTkZPCQlfSU9SKCdIJywgMHgyMCwgc25kX2RtX2ZtX2luZm9fdCkKKyNkZWZpbmUgU05EUlZfRE1fRk1fSU9DVExfUkVTRVQJCV9JTyAoJ0gnLCAweDIxKQorI2RlZmluZSBTTkRSVl9ETV9GTV9JT0NUTF9QTEFZX05PVEUJX0lPVygnSCcsIDB4MjIsIHNuZF9kbV9mbV9ub3RlX3QpCisjZGVmaW5lIFNORFJWX0RNX0ZNX0lPQ1RMX1NFVF9WT0lDRQlfSU9XKCdIJywgMHgyMywgc25kX2RtX2ZtX3ZvaWNlX3QpCisjZGVmaW5lIFNORFJWX0RNX0ZNX0lPQ1RMX1NFVF9QQVJBTVMJX0lPVygnSCcsIDB4MjQsIHNuZF9kbV9mbV9wYXJhbXNfdCkKKyNkZWZpbmUgU05EUlZfRE1fRk1fSU9DVExfU0VUX01PREUJX0lPVygnSCcsIDB4MjUsIGludCkKKy8qIGZvciBPUEwzIG9ubHkgKi8KKyNkZWZpbmUgU05EUlZfRE1fRk1fSU9DVExfU0VUX0NPTk5FQ1RJT04JX0lPVygnSCcsIDB4MjYsIGludCkKKworI2RlZmluZSBTTkRSVl9ETV9GTV9PU1NfSU9DVExfUkVTRVQJCTB4MjAKKyNkZWZpbmUgU05EUlZfRE1fRk1fT1NTX0lPQ1RMX1BMQVlfTk9URQkJMHgyMQorI2RlZmluZSBTTkRSVl9ETV9GTV9PU1NfSU9DVExfU0VUX1ZPSUNFCQkweDIyCisjZGVmaW5lIFNORFJWX0RNX0ZNX09TU19JT0NUTF9TRVRfUEFSQU1TCTB4MjMKKyNkZWZpbmUgU05EUlZfRE1fRk1fT1NTX0lPQ1RMX1NFVF9NT0RFCQkweDI0CisjZGVmaW5lIFNORFJWX0RNX0ZNX09TU19JT0NUTF9TRVRfT1BMCQkweDI1CisKKyNlbmRpZiAvKiBfX1NPVU5EX0FTT1VORF9GTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL2Fzb3VuZGVmLmggYi9pbmNsdWRlL3NvdW5kL2Fzb3VuZGVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThjOWVmMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvc291bmQvYXNvdW5kZWYuaApAQCAtMCwwICsxLDIyNyBAQAorI2lmbmRlZiBfX1NPVU5EX0FTT1VOREVGX0gKKyNkZWZpbmUgX19TT1VORF9BU09VTkRFRl9ICisKKy8qCisgKiAgQWR2YW5jZWQgTGludXggU291bmQgQXJjaGl0ZWN0dXJlIC0gQUxTQSAtIERyaXZlcgorICogIENvcHlyaWdodCAoYykgMTk5NC0yMDAwIGJ5IEphcm9zbGF2IEt5c2VsYSA8cGVyZXhAc3VzZS5jej4KKyAqCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICoKKyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICBEaWdpdGFsIGF1ZGlvIGludGVyZmFjZQkJCQkJICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogQUVTL0lFQzk1OCBjaGFubmVsIHN0YXR1cyBiaXRzICovCisjZGVmaW5lIElFQzk1OF9BRVMwX1BST0ZFU1NJT05BTAkoMTw8MCkJLyogMCA9IGNvbnN1bWVyLCAxID0gcHJvZmVzc2lvbmFsICovCisjZGVmaW5lIElFQzk1OF9BRVMwX05PTkFVRElPCQkoMTw8MSkJLyogMCA9IGF1ZGlvLCAxID0gbm9uLWF1ZGlvICovCisjZGVmaW5lIElFQzk1OF9BRVMwX1BST19FTVBIQVNJUwkoNzw8MikJLyogbWFzayAtIGVtcGhhc2lzICovCisjZGVmaW5lIElFQzk1OF9BRVMwX1BST19FTVBIQVNJU19OT1RJRAkoMDw8MikJLyogZW1waGFzaXMgbm90IGluZGljYXRlZCAqLworI2RlZmluZSBJRUM5NThfQUVTMF9QUk9fRU1QSEFTSVNfTk9ORQkoMTw8MikJLyogbm9uZSBlbXBoYXNpcyAqLworI2RlZmluZSBJRUM5NThfQUVTMF9QUk9fRU1QSEFTSVNfNTAxNQkoMzw8MikJLyogNTAvMTV1cyBlbXBoYXNpcyAqLworI2RlZmluZSBJRUM5NThfQUVTMF9QUk9fRU1QSEFTSVNfQ0NJVFQJKDc8PDIpCS8qIENDSVRUIEouMTcgZW1waGFzaXMgKi8KKyNkZWZpbmUgSUVDOTU4X0FFUzBfUFJPX0ZSRVFfVU5MT0NLRUQJKDE8PDUpCS8qIHNvdXJjZSBzYW1wbGUgZnJlcXVlbmN5OiAwID0gbG9ja2VkLCAxID0gdW5sb2NrZWQgKi8KKyNkZWZpbmUgSUVDOTU4X0FFUzBfUFJPX0ZTCQkoMzw8NikJLyogbWFzayAtIHNhbXBsZSBmcmVxdWVuY3kgKi8KKyNkZWZpbmUgSUVDOTU4X0FFUzBfUFJPX0ZTX05PVElECSgwPDw2KQkvKiBmcyBub3QgaW5kaWNhdGVkICovCisjZGVmaW5lIElFQzk1OF9BRVMwX1BST19GU180NDEwMAkoMTw8NikJLyogNDQuMWtIeiAqLworI2RlZmluZSBJRUM5NThfQUVTMF9QUk9fRlNfNDgwMDAJKDI8PDYpCS8qIDQ4a0h6ICovCisjZGVmaW5lIElFQzk1OF9BRVMwX1BST19GU18zMjAwMAkoMzw8NikJLyogMzJrSHogKi8KKyNkZWZpbmUgSUVDOTU4X0FFUzBfQ09OX05PVF9DT1BZUklHSFQJKDE8PDIpCS8qIDAgPSBjb3B5cmlnaHQsIDEgPSBub3QgY29weXJpZ2h0ICovCisjZGVmaW5lIElFQzk1OF9BRVMwX0NPTl9FTVBIQVNJUwkoNzw8MykJLyogbWFzayAtIGVtcGhhc2lzICovCisjZGVmaW5lIElFQzk1OF9BRVMwX0NPTl9FTVBIQVNJU19OT05FCSgwPDwzKQkvKiBub25lIGVtcGhhc2lzICovCisjZGVmaW5lIElFQzk1OF9BRVMwX0NPTl9FTVBIQVNJU181MDE1CSgxPDwzKQkvKiA1MC8xNXVzIGVtcGhhc2lzICovCisjZGVmaW5lIElFQzk1OF9BRVMwX0NPTl9NT0RFCQkoMzw8NikJLyogbWFzayAtIG1vZGUgKi8KKyNkZWZpbmUgSUVDOTU4X0FFUzFfUFJPX01PREUJCSgxNTw8MCkJLyogbWFzayAtIGNoYW5uZWwgbW9kZSAqLworI2RlZmluZSBJRUM5NThfQUVTMV9QUk9fTU9ERV9OT1RJRAkoMDw8MCkJLyogbm90IGluZGljYXRlZCAqLworI2RlZmluZSBJRUM5NThfQUVTMV9QUk9fTU9ERV9TVEVSRU9QSE9OSUMgKDI8PDApIC8qIHN0ZXJlb3Bob25pYyAtIGNoIEEgaXMgbGVmdCAqLworI2RlZmluZSBJRUM5NThfQUVTMV9QUk9fTU9ERV9TSU5HTEUJKDQ8PDApCS8qIHNpbmdsZSBjaGFubmVsICovCisjZGVmaW5lIElFQzk1OF9BRVMxX1BST19NT0RFX1RXTwkoODw8MCkJLyogdHdvIGNoYW5uZWxzICovCisjZGVmaW5lIElFQzk1OF9BRVMxX1BST19NT0RFX1BSSU1BUlkJKDEyPDwwKQkvKiBwcmltYXJ5L3NlY29uZGFyeSAqLworI2RlZmluZSBJRUM5NThfQUVTMV9QUk9fTU9ERV9CWVRFMwkoMTU8PDApCS8qIHZlY3RvciB0byBieXRlIDMgKi8KKyNkZWZpbmUgSUVDOTU4X0FFUzFfUFJPX1VTRVJCSVRTCSgxNTw8NCkJLyogbWFzayAtIHVzZXIgYml0cyAqLworI2RlZmluZSBJRUM5NThfQUVTMV9QUk9fVVNFUkJJVFNfTk9USUQJKDA8PDQpCS8qIG5vdCBpbmRpY2F0ZWQgKi8KKyNkZWZpbmUgSUVDOTU4X0FFUzFfUFJPX1VTRVJCSVRTXzE5MgkoODw8NCkJLyogMTkyLWJpdCBzdHJ1Y3R1cmUgKi8KKyNkZWZpbmUgSUVDOTU4X0FFUzFfUFJPX1VTRVJCSVRTX1VERUYJKDEyPDw0KQkvKiB1c2VyIGRlZmluZWQgYXBwbGljYXRpb24gKi8KKyNkZWZpbmUgSUVDOTU4X0FFUzFfQ09OX0NBVEVHT1JZCTB4N2YKKyNkZWZpbmUgSUVDOTU4X0FFUzFfQ09OX0dFTkVSQUwJCTB4MDAKKyNkZWZpbmUgSUVDOTU4X0FFUzFfQ09OX0VYUEVSSU1FTlRBTAkweDQwCisjZGVmaW5lIElFQzk1OF9BRVMxX0NPTl9TT0xJRE1FTV9NQVNLCTB4MGYKKyNkZWZpbmUgSUVDOTU4X0FFUzFfQ09OX1NPTElETUVNX0lECTB4MDgKKyNkZWZpbmUgSUVDOTU4X0FFUzFfQ09OX0JST0FEQ0FTVDFfTUFTSyAweDA3CisjZGVmaW5lIElFQzk1OF9BRVMxX0NPTl9CUk9BRENBU1QxX0lECTB4MDQKKyNkZWZpbmUgSUVDOTU4X0FFUzFfQ09OX0RJR0RJR0NPTlZfTUFTSyAweDA3CisjZGVmaW5lIElFQzk1OF9BRVMxX0NPTl9ESUdESUdDT05WX0lECTB4MDIKKyNkZWZpbmUgSUVDOTU4X0FFUzFfQ09OX0FEQ19DT1BZUklHSFRfTUFTSyAweDFmCisjZGVmaW5lIElFQzk1OF9BRVMxX0NPTl9BRENfQ09QWVJJR0hUX0lEIDB4MDYKKyNkZWZpbmUgSUVDOTU4X0FFUzFfQ09OX0FEQ19NQVNLCTB4MWYKKyNkZWZpbmUgSUVDOTU4X0FFUzFfQ09OX0FEQ19JRAkJMHgxNgorI2RlZmluZSBJRUM5NThfQUVTMV9DT05fQlJPQURDQVNUMl9NQVNLIDB4MGYKKyNkZWZpbmUgSUVDOTU4X0FFUzFfQ09OX0JST0FEQ0FTVDJfSUQJMHgwZQorI2RlZmluZSBJRUM5NThfQUVTMV9DT05fTEFTRVJPUFRfTUFTSwkweDA3CisjZGVmaW5lIElFQzk1OF9BRVMxX0NPTl9MQVNFUk9QVF9JRAkweDAxCisjZGVmaW5lIElFQzk1OF9BRVMxX0NPTl9NVVNJQ0FMX01BU0sJMHgwNworI2RlZmluZSBJRUM5NThfQUVTMV9DT05fTVVTSUNBTF9JRAkweDA1CisjZGVmaW5lIElFQzk1OF9BRVMxX0NPTl9NQUdORVRJQ19NQVNLCTB4MDcKKyNkZWZpbmUgSUVDOTU4X0FFUzFfQ09OX01BR05FVElDX0lECTB4MDMKKyNkZWZpbmUgSUVDOTU4X0FFUzFfQ09OX0lFQzkwOF9DRAkoSUVDOTU4X0FFUzFfQ09OX0xBU0VST1BUX0lEfDB4MDApCisjZGVmaW5lIElFQzk1OF9BRVMxX0NPTl9OT05fSUVDOTA4X0NECShJRUM5NThfQUVTMV9DT05fTEFTRVJPUFRfSUR8MHgwOCkKKyNkZWZpbmUgSUVDOTU4X0FFUzFfQ09OX1BDTV9DT0RFUgkoSUVDOTU4X0FFUzFfQ09OX0RJR0RJR0NPTlZfSUR8MHgwMCkKKyNkZWZpbmUgSUVDOTU4X0FFUzFfQ09OX1NBTVBMRVIJCShJRUM5NThfQUVTMV9DT05fRElHRElHQ09OVl9JRHwweDIwKQorI2RlZmluZSBJRUM5NThfQUVTMV9DT05fTUlYRVIJCShJRUM5NThfQUVTMV9DT05fRElHRElHQ09OVl9JRHwweDEwKQorI2RlZmluZSBJRUM5NThfQUVTMV9DT05fUkFURV9DT05WRVJURVIJKElFQzk1OF9BRVMxX0NPTl9ESUdESUdDT05WX0lEfDB4MTgpCisjZGVmaW5lIElFQzk1OF9BRVMxX0NPTl9TWU5USEVTSVpFUgkoSUVDOTU4X0FFUzFfQ09OX01VU0lDQUxfSUR8MHgwMCkKKyNkZWZpbmUgSUVDOTU4X0FFUzFfQ09OX01JQ1JPUEhPTkUJKElFQzk1OF9BRVMxX0NPTl9NVVNJQ0FMX0lEfDB4MDgpCisjZGVmaW5lIElFQzk1OF9BRVMxX0NPTl9EQVQJCShJRUM5NThfQUVTMV9DT05fTUFHTkVUSUNfSUR8MHgwMCkKKyNkZWZpbmUgSUVDOTU4X0FFUzFfQ09OX1ZDUgkJKElFQzk1OF9BRVMxX0NPTl9NQUdORVRJQ19JRHwweDA4KQorI2RlZmluZSBJRUM5NThfQUVTMV9DT05fT1JJR0lOQUwJKDE8PDcpCS8qIHRoaXMgYml0cyBkZXBlbmRzIG9uIHRoZSBjYXRlZ29yeSBjb2RlICovCisjZGVmaW5lIElFQzk1OF9BRVMyX1BST19TQklUUwkJKDc8PDApCS8qIG1hc2sgLSBzYW1wbGUgYml0cyAqLworI2RlZmluZSBJRUM5NThfQUVTMl9QUk9fU0JJVFNfMjAJKDI8PDApCS8qIDIwLWJpdCAtIGNvb3JkaW5hdGlvbiAqLworI2RlZmluZSBJRUM5NThfQUVTMl9QUk9fU0JJVFNfMjQJKDQ8PDApCS8qIDI0LWJpdCAtIG1haW4gYXVkaW8gKi8KKyNkZWZpbmUgSUVDOTU4X0FFUzJfUFJPX1NCSVRTX1VERUYJKDY8PDApCS8qIHVzZXIgZGVmaW5lZCBhcHBsaWNhdGlvbiAqLworI2RlZmluZSBJRUM5NThfQUVTMl9QUk9fV09SRExFTgkJKDc8PDMpCS8qIG1hc2sgLSBzb3VyY2Ugd29yZCBsZW5ndGggKi8KKyNkZWZpbmUgSUVDOTU4X0FFUzJfUFJPX1dPUkRMRU5fTk9USUQJKDA8PDMpCS8qIG5vdCBpbmRpY2F0ZWQgKi8KKyNkZWZpbmUgSUVDOTU4X0FFUzJfUFJPX1dPUkRMRU5fMjJfMTgJKDI8PDMpCS8qIDIyLWJpdCBvciAxOC1iaXQgKi8KKyNkZWZpbmUgSUVDOTU4X0FFUzJfUFJPX1dPUkRMRU5fMjNfMTkJKDQ8PDMpCS8qIDIzLWJpdCBvciAxOS1iaXQgKi8KKyNkZWZpbmUgSUVDOTU4X0FFUzJfUFJPX1dPUkRMRU5fMjRfMjAJKDU8PDMpCS8qIDI0LWJpdCBvciAyMC1iaXQgKi8KKyNkZWZpbmUgSUVDOTU4X0FFUzJfUFJPX1dPUkRMRU5fMjBfMTYJKDY8PDMpCS8qIDIwLWJpdCBvciAxNi1iaXQgKi8KKyNkZWZpbmUgSUVDOTU4X0FFUzJfQ09OX1NPVVJDRQkJKDE1PDwwKQkvKiBtYXNrIC0gc291cmNlIG51bWJlciAqLworI2RlZmluZSBJRUM5NThfQUVTMl9DT05fU09VUkNFX1VOU1BFQwkoMDw8MCkJLyogdW5zcGVjaWZpZWQgKi8KKyNkZWZpbmUgSUVDOTU4X0FFUzJfQ09OX0NIQU5ORUwJCSgxNTw8NCkJLyogbWFzayAtIGNoYW5uZWwgbnVtYmVyICovCisjZGVmaW5lIElFQzk1OF9BRVMyX0NPTl9DSEFOTkVMX1VOU1BFQwkoMDw8NCkJLyogdW5zcGVjaWZpZWQgKi8KKyNkZWZpbmUgSUVDOTU4X0FFUzNfQ09OX0ZTCQkoMTU8PDApCS8qIG1hc2sgLSBzYW1wbGUgZnJlcXVlbmN5ICovCisjZGVmaW5lIElFQzk1OF9BRVMzX0NPTl9GU180NDEwMAkoMDw8MCkJLyogNDQuMWtIeiAqLworI2RlZmluZSBJRUM5NThfQUVTM19DT05fRlNfNDgwMDAJKDI8PDApCS8qIDQ4a0h6ICovCisjZGVmaW5lIElFQzk1OF9BRVMzX0NPTl9GU18zMjAwMAkoMzw8MCkJLyogMzJrSHogKi8KKyNkZWZpbmUgSUVDOTU4X0FFUzNfQ09OX0NMT0NLCQkoMzw8NCkJLyogbWFzayAtIGNsb2NrIGFjY3VyYWN5ICovCisjZGVmaW5lIElFQzk1OF9BRVMzX0NPTl9DTE9DS18xMDAwUFBNCSgwPDw0KQkvKiAxMDAwIHBwbSAqLworI2RlZmluZSBJRUM5NThfQUVTM19DT05fQ0xPQ0tfNTBQUE0JKDE8PDQpCS8qIDUwIHBwbSAqLworI2RlZmluZSBJRUM5NThfQUVTM19DT05fQ0xPQ0tfVkFSSUFCTEUJKDI8PDQpCS8qIHZhcmlhYmxlIHBpdGNoICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNSURJIHYxLjAgaW50ZXJmYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIE1JRElfQ0hBTk5FTFMJCQkxNgorI2RlZmluZSBNSURJX0dNX0RSVU1fQ0hBTk5FTAkJKDEwLTEpCisKKy8qCisgKiAgTUlESSBjb21tYW5kcworICovCisKKyNkZWZpbmUgTUlESV9DTURfTk9URV9PRkYJCTB4ODAKKyNkZWZpbmUgTUlESV9DTURfTk9URV9PTgkJMHg5MAorI2RlZmluZSBNSURJX0NNRF9OT1RFX1BSRVNTVVJFCQkweGEwCisjZGVmaW5lIE1JRElfQ01EX0NPTlRST0wJCTB4YjAKKyNkZWZpbmUgTUlESV9DTURfUEdNX0NIQU5HRQkJMHhjMAorI2RlZmluZSBNSURJX0NNRF9DSEFOTkVMX1BSRVNTVVJFCTB4ZDAKKyNkZWZpbmUgTUlESV9DTURfQkVOREVSCQkJMHhlMAorCisjZGVmaW5lIE1JRElfQ01EX0NPTU1PTl9TWVNFWAkJMHhmMAorI2RlZmluZSBNSURJX0NNRF9DT01NT05fTVRDX1FVQVJURVIJMHhmMQorI2RlZmluZSBNSURJX0NNRF9DT01NT05fU09OR19QT1MJMHhmMgorI2RlZmluZSBNSURJX0NNRF9DT01NT05fU09OR19TRUxFQ1QJMHhmMworI2RlZmluZSBNSURJX0NNRF9DT01NT05fVFVORV9SRVFVRVNUCTB4ZjYKKyNkZWZpbmUgTUlESV9DTURfQ09NTU9OX1NZU0VYX0VORAkweGY3CisjZGVmaW5lIE1JRElfQ01EX0NPTU1PTl9DTE9DSwkJMHhmOAorI2RlZmluZSBNSURJX0NNRF9DT01NT05fU1RBUlQJCTB4ZmEKKyNkZWZpbmUgTUlESV9DTURfQ09NTU9OX0NPTlRJTlVFCTB4ZmIKKyNkZWZpbmUgTUlESV9DTURfQ09NTU9OX1NUT1AJCTB4ZmMKKyNkZWZpbmUgTUlESV9DTURfQ09NTU9OX1NFTlNJTkcJCTB4ZmUKKyNkZWZpbmUgTUlESV9DTURfQ09NTU9OX1JFU0VUCQkweGZmCisKKy8qCisgKiAgTUlESSBjb250cm9sbGVycworICovCisKKyNkZWZpbmUgTUlESV9DVExfTVNCX0JBTksJCTB4MDAKKyNkZWZpbmUgTUlESV9DVExfTVNCX01PRFdIRUVMICAgICAgICAgCTB4MDEKKyNkZWZpbmUgTUlESV9DVExfTVNCX0JSRUFUSCAgICAgICAgICAgCTB4MDIKKyNkZWZpbmUgTUlESV9DVExfTVNCX0ZPT1QgICAgICAgICAgICAgCTB4MDQKKyNkZWZpbmUgTUlESV9DVExfTVNCX1BPUlRBTUVOVE9fVElNRSAJMHgwNQorI2RlZmluZSBNSURJX0NUTF9NU0JfREFUQV9FTlRSWQkJMHgwNgorI2RlZmluZSBNSURJX0NUTF9NU0JfTUFJTl9WT0xVTUUgICAgICAJMHgwNworI2RlZmluZSBNSURJX0NUTF9NU0JfQkFMQU5DRSAgICAgICAgICAJMHgwOAorI2RlZmluZSBNSURJX0NUTF9NU0JfUEFOICAgICAgICAgICAgICAJMHgwYQorI2RlZmluZSBNSURJX0NUTF9NU0JfRVhQUkVTU0lPTiAgICAgICAJMHgwYgorI2RlZmluZSBNSURJX0NUTF9NU0JfRUZGRUNUMQkJMHgwYworI2RlZmluZSBNSURJX0NUTF9NU0JfRUZGRUNUMgkJMHgwZAorI2RlZmluZSBNSURJX0NUTF9NU0JfR0VORVJBTF9QVVJQT1NFMSAJMHgxMAorI2RlZmluZSBNSURJX0NUTF9NU0JfR0VORVJBTF9QVVJQT1NFMiAJMHgxMQorI2RlZmluZSBNSURJX0NUTF9NU0JfR0VORVJBTF9QVVJQT1NFMyAJMHgxMgorI2RlZmluZSBNSURJX0NUTF9NU0JfR0VORVJBTF9QVVJQT1NFNCAJMHgxMworI2RlZmluZSBNSURJX0NUTF9MU0JfQkFOSwkJMHgyMAorI2RlZmluZSBNSURJX0NUTF9MU0JfTU9EV0hFRUwgICAgICAgIAkweDIxCisjZGVmaW5lIE1JRElfQ1RMX0xTQl9CUkVBVEggICAgICAgICAgIAkweDIyCisjZGVmaW5lIE1JRElfQ1RMX0xTQl9GT09UICAgICAgICAgICAgIAkweDI0CisjZGVmaW5lIE1JRElfQ1RMX0xTQl9QT1JUQU1FTlRPX1RJTUUgCTB4MjUKKyNkZWZpbmUgTUlESV9DVExfTFNCX0RBVEFfRU5UUlkJCTB4MjYKKyNkZWZpbmUgTUlESV9DVExfTFNCX01BSU5fVk9MVU1FICAgICAgCTB4MjcKKyNkZWZpbmUgTUlESV9DVExfTFNCX0JBTEFOQ0UgICAgICAgICAgCTB4MjgKKyNkZWZpbmUgTUlESV9DVExfTFNCX1BBTiAgICAgICAgICAgICAgCTB4MmEKKyNkZWZpbmUgTUlESV9DVExfTFNCX0VYUFJFU1NJT04gICAgICAgCTB4MmIKKyNkZWZpbmUgTUlESV9DVExfTFNCX0VGRkVDVDEJCTB4MmMKKyNkZWZpbmUgTUlESV9DVExfTFNCX0VGRkVDVDIJCTB4MmQKKyNkZWZpbmUgTUlESV9DVExfTFNCX0dFTkVSQUxfUFVSUE9TRTEgCTB4MzAKKyNkZWZpbmUgTUlESV9DVExfTFNCX0dFTkVSQUxfUFVSUE9TRTIgCTB4MzEKKyNkZWZpbmUgTUlESV9DVExfTFNCX0dFTkVSQUxfUFVSUE9TRTMgCTB4MzIKKyNkZWZpbmUgTUlESV9DVExfTFNCX0dFTkVSQUxfUFVSUE9TRTQgCTB4MzMKKyNkZWZpbmUgTUlESV9DVExfU1VTVEFJTiAgICAgICAgICAgICAgCTB4NDAKKyNkZWZpbmUgTUlESV9DVExfUE9SVEFNRU5UTyAgICAgICAgICAgCTB4NDEKKyNkZWZpbmUgTUlESV9DVExfU09TVEVOVVRPICAgICAgICAgICAgCTB4NDIKKyNkZWZpbmUgTUlESV9DVExfU09GVF9QRURBTCAgICAgICAgICAgCTB4NDMKKyNkZWZpbmUgTUlESV9DVExfTEVHQVRPX0ZPT1RTV0lUQ0gJMHg0NAorI2RlZmluZSBNSURJX0NUTF9IT0xEMiAgICAgICAgICAgICAgICAJMHg0NQorI2RlZmluZSBNSURJX0NUTF9TQzFfU09VTkRfVkFSSUFUSU9OCTB4NDYKKyNkZWZpbmUgTUlESV9DVExfU0MyX1RJTUJSRQkJMHg0NworI2RlZmluZSBNSURJX0NUTF9TQzNfUkVMRUFTRV9USU1FCTB4NDgKKyNkZWZpbmUgTUlESV9DVExfU0M0X0FUVEFDS19USU1FCTB4NDkKKyNkZWZpbmUgTUlESV9DVExfU0M1X0JSSUdIVE5FU1MJCTB4NGEKKyNkZWZpbmUgTUlESV9DVExfU0M2CQkJMHg0YgorI2RlZmluZSBNSURJX0NUTF9TQzcJCQkweDRjCisjZGVmaW5lIE1JRElfQ1RMX1NDOAkJCTB4NGQKKyNkZWZpbmUgTUlESV9DVExfU0M5CQkJMHg0ZQorI2RlZmluZSBNSURJX0NUTF9TQzEwCQkJMHg0ZgorI2RlZmluZSBNSURJX0NUTF9HRU5FUkFMX1BVUlBPU0U1ICAgICAJMHg1MAorI2RlZmluZSBNSURJX0NUTF9HRU5FUkFMX1BVUlBPU0U2ICAgICAJMHg1MQorI2RlZmluZSBNSURJX0NUTF9HRU5FUkFMX1BVUlBPU0U3ICAgICAJMHg1MgorI2RlZmluZSBNSURJX0NUTF9HRU5FUkFMX1BVUlBPU0U4ICAgICAJMHg1MworI2RlZmluZSBNSURJX0NUTF9QT1JUQU1FTlRPX0NPTlRST0wJMHg1NAorI2RlZmluZSBNSURJX0NUTF9FMV9SRVZFUkJfREVQVEgJMHg1YgorI2RlZmluZSBNSURJX0NUTF9FMl9UUkVNT0xPX0RFUFRICTB4NWMKKyNkZWZpbmUgTUlESV9DVExfRTNfQ0hPUlVTX0RFUFRICTB4NWQKKyNkZWZpbmUgTUlESV9DVExfRTRfREVUVU5FX0RFUFRICTB4NWUKKyNkZWZpbmUgTUlESV9DVExfRTVfUEhBU0VSX0RFUFRICTB4NWYKKyNkZWZpbmUgTUlESV9DVExfREFUQV9JTkNSRU1FTlQgICAgICAgCTB4NjAKKyNkZWZpbmUgTUlESV9DVExfREFUQV9ERUNSRU1FTlQgICAgICAgCTB4NjEKKyNkZWZpbmUgTUlESV9DVExfTk9OUkVHX1BBUk1fTlVNX0xTQiAgCTB4NjIKKyNkZWZpbmUgTUlESV9DVExfTk9OUkVHX1BBUk1fTlVNX01TQiAgCTB4NjMKKyNkZWZpbmUgTUlESV9DVExfUkVHSVNUX1BBUk1fTlVNX0xTQiAgCTB4NjQKKyNkZWZpbmUgTUlESV9DVExfUkVHSVNUX1BBUk1fTlVNX01TQgkweDY1CisjZGVmaW5lIE1JRElfQ1RMX0FMTF9TT1VORFNfT0ZGCQkweDc4CisjZGVmaW5lIE1JRElfQ1RMX1JFU0VUX0NPTlRST0xMRVJTCTB4NzkKKyNkZWZpbmUgTUlESV9DVExfTE9DQUxfQ09OVFJPTF9TV0lUQ0gJMHg3YQorI2RlZmluZSBNSURJX0NUTF9BTExfTk9URVNfT0ZGCQkweDdiCisjZGVmaW5lIE1JRElfQ1RMX09NTklfT0ZGCQkweDdjCisjZGVmaW5lIE1JRElfQ1RMX09NTklfT04JCTB4N2QKKyNkZWZpbmUgTUlESV9DVExfTU9OTzEJCQkweDdlCisjZGVmaW5lIE1JRElfQ1RMX01PTk8yCQkJMHg3ZgorCisjZW5kaWYgLyogX19TT1VORF9BU09VTkRFRl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL2NvbnRyb2wuaCBiL2luY2x1ZGUvc291bmQvY29udHJvbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiOTQ0NGMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3NvdW5kL2NvbnRyb2wuaApAQCAtMCwwICsxLDE2MiBAQAorI2lmbmRlZiBfX1NPVU5EX0NPTlRST0xfSAorI2RlZmluZSBfX1NPVU5EX0NPTlRST0xfSAorCisvKgorICogIEhlYWRlciBmaWxlIGZvciBjb250cm9sIGludGVyZmFjZQorICogIENvcHlyaWdodCAoYykgYnkgSmFyb3NsYXYgS3lzZWxhIDxwZXJleEBzdXNlLmN6PgorICoKKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxzb3VuZC9hc291bmQuaD4KKwordHlwZWRlZiBzdHJ1Y3Qgc25kcnZfYWVzX2llYzk1OCBzbmRfYWVzX2llYzk1OF90OwordHlwZWRlZiBzdHJ1Y3Qgc25kcnZfY3RsX2NhcmRfaW5mbyBzbmRfY3RsX2NhcmRfaW5mb190OwordHlwZWRlZiBlbnVtIHNuZHJ2X2N0bF9lbGVtX3R5cGUgc25kX2N0bF9lbGVtX3R5cGVfdDsKK3R5cGVkZWYgZW51bSBzbmRydl9jdGxfZWxlbV9pZmFjZSBzbmRfY3RsX2VsZW1faWZhY2VfdDsKK3R5cGVkZWYgc3RydWN0IHNuZHJ2X2N0bF9lbGVtX2lkIHNuZF9jdGxfZWxlbV9pZF90OwordHlwZWRlZiBzdHJ1Y3Qgc25kcnZfY3RsX2VsZW1fbGlzdCBzbmRfY3RsX2VsZW1fbGlzdF90OwordHlwZWRlZiBzdHJ1Y3Qgc25kcnZfY3RsX2VsZW1faW5mbyBzbmRfY3RsX2VsZW1faW5mb190OwordHlwZWRlZiBzdHJ1Y3Qgc25kcnZfY3RsX2VsZW1fdmFsdWUgc25kX2N0bF9lbGVtX3ZhbHVlX3Q7Cit0eXBlZGVmIGVudW0gc25kcnZfY3RsX2V2ZW50X3R5cGUgc25kX2N0bF9ldmVudF90eXBlX3Q7Cit0eXBlZGVmIHN0cnVjdCBzbmRydl9jdGxfZXZlbnQgc25kX2N0bF9ldmVudF90OworCisjZGVmaW5lIHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKSAoKGtjb250cm9sKS0+cHJpdmF0ZV9kYXRhKQorCit0eXBlZGVmIGludCAoc25kX2tjb250cm9sX2luZm9fdCkgKHNuZF9rY29udHJvbF90ICoga2NvbnRyb2wsIHNuZF9jdGxfZWxlbV9pbmZvX3QgKiB1aW5mbyk7Cit0eXBlZGVmIGludCAoc25kX2tjb250cm9sX2dldF90KSAoc25kX2tjb250cm9sX3QgKiBrY29udHJvbCwgc25kX2N0bF9lbGVtX3ZhbHVlX3QgKiB1Y29udHJvbCk7Cit0eXBlZGVmIGludCAoc25kX2tjb250cm9sX3B1dF90KSAoc25kX2tjb250cm9sX3QgKiBrY29udHJvbCwgc25kX2N0bF9lbGVtX3ZhbHVlX3QgKiB1Y29udHJvbCk7CisKK3R5cGVkZWYgc3RydWN0IF9zbmRfa2NvbnRyb2xfbmV3IHsKKwlzbmRfY3RsX2VsZW1faWZhY2VfdCBpZmFjZTsJLyogaW50ZXJmYWNlIGlkZW50aWZpZXIgKi8KKwl1bnNpZ25lZCBpbnQgZGV2aWNlOwkJLyogZGV2aWNlL2NsaWVudCBudW1iZXIgKi8KKwl1bnNpZ25lZCBpbnQgc3ViZGV2aWNlOwkJLyogc3ViZGV2aWNlIChzdWJzdHJlYW0pIG51bWJlciAqLworCXVuc2lnbmVkIGNoYXIgKm5hbWU7CQkvKiBBU0NJSSBuYW1lIG9mIGl0ZW0gKi8KKwl1bnNpZ25lZCBpbnQgaW5kZXg7CQkvKiBpbmRleCBvZiBpdGVtICovCisJdW5zaWduZWQgaW50IGFjY2VzczsJCS8qIGFjY2VzcyByaWdodHMgKi8KKwl1bnNpZ25lZCBpbnQgY291bnQ7CQkvKiBjb3VudCBvZiBzYW1lIGVsZW1lbnRzICovCisJc25kX2tjb250cm9sX2luZm9fdCAqaW5mbzsKKwlzbmRfa2NvbnRyb2xfZ2V0X3QgKmdldDsKKwlzbmRfa2NvbnRyb2xfcHV0X3QgKnB1dDsKKwl1bnNpZ25lZCBsb25nIHByaXZhdGVfdmFsdWU7Cit9IHNuZF9rY29udHJvbF9uZXdfdDsKKwordHlwZWRlZiBzdHJ1Y3QgX3NuZF9rY29udHJvbF92b2xhdGlsZSB7CisJc25kX2N0bF9maWxlX3QgKm93bmVyOwkvKiBsb2NrZWQgKi8KKwlwaWRfdCBvd25lcl9waWQ7CisJdW5zaWduZWQgaW50IGFjY2VzczsJLyogYWNjZXNzIHJpZ2h0cyAqLworfSBzbmRfa2NvbnRyb2xfdm9sYXRpbGVfdDsKKworc3RydWN0IF9zbmRfa2NvbnRyb2wgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsJCS8qIGxpc3Qgb2YgY29udHJvbHMgKi8KKwlzbmRfY3RsX2VsZW1faWRfdCBpZDsKKwl1bnNpZ25lZCBpbnQgY291bnQ7CQkvKiBjb3VudCBvZiBzYW1lIGVsZW1lbnRzICovCisJc25kX2tjb250cm9sX2luZm9fdCAqaW5mbzsKKwlzbmRfa2NvbnRyb2xfZ2V0X3QgKmdldDsKKwlzbmRfa2NvbnRyb2xfcHV0X3QgKnB1dDsKKwl1bnNpZ25lZCBsb25nIHByaXZhdGVfdmFsdWU7CisJdm9pZCAqcHJpdmF0ZV9kYXRhOworCXZvaWQgKCpwcml2YXRlX2ZyZWUpKHNuZF9rY29udHJvbF90ICprY29udHJvbCk7CisJc25kX2tjb250cm9sX3ZvbGF0aWxlX3QgdmRbMF07CS8qIHZvbGF0aWxlIGRhdGEgKi8KK307CisKKyNkZWZpbmUgc25kX2tjb250cm9sKG4pIGxpc3RfZW50cnkobiwgc25kX2tjb250cm9sX3QsIGxpc3QpCisKK3R5cGVkZWYgc3RydWN0IF9zbmRfa2N0bF9ldmVudCB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwkvKiBsaXN0IG9mIGV2ZW50cyAqLworCXNuZF9jdGxfZWxlbV9pZF90IGlkOworCXVuc2lnbmVkIGludCBtYXNrOworfSBzbmRfa2N0bF9ldmVudF90OworCisjZGVmaW5lIHNuZF9rY3RsX2V2ZW50KG4pIGxpc3RfZW50cnkobiwgc25kX2tjdGxfZXZlbnRfdCwgbGlzdCkKKworc3RydWN0IF9zbmRfY3RsX2ZpbGUgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsJCS8qIGxpc3Qgb2YgYWxsIGNvbnRyb2wgZmlsZXMgKi8KKwlzbmRfY2FyZF90ICpjYXJkOworCXBpZF90IHBpZDsKKwlpbnQgcHJlZmVyX3BjbV9zdWJkZXZpY2U7CisJaW50IHByZWZlcl9yYXdtaWRpX3N1YmRldmljZTsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBjaGFuZ2Vfc2xlZXA7CisJc3BpbmxvY2tfdCByZWFkX2xvY2s7CisJc3RydWN0IGZhc3luY19zdHJ1Y3QgKmZhc3luYzsKKwlpbnQgc3Vic2NyaWJlZDsJCQkvKiByZWFkIGludGVyZmFjZSBpcyBhY3RpdmF0ZWQgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGV2ZW50czsJLyogd2FpdGluZyBldmVudHMgZm9yIHJlYWQgKi8KK307CisKKyNkZWZpbmUgc25kX2N0bF9maWxlKG4pIGxpc3RfZW50cnkobiwgc25kX2N0bF9maWxlX3QsIGxpc3QpCisKK3R5cGVkZWYgaW50ICgqc25kX2tjdGxfaW9jdGxfZnVuY190KSAoc25kX2NhcmRfdCAqIGNhcmQsCisJCQkJIHNuZF9jdGxfZmlsZV90ICogY29udHJvbCwKKwkJCQkgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworCit2b2lkIHNuZF9jdGxfbm90aWZ5KHNuZF9jYXJkX3QgKiBjYXJkLCB1bnNpZ25lZCBpbnQgbWFzaywgc25kX2N0bF9lbGVtX2lkX3QgKiBpZCk7CisKK3NuZF9rY29udHJvbF90ICpzbmRfY3RsX25ldyhzbmRfa2NvbnRyb2xfdCAqIGtjb250cm9sLCB1bnNpZ25lZCBpbnQgYWNjZXNzKTsKK3NuZF9rY29udHJvbF90ICpzbmRfY3RsX25ldzEoc25kX2tjb250cm9sX25ld190ICoga2NvbnRyb2xuZXcsIHZvaWQgKiBwcml2YXRlX2RhdGEpOwordm9pZCBzbmRfY3RsX2ZyZWVfb25lKHNuZF9rY29udHJvbF90ICoga2NvbnRyb2wpOworaW50IHNuZF9jdGxfYWRkKHNuZF9jYXJkX3QgKiBjYXJkLCBzbmRfa2NvbnRyb2xfdCAqIGtjb250cm9sKTsKK2ludCBzbmRfY3RsX3JlbW92ZShzbmRfY2FyZF90ICogY2FyZCwgc25kX2tjb250cm9sX3QgKiBrY29udHJvbCk7CitpbnQgc25kX2N0bF9yZW1vdmVfaWQoc25kX2NhcmRfdCAqIGNhcmQsIHNuZF9jdGxfZWxlbV9pZF90ICppZCk7CitpbnQgc25kX2N0bF9yZW5hbWVfaWQoc25kX2NhcmRfdCAqIGNhcmQsIHNuZF9jdGxfZWxlbV9pZF90ICpzcmNfaWQsIHNuZF9jdGxfZWxlbV9pZF90ICpkc3RfaWQpOworc25kX2tjb250cm9sX3QgKnNuZF9jdGxfZmluZF9udW1pZChzbmRfY2FyZF90ICogY2FyZCwgdW5zaWduZWQgaW50IG51bWlkKTsKK3NuZF9rY29udHJvbF90ICpzbmRfY3RsX2ZpbmRfaWQoc25kX2NhcmRfdCAqIGNhcmQsIHNuZF9jdGxfZWxlbV9pZF90ICppZCk7CisKK2ludCBzbmRfY3RsX2NyZWF0ZShzbmRfY2FyZF90ICpjYXJkKTsKKworaW50IHNuZF9jdGxfcmVnaXN0ZXJfaW9jdGwoc25kX2tjdGxfaW9jdGxfZnVuY190IGZjbik7CitpbnQgc25kX2N0bF91bnJlZ2lzdGVyX2lvY3RsKHNuZF9rY3RsX2lvY3RsX2Z1bmNfdCBmY24pOworI2lmZGVmIENPTkZJR19DT01QQVQKK2ludCBzbmRfY3RsX3JlZ2lzdGVyX2lvY3RsX2NvbXBhdChzbmRfa2N0bF9pb2N0bF9mdW5jX3QgZmNuKTsKK2ludCBzbmRfY3RsX3VucmVnaXN0ZXJfaW9jdGxfY29tcGF0KHNuZF9rY3RsX2lvY3RsX2Z1bmNfdCBmY24pOworI2Vsc2UKKyNkZWZpbmUgc25kX2N0bF9yZWdpc3Rlcl9pb2N0bF9jb21wYXQoZmNuKQorI2RlZmluZSBzbmRfY3RsX3VucmVnaXN0ZXJfaW9jdGxfY29tcGF0KGZjbikKKyNlbmRpZgorCitpbnQgc25kX2N0bF9lbGVtX3JlYWQoc25kX2NhcmRfdCAqY2FyZCwgc25kX2N0bF9lbGVtX3ZhbHVlX3QgKmNvbnRyb2wpOworaW50IHNuZF9jdGxfZWxlbV93cml0ZShzbmRfY2FyZF90ICpjYXJkLCBzbmRfY3RsX2ZpbGVfdCAqZmlsZSwgc25kX2N0bF9lbGVtX3ZhbHVlX3QgKmNvbnRyb2wpOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBzbmRfY3RsX2dldF9pb2ZmbnVtKHNuZF9rY29udHJvbF90ICprY3RsLCBzbmRfY3RsX2VsZW1faWRfdCAqaWQpCit7CisJcmV0dXJuIGlkLT5udW1pZCAtIGtjdGwtPmlkLm51bWlkOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBzbmRfY3RsX2dldF9pb2ZmaWR4KHNuZF9rY29udHJvbF90ICprY3RsLCBzbmRfY3RsX2VsZW1faWRfdCAqaWQpCit7CisJcmV0dXJuIGlkLT5pbmRleCAtIGtjdGwtPmlkLmluZGV4OworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBzbmRfY3RsX2dldF9pb2ZmKHNuZF9rY29udHJvbF90ICprY3RsLCBzbmRfY3RsX2VsZW1faWRfdCAqaWQpCit7CisJaWYgKGlkLT5udW1pZCkgeworCQlyZXR1cm4gc25kX2N0bF9nZXRfaW9mZm51bShrY3RsLCBpZCk7CisJfSBlbHNlIHsKKwkJcmV0dXJuIHNuZF9jdGxfZ2V0X2lvZmZpZHgoa2N0bCwgaWQpOworCX0KK30KKworc3RhdGljIGlubGluZSBzbmRfY3RsX2VsZW1faWRfdCAqc25kX2N0bF9idWlsZF9pb2ZmKHNuZF9jdGxfZWxlbV9pZF90ICpkc3RfaWQsCisJCQkJCQkgICAgc25kX2tjb250cm9sX3QgKnNyY19rY3RsLAorCQkJCQkJICAgIHVuc2lnbmVkIGludCBvZmZzZXQpCit7CisJKmRzdF9pZCA9IHNyY19rY3RsLT5pZDsKKwlkc3RfaWQtPmluZGV4ICs9IG9mZnNldDsKKwlkc3RfaWQtPm51bWlkICs9IG9mZnNldDsKKwlyZXR1cm4gZHN0X2lkOworfQorCisjZW5kaWYJLyogX19TT1VORF9DT05UUk9MX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvY29yZS5oIGIvaW5jbHVkZS9zb3VuZC9jb3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTExN2MyMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvc291bmQvY29yZS5oCkBAIC0wLDAgKzEsNTAyIEBACisjaWZuZGVmIF9fU09VTkRfQ09SRV9ICisjZGVmaW5lIF9fU09VTkRfQ09SRV9ICisKKy8qCisgKiAgTWFpbiBoZWFkZXIgZmlsZSBmb3IgdGhlIEFMU0EgZHJpdmVyCisgKiAgQ29weXJpZ2h0IChjKSAxOTk0LTIwMDEgYnkgSmFyb3NsYXYgS3lzZWxhIDxwZXJleEBzdXNlLmN6PgorICoKKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgkJLyogd2FrZV91cCgpICovCisjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgkJLyogc3RydWN0IHNlbWFwaG9yZSAqLworI2luY2x1ZGUgPGxpbnV4L3J3c2VtLmg+CQkvKiBzdHJ1Y3Qgcndfc2VtYXBob3JlICovCisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CQkvKiBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqLworI2luY2x1ZGUgPGxpbnV4L3BtLmg+CQkJLyogcG1fbWVzc2FnZV90ICovCisKKy8qIFR5cGVkZWYncyAqLwordHlwZWRlZiBzdHJ1Y3QgdGltZXNwZWMgc25kX3RpbWVzdGFtcF90OwordHlwZWRlZiBzdHJ1Y3Qgc25kcnZfaW50ZXJ2YWwgc25kX2ludGVydmFsX3Q7Cit0eXBlZGVmIGVudW0gc25kcnZfY2FyZF90eXBlIHNuZF9jYXJkX3R5cGU7Cit0eXBlZGVmIHN0cnVjdCBzbmRydl94ZmVyaSBzbmRfeGZlcmlfdDsKK3R5cGVkZWYgc3RydWN0IHNuZHJ2X3hmZXJuIHNuZF94ZmVybl90OwordHlwZWRlZiBzdHJ1Y3Qgc25kcnZfeGZlcnYgc25kX3hmZXJ2X3Q7CisKKy8qIGZvcndhcmQgZGVjbGFyYXRpb25zICovCisjaWZkZWYgQ09ORklHX1BDSQorc3RydWN0IHBjaV9kZXY7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfU0JVUworc3RydWN0IHNidXNfZGV2OworI2VuZGlmCisKKy8qIGRldmljZSBhbGxvY2F0aW9uIHN0dWZmICovCisKKyNkZWZpbmUgU05EUlZfREVWX1RZUEVfUkFOR0VfU0laRQkJMHgxMDAwCisKK3R5cGVkZWYgZW51bSB7CisJU05EUlZfREVWX1RPUExFVkVMID0JCSgwKlNORFJWX0RFVl9UWVBFX1JBTkdFX1NJWkUpLAorCVNORFJWX0RFVl9DT05UUk9MLAorCVNORFJWX0RFVl9MT1dMRVZFTF9QUkUsCisJU05EUlZfREVWX0xPV0xFVkVMX05PUk1BTCA9CSgxKlNORFJWX0RFVl9UWVBFX1JBTkdFX1NJWkUpLAorCVNORFJWX0RFVl9QQ00sCisJU05EUlZfREVWX1JBV01JREksCisJU05EUlZfREVWX1RJTUVSLAorCVNORFJWX0RFVl9TRVFVRU5DRVIsCisJU05EUlZfREVWX0hXREVQLAorCVNORFJWX0RFVl9JTkZPLAorCVNORFJWX0RFVl9CVVMsCisJU05EUlZfREVWX0NPREVDLAorCVNORFJWX0RFVl9MT1dMRVZFTCA9CQkoMipTTkRSVl9ERVZfVFlQRV9SQU5HRV9TSVpFKQorfSBzbmRfZGV2aWNlX3R5cGVfdDsKKwordHlwZWRlZiBlbnVtIHsKKwlTTkRSVl9ERVZfQlVJTEQsCisJU05EUlZfREVWX1JFR0lTVEVSRUQsCisJU05EUlZfREVWX0RJU0NPTk5FQ1RFRAorfSBzbmRfZGV2aWNlX3N0YXRlX3Q7CisKK3R5cGVkZWYgZW51bSB7CisJU05EUlZfREVWX0NNRF9QUkUgPSAwLAorCVNORFJWX0RFVl9DTURfTk9STUFMID0gMSwKKwlTTkRSVl9ERVZfQ01EX1BPU1QgPSAyCit9IHNuZF9kZXZpY2VfY21kX3Q7CisKK3R5cGVkZWYgc3RydWN0IF9zbmRfY2FyZCBzbmRfY2FyZF90OwordHlwZWRlZiBzdHJ1Y3QgX3NuZF9kZXZpY2Ugc25kX2RldmljZV90OworCit0eXBlZGVmIGludCAoc25kX2Rldl9mcmVlX3QpKHNuZF9kZXZpY2VfdCAqZGV2aWNlKTsKK3R5cGVkZWYgaW50IChzbmRfZGV2X3JlZ2lzdGVyX3QpKHNuZF9kZXZpY2VfdCAqZGV2aWNlKTsKK3R5cGVkZWYgaW50IChzbmRfZGV2X2Rpc2Nvbm5lY3RfdCkoc25kX2RldmljZV90ICpkZXZpY2UpOwordHlwZWRlZiBpbnQgKHNuZF9kZXZfdW5yZWdpc3Rlcl90KShzbmRfZGV2aWNlX3QgKmRldmljZSk7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlzbmRfZGV2X2ZyZWVfdCAqZGV2X2ZyZWU7CisJc25kX2Rldl9yZWdpc3Rlcl90ICpkZXZfcmVnaXN0ZXI7CisJc25kX2Rldl9kaXNjb25uZWN0X3QgKmRldl9kaXNjb25uZWN0OworCXNuZF9kZXZfdW5yZWdpc3Rlcl90ICpkZXZfdW5yZWdpc3RlcjsKK30gc25kX2RldmljZV9vcHNfdDsKKworc3RydWN0IF9zbmRfZGV2aWNlIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CQkvKiBsaXN0IG9mIHJlZ2lzdGVyZWQgZGV2aWNlcyAqLworCXNuZF9jYXJkX3QgKmNhcmQ7CQkvKiBjYXJkIHdoaWNoIGhvbGRzIHRoaXMgZGV2aWNlICovCisJc25kX2RldmljZV9zdGF0ZV90IHN0YXRlOwkvKiBzdGF0ZSBvZiB0aGUgZGV2aWNlICovCisJc25kX2RldmljZV90eXBlX3QgdHlwZTsJCS8qIGRldmljZSB0eXBlICovCisJdm9pZCAqZGV2aWNlX2RhdGE7CQkvKiBkZXZpY2Ugc3RydWN0dXJlICovCisJc25kX2RldmljZV9vcHNfdCAqb3BzOwkJLyogb3BlcmF0aW9ucyAqLworfTsKKworI2RlZmluZSBzbmRfZGV2aWNlKG4pIGxpc3RfZW50cnkobiwgc25kX2RldmljZV90LCBsaXN0KQorCisvKiB2YXJpb3VzIHR5cGVkZWZzICovCisKK3R5cGVkZWYgc3RydWN0IHNuZF9pbmZvX2VudHJ5IHNuZF9pbmZvX2VudHJ5X3Q7Cit0eXBlZGVmIHN0cnVjdCBfc25kX3BjbSBzbmRfcGNtX3Q7Cit0eXBlZGVmIHN0cnVjdCBfc25kX3BjbV9zdHIgc25kX3BjbV9zdHJfdDsKK3R5cGVkZWYgc3RydWN0IF9zbmRfcGNtX3N1YnN0cmVhbSBzbmRfcGNtX3N1YnN0cmVhbV90OwordHlwZWRlZiBzdHJ1Y3QgX3NuZF9taXhlciBzbmRfa21peGVyX3Q7Cit0eXBlZGVmIHN0cnVjdCBfc25kX3Jhd21pZGkgc25kX3Jhd21pZGlfdDsKK3R5cGVkZWYgc3RydWN0IF9zbmRfY3RsX2ZpbGUgc25kX2N0bF9maWxlX3Q7Cit0eXBlZGVmIHN0cnVjdCBfc25kX2tjb250cm9sIHNuZF9rY29udHJvbF90OwordHlwZWRlZiBzdHJ1Y3QgX3NuZF90aW1lciBzbmRfdGltZXJfdDsKK3R5cGVkZWYgc3RydWN0IF9zbmRfdGltZXJfaW5zdGFuY2Ugc25kX3RpbWVyX2luc3RhbmNlX3Q7Cit0eXBlZGVmIHN0cnVjdCBfc25kX2h3ZGVwIHNuZF9od2RlcF90OworI2lmIGRlZmluZWQoQ09ORklHX1NORF9NSVhFUl9PU1MpIHx8IGRlZmluZWQoQ09ORklHX1NORF9NSVhFUl9PU1NfTU9EVUxFKQordHlwZWRlZiBzdHJ1Y3QgX3NuZF9vc3NfbWl4ZXIgc25kX21peGVyX29zc190OworI2VuZGlmCisKKy8qIG1vbml0b3IgZmlsZXMgZm9yIGdyYWNlZnVsIHNodXRkb3duIChob3RwbHVnKSAqLworCitzdHJ1Y3Qgc25kX21vbml0b3JfZmlsZSB7CisJc3RydWN0IGZpbGUgKmZpbGU7CisJc3RydWN0IHNuZF9tb25pdG9yX2ZpbGUgKm5leHQ7Cit9OworCitzdHJ1Y3Qgc25kX3NodXRkb3duX2Zfb3BzOwkvKiBkZWZpbmUgaXQgbGF0ZXIgKi8KKworLyogbWFpbiBzdHJ1Y3R1cmUgZm9yIHNvdW5kY2FyZCAqLworCitzdHJ1Y3QgX3NuZF9jYXJkIHsKKwlpbnQgbnVtYmVyOwkJCS8qIG51bWJlciBvZiBzb3VuZGNhcmQgKGluZGV4IHRvIHNuZF9jYXJkcykgKi8KKworCWNoYXIgaWRbMTZdOwkJCS8qIGlkIHN0cmluZyBvZiB0aGlzIGNhcmQgKi8KKwljaGFyIGRyaXZlclsxNl07CQkvKiBkcml2ZXIgbmFtZSAqLworCWNoYXIgc2hvcnRuYW1lWzMyXTsJCS8qIHNob3J0IG5hbWUgb2YgdGhpcyBzb3VuZGNhcmQgKi8KKwljaGFyIGxvbmduYW1lWzgwXTsJCS8qIG5hbWUgb2YgdGhpcyBzb3VuZGNhcmQgKi8KKwljaGFyIG1peGVybmFtZVs4MF07CQkvKiBtaXhlciBuYW1lICovCisJY2hhciBjb21wb25lbnRzWzgwXTsJCS8qIGNhcmQgY29tcG9uZW50cyBkZWxpbWl0ZWQgd2l0aCBzcGFjZSAqLworCisJc3RydWN0IG1vZHVsZSAqbW9kdWxlOwkJLyogdG9wLWxldmVsIG1vZHVsZSAqLworCisJdm9pZCAqcHJpdmF0ZV9kYXRhOwkJLyogcHJpdmF0ZSBkYXRhIGZvciBzb3VuZGNhcmQgKi8KKwl2b2lkICgqcHJpdmF0ZV9mcmVlKSAoc25kX2NhcmRfdCAqY2FyZCk7IC8qIGNhbGxiYWNrIGZvciBmcmVlaW5nIG9mIHByaXZhdGUgZGF0YSAqLworCisJc3RydWN0IGxpc3RfaGVhZCBkZXZpY2VzOwkvKiBkZXZpY2VzICovCisKKwl1bnNpZ25lZCBpbnQgbGFzdF9udW1pZDsJLyogbGFzdCB1c2VkIG51bWVyaWMgSUQgKi8KKwlzdHJ1Y3Qgcndfc2VtYXBob3JlIGNvbnRyb2xzX3J3c2VtOwkvKiBjb250cm9scyBsaXN0IGxvY2sgKi8KKwlyd2xvY2tfdCBjdGxfZmlsZXNfcndsb2NrOwkvKiBjdGxfZmlsZXMgbGlzdCBsb2NrICovCisJaW50IGNvbnRyb2xzX2NvdW50OwkJLyogY291bnQgb2YgYWxsIGNvbnRyb2xzICovCisJaW50IHVzZXJfY3RsX2NvdW50OwkJLyogY291bnQgb2YgYWxsIHVzZXIgY29udHJvbHMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGNvbnRyb2xzOwkvKiBhbGwgY29udHJvbHMgZm9yIHRoaXMgY2FyZCAqLworCXN0cnVjdCBsaXN0X2hlYWQgY3RsX2ZpbGVzOwkvKiBhY3RpdmUgY29udHJvbCBmaWxlcyAqLworCisJc25kX2luZm9fZW50cnlfdCAqcHJvY19yb290OwkvKiByb290IGZvciBzb3VuZGNhcmQgc3BlY2lmaWMgZmlsZXMgKi8KKwlzbmRfaW5mb19lbnRyeV90ICpwcm9jX2lkOwkvKiB0aGUgY2FyZCBpZCAqLworCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19yb290X2xpbms7CS8qIG51bWJlciBsaW5rIHRvIHJlYWwgaWQgKi8KKworCXN0cnVjdCBzbmRfbW9uaXRvcl9maWxlICpmaWxlczsgLyogYWxsIGZpbGVzIGFzc29jaWF0ZWQgdG8gdGhpcyBjYXJkICovCisJc3RydWN0IHNuZF9zaHV0ZG93bl9mX29wcyAqc19mX29wczsgLyogZmlsZSBvcGVyYXRpb25zIGluIHRoZSBzaHV0ZG93biBzdGF0ZSAqLworCXNwaW5sb2NrX3QgZmlsZXNfbG9jazsJCS8qIGxvY2sgdGhlIGZpbGVzIGZvciB0aGlzIGNhcmQgKi8KKwlpbnQgc2h1dGRvd247CQkJLyogdGhpcyBjYXJkIGlzIGdvaW5nIGRvd24gKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdCBzaHV0ZG93bl9zbGVlcDsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZnJlZV93b3JrcTsJLyogZm9yIGZyZWUgaW4gd29ya3F1ZXVlICovCisJc3RydWN0IGRldmljZSAqZGV2OworCisjaWZkZWYgQ09ORklHX1BNCisJaW50ICgqcG1fc3VzcGVuZCkoc25kX2NhcmRfdCAqY2FyZCwgcG1fbWVzc2FnZV90IHN0YXRlKTsKKwlpbnQgKCpwbV9yZXN1bWUpKHNuZF9jYXJkX3QgKmNhcmQpOworCXZvaWQgKnBtX3ByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBpbnQgcG93ZXJfc3RhdGU7CS8qIHBvd2VyIHN0YXRlICovCisJc3RydWN0IHNlbWFwaG9yZSBwb3dlcl9sb2NrOwkvKiBwb3dlciBsb2NrICovCisJd2FpdF9xdWV1ZV9oZWFkX3QgcG93ZXJfc2xlZXA7CisjaWZkZWYgQ09ORklHX1NORF9HRU5FUklDX1BNCisJc3RydWN0IHNuZF9nZW5lcmljX2RldmljZSAqcG1fZGV2OwkvKiBmb3IgSVNBICovCisjZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfU05EX01JWEVSX09TUykgfHwgZGVmaW5lZChDT05GSUdfU05EX01JWEVSX09TU19NT0RVTEUpCisJc25kX21peGVyX29zc190ICptaXhlcl9vc3M7CisJaW50IG1peGVyX29zc19jaGFuZ2VfY291bnQ7CisjZW5kaWYKK307CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbmxpbmUgdm9pZCBzbmRfcG93ZXJfbG9jayhzbmRfY2FyZF90ICpjYXJkKQoreworCWRvd24oJmNhcmQtPnBvd2VyX2xvY2spOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc25kX3Bvd2VyX3VubG9jayhzbmRfY2FyZF90ICpjYXJkKQoreworCXVwKCZjYXJkLT5wb3dlcl9sb2NrKTsKK30KKworaW50IHNuZF9wb3dlcl93YWl0KHNuZF9jYXJkX3QgKmNhcmQsIHVuc2lnbmVkIGludCBwb3dlcl9zdGF0ZSwgc3RydWN0IGZpbGUgKmZpbGUpOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBzbmRfcG93ZXJfZ2V0X3N0YXRlKHNuZF9jYXJkX3QgKmNhcmQpCit7CisJcmV0dXJuIGNhcmQtPnBvd2VyX3N0YXRlOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc25kX3Bvd2VyX2NoYW5nZV9zdGF0ZShzbmRfY2FyZF90ICpjYXJkLCB1bnNpZ25lZCBpbnQgc3RhdGUpCit7CisJY2FyZC0+cG93ZXJfc3RhdGUgPSBzdGF0ZTsKKwl3YWtlX3VwKCZjYXJkLT5wb3dlcl9zbGVlcCk7Cit9CitpbnQgc25kX2NhcmRfc2V0X3BtX2NhbGxiYWNrKHNuZF9jYXJkX3QgKmNhcmQsCisJCQkgICAgIGludCAoKnN1c3BlbmQpKHNuZF9jYXJkX3QgKiwgcG1fbWVzc2FnZV90KSwKKwkJCSAgICAgaW50ICgqcmVzdW1lKShzbmRfY2FyZF90ICopLAorCQkJICAgICB2b2lkICpwcml2YXRlX2RhdGEpOworaW50IHNuZF9jYXJkX3NldF9nZW5lcmljX3BtX2NhbGxiYWNrKHNuZF9jYXJkX3QgKmNhcmQsCisJCQkJICAgICBpbnQgKCpzdXNwZW5kKShzbmRfY2FyZF90ICosIHBtX21lc3NhZ2VfdCksCisJCQkJICAgICBpbnQgKCpyZXN1bWUpKHNuZF9jYXJkX3QgKiksCisJCQkJICAgICB2b2lkICpwcml2YXRlX2RhdGEpOworI2RlZmluZSBzbmRfY2FyZF9zZXRfaXNhX3BtX2NhbGxiYWNrKGNhcmQsc3VzcGVuZCxyZXN1bWUsZGF0YSkgXAorCXNuZF9jYXJkX3NldF9nZW5lcmljX3BtX2NhbGxiYWNrKGNhcmQsIHN1c3BlbmQsIHJlc3VtZSwgZGF0YSkKK3N0cnVjdCBwY2lfZGV2OworaW50IHNuZF9jYXJkX3BjaV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSk7CitpbnQgc25kX2NhcmRfcGNpX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKKyNkZWZpbmUgU05EX1BDSV9QTV9DQUxMQkFDS1MgXAorCS5zdXNwZW5kID0gc25kX2NhcmRfcGNpX3N1c3BlbmQsICAucmVzdW1lID0gc25kX2NhcmRfcGNpX3Jlc3VtZQorCisjZWxzZSAvKiAhIENPTkZJR19QTSAqLworCisjZGVmaW5lIHNuZF9wb3dlcl9sb2NrKGNhcmQpCQlkbyB7ICh2b2lkKShjYXJkKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgc25kX3Bvd2VyX3VubG9jayhjYXJkKQkJZG8geyAodm9pZCkoY2FyZCk7IH0gd2hpbGUgKDApCitzdGF0aWMgaW5saW5lIGludCBzbmRfcG93ZXJfd2FpdChzbmRfY2FyZF90ICpjYXJkLCB1bnNpZ25lZCBpbnQgc3RhdGUsIHN0cnVjdCBmaWxlICpmaWxlKSB7IHJldHVybiAwOyB9CisjZGVmaW5lIHNuZF9wb3dlcl9nZXRfc3RhdGUoY2FyZCkJU05EUlZfQ1RMX1BPV0VSX0QwCisjZGVmaW5lIHNuZF9wb3dlcl9jaGFuZ2Vfc3RhdGUoY2FyZCwgc3RhdGUpCWRvIHsgKHZvaWQpKGNhcmQpOyB9IHdoaWxlICgwKQorI2RlZmluZSBzbmRfY2FyZF9zZXRfcG1fY2FsbGJhY2soY2FyZCxzdXNwZW5kLHJlc3VtZSxkYXRhKQorI2RlZmluZSBzbmRfY2FyZF9zZXRfZ2VuZXJpY19wbV9jYWxsYmFjayhjYXJkLHN1c3BlbmQscmVzdW1lLGRhdGEpCisjZGVmaW5lIHNuZF9jYXJkX3NldF9pc2FfcG1fY2FsbGJhY2soY2FyZCxzdXNwZW5kLHJlc3VtZSxkYXRhKQorI2RlZmluZSBTTkRfUENJX1BNX0NBTExCQUNLUworCisjZW5kaWYgLyogQ09ORklHX1BNICovCisKKy8qIGRldmljZS5jICovCisKK3N0cnVjdCBfc25kX21pbm9yIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CQkvKiBsaXN0IG9mIGFsbCBtaW5vcnMgcGVyIGNhcmQgKi8KKwlpbnQgbnVtYmVyOwkJCS8qIG1pbm9yIG51bWJlciAqLworCWludCBkZXZpY2U7CQkJLyogZGV2aWNlIG51bWJlciAqLworCWNvbnN0IGNoYXIgKmNvbW1lbnQ7CQkvKiBmb3IgL3Byb2MvYXNvdW5kL2RldmljZXMgKi8KKwlzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmX29wczsJLyogZmlsZSBvcGVyYXRpb25zICovCisJY2hhciBuYW1lWzBdOwkJCS8qIGRldmljZSBuYW1lIChrZWVwIGF0IHRoZSBlbmQgb2Ygc3RydWN0dXJlKSAqLworfTsKKwordHlwZWRlZiBzdHJ1Y3QgX3NuZF9taW5vciBzbmRfbWlub3JfdDsKKworLyogc291bmQuYyAqLworCitleHRlcm4gaW50IHNuZF9lY2FyZHNfbGltaXQ7CisKK3ZvaWQgc25kX3JlcXVlc3RfY2FyZChpbnQgY2FyZCk7CisKK2ludCBzbmRfcmVnaXN0ZXJfZGV2aWNlKGludCB0eXBlLCBzbmRfY2FyZF90ICpjYXJkLCBpbnQgZGV2LCBzbmRfbWlub3JfdCAqcmVnLCBjb25zdCBjaGFyICpuYW1lKTsKK2ludCBzbmRfdW5yZWdpc3Rlcl9kZXZpY2UoaW50IHR5cGUsIHNuZF9jYXJkX3QgKmNhcmQsIGludCBkZXYpOworCisjaWZkZWYgQ09ORklHX1NORF9PU1NFTVVMCitpbnQgc25kX3JlZ2lzdGVyX29zc19kZXZpY2UoaW50IHR5cGUsIHNuZF9jYXJkX3QgKmNhcmQsIGludCBkZXYsIHNuZF9taW5vcl90ICpyZWcsIGNvbnN0IGNoYXIgKm5hbWUpOworaW50IHNuZF91bnJlZ2lzdGVyX29zc19kZXZpY2UoaW50IHR5cGUsIHNuZF9jYXJkX3QgKmNhcmQsIGludCBkZXYpOworI2VuZGlmCisKK2ludCBzbmRfbWlub3JfaW5mb19pbml0KHZvaWQpOworaW50IHNuZF9taW5vcl9pbmZvX2RvbmUodm9pZCk7CisKKy8qIHNvdW5kX29zcy5jICovCisKKyNpZmRlZiBDT05GSUdfU05EX09TU0VNVUwKK2ludCBzbmRfbWlub3JfaW5mb19vc3NfaW5pdCh2b2lkKTsKK2ludCBzbmRfbWlub3JfaW5mb19vc3NfZG9uZSh2b2lkKTsKK2ludCBzbmRfb3NzX2luaXRfbW9kdWxlKHZvaWQpOworI2Vsc2UKKyNkZWZpbmUgc25kX21pbm9yX2luZm9fb3NzX2luaXQoKSAvKk5PUCovCisjZGVmaW5lIHNuZF9taW5vcl9pbmZvX29zc19kb25lKCkgLypOT1AqLworI2RlZmluZSBzbmRfb3NzX2luaXRfbW9kdWxlKCkgMAorI2VuZGlmCisKKy8qIG1lbW9yeS5jICovCisKKyNpZmRlZiBDT05GSUdfU05EX0RFQlVHX01FTU9SWQordm9pZCBzbmRfbWVtb3J5X2luaXQodm9pZCk7Cit2b2lkIHNuZF9tZW1vcnlfZG9uZSh2b2lkKTsKK2ludCBzbmRfbWVtb3J5X2luZm9faW5pdCh2b2lkKTsKK2ludCBzbmRfbWVtb3J5X2luZm9fZG9uZSh2b2lkKTsKK3ZvaWQgKnNuZF9oaWRkZW5fa21hbGxvYyhzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKTsKK3ZvaWQgKnNuZF9oaWRkZW5fa2NhbGxvYyhzaXplX3Qgbiwgc2l6ZV90IHNpemUsIGludCBmbGFncyk7Cit2b2lkIHNuZF9oaWRkZW5fa2ZyZWUoY29uc3Qgdm9pZCAqb2JqKTsKK3ZvaWQgKnNuZF9oaWRkZW5fdm1hbGxvYyh1bnNpZ25lZCBsb25nIHNpemUpOwordm9pZCBzbmRfaGlkZGVuX3ZmcmVlKHZvaWQgKm9iaik7CisjZGVmaW5lIGttYWxsb2Moc2l6ZSwgZmxhZ3MpIHNuZF9oaWRkZW5fa21hbGxvYyhzaXplLCBmbGFncykKKyNkZWZpbmUga2NhbGxvYyhuLCBzaXplLCBmbGFncykgc25kX2hpZGRlbl9rY2FsbG9jKG4sIHNpemUsIGZsYWdzKQorI2RlZmluZSBrZnJlZShvYmopIHNuZF9oaWRkZW5fa2ZyZWUob2JqKQorI2RlZmluZSB2bWFsbG9jKHNpemUpIHNuZF9oaWRkZW5fdm1hbGxvYyhzaXplKQorI2RlZmluZSB2ZnJlZShvYmopIHNuZF9oaWRkZW5fdmZyZWUob2JqKQorI2RlZmluZSBrbWFsbG9jX25vY2hlY2soc2l6ZSwgZmxhZ3MpIHNuZF93cmFwcGVyX2ttYWxsb2Moc2l6ZSwgZmxhZ3MpCisjZGVmaW5lIHZtYWxsb2Nfbm9jaGVjayhzaXplKSBzbmRfd3JhcHBlcl92bWFsbG9jKHNpemUpCisjZGVmaW5lIGtmcmVlX25vY2hlY2sob2JqKSBzbmRfd3JhcHBlcl9rZnJlZShvYmopCisjZGVmaW5lIHZmcmVlX25vY2hlY2sob2JqKSBzbmRfd3JhcHBlcl92ZnJlZShvYmopCisjZWxzZQorI2RlZmluZSBzbmRfbWVtb3J5X2luaXQoKSAvKk5PUCovCisjZGVmaW5lIHNuZF9tZW1vcnlfZG9uZSgpIC8qTk9QKi8KKyNkZWZpbmUgc25kX21lbW9yeV9pbmZvX2luaXQoKSAvKk5PUCovCisjZGVmaW5lIHNuZF9tZW1vcnlfaW5mb19kb25lKCkgLypOT1AqLworI2RlZmluZSBrbWFsbG9jX25vY2hlY2soc2l6ZSwgZmxhZ3MpIGttYWxsb2Moc2l6ZSwgZmxhZ3MpCisjZGVmaW5lIHZtYWxsb2Nfbm9jaGVjayhzaXplKSB2bWFsbG9jKHNpemUpCisjZGVmaW5lIGtmcmVlX25vY2hlY2sob2JqKSBrZnJlZShvYmopCisjZGVmaW5lIHZmcmVlX25vY2hlY2sob2JqKSB2ZnJlZShvYmopCisjZW5kaWYKK2NoYXIgKnNuZF9rbWFsbG9jX3N0cmR1cChjb25zdCBjaGFyICpzdHJpbmcsIGludCBmbGFncyk7CitpbnQgY29weV90b191c2VyX2Zyb21pbyh2b2lkIF9fdXNlciAqZHN0LCBjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKnNyYywgc2l6ZV90IGNvdW50KTsKK2ludCBjb3B5X2Zyb21fdXNlcl90b2lvKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqZHN0LCBjb25zdCB2b2lkIF9fdXNlciAqc3JjLCBzaXplX3QgY291bnQpOworCisvKiBpbml0LmMgKi8KKworZXh0ZXJuIHVuc2lnbmVkIGludCBzbmRfY2FyZHNfbG9jazsKK2V4dGVybiBzbmRfY2FyZF90ICpzbmRfY2FyZHNbU05EUlZfQ0FSRFNdOworZXh0ZXJuIHJ3bG9ja190IHNuZF9jYXJkX3J3bG9jazsKKyNpZiBkZWZpbmVkKENPTkZJR19TTkRfTUlYRVJfT1NTKSB8fCBkZWZpbmVkKENPTkZJR19TTkRfTUlYRVJfT1NTX01PRFVMRSkKKyNkZWZpbmUgU05EX01JWEVSX09TU19OT1RJRllfUkVHSVNURVIJMAorI2RlZmluZSBTTkRfTUlYRVJfT1NTX05PVElGWV9ESVNDT05ORUNUCTEKKyNkZWZpbmUgU05EX01JWEVSX09TU19OT1RJRllfRlJFRQkyCitleHRlcm4gaW50ICgqc25kX21peGVyX29zc19ub3RpZnlfY2FsbGJhY2spKHNuZF9jYXJkX3QgKmNhcmQsIGludCBjbWQpOworI2VuZGlmCisKK3NuZF9jYXJkX3QgKnNuZF9jYXJkX25ldyhpbnQgaWR4LCBjb25zdCBjaGFyICppZCwKKwkJCSBzdHJ1Y3QgbW9kdWxlICptb2R1bGUsIGludCBleHRyYV9zaXplKTsKK2ludCBzbmRfY2FyZF9kaXNjb25uZWN0KHNuZF9jYXJkX3QgKmNhcmQpOworaW50IHNuZF9jYXJkX2ZyZWUoc25kX2NhcmRfdCAqY2FyZCk7CitpbnQgc25kX2NhcmRfZnJlZV9pbl90aHJlYWQoc25kX2NhcmRfdCAqY2FyZCk7CitpbnQgc25kX2NhcmRfcmVnaXN0ZXIoc25kX2NhcmRfdCAqY2FyZCk7CitpbnQgc25kX2NhcmRfaW5mb19pbml0KHZvaWQpOworaW50IHNuZF9jYXJkX2luZm9fZG9uZSh2b2lkKTsKK2ludCBzbmRfY29tcG9uZW50X2FkZChzbmRfY2FyZF90ICpjYXJkLCBjb25zdCBjaGFyICpjb21wb25lbnQpOworaW50IHNuZF9jYXJkX2ZpbGVfYWRkKHNuZF9jYXJkX3QgKmNhcmQsIHN0cnVjdCBmaWxlICpmaWxlKTsKK2ludCBzbmRfY2FyZF9maWxlX3JlbW92ZShzbmRfY2FyZF90ICpjYXJkLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CisKKyNpZm5kZWYgc25kX2NhcmRfc2V0X2RldgorI2RlZmluZSBzbmRfY2FyZF9zZXRfZGV2KGNhcmQsZGV2cHRyKSAoKGNhcmQpLT5kZXYgPSAoZGV2cHRyKSkKKyNlbmRpZgorCisvKiBkZXZpY2UuYyAqLworCitpbnQgc25kX2RldmljZV9uZXcoc25kX2NhcmRfdCAqY2FyZCwgc25kX2RldmljZV90eXBlX3QgdHlwZSwKKwkJICAgdm9pZCAqZGV2aWNlX2RhdGEsIHNuZF9kZXZpY2Vfb3BzX3QgKm9wcyk7CitpbnQgc25kX2RldmljZV9yZWdpc3RlcihzbmRfY2FyZF90ICpjYXJkLCB2b2lkICpkZXZpY2VfZGF0YSk7CitpbnQgc25kX2RldmljZV9yZWdpc3Rlcl9hbGwoc25kX2NhcmRfdCAqY2FyZCk7CitpbnQgc25kX2RldmljZV9kaXNjb25uZWN0KHNuZF9jYXJkX3QgKmNhcmQsIHZvaWQgKmRldmljZV9kYXRhKTsKK2ludCBzbmRfZGV2aWNlX2Rpc2Nvbm5lY3RfYWxsKHNuZF9jYXJkX3QgKmNhcmQpOworaW50IHNuZF9kZXZpY2VfZnJlZShzbmRfY2FyZF90ICpjYXJkLCB2b2lkICpkZXZpY2VfZGF0YSk7CitpbnQgc25kX2RldmljZV9mcmVlX2FsbChzbmRfY2FyZF90ICpjYXJkLCBzbmRfZGV2aWNlX2NtZF90IGNtZCk7CisKKy8qIGlzYWRtYS5jICovCisKKyNkZWZpbmUgRE1BX01PREVfTk9fRU5BQkxFCTB4MDEwMAorCit2b2lkIHNuZF9kbWFfcHJvZ3JhbSh1bnNpZ25lZCBsb25nIGRtYSwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgc2hvcnQgbW9kZSk7Cit2b2lkIHNuZF9kbWFfZGlzYWJsZSh1bnNpZ25lZCBsb25nIGRtYSk7Cit1bnNpZ25lZCBpbnQgc25kX2RtYV9wb2ludGVyKHVuc2lnbmVkIGxvbmcgZG1hLCB1bnNpZ25lZCBpbnQgc2l6ZSk7CisKKy8qIG1pc2MuYyAqLworCitpbnQgc25kX3Rhc2tfbmFtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGNoYXIgKm5hbWUsIHNpemVfdCBzaXplKTsKKyNpZmRlZiBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLCit2b2lkIHNuZF92ZXJib3NlX3ByaW50ayhjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCisgICAgIF9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMywgNCkpKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX1NORF9ERUJVRykgJiYgZGVmaW5lZChDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLKQordm9pZCBzbmRfdmVyYm9zZV9wcmludGQoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQorICAgICBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDMsIDQpKSk7CisjZW5kaWYKKworLyogLS0tICovCisKKyNpZmRlZiBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLCisvKioKKyAqIHNuZF9wcmludGsgLSBwcmludGsgd3JhcHBlcgorICogQGZtdDogZm9ybWF0IHN0cmluZworICoKKyAqIFdvcmtzIGxpa2UgcHJpbnQoKSBidXQgcHJpbnRzIHRoZSBmaWxlIGFuZCB0aGUgbGluZSBvZiB0aGUgY2FsbGVyCisgKiB3aGVuIGNvbmZpZ3VyZWQgd2l0aCBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLLgorICovCisjZGVmaW5lIHNuZF9wcmludGsoZm10LCBhcmdzLi4uKSBcCisJc25kX3ZlcmJvc2VfcHJpbnRrKF9fRklMRV9fLCBfX0xJTkVfXywgZm10ICwjI2FyZ3MpCisjZWxzZQorI2RlZmluZSBzbmRfcHJpbnRrKGZtdCwgYXJncy4uLikgXAorCXByaW50ayhmbXQgLCMjYXJncykKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1NORF9ERUJVRworCisjZGVmaW5lIF9fQVNUUklOR19fKHgpICN4CisKKyNpZmRlZiBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLCisvKioKKyAqIHNuZF9wcmludGQgLSBkZWJ1ZyBwcmludGsKKyAqIEBmb3JtYXQ6IGZvcm1hdCBzdHJpbmcKKyAqCisgKiBDb21waWxlZCBvbmx5IHdoZW4gV29ya3MgbGlrZSBzbmRfcHJpbnRrKCkgZm9yIGRlYnVnZ2luZyBwdXJwb3NlLgorICogSWdub3JlZCB3aGVuIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldC4KKyAqLworI2RlZmluZSBzbmRfcHJpbnRkKGZtdCwgYXJncy4uLikgXAorCXNuZF92ZXJib3NlX3ByaW50ZChfX0ZJTEVfXywgX19MSU5FX18sIGZtdCAsIyNhcmdzKQorI2Vsc2UKKyNkZWZpbmUgc25kX3ByaW50ZChmbXQsIGFyZ3MuLi4pIFwKKwlwcmludGsoZm10ICwjI2FyZ3MpCisjZW5kaWYKKy8qKgorICogc25kX2Fzc2VydCAtIHJ1bi10aW1lIGFzc2Vyc2lvbiBtYWNybworICogQGV4cHI6IGV4cHJlc3Npb24KKyAqIEBhcmdzLi4uOiB0aGUgYWN0aW9uCisgKgorICogVGhpcyBtYWNybyBjaGVja3MgdGhlIGV4cHJlc3Npb24gaW4gcnVuLXRpbWUgYW5kIGludm9rZXMgdGhlIGNvbW1hbmRzCisgKiBnaXZlbiBpbiB0aGUgcmVzdCBhcmd1bWVudHMgaWYgdGhlIGFzc2VydGlvbiBpcyBmYWlsZWQuCisgKiBXaGVuIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldCwgdGhlIGV4cHJlc3Npb24gaXMgZXhlY3V0ZWQgYnV0CisgKiBub3QgY2hlY2tlZC4KKyAqLworI2RlZmluZSBzbmRfYXNzZXJ0KGV4cHIsIGFyZ3MuLi4pIGRvIHtcCisJaWYgKHVubGlrZWx5KCEoZXhwcikpKSB7CQkJCVwKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiQlVHPyAoJXMpIChjYWxsZWQgZnJvbSAlcClcbiIsIF9fQVNUUklOR19fKGV4cHIpLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpO1wKKwkJYXJncztcCisJfVwKK30gd2hpbGUgKDApCisvKioKKyAqIHNuZF9ydW50aW1lX2NoZWNrIC0gcnVuLXRpbWUgYXNzZXJzaW9uIG1hY3JvCisgKiBAZXhwcjogZXhwcmVzc2lvbgorICogQGFyZ3MuLi46IHRoZSBhY3Rpb24KKyAqCisgKiBUaGlzIG1hY3JvIGNoZWNrcyB0aGUgZXhwcmVzc2lvbiBpbiBydW4tdGltZSBhbmQgaW52b2tlcyB0aGUgY29tbWFuZHMKKyAqIGdpdmVuIGluIHRoZSByZXN0IGFyZ3VtZW50cyBpZiB0aGUgYXNzZXJ0aW9uIGlzIGZhaWxlZC4KKyAqIFVubGlrZSBzbmRfYXNzZXJ0KCksIHRoZSBhY3Rpb24gY29tbWFuZHMgYXJlIGV4ZWN1dGVkIGV2ZW4gaWYKKyAqIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldCBidXQgd2l0aG91dCBhbnkgZXJyb3IgbWVzc2FnZXMuCisgKi8KKyNkZWZpbmUgc25kX3J1bnRpbWVfY2hlY2soZXhwciwgYXJncy4uLikgZG8ge1wKKwlpZiAodW5saWtlbHkoIShleHByKSkpIHsJCQkJXAorCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJFUlJPUiAoJXMpIChjYWxsZWQgZnJvbSAlcClcbiIsIF9fQVNUUklOR19fKGV4cHIpLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpO1wKKwkJYXJncztcCisJfVwKK30gd2hpbGUgKDApCisKKyNlbHNlIC8qICFDT05GSUdfU05EX0RFQlVHICovCisKKyNkZWZpbmUgc25kX3ByaW50ZChmbXQsIGFyZ3MuLi4pCS8qIG5vdGhpbmcgKi8KKyNkZWZpbmUgc25kX2Fzc2VydChleHByLCBhcmdzLi4uKQkodm9pZCkoZXhwcikKKyNkZWZpbmUgc25kX3J1bnRpbWVfY2hlY2soZXhwciwgYXJncy4uLikgZG8geyBpZiAoIShleHByKSkgeyBhcmdzOyB9IH0gd2hpbGUgKDApCisKKyNlbmRpZiAvKiBDT05GSUdfU05EX0RFQlVHICovCisKKyNpZmRlZiBDT05GSUdfU05EX0RFQlVHX0RFVEVDVAorLyoqCisgKiBzbmRfcHJpbnRkZCAtIGRlYnVnIHByaW50aworICogQGZvcm1hdDogZm9ybWF0IHN0cmluZworICoKKyAqIENvbXBpbGVkIG9ubHkgd2hlbiBXb3JrcyBsaWtlIHNuZF9wcmludGsoKSBmb3IgZGVidWdnaW5nIHB1cnBvc2UuCisgKiBJZ25vcmVkIHdoZW4gQ09ORklHX1NORF9ERUJVR19ERVRFQ1QgaXMgbm90IHNldC4KKyAqLworI2RlZmluZSBzbmRfcHJpbnRkZChmb3JtYXQsIGFyZ3MuLi4pIHNuZF9wcmludGsoZm9ybWF0LCAjI2FyZ3MpCisjZWxzZQorI2RlZmluZSBzbmRfcHJpbnRkZChmb3JtYXQsIGFyZ3MuLi4pIC8qIG5vdGhpbmcgKi8KKyNlbmRpZgorCisjZGVmaW5lIHNuZF9CVUcoKSBzbmRfYXNzZXJ0KDAsICkKKworCitzdGF0aWMgaW5saW5lIHZvaWQgc25kX3RpbWVzdGFtcF9ub3coc3RydWN0IHRpbWVzcGVjICp0c3RhbXAsIGludCB0aW1lc3BlYykKK3sKKwlzdHJ1Y3QgdGltZXZhbCB2YWw7CisJLyogRklYTUU6IHVzZSBhIGxpbmVhciB0aW1lIHNvdXJjZSAqLworCWRvX2dldHRpbWVvZmRheSgmdmFsKTsKKwl0c3RhbXAtPnR2X3NlYyA9IHZhbC50dl9zZWM7CisJdHN0YW1wLT50dl9uc2VjID0gdmFsLnR2X3VzZWM7CisJaWYgKHRpbWVzcGVjKQorCQl0c3RhbXAtPnR2X25zZWMgKj0gMTAwMEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbmRfdGltZXN0YW1wX3plcm8oc3RydWN0IHRpbWVzcGVjICp0c3RhbXApCit7CisJdHN0YW1wLT50dl9zZWMgPSAwOworCXRzdGFtcC0+dHZfbnNlYyA9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNuZF90aW1lc3RhbXBfbnVsbChzdHJ1Y3QgdGltZXNwZWMgKnRzdGFtcCkKK3sKKwlyZXR1cm4gdHN0YW1wLT50dl9zZWMgPT0gMCAmJiB0c3RhbXAtPnR2X25zZWMgPT0gMDsKK30KKworI2RlZmluZSBTTkRSVl9PU1NfVkVSU0lPTiAgICAgICAgICgoMzw8MTYpfCg4PDw4KXwoMTw8NCl8KDApKQkvKiAzLjguMWEgKi8KKworLyogZm9yIGVhc2llciBiYWNrd2FyZC1wb3J0aW5nICovCisjaWYgZGVmaW5lZChDT05GSUdfR0FNRVBPUlQpIHx8IGRlZmluZWQoQ09ORklHX0dBTUVQT1JUX01PRFVMRSkKKyNpZm5kZWYgZ2FtZXBvcnRfc2V0X2Rldl9wYXJlbnQKKyNkZWZpbmUgZ2FtZXBvcnRfc2V0X2Rldl9wYXJlbnQoZ3AseGRldikgKChncCktPmRldi5wYXJlbnQgPSAoeGRldikpCisjZGVmaW5lIGdhbWVwb3J0X3NldF9wb3J0X2RhdGEoZ3AscikgKChncCktPnBvcnRfZGF0YSA9IChyKSkKKyNkZWZpbmUgZ2FtZXBvcnRfZ2V0X3BvcnRfZGF0YShncCkgKGdwKS0+cG9ydF9kYXRhCisjZW5kaWYKKyNlbmRpZgorCisjZW5kaWYgLyogX19TT1VORF9DT1JFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvY3M0MjMxLmggYi9pbmNsdWRlL3NvdW5kL2NzNDIzMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3ZjkwODIzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9zb3VuZC9jczQyMzEuaApAQCAtMCwwICsxLDM2NiBAQAorI2lmbmRlZiBfX1NPVU5EX0NTNDIzMV9ICisjZGVmaW5lIF9fU09VTkRfQ1M0MjMxX0gKKworLyoKKyAqICBDb3B5cmlnaHQgKGMpIGJ5IEphcm9zbGF2IEt5c2VsYSA8cGVyZXhAc3VzZS5jej4KKyAqICBEZWZpbml0aW9ucyBmb3IgQ1M0MjMxICYgSW50ZXJXYXZlIGNoaXBzICYgY29tcGF0aWJsZSBjaGlwcworICoKKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKgorICovCisKKyNpbmNsdWRlICJjb250cm9sLmgiCisjaW5jbHVkZSAicGNtLmgiCisjaW5jbHVkZSAidGltZXIuaCIKKworI2lmZGVmIENPTkZJR19TQlVTCisjZGVmaW5lIFNCVVNfU1VQUE9SVAorI2luY2x1ZGUgPGFzbS9zYnVzLmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX1BDSSkgJiYgZGVmaW5lZChDT05GSUdfU1BBUkM2NCkKKyNkZWZpbmUgRUJVU19TVVBQT1JUCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8YXNtL2VidXMuaD4KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoU0JVU19TVVBQT1JUKSAmJiAhZGVmaW5lZChFQlVTX1NVUFBPUlQpCisjZGVmaW5lIExFR0FDWV9TVVBQT1JUCisjZW5kaWYKKworLyogSU8gcG9ydHMgKi8KKworI2RlZmluZSBDUzQyMzFQKHgpCQkoY19kX2NfQ1M0MjMxIyN4KQorCisjZGVmaW5lIGNfZF9jX0NTNDIzMVJFR1NFTAkwCisjZGVmaW5lIGNfZF9jX0NTNDIzMVJFRwkJMQorI2RlZmluZSBjX2RfY19DUzQyMzFTVEFUVVMJMgorI2RlZmluZSBjX2RfY19DUzQyMzFQSU8JCTMKKworLyogY29kZWMgcmVnaXN0ZXJzICovCisKKyNkZWZpbmUgQ1M0MjMxX0xFRlRfSU5QVVQJMHgwMAkvKiBsZWZ0IGlucHV0IGNvbnRyb2wgKi8KKyNkZWZpbmUgQ1M0MjMxX1JJR0hUX0lOUFVUCTB4MDEJLyogcmlnaHQgaW5wdXQgY29udHJvbCAqLworI2RlZmluZSBDUzQyMzFfQVVYMV9MRUZUX0lOUFVUCTB4MDIJLyogbGVmdCBBVVgxIGlucHV0IGNvbnRyb2wgKi8KKyNkZWZpbmUgQ1M0MjMxX0FVWDFfUklHSFRfSU5QVVQJMHgwMwkvKiByaWdodCBBVVgxIGlucHV0IGNvbnRyb2wgKi8KKyNkZWZpbmUgQ1M0MjMxX0FVWDJfTEVGVF9JTlBVVAkweDA0CS8qIGxlZnQgQVVYMiBpbnB1dCBjb250cm9sICovCisjZGVmaW5lIENTNDIzMV9BVVgyX1JJR0hUX0lOUFVUCTB4MDUJLyogcmlnaHQgQVVYMiBpbnB1dCBjb250cm9sICovCisjZGVmaW5lIENTNDIzMV9MRUZUX09VVFBVVAkweDA2CS8qIGxlZnQgb3V0cHV0IGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ1M0MjMxX1JJR0hUX09VVFBVVAkweDA3CS8qIHJpZ2h0IG91dHB1dCBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIENTNDIzMV9QTEFZQktfRk9STUFUCTB4MDgJLyogY2xvY2sgYW5kIGRhdGEgZm9ybWF0IC0gcGxheWJhY2sgLSBiaXRzIDctMCBNQ0UgKi8KKyNkZWZpbmUgQ1M0MjMxX0lGQUNFX0NUUkwJMHgwOQkvKiBpbnRlcmZhY2UgY29udHJvbCAtIGJpdHMgNy0yIE1DRSAqLworI2RlZmluZSBDUzQyMzFfUElOX0NUUkwJCTB4MGEJLyogcGluIGNvbnRyb2wgKi8KKyNkZWZpbmUgQ1M0MjMxX1RFU1RfSU5JVAkweDBiCS8qIHRlc3QgYW5kIGluaXRpYWxpemF0aW9uICovCisjZGVmaW5lIENTNDIzMV9NSVNDX0lORk8JMHgwYwkvKiBtaXNjZWxsYW5lYW91cyBpbmZvcm1hdGlvbiAqLworI2RlZmluZSBDUzQyMzFfTE9PUEJBQ0sJCTB4MGQJLyogbG9vcGJhY2sgY29udHJvbCAqLworI2RlZmluZSBDUzQyMzFfUExZX1VQUl9DTlQJMHgwZQkvKiBwbGF5YmFjayB1cHBlciBiYXNlIGNvdW50ICovCisjZGVmaW5lIENTNDIzMV9QTFlfTFdSX0NOVAkweDBmCS8qIHBsYXliYWNrIGxvd2VyIGJhc2UgY291bnQgKi8KKyNkZWZpbmUgQ1M0MjMxX0FMVF9GRUFUVVJFXzEJMHgxMAkvKiBhbHRlcm5hdGUgIzEgZmVhdHVyZSBlbmFibGUgKi8KKyNkZWZpbmUgQUQxODQ1X0FGMV9NSUNfTEVGVAkweDEwCS8qIGFsdGVybmF0ZSAjMSBmZWF0dXJlICsgTUlDIGxlZnQgKi8KKyNkZWZpbmUgQ1M0MjMxX0FMVF9GRUFUVVJFXzIJMHgxMQkvKiBhbHRlcm5hdGUgIzIgZmVhdHVyZSBlbmFibGUgKi8KKyNkZWZpbmUgQUQxODQ1X0FGMl9NSUNfUklHSFQJMHgxMQkvKiBhbHRlcm5hdGUgIzIgZmVhdHVyZSArIE1JQyByaWdodCAqLworI2RlZmluZSBDUzQyMzFfTEVGVF9MSU5FX0lOCTB4MTIJLyogbGVmdCBsaW5lIGlucHV0IGNvbnRyb2wgKi8KKyNkZWZpbmUgQ1M0MjMxX1JJR0hUX0xJTkVfSU4JMHgxMwkvKiByaWdodCBsaW5lIGlucHV0IGNvbnRyb2wgKi8KKyNkZWZpbmUgQ1M0MjMxX1RJTUVSX0xPVwkweDE0CS8qIHRpbWVyIGxvdyBieXRlICovCisjZGVmaW5lIENTNDIzMV9USU1FUl9ISUdICTB4MTUJLyogdGltZXIgaGlnaCBieXRlICovCisjZGVmaW5lIENTNDIzMV9MRUZUX01JQ19JTlBVVAkweDE2CS8qIGxlZnQgTUlDIGlucHV0IGNvbnRyb2wgcmVnaXN0ZXIgKEludGVyV2F2ZSBvbmx5KSAqLworI2RlZmluZSBBRDE4NDVfVVBSX0ZSRVFfU0VMCTB4MTYJLyogdXBwZXIgYnl0ZSBvZiBmcmVxdWVuY3kgc2VsZWN0ICovCisjZGVmaW5lIENTNDIzMV9SSUdIVF9NSUNfSU5QVVQJMHgxNwkvKiByaWdodCBNSUMgaW5wdXQgY29udHJvbCByZWdpc3RlciAoSW50ZXJXYXZlIG9ubHkpICovCisjZGVmaW5lIEFEMTg0NV9MV1JfRlJFUV9TRUwJMHgxNwkvKiBsb3dlciBieXRlIG9mIGZyZXF1ZW5jeSBzZWxlY3QgKi8KKyNkZWZpbmUgQ1M0MjM2X0VYVF9SRUcJCTB4MTcJLyogZXh0ZW5kZWQgcmVnaXN0ZXIgYWNjZXNzICovCisjZGVmaW5lIENTNDIzMV9JUlFfU1RBVFVTCTB4MTgJLyogaXJxIHN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBDUzQyMzFfTElORV9MRUZUX09VVFBVVAkweDE5CS8qIGxlZnQgbGluZSBvdXRwdXQgY29udHJvbCByZWdpc3RlciAoSW50ZXJXYXZlIG9ubHkpICovCisjZGVmaW5lIENTNDIzMV9WRVJTSU9OCQkweDE5CS8qIENTNDIzMShBKSAtIHZlcnNpb24gdmFsdWVzICovCisjZGVmaW5lIENTNDIzMV9NT05PX0NUUkwJMHgxYQkvKiBtb25vIGlucHV0L291dHB1dCBjb250cm9sICovCisjZGVmaW5lIENTNDIzMV9MSU5FX1JJR0hUX09VVFBVVCAweDFiCS8qIHJpZ2h0IGxpbmUgb3V0cHV0IGNvbnRyb2wgcmVnaXN0ZXIgKEludGVyV2F2ZSBvbmx5KSAqLworI2RlZmluZSBBRDE4NDVfUFdSX0RPV04JCTB4MWIJLyogcG93ZXIgZG93biBjb250cm9sICovCisjZGVmaW5lIENTNDIzNV9MRUZUX01BU1RFUgkweDFiCS8qIGxlZnQgbWFzdGVyIG91dHB1dCBjb250cm9sICovCisjZGVmaW5lIENTNDIzMV9SRUNfRk9STUFUCTB4MWMJLyogY2xvY2sgYW5kIGRhdGEgZm9ybWF0IC0gcmVjb3JkIC0gYml0cyA3LTAgTUNFICovCisjZGVmaW5lIENTNDIzMV9QTFlfVkFSX0ZSRVEJMHgxZAkvKiBwbGF5YmFjayB2YXJpYWJsZSBmcmVxdWVuY3kgKi8KKyNkZWZpbmUgQUQxODQ1X0NMT0NLCQkweDFkCS8qIGNyeXN0YWwgY2xvY2sgc2VsZWN0IGFuZCB0b3RhbCBwb3dlciBkb3duICovCisjZGVmaW5lIENTNDIzNV9SSUdIVF9NQVNURVIJMHgxZAkvKiByaWdodCBtYXN0ZXIgb3V0cHV0IGNvbnRyb2wgKi8KKyNkZWZpbmUgQ1M0MjMxX1JFQ19VUFJfQ05UCTB4MWUJLyogcmVjb3JkIHVwcGVyIGNvdW50ICovCisjZGVmaW5lIENTNDIzMV9SRUNfTFdSX0NOVAkweDFmCS8qIHJlY29yZCBsb3dlciBjb3VudCAqLworCisvKiBkZWZpbml0aW9ucyBmb3IgY29kZWMgcmVnaXN0ZXIgc2VsZWN0IHBvcnQgLSBDT0RFQ1AoIFJFR1NFTCApICovCisKKyNkZWZpbmUgQ1M0MjMxX0lOSVQJCTB4ODAJLyogQ09ERUMgaXMgaW5pdGlhbGl6aW5nICovCisjZGVmaW5lIENTNDIzMV9NQ0UJCTB4NDAJLyogbW9kZSBjaGFuZ2UgZW5hYmxlICovCisjZGVmaW5lIENTNDIzMV9UUkQJCTB4MjAJLyogdHJhbnNmZXIgcmVxdWVzdCBkaXNhYmxlICovCisKKy8qIGRlZmluaXRpb25zIGZvciBjb2RlYyBzdGF0dXMgcmVnaXN0ZXIgLSBDT0RFQ1AoIFNUQVRVUyApICovCisKKyNkZWZpbmUgQ1M0MjMxX0dMT0JBTElSUQkweDAxCS8qIElSUSBpcyBhY3RpdmUgKi8KKworLyogZGVmaW5pdGlvbnMgZm9yIGNvZGVjIGlycSBzdGF0dXMgKi8KKworI2RlZmluZSBDUzQyMzFfUExBWUJBQ0tfSVJRCTB4MTAKKyNkZWZpbmUgQ1M0MjMxX1JFQ09SRF9JUlEJMHgyMAorI2RlZmluZSBDUzQyMzFfVElNRVJfSVJRCTB4NDAKKyNkZWZpbmUgQ1M0MjMxX0FMTF9JUlFTCQkweDcwCisjZGVmaW5lIENTNDIzMV9SRUNfVU5ERVJSVU4JMHgwOAorI2RlZmluZSBDUzQyMzFfUkVDX09WRVJSVU4JMHgwNAorI2RlZmluZSBDUzQyMzFfUExZX09WRVJSVU4JMHgwMgorI2RlZmluZSBDUzQyMzFfUExZX1VOREVSUlVOCTB4MDEKKworLyogZGVmaW5pdGlvbnMgZm9yIENTNDIzMV9MRUZUX0lOUFVUIGFuZCBDUzQyMzFfUklHSFRfSU5QVVQgcmVnaXN0ZXJzICovCisKKyNkZWZpbmUgQ1M0MjMxX0VOQUJMRV9NSUNfR0FJTgkweDIwCisKKyNkZWZpbmUgQ1M0MjMxX01JWFNfTElORQkweDAwCisjZGVmaW5lIENTNDIzMV9NSVhTX0FVWDEJMHg0MAorI2RlZmluZSBDUzQyMzFfTUlYU19NSUMJCTB4ODAKKyNkZWZpbmUgQ1M0MjMxX01JWFNfQUxMCQkweGMwCisKKy8qIGRlZmluaXRpb25zIGZvciBjbG9jayBhbmQgZGF0YSBmb3JtYXQgcmVnaXN0ZXIgLSBDUzQyMzFfUExBWUJLX0ZPUk1BVCAqLworCisjZGVmaW5lIENTNDIzMV9MSU5FQVJfOAkJMHgwMAkvKiA4LWJpdCB1bnNpZ25lZCBkYXRhICovCisjZGVmaW5lIENTNDIzMV9BTEFXXzgJCTB4NjAJLyogOC1iaXQgQS1sYXcgY29tcGFuZGVkICovCisjZGVmaW5lIENTNDIzMV9VTEFXXzgJCTB4MjAJLyogOC1iaXQgVS1sYXcgY29tcGFuZGVkICovCisjZGVmaW5lIENTNDIzMV9MSU5FQVJfMTYJMHg0MAkvKiAxNi1iaXQgdHdvcyBjb21wbGVtZW50IGRhdGEgLSBsaXR0bGUgZW5kaWFuICovCisjZGVmaW5lIENTNDIzMV9MSU5FQVJfMTZfQklHCTB4YzAJLyogMTYtYml0IHR3b3MgY29tcGxlbWVudCBkYXRhIC0gYmlnIGVuZGlhbiAqLworI2RlZmluZSBDUzQyMzFfQURQQ01fMTYJCTB4YTAJLyogMTYtYml0IEFEUENNICovCisjZGVmaW5lIENTNDIzMV9TVEVSRU8JCTB4MTAJLyogc3RlcmVvIG1vZGUgKi8KKy8qIGJpdHMgMy0xIGRlZmluZSBmcmVxdWVuY3kgZGl2aXNvciAqLworI2RlZmluZSBDUzQyMzFfWFRBTDEJCTB4MDAJLyogMjQuNTc2IGNyeXN0YWwgKi8KKyNkZWZpbmUgQ1M0MjMxX1hUQUwyCQkweDAxCS8qIDE2LjkzNDQgY3J5c3RhbCAqLworCisvKiBkZWZpbml0aW9ucyBmb3IgaW50ZXJmYWNlIGNvbnRyb2wgcmVnaXN0ZXIgLSBDUzQyMzFfSUZBQ0VfQ1RSTCAqLworCisjZGVmaW5lIENTNDIzMV9SRUNPUkRfUElPCTB4ODAJLyogcmVjb3JkIFBJTyBlbmFibGUgKi8KKyNkZWZpbmUgQ1M0MjMxX1BMQVlCQUNLX1BJTwkweDQwCS8qIHBsYXliYWNrIFBJTyBlbmFibGUgKi8KKyNkZWZpbmUgQ1M0MjMxX0NBTElCX01PREUJMHgxOAkvKiBjYWxpYnJhdGlvbiBtb2RlIGJpdHMgKi8KKyNkZWZpbmUgQ1M0MjMxX0FVVE9DQUxJQgkweDA4CS8qIGF1dG8gY2FsaWJyYXRlICovCisjZGVmaW5lIENTNDIzMV9TSU5HTEVfRE1BCTB4MDQJLyogdXNlIHNpbmdsZSBETUEgY2hhbm5lbCAqLworI2RlZmluZSBDUzQyMzFfUkVDT1JEX0VOQUJMRQkweDAyCS8qIHJlY29yZCBlbmFibGUgKi8KKyNkZWZpbmUgQ1M0MjMxX1BMQVlCQUNLX0VOQUJMRQkweDAxCS8qIHBsYXliYWNrIGVuYWJsZSAqLworCisvKiBkZWZpbml0aW9ucyBmb3IgcGluIGNvbnRyb2wgcmVnaXN0ZXIgLSBDUzQyMzFfUElOX0NUUkwgKi8KKworI2RlZmluZSBDUzQyMzFfSVJRX0VOQUJMRQkweDAyCS8qIGVuYWJsZSBJUlEgKi8KKyNkZWZpbmUgQ1M0MjMxX1hDVEwxCQkweDQwCS8qIGV4dGVybmFsIGNvbnRyb2wgIzEgKi8KKyNkZWZpbmUgQ1M0MjMxX1hDVEwwCQkweDgwCS8qIGV4dGVybmFsIGNvbnRyb2wgIzAgKi8KKworLyogZGVmaW5pdGlvbnMgZm9yIHRlc3QgYW5kIGluaXQgcmVnaXN0ZXIgLSBDUzQyMzFfVEVTVF9JTklUICovCisKKyNkZWZpbmUgQ1M0MjMxX0NBTElCX0lOX1BST0dSRVNTIDB4MjAJLyogYXV0byBjYWxpYnJhdGUgaW4gcHJvZ3Jlc3MgKi8KKyNkZWZpbmUgQ1M0MjMxX0RNQV9SRVFVRVNUCTB4MTAJLyogRE1BIHJlcXVlc3QgaW4gcHJvZ3Jlc3MgKi8KKworLyogZGVmaW5pdGlvbnMgZm9yIG1pc2MgY29udHJvbCByZWdpc3RlciAtIENTNDIzMV9NSVNDX0lORk8gKi8KKworI2RlZmluZSBDUzQyMzFfTU9ERTIJCTB4NDAJLyogTU9ERSAyICovCisjZGVmaW5lIENTNDIzMV9JV19NT0RFMwkJMHg2YwkvKiBNT0RFIDMgLSBJbnRlcldhdmUgZW5oYW5jZWQgbW9kZSAqLworI2RlZmluZSBDUzQyMzFfNDIzNl9NT0RFMwkweGUwCS8qIE1PREUgMyAtIENTNDIzNisgZW5oYW5jZWQgbW9kZSAqLworCisvKiBkZWZpbml0aW9ucyBmb3IgYWx0ZXJuYXRlIGZlYXR1cmUgMSByZWdpc3RlciAtIENTNDIzMV9BTFRfRkVBVFVSRV8xICovCisKKyNkZWZpbmUJQ1M0MjMxX0RBQ1oJCTB4MDEJLyogemVybyBEQUMgd2hlbiB1bmRlcnJ1biAqLworI2RlZmluZSBDUzQyMzFfVElNRVJfRU5BQkxFCTB4NDAJLyogY29kZWMgdGltZXIgZW5hYmxlICovCisjZGVmaW5lIENTNDIzMV9PTEIJCTB4ODAJLyogb3V0cHV0IGxldmVsIGJpdCAqLworCisvKiBkZWZpbml0aW9ucyBmb3IgRXh0ZW5kZWQgUmVnaXN0ZXJzIC0gQ1M0MjM2KyAqLworCisjZGVmaW5lIENTNDIzNl9SRUcoaTIzdmFsKQkoKChpMjN2YWwgPDwgMikgJiAweDEwKSB8ICgoaTIzdmFsID4+IDQpICYgMHgwZikpCisjZGVmaW5lIENTNDIzNl9JMjNWQUwocmVnKQkoKCgocmVnKSYweGYpIDw8IDQpIHwgKCgocmVnKSYweDEwKSA+PiAyKSB8IDB4OCkKKworI2RlZmluZSBDUzQyMzZfTEVGVF9MSU5FCTB4MDgJLyogbGVmdCBMSU5FIGFsdGVybmF0ZSB2b2x1bWUgKi8KKyNkZWZpbmUgQ1M0MjM2X1JJR0hUX0xJTkUJMHgxOAkvKiByaWdodCBMSU5FIGFsdGVybmF0ZSB2b2x1bWUgKi8KKyNkZWZpbmUgQ1M0MjM2X0xFRlRfTUlDCQkweDI4CS8qIGxlZnQgTUlDIHZvbHVtZSAqLworI2RlZmluZSBDUzQyMzZfUklHSFRfTUlDCTB4MzgJLyogcmlnaHQgTUlDIHZvbHVtZSAqLworI2RlZmluZSBDUzQyMzZfTEVGVF9NSVhfQ1RSTAkweDQ4CS8qIHN5bnRoZXNpcyBhbmQgbGVmdCBpbnB1dCBtaXhlciBjb250cm9sICovCisjZGVmaW5lIENTNDIzNl9SSUdIVF9NSVhfQ1RSTAkweDU4CS8qIHJpZ2h0IGlucHV0IG1peGVyIGNvbnRyb2wgKi8KKyNkZWZpbmUgQ1M0MjM2X0xFRlRfRk0JCTB4NjgJLyogbGVmdCBGTSB2b2x1bWUgKi8KKyNkZWZpbmUgQ1M0MjM2X1JJR0hUX0ZNCQkweDc4CS8qIHJpZ2h0IEZNIHZvbHVtZSAqLworI2RlZmluZSBDUzQyMzZfTEVGVF9EU1AJCTB4ODgJLyogbGVmdCBEU1Agc2VyaWFsIHBvcnQgdm9sdW1lICovCisjZGVmaW5lIENTNDIzNl9SSUdIVF9EU1AJMHg5OAkvKiByaWdodCBEU1Agc2VyaWFsIHBvcnQgdm9sdW1lICovCisjZGVmaW5lIENTNDIzNl9SSUdIVF9MT09QQkFDSwkweGE4CS8qIHJpZ2h0IGxvb3BiYWNrIG1vbml0b3Igdm9sdW1lICovCisjZGVmaW5lIENTNDIzNl9EQUNfTVVURQkJMHhiOAkvKiBEQUMgbXV0ZSBhbmQgSUZTRSBlbmFibGUgKi8KKyNkZWZpbmUgQ1M0MjM2X0FEQ19SQVRFCQkweGM4CS8qIGluZGVucGVuZGVudCBBREMgc2FtcGxlIGZyZXF1ZW5jeSAqLworI2RlZmluZSBDUzQyMzZfREFDX1JBVEUJCTB4ZDgJLyogaW5kZW5wZW5kZW50IERBQyBzYW1wbGUgZnJlcXVlbmN5ICovCisjZGVmaW5lIENTNDIzNl9MRUZUX01BU1RFUgkweGU4CS8qIGxlZnQgbWFzdGVyIGRpZ2l0YWwgYXVkaW8gdm9sdW1lICovCisjZGVmaW5lIENTNDIzNl9SSUdIVF9NQVNURVIJMHhmOAkvKiByaWdodCBtYXN0ZXIgZGlnaXRhbCBhdWRpbyB2b2x1bWUgKi8KKyNkZWZpbmUgQ1M0MjM2X0xFRlRfV0FWRQkweDBjCS8qIGxlZnQgd2F2ZXRhYmxlIHNlcmlhbCBwb3J0IHZvbHVtZSAqLworI2RlZmluZSBDUzQyMzZfUklHSFRfV0FWRQkweDFjCS8qIHJpZ2h0IHdhdmV0YWJsZSBzZXJpYWwgcG9ydCB2b2x1bWUgKi8KKyNkZWZpbmUgQ1M0MjM2X1ZFUlNJT04JCTB4OWMJLyogY2hpcCB2ZXJzaW9uIGFuZCBJRCAqLworCisvKiBkZWZpbmVzIGZvciBjb2RlYy5tb2RlICovCisKKyNkZWZpbmUgQ1M0MjMxX01PREVfTk9ORQkweDAwMDAKKyNkZWZpbmUgQ1M0MjMxX01PREVfUExBWQkweDAwMDEKKyNkZWZpbmUgQ1M0MjMxX01PREVfUkVDT1JECTB4MDAwMgorI2RlZmluZSBDUzQyMzFfTU9ERV9USU1FUgkweDAwMDQKKyNkZWZpbmUgQ1M0MjMxX01PREVfT1BFTgkoQ1M0MjMxX01PREVfUExBWXxDUzQyMzFfTU9ERV9SRUNPUkR8Q1M0MjMxX01PREVfVElNRVIpCisKKy8qIGRlZmluZXMgZm9yIGNvZGVjLmhhcmR3YXJlICovCisKKyNkZWZpbmUgQ1M0MjMxX0hXX0RFVEVDVCAgICAgICAgMHgwMDAwCS8qIGxldCBDUzQyMzEgZHJpdmVyIGRldGVjdCBjaGlwICovCisjZGVmaW5lIENTNDIzMV9IV19ERVRFQ1QzCTB4MDAwMQkvKiBhbGxvdyBtb2RlIDMgKi8KKyNkZWZpbmUgQ1M0MjMxX0hXX1RZUEVfTUFTSwkweGZmMDAJLyogdHlwZSBtYXNrICovCisjZGVmaW5lIENTNDIzMV9IV19DUzQyMzFfTUFTSyAgIDB4MDEwMAkvKiBDUzQyMzEgc2VyaWUgKi8KKyNkZWZpbmUgQ1M0MjMxX0hXX0NTNDIzMSAgICAgICAgMHgwMTAwCS8qIENTNDIzMSBjaGlwICovCisjZGVmaW5lIENTNDIzMV9IV19DUzQyMzFBICAgICAgIDB4MDEwMQkvKiBDUzQyMzFBIGNoaXAgKi8KKyNkZWZpbmUgQ1M0MjMxX0hXX0FEMTg0NQkweDAxMDIJLyogQUQxODQ1IGNoaXAgKi8KKyNkZWZpbmUgQ1M0MjMxX0hXX0NTNDIzMl9NQVNLICAgMHgwMjAwCS8qIENTNDIzMiBzZXJpZSAoaGFzIGNvbnRyb2wgcG9ydHMpICovCisjZGVmaW5lIENTNDIzMV9IV19DUzQyMzIgICAgICAgIDB4MDIwMAkvKiBDUzQyMzIgKi8KKyNkZWZpbmUgQ1M0MjMxX0hXX0NTNDIzMkEgICAgICAgMHgwMjAxCS8qIENTNDIzMkEgKi8KKyNkZWZpbmUgQ1M0MjMxX0hXX0NTNDIzNgkweDAyMDIJLyogQ1M0MjM2ICovCisjZGVmaW5lIENTNDIzMV9IV19DUzQyMzZCX01BU0sJMHgwNDAwCS8qIENTNDIzNkIgc2VyaWUgKGhhcyBleHRlbmRlZCBjb250cm9sIHJlZ3MpICovCisjZGVmaW5lIENTNDIzMV9IV19DUzQyMzUJMHgwNDAwCS8qIENTNDIzNSAtIENyeXN0YWwgQ2xlYXIgKHRtKSBzdGVyZW8gZW5oYW5jZW1lbnQgKi8KKyNkZWZpbmUgQ1M0MjMxX0hXX0NTNDIzNkIgICAgICAgMHgwNDAxCS8qIENTNDIzNkIgKi8KKyNkZWZpbmUgQ1M0MjMxX0hXX0NTNDIzN0IgICAgICAgMHgwNDAyCS8qIENTNDIzN0IgLSBTUlMgM0QgKi8KKyNkZWZpbmUgQ1M0MjMxX0hXX0NTNDIzOEIJMHgwNDAzCS8qIENTNDIzOEIgLSBRU09VTkQgM0QgKi8KKyNkZWZpbmUgQ1M0MjMxX0hXX0NTNDIzOQkweDA0MDQJLyogQ1M0MjM5IC0gQ3J5c3RhbCBDbGVhciAodG0pIHN0ZXJlbyBlbmhhbmNlbWVudCAqLworLyogY29tcGF0aWJsZSwgYnV0IGNsb25lcyAqLworI2RlZmluZSBDUzQyMzFfSFdfSU5URVJXQVZFICAgICAweDEwMDAJLyogSW50ZXJXYXZlIGNoaXAgKi8KKyNkZWZpbmUgQ1M0MjMxX0hXX09QTDNTQTIgICAgICAgMHgxMDAxCS8qIE9QTDMtU0EyIGNoaXAgKi8KKworLyogZGVmaW5lcyBmb3IgY29kZWMuaHdzaGFyZSAqLworI2RlZmluZSBDUzQyMzFfSFdTSEFSRV9JUlEJKDE8PDApCisjZGVmaW5lIENTNDIzMV9IV1NIQVJFX0RNQTEJKDE8PDEpCisjZGVmaW5lIENTNDIzMV9IV1NIQVJFX0RNQTIJKDE8PDIpCisKK3R5cGVkZWYgc3RydWN0IF9zbmRfY3M0MjMxIGNzNDIzMV90OworCitzdHJ1Y3QgX3NuZF9jczQyMzEgeworCXVuc2lnbmVkIGxvbmcgcG9ydDsJCS8qIGJhc2UgaS9vIHBvcnQgKi8KKyNpZmRlZiBMRUdBQ1lfU1VQUE9SVAorCXN0cnVjdCByZXNvdXJjZSAqcmVzX3BvcnQ7CisJdW5zaWduZWQgbG9uZyBjcG9ydDsJCS8qIGNvbnRyb2wgYmFzZSBpL28gcG9ydCAoQ1M0MjM2KSAqLworCXN0cnVjdCByZXNvdXJjZSAqcmVzX2Nwb3J0OworCWludCBpcnE7CQkJLyogSVJRIGxpbmUgKi8KKwlpbnQgZG1hMTsJCQkvKiBwbGF5YmFjayBETUEgKi8KKwlpbnQgZG1hMjsJCQkvKiByZWNvcmQgRE1BICovCisjZW5kaWYKKwl1bnNpZ25lZCBzaG9ydCB2ZXJzaW9uOwkJLyogdmVyc2lvbiBvZiBDT0RFQyBjaGlwICovCisJdW5zaWduZWQgc2hvcnQgbW9kZTsJCS8qIHNlZSB0byBDUzQyMzFfTU9ERV9YWFhYICovCisJdW5zaWduZWQgc2hvcnQgaGFyZHdhcmU7CS8qIHNlZSB0byBDUzQyMzFfSFdfWFhYWCAqLworCXVuc2lnbmVkIHNob3J0IGh3c2hhcmU7CQkvKiBzaGFyZWQgcmVzb3VyY2VzICovCisJdW5zaWduZWQgc2hvcnQgc2luZ2xlX2RtYToxLAkvKiBmb3JjZWQgc2luZ2xlIERNQSBtb2RlIChHVVMgMTYtYml0IGRhdWdodGVyIGJvYXJkKSBvciBkbWExID09IGRtYTIgKi8KKwkJICAgICAgIGVidXNfZmxhZzoxOwkvKiBTUEFSQzogRUJVUyBwcmVzZW50ICovCisKKyNpZmRlZiBFQlVTX1NVUFBPUlQKKwlzdHJ1Y3QgZWJ1c19kbWFfaW5mbyBlYjJjOworICAgICAgICBzdHJ1Y3QgZWJ1c19kbWFfaW5mbyBlYjJwOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKFNCVVNfU1VQUE9SVCkgfHwgZGVmaW5lZChFQlVTX1NVUFBPUlQpCisJdW5pb24geworI2lmZGVmIFNCVVNfU1VQUE9SVAorCQlzdHJ1Y3Qgc2J1c19kZXYgICAgICAgICAqc2RldjsKKyNlbmRpZgorI2lmZGVmIEVCVVNfU1VQUE9SVAorCQlzdHJ1Y3QgcGNpX2RldiAgICAgICAgICAqcGRldjsKKyNlbmRpZgorCX0gZGV2X3U7CisJdW5zaWduZWQgaW50IHBfcGVyaW9kc19zZW50OworCXVuc2lnbmVkIGludCBjX3BlcmlvZHNfc2VudDsKKyNlbmRpZgorCisJc25kX2NhcmRfdCAqY2FyZDsKKwlzbmRfcGNtX3QgKnBjbTsKKwlzbmRfcGNtX3N1YnN0cmVhbV90ICpwbGF5YmFja19zdWJzdHJlYW07CisJc25kX3BjbV9zdWJzdHJlYW1fdCAqY2FwdHVyZV9zdWJzdHJlYW07CisJc25kX3RpbWVyX3QgKnRpbWVyOworCisJdW5zaWduZWQgY2hhciBpbWFnZVszMl07CS8qIHJlZ2lzdGVycyBpbWFnZSAqLworCXVuc2lnbmVkIGNoYXIgZWltYWdlWzMyXTsJLyogZXh0ZW5kZWQgcmVnaXN0ZXJzIGltYWdlICovCisJdW5zaWduZWQgY2hhciBjaW1hZ2VbMTZdOwkvKiBjb250cm9sIHJlZ2lzdGVycyBpbWFnZSAqLworCWludCBtY2VfYml0OworCWludCBjYWxpYnJhdGVfbXV0ZTsKKwlpbnQgc3dfM2RfYml0OworI2lmZGVmIExFR0FDWV9TVVBQT1JUCisJdW5zaWduZWQgaW50IHBfZG1hX3NpemU7CisJdW5zaWduZWQgaW50IGNfZG1hX3NpemU7CisjZW5kaWYKKworCXNwaW5sb2NrX3QgcmVnX2xvY2s7CisJc3RydWN0IHNlbWFwaG9yZSBtY2VfbXV0ZXg7CisJc3RydWN0IHNlbWFwaG9yZSBvcGVuX211dGV4OworCisJaW50ICgqcmF0ZV9jb25zdHJhaW50KSAoc25kX3BjbV9ydW50aW1lX3QgKnJ1bnRpbWUpOworCXZvaWQgKCpzZXRfcGxheWJhY2tfZm9ybWF0KSAoY3M0MjMxX3QgKmNoaXAsIHNuZF9wY21faHdfcGFyYW1zX3QgKmh3X3BhcmFtcywgdW5zaWduZWQgY2hhciBwZGZyKTsKKwl2b2lkICgqc2V0X2NhcHR1cmVfZm9ybWF0KSAoY3M0MjMxX3QgKmNoaXAsIHNuZF9wY21faHdfcGFyYW1zX3QgKmh3X3BhcmFtcywgdW5zaWduZWQgY2hhciBjZGZyKTsKKwl2b2lkICgqdHJpZ2dlcikgKGNzNDIzMV90ICpjaGlwLCB1bnNpZ25lZCBpbnQgd2hhdCwgaW50IHN0YXJ0KTsKKyNpZmRlZiBDT05GSUdfUE0KKwl2b2lkICgqc3VzcGVuZCkgKGNzNDIzMV90ICpjaGlwKTsKKwl2b2lkICgqcmVzdW1lKSAoY3M0MjMxX3QgKmNoaXApOworI2VuZGlmCisJdm9pZCAqZG1hX3ByaXZhdGVfZGF0YTsKKyNpZmRlZiBMRUdBQ1lfU1VQUE9SVAorCWludCAoKmNsYWltX2RtYSkgKGNzNDIzMV90ICpjaGlwLCB2b2lkICpkbWFfcHJpdmF0ZV9kYXRhLCBpbnQgZG1hKTsKKwlpbnQgKCpyZWxlYXNlX2RtYSkgKGNzNDIzMV90ICpjaGlwLCB2b2lkICpkbWFfcHJpdmF0ZV9kYXRhLCBpbnQgZG1hKTsKKyNlbmRpZgorfTsKKworLyogZXhwb3J0ZWQgZnVuY3Rpb25zICovCisKK3ZvaWQgc25kX2NzNDIzMV9vdXQoY3M0MjMxX3QgKmNoaXAsIHVuc2lnbmVkIGNoYXIgcmVnLCB1bnNpZ25lZCBjaGFyIHZhbCk7Cit1bnNpZ25lZCBjaGFyIHNuZF9jczQyMzFfaW4oY3M0MjMxX3QgKmNoaXAsIHVuc2lnbmVkIGNoYXIgcmVnKTsKK3ZvaWQgc25kX2NzNDIzNl9leHRfb3V0KGNzNDIzMV90ICpjaGlwLCB1bnNpZ25lZCBjaGFyIHJlZywgdW5zaWduZWQgY2hhciB2YWwpOwordW5zaWduZWQgY2hhciBzbmRfY3M0MjM2X2V4dF9pbihjczQyMzFfdCAqY2hpcCwgdW5zaWduZWQgY2hhciByZWcpOwordm9pZCBzbmRfY3M0MjMxX21jZV91cChjczQyMzFfdCAqY2hpcCk7Cit2b2lkIHNuZF9jczQyMzFfbWNlX2Rvd24oY3M0MjMxX3QgKmNoaXApOworCitpcnFyZXR1cm5fdCBzbmRfY3M0MjMxX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworY29uc3QgY2hhciAqc25kX2NzNDIzMV9jaGlwX2lkKGNzNDIzMV90ICpjaGlwKTsKKworaW50IHNuZF9jczQyMzFfY3JlYXRlKHNuZF9jYXJkX3QgKiBjYXJkLAorCQkgICAgICB1bnNpZ25lZCBsb25nIHBvcnQsCisJCSAgICAgIHVuc2lnbmVkIGxvbmcgY3BvcnQsCisJCSAgICAgIGludCBpcnEsIGludCBkbWExLCBpbnQgZG1hMiwKKwkJICAgICAgdW5zaWduZWQgc2hvcnQgaGFyZHdhcmUsCisJCSAgICAgIHVuc2lnbmVkIHNob3J0IGh3c2hhcmUsCisJCSAgICAgIGNzNDIzMV90ICoqIHJjaGlwKTsKK2ludCBzbmRfY3M0MjMxX3BjbShjczQyMzFfdCAqIGNoaXAsIGludCBkZXZpY2UsIHNuZF9wY21fdCAqKnJwY20pOworaW50IHNuZF9jczQyMzFfdGltZXIoY3M0MjMxX3QgKiBjaGlwLCBpbnQgZGV2aWNlLCBzbmRfdGltZXJfdCAqKnJ0aW1lcik7CitpbnQgc25kX2NzNDIzMV9taXhlcihjczQyMzFfdCAqIGNoaXApOworCitpbnQgc25kX2NzNDIzNl9jcmVhdGUoc25kX2NhcmRfdCAqIGNhcmQsCisJCSAgICAgIHVuc2lnbmVkIGxvbmcgcG9ydCwKKwkJICAgICAgdW5zaWduZWQgbG9uZyBjcG9ydCwKKwkJICAgICAgaW50IGlycSwgaW50IGRtYTEsIGludCBkbWEyLAorCQkgICAgICB1bnNpZ25lZCBzaG9ydCBoYXJkd2FyZSwKKwkJICAgICAgdW5zaWduZWQgc2hvcnQgaHdzaGFyZSwKKwkJICAgICAgY3M0MjMxX3QgKiogcmNoaXApOworaW50IHNuZF9jczQyMzZfcGNtKGNzNDIzMV90ICogY2hpcCwgaW50IGRldmljZSwgc25kX3BjbV90ICoqcnBjbSk7CitpbnQgc25kX2NzNDIzNl9taXhlcihjczQyMzFfdCAqIGNoaXApOworCisvKgorICogIG1peGVyIGxpYnJhcnkKKyAqLworCisjZGVmaW5lIENTNDIzMV9TSU5HTEUoeG5hbWUsIHhpbmRleCwgcmVnLCBzaGlmdCwgbWFzaywgaW52ZXJ0KSBcCit7IC5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLCAubmFtZSA9IHhuYW1lLCAuaW5kZXggPSB4aW5kZXgsIFwKKyAgLmluZm8gPSBzbmRfY3M0MjMxX2luZm9fc2luZ2xlLCBcCisgIC5nZXQgPSBzbmRfY3M0MjMxX2dldF9zaW5nbGUsIC5wdXQgPSBzbmRfY3M0MjMxX3B1dF9zaW5nbGUsIFwKKyAgLnByaXZhdGVfdmFsdWUgPSByZWcgfCAoc2hpZnQgPDwgOCkgfCAobWFzayA8PCAxNikgfCAoaW52ZXJ0IDw8IDI0KSB9CisKK2ludCBzbmRfY3M0MjMxX2luZm9fc2luZ2xlKHNuZF9rY29udHJvbF90ICprY29udHJvbCwgc25kX2N0bF9lbGVtX2luZm9fdCAqIHVpbmZvKTsKK2ludCBzbmRfY3M0MjMxX2dldF9zaW5nbGUoc25kX2tjb250cm9sX3QgKiBrY29udHJvbCwgc25kX2N0bF9lbGVtX3ZhbHVlX3QgKiB1Y29udHJvbCk7CitpbnQgc25kX2NzNDIzMV9wdXRfc2luZ2xlKHNuZF9rY29udHJvbF90ICoga2NvbnRyb2wsIHNuZF9jdGxfZWxlbV92YWx1ZV90ICogdWNvbnRyb2wpOworCisjZGVmaW5lIENTNDIzMV9ET1VCTEUoeG5hbWUsIHhpbmRleCwgbGVmdF9yZWcsIHJpZ2h0X3JlZywgc2hpZnRfbGVmdCwgc2hpZnRfcmlnaHQsIG1hc2ssIGludmVydCkgXAoreyAuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgLm5hbWUgPSB4bmFtZSwgLmluZGV4ID0geGluZGV4LCBcCisgIC5pbmZvID0gc25kX2NzNDIzMV9pbmZvX2RvdWJsZSwgXAorICAuZ2V0ID0gc25kX2NzNDIzMV9nZXRfZG91YmxlLCAucHV0ID0gc25kX2NzNDIzMV9wdXRfZG91YmxlLCBcCisgIC5wcml2YXRlX3ZhbHVlID0gbGVmdF9yZWcgfCAocmlnaHRfcmVnIDw8IDgpIHwgKHNoaWZ0X2xlZnQgPDwgMTYpIHwgKHNoaWZ0X3JpZ2h0IDw8IDE5KSB8IChtYXNrIDw8IDI0KSB8IChpbnZlcnQgPDwgMjIpIH0KKworaW50IHNuZF9jczQyMzFfaW5mb19kb3VibGUoc25kX2tjb250cm9sX3QgKmtjb250cm9sLCBzbmRfY3RsX2VsZW1faW5mb190ICogdWluZm8pOworaW50IHNuZF9jczQyMzFfZ2V0X2RvdWJsZShzbmRfa2NvbnRyb2xfdCAqIGtjb250cm9sLCBzbmRfY3RsX2VsZW1fdmFsdWVfdCAqIHVjb250cm9sKTsKK2ludCBzbmRfY3M0MjMxX3B1dF9kb3VibGUoc25kX2tjb250cm9sX3QgKiBrY29udHJvbCwgc25kX2N0bF9lbGVtX3ZhbHVlX3QgKiB1Y29udHJvbCk7CisKKyNlbmRpZiAvKiBfX1NPVU5EX0NTNDIzMV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL2NzNDZ4eC5oIGIvaW5jbHVkZS9zb3VuZC9jczQ2eHguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODJkZDI3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9zb3VuZC9jczQ2eHguaApAQCAtMCwwICsxLDE3NTYgQEAKKyNpZm5kZWYgX19TT1VORF9DUzQ2WFhfSAorI2RlZmluZSBfX1NPVU5EX0NTNDZYWF9ICisKKy8qCisgKiAgQ29weXJpZ2h0IChjKSBieSBKYXJvc2xhdiBLeXNlbGEgPHBlcmV4QHN1c2UuY3o+LAorICoJCSAgICAgQ2lycnVzIExvZ2ljLCBJbmMuCisgKiAgRGVmaW5pdGlvbnMgZm9yIENpcnJ1cyBMb2dpYyBDUzQ2eHggY2hpcHMKKyAqCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICoKKyAqLworCisjaW5jbHVkZSAicGNtLmgiCisjaW5jbHVkZSAicGNtLWluZGlyZWN0LmgiCisjaW5jbHVkZSAicmF3bWlkaS5oIgorI2luY2x1ZGUgImFjOTdfY29kZWMuaCIKKyNpbmNsdWRlICJjczQ2eHhfZHNwX3Nwb3MuaCIKKworI2lmbmRlZiBQQ0lfVkVORE9SX0lEX0NJUlJVUworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0NJUlJVUyAgICAgICAgICAgIDB4MTAxMworI2VuZGlmCisjaWZuZGVmIFBDSV9ERVZJQ0VfSURfQ0lSUlVTXzQ2MTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DSVJSVVNfNDYxMCAgICAgICAweDYwMDEKKyNlbmRpZgorI2lmbmRlZiBQQ0lfREVWSUNFX0lEX0NJUlJVU180NjEyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ0lSUlVTXzQ2MTIgICAgICAgMHg2MDAzCisjZW5kaWYKKyNpZm5kZWYgUENJX0RFVklDRV9JRF9DSVJSVVNfNDYxNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NJUlJVU180NjE1ICAgICAgIDB4NjAwNAorI2VuZGlmCisKKy8qCisgKiAgRGlyZWN0IHJlZ2lzdGVycworICovCisKKy8qCisgKiAgVGhlIGZvbGxvd2luZyBkZWZpbmUgdGhlIG9mZnNldHMgb2YgdGhlIHJlZ2lzdGVycyBhY2Nlc3NlZCB2aWEgYmFzZSBhZGRyZXNzCisgKiAgcmVnaXN0ZXIgemVybyBvbiB0aGUgQ1M0Nnh4IHBhcnQuCisgKi8KKyNkZWZpbmUgQkEwX0hJU1IJCQkJMHgwMDAwMDAwMAorI2RlZmluZSBCQTBfSFNSMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBCQTBfSElDUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBCQTBfRE1TUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBCQTBfSFNBUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDExMAorI2RlZmluZSBCQTBfSERBUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDExNAorI2RlZmluZSBCQTBfSERNUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDExOAorI2RlZmluZSBCQTBfSERDUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDExQworI2RlZmluZSBCQTBfUEZNQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBCQTBfUEZDVjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwNAorI2RlZmluZSBCQTBfUEZDVjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwOAorI2RlZmluZSBCQTBfUENJQ0ZHMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBCQTBfUENJQ0ZHMDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwNAorI2RlZmluZSBCQTBfUENJQ0ZHMDggICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwOAorI2RlZmluZSBCQTBfUENJQ0ZHMEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwQworI2RlZmluZSBCQTBfUENJQ0ZHMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMxMAorI2RlZmluZSBCQTBfUENJQ0ZHMTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMxNAorI2RlZmluZSBCQTBfUENJQ0ZHMTggICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMxOAorI2RlZmluZSBCQTBfUENJQ0ZHMUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMxQworI2RlZmluZSBCQTBfUENJQ0ZHMjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMyMAorI2RlZmluZSBCQTBfUENJQ0ZHMjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMyNAorI2RlZmluZSBCQTBfUENJQ0ZHMjggICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMyOAorI2RlZmluZSBCQTBfUENJQ0ZHMkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMyQworI2RlZmluZSBCQTBfUENJQ0ZHMzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMzMAorI2RlZmluZSBCQTBfUENJQ0ZHMzQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMzNAorI2RlZmluZSBCQTBfUENJQ0ZHMzggICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMzOAorI2RlZmluZSBCQTBfUENJQ0ZHM0MgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMzQworI2RlZmluZSBCQTBfQ0xLQ1IxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBCQTBfQ0xLQ1IyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwNAorI2RlZmluZSBCQTBfUExMTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwOAorI2RlZmluZSBCQTBfUExMQ0MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwQworI2RlZmluZSBCQTBfRlJSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQxMCAKKyNkZWZpbmUgQkEwX0NGTDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MTQKKyNkZWZpbmUgQkEwX0NGTDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MTgKKyNkZWZpbmUgQkEwX1NFUk1DMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MjAKKyNkZWZpbmUgQkEwX1NFUk1DMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MjQKKyNkZWZpbmUgQkEwX1NFUkMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MjgKKyNkZWZpbmUgQkEwX1NFUkMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MkMKKyNkZWZpbmUgQkEwX1NFUkMzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MzAKKyNkZWZpbmUgQkEwX1NFUkM0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MzQKKyNkZWZpbmUgQkEwX1NFUkM1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MzgKKyNkZWZpbmUgQkEwX1NFUkJTUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0M0MKKyNkZWZpbmUgQkEwX1NFUkJTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0NDAKKyNkZWZpbmUgQkEwX1NFUkJDTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0NDQKKyNkZWZpbmUgQkEwX1NFUkJBRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0NDgKKyNkZWZpbmUgQkEwX1NFUkJDRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0NEMKKyNkZWZpbmUgQkEwX1NFUkJXUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0NTAKKyNkZWZpbmUgQkEwX1NFUkJSUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0NTQKKyNpZm5kZWYgTk9fQ1M0NjEyCisjZGVmaW5lIEJBMF9BU0VSX0ZBRERSICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDU4CisjZW5kaWYKKyNkZWZpbmUgQkEwX0FDQ1RMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0NjAKKyNkZWZpbmUgQkEwX0FDU1RTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0NjQKKyNkZWZpbmUgQkEwX0FDT1NWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0NjgKKyNkZWZpbmUgQkEwX0FDQ0FEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0NkMKKyNkZWZpbmUgQkEwX0FDQ0RBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0NzAKKyNkZWZpbmUgQkEwX0FDSVNWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0NzQKKyNkZWZpbmUgQkEwX0FDU0FEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0NzgKKyNkZWZpbmUgQkEwX0FDU0RBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0N0MKKyNkZWZpbmUgQkEwX0pTUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0ODAKKyNkZWZpbmUgQkEwX0pTQ1RMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0ODQKKyNkZWZpbmUgQkEwX0pTQzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0ODgKKyNkZWZpbmUgQkEwX0pTQzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0OEMKKyNkZWZpbmUgQkEwX01JRENSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0OTAKKyNkZWZpbmUgQkEwX01JRFNSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0OTQKKyNkZWZpbmUgQkEwX01JRFdQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0OTgKKyNkZWZpbmUgQkEwX01JRFJQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0OUMKKyNkZWZpbmUgQkEwX0pTSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0QTAKKyNpZm5kZWYgTk9fQ1M0NjEyCisjZGVmaW5lIEJBMF9BU0VSX01BU1RFUiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNEE0CisjZW5kaWYKKyNkZWZpbmUgQkEwX0NGR0kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0QjAKKyNkZWZpbmUgQkEwX1NTVklEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0QjQKKyNkZWZpbmUgQkEwX0dQSU9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0QjgKKyNpZm5kZWYgTk9fQ1M0NjEyCisjZGVmaW5lIEJBMF9FR1BJT0RSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNEJDCisjZGVmaW5lIEJBMF9FR1BJT1BUUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNEMwCisjZGVmaW5lIEJBMF9FR1BJT1RSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNEM0CisjZGVmaW5lIEJBMF9FR1BJT1dSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNEM4CisjZGVmaW5lIEJBMF9FR1BJT1NSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNENDCisjZGVmaW5lIEJBMF9TRVJDNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNEQwCisjZGVmaW5lIEJBMF9TRVJDNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNEQ0CisjZGVmaW5lIEJBMF9TRVJBQ0MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNEQ4CisjZGVmaW5lIEJBMF9BQ0NUTDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNEUwCisjZGVmaW5lIEJBMF9BQ1NUUzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNEU0CisjZGVmaW5lIEJBMF9BQ09TVjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNEU4CisjZGVmaW5lIEJBMF9BQ0NBRDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNEVDCisjZGVmaW5lIEJBMF9BQ0NEQTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNEYwCisjZGVmaW5lIEJBMF9BQ0lTVjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNEY0CisjZGVmaW5lIEJBMF9BQ1NBRDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNEY4CisjZGVmaW5lIEJBMF9BQ1NEQTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNEZDCisjZGVmaW5lIEJBMF9JT1RBQzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTAwCisjZGVmaW5lIEJBMF9JT1RBQzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTA0CisjZGVmaW5lIEJBMF9JT1RBQzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTA4CisjZGVmaW5lIEJBMF9JT1RBQzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTBDCisjZGVmaW5lIEJBMF9JT1RBQzQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTEwCisjZGVmaW5lIEJBMF9JT1RBQzUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTE0CisjZGVmaW5lIEJBMF9JT1RBQzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTE4CisjZGVmaW5lIEJBMF9JT1RBQzcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTFDCisjZGVmaW5lIEJBMF9JT1RBQzggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTIwCisjZGVmaW5lIEJBMF9JT1RBQzkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTI0CisjZGVmaW5lIEJBMF9JT1RBQzEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTI4CisjZGVmaW5lIEJBMF9JT1RBQzExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTJDCisjZGVmaW5lIEJBMF9JT1RGUjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTQwCisjZGVmaW5lIEJBMF9JT1RGUjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTQ0CisjZGVmaW5lIEJBMF9JT1RGUjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTQ4CisjZGVmaW5lIEJBMF9JT1RGUjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTRDCisjZGVmaW5lIEJBMF9JT1RGUjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTUwCisjZGVmaW5lIEJBMF9JT1RGUjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTU0CisjZGVmaW5lIEJBMF9JT1RGUjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTU4CisjZGVmaW5lIEJBMF9JT1RGUjcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTVDCisjZGVmaW5lIEJBMF9JT1RGSUZPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTgwCisjZGVmaW5lIEJBMF9JT1RSUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTg0CisjZGVmaW5lIEJBMF9JT1RGUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTg4CisjZGVmaW5lIEJBMF9JT1RDUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNThDCisjZGVmaW5lIEJBMF9EUENJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTkwCisjZGVmaW5lIEJBMF9EUENJQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTk0CisjZGVmaW5lIEJBMF9EUENJQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTk4CisjZGVmaW5lIEJBMF9QQ1BDSVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNjAwCisjZGVmaW5lIEJBMF9QQ1BDSUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNjA0CisjZGVmaW5lIEJBMF9QQ1BDSUVOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNjA4CisjZGVmaW5lIEJBMF9FUENJUE1DICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNjEwCisjZW5kaWYKKworLyoKKyAqICBUaGUgZm9sbG93aW5nIGRlZmluZSB0aGUgb2Zmc2V0cyBvZiB0aGUgcmVnaXN0ZXJzIGFuZCBtZW1vcmllcyBhY2Nlc3NlZCB2aWEKKyAqICBiYXNlIGFkZHJlc3MgcmVnaXN0ZXIgb25lIG9uIHRoZSBDUzQ2eHggcGFydC4KKyAqLworI2RlZmluZSBCQTFfU1BfRE1FTTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBCQTFfU1BfRE1FTTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBCQTFfU1BfUE1FTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBCQTFfU1BfUkVHCQkJCTB4MDAwMzAwMDAKKyNkZWZpbmUgQkExX1NQQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzAwMDAKKyNkZWZpbmUgQkExX0RSRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzAwMDQKKyNkZWZpbmUgQkExX0RTUldQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzAwMDgKKyNkZWZpbmUgQkExX1RXUFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzAwMEMKKyNkZWZpbmUgQkExX1NQV1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzAwMTAKKyNkZWZpbmUgQkExX1NQSVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzAwMTQKKyNkZWZpbmUgQkExX0ZHUjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzAwMjAKKyNkZWZpbmUgQkExX1NQQ1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzAwMjgKKyNkZWZpbmUgQkExX1NEU1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzAwMkMKKyNkZWZpbmUgQkExX0ZSTVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzAwMzAKKyNkZWZpbmUgQkExX0ZSQ0MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzAwMzQKKyNkZWZpbmUgQkExX0ZSU0MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzAwMzgKKyNkZWZpbmUgQkExX09NTklfTUVNICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwRTAwMDAKKworCisvKgorICogIFRoZSBmb2xsb3dpbmcgZGVmaW5lcyBhcmUgZm9yIHRoZSBmbGFncyBpbiB0aGUgaG9zdCBpbnRlcnJ1cHQgc3RhdHVzCisgKiAgcmVnaXN0ZXIuCisgKi8KKyNkZWZpbmUgSElTUl9WQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgSElTUl9WQzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSElTUl9WQzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgSElTUl9WQzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgSElTUl9WQzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgSElTUl9WQzQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgSElTUl9WQzUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgSElTUl9WQzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgSElTUl9WQzcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgSElTUl9WQzggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgSElTUl9WQzkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgSElTUl9WQzEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgSElTUl9WQzExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgSElTUl9WQzEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgSElTUl9WQzEzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgSElTUl9WQzE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgSElTUl9WQzE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgSElTUl9JTlQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgSElTUl9JTlQxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgSElTUl9ETUFJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgSElTUl9GUk9WUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgSElTUl9NSURJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKKyNpZmRlZiBOT19DUzQ2MTIKKyNkZWZpbmUgSElTUl9SRVNFUlZFRCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEZFMDAwMDAKKyNlbHNlCisjZGVmaW5lIEhJU1JfU0JJTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIEhJU1JfUkVTRVJWRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBGQzAwMDAwCisjZW5kaWYKKyNkZWZpbmUgSElTUl9IMFAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgSElTUl9JTlRFTkEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKworLyoKKyAqICBUaGUgZm9sbG93aW5nIGRlZmluZXMgYXJlIGZvciB0aGUgZmxhZ3MgaW4gdGhlIGhvc3Qgc2lnbmFsIHJlZ2lzdGVyIDAuCisgKi8KKyNkZWZpbmUgSFNSMF9WQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgSFNSMF9WQzE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSFNSMF9WQzE3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgSFNSMF9WQzE4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgSFNSMF9WQzE5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgSFNSMF9WQzIwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgSFNSMF9WQzIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgSFNSMF9WQzIyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgSFNSMF9WQzIzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgSFNSMF9WQzI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgSFNSMF9WQzI1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgSFNSMF9WQzI2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgSFNSMF9WQzI3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgSFNSMF9WQzI4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgSFNSMF9WQzI5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgSFNSMF9WQzMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgSFNSMF9WQzMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgSFNSMF9WQzMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgSFNSMF9WQzMzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgSFNSMF9WQzM0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgSFNSMF9WQzM1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgSFNSMF9WQzM2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgSFNSMF9WQzM3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgSFNSMF9WQzM4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgSFNSMF9WQzM5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgSFNSMF9WQzQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgSFNSMF9WQzQxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgSFNSMF9WQzQyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgSFNSMF9WQzQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgSFNSMF9WQzQ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgSFNSMF9WQzQ1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgSFNSMF9WQzQ2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgSFNSMF9WQzQ3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKworLyoKKyAqICBUaGUgZm9sbG93aW5nIGRlZmluZXMgYXJlIGZvciB0aGUgZmxhZ3MgaW4gdGhlIGhvc3QgaW50ZXJydXB0IGNvbnRyb2wKKyAqICByZWdpc3Rlci4KKyAqLworI2RlZmluZSBISUNSX0lFViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBISUNSX0NIR00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorCisvKgorICogIFRoZSBmb2xsb3dpbmcgZGVmaW5lcyBhcmUgZm9yIHRoZSBmbGFncyBpbiB0aGUgRE1BIHN0YXR1cyByZWdpc3Rlci4KKyAqLworI2RlZmluZSBETVNSX0hQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBETVNSX0hSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBETVNSX1NQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBETVNSX1NSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorCisvKgorICogIFRoZSBmb2xsb3dpbmcgZGVmaW5lcyBhcmUgZm9yIHRoZSBmbGFncyBpbiB0aGUgaG9zdCBETUEgc291cmNlIGFkZHJlc3MKKyAqICByZWdpc3Rlci4KKyAqLworI2RlZmluZSBIU0FSX0hPU1RfQUREUl9NQVNLICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBIU0FSX0RTUF9BRERSX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkZGRgorI2RlZmluZSBIU0FSX01FTUlEX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBGMDAwMAorI2RlZmluZSBIU0FSX01FTUlEX1NQX0RNRU0wICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBIU0FSX01FTUlEX1NQX0RNRU0xICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBIU0FSX01FTUlEX1NQX1BNRU0gICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBIU0FSX01FTUlEX1NQX0RFQlVHICAgICAgICAgICAgICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBIU0FSX01FTUlEX09NTklfTUVNICAgICAgICAgICAgICAgICAgICAgMHgwMDBFMDAwMAorI2RlZmluZSBIU0FSX0VORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBIU0FSX0VSUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorCisvKgorICogIFRoZSBmb2xsb3dpbmcgZGVmaW5lcyBhcmUgZm9yIHRoZSBmbGFncyBpbiB0aGUgaG9zdCBETUEgZGVzdGluYXRpb24gYWRkcmVzcworICogIHJlZ2lzdGVyLgorICovCisjZGVmaW5lIEhEQVJfSE9TVF9BRERSX01BU0sgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIEhEQVJfRFNQX0FERFJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRkZGCisjZGVmaW5lIEhEQVJfTUVNSURfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMEYwMDAwCisjZGVmaW5lIEhEQVJfTUVNSURfU1BfRE1FTTAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIEhEQVJfTUVNSURfU1BfRE1FTTEgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIEhEQVJfTUVNSURfU1BfUE1FTSAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIEhEQVJfTUVNSURfU1BfREVCVUcgICAgICAgICAgICAgICAgICAgICAweDAwMDMwMDAwCisjZGVmaW5lIEhEQVJfTUVNSURfT01OSV9NRU0gICAgICAgICAgICAgICAgICAgICAweDAwMEUwMDAwCisjZGVmaW5lIEhEQVJfRU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIEhEQVJfRVJSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisKKy8qCisgKiAgVGhlIGZvbGxvd2luZyBkZWZpbmVzIGFyZSBmb3IgdGhlIGZsYWdzIGluIHRoZSBob3N0IERNQSBjb250cm9sIHJlZ2lzdGVyLgorICovCisjZGVmaW5lIEhETVJfQUNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGMDAwCisjZGVmaW5lIEhETVJfQUNfOF8xNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIEhETVJfQUNfTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIEhETVJfQUNfQl9MICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIEhETVJfQUNfU19VICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisKKy8qCisgKiAgVGhlIGZvbGxvd2luZyBkZWZpbmVzIGFyZSBmb3IgdGhlIGZsYWdzIGluIHRoZSBob3N0IERNQSBjb250cm9sIHJlZ2lzdGVyLgorICovCisjZGVmaW5lIEhEQ1JfQ09VTlRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwM0ZGCisjZGVmaW5lIEhEQ1JfRE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIEhEQ1JfT1BUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIEhEQ1JfV0JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwCisjZGVmaW5lIEhEQ1JfV0JTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIEhEQ1JfRE1TX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3MDAwMDAwCisjZGVmaW5lIEhEQ1JfRE1TX0xJTkVBUiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIEhEQ1JfRE1TXzE2X0RXT1JEUyAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIEhEQ1JfRE1TXzMyX0RXT1JEUyAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIEhEQ1JfRE1TXzY0X0RXT1JEUyAgICAgICAgICAgICAgICAgICAgICAweDAzMDAwMDAwCisjZGVmaW5lIEhEQ1JfRE1TXzEyOF9EV09SRFMgICAgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwCisjZGVmaW5lIEhEQ1JfRE1TXzI1Nl9EV09SRFMgICAgICAgICAgICAgICAgICAgICAweDA1MDAwMDAwCisjZGVmaW5lIEhEQ1JfRE1TXzUxMl9EV09SRFMgICAgICAgICAgICAgICAgICAgICAweDA2MDAwMDAwCisjZGVmaW5lIEhEQ1JfRE1TXzEwMjRfRFdPUkRTICAgICAgICAgICAgICAgICAgICAweDA3MDAwMDAwCisjZGVmaW5lIEhEQ1JfREggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIEhEQ1JfU01TX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAweDcwMDAwMDAwCisjZGVmaW5lIEhEQ1JfU01TX0xJTkVBUiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIEhEQ1JfU01TXzE2X0RXT1JEUyAgICAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIEhEQ1JfU01TXzMyX0RXT1JEUyAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIEhEQ1JfU01TXzY0X0RXT1JEUyAgICAgICAgICAgICAgICAgICAgICAweDMwMDAwMDAwCisjZGVmaW5lIEhEQ1JfU01TXzEyOF9EV09SRFMgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIEhEQ1JfU01TXzI1Nl9EV09SRFMgICAgICAgICAgICAgICAgICAgICAweDUwMDAwMDAwCisjZGVmaW5lIEhEQ1JfU01TXzUxMl9EV09SRFMgICAgICAgICAgICAgICAgICAgICAweDYwMDAwMDAwCisjZGVmaW5lIEhEQ1JfU01TXzEwMjRfRFdPUkRTICAgICAgICAgICAgICAgICAgICAweDcwMDAwMDAwCisjZGVmaW5lIEhEQ1JfU0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIEhEQ1JfQ09VTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8qCisgKiAgVGhlIGZvbGxvd2luZyBkZWZpbmVzIGFyZSBmb3IgdGhlIGZsYWdzIGluIHRoZSBwZXJmb3JtYW5jZSBtb25pdG9yIGNvbnRyb2wKKyAqICByZWdpc3Rlci4KKyAqLworI2RlZmluZSBQRk1DX0MxU1NfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRgorI2RlZmluZSBQRk1DX0MxRVYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBQRk1DX0MxUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBQRk1DX0MyU1NfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDFGMDAwMAorI2RlZmluZSBQRk1DX0MyRVYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMAorI2RlZmluZSBQRk1DX0MyUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBQRk1DX0MxU1NfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBQRk1DX0MyU1NfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgUEZNQ19CVVNfR1JBTlQgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgUEZNQ19HUkFOVF9BRlRFUl9SRVEgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgUEZNQ19UUkFOU0FDVElPTiAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgUEZNQ19EV09SRF9UUkFOU0ZFUiAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgUEZNQ19TTEFWRV9SRUFEICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgUEZNQ19TTEFWRV9XUklURSAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgUEZNQ19QUkVFTVBUSU9OICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgUEZNQ19ESVNDT05ORUNUX1JFVFJZICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgUEZNQ19JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgUEZNQ19CVVNfT1dORVJTSElQICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgUEZNQ19UUkFOU0FDVElPTl9MQUcgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIFBGTUNfUENJX0NMT0NLICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSBQRk1DX1NFUklBTF9DTE9DSyAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgUEZNQ19TUF9DTE9DSyAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisKKy8qCisgKiAgVGhlIGZvbGxvd2luZyBkZWZpbmVzIGFyZSBmb3IgdGhlIGZsYWdzIGluIHRoZSBwZXJmb3JtYW5jZSBjb3VudGVyIHZhbHVlIDEKKyAqICByZWdpc3Rlci4KKyAqLworI2RlZmluZSBQRkNWMV9QQzFWX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBQRkNWMV9QQzFWX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvKgorICogIFRoZSBmb2xsb3dpbmcgZGVmaW5lcyBhcmUgZm9yIHRoZSBmbGFncyBpbiB0aGUgcGVyZm9ybWFuY2UgY291bnRlciB2YWx1ZSAyCisgKiAgcmVnaXN0ZXIuCisgKi8KKyNkZWZpbmUgUEZDVjJfUEMyVl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgUEZDVjJfUEMyVl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLyoKKyAqICBUaGUgZm9sbG93aW5nIGRlZmluZXMgYXJlIGZvciB0aGUgZmxhZ3MgaW4gdGhlIGNsb2NrIGNvbnRyb2wgcmVnaXN0ZXIgMS4KKyAqLworI2RlZmluZSBDTEtDUjFfT1NDUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDTEtDUjFfT1NDUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDTEtDUjFfUExMU1NfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworI2RlZmluZSBDTEtDUjFfUExMU1NfU0VSSUFMICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBDTEtDUjFfUExMU1NfQ1JZU1RBTCAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBDTEtDUjFfUExMU1NfUENJICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBDTEtDUjFfUExMU1NfUkVTRVJWRUQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworI2RlZmluZSBDTEtDUjFfUExMUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBDTEtDUjFfU1dDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBDTEtDUjFfUExMT1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorCisvKgorICogIFRoZSBmb2xsb3dpbmcgZGVmaW5lcyBhcmUgZm9yIHRoZSBmbGFncyBpbiB0aGUgY2xvY2sgY29udHJvbCByZWdpc3RlciAyLgorICovCisjZGVmaW5lIENMS0NSMl9QRElWU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIENMS0NSMl9QRElWU18xICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENMS0NSMl9QRElWU18yICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENMS0NSMl9QRElWU180ICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIENMS0NSMl9QRElWU183ICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIENMS0NSMl9QRElWU184ICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIENMS0NSMl9QRElWU18xNiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8qCisgKiAgVGhlIGZvbGxvd2luZyBkZWZpbmVzIGFyZSBmb3IgdGhlIGZsYWdzIGluIHRoZSBQTEwgbXVsdGlwbGllciByZWdpc3Rlci4KKyAqLworI2RlZmluZSBQTExNX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRgorI2RlZmluZSBQTExNX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvKgorICogIFRoZSBmb2xsb3dpbmcgZGVmaW5lcyBhcmUgZm9yIHRoZSBmbGFncyBpbiB0aGUgUExMIGNhcGFjaXRvciBjb2VmZmljaWVudAorICogIHJlZ2lzdGVyLgorICovCisjZGVmaW5lIFBMTENDX0NEUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CisjaWZuZGVmIE5PX0NTNDYxMAorI2RlZmluZSBQTExDQ19DRFJfMjQwXzM1MF9NSFogICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBQTExDQ19DRFJfMTg0XzI2NV9NSFogICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBQTExDQ19DRFJfMTQ0XzIwNV9NSFogICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBQTExDQ19DRFJfMTExXzE2MF9NSFogICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBQTExDQ19DRFJfODdfMTIzX01IWiAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBQTExDQ19DRFJfNjdfOTZfTUhaICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNQorI2RlZmluZSBQTExDQ19DRFJfNTJfNzRfTUhaICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNgorI2RlZmluZSBQTExDQ19DRFJfNDVfNThfTUhaICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2VuZGlmCisjaWZuZGVmIE5PX0NTNDYxMgorI2RlZmluZSBQTExDQ19DRFJfMjcxXzM5OF9NSFogICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBQTExDQ19DRFJfMjI3XzMzMF9NSFogICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBQTExDQ19DRFJfMTY3XzIzOV9NSFogICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBQTExDQ19DRFJfMTUwXzIxNV9NSFogICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBQTExDQ19DRFJfMTA3XzE1NF9NSFogICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBQTExDQ19DRFJfOThfMTQwX01IWiAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNQorI2RlZmluZSBQTExDQ19DRFJfNzNfMTA0X01IWiAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNgorI2RlZmluZSBQTExDQ19DRFJfNjNfOTBfTUhaICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2VuZGlmCisjZGVmaW5lIFBMTENDX0xQRl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEY4CisjaWZuZGVmIE5PX0NTNDYxMAorI2RlZmluZSBQTExDQ19MUEZfMjM4NTBfNjAwMDBfS0haICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBQTExDQ19MUEZfNzk2MF8yNjI5MF9LSFogICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBQTExDQ19MUEZfNDE2MF8xMDk4MF9LSFogICAgICAgICAgICAgICAgMHgwMDAwMDAxOAorI2RlZmluZSBQTExDQ19MUEZfMTc0MF80NTgwX0tIWiAgICAgICAgICAgICAgICAgMHgwMDAwMDAzOAorI2RlZmluZSBQTExDQ19MUEZfNzI0XzE5MTBfS0haICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3OAorI2RlZmluZSBQTExDQ19MUEZfMzE3Xzc5OF9LSFogICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGOAorI2VuZGlmCisjaWZuZGVmIE5PX0NTNDYxMgorI2RlZmluZSBQTExDQ19MUEZfMjU1ODBfNjQ1MzBfS0haICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBQTExDQ19MUEZfMTQzNjBfMzcyNzBfS0haICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBQTExDQ19MUEZfNjEwMF8xNjAyMF9LSFogICAgICAgICAgICAgICAgMHgwMDAwMDAxOAorI2RlZmluZSBQTExDQ19MUEZfMjU0MF82NjkwX0tIWiAgICAgICAgICAgICAgICAgMHgwMDAwMDAzOAorI2RlZmluZSBQTExDQ19MUEZfMTA1MF8yNzgwX0tIWiAgICAgICAgICAgICAgICAgMHgwMDAwMDA3OAorI2RlZmluZSBQTExDQ19MUEZfNDUwXzExNjBfS0haICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGOAorI2VuZGlmCisKKy8qCisgKiAgVGhlIGZvbGxvd2luZyBkZWZpbmVzIGFyZSBmb3IgdGhlIGZsYWdzIGluIHRoZSBmZWF0dXJlIHJlcG9ydGluZyByZWdpc3Rlci4KKyAqLworI2RlZmluZSBGUlJfRkFCX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBGUlJfTUFTS19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQworI2lmZGVmIE5PX0NTNDYxMgorI2RlZmluZSBGUlJfQ0ZPUF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBFMAorI2Vsc2UKKyNkZWZpbmUgRlJSX0NGT1BfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBGRTAKKyNlbmRpZgorI2RlZmluZSBGUlJfQ0ZPUF9OT1RfRFZEICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBGUlJfQ0ZPUF9BM0QgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBGUlJfQ0ZPUF8xMjhfUElOICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2lmbmRlZiBOT19DUzQ2MTIKKyNkZWZpbmUgRlJSX0NGT1BfQ1M0MjgwICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNlbmRpZgorI2RlZmluZSBGUlJfRkFCX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBGUlJfTUFTS19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBGUlJfQ0ZPUF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgNQorCisvKgorICogIFRoZSBmb2xsb3dpbmcgZGVmaW5lcyBhcmUgZm9yIHRoZSBmbGFncyBpbiB0aGUgY29uZmlndXJhdGlvbiBsb2FkIDEKKyAqICByZWdpc3Rlci4KKyAqLworI2RlZmluZSBDRkwxX0NMT0NLX1NPVVJDRV9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBDRkwxX0NMT0NLX1NPVVJDRV9DUzQyM1ggICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBDRkwxX0NMT0NLX1NPVVJDRV9BQzk3ICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDRkwxX0NMT0NLX1NPVVJDRV9DUllTVEFMICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDRkwxX0NMT0NLX1NPVVJDRV9EVUFMX0FDOTcgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBDRkwxX1ZBTElEX0RBVEFfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRgorCisvKgorICogIFRoZSBmb2xsb3dpbmcgZGVmaW5lcyBhcmUgZm9yIHRoZSBmbGFncyBpbiB0aGUgY29uZmlndXJhdGlvbiBsb2FkIDIKKyAqICByZWdpc3Rlci4KKyAqLworI2RlZmluZSBDRkwyX1ZBTElEX0RBVEFfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRgorCisvKgorICogIFRoZSBmb2xsb3dpbmcgZGVmaW5lcyBhcmUgZm9yIHRoZSBmbGFncyBpbiB0aGUgc2VyaWFsIHBvcnQgbWFzdGVyIGNvbnRyb2wKKyAqICByZWdpc3RlciAxLgorICovCisjZGVmaW5lIFNFUk1DMV9NU1BFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNFUk1DMV9QVENfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBFCisjZGVmaW5lIFNFUk1DMV9QVENfQ1M0MjNYICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIFNFUk1DMV9QVENfQUM5NyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFNFUk1DMV9QVENfREFDICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIFNFUk1DMV9QTEIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIFNFUk1DMV9YTEIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisKKy8qCisgKiAgVGhlIGZvbGxvd2luZyBkZWZpbmVzIGFyZSBmb3IgdGhlIGZsYWdzIGluIHRoZSBzZXJpYWwgcG9ydCBtYXN0ZXIgY29udHJvbAorICogIHJlZ2lzdGVyIDIuCisgKi8KKyNkZWZpbmUgU0VSTUMyX0xST0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU0VSTUMyX01DT0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgU0VSTUMyX01DRElWICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKworLyoKKyAqICBUaGUgZm9sbG93aW5nIGRlZmluZXMgYXJlIGZvciB0aGUgZmxhZ3MgaW4gdGhlIHNlcmlhbCBwb3J0IDEgY29uZmlndXJhdGlvbgorICogIHJlZ2lzdGVyLgorICovCisjZGVmaW5lIFNFUkMxX1NPMUVOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNFUkMxX1NPMUZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBFCisjZGVmaW5lIFNFUkMxX1NPMUZfQ1M0MjNYICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIFNFUkMxX1NPMUZfQUM5NyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFNFUkMxX1NPMUZfREFDICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIFNFUkMxX1NPMUZfU1BESUYgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA2CisKKy8qCisgKiAgVGhlIGZvbGxvd2luZyBkZWZpbmVzIGFyZSBmb3IgdGhlIGZsYWdzIGluIHRoZSBzZXJpYWwgcG9ydCAyIGNvbmZpZ3VyYXRpb24KKyAqICByZWdpc3Rlci4KKyAqLworI2RlZmluZSBTRVJDMl9TSTFFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTRVJDMl9TSTFGX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRQorI2RlZmluZSBTRVJDMl9TSTFGX0NTNDIzWCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBTRVJDMl9TSTFGX0FDOTcgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBTRVJDMl9TSTFGX0FEQyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBTRVJDMl9TSTFGX1NQRElGICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNgorCisvKgorICogIFRoZSBmb2xsb3dpbmcgZGVmaW5lcyBhcmUgZm9yIHRoZSBmbGFncyBpbiB0aGUgc2VyaWFsIHBvcnQgMyBjb25maWd1cmF0aW9uCisgKiAgcmVnaXN0ZXIuCisgKi8KKyNkZWZpbmUgU0VSQzNfU08yRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU0VSQzNfU08yRl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDYKKyNkZWZpbmUgU0VSQzNfU08yRl9EQUMgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgU0VSQzNfU08yRl9TUERJRiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKworLyoKKyAqICBUaGUgZm9sbG93aW5nIGRlZmluZXMgYXJlIGZvciB0aGUgZmxhZ3MgaW4gdGhlIHNlcmlhbCBwb3J0IDQgY29uZmlndXJhdGlvbgorICogIHJlZ2lzdGVyLgorICovCisjZGVmaW5lIFNFUkM0X1NPM0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNFUkM0X1NPM0ZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA2CisjZGVmaW5lIFNFUkM0X1NPM0ZfREFDICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIFNFUkM0X1NPM0ZfU1BESUYgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisKKy8qCisgKiAgVGhlIGZvbGxvd2luZyBkZWZpbmVzIGFyZSBmb3IgdGhlIGZsYWdzIGluIHRoZSBzZXJpYWwgcG9ydCA1IGNvbmZpZ3VyYXRpb24KKyAqICByZWdpc3Rlci4KKyAqLworI2RlZmluZSBTRVJDNV9TSTJFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTRVJDNV9TSTJGX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNgorI2RlZmluZSBTRVJDNV9TSTJGX0FEQyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBTRVJDNV9TSTJGX1NQRElGICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorCisvKgorICogIFRoZSBmb2xsb3dpbmcgZGVmaW5lcyBhcmUgZm9yIHRoZSBmbGFncyBpbiB0aGUgc2VyaWFsIHBvcnQgYmFja2Rvb3Igc2FtcGxlCisgKiAgcG9pbnRlciByZWdpc3Rlci4KKyAqLworI2RlZmluZSBTRVJCU1BfRlNQX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBTRVJCU1BfRlNQX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvKgorICogIFRoZSBmb2xsb3dpbmcgZGVmaW5lcyBhcmUgZm9yIHRoZSBmbGFncyBpbiB0aGUgc2VyaWFsIHBvcnQgYmFja2Rvb3Igc3RhdHVzCisgKiAgcmVnaXN0ZXIuCisgKi8KKyNkZWZpbmUgU0VSQlNUX1JSRFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU0VSQlNUX1dCU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKworLyoKKyAqICBUaGUgZm9sbG93aW5nIGRlZmluZXMgYXJlIGZvciB0aGUgZmxhZ3MgaW4gdGhlIHNlcmlhbCBwb3J0IGJhY2tkb29yIGNvbW1hbmQKKyAqICByZWdpc3Rlci4KKyAqLworI2RlZmluZSBTRVJCQ01fUkRDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTRVJCQ01fV1JDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorCisvKgorICogIFRoZSBmb2xsb3dpbmcgZGVmaW5lcyBhcmUgZm9yIHRoZSBmbGFncyBpbiB0aGUgc2VyaWFsIHBvcnQgYmFja2Rvb3IgYWRkcmVzcworICogIHJlZ2lzdGVyLgorICovCisjaWZkZWYgTk9fQ1M0NjEyCisjZGVmaW5lIFNFUkJBRF9GQURfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZWxzZQorI2RlZmluZSBTRVJCQURfRkFEX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDFGRgorI2VuZGlmCisjZGVmaW5lIFNFUkJBRF9GQURfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8qCisgKiAgVGhlIGZvbGxvd2luZyBkZWZpbmVzIGFyZSBmb3IgdGhlIGZsYWdzIGluIHRoZSBzZXJpYWwgcG9ydCBiYWNrZG9vcgorICogIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIuCisgKi8KKyNkZWZpbmUgU0VSQkNGX0hCUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKworLyoKKyAqICBUaGUgZm9sbG93aW5nIGRlZmluZXMgYXJlIGZvciB0aGUgZmxhZ3MgaW4gdGhlIHNlcmlhbCBwb3J0IGJhY2tkb29yIHdyaXRlCisgKiAgcG9ydCByZWdpc3Rlci4KKyAqLworI2RlZmluZSBTRVJCV1BfRldEX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBGRkZGRgorI2RlZmluZSBTRVJCV1BfRldEX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvKgorICogIFRoZSBmb2xsb3dpbmcgZGVmaW5lcyBhcmUgZm9yIHRoZSBmbGFncyBpbiB0aGUgc2VyaWFsIHBvcnQgYmFja2Rvb3IgcmVhZAorICogIHBvcnQgcmVnaXN0ZXIuCisgKi8KKyNkZWZpbmUgU0VSQlJQX0ZSRF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwRkZGRkYKKyNkZWZpbmUgU0VSQlJQX0ZSRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLyoKKyAqICBUaGUgZm9sbG93aW5nIGRlZmluZXMgYXJlIGZvciB0aGUgZmxhZ3MgaW4gdGhlIGFzeW5jIEZJRk8gYWRkcmVzcyByZWdpc3Rlci4KKyAqLworI2lmbmRlZiBOT19DUzQ2MTIKKyNkZWZpbmUgQVNFUl9GQUREUl9BMV9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxRkYKKyNkZWZpbmUgQVNFUl9GQUREUl9FTjEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgQVNFUl9GQUREUl9BMl9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDFGRjAwMDAKKyNkZWZpbmUgQVNFUl9GQUREUl9FTjIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgQVNFUl9GQUREUl9BMV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVNFUl9GQUREUl9BMl9TSElGVCAgICAgICAgICAgICAgICAgICAgIDE2CisjZW5kaWYKKworLyoKKyAqICBUaGUgZm9sbG93aW5nIGRlZmluZXMgYXJlIGZvciB0aGUgZmxhZ3MgaW4gdGhlIEFDOTcgY29udHJvbCByZWdpc3Rlci4KKyAqLworI2RlZmluZSBBQ0NUTF9SU1ROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBQ0NUTF9FU1lOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBQ0NUTF9WRlJNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBQ0NUTF9EQ1YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBQ0NUTF9DUlcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBQ0NUTF9BU1lOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2lmbmRlZiBOT19DUzQ2MTIKKyNkZWZpbmUgQUNDVExfVEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNlbmRpZgorCisvKgorICogIFRoZSBmb2xsb3dpbmcgZGVmaW5lcyBhcmUgZm9yIHRoZSBmbGFncyBpbiB0aGUgQUM5NyBzdGF0dXMgcmVnaXN0ZXIuCisgKi8KKyNkZWZpbmUgQUNTVFNfQ1JEWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQUNTVFNfVlNUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNpZm5kZWYgTk9fQ1M0NjEyCisjZGVmaW5lIEFDU1RTX1dLVVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZW5kaWYKKworLyoKKyAqICBUaGUgZm9sbG93aW5nIGRlZmluZXMgYXJlIGZvciB0aGUgZmxhZ3MgaW4gdGhlIEFDOTcgb3V0cHV0IHNsb3QgdmFsaWQKKyAqICByZWdpc3Rlci4KKyAqLworI2RlZmluZSBBQ09TVl9TTFYzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBQ09TVl9TTFY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBQ09TVl9TTFY1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBQ09TVl9TTFY2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBQ09TVl9TTFY3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBQ09TVl9TTFY4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBBQ09TVl9TTFY5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBBQ09TVl9TTFYxMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBBQ09TVl9TTFYxMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBBQ09TVl9TTFYxMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorCisvKgorICogIFRoZSBmb2xsb3dpbmcgZGVmaW5lcyBhcmUgZm9yIHRoZSBmbGFncyBpbiB0aGUgQUM5NyBjb21tYW5kIGFkZHJlc3MKKyAqICByZWdpc3Rlci4KKyAqLworI2RlZmluZSBBQ0NBRF9DSV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBBQ0NBRF9DSV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvKgorICogIFRoZSBmb2xsb3dpbmcgZGVmaW5lcyBhcmUgZm9yIHRoZSBmbGFncyBpbiB0aGUgQUM5NyBjb21tYW5kIGRhdGEgcmVnaXN0ZXIuCisgKi8KKyNkZWZpbmUgQUNDREFfQ0RfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgQUNDREFfQ0RfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLyoKKyAqICBUaGUgZm9sbG93aW5nIGRlZmluZXMgYXJlIGZvciB0aGUgZmxhZ3MgaW4gdGhlIEFDOTcgaW5wdXQgc2xvdCB2YWxpZAorICogIHJlZ2lzdGVyLgorICovCisjZGVmaW5lIEFDSVNWX0lTVjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFDSVNWX0lTVjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFDSVNWX0lTVjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFDSVNWX0lTVjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEFDSVNWX0lTVjcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEFDSVNWX0lTVjggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEFDSVNWX0lTVjkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEFDSVNWX0lTVjEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEFDSVNWX0lTVjExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEFDSVNWX0lTVjEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisKKy8qCisgKiAgVGhlIGZvbGxvd2luZyBkZWZpbmVzIGFyZSBmb3IgdGhlIGZsYWdzIGluIHRoZSBBQzk3IHN0YXR1cyBhZGRyZXNzCisgKiAgcmVnaXN0ZXIuCisgKi8KKyNkZWZpbmUgQUNTQURfU0lfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgQUNTQURfU0lfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLyoKKyAqICBUaGUgZm9sbG93aW5nIGRlZmluZXMgYXJlIGZvciB0aGUgZmxhZ3MgaW4gdGhlIEFDOTcgc3RhdHVzIGRhdGEgcmVnaXN0ZXIuCisgKi8KKyNkZWZpbmUgQUNTREFfU0RfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgQUNTREFfU0RfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLyoKKyAqICBUaGUgZm9sbG93aW5nIGRlZmluZXMgYXJlIGZvciB0aGUgZmxhZ3MgaW4gdGhlIGpveXN0aWNrIHBvbGwvdHJpZ2dlcgorICogIHJlZ2lzdGVyLgorICovCisjZGVmaW5lIEpTUFRfQ0FYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEpTUFRfQ0FZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEpTUFRfQ0JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEpTUFRfQ0JZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEpTUFRfQkExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEpTUFRfQkEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEpTUFRfQkIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEpTUFRfQkIyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisKKy8qCisgKiAgVGhlIGZvbGxvd2luZyBkZWZpbmVzIGFyZSBmb3IgdGhlIGZsYWdzIGluIHRoZSBqb3lzdGljayBjb250cm9sIHJlZ2lzdGVyLgorICovCisjZGVmaW5lIEpTQ1RMX1NQX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIEpTQ1RMX1NQX1NMT1cgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIEpTQ1RMX1NQX01FRElVTV9TTE9XICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEpTQ1RMX1NQX01FRElVTV9GQVNUICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEpTQ1RMX1NQX0ZBU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIEpTQ1RMX0FSRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisKKy8qCisgKiAgVGhlIGZvbGxvd2luZyBkZWZpbmVzIGFyZSBmb3IgdGhlIGZsYWdzIGluIHRoZSBqb3lzdGljayBjb29yZGluYXRlIHBhaXIgMQorICogIHJlYWRiYWNrIHJlZ2lzdGVyLgorICovCisjZGVmaW5lIEpTQzFfWTFWX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRkZGCisjZGVmaW5lIEpTQzFfWDFWX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkYwMDAwCisjZGVmaW5lIEpTQzFfWTFWX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEpTQzFfWDFWX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvKgorICogIFRoZSBmb2xsb3dpbmcgZGVmaW5lcyBhcmUgZm9yIHRoZSBmbGFncyBpbiB0aGUgam95c3RpY2sgY29vcmRpbmF0ZSBwYWlyIDIKKyAqICByZWFkYmFjayByZWdpc3Rlci4KKyAqLworI2RlZmluZSBKU0MyX1kyVl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkZGRgorI2RlZmluZSBKU0MyX1gyVl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGMDAwMAorI2RlZmluZSBKU0MyX1kyVl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBKU0MyX1gyVl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLyoKKyAqICBUaGUgZm9sbG93aW5nIGRlZmluZXMgYXJlIGZvciB0aGUgZmxhZ3MgaW4gdGhlIE1JREkgY29udHJvbCByZWdpc3Rlci4KKyAqLworI2RlZmluZSBNSURDUl9UWEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQkvKiBFbmFibGUgdHJhbnNtaXR0aW5nLiAqLworI2RlZmluZSBNSURDUl9SWEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgkvKiBFbmFibGUgcmVjZWl2aW5nLiAqLworI2RlZmluZSBNSURDUl9SSUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAkvKiBJbnRlcnJ1cHQgdXBvbiB0eCByZWFkeS4gKi8KKyNkZWZpbmUgTUlEQ1JfVElFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgJLyogSW50ZXJydXB0IHVwb24gcnggcmVhZHkuICovCisjZGVmaW5lIE1JRENSX01MQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCS8qIEVuYWJsZSBtaWRpIGxvb3BiYWNrLiAqLworI2RlZmluZSBNSURDUl9NUlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAkvKiBSZXNldCBpbnRlcmZhY2UuICovCisKKy8qCisgKiAgVGhlIGZvbGxvd2luZyBkZWZpbmVzIGFyZSBmb3IgdGhlIGZsYWdzIGluIHRoZSBNSURJIHN0YXR1cyByZWdpc3Rlci4KKyAqLworI2RlZmluZSBNSURTUl9UQkYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQkvKiBUeCBGSUZPIGlzIGZ1bGwuICovCisjZGVmaW5lIE1JRFNSX1JCRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCS8qIFJ4IEZJRk8gaXMgZW1wdHkuICovCisKKy8qCisgKiAgVGhlIGZvbGxvd2luZyBkZWZpbmVzIGFyZSBmb3IgdGhlIGZsYWdzIGluIHRoZSBNSURJIHdyaXRlIHBvcnQgcmVnaXN0ZXIuCisgKi8KKyNkZWZpbmUgTUlEV1BfTVdEX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgTUlEV1BfTVdEX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLyoKKyAqICBUaGUgZm9sbG93aW5nIGRlZmluZXMgYXJlIGZvciB0aGUgZmxhZ3MgaW4gdGhlIE1JREkgcmVhZCBwb3J0IHJlZ2lzdGVyLgorICovCisjZGVmaW5lIE1JRFJQX01SRF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIE1JRFJQX01SRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8qCisgKiAgVGhlIGZvbGxvd2luZyBkZWZpbmVzIGFyZSBmb3IgdGhlIGZsYWdzIGluIHRoZSBqb3lzdGljayBHUElPIHJlZ2lzdGVyLgorICovCisjZGVmaW5lIEpTSU9fREFYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEpTSU9fREFZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEpTSU9fREJYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEpTSU9fREJZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEpTSU9fQVhPRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEpTSU9fQVlPRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEpTSU9fQlhPRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEpTSU9fQllPRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisKKy8qCisgKiAgVGhlIGZvbGxvd2luZyBkZWZpbmVzIGFyZSBmb3IgdGhlIGZsYWdzIGluIHRoZSBtYXN0ZXIgYXN5bmMvc3luYyBzZXJpYWwKKyAqICBwb3J0IGVuYWJsZSByZWdpc3Rlci4KKyAqLworI2lmbmRlZiBOT19DUzQ2MTIKKyNkZWZpbmUgQVNFUl9NQVNURVJfTUUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNlbmRpZgorCisvKgorICogIFRoZSBmb2xsb3dpbmcgZGVmaW5lcyBhcmUgZm9yIHRoZSBmbGFncyBpbiB0aGUgY29uZmlndXJhdGlvbiBpbnRlcmZhY2UKKyAqICByZWdpc3Rlci4KKyAqLworI2RlZmluZSBDRkdJX0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDRkdJX0RPVVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDRkdJX0RJTl9FRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBDRkdJX0VFTEQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorCisvKgorICogIFRoZSBmb2xsb3dpbmcgZGVmaW5lcyBhcmUgZm9yIHRoZSBmbGFncyBpbiB0aGUgc3Vic3lzdGVtIElEIGFuZCB2ZW5kb3IgSUQKKyAqICByZWdpc3Rlci4KKyAqLworI2RlZmluZSBTU1ZJRF9WSURfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkZGRgorI2RlZmluZSBTU1ZJRF9TSURfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGMDAwMAorI2RlZmluZSBTU1ZJRF9WSURfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBTU1ZJRF9TSURfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLyoKKyAqICBUaGUgZm9sbG93aW5nIGRlZmluZXMgYXJlIGZvciB0aGUgZmxhZ3MgaW4gdGhlIEdQSU8gcGluIGludGVyZmFjZSByZWdpc3Rlci4KKyAqLworI2RlZmluZSBHUElPUl9WT0xETiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBHUElPUl9WT0xVUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBHUElPUl9TSTJEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBHUElPUl9TSTJPRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorCisvKgorICogIFRoZSBmb2xsb3dpbmcgZGVmaW5lcyBhcmUgZm9yIHRoZSBmbGFncyBpbiB0aGUgZXh0ZW5kZWQgR1BJTyBwaW4gZGlyZWN0aW9uCisgKiAgcmVnaXN0ZXIuCisgKi8KKyNpZm5kZWYgTk9fQ1M0NjEyCisjZGVmaW5lIEVHUElPRFJfR1BPRTAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEVHUElPRFJfR1BPRTEgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEVHUElPRFJfR1BPRTIgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEVHUElPRFJfR1BPRTMgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEVHUElPRFJfR1BPRTQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEVHUElPRFJfR1BPRTUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEVHUElPRFJfR1BPRTYgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEVHUElPRFJfR1BPRTcgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEVHUElPRFJfR1BPRTggICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZW5kaWYKKworLyoKKyAqICBUaGUgZm9sbG93aW5nIGRlZmluZXMgYXJlIGZvciB0aGUgZmxhZ3MgaW4gdGhlIGV4dGVuZGVkIEdQSU8gcGluIHBvbGFyaXR5LworICogIHR5cGUgcmVnaXN0ZXIuCisgKi8KKyNpZm5kZWYgTk9fQ1M0NjEyCisjZGVmaW5lIEVHUElPUFRSX0dQUFQwICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEVHUElPUFRSX0dQUFQxICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEVHUElPUFRSX0dQUFQyICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEVHUElPUFRSX0dQUFQzICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEVHUElPUFRSX0dQUFQ0ICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEVHUElPUFRSX0dQUFQ1ICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEVHUElPUFRSX0dQUFQ2ICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEVHUElPUFRSX0dQUFQ3ICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEVHUElPUFRSX0dQUFQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZW5kaWYKKworLyoKKyAqICBUaGUgZm9sbG93aW5nIGRlZmluZXMgYXJlIGZvciB0aGUgZmxhZ3MgaW4gdGhlIGV4dGVuZGVkIEdQSU8gcGluIHN0aWNreQorICogIHJlZ2lzdGVyLgorICovCisjaWZuZGVmIE5PX0NTNDYxMgorI2RlZmluZSBFR1BJT1RSX0dQUzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBFR1BJT1RSX0dQUzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBFR1BJT1RSX0dQUzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBFR1BJT1RSX0dQUzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBFR1BJT1RSX0dQUzQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBFR1BJT1RSX0dQUzUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBFR1BJT1RSX0dQUzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBFR1BJT1RSX0dQUzcgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBFR1BJT1RSX0dQUzggICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2VuZGlmCisKKy8qCisgKiAgVGhlIGZvbGxvd2luZyBkZWZpbmVzIGFyZSBmb3IgdGhlIGZsYWdzIGluIHRoZSBleHRlbmRlZCBHUElPIHBpbmcgd2FrZXVwCisgKiAgcmVnaXN0ZXIuCisgKi8KKyNpZm5kZWYgTk9fQ1M0NjEyCisjZGVmaW5lIEVHUElPV1JfR1BXMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEVHUElPV1JfR1BXMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEVHUElPV1JfR1BXMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEVHUElPV1JfR1BXMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEVHUElPV1JfR1BXNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEVHUElPV1JfR1BXNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEVHUElPV1JfR1BXNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEVHUElPV1JfR1BXNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEVHUElPV1JfR1BXOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZW5kaWYKKworLyoKKyAqICBUaGUgZm9sbG93aW5nIGRlZmluZXMgYXJlIGZvciB0aGUgZmxhZ3MgaW4gdGhlIGV4dGVuZGVkIEdQSU8gcGluIHN0YXR1cworICogIHJlZ2lzdGVyLgorICovCisjaWZuZGVmIE5PX0NTNDYxMgorI2RlZmluZSBFR1BJT1NSX0dQUzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBFR1BJT1NSX0dQUzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBFR1BJT1NSX0dQUzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBFR1BJT1NSX0dQUzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBFR1BJT1NSX0dQUzQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBFR1BJT1NSX0dQUzUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBFR1BJT1NSX0dQUzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBFR1BJT1NSX0dQUzcgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBFR1BJT1NSX0dQUzggICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2VuZGlmCisKKy8qCisgKiAgVGhlIGZvbGxvd2luZyBkZWZpbmVzIGFyZSBmb3IgdGhlIGZsYWdzIGluIHRoZSBzZXJpYWwgcG9ydCA2IGNvbmZpZ3VyYXRpb24KKyAqICByZWdpc3Rlci4KKyAqLworI2lmbmRlZiBOT19DUzQ2MTIKKyNkZWZpbmUgU0VSQzZfQVNETzJFTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNlbmRpZgorCisvKgorICogIFRoZSBmb2xsb3dpbmcgZGVmaW5lcyBhcmUgZm9yIHRoZSBmbGFncyBpbiB0aGUgc2VyaWFsIHBvcnQgNyBjb25maWd1cmF0aW9uCisgKiAgcmVnaXN0ZXIuCisgKi8KKyNpZm5kZWYgTk9fQ1M0NjEyCisjZGVmaW5lIFNFUkM3X0FTREkyRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNFUkM3X1BPU0lMQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFNFUkM3X1NJUE9MQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIFNFUkM3X1NPU0lMQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIFNFUkM3X1NJU09MQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZW5kaWYKKworLyoKKyAqICBUaGUgZm9sbG93aW5nIGRlZmluZXMgYXJlIGZvciB0aGUgZmxhZ3MgaW4gdGhlIHNlcmlhbCBwb3J0IEFDIGxpbmsKKyAqICBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLgorICovCisjaWZuZGVmIE5PX0NTNDYxMgorI2RlZmluZSBTRVJBQ0NfQ0hJUF9UWVBFX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNFUkFDQ19DSElQX1RZUEVfMV8wMyAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgU0VSQUNDX0NISVBfVFlQRV8yXzAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTRVJBQ0NfVFdPX0NPREVDUyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFNFUkFDQ19NRE0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgU0VSQUNDX0hTUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBTRVJBQ0NfT0RUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwIC8qIG9ubHkgQ1M0NjMwICovCisjZW5kaWYKKworLyoKKyAqICBUaGUgZm9sbG93aW5nIGRlZmluZXMgYXJlIGZvciB0aGUgZmxhZ3MgaW4gdGhlIEFDOTcgY29udHJvbCByZWdpc3RlciAyLgorICovCisjaWZuZGVmIE5PX0NTNDYxMgorI2RlZmluZSBBQ0NUTDJfUlNUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBQ0NUTDJfRVNZTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBQ0NUTDJfVkZSTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBQ0NUTDJfRENWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBQ0NUTDJfQ1JXICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBQ0NUTDJfQVNZTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2VuZGlmCisKKy8qCisgKiAgVGhlIGZvbGxvd2luZyBkZWZpbmVzIGFyZSBmb3IgdGhlIGZsYWdzIGluIHRoZSBBQzk3IHN0YXR1cyByZWdpc3RlciAyLgorICovCisjaWZuZGVmIE5PX0NTNDYxMgorI2RlZmluZSBBQ1NUUzJfQ1JEWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBQ1NUUzJfVlNUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2VuZGlmCisKKy8qCisgKiAgVGhlIGZvbGxvd2luZyBkZWZpbmVzIGFyZSBmb3IgdGhlIGZsYWdzIGluIHRoZSBBQzk3IG91dHB1dCBzbG90IHZhbGlkCisgKiAgcmVnaXN0ZXIgMi4KKyAqLworI2lmbmRlZiBOT19DUzQ2MTIKKyNkZWZpbmUgQUNPU1YyX1NMVjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQUNPU1YyX1NMVjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQUNPU1YyX1NMVjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQUNPU1YyX1NMVjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQUNPU1YyX1NMVjcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQUNPU1YyX1NMVjggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQUNPU1YyX1NMVjkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQUNPU1YyX1NMVjEwICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQUNPU1YyX1NMVjExICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQUNPU1YyX1NMVjEyICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNlbmRpZgorCisvKgorICogIFRoZSBmb2xsb3dpbmcgZGVmaW5lcyBhcmUgZm9yIHRoZSBmbGFncyBpbiB0aGUgQUM5NyBjb21tYW5kIGFkZHJlc3MKKyAqICByZWdpc3RlciAyLgorICovCisjaWZuZGVmIE5PX0NTNDYxMgorI2RlZmluZSBBQ0NBRDJfQ0lfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBBQ0NBRDJfQ0lfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2VuZGlmCisKKy8qCisgKiAgVGhlIGZvbGxvd2luZyBkZWZpbmVzIGFyZSBmb3IgdGhlIGZsYWdzIGluIHRoZSBBQzk3IGNvbW1hbmQgZGF0YSByZWdpc3RlcgorICogIDIuCisgKi8KKyNpZm5kZWYgTk9fQ1M0NjEyCisjZGVmaW5lIEFDQ0RBMl9DRF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRkZGCisjZGVmaW5lIEFDQ0RBMl9DRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAwICAKKyNlbmRpZgorCisvKgorICogIFRoZSBmb2xsb3dpbmcgZGVmaW5lcyBhcmUgZm9yIHRoZSBmbGFncyBpbiB0aGUgQUM5NyBpbnB1dCBzbG90IHZhbGlkCisgKiAgcmVnaXN0ZXIgMi4KKyAqLworI2lmbmRlZiBOT19DUzQ2MTIKKyNkZWZpbmUgQUNJU1YyX0lTVjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQUNJU1YyX0lTVjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQUNJU1YyX0lTVjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQUNJU1YyX0lTVjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQUNJU1YyX0lTVjcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQUNJU1YyX0lTVjggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQUNJU1YyX0lTVjkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQUNJU1YyX0lTVjEwICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQUNJU1YyX0lTVjExICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQUNJU1YyX0lTVjEyICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNlbmRpZgorCisvKgorICogIFRoZSBmb2xsb3dpbmcgZGVmaW5lcyBhcmUgZm9yIHRoZSBmbGFncyBpbiB0aGUgQUM5NyBzdGF0dXMgYWRkcmVzcworICogIHJlZ2lzdGVyIDIuCisgKi8KKyNpZm5kZWYgTk9fQ1M0NjEyCisjZGVmaW5lIEFDU0FEMl9TSV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEFDU0FEMl9TSV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZW5kaWYKKworLyoKKyAqICBUaGUgZm9sbG93aW5nIGRlZmluZXMgYXJlIGZvciB0aGUgZmxhZ3MgaW4gdGhlIEFDOTcgc3RhdHVzIGRhdGEgcmVnaXN0ZXIgMi4KKyAqLworI2lmbmRlZiBOT19DUzQ2MTIKKyNkZWZpbmUgQUNTREEyX1NEX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgQUNTREEyX1NEX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNlbmRpZgorCisvKgorICogIFRoZSBmb2xsb3dpbmcgZGVmaW5lcyBhcmUgZm9yIHRoZSBmbGFncyBpbiB0aGUgSS9PIHRyYXAgYWRkcmVzcyBhbmQgY29udHJvbAorICogIHJlZ2lzdGVycyAoYWxsIDEyKS4KKyAqLworI2lmbmRlZiBOT19DUzQ2MTIKKyNkZWZpbmUgSU9UQUNfU0FfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgSU9UQUNfTVNLX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwRjAwMDAKKyNkZWZpbmUgSU9UQUNfSU9EQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYwMDAwMDAKKyNkZWZpbmUgSU9UQUNfSU9EQ18xNl9CSVQgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgSU9UQUNfSU9EQ18xMF9CSVQgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgSU9UQUNfSU9EQ18xMl9CSVQgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgSU9UQUNfV1NQSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgSU9UQUNfUlNQSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgSU9UQUNfV1NFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgSU9UQUNfV0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgSU9UQUNfUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgSU9UQUNfU0FfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgSU9UQUNfTVNLX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZW5kaWYKKworLyoKKyAqICBUaGUgZm9sbG93aW5nIGRlZmluZXMgYXJlIGZvciB0aGUgZmxhZ3MgaW4gdGhlIEkvTyB0cmFwIGZhc3QgcmVhZCByZWdpc3RlcnMKKyAqICAoYWxsIDgpLgorICovCisjaWZuZGVmIE5PX0NTNDYxMgorI2RlZmluZSBJT1RGUl9EX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkZGRgorI2RlZmluZSBJT1RGUl9BX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBGMDAwMAorI2RlZmluZSBJT1RGUl9SX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjAwMDAwMAorI2RlZmluZSBJT1RGUl9BTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBJT1RGUl9WTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBJT1RGUl9EX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBJT1RGUl9BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgSU9URlJfUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZW5kaWYKKworLyoKKyAqICBUaGUgZm9sbG93aW5nIGRlZmluZXMgYXJlIGZvciB0aGUgZmxhZ3MgaW4gdGhlIEkvTyB0cmFwIEZJRk8gcmVnaXN0ZXIuCisgKi8KKyNpZm5kZWYgTk9fQ1M0NjEyCisjZGVmaW5lIElPVEZJRk9fQkFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzRkZGCisjZGVmaW5lIElPVEZJRk9fU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwRkYwMDAwCisjZGVmaW5lIElPVEZJRk9fT0YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIElPVEZJRk9fU1BJT0YgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIElPVEZJRk9fQkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIElPVEZJRk9fU19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2VuZGlmCisKKy8qCisgKiAgVGhlIGZvbGxvd2luZyBkZWZpbmVzIGFyZSBmb3IgdGhlIGZsYWdzIGluIHRoZSBJL08gdHJhcCByZXRyeSByZWFkIGRhdGEKKyAqICByZWdpc3Rlci4KKyAqLworI2lmbmRlZiBOT19DUzQ2MTIKKyNkZWZpbmUgSU9UUlJEX0RfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgSU9UUlJEX1JEViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgSU9UUlJEX0RfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNlbmRpZgorCisvKgorICogIFRoZSBmb2xsb3dpbmcgZGVmaW5lcyBhcmUgZm9yIHRoZSBmbGFncyBpbiB0aGUgSS9PIHRyYXAgRklGTyBwb2ludGVyCisgKiAgcmVnaXN0ZXIuCisgKi8KKyNpZm5kZWYgTk9fQ1M0NjEyCisjZGVmaW5lIElPVEZQX0NBX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzRkZGCisjZGVmaW5lIElPVEZQX1BBX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAweDNGRkYwMDAwCisjZGVmaW5lIElPVEZQX0NBX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIElPVEZQX1BBX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2VuZGlmCisKKy8qCisgKiAgVGhlIGZvbGxvd2luZyBkZWZpbmVzIGFyZSBmb3IgdGhlIGZsYWdzIGluIHRoZSBJL08gdHJhcCBjb250cm9sIHJlZ2lzdGVyLgorICovCisjaWZuZGVmIE5PX0NTNDYxMgorI2RlZmluZSBJT1RDUl9JVEQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBJT1RDUl9IUlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBJT1RDUl9TUlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBJT1RDUl9EVEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBJT1RDUl9ERkkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBJT1RDUl9ERFAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBJT1RDUl9KVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBJT1RDUl9QUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2VuZGlmCisKKy8qCisgKiAgVGhlIGZvbGxvd2luZyBkZWZpbmVzIGFyZSBmb3IgdGhlIGZsYWdzIGluIHRoZSBkaXJlY3QgUENJIGRhdGEgcmVnaXN0ZXIuCisgKi8KKyNpZm5kZWYgTk9fQ1M0NjEyCisjZGVmaW5lIERQQ0lEX0RfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIERQQ0lEX0RfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZW5kaWYKKworLyoKKyAqICBUaGUgZm9sbG93aW5nIGRlZmluZXMgYXJlIGZvciB0aGUgZmxhZ3MgaW4gdGhlIGRpcmVjdCBQQ0kgYWRkcmVzcyByZWdpc3Rlci4KKyAqLworI2lmbmRlZiBOT19DUzQ2MTIKKyNkZWZpbmUgRFBDSUFfQV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgRFBDSUFfQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNlbmRpZgorCisvKgorICogIFRoZSBmb2xsb3dpbmcgZGVmaW5lcyBhcmUgZm9yIHRoZSBmbGFncyBpbiB0aGUgZGlyZWN0IFBDSSBjb21tYW5kIHJlZ2lzdGVyLgorICovCisjaWZuZGVmIE5PX0NTNDYxMgorI2RlZmluZSBEUENJQ19DX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBEUENJQ19DX0lPUkVBRCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBEUENJQ19DX0lPV1JJVEUgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBEUENJQ19CRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGMAorI2VuZGlmCisKKy8qCisgKiAgVGhlIGZvbGxvd2luZyBkZWZpbmVzIGFyZSBmb3IgdGhlIGZsYWdzIGluIHRoZSBQQy9QQ0kgcmVxdWVzdCByZWdpc3Rlci4KKyAqLworI2lmbmRlZiBOT19DUzQ2MTIKKyNkZWZpbmUgUENQQ0lSX1JEQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgUENQQ0lSX0NfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDcwMDAKKyNkZWZpbmUgUENQQ0lSX1JFUSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgUENQQ0lSX1JEQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgUENQQ0lSX0NfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZW5kaWYKKworLyoKKyAqICBUaGUgZm9sbG93aW5nIGRlZmluZXMgYXJlIGZvciB0aGUgZmxhZ3MgaW4gdGhlIFBDL1BDSSBncmFudCByZWdpc3Rlci4KKyAqLyAKKyNpZm5kZWYgTk9fQ1M0NjEyCisjZGVmaW5lIFBDUENJR19HRENfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIFBDUENJR19WTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIFBDUENJR19HRENfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwCisjZW5kaWYKKworLyoKKyAqICBUaGUgZm9sbG93aW5nIGRlZmluZXMgYXJlIGZvciB0aGUgZmxhZ3MgaW4gdGhlIFBDL1BDSSBtYXN0ZXIgZW5hYmxlCisgKiAgcmVnaXN0ZXIuCisgKi8KKyNpZm5kZWYgTk9fQ1M0NjEyCisjZGVmaW5lIFBDUENJRU5fRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZW5kaWYKKworLyoKKyAqICBUaGUgZm9sbG93aW5nIGRlZmluZXMgYXJlIGZvciB0aGUgZmxhZ3MgaW4gdGhlIGV4dGVuZGVkIFBDSSBwb3dlcgorICogIG1hbmFnZW1lbnQgY29udHJvbCByZWdpc3Rlci4KKyAqLworI2lmbmRlZiBOT19DUzQ2MTIKKyNkZWZpbmUgRVBDSVBNQ19HV1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgRVBDSVBNQ19GU1BDICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNlbmRpZiAKKworLyoKKyAqICBUaGUgZm9sbG93aW5nIGRlZmluZXMgYXJlIGZvciB0aGUgZmxhZ3MgaW4gdGhlIFNQIGNvbnRyb2wgcmVnaXN0ZXIuCisgKi8KKyNkZWZpbmUgU1BDUl9SVU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU1BDUl9TVFBGUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgU1BDUl9SVU5GUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgU1BDUl9USUNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgU1BDUl9EUlFFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgU1BDUl9SU1RTUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgU1BDUl9PUkVOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNpZm5kZWYgTk9fQ1M0NjEyCisjZGVmaW5lIFNQQ1JfUENJSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIFNQQ1JfT0lOVEQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIFNQQ1JfQ1JFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZW5kaWYKKworLyoKKyAqICBUaGUgZm9sbG93aW5nIGRlZmluZXMgYXJlIGZvciB0aGUgZmxhZ3MgaW4gdGhlIGRlYnVnIGluZGV4IHJlZ2lzdGVyLgorICovCisjZGVmaW5lIERSRUdfUkVHSURfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIERSRUdfREVCVUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIERSRUdfUkdCS19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNzAwCisjZGVmaW5lIERSRUdfVFJBUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjaWYgIWRlZmluZWQoTk9fQ1M0NjEyKQorI2lmICFkZWZpbmVkKE5PX0NTNDYxNSkKKyNkZWZpbmUgRFJFR19UUkFQWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNlbmRpZgorI2VuZGlmCisjZGVmaW5lIERSRUdfUkVHSURfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIERSRUdfUkdCS19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIERSRUdfUkdCS19SRUdJRF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDAwNzdGCisjZGVmaW5lIERSRUdfUkVHSURfUjAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIERSRUdfUkVHSURfUjEgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDExCisjZGVmaW5lIERSRUdfUkVHSURfUjIgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEyCisjZGVmaW5lIERSRUdfUkVHSURfUjMgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEzCisjZGVmaW5lIERSRUdfUkVHSURfUjQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE0CisjZGVmaW5lIERSRUdfUkVHSURfUjUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE1CisjZGVmaW5lIERSRUdfUkVHSURfUjYgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE2CisjZGVmaW5lIERSRUdfUkVHSURfUjcgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE3CisjZGVmaW5lIERSRUdfUkVHSURfUjggICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4CisjZGVmaW5lIERSRUdfUkVHSURfUjkgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE5CisjZGVmaW5lIERSRUdfUkVHSURfUkEgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFBCisjZGVmaW5lIERSRUdfUkVHSURfUkIgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFCCisjZGVmaW5lIERSRUdfUkVHSURfUkMgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFDCisjZGVmaW5lIERSRUdfUkVHSURfUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFECisjZGVmaW5lIERSRUdfUkVHSURfUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFFCisjZGVmaW5lIERSRUdfUkVHSURfUkYgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFGCisjZGVmaW5lIERSRUdfUkVHSURfUkFfQlVTX0xPVyAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIERSRUdfUkVHSURfUkFfQlVTX0hJR0ggICAgICAgICAgICAgICAgICAweDAwMDAwMDM4CisjZGVmaW5lIERSRUdfUkVHSURfWUJVU19MT1cgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDUwCisjZGVmaW5lIERSRUdfUkVHSURfWUJVU19ISUdIICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDU4CisjZGVmaW5lIERSRUdfUkVHSURfVFJBUF8wICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIERSRUdfUkVHSURfVFJBUF8xICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAxCisjZGVmaW5lIERSRUdfUkVHSURfVFJBUF8yICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAyCisjZGVmaW5lIERSRUdfUkVHSURfVFJBUF8zICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAzCisjZGVmaW5lIERSRUdfUkVHSURfVFJBUF80ICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTA0CisjZGVmaW5lIERSRUdfUkVHSURfVFJBUF81ICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTA1CisjZGVmaW5lIERSRUdfUkVHSURfVFJBUF82ICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTA2CisjZGVmaW5lIERSRUdfUkVHSURfVFJBUF83ICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTA3CisjZGVmaW5lIERSRUdfUkVHSURfSU5ESVJFQ1RfQUREUkVTUyAgICAgICAgICAgICAweDAwMDAwMTBFCisjZGVmaW5lIERSRUdfUkVHSURfVE9QX09GX1NUQUNLICAgICAgICAgICAgICAgICAweDAwMDAwMTBGCisjaWYgIWRlZmluZWQoTk9fQ1M0NjEyKQorI2lmICFkZWZpbmVkKE5PX0NTNDYxNSkKKyNkZWZpbmUgRFJFR19SRUdJRF9UUkFQXzggICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMTAKKyNkZWZpbmUgRFJFR19SRUdJRF9UUkFQXzkgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMTEKKyNkZWZpbmUgRFJFR19SRUdJRF9UUkFQXzEwICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMTIKKyNkZWZpbmUgRFJFR19SRUdJRF9UUkFQXzExICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMTMKKyNkZWZpbmUgRFJFR19SRUdJRF9UUkFQXzEyICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMTQKKyNkZWZpbmUgRFJFR19SRUdJRF9UUkFQXzEzICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMTUKKyNkZWZpbmUgRFJFR19SRUdJRF9UUkFQXzE0ICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMTYKKyNkZWZpbmUgRFJFR19SRUdJRF9UUkFQXzE1ICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMTcKKyNkZWZpbmUgRFJFR19SRUdJRF9UUkFQXzE2ICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMTgKKyNkZWZpbmUgRFJFR19SRUdJRF9UUkFQXzE3ICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMTkKKyNkZWZpbmUgRFJFR19SRUdJRF9UUkFQXzE4ICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMUEKKyNkZWZpbmUgRFJFR19SRUdJRF9UUkFQXzE5ICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMUIKKyNkZWZpbmUgRFJFR19SRUdJRF9UUkFQXzIwICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMUMKKyNkZWZpbmUgRFJFR19SRUdJRF9UUkFQXzIxICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMUQKKyNkZWZpbmUgRFJFR19SRUdJRF9UUkFQXzIyICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMUUKKyNkZWZpbmUgRFJFR19SRUdJRF9UUkFQXzIzICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMUYKKyNlbmRpZgorI2VuZGlmCisjZGVmaW5lIERSRUdfUkVHSURfUlNBMF9MT1cgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIERSRUdfUkVHSURfUlNBMF9ISUdIICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAxCisjZGVmaW5lIERSRUdfUkVHSURfUlNBMV9MT1cgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAyCisjZGVmaW5lIERSRUdfUkVHSURfUlNBMV9ISUdIICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAzCisjZGVmaW5lIERSRUdfUkVHSURfUlNBMiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjA0CisjZGVmaW5lIERSRUdfUkVHSURfUlNBMyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjA1CisjZGVmaW5lIERSRUdfUkVHSURfUlNJMF9MT1cgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjA2CisjZGVmaW5lIERSRUdfUkVHSURfUlNJMF9ISUdIICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjA3CisjZGVmaW5lIERSRUdfUkVHSURfUlNJMSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjA4CisjZGVmaW5lIERSRUdfUkVHSURfUlNJMiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjA5CisjZGVmaW5lIERSRUdfUkVHSURfU0FHVVNUQVRVUyAgICAgICAgICAgICAgICAgICAweDAwMDAwMjBBCisjZGVmaW5lIERSRUdfUkVHSURfUlNDT05GSUcwMV9MT1cgICAgICAgICAgICAgICAweDAwMDAwMjBCCisjZGVmaW5lIERSRUdfUkVHSURfUlNDT05GSUcwMV9ISUdIICAgICAgICAgICAgICAweDAwMDAwMjBDCisjZGVmaW5lIERSRUdfUkVHSURfUlNDT05GSUcyM19MT1cgICAgICAgICAgICAgICAweDAwMDAwMjBECisjZGVmaW5lIERSRUdfUkVHSURfUlNDT05GSUcyM19ISUdIICAgICAgICAgICAgICAweDAwMDAwMjBFCisjZGVmaW5lIERSRUdfUkVHSURfUlNETUEwMUUgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjBGCisjZGVmaW5lIERSRUdfUkVHSURfUlNETUEyM0UgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjEwCisjZGVmaW5lIERSRUdfUkVHSURfUlNEMF9MT1cgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjExCisjZGVmaW5lIERSRUdfUkVHSURfUlNEMF9ISUdIICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjEyCisjZGVmaW5lIERSRUdfUkVHSURfUlNEMV9MT1cgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjEzCisjZGVmaW5lIERSRUdfUkVHSURfUlNEMV9ISUdIICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjE0CisjZGVmaW5lIERSRUdfUkVHSURfUlNEMl9MT1cgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjE1CisjZGVmaW5lIERSRUdfUkVHSURfUlNEMl9ISUdIICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjE2CisjZGVmaW5lIERSRUdfUkVHSURfUlNEM19MT1cgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjE3CisjZGVmaW5lIERSRUdfUkVHSURfUlNEM19ISUdIICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjE4CisjZGVmaW5lIERSRUdfUkVHSURfU1JBUl9ISUdIICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjFBCisjZGVmaW5lIERSRUdfUkVHSURfU1JBUl9MT1cgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjFCCisjZGVmaW5lIERSRUdfUkVHSURfRE1BX1NUQVRFICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjFDCisjZGVmaW5lIERSRUdfUkVHSURfQ1VSUkVOVF9ETUFfU1RSRUFNICAgICAgICAgICAweDAwMDAwMjFECisjZGVmaW5lIERSRUdfUkVHSURfTkVYVF9ETUFfU1RSRUFNICAgICAgICAgICAgICAweDAwMDAwMjFFCisjZGVmaW5lIERSRUdfUkVHSURfQ1BVX1NUQVRVUyAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIERSRUdfUkVHSURfTUFDX01PREUgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAxCisjZGVmaW5lIERSRUdfUkVHSURfU1RBQ0tfQU5EX1JFUEVBVCAgICAgICAgICAgICAweDAwMDAwMzAyCisjZGVmaW5lIERSRUdfUkVHSURfSU5ERVgwICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzA0CisjZGVmaW5lIERSRUdfUkVHSURfSU5ERVgxICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzA1CisjZGVmaW5lIERSRUdfUkVHSURfRE1BX1NUQVRFXzBfMyAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIERSRUdfUkVHSURfRE1BX1NUQVRFXzRfNyAgICAgICAgICAgICAgICAweDAwMDAwNDA0CisjZGVmaW5lIERSRUdfUkVHSURfRE1BX1NUQVRFXzhfMTEgICAgICAgICAgICAgICAweDAwMDAwNDA4CisjZGVmaW5lIERSRUdfUkVHSURfRE1BX1NUQVRFXzEyXzE1ICAgICAgICAgICAgICAweDAwMDAwNDBDCisjZGVmaW5lIERSRUdfUkVHSURfRE1BX1NUQVRFXzE2XzE5ICAgICAgICAgICAgICAweDAwMDAwNDEwCisjZGVmaW5lIERSRUdfUkVHSURfRE1BX1NUQVRFXzIwXzIzICAgICAgICAgICAgICAweDAwMDAwNDE0CisjZGVmaW5lIERSRUdfUkVHSURfRE1BX1NUQVRFXzI0XzI3ICAgICAgICAgICAgICAweDAwMDAwNDE4CisjZGVmaW5lIERSRUdfUkVHSURfRE1BX1NUQVRFXzI4XzMxICAgICAgICAgICAgICAweDAwMDAwNDFDCisjZGVmaW5lIERSRUdfUkVHSURfRE1BX1NUQVRFXzMyXzM1ICAgICAgICAgICAgICAweDAwMDAwNDIwCisjZGVmaW5lIERSRUdfUkVHSURfRE1BX1NUQVRFXzM2XzM5ICAgICAgICAgICAgICAweDAwMDAwNDI0CisjZGVmaW5lIERSRUdfUkVHSURfRE1BX1NUQVRFXzQwXzQzICAgICAgICAgICAgICAweDAwMDAwNDI4CisjZGVmaW5lIERSRUdfUkVHSURfRE1BX1NUQVRFXzQ0XzQ3ICAgICAgICAgICAgICAweDAwMDAwNDJDCisjZGVmaW5lIERSRUdfUkVHSURfRE1BX1NUQVRFXzQ4XzUxICAgICAgICAgICAgICAweDAwMDAwNDMwCisjZGVmaW5lIERSRUdfUkVHSURfRE1BX1NUQVRFXzUyXzU1ICAgICAgICAgICAgICAweDAwMDAwNDM0CisjZGVmaW5lIERSRUdfUkVHSURfRE1BX1NUQVRFXzU2XzU5ICAgICAgICAgICAgICAweDAwMDAwNDM4CisjZGVmaW5lIERSRUdfUkVHSURfRE1BX1NUQVRFXzYwXzYzICAgICAgICAgICAgICAweDAwMDAwNDNDCisjZGVmaW5lIERSRUdfUkVHSURfRE1BX1NUQVRFXzY0XzY3ICAgICAgICAgICAgICAweDAwMDAwNDQwCisjZGVmaW5lIERSRUdfUkVHSURfRE1BX1NUQVRFXzY4XzcxICAgICAgICAgICAgICAweDAwMDAwNDQ0CisjZGVmaW5lIERSRUdfUkVHSURfRE1BX1NUQVRFXzcyXzc1ICAgICAgICAgICAgICAweDAwMDAwNDQ4CisjZGVmaW5lIERSRUdfUkVHSURfRE1BX1NUQVRFXzc2Xzc5ICAgICAgICAgICAgICAweDAwMDAwNDRDCisjZGVmaW5lIERSRUdfUkVHSURfRE1BX1NUQVRFXzgwXzgzICAgICAgICAgICAgICAweDAwMDAwNDUwCisjZGVmaW5lIERSRUdfUkVHSURfRE1BX1NUQVRFXzg0Xzg3ICAgICAgICAgICAgICAweDAwMDAwNDU0CisjZGVmaW5lIERSRUdfUkVHSURfRE1BX1NUQVRFXzg4XzkxICAgICAgICAgICAgICAweDAwMDAwNDU4CisjZGVmaW5lIERSRUdfUkVHSURfRE1BX1NUQVRFXzkyXzk1ICAgICAgICAgICAgICAweDAwMDAwNDVDCisjZGVmaW5lIERSRUdfUkVHSURfVFJBUF9TRUxFQ1QgICAgICAgICAgICAgICAgICAweDAwMDAwNTAwCisjZGVmaW5lIERSRUdfUkVHSURfVFJBUF9XUklURV8wICAgICAgICAgICAgICAgICAweDAwMDAwNTAwCisjZGVmaW5lIERSRUdfUkVHSURfVFJBUF9XUklURV8xICAgICAgICAgICAgICAgICAweDAwMDAwNTAxCisjZGVmaW5lIERSRUdfUkVHSURfVFJBUF9XUklURV8yICAgICAgICAgICAgICAgICAweDAwMDAwNTAyCisjZGVmaW5lIERSRUdfUkVHSURfVFJBUF9XUklURV8zICAgICAgICAgICAgICAgICAweDAwMDAwNTAzCisjZGVmaW5lIERSRUdfUkVHSURfVFJBUF9XUklURV80ICAgICAgICAgICAgICAgICAweDAwMDAwNTA0CisjZGVmaW5lIERSRUdfUkVHSURfVFJBUF9XUklURV81ICAgICAgICAgICAgICAgICAweDAwMDAwNTA1CisjZGVmaW5lIERSRUdfUkVHSURfVFJBUF9XUklURV82ICAgICAgICAgICAgICAgICAweDAwMDAwNTA2CisjZGVmaW5lIERSRUdfUkVHSURfVFJBUF9XUklURV83ICAgICAgICAgICAgICAgICAweDAwMDAwNTA3CisjaWYgIWRlZmluZWQoTk9fQ1M0NjEyKQorI2lmICFkZWZpbmVkKE5PX0NTNDYxNSkKKyNkZWZpbmUgRFJFR19SRUdJRF9UUkFQX1dSSVRFXzggICAgICAgICAgICAgICAgIDB4MDAwMDA1MTAKKyNkZWZpbmUgRFJFR19SRUdJRF9UUkFQX1dSSVRFXzkgICAgICAgICAgICAgICAgIDB4MDAwMDA1MTEKKyNkZWZpbmUgRFJFR19SRUdJRF9UUkFQX1dSSVRFXzEwICAgICAgICAgICAgICAgIDB4MDAwMDA1MTIKKyNkZWZpbmUgRFJFR19SRUdJRF9UUkFQX1dSSVRFXzExICAgICAgICAgICAgICAgIDB4MDAwMDA1MTMKKyNkZWZpbmUgRFJFR19SRUdJRF9UUkFQX1dSSVRFXzEyICAgICAgICAgICAgICAgIDB4MDAwMDA1MTQKKyNkZWZpbmUgRFJFR19SRUdJRF9UUkFQX1dSSVRFXzEzICAgICAgICAgICAgICAgIDB4MDAwMDA1MTUKKyNkZWZpbmUgRFJFR19SRUdJRF9UUkFQX1dSSVRFXzE0ICAgICAgICAgICAgICAgIDB4MDAwMDA1MTYKKyNkZWZpbmUgRFJFR19SRUdJRF9UUkFQX1dSSVRFXzE1ICAgICAgICAgICAgICAgIDB4MDAwMDA1MTcKKyNkZWZpbmUgRFJFR19SRUdJRF9UUkFQX1dSSVRFXzE2ICAgICAgICAgICAgICAgIDB4MDAwMDA1MTgKKyNkZWZpbmUgRFJFR19SRUdJRF9UUkFQX1dSSVRFXzE3ICAgICAgICAgICAgICAgIDB4MDAwMDA1MTkKKyNkZWZpbmUgRFJFR19SRUdJRF9UUkFQX1dSSVRFXzE4ICAgICAgICAgICAgICAgIDB4MDAwMDA1MUEKKyNkZWZpbmUgRFJFR19SRUdJRF9UUkFQX1dSSVRFXzE5ICAgICAgICAgICAgICAgIDB4MDAwMDA1MUIKKyNkZWZpbmUgRFJFR19SRUdJRF9UUkFQX1dSSVRFXzIwICAgICAgICAgICAgICAgIDB4MDAwMDA1MUMKKyNkZWZpbmUgRFJFR19SRUdJRF9UUkFQX1dSSVRFXzIxICAgICAgICAgICAgICAgIDB4MDAwMDA1MUQKKyNkZWZpbmUgRFJFR19SRUdJRF9UUkFQX1dSSVRFXzIyICAgICAgICAgICAgICAgIDB4MDAwMDA1MUUKKyNkZWZpbmUgRFJFR19SRUdJRF9UUkFQX1dSSVRFXzIzICAgICAgICAgICAgICAgIDB4MDAwMDA1MUYKKyNlbmRpZgorI2VuZGlmCisjZGVmaW5lIERSRUdfUkVHSURfTUFDMF9BQ0MwX0xPVyAgICAgICAgICAgICAgICAweDAwMDAwNjAwCisjZGVmaW5lIERSRUdfUkVHSURfTUFDMF9BQ0MxX0xPVyAgICAgICAgICAgICAgICAweDAwMDAwNjAxCisjZGVmaW5lIERSRUdfUkVHSURfTUFDMF9BQ0MyX0xPVyAgICAgICAgICAgICAgICAweDAwMDAwNjAyCisjZGVmaW5lIERSRUdfUkVHSURfTUFDMF9BQ0MzX0xPVyAgICAgICAgICAgICAgICAweDAwMDAwNjAzCisjZGVmaW5lIERSRUdfUkVHSURfTUFDMV9BQ0MwX0xPVyAgICAgICAgICAgICAgICAweDAwMDAwNjA0CisjZGVmaW5lIERSRUdfUkVHSURfTUFDMV9BQ0MxX0xPVyAgICAgICAgICAgICAgICAweDAwMDAwNjA1CisjZGVmaW5lIERSRUdfUkVHSURfTUFDMV9BQ0MyX0xPVyAgICAgICAgICAgICAgICAweDAwMDAwNjA2CisjZGVmaW5lIERSRUdfUkVHSURfTUFDMV9BQ0MzX0xPVyAgICAgICAgICAgICAgICAweDAwMDAwNjA3CisjZGVmaW5lIERSRUdfUkVHSURfTUFDMF9BQ0MwX01JRCAgICAgICAgICAgICAgICAweDAwMDAwNjA4CisjZGVmaW5lIERSRUdfUkVHSURfTUFDMF9BQ0MxX01JRCAgICAgICAgICAgICAgICAweDAwMDAwNjA5CisjZGVmaW5lIERSRUdfUkVHSURfTUFDMF9BQ0MyX01JRCAgICAgICAgICAgICAgICAweDAwMDAwNjBBCisjZGVmaW5lIERSRUdfUkVHSURfTUFDMF9BQ0MzX01JRCAgICAgICAgICAgICAgICAweDAwMDAwNjBCCisjZGVmaW5lIERSRUdfUkVHSURfTUFDMV9BQ0MwX01JRCAgICAgICAgICAgICAgICAweDAwMDAwNjBDCisjZGVmaW5lIERSRUdfUkVHSURfTUFDMV9BQ0MxX01JRCAgICAgICAgICAgICAgICAweDAwMDAwNjBECisjZGVmaW5lIERSRUdfUkVHSURfTUFDMV9BQ0MyX01JRCAgICAgICAgICAgICAgICAweDAwMDAwNjBFCisjZGVmaW5lIERSRUdfUkVHSURfTUFDMV9BQ0MzX01JRCAgICAgICAgICAgICAgICAweDAwMDAwNjBGCisjZGVmaW5lIERSRUdfUkVHSURfTUFDMF9BQ0MwX0hJR0ggICAgICAgICAgICAgICAweDAwMDAwNjEwCisjZGVmaW5lIERSRUdfUkVHSURfTUFDMF9BQ0MxX0hJR0ggICAgICAgICAgICAgICAweDAwMDAwNjExCisjZGVmaW5lIERSRUdfUkVHSURfTUFDMF9BQ0MyX0hJR0ggICAgICAgICAgICAgICAweDAwMDAwNjEyCisjZGVmaW5lIERSRUdfUkVHSURfTUFDMF9BQ0MzX0hJR0ggICAgICAgICAgICAgICAweDAwMDAwNjEzCisjZGVmaW5lIERSRUdfUkVHSURfTUFDMV9BQ0MwX0hJR0ggICAgICAgICAgICAgICAweDAwMDAwNjE0CisjZGVmaW5lIERSRUdfUkVHSURfTUFDMV9BQ0MxX0hJR0ggICAgICAgICAgICAgICAweDAwMDAwNjE1CisjZGVmaW5lIERSRUdfUkVHSURfTUFDMV9BQ0MyX0hJR0ggICAgICAgICAgICAgICAweDAwMDAwNjE2CisjZGVmaW5lIERSRUdfUkVHSURfTUFDMV9BQ0MzX0hJR0ggICAgICAgICAgICAgICAweDAwMDAwNjE3CisjZGVmaW5lIERSRUdfUkVHSURfUlNIT1VUX0xPVyAgICAgICAgICAgICAgICAgICAweDAwMDAwNjIwCisjZGVmaW5lIERSRUdfUkVHSURfUlNIT1VUX01JRCAgICAgICAgICAgICAgICAgICAweDAwMDAwNjI4CisjZGVmaW5lIERSRUdfUkVHSURfUlNIT1VUX0hJR0ggICAgICAgICAgICAgICAgICAweDAwMDAwNjMwCisKKy8qCisgKiAgVGhlIGZvbGxvd2luZyBkZWZpbmVzIGFyZSBmb3IgdGhlIGZsYWdzIGluIHRoZSBETUEgc3RyZWFtIHJlcXVlc3RvciB3cml0ZQorICovCisjZGVmaW5lIERTUldQX0RTUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIERTUldQX0RTUl9CR19SUSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIERTUldQX0RTUl9QUklPUklUWV9NQVNLICAgICAgICAgICAgICAgICAweDAwMDAwMDA2CisjZGVmaW5lIERTUldQX0RTUl9QUklPUklUWV8wICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIERTUldQX0RTUl9QUklPUklUWV8xICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIERTUldQX0RTUl9QUklPUklUWV8yICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIERTUldQX0RTUl9QUklPUklUWV8zICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA2CisjZGVmaW5lIERTUldQX0RTUl9SUV9QRU5ESU5HICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisKKy8qCisgKiAgVGhlIGZvbGxvd2luZyBkZWZpbmVzIGFyZSBmb3IgdGhlIGZsYWdzIGluIHRoZSB0cmFwIHdyaXRlIHBvcnQgcmVnaXN0ZXIuCisgKi8KKyNkZWZpbmUgVFdQUl9UV19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgVFdQUl9UV19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLyoKKyAqICBUaGUgZm9sbG93aW5nIGRlZmluZXMgYXJlIGZvciB0aGUgZmxhZ3MgaW4gdGhlIHN0YWNrIHBvaW50ZXIgd3JpdGUKKyAqICByZWdpc3Rlci4KKyAqLworI2RlZmluZSBTUFdSX1NUS1BfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBTUFdSX1NUS1BfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvKgorICogIFRoZSBmb2xsb3dpbmcgZGVmaW5lcyBhcmUgZm9yIHRoZSBmbGFncyBpbiB0aGUgU1AgaW50ZXJydXB0IHJlZ2lzdGVyLgorICovCisjZGVmaW5lIFNQSVJfRlJJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNQSVJfRE9JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFNQSVJfR1BJMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIFNQSVJfR1BJMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIFNQSVJfSVAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIFNQSVJfSVAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIFNQSVJfSVAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIFNQSVJfSVAzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisKKy8qCisgKiAgVGhlIGZvbGxvd2luZyBkZWZpbmVzIGFyZSBmb3IgdGhlIGZsYWdzIGluIHRoZSBmdW5jdGlvbmFsIGdyb3VwIDEgcmVnaXN0ZXIuCisgKi8KKyNkZWZpbmUgRkdSMV9GMVNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgRkdSMV9GMVNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLyoKKyAqICBUaGUgZm9sbG93aW5nIGRlZmluZXMgYXJlIGZvciB0aGUgZmxhZ3MgaW4gdGhlIFNQIGNsb2NrIHN0YXR1cyByZWdpc3Rlci4KKyAqLworI2RlZmluZSBTUENTX0ZSSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTUENTX0RPSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBTUENTX0dQSTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBTUENTX0dQSTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBTUENTX0lQMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBTUENTX0lQMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBTUENTX0lQMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBTUENTX0lQMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBTUENTX1NQUlVOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBTUENTX1NMRUVQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBTUENTX0ZHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBTUENTX09SVU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBTUENTX0lSUSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBTUENTX0ZHTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRTAwMAorI2RlZmluZSBTUENTX0ZHTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKworLyoKKyAqICBUaGUgZm9sbG93aW5nIGRlZmluZXMgYXJlIGZvciB0aGUgZmxhZ3MgaW4gdGhlIFNQIERNQSByZXF1ZXN0b3Igc3RhdHVzCisgKiAgcmVnaXN0ZXIuCisgKi8KKyNkZWZpbmUgU0RTUl9EQ1NfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgU0RTUl9EQ1NfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU0RTUl9EQ1NfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKworLyoKKyAqICBUaGUgZm9sbG93aW5nIGRlZmluZXMgYXJlIGZvciB0aGUgZmxhZ3MgaW4gdGhlIGZyYW1lIHRpbWVyIHJlZ2lzdGVyLgorICovCisjZGVmaW5lIEZSTVRfRlRWX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRkZGCisjZGVmaW5lIEZSTVRfRlRWX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8qCisgKiAgVGhlIGZvbGxvd2luZyBkZWZpbmVzIGFyZSBmb3IgdGhlIGZsYWdzIGluIHRoZSBmcmFtZSB0aW1lciBjdXJyZW50IGNvdW50CisgKiAgcmVnaXN0ZXIuCisgKi8KKyNkZWZpbmUgRlJDQ19GQ0NfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgRlJDQ19GQ0NfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLyoKKyAqICBUaGUgZm9sbG93aW5nIGRlZmluZXMgYXJlIGZvciB0aGUgZmxhZ3MgaW4gdGhlIGZyYW1lIHRpbWVyIHNhdmUgY291bnQKKyAqICByZWdpc3Rlci4KKyAqLworI2RlZmluZSBGUlNDX0ZDU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkZGRgorI2RlZmluZSBGUlNDX0ZDU19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvKgorICogIFRoZSBmb2xsb3dpbmcgZGVmaW5lIHRoZSB2YXJpb3VzIGZsYWdzIHN0b3JlZCBpbiB0aGUgc2NhdHRlci9nYXRoZXIKKyAqICBkZXNjcmlwdG9ycy4KKyAqLworI2RlZmluZSBETUFfU0dfTkVYVF9FTlRSWV9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDAwMEZGOAorI2RlZmluZSBETUFfU0dfU0FNUExFX0VORF9NQVNLICAgICAgICAgICAgICAgICAgMHgwRkZGMDAwMAorI2RlZmluZSBETUFfU0dfU0FNUExFX0VORF9GTEFHICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBETUFfU0dfTE9PUF9FTkRfRkxBRyAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBETUFfU0dfU0lHTkFMX0VORF9GTEFHICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBETUFfU0dfU0lHTkFMX1BBR0VfRkxBRyAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBETUFfU0dfTkVYVF9FTlRSWV9TSElGVCAgICAgICAgICAgICAgICAgMworI2RlZmluZSBETUFfU0dfU0FNUExFX0VORF9TSElGVCAgICAgICAgICAgICAgICAgMTYKKworLyoKKyAqICBUaGUgZm9sbG93aW5nIGRlZmluZSB0aGUgb2Zmc2V0cyBvZiB0aGUgZmllbGRzIHdpdGhpbiB0aGUgb24tY2hpcCBnZW5lcmljCisgKiAgRE1BIHJlcXVlc3Rvci4KKyAqLworI2RlZmluZSBETUFfUlFfQ09OVFJPTDEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBETUFfUlFfQ09OVFJPTDIgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBETUFfUlFfU09VUkNFX0FERFIgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBETUFfUlFfREVTVElOQVRJT05fQUREUiAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworI2RlZmluZSBETUFfUlFfTkVYVF9QQUdFX0FERFIgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBETUFfUlFfTkVYVF9QQUdFX1NHREVTQyAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNAorI2RlZmluZSBETUFfUlFfTE9PUF9TVEFSVF9BRERSICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOAorI2RlZmluZSBETUFfUlFfUE9TVF9MT09QX0FERFIgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQworI2RlZmluZSBETUFfUlFfUEFHRV9NQVBfQUREUiAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorCisvKgorICogIFRoZSBmb2xsb3dpbmcgZGVmaW5lcyBhcmUgZm9yIHRoZSBmbGFncyBpbiB0aGUgZmlyc3QgY29udHJvbCB3b3JkIG9mIHRoZQorICogIG9uLWNoaXAgZ2VuZXJpYyBETUEgcmVxdWVzdG9yLgorICovCisjZGVmaW5lIERNQV9SUV9DMV9DT1VOVF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDAwM0ZGCisjZGVmaW5lIERNQV9SUV9DMV9ERVNUSU5BVElPTl9TQ0FUVEVSICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIERNQV9SUV9DMV9TT1VSQ0VfR0FUSEVSICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIERNQV9SUV9DMV9ET05FX0ZMQUcgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIERNQV9SUV9DMV9PUFRJTUlaRV9TVEFURSAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIERNQV9SUV9DMV9TQU1QTEVfRU5EX1NUQVRFX01BU0sgICAgICAgICAweDAwMDMwMDAwCisjZGVmaW5lIERNQV9SUV9DMV9GVUxMX1BBR0UgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIERNQV9SUV9DMV9CRUZPUkVfU0FNUExFX0VORCAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIERNQV9SUV9DMV9QQUdFX01BUF9FUlJPUiAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIERNQV9SUV9DMV9BVF9TQU1QTEVfRU5EICAgICAgICAgICAgICAgICAweDAwMDMwMDAwCisjZGVmaW5lIERNQV9SUV9DMV9MT09QX0VORF9TVEFURV9NQVNLICAgICAgICAgICAweDAwMEMwMDAwCisjZGVmaW5lIERNQV9SUV9DMV9OT1RfTE9PUF9FTkQgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIERNQV9SUV9DMV9CRUZPUkVfTE9PUF9FTkQgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIERNQV9SUV9DMV8yUEFHRV9MT09QX0JFR0lOICAgICAgICAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIERNQV9SUV9DMV9MT09QX0JFR0lOICAgICAgICAgICAgICAgICAgICAweDAwMEMwMDAwCisjZGVmaW5lIERNQV9SUV9DMV9QQUdFX01BUF9NQVNLICAgICAgICAgICAgICAgICAweDAwMzAwMDAwCisjZGVmaW5lIERNQV9SUV9DMV9QTV9OT05FX1BFTkRJTkcgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIERNQV9SUV9DMV9QTV9ORVhUX1BFTkRJTkcgICAgICAgICAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIERNQV9SUV9DMV9QTV9SRVNFUlZFRCAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIERNQV9SUV9DMV9QTV9MT09QX05FWFRfUEVORElORyAgICAgICAgICAweDAwMzAwMDAwCisjZGVmaW5lIERNQV9SUV9DMV9XUklURUJBQ0tfREVTVF9GTEFHICAgICAgICAgICAweDAwNDAwMDAwCisjZGVmaW5lIERNQV9SUV9DMV9XUklURUJBQ0tfU1JDX0ZMQUcgICAgICAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIERNQV9SUV9DMV9ERVNUX1NJWkVfTUFTSyAgICAgICAgICAgICAgICAweDA3MDAwMDAwCisjZGVmaW5lIERNQV9SUV9DMV9ERVNUX0xJTkVBUiAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIERNQV9SUV9DMV9ERVNUX01PRDE2ICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIERNQV9SUV9DMV9ERVNUX01PRDMyICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIERNQV9SUV9DMV9ERVNUX01PRDY0ICAgICAgICAgICAgICAgICAgICAweDAzMDAwMDAwCisjZGVmaW5lIERNQV9SUV9DMV9ERVNUX01PRDEyOCAgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwCisjZGVmaW5lIERNQV9SUV9DMV9ERVNUX01PRDI1NiAgICAgICAgICAgICAgICAgICAweDA1MDAwMDAwCisjZGVmaW5lIERNQV9SUV9DMV9ERVNUX01PRDUxMiAgICAgICAgICAgICAgICAgICAweDA2MDAwMDAwCisjZGVmaW5lIERNQV9SUV9DMV9ERVNUX01PRDEwMjQgICAgICAgICAgICAgICAgICAweDA3MDAwMDAwCisjZGVmaW5lIERNQV9SUV9DMV9ERVNUX09OX0hPU1QgICAgICAgICAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIERNQV9SUV9DMV9TT1VSQ0VfU0laRV9NQVNLICAgICAgICAgICAgICAweDcwMDAwMDAwCisjZGVmaW5lIERNQV9SUV9DMV9TT1VSQ0VfTElORUFSICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIERNQV9SUV9DMV9TT1VSQ0VfTU9EMTYgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIERNQV9SUV9DMV9TT1VSQ0VfTU9EMzIgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIERNQV9SUV9DMV9TT1VSQ0VfTU9ENjQgICAgICAgICAgICAgICAgICAweDMwMDAwMDAwCisjZGVmaW5lIERNQV9SUV9DMV9TT1VSQ0VfTU9EMTI4ICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIERNQV9SUV9DMV9TT1VSQ0VfTU9EMjU2ICAgICAgICAgICAgICAgICAweDUwMDAwMDAwCisjZGVmaW5lIERNQV9SUV9DMV9TT1VSQ0VfTU9ENTEyICAgICAgICAgICAgICAgICAweDYwMDAwMDAwCisjZGVmaW5lIERNQV9SUV9DMV9TT1VSQ0VfTU9EMTAyNCAgICAgICAgICAgICAgICAweDcwMDAwMDAwCisjZGVmaW5lIERNQV9SUV9DMV9TT1VSQ0VfT05fSE9TVCAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIERNQV9SUV9DMV9DT1VOVF9TSElGVCAgICAgICAgICAgICAgICAgICAwCisKKy8qCisgKiAgVGhlIGZvbGxvd2luZyBkZWZpbmVzIGFyZSBmb3IgdGhlIGZsYWdzIGluIHRoZSBzZWNvbmQgY29udHJvbCB3b3JkIG9mIHRoZQorICogIG9uLWNoaXAgZ2VuZXJpYyBETUEgcmVxdWVzdG9yLgorICovCisjZGVmaW5lIERNQV9SUV9DMl9WSVJUVUFMX0NIQU5ORUxfTUFTSyAgICAgICAgICAweDAwMDAwMDNGCisjZGVmaW5lIERNQV9SUV9DMl9WSVJUVUFMX1NJR05BTF9NQVNLICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIERNQV9SUV9DMl9OT19WSVJUVUFMX1NJR05BTCAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIERNQV9SUV9DMl9TSUdOQUxfRVZFUllfRE1BICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIERNQV9SUV9DMl9TSUdOQUxfU09VUkNFX1BJTkdQT05HICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIERNQV9SUV9DMl9TSUdOQUxfREVTVF9QSU5HUE9ORyAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIERNQV9SUV9DMl9BVURJT19DT05WRVJUX01BU0sgICAgICAgICAgICAweDAwMDBGMDAwCisjZGVmaW5lIERNQV9SUV9DMl9BQ19OT05FICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIERNQV9SUV9DMl9BQ184X1RPXzE2X0JJVCAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIERNQV9SUV9DMl9BQ19NT05PX1RPX1NURVJFTyAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIERNQV9SUV9DMl9BQ19FTkRJQU5fQ09OVkVSVCAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIERNQV9SUV9DMl9BQ19TSUdORURfQ09OVkVSVCAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIERNQV9SUV9DMl9MT09QX0VORF9NQVNLICAgICAgICAgICAgICAgICAweDBGRkYwMDAwCisjZGVmaW5lIERNQV9SUV9DMl9MT09QX01BU0sgICAgICAgICAgICAgICAgICAgICAweDMwMDAwMDAwCisjZGVmaW5lIERNQV9SUV9DMl9OT19MT09QICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIERNQV9SUV9DMl9PTkVfUEFHRV9MT09QICAgICAgICAgICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIERNQV9SUV9DMl9UV09fUEFHRV9MT09QICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIERNQV9SUV9DMl9NVUxUSV9QQUdFX0xPT1AgICAgICAgICAgICAgICAweDMwMDAwMDAwCisjZGVmaW5lIERNQV9SUV9DMl9TSUdOQUxfTE9PUF9CQUNLICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIERNQV9SUV9DMl9TSUdOQUxfUE9TVF9CRUdJTl9QQUdFICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIERNQV9SUV9DMl9WSVJUVUFMX0NIQU5ORUxfU0hJRlQgICAgICAgICAwCisjZGVmaW5lIERNQV9SUV9DMl9MT09QX0VORF9TSElGVCAgICAgICAgICAgICAgICAxNgorCisvKgorICogIFRoZSBmb2xsb3dpbmcgZGVmaW5lcyBhcmUgZm9yIHRoZSBmbGFncyBpbiB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiB3b3JkcworICogIG9mIHRoZSBvbi1jaGlwIGdlbmVyaWMgRE1BIHJlcXVlc3Rvci4KKyAqLworI2RlZmluZSBETUFfUlFfU0RfQUREUkVTU19NQVNLICAgICAgICAgICAgICAgICAgMHgwMDAwRkZGRgorI2RlZmluZSBETUFfUlFfU0RfTUVNT1JZX0lEX01BU0sgICAgICAgICAgICAgICAgMHgwMDBGMDAwMAorI2RlZmluZSBETUFfUlFfU0RfU1BfUEFSQU1fQUREUiAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBETUFfUlFfU0RfU1BfU0FNUExFX0FERFIgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBETUFfUlFfU0RfU1BfUFJPR1JBTV9BRERSICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBETUFfUlFfU0RfU1BfREVCVUdfQUREUiAgICAgICAgICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBETUFfUlFfU0RfT01OSU1FTV9BRERSICAgICAgICAgICAgICAgICAgMHgwMDBFMDAwMAorI2RlZmluZSBETUFfUlFfU0RfRU5EX0ZMQUcgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBETUFfUlFfU0RfRVJST1JfRkxBRyAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBETUFfUlFfU0RfQUREUkVTU19TSElGVCAgICAgICAgICAgICAgICAgMAorCisvKgorICogIFRoZSBmb2xsb3dpbmcgZGVmaW5lcyBhcmUgZm9yIHRoZSBmbGFncyBpbiB0aGUgcGFnZSBtYXAgYWRkcmVzcyB3b3JkIG9mIHRoZQorICogIG9uLWNoaXAgZ2VuZXJpYyBETUEgcmVxdWVzdG9yLgorICovCisjZGVmaW5lIERNQV9SUV9QTUFfTE9PUF9USElSRF9QQUdFX0VOVFJZX01BU0sgICAweDAwMDAwRkY4CisjZGVmaW5lIERNQV9SUV9QTUFfUEFHRV9UQUJMRV9NQVNLICAgICAgICAgICAgICAweEZGRkZGMDAwCisjZGVmaW5lIERNQV9SUV9QTUFfTE9PUF9USElSRF9QQUdFX0VOVFJZX1NISUZUICAzCisjZGVmaW5lIERNQV9SUV9QTUFfUEFHRV9UQUJMRV9TSElGVCAgICAgICAgICAgICAxMgorCisjZGVmaW5lIEJBMV9WQVJJREVDX0JVRl8xICAgICAgIDB4MDAwCisKKyNkZWZpbmUgQkExX1BEVEMgICAgICAgICAgICAgICAgMHgwYzAgICAgLyogQkExX1BMQVlfRE1BX1RSQU5TQUNUSU9OX0NPVU5UX1JFRyAqLworI2RlZmluZSBCQTFfUEZJRSAgICAgICAgICAgICAgICAweDBjNCAgICAvKiBCQTFfUExBWV9GT1JNQVRfJl9JTlRFUlJVUFRfRU5BQkxFX1JFRyAqLworI2RlZmluZSBCQTFfUEJBICAgICAgICAgICAgICAgICAweDBjOCAgICAvKiBCQTFfUExBWV9CVUZGRVJfQUREUkVTUyAqLworI2RlZmluZSBCQTFfUFZPTCAgICAgICAgICAgICAgICAweDBmOCAgICAvKiBCQTFfUExBWV9WT0xVTUVfUkVHICovCisjZGVmaW5lIEJBMV9QU1JDICAgICAgICAgICAgICAgIDB4Mjg4ICAgIC8qIEJBMV9QTEFZX1NBTVBMRV9SQVRFX0NPUlJFQ1RJT05fUkVHICovCisjZGVmaW5lIEJBMV9QQ1RMICAgICAgICAgICAgICAgIDB4MmE0ICAgIC8qIEJBMV9QTEFZX0NPTlRST0xfUkVHICovCisjZGVmaW5lIEJBMV9QUEkgICAgICAgICAgICAgICAgIDB4MmI0ICAgIC8qIEJBMV9QTEFZX1BIQVNFX0lOQ1JFTUVOVF9SRUcgKi8KKworI2RlZmluZSBCQTFfQ0NUTCAgICAgICAgICAgICAgICAweDA2NCAgICAvKiBCQTFfQ0FQVFVSRV9DT05UUk9MX1JFRyAqLworI2RlZmluZSBCQTFfQ0lFICAgICAgICAgICAgICAgICAweDEwNCAgICAvKiBCQTFfQ0FQVFVSRV9JTlRFUlJVUFRfRU5BQkxFX1JFRyAqLworI2RlZmluZSBCQTFfQ0JBICAgICAgICAgICAgICAgICAweDEwYyAgICAvKiBCQTFfQ0FQVFVSRV9CVUZGRVJfQUREUkVTUyAqLworI2RlZmluZSBCQTFfQ1NSQyAgICAgICAgICAgICAgICAweDJjOCAgICAvKiBCQTFfQ0FQVFVSRV9TQU1QTEVfUkFURV9DT1JSRUNUSU9OX1JFRyAqLworI2RlZmluZSBCQTFfQ0NJICAgICAgICAgICAgICAgICAweDJkOCAgICAvKiBCQTFfQ0FQVFVSRV9DT0VGRklDSUVOVF9JTkNSRU1FTlRfUkVHICovCisjZGVmaW5lIEJBMV9DRCAgICAgICAgICAgICAgICAgIDB4MmUwICAgIC8qIEJBMV9DQVBUVVJFX0RFTEFZX1JFRyAqLworI2RlZmluZSBCQTFfQ1BJICAgICAgICAgICAgICAgICAweDJmNCAgICAvKiBCQTFfQ0FQVFVSRV9QSEFTRV9JTkNSRU1FTlRfUkVHICovCisjZGVmaW5lIEJBMV9DVk9MICAgICAgICAgICAgICAgIDB4MmY4ICAgIC8qIEJBMV9DQVBUVVJFX1ZPTFVNRV9SRUcgKi8KKworI2RlZmluZSBCQTFfQ0ZHMSAgICAgICAgICAgICAgICAweDEzNCAgICAvKiBCQTFfQ0FQVFVSRV9GUkFNRV9HUk9VUF8xX1JFRyAqLworI2RlZmluZSBCQTFfQ0ZHMiAgICAgICAgICAgICAgICAweDEzOCAgICAvKiBCQTFfQ0FQVFVSRV9GUkFNRV9HUk9VUF8yX1JFRyAqLworI2RlZmluZSBCQTFfQ0NTVCAgICAgICAgICAgICAgICAweDEzYyAgICAvKiBCQTFfQ0FQVFVSRV9DT05TVEFOVF9SRUcgKi8KKyNkZWZpbmUgQkExX0NTUEIgICAgICAgICAgICAgICAgMHgzNDAgICAgLyogQkExX0NBUFRVUkVfU1BCX0FERFJFU1MgKi8KKworLyoKKyAqCisgKi8KKworI2RlZmluZSBDUzQ2WFhfTU9ERV9PVVRQVVQJKDE8PDApCSAvKiBNSURJIFVBUlQgLSBvdXRwdXQgKi8gCisjZGVmaW5lIENTNDZYWF9NT0RFX0lOUFVUCSgxPDwxKQkgLyogTUlESSBVQVJUIC0gaW5wdXQgKi8KKworLyoKKyAqCisgKi8KKworI2RlZmluZSBTQVZFX1JFR19NQVggICAgICAgICAgICAgMHgxMAorI2RlZmluZSBQT1dFUl9ET1dOX0FMTCAgICAgICAgIDB4N2YwZgorCisvKiBtYXhpbnVtIG51bWJlciBvZiBBQzk3IGNvZGVjcyBjb25uZWN0ZWQsIEFDOTcgMi4wIGRlZmluZWQgNCAqLworI2RlZmluZSBNQVhfTlJfQUM5NwkJCQkgICAgICAgICAgICA0CisjZGVmaW5lIENTNDZYWF9QUklNQVJZX0NPREVDX0lOREVYICAgICAgICAgIDAKKyNkZWZpbmUgQ1M0NlhYX1NFQ09OREFSWV9DT0RFQ19JTkRFWAkJMQorI2RlZmluZSBDUzQ2WFhfU0VDT05EQVJZX0NPREVDX09GRlNFVAkJMHg4MAorI2RlZmluZSBDUzQ2WFhfRFNQX0NBUFRVUkVfQ0hBTk5FTCAgICAgICAgICAxCisKKy8qIGNhcHR1cmUgKi8KKyNkZWZpbmUgQ1M0NlhYX0RTUF9DQVBUVVJFX0NIQU5ORUwgICAgICAgICAgMQorCisvKiBtaXhlciAqLworI2RlZmluZSBDUzQ2WFhfTUlYRVJfU1BESUZfSU5QVVRfRUxFTUVOVCAgICAxCisjZGVmaW5lIENTNDZYWF9NSVhFUl9TUERJRl9PVVRQVVRfRUxFTUVOVCAgIDIKKwordHlwZWRlZiBzdHJ1Y3QgX3NuZF9jczQ2eHggY3M0Nnh4X3Q7CisKK3R5cGVkZWYgc3RydWN0IF9zbmRfY3M0Nnh4X3BjbV90IHsKKwlzdHJ1Y3Qgc25kX2RtYV9idWZmZXIgaHdfYnVmOworICAKKwl1bnNpZ25lZCBpbnQgY3RsOworCXVuc2lnbmVkIGludCBzaGlmdDsJLyogU2hpZnQgY291bnQgdG8gdHJhc2Zvcm0gZnJhbWVzIGluIGJ5dGVzICovCisJc25kX3BjbV9pbmRpcmVjdF90IHBjbV9yZWM7CisJc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtOworCisJcGNtX2NoYW5uZWxfZGVzY3JpcHRvcl90ICogcGNtX2NoYW5uZWw7CisKKwlpbnQgcGNtX2NoYW5uZWxfaWQ7ICAgIC8qIEZyb24gUmVhciwgQ2VudGVyIExmZSAgLi4uICovCit9IGNzNDZ4eF9wY21fdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCWNoYXIgbmFtZVsyNF07CisJdW5zaWduZWQgbG9uZyBiYXNlOworCXZvaWQgX19pb21lbSAqcmVtYXBfYWRkcjsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJc3RydWN0IHJlc291cmNlICpyZXNvdXJjZTsKK30gc25kX2NzNDZ4eF9yZWdpb25fdDsKKworc3RydWN0IF9zbmRfY3M0Nnh4IHsKKwlpbnQgaXJxOworCXVuc2lnbmVkIGxvbmcgYmEwX2FkZHI7CisJdW5zaWduZWQgbG9uZyBiYTFfYWRkcjsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQlzbmRfY3M0Nnh4X3JlZ2lvbl90IGJhMDsKKwkJCXNuZF9jczQ2eHhfcmVnaW9uX3QgZGF0YTA7CisJCQlzbmRfY3M0Nnh4X3JlZ2lvbl90IGRhdGExOworCQkJc25kX2NzNDZ4eF9yZWdpb25fdCBwbWVtOworCQkJc25kX2NzNDZ4eF9yZWdpb25fdCByZWc7CisJCX0gbmFtZTsKKwkJc25kX2NzNDZ4eF9yZWdpb25fdCBpZHhbNV07CisJfSByZWdpb247CisKKwl1bnNpZ25lZCBpbnQgbW9kZTsKKwkKKwlzdHJ1Y3QgeworCQlzdHJ1Y3Qgc25kX2RtYV9idWZmZXIgaHdfYnVmOworCisJCXVuc2lnbmVkIGludCBjdGw7CisJCXVuc2lnbmVkIGludCBzaGlmdDsJLyogU2hpZnQgY291bnQgdG8gdHJhc2Zvcm0gZnJhbWVzIGluIGJ5dGVzICovCisJCXNuZF9wY21faW5kaXJlY3RfdCBwY21fcmVjOworCQlzbmRfcGNtX3N1YnN0cmVhbV90ICpzdWJzdHJlYW07CisJfSBjYXB0OworCisKKwlpbnQgbnJfYWM5N19jb2RlY3M7CisJYWM5N19idXNfdCAqYWM5N19idXM7CisJYWM5N190ICphYzk3W01BWF9OUl9BQzk3XTsKKworCXN0cnVjdCBwY2lfZGV2ICpwY2k7CisJc25kX2NhcmRfdCAqY2FyZDsKKwlzbmRfcGNtX3QgKnBjbTsKKworCXNuZF9yYXdtaWRpX3QgKnJtaWRpOworCXNuZF9yYXdtaWRpX3N1YnN0cmVhbV90ICptaWRpX2lucHV0OworCXNuZF9yYXdtaWRpX3N1YnN0cmVhbV90ICptaWRpX291dHB1dDsKKworCXNwaW5sb2NrX3QgcmVnX2xvY2s7CisJdW5zaWduZWQgaW50IG1pZGNyOworCXVuc2lnbmVkIGludCB1YXJ0bTsKKworCWludCBhbXBsaWZpZXI7CisJdm9pZCAoKmFtcGxpZmllcl9jdHJsKShjczQ2eHhfdCAqLCBpbnQpOworCXZvaWQgKCphY3RpdmVfY3RybCkoY3M0Nnh4X3QgKiwgaW50KTsKKyAgCXZvaWQgKCptaXhlcl9pbml0KShjczQ2eHhfdCAqKTsKKworCXN0cnVjdCBwY2lfZGV2ICphY3BpX2RldjsKKwlpbnQgYWNwaV9wb3J0OworCXNuZF9rY29udHJvbF90ICplYXBkX3N3aXRjaDsgLyogZm9yIGFtcGxpZmllciBoYWNrICovCisJaW50IGFjY2VwdF92YWxpZDsJLyogYWNjZXB0IG1tYXAgdmFsaWQgKGZvciBPU1MpICovCisKKwlzdHJ1Y3QgZ2FtZXBvcnQgKmdhbWVwb3J0OworCisjaWZkZWYgQ09ORklHX1NORF9DUzQ2WFhfREVCVUdfR1BJTworCWludCBjdXJyZW50X2dwaW87CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfU05EX0NTNDZYWF9ORVdfRFNQCisJc3RydWN0IHNlbWFwaG9yZSBzcG9zX211dGV4OworCisJZHNwX3Nwb3NfaW5zdGFuY2VfdCAqIGRzcF9zcG9zX2luc3RhbmNlOworCisJc25kX3BjbV90ICpwY21fcmVhcjsKKwlzbmRfcGNtX3QgKnBjbV9jZW50ZXJfbGZlOworCXNuZF9wY21fdCAqcGNtX2llYzk1ODsKKyNlbHNlIC8qIGZvciBjb21wYXRpYmlsaXR5ICovCisJY3M0Nnh4X3BjbV90ICpwbGF5YmFja19wY207CisJdW5zaWduZWQgaW50IHBsYXlfY3RsOworI2VuZGlmCit9OworCitpbnQgc25kX2NzNDZ4eF9jcmVhdGUoc25kX2NhcmRfdCAqY2FyZCwKKwkJICAgICAgc3RydWN0IHBjaV9kZXYgKnBjaSwKKwkJICAgICAgaW50IGV4dGVybmFsX2FtcCwgaW50IHRoaW5rcGFkLAorCQkgICAgICBjczQ2eHhfdCAqKnJjb2RlYyk7CisKK2ludCBzbmRfY3M0Nnh4X3BjbShjczQ2eHhfdCAqY2hpcCwgaW50IGRldmljZSwgc25kX3BjbV90ICoqcnBjbSk7CitpbnQgc25kX2NzNDZ4eF9wY21fcmVhcihjczQ2eHhfdCAqY2hpcCwgaW50IGRldmljZSwgc25kX3BjbV90ICoqcnBjbSk7CitpbnQgc25kX2NzNDZ4eF9wY21faWVjOTU4KGNzNDZ4eF90ICpjaGlwLCBpbnQgZGV2aWNlLCBzbmRfcGNtX3QgKipycGNtKTsKK2ludCBzbmRfY3M0Nnh4X3BjbV9jZW50ZXJfbGZlKGNzNDZ4eF90ICpjaGlwLCBpbnQgZGV2aWNlLCBzbmRfcGNtX3QgKipycGNtKTsKK2ludCBzbmRfY3M0Nnh4X21peGVyKGNzNDZ4eF90ICpjaGlwKTsKK2ludCBzbmRfY3M0Nnh4X21pZGkoY3M0Nnh4X3QgKmNoaXAsIGludCBkZXZpY2UsIHNuZF9yYXdtaWRpX3QgKipybWlkaSk7CitpbnQgc25kX2NzNDZ4eF9zdGFydF9kc3AoY3M0Nnh4X3QgKmNoaXApOworaW50IHNuZF9jczQ2eHhfZ2FtZXBvcnQoY3M0Nnh4X3QgKmNoaXApOworCisjZW5kaWYgLyogX19TT1VORF9DUzQ2WFhfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9jczQ2eHhfZHNwX3NjYl90eXBlcy5oIGIvaW5jbHVkZS9zb3VuZC9jczQ2eHhfZHNwX3NjYl90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmOTkwYTMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3NvdW5kL2NzNDZ4eF9kc3Bfc2NiX3R5cGVzLmgKQEAgLTAsMCArMSwxMjE2IEBACisvKgorICogIFRoZSBkcml2ZXIgZm9yIHRoZSBDaXJydXMgTG9naWMncyBTb3VuZCBGdXNpb24gQ1M0NlhYIGJhc2VkIHNvdW5kY2FyZHMKKyAqICBDb3B5cmlnaHQgKGMpIGJ5IEphcm9zbGF2IEt5c2VsYSA8cGVyZXhAc3VzZS5jej4KKyAqCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICoKKyAqCisgKiBOT1RFOiBjb21tZW50cyBhcmUgY29weS9wYXN0ZSBmcm9tIGN3Y2VtYjgwLmxzdCAKKyAqIHByb3ZpZGVkIGJ5IFRvbSBXb2xsZXIgYXQgQ2lycnVzIChteSBvbmx5CisgKiBkb2N1bWVudGF0aW9uIGFib3V0IHRoZSBTUCBPUyBydW5uaW5nIGluc2lkZQorICogdGhlIERTUCkgCisgKi8KKworI2lmbmRlZiBfX0NTNDZYWF9EU1BfU0NCX1RZUEVTX0hfXworI2RlZmluZSBfX0NTNDZYWF9EU1BfU0NCX1RZUEVTX0hfXworCisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorCisjaWZuZGVmIF9fX0RTUF9EVUFMXzE2QklUX0FMTE9DCisjaWYgICBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKyNkZWZpbmUgX19fRFNQX0RVQUxfMTZCSVRfQUxMT0MoYSxiKSB1MTYgYTsgdTE2IGI7CisjZWxpZiBkZWZpbmVkKF9fQklHX0VORElBTikKKyNkZWZpbmUgX19fRFNQX0RVQUxfMTZCSVRfQUxMT0MoYSxiKSB1MTYgYjsgdTE2IGE7CisjZWxzZQorI2Vycm9yIE5vdCBfX0xJVFRMRV9FTkRJQU4gYW5kIG5vdCBfX0JJR19FTkRJQU4sIHRoZW4gd2hhdCA/Pz8KKyNlbmRpZgorI2VuZGlmCisKKy8qIFRoaXMgc3RydWN0cyBhcmUgdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBTUCAqLworCit0eXBlZGVmIHN0cnVjdCBfYmFzaWNfZG1hX3JlcV90IHsKKwkvKiBETUEgUmVxdWVzdG9yIFdvcmQgMCAoRENXKSAgZmllbGRzOgorCisJICAgMzEgWzMwLTI4XTI3ICBbMjY6MjRdIDIzIDIyIDIxIDIwIFsxOToxOF0gWzE3OjE2XSAxNSAxNCAxMyAgMTIgIDExIDEwIDkgOCA3IDYgIFs1OjBdCisJICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCQorCSAgIHxTfCBTQlQgIHxEfCAgREJUICAgIHx3Ynx3YnwgIHwgIHwgIExTICB8ICBTUyAgIHxPcHR8RG98U1NHfERTR3wgIHwgIHwgfCB8IHwgfCBEd29yZCAgIHwKKwkgICB8SHxfX19fXyB8SHxfX19fX19fX198U198RCB8X198X198X19fX19ffF9fX19fX198X19ffG5lfF9fIHxfXyB8X198X198X3xffF98X3xfQ291bnQgLTF8CisJKi8KKwl1MzIgZGN3OyAgICAgICAgICAgICAgICAgLyogRE1BIENvbnRyb2wgV29yZCAqLworCXUzMiBkbXc7ICAgICAgICAgICAgICAgICAvKiBETUEgTW9kZSBXb3JkICovCisJdTMyIHNhdzsgICAgICAgICAgICAgICAgIC8qIFNvdXJjZSBBZGRyZXNzIFdvcmQgKi8KKwl1MzIgZGF3OyAgICAgICAgICAgICAgICAgLyogRGVzdGluYXRpb24gQWRkcmVzcyBXb3JkICAqLworfSBiYXNpY19kbWFfcmVxX3Q7CisKK3R5cGVkZWYgc3RydWN0IF9zY2F0dGVyX2dhdGhlcl9leHRfdCB7CisJdTMyIG5wYXc7ICAgICAgICAgICAgICAgIC8qIE5leHQtUGFnZSBBZGRyZXNzIFdvcmQgKi8KKworCS8qIERNQSBSZXF1ZXN0b3IgV29yZCA1IChOUENXKSAgZmllbGRzOgorICAgICAKKwkgICAzMS0zMCAyOSAyOCAgICAgICAgICBbMjc6MTZdICAgICAgICAgICAgICBbMTU6MTJdICAgICAgICAgICAgIFsxMTozXSAgICAgICAgICAgICAgICBbMjowXSAJCQkJCisJICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18JCisJICAgfFNWICB8TEV8U0V8ICAgU2FtcGxlLWVuZCBieXRlIG9mZnNldCAgIHwgICAgICAgICB8IFBhZ2UtbWFwIGVudHJ5IG9mZnNldCBmb3IgbmV4dCAgfCAgICB8IAorCSAgIHxwYWdlfF9ffF9ffCBfX19fX19fX19fX19fX19fX19fX19fX19fX198X19fX19fX19ffF9fcGFnZSwgaWYgIXNhbXBsZS1lbmRfX19fX19fX19fX3xfX19ffAorCSovCisJdTMyIG5wY3c7ICAgICAgICAgICAgICAgIC8qIE5leHQtUGFnZSBDb250cm9sIFdvcmQgKi8KKwl1MzIgbGJhdzsgICAgICAgICAgICAgICAgLyogTG9vcC1CZWdpbiBBZGRyZXNzIFdvcmQgKi8KKwl1MzIgbnBsYmF3OyAgICAgICAgICAgICAgLyogTmV4dC1QYWdlIGFmdGVyIExvb3AtQmVnaW4gQWRkcmVzcyBXb3JkICovCisJdTMyIHNnYXc7ICAgICAgICAgICAgICAgIC8qIFNjYXR0ZXIvR2F0aGVyIEFkZHJlc3MgV29yZCAqLworfSBzY2F0dGVyX2dhdGhlcl9leHRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgX3ZvbHVtZV9jb250cm9sX3QgeworCV9fX0RTUF9EVUFMXzE2QklUX0FMTE9DKAorCSAgIHJpZ2h0VGFyZywgIC8qIFRhcmdldCB2b2x1bWUgZm9yIGxlZnQgJiByaWdodCBjaGFubmVscyAqLworCSAgIGxlZnRUYXJnCisJKQorCV9fX0RTUF9EVUFMXzE2QklUX0FMTE9DKAorCSAgIHJpZ2h0Vm9sLCAgIC8qIEN1cnJlbnQgbGVmdCAmIHJpZ2h0IGNoYW5uZWwgdm9sdW1lcyAqLworCSAgIGxlZnRWb2wKKwkpCit9IHZvbHVtZV9jb250cm9sX3Q7CisKKy8qIEdlbmVyaWMgc3RyZWFtIGNvbnRyb2wgYmxvY2sgKFNDQikgc3RydWN0dXJlIGRlZmluaXRpb24gKi8KK3R5cGVkZWYgc3RydWN0IF9nZW5lcmljX3NjYl90IHsKKwkvKiBGb3Igc3RyZWFtaW5nIEkvTywgdGhlIERTUCBzaG91bGQgbmV2ZXIgYWx0ZXIgYW55IHdvcmRzIGluIHRoZSBETUEKKwkgICByZXF1ZXN0b3Igb3IgdGhlIHNjYXR0ZXIvZ2F0aGVyIGV4dGVuc2lvbi4gIE9ubHkgYWQgaG9jIERNQSByZXF1ZXN0CisJICAgc3RyZWFtcyBhcmUgZnJlZSB0byBhbHRlciB0aGUgcmVxdWVzdG9yIChjdXJyZW50bHkgb25seSBvY2N1ciBpbiB0aGUKKwkgICBET1MtYmFzZWQgTUlESSBjb250cm9sbGVyIGFuZCBpbiBkZWJ1Z2dlci1pbnNlcnRlZCBjb2RlKS4KKyAgICAKKwkgICBJZiBhbiBTQ0IgZG9lcyBub3QgaGF2ZSBhbnkgYXNzb2NpYXRlZCBETUEgcmVxdWVzdG9yLCB0aGVzZSA5IGludHMKKwkgICBtYXkgYmUgZnJlZWQgZm9yIHVzZSBieSBvdGhlciB0YXNrcywgYnV0IHRoZSBwb2ludGVyIHRvIHRoZSBTQ0IgbXVzdAorCSAgIHN0aWxsIGJlIHN1Y2ggdGhhdCB0aGUgaW5zT3JkOm5leHRTQ0IgYXBwZWFyIGF0IG9mZnNldCA5IGZyb20gdGhlCisJICAgU0NCIHBvaW50ZXIuCisgICAgIAorCSAgIEJhc2ljIChub24gc2NhdHRlci9nYXRoZXIpIERNQSByZXF1ZXN0b3IgKDQgaW50cykKKwkqLworICAKKwkvKiBJbml0aWFsaXplZCBieSB0aGUgaG9zdCwgb25seSBtb2RpZmllZCBieSBETUEgCisJICAgUi9PIGZvciB0aGUgRFNQIHRhc2sgKi8KKwliYXNpY19kbWFfcmVxX3QgIGJhc2ljX3JlcTsgIC8qIE9wdGlvbmFsICovCisKKwkvKiBTY2F0dGVyL2dhdGhlciBETUEgcmVxdWVzdG9yIGV4dGVuc2lvbiAgICg1IGludHMpIAorCSAgIEluaXRpYWxpemVkIGJ5IHRoZSBob3N0LCBvbmx5IG1vZGlmaWVkIGJ5IERNQQorCSAgIERTUCB0YXNrIG5ldmVyIG5lZWRzIHRvIGV2ZW4gcmVhZCB0aGVzZS4KKwkqLworCXNjYXR0ZXJfZ2F0aGVyX2V4dF90IHNnX2V4dDsgIC8qIE9wdGlvbmFsICovCisKKwkvKiBTdWJsaXN0IHBvaW50ZXIgJiBuZXh0IHN0cmVhbSBjb250cm9sIGJsb2NrIChTQ0IpIGxpbmsuCisJICAgSW5pdGlhbGl6ZWQgJiBtb2RpZmllZCBieSB0aGUgaG9zdCBSL08gZm9yIHRoZSBEU1AgdGFzaworCSovCisJX19fRFNQX0RVQUxfMTZCSVRfQUxMT0MoCisJICAgIG5leHRfc2NiLCAgICAgLyogUkVRVUlSRUQgKi8KKwkgICAgc3ViX2xpc3RfcHRyICAvKiBSRVFVSVJFRCAqLworCSkKKyAgCisJLyogUG9pbnRlciB0byB0aGlzIHRhc2tzIHBhcmFtZXRlciBibG9jayAmIHN0cmVhbSBmdW5jdGlvbiBwb2ludGVyIAorCSAgIEluaXRpYWxpemVkIGJ5IHRoZSBob3N0ICBSL08gZm9yIHRoZSBEU1AgdGFzayAqLworCV9fX0RTUF9EVUFMXzE2QklUX0FMTE9DKAorCSAgICBlbnRyeV9wb2ludCwgIC8qIFJFUVVJUkVEICovCisJICAgIHRoaXNfc3BiICAgICAgLyogUkVRVUlSRUQgKi8KKwkpCisKKwkvKiByc0NvbmZpZyByZWdpc3RlciBmb3Igc3RyZWFtIGJ1ZmZlciAocnNETUEgcmVnLiAKKwkgICBpcyBsb2FkZWQgZnJvbSBiYXNpY1JlcS5kYXcgZm9yIGluY29taW5nIHN0cmVhbXMsIG9yIAorCSAgIGJhc2ljUmVxLnNhdywgZm9yIG91dGdvaW5nIHN0cmVhbXMpIAorCisJICAgMzEgMzAgMjkgIFsyODoyNF0gICAgIFsyMzoxNl0gMTUgMTQgMTMgMTIgMTEgMTAgOSA4IDcgNiAgNSAgICAgIDQgICAgICBbMzowXQorCSAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworCSAgIHxETUEgIHxEfG1heERNQXNpemV8IHN0cmVhbU51bXxkaXJ8cHwgIHwgIHwgIHwgIHwgfCB8ZHMgfHNociAxfHJldiBDeSB8IG1vZCAgIHwKKwkgICB8cHJpbyB8X3xfX19fX19fX19ffF9fX19fX19fX198X19ffF98X198X198X198X198X3xffF9fX3xfX19fX3xfX19fX19ffF9fX19fX198CisJICAgMzEgMzAgMjkgIFsyODoyNF0gICAgIFsyMzoxNl0gMTUgMTQgMTMgMTIgMTEgMTAgOSA4IDcgNiAgNSAgICAgIDQgICAgICBbMzowXQorCisKKwkgICBJbml0aWFsaXplZCBieSB0aGUgaG9zdCBSL08gZm9yIHRoZSBEU1AgdGFzaworCSovCisJdTMyICBzdHJtX3JzX2NvbmZpZzsgLyogUkVRVUlSRUQgKi8KKyAgICAgICAgICAgICAgIC8vIAorCS8qIE9uIG1peGVyIGlucHV0IHN0cmVhbXM6IGluZGljYXRlcyBtaXhlciBpbnB1dCBzdHJlYW0gY29uZmlndXJhdGlvbgorCSAgIE9uIFRlZXMsIHRoaXMgaXMgY29waWVkIGZyb20gdGhlIHN0cmVhbSBiZWluZyBzbm9vcGVkCisKKwkgICBTdHJlYW0gc2FtcGxlIHBvaW50ZXIgJiBNQUMtdW5pdCBtb2RlIGZvciB0aGlzIHN0cmVhbSAKKyAgICAgCisJICAgSW5pdGlhbGl6ZWQgYnkgdGhlIGhvc3QgVXBkYXRlZCBieSB0aGUgRFNQIHRhc2sKKwkqLworCXUzMiAgc3RybV9idWZfcHRyOyAvKiBSRVFVSVJFRCAgKi8KKworCS8qIE9uIG1peGVyIGlucHV0IHN0cmVhbXM6IHBvaW50cyB0byBuZXh0IG1peGVyIGlucHV0IGFuZCBpcyB1cGRhdGVkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaXhlciBzdWJyb3V0aW5lIGluIHRoZSAicGFyZW50IiBEU1AgdGFzaworCQkJCSAgIChsZWFzdC1zaWduaWZpY2FudCAxNiBiaXRzIGFyZSBwcmVzZXJ2ZWQsIHVudXNlZCkKKyAgICAKKyAgICAgICAgICAgT24gVGVlcywgdGhlIHBvaW50ZXIgaXMgY29waWVkIGZyb20gdGhlIHN0cmVhbSBiZWluZyBzbm9vcGVkIG9uCisJICAgaW5pdGlhbGl6YXRpb24sIGFuZCwgc3Vic2VxdWVudGx5LCBpdCBpcyBjb3BpZWQgaW50byB0aGUKKwkgICBzdHJlYW0gYmVpbmcgc25vb3BlZC4KKworCSAgIE9uIHdhdmV0YWJsZS8zRCB2b2ljZXM6IHRoZSBzdHJtQnVmUHRyIHdpbGwgdXNlIGFsbCAzMiBiaXRzIHRvIGFsbG93IGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFjdGlvbmFsIHBoYXNlIGFjY3VtdWxhdGlvbgorCisJICAgRnJhY3Rpb25hbCBpbmNyZW1lbnQgcGVyIG91dHB1dCBzYW1wbGUgaW4gdGhlIGlucHV0IHNhbXBsZSBidWZmZXIKKworCSAgIChOb3QgdXNlZCBvbiBtaXhlciBpbnB1dCBzdHJlYW1zICYgcmVkZWZpbmVkIG9uIFRlZXMpCisJICAgT24gd2F2ZXRhYmxlLzNEIHZvaWNlczogdGhpcyAzMi1iaXQgd29yZCBzcGVjaWZpZXMgdGhlIGludGVnZXIuZnJhY3Rpb25hbCAKKwkgICBpbmNyZW1lbnQgcGVyIG91dHB1dCBzYW1wbGUuCisJKi8KKwl1MzIgIHN0cm1QaGlJbmNyOworCisKKwkvKiBTdGFuZGFyZCBzdGVyZW8gdm9sdW1lIGNvbnRyb2wKKwkgICBJbml0aWFsaXplZCBieSB0aGUgaG9zdCAoaG9zdCB1cGRhdGVzIHRhcmdldCB2b2x1bWVzKSAKKworCSAgIEN1cnJlbnQgdm9sdW1lcyB1cGRhdGUgYnkgdGhlIERTUCB0YXNrCisJICAgT24gbWl4ZXIgaW5wdXQgc3RyZWFtczogcmVxdWlyZWQgJiB1cGRhdGVkIGJ5IHRoZSBtaXhlciBzdWJyb3V0aW5lIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFyZW50IiBEU1AgdGFzaworCisJICAgT24gVGVlcywgYm90aCBjdXJyZW50ICYgdGFyZ2V0IHZvbHVtZXMgYXJlIGNvcGllZCB1cCBvbiBpbml0aWFsaXphdGlvbiwKKwkgICBhbmQsIHN1YnNlcXVlbnRseSwgdGhlIHRhcmdldCB2b2x1bWUgaXMgY29waWVkIHVwIHdoaWxlIHRoZSBjdXJyZW50CisJICAgdm9sdW1lIGlzIGNvcGllZCBkb3duLgorICAgICAKKwkgICBUaGVzZSB0d28gMzItYml0IHdvcmRzIGFyZSByZWRlZmluZWQgZm9yIHdhdmV0YWJsZSAmIDMtRCB2b2ljZXMuICAgIAorCSovCisJdm9sdW1lX2NvbnRyb2xfdCB2b2xfY3RybF90OyAgIC8qIE9wdGlvbmFsICovCit9IGdlbmVyaWNfc2NiX3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QgX3Nwb3NfY29udHJvbF9ibG9ja190IHsKKwkvKiBXQVJOSU5HOiBDZXJ0YWluIGl0ZW1zIGluIHRoaXMgc3RydWN0dXJlIGFyZSBtb2RpZmllZCBieSB0aGUgaG9zdAorCSAgICAgICAgICAgIEFueSBkd29yZCB0aGF0IGNhbiBiZSBtb2RpZmllZCBieSB0aGUgaG9zdCwgbXVzdCBub3QgYmUKKwkJICAgIG1vZGlmaWVkIGJ5IHRoZSBTUCBhcyB0aGUgaG9zdCBjYW4gb25seSBkbyBhdG9taWMgZHdvcmQKKwkJICAgIHdyaXRlcywgYW5kIHRvIGRvIG90aGVyd2lzZSwgZXZlbiBhIHJlYWQgbW9kaWZ5IHdyaXRlLCAKKwkJICAgIG1heSBsZWFkIHRvIGNvcnJ1cHRlZCBkYXRhIG9uIHRoZSBTUC4KKyAgCisJCSAgICBUaGlzIHJ1bGUgZG9lcyBub3QgYXBwbHkgdG8gb25lIG9mZiBib290IHRpbWUgaW5pdGlhbGlzYXRpb24gcHJpb3IgdG8gc3RhcnRpbmcgdGhlIFNQCisJKi8KKworCisJX19fRFNQX0RVQUxfMTZCSVRfQUxMT0MoIAorCS8qIEZpcnN0IGVsZW1lbnQgb24gdGhlIEh5cGVyIGZvcmdyb3VuZCB0YXNrIHRyZWUgKi8KKwkgICAgaGZnX3RyZWVfcm9vdF9wdHIsICAvKiBIT1NUICovCQkJICAgIAorCS8qIEZpcnN0IDMgZHdvcmRzIGFyZSB3cml0dGVuIGJ5IHRoZSBob3N0IGFuZCByZWFkLW9ubHkgb24gdGhlIERTUCAqLworCSAgICBoZmdfc3RhY2tfYmFzZSAgICAgIC8qIEhPU1QgKi8KKwkpCisKKwlfX19EU1BfRFVBTF8xNkJJVF9BTExPQygKKwkvKiBQb2ludCB0byB0aGlzIGRhdGEgc3RydWN0dXJlIHRvIGVuYWJsZSBlYXN5IGFjY2VzcyAqLworCSAgICBzcG9zX2NiX3B0ciwJIC8qIFNQICovCisJICAgIHByZXZfdGFza190cmVlX3B0ciAgIC8qIFNQICYmIEhPU1QgKi8KKwkpCisKKwlfX19EU1BfRFVBTF8xNkJJVF9BTExPQygKKwkvKiBDdXJyZW50bHkgVW51c2VkICovCisJICAgIHh4aW50ZXJ2YWxfdGltZXJfcGVyaW9kLAorCS8qIEVuYWJsZSBleHRlbnNpb24gb2YgU1BPUyBkYXRhIHN0cnVjdHVyZSAqLworCSAgICBIRkdTUEJfcHRyCisJKQorCisKKwlfX19EU1BfRFVBTF8xNkJJVF9BTExPQygKKwkgICAgeHhudW1fSEZHX3RpY2tzX3RoaXNJbnRlcnZhbCwKKwkvKiBNb2RpZmllZCBieSB0aGUgRFNQICovCisJICAgIHh4bnVtX3RudGVydmFscworCSkKKworCisJLyogU2V0IGJ5IERTUCB1cG9uIGVuY291bnRlcmluZyBhIHRyYXAgKGJyZWFrcG9pbnQpIG9yIGEgc3B1cmlvdXMKKwkgICBpbnRlcnJ1cHQuICBUaGUgaG9zdCBtdXN0IGNsZWFyIHRoaXMgZHdvcmQgYWZ0ZXIgcmVhZGluZyBpdAorCSAgIHVwb24gcmVjZWl2aW5nIHNwSW50MS4gKi8KKwlfX19EU1BfRFVBTF8xNkJJVF9BTExPQygKKwkgICAgc3B1cmlvdXNfaW50X2ZsYWcsCSAvKiAoSG9zdCAmIFNQKSBOYXR1cmUgb2YgdGhlIHNwdXJpb3VzIGludGVycnVwdCAqLworCSAgICB0cmFwX2ZsYWcgICAgICAgICAgICAvKiAoSG9zdCAmIFNQKSBOYXR1cmUgb2YgZGV0ZWN0ZWQgVHJhcCAqLworCSkKKworCV9fX0RTUF9EVUFMXzE2QklUX0FMTE9DKAorCSAgICB1bnVzZWQyLAkJCQkJCisJICAgIGludmFsaWRfSVBfZmxhZyAgICAgICAgLyogKEhvc3QgJiBTUCApIEluZGljYXRlIGRldGVjdGlvbiBvZiBpbnZhbGlkIGluc3RydWN0aW9uIHBvaW50ZXIgKi8KKwkpCisKKwlfX19EU1BfRFVBTF8xNkJJVF9BTExPQygKKwkvKiBwb2ludGVyIHRvIGZvcmdyb3VuZCB0YXNrIHRyZWUgaGVhZGVyIGZvciB1c2UgaW4gbmV4dCB0YXNrIHNlYXJjaCAqLworCSAgICBmZ190YXNrX3RyZWVfaGRyX3B0ciwJICAvKiBIT1NUICovCQkKKwkvKiBEYXRhIHN0cnVjdHVyZSBmb3IgY29udHJvbGxpbmcgc3luY2hyb25vdXMgbGluayB1cGRhdGUgKi8KKwkgICAgaGZnX3N5bmNfdXBkYXRlX3B0ciAgICAgICAgICAgLyogSE9TVCAqLworCSkKKyAgCisJX19fRFNQX0RVQUxfMTZCSVRfQUxMT0MoCisJICAgICBiZWdpbl9mb3JlZ3JvdW5kX0ZDTlQsICAvKiBTUCAqLworCS8qIFBsYWNlIGhvbGRlciBmb3IgaG9sZGluZyBzbGVlcCB0aW1pbmcgKi8KKwkgICAgIGxhc3RfRkNOVF9iZWZvcmVfc2xlZXAgIC8qIFNQICovCisJKQorCisJX19fRFNQX0RVQUxfMTZCSVRfQUxMT0MoCisJICAgIHVudXNlZDcsICAgICAgICAgICAvKiBTUCAqLworCSAgICBuZXh0X3Rhc2tfdHJlZVB0ciAgLyogU1AgKi8KKwkpCisKKwl1MzIgdW51c2VkNTsgICAgICAgIAorCisJX19fRFNQX0RVQUxfMTZCSVRfQUxMT0MoCisJICAgIGFjdGl2ZV9mbGFncywgICAvKiBTUCAqLworCS8qIFN0YXRlIGZsYWdzLCB1c2VkIHRvIGFzc2lzdCBjb250cm9sIG9mIGV4ZWN1dGlvbiBvZiBIeXBlciBGb3Jncm91bmQgKi8KKwkgICAgSEZHX2ZsYWdzICAgICAgIC8qIFNQICovCisJKQorCisJX19fRFNQX0RVQUxfMTZCSVRfQUxMT0MoCisJICAgIHVudXNlZDksCisJICAgIHVudXNlZDgKKwkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwkvKiBTcGFjZSBmb3Igc2F2aW5nIGVub3VnaCBjb250ZXh0IHNvIHRoYXQgd2UgY2FuIHNldCB1cCBlbm91Z2ggCisJICAgdG8gc2F2ZSBzb21lIG1vcmUgY29udGV4dC4KKwkqLworCXUzMiByRkVfc2F2ZV9mb3JfaW52YWxpZF9JUDsKKwl1MzIgcjMyX3NhdmVfZm9yX3NwdXJpb3VzX2ludDsKKwl1MzIgcjMyX3NhdmVfZm9yX3RyYXA7CisJdTMyIHIzMl9zYXZlX2Zvcl9IRkc7Cit9IHNwb3NfY29udHJvbF9ibG9ja190OworCisvKiBTUEIgZm9yIE1JWF9UT19PU1RSRUFNIGFsZ29yaXRobSBmYW1pbHkgKi8KK3R5cGVkZWYgc3RydWN0IF9taXgyX29zdHJlYW1fc3BiX3QKK3sKKwkvKiAxNmIuMTZiIGludGVnZXIuZnJhYyBhcHByb3hpbWF0aW9uIHRvIHRoZQorCSAgIG51bWJlciBvZiAzIHNhbXBsZSB0cmlwbGV0cyB0byBvdXRwdXQgZWFjaAorCSAgIGZyYW1lLiAoYXBwcm94aW1hdGlvbiBtdXN0IGJlIGZsb29yLCB0bworCSAgIGluc3VyZSB0aGF0IHRoZSBmcmFjdGlvbmFsIGVycm9yIGlzIGFsd2F5cworCSAgIHBvc2l0aXZlKQorCSovCisJdTMyIG91dFRyaXBsZXRzUGVyRnJhbWU7CisKKwkvKiAxNmIuMTZiIGludGVnZXIuZnJhYyBhY2N1bXVsYXRlZCBudW1iZXIgb2YKKwkgICBvdXRwdXQgdHJpcGxldHMgc2luY2UgdGhlIHN0YXJ0IG9mIGdyb3VwIAorCSovCisJdTMyIGFjY3VtT3V0VHJpcGxldHM7ICAKK30gbWl4Ml9vc3RyZWFtX3NwYl90OworCisvKiBTQ0IgZm9yIFRpbWluZyBtYXN0ZXIgYWxnb3JpdGhtICovCit0eXBlZGVmIHN0cnVjdCBfdGltaW5nX21hc3Rlcl9zY2JfdCB7CisJLyogRmlyc3QgMTIgZHdvcmRzIGZyb20gZ2VuZXJpY19zY2JfdCAqLworCWJhc2ljX2RtYV9yZXFfdCAgYmFzaWNfcmVxOyAgLyogT3B0aW9uYWwgKi8KKwlzY2F0dGVyX2dhdGhlcl9leHRfdCBzZ19leHQ7ICAvKiBPcHRpb25hbCAqLworCV9fX0RTUF9EVUFMXzE2QklUX0FMTE9DKAorCSAgICBuZXh0X3NjYiwgICAgIC8qIFJFUVVJUkVEICovCisJICAgIHN1Yl9saXN0X3B0ciAgLyogUkVRVUlSRUQgKi8KKwkpCisKKwlfX19EU1BfRFVBTF8xNkJJVF9BTExPQygKKwkgICAgZW50cnlfcG9pbnQsICAvKiBSRVFVSVJFRCAqLworCSAgICB0aGlzX3NwYiAgICAgIC8qIFJFUVVJUkVEICovCisJKQorCisJX19fRFNQX0RVQUxfMTZCSVRfQUxMT0MoCisJLyogSW5pdGlhbCB2YWx1ZXMgYXJlIDAwMDA6eHh4eCAqLworIAkgICAgcmVzZXJ2ZWQsCisJICAgIGV4dHJhX3NhbXBsZV9hY2N1bQorCSkKKworICAKKwkvKiBJbml0aWFsIHZhbHVlcyBhcmUgeHh4eDowMDAwCisJICAgaGk6IEN1cnJlbnQgQ09ERUMgb3V0cHV0IEZJRk8gcG9pbnRlcgorCSAgICAgICAoMCB0byAweDBmKQorICAgICAgICAgICBsbzogRmxhZyBpbmRpY2F0aW5nIHRoYXQgdGhlIENPREVDCisJICAgICAgIEZJRk8gaXMgc3luYydkIChob3N0IGNsZWFycyB0bworCSAgICAgICByZXN5bmNocm9uaXplIHRoZSBGSUZPIHBvaW50ZXIKKwkgICAgICAgdXBvbiBzdGFydC9yZXN0YXJ0KSAKKwkqLworCV9fX0RTUF9EVUFMXzE2QklUX0FMTE9DKAorCSAgICBjb2RlY19GSUZPX3N5bmNkLCAKKwkgICAgY29kZWNfRklGT19wdHIKKwkpCisgIAorCS8qIEluaXQuIDgwMDA6MDAwNSBmb3IgNDQuMWsKKyAgICAgICAgICAgICAgICAgODAwMDowMDAxIGZvciA0OGsKKwkgICBoaTogRnJhY3Rpb25hbCBzYW1wbGUgYWNjdW11bGF0b3IgMC4xNmIKKwkgICBsbzogTnVtYmVyIG9mIGZyYW1lcyByZW1haW5pbmcgdG8gYmUKKwkgICAgICAgcHJvY2Vzc2VkIGluIHRoZSBjdXJyZW50IGdyb3VwIG9mCisJICAgICAgIGZyYW1lcworCSovCisJX19fRFNQX0RVQUxfMTZCSVRfQUxMT0MoCisJICAgIGZyYWNfc2FtcF9hY2N1bV9xbTEsCisJICAgIFRNX2ZybXNfbGVmdF9pbl9ncm91cAorCSkgCisKKwkvKiBJbml0LiAwMDAxOjAwMDUgZm9yIDQ0LjFrCisgICAgICAgICAgICAgICAgIDAwMDA6MDAwMSBmb3IgNDhrCisJICAgaGk6IEZyYWN0aW9uYWwgc2FtcGxlIGNvcnJlY3Rpb24gZmFjdG9yIDAuMTZiCisJICAgICAgIHRvIGJlIGFkZGVkIGV2ZXJ5IGZyYW1lR3JvdXBMZW5ndGggZnJhbWVzCisJICAgICAgIHRvIGNvcnJlY3QgZm9yIHRydW5jYXRpb24gZXJyb3IgaW4KKwkgICAgICAgbnNhbXBfcGVyX2ZybV9xMTUKKwkgICBsbzogTnVtYmVyIG9mIGZyYW1lcyBpbiB0aGUgZ3JvdXAKKwkqLworCV9fX0RTUF9EVUFMXzE2QklUX0FMTE9DKAorCSAgICBmcmFjX3NhbXBfY29ycmVjdGlvbl9xbTEsCisJICAgIFRNX2ZybV9ncm91cF9sZW5ndGggIAorCSkKKworCS8qIEluaXQuIDQ0LjFrKjY1NTM2LzhrID0gMHgwMDA1ODMzMyBmb3IgNDQuMWsKKyAgICAgICAgICAgICAgICAgNDhrKjY1NTM2LzhrID0gMHgwMDA2MDAwMCBmb3IgNDhrCisJICAgMTZiLjE2YiBpbnRlZ2VyLmZyYWMgYXBwcm94aW1hdGlvbiB0byB0aGUKKwkgICBudW1iZXIgb2Ygc2FtcGxlcyB0byBvdXRwdXQgZWFjaCBmcmFtZS4KKwkgICAoYXBwcm94aW1hdGlvbiBtdXN0IGJlIGZsb29yLCB0byBpbnN1cmUgKi8KKwl1MzIgbnNhbXBfcGVyX2ZybV9xMTU7Cit9IHRpbWluZ19tYXN0ZXJfc2NiX3Q7CisKKy8qIFNDQiBmb3IgQ09ERUMgb3V0cHV0IGFsZ29yaXRobSAqLwordHlwZWRlZiBzdHJ1Y3QgX2NvZGVjX291dHB1dF9zY2JfdCB7CisJLyogRmlyc3QgMTMgZHdvcmRzIGZyb20gZ2VuZXJpY19zY2JfdCAqLworCWJhc2ljX2RtYV9yZXFfdCAgYmFzaWNfcmVxOyAgLyogT3B0aW9uYWwgKi8KKwlzY2F0dGVyX2dhdGhlcl9leHRfdCBzZ19leHQ7ICAvKiBPcHRpb25hbCAqLworCV9fX0RTUF9EVUFMXzE2QklUX0FMTE9DKAorCSAgICBuZXh0X3NjYiwgICAgICAgLyogUkVRVUlSRUQgKi8KKwkgICAgc3ViX2xpc3RfcHRyICAgIC8qIFJFUVVJUkVEICovCisJKQorCisJX19fRFNQX0RVQUxfMTZCSVRfQUxMT0MoCisJICAgIGVudHJ5X3BvaW50LCAgICAvKiBSRVFVSVJFRCAqLworCSAgICB0aGlzX3NwYiAgICAgICAgLyogUkVRVUlSRUQgKi8KKwkpCisKKwl1MzIgc3RybV9yc19jb25maWc7IC8qIFJFUVVJUkVEICovCisKKwl1MzIgc3RybV9idWZfcHRyOyAgIC8qIFJFUVVJUkVEICovCisKKwkvKiBOT1RFOiBUaGUgQ09ERUMgb3V0cHV0IHRhc2sgcmVhZHMgc2FtcGxlcyBmcm9tIHRoZSBmaXJzdCB0YXNrIG9uIGl0cworICAgICAgICAgICAgICAgICBzdWJsaXN0IGF0IHRoZSBzdHJlYW0gYnVmZmVyIHBvaW50ZXIgKGluaXQuIHRvIGxhZyBETUEgZGVzdGluYXRpb24KKwkJIGFkZHJlc3Mgd29yZCkuICBBZnRlciB0aGUgcmVxdWlyZWQgbnVtYmVyIG9mIHNhbXBsZXMgaXMgdHJhbnNmZXJyZWQsCisJCSB0aGUgQ09ERUMgb3V0cHV0IHRhc2sgYWR2YW5jZXMgc3ViX2xpc3RfcHRyLT5zdHJtX2J1Zl9wdHIgcGFzdCB0aGUgc2FtcGxlcworCQkgY29uc3VtZWQuCisJKi8KKworCS8qIEluaXQuIDAwMDA6MDAxMCBmb3IgU0RvdXQKKyAgICAgICAgICAgICAgICAgMDA2MDowMDEwIGZvciBTRG91dDIKKwkJIDAwODA6MDAxMCBmb3IgU0RvdXQzCisJICAgaGk6IEJhc2UgSU8gYWRkcmVzcyBvZiBGSUZPIHRvIHdoaWNoCisJICAgICAgIHRoZSBsZWZ0LWNoYW5uZWwgc2FtcGxlcyBhcmUgdG8KKwkgICAgICAgYmUgd3JpdHRlbi4KKwkgICBsbzogRGlzcGxhY2VtZW50IGZvciB0aGUgYmFzZSBJTworCSAgICAgICBhZGRyZXNzIGZvciBsZWZ0LWNoYW5uZWwgdG8gb2J0YWluCisJICAgICAgIHRoZSBiYXNlIElPIGFkZHJlc3MgZm9yIHRoZSBGSUZPCisJICAgICAgIHRvIHdoaWNoIHRoZSByaWdodC1jaGFubmVsIHNhbXBsZXMKKwkgICAgICAgYXJlIHRvIGJlIHdyaXR0ZW4uCisJKi8KKwlfX19EU1BfRFVBTF8xNkJJVF9BTExPQygKKwkgICAgbGVmdF9jaGFuX2Jhc2VfSU9fYWRkciwKKwkgICAgcmlnaHRfY2hhbl9JT19kaXNwCisJKQorCisKKwkvKiBJbml0OiAweDAwODA6MDAwNCBmb3Igbm9uLUFDLTk3CisJICAgSW5pdDogMHgwMDgwOjAwMDAgZm9yIEFDLTk3CisJICAgaGk6IEV4cG9uZW50aWFsIHZvbHVtZSBjaGFuZ2UgcmF0ZQorCSAgICAgICBmb3IgaW5wdXQgc3RyZWFtCisJICAgbG86IFBvc2l0aXZlIHNoaWZ0IGNvdW50IHRvIHNoaWZ0IHRoZQorCSAgICAgICAxNi1iaXQgaW5wdXQgc2FtcGxlIHRvIG9idGFpbiB0aGUKKwkgICAgICAgMzItYml0IG91dHB1dCB3b3JkCisJKi8KKwlfX19EU1BfRFVBTF8xNkJJVF9BTExPQygKKwkgICAgQ09fc2NhbGVfc2hpZnRfY291bnQsIAorCSAgICBDT19leHBfdm9sX2NoYW5nZV9yYXRlCisJKQorCisJLyogUG9pbnRlciB0byBTQ0IgYXQgZW5kIG9mIGlucHV0IGNoYWluICovCisJX19fRFNQX0RVQUxfMTZCSVRfQUxMT0MoCisJICAgIHJlc2VydmVkLAorCSAgICBsYXN0X3N1Yl9wdHIKKwkpCit9IGNvZGVjX291dHB1dF9zY2JfdDsKKworLyogU0NCIGZvciBDT0RFQyBpbnB1dCBhbGdvcml0aG0gKi8KK3R5cGVkZWYgc3RydWN0IF9jb2RlY19pbnB1dF9zY2JfdCB7CisJLyogRmlyc3QgMTMgZHdvcmRzIGZyb20gZ2VuZXJpY19zY2JfdCAqLworCWJhc2ljX2RtYV9yZXFfdCAgYmFzaWNfcmVxOyAgLyogT3B0aW9uYWwgKi8KKwlzY2F0dGVyX2dhdGhlcl9leHRfdCBzZ19leHQ7ICAvKiBPcHRpb25hbCAqLworCV9fX0RTUF9EVUFMXzE2QklUX0FMTE9DKAorCSAgICBuZXh0X3NjYiwgICAgICAgLyogUkVRVUlSRUQgKi8KKwkgICAgc3ViX2xpc3RfcHRyICAgIC8qIFJFUVVJUkVEICovCisJKQorCisJX19fRFNQX0RVQUxfMTZCSVRfQUxMT0MoCisJICAgIGVudHJ5X3BvaW50LCAgICAvKiBSRVFVSVJFRCAqLworCSAgICB0aGlzX3NwYiAgICAgICAgLyogUkVRVUlSRUQgKi8KKwkpCisKKwl1MzIgc3RybV9yc19jb25maWc7IC8qIFJFUVVJUkVEICovCisJdTMyIHN0cm1fYnVmX3B0cjsgICAvKiBSRVFVSVJFRCAqLworCisJLyogTk9URTogVGhlIENPREVDIGlucHV0IHRhc2sgcmVhZHMgc2FtcGxlcyBmcm9tIHRoZSBoYXJkd2FyZSBGSUZPIAorICAgICAgICAgICAgICAgICBzdWJsaXN0IGF0IHRoZSBETUEgc291cmNlIGFkZHJlc3Mgd29yZCAoc3ViX2xpc3RfcHRyLT5iYXNpY19yZXEuc2F3KS4KKyAgICAgICAgICAgICAgICAgQWZ0ZXIgdGhlIHJlcXVpcmVkIG51bWJlciBvZiBzYW1wbGVzIGlzIHRyYW5zZmVycmVkLCB0aGUgQ09ERUMKKyAgICAgICAgICAgICAgICAgb3V0cHV0IHRhc2sgYWR2YW5jZXMgc3ViX2xpc3RfcHRyLT5iYXNpY19yZXEuc2F3IHBhc3QgdGhlIHNhbXBsZXMKKyAgICAgICAgICAgICAgICAgY29uc3VtZWQuICBTUHVEIG11c3QgaW5pdGlhbGl6ZSB0aGUgc3ViX2xpc3RfcHRyLT5iYXNpY19yZXEuc2F3CisgICAgICAgICAgICAgICAgIHRvIHBvaW50IGhhbGYtd2F5IGFyb3VuZCBmcm9tIHRoZSBpbml0aWFsIHN1Yl9saXN0X3B0ci0+c3RybV9udWZfcHRyCisgICAgICAgICAgICAgICAgIHRvIGFsbG93IGZvciBsYWcvbGVhZC4KKwkqLworCisJLyogSW5pdC4gMDAwMDowMDEwIGZvciBTRG91dAorICAgICAgICAgICAgICAgICAwMDYwOjAwMTAgZm9yIFNEb3V0MgorCQkgMDA4MDowMDEwIGZvciBTRG91dDMKKwkgICBoaTogQmFzZSBJTyBhZGRyZXNzIG9mIEZJRk8gdG8gd2hpY2gKKwkgICAgICAgdGhlIGxlZnQtY2hhbm5lbCBzYW1wbGVzIGFyZSB0bworCSAgICAgICBiZSB3cml0dGVuLgorCSAgIGxvOiBEaXNwbGFjZW1lbnQgZm9yIHRoZSBiYXNlIElPCisJICAgICAgIGFkZHJlc3MgZm9yIGxlZnQtY2hhbm5lbCB0byBvYnRhaW4KKwkgICAgICAgdGhlIGJhc2UgSU8gYWRkcmVzcyBmb3IgdGhlIEZJRk8KKwkgICAgICAgdG8gd2hpY2ggdGhlIHJpZ2h0LWNoYW5uZWwgc2FtcGxlcworCSAgICAgICBhcmUgdG8gYmUgd3JpdHRlbi4KKwkqLworCV9fX0RTUF9EVUFMXzE2QklUX0FMTE9DKAorCSAgICByaWdodENoYW5JTmRpc3AsIAorCSAgICBsZWZ0X2NoYW5fYmFzZV9JTl9hZGRyCisJKQorCS8qIEluaXQuID86ZmZmYworCSAgIGxvOiBOZWdhdGl2ZSBzaGlmdCBjb3VudCB0byBzaGlmdCB0aGUKKwkgICAgICAgMzItYml0IGlucHV0IGR3b3JkIHRvIG9idGFpbiB0aGUKKwkgICAgICAgMTYtYml0IHNhbXBsZSBtc2ItYWxpZ25lZCAoY291bnQKKwkgICAgICAgaXMgbmVnYXRpdmUgdG8gc2hpZnQgbGVmdCkKKwkqLworCV9fX0RTUF9EVUFMXzE2QklUX0FMTE9DKAorCSAgICBzY2FsZVNoaWZ0Q291bnQsIAorCSAgICByZXNlcnZlcjEKKwkpCisKKwl1MzIgIHJlc2VydmVkMjsKK30gY29kZWNfaW5wdXRfc2NiX3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QgX3BjbV9zZXJpYWxfaW5wdXRfc2NiX3QgeworCS8qIEZpcnN0IDEzIGR3b3JkcyBmcm9tIGdlbmVyaWNfc2NiX3QgKi8KKwliYXNpY19kbWFfcmVxX3QgIGJhc2ljX3JlcTsgIC8qIE9wdGlvbmFsICovCisJc2NhdHRlcl9nYXRoZXJfZXh0X3Qgc2dfZXh0OyAgLyogT3B0aW9uYWwgKi8KKwlfX19EU1BfRFVBTF8xNkJJVF9BTExPQygKKwkgICAgbmV4dF9zY2IsICAgICAgIC8qIFJFUVVJUkVEICovCisJICAgIHN1Yl9saXN0X3B0ciAgICAvKiBSRVFVSVJFRCAqLworCSkKKworCV9fX0RTUF9EVUFMXzE2QklUX0FMTE9DKAorCSAgICBlbnRyeV9wb2ludCwgICAgLyogUkVRVUlSRUQgKi8KKwkgICAgdGhpc19zcGIgICAgICAgIC8qIFJFUVVJUkVEICovCisJKQorCisJdTMyIHN0cm1fYnVmX3B0cjsgICAvKiBSRVFVSVJFRCAqLworCXUzMiBzdHJtX3JzX2NvbmZpZzsgLyogUkVRVUlSRUQgKi8KKyAgCisJLyogSW5pdC4gUHRyIHRvIENPREVDIGlucHV0IFNDQgorCSAgIGhpOiBQb2ludGVyIHRvIHRoZSBTQ0IgY29udGFpbmluZyB0aGUKKwkgICAgICAgaW5wdXQgYnVmZmVyIHRvIHdoaWNoIENPREVDIGlucHV0CisJICAgICAgIHNhbXBsZXMgYXJlIHdyaXR0ZW4KKwkgICBsbzogRmxhZyBpbmRpY2F0aW5nIHRoZSBsaW5rIHRvIHRoZSBDT0RFQworCSAgICAgICBpbnB1dCB0YXNrIGlzIHRvIGJlIGluaXRpYWxpemVkCisJKi8KKwlfX19EU1BfRFVBTF8xNkJJVF9BTExPQygKKwkgICAgaW5pdF9jb2RlY19pbnB1dF9saW5rLAorCSAgICBjb2RlY19pbnB1dF9idWZfc2NiCisJKQorCisJLyogSW5pdGlhbGl6ZWQgYnkgdGhlIGhvc3QgKGhvc3QgdXBkYXRlcyB0YXJnZXQgdm9sdW1lcykgKi8KKwl2b2x1bWVfY29udHJvbF90IHBzaV92b2xfY3RybDsgICAKKyAgCit9IHBjbV9zZXJpYWxfaW5wdXRfc2NiX3Q7CisKK3R5cGVkZWYgc3RydWN0IF9zcmNfdGFza19zY2JfdCB7CisJX19fRFNQX0RVQUxfMTZCSVRfQUxMT0MoCisJICAgIGZyYW1lc19sZWZ0X2luX2dvZiwKKwkgICAgZ29mc19sZWZ0X2luX3NlYworCSkKKworCV9fX0RTUF9EVUFMXzE2QklUX0FMTE9DKAorCSAgICBjb25zdDJfdGhpcmRzLAorCSAgICBudW1fZXh0cmFfdG5wdXRfc2FtcGxlcworCSkKKworCV9fX0RTUF9EVUFMXzE2QklUX0FMTE9DKAorCSAgICBjb3JfcGVyX2dvZiwKKwkgICAgY29ycmVjdGlvbl9wZXJfc2VjIAorCSkKKworCV9fX0RTUF9EVUFMXzE2QklUX0FMTE9DKAorCSAgICBvdXRwdXRfYnVmX3Byb2R1Y2VyX3B0ciwgIAorCSAgICBqdW5rX0RNQV9NSUQKKwkpCisKKwlfX19EU1BfRFVBTF8xNkJJVF9BTExPQygKKwkgICAgZ29mX2xlbmd0aCwgIAorCSAgICBnb2ZzX3Blcl9zZWMKKwkpCisKKwl1MzIgaW5wdXRfYnVmX3N0cm1fY29uZmlnOworCisJX19fRFNQX0RVQUxfMTZCSVRfQUxMT0MoCisJICAgIHJlc2VydmVkX2Zvcl9TUkNfdXNlLAorCSAgICBpbnB1dF9idWZfY29uc3VtZXJfcHRyCisJKQorCisJdTMyIGFjY3VtX3BoaTsKKworCV9fX0RTUF9EVUFMXzE2QklUX0FMTE9DKAorCSAgICBleHBfc3JjX3ZvbF9jaGFuZ2VfcmF0ZSwKKwkgICAgaW5wdXRfYnVmX3Byb2R1Y2VyX3B0cgorCSkKKworCV9fX0RTUF9EVUFMXzE2QklUX0FMTE9DKAorCSAgICBzcmNfbmV4dF9zY2IsCisJICAgIHNyY19zdWJfbGlzdF9wdHIKKwkpCisKKwlfX19EU1BfRFVBTF8xNkJJVF9BTExPQygKKwkgICAgc3JjX2VudHJ5X3BvaW50LAorCSAgICBzcmNfdGhpc19zYnAKKwkpCisKKwl1MzIgIHNyY19zdHJtX3JzX2NvbmZpZzsKKwl1MzIgIHNyY19zdHJtX2J1Zl9wdHI7CisgIAorCXUzMiAgIHBoaUluY3I2aW50XzI2ZnJhYzsKKyAgCisJdm9sdW1lX2NvbnRyb2xfdCBzcmNfdm9sX2N0cmw7Cit9IHNyY190YXNrX3NjYl90OworCit0eXBlZGVmIHN0cnVjdCBfZGVjaW1hdGVfYnlfcG93Ml9zY2JfdCB7CisJLyogZGVjaW1hdGlvbkZhY3RvciA9IDIsIDQsIG9yIDggKGxhcmdlciBmYWN0b3JzIHdhc3RlIHRvbyBtdWNoIG1lbW9yeQorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIGNvbXBhcmVkIHRvIGNhc2NhZGluZyBkZWNpbWF0b3JzKQorCSovCisJX19fRFNQX0RVQUxfMTZCSVRfQUxMT0MoCisJICAgIGRlYzJfY29lZl9iYXNlX3B0ciwKKwkgICAgZGVjMl9jb2VmX2luY3JlbWVudAorCSkKKworCS8qIGNvZWZJbmNyZW1lbnQgPSAxMjggLyBkZWNpbWF0aW9uRmFjdG9yIChmb3Igb3VyIFJPTSBmaWx0ZXIpCisJICAgY29lZkJhc2VQdHIgPSAweDgwMDAgKGZvciBvdXIgUk9NIGZpbHRlcikKKwkqLworCV9fX0RTUF9EVUFMXzE2QklUX0FMTE9DKAorCSAgICBkZWMyX2luX3NhbXBsZXNfcGVyX291dF90cmlwbGV0LAorCSAgICBkZWMyX2V4dHJhX2luX3NhbXBsZXMKKwkpCisJLyogZXh0cmFJblNhbXBsZXM6ICMgb2YgYWNjdW11bGF0ZWQsIHVudXNlZCBpbnB1dCBzYW1wbGVzIChpbml0LiB0byAwKQorCSAgIGluU2FtcGxlc1Blck91dFRyaXBsZXQgPSAzICogZGVjaW1hdGlvbkZhY3RvcgorCSovCisKKwlfX19EU1BfRFVBTF8xNkJJVF9BTExPQygKKwkgICAgZGVjMl9jb25zdDJfdGhpcmRzLAorCSAgICBkZWMyX2hhbGZfbnVtX3RhcHNfbXA1CisJKQorCS8qIGhhbGZOdW1UYXBzTTU6ICgxLzIgbnVtYmVyIG9mIHRhcHMgaW4gZGVjaW1hdGlvbiBmaWx0ZXIpIG1pbnVzIDUKKwkgICBjb25zdDJ0aGlyZHM6IGNvbnN0YW50IDIvMyBpbiAxNlEwIGZvcm1hdCAoc2lnbi4xNSkKKwkqLworCisJX19fRFNQX0RVQUxfMTZCSVRfQUxMT0MoCisJICAgIGRlYzJfb3V0cHV0X2J1Zl9wcm9kdWNlcl9wdHIsCisJICAgIGRlYzJfanVua2RtYV9taWQKKwkpCisKKwl1MzIgIGRlYzJfcmVzZXJ2ZWQyOworCisJdTMyICBkZWMyX2lucHV0X251Zl9zdHJtX2NvbmZpZzsKKwkvKiBpbnB1dEJ1ZlN0cm1Db25maWc6IHJzQ29uZmlnIGZvciB0aGUgaW5wdXQgYnVmZmVyIHRvIHRoZSBkZWNpbWF0b3IKKwkgICAoYnVmZmVyIHNpemUgPSBkZWNpbWF0aW9uRmFjdG9yICogMzIgZHdvcmRzKQorCSovCisKKwlfX19EU1BfRFVBTF8xNkJJVF9BTExPQygKKwkgICAgZGVjMl9waGlfaW5jciwKKwkgICAgZGVjMl9pbnB1dF9idWZfY29uc3VtZXJfcHRyCisJKQorCS8qIGlucHV0QnVmQ29uc3VtZXJQdHI6IElucHV0IGJ1ZmZlciByZWFkIHBvaW50ZXIgKGludG8gU1JDIGZpbHRlcikKKwkgICBwaGlJbmNyID0gZGVjaW1hdGlvbkZhY3RvciAqIDQKKwkqLworCisJdTMyIGRlYzJfcmVzZXJ2ZWQzOworCisJX19fRFNQX0RVQUxfMTZCSVRfQUxMT0MoCisJICAgIGRlYzJfZXhwX3ZvbF9jaGFuZ2VfcmF0ZSwKKwkgICAgZGVjMl9pbnB1dF9idWZfcHJvZHVjZXJfcHRyCisJKQorCS8qIGlucHV0QnVmUHJvZHVjZXJQdHI6IElucHV0IGJ1ZmZlciB3cml0ZSBwb2ludGVyCisJICAgZXhwVm9sQ2hhbmdlUmF0ZTogRXhwb25lbnRpYWwgdm9sdW1lIGNoYW5nZSByYXRlIGZvciBwb3NzaWJsZQorCSAgICAgICAgICAgICAgICAgICAgIGZ1dHVyZSBtaXhlciBvbiBpbnB1dCBzdHJlYW1zCisJKi8KKworCV9fX0RTUF9EVUFMXzE2QklUX0FMTE9DKAorCSAgICBkZWMyX25leHRfc2NiLAorCSAgICBkZWMyX3N1Yl9saXN0X3B0cgorCSkKKworCV9fX0RTUF9EVUFMXzE2QklUX0FMTE9DKAorCSAgICBkZWMyX2VudHJ5X3BvaW50LAorCSAgICBkZWMyX3RoaXNfc3BiCisJKQorCisJdTMyICBkZWMyX3N0cm1fcnNfY29uZmlnOworCXUzMiAgZGVjMl9zdHJtX2J1Zl9wdHI7CisKKwl1MzIgIGRlYzJfcmVzZXJ2ZWQ0OworCisJdm9sdW1lX2NvbnRyb2xfdCBkZWMyX3ZvbF9jdHJsOyAvKiBOb3QgdXNlZCEgKi8KK30gZGVjaW1hdGVfYnlfcG93Ml9zY2JfdDsKKwordHlwZWRlZiBzdHJ1Y3QgX3ZhcmlfZGVjaW1hdGVfc2NiX3QgeworCV9fX0RTUF9EVUFMXzE2QklUX0FMTE9DKAorCSAgICB2ZGVjX2ZyYW1lc19sZWZ0X2luX2dvZiwKKwkgICAgdmRlY19nb2ZzX2xlZnRfaW5fc2VjCisJKQorCisJX19fRFNQX0RVQUxfMTZCSVRfQUxMT0MoCisJICAgIHZkZWNfY29uc3QyX3RoaXJkcywKKwkgICAgdmRlY19leHRyYV9pbl9zYW1wbGVzCisJKQorCS8qIGV4dHJhSW5TYW1wbGVzOiAjIG9mIGFjY3VtdWxhdGVkLCB1bnVzZWQgaW5wdXQgc2FtcGxlcyAoaW5pdC4gdG8gMCkKKwkgICBjb25zdDJ0aGlyZHM6IGNvbnN0YW50IDIvMyBpbiAxNlEwIGZvcm1hdCAoc2lnbi4xNSkgKi8KKworCV9fX0RTUF9EVUFMXzE2QklUX0FMTE9DKAorCSAgICB2ZGVjX2Nvcl9wZXJfZ29mLAorCSAgICB2ZGVjX2NvcnJlY3Rpb25fcGVyX3NlYworCSkKKworCV9fX0RTUF9EVUFMXzE2QklUX0FMTE9DKAorCSAgICB2ZGVjX291dHB1dF9idWZfcHJvZHVjZXJfcHRyLAorCSAgICB2ZGVjX2lucHV0X2J1Zl9jb25zdW1lcl9wdHIKKwkpCisJLyogaW5wdXRCdWZDb25zdW1lclB0cjogSW5wdXQgYnVmZmVyIHJlYWQgcG9pbnRlciAoaW50byBTUkMgZmlsdGVyKSAqLworCV9fX0RTUF9EVUFMXzE2QklUX0FMTE9DKAorCSAgICB2ZGVjX2dvZl9sZW5ndGgsCisJICAgIHZkZWNfZ29mc19wZXJfc2VjCisJKQorCisJdTMyICB2ZGVjX2lucHV0X2J1Zl9zdHJtX2NvbmZpZzsKKwkvKiBpbnB1dEJ1ZlN0cm1Db25maWc6IHJzQ29uZmlnIGZvciB0aGUgaW5wdXQgYnVmZmVyIHRvIHRoZSBkZWNpbWF0b3IKKwkgICAoYnVmZmVyIHNpemUgPSA2NCBkd29yZHMpICovCisJdTMyICB2ZGVjX2NvZWZfaW5jcmVtZW50OworCS8qIGNvZWZJbmNyZW1lbnQgPSAtIDEyOC4wIC8gZGVjaW1hdGlvbkZhY3RvciAoYXMgYSAzMlExNSBudW1iZXIpICovCisKKwl1MzIgIHZkZWNfYWNjdW1waGk7CisJLyogYWNjdW1QaGk6IGFjY3VtdWxhdGVkIGZyYWN0aW9uYWwgcGhhc2UgaW5jcmVtZW50ICg2LjI2KSAqLworCisJX19fRFNQX0RVQUxfMTZCSVRfQUxMT0MoCisgCSAgICB2ZGVjX2V4cF92b2xfY2hhbmdlX3JhdGUsCisJICAgIHZkZWNfaW5wdXRfYnVmX3Byb2R1Y2VyX3B0cgorCSkKKwkvKiBpbnB1dEJ1ZlByb2R1Y2VyUHRyOiBJbnB1dCBidWZmZXIgd3JpdGUgcG9pbnRlcgorCSAgIGV4cFZvbENoYW5nZVJhdGU6IEV4cG9uZW50aWFsIHZvbHVtZSBjaGFuZ2UgcmF0ZSBmb3IgcG9zc2libGUKKwkgICBmdXR1cmUgbWl4ZXIgb24gaW5wdXQgc3RyZWFtcyAqLworCisJX19fRFNQX0RVQUxfMTZCSVRfQUxMT0MoCisJICAgIHZkZWNfbmV4dF9zY2IsCisJICAgIHZkZWNfc3ViX2xpc3RfcHRyCisJKQorCisJX19fRFNQX0RVQUxfMTZCSVRfQUxMT0MoCisJICAgIHZkZWNfZW50cnlfcG9pbnQsCisJICAgIHZkZWNfdGhpc19zcGIKKwkpCisKKwl1MzIgdmRlY19zdHJtX3JzX2NvbmZpZzsKKwl1MzIgdmRlY19zdHJtX2J1Zl9wdHI7CisKKwl1MzIgdmRlY19waGlfaW5jcl82aW50XzI2ZnJhYzsKKworCXZvbHVtZV9jb250cm9sX3QgdmRlY192b2xfY3RybDsKK30gdmFyaV9kZWNpbWF0ZV9zY2JfdDsKKworCisvKiBTQ0IgZm9yIE1JWF9UT19PU1RSRUFNIGFsZ29yaXRobSBmYW1pbHkgKi8KK3R5cGVkZWYgc3RydWN0IF9taXgyX29zdHJlYW1fc2NiX3QgeworCS8qIEZpcnN0IDEzIGR3b3JkcyBmcm9tIGdlbmVyaWNfc2NiX3QgKi8KKwliYXNpY19kbWFfcmVxX3QgIGJhc2ljX3JlcTsgIC8qIE9wdGlvbmFsICovCisJc2NhdHRlcl9nYXRoZXJfZXh0X3Qgc2dfZXh0OyAgLyogT3B0aW9uYWwgKi8KKwlfX19EU1BfRFVBTF8xNkJJVF9BTExPQygKKwkgICAgbmV4dF9zY2IsICAgICAgIC8qIFJFUVVJUkVEICovCisJICAgIHN1Yl9saXN0X3B0ciAgICAvKiBSRVFVSVJFRCAqLworCSkKKworCV9fX0RTUF9EVUFMXzE2QklUX0FMTE9DKAorCSAgICBlbnRyeV9wb2ludCwgICAgLyogUkVRVUlSRUQgKi8KKwkgICAgdGhpc19zcGIgICAgICAgIC8qIFJFUVVJUkVEICovCisJKQorCisJdTMyIHN0cm1fcnNfY29uZmlnOyAvKiBSRVFVSVJFRCAqLworCXUzMiBzdHJtX2J1Zl9wdHI7ICAgLyogUkVRVUlSRUQgKi8KKworCisJLyogaGk6IE51bWJlciBvZiBtaXhlZC1kb3duIGlucHV0IHRyaXBsZXRzCisJICAgICAgIGNvbXB1dGVkIHNpbmNlIHN0YXJ0IG9mIGdyb3VwCisJICAgbG86IE51bWJlciBvZiBmcmFtZXMgcmVtYWluaW5nIHRvIGJlCisJICAgICAgIHByb2Nlc3NlZCBpbiB0aGUgY3VycmVudCBncm91cCBvZgorCSAgICAgICBmcmFtZXMKKwkqLworCV9fX0RTUF9EVUFMXzE2QklUX0FMTE9DKAorCSAgICBmcmFtZXNfbGVmdF9pbl9ncm91cCwKKwkgICAgYWNjdW1faW5wdXRfdHJpcGxldHMKKwkpCisKKwkvKiBoaTogRXhwb25lbnRpYWwgdm9sdW1lIGNoYW5nZSByYXRlCisJICAgICAgIGZvciBtaXhlciBvbiBpbnB1dCBzdHJlYW1zCisJICAgbG86IE51bWJlciBvZiBmcmFtZXMgaW4gdGhlIGdyb3VwCisJKi8KKwlfX19EU1BfRFVBTF8xNkJJVF9BTExPQygKKwkgICAgZnJhbWVfZ3JvdXBfbGVuZ3RoLAorCSAgICBleHBfdm9sX2NoYW5nZV9yYXRlCisJKQorICAKKwlfX19EU1BfRFVBTF8xNkJJVF9BTExPQygKKwkgICAgY29uc3RfRkZGRiwKKwkgICAgY29uc3RfemVybworCSkKK30gbWl4Ml9vc3RyZWFtX3NjYl90OworCisKKy8qIFNDQiBmb3IgUzE2X01JWCBhbGdvcml0aG0gKi8KK3R5cGVkZWYgc3RydWN0IF9taXhfb25seV9zY2JfdCB7CisJLyogRmlyc3QgMTMgZHdvcmRzIGZyb20gZ2VuZXJpY19zY2JfdCAqLworCWJhc2ljX2RtYV9yZXFfdCAgYmFzaWNfcmVxOyAgLyogT3B0aW9uYWwgKi8KKwlzY2F0dGVyX2dhdGhlcl9leHRfdCBzZ19leHQ7ICAvKiBPcHRpb25hbCAqLworCV9fX0RTUF9EVUFMXzE2QklUX0FMTE9DKAorCSAgICBuZXh0X3NjYiwgICAgICAgLyogUkVRVUlSRUQgKi8KKwkgICAgc3ViX2xpc3RfcHRyICAgIC8qIFJFUVVJUkVEICovCisJKQorCisJX19fRFNQX0RVQUxfMTZCSVRfQUxMT0MoCisJICAgIGVudHJ5X3BvaW50LCAgICAvKiBSRVFVSVJFRCAqLworCSAgICB0aGlzX3NwYiAgICAgICAgLyogUkVRVUlSRUQgKi8KKwkpCisKKwl1MzIgc3RybV9yc19jb25maWc7IC8qIFJFUVVJUkVEICovCisJdTMyIHN0cm1fYnVmX3B0cjsgICAvKiBSRVFVSVJFRCAqLworCisJdTMyIHJlc2VydmVkOworCXZvbHVtZV9jb250cm9sX3Qgdm9sX2N0cmw7Cit9IG1peF9vbmx5X3NjYl90OworCisvKiBTQ0IgZm9yIHRoZSBhc3luYy4gQ09ERUMgaW5wdXQgYWxnb3JpdGhtICovCit0eXBlZGVmIHN0cnVjdCBfYXN5bmNfY29kZWNfaW5wdXRfc2NiX3QgewkJIAorCXUzMiBpb19mcmVlMjsgICAgIAorICAKKwl1MzIgaW9fY3VycmVudF90b3RhbDsKKwl1MzIgaW9fcHJldmlvdXNfdG90YWw7CisgIAorCXUxNiBpb19jb3VudDsKKwl1MTYgaW9fY291bnRfbGltaXQ7CisgIAorCXUxNiBvX2ZpZm9fYmFzZV9hZGRyOyAgICAgICAgICAgIAorCXUxNiBvc3RfbW9fZm9ybWF0OworCS8qIDEgPSBzdGVyZW87IDAgPSBtb25vIAorCSAgIHh4eCBmb3IgQVNFUiAxIChub3QgYWxsb3dlZCk7IDExOCBmb3IgQVNFUjIgKi8KKworCXUzMiAgb3N0cm1fcnNfY29uZmlnOworCXUzMiAgb3N0cm1fYnVmX3B0cjsKKyAgCisJX19fRFNQX0RVQUxfMTZCSVRfQUxMT0MoCisJICAgIGlvX3NjbGtzX3Blcl9scl9jbGssCisJICAgIGlvX2lvX2VuYWJsZQorCSkKKworCXUzMiAgaW9fZnJlZTQ7CisKKwlfX19EU1BfRFVBTF8xNkJJVF9BTExPQyggIAorCSAgICBpb19uZXh0X3NjYiwKKwkgICAgaW9fc3ViX2xpc3RfcHRyCisJKQorCisJX19fRFNQX0RVQUxfMTZCSVRfQUxMT0MoCisJICAgIGlvX2VudHJ5X3BvaW50LAorCSAgICBpb190aGlzX3NwYgorCSkKKworCXUzMiBpc3RybV9yc19jb25maWc7CisJdTMyIGlzdHJtX2J1Zl9wdHI7CisKKwkvKiBJbml0LiAwMDAwOjgwNDI6IGZvciBBU0VSMQorICAgICAgICAgICAgICAgICAwMDAwOjgwNDQ6IGZvciBBU0VSMiAgKi8KKwlfX19EU1BfRFVBTF8xNkJJVF9BTExPQygKKwkgICAgaW9fc3RhdF9yZWdfYWRkciwKKwkgICAgaW9maWZvX3BvaW50ZXIKKwkpCisKKwkvKiBJbml0IDEgc3Rlcm86MTAwIEFTRVIxCisJICAgSW5pdCAwIG1vbm86MTEwIEFTRVIyIAorCSovCisJX19fRFNQX0RVQUxfMTZCSVRfQUxMT0MoCisJICAgIGlmaWZvX2Jhc2VfYWRkciwgICAgICAgICAgICAKKwkgICAgaXN0X21vX2Zvcm1hdAorCSkKKworCXUzMiBpX2ZyZWU7Cit9IGFzeW5jX2NvZGVjX2lucHV0X3NjYl90OworCisKKy8qIFNDQiBmb3IgdGhlIFNQL0RJRiBDT0RFQyBpbnB1dCBhbmQgb3V0cHV0ICovCit0eXBlZGVmIHN0cnVjdCBfc3BkaWZpc2NiX3QgeworCV9fX0RTUF9EVUFMXzE2QklUX0FMTE9DKAorCSAgICBzdGF0dXNfcHRyLCAgICAgCisJICAgIHN0YXR1c19zdGFydF9wdHIKKwkpCisKKwl1MzIgY3VycmVudF90b3RhbDsKKwl1MzIgcHJldmlvdXNfdG90YWw7CisKKwlfX19EU1BfRFVBTF8xNkJJVF9BTExPQygKKwkgICAgY291bnQsCisJICAgIGNvdW50X2xpbWl0CisJKQorCisJdTMyIHN0YXR1c19kYXRhOworCisJX19fRFNQX0RVQUxfMTZCSVRfQUxMT0MoICAKKwkgICAgc3RhdHVzLAorCSAgICBmcmVlNAorCSkKKworCXUzMiBmcmVlMzsKKworCV9fX0RTUF9EVUFMXzE2QklUX0FMTE9DKCAgCisJICAgIGZyZWUyLAorCSAgICBiaXRfY291bnQKKwkpCisKKwl1MzIgIHRlbXBfc3RhdHVzOworICAKKwlfX19EU1BfRFVBTF8xNkJJVF9BTExPQygKKwkgICAgbmV4dF9TQ0IsCisJICAgIHN1Yl9saXN0X3B0cgorCSkKKworCV9fX0RTUF9EVUFMXzE2QklUX0FMTE9DKAorCSAgICBlbnRyeV9wb2ludCwKKwkgICAgdGhpc19zcGIKKwkpCisKKwl1MzIgIHN0cm1fcnNfY29uZmlnOworCXUzMiAgc3RybV9idWZfcHRyOworICAKKwlfX19EU1BfRFVBTF8xNkJJVF9BTExPQygKKwkgICAgc3RhdF9yZWdfYWRkciwgCisJICAgIGZpZm9fcG9pbnRlcgorCSkKKworCV9fX0RTUF9EVUFMXzE2QklUX0FMTE9DKAorCSAgICBmaWZvX2Jhc2VfYWRkciwgCisJICAgIHN0X21vX2Zvcm1hdAorCSkKKworCXUzMiAgZnJlZTE7Cit9IHNwZGlmaXNjYl90OworCisKKy8qIFNDQiBmb3IgdGhlIFNQL0RJRiBDT0RFQyBpbnB1dCBhbmQgb3V0cHV0ICAqLwordHlwZWRlZiBzdHJ1Y3QgX3NwZGlmb3NjYl90IHsJCSAKKworCisJdTMyIGZyZWUyOyAgICAgCisKKwl1MzIgZnJlZTNbNF07ICAgICAgICAgICAgIAorCisJLyogTmVlZCB0byBiZSBoZXJlIGZvciBjb21wYXRpYmlsaXR5IHdpdGggQXN5bmNoRkdUeENvZGUgKi8KKwl1MzIgc3RybV9yc19jb25maWc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisJdTMyIHN0cm1fYnVmX3B0cjsKKworCV9fX0RTUF9EVUFMXzE2QklUX0FMTE9DKCAgCisJICAgIHN0YXR1cywKKwkgICAgZnJlZTUKKwkpCisKKwl1MzIgZnJlZTQ7CisKKwlfX19EU1BfRFVBTF8xNkJJVF9BTExPQyggIAorCSAgICBuZXh0X3NjYiwKKwkgICAgc3ViX2xpc3RfcHRyCisJKQorCisJX19fRFNQX0RVQUxfMTZCSVRfQUxMT0MoCisJICAgIGVudHJ5X3BvaW50LAorCSAgICB0aGlzX3NwYgorCSkKKworCXUzMiBmcmVlNlsyXTsKKyAgCisJX19fRFNQX0RVQUxfMTZCSVRfQUxMT0MoCisJICAgIHN0YXRfcmVnX2FkZHIsIAorCSAgICBmaWZvX3BvaW50ZXIKKwkpCisKKwlfX19EU1BfRFVBTF8xNkJJVF9BTExPQygKKwkgICAgZmlmb19iYXNlX2FkZHIsCisJICAgIHN0X21vX2Zvcm1hdAorCSkKKworCXUzMiAgZnJlZTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK30gc3BkaWZvc2NiX3Q7CisKKworCit0eXBlZGVmIHN0cnVjdCBfYXN5bmNoX2ZnX3J4X3NjYl90IHsKKwlfX19EU1BfRFVBTF8xNkJJVF9BTExPQygKKwkgICAgYm90X2J1Zl9tYXNrLAorCSAgICBidWZfTWFzaworCSkKKworCV9fX0RTUF9EVUFMXzE2QklUX0FMTE9DKAorCSAgICBtYXgsCisJICAgIG1pbgorCSkKKworCV9fX0RTUF9EVUFMXzE2QklUX0FMTE9DKAorCSAgICBvbGRfcHJvZHVjZXJfcG9pbnRlciwKKwkgICAgaGZnX3NjYl9wdHIKKwkpCisKKwlfX19EU1BfRFVBTF8xNkJJVF9BTExPQygKKwkgICAgZGVsdGEsCisJICAgIGFkanVzdF9jb3VudAorCSkKKworCXUzMiB1bnVzZWQyWzVdOyAgCisKKwlfX19EU1BfRFVBTF8xNkJJVF9BTExPQyggIAorCSAgICBzaWJsaW5nX3B0ciwgIAorCSAgICBjaGlsZF9wdHIKKwkpCisKKwlfX19EU1BfRFVBTF8xNkJJVF9BTExPQygKKwkgICAgY29kZV9wdHIsCisJICAgIHRoaXNfcHRyCisJKQorCisJdTMyIHN0cm1fcnNfY29uZmlnOyAKKworCXUzMiBzdHJtX2J1Zl9wdHI7CisgIAorCXUzMiB1bnVzZWRfcGhpX2luY3I7CisgIAorCV9fX0RTUF9EVUFMXzE2QklUX0FMTE9DKAorCSAgICByaWdodF90YXJnLCAgIAorCSAgICBsZWZ0X3RhcmcKKwkpCisKKwlfX19EU1BfRFVBTF8xNkJJVF9BTExPQygKKwkgICAgcmlnaHRfdm9sLAorCSAgICBsZWZ0X3ZvbAorCSkKK30gYXN5bmNoX2ZnX3J4X3NjYl90OworCisKKwordHlwZWRlZiBzdHJ1Y3QgX2FzeW5jaF9mZ190eF9zY2JfdCB7CisJX19fRFNQX0RVQUxfMTZCSVRfQUxMT0MoCisJICAgIG5vdF9idWZfbWFzaywKKwkgICAgYnVmX21hc2sKKwkpCisKKwlfX19EU1BfRFVBTF8xNkJJVF9BTExPQygKKwkgICAgbWF4LAorCSAgICBtaW4KKwkpCisKKwlfX19EU1BfRFVBTF8xNkJJVF9BTExPQygKKwkgICAgdW51c2VkMSwKKwkgICAgaGZnX3NjYl9wdHIKKwkpCisKKwlfX19EU1BfRFVBTF8xNkJJVF9BTExPQygKKwkgICAgZGVsdGEsCisJICAgIGFkanVzdF9jb3VudAorCSkKKworCXUzMiBhY2N1bV9waGk7CisKKwlfX19EU1BfRFVBTF8xNkJJVF9BTExPQygKKwkgICAgdW51c2VkMiwKKwkgICAgY29uc3Rfb25lX3RoaXJkCisJKQorCisJdTMyIHVudXNlZDNbM107CisKKwlfX19EU1BfRFVBTF8xNkJJVF9BTExPQygKKwkgICAgc2libGluZ19wdHIsCisJICAgIGNoaWxkX3B0cgorCSkKKworCV9fX0RTUF9EVUFMXzE2QklUX0FMTE9DKAorCSAgICBjb2RlUHRyLAorCSAgICB0aGlzX3B0cgorCSkKKworCXUzMiBzdHJtX3JzX2NvbmZpZzsKKworCXUzMiBzdHJtX2J1Zl9wdHI7CisKKwl1MzIgcGhpX2luY3I7CisKKwlfX19EU1BfRFVBTF8xNkJJVF9BTExPQygKKwkgICAgdW51c2VkX3JpZ2h0X3RhcmcsCisJICAgIHVudXNlZF9sZWZ0X3RhcmcKKwkpCisKKwlfX19EU1BfRFVBTF8xNkJJVF9BTExPQygKKwkgICAgdW51c2VkX3JpZ2h0X3ZvbCwKKwkgICAgdW51c2VkX2xlZnRfdm9sCisJKQorfSBhc3luY2hfZmdfdHhfc2NiX3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QgX291dHB1dF9zbm9vcF9zY2JfdCB7CisJLyogRmlyc3QgMTMgZHdvcmRzIGZyb20gZ2VuZXJpY19zY2JfdCAqLworCWJhc2ljX2RtYV9yZXFfdCAgYmFzaWNfcmVxOyAgLyogT3B0aW9uYWwgKi8KKwlzY2F0dGVyX2dhdGhlcl9leHRfdCBzZ19leHQ7ICAvKiBPcHRpb25hbCAqLworCV9fX0RTUF9EVUFMXzE2QklUX0FMTE9DKAorCSAgICBuZXh0X3NjYiwgICAgICAgLyogUkVRVUlSRUQgKi8KKwkgICAgc3ViX2xpc3RfcHRyICAgIC8qIFJFUVVJUkVEICovCisJKQorCisJX19fRFNQX0RVQUxfMTZCSVRfQUxMT0MoCisJICAgIGVudHJ5X3BvaW50LCAgICAvKiBSRVFVSVJFRCAqLworCSAgICB0aGlzX3NwYiAgICAgICAgLyogUkVRVUlSRUQgKi8KKwkpCisKKwl1MzIgc3RybV9yc19jb25maWc7IC8qIFJFUVVJUkVEICovCisJdTMyIHN0cm1fYnVmX3B0cjsgICAvKiBSRVFVSVJFRCAqLworCisJX19fRFNQX0RVQUxfMTZCSVRfQUxMT0MoCisJICAgIGluaXRfc25vb3BfaW5wdXRfbGluaywKKwkgICAgc25vb3BfY2hpbGRfaW5wdXRfc2NiCisJKQorCisJdTMyIHNub29wX2lucHV0X2J1Zl9wdHI7CisKKwlfX19EU1BfRFVBTF8xNkJJVF9BTExPQygKKwkgICAgcmVzZXJ2ZWQsCisJICAgIGlucHV0X3NjYgorCSkKK30gb3V0cHV0X3Nub29wX3NjYl90OworCit0eXBlZGVmIHN0cnVjdCBfc3Bpb193cml0ZV9zY2JfdCB7CisJX19fRFNQX0RVQUxfMTZCSVRfQUxMT0MoCisJICAgIGFkZHJlc3MxLAorCSAgICBhZGRyZXNzMgorCSkKKworCXUzMiBkYXRhMTsKKworCXUzMiBkYXRhMjsKKworCV9fX0RTUF9EVUFMXzE2QklUX0FMTE9DKAorCSAgICBhZGRyZXNzMywKKwkgICAgYWRkcmVzczQKKwkpCisKKwl1MzIgZGF0YTM7CisKKwl1MzIgZGF0YTQ7CisKKwlfX19EU1BfRFVBTF8xNkJJVF9BTExPQygKKwkgICAgdW51c2VkMSwKKwkgICAgZGF0YV9wdHIKKwkpCisKKwl1MzIgdW51c2VkMlsyXTsKKworCV9fX0RTUF9EVUFMXzE2QklUX0FMTE9DKAorCSAgICBzaWJsaW5nX3B0ciwKKwkgICAgY2hpbGRfcHRyCisJKQorCisJX19fRFNQX0RVQUxfMTZCSVRfQUxMT0MoCisJICAgIGVudHJ5X3BvaW50LAorCSAgICB0aGlzX3B0cgorCSkKKworCXUzMiB1bnVzZWQzWzVdOworfSBzcGlvX3dyaXRlX3NjYl90OworCit0eXBlZGVmIHN0cnVjdCBfbWFnaWNfc25vb3BfdGFza190IHsKKwl1MzIgaTA7CisJdTMyIGkxOworCisJdTMyIHN0cm1fYnVmX3B0cjE7CisgIAorCXUxNiBpMjsKKwl1MTYgc25vb3Bfc2NiOworCisJdTMyIGkzOworCXUzMiBpNDsKKwl1MzIgaTU7CisJdTMyIGk2OworCisJdTMyIGk3OworCisJX19fRFNQX0RVQUxfMTZCSVRfQUxMT0MoCisJICAgIG5leHRfc2NiLAorCSAgICBzdWJfbGlzdF9wdHIKKwkpCisKKwlfX19EU1BfRFVBTF8xNkJJVF9BTExPQygKKwkgICAgZW50cnlfcG9pbnQsCisJICAgIHRoaXNfcHRyCisJKQorCisJdTMyIHN0cm1fYnVmX2NvbmZpZzsKKwl1MzIgc3RybV9idWZfcHRyMjsKKworCXUzMiBpODsKKworCXZvbHVtZV9jb250cm9sX3QgdmRlY192b2xfY3RybDsKK30gbWFnaWNfc25vb3BfdGFza190OworCisKK3R5cGVkZWYgc3RydWN0IF9maWx0ZXJfc2NiX3QgeworCV9fX0RTUF9EVUFMXzE2QklUX0FMTE9DKAorCSAgICAgIGEwX3JpZ2h0LCAgICAgICAgICAvKiAweDAwICovCisJICAgICAgYTBfbGVmdAorCSkKKwlfX19EU1BfRFVBTF8xNkJJVF9BTExPQygKKwkgICAgICBhMV9yaWdodCwgICAgICAgICAgLyogMHgwMSAqLworCSAgICAgIGExX2xlZnQKKwkpCisJX19fRFNQX0RVQUxfMTZCSVRfQUxMT0MoCisJICAgICAgYTJfcmlnaHQsICAgICAgICAgIC8qIDB4MDIgKi8KKwkgICAgICBhMl9sZWZ0CisJKQorCV9fX0RTUF9EVUFMXzE2QklUX0FMTE9DKAorCSAgICAgIG91dHB1dF9idWZfcHRyLCAgICAvKiAweDAzICovCisJICAgICAgaW5pdAorCSkKKworCV9fX0RTUF9EVUFMXzE2QklUX0FMTE9DKAorCSAgICAgIGZpbHRlcl91bnVzZWQzLCAgICAvKiAweDA0ICovCisJICAgICAgZmlsdGVyX3VudXNlZDIKKwkpCisKKwl1MzIgcHJldl9zYW1wbGVfb3V0cHV0MTsgLyogMHgwNSAqLworCXUzMiBwcmV2X3NhbXBsZV9vdXRwdXQyOyAvKiAweDA2ICovCisJdTMyIHByZXZfc2FtcGxlX2lucHV0MTsgIC8qIDB4MDcgKi8KKwl1MzIgcHJldl9zYW1wbGVfaW5wdXQyOyAgLyogMHgwOCAqLworCisJX19fRFNQX0RVQUxfMTZCSVRfQUxMT0MoCisJICAgICAgbmV4dF9zY2JfcHRyLCAgICAgIC8qIDB4MDkgKi8KKwkgICAgICBzdWJfbGlzdF9wdHIKKwkpCisKKwlfX19EU1BfRFVBTF8xNkJJVF9BTExPQygKKwkgICAgICBlbnRyeV9wb2ludCwgICAgICAgLyogMHgwQSAqLworCSAgICAgIHNwYl9wdHIKKwkpCisKKwl1MzIgIHN0cm1fcnNfY29uZmlnOyAgICAgLyogMHgwQiAqLworCXUzMiAgc3RybV9idWZfcHRyOyAgICAgICAvKiAweDBDICovCisKKwlfX19EU1BfRFVBTF8xNkJJVF9BTExPQygKKyAgICAgICAgICAgICAgYjBfcmlnaHQsICAgICAgICAgIC8qIDB4MEQgKi8KKwkgICAgICBiMF9sZWZ0CisJKQorCV9fX0RTUF9EVUFMXzE2QklUX0FMTE9DKAorICAgICAgICAgICAgICBiMV9yaWdodCwgICAgICAgICAgLyogMHgwRSAqLworCSAgICAgIGIxX2xlZnQKKwkpCisJX19fRFNQX0RVQUxfMTZCSVRfQUxMT0MoCisgICAgICAgICAgICAgIGIyX3JpZ2h0LCAgICAgICAgICAvKiAweDBGICovCisJICAgICAgYjJfbGVmdAorCSkKK30gZmlsdGVyX3NjYl90OworI2VuZGlmIC8qIF9fRFNQX1NDQl9UWVBFU19IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvY3M0Nnh4X2RzcF9zcG9zLmggYi9pbmNsdWRlL3NvdW5kL2NzNDZ4eF9kc3Bfc3Bvcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwMDE0Y2I2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9zb3VuZC9jczQ2eHhfZHNwX3Nwb3MuaApAQCAtMCwwICsxLDIzMyBAQAorLyoKKyAqICBUaGUgZHJpdmVyIGZvciB0aGUgQ2lycnVzIExvZ2ljJ3MgU291bmQgRnVzaW9uIENTNDZYWCBiYXNlZCBzb3VuZGNhcmRzCisgKiAgQ29weXJpZ2h0IChjKSBieSBKYXJvc2xhdiBLeXNlbGEgPHBlcmV4QHN1c2UuY3o+CisgKgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBfX0NTNDZYWF9EU1BfU1BPU19IX18KKyNkZWZpbmUgX19DUzQ2WFhfRFNQX1NQT1NfSF9fCisKKyNpbmNsdWRlICJjczQ2eHhfZHNwX3NjYl90eXBlcy5oIgorI2luY2x1ZGUgImNzNDZ4eF9kc3BfdGFza190eXBlcy5oIgorCisjZGVmaW5lIFNZTUJPTF9DT05TVEFOVCAgMHgwCisjZGVmaW5lIFNZTUJPTF9TQU1QTEUgICAgMHgxCisjZGVmaW5lIFNZTUJPTF9QQVJBTUVURVIgMHgyCisjZGVmaW5lIFNZTUJPTF9DT0RFICAgICAgMHgzCisKKyNkZWZpbmUgU0VHVFlQRV9TUF9QUk9HUkFNICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNFR1RZUEVfU1BfUEFSQU1FVEVSICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBTRUdUWVBFX1NQX1NBTVBMRSAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgU0VHVFlQRV9TUF9DT0VGRklDSUVOVCAgICAgICAgICAweDAwMDAwMDA0CisKKyNkZWZpbmUgRFNQX1NQT1NfVVUgICAgICAweDBkZWFkdWwgICAgIC8qIHVudXNlZCAqLworI2RlZmluZSBEU1BfU1BPU19EQyAgICAgIDB4MGJhZHVsICAgICAgLyogZG9uJ3QgY2FyZSAqLworI2RlZmluZSBEU1BfU1BPU19EQ19EQyAgIDB4MGJhZDBiYWR1bCAgLyogZG9uJ3QgY2FyZSAqLworI2RlZmluZSBEU1BfU1BPU19VVVVVICAgIDB4ZGVhZGMwZWR1bCAgLyogdW51c2VkICovCisjZGVmaW5lIERTUF9TUE9TX1VVSEkgICAgMHhkZWFkdWwKKyNkZWZpbmUgRFNQX1NQT1NfVVVMTyAgICAweGMwZWR1bAorI2RlZmluZSBEU1BfU1BPU19EQ0RDICAgIDB4MGJhZGYxZDB1bCAgLyogZG9uJ3QgY2FyZSAqLworI2RlZmluZSBEU1BfU1BPU19EQ0RDSEkgIDB4MGJhZHVsCisjZGVmaW5lIERTUF9TUE9TX0RDRENMTyAgMHhmMWQwdWwKKworI2RlZmluZSBEU1BfTUFYX1RBU0tfTkFNRSAgIDYwCisjZGVmaW5lIERTUF9NQVhfU1lNQk9MX05BTUUgMTAwCisjZGVmaW5lIERTUF9NQVhfU0NCX05BTUUgICAgNjAKKyNkZWZpbmUgRFNQX01BWF9TQ0JfREVTQyAgICAyMDAKKyNkZWZpbmUgRFNQX01BWF9UQVNLX0RFU0MgICA1MAorCisjZGVmaW5lIERTUF9NQVhfUENNX0NIQU5ORUxTIDMyCisjZGVmaW5lIERTUF9NQVhfU1JDX05SICAgICAgIDE0CisKKyNkZWZpbmUgRFNQX1BDTV9NQUlOX0NIQU5ORUwgICAgICAgIDEKKyNkZWZpbmUgRFNQX1BDTV9SRUFSX0NIQU5ORUwgICAgICAgIDIKKyNkZWZpbmUgRFNQX1BDTV9DRU5URVJfTEZFX0NIQU5ORUwgIDMKKyNkZWZpbmUgRFNQX1BDTV9TNzFfQ0hBTk5FTCAgICAgICAgIDQgLyogc3Vycm91bmQgNy4xICovCisjZGVmaW5lIERTUF9JRUM5NThfQ0hBTk5FTCAgICAgICAgICA1CisKKyNkZWZpbmUgRFNQX1NQRElGX1NUQVRVU19PVVRQVVRfRU5BQkxFRCAgICAgICAxCisjZGVmaW5lIERTUF9TUERJRl9TVEFUVVNfUExBWUJBQ0tfT1BFTiAgICAgICAgMgorI2RlZmluZSBEU1BfU1BESUZfU1RBVFVTX0hXX0VOQUJMRUQgICAgICAgICAgIDQKKyNkZWZpbmUgRFNQX1NQRElGX1NUQVRVU19JTlBVVF9DVFJMX0VOQUJMRUQgICA4CisKK3N0cnVjdCBfZHNwX21vZHVsZV9kZXNjX3Q7CisKK3R5cGVkZWYgc3RydWN0IF9zeW1ib2xfZW50cnlfdCB7CisJdTMyIGFkZHJlc3M7CisJY2hhciBzeW1ib2xfbmFtZVtEU1BfTUFYX1NZTUJPTF9OQU1FXTsKKwlpbnQgc3ltYm9sX3R5cGU7CisKKwkvKiBpbml0aWFsaXplZCBieSBkcml2ZXIgKi8KKwlzdHJ1Y3QgX2RzcF9tb2R1bGVfZGVzY190ICogbW9kdWxlOworCWludCBkZWxldGVkOworfSBzeW1ib2xfZW50cnlfdDsKKwordHlwZWRlZiBzdHJ1Y3QgX3N5bWJvbF9kZXNjX3QgeworCWludCBuc3ltYm9sczsKKworCXN5bWJvbF9lbnRyeV90ICogc3ltYm9sczsKKworCS8qIGluaXRpYWxpemVkIGJ5IGRyaXZlciAqLworCWludCBoaWdoZXN0X2ZyYWdfaW5kZXg7Cit9IHN5bWJvbF9kZXNjX3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QgX3NlZ21lbnRfZGVzY190IHsKKwlpbnQgc2VnbWVudF90eXBlOworCXUzMiBvZmZzZXQ7CisJdTMyIHNpemU7CisJdTMyICogZGF0YTsKK30gc2VnbWVudF9kZXNjX3Q7CisKK3R5cGVkZWYgc3RydWN0IF9kc3BfbW9kdWxlX2Rlc2NfdCB7CisJY2hhciAqIG1vZHVsZV9uYW1lOworCXN5bWJvbF9kZXNjX3Qgc3ltYm9sX3RhYmxlOworCWludCBuc2VnbWVudHM7CisJc2VnbWVudF9kZXNjX3QgKiBzZWdtZW50czsKKworCS8qIGluaXRpYWxpemVkIGJ5IGRyaXZlciAqLworCXUzMiBvdmVybGF5X2JlZ2luX2FkZHJlc3M7CisJdTMyIGxvYWRfYWRkcmVzczsKKwlpbnQgbmZpeHVwczsKK30gZHNwX21vZHVsZV9kZXNjX3Q7CisKK3R5cGVkZWYgc3RydWN0IF9kc3Bfc2NiX2Rlc2NyaXB0b3JfdCB7CisJY2hhciBzY2JfbmFtZVtEU1BfTUFYX1NDQl9OQU1FXTsKKwl1MzIgYWRkcmVzczsKKwlpbnQgaW5kZXg7CisKKwlzdHJ1Y3QgX2RzcF9zY2JfZGVzY3JpcHRvcl90ICogc3ViX2xpc3RfcHRyOworCXN0cnVjdCBfZHNwX3NjYl9kZXNjcmlwdG9yX3QgKiBuZXh0X3NjYl9wdHI7CisJc3RydWN0IF9kc3Bfc2NiX2Rlc2NyaXB0b3JfdCAqIHBhcmVudF9zY2JfcHRyOworCisJc3ltYm9sX2VudHJ5X3QgKiB0YXNrX2VudHJ5OworCXN5bWJvbF9lbnRyeV90ICogc2NiX3N5bWJvbDsKKworCXNuZF9pbmZvX2VudHJ5X3QgKnByb2NfaW5mbzsKKwlpbnQgcmVmX2NvdW50OworCXNwaW5sb2NrX3QgbG9jazsKKworCWludCBkZWxldGVkOworfSBkc3Bfc2NiX2Rlc2NyaXB0b3JfdDsKKwordHlwZWRlZiBzdHJ1Y3QgX2RzcF90YXNrX2Rlc2NyaXB0b3JfdCB7CisJY2hhciB0YXNrX25hbWVbRFNQX01BWF9UQVNLX05BTUVdOworCWludCBzaXplOworCXUzMiBhZGRyZXNzOworCWludCBpbmRleDsKK30gZHNwX3Rhc2tfZGVzY3JpcHRvcl90OworCit0eXBlZGVmIHN0cnVjdCBfcGNtX2NoYW5uZWxfZGVzY3JpcHRvcl90IHsKKwlpbnQgYWN0aXZlOworCWludCBzcmNfc2xvdDsKKwlpbnQgcGNtX3Nsb3Q7CisJdTMyIHNhbXBsZV9yYXRlOworCXUzMiB1bmxpbmtlZDsKKwlkc3Bfc2NiX2Rlc2NyaXB0b3JfdCAqIHBjbV9yZWFkZXJfc2NiOworCWRzcF9zY2JfZGVzY3JpcHRvcl90ICogc3JjX3NjYjsKKwlkc3Bfc2NiX2Rlc2NyaXB0b3JfdCAqIG1peGVyX3NjYjsKKworCXZvaWQgKiBwcml2YXRlX2RhdGE7Cit9IHBjbV9jaGFubmVsX2Rlc2NyaXB0b3JfdDsKKwordHlwZWRlZiBzdHJ1Y3QgX2RzcF9zcG9zX2luc3RhbmNlX3QgeworCXN5bWJvbF9kZXNjX3Qgc3ltYm9sX3RhYmxlOyAvKiBjdXJyZW50bHkgYXZhaWxibGUgbG9hZGVkIHN5bWJvbHMgaW4gU1AgKi8KKworCWludCBubW9kdWxlczsKKwlkc3BfbW9kdWxlX2Rlc2NfdCAqIG1vZHVsZXM7IC8qIG1vZHVsZXMgbG9hZGVkIGludG8gU1AgKi8KKworCXNlZ21lbnRfZGVzY190IGNvZGU7CisKKwkvKiBNYWluIFBDTSBwbGF5YmFjayBtaXhlciAqLworCWRzcF9zY2JfZGVzY3JpcHRvcl90ICogbWFzdGVyX21peF9zY2I7CisJdTE2IGRhY192b2x1bWVfcmlnaHQ7CisJdTE2IGRhY192b2x1bWVfbGVmdDsKKworCS8qIFJlYXIvc3Vycm91bmQgUENNIHBsYXliYWNrIG1peGVyICovCisJZHNwX3NjYl9kZXNjcmlwdG9yX3QgKiByZWFyX21peF9zY2I7CisKKwkvKiBDZW50ZXIvTEZFIG1peGVyICovCisJZHNwX3NjYl9kZXNjcmlwdG9yX3QgKiBjZW50ZXJfbGZlX21peF9zY2I7CisKKwlpbnQgbnBjbV9jaGFubmVsczsKKwlpbnQgbnNyY19zY2I7CisJcGNtX2NoYW5uZWxfZGVzY3JpcHRvcl90IHBjbV9jaGFubmVsc1tEU1BfTUFYX1BDTV9DSEFOTkVMU107CisJaW50IHNyY19zY2Jfc2xvdHNbRFNQX01BWF9TUkNfTlJdOworCisJLyogY2FjaGUgdGhpcyBzeW1ib2xzICovCisJc3ltYm9sX2VudHJ5X3QgKiBudWxsX2FsZ29yaXRobTsgLyogdXNlZCBieSBQQ01yZWFkZXJTQ0IncyAqLworCXN5bWJvbF9lbnRyeV90ICogczE2X3VwOyAgICAgICAgIC8qIHVzZWQgYnkgU1JDdGFza1NDQidzICovCisKKwkvKiBwcm9jIGZzICovICAKKwlzbmRfY2FyZF90ICogc25kX2NhcmQ7CisJc25kX2luZm9fZW50cnlfdCAqIHByb2NfZHNwX2RpcjsKKwlzbmRfaW5mb19lbnRyeV90ICogcHJvY19zeW1faW5mb19lbnRyeTsKKwlzbmRfaW5mb19lbnRyeV90ICogcHJvY19tb2R1bGVzX2luZm9fZW50cnk7CisJc25kX2luZm9fZW50cnlfdCAqIHByb2NfcGFyYW1ldGVyX2R1bXBfaW5mb19lbnRyeTsKKwlzbmRfaW5mb19lbnRyeV90ICogcHJvY19zYW1wbGVfZHVtcF9pbmZvX2VudHJ5OworCisJLyogU0NCJ3MgZGVzY3JpcHRvcnMgKi8KKwlpbnQgbnNjYjsKKwlpbnQgc2NiX2hpZ2hlc3RfZnJhZ19pbmRleDsKKwlkc3Bfc2NiX2Rlc2NyaXB0b3JfdCBzY2JzW0RTUF9NQVhfU0NCX0RFU0NdOworCXNuZF9pbmZvX2VudHJ5X3QgKiBwcm9jX3NjYl9pbmZvX2VudHJ5OworCWRzcF9zY2JfZGVzY3JpcHRvcl90ICogdGhlX251bGxfc2NiOworCisJLyogVGFzaydzIGRlc2NyaXB0b3JzICovCisJaW50IG50YXNrOworCWRzcF90YXNrX2Rlc2NyaXB0b3JfdCB0YXNrc1tEU1BfTUFYX1RBU0tfREVTQ107CisJc25kX2luZm9fZW50cnlfdCAqIHByb2NfdGFza19pbmZvX2VudHJ5OworCisJLyogU1BESUYgc3RhdHVzICovCisJaW50IHNwZGlmX3N0YXR1c19vdXQ7CisJaW50IHNwZGlmX3N0YXR1c19pbjsKKwl1MTYgc3BkaWZfaW5wdXRfdm9sdW1lX3JpZ2h0OworCXUxNiBzcGRpZl9pbnB1dF92b2x1bWVfbGVmdDsKKwkvKiBzcGRpZiBjaGFubmVsIHN0YXR1cywKKwkgICBsZWZ0IHJpZ2h0IGFuZCB1c2VyIHZhbGlkaXR5IGJpdHMgKi8KKwl1bnNpZ25lZCBpbnQgc3BkaWZfY3N1dl9kZWZhdWx0OworCXVuc2lnbmVkIGludCBzcGRpZl9jc3V2X3N0cmVhbTsKKworCS8qIFNQRElGIGlucHV0IHNhbXBsZSByYXRlIGNvbnZlcnRlciAqLworCWRzcF9zY2JfZGVzY3JpcHRvcl90ICogc3BkaWZfaW5fc3JjOworCS8qIFNQRElGIGlucHV0IGFzeW5jaC4gcmVjZWl2ZXIgKi8KKwlkc3Bfc2NiX2Rlc2NyaXB0b3JfdCAqIGFzeW5jaF9yeF9zY2I7CisKKwkvKiBDYXB0dXJlIHJlY29yZCBtaXhlciBTQ0IgKi8KKwlkc3Bfc2NiX2Rlc2NyaXB0b3JfdCAqIHJlY29yZF9taXhlcl9zY2I7CisgICAgCisJLyogQ09ERUMgaW5wdXQgU0NCICovCisJZHNwX3NjYl9kZXNjcmlwdG9yX3QgKiBjb2RlY19pbl9zY2I7CisKKwkvKiByZWZlcmVuY2Ugc25vb3BlciAqLworCWRzcF9zY2JfZGVzY3JpcHRvcl90ICogcmVmX3Nub29wX3NjYjsKKworCS8qIFNQRElGIG91dHB1dCAgUENNIHJlZmVyZW5jZSAgKi8KKwlkc3Bfc2NiX2Rlc2NyaXB0b3JfdCAqIHNwZGlmX3BjbV9pbnB1dF9zY2I7CisKKwkvKiBhc3luY2ggVFggdGFzayAqLworCWRzcF9zY2JfZGVzY3JpcHRvcl90ICogYXN5bmNoX3R4X3NjYjsKKworCS8qIHJlY29yZCBzb3VyY2VzICovCisJZHNwX3NjYl9kZXNjcmlwdG9yX3QgKiBwY21faW5wdXQ7CisJZHNwX3NjYl9kZXNjcmlwdG9yX3QgKiBhZGNfaW5wdXQ7CisKKwlpbnQgc3BkaWZfaW5fc2FtcGxlX3JhdGU7Cit9IGRzcF9zcG9zX2luc3RhbmNlX3Q7CisKKyNlbmRpZiAvKiBfX0RTUF9TUE9TX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9jczQ2eHhfZHNwX3Rhc2tfdHlwZXMuaCBiL2luY2x1ZGUvc291bmQvY3M0Nnh4X2RzcF90YXNrX3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRkM2JmNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvc291bmQvY3M0Nnh4X2RzcF90YXNrX3R5cGVzLmgKQEAgLTAsMCArMSwyNTMgQEAKKy8qCisgKiAgVGhlIGRyaXZlciBmb3IgdGhlIENpcnJ1cyBMb2dpYydzIFNvdW5kIEZ1c2lvbiBDUzQ2WFggYmFzZWQgc291bmRjYXJkcworICogIENvcHlyaWdodCAoYykgYnkgSmFyb3NsYXYgS3lzZWxhIDxwZXJleEBzdXNlLmN6PgorICoKKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKgorICoKKyAqIE5PVEU6IGNvbW1lbnRzIGFyZSBjb3B5L3Bhc3RlIGZyb20gY3djZW1iODAubHN0IAorICogcHJvdmlkZWQgYnkgVG9tIFdvbGxlciBhdCBDaXJydXMgKG15IG9ubHkKKyAqIGRvY3VtZW50YXRpb24gYWJvdXQgdGhlIFNQIE9TIHJ1bm5pbmcgaW5zaWRlCisgKiB0aGUgRFNQKSAKKyAqLworCisjaWZuZGVmIF9fQ1M0NlhYX0RTUF9UQVNLX1RZUEVTX0hfXworI2RlZmluZSBfX0NTNDZYWF9EU1BfVEFTS19UWVBFU19IX18KKworI2luY2x1ZGUgImNzNDZ4eF9kc3Bfc2NiX3R5cGVzLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0V4YW1wbGUgaGllcmFyY2h5IG9mIHN0cmVhbSBjb250cm9sIGJsb2NrcyBpbiB0aGUgU1AKKworaGZnVHJlZQorUHRyX19fX0NhbGwgKGMpCisgICAgICAgXAorIC0tLS0tLS0rLS0tLS0tICAgICAgICAgLS0tLS0tLS0tLS0tLSAgICAgIC0tLS0tLS0tLS0tLS0gICAgICAtLS0tLS0tLS0tLS0tICAgICAgLS0tLS0KK3wgU0JsYXN0ZXIgSUYgIHxfX19fX19cfCBGb3JlZ3JvdW5kICB8X19fXHwgTWlkZGxlZ3InbmQgfF9fX1x8IEJhY2tncm91bmQgIHxfX19cfCBOdWwgfAorfCAgICAgICAgICAgICAgfEdvdG8gIC98IHRyZWUgaGVhZGVyIHxnICAvfCB0cmVlIGhlYWRlciB8ZyAgL3wgdHJlZSBoZWFkZXIgfGcgIC98IFNDQiB8cgorIC0tLS0tLS0tLS0tLS0tIChnKSAgICAgLS0tLS0tLS0tLS0tLSAgICAgIC0tLS0tLS0tLS0tLS0gICAgICAtLS0tLS0tLS0tLS0tICAgICAgLS0tLS0KKyAgICAgICB8YyAgICAgICAgICAgICAgICAgICAgIHxjICAgICAgICAgICAgICAgICB8YyAgICAgICAgICAgICAgICAgfGMKKyAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfAorICAgICAgXC8gICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tICAgICAgLS0tLS0tLS0tLS0tLSAgICAgIC0tLS0tLS0tLS0tLS0gICAKKyAgICAgICAgICAgICAgICAgICAgICAgfCBGb3JlZ3JvdW5kICB8X1wgIHwgTWlkZGxlZ3InbmQgfF9cICB8IEJhY2tncm91bmQgIHxfXAorICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB0cmVlICAgIHxnLyAgfCAgICB0cmVlICAgICB8Zy8gIHwgICAgIHRyZWUgICAgfGcvCisgICAgICAgICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tICAgICAgLS0tLS0tLS0tLS0tLSAgICAgIC0tLS0tLS0tLS0tLS0gICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxjICAgICAgICAgICAgICAgICB8YyAgICAgICAgICAgICAgICAgfGMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXC8gICAgICAgICAgICAgICAgIFwvICAgICAgICAgICAgICAgICBcLyAKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lCQlIRkdfRklSU1RfRVhFQ1VURV9NT0RFCQkJMHgwMDAxCisjZGVmaW5lCQlIRkdfRklSU1RfRVhFQ1VURV9NT0RFX0JJVAkJMAorI2RlZmluZQkJSEZHX0NPTlRFWFRfU1dJVENIX01PREUJCQkweDAwMDIKKyNkZWZpbmUJCUhGR19DT05URVhUX1NXSVRDSF9NT0RFX0JJVAkJMQorCisjZGVmaW5lIE1BWF9GR19TVEFDS19TSVpFIAkzMgkJCS8qIFRIRVNFIE5FRUQgVE8gQkUgQ09NUFVURUQgUFJPUEVSTFkgKi8KKyNkZWZpbmUgTUFYX01HX1NUQUNLX1NJWkUgCTE2CisjZGVmaW5lIE1BWF9CR19TVEFDS19TSVpFIAk5CisjZGVmaW5lIE1BWF9IRkdfU1RBQ0tfU0laRQk0CisKKyNkZWZpbmUgU0xFRVBfQUNUSVZFX0lOQ1JFTUVOVAkJMAkJLyogRW5hYmxlIHRhc2sgdHJlZSB0aHJlYWQgdG8gZ28gdG8gc2xlZXAKKwkJCQkJCQkJCQkJICAgVGhpcyBzaG91bGQgb25seSBldmVyIGJlIHVzZWQgb24gdGhlIEJhY2tncm91bmQgdGhyZWFkICovCisjZGVmaW5lIFNUQU5EQVJEX0FDVElWRV9JTkNSRU1FTlQJMQkJLyogVGFzayB0cmVlIHRocmVhZCBub3JtYWwgb3BlcmF0aW9uICovCisjZGVmaW5lIFNVU1BFTkRfQUNUSVZFX0lOQ1JFTUVOVAkyCQkvKiBDYXVzZSBleGVjdXRpb24gdG8gc3VzcGVuZCBpbiB0aGUgdGFzayB0cmVlIHRocmVhZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHNob3VsZCBvbmx5IGV2ZXIgYmUgdXNlZCBvbiB0aGUgQmFja2dyb3VuZCB0aHJlYWQgKi8KKworI2RlZmluZSBIT1NURkxBR1NfRElTQUJMRV9CR19TTEVFUCAgMCAgICAgICAvKiBIb3N0LWNvbnRyb2xsZWQgZmxhZyB0aGF0IGRldGVybWluZXMgd2hldGhlciB3ZSBnbyB0byBzbGVlcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdCB0aGUgZW5kIG9mIEJHICovCisKKy8qIE1pbmltYWwgY29udGV4dCBzYXZlIGFyZWEgZm9yIEh5cGVyIEZvcmdyb3VuZCAqLwordHlwZWRlZiBzdHJ1Y3QgX2hmX3NhdmVfYXJlYV90IHsKKwl1MzIJcjEwX3NhdmU7CisJdTMyCXI1NF9zYXZlOworCXUzMglyOThfc2F2ZTsKKworCV9fX0RTUF9EVUFMXzE2QklUX0FMTE9DKAorCSAgICBzdGF0dXNfc2F2ZSwKKwkgICAgaW5kX3NhdmUKKwkpCisKKwlfX19EU1BfRFVBTF8xNkJJVF9BTExPQygKKwkgICAgcmNpMV9zYXZlLAorCSAgICByY2kwX3NhdmUKKwkpCisKKwl1MzIJcjMyX3NhdmU7CisJdTMyCXI3Nl9zYXZlOworCXUzMglyc2QyX3NhdmU7CisKKyAgICAgICAJX19fRFNQX0RVQUxfMTZCSVRfQUxMT0MoCisJICAgICAgcnNpMl9zYXZlLAkgIC8qIFNlZSBUYXNrVHJlZVBhcmFtZXRlckJsb2NrIGZvciAKKwkJCQkgICAgIHJlbWFpbmRlciBvZiByZWdpc3RlcnMgICovCisJICAgICAgcnNhMlNhdmUKKwkpCisJLyogc2F2ZWQgYXMgcGFydCBvZiBIRkcgY29udGV4dCAgKi8KK30gaGZfc2F2ZV9hcmVhX3Q7CisKKworLyogVGFzayBsaW5rIGRhdGEgc3RydWN0dXJlICovCit0eXBlZGVmIHN0cnVjdCBfdHJlZV9saW5rX3QgeworCV9fX0RTUF9EVUFMXzE2QklUX0FMTE9DKAorCS8qIFBvaW50ZXIgdG8gc2libGluZyB0YXNrIGNvbnRyb2wgYmxvY2sgKi8KKwkgICAgbmV4dF9zY2IsCisJLyogUG9pbnRlciB0byBjaGlsZCB0YXNrIGNvbnRyb2wgYmxvY2sgKi8KKwkgICAgc3ViX3B0cgorCSkKKyAgCisJX19fRFNQX0RVQUxfMTZCSVRfQUxMT0MoCisJLyogUG9pbnRlciB0byBjb2RlIGVudHJ5IHBvaW50ICovCisJICAgIGVudHJ5X3BvaW50LCAKKwkvKiBQb2ludGVyIHRvIGxvY2FsIGRhdGEgKi8KKwkgICAgdGhpc19zcGIKKwkpCit9IHRyZWVfbGlua190OworCisKK3R5cGVkZWYgc3RydWN0IF90YXNrX3RyZWVfZGF0YV90IHsKKwlfX19EU1BfRFVBTF8xNkJJVF9BTExPQygKKwkvKiBJbml0aWFsIHRvY2sgY291bnQ7IGNvbnRyb2xzIHRhc2sgdHJlZSBleGVjdXRpb24gcmF0ZSAqLworCSAgICB0b2NrX2NvdW50X2xpbWl0LAorCS8qIFRvY2sgZG93biBjb3VudGVyICovCisJICAgIHRvY2tfY291bnQKKwkpCisKKwkvKiBBZGQgdG8gQWN0aXZlQ291bnQgd2hlbiBUb2NrQ291bnRMaW1pdCByZWFjaGVkOiAKKwkgICBTdWJ0cmFjdCBvbiB0YXNrIHRyZWUgdGVybWluYXRpb24gKi8KKwlfX19EU1BfRFVBTF8xNkJJVF9BTExPQygKKwkgICAgYWN0aXZlX3RuY3JlbWVudCwJCQorCS8qIE51bWJlciBvZiBwZW5kaW5nIGFjdGl2YXRpb25zIGZvciB0YXNrIHRyZWUgKi8KKwkgICAgYWN0aXZlX2NvdW50CisJKQorCisgICAgICAgIF9fX0RTUF9EVUFMXzE2QklUX0FMTE9DKAorCS8qIEJpdE51bWJlciB0byBlbmFibGUgbW9kaWZpY2F0aW9uIG9mIGNvcnJlY3QgYml0IGluIEFjdGl2ZVRhc2tGbGFncyAqLworCSAgICBhY3RpdmVfYml0LAkgICAgCisJLyogUG9pbnRlciB0byBPUyBsb2NhdGlvbiBmb3IgaW5kaWNhdGluZyBjdXJyZW50IGFjdGl2aXR5IG9uIHRhc2sgbGV2ZWwgKi8KKwkgICAgYWN0aXZlX3Rhc2tfZmxhZ3NfcHRyCisJKQorCisJLyogRGF0YSBzdHJ1Y3R1cmUgZm9yIGNvbnRyb2xsaW5nIG1vdmVtZW50IG9mIG1lbW9yeSBibG9ja3M6LSAKKwkgICBjdXJyZW50bHkgdW51c2VkICovCisJX19fRFNQX0RVQUxfMTZCSVRfQUxMT0MoCisJICAgIG1lbV91cGRfcHRyLAorCS8qIERhdGEgc3RydWN0dXJlIGZvciBjb250cm9sbGluZyBzeW5jaHJvbm91cyBsaW5rIHVwZGF0ZSAqLworCSAgICBsaW5rX3VwZF9wdHIKKwkpCisgIAorCV9fX0RTUF9EVUFMXzE2QklUX0FMTE9DKAorCS8qIFNhdmUgYXJlYSBmb3IgcmVtYWluZGVyIG9mIGZ1bGwgY29udGV4dC4gKi8KKwkgICAgc2F2ZV9hcmVhLAorCS8qIEFkZHJlc3Mgb2Ygc3RhcnQgb2YgbG9jYWwgc3RhY2sgZm9yIGRhdGEgc3RvcmFnZSAqLworCSAgICBkYXRhX3N0YWNrX2Jhc2VfcHRyCisJKQorCit9IHRhc2tfdHJlZV9kYXRhX3Q7CisKKworCit0eXBlZGVmIHN0cnVjdCBfaW50ZXJ2YWxfdGltZXJfZGF0YV90Cit7CisJLyogVGhlc2UgZGF0YSBpdGVtcyBoYXZlIHRoZSBzYW1lIHJlbGF0aXZlIGxvY2F0aW9ucyB0byB0aG9zZSAqLworCV9fX0RTUF9EVUFMXzE2QklUX0FMTE9DKAorCSAgICAgaW50ZXJ2YWxfdGltZXJfcGVyaW9kLAorCSAgICAgaXRkX3VudXNlZAorCSkKKworCS8qIHVzZWQgZm9yIHRoaXMgZGF0YSBpbiB0aGUgU1BPUyBjb250cm9sIGJsb2NrIGZvciBTUE9TIDEuMCAqLworCV9fX0RTUF9EVUFMXzE2QklUX0FMTE9DKAorCSAgICAgbnVtX0ZHX3RpY2tzX3RoaXNfaW50ZXJ2YWwsICAgICAgICAKKwkgICAgIG51bV9pbnRlcnZhbHMKKwkpCit9IGludGVydmFsX3RpbWVyX2RhdGFfdDsgICAgCisKKworLyogVGhpcyBzdHJ1Y3R1cmUgY29udGFpbnMgZXh0cmEgc3RvcmFnZSBmb3IgdGhlIHRhc2sgdHJlZQorICAgQ3VycmVudGx5LCB0aGlzIGFkZGl0aW9uYWwgZGF0YSBpcyByZWxhdGVkIG9ubHkgdG8gYSBmdWxsIGNvbnRleHQgc2F2ZSAqLwordHlwZWRlZiBzdHJ1Y3QgX3Rhc2tfdHJlZV9jb250ZXh0X2Jsb2NrX3QgeworCS8qIFVwIHRvIDEwIHZhbHVlcyBhcmUgc2F2ZWQgb250byB0aGUgc3RhY2suICA4IGZvciB0aGUgdGFzayB0cmVlLCAxIGZvcgorCSAgIFRoZSBhY2Nlc3MgdG8gdGhlIGNvbnRleHQgc3dpdGNoIChjYWxsIG9yIGludGVycnVwdCksIGFuZCAxIHNwYXJlIHRoYXQKKwkgICB1c2VycyBzaG91bGQgbmV2ZXIgdXNlLiAgVGhpcyBsYXN0IG1heSBiZSByZXF1aXJlZCBieSB0aGUgc3lzdGVtICovCisJX19fRFNQX0RVQUxfMTZCSVRfQUxMT0MoCisJICAgICBzdGFjazEsCisJICAgICBzdGFjazAKKwkpCisJX19fRFNQX0RVQUxfMTZCSVRfQUxMT0MoCisJICAgICBzdGFjazMsCisJICAgICBzdGFjazIKKwkpCisJX19fRFNQX0RVQUxfMTZCSVRfQUxMT0MoCisJICAgICBzdGFjazUsCisJICAgICBzdGFjazQKKwkpCisJX19fRFNQX0RVQUxfMTZCSVRfQUxMT0MoCisJICAgICBzdGFjazcsCisJICAgICBzdGFjazYKKwkpCisJX19fRFNQX0RVQUxfMTZCSVRfQUxMT0MoCisJICAgICBzdGFjazksCisJICAgICBzdGFjazgKKwkpCisKKwl1MzIJICBzYXZlcmZlOwkJCQkJCisKKwkvKiBWYWx1ZSBtYXkgYmUgb3ZlcndyaXRlbiBieSBzdGFjayBzYXZlIGFsZ29yaXRobS4KKwkgICBSZXRhaW4gdGhlIHNpemUgb2YgdGhlIHN0YWNrIGRhdGEgc2F2ZWQgaGVyZSBpZiB1c2VkICovCisJX19fRFNQX0RVQUxfMTZCSVRfQUxMT0MoCisgICAgICAgICAgICAgcmVzZXJ2ZWQxLAkKKyAgCSAgICAgc3RhY2tfc2l6ZQorCSkKKwl1MzIJCXNhdmVyYmE7CSAgLyogKEhGRykgKi8KKwl1MzIJCXNhdmVyZGM7CisJdTMyCQlzYXZlcnNfY29uZmlnXzIzOyAvKiAoSEZHKSAqLworCXUzMgkJc2F2ZXJzX0RNQTIzOwkgIC8qIChIRkcpICovCisJdTMyCQlzYXZlcnNhMDsKKwl1MzIJCXNhdmVyc2kwOworCXUzMgkJc2F2ZXJzYTE7CisJdTMyCQlzYXZlcnNpMTsKKwl1MzIJCXNhdmVyc2EzOworCXUzMgkJc2F2ZXJzZDA7CisJdTMyCQlzYXZlcnNkMTsKKwl1MzIJCXNhdmVyc2QzOworCXUzMgkJc2F2ZXJzX2NvbmZpZzAxOworCXUzMgkJc2F2ZXJzX0RNQTAxOworCXUzMgkJc2F2ZWFjYzBobDsKKwl1MzIJCXNhdmVhY2MxaGw7CisJdTMyCQlzYXZlYWNjMHhhY2MxeDsKKwl1MzIJCXNhdmVhY2MyaGw7CisJdTMyCQlzYXZlYWNjM2hsOworCXUzMgkJc2F2ZWFjYzJ4YWNjM3g7CisJdTMyCQlzYXZlYXV4MGhsOworCXUzMgkJc2F2ZWF1eDFobDsKKwl1MzIJCXNhdmVhdXgweGF1eDF4OworCXUzMgkJc2F2ZWF1eDJobDsKKwl1MzIJCXNhdmVhdXgzaGw7CisJdTMyCQlzYXZlYXV4MnhhdXgzeDsKKwl1MzIJCXNhdmVyc2hvdXRobDsKKwl1MzIJCXNhdmVyc2hvdXR4bWFjbW9kZTsKK30gdGFza190cmVlX2NvbnRleHRfYmxvY2tfdDsJCQkJCQkgIAorICAgICAgICAgICAgICAgIAorCit0eXBlZGVmIHN0cnVjdCBfdGFza190cmVlX2NvbnRyb2xfYmxvY2tfdAl7CisJaGZfc2F2ZV9hcmVhX3QJCSAJY29udGV4dDsKKwl0cmVlX2xpbmtfdAkJCWxpbmtzOworCXRhc2tfdHJlZV9kYXRhX3QJCWRhdGE7CisJdGFza190cmVlX2NvbnRleHRfYmxvY2tfdAljb250ZXh0X2JsazsKKwlpbnRlcnZhbF90aW1lcl9kYXRhX3QJCWludF90aW1lcjsKK30gdGFza190cmVlX2NvbnRyb2xfYmxvY2tfdDsKKworCisjZW5kaWYgLyogX19EU1BfVEFTS19UWVBFU19IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvY3M4NDAzLmggYi9pbmNsdWRlL3NvdW5kL2NzODQwMy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiN2QyMTYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3NvdW5kL2NzODQwMy5oCkBAIC0wLDAgKzEsMjU3IEBACisjaWZuZGVmIF9fU09VTkRfQ1M4NDAzX0gKKyNkZWZpbmUgX19TT1VORF9DUzg0MDNfSAorCisvKgorICogIFJvdXRpbmVzIGZvciBDaXJydXMgTG9naWMgQ1M4NDAzL0NTODQwNEEgSUVDOTU4IChTL1BESUYpIFRyYW5zbWl0dGVyCisgKiAgQ29weXJpZ2h0IChjKSBieSBKYXJvc2xhdiBLeXNlbGEgPHBlcmV4QHN1c2UuY3o+LAorICoJCSAgICAgVGFrYXNoaSBJd2FpIDx0aXdhaUBzdXNlLmRlPgorICoKKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKgorICovCisKKyNpZmRlZiBTTkRfQ1M4NDAzCisKKyNpZm5kZWYgU05EX0NTODQwM19ERUNMCisjZGVmaW5lIFNORF9DUzg0MDNfREVDTCBzdGF0aWMKKyNlbmRpZgorI2lmbmRlZiBTTkRfQ1M4NDAzX0RFQ09ERQorI2RlZmluZSBTTkRfQ1M4NDAzX0RFQ09ERSBzbmRfY3M4NDAzX2RlY29kZV9zcGRpZl9iaXRzCisjZW5kaWYKKyNpZm5kZWYgU05EX0NTODQwM19FTkNPREUKKyNkZWZpbmUgU05EX0NTODQwM19FTkNPREUgc25kX2NzODQwM19lbmNvZGVfc3BkaWZfYml0cworI2VuZGlmCisKKworU05EX0NTODQwM19ERUNMIHZvaWQgU05EX0NTODQwM19ERUNPREUoc25kX2Flc19pZWM5NThfdCAqZGlnYSwgdW5zaWduZWQgY2hhciBiaXRzKQoreworCWlmIChiaXRzICYgMHgwMSkgewkvKiBjb25zdW1lciAqLworCQlpZiAoIShiaXRzICYgMHgwMikpCisJCQlkaWdhLT5zdGF0dXNbMF0gfD0gSUVDOTU4X0FFUzBfTk9OQVVESU87CisJCWlmICghKGJpdHMgJiAweDA4KSkKKwkJCWRpZ2EtPnN0YXR1c1swXSB8PSBJRUM5NThfQUVTMF9DT05fTk9UX0NPUFlSSUdIVDsKKwkJc3dpdGNoIChiaXRzICYgMHgxMCkgeworCQljYXNlIDB4MTA6IGRpZ2EtPnN0YXR1c1swXSB8PSBJRUM5NThfQUVTMF9DT05fRU1QSEFTSVNfTk9ORTsgYnJlYWs7CisJCWNhc2UgMHgwMDogZGlnYS0+c3RhdHVzWzBdIHw9IElFQzk1OF9BRVMwX0NPTl9FTVBIQVNJU181MDE1OyBicmVhazsKKwkJfQorCQlpZiAoIShiaXRzICYgMHg4MCkpCisJCQlkaWdhLT5zdGF0dXNbMV0gfD0gSUVDOTU4X0FFUzFfQ09OX09SSUdJTkFMOworCQlzd2l0Y2ggKGJpdHMgJiAweDYwKSB7CisJCWNhc2UgMHgwMDogZGlnYS0+c3RhdHVzWzFdIHw9IElFQzk1OF9BRVMxX0NPTl9NQUdORVRJQ19JRDsgYnJlYWs7CisJCWNhc2UgMHgyMDogZGlnYS0+c3RhdHVzWzFdIHw9IElFQzk1OF9BRVMxX0NPTl9ESUdESUdDT05WX0lEOyBicmVhazsKKwkJY2FzZSAweDQwOiBkaWdhLT5zdGF0dXNbMV0gfD0gSUVDOTU4X0FFUzFfQ09OX0xBU0VST1BUX0lEOyBicmVhazsKKwkJY2FzZSAweDYwOiBkaWdhLT5zdGF0dXNbMV0gfD0gSUVDOTU4X0FFUzFfQ09OX0dFTkVSQUw7IGJyZWFrOworCQl9CisJCXN3aXRjaCAoYml0cyAmIDB4MDYpIHsKKwkJY2FzZSAweDAwOiBkaWdhLT5zdGF0dXNbM10gfD0gSUVDOTU4X0FFUzNfQ09OX0ZTXzQ0MTAwOyBicmVhazsKKwkJY2FzZSAweDAyOiBkaWdhLT5zdGF0dXNbM10gfD0gSUVDOTU4X0FFUzNfQ09OX0ZTXzQ4MDAwOyBicmVhazsKKwkJY2FzZSAweDA0OiBkaWdhLT5zdGF0dXNbM10gfD0gSUVDOTU4X0FFUzNfQ09OX0ZTXzMyMDAwOyBicmVhazsKKwkJfQorCX0gZWxzZSB7CisJCWRpZ2EtPnN0YXR1c1swXSA9IElFQzk1OF9BRVMwX1BST0ZFU1NJT05BTDsKKwkJc3dpdGNoIChiaXRzICYgMHgxOCkgeworCQljYXNlIDB4MDA6IGRpZ2EtPnN0YXR1c1swXSB8PSBJRUM5NThfQUVTMF9QUk9fRlNfMzIwMDA7IGJyZWFrOworCQljYXNlIDB4MTA6IGRpZ2EtPnN0YXR1c1swXSB8PSBJRUM5NThfQUVTMF9QUk9fRlNfNDQxMDA7IGJyZWFrOworCQljYXNlIDB4MDg6IGRpZ2EtPnN0YXR1c1swXSB8PSBJRUM5NThfQUVTMF9QUk9fRlNfNDgwMDA7IGJyZWFrOworCQljYXNlIDB4MTg6IGRpZ2EtPnN0YXR1c1swXSB8PSBJRUM5NThfQUVTMF9QUk9fRlNfTk9USUQ7IGJyZWFrOworCQl9CisJCXN3aXRjaCAoYml0cyAmIDB4NjApIHsKKwkJY2FzZSAweDIwOiBkaWdhLT5zdGF0dXNbMF0gfD0gSUVDOTU4X0FFUzBfUFJPX0VNUEhBU0lTX05PTkU7IGJyZWFrOworCQljYXNlIDB4NDA6IGRpZ2EtPnN0YXR1c1swXSB8PSBJRUM5NThfQUVTMF9QUk9fRU1QSEFTSVNfNTAxNTsgYnJlYWs7CisJCWNhc2UgMHgwMDogZGlnYS0+c3RhdHVzWzBdIHw9IElFQzk1OF9BRVMwX1BST19FTVBIQVNJU19DQ0lUVDsgYnJlYWs7CisJCWNhc2UgMHg2MDogZGlnYS0+c3RhdHVzWzBdIHw9IElFQzk1OF9BRVMwX1BST19FTVBIQVNJU19OT1RJRDsgYnJlYWs7CisJCX0KKwkJaWYgKGJpdHMgJiAweDgwKQorCQkJZGlnYS0+c3RhdHVzWzFdIHw9IElFQzk1OF9BRVMxX1BST19NT0RFX1NURVJFT1BIT05JQzsKKwl9Cit9CisKK1NORF9DUzg0MDNfREVDTCB1bnNpZ25lZCBjaGFyIFNORF9DUzg0MDNfRU5DT0RFKHNuZF9hZXNfaWVjOTU4X3QgKmRpZ2EpCit7CisJdW5zaWduZWQgY2hhciBiaXRzOworCisJaWYgKCEoZGlnYS0+c3RhdHVzWzBdICYgSUVDOTU4X0FFUzBfUFJPRkVTU0lPTkFMKSkgeworCQliaXRzID0gMHgwMTsJLyogY29uc3VtZXIgbW9kZSAqLworCQlpZiAoZGlnYS0+c3RhdHVzWzBdICYgSUVDOTU4X0FFUzBfTk9OQVVESU8pCisJCQliaXRzICY9IH4weDAyOworCQllbHNlCisJCQliaXRzIHw9IDB4MDI7CisJCWlmIChkaWdhLT5zdGF0dXNbMF0gJiBJRUM5NThfQUVTMF9DT05fTk9UX0NPUFlSSUdIVCkKKwkJCWJpdHMgJj0gfjB4MDg7CisJCWVsc2UKKwkJCWJpdHMgfD0gMHgwODsKKwkJc3dpdGNoIChkaWdhLT5zdGF0dXNbMF0gJiBJRUM5NThfQUVTMF9DT05fRU1QSEFTSVMpIHsKKwkJZGVmYXVsdDoKKwkJY2FzZSBJRUM5NThfQUVTMF9DT05fRU1QSEFTSVNfTk9ORTogYml0cyB8PSAweDEwOyBicmVhazsKKwkJY2FzZSBJRUM5NThfQUVTMF9DT05fRU1QSEFTSVNfNTAxNTogYml0cyB8PSAweDAwOyBicmVhazsKKwkJfQorCQlpZiAoZGlnYS0+c3RhdHVzWzFdICYgSUVDOTU4X0FFUzFfQ09OX09SSUdJTkFMKQorCQkJYml0cyAmPSB+MHg4MDsKKwkJZWxzZQorCQkJYml0cyB8PSAweDgwOworCQlpZiAoKGRpZ2EtPnN0YXR1c1sxXSAmIElFQzk1OF9BRVMxX0NPTl9DQVRFR09SWSkgPT0gSUVDOTU4X0FFUzFfQ09OX0dFTkVSQUwpCisJCQliaXRzIHw9IDB4NjA7CisJCWVsc2UgeworCQkJc3dpdGNoKGRpZ2EtPnN0YXR1c1sxXSAmIElFQzk1OF9BRVMxX0NPTl9NQUdORVRJQ19NQVNLKSB7CisJCQljYXNlIElFQzk1OF9BRVMxX0NPTl9NQUdORVRJQ19JRDoKKwkJCQliaXRzIHw9IDB4MDA7IGJyZWFrOworCQkJY2FzZSBJRUM5NThfQUVTMV9DT05fRElHRElHQ09OVl9JRDoKKwkJCQliaXRzIHw9IDB4MjA7IGJyZWFrOworCQkJZGVmYXVsdDoKKwkJCWNhc2UgSUVDOTU4X0FFUzFfQ09OX0xBU0VST1BUX0lEOgorCQkJCWJpdHMgfD0gMHg0MDsgYnJlYWs7CisJCQl9CisJCX0KKwkJc3dpdGNoIChkaWdhLT5zdGF0dXNbM10gJiBJRUM5NThfQUVTM19DT05fRlMpIHsKKwkJZGVmYXVsdDoKKwkJY2FzZSBJRUM5NThfQUVTM19DT05fRlNfNDQxMDA6IGJpdHMgfD0gMHgwMDsgYnJlYWs7CisJCWNhc2UgSUVDOTU4X0FFUzNfQ09OX0ZTXzQ4MDAwOiBiaXRzIHw9IDB4MDI7IGJyZWFrOworCQljYXNlIElFQzk1OF9BRVMzX0NPTl9GU18zMjAwMDogYml0cyB8PSAweDA0OyBicmVhazsKKwkJfQorCX0gZWxzZSB7CisJCWJpdHMgPSAweDAwOwkvKiBwcm9mZXNzaW9uYWwgbW9kZSAqLworCQlpZiAoZGlnYS0+c3RhdHVzWzBdICYgSUVDOTU4X0FFUzBfTk9OQVVESU8pCisJCQliaXRzICY9IH4weDAyOworCQllbHNlCisJCQliaXRzIHw9IDB4MDI7CisJCS8qIENIRUNLTUU6IEknbSBub3Qgc3VyZSBhYm91dCB0aGUgYml0IG9yZGVyIGluIHZhbCBoZXJlICovCisJCXN3aXRjaCAoZGlnYS0+c3RhdHVzWzBdICYgSUVDOTU4X0FFUzBfUFJPX0ZTKSB7CisJCWNhc2UgSUVDOTU4X0FFUzBfUFJPX0ZTXzMyMDAwOgliaXRzIHw9IDB4MDA7IGJyZWFrOworCQljYXNlIElFQzk1OF9BRVMwX1BST19GU180NDEwMDoJYml0cyB8PSAweDEwOyBicmVhazsJLyogNDQuMWtIeiAqLworCQljYXNlIElFQzk1OF9BRVMwX1BST19GU180ODAwMDoJYml0cyB8PSAweDA4OyBicmVhazsJLyogNDhrSHogKi8KKwkJZGVmYXVsdDoKKwkJY2FzZSBJRUM5NThfQUVTMF9QUk9fRlNfTk9USUQ6IGJpdHMgfD0gMHgxODsgYnJlYWs7CisJCX0KKwkJc3dpdGNoIChkaWdhLT5zdGF0dXNbMF0gJiBJRUM5NThfQUVTMF9QUk9fRU1QSEFTSVMpIHsKKwkJY2FzZSBJRUM5NThfQUVTMF9QUk9fRU1QSEFTSVNfTk9ORTogYml0cyB8PSAweDIwOyBicmVhazsKKwkJY2FzZSBJRUM5NThfQUVTMF9QUk9fRU1QSEFTSVNfNTAxNTogYml0cyB8PSAweDQwOyBicmVhazsKKwkJY2FzZSBJRUM5NThfQUVTMF9QUk9fRU1QSEFTSVNfQ0NJVFQ6IGJpdHMgfD0gMHgwMDsgYnJlYWs7CisJCWRlZmF1bHQ6CisJCWNhc2UgSUVDOTU4X0FFUzBfUFJPX0VNUEhBU0lTX05PVElEOiBiaXRzIHw9IDB4NjA7IGJyZWFrOworCQl9CisJCXN3aXRjaCAoZGlnYS0+c3RhdHVzWzFdICYgSUVDOTU4X0FFUzFfUFJPX01PREUpIHsKKwkJY2FzZSBJRUM5NThfQUVTMV9QUk9fTU9ERV9UV086CisJCWNhc2UgSUVDOTU4X0FFUzFfUFJPX01PREVfU1RFUkVPUEhPTklDOiBiaXRzIHw9IDB4MDA7IGJyZWFrOworCQlkZWZhdWx0OiBiaXRzIHw9IDB4ODA7IGJyZWFrOworCQl9CisJfQorCXJldHVybiBiaXRzOworfQorCisjZW5kaWYgLyogU05EX0NTODQwMyAqLworCisjaWZkZWYgU05EX0NTODQwNAorCisjaWZuZGVmIFNORF9DUzg0MDRfREVDTAorI2RlZmluZSBTTkRfQ1M4NDA0X0RFQ0wgc3RhdGljCisjZW5kaWYKKyNpZm5kZWYgU05EX0NTODQwNF9ERUNPREUKKyNkZWZpbmUgU05EX0NTODQwNF9ERUNPREUgc25kX2NzODQwNF9kZWNvZGVfc3BkaWZfYml0cworI2VuZGlmCisjaWZuZGVmIFNORF9DUzg0MDRfRU5DT0RFCisjZGVmaW5lIFNORF9DUzg0MDRfRU5DT0RFIHNuZF9jczg0MDRfZW5jb2RlX3NwZGlmX2JpdHMKKyNlbmRpZgorCisKK1NORF9DUzg0MDRfREVDTCB2b2lkIFNORF9DUzg0MDRfREVDT0RFKHNuZF9hZXNfaWVjOTU4X3QgKmRpZ2EsIHVuc2lnbmVkIGNoYXIgYml0cykKK3sKKwlpZiAoYml0cyAmIDB4MTApIHsJLyogY29uc3VtZXIgKi8KKwkJaWYgKCEoYml0cyAmIDB4MjApKQorCQkJZGlnYS0+c3RhdHVzWzBdIHw9IElFQzk1OF9BRVMwX0NPTl9OT1RfQ09QWVJJR0hUOworCQlpZiAoIShiaXRzICYgMHg0MCkpCisJCQlkaWdhLT5zdGF0dXNbMF0gfD0gSUVDOTU4X0FFUzBfQ09OX0VNUEhBU0lTXzUwMTU7CisJCWlmICghKGJpdHMgJiAweDgwKSkKKwkJCWRpZ2EtPnN0YXR1c1sxXSB8PSBJRUM5NThfQUVTMV9DT05fT1JJR0lOQUw7CisJCXN3aXRjaCAoYml0cyAmIDB4MDMpIHsKKwkJY2FzZSAweDAwOiBkaWdhLT5zdGF0dXNbMV0gfD0gSUVDOTU4X0FFUzFfQ09OX0RBVDsgYnJlYWs7CisJCWNhc2UgMHgwMzogZGlnYS0+c3RhdHVzWzFdIHw9IElFQzk1OF9BRVMxX0NPTl9HRU5FUkFMOyBicmVhazsKKwkJfQorCQlzd2l0Y2ggKGJpdHMgJiAweDA2KSB7CisJCWNhc2UgMHgwMjogZGlnYS0+c3RhdHVzWzNdIHw9IElFQzk1OF9BRVMzX0NPTl9GU18zMjAwMDsgYnJlYWs7CisJCWNhc2UgMHgwNDogZGlnYS0+c3RhdHVzWzNdIHw9IElFQzk1OF9BRVMzX0NPTl9GU180ODAwMDsgYnJlYWs7CisJCWNhc2UgMHgwNjogZGlnYS0+c3RhdHVzWzNdIHw9IElFQzk1OF9BRVMzX0NPTl9GU180NDEwMDsgYnJlYWs7CisJCX0KKwl9IGVsc2UgeworCQlkaWdhLT5zdGF0dXNbMF0gPSBJRUM5NThfQUVTMF9QUk9GRVNTSU9OQUw7CisJCWlmICghKGJpdHMgJiAweDA0KSkKKwkJCWRpZ2EtPnN0YXR1c1swXSB8PSBJRUM5NThfQUVTMF9OT05BVURJTzsKKwkJc3dpdGNoIChiaXRzICYgMHg2MCkgeworCQljYXNlIDB4MDA6IGRpZ2EtPnN0YXR1c1swXSB8PSBJRUM5NThfQUVTMF9QUk9fRlNfMzIwMDA7IGJyZWFrOworCQljYXNlIDB4NDA6IGRpZ2EtPnN0YXR1c1swXSB8PSBJRUM5NThfQUVTMF9QUk9fRlNfNDQxMDA7IGJyZWFrOworCQljYXNlIDB4MjA6IGRpZ2EtPnN0YXR1c1swXSB8PSBJRUM5NThfQUVTMF9QUk9fRlNfNDgwMDA7IGJyZWFrOworCQljYXNlIDB4NjA6IGRpZ2EtPnN0YXR1c1swXSB8PSBJRUM5NThfQUVTMF9QUk9fRlNfTk9USUQ7IGJyZWFrOworCQl9CisJCXN3aXRjaCAoYml0cyAmIDB4MDMpIHsKKwkJY2FzZSAweDAyOiBkaWdhLT5zdGF0dXNbMF0gfD0gSUVDOTU4X0FFUzBfUFJPX0VNUEhBU0lTX05PTkU7IGJyZWFrOworCQljYXNlIDB4MDE6IGRpZ2EtPnN0YXR1c1swXSB8PSBJRUM5NThfQUVTMF9QUk9fRU1QSEFTSVNfNTAxNTsgYnJlYWs7CisJCWNhc2UgMHgwMDogZGlnYS0+c3RhdHVzWzBdIHw9IElFQzk1OF9BRVMwX1BST19FTVBIQVNJU19DQ0lUVDsgYnJlYWs7CisJCWNhc2UgMHgwMzogZGlnYS0+c3RhdHVzWzBdIHw9IElFQzk1OF9BRVMwX1BST19FTVBIQVNJU19OT1RJRDsgYnJlYWs7CisJCX0KKwkJaWYgKCEoYml0cyAmIDB4ODApKQorCQkJZGlnYS0+c3RhdHVzWzFdIHw9IElFQzk1OF9BRVMxX1BST19NT0RFX1NURVJFT1BIT05JQzsKKwl9Cit9CisKK1NORF9DUzg0MDRfREVDTCB1bnNpZ25lZCBjaGFyIFNORF9DUzg0MDRfRU5DT0RFKHNuZF9hZXNfaWVjOTU4X3QgKmRpZ2EpCit7CisJdW5zaWduZWQgY2hhciBiaXRzOworCisJaWYgKCEoZGlnYS0+c3RhdHVzWzBdICYgSUVDOTU4X0FFUzBfUFJPRkVTU0lPTkFMKSkgeworCQliaXRzID0gMHgxMDsJLyogY29uc3VtZXIgbW9kZSAqLworCQlpZiAoIShkaWdhLT5zdGF0dXNbMF0gJiBJRUM5NThfQUVTMF9DT05fTk9UX0NPUFlSSUdIVCkpCisJCQliaXRzIHw9IDB4MjA7CisJCWlmICgoZGlnYS0+c3RhdHVzWzBdICYgSUVDOTU4X0FFUzBfQ09OX0VNUEhBU0lTKSA9PSBJRUM5NThfQUVTMF9DT05fRU1QSEFTSVNfTk9ORSkKKwkJCWJpdHMgfD0gMHg0MDsKKwkJaWYgKCEoZGlnYS0+c3RhdHVzWzFdICYgSUVDOTU4X0FFUzFfQ09OX09SSUdJTkFMKSkKKwkJCWJpdHMgfD0gMHg4MDsKKwkJaWYgKChkaWdhLT5zdGF0dXNbMV0gJiBJRUM5NThfQUVTMV9DT05fQ0FURUdPUlkpID09IElFQzk1OF9BRVMxX0NPTl9HRU5FUkFMKQorCQkJYml0cyB8PSAweDAzOworCQlzd2l0Y2ggKGRpZ2EtPnN0YXR1c1szXSAmIElFQzk1OF9BRVMzX0NPTl9GUykgeworCQlkZWZhdWx0OgorCQljYXNlIElFQzk1OF9BRVMzX0NPTl9GU180NDEwMDogYml0cyB8PSAweDA2OyBicmVhazsKKwkJY2FzZSBJRUM5NThfQUVTM19DT05fRlNfNDgwMDA6IGJpdHMgfD0gMHgwNDsgYnJlYWs7CisJCWNhc2UgSUVDOTU4X0FFUzNfQ09OX0ZTXzMyMDAwOiBiaXRzIHw9IDB4MDI7IGJyZWFrOworCQl9CisJfSBlbHNlIHsKKwkJYml0cyA9IDB4MDA7CS8qIHByb2Zlc3Npb25hbCBtb2RlICovCisJCWlmICghKGRpZ2EtPnN0YXR1c1swXSAmIElFQzk1OF9BRVMwX05PTkFVRElPKSkKKwkJCWJpdHMgfD0gMHgwNDsKKwkJc3dpdGNoIChkaWdhLT5zdGF0dXNbMF0gJiBJRUM5NThfQUVTMF9QUk9fRlMpIHsKKwkJY2FzZSBJRUM5NThfQUVTMF9QUk9fRlNfMzIwMDA6CWJpdHMgfD0gMHgwMDsgYnJlYWs7CisJCWNhc2UgSUVDOTU4X0FFUzBfUFJPX0ZTXzQ0MTAwOgliaXRzIHw9IDB4NDA7IGJyZWFrOwkvKiA0NC4xa0h6ICovCisJCWNhc2UgSUVDOTU4X0FFUzBfUFJPX0ZTXzQ4MDAwOgliaXRzIHw9IDB4MjA7IGJyZWFrOwkvKiA0OGtIeiAqLworCQlkZWZhdWx0OgorCQljYXNlIElFQzk1OF9BRVMwX1BST19GU19OT1RJRDoJYml0cyB8PSAweDAwOyBicmVhazsKKwkJfQorCQlzd2l0Y2ggKGRpZ2EtPnN0YXR1c1swXSAmIElFQzk1OF9BRVMwX1BST19FTVBIQVNJUykgeworCQljYXNlIElFQzk1OF9BRVMwX1BST19FTVBIQVNJU19OT05FOiBiaXRzIHw9IDB4MDI7IGJyZWFrOworCQljYXNlIElFQzk1OF9BRVMwX1BST19FTVBIQVNJU181MDE1OiBiaXRzIHw9IDB4MDE7IGJyZWFrOworCQljYXNlIElFQzk1OF9BRVMwX1BST19FTVBIQVNJU19DQ0lUVDogYml0cyB8PSAweDAwOyBicmVhazsKKwkJZGVmYXVsdDoKKwkJY2FzZSBJRUM5NThfQUVTMF9QUk9fRU1QSEFTSVNfTk9USUQ6IGJpdHMgfD0gMHgwMzsgYnJlYWs7CisJCX0KKwkJc3dpdGNoIChkaWdhLT5zdGF0dXNbMV0gJiBJRUM5NThfQUVTMV9QUk9fTU9ERSkgeworCQljYXNlIElFQzk1OF9BRVMxX1BST19NT0RFX1RXTzoKKwkJY2FzZSBJRUM5NThfQUVTMV9QUk9fTU9ERV9TVEVSRU9QSE9OSUM6IGJpdHMgfD0gMHgwMDsgYnJlYWs7CisJCWRlZmF1bHQ6IGJpdHMgfD0gMHg4MDsgYnJlYWs7CisJCX0KKwl9CisJcmV0dXJuIGJpdHM7Cit9CisKKyNlbmRpZiAvKiBTTkRfQ1M4NDA0ICovCisKKyNlbmRpZiAvKiBfX1NPVU5EX0NTODQwM19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL2NzODQyNy5oIGIvaW5jbHVkZS9zb3VuZC9jczg0MjcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzI1YjcwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9zb3VuZC9jczg0MjcuaApAQCAtMCwwICsxLDE5NiBAQAorI2lmbmRlZiBfX1NPVU5EX0NTODQyN19ICisjZGVmaW5lIF9fU09VTkRfQ1M4NDI3X0gKKworLyoKKyAqICBSb3V0aW5lcyBmb3IgQ2lycnVzIExvZ2ljIENTODQyNworICogIENvcHlyaWdodCAoYykgYnkgSmFyb3NsYXYgS3lzZWxhIDxwZXJleEBzdXNlLmN6PiwKKyAqCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8c291bmQvaTJjLmg+CisKKyNkZWZpbmUgQ1M4NDI3X0JBU0VfQUREUgkweDEwCS8qIGJhc2UgSTJDIGFkZHJlc3MgKi8KKworI2RlZmluZSBDUzg0MjdfUkVHX0FVVE9JTkMJMHg4MAkvKiBmbGFnIC0gYXV0b2luY3JlbWVudCAqLworI2RlZmluZSBDUzg0MjdfUkVHX0NPTlRST0wxCTB4MDEKKyNkZWZpbmUgQ1M4NDI3X1JFR19DT05UUk9MMgkweDAyCisjZGVmaW5lIENTODQyN19SRUdfREFUQUZMT1cJMHgwMworI2RlZmluZSBDUzg0MjdfUkVHX0NMT0NLU09VUkNFCTB4MDQKKyNkZWZpbmUgQ1M4NDI3X1JFR19TRVJJQUxJTlBVVAkweDA1CisjZGVmaW5lIENTODQyN19SRUdfU0VSSUFMT1VUUFVUCTB4MDYKKyNkZWZpbmUgQ1M4NDI3X1JFR19JTlQxU1RBVFVTCTB4MDcKKyNkZWZpbmUgQ1M4NDI3X1JFR19JTlQyU1RBVFVTCTB4MDgKKyNkZWZpbmUgQ1M4NDI3X1JFR19JTlQxTUFTSwkweDA5CisjZGVmaW5lIENTODQyN19SRUdfSU5UMU1PREVNU0IJMHgwYQorI2RlZmluZSBDUzg0MjdfUkVHX0lOVDFNT0RFTFNCCTB4MGIKKyNkZWZpbmUgQ1M4NDI3X1JFR19JTlQyTUFTSwkweDBjCisjZGVmaW5lIENTODQyN19SRUdfSU5UMk1PREVNU0IJMHgwZAorI2RlZmluZSBDUzg0MjdfUkVHX0lOVDJNT0RFTFNCCTB4MGUKKyNkZWZpbmUgQ1M4NDI3X1JFR19SRUNWQ1NEQVRBCTB4MGYKKyNkZWZpbmUgQ1M4NDI3X1JFR19SRUNWRVJST1JTCTB4MTAKKyNkZWZpbmUgQ1M4NDI3X1JFR19SRUNWRVJSTUFTSwkweDExCisjZGVmaW5lIENTODQyN19SRUdfQ1NEQVRBQlVGCTB4MTIKKyNkZWZpbmUgQ1M4NDI3X1JFR19VREFUQUJVRgkweDEzCisjZGVmaW5lIENTODQyN19SRUdfUVNVQkNPREUJMHgxNAkvKiAweDE0LTB4MWQgKDEwIGJ5dGVzKSAqLworI2RlZmluZSBDUzg0MjdfUkVHX09NQ0tSTUNLUkFUSU8gMHgxZQorI2RlZmluZSBDUzg0MjdfUkVHX0NPUlVfREFUQUJVRgkweDIwCS8qIDI0IGJ5dGUgYnVmZmVyIGFyZWEgKi8KKyNkZWZpbmUgQ1M4NDI3X1JFR19JRF9BTkRfVkVSCTB4N2YKKworLyogQ1M4NDI3X1JFR19DT05UUk9MMSBiaXRzICovCisjZGVmaW5lIENTODQyN19TV0NMSwkJKDE8PDcpCS8qIDAgPSBSTUNLIGRlZmF1bHQsIDEgPSBPTUNLIG91dHB1dCBvbiBSTUNLIHBpbiAqLworI2RlZmluZSBDUzg0MjdfVlNFVAkJKDE8PDYpCS8qIDAgPSB2YWxpZCBQQ00gZGF0YSwgMSA9IGludmFsaWQgUENNIGRhdGEgKi8KKyNkZWZpbmUgQ1M4NDI3X01VVEVTQU8JCSgxPDw1KQkvKiBtdXRlIGNvbnRyb2wgZm9yIHRoZSBzZXJpYWwgYXVkaW8gb3V0cHV0IHBvcnQsIDAgPSBkaXNhYmxlZCwgMSA9IGVuYWJsZWQgKi8KKyNkZWZpbmUgQ1M4NDI3X01VVEVBRVMJCSgxPDw0KQkvKiBtdXRlIGNvbnRyb2wgZm9yIHRoZSBBRVMgdHJhbnNtaXR0ZXIgb3V0cHV0LCAwID0gZGlzYWJsZWQsIDEgPSBlbmFibGVkICovCisjZGVmaW5lIENTODQyN19JTlRNQVNLCQkoMzw8MSkJLyogaW50ZXJydXB0IG91dHB1dCBwaW4gc2V0dXAgbWFzayAqLworI2RlZmluZSBDUzg0MjdfSU5UQUNUSElHSAkoMDw8MSkJLyogYWN0aXZlIGhpZ2ggKi8KKyNkZWZpbmUgQ1M4NDI3X0lOVEFDVExPVwkoMTw8MSkJLyogYWN0aXZlIGxvdyAqLworI2RlZmluZSBDUzg0MjdfSU5UT1BFTkRSQUlOCSgyPDwxKQkvKiBvcGVuIGRyYWluLCBhY3RpdmUgbG93ICovCisjZGVmaW5lIENTODQyN19UQ0JMRElSCQkoMTw8MCkJLyogMCA9IFRDQkwgaXMgYW4gaW5wdXQsIDEgPSBUQ0JMIGlzIGFuIG91dHB1dCAqLworCisvKiBDUzg0MjdfUkVRX0NPTlRST0wyIGJpdHMgKi8KKyNkZWZpbmUgQ1M4NDI3X0hPTERNQVNLCQkoMzw8NSkJLyogYWN0aW9uIHdoZW4gYSByZWNlaXZlciBlcnJvciBvY2N1cnMgKi8KKyNkZWZpbmUgQ1M4NDI3X0hPTERMQVNUU0FNUExFCSgwPDw1KQkvKiBob2xkIHRoZSBsYXN0IHZhbGlkIHNhbXBsZSAqLworI2RlZmluZSBDUzg0MjdfSE9MRFpFUk8JCSgxPDw1KQkvKiByZXBsYWNlIHRoZSBjdXJyZW50IGF1ZGlvIHNhbXBsZSB3aXRoIHplcm8gKG11dGUpICovCisjZGVmaW5lIENTODQyN19IT0xETk9DSEFOR0UJKDI8PDUpCS8qIGRvIG5vdCBjaGFuZ2UgdGhlIHJlY2VpdmVkIGF1ZGlvIHNhbXBsZSAqLworI2RlZmluZSBDUzg0MjdfUk1DS0YJCSgxPDw0KQkvKiAwID0gMjU2KkZzaSwgMSA9IDEyOCpGc2kgKi8KKyNkZWZpbmUgQ1M4NDI3X01NUgkJKDE8PDMpCS8qIEFFUzMgcmVjZWl2ZXIgb3BlcmF0aW9uLCAwID0gc3RlcmVvLCAxID0gbW9ubyAqLworI2RlZmluZSBDUzg0MjdfTU1UCQkoMTw8MikJLyogQUVTMyB0cmFuc21pdHRlciBvcGVyYXRpb24sIDAgPSBzdGVyZW8sIDEgPSBtb25vICovCisjZGVmaW5lIENTODQyN19NTVRDUwkJKDE8PDEpCS8qIDAgPSB1c2UgQSArIEIgQ1MgZGF0YSwgMSA9IHVzZSBNTVRMUiBDUyBkYXRhICovCisjZGVmaW5lIENTODQyN19NTVRMUgkJKDE8PDApCS8qIDAgPSB1c2UgQSBDUyBkYXRhLCAxID0gdXNlIEIgQ1MgZGF0YSAqLworCisvKiBDUzg0MjdfUkVHX0RBVEFGTE9XICovCisjZGVmaW5lIENTODQyN19UWE9GRgkJKDE8PDYpCS8qIEFFUzMgdHJhbnNtaXR0ZXIgT3V0cHV0LCAwID0gbm9ybWFsIG9wZXJhdGlvbiwgMSA9IG9mZiAoMFYpICovCisjZGVmaW5lIENTODQyN19BRVNCUAkJKDE8PDUpCS8qIEFFUzMgaGFyZHdhcmUgYnlwYXNzIG1vZGUsIDAgPSBub3JtYWwsIDEgPSBieXBhc3MgKFJYLT5UWCkgKi8KKyNkZWZpbmUgQ1M4NDI3X1RYRE1BU0sJCSgzPDwzKQkvKiBBRVMzIFRyYW5zbWl0dGVyIERhdGEgU291cmNlIE1hc2sgKi8KKyNkZWZpbmUgQ1M4NDI3X1RYRFNFUklBTAkoMTw8MykJLyogVFhEIC0gc2VyaWFsIGF1ZGlvIGlucHV0IHBvcnQgKi8KKyNkZWZpbmUgQ1M4NDI3X1RYQUVTM0RSRUNFSVZFUgkoMjw8MykJLyogVFhEIC0gQUVTMyByZWNlaXZlciAqLworI2RlZmluZSBDUzg0MjdfU1BETUFTSwkJKDM8PDEpCS8qIFNlcmlhbCBBdWRpbyBPdXRwdXQgUG9ydCBEYXRhIFNvdXJjZSBNYXNrICovCisjZGVmaW5lIENTODQyN19TUERTRVJJQUwJKDE8PDEpCS8qIFNQRCAtIHNlcmlhbCBhdWRpbyBpbnB1dCBwb3J0ICovCisjZGVmaW5lIENTODQyN19TUERBRVMzUkVDRUlWRVIJKDI8PDEpCS8qIFNQRCAtIEFFUzMgcmVjZWl2ZXIgKi8KKworLyogQ1M4NDI3X1JFR19DTE9DS1NPVVJDRSAqLworI2RlZmluZSBDUzg0MjdfUlVOCQkoMTw8NikJLyogMCA9IGNsb2NrIG9mZiwgMSA9IGNsb2NrIG9uICovCisjZGVmaW5lIENTODQyN19DTEtNQVNLCQkoMzw8NCkJLyogT01DSyBmcmVxdWVuY3kgbWFzayAqLworI2RlZmluZSBDUzg0MjdfQ0xLMjU2CQkoMDw8NCkJLyogMjU2KkZzbyAqLworI2RlZmluZSBDUzg0MjdfQ0xLMzg0CQkoMTw8NCkJLyogMzg0KkZzbyAqLworI2RlZmluZSBDUzg0MjdfQ0xLNTEyCQkoMjw8NCkJLyogNTEyKkZzbyAqLworI2RlZmluZSBDUzg0MjdfT1VUQwkJKDE8PDMpCS8qIE91dHB1dCBUaW1lIEJhc2UsIDAgPSBPTUNLLCAxID0gcmVjb3ZlcmVkIGlucHV0IGNsb2NrICovCisjZGVmaW5lIENTODQyN19JTkMJCSgxPDwyKQkvKiBJbnB1dCBUaW1lIEJhc2UgQ2xvY2sgU291cmNlLCAwID0gcmVjb3ZlcmQgaW5wdXQgY2xvY2ssIDEgPSBPTUNLIGlucHV0IHBpbiAqLworI2RlZmluZSBDUzg0MjdfUlhETUFTSwkJKDM8PDApCS8qIFJlY292ZXJlZCBJbnB1dCBDbG9jayBTb3VyY2UgTWFzayAqLworI2RlZmluZSBDUzg0MjdfUlhESUxSQ0sJCSgwPDwwKQkvKiAyNTYqRnNpIGZyb20gSUxSQ0sgcGluICovCisjZGVmaW5lIENTODQyN19SWERBRVMzSU5QVVQJKDE8PDApCS8qIDI1NipGc2kgZnJvbSBBRVMzIGlucHV0ICovCisjZGVmaW5lIENTODQyN19FWFRDTE9DS1JFU0VUCSgyPDwwKQkvKiBieXBhc3MgUExMLCAyNTYqRnNpIGNsb2NrLCBzeW5jaHJvbm91cyByZXNldCAqLworI2RlZmluZSBDUzg0MjdfRVhUQ0xPQ0sJCSgzPDwwKQkvKiBieXBhc3MgUExMLCAyNTYqRnNpIGNsb2NrICovCisKKy8qIENTODQyN19SRUdfU0VSSUFMSU5QVVQgKi8KKyNkZWZpbmUgQ1M4NDI3X1NJTVMJCSgxPDw3KQkvKiAwID0gc2xhdmUsIDEgPSBtYXN0ZXIgbW9kZSAqLworI2RlZmluZSBDUzg0MjdfU0lTRgkJKDE8PDYpCS8qIElTQ0xLIGZyZXEsIDAgPSA2NCpGc2ksIDEgPSAxMjgqRnNpICovCisjZGVmaW5lIENTODQyN19TSVJFU01BU0sJKDM8PDQpCS8qIFJlc29sdXRpb24gb2YgdGhlIGlucHV0IGRhdGEgZm9yIHJpZ2h0IGp1c3RpZmllZCBmb3JtYXRzICovCisjZGVmaW5lIENTODQyN19TSVJFUzI0CQkoMDw8NCkJLyogU0lSRVMgMjQtYml0ICovCisjZGVmaW5lIENTODQyN19TSVJFUzIwCQkoMTw8NCkJLyogU0lSRVMgMjAtYml0ICovCisjZGVmaW5lIENTODQyN19TSVJFUzE2CQkoMjw8NCkJLyogU0lSRVMgMTYtYml0ICovCisjZGVmaW5lIENTODQyN19TSUpVU1QJCSgxPDwzKQkvKiBKdXN0aWZpY2F0aW9uIG9mIFNESU4gZGF0YSByZWxhdGl2ZSB0byBJTFJDSywgMCA9IGxlZnQtanVzdGlmaWVkLCAxID0gcmlnaHQtanVzdGlmaWVkICovCisjZGVmaW5lIENTODQyN19TSURFTAkJKDE8PDIpCS8qIERlbGF5IG9mIFNESU4gZGF0YSByZWxhdGl2ZSB0byBJTFJDSyBmb3IgbGVmdC1qdXN0aWZpZWQgZGF0YSBmb3JtYXRzLCAwID0gZmlyc3QgSVNDTEsgcGVyaW9kLCAxID0gc2Vjb25kIElTQ0xLIHBlcmlvZCAqLworI2RlZmluZSBDUzg0MjdfU0lTUE9MCQkoMTw8MSkJLyogSUNMSyBjbG9jayBwb2xhcml0eSwgMCA9IHJpc2luZyBlZGdlIG9mIElTQ0xLLCAxID0gZmFsbGluZyBlZGdlIG9mIElTQ0xLICovCisjZGVmaW5lIENTODQyN19TSUxSUE9MCQkoMTw8MCkJLyogSUxSQ0sgY2xvY2sgcG9sYXJpdHksIDAgPSBTRElOIGRhdGEgbGVmdCBjaGFubmVsIHdoZW4gSUxSQ0sgaXMgaGlnaCwgMSA9IFNESU4gcmlnaHQgd2hlbiBJTFJDSyBpcyBoaWdoICovCisKKy8qIENTODQyN19SRUdfU0VSSUFMT1VUUFVUICovCisjZGVmaW5lIENTODQyN19TT01TCQkoMTw8NykJLyogMCA9IHNsYXZlLCAxID0gbWFzdGVyIG1vZGUgKi8KKyNkZWZpbmUgQ1M4NDI3X1NPU0YJCSgxPDw2KQkvKiBPU0NMSyBmcmVxLCAwID0gNjQqRnNvLCAxID0gMTI4KkZzbyAqLworI2RlZmluZSBDUzg0MjdfU09SRVNNQVNLCSgzPDw0KQkvKiBSZXNvbHV0aW9uIG9mIHRoZSBvdXRwdXQgZGF0YSBvbiBTRE9VVCBhbmQgQUVTMyBvdXRwdXQgKi8KKyNkZWZpbmUgQ1M4NDI3X1NPUkVTMjQJCSgwPDw0KQkvKiBTSVJFUyAyNC1iaXQgKi8KKyNkZWZpbmUgQ1M4NDI3X1NPUkVTMjAJCSgxPDw0KQkvKiBTSVJFUyAyMC1iaXQgKi8KKyNkZWZpbmUgQ1M4NDI3X1NPUkVTMTYJCSgyPDw0KQkvKiBTSVJFUyAxNi1iaXQgKi8KKyNkZWZpbmUgQ1M4NDI3X1NPUkVTRElSRUNUCSgyPDw0KQkvKiBTSVJFUyBkaXJlY3QgY29weSBmcm9tIEFFUzMgcmVjZWl2ZXIgKi8KKyNkZWZpbmUgQ1M4NDI3X1NPSlVTVAkJKDE8PDMpCS8qIEp1c3RpZmljYXRpb24gb2YgU0RPVVQgZGF0YSByZWxhdGl2ZSB0byBPTFJDSywgMCA9IGxlZnQtanVzdGlmaWVkLCAxID0gcmlnaHQtanVzdGlmaWVkICovCisjZGVmaW5lIENTODQyN19TT0RFTAkJKDE8PDIpCS8qIERlbGF5IG9mIFNET1VUIGRhdGEgcmVsYXRpdmUgdG8gT0xSQ0sgZm9yIGxlZnQtanVzdGlmaWVkIGRhdGEgZm9ybWF0cywgMCA9IGZpcnN0IE9TQ0xLIHBlcmlvZCwgMSA9IHNlY29uZCBPU0NMSyBwZXJpb2QgKi8KKyNkZWZpbmUgQ1M4NDI3X1NPU1BPTAkJKDE8PDEpCS8qIE9TQ0xLIGNsb2NrIHBvbGFyaXR5LCAwID0gcmlzaW5nIGVkZ2Ugb2YgSVNDTEssIDEgPSBmYWxsaW5nIGVkZ2Ugb2YgSVNDTEsgKi8KKyNkZWZpbmUgQ1M4NDI3X1NPTFJQT0wJCSgxPDwwKQkvKiBPTFJDSyBjbG9jayBwb2xhcml0eSwgMCA9IFNET1VUIGRhdGEgbGVmdCBjaGFubmVsIHdoZW4gT0xSQ0sgaXMgaGlnaCwgMSA9IFNET1VUIHJpZ2h0IHdoZW4gT0xSQ0sgaXMgaGlnaCAqLworCisvKiBDUzg0MjdfUkVHX0lOVDFTVEFUVVMgKi8KKyNkZWZpbmUgQ1M4NDI3X1RTTElQCQkoMTw8NykJLyogQUVTMyB0cmFuc21pdHRlciBzb3VyY2UgZGF0YSBzbGlwIGludGVycnVwdCAqLworI2RlZmluZSBDUzg0MjdfT1NMSVAJCSgxPDw2KQkvKiBTZXJpYWwgYXVkaW8gb3V0cHV0IHBvcnQgZGF0YSBzbGlwIGludGVycnVwdCAqLworI2RlZmluZSBDUzg0MjdfREVUQwkJKDE8PDIpCS8qIEQgdG8gRSBDLWJ1ZmZlciB0cmFuc2ZlciBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgQ1M4NDI3X0VGVEMJCSgxPDwxKQkvKiBFIHRvIEYgQy1idWZmZXIgdHJhbnNmZXIgaW50ZXJydXB0ICovCisjZGVmaW5lIENTODQyN19SRVJSCQkoMTw8MCkJLyogQSByZWNlaXZlciBlcnJvciBoYXMgb2NjdXJyZWQgKi8KKworLyogQ1M4NDI3X1JFR19JTlQyU1RBVFVTICovCisjZGVmaW5lIENTODQyN19ERVRVCQkoMTw8MykJLyogRCB0byBFIFUtYnVmZmVyIHRyYW5zZmVyIGludGVycnVwdCAqLworI2RlZmluZSBDUzg0MjdfRUZUVQkJKDE8PDIpCS8qIEUgdG8gRiBVLWJ1ZmZlciB0cmFuc2ZlciBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgQ1M4NDI3X1FDSAkJKDE8PDEpCS8qIEEgbmV3IGJsb2NrIG9mIFEtc3ViY29kZSBkYXRhIGlzIGF2YWlsYWJsZSBmb3IgcmVhZGluZyAqLworCisvKiBDUzg0MjdfUkVHX0lOVDFNT0RFTVNCICYmIENTODQyN19SRUdfSU5UMU1PREVMU0IgKi8KKy8qIGJpdHMgYXJlIGRlZmluZWQgaW4gQ1M4NDI3X1JFR19JTlQxU1RBVFVTICovCisvKiBDUzg0MjdfUkVHX0lOVDJNT0RFTVNCICYmIENTODQyN19SRUdfSU5UMk1PREVMU0IgKi8KKy8qIGJpdHMgYXJlIGRlZmluZWQgaW4gQ1M4NDI3X1JFR19JTlQyU1RBVFVTICovCisjZGVmaW5lIENTODQyN19JTlRNT0RFUklTSU5HTVNCCTAKKyNkZWZpbmUgQ1M4NDI3X0lOVE1PREVSRVNJTkdMU0IJMAorI2RlZmluZSBDUzg0MjdfSU5UTU9ERUZBTExJTkdNU0IgMAorI2RlZmluZSBDUzg0MjdfSU5UTU9ERUZBTExJTkdMU0IgMQorI2RlZmluZSBDUzg0MjdfSU5UTU9ERUxFVkVMTVNCCTEKKyNkZWZpbmUgQ1M4NDI3X0lOVE1PREVMRVZFTExTQgkwCisKKy8qIENTODQyN19SRUdfUkVDVkNTREFUQSAqLworI2RlZmluZSBDUzg0MjdfQVVYTUFTSwkJKDE1PDw0KQkvKiBhdXhpbGlhcnkgZGF0YSBmaWVsZCB3aWR0aCAqLworI2RlZmluZSBDUzg0MjdfQVVYU0hJRlQJCTQKKyNkZWZpbmUgQ1M4NDI3X1BSTwkJKDE8PDMpCS8qIENoYW5uZWwgc3RhdHVzIGJsb2NrIGZvcm1hdCBpbmRpY2F0b3IgKi8KKyNkZWZpbmUgQ1M4NDI3X0FVRElPCQkoMTw8MikJLyogQXVkaW8gaW5kaWNhdG9yICgwID0gYXVkaW8sIDEgPSBub25hdWRpbyAqLworI2RlZmluZSBDUzg0MjdfQ09QWQkJKDE8PDEpCS8qIDAgPSBjb3B5cmlnaHQgYXNzZXJ0ZWQsIDEgPSBjb3B5cmlnaHQgbm90IGFzc2VydGVkICovCisjZGVmaW5lIENTODQyN19PUklHCQkoMTw8MCkJLyogU0NNUyBnZW5lcmF0aW9uIGluZGljYXRvciwgMCA9IDFzdCBnZW5lcmF0aW9uIG9yIGhpZ2h0ZXIsIDEgPSBvcmlnaW5hbCAqLworCisvKiBDUzg0MjdfUkVHX1JFQ1ZFUlJPUlMgKi8KKy8qIENTODQyN19SRUdfUkVDVkVSUk1BU0sgZm9yIENTODQyN19SRVJSICovCisjZGVmaW5lIENTODQyN19RQ1JDCQkoMTw8NikJLyogUS1zdWJjb2RlIGRhdGEgQ1JDIGVycm9yIGluZGljYXRvciAqLworI2RlZmluZSBDUzg0MjdfQ0NSQwkJKDE8PDUpCS8qIENoYW5jbmVsIFN0YXR1cyBCbG9jayBDeWNsaWNrIFJlZHVuZGFuY3kgQ2hlY2sgQml0ICovCisjZGVmaW5lIENTODQyN19VTkxPQ0sJCSgxPDw0KQkvKiBQTEwgbG9jayBzdGF0dXMgYml0ICovCisjZGVmaW5lIENTODQyN19WCQkoMTw8MykJLyogMCA9IHZhbGlkIGRhdGEgKi8KKyNkZWZpbmUgQ1M4NDI3X0NPTkYJCSgxPDwyKQkvKiBDb25maWRlbmNlIGJpdCAqLworI2RlZmluZSBDUzg0MjdfQklQCQkoMTw8MSkJLyogQmktcGhhc2UgZXJyb3IgYml0ICovCisjZGVmaW5lIENTODQyN19QQVIJCSgxPDwwKQkvKiBQYXJpdHkgZXJyb3IgKi8KKworLyogQ1M4NDI3X1JFR19DU0RBVEFCVUYJKi8KKyNkZWZpbmUgQ1M4NDI3X0JTRUwJCSgxPDw1KQkvKiAwID0gQ1MgZGF0YSwgMSA9IFUgZGF0YSAqLworI2RlZmluZSBDUzg0MjdfQ0JNUgkJKDE8PDQpCS8qIDAgPSBvdmVyd3JpdGUgZmlyc3QgNSBieXRlcyBmb3IgQ1MgRCB0byBFIGJ1ZmZlciwgMSA9IHByZXZlbnQgKi8KKyNkZWZpbmUgQ1M4NDI3X0RFVENJCQkoMTw8MykJLyogRCB0byBFIENTIGRhdGEgYnVmZmVyIHRyYW5zZmVyIGluaGliaXQgYml0LCAwID0gYWxsb3csIDEgPSBpbmhpYml0ICovCisjZGVmaW5lIENTODQyN19FRlRDSQkJKDE8PDIpCS8qIEUgdG8gRiBDUyBkYXRhIGJ1ZmZlciB0cmFuc2ZlciBpbmhpYml0IGJpdCwgMCA9IGFsbG93LCAxID0gaW5oaWJpdCAqLworI2RlZmluZSBDUzg0MjdfQ0FNCQkoMTw8MSkJLyogQ1MgZGF0YSBidWZmZXIgY29udHJvbCBwb3J0IGFjY2VzcyBtb2RlIGJpdCwgMCA9IG9uZSBieXRlLCAxID0gdHdvIGJ5dGUgKi8KKyNkZWZpbmUgQ1M4NDI3X0NIUwkJKDE8PDApCS8qIENoYW5uZWwgc2VsZWN0IGJpdCwgMCA9IENoYW5uZWwgQSwgMSA9IENoYW5uZWwgQiAqLworCisvKiBDUzg0MjdfUkVHX1VEQVRBQlVGICovCisjZGVmaW5lIENTODQyN19VRAkJKDE8PDQpCS8qIFVzZXIgZGF0YSBwaW4gKFUpIGRpcmVjdGlvbiwgMCA9IGlucHV0LCAxID0gb3V0cHV0ICovCisjZGVmaW5lIENTODQyN19VQk1NQVNLCQkoMzw8MikJLyogT3BlcmF0aW5nIG1vZGUgb2YgdGhlIEFFUzMgVSBiaXQgbWFuYWdlciAqLworI2RlZmluZSBDUzg0MjdfVUJNWkVST1MJCSgwPDwyKQkvKiB0cmFuc21pdCBhbGwgemVyb3MgbW9kZSAqLworI2RlZmluZSBDUzg0MjdfVUJNQkxPQ0sJCSgxPDwyKQkvKiBibG9jayBtb2RlICovCisjZGVmaW5lIENTODQyN19ERVRVSQkJKDE8PDEpCS8qIEQgdG8gRSBVLWRhdGEgYnVmZmVyIHRyYW5zZmVyIGluaGliaXQgYml0LCAwID0gYWxsb3csIDEgPSBpbmhpYml0ICovCisjZGVmaW5lIENTODQyN19FRlRVSQkJKDE8PDEpCS8qIEUgdG8gRiBVLWRhdGEgYnVmZmVyIHRyYW5zZmVyIGluaGliaXQgYml0LCAwID0gYWxsb3csIDEgPSBpbmhpYml0ICovCisKKy8qIENTODQyN19SRUdfSURfQU5EX1ZFUiAqLworI2RlZmluZSBDUzg0MjdfSURNQVNLCQkoMTU8PDQpCisjZGVmaW5lIENTODQyN19JRFNISUZUCQk0CisjZGVmaW5lIENTODQyN19WRVJNQVNLCQkoMTU8PDApCisjZGVmaW5lIENTODQyN19WRVJTSElGVAkJMAorI2RlZmluZSBDUzg0MjdfVkVSODQyN0EJCTB4NzEKKworaW50IHNuZF9jczg0MjdfY3JlYXRlKHNuZF9pMmNfYnVzX3QgKmJ1cywgdW5zaWduZWQgY2hhciBhZGRyLAorCQkgICAgICB1bnNpZ25lZCBpbnQgcmVzZXRfdGltZW91dCwgc25kX2kyY19kZXZpY2VfdCAqKnJfY3M4NDI3KTsKK2ludCBzbmRfY3M4NDI3X3JlZ193cml0ZShzbmRfaTJjX2RldmljZV90ICpkZXZpY2UsIHVuc2lnbmVkIGNoYXIgcmVnLCB1bnNpZ25lZCBjaGFyIHZhbCk7CitpbnQgc25kX2NzODQyN19pZWM5NThfYnVpbGQoc25kX2kyY19kZXZpY2VfdCAqY3M4NDI3LCBzbmRfcGNtX3N1YnN0cmVhbV90ICpwbGF5YmFja19zdWJzdHJlYW0sIHNuZF9wY21fc3Vic3RyZWFtX3QgKmNhcHR1cmVfc3Vic3RyZWFtKTsKK2ludCBzbmRfY3M4NDI3X2llYzk1OF9hY3RpdmUoc25kX2kyY19kZXZpY2VfdCAqY3M4NDI3LCBpbnQgYWN0aXZlKTsKK2ludCBzbmRfY3M4NDI3X2llYzk1OF9wY20oc25kX2kyY19kZXZpY2VfdCAqY3M4NDI3LCB1bnNpZ25lZCBpbnQgcmF0ZSk7CisKKyNlbmRpZiAvKiBfX1NPVU5EX0NTODQyN19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL2RyaXZlci5oIGIvaW5jbHVkZS9zb3VuZC9kcml2ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDhlOWExCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9zb3VuZC9kcml2ZXIuaApAQCAtMCwwICsxLDY0IEBACisjaWZuZGVmIF9fU09VTkRfRFJJVkVSX0gKKyNkZWZpbmUgX19TT1VORF9EUklWRVJfSAorCisvKgorICogIE1haW4gaGVhZGVyIGZpbGUgZm9yIHRoZSBBTFNBIGRyaXZlcgorICogIENvcHlyaWdodCAoYykgMTk5NC0yMDAwIGJ5IEphcm9zbGF2IEt5c2VsYSA8cGVyZXhAc3VzZS5jej4KKyAqCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICoKKyAqLworCisjaWZkZWYgQUxTQV9CVUlMRAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2RlZmluZSBTTkRSVl9DQVJEUwkJOAkvKiBudW1iZXIgb2Ygc3VwcG9ydGVkIHNvdW5kY2FyZHMgLSBkb24ndCBjaGFuZ2UgLSBtaW5vciBudW1iZXJzICovCisKKyNpZm5kZWYgQ09ORklHX1NORF9NQUpPUgkvKiBzdGFuZGFyZCBjb25maWd1cmF0aW9uICovCisjZGVmaW5lIENPTkZJR19TTkRfTUFKT1IJMTE2CisjZW5kaWYKKworI2lmbmRlZiBDT05GSUdfU05EX0RFQlVHCisjdW5kZWYgQ09ORklHX1NORF9ERUJVR19NRU1PUlkKKyNlbmRpZgorCisjaWZkZWYgQUxTQV9CVUlMRAorI2luY2x1ZGUgImFkcml2ZXIuaCIKKyNlbmRpZgorCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKy8qCisgKiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworCisjaWZkZWYgQ09ORklHX1NORF9ERUJVR19NRU1PUlkKKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgordm9pZCAqc25kX3dyYXBwZXJfa21hbGxvYyhzaXplX3QsIGludCk7CisjdW5kZWYga21hbGxvYwordm9pZCBzbmRfd3JhcHBlcl9rZnJlZShjb25zdCB2b2lkICopOworI3VuZGVmIGtmcmVlCit2b2lkICpzbmRfd3JhcHBlcl92bWFsbG9jKHNpemVfdCk7CisjdW5kZWYgdm1hbGxvYwordm9pZCBzbmRfd3JhcHBlcl92ZnJlZSh2b2lkICopOworI3VuZGVmIHZmcmVlCisjZW5kaWYKKworI2VuZGlmIC8qIF9fU09VTkRfRFJJVkVSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvZW11MTBrMS5oIGIvaW5jbHVkZS9zb3VuZC9lbXUxMGsxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNiNjc4NgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvc291bmQvZW11MTBrMS5oCkBAIC0wLDAgKzEsMTU0NCBAQAorI2lmbmRlZiBfX1NPVU5EX0VNVTEwSzFfSAorI2RlZmluZSBfX1NPVU5EX0VNVTEwSzFfSAorCisvKgorICogIENvcHlyaWdodCAoYykgYnkgSmFyb3NsYXYgS3lzZWxhIDxwZXJleEBzdXNlLmN6PiwKKyAqCQkgICAgIENyZWF0aXZlIExhYnMsIEluYy4KKyAqICBEZWZpbml0aW9ucyBmb3IgRU1VMTBLMSAoU0IgTGl2ZSEpIGNoaXBzCisgKgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqCisgKi8KKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3Jhd21pZGkuaD4KKyNpbmNsdWRlIDxzb3VuZC9od2RlcC5oPgorI2luY2x1ZGUgPHNvdW5kL2FjOTdfY29kZWMuaD4KKyNpbmNsdWRlIDxzb3VuZC91dGlsX21lbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS1pbmRpcmVjdC5oPgorI2luY2x1ZGUgPHNvdW5kL3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNpZm5kZWYgUENJX1ZFTkRPUl9JRF9DUkVBVElWRQorI2RlZmluZSBQQ0lfVkVORE9SX0lEX0NSRUFUSVZFCQkweDExMDIKKyNlbmRpZgorI2lmbmRlZiBQQ0lfREVWSUNFX0lEX0NSRUFUSVZFX0VNVTEwSzEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DUkVBVElWRV9FTVUxMEsxCTB4MDAwMgorI2VuZGlmCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0gREVGSU5FUyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEVNVVBBR0VTSVpFICAgICA0MDk2CisjZGVmaW5lIE1BWFJFUVZPSUNFUyAgICA4CisjZGVmaW5lIE1BWFBBR0VTICAgICAgICA4MTkyCisjZGVmaW5lIFJFU0VSVkVEICAgICAgICAwCisjZGVmaW5lIE5VTV9NSURJICAgICAgICAxNgorI2RlZmluZSBOVU1fRyAgICAgICAgICAgNjQgICAgICAgICAgICAgIC8qIHVzZSBhbGwgY2hhbm5lbHMgKi8KKyNkZWZpbmUgTlVNX0ZYU0VORFMgICAgIDQKKyNkZWZpbmUgTlVNX0VGWF9QTEFZQkFDSyAgICAxNgorCisvKiBGSVhNRT8gLSBhY2NvcmRpbmcgdG8gdGhlIE9TUyBkcml2ZXIgdGhlIEVNVTEwSzEgbmVlZHMgYSAyOSBiaXQgRE1BIG1hc2sgKi8KKyNkZWZpbmUgRU1VMTBLMV9ETUFfTUFTSwkweDdmZmZmZmZmVUwJLyogMzFiaXQgKi8KKyNkZWZpbmUgQVVESUdZX0RNQV9NQVNLCQkweGZmZmZmZmZmVUwJLyogMzJiaXQgKi8KKworI2RlZmluZSBUTUVNU0laRSAgICAgICAgMjU2KjEwMjQKKyNkZWZpbmUgVE1FTVNJWkVSRUcgICAgIDQKKworI2RlZmluZSBJUF9UT19DUChpcCkgKChpcCA9PSAwKSA/IDAgOiAoKCgweDAwMDAxMDAwdUwgfCAoaXAgJiAweDAwMDAwRkZGTCkpIDw8ICgoKGlwID4+IDEyKSAmIDB4MDAwRkwpICsgNCkpICYgMHhGRkZGMDAwMHVMKSkKKworLy8gQXVkaWd5IHNwZWNpZnkgcmVnaXN0ZXJzIGFyZSBwcmVmaXhlZCB3aXRoICdBXycKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFBDSSBmdW5jdGlvbiAwIHJlZ2lzdGVycywgYWRkcmVzcyA9IDx2YWw+ICsgUENJQkFTRTAJCQkJCQkqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBQVFIJCQkweDAwCQkvKiBJbmRleGVkIHJlZ2lzdGVyIHNldCBwb2ludGVyIHJlZ2lzdGVyCSovCisJCQkJCQkvKiBOT1RFOiBUaGUgQ0hBTk5FTE5VTSBhbmQgQUREUkVTUyB3b3JkcyBjYW4JKi8KKwkJCQkJCS8qIGJlIG1vZGlmaWVkIGluZGVwZW5kZW50bHkgb2YgZWFjaCBvdGhlci4JKi8KKyNkZWZpbmUgUFRSX0NIQU5ORUxOVU1fTUFTSwkweDAwMDAwMDNmCS8qIEZvciBlYWNoIHBlci1jaGFubmVsIHJlZ2lzdGVyLCBpbmRpY2F0ZXMgdGhlCSovCisJCQkJCQkvKiBjaGFubmVsIG51bWJlciBvZiB0aGUgcmVnaXN0ZXIgdG8gYmUJCSovCisJCQkJCQkvKiBhY2Nlc3NlZC4gIEZvciBub24gcGVyLWNoYW5uZWwgcmVnaXN0ZXJzIHRoZQkqLworCQkJCQkJLyogdmFsdWUgc2hvdWxkIGJlIHNldCB0byB6ZXJvLgkJCSovCisjZGVmaW5lIFBUUl9BRERSRVNTX01BU0sJMHgwN2ZmMDAwMAkvKiBSZWdpc3RlciBpbmRleAkJCQkqLworI2RlZmluZSBBX1BUUl9BRERSRVNTX01BU0sJMHgwZmZmMDAwMAorCisjZGVmaW5lIERBVEEJCQkweDA0CQkvKiBJbmRleGVkIHJlZ2lzdGVyIHNldCBkYXRhIHJlZ2lzdGVyCQkqLworCisjZGVmaW5lIElQUgkJCTB4MDgJCS8qIEdsb2JhbCBpbnRlcnJ1cHQgcGVuZGluZyByZWdpc3RlcgkJKi8KKwkJCQkJCS8qIENsZWFyIHBlbmRpbmcgaW50ZXJydXB0cyBieSB3cml0aW5nIGEgMSB0bwkqLworCQkJCQkJLyogdGhlIHJlbGV2YW50IGJpdHMgYW5kIHplcm8gdG8gdGhlIG90aGVyIGJpdHMJKi8KKworI2RlZmluZSBJUFJfR1BJT01TRwkJMHgyMDAwMDAwMAkvKiBHUElPIG1lc3NhZ2UgaW50ZXJydXB0IChSRSdkLCBzdGlsbCBub3Qgc3VyZSAKKwkJCQkJCSAgIHdoaWNoIElOVEUgYml0cyBlbmFibGUgaXQpCQkJKi8KKworLyogVGhlIG5leHQgdHdvIGludGVycnVwdHMgYXJlIGZvciB0aGUgbWlkaSBwb3J0IG9uIHRoZSBBdWRpZ3kgRHJpdmUgKEFfTVBVMSkJCQkqLworI2RlZmluZSBJUFJfQV9NSURJVFJBTlNCVUZFTVBUWTIgMHgxMDAwMDAwMAkvKiBNSURJIFVBUlQgdHJhbnNtaXQgYnVmZmVyIGVtcHR5CQkqLworI2RlZmluZSBJUFJfQV9NSURJUkVDVkJVRkVNUFRZMgkweDA4MDAwMDAwCS8qIE1JREkgVUFSVCByZWNlaXZlIGJ1ZmZlciBlbXB0eQkJKi8KKworI2RlZmluZSBJUFJfU1BESUZCVUZGVUxMCTB4MDQwMDAwMDAJLyogU1BESUYgY2FwdHVyZSByZWxhdGVkLCAxMGsyIG9ubHk/IChSRSkJKi8KKyNkZWZpbmUgSVBSX1NQRElGQlVGSEFMRkZVTEwJMHgwMjAwMDAwMAkvKiBTUERJRiBjYXB0dXJlIHJlbGF0ZWQ/IChSRSkJCQkqLworCisjZGVmaW5lIElQUl9TQU1QTEVSQVRFVFJBQ0tFUgkweDAxMDAwMDAwCS8qIFNhbXBsZSByYXRlIHRyYWNrZXIgbG9jayBzdGF0dXMgY2hhbmdlCSovCisjZGVmaW5lIElQUl9GWERTUAkJMHgwMDgwMDAwMAkvKiBFbmFibGUgRlggRFNQIGludGVycnVwdHMJCQkqLworI2RlZmluZSBJUFJfRk9SQ0VJTlQJCTB4MDA0MDAwMDAJLyogRm9yY2UgU291bmQgQmxhc3RlciBpbnRlcnJ1cHQJCSovCisjZGVmaW5lIElQUl9QQ0lFUlJPUgkJMHgwMDIwMDAwMAkvKiBQQ0kgYnVzIGVycm9yCQkJCSovCisjZGVmaW5lIElQUl9WT0xJTkNSCQkweDAwMTAwMDAwCS8qIFZvbHVtZSBpbmNyZW1lbnQgYnV0dG9uIHByZXNzZWQJCSovCisjZGVmaW5lIElQUl9WT0xERUNSCQkweDAwMDgwMDAwCS8qIFZvbHVtZSBkZWNyZW1lbnQgYnV0dG9uIHByZXNzZWQJCSovCisjZGVmaW5lIElQUl9NVVRFCQkweDAwMDQwMDAwCS8qIE11dGUgYnV0dG9uIHByZXNzZWQJCQkJKi8KKyNkZWZpbmUgSVBSX01JQ0JVRkZVTEwJCTB4MDAwMjAwMDAJLyogTWljcm9waG9uZSBidWZmZXIgZnVsbAkJCSovCisjZGVmaW5lIElQUl9NSUNCVUZIQUxGRlVMTAkweDAwMDEwMDAwCS8qIE1pY3JvcGhvbmUgYnVmZmVyIGhhbGYgZnVsbAkJCSovCisjZGVmaW5lIElQUl9BRENCVUZGVUxMCQkweDAwMDA4MDAwCS8qIEFEQyBidWZmZXIgZnVsbAkJCQkqLworI2RlZmluZSBJUFJfQURDQlVGSEFMRkZVTEwJMHgwMDAwNDAwMAkvKiBBREMgYnVmZmVyIGhhbGYgZnVsbAkJCQkqLworI2RlZmluZSBJUFJfRUZYQlVGRlVMTAkJMHgwMDAwMjAwMAkvKiBFZmZlY3RzIGJ1ZmZlciBmdWxsCQkJCSovCisjZGVmaW5lIElQUl9FRlhCVUZIQUxGRlVMTAkweDAwMDAxMDAwCS8qIEVmZmVjdHMgYnVmZmVyIGhhbGYgZnVsbAkJCSovCisjZGVmaW5lIElQUl9HUFNQRElGU1RBVFVTQ0hBTkdFCTB4MDAwMDA4MDAJLyogR1BTUERJRiBjaGFubmVsIHN0YXR1cyBjaGFuZ2UJCSovCisjZGVmaW5lIElQUl9DRFJPTVNUQVRVU0NIQU5HRQkweDAwMDAwNDAwCS8qIENELVJPTSBjaGFubmVsIHN0YXR1cyBjaGFuZ2UJCQkqLworI2RlZmluZSBJUFJfSU5URVJWQUxUSU1FUgkweDAwMDAwMjAwCS8qIEludGVydmFsIHRpbWVyIHRlcm1pbmFsIGNvdW50CQkqLworI2RlZmluZSBJUFJfTUlESVRSQU5TQlVGRU1QVFkJMHgwMDAwMDEwMAkvKiBNSURJIFVBUlQgdHJhbnNtaXQgYnVmZmVyIGVtcHR5CQkqLworI2RlZmluZSBJUFJfTUlESVJFQ1ZCVUZFTVBUWQkweDAwMDAwMDgwCS8qIE1JREkgVUFSVCByZWNlaXZlIGJ1ZmZlciBlbXB0eQkJKi8KKyNkZWZpbmUgSVBSX0NIQU5ORUxMT09QCQkweDAwMDAwMDQwCS8qIENoYW5uZWwgKGhhbGYpIGxvb3AgaW50ZXJydXB0KHMpIHBlbmRpbmcJKi8KKyNkZWZpbmUgSVBSX0NIQU5ORUxOVU1CRVJNQVNLCTB4MDAwMDAwM2YJLyogV2hlbiBJUFJfQ0hBTk5FTExPT1AgaXMgc2V0LCBpbmRpY2F0ZXMgdGhlCSovCisJCQkJCQkvKiBoaWdoZXN0IHNldCBjaGFubmVsIGluIENMSVBMLCBDTElQSCwgSExJUEwsICAqLworCQkJCQkJLyogb3IgSExJUEguICBXaGVuIElQIGlzIHdyaXR0ZW4gd2l0aCBDTCBzZXQsCSovCisJCQkJCQkvKiB0aGUgYml0IGluIEgvQ0xJUEwgb3IgSC9DTElQSCBjb3JyZXNwb25kaW5nCSovCisJCQkJCQkvKiB0byB0aGUgQ0lOIHZhbHVlIHdyaXR0ZW4gd2lsbCBiZSBjbGVhcmVkLgkqLworCisjZGVmaW5lIElOVEUJCQkweDBjCQkvKiBJbnRlcnJ1cHQgZW5hYmxlIHJlZ2lzdGVyCQkJKi8KKyNkZWZpbmUgSU5URV9WSVJUVUFMU0JfTUFTSwkweGMwMDAwMDAwCS8qIFZpcnR1YWwgU291bmRibGFzdGVyIEkvTyBwb3J0IGNhcHR1cmUJKi8KKyNkZWZpbmUgSU5URV9WSVJUVUFMU0JfMjIwCTB4MDAwMDAwMDAJLyogQ2FwdHVyZSBhdCBJL08gYmFzZSBhZGRyZXNzIDB4MjIwLTB4MjJmCSovCisjZGVmaW5lIElOVEVfVklSVFVBTFNCXzI0MAkweDQwMDAwMDAwCS8qIENhcHR1cmUgYXQgSS9PIGJhc2UgYWRkcmVzcyAweDI0MAkJKi8KKyNkZWZpbmUgSU5URV9WSVJUVUFMU0JfMjYwCTB4ODAwMDAwMDAJLyogQ2FwdHVyZSBhdCBJL08gYmFzZSBhZGRyZXNzIDB4MjYwCQkqLworI2RlZmluZSBJTlRFX1ZJUlRVQUxTQl8yODAJMHhjMDAwMDAwMAkvKiBDYXB0dXJlIGF0IEkvTyBiYXNlIGFkZHJlc3MgMHgyODAJCSovCisjZGVmaW5lIElOVEVfVklSVFVBTE1QVV9NQVNLCTB4MzAwMDAwMDAJLyogVmlydHVhbCBNUFUgSS9PIHBvcnQgY2FwdHVyZQkJCSovCisjZGVmaW5lIElOVEVfVklSVFVBTE1QVV8zMDAJMHgwMDAwMDAwMAkvKiBDYXB0dXJlIGF0IEkvTyBiYXNlIGFkZHJlc3MgMHgzMDAtMHgzMDEJKi8KKyNkZWZpbmUgSU5URV9WSVJUVUFMTVBVXzMxMAkweDEwMDAwMDAwCS8qIENhcHR1cmUgYXQgSS9PIGJhc2UgYWRkcmVzcyAweDMxMAkJKi8KKyNkZWZpbmUgSU5URV9WSVJUVUFMTVBVXzMyMAkweDIwMDAwMDAwCS8qIENhcHR1cmUgYXQgSS9PIGJhc2UgYWRkcmVzcyAweDMyMAkJKi8KKyNkZWZpbmUgSU5URV9WSVJUVUFMTVBVXzMzMAkweDMwMDAwMDAwCS8qIENhcHR1cmUgYXQgSS9PIGJhc2UgYWRkcmVzcyAweDMzMAkJKi8KKyNkZWZpbmUgSU5URV9NQVNURVJETUFFTkFCTEUJMHgwODAwMDAwMAkvKiBNYXN0ZXIgRE1BIGVtdWxhdGlvbiBhdCAweDAwMC0weDAwZgkJKi8KKyNkZWZpbmUgSU5URV9TTEFWRURNQUVOQUJMRQkweDA0MDAwMDAwCS8qIFNsYXZlIERNQSBlbXVsYXRpb24gYXQgMHgwYzAtMHgwZGYJCSovCisjZGVmaW5lIElOVEVfTUFTVEVSUElDRU5BQkxFCTB4MDIwMDAwMDAJLyogTWFzdGVyIFBJQyBlbXVsYXRpb24gYXQgMHgwMjAtMHgwMjEJCSovCisjZGVmaW5lIElOVEVfU0xBVkVQSUNFTkFCTEUJMHgwMTAwMDAwMAkvKiBTbGF2ZSBQSUMgZW11bGF0aW9uIGF0IDB4MGEwLTB4MGExCQkqLworI2RlZmluZSBJTlRFX1ZTQkVOQUJMRQkJMHgwMDgwMDAwMAkvKiBFbmFibGUgdmlydHVhbCBTb3VuZGJsYXN0ZXIJCQkqLworI2RlZmluZSBJTlRFX0FETElCRU5BQkxFCTB4MDA0MDAwMDAJLyogRW5hYmxlIEFkTGliIGVtdWxhdGlvbiBhdCAweDM4OC0weDM4YgkqLworI2RlZmluZSBJTlRFX01QVUVOQUJMRQkJMHgwMDIwMDAwMAkvKiBFbmFibGUgdmlydHVhbCBNUFUJCQkJKi8KKyNkZWZpbmUgSU5URV9GT1JDRUlOVAkJMHgwMDEwMDAwMAkvKiBDb250aW51b3VzbHkgYXNzZXJ0IElOVEFOCQkJKi8KKworI2RlZmluZSBJTlRFX01SSEFOREVOQUJMRQkweDAwMDgwMDAwCS8qIEVuYWJsZSB0aGUgIk1yLiBIYW5kIiBsb2dpYwkJCSovCisJCQkJCQkvKiBOT1RFOiBUaGVyZSBpcyBubyByZWFzb24gdG8gdXNlIHRoaXMgdW5kZXIJKi8KKwkJCQkJCS8qIExpbnV4LCBhbmQgaXQgd2lsbCBjYXVzZSBvZGQgaGFyZHdhcmUgCSovCisJCQkJCQkvKiBiZWhhdmlvciBhbmQgcG9zc2libHkgcmFuZG9tIHNlZ2ZhdWx0cyBhbmQJKi8KKwkJCQkJCS8qIGxvY2t1cHMgaWYgZW5hYmxlZC4JCQkJKi8KKworLyogVGhlIG5leHQgdHdvIGludGVycnVwdHMgYXJlIGZvciB0aGUgbWlkaSBwb3J0IG9uIHRoZSBBdWRpZ3kgRHJpdmUgKEFfTVBVMSkJCQkqLworI2RlZmluZSBJTlRFX0FfTUlESVRYRU5BQkxFMgkweDAwMDIwMDAwCS8qIEVuYWJsZSBNSURJIHRyYW5zbWl0LWJ1ZmZlci1lbXB0eSBpbnRlcnJ1cHRzCSovCisjZGVmaW5lIElOVEVfQV9NSURJUlhFTkFCTEUyCTB4MDAwMTAwMDAJLyogRW5hYmxlIE1JREkgcmVjZWl2ZS1idWZmZXItZW1wdHkgaW50ZXJydXB0cwkqLworCisKKyNkZWZpbmUgSU5URV9TQU1QTEVSQVRFVFJBQ0tFUgkweDAwMDAyMDAwCS8qIEVuYWJsZSBzYW1wbGUgcmF0ZSB0cmFja2VyIGludGVycnVwdHMJKi8KKwkJCQkJCS8qIE5PVEU6IFRoaXMgYml0IG11c3QgYWx3YXlzIGJlIGVuYWJsZWQgICAgICAgCSovCisjZGVmaW5lIElOVEVfRlhEU1BFTkFCTEUJMHgwMDAwMTAwMAkvKiBFbmFibGUgRlggRFNQIGludGVycnVwdHMJCQkqLworI2RlZmluZSBJTlRFX1BDSUVSUk9SRU5BQkxFCTB4MDAwMDA4MDAJLyogRW5hYmxlIFBDSSBidXMgZXJyb3IgaW50ZXJydXB0cwkJKi8KKyNkZWZpbmUgSU5URV9WT0xJTkNSRU5BQkxFCTB4MDAwMDA0MDAJLyogRW5hYmxlIHZvbHVtZSBpbmNyZW1lbnQgYnV0dG9uIGludGVycnVwdHMJKi8KKyNkZWZpbmUgSU5URV9WT0xERUNSRU5BQkxFCTB4MDAwMDAyMDAJLyogRW5hYmxlIHZvbHVtZSBkZWNyZW1lbnQgYnV0dG9uIGludGVycnVwdHMJKi8KKyNkZWZpbmUgSU5URV9NVVRFRU5BQkxFCQkweDAwMDAwMTAwCS8qIEVuYWJsZSBtdXRlIGJ1dHRvbiBpbnRlcnJ1cHRzCQkqLworI2RlZmluZSBJTlRFX01JQ0JVRkVOQUJMRQkweDAwMDAwMDgwCS8qIEVuYWJsZSBtaWNyb3Bob25lIGJ1ZmZlciBpbnRlcnJ1cHRzCQkqLworI2RlZmluZSBJTlRFX0FEQ0JVRkVOQUJMRQkweDAwMDAwMDQwCS8qIEVuYWJsZSBBREMgYnVmZmVyIGludGVycnVwdHMJCQkqLworI2RlZmluZSBJTlRFX0VGWEJVRkVOQUJMRQkweDAwMDAwMDIwCS8qIEVuYWJsZSBFZmZlY3RzIGJ1ZmZlciBpbnRlcnJ1cHRzCQkqLworI2RlZmluZSBJTlRFX0dQU1BESUZFTkFCTEUJMHgwMDAwMDAxMAkvKiBFbmFibGUgR1BTUERJRiBzdGF0dXMgaW50ZXJydXB0cwkJKi8KKyNkZWZpbmUgSU5URV9DRFNQRElGRU5BQkxFCTB4MDAwMDAwMDgJLyogRW5hYmxlIENEU1BESUYgc3RhdHVzIGludGVycnVwdHMJCSovCisjZGVmaW5lIElOVEVfSU5URVJWQUxUSU1FUkVOQgkweDAwMDAwMDA0CS8qIEVuYWJsZSBpbnRlcnZhbCB0aW1lciBpbnRlcnJ1cHRzCQkqLworI2RlZmluZSBJTlRFX01JRElUWEVOQUJMRQkweDAwMDAwMDAyCS8qIEVuYWJsZSBNSURJIHRyYW5zbWl0LWJ1ZmZlci1lbXB0eSBpbnRlcnJ1cHRzCSovCisjZGVmaW5lIElOVEVfTUlESVJYRU5BQkxFCTB4MDAwMDAwMDEJLyogRW5hYmxlIE1JREkgcmVjZWl2ZS1idWZmZXItZW1wdHkgaW50ZXJydXB0cwkqLworCisjZGVmaW5lIFdDCQkJMHgxMAkJLyogV2FsbCBDbG9jayByZWdpc3RlcgkJCQkqLworI2RlZmluZSBXQ19TQU1QTEVDT1VOVEVSX01BU0sJMHgwM0ZGRkZDMAkvKiBTYW1wbGUgcGVyaW9kcyBlbGFwc2VkIHNpbmNlIHJlc2V0CQkqLworI2RlZmluZSBXQ19TQU1QTEVDT1VOVEVSCTB4MTQwNjAwMTAKKyNkZWZpbmUgV0NfQ1VSUkVOVENIQU5ORUwJMHgwMDAwMDAzRgkvKiBDaGFubmVsIFswLi42M10gY3VycmVudGx5IGJlaW5nIHNlcnZpY2VkCSovCisJCQkJCQkvKiBOT1RFOiBFYWNoIGNoYW5uZWwgdGFrZXMgMS82NHRoIG9mIGEgc2FtcGxlCSovCisJCQkJCQkvKiBwZXJpb2QgdG8gYmUgc2VydmljZWQuCQkJKi8KKworI2RlZmluZSBIQ0ZHCQkJMHgxNAkJLyogSGFyZHdhcmUgY29uZmlnIHJlZ2lzdGVyCQkJKi8KKwkJCQkJCS8qIE5PVEU6IFRoZXJlIGlzIG5vIHJlYXNvbiB0byB1c2UgdGhlIGxlZ2FjeQkqLworCQkJCQkJLyogU291bmRCbGFzdGVyIGVtdWxhdGlvbiBzdHVmZiBkZXNjcmliZWQgYmVsb3cJKi8KKwkJCQkJCS8qIHVuZGVyIExpbnV4LCBhbmQgYWxsIGtpbmRzIG9mIHdlaXJkIGhhcmR3YXJlCSovCisJCQkJCQkvKiBiZWhhdmlvciBjYW4gcmVzdWx0IGlmIHlvdSB0cnkuICBEb24ndC4JKi8KKyNkZWZpbmUgSENGR19MRUdBQ1lGVU5DX01BU0sJMHhlMDAwMDAwMAkvKiBMZWdhY3kgZnVuY3Rpb24gbnVtYmVyIAkJCSovCisjZGVmaW5lIEhDRkdfTEVHQUNZRlVOQ19NUFUJMHgwMDAwMDAwMAkvKiBMZWdhY3kgTVBVCSAJCQkJKi8KKyNkZWZpbmUgSENGR19MRUdBQ1lGVU5DX1NCCTB4NDAwMDAwMDAJLyogTGVnYWN5IFNCCQkJCQkqLworI2RlZmluZSBIQ0ZHX0xFR0FDWUZVTkNfQUQJMHg2MDAwMDAwMAkvKiBMZWdhY3kgQUQJCQkJCSovCisjZGVmaW5lIEhDRkdfTEVHQUNZRlVOQ19NUElDCTB4ODAwMDAwMDAJLyogTGVnYWN5IE1QSUMJCQkJCSovCisjZGVmaW5lIEhDRkdfTEVHQUNZRlVOQ19NRE1BCTB4YTAwMDAwMDAJLyogTGVnYWN5IE1ETUEJCQkJCSovCisjZGVmaW5lIEhDRkdfTEVHQUNZRlVOQ19TUENJCTB4YzAwMDAwMDAJLyogTGVnYWN5IFNQQ0kJCQkJCSovCisjZGVmaW5lIEhDRkdfTEVHQUNZRlVOQ19TRE1BCTB4ZTAwMDAwMDAJLyogTGVnYWN5IFNETUEJCQkJCSovCisjZGVmaW5lIEhDRkdfSU9DQVBUVVJFQUREUgkweDFmMDAwMDAwCS8qIFRoZSA0IExTQnMgb2YgdGhlIGNhcHR1cmVkIEkvTyBhZGRyZXNzLgkqLworI2RlZmluZSBIQ0ZHX0xFR0FDWVdSSVRFCTB4MDA4MDAwMDAJLyogMSA9IHdyaXRlLCAwID0gcmVhZCAJCQkJKi8KKyNkZWZpbmUgSENGR19MRUdBQ1lXT1JECQkweDAwNDAwMDAwCS8qIDEgPSB3b3JkLCAwID0gYnl0ZSAJCQkJKi8KKyNkZWZpbmUgSENGR19MRUdBQ1lJTlQJCTB4MDAyMDAwMDAJLyogMSA9IGxlZ2FjeSBldmVudCBjYXB0dXJlZC4gV3JpdGUgMSB0byBjbGVhci4JKi8KKwkJCQkJCS8qIE5PVEU6IFRoZSByZXN0IG9mIHRoZSBiaXRzIGluIHRoaXMgcmVnaXN0ZXIJKi8KKwkJCQkJCS8qIF9hcmVfIHJlbGV2YW50IHVuZGVyIExpbnV4LgkJCSovCisjZGVmaW5lIEhDRkdfQ09ERUNGT1JNQVRfTUFTSwkweDAwMDcwMDAwCS8qIENPREVDIGZvcm1hdAkJCQkJKi8KKyNkZWZpbmUgSENGR19DT0RFQ0ZPUk1BVF9BQzk3CTB4MDAwMDAwMDAJLyogQUM5NyBDT0RFQyBmb3JtYXQgLS0gUHJpbWFyeSBPdXRwdXQJCSovCisjZGVmaW5lIEhDRkdfQ09ERUNGT1JNQVRfSTJTCTB4MDAwMTAwMDAJLyogSTJTIENPREVDIGZvcm1hdCAtLSBTZWNvbmRhcnkgKFJlYXIpIE91dHB1dAkqLworI2RlZmluZSBIQ0ZHX0dQSU5QVVQwCQkweDAwMDA0MDAwCS8qIEV4dGVybmFsIHBpbjExMgkJCQkqLworI2RlZmluZSBIQ0ZHX0dQSU5QVVQxCQkweDAwMDAyMDAwCS8qIEV4dGVybmFsIHBpbjExMAkJCQkqLworI2RlZmluZSBIQ0ZHX0dQT1VUUFVUX01BU0sJMHgwMDAwMWMwMAkvKiBFeHRlcm5hbCBwaW5zIHdoaWNoIG1heSBiZSBjb250cm9sbGVkCSovCisjZGVmaW5lIEhDRkdfR1BPVVQwCQkweDAwMDAxMDAwCS8qIEV4dGVybmFsIHBpbj8gKHNwZGlmIGVuYWJsZSBvbiA1LjEpCQkqLworI2RlZmluZSBIQ0ZHX0dQT1VUMQkJMHgwMDAwMDgwMAkvKiBFeHRlcm5hbCBwaW4/IChJUikJCQkJKi8KKyNkZWZpbmUgSENGR19HUE9VVDIJCTB4MDAwMDA0MDAJLyogRXh0ZXJuYWwgcGluPyAoSVIpCQkJCSovCisjZGVmaW5lIEhDRkdfSk9ZRU5BQkxFICAgICAgCTB4MDAwMDAyMDAJLyogSW50ZXJuYWwgam95c3RpY2sgZW5hYmxlICAgIAkJCSovCisjZGVmaW5lIEhDRkdfUEhBU0VUUkFDS0VOQUJMRQkweDAwMDAwMTAwCS8qIFBoYXNlIHRyYWNraW5nIGVuYWJsZQkJCSovCisJCQkJCQkvKiAxID0gRm9yY2UgYWxsIDMgYXN5bmMgZGlnaXRhbCBpbnB1dHMgdG8gdXNlCSovCisJCQkJCQkvKiB0aGUgc2FtZSBhc3luYyBzYW1wbGUgcmF0ZSB0cmFja2VyIChaVklERU8pCSovCisjZGVmaW5lIEhDRkdfQUMzRU5BQkxFX01BU0sJMHgwMDAwMDBlMAkvKiBBQzMgYXN5bmMgaW5wdXQgY29udHJvbCAtIE5vdCBpbXBsZW1lbnRlZAkqLworI2RlZmluZSBIQ0ZHX0FDM0VOQUJMRV9aVklERU8JMHgwMDAwMDA4MAkvKiBDaGFubmVscyAwIGFuZCAxIHJlcGxhY2UgWlZJREVPCQkqLworI2RlZmluZSBIQ0ZHX0FDM0VOQUJMRV9DRFNQRElGCTB4MDAwMDAwNDAJLyogQ2hhbm5lbHMgMCBhbmQgMSByZXBsYWNlIENEU1BESUYJCSovCisjZGVmaW5lIEhDRkdfQUMzRU5BQkxFX0dQU1BESUYgIDB4MDAwMDAwMjAgICAgICAvKiBDaGFubmVscyAwIGFuZCAxIHJlcGxhY2UgR1BTUERJRiAgICAgICAgICAgICAqLworI2RlZmluZSBIQ0ZHX0FVVE9NVVRFCQkweDAwMDAwMDEwCS8qIFdoZW4gc2V0LCB0aGUgYXN5bmMgc2FtcGxlIHJhdGUgY29udmVydG9ycwkqLworCQkJCQkJLyogd2lsbCBhdXRvbWF0aWNhbGx5IG11dGUgdGhlaXIgb3V0cHV0IHdoZW4JKi8KKwkJCQkJCS8qIHRoZXkgYXJlIG5vdCByYXRlLWxvY2tlZCB0byB0aGUgZXh0ZXJuYWwJKi8KKwkJCQkJCS8qIGFzeW5jIGF1ZGlvIHNvdXJjZSAgCQkJCSovCisjZGVmaW5lIEhDRkdfTE9DS1NPVU5EQ0FDSEUJMHgwMDAwMDAwOAkvKiAxID0gQ2FuY2VsIGJ1c3RtYXN0ZXIgYWNjZXNzZXMgdG8gc291bmRjYWNoZSAqLworCQkJCQkJLyogTk9URTogVGhpcyBzaG91bGQgZ2VuZXJhbGx5IG5ldmVyIGJlIHVzZWQuICAJKi8KKyNkZWZpbmUgSENGR19MT0NLVEFOS0NBQ0hFX01BU0sJMHgwMDAwMDAwNAkvKiAxID0gQ2FuY2VsIGJ1c3RtYXN0ZXIgYWNjZXNzZXMgdG8gdGFua2NhY2hlCSovCisJCQkJCQkvKiBOT1RFOiBUaGlzIHNob3VsZCBnZW5lcmFsbHkgbmV2ZXIgYmUgdXNlZC4gIAkqLworI2RlZmluZSBIQ0ZHX0xPQ0tUQU5LQ0FDSEUJMHgwMTAyMDAxNAorI2RlZmluZSBIQ0ZHX01VVEVCVVRUT05FTkFCTEUJMHgwMDAwMDAwMgkvKiAxID0gTWFzdGVyIG11dGUgYnV0dG9uIHNldHMgQVVESU9FTkFCTEUgPSAwLgkqLworCQkJCQkJLyogTk9URTogVGhpcyBpcyBhICdjaGVhcCcgd2F5IHRvIGltcGxlbWVudCBhCSovCisJCQkJCQkvKiBtYXN0ZXIgbXV0ZSBmdW5jdGlvbiBvbiB0aGUgbXV0ZSBidXR0b24sIGFuZAkqLworCQkJCQkJLyogaW4gZ2VuZXJhbCBzaG91bGQgbm90IGJlIHVzZWQgdW5sZXNzIGEgbW9yZQkqLworCQkJCQkJLyogc29waGlzdGljYXRlZCBtYXN0ZXIgbXV0ZSBmdW5jdGlvbiBoYXMgbm90CSovCisJCQkJCQkvKiBiZWVuIHdyaXR0ZW4uICAgICAgIAkJCQkqLworI2RlZmluZSBIQ0ZHX0FVRElPRU5BQkxFCTB4MDAwMDAwMDEJLyogMCA9IENPREVDcyB0cmFuc21pdCB6ZXJvLXZhbHVlZCBzYW1wbGVzCSovCisJCQkJCQkvKiBTaG91bGQgYmUgc2V0IHRvIDEgd2hlbiB0aGUgRU1VMTBLMSBpcwkqLworCQkJCQkJLyogY29tcGxldGVseSBpbml0aWFsaXplZC4JCQkqLworCisvL0ZvciBBdWRpZ3ksIE1QVSBwb3J0IG1vdmUgdG8gMHg3MC0weDc0IHB0ciByZWdpc3RlcgorCisjZGVmaW5lIE1VREFUQQkJCTB4MTgJCS8qIE1QVTQwMSBkYXRhIHJlZ2lzdGVyICg4IGJpdHMpICAgICAgIAkJKi8KKworI2RlZmluZSBNVUNNRAkJCTB4MTkJCS8qIE1QVTQwMSBjb21tYW5kIHJlZ2lzdGVyICg4IGJpdHMpICAgIAkJKi8KKyNkZWZpbmUgTVVDTURfUkVTRVQJCTB4ZmYJCS8qIFJFU0VUIGNvbW1hbmQJCQkJKi8KKyNkZWZpbmUgTVVDTURfRU5URVJVQVJUTU9ERQkweDNmCQkvKiBFbnRlcl9VQVJUX21vZGUgY29tbWFuZAkJCSovCisJCQkJCQkvKiBOT1RFOiBBbGwgb3RoZXIgY29tbWFuZHMgYXJlIGlnbm9yZWQJCSovCisKKyNkZWZpbmUgTVVTVEFUCQkJTVVDTUQJCS8qIE1QVTQwMSBzdGF0dXMgcmVnaXN0ZXIgKDggYml0cykgICAgIAkJKi8KKyNkZWZpbmUgTVVTVEFUX0lSRFlOCQkweDgwCQkvKiAwID0gTUlESSBkYXRhIG9yIGNvbW1hbmQgQUNLCQkJKi8KKyNkZWZpbmUgTVVTVEFUX09SRFlOCQkweDQwCQkvKiAwID0gTVVEQVRBIGNhbiBhY2NlcHQgYSBjb21tYW5kIG9yIGRhdGEJKi8KKworI2RlZmluZSBBX0lPQ0ZHCQkJMHgxOAkJLyogR1BJTyBvbiBBdWRpZ3kgY2FyZCAoMTZiaXRzKQkJCSovCisjZGVmaW5lIEFfR1BJTlBVVF9NQVNLCQkweGZmMDAKKyNkZWZpbmUgQV9HUE9VVFBVVF9NQVNLCQkweDAwZmYKKworLy8gQXVkaWd5IG91dHB1dC9HUElPIHN0dWZmIHRha2VuIGZyb20gdGhlIGtYIGRyaXZlcnMKKyNkZWZpbmUgQV9JT0NGR19HUE9VVDAJCTB4MDA0NAkJLyogYW5hbG9nL2RpZ2l0YWwJCQkJKi8KKyNkZWZpbmUgQV9JT0NGR19ESVNBQkxFX0FOQUxPRwkweDAwNDAJCS8qID0gJ2VuYWJsZScgZm9yIEF1ZGlneTIgKGNoaXByZXY9NCkJCSovCisjZGVmaW5lIEFfSU9DRkdfRU5BQkxFX0RJR0lUQUwJMHgwMDA0CisjZGVmaW5lIEFfSU9DRkdfVU5LTk9XTl8yMCAgICAgIDB4MDAyMAorI2RlZmluZSBBX0lPQ0ZHX0RJU0FCTEVfQUM5N19GUk9OVCAgICAgIDB4MDA4MCAgLyogdHVybiBvZmYgYWM5NyBmcm9udCAtPiBmcm9udCAoMTBrMi4xKQkqLworI2RlZmluZSBBX0lPQ0ZHX0dQT1VUMQkJMHgwMDAyCQkvKiBJUj8gZHJpdmUncyBpbnRlcm5hbCBieXBhc3MgKD8pCQkqLworI2RlZmluZSBBX0lPQ0ZHX0dQT1VUMgkJMHgwMDAxCQkvKiBJUiAqLworI2RlZmluZSBBX0lPQ0ZHX01VTFRJUFVSUE9TRV9KQUNLCTB4MjAwMCAgLyogY2VudGVyK2xmZStyZWFyX2NlbnRlciAoYTIvYTJleCkJCSovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiArIGRpZ2l0YWwgZm9yIGdlbmVyaWMgMTBrMgkJCSovCisjZGVmaW5lIEFfSU9DRkdfRElHSVRBTF9KQUNLICAgIDB4MTAwMCAgICAgICAgICAvKiBkaWdpdGFsIGZvciBhMiBwbGF0aW51bQkJCSovCisjZGVmaW5lIEFfSU9DRkdfRlJPTlRfSkFDSyAgICAgIDB4NDAwMAorI2RlZmluZSBBX0lPQ0ZHX1JFQVJfSkFDSyAgICAgICAweDgwMDAKKyNkZWZpbmUgQV9JT0NGR19QSE9ORVNfSkFDSyAgICAgMHgwMTAwICAgICAgICAgIC8qIExpdmVEcml2ZQkJCQkJKi8KKworLyogb3V0cHV0czoKKyAqCWZvciBhdWRpZ3kyIHBsYXRpbnVtOgkweGEwMAorICoJZm9yIGEyIHBsYXRpbnVtIGV4OgkweDFjMDAKKyAqCWZvciBhMSBwbGF0aW51bToJMHgwCisgKi8KKworI2RlZmluZSBUSU1FUgkJCTB4MWEJCS8qIFRpbWVyIHRlcm1pbmFsIGNvdW50IHJlZ2lzdGVyCQkqLworCQkJCQkJLyogTk9URTogQWZ0ZXIgdGhlIHJhdGUgaXMgY2hhbmdlZCwgYSBtYXhpbXVtCSovCisJCQkJCQkvKiBvZiAxMDI0IHNhbXBsZSBwZXJpb2RzIHNob3VsZCBiZSBhbGxvd2VkCSovCisJCQkJCQkvKiBiZWZvcmUgdGhlIG5ldyByYXRlIGlzIGd1YXJhbnRlZWQgYWNjdXJhdGUuCSovCisjZGVmaW5lIFRJTUVSX1JBVEVfTUFTSwkJMHgwMDAwMDNmZgkvKiBUaW1lciBpbnRlcnJ1cHQgcmF0ZSBpbiBzYW1wbGUgcGVyaW9kcwkqLworCQkJCQkJLyogMCA9PSAxMDI0IHBlcmlvZHMsIFsxLi40XSBhcmUgbm90IHVzZWZ1bAkqLworI2RlZmluZSBUSU1FUl9SQVRFCQkweDBhMDAwMDFhCisKKyNkZWZpbmUgQUM5N0RBVEEJCTB4MWMJCS8qIEFDOTcgcmVnaXN0ZXIgc2V0IGRhdGEgcmVnaXN0ZXIgKDE2IGJpdCkJKi8KKworI2RlZmluZSBBQzk3QUREUkVTUwkJMHgxZQkJLyogQUM5NyByZWdpc3RlciBzZXQgYWRkcmVzcyByZWdpc3RlciAoOCBiaXQpCSovCisjZGVmaW5lIEFDOTdBRERSRVNTX1JFQURZCTB4ODAJCS8qIFJlYWQtb25seSBiaXQsIHJlZmxlY3RzIENPREVDIFJFQURZIHNpZ25hbAkqLworI2RlZmluZSBBQzk3QUREUkVTU19BRERSRVNTCTB4N2YJCS8qIEFkZHJlc3Mgb2YgaW5kZXhlZCBBQzk3IHJlZ2lzdGVyCQkqLworCisvKiBBdmFpbGFibGUgb24gdGhlIEF1ZGlneSAyIGFuZCBBdWRpZ3kgNCBvbmx5LiBUaGlzIGlzIHRoZSBQMTZWIGNoaXAuICovCisjZGVmaW5lIFBUUjIJCQkweDIwCQkvKiBJbmRleGVkIHJlZ2lzdGVyIHNldCBwb2ludGVyIHJlZ2lzdGVyCSovCisjZGVmaW5lIERBVEEyCQkJMHgyNAkJLyogSW5kZXhlZCByZWdpc3RlciBzZXQgZGF0YSByZWdpc3RlcgkJKi8KKyNkZWZpbmUgSVBSMgkJCTB4MjgJCS8qIFAxNlYgaW50ZXJydXB0IHBlbmRpbmcgcmVnaXN0ZXIJCSovCisjZGVmaW5lIElQUjJfUExBWUJBQ0tfQ0hfMF9MT09QICAgICAgMHgwMDAwMTAwMCAvKiBQbGF5YmFjayBDaGFubmVsIDAgbG9vcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJUFIyX1BMQVlCQUNLX0NIXzBfSEFMRl9MT09QIDB4MDAwMDAxMDAgLyogUGxheWJhY2sgQ2hhbm5lbCAwIGhhbGYgbG9vcCAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSVBSMl9DQVBUVVJFX0NIXzBfTE9PUCAgICAgICAweDAwMTAwMDAwIC8qIENhcHR1cmUgQ2hhbm5lbCAwIGxvb3AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSVBSMl9DQVBUVVJFX0NIXzBfSEFMRl9MT09QICAweDAwMDEwMDAwIC8qIENhcHR1cmUgQ2hhbm5lbCAwIGhhbGYgbG9vcCAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJCS8qIDB4MDAwMDAxMDAgUGxheWJhY2suIE9ubHkgaW4gb25jZSBwZXIgcGVyaW9kLgorCQkJCQkJICogMHgwMDExMDAwMCBDYXB0dXJlLiBJbnQgb24gaGFsZiBidWZmZXIuCisJCQkJCQkgKi8KKyNkZWZpbmUgSU5URTIJCQkweDJjCQkvKiBQMTZWIEludGVycnVwdCBlbmFibGUgcmVnaXN0ZXIuIAkqLworI2RlZmluZSBJTlRFMl9QTEFZQkFDS19DSF8wX0xPT1AgICAgICAweDAwMDAxMDAwIC8qIFBsYXliYWNrIENoYW5uZWwgMCBsb29wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIElOVEUyX1BMQVlCQUNLX0NIXzBfSEFMRl9MT09QIDB4MDAwMDAxMDAgLyogUGxheWJhY2sgQ2hhbm5lbCAwIGhhbGYgbG9vcCAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSU5URTJfUExBWUJBQ0tfQ0hfMV9MT09QICAgICAgMHgwMDAwMjAwMCAvKiBQbGF5YmFjayBDaGFubmVsIDEgbG9vcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJTlRFMl9QTEFZQkFDS19DSF8xX0hBTEZfTE9PUCAweDAwMDAwMjAwIC8qIFBsYXliYWNrIENoYW5uZWwgMSBoYWxmIGxvb3AgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIElOVEUyX1BMQVlCQUNLX0NIXzJfTE9PUCAgICAgIDB4MDAwMDQwMDAgLyogUGxheWJhY2sgQ2hhbm5lbCAyIGxvb3AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSU5URTJfUExBWUJBQ0tfQ0hfMl9IQUxGX0xPT1AgMHgwMDAwMDQwMCAvKiBQbGF5YmFjayBDaGFubmVsIDIgaGFsZiBsb29wICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJTlRFMl9QTEFZQkFDS19DSF8zX0xPT1AgICAgICAweDAwMDA4MDAwIC8qIFBsYXliYWNrIENoYW5uZWwgMyBsb29wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIElOVEUyX1BMQVlCQUNLX0NIXzNfSEFMRl9MT09QIDB4MDAwMDA4MDAgLyogUGxheWJhY2sgQ2hhbm5lbCAzIGhhbGYgbG9vcCAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSU5URTJfQ0FQVFVSRV9DSF8wX0xPT1AgICAgICAgMHgwMDEwMDAwMCAvKiBDYXB0dXJlIENoYW5uZWwgMCBsb29wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIElOVEUyX0NBUFRVUkVfQ0hfMF9IQUxGX0xPT1AgIDB4MDAwMTAwMDAgLyogQ2FwdXRyZSBDaGFubmVsIDAgaGFsZiBsb29wICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBIQ0ZHMgkJCTB4MzQJCS8qIERlZmF1bHRzOiAwLCB3aW4yMDAwIHNldHMgaXQgdG8gMDAwMDQyMDEgKi8KKwkJCQkJCS8qIDB4MDAwMDAwMDAgMi1jaGFubmVsIG91dHB1dC4gKi8KKwkJCQkJCS8qIDB4MDAwMDAyMDAgOC1jaGFubmVsIG91dHB1dC4gKi8KKwkJCQkJCS8qIDB4MDAwMDAwMDQgcGF1c2VzIHN0cmVhbS9pcnEgZmFpbC4gKi8KKwkJCQkJCS8qIFJlc3Qgb2YgYml0cyBubyBub3RoaW5nIHRvIHNvdW5kIG91dHB1dCAqLworCQkJCQkJLyogYml0IDA6IEVuYWJsZSBQMTZWIGF1ZGlvLgorCQkJCQkJICogYml0IDE6IExvY2sgUDE2ViByZWNvcmQgbWVtb3J5IGNhY2hlLgorCQkJCQkJICogYml0IDI6IExvY2sgUDE2ViBwbGF5YmFjayBtZW1vcnkgY2FjaGUuCisJCQkJCQkgKiBiaXQgMzogRHVtbXkgcmVjb3JkIGluc2VydCB6ZXJvIHNhbXBsZXMuCisJCQkJCQkgKiBiaXQgODogUmVjb3JkIDgtY2hhbm5lbCBpbiBwaGFzZS4KKwkJCQkJCSAqIGJpdCA5OiBQbGF5YmFjayA4LWNoYW5uZWwgaW4gcGhhc2UuCisJCQkJCQkgKiBiaXQgMTEtMTI6IFBsYXliYWNrIG1peGVyIGF0dGVudWF0aW9uOiAwPTBkQiwgMT0tNmRCLCAyPS0xMmRCLCAzPU11dGUuCisJCQkJCQkgKiBiaXQgMTM6IFBsYXliYWNrIG1peGVyIGVuYWJsZS4KKwkJCQkJCSAqIGJpdCAxNDogUm91dGUgU1JDNDggbWl4ZXIgb3V0cHV0IHRvIGZ4IGVuZ2luZS4KKwkJCQkJCSAqIGJpdCAxNTogRW5hYmxlIElFRUUgMTM5NCBjaGlwLgorCQkJCQkJICovCisjZGVmaW5lIElQUjMJCQkweDM4CQkvKiBDZGlmIGludGVycnVwdCBwZW5kaW5nIHJlZ2lzdGVyCQkqLworI2RlZmluZSBJTlRFMwkJCTB4M2MJCS8qIENkaWYgaW50ZXJydXB0IGVuYWJsZSByZWdpc3Rlci4gCSovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogUENJIGZ1bmN0aW9uIDEgcmVnaXN0ZXJzLCBhZGRyZXNzID0gPHZhbD4gKyBQQ0lCQVNFMQkJCQkJCSovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIEpPWVNUSUNLMQkJMHgwMAkJLyogQW5hbG9nIGpveXN0aWNrIHBvcnQgcmVnaXN0ZXIJCSovCisjZGVmaW5lIEpPWVNUSUNLMgkJMHgwMQkJLyogQW5hbG9nIGpveXN0aWNrIHBvcnQgcmVnaXN0ZXIJCSovCisjZGVmaW5lIEpPWVNUSUNLMwkJMHgwMgkJLyogQW5hbG9nIGpveXN0aWNrIHBvcnQgcmVnaXN0ZXIJCSovCisjZGVmaW5lIEpPWVNUSUNLNAkJMHgwMwkJLyogQW5hbG9nIGpveXN0aWNrIHBvcnQgcmVnaXN0ZXIJCSovCisjZGVmaW5lIEpPWVNUSUNLNQkJMHgwNAkJLyogQW5hbG9nIGpveXN0aWNrIHBvcnQgcmVnaXN0ZXIJCSovCisjZGVmaW5lIEpPWVNUSUNLNgkJMHgwNQkJLyogQW5hbG9nIGpveXN0aWNrIHBvcnQgcmVnaXN0ZXIJCSovCisjZGVmaW5lIEpPWVNUSUNLNwkJMHgwNgkJLyogQW5hbG9nIGpveXN0aWNrIHBvcnQgcmVnaXN0ZXIJCSovCisjZGVmaW5lIEpPWVNUSUNLOAkJMHgwNwkJLyogQW5hbG9nIGpveXN0aWNrIHBvcnQgcmVnaXN0ZXIJCSovCisKKy8qIFdoZW4gd3JpdGluZywgYW55IHdyaXRlIGNhdXNlcyBKT1lTVElDS19DT01QQVJBVE9SIG91dHB1dCBlbmFibGUgdG8gYmUgcHVsc2VkIG9uIHdyaXRlLgkqLworLyogV2hlbiByZWFkaW5nLCB1c2UgdGhlc2UgYml0ZmllbGRzOiAqLworI2RlZmluZSBKT1lTVElDS19CVVRUT05TCTB4MGYJCS8qIEpveXN0aWNrIGJ1dHRvbiBkYXRhCQkJCSovCisjZGVmaW5lIEpPWVNUSUNLX0NPTVBBUkFUT1IJMHhmMAkJLyogSm95c3RpY2sgY29tcGFyYXRvciBkYXRhCQkJKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBFbXUxMGsxIHBvaW50ZXItb2Zmc2V0IHJlZ2lzdGVyIHNldCwgYWNjZXNzZWQgdGhyb3VnaCB0aGUgUFRSIGFuZCBEQVRBIHJlZ2lzdGVycwkJCSovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgQ1BGCQkJMHgwMAkJLyogQ3VycmVudCBwaXRjaCBhbmQgZnJhY3Rpb24gcmVnaXN0ZXIJCQkqLworI2RlZmluZSBDUEZfQ1VSUkVOVFBJVENIX01BU0sJMHhmZmZmMDAwMAkvKiBDdXJyZW50IHBpdGNoIChsaW5lYXIsIDB4NDAwMCA9PSB1bml0eSBwaXRjaCBzaGlmdCkgCSovCisjZGVmaW5lIENQRl9DVVJSRU5UUElUQ0gJMHgxMDEwMDAwMAorI2RlZmluZSBDUEZfU1RFUkVPX01BU0sJCTB4MDAwMDgwMDAJLyogMSA9IEV2ZW4gY2hhbm5lbCBpbnRlcmxlYXZlLCBvZGQgY2hhbm5lbCBsb2NrZWQJKi8KKyNkZWZpbmUgQ1BGX1NUT1BfTUFTSwkJMHgwMDAwNDAwMAkvKiAxID0gQ3VycmVudCBwaXRjaCBmb3JjZWQgdG8gMAkJCSovCisjZGVmaW5lIENQRl9GUkFDQUREUkVTU19NQVNLCTB4MDAwMDNmZmYJLyogTGluZWFyIGZyYWN0aW9uYWwgYWRkcmVzcyBvZiB0aGUgY3VycmVudCBjaGFubmVsCSovCisKKyNkZWZpbmUgUFRSWAkJCTB4MDEJCS8qIFBpdGNoIHRhcmdldCBhbmQgc2VuZCBBL0IgYW1vdW50cyByZWdpc3RlcgkJKi8KKyNkZWZpbmUgUFRSWF9QSVRDSFRBUkdFVF9NQVNLCTB4ZmZmZjAwMDAJLyogUGl0Y2ggdGFyZ2V0IG9mIHNwZWNpZmllZCBjaGFubmVsCQkJKi8KKyNkZWZpbmUgUFRSWF9QSVRDSFRBUkdFVAkweDEwMTAwMDAxCisjZGVmaW5lIFBUUlhfRlhTRU5EQU1PVU5UX0FfTUFTSyAweDAwMDBmZjAwCS8qIExpbmVhciBsZXZlbCBvZiBjaGFubmVsIG91dHB1dCBzZW50IHRvIEZYIHNlbmQgYnVzIEEJKi8KKyNkZWZpbmUgUFRSWF9GWFNFTkRBTU9VTlRfQQkweDA4MDgwMDAxCisjZGVmaW5lIFBUUlhfRlhTRU5EQU1PVU5UX0JfTUFTSyAweDAwMDAwMGZmCS8qIExpbmVhciBsZXZlbCBvZiBjaGFubmVsIG91dHB1dCBzZW50IHRvIEZYIHNlbmQgYnVzIEIJKi8KKyNkZWZpbmUgUFRSWF9GWFNFTkRBTU9VTlRfQgkweDA4MDAwMDAxCisKKyNkZWZpbmUgQ1ZDRgkJCTB4MDIJCS8qIEN1cnJlbnQgdm9sdW1lIGFuZCBmaWx0ZXIgY3V0b2ZmIHJlZ2lzdGVyCQkqLworI2RlZmluZSBDVkNGX0NVUlJFTlRWT0xfTUFTSwkweGZmZmYwMDAwCS8qIEN1cnJlbnQgbGluZWFyIHZvbHVtZSBvZiBzcGVjaWZpZWQgY2hhbm5lbAkJKi8KKyNkZWZpbmUgQ1ZDRl9DVVJSRU5UVk9MCQkweDEwMTAwMDAyCisjZGVmaW5lIENWQ0ZfQ1VSUkVOVEZJTFRFUl9NQVNLCTB4MDAwMGZmZmYJLyogQ3VycmVudCBmaWx0ZXIgY3V0b2ZmIGZyZXF1ZW5jeSBvZiBzcGVjaWZpZWQgY2hhbm5lbAkqLworI2RlZmluZSBDVkNGX0NVUlJFTlRGSUxURVIJMHgxMDAwMDAwMgorCisjZGVmaW5lIFZURlQJCQkweDAzCQkvKiBWb2x1bWUgdGFyZ2V0IGFuZCBmaWx0ZXIgY3V0b2ZmIHRhcmdldCByZWdpc3RlcgkqLworI2RlZmluZSBWVEZUX1ZPTFVNRVRBUkdFVF9NQVNLCTB4ZmZmZjAwMDAJLyogVm9sdW1lIHRhcmdldCBvZiBzcGVjaWZpZWQgY2hhbm5lbAkJCSovCisjZGVmaW5lIFZURlRfVk9MVU1FVEFSR0VUCTB4MTAxMDAwMDMKKyNkZWZpbmUgVlRGVF9GSUxURVJUQVJHRVRfTUFTSwkweDAwMDBmZmZmCS8qIEZpbHRlciBjdXRvZmYgdGFyZ2V0IG9mIHNwZWNpZmllZCBjaGFubmVsCQkqLworI2RlZmluZSBWVEZUX0ZJTFRFUlRBUkdFVAkweDEwMDAwMDAzCisKKyNkZWZpbmUgWjEJCQkweDA1CQkvKiBGaWx0ZXIgZGVsYXkgbWVtb3J5IDEgcmVnaXN0ZXIJCQkqLworCisjZGVmaW5lIFoyCQkJMHgwNAkJLyogRmlsdGVyIGRlbGF5IG1lbW9yeSAyIHJlZ2lzdGVyCQkJKi8KKworI2RlZmluZSBQU1NUCQkJMHgwNgkJLyogU2VuZCBDIGFtb3VudCBhbmQgbG9vcCBzdGFydCBhZGRyZXNzIHJlZ2lzdGVyCSovCisjZGVmaW5lIFBTU1RfRlhTRU5EQU1PVU5UX0NfTUFTSyAweGZmMDAwMDAwCS8qIExpbmVhciBsZXZlbCBvZiBjaGFubmVsIG91dHB1dCBzZW50IHRvIEZYIHNlbmQgYnVzIEMJKi8KKworI2RlZmluZSBQU1NUX0ZYU0VOREFNT1VOVF9DCTB4MDgxODAwMDYKKworI2RlZmluZSBQU1NUX0xPT1BTVEFSVEFERFJfTUFTSwkweDAwZmZmZmZmCS8qIExvb3Agc3RhcnQgYWRkcmVzcyBvZiB0aGUgc3BlY2lmaWVkIGNoYW5uZWwJCSovCisjZGVmaW5lIFBTU1RfTE9PUFNUQVJUQUREUgkweDE4MDAwMDA2CisKKyNkZWZpbmUgRFNMCQkJMHgwNwkJLyogU2VuZCBEIGFtb3VudCBhbmQgbG9vcCBzdGFydCBhZGRyZXNzIHJlZ2lzdGVyCSovCisjZGVmaW5lIERTTF9GWFNFTkRBTU9VTlRfRF9NQVNLCTB4ZmYwMDAwMDAJLyogTGluZWFyIGxldmVsIG9mIGNoYW5uZWwgb3V0cHV0IHNlbnQgdG8gRlggc2VuZCBidXMgRAkqLworCisjZGVmaW5lIERTTF9GWFNFTkRBTU9VTlRfRAkweDA4MTgwMDA3CisKKyNkZWZpbmUgRFNMX0xPT1BFTkRBRERSX01BU0sJMHgwMGZmZmZmZgkvKiBMb29wIGVuZCBhZGRyZXNzIG9mIHRoZSBzcGVjaWZpZWQgY2hhbm5lbAkJKi8KKyNkZWZpbmUgRFNMX0xPT1BFTkRBRERSCQkweDE4MDAwMDA3CisKKyNkZWZpbmUgQ0NDQQkJCTB4MDgJCS8qIEZpbHRlciBRLCBpbnRlcnAuIFJPTSwgYnl0ZSBzaXplLCBjdXIuIGFkZHIgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ0NDQV9SRVNPTkFOQ0UJCTB4ZjAwMDAwMDAJLyogTG93cGFzcyBmaWx0ZXIgcmVzb25hbmNlIChRKSBoZWlnaHQJCQkqLworI2RlZmluZSBDQ0NBX0lOVEVSUFJPTU1BU0sJMHgwZTAwMDAwMAkvKiBTZWxlY3RzIHBhc3NiYW5kIG9mIGludGVycG9sYXRpb24gUk9NCQkqLworCQkJCQkJLyogMSA9PSBmdWxsIGJhbmQsIDcgPT0gbG93cGFzcwkJCQkqLworCQkJCQkJLyogUk9NIDAgaXMgdXNlZCB3aGVuIHBpdGNoIHNoaWZ0aW5nIGRvd253YXJkIG9yIGxlc3MJKi8KKwkJCQkJCS8qIHRoZW4gMyBzZW1pdG9uZXMgdXB3YXJkLiAgSW5jcmVhc2luZ2x5IGhpZ2hlciBST00JKi8KKwkJCQkJCS8qIG51bWJlcnMgYXJlIHVzZWQsIHR5cGljYWxseSBpbiBzdGVwcyBvZiAzIHNlbWl0b25lcywJKi8KKwkJCQkJCS8qIGFzIHVwd2FyZCBwaXRjaCBzaGlmdGluZyBpcyBwZXJmb3JtZWQuCQkqLworI2RlZmluZSBDQ0NBX0lOVEVSUFJPTV8wCTB4MDAwMDAwMDAJLyogU2VsZWN0IGludGVycG9sYXRpb24gUk9NIDAJCQkJKi8KKyNkZWZpbmUgQ0NDQV9JTlRFUlBST01fMQkweDAyMDAwMDAwCS8qIFNlbGVjdCBpbnRlcnBvbGF0aW9uIFJPTSAxCQkJCSovCisjZGVmaW5lIENDQ0FfSU5URVJQUk9NXzIJMHgwNDAwMDAwMAkvKiBTZWxlY3QgaW50ZXJwb2xhdGlvbiBST00gMgkJCQkqLworI2RlZmluZSBDQ0NBX0lOVEVSUFJPTV8zCTB4MDYwMDAwMDAJLyogU2VsZWN0IGludGVycG9sYXRpb24gUk9NIDMJCQkJKi8KKyNkZWZpbmUgQ0NDQV9JTlRFUlBST01fNAkweDA4MDAwMDAwCS8qIFNlbGVjdCBpbnRlcnBvbGF0aW9uIFJPTSA0CQkJCSovCisjZGVmaW5lIENDQ0FfSU5URVJQUk9NXzUJMHgwYTAwMDAwMAkvKiBTZWxlY3QgaW50ZXJwb2xhdGlvbiBST00gNQkJCQkqLworI2RlZmluZSBDQ0NBX0lOVEVSUFJPTV82CTB4MGMwMDAwMDAJLyogU2VsZWN0IGludGVycG9sYXRpb24gUk9NIDYJCQkJKi8KKyNkZWZpbmUgQ0NDQV9JTlRFUlBST01fNwkweDBlMDAwMDAwCS8qIFNlbGVjdCBpbnRlcnBvbGF0aW9uIFJPTSA3CQkJCSovCisjZGVmaW5lIENDQ0FfOEJJVFNFTEVDVAkJMHgwMTAwMDAwMAkvKiAxID0gU291bmQgbWVtb3J5IGZvciB0aGlzIGNoYW5uZWwgdXNlcyA4LWJpdCBzYW1wbGVzCSovCisjZGVmaW5lIENDQ0FfQ1VSUkFERFJfTUFTSwkweDAwZmZmZmZmCS8qIEN1cnJlbnQgYWRkcmVzcyBvZiB0aGUgc2VsZWN0ZWQgY2hhbm5lbAkJKi8KKyNkZWZpbmUgQ0NDQV9DVVJSQUREUgkJMHgxODAwMDAwOAorCisjZGVmaW5lIENDUgkJCTB4MDkJCS8qIENhY2hlIGNvbnRyb2wgcmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgQ0NSX0NBQ0hFSU5WQUxJRFNJWkUJMHgwNzE5MDAwOQorI2RlZmluZSBDQ1JfQ0FDSEVJTlZBTElEU0laRV9NQVNLCTB4ZmUwMDAwMDAJLyogTnVtYmVyIG9mIGludmFsaWQgc2FtcGxlcyBjYWNoZSBmb3IgdGhpcyBjaGFubmVsICAgIAkqLworI2RlZmluZSBDQ1JfQ0FDSEVMT09QRkxBRwkweDAxMDAwMDAwCS8qIDEgPSBDYWNoZSBoYXMgYSBsb29wIHNlcnZpY2UgcGVuZGluZwkJCSovCisjZGVmaW5lIENDUl9JTlRFUkxFQVZFRFNBTVBMRVMJMHgwMDgwMDAwMAkvKiAxID0gQSBjYWNoZSBzZXJ2aWNlIHdpbGwgZmV0Y2ggaW50ZXJsZWF2ZWQgc2FtcGxlcwkqLworI2RlZmluZSBDQ1JfV09SRFNJWkVEU0FNUExFUwkweDAwNDAwMDAwCS8qIDEgPSBBIGNhY2hlIHNlcnZpY2Ugd2lsbCBmZXRjaCB3b3JkIHNpemVkIHNhbXBsZXMJKi8KKyNkZWZpbmUgQ0NSX1JFQURBRERSRVNTCQkweDA2MTAwMDA5CisjZGVmaW5lIENDUl9SRUFEQUREUkVTU19NQVNLCTB4MDAzZjAwMDAJLyogTG9jYXRpb24gb2YgY2FjaGUganVzdCBiZXlvbmQgY3VycmVudCBjYWNoZSBzZXJ2aWNlCSovCisjZGVmaW5lIENDUl9MT09QSU5WQUxTSVpFCTB4MDAwMGZlMDAJLyogTnVtYmVyIG9mIGludmFsaWQgc2FtcGxlcyBpbiBjYWNoZSBwcmlvciB0byBsb29wCSovCisJCQkJCQkvKiBOT1RFOiBUaGlzIGlzIHZhbGlkIG9ubHkgaWYgQ0FDSEVMT09QRkxBRyBpcyBzZXQJKi8KKyNkZWZpbmUgQ0NSX0xPT1BGTEFHCQkweDAwMDAwMTAwCS8qIFNldCBmb3IgYSBzaW5nbGUgc2FtcGxlIHBlcmlvZCB3aGVuIGEgbG9vcCBvY2N1cnMJKi8KKyNkZWZpbmUgQ0NSX0NBQ0hFTE9PUEFERFJISQkweDAwMDAwMGZmCS8qIERTTF9MT09QU1RBUlRBRERSJ3MgaGkgYnl0ZSBpZiBDQUNIRUxPT1BGTEFHIGlzIHNldAkqLworCisjZGVmaW5lIENMUAkJCTB4MGEJCS8qIENhY2hlIGxvb3AgcmVnaXN0ZXIgKHZhbGlkIGlmIENDUl9DQUNIRUxPT1BGTEFHID0gMSkgKi8KKwkJCQkJCS8qIE5PVEU6IFRoaXMgcmVnaXN0ZXIgaXMgbm9ybWFsbHkgbm90IHVzZWQJCSovCisjZGVmaW5lIENMUF9DQUNIRUxPT1BBRERSCTB4MDAwMGZmZmYJLyogQ2FjaGUgbG9vcCBhZGRyZXNzIChEU0xfTE9PUFNUQVJUQUREUiBbMC4uMTVdKQkqLworCisjZGVmaW5lIEZYUlQJCQkweDBiCQkvKiBFZmZlY3RzIHNlbmQgcm91dGluZyByZWdpc3RlcgkJCSovCisJCQkJCQkvKiBOT1RFOiBJdCBpcyBpbGxlZ2FsIHRvIGFzc2lnbiB0aGUgc2FtZSByb3V0aW5nIHRvCSovCisJCQkJCQkvKiB0d28gZWZmZWN0cyBzZW5kcy4JCQkJCSovCisjZGVmaW5lIEZYUlRfQ0hBTk5FTEEJCTB4MDAwZjAwMDAJLyogRWZmZWN0cyBzZW5kIGJ1cyBudW1iZXIgZm9yIGNoYW5uZWwncyBlZmZlY3RzIHNlbmQgQQkqLworI2RlZmluZSBGWFJUX0NIQU5ORUxCCQkweDAwZjAwMDAwCS8qIEVmZmVjdHMgc2VuZCBidXMgbnVtYmVyIGZvciBjaGFubmVsJ3MgZWZmZWN0cyBzZW5kIEIJKi8KKyNkZWZpbmUgRlhSVF9DSEFOTkVMQwkJMHgwZjAwMDAwMAkvKiBFZmZlY3RzIHNlbmQgYnVzIG51bWJlciBmb3IgY2hhbm5lbCdzIGVmZmVjdHMgc2VuZCBDCSovCisjZGVmaW5lIEZYUlRfQ0hBTk5FTEQJCTB4ZjAwMDAwMDAJLyogRWZmZWN0cyBzZW5kIGJ1cyBudW1iZXIgZm9yIGNoYW5uZWwncyBlZmZlY3RzIHNlbmQgRAkqLworCisjZGVmaW5lIE1BUEEJCQkweDBjCQkvKiBDYWNoZSBtYXAgQQkJCQkJCSovCisKKyNkZWZpbmUgTUFQQgkJCTB4MGQJCS8qIENhY2hlIG1hcCBCCQkJCQkJKi8KKworI2RlZmluZSBNQVBfUFRFX01BU0sJCTB4ZmZmZmUwMDAJLyogVGhlIDE5IE1TQnMgb2YgdGhlIFBURSBpbmRleGVkIGJ5IHRoZSBQVEkJCSovCisjZGVmaW5lIE1BUF9QVElfTUFTSwkJMHgwMDAwMWZmZgkvKiBUaGUgMTMgYml0IGluZGV4IHRvIG9uZSBvZiB0aGUgODE5MiBQVEUgZHdvcmRzICAgICAgCSovCisKKyNkZWZpbmUgRU5WVk9MCQkJMHgxMAkJLyogVm9sdW1lIGVudmVsb3BlIHJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIEVOVlZPTF9NQVNLCQkweDAwMDBmZmZmCS8qIEN1cnJlbnQgdmFsdWUgb2Ygdm9sdW1lIGVudmVsb3BlIHN0YXRlIHZhcmlhYmxlCSovICAKKwkJCQkJCS8qIDB4ODAwMC1uID09IDY2NipuIHVzZWMgZGVsYXkJICAgICAgIAkJCSovCisKKyNkZWZpbmUgQVRLSExEViAJCTB4MTEJCS8qIFZvbHVtZSBlbnZlbG9wZSBob2xkIGFuZCBhdHRhY2sgcmVnaXN0ZXIJCSovCisjZGVmaW5lIEFUS0hMRFZfUEhBU0UwCQkweDAwMDA4MDAwCS8qIDAgPSBCZWdpbiBhdHRhY2sgcGhhc2UJCQkJKi8KKyNkZWZpbmUgQVRLSExEVl9IT0xEVElNRV9NQVNLCTB4MDAwMDdmMDAJLyogRW52ZWxvcGUgaG9sZCB0aW1lICgxMjctbiA9PSBuKjg4LjJtc2VjKQkJKi8KKyNkZWZpbmUgQVRLSExEVl9BVFRBQ0tUSU1FX01BU0sJMHgwMDAwMDA3ZgkvKiBFbnZlbG9wZSBhdHRhY2sgdGltZSwgbG9nIGVuY29kZWQJCQkqLworCQkJCQkJLyogMCA9IGluZmluaXRlLCAxID0gMTAuOW1zZWMsIC4uLiAweDdmID0gNS41bXNlYwkqLworCisjZGVmaW5lIERDWVNVU1YgCQkweDEyCQkvKiBWb2x1bWUgZW52ZWxvcGUgc3VzdGFpbiBhbmQgZGVjYXkgcmVnaXN0ZXIJCSovCisjZGVmaW5lIERDWVNVU1ZfUEhBU0UxX01BU0sJMHgwMDAwODAwMAkvKiAwID0gQmVnaW4gYXR0YWNrIHBoYXNlLCAxID0gYmVnaW4gcmVsZWFzZSBwaGFzZQkqLworI2RlZmluZSBEQ1lTVVNWX1NVU1RBSU5MRVZFTF9NQVNLIDB4MDAwMDdmMDAJLyogMTI3ID0gZnVsbCwgMCA9IG9mZiwgMC43NWRCIGluY3JlbWVudHMJCSovCisjZGVmaW5lIERDWVNVU1ZfQ0hBTk5FTEVOQUJMRV9NQVNLIDB4MDAwMDAwODAJLyogMSA9IEluaGliaXQgZW52ZWxvcGUgZW5naW5lIGZyb20gd3JpdGluZyB2YWx1ZXMgaW4JKi8KKwkJCQkJCS8qIHRoaXMgY2hhbm5lbCBhbmQgZnJvbSB3cml0aW5nIHRvIHBpdGNoLCBmaWx0ZXIgYW5kCSovCisJCQkJCQkvKiB2b2x1bWUgdGFyZ2V0cy4JCQkJCSovCisjZGVmaW5lIERDWVNVU1ZfREVDQVlUSU1FX01BU0sJMHgwMDAwMDA3ZgkvKiBWb2x1bWUgZW52ZWxvcGUgZGVjYXkgdGltZSwgbG9nIGVuY29kZWQgICAgIAkJKi8KKwkJCQkJCS8qIDAgPSA0My43bXNlYywgMSA9IDIxLjhtc2VjLCAweDdmID0gMjJtc2VjCQkqLworCisjZGVmaW5lIExGT1ZBTDEgCQkweDEzCQkvKiBNb2R1bGF0aW9uIExGTyB2YWx1ZQkJCQkJKi8KKyNkZWZpbmUgTEZPVkFMX01BU0sJCTB4MDAwMGZmZmYJLyogQ3VycmVudCB2YWx1ZSBvZiBtb2R1bGF0aW9uIExGTyBzdGF0ZSB2YXJpYWJsZQkqLworCQkJCQkJLyogMHg4MDAwLW4gPT0gNjY2Km4gdXNlYyBkZWxheQkJCQkqLworCisjZGVmaW5lIEVOVlZBTAkJCTB4MTQJCS8qIE1vZHVsYXRpb24gZW52ZWxvcGUgcmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgRU5WVkFMX01BU0sJCTB4MDAwMGZmZmYJLyogQ3VycmVudCB2YWx1ZSBvZiBtb2R1bGF0aW9uIGVudmVsb3BlIHN0YXRlIHZhcmlhYmxlIAkqLworCQkJCQkJLyogMHg4MDAwLW4gPT0gNjY2Km4gdXNlYyBkZWxheQkJCQkqLworCisjZGVmaW5lIEFUS0hMRE0JCQkweDE1CQkvKiBNb2R1bGF0aW9uIGVudmVsb3BlIGhvbGQgYW5kIGF0dGFjayByZWdpc3RlcgkJKi8KKyNkZWZpbmUgQVRLSExETV9QSEFTRTAJCTB4MDAwMDgwMDAJLyogMCA9IEJlZ2luIGF0dGFjayBwaGFzZQkJCQkqLworI2RlZmluZSBBVEtITERNX0hPTERUSU1FCTB4MDAwMDdmMDAJLyogRW52ZWxvcGUgaG9sZCB0aW1lICgxMjctbiA9PSBuKjQybXNlYykJCSovCisjZGVmaW5lIEFUS0hMRE1fQVRUQUNLVElNRQkweDAwMDAwMDdmCS8qIEVudmVsb3BlIGF0dGFjayB0aW1lLCBsb2cgZW5jb2RlZAkJCSovCisJCQkJCQkvKiAwID0gaW5maW5pdGUsIDEgPSAxMW1zZWMsIC4uLiAweDdmID0gNS41bXNlYwkJKi8KKworI2RlZmluZSBEQ1lTVVNNCQkJMHgxNgkJLyogTW9kdWxhdGlvbiBlbnZlbG9wZSBkZWNheSBhbmQgc3VzdGFpbiByZWdpc3RlcgkqLworI2RlZmluZSBEQ1lTVVNNX1BIQVNFMV9NQVNLCTB4MDAwMDgwMDAJLyogMCA9IEJlZ2luIGF0dGFjayBwaGFzZSwgMSA9IGJlZ2luIHJlbGVhc2UgcGhhc2UJKi8KKyNkZWZpbmUgRENZU1VTTV9TVVNUQUlOTEVWRUxfTUFTSyAweDAwMDA3ZjAwCS8qIDEyNyA9IGZ1bGwsIDAgPSBvZmYsIDAuNzVkQiBpbmNyZW1lbnRzCQkqLworI2RlZmluZSBEQ1lTVVNNX0RFQ0FZVElNRV9NQVNLCTB4MDAwMDAwN2YJLyogRW52ZWxvcGUgZGVjYXkgdGltZSwgbG9nIGVuY29kZWQJCQkqLworCQkJCQkJLyogMCA9IDQzLjdtc2VjLCAxID0gMjEuOG1zZWMsIDB4N2YgPSAyMm1zZWMJCSovCisKKyNkZWZpbmUgTEZPVkFMMiAJCTB4MTcJCS8qIFZpYnJhdG8gTEZPIHJlZ2lzdGVyCQkJCQkqLworI2RlZmluZSBMRk9WQUwyX01BU0sJCTB4MDAwMGZmZmYJLyogQ3VycmVudCB2YWx1ZSBvZiB2aWJyYXRvIExGTyBzdGF0ZSB2YXJpYWJsZSAJCSovCisJCQkJCQkvKiAweDgwMDAtbiA9PSA2NjYqbiB1c2VjIGRlbGF5CQkJCSovCisKKyNkZWZpbmUgSVAJCQkweDE4CQkvKiBJbml0aWFsIHBpdGNoIHJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIElQX01BU0sJCQkweDAwMDBmZmZmCS8qIEV4cG9uZW50aWFsIGluaXRpYWwgcGl0Y2ggc2hpZnQJCQkqLworCQkJCQkJLyogNCBiaXRzIG9mIG9jdGF2ZSwgMTIgYml0cyBvZiBmcmFjdGlvbmFsIG9jdGF2ZQkqLworI2RlZmluZSBJUF9VTklUWQkJMHgwMDAwZTAwMAkvKiBVbml0eSBwaXRjaCBzaGlmdAkJCQkJKi8KKworI2RlZmluZSBJRkFUTgkJCTB4MTkJCS8qIEluaXRpYWwgZmlsdGVyIGN1dG9mZiBhbmQgYXR0ZW51YXRpb24gcmVnaXN0ZXIJKi8KKyNkZWZpbmUgSUZBVE5fRklMVEVSQ1VUT0ZGX01BU0sJMHgwMDAwZmYwMAkvKiBJbml0aWFsIGZpbHRlciBjdXRvZmYgZnJlcXVlbmN5IGluIGV4cG9uZW50aWFsIHVuaXRzCSovCisJCQkJCQkvKiA2IG1vc3Qgc2lnbmlmaWNhbnQgYml0cyBhcmUgc2VtaXRvbmVzCQkqLworCQkJCQkJLyogMiBsZWFzdCBzaWduaWZpY2FudCBiaXRzIGFyZSBmcmFjdGlvbnMJCSovCisjZGVmaW5lIElGQVROX0ZJTFRFUkNVVE9GRgkweDA4MDgwMDE5CisjZGVmaW5lIElGQVROX0FUVEVOVUFUSU9OX01BU0sJMHgwMDAwMDBmZgkvKiBJbml0aWFsIGF0dGVudWF0aW9uIGluIDAuMzc1ZEIgc3RlcHMJCQkqLworI2RlZmluZSBJRkFUTl9BVFRFTlVBVElPTgkweDA4MDAwMDE5CisKKworI2RlZmluZSBQRUZFCQkJMHgxYQkJLyogUGl0Y2ggZW52ZWxvcGUgYW5kIGZpbHRlciBlbnZlbG9wZSBhbW91bnQgcmVnaXN0ZXIJKi8KKyNkZWZpbmUgUEVGRV9QSVRDSEFNT1VOVF9NQVNLCTB4MDAwMGZmMDAJLyogUGl0Y2ggZW52bG9wZSBhbW91bnQJCQkJCSovCisJCQkJCQkvKiBTaWduZWQgMidzIGNvbXBsZW1lbnQsICsvLSBvbmUgb2N0YXZlIHBlYWsgZXh0cmVtZXMJKi8KKyNkZWZpbmUgUEVGRV9QSVRDSEFNT1VOVAkweDA4MDgwMDFhCisjZGVmaW5lIFBFRkVfRklMVEVSQU1PVU5UX01BU0sJMHgwMDAwMDBmZgkvKiBGaWx0ZXIgZW52bG9wZSBhbW91bnQJCQkJKi8KKwkJCQkJCS8qIFNpZ25lZCAyJ3MgY29tcGxlbWVudCwgKy8tIHNpeCBvY3RhdmVzIHBlYWsgZXh0cmVtZXMgKi8KKyNkZWZpbmUgUEVGRV9GSUxURVJBTU9VTlQJMHgwODAwMDAxYQorI2RlZmluZSBGTU1PRAkJCTB4MWIJCS8qIFZpYnJhdG8vZmlsdGVyIG1vZHVsYXRpb24gZnJvbSBMRk8gcmVnaXN0ZXIJCSovCisjZGVmaW5lIEZNTU9EX01PRFZJQlJBVE8JMHgwMDAwZmYwMAkvKiBWaWJyYXRvIExGTyBtb2R1bGF0aW9uIGRlcHRoCQkJCSovCisJCQkJCQkvKiBTaWduZWQgMidzIGNvbXBsZW1lbnQsICsvLSBvbmUgb2N0YXZlIGV4dHJlbWVzCSovCisjZGVmaW5lIEZNTU9EX01PRklMVEVSCQkweDAwMDAwMGZmCS8qIEZpbHRlciBMRk8gbW9kdWxhdGlvbiBkZXB0aAkJCQkqLworCQkJCQkJLyogU2lnbmVkIDIncyBjb21wbGVtZW50LCArLy0gdGhyZWUgb2N0YXZlIGV4dHJlbWVzCSovCisKKworI2RlZmluZSBUUkVNRlJRIAkJMHgxYwkJLyogVHJlbW9sbyBhbW91bnQgYW5kIG1vZHVsYXRpb24gTEZPIGZyZXF1ZW5jeSByZWdpc3RlcgkqLworI2RlZmluZSBUUkVNRlJRX0RFUFRICQkweDAwMDBmZjAwCS8qIFRyZW1vbG8gZGVwdGgJCQkJCSovCisJCQkJCQkvKiBTaWduZWQgMidzIGNvbXBsZW1lbnQsIHdpdGggKy8tIDEyZEIgZXh0cmVtZXMJKi8KKworI2RlZmluZSBUUkVNRlJRX0ZSRVFVRU5DWQkweDAwMDAwMGZmCS8qIFRyZW1vbG8gTEZPIGZyZXF1ZW5jeQkJCQkqLworCQkJCQkJLyogPz9IeiBzdGVwcywgbWF4aW11bSBvZiA/PyBIei4JCQkqLworI2RlZmluZSBGTTJGUlEyIAkJMHgxZAkJLyogVmlicmF0byBhbW91bnQgYW5kIHZpYnJhdG8gTEZPIGZyZXF1ZW5jeSByZWdpc3RlcgkqLworI2RlZmluZSBGTTJGUlEyX0RFUFRICQkweDAwMDBmZjAwCS8qIFZpYnJhdG8gTEZPIHZpYnJhdG8gZGVwdGgJCQkJKi8KKwkJCQkJCS8qIFNpZ25lZCAyJ3MgY29tcGxlbWVudCwgKy8tIG9uZSBvY3RhdmUgZXh0cmVtZXMJKi8KKyNkZWZpbmUgRk0yRlJRMl9GUkVRVUVOQ1kJMHgwMDAwMDBmZgkvKiBWaWJyYXRvIExGTyBmcmVxdWVuY3kJCQkJKi8KKwkJCQkJCS8qIDAuMDM5SHogc3RlcHMsIG1heGltdW0gb2YgOS44NSBIei4JCQkqLworCisjZGVmaW5lIFRFTVBFTlYgCQkweDFlCQkvKiBUZW1wb3J5IGVudmVsb3BlIHJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIFRFTVBFTlZfTUFTSwkJMHgwMDAwZmZmZgkvKiAxNi1iaXQgdmFsdWUJCQkJCQkqLworCQkJCQkJLyogTk9URTogQWxsIGNoYW5uZWxzIGNvbnRhaW4gaW50ZXJuYWwgdmFyaWFibGVzOyBkbwkqLworCQkJCQkJLyogbm90IHdyaXRlIHRvIHRoZXNlIGxvY2F0aW9ucy4JCQkqLworCisvKiAxZiBzb21ldGhpbmcgKi8KKworI2RlZmluZSBDRDAJCQkweDIwCQkvKiBDYWNoZSBkYXRhIDAgcmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgQ0QxCQkJMHgyMQkJLyogQ2FjaGUgZGF0YSAxIHJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIENEMgkJCTB4MjIJCS8qIENhY2hlIGRhdGEgMiByZWdpc3RlcgkJCQkqLworI2RlZmluZSBDRDMJCQkweDIzCQkvKiBDYWNoZSBkYXRhIDMgcmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgQ0Q0CQkJMHgyNAkJLyogQ2FjaGUgZGF0YSA0IHJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIENENQkJCTB4MjUJCS8qIENhY2hlIGRhdGEgNSByZWdpc3RlcgkJCQkqLworI2RlZmluZSBDRDYJCQkweDI2CQkvKiBDYWNoZSBkYXRhIDYgcmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgQ0Q3CQkJMHgyNwkJLyogQ2FjaGUgZGF0YSA3IHJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIENEOAkJCTB4MjgJCS8qIENhY2hlIGRhdGEgOCByZWdpc3RlcgkJCQkqLworI2RlZmluZSBDRDkJCQkweDI5CQkvKiBDYWNoZSBkYXRhIDkgcmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgQ0RBCQkJMHgyYQkJLyogQ2FjaGUgZGF0YSBBIHJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIENEQgkJCTB4MmIJCS8qIENhY2hlIGRhdGEgQiByZWdpc3RlcgkJCQkqLworI2RlZmluZSBDREMJCQkweDJjCQkvKiBDYWNoZSBkYXRhIEMgcmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgQ0RECQkJMHgyZAkJLyogQ2FjaGUgZGF0YSBEIHJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIENERQkJCTB4MmUJCS8qIENhY2hlIGRhdGEgRSByZWdpc3RlcgkJCQkqLworI2RlZmluZSBDREYJCQkweDJmCQkvKiBDYWNoZSBkYXRhIEYgcmVnaXN0ZXIJCQkJKi8KKworLyogMHgzMC0zZiBzZWVtIHRvIGJlIHRoZSBzYW1lIGFzIDB4MjAtMmYgKi8KKworI2RlZmluZSBQVEIJCQkweDQwCQkvKiBQYWdlIHRhYmxlIGJhc2UgcmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgUFRCX01BU0sJCTB4ZmZmZmYwMDAJLyogUGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgcGFnZSB0YWJsZSBpbiBob3N0IG1lbW9yeQkqLworCisjZGVmaW5lIFRDQgkJCTB4NDEJCS8qIFRhbmsgY2FjaGUgYmFzZSByZWdpc3RlciAgICAJCQkJKi8KKyNkZWZpbmUgVENCX01BU0sJCTB4ZmZmZmYwMDAJLyogUGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgYm90dG9tIG9mIGhvc3QgYmFzZWQgVFJBTQkqLworCisjZGVmaW5lIEFEQ0NSCQkJMHg0MgkJLyogQURDIHNhbXBsZSByYXRlL3N0ZXJlbyBjb250cm9sIHJlZ2lzdGVyCQkqLworI2RlZmluZSBBRENDUl9SQ0hBTkVOQUJMRQkweDAwMDAwMDEwCS8qIEVuYWJsZXMgcmlnaHQgY2hhbm5lbCBmb3Igd3JpdGluZyB0byB0aGUgaG9zdCAgICAgICAJKi8KKyNkZWZpbmUgQURDQ1JfTENIQU5FTkFCTEUJMHgwMDAwMDAwOAkvKiBFbmFibGVzIGxlZnQgY2hhbm5lbCBmb3Igd3JpdGluZyB0byB0aGUgaG9zdAkJKi8KKwkJCQkJCS8qIE5PVEU6IFRvIGd1YXJhbnRlZSBwaGFzZSBjb2hlcmVuY3ksIGJvdGggY2hhbm5lbHMJKi8KKwkJCQkJCS8qIG11c3QgYmUgZGlzYWJsZWQgcHJpb3IgdG8gZW5hYmxpbmcgYm90aCBjaGFubmVscy4JKi8KKyNkZWZpbmUgQV9BRENDUl9SQ0hBTkVOQUJMRQkweDAwMDAwMDIwCisjZGVmaW5lIEFfQURDQ1JfTENIQU5FTkFCTEUJMHgwMDAwMDAxMAorCisjZGVmaW5lIEFfQURDQ1JfU0FNUExFUkFURV9NQVNLIDB4MDAwMDAwMEYgICAgICAvKiBBdWRpZ3kgc2FtcGxlIHJhdGUgY29udmVydG9yIG91dHB1dCByYXRlCQkqLworI2RlZmluZSBBRENDUl9TQU1QTEVSQVRFX01BU0sJMHgwMDAwMDAwNwkvKiBTYW1wbGUgcmF0ZSBjb252ZXJ0b3Igb3V0cHV0IHJhdGUJCQkqLworI2RlZmluZSBBRENDUl9TQU1QTEVSQVRFXzQ4CTB4MDAwMDAwMDAJLyogNDhrSHogc2FtcGxlIHJhdGUJCQkJCSovCisjZGVmaW5lIEFEQ0NSX1NBTVBMRVJBVEVfNDQJMHgwMDAwMDAwMQkvKiA0NC4xa0h6IHNhbXBsZSByYXRlCQkJCQkqLworI2RlZmluZSBBRENDUl9TQU1QTEVSQVRFXzMyCTB4MDAwMDAwMDIJLyogMzJrSHogc2FtcGxlIHJhdGUJCQkJCSovCisjZGVmaW5lIEFEQ0NSX1NBTVBMRVJBVEVfMjQJMHgwMDAwMDAwMwkvKiAyNGtIeiBzYW1wbGUgcmF0ZQkJCQkJKi8KKyNkZWZpbmUgQURDQ1JfU0FNUExFUkFURV8yMgkweDAwMDAwMDA0CS8qIDIyLjA1a0h6IHNhbXBsZSByYXRlCQkJCQkqLworI2RlZmluZSBBRENDUl9TQU1QTEVSQVRFXzE2CTB4MDAwMDAwMDUJLyogMTZrSHogc2FtcGxlIHJhdGUJCQkJCSovCisjZGVmaW5lIEFEQ0NSX1NBTVBMRVJBVEVfMTEJMHgwMDAwMDAwNgkvKiAxMS4wMjVrSHogc2FtcGxlIHJhdGUJCQkJKi8KKyNkZWZpbmUgQURDQ1JfU0FNUExFUkFURV84CTB4MDAwMDAwMDcJLyogOGtIeiBzYW1wbGUgcmF0ZQkJCQkJKi8KKyNkZWZpbmUgQV9BRENDUl9TQU1QTEVSQVRFXzEyCTB4MDAwMDAwMDYJLyogMTJrSHogc2FtcGxlIHJhdGUJCQkJCSovCisjZGVmaW5lIEFfQURDQ1JfU0FNUExFUkFURV8xMQkweDAwMDAwMDA3CS8qIDExLjAyNWtIeiBzYW1wbGUgcmF0ZQkJCQkqLworI2RlZmluZSBBX0FEQ0NSX1NBTVBMRVJBVEVfOAkweDAwMDAwMDA4CS8qIDhrSHogc2FtcGxlIHJhdGUJCQkJCSovCisKKyNkZWZpbmUgRlhXQwkJCTB4NDMJCS8qIEZYIG91dHB1dCB3cml0ZSBjaGFubmVscyByZWdpc3RlcgkJCSovCisJCQkJCQkvKiBXaGVuIHNldCwgZWFjaCBiaXQgZW5hYmxlcyB0aGUgd3JpdGluZyBvZiB0aGUJKi8KKwkJCQkJCS8qIGNvcnJlc3BvbmRpbmcgRlggb3V0cHV0IGNoYW5uZWwgKGludGVybmFsIHJlZ2lzdGVycyAgKi8KKwkJCQkJCS8qIDB4MjAtMHgzZikgdG8gaG9zdCBtZW1vcnkuICBUaGlzIG1vZGUgb2YgcmVjb3JkaW5nICAgKi8KKwkJCQkJCS8qIGlzIDE2Yml0LCA0OEtIeiBvbmx5LiBBbGwgMzIgY2hhbm5lbHMgY2FuIGJlIGVuYWJsZWQgKi8KKwkJCQkJCS8qIHNpbXVsdGFuZW91c2x5LgkJCQkJKi8KKworI2RlZmluZSBGWFdDX0RFRkFVTFRST1VURV9DICAgICAoMTw8MCkJCS8qIGxlZnQgZW11IG91dD8gKi8KKyNkZWZpbmUgRlhXQ19ERUZBVUxUUk9VVEVfQiAgICAgKDE8PDEpCQkvKiByaWdodCBlbXUgb3V0PyAqLworI2RlZmluZSBGWFdDX0RFRkFVTFRST1VURV9BICAgICAoMTw8MTIpCisjZGVmaW5lIEZYV0NfREVGQVVMVFJPVVRFX0QgICAgICgxPDwxMykKKyNkZWZpbmUgRlhXQ19BRENMRUZUICAgICAgICAgICAgKDE8PDE4KQorI2RlZmluZSBGWFdDX0NEUk9NU1BESUZMRUZUICAgICAoMTw8MTgpCisjZGVmaW5lIEZYV0NfQURDUklHSFQgICAgICAgICAgICgxPDwxOSkKKyNkZWZpbmUgRlhXQ19DRFJPTVNQRElGUklHSFQgICAgKDE8PDE5KQorI2RlZmluZSBGWFdDX01JQyAgICAgICAgICAgICAgICAoMTw8MjApCisjZGVmaW5lIEZYV0NfWk9PTUxFRlQgICAgICAgICAgICgxPDwyMCkKKyNkZWZpbmUgRlhXQ19aT09NUklHSFQgICAgICAgICAgKDE8PDIxKQorI2RlZmluZSBGWFdDX1NQRElGTEVGVCAgICAgICAgICAoMTw8MjIpCQkvKiAweDAwNDAwMDAwICovCisjZGVmaW5lIEZYV0NfU1BESUZSSUdIVCAgICAgICAgICgxPDwyMykJCS8qIDB4MDA4MDAwMDAgKi8KKworI2RlZmluZSBUQ0JTCQkJMHg0NAkJLyogVGFuayBjYWNoZSBidWZmZXIgc2l6ZSByZWdpc3RlcgkJCSovCisjZGVmaW5lIFRDQlNfTUFTSwkJMHgwMDAwMDAwNwkvKiBUYW5rIGNhY2hlIGJ1ZmZlciBzaXplIGZpZWxkCQkJCSovCisjZGVmaW5lIFRDQlNfQlVGRlNJWkVfMTZLCTB4MDAwMDAwMDAKKyNkZWZpbmUgVENCU19CVUZGU0laRV8zMksJMHgwMDAwMDAwMQorI2RlZmluZSBUQ0JTX0JVRkZTSVpFXzY0SwkweDAwMDAwMDAyCisjZGVmaW5lIFRDQlNfQlVGRlNJWkVfMTI4SwkweDAwMDAwMDAzCisjZGVmaW5lIFRDQlNfQlVGRlNJWkVfMjU2SwkweDAwMDAwMDA0CisjZGVmaW5lIFRDQlNfQlVGRlNJWkVfNTEySwkweDAwMDAwMDA1CisjZGVmaW5lIFRDQlNfQlVGRlNJWkVfMTAyNEsJMHgwMDAwMDAwNgorI2RlZmluZSBUQ0JTX0JVRkZTSVpFXzIwNDhLCTB4MDAwMDAwMDcKKworI2RlZmluZSBNSUNCQQkJCTB4NDUJCS8qIEFDOTcgbWljcm9waG9uZSBidWZmZXIgYWRkcmVzcyByZWdpc3RlcgkJKi8KKyNkZWZpbmUgTUlDQkFfTUFTSwkJMHhmZmZmZjAwMAkvKiAyMCBiaXQgYmFzZSBhZGRyZXNzCQkJCQkqLworCisjZGVmaW5lIEFEQ0JBCQkJMHg0NgkJLyogQURDIGJ1ZmZlciBhZGRyZXNzIHJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIEFEQ0JBX01BU0sJCTB4ZmZmZmYwMDAJLyogMjAgYml0IGJhc2UgYWRkcmVzcwkJCQkJKi8KKworI2RlZmluZSBGWEJBCQkJMHg0NwkJLyogRlggQnVmZmVyIEFkZHJlc3MgKi8KKyNkZWZpbmUgRlhCQV9NQVNLCQkweGZmZmZmMDAwCS8qIDIwIGJpdCBiYXNlIGFkZHJlc3MJCQkJCSovCisKKy8qIDB4NDggc29tZXRoaW5nIC0gd29yZCBhY2Nlc3MsIGRlZmF1bHRzIHRvIDNmICovCisKKyNkZWZpbmUgTUlDQlMJCQkweDQ5CQkvKiBNaWNyb3Bob25lIGJ1ZmZlciBzaXplIHJlZ2lzdGVyCQkJKi8KKworI2RlZmluZSBBRENCUwkJCTB4NGEJCS8qIEFEQyBidWZmZXIgc2l6ZSByZWdpc3RlcgkJCQkqLworCisjZGVmaW5lIEZYQlMJCQkweDRiCQkvKiBGWCBidWZmZXIgc2l6ZSByZWdpc3RlcgkJCQkqLworCisvKiByZWdpc3RlcjogMHg0Yy4uNGY6IGZmZmYtZmZmZiBjdXJyZW50IGFtb3VudHMsIHBlci1jaGFubmVsICovCisKKy8qIFRoZSBmb2xsb3dpbmcgbWFzayB2YWx1ZXMgZGVmaW5lIHRoZSBzaXplIG9mIHRoZSBBREMsIE1JWCBhbmQgRlggYnVmZmVycyBpbiBieXRlcyAqLworI2RlZmluZSBBRENCU19CVUZTSVpFX05PTkUJMHgwMDAwMDAwMAorI2RlZmluZSBBRENCU19CVUZTSVpFXzM4NAkweDAwMDAwMDAxCisjZGVmaW5lIEFEQ0JTX0JVRlNJWkVfNDQ4CTB4MDAwMDAwMDIKKyNkZWZpbmUgQURDQlNfQlVGU0laRV81MTIJMHgwMDAwMDAwMworI2RlZmluZSBBRENCU19CVUZTSVpFXzY0MAkweDAwMDAwMDA0CisjZGVmaW5lIEFEQ0JTX0JVRlNJWkVfNzY4CTB4MDAwMDAwMDUKKyNkZWZpbmUgQURDQlNfQlVGU0laRV84OTYJMHgwMDAwMDAwNgorI2RlZmluZSBBRENCU19CVUZTSVpFXzEwMjQJMHgwMDAwMDAwNworI2RlZmluZSBBRENCU19CVUZTSVpFXzEyODAJMHgwMDAwMDAwOAorI2RlZmluZSBBRENCU19CVUZTSVpFXzE1MzYJMHgwMDAwMDAwOQorI2RlZmluZSBBRENCU19CVUZTSVpFXzE3OTIJMHgwMDAwMDAwYQorI2RlZmluZSBBRENCU19CVUZTSVpFXzIwNDgJMHgwMDAwMDAwYgorI2RlZmluZSBBRENCU19CVUZTSVpFXzI1NjAJMHgwMDAwMDAwYworI2RlZmluZSBBRENCU19CVUZTSVpFXzMwNzIJMHgwMDAwMDAwZAorI2RlZmluZSBBRENCU19CVUZTSVpFXzM1ODQJMHgwMDAwMDAwZQorI2RlZmluZSBBRENCU19CVUZTSVpFXzQwOTYJMHgwMDAwMDAwZgorI2RlZmluZSBBRENCU19CVUZTSVpFXzUxMjAJMHgwMDAwMDAxMAorI2RlZmluZSBBRENCU19CVUZTSVpFXzYxNDQJMHgwMDAwMDAxMQorI2RlZmluZSBBRENCU19CVUZTSVpFXzcxNjgJMHgwMDAwMDAxMgorI2RlZmluZSBBRENCU19CVUZTSVpFXzgxOTIJMHgwMDAwMDAxMworI2RlZmluZSBBRENCU19CVUZTSVpFXzEwMjQwCTB4MDAwMDAwMTQKKyNkZWZpbmUgQURDQlNfQlVGU0laRV8xMjI4OAkweDAwMDAwMDE1CisjZGVmaW5lIEFEQ0JTX0JVRlNJWkVfMTQzNjYJMHgwMDAwMDAxNgorI2RlZmluZSBBRENCU19CVUZTSVpFXzE2Mzg0CTB4MDAwMDAwMTcKKyNkZWZpbmUgQURDQlNfQlVGU0laRV8yMDQ4MAkweDAwMDAwMDE4CisjZGVmaW5lIEFEQ0JTX0JVRlNJWkVfMjQ1NzYJMHgwMDAwMDAxOQorI2RlZmluZSBBRENCU19CVUZTSVpFXzI4NjcyCTB4MDAwMDAwMWEKKyNkZWZpbmUgQURDQlNfQlVGU0laRV8zMjc2OAkweDAwMDAwMDFiCisjZGVmaW5lIEFEQ0JTX0JVRlNJWkVfNDA5NjAJMHgwMDAwMDAxYworI2RlZmluZSBBRENCU19CVUZTSVpFXzQ5MTUyCTB4MDAwMDAwMWQKKyNkZWZpbmUgQURDQlNfQlVGU0laRV81NzM0NAkweDAwMDAwMDFlCisjZGVmaW5lIEFEQ0JTX0JVRlNJWkVfNjU1MzYJMHgwMDAwMDAxZgorCisKKyNkZWZpbmUgQ0RDUwkJCTB4NTAJCS8qIENELVJPTSBkaWdpdGFsIGNoYW5uZWwgc3RhdHVzIHJlZ2lzdGVyCSovCisKKyNkZWZpbmUgR1BTQ1MJCQkweDUxCQkvKiBHZW5lcmFsIFB1cnBvc2UgU1BESUYgY2hhbm5lbCBzdGF0dXMgcmVnaXN0ZXIqLworCisjZGVmaW5lIERCRwkJCTB4NTIJCS8qIERPIE5PVCBQUk9HUkFNIFRISVMgUkVHSVNURVIhISEgTUFZIERFU1RST1kgQ0hJUCAqLworCisjZGVmaW5lIFJFRzUzCQkJMHg1MwkJLyogRE8gTk9UIFBST0dSQU0gVEhJUyBSRUdJU1RFUiEhISBNQVkgREVTVFJPWSBDSElQICovCisKKyNkZWZpbmUgQV9EQkcJCQkgMHg1MworI2RlZmluZSBBX0RCR19TSU5HTEVfU1RFUAkgMHgwMDAyMDAwMAkvKiBTZXQgdG8gemVybyB0byBzdGFydCBkc3AgKi8KKyNkZWZpbmUgQV9EQkdfWkMJCSAweDQwMDAwMDAwCS8qIHplcm8gdHJhbSBjb3VudGVyICovCisjZGVmaW5lIEFfREJHX1NURVBfQUREUgkJIDB4MDAwMDAzZmYKKyNkZWZpbmUgQV9EQkdfU0FUVVJBVElPTl9PQ0NVUkVEIDB4MjAwMDAwMDAKKyNkZWZpbmUgQV9EQkdfU0FUVVJBVElPTl9BRERSCSAweDBmZmMwMDAwCisKKy8vIE5PVEU6IDB4NTQsNTUsNTY6IDY0LWJpdAorI2RlZmluZSBTUENTMAkJCTB4NTQJCS8qIFNQRElGIG91dHB1dCBDaGFubmVsIFN0YXR1cyAwIHJlZ2lzdGVyCSovCisKKyNkZWZpbmUgU1BDUzEJCQkweDU1CQkvKiBTUERJRiBvdXRwdXQgQ2hhbm5lbCBTdGF0dXMgMSByZWdpc3RlcgkqLworCisjZGVmaW5lIFNQQ1MyCQkJMHg1NgkJLyogU1BESUYgb3V0cHV0IENoYW5uZWwgU3RhdHVzIDIgcmVnaXN0ZXIJKi8KKworI2RlZmluZSBTUENTX0NMS0FDQ1lNQVNLCTB4MzAwMDAwMDAJLyogQ2xvY2sgYWNjdXJhY3kJCQkJKi8KKyNkZWZpbmUgU1BDU19DTEtBQ0NZXzEwMDBQUE0JMHgwMDAwMDAwMAkvKiAxMDAwIHBhcnRzIHBlciBtaWxsaW9uCQkJKi8KKyNkZWZpbmUgU1BDU19DTEtBQ0NZXzUwUFBNCTB4MTAwMDAwMDAJLyogNTAgcGFydHMgcGVyIG1pbGxpb24JCQkJKi8KKyNkZWZpbmUgU1BDU19DTEtBQ0NZX1ZBUklBQkxFCTB4MjAwMDAwMDAJLyogVmFyaWFibGUgYWNjdXJhY3kJCQkJKi8KKyNkZWZpbmUgU1BDU19TQU1QTEVSQVRFTUFTSwkweDBmMDAwMDAwCS8qIFNhbXBsZSByYXRlCQkJCQkqLworI2RlZmluZSBTUENTX1NBTVBMRVJBVEVfNDQJMHgwMDAwMDAwMAkvKiA0NC4xa0h6IHNhbXBsZSByYXRlCQkJCSovCisjZGVmaW5lIFNQQ1NfU0FNUExFUkFURV80OAkweDAyMDAwMDAwCS8qIDQ4a0h6IHNhbXBsZSByYXRlCQkJCSovCisjZGVmaW5lIFNQQ1NfU0FNUExFUkFURV8zMgkweDAzMDAwMDAwCS8qIDMya0h6IHNhbXBsZSByYXRlCQkJCSovCisjZGVmaW5lIFNQQ1NfQ0hBTk5FTE5VTU1BU0sJMHgwMGYwMDAwMAkvKiBDaGFubmVsIG51bWJlcgkJCQkqLworI2RlZmluZSBTUENTX0NIQU5ORUxOVU1fVU5TUEVDCTB4MDAwMDAwMDAJLyogVW5zcGVjaWZpZWQgY2hhbm5lbCBudW1iZXIJCQkqLworI2RlZmluZSBTUENTX0NIQU5ORUxOVU1fTEVGVAkweDAwMTAwMDAwCS8qIExlZnQgY2hhbm5lbAkJCQkJKi8KKyNkZWZpbmUgU1BDU19DSEFOTkVMTlVNX1JJR0hUCTB4MDAyMDAwMDAJLyogUmlnaHQgY2hhbm5lbAkJCQkqLworI2RlZmluZSBTUENTX1NPVVJDRU5VTU1BU0sJMHgwMDBmMDAwMAkvKiBTb3VyY2UgbnVtYmVyCQkJCSovCisjZGVmaW5lIFNQQ1NfU09VUkNFTlVNX1VOU1BFQwkweDAwMDAwMDAwCS8qIFVuc3BlY2lmaWVkIHNvdXJjZSBudW1iZXIJCQkqLworI2RlZmluZSBTUENTX0dFTkVSQVRJT05TVEFUVVMJMHgwMDAwODAwMAkvKiBPcmlnaW5hbGl0eSBmbGFnIChzZWUgSUVDLTk1OCBzcGVjKQkJKi8KKyNkZWZpbmUgU1BDU19DQVRFR09SWUNPREVNQVNLCTB4MDAwMDdmMDAJLyogQ2F0ZWdvcnkgY29kZSAoc2VlIElFQy05NTggc3BlYykJCSovCisjZGVmaW5lIFNQQ1NfTU9ERU1BU0sJCTB4MDAwMDAwYzAJLyogTW9kZSAoc2VlIElFQy05NTggc3BlYykJCQkqLworI2RlZmluZSBTUENTX0VNUEhBU0lTTUFTSwkweDAwMDAwMDM4CS8qIEVtcGhhc2lzCQkJCQkqLworI2RlZmluZSBTUENTX0VNUEhBU0lTX05PTkUJMHgwMDAwMDAwMAkvKiBObyBlbXBoYXNpcwkJCQkJKi8KKyNkZWZpbmUgU1BDU19FTVBIQVNJU181MF8xNQkweDAwMDAwMDA4CS8qIDUwLzE1IHVzZWMgMiBjaGFubmVsCQkJCSovCisjZGVmaW5lIFNQQ1NfQ09QWVJJR0hUCQkweDAwMDAwMDA0CS8qIENvcHlyaWdodCBhc3NlcnRlZCBmbGFnIC0tIGRvIG5vdCBtb2RpZnkJKi8KKyNkZWZpbmUgU1BDU19OT1RBVURJT0RBVEEJMHgwMDAwMDAwMgkvKiAwID0gRGlnaXRhbCBhdWRpbywgMSA9IG5vdCBhdWRpbwkJKi8KKyNkZWZpbmUgU1BDU19QUk9GRVNTSU9OQUwJMHgwMDAwMDAwMQkvKiAwID0gQ29uc3VtZXIgKElFQy05NTgpLCAxID0gcHJvIChBRVMzLTE5OTIpCSovCisKKy8qIFRoZSAzMi1iaXQgQ0xJeCBhbmQgU09MeCByZWdpc3RlcnMgYWxsIGhhdmUgb25lIGJpdCBwZXIgY2hhbm5lbCBjb250cm9sL3N0YXR1cyAgICAgIAkJKi8KKyNkZWZpbmUgQ0xJRUwJCQkweDU4CQkvKiBDaGFubmVsIGxvb3AgaW50ZXJydXB0IGVuYWJsZSBsb3cgcmVnaXN0ZXIJKi8KKworI2RlZmluZSBDTElFSAkJCTB4NTkJCS8qIENoYW5uZWwgbG9vcCBpbnRlcnJ1cHQgZW5hYmxlIGhpZ2ggcmVnaXN0ZXIJKi8KKworI2RlZmluZSBDTElQTAkJCTB4NWEJCS8qIENoYW5uZWwgbG9vcCBpbnRlcnJ1cHQgcGVuZGluZyBsb3cgcmVnaXN0ZXIJKi8KKworI2RlZmluZSBDTElQSAkJCTB4NWIJCS8qIENoYW5uZWwgbG9vcCBpbnRlcnJ1cHQgcGVuZGluZyBoaWdoIHJlZ2lzdGVyCSovCisKKyNkZWZpbmUgU09MRUwJCQkweDVjCQkvKiBTdG9wIG9uIGxvb3AgZW5hYmxlIGxvdyByZWdpc3RlcgkJKi8KKworI2RlZmluZSBTT0xFSAkJCTB4NWQJCS8qIFN0b3Agb24gbG9vcCBlbmFibGUgaGlnaCByZWdpc3RlcgkJKi8KKworI2RlZmluZSBTUEJZUEFTUwkJMHg1ZQkJLyogU1BESUYgQllQQVNTIG1vZGUgcmVnaXN0ZXIJCQkqLworI2RlZmluZSBTUEJZUEFTU19TUERJRjBfTUFTSwkweDAwMDAwMDAzCS8qIFNQRElGIDAgYnlwYXNzIG1vZGUJCQkJKi8KKyNkZWZpbmUgU1BCWVBBU1NfU1BESUYxX01BU0sJMHgwMDAwMDAwYwkvKiBTUERJRiAxIGJ5cGFzcyBtb2RlCQkJCSovCisvKiBieXBhc3MgbW9kZTogMCAtIERTUDsgMSAtIFNQRElGIEEsIDIgLSBTUERJRiBCLCAzIC0gU1BESUYgQwkJCQkJKi8KKyNkZWZpbmUgU1BCWVBBU1NfRk9STUFUCQkweDAwMDAwZjAwICAgICAgLyogSWYgMSwgU1BESUYgWFggdXNlcyAyNCBiaXQsIGlmIDAgLSAyMCBiaXQJKi8KKworI2RlZmluZSBBQzk3U0xPVAkJMHg1ZiAgICAgICAgICAgIC8qIGFkZGl0aW9uYWwgQUM5NyBzbG90cyBlbmFibGUgYml0cwkJKi8KKyNkZWZpbmUgQUM5N1NMT1RfUkVBUl9SSUdIVAkweDAxCQkvKiBSZWFyIGxlZnQgKi8KKyNkZWZpbmUgQUM5N1NMT1RfUkVBUl9MRUZUCTB4MDIJCS8qIFJlYXIgcmlnaHQgKi8KKyNkZWZpbmUgQUM5N1NMT1RfQ05UUgkJMHgxMCAgICAgICAgICAgIC8qIENlbnRlciBlbmFibGUgKi8KKyNkZWZpbmUgQUM5N1NMT1RfTEZFCQkweDIwICAgICAgICAgICAgLyogTEZFIGVuYWJsZSAqLworCisvLyBOT1RFOiAweDYwLDYxLDYyOiA2NC1iaXQKKyNkZWZpbmUgQ0RTUkNTCQkJMHg2MAkJLyogQ0QtUk9NIFNhbXBsZSBSYXRlIENvbnZlcnRlciBzdGF0dXMgcmVnaXN0ZXIJKi8KKworI2RlZmluZSBHUFNSQ1MJCQkweDYxCQkvKiBHZW5lcmFsIFB1cnBvc2UgU1BESUYgc2FtcGxlIHJhdGUgY3Z0IHN0YXR1cyAqLworCisjZGVmaW5lIFpWU1JDUwkJCTB4NjIJCS8qIFpWaWRlbyBzYW1wbGUgcmF0ZSBjb252ZXJ0ZXIgc3RhdHVzCQkqLworCQkJCQkJLyogTk9URTogVGhpcyBvbmUgaGFzIG5vIFNQRElGTE9DS0VEIGZpZWxkCSovCisJCQkJCQkvKiBBc3N1bWVzIHNhbXBsZSBsb2NrCQkJCSovCisKKy8qIFRoZXNlIHRocmVlIGJpdGZpZWxkcyBhcHBseSB0byBDRFNSQ1MsIEdQU1JDUywgYW5kIChleGNlcHQgYXMgbm90ZWQpIFpWU1JDUy4JCQkqLworI2RlZmluZSBTUkNTX1NQRElGTE9DS0VECTB4MDIwMDAwMDAJLyogU1BESUYgc3RyZWFtIGxvY2tlZAkJCQkqLworI2RlZmluZSBTUkNTX1JBVEVMT0NLRUQJCTB4MDEwMDAwMDAJLyogU2FtcGxlIHJhdGUgbG9ja2VkCQkJCSovCisjZGVmaW5lIFNSQ1NfRVNUU0FNUExFUkFURQkweDAwMDdmZmZmCS8qIERvIG5vdCBtb2RpZnkgdGhpcyBmaWVsZC4JCQkqLworCisvKiBOb3RlIHRoYXQgdGhlc2UgdmFsdWVzIGNhbiB2YXJ5ICsvLSBieSBhIHNtYWxsIGFtb3VudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTUkNTX1NQRElGUkFURV80NAkweDAwMDNhY2Q5CisjZGVmaW5lIFNSQ1NfU1BESUZSQVRFXzQ4CTB4MDAwNDAwMDAKKyNkZWZpbmUgU1JDU19TUERJRlJBVEVfOTYJMHgwMDA4MDAwMAorCisjZGVmaW5lIE1JQ0lEWCAgICAgICAgICAgICAgICAgIDB4NjMgICAgICAgICAgICAvKiBNaWNyb3Bob25lIHJlY29yZGluZyBidWZmZXIgaW5kZXggcmVnaXN0ZXIgICAqLworI2RlZmluZSBNSUNJRFhfTUFTSyAgICAgICAgICAgICAweDAwMDBmZmZmICAgICAgLyogMTYtYml0IHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTUlDSURYX0lEWAkJMHgxMDAwMDA2MworCisjZGVmaW5lIEFEQ0lEWAkJCTB4NjQJCS8qIEFEQyByZWNvcmRpbmcgYnVmZmVyIGluZGV4IHJlZ2lzdGVyCQkqLworI2RlZmluZSBBRENJRFhfTUFTSwkJMHgwMDAwZmZmZgkvKiAxNiBiaXQgaW5kZXggZmllbGQJCQkJKi8KKyNkZWZpbmUgQURDSURYX0lEWAkJMHgxMDAwMDA2NAorCisjZGVmaW5lIEFfQURDSURYCQkweDYzCisjZGVmaW5lIEFfQURDSURYX0lEWAkJMHgxMDAwMDA2MworCisjZGVmaW5lIEFfTUlDSURYCQkweDY0CisjZGVmaW5lIEFfTUlDSURYX0lEWAkJMHgxMDAwMDA2NAorCisjZGVmaW5lIEZYSURYCQkJMHg2NQkJLyogRlggcmVjb3JkaW5nIGJ1ZmZlciBpbmRleCByZWdpc3RlcgkJKi8KKyNkZWZpbmUgRlhJRFhfTUFTSwkJMHgwMDAwZmZmZgkvKiAxNi1iaXQgdmFsdWUJCQkJCSovCisjZGVmaW5lIEZYSURYX0lEWAkJMHgxMDAwMDA2NQorCisvKiBUaGUgMzItYml0IEhMSXggYW5kIEhMSVB4IHJlZ2lzdGVycyBhbGwgaGF2ZSBvbmUgYml0IHBlciBjaGFubmVsIGNvbnRyb2wvc3RhdHVzICAgICAgCQkqLworI2RlZmluZSBITElFTAkJCTB4NjYJCS8qIENoYW5uZWwgaGFsZiBsb29wIGludGVycnVwdCBlbmFibGUgbG93IHJlZ2lzdGVyCSovCisKKyNkZWZpbmUgSExJRUgJCQkweDY3CQkvKiBDaGFubmVsIGhhbGYgbG9vcCBpbnRlcnJ1cHQgZW5hYmxlIGhpZ2ggcmVnaXN0ZXIJKi8KKworI2RlZmluZSBITElQTAkJCTB4NjgJCS8qIENoYW5uZWwgaGFsZiBsb29wIGludGVycnVwdCBwZW5kaW5nIGxvdyByZWdpc3RlcgkqLworCisjZGVmaW5lIEhMSVBICQkJMHg2OQkJLyogQ2hhbm5lbCBoYWxmIGxvb3AgaW50ZXJydXB0IHBlbmRpbmcgaGlnaCByZWdpc3RlcgkqLworCisvLyAweDZhLDZiLDZjIHVzZWQgZm9yIHNvbWUgcmVjb3JkaW5nCisvLyAweDZkIHVudXNlZAorLy8gMHg2ZSw2ZiAtIHRhbmt0YWJsZSBiYXNlIC8gb2Zmc2V0CisKKy8qIFRoaXMgaXMgdGhlIE1QVSBwb3J0IG9uIHRoZSBjYXJkICh2aWEgdGhlIGdhbWUgcG9ydCkJCQkJCQkqLworI2RlZmluZSBBX01VREFUQTEJCTB4NzAKKyNkZWZpbmUgQV9NVUNNRDEJCTB4NzEKKyNkZWZpbmUgQV9NVVNUQVQxCQlBX01VQ01EMQorCisvKiBUaGlzIGlzIHRoZSBNUFUgcG9ydCBvbiB0aGUgQXVkaWd5IERyaXZlIAkJCQkJCQkqLworI2RlZmluZSBBX01VREFUQTIJCTB4NzIKKyNkZWZpbmUgQV9NVUNNRDIJCTB4NzMKKyNkZWZpbmUgQV9NVVNUQVQyCQlBX01VQ01EMgkKKworLyogVGhlIG5leHQgdHdvIGFyZSB0aGUgQXVkaWd5IGVxdWl2YWxlbnQgb2YgRlhXQwkJCQkJCSovCisvKiB0aGUgQXVkaWd5IGNhbiByZWNvcmQgYW55IG91dHB1dCAoMTZiaXQsIDQ4a0h6LCB1cCB0byA2NCBjaGFubmVsIHNpbXVsdGFuZW91c2x5KSAJCSovCisvKiBFYWNoIGJpdCBzZWxlY3RzIGEgY2hhbm5lbCBmb3IgcmVjb3JkaW5nICovCisjZGVmaW5lIEFfRlhXQzEJCQkweDc0ICAgICAgICAgICAgLyogU2VsZWN0cyAweDdmLTB4NjAgZm9yIEZYIHJlY29yZGluZyAgICAgICAgICAgKi8KKyNkZWZpbmUgQV9GWFdDMgkJCTB4NzUJCS8qIFNlbGVjdHMgMHg5Zi0weDgwIGZvciBGWCByZWNvcmRpbmcgICAgICAgICAgICovCisKKyNkZWZpbmUgQV9TUERJRl9TQU1QTEVSQVRFCTB4NzYJCS8qIFNldCB0aGUgc2FtcGxlIHJhdGUgb2YgU1BESUYgb3V0cHV0CQkqLworI2RlZmluZSBBX1NQRElGX1JBVEVfTUFTSwkweDAwMDAwMGMwCisjZGVmaW5lIEFfU1BESUZfNDgwMDAJCTB4MDAwMDAwMDAKKyNkZWZpbmUgQV9TUERJRl80NDEwMAkJMHgwMDAwMDA4MAorI2RlZmluZSBBX1NQRElGXzk2MDAwCQkweDAwMDAwMDQwCisKKy8qIDB4NzcsMHg3OCwweDc5ICJzb21ldGhpbmcgaTJzLXJlbGF0ZWQiIC0gZGVmYXVsdCB0byAweDAxMDgwMDAwIG9uIG15IGF1ZGlneSAyIFpTIC0tcmxyZXZlbGwJKi8KKy8qIDB4N2EsIDB4N2IgLSBsb29rdXAgdGFibGVzICovCisKKyNkZWZpbmUgQV9GWFJUMgkJCTB4N2MKKyNkZWZpbmUgQV9GWFJUX0NIQU5ORUxFCQkweDAwMDAwMDNmCS8qIEVmZmVjdHMgc2VuZCBidXMgbnVtYmVyIGZvciBjaGFubmVsJ3MgZWZmZWN0cyBzZW5kIEUJKi8KKyNkZWZpbmUgQV9GWFJUX0NIQU5ORUxGCQkweDAwMDAzZjAwCS8qIEVmZmVjdHMgc2VuZCBidXMgbnVtYmVyIGZvciBjaGFubmVsJ3MgZWZmZWN0cyBzZW5kIEYJKi8KKyNkZWZpbmUgQV9GWFJUX0NIQU5ORUxHCQkweDAwM2YwMDAwCS8qIEVmZmVjdHMgc2VuZCBidXMgbnVtYmVyIGZvciBjaGFubmVsJ3MgZWZmZWN0cyBzZW5kIEcJKi8KKyNkZWZpbmUgQV9GWFJUX0NIQU5ORUxICQkweDNmMDAwMDAwCS8qIEVmZmVjdHMgc2VuZCBidXMgbnVtYmVyIGZvciBjaGFubmVsJ3MgZWZmZWN0cyBzZW5kIEgJKi8KKworI2RlZmluZSBBX1NFTkRBTU9VTlRTCQkweDdkCisjZGVmaW5lIEFfRlhTRU5EQU1PVU5UX0VfTUFTSwkweEZGMDAwMDAwCisjZGVmaW5lIEFfRlhTRU5EQU1PVU5UX0ZfTUFTSwkweDAwRkYwMDAwCisjZGVmaW5lIEFfRlhTRU5EQU1PVU5UX0dfTUFTSwkweDAwMDBGRjAwCisjZGVmaW5lIEFfRlhTRU5EQU1PVU5UX0hfTUFTSwkweDAwMDAwMEZGCisvKiAweDdjLCAweDdlICJoaWdoIGJpdCBpcyB1c2VkIGZvciBmaWx0ZXJpbmciICovCisgCisvKiBUaGUgc2VuZCBhbW91bnRzIGZvciB0aGlzIG9uZSBhcmUgdGhlIHNhbWUgYXMgdXNlZCB3aXRoIHRoZSBlbXUxMGsxICovCisjZGVmaW5lIEFfRlhSVDEJCQkweDdlCisjZGVmaW5lIEFfRlhSVF9DSEFOTkVMQQkJMHgwMDAwMDAzZgorI2RlZmluZSBBX0ZYUlRfQ0hBTk5FTEIJCTB4MDAwMDNmMDAKKyNkZWZpbmUgQV9GWFJUX0NIQU5ORUxDCQkweDAwM2YwMDAwCisjZGVmaW5lIEFfRlhSVF9DSEFOTkVMRAkJMHgzZjAwMDAwMAorCisKKy8qIEVhY2ggRlggZ2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVyIGlzIDMyIGJpdHMgaW4gbGVuZ3RoLCBhbGwgYml0cyBhcmUgdXNlZAkJCSovCisjZGVmaW5lIEZYR1BSRUdCQVNFCQkweDEwMAkJLyogRlggZ2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVycyBiYXNlICAgICAgIAkqLworI2RlZmluZSBBX0ZYR1BSRUdCQVNFCQkweDQwMAkJLyogQXVkaWd5IEdQUnMsIDB4NDAwIHRvIDB4NWZmCQkJKi8KKworI2RlZmluZSBBX1RBTktNRU1DVExSRUdCQVNFCTB4MTAwCQkvKiBUYW5rIG1lbW9yeSBjb250cm9sIHJlZ2lzdGVycyBiYXNlIC0gb25seSBmb3IgQXVkaWd5ICovCisjZGVmaW5lIEFfVEFOS01FTUNUTFJFR19NQVNLCTB4MWYJCS8qIG9ubHkgNSBiaXRzIHVzZWQgLSBvbmx5IGZvciBBdWRpZ3kgKi8KKworLyogVGFuayBhdWRpbyBkYXRhIGlzIGxvZ2FyaXRobWljYWxseSBjb21wcmVzc2VkIGRvd24gdG8gMTYgYml0cyBiZWZvcmUgd3JpdGluZyB0byBUUkFNIGFuZCBpcwkqLworLyogZGVjb21wcmVzc2VkIGJhY2sgdG8gMjAgYml0cyBvbiBhIHJlYWQuICBUaGVyZSBhcmUgYSB0b3RhbCBvZiAxNjAgbG9jYXRpb25zLCB0aGUgbGFzdCAzMgkqLworLyogbG9jYXRpb25zIGFyZSBmb3IgZXh0ZXJuYWwgVFJBTS4gCQkJCQkJCQkqLworI2RlZmluZSBUQU5LTUVNREFUQVJFR0JBU0UJMHgyMDAJCS8qIFRhbmsgbWVtb3J5IGRhdGEgcmVnaXN0ZXJzIGJhc2UgICAgIAkJKi8KKyNkZWZpbmUgVEFOS01FTURBVEFSRUdfTUFTSwkweDAwMGZmZmZmCS8qIDIwIGJpdCB0YW5rIGF1ZGlvIGRhdGEgZmllbGQJCQkqLworCisvKiBDb21iaW5lZCBhZGRyZXNzIGZpZWxkIGFuZCBtZW1vcnkgb3Bjb2RlIG9yIGZsYWcgZmllbGQuICAxNjAgbG9jYXRpb25zLCBsYXN0IDMyIGFyZSBleHRlcm5hbAkqLworI2RlZmluZSBUQU5LTUVNQUREUlJFR0JBU0UJMHgzMDAJCS8qIFRhbmsgbWVtb3J5IGFkZHJlc3MgcmVnaXN0ZXJzIGJhc2UJCSovCisjZGVmaW5lIFRBTktNRU1BRERSUkVHX0FERFJfTUFTSyAweDAwMGZmZmZmCS8qIDIwIGJpdCB0YW5rIGFkZHJlc3MgZmllbGQJCQkqLworI2RlZmluZSBUQU5LTUVNQUREUlJFR19DTEVBUgkweDAwODAwMDAwCS8qIENsZWFyIHRhbmsgbWVtb3J5CQkJCSovCisjZGVmaW5lIFRBTktNRU1BRERSUkVHX0FMSUdOCTB4MDA0MDAwMDAJLyogQWxpZ24gcmVhZCBvciB3cml0ZSByZWxhdGl2ZSB0byB0YW5rIGFjY2VzcwkqLworI2RlZmluZSBUQU5LTUVNQUREUlJFR19XUklURQkweDAwMjAwMDAwCS8qIFdyaXRlIHRvIHRhbmsgbWVtb3J5CQkJCSovCisjZGVmaW5lIFRBTktNRU1BRERSUkVHX1JFQUQJMHgwMDEwMDAwMAkvKiBSZWFkIGZyb20gdGFuayBtZW1vcnkJCQkqLworCisjZGVmaW5lIE1JQ1JPQ09ERUJBU0UJCTB4NDAwCQkvKiBNaWNyb2NvZGUgZGF0YSBiYXNlIGFkZHJlc3MJCQkqLworCisvKiBFYWNoIERTUCBtaWNyb2NvZGUgaW5zdHJ1Y3Rpb24gaXMgbWFwcGVkIGludG8gMiBkb3VibGV3b3JkcyAJCQkJCSovCisvKiBOT1RFOiBXaGVuIHdyaXRpbmcsIGFsd2F5cyB3cml0ZSB0aGUgTE8gZG91Ymxld29yZCBmaXJzdC4gIFJlYWRzIGNhbiBiZSBpbiBlaXRoZXIgb3JkZXIuCSovCisjZGVmaW5lIExPV09SRF9PUFhfTUFTSwkJMHgwMDBmZmMwMAkvKiBJbnN0cnVjdGlvbiBvcGVyYW5kIFgJCQkqLworI2RlZmluZSBMT1dPUkRfT1BZX01BU0sJCTB4MDAwMDAzZmYJLyogSW5zdHJ1Y3Rpb24gb3BlcmFuZCBZCQkJKi8KKyNkZWZpbmUgSElXT1JEX09QQ09ERV9NQVNLCTB4MDBmMDAwMDAJLyogSW5zdHJ1Y3Rpb24gb3Bjb2RlCQkJCSovCisjZGVmaW5lIEhJV09SRF9SRVNVTFRfTUFTSwkweDAwMGZmYzAwCS8qIEluc3RydWN0aW9uIHJlc3VsdAkJCQkqLworI2RlZmluZSBISVdPUkRfT1BBX01BU0sJCTB4MDAwMDAzZmYJLyogSW5zdHJ1Y3Rpb24gb3BlcmFuZCBBCQkJKi8KKworCisvKiBBdWRpZ3kgU291bmRjYXJkIGhhdmUgYSBkaWZmZXJlbnQgaW5zdHJ1Y3Rpb24gZm9ybWF0ICovCisjZGVmaW5lIEFfTUlDUk9DT0RFQkFTRQkJMHg2MDAKKyNkZWZpbmUgQV9MT1dPUkRfT1BZX01BU0sJMHgwMDAwMDdmZgorI2RlZmluZSBBX0xPV09SRF9PUFhfTUFTSwkweDAwN2ZmMDAwCisjZGVmaW5lIEFfSElXT1JEX09QQ09ERV9NQVNLCTB4MGYwMDAwMDAKKyNkZWZpbmUgQV9ISVdPUkRfUkVTVUxUX01BU0sJMHgwMDdmZjAwMAorI2RlZmluZSBBX0hJV09SRF9PUEFfTUFTSwkweDAwMDAwN2ZmCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLSBTVFJVQ1RVUkVTIC0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3R5cGVkZWYgc3RydWN0IF9zbmRfZW11MTBrMSBlbXUxMGsxX3Q7Cit0eXBlZGVmIHN0cnVjdCBfc25kX2VtdTEwazFfdm9pY2UgZW11MTBrMV92b2ljZV90OwordHlwZWRlZiBzdHJ1Y3QgX3NuZF9lbXUxMGsxX3BjbSBlbXUxMGsxX3BjbV90OworCit0eXBlZGVmIGVudW0geworCUVNVTEwSzFfRUZYLAorCUVNVTEwSzFfUENNLAorCUVNVTEwSzFfU1lOVEgsCisJRU1VMTBLMV9NSURJCit9IGVtdTEwazFfdm9pY2VfdHlwZV90OworCitzdHJ1Y3QgX3NuZF9lbXUxMGsxX3ZvaWNlIHsKKwllbXUxMGsxX3QgKmVtdTsKKwlpbnQgbnVtYmVyOworCXVuc2lnbmVkIGludCB1c2U6IDEsCisJICAgIHBjbTogMSwKKwkgICAgZWZ4OiAxLAorCSAgICBzeW50aDogMSwKKwkgICAgbWlkaTogMTsKKwl2b2lkICgqaW50ZXJydXB0KShlbXUxMGsxX3QgKmVtdSwgZW11MTBrMV92b2ljZV90ICpwdm9pY2UpOworCisJZW11MTBrMV9wY21fdCAqZXBjbTsKK307CisKK3R5cGVkZWYgZW51bSB7CisJUExBWUJBQ0tfRU1VVk9JQ0UsCisJUExBWUJBQ0tfRUZYLAorCUNBUFRVUkVfQUM5N0FEQywKKwlDQVBUVVJFX0FDOTdNSUMsCisJQ0FQVFVSRV9FRlgKK30gc25kX2VtdTEwazFfcGNtX3R5cGVfdDsKKworc3RydWN0IF9zbmRfZW11MTBrMV9wY20geworCWVtdTEwazFfdCAqZW11OworCXNuZF9lbXUxMGsxX3BjbV90eXBlX3QgdHlwZTsKKwlzbmRfcGNtX3N1YnN0cmVhbV90ICpzdWJzdHJlYW07CisJZW11MTBrMV92b2ljZV90ICp2b2ljZXNbTlVNX0VGWF9QTEFZQkFDS107CisJZW11MTBrMV92b2ljZV90ICpleHRyYTsKKwl1bnNpZ25lZCBzaG9ydCBydW5uaW5nOworCXVuc2lnbmVkIHNob3J0IGZpcnN0X3B0cjsKKwlzbmRfdXRpbF9tZW1ibGtfdCAqbWVtYmxrOworCXVuc2lnbmVkIGludCBzdGFydF9hZGRyOworCXVuc2lnbmVkIGludCBjY2NhX3N0YXJ0X2FkZHI7CisJdW5zaWduZWQgaW50IGNhcHR1cmVfaXByOwkvKiBpbnRlcnJ1cHQgYWNrbm93bGVkZ2UgbWFzayAqLworCXVuc2lnbmVkIGludCBjYXB0dXJlX2ludGU7CS8qIGludGVycnVwdCBlbmFibGUgbWFzayAqLworCXVuc2lnbmVkIGludCBjYXB0dXJlX2JhX3JlZzsJLyogYnVmZmVyIGFkZHJlc3MgcmVnaXN0ZXIgKi8KKwl1bnNpZ25lZCBpbnQgY2FwdHVyZV9ic19yZWc7CS8qIGJ1ZmZlciBzaXplIHJlZ2lzdGVyICovCisJdW5zaWduZWQgaW50IGNhcHR1cmVfaWR4X3JlZzsJLyogYnVmZmVyIGluZGV4IHJlZ2lzdGVyICovCisJdW5zaWduZWQgaW50IGNhcHR1cmVfY3JfdmFsOwkvKiBjb250cm9sIHZhbHVlICovCisJdW5zaWduZWQgaW50IGNhcHR1cmVfY3JfdmFsMjsJLyogY29udHJvbCB2YWx1ZTIgKGZvciBhdWRpZ3kpICovCisJdW5zaWduZWQgaW50IGNhcHR1cmVfYnNfdmFsOwkvKiBidWZmZXIgc2l6ZSB2YWx1ZSAqLworCXVuc2lnbmVkIGludCBjYXB0dXJlX2J1ZnNpemU7CS8qIGJ1ZmZlciBzaXplIGluIGJ5dGVzICovCit9OworCit0eXBlZGVmIHN0cnVjdCB7CisJLyogbW9ubywgbGVmdCwgcmlnaHQgeCA4IHNlbmRzICg0IG9uIGVtdTEwazEpICovCisJdW5zaWduZWQgY2hhciBzZW5kX3JvdXRpbmdbM11bOF07CisJdW5zaWduZWQgY2hhciBzZW5kX3ZvbHVtZVszXVs4XTsKKwl1bnNpZ25lZCBzaG9ydCBhdHRuWzNdOworCWVtdTEwazFfcGNtX3QgKmVwY207Cit9IGVtdTEwazFfcGNtX21peGVyX3Q7CisKKyNkZWZpbmUgc25kX2VtdTEwazFfY29tcG9zZV9zZW5kX3JvdXRpbmcocm91dGUpIFwKKygocm91dGVbMF0gfCAocm91dGVbMV0gPDwgNCkgfCAocm91dGVbMl0gPDwgOCkgfCAocm91dGVbM10gPDwgMTIpKSA8PCAxNikKKworI2RlZmluZSBzbmRfZW11MTBrMV9jb21wb3NlX2F1ZGlneV9meHJ0MShyb3V0ZSkgXAorKCh1bnNpZ25lZCBpbnQpcm91dGVbMF0gfCAoKHVuc2lnbmVkIGludClyb3V0ZVsxXSA8PCA4KSB8ICgodW5zaWduZWQgaW50KXJvdXRlWzJdIDw8IDE2KSB8ICgodW5zaWduZWQgaW50KXJvdXRlWzNdIDw8IDI0KSkKKworI2RlZmluZSBzbmRfZW11MTBrMV9jb21wb3NlX2F1ZGlneV9meHJ0Mihyb3V0ZSkgXAorKCh1bnNpZ25lZCBpbnQpcm91dGVbNF0gfCAoKHVuc2lnbmVkIGludClyb3V0ZVs1XSA8PCA4KSB8ICgodW5zaWduZWQgaW50KXJvdXRlWzZdIDw8IDE2KSB8ICgodW5zaWduZWQgaW50KXJvdXRlWzddIDw8IDI0KSkKKwordHlwZWRlZiBzdHJ1Y3Qgc25kX2VtdTEwazFfbWVtYmxrIHsKKwlzbmRfdXRpbF9tZW1ibGtfdCBtZW07CisJLyogcHJpdmF0ZSBwYXJ0ICovCisJaW50IGZpcnN0X3BhZ2UsIGxhc3RfcGFnZSwgcGFnZXMsIG1hcHBlZF9wYWdlOworCXVuc2lnbmVkIGludCBtYXBfbG9ja2VkOworCXN0cnVjdCBsaXN0X2hlYWQgbWFwcGVkX2xpbms7CisJc3RydWN0IGxpc3RfaGVhZCBtYXBwZWRfb3JkZXJfbGluazsKK30gZW11MTBrMV9tZW1ibGtfdDsKKworI2RlZmluZSBzbmRfZW11MTBrMV9tZW1ibGtfb2Zmc2V0KGJsaykJKCgoYmxrKS0+bWFwcGVkX3BhZ2UgPDwgUEFHRV9TSElGVCkgfCAoKGJsayktPm1lbS5vZmZzZXQgJiAoUEFHRV9TSVpFIC0gMSkpKQorCisjZGVmaW5lIEVNVTEwSzFfTUFYX1RSQU1fQkxPQ0tTX1BFUl9DT0RFCTE2CisKK3R5cGVkZWYgc3RydWN0IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CQkvKiBsaXN0IGxpbmsgY29udGFpbmVyICovCisJdW5zaWduZWQgaW50IHZjb3VudDsKKwl1bnNpZ25lZCBpbnQgY291bnQ7CQkvKiBjb3VudCBvZiBHUFIgKDEuLjE2KSAqLworCXVuc2lnbmVkIHNob3J0IGdwclszMl07CQkvKiBHUFIgbnVtYmVyKHMpICovCisJdW5zaWduZWQgaW50IHZhbHVlWzMyXTsKKwl1bnNpZ25lZCBpbnQgbWluOwkJLyogbWluaW11bSByYW5nZSAqLworCXVuc2lnbmVkIGludCBtYXg7CQkvKiBtYXhpbXVtIHJhbmdlICovCisJdW5zaWduZWQgaW50IHRyYW5zbGF0aW9uOwkvKiB0cmFuc2xhdGlvbiB0eXBlIChFTVUxMEsxX0dQUl9UUkFOU0xBVElPTiopICovCisJc25kX2tjb250cm9sX3QgKmtjb250cm9sOworfSBzbmRfZW11MTBrMV9meDgwMTBfY3RsX3Q7CisKK3R5cGVkZWYgdm9pZCAoc25kX2Z4ODAxMF9pcnFfaGFuZGxlcl90KShlbXUxMGsxX3QgKmVtdSwgdm9pZCAqcHJpdmF0ZV9kYXRhKTsKKwordHlwZWRlZiBzdHJ1Y3QgX3NuZF9lbXUxMGsxX2Z4ODAxMF9pcnEgeworCXN0cnVjdCBfc25kX2VtdTEwazFfZng4MDEwX2lycSAqbmV4dDsKKwlzbmRfZng4MDEwX2lycV9oYW5kbGVyX3QgKmhhbmRsZXI7CisJdW5zaWduZWQgc2hvcnQgZ3ByX3J1bm5pbmc7CisJdm9pZCAqcHJpdmF0ZV9kYXRhOworfSBzbmRfZW11MTBrMV9meDgwMTBfaXJxX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQgdmFsaWQ6IDEsCisJCSAgICAgb3BlbmVkOiAxLAorCQkgICAgIGFjdGl2ZTogMTsKKwl1bnNpZ25lZCBpbnQgY2hhbm5lbHM7CQkvKiAxNi1iaXQgY2hhbm5lbHMgY291bnQgKi8KKwl1bnNpZ25lZCBpbnQgdHJhbV9zdGFydDsJLyogaW5pdGlhbCByaW5nIGJ1ZmZlciBwb3NpdGlvbiBpbiBUUkFNIChpbiBzYW1wbGVzKSAqLworCXVuc2lnbmVkIGludCBidWZmZXJfc2l6ZTsJLyogY291bnQgb2YgYnVmZmVyZWQgc2FtcGxlcyAqLworCXVuc2lnbmVkIHNob3J0IGdwcl9zaXplOwkJLyogR1BSIGNvbnRhaW5pbmcgc2l6ZSBvZiByaW5nIGJ1ZmZlciBpbiBzYW1wbGVzIChob3N0KSAqLworCXVuc2lnbmVkIHNob3J0IGdwcl9wdHI7CQkvKiBHUFIgY29udGFpbmluZyBjdXJyZW50IHBvaW50ZXIgaW4gdGhlIHJpbmcgYnVmZmVyIChob3N0ID0gcmVzZXQsIEZYODAxMCkgKi8KKwl1bnNpZ25lZCBzaG9ydCBncHJfY291bnQ7CS8qIEdQUiBjb250YWluaW5nIGNvdW50IG9mIHNhbXBsZXMgYmV0d2VlbiB0d28gaW50ZXJydXB0cyAoaG9zdCkgKi8KKwl1bnNpZ25lZCBzaG9ydCBncHJfdG1wY291bnQ7CS8qIEdQUiBjb250YWluaW5nIGN1cnJlbnQgY291bnQgb2Ygc2FtcGxlcyB0byBpbnRlcnJ1cHQgKGhvc3QgPSBzZXQsIEZYODAxMCkgKi8KKwl1bnNpZ25lZCBzaG9ydCBncHJfdHJpZ2dlcjsJLyogR1BSIGNvbnRhaW5pbmcgdHJpZ2dlciAoYWN0aXZhdGUpIGluZm9ybWF0aW9uIChob3N0KSAqLworCXVuc2lnbmVkIHNob3J0IGdwcl9ydW5uaW5nOwkvKiBHUFIgY29udGFpbmluZyBpbmZvIGlmIFBDTSBpcyBydW5uaW5nIChGWDgwMTApICovCisJdW5zaWduZWQgY2hhciBldHJhbVszMl07CS8qIGV4dGVybmFsIFRSQU0gYWRkcmVzcyAmIGRhdGEgKi8KKwlzbmRfcGNtX2luZGlyZWN0X3QgcGNtX3JlYzsKKwl1bnNpZ25lZCBpbnQgdHJhbV9wb3M7CisJdW5zaWduZWQgaW50IHRyYW1fc2hpZnQ7CisJc25kX2VtdTEwazFfZng4MDEwX2lycV90ICppcnE7Cit9IHNuZF9lbXUxMGsxX2Z4ODAxMF9wY21fdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIHNob3J0IGZ4YnVzX21hc2s7CS8qIHVzZWQgRlggYnVzZXMgKGJpdG1hc2spICovCisJdW5zaWduZWQgc2hvcnQgZXh0aW5fbWFzazsJLyogdXNlZCBleHRlcm5hbCBpbnB1dHMgKGJpdG1hc2spICovCisJdW5zaWduZWQgc2hvcnQgZXh0b3V0X21hc2s7CS8qIHVzZWQgZXh0ZXJuYWwgb3V0cHV0cyAoYml0bWFzaykgKi8KKwl1bnNpZ25lZCBzaG9ydCBwYWQxOworCXVuc2lnbmVkIGludCBpdHJhbV9zaXplOwkvKiBpbnRlcm5hbCBUUkFNIHNpemUgaW4gc2FtcGxlcyAqLworCXN0cnVjdCBzbmRfZG1hX2J1ZmZlciBldHJhbV9wYWdlczsgLyogZXh0ZXJuYWwgVFJBTSBwYWdlcyBhbmQgc2l6ZSAqLworCXVuc2lnbmVkIGludCBkYmc7CQkvKiBGWCBkZWJ1Z2dlciByZWdpc3RlciAqLworCXVuc2lnbmVkIGNoYXIgbmFtZVsxMjhdOworCWludCBncHJfc2l6ZTsJCQkvKiBzaXplIG9mIGFsbG9jYXRlZCBHUFIgY29udHJvbHMgKi8KKwlpbnQgZ3ByX2NvdW50OwkJCS8qIGNvdW50IG9mIHVzZWQga2NvbnRyb2xzICovCisJc3RydWN0IGxpc3RfaGVhZCBncHJfY3RsOwkvKiBHUFIgY29udHJvbHMgKi8KKwlzdHJ1Y3Qgc2VtYXBob3JlIGxvY2s7CisJc25kX2VtdTEwazFfZng4MDEwX3BjbV90IHBjbVs4XTsKKwlzcGlubG9ja190IGlycV9sb2NrOworCXNuZF9lbXUxMGsxX2Z4ODAxMF9pcnFfdCAqaXJxX2hhbmRsZXJzOworfSBzbmRfZW11MTBrMV9meDgwMTBfdDsKKworI2RlZmluZSBlbXUxMGsxX2dwcl9jdGwobikgbGlzdF9lbnRyeShuLCBzbmRfZW11MTBrMV9meDgwMTBfY3RsX3QsIGxpc3QpCisKK3R5cGVkZWYgc3RydWN0IHsKKwlzdHJ1Y3QgX3NuZF9lbXUxMGsxICplbXU7CisJc25kX3Jhd21pZGlfdCAqcm1pZGk7CisJc25kX3Jhd21pZGlfc3Vic3RyZWFtX3QgKnN1YnN0cmVhbV9pbnB1dDsKKwlzbmRfcmF3bWlkaV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtX291dHB1dDsKKwl1bnNpZ25lZCBpbnQgbWlkaV9tb2RlOworCXNwaW5sb2NrX3QgaW5wdXRfbG9jazsKKwlzcGlubG9ja190IG91dHB1dF9sb2NrOworCXNwaW5sb2NrX3Qgb3Blbl9sb2NrOworCWludCB0eF9lbmFibGUsIHJ4X2VuYWJsZTsKKwlpbnQgcG9ydDsKKwlpbnQgaXByX3R4LCBpcHJfcng7CisJdm9pZCAoKmludGVycnVwdCkoZW11MTBrMV90ICplbXUsIHVuc2lnbmVkIGludCBzdGF0dXMpOworfSBlbXUxMGsxX21pZGlfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXUzMiB2ZW5kb3I7CisJdTMyIGRldmljZTsKKwl1MzIgc3Vic3lzdGVtOworCXVuc2lnbmVkIGNoYXIgZW11MTBrMV9jaGlwOyAvKiBPcmlnaW5hbCBTQiBMaXZlLiBOb3QgU0IgTGl2ZSAyNGJpdC4gKi8KKwl1bnNpZ25lZCBjaGFyIGVtdTEwazJfY2hpcDsgLyogQXVkaWd5IDEgb3IgQXVkaWd5IDIuICovCisJdW5zaWduZWQgY2hhciBjYTAxMDJfY2hpcDsgIC8qIEF1ZGlneSAxIG9yIEF1ZGlneSAyLiBOb3QgU0IgQXVkaWd5IDIgVmFsdWUuICovCisJdW5zaWduZWQgY2hhciBjYTAxMDhfY2hpcDsgIC8qIEF1ZGlneSAyIFZhbHVlICovCisJdW5zaWduZWQgY2hhciBjYTAxNTFfY2hpcDsgIC8qIFAxNlYgKi8KKwl1bnNpZ25lZCBjaGFyIHNwazcxOyAgICAgICAgLyogSGFzIDcuMSBzcGVha2VycyAqLworCXVuc2lnbmVkIGNoYXIgc3BkaWZfYnVnOyAgICAvKiBIYXMgU3BkaWYgcGhhc2luZyBidWcgKi8KKwl1bnNpZ25lZCBjaGFyIGFjOTdfY2hpcDsgICAgLyogSGFzIGFuIEFDOTcgY2hpcCAqLworCXVuc2lnbmVkIGNoYXIgZWNhcmQ7ICAgICAgICAvKiBBUFMgRUVQUk9NICovCisJY2hhciAqIGRyaXZlcjsKKwljaGFyICogbmFtZTsKK30gZW11X2NoaXBfZGV0YWlsc190OworCitzdHJ1Y3QgX3NuZF9lbXUxMGsxIHsKKwlpbnQgaXJxOworCisJdW5zaWduZWQgbG9uZyBwb3J0OwkJCS8qIEkvTyBwb3J0IG51bWJlciAqLworCXVuc2lnbmVkIGludCBBUFM6IDEsCQkJLyogQVBTIGZsYWcgKi8KKwkgICAgbm9fYWM5NzogMSwJCQkJLyogbm8gQUMnOTcgKi8KKwkgICAgdG9zX2xpbms6IDEsCQkJLyogdG9zIGxpbmsgZGV0ZWN0ZWQgKi8KKwkgICAgcmVhcl9hYzk3OiAxLAkJCS8qIHJlYXIgY2hhbm5lbHMgYXJlIG9uIEFDJzk3ICovCisJICAgIHNwazcxOjE7CQkJCS8qIDcuMSBjb25maWd1cmF0aW9uIChBdWRpZ3kgMiBaUykgKi8KKwljb25zdCBlbXVfY2hpcF9kZXRhaWxzX3QgKmNhcmRfY2FwYWJpbGl0aWVzOwkvKiBDb250YWlucyBwcm9maWxlIG9mIGNhcmQgY2FwYWJpbGl0aWVzICovCisJdW5zaWduZWQgaW50IGF1ZGlneTsJCQkvKiBpcyBBdWRpZ3k/ICovCisJdW5zaWduZWQgaW50IHJldmlzaW9uOwkJCS8qIGNoaXAgcmV2aXNpb24gKi8KKwl1bnNpZ25lZCBpbnQgc2VyaWFsOwkJCS8qIHNlcmlhbCBudW1iZXIgKi8KKwl1bnNpZ25lZCBzaG9ydCBtb2RlbDsJCQkvKiBzdWJzeXN0ZW0gaWQgKi8KKwl1bnNpZ25lZCBpbnQgY2FyZF90eXBlOwkJCS8qIEVNVTEwSzFfQ0FSRF8qICovCisJdW5zaWduZWQgaW50IGVjYXJkX2N0cmw7CQkvKiBlY2FyZCBjb250cm9sIGJpdHMgKi8KKwl1bnNpZ25lZCBsb25nIGRtYV9tYXNrOwkJCS8qIFBDSSBETUEgbWFzayAqLworCWludCBtYXhfY2FjaGVfcGFnZXM7CQkJLyogbWF4IG1lbW9yeSBzaXplIC8gUEFHRV9TSVpFICovCisJc3RydWN0IHNuZF9kbWFfYnVmZmVyIHNpbGVudF9wYWdlOwkvKiBzaWxlbnQgcGFnZSAqLworCXN0cnVjdCBzbmRfZG1hX2J1ZmZlciBwdGJfcGFnZXM7CS8qIHBhZ2UgdGFibGUgcGFnZXMgKi8KKwlzdHJ1Y3Qgc25kX2RtYV9kZXZpY2UgcDE2dl9kbWFfZGV2OworCXN0cnVjdCBzbmRfZG1hX2J1ZmZlciBwMTZ2X2J1ZmZlcjsKKworCXNuZF91dGlsX21lbWhkcl90ICptZW1oZHI7CQkvKiBwYWdlIGFsbG9jYXRpb24gbGlzdCAqLworCWVtdTEwazFfbWVtYmxrX3QgKnJlc2VydmVkX3BhZ2U7CS8qIHJlc2VydmVkIHBhZ2UgKi8KKworCXN0cnVjdCBsaXN0X2hlYWQgbWFwcGVkX2xpbmtfaGVhZDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG1hcHBlZF9vcmRlcl9saW5rX2hlYWQ7CisJdm9pZCAqKnBhZ2VfcHRyX3RhYmxlOworCXVuc2lnbmVkIGxvbmcgKnBhZ2VfYWRkcl90YWJsZTsKKwlzcGlubG9ja190IG1lbWJsa19sb2NrOworCisJdW5zaWduZWQgaW50IHNwZGlmX2JpdHNbM107CQkvKiBzL3BkaWYgb3V0IHNldHVwICovCisKKwlzbmRfZW11MTBrMV9meDgwMTBfdCBmeDgwMTA7CQkvKiBGWDgwMTAgaW5mbyAqLworCWludCBncHJfYmFzZTsKKwkKKwlhYzk3X3QgKmFjOTc7CisKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpOworCXNuZF9jYXJkX3QgKmNhcmQ7CisJc25kX3BjbV90ICpwY207CisJc25kX3BjbV90ICpwY21fbWljOworCXNuZF9wY21fdCAqcGNtX2VmeDsKKwlzbmRfcGNtX3QgKnBjbV9wMTZ2OworCisJc3BpbmxvY2tfdCBzeW50aF9sb2NrOworCXZvaWQgKnN5bnRoOworCWludCAoKmdldF9zeW50aF92b2ljZSkoZW11MTBrMV90ICplbXUpOworCisJc3BpbmxvY2tfdCByZWdfbG9jazsKKwlzcGlubG9ja190IGVtdV9sb2NrOworCXNwaW5sb2NrX3Qgdm9pY2VfbG9jazsKKwlzdHJ1Y3Qgc2VtYXBob3JlIHB0Yl9sb2NrOworCisJZW11MTBrMV92b2ljZV90IHZvaWNlc1tOVU1fR107CisJZW11MTBrMV92b2ljZV90IHAxNnZfdm9pY2VzWzRdOworCWludCBwMTZ2X2RldmljZV9vZmZzZXQ7CisJZW11MTBrMV9wY21fbWl4ZXJfdCBwY21fbWl4ZXJbMzJdOworCWVtdTEwazFfcGNtX21peGVyX3QgZWZ4X3BjbV9taXhlcltOVU1fRUZYX1BMQVlCQUNLXTsKKwlzbmRfa2NvbnRyb2xfdCAqY3RsX3NlbmRfcm91dGluZzsKKwlzbmRfa2NvbnRyb2xfdCAqY3RsX3NlbmRfdm9sdW1lOworCXNuZF9rY29udHJvbF90ICpjdGxfYXR0bjsKKwlzbmRfa2NvbnRyb2xfdCAqY3RsX2VmeF9zZW5kX3JvdXRpbmc7CisJc25kX2tjb250cm9sX3QgKmN0bF9lZnhfc2VuZF92b2x1bWU7CisJc25kX2tjb250cm9sX3QgKmN0bF9lZnhfYXR0bjsKKworCXZvaWQgKCpod3ZvbF9pbnRlcnJ1cHQpKGVtdTEwazFfdCAqZW11LCB1bnNpZ25lZCBpbnQgc3RhdHVzKTsKKwl2b2lkICgqY2FwdHVyZV9pbnRlcnJ1cHQpKGVtdTEwazFfdCAqZW11LCB1bnNpZ25lZCBpbnQgc3RhdHVzKTsKKwl2b2lkICgqY2FwdHVyZV9taWNfaW50ZXJydXB0KShlbXUxMGsxX3QgKmVtdSwgdW5zaWduZWQgaW50IHN0YXR1cyk7CisJdm9pZCAoKmNhcHR1cmVfZWZ4X2ludGVycnVwdCkoZW11MTBrMV90ICplbXUsIHVuc2lnbmVkIGludCBzdGF0dXMpOworCXZvaWQgKCpzcGRpZl9pbnRlcnJ1cHQpKGVtdTEwazFfdCAqZW11LCB1bnNpZ25lZCBpbnQgc3RhdHVzKTsKKwl2b2lkICgqZHNwX2ludGVycnVwdCkoZW11MTBrMV90ICplbXUpOworCisJc25kX3BjbV9zdWJzdHJlYW1fdCAqcGNtX2NhcHR1cmVfc3Vic3RyZWFtOworCXNuZF9wY21fc3Vic3RyZWFtX3QgKnBjbV9jYXB0dXJlX21pY19zdWJzdHJlYW07CisJc25kX3BjbV9zdWJzdHJlYW1fdCAqcGNtX2NhcHR1cmVfZWZ4X3N1YnN0cmVhbTsKKwlzbmRfcGNtX3N1YnN0cmVhbV90ICpwY21fcGxheWJhY2tfZWZ4X3N1YnN0cmVhbTsKKworCXNuZF90aW1lcl90ICp0aW1lcjsKKworCWVtdTEwazFfbWlkaV90IG1pZGk7CisJZW11MTBrMV9taWRpX3QgbWlkaTI7IC8qIGZvciBhdWRpZ3kgKi8KKworCXVuc2lnbmVkIGludCBlZnhfdm9pY2VzX21hc2tbMl07CisJdW5zaWduZWQgaW50IG5leHRfZnJlZV92b2ljZTsKK307CisKK2ludCBzbmRfZW11MTBrMV9jcmVhdGUoc25kX2NhcmRfdCAqIGNhcmQsCisJCSAgICAgICBzdHJ1Y3QgcGNpX2RldiAqcGNpLAorCQkgICAgICAgdW5zaWduZWQgc2hvcnQgZXh0aW5fbWFzaywKKwkJICAgICAgIHVuc2lnbmVkIHNob3J0IGV4dG91dF9tYXNrLAorCQkgICAgICAgbG9uZyBtYXhfY2FjaGVfYnl0ZXMsCisJCSAgICAgICBpbnQgZW5hYmxlX2lyLAorCQkgICAgICAgZW11MTBrMV90ICoqIHJlbXUpOworCitpbnQgc25kX2VtdTEwazFfcGNtKGVtdTEwazFfdCAqIGVtdSwgaW50IGRldmljZSwgc25kX3BjbV90ICoqIHJwY20pOworaW50IHNuZF9lbXUxMGsxX3BjbV9taWMoZW11MTBrMV90ICogZW11LCBpbnQgZGV2aWNlLCBzbmRfcGNtX3QgKiogcnBjbSk7CitpbnQgc25kX2VtdTEwazFfcGNtX2VmeChlbXUxMGsxX3QgKiBlbXUsIGludCBkZXZpY2UsIHNuZF9wY21fdCAqKiBycGNtKTsKK2ludCBzbmRfcDE2dl9wY20oZW11MTBrMV90ICogZW11LCBpbnQgZGV2aWNlLCBzbmRfcGNtX3QgKiogcnBjbSk7CitpbnQgc25kX3AxNnZfZnJlZShlbXUxMGsxX3QgKiBlbXUpOworaW50IHNuZF9wMTZ2X21peGVyKGVtdTEwazFfdCAqIGVtdSk7CitpbnQgc25kX2VtdTEwazFfcGNtX211bHRpKGVtdTEwazFfdCAqIGVtdSwgaW50IGRldmljZSwgc25kX3BjbV90ICoqIHJwY20pOworaW50IHNuZF9lbXUxMGsxX2Z4ODAxMF9wY20oZW11MTBrMV90ICogZW11LCBpbnQgZGV2aWNlLCBzbmRfcGNtX3QgKiogcnBjbSk7CitpbnQgc25kX2VtdTEwazFfbWl4ZXIoZW11MTBrMV90ICogZW11KTsKK2ludCBzbmRfZW11MTBrMV90aW1lcihlbXUxMGsxX3QgKiBlbXUsIGludCBkZXZpY2UpOworaW50IHNuZF9lbXUxMGsxX2Z4ODAxMF9uZXcoZW11MTBrMV90ICplbXUsIGludCBkZXZpY2UsIHNuZF9od2RlcF90ICoqIHJod2RlcCk7CisKK2lycXJldHVybl90IHNuZF9lbXUxMGsxX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworLyogaW5pdGlhbGl6YXRpb24gKi8KK3ZvaWQgc25kX2VtdTEwazFfdm9pY2VfaW5pdChlbXUxMGsxX3QgKiBlbXUsIGludCB2b2ljZSk7CitpbnQgc25kX2VtdTEwazFfaW5pdF9lZngoZW11MTBrMV90ICplbXUpOwordm9pZCBzbmRfZW11MTBrMV9mcmVlX2VmeChlbXUxMGsxX3QgKmVtdSk7CitpbnQgc25kX2VtdTEwazFfZng4MDEwX3RyYW1fc2V0dXAoZW11MTBrMV90ICplbXUsIHUzMiBzaXplKTsKKworLyogSS9PIGZ1bmN0aW9ucyAqLwordW5zaWduZWQgaW50IHNuZF9lbXUxMGsxX3B0cl9yZWFkKGVtdTEwazFfdCAqIGVtdSwgdW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50IGNobik7Cit2b2lkIHNuZF9lbXUxMGsxX3B0cl93cml0ZShlbXUxMGsxX3QgKmVtdSwgdW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50IGNobiwgdW5zaWduZWQgaW50IGRhdGEpOwordW5zaWduZWQgaW50IHNuZF9lbXUxMGsxX3B0cjIwX3JlYWQoZW11MTBrMV90ICogZW11LCB1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQgY2huKTsKK3ZvaWQgc25kX2VtdTEwazFfcHRyMjBfd3JpdGUoZW11MTBrMV90ICplbXUsIHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGludCBjaG4sIHVuc2lnbmVkIGludCBkYXRhKTsKK3Vuc2lnbmVkIGludCBzbmRfZW11MTBrMV9lZnhfcmVhZChlbXUxMGsxX3QgKmVtdSwgdW5zaWduZWQgaW50IHBjKTsKK3ZvaWQgc25kX2VtdTEwazFfaW50cl9lbmFibGUoZW11MTBrMV90ICplbXUsIHVuc2lnbmVkIGludCBpbnRyZW5iKTsKK3ZvaWQgc25kX2VtdTEwazFfaW50cl9kaXNhYmxlKGVtdTEwazFfdCAqZW11LCB1bnNpZ25lZCBpbnQgaW50cmVuYik7Cit2b2lkIHNuZF9lbXUxMGsxX3ZvaWNlX2ludHJfZW5hYmxlKGVtdTEwazFfdCAqZW11LCB1bnNpZ25lZCBpbnQgdm9pY2VudW0pOwordm9pZCBzbmRfZW11MTBrMV92b2ljZV9pbnRyX2Rpc2FibGUoZW11MTBrMV90ICplbXUsIHVuc2lnbmVkIGludCB2b2ljZW51bSk7Cit2b2lkIHNuZF9lbXUxMGsxX3ZvaWNlX2ludHJfYWNrKGVtdTEwazFfdCAqZW11LCB1bnNpZ25lZCBpbnQgdm9pY2VudW0pOwordm9pZCBzbmRfZW11MTBrMV92b2ljZV9oYWxmX2xvb3BfaW50cl9lbmFibGUoZW11MTBrMV90ICplbXUsIHVuc2lnbmVkIGludCB2b2ljZW51bSk7Cit2b2lkIHNuZF9lbXUxMGsxX3ZvaWNlX2hhbGZfbG9vcF9pbnRyX2Rpc2FibGUoZW11MTBrMV90ICplbXUsIHVuc2lnbmVkIGludCB2b2ljZW51bSk7Cit2b2lkIHNuZF9lbXUxMGsxX3ZvaWNlX2hhbGZfbG9vcF9pbnRyX2FjayhlbXUxMGsxX3QgKmVtdSwgdW5zaWduZWQgaW50IHZvaWNlbnVtKTsKK3ZvaWQgc25kX2VtdTEwazFfdm9pY2Vfc2V0X2xvb3Bfc3RvcChlbXUxMGsxX3QgKmVtdSwgdW5zaWduZWQgaW50IHZvaWNlbnVtKTsKK3ZvaWQgc25kX2VtdTEwazFfdm9pY2VfY2xlYXJfbG9vcF9zdG9wKGVtdTEwazFfdCAqZW11LCB1bnNpZ25lZCBpbnQgdm9pY2VudW0pOwordm9pZCBzbmRfZW11MTBrMV93YWl0KGVtdTEwazFfdCAqZW11LCB1bnNpZ25lZCBpbnQgd2FpdCk7CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBzbmRfZW11MTBrMV93YyhlbXUxMGsxX3QgKmVtdSkgeyByZXR1cm4gKGlubChlbXUtPnBvcnQgKyBXQykgPj4gNikgJiAweGZmZmZmOyB9Cit1bnNpZ25lZCBzaG9ydCBzbmRfZW11MTBrMV9hYzk3X3JlYWQoYWM5N190ICphYzk3LCB1bnNpZ25lZCBzaG9ydCByZWcpOwordm9pZCBzbmRfZW11MTBrMV9hYzk3X3dyaXRlKGFjOTdfdCAqYWM5NywgdW5zaWduZWQgc2hvcnQgcmVnLCB1bnNpZ25lZCBzaG9ydCBkYXRhKTsKK3Vuc2lnbmVkIGludCBzbmRfZW11MTBrMV9yYXRlX3RvX3BpdGNoKHVuc2lnbmVkIGludCByYXRlKTsKKworLyogbWVtb3J5IGFsbG9jYXRpb24gKi8KK3NuZF91dGlsX21lbWJsa190ICpzbmRfZW11MTBrMV9hbGxvY19wYWdlcyhlbXUxMGsxX3QgKmVtdSwgc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtKTsKK2ludCBzbmRfZW11MTBrMV9mcmVlX3BhZ2VzKGVtdTEwazFfdCAqZW11LCBzbmRfdXRpbF9tZW1ibGtfdCAqYmxrKTsKK3NuZF91dGlsX21lbWJsa190ICpzbmRfZW11MTBrMV9zeW50aF9hbGxvYyhlbXUxMGsxX3QgKmVtdSwgdW5zaWduZWQgaW50IHNpemUpOworaW50IHNuZF9lbXUxMGsxX3N5bnRoX2ZyZWUoZW11MTBrMV90ICplbXUsIHNuZF91dGlsX21lbWJsa190ICpibGspOworaW50IHNuZF9lbXUxMGsxX3N5bnRoX2J6ZXJvKGVtdTEwazFfdCAqZW11LCBzbmRfdXRpbF9tZW1ibGtfdCAqYmxrLCBpbnQgb2Zmc2V0LCBpbnQgc2l6ZSk7CitpbnQgc25kX2VtdTEwazFfc3ludGhfY29weV9mcm9tX3VzZXIoZW11MTBrMV90ICplbXUsIHNuZF91dGlsX21lbWJsa190ICpibGssIGludCBvZmZzZXQsIGNvbnN0IGNoYXIgX191c2VyICpkYXRhLCBpbnQgc2l6ZSk7CitpbnQgc25kX2VtdTEwazFfbWVtYmxrX21hcChlbXUxMGsxX3QgKmVtdSwgZW11MTBrMV9tZW1ibGtfdCAqYmxrKTsKKworLyogdm9pY2UgYWxsb2NhdGlvbiAqLworaW50IHNuZF9lbXUxMGsxX3ZvaWNlX2FsbG9jKGVtdTEwazFfdCAqZW11LCBlbXUxMGsxX3ZvaWNlX3R5cGVfdCB0eXBlLCBpbnQgcGFpciwgZW11MTBrMV92b2ljZV90ICoqcnZvaWNlKTsKK2ludCBzbmRfZW11MTBrMV92b2ljZV9mcmVlKGVtdTEwazFfdCAqZW11LCBlbXUxMGsxX3ZvaWNlX3QgKnB2b2ljZSk7CisKKy8qIE1JREkgdWFydCAqLworaW50IHNuZF9lbXUxMGsxX21pZGkoZW11MTBrMV90ICogZW11KTsKK2ludCBzbmRfZW11MTBrMV9hdWRpZ3lfbWlkaShlbXUxMGsxX3QgKiBlbXUpOworCisvKiBwcm9jIGludGVyZmFjZSAqLworaW50IHNuZF9lbXUxMGsxX3Byb2NfaW5pdChlbXUxMGsxX3QgKiBlbXUpOworCisvKiBmeDgwMTAgaXJxIGhhbmRsZXIgKi8KK2ludCBzbmRfZW11MTBrMV9meDgwMTBfcmVnaXN0ZXJfaXJxX2hhbmRsZXIoZW11MTBrMV90ICplbXUsCisJCQkJCSAgICBzbmRfZng4MDEwX2lycV9oYW5kbGVyX3QgKmhhbmRsZXIsCisJCQkJCSAgICB1bnNpZ25lZCBjaGFyIGdwcl9ydW5uaW5nLAorCQkJCQkgICAgdm9pZCAqcHJpdmF0ZV9kYXRhLAorCQkJCQkgICAgc25kX2VtdTEwazFfZng4MDEwX2lycV90ICoqcl9pcnEpOworaW50IHNuZF9lbXUxMGsxX2Z4ODAxMF91bnJlZ2lzdGVyX2lycV9oYW5kbGVyKGVtdTEwazFfdCAqZW11LAorCQkJCQkgICAgICBzbmRfZW11MTBrMV9meDgwMTBfaXJxX3QgKmlycSk7CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKy8qCisgKiAtLS0tIEZYODAxMCAtLS0tCisgKi8KKworI2RlZmluZSBFTVUxMEsxX0NBUkRfQ1JFQVRJVkUJCQkweDAwMDAwMDAwCisjZGVmaW5lIEVNVTEwSzFfQ0FSRF9FTVVBUFMJCQkweDAwMDAwMDAxCisKKyNkZWZpbmUgRU1VMTBLMV9GWDgwMTBfUENNX0NPVU5UCQk4CisKKy8qIGluc3RydWN0aW9uIHNldCAqLworI2RlZmluZSBpTUFDMAkgMHgwMAkvKiBSID0gQSArIChYICogWSA+PiAzMSkgICA7IHNhdHVyYXRpb24gKi8KKyNkZWZpbmUgaU1BQzEJIDB4MDEJLyogUiA9IEEgKyAoLVggKiBZID4+IDMxKSAgOyBzYXR1cmF0aW9uICovCisjZGVmaW5lIGlNQUMyCSAweDAyCS8qIFIgPSBBICsgKFggKiBZID4+IDMxKSAgIDsgd3JhcGFyb3VuZCAqLworI2RlZmluZSBpTUFDMwkgMHgwMwkvKiBSID0gQSArICgtWCAqIFkgPj4gMzEpICA7IHdyYXBhcm91bmQgKi8KKyNkZWZpbmUgaU1BQ0lOVDAgMHgwNAkvKiBSID0gQSArIFggKiBZCSAgIDsgc2F0dXJhdGlvbiAqLworI2RlZmluZSBpTUFDSU5UMSAweDA1CS8qIFIgPSBBICsgWCAqIFkJICAgOyB3cmFwYXJvdW5kICgzMS1iaXQpICovCisjZGVmaW5lIGlBQ0MzCSAweDA2CS8qIFIgPSBBICsgWCArIFkJICAgOyBzYXR1cmF0aW9uICovCisjZGVmaW5lIGlNQUNNViAgIDB4MDcJLyogUiA9IEEsIGFjYyArPSBYICogWSA+PiAzMSAqLworI2RlZmluZSBpQU5EWE9SICAweDA4CS8qIFIgPSAoQSAmIFgpIF4gWSAqLworI2RlZmluZSBpVFNUTkVHICAweDA5CS8qIFIgPSAoQSA+PSBZKSA/IFggOiB+WCAqLworI2RlZmluZSBpTElNSVRHRSAweDBhCS8qIFIgPSAoQSA+PSBZKSA/IFggOiBZICovCisjZGVmaW5lIGlMSU1JVExUIDB4MGIJLyogUiA9IChBIDwgWSkgPyBYIDogWSAqLworI2RlZmluZSBpTE9HCSAweDBjCS8qIFIgPSBsaW5lYXJfZGF0YSwgQSAobG9nX2RhdGEpLCBYIChtYXhfZXhwKSwgWSAoZm9ybWF0X3dvcmQpICovCisjZGVmaW5lIGlFWFAJIDB4MGQJLyogUiA9IGxvZ19kYXRhLCBBIChsaW5lYXJfZGF0YSksIFggKG1heF9leHApLCBZIChmb3JtYXRfd29yZCkgKi8KKyNkZWZpbmUgaUlOVEVSUCAgMHgwZQkvKiBSID0gQSArIChYICogKFkgLSBBKSA+PiAzMSkgIDsgc2F0dXJhdGlvbiAqLworI2RlZmluZSBpU0tJUCAgICAweDBmCS8qIFIgPSBBIChjY19yZWcpLCBYIChjb3VudCksIFkgKGNjX3Rlc3QpICovCisKKy8qIEdQUnMgKi8KKyNkZWZpbmUgRlhCVVMoeCkJKDB4MDAgKyAoeCkpCS8qIHggPSAweDAwIC0gMHgwZiAqLworI2RlZmluZSBFWFRJTih4KQkoMHgxMCArICh4KSkJLyogeCA9IDB4MDAgLSAweDBmICovCisjZGVmaW5lIEVYVE9VVCh4KQkoMHgyMCArICh4KSkJLyogeCA9IDB4MDAgLSAweDBmIHBoeXNpY2FsIG91dHMgLT4gRlhXQyBsb3cgMTYgYml0cyAqLworI2RlZmluZSBGWEJVUzIoeCkJKDB4MzAgKyAoeCkpCS8qIHggPSAweDAwIC0gMHgwZiBjb3BpZXMgb2YgZnggYnVzZXMgZm9yIGNhcHR1cmUgLT4gRlhXQyBoaWdoIDE2IGJpdHMgKi8KKwkJCQkJLyogTkI6IDB4MzEgYW5kIDB4MzIgYXJlIHNoYXJlZCB3aXRoIENlbnRlci9MRkUgb24gU0IgbGl2ZSA1LjEgKi8KKworI2RlZmluZSBDXzAwMDAwMDAwCTB4NDAKKyNkZWZpbmUgQ18wMDAwMDAwMQkweDQxCisjZGVmaW5lIENfMDAwMDAwMDIJMHg0MgorI2RlZmluZSBDXzAwMDAwMDAzCTB4NDMKKyNkZWZpbmUgQ18wMDAwMDAwNAkweDQ0CisjZGVmaW5lIENfMDAwMDAwMDgJMHg0NQorI2RlZmluZSBDXzAwMDAwMDEwCTB4NDYKKyNkZWZpbmUgQ18wMDAwMDAyMAkweDQ3CisjZGVmaW5lIENfMDAwMDAxMDAJMHg0OAorI2RlZmluZSBDXzAwMDEwMDAwCTB4NDkKKyNkZWZpbmUgQ18wMDA4MDAwMAkweDRhCisjZGVmaW5lIENfMTAwMDAwMDAJMHg0YgorI2RlZmluZSBDXzIwMDAwMDAwCTB4NGMKKyNkZWZpbmUgQ180MDAwMDAwMAkweDRkCisjZGVmaW5lIENfODAwMDAwMDAJMHg0ZQorI2RlZmluZSBDXzdmZmZmZmZmCTB4NGYKKyNkZWZpbmUgQ19mZmZmZmZmZgkweDUwCisjZGVmaW5lIENfZmZmZmZmZmUJMHg1MQorI2RlZmluZSBDX2MwMDAwMDAwCTB4NTIKKyNkZWZpbmUgQ180ZjFiYmNkYwkweDUzCisjZGVmaW5lIENfNWE3ZWY5ZGIJMHg1NAorI2RlZmluZSBDXzAwMTAwMDAwCTB4NTUJCS8qID8/ICovCisjZGVmaW5lIEdQUl9BQ0NVCTB4NTYJCS8qIEFDQ1VNLCBhY2N1bXVsYXRvciAqLworI2RlZmluZSBHUFJfQ09ORAkweDU3CQkvKiBDQ1IsIGNvbmRpdGlvbiByZWdpc3RlciAqLworI2RlZmluZSBHUFJfTk9JU0UwCTB4NTgJCS8qIG5vaXNlIHNvdXJjZSAqLworI2RlZmluZSBHUFJfTk9JU0UxCTB4NTkJCS8qIG5vaXNlIHNvdXJjZSAqLworI2RlZmluZSBHUFJfSVJRCQkweDVhCQkvKiBJUlEgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgR1BSX0RCQUMJMHg1YgkJLyogVFJBTSBEZWxheSBCYXNlIEFkZHJlc3MgQ291bnRlciAqLworI2RlZmluZSBHUFIoeCkJCShGWEdQUkVHQkFTRSArICh4KSkgLyogZnJlZSBHUFJzOiB4ID0gMHgwMCAtIDB4ZmYgKi8KKyNkZWZpbmUgSVRSQU1fREFUQSh4KQkoVEFOS01FTURBVEFSRUdCQVNFICsgMHgwMCArICh4KSkgLyogeCA9IDB4MDAgLSAweDdmICovCisjZGVmaW5lIEVUUkFNX0RBVEEoeCkJKFRBTktNRU1EQVRBUkVHQkFTRSArIDB4ODAgKyAoeCkpIC8qIHggPSAweDAwIC0gMHgxZiAqLworI2RlZmluZSBJVFJBTV9BRERSKHgpCShUQU5LTUVNQUREUlJFR0JBU0UgKyAweDAwICsgKHgpKSAvKiB4ID0gMHgwMCAtIDB4N2YgKi8KKyNkZWZpbmUgRVRSQU1fQUREUih4KQkoVEFOS01FTUFERFJSRUdCQVNFICsgMHg4MCArICh4KSkgLyogeCA9IDB4MDAgLSAweDFmICovCisKKyNkZWZpbmUgQV9JVFJBTV9EQVRBKHgpCShUQU5LTUVNREFUQVJFR0JBU0UgKyAweDAwICsgKHgpKSAvKiB4ID0gMHgwMCAtIDB4YmYgKi8KKyNkZWZpbmUgQV9FVFJBTV9EQVRBKHgpCShUQU5LTUVNREFUQVJFR0JBU0UgKyAweGMwICsgKHgpKSAvKiB4ID0gMHgwMCAtIDB4M2YgKi8KKyNkZWZpbmUgQV9JVFJBTV9BRERSKHgpCShUQU5LTUVNQUREUlJFR0JBU0UgKyAweDAwICsgKHgpKSAvKiB4ID0gMHgwMCAtIDB4YmYgKi8KKyNkZWZpbmUgQV9FVFJBTV9BRERSKHgpCShUQU5LTUVNQUREUlJFR0JBU0UgKyAweGMwICsgKHgpKSAvKiB4ID0gMHgwMCAtIDB4M2YgKi8KKyNkZWZpbmUgQV9JVFJBTV9DVEwoeCkJKEFfVEFOS01FTUNUTFJFR0JBU0UgKyAweDAwICsgKHgpKSAvKiB4ID0gMHgwMCAtIDB4YmYgKi8KKyNkZWZpbmUgQV9FVFJBTV9DVEwoeCkJKEFfVEFOS01FTUNUTFJFR0JBU0UgKyAweGMwICsgKHgpKSAvKiB4ID0gMHgwMCAtIDB4M2YgKi8KKworI2RlZmluZSBBX0ZYQlVTKHgpCSgweDAwICsgKHgpKQkvKiB4ID0gMHgwMCAtIDB4M2YgRlggYnVzZXMgKi8KKyNkZWZpbmUgQV9FWFRJTih4KQkoMHg0MCArICh4KSkJLyogeCA9IDB4MDAgLSAweDBmIHBoeXNpY2FsIGlucyAqLworI2RlZmluZSBBX1AxNlZJTih4KQkoMHg1MCArICh4KSkJLyogeCA9IDB4MDAgLSAweDBmIHAxNnYgaW5zIChBMiBvbmx5KSAiRU1VMzIgaW5wdXRzIiAqLworI2RlZmluZSBBX0VYVE9VVCh4KQkoMHg2MCArICh4KSkJLyogeCA9IDB4MDAgLSAweDFmIHBoeXNpY2FsIG91dHMgLT4gQV9GWFdDMSAweDc5LTdmIHVua25vd24gICAqLworI2RlZmluZSBBX0ZYQlVTMih4KQkoMHg4MCArICh4KSkJLyogeCA9IDB4MDAgLSAweDFmIGV4dHJhIG91dHMgdXNlZCBmb3IgRUZYIGNhcHR1cmUgLT4gQV9GWFdDMiAqLworI2RlZmluZSBBX0VNVTMyT1VUSCh4KQkoMHhhMCArICh4KSkJLyogeCA9IDB4MDAgLSAweDBmICJFTVUzMl9PVVRfMTAgLSBfMUYiIC0gPz8/ICovCisjZGVmaW5lIEFfRU1VMzJPVVRMKHgpCSgweGIwICsgKHgpKQkvKiB4ID0gMHgwMCAtIDB4MGYgIkVNVTMyX09VVF8xIC0gX0YiIC0gPz8/ICovCisjZGVmaW5lIEFfR1BSKHgpCShBX0ZYR1BSRUdCQVNFICsgKHgpKQorCisvKiBjY19yZWcgY29uc3RhbnRzICovCisjZGVmaW5lIENDX1JFR19OT1JNQUxJWkVEIENfMDAwMDAwMDEKKyNkZWZpbmUgQ0NfUkVHX0JPUlJPVwlDXzAwMDAwMDAyCisjZGVmaW5lIENDX1JFR19NSU5VUwlDXzAwMDAwMDA0CisjZGVmaW5lIENDX1JFR19aRVJPCUNfMDAwMDAwMDgKKyNkZWZpbmUgQ0NfUkVHX1NBVFVSQVRFCUNfMDAwMDAwMTAKKyNkZWZpbmUgQ0NfUkVHX05PTlpFUk8JQ18wMDAwMDEwMAorCisvKiBGWCBidXNlcyAqLworI2RlZmluZSBGWEJVU19QQ01fTEVGVAkJMHgwMAorI2RlZmluZSBGWEJVU19QQ01fUklHSFQJCTB4MDEKKyNkZWZpbmUgRlhCVVNfUENNX0xFRlRfUkVBUgkweDAyCisjZGVmaW5lIEZYQlVTX1BDTV9SSUdIVF9SRUFSCTB4MDMKKyNkZWZpbmUgRlhCVVNfTUlESV9MRUZUCQkweDA0CisjZGVmaW5lIEZYQlVTX01JRElfUklHSFQJMHgwNQorI2RlZmluZSBGWEJVU19QQ01fQ0VOVEVSCTB4MDYKKyNkZWZpbmUgRlhCVVNfUENNX0xGRQkJMHgwNworI2RlZmluZSBGWEJVU19QQ01fTEVGVF9GUk9OVAkweDA4CisjZGVmaW5lIEZYQlVTX1BDTV9SSUdIVF9GUk9OVAkweDA5CisjZGVmaW5lIEZYQlVTX01JRElfUkVWRVJCCTB4MGMKKyNkZWZpbmUgRlhCVVNfTUlESV9DSE9SVVMJMHgwZAorI2RlZmluZSBGWEJVU19QQ01fTEVGVF9TSURFCTB4MGUKKyNkZWZpbmUgRlhCVVNfUENNX1JJR0hUX1NJREUJMHgwZgorI2RlZmluZSBGWEJVU19QVF9MRUZUCQkweDE0CisjZGVmaW5lIEZYQlVTX1BUX1JJR0hUCQkweDE1CisKKy8qIElucHV0cyAqLworI2RlZmluZSBFWFRJTl9BQzk3X0wJICAgMHgwMAkvKiBBQyc5NyBjYXB0dXJlIGNoYW5uZWwgLSBsZWZ0ICovCisjZGVmaW5lIEVYVElOX0FDOTdfUgkgICAweDAxCS8qIEFDJzk3IGNhcHR1cmUgY2hhbm5lbCAtIHJpZ2h0ICovCisjZGVmaW5lIEVYVElOX1NQRElGX0NEX0wgICAweDAyCS8qIGludGVybmFsIFMvUERJRiBDRCAtIG9uYm9hcmQgLSBsZWZ0ICovCisjZGVmaW5lIEVYVElOX1NQRElGX0NEX1IgICAweDAzCS8qIGludGVybmFsIFMvUERJRiBDRCAtIG9uYm9hcmQgLSByaWdodCAqLworI2RlZmluZSBFWFRJTl9aT09NX0wJICAgMHgwNAkvKiBab29tIFZpZGVvIEkyUyAtIGxlZnQgKi8KKyNkZWZpbmUgRVhUSU5fWk9PTV9SCSAgIDB4MDUJLyogWm9vbSBWaWRlbyBJMlMgLSByaWdodCAqLworI2RlZmluZSBFWFRJTl9UT1NMSU5LX0wJICAgMHgwNgkvKiBMaXZlRHJpdmUgLSBUT1NMaW5rIE9wdGljYWwgLSBsZWZ0ICovCisjZGVmaW5lIEVYVElOX1RPU0xJTktfUiAgICAweDA3CS8qIExpdmVEcml2ZSAtIFRPU0xpbmsgT3B0aWNhbCAtIHJpZ2h0ICovCisjZGVmaW5lIEVYVElOX0xJTkUxX0wJICAgMHgwOAkvKiBMaXZlRHJpdmUgLSBMaW5lL01pYyAxIC0gbGVmdCAqLworI2RlZmluZSBFWFRJTl9MSU5FMV9SCSAgIDB4MDkJLyogTGl2ZURyaXZlIC0gTGluZS9NaWMgMSAtIHJpZ2h0ICovCisjZGVmaW5lIEVYVElOX0NPQVhfU1BESUZfTCAweDBhCS8qIExpdmVEcml2ZSAtIENvYXhpYWwgUy9QRElGIC0gbGVmdCAqLworI2RlZmluZSBFWFRJTl9DT0FYX1NQRElGX1IgMHgwYiAvKiBMaXZlRHJpdmUgLSBDb2F4aWFsIFMvUERJRiAtIHJpZ2h0ICovCisjZGVmaW5lIEVYVElOX0xJTkUyX0wJICAgMHgwYwkvKiBMaXZlRHJpdmUgLSBMaW5lL01pYyAyIC0gbGVmdCAqLworI2RlZmluZSBFWFRJTl9MSU5FMl9SCSAgIDB4MGQJLyogTGl2ZURyaXZlIC0gTGluZS9NaWMgMiAtIHJpZ2h0ICovCisKKy8qIE91dHB1dHMgKi8KKyNkZWZpbmUgRVhUT1VUX0FDOTdfTAkgICAweDAwCS8qIEFDJzk3IHBsYXliYWNrIGNoYW5uZWwgLSBsZWZ0ICovCisjZGVmaW5lIEVYVE9VVF9BQzk3X1IJICAgMHgwMQkvKiBBQyc5NyBwbGF5YmFjayBjaGFubmVsIC0gcmlnaHQgKi8KKyNkZWZpbmUgRVhUT1VUX1RPU0xJTktfTCAgIDB4MDIJLyogTGl2ZURyaXZlIC0gVE9TTGluayBPcHRpY2FsIC0gbGVmdCAqLworI2RlZmluZSBFWFRPVVRfVE9TTElOS19SICAgMHgwMwkvKiBMaXZlRHJpdmUgLSBUT1NMaW5rIE9wdGljYWwgLSByaWdodCAqLworI2RlZmluZSBFWFRPVVRfQUM5N19DRU5URVIgMHgwNAkvKiBTQiBMaXZlIDUuMSAtIGNlbnRlciAqLworI2RlZmluZSBFWFRPVVRfQUM5N19MRkUJICAgMHgwNSAvKiBTQiBMaXZlIDUuMSAtIExGRSAqLworI2RlZmluZSBFWFRPVVRfSEVBRFBIT05FX0wgMHgwNgkvKiBMaXZlRHJpdmUgLSBIZWFkcGhvbmUgLSBsZWZ0ICovCisjZGVmaW5lIEVYVE9VVF9IRUFEUEhPTkVfUiAweDA3CS8qIExpdmVEcml2ZSAtIEhlYWRwaG9uZSAtIHJpZ2h0ICovCisjZGVmaW5lIEVYVE9VVF9SRUFSX0wJICAgMHgwOAkvKiBSZWFyIGNoYW5uZWwgLSBsZWZ0ICovCisjZGVmaW5lIEVYVE9VVF9SRUFSX1IJICAgMHgwOQkvKiBSZWFyIGNoYW5uZWwgLSByaWdodCAqLworI2RlZmluZSBFWFRPVVRfQURDX0NBUF9MICAgMHgwYQkvKiBBREMgQ2FwdHVyZSBidWZmZXIgLSBsZWZ0ICovCisjZGVmaW5lIEVYVE9VVF9BRENfQ0FQX1IgICAweDBiCS8qIEFEQyBDYXB0dXJlIGJ1ZmZlciAtIHJpZ2h0ICovCisjZGVmaW5lIEVYVE9VVF9NSUNfQ0FQCSAgIDB4MGMJLyogTUlDIENhcHR1cmUgYnVmZmVyICovCisjZGVmaW5lIEVYVE9VVF9BQzk3X1JFQVJfTCAweDBkCS8qIFNCIExpdmUgNS4xIChjKSAyMDAzIC0gUmVhciBMZWZ0ICovCisjZGVmaW5lIEVYVE9VVF9BQzk3X1JFQVJfUiAweDBlCS8qIFNCIExpdmUgNS4xIChjKSAyMDAzIC0gUmVhciBSaWdodCAqLworI2RlZmluZSBFWFRPVVRfQUNFTlRFUgkgICAweDExIC8qIEFuYWxvZyBDZW50ZXIgKi8KKyNkZWZpbmUgRVhUT1VUX0FMRkUJICAgMHgxMiAvKiBBbmFsb2cgTEZFICovCisKKy8qIEF1ZGlneSBJbnB1dHMgKi8KKyNkZWZpbmUgQV9FWFRJTl9BQzk3X0wJCTB4MDAJLyogQUMnOTcgY2FwdHVyZSBjaGFubmVsIC0gbGVmdCAqLworI2RlZmluZSBBX0VYVElOX0FDOTdfUgkJMHgwMQkvKiBBQyc5NyBjYXB0dXJlIGNoYW5uZWwgLSByaWdodCAqLworI2RlZmluZSBBX0VYVElOX1NQRElGX0NEX0wJMHgwMgkvKiBkaWdpdGFsIENEIGxlZnQgKi8KKyNkZWZpbmUgQV9FWFRJTl9TUERJRl9DRF9SCTB4MDMJLyogZGlnaXRhbCBDRCBsZWZ0ICovCisjZGVmaW5lIEFfRVhUSU5fT1BUX1NQRElGX0wgICAgIDB4MDQgICAgLyogYXVkaWd5IGRyaXZlIE9wdGljYWwgU1BESUYgLSBsZWZ0ICovCisjZGVmaW5lIEFfRVhUSU5fT1BUX1NQRElGX1IgICAgIDB4MDUgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByaWdodCAqLyAKKyNkZWZpbmUgQV9FWFRJTl9MSU5FMl9MCQkweDA4CS8qIGF1ZGlneSBkcml2ZSBsaW5lMi9taWMyIC0gbGVmdCAqLworI2RlZmluZSBBX0VYVElOX0xJTkUyX1IJCTB4MDkJLyogICAgICAgICAgICAgICAgICAgICAgICAgICByaWdodCAqLworI2RlZmluZSBBX0VYVElOX0FEQ19MCQkweDBhICAgIC8qIFBoaWxpcHMgQURDIC0gbGVmdCAqLworI2RlZmluZSBBX0VYVElOX0FEQ19SCQkweDBiICAgIC8qICAgICAgICAgICAgICAgcmlnaHQgKi8KKyNkZWZpbmUgQV9FWFRJTl9BVVgyX0wJCTB4MGMJLyogYXVkaWd5IGRyaXZlIGF1eDIgLSBsZWZ0ICovCisjZGVmaW5lIEFfRVhUSU5fQVVYMl9SCQkweDBkCS8qICAgICAgICAgICAgICAgICAgIC0gcmlnaHQgKi8KKworLyogQXVkaWdpeSBPdXRwdXRzICovCisjZGVmaW5lIEFfRVhUT1VUX0ZST05UX0wJMHgwMAkvKiBkaWdpdGFsIGZyb250IGxlZnQgKi8KKyNkZWZpbmUgQV9FWFRPVVRfRlJPTlRfUgkweDAxCS8qICAgICAgICAgICAgICAgcmlnaHQgKi8KKyNkZWZpbmUgQV9FWFRPVVRfQ0VOVEVSCQkweDAyCS8qIGRpZ2l0YWwgZnJvbnQgY2VudGVyICovCisjZGVmaW5lIEFfRVhUT1VUX0xGRQkJMHgwMwkvKiBkaWdpdGFsIGZyb250IGxmZSAqLworI2RlZmluZSBBX0VYVE9VVF9IRUFEUEhPTkVfTAkweDA0CS8qIGhlYWRwaG9uZSBhdWRpZ3kgZHJpdmUgbGVmdCAqLworI2RlZmluZSBBX0VYVE9VVF9IRUFEUEhPTkVfUgkweDA1CS8qICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHQgKi8KKyNkZWZpbmUgQV9FWFRPVVRfUkVBUl9MCQkweDA2CS8qIGRpZ2l0YWwgcmVhciBsZWZ0ICovCisjZGVmaW5lIEFfRVhUT1VUX1JFQVJfUgkJMHgwNwkvKiAgICAgICAgICAgICAgcmlnaHQgKi8KKyNkZWZpbmUgQV9FWFRPVVRfQUZST05UX0wJMHgwOAkvKiBhbmFsb2cgZnJvbnQgbGVmdCAqLworI2RlZmluZSBBX0VYVE9VVF9BRlJPTlRfUgkweDA5CS8qICAgICAgICAgICAgICByaWdodCAqLworI2RlZmluZSBBX0VYVE9VVF9BQ0VOVEVSCTB4MGEJLyogYW5hbG9nIGNlbnRlciAqLworI2RlZmluZSBBX0VYVE9VVF9BTEZFCQkweDBiCS8qIGFuYWxvZyBMRkUgKi8KKyNkZWZpbmUgQV9FWFRPVVRfQVNJREVfTAkweDBjCS8qIGFuYWxvZyBzaWRlIGxlZnQgIC0gQXVkaWd5IDIgWlMgKi8KKyNkZWZpbmUgQV9FWFRPVVRfQVNJREVfUgkweDBkCS8qICAgICAgICAgICAgIHJpZ2h0IC0gQXVkaWd5IDIgWlMgKi8KKyNkZWZpbmUgQV9FWFRPVVRfQVJFQVJfTAkweDBlCS8qIGFuYWxvZyByZWFyIGxlZnQgKi8KKyNkZWZpbmUgQV9FWFRPVVRfQVJFQVJfUgkweDBmCS8qICAgICAgICAgICAgIHJpZ2h0ICovCisjZGVmaW5lIEFfRVhUT1VUX0FDOTdfTAkJMHgxMAkvKiBBQzk3IGxlZnQgKGZyb250KSAqLworI2RlZmluZSBBX0VYVE9VVF9BQzk3X1IJCTB4MTEJLyogICAgICByaWdodCAqLworI2RlZmluZSBBX0VYVE9VVF9BRENfQ0FQX0wJMHgxNgkvKiBBREMgY2FwdHVyZSBidWZmZXIgbGVmdCAqLworI2RlZmluZSBBX0VYVE9VVF9BRENfQ0FQX1IJMHgxNwkvKiAgICAgICAgICAgICAgICAgICAgcmlnaHQgKi8KKyNkZWZpbmUgQV9FWFRPVVRfTUlDX0NBUAkweDE4CS8qIE1pYyBjYXB0dXJlIGJ1ZmZlciAqLworCisvKiBBdWRpZ3kgY29uc3RhbnRzICovCisjZGVmaW5lIEFfQ18wMDAwMDAwMAkweGMwCisjZGVmaW5lIEFfQ18wMDAwMDAwMQkweGMxCisjZGVmaW5lIEFfQ18wMDAwMDAwMgkweGMyCisjZGVmaW5lIEFfQ18wMDAwMDAwMwkweGMzCisjZGVmaW5lIEFfQ18wMDAwMDAwNAkweGM0CisjZGVmaW5lIEFfQ18wMDAwMDAwOAkweGM1CisjZGVmaW5lIEFfQ18wMDAwMDAxMAkweGM2CisjZGVmaW5lIEFfQ18wMDAwMDAyMAkweGM3CisjZGVmaW5lIEFfQ18wMDAwMDEwMAkweGM4CisjZGVmaW5lIEFfQ18wMDAxMDAwMAkweGM5CisjZGVmaW5lIEFfQ18wMDAwMDgwMAkweGNhCisjZGVmaW5lIEFfQ18xMDAwMDAwMAkweGNiCisjZGVmaW5lIEFfQ18yMDAwMDAwMAkweGNjCisjZGVmaW5lIEFfQ180MDAwMDAwMAkweGNkCisjZGVmaW5lIEFfQ184MDAwMDAwMAkweGNlCisjZGVmaW5lIEFfQ183ZmZmZmZmZgkweGNmCisjZGVmaW5lIEFfQ19mZmZmZmZmZgkweGQwCisjZGVmaW5lIEFfQ19mZmZmZmZmZQkweGQxCisjZGVmaW5lIEFfQ19jMDAwMDAwMAkweGQyCisjZGVmaW5lIEFfQ180ZjFiYmNkYwkweGQzCisjZGVmaW5lIEFfQ181YTdlZjlkYgkweGQ0CisjZGVmaW5lIEFfQ18wMDEwMDAwMAkweGQ1CisjZGVmaW5lIEFfR1BSX0FDQ1UJMHhkNgkJLyogQUNDVU0sIGFjY3VtdWxhdG9yICovCisjZGVmaW5lIEFfR1BSX0NPTkQJMHhkNwkJLyogQ0NSLCBjb25kaXRpb24gcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQV9HUFJfTk9JU0UwCTB4ZDgJCS8qIG5vaXNlIHNvdXJjZSAqLworI2RlZmluZSBBX0dQUl9OT0lTRTEJMHhkOQkJLyogbm9pc2Ugc291cmNlICovCisjZGVmaW5lIEFfR1BSX0lSUQkweGRhCQkvKiBJUlEgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQV9HUFJfREJBQwkweGRiCQkvKiBUUkFNIERlbGF5IEJhc2UgQWRkcmVzcyBDb3VudGVyIC0gaW50ZXJuYWwgKi8KKyNkZWZpbmUgQV9HUFJfREJBQ0UJMHhkZQkJLyogVFJBTSBEZWxheSBCYXNlIEFkZHJlc3MgQ291bnRlciAtIGV4dGVybmFsICovCisKKy8qIGRlZmluaXRpb25zIGZvciBkZWJ1ZyByZWdpc3RlciAqLworI2RlZmluZSBFTVUxMEsxX0RCR19aQwkJCTB4ODAwMDAwMDAJLyogemVybyB0cmFtIGNvdW50ZXIgKi8KKyNkZWZpbmUgRU1VMTBLMV9EQkdfU0FUVVJBVElPTl9PQ0NVUkVECTB4MDIwMDAwMDAJLyogc2F0dXJhdGlvbiBjb250cm9sICovCisjZGVmaW5lIEVNVTEwSzFfREJHX1NBVFVSQVRJT05fQUREUgkweDAxZmYwMDAwCS8qIHNhdHVyYXRpb24gYWRkcmVzcyAqLworI2RlZmluZSBFTVUxMEsxX0RCR19TSU5HTEVfU1RFUAkJMHgwMDAwODAwMAkvKiBzaW5nbGUgc3RlcCBtb2RlICovCisjZGVmaW5lIEVNVTEwSzFfREJHX1NURVAJCTB4MDAwMDQwMDAJLyogc3RhcnQgc2luZ2xlIHN0ZXAgKi8KKyNkZWZpbmUgRU1VMTBLMV9EQkdfQ09ORElUSU9OX0NPREUJMHgwMDAwM2UwMAkvKiBjb25kaXRpb24gY29kZSAqLworI2RlZmluZSBFTVUxMEsxX0RCR19TSU5HTEVfU1RFUF9BRERSCTB4MDAwMDAxZmYJLyogc2luZ2xlIHN0ZXAgYWRkcmVzcyAqLworCisvKiB0YW5rIG1lbW9yeSBhZGRyZXNzIGxpbmUgKi8KKyNpZm5kZWYgX19LRVJORUxfXworI2RlZmluZSBUQU5LTUVNQUREUlJFR19BRERSX01BU0sgMHgwMDBmZmZmZgkvKiAyMCBiaXQgdGFuayBhZGRyZXNzIGZpZWxkCQkJKi8KKyNkZWZpbmUgVEFOS01FTUFERFJSRUdfQ0xFQVIJIDB4MDA4MDAwMDAJLyogQ2xlYXIgdGFuayBtZW1vcnkJCQkJKi8KKyNkZWZpbmUgVEFOS01FTUFERFJSRUdfQUxJR04JIDB4MDA0MDAwMDAJLyogQWxpZ24gcmVhZCBvciB3cml0ZSByZWxhdGl2ZSB0byB0YW5rIGFjY2VzcwkqLworI2RlZmluZSBUQU5LTUVNQUREUlJFR19XUklURQkgMHgwMDIwMDAwMAkvKiBXcml0ZSB0byB0YW5rIG1lbW9yeQkJCQkqLworI2RlZmluZSBUQU5LTUVNQUREUlJFR19SRUFECSAweDAwMTAwMDAwCS8qIFJlYWQgZnJvbSB0YW5rIG1lbW9yeQkJCSovCisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludCBjYXJkOwkJCS8qIGNhcmQgdHlwZSAqLworCXVuc2lnbmVkIGludCBpbnRlcm5hbF90cmFtX3NpemU7CS8qIGluIHNhbXBsZXMgKi8KKwl1bnNpZ25lZCBpbnQgZXh0ZXJuYWxfdHJhbV9zaXplOwkvKiBpbiBzYW1wbGVzICovCisJY2hhciBmeGJ1c19uYW1lc1sxNl1bMzJdOwkJLyogbmFtZXMgb2YgRlhCVVNlcyAqLworCWNoYXIgZXh0aW5fbmFtZXNbMTZdWzMyXTsJCS8qIG5hbWVzIG9mIGV4dGVybmFsIGlucHV0cyAqLworCWNoYXIgZXh0b3V0X25hbWVzWzMyXVszMl07CQkvKiBuYW1lcyBvZiBleHRlcm5hbCBvdXRwdXRzICovCisJdW5zaWduZWQgaW50IGdwcl9jb250cm9sczsJCS8qIGNvdW50IG9mIEdQUiBjb250cm9scyAqLworfSBlbXUxMGsxX2Z4ODAxMF9pbmZvX3Q7CisKKyNkZWZpbmUgRU1VMTBLMV9HUFJfVFJBTlNMQVRJT05fTk9ORQkJMAorI2RlZmluZSBFTVUxMEsxX0dQUl9UUkFOU0xBVElPTl9UQUJMRTEwMAkxCisjZGVmaW5lIEVNVTEwSzFfR1BSX1RSQU5TTEFUSU9OX0JBU1MJCTIKKyNkZWZpbmUgRU1VMTBLMV9HUFJfVFJBTlNMQVRJT05fVFJFQkxFCQkzCisjZGVmaW5lIEVNVTEwSzFfR1BSX1RSQU5TTEFUSU9OX09OT0ZGCQk0CisKK3R5cGVkZWYgc3RydWN0IHsKKwlzbmRfY3RsX2VsZW1faWRfdCBpZDsJCS8qIGZ1bGwgY29udHJvbCBJRCBkZWZpbml0aW9uICovCisJdW5zaWduZWQgaW50IHZjb3VudDsJCS8qIHZpc2libGUgY291bnQgKi8KKwl1bnNpZ25lZCBpbnQgY291bnQ7CQkvKiBjb3VudCBvZiBHUFIgKDEuLjE2KSAqLworCXVuc2lnbmVkIHNob3J0IGdwclszMl07CQkvKiBHUFIgbnVtYmVyKHMpICovCisJdW5zaWduZWQgaW50IHZhbHVlWzMyXTsJCS8qIGluaXRpYWwgdmFsdWVzICovCisJdW5zaWduZWQgaW50IG1pbjsJCS8qIG1pbmltdW0gcmFuZ2UgKi8KKwl1bnNpZ25lZCBpbnQgbWF4OwkJLyogbWF4aW11bSByYW5nZSAqLworCXVuc2lnbmVkIGludCB0cmFuc2xhdGlvbjsJLyogdHJhbnNsYXRpb24gdHlwZSAoRU1VMTBLMV9HUFJfVFJBTlNMQVRJT04qKSAqLworfSBlbXUxMGsxX2Z4ODAxMF9jb250cm9sX2dwcl90OworCit0eXBlZGVmIHN0cnVjdCB7CisJY2hhciBuYW1lWzEyOF07CisKKwlERUNMQVJFX0JJVE1BUChncHJfdmFsaWQsIDB4MjAwKTsgLyogYml0bWFzayBvZiB2YWxpZCBpbml0aWFsaXplcnMgKi8KKwl1X2ludDMyX3QgX191c2VyICpncHJfbWFwOwkgIC8qIGluaXRpYWxpemVycyAqLworCisJdW5zaWduZWQgaW50IGdwcl9hZGRfY29udHJvbF9jb3VudDsgLyogY291bnQgb2YgR1BSIGNvbnRyb2xzIHRvIGFkZC9yZXBsYWNlICovCisJZW11MTBrMV9meDgwMTBfY29udHJvbF9ncHJfdCBfX3VzZXIgKmdwcl9hZGRfY29udHJvbHM7IC8qIEdQUiBjb250cm9scyB0byBhZGQvcmVwbGFjZSAqLworCisJdW5zaWduZWQgaW50IGdwcl9kZWxfY29udHJvbF9jb3VudDsgLyogY291bnQgb2YgR1BSIGNvbnRyb2xzIHRvIHJlbW92ZSAqLworCXNuZF9jdGxfZWxlbV9pZF90IF9fdXNlciAqZ3ByX2RlbF9jb250cm9sczsgLyogSURzIG9mIEdQUiBjb250cm9scyB0byByZW1vdmUgKi8KKworCXVuc2lnbmVkIGludCBncHJfbGlzdF9jb250cm9sX2NvdW50OyAvKiBjb3VudCBvZiBHUFIgY29udHJvbHMgdG8gbGlzdCAqLworCXVuc2lnbmVkIGludCBncHJfbGlzdF9jb250cm9sX3RvdGFsOyAvKiB0b3RhbCBjb3VudCBvZiBHUFIgY29udHJvbHMgKi8KKwllbXUxMGsxX2Z4ODAxMF9jb250cm9sX2dwcl90IF9fdXNlciAqZ3ByX2xpc3RfY29udHJvbHM7IC8qIGxpc3RlZCBHUFIgY29udHJvbHMgKi8KKworCURFQ0xBUkVfQklUTUFQKHRyYW1fdmFsaWQsIDB4MTAwKTsgLyogYml0bWFzayBvZiB2YWxpZCBpbml0aWFsaXplcnMgKi8KKwl1X2ludDMyX3QgX191c2VyICp0cmFtX2RhdGFfbWFwOyAgLyogZGF0YSBpbml0aWFsaXplcnMgKi8KKwl1X2ludDMyX3QgX191c2VyICp0cmFtX2FkZHJfbWFwOyAgLyogbWFwIGluaXRpYWxpemVycyAqLworCisJREVDTEFSRV9CSVRNQVAoY29kZV92YWxpZCwgMTAyNCk7IC8qIGJpdG1hc2sgb2YgdmFsaWQgaW5zdHJ1Y3Rpb25zICovCisJdV9pbnQzMl90IF9fdXNlciAqY29kZTsJCSAgLyogb25lIGluc3RydWN0aW9uIC0gNjQgYml0cyAqLworfSBlbXUxMGsxX2Z4ODAxMF9jb2RlX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQgYWRkcmVzczsJCS8qIDMxLmJpdCA9PSAxIC0+IGV4dGVybmFsIFRSQU0gKi8KKwl1bnNpZ25lZCBpbnQgc2l6ZTsJCS8qIHNpemUgaW4gc2FtcGxlcyAoNCBieXRlcykgKi8KKwl1bnNpZ25lZCBpbnQgKnNhbXBsZXM7CQkvKiBwb2ludGVyIHRvIHNhbXBsZXMgKDIwLWJpdCkgKi8KKwkJCQkJLyogTlVMTC0+Y2xlYXIgbWVtb3J5ICovCit9IGVtdTEwazFfZng4MDEwX3RyYW1fdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludCBzdWJzdHJlYW07CQkvKiBzdWJzdHJlYW0gbnVtYmVyICovCisJdW5zaWduZWQgaW50IHJlczE7CQkvKiByZXNlcnZlZCAqLworCXVuc2lnbmVkIGludCBjaGFubmVsczsJCS8qIDE2LWJpdCBjaGFubmVscyBjb3VudCwgemVybyA9IHJlbW92ZSB0aGlzIHN1YnN0cmVhbSAqLworCXVuc2lnbmVkIGludCB0cmFtX3N0YXJ0OwkvKiByaW5nIGJ1ZmZlciBwb3NpdGlvbiBpbiBUUkFNIChpbiBzYW1wbGVzKSAqLworCXVuc2lnbmVkIGludCBidWZmZXJfc2l6ZTsJLyogY291bnQgb2YgYnVmZmVyZWQgc2FtcGxlcyAqLworCXVuc2lnbmVkIHNob3J0IGdwcl9zaXplOwkJLyogR1BSIGNvbnRhaW5pbmcgc2l6ZSBvZiByaW5nYnVmZmVyIGluIHNhbXBsZXMgKGhvc3QpICovCisJdW5zaWduZWQgc2hvcnQgZ3ByX3B0cjsJCS8qIEdQUiBjb250YWluaW5nIGN1cnJlbnQgcG9pbnRlciBpbiB0aGUgcmluZyBidWZmZXIgKGhvc3QgPSByZXNldCwgRlg4MDEwKSAqLworCXVuc2lnbmVkIHNob3J0IGdwcl9jb3VudDsJLyogR1BSIGNvbnRhaW5pbmcgY291bnQgb2Ygc2FtcGxlcyBiZXR3ZWVuIHR3byBpbnRlcnJ1cHRzIChob3N0KSAqLworCXVuc2lnbmVkIHNob3J0IGdwcl90bXBjb3VudDsJLyogR1BSIGNvbnRhaW5pbmcgY3VycmVudCBjb3VudCBvZiBzYW1wbGVzIHRvIGludGVycnVwdCAoaG9zdCA9IHNldCwgRlg4MDEwKSAqLworCXVuc2lnbmVkIHNob3J0IGdwcl90cmlnZ2VyOwkvKiBHUFIgY29udGFpbmluZyB0cmlnZ2VyIChhY3RpdmF0ZSkgaW5mb3JtYXRpb24gKGhvc3QpICovCisJdW5zaWduZWQgc2hvcnQgZ3ByX3J1bm5pbmc7CS8qIEdQUiBjb250YWluaW5nIGluZm8gaWYgUENNIGlzIHJ1bm5pbmcgKEZYODAxMCkgKi8KKwl1bnNpZ25lZCBjaGFyIHBhZDsJCS8qIHJlc2VydmVkICovCisJdW5zaWduZWQgY2hhciBldHJhbVszMl07CS8qIGV4dGVybmFsIFRSQU0gYWRkcmVzcyAmIGRhdGEgKG9uZSBwZXIgY2hhbm5lbCkgKi8KKwl1bnNpZ25lZCBpbnQgcmVzMjsJCS8qIHJlc2VydmVkICovCit9IGVtdTEwazFfZng4MDEwX3BjbV90OworCisjZGVmaW5lIFNORFJWX0VNVTEwSzFfSU9DVExfSU5GTwlfSU9SICgnSCcsIDB4MTAsIGVtdTEwazFfZng4MDEwX2luZm9fdCkKKyNkZWZpbmUgU05EUlZfRU1VMTBLMV9JT0NUTF9DT0RFX1BPS0UJX0lPVyAoJ0gnLCAweDExLCBlbXUxMGsxX2Z4ODAxMF9jb2RlX3QpCisjZGVmaW5lIFNORFJWX0VNVTEwSzFfSU9DVExfQ09ERV9QRUVLCV9JT1dSKCdIJywgMHgxMiwgZW11MTBrMV9meDgwMTBfY29kZV90KQorI2RlZmluZSBTTkRSVl9FTVUxMEsxX0lPQ1RMX1RSQU1fU0VUVVAJX0lPVyAoJ0gnLCAweDIwLCBpbnQpCisjZGVmaW5lIFNORFJWX0VNVTEwSzFfSU9DVExfVFJBTV9QT0tFCV9JT1cgKCdIJywgMHgyMSwgZW11MTBrMV9meDgwMTBfdHJhbV90KQorI2RlZmluZSBTTkRSVl9FTVUxMEsxX0lPQ1RMX1RSQU1fUEVFSwlfSU9XUignSCcsIDB4MjIsIGVtdTEwazFfZng4MDEwX3RyYW1fdCkKKyNkZWZpbmUgU05EUlZfRU1VMTBLMV9JT0NUTF9QQ01fUE9LRQlfSU9XICgnSCcsIDB4MzAsIGVtdTEwazFfZng4MDEwX3BjbV90KQorI2RlZmluZSBTTkRSVl9FTVUxMEsxX0lPQ1RMX1BDTV9QRUVLCV9JT1dSKCdIJywgMHgzMSwgZW11MTBrMV9meDgwMTBfcGNtX3QpCisjZGVmaW5lIFNORFJWX0VNVTEwSzFfSU9DVExfU1RPUAlfSU8gICgnSCcsIDB4ODApCisjZGVmaW5lIFNORFJWX0VNVTEwSzFfSU9DVExfQ09OVElOVUUJX0lPICAoJ0gnLCAweDgxKQorI2RlZmluZSBTTkRSVl9FTVUxMEsxX0lPQ1RMX1pFUk9fVFJBTV9DT1VOVEVSIF9JTyAoJ0gnLCAweDgyKQorI2RlZmluZSBTTkRSVl9FTVUxMEsxX0lPQ1RMX1NJTkdMRV9TVEVQCV9JT1cgKCdIJywgMHg4MywgaW50KQorI2RlZmluZSBTTkRSVl9FTVUxMEsxX0lPQ1RMX0RCR19SRUFECV9JT1IgKCdIJywgMHg4NCwgaW50KQorCisjZW5kaWYJLyogX19TT1VORF9FTVUxMEsxX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvZW11MTBrMV9zeW50aC5oIGIvaW5jbHVkZS9zb3VuZC9lbXUxMGsxX3N5bnRoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGYwZGYxZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvc291bmQvZW11MTBrMV9zeW50aC5oCkBAIC0wLDAgKzEsMzkgQEAKKyNpZm5kZWYgX19FTVUxMEsxX1NZTlRIX0gKKyNkZWZpbmUgX19FTVUxMEsxX1NZTlRIX0gKKy8qCisgKiAgRGVmaW5lcyBmb3IgdGhlIEVtdTEwazEgV2F2ZVRhYmxlIHN5bnRoCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMCBUYWthc2hpIEl3YWkgPHRpd2FpQHN1c2UuZGU+CisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlICJlbXUxMGsxLmgiCisjaW5jbHVkZSAiZW11eF9zeW50aC5oIgorCisvKiBzZXF1ZW5jZXIgZGV2aWNlIGlkICovCisjZGVmaW5lIFNORFJWX1NFUV9ERVZfSURfRU1VMTBLMV9TWU5USAkiZW11MTBrMS1zeW50aCIKKworLyogYXJndW1lbnQgZm9yIHNuZF9zZXFfZGV2aWNlX25ldyAqLwordHlwZWRlZiBzdHJ1Y3Qgc25kX2VtdTEwazFfc3ludGhfYXJnIHsKKwllbXUxMGsxX3QgKmh3cHRyOwkvKiBjaGlwICovCisJaW50IGluZGV4OwkJLyogc2VxdWVuY2VyIGNsaWVudCBpbmRleCAqLworCWludCBzZXFfcG9ydHM7CQkvKiBudW1iZXIgb2Ygc2VxdWVuY2VyIHBvcnRzIHRvIGJlIGNyZWF0ZWQgKi8KKwlpbnQgbWF4X3ZvaWNlczsJCS8qIG1heGltdW0gbnVtYmVyIG9mIHZvaWNlcyBmb3Igd2F2ZXRhYmxlICovCit9IHNuZF9lbXUxMGsxX3N5bnRoX2FyZ190OworCisjZGVmaW5lIEVNVTEwSzFfTUFYX01FTVNJWkUJKDMyICogMTAyNCAqIDEwMjQpIC8qIDMyTUIgKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL2VtdTgwMDAuaCBiL2luY2x1ZGUvc291bmQvZW11ODAwMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzNjJjNTQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3NvdW5kL2VtdTgwMDAuaApAQCAtMCwwICsxLDEyMCBAQAorI2lmbmRlZiBfX1NPVU5EX0VNVTgwMDBfSAorI2RlZmluZSBfX1NPVU5EX0VNVTgwMDBfSAorLyoKKyAqICBEZWZpbmVzIGZvciB0aGUgZW11ODAwMCAoQVdFMzIvNjQpCisgKgorICogIENvcHlyaWdodCAoQykgMTk5OSBTdGV2ZSBSYXRjbGlmZmUKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBUYWthc2hpIEl3YWkgPHRpd2FpQHN1c2UuZGU+CisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlICJlbXV4X3N5bnRoLmgiCisjaW5jbHVkZSAic2VxX2tlcm5lbC5oIgorCisvKgorICogSGFyZHdhcmUgcGFyYW1ldGVycy4KKyAqLworI2RlZmluZSBFTVU4MDAwX01BWF9EUkFNICgyOCAqIDEwMjQgKiAxMDI0KSAvKiBNYXggb24tYm9hcmQgbWVtIGlzIDI4TWIgPz8/Ki8KKyNkZWZpbmUgRU1VODAwMF9EUkFNX09GRlNFVCAweDIwMDAwMAkvKiBCZWdpbm5pbmcgb2Ygb24gYm9hcmQgcmFtICovCisjZGVmaW5lIEVNVTgwMDBfQ0hBTk5FTFMgICAzMgkvKiBOdW1iZXIgb2YgaGFyZHdhcmUgY2hhbm5lbHMgKi8KKyNkZWZpbmUgRU1VODAwMF9EUkFNX1ZPSUNFUwkzMAkvKiBudW1iZXIgb2Ygbm9ybWFsIHZvaWNlcyAqLworCisvKiBGbGFncyB0byBzZXQgYSBkbWEgY2hhbm5lbCB0byByZWFkIG9yIHdyaXRlICovCisjZGVmaW5lIEVNVTgwMDBfUkFNX1JFQUQgICAwCisjZGVmaW5lIEVNVTgwMDBfUkFNX1dSSVRFICAxCisjZGVmaW5lIEVNVTgwMDBfUkFNX0NMT1NFICAyCisjZGVmaW5lIEVNVTgwMDBfUkFNX01PREVfTUFTSwkweDAzCisjZGVmaW5lIEVNVTgwMDBfUkFNX1JJR0hUCTB4MTAJLyogdXNlICdyaWdodCcgRE1BIGNoYW5uZWwgKi8KKworZW51bSB7CisJRU1VODAwMF9DT05UUk9MX0JBU1MgPSAwLAorCUVNVTgwMDBfQ09OVFJPTF9UUkVCTEUsCisJRU1VODAwMF9DT05UUk9MX0NIT1JVU19NT0RFLAorCUVNVTgwMDBfQ09OVFJPTF9SRVZFUkJfTU9ERSwKKwlFTVU4MDAwX0NPTlRST0xfRk1fQ0hPUlVTX0RFUFRILAorCUVNVTgwMDBfQ09OVFJPTF9GTV9SRVZFUkJfREVQVEgsCisJRU1VODAwMF9OVU1fQ09OVFJPTFMsCit9OworCisvKgorICogU3RydWN0dXJlIHRvIGhvbGQgYWxsIHN0YXRlIGluZm9ybWF0aW9uIGZvciB0aGUgZW11ODAwMCBkcml2ZXIuCisgKgorICogTm90ZSAxOiBUaGUgY2hpcCBzdXBwb3J0cyAzMiBjaGFubmVscyBpbiBoYXJkd2FyZSB0aGlzIGlzIG1heF9jaGFubmVscworICogc29tZSBvZiB0aGUgY2hhbm5lbHMgbWF5IGJlIHVzZWQgZm9yIG90aGVyIHRoaW5ncyBzbyBtYXhfY2hhbm5lbHMgaXMKKyAqIHRoZSBudW1iZXIgaW4gdXNlIGZvciB3YXZlIHZvaWNlcy4KKyAqLwordHlwZWRlZiBzdHJ1Y3Qgc25kX2VtdTgwMDAgeworCisJc25kX2VtdXhfdCAqZW11OworCisJaW50IGluZGV4OwkJLyogc2VxdWVuY2VyIGNsaWVudCBpbmRleCAqLworCWludCBzZXFfcG9ydHM7CQkvKiBudW1iZXIgb2Ygc2VxdWVuY2VyIHBvcnRzICovCisJaW50IGZtX2Nob3J1c19kZXB0aDsJLyogRk0gT1BMMyBjaG9ydXMgZGVwdGggKi8KKwlpbnQgZm1fcmV2ZXJiX2RlcHRoOwkvKiBGTSBPUEwzIHJldmVyYiBkZXB0aCAqLworCisJaW50IG1lbV9zaXplOwkJLyogbWVtb3J5IHNpemUgKi8KKwl1bnNpZ25lZCBsb25nIHBvcnQxOwkvKiBQb3J0IHVzdWFsbHkgYmFzZSswICovCisJdW5zaWduZWQgbG9uZyBwb3J0MjsJLyogUG9ydCB1c3VhbGx5IGF0IGJhc2UrMHg0MDAgKi8KKwl1bnNpZ25lZCBsb25nIHBvcnQzOwkvKiBQb3J0IHVzdWFsbHkgYXQgYmFzZSsweDgwMCAqLworCXN0cnVjdCByZXNvdXJjZSAqcmVzX3BvcnQxOworCXN0cnVjdCByZXNvdXJjZSAqcmVzX3BvcnQyOworCXN0cnVjdCByZXNvdXJjZSAqcmVzX3BvcnQzOworCXVuc2lnbmVkIHNob3J0IGxhc3RfcmVnOy8qIExhc3QgcmVnaXN0ZXIgY29tbWFuZCAqLworCXNwaW5sb2NrX3QgcmVnX2xvY2s7CisKKwlpbnQgZHJhbV9jaGVja2VkOworCisJc25kX2NhcmRfdCAqY2FyZDsJCS8qIFRoZSBjYXJkIHRoYXQgdGhpcyBiZWxvbmdzIHRvICovCisKKwlpbnQgY2hvcnVzX21vZGU7CisJaW50IHJldmVyYl9tb2RlOworCWludCBiYXNzX2xldmVsOworCWludCB0cmVibGVfbGV2ZWw7CisKKwlzbmRfdXRpbF9tZW1oZHJfdCAqbWVtaGRyOworCisJc3BpbmxvY2tfdCBjb250cm9sX2xvY2s7CisJc25kX2tjb250cm9sX3QgKmNvbnRyb2xzW0VNVTgwMDBfTlVNX0NPTlRST0xTXTsKKworCXNuZF9wY21fdCAqcGNtOyAvKiBwY20gb24gZW11ODAwMCB3YXZldGFibGUgKi8KKworfSBlbXU4MDAwX3Q7CisKKy8qIHNlcXVlbmNlciBkZXZpY2UgaWQgKi8KKyNkZWZpbmUgU05EUlZfU0VRX0RFVl9JRF9FTVU4MDAwCSJlbXU4MDAwLXN5bnRoIgorCisKKy8qIGV4cG9ydGVkIGZ1bmN0aW9ucyAqLworaW50IHNuZF9lbXU4MDAwX25ldyhzbmRfY2FyZF90ICpjYXJkLCBpbnQgZGV2aWNlLCBsb25nIHBvcnQsIGludCBzZXFfcG9ydHMsIHNuZF9zZXFfZGV2aWNlX3QgKipyZXQpOwordm9pZCBzbmRfZW11ODAwMF9wb2tlKGVtdTgwMDBfdCAqZW11LCB1bnNpZ25lZCBpbnQgcG9ydCwgdW5zaWduZWQgaW50IHJlZywKKwkJICAgICAgdW5zaWduZWQgaW50IHZhbCk7Cit1bnNpZ25lZCBzaG9ydCBzbmRfZW11ODAwMF9wZWVrKGVtdTgwMDBfdCAqZW11LCB1bnNpZ25lZCBpbnQgcG9ydCwKKwkJCQl1bnNpZ25lZCBpbnQgcmVnKTsKK3ZvaWQgc25kX2VtdTgwMDBfcG9rZV9kdyhlbXU4MDAwX3QgKmVtdSwgdW5zaWduZWQgaW50IHBvcnQsIHVuc2lnbmVkIGludCByZWcsCisJCQkgdW5zaWduZWQgaW50IHZhbCk7Cit1bnNpZ25lZCBpbnQgc25kX2VtdTgwMDBfcGVla19kdyhlbXU4MDAwX3QgKmVtdSwgdW5zaWduZWQgaW50IHBvcnQsCisJCQkJIHVuc2lnbmVkIGludCByZWcpOwordm9pZCBzbmRfZW11ODAwMF9kbWFfY2hhbihlbXU4MDAwX3QgKmVtdSwgaW50IGNoLCBpbnQgbW9kZSk7CisKK3ZvaWQgc25kX2VtdTgwMDBfaW5pdF9mbShlbXU4MDAwX3QgKmVtdSk7CisKK3ZvaWQgc25kX2VtdTgwMDBfdXBkYXRlX2Nob3J1c19tb2RlKGVtdTgwMDBfdCAqZW11KTsKK3ZvaWQgc25kX2VtdTgwMDBfdXBkYXRlX3JldmVyYl9tb2RlKGVtdTgwMDBfdCAqZW11KTsKK3ZvaWQgc25kX2VtdTgwMDBfdXBkYXRlX2VxdWFsaXplcihlbXU4MDAwX3QgKmVtdSk7CitpbnQgc25kX2VtdTgwMDBfbG9hZF9jaG9ydXNfZngoZW11ODAwMF90ICplbXUsIGludCBtb2RlLCBjb25zdCB2b2lkIF9fdXNlciAqYnVmLCBsb25nIGxlbik7CitpbnQgc25kX2VtdTgwMDBfbG9hZF9yZXZlcmJfZngoZW11ODAwMF90ICplbXUsIGludCBtb2RlLCBjb25zdCB2b2lkIF9fdXNlciAqYnVmLCBsb25nIGxlbik7CisKKyNlbmRpZiAvKiBfX1NPVU5EX0VNVTgwMDBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9lbXU4MDAwX3JlZy5oIGIvaW5jbHVkZS9zb3VuZC9lbXU4MDAwX3JlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiOTgyN2EKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3NvdW5kL2VtdTgwMDBfcmVnLmgKQEAgLTAsMCArMSwyMDcgQEAKKyNpZm5kZWYgX19TT1VORF9FTVU4MDAwX1JFR19ICisjZGVmaW5lIF9fU09VTkRfRU1VODAwMF9SRUdfSAorLyoKKyAqICBSZWdpc3RlciBvcGVyYXRpb25zIGZvciB0aGUgRU1VODAwMAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTkgU3RldmUgUmF0Y2xpZmZlCisgKgorICogIEJhc2VkIG9uIGF3ZV93YXZlLmMgYnkgVGFrYXNoaSBJd2FpCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICoKKyAqLworCisvKgorICogRGF0YSBwb3J0IGFkZHJlc3NlcyByZWxhdGl2ZSB0byB0aGUgRU1VIGJhc2UuCisgKi8KKyNkZWZpbmUgRU1VODAwMF9EQVRBMChlKSAgICAoKGUpLT5wb3J0MSkKKyNkZWZpbmUgRU1VODAwMF9EQVRBMShlKSAgICAoKGUpLT5wb3J0MikKKyNkZWZpbmUgRU1VODAwMF9EQVRBMihlKSAgICAoKGUpLT5wb3J0MisyKQorI2RlZmluZSBFTVU4MDAwX0RBVEEzKGUpICAgICgoZSktPnBvcnQzKQorI2RlZmluZSBFTVU4MDAwX1BUUihlKSAgICAgICgoZSktPnBvcnQzKzIpCisKKy8qCisgKiBNYWtlIGEgY29tbWFuZCBmcm9tIGEgcmVnaXN0ZXIgYW5kIGNoYW5uZWwuCisgKi8KKyNkZWZpbmUgRU1VODAwMF9DTUQocmVnLCBjaGFuKSAoKHJlZyk8PDUgfCAoY2hhbikpCisKKy8qCisgKiBDb21tYW5kcyB0byByZWFkIGFuZCB3cml0ZSB0aGUgRU1VODAwMCByZWdpc3RlcnMuCisgKiBUaGVzZSBtYWNyb3Mgc2hvdWxkIGJlIHVzZWQgZm9yIGFsbCByZWdpc3RlciBhY2Nlc3Nlcy4KKyAqLworI2RlZmluZSBFTVU4MDAwX0NQRl9SRUFEKGVtdSwgY2hhbikgXAorCXNuZF9lbXU4MDAwX3BlZWtfZHcoKGVtdSksIEVNVTgwMDBfREFUQTAoZW11KSwgRU1VODAwMF9DTUQoMCwgKGNoYW4pKSkKKyNkZWZpbmUgRU1VODAwMF9QVFJYX1JFQUQoZW11LCBjaGFuKSBcCisJc25kX2VtdTgwMDBfcGVla19kdygoZW11KSwgRU1VODAwMF9EQVRBMChlbXUpLCBFTVU4MDAwX0NNRCgxLCAoY2hhbikpKQorI2RlZmluZSBFTVU4MDAwX0NWQ0ZfUkVBRChlbXUsIGNoYW4pIFwKKwlzbmRfZW11ODAwMF9wZWVrX2R3KChlbXUpLCBFTVU4MDAwX0RBVEEwKGVtdSksIEVNVTgwMDBfQ01EKDIsIChjaGFuKSkpCisjZGVmaW5lIEVNVTgwMDBfVlRGVF9SRUFEKGVtdSwgY2hhbikgXAorCXNuZF9lbXU4MDAwX3BlZWtfZHcoKGVtdSksIEVNVTgwMDBfREFUQTAoZW11KSwgRU1VODAwMF9DTUQoMywgKGNoYW4pKSkKKyNkZWZpbmUgRU1VODAwMF9QU1NUX1JFQUQoZW11LCBjaGFuKSBcCisJc25kX2VtdTgwMDBfcGVla19kdygoZW11KSwgRU1VODAwMF9EQVRBMChlbXUpLCBFTVU4MDAwX0NNRCg2LCAoY2hhbikpKQorI2RlZmluZSBFTVU4MDAwX0NTTF9SRUFEKGVtdSwgY2hhbikgXAorCXNuZF9lbXU4MDAwX3BlZWtfZHcoKGVtdSksIEVNVTgwMDBfREFUQTAoZW11KSwgRU1VODAwMF9DTUQoNywgKGNoYW4pKSkKKyNkZWZpbmUgRU1VODAwMF9DQ0NBX1JFQUQoZW11LCBjaGFuKSBcCisJc25kX2VtdTgwMDBfcGVla19kdygoZW11KSwgRU1VODAwMF9EQVRBMShlbXUpLCBFTVU4MDAwX0NNRCgwLCAoY2hhbikpKQorI2RlZmluZSBFTVU4MDAwX0hXQ0Y0X1JFQUQoZW11KSBcCisJc25kX2VtdTgwMDBfcGVla19kdygoZW11KSwgRU1VODAwMF9EQVRBMShlbXUpLCBFTVU4MDAwX0NNRCgxLCA5KSkKKyNkZWZpbmUgRU1VODAwMF9IV0NGNV9SRUFEKGVtdSkgXAorCXNuZF9lbXU4MDAwX3BlZWtfZHcoKGVtdSksIEVNVTgwMDBfREFUQTEoZW11KSwgRU1VODAwMF9DTUQoMSwgMTApKQorI2RlZmluZSBFTVU4MDAwX0hXQ0Y2X1JFQUQoZW11KSBcCisJc25kX2VtdTgwMDBfcGVla19kdygoZW11KSwgRU1VODAwMF9EQVRBMShlbXUpLCBFTVU4MDAwX0NNRCgxLCAxMykpCisjZGVmaW5lIEVNVTgwMDBfU01BTFJfUkVBRChlbXUpIFwKKwlzbmRfZW11ODAwMF9wZWVrX2R3KChlbXUpLCBFTVU4MDAwX0RBVEExKGVtdSksIEVNVTgwMDBfQ01EKDEsIDIwKSkKKyNkZWZpbmUgRU1VODAwMF9TTUFSUl9SRUFEKGVtdSkgXAorCXNuZF9lbXU4MDAwX3BlZWtfZHcoKGVtdSksIEVNVTgwMDBfREFUQTEoZW11KSwgRU1VODAwMF9DTUQoMSwgMjEpKQorI2RlZmluZSBFTVU4MDAwX1NNQUxXX1JFQUQoZW11KSBcCisJc25kX2VtdTgwMDBfcGVla19kdygoZW11KSwgRU1VODAwMF9EQVRBMShlbXUpLCBFTVU4MDAwX0NNRCgxLCAyMikpCisjZGVmaW5lIEVNVTgwMDBfU01BUldfUkVBRChlbXUpIFwKKwlzbmRfZW11ODAwMF9wZWVrX2R3KChlbXUpLCBFTVU4MDAwX0RBVEExKGVtdSksIEVNVTgwMDBfQ01EKDEsIDIzKSkKKyNkZWZpbmUgRU1VODAwMF9TTUxEX1JFQUQoZW11KSBcCisJc25kX2VtdTgwMDBfcGVlaygoZW11KSwgRU1VODAwMF9EQVRBMShlbXUpLCBFTVU4MDAwX0NNRCgxLCAyNikpCisjZGVmaW5lIEVNVTgwMDBfU01SRF9SRUFEKGVtdSkgXAorCXNuZF9lbXU4MDAwX3BlZWsoKGVtdSksIEVNVTgwMDBfREFUQTIoZW11KSwgRU1VODAwMF9DTUQoMSwgMjYpKQorI2RlZmluZSBFTVU4MDAwX1dDX1JFQUQoZW11KSBcCisJc25kX2VtdTgwMDBfcGVlaygoZW11KSwgRU1VODAwMF9EQVRBMihlbXUpLCBFTVU4MDAwX0NNRCgxLCAyNykpCisjZGVmaW5lIEVNVTgwMDBfSFdDRjFfUkVBRChlbXUpIFwKKwlzbmRfZW11ODAwMF9wZWVrKChlbXUpLCBFTVU4MDAwX0RBVEExKGVtdSksIEVNVTgwMDBfQ01EKDEsIDI5KSkKKyNkZWZpbmUgRU1VODAwMF9IV0NGMl9SRUFEKGVtdSkgXAorCXNuZF9lbXU4MDAwX3BlZWsoKGVtdSksIEVNVTgwMDBfREFUQTEoZW11KSwgRU1VODAwMF9DTUQoMSwgMzApKQorI2RlZmluZSBFTVU4MDAwX0hXQ0YzX1JFQUQoZW11KSBcCisJc25kX2VtdTgwMDBfcGVlaygoZW11KSwgRU1VODAwMF9EQVRBMShlbXUpLCBFTVU4MDAwX0NNRCgxLCAzMSkpCisjZGVmaW5lIEVNVTgwMDBfSU5JVDFfUkVBRChlbXUsIGNoYW4pIFwKKwlzbmRfZW11ODAwMF9wZWVrKChlbXUpLCBFTVU4MDAwX0RBVEExKGVtdSksIEVNVTgwMDBfQ01EKDIsIChjaGFuKSkpCisjZGVmaW5lIEVNVTgwMDBfSU5JVDJfUkVBRChlbXUsIGNoYW4pIFwKKwlzbmRfZW11ODAwMF9wZWVrKChlbXUpLCBFTVU4MDAwX0RBVEEyKGVtdSksIEVNVTgwMDBfQ01EKDIsIChjaGFuKSkpCisjZGVmaW5lIEVNVTgwMDBfSU5JVDNfUkVBRChlbXUsIGNoYW4pIFwKKwlzbmRfZW11ODAwMF9wZWVrKChlbXUpLCBFTVU4MDAwX0RBVEExKGVtdSksIEVNVTgwMDBfQ01EKDMsIChjaGFuKSkpCisjZGVmaW5lIEVNVTgwMDBfSU5JVDRfUkVBRChlbXUsIGNoYW4pIFwKKwlzbmRfZW11ODAwMF9wZWVrKChlbXUpLCBFTVU4MDAwX0RBVEEyKGVtdSksIEVNVTgwMDBfQ01EKDMsIChjaGFuKSkpCisjZGVmaW5lIEVNVTgwMDBfRU5WVk9MX1JFQUQoZW11LCBjaGFuKSBcCisJc25kX2VtdTgwMDBfcGVlaygoZW11KSwgRU1VODAwMF9EQVRBMShlbXUpLCBFTVU4MDAwX0NNRCg0LCAoY2hhbikpKQorI2RlZmluZSBFTVU4MDAwX0RDWVNVU1ZfUkVBRChlbXUsIGNoYW4pIFwKKwlzbmRfZW11ODAwMF9wZWVrKChlbXUpLCBFTVU4MDAwX0RBVEExKGVtdSksIEVNVTgwMDBfQ01EKDUsIChjaGFuKSkpCisjZGVmaW5lIEVNVTgwMDBfRU5WVkFMX1JFQUQoZW11LCBjaGFuKSBcCisJc25kX2VtdTgwMDBfcGVlaygoZW11KSwgRU1VODAwMF9EQVRBMShlbXUpLCBFTVU4MDAwX0NNRCg2LCAoY2hhbikpKQorI2RlZmluZSBFTVU4MDAwX0RDWVNVU19SRUFEKGVtdSwgY2hhbikgXAorCXNuZF9lbXU4MDAwX3BlZWsoKGVtdSksIEVNVTgwMDBfREFUQTEoZW11KSwgRU1VODAwMF9DTUQoNywgKGNoYW4pKSkKKyNkZWZpbmUgRU1VODAwMF9BVEtITERWX1JFQUQoZW11LCBjaGFuKSBcCisJc25kX2VtdTgwMDBfcGVlaygoZW11KSwgRU1VODAwMF9EQVRBMihlbXUpLCBFTVU4MDAwX0NNRCg0LCAoY2hhbikpKQorI2RlZmluZSBFTVU4MDAwX0xGTzFWQUxfUkVBRChlbXUsIGNoYW4pIFwKKwlzbmRfZW11ODAwMF9wZWVrKChlbXUpLCBFTVU4MDAwX0RBVEEyKGVtdSksIEVNVTgwMDBfQ01EKDUsIChjaGFuKSkpCisjZGVmaW5lIEVNVTgwMDBfQVRLSExEX1JFQUQoZW11LCBjaGFuKSBcCisJc25kX2VtdTgwMDBfcGVlaygoZW11KSwgRU1VODAwMF9EQVRBMihlbXUpLCBFTVU4MDAwX0NNRCg2LCAoY2hhbikpKQorI2RlZmluZSBFTVU4MDAwX0xGTzJWQUxfUkVBRChlbXUsIGNoYW4pIFwKKwlzbmRfZW11ODAwMF9wZWVrKChlbXUpLCBFTVU4MDAwX0RBVEEyKGVtdSksIEVNVTgwMDBfQ01EKDcsIChjaGFuKSkpCisjZGVmaW5lIEVNVTgwMDBfSVBfUkVBRChlbXUsIGNoYW4pIFwKKwlzbmRfZW11ODAwMF9wZWVrKChlbXUpLCBFTVU4MDAwX0RBVEEzKGVtdSksIEVNVTgwMDBfQ01EKDAsIChjaGFuKSkpCisjZGVmaW5lIEVNVTgwMDBfSUZBVE5fUkVBRChlbXUsIGNoYW4pIFwKKwlzbmRfZW11ODAwMF9wZWVrKChlbXUpLCBFTVU4MDAwX0RBVEEzKGVtdSksIEVNVTgwMDBfQ01EKDEsIChjaGFuKSkpCisjZGVmaW5lIEVNVTgwMDBfUEVGRV9SRUFEKGVtdSwgY2hhbikgXAorCXNuZF9lbXU4MDAwX3BlZWsoKGVtdSksIEVNVTgwMDBfREFUQTMoZW11KSwgRU1VODAwMF9DTUQoMiwgKGNoYW4pKSkKKyNkZWZpbmUgRU1VODAwMF9GTU1PRF9SRUFEKGVtdSwgY2hhbikgXAorCXNuZF9lbXU4MDAwX3BlZWsoKGVtdSksIEVNVTgwMDBfREFUQTMoZW11KSwgRU1VODAwMF9DTUQoMywgKGNoYW4pKSkKKyNkZWZpbmUgRU1VODAwMF9UUkVNRlJRX1JFQUQoZW11LCBjaGFuKSBcCisJc25kX2VtdTgwMDBfcGVlaygoZW11KSwgRU1VODAwMF9EQVRBMyhlbXUpLCBFTVU4MDAwX0NNRCg0LCAoY2hhbikpKQorI2RlZmluZSBFTVU4MDAwX0ZNMkZSUTJfUkVBRChlbXUsIGNoYW4pIFwKKwlzbmRfZW11ODAwMF9wZWVrKChlbXUpLCBFTVU4MDAwX0RBVEEzKGVtdSksIEVNVTgwMDBfQ01EKDUsIChjaGFuKSkpCisKKworI2RlZmluZSBFTVU4MDAwX0NQRl9XUklURShlbXUsIGNoYW4sIHZhbCkgXAorCXNuZF9lbXU4MDAwX3Bva2VfZHcoKGVtdSksIEVNVTgwMDBfREFUQTAoZW11KSwgRU1VODAwMF9DTUQoMCwgKGNoYW4pKSwgKHZhbCkpCisjZGVmaW5lIEVNVTgwMDBfUFRSWF9XUklURShlbXUsIGNoYW4sIHZhbCkgXAorCXNuZF9lbXU4MDAwX3Bva2VfZHcoKGVtdSksIEVNVTgwMDBfREFUQTAoZW11KSwgRU1VODAwMF9DTUQoMSwgKGNoYW4pKSwgKHZhbCkpCisjZGVmaW5lIEVNVTgwMDBfQ1ZDRl9XUklURShlbXUsIGNoYW4sIHZhbCkgXAorCXNuZF9lbXU4MDAwX3Bva2VfZHcoKGVtdSksIEVNVTgwMDBfREFUQTAoZW11KSwgRU1VODAwMF9DTUQoMiwgKGNoYW4pKSwgKHZhbCkpCisjZGVmaW5lIEVNVTgwMDBfVlRGVF9XUklURShlbXUsIGNoYW4sIHZhbCkgXAorCXNuZF9lbXU4MDAwX3Bva2VfZHcoKGVtdSksIEVNVTgwMDBfREFUQTAoZW11KSwgRU1VODAwMF9DTUQoMywgKGNoYW4pKSwgKHZhbCkpCisjZGVmaW5lIEVNVTgwMDBfUFNTVF9XUklURShlbXUsIGNoYW4sIHZhbCkgXAorCXNuZF9lbXU4MDAwX3Bva2VfZHcoKGVtdSksIEVNVTgwMDBfREFUQTAoZW11KSwgRU1VODAwMF9DTUQoNiwgKGNoYW4pKSwgKHZhbCkpCisjZGVmaW5lIEVNVTgwMDBfQ1NMX1dSSVRFKGVtdSwgY2hhbiwgdmFsKSBcCisJc25kX2VtdTgwMDBfcG9rZV9kdygoZW11KSwgRU1VODAwMF9EQVRBMChlbXUpLCBFTVU4MDAwX0NNRCg3LCAoY2hhbikpLCAodmFsKSkKKyNkZWZpbmUgRU1VODAwMF9DQ0NBX1dSSVRFKGVtdSwgY2hhbiwgdmFsKSBcCisJc25kX2VtdTgwMDBfcG9rZV9kdygoZW11KSwgRU1VODAwMF9EQVRBMShlbXUpLCBFTVU4MDAwX0NNRCgwLCAoY2hhbikpLCAodmFsKSkKKyNkZWZpbmUgRU1VODAwMF9IV0NGNF9XUklURShlbXUsIHZhbCkgXAorCXNuZF9lbXU4MDAwX3Bva2VfZHcoKGVtdSksIEVNVTgwMDBfREFUQTEoZW11KSwgRU1VODAwMF9DTUQoMSwgOSksICh2YWwpKQorI2RlZmluZSBFTVU4MDAwX0hXQ0Y1X1dSSVRFKGVtdSwgdmFsKSBcCisJc25kX2VtdTgwMDBfcG9rZV9kdygoZW11KSwgRU1VODAwMF9EQVRBMShlbXUpLCBFTVU4MDAwX0NNRCgxLCAxMCksICh2YWwpKQorI2RlZmluZSBFTVU4MDAwX0hXQ0Y2X1dSSVRFKGVtdSwgdmFsKSBcCisJc25kX2VtdTgwMDBfcG9rZV9kdygoZW11KSwgRU1VODAwMF9EQVRBMShlbXUpLCBFTVU4MDAwX0NNRCgxLCAxMyksICh2YWwpKQorLyogdGhpcyByZWdpc3RlciBpcyBub3QgZG9jdW1lbnRlZCAqLworI2RlZmluZSBFTVU4MDAwX0hXQ0Y3X1dSSVRFKGVtdSwgdmFsKSBcCisJc25kX2VtdTgwMDBfcG9rZV9kdygoZW11KSwgRU1VODAwMF9EQVRBMShlbXUpLCBFTVU4MDAwX0NNRCgxLCAxNCksICh2YWwpKQorI2RlZmluZSBFTVU4MDAwX1NNQUxSX1dSSVRFKGVtdSwgdmFsKSBcCisJc25kX2VtdTgwMDBfcG9rZV9kdygoZW11KSwgRU1VODAwMF9EQVRBMShlbXUpLCBFTVU4MDAwX0NNRCgxLCAyMCksICh2YWwpKQorI2RlZmluZSBFTVU4MDAwX1NNQVJSX1dSSVRFKGVtdSwgdmFsKSBcCisJc25kX2VtdTgwMDBfcG9rZV9kdygoZW11KSwgRU1VODAwMF9EQVRBMShlbXUpLCBFTVU4MDAwX0NNRCgxLCAyMSksICh2YWwpKQorI2RlZmluZSBFTVU4MDAwX1NNQUxXX1dSSVRFKGVtdSwgdmFsKSBcCisJc25kX2VtdTgwMDBfcG9rZV9kdygoZW11KSwgRU1VODAwMF9EQVRBMShlbXUpLCBFTVU4MDAwX0NNRCgxLCAyMiksICh2YWwpKQorI2RlZmluZSBFTVU4MDAwX1NNQVJXX1dSSVRFKGVtdSwgdmFsKSBcCisJc25kX2VtdTgwMDBfcG9rZV9kdygoZW11KSwgRU1VODAwMF9EQVRBMShlbXUpLCBFTVU4MDAwX0NNRCgxLCAyMyksICh2YWwpKQorI2RlZmluZSBFTVU4MDAwX1NNTERfV1JJVEUoZW11LCB2YWwpIFwKKwlzbmRfZW11ODAwMF9wb2tlKChlbXUpLCBFTVU4MDAwX0RBVEExKGVtdSksIEVNVTgwMDBfQ01EKDEsIDI2KSwgKHZhbCkpCisjZGVmaW5lIEVNVTgwMDBfU01SRF9XUklURShlbXUsIHZhbCkgXAorCXNuZF9lbXU4MDAwX3Bva2UoKGVtdSksIEVNVTgwMDBfREFUQTIoZW11KSwgRU1VODAwMF9DTUQoMSwgMjYpLCAodmFsKSkKKyNkZWZpbmUgRU1VODAwMF9XQ19XUklURShlbXUsIHZhbCkgXAorCXNuZF9lbXU4MDAwX3Bva2UoKGVtdSksIEVNVTgwMDBfREFUQTIoZW11KSwgRU1VODAwMF9DTUQoMSwgMjcpLCAodmFsKSkKKyNkZWZpbmUgRU1VODAwMF9IV0NGMV9XUklURShlbXUsIHZhbCkgXAorCXNuZF9lbXU4MDAwX3Bva2UoKGVtdSksIEVNVTgwMDBfREFUQTEoZW11KSwgRU1VODAwMF9DTUQoMSwgMjkpLCAodmFsKSkKKyNkZWZpbmUgRU1VODAwMF9IV0NGMl9XUklURShlbXUsIHZhbCkgXAorCXNuZF9lbXU4MDAwX3Bva2UoKGVtdSksIEVNVTgwMDBfREFUQTEoZW11KSwgRU1VODAwMF9DTUQoMSwgMzApLCAodmFsKSkKKyNkZWZpbmUgRU1VODAwMF9IV0NGM19XUklURShlbXUsIHZhbCkgXAorCXNuZF9lbXU4MDAwX3Bva2UoKGVtdSksIEVNVTgwMDBfREFUQTEoZW11KSwgRU1VODAwMF9DTUQoMSwgMzEpLCAodmFsKSkKKyNkZWZpbmUgRU1VODAwMF9JTklUMV9XUklURShlbXUsIGNoYW4sIHZhbCkgXAorCXNuZF9lbXU4MDAwX3Bva2UoKGVtdSksIEVNVTgwMDBfREFUQTEoZW11KSwgRU1VODAwMF9DTUQoMiwgKGNoYW4pKSwgKHZhbCkpCisjZGVmaW5lIEVNVTgwMDBfSU5JVDJfV1JJVEUoZW11LCBjaGFuLCB2YWwpIFwKKwlzbmRfZW11ODAwMF9wb2tlKChlbXUpLCBFTVU4MDAwX0RBVEEyKGVtdSksIEVNVTgwMDBfQ01EKDIsIChjaGFuKSksICh2YWwpKQorI2RlZmluZSBFTVU4MDAwX0lOSVQzX1dSSVRFKGVtdSwgY2hhbiwgdmFsKSBcCisJc25kX2VtdTgwMDBfcG9rZSgoZW11KSwgRU1VODAwMF9EQVRBMShlbXUpLCBFTVU4MDAwX0NNRCgzLCAoY2hhbikpLCAodmFsKSkKKyNkZWZpbmUgRU1VODAwMF9JTklUNF9XUklURShlbXUsIGNoYW4sIHZhbCkgXAorCXNuZF9lbXU4MDAwX3Bva2UoKGVtdSksIEVNVTgwMDBfREFUQTIoZW11KSwgRU1VODAwMF9DTUQoMywgKGNoYW4pKSwgKHZhbCkpCisjZGVmaW5lIEVNVTgwMDBfRU5WVk9MX1dSSVRFKGVtdSwgY2hhbiwgdmFsKSBcCisJc25kX2VtdTgwMDBfcG9rZSgoZW11KSwgRU1VODAwMF9EQVRBMShlbXUpLCBFTVU4MDAwX0NNRCg0LCAoY2hhbikpLCAodmFsKSkKKyNkZWZpbmUgRU1VODAwMF9EQ1lTVVNWX1dSSVRFKGVtdSwgY2hhbiwgdmFsKSBcCisJc25kX2VtdTgwMDBfcG9rZSgoZW11KSwgRU1VODAwMF9EQVRBMShlbXUpLCBFTVU4MDAwX0NNRCg1LCAoY2hhbikpLCAodmFsKSkKKyNkZWZpbmUgRU1VODAwMF9FTlZWQUxfV1JJVEUoZW11LCBjaGFuLCB2YWwpIFwKKwlzbmRfZW11ODAwMF9wb2tlKChlbXUpLCBFTVU4MDAwX0RBVEExKGVtdSksIEVNVTgwMDBfQ01EKDYsIChjaGFuKSksICh2YWwpKQorI2RlZmluZSBFTVU4MDAwX0RDWVNVU19XUklURShlbXUsIGNoYW4sIHZhbCkgXAorCXNuZF9lbXU4MDAwX3Bva2UoKGVtdSksIEVNVTgwMDBfREFUQTEoZW11KSwgRU1VODAwMF9DTUQoNywgKGNoYW4pKSwgKHZhbCkpCisjZGVmaW5lIEVNVTgwMDBfQVRLSExEVl9XUklURShlbXUsIGNoYW4sIHZhbCkgXAorCXNuZF9lbXU4MDAwX3Bva2UoKGVtdSksIEVNVTgwMDBfREFUQTIoZW11KSwgRU1VODAwMF9DTUQoNCwgKGNoYW4pKSwgKHZhbCkpCisjZGVmaW5lIEVNVTgwMDBfTEZPMVZBTF9XUklURShlbXUsIGNoYW4sIHZhbCkgXAorCXNuZF9lbXU4MDAwX3Bva2UoKGVtdSksIEVNVTgwMDBfREFUQTIoZW11KSwgRU1VODAwMF9DTUQoNSwgKGNoYW4pKSwgKHZhbCkpCisjZGVmaW5lIEVNVTgwMDBfQVRLSExEX1dSSVRFKGVtdSwgY2hhbiwgdmFsKSBcCisJc25kX2VtdTgwMDBfcG9rZSgoZW11KSwgRU1VODAwMF9EQVRBMihlbXUpLCBFTVU4MDAwX0NNRCg2LCAoY2hhbikpLCAodmFsKSkKKyNkZWZpbmUgRU1VODAwMF9MRk8yVkFMX1dSSVRFKGVtdSwgY2hhbiwgdmFsKSBcCisJc25kX2VtdTgwMDBfcG9rZSgoZW11KSwgRU1VODAwMF9EQVRBMihlbXUpLCBFTVU4MDAwX0NNRCg3LCAoY2hhbikpLCAodmFsKSkKKyNkZWZpbmUgRU1VODAwMF9JUF9XUklURShlbXUsIGNoYW4sIHZhbCkgXAorCXNuZF9lbXU4MDAwX3Bva2UoKGVtdSksIEVNVTgwMDBfREFUQTMoZW11KSwgRU1VODAwMF9DTUQoMCwgKGNoYW4pKSwgKHZhbCkpCisjZGVmaW5lIEVNVTgwMDBfSUZBVE5fV1JJVEUoZW11LCBjaGFuLCB2YWwpIFwKKwlzbmRfZW11ODAwMF9wb2tlKChlbXUpLCBFTVU4MDAwX0RBVEEzKGVtdSksIEVNVTgwMDBfQ01EKDEsIChjaGFuKSksICh2YWwpKQorI2RlZmluZSBFTVU4MDAwX1BFRkVfV1JJVEUoZW11LCBjaGFuLCB2YWwpIFwKKwlzbmRfZW11ODAwMF9wb2tlKChlbXUpLCBFTVU4MDAwX0RBVEEzKGVtdSksIEVNVTgwMDBfQ01EKDIsIChjaGFuKSksICh2YWwpKQorI2RlZmluZSBFTVU4MDAwX0ZNTU9EX1dSSVRFKGVtdSwgY2hhbiwgdmFsKSBcCisJc25kX2VtdTgwMDBfcG9rZSgoZW11KSwgRU1VODAwMF9EQVRBMyhlbXUpLCBFTVU4MDAwX0NNRCgzLCAoY2hhbikpLCAodmFsKSkKKyNkZWZpbmUgRU1VODAwMF9UUkVNRlJRX1dSSVRFKGVtdSwgY2hhbiwgdmFsKSBcCisJc25kX2VtdTgwMDBfcG9rZSgoZW11KSwgRU1VODAwMF9EQVRBMyhlbXUpLCBFTVU4MDAwX0NNRCg0LCAoY2hhbikpLCAodmFsKSkKKyNkZWZpbmUgRU1VODAwMF9GTTJGUlEyX1dSSVRFKGVtdSwgY2hhbiwgdmFsKSBcCisJc25kX2VtdTgwMDBfcG9rZSgoZW11KSwgRU1VODAwMF9EQVRBMyhlbXUpLCBFTVU4MDAwX0NNRCg1LCAoY2hhbikpLCAodmFsKSkKKworI2RlZmluZSBFTVU4MDAwXzAwODBfV1JJVEUoZW11LCBjaGFuLCB2YWwpIFwKKwlzbmRfZW11ODAwMF9wb2tlX2R3KChlbXUpLCBFTVU4MDAwX0RBVEEwKGVtdSksIEVNVTgwMDBfQ01EKDQsIChjaGFuKSksICh2YWwpKQorI2RlZmluZSBFTVU4MDAwXzAwQTBfV1JJVEUoZW11LCBjaGFuLCB2YWwpIFwKKwlzbmRfZW11ODAwMF9wb2tlX2R3KChlbXUpLCBFTVU4MDAwX0RBVEEwKGVtdSksIEVNVTgwMDBfQ01EKDUsIChjaGFuKSksICh2YWwpKQorCisjZW5kaWYgLyogX19TT1VORF9FTVU4MDAwX1JFR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL2VtdXhfbGVnYWN5LmggYi9pbmNsdWRlL3NvdW5kL2VtdXhfbGVnYWN5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZlM2RhMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvc291bmQvZW11eF9sZWdhY3kuaApAQCAtMCwwICsxLDE0NiBAQAorI2lmbmRlZiBfX1NPVU5EX0VNVVhfTEVHQUNZX0gKKyNkZWZpbmUgX19TT1VORF9FTVVYX0xFR0FDWV9ICisKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDAgVGFrYXNoaSBJd2FpIDx0aXdhaUBzdXNlLmRlPgorICoKKyAqICBEZWZpbml0aW9ucyBvZiBPU1MgY29tcGF0aWJsZSBoZWFkZXJzIGZvciBFbXU4MDAwIGRldmljZSBpbmZvcm1hdGlvbnMKKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKgorICovCisKKyNpbmNsdWRlICJzZXFfb3NzX2xlZ2FjeS5oIgorCisvKgorICogYXdlIGhhcmR3YXJlIGNvbnRyb2xzCisgKi8KKworI2RlZmluZSBfRU1VWF9PU1NfREVCVUdfTU9ERQkJMHgwMAorI2RlZmluZSBfRU1VWF9PU1NfUkVWRVJCX01PREUJCTB4MDEKKyNkZWZpbmUgX0VNVVhfT1NTX0NIT1JVU19NT0RFCQkweDAyCisjZGVmaW5lIF9FTVVYX09TU19SRU1PVkVfTEFTVF9TQU1QTEVTCTB4MDMKKyNkZWZpbmUgX0VNVVhfT1NTX0lOSVRJQUxJWkVfQ0hJUAkweDA0CisjZGVmaW5lIF9FTVVYX09TU19TRU5EX0VGRkVDVAkJMHgwNQorI2RlZmluZSBfRU1VWF9PU1NfVEVSTUlOQVRFX0NIQU5ORUwJMHgwNgorI2RlZmluZSBfRU1VWF9PU1NfVEVSTUlOQVRFX0FMTAkJMHgwNworI2RlZmluZSBfRU1VWF9PU1NfSU5JVElBTF9WT0xVTUUJMHgwOAorI2RlZmluZSBfRU1VWF9PU1NfSU5JVElBTF9BVFRFTglfRU1VWF9PU1NfSU5JVElBTF9WT0xVTUUKKyNkZWZpbmUgX0VNVVhfT1NTX1JFU0VUX0NIQU5ORUwJCTB4MDkKKyNkZWZpbmUgX0VNVVhfT1NTX0NIQU5ORUxfTU9ERQkJMHgwYQorI2RlZmluZSBfRU1VWF9PU1NfRFJVTV9DSEFOTkVMUwkJMHgwYgorI2RlZmluZSBfRU1VWF9PU1NfTUlTQ19NT0RFCQkweDBjCisjZGVmaW5lIF9FTVVYX09TU19SRUxFQVNFX0FMTAkJMHgwZAorI2RlZmluZSBfRU1VWF9PU1NfTk9URU9GRl9BTEwJCTB4MGUKKyNkZWZpbmUgX0VNVVhfT1NTX0NITl9QUkVTU1VSRQkJMHgwZgorI2RlZmluZSBfRU1VWF9PU1NfRVFVQUxJWkVSCQkweDExCisKKyNkZWZpbmUgX0VNVVhfT1NTX01PREVfRkxBRwkJMHg4MAorI2RlZmluZSBfRU1VWF9PU1NfQ09PS0VEX0ZMQUcJCTB4NDAJLyogbm90IHN1cHBvcnRlZCAqLworI2RlZmluZSBfRU1VWF9PU1NfTU9ERV9WQUxVRV9NQVNLCTB4M0YKKworCisvKgorICogbW9kZSB0eXBlIGRlZmluaXRpb25zCisgKi8KK2VudW0geworLyogMCovCUVNVVhfTURfRVhDTFVTSVZFX09GRiwJLyogb2Jzb2xldGUgKi8KKy8qIDEqLwlFTVVYX01EX0VYQ0xVU0lWRV9PTiwJLyogb2Jzb2xldGUgKi8KKy8qIDIqLwlFTVVYX01EX1ZFUlNJT04sCQkvKiByZWFkIG9ubHkgKi8KKy8qIDMqLwlFTVVYX01EX0VYQ0xVU0lWRV9TT1VORCwJLyogMC8xOiBleGNsdXNpdmUgbm90ZSBvbiAoZGVmYXVsdD0xKSAqLworLyogNCovCUVNVVhfTURfUkVBTFRJTUVfUEFOLAkvKiAwLzE6IGRvIHJlYWx0aW1lIHBhbiBjaGFuZ2UgKGRlZmF1bHQ9MSkgKi8KKy8qIDUqLwlFTVVYX01EX0dVU19CQU5LLAkvKiBiYW5rIG51bWJlciBmb3IgR1VTIHBhdGNoZXMgKGRlZmF1bHQ9MCkgKi8KKy8qIDYqLwlFTVVYX01EX0tFRVBfRUZGRUNULAkvKiAwLzE6IGtlZXAgZWZmZWN0IHZhbHVlcywgKGRlZmF1bHQ9MCkgKi8KKy8qIDcqLwlFTVVYX01EX1pFUk9fQVRURU4sCS8qIGF0dGVudWF0aW9uIG9mIG1heCB2b2x1bWUgKGRlZmF1bHQ9MzIpICovCisvKiA4Ki8JRU1VWF9NRF9DSE5fUFJJT1IsCS8qIDAvMTogc2V0IE1JREkgY2hhbm5lbCBwcmlvcml0eSBtb2RlIChkZWZhdWx0PTEpICovCisvKiA5Ki8JRU1VWF9NRF9NT0RfU0VOU0UsCS8qIGludGVnZXI6IG1vZHdoZWVsIHNlbnNpdGl2aXR5IChkZWY9MTgpICovCisvKjEwKi8JRU1VWF9NRF9ERUZfUFJFU0VULAkvKiBpbnRlZ2VyOiBkZWZhdWx0IHByZXNldCBudW1iZXIgKGRlZj0wKSAqLworLyoxMSovCUVNVVhfTURfREVGX0JBTkssCS8qIGludGVnZXI6IGRlZmF1bHQgYmFuayBudW1iZXIgKGRlZj0wKSAqLworLyoxMiovCUVNVVhfTURfREVGX0RSVU0sCS8qIGludGVnZXI6IGRlZmF1bHQgZHJ1bXNldCBudW1iZXIgKGRlZj0wKSAqLworLyoxMyovCUVNVVhfTURfVE9HR0xFX0RSVU1fQkFOSywgLyogMC8xOiB0b2dnbGUgZHJ1bSBmbGFnIHdpdGggYmFuayMgKGRlZj0wKSAqLworLyoxNCovCUVNVVhfTURfTkVXX1ZPTFVNRV9DQUxDLAkvKiAwLzE6IHZvbHVtZSBjYWxjdWxhdGlvbiBtb2RlIChkZWY9MSkgKi8KKy8qMTUqLwlFTVVYX01EX0NIT1JVU19NT0RFLAkvKiBpbnRlZ2VyOiBjaG9ydXMgbW9kZSAoZGVmPTIpICovCisvKjE2Ki8JRU1VWF9NRF9SRVZFUkJfTU9ERSwJLyogaW50ZWdlcjogY2hvcnVzIG1vZGUgKGRlZj00KSAqLworLyoxNyovCUVNVVhfTURfQkFTU19MRVZFTCwJLyogaW50ZWdlcjogYmFzcyBsZXZlbCAoZGVmPTUpICovCisvKjE4Ki8JRU1VWF9NRF9UUkVCTEVfTEVWRUwsCS8qIGludGVnZXI6IHRyZWJsZSBsZXZlbCAoZGVmPTkpICovCisvKjE5Ki8JRU1VWF9NRF9ERUJVR19NT0RFLAkvKiBpbnRlZ2VyOiBkZWJ1ZyBsZXZlbCAoZGVmPTApICovCisvKjIwKi8JRU1VWF9NRF9QQU5fRVhDSEFOR0UsCS8qIDAvMTogZXhjaGFuZ2UgcGFubmluZyBkaXJlY3Rpb24gKGRlZj0wKSAqLworCUVNVVhfTURfRU5ELAorfTsKKworCisvKgorICogZWZmZWN0IHBhcmFtZXRlcnMKKyAqLworZW51bSB7CisKKy8qIG1vZHVsYXRpb24gZW52ZWxvcGUgcGFyYW1ldGVycyAqLworLyogMCovCUVNVVhfRlhfRU5WMV9ERUxBWSwJLyogV09SRDogRU5WVkFMICovCisvKiAxKi8JRU1VWF9GWF9FTlYxX0FUVEFDSywJLyogQllURTogdXAgQVRLSExEICovCisvKiAyKi8JRU1VWF9GWF9FTlYxX0hPTEQsCS8qIEJZVEU6IGx3IEFUS0hMRCAqLworLyogMyovCUVNVVhfRlhfRU5WMV9ERUNBWSwJLyogQllURTogbHcgRENZU1VTICovCisvKiA0Ki8JRU1VWF9GWF9FTlYxX1JFTEVBU0UsCS8qIEJZVEU6IGx3IERDWVNVUyAqLworLyogNSovCUVNVVhfRlhfRU5WMV9TVVNUQUlOLAkvKiBCWVRFOiB1cCBEQ1lTVVMgKi8KKy8qIDYqLwlFTVVYX0ZYX0VOVjFfUElUQ0gsCS8qIEJZVEU6IHVwIFBFRkUgKi8KKy8qIDcqLwlFTVVYX0ZYX0VOVjFfQ1VUT0ZGLAkvKiBCWVRFOiBsdyBQRUZFICovCisKKy8qIHZvbHVtZSBlbnZlbG9wZSBwYXJhbWV0ZXJzICovCisvKiA4Ki8JRU1VWF9GWF9FTlYyX0RFTEFZLAkvKiBXT1JEOiBFTlZWT0wgKi8KKy8qIDkqLwlFTVVYX0ZYX0VOVjJfQVRUQUNLLAkvKiBCWVRFOiB1cCBBVEtITERWICovCisvKjEwKi8JRU1VWF9GWF9FTlYyX0hPTEQsCS8qIEJZVEU6IGx3IEFUS0hMRFYgKi8KKy8qMTEqLwlFTVVYX0ZYX0VOVjJfREVDQVksCS8qIEJZVEU6IGx3IERDWVNVU1YgKi8KKy8qMTIqLwlFTVVYX0ZYX0VOVjJfUkVMRUFTRSwJLyogQllURTogbHcgRENZU1VTViAqLworLyoxMyovCUVNVVhfRlhfRU5WMl9TVVNUQUlOLAkvKiBCWVRFOiB1cCBEQ1lTVVNWICovCisJCisvKiBMRk8xICh0cmVtb2xvICYgdmlicmF0bykgcGFyYW1ldGVycyAqLworLyoxNCovCUVNVVhfRlhfTEZPMV9ERUxBWSwJLyogV09SRDogTEZPMVZBTCAqLworLyoxNSovCUVNVVhfRlhfTEZPMV9GUkVRLAkvKiBCWVRFOiBsbyBUUkVNRlJRICovCisvKjE2Ki8JRU1VWF9GWF9MRk8xX1ZPTFVNRSwJLyogQllURTogdXAgVFJFTUZSUSAqLworLyoxNyovCUVNVVhfRlhfTEZPMV9QSVRDSCwJLyogQllURTogdXAgRk1NT0QgKi8KKy8qMTgqLwlFTVVYX0ZYX0xGTzFfQ1VUT0ZGLAkvKiBCWVRFOiBsbyBGTU1PRCAqLworCisvKiBMRk8yICh2aWJyYXRvKSBwYXJhbWV0ZXJzICovCisvKjE5Ki8JRU1VWF9GWF9MRk8yX0RFTEFZLAkvKiBXT1JEOiBMRk8yVkFMICovCisvKjIwKi8JRU1VWF9GWF9MRk8yX0ZSRVEsCS8qIEJZVEU6IGxvIEZNMkZSUTIgKi8KKy8qMjEqLwlFTVVYX0ZYX0xGTzJfUElUQ0gsCS8qIEJZVEU6IHVwIEZNMkZSUTIgKi8KKworLyogT3RoZXIgb3ZlcmFsbCBlZmZlY3QgcGFyYW1ldGVycyAqLworLyoyMiovCUVNVVhfRlhfSU5JVF9QSVRDSCwJLyogU0hPUlQ6IHBpdGNoIG9mZnNldCAqLworLyoyMyovCUVNVVhfRlhfQ0hPUlVTLAkJLyogQllURTogY2hvcnVzIGVmZmVjdHMgc2VuZCAoMC0yNTUpICovCisvKjI0Ki8JRU1VWF9GWF9SRVZFUkIsCQkvKiBCWVRFOiByZXZlcmIgZWZmZWN0cyBzZW5kICgwLTI1NSkgKi8KKy8qMjUqLwlFTVVYX0ZYX0NVVE9GRiwJCS8qIEJZVEU6IHVwIElGQVROICovCisvKjI2Ki8JRU1VWF9GWF9GSUxURVJRLAkJLyogQllURTogdXAgQ0NDQSAqLworCisvKiBTYW1wbGUgLyBsb29wIG9mZnNldCBjaGFuZ2VzICovCisvKjI3Ki8JRU1VWF9GWF9TQU1QTEVfU1RBUlQsCS8qIFNIT1JUOiBvZmZzZXQgKi8KKy8qMjgqLwlFTVVYX0ZYX0xPT1BfU1RBUlQsCS8qIFNIT1JUOiBvZmZzZXQgKi8KKy8qMjkqLwlFTVVYX0ZYX0xPT1BfRU5ELAkvKiBTSE9SVDogb2Zmc2V0ICovCisvKjMwKi8JRU1VWF9GWF9DT0FSU0VfU0FNUExFX1NUQVJULAkvKiBTSE9SVDogdXBwZXIgd29yZCBvZmZzZXQgKi8KKy8qMzEqLwlFTVVYX0ZYX0NPQVJTRV9MT09QX1NUQVJULAkvKiBTSE9SVDogdXBwZXIgd29yZCBvZmZzZXQgKi8KKy8qMzIqLwlFTVVYX0ZYX0NPQVJTRV9MT09QX0VORCwJCS8qIFNIT1JUOiB1cHBlciB3b3JkIG9mZnNldCAqLworLyozMyovCUVNVVhfRlhfQVRURU4sCQkvKiBCWVRFOiBsbyBJRkFUTiAqLworCisJRU1VWF9GWF9FTkQsCit9OworLyogbnVtYmVyIG9mIGVmZmVjdHMgKi8KKyNkZWZpbmUgRU1VWF9OVU1fRUZGRUNUUyAgRU1VWF9GWF9FTkQKKworLyogZWZmZWN0IGZsYWcgdmFsdWVzICovCisjZGVmaW5lIEVNVVhfRlhfRkxBR19PRkYJMAorI2RlZmluZSBFTVVYX0ZYX0ZMQUdfU0VUCTEKKyNkZWZpbmUgRU1VWF9GWF9GTEFHX0FERAkyCisKKworI2VuZGlmIC8qIF9fU09VTkRfRU1VWF9MRUdBQ1lfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9lbXV4X3N5bnRoLmggYi9pbmNsdWRlL3NvdW5kL2VtdXhfc3ludGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjk3MGFhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9zb3VuZC9lbXV4X3N5bnRoLmgKQEAgLTAsMCArMSwyNDMgQEAKKyNpZm5kZWYgX19TT1VORF9FTVVYX1NZTlRIX0gKKyNkZWZpbmUgX19TT1VORF9FTVVYX1NZTlRIX0gKKworLyoKKyAqICBEZWZpbmVzIGZvciB0aGUgRW11LXNlcmllcyBXYXZlVGFibGUgY2hpcAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDAgVGFrYXNoaSBJd2FpIDx0aXdhaUBzdXNlLmRlPgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSAic2VxX2tlcm5lbC5oIgorI2luY2x1ZGUgInNlcV9kZXZpY2UuaCIKKyNpbmNsdWRlICJzb3VuZGZvbnQuaCIKKyNpbmNsdWRlICJzZXFfbWlkaV9lbXVsLmgiCisjaWZkZWYgQ09ORklHX1NORF9TRVFVRU5DRVJfT1NTCisjaW5jbHVkZSAic2VxX29zcy5oIgorI2VuZGlmCisjaW5jbHVkZSAiZW11eF9sZWdhY3kuaCIKKyNpbmNsdWRlICJzZXFfdmlybWlkaS5oIgorCisvKgorICogY29tcGlsZSBmbGFncworICovCisjZGVmaW5lIFNORFJWX0VNVVhfVVNFX1JBV19FRkZFQ1QKKworCisvKgorICogdHlwZWRlZnMKKyAqLwordHlwZWRlZiBzdHJ1Y3Qgc25kX2VtdXhfZWZmZWN0X3RhYmxlIHNuZF9lbXV4X2VmZmVjdF90YWJsZV90OwordHlwZWRlZiBzdHJ1Y3Qgc25kX2VtdXhfcG9ydCBzbmRfZW11eF9wb3J0X3Q7Cit0eXBlZGVmIHN0cnVjdCBzbmRfZW11eF92b2ljZSBzbmRfZW11eF92b2ljZV90OwordHlwZWRlZiBzdHJ1Y3Qgc25kX2VtdXggc25kX2VtdXhfdDsKKworCisvKgorICogb3BlcmF0b3JzCisgKi8KK3R5cGVkZWYgc3RydWN0IHNuZF9lbXV4X29wZXJhdG9ycyB7CisJc3RydWN0IG1vZHVsZSAqb3duZXI7CisJc25kX2VtdXhfdm9pY2VfdCAqKCpnZXRfdm9pY2UpKHNuZF9lbXV4X3QgKmVtdSwgc25kX2VtdXhfcG9ydF90ICpwb3J0KTsKKwlpbnQgKCpwcmVwYXJlKShzbmRfZW11eF92b2ljZV90ICp2cCk7CisJdm9pZCAoKnRyaWdnZXIpKHNuZF9lbXV4X3ZvaWNlX3QgKnZwKTsKKwl2b2lkICgqcmVsZWFzZSkoc25kX2VtdXhfdm9pY2VfdCAqdnApOworCXZvaWQgKCp1cGRhdGUpKHNuZF9lbXV4X3ZvaWNlX3QgKnZwLCBpbnQgdXBkYXRlKTsKKwl2b2lkICgqdGVybWluYXRlKShzbmRfZW11eF92b2ljZV90ICp2cCk7CisJdm9pZCAoKmZyZWVfdm9pY2UpKHNuZF9lbXV4X3ZvaWNlX3QgKnZwKTsKKwl2b2lkICgqcmVzZXQpKHNuZF9lbXV4X3QgKmVtdSwgaW50IGNoKTsKKwkvKiB0aGUgZmlyc3QgcGFyYW1ldGVycyBhcmUgc25kX2VtdXhfdCAqLworCWludCAoKnNhbXBsZV9uZXcpKHNuZF9lbXV4X3QgKmVtdSwgc25kX3NmX3NhbXBsZV90ICpzcCwgc25kX3V0aWxfbWVtaGRyX3QgKmhkciwgY29uc3Qgdm9pZCBfX3VzZXIgKmRhdGEsIGxvbmcgY291bnQpOworCWludCAoKnNhbXBsZV9mcmVlKShzbmRfZW11eF90ICplbXUsIHNuZF9zZl9zYW1wbGVfdCAqc3AsIHNuZF91dGlsX21lbWhkcl90ICpoZHIpOworCXZvaWQgKCpzYW1wbGVfcmVzZXQpKHNuZF9lbXV4X3QgKmVtdSk7CisJaW50ICgqbG9hZF9meCkoc25kX2VtdXhfdCAqZW11LCBpbnQgdHlwZSwgaW50IGFyZywgY29uc3Qgdm9pZCBfX3VzZXIgKmRhdGEsIGxvbmcgY291bnQpOworCXZvaWQgKCpzeXNleCkoc25kX2VtdXhfdCAqZW11LCBjaGFyICpidWYsIGludCBsZW4sIGludCBwYXJzZWQsIHNuZF9taWRpX2NoYW5uZWxfc2V0X3QgKmNoc2V0KTsKKyNpZmRlZiBDT05GSUdfU05EX1NFUVVFTkNFUl9PU1MKKwlpbnQgKCpvc3NfaW9jdGwpKHNuZF9lbXV4X3QgKmVtdSwgaW50IGNtZCwgaW50IHAxLCBpbnQgcDIpOworI2VuZGlmCit9IHNuZF9lbXV4X29wZXJhdG9yc190OworCisKKy8qCisgKiBjb25zdGFudCB2YWx1ZXMKKyAqLworI2RlZmluZSBTTkRSVl9FTVVYX01BWF9QT1JUUwkJMzIJLyogbWF4ICMgb2Ygc2VxdWVuY2VyIHBvcnRzICovCisjZGVmaW5lIFNORFJWX0VNVVhfTUFYX1ZPSUNFUwkJNjQJLyogbWF4ICMgb2Ygdm9pY2VzICovCisjZGVmaW5lIFNORFJWX0VNVVhfTUFYX01VTFRJX1ZPSUNFUwkxNgkvKiBtYXggIyBvZiBwbGF5YWJsZSB2b2ljZXMKKwkJCQkJCSAqIHNpbXVsdGluZW91c2x5CisJCQkJCQkgKi8KKworLyoKKyAqIGZsYWdzCisgKi8KKyNkZWZpbmUgU05EUlZfRU1VWF9BQ0NFUFRfUk9NCQkoMTw8MCkKKworLyoKKyAqIGVtdVggd2F2ZXRhYmxlCisgKi8KK3N0cnVjdCBzbmRfZW11eCB7CisKKwlzbmRfY2FyZF90ICpjYXJkOwkvKiBhc3NpZ25lZCBjYXJkICovCisKKwkvKiBmb2xsb3dpbmcgc2hvdWxkIGJlIGluaXRpYWxpemVkIGJlZm9yZSByZWdpc3RyYXRpb24gKi8KKwlpbnQgbWF4X3ZvaWNlczsJCS8qIE51bWJlciBvZiB2b2ljZXMgKi8KKwlpbnQgbWVtX3NpemU7CQkvKiBtZW1vcnkgc2l6ZSAoaW4gYnl0ZSkgKi8KKwlpbnQgbnVtX3BvcnRzOwkJLyogbnVtYmVyIG9mIHBvcnRzIHRvIGJlIGNyZWF0ZWQgKi8KKwlpbnQgcGl0Y2hfc2hpZnQ7CS8qIHBpdGNoIHNoaWZ0IHZhbHVlIChmb3IgRW11MTBrMSkgKi8KKwlzbmRfZW11eF9vcGVyYXRvcnNfdCBvcHM7CS8qIG9wZXJhdG9ycyAqLworCXZvaWQgKmh3OwkJLyogaGFyZHdhcmUgKi8KKwl1bnNpZ25lZCBsb25nIGZsYWdzOwkvKiBvdGhlciBjb25kaXRpb25zICovCisJaW50IG1pZGlfcG9ydHM7CQkvKiBudW1iZXIgb2YgdmlydHVhbCBtaWRpIGRldmljZXMgKi8KKwlpbnQgbWlkaV9kZXZpZHg7CS8qIGRldmljZSBvZmZzZXQgb2YgdmlydHVhbCBtaWRpICovCisJdW5zaWduZWQgaW50IGxpbmVhcl9wYW5uaW5nOiAxOyAvKiBwYW5uaW5nIGlzIGxpbmVhciAoc2Jhd2UgPSAxLCBlbXUxMGsxID0gMCkgKi8KKwlpbnQgaHdkZXBfaWR4OwkJLyogaHdkZXAgZGV2aWNlIGluZGV4ICovCisJc25kX2h3ZGVwX3QgKmh3ZGVwOwkvKiBod2RlcCBkZXZpY2UgKi8KKworCS8qIHByaXZhdGUgKi8KKwlpbnQgbnVtX3ZvaWNlczsJCS8qIGN1cnJlbnQgbnVtYmVyIG9mIHZvaWNlcyAqLworCXNuZF9zZl9saXN0X3QgKnNmbGlzdDsJLyogcm9vdCBvZiBTb3VuZEZvbnQgbGlzdCAqLworCXNuZF9lbXV4X3ZvaWNlX3QgKnZvaWNlczsJLyogVm9pY2VzIChFTVUgJ2NoYW5uZWwnKSAqLworCWludCB1c2VfdGltZTsJLyogYWxsb2NhdGlvbiBjb3VudGVyICovCisJc3BpbmxvY2tfdCB2b2ljZV9sb2NrOwkvKiBMb2NrIGZvciB2b2ljZSBhY2Nlc3MgKi8KKwlzdHJ1Y3Qgc2VtYXBob3JlIHJlZ2lzdGVyX211dGV4OworCWludCBjbGllbnQ7CQkvKiBGb3IgdGhlIHNlcXVlbmNlciBjbGllbnQgKi8KKwlpbnQgcG9ydHNbU05EUlZfRU1VWF9NQVhfUE9SVFNdOwkvKiBUaGUgcG9ydHMgZm9yIHRoaXMgZGV2aWNlICovCisJc25kX2VtdXhfcG9ydF90ICpwb3J0cHRyc1tTTkRSVl9FTVVYX01BWF9QT1JUU107CisJaW50IHVzZWQ7CS8qIHVzZSBjb3VudGVyICovCisJY2hhciAqbmFtZTsJLyogbmFtZSBvZiB0aGUgZGV2aWNlIChpbnRlcm5hbCkgKi8KKwlzbmRfcmF3bWlkaV90ICoqdm1pZGk7CisJc3RydWN0IHRpbWVyX2xpc3QgdGxpc3Q7CS8qIGZvciBwZW5kaW5nIG5vdGUtb2ZmcyAqLworCWludCB0aW1lcl9hY3RpdmU7CisKKwlzbmRfdXRpbF9tZW1oZHJfdCAqbWVtaGRyOwkvKiBtZW1vcnkgY2h1bmsgaW5mb3JtYXRpb24gKi8KKworI2lmZGVmIENPTkZJR19QUk9DX0ZTCisJc25kX2luZm9fZW50cnlfdCAqcHJvYzsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1NORF9TRVFVRU5DRVJfT1NTCisJc25kX3NlcV9kZXZpY2VfdCAqb3NzX3N5bnRoOworI2VuZGlmCit9OworCisKKy8qCisgKiBzZXF1ZW5jZXIgcG9ydCBpbmZvcm1hdGlvbgorICovCitzdHJ1Y3Qgc25kX2VtdXhfcG9ydCB7CisKKwlzbmRfbWlkaV9jaGFubmVsX3NldF90IGNoc2V0OworCXNuZF9lbXV4X3QgKmVtdTsKKworCWNoYXIgcG9ydF9tb2RlOwkJCS8qIG9wZXJhdGlvbiBtb2RlICovCisJaW50IHZvbHVtZV9hdHRlbjsJCS8qIGVtdVggcmF3IGF0dGVudWF0aW9uICovCisJdW5zaWduZWQgbG9uZyBkcnVtX2ZsYWdzOwkvKiBkcnVtIGJpdG1hcHMgKi8KKwlpbnQgY3RybHNbRU1VWF9NRF9FTkRdOwkJLyogY29udHJvbCBwYXJhbWV0ZXJzICovCisjaWZkZWYgU05EUlZfRU1VWF9VU0VfUkFXX0VGRkVDVAorCXNuZF9lbXV4X2VmZmVjdF90YWJsZV90ICplZmZlY3Q7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfU05EX1NFUVVFTkNFUl9PU1MKKwlzbmRfc2VxX29zc19hcmdfdCAqb3NzX2FyZzsKKyNlbmRpZgorfTsKKworLyogcG9ydF9tb2RlICovCisjZGVmaW5lIFNORFJWX0VNVVhfUE9SVF9NT0RFX01JREkJCTAJLyogbm9ybWFsIE1JREkgcG9ydCAqLworI2RlZmluZSBTTkRSVl9FTVVYX1BPUlRfTU9ERV9PU1NfU1lOVEgJMQkvKiBPU1Mgc3ludGggcG9ydCAqLworI2RlZmluZSBTTkRSVl9FTVVYX1BPUlRfTU9ERV9PU1NfTUlESQkyCS8qIE9TUyBtdWx0aSBjaGFubmVsIHN5bnRoIHBvcnQgKi8KKworLyoKKyAqIEEgc3RydWN0dXJlIHRvIGtlZXAgdHJhY2sgb2YgZWFjaCBoYXJkd2FyZSB2b2ljZQorICovCitzdHJ1Y3Qgc25kX2VtdXhfdm9pY2UgeworCWludCAgY2g7CQkvKiBIYXJkd2FyZSBjaGFubmVsIG51bWJlciAqLworCisJaW50ICBzdGF0ZTsJCS8qIHN0YXR1cyAqLworI2RlZmluZSBTTkRSVl9FTVVYX1NUX09GRgkJMHgwMAkvKiBOb3QgcGxheWluZywgYW5kIGluYWN0aXZlICovCisjZGVmaW5lIFNORFJWX0VNVVhfU1RfT04JCTB4MDEJLyogTm90ZSBvbiAqLworI2RlZmluZSBTTkRSVl9FTVVYX1NUX1JFTEVBU0VEIAkoMHgwMnxTTkRSVl9FTVVYX1NUX09OKQkvKiBOb3RlIHJlbGVhc2VkICovCisjZGVmaW5lIFNORFJWX0VNVVhfU1RfU1VTVEFJTkVECSgweDA0fFNORFJWX0VNVVhfU1RfT04pCS8qIE5vdGUgc3VzdGFpbmVkICovCisjZGVmaW5lIFNORFJWX0VNVVhfU1RfU1RBTkRCWQkoMHgwOHxTTkRSVl9FTVVYX1NUX09OKQkvKiBXYWl0aW5nIHRvIGJlIHRyaWdnZXJlZCAqLworI2RlZmluZSBTTkRSVl9FTVVYX1NUX1BFTkRJTkcgCSgweDEwfFNORFJWX0VNVVhfU1RfT04pCS8qIE5vdGUgd2lsbCBiZSByZWxlYXNlZCAqLworI2RlZmluZSBTTkRSVl9FTVVYX1NUX0xPQ0tFRAkJMHgxMDAJLyogTm90IGFjY2Vzc2libGUgKi8KKworCXVuc2lnbmVkIGludCAgdGltZTsJLyogQW4gYWxsb2NhdGlvbiB0aW1lICovCisJdW5zaWduZWQgY2hhciBub3RlOwkvKiBOb3RlIGN1cnJlbnRseSBhc3NpZ25lZCB0byB0aGlzIHZvaWNlICovCisJdW5zaWduZWQgY2hhciBrZXk7CisJdW5zaWduZWQgY2hhciB2ZWxvY2l0eTsJLyogVmVsb2NpdHkgb2YgY3VycmVudCBub3RlICovCisKKwlzbmRfc2Zfem9uZV90ICp6b25lOwkvKiBab25lIGFzc2lnbmVkIHRvIHRoaXMgbm90ZSAqLworCXZvaWQgKmJsb2NrOwkJLyogc2FtcGxlIGJsb2NrIHBvaW50ZXIgKG9wdGlvbmFsKSAqLworCXNuZF9taWRpX2NoYW5uZWxfdCAqY2hhbjsJLyogTWlkaSBjaGFubmVsIGZvciB0aGlzIG5vdGUgKi8KKwlzbmRfZW11eF9wb3J0X3QgKnBvcnQ7CS8qIGFzc29jaWF0ZWQgcG9ydCAqLworCXNuZF9lbXV4X3QgKmVtdTsJLyogYXNzaWduZWQgcm9vdCBpbmZvICovCisJdm9pZCAqaHc7CQkvKiBoYXJkd2FyZSBwb2ludGVyIChlbXU4MDAwX3Qgb3IgZW11MTBrMV90KSAqLworCXVuc2lnbmVkIGxvbmcgb250aW1lOwkvKiBqaWZmaWVzIGF0IG5vdGUgdHJpZ2dlcmVkICovCisJCisJLyogRW11OGsvRW11MTBrMSByZWdpc3RlcnMgKi8KKwlzb3VuZGZvbnRfdm9pY2VfaW5mb190IHJlZzsKKworCS8qIGFkZGl0aW9uYWwgcmVnaXN0ZXJzICovCisJaW50IGF2b2w7CQkvKiB2b2x1bWUgYXR0ZW51YXRpb24gKi8KKwlpbnQgYWN1dG9mZjsJCS8qIGN1dG9mZiB0YXJnZXQgKi8KKwlpbnQgYXBpdGNoOwkJLyogcGl0Y2ggb2Zmc2V0ICovCisJaW50IGFwYW47CQkvKiBwYW4vYXV4IHBhaXIgKi8KKwlpbnQgYWF1eDsKKwlpbnQgcHRhcmdldDsJCS8qIHBpdGNoIHRhcmdldCAqLworCWludCB2dGFyZ2V0OwkJLyogdm9sdW1lIHRhcmdldCAqLworCWludCBmdGFyZ2V0OwkJLyogZmlsdGVyIHRhcmdldCAqLworCit9OworCisvKgorICogdXBkYXRlIGZsYWdzIChjYW4gYmUgY29tYmluZWQpCisgKi8KKyNkZWZpbmUgU05EUlZfRU1VWF9VUERBVEVfVk9MVU1FCQkoMTw8MCkKKyNkZWZpbmUgU05EUlZfRU1VWF9VUERBVEVfUElUQ0gJCSgxPDwxKQorI2RlZmluZSBTTkRSVl9FTVVYX1VQREFURV9QQU4JCSgxPDwyKQorI2RlZmluZSBTTkRSVl9FTVVYX1VQREFURV9GTU1PRAkJKDE8PDMpCisjZGVmaW5lIFNORFJWX0VNVVhfVVBEQVRFX1RSRU1GUkVRCSgxPDw0KQorI2RlZmluZSBTTkRSVl9FTVVYX1VQREFURV9GTTJGUlEyCQkoMTw8NSkKKyNkZWZpbmUgU05EUlZfRU1VWF9VUERBVEVfUQkJKDE8PDYpCisKKworI2lmZGVmIFNORFJWX0VNVVhfVVNFX1JBV19FRkZFQ1QKKy8qCisgKiBlZmZlY3QgdGFibGUKKyAqLworc3RydWN0IHNuZF9lbXV4X2VmZmVjdF90YWJsZSB7CisJLyogRW11ODAwMCBzcGVjaWZpYyBlZmZlY3RzICovCisJc2hvcnQgdmFsW0VNVVhfTlVNX0VGRkVDVFNdOworCXVuc2lnbmVkIGNoYXIgZmxhZ1tFTVVYX05VTV9FRkZFQ1RTXTsKK307CisjZW5kaWYgLyogU05EUlZfRU1VWF9VU0VfUkFXX0VGRkVDVCAqLworCisKKy8qCisgKiBwcm90b3R5cGVzIC0gaW50ZXJmYWNlIHRvIEVtdTEwazEgYW5kIEVtdThrIHJvdXRpbmVzCisgKi8KK2ludCBzbmRfZW11eF9uZXcoc25kX2VtdXhfdCAqKnJlbXUpOworaW50IHNuZF9lbXV4X3JlZ2lzdGVyKHNuZF9lbXV4X3QgKmVtdSwgc25kX2NhcmRfdCAqY2FyZCwgaW50IGluZGV4LCBjaGFyICpuYW1lKTsKK2ludCBzbmRfZW11eF9mcmVlKHNuZF9lbXV4X3QgKmVtdSk7CisKKy8qCisgKiBleHBvcnRlZCBmdW5jdGlvbnMKKyAqLwordm9pZCBzbmRfZW11eF90ZXJtaW5hdGVfYWxsKHNuZF9lbXV4X3QgKmVtdSk7Cit2b2lkIHNuZF9lbXV4X2xvY2tfdm9pY2Uoc25kX2VtdXhfdCAqZW11LCBpbnQgdm9pY2UpOwordm9pZCBzbmRfZW11eF91bmxvY2tfdm9pY2Uoc25kX2VtdXhfdCAqZW11LCBpbnQgdm9pY2UpOworCisjZW5kaWYgLyogX19TT1VORF9FTVVYX1NZTlRIX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvZXMxNjg4LmggYi9pbmNsdWRlL3NvdW5kL2VzMTY4OC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwNGY0OTUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3NvdW5kL2VzMTY4OC5oCkBAIC0wLDAgKzEsMTIzIEBACisjaWZuZGVmIF9fU09VTkRfRVMxNjg4X0gKKyNkZWZpbmUgX19TT1VORF9FUzE2ODhfSAorCisvKgorICogIEhlYWRlciBmaWxlIGZvciBFUzQ4OC9FUzE2ODgKKyAqICBDb3B5cmlnaHQgKGMpIGJ5IEphcm9zbGF2IEt5c2VsYSA8cGVyZXhAc3VzZS5jej4KKyAqCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICoKKyAqLworCisjaW5jbHVkZSAiY29udHJvbC5oIgorI2luY2x1ZGUgInBjbS5oIgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorCisjZGVmaW5lIEVTMTY4OF9IV19BVVRPCQkweDAwMDAKKyNkZWZpbmUgRVMxNjg4X0hXXzY4OAkJMHgwMDAxCisjZGVmaW5lIEVTMTY4OF9IV18xNjg4CQkweDAwMDIKKworc3RydWN0IF9zbmRfZXMxNjg4IHsKKwl1bnNpZ25lZCBsb25nIHBvcnQ7CQkvKiBwb3J0IG9mIEVTUyBjaGlwICovCisJc3RydWN0IHJlc291cmNlICpyZXNfcG9ydDsKKwl1bnNpZ25lZCBsb25nIG1wdV9wb3J0OwkJLyogTVBVLTQwMSBwb3J0IG9mIEVTUyBjaGlwICovCisJaW50IGlycTsJCQkvKiBJUlEgbnVtYmVyIG9mIEVTUyBjaGlwICovCisJaW50IG1wdV9pcnE7CQkJLyogTVBVIElSUSAqLworCWludCBkbWE4OwkJCS8qIDgtYml0IERNQSAqLworCXVuc2lnbmVkIHNob3J0IHZlcnNpb247CQkvKiB2ZXJzaW9uIG9mIEVTUyBjaGlwICovCisJdW5zaWduZWQgc2hvcnQgaGFyZHdhcmU7CS8qIHNlZSB0byBFUzE2ODhfSFdfWFhYWCAqLworCisJdW5zaWduZWQgc2hvcnQgdHJpZ2dlcl92YWx1ZTsKKwl1bnNpZ25lZCBjaGFyIHBhZDsKKwl1bnNpZ25lZCBpbnQgZG1hX3NpemU7CisKKwlzbmRfY2FyZF90ICpjYXJkOworCXNuZF9wY21fdCAqcGNtOworCXNuZF9wY21fc3Vic3RyZWFtX3QgKnBsYXliYWNrX3N1YnN0cmVhbTsKKwlzbmRfcGNtX3N1YnN0cmVhbV90ICpjYXB0dXJlX3N1YnN0cmVhbTsKKworCXNwaW5sb2NrX3QgcmVnX2xvY2s7CisJc3BpbmxvY2tfdCBtaXhlcl9sb2NrOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgX3NuZF9lczE2ODggZXMxNjg4X3Q7CisKKy8qIEkvTyBwb3J0cyAqLworCisjZGVmaW5lIEVTMTY4OFAoY29kZWMsIHgpICgoY29kZWMpLT5wb3J0ICsgZV9zX3NfRVNTMTY4OCMjeCkKKworI2RlZmluZSBlX3Nfc19FU1MxNjg4UkVTRVQJMHg2CisjZGVmaW5lIGVfc19zX0VTUzE2ODhSRUFECTB4YQorI2RlZmluZSBlX3Nfc19FU1MxNjg4V1JJVEUJMHhjCisjZGVmaW5lIGVfc19zX0VTUzE2ODhDT01NQU5ECTB4YworI2RlZmluZSBlX3Nfc19FU1MxNjg4U1RBVFVTCTB4YworI2RlZmluZSBlX3Nfc19FU1MxNjg4REFUQV9BVkFJTAkweGUKKyNkZWZpbmUgZV9zX3NfRVNTMTY4OERBVEFfQVZBSUxfMTYgMHhmCisjZGVmaW5lIGVfc19zX0VTUzE2ODhNSVhFUl9BRERSCTB4NAorI2RlZmluZSBlX3Nfc19FU1MxNjg4TUlYRVJfREFUQQkweDUKKyNkZWZpbmUgZV9zX3NfRVNTMTY4OE9QTDNfTEVGVAkweDAKKyNkZWZpbmUgZV9zX3NfRVNTMTY4OE9QTDNfUklHSFQJMHgyCisjZGVmaW5lIGVfc19zX0VTUzE2ODhPUEwzX0JPVEgJMHg4CisjZGVmaW5lIGVfc19zX0VTUzE2ODhFTkFCTEUwCTB4MAorI2RlZmluZSBlX3Nfc19FU1MxNjg4RU5BQkxFMQkweDkKKyNkZWZpbmUgZV9zX3NfRVNTMTY4OEVOQUJMRTIJMHhiCisjZGVmaW5lIGVfc19zX0VTUzE2ODhJTklUMQkweDcKKworI2RlZmluZSBFUzE2ODhfRFNQX0NNRF9ETUFPRkYJMHhkMAorI2RlZmluZSBFUzE2ODhfRFNQX0NNRF9TUEtPTgkweGQxCisjZGVmaW5lIEVTMTY4OF9EU1BfQ01EX1NQS09GRgkweGQzCisjZGVmaW5lIEVTMTY4OF9EU1BfQ01EX0RNQU9OCTB4ZDQKKworI2RlZmluZSBFUzE2ODhfUENNX0RFVgkJMHgxNAorI2RlZmluZSBFUzE2ODhfTUlDX0RFVgkJMHgxYQorI2RlZmluZSBFUzE2ODhfUkVDX0RFVgkJMHgxYworI2RlZmluZSBFUzE2ODhfTUFTVEVSX0RFVgkweDMyCisjZGVmaW5lIEVTMTY4OF9GTV9ERVYJCTB4MzYKKyNkZWZpbmUgRVMxNjg4X0NEX0RFVgkJMHgzOAorI2RlZmluZSBFUzE2ODhfQVVYX0RFVgkJMHgzYQorI2RlZmluZSBFUzE2ODhfU1BFQUtFUl9ERVYJMHgzYworI2RlZmluZSBFUzE2ODhfTElORV9ERVYJCTB4M2UKKyNkZWZpbmUgRVMxNjg4X1JFQ0xFVl9ERVYJMHhiNAorCisjZGVmaW5lIEVTMTY4OF9NSVhTX01BU0sJMHgxNworI2RlZmluZSBFUzE2ODhfTUlYU19NSUMJCTB4MDAKKyNkZWZpbmUgRVMxNjg4X01JWFNfTUlDX01BU1RFUgkweDAxCisjZGVmaW5lIEVTMTY4OF9NSVhTX0NECQkweDAyCisjZGVmaW5lIEVTMTY4OF9NSVhTX0FPVVQJMHgwMworI2RlZmluZSBFUzE2ODhfTUlYU19NSUMxCTB4MDQKKyNkZWZpbmUgRVMxNjg4X01JWFNfUkVDX01JWAkweDA1CisjZGVmaW5lIEVTMTY4OF9NSVhTX0xJTkUJMHgwNgorI2RlZmluZSBFUzE2ODhfTUlYU19NQVNURVIJMHgwNworI2RlZmluZSBFUzE2ODhfTUlYU19NVVRFCTB4MTAKKworLyoKKworICovCisKK3ZvaWQgc25kX2VzMTY4OF9taXhlcl93cml0ZShlczE2ODhfdCAqY2hpcCwgdW5zaWduZWQgY2hhciByZWcsIHVuc2lnbmVkIGNoYXIgZGF0YSk7CisKK2ludCBzbmRfZXMxNjg4X2NyZWF0ZShzbmRfY2FyZF90ICogY2FyZCwKKwkJICAgICAgdW5zaWduZWQgbG9uZyBwb3J0LAorCQkgICAgICB1bnNpZ25lZCBsb25nIG1wdV9wb3J0LAorCQkgICAgICBpbnQgaXJxLAorCQkgICAgICBpbnQgbXB1X2lycSwKKwkJICAgICAgaW50IGRtYTgsCisJCSAgICAgIHVuc2lnbmVkIHNob3J0IGhhcmR3YXJlLAorCQkgICAgICBlczE2ODhfdCAqKiByY2hpcCk7CitpbnQgc25kX2VzMTY4OF9wY20oZXMxNjg4X3QgKmNoaXAsIGludCBkZXZpY2UsIHNuZF9wY21fdCAqKiBycGNtKTsKK2ludCBzbmRfZXMxNjg4X21peGVyKGVzMTY4OF90ICpjaGlwKTsKKworI2VuZGlmIC8qIF9fU09VTkRfRVMxNjg4X0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvZ3VzLmggYi9pbmNsdWRlL3NvdW5kL2d1cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNjI4N2EKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3NvdW5kL2d1cy5oCkBAIC0wLDAgKzEsNzE4IEBACisjaWZuZGVmIF9fU09VTkRfR1VTX0gKKyNkZWZpbmUgX19TT1VORF9HVVNfSAorCisvKgorICogIEdsb2JhbCBzdHJ1Y3R1cmVzIHVzZWQgZm9yIEdVUyBwYXJ0IG9mIEFMU0EgZHJpdmVyCisgKiAgQ29weXJpZ2h0IChjKSBieSBKYXJvc2xhdiBLeXNlbGEgPHBlcmV4QHN1c2UuY3o+CisgKgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgInBjbS5oIgorI2luY2x1ZGUgInJhd21pZGkuaCIKKyNpbmNsdWRlICJ0aW1lci5oIgorI2luY2x1ZGUgInNlcV9taWRpX2VtdWwuaCIKKyNpbmNsdWRlICJzZXFfZGV2aWNlLmgiCisjaW5jbHVkZSAiYWluc3RyX2l3LmgiCisjaW5jbHVkZSAiYWluc3RyX2dmMS5oIgorI2luY2x1ZGUgImFpbnN0cl9zaW1wbGUuaCIKKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2RlZmluZSBTTkRSVl9TRVFfREVWX0lEX0dVUwkJCSJndXMtc3ludGgiCisKKy8qIElPIHBvcnRzICovCisKKyNkZWZpbmUgR1VTUChndXMsIHgpCQkJKChndXMpLT5nZjEucG9ydCArIFNORFJWX2dfdV9zXyMjeCkKKworI2RlZmluZSBTTkRSVl9nX3Vfc19NSURJQ1RSTAkJKDB4MzIwLTB4MjIwKQorI2RlZmluZSBTTkRSVl9nX3Vfc19NSURJU1RBVAkJKDB4MzIwLTB4MjIwKQorI2RlZmluZSBTTkRSVl9nX3Vfc19NSURJREFUQQkJKDB4MzIxLTB4MjIwKQorCisjZGVmaW5lIFNORFJWX2dfdV9zX0dGMVBBR0UJCSgweDMyMi0weDIyMCkKKyNkZWZpbmUgU05EUlZfZ191X3NfR0YxUkVHU0VMCQkoMHgzMjMtMHgyMjApCisjZGVmaW5lIFNORFJWX2dfdV9zX0dGMURBVEFMT1cJCSgweDMyNC0weDIyMCkKKyNkZWZpbmUgU05EUlZfZ191X3NfR0YxREFUQUhJR0gJCSgweDMyNS0weDIyMCkKKyNkZWZpbmUgU05EUlZfZ191X3NfSVJRU1RBVAkJKDB4MjI2LTB4MjIwKQorI2RlZmluZSBTTkRSVl9nX3Vfc19USU1FUkNOVFJMCQkoMHgyMjgtMHgyMjApCisjZGVmaW5lIFNORFJWX2dfdV9zX1RJTUVSREFUQQkJKDB4MjI5LTB4MjIwKQorI2RlZmluZSBTTkRSVl9nX3Vfc19EUkFNCQkJKDB4MzI3LTB4MjIwKQorI2RlZmluZSBTTkRSVl9nX3Vfc19NSVhDTlRSTFJFRwkJKDB4MjIwLTB4MjIwKQorI2RlZmluZSBTTkRSVl9nX3Vfc19JUlFETUFDTlRSTFJFRwkoMHgyMmItMHgyMjApCisjZGVmaW5lIFNORFJWX2dfdV9zX1JFR0NOVFJMUwkJKDB4MjJmLTB4MjIwKQorI2RlZmluZSBTTkRSVl9nX3Vfc19CT0FSRFZFUlNJT04JCSgweDcyNi0weDIyMCkKKyNkZWZpbmUgU05EUlZfZ191X3NfTUlYQ05UUkxQT1JUCQkoMHg3MjYtMHgyMjApCisjZGVmaW5lIFNORFJWX2dfdV9zX0lWRVIJCQkoMHgzMjUtMHgyMjApCisjZGVmaW5lIFNORFJWX2dfdV9zX01JWERBVEFQT1JUCQkoMHgzMjYtMHgyMjApCisjZGVmaW5lIFNORFJWX2dfdV9zX01BWENOVFJMUE9SVAkJKDB4MzI2LTB4MjIwKQorCisvKiBHRjEgcmVnaXN0ZXJzICovCisKKy8qIGdsb2JhbCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgU05EUlZfR0YxX0dCX0FDVElWRV9WT0lDRVMJCTB4MGUKKyNkZWZpbmUgU05EUlZfR0YxX0dCX1ZPSUNFU19JUlEJCQkweDBmCisjZGVmaW5lIFNORFJWX0dGMV9HQl9HTE9CQUxfTU9ERQkJCTB4MTkKKyNkZWZpbmUgU05EUlZfR0YxX0dXX0xGT19CQVNFCQkJMHgxYQorI2RlZmluZSBTTkRSVl9HRjFfR0JfVk9JQ0VTX0lSUV9SRUFECQkweDFmCisjZGVmaW5lIFNORFJWX0dGMV9HQl9EUkFNX0RNQV9DT05UUk9MCQkweDQxCisjZGVmaW5lIFNORFJWX0dGMV9HV19EUkFNX0RNQV9MT1cJCQkweDQyCisjZGVmaW5lIFNORFJWX0dGMV9HV19EUkFNX0lPX0xPVwkJCTB4NDMKKyNkZWZpbmUgU05EUlZfR0YxX0dCX0RSQU1fSU9fSElHSAkJCTB4NDQKKyNkZWZpbmUgU05EUlZfR0YxX0dCX1NPVU5EX0JMQVNURVJfQ09OVFJPTAkweDQ1CisjZGVmaW5lIFNORFJWX0dGMV9HQl9BRExJQl9USU1FUl8xCQkweDQ2CisjZGVmaW5lIFNORFJWX0dGMV9HQl9BRExJQl9USU1FUl8yCQkweDQ3CisjZGVmaW5lIFNORFJWX0dGMV9HQl9SRUNPUkRfUkFURQkJCTB4NDgKKyNkZWZpbmUgU05EUlZfR0YxX0dCX1JFQ19ETUFfQ09OVFJPTAkJMHg0OQorI2RlZmluZSBTTkRSVl9HRjFfR0JfSk9ZU1RJQ0tfREFDX0xFVkVMCQkweDRiCisjZGVmaW5lIFNORFJWX0dGMV9HQl9SRVNFVAkJCTB4NGMKKyNkZWZpbmUgU05EUlZfR0YxX0dCX0RSQU1fRE1BX0hJR0gJCTB4NTAKKyNkZWZpbmUgU05EUlZfR0YxX0dXX0RSQU1fSU8xNgkJCTB4NTEKKyNkZWZpbmUgU05EUlZfR0YxX0dXX01FTU9SWV9DT05GSUcJCTB4NTIKKyNkZWZpbmUgU05EUlZfR0YxX0dCX01FTU9SWV9DT05UUk9MCQkweDUzCisjZGVmaW5lIFNORFJWX0dGMV9HV19GSUZPX1JFQ09SRF9CQVNFX0FERFIJMHg1NAorI2RlZmluZSBTTkRSVl9HRjFfR1dfRklGT19QTEFZX0JBU0VfQUREUgkJMHg1NQorI2RlZmluZSBTTkRSVl9HRjFfR1dfRklGT19TSVpFCQkJMHg1NgorI2RlZmluZSBTTkRSVl9HRjFfR1dfSU5URVJMRUFWRQkJCTB4NTcKKyNkZWZpbmUgU05EUlZfR0YxX0dCX0NPTVBBVElCSUxJVFkJCTB4NTkKKyNkZWZpbmUgU05EUlZfR0YxX0dCX0RFQ09ERV9DT05UUk9MCQkweDVhCisjZGVmaW5lIFNORFJWX0dGMV9HQl9WRVJTSU9OX05VTUJFUgkJMHg1YgorI2RlZmluZSBTTkRSVl9HRjFfR0JfTVBVNDAxX0NPTlRST0xfQQkJMHg1YworI2RlZmluZSBTTkRSVl9HRjFfR0JfTVBVNDAxX0NPTlRST0xfQgkJMHg1ZAorI2RlZmluZSBTTkRSVl9HRjFfR0JfRU1VTEFUSU9OX0lSUQkJMHg2MAorLyogdm9pY2Ugc3BlY2lmaWMgcmVnaXN0ZXJzICovCisjZGVmaW5lIFNORFJWX0dGMV9WQl9BRERSRVNTX0NPTlRST0wJCTB4MDAKKyNkZWZpbmUgU05EUlZfR0YxX1ZXX0ZSRVFVRU5DWQkJCTB4MDEKKyNkZWZpbmUgU05EUlZfR0YxX1ZXX1NUQVJUX0hJR0gJCQkweDAyCisjZGVmaW5lIFNORFJWX0dGMV9WV19TVEFSVF9MT1cJCQkweDAzCisjZGVmaW5lIFNORFJWX0dGMV9WQV9TVEFSVAkJCVNORFJWX0dGMV9WV19TVEFSVF9ISUdICisjZGVmaW5lIFNORFJWX0dGMV9WV19FTkRfSElHSAkJCTB4MDQKKyNkZWZpbmUgU05EUlZfR0YxX1ZXX0VORF9MT1cJCQkweDA1CisjZGVmaW5lIFNORFJWX0dGMV9WQV9FTkQJCQkJU05EUlZfR0YxX1ZXX0VORF9ISUdICisjZGVmaW5lIFNORFJWX0dGMV9WQl9WT0xVTUVfUkFURQkJCTB4MDYKKyNkZWZpbmUgU05EUlZfR0YxX1ZCX1ZPTFVNRV9TVEFSVAkJCTB4MDcKKyNkZWZpbmUgU05EUlZfR0YxX1ZCX1ZPTFVNRV9FTkQJCQkweDA4CisjZGVmaW5lIFNORFJWX0dGMV9WV19WT0xVTUUJCQkweDA5CisjZGVmaW5lIFNORFJWX0dGMV9WV19DVVJSRU5UX0hJR0gJCQkweDBhCisjZGVmaW5lIFNORFJWX0dGMV9WV19DVVJSRU5UX0xPVwkJCTB4MGIKKyNkZWZpbmUgU05EUlZfR0YxX1ZBX0NVUlJFTlQJCQlTTkRSVl9HRjFfVldfQ1VSUkVOVF9ISUdICisjZGVmaW5lIFNORFJWX0dGMV9WQl9QQU4JCQkJMHgwYworI2RlZmluZSBTTkRSVl9HRjFfVldfT0ZGU0VUX1JJR0hUCQkJMHgwYworI2RlZmluZSBTTkRSVl9HRjFfVkJfVk9MVU1FX0NPTlRST0wJCTB4MGQKKyNkZWZpbmUgU05EUlZfR0YxX1ZCX1VQUEVSX0FERFJFU1MJCTB4MTAKKyNkZWZpbmUgU05EUlZfR0YxX1ZXX0VGRkVDVF9ISUdICQkJMHgxMQorI2RlZmluZSBTTkRSVl9HRjFfVldfRUZGRUNUX0xPVwkJCTB4MTIKKyNkZWZpbmUgU05EUlZfR0YxX1ZBX0VGRkVDVAkJCVNORFJWX0dGMV9WV19FRkZFQ1RfSElHSAorI2RlZmluZSBTTkRSVl9HRjFfVldfT0ZGU0VUX0xFRlQJCQkweDEzCisjZGVmaW5lIFNORFJWX0dGMV9WQl9BQ0NVTVVMQVRPUgkJCTB4MTQKKyNkZWZpbmUgU05EUlZfR0YxX1ZCX01PREUJCQkJMHgxNQorI2RlZmluZSBTTkRSVl9HRjFfVldfRUZGRUNUX1ZPTFVNRQkJMHgxNgorI2RlZmluZSBTTkRSVl9HRjFfVkJfRlJFUVVFTkNZX0xGTwkJMHgxNworI2RlZmluZSBTTkRSVl9HRjFfVkJfVk9MVU1FX0xGTwkJCTB4MTgKKyNkZWZpbmUgU05EUlZfR0YxX1ZXX09GRlNFVF9SSUdIVF9GSU5BTAkJMHgxYgorI2RlZmluZSBTTkRSVl9HRjFfVldfT0ZGU0VUX0xFRlRfRklOQUwJCTB4MWMKKyNkZWZpbmUgU05EUlZfR0YxX1ZXX0VGRkVDVF9WT0xVTUVfRklOQUwJCTB4MWQKKworLyogSUNTIHJlZ2lzdGVycyAqLworCisjZGVmaW5lIFNORFJWX0lDU19NSUNfREVWCQkwCisjZGVmaW5lIFNORFJWX0lDU19MSU5FX0RFVgkxCisjZGVmaW5lIFNORFJWX0lDU19DRF9ERVYJCTIKKyNkZWZpbmUgU05EUlZfSUNTX0dGMV9ERVYJCTMKKyNkZWZpbmUgU05EUlZfSUNTX05PTkVfREVWCTQKKyNkZWZpbmUgU05EUlZfSUNTX01BU1RFUl9ERVYJNQorCisvKiBMRk8gKi8KKworI2RlZmluZSBTTkRSVl9MRk9fVFJFTU9MTwkJMAorI2RlZmluZSBTTkRSVl9MRk9fVklCUkFUTwkJMQorCisvKiBtaXNjICovCisKKyNkZWZpbmUgU05EUlZfR0YxX0RNQV9VTlNJR05FRAkweDgwCisjZGVmaW5lIFNORFJWX0dGMV9ETUFfMTZCSVQJMHg0MAorI2RlZmluZSBTTkRSVl9HRjFfRE1BX0lSUQkJMHgyMAorI2RlZmluZSBTTkRSVl9HRjFfRE1BX1dJRFRIMTYJMHgwNAorI2RlZmluZSBTTkRSVl9HRjFfRE1BX1JFQUQJMHgwMgkvKiByZWFkIGZyb20gR1VTJ3MgRFJBTSAqLworI2RlZmluZSBTTkRSVl9HRjFfRE1BX0VOQUJMRQkweDAxCisKKy8qIHJhbXAgcmFuZ2VzICovCisKKyNkZWZpbmUgU05EUlZfR0YxX0FUVEVOKHgpCShzbmRfZ2YxX2F0dGVuX3RhYmxlW3hdKQorI2RlZmluZSBTTkRSVl9HRjFfTUlOX1ZPTFVNRQkxODAwCisjZGVmaW5lIFNORFJWX0dGMV9NQVhfVk9MVU1FCTQwOTUKKyNkZWZpbmUgU05EUlZfR0YxX01JTl9PRkZTRVQJKFNORFJWX0dGMV9NSU5fVk9MVU1FPj40KQorI2RlZmluZSBTTkRSVl9HRjFfTUFYX09GRlNFVAkyNTUKKyNkZWZpbmUgU05EUlZfR0YxX01BWF9UREVQVEgJOTAKKworLyogZGVmaW5lcyBmb3IgbWVtb3J5IG1hbmFnZXIgKi8KKworI2RlZmluZSBTTkRSVl9HRjFfTUVNX0JMT0NLXzE2QklUCQkweDAwMDEKKworI2RlZmluZSBTTkRSVl9HRjFfTUVNX09XTkVSX0RSSVZFUgkweDAwMDEKKyNkZWZpbmUgU05EUlZfR0YxX01FTV9PV05FUl9XQVZFX1NJTVBMRQkweDAwMDIKKyNkZWZpbmUgU05EUlZfR0YxX01FTV9PV05FUl9XQVZFX0dGMQkweDAwMDMKKyNkZWZpbmUgU05EUlZfR0YxX01FTV9PV05FUl9XQVZFX0lXRkZGRgkweDAwMDQKKworLyogY29uc3RhbnRzIGZvciBpbnRlcnJ1cHQgaGFuZGxlcnMgKi8KKworI2RlZmluZSBTTkRSVl9HRjFfSEFORExFUl9NSURJX09VVAkweDAwMDEwMDAwCisjZGVmaW5lIFNORFJWX0dGMV9IQU5ETEVSX01JRElfSU4JCTB4MDAwMjAwMDAKKyNkZWZpbmUgU05EUlZfR0YxX0hBTkRMRVJfVElNRVIxCQkweDAwMDQwMDAwCisjZGVmaW5lIFNORFJWX0dGMV9IQU5ETEVSX1RJTUVSMgkJMHgwMDA4MDAwMAorI2RlZmluZSBTTkRSVl9HRjFfSEFORExFUl9WT0lDRQkJMHgwMDEwMDAwMAorI2RlZmluZSBTTkRSVl9HRjFfSEFORExFUl9ETUFfV1JJVEUJMHgwMDIwMDAwMAorI2RlZmluZSBTTkRSVl9HRjFfSEFORExFUl9ETUFfUkVBRAkweDAwNDAwMDAwCisjZGVmaW5lIFNORFJWX0dGMV9IQU5ETEVSX0FMTAkJKDB4ZmZmZjAwMDAmflNORFJWX0dGMV9IQU5ETEVSX1ZPSUNFKQorCisvKiBjb25zdGFudHMgZm9yIERNQSBmbGFncyAqLworCisjZGVmaW5lIFNORFJWX0dGMV9ETUFfVFJJR0dFUgkJMQorCisvKiAtLS0gKi8KKworc3RydWN0IF9zbmRfZ3VzX2NhcmQ7Cit0eXBlZGVmIHN0cnVjdCBfc25kX2d1c19jYXJkIHNuZF9ndXNfY2FyZF90OworCisvKiBHRjEgc3BlY2lmaWMgc3RydWN0dXJlICovCisKK3R5cGVkZWYgc3RydWN0IF9zbmRfZ2YxX2JhbmtfaW5mbyB7CisJdW5zaWduZWQgaW50IGFkZHJlc3M7CisJdW5zaWduZWQgaW50IHNpemU7Cit9IHNuZF9nZjFfYmFua19pbmZvX3Q7CisKK3R5cGVkZWYgc3RydWN0IF9zbmRfZ2YxX21lbV9ibG9jayB7CisJdW5zaWduZWQgc2hvcnQgZmxhZ3M7CS8qIGZsYWdzIC0gU05EUlZfR0YxX01FTV9CTE9DS19YWFhYICovCisJdW5zaWduZWQgc2hvcnQgb3duZXI7CS8qIG93bmVyIC0gU05EUlZfR0YxX01FTV9PV05FUl9YWFhYICovCisJdW5zaWduZWQgaW50IHNoYXJlOwkvKiBzaGFyZSBjb3VudCAqLworCXVuc2lnbmVkIGludCBzaGFyZV9pZFs0XTsgLyogc2hhcmUgSUQgKi8KKwl1bnNpZ25lZCBpbnQgcHRyOworCXVuc2lnbmVkIGludCBzaXplOworCWNoYXIgKm5hbWU7CisJc3RydWN0IF9zbmRfZ2YxX21lbV9ibG9jayAqbmV4dDsKKwlzdHJ1Y3QgX3NuZF9nZjFfbWVtX2Jsb2NrICpwcmV2OworfSBzbmRfZ2YxX21lbV9ibG9ja190OworCit0eXBlZGVmIHN0cnVjdCBfc25kX2dmMV9tZW0geworCXNuZF9nZjFfYmFua19pbmZvX3QgYmFua3NfOFs0XTsKKwlzbmRfZ2YxX2JhbmtfaW5mb190IGJhbmtzXzE2WzRdOworCXNuZF9nZjFfbWVtX2Jsb2NrX3QgKmZpcnN0OworCXNuZF9nZjFfbWVtX2Jsb2NrX3QgKmxhc3Q7CisJc3RydWN0IHNlbWFwaG9yZSBtZW1vcnlfbXV0ZXg7Cit9IHNuZF9nZjFfbWVtX3Q7CisKK3R5cGVkZWYgc3RydWN0IHNuZF9nZjFfZG1hX2Jsb2NrIHsKKwl2b2lkICpidWZmZXI7CQkvKiBidWZmZXIgaW4gY29tcHV0ZXIncyBSQU0gKi8KKwl1bnNpZ25lZCBsb25nIGJ1Zl9hZGRyOwkvKiBidWZmZXIgYWRkcmVzcyAqLworCXVuc2lnbmVkIGludCBhZGRyOwkvKiBhZGRyZXNzIGluIG9uYm9hcmQgbWVtb3J5ICovCisJdW5zaWduZWQgaW50IGNvdW50OwkvKiBjb3VudCBpbiBieXRlcyAqLworCXVuc2lnbmVkIGludCBjbWQ7CS8qIERNQSBjb21tYW5kIChmb3JtYXQpICovCisJdm9pZCAoKmFjaykoc25kX2d1c19jYXJkX3QgKiBndXMsIHZvaWQgKnByaXZhdGVfZGF0YSk7CisJdm9pZCAqcHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfZ2YxX2RtYV9ibG9jayAqbmV4dDsKK30gc25kX2dmMV9kbWFfYmxvY2tfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXNuZF9taWRpX2NoYW5uZWxfc2V0X3QgKiBjaHNldDsKKwlzbmRfZ3VzX2NhcmRfdCAqIGd1czsKKwlpbnQgbW9kZTsJCS8qIG9wZXJhdGlvbiBtb2RlICovCisJaW50IGNsaWVudDsJCS8qIHNlcXVlbmNlciBjbGllbnQgbnVtYmVyICovCisJaW50IHBvcnQ7CQkvKiBzZXF1ZW5jZXIgcG9ydCBudW1iZXIgKi8KKwl1bnNpZ25lZCBpbnQgbWlkaV9oYXNfdm9pY2VzOiAxOworfSBzbmRfZ3VzX3BvcnRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgX3NuZF9ndXNfdm9pY2Ugc25kX2d1c192b2ljZV90OworCit0eXBlZGVmIHN0cnVjdCB7CisJdm9pZCAoKnNhbXBsZV9zdGFydCkoc25kX2d1c19jYXJkX3QgKmd1cywgc25kX2d1c192b2ljZV90ICp2b2ljZSwgc25kX3NlcV9wb3NpdGlvbl90IHBvc2l0aW9uKTsKKwl2b2lkICgqc2FtcGxlX3N0b3ApKHNuZF9ndXNfY2FyZF90ICpndXMsIHNuZF9ndXNfdm9pY2VfdCAqdm9pY2UsIHNuZF9zZXFfc3RvcF9tb2RlX3QgbW9kZSk7CisJdm9pZCAoKnNhbXBsZV9mcmVxKShzbmRfZ3VzX2NhcmRfdCAqZ3VzLCBzbmRfZ3VzX3ZvaWNlX3QgKnZvaWNlLCBzbmRfc2VxX2ZyZXF1ZW5jeV90IGZyZXEpOworCXZvaWQgKCpzYW1wbGVfdm9sdW1lKShzbmRfZ3VzX2NhcmRfdCAqZ3VzLCBzbmRfZ3VzX3ZvaWNlX3QgKnZvaWNlLCBzbmRfc2VxX2V2X3ZvbHVtZV90ICp2b2x1bWUpOworCXZvaWQgKCpzYW1wbGVfbG9vcCkoc25kX2d1c19jYXJkX3QgKmNhcmQsIHNuZF9ndXNfdm9pY2VfdCAqdm9pY2UsIHNuZF9zZXFfZXZfbG9vcF90ICpsb29wKTsKKwl2b2lkICgqc2FtcGxlX3Bvcykoc25kX2d1c19jYXJkX3QgKmNhcmQsIHNuZF9ndXNfdm9pY2VfdCAqdm9pY2UsIHNuZF9zZXFfcG9zaXRpb25fdCBwb3NpdGlvbik7CisJdm9pZCAoKnNhbXBsZV9wcml2YXRlMSkoc25kX2d1c19jYXJkX3QgKmNhcmQsIHNuZF9ndXNfdm9pY2VfdCAqdm9pY2UsIHVuc2lnbmVkIGNoYXIgKmRhdGEpOworfSBzbmRfZ3VzX3NhbXBsZV9vcHNfdDsKKworI2RlZmluZSBTTkRSVl9HRjFfVk9JQ0VfVFlQRV9QQ00JCTAKKyNkZWZpbmUgU05EUlZfR0YxX1ZPSUNFX1RZUEVfU1lOVEggCTEKKyNkZWZpbmUgU05EUlZfR0YxX1ZPSUNFX1RZUEVfTUlESQkJMgorCisjZGVmaW5lIFNORFJWX0dGMV9WRkxHX1JVTk5JTkcJCSgxPDwwKQorI2RlZmluZSBTTkRSVl9HRjFfVkZMR19FRkZFQ1RfVElNRVIxCSgxPDwxKQorI2RlZmluZSBTTkRSVl9HRjFfVkZMR19QQU4JCSgxPDwyKQorCit0eXBlZGVmIGVudW0geworCVZFTlZfQkVGT1JFLAorCVZFTlZfQVRUQUNLLAorCVZFTlZfU1VTVEFJTiwKKwlWRU5WX1JFTEVBU0UsCisJVkVOVl9ET05FLAorCVZFTlZfVk9MVU1FCit9IHNuZF9ndXNfdm9sdW1lX3N0YXRlX3Q7CisKK3N0cnVjdCBfc25kX2d1c192b2ljZSB7CisJaW50IG51bWJlcjsKKwl1bnNpZ25lZCBpbnQgdXNlOiAxLAorCSAgICBwY206IDEsCisJICAgIHN5bnRoOjEsCisJICAgIG1pZGk6IDE7CisJdW5zaWduZWQgaW50IGZsYWdzOworCXVuc2lnbmVkIGNoYXIgY2xpZW50OworCXVuc2lnbmVkIGNoYXIgcG9ydDsKKwl1bnNpZ25lZCBjaGFyIGluZGV4OworCXVuc2lnbmVkIGNoYXIgcGFkOworCQorI2lmZGVmIENPTkZJR19TTkRfREVCVUcKKwl1bnNpZ25lZCBpbnQgaW50ZXJydXB0X3N0YXRfd2F2ZTsKKwl1bnNpZ25lZCBpbnQgaW50ZXJydXB0X3N0YXRfdm9sdW1lOworI2VuZGlmCisJdm9pZCAoKmhhbmRsZXJfd2F2ZSkgKHNuZF9ndXNfY2FyZF90ICogZ3VzLCBzbmRfZ3VzX3ZvaWNlX3QgKiB2b2ljZSk7CisJdm9pZCAoKmhhbmRsZXJfdm9sdW1lKSAoc25kX2d1c19jYXJkX3QgKiBndXMsIHNuZF9ndXNfdm9pY2VfdCAqIHZvaWNlKTsKKwl2b2lkICgqaGFuZGxlcl9lZmZlY3QpIChzbmRfZ3VzX2NhcmRfdCAqIGd1cywgc25kX2d1c192b2ljZV90ICogdm9pY2UpOworCXZvaWQgKCp2b2x1bWVfY2hhbmdlKSAoc25kX2d1c19jYXJkX3QgKiBndXMpOworCisJc25kX2d1c19zYW1wbGVfb3BzX3QgKnNhbXBsZV9vcHM7CisKKwlzbmRfc2VxX2luc3RyX3QgaW5zdHI7CisKKwkvKiBydW5uaW5nIHN0YXR1cyAvIHJlZ2lzdGVycyAqLworCisJc25kX3NlcV9ldl92b2x1bWVfdCBzYW1wbGVfdm9sdW1lOworCisJdW5zaWduZWQgc2hvcnQgZmNfcmVnaXN0ZXI7CisJdW5zaWduZWQgc2hvcnQgZmNfbGZvOworCXVuc2lnbmVkIHNob3J0IGdmMV92b2x1bWU7CisJdW5zaWduZWQgY2hhciBjb250cm9sOworCXVuc2lnbmVkIGNoYXIgbW9kZTsKKwl1bnNpZ25lZCBjaGFyIGdmMV9wYW47CisJdW5zaWduZWQgY2hhciBlZmZlY3RfYWNjdW11bGF0b3I7CisJdW5zaWduZWQgY2hhciB2b2x1bWVfY29udHJvbDsKKwl1bnNpZ25lZCBjaGFyIHZlbnZfdmFsdWVfbmV4dDsKKwlzbmRfZ3VzX3ZvbHVtZV9zdGF0ZV90IHZlbnZfc3RhdGU7CisJc25kX2d1c192b2x1bWVfc3RhdGVfdCB2ZW52X3N0YXRlX3ByZXY7CisJdW5zaWduZWQgc2hvcnQgdmxvOworCXVuc2lnbmVkIHNob3J0IHZybzsKKwl1bnNpZ25lZCBzaG9ydCBnZjFfZWZmZWN0X3ZvbHVtZTsKKwkKKwkvKiAtLS0gKi8KKworCXZvaWQgKnByaXZhdGVfZGF0YTsKKwl2b2lkICgqcHJpdmF0ZV9mcmVlKShzbmRfZ3VzX3ZvaWNlX3QgKnZvaWNlKTsKK307CisKK3N0cnVjdCBfc25kX2dmMSB7CisKKwl1bnNpZ25lZCBpbnQgZW5oX21vZGU6MSwJLyogZW5oYW5jZWQgbW9kZSAoR0ZBMSkgKi8KKwkJICAgICBod19sZm86MSwJCS8qIHVzZSBoYXJkd2FyZSBMRk8gKi8KKwkJICAgICBzd19sZm86MSwJCS8qIHVzZSBzb2Z0d2FyZSBMRk8gKi8KKwkJICAgICBlZmZlY3Q6MTsJCS8qIHVzZSBlZmZlY3Qgdm9pY2VzICovCisKKwl1bnNpZ25lZCBsb25nIHBvcnQ7CQkvKiBwb3J0IG9mIEdGMSBjaGlwICovCisJc3RydWN0IHJlc291cmNlICpyZXNfcG9ydDE7CisJc3RydWN0IHJlc291cmNlICpyZXNfcG9ydDI7CisJaW50IGlycTsJCQkvKiBJUlEgbnVtYmVyICovCisJaW50IGRtYTE7CQkJLyogRE1BMSBudW1iZXIgKi8KKwlpbnQgZG1hMjsJCQkvKiBETUEyIG51bWJlciAqLworCXVuc2lnbmVkIGludCBtZW1vcnk7CQkvKiBHVVMncyBEUkFNIHNpemUgaW4gYnl0ZXMgKi8KKwl1bnNpZ25lZCBpbnQgcm9tX21lbW9yeTsJLyogR1VTJ3MgUk9NIHNpemUgaW4gYnl0ZXMgKi8KKwl1bnNpZ25lZCBpbnQgcm9tX3ByZXNlbnQ7CS8qIGJpdG1hc2sgKi8KKwl1bnNpZ25lZCBpbnQgcm9tX2JhbmtzOwkJLyogR1VTJ3MgUk9NIGJhbmtzICovCisKKwlzbmRfZ2YxX21lbV90IG1lbV9hbGxvYzsKKworCS8qIHJlZ2lzdGVycyAqLworCXVuc2lnbmVkIHNob3J0IHJlZ19wYWdlOworCXVuc2lnbmVkIHNob3J0IHJlZ19yZWdzZWw7CisJdW5zaWduZWQgc2hvcnQgcmVnX2RhdGE4OworCXVuc2lnbmVkIHNob3J0IHJlZ19kYXRhMTY7CisJdW5zaWduZWQgc2hvcnQgcmVnX2lycXN0YXQ7CisJdW5zaWduZWQgc2hvcnQgcmVnX2RyYW07CisJdW5zaWduZWQgc2hvcnQgcmVnX3RpbWVyY3RybDsKKwl1bnNpZ25lZCBzaG9ydCByZWdfdGltZXJkYXRhOworCXVuc2lnbmVkIGNoYXIgaWNzX3JlZ3NbNl1bMl07CisJLyogLS0tLS0tLS0tICovCisKKwl1bnNpZ25lZCBjaGFyIGFjdGl2ZV92b2ljZXM7CS8qIGFjdGl2ZSB2b2ljZXMgKi8KKwl1bnNpZ25lZCBjaGFyIGFjdGl2ZV92b2ljZTsJLyogc2VsZWN0ZWQgdm9pY2UgKEdGMVBBR0UgcmVnaXN0ZXIpICovCisKKwlzbmRfZ3VzX3ZvaWNlX3Qgdm9pY2VzWzMyXTsJLyogR0YxIHZvaWNlcyAqLworCisJdW5zaWduZWQgaW50IGRlZmF1bHRfdm9pY2VfYWRkcmVzczsKKworCXVuc2lnbmVkIHNob3J0IHBsYXliYWNrX2ZyZXE7CS8qIEdGMSBwbGF5YmFjayAobWl4aW5nKSBmcmVxdWVuY3kgKi8KKwl1bnNpZ25lZCBzaG9ydCBtb2RlOwkJLyogc2VlIHRvIFNORFJWX0dGMV9NT0RFX1hYWFggKi8KKwl1bnNpZ25lZCBjaGFyIHZvbHVtZV9yYW1wOworCXVuc2lnbmVkIGNoYXIgc21vb3RoX3BhbjsKKwl1bnNpZ25lZCBjaGFyIGZ1bGxfcmFuZ2VfcGFuOworCXVuc2lnbmVkIGNoYXIgcGFkMDsKKworCXVuc2lnbmVkIGNoYXIgKmxmb3M7CisKKwkvKiBpbnRlcnJ1cHQgaGFuZGxlcnMgKi8KKworCXZvaWQgKCppbnRlcnJ1cHRfaGFuZGxlcl9taWRpX291dCkgKHNuZF9ndXNfY2FyZF90ICogZ3VzKTsKKwl2b2lkICgqaW50ZXJydXB0X2hhbmRsZXJfbWlkaV9pbikgKHNuZF9ndXNfY2FyZF90ICogZ3VzKTsKKwl2b2lkICgqaW50ZXJydXB0X2hhbmRsZXJfdGltZXIxKSAoc25kX2d1c19jYXJkX3QgKiBndXMpOworCXZvaWQgKCppbnRlcnJ1cHRfaGFuZGxlcl90aW1lcjIpIChzbmRfZ3VzX2NhcmRfdCAqIGd1cyk7CisJdm9pZCAoKmludGVycnVwdF9oYW5kbGVyX2RtYV93cml0ZSkgKHNuZF9ndXNfY2FyZF90ICogZ3VzKTsKKwl2b2lkICgqaW50ZXJydXB0X2hhbmRsZXJfZG1hX3JlYWQpIChzbmRfZ3VzX2NhcmRfdCAqIGd1cyk7CisKKyNpZmRlZiBDT05GSUdfU05EX0RFQlVHCisJdW5zaWduZWQgaW50IGludGVycnVwdF9zdGF0X21pZGlfb3V0OworCXVuc2lnbmVkIGludCBpbnRlcnJ1cHRfc3RhdF9taWRpX2luOworCXVuc2lnbmVkIGludCBpbnRlcnJ1cHRfc3RhdF90aW1lcjE7CisJdW5zaWduZWQgaW50IGludGVycnVwdF9zdGF0X3RpbWVyMjsKKwl1bnNpZ25lZCBpbnQgaW50ZXJydXB0X3N0YXRfZG1hX3dyaXRlOworCXVuc2lnbmVkIGludCBpbnRlcnJ1cHRfc3RhdF9kbWFfcmVhZDsKKwl1bnNpZ25lZCBpbnQgaW50ZXJydXB0X3N0YXRfdm9pY2VfbG9zdDsKKyNlbmRpZgorCisJLyogc3ludGhlc2l6ZXIgKi8KKworCWludCBzZXFfY2xpZW50OworCXNuZF9ndXNfcG9ydF90IHNlcV9wb3J0c1s0XTsKKwlzbmRfc2VxX2tpbnN0cl9saXN0X3QgKmlsaXN0OworCXNuZF9pd2ZmZmZfb3BzX3QgaXdmZmZmX29wczsKKwlzbmRfZ2YxX29wc190IGdmMV9vcHM7CisJc25kX3NpbXBsZV9vcHNfdCBzaW1wbGVfb3BzOworCisJLyogdGltZXIgKi8KKworCXVuc2lnbmVkIHNob3J0IHRpbWVyX2VuYWJsZWQ7CisJc25kX3RpbWVyX3QgKnRpbWVyMTsKKwlzbmRfdGltZXJfdCAqdGltZXIyOworCisJLyogbWlkaSAqLworCisJdW5zaWduZWQgc2hvcnQgdWFydF9jbWQ7CisJdW5zaWduZWQgaW50IHVhcnRfZnJhbWluZzsKKwl1bnNpZ25lZCBpbnQgdWFydF9vdmVycnVuOworCisJLyogZG1hIG9wZXJhdGlvbnMgKi8KKworCXVuc2lnbmVkIGludCBkbWFfZmxhZ3M7CisJdW5zaWduZWQgaW50IGRtYV9zaGFyZWQ7CisJc25kX2dmMV9kbWFfYmxvY2tfdCAqZG1hX2RhdGFfcGNtOworCXNuZF9nZjFfZG1hX2Jsb2NrX3QgKmRtYV9kYXRhX3BjbV9sYXN0OworCXNuZF9nZjFfZG1hX2Jsb2NrX3QgKmRtYV9kYXRhX3N5bnRoOworCXNuZF9nZjFfZG1hX2Jsb2NrX3QgKmRtYV9kYXRhX3N5bnRoX2xhc3Q7CisJdm9pZCAoKmRtYV9hY2spKHNuZF9ndXNfY2FyZF90ICogZ3VzLCB2b2lkICpwcml2YXRlX2RhdGEpOworCXZvaWQgKmRtYV9wcml2YXRlX2RhdGE7CisKKwkvKiBwY20gKi8KKwlpbnQgcGNtX2NoYW5uZWxzOworCWludCBwY21fYWxsb2Nfdm9pY2VzOworICAgICAgICB1bnNpZ25lZCBzaG9ydCBwY21fdm9sdW1lX2xldmVsX2xlZnQ7CisJdW5zaWduZWQgc2hvcnQgcGNtX3ZvbHVtZV9sZXZlbF9yaWdodDsKKwl1bnNpZ25lZCBzaG9ydCBwY21fdm9sdW1lX2xldmVsX2xlZnQxOworCXVuc2lnbmVkIHNob3J0IHBjbV92b2x1bWVfbGV2ZWxfcmlnaHQxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwl1bnNpZ25lZCBjaGFyIHBjbV9yY250cmxfcmVnOworCXVuc2lnbmVkIGNoYXIgcGFkX2VuZDsKK307CisKKy8qIG1haW4gc3RydWN0dXJlIGZvciBHVVMgY2FyZCAqLworCitzdHJ1Y3QgX3NuZF9ndXNfY2FyZCB7CisJc25kX2NhcmRfdCAqY2FyZDsKKworCXVuc2lnbmVkIGludAorCSBpbml0aWFsaXplZDogMSwJCS8qIHJlc291cmNlcyB3ZXJlIGluaXRpYWxpemVkICovCisJIGVxdWFsX2lycToxLAkJCS8qIEdGMSBhbmQgQ09ERUMgc2hhcmVzIElSUSAoR1VTIE1BWCBvbmx5KSAqLworCSBlcXVhbF9kbWE6MSwJCQkvKiBpZiBkbWEgY2hhbm5lbHMgYXJlIGVxdWFsIChub3QgdmFsaWQgZm9yIGRhdWdodGVyIGJvYXJkKSAqLworCSBpY3NfZmxhZzoxLAkJCS8qIGhhdmUgd2UgSUNTIG1peGVyIGNoaXAgKi8KKwkgaWNzX2ZsaXBwZWQ6MSwJCQkvKiBJQ1MgbWl4ZXIgaGF2ZSBmbGlwcGVkIHNvbWUgY2hhbm5lbHM/ICovCisJIGNvZGVjX2ZsYWc6MSwJCQkvKiBoYXZlIHdlIENPREVDIGNoaXA/ICovCisJIG1heF9mbGFnOjEsCQkJLyogaGF2ZSB3ZSBHVVMgTUFYIGNhcmQ/ICovCisJIG1heF9jdHJsX2ZsYWc6MSwJCS8qIGhhdmUgd2Ugb3JpZ2luYWwgR1VTIE1BWCBjYXJkPyAqLworCSBkYXVnaHRlcl9mbGFnOjEsCQkvKiBoYXZlIHdlIGRhdWdodGVyIGJvYXJkPyAqLworCSBpbnRlcndhdmU6MSwJCQkvKiBoZXkgLSB3ZSBoYXZlIEludGVyV2F2ZSBjYXJkICovCisJIGVzc19mbGFnOjEsCQkJLyogRVNTIGNoaXAgZm91bmQuLi4gR1VTIEV4dHJlbWUgKi8KKwkgYWNlX2ZsYWc6MSwJCQkvKiBHVVMgQUNFIGRldGVjdGVkICovCisJIHVhcnRfZW5hYmxlOjE7CQkJLyogZW5hYmxlIE1JREkgVUFSVCAqLworCXVuc2lnbmVkIHNob3J0IHJldmlzaW9uOwkvKiByZXZpc2lvbiBvZiBjaGlwICovCisJdW5zaWduZWQgc2hvcnQgbWF4X2NudHJsX3ZhbDsJLyogR1VTIE1BWCBjb250cm9sIHZhbHVlICovCisJdW5zaWduZWQgc2hvcnQgbWl4X2NudHJsX3JlZzsJLyogbWl4ZXIgY29udHJvbCByZWdpc3RlciAqLworCXVuc2lnbmVkIHNob3J0IGpveXN0aWNrX2RhYzsJLyogam95c3RpY2sgREFDIGxldmVsICovCisJaW50IHRpbWVyX2RldjsJCQkvKiB0aW1lciBkZXZpY2UgKi8KKworCXN0cnVjdCBfc25kX2dmMSBnZjE7CS8qIGdmMSBzcGVjaWZpYyB2YXJpYWJsZXMgKi8KKwlzbmRfcGNtX3QgKnBjbTsKKwlzbmRfcGNtX3N1YnN0cmVhbV90ICpwY21fY2FwX3N1YnN0cmVhbTsKKwl1bnNpZ25lZCBpbnQgY19kbWFfc2l6ZTsKKwl1bnNpZ25lZCBpbnQgY19wZXJpb2Rfc2l6ZTsKKwl1bnNpZ25lZCBpbnQgY19wb3M7CisKKwlzbmRfcmF3bWlkaV90ICptaWRpX3VhcnQ7CisJc25kX3Jhd21pZGlfc3Vic3RyZWFtX3QgKm1pZGlfc3Vic3RyZWFtX291dHB1dDsKKwlzbmRfcmF3bWlkaV9zdWJzdHJlYW1fdCAqbWlkaV9zdWJzdHJlYW1faW5wdXQ7CisKKwlzbmRfc2VxX2RldmljZV90ICpzZXFfZGV2OworCisJc3BpbmxvY2tfdCByZWdfbG9jazsKKwlzcGlubG9ja190IHZvaWNlX2FsbG9jOworCXNwaW5sb2NrX3QgYWN0aXZlX3ZvaWNlX2xvY2s7CisJc3BpbmxvY2tfdCBldmVudF9sb2NrOworCXNwaW5sb2NrX3QgZG1hX2xvY2s7CisJc3BpbmxvY2tfdCBwY21fdm9sdW1lX2xldmVsX2xvY2s7CisJc3BpbmxvY2tfdCB1YXJ0X2NtZF9sb2NrOworCXN0cnVjdCBzZW1hcGhvcmUgZG1hX211dGV4OworCXN0cnVjdCBzZW1hcGhvcmUgcmVnaXN0ZXJfbXV0ZXg7Cit9OworCisvKiBJL08gZnVuY3Rpb25zIGZvciBHRjEvSW50ZXJXYXZlIGNoaXAgLSBndXNfaW8uYyAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgc25kX2dmMV9zZWxlY3Rfdm9pY2Uoc25kX2d1c19jYXJkX3QgKiBndXMsIGludCB2b2ljZSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmd1cy0+YWN0aXZlX3ZvaWNlX2xvY2ssIGZsYWdzKTsKKwlpZiAodm9pY2UgIT0gZ3VzLT5nZjEuYWN0aXZlX3ZvaWNlKSB7CisJCWd1cy0+Z2YxLmFjdGl2ZV92b2ljZSA9IHZvaWNlOworCQlvdXRiKHZvaWNlLCBHVVNQKGd1cywgR0YxUEFHRSkpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZndXMtPmFjdGl2ZV92b2ljZV9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbmRfZ2YxX3VhcnRfY21kKHNuZF9ndXNfY2FyZF90ICogZ3VzLCB1bnNpZ25lZCBjaGFyIGIpCit7CisJb3V0YihndXMtPmdmMS51YXJ0X2NtZCA9IGIsIEdVU1AoZ3VzLCBNSURJQ1RSTCkpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgc25kX2dmMV91YXJ0X3N0YXQoc25kX2d1c19jYXJkX3QgKiBndXMpCit7CisJcmV0dXJuIGluYihHVVNQKGd1cywgTUlESVNUQVQpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNuZF9nZjFfdWFydF9wdXQoc25kX2d1c19jYXJkX3QgKiBndXMsIHVuc2lnbmVkIGNoYXIgYikKK3sKKwlvdXRiKGIsIEdVU1AoZ3VzLCBNSURJREFUQSkpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgc25kX2dmMV91YXJ0X2dldChzbmRfZ3VzX2NhcmRfdCAqIGd1cykKK3sKKwlyZXR1cm4gaW5iKEdVU1AoZ3VzLCBNSURJREFUQSkpOworfQorCitleHRlcm4gdm9pZCBzbmRfZ2YxX2RlbGF5KHNuZF9ndXNfY2FyZF90ICogZ3VzKTsKKworZXh0ZXJuIHZvaWQgc25kX2dmMV9jdHJsX3N0b3Aoc25kX2d1c19jYXJkX3QgKiBndXMsIHVuc2lnbmVkIGNoYXIgcmVnKTsKKworZXh0ZXJuIHZvaWQgc25kX2dmMV93cml0ZTgoc25kX2d1c19jYXJkX3QgKiBndXMsIHVuc2lnbmVkIGNoYXIgcmVnLCB1bnNpZ25lZCBjaGFyIGRhdGEpOworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgc25kX2dmMV9sb29rOChzbmRfZ3VzX2NhcmRfdCAqIGd1cywgdW5zaWduZWQgY2hhciByZWcpOworZXh0ZXJuIGlubGluZSB1bnNpZ25lZCBjaGFyIHNuZF9nZjFfcmVhZDgoc25kX2d1c19jYXJkX3QgKiBndXMsIHVuc2lnbmVkIGNoYXIgcmVnKQoreworCXJldHVybiBzbmRfZ2YxX2xvb2s4KGd1cywgcmVnIHwgMHg4MCk7Cit9CitleHRlcm4gdm9pZCBzbmRfZ2YxX3dyaXRlMTYoc25kX2d1c19jYXJkX3QgKiBndXMsIHVuc2lnbmVkIGNoYXIgcmVnLCB1bnNpZ25lZCBpbnQgZGF0YSk7CitleHRlcm4gdW5zaWduZWQgc2hvcnQgc25kX2dmMV9sb29rMTYoc25kX2d1c19jYXJkX3QgKiBndXMsIHVuc2lnbmVkIGNoYXIgcmVnKTsKK2V4dGVybiBpbmxpbmUgdW5zaWduZWQgc2hvcnQgc25kX2dmMV9yZWFkMTYoc25kX2d1c19jYXJkX3QgKiBndXMsIHVuc2lnbmVkIGNoYXIgcmVnKQoreworCXJldHVybiBzbmRfZ2YxX2xvb2sxNihndXMsIHJlZyB8IDB4ODApOworfQorZXh0ZXJuIHZvaWQgc25kX2dmMV9hZGxpYl93cml0ZShzbmRfZ3VzX2NhcmRfdCAqIGd1cywgdW5zaWduZWQgY2hhciByZWcsIHVuc2lnbmVkIGNoYXIgZGF0YSk7CitleHRlcm4gdm9pZCBzbmRfZ2YxX2RyYW1fYWRkcihzbmRfZ3VzX2NhcmRfdCAqIGd1cywgdW5zaWduZWQgaW50IGFkZHIpOworZXh0ZXJuIHZvaWQgc25kX2dmMV9wb2tlKHNuZF9ndXNfY2FyZF90ICogZ3VzLCB1bnNpZ25lZCBpbnQgYWRkciwgdW5zaWduZWQgY2hhciBkYXRhKTsKK2V4dGVybiB1bnNpZ25lZCBjaGFyIHNuZF9nZjFfcGVlayhzbmRfZ3VzX2NhcmRfdCAqIGd1cywgdW5zaWduZWQgaW50IGFkZHIpOworZXh0ZXJuIHZvaWQgc25kX2dmMV9wb2tldyhzbmRfZ3VzX2NhcmRfdCAqIGd1cywgdW5zaWduZWQgaW50IGFkZHIsIHVuc2lnbmVkIHNob3J0IGRhdGEpOworZXh0ZXJuIHVuc2lnbmVkIHNob3J0IHNuZF9nZjFfcGVla3coc25kX2d1c19jYXJkX3QgKiBndXMsIHVuc2lnbmVkIGludCBhZGRyKTsKK2V4dGVybiB2b2lkIHNuZF9nZjFfZHJhbV9zZXRtZW0oc25kX2d1c19jYXJkX3QgKiBndXMsIHVuc2lnbmVkIGludCBhZGRyLCB1bnNpZ25lZCBzaG9ydCB2YWx1ZSwgdW5zaWduZWQgaW50IGNvdW50KTsKK2V4dGVybiB2b2lkIHNuZF9nZjFfd3JpdGVfYWRkcihzbmRfZ3VzX2NhcmRfdCAqIGd1cywgdW5zaWduZWQgY2hhciByZWcsIHVuc2lnbmVkIGludCBhZGRyLCBzaG9ydCB3XzE2Yml0KTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgc25kX2dmMV9yZWFkX2FkZHIoc25kX2d1c19jYXJkX3QgKiBndXMsIHVuc2lnbmVkIGNoYXIgcmVnLCBzaG9ydCB3XzE2Yml0KTsKK2V4dGVybiB2b2lkIHNuZF9nZjFfaV9jdHJsX3N0b3Aoc25kX2d1c19jYXJkX3QgKiBndXMsIHVuc2lnbmVkIGNoYXIgcmVnKTsKK2V4dGVybiB2b2lkIHNuZF9nZjFfaV93cml0ZTgoc25kX2d1c19jYXJkX3QgKiBndXMsIHVuc2lnbmVkIGNoYXIgcmVnLCB1bnNpZ25lZCBjaGFyIGRhdGEpOworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgc25kX2dmMV9pX2xvb2s4KHNuZF9ndXNfY2FyZF90ICogZ3VzLCB1bnNpZ25lZCBjaGFyIHJlZyk7CitleHRlcm4gdm9pZCBzbmRfZ2YxX2lfd3JpdGUxNihzbmRfZ3VzX2NhcmRfdCAqIGd1cywgdW5zaWduZWQgY2hhciByZWcsIHVuc2lnbmVkIGludCBkYXRhKTsKK2V4dGVybiBpbmxpbmUgdW5zaWduZWQgY2hhciBzbmRfZ2YxX2lfcmVhZDgoc25kX2d1c19jYXJkX3QgKiBndXMsIHVuc2lnbmVkIGNoYXIgcmVnKQoreworCXJldHVybiBzbmRfZ2YxX2lfbG9vazgoZ3VzLCByZWcgfCAweDgwKTsKK30KK2V4dGVybiB1bnNpZ25lZCBzaG9ydCBzbmRfZ2YxX2lfbG9vazE2KHNuZF9ndXNfY2FyZF90ICogZ3VzLCB1bnNpZ25lZCBjaGFyIHJlZyk7CitleHRlcm4gaW5saW5lIHVuc2lnbmVkIHNob3J0IHNuZF9nZjFfaV9yZWFkMTYoc25kX2d1c19jYXJkX3QgKiBndXMsIHVuc2lnbmVkIGNoYXIgcmVnKQoreworCXJldHVybiBzbmRfZ2YxX2lfbG9vazE2KGd1cywgcmVnIHwgMHg4MCk7Cit9CitleHRlcm4gdm9pZCBzbmRfZ2YxX2lfYWRsaWJfd3JpdGUoc25kX2d1c19jYXJkX3QgKiBndXMsIHVuc2lnbmVkIGNoYXIgcmVnLCB1bnNpZ25lZCBjaGFyIGRhdGEpOworZXh0ZXJuIHZvaWQgc25kX2dmMV9pX3dyaXRlX2FkZHIoc25kX2d1c19jYXJkX3QgKiBndXMsIHVuc2lnbmVkIGNoYXIgcmVnLCB1bnNpZ25lZCBpbnQgYWRkciwgc2hvcnQgd18xNmJpdCk7CitleHRlcm4gdW5zaWduZWQgaW50IHNuZF9nZjFfaV9yZWFkX2FkZHIoc25kX2d1c19jYXJkX3QgKiBndXMsIHVuc2lnbmVkIGNoYXIgcmVnLCBzaG9ydCB3XzE2Yml0KTsKKworZXh0ZXJuIHZvaWQgc25kX2dmMV9zZWxlY3RfYWN0aXZlX3ZvaWNlcyhzbmRfZ3VzX2NhcmRfdCAqIGd1cyk7CisKKy8qIGd1c19sZm8uYyAqLworCitzdHJ1Y3QgX1NORF9JV19MRk9fUFJPR1JBTSB7CisJdW5zaWduZWQgc2hvcnQgZnJlcV9hbmRfY29udHJvbDsKKwl1bnNpZ25lZCBjaGFyIGRlcHRoX2ZpbmFsOworCXVuc2lnbmVkIGNoYXIgZGVwdGhfaW5jOworCXVuc2lnbmVkIHNob3J0IHR3YXZlOworCXVuc2lnbmVkIHNob3J0IGRlcHRoOworfTsKKworI2lmIDAKK2V4dGVybiBpcnFyZXR1cm5fdCBzbmRfZ2YxX2xmb19lZmZlY3RfaW50ZXJydXB0KHNuZF9ndXNfY2FyZF90ICogZ3VzLCBzbmRfZ2YxX3ZvaWNlX3QgKiB2b2ljZSk7CisjZW5kaWYKK2V4dGVybiB2b2lkIHNuZF9nZjFfbGZvX2luaXQoc25kX2d1c19jYXJkX3QgKiBndXMpOworZXh0ZXJuIHZvaWQgc25kX2dmMV9sZm9fZG9uZShzbmRfZ3VzX2NhcmRfdCAqIGd1cyk7CitleHRlcm4gdm9pZCBzbmRfZ2YxX2xmb19wcm9ncmFtKHNuZF9ndXNfY2FyZF90ICogZ3VzLCBpbnQgdm9pY2UsIGludCBsZm9fdHlwZSwgc3RydWN0IF9TTkRfSVdfTEZPX1BST0dSQU0gKnByb2dyYW0pOworZXh0ZXJuIHZvaWQgc25kX2dmMV9sZm9fZW5hYmxlKHNuZF9ndXNfY2FyZF90ICogZ3VzLCBpbnQgdm9pY2UsIGludCBsZm9fdHlwZSk7CitleHRlcm4gdm9pZCBzbmRfZ2YxX2xmb19kaXNhYmxlKHNuZF9ndXNfY2FyZF90ICogZ3VzLCBpbnQgdm9pY2UsIGludCBsZm9fdHlwZSk7CitleHRlcm4gdm9pZCBzbmRfZ2YxX2xmb19jaGFuZ2VfZnJlcShzbmRfZ3VzX2NhcmRfdCAqIGd1cywgaW50IHZvaWNlLCBpbnQgbGZvX3R5cGUsIGludCBmcmVxKTsKK2V4dGVybiB2b2lkIHNuZF9nZjFfbGZvX2NoYW5nZV9kZXB0aChzbmRfZ3VzX2NhcmRfdCAqIGd1cywgaW50IHZvaWNlLCBpbnQgbGZvX3R5cGUsIGludCBkZXB0aCk7CitleHRlcm4gdm9pZCBzbmRfZ2YxX2xmb19zZXR1cChzbmRfZ3VzX2NhcmRfdCAqIGd1cywgaW50IHZvaWNlLCBpbnQgbGZvX3R5cGUsIGludCBmcmVxLCBpbnQgY3VycmVudF9kZXB0aCwgaW50IGRlcHRoLCBpbnQgc3dlZXAsIGludCBzaGFwZSk7CitleHRlcm4gdm9pZCBzbmRfZ2YxX2xmb19zaHV0ZG93bihzbmRfZ3VzX2NhcmRfdCAqIGd1cywgaW50IHZvaWNlLCBpbnQgbGZvX3R5cGUpOworI2lmIDAKK2V4dGVybiB2b2lkIHNuZF9nZjFfbGZvX2NvbW1hbmQoc25kX2d1c19jYXJkX3QgKiBndXMsIGludCB2b2ljZSwgdW5zaWduZWQgY2hhciAqY29tbWFuZCk7CisjZW5kaWYKKworLyogZ3VzX21lbS5jICovCisKK3ZvaWQgc25kX2dmMV9tZW1fbG9jayhzbmRfZ2YxX21lbV90ICogYWxsb2MsIGludCB4dXApOworaW50IHNuZF9nZjFfbWVtX3hmcmVlKHNuZF9nZjFfbWVtX3QgKiBhbGxvYywgc25kX2dmMV9tZW1fYmxvY2tfdCAqIGJsb2NrKTsKK3NuZF9nZjFfbWVtX2Jsb2NrX3QgKnNuZF9nZjFfbWVtX2xvb2soc25kX2dmMV9tZW1fdCAqIGFsbG9jLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCBhZGRyZXNzKTsKK3NuZF9nZjFfbWVtX2Jsb2NrX3QgKnNuZF9nZjFfbWVtX3NoYXJlKHNuZF9nZjFfbWVtX3QgKiBhbGxvYywKKwkJCQkgICAgICAgdW5zaWduZWQgaW50ICpzaGFyZV9pZCk7CitzbmRfZ2YxX21lbV9ibG9ja190ICpzbmRfZ2YxX21lbV9hbGxvYyhzbmRfZ2YxX21lbV90ICogYWxsb2MsIGludCBvd25lciwKKwkJCQkgICAgICAgY2hhciAqbmFtZSwgaW50IHNpemUsIGludCB3XzE2LAorCQkJCSAgICAgICBpbnQgYWxpZ24sIHVuc2lnbmVkIGludCAqc2hhcmVfaWQpOworaW50IHNuZF9nZjFfbWVtX2ZyZWUoc25kX2dmMV9tZW1fdCAqIGFsbG9jLCB1bnNpZ25lZCBpbnQgYWRkcmVzcyk7CitpbnQgc25kX2dmMV9tZW1fZnJlZV9vd25lcihzbmRfZ2YxX21lbV90ICogYWxsb2MsIGludCBvd25lcik7CitpbnQgc25kX2dmMV9tZW1faW5pdChzbmRfZ3VzX2NhcmRfdCAqIGd1cyk7CitpbnQgc25kX2dmMV9tZW1fZG9uZShzbmRfZ3VzX2NhcmRfdCAqIGd1cyk7CisKKy8qIGd1c19tZW1fcHJvYy5jICovCisKK2ludCBzbmRfZ2YxX21lbV9wcm9jX2luaXQoc25kX2d1c19jYXJkX3QgKiBndXMpOworCisvKiBndXNfZG1hLmMgKi8KKworaW50IHNuZF9nZjFfZG1hX2luaXQoc25kX2d1c19jYXJkX3QgKiBndXMpOworaW50IHNuZF9nZjFfZG1hX2RvbmUoc25kX2d1c19jYXJkX3QgKiBndXMpOworaW50IHNuZF9nZjFfZG1hX3RyYW5zZmVyX2Jsb2NrKHNuZF9ndXNfY2FyZF90ICogZ3VzLAorCQkJICAgICAgIHNuZF9nZjFfZG1hX2Jsb2NrX3QgKiBibG9jaywKKwkJCSAgICAgICBpbnQgYXRvbWljLAorCQkJICAgICAgIGludCBzeW50aCk7CisKKy8qIGd1c192b2x1bWUuYyAqLworCit1bnNpZ25lZCBzaG9ydCBzbmRfZ2YxX2x2b2xfdG9fZ3ZvbF9yYXcodW5zaWduZWQgaW50IHZvbCk7Cit1bnNpZ25lZCBpbnQgc25kX2dmMV9ndm9sX3RvX2x2b2xfcmF3KHVuc2lnbmVkIHNob3J0IGdmMV92b2wpOwordW5zaWduZWQgaW50IHNuZF9nZjFfY2FsY19yYW1wX3JhdGUoc25kX2d1c19jYXJkX3QgKiBndXMsCisJCQkJICAgIHVuc2lnbmVkIHNob3J0IHN0YXJ0LAorCQkJCSAgICB1bnNpZ25lZCBzaG9ydCBlbmQsCisJCQkJICAgIHVuc2lnbmVkIGludCB1cyk7Cit1bnNpZ25lZCBzaG9ydCBzbmRfZ2YxX3RyYW5zbGF0ZV9mcmVxKHNuZF9ndXNfY2FyZF90ICogZ3VzLCB1bnNpZ25lZCBpbnQgZnJlcTIpOwordW5zaWduZWQgc2hvcnQgc25kX2dmMV9jb21wdXRlX3BpdGNoYmVuZCh1bnNpZ25lZCBzaG9ydCBwaXRjaGJlbmQsIHVuc2lnbmVkIHNob3J0IHNlbnMpOwordW5zaWduZWQgc2hvcnQgc25kX2dmMV9jb21wdXRlX2ZyZXEodW5zaWduZWQgaW50IGZyZXEsCisJCQkJICAgIHVuc2lnbmVkIGludCByYXRlLAorCQkJCSAgICB1bnNpZ25lZCBzaG9ydCBtaXhfcmF0ZSk7CisKKy8qIGd1c19yZXNldC5jICovCisKK3ZvaWQgc25kX2dmMV9zZXRfZGVmYXVsdF9oYW5kbGVycyhzbmRfZ3VzX2NhcmRfdCAqIGd1cywgdW5zaWduZWQgaW50IHdoYXQpOwordm9pZCBzbmRfZ2YxX3NtYXJ0X3N0b3Bfdm9pY2Uoc25kX2d1c19jYXJkX3QgKiBndXMsIHVuc2lnbmVkIHNob3J0IHZvaWNlKTsKK3ZvaWQgc25kX2dmMV9zdG9wX3ZvaWNlKHNuZF9ndXNfY2FyZF90ICogZ3VzLCB1bnNpZ25lZCBzaG9ydCB2b2ljZSk7Cit2b2lkIHNuZF9nZjFfY2xlYXJfdm9pY2VzKHNuZF9ndXNfY2FyZF90ICogZ3VzLCB1bnNpZ25lZCBzaG9ydCB2X21pbiwgdW5zaWduZWQgc2hvcnQgdl9tYXgpOwordm9pZCBzbmRfZ2YxX3N0b3Bfdm9pY2VzKHNuZF9ndXNfY2FyZF90ICogZ3VzLCB1bnNpZ25lZCBzaG9ydCB2X21pbiwgdW5zaWduZWQgc2hvcnQgdl9tYXgpOworc25kX2d1c192b2ljZV90ICpzbmRfZ2YxX2FsbG9jX3ZvaWNlKHNuZF9ndXNfY2FyZF90ICogZ3VzLCBpbnQgdHlwZSwgaW50IGNsaWVudCwgaW50IHBvcnQpOwordm9pZCBzbmRfZ2YxX2ZyZWVfdm9pY2Uoc25kX2d1c19jYXJkX3QgKiBndXMsIHNuZF9ndXNfdm9pY2VfdCAqdm9pY2UpOworaW50IHNuZF9nZjFfc3RhcnQoc25kX2d1c19jYXJkX3QgKiBndXMpOworaW50IHNuZF9nZjFfc3RvcChzbmRfZ3VzX2NhcmRfdCAqIGd1cyk7CisKKy8qIGd1c19taXhlci5jICovCisKK2ludCBzbmRfZ2YxX25ld19taXhlcihzbmRfZ3VzX2NhcmRfdCAqIGd1cyk7CisKKy8qIGd1c19wY20uYyAqLworCitpbnQgc25kX2dmMV9wY21fbmV3KHNuZF9ndXNfY2FyZF90ICogZ3VzLCBpbnQgcGNtX2RldiwgaW50IGNvbnRyb2xfaW5kZXgsIHNuZF9wY21fdCAqKiBycGNtKTsKKworI2lmZGVmIENPTkZJR19TTkRfREVCVUcKK2V4dGVybiB2b2lkIHNuZF9nZjFfcHJpbnRfdm9pY2VfcmVnaXN0ZXJzKHNuZF9ndXNfY2FyZF90ICogZ3VzKTsKK2V4dGVybiB2b2lkIHNuZF9nZjFfcHJpbnRfZ2xvYmFsX3JlZ2lzdGVycyhzbmRfZ3VzX2NhcmRfdCAqIGd1cyk7CitleHRlcm4gdm9pZCBzbmRfZ2YxX3ByaW50X3NldHVwX3JlZ2lzdGVycyhzbmRfZ3VzX2NhcmRfdCAqIGd1cyk7CitleHRlcm4gdm9pZCBzbmRfZ2YxX3BlZWtfcHJpbnRfYmxvY2soc25kX2d1c19jYXJkX3QgKiBndXMsIHVuc2lnbmVkIGludCBhZGRyLCBpbnQgY291bnQsIGludCB3XzE2Yml0KTsKKyNlbmRpZgorCisvKiBndXMuYyAqLworCitpbnQgc25kX2d1c191c2VfaW5jKHNuZF9ndXNfY2FyZF90ICogZ3VzKTsKK3ZvaWQgc25kX2d1c191c2VfZGVjKHNuZF9ndXNfY2FyZF90ICogZ3VzKTsKK2ludCBzbmRfZ3VzX2NyZWF0ZShzbmRfY2FyZF90ICogY2FyZCwKKwkJICAgdW5zaWduZWQgbG9uZyBwb3J0LAorCQkgICBpbnQgaXJxLCBpbnQgZG1hMSwgaW50IGRtYTIsCisJCSAgIGludCB0aW1lcl9kZXYsCisJCSAgIGludCB2b2ljZXMsCisJCSAgIGludCBwY21fY2hhbm5lbHMsCisJCSAgIGludCBlZmZlY3QsCisJCSAgIHNuZF9ndXNfY2FyZF90ICoqIHJndXMpOworaW50IHNuZF9ndXNfaW5pdGlhbGl6ZShzbmRfZ3VzX2NhcmRfdCAqIGd1cyk7CisKKy8qIGd1c19pcnEuYyAqLworCitpcnFyZXR1cm5fdCBzbmRfZ3VzX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKyNpZmRlZiBDT05GSUdfU05EX0RFQlVHCit2b2lkIHNuZF9ndXNfaXJxX3Byb2ZpbGVfaW5pdChzbmRfZ3VzX2NhcmRfdCAqZ3VzKTsKKyNlbmRpZgorCisvKiBndXNfdWFydC5jICovCisKK2ludCBzbmRfZ2YxX3Jhd21pZGlfbmV3KHNuZF9ndXNfY2FyZF90ICogZ3VzLCBpbnQgZGV2aWNlLCBzbmRfcmF3bWlkaV90ICoqcnJhd21pZGkpOworCisjaWYgMAorZXh0ZXJuIHZvaWQgc25kX2VuZ2luZV9pbnN0cnVtZW50X3JlZ2lzdGVyKHVuc2lnbmVkIHNob3J0IG1vZGUsCisJCXN0cnVjdCBfU05EX0lOU1RSVU1FTlRfVk9JQ0VfQ09NTUFORFMgKnZvaWNlX2NtZHMsCisJCXN0cnVjdCBfU05EX0lOU1RSVU1FTlRfTk9URV9DT01NQU5EUyAqbm90ZV9jbWRzLAorCSAgICAgIAlzdHJ1Y3QgX1NORF9JTlNUUlVNRU5UX0NIQU5ORUxfQ09NTUFORFMgKmNoYW5uZWxfY21kcyk7CitleHRlcm4gaW50IHNuZF9lbmdpbmVfaW5zdHJ1bWVudF9yZWdpc3Rlcl9hc2sodW5zaWduZWQgc2hvcnQgbW9kZSk7CisjZW5kaWYKKworLyogZ3VzX2RyYW0uYyAqLworaW50IHNuZF9ndXNfZHJhbV93cml0ZShzbmRfZ3VzX2NhcmRfdCAqZ3VzLCBjaGFyIF9fdXNlciAqcHRyLAorCQkgICAgICAgdW5zaWduZWQgaW50IGFkZHIsIHVuc2lnbmVkIGludCBzaXplKTsKK2ludCBzbmRfZ3VzX2RyYW1fcmVhZChzbmRfZ3VzX2NhcmRfdCAqZ3VzLCBjaGFyIF9fdXNlciAqcHRyLAorCQkgICAgICB1bnNpZ25lZCBpbnQgYWRkciwgdW5zaWduZWQgaW50IHNpemUsIGludCByb20pOworCisjaWYgZGVmaW5lZChDT05GSUdfU05EX1NFUVVFTkNFUikgfHwgZGVmaW5lZChDT05GSUdfU05EX1NFUVVFTkNFUl9NT0RVTEUpCisKKy8qIGd1c19zYW1wbGUuYyAqLwordm9pZCBzbmRfZ3VzX3NhbXBsZV9ldmVudChzbmRfc2VxX2V2ZW50X3QgKmV2LCBzbmRfZ3VzX3BvcnRfdCAqcCk7CisKKy8qIGd1c19zaW1wbGUuYyAqLwordm9pZCBzbmRfZ2YxX3NpbXBsZV9pbml0KHNuZF9ndXNfdm9pY2VfdCAqdm9pY2UpOworCisvKiBndXNfaW5zdHIuYyAqLworaW50IHNuZF9ndXNfaXdmZmZmX3B1dF9zYW1wbGUodm9pZCAqcHJpdmF0ZV9kYXRhLCBpd2ZmZmZfd2F2ZV90ICp3YXZlLAorCQkJICAgICAgY2hhciBfX3VzZXIgKmRhdGEsIGxvbmcgbGVuLCBpbnQgYXRvbWljKTsKK2ludCBzbmRfZ3VzX2l3ZmZmZl9nZXRfc2FtcGxlKHZvaWQgKnByaXZhdGVfZGF0YSwgaXdmZmZmX3dhdmVfdCAqd2F2ZSwKKwkJCSAgICAgIGNoYXIgX191c2VyICpkYXRhLCBsb25nIGxlbiwgaW50IGF0b21pYyk7CitpbnQgc25kX2d1c19pd2ZmZmZfcmVtb3ZlX3NhbXBsZSh2b2lkICpwcml2YXRlX2RhdGEsIGl3ZmZmZl93YXZlX3QgKndhdmUsCisJCQkJIGludCBhdG9taWMpOworaW50IHNuZF9ndXNfZ2YxX3B1dF9zYW1wbGUodm9pZCAqcHJpdmF0ZV9kYXRhLCBnZjFfd2F2ZV90ICp3YXZlLAorCQkJICAgY2hhciBfX3VzZXIgKmRhdGEsIGxvbmcgbGVuLCBpbnQgYXRvbWljKTsKK2ludCBzbmRfZ3VzX2dmMV9nZXRfc2FtcGxlKHZvaWQgKnByaXZhdGVfZGF0YSwgZ2YxX3dhdmVfdCAqd2F2ZSwKKwkJCSAgIGNoYXIgX191c2VyICpkYXRhLCBsb25nIGxlbiwgaW50IGF0b21pYyk7CitpbnQgc25kX2d1c19nZjFfcmVtb3ZlX3NhbXBsZSh2b2lkICpwcml2YXRlX2RhdGEsIGdmMV93YXZlX3QgKndhdmUsCisJCQkgICAgICBpbnQgYXRvbWljKTsKK2ludCBzbmRfZ3VzX3NpbXBsZV9wdXRfc2FtcGxlKHZvaWQgKnByaXZhdGVfZGF0YSwgc2ltcGxlX2luc3RydW1lbnRfdCAqaW5zdHIsCisJCQkgICAgICBjaGFyIF9fdXNlciAqZGF0YSwgbG9uZyBsZW4sIGludCBhdG9taWMpOworaW50IHNuZF9ndXNfc2ltcGxlX2dldF9zYW1wbGUodm9pZCAqcHJpdmF0ZV9kYXRhLCBzaW1wbGVfaW5zdHJ1bWVudF90ICppbnN0ciwKKwkJCSAgICAgIGNoYXIgX191c2VyICpkYXRhLCBsb25nIGxlbiwgaW50IGF0b21pYyk7CitpbnQgc25kX2d1c19zaW1wbGVfcmVtb3ZlX3NhbXBsZSh2b2lkICpwcml2YXRlX2RhdGEsIHNpbXBsZV9pbnN0cnVtZW50X3QgKmluc3RyLAorCQkJCSBpbnQgYXRvbWljKTsKKworI2VuZGlmIC8qIENPTkZJR19TTkRfU0VRVUVOQ0VSICovCisKKyNlbmRpZiAvKiBfX1NPVU5EX0dVU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL2hkc3AuaCBiL2luY2x1ZGUvc291bmQvaGRzcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjZTNhYTYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3NvdW5kL2hkc3AuaApAQCAtMCwwICsxLDExMCBAQAorI2lmbmRlZiBfX1NPVU5EX0hEU1BfSAorI2RlZmluZSBfX1NPVU5EX0hEU1BfSAorCisvKgorICogICBDb3B5cmlnaHQgKEMpIDIwMDMgVGhvbWFzIENoYXJib25uZWwgKHRob21hc0B1bmRhdGEub3JnKQorICogICAgCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2RlZmluZSBIRFNQX01BVFJJWF9NSVhFUl9TSVpFIDIwNDgKKwordHlwZWRlZiBlbnVtIHsKKwlEaWdpZmFjZSwKKwlNdWx0aWZhY2UsCisJSDk2NTIsCisJSDk2MzIsCisJVW5kZWZpbmVkLAorfSBIRFNQX0lPX1R5cGU7CisKK3R5cGVkZWYgc3RydWN0IF9zbmRfaGRzcF9wZWFrX3JtcyBoZHNwX3BlYWtfcm1zX3Q7CisKK3N0cnVjdCBfc25kX2hkc3BfcGVha19ybXMgeworCXUzMiBpbnB1dF9wZWFrc1syNl07CisJdTMyIHBsYXliYWNrX3BlYWtzWzI2XTsKKwl1MzIgb3V0cHV0X3BlYWtzWzI4XTsKKwl1NjQgaW5wdXRfcm1zWzI2XTsKKwl1NjQgcGxheWJhY2tfcm1zWzI2XTsKKwkvKiBUaGVzZSBhcmUgb25seSB1c2VkIGZvciBIOTZ4eCBjYXJkcyAqLworCXU2NCBvdXRwdXRfcm1zWzI2XTsKK307CisKKyNkZWZpbmUgU05EUlZfSERTUF9JT0NUTF9HRVRfUEVBS19STVMgX0lPUignSCcsIDB4NDAsIGhkc3BfcGVha19ybXNfdCkKKwordHlwZWRlZiBzdHJ1Y3QgX3NuZF9oZHNwX2NvbmZpZ19pbmZvIGhkc3BfY29uZmlnX2luZm9fdDsKKworc3RydWN0IF9zbmRfaGRzcF9jb25maWdfaW5mbyB7CisJdW5zaWduZWQgY2hhciBwcmVmX3N5bmNfcmVmOworCXVuc2lnbmVkIGNoYXIgd29yZGNsb2NrX3N5bmNfY2hlY2s7CisJdW5zaWduZWQgY2hhciBzcGRpZl9zeW5jX2NoZWNrOworCXVuc2lnbmVkIGNoYXIgYWRhdHN5bmNfc3luY19jaGVjazsKKwl1bnNpZ25lZCBjaGFyIGFkYXRfc3luY19jaGVja1szXTsKKwl1bnNpZ25lZCBjaGFyIHNwZGlmX2luOworCXVuc2lnbmVkIGNoYXIgc3BkaWZfb3V0OworCXVuc2lnbmVkIGNoYXIgc3BkaWZfcHJvZmVzc2lvbmFsOworCXVuc2lnbmVkIGNoYXIgc3BkaWZfZW1waGFzaXM7CisJdW5zaWduZWQgY2hhciBzcGRpZl9ub25hdWRpbzsKKwl1bnNpZ25lZCBpbnQgc3BkaWZfc2FtcGxlX3JhdGU7CisJdW5zaWduZWQgaW50IHN5c3RlbV9zYW1wbGVfcmF0ZTsKKwl1bnNpZ25lZCBpbnQgYXV0b3N5bmNfc2FtcGxlX3JhdGU7CisJdW5zaWduZWQgY2hhciBzeXN0ZW1fY2xvY2tfbW9kZTsKKwl1bnNpZ25lZCBjaGFyIGNsb2NrX3NvdXJjZTsKKwl1bnNpZ25lZCBjaGFyIGF1dG9zeW5jX3JlZjsKKwl1bnNpZ25lZCBjaGFyIGxpbmVfb3V0OworCXVuc2lnbmVkIGNoYXIgcGFzc3RocnU7IAorCXVuc2lnbmVkIGNoYXIgZGFfZ2FpbjsKKwl1bnNpZ25lZCBjaGFyIGFkX2dhaW47CisJdW5zaWduZWQgY2hhciBwaG9uZV9nYWluOworCXVuc2lnbmVkIGNoYXIgeGxyX2JyZWFrb3V0X2NhYmxlOworCXVuc2lnbmVkIGNoYXIgYW5hbG9nX2V4dGVuc2lvbl9ib2FyZDsKK307CisKKyNkZWZpbmUgU05EUlZfSERTUF9JT0NUTF9HRVRfQ09ORklHX0lORk8gX0lPUignSCcsIDB4NDEsIGhkc3BfY29uZmlnX2luZm9fdCkKKwordHlwZWRlZiBzdHJ1Y3QgX3NuZF9oZHNwX2Zpcm13YXJlIGhkc3BfZmlybXdhcmVfdDsKKworc3RydWN0IF9zbmRfaGRzcF9maXJtd2FyZSB7CisJdm9pZCBfX3VzZXIgKmZpcm13YXJlX2RhdGE7CS8qIDI0NDEzIHggNCBieXRlcyAqLworfTsKKworI2RlZmluZSBTTkRSVl9IRFNQX0lPQ1RMX1VQTE9BRF9GSVJNV0FSRSBfSU9XKCdIJywgMHg0MiwgaGRzcF9maXJtd2FyZV90KQorCit0eXBlZGVmIHN0cnVjdCBfc25kX2hkc3BfdmVyc2lvbiBoZHNwX3ZlcnNpb25fdDsKKworc3RydWN0IF9zbmRfaGRzcF92ZXJzaW9uIHsKKwlIRFNQX0lPX1R5cGUgaW9fdHlwZTsKKwl1bnNpZ25lZCBzaG9ydCBmaXJtd2FyZV9yZXY7Cit9OworCisjZGVmaW5lIFNORFJWX0hEU1BfSU9DVExfR0VUX1ZFUlNJT04gX0lPUignSCcsIDB4NDMsIGhkc3BfdmVyc2lvbl90KQorCit0eXBlZGVmIHN0cnVjdCBfc25kX2hkc3BfbWl4ZXIgaGRzcF9taXhlcl90OworCitzdHJ1Y3QgX3NuZF9oZHNwX21peGVyIHsKKwl1bnNpZ25lZCBzaG9ydCBtYXRyaXhbSERTUF9NQVRSSVhfTUlYRVJfU0laRV07Cit9OworCisjZGVmaW5lIFNORFJWX0hEU1BfSU9DVExfR0VUX01JWEVSIF9JT1IoJ0gnLCAweDQ0LCBoZHNwX21peGVyX3QpCisKK3R5cGVkZWYgc3RydWN0IF9zbmRfaGRzcF85NjMyX2FlYiBoZHNwXzk2MzJfYWViX3Q7CisKK3N0cnVjdCBfc25kX2hkc3BfOTYzMl9hZWIgeworCWludCBhZWJpOworCWludCBhZWJvOworfTsKKworI2RlZmluZSBTTkRSVl9IRFNQX0lPQ1RMX0dFVF85NjMyX0FFQiBfSU9SKCdIJywgMHg0NSwgaGRzcF85NjMyX2FlYl90KQorCisjZW5kaWYgLyogX19TT1VORF9IRFNQX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvaHdkZXAuaCBiL2luY2x1ZGUvc291bmQvaHdkZXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDM4NzYzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9zb3VuZC9od2RlcC5oCkBAIC0wLDAgKzEsNzMgQEAKKyNpZm5kZWYgX19TT1VORF9IV0RFUF9ICisjZGVmaW5lIF9fU09VTkRfSFdERVBfSAorCisvKgorICogIEhhcmR3YXJlIGRlcGVuZGVudCBsYXllciAKKyAqICBDb3B5cmlnaHQgKGMpIGJ5IEphcm9zbGF2IEt5c2VsYSA8cGVyZXhAc3VzZS5jej4KKyAqCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8c291bmQvYXNvdW5kLmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorCit0eXBlZGVmIGVudW0gc25kcnZfaHdkZXBfaWZhY2Ugc25kX2h3ZGVwX2lmYWNlX3Q7Cit0eXBlZGVmIHN0cnVjdCBzbmRydl9od2RlcF9pbmZvIHNuZF9od2RlcF9pbmZvX3Q7Cit0eXBlZGVmIHN0cnVjdCBzbmRydl9od2RlcF9kc3Bfc3RhdHVzIHNuZF9od2RlcF9kc3Bfc3RhdHVzX3Q7Cit0eXBlZGVmIHN0cnVjdCBzbmRydl9od2RlcF9kc3BfaW1hZ2Ugc25kX2h3ZGVwX2RzcF9pbWFnZV90OworCit0eXBlZGVmIHN0cnVjdCBfc25kX2h3ZGVwX29wcyB7CisJbG9uZyBsb25nICgqbGxzZWVrKSAoc25kX2h3ZGVwX3QgKmh3LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsIGxvbmcgbG9uZyBvZmZzZXQsIGludCBvcmlnKTsKKwlsb25nICgqcmVhZCkgKHNuZF9od2RlcF90ICogaHcsIGNoYXIgX191c2VyICpidWYsIGxvbmcgY291bnQsIGxvZmZfdCAqb2Zmc2V0KTsKKwlsb25nICgqd3JpdGUpIChzbmRfaHdkZXBfdCAqIGh3LCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBsb25nIGNvdW50LCBsb2ZmX3QgKm9mZnNldCk7CisJaW50ICgqb3BlbikgKHNuZF9od2RlcF90ICogaHcsIHN0cnVjdCBmaWxlICogZmlsZSk7CisJaW50ICgqcmVsZWFzZSkgKHNuZF9od2RlcF90ICogaHcsIHN0cnVjdCBmaWxlICogZmlsZSk7CisJdW5zaWduZWQgaW50ICgqcG9sbCkgKHNuZF9od2RlcF90ICogaHcsIHN0cnVjdCBmaWxlICogZmlsZSwgcG9sbF90YWJsZSAqIHdhaXQpOworCWludCAoKmlvY3RsKSAoc25kX2h3ZGVwX3QgKiBodywgc3RydWN0IGZpbGUgKiBmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CisJaW50ICgqaW9jdGxfY29tcGF0KSAoc25kX2h3ZGVwX3QgKiBodywgc3RydWN0IGZpbGUgKiBmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CisJaW50ICgqbW1hcCkgKHNuZF9od2RlcF90ICogaHcsIHN0cnVjdCBmaWxlICogZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICogdm1hKTsKKwlpbnQgKCpkc3Bfc3RhdHVzKSAoc25kX2h3ZGVwX3QgKiBodywgc25kX2h3ZGVwX2RzcF9zdGF0dXNfdCAqIHN0YXR1cyk7CisJaW50ICgqZHNwX2xvYWQpIChzbmRfaHdkZXBfdCAqIGh3LCBzbmRfaHdkZXBfZHNwX2ltYWdlX3QgKiBpbWFnZSk7Cit9IHNuZF9od2RlcF9vcHNfdDsKKworc3RydWN0IF9zbmRfaHdkZXAgeworCXNuZF9jYXJkX3QgKmNhcmQ7CisJaW50IGRldmljZTsKKwljaGFyIGlkWzMyXTsKKwljaGFyIG5hbWVbODBdOworCWludCBpZmFjZTsKKworI2lmZGVmIENPTkZJR19TTkRfT1NTRU1VTAorCWNoYXIgb3NzX2RldlszMl07CisJaW50IG9zc190eXBlOworCWludCBvc3NyZWc7CisjZW5kaWYKKworCXNuZF9od2RlcF9vcHNfdCBvcHM7CisJd2FpdF9xdWV1ZV9oZWFkX3Qgb3Blbl93YWl0OworCXZvaWQgKnByaXZhdGVfZGF0YTsKKwl2b2lkICgqcHJpdmF0ZV9mcmVlKSAoc25kX2h3ZGVwX3QgKmh3ZGVwKTsKKworCXN0cnVjdCBzZW1hcGhvcmUgb3Blbl9tdXRleDsKKwlpbnQgdXNlZDsKKwl1bnNpZ25lZCBpbnQgZHNwX2xvYWRlZDsKKwl1bnNpZ25lZCBpbnQgZXhjbHVzaXZlOiAxOworfTsKKworZXh0ZXJuIGludCBzbmRfaHdkZXBfbmV3KHNuZF9jYXJkX3QgKiBjYXJkLCBjaGFyICppZCwgaW50IGRldmljZSwgc25kX2h3ZGVwX3QgKiogcmh3ZGVwKTsKKworI2VuZGlmIC8qIF9fU09VTkRfSFdERVBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9pMmMuaCBiL2luY2x1ZGUvc291bmQvaTJjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY2NWRkZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvc291bmQvaTJjLmgKQEAgLTAsMCArMSwxMDIgQEAKKyNpZm5kZWYgX19TT1VORF9JMkNfSAorI2RlZmluZSBfX1NPVU5EX0kyQ19ICisKKy8qCisgKgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqCisgKgorICovCisKK3R5cGVkZWYgc3RydWN0IF9zbmRfaTJjX2RldmljZSBzbmRfaTJjX2RldmljZV90OwordHlwZWRlZiBzdHJ1Y3QgX3NuZF9pMmNfYnVzIHNuZF9pMmNfYnVzX3Q7CisKKyNkZWZpbmUgU05EX0kyQ19ERVZJQ0VfQUREUlRFTgkoMTw8MCkJLyogMTAtYml0IEkyQyBhZGRyZXNzICovCisKK3N0cnVjdCBfc25kX2kyY19kZXZpY2UgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzbmRfaTJjX2J1c190ICpidXM7CS8qIEkyQyBidXMgKi8KKwljaGFyIG5hbWVbMzJdOwkJLyogc29tZSB1c2VmdWwgZGV2aWNlIG5hbWUgKi8KKwl1bnNpZ25lZCBzaG9ydCBmbGFnczsJLyogZGV2aWNlIGZsYWdzICovCisJdW5zaWduZWQgc2hvcnQgYWRkcjsJLyogZGV2aWNlIGFkZHJlc3MgKG1pZ2h0IGJlIDEwLWJpdCkgKi8KKwl1bnNpZ25lZCBsb25nIHByaXZhdGVfdmFsdWU7CisJdm9pZCAqcHJpdmF0ZV9kYXRhOworCXZvaWQgKCpwcml2YXRlX2ZyZWUpKHNuZF9pMmNfZGV2aWNlX3QgKmRldmljZSk7Cit9OworCisjZGVmaW5lIHNuZF9pMmNfZGV2aWNlKG4pIGxpc3RfZW50cnkobiwgc25kX2kyY19kZXZpY2VfdCwgbGlzdCkKKwordHlwZWRlZiBzdHJ1Y3QgX3NuZF9pMmNfYml0X29wcyB7CisJdm9pZCAoKnN0YXJ0KShzbmRfaTJjX2J1c190ICpidXMpOwkvKiB0cmFuc2ZlciBzdGFydCAqLworCXZvaWQgKCpzdG9wKShzbmRfaTJjX2J1c190ICpidXMpOwkvKiB0cmFuc2ZlciBzdG9wICovCisJdm9pZCAoKmRpcmVjdGlvbikoc25kX2kyY19idXNfdCAqYnVzLCBpbnQgY2xvY2ssIGludCBkYXRhKTsgIC8qIHNldCBsaW5lIGRpcmVjdGlvbiAoMCA9IHdyaXRlLCAxID0gcmVhZCkgKi8KKwl2b2lkICgqc2V0bGluZXMpKHNuZF9pMmNfYnVzX3QgKmJ1cywgaW50IGNsb2NrLCBpbnQgZGF0YSk7CisJaW50ICgqZ2V0Y2xvY2spKHNuZF9pMmNfYnVzX3QgKmJ1cyk7CisJaW50ICgqZ2V0ZGF0YSkoc25kX2kyY19idXNfdCAqYnVzLCBpbnQgYWNrKTsKK30gc25kX2kyY19iaXRfb3BzX3Q7CisKK3R5cGVkZWYgc3RydWN0IF9zbmRfaTJjX29wcyB7CisJaW50ICgqc2VuZGJ5dGVzKShzbmRfaTJjX2RldmljZV90ICpkZXZpY2UsIHVuc2lnbmVkIGNoYXIgKmJ5dGVzLCBpbnQgY291bnQpOworCWludCAoKnJlYWRieXRlcykoc25kX2kyY19kZXZpY2VfdCAqZGV2aWNlLCB1bnNpZ25lZCBjaGFyICpieXRlcywgaW50IGNvdW50KTsKKwlpbnQgKCpwcm9iZWFkZHIpKHNuZF9pMmNfYnVzX3QgKmJ1cywgdW5zaWduZWQgc2hvcnQgYWRkcik7Cit9IHNuZF9pMmNfb3BzX3Q7CisKK3N0cnVjdCBfc25kX2kyY19idXMgeworCXNuZF9jYXJkX3QgKmNhcmQ7CS8qIGNhcmQgd2hpY2ggSTJDIGJlbG9uZ3MgdG8gKi8KKwljaGFyIG5hbWVbMzJdOwkJLyogc29tZSB1c2VmdWwgbGFiZWwgKi8KKworCXN0cnVjdCBzZW1hcGhvcmUgbG9ja19tdXRleDsKKworCXNuZF9pMmNfYnVzX3QgKm1hc3RlcjsJLyogbWFzdGVyIGJ1cyB3aGVuIFNDSy9TQ0wgaXMgc2hhcmVkICovCisJc3RydWN0IGxpc3RfaGVhZCBidXNlczsJLyogbWFzdGVyOiBzbGF2ZSBidXNlcyBzaGFyaW5nIFNDSy9TQ0wsIHNsYXZlOiBsaW5rIGxpc3QgKi8KKworCXN0cnVjdCBsaXN0X2hlYWQgZGV2aWNlczsgLyogYXR0YWNoZWQgZGV2aWNlcyB0byB0aGlzIGJ1cyAqLworCisJdW5pb24geworCQlzbmRfaTJjX2JpdF9vcHNfdCAqYml0OworCQl2b2lkICpvcHM7CisJfSBod19vcHM7CQkvKiBsb3dsZXZlbCBvcGVyYXRpb25zICovCisJc25kX2kyY19vcHNfdCAqb3BzOwkvKiBtaWRsZXZlbCBvcGVyYXRpb25zICovCisKKwl1bnNpZ25lZCBsb25nIHByaXZhdGVfdmFsdWU7CisJdm9pZCAqcHJpdmF0ZV9kYXRhOworCXZvaWQgKCpwcml2YXRlX2ZyZWUpKHNuZF9pMmNfYnVzX3QgKmJ1cyk7Cit9OworCisjZGVmaW5lIHNuZF9pMmNfc2xhdmVfYnVzKG4pIGxpc3RfZW50cnkobiwgc25kX2kyY19idXNfdCwgYnVzZXMpCisKK2ludCBzbmRfaTJjX2J1c19jcmVhdGUoc25kX2NhcmRfdCAqY2FyZCwgY29uc3QgY2hhciAqbmFtZSwgc25kX2kyY19idXNfdCAqbWFzdGVyLCBzbmRfaTJjX2J1c190ICoqcmkyYyk7CitpbnQgc25kX2kyY19kZXZpY2VfY3JlYXRlKHNuZF9pMmNfYnVzX3QgKmJ1cywgY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgY2hhciBhZGRyLCBzbmRfaTJjX2RldmljZV90ICoqcmRldmljZSk7CitpbnQgc25kX2kyY19kZXZpY2VfZnJlZShzbmRfaTJjX2RldmljZV90ICpkZXZpY2UpOworCitzdGF0aWMgaW5saW5lIHZvaWQgc25kX2kyY19sb2NrKHNuZF9pMmNfYnVzX3QgKmJ1cykgeworCWlmIChidXMtPm1hc3RlcikKKwkJZG93bigmYnVzLT5tYXN0ZXItPmxvY2tfbXV0ZXgpOworCWVsc2UKKwkJZG93bigmYnVzLT5sb2NrX211dGV4KTsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBzbmRfaTJjX3VubG9jayhzbmRfaTJjX2J1c190ICpidXMpIHsKKwlpZiAoYnVzLT5tYXN0ZXIpCisJCXVwKCZidXMtPm1hc3Rlci0+bG9ja19tdXRleCk7CisJZWxzZQorCQl1cCgmYnVzLT5sb2NrX211dGV4KTsKK30KKworaW50IHNuZF9pMmNfc2VuZGJ5dGVzKHNuZF9pMmNfZGV2aWNlX3QgKmRldmljZSwgdW5zaWduZWQgY2hhciAqYnl0ZXMsIGludCBjb3VudCk7CitpbnQgc25kX2kyY19yZWFkYnl0ZXMoc25kX2kyY19kZXZpY2VfdCAqZGV2aWNlLCB1bnNpZ25lZCBjaGFyICpieXRlcywgaW50IGNvdW50KTsKK2ludCBzbmRfaTJjX3Byb2JlYWRkcihzbmRfaTJjX2J1c190ICpidXMsIHVuc2lnbmVkIHNob3J0IGFkZHIpOworCisjZW5kaWYgLyogX19TT1VORF9JMkNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9pbmZvLmggYi9pbmNsdWRlL3NvdW5kL2luZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDc2YmYzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9zb3VuZC9pbmZvLmgKQEAgLTAsMCArMSwxOTMgQEAKKyNpZm5kZWYgX19TT1VORF9JTkZPX0gKKyNkZWZpbmUgX19TT1VORF9JTkZPX0gKKworLyoKKyAqICBIZWFkZXIgZmlsZSBmb3IgaW5mbyBpbnRlcmZhY2UKKyAqICBDb3B5cmlnaHQgKGMpIGJ5IEphcm9zbGF2IEt5c2VsYSA8cGVyZXhAc3VzZS5jej4KKyAqCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorCisvKiBidWZmZXIgZm9yIGluZm9ybWF0aW9uICovCitzdHJ1Y3Qgc25kX2luZm9fYnVmZmVyIHsKKwljaGFyICpidWZmZXI7CQkvKiBwb2ludGVyIHRvIGJlZ2luIG9mIGJ1ZmZlciAqLworCWNoYXIgKmN1cnI7CQkvKiBjdXJyZW50IHBvc2l0aW9uIGluIGJ1ZmZlciAqLworCXVuc2lnbmVkIGxvbmcgc2l6ZTsJLyogY3VycmVudCBzaXplICovCisJdW5zaWduZWQgbG9uZyBsZW47CS8qIHRvdGFsIGxlbmd0aCBvZiBidWZmZXIgKi8KKwlpbnQgc3RvcDsJCS8qIHN0b3AgZmxhZyAqLworCWludCBlcnJvcjsJCS8qIGVycm9yIGNvZGUgKi8KK307CisKK3R5cGVkZWYgc3RydWN0IHNuZF9pbmZvX2J1ZmZlciBzbmRfaW5mb19idWZmZXJfdDsKKworI2RlZmluZSBTTkRSVl9JTkZPX0NPTlRFTlRfVEVYVAkJMAorI2RlZmluZSBTTkRSVl9JTkZPX0NPTlRFTlRfREFUQQkJMQorCitzdHJ1Y3Qgc25kX2luZm9fZW50cnk7CisKK3N0cnVjdCBzbmRfaW5mb19lbnRyeV90ZXh0IHsKKwl1bnNpZ25lZCBsb25nIHJlYWRfc2l6ZTsKKwl1bnNpZ25lZCBsb25nIHdyaXRlX3NpemU7CisJdm9pZCAoKnJlYWQpIChzbmRfaW5mb19lbnRyeV90ICplbnRyeSwgc25kX2luZm9fYnVmZmVyX3QgKiBidWZmZXIpOworCXZvaWQgKCp3cml0ZSkgKHNuZF9pbmZvX2VudHJ5X3QgKmVudHJ5LCBzbmRfaW5mb19idWZmZXJfdCAqIGJ1ZmZlcik7Cit9OworCitzdHJ1Y3Qgc25kX2luZm9fZW50cnlfb3BzIHsKKwlpbnQgKCpvcGVuKSAoc25kX2luZm9fZW50cnlfdCAqZW50cnksCisJCSAgICAgdW5zaWduZWQgc2hvcnQgbW9kZSwgdm9pZCAqKmZpbGVfcHJpdmF0ZV9kYXRhKTsKKwlpbnQgKCpyZWxlYXNlKSAoc25kX2luZm9fZW50cnlfdCAqIGVudHJ5LAorCQkJdW5zaWduZWQgc2hvcnQgbW9kZSwgdm9pZCAqZmlsZV9wcml2YXRlX2RhdGEpOworCWxvbmcgKCpyZWFkKSAoc25kX2luZm9fZW50cnlfdCAqZW50cnksIHZvaWQgKmZpbGVfcHJpdmF0ZV9kYXRhLAorCQkgICAgICBzdHJ1Y3QgZmlsZSAqIGZpbGUsIGNoYXIgX191c2VyICpidWYsCisJCSAgICAgIHVuc2lnbmVkIGxvbmcgY291bnQsIHVuc2lnbmVkIGxvbmcgcG9zKTsKKwlsb25nICgqd3JpdGUpIChzbmRfaW5mb19lbnRyeV90ICplbnRyeSwgdm9pZCAqZmlsZV9wcml2YXRlX2RhdGEsCisJCSAgICAgICBzdHJ1Y3QgZmlsZSAqIGZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCSAgICAgICB1bnNpZ25lZCBsb25nIGNvdW50LCB1bnNpZ25lZCBsb25nIHBvcyk7CisJbG9uZyBsb25nICgqbGxzZWVrKSAoc25kX2luZm9fZW50cnlfdCAqZW50cnksIHZvaWQgKmZpbGVfcHJpdmF0ZV9kYXRhLAorCQkJICAgIHN0cnVjdCBmaWxlICogZmlsZSwgbG9uZyBsb25nIG9mZnNldCwgaW50IG9yaWcpOworCXVuc2lnbmVkIGludCAoKnBvbGwpIChzbmRfaW5mb19lbnRyeV90ICplbnRyeSwgdm9pZCAqZmlsZV9wcml2YXRlX2RhdGEsCisJCQkgICAgICBzdHJ1Y3QgZmlsZSAqIGZpbGUsIHBvbGxfdGFibGUgKiB3YWl0KTsKKwlpbnQgKCppb2N0bCkgKHNuZF9pbmZvX2VudHJ5X3QgKmVudHJ5LCB2b2lkICpmaWxlX3ByaXZhdGVfZGF0YSwKKwkJICAgICAgc3RydWN0IGZpbGUgKiBmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CisJaW50ICgqbW1hcCkgKHNuZF9pbmZvX2VudHJ5X3QgKmVudHJ5LCB2b2lkICpmaWxlX3ByaXZhdGVfZGF0YSwKKwkJICAgICBzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgc3RydWN0IGZpbGUgKiBmaWxlLAorCQkgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIHZtYSk7Cit9OworCitzdHJ1Y3Qgc25kX2luZm9fZW50cnkgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJbW9kZV90IG1vZGU7CisJbG9uZyBzaXplOworCXVuc2lnbmVkIHNob3J0IGNvbnRlbnQ7CisJdW5zaWduZWQgc2hvcnQgZGlzY29ubmVjdGVkOiAxOworCXVuaW9uIHsKKwkJc3RydWN0IHNuZF9pbmZvX2VudHJ5X3RleHQgdGV4dDsKKwkJc3RydWN0IHNuZF9pbmZvX2VudHJ5X29wcyAqb3BzOworCX0gYzsKKwlzbmRfaW5mb19lbnRyeV90ICpwYXJlbnQ7CisJc25kX2NhcmRfdCAqY2FyZDsKKwlzdHJ1Y3QgbW9kdWxlICptb2R1bGU7CisJdm9pZCAqcHJpdmF0ZV9kYXRhOworCXZvaWQgKCpwcml2YXRlX2ZyZWUpKHNuZF9pbmZvX2VudHJ5X3QgKmVudHJ5KTsKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnA7CisJc3RydWN0IHNlbWFwaG9yZSBhY2Nlc3M7Cit9OworCitleHRlcm4gaW50IHNuZF9pbmZvX2NoZWNrX3Jlc2VydmVkX3dvcmRzKGNvbnN0IGNoYXIgKnN0cik7CisKKyNpZiBkZWZpbmVkKENPTkZJR19TTkRfT1NTRU1VTCkgJiYgZGVmaW5lZChDT05GSUdfUFJPQ19GUykKK2V4dGVybiBpbnQgc25kX2luZm9fbWlub3JfcmVnaXN0ZXIodm9pZCk7CitleHRlcm4gaW50IHNuZF9pbmZvX21pbm9yX3VucmVnaXN0ZXIodm9pZCk7CisjZWxzZQorI2RlZmluZSBzbmRfaW5mb19taW5vcl9yZWdpc3RlcigpIC8qIE5PUCAqLworI2RlZmluZSBzbmRfaW5mb19taW5vcl91bnJlZ2lzdGVyKCkgLyogTk9QICovCisjZW5kaWYKKworCisjaWZkZWYgQ09ORklHX1BST0NfRlMKKworZXh0ZXJuIHNuZF9pbmZvX2VudHJ5X3QgKnNuZF9zZXFfcm9vdDsKKyNpZmRlZiBDT05GSUdfU05EX09TU0VNVUwKK2V4dGVybiBzbmRfaW5mb19lbnRyeV90ICpzbmRfb3NzX3Jvb3Q7CisjZWxzZQorI2RlZmluZSBzbmRfb3NzX3Jvb3QgTlVMTAorI2VuZGlmCisKK2ludCBzbmRfaXByaW50ZihzbmRfaW5mb19idWZmZXJfdCAqIGJ1ZmZlciwgY2hhciAqZm10LC4uLikgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpOworaW50IHNuZF9pbmZvX2luaXQodm9pZCk7CitpbnQgc25kX2luZm9fZG9uZSh2b2lkKTsKKworaW50IHNuZF9pbmZvX2dldF9saW5lKHNuZF9pbmZvX2J1ZmZlcl90ICogYnVmZmVyLCBjaGFyICpsaW5lLCBpbnQgbGVuKTsKK2NoYXIgKnNuZF9pbmZvX2dldF9zdHIoY2hhciAqZGVzdCwgY2hhciAqc3JjLCBpbnQgbGVuKTsKK3NuZF9pbmZvX2VudHJ5X3QgKnNuZF9pbmZvX2NyZWF0ZV9tb2R1bGVfZW50cnkoc3RydWN0IG1vZHVsZSAqIG1vZHVsZSwKKwkJCQkJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJCSAgICAgICBzbmRfaW5mb19lbnRyeV90ICogcGFyZW50KTsKK3NuZF9pbmZvX2VudHJ5X3QgKnNuZF9pbmZvX2NyZWF0ZV9jYXJkX2VudHJ5KHNuZF9jYXJkX3QgKiBjYXJkLAorCQkJCQkgICAgIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJCSAgICAgc25kX2luZm9fZW50cnlfdCAqIHBhcmVudCk7Cit2b2lkIHNuZF9pbmZvX2ZyZWVfZW50cnkoc25kX2luZm9fZW50cnlfdCAqIGVudHJ5KTsKK2ludCBzbmRfaW5mb19zdG9yZV90ZXh0KHNuZF9pbmZvX2VudHJ5X3QgKiBlbnRyeSk7CitpbnQgc25kX2luZm9fcmVzdG9yZV90ZXh0KHNuZF9pbmZvX2VudHJ5X3QgKiBlbnRyeSk7CisKK2ludCBzbmRfaW5mb19jYXJkX2NyZWF0ZShzbmRfY2FyZF90ICogY2FyZCk7CitpbnQgc25kX2luZm9fY2FyZF9yZWdpc3RlcihzbmRfY2FyZF90ICogY2FyZCk7CitpbnQgc25kX2luZm9fY2FyZF9mcmVlKHNuZF9jYXJkX3QgKiBjYXJkKTsKK2ludCBzbmRfaW5mb19yZWdpc3RlcihzbmRfaW5mb19lbnRyeV90ICogZW50cnkpOworaW50IHNuZF9pbmZvX3VucmVnaXN0ZXIoc25kX2luZm9fZW50cnlfdCAqIGVudHJ5KTsKKworLyogZm9yIGNhcmQgZHJpdmVycyAqLworaW50IHNuZF9jYXJkX3Byb2NfbmV3KHNuZF9jYXJkX3QgKmNhcmQsIGNvbnN0IGNoYXIgKm5hbWUsIHNuZF9pbmZvX2VudHJ5X3QgKiplbnRyeXApOworCitzdGF0aWMgaW5saW5lIHZvaWQgc25kX2luZm9fc2V0X3RleHRfb3BzKHNuZF9pbmZvX2VudHJ5X3QgKmVudHJ5LCAKKwkJCQkJIHZvaWQgKnByaXZhdGVfZGF0YSwKKwkJCQkJIGxvbmcgcmVhZF9zaXplLAorCQkJCQkgdm9pZCAoKnJlYWQpKHNuZF9pbmZvX2VudHJ5X3QgKiwgc25kX2luZm9fYnVmZmVyX3QgKikpCit7CisJZW50cnktPnByaXZhdGVfZGF0YSA9IHByaXZhdGVfZGF0YTsKKwllbnRyeS0+Yy50ZXh0LnJlYWRfc2l6ZSA9IHJlYWRfc2l6ZTsKKwllbnRyeS0+Yy50ZXh0LnJlYWQgPSByZWFkOworfQorCisKKyNlbHNlCisKKyNkZWZpbmUgc25kX3NlcV9yb290IE5VTEwKKyNkZWZpbmUgc25kX29zc19yb290IE5VTEwKKworc3RhdGljIGlubGluZSBpbnQgc25kX2lwcmludGYoc25kX2luZm9fYnVmZmVyX3QgKiBidWZmZXIsIGNoYXIgKmZtdCwuLi4pIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHNuZF9pbmZvX2luaXQodm9pZCkgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSBpbnQgc25kX2luZm9fZG9uZSh2b2lkKSB7IHJldHVybiAwOyB9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNuZF9pbmZvX2dldF9saW5lKHNuZF9pbmZvX2J1ZmZlcl90ICogYnVmZmVyLCBjaGFyICpsaW5lLCBpbnQgbGVuKSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIGNoYXIgKnNuZF9pbmZvX2dldF9zdHIoY2hhciAqZGVzdCwgY2hhciAqc3JjLCBpbnQgbGVuKSB7IHJldHVybiBOVUxMOyB9CitzdGF0aWMgaW5saW5lIHNuZF9pbmZvX2VudHJ5X3QgKnNuZF9pbmZvX2NyZWF0ZV9tb2R1bGVfZW50cnkoc3RydWN0IG1vZHVsZSAqIG1vZHVsZSwgY29uc3QgY2hhciAqbmFtZSwgc25kX2luZm9fZW50cnlfdCAqIHBhcmVudCkgeyByZXR1cm4gTlVMTDsgfQorc3RhdGljIGlubGluZSBzbmRfaW5mb19lbnRyeV90ICpzbmRfaW5mb19jcmVhdGVfY2FyZF9lbnRyeShzbmRfY2FyZF90ICogY2FyZCwgY29uc3QgY2hhciAqbmFtZSwgc25kX2luZm9fZW50cnlfdCAqIHBhcmVudCkgeyByZXR1cm4gTlVMTDsgfQorc3RhdGljIGlubGluZSB2b2lkIHNuZF9pbmZvX2ZyZWVfZW50cnkoc25kX2luZm9fZW50cnlfdCAqIGVudHJ5KSB7IDsgfQorCitzdGF0aWMgaW5saW5lIGludCBzbmRfaW5mb19jYXJkX2NyZWF0ZShzbmRfY2FyZF90ICogY2FyZCkgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSBpbnQgc25kX2luZm9fY2FyZF9yZWdpc3RlcihzbmRfY2FyZF90ICogY2FyZCkgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSBpbnQgc25kX2luZm9fY2FyZF9mcmVlKHNuZF9jYXJkX3QgKiBjYXJkKSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIGludCBzbmRfaW5mb19yZWdpc3RlcihzbmRfaW5mb19lbnRyeV90ICogZW50cnkpIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHNuZF9pbmZvX3VucmVnaXN0ZXIoc25kX2luZm9fZW50cnlfdCAqIGVudHJ5KSB7IHJldHVybiAwOyB9CisKKyNkZWZpbmUgc25kX2NhcmRfcHJvY19uZXcoY2FyZCxuYW1lLGVudHJ5cCkgIDAgLyogYWx3YXlzIHN1Y2Nlc3MgKi8KKyNkZWZpbmUgc25kX2luZm9fc2V0X3RleHRfb3BzKGVudHJ5LHByaXZhdGVfZGF0YSxyZWFkX3NpemUscmVhZCkgLypOT1AqLworCisjZW5kaWYKKworLyoKKyAqIE9TUyBpbmZvIHBhcnQKKyAqLworCisjaWYgZGVmaW5lZChDT05GSUdfU05EX09TU0VNVUwpICYmIGRlZmluZWQoQ09ORklHX1BST0NfRlMpCisKKyNkZWZpbmUgU05EUlZfT1NTX0lORk9fREVWX0FVRElPCTAKKyNkZWZpbmUgU05EUlZfT1NTX0lORk9fREVWX1NZTlRICTEKKyNkZWZpbmUgU05EUlZfT1NTX0lORk9fREVWX01JREkJCTIKKyNkZWZpbmUgU05EUlZfT1NTX0lORk9fREVWX1RJTUVSUwk0CisjZGVmaW5lIFNORFJWX09TU19JTkZPX0RFVl9NSVhFUlMJNQorCisjZGVmaW5lIFNORFJWX09TU19JTkZPX0RFVl9DT1VOVAk2CisKK2V4dGVybiBpbnQgc25kX29zc19pbmZvX3JlZ2lzdGVyKGludCBkZXYsIGludCBudW0sIGNoYXIgKnN0cmluZyk7CisjZGVmaW5lIHNuZF9vc3NfaW5mb191bnJlZ2lzdGVyKGRldiwgbnVtKSBzbmRfb3NzX2luZm9fcmVnaXN0ZXIoZGV2LCBudW0sIE5VTEwpCisKKyNlbmRpZiAvKiBDT05GSUdfU05EX09TU0VNVUwgJiYgQ09ORklHX1BST0NfRlMgKi8KKworI2VuZGlmIC8qIF9fU09VTkRfSU5GT19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL2luaXR2YWwuaCBiL2luY2x1ZGUvc291bmQvaW5pdHZhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiZjE1MDgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3NvdW5kL2luaXR2YWwuaApAQCAtMCwwICsxLDEwMyBAQAorI2lmbmRlZiBfX1NPVU5EX0lOSVRWQUxfSAorI2RlZmluZSBfX1NPVU5EX0lOSVRWQUxfSAorCisvKgorICogIEluaXQgdmFsdWVzIGZvciBzb3VuZGNhcmQgbW9kdWxlcworICogIENvcHlyaWdodCAoYykgYnkgSmFyb3NsYXYgS3lzZWxhIDxwZXJleEBzdXNlLmN6PgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqCisgKi8KKworI2RlZmluZSBTTkRSVl9BVVRPX1BPUlQJCTEKKyNkZWZpbmUgU05EUlZfQVVUT19JUlEJCTB4ZmZmZgorI2RlZmluZSBTTkRSVl9BVVRPX0RNQQkJMHhmZmZmCisjZGVmaW5lIFNORFJWX0FVVE9fRE1BX1NJWkUJKDB4N2ZmZmZmZmYpCisKKyNkZWZpbmUgU05EUlZfREVGQVVMVF9JRFgxCSgtMSkKKyNkZWZpbmUgU05EUlZfREVGQVVMVF9TVFIxCU5VTEwKKyNkZWZpbmUgU05EUlZfREVGQVVMVF9FTkFCTEUxCTEKKyNkZWZpbmUgU05EUlZfREVGQVVMVF9QT1JUMQlTTkRSVl9BVVRPX1BPUlQKKyNkZWZpbmUgU05EUlZfREVGQVVMVF9JUlExCVNORFJWX0FVVE9fSVJRCisjZGVmaW5lIFNORFJWX0RFRkFVTFRfRE1BMQlTTkRSVl9BVVRPX0RNQQorI2RlZmluZSBTTkRSVl9ERUZBVUxUX0RNQV9TSVpFMQlTTkRSVl9BVVRPX0RNQV9TSVpFCisjZGVmaW5lIFNORFJWX0RFRkFVTFRfUFRSMQlTTkRSVl9ERUZBVUxUX1NUUjEKKworI2RlZmluZSBTTkRSVl9ERUZBVUxUX0lEWAl7IFswIC4uLiAoU05EUlZfQ0FSRFMtMSldID0gLTEgfQorI2RlZmluZSBTTkRSVl9ERUZBVUxUX1NUUgl7IFswIC4uLiAoU05EUlZfQ0FSRFMtMSldID0gTlVMTCB9CisjZGVmaW5lIFNORFJWX0RFRkFVTFRfRU5BQkxFCXsgMSwgWzEgLi4uIChTTkRSVl9DQVJEUy0xKV0gPSAwIH0KKyNkZWZpbmUgU05EUlZfREVGQVVMVF9FTkFCTEVfUE5QIHsgWzAgLi4uIChTTkRSVl9DQVJEUy0xKV0gPSAxIH0KKyNpZmRlZiBDT05GSUdfUE5QCisjZGVmaW5lIFNORFJWX0RFRkFVTFRfRU5BQkxFX0lTQVBOUCBTTkRSVl9ERUZBVUxUX0VOQUJMRV9QTlAKKyNlbHNlCisjZGVmaW5lIFNORFJWX0RFRkFVTFRfRU5BQkxFX0lTQVBOUCBTTkRSVl9ERUZBVUxUX0VOQUJMRQorI2VuZGlmCisjZGVmaW5lIFNORFJWX0RFRkFVTFRfUE9SVAl7IFswIC4uLiAoU05EUlZfQ0FSRFMtMSldID0gU05EUlZfQVVUT19QT1JUIH0KKyNkZWZpbmUgU05EUlZfREVGQVVMVF9JUlEJeyBbMCAuLi4gKFNORFJWX0NBUkRTLTEpXSA9IFNORFJWX0FVVE9fSVJRIH0KKyNkZWZpbmUgU05EUlZfREVGQVVMVF9ETUEJeyBbMCAuLi4gKFNORFJWX0NBUkRTLTEpXSA9IFNORFJWX0FVVE9fRE1BIH0KKyNkZWZpbmUgU05EUlZfREVGQVVMVF9ETUFfU0laRQl7IFswIC4uLiAoU05EUlZfQ0FSRFMtMSldID0gU05EUlZfQVVUT19ETUFfU0laRSB9CisjZGVmaW5lIFNORFJWX0RFRkFVTFRfUFRSCVNORFJWX0RFRkFVTFRfU1RSCisKKyNpZmRlZiBTTkRSVl9MRUdBQ1lfQVVUT19QUk9CRQorc3RhdGljIGludCBzbmRfbGVnYWN5X2F1dG9fcHJvYmUodW5zaWduZWQgbG9uZyAqcG9ydHMsIGludCAoKnByb2JlKSh1bnNpZ25lZCBsb25nIHBvcnQpKQoreworCWludCByZXN1bHQgPSAwOwkvKiBudW1iZXIgb2YgZGV0ZWN0ZWQgY2FyZHMgKi8KKworCXdoaWxlICgoc2lnbmVkIGxvbmcpKnBvcnRzICE9IC0xKSB7CisJCWlmIChwcm9iZSgqcG9ydHMpID49IDApCisJCQlyZXN1bHQrKzsKKwkJcG9ydHMrKzsKKwl9CisJcmV0dXJuIHJlc3VsdDsKK30KKyNlbmRpZgorCisjaWZkZWYgU05EUlZfTEVHQUNZX0ZJTkRfRlJFRV9JUlEKKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKworc3RhdGljIGlycXJldHVybl90IHNuZF9sZWdhY3lfZW1wdHlfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgc25kX2xlZ2FjeV9maW5kX2ZyZWVfaXJxKGludCAqaXJxX3RhYmxlKQoreworCXdoaWxlICgqaXJxX3RhYmxlICE9IC0xKSB7CisJCWlmICghcmVxdWVzdF9pcnEoKmlycV90YWJsZSwgc25kX2xlZ2FjeV9lbXB0eV9pcnFfaGFuZGxlciwKKwkJCQkgU0FfSU5URVJSVVBULCAiQUxTQSBUZXN0IElSUSIsICh2b2lkICopIGlycV90YWJsZSkpIHsKKwkJCWZyZWVfaXJxKCppcnFfdGFibGUsICh2b2lkICopIGlycV90YWJsZSk7CisJCQlyZXR1cm4gKmlycV90YWJsZTsKKwkJfQorCQlpcnFfdGFibGUrKzsKKwl9CisJcmV0dXJuIC0xOworfQorI2VuZGlmCisKKyNpZmRlZiBTTkRSVl9MRUdBQ1lfRklORF9GUkVFX0RNQQorc3RhdGljIGludCBzbmRfbGVnYWN5X2ZpbmRfZnJlZV9kbWEoaW50ICpkbWFfdGFibGUpCit7CisJd2hpbGUgKCpkbWFfdGFibGUgIT0gLTEpIHsKKwkJaWYgKCFyZXF1ZXN0X2RtYSgqZG1hX3RhYmxlLCAiQUxTQSBUZXN0IERNQSIpKSB7CisJCQlmcmVlX2RtYSgqZG1hX3RhYmxlKTsKKwkJCXJldHVybiAqZG1hX3RhYmxlOworCQl9CisJCWRtYV90YWJsZSsrOworCX0KKwlyZXR1cm4gLTE7Cit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9fU09VTkRfSU5JVFZBTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL21lbWFsbG9jLmggYi9pbmNsdWRlL3NvdW5kL21lbWFsbG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2EyZmQyYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvc291bmQvbWVtYWxsb2MuaApAQCAtMCwwICsxLDExOCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIGJ5IEphcm9zbGF2IEt5c2VsYSA8cGVyZXhAc3VzZS5jej4KKyAqICAgICAgICAgICAgICAgICAgIFRha2FzaGkgSXdhaSA8dGl3YWlAc3VzZS5kZT4KKyAqIAorICogIEdlbmVyaWMgbWVtb3J5IGFsbG9jYXRvcnMKKyAqCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICoKKyAqLworCisjaWZuZGVmIF9fU09VTkRfTUVNQUxMT0NfSAorI2RlZmluZSBfX1NPVU5EX01FTUFMTE9DX0gKKworc3RydWN0IGRldmljZTsKKworLyoKKyAqIGJ1ZmZlciBkZXZpY2UgaW5mbworICovCitzdHJ1Y3Qgc25kX2RtYV9kZXZpY2UgeworCWludCB0eXBlOwkJCS8qIFNORFJWX0RNQV9UWVBFX1hYWCAqLworCXN0cnVjdCBkZXZpY2UgKmRldjsJCS8qIGdlbmVyaWMgZGV2aWNlICovCit9OworCisjaWZuZGVmIHNuZF9kbWFfcGNpX2RhdGEKKyNkZWZpbmUgc25kX2RtYV9wY2lfZGF0YShwY2kpCSgmKHBjaSktPmRldikKKyNkZWZpbmUgc25kX2RtYV9pc2FfZGF0YSgpCU5VTEwKKyNkZWZpbmUgc25kX2RtYV9zYnVzX2RhdGEoc2J1cykJKChzdHJ1Y3QgZGV2aWNlICopKHNidXMpKQorI2RlZmluZSBzbmRfZG1hX2NvbnRpbnVvdXNfZGF0YSh4KQkoKHN0cnVjdCBkZXZpY2UgKikodW5zaWduZWQgbG9uZykoeCkpCisjZW5kaWYKKworCisvKgorICogYnVmZmVyIHR5cGVzCisgKi8KKyNkZWZpbmUgU05EUlZfRE1BX1RZUEVfVU5LTk9XTgkJMAkvKiBub3QgZGVmaW5lZCAqLworI2RlZmluZSBTTkRSVl9ETUFfVFlQRV9DT05USU5VT1VTCTEJLyogY29udGludW91cyBuby1ETUEgbWVtb3J5ICovCisjZGVmaW5lIFNORFJWX0RNQV9UWVBFX0RFVgkJMgkvKiBnZW5lcmljIGRldmljZSBjb250aW51b3VzICovCisjZGVmaW5lIFNORFJWX0RNQV9UWVBFX0RFVl9TRwkJMwkvKiBnZW5lcmljIGRldmljZSBTRy1idWZmZXIgKi8KKyNkZWZpbmUgU05EUlZfRE1BX1RZUEVfU0JVUwkJNAkvKiBTQlVTIGNvbnRpbnVvdXMgKi8KKworLyoKKyAqIGluZm8gZm9yIGJ1ZmZlciBhbGxvY2F0aW9uCisgKi8KK3N0cnVjdCBzbmRfZG1hX2J1ZmZlciB7CisJc3RydWN0IHNuZF9kbWFfZGV2aWNlIGRldjsJLyogZGV2aWNlIHR5cGUgKi8KKwl1bnNpZ25lZCBjaGFyICphcmVhOwkvKiB2aXJ0dWFsIHBvaW50ZXIgKi8KKwlkbWFfYWRkcl90IGFkZHI7CS8qIHBoeXNpY2FsIGFkZHJlc3MgKi8KKwlzaXplX3QgYnl0ZXM7CQkvKiBidWZmZXIgc2l6ZSBpbiBieXRlcyAqLworCXZvaWQgKnByaXZhdGVfZGF0YTsJLyogcHJpdmF0ZSBmb3IgYWxsb2NhdG9yOyBkb24ndCB0b3VjaCAqLworfTsKKworLyoKKyAqIFNjYXR0ZXItR2F0aGVyIGdlbmVyaWMgZGV2aWNlIHBhZ2VzCisgKi8KK3N0cnVjdCBzbmRfc2dfcGFnZSB7CisJdm9pZCAqYnVmOworCWRtYV9hZGRyX3QgYWRkcjsKK307CisKK3N0cnVjdCBzbmRfc2dfYnVmIHsKKwlpbnQgc2l6ZTsJLyogYWxsb2NhdGVkIGJ5dGUgc2l6ZSAqLworCWludCBwYWdlczsJLyogYWxsb2NhdGVkIHBhZ2VzICovCisJaW50IHRibHNpemU7CS8qIGFsbG9jYXRlZCB0YWJsZSBzaXplICovCisJc3RydWN0IHNuZF9zZ19wYWdlICp0YWJsZTsJLyogYWRkcmVzcyB0YWJsZSAqLworCXN0cnVjdCBwYWdlICoqcGFnZV90YWJsZTsJLyogcGFnZSB0YWJsZSAoZm9yIHZtYXAvdnVubWFwKSAqLworCXN0cnVjdCBkZXZpY2UgKmRldjsKK307CisKKy8qCisgKiByZXR1cm4gdGhlIHBhZ2VzIG1hdGNoaW5nIHdpdGggdGhlIGdpdmVuIGJ5dGUgc2l6ZQorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBzbmRfc2didWZfYWxpZ25lZF9wYWdlcyhzaXplX3Qgc2l6ZSkKK3sKKwlyZXR1cm4gKHNpemUgKyBQQUdFX1NJWkUgLSAxKSA+PiBQQUdFX1NISUZUOworfQorCisvKgorICogcmV0dXJuIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGF0IHRoZSBjb3JyZXNwb25kaW5nIG9mZnNldAorICovCitzdGF0aWMgaW5saW5lIGRtYV9hZGRyX3Qgc25kX3NnYnVmX2dldF9hZGRyKHN0cnVjdCBzbmRfc2dfYnVmICpzZ2J1Ziwgc2l6ZV90IG9mZnNldCkKK3sKKwlyZXR1cm4gc2didWYtPnRhYmxlW29mZnNldCA+PiBQQUdFX1NISUZUXS5hZGRyICsgb2Zmc2V0ICUgUEFHRV9TSVpFOworfQorCisKKy8qIGFsbG9jYXRlL3JlbGVhc2UgYSBidWZmZXIgKi8KK2ludCBzbmRfZG1hX2FsbG9jX3BhZ2VzKGludCB0eXBlLCBzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAorCQkJc3RydWN0IHNuZF9kbWFfYnVmZmVyICpkbWFiKTsKK2ludCBzbmRfZG1hX2FsbG9jX3BhZ2VzX2ZhbGxiYWNrKGludCB0eXBlLCBzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNuZF9kbWFfYnVmZmVyICpkbWFiKTsKK3ZvaWQgc25kX2RtYV9mcmVlX3BhZ2VzKHN0cnVjdCBzbmRfZG1hX2J1ZmZlciAqZG1hYik7CisKKy8qIGJ1ZmZlci1wcmVzZXJ2YXRpb24gbWFuYWdlbWVudHMgKi8KKworI2RlZmluZSBzbmRfZG1hX3BjaV9idWZfaWQocGNpKQkoKCh1bnNpZ25lZCBpbnQpKHBjaSktPnZlbmRvciA8PCAxNikgfCAocGNpKS0+ZGV2aWNlKQorCitzaXplX3Qgc25kX2RtYV9nZXRfcmVzZXJ2ZWRfYnVmKHN0cnVjdCBzbmRfZG1hX2J1ZmZlciAqZG1hYiwgdW5zaWduZWQgaW50IGlkKTsKK2ludCBzbmRfZG1hX3Jlc2VydmVfYnVmKHN0cnVjdCBzbmRfZG1hX2J1ZmZlciAqZG1hYiwgdW5zaWduZWQgaW50IGlkKTsKKworLyogYmFzaWMgbWVtb3J5IGFsbG9jYXRpb24gZnVuY3Rpb25zICovCit2b2lkICpzbmRfbWFsbG9jX3BhZ2VzKHNpemVfdCBzaXplLCB1bnNpZ25lZCBpbnQgZ2ZwX2ZsYWdzKTsKK3ZvaWQgc25kX2ZyZWVfcGFnZXModm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSk7CisKKyNlbmRpZiAvKiBfX1NPVU5EX01FTUFMTE9DX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9taW5vcnMuaCBiL2luY2x1ZGUvc291bmQvbWlub3JzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdiMGQ4MwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvc291bmQvbWlub3JzLmgKQEAgLTAsMCArMSw4OSBAQAorI2lmbmRlZiBfX1NPVU5EX01JTk9SU19ICisjZGVmaW5lIF9fU09VTkRfTUlOT1JTX0gKKworLyoKKyAqICBNSU5PUiBudW1iZXJzCisgKgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqCisgKi8KKworI2RlZmluZSBTTkRSVl9NSU5PUl9ERVZJQ0VTCQkzMgorI2RlZmluZSBTTkRSVl9NSU5PUl9DQVJEKG1pbm9yKQkJKChtaW5vcikgPj4gNSkKKyNkZWZpbmUgU05EUlZfTUlOT1JfREVWSUNFKG1pbm9yKQkoKG1pbm9yKSAmIDB4MDAxZikKKyNkZWZpbmUgU05EUlZfTUlOT1IoY2FyZCwgZGV2KQkJKCgoY2FyZCkgPDwgNSkgfCAoZGV2KSkKKworI2RlZmluZSBTTkRSVl9NSU5PUl9DT05UUk9MCQkwCS8qIDAgLSAwICovCisjZGVmaW5lIFNORFJWX01JTk9SX1NFUVVFTkNFUgkJMQorI2RlZmluZSBTTkRSVl9NSU5PUl9USU1FUgkJKDErMzIpCisjZGVmaW5lIFNORFJWX01JTk9SX0hXREVQCQk0CS8qIDQgLSA3ICovCisjZGVmaW5lIFNORFJWX01JTk9SX0hXREVQUwkJNAorI2RlZmluZSBTTkRSVl9NSU5PUl9SQVdNSURJCQk4CS8qIDggLSAxNSAqLworI2RlZmluZSBTTkRSVl9NSU5PUl9SQVdNSURJUwkJOAorI2RlZmluZSBTTkRSVl9NSU5PUl9QQ01fUExBWUJBQ0sJMTYJLyogMTYgLSAyMyAqLworI2RlZmluZSBTTkRSVl9NSU5PUl9QQ01fQ0FQVFVSRQkJMjQJLyogMjQgLSAzMSAqLworI2RlZmluZSBTTkRSVl9NSU5PUl9QQ01TCQk4CisKKyNkZWZpbmUgU05EUlZfREVWSUNFX1RZUEVfQ09OVFJPTAlTTkRSVl9NSU5PUl9DT05UUk9MCisjZGVmaW5lIFNORFJWX0RFVklDRV9UWVBFX0hXREVQCQlTTkRSVl9NSU5PUl9IV0RFUAorI2RlZmluZSBTTkRSVl9ERVZJQ0VfVFlQRV9NSVhFUgkJU05EUlZfTUlOT1JfTUlYRVIKKyNkZWZpbmUgU05EUlZfREVWSUNFX1RZUEVfUkFXTUlESQlTTkRSVl9NSU5PUl9SQVdNSURJCisjZGVmaW5lIFNORFJWX0RFVklDRV9UWVBFX1BDTV9QTEFZQkFDSwlTTkRSVl9NSU5PUl9QQ01fUExBWUJBQ0sKKyNkZWZpbmUgU05EUlZfREVWSUNFX1RZUEVfUENNX1BMT09QCVNORFJWX01JTk9SX1BDTV9QTE9PUAorI2RlZmluZSBTTkRSVl9ERVZJQ0VfVFlQRV9QQ01fQ0FQVFVSRQlTTkRSVl9NSU5PUl9QQ01fQ0FQVFVSRQorI2RlZmluZSBTTkRSVl9ERVZJQ0VfVFlQRV9QQ01fQ0xPT1AJU05EUlZfTUlOT1JfUENNX0NMT09QCisjZGVmaW5lIFNORFJWX0RFVklDRV9UWVBFX1NFUVVFTkNFUglTTkRSVl9NSU5PUl9TRVFVRU5DRVIKKyNkZWZpbmUgU05EUlZfREVWSUNFX1RZUEVfVElNRVIJCVNORFJWX01JTk9SX1RJTUVSCisKKyNpZmRlZiBDT05GSUdfU05EX09TU0VNVUwKKworI2RlZmluZSBTTkRSVl9NSU5PUl9PU1NfREVWSUNFUwkJMTYKKyNkZWZpbmUgU05EUlZfTUlOT1JfT1NTX0NBUkQobWlub3IpCSgobWlub3IpID4+IDQpCisjZGVmaW5lIFNORFJWX01JTk9SX09TU19ERVZJQ0UobWlub3IpCSgobWlub3IpICYgMHgwMDBmKQorI2RlZmluZSBTTkRSVl9NSU5PUl9PU1MoY2FyZCwgZGV2KQkoKChjYXJkKSA8PCA0KSB8IChkZXYpKQorCisjZGVmaW5lIFNORFJWX01JTk9SX09TU19NSVhFUgkJMAkvKiAvZGV2L21peGVyIC0gT1NTIDMuWFggY29tcGF0aWJsZSAqLworI2RlZmluZSBTTkRSVl9NSU5PUl9PU1NfU0VRVUVOQ0VSCTEJLyogL2Rldi9zZXF1ZW5jZXIgLSBPU1MgMy5YWCBjb21wYXRpYmxlICovCisjZGVmaW5lCVNORFJWX01JTk9SX09TU19NSURJCQkyCS8qIC9kZXYvbWlkaSAtIG5hdGl2ZSBtaWRpIGludGVyZmFjZSAtIE9TUyAzLlhYIGNvbXBhdGlibGUgLSBVQVJUICovCisjZGVmaW5lIFNORFJWX01JTk9SX09TU19QQ00JCTMJLyogYWxpYXMgKi8KKyNkZWZpbmUgU05EUlZfTUlOT1JfT1NTX1BDTV84CQkzCS8qIC9kZXYvZHNwIC0gOGJpdCBQQ00gLSBPU1MgMy5YWCBjb21wYXRpYmxlICovCisjZGVmaW5lIFNORFJWX01JTk9SX09TU19BVURJTwkJNAkvKiAvZGV2L2F1ZGlvIC0gU3VuU3BhcmMgY29tcGF0aWJsZSAqLworI2RlZmluZSBTTkRSVl9NSU5PUl9PU1NfUENNXzE2CQk1CS8qIC9kZXYvZHNwMTYgLSAxNmJpdCBQQ00gLSBPU1MgMy5YWCBjb21wYXRpYmxlICovCisjZGVmaW5lIFNORFJWX01JTk9SX09TU19TTkRTVEFUCQk2CS8qIC9kZXYvc25kc3RhdCAtIGZvciBjb21wYXRpYmlsaXR5IHdpdGggT1NTICovCisjZGVmaW5lIFNORFJWX01JTk9SX09TU19SRVNFUlZFRDcJNwkvKiByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqLworI2RlZmluZSBTTkRSVl9NSU5PUl9PU1NfTVVTSUMJCTgJLyogL2Rldi9tdXNpYyAtIE9TUyAzLlhYIGNvbXBhdGlibGUgKi8KKyNkZWZpbmUgU05EUlZfTUlOT1JfT1NTX0RNTUlESQkJOQkvKiAvZGV2L2RtbWlkaTAgLSB0aGlzIGRldmljZSBjYW4gaGF2ZSBhbm90aGVyIG1pbm9yICMgd2l0aCBPU1MgKi8KKyNkZWZpbmUgU05EUlZfTUlOT1JfT1NTX0RNRk0JCTEwCS8qIC9kZXYvZG1mbTAgLSB0aGlzIGRldmljZSBjYW4gaGF2ZSBhbm90aGVyIG1pbm9yICMgd2l0aCBPU1MgKi8KKyNkZWZpbmUgU05EUlZfTUlOT1JfT1NTX01JWEVSMQkJMTEJLyogYWx0ZXJuYXRlIG1peGVyICovCisjZGVmaW5lIFNORFJWX01JTk9SX09TU19QQ00xCQkxMgkvKiBhbHRlcm5hdGUgUENNIChHRi1BLTEpICovCisjZGVmaW5lIFNORFJWX01JTk9SX09TU19NSURJMQkJMTMJLyogYWx0ZXJuYXRlIG1pZGkgLSBTWU5USCAqLworI2RlZmluZSBTTkRSVl9NSU5PUl9PU1NfRE1NSURJMQkJMTQJLyogYWx0ZXJuYXRlIGRtbWlkaSAtIFNZTlRIICovCisjZGVmaW5lIFNORFJWX01JTk9SX09TU19SRVNFUlZFRDE1CTE1CS8qIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovCisKKyNkZWZpbmUgU05EUlZfT1NTX0RFVklDRV9UWVBFX01JWEVSCTAKKyNkZWZpbmUgU05EUlZfT1NTX0RFVklDRV9UWVBFX1NFUVVFTkNFUgkxCisjZGVmaW5lIFNORFJWX09TU19ERVZJQ0VfVFlQRV9QQ00JMgorI2RlZmluZSBTTkRSVl9PU1NfREVWSUNFX1RZUEVfTUlESQkzCisjZGVmaW5lIFNORFJWX09TU19ERVZJQ0VfVFlQRV9ETUZNCTQKKyNkZWZpbmUgU05EUlZfT1NTX0RFVklDRV9UWVBFX1NORFNUQVQJNQorI2RlZmluZSBTTkRSVl9PU1NfREVWSUNFX1RZUEVfTVVTSUMJNgorCisjZGVmaW5lIE1PRFVMRV9BTElBU19TTkRSVl9NSU5PUih0eXBlKSBcCisJTU9EVUxFX0FMSUFTKCJzb3VuZC1zZXJ2aWNlLT8tIiBfX3N0cmluZ2lmeSh0eXBlKSkKKworI2VuZGlmCisKKyNlbmRpZiAvKiBfX1NPVU5EX01JTk9SU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL21peGVyX29zcy5oIGIvaW5jbHVkZS9zb3VuZC9taXhlcl9vc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDc1YjJmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9zb3VuZC9taXhlcl9vc3MuaApAQCAtMCwwICsxLDc2IEBACisjaWZuZGVmIF9fU09VTkRfTUlYRVJfT1NTX0gKKyNkZWZpbmUgX19TT1VORF9NSVhFUl9PU1NfSAorCisvKgorICogIE9TUyBNSVhFUiBBUEkKKyAqICBDb3B5cmlnaHQgKGMpIGJ5IEphcm9zbGF2IEt5c2VsYSA8cGVyZXhAc3VzZS5jej4KKyAqCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICoKKyAqLworCisjaWYgZGVmaW5lZChDT05GSUdfU05EX01JWEVSX09TUykgfHwgZGVmaW5lZChDT05GSUdfU05EX01JWEVSX09TU19NT0RVTEUpCisKK3R5cGVkZWYgc3RydWN0IF9zbmRfb3NzX21peGVyX3Nsb3Qgc25kX21peGVyX29zc19zbG90X3Q7Cit0eXBlZGVmIHN0cnVjdCBfc25kX29zc19maWxlIHNuZF9taXhlcl9vc3NfZmlsZV90OworCit0eXBlZGVmIGludCAoKnNuZF9taXhlcl9vc3NfZ2V0X3ZvbHVtZV90KShzbmRfbWl4ZXJfb3NzX2ZpbGVfdCAqZm1peGVyLCBzbmRfbWl4ZXJfb3NzX3Nsb3RfdCAqY2huLCBpbnQgKmxlZnQsIGludCAqcmlnaHQpOwordHlwZWRlZiBpbnQgKCpzbmRfbWl4ZXJfb3NzX3B1dF92b2x1bWVfdCkoc25kX21peGVyX29zc19maWxlX3QgKmZtaXhlciwgc25kX21peGVyX29zc19zbG90X3QgKmNobiwgaW50IGxlZnQsIGludCByaWdodCk7Cit0eXBlZGVmIGludCAoKnNuZF9taXhlcl9vc3NfZ2V0X3JlY3NyY190KShzbmRfbWl4ZXJfb3NzX2ZpbGVfdCAqZm1peGVyLCBzbmRfbWl4ZXJfb3NzX3Nsb3RfdCAqY2huLCBpbnQgKmFjdGl2ZSk7Cit0eXBlZGVmIGludCAoKnNuZF9taXhlcl9vc3NfcHV0X3JlY3NyY190KShzbmRfbWl4ZXJfb3NzX2ZpbGVfdCAqZm1peGVyLCBzbmRfbWl4ZXJfb3NzX3Nsb3RfdCAqY2huLCBpbnQgYWN0aXZlKTsKK3R5cGVkZWYgaW50ICgqc25kX21peGVyX29zc19nZXRfcmVjc3JjZV90KShzbmRfbWl4ZXJfb3NzX2ZpbGVfdCAqZm1peGVyLCB1bnNpZ25lZCBpbnQgKmFjdGl2ZV9pbmRleCk7Cit0eXBlZGVmIGludCAoKnNuZF9taXhlcl9vc3NfcHV0X3JlY3NyY2VfdCkoc25kX21peGVyX29zc19maWxlX3QgKmZtaXhlciwgdW5zaWduZWQgaW50IGFjdGl2ZV9pbmRleCk7CisKKyNkZWZpbmUgU05EUlZfT1NTX01BWF9NSVhFUlMJMzIKKworc3RydWN0IF9zbmRfb3NzX21peGVyX3Nsb3QgeworCWludCBudW1iZXI7CisJdW5zaWduZWQgaW50IHN0ZXJlbzogMTsKKwlzbmRfbWl4ZXJfb3NzX2dldF92b2x1bWVfdCBnZXRfdm9sdW1lOworCXNuZF9taXhlcl9vc3NfcHV0X3ZvbHVtZV90IHB1dF92b2x1bWU7CisJc25kX21peGVyX29zc19nZXRfcmVjc3JjX3QgZ2V0X3JlY3NyYzsKKwlzbmRfbWl4ZXJfb3NzX3B1dF9yZWNzcmNfdCBwdXRfcmVjc3JjOworCXVuc2lnbmVkIGxvbmcgcHJpdmF0ZV92YWx1ZTsKKwl2b2lkICpwcml2YXRlX2RhdGE7CisJdm9pZCAoKnByaXZhdGVfZnJlZSkoc25kX21peGVyX29zc19zbG90X3QgKnNsb3QpOworCWludCB2b2x1bWVbMl07Cit9OworCitzdHJ1Y3QgX3NuZF9vc3NfbWl4ZXIgeworCXNuZF9jYXJkX3QgKmNhcmQ7CisJY2hhciBpZFsxNl07CisJY2hhciBuYW1lWzMyXTsKKwlzbmRfbWl4ZXJfb3NzX3Nsb3RfdCBzbG90c1tTTkRSVl9PU1NfTUFYX01JWEVSU107IC8qIE9TUyBtaXhlciBzbG90cyAqLworCXVuc2lnbmVkIGludCBtYXNrX3JlY3NyYzsJCS8qIGV4Y2x1c2l2ZSByZWNzcmMgbWFzayAqLworCXNuZF9taXhlcl9vc3NfZ2V0X3JlY3NyY2VfdCBnZXRfcmVjc3JjOworCXNuZF9taXhlcl9vc3NfcHV0X3JlY3NyY2VfdCBwdXRfcmVjc3JjOworCXZvaWQgKnByaXZhdGVfZGF0YV9yZWNzcmM7CisJdm9pZCAoKnByaXZhdGVfZnJlZV9yZWNzcmMpKHNuZF9taXhlcl9vc3NfdCAqbWl4ZXIpOworCXN0cnVjdCBzZW1hcGhvcmUgcmVnX211dGV4OworCXNuZF9pbmZvX2VudHJ5X3QgKnByb2NfZW50cnk7CisJaW50IG9zc19kZXZfYWxsb2M7CisJLyogLS0tICovCisJaW50IG9zc19yZWNzcmM7Cit9OworCitzdHJ1Y3QgX3NuZF9vc3NfZmlsZSB7CisJc25kX2NhcmRfdCAqY2FyZDsKKwlzbmRfbWl4ZXJfb3NzX3QgKm1peGVyOworfTsKKworI2VuZGlmIC8qIENPTkZJR19TTkRfTUlYRVJfT1NTICovCisKKyNlbmRpZiAvKiBfX1NPVU5EX01JWEVSX09TU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL21wdTQwMS5oIGIvaW5jbHVkZS9zb3VuZC9tcHU0MDEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTM5ZTM4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9zb3VuZC9tcHU0MDEuaApAQCAtMCwwICsxLDExNSBAQAorI2lmbmRlZiBfX1NPVU5EX01QVTQwMV9ICisjZGVmaW5lIF9fU09VTkRfTVBVNDAxX0gKKworLyoKKyAqICBIZWFkZXIgZmlsZSBmb3IgTVBVLTQwMSBhbmQgY29tcGF0aWJsZSBjYXJkcworICogIENvcHlyaWdodCAoYykgYnkgSmFyb3NsYXYgS3lzZWxhIDxwZXJleEBzdXNlLmN6PgorICoKKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKgorICovCisKKyNpbmNsdWRlICJyYXdtaWRpLmgiCisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisKKyNkZWZpbmUgTVBVNDAxX0hXX01QVTQwMQkJMQkvKiBuYXRpdmUgTVBVNDAxICovCisjZGVmaW5lIE1QVTQwMV9IV19TQgkJCTIJLyogU291bmRCbGFzdGVyIE1QVS00MDEgVUFSVCAqLworI2RlZmluZSBNUFU0MDFfSFdfRVMxNjg4CQkzCS8qIEF1ZGlvRHJpdmUgRVMxNjg4IE1QVS00MDEgVUFSVCAqLworI2RlZmluZSBNUFU0MDFfSFdfT1BMM1NBMgkJNAkvKiBZYW1haGEgT1BMMy1TQTIgKi8KKyNkZWZpbmUgTVBVNDAxX0hXX1NPTklDVklCRVMJCTUJLyogUzMgU29uaWNWaWJlcyAqLworI2RlZmluZSBNUFU0MDFfSFdfQ1M0MjMyCQk2CS8qIENTNDIzMiAqLworI2RlZmluZSBNUFU0MDFfSFdfRVMxOFhYCQk3CS8qIEF1ZGlvRHJpdmUgRVMxOFhYIE1QVS00MDEgVUFSVCAqLworI2RlZmluZSBNUFU0MDFfSFdfRk04MDEJCQk4CS8qIEZvcnRlTWVkaWEgRk04MDEgKi8KKyNkZWZpbmUgTVBVNDAxX0hXX1RSSUQ0RFdBVkUJCTkJLyogVHJpZGVudCA0RFdhdmUgKi8KKyNkZWZpbmUgTVBVNDAxX0hXX0FaVDIzMjAJCTEwCS8qIEF6dGVjaCBBWlQyMzIwICovCisjZGVmaW5lIE1QVTQwMV9IV19BTFMxMDAJCTExCS8qIEF2YW5jZSBMb2dpYyBBTFMxMDAgKi8KKyNkZWZpbmUgTVBVNDAxX0hXX0lDRTE3MTIJCTEyCS8qIEVudnkyNCAqLworI2RlZmluZSBNUFU0MDFfSFdfVklBNjg2QQkJMTMJLyogVklBIDgyQzY4NkEgKi8KKyNkZWZpbmUgTVBVNDAxX0hXX1lNRlBDSQkJMTQJLyogWU1GIERTLVhHIFBDSSAqLworI2RlZmluZSBNUFU0MDFfSFdfQ01JUENJCQkxNQkvKiBDTUlQQ0kgTVBVLTQwMSBVQVJUICovCisjZGVmaW5lIE1QVTQwMV9IV19BTFM0MDAwCQkxNgkvKiBBdmFuY2UgTG9naWMgQUxTNDAwMCAqLworI2RlZmluZSBNUFU0MDFfSFdfSU5URUw4WDAJCTE3CS8qIEludGVsOHgwIGRyaXZlciAqLworI2RlZmluZSBNUFU0MDFfSFdfUEM5OElJCQkxOAkvKiBSb2xhbmQgUEM5OElJICovCisjZGVmaW5lIE1QVTQwMV9IV19BVVJFQUwJCTE5CS8qIEF1cmVhbCBWb3J0ZXggKi8KKworI2RlZmluZSBNUFU0MDFfTU9ERV9CSVRfSU5QVVQJCTAKKyNkZWZpbmUgTVBVNDAxX01PREVfQklUX09VVFBVVAkJMQorI2RlZmluZSBNUFU0MDFfTU9ERV9CSVRfSU5QVVRfVFJJR0dFUgkyCisjZGVmaW5lIE1QVTQwMV9NT0RFX0JJVF9PVVRQVVRfVFJJR0dFUgkzCisKKyNkZWZpbmUgTVBVNDAxX01PREVfSU5QVVQJCSgxPDxNUFU0MDFfTU9ERV9CSVRfSU5QVVQpCisjZGVmaW5lIE1QVTQwMV9NT0RFX09VVFBVVAkJKDE8PE1QVTQwMV9NT0RFX0JJVF9PVVRQVVQpCisjZGVmaW5lIE1QVTQwMV9NT0RFX0lOUFVUX1RSSUdHRVIJKDE8PE1QVTQwMV9NT0RFX0JJVF9JTlBVVF9UUklHR0VSKQorI2RlZmluZSBNUFU0MDFfTU9ERV9PVVRQVVRfVFJJR0dFUgkoMTw8TVBVNDAxX01PREVfQklUX09VVFBVVF9UUklHR0VSKQorCisjZGVmaW5lIE1QVTQwMV9NT0RFX0lOUFVUX1RJTUVSCQkoMTw8MCkKKyNkZWZpbmUgTVBVNDAxX01PREVfT1VUUFVUX1RJTUVSCSgxPDwxKQorCit0eXBlZGVmIHN0cnVjdCBfc25kX21wdTQwMSBtcHU0MDFfdDsKKworc3RydWN0IF9zbmRfbXB1NDAxIHsKKwlzbmRfcmF3bWlkaV90ICpybWlkaTsKKworCXVuc2lnbmVkIHNob3J0IGhhcmR3YXJlOwkvKiBNUFU0MDFfSFdfWFhYWCAqLworCXVuc2lnbmVkIGxvbmcgcG9ydDsJCS8qIGJhc2UgcG9ydCBvZiBNUFUtNDAxIGNoaXAgKi8KKwl1bnNpZ25lZCBsb25nIGNwb3J0OwkJLyogcG9ydCArIDEgKHVzdWFsbHkpICovCisJc3RydWN0IHJlc291cmNlICpyZXM7CQkvKiBwb3J0IHJlc291cmNlICovCisJaW50IGlycTsJCQkvKiBJUlEgbnVtYmVyIG9mIE1QVS00MDEgY2hpcCAoLTEgPSBwb2xsKSAqLworCWludCBpcnFfZmxhZ3M7CisKKwl1bnNpZ25lZCBsb25nIG1vZGU7CQkvKiBNUFU0MDFfTU9ERV9YWFhYICovCisJaW50IHRpbWVyX2ludm9rZWQ7CisKKwlpbnQgKCpvcGVuX2lucHV0KSAobXB1NDAxX3QgKiBtcHUpOworCXZvaWQgKCpjbG9zZV9pbnB1dCkgKG1wdTQwMV90ICogbXB1KTsKKwlpbnQgKCpvcGVuX291dHB1dCkgKG1wdTQwMV90ICogbXB1KTsKKwl2b2lkICgqY2xvc2Vfb3V0cHV0KSAobXB1NDAxX3QgKiBtcHUpOworCXZvaWQgKnByaXZhdGVfZGF0YTsKKworCXNuZF9yYXdtaWRpX3N1YnN0cmVhbV90ICpzdWJzdHJlYW1faW5wdXQ7CisJc25kX3Jhd21pZGlfc3Vic3RyZWFtX3QgKnN1YnN0cmVhbV9vdXRwdXQ7CisKKwlzcGlubG9ja190IGlucHV0X2xvY2s7CisJc3BpbmxvY2tfdCBvdXRwdXRfbG9jazsKKwlzcGlubG9ja190IHRpbWVyX2xvY2s7CisJCisJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CisKKwl2b2lkICgqd3JpdGUpIChtcHU0MDFfdCAqIG1wdSwgdW5zaWduZWQgY2hhciBkYXRhLCB1bnNpZ25lZCBsb25nIGFkZHIpOworCXVuc2lnbmVkIGNoYXIgKCpyZWFkKSAobXB1NDAxX3QgKiBtcHUsIHVuc2lnbmVkIGxvbmcgYWRkcik7Cit9OworCisvKiBJL08gcG9ydHMgKi8KKworI2RlZmluZSBNUFU0MDFDKG1wdSkgKG1wdSktPmNwb3J0CisjZGVmaW5lIE1QVTQwMUQobXB1KSAobXB1KS0+cG9ydAorCisvKgorCisgKi8KKworaXJxcmV0dXJuX3Qgc25kX21wdTQwMV91YXJ0X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworaW50IHNuZF9tcHU0MDFfdWFydF9uZXcoc25kX2NhcmRfdCAqIGNhcmQsCisJCQlpbnQgZGV2aWNlLAorCQkJdW5zaWduZWQgc2hvcnQgaGFyZHdhcmUsCisJCQl1bnNpZ25lZCBsb25nIHBvcnQsCisJCQlpbnQgaW50ZWdyYXRlZCwKKwkJCWludCBpcnEsCisJCQlpbnQgaXJxX2ZsYWdzLAorCQkJc25kX3Jhd21pZGlfdCAqKiBycmF3bWlkaSk7CisKKyNlbmRpZiAvKiBfX1NPVU5EX01QVTQwMV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL29wbDMuaCBiL2luY2x1ZGUvc291bmQvb3BsMy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5ZjY1N2QKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3NvdW5kL29wbDMuaApAQCAtMCwwICsxLDMzOSBAQAorI2lmbmRlZiBfX1NPVU5EX09QTDNfSAorI2RlZmluZSBfX1NPVU5EX09QTDNfSAorCisvKgorICogRGVmaW5pdGlvbnMgb2YgdGhlIE9QTC0zIHJlZ2lzdGVycy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIGJ5IEphcm9zbGF2IEt5c2VsYSA8cGVyZXhAc3VzZS5jej4sCisgKiAgICAgICAgICAgICAgICAgIEhhbm51IFNhdm9sYWluZW4gMTk5My0xOTk2CisgKgorICoKKyAqICAgICAgVGhlIE9QTC0zIG1vZGUgaXMgc3dpdGNoZWQgb24gYnkgd3JpdGluZyAweDAxLCB0byB0aGUgb2Zmc2V0IDUKKyAqICAgICAgb2YgdGhlIHJpZ2h0IHNpZGUuCisgKgorICogICAgICBBbm90aGVyIHNwZWNpYWwgcmVnaXN0ZXIgYXQgdGhlIHJpZ2h0IHNpZGUgaXMgYXQgb2Zmc2V0IDQuIEl0IGNvbnRhaW5zCisgKiAgICAgIGEgYml0IG1hc2sgZGVmaW5pbmcgd2hpY2ggdm9pY2VzIGFyZSB1c2VkIGFzIDQgT1Agdm9pY2VzLgorICoKKyAqICAgICAgVGhlIHBlcmN1c3NpdmUgbW9kZSBpcyBpbXBsZW1lbnRlZCBpbiB0aGUgbGVmdCBzaWRlIG9ubHkuCisgKgorICogICAgICBXaXRoIHRoZSBhYm92ZSBleGNlcHRpb25zIHRoZSBib3RoIHNpZGVzIGNhbiBiZSBvcGVyYXRlZCBpbmRlcGVuZGVudGx5LgorICogICAgICAKKyAqICAgICAgQSA0IE9QIHZvaWNlIGNhbiBiZSBjcmVhdGVkIGJ5IHNldHRpbmcgdGhlIGNvcnJlc3BvbmRpbmcKKyAqICAgICAgYml0IGF0IG9mZnNldCA0IG9mIHRoZSByaWdodCBzaWRlLgorICoKKyAqICAgICAgRm9yIGV4YW1wbGUgc2V0dGluZyB0aGUgcmlnaHRtb3N0IGJpdCAoMHgwMSkgY2hhbmdlcyB0aGUKKyAqICAgICAgZmlyc3Qgdm9pY2Ugb24gdGhlIHJpZ2h0IHNpZGUgdG8gdGhlIDQgT1AgbW9kZS4gVGhlIGZvdXJ0aAorICogICAgICB2b2ljZSBpcyBtYWRlIGluYWNjZXNzaWJsZS4KKyAqCisgKiAgICAgIElmIGEgdm9pY2UgaXMgc2V0IHRvIHRoZSAyIE9QIG1vZGUsIGl0IHdvcmtzIGxpa2UgMiBPUCBtb2RlcworICogICAgICBvZiB0aGUgb3JpZ2luYWwgWU0zODEyIChBZExpYikuIEluIGFkZGl0aW9uIHRoZSB2b2ljZSBjYW4gCisgKiAgICAgIGJlIGNvbm5lY3RlZCB0aGUgbGVmdCwgcmlnaHQgb3IgYm90aCBzdGVyZW8gY2hhbm5lbHMuIEl0IGNhbgorICogICAgICBldmVuIGJlIGxlZnQgdW5jb25uZWN0ZWQuIFRoaXMgd29ya3Mgd2l0aCA0IE9QIHZvaWNlcyBhbHNvLgorICoKKyAqICAgICAgVGhlIHN0ZXJlbyBjb25uZWN0aW9uIGJpdHMgYXJlIGxvY2F0ZWQgaW4gdGhlIEZFRURCQUNLX0NPTk5FQ1RJT04KKyAqICAgICAgcmVnaXN0ZXIgb2YgdGhlIHZvaWNlICgweEMwLTB4QzgpLiBJbiA0IE9QIHZvaWNlcyB0aGVzZSBiaXRzIGFyZQorICogICAgICBpbiB0aGUgc2Vjb25kIGhhbGYgb2YgdGhlIHZvaWNlLgorICoKKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKgorICovCisKKyNpbmNsdWRlICJkcml2ZXIuaCIKKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSAiY29yZS5oIgorI2luY2x1ZGUgImh3ZGVwLmgiCisjaW5jbHVkZSAidGltZXIuaCIKKyNpbmNsdWRlICJzZXFfbWlkaV9lbXVsLmgiCisjaWZkZWYgQ09ORklHX1NORF9TRVFVRU5DRVJfT1NTCisjaW5jbHVkZSAic2VxX29zcy5oIgorI2luY2x1ZGUgInNlcV9vc3NfbGVnYWN5LmgiCisjZW5kaWYKKyNpbmNsdWRlICJzZXFfZGV2aWNlLmgiCisjaW5jbHVkZSAiYWluc3RyX2ZtLmgiCisKKy8qCisgKiAgICBSZWdpc3RlciBudW1iZXJzIGZvciB0aGUgZ2xvYmFsIHJlZ2lzdGVycworICovCisKKyNkZWZpbmUgT1BMM19SRUdfVEVTVAkJCTB4MDEKKyNkZWZpbmUgICBPUEwzX0VOQUJMRV9XQVZFX1NFTEVDVAkweDIwCisKKyNkZWZpbmUgT1BMM19SRUdfVElNRVIxCQkJMHgwMgorI2RlZmluZSBPUEwzX1JFR19USU1FUjIJCQkweDAzCisjZGVmaW5lIE9QTDNfUkVHX1RJTUVSX0NPTlRST0wJCTB4MDQJLyogTGVmdCBzaWRlICovCisjZGVmaW5lICAgT1BMM19JUlFfUkVTRVQJCTB4ODAKKyNkZWZpbmUgICBPUEwzX1RJTUVSMV9NQVNLCQkweDQwCisjZGVmaW5lICAgT1BMM19USU1FUjJfTUFTSwkJMHgyMAorI2RlZmluZSAgIE9QTDNfVElNRVIxX1NUQVJUCQkweDAxCisjZGVmaW5lICAgT1BMM19USU1FUjJfU1RBUlQJCTB4MDIKKworI2RlZmluZSBPUEwzX1JFR19DT05ORUNUSU9OX1NFTEVDVAkweDA0CS8qIFJpZ2h0IHNpZGUgKi8KKyNkZWZpbmUgICBPUEwzX0xFRlRfNE9QXzAJCTB4MDEKKyNkZWZpbmUgICBPUEwzX0xFRlRfNE9QXzEJCTB4MDIKKyNkZWZpbmUgICBPUEwzX0xFRlRfNE9QXzIJCTB4MDQKKyNkZWZpbmUgICBPUEwzX1JJR0hUXzRPUF8wCQkweDA4CisjZGVmaW5lICAgT1BMM19SSUdIVF80T1BfMQkJMHgxMAorI2RlZmluZSAgIE9QTDNfUklHSFRfNE9QXzIJCTB4MjAKKworI2RlZmluZSBPUEwzX1JFR19NT0RFCQkJMHgwNQkvKiBSaWdodCBzaWRlICovCisjZGVmaW5lICAgT1BMM19PUEwzX0VOQUJMRQkJMHgwMQkvKiBPUEwzIG1vZGUgKi8KKyNkZWZpbmUgICBPUEwzX09QTDRfRU5BQkxFCQkweDAyCS8qIE9QTDQgbW9kZSAqLworCisjZGVmaW5lIE9QTDNfUkVHX0tCRF9TUExJVAkJMHgwOAkvKiBMZWZ0IHNpZGUgKi8KKyNkZWZpbmUgICBPUEwzX0NPTVBPU0lURV9TSU5FX1dBVkVfTU9ERQkweDgwCS8qIERvbid0IHVzZSB3aXRoIE9QTC0zPyAqLworI2RlZmluZSAgIE9QTDNfS0VZQk9BUkRfU1BMSVQJCTB4NDAKKworI2RlZmluZSBPUEwzX1JFR19QRVJDVVNTSU9OCQkweGJkCS8qIExlZnQgc2lkZSBvbmx5ICovCisjZGVmaW5lICAgT1BMM19UUkVNT0xPX0RFUFRICQkweDgwCisjZGVmaW5lICAgT1BMM19WSUJSQVRPX0RFUFRICQkweDQwCisjZGVmaW5lCSAgT1BMM19QRVJDVVNTSU9OX0VOQUJMRQkweDIwCisjZGVmaW5lICAgT1BMM19CQVNTRFJVTV9PTgkJMHgxMAorI2RlZmluZSAgIE9QTDNfU05BUkVEUlVNX09OCQkweDA4CisjZGVmaW5lICAgT1BMM19UT01UT01fT04JCTB4MDQKKyNkZWZpbmUgICBPUEwzX0NZTUJBTF9PTgkJMHgwMgorI2RlZmluZSAgIE9QTDNfSElIQVRfT04JCQkweDAxCisKKy8qCisgKiAgICBPZmZzZXRzIHRvIHRoZSByZWdpc3RlciBiYW5rcyBmb3Igb3BlcmF0b3JzLiBUbyBnZXQgdGhlCisgKiAgICAgIHJlZ2lzdGVyIG51bWJlciBqdXN0IGFkZCB0aGUgb3BlcmF0b3Igb2Zmc2V0IHRvIHRoZSBiYW5rIG9mZnNldAorICoKKyAqICAgICAgQU0vVklCL0VHL0tTUi9NdWx0aXBsZSAoMHgyMCB0byAweDM1KQorICovCisjZGVmaW5lIE9QTDNfUkVHX0FNX1ZJQgkJCTB4MjAKKyNkZWZpbmUgICBPUEwzX1RSRU1PTE9fT04JCTB4ODAKKyNkZWZpbmUgICBPUEwzX1ZJQlJBVE9fT04JCTB4NDAKKyNkZWZpbmUgICBPUEwzX1NVU1RBSU5fT04JCTB4MjAKKyNkZWZpbmUgICBPUEwzX0tTUgkJCTB4MTAJLyogS2V5IHNjYWxpbmcgcmF0ZSAqLworI2RlZmluZSAgIE9QTDNfTVVMVElQTEVfTUFTSwkJMHgwZgkvKiBGcmVxdWVuY3kgbXVsdGlwbGllciAqLworCisgLyoKKyAgKiAgIEtTTC9Ub3RhbCBsZXZlbCAoMHg0MCB0byAweDU1KQorICAqLworI2RlZmluZSBPUEwzX1JFR19LU0xfTEVWRUwJCTB4NDAKKyNkZWZpbmUgICBPUEwzX0tTTF9NQVNLCQkJMHhjMAkvKiBFbnZlbG9wZSBzY2FsaW5nIGJpdHMgKi8KKyNkZWZpbmUgICBPUEwzX1RPVEFMX0xFVkVMX01BU0sJCTB4M2YJLyogU3RyZW5ndGggKHZvbHVtZSkgb2YgT1AgKi8KKworLyoKKyAqICAgIEF0dGFjayAvIERlY2F5IHJhdGUgKDB4NjAgdG8gMHg3NSkKKyAqLworI2RlZmluZSBPUEwzX1JFR19BVFRBQ0tfREVDQVkJCTB4NjAKKyNkZWZpbmUgICBPUEwzX0FUVEFDS19NQVNLCQkweGYwCisjZGVmaW5lICAgT1BMM19ERUNBWV9NQVNLCQkweDBmCisKKy8qCisgKiBTdXN0YWluIGxldmVsIC8gUmVsZWFzZSByYXRlICgweDgwIHRvIDB4OTUpCisgKi8KKyNkZWZpbmUgT1BMM19SRUdfU1VTVEFJTl9SRUxFQVNFCTB4ODAKKyNkZWZpbmUgICBPUEwzX1NVU1RBSU5fTUFTSwkJMHhmMAorI2RlZmluZSAgIE9QTDNfUkVMRUFTRV9NQVNLCQkweDBmCisKKy8qCisgKiBXYXZlIHNlbGVjdCAoMHhFMCB0byAweEY1KQorICovCisjZGVmaW5lIE9QTDNfUkVHX1dBVkVfU0VMRUNUCQkweGUwCisjZGVmaW5lICAgT1BMM19XQVZFX1NFTEVDVF9NQVNLCQkweDA3CisKKy8qCisgKiAgICBPZmZzZXRzIHRvIHRoZSByZWdpc3RlciBiYW5rcyBmb3Igdm9pY2VzLiBKdXN0IGFkZCB0byB0aGUKKyAqICAgICAgdm9pY2UgbnVtYmVyIHRvIGdldCB0aGUgcmVnaXN0ZXIgbnVtYmVyLgorICoKKyAqICAgICAgRi1OdW1iZXIgbG93IGJpdHMgKDB4QTAgdG8gMHhBOCkuCisgKi8KKyNkZWZpbmUgT1BMM19SRUdfRk5VTV9MT1cJCTB4YTAKKworLyoKKyAqICAgIEYtbnVtYmVyIGhpZ2ggYml0cyAvIEtleSBvbiAvIEJsb2NrIChvY3RhdmUpICgweEIwIHRvIDB4QjgpCisgKi8KKyNkZWZpbmUgT1BMM19SRUdfS0VZT05fQkxPQ0sJCTB4YjAKKyNkZWZpbmUJICBPUEwzX0tFWU9OX0JJVAkJMHgyMAorI2RlZmluZQkgIE9QTDNfQkxPQ0tOVU1fTUFTSwkJMHgxYworI2RlZmluZSAgIE9QTDNfRk5VTV9ISUdIX01BU0sJCTB4MDMKKworLyoKKyAqICAgIEZlZWRiYWNrIC8gQ29ubmVjdGlvbiAoMHhjMCB0byAweGM4KQorICoKKyAqICAgICAgVGhlc2UgcmVnaXN0ZXJzIGhhdmUgdHdvIG5ldyBiaXRzIHdoZW4gdGhlIE9QTC0zIG1vZGUKKyAqICAgICAgaXMgc2VsZWN0ZWQuIFRoZXNlIGJpdHMgY29udHJvbHMgY29ubmVjdGluZyB0aGUgdm9pY2UKKyAqICAgICAgdG8gdGhlIHN0ZXJlbyBjaGFubmVscy4gRm9yIDQgT1Agdm9pY2VzIHRoaXMgYml0IGlzCisgKiAgICAgIGRlZmluZWQgaW4gdGhlIHNlY29uZCBoYWxmIG9mIHRoZSB2b2ljZSAoYWRkIDMgdG8gdGhlCisgKiAgICAgIHJlZ2lzdGVyIG9mZnNldCkuCisgKgorICogICAgICBGb3IgNCBPUCB2b2ljZXMgdGhlIGNvbm5lY3Rpb24gYml0IGlzIHVzZWQgaW4gdGhlCisgKiAgICAgIGJvdGggaGFsdmVzIChnaXZlcyA0IHdheXMgdG8gY29ubmVjdCB0aGUgb3BlcmF0b3JzKS4KKyAqLworI2RlZmluZSBPUEwzX1JFR19GRUVEQkFDS19DT05ORUNUSU9OCTB4YzAKKyNkZWZpbmUgICBPUEwzX0ZFRURCQUNLX01BU0sJCTB4MGUJLyogVmFsaWQganVzdCBmb3IgMXN0IE9QIG9mIGEgdm9pY2UgKi8KKyNkZWZpbmUgICBPUEwzX0NPTk5FQ1RJT05fQklUCQkweDAxCisvKgorICogICAgSW4gdGhlIDQgT1AgbW9kZSB0aGVyZSBpcyBmb3VyIHBvc3NpYmxlIGNvbmZpZ3VyYXRpb25zIGhvdyB0aGUKKyAqICAgICAgb3BlcmF0b3JzIGNhbiBiZSBjb25uZWN0ZWQgdG9nZXRoZXIgKGluIDIgT1AgbW9kZXMgdGhlcmUgaXMganVzdAorICogICAgICBBTSBvciBGTSkuIFRoZSA0IE9QIGNvbm5lY3Rpb24gbW9kZSBpcyBkZWZpbmVkIGJ5IHRoZSByaWdodG1vc3QKKyAqICAgICAgYml0IG9mIHRoZSBGRUVEQkFDS19DT05ORUNUSU9OICgweEMwLTB4QzgpIG9uIHRoZSBib3RoIGhhbHZlcy4KKyAqCisgKiAgICAgIEZpcnN0IGhhbGYgICAgICBTZWNvbmQgaGFsZiAgICAgTW9kZQorICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLSsKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdiAgIHwKKyAqICAgICAgMCAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICA+Ky0xLSstLTItLTMtLTQtLT4KKyAqCisgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tKworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgfAorICogICAgICAwICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgID4rLTEtKy0tMi0rCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwtPgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4tLTMtLS0tNC0rCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0rCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICB8CisgKiAgICAgIDEgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgPistMS0rLS0tLS0rCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8LT4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+LS0yLS0zLS00LSsKKyAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0rCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICB8CisgKiAgICAgIDEgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgPistMS0rLS0rCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPi0tMi0tMy0rLT4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+LS00LS0tLSsKKyAqLworI2RlZmluZSAgIE9QTDNfU1RFUkVPX0JJVFMJCTB4MzAJLyogT1BMLTMgb25seSAqLworI2RlZmluZSAgICAgT1BMM19WT0lDRV9UT19MRUZUCQkweDEwCisjZGVmaW5lICAgICBPUEwzX1ZPSUNFX1RPX1JJR0hUCQkweDIwCisKKy8qCisKKyAqLworCisjZGVmaW5lIE9QTDNfTEVGVAkJMHgwMDAwCisjZGVmaW5lIE9QTDNfUklHSFQJCTB4MDEwMAorCisjZGVmaW5lIE9QTDNfSFdfQVVUTwkJMHgwMDAwCisjZGVmaW5lIE9QTDNfSFdfT1BMMgkJMHgwMjAwCisjZGVmaW5lIE9QTDNfSFdfT1BMMwkJMHgwMzAwCisjZGVmaW5lIE9QTDNfSFdfT1BMM19TVgkJMHgwMzAxCS8qIFMzIFNvbmljVmliZXMgKi8KKyNkZWZpbmUgT1BMM19IV19PUEwzX0NTCQkweDAzMDIJLyogQ1M0MjMyL0NTNDIzNisgKi8KKyNkZWZpbmUgT1BMM19IV19PUEwzX0ZNODAxCTB4MDMwMwkvKiBGTTgwMSAqLworI2RlZmluZSBPUEwzX0hXX09QTDNfQ1M0MjgxCTB4MDMwNAkvKiBDUzQyODEgKi8KKyNkZWZpbmUgT1BMM19IV19PUEwzX1BDOTgJMHgwMzA1CS8qIFBDOTgwMCAqLworI2RlZmluZSBPUEwzX0hXX09QTDQJCTB4MDQwMAkvKiBZTUYyNzhCL1lNRjI5NSAqLworI2RlZmluZSBPUEwzX0hXX09QTDRfTUwJCTB4MDQwMQkvKiBZTUY3MDQvWU1GNzIxICovCisjZGVmaW5lIE9QTDNfSFdfTUFTSwkJMHhmZjAwCisKKyNkZWZpbmUgTUFYX09QTDJfVk9JQ0VTCQk5CisjZGVmaW5lIE1BWF9PUEwzX1ZPSUNFUwkJMTgKKwordHlwZWRlZiBzdHJ1Y3Qgc25kX29wbDMgb3BsM190OworCisvKgorICogQSBzdHJ1Y3R1cmUgdG8ga2VlcCB0cmFjayBvZiBlYWNoIGhhcmR3YXJlIHZvaWNlCisgKi8KK3R5cGVkZWYgc3RydWN0IHNuZF9vcGwzX3ZvaWNlIHsKKwlpbnQgIHN0YXRlOwkJLyogc3RhdHVzICovCisjZGVmaW5lIFNORFJWX09QTDNfU1RfT0ZGCQkwCS8qIE5vdCBwbGF5aW5nICovCisjZGVmaW5lIFNORFJWX09QTDNfU1RfT05fMk9QCTEJLyogMm9wIHZvaWNlIGlzIGFsbG9jYXRlZCAqLworI2RlZmluZSBTTkRSVl9PUEwzX1NUX09OXzRPUAkyCS8qIDRvcCB2b2ljZSBpcyBhbGxvY2F0ZWQgKi8KKyNkZWZpbmUgU05EUlZfT1BMM19TVF9OT1RfQVZBSUwJLTEJLyogdm9pY2UgaXMgbm90IGF2YWlsYWJsZSAqLworCisJdW5zaWduZWQgaW50IHRpbWU7CS8qIEFuIGFsbG9jYXRpb24gdGltZSAqLworCXVuc2lnbmVkIGNoYXIgbm90ZTsJLyogTm90ZSBjdXJyZW50bHkgYXNzaWduZWQgdG8gdGhpcyB2b2ljZSAqLworCisJdW5zaWduZWQgbG9uZyBub3RlX29mZjsJLyogbm90ZS1vZmYgdGltZSAqLworCWludCBub3RlX29mZl9jaGVjazsJLyogY2hlY2sgbm90ZS1vZmYgdGltZSAqLworCisJdW5zaWduZWQgY2hhciBrZXlvbl9yZWc7CS8qIEtPTiByZWdpc3RlciBzaGFkb3cgKi8KKworCXNuZF9taWRpX2NoYW5uZWxfdCAqY2hhbjsJLyogTWlkaSBjaGFubmVsIGZvciB0aGlzIG5vdGUgKi8KK30gc25kX29wbDNfdm9pY2VfdDsKKworc3RydWN0IHNuZF9vcGwzIHsKKwl1bnNpZ25lZCBsb25nIGxfcG9ydDsKKwl1bnNpZ25lZCBsb25nIHJfcG9ydDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlc19sX3BvcnQ7CisJc3RydWN0IHJlc291cmNlICpyZXNfcl9wb3J0OworCXVuc2lnbmVkIHNob3J0IGhhcmR3YXJlOworCS8qIGhhcmR3YXJlIGFjY2VzcyAqLworCXZvaWQgKCpjb21tYW5kKSAob3BsM190ICogb3BsMywgdW5zaWduZWQgc2hvcnQgY21kLCB1bnNpZ25lZCBjaGFyIHZhbCk7CisJdW5zaWduZWQgc2hvcnQgdGltZXJfZW5hYmxlOworCWludCBzZXFfZGV2X251bTsJLyogc2VxdWVuY2VyIGRldmljZSBudW1iZXIgKi8KKwlzbmRfdGltZXJfdCAqdGltZXIxOworCXNuZF90aW1lcl90ICp0aW1lcjI7CisJc3BpbmxvY2tfdCB0aW1lcl9sb2NrOworCisJdm9pZCAqcHJpdmF0ZV9kYXRhOworCXZvaWQgKCpwcml2YXRlX2ZyZWUpKG9wbDNfdCAqKTsKKworCXNwaW5sb2NrX3QgcmVnX2xvY2s7CisJc25kX2NhcmRfdCAqY2FyZDsJCS8qIFRoZSBjYXJkIHRoYXQgdGhpcyBiZWxvbmdzIHRvICovCisJaW50IHVzZWQ7CQkJLyogdXNhZ2UgZmxhZyAtIGV4Y2x1c2l2ZSAqLworCXVuc2lnbmVkIGNoYXIgZm1fbW9kZTsJCS8qIE9QTCBtb2RlLCBzZWUgU05EUlZfRE1fRk1fTU9ERV9YWFggKi8KKwl1bnNpZ25lZCBjaGFyIHJoeXRobTsJCS8qIHBlcmN1c3Npb24gbW9kZSBmbGFnICovCisJdW5zaWduZWQgY2hhciBtYXhfdm9pY2VzOwkvKiBtYXggbnVtYmVyIG9mIHZvaWNlcyAqLworI2lmIGRlZmluZWQoQ09ORklHX1NORF9TRVFVRU5DRVIpIHx8IGRlZmluZWQoQ09ORklHX1NORF9TRVFVRU5DRVJfTU9EVUxFKQorI2RlZmluZSBTTkRSVl9PUEwzX01PREVfU1lOVEggMAkJLyogT1NTIC0gdm9pY2VzIGFsbG9jYXRlZCBieSBhcHBsaWNhdGlvbiAqLworI2RlZmluZSBTTkRSVl9PUEwzX01PREVfU0VRIDEJCS8qIEFMU0EgLSBkcml2ZXIgaGFuZGxlcyB2b2ljZSBhbGxvY2F0aW9uICovCisJaW50IHN5bnRoX21vZGU7CQkJLyogc3ludGggbW9kZSAqLworCWludCBzZXFfY2xpZW50OworCisJc25kX3NlcV9kZXZpY2VfdCAqc2VxX2RldjsJLyogc2VxdWVuY2VyIGRldmljZSAqLworCXNuZF9taWRpX2NoYW5uZWxfc2V0X3QgKiBjaHNldDsKKworI2lmZGVmIENPTkZJR19TTkRfU0VRVUVOQ0VSX09TUworCXNuZF9zZXFfZGV2aWNlX3QgKm9zc19zZXFfZGV2OwkvKiBPU1Mgc2VxdWVuY2VyIGRldmljZSAqLworCXNuZF9taWRpX2NoYW5uZWxfc2V0X3QgKiBvc3NfY2hzZXQ7CisjZW5kaWYKKyAKKwlzbmRfc2VxX2tpbnN0cl9vcHNfdCBmbV9vcHM7CisJc25kX3NlcV9raW5zdHJfbGlzdF90ICppbGlzdDsKKworCXNuZF9vcGwzX3ZvaWNlX3Qgdm9pY2VzW01BWF9PUEwzX1ZPSUNFU107IC8qIFZvaWNlcyAoT1BMMyAnY2hhbm5lbCcpICovCisJaW50IHVzZV90aW1lOwkJCS8qIGFsbG9jYXRpb24gY291bnRlciAqLworCisJdW5zaWduZWQgc2hvcnQgY29ubmVjdGlvbl9yZWc7CS8qIGNvbm5lY3Rpb24gcmVnIHNoYWRvdyAqLworCXVuc2lnbmVkIGNoYXIgZHJ1bV9yZWc7CQkvKiBwZXJjdXNzaW9uIHJlZyBzaGFkb3cgKi8KKworCXNwaW5sb2NrX3Qgdm9pY2VfbG9jazsJCS8qIExvY2sgZm9yIHZvaWNlIGFjY2VzcyAqLworCisJc3RydWN0IHRpbWVyX2xpc3QgdGxpc3Q7CS8qIHRpbWVyIGZvciBub3RlLW9mZnMgYW5kIGVmZmVjdHMgKi8KKwlpbnQgc3lzX3RpbWVyX3N0YXR1czsJCS8qIHN5c3RlbSB0aW1lciBydW4gc3RhdHVzICovCisJc3BpbmxvY2tfdCBzeXNfdGltZXJfbG9jazsJLyogTG9jayBmb3Igc3lzdGVtIHRpbWVyIGFjY2VzcyAqLworI2VuZGlmCisJc3RydWN0IHNlbWFwaG9yZSBhY2Nlc3NfbXV0ZXg7CS8qIGxvY2tpbmcgKi8KK307CisKKy8qIG9wbDMuYyAqLwordm9pZCBzbmRfb3BsM19pbnRlcnJ1cHQoc25kX2h3ZGVwX3QgKiBodyk7CitpbnQgc25kX29wbDNfbmV3KHNuZF9jYXJkX3QgKmNhcmQsIHVuc2lnbmVkIHNob3J0IGhhcmR3YXJlLCBvcGwzX3QgKipyb3BsMyk7CitpbnQgc25kX29wbDNfaW5pdChvcGwzX3QgKm9wbDMpOworaW50IHNuZF9vcGwzX2NyZWF0ZShzbmRfY2FyZF90ICogY2FyZCwKKwkJICAgIHVuc2lnbmVkIGxvbmcgbF9wb3J0LCB1bnNpZ25lZCBsb25nIHJfcG9ydCwKKwkJICAgIHVuc2lnbmVkIHNob3J0IGhhcmR3YXJlLAorCQkgICAgaW50IGludGVncmF0ZWQsCisJCSAgICBvcGwzX3QgKiogb3BsMyk7CitpbnQgc25kX29wbDNfdGltZXJfbmV3KG9wbDNfdCAqIG9wbDMsIGludCB0aW1lcjFfZGV2LCBpbnQgdGltZXIyX2Rldik7CitpbnQgc25kX29wbDNfaHdkZXBfbmV3KG9wbDNfdCAqIG9wbDMsIGludCBkZXZpY2UsIGludCBzZXFfZGV2aWNlLAorCQkgICAgICAgc25kX2h3ZGVwX3QgKiogcmh3ZGVwKTsKKworLyogb3BsM19zeW50aCAqLworaW50IHNuZF9vcGwzX29wZW4oc25kX2h3ZGVwX3QgKiBodywgc3RydWN0IGZpbGUgKmZpbGUpOworaW50IHNuZF9vcGwzX2lvY3RsKHNuZF9od2RlcF90ICogaHcsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CitpbnQgc25kX29wbDNfcmVsZWFzZShzbmRfaHdkZXBfdCAqIGh3LCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CisKK3ZvaWQgc25kX29wbDNfcmVzZXQob3BsM190ICogb3BsMyk7CisKKyNlbmRpZiAvKiBfX1NPVU5EX09QTDNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9vcGw0LmggYi9pbmNsdWRlL3NvdW5kL29wbDQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGMwNDQyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9zb3VuZC9vcGw0LmgKQEAgLTAsMCArMSwzMiBAQAorI2lmbmRlZiBfX1NPVU5EX09QTDRfSAorI2RlZmluZSBfX1NPVU5EX09QTDRfSAorCisvKgorICogR2xvYmFsIGRlZmluaXRpb25zIGZvciB0aGUgT1BMNCBkcml2ZXIKKyAqIENvcHlyaWdodCAoYykgMjAwMyBieSBDbGVtZW5zIExhZGlzY2ggPGNsZW1lbnNAbGFkaXNjaC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8c291bmQvb3BsMy5oPgorCit0eXBlZGVmIHN0cnVjdCBvcGw0IG9wbDRfdDsKKworZXh0ZXJuIGludCBzbmRfb3BsNF9jcmVhdGUoc25kX2NhcmRfdCAqY2FyZCwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgZm1fcG9ydCwgdW5zaWduZWQgbG9uZyBwY21fcG9ydCwKKwkJCSAgIGludCBzZXFfZGV2aWNlLAorCQkJICAgb3BsM190ICoqb3BsMywgb3BsNF90ICoqb3BsNCk7CisKKyNlbmRpZiAvKiBfX1NPVU5EX09QTDRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9wY20taW5kaXJlY3QuaCBiL2luY2x1ZGUvc291bmQvcGNtLWluZGlyZWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFmYTdhNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvc291bmQvcGNtLWluZGlyZWN0LmgKQEAgLTAsMCArMSwxNzcgQEAKKy8qCisgKiBIZWxwZXIgZnVuY3Rpb25zIGZvciBpbmRpcmVjdCBQQ00gZGF0YSB0cmFuc2ZlcgorICoKKyAqICBDb3B5cmlnaHQgKGMpIGJ5IFRha2FzaGkgSXdhaSA8dGl3YWlAc3VzZS5kZT4KKyAqICAgICAgICAgICAgICAgICAgIEphcm9zbGF2IEt5c2VsYSA8cGVyZXhAc3VzZS5jej4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX1NPVU5EX1BDTV9JTkRJUkVDVF9ICisjZGVmaW5lIF9fU09VTkRfUENNX0lORElSRUNUX0gKKworI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorCit0eXBlZGVmIHN0cnVjdCBzbmRydl9wY21faW5kaXJlY3QgeworCXVuc2lnbmVkIGludCBod19idWZmZXJfc2l6ZTsJLyogQnl0ZSBzaXplIG9mIGhhcmR3YXJlIGJ1ZmZlciAqLworCXVuc2lnbmVkIGludCBod19xdWV1ZV9zaXplOwkvKiBNYXggcXVldWUgc2l6ZSBvZiBodyBidWZmZXIgKDAgPSBidWZmZXIgc2l6ZSkgKi8KKwl1bnNpZ25lZCBpbnQgaHdfZGF0YTsJLyogT2Zmc2V0IHRvIG5leHQgZHN0IChvciBzcmMpIGluIGh3IHJpbmcgYnVmZmVyICovCisJdW5zaWduZWQgaW50IGh3X2lvOwkvKiBSaW5nIGJ1ZmZlciBodyBwb2ludGVyICovCisJaW50IGh3X3JlYWR5OwkJLyogQnl0ZXMgcmVhZHkgZm9yIHBsYXkgKG9yIGNhcHR1cmVkKSBpbiBodyByaW5nIGJ1ZmZlciAqLworCXVuc2lnbmVkIGludCBzd19idWZmZXJfc2l6ZTsJLyogQnl0ZSBzaXplIG9mIHNvZnR3YXJlIGJ1ZmZlciAqLworCXVuc2lnbmVkIGludCBzd19kYXRhOwkvKiBPZmZzZXQgdG8gbmV4dCBkc3QgKG9yIHNyYykgaW4gc3cgcmluZyBidWZmZXIgKi8KKwl1bnNpZ25lZCBpbnQgc3dfaW87CS8qIEN1cnJlbnQgc29mdHdhcmUgcG9pbnRlciBpbiBieXRlcyAqLworCWludCBzd19yZWFkeTsJCS8qIEJ5dGVzIHJlYWR5IHRvIGJlIHRyYW5zZmVycmVkIHRvL2Zyb20gaHcgKi8KKwlzbmRfcGNtX3VmcmFtZXNfdCBhcHBsX3B0cjsJLyogTGFzdCBzZWVuIGFwcGxfcHRyICovCit9IHNuZF9wY21faW5kaXJlY3RfdDsKKwordHlwZWRlZiB2b2lkICgqc25kX3BjbV9pbmRpcmVjdF9jb3B5X3QpKHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSwKKwkJCQkJc25kX3BjbV9pbmRpcmVjdF90ICpyZWMsIHNpemVfdCBieXRlcyk7CisKKy8qCisgKiBoZWxwZXIgZnVuY3Rpb24gZm9yIHBsYXliYWNrIGFjayBjYWxsYmFjaworICovCitzdGF0aWMgaW5saW5lIHZvaWQKK3NuZF9wY21faW5kaXJlY3RfcGxheWJhY2tfdHJhbnNmZXIoc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtLAorCQkJCSAgIHNuZF9wY21faW5kaXJlY3RfdCAqcmVjLAorCQkJCSAgIHNuZF9wY21faW5kaXJlY3RfY29weV90IGNvcHkpCit7CisJc25kX3BjbV9ydW50aW1lX3QgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc25kX3BjbV91ZnJhbWVzX3QgYXBwbF9wdHIgPSBydW50aW1lLT5jb250cm9sLT5hcHBsX3B0cjsKKwlzbmRfcGNtX3NmcmFtZXNfdCBkaWZmID0gYXBwbF9wdHIgLSByZWMtPmFwcGxfcHRyOworCWludCBxc2l6ZTsKKworCWlmIChkaWZmKSB7CisJCWlmIChkaWZmIDwgLShzbmRfcGNtX3NmcmFtZXNfdCkgKHJ1bnRpbWUtPmJvdW5kYXJ5IC8gMikpCisJCQlkaWZmICs9IHJ1bnRpbWUtPmJvdW5kYXJ5OworCQlyZWMtPnN3X3JlYWR5ICs9IChpbnQpZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIGRpZmYpOworCQlyZWMtPmFwcGxfcHRyID0gYXBwbF9wdHI7CisJfQorCXFzaXplID0gcmVjLT5od19xdWV1ZV9zaXplID8gcmVjLT5od19xdWV1ZV9zaXplIDogcmVjLT5od19idWZmZXJfc2l6ZTsKKwl3aGlsZSAocmVjLT5od19yZWFkeSA8IHFzaXplICYmIHJlYy0+c3dfcmVhZHkgPiAwKSB7CisJCXVuc2lnbmVkIGludCBod190b19lbmQgPSByZWMtPmh3X2J1ZmZlcl9zaXplIC0gcmVjLT5od19kYXRhOworCQl1bnNpZ25lZCBpbnQgc3dfdG9fZW5kID0gcmVjLT5zd19idWZmZXJfc2l6ZSAtIHJlYy0+c3dfZGF0YTsKKwkJdW5zaWduZWQgaW50IGJ5dGVzID0gcXNpemUgLSByZWMtPmh3X3JlYWR5OworCQlpZiAocmVjLT5zd19yZWFkeSA8IChpbnQpYnl0ZXMpCisJCQlieXRlcyA9IHJlYy0+c3dfcmVhZHk7CisJCWlmIChod190b19lbmQgPCBieXRlcykKKwkJCWJ5dGVzID0gaHdfdG9fZW5kOworCQlpZiAoc3dfdG9fZW5kIDwgYnl0ZXMpCisJCQlieXRlcyA9IHN3X3RvX2VuZDsKKwkJaWYgKCEgYnl0ZXMpCisJCQlicmVhazsKKwkJY29weShzdWJzdHJlYW0sIHJlYywgYnl0ZXMpOworCQlyZWMtPmh3X2RhdGEgKz0gYnl0ZXM7CisJCWlmIChyZWMtPmh3X2RhdGEgPT0gcmVjLT5od19idWZmZXJfc2l6ZSkKKwkJCXJlYy0+aHdfZGF0YSA9IDA7CisJCXJlYy0+c3dfZGF0YSArPSBieXRlczsKKwkJaWYgKHJlYy0+c3dfZGF0YSA9PSByZWMtPnN3X2J1ZmZlcl9zaXplKQorCQkJcmVjLT5zd19kYXRhID0gMDsKKwkJcmVjLT5od19yZWFkeSArPSBieXRlczsKKwkJcmVjLT5zd19yZWFkeSAtPSBieXRlczsKKwl9Cit9CisKKy8qCisgKiBoZWxwZXIgZnVuY3Rpb24gZm9yIHBsYXliYWNrIHBvaW50ZXIgY2FsbGJhY2sKKyAqIHB0ciA9IGN1cnJlbnQgYnl0ZSBwb2ludGVyCisgKi8KK3N0YXRpYyBpbmxpbmUgc25kX3BjbV91ZnJhbWVzX3QKK3NuZF9wY21faW5kaXJlY3RfcGxheWJhY2tfcG9pbnRlcihzbmRfcGNtX3N1YnN0cmVhbV90ICpzdWJzdHJlYW0sCisJCQkJICBzbmRfcGNtX2luZGlyZWN0X3QgKnJlYywgdW5zaWduZWQgaW50IHB0cikKK3sKKwlpbnQgYnl0ZXMgPSBwdHIgLSByZWMtPmh3X2lvOworCWlmIChieXRlcyA8IDApCisJCWJ5dGVzICs9IHJlYy0+aHdfYnVmZmVyX3NpemU7CisJcmVjLT5od19pbyA9IHB0cjsKKwlyZWMtPmh3X3JlYWR5IC09IGJ5dGVzOworCXJlYy0+c3dfaW8gKz0gYnl0ZXM7CisJaWYgKHJlYy0+c3dfaW8gPj0gcmVjLT5zd19idWZmZXJfc2l6ZSkKKwkJcmVjLT5zd19pbyAtPSByZWMtPnN3X2J1ZmZlcl9zaXplOworCWlmIChzdWJzdHJlYW0tPm9wcy0+YWNrKQorCQlzdWJzdHJlYW0tPm9wcy0+YWNrKHN1YnN0cmVhbSk7CisJcmV0dXJuIGJ5dGVzX3RvX2ZyYW1lcyhzdWJzdHJlYW0tPnJ1bnRpbWUsIHJlYy0+c3dfaW8pOworfQorCisKKy8qCisgKiBoZWxwZXIgZnVuY3Rpb24gZm9yIGNhcHR1cmUgYWNrIGNhbGxiYWNrCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorc25kX3BjbV9pbmRpcmVjdF9jYXB0dXJlX3RyYW5zZmVyKHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSwKKwkJCQkgIHNuZF9wY21faW5kaXJlY3RfdCAqcmVjLAorCQkJCSAgc25kX3BjbV9pbmRpcmVjdF9jb3B5X3QgY29weSkKK3sKKwlzbmRfcGNtX3J1bnRpbWVfdCAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzbmRfcGNtX3VmcmFtZXNfdCBhcHBsX3B0ciA9IHJ1bnRpbWUtPmNvbnRyb2wtPmFwcGxfcHRyOworCXNuZF9wY21fc2ZyYW1lc190IGRpZmYgPSBhcHBsX3B0ciAtIHJlYy0+YXBwbF9wdHI7CisKKwlpZiAoZGlmZikgeworCQlpZiAoZGlmZiA8IC0oc25kX3BjbV9zZnJhbWVzX3QpIChydW50aW1lLT5ib3VuZGFyeSAvIDIpKQorCQkJZGlmZiArPSBydW50aW1lLT5ib3VuZGFyeTsKKwkJcmVjLT5zd19yZWFkeSAtPSBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgZGlmZik7CisJCXJlYy0+YXBwbF9wdHIgPSBhcHBsX3B0cjsKKwl9CisJd2hpbGUgKHJlYy0+aHdfcmVhZHkgPiAwICYmIAorCSAgICAgICByZWMtPnN3X3JlYWR5IDwgKGludClyZWMtPnN3X2J1ZmZlcl9zaXplKSB7CisJCXNpemVfdCBod190b19lbmQgPSByZWMtPmh3X2J1ZmZlcl9zaXplIC0gcmVjLT5od19kYXRhOworCQlzaXplX3Qgc3dfdG9fZW5kID0gcmVjLT5zd19idWZmZXJfc2l6ZSAtIHJlYy0+c3dfZGF0YTsKKwkJc2l6ZV90IGJ5dGVzID0gcmVjLT5zd19idWZmZXJfc2l6ZSAtIHJlYy0+c3dfcmVhZHk7CisJCWlmIChyZWMtPmh3X3JlYWR5IDwgKGludClieXRlcykKKwkJCWJ5dGVzID0gcmVjLT5od19yZWFkeTsKKwkJaWYgKGh3X3RvX2VuZCA8IGJ5dGVzKQorCQkJYnl0ZXMgPSBod190b19lbmQ7CisJCWlmIChzd190b19lbmQgPCBieXRlcykKKwkJCWJ5dGVzID0gc3dfdG9fZW5kOworCQlpZiAoISBieXRlcykKKwkJCWJyZWFrOworCQljb3B5KHN1YnN0cmVhbSwgcmVjLCBieXRlcyk7CisJCXJlYy0+aHdfZGF0YSArPSBieXRlczsKKwkJaWYgKChpbnQpcmVjLT5od19kYXRhID09IHJlYy0+aHdfYnVmZmVyX3NpemUpCisJCQlyZWMtPmh3X2RhdGEgPSAwOworCQlyZWMtPnN3X2RhdGEgKz0gYnl0ZXM7CisJCWlmIChyZWMtPnN3X2RhdGEgPT0gcmVjLT5zd19idWZmZXJfc2l6ZSkKKwkJCXJlYy0+c3dfZGF0YSA9IDA7CisJCXJlYy0+aHdfcmVhZHkgLT0gYnl0ZXM7CisJCXJlYy0+c3dfcmVhZHkgKz0gYnl0ZXM7CisJfQorfQorCisvKgorICogaGVscGVyIGZ1bmN0aW9uIGZvciBjYXB0dXJlIHBvaW50ZXIgY2FsbGJhY2ssCisgKiBwdHIgPSBjdXJyZW50IGJ5dGUgcG9pbnRlcgorICovCitzdGF0aWMgaW5saW5lIHNuZF9wY21fdWZyYW1lc190CitzbmRfcGNtX2luZGlyZWN0X2NhcHR1cmVfcG9pbnRlcihzbmRfcGNtX3N1YnN0cmVhbV90ICpzdWJzdHJlYW0sCisJCQkJIHNuZF9wY21faW5kaXJlY3RfdCAqcmVjLCB1bnNpZ25lZCBpbnQgcHRyKQoreworCWludCBxc2l6ZTsKKwlpbnQgYnl0ZXMgPSBwdHIgLSByZWMtPmh3X2lvOworCWlmIChieXRlcyA8IDApCisJCWJ5dGVzICs9IHJlYy0+aHdfYnVmZmVyX3NpemU7CisJcmVjLT5od19pbyA9IHB0cjsKKwlyZWMtPmh3X3JlYWR5ICs9IGJ5dGVzOworCXFzaXplID0gcmVjLT5od19xdWV1ZV9zaXplID8gcmVjLT5od19xdWV1ZV9zaXplIDogcmVjLT5od19idWZmZXJfc2l6ZTsKKwlpZiAocmVjLT5od19yZWFkeSA+IHFzaXplKQorCQlyZXR1cm4gU05EUlZfUENNX1BPU19YUlVOOworCXJlYy0+c3dfaW8gKz0gYnl0ZXM7CisJaWYgKHJlYy0+c3dfaW8gPj0gcmVjLT5zd19idWZmZXJfc2l6ZSkKKwkJcmVjLT5zd19pbyAtPSByZWMtPnN3X2J1ZmZlcl9zaXplOworCWlmIChzdWJzdHJlYW0tPm9wcy0+YWNrKQorCQlzdWJzdHJlYW0tPm9wcy0+YWNrKHN1YnN0cmVhbSk7CisJcmV0dXJuIGJ5dGVzX3RvX2ZyYW1lcyhzdWJzdHJlYW0tPnJ1bnRpbWUsIHJlYy0+c3dfaW8pOworfQorCisjZW5kaWYgLyogX19TT1VORF9QQ01fSU5ESVJFQ1RfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9wY20uaCBiL2luY2x1ZGUvc291bmQvcGNtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNmYzA0ZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvc291bmQvcGNtLmgKQEAgLTAsMCArMSwxMDQwIEBACisjaWZuZGVmIF9fU09VTkRfUENNX0gKKyNkZWZpbmUgX19TT1VORF9QQ01fSAorCisvKgorICogIERpZ2l0YWwgQXVkaW8gKFBDTSkgYWJzdHJhY3QgbGF5ZXIKKyAqICBDb3B5cmlnaHQgKGMpIGJ5IEphcm9zbGF2IEt5c2VsYSA8cGVyZXhAc3VzZS5jej4KKyAqICAgICAgICAgICAgICAgICAgIEFicmFtbyBCYWduYXJhIDxhYnJhbW9AYWxzYS1wcm9qZWN0Lm9yZz4KKyAqCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8c291bmQvYXNvdW5kLmg+CisjaW5jbHVkZSA8c291bmQvbWVtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisKK3R5cGVkZWYgc25kcnZfcGNtX3VmcmFtZXNfdCBzbmRfcGNtX3VmcmFtZXNfdDsKK3R5cGVkZWYgc25kcnZfcGNtX3NmcmFtZXNfdCBzbmRfcGNtX3NmcmFtZXNfdDsKK3R5cGVkZWYgZW51bSBzbmRydl9wY21fY2xhc3Mgc25kX3BjbV9jbGFzc190OwordHlwZWRlZiBlbnVtIHNuZHJ2X3BjbV9zdWJjbGFzcyBzbmRfcGNtX3N1YmNsYXNzX3Q7Cit0eXBlZGVmIGVudW0gc25kcnZfcGNtX3N0cmVhbSBzbmRfcGNtX3N0cmVhbV90OwordHlwZWRlZiBlbnVtIHNuZHJ2X3BjbV9hY2Nlc3Mgc25kX3BjbV9hY2Nlc3NfdDsKK3R5cGVkZWYgZW51bSBzbmRydl9wY21fZm9ybWF0IHNuZF9wY21fZm9ybWF0X3Q7Cit0eXBlZGVmIGVudW0gc25kcnZfcGNtX3N1YmZvcm1hdCBzbmRfcGNtX3N1YmZvcm1hdF90OwordHlwZWRlZiBlbnVtIHNuZHJ2X3BjbV9zdGF0ZSBzbmRfcGNtX3N0YXRlX3Q7Cit0eXBlZGVmIHVuaW9uIHNuZHJ2X3BjbV9zeW5jX2lkIHNuZF9wY21fc3luY19pZF90OwordHlwZWRlZiBzdHJ1Y3Qgc25kcnZfcGNtX2luZm8gc25kX3BjbV9pbmZvX3Q7Cit0eXBlZGVmIGVudW0gc25kcnZfcGNtX2h3X3BhcmFtIHNuZF9wY21faHdfcGFyYW1fdDsKK3R5cGVkZWYgc3RydWN0IHNuZHJ2X3BjbV9od19wYXJhbXMgc25kX3BjbV9od19wYXJhbXNfdDsKK3R5cGVkZWYgZW51bSBzbmRydl9wY21fc3RhcnQgc25kX3BjbV9zdGFydF90OwordHlwZWRlZiBlbnVtIHNuZHJ2X3BjbV94cnVuIHNuZF9wY21feHJ1bl90OwordHlwZWRlZiBlbnVtIHNuZHJ2X3BjbV90c3RhbXAgc25kX3BjbV90c3RhbXBfdDsKK3R5cGVkZWYgc3RydWN0IHNuZHJ2X3BjbV9zd19wYXJhbXMgc25kX3BjbV9zd19wYXJhbXNfdDsKK3R5cGVkZWYgc3RydWN0IHNuZHJ2X3BjbV9jaGFubmVsX2luZm8gc25kX3BjbV9jaGFubmVsX2luZm9fdDsKK3R5cGVkZWYgc3RydWN0IHNuZHJ2X3BjbV9zdGF0dXMgc25kX3BjbV9zdGF0dXNfdDsKK3R5cGVkZWYgc3RydWN0IHNuZHJ2X3BjbV9tbWFwX3N0YXR1cyBzbmRfcGNtX21tYXBfc3RhdHVzX3Q7Cit0eXBlZGVmIHN0cnVjdCBzbmRydl9wY21fbW1hcF9jb250cm9sIHNuZF9wY21fbW1hcF9jb250cm9sX3Q7Cit0eXBlZGVmIHN0cnVjdCBzbmRydl9tYXNrIHNuZF9tYXNrX3Q7Cit0eXBlZGVmIHN0cnVjdCBzbmRfc2dfYnVmIHNuZF9wY21fc2didWZfdDsKKworI2RlZmluZSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSkgKChzdWJzdHJlYW0pLT5wcml2YXRlX2RhdGEpCisjZGVmaW5lIHNuZF9wY21fY2hpcChwY20pICgocGNtKS0+cHJpdmF0ZV9kYXRhKQorCit0eXBlZGVmIHN0cnVjdCBfc25kX3BjbV9maWxlIHNuZF9wY21fZmlsZV90OwordHlwZWRlZiBzdHJ1Y3QgX3NuZF9wY21fcnVudGltZSBzbmRfcGNtX3J1bnRpbWVfdDsKKworI2lmIGRlZmluZWQoQ09ORklHX1NORF9QQ01fT1NTKSB8fCBkZWZpbmVkKENPTkZJR19TTkRfUENNX09TU19NT0RVTEUpCisjaW5jbHVkZSAicGNtX29zcy5oIgorI2VuZGlmCisKKy8qCisgKiAgSGFyZHdhcmUgKGxvd2xldmVsKSBzZWN0aW9uCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX3NuZF9wY21faGFyZHdhcmUgeworCXVuc2lnbmVkIGludCBpbmZvOwkJLyogU05EUlZfUENNX0lORk9fKiAqLworCXU2NCBmb3JtYXRzOwkJCS8qIFNORFJWX1BDTV9GTVRCSVRfKiAqLworCXVuc2lnbmVkIGludCByYXRlczsJCS8qIFNORFJWX1BDTV9SQVRFXyogKi8KKwl1bnNpZ25lZCBpbnQgcmF0ZV9taW47CQkvKiBtaW4gcmF0ZSAqLworCXVuc2lnbmVkIGludCByYXRlX21heDsJCS8qIG1heCByYXRlICovCisJdW5zaWduZWQgaW50IGNoYW5uZWxzX21pbjsJLyogbWluIGNoYW5uZWxzICovCisJdW5zaWduZWQgaW50IGNoYW5uZWxzX21heDsJLyogbWF4IGNoYW5uZWxzICovCisJc2l6ZV90IGJ1ZmZlcl9ieXRlc19tYXg7CS8qIG1heCBidWZmZXIgc2l6ZSAqLworCXNpemVfdCBwZXJpb2RfYnl0ZXNfbWluOwkvKiBtaW4gcGVyaW9kIHNpemUgKi8KKwlzaXplX3QgcGVyaW9kX2J5dGVzX21heDsJLyogbWF4IHBlcmlvZCBzaXplICovCisJdW5zaWduZWQgaW50IHBlcmlvZHNfbWluOwkvKiBtaW4gIyBvZiBwZXJpb2RzICovCisJdW5zaWduZWQgaW50IHBlcmlvZHNfbWF4OwkvKiBtYXggIyBvZiBwZXJpb2RzICovCisJc2l6ZV90IGZpZm9fc2l6ZTsJCS8qIGZpZm8gc2l6ZSBpbiBieXRlcyAqLworfSBzbmRfcGNtX2hhcmR3YXJlX3Q7CisKK3R5cGVkZWYgc3RydWN0IF9zbmRfcGNtX29wcyB7CisJaW50ICgqb3Blbikoc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtKTsKKwlpbnQgKCpjbG9zZSkoc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtKTsKKwlpbnQgKCppb2N0bCkoc25kX3BjbV9zdWJzdHJlYW1fdCAqIHN1YnN0cmVhbSwKKwkJICAgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpOworCWludCAoKmh3X3BhcmFtcykoc25kX3BjbV9zdWJzdHJlYW1fdCAqIHN1YnN0cmVhbSwgc25kX3BjbV9od19wYXJhbXNfdCAqIHBhcmFtcyk7CisJaW50ICgqaHdfZnJlZSkoc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtKTsKKwlpbnQgKCpwcmVwYXJlKShzbmRfcGNtX3N1YnN0cmVhbV90ICogc3Vic3RyZWFtKTsKKwlpbnQgKCp0cmlnZ2VyKShzbmRfcGNtX3N1YnN0cmVhbV90ICogc3Vic3RyZWFtLCBpbnQgY21kKTsKKwlzbmRfcGNtX3VmcmFtZXNfdCAoKnBvaW50ZXIpKHNuZF9wY21fc3Vic3RyZWFtX3QgKiBzdWJzdHJlYW0pOworCWludCAoKmNvcHkpKHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSwgaW50IGNoYW5uZWwsIHNuZF9wY21fdWZyYW1lc190IHBvcywKKwkJICAgIHZvaWQgX191c2VyICpidWYsIHNuZF9wY21fdWZyYW1lc190IGNvdW50KTsKKwlpbnQgKCpzaWxlbmNlKShzbmRfcGNtX3N1YnN0cmVhbV90ICpzdWJzdHJlYW0sIGludCBjaGFubmVsLCAKKwkJICAgICAgIHNuZF9wY21fdWZyYW1lc190IHBvcywgc25kX3BjbV91ZnJhbWVzX3QgY291bnQpOworCXN0cnVjdCBwYWdlICooKnBhZ2UpKHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOworCWludCAoKm1tYXApKHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOworCWludCAoKmFjaykoc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtKTsKK30gc25kX3BjbV9vcHNfdDsKKworLyoKKyAqCisgKi8KKworI2RlZmluZSBTTkRSVl9QQ01fREVWSUNFUwkJOAorCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTDFfRkFMU0UJCSgodm9pZCAqKTApCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTDFfVFJVRQkJKCh2b2lkICopMSkKKworI2RlZmluZSBTTkRSVl9QQ01fSU9DVEwxX1JFU0VUCQkwCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTDFfSU5GTwkJMQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVEwxX0NIQU5ORUxfSU5GTwkyCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTDFfR1NUQVRFCQkzCisKKyNkZWZpbmUgU05EUlZfUENNX1RSSUdHRVJfU1RPUAkJMAorI2RlZmluZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVAkJMQorI2RlZmluZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9QVVNICTMKKyNkZWZpbmUgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUkVMRUFTRQk0CisjZGVmaW5lIFNORFJWX1BDTV9UUklHR0VSX1NVU1BFTkQJNQorI2RlZmluZSBTTkRSVl9QQ01fVFJJR0dFUl9SRVNVTUUJNgorCisjZGVmaW5lIFNORFJWX1BDTV9QT1NfWFJVTgkJKChzbmRfcGNtX3VmcmFtZXNfdCktMSkKKworLyogSWYgeW91IGNoYW5nZSB0aGlzIGRvbid0IGZvcmdldCB0byBjaGFuZ2UgcmF0ZXNbXSB0YWJsZSBpbiBwY21fbmF0aXZlLmMgKi8KKyNkZWZpbmUgU05EUlZfUENNX1JBVEVfNTUxMgkJKDE8PDApCQkvKiA1NTEySHogKi8KKyNkZWZpbmUgU05EUlZfUENNX1JBVEVfODAwMAkJKDE8PDEpCQkvKiA4MDAwSHogKi8KKyNkZWZpbmUgU05EUlZfUENNX1JBVEVfMTEwMjUJCSgxPDwyKQkJLyogMTEwMjVIeiAqLworI2RlZmluZSBTTkRSVl9QQ01fUkFURV8xNjAwMAkJKDE8PDMpCQkvKiAxNjAwMEh6ICovCisjZGVmaW5lIFNORFJWX1BDTV9SQVRFXzIyMDUwCQkoMTw8NCkJCS8qIDIyMDUwSHogKi8KKyNkZWZpbmUgU05EUlZfUENNX1JBVEVfMzIwMDAJCSgxPDw1KQkJLyogMzIwMDBIeiAqLworI2RlZmluZSBTTkRSVl9QQ01fUkFURV80NDEwMAkJKDE8PDYpCQkvKiA0NDEwMEh6ICovCisjZGVmaW5lIFNORFJWX1BDTV9SQVRFXzQ4MDAwCQkoMTw8NykJCS8qIDQ4MDAwSHogKi8KKyNkZWZpbmUgU05EUlZfUENNX1JBVEVfNjQwMDAJCSgxPDw4KQkJLyogNjQwMDBIeiAqLworI2RlZmluZSBTTkRSVl9QQ01fUkFURV84ODIwMAkJKDE8PDkpCQkvKiA4ODIwMEh6ICovCisjZGVmaW5lIFNORFJWX1BDTV9SQVRFXzk2MDAwCQkoMTw8MTApCQkvKiA5NjAwMEh6ICovCisjZGVmaW5lIFNORFJWX1BDTV9SQVRFXzE3NjQwMAkJKDE8PDExKQkJLyogMTc2NDAwSHogKi8KKyNkZWZpbmUgU05EUlZfUENNX1JBVEVfMTkyMDAwCQkoMTw8MTIpCQkvKiAxOTIwMDBIeiAqLworCisjZGVmaW5lIFNORFJWX1BDTV9SQVRFX0NPTlRJTlVPVVMJKDE8PDMwKQkJLyogY29udGludW91cyByYW5nZSAqLworI2RlZmluZSBTTkRSVl9QQ01fUkFURV9LTk9UCQkoMTw8MzEpCQkvKiBzdXBwb3J0cyBtb3JlIG5vbi1jb250aW51b3MgcmF0ZXMgKi8KKworI2RlZmluZSBTTkRSVl9QQ01fUkFURV84MDAwXzQ0MTAwCShTTkRSVl9QQ01fUkFURV84MDAwfFNORFJWX1BDTV9SQVRFXzExMDI1fFwKKwkJCQkJIFNORFJWX1BDTV9SQVRFXzE2MDAwfFNORFJWX1BDTV9SQVRFXzIyMDUwfFwKKwkJCQkJIFNORFJWX1BDTV9SQVRFXzMyMDAwfFNORFJWX1BDTV9SQVRFXzQ0MTAwKQorI2RlZmluZSBTTkRSVl9QQ01fUkFURV84MDAwXzQ4MDAwCShTTkRSVl9QQ01fUkFURV84MDAwXzQ0MTAwfFNORFJWX1BDTV9SQVRFXzQ4MDAwKQorI2RlZmluZSBTTkRSVl9QQ01fUkFURV84MDAwXzk2MDAwCShTTkRSVl9QQ01fUkFURV84MDAwXzQ4MDAwfFNORFJWX1BDTV9SQVRFXzY0MDAwfFwKKwkJCQkJIFNORFJWX1BDTV9SQVRFXzg4MjAwfFNORFJWX1BDTV9SQVRFXzk2MDAwKQorI2RlZmluZSBTTkRSVl9QQ01fUkFURV84MDAwXzE5MjAwMAkoU05EUlZfUENNX1JBVEVfODAwMF85NjAwMHxTTkRSVl9QQ01fUkFURV8xNzY0MDB8XAorCQkJCQkgU05EUlZfUENNX1JBVEVfMTkyMDAwKQorI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX1M4CQkoMVVMTCA8PCBTTkRSVl9QQ01fRk9STUFUX1M4KQorI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX1U4CQkoMVVMTCA8PCBTTkRSVl9QQ01fRk9STUFUX1U4KQorI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRQkJKDFVTEwgPDwgU05EUlZfUENNX0ZPUk1BVF9TMTZfTEUpCisjZGVmaW5lIFNORFJWX1BDTV9GTVRCSVRfUzE2X0JFCQkoMVVMTCA8PCBTTkRSVl9QQ01fRk9STUFUX1MxNl9CRSkKKyNkZWZpbmUgU05EUlZfUENNX0ZNVEJJVF9VMTZfTEUJCSgxVUxMIDw8IFNORFJWX1BDTV9GT1JNQVRfVTE2X0xFKQorI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX1UxNl9CRQkJKDFVTEwgPDwgU05EUlZfUENNX0ZPUk1BVF9VMTZfQkUpCisjZGVmaW5lIFNORFJWX1BDTV9GTVRCSVRfUzI0X0xFCQkoMVVMTCA8PCBTTkRSVl9QQ01fRk9STUFUX1MyNF9MRSkKKyNkZWZpbmUgU05EUlZfUENNX0ZNVEJJVF9TMjRfQkUJCSgxVUxMIDw8IFNORFJWX1BDTV9GT1JNQVRfUzI0X0JFKQorI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX1UyNF9MRQkJKDFVTEwgPDwgU05EUlZfUENNX0ZPUk1BVF9VMjRfTEUpCisjZGVmaW5lIFNORFJWX1BDTV9GTVRCSVRfVTI0X0JFCQkoMVVMTCA8PCBTTkRSVl9QQ01fRk9STUFUX1UyNF9CRSkKKyNkZWZpbmUgU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUJCSgxVUxMIDw8IFNORFJWX1BDTV9GT1JNQVRfUzMyX0xFKQorI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX1MzMl9CRQkJKDFVTEwgPDwgU05EUlZfUENNX0ZPUk1BVF9TMzJfQkUpCisjZGVmaW5lIFNORFJWX1BDTV9GTVRCSVRfVTMyX0xFCQkoMVVMTCA8PCBTTkRSVl9QQ01fRk9STUFUX1UzMl9MRSkKKyNkZWZpbmUgU05EUlZfUENNX0ZNVEJJVF9VMzJfQkUJCSgxVUxMIDw8IFNORFJWX1BDTV9GT1JNQVRfVTMyX0JFKQorI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX0ZMT0FUX0xFCSgxVUxMIDw8IFNORFJWX1BDTV9GT1JNQVRfRkxPQVRfTEUpCisjZGVmaW5lIFNORFJWX1BDTV9GTVRCSVRfRkxPQVRfQkUJKDFVTEwgPDwgU05EUlZfUENNX0ZPUk1BVF9GTE9BVF9CRSkKKyNkZWZpbmUgU05EUlZfUENNX0ZNVEJJVF9GTE9BVDY0X0xFCSgxVUxMIDw8IFNORFJWX1BDTV9GT1JNQVRfRkxPQVQ2NF9MRSkKKyNkZWZpbmUgU05EUlZfUENNX0ZNVEJJVF9GTE9BVDY0X0JFCSgxVUxMIDw8IFNORFJWX1BDTV9GT1JNQVRfRkxPQVQ2NF9CRSkKKyNkZWZpbmUgU05EUlZfUENNX0ZNVEJJVF9JRUM5NThfU1VCRlJBTUVfTEUgKDFVTEwgPDwgU05EUlZfUENNX0ZPUk1BVF9JRUM5NThfU1VCRlJBTUVfTEUpCisjZGVmaW5lIFNORFJWX1BDTV9GTVRCSVRfSUVDOTU4X1NVQkZSQU1FX0JFICgxVUxMIDw8IFNORFJWX1BDTV9GT1JNQVRfSUVDOTU4X1NVQkZSQU1FX0JFKQorI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX01VX0xBVwkJKDFVTEwgPDwgU05EUlZfUENNX0ZPUk1BVF9NVV9MQVcpCisjZGVmaW5lIFNORFJWX1BDTV9GTVRCSVRfQV9MQVcJCSgxVUxMIDw8IFNORFJWX1BDTV9GT1JNQVRfQV9MQVcpCisjZGVmaW5lIFNORFJWX1BDTV9GTVRCSVRfSU1BX0FEUENNCSgxVUxMIDw8IFNORFJWX1BDTV9GT1JNQVRfSU1BX0FEUENNKQorI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX01QRUcJCSgxVUxMIDw8IFNORFJWX1BDTV9GT1JNQVRfTVBFRykKKyNkZWZpbmUgU05EUlZfUENNX0ZNVEJJVF9HU00JCSgxVUxMIDw8IFNORFJWX1BDTV9GT1JNQVRfR1NNKQorI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX1NQRUNJQUwJKDFVTEwgPDwgU05EUlZfUENNX0ZPUk1BVF9TUEVDSUFMKQorI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX1MyNF8zTEUJKDFVTEwgPDwgU05EUlZfUENNX0ZPUk1BVF9TMjRfM0xFKQorI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX1UyNF8zTEUJKDFVTEwgPDwgU05EUlZfUENNX0ZPUk1BVF9VMjRfM0xFKQorI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX1MyNF8zQkUJKDFVTEwgPDwgU05EUlZfUENNX0ZPUk1BVF9TMjRfM0JFKQorI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX1UyNF8zQkUJKDFVTEwgPDwgU05EUlZfUENNX0ZPUk1BVF9VMjRfM0JFKQorI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX1MyMF8zTEUJKDFVTEwgPDwgU05EUlZfUENNX0ZPUk1BVF9TMjBfM0xFKQorI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX1UyMF8zTEUJKDFVTEwgPDwgU05EUlZfUENNX0ZPUk1BVF9VMjBfM0xFKQorI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX1MyMF8zQkUJKDFVTEwgPDwgU05EUlZfUENNX0ZPUk1BVF9TMjBfM0JFKQorI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX1UyMF8zQkUJKDFVTEwgPDwgU05EUlZfUENNX0ZPUk1BVF9VMjBfM0JFKQorI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX1MxOF8zTEUJKDFVTEwgPDwgU05EUlZfUENNX0ZPUk1BVF9TMThfM0xFKQorI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX1UxOF8zTEUJKDFVTEwgPDwgU05EUlZfUENNX0ZPUk1BVF9VMThfM0xFKQorI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX1MxOF8zQkUJKDFVTEwgPDwgU05EUlZfUENNX0ZPUk1BVF9TMThfM0JFKQorI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX1UxOF8zQkUJKDFVTEwgPDwgU05EUlZfUENNX0ZPUk1BVF9VMThfM0JFKQorCisjaWZkZWYgU05EUlZfTElUVExFX0VORElBTgorI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX1MxNgkJU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUKKyNkZWZpbmUgU05EUlZfUENNX0ZNVEJJVF9VMTYJCVNORFJWX1BDTV9GTVRCSVRfVTE2X0xFCisjZGVmaW5lIFNORFJWX1BDTV9GTVRCSVRfUzI0CQlTTkRSVl9QQ01fRk1UQklUX1MyNF9MRQorI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX1UyNAkJU05EUlZfUENNX0ZNVEJJVF9VMjRfTEUKKyNkZWZpbmUgU05EUlZfUENNX0ZNVEJJVF9TMzIJCVNORFJWX1BDTV9GTVRCSVRfUzMyX0xFCisjZGVmaW5lIFNORFJWX1BDTV9GTVRCSVRfVTMyCQlTTkRSVl9QQ01fRk1UQklUX1UzMl9MRQorI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX0ZMT0FUCQlTTkRSVl9QQ01fRk1UQklUX0ZMT0FUX0xFCisjZGVmaW5lIFNORFJWX1BDTV9GTVRCSVRfRkxPQVQ2NAlTTkRSVl9QQ01fRk1UQklUX0ZMT0FUNjRfTEUKKyNkZWZpbmUgU05EUlZfUENNX0ZNVEJJVF9JRUM5NThfU1VCRlJBTUUgU05EUlZfUENNX0ZNVEJJVF9JRUM5NThfU1VCRlJBTUVfTEUKKyNlbmRpZgorI2lmZGVmIFNORFJWX0JJR19FTkRJQU4KKyNkZWZpbmUgU05EUlZfUENNX0ZNVEJJVF9TMTYJCVNORFJWX1BDTV9GTVRCSVRfUzE2X0JFCisjZGVmaW5lIFNORFJWX1BDTV9GTVRCSVRfVTE2CQlTTkRSVl9QQ01fRk1UQklUX1UxNl9CRQorI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX1MyNAkJU05EUlZfUENNX0ZNVEJJVF9TMjRfQkUKKyNkZWZpbmUgU05EUlZfUENNX0ZNVEJJVF9VMjQJCVNORFJWX1BDTV9GTVRCSVRfVTI0X0JFCisjZGVmaW5lIFNORFJWX1BDTV9GTVRCSVRfUzMyCQlTTkRSVl9QQ01fRk1UQklUX1MzMl9CRQorI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX1UzMgkJU05EUlZfUENNX0ZNVEJJVF9VMzJfQkUKKyNkZWZpbmUgU05EUlZfUENNX0ZNVEJJVF9GTE9BVAkJU05EUlZfUENNX0ZNVEJJVF9GTE9BVF9CRQorI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX0ZMT0FUNjQJU05EUlZfUENNX0ZNVEJJVF9GTE9BVDY0X0JFCisjZGVmaW5lIFNORFJWX1BDTV9GTVRCSVRfSUVDOTU4X1NVQkZSQU1FIFNORFJWX1BDTV9GTVRCSVRfSUVDOTU4X1NVQkZSQU1FX0JFCisjZW5kaWYKKworc3RydWN0IF9zbmRfcGNtX2ZpbGUgeworCXNuZF9wY21fc3Vic3RyZWFtX3QgKiBzdWJzdHJlYW07CisJc3RydWN0IF9zbmRfcGNtX2ZpbGUgKiBuZXh0OworfTsKKwordHlwZWRlZiBzdHJ1Y3QgX3NuZF9wY21faHdfcnVsZSBzbmRfcGNtX2h3X3J1bGVfdDsKKwordHlwZWRlZiBpbnQgKCpzbmRfcGNtX2h3X3J1bGVfZnVuY190KShzbmRfcGNtX2h3X3BhcmFtc190ICpwYXJhbXMsCisJCQkJICAgICAgc25kX3BjbV9od19ydWxlX3QgKnJ1bGUpOworCitzdHJ1Y3QgX3NuZF9wY21faHdfcnVsZSB7CisJdW5zaWduZWQgaW50IGNvbmQ7CisJc25kX3BjbV9od19ydWxlX2Z1bmNfdCBmdW5jOworCWludCB2YXI7CisJaW50IGRlcHNbNF07CisJdm9pZCAqcHJpdmF0ZTsKK307CisKK3R5cGVkZWYgc3RydWN0IF9zbmRfcGNtX2h3X2NvbnN0cmFpbnRzIHsKKwlzbmRfbWFza190IG1hc2tzW1NORFJWX1BDTV9IV19QQVJBTV9MQVNUX01BU0sgLSAKKwkJCSBTTkRSVl9QQ01fSFdfUEFSQU1fRklSU1RfTUFTSyArIDFdOworCXNuZF9pbnRlcnZhbF90IGludGVydmFsc1tTTkRSVl9QQ01fSFdfUEFSQU1fTEFTVF9JTlRFUlZBTCAtCisJCQkgICAgIFNORFJWX1BDTV9IV19QQVJBTV9GSVJTVF9JTlRFUlZBTCArIDFdOworCXVuc2lnbmVkIGludCBydWxlc19udW07CisJdW5zaWduZWQgaW50IHJ1bGVzX2FsbDsKKwlzbmRfcGNtX2h3X3J1bGVfdCAqcnVsZXM7Cit9IHNuZF9wY21faHdfY29uc3RyYWludHNfdDsKKworc3RhdGljIGlubGluZSBzbmRfbWFza190ICpjb25zdHJzX21hc2soc25kX3BjbV9od19jb25zdHJhaW50c190ICpjb25zdHJzLAorCQkJCSAgICAgICBzbmRfcGNtX2h3X3BhcmFtX3QgdmFyKQoreworCXJldHVybiAmY29uc3Rycy0+bWFza3NbdmFyIC0gU05EUlZfUENNX0hXX1BBUkFNX0ZJUlNUX01BU0tdOworfQorCitzdGF0aWMgaW5saW5lIHNuZF9pbnRlcnZhbF90ICpjb25zdHJzX2ludGVydmFsKHNuZF9wY21faHdfY29uc3RyYWludHNfdCAqY29uc3RycywKKwkJCQkJICBzbmRfcGNtX2h3X3BhcmFtX3QgdmFyKQoreworCXJldHVybiAmY29uc3Rycy0+aW50ZXJ2YWxzW3ZhciAtIFNORFJWX1BDTV9IV19QQVJBTV9GSVJTVF9JTlRFUlZBTF07Cit9CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQgbnVtOworCXVuc2lnbmVkIGludCBkZW5fbWluLCBkZW5fbWF4LCBkZW5fc3RlcDsKK30gcmF0bnVtX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQgbnVtX21pbiwgbnVtX21heCwgbnVtX3N0ZXA7CisJdW5zaWduZWQgaW50IGRlbjsKK30gcmF0ZGVuX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlpbnQgbnJhdHM7CisJcmF0bnVtX3QgKnJhdHM7Cit9IHNuZF9wY21faHdfY29uc3RyYWludF9yYXRudW1zX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlpbnQgbnJhdHM7CisJcmF0ZGVuX3QgKnJhdHM7Cit9IHNuZF9wY21faHdfY29uc3RyYWludF9yYXRkZW5zX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQgY291bnQ7CisJdW5zaWduZWQgaW50ICpsaXN0OworCXVuc2lnbmVkIGludCBtYXNrOworfSBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbGlzdF90OworCitzdHJ1Y3QgX3NuZF9wY21fcnVudGltZSB7CisJLyogLS0gU3RhdHVzIC0tICovCisJc25kX3BjbV9zdWJzdHJlYW1fdCAqdHJpZ2dlcl9tYXN0ZXI7CisJc25kX3RpbWVzdGFtcF90IHRyaWdnZXJfdHN0YW1wOwkvKiB0cmlnZ2VyIHRpbWVzdGFtcCAqLworCWludCBvdmVycmFuZ2U7CisJc25kX3BjbV91ZnJhbWVzX3QgYXZhaWxfbWF4OworCXNuZF9wY21fdWZyYW1lc190IGh3X3B0cl9iYXNlOwkvKiBQb3NpdGlvbiBhdCBidWZmZXIgcmVzdGFydCAqLworCXNuZF9wY21fdWZyYW1lc190IGh3X3B0cl9pbnRlcnJ1cHQ7IC8qIFBvc2l0aW9uIGF0IGludGVycnVwdCB0aW1lKi8KKworCS8qIC0tIEhXIHBhcmFtcyAtLSAqLworCXNuZF9wY21fYWNjZXNzX3QgYWNjZXNzOwkvKiBhY2Nlc3MgbW9kZSAqLworCXNuZF9wY21fZm9ybWF0X3QgZm9ybWF0OwkvKiBTTkRSVl9QQ01fRk9STUFUXyogKi8KKwlzbmRfcGNtX3N1YmZvcm1hdF90IHN1YmZvcm1hdDsJLyogc3ViZm9ybWF0ICovCisJdW5zaWduZWQgaW50IHJhdGU7CQkvKiByYXRlIGluIEh6ICovCisJdW5zaWduZWQgaW50IGNoYW5uZWxzOwkJLyogY2hhbm5lbHMgKi8KKwlzbmRfcGNtX3VmcmFtZXNfdCBwZXJpb2Rfc2l6ZTsJLyogcGVyaW9kIHNpemUgKi8KKwl1bnNpZ25lZCBpbnQgcGVyaW9kczsJCS8qIHBlcmlvZHMgKi8KKwlzbmRfcGNtX3VmcmFtZXNfdCBidWZmZXJfc2l6ZTsJLyogYnVmZmVyIHNpemUgKi8KKwl1bnNpZ25lZCBpbnQgdGlja190aW1lOwkJLyogdGljayB0aW1lICovCisJc25kX3BjbV91ZnJhbWVzX3QgbWluX2FsaWduOwkvKiBNaW4gYWxpZ25tZW50IGZvciB0aGUgZm9ybWF0ICovCisJc2l6ZV90IGJ5dGVfYWxpZ247CisJdW5zaWduZWQgaW50IGZyYW1lX2JpdHM7CisJdW5zaWduZWQgaW50IHNhbXBsZV9iaXRzOworCXVuc2lnbmVkIGludCBpbmZvOworCXVuc2lnbmVkIGludCByYXRlX251bTsKKwl1bnNpZ25lZCBpbnQgcmF0ZV9kZW47CisKKwkvKiAtLSBTVyBwYXJhbXMgLS0gKi8KKwlpbnQgdHN0YW1wX3RpbWVzcGVjOwkJLyogdXNlIHRpbWV2YWwgKDApIG9yIHRpbWVzcGVjICgxKSAqLworCXNuZF9wY21fdHN0YW1wX3QgdHN0YW1wX21vZGU7CS8qIG1tYXAgdGltZXN0YW1wIGlzIHVwZGF0ZWQgKi8KKyAgCXVuc2lnbmVkIGludCBwZXJpb2Rfc3RlcDsKKwl1bnNpZ25lZCBpbnQgc2xlZXBfbWluOwkJLyogbWluIHRpY2tzIHRvIHNsZWVwICovCisJc25kX3BjbV91ZnJhbWVzX3QgeGZlcl9hbGlnbjsJLyogeGZlciBzaXplIG5lZWQgdG8gYmUgYSBtdWx0aXBsZSAqLworCXNuZF9wY21fdWZyYW1lc190IHN0YXJ0X3RocmVzaG9sZDsKKwlzbmRfcGNtX3VmcmFtZXNfdCBzdG9wX3RocmVzaG9sZDsKKwlzbmRfcGNtX3VmcmFtZXNfdCBzaWxlbmNlX3RocmVzaG9sZDsgLyogU2lsZW5jZSBmaWxsaW5nIGhhcHBlbnMgd2hlbgorCQkJCQkJbm9pc2UgaXMgbmVhcmVzdCB0aGFuIHRoaXMgKi8KKwlzbmRfcGNtX3VmcmFtZXNfdCBzaWxlbmNlX3NpemU7CS8qIFNpbGVuY2UgZmlsbGluZyBzaXplICovCisJc25kX3BjbV91ZnJhbWVzX3QgYm91bmRhcnk7CS8qIHBvaW50ZXJzIHdyYXAgcG9pbnQgKi8KKworCXNuZF9wY21fdWZyYW1lc190IHNpbGVuY2Vfc3RhcnQ7IC8qIHN0YXJ0aW5nIHBvaW50ZXIgdG8gc2lsZW5jZSBhcmVhICovCisJc25kX3BjbV91ZnJhbWVzX3Qgc2lsZW5jZV9maWxsZWQ7IC8qIHNpemUgZmlsbGVkIHdpdGggc2lsZW5jZSAqLworCisJc25kX3BjbV9zeW5jX2lkX3Qgc3luYzsJCS8qIGhhcmR3YXJlIHN5bmNocm9uaXphdGlvbiBJRCAqLworCisJLyogLS0gbW1hcCAtLSAqLworCXZvbGF0aWxlIHNuZF9wY21fbW1hcF9zdGF0dXNfdCAqc3RhdHVzOworCXZvbGF0aWxlIHNuZF9wY21fbW1hcF9jb250cm9sX3QgKmNvbnRyb2w7CisJYXRvbWljX3QgbW1hcF9jb3VudDsKKworCS8qIC0tIGxvY2tpbmcgLyBzY2hlZHVsaW5nIC0tICovCisJd2FpdF9xdWV1ZV9oZWFkX3Qgc2xlZXA7CisJc3RydWN0IHRpbWVyX2xpc3QgdGlja190aW1lcjsKKwlzdHJ1Y3QgZmFzeW5jX3N0cnVjdCAqZmFzeW5jOworCisJLyogLS0gcHJpdmF0ZSBzZWN0aW9uIC0tICovCisJdm9pZCAqcHJpdmF0ZV9kYXRhOworCXZvaWQgKCpwcml2YXRlX2ZyZWUpKHNuZF9wY21fcnVudGltZV90ICpydW50aW1lKTsKKworCS8qIC0tIGhhcmR3YXJlIGRlc2NyaXB0aW9uIC0tICovCisJc25kX3BjbV9oYXJkd2FyZV90IGh3OworCXNuZF9wY21faHdfY29uc3RyYWludHNfdCBod19jb25zdHJhaW50czsKKworCS8qIC0tIGludGVycnVwdCBjYWxsYmFja3MgLS0gKi8KKwl2b2lkICgqdHJhbnNmZXJfYWNrX2JlZ2luKShzbmRfcGNtX3N1YnN0cmVhbV90ICpzdWJzdHJlYW0pOworCXZvaWQgKCp0cmFuc2Zlcl9hY2tfZW5kKShzbmRfcGNtX3N1YnN0cmVhbV90ICpzdWJzdHJlYW0pOworCisJLyogLS0gdGltZXIgLS0gKi8KKwl1bnNpZ25lZCBpbnQgdGltZXJfcmVzb2x1dGlvbjsJLyogdGltZXIgcmVzb2x1dGlvbiAqLworCisJLyogLS0gRE1BIC0tICovICAgICAgICAgICAKKwl1bnNpZ25lZCBjaGFyICpkbWFfYXJlYTsJLyogRE1BIGFyZWEgKi8KKwlkbWFfYWRkcl90IGRtYV9hZGRyOwkJLyogcGh5c2ljYWwgYnVzIGFkZHJlc3MgKG5vdCBhY2Nlc3NpYmxlIGZyb20gbWFpbiBDUFUpICovCisJc2l6ZV90IGRtYV9ieXRlczsJCS8qIHNpemUgb2YgRE1BIGFyZWEgKi8KKworCXN0cnVjdCBzbmRfZG1hX2J1ZmZlciAqZG1hX2J1ZmZlcl9wOwkvKiBhbGxvY2F0ZWQgYnVmZmVyICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19TTkRfUENNX09TUykgfHwgZGVmaW5lZChDT05GSUdfU05EX1BDTV9PU1NfTU9EVUxFKQorCS8qIC0tIE9TUyB0aGluZ3MgLS0gKi8KKwlzbmRfcGNtX29zc19ydW50aW1lX3Qgb3NzOworI2VuZGlmCit9OworCit0eXBlZGVmIHN0cnVjdCBfc25kX3BjbV9ncm91cCB7CQkvKiBrZWVwIGxpbmtlZCBzdWJzdHJlYW1zICovCisJc3BpbmxvY2tfdCBsb2NrOworCXN0cnVjdCBsaXN0X2hlYWQgc3Vic3RyZWFtczsKKwlpbnQgY291bnQ7Cit9IHNuZF9wY21fZ3JvdXBfdDsKKworc3RydWN0IF9zbmRfcGNtX3N1YnN0cmVhbSB7CisJc25kX3BjbV90ICpwY207CisJc25kX3BjbV9zdHJfdCAqcHN0cjsKKwl2b2lkICpwcml2YXRlX2RhdGE7CQkvKiBjb3BpZWQgZnJvbSBwY20tPnByaXZhdGVfZGF0YSAqLworCWludCBudW1iZXI7CisJY2hhciBuYW1lWzMyXTsJCQkvKiBzdWJzdHJlYW0gbmFtZSAqLworCWludCBzdHJlYW07CQkJLyogc3RyZWFtIChkaXJlY3Rpb24pICovCisJc2l6ZV90IGJ1ZmZlcl9ieXRlc19tYXg7CS8qIGxpbWl0IHJpbmcgYnVmZmVyIHNpemUgKi8KKwlzdHJ1Y3Qgc25kX2RtYV9idWZmZXIgZG1hX2J1ZmZlcjsKKwl1bnNpZ25lZCBpbnQgZG1hX2J1Zl9pZDsKKwlzaXplX3QgZG1hX21heDsKKwkvKiAtLSBoYXJkd2FyZSBvcGVyYXRpb25zIC0tICovCisJdW5zaWduZWQgaW50IG9wZW5fZmxhZzogMTsJLyogbG93bGV2ZWwgZGV2aWNlIGhhcyBiZWVuIG9wZW5lZCAqLworCXNuZF9wY21fb3BzX3QgKm9wczsKKwkvKiAtLSBydW50aW1lIGluZm9ybWF0aW9uIC0tICovCisJc25kX3BjbV9ydW50aW1lX3QgKnJ1bnRpbWU7CisgICAgICAgIC8qIC0tIHRpbWVyIHNlY3Rpb24gLS0gKi8KKwlzbmRfdGltZXJfdCAqdGltZXI7CQkvKiB0aW1lciAqLworCXVuc2lnbmVkIHRpbWVyX3J1bm5pbmc6IDE7CS8qIHRpbWUgaXMgcnVubmluZyAqLworCXNwaW5sb2NrX3QgdGltZXJfbG9jazsKKwkvKiAtLSBuZXh0IHN1YnN0cmVhbSAtLSAqLworCXNuZF9wY21fc3Vic3RyZWFtX3QgKm5leHQ7CisJLyogLS0gbGlua2VkIHN1YnN0cmVhbXMgLS0gKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpbmtfbGlzdDsJLyogbGlua2VkIGxpc3QgbWVtYmVyICovCisJc25kX3BjbV9ncm91cF90IHNlbGZfZ3JvdXA7CS8qIGZha2UgZ3JvdXAgZm9yIG5vbiBsaW5rZWQgc3Vic3RyZWFtICh3aXRoIHN1YnN0cmVhbSBsb2NrIGluc2lkZSkgKi8KKwlzbmRfcGNtX2dyb3VwX3QgKmdyb3VwOwkJLyogcG9pbnRlciB0byBjdXJyZW50IGdyb3VwICovCisJLyogLS0gYXNzaWduZWQgZmlsZXMgLS0gKi8KKwlzbmRfcGNtX2ZpbGVfdCAqZmlsZTsKKwlzdHJ1Y3QgZmlsZSAqZmZpbGU7CisjaWYgZGVmaW5lZChDT05GSUdfU05EX1BDTV9PU1MpIHx8IGRlZmluZWQoQ09ORklHX1NORF9QQ01fT1NTX01PRFVMRSkKKwkvKiAtLSBPU1MgdGhpbmdzIC0tICovCisJc25kX3BjbV9vc3Nfc3Vic3RyZWFtX3Qgb3NzOworI2VuZGlmCisJc25kX2luZm9fZW50cnlfdCAqcHJvY19yb290OworCXNuZF9pbmZvX2VudHJ5X3QgKnByb2NfaW5mb19lbnRyeTsKKwlzbmRfaW5mb19lbnRyeV90ICpwcm9jX2h3X3BhcmFtc19lbnRyeTsKKwlzbmRfaW5mb19lbnRyeV90ICpwcm9jX3N3X3BhcmFtc19lbnRyeTsKKwlzbmRfaW5mb19lbnRyeV90ICpwcm9jX3N0YXR1c19lbnRyeTsKKwlzbmRfaW5mb19lbnRyeV90ICpwcm9jX3ByZWFsbG9jX2VudHJ5OworCS8qIG1pc2MgZmxhZ3MgKi8KKwl1bnNpZ25lZCBpbnQgbm9fbW1hcF9jdHJsOiAxOworfTsKKworI2lmIGRlZmluZWQoQ09ORklHX1NORF9QQ01fT1NTKSB8fCBkZWZpbmVkKENPTkZJR19TTkRfUENNX09TU19NT0RVTEUpCisjZGVmaW5lIFNVQlNUUkVBTV9CVVNZKHN1YnN0cmVhbSkgKChzdWJzdHJlYW0pLT5maWxlICE9IE5VTEwgfHwgKChzdWJzdHJlYW0pLT5vc3MuZmlsZSAhPSBOVUxMKSkKKyNlbHNlCisjZGVmaW5lIFNVQlNUUkVBTV9CVVNZKHN1YnN0cmVhbSkgKChzdWJzdHJlYW0pLT5maWxlICE9IE5VTEwpCisjZW5kaWYKKworCitzdHJ1Y3QgX3NuZF9wY21fc3RyIHsKKwlpbnQgc3RyZWFtOwkJCQkvKiBzdHJlYW0gKGRpcmVjdGlvbikgKi8KKwlzbmRfcGNtX3QgKnBjbTsKKwkvKiAtLSBzdWJzdHJlYW1zIC0tICovCisJdW5zaWduZWQgaW50IHN1YnN0cmVhbV9jb3VudDsKKwl1bnNpZ25lZCBpbnQgc3Vic3RyZWFtX29wZW5lZDsKKwlzbmRfcGNtX3N1YnN0cmVhbV90ICpzdWJzdHJlYW07CisjaWYgZGVmaW5lZChDT05GSUdfU05EX1BDTV9PU1MpIHx8IGRlZmluZWQoQ09ORklHX1NORF9QQ01fT1NTX01PRFVMRSkKKwkvKiAtLSBPU1MgdGhpbmdzIC0tICovCisJc25kX3BjbV9vc3Nfc3RyZWFtX3Qgb3NzOworI2VuZGlmCisJc25kX3BjbV9maWxlX3QgKmZpbGVzOworCXNuZF9taW5vcl90ICpyZWc7CisJc25kX2luZm9fZW50cnlfdCAqcHJvY19yb290OworCXNuZF9pbmZvX2VudHJ5X3QgKnByb2NfaW5mb19lbnRyeTsKKyNpZmRlZiBDT05GSUdfU05EX0RFQlVHCisJdW5zaWduZWQgaW50IHhydW5fZGVidWc7CS8qIDAgPSBkaXNhYmxlZCwgMSA9IHZlcmJvc2UsIDIgPSBzdGFja3RyYWNlICovCisJc25kX2luZm9fZW50cnlfdCAqcHJvY194cnVuX2RlYnVnX2VudHJ5OworI2VuZGlmCit9OworCitzdHJ1Y3QgX3NuZF9wY20geworCXNuZF9jYXJkX3QgKmNhcmQ7CisJdW5zaWduZWQgaW50IGRldmljZTsJLyogZGV2aWNlIG51bWJlciAqLworCXVuc2lnbmVkIGludCBpbmZvX2ZsYWdzOworCXVuc2lnbmVkIHNob3J0IGRldl9jbGFzczsKKwl1bnNpZ25lZCBzaG9ydCBkZXZfc3ViY2xhc3M7CisJY2hhciBpZFs2NF07CisJY2hhciBuYW1lWzgwXTsKKwlzbmRfcGNtX3N0cl90IHN0cmVhbXNbMl07CisJc3RydWN0IHNlbWFwaG9yZSBvcGVuX211dGV4OworCXdhaXRfcXVldWVfaGVhZF90IG9wZW5fd2FpdDsKKwl2b2lkICpwcml2YXRlX2RhdGE7CisJdm9pZCAoKnByaXZhdGVfZnJlZSkgKHNuZF9wY21fdCAqcGNtKTsKKyNpZiBkZWZpbmVkKENPTkZJR19TTkRfUENNX09TUykgfHwgZGVmaW5lZChDT05GSUdfU05EX1BDTV9PU1NfTU9EVUxFKQorCXNuZF9wY21fb3NzX3Qgb3NzOworI2VuZGlmCit9OworCit0eXBlZGVmIHN0cnVjdCBfc25kX3BjbV9ub3RpZnkgeworCWludCAoKm5fcmVnaXN0ZXIpIChzbmRfcGNtX3QgKiBwY20pOworCWludCAoKm5fZGlzY29ubmVjdCkgKHNuZF9wY21fdCAqIHBjbSk7CisJaW50ICgqbl91bnJlZ2lzdGVyKSAoc25kX3BjbV90ICogcGNtKTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Cit9IHNuZF9wY21fbm90aWZ5X3Q7CisKKy8qCisgKiAgUmVnaXN0ZXJpbmcKKyAqLworCitleHRlcm4gc25kX3BjbV90ICpzbmRfcGNtX2RldmljZXNbXTsKK2V4dGVybiBzbmRfbWlub3JfdCBzbmRfcGNtX3JlZ1syXTsKKworaW50IHNuZF9wY21fbmV3KHNuZF9jYXJkX3QgKiBjYXJkLCBjaGFyICppZCwgaW50IGRldmljZSwKKwkJaW50IHBsYXliYWNrX2NvdW50LCBpbnQgY2FwdHVyZV9jb3VudCwKKwkJc25kX3BjbV90ICoqcnBjbSk7CitpbnQgc25kX3BjbV9uZXdfc3RyZWFtKHNuZF9wY21fdCAqcGNtLCBpbnQgc3RyZWFtLCBpbnQgc3Vic3RyZWFtX2NvdW50KTsKKworaW50IHNuZF9wY21fbm90aWZ5KHNuZF9wY21fbm90aWZ5X3QgKm5vdGlmeSwgaW50IG5mcmVlKTsKKworLyoKKyAqICBOYXRpdmUgSS9PCisgKi8KKworZXh0ZXJuIHJ3bG9ja190IHNuZF9wY21fbGlua19yd2xvY2s7CisKK2ludCBzbmRfcGNtX2luZm8oc25kX3BjbV9zdWJzdHJlYW1fdCAqIHN1YnN0cmVhbSwgc25kX3BjbV9pbmZvX3QgKmluZm8pOworaW50IHNuZF9wY21faW5mb191c2VyKHNuZF9wY21fc3Vic3RyZWFtX3QgKiBzdWJzdHJlYW0sIHNuZF9wY21faW5mb190IF9fdXNlciAqaW5mbyk7CitpbnQgc25kX3BjbV9zdGF0dXMoc25kX3BjbV9zdWJzdHJlYW1fdCAqIHN1YnN0cmVhbSwgc25kX3BjbV9zdGF0dXNfdCAqc3RhdHVzKTsKK2ludCBzbmRfcGNtX3ByZXBhcmUoc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtKTsKK2ludCBzbmRfcGNtX3N0YXJ0KHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSk7CitpbnQgc25kX3BjbV9zdG9wKHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSwgaW50IHN0YXR1cyk7CitpbnQgc25kX3BjbV9kcmFpbl9kb25lKHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSk7CisjaWZkZWYgQ09ORklHX1BNCitpbnQgc25kX3BjbV9zdXNwZW5kKHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSk7CitpbnQgc25kX3BjbV9zdXNwZW5kX2FsbChzbmRfcGNtX3QgKnBjbSk7CisjZW5kaWYKK2ludCBzbmRfcGNtX2tlcm5lbF9wbGF5YmFja19pb2N0bChzbmRfcGNtX3N1YnN0cmVhbV90ICpzdWJzdHJlYW0sIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZyk7CitpbnQgc25kX3BjbV9rZXJuZWxfY2FwdHVyZV9pb2N0bChzbmRfcGNtX3N1YnN0cmVhbV90ICpzdWJzdHJlYW0sIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZyk7CitpbnQgc25kX3BjbV9rZXJuZWxfaW9jdGwoc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpOworaW50IHNuZF9wY21fb3Blbl9zdWJzdHJlYW0oc25kX3BjbV90ICpwY20sIGludCBzdHJlYW0sIHNuZF9wY21fc3Vic3RyZWFtX3QgKipyc3Vic3RyZWFtKTsKK3ZvaWQgc25kX3BjbV9yZWxlYXNlX3N1YnN0cmVhbShzbmRfcGNtX3N1YnN0cmVhbV90ICpzdWJzdHJlYW0pOwordm9pZCBzbmRfcGNtX3ZtYV9ub3RpZnlfZGF0YSh2b2lkICpjbGllbnQsIHZvaWQgKmRhdGEpOworaW50IHNuZF9wY21fbW1hcF9kYXRhKHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSwgc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqYXJlYSk7CisKKyNpZiBCSVRTX1BFUl9MT05HID49IDY0CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkaXY2NF8zMih1X2ludDY0X3QgKm4sIHVfaW50MzJfdCBkaXYsIHVfaW50MzJfdCAqcmVtKQoreworCSpyZW0gPSAqbiAlIGRpdjsKKwkqbiAvPSBkaXY7Cit9CisKKyNlbGlmIGRlZmluZWQoaTM4NikKKworc3RhdGljIGlubGluZSB2b2lkIGRpdjY0XzMyKHVfaW50NjRfdCAqbiwgdV9pbnQzMl90IGRpdiwgdV9pbnQzMl90ICpyZW0pCit7CisJdV9pbnQzMl90IGxvdywgaGlnaDsKKwlsb3cgPSAqbiAmIDB4ZmZmZmZmZmY7CisJaGlnaCA9ICpuID4+IDMyOworCWlmIChoaWdoKSB7CisJCXVfaW50MzJfdCBoaWdoMSA9IGhpZ2ggJSBkaXY7CisJCWhpZ2ggLz0gZGl2OworCQlhc20oImRpdmwgJTIiOiI9YSIgKGxvdyksICI9ZCIgKCpyZW0pOiJybSIgKGRpdiksICJhIiAobG93KSwgImQiIChoaWdoMSkpOworCQkqbiA9ICh1X2ludDY0X3QpaGlnaCA8PCAzMiB8IGxvdzsKKwl9IGVsc2UgeworCQkqbiA9IGxvdyAvIGRpdjsKKwkJKnJlbSA9IGxvdyAlIGRpdjsKKwl9Cit9CisjZWxzZQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGl2bCh1X2ludDMyX3QgaGlnaCwgdV9pbnQzMl90IGxvdywKKwkJCXVfaW50MzJfdCBkaXYsCisJCQl1X2ludDMyX3QgKnEsIHVfaW50MzJfdCAqcikKK3sKKwl1X2ludDY0X3QgbiA9ICh1X2ludDY0X3QpaGlnaCA8PCAzMiB8IGxvdzsKKwl1X2ludDY0X3QgZCA9ICh1X2ludDY0X3QpZGl2IDw8IDMxOworCXVfaW50MzJfdCBxMSA9IDA7CisJaW50IGMgPSAzMjsKKwl3aGlsZSAobiA+IDB4ZmZmZmZmZmZVKSB7CisJCXExIDw8PSAxOworCQlpZiAobiA+PSBkKSB7CisJCQluIC09IGQ7CisJCQlxMSB8PSAxOworCQl9CisJCWQgPj49IDE7CisJCWMtLTsKKwl9CisJcTEgPDw9IGM7CisJaWYgKG4pIHsKKwkJbG93ID0gbjsKKwkJKnEgPSBxMSB8IChsb3cgLyBkaXYpOworCQkqciA9IGxvdyAlIGRpdjsKKwl9IGVsc2UgeworCQkqciA9IDA7CisJCSpxID0gcTE7CisJfQorCXJldHVybjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRpdjY0XzMyKHVfaW50NjRfdCAqbiwgdV9pbnQzMl90IGRpdiwgdV9pbnQzMl90ICpyZW0pCit7CisJdV9pbnQzMl90IGxvdywgaGlnaDsKKwlsb3cgPSAqbiAmIDB4ZmZmZmZmZmY7CisJaGlnaCA9ICpuID4+IDMyOworCWlmIChoaWdoKSB7CisJCXVfaW50MzJfdCBoaWdoMSA9IGhpZ2ggJSBkaXY7CisJCXVfaW50MzJfdCBsb3cxID0gbG93OworCQloaWdoIC89IGRpdjsKKwkJZGl2bChoaWdoMSwgbG93MSwgZGl2LCAmbG93LCByZW0pOworCQkqbiA9ICh1X2ludDY0X3QpaGlnaCA8PCAzMiB8IGxvdzsKKwl9IGVsc2UgeworCQkqbiA9IGxvdyAvIGRpdjsKKwkJKnJlbSA9IGxvdyAlIGRpdjsKKwl9Cit9CisjZW5kaWYKKworLyoKKyAqICBQQ00gbGlicmFyeQorICovCisKK3N0YXRpYyBpbmxpbmUgaW50IHNuZF9wY21fc3RyZWFtX2xpbmtlZChzbmRfcGNtX3N1YnN0cmVhbV90ICpzdWJzdHJlYW0pCit7CisJcmV0dXJuIHN1YnN0cmVhbS0+Z3JvdXAgIT0gJnN1YnN0cmVhbS0+c2VsZl9ncm91cDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNuZF9wY21fc3RyZWFtX2xvY2soc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtKQoreworCXJlYWRfbG9jaygmc25kX3BjbV9saW5rX3J3bG9jayk7CisJc3Bpbl9sb2NrKCZzdWJzdHJlYW0tPnNlbGZfZ3JvdXAubG9jayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbmRfcGNtX3N0cmVhbV91bmxvY2soc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtKQoreworCXNwaW5fdW5sb2NrKCZzdWJzdHJlYW0tPnNlbGZfZ3JvdXAubG9jayk7CisJcmVhZF91bmxvY2soJnNuZF9wY21fbGlua19yd2xvY2spOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc25kX3BjbV9zdHJlYW1fbG9ja19pcnEoc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtKQoreworCXJlYWRfbG9ja19pcnEoJnNuZF9wY21fbGlua19yd2xvY2spOworCXNwaW5fbG9jaygmc3Vic3RyZWFtLT5zZWxmX2dyb3VwLmxvY2spOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc25kX3BjbV9zdHJlYW1fdW5sb2NrX2lycShzbmRfcGNtX3N1YnN0cmVhbV90ICpzdWJzdHJlYW0pCit7CisJc3Bpbl91bmxvY2soJnN1YnN0cmVhbS0+c2VsZl9ncm91cC5sb2NrKTsKKwlyZWFkX3VubG9ja19pcnEoJnNuZF9wY21fbGlua19yd2xvY2spOworfQorCisjZGVmaW5lIHNuZF9wY21fc3RyZWFtX2xvY2tfaXJxc2F2ZShzdWJzdHJlYW0sIGZsYWdzKSBcCitkbyB7IFwKKwlyZWFkX2xvY2tfaXJxc2F2ZSgmc25kX3BjbV9saW5rX3J3bG9jaywgKGZsYWdzKSk7IFwKKwlzcGluX2xvY2soJnN1YnN0cmVhbS0+c2VsZl9ncm91cC5sb2NrKTsgXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBzbmRfcGNtX3N0cmVhbV91bmxvY2tfaXJxcmVzdG9yZShzdWJzdHJlYW0sIGZsYWdzKSBcCitkbyB7IFwKKwlzcGluX3VubG9jaygmc3Vic3RyZWFtLT5zZWxmX2dyb3VwLmxvY2spOyBcCisJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmc25kX3BjbV9saW5rX3J3bG9jaywgKGZsYWdzKSk7IFwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgc25kX3BjbV9ncm91cF9mb3JfZWFjaChwb3MsIHN1YnN0cmVhbSkgXAorCWxpc3RfZm9yX2VhY2gocG9zLCAmc3Vic3RyZWFtLT5ncm91cC0+c3Vic3RyZWFtcykKKworI2RlZmluZSBzbmRfcGNtX2dyb3VwX3N1YnN0cmVhbV9lbnRyeShwb3MpIFwKKwlsaXN0X2VudHJ5KHBvcywgc25kX3BjbV9zdWJzdHJlYW1fdCwgbGlua19saXN0KQorCitzdGF0aWMgaW5saW5lIGludCBzbmRfcGNtX3J1bm5pbmcoc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtKQoreworCXJldHVybiAoc3Vic3RyZWFtLT5ydW50aW1lLT5zdGF0dXMtPnN0YXRlID09IFNORFJWX1BDTV9TVEFURV9SVU5OSU5HIHx8CisJCShzdWJzdHJlYW0tPnJ1bnRpbWUtPnN0YXR1cy0+c3RhdGUgPT0gU05EUlZfUENNX1NUQVRFX0RSQUlOSU5HICYmCisJCSBzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3NpemVfdCBieXRlc190b19zYW1wbGVzKHNuZF9wY21fcnVudGltZV90ICpydW50aW1lLCBzc2l6ZV90IHNpemUpCit7CisJcmV0dXJuIHNpemUgKiA4IC8gcnVudGltZS0+c2FtcGxlX2JpdHM7Cit9CisKK3N0YXRpYyBpbmxpbmUgc25kX3BjbV9zZnJhbWVzX3QgYnl0ZXNfdG9fZnJhbWVzKHNuZF9wY21fcnVudGltZV90ICpydW50aW1lLCBzc2l6ZV90IHNpemUpCit7CisJcmV0dXJuIHNpemUgKiA4IC8gcnVudGltZS0+ZnJhbWVfYml0czsKK30KKworc3RhdGljIGlubGluZSBzc2l6ZV90IHNhbXBsZXNfdG9fYnl0ZXMoc25kX3BjbV9ydW50aW1lX3QgKnJ1bnRpbWUsIHNzaXplX3Qgc2l6ZSkKK3sKKwlyZXR1cm4gc2l6ZSAqIHJ1bnRpbWUtPnNhbXBsZV9iaXRzIC8gODsKK30KKworc3RhdGljIGlubGluZSBzc2l6ZV90IGZyYW1lc190b19ieXRlcyhzbmRfcGNtX3J1bnRpbWVfdCAqcnVudGltZSwgc25kX3BjbV9zZnJhbWVzX3Qgc2l6ZSkKK3sKKwlyZXR1cm4gc2l6ZSAqIHJ1bnRpbWUtPmZyYW1lX2JpdHMgLyA4OworfQorCitzdGF0aWMgaW5saW5lIGludCBmcmFtZV9hbGlnbmVkKHNuZF9wY21fcnVudGltZV90ICpydW50aW1lLCBzc2l6ZV90IGJ5dGVzKQoreworCXJldHVybiBieXRlcyAlIHJ1bnRpbWUtPmJ5dGVfYWxpZ24gPT0gMDsKK30KKworc3RhdGljIGlubGluZSBzaXplX3Qgc25kX3BjbV9saWJfYnVmZmVyX2J5dGVzKHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSkKK3sKKwlzbmRfcGNtX3J1bnRpbWVfdCAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlyZXR1cm4gZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKTsKK30KKworc3RhdGljIGlubGluZSBzaXplX3Qgc25kX3BjbV9saWJfcGVyaW9kX2J5dGVzKHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSkKK3sKKwlzbmRfcGNtX3J1bnRpbWVfdCAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlyZXR1cm4gZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIHJ1bnRpbWUtPnBlcmlvZF9zaXplKTsKK30KKworLyoKKyAqICByZXN1bHQgaXM6IDAgLi4uIChib3VuZGFyeSAtIDEpCisgKi8KK3N0YXRpYyBpbmxpbmUgc25kX3BjbV91ZnJhbWVzX3Qgc25kX3BjbV9wbGF5YmFja19hdmFpbChzbmRfcGNtX3J1bnRpbWVfdCAqcnVudGltZSkKK3sKKwlzbmRfcGNtX3NmcmFtZXNfdCBhdmFpbCA9IHJ1bnRpbWUtPnN0YXR1cy0+aHdfcHRyICsgcnVudGltZS0+YnVmZmVyX3NpemUgLSBydW50aW1lLT5jb250cm9sLT5hcHBsX3B0cjsKKwlpZiAoYXZhaWwgPCAwKQorCQlhdmFpbCArPSBydW50aW1lLT5ib3VuZGFyeTsKKwllbHNlIGlmICgoc25kX3BjbV91ZnJhbWVzX3QpIGF2YWlsID49IHJ1bnRpbWUtPmJvdW5kYXJ5KQorCQlhdmFpbCAtPSBydW50aW1lLT5ib3VuZGFyeTsKKwlyZXR1cm4gYXZhaWw7Cit9CisKKy8qCisgKiAgcmVzdWx0IGlzOiAwIC4uLiAoYm91bmRhcnkgLSAxKQorICovCitzdGF0aWMgaW5saW5lIHNuZF9wY21fdWZyYW1lc190IHNuZF9wY21fY2FwdHVyZV9hdmFpbChzbmRfcGNtX3J1bnRpbWVfdCAqcnVudGltZSkKK3sKKwlzbmRfcGNtX3NmcmFtZXNfdCBhdmFpbCA9IHJ1bnRpbWUtPnN0YXR1cy0+aHdfcHRyIC0gcnVudGltZS0+Y29udHJvbC0+YXBwbF9wdHI7CisJaWYgKGF2YWlsIDwgMCkKKwkJYXZhaWwgKz0gcnVudGltZS0+Ym91bmRhcnk7CisJcmV0dXJuIGF2YWlsOworfQorCitzdGF0aWMgaW5saW5lIHNuZF9wY21fc2ZyYW1lc190IHNuZF9wY21fcGxheWJhY2tfaHdfYXZhaWwoc25kX3BjbV9ydW50aW1lX3QgKnJ1bnRpbWUpCit7CisJcmV0dXJuIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplIC0gc25kX3BjbV9wbGF5YmFja19hdmFpbChydW50aW1lKTsKK30KKworc3RhdGljIGlubGluZSBzbmRfcGNtX3NmcmFtZXNfdCBzbmRfcGNtX2NhcHR1cmVfaHdfYXZhaWwoc25kX3BjbV9ydW50aW1lX3QgKnJ1bnRpbWUpCit7CisJcmV0dXJuIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplIC0gc25kX3BjbV9jYXB0dXJlX2F2YWlsKHJ1bnRpbWUpOworfQorCisvKioKKyAqIHNuZF9wY21fcGxheWJhY2tfcmVhZHkgLSBjaGVjayB3aGV0aGVyIHRoZSBwbGF5YmFjayBidWZmZXIgaXMgYXZhaWxhYmxlCisgKiBAc3Vic3RyZWFtOiB0aGUgcGNtIHN1YnN0cmVhbSBpbnN0YW5jZQorICoKKyAqIENoZWNrcyB3aGV0aGVyIGVub3VnaCBmcmVlIHNwYWNlIGlzIGF2YWlsYWJsZSBvbiB0aGUgcGxheWJhY2sgYnVmZmVyLgorICoKKyAqIFJldHVybnMgbm9uLXplcm8gaWYgYXZhaWxhYmxlLCBvciB6ZXJvIGlmIG5vdC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgc25kX3BjbV9wbGF5YmFja19yZWFkeShzbmRfcGNtX3N1YnN0cmVhbV90ICpzdWJzdHJlYW0pCit7CisJc25kX3BjbV9ydW50aW1lX3QgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJcmV0dXJuIHNuZF9wY21fcGxheWJhY2tfYXZhaWwocnVudGltZSkgPj0gcnVudGltZS0+Y29udHJvbC0+YXZhaWxfbWluOworfQorCisvKioKKyAqIHNuZF9wY21fY2FwdHVyZV9yZWFkeSAtIGNoZWNrIHdoZXRoZXIgdGhlIGNhcHR1cmUgYnVmZmVyIGlzIGF2YWlsYWJsZQorICogQHN1YnN0cmVhbTogdGhlIHBjbSBzdWJzdHJlYW0gaW5zdGFuY2UKKyAqCisgKiBDaGVja3Mgd2hldGhlciBlbm91Z2ggY2FwdHVyZSBkYXRhIGlzIGF2YWlsYWJsZSBvbiB0aGUgY2FwdHVyZSBidWZmZXIuCisgKgorICogUmV0dXJucyBub24temVybyBpZiBhdmFpbGFibGUsIG9yIHplcm8gaWYgbm90LgorICovCitzdGF0aWMgaW5saW5lIGludCBzbmRfcGNtX2NhcHR1cmVfcmVhZHkoc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtKQoreworCXNuZF9wY21fcnVudGltZV90ICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXJldHVybiBzbmRfcGNtX2NhcHR1cmVfYXZhaWwocnVudGltZSkgPj0gcnVudGltZS0+Y29udHJvbC0+YXZhaWxfbWluOworfQorCisvKioKKyAqIHNuZF9wY21fcGxheWJhY2tfZGF0YSAtIGNoZWNrIHdoZXRoZXIgYW55IGRhdGEgZXhpc3RzIG9uIHRoZSBwbGF5YmFjayBidWZmZXIKKyAqIEBzdWJzdHJlYW06IHRoZSBwY20gc3Vic3RyZWFtIGluc3RhbmNlCisgKgorICogQ2hlY2tzIHdoZXRoZXIgYW55IGRhdGEgZXhpc3RzIG9uIHRoZSBwbGF5YmFjayBidWZmZXIuIElmIHN0b3BfdGhyZXNob2xkCisgKiBpcyBiaWdnZXIgb3IgZXF1YWwgdG8gYm91bmRhcnksIHRoZW4gdGhpcyBmdW5jdGlvbiByZXR1cm5zIGFsd2F5cyBub24temVyby4KKyAqCisgKiBSZXR1cm5zIG5vbi16ZXJvIGlmIGV4aXN0cywgb3IgemVybyBpZiBub3QuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHNuZF9wY21fcGxheWJhY2tfZGF0YShzbmRfcGNtX3N1YnN0cmVhbV90ICpzdWJzdHJlYW0pCit7CisJc25kX3BjbV9ydW50aW1lX3QgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJCisJaWYgKHJ1bnRpbWUtPnN0b3BfdGhyZXNob2xkID49IHJ1bnRpbWUtPmJvdW5kYXJ5KQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gc25kX3BjbV9wbGF5YmFja19hdmFpbChydW50aW1lKSA8IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOworfQorCisvKioKKyAqIHNuZF9wY21fcGxheWJhY2tfZW1wdHkgLSBjaGVjayB3aGV0aGVyIHRoZSBwbGF5YmFjayBidWZmZXIgaXMgZW1wdHkKKyAqIEBzdWJzdHJlYW06IHRoZSBwY20gc3Vic3RyZWFtIGluc3RhbmNlCisgKgorICogQ2hlY2tzIHdoZXRoZXIgdGhlIHBsYXliYWNrIGJ1ZmZlciBpcyBlbXB0eS4KKyAqCisgKiBSZXR1cm5zIG5vbi16ZXJvIGlmIGVtcHR5LCBvciB6ZXJvIGlmIG5vdC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgc25kX3BjbV9wbGF5YmFja19lbXB0eShzbmRfcGNtX3N1YnN0cmVhbV90ICpzdWJzdHJlYW0pCit7CisJc25kX3BjbV9ydW50aW1lX3QgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJcmV0dXJuIHNuZF9wY21fcGxheWJhY2tfYXZhaWwocnVudGltZSkgPj0gcnVudGltZS0+YnVmZmVyX3NpemU7Cit9CisKKy8qKgorICogc25kX3BjbV9jYXB0dXJlX2VtcHR5IC0gY2hlY2sgd2hldGhlciB0aGUgY2FwdHVyZSBidWZmZXIgaXMgZW1wdHkKKyAqIEBzdWJzdHJlYW06IHRoZSBwY20gc3Vic3RyZWFtIGluc3RhbmNlCisgKgorICogQ2hlY2tzIHdoZXRoZXIgdGhlIGNhcHR1cmUgYnVmZmVyIGlzIGVtcHR5LgorICoKKyAqIFJldHVybnMgbm9uLXplcm8gaWYgZW1wdHksIG9yIHplcm8gaWYgbm90LgorICovCitzdGF0aWMgaW5saW5lIGludCBzbmRfcGNtX2NhcHR1cmVfZW1wdHkoc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtKQoreworCXNuZF9wY21fcnVudGltZV90ICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXJldHVybiBzbmRfcGNtX2NhcHR1cmVfYXZhaWwocnVudGltZSkgPT0gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNuZF9wY21fdHJpZ2dlcl9kb25lKHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSwgCisJCQkJCXNuZF9wY21fc3Vic3RyZWFtX3QgKm1hc3RlcikKK3sKKwlzdWJzdHJlYW0tPnJ1bnRpbWUtPnRyaWdnZXJfbWFzdGVyID0gbWFzdGVyOworfQorCitzdGF0aWMgaW5saW5lIGludCBod19pc19tYXNrKGludCB2YXIpCit7CisJcmV0dXJuIHZhciA+PSBTTkRSVl9QQ01fSFdfUEFSQU1fRklSU1RfTUFTSyAmJgorCQl2YXIgPD0gU05EUlZfUENNX0hXX1BBUkFNX0xBU1RfTUFTSzsKK30KKworc3RhdGljIGlubGluZSBpbnQgaHdfaXNfaW50ZXJ2YWwoaW50IHZhcikKK3sKKwlyZXR1cm4gdmFyID49IFNORFJWX1BDTV9IV19QQVJBTV9GSVJTVF9JTlRFUlZBTCAmJgorCQl2YXIgPD0gU05EUlZfUENNX0hXX1BBUkFNX0xBU1RfSU5URVJWQUw7Cit9CisKK3N0YXRpYyBpbmxpbmUgc25kX21hc2tfdCAqaHdfcGFyYW1fbWFzayhzbmRfcGNtX2h3X3BhcmFtc190ICpwYXJhbXMsCisJCQkJICAgICBzbmRfcGNtX2h3X3BhcmFtX3QgdmFyKQoreworCXJldHVybiAmcGFyYW1zLT5tYXNrc1t2YXIgLSBTTkRSVl9QQ01fSFdfUEFSQU1fRklSU1RfTUFTS107Cit9CisKK3N0YXRpYyBpbmxpbmUgc25kX2ludGVydmFsX3QgKmh3X3BhcmFtX2ludGVydmFsKHNuZF9wY21faHdfcGFyYW1zX3QgKnBhcmFtcywKKwkJCQkJICAgICBzbmRfcGNtX2h3X3BhcmFtX3QgdmFyKQoreworCXJldHVybiAmcGFyYW1zLT5pbnRlcnZhbHNbdmFyIC0gU05EUlZfUENNX0hXX1BBUkFNX0ZJUlNUX0lOVEVSVkFMXTsKK30KKworc3RhdGljIGlubGluZSBjb25zdCBzbmRfbWFza190ICpod19wYXJhbV9tYXNrX2MoY29uc3Qgc25kX3BjbV9od19wYXJhbXNfdCAqcGFyYW1zLAorCQkJCQkgICAgIHNuZF9wY21faHdfcGFyYW1fdCB2YXIpCit7CisJcmV0dXJuIChjb25zdCBzbmRfbWFza190ICopaHdfcGFyYW1fbWFzaygoc25kX3BjbV9od19wYXJhbXNfdCopIHBhcmFtcywgdmFyKTsKK30KKworc3RhdGljIGlubGluZSBjb25zdCBzbmRfaW50ZXJ2YWxfdCAqaHdfcGFyYW1faW50ZXJ2YWxfYyhjb25zdCBzbmRfcGNtX2h3X3BhcmFtc190ICpwYXJhbXMsCisJCQkJCQkgICAgIHNuZF9wY21faHdfcGFyYW1fdCB2YXIpCit7CisJcmV0dXJuIChjb25zdCBzbmRfaW50ZXJ2YWxfdCAqKWh3X3BhcmFtX2ludGVydmFsKChzbmRfcGNtX2h3X3BhcmFtc190KikgcGFyYW1zLCB2YXIpOworfQorCisjZGVmaW5lIHBhcmFtc19hY2Nlc3MocCkgc25kX21hc2tfbWluKGh3X3BhcmFtX21hc2soKHApLCBTTkRSVl9QQ01fSFdfUEFSQU1fQUNDRVNTKSkKKyNkZWZpbmUgcGFyYW1zX2Zvcm1hdChwKSBzbmRfbWFza19taW4oaHdfcGFyYW1fbWFzaygocCksIFNORFJWX1BDTV9IV19QQVJBTV9GT1JNQVQpKQorI2RlZmluZSBwYXJhbXNfc3ViZm9ybWF0KHApIHNuZF9tYXNrX21pbihod19wYXJhbV9tYXNrKChwKSwgU05EUlZfUENNX0hXX1BBUkFNX1NVQkZPUk1BVCkpCisjZGVmaW5lIHBhcmFtc19jaGFubmVscyhwKSBod19wYXJhbV9pbnRlcnZhbCgocCksIFNORFJWX1BDTV9IV19QQVJBTV9DSEFOTkVMUyktPm1pbgorI2RlZmluZSBwYXJhbXNfcmF0ZShwKSBod19wYXJhbV9pbnRlcnZhbCgocCksIFNORFJWX1BDTV9IV19QQVJBTV9SQVRFKS0+bWluCisjZGVmaW5lIHBhcmFtc19wZXJpb2Rfc2l6ZShwKSBod19wYXJhbV9pbnRlcnZhbCgocCksIFNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RfU0laRSktPm1pbgorI2RlZmluZSBwYXJhbXNfcGVyaW9kX2J5dGVzKHApICgocGFyYW1zX3BlcmlvZF9zaXplKHApKnNuZF9wY21fZm9ybWF0X3BoeXNpY2FsX3dpZHRoKHBhcmFtc19mb3JtYXQocCkpKnBhcmFtc19jaGFubmVscyhwKSkvOCkKKyNkZWZpbmUgcGFyYW1zX3BlcmlvZHMocCkgaHdfcGFyYW1faW50ZXJ2YWwoKHApLCBTTkRSVl9QQ01fSFdfUEFSQU1fUEVSSU9EUyktPm1pbgorI2RlZmluZSBwYXJhbXNfYnVmZmVyX3NpemUocCkgaHdfcGFyYW1faW50ZXJ2YWwoKHApLCBTTkRSVl9QQ01fSFdfUEFSQU1fQlVGRkVSX1NJWkUpLT5taW4KKyNkZWZpbmUgcGFyYW1zX2J1ZmZlcl9ieXRlcyhwKSBod19wYXJhbV9pbnRlcnZhbCgocCksIFNORFJWX1BDTV9IV19QQVJBTV9CVUZGRVJfQllURVMpLT5taW4KKyNkZWZpbmUgcGFyYW1zX3RpY2tfdGltZShwKSBod19wYXJhbV9pbnRlcnZhbCgocCksIFNORFJWX1BDTV9IV19QQVJBTV9USUNLX1RJTUUpLT5taW4KKworCitpbnQgc25kX2ludGVydmFsX3JlZmluZShzbmRfaW50ZXJ2YWxfdCAqaSwgY29uc3Qgc25kX2ludGVydmFsX3QgKnYpOwordm9pZCBzbmRfaW50ZXJ2YWxfbXVsKGNvbnN0IHNuZF9pbnRlcnZhbF90ICphLCBjb25zdCBzbmRfaW50ZXJ2YWxfdCAqYiwgc25kX2ludGVydmFsX3QgKmMpOwordm9pZCBzbmRfaW50ZXJ2YWxfZGl2KGNvbnN0IHNuZF9pbnRlcnZhbF90ICphLCBjb25zdCBzbmRfaW50ZXJ2YWxfdCAqYiwgc25kX2ludGVydmFsX3QgKmMpOwordm9pZCBzbmRfaW50ZXJ2YWxfbXVsZGl2ayhjb25zdCBzbmRfaW50ZXJ2YWxfdCAqYSwgY29uc3Qgc25kX2ludGVydmFsX3QgKmIsIAorCQkJICB1bnNpZ25lZCBpbnQgaywgc25kX2ludGVydmFsX3QgKmMpOwordm9pZCBzbmRfaW50ZXJ2YWxfbXVsa2Rpdihjb25zdCBzbmRfaW50ZXJ2YWxfdCAqYSwgdW5zaWduZWQgaW50IGssCisJCQkgIGNvbnN0IHNuZF9pbnRlcnZhbF90ICpiLCBzbmRfaW50ZXJ2YWxfdCAqYyk7CitpbnQgc25kX2ludGVydmFsX2xpc3Qoc25kX2ludGVydmFsX3QgKmksIHVuc2lnbmVkIGludCBjb3VudCwgdW5zaWduZWQgaW50ICpsaXN0LCB1bnNpZ25lZCBpbnQgbWFzayk7CitpbnQgc25kX2ludGVydmFsX3JhdG51bShzbmRfaW50ZXJ2YWxfdCAqaSwKKwkJCXVuc2lnbmVkIGludCByYXRzX2NvdW50LCByYXRudW1fdCAqcmF0cywKKwkJCXVuc2lnbmVkIGludCAqbnVtcCwgdW5zaWduZWQgaW50ICpkZW5wKTsKKwordm9pZCBfc25kX3BjbV9od19wYXJhbXNfYW55KHNuZF9wY21faHdfcGFyYW1zX3QgKnBhcmFtcyk7Cit2b2lkIF9zbmRfcGNtX2h3X3BhcmFtX3NldGVtcHR5KHNuZF9wY21faHdfcGFyYW1zX3QgKnBhcmFtcywgc25kX3BjbV9od19wYXJhbV90IHZhcik7CitpbnQgc25kX3BjbV9od19wYXJhbV9taW4oc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtLCAKKwkJCSBzbmRfcGNtX2h3X3BhcmFtc190ICpwYXJhbXMsCisJCQkgc25kX3BjbV9od19wYXJhbV90IHZhciwKKwkJCSB1bnNpZ25lZCBpbnQgdmFsLCBpbnQgKmRpcik7CitpbnQgc25kX3BjbV9od19wYXJhbV9tYXgoc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtLCAKKwkJCSBzbmRfcGNtX2h3X3BhcmFtc190ICpwYXJhbXMsCisJCQkgc25kX3BjbV9od19wYXJhbV90IHZhciwKKwkJCSB1bnNpZ25lZCBpbnQgdmFsLCBpbnQgKmRpcik7CitpbnQgc25kX3BjbV9od19wYXJhbV9zZXRpbnRlZ2VyKHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSwgCisJCQkJc25kX3BjbV9od19wYXJhbXNfdCAqcGFyYW1zLAorCQkJCXNuZF9wY21faHdfcGFyYW1fdCB2YXIpOworaW50IHNuZF9wY21faHdfcGFyYW1fZmlyc3Qoc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtLCAKKwkJCSAgIHNuZF9wY21faHdfcGFyYW1zX3QgKnBhcmFtcywKKwkJCSAgIHNuZF9wY21faHdfcGFyYW1fdCB2YXIsIGludCAqZGlyKTsKK2ludCBzbmRfcGNtX2h3X3BhcmFtX2xhc3Qoc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtLCAKKwkJCSAgc25kX3BjbV9od19wYXJhbXNfdCAqcGFyYW1zLAorCQkJICBzbmRfcGNtX2h3X3BhcmFtX3QgdmFyLCBpbnQgKmRpcik7CitpbnQgc25kX3BjbV9od19wYXJhbV9uZWFyKHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSwgCisJCQkgIHNuZF9wY21faHdfcGFyYW1zX3QgKnBhcmFtcywKKwkJCSAgc25kX3BjbV9od19wYXJhbV90IHZhciwgCisJCQkgIHVuc2lnbmVkIGludCB2YWwsIGludCAqZGlyKTsKK2ludCBzbmRfcGNtX2h3X3BhcmFtX3NldChzbmRfcGNtX3N1YnN0cmVhbV90ICpwY20sCisJCQkgc25kX3BjbV9od19wYXJhbXNfdCAqcGFyYW1zLAorCQkJIHNuZF9wY21faHdfcGFyYW1fdCB2YXIsCisJCQkgdW5zaWduZWQgaW50IHZhbCwgaW50IGRpcik7CitpbnQgc25kX3BjbV9od19wYXJhbXNfY2hvb3NlKHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSwgc25kX3BjbV9od19wYXJhbXNfdCAqcGFyYW1zKTsKKworaW50IHNuZF9wY21faHdfcmVmaW5lKHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSwgc25kX3BjbV9od19wYXJhbXNfdCAqcGFyYW1zKTsKK2ludCBzbmRfcGNtX2h3X3BhcmFtcyhzbmRfcGNtX3N1YnN0cmVhbV90ICpzdWJzdHJlYW0sIHNuZF9wY21faHdfcGFyYW1zX3QgKnBhcmFtcyk7CisKK2ludCBzbmRfcGNtX2h3X2NvbnN0cmFpbnRzX2luaXQoc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtKTsKK2ludCBzbmRfcGNtX2h3X2NvbnN0cmFpbnRzX2NvbXBsZXRlKHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSk7CisKK2ludCBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbWFzayhzbmRfcGNtX3J1bnRpbWVfdCAqcnVudGltZSwgc25kX3BjbV9od19wYXJhbV90IHZhciwKKwkJCSAgICAgICB1X2ludDMyX3QgbWFzayk7CitpbnQgc25kX3BjbV9od19jb25zdHJhaW50X21hc2s2NChzbmRfcGNtX3J1bnRpbWVfdCAqcnVudGltZSwgc25kX3BjbV9od19wYXJhbV90IHZhciwKKwkJCQkgdV9pbnQ2NF90IG1hc2spOworaW50IHNuZF9wY21faHdfY29uc3RyYWludF9taW5tYXgoc25kX3BjbV9ydW50aW1lX3QgKnJ1bnRpbWUsIHNuZF9wY21faHdfcGFyYW1fdCB2YXIsCisJCQkJIHVuc2lnbmVkIGludCBtaW4sIHVuc2lnbmVkIGludCBtYXgpOworaW50IHNuZF9wY21faHdfY29uc3RyYWludF9pbnRlZ2VyKHNuZF9wY21fcnVudGltZV90ICpydW50aW1lLCBzbmRfcGNtX2h3X3BhcmFtX3QgdmFyKTsKK2ludCBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbGlzdChzbmRfcGNtX3J1bnRpbWVfdCAqcnVudGltZSwgCisJCQkgICAgICAgdW5zaWduZWQgaW50IGNvbmQsCisJCQkgICAgICAgc25kX3BjbV9od19wYXJhbV90IHZhciwKKwkJCSAgICAgICBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbGlzdF90ICpsKTsKK2ludCBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfcmF0bnVtcyhzbmRfcGNtX3J1bnRpbWVfdCAqcnVudGltZSwgCisJCQkJICB1bnNpZ25lZCBpbnQgY29uZCwKKwkJCQkgIHNuZF9wY21faHdfcGFyYW1fdCB2YXIsCisJCQkJICBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfcmF0bnVtc190ICpyKTsKK2ludCBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfcmF0ZGVucyhzbmRfcGNtX3J1bnRpbWVfdCAqcnVudGltZSwgCisJCQkJICB1bnNpZ25lZCBpbnQgY29uZCwKKwkJCQkgIHNuZF9wY21faHdfcGFyYW1fdCB2YXIsCisJCQkJICBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfcmF0ZGVuc190ICpyKTsKK2ludCBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbXNiaXRzKHNuZF9wY21fcnVudGltZV90ICpydW50aW1lLCAKKwkJCQkgdW5zaWduZWQgaW50IGNvbmQsCisJCQkJIHVuc2lnbmVkIGludCB3aWR0aCwKKwkJCQkgdW5zaWduZWQgaW50IG1zYml0cyk7CitpbnQgc25kX3BjbV9od19jb25zdHJhaW50X3N0ZXAoc25kX3BjbV9ydW50aW1lX3QgKnJ1bnRpbWUsCisJCQkgICAgICAgdW5zaWduZWQgaW50IGNvbmQsCisJCQkgICAgICAgc25kX3BjbV9od19wYXJhbV90IHZhciwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIHN0ZXApOworaW50IHNuZF9wY21faHdfY29uc3RyYWludF9wb3cyKHNuZF9wY21fcnVudGltZV90ICpydW50aW1lLAorCQkJICAgICAgIHVuc2lnbmVkIGludCBjb25kLAorCQkJICAgICAgIHNuZF9wY21faHdfcGFyYW1fdCB2YXIpOworaW50IHNuZF9wY21faHdfcnVsZV9hZGQoc25kX3BjbV9ydW50aW1lX3QgKnJ1bnRpbWUsCisJCQl1bnNpZ25lZCBpbnQgY29uZCwKKwkJCWludCB2YXIsCisJCQlzbmRfcGNtX2h3X3J1bGVfZnVuY190IGZ1bmMsIHZvaWQgKnByaXZhdGUsCisJCQlpbnQgZGVwLCAuLi4pOworCitpbnQgc25kX3BjbV9mb3JtYXRfc2lnbmVkKHNuZF9wY21fZm9ybWF0X3QgZm9ybWF0KTsKK2ludCBzbmRfcGNtX2Zvcm1hdF91bnNpZ25lZChzbmRfcGNtX2Zvcm1hdF90IGZvcm1hdCk7CitpbnQgc25kX3BjbV9mb3JtYXRfbGluZWFyKHNuZF9wY21fZm9ybWF0X3QgZm9ybWF0KTsKK2ludCBzbmRfcGNtX2Zvcm1hdF9saXR0bGVfZW5kaWFuKHNuZF9wY21fZm9ybWF0X3QgZm9ybWF0KTsKK2ludCBzbmRfcGNtX2Zvcm1hdF9iaWdfZW5kaWFuKHNuZF9wY21fZm9ybWF0X3QgZm9ybWF0KTsKK2ludCBzbmRfcGNtX2Zvcm1hdF93aWR0aChzbmRfcGNtX2Zvcm1hdF90IGZvcm1hdCk7CQkJLyogaW4gYml0cyAqLworaW50IHNuZF9wY21fZm9ybWF0X3BoeXNpY2FsX3dpZHRoKHNuZF9wY21fZm9ybWF0X3QgZm9ybWF0KTsJCS8qIGluIGJpdHMgKi8KK2NvbnN0IHVuc2lnbmVkIGNoYXIgKnNuZF9wY21fZm9ybWF0X3NpbGVuY2VfNjQoc25kX3BjbV9mb3JtYXRfdCBmb3JtYXQpOworaW50IHNuZF9wY21fZm9ybWF0X3NldF9zaWxlbmNlKHNuZF9wY21fZm9ybWF0X3QgZm9ybWF0LCB2b2lkICpidWYsIHVuc2lnbmVkIGludCBmcmFtZXMpOworc25kX3BjbV9mb3JtYXRfdCBzbmRfcGNtX2J1aWxkX2xpbmVhcl9mb3JtYXQoaW50IHdpZHRoLCBpbnQgdW5zaWduZCwgaW50IGJpZ19lbmRpYW4pOworY29uc3QgY2hhciAqc25kX3BjbV9mb3JtYXRfbmFtZShzbmRfcGNtX2Zvcm1hdF90IGZvcm1hdCk7CisKK3ZvaWQgc25kX3BjbV9zZXRfb3BzKHNuZF9wY21fdCAqIHBjbSwgaW50IGRpcmVjdGlvbiwgc25kX3BjbV9vcHNfdCAqb3BzKTsKK3ZvaWQgc25kX3BjbV9zZXRfc3luYyhzbmRfcGNtX3N1YnN0cmVhbV90ICogc3Vic3RyZWFtKTsKK2ludCBzbmRfcGNtX2xpYl9pbnRlcmxlYXZlX2xlbihzbmRfcGNtX3N1YnN0cmVhbV90ICpzdWJzdHJlYW0pOworaW50IHNuZF9wY21fbGliX2lvY3RsKHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSwKKwkJICAgICAgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKTsgICAgICAgICAgICAgICAgICAgICAgCitpbnQgc25kX3BjbV91cGRhdGVfaHdfcHRyKHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSk7CitpbnQgc25kX3BjbV9wbGF5YmFja194cnVuX2NoZWNrKHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSk7CitpbnQgc25kX3BjbV9jYXB0dXJlX3hydW5fY2hlY2soc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtKTsKK2ludCBzbmRfcGNtX3BsYXliYWNrX3hydW5fYXNhcChzbmRfcGNtX3N1YnN0cmVhbV90ICpzdWJzdHJlYW0pOworaW50IHNuZF9wY21fY2FwdHVyZV94cnVuX2FzYXAoc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtKTsKK3ZvaWQgc25kX3BjbV9wbGF5YmFja19zaWxlbmNlKHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSwgc25kX3BjbV91ZnJhbWVzX3QgbmV3X2h3X3B0cik7Cit2b2lkIHNuZF9wY21fdGlja19wcmVwYXJlKHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSk7Cit2b2lkIHNuZF9wY21fdGlja19zZXQoc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtLCB1bnNpZ25lZCBsb25nIHRpY2tzKTsKK3ZvaWQgc25kX3BjbV90aWNrX2VsYXBzZWQoc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtKTsKK3ZvaWQgc25kX3BjbV9wZXJpb2RfZWxhcHNlZChzbmRfcGNtX3N1YnN0cmVhbV90ICpzdWJzdHJlYW0pOworc25kX3BjbV9zZnJhbWVzX3Qgc25kX3BjbV9saWJfd3JpdGUoc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtLAorCQkJCSAgICBjb25zdCB2b2lkIF9fdXNlciAqYnVmLAorCQkJCSAgICBzbmRfcGNtX3VmcmFtZXNfdCBmcmFtZXMpOworc25kX3BjbV9zZnJhbWVzX3Qgc25kX3BjbV9saWJfcmVhZChzbmRfcGNtX3N1YnN0cmVhbV90ICpzdWJzdHJlYW0sCisJCQkJICAgdm9pZCBfX3VzZXIgKmJ1Ziwgc25kX3BjbV91ZnJhbWVzX3QgZnJhbWVzKTsKK3NuZF9wY21fc2ZyYW1lc190IHNuZF9wY21fbGliX3dyaXRldihzbmRfcGNtX3N1YnN0cmVhbV90ICpzdWJzdHJlYW0sCisJCQkJICAgICB2b2lkIF9fdXNlciAqKmJ1ZnMsIHNuZF9wY21fdWZyYW1lc190IGZyYW1lcyk7CitzbmRfcGNtX3NmcmFtZXNfdCBzbmRfcGNtX2xpYl9yZWFkdihzbmRfcGNtX3N1YnN0cmVhbV90ICpzdWJzdHJlYW0sCisJCQkJICAgIHZvaWQgX191c2VyICoqYnVmcywgc25kX3BjbV91ZnJhbWVzX3QgZnJhbWVzKTsKKworaW50IHNuZF9wY21fbGltaXRfaHdfcmF0ZXMoc25kX3BjbV9ydW50aW1lX3QgKnJ1bnRpbWUpOworCitzdGF0aWMgaW5saW5lIHZvaWQgc25kX3BjbV9zZXRfcnVudGltZV9idWZmZXIoc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtLAorCQkJCQkgICAgICBzdHJ1Y3Qgc25kX2RtYV9idWZmZXIgKmJ1ZnApCit7CisJc25kX3BjbV9ydW50aW1lX3QgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJaWYgKGJ1ZnApIHsKKwkJcnVudGltZS0+ZG1hX2J1ZmZlcl9wID0gYnVmcDsKKwkJcnVudGltZS0+ZG1hX2FyZWEgPSBidWZwLT5hcmVhOworCQlydW50aW1lLT5kbWFfYWRkciA9IGJ1ZnAtPmFkZHI7CisJCXJ1bnRpbWUtPmRtYV9ieXRlcyA9IGJ1ZnAtPmJ5dGVzOworCX0gZWxzZSB7CisJCXJ1bnRpbWUtPmRtYV9idWZmZXJfcCA9IE5VTEw7CisJCXJ1bnRpbWUtPmRtYV9hcmVhID0gTlVMTDsKKwkJcnVudGltZS0+ZG1hX2FkZHIgPSAwOworCQlydW50aW1lLT5kbWFfYnl0ZXMgPSAwOworCX0KK30KKworLyoKKyAqICBUaW1lciBpbnRlcmZhY2UKKyAqLworCit2b2lkIHNuZF9wY21fdGltZXJfcmVzb2x1dGlvbl9jaGFuZ2Uoc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtKTsKK3ZvaWQgc25kX3BjbV90aW1lcl9pbml0KHNuZF9wY21fc3Vic3RyZWFtX3QgKiBzdWJzdHJlYW0pOwordm9pZCBzbmRfcGNtX3RpbWVyX2RvbmUoc25kX3BjbV9zdWJzdHJlYW1fdCAqIHN1YnN0cmVhbSk7CisKKy8qCisgKiAgTWVtb3J5CisgKi8KKworaW50IHNuZF9wY21fbGliX3ByZWFsbG9jYXRlX2ZyZWUoc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtKTsKK2ludCBzbmRfcGNtX2xpYl9wcmVhbGxvY2F0ZV9mcmVlX2Zvcl9hbGwoc25kX3BjbV90ICpwY20pOworaW50IHNuZF9wY21fbGliX3ByZWFsbG9jYXRlX3BhZ2VzKHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSwKKwkJCQkgIGludCB0eXBlLCBzdHJ1Y3QgZGV2aWNlICpkYXRhLAorCQkJCSAgc2l6ZV90IHNpemUsIHNpemVfdCBtYXgpOworaW50IHNuZF9wY21fbGliX3ByZWFsbG9jYXRlX3BhZ2VzX2Zvcl9hbGwoc25kX3BjbV90ICpwY20sCisJCQkJCSAgaW50IHR5cGUsIHZvaWQgKmRhdGEsCisJCQkJCSAgc2l6ZV90IHNpemUsIHNpemVfdCBtYXgpOworaW50IHNuZF9wY21fbGliX21hbGxvY19wYWdlcyhzbmRfcGNtX3N1YnN0cmVhbV90ICpzdWJzdHJlYW0sIHNpemVfdCBzaXplKTsKK2ludCBzbmRfcGNtX2xpYl9mcmVlX3BhZ2VzKHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSk7CisKKyNkZWZpbmUgc25kX3BjbV9zdWJzdHJlYW1fc2didWYoc3Vic3RyZWFtKSAoKHN1YnN0cmVhbSktPnJ1bnRpbWUtPmRtYV9idWZmZXJfcC0+cHJpdmF0ZV9kYXRhKQorI2RlZmluZSBzbmRfcGNtX3NnYnVmX3BhZ2VzKHNpemUpIHNuZF9zZ2J1Zl9hbGlnbmVkX3BhZ2VzKHNpemUpCisjZGVmaW5lIHNuZF9wY21fc2didWZfZ2V0X2FkZHIoc2didWYsb2ZzKSBzbmRfc2didWZfZ2V0X2FkZHIoc2didWYsb2ZzKQorc3RydWN0IHBhZ2UgKnNuZF9wY21fc2didWZfb3BzX3BhZ2Uoc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtLCB1bnNpZ25lZCBsb25nIG9mZnNldCk7CisKKy8qIGhhbmRsZSBtbWFwIGNvdW50ZXIgLSBQQ00gbW1hcCBjYWxsYmFjayBzaG91bGQgaGFuZGxlIHRoaXMgY291bnRlciBwcm9wZXJseSAqLworc3RhdGljIGlubGluZSB2b2lkIHNuZF9wY21fbW1hcF9kYXRhX29wZW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICphcmVhKQoreworCXNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSA9IChzbmRfcGNtX3N1YnN0cmVhbV90ICopYXJlYS0+dm1fcHJpdmF0ZV9kYXRhOworCWF0b21pY19pbmMoJnN1YnN0cmVhbS0+cnVudGltZS0+bW1hcF9jb3VudCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbmRfcGNtX21tYXBfZGF0YV9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmFyZWEpCit7CisJc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtID0gKHNuZF9wY21fc3Vic3RyZWFtX3QgKilhcmVhLT52bV9wcml2YXRlX2RhdGE7CisJYXRvbWljX2RlYygmc3Vic3RyZWFtLT5ydW50aW1lLT5tbWFwX2NvdW50KTsKK30KKworLyogbW1hcCBmb3IgaW8tbWVtb3J5IGFyZWEgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19YODYpIHx8IGRlZmluZWQoQ09ORklHX1BQQykgfHwgZGVmaW5lZChDT05GSUdfQUxQSEEpCisjZGVmaW5lIFNORFJWX1BDTV9JTkZPX01NQVBfSU9NRU0JU05EUlZfUENNX0lORk9fTU1BUAoraW50IHNuZF9wY21fbGliX21tYXBfaW9tZW0oc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmFyZWEpOworI2Vsc2UKKyNkZWZpbmUgU05EUlZfUENNX0lORk9fTU1BUF9JT01FTQkwCisjZGVmaW5lIHNuZF9wY21fbGliX21tYXBfaW9tZW0JTlVMTAorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbmRfcGNtX2xpbWl0X2lzYV9kbWFfc2l6ZShpbnQgZG1hLCBzaXplX3QgKm1heCkKK3sKKwkqbWF4ID0gZG1hIDwgNCA/IDY0ICogMTAyNCA6IDEyOCAqIDEwMjQ7Cit9CisKKy8qCisgKiAgTWlzYworICovCisKKyNkZWZpbmUgU05EUlZfUENNX0RFRkFVTFRfQ09OX1NQRElGCShJRUM5NThfQUVTMF9DT05fRU1QSEFTSVNfTk9ORXxcCisJCQkJCSAoSUVDOTU4X0FFUzFfQ09OX09SSUdJTkFMPDw4KXxcCisJCQkJCSAoSUVDOTU4X0FFUzFfQ09OX1BDTV9DT0RFUjw8OCl8XAorCQkJCQkgKElFQzk1OF9BRVMzX0NPTl9GU180ODAwMDw8MjQpKQorCisjZW5kaWYgLyogX19TT1VORF9QQ01fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9wY21fb3NzLmggYi9pbmNsdWRlL3NvdW5kL3BjbV9vc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTg3Mjg1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9zb3VuZC9wY21fb3NzLmgKQEAgLTAsMCArMSw4NyBAQAorI2lmbmRlZiBfX1NPVU5EX1BDTV9PU1NfSAorI2RlZmluZSBfX1NPVU5EX1BDTV9PU1NfSAorCisvKgorICogIERpZ2l0YWwgQXVkaW8gKFBDTSkgLSBPU1MgY29tcGF0aWJpbGl0eSBhYnN0cmFjdCBsYXllcgorICogIENvcHlyaWdodCAoYykgYnkgSmFyb3NsYXYgS3lzZWxhIDxwZXJleEBzdXNlLmN6PgorICoKKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKgorICovCisKK3R5cGVkZWYgc3RydWN0IF9zbmRfcGNtX3BsdWdpbiBzbmRfcGNtX3BsdWdpbl90OwordHlwZWRlZiBzdHJ1Y3QgX3NuZF9wY21fb3NzX3NldHVwIHNuZF9wY21fb3NzX3NldHVwX3Q7CisKK3N0cnVjdCBfc25kX3BjbV9vc3Nfc2V0dXAgeworCWNoYXIgKnRhc2tfbmFtZTsKKwl1bnNpZ25lZCBpbnQgZGlzYWJsZToxLAorCQkgICAgIGRpcmVjdDoxLAorCQkgICAgIGJsb2NrOjEsCisJCSAgICAgbm9uYmxvY2s6MSwKKwkJICAgICBwYXJ0aWFsZnJhZzoxLAorCQkgICAgIG5vc2lsZW5jZToxOworCXVuc2lnbmVkIGludCBwZXJpb2RzOworCXVuc2lnbmVkIGludCBwZXJpb2Rfc2l6ZTsKKwlzbmRfcGNtX29zc19zZXR1cF90ICpuZXh0OworfTsKKwordHlwZWRlZiBzdHJ1Y3QgX3NuZF9wY21fb3NzX3J1bnRpbWUgeworCXVuc2lnbmVkIHBhcmFtczogMSwJCQkvKiBmb3JtYXQvcGFyYW1ldGVyIGNoYW5nZSAqLworCQkgcHJlcGFyZTogMSwJCQkvKiBuZWVkIHRvIHByZXBhcmUgdGhlIG9wZXJhdGlvbiAqLworCQkgdHJpZ2dlcjogMSwJCQkvKiB0cmlnZ2VyIGZsYWcgKi8KKwkJIHN5bmNfdHJpZ2dlcjogMTsJCS8qIHN5bmMgdHJpZ2dlciBmbGFnICovCisJaW50IHJhdGU7CQkJCS8qIHJlcXVlc3RlZCByYXRlICovCisJaW50IGZvcm1hdDsJCQkJLyogcmVxdWVzdGVkIE9TUyBmb3JtYXQgKi8KKwl1bnNpZ25lZCBpbnQgY2hhbm5lbHM7CQkJLyogcmVxdWVzdGVkIGNoYW5uZWxzICovCisJdW5zaWduZWQgaW50IGZyYWdzaGlmdDsKKwl1bnNpZ25lZCBpbnQgbWF4ZnJhZ3M7CisJdW5zaWduZWQgaW50IHN1YmRpdmlzaW9uOwkJLyogcmVxdWVzdGVkIHN1YmRpdmlzaW9uICovCisJc2l6ZV90IHBlcmlvZF9ieXRlczsJCQkvKiByZXF1ZXN0ZWQgcGVyaW9kIHNpemUgKi8KKwlzaXplX3QgcGVyaW9kX2ZyYW1lczsJCQkvKiBwZXJpb2QgZnJhbWVzIGZvciBwb2xsICovCisJc2l6ZV90IHBlcmlvZF9wdHI7CQkJLyogYWN0dWFsIHdyaXRlIHBvaW50ZXIgdG8gcGVyaW9kICovCisJdW5zaWduZWQgaW50IHBlcmlvZHM7CisJc2l6ZV90IGJ1ZmZlcl9ieXRlczsJCQkvKiByZXF1ZXN0ZWQgYnVmZmVyIHNpemUgKi8KKwlzaXplX3QgYnl0ZXM7CQkJCS8qIHRvdGFsICMgYnl0ZXMgcHJvY2Vzc2VkICovCisJc2l6ZV90IG1tYXBfYnl0ZXM7CisJY2hhciAqYnVmZmVyOwkJCQkvKiB2bWFsbG9jYXRlZCBwZXJpb2QgKi8KKwlzaXplX3QgYnVmZmVyX3VzZWQ7CQkJLyogdXNlZCBsZW5ndGggZnJvbSBwZXJpb2QgYnVmZmVyICovCisJc25kX3BjbV9wbHVnaW5fdCAqcGx1Z2luX2ZpcnN0OworCXNuZF9wY21fcGx1Z2luX3QgKnBsdWdpbl9sYXN0OworCXVuc2lnbmVkIGludCBwcmV2X2h3X3B0cl9pbnRlcnJ1cHQ7Cit9IHNuZF9wY21fb3NzX3J1bnRpbWVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgX3NuZF9wY21fb3NzX2ZpbGUgeworCXNuZF9wY21fc3Vic3RyZWFtX3QgKnN0cmVhbXNbMl07Cit9IHNuZF9wY21fb3NzX2ZpbGVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgX3NuZF9wY21fb3NzX3N1YnN0cmVhbSB7CisJdW5zaWduZWQgb3NzOiAxOwkJCS8qIG9zcyBtb2RlICovCisJc25kX3BjbV9vc3Nfc2V0dXBfdCAqc2V0dXA7CQkvKiBhY3RpdmUgc2V0dXAgKi8KKwlzbmRfcGNtX29zc19maWxlX3QgKmZpbGU7Cit9IHNuZF9wY21fb3NzX3N1YnN0cmVhbV90OworCit0eXBlZGVmIHN0cnVjdCBfc25kX3BjbV9vc3Nfc3RyZWFtIHsKKwlzbmRfcGNtX29zc19zZXR1cF90ICpzZXR1cF9saXN0OwkvKiBzZXR1cCBsaXN0ICovCisgICAgICAgIHN0cnVjdCBzZW1hcGhvcmUgc2V0dXBfbXV0ZXg7CisJc25kX2luZm9fZW50cnlfdCAqcHJvY19lbnRyeTsKK30gc25kX3BjbV9vc3Nfc3RyZWFtX3Q7CisKK3R5cGVkZWYgc3RydWN0IF9zbmRfcGNtX29zcyB7CisJaW50IHJlZzsKKwl1bnNpZ25lZCBpbnQgcmVnX21hc2s7Cit9IHNuZF9wY21fb3NzX3Q7CisKKyNlbmRpZiAvKiBfX1NPVU5EX1BDTV9PU1NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9wY21fcGFyYW1zLmggYi9pbmNsdWRlL3NvdW5kL3BjbV9wYXJhbXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGIwZTkyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9zb3VuZC9wY21fcGFyYW1zLmgKQEAgLTAsMCArMSwzNjYgQEAKKyNpZm5kZWYgX19TT1VORF9QQ01fUEFSQU1TX0gKKyNkZWZpbmUgX19TT1VORF9QQ01fUEFSQU1TX0gKKworLyoKKyAqICBQQ00gcGFyYW1zIGhlbHBlcnMKKyAqICBDb3B5cmlnaHQgKGMpIGJ5IEFicmFtbyBCYWduYXJhIDxhYnJhbW9AYWxzYS1wcm9qZWN0Lm9yZz4KKyAqCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICoKKyAqLworCitleHRlcm4gaW50IHNuZF9wY21faHdfcGFyYW1fbWFzayhzbmRfcGNtX3N1YnN0cmVhbV90ICpwY20sIHNuZF9wY21faHdfcGFyYW1zX3QgKnBhcmFtcywKKwkJCQkgc25kX3BjbV9od19wYXJhbV90IHZhciwgY29uc3Qgc25kX21hc2tfdCAqdmFsKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgc25kX3BjbV9od19wYXJhbV92YWx1ZV9taW4oY29uc3Qgc25kX3BjbV9od19wYXJhbXNfdCAqcGFyYW1zLAorCQkJCQkgICAgICAgc25kX3BjbV9od19wYXJhbV90IHZhciwgaW50ICpkaXIpOworZXh0ZXJuIHVuc2lnbmVkIGludCBzbmRfcGNtX2h3X3BhcmFtX3ZhbHVlX21heChjb25zdCBzbmRfcGNtX2h3X3BhcmFtc190ICpwYXJhbXMsCisJCQkJCSAgICAgICBzbmRfcGNtX2h3X3BhcmFtX3QgdmFyLCBpbnQgKmRpcik7CitleHRlcm4gaW50IF9zbmRfcGNtX2h3X3BhcmFtX21pbihzbmRfcGNtX2h3X3BhcmFtc190ICpwYXJhbXMsCisJCQkJIHNuZF9wY21faHdfcGFyYW1fdCB2YXIsIHVuc2lnbmVkIGludCB2YWwsIGludCBkaXIpOworZXh0ZXJuIGludCBfc25kX3BjbV9od19wYXJhbV9zZXRpbnRlZ2VyKHNuZF9wY21faHdfcGFyYW1zX3QgKnBhcmFtcywKKwkJCQkJc25kX3BjbV9od19wYXJhbV90IHZhcik7CitleHRlcm4gaW50IF9zbmRfcGNtX2h3X3BhcmFtX3NldChzbmRfcGNtX2h3X3BhcmFtc190ICpwYXJhbXMsCisJCQkJIHNuZF9wY21faHdfcGFyYW1fdCB2YXIsIHVuc2lnbmVkIGludCB2YWwsIGludCBkaXIpOworCisvKiBUbyBzaGFyZSB0aGUgc2FtZSBjb2RlIHdlIGhhdmUgIGFsc2EtbGliICovCisjZGVmaW5lIElOTElORSBzdGF0aWMgaW5saW5lCisjZGVmaW5lIGFzc2VydChhKSAodm9pZCkoYSkKKworI2RlZmluZSBTTkRSVl9NQVNLX0JJVFMJNjQJLyogd2UgdXNlIHNvIGZhciA2NGJpdHMgb25seSAqLworI2RlZmluZSBTTkRSVl9NQVNLX1NJWkUJKFNORFJWX01BU0tfQklUUyAvIDMyKQorI2RlZmluZSBNQVNLX09GUyhpKQkoKGkpID4+IDUpCisjZGVmaW5lIE1BU0tfQklUKGkpCSgxVSA8PCAoKGkpICYgMzEpKQorCitJTkxJTkUgdW5zaWduZWQgaW50IGxkMih1X2ludDMyX3QgdikKK3sKKyAgICAgICAgdW5zaWduZWQgciA9IDA7CisKKyAgICAgICAgaWYgKHYgPj0gMHgxMDAwMCkgeworICAgICAgICAgICAgICAgIHYgPj49IDE2OworICAgICAgICAgICAgICAgIHIgKz0gMTY7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHYgPj0gMHgxMDApIHsKKyAgICAgICAgICAgICAgICB2ID4+PSA4OworICAgICAgICAgICAgICAgIHIgKz0gODsKKyAgICAgICAgfQorICAgICAgICBpZiAodiA+PSAweDEwKSB7CisgICAgICAgICAgICAgICAgdiA+Pj0gNDsKKyAgICAgICAgICAgICAgICByICs9IDQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHYgPj0gNCkgeworICAgICAgICAgICAgICAgIHYgPj49IDI7CisgICAgICAgICAgICAgICAgciArPSAyOworICAgICAgICB9CisgICAgICAgIGlmICh2ID49IDIpCisgICAgICAgICAgICAgICAgcisrOworICAgICAgICByZXR1cm4gcjsKK30KKworSU5MSU5FIHNpemVfdCBzbmRfbWFza19zaXplb2Yodm9pZCkKK3sKKwlyZXR1cm4gc2l6ZW9mKHNuZF9tYXNrX3QpOworfQorCitJTkxJTkUgdm9pZCBzbmRfbWFza19ub25lKHNuZF9tYXNrX3QgKm1hc2spCit7CisJbWVtc2V0KG1hc2ssIDAsIHNpemVvZigqbWFzaykpOworfQorCitJTkxJTkUgdm9pZCBzbmRfbWFza19hbnkoc25kX21hc2tfdCAqbWFzaykKK3sKKwltZW1zZXQobWFzaywgMHhmZiwgU05EUlZfTUFTS19TSVpFICogc2l6ZW9mKHVfaW50MzJfdCkpOworfQorCitJTkxJTkUgaW50IHNuZF9tYXNrX2VtcHR5KGNvbnN0IHNuZF9tYXNrX3QgKm1hc2spCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IFNORFJWX01BU0tfU0laRTsgaSsrKQorCQlpZiAobWFzay0+Yml0c1tpXSkKKwkJCXJldHVybiAwOworCXJldHVybiAxOworfQorCitJTkxJTkUgdW5zaWduZWQgaW50IHNuZF9tYXNrX21pbihjb25zdCBzbmRfbWFza190ICptYXNrKQoreworCWludCBpOworCWFzc2VydCghc25kX21hc2tfZW1wdHkobWFzaykpOworCWZvciAoaSA9IDA7IGkgPCBTTkRSVl9NQVNLX1NJWkU7IGkrKykgeworCQlpZiAobWFzay0+Yml0c1tpXSkKKwkJCXJldHVybiBmZnMobWFzay0+Yml0c1tpXSkgLSAxICsgKGkgPDwgNSk7CisJfQorCXJldHVybiAwOworfQorCitJTkxJTkUgdW5zaWduZWQgaW50IHNuZF9tYXNrX21heChjb25zdCBzbmRfbWFza190ICptYXNrKQoreworCWludCBpOworCWFzc2VydCghc25kX21hc2tfZW1wdHkobWFzaykpOworCWZvciAoaSA9IFNORFJWX01BU0tfU0laRSAtIDE7IGkgPj0gMDsgaS0tKSB7CisJCWlmIChtYXNrLT5iaXRzW2ldKQorCQkJcmV0dXJuIGxkMihtYXNrLT5iaXRzW2ldKSArIChpIDw8IDUpOworCX0KKwlyZXR1cm4gMDsKK30KKworSU5MSU5FIHZvaWQgc25kX21hc2tfc2V0KHNuZF9tYXNrX3QgKm1hc2ssIHVuc2lnbmVkIGludCB2YWwpCit7CisJYXNzZXJ0KHZhbCA8PSBTTkRSVl9NQVNLX0JJVFMpOworCW1hc2stPmJpdHNbTUFTS19PRlModmFsKV0gfD0gTUFTS19CSVQodmFsKTsKK30KKworSU5MSU5FIHZvaWQgc25kX21hc2tfcmVzZXQoc25kX21hc2tfdCAqbWFzaywgdW5zaWduZWQgaW50IHZhbCkKK3sKKwlhc3NlcnQodmFsIDw9IFNORFJWX01BU0tfQklUUyk7CisJbWFzay0+Yml0c1tNQVNLX09GUyh2YWwpXSAmPSB+TUFTS19CSVQodmFsKTsKK30KKworSU5MSU5FIHZvaWQgc25kX21hc2tfc2V0X3JhbmdlKHNuZF9tYXNrX3QgKm1hc2ssIHVuc2lnbmVkIGludCBmcm9tLCB1bnNpZ25lZCBpbnQgdG8pCit7CisJdW5zaWduZWQgaW50IGk7CisJYXNzZXJ0KHRvIDw9IFNORFJWX01BU0tfQklUUyAmJiBmcm9tIDw9IHRvKTsKKwlmb3IgKGkgPSBmcm9tOyBpIDw9IHRvOyBpKyspCisJCW1hc2stPmJpdHNbTUFTS19PRlMoaSldIHw9IE1BU0tfQklUKGkpOworfQorCitJTkxJTkUgdm9pZCBzbmRfbWFza19yZXNldF9yYW5nZShzbmRfbWFza190ICptYXNrLCB1bnNpZ25lZCBpbnQgZnJvbSwgdW5zaWduZWQgaW50IHRvKQoreworCXVuc2lnbmVkIGludCBpOworCWFzc2VydCh0byA8PSBTTkRSVl9NQVNLX0JJVFMgJiYgZnJvbSA8PSB0byk7CisJZm9yIChpID0gZnJvbTsgaSA8PSB0bzsgaSsrKQorCQltYXNrLT5iaXRzW01BU0tfT0ZTKGkpXSAmPSB+TUFTS19CSVQoaSk7Cit9CisKK0lOTElORSB2b2lkIHNuZF9tYXNrX2xlYXZlKHNuZF9tYXNrX3QgKm1hc2ssIHVuc2lnbmVkIGludCB2YWwpCit7CisJdW5zaWduZWQgaW50IHY7CisJYXNzZXJ0KHZhbCA8PSBTTkRSVl9NQVNLX0JJVFMpOworCXYgPSBtYXNrLT5iaXRzW01BU0tfT0ZTKHZhbCldICYgTUFTS19CSVQodmFsKTsKKwlzbmRfbWFza19ub25lKG1hc2spOworCW1hc2stPmJpdHNbTUFTS19PRlModmFsKV0gPSB2OworfQorCitJTkxJTkUgdm9pZCBzbmRfbWFza19pbnRlcnNlY3Qoc25kX21hc2tfdCAqbWFzaywgY29uc3Qgc25kX21hc2tfdCAqdikKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgU05EUlZfTUFTS19TSVpFOyBpKyspCisJCW1hc2stPmJpdHNbaV0gJj0gdi0+Yml0c1tpXTsKK30KKworSU5MSU5FIGludCBzbmRfbWFza19lcShjb25zdCBzbmRfbWFza190ICptYXNrLCBjb25zdCBzbmRfbWFza190ICp2KQoreworCXJldHVybiAhIG1lbWNtcChtYXNrLCB2LCBTTkRSVl9NQVNLX1NJWkUgKiBzaXplb2YodV9pbnQzMl90KSk7Cit9CisKK0lOTElORSB2b2lkIHNuZF9tYXNrX2NvcHkoc25kX21hc2tfdCAqbWFzaywgY29uc3Qgc25kX21hc2tfdCAqdikKK3sKKwkqbWFzayA9ICp2OworfQorCitJTkxJTkUgaW50IHNuZF9tYXNrX3Rlc3QoY29uc3Qgc25kX21hc2tfdCAqbWFzaywgdW5zaWduZWQgaW50IHZhbCkKK3sKKwlhc3NlcnQodmFsIDw9IFNORFJWX01BU0tfQklUUyk7CisJcmV0dXJuIG1hc2stPmJpdHNbTUFTS19PRlModmFsKV0gJiBNQVNLX0JJVCh2YWwpOworfQorCitJTkxJTkUgaW50IHNuZF9tYXNrX3NpbmdsZShjb25zdCBzbmRfbWFza190ICptYXNrKQoreworCWludCBpLCBjID0gMDsKKwlhc3NlcnQoIXNuZF9tYXNrX2VtcHR5KG1hc2spKTsKKwlmb3IgKGkgPSAwOyBpIDwgU05EUlZfTUFTS19TSVpFOyBpKyspIHsKKwkJaWYgKCEgbWFzay0+Yml0c1tpXSkKKwkJCWNvbnRpbnVlOworCQlpZiAobWFzay0+Yml0c1tpXSAmIChtYXNrLT5iaXRzW2ldIC0gMSkpCisJCQlyZXR1cm4gMDsKKwkJaWYgKGMpCisJCQlyZXR1cm4gMDsKKwkJYysrOworCX0KKwlyZXR1cm4gMTsKK30KKworSU5MSU5FIGludCBzbmRfbWFza19yZWZpbmUoc25kX21hc2tfdCAqbWFzaywgY29uc3Qgc25kX21hc2tfdCAqdikKK3sKKwlzbmRfbWFza190IG9sZDsKKwlhc3NlcnQoIXNuZF9tYXNrX2VtcHR5KG1hc2spKTsKKwlzbmRfbWFza19jb3B5KCZvbGQsIG1hc2spOworCXNuZF9tYXNrX2ludGVyc2VjdChtYXNrLCB2KTsKKwlpZiAoc25kX21hc2tfZW1wdHkobWFzaykpCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiAhc25kX21hc2tfZXEobWFzaywgJm9sZCk7Cit9CisKK0lOTElORSBpbnQgc25kX21hc2tfcmVmaW5lX2ZpcnN0KHNuZF9tYXNrX3QgKm1hc2spCit7CisJYXNzZXJ0KCFzbmRfbWFza19lbXB0eShtYXNrKSk7CisJaWYgKHNuZF9tYXNrX3NpbmdsZShtYXNrKSkKKwkJcmV0dXJuIDA7CisJc25kX21hc2tfbGVhdmUobWFzaywgc25kX21hc2tfbWluKG1hc2spKTsKKwlyZXR1cm4gMTsKK30KKworSU5MSU5FIGludCBzbmRfbWFza19yZWZpbmVfbGFzdChzbmRfbWFza190ICptYXNrKQoreworCWFzc2VydCghc25kX21hc2tfZW1wdHkobWFzaykpOworCWlmIChzbmRfbWFza19zaW5nbGUobWFzaykpCisJCXJldHVybiAwOworCXNuZF9tYXNrX2xlYXZlKG1hc2ssIHNuZF9tYXNrX21heChtYXNrKSk7CisJcmV0dXJuIDE7Cit9CisKK0lOTElORSBpbnQgc25kX21hc2tfcmVmaW5lX21pbihzbmRfbWFza190ICptYXNrLCB1bnNpZ25lZCBpbnQgdmFsKQoreworCWFzc2VydCghc25kX21hc2tfZW1wdHkobWFzaykpOworCWlmIChzbmRfbWFza19taW4obWFzaykgPj0gdmFsKQorCQlyZXR1cm4gMDsKKwlzbmRfbWFza19yZXNldF9yYW5nZShtYXNrLCAwLCB2YWwgLSAxKTsKKwlpZiAoc25kX21hc2tfZW1wdHkobWFzaykpCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiAxOworfQorCitJTkxJTkUgaW50IHNuZF9tYXNrX3JlZmluZV9tYXgoc25kX21hc2tfdCAqbWFzaywgdW5zaWduZWQgaW50IHZhbCkKK3sKKwlhc3NlcnQoIXNuZF9tYXNrX2VtcHR5KG1hc2spKTsKKwlpZiAoc25kX21hc2tfbWF4KG1hc2spIDw9IHZhbCkKKwkJcmV0dXJuIDA7CisJc25kX21hc2tfcmVzZXRfcmFuZ2UobWFzaywgdmFsICsgMSwgU05EUlZfTUFTS19CSVRTKTsKKwlpZiAoc25kX21hc2tfZW1wdHkobWFzaykpCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiAxOworfQorCitJTkxJTkUgaW50IHNuZF9tYXNrX3JlZmluZV9zZXQoc25kX21hc2tfdCAqbWFzaywgdW5zaWduZWQgaW50IHZhbCkKK3sKKwlpbnQgY2hhbmdlZDsKKwlhc3NlcnQoIXNuZF9tYXNrX2VtcHR5KG1hc2spKTsKKwljaGFuZ2VkID0gIXNuZF9tYXNrX3NpbmdsZShtYXNrKTsKKwlzbmRfbWFza19sZWF2ZShtYXNrLCB2YWwpOworCWlmIChzbmRfbWFza19lbXB0eShtYXNrKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGNoYW5nZWQ7Cit9CisKK0lOTElORSBpbnQgc25kX21hc2tfdmFsdWUoY29uc3Qgc25kX21hc2tfdCAqbWFzaykKK3sKKwlhc3NlcnQoIXNuZF9tYXNrX2VtcHR5KG1hc2spKTsKKwlyZXR1cm4gc25kX21hc2tfbWluKG1hc2spOworfQorCitJTkxJTkUgdm9pZCBzbmRfaW50ZXJ2YWxfYW55KHNuZF9pbnRlcnZhbF90ICppKQoreworCWktPm1pbiA9IDA7CisJaS0+b3Blbm1pbiA9IDA7CisJaS0+bWF4ID0gVUlOVF9NQVg7CisJaS0+b3Blbm1heCA9IDA7CisJaS0+aW50ZWdlciA9IDA7CisJaS0+ZW1wdHkgPSAwOworfQorCitJTkxJTkUgdm9pZCBzbmRfaW50ZXJ2YWxfbm9uZShzbmRfaW50ZXJ2YWxfdCAqaSkKK3sKKwlpLT5lbXB0eSA9IDE7Cit9CisKK0lOTElORSBpbnQgc25kX2ludGVydmFsX2NoZWNrZW1wdHkoY29uc3Qgc25kX2ludGVydmFsX3QgKmkpCit7CisJcmV0dXJuIChpLT5taW4gPiBpLT5tYXggfHwKKwkJKGktPm1pbiA9PSBpLT5tYXggJiYgKGktPm9wZW5taW4gfHwgaS0+b3Blbm1heCkpKTsKK30KKworSU5MSU5FIGludCBzbmRfaW50ZXJ2YWxfZW1wdHkoY29uc3Qgc25kX2ludGVydmFsX3QgKmkpCit7CisJcmV0dXJuIGktPmVtcHR5OworfQorCitJTkxJTkUgaW50IHNuZF9pbnRlcnZhbF9zaW5nbGUoY29uc3Qgc25kX2ludGVydmFsX3QgKmkpCit7CisJYXNzZXJ0KCFzbmRfaW50ZXJ2YWxfZW1wdHkoaSkpOworCXJldHVybiAoaS0+bWluID09IGktPm1heCB8fCAKKwkJKGktPm1pbiArIDEgPT0gaS0+bWF4ICYmIGktPm9wZW5tYXgpKTsKK30KKworSU5MSU5FIGludCBzbmRfaW50ZXJ2YWxfdmFsdWUoY29uc3Qgc25kX2ludGVydmFsX3QgKmkpCit7CisJYXNzZXJ0KHNuZF9pbnRlcnZhbF9zaW5nbGUoaSkpOworCXJldHVybiBpLT5taW47Cit9CisKK0lOTElORSBpbnQgc25kX2ludGVydmFsX21pbihjb25zdCBzbmRfaW50ZXJ2YWxfdCAqaSkKK3sKKwlhc3NlcnQoIXNuZF9pbnRlcnZhbF9lbXB0eShpKSk7CisJcmV0dXJuIGktPm1pbjsKK30KKworSU5MSU5FIGludCBzbmRfaW50ZXJ2YWxfbWF4KGNvbnN0IHNuZF9pbnRlcnZhbF90ICppKQoreworCXVuc2lnbmVkIGludCB2OworCWFzc2VydCghc25kX2ludGVydmFsX2VtcHR5KGkpKTsKKwl2ID0gaS0+bWF4OworCWlmIChpLT5vcGVubWF4KQorCQl2LS07CisJcmV0dXJuIHY7Cit9CisKK0lOTElORSBpbnQgc25kX2ludGVydmFsX3Rlc3QoY29uc3Qgc25kX2ludGVydmFsX3QgKmksIHVuc2lnbmVkIGludCB2YWwpCit7CisJcmV0dXJuICEoKGktPm1pbiA+IHZhbCB8fCAoaS0+bWluID09IHZhbCAmJiBpLT5vcGVubWluKSB8fAorCQkgIGktPm1heCA8IHZhbCB8fCAoaS0+bWF4ID09IHZhbCAmJiBpLT5vcGVubWF4KSkpOworfQorCitJTkxJTkUgdm9pZCBzbmRfaW50ZXJ2YWxfY29weShzbmRfaW50ZXJ2YWxfdCAqZCwgY29uc3Qgc25kX2ludGVydmFsX3QgKnMpCit7CisJKmQgPSAqczsKK30KKworSU5MSU5FIGludCBzbmRfaW50ZXJ2YWxfc2V0aW50ZWdlcihzbmRfaW50ZXJ2YWxfdCAqaSkKK3sKKwlpZiAoaS0+aW50ZWdlcikKKwkJcmV0dXJuIDA7CisJaWYgKGktPm9wZW5taW4gJiYgaS0+b3Blbm1heCAmJiBpLT5taW4gPT0gaS0+bWF4KQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpLT5pbnRlZ2VyID0gMTsKKwlyZXR1cm4gMTsKK30KKworSU5MSU5FIGludCBzbmRfaW50ZXJ2YWxfZXEoY29uc3Qgc25kX2ludGVydmFsX3QgKmkxLCBjb25zdCBzbmRfaW50ZXJ2YWxfdCAqaTIpCit7CisJaWYgKGkxLT5lbXB0eSkKKwkJcmV0dXJuIGkyLT5lbXB0eTsKKwlpZiAoaTItPmVtcHR5KQorCQlyZXR1cm4gaTEtPmVtcHR5OworCXJldHVybiBpMS0+bWluID09IGkyLT5taW4gJiYgaTEtPm9wZW5taW4gPT0gaTItPm9wZW5taW4gJiYKKwkJaTEtPm1heCA9PSBpMi0+bWF4ICYmIGkxLT5vcGVubWF4ID09IGkyLT5vcGVubWF4OworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBhZGQodW5zaWduZWQgaW50IGEsIHVuc2lnbmVkIGludCBiKQoreworCWlmIChhID49IFVJTlRfTUFYIC0gYikKKwkJcmV0dXJuIFVJTlRfTUFYOworCXJldHVybiBhICsgYjsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc3ViKHVuc2lnbmVkIGludCBhLCB1bnNpZ25lZCBpbnQgYikKK3sKKwlpZiAoYSA+IGIpCisJCXJldHVybiBhIC0gYjsKKwlyZXR1cm4gMDsKK30KKworI3VuZGVmIElOTElORQorI3VuZGVmIGFzc2VydAorCisjZW5kaWYgLyogX19TT1VORF9QQ01fUEFSQU1TX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9yYXdtaWRpLmggYi9pbmNsdWRlL3NvdW5kL3Jhd21pZGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjlkYjUxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9zb3VuZC9yYXdtaWRpLmgKQEAgLTAsMCArMSwxODAgQEAKKyNpZm5kZWYgX19TT1VORF9SQVdNSURJX0gKKyNkZWZpbmUgX19TT1VORF9SQVdNSURJX0gKKworLyoKKyAqICBBYnN0cmFjdCBsYXllciBmb3IgTUlESSB2MS4wIHN0cmVhbQorICogIENvcHlyaWdodCAoYykgYnkgSmFyb3NsYXYgS3lzZWxhIDxwZXJleEBzdXNlLmN6PgorICoKKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxzb3VuZC9hc291bmQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CisKKyNpZiBkZWZpbmVkKENPTkZJR19TTkRfU0VRVUVOQ0VSKSB8fCBkZWZpbmVkKENPTkZJR19TTkRfU0VRVUVOQ0VSX01PRFVMRSkKKyNpbmNsdWRlICJzZXFfZGV2aWNlLmgiCisjZW5kaWYKKworLyoKKyAqICBSYXcgTUlESSBpbnRlcmZhY2UKKyAqLworCit0eXBlZGVmIGVudW0gc25kcnZfcmF3bWlkaV9zdHJlYW0gc25kX3Jhd21pZGlfc3RyZWFtX3Q7Cit0eXBlZGVmIHN0cnVjdCBzbmRydl9yYXdtaWRpX2luZm8gc25kX3Jhd21pZGlfaW5mb190OwordHlwZWRlZiBzdHJ1Y3Qgc25kcnZfcmF3bWlkaV9wYXJhbXMgc25kX3Jhd21pZGlfcGFyYW1zX3Q7Cit0eXBlZGVmIHN0cnVjdCBzbmRydl9yYXdtaWRpX3N0YXR1cyBzbmRfcmF3bWlkaV9zdGF0dXNfdDsKKworI2RlZmluZSBTTkRSVl9SQVdNSURJX0RFVklDRVMJCTgKKworI2RlZmluZSBTTkRSVl9SQVdNSURJX0xGTEdfT1VUUFVUCSgxPDwwKQorI2RlZmluZSBTTkRSVl9SQVdNSURJX0xGTEdfSU5QVVQJKDE8PDEpCisjZGVmaW5lIFNORFJWX1JBV01JRElfTEZMR19PUEVOCQkoMzw8MCkKKyNkZWZpbmUgU05EUlZfUkFXTUlESV9MRkxHX0FQUEVORAkoMTw8MikKKyNkZWZpbmUJU05EUlZfUkFXTUlESV9MRkxHX05PT1BFTkxPQ0sJKDE8PDMpCisKK3R5cGVkZWYgc3RydWN0IF9zbmRfcmF3bWlkaV9ydW50aW1lIHNuZF9yYXdtaWRpX3J1bnRpbWVfdDsKK3R5cGVkZWYgc3RydWN0IF9zbmRfcmF3bWlkaV9zdWJzdHJlYW0gc25kX3Jhd21pZGlfc3Vic3RyZWFtX3Q7Cit0eXBlZGVmIHN0cnVjdCBfc25kX3Jhd21pZGlfc3RyIHNuZF9yYXdtaWRpX3N0cl90OworCit0eXBlZGVmIHN0cnVjdCBfc25kX3Jhd21pZGlfb3BzIHsKKwlpbnQgKCpvcGVuKSAoc25kX3Jhd21pZGlfc3Vic3RyZWFtX3QgKiBzdWJzdHJlYW0pOworCWludCAoKmNsb3NlKSAoc25kX3Jhd21pZGlfc3Vic3RyZWFtX3QgKiBzdWJzdHJlYW0pOworCXZvaWQgKCp0cmlnZ2VyKSAoc25kX3Jhd21pZGlfc3Vic3RyZWFtX3QgKiBzdWJzdHJlYW0sIGludCB1cCk7CisJdm9pZCAoKmRyYWluKSAoc25kX3Jhd21pZGlfc3Vic3RyZWFtX3QgKiBzdWJzdHJlYW0pOworfSBzbmRfcmF3bWlkaV9vcHNfdDsKKwordHlwZWRlZiBzdHJ1Y3QgX3NuZF9yYXdtaWRpX2dsb2JhbF9vcHMgeworCWludCAoKmRldl9yZWdpc3RlcikgKHNuZF9yYXdtaWRpX3QgKiBybWlkaSk7CisJaW50ICgqZGV2X3VucmVnaXN0ZXIpIChzbmRfcmF3bWlkaV90ICogcm1pZGkpOworfSBzbmRfcmF3bWlkaV9nbG9iYWxfb3BzX3Q7CisKK3N0cnVjdCBfc25kX3Jhd21pZGlfcnVudGltZSB7CisJdW5zaWduZWQgaW50IGRyYWluOiAxLAkvKiBkcmFpbiBzdGFnZSAqLworCQkgICAgIG9zczogMTsJLyogT1NTIGNvbXBhdGlibGUgbW9kZSAqLworCS8qIG1pZGkgc3RyZWFtIGJ1ZmZlciAqLworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsJLyogYnVmZmVyIGZvciBNSURJIGRhdGEgKi8KKwlzaXplX3QgYnVmZmVyX3NpemU7CS8qIHNpemUgb2YgYnVmZmVyICovCisJc2l6ZV90IGFwcGxfcHRyOwkvKiBhcHBsaWNhdGlvbiBwb2ludGVyICovCisJc2l6ZV90IGh3X3B0cjsJCS8qIGhhcmR3YXJlIHBvaW50ZXIgKi8KKwlzaXplX3QgYXZhaWxfbWluOwkvKiBtaW4gYXZhaWwgZm9yIHdha2V1cCAqLworCXNpemVfdCBhdmFpbDsJCS8qIG1heCB1c2VkIGJ1ZmZlciBmb3Igd2FrZXVwICovCisJc2l6ZV90IHhydW5zOwkJLyogb3Zlci91bmRlcnJ1bnMgY291bnRlciAqLworCS8qIG1pc2MgKi8KKwlzcGlubG9ja190IGxvY2s7CisJd2FpdF9xdWV1ZV9oZWFkX3Qgc2xlZXA7CisJLyogZXZlbnQgaGFuZGxlciAobmV3IGJ5dGVzLCBpbnB1dCBvbmx5KSAqLworCXZvaWQgKCpldmVudCkoc25kX3Jhd21pZGlfc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSk7CisJLyogZGVmZXJzIGNhbGxzIHRvIGV2ZW50IFtpbnB1dF0gb3Igb3BzLT50cmlnZ2VyIFtvdXRwdXRdICovCisJc3RydWN0IHRhc2tsZXRfc3RydWN0IHRhc2tsZXQ7CisJLyogcHJpdmF0ZSBkYXRhICovCisJdm9pZCAqcHJpdmF0ZV9kYXRhOworCXZvaWQgKCpwcml2YXRlX2ZyZWUpKHNuZF9yYXdtaWRpX3N1YnN0cmVhbV90ICpzdWJzdHJlYW0pOworfTsKKworc3RydWN0IF9zbmRfcmF3bWlkaV9zdWJzdHJlYW0geworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsJCS8qIGxpc3Qgb2YgYWxsIHN1YnN0cmVhbSBmb3IgZ2l2ZW4gc3RyZWFtICovCisJaW50IHN0cmVhbTsJCQkvKiBkaXJlY3Rpb24gKi8KKwlpbnQgbnVtYmVyOwkJCS8qIHN1YnN0cmVhbSBudW1iZXIgKi8KKwl1bnNpZ25lZCBpbnQgb3BlbmVkOiAxLAkJLyogb3BlbiBmbGFnICovCisJCSAgICAgYXBwZW5kOiAxLAkJLyogYXBwZW5kIGZsYWcgKG1lcmdlIG1vcmUgc3RyZWFtcykgKi8KKwkJICAgICBhY3RpdmVfc2Vuc2luZzogMTsgLyogc2VuZCBhY3RpdmUgc2Vuc2luZyB3aGVuIGNsb3NlICovCisJaW50IHVzZV9jb3VudDsJCQkvKiB1c2UgY291bnRlciAoZm9yIG91dHB1dCkgKi8KKwlzaXplX3QgYnl0ZXM7CisJc25kX3Jhd21pZGlfdCAqcm1pZGk7CisJc25kX3Jhd21pZGlfc3RyX3QgKnBzdHI7CisJY2hhciBuYW1lWzMyXTsKKwlzbmRfcmF3bWlkaV9ydW50aW1lX3QgKnJ1bnRpbWU7CisJLyogaGFyZHdhcmUgbGF5ZXIgKi8KKwlzbmRfcmF3bWlkaV9vcHNfdCAqb3BzOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgX3NuZF9yYXdtaWRpX2ZpbGUgeworCXNuZF9yYXdtaWRpX3QgKnJtaWRpOworCXNuZF9yYXdtaWRpX3N1YnN0cmVhbV90ICppbnB1dDsKKwlzbmRfcmF3bWlkaV9zdWJzdHJlYW1fdCAqb3V0cHV0OworfSBzbmRfcmF3bWlkaV9maWxlX3Q7CisKK3N0cnVjdCBfc25kX3Jhd21pZGlfc3RyIHsKKwl1bnNpZ25lZCBpbnQgc3Vic3RyZWFtX2NvdW50OworCXVuc2lnbmVkIGludCBzdWJzdHJlYW1fb3BlbmVkOworCXN0cnVjdCBsaXN0X2hlYWQgc3Vic3RyZWFtczsKK307CisKK3N0cnVjdCBfc25kX3Jhd21pZGkgeworCXNuZF9jYXJkX3QgKmNhcmQ7CisKKwl1bnNpZ25lZCBpbnQgZGV2aWNlOwkJLyogZGV2aWNlIG51bWJlciAqLworCXVuc2lnbmVkIGludCBpbmZvX2ZsYWdzOwkvKiBTTkRSVl9SQVdNSURJX0lORk9fWFhYWCAqLworCWNoYXIgaWRbNjRdOworCWNoYXIgbmFtZVs4MF07CisKKyNpZmRlZiBDT05GSUdfU05EX09TU0VNVUwKKwlpbnQgb3NzcmVnOworI2VuZGlmCisKKwlzbmRfcmF3bWlkaV9nbG9iYWxfb3BzX3QgKm9wczsKKworCXNuZF9yYXdtaWRpX3N0cl90IHN0cmVhbXNbMl07CisKKwl2b2lkICpwcml2YXRlX2RhdGE7CisJdm9pZCAoKnByaXZhdGVfZnJlZSkgKHNuZF9yYXdtaWRpX3QgKnJtaWRpKTsKKworCXN0cnVjdCBzZW1hcGhvcmUgb3Blbl9tdXRleDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBvcGVuX3dhaXQ7CisKKwlzbmRfaW5mb19lbnRyeV90ICpkZXY7CisJc25kX2luZm9fZW50cnlfdCAqcHJvY19lbnRyeTsKKworI2lmIGRlZmluZWQoQ09ORklHX1NORF9TRVFVRU5DRVIpIHx8IGRlZmluZWQoQ09ORklHX1NORF9TRVFVRU5DRVJfTU9EVUxFKQorCXNuZF9zZXFfZGV2aWNlX3QgKnNlcV9kZXY7CisjZW5kaWYKK307CisKKy8qIG1haW4gcmF3bWlkaSBmdW5jdGlvbnMgKi8KKworaW50IHNuZF9yYXdtaWRpX25ldyhzbmRfY2FyZF90ICogY2FyZCwgY2hhciAqaWQsIGludCBkZXZpY2UsCisJCSAgICBpbnQgb3V0cHV0X2NvdW50LCBpbnQgaW5wdXRfY291bnQsCisJCSAgICBzbmRfcmF3bWlkaV90ICoqIHJtaWRpKTsKK3ZvaWQgc25kX3Jhd21pZGlfc2V0X29wcyhzbmRfcmF3bWlkaV90ICogcm1pZGksIGludCBzdHJlYW0sIHNuZF9yYXdtaWRpX29wc190ICogb3BzKTsKKworLyogY2FsbGJhY2tzICovCisKK3ZvaWQgc25kX3Jhd21pZGlfcmVjZWl2ZV9yZXNldChzbmRfcmF3bWlkaV9zdWJzdHJlYW1fdCAqIHN1YnN0cmVhbSk7CitpbnQgc25kX3Jhd21pZGlfcmVjZWl2ZShzbmRfcmF3bWlkaV9zdWJzdHJlYW1fdCAqIHN1YnN0cmVhbSwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmZmVyLCBpbnQgY291bnQpOwordm9pZCBzbmRfcmF3bWlkaV90cmFuc21pdF9yZXNldChzbmRfcmF3bWlkaV9zdWJzdHJlYW1fdCAqIHN1YnN0cmVhbSk7CitpbnQgc25kX3Jhd21pZGlfdHJhbnNtaXRfZW1wdHkoc25kX3Jhd21pZGlfc3Vic3RyZWFtX3QgKiBzdWJzdHJlYW0pOworaW50IHNuZF9yYXdtaWRpX3RyYW5zbWl0X3BlZWsoc25kX3Jhd21pZGlfc3Vic3RyZWFtX3QgKiBzdWJzdHJlYW0sIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgaW50IGNvdW50KTsKK2ludCBzbmRfcmF3bWlkaV90cmFuc21pdF9hY2soc25kX3Jhd21pZGlfc3Vic3RyZWFtX3QgKiBzdWJzdHJlYW0sIGludCBjb3VudCk7CitpbnQgc25kX3Jhd21pZGlfdHJhbnNtaXQoc25kX3Jhd21pZGlfc3Vic3RyZWFtX3QgKiBzdWJzdHJlYW0sIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgaW50IGNvdW50KTsKKworLyogbWFpbiBtaWRpIGZ1bmN0aW9ucyAqLworCitpbnQgc25kX3Jhd21pZGlfaW5mb19zZWxlY3Qoc25kX2NhcmRfdCAqY2FyZCwgc25kX3Jhd21pZGlfaW5mb190ICppbmZvKTsKK2ludCBzbmRfcmF3bWlkaV9rZXJuZWxfb3BlbihpbnQgY2FyZG51bSwgaW50IGRldmljZSwgaW50IHN1YmRldmljZSwgaW50IG1vZGUsIHNuZF9yYXdtaWRpX2ZpbGVfdCAqIHJmaWxlKTsKK2ludCBzbmRfcmF3bWlkaV9rZXJuZWxfcmVsZWFzZShzbmRfcmF3bWlkaV9maWxlX3QgKiByZmlsZSk7CitpbnQgc25kX3Jhd21pZGlfb3V0cHV0X3BhcmFtcyhzbmRfcmF3bWlkaV9zdWJzdHJlYW1fdCAqIHN1YnN0cmVhbSwgc25kX3Jhd21pZGlfcGFyYW1zX3QgKiBwYXJhbXMpOworaW50IHNuZF9yYXdtaWRpX2lucHV0X3BhcmFtcyhzbmRfcmF3bWlkaV9zdWJzdHJlYW1fdCAqIHN1YnN0cmVhbSwgc25kX3Jhd21pZGlfcGFyYW1zX3QgKiBwYXJhbXMpOworaW50IHNuZF9yYXdtaWRpX2Ryb3Bfb3V0cHV0KHNuZF9yYXdtaWRpX3N1YnN0cmVhbV90ICogc3Vic3RyZWFtKTsKK2ludCBzbmRfcmF3bWlkaV9kcmFpbl9vdXRwdXQoc25kX3Jhd21pZGlfc3Vic3RyZWFtX3QgKiBzdWJzdHJlYW0pOworaW50IHNuZF9yYXdtaWRpX2RyYWluX2lucHV0KHNuZF9yYXdtaWRpX3N1YnN0cmVhbV90ICogc3Vic3RyZWFtKTsKK2xvbmcgc25kX3Jhd21pZGlfa2VybmVsX3JlYWQoc25kX3Jhd21pZGlfc3Vic3RyZWFtX3QgKiBzdWJzdHJlYW0sIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgbG9uZyBjb3VudCk7Citsb25nIHNuZF9yYXdtaWRpX2tlcm5lbF93cml0ZShzbmRfcmF3bWlkaV9zdWJzdHJlYW1fdCAqIHN1YnN0cmVhbSwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBsb25nIGNvdW50KTsKKworI2VuZGlmIC8qIF9fU09VTkRfUkFXTUlESV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3NiLmggYi9pbmNsdWRlL3NvdW5kL3NiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk2MDQ1MgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvc291bmQvc2IuaApAQCAtMCwwICsxLDM2MCBAQAorI2lmbmRlZiBfX1NPVU5EX1NCX0gKKyNkZWZpbmUgX19TT1VORF9TQl9ICisKKy8qCisgKiAgSGVhZGVyIGZpbGUgZm9yIFNvdW5kQmxhc3RlciBjYXJkcworICogIENvcHlyaWdodCAoYykgYnkgSmFyb3NsYXYgS3lzZWxhIDxwZXJleEBzdXNlLmN6PgorICoKKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKgorICovCisKKyNpbmNsdWRlICJwY20uaCIKKyNpbmNsdWRlICJyYXdtaWRpLmgiCisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKK2VudW0gc2JfaHdfdHlwZSB7CisJU0JfSFdfQVVUTywKKwlTQl9IV18xMCwKKwlTQl9IV18yMCwKKwlTQl9IV18yMDEsCisJU0JfSFdfUFJPLAorCVNCX0hXXzE2LAorCVNCX0hXXzE2Q1NQLAkJLyogU0IxNiB3aXRoIENTUCBjaGlwICovCisJU0JfSFdfQUxTMTAwLAkJLyogQXZhbmNlIExvZ2ljIEFMUzEwMCBjaGlwICovCisJU0JfSFdfQUxTNDAwMCwJCS8qIEF2YW5jZSBMb2dpYyBBTFM0MDAwIGNoaXAgKi8KKwlTQl9IV19EVDAxOVgsCQkvKiBEaWFtb25kIFRlY2guIERULTAxOVggLyBBdmFuY2UgTG9naWMgQUxTLTAwNyAqLworfTsKKworI2RlZmluZSBTQl9PUEVOX1BDTQkJCTB4MDEKKyNkZWZpbmUgU0JfT1BFTl9NSURJX0lOUFVUCQkweDAyCisjZGVmaW5lIFNCX09QRU5fTUlESV9PVVRQVVQJCTB4MDQKKyNkZWZpbmUgU0JfT1BFTl9NSURJX0lOUFVUX1RSSUdHRVIJMHgwOAorI2RlZmluZSBTQl9PUEVOX01JRElfT1VUUFVUX1RSSUdHRVIJMHgxMAorCisjZGVmaW5lIFNCX01PREVfSEFMVAkJMHgwMAorI2RlZmluZSBTQl9NT0RFX1BMQVlCQUNLXzgJMHgwMQorI2RlZmluZSBTQl9NT0RFX1BMQVlCQUNLXzE2CTB4MDIKKyNkZWZpbmUgU0JfTU9ERV9QTEFZQkFDSwkoU0JfTU9ERV9QTEFZQkFDS184IHwgU0JfTU9ERV9QTEFZQkFDS18xNikKKyNkZWZpbmUgU0JfTU9ERV9DQVBUVVJFXzgJMHgwNAorI2RlZmluZSBTQl9NT0RFX0NBUFRVUkVfMTYJMHgwOAorI2RlZmluZSBTQl9NT0RFX0NBUFRVUkUJCShTQl9NT0RFX0NBUFRVUkVfOCB8IFNCX01PREVfQ0FQVFVSRV8xNikKKworI2RlZmluZSBTQl9SQVRFX0xPQ0tfUExBWUJBQ0sJMHgxMAorI2RlZmluZSBTQl9SQVRFX0xPQ0tfQ0FQVFVSRQkweDIwCisjZGVmaW5lIFNCX1JBVEVfTE9DSwkJKFNCX1JBVEVfTE9DS19QTEFZQkFDSyB8IFNCX1JBVEVfTE9DS19DQVBUVVJFKQorCisjZGVmaW5lIFNCX01QVV9JTlBVVAkJMQorCitzdHJ1Y3QgX3NuZF9zYiB7CisJdW5zaWduZWQgbG9uZyBwb3J0OwkJLyogYmFzZSBwb3J0IG9mIERTUCBjaGlwICovCisJc3RydWN0IHJlc291cmNlICpyZXNfcG9ydDsKKwl1bnNpZ25lZCBsb25nIG1wdV9wb3J0OwkJLyogTVBVIHBvcnQgZm9yIFNCIERTUCA0LjArICovCisJaW50IGlycTsJCQkvKiBJUlEgbnVtYmVyIG9mIERTUCBjaGlwICovCisJaW50IGRtYTg7CQkJLyogOC1iaXQgRE1BICovCisJaW50IGRtYTE2OwkJCS8qIDE2LWJpdCBETUEgKi8KKwl1bnNpZ25lZCBzaG9ydCB2ZXJzaW9uOwkJLyogdmVyc2lvbiBvZiBEU1AgY2hpcCAqLworCWVudW0gc2JfaHdfdHlwZSBoYXJkd2FyZTsJLyogc2VlIHRvIFNCX0hXX1hYWFggKi8KKworCXVuc2lnbmVkIGxvbmcgYWx0X3BvcnQ7CQkvKiBhbHRlcm5hdGUgcG9ydCAoQUxTNDAwMCkgKi8KKwlzdHJ1Y3QgcGNpX2RldiAqcGNpOwkJLyogQUxTNDAwMCAqLworCisJdW5zaWduZWQgaW50IG9wZW47CQkvKiBzZWUgdG8gU0JfT1BFTl9YWFhYIGZvciBzYjggKi8KKwkJCQkJLyogYWxzbyBTTkRSVl9TQl9DU1BfTU9ERV9YWFggZm9yIHNiMTZfY3NwICovCisJdW5zaWduZWQgaW50IG1vZGU7CQkvKiBjdXJyZW50IG1vZGUgb2Ygc3RyZWFtICovCisJdW5zaWduZWQgaW50IGZvcmNlX21vZGUxNjsJLyogZm9yY2UgMTYtYml0IG1vZGUgb2Ygc3RyZWFtcyAqLworCXVuc2lnbmVkIGludCBsb2NrZWRfcmF0ZTsJLyogc2IxNiBkdXBsZXggKi8KKwl1bnNpZ25lZCBpbnQgcGxheWJhY2tfZm9ybWF0OworCXVuc2lnbmVkIGludCBjYXB0dXJlX2Zvcm1hdDsKKwlzdHJ1Y3QgdGltZXJfbGlzdCBtaWRpX3RpbWVyOworCXVuc2lnbmVkIGludCBwX2RtYV9zaXplOworCXVuc2lnbmVkIGludCBwX3BlcmlvZF9zaXplOworCXVuc2lnbmVkIGludCBjX2RtYV9zaXplOworCXVuc2lnbmVkIGludCBjX3BlcmlvZF9zaXplOworCisJc3BpbmxvY2tfdCBtaXhlcl9sb2NrOworCisJY2hhciBuYW1lWzMyXTsKKworCXZvaWQgKmNzcDsgLyogdXNlZCBvbmx5IHdoZW4gQ09ORklHX1NORF9TQjE2X0NTUCBpcyBzZXQgKi8KKworCXNuZF9jYXJkX3QgKmNhcmQ7CisJc25kX3BjbV90ICpwY207CisJc25kX3BjbV9zdWJzdHJlYW1fdCAqcGxheWJhY2tfc3Vic3RyZWFtOworCXNuZF9wY21fc3Vic3RyZWFtX3QgKmNhcHR1cmVfc3Vic3RyZWFtOworCisJc25kX3Jhd21pZGlfdCAqcm1pZGk7CisJc25kX3Jhd21pZGlfc3Vic3RyZWFtX3QgKm1pZGlfc3Vic3RyZWFtX2lucHV0OworCXNuZF9yYXdtaWRpX3N1YnN0cmVhbV90ICptaWRpX3N1YnN0cmVhbV9vdXRwdXQ7CisJaXJxcmV0dXJuX3QgKCpybWlkaV9jYWxsYmFjaykoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKKwlzcGlubG9ja190IHJlZ19sb2NrOworCXNwaW5sb2NrX3Qgb3Blbl9sb2NrOworCXNwaW5sb2NrX3QgbWlkaV9pbnB1dF9sb2NrOworCisJc25kX2luZm9fZW50cnlfdCAqcHJvY19lbnRyeTsKK307CisKK3R5cGVkZWYgc3RydWN0IF9zbmRfc2Igc2JfdDsKKworLyogSS9PIHBvcnRzICovCisKKyNkZWZpbmUgU0JQKGNoaXAsIHgpCQkoKGNoaXApLT5wb3J0ICsgc19iX1NCXyMjeCkKKyNkZWZpbmUgU0JQMShwb3J0LCB4KQkJKChwb3J0KSArIHNfYl9TQl8jI3gpCisKKyNkZWZpbmUgc19iX1NCX1JFU0VUCQkweDYKKyNkZWZpbmUgc19iX1NCX1JFQUQJCTB4YQorI2RlZmluZSBzX2JfU0JfV1JJVEUJCTB4YworI2RlZmluZSBzX2JfU0JfQ09NTUFORAkJMHhjCisjZGVmaW5lIHNfYl9TQl9TVEFUVVMJCTB4YworI2RlZmluZSBzX2JfU0JfREFUQV9BVkFJTAkweGUKKyNkZWZpbmUgc19iX1NCX0RBVEFfQVZBSUxfMTYgCTB4ZgorI2RlZmluZSBzX2JfU0JfTUlYRVJfQUREUgkweDQKKyNkZWZpbmUgc19iX1NCX01JWEVSX0RBVEEJMHg1CisjZGVmaW5lIHNfYl9TQl9PUEwzX0xFRlQJMHgwCisjZGVmaW5lIHNfYl9TQl9PUEwzX1JJR0hUCTB4MgorI2RlZmluZSBzX2JfU0JfT1BMM19CT1RICTB4OAorCisjZGVmaW5lIFNCX0RTUF9PVVRQVVQJCTB4MTQKKyNkZWZpbmUgU0JfRFNQX0lOUFVUCQkweDI0CisjZGVmaW5lIFNCX0RTUF9CTE9DS19TSVpFCTB4NDgKKyNkZWZpbmUgU0JfRFNQX0hJX09VVFBVVAkweDkxCisjZGVmaW5lIFNCX0RTUF9ISV9JTlBVVAkJMHg5OQorI2RlZmluZSBTQl9EU1BfTE9fT1VUUFVUX0FVVE8JMHgxYworI2RlZmluZSBTQl9EU1BfTE9fSU5QVVRfQVVUTwkweDJjCisjZGVmaW5lIFNCX0RTUF9ISV9PVVRQVVRfQVVUTwkweDkwCisjZGVmaW5lIFNCX0RTUF9ISV9JTlBVVF9BVVRPCTB4OTgKKyNkZWZpbmUgU0JfRFNQX0lNTUVEX0lOVAkweGYyCisjZGVmaW5lIFNCX0RTUF9HRVRfVkVSU0lPTgkweGUxCisjZGVmaW5lIFNCX0RTUF9TUEVBS0VSX09OCTB4ZDEKKyNkZWZpbmUgU0JfRFNQX1NQRUFLRVJfT0ZGCTB4ZDMKKyNkZWZpbmUgU0JfRFNQX0RNQThfT0ZGCQkweGQwCisjZGVmaW5lIFNCX0RTUF9ETUE4X09OCQkweGQ0CisjZGVmaW5lIFNCX0RTUF9ETUE4X0VYSVQJMHhkYQorI2RlZmluZSBTQl9EU1BfRE1BMTZfT0ZGCTB4ZDUKKyNkZWZpbmUgU0JfRFNQX0RNQTE2X09OCQkweGQ2CisjZGVmaW5lIFNCX0RTUF9ETUExNl9FWElUCTB4ZDkKKyNkZWZpbmUgU0JfRFNQX1NBTVBMRV9SQVRFCTB4NDAKKyNkZWZpbmUgU0JfRFNQX1NBTVBMRV9SQVRFX09VVAkweDQxCisjZGVmaW5lIFNCX0RTUF9TQU1QTEVfUkFURV9JTgkweDQyCisjZGVmaW5lIFNCX0RTUF9NT05PXzhCSVQJMHhhMAorI2RlZmluZSBTQl9EU1BfTU9OT18xNkJJVAkweGE0CisjZGVmaW5lIFNCX0RTUF9TVEVSRU9fOEJJVAkweGE4CisjZGVmaW5lIFNCX0RTUF9TVEVSRU9fMTZCSVQJMHhhYworCisjZGVmaW5lIFNCX0RTUF9NSURJX0lOUFVUX0lSUQkweDMxCisjZGVmaW5lIFNCX0RTUF9NSURJX1VBUlRfSVJRCTB4MzUKKyNkZWZpbmUgU0JfRFNQX01JRElfT1VUUFVUCTB4MzgKKworI2RlZmluZSBTQl9EU1A0X09VVDhfQUkJCTB4YzYKKyNkZWZpbmUgU0JfRFNQNF9JTjhfQUkJCTB4Y2UKKyNkZWZpbmUgU0JfRFNQNF9PVVQxNl9BSQkweGI2CisjZGVmaW5lIFNCX0RTUDRfSU4xNl9BSQkJMHhiZQorI2RlZmluZSBTQl9EU1A0X01PREVfVU5TX01PTk8JMHgwMAorI2RlZmluZSBTQl9EU1A0X01PREVfU0lHTl9NT05PCTB4MTAKKyNkZWZpbmUgU0JfRFNQNF9NT0RFX1VOU19TVEVSRU8JMHgyMAorI2RlZmluZSBTQl9EU1A0X01PREVfU0lHTl9TVEVSRU8gMHgzMAorCisjZGVmaW5lIFNCX0RTUDRfT1VUUFVUCQkweDNjCisjZGVmaW5lIFNCX0RTUDRfSU5QVVRfTEVGVAkweDNkCisjZGVmaW5lIFNCX0RTUDRfSU5QVVRfUklHSFQJMHgzZQorCisvKiByZWdpc3RlcnMgZm9yIFNCIDIuMCBtaXhlciAqLworI2RlZmluZSBTQl9EU1AyMF9NQVNURVJfREVWCTB4MDIKKyNkZWZpbmUgU0JfRFNQMjBfUENNX0RFVgkweDBBCisjZGVmaW5lIFNCX0RTUDIwX0NEX0RFVgkJMHgwOAorI2RlZmluZSBTQl9EU1AyMF9GTV9ERVYJCTB4MDYKKworLyogcmVnaXN0ZXJzIGZvciBTQiBQUk8gbWl4ZXIgKi8KKyNkZWZpbmUgU0JfRFNQX01BU1RFUl9ERVYJMHgyMgorI2RlZmluZSBTQl9EU1BfUENNX0RFVgkJMHgwNAorI2RlZmluZSBTQl9EU1BfTElORV9ERVYJCTB4MmUKKyNkZWZpbmUgU0JfRFNQX0NEX0RFVgkJMHgyOAorI2RlZmluZSBTQl9EU1BfRk1fREVWCQkweDI2CisjZGVmaW5lIFNCX0RTUF9NSUNfREVWCQkweDBhCisjZGVmaW5lIFNCX0RTUF9DQVBUVVJFX1NPVVJDRQkweDBjCisjZGVmaW5lIFNCX0RTUF9DQVBUVVJFX0ZJTFQJMHgwYworI2RlZmluZSBTQl9EU1BfUExBWUJBQ0tfRklMVAkweDBlCisjZGVmaW5lIFNCX0RTUF9TVEVSRU9fU1cJMHgwZQorCisjZGVmaW5lIFNCX0RTUF9NSVhTX01JQzAJMHgwMAkvKiBzYW1lIGFzIE1JQyAqLworI2RlZmluZSBTQl9EU1BfTUlYU19DRAkJMHgwMQorI2RlZmluZSBTQl9EU1BfTUlYU19NSUMJCTB4MDIKKyNkZWZpbmUgU0JfRFNQX01JWFNfTElORQkweDAzCisKKy8qIHJlZ2lzdGVycyAob25seSBmb3IgbGVmdCBjaGFubmVsKSBmb3IgU0IgMTYgbWl4ZXIgKi8KKyNkZWZpbmUgU0JfRFNQNF9NQVNURVJfREVWCTB4MzAKKyNkZWZpbmUgU0JfRFNQNF9CQVNTX0RFVgkweDQ2CisjZGVmaW5lIFNCX0RTUDRfVFJFQkxFX0RFVgkweDQ0CisjZGVmaW5lIFNCX0RTUDRfU1lOVEhfREVWCTB4MzQKKyNkZWZpbmUgU0JfRFNQNF9QQ01fREVWCQkweDMyCisjZGVmaW5lIFNCX0RTUDRfU1BFQUtFUl9ERVYJMHgzYgorI2RlZmluZSBTQl9EU1A0X0xJTkVfREVWCTB4MzgKKyNkZWZpbmUgU0JfRFNQNF9NSUNfREVWCQkweDNhCisjZGVmaW5lIFNCX0RTUDRfT1VUUFVUX1NXCTB4M2MKKyNkZWZpbmUgU0JfRFNQNF9DRF9ERVYJCTB4MzYKKyNkZWZpbmUgU0JfRFNQNF9JR0FJTl9ERVYJMHgzZgorI2RlZmluZSBTQl9EU1A0X09HQUlOX0RFVgkweDQxCisjZGVmaW5lIFNCX0RTUDRfTUlDX0FHQwkJMHg0MworCisvKiBhZGRpdGlvbmFsIHJlZ2lzdGVycyBmb3IgU0IgMTYgbWl4ZXIgKi8KKyNkZWZpbmUgU0JfRFNQNF9JUlFTRVRVUAkweDgwCisjZGVmaW5lIFNCX0RTUDRfRE1BU0VUVVAJMHg4MQorI2RlZmluZSBTQl9EU1A0X0lSUVNUQVRVUwkweDgyCisjZGVmaW5lIFNCX0RTUDRfTVBVU0VUVVAJMHg4NAorCisjZGVmaW5lIFNCX0RTUDRfM0RTRQkJMHg5MAorCisvKiBSZWdpc3RlcnMgZm9yIERULTAxOXggLyBBTFMtMDA3IG1peGVyICovCisjZGVmaW5lIFNCX0RUMDE5WF9NQVNURVJfREVWCTB4NjIKKyNkZWZpbmUgU0JfRFQwMTlYX1BDTV9ERVYJMHg2NAorI2RlZmluZSBTQl9EVDAxOVhfU1lOVEhfREVWCTB4NjYKKyNkZWZpbmUgU0JfRFQwMTlYX0NEX0RFVgkweDY4CisjZGVmaW5lIFNCX0RUMDE5WF9NSUNfREVWCTB4NmEKKyNkZWZpbmUgU0JfRFQwMTlYX1NQS1JfREVWCTB4NmEKKyNkZWZpbmUgU0JfRFQwMTlYX0xJTkVfREVWCTB4NmUKKyNkZWZpbmUgU0JfRFQwMTlYX09VVFBVVF9TVzIJMHg0YworI2RlZmluZSBTQl9EVDAxOVhfQ0FQVFVSRV9TVwkweDZjCisKKyNkZWZpbmUgU0JfRFQwMTlYX0NBUF9DRAkweDAyCisjZGVmaW5lIFNCX0RUMDE5WF9DQVBfTUlDCTB4MDQKKyNkZWZpbmUgU0JfRFQwMTlYX0NBUF9MSU5FCTB4MDYKKyNkZWZpbmUgU0JfRFQwMTlYX0NBUF9TWU5USAkweDA3CisjZGVmaW5lIFNCX0RUMDE5WF9DQVBfTUFJTgkweDA3CisKKyNkZWZpbmUgU0JfQUxTNDAwMF9NT05PX0lPX0NUUkwJMHg0YgorI2RlZmluZSBTQl9BTFM0MDAwX01JQ19JTl9HQUlOCTB4NGQKKyNkZWZpbmUgU0JfQUxTNDAwMF9GTURBQwkweDRmCisjZGVmaW5lIFNCX0FMUzQwMDBfM0RfU05EX0ZYCTB4NTAKKyNkZWZpbmUgU0JfQUxTNDAwMF8zRF9USU1FX0RFTEFZCTB4NTEKKyNkZWZpbmUgU0JfQUxTNDAwMF8zRF9BVVRPX01VVEUJMHg1MgorI2RlZmluZSBTQl9BTFM0MDAwX1FTT1VORAkweGRiCisKKy8qIElSUSBzZXR0aW5nIGJpdG1hcCAqLworI2RlZmluZSBTQl9JUlFTRVRVUF9JUlE5CTB4MDEKKyNkZWZpbmUgU0JfSVJRU0VUVVBfSVJRNQkweDAyCisjZGVmaW5lIFNCX0lSUVNFVFVQX0lSUTcJMHgwNAorI2RlZmluZSBTQl9JUlFTRVRVUF9JUlExMAkweDA4CisKKy8qIElSUSB0eXBlcyAqLworI2RlZmluZSBTQl9JUlFUWVBFXzhCSVQJCTB4MDEKKyNkZWZpbmUgU0JfSVJRVFlQRV8xNkJJVAkweDAyCisjZGVmaW5lIFNCX0lSUVRZUEVfTVBVSU4JMHgwNAorCisvKiBETUEgc2V0dGluZyBiaXRtYXAgKi8KKyNkZWZpbmUgU0JfRE1BU0VUVVBfRE1BMAkweDAxCisjZGVmaW5lIFNCX0RNQVNFVFVQX0RNQTEJMHgwMgorI2RlZmluZSBTQl9ETUFTRVRVUF9ETUEzCTB4MDgKKyNkZWZpbmUgU0JfRE1BU0VUVVBfRE1BNQkweDIwCisjZGVmaW5lIFNCX0RNQVNFVFVQX0RNQTYJMHg0MAorI2RlZmluZSBTQl9ETUFTRVRVUF9ETUE3CTB4ODAKKworLyoKKyAqCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkIHNuZF9zYl9hY2tfOGJpdChzYl90ICpjaGlwKQoreworCWluYihTQlAoY2hpcCwgREFUQV9BVkFJTCkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc25kX3NiX2Fja18xNmJpdChzYl90ICpjaGlwKQoreworCWluYihTQlAoY2hpcCwgREFUQV9BVkFJTF8xNikpOworfQorCisvKiBzYl9jb21tb24uYyAqLworaW50IHNuZF9zYmRzcF9jb21tYW5kKHNiX3QgKmNoaXAsIHVuc2lnbmVkIGNoYXIgdmFsKTsKK2ludCBzbmRfc2Jkc3BfZ2V0X2J5dGUoc2JfdCAqY2hpcCk7CitpbnQgc25kX3NiZHNwX3Jlc2V0KHNiX3QgKmNoaXApOworaW50IHNuZF9zYmRzcF9jcmVhdGUoc25kX2NhcmRfdCAqY2FyZCwKKwkJICAgICB1bnNpZ25lZCBsb25nIHBvcnQsCisJCSAgICAgaW50IGlycSwKKwkJICAgICBpcnFyZXR1cm5fdCAoKmlycV9oYW5kbGVyKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKiksCisJCSAgICAgaW50IGRtYTgsIGludCBkbWExNiwKKwkJICAgICB1bnNpZ25lZCBzaG9ydCBoYXJkd2FyZSwKKwkJICAgICBzYl90ICoqcl9jaGlwKTsKKy8qIHNiX21peGVyLmMgKi8KK3ZvaWQgc25kX3NibWl4ZXJfd3JpdGUoc2JfdCAqY2hpcCwgdW5zaWduZWQgY2hhciByZWcsIHVuc2lnbmVkIGNoYXIgZGF0YSk7Cit1bnNpZ25lZCBjaGFyIHNuZF9zYm1peGVyX3JlYWQoc2JfdCAqY2hpcCwgdW5zaWduZWQgY2hhciByZWcpOworaW50IHNuZF9zYm1peGVyX25ldyhzYl90ICpjaGlwKTsKKworLyogc2I4X2luaXQuYyAqLworaW50IHNuZF9zYjhkc3BfcGNtKHNiX3QgKmNoaXAsIGludCBkZXZpY2UsIHNuZF9wY21fdCAqKiBycGNtKTsKKy8qIHNiOC5jICovCitpcnFyZXR1cm5fdCBzbmRfc2I4ZHNwX2ludGVycnVwdChzYl90ICpjaGlwKTsKK2ludCBzbmRfc2I4X3BsYXliYWNrX29wZW4oc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtKTsKK2ludCBzbmRfc2I4X2NhcHR1cmVfb3BlbihzbmRfcGNtX3N1YnN0cmVhbV90ICpzdWJzdHJlYW0pOworaW50IHNuZF9zYjhfcGxheWJhY2tfY2xvc2Uoc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtKTsKK2ludCBzbmRfc2I4X2NhcHR1cmVfY2xvc2Uoc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtKTsKKy8qIG1pZGk4LmMgKi8KK2lycXJldHVybl90IHNuZF9zYjhkc3BfbWlkaV9pbnRlcnJ1cHQoc2JfdCAqY2hpcCk7CitpbnQgc25kX3NiOGRzcF9taWRpKHNiX3QgKmNoaXAsIGludCBkZXZpY2UsIHNuZF9yYXdtaWRpX3QgKiogcnJhd21pZGkpOworCisvKiBzYjE2X2luaXQuYyAqLworaW50IHNuZF9zYjE2ZHNwX3BjbShzYl90ICpjaGlwLCBpbnQgZGV2aWNlLCBzbmRfcGNtX3QgKiogcnBjbSk7Citjb25zdCBzbmRfcGNtX29wc190ICpzbmRfc2IxNmRzcF9nZXRfcGNtX29wcyhpbnQgZGlyZWN0aW9uKTsKK2ludCBzbmRfc2IxNmRzcF9jb25maWd1cmUoc2JfdCAqY2hpcCk7CisvKiBzYjE2LmMgKi8KK2lycXJldHVybl90IHNuZF9zYjE2ZHNwX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworLyogZXhwb3J0ZWQgbWl4ZXIgc3R1ZmZzICovCitlbnVtIHsKKwlTQl9NSVhfU0lOR0xFLAorCVNCX01JWF9ET1VCTEUsCisJU0JfTUlYX0lOUFVUX1NXLAorCVNCX01JWF9DQVBUVVJFX1BSTywKKwlTQl9NSVhfQ0FQVFVSRV9EVDAxOVgKK307CisKKyNkZWZpbmUgU0JfTUlYVkFMX0RPVUJMRShsZWZ0X3JlZywgcmlnaHRfcmVnLCBsZWZ0X3NoaWZ0LCByaWdodF9zaGlmdCwgbWFzaykgXAorICAoKGxlZnRfcmVnKSB8ICgocmlnaHRfcmVnKSA8PCA4KSB8ICgobGVmdF9zaGlmdCkgPDwgMTYpIHwgKChyaWdodF9zaGlmdCkgPDwgMTkpIHwgKChtYXNrKSA8PCAyNCkpCisjZGVmaW5lIFNCX01JWFZBTF9TSU5HTEUocmVnLCBzaGlmdCwgbWFzaykgXAorICAoKHJlZykgfCAoKHNoaWZ0KSA8PCAxNikgfCAoKG1hc2spIDw8IDI0KSkKKyNkZWZpbmUgU0JfTUlYVkFMX0lOUFVUX1NXKHJlZzEsIHJlZzIsIGxlZnRfc2hpZnQsIHJpZ2h0X3NoaWZ0KSBcCisgICgocmVnMSkgfCAoKHJlZzIpIDw8IDgpIHwgKChsZWZ0X3NoaWZ0KSA8PCAxNikgfCAoKHJpZ2h0X3NoaWZ0KSA8PCAyNCkpCisKK2ludCBzbmRfc2JtaXhlcl9hZGRfY3RsKHNiX3QgKmNoaXAsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBpbmRleCwgaW50IHR5cGUsIHVuc2lnbmVkIGxvbmcgdmFsdWUpOworCisvKiBmb3IgZWFzZSBvZiB1c2UgKi8KK3N0cnVjdCBzYm1peF9lbGVtIHsKKwljb25zdCBjaGFyICpuYW1lOworCWludCB0eXBlOworCXVuc2lnbmVkIGxvbmcgcHJpdmF0ZV92YWx1ZTsKK307CisKKyNkZWZpbmUgU0JfU0lOR0xFKHhuYW1lLCByZWcsIHNoaWZ0LCBtYXNrKSBcCit7IC5uYW1lID0geG5hbWUsIFwKKyAgLnR5cGUgPSBTQl9NSVhfU0lOR0xFLCBcCisgIC5wcml2YXRlX3ZhbHVlID0gU0JfTUlYVkFMX1NJTkdMRShyZWcsIHNoaWZ0LCBtYXNrKSB9CisKKyNkZWZpbmUgU0JfRE9VQkxFKHhuYW1lLCBsZWZ0X3JlZywgcmlnaHRfcmVnLCBsZWZ0X3NoaWZ0LCByaWdodF9zaGlmdCwgbWFzaykgXAoreyAubmFtZSA9IHhuYW1lLCBcCisgIC50eXBlID0gU0JfTUlYX0RPVUJMRSwgXAorICAucHJpdmF0ZV92YWx1ZSA9IFNCX01JWFZBTF9ET1VCTEUobGVmdF9yZWcsIHJpZ2h0X3JlZywgbGVmdF9zaGlmdCwgcmlnaHRfc2hpZnQsIG1hc2spIH0KKworI2RlZmluZSBTQjE2X0lOUFVUX1NXKHhuYW1lLCByZWcxLCByZWcyLCBsZWZ0X3NoaWZ0LCByaWdodF9zaGlmdCkgXAoreyAubmFtZSA9IHhuYW1lLCBcCisgIC50eXBlID0gU0JfTUlYX0lOUFVUX1NXLCBcCisgIC5wcml2YXRlX3ZhbHVlID0gU0JfTUlYVkFMX0lOUFVUX1NXKHJlZzEsIHJlZzIsIGxlZnRfc2hpZnQsIHJpZ2h0X3NoaWZ0KSB9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNuZF9zYm1peGVyX2FkZF9jdGxfZWxlbShzYl90ICpjaGlwLCBjb25zdCBzdHJ1Y3Qgc2JtaXhfZWxlbSAqYykKK3sKKwlyZXR1cm4gc25kX3NibWl4ZXJfYWRkX2N0bChjaGlwLCBjLT5uYW1lLCAwLCBjLT50eXBlLCBjLT5wcml2YXRlX3ZhbHVlKTsKK30KKworI2VuZGlmIC8qIF9fU09VTkRfU0JfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9zYjE2X2NzcC5oIGIvaW5jbHVkZS9zb3VuZC9zYjE2X2NzcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViODM2OGIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3NvdW5kL3NiMTZfY3NwLmgKQEAgLTAsMCArMSwxNjcgQEAKKyNpZm5kZWYgX19TT1VORF9TQjE2X0NTUF9ICisjZGVmaW5lIF9fU09VTkRfU0IxNl9DU1BfSAorCisvKgorICogIENvcHlyaWdodCAoYykgMTk5OSBieSBVcm9zIEJpemphayA8dXJvc0Brc3MtbG9rYS5zaT4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgVGFrYXNoaSBJd2FpIDx0aXdhaUBzdXNlLmRlPgorICoKKyAqICBTQjE2QVNQL0FXRTMyIENTUCBjb250cm9sCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqCisgKi8KKworLyogQ1NQIG1vZGVzICovCisjZGVmaW5lIFNORFJWX1NCX0NTUF9NT0RFX05PTkUJCTB4MDAKKyNkZWZpbmUgU05EUlZfU0JfQ1NQX01PREVfRFNQX1JFQUQJMHgwMQkvKiBSZWNvcmQgZnJvbSBEU1AgKi8KKyNkZWZpbmUgU05EUlZfU0JfQ1NQX01PREVfRFNQX1dSSVRFCTB4MDIJLyogUGxheSB0byBEU1AgKi8KKyNkZWZpbmUgU05EUlZfU0JfQ1NQX01PREVfUVNPVU5ECQkweDA0CS8qIFFTb3VuZCAqLworCisvKiBDU1AgbG9hZCBmbGFncyAqLworI2RlZmluZSBTTkRSVl9TQl9DU1BfTE9BRF9GUk9NVVNFUgkweDAxCisjZGVmaW5lIFNORFJWX1NCX0NTUF9MT0FEX0lOSVRCTE9DSwkweDAyCisKKy8qIENTUCBzYW1wbGUgd2lkdGggKi8KKyNkZWZpbmUgU05EUlZfU0JfQ1NQX1NBTVBMRV84QklUCQkweDAxCisjZGVmaW5lIFNORFJWX1NCX0NTUF9TQU1QTEVfMTZCSVQJCTB4MDIKKworLyogQ1NQIGNoYW5uZWxzICovCisjZGVmaW5lIFNORFJWX1NCX0NTUF9NT05PCQkJMHgwMQorI2RlZmluZSBTTkRSVl9TQl9DU1BfU1RFUkVPCQkweDAyCisKKy8qIENTUCByYXRlcyAqLworI2RlZmluZSBTTkRSVl9TQl9DU1BfUkFURV84MDAwCQkweDAxCisjZGVmaW5lIFNORFJWX1NCX0NTUF9SQVRFXzExMDI1CQkweDAyCisjZGVmaW5lIFNORFJWX1NCX0NTUF9SQVRFXzIyMDUwCQkweDA0CisjZGVmaW5lIFNORFJWX1NCX0NTUF9SQVRFXzQ0MTAwCQkweDA4CisjZGVmaW5lIFNORFJWX1NCX0NTUF9SQVRFX0FMTAkJMHgwZgorCisvKiBDU1AgcnVubmluZyBzdGF0ZSAqLworI2RlZmluZSBTTkRSVl9TQl9DU1BfU1RfSURMRQkJMHgwMAorI2RlZmluZSBTTkRSVl9TQl9DU1BfU1RfTE9BREVECQkweDAxCisjZGVmaW5lIFNORFJWX1NCX0NTUF9TVF9SVU5OSU5HCQkweDAyCisjZGVmaW5lIFNORFJWX1NCX0NTUF9TVF9QQVVTRUQJCTB4MDQKKyNkZWZpbmUgU05EUlZfU0JfQ1NQX1NUX0FVVE8JCTB4MDgKKyNkZWZpbmUgU05EUlZfU0JfQ1NQX1NUX1FTT1VORAkJMHgxMAorCisvKiBtYXhpbXVtIFFTb3VuZCB2YWx1ZSAoMTgwIGRlZ3JlZXMgcmlnaHQpICovCisjZGVmaW5lIFNORFJWX1NCX0NTUF9RU09VTkRfTUFYX1JJR0hUCTB4MjAKKworLyogbWF4aW11bSBtaWNyb2NvZGUgUklGRiBmaWxlIHNpemUgKi8KKyNkZWZpbmUgU05EUlZfU0JfQ1NQX01BWF9NSUNST0NPREVfRklMRV9TSVpFCTB4MzAwMAorCisvKiBtaWNyb2NvZGUgaGVhZGVyICovCit0eXBlZGVmIHN0cnVjdCBzbmRfc2JfY3NwX21jX2hlYWRlciB7CisJY2hhciBjb2RlY19uYW1lWzE2XTsJCS8qIGlkIG5hbWUgb2YgY29kZWMgKi8KKwl1bnNpZ25lZCBzaG9ydCBmdW5jX3JlcTsJLyogcmVxdWVzdGVkIGZ1bmN0aW9uICovCit9IHNuZF9zYl9jc3BfbWNfaGVhZGVyX3Q7CisKKy8qIG1pY3JvY29kZSB0byBiZSBsb2FkZWQgKi8KK3R5cGVkZWYgc3RydWN0IHNuZF9zYl9jc3BfbWljcm9jb2RlIHsKKwlzbmRfc2JfY3NwX21jX2hlYWRlcl90IGluZm87CisJdW5zaWduZWQgY2hhciBkYXRhW1NORFJWX1NCX0NTUF9NQVhfTUlDUk9DT0RFX0ZJTEVfU0laRV07Cit9IHNuZF9zYl9jc3BfbWljcm9jb2RlX3Q7CisKKy8qIHN0YXJ0IENTUCB3aXRoIHNhbXBsZV93aWR0aCBpbiBtb25vL3N0ZXJlbyAqLwordHlwZWRlZiBzdHJ1Y3Qgc25kX3NiX2NzcF9zdGFydCB7CisJaW50IHNhbXBsZV93aWR0aDsJLyogc2FtcGxlIHdpZHRoLCBsb29rIGFib3ZlICovCisJaW50IGNoYW5uZWxzOwkJLyogY2hhbm5lbHMsIGxvb2sgYWJvdmUgKi8KK30gc25kX3NiX2NzcF9zdGFydF90OworCisvKiBDU1AgaW5mb3JtYXRpb24gKi8KK3R5cGVkZWYgc3RydWN0IHNuZF9zYl9jc3BfaW5mbyB7CisJY2hhciBjb2RlY19uYW1lWzE2XTsJCS8qIGlkIG5hbWUgb2YgY29kZWMgKi8KKwl1bnNpZ25lZCBzaG9ydCBmdW5jX25yOwkJLyogZnVuY3Rpb24gbnVtYmVyICovCisJdW5zaWduZWQgaW50IGFjY19mb3JtYXQ7CS8qIGFjY2VwdGVkIFBDTSBmb3JtYXRzICovCisJdW5zaWduZWQgc2hvcnQgYWNjX2NoYW5uZWxzOwkvKiBhY2NlcHRlZCBjaGFubmVscyAqLworCXVuc2lnbmVkIHNob3J0IGFjY193aWR0aDsJLyogYWNjZXB0ZWQgc2FtcGxlIHdpZHRoICovCisJdW5zaWduZWQgc2hvcnQgYWNjX3JhdGVzOwkvKiBhY2NlcHRlZCBzYW1wbGUgcmF0ZXMgKi8KKwl1bnNpZ25lZCBzaG9ydCBjc3BfbW9kZTsJLyogQ1NQIG1vZGUsIHNlZSBhYm92ZSAqLworCXVuc2lnbmVkIHNob3J0IHJ1bl9jaGFubmVsczsJLyogY3VycmVudCBjaGFubmVscyAgKi8KKwl1bnNpZ25lZCBzaG9ydCBydW5fd2lkdGg7CS8qIGN1cnJlbnQgc2FtcGxlIHdpZHRoICovCisJdW5zaWduZWQgc2hvcnQgdmVyc2lvbjsJCS8qIHZlcnNpb24gaWQ6IDB4MTAgLSAweDFmICovCisJdW5zaWduZWQgc2hvcnQgc3RhdGU7CQkvKiBzdGF0ZSBiaXRzICovCit9IHNuZF9zYl9jc3BfaW5mb190OworCisvKiBIV0RFUCBjb250cm9scyAqLworLyogZ2V0IENTUCBpbmZvcm1hdGlvbiAqLworI2RlZmluZSBTTkRSVl9TQl9DU1BfSU9DVExfSU5GTwkJX0lPUignSCcsIDB4MTAsIHNuZF9zYl9jc3BfaW5mb190KQorLyogbG9hZCBtaWNyb2NvZGUgdG8gQ1NQICovCisjZGVmaW5lIFNORFJWX1NCX0NTUF9JT0NUTF9MT0FEX0NPREUJX0lPVygnSCcsIDB4MTEsIHNuZF9zYl9jc3BfbWljcm9jb2RlX3QpCisvKiB1bmxvYWQgbWljcm9jb2RlIGZyb20gQ1NQICovCisjZGVmaW5lIFNORFJWX1NCX0NTUF9JT0NUTF9VTkxPQURfQ09ERQlfSU8oJ0gnLCAweDEyKQorLyogc3RhcnQgQ1NQICovCisjZGVmaW5lIFNORFJWX1NCX0NTUF9JT0NUTF9TVEFSVAkJX0lPVygnSCcsIDB4MTMsIHNuZF9zYl9jc3Bfc3RhcnRfdCkKKy8qIHN0b3AgQ1NQICovCisjZGVmaW5lIFNORFJWX1NCX0NTUF9JT0NUTF9TVE9QCQlfSU8oJ0gnLCAweDE0KQorLyogcGF1c2UgQ1NQIGFuZCBETUEgdHJhbnNmZXIgKi8KKyNkZWZpbmUgU05EUlZfU0JfQ1NQX0lPQ1RMX1BBVVNFCQlfSU8oJ0gnLCAweDE1KQorLyogcmVzdGFydCBDU1AgYW5kIERNQSB0cmFuc2ZlciAqLworI2RlZmluZSBTTkRSVl9TQl9DU1BfSU9DVExfUkVTVEFSVAlfSU8oJ0gnLCAweDE2KQorCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgInNiLmgiCisjaW5jbHVkZSAiaHdkZXAuaCIKKwordHlwZWRlZiBzdHJ1Y3Qgc25kX3NiX2NzcCBzbmRfc2JfY3NwX3Q7CisKKy8qCisgKiBDU1Agb3BlcmF0b3JzCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwlpbnQgKCpjc3BfdXNlKSAoc25kX3NiX2NzcF90ICogcCk7CisJaW50ICgqY3NwX3VudXNlKSAoc25kX3NiX2NzcF90ICogcCk7CisJaW50ICgqY3NwX2F1dG9sb2FkKSAoc25kX3NiX2NzcF90ICogcCwgaW50IHBjbV9zZm10LCBpbnQgcGxheV9yZWNfbW9kZSk7CisJaW50ICgqY3NwX3N0YXJ0KSAoc25kX3NiX2NzcF90ICogcCwgaW50IHNhbXBsZV93aWR0aCwgaW50IGNoYW5uZWxzKTsKKwlpbnQgKCpjc3Bfc3RvcCkgKHNuZF9zYl9jc3BfdCAqIHApOworCWludCAoKmNzcF9xc291bmRfdHJhbnNmZXIpIChzbmRfc2JfY3NwX3QgKiBwKTsKK30gc25kX3NiX2NzcF9vcHNfdDsKKworLyoKKyAqIENTUCBwcml2YXRlIGRhdGEKKyAqLworc3RydWN0IHNuZF9zYl9jc3AgeworCXNiX3QgKmNoaXA7CQkvKiBTQjE2IERTUCAqLworCWludCB1c2VkOwkJLyogdXNhZ2UgZmxhZyAtIGV4Y2x1c2l2ZSAqLworCWNoYXIgY29kZWNfbmFtZVsxNl07CS8qIG5hbWUgb2YgY29kZWMgKi8KKwl1bnNpZ25lZCBzaG9ydCBmdW5jX25yOwkvKiBmdW5jdGlvbiBudW1iZXIgKi8KKwl1bnNpZ25lZCBpbnQgYWNjX2Zvcm1hdDsJLyogYWNjZXB0ZWQgUENNIGZvcm1hdHMgKi8KKwlpbnQgYWNjX2NoYW5uZWxzOwkvKiBhY2NlcHRlZCBjaGFubmVscyAqLworCWludCBhY2Nfd2lkdGg7CQkvKiBhY2NlcHRlZCBzYW1wbGUgd2lkdGggKi8KKwlpbnQgYWNjX3JhdGVzOwkJLyogYWNjZXB0ZWQgc2FtcGxlIHJhdGVzICovCisJaW50IG1vZGU7CQkvKiBNT0RFICovCisJaW50IHJ1bl9jaGFubmVsczsJLyogY3VycmVudCBDU1AgY2hhbm5lbHMgKi8KKwlpbnQgcnVuX3dpZHRoOwkJLyogY3VycmVudCBzYW1wbGUgd2lkdGggKi8KKwlpbnQgdmVyc2lvbjsJCS8qIENTUCB2ZXJzaW9uICgweDEwIC0gMHgxZikgKi8KKwlpbnQgcnVubmluZzsJCS8qIHJ1bm5pbmcgc3RhdGUgKi8KKworCXNuZF9zYl9jc3Bfb3BzX3Qgb3BzOwkvKiBvcGVyYXRvcnMgKi8KKworCXNwaW5sb2NrX3QgcV9sb2NrOwkvKiBsb2NraW5nICovCisJaW50IHFfZW5hYmxlZDsJCS8qIGVuYWJsZWQgZmxhZyAqLworCWludCBxcG9zX2xlZnQ7CQkvKiBsZWZ0IHBvc2l0aW9uICovCisJaW50IHFwb3NfcmlnaHQ7CQkvKiByaWdodCBwb3NpdGlvbiAqLworCWludCBxcG9zX2NoYW5nZWQ7CS8qIHBvc2l0aW9uIGNoYW5nZWQgZmxhZyAqLworCisJc25kX2tjb250cm9sX3QgKnFzb3VuZF9zd2l0Y2g7CisJc25kX2tjb250cm9sX3QgKnFzb3VuZF9zcGFjZTsKKworCXN0cnVjdCBzZW1hcGhvcmUgYWNjZXNzX211dGV4OwkvKiBsb2NraW5nICovCit9OworCitpbnQgc25kX3NiX2NzcF9uZXcoc2JfdCAqY2hpcCwgaW50IGRldmljZSwgc25kX2h3ZGVwX3QgKiogcmh3ZGVwKTsKKyNlbmRpZgorCisjZW5kaWYgLyogX19TT1VORF9TQjE2X0NTUCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9zZXFfZGV2aWNlLmggYi9pbmNsdWRlL3NvdW5kL3NlcV9kZXZpY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDRjYTU0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9zb3VuZC9zZXFfZGV2aWNlLmgKQEAgLTAsMCArMSw4OCBAQAorI2lmbmRlZiBfX1NPVU5EX1NFUV9ERVZJQ0VfSAorI2RlZmluZSBfX1NPVU5EX1NFUV9ERVZJQ0VfSAorCisvKgorICogIEFMU0Egc2VxdWVuY2VyIGRldmljZSBtYW5hZ2VtZW50CisgKiAgQ29weXJpZ2h0IChjKSAxOTk5IGJ5IFRha2FzaGkgSXdhaSA8dGl3YWlAc3VzZS5kZT4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKgorICovCisKK3R5cGVkZWYgc3RydWN0IHNuZF9zZXFfZGV2aWNlIHNuZF9zZXFfZGV2aWNlX3Q7Cit0eXBlZGVmIHN0cnVjdCBzbmRfc2VxX2Rldl9vcHMgc25kX3NlcV9kZXZfb3BzX3Q7CisKKy8qCisgKiByZWdpc3RlcmVkIGRldmljZSBpbmZvcm1hdGlvbgorICovCisKKyNkZWZpbmUgSURfTEVOCTMyCisKKy8qIHN0YXR1cyBmbGFnICovCisjZGVmaW5lIFNORFJWX1NFUV9ERVZJQ0VfRlJFRQkJMAorI2RlZmluZSBTTkRSVl9TRVFfREVWSUNFX1JFR0lTVEVSRUQJMQorCitzdHJ1Y3Qgc25kX3NlcV9kZXZpY2UgeworCS8qIGRldmljZSBpbmZvICovCisJc25kX2NhcmRfdCAqY2FyZDsJLyogc291bmQgY2FyZCAqLworCWludCBkZXZpY2U7CQkvKiBkZXZpY2UgbnVtYmVyICovCisJY2hhciBpZFtJRF9MRU5dOwkvKiBkcml2ZXIgaWQgKi8KKwljaGFyIG5hbWVbODBdOwkJLyogZGV2aWNlIG5hbWUgKi8KKwlpbnQgYXJnc2l6ZTsJCS8qIHNpemUgb2YgdGhlIGFyZ3VtZW50ICovCisJdm9pZCAqZHJpdmVyX2RhdGE7CS8qIHByaXZhdGUgZGF0YSBmb3IgZHJpdmVyICovCisJaW50IHN0YXR1czsJCS8qIGZsYWcgLSByZWFkIG9ubHkgKi8KKwl2b2lkICpwcml2YXRlX2RhdGE7CS8qIHByaXZhdGUgZGF0YSBmb3IgdGhlIGNhbGxlciAqLworCXZvaWQgKCpwcml2YXRlX2ZyZWUpKHNuZF9zZXFfZGV2aWNlX3QgKmRldmljZSk7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwkvKiBsaW5rIHRvIG5leHQgZGV2aWNlICovCit9OworCisKKy8qIGRyaXZlciBvcGVyYXRvcnMKKyAqIGluaXRfZGV2aWNlOgorICoJSW5pdGlhbGl6ZSB0aGUgZGV2aWNlIHdpdGggZ2l2ZW4gcGFyYW1ldGVycy4KKyAqCVR5cGljYWxseSwKKyAqCQkxLiBjYWxsIHNuZF9od2RlcF9uZXcKKyAqCQkyLiBhbGxvY2F0ZSBwcml2YXRlIGRhdGEgYW5kIGluaXRpYWxpemUgaXQKKyAqCQkzLiBjYWxsIHNuZF9od2RlcF9yZWdpc3RlcgorICoJCTQuIHN0b3JlIHRoZSBpbnN0YW5jZSB0byBkZXYtPmRyaXZlcl9kYXRhIHBvaW50ZXIuCisgKgkJCisgKiBmcmVlX2RldmljZToKKyAqCVJlbGVhc2UgdGhlIHByaXZhdGUgZGF0YS4KKyAqCVR5cGljYWxseSwgY2FsbCBzbmRfZGV2aWNlX2ZyZWUoZGV2LT5jYXJkLCBkZXYtPmRyaXZlcl9kYXRhKQorICovCitzdHJ1Y3Qgc25kX3NlcV9kZXZfb3BzIHsKKwlpbnQgKCppbml0X2RldmljZSkoc25kX3NlcV9kZXZpY2VfdCAqZGV2KTsKKwlpbnQgKCpmcmVlX2RldmljZSkoc25kX3NlcV9kZXZpY2VfdCAqZGV2KTsKK307CisKKy8qCisgKiBwcm90b3R5cGVzCisgKi8KK3ZvaWQgc25kX3NlcV9kZXZpY2VfbG9hZF9kcml2ZXJzKHZvaWQpOworaW50IHNuZF9zZXFfZGV2aWNlX25ldyhzbmRfY2FyZF90ICpjYXJkLCBpbnQgZGV2aWNlLCBjaGFyICppZCwgaW50IGFyZ3NpemUsIHNuZF9zZXFfZGV2aWNlX3QgKipyZXN1bHQpOworaW50IHNuZF9zZXFfZGV2aWNlX3JlZ2lzdGVyX2RyaXZlcihjaGFyICppZCwgc25kX3NlcV9kZXZfb3BzX3QgKmVudHJ5LCBpbnQgYXJnc2l6ZSk7CitpbnQgc25kX3NlcV9kZXZpY2VfdW5yZWdpc3Rlcl9kcml2ZXIoY2hhciAqaWQpOworCisjZGVmaW5lIFNORFJWX1NFUV9ERVZJQ0VfQVJHUFRSKGRldikgKHZvaWQgKikoKGNoYXIgKikoZGV2KSArIHNpemVvZihzbmRfc2VxX2RldmljZV90KSkKKworCisvKgorICogaWQgc3RyaW5ncyBmb3IgZ2VuZXJpYyBkZXZpY2VzCisgKi8KKyNkZWZpbmUgU05EUlZfU0VRX0RFVl9JRF9NSURJU1lOVEgJInNlcS1taWRpIgorI2RlZmluZSBTTkRSVl9TRVFfREVWX0lEX09QTDMJCSJvcGwzLXN5bnRoIgorCisKKyNlbmRpZiAvKiBfX1NPVU5EX1NFUV9ERVZJQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9zZXFfaW5zdHIuaCBiL2luY2x1ZGUvc291bmQvc2VxX2luc3RyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE2NTRkZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvc291bmQvc2VxX2luc3RyLmgKQEAgLTAsMCArMSwxMTIgQEAKKyNpZm5kZWYgX19TT1VORF9TRVFfSU5TVFJfSAorI2RlZmluZSBfX1NPVU5EX1NFUV9JTlNUUl9ICisKKy8qCisgKiAgTWFpbiBrZXJuZWwgaGVhZGVyIGZpbGUgZm9yIHRoZSBBTFNBIHNlcXVlbmNlcgorICogIENvcHlyaWdodCAoYykgMTk5OSBieSBKYXJvc2xhdiBLeXNlbGEgPHBlcmV4QHN1c2UuY3o+CisgKgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqCisgKi8KKyNpbmNsdWRlICJzZXFfa2VybmVsLmgiCisKKy8qIEluc3RydW1lbnQgY2x1c3RlciAqLwordHlwZWRlZiBzdHJ1Y3QgX3NuZF9zZXFfa2NsdXN0ZXIgeworCXNuZF9zZXFfaW5zdHJfY2x1c3Rlcl90IGNsdXN0ZXI7CisJY2hhciBuYW1lWzMyXTsKKwlpbnQgcHJpb3JpdHk7CisJc3RydWN0IF9zbmRfc2VxX2tjbHVzdGVyICpuZXh0OworfSBzbmRfc2VxX2tjbHVzdGVyX3Q7CisKKy8qIHJldHVybiBwb2ludGVyIHRvIHByaXZhdGUgZGF0YSAqLworI2RlZmluZSBLSU5TVFJfREFUQShraW5zdHIpCSh2b2lkICopKCgoY2hhciAqKWtpbnN0cikgKyBzaXplb2Yoc25kX3NlcV9raW5zdHJfdCkpCisKK3R5cGVkZWYgc3RydWN0IHNuZF9zZXFfa2luc3RyX29wcyBzbmRfc2VxX2tpbnN0cl9vcHNfdDsKKworLyogSW5zdHJ1bWVudCBzdHJ1Y3R1cmUgKi8KK3R5cGVkZWYgc3RydWN0IF9zbmRfc2VxX2tpbnN0ciB7CisJc25kX3NlcV9pbnN0cl90IGluc3RyOworCWNoYXIgbmFtZVszMl07CisJaW50IHR5cGU7CQkJLyogaW5zdHJ1bWVudCB0eXBlICovCisJaW50IHVzZTsJCQkvKiB1c2UgY291bnQgKi8KKwlpbnQgYnVzeTsJCQkvKiBub3QgdXNlYWJsZSAqLworCWludCBhZGRfbGVuOwkJCS8qIGFkZGl0aW9uYWwgbGVuZ3RoICovCisJc25kX3NlcV9raW5zdHJfb3BzX3QgKm9wczsJLyogb3BlcmF0aW9ucyAqLworCXN0cnVjdCBfc25kX3NlcV9raW5zdHIgKm5leHQ7Cit9IHNuZF9zZXFfa2luc3RyX3Q7CisKKyNkZWZpbmUgU05EUlZfU0VRX0lOU1RSX0hBU0hfU0laRQkJMzIKKworLyogSW5zdHJ1bWVudCBmbGFncyAqLworI2RlZmluZSBTTkRSVl9TRVFfSU5TVFJfRkxHX0RJUkVDVAkoMTw8MCkJLyogYWNjZXB0IG9ubHkgZGlyZWN0IGV2ZW50cyAqLworCisvKiBMaXN0IG9mIGFsbCBpbnN0cnVtZW50cyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCXNuZF9zZXFfa2luc3RyX3QgKmhhc2hbU05EUlZfU0VRX0lOU1RSX0hBU0hfU0laRV07CisJaW50IGNvdW50OwkJCS8qIGNvdW50IG9mIGFsbCBpbnN0cnVtZW50cyAqLworCQorCXNuZF9zZXFfa2NsdXN0ZXJfdCAqY2hhc2hbU05EUlZfU0VRX0lOU1RSX0hBU0hfU0laRV07CisJaW50IGNjb3VudDsJCQkvKiBjb3VudCBvZiBhbGwgY2x1c3RlcnMgKi8KKworCWludCBvd25lcjsJCQkvKiBjdXJyZW50IG93bmVyIG9mIHRoZSBpbnN0cnVtZW50IGxpc3QgKi8KKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CisKKwlzcGlubG9ja190IGxvY2s7CisJc3BpbmxvY2tfdCBvcHNfbG9jazsKKwlzdHJ1Y3Qgc2VtYXBob3JlIG9wc19tdXRleDsKKwl1bnNpZ25lZCBsb25nIG9wc19mbGFnczsKK30gc25kX3NlcV9raW5zdHJfbGlzdF90OworCisjZGVmaW5lIFNORFJWX1NFUV9JTlNUUl9OT1RJRllfUkVNT1ZFCTAKKyNkZWZpbmUgU05EUlZfU0VRX0lOU1RSX05PVElGWV9DSEFOR0UJMQorCitzdHJ1Y3Qgc25kX3NlcV9raW5zdHJfb3BzIHsKKwl2b2lkICpwcml2YXRlX2RhdGE7CisJbG9uZyBhZGRfbGVuOwkJCS8qIGFkZGl0aW9uYWwgbGVuZ3RoICovCisJY2hhciAqaW5zdHJfdHlwZTsKKwlpbnQgKCppbmZvKSh2b2lkICpwcml2YXRlX2RhdGEsIGNoYXIgKmluZm9fZGF0YSwgbG9uZyBsZW4pOworCWludCAoKnB1dCkodm9pZCAqcHJpdmF0ZV9kYXRhLCBzbmRfc2VxX2tpbnN0cl90ICpraW5zdHIsCisJCSAgIGNoYXIgX191c2VyICppbnN0cl9kYXRhLCBsb25nIGxlbiwgaW50IGF0b21pYywgaW50IGNtZCk7CisJaW50ICgqZ2V0KSh2b2lkICpwcml2YXRlX2RhdGEsIHNuZF9zZXFfa2luc3RyX3QgKmtpbnN0ciwKKwkJICAgY2hhciBfX3VzZXIgKmluc3RyX2RhdGEsIGxvbmcgbGVuLCBpbnQgYXRvbWljLCBpbnQgY21kKTsKKwlpbnQgKCpnZXRfc2l6ZSkodm9pZCAqcHJpdmF0ZV9kYXRhLCBzbmRfc2VxX2tpbnN0cl90ICpraW5zdHIsIGxvbmcgKnNpemUpOworCWludCAoKnJlbW92ZSkodm9pZCAqcHJpdmF0ZV9kYXRhLCBzbmRfc2VxX2tpbnN0cl90ICpraW5zdHIsIGludCBhdG9taWMpOworCXZvaWQgKCpub3RpZnkpKHZvaWQgKnByaXZhdGVfZGF0YSwgc25kX3NlcV9raW5zdHJfdCAqa2luc3RyLCBpbnQgd2hhdCk7CisJc3RydWN0IHNuZF9zZXFfa2luc3RyX29wcyAqbmV4dDsKK307CisKKworLyogaW5zdHJ1bWVudCBvcGVyYXRpb25zICovCitzbmRfc2VxX2tpbnN0cl9saXN0X3QgKnNuZF9zZXFfaW5zdHJfbGlzdF9uZXcodm9pZCk7Cit2b2lkIHNuZF9zZXFfaW5zdHJfbGlzdF9mcmVlKHNuZF9zZXFfa2luc3RyX2xpc3RfdCAqKmxpc3QpOworaW50IHNuZF9zZXFfaW5zdHJfbGlzdF9mcmVlX2NvbmQoc25kX3NlcV9raW5zdHJfbGlzdF90ICpsaXN0LAorCQkJCSBzbmRfc2VxX2luc3RyX2hlYWRlcl90ICppZnJlZSwKKwkJCQkgaW50IGNsaWVudCwKKwkJCQkgaW50IGF0b21pYyk7CitzbmRfc2VxX2tpbnN0cl90ICpzbmRfc2VxX2luc3RyX2ZpbmQoc25kX3NlcV9raW5zdHJfbGlzdF90ICpsaXN0LAorCQkJCSAgICAgc25kX3NlcV9pbnN0cl90ICppbnN0ciwKKwkJCQkgICAgIGludCBleGFjdCwKKwkJCQkgICAgIGludCBmb2xsb3dfYWxpYXMpOwordm9pZCBzbmRfc2VxX2luc3RyX2ZyZWVfdXNlKHNuZF9zZXFfa2luc3RyX2xpc3RfdCAqbGlzdCwKKwkJCSAgICBzbmRfc2VxX2tpbnN0cl90ICppbnN0cik7CitpbnQgc25kX3NlcV9pbnN0cl9ldmVudChzbmRfc2VxX2tpbnN0cl9vcHNfdCAqb3BzLAorCQkJc25kX3NlcV9raW5zdHJfbGlzdF90ICpsaXN0LAorCQkJc25kX3NlcV9ldmVudF90ICpldiwKKwkJCWludCBjbGllbnQsCisJCQlpbnQgYXRvbWljLAorCQkJaW50IGhvcCk7CisKKyNlbmRpZiAvKiBfX1NPVU5EX1NFUV9JTlNUUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3NlcV9rZXJuZWwuaCBiL2luY2x1ZGUvc291bmQvc2VxX2tlcm5lbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiZWNhMTkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3NvdW5kL3NlcV9rZXJuZWwuaApAQCAtMCwwICsxLDE5MSBAQAorI2lmbmRlZiBfX1NPVU5EX1NFUV9LRVJORUxfSAorI2RlZmluZSBfX1NPVU5EX1NFUV9LRVJORUxfSAorCisvKgorICogIE1haW4ga2VybmVsIGhlYWRlciBmaWxlIGZvciB0aGUgQUxTQSBzZXF1ZW5jZXIKKyAqICBDb3B5cmlnaHQgKGMpIDE5OTggYnkgRnJhbmsgdmFuIGRlIFBvbCA8ZnZkcG9sQGNvaWwuZGVtb24ubmw+CisgKgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSAiYXNlcXVlbmNlci5oIgorCit0eXBlZGVmIHNuZHJ2X3NlcV90aWNrX3RpbWVfdCBzbmRfc2VxX3RpY2tfdGltZV90OwordHlwZWRlZiBzbmRydl9zZXFfcG9zaXRpb25fdCBzbmRfc2VxX3Bvc2l0aW9uX3Q7Cit0eXBlZGVmIHNuZHJ2X3NlcV9mcmVxdWVuY3lfdCBzbmRfc2VxX2ZyZXF1ZW5jeV90OwordHlwZWRlZiBzbmRydl9zZXFfaW5zdHJfY2x1c3Rlcl90IHNuZF9zZXFfaW5zdHJfY2x1c3Rlcl90OwordHlwZWRlZiBlbnVtIHNuZHJ2X3NlcV9jbGllbnRfdHlwZSBzbmRfc2VxX2NsaWVudF90eXBlX3Q7Cit0eXBlZGVmIGVudW0gc25kcnZfc2VxX3N0b3BfbW9kZSBzbmRfc2VxX3N0b3BfbW9kZV90OwordHlwZWRlZiBzdHJ1Y3Qgc25kcnZfc2VxX3BvcnRfaW5mbyBzbmRfc2VxX3BvcnRfaW5mb190OwordHlwZWRlZiBzdHJ1Y3Qgc25kcnZfc2VxX3BvcnRfc3Vic2NyaWJlIHNuZF9zZXFfcG9ydF9zdWJzY3JpYmVfdDsKK3R5cGVkZWYgc3RydWN0IHNuZHJ2X3NlcV9ldmVudCBzbmRfc2VxX2V2ZW50X3Q7Cit0eXBlZGVmIHN0cnVjdCBzbmRydl9zZXFfYWRkciBzbmRfc2VxX2FkZHJfdDsKK3R5cGVkZWYgc3RydWN0IHNuZHJ2X3NlcV9ldl92b2x1bWUgc25kX3NlcV9ldl92b2x1bWVfdDsKK3R5cGVkZWYgc3RydWN0IHNuZHJ2X3NlcV9ldl9sb29wIHNuZF9zZXFfZXZfbG9vcF90OwordHlwZWRlZiBzdHJ1Y3Qgc25kcnZfc2VxX3JlbW92ZV9ldmVudHMgc25kX3NlcV9yZW1vdmVfZXZlbnRzX3Q7Cit0eXBlZGVmIHN0cnVjdCBzbmRydl9zZXFfcXVlcnlfc3VicyBzbmRfc2VxX3F1ZXJ5X3N1YnNfdDsKK3R5cGVkZWYgc3RydWN0IHNuZHJ2X3NlcV9yZWFsX3RpbWUgc25kX3NlcV9yZWFsX3RpbWVfdDsKK3R5cGVkZWYgc3RydWN0IHNuZHJ2X3NlcV9zeXN0ZW1faW5mbyBzbmRfc2VxX3N5c3RlbV9pbmZvX3Q7Cit0eXBlZGVmIHN0cnVjdCBzbmRydl9zZXFfY2xpZW50X2luZm8gc25kX3NlcV9jbGllbnRfaW5mb190OwordHlwZWRlZiBzdHJ1Y3Qgc25kcnZfc2VxX3F1ZXVlX2luZm8gc25kX3NlcV9xdWV1ZV9pbmZvX3Q7Cit0eXBlZGVmIHN0cnVjdCBzbmRydl9zZXFfcXVldWVfc3RhdHVzIHNuZF9zZXFfcXVldWVfc3RhdHVzX3Q7Cit0eXBlZGVmIHN0cnVjdCBzbmRydl9zZXFfcXVldWVfdGVtcG8gc25kX3NlcV9xdWV1ZV90ZW1wb190OwordHlwZWRlZiBzdHJ1Y3Qgc25kcnZfc2VxX3F1ZXVlX293bmVyIHNuZF9zZXFfcXVldWVfb3duZXJfdDsKK3R5cGVkZWYgc3RydWN0IHNuZHJ2X3NlcV9xdWV1ZV90aW1lciBzbmRfc2VxX3F1ZXVlX3RpbWVyX3Q7Cit0eXBlZGVmIHN0cnVjdCBzbmRydl9zZXFfcXVldWVfY2xpZW50IHNuZF9zZXFfcXVldWVfY2xpZW50X3Q7Cit0eXBlZGVmIHN0cnVjdCBzbmRydl9zZXFfY2xpZW50X3Bvb2wgc25kX3NlcV9jbGllbnRfcG9vbF90OwordHlwZWRlZiBzdHJ1Y3Qgc25kcnZfc2VxX2luc3RyIHNuZF9zZXFfaW5zdHJfdDsKK3R5cGVkZWYgc3RydWN0IHNuZHJ2X3NlcV9pbnN0cl9kYXRhIHNuZF9zZXFfaW5zdHJfZGF0YV90OwordHlwZWRlZiBzdHJ1Y3Qgc25kcnZfc2VxX2luc3RyX2hlYWRlciBzbmRfc2VxX2luc3RyX2hlYWRlcl90OwordHlwZWRlZiB1bmlvbiBzbmRydl9zZXFfdGltZXN0YW1wIHNuZF9zZXFfdGltZXN0YW1wX3Q7CisKKyNkZWZpbmUgc25kX3NlcV9ldmVudF9ib3VuY2VfZXh0X2RhdGEJc25kcnZfc2VxX2V2ZW50X2JvdW5jZV9leHRfZGF0YSAKKyNkZWZpbmUgc25kX3NlcV9ldl9pc19yZXN1bHRfdHlwZQlzbmRydl9zZXFfZXZfaXNfcmVzdWx0X3R5cGUgICAgIAorI2RlZmluZSBzbmRfc2VxX2V2X2lzX2NoYW5uZWxfdHlwZQlzbmRydl9zZXFfZXZfaXNfY2hhbm5lbF90eXBlICAgIAorI2RlZmluZSBzbmRfc2VxX2V2X2lzX25vdGVfdHlwZQkJc25kcnZfc2VxX2V2X2lzX25vdGVfdHlwZSAgICAgICAKKyNkZWZpbmUgc25kX3NlcV9ldl9pc19jb250cm9sX3R5cGUJc25kcnZfc2VxX2V2X2lzX2NvbnRyb2xfdHlwZSAgICAKKyNkZWZpbmUgc25kX3NlcV9ldl9pc19xdWV1ZV90eXBlCXNuZHJ2X3NlcV9ldl9pc19xdWV1ZV90eXBlICAgICAgCisjZGVmaW5lIHNuZF9zZXFfZXZfaXNfbWVzc2FnZV90eXBlCXNuZHJ2X3NlcV9ldl9pc19tZXNzYWdlX3R5cGUgICAgCisjZGVmaW5lIHNuZF9zZXFfZXZfaXNfc2FtcGxlX3R5cGUJc25kcnZfc2VxX2V2X2lzX3NhbXBsZV90eXBlICAgICAKKyNkZWZpbmUgc25kX3NlcV9ldl9pc191c2VyX3R5cGUJCXNuZHJ2X3NlcV9ldl9pc191c2VyX3R5cGUgICAgICAgCisjZGVmaW5lIHNuZF9zZXFfZXZfaXNfZml4ZWRfdHlwZQlzbmRydl9zZXFfZXZfaXNfZml4ZWRfdHlwZSAgICAgIAorI2RlZmluZSBzbmRfc2VxX2V2X2lzX2luc3RyX3R5cGUJc25kcnZfc2VxX2V2X2lzX2luc3RyX3R5cGUgICAgICAKKyNkZWZpbmUgc25kX3NlcV9ldl9pc192YXJpYWJsZV90eXBlCXNuZHJ2X3NlcV9ldl9pc192YXJpYWJsZV90eXBlICAgCisjZGVmaW5lIHNuZF9zZXFfZXZfaXNfcmVzZXJ2ZWQJCXNuZHJ2X3NlcV9ldl9pc19yZXNlcnZlZCAgICAgICAgCisjZGVmaW5lIHNuZF9zZXFfZXZfaXNfZGlyZWN0CQlzbmRydl9zZXFfZXZfaXNfZGlyZWN0ICAgICAgICAgIAorI2RlZmluZSBzbmRfc2VxX2V2X2lzX3ByaW9yCQlzbmRydl9zZXFfZXZfaXNfcHJpb3IgICAgICAgICAgIAorI2RlZmluZSBzbmRfc2VxX2V2X2xlbmd0aF90eXBlCQlzbmRydl9zZXFfZXZfbGVuZ3RoX3R5cGUgICAgICAgIAorI2RlZmluZSBzbmRfc2VxX2V2X2lzX2ZpeGVkCQlzbmRydl9zZXFfZXZfaXNfZml4ZWQgICAgICAgICAgIAorI2RlZmluZSBzbmRfc2VxX2V2X2lzX3ZhcmlhYmxlCQlzbmRydl9zZXFfZXZfaXNfdmFyaWFibGUgICAgICAgIAorI2RlZmluZSBzbmRfc2VxX2V2X2lzX3ZhcnVzcgkJc25kcnZfc2VxX2V2X2lzX3ZhcnVzciAgICAgICAgICAKKyNkZWZpbmUgc25kX3NlcV9ldl90aW1lc3RhbXBfdHlwZQlzbmRydl9zZXFfZXZfdGltZXN0YW1wX3R5cGUgICAgIAorI2RlZmluZSBzbmRfc2VxX2V2X2lzX3RpY2sJCXNuZHJ2X3NlcV9ldl9pc190aWNrICAgICAgICAgICAgCisjZGVmaW5lIHNuZF9zZXFfZXZfaXNfcmVhbAkJc25kcnZfc2VxX2V2X2lzX3JlYWwgICAgICAgICAgICAKKyNkZWZpbmUgc25kX3NlcV9ldl90aW1lbW9kZV90eXBlCXNuZHJ2X3NlcV9ldl90aW1lbW9kZV90eXBlICAgICAgCisjZGVmaW5lIHNuZF9zZXFfZXZfaXNfYWJzdGltZQkJc25kcnZfc2VxX2V2X2lzX2Fic3RpbWUgICAgICAgICAKKyNkZWZpbmUgc25kX3NlcV9ldl9pc19yZWx0aW1lCQlzbmRydl9zZXFfZXZfaXNfcmVsdGltZSAgICAgICAgIAorI2RlZmluZSBzbmRfc2VxX3F1ZXVlX3N5bmNfcG9ydAkJc25kcnZfc2VxX3F1ZXVlX3N5bmNfcG9ydCAgICAgICAKKyNkZWZpbmUgc25kX3NlcV9xdWV1ZV9vd25lcgkJc25kcnZfc2VxX3F1ZXVlX293bmVyICAgICAgICAgICAKKworLyogbWF4aW11bSBudW1iZXIgb2YgZXZlbnRzIGRlcXVldWVkIHBlciBzY2hlZHVsZSBpbnRlcnZhbCAqLworI2RlZmluZSBTTkRSVl9TRVFfTUFYX0RFUVVFVUUJCTUwCisKKy8qIG1heGltdW0gbnVtYmVyIG9mIHF1ZXVlcyAqLworI2RlZmluZSBTTkRSVl9TRVFfTUFYX1FVRVVFUwkJOAorCisvKiBtYXggbnVtYmVyIG9mIGNvbmN1cnJlbnQgY2xpZW50cyAqLworI2RlZmluZSBTTkRSVl9TRVFfTUFYX0NMSUVOVFMgCQkxOTIKKworLyogbWF4IG51bWJlciBvZiBjb25jdXJyZW50IHBvcnRzICovCisjZGVmaW5lIFNORFJWX1NFUV9NQVhfUE9SVFMgCQkyNTQKKworLyogbWF4IG51bWJlciBvZiBldmVudHMgaW4gbWVtb3J5IHBvb2wgKi8KKyNkZWZpbmUgU05EUlZfU0VRX01BWF9FVkVOVFMJCTIwMDAKKworLyogZGVmYXVsdCBudW1iZXIgb2YgZXZlbnRzIGluIG1lbW9yeSBjaHVuayAqLworI2RlZmluZSBTTkRSVl9TRVFfREVGQVVMVF9DSFVOS19FVkVOVFMJNjQKKworLyogZGVmYXVsdCBudW1iZXIgb2YgZXZlbnRzIGluIG1lbW9yeSBwb29sICovCisjZGVmaW5lIFNORFJWX1NFUV9ERUZBVUxUX0VWRU5UUwk1MDAKKworLyogbWF4IG51bWJlciBvZiBldmVudHMgaW4gbWVtb3J5IHBvb2wgZm9yIG9uZSBjbGllbnQgKG91dHF1ZXVlKSAqLworI2RlZmluZSBTTkRSVl9TRVFfTUFYX0NMSUVOVF9FVkVOVFMJMjAwMAorCisvKiBkZWZhdWx0IG51bWJlciBvZiBldmVudHMgaW4gbWVtb3J5IHBvb2wgZm9yIG9uZSBjbGllbnQgKG91dHF1ZXVlKSAqLworI2RlZmluZSBTTkRSVl9TRVFfREVGQVVMVF9DTElFTlRfRVZFTlRTCTIwMAorCisvKiBtYXggZGVsaXZlcnkgcGF0aCBsZW5ndGggKi8KKyNkZWZpbmUgU05EUlZfU0VRX01BWF9IT1BTCQkxMAorCisvKiBtYXggc2l6ZSBvZiBldmVudCBzaXplICovCisjZGVmaW5lIFNORFJWX1NFUV9NQVhfRVZFTlRfTEVOCQkweDNmZmZmZmZmCisKKy8qIHR5cGVkZWZzICovCitzdHJ1Y3QgX3NuZF9zZXFfdXNlcl9jbGllbnQ7CitzdHJ1Y3QgX3NuZF9zZXFfa2VybmVsX2NsaWVudDsKK3N0cnVjdCBfc25kX3NlcV9jbGllbnQ7CitzdHJ1Y3QgX3NuZF9zZXFfcXVldWU7CisKK3R5cGVkZWYgc3RydWN0IF9zbmRfc2VxX3VzZXJfY2xpZW50IHVzZXJfY2xpZW50X3Q7Cit0eXBlZGVmIHN0cnVjdCBfc25kX3NlcV9rZXJuZWxfY2xpZW50IGtlcm5lbF9jbGllbnRfdDsKK3R5cGVkZWYgc3RydWN0IF9zbmRfc2VxX2NsaWVudCBjbGllbnRfdDsKK3R5cGVkZWYgc3RydWN0IF9zbmRfc2VxX3F1ZXVlIHF1ZXVlX3Q7CisKKy8qIGNhbGwtYmFja3MgZm9yIGtlcm5lbCBjbGllbnQgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworCXZvaWQgKnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBhbGxvd19pbnB1dDogMSwKKwkJIGFsbG93X291dHB1dDogMTsKKwkvKi4uLiovCit9IHNuZF9zZXFfY2xpZW50X2NhbGxiYWNrX3Q7CisKKy8qIGNhbGwtYmFja3MgZm9yIGtlcm5lbCBwb3J0ICovCit0eXBlZGVmIGludCAoc25kX3NlcV9rZXJuZWxfcG9ydF9vcGVuX3QpKHZvaWQgKnByaXZhdGVfZGF0YSwgc25kX3NlcV9wb3J0X3N1YnNjcmliZV90ICppbmZvKTsKK3R5cGVkZWYgaW50IChzbmRfc2VxX2tlcm5lbF9wb3J0X2Nsb3NlX3QpKHZvaWQgKnByaXZhdGVfZGF0YSwgc25kX3NlcV9wb3J0X3N1YnNjcmliZV90ICppbmZvKTsKK3R5cGVkZWYgaW50IChzbmRfc2VxX2tlcm5lbF9wb3J0X2lucHV0X3QpKHNuZF9zZXFfZXZlbnRfdCAqZXYsIGludCBkaXJlY3QsIHZvaWQgKnByaXZhdGVfZGF0YSwgaW50IGF0b21pYywgaW50IGhvcCk7Cit0eXBlZGVmIHZvaWQgKHNuZF9zZXFfa2VybmVsX3BvcnRfcHJpdmF0ZV9mcmVlX3QpKHZvaWQgKnByaXZhdGVfZGF0YSk7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKKwl2b2lkICpwcml2YXRlX2RhdGE7CisJc25kX3NlcV9rZXJuZWxfcG9ydF9vcGVuX3QgKnN1YnNjcmliZTsKKwlzbmRfc2VxX2tlcm5lbF9wb3J0X2Nsb3NlX3QgKnVuc3Vic2NyaWJlOworCXNuZF9zZXFfa2VybmVsX3BvcnRfb3Blbl90ICp1c2U7CisJc25kX3NlcV9rZXJuZWxfcG9ydF9jbG9zZV90ICp1bnVzZTsKKwlzbmRfc2VxX2tlcm5lbF9wb3J0X2lucHV0X3QgKmV2ZW50X2lucHV0OworCXNuZF9zZXFfa2VybmVsX3BvcnRfcHJpdmF0ZV9mcmVlX3QgKnByaXZhdGVfZnJlZTsKKwl1bnNpZ25lZCBpbnQgY2FsbGJhY2tfYWxsOwkvKiBjYWxsIHN1YnNjcmliZSBjYWxsYmFja3MgYXQgZWFjaCBjb25uZWN0aW9uL2Rpc2Nvbm5lY3Rpb24gKi8KKwkvKi4uLiovCit9IHNuZF9zZXFfcG9ydF9jYWxsYmFja190OworCisvKiBpbnRlcmZhY2UgZm9yIGtlcm5lbCBjbGllbnQgKi8KK2V4dGVybiBpbnQgc25kX3NlcV9jcmVhdGVfa2VybmVsX2NsaWVudChzbmRfY2FyZF90ICpjYXJkLCBpbnQgY2xpZW50X2luZGV4LCBzbmRfc2VxX2NsaWVudF9jYWxsYmFja190ICpjYWxsYmFjayk7CitleHRlcm4gaW50IHNuZF9zZXFfZGVsZXRlX2tlcm5lbF9jbGllbnQoaW50IGNsaWVudCk7CitleHRlcm4gaW50IHNuZF9zZXFfa2VybmVsX2NsaWVudF9lbnF1ZXVlKGludCBjbGllbnQsIHNuZF9zZXFfZXZlbnRfdCAqZXYsIGludCBhdG9taWMsIGludCBob3ApOworZXh0ZXJuIGludCBzbmRfc2VxX2tlcm5lbF9jbGllbnRfZGlzcGF0Y2goaW50IGNsaWVudCwgc25kX3NlcV9ldmVudF90ICpldiwgaW50IGF0b21pYywgaW50IGhvcCk7CitleHRlcm4gaW50IHNuZF9zZXFfa2VybmVsX2NsaWVudF9jdGwoaW50IGNsaWVudCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKTsKKworI2RlZmluZSBTTkRSVl9TRVFfRVhUX01BU0sJMHhjMDAwMDAwMAorI2RlZmluZSBTTkRSVl9TRVFfRVhUX1VTUlBUUgkweDgwMDAwMDAwCisjZGVmaW5lIFNORFJWX1NFUV9FWFRfQ0hBSU5FRAkweDQwMDAwMDAwCisKK3R5cGVkZWYgaW50ICgqc25kX3NlcV9kdW1wX2Z1bmNfdCkodm9pZCAqcHRyLCB2b2lkICpidWYsIGludCBjb3VudCk7CitpbnQgc25kX3NlcV9leHBhbmRfdmFyX2V2ZW50KGNvbnN0IHNuZF9zZXFfZXZlbnRfdCAqZXZlbnQsIGludCBjb3VudCwgY2hhciAqYnVmLCBpbnQgaW5fa2VybmVsLCBpbnQgc2l6ZV9hbGlnbmVkKTsKK2ludCBzbmRfc2VxX2R1bXBfdmFyX2V2ZW50KGNvbnN0IHNuZF9zZXFfZXZlbnRfdCAqZXZlbnQsIHNuZF9zZXFfZHVtcF9mdW5jX3QgZnVuYywgdm9pZCAqcHJpdmF0ZV9kYXRhKTsKKworLyogaW50ZXJmYWNlIGZvciBPU1MgZW11bGF0aW9uICovCitpbnQgc25kX3NlcV9zZXRfcXVldWVfdGVtcG8oaW50IGNsaWVudCwgc25kX3NlcV9xdWV1ZV90ZW1wb190ICp0ZW1wbyk7CisKKy8qIHBvcnQgY2FsbGJhY2sgcm91dGluZXMgKi8KK3ZvaWQgc25kX3BvcnRfaW5pdF9jYWxsYmFjayhzbmRfc2VxX3BvcnRfY2FsbGJhY2tfdCAqcCk7CitzbmRfc2VxX3BvcnRfY2FsbGJhY2tfdCAqc25kX3BvcnRfYWxsb2NfY2FsbGJhY2sodm9pZCk7CisKKy8qIHBvcnQgYXR0YWNoL2RldGFjaCAqLworaW50IHNuZF9zZXFfZXZlbnRfcG9ydF9hdHRhY2goaW50IGNsaWVudCwgc25kX3NlcV9wb3J0X2NhbGxiYWNrX3QgKnBjYnAsCisJCQkgICAgICBpbnQgY2FwLCBpbnQgdHlwZSwgaW50IG1pZGlfY2hhbm5lbHMsIGludCBtaWRpX3ZvaWNlcywgY2hhciAqcG9ydG5hbWUpOworaW50IHNuZF9zZXFfZXZlbnRfcG9ydF9kZXRhY2goaW50IGNsaWVudCwgaW50IHBvcnQpOworCisjaWZkZWYgQ09ORklHX0tNT0QKK3ZvaWQgc25kX3NlcV9hdXRvbG9hZF9sb2NrKHZvaWQpOwordm9pZCBzbmRfc2VxX2F1dG9sb2FkX3VubG9jayh2b2lkKTsKKyNlbHNlCisjZGVmaW5lIHNuZF9zZXFfYXV0b2xvYWRfbG9jaygpCisjZGVmaW5lIHNuZF9zZXFfYXV0b2xvYWRfdW5sb2NrKCkKKyNlbmRpZgorCisjZW5kaWYgLyogX19TT1VORF9TRVFfS0VSTkVMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvc2VxX21pZGlfZW11bC5oIGIvaW5jbHVkZS9zb3VuZC9zZXFfbWlkaV9lbXVsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU4Y2E0NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvc291bmQvc2VxX21pZGlfZW11bC5oCkBAIC0wLDAgKzEsMTk1IEBACisjaWZuZGVmIF9fU09VTkRfU0VRX01JRElfRU1VTF9ICisjZGVmaW5lIF9fU09VTkRfU0VRX01JRElfRU1VTF9ICisKKy8qCisgKiAgTWlkaSBjaGFubmVsIGRlZmluaXRpb24gZm9yIG9wdGlvbmFsIGNoYW5uZWwgbWFuYWdlbWVudC4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5IFN0ZXZlIFJhdGNsaWZmZQorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgInNlcV9rZXJuZWwuaCIKKworLyoKKyAqIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUgY3VycmVudCBzdGF0ZSBvbiBlYWNoCisgKiBjaGFubmVsLiAgQWxsIGRyaXZlcnMgZm9yIGhhcmR3YXJlIHRoYXQgZG9lcyBub3QgdW5kZXJzdGFuZCBtaWRpCisgKiBkaXJlY3RseSB3aWxsIHByb2JhYmx5IG5lZWQgdG8gdXNlIHRoaXMgc3RydWN0dXJlLgorICovCit0eXBlZGVmIHN0cnVjdCBzbmRfbWlkaV9jaGFubmVsIHsKKwl2b2lkICpwcml2YXRlOwkJLyogQSBiYWNrIHBvaW50ZXIgdG8gZHJpdmVyIGRhdGEgKi8KKwlpbnQgIG51bWJlcjsJCS8qIFRoZSBjaGFubmVsIG51bWJlciAqLworCWludCAgY2xpZW50OwkJLyogVGhlIGNsaWVudCBhc3NvY2lhdGVkIHdpdGggdGhpcyBjaGFubmVsICovCisJaW50ICBwb3J0OwkJLyogVGhlIHBvcnQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY2hhbm5lbCAqLworCisJdW5zaWduZWQgY2hhciBtaWRpX21vZGU7CS8qIEdNLCBHUywgWEcgZXRjICovCisJdW5zaWduZWQgaW50IAorCQlkcnVtX2NoYW5uZWw6MSwJCS8qIERydW0gY2hhbm5lbCAqLworCQlwYXJhbV90eXBlOjEJCS8qIFJQTi9OUlBOICovCisJCTsKKworCXVuc2lnbmVkIGNoYXIgbWlkaV9hZnRlcnRvdWNoOwkvKiBBZnRlcnRvdWNoIChrZXkgcHJlc3N1cmUpICovCisJdW5zaWduZWQgY2hhciBtaWRpX3ByZXNzdXJlOwkvKiBDaGFubmVsIHByZXNzdXJlICovCisJdW5zaWduZWQgY2hhciBtaWRpX3Byb2dyYW07CS8qIEluc3RydW1lbnQgbnVtYmVyICovCisJc2hvcnQgbWlkaV9waXRjaGJlbmQ7CQkvKiBQaXRjaCBiZW5kIGFtb3VudCAqLworCisJdW5zaWduZWQgY2hhciBjb250cm9sWzEyOF07CS8qIEN1cnJlbnQgdmFsdWUgb2YgYWxsIGNvbnRyb2xzICovCisJdW5zaWduZWQgY2hhciBub3RlWzEyOF07CS8qIEN1cnJlbnQgc3RhdHVzIGZvciBhbGwgbm90ZXMgKi8KKworCXNob3J0IGdtX3Jwbl9waXRjaF9iZW5kX3JhbmdlOwkvKiBQaXRjaCBiZW5kIHJhbmdlICovCisJc2hvcnQgZ21fcnBuX2ZpbmVfdHVuaW5nOyAJLyogTWFzdGVyIGZpbmUgdHVuaW5nICovCisJc2hvcnQgZ21fcnBuX2NvYXJzZV90dW5pbmc7CS8qIE1hc3RlciBjb2Fyc2UgdHVuaW5nICovCisKK30gc25kX21pZGlfY2hhbm5lbF90OworCisvKgorICogQSBzdHJ1Y3R1cmUgdGhhdCByZXByZXNldHMgYSBzZXQgb2YgY2hhbm5lbHMgYm91bmQgdG8gYSBwb3J0LiAgVGhlcmUKKyAqIHdvdWxkIHVzdWFsbHkgYmUgMTYgY2hhbm5lbHMgcGVyIHBvcnQuICBCdXQgZmV3ZXIgY291bGQgYmUgdXNlZCBmb3IKKyAqIHBhcnRpY3VsYXIgY2FzZXMuCisgKiBUaGUgY2hhbm5lbCBzZXQgY29uc2lzdHMgb2YgaW5mb3JtYXRpb24gZGVzY3JpYmluZyB0aGUgY2xpZW50IGFuZAorICogcG9ydCBmb3IgdGhpcyBtaWRpIHN5bnRoIGFuZCBhbiBhcnJheSBvZiBzbmRfbWlkaV9jaGFubmVsX3Qgc3RydWN0dXJlcy4KKyAqIEEgZHJpdmVyIHRoYXQgaGFkIG5vIG5lZWQgZm9yIHNuZF9taWRpX2NoYW5uZWxfdCBjb3VsZCBzdGlsbCB1c2UgdGhlCisgKiBjaGFubmVsIHNldCB0eXBlIGlmIGl0IHdpc2hlZCB3aXRoIHRoZSBjaGFubmVsIGFycmF5IG51bGwuCisgKi8KK3R5cGVkZWYgc3RydWN0IHNuZF9taWRpX2NoYW5uZWxfc2V0IHsKKwl2b2lkICpwcml2YXRlX2RhdGE7CQkvKiBEcml2ZXIgZGF0YSAqLworCWludCAgY2xpZW50OwkJCS8qIENsaWVudCBmb3IgdGhpcyBwb3J0ICovCisJaW50ICBwb3J0OwkJCS8qIFRoZSBwb3J0IG51bWJlciAqLworCisJaW50ICBtYXhfY2hhbm5lbHM7CQkvKiBTaXplIG9mIHRoZSBjaGFubmVscyBhcnJheSAqLworCXNuZF9taWRpX2NoYW5uZWxfdCAqY2hhbm5lbHM7CisKKwl1bnNpZ25lZCBjaGFyIG1pZGlfbW9kZTsJLyogTUlESSBvcGVyYXRpbmcgbW9kZSAqLworCXVuc2lnbmVkIGNoYXIgZ3NfbWFzdGVyX3ZvbHVtZTsJLyogU1lTRVggbWFzdGVyIHZvbHVtZTogMC0xMjcgKi8KKwl1bnNpZ25lZCBjaGFyIGdzX2Nob3J1c19tb2RlOworCXVuc2lnbmVkIGNoYXIgZ3NfcmV2ZXJiX21vZGU7CisKK30gc25kX21pZGlfY2hhbm5lbF9zZXRfdDsKKwordHlwZWRlZiBzdHJ1Y3Qgc25kX3NlcV9taWRpX29wIHsKKwl2b2lkICgqbm90ZV9vbikodm9pZCAqcHJpdmF0ZV9kYXRhLCBpbnQgbm90ZSwgaW50IHZlbCwgc25kX21pZGlfY2hhbm5lbF90ICpjaGFuKTsKKwl2b2lkICgqbm90ZV9vZmYpKHZvaWQgKnByaXZhdGVfZGF0YSxpbnQgbm90ZSwgaW50IHZlbCwgc25kX21pZGlfY2hhbm5lbF90ICpjaGFuKTsgLyogcmVsZWFzZSBub3RlICovCisJdm9pZCAoKmtleV9wcmVzcykodm9pZCAqcHJpdmF0ZV9kYXRhLCBpbnQgbm90ZSwgaW50IHZlbCwgc25kX21pZGlfY2hhbm5lbF90ICpjaGFuKTsKKwl2b2lkICgqbm90ZV90ZXJtaW5hdGUpKHZvaWQgKnByaXZhdGVfZGF0YSwgaW50IG5vdGUsIHNuZF9taWRpX2NoYW5uZWxfdCAqY2hhbik7IC8qIHRlcm1pbmF0ZSBub3RlIGltbWVkaWF0ZWx5ICovCisJdm9pZCAoKmNvbnRyb2wpKHZvaWQgKnByaXZhdGVfZGF0YSwgaW50IHR5cGUsIHNuZF9taWRpX2NoYW5uZWxfdCAqY2hhbik7CisJdm9pZCAoKm5ycG4pKHZvaWQgKnByaXZhdGVfZGF0YSwgc25kX21pZGlfY2hhbm5lbF90ICpjaGFuLCBzbmRfbWlkaV9jaGFubmVsX3NldF90ICpjaHNldCk7CisJdm9pZCAoKnN5c2V4KSh2b2lkICpwcml2YXRlX2RhdGEsIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGxlbiwgaW50IHBhcnNlZCwgc25kX21pZGlfY2hhbm5lbF9zZXRfdCAqY2hzZXQpOworfSBzbmRfbWlkaV9vcF90OworCisvKgorICogVGhlc2UgZGVmaW5lcyBhcmUgdXNlZCBzbyB0aGF0IHBpdGNoYmVuZCwgYWZ0ZXJ0b3VjaCBldGMsIGNhbiBiZQorICogZGlzdGluZ3Vpc2hlZCBmcm9tIGNvbnRyb2xsZXIgdmFsdWVzLgorICovCisvKiAwLTEyNyBjb250cm9sbGVyIHZhbHVlcyAqLworI2RlZmluZSBNSURJX0NUTF9QSVRDSEJFTkQJMHg4MAorI2RlZmluZSBNSURJX0NUTF9BRlRFUlRPVUNICTB4ODEKKyNkZWZpbmUgTUlESV9DVExfQ0hBTl9QUkVTU1VSRQkweDgyCisKKy8qCisgKiBUaGVzZSBuYW1lcyBleGlzdCB0byBhbGxvdyBzeW1ib2xpYyBhY2Nlc3MgdG8gdGhlIGNvbnRyb2xzIGFycmF5LgorICogVGhlIHVzYWdlIGlzIGVnOiBjaGFuLT5nbV9iYW5rX3NlbGVjdC4gIEFub3RoZXIgaW1wbGVtZW50YXRpb24gd291bGQKKyAqIGJlIHJlYWxseSBoYXZlIHRoZXNlIG1lbWJlcnMgaW4gdGhlIHN0cnVjdCwgYW5kIG5vdCB0aGUgYXJyYXkuCisgKi8KKyNkZWZpbmUgZ21fYmFua19zZWxlY3QJCWNvbnRyb2xbMF0KKyNkZWZpbmUgZ21fbW9kdWxhdGlvbgkJY29udHJvbFsxXQorI2RlZmluZSBnbV9icmVhdGgJCWNvbnRyb2xbMl0KKyNkZWZpbmUgZ21fZm9vdF9wZWRhbAkJY29udHJvbFs0XQorI2RlZmluZSBnbV9wb3J0YW1lbnRvX3RpbWUJY29udHJvbFs1XQorI2RlZmluZSBnbV9kYXRhX2VudHJ5CQljb250cm9sWzZdCisjZGVmaW5lIGdtX3ZvbHVtZQkJY29udHJvbFs3XQorI2RlZmluZSBnbV9iYWxhbmNlCQljb250cm9sWzhdCisjZGVmaW5lIGdtX3BhbgkJCWNvbnRyb2xbMTBdCisjZGVmaW5lIGdtX2V4cHJlc3Npb24JCWNvbnRyb2xbMTFdCisjZGVmaW5lIGdtX2VmZmVjdF9jb250cm9sMQljb250cm9sWzEyXQorI2RlZmluZSBnbV9lZmZlY3RfY29udHJvbDIJY29udHJvbFsxM10KKyNkZWZpbmUgZ21fc2xpZGVyMQkJY29udHJvbFsxNl0KKyNkZWZpbmUgZ21fc2xpZGVyMgkJY29udHJvbFsxN10KKyNkZWZpbmUgZ21fc2xpZGVyMwkJY29udHJvbFsxOF0KKyNkZWZpbmUgZ21fc2xpZGVyNAkJY29udHJvbFsxOV0KKworI2RlZmluZSBnbV9iYW5rX3NlbGVjdF9sc2IJY29udHJvbFszMl0KKyNkZWZpbmUgZ21fbW9kdWxhdGlvbl93aGVlbF9sc2IJY29udHJvbFszM10KKyNkZWZpbmUgZ21fYnJlYXRoX2xzYgkJY29udHJvbFszNF0KKyNkZWZpbmUgZ21fZm9vdF9wZWRhbF9sc2IJY29udHJvbFszNl0KKyNkZWZpbmUgZ21fcG9ydGFtZW50b190aW1lX2xzYgljb250cm9sWzM3XQorI2RlZmluZSBnbV9kYXRhX2VudHJ5X2xzYgljb250cm9sWzM4XQorI2RlZmluZSBnbV92b2x1bWVfbHNiCQljb250cm9sWzM5XQorI2RlZmluZSBnbV9iYWxhbmNlX2xzYgkJY29udHJvbFs0MF0KKyNkZWZpbmUgZ21fcGFuX2xzYgkJY29udHJvbFs0Ml0KKyNkZWZpbmUgZ21fZXhwcmVzc2lvbl9sc2IJY29udHJvbFs0M10KKyNkZWZpbmUgZ21fZWZmZWN0X2NvbnRyb2wxX2xzYgljb250cm9sWzQ0XQorI2RlZmluZSBnbV9lZmZlY3RfY29udHJvbDJfbHNiCWNvbnRyb2xbNDVdCisKKyNkZWZpbmUgZ21fc3VzdGFpbgkgCWNvbnRyb2xbTUlESV9DVExfU1VTVEFJTl0KKyNkZWZpbmUgZ21faG9sZAkJCWdtX3N1c3RhaW4KKyNkZWZpbmUgZ21fcG9ydGFtZW50bwkJY29udHJvbFtNSURJX0NUTF9QT1JUQU1FTlRPXQorI2RlZmluZSBnbV9zb3N0ZW51dG8JCWNvbnRyb2xbTUlESV9DVExfU09TVEVOVVRPXQorCisvKgorICogVGhlc2UgbWFjcm9zIGdpdmUgdGhlIGNvbXBsZXRlIHZhbHVlIG9mIHRoZSBjb250cm9scyB0aGF0IGNvbnNpc3QKKyAqIG9mIGNvYXJzZSBhbmQgZmluZSBwYWlycy4gIE9mIGNvdXJzZSB0aGUgZmluZSBjb250cm9scyBhcmUgc2VsZG9tIHVzZWQKKyAqIGJ1dCB0aGVyZSBpcyBubyBoYXJtIGluIGJlaW5nIGNvbXBsZXRlLgorICovCisjZGVmaW5lIFNORFJWX0dNX0JBTktfU0VMRUNUKGNwKQkJKCgoY3ApLT5jb250cm9sWzBdPDw3KXwoKGNwKS0+Y29udHJvbFszMl0pKQorI2RlZmluZSBTTkRSVl9HTV9NT0RVTEFUSU9OX1dIRUVMKGNwKQkoKChjcCktPmNvbnRyb2xbMV08PDcpfCgoY3ApLT5jb250cm9sWzMzXSkpCisjZGVmaW5lIFNORFJWX0dNX0JSRUFUSChjcCkJCSgoKGNwKS0+Y29udHJvbFsyXTw8Nyl8KChjcCktPmNvbnRyb2xbMzRdKSkKKyNkZWZpbmUgU05EUlZfR01fRk9PVF9QRURBTChjcCkJCSgoKGNwKS0+Y29udHJvbFs0XTw8Nyl8KChjcCktPmNvbnRyb2xbMzZdKSkKKyNkZWZpbmUgU05EUlZfR01fUE9SVEFNRU5UT19USU1FKGNwKQkoKChjcCktPmNvbnRyb2xbNV08PDcpfCgoY3ApLT5jb250cm9sWzM3XSkpCisjZGVmaW5lIFNORFJWX0dNX0RBVEFfRU5UUlkoY3ApCQkoKChjcCktPmNvbnRyb2xbNl08PDcpfCgoY3ApLT5jb250cm9sWzM4XSkpCisjZGVmaW5lIFNORFJWX0dNX1ZPTFVNRShjcCkJCSgoKGNwKS0+Y29udHJvbFs3XTw8Nyl8KChjcCktPmNvbnRyb2xbMzldKSkKKyNkZWZpbmUgU05EUlZfR01fQkFMQU5DRShjcCkJCSgoKGNwKS0+Y29udHJvbFs4XTw8Nyl8KChjcCktPmNvbnRyb2xbNDBdKSkKKyNkZWZpbmUgU05EUlZfR01fUEFOKGNwKQkJCSgoKGNwKS0+Y29udHJvbFsxMF08PDcpfCgoY3ApLT5jb250cm9sWzQyXSkpCisjZGVmaW5lIFNORFJWX0dNX0VYUFJFU1NJT04oY3ApCQkoKChjcCktPmNvbnRyb2xbMTFdPDw3KXwoKGNwKS0+Y29udHJvbFs0M10pKQorCisKKy8qIE1JREkgbW9kZSAqLworI2RlZmluZSBTTkRSVl9NSURJX01PREVfTk9ORQkwCS8qIEdlbmVyaWMgbWlkaSAqLworI2RlZmluZSBTTkRSVl9NSURJX01PREVfR00JMQorI2RlZmluZSBTTkRSVl9NSURJX01PREVfR1MJMgorI2RlZmluZSBTTkRSVl9NSURJX01PREVfWEcJMworI2RlZmluZSBTTkRSVl9NSURJX01PREVfTVQzMgk0CisKKy8qIE1JREkgbm90ZSBzdGF0ZSAqLworI2RlZmluZSBTTkRSVl9NSURJX05PVEVfT0ZGCQkweDAwCisjZGVmaW5lIFNORFJWX01JRElfTk9URV9PTgkJMHgwMQorI2RlZmluZSBTTkRSVl9NSURJX05PVEVfUkVMRUFTRUQJCTB4MDIKKyNkZWZpbmUgU05EUlZfTUlESV9OT1RFX1NPU1RFTlVUTwkJMHgwNAorIAorI2RlZmluZSBTTkRSVl9NSURJX1BBUkFNX1RZUEVfUkVHSVNURVJFRAkJMAorI2RlZmluZSBTTkRSVl9NSURJX1BBUkFNX1RZUEVfTk9OUkVHSVNURVJFRAkxCisKKy8qIFNZU0VYIHBhcnNlIGZsYWcgKi8KK2VudW0geworCVNORFJWX01JRElfU1lTRVhfTk9UX1BBUlNFRCA9IDAsCisJU05EUlZfTUlESV9TWVNFWF9HTV9PTiwJCisJU05EUlZfTUlESV9TWVNFWF9HU19PTiwJCisJU05EUlZfTUlESV9TWVNFWF9HU19SRVNFVCwJCisJU05EUlZfTUlESV9TWVNFWF9HU19DSE9SVVNfTU9ERSwKKwlTTkRSVl9NSURJX1NZU0VYX0dTX1JFVkVSQl9NT0RFLAorCVNORFJWX01JRElfU1lTRVhfR1NfTUFTVEVSX1ZPTFVNRSwKKwlTTkRSVl9NSURJX1NZU0VYX0dTX1BST0dSQU0sCisJU05EUlZfTUlESV9TWVNFWF9HU19EUlVNX0NIQU5ORUwsCisJU05EUlZfTUlESV9TWVNFWF9YR19PTiwJCit9OworCisvKiBQcm90b3R5cGVzIGZvciBtaWRpX3Byb2Nlc3MuYyAqLwordm9pZCBzbmRfbWlkaV9wcm9jZXNzX2V2ZW50KHNuZF9taWRpX29wX3QgKm9wcywgc25kX3NlcV9ldmVudF90ICpldiwKKwkJCSAgICBzbmRfbWlkaV9jaGFubmVsX3NldF90ICpjaGFuc2V0KTsKK3ZvaWQgc25kX21pZGlfY2hhbm5lbF9zZXRfY2xlYXIoc25kX21pZGlfY2hhbm5lbF9zZXRfdCAqY2hzZXQpOworc25kX21pZGlfY2hhbm5lbF9zZXRfdCAqc25kX21pZGlfY2hhbm5lbF9hbGxvY19zZXQoaW50IG4pOwordm9pZCBzbmRfbWlkaV9jaGFubmVsX2ZyZWVfc2V0KHNuZF9taWRpX2NoYW5uZWxfc2V0X3QgKmNoc2V0KTsKKworI2VuZGlmIC8qIF9fU09VTkRfU0VRX01JRElfRU1VTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3NlcV9taWRpX2V2ZW50LmggYi9pbmNsdWRlL3NvdW5kL3NlcV9taWRpX2V2ZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM1N2NhYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvc291bmQvc2VxX21pZGlfZXZlbnQuaApAQCAtMCwwICsxLDU2IEBACisjaWZuZGVmIF9fU09VTkRfU0VRX01JRElfRVZFTlRfSAorI2RlZmluZSBfX1NPVU5EX1NFUV9NSURJX0VWRU5UX0gKKworLyoKKyAqICBNSURJIGJ5dGUgPC0+IHNlcXVlbmNlciBldmVudCBjb2RlcgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTgsOTkgVGFrYXNoaSBJd2FpIDx0aXdhaUBzdXNlLmRlPiwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgSmFyb3NsYXYgS3lzZWxhIDxwZXJleEBzdXNlLmN6PgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSAiYXNlcXVlbmNlci5oIgorCisjZGVmaW5lIE1BWF9NSURJX0VWRU5UX0JVRgkyNTYKKwordHlwZWRlZiBzdHJ1Y3Qgc25kX21pZGlfZXZlbnRfdCBzbmRfbWlkaV9ldmVudF90OworCisvKiBtaWRpIHN0YXR1cyAqLworc3RydWN0IHNuZF9taWRpX2V2ZW50X3QgeworCWludCBxbGVuOwkJLyogcXVldWUgbGVuZ3RoICovCisJaW50IHJlYWQ7CQkvKiBjaGFycyByZWFkICovCisJaW50IHR5cGU7CQkvKiBjdXJyZW50IGV2ZW50IHR5cGUgKi8KKwl1bnNpZ25lZCBjaGFyIGxhc3RjbWQ7CS8qIGxhc3QgY29tbWFuZCAoZm9yIE1JREkgc3RhdGUgaGFuZGxpbmcpICovCisJdW5zaWduZWQgY2hhciBub3N0YXQ7CS8qIG5vIHN0YXRlIGZsYWcgKi8KKwlpbnQgYnVmc2l6ZTsJCS8qIGFsbG9jYXRlZCBidWZmZXIgc2l6ZSAqLworCXVuc2lnbmVkIGNoYXIgKmJ1ZjsJLyogaW5wdXQgYnVmZmVyICovCisJc3BpbmxvY2tfdCBsb2NrOworfTsKKworaW50IHNuZF9taWRpX2V2ZW50X25ldyhpbnQgYnVmc2l6ZSwgc25kX21pZGlfZXZlbnRfdCAqKnJkZXYpOworaW50IHNuZF9taWRpX2V2ZW50X3Jlc2l6ZV9idWZmZXIoc25kX21pZGlfZXZlbnRfdCAqZGV2LCBpbnQgYnVmc2l6ZSk7Cit2b2lkIHNuZF9taWRpX2V2ZW50X2ZyZWUoc25kX21pZGlfZXZlbnRfdCAqZGV2KTsKK3ZvaWQgc25kX21pZGlfZXZlbnRfaW5pdChzbmRfbWlkaV9ldmVudF90ICpkZXYpOwordm9pZCBzbmRfbWlkaV9ldmVudF9yZXNldF9lbmNvZGUoc25kX21pZGlfZXZlbnRfdCAqZGV2KTsKK3ZvaWQgc25kX21pZGlfZXZlbnRfcmVzZXRfZGVjb2RlKHNuZF9taWRpX2V2ZW50X3QgKmRldik7Cit2b2lkIHNuZF9taWRpX2V2ZW50X25vX3N0YXR1cyhzbmRfbWlkaV9ldmVudF90ICpkZXYsIGludCBvbik7CisvKiBlbmNvZGUgZnJvbSBieXRlIHN0cmVhbSAtIHJldHVybiBudW1iZXIgb2Ygd3JpdHRlbiBieXRlcyBpZiBzdWNjZXNzICovCitsb25nIHNuZF9taWRpX2V2ZW50X2VuY29kZShzbmRfbWlkaV9ldmVudF90ICpkZXYsIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgbG9uZyBjb3VudCwgc25kX3NlcV9ldmVudF90ICpldik7CitpbnQgc25kX21pZGlfZXZlbnRfZW5jb2RlX2J5dGUoc25kX21pZGlfZXZlbnRfdCAqZGV2LCBpbnQgYywgc25kX3NlcV9ldmVudF90ICpldik7CisvKiBkZWNvZGUgZnJvbSBldmVudCB0byBieXRlcyAtIHJldHVybiBudW1iZXIgb2Ygd3JpdHRlbiBieXRlcyBpZiBzdWNjZXNzICovCitsb25nIHNuZF9taWRpX2V2ZW50X2RlY29kZShzbmRfbWlkaV9ldmVudF90ICpkZXYsIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgbG9uZyBjb3VudCwgc25kX3NlcV9ldmVudF90ICpldik7CisKKyNlbmRpZiAvKiBfX1NPVU5EX1NFUV9NSURJX0VWRU5UX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvc2VxX29zcy5oIGIvaW5jbHVkZS9zb3VuZC9zZXFfb3NzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQ3ZTU3MwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvc291bmQvc2VxX29zcy5oCkBAIC0wLDAgKzEsMTAyIEBACisjaWZuZGVmIF9fU09VTkRfU0VRX09TU19ICisjZGVmaW5lIF9fU09VTkRfU0VRX09TU19ICisKKy8qCisgKiBPU1MgY29tcGF0aWJsZSBzZXF1ZW5jZXIgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4LDk5IFRha2FzaGkgSXdhaQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlICJhc2VxdWVuY2VyLmgiCisjaW5jbHVkZSAic2VxX2tlcm5lbC5oIgorCisvKgorICogdHlwZSBkZWZpbml0aW9ucworICovCit0eXBlZGVmIHN0cnVjdCBzbmRfc2VxX29zc19hcmdfdCBzbmRfc2VxX29zc19hcmdfdDsKK3R5cGVkZWYgc3RydWN0IHNuZF9zZXFfb3NzX2NhbGxiYWNrX3Qgc25kX3NlcV9vc3NfY2FsbGJhY2tfdDsKKworLyoKKyAqIGFyZ3VtZW50IHN0cnVjdHVyZSBmb3Igc3ludGhlc2l6ZXIgb3BlcmF0aW9ucworICovCitzdHJ1Y3Qgc25kX3NlcV9vc3NfYXJnX3QgeworCS8qIGdpdmVuIGJ5IE9TUyBzZXF1ZW5jZXIgKi8KKwlpbnQgYXBwX2luZGV4OwkvKiBhcHBsaWNhdGlvbiB1bmlxdWUgaW5kZXggKi8KKwlpbnQgZmlsZV9tb2RlOwkvKiBmaWxlIG1vZGUgLSBzZWUgYmVsb3cgKi8KKwlpbnQgc2VxX21vZGU7CS8qIHNlcXVlbmNlciBtb2RlIC0gc2VlIGJlbG93ICovCisKKwkvKiBmb2xsb3dpbmcgbXVzdCBiZSBpbml0aWFsaXplZCBpbiBvcGVuIGNhbGxiYWNrICovCisJc25kX3NlcV9hZGRyX3QgYWRkcjsJLyogb3BlbmVkIHBvcnQgYWRkcmVzcyAqLworCXZvaWQgKnByaXZhdGVfZGF0YTsJLyogcHJpdmF0ZSBkYXRhIGZvciBsb3dsZXZlbCBkcml2ZXJzICovCisKKwkvKiBub3RlLW9uIGV2ZW50IHBhc3NpbmcgbW9kZTogaW5pdGlhbGx5IGdpdmVuIGJ5IE9TUyBzZXEsCisJICogYnV0IGNvbmZpZ3VyYWJsZSBieSBkcml2ZXJzIC0gc2VlIGJlbG93CisJICovCisJaW50IGV2ZW50X3Bhc3Npbmc7Cit9OworCisKKy8qCisgKiBzeW50aGVzaXplciBvcGVyYXRpb24gY2FsbGJhY2tzCisgKi8KK3N0cnVjdCBzbmRfc2VxX29zc19jYWxsYmFja190IHsKKwlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKKwlpbnQgKCpvcGVuKShzbmRfc2VxX29zc19hcmdfdCAqcCwgdm9pZCAqY2xvc3VyZSk7CisJaW50ICgqY2xvc2UpKHNuZF9zZXFfb3NzX2FyZ190ICpwKTsKKwlpbnQgKCppb2N0bCkoc25kX3NlcV9vc3NfYXJnX3QgKnAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKKwlpbnQgKCpsb2FkX3BhdGNoKShzbmRfc2VxX29zc19hcmdfdCAqcCwgaW50IGZvcm1hdCwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwgaW50IG9mZnMsIGludCBjb3VudCk7CisJaW50ICgqcmVzZXQpKHNuZF9zZXFfb3NzX2FyZ190ICpwKTsKKwlpbnQgKCpyYXdfZXZlbnQpKHNuZF9zZXFfb3NzX2FyZ190ICpwLCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKK307CisKKy8qIGZsYWc6IGZpbGVfbW9kZSAqLworI2RlZmluZSBTTkRSVl9TRVFfT1NTX0ZJTEVfQUNNT0RFCQkzCisjZGVmaW5lIFNORFJWX1NFUV9PU1NfRklMRV9SRUFECQkxCisjZGVmaW5lIFNORFJWX1NFUV9PU1NfRklMRV9XUklURQkJMgorI2RlZmluZSBTTkRSVl9TRVFfT1NTX0ZJTEVfTk9OQkxPQ0sJNAorCisvKiBmbGFnOiBzZXFfbW9kZSAqLworI2RlZmluZSBTTkRSVl9TRVFfT1NTX01PREVfU1lOVEgJCTAKKyNkZWZpbmUgU05EUlZfU0VRX09TU19NT0RFX01VU0lDCQkxCisKKy8qIGZsYWc6IGV2ZW50X3Bhc3NpbmcgKi8KKyNkZWZpbmUgU05EUlZfU0VRX09TU19QUk9DRVNTX0VWRU5UUwkwCS8qIGtleSA9PSAyNTUgaXMgcHJvY2Vzc2VkIGFzIHZlbG9jaXR5IGNoYW5nZSAqLworI2RlZmluZSBTTkRSVl9TRVFfT1NTX1BBU1NfRVZFTlRTCQkxCS8qIHBhc3MgYWxsIGV2ZW50cyB0byBjYWxsYmFjayAqLworI2RlZmluZSBTTkRSVl9TRVFfT1NTX1BST0NFU1NfS0VZUFJFU1MJMgkvKiBrZXkgPj0gMTI4IHdpbGwgYmUgcHJvY2Vzc2VkIGFzIGtleS1wcmVzc3VyZSAqLworCisvKiBkZWZhdWx0IGNvbnRyb2wgcmF0ZTogZml4ZWQgKi8KKyNkZWZpbmUgU05EUlZfU0VRX09TU19DVFJMUkFURQkJMTAwCisKKy8qIGRlZmF1bHQgbWF4IHF1ZXVlIGxlbmd0aDogY29uZmlndXJhYmxlIGJ5IG1vZHVsZSBvcHRpb24gKi8KKyNkZWZpbmUgU05EUlZfU0VRX09TU19NQVhfUUxFTgkJMTAyNAorCisKKy8qCisgKiBkYXRhIHBvaW50ZXIgdG8gc25kX3NlcV9yZWdpc3Rlcl9kZXZpY2UKKyAqLwordHlwZWRlZiBzdHJ1Y3Qgc25kX3NlcV9vc3NfcmVnIHsKKwlpbnQgdHlwZTsKKwlpbnQgc3VidHlwZTsKKwlpbnQgbnZvaWNlczsKKwlzbmRfc2VxX29zc19jYWxsYmFja190IG9wZXI7CisJdm9pZCAqcHJpdmF0ZV9kYXRhOworfSBzbmRfc2VxX29zc19yZWdfdDsKKworLyogZGV2aWNlIGlkICovCisjZGVmaW5lIFNORFJWX1NFUV9ERVZfSURfT1NTCQkic2VxLW9zcyIKKworI2VuZGlmIC8qIF9fU09VTkRfU0VRX09TU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3NlcV9vc3NfbGVnYWN5LmggYi9pbmNsdWRlL3NvdW5kL3NlcV9vc3NfbGVnYWN5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY2MjY5ZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvc291bmQvc2VxX29zc19sZWdhY3kuaApAQCAtMCwwICsxLDMxIEBACisjaWZuZGVmIF9fU09VTkRfU0VRX09TU19MRUdBQ1lfSAorI2RlZmluZSBfX1NPVU5EX1NFUV9PU1NfTEVHQUNZX0gKKworLyoKKyAqIE9TUyBjb21wYXRpYmxlIG1hY3JvIGRlZmluaXRpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwIEFicmFtbyBCYWduYXJhIDxhYnJhbW9AYWxzYS1wcm9qZWN0Lm9yZz4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvc291bmRjYXJkLmg+CisKKyNpZm5kZWYgU0FNUExFX1RZUEVfQVdFMzIKKyNkZWZpbmUgU0FNUExFX1RZUEVfQVdFMzIJCTB4MjAKKyNlbmRpZgorCisjZW5kaWYgLyogX19TT1VORF9TRVFfT1NTX0xFR0FDWV9IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvc2VxX3Zpcm1pZGkuaCBiL2luY2x1ZGUvc291bmQvc2VxX3Zpcm1pZGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjRlMjM4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9zb3VuZC9zZXFfdmlybWlkaS5oCkBAIC0wLDAgKzEsODQgQEAKKyNpZm5kZWYgX19TT1VORF9TRVFfVklSTUlESV9ICisjZGVmaW5lIF9fU09VTkRfU0VRX1ZJUk1JRElfSAorCisvKgorICogIFZpcnR1YWwgUmF3IE1JREkgY2xpZW50IG9uIFNlcXVlbmNlcgorICogIENvcHlyaWdodCAoYykgMjAwMCBieSBUYWthc2hpIEl3YWkgPHRpd2FpQHN1c2UuZGU+LAorICogICAgICAgICAgICAgICAgICAgICAgICBKYXJvc2xhdiBLeXNlbGEgPHBlcmV4QHN1c2UuY3o+CisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICoKKyAqLworCisjaW5jbHVkZSAicmF3bWlkaS5oIgorI2luY2x1ZGUgInNlcV9taWRpX2V2ZW50LmgiCisKK3R5cGVkZWYgc3RydWN0IF9zbmRfdmlybWlkaV9kZXYgc25kX3Zpcm1pZGlfZGV2X3Q7CisKKy8qCisgKiBkZXZpY2UgZmlsZSBpbnN0YW5jZToKKyAqIFRoaXMgaW5zdGFuY2UgaXMgY3JlYXRlZCBhdCBlYWNoIHRpbWUgdGhlIG1pZGkgZGV2aWNlIGZpbGUgaXMKKyAqIG9wZW5lZC4gIEVhY2ggaW5zdGFuY2UgaGFzIGl0cyBvd24gaW5wdXQgYnVmZmVyIGFuZCBNSURJIHBhcnNlcgorICogKGJ1ZmZlciksIGFuZCBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIGRldmljZSBpbnN0YW5jZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgX3NuZF92aXJtaWRpIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJaW50IHNlcV9tb2RlOworCWludCBjbGllbnQ7CisJaW50IHBvcnQ7CisJdW5zaWduZWQgaW50IHRyaWdnZXI6IDE7CisJc25kX21pZGlfZXZlbnRfdCAqcGFyc2VyOworCXNuZF9zZXFfZXZlbnRfdCBldmVudDsKKwlzbmRfdmlybWlkaV9kZXZfdCAqcmRldjsKKwlzbmRfcmF3bWlkaV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtOworfSBzbmRfdmlybWlkaV90OworCisjZGVmaW5lIFNORFJWX1ZJUk1JRElfU1VCU0NSSUJFCQkoMTw8MCkKKyNkZWZpbmUgU05EUlZfVklSTUlESV9VU0UJCSgxPDwxKQorCisvKgorICogZGV2aWNlIHJlY29yZDoKKyAqIEVhY2ggdmlydHVhbCBtaWRpIGRldmljZSBoYXMgb25lIGRldmljZSBpbnN0YW5jZS4gIEl0IGNvbnRhaW5zCisgKiBjb21tb24gaW5mb3JtYXRpb24gYW5kIHRoZSBsaW5rZWQtbGlzdCBvZiBvcGVuZWQgZmlsZXMsIAorICovCitzdHJ1Y3QgX3NuZF92aXJtaWRpX2RldiB7CisJc25kX2NhcmRfdCAqY2FyZDsJCS8qIGFzc29jaWF0ZWQgY2FyZCAqLworCXNuZF9yYXdtaWRpX3QgKnJtaWRpOwkJLyogcmF3bWlkaSBkZXZpY2UgKi8KKwlpbnQgc2VxX21vZGU7CQkJLyogU05EUlZfVklSTUlESV9YWFggKi8KKwlpbnQgZGV2aWNlOwkJCS8qIHNlcXVlbmNlciBkZXZpY2UgKi8KKwlpbnQgY2xpZW50OwkJCS8qIGNyZWF0ZWQvYXR0YWNoZWQgY2xpZW50ICovCisJaW50IHBvcnQ7CQkJLyogY3JlYXRlZC9hdHRhY2hlZCBwb3J0ICovCisJdW5zaWduZWQgaW50IGZsYWdzOwkJLyogU05EUlZfVklSTUlESV8qICovCisJcndsb2NrX3QgZmlsZWxpc3RfbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGZpbGVsaXN0OworfTsKKworLyogc2VxdWVuY2VyIG1vZGU6CisgKiBBVFRBQ0ggPSBpbnB1dC9vdXRwdXQgZXZlbnRzIGZyb20gbWlkaSBkZXZpY2UgYXJlIHJvdXRlZCB0byB0aGUKKyAqICAgICAgICAgIGF0dGFjaGVkIHNlcXVlbmNlciBwb3J0LiAgc2VxdWVuY2VyIHBvcnQgaXMgbm90IGNyZWF0ZWQKKyAqICAgICAgICAgIGJ5IHZpcm1pZGkgaXRzZWxmLgorICogICAgICAgICAgdGhlIGlucHV0IHRvIHJhd21pZGkgbXVzdCBiZSBwcm9jZXNzZWQgYnkgcGFzc2luZyB0aGUKKyAqICAgICAgICAgIGluY29taW5nIGV2ZW50cyB2aWEgc25kX3Zpcm1pZGlfcmVjZWl2ZSgpCisgKiBESVNQQVRDSCA9IGlucHV0L291dHB1dCBldmVudHMgYXJlIHJvdXRlZCB0byBzdWJzY3JpYmVycy4KKyAqICAgICAgICAgICAgc2VxdWVuY2VyIHBvcnQgaXMgY3JlYXRlZCBpbiB2aXJtaWRpLgorICovCisjZGVmaW5lIFNORFJWX1ZJUk1JRElfU0VRX05PTkUJCTAKKyNkZWZpbmUgU05EUlZfVklSTUlESV9TRVFfQVRUQUNICTEKKyNkZWZpbmUgU05EUlZfVklSTUlESV9TRVFfRElTUEFUQ0gJMgorCitpbnQgc25kX3Zpcm1pZGlfbmV3KHNuZF9jYXJkX3QgKmNhcmQsIGludCBkZXZpY2UsIHNuZF9yYXdtaWRpX3QgKipycm1pZGkpOworaW50IHNuZF92aXJtaWRpX3JlY2VpdmUoc25kX3Jhd21pZGlfdCAqcm1pZGksIHNuZF9zZXFfZXZlbnRfdCAqZXYpOworCisjZW5kaWYgLyogX19TT1VORF9TRVFfVklSTUlESSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9zZm50X2luZm8uaCBiL2luY2x1ZGUvc291bmQvc2ZudF9pbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc0NTg1ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3NvdW5kL3NmbnRfaW5mby5oCkBAIC0wLDAgKzEsMjE0IEBACisjaWZuZGVmIF9fU09VTkRfU0ZOVF9JTkZPX0gKKyNkZWZpbmUgX19TT1VORF9TRk5UX0lORk9fSAorCisvKgorICogIFBhdGNoIHJlY29yZCBjb21wYXRpYmxlIHdpdGggQVdFIGRyaXZlciBvbiBPU1MKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgVGFrYXNoaSBJd2FpCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8c291bmQvYXNvdW5kLmg+CisKKy8qCisgKiBwYXRjaCBpbmZvcm1hdGlvbiByZWNvcmQKKyAqLworCisjaWZkZWYgU05EUlZfQklHX0VORElBTgorI2RlZmluZSBTTkRSVl9PU1NfUEFUQ0hLRVkoaWQpICgweGZkMDB8aWQpCisjZWxzZQorI2RlZmluZSBTTkRSVl9PU1NfUEFUQ0hLRVkoaWQpICgoaWQ8PDgpfDB4ZmQpCisjZW5kaWYKKworLyogcGF0Y2ggaW50ZXJmYWNlIGhlYWRlcjogMTYgYnl0ZXMgKi8KK3R5cGVkZWYgc3RydWN0IHNvdW5kZm9udF9wYXRjaF9pbmZvX3QgeworCXVuc2lnbmVkIHNob3J0IGtleTsJCS8qIHVzZSB0aGUga2V5IGJlbG93ICovCisjZGVmaW5lIFNORFJWX09TU19TT1VOREZPTlRfUEFUQ0gJCVNORFJWX09TU19QQVRDSEtFWSgweDA3KQorCisJc2hvcnQgZGV2aWNlX25vOwkJLyogc3ludGhlc2l6ZXIgbnVtYmVyICovCisJdW5zaWduZWQgc2hvcnQgc2ZfaWQ7CQkvKiBmaWxlIGlkIChzaG91bGQgYmUgemVybykgKi8KKwlzaG9ydCBvcHRhcmc7CQkJLyogb3B0aW9uYWwgYXJndW1lbnQgKi8KKwlpbnQgbGVuOwkJCS8qIGRhdGEgbGVuZ3RoICh3aXRob3V0IHRoaXMgaGVhZGVyKSAqLworCisJc2hvcnQgdHlwZTsJCQkvKiBwYXRjaCBvcGVyYXRpb24gdHlwZSAqLworI2RlZmluZSBTTkRSVl9TRk5UX0xPQURfSU5GTwkJMAkvKiBhd2Vfdm9pY2VfcmVjICovCisjZGVmaW5lIFNORFJWX1NGTlRfTE9BRF9EQVRBCQkxCS8qIGF3ZV9zYW1wbGVfaW5mbyAqLworI2RlZmluZSBTTkRSVl9TRk5UX09QRU5fUEFUQ0gJMgkvKiBhd2Vfb3Blbl9wYXJtICovCisjZGVmaW5lIFNORFJWX1NGTlRfQ0xPU0VfUEFUQ0gJMwkvKiBub25lICovCisJLyogNCBpcyBvYnNvbGV0ZSAqLworI2RlZmluZSBTTkRSVl9TRk5UX1JFUExBQ0VfREFUQQk1CS8qIGF3ZV9zYW1wbGVfaW5mbyAob3B0YXJnPSNjaGFubmVscykqLworI2RlZmluZSBTTkRSVl9TRk5UX01BUF9QUkVTRVQJNgkvKiBhd2Vfdm9pY2VfbWFwICovCisJLyogNyBpcyBub3QgdXNlZCAqLworI2RlZmluZSBTTkRSVl9TRk5UX1BST0JFX0RBVEEJCTgJLyogb3B0YXJnPXNhbXBsZSAqLworI2RlZmluZSBTTkRSVl9TRk5UX1JFTU9WRV9JTkZPCQk5CS8qIG9wdGFyZz0oYmFuazw8OCl8aW5zdHIgKi8KKworCXNob3J0IHJlc2VydmVkOwkJCS8qIHdvcmQgYWxpZ25tZW50IGRhdGEgKi8KKworCS8qIHRoZSBhY3R1YWwgcGF0Y2ggZGF0YSBiZWdpbnMgYWZ0ZXIgdGhpcyAqLworfSBzb3VuZGZvbnRfcGF0Y2hfaW5mb190OworCisKKy8qCisgKiBvcGVuIHBhdGNoCisgKi8KKworI2RlZmluZSBTTkRSVl9TRk5UX1BBVENIX05BTUVfTEVOCTMyCisKK3R5cGVkZWYgc3RydWN0IHNvdW5kZm9udF9vcGVuX3Bhcm1fdCB7CisJdW5zaWduZWQgc2hvcnQgdHlwZTsJCS8qIHNhbXBsZSB0eXBlICovCisjZGVmaW5lIFNORFJWX1NGTlRfUEFUX1RZUEVfTUlTQwkwCisjZGVmaW5lIFNORFJWX1NGTlRfUEFUX1RZUEVfR1VTCTYKKyNkZWZpbmUgU05EUlZfU0ZOVF9QQVRfVFlQRV9NQVAJNworI2RlZmluZSBTTkRSVl9TRk5UX1BBVF9MT0NLRUQJMHgxMDAJLyogbG9jayB0aGUgc2FtcGxlcyAqLworI2RlZmluZSBTTkRSVl9TRk5UX1BBVF9TSEFSRUQJMHgyMDAJLyogc2FtcGxlIGlzIHNoYXJlZCAqLworCisJc2hvcnQgcmVzZXJ2ZWQ7CisJY2hhciBuYW1lW1NORFJWX1NGTlRfUEFUQ0hfTkFNRV9MRU5dOworfSBzb3VuZGZvbnRfb3Blbl9wYXJtX3Q7CisKKworLyoKKyAqIHJhdyB2b2ljZSBpbmZvcm1hdGlvbiByZWNvcmQKKyAqLworCisvKiB3YXZlIHRhYmxlIGVudmVsb3BlICYgZWZmZWN0IHBhcmFtZXRlcnMgdG8gY29udHJvbCBFTVU4MDAwICovCit0eXBlZGVmIHN0cnVjdCBzb3VuZGZvbnRfdm9pY2VfcGFybV90IHsKKwl1bnNpZ25lZCBzaG9ydCBtb2RkZWxheTsJLyogbW9kdWxhdGlvbiBkZWxheSAoMHg4MDAwKSAqLworCXVuc2lnbmVkIHNob3J0IG1vZGF0a2hsZDsJLyogbW9kdWxhdGlvbiBhdHRhY2sgJiBob2xkIHRpbWUgKDB4N2Y3ZikgKi8KKwl1bnNpZ25lZCBzaG9ydCBtb2RkY3lzdXM7CS8qIG1vZHVsYXRpb24gZGVjYXkgJiBzdXN0YWluICgweDdmN2YpICovCisJdW5zaWduZWQgc2hvcnQgbW9kcmVsZWFzZTsJLyogbW9kdWxhdGlvbiByZWxlYXNlIHRpbWUgKDB4ODA3ZikgKi8KKwlzaG9ydCBtb2RrZXlob2xkLCBtb2RrZXlkZWNheTsJLyogZW52ZWxvcGUgY2hhbmdlIHBlciBrZXkgKG5vdCB1c2VkKSAqLworCXVuc2lnbmVkIHNob3J0IHZvbGRlbGF5OwkvKiB2b2x1bWUgZGVsYXkgKDB4ODAwMCkgKi8KKwl1bnNpZ25lZCBzaG9ydCB2b2xhdGtobGQ7CS8qIHZvbHVtZSBhdHRhY2sgJiBob2xkIHRpbWUgKDB4N2Y3ZikgKi8KKwl1bnNpZ25lZCBzaG9ydCB2b2xkY3lzdXM7CS8qIHZvbHVtZSBkZWNheSAmIHN1c3RhaW4gKDB4N2Y3ZikgKi8KKwl1bnNpZ25lZCBzaG9ydCB2b2xyZWxlYXNlOwkvKiB2b2x1bWUgcmVsZWFzZSB0aW1lICgweDgwN2YpICovCisJc2hvcnQgdm9sa2V5aG9sZCwgdm9sa2V5ZGVjYXk7CS8qIGVudmVsb3BlIGNoYW5nZSBwZXIga2V5IChub3QgdXNlZCkgKi8KKwl1bnNpZ25lZCBzaG9ydCBsZm8xZGVsYXk7CS8qIExGTzEgZGVsYXkgKDB4ODAwMCkgKi8KKwl1bnNpZ25lZCBzaG9ydCBsZm8yZGVsYXk7CS8qIExGTzIgZGVsYXkgKDB4ODAwMCkgKi8KKwl1bnNpZ25lZCBzaG9ydCBwZWZlOwkJLyogbW9kdWxhdGlvbiBwaXRjaCAmIGN1dG9mZiAoMHgwMDAwKSAqLworCXVuc2lnbmVkIHNob3J0IGZtbW9kOwkJLyogTEZPMSBwaXRjaCAmIGN1dG9mZiAoMHgwMDAwKSAqLworCXVuc2lnbmVkIHNob3J0IHRyZW1mcnE7CQkvKiBMRk8xIHZvbHVtZSAmIGZyZXEgKDB4MDAwMCkgKi8KKwl1bnNpZ25lZCBzaG9ydCBmbTJmcnEyOwkJLyogTEZPMiBwaXRjaCAmIGZyZXEgKDB4MDAwMCkgKi8KKwl1bnNpZ25lZCBjaGFyIGN1dG9mZjsJCS8qIGluaXRpYWwgY3V0b2ZmICgweGZmKSAqLworCXVuc2lnbmVkIGNoYXIgZmlsdGVyUTsJCS8qIGluaXRpYWwgZmlsdGVyIFEgWzAtMTVdICgweDApICovCisJdW5zaWduZWQgY2hhciBjaG9ydXM7CQkvKiBjaG9ydXMgc2VuZCAoMHgwMCkgKi8KKwl1bnNpZ25lZCBjaGFyIHJldmVyYjsJCS8qIHJldmVyYiBzZW5kICgweDAwKSAqLworCXVuc2lnbmVkIHNob3J0IHJlc2VydmVkWzRdOwkvKiBub3QgdXNlZCAqLworfSBzb3VuZGZvbnRfdm9pY2VfcGFybV90OworCisKKy8qIHdhdmUgdGFibGUgcGFyYW1ldGVyczogOTIgYnl0ZXMgKi8KK3R5cGVkZWYgc3RydWN0IHNvdW5kZm9udF92b2ljZV9pbmZvX3QgeworCXVuc2lnbmVkIHNob3J0IHNmX2lkOwkJLyogZmlsZSBpZCAoc2hvdWxkIGJlIHplcm8pICovCisJdW5zaWduZWQgc2hvcnQgc2FtcGxlOwkJLyogc2FtcGxlIGlkICovCisJaW50IHN0YXJ0LCBlbmQ7CQkJLyogc2FtcGxlIG9mZnNldCBjb3JyZWN0aW9uICovCisJaW50IGxvb3BzdGFydCwgbG9vcGVuZDsJCS8qIGxvb3Agb2Zmc2V0IGNvcnJlY3Rpb24gKi8KKwlzaG9ydCByYXRlX29mZnNldDsJCS8qIHNhbXBsZSByYXRlIHBpdGNoIG9mZnNldCAqLworCXVuc2lnbmVkIHNob3J0IG1vZGU7CQkvKiBzYW1wbGUgbW9kZSAqLworI2RlZmluZSBTTkRSVl9TRk5UX01PREVfUk9NU09VTkQJCTB4ODAwMAorI2RlZmluZSBTTkRSVl9TRk5UX01PREVfU1RFUkVPCQkxCisjZGVmaW5lIFNORFJWX1NGTlRfTU9ERV9MT09QSU5HCQkyCisjZGVmaW5lIFNORFJWX1NGTlRfTU9ERV9OT1JFTEVBU0UJCTQJLyogb2Jzb2xldGUgKi8KKyNkZWZpbmUgU05EUlZfU0ZOVF9NT0RFX0lOSVRfUEFSTQkJOAorCisJc2hvcnQgcm9vdDsJCQkvKiBtaWRpIHJvb3Qga2V5ICovCisJc2hvcnQgdHVuZTsJCQkvKiBwaXRjaCB0dW5pbmcgKGluIGNlbnRzKSAqLworCXVuc2lnbmVkIGNoYXIgbG93LCBoaWdoOwkvKiBrZXkgbm90ZSByYW5nZSAqLworCXVuc2lnbmVkIGNoYXIgdmVsbG93LCB2ZWxoaWdoOwkvKiB2ZWxvY2l0eSByYW5nZSAqLworCXNpZ25lZCBjaGFyIGZpeGtleSwgZml4dmVsOwkvKiBmaXhlZCBrZXksIHZlbG9jaXR5ICovCisJc2lnbmVkIGNoYXIgcGFuLCBmaXhwYW47CS8qIHBhbm5pbmcsIGZpeGVkIHBhbm5pbmcgKi8KKwlzaG9ydCBleGNsdXNpdmVDbGFzczsJCS8qIGV4Y2x1c2l2ZSBjbGFzcyAoMCA9IG5vbmUpICovCisJdW5zaWduZWQgY2hhciBhbXBsaXR1ZGU7CS8qIHNhbXBsZSB2b2x1bWUgKDEyNyBtYXgpICovCisJdW5zaWduZWQgY2hhciBhdHRlbnVhdGlvbjsJLyogYXR0ZW51YXRpb24gKDAuMzc1ZEIpICovCisJc2hvcnQgc2NhbGVUdW5pbmc7CQkvKiBwaXRjaCBzY2FsZSB0dW5pbmcoJSksIG5vcm1hbGx5IDEwMCAqLworCXNvdW5kZm9udF92b2ljZV9wYXJtX3QgcGFybTsJLyogdm9pY2UgZW52ZWxvcGUgcGFyYW1ldGVycyAqLworCXVuc2lnbmVkIHNob3J0IHNhbXBsZV9tb2RlOwkvKiBzYW1wbGUgbW9kZV9mbGFnIChzZXQgYnkgZHJpdmVyKSAqLworfSBzb3VuZGZvbnRfdm9pY2VfaW5mb190OworCisKKy8qIGluc3RydW1lbnQgaW5mbyBoZWFkZXI6IDQgYnl0ZXMgKi8KK3R5cGVkZWYgc3RydWN0IHNvdW5kZm9udF92b2ljZV9yZWNfaGRyX3QgeworCXVuc2lnbmVkIGNoYXIgYmFuazsJCS8qIG1pZGkgYmFuayBudW1iZXIgKi8KKwl1bnNpZ25lZCBjaGFyIGluc3RyOwkJLyogbWlkaSBwcmVzZXQgbnVtYmVyICovCisJY2hhciBudm9pY2VzOwkJCS8qIG51bWJlciBvZiB2b2ljZXMgKi8KKwljaGFyIHdyaXRlX21vZGU7CQkvKiB3cml0ZSBtb2RlOyBub3JtYWxseSAwICovCisjZGVmaW5lIFNORFJWX1NGTlRfV1JfQVBQRU5ECQkwCS8qIGFwcGVuZCBhbnl3YXkgKi8KKyNkZWZpbmUgU05EUlZfU0ZOVF9XUl9FWENMVVNJVkUJCTEJLyogc2tpcCBpZiBhbHJlYWR5IGV4aXN0cyAqLworI2RlZmluZSBTTkRSVl9TRk5UX1dSX1JFUExBQ0UJCTIJLyogcmVwbGFjZSBpZiBhbHJlYWR5IGV4aXN0cyAqLworfSBzb3VuZGZvbnRfdm9pY2VfcmVjX2hkcl90OworCisKKy8qCisgKiBzYW1wbGUgd2F2ZSBpbmZvcm1hdGlvbgorICovCisKKy8qIHdhdmUgdGFibGUgc2FtcGxlIGhlYWRlcjogMzIgYnl0ZXMgKi8KK3R5cGVkZWYgc3RydWN0IHNvdW5kZm9udF9zYW1wbGVfaW5mb190IHsKKwl1bnNpZ25lZCBzaG9ydCBzZl9pZDsJCS8qIGZpbGUgaWQgKHNob3VsZCBiZSB6ZXJvKSAqLworCXVuc2lnbmVkIHNob3J0IHNhbXBsZTsJCS8qIHNhbXBsZSBpZCAqLworCWludCBzdGFydCwgZW5kOwkJCS8qIHN0YXJ0ICYgZW5kIG9mZnNldCAqLworCWludCBsb29wc3RhcnQsIGxvb3BlbmQ7CQkvKiBsb29wIHN0YXJ0ICYgZW5kIG9mZnNldCAqLworCWludCBzaXplOwkJCS8qIHNpemUgKDAgPSBST00pICovCisJc2hvcnQgZHVtbXk7CQkJLyogbm90IHVzZWQgKi8KKwl1bnNpZ25lZCBzaG9ydCBtb2RlX2ZsYWdzOwkvKiBtb2RlIGZsYWdzICovCisjZGVmaW5lIFNORFJWX1NGTlRfU0FNUExFXzhCSVRTCQkxCS8qIHdhdmUgZGF0YSBpcyA4Yml0cyAqLworI2RlZmluZSBTTkRSVl9TRk5UX1NBTVBMRV9VTlNJR05FRAkyCS8qIHdhdmUgZGF0YSBpcyB1bnNpZ25lZCAqLworI2RlZmluZSBTTkRSVl9TRk5UX1NBTVBMRV9OT19CTEFOSwk0CS8qIG5vIGJsYW5rIGxvb3AgaXMgYXR0YWNoZWQgKi8KKyNkZWZpbmUgU05EUlZfU0ZOVF9TQU1QTEVfU0lOR0xFU0hPVAk4CS8qIHNpbmdsZS1zaG90IHcvbyBsb29wICovCisjZGVmaW5lIFNORFJWX1NGTlRfU0FNUExFX0JJRElSX0xPT1AJMTYJLyogYmlkaXJlY3Rpb25hbCBsb29waW5nICovCisjZGVmaW5lIFNORFJWX1NGTlRfU0FNUExFX1NURVJFT19MRUZUCTMyCS8qIHN0ZXJlbyBsZWZ0IHNvdW5kICovCisjZGVmaW5lIFNORFJWX1NGTlRfU0FNUExFX1NURVJFT19SSUdIVAk2NAkvKiBzdGVyZW8gcmlnaHQgc291bmQgKi8KKyNkZWZpbmUgU05EUlZfU0ZOVF9TQU1QTEVfUkVWRVJTRV9MT09QCTEyOAkvKiByZXZlcnNlIGxvb3BpbmcgKi8KKwl1bnNpZ25lZCBpbnQgdHJ1ZXNpemU7CQkvKiB1c2VkIG1lbW9yeSBzaXplIChzZXQgYnkgZHJpdmVyKSAqLworfSBzb3VuZGZvbnRfc2FtcGxlX2luZm9fdDsKKworCisvKgorICogdm9pY2UgcHJlc2V0IG1hcHBpbmcgKGFsaWFzaW5nKQorICovCisKK3R5cGVkZWYgc3RydWN0IHNvdW5kZm9udF92b2ljZV9tYXBfdCB7CisJaW50IG1hcF9iYW5rLCBtYXBfaW5zdHIsIG1hcF9rZXk7CS8qIGtleSA9IC0xIG1lYW5zIGFsbCBrZXlzICovCisJaW50IHNyY19iYW5rLCBzcmNfaW5zdHIsIHNyY19rZXk7Cit9IHNvdW5kZm9udF92b2ljZV9tYXBfdDsKKworCisvKgorICogaW9jdGxzIGZvciBod2RlcAorICovCisKKyNkZWZpbmUgU05EUlZfRU1VWF9IV0RFUF9OQU1FCSJFbXV4IFdhdmVUYWJsZSIKKworI2RlZmluZSBTTkRSVl9FTVVYX1ZFUlNJT04JKCgxIDw8IDE2KSB8ICgwIDw8IDgpIHwgMCkJLyogMS4wLjAgKi8KKworc3RydWN0IHNuZHJ2X2VtdXhfbWlzY19tb2RlIHsKKwlpbnQgcG9ydDsJLyogLTEgPSBhbGwgKi8KKwlpbnQgbW9kZTsKKwlpbnQgdmFsdWU7CisJaW50IHZhbHVlMjsJLyogcmVzZXJ2ZWQgKi8KK307CisKK2VudW0geworCVNORFJWX0VNVVhfSU9DVExfVkVSU0lPTiA9IF9JT1IoJ0gnLCAweDgwLCB1bnNpZ25lZCBpbnQpLAorCVNORFJWX0VNVVhfSU9DVExfTE9BRF9QQVRDSCA9IF9JT1dSKCdIJywgMHg4MSwgc291bmRmb250X3BhdGNoX2luZm9fdCksCisJU05EUlZfRU1VWF9JT0NUTF9SRVNFVF9TQU1QTEVTID0gX0lPKCdIJywgMHg4MiksCisJU05EUlZfRU1VWF9JT0NUTF9SRU1PVkVfTEFTVF9TQU1QTEVTID0gX0lPKCdIJywgMHg4MyksCisJU05EUlZfRU1VWF9JT0NUTF9NRU1fQVZBSUwgPSBfSU9XKCdIJywgMHg4NCwgaW50KSwKKwlTTkRSVl9FTVVYX0lPQ1RMX01JU0NfTU9ERSA9IF9JT1dSKCdIJywgMHg4NCwgc3RydWN0IHNuZHJ2X2VtdXhfbWlzY19tb2RlKSwKK307CisKKyNlbmRpZiAvKiBfX1NPVU5EX1NGTlRfSU5GT19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3NuZF93YXZlZnJvbnQuaCBiL2luY2x1ZGUvc291bmQvc25kX3dhdmVmcm9udC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiMGIyYjkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3NvdW5kL3NuZF93YXZlZnJvbnQuaApAQCAtMCwwICsxLDE0MSBAQAorI2lmbmRlZiBfX1NPVU5EX1NORF9XQVZFRlJPTlRfSF9fCisjZGVmaW5lIF9fU09VTkRfU05EX1dBVkVGUk9OVF9IX18KKworI2luY2x1ZGUgImNzNDIzMS5oIgorI2luY2x1ZGUgIm1wdTQwMS5oIgorI2luY2x1ZGUgImh3ZGVwLmgiCisjaW5jbHVkZSAicmF3bWlkaS5oIgorI2luY2x1ZGUgIndhdmVmcm9udC5oIiAgLyogZ2VuZXJpYyBPU1MvQUxTQS91c2VyLWxldmVsIHdhdmVmcm9udCBoZWFkZXIgKi8KKworLyogTUlESSBpbnRlcmZhY2UgKi8KKworc3RydWN0IF9zbmRfd2F2ZWZyb250X21pZGk7CitzdHJ1Y3QgX3NuZF93YXZlZnJvbnRfY2FyZDsKK3N0cnVjdCBfc25kX3dhdmVmcm9udDsKKwordHlwZWRlZiBzdHJ1Y3QgX3NuZF93YXZlZnJvbnRfbWlkaSBzbmRfd2F2ZWZyb250X21pZGlfdDsKK3R5cGVkZWYgc3RydWN0IF9zbmRfd2F2ZWZyb250X2NhcmQgc25kX3dhdmVmcm9udF9jYXJkX3Q7Cit0eXBlZGVmIHN0cnVjdCBfc25kX3dhdmVmcm9udCBzbmRfd2F2ZWZyb250X3Q7CisKK3R5cGVkZWYgZW51bSB7IGludGVybmFsX21wdSA9IDAsIGV4dGVybmFsX21wdSA9IDEgfSBzbmRfd2F2ZWZyb250X21wdV9pZDsKKworc3RydWN0IF9zbmRfd2F2ZWZyb250X21pZGkgeworICAgICAgICB1bnNpZ25lZCBsb25nICAgICAgICAgICAgYmFzZTsgICAgICAgIC8qIEkvTyBwb3J0IGFkZHJlc3MgKi8KKwljaGFyICAgICAgICAgICAgICAgICAgICAgaXN2aXJ0dWFsOyAgIC8qIGRvaW5nIHZpcnR1YWwgTUlESSBzdHVmZiA/ICovCisJY2hhcgkJCSBpc3RpbWVyOyAgICAgLyogdGltZXIgaXMgdXNlZCAqLworICAgICAgICBzbmRfd2F2ZWZyb250X21wdV9pZCAgICAgb3V0cHV0X21wdTsgIC8qIG1vc3QtcmVjZW50bHktdXNlZCAqLworICAgICAgICBzbmRfd2F2ZWZyb250X21wdV9pZCAgICAgaW5wdXRfbXB1OyAgIC8qIG1vc3QtcmVjZW50bHktdXNlZCAqLworICAgICAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgICAgbW9kZVsyXTsgICAgIC8qIE1QVTQwMV9NT0RFX1hYWCAqLworCXNuZF9yYXdtaWRpX3N1YnN0cmVhbV90CSAqc3Vic3RyZWFtX291dHB1dFsyXTsKKwlzbmRfcmF3bWlkaV9zdWJzdHJlYW1fdAkgKnN1YnN0cmVhbV9pbnB1dFsyXTsKKwlzdHJ1Y3QgdGltZXJfbGlzdAkgdGltZXI7CisgICAgICAgIHNwaW5sb2NrX3QgICAgICAgICAgICAgICBvcGVuOworICAgICAgICBzcGlubG9ja190ICAgICAgICAgICAgICAgdmlydHVhbDsgICAgIC8qIHByb3RlY3RzIGlzdmlydHVhbCAqLworfTsKKworI2RlZmluZQlPVVRQVVRfUkVBRFkJMHg0MAorI2RlZmluZQlJTlBVVF9BVkFJTAkweDgwCisjZGVmaW5lCU1QVV9BQ0sJCTB4RkUKKyNkZWZpbmUJVUFSVF9NT0RFX09OCTB4M0YKKworZXh0ZXJuIHNuZF9yYXdtaWRpX29wc190IHNuZF93YXZlZnJvbnRfbWlkaV9vdXRwdXQ7CitleHRlcm4gc25kX3Jhd21pZGlfb3BzX3Qgc25kX3dhdmVmcm9udF9taWRpX2lucHV0OworCitleHRlcm4gdm9pZCAgIHNuZF93YXZlZnJvbnRfbWlkaV9lbmFibGVfdmlydHVhbCAoc25kX3dhdmVmcm9udF9jYXJkX3QgKik7CitleHRlcm4gdm9pZCAgIHNuZF93YXZlZnJvbnRfbWlkaV9kaXNhYmxlX3ZpcnR1YWwgKHNuZF93YXZlZnJvbnRfY2FyZF90ICopOworZXh0ZXJuIHZvaWQgICBzbmRfd2F2ZWZyb250X21pZGlfaW50ZXJydXB0IChzbmRfd2F2ZWZyb250X2NhcmRfdCAqKTsKK2V4dGVybiBpbnQgICAgc25kX3dhdmVmcm9udF9taWRpX3N0YXJ0IChzbmRfd2F2ZWZyb250X2NhcmRfdCAqKTsKKworc3RydWN0IF9zbmRfd2F2ZWZyb250IHsKKwl1bnNpZ25lZCBsb25nICAgIGlycTsgICAvKiAieW91IHdlcmUgb25lLCBvbmUgb2YgdGhlIGZldyAuLi4iICovCisJdW5zaWduZWQgbG9uZyAgICBiYXNlOyAgLyogbG93IGkvbyBwb3J0IGFkZHJlc3MgKi8KKwlzdHJ1Y3QgcmVzb3VyY2UJICpyZXNfYmFzZTsgLyogaS9vIHBvcnQgcmVzb3VyY2UgYWxsb2NhdGlvbiAqLworCisjZGVmaW5lIG1wdV9kYXRhX3BvcnQgICAgYmFzZSAKKyNkZWZpbmUgbXB1X2NvbW1hbmRfcG9ydCBiYXNlICsgMSAvKiB3cml0ZSBzZW1hbnRpY3MgKi8KKyNkZWZpbmUgbXB1X3N0YXR1c19wb3J0ICBiYXNlICsgMSAvKiByZWFkIHNlbWFudGljcyAqLworI2RlZmluZSBkYXRhX3BvcnQgICAgICAgIGJhc2UgKyAyIAorI2RlZmluZSBzdGF0dXNfcG9ydCAgICAgIGJhc2UgKyAzIC8qIHJlYWQgc2VtYW50aWNzICovCisjZGVmaW5lIGNvbnRyb2xfcG9ydCAgICAgYmFzZSArIDMgLyogd3JpdGUgc2VtYW50aWNzICAqLworI2RlZmluZSBibG9ja19wb3J0ICAgICAgIGJhc2UgKyA0IC8qIDE2IGJpdCwgd3JpdGVvbmx5ICovCisjZGVmaW5lIGxhc3RfYmxvY2tfcG9ydCAgYmFzZSArIDYgLyogMTYgYml0LCB3cml0ZW9ubHkgKi8KKworCS8qIEZYIHBvcnRzLiBUaGVzZSBhcmUgbWFwcGVkIHRocm91Z2ggdGhlIElDUzIxMTUgdG8gdGhlIFlTMjI1LgorCSAgIFRoZSBJQ1MyMTE1IHRha2VzIGNhcmUgb2YgZmxpcHBpbmcgdGhlIHJlbGV2YW50IHBpbnMgb24gdGhlCisJICAgWVMyMjUgc28gdGhhdCBhY2Nlc3MgdG8gZWFjaCBvZiB0aGVzZSBwb3J0cyBkb2VzIHRoZSByaWdodAorCSAgIHRoaW5nLiBOb3RlOiB0aGVzZSBhcmUgTk9UIGRvY3VtZW50ZWQgYnkgVHVydGxlIEJlYWNoLgorCSovCisKKyNkZWZpbmUgZnhfc3RhdHVzICAgICAgIGJhc2UgKyA4IAorI2RlZmluZSBmeF9vcCAgICAgICAgICAgYmFzZSArIDggCisjZGVmaW5lIGZ4X2xjciAgICAgICAgICBiYXNlICsgOSAKKyNkZWZpbmUgZnhfZHNwX2FkZHIgICAgIGJhc2UgKyAweGEKKyNkZWZpbmUgZnhfZHNwX3BhZ2UgICAgIGJhc2UgKyAweGIgCisjZGVmaW5lIGZ4X2RzcF9sc2IgICAgICBiYXNlICsgMHhjIAorI2RlZmluZSBmeF9kc3BfbXNiICAgICAgYmFzZSArIDB4ZCAKKyNkZWZpbmUgZnhfbW9kX2FkZHIgICAgIGJhc2UgKyAweGUKKyNkZWZpbmUgZnhfbW9kX2RhdGEgICAgIGJhc2UgKyAweGYgCisKKwl2b2xhdGlsZSBpbnQgaXJxX29rOyAgICAgICAgICAgICAgIC8qIHNldCBieSBpbnRlcnJ1cHQgaGFuZGxlciAqLworICAgICAgICB2b2xhdGlsZSBpbnQgaXJxX2NudDsgICAgICAgICAgICAgIC8qIGRpdHRvICovCisJY2hhciBkZWJ1ZzsgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWJ1Z2dpbmcgZmxhZ3MgKi8KKwlpbnQgZnJlZW1lbTsgICAgICAgICAgICAgICAgICAgICAgIC8qIGluc3RhbGxlZCBSQU0sIGluIGJ5dGVzICovIAorCisJY2hhciBmd192ZXJzaW9uWzJdOyAgICAgICAgICAgICAgICAvKiBtYWpvciA9IFswXSwgbWlub3IgPSBbMV0gKi8KKwljaGFyIGh3X3ZlcnNpb25bMl07ICAgICAgICAgICAgICAgIC8qIG1ham9yID0gWzBdLCBtaW5vciA9IFsxXSAqLworCWNoYXIgaXNyYXc7ICAgICAgICAgICAgICAgICAgICAgICAgLyogbmVlZHMgTW90b3JvbGEgbWljcm9jb2RlICovCisJY2hhciBoYXNfZng7ICAgICAgICAgICAgICAgICAgICAgICAvKiBoYXMgRlggcHJvY2Vzc29yIChUcm9wZXorKSAqLworCWNoYXIgcHJvZ19zdGF0dXNbV0ZfTUFYX1BST0dSQU1dOyAgLyogV0ZfU0xPVF8qICovCisJY2hhciBwYXRjaF9zdGF0dXNbV0ZfTUFYX1BBVENIXTsgICAvKiBXRl9TTE9UXyogKi8KKwljaGFyIHNhbXBsZV9zdGF0dXNbV0ZfTUFYX1NBTVBMRV07IC8qIFdGX1NUXyogfCBXRl9TTE9UXyogKi8KKwlpbnQgc2FtcGxlc191c2VkOyAgICAgICAgICAgICAgICAgIC8qIGhvdyBtYW55ICovCisJY2hhciBpbnRlcnJ1cHRzX2FyZV9taWRpOyAgICAgICAgICAvKiBoL3cgTVBVIGludGVycnVwdHMgZW5hYmxlZCA/ICovCisJY2hhciByb21fc2FtcGxlc19yZG9ubHk7ICAgICAgICAgICAvKiBjYW4gd2Ugd3JpdGUgb24gUk9NIHNhbXBsZXMgKi8KKwlzcGlubG9ja190IGlycV9sb2NrOworCXdhaXRfcXVldWVfaGVhZF90IGludGVycnVwdF9zbGVlcGVyOyAKKwlzbmRfd2F2ZWZyb250X21pZGlfdCBtaWRpOyAgICAgICAgIC8qIElDUzIxMTUgTUlESSBpbnRlcmZhY2UgKi8KK307CisKK3N0cnVjdCBfc25kX3dhdmVmcm9udF9jYXJkIHsKKwlzbmRfd2F2ZWZyb250X3Qgd2F2ZWZyb250OworI2lmZGVmIENPTkZJR19QTlAKKwlzdHJ1Y3QgcG5wX2RldiAqd3NzOworCXN0cnVjdCBwbnBfZGV2ICpjdHJsOworCXN0cnVjdCBwbnBfZGV2ICptcHU7CisJc3RydWN0IHBucF9kZXYgKnN5bnRoOworI2VuZGlmIC8qIENPTkZJR19QTlAgKi8KK307CisKK2V4dGVybiB2b2lkIHNuZF93YXZlZnJvbnRfaW50ZXJuYWxfaW50ZXJydXB0IChzbmRfd2F2ZWZyb250X2NhcmRfdCAqY2FyZCk7CitleHRlcm4gaW50ICBzbmRfd2F2ZWZyb250X2RldGVjdF9pcnEgKHNuZF93YXZlZnJvbnRfdCAqZGV2KSA7CitleHRlcm4gaW50ICBzbmRfd2F2ZWZyb250X2NoZWNrX2lycSAoc25kX3dhdmVmcm9udF90ICpkZXYsIGludCBpcnEpOworZXh0ZXJuIGludCAgc25kX3dhdmVmcm9udF9yZXN0YXJ0IChzbmRfd2F2ZWZyb250X3QgKmRldik7CitleHRlcm4gaW50ICBzbmRfd2F2ZWZyb250X3N0YXJ0IChzbmRfd2F2ZWZyb250X3QgKmRldik7CitleHRlcm4gaW50ICBzbmRfd2F2ZWZyb250X2RldGVjdCAoc25kX3dhdmVmcm9udF9jYXJkX3QgKmNhcmQpOworZXh0ZXJuIGludCAgc25kX3dhdmVmcm9udF9jb25maWdfbWlkaSAoc25kX3dhdmVmcm9udF90ICpkZXYpIDsKK2V4dGVybiBpbnQgIHNuZF93YXZlZnJvbnRfY21kIChzbmRfd2F2ZWZyb250X3QgKiwgaW50LCB1bnNpZ25lZCBjaGFyICosCisJCQkgICAgICAgdW5zaWduZWQgY2hhciAqKTsKKworZXh0ZXJuIGludCBzbmRfd2F2ZWZyb250X3N5bnRoX2lvY3RsICAgKHNuZF9od2RlcF90ICosIAorCQkJCQlzdHJ1Y3QgZmlsZSAqLAorCQkJCQl1bnNpZ25lZCBpbnQgY21kLCAKKwkJCQkJdW5zaWduZWQgbG9uZyBhcmcpOworZXh0ZXJuIGludCAgc25kX3dhdmVmcm9udF9zeW50aF9vcGVuICAgIChzbmRfaHdkZXBfdCAqLCBzdHJ1Y3QgZmlsZSAqKTsKK2V4dGVybiBpbnQgIHNuZF93YXZlZnJvbnRfc3ludGhfcmVsZWFzZSAoc25kX2h3ZGVwX3QgKiwgc3RydWN0IGZpbGUgKik7CisKKy8qIEZYIHByb2Nlc3NvciAtIHNlZSBhbHNvIHlzczIyNS5bY2hdICovCisKK2V4dGVybiBpbnQgIHNuZF93YXZlZnJvbnRfZnhfc3RhcnQgIChzbmRfd2F2ZWZyb250X3QgKik7CitleHRlcm4gaW50ICBzbmRfd2F2ZWZyb250X2Z4X2RldGVjdCAoc25kX3dhdmVmcm9udF90ICopOworZXh0ZXJuIGludCAgc25kX3dhdmVmcm9udF9meF9pb2N0bCAgKHNuZF9od2RlcF90ICosIAorCQkJCSAgICAgc3RydWN0IGZpbGUgKiwKKwkJCQkgICAgIHVuc2lnbmVkIGludCBjbWQsIAorCQkJCSAgICAgdW5zaWduZWQgbG9uZyBhcmcpOworZXh0ZXJuIGludCBzbmRfd2F2ZWZyb250X2Z4X29wZW4gICAgKHNuZF9od2RlcF90ICosIHN0cnVjdCBmaWxlICopOworZXh0ZXJuIGludCBzbmRfd2F2ZWZyb250X2Z4X3JlbGVhc2UgKHNuZF9od2RlcF90ICosIHN0cnVjdCBmaWxlICopOworCisvKiBwcmVmaXggaW4gYWxsIHNuZF9wcmludGsoKSBkZWxpdmVyZWQgbWVzc2FnZXMgKi8KKworI2RlZmluZSBMT0dOQU1FICJXYXZlRnJvbnQ6ICIKKworI2VuZGlmICAvKiBfX1NPVU5EX1NORF9XQVZFRlJPTlRfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3NvdW5kZm9udC5oIGIvaW5jbHVkZS9zb3VuZC9zb3VuZGZvbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTkyOTU4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9zb3VuZC9zb3VuZGZvbnQuaApAQCAtMCwwICsxLDEzMCBAQAorI2lmbmRlZiBfX1NPVU5EX1NPVU5ERk9OVF9ICisjZGVmaW5lIF9fU09VTkRfU09VTkRGT05UX0gKKworLyoKKyAqICBTb3VuZGZvbnQgZGVmaW5lcyBhbmQgZGVmaW5pdGlvbnMuCisgKgorICogIENvcHlyaWdodCAoQykgMTk5OSBTdGV2ZSBSYXRjbGlmZmUKKyAqICBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMCBUYWthc2hpIGl3YWkgPHRpd2FpQHN1c2UuZGU+CisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlICJzZm50X2luZm8uaCIKKyNpbmNsdWRlICJ1dGlsX21lbS5oIgorCisjZGVmaW5lIFNGX01BWF9JTlNUUlVNRU5UUwkxMjgJLyogbWF4aW11bSBpbnN0cnVtZW50IG51bWJlciAqLworI2RlZmluZSBTRl9NQVhfUFJFU0VUUyAgMjU2CS8qIGRydW1zIGFyZSBtYXBwZWQgZnJvbSAxMjggdG8gMjU2ICovCisjZGVmaW5lIFNGX0lTX0RSVU1fQkFOSyh6KSAoKHopID09IDEyOCkKKwordHlwZWRlZiBzdHJ1Y3Qgc25kX3NmX3pvbmUgeworCXN0cnVjdCBzbmRfc2Zfem9uZSAqbmV4dDsJLyogTGluayB0byBuZXh0ICovCisJdW5zaWduZWQgY2hhciBiYW5rOwkJLyogTWlkaSBiYW5rIGZvciB0aGlzIHpvbmUgKi8KKwl1bnNpZ25lZCBjaGFyIGluc3RyOwkJLyogTWlkaSBwcm9ncmFtIGZvciB0aGlzIHpvbmUgKi8KKwl1bnNpZ25lZCBjaGFyIG1hcHBlZDsJCS8qIFRydWUgaWYgbWFwcGVkIHRvIHNvbWV0aGluZyBlbHNlICovCisKKwlzb3VuZGZvbnRfdm9pY2VfaW5mb190IHY7CS8qIEFsbCB0aGUgc291bmRmb250IHBhcmFtZXRlcnMgKi8KKwlpbnQgY291bnRlcjsKKwlzdHJ1Y3Qgc25kX3NmX3NhbXBsZSAqc2FtcGxlOwkvKiBMaW5rIHRvIHNhbXBsZSAqLworCisJLyogVGhlIGZvbGxvd2luZyBkZWFscyB3aXRoIHByZXNldCBudW1iZXJzIChwcm9ncmFtcykgKi8KKwlzdHJ1Y3Qgc25kX3NmX3pvbmUgKm5leHRfaW5zdHI7CS8qIE5leHQgem9uZSBvZiB0aGlzIGluc3RydW1lbnQgKi8KKwlzdHJ1Y3Qgc25kX3NmX3pvbmUgKm5leHRfem9uZTsJLyogTmV4dCB6b25lIGluIHBsYXkgbGlzdCAqLworfSBzbmRfc2Zfem9uZV90OworCit0eXBlZGVmIHN0cnVjdCBzbmRfc2Zfc2FtcGxlIHsKKwlzb3VuZGZvbnRfc2FtcGxlX2luZm9fdCB2OworCWludCBjb3VudGVyOworCXNuZF91dGlsX21lbWJsa190ICpibG9jazsJLyogYWxsb2NhdGVkIGRhdGEgYmxvY2sgKi8KKwlzdHJ1Y3Qgc25kX3NmX3NhbXBsZSAqbmV4dDsKK30gc25kX3NmX3NhbXBsZV90OworCisvKgorICogVGhpcyByZXByZXNlbnRzIGFsbCB0aGUgaW5mb3JtYXRpb24gcmVsYXRpbmcgdG8gYSBzb3VuZGZvbnQuCisgKi8KK3R5cGVkZWYgc3RydWN0IHNuZF9zb3VuZGZvbnQgeworCXN0cnVjdCBzbmRfc291bmRmb250ICpuZXh0OwkvKiBMaW5rIHRvIG5leHQgKi8KKwkvKnN0cnVjdCBzbmRfc291bmRmb250ICpwcmV2OyovCS8qIExpbmsgdG8gcHJldmlvdXMgKi8KKwlzaG9ydCAgaWQ7CQkvKiBmaWxlIGlkICovCisJc2hvcnQgIHR5cGU7CQkvKiBmb250IHR5cGUgKi8KKwl1bnNpZ25lZCBjaGFyIG5hbWVbU05EUlZfU0ZOVF9QQVRDSF9OQU1FX0xFTl07CS8qIGlkZW50aWZpZXIgKi8KKwlzbmRfc2Zfem9uZV90ICp6b25lczsgLyogRm9udCBpbmZvcm1hdGlvbiAqLworCXNuZF9zZl9zYW1wbGVfdCAqc2FtcGxlczsgLyogVGhlIHNhbXBsZSBoZWFkZXJzICovCit9IHNuZF9zb3VuZGZvbnRfdDsKKworLyoKKyAqIFR5cGUgb2YgdGhlIHNhbXBsZSBhY2Nlc3MgY2FsbGJhY2sKKyAqLwordHlwZWRlZiBpbnQgKCpzbmRfc2Zfc2FtcGxlX25ld190KSh2b2lkICpwcml2YXRlX2RhdGEsIHNuZF9zZl9zYW1wbGVfdCAqc3AsCisJCQkJICAgc25kX3V0aWxfbWVtaGRyX3QgKmhkciwgY29uc3Qgdm9pZCBfX3VzZXIgKmJ1ZiwgbG9uZyBjb3VudCk7Cit0eXBlZGVmIGludCAoKnNuZF9zZl9zYW1wbGVfZnJlZV90KSh2b2lkICpwcml2YXRlX2RhdGEsIHNuZF9zZl9zYW1wbGVfdCAqc3AsCisJCQkJICAgIHNuZF91dGlsX21lbWhkcl90ICpoZHIpOwordHlwZWRlZiB2b2lkICgqc25kX3NmX3NhbXBsZV9yZXNldF90KSh2b2lkICpwcml2YXRlKTsKKwordHlwZWRlZiBzdHJ1Y3Qgc25kX3NmX2NhbGxiYWNrIHsKKwl2b2lkICpwcml2YXRlX2RhdGE7CisJc25kX3NmX3NhbXBsZV9uZXdfdCBzYW1wbGVfbmV3OworCXNuZF9zZl9zYW1wbGVfZnJlZV90IHNhbXBsZV9mcmVlOworCXNuZF9zZl9zYW1wbGVfcmVzZXRfdCBzYW1wbGVfcmVzZXQ7Cit9IHNuZF9zZl9jYWxsYmFja190OworCisvKgorICogTGlzdCBvZiBzb3VuZGZvbnRzLgorICovCit0eXBlZGVmIHN0cnVjdCBzbmRfc2ZfbGlzdCB7CisJc25kX3NvdW5kZm9udF90ICpjdXJyc2Y7IC8qIFRoZSBjdXJyZW50bHkgb3BlbiBzb3VuZGZvbnQgKi8KKwlpbnQgb3Blbl9jbGllbnQ7CS8qIGNsaWVudCBwb2ludGVyIGZvciBsb2NrICovCisJaW50IG1lbV91c2VkOwkJLyogdXNlZCBtZW1vcnkgc2l6ZSAqLworCXNuZF9zZl96b25lX3QgKnByZXNldHNbU0ZfTUFYX1BSRVNFVFNdOworCXNuZF9zb3VuZGZvbnRfdCAqZm9udHM7IC8qIFRoZSBsaXN0IG9mIHNvdW5kZm9udHMgKi8KKwlpbnQgZm9udHNfc2l6ZTsJLyogbnVtYmVyIG9mIGZvbnRzIGFsbG9jYXRlZCAqLworCWludCB6b25lX2NvdW50ZXI7CS8qIGxhc3QgYWxsb2NhdGVkIHRpbWUgZm9yIHpvbmUgKi8KKwlpbnQgc2FtcGxlX2NvdW50ZXI7CS8qIGxhc3QgYWxsb2NhdGVkIHRpbWUgZm9yIHNhbXBsZSAqLworCWludCB6b25lX2xvY2tlZDsJLyogbG9ja2VkIHRpbWUgZm9yIHpvbmUgKi8KKwlpbnQgc2FtcGxlX2xvY2tlZDsJLyogbG9ja2VkIHRpbWUgZm9yIHNhbXBsZSAqLworCXNuZF9zZl9jYWxsYmFja190IGNhbGxiYWNrOwkvKiBjYWxsYmFjayBmdW5jdGlvbnMgKi8KKwlpbnQgcHJlc2V0c19sb2NrZWQ7CisJc3RydWN0IHNlbWFwaG9yZSBwcmVzZXRzX211dGV4OworCXNwaW5sb2NrX3QgbG9jazsKKwlzbmRfdXRpbF9tZW1oZHJfdCAqbWVtaGRyOworfSBzbmRfc2ZfbGlzdF90OworCisvKiBQcm90b3R5cGVzIGZvciBzb3VuZGZvbnQuYyAqLworaW50IHNuZF9zb3VuZGZvbnRfbG9hZChzbmRfc2ZfbGlzdF90ICpzZmxpc3QsIGNvbnN0IHZvaWQgX191c2VyICpkYXRhLCBsb25nIGNvdW50LCBpbnQgY2xpZW50KTsKK2ludCBzbmRfc291bmRmb250X2xvYWRfZ3VzcGF0Y2goc25kX3NmX2xpc3RfdCAqc2ZsaXN0LCBjb25zdCBjaGFyIF9fdXNlciAqZGF0YSwKKwkJCQlsb25nIGNvdW50LCBpbnQgY2xpZW50KTsKK2ludCBzbmRfc291bmRmb250X2Nsb3NlX2NoZWNrKHNuZF9zZl9saXN0X3QgKnNmbGlzdCwgaW50IGNsaWVudCk7CisKK3NuZF9zZl9saXN0X3QgKnNuZF9zZl9uZXcoc25kX3NmX2NhbGxiYWNrX3QgKmNhbGxiYWNrLCBzbmRfdXRpbF9tZW1oZHJfdCAqaGRyKTsKK3ZvaWQgc25kX3NmX2ZyZWUoc25kX3NmX2xpc3RfdCAqc2ZsaXN0KTsKKworaW50IHNuZF9zb3VuZGZvbnRfcmVtb3ZlX3NhbXBsZXMoc25kX3NmX2xpc3RfdCAqc2ZsaXN0KTsKK2ludCBzbmRfc291bmRmb250X3JlbW92ZV91bmxvY2tlZChzbmRfc2ZfbGlzdF90ICpzZmxpc3QpOworCitpbnQgc25kX3NvdW5kZm9udF9zZWFyY2hfem9uZShzbmRfc2ZfbGlzdF90ICpzZmxpc3QsIGludCAqbm90ZXAsIGludCB2ZWwsCisJCQkgICAgICBpbnQgcHJlc2V0LCBpbnQgYmFuaywKKwkJCSAgICAgIGludCBkZWZfcHJlc2V0LCBpbnQgZGVmX2JhbmssCisJCQkgICAgICBzbmRfc2Zfem9uZV90ICoqdGFibGUsIGludCBtYXhfbGF5ZXJzKTsKKworLyogUGFyYW1ldGVyIGNvbnZlcnNpb25zICovCitpbnQgc25kX3NmX2NhbGNfcGFybV9ob2xkKGludCBtc2VjKTsKK2ludCBzbmRfc2ZfY2FsY19wYXJtX2F0dGFjayhpbnQgbXNlYyk7CitpbnQgc25kX3NmX2NhbGNfcGFybV9kZWNheShpbnQgbXNlYyk7CisjZGVmaW5lIHNuZF9zZl9jYWxjX3Bhcm1fZGVsYXkobXNlYykgKDB4ODAwMCAtIChtc2VjKSAqIDEwMDAgLyA3MjUpOworZXh0ZXJuIGludCBzbmRfc2Zfdm9sX3RhYmxlWzEyOF07CitpbnQgc25kX3NmX2xpbmVhcl90b19sb2codW5zaWduZWQgaW50IGFtb3VudCwgaW50IG9mZnNldCwgaW50IHJhdGlvKTsKKworCisjZW5kaWYgLyogX19TT1VORF9TT1VOREZPTlRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9zc2NhcGVfaW9jdGwuaCBiL2luY2x1ZGUvc291bmQvc3NjYXBlX2lvY3RsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ4ODg1OQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvc291bmQvc3NjYXBlX2lvY3RsLmgKQEAgLTAsMCArMSwyMSBAQAorI2lmbmRlZiBTU0NBUEVfSU9DVExfSAorI2RlZmluZSBTU0NBUEVfSU9DVExfSAorCisKK3N0cnVjdCBzc2NhcGVfYm9vdGJsb2NrCit7CisgIHVuc2lnbmVkIGNoYXIgY29kZVsyNTZdOworICB1bnNpZ25lZCB2ZXJzaW9uOworfTsKKworI2RlZmluZSBTU0NBUEVfTUlDUk9DT0RFX1NJWkUgIDY1NTM2CisKK3N0cnVjdCBzc2NhcGVfbWljcm9jb2RlCit7CisgIHVuc2lnbmVkIGNoYXIgX191c2VyICpjb2RlOworfTsKKworI2RlZmluZSBTTkRfU1NDQVBFX0xPQURfQk9PVEIgIF9JT1dSKCdQJywgMTAwLCBzdHJ1Y3Qgc3NjYXBlX2Jvb3RibG9jaykKKyNkZWZpbmUgU05EX1NTQ0FQRV9MT0FEX01DT0RFICBfSU9XICgnUCcsIDEwMSwgc3RydWN0IHNzY2FwZV9taWNyb2NvZGUpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC90ZWE1NzV4LXR1bmVyLmggYi9pbmNsdWRlL3NvdW5kL3RlYTU3NXgtdHVuZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDNjM2JlMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvc291bmQvdGVhNTc1eC10dW5lci5oCkBAIC0wLDAgKzEsNTMgQEAKKyNpZm5kZWYgX19TT1VORF9URUE1NzVYX1RVTkVSX0gKKyNkZWZpbmUgX19TT1VORF9URUE1NzVYX1RVTkVSX0gKKworLyoKKyAqICAgQUxTQSBkcml2ZXIgZm9yIFRFQTU3NTcvNTc1OSBQaGlsaXBzIEFNL0ZNIHR1bmVyIGNoaXBzCisgKgorICoJQ29weXJpZ2h0IChjKSAyMDA0IEphcm9zbGF2IEt5c2VsYSA8cGVyZXhAc3VzZS5jej4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKgorICovICAgICAgCisKKyNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgorCit0eXBlZGVmIHN0cnVjdCBzbmRfdGVhNTc1eCB0ZWE1NzV4X3Q7CisKK3N0cnVjdCBzbmRfdGVhNTc1eF9vcHMgeworCXZvaWQgKCp3cml0ZSkodGVhNTc1eF90ICp0ZWEsIHVuc2lnbmVkIGludCB2YWwpOworCXVuc2lnbmVkIGludCAoKnJlYWQpKHRlYTU3NXhfdCAqdGVhKTsKK307CisKK3N0cnVjdCBzbmRfdGVhNTc1eCB7CisJc25kX2NhcmRfdCAqY2FyZDsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlIHZkOwkJLyogdmlkZW8gZGV2aWNlICovCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsIDUsIDApCisJc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzOworI2VuZGlmCisJaW50IGRldl9ucjsJCQkvKiByZXF1ZXN0ZWQgZGV2aWNlIG51bWJlciArIDEgKi8KKwlpbnQgdmRfcmVnaXN0ZXJlZDsJCS8qIHZpZGVvIGRldmljZSBpcyByZWdpc3RlcmVkICovCisJaW50IHRlYTU3NTk7CQkJLyogNTc1OSBjaGlwIGlzIHByZXNlbnQgKi8KKwl1bnNpZ25lZCBpbnQgZnJlcV9maXh1cDsJLyogY3J5c3RhbCBvbmJvYXJkICovCisJdW5zaWduZWQgaW50IHZhbDsJCS8qIGh3IHZhbHVlICovCisJdW5zaWduZWQgbG9uZyBmcmVxOwkJLyogZnJlcXVlbmN5ICovCisJc3RydWN0IHNuZF90ZWE1NzV4X29wcyAqb3BzOworCXZvaWQgKnByaXZhdGVfZGF0YTsKK307CisKK3ZvaWQgc25kX3RlYTU3NXhfaW5pdCh0ZWE1NzV4X3QgKnRlYSk7Cit2b2lkIHNuZF90ZWE1NzV4X2V4aXQodGVhNTc1eF90ICp0ZWEpOworCisjZW5kaWYgLyogX19TT1VORF9URUE1NzVYX1RVTkVSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvdGVhNjMzMHQuaCBiL2luY2x1ZGUvc291bmQvdGVhNjMzMHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODk2YzBhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9zb3VuZC90ZWE2MzMwdC5oCkBAIC0wLDAgKzEsNDIgQEAKKyNpZm5kZWYgX19TT1VORF9URUE2MzMwVF9ICisjZGVmaW5lIF9fU09VTkRfVEVBNjMzMFRfSAorCisvKgorICogIFJvdXRpbmVzIGZvciBjb250cm9sIG9mIFRFQTYzMzBUIGNpcmN1aXQuCisgKiAgU291bmQgZmFkZXIgY29udHJvbCBjaXJjdWl0IGZvciBjYXIgcmFkaW9zLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqCisgKgorICovCisKKyNpbmNsdWRlICJjb250cm9sLmgiCisjaW5jbHVkZSAiaTJjLmgiCQkvKiBnZW5lcmljIGkyYyBzdXBwb3J0ICovCisKK3R5cGVkZWYgc3RydWN0IHsKKwlzbmRfaTJjX2RldmljZV90ICpkZXZpY2U7CisJc25kX2kyY19idXNfdCAqYnVzOworCWludCBlcXVhbGl6ZXI7CisJaW50IGZhZGVyOworCXVuc2lnbmVkIGNoYXIgcmVnc1s4XTsKKwl1bnNpZ25lZCBjaGFyIG1sZWZ0LCBtcmlnaHQ7CisJdW5zaWduZWQgY2hhciBiYXNzLCB0cmVibGU7CisJdW5zaWduZWQgY2hhciBtYXhfYmFzcywgbWF4X3RyZWJsZTsKK30gdGVhNjMzMHRfdDsKKworZXh0ZXJuIGludCBzbmRfdGVhNjMzMHRfZGV0ZWN0KHNuZF9pMmNfYnVzX3QgKmJ1cywgaW50IGVxdWFsaXplcik7CitleHRlcm4gaW50IHNuZF90ZWE2MzMwdF91cGRhdGVfbWl4ZXIoc25kX2NhcmRfdCAqIGNhcmQsIHNuZF9pMmNfYnVzX3QgKiBidXMsIGludCBlcXVhbGl6ZXIsIGludCBmYWRlcik7CisKKyNlbmRpZiAvKiBfX1NPVU5EX1RFQTYzMzBUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvdGltZXIuaCBiL2luY2x1ZGUvc291bmQvdGltZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2ZkZTk5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9zb3VuZC90aW1lci5oCkBAIC0wLDAgKzEsMTU3IEBACisjaWZuZGVmIF9fU09VTkRfVElNRVJfSAorI2RlZmluZSBfX1NPVU5EX1RJTUVSX0gKKworLyoKKyAqICBUaW1lciBhYnN0cmFjdCBsYXllcgorICogIENvcHlyaWdodCAoYykgYnkgSmFyb3NsYXYgS3lzZWxhIDxwZXJleEBzdXNlLmN6PiwKKyAqCQkgICAgIEFicmFtbyBCYWduYXJhIDxhYnJhbW9AYWxzYS1wcm9qZWN0Lm9yZz4KKyAqCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8c291bmQvYXNvdW5kLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisKK3R5cGVkZWYgZW51bSBzbmRydl90aW1lcl9jbGFzcyBzbmRfdGltZXJfY2xhc3NfdDsKK3R5cGVkZWYgZW51bSBzbmRydl90aW1lcl9zbGF2ZV9jbGFzcyBzbmRfdGltZXJfc2xhdmVfY2xhc3NfdDsKK3R5cGVkZWYgZW51bSBzbmRydl90aW1lcl9nbG9iYWwgc25kX3RpbWVyX2dsb2JhbF90OwordHlwZWRlZiBzdHJ1Y3Qgc25kcnZfdGltZXJfaWQgc25kX3RpbWVyX2lkX3Q7Cit0eXBlZGVmIHN0cnVjdCBzbmRydl90aW1lcl9naW5mbyBzbmRfdGltZXJfZ2luZm9fdDsKK3R5cGVkZWYgc3RydWN0IHNuZHJ2X3RpbWVyX2dwYXJhbXMgc25kX3RpbWVyX2dwYXJhbXNfdDsKK3R5cGVkZWYgc3RydWN0IHNuZHJ2X3RpbWVyX2dzdGF0dXMgc25kX3RpbWVyX2dzdGF0dXNfdDsKK3R5cGVkZWYgc3RydWN0IHNuZHJ2X3RpbWVyX3NlbGVjdCBzbmRfdGltZXJfc2VsZWN0X3Q7Cit0eXBlZGVmIHN0cnVjdCBzbmRydl90aW1lcl9pbmZvIHNuZF90aW1lcl9pbmZvX3Q7Cit0eXBlZGVmIHN0cnVjdCBzbmRydl90aW1lcl9wYXJhbXMgc25kX3RpbWVyX3BhcmFtc190OwordHlwZWRlZiBzdHJ1Y3Qgc25kcnZfdGltZXJfc3RhdHVzIHNuZF90aW1lcl9zdGF0dXNfdDsKK3R5cGVkZWYgc3RydWN0IHNuZHJ2X3RpbWVyX3JlYWQgc25kX3RpbWVyX3JlYWRfdDsKK3R5cGVkZWYgc3RydWN0IHNuZHJ2X3RpbWVyX3RyZWFkIHNuZF90aW1lcl90cmVhZF90OworCisjZGVmaW5lIHNuZF90aW1lcl9jaGlwKHRpbWVyKSAoKHRpbWVyKS0+cHJpdmF0ZV9kYXRhKQorCisjZGVmaW5lIFNORFJWX1RJTUVSX0RFVklDRVMJMTYKKworI2RlZmluZSBTTkRSVl9USU1FUl9ERVZfRkxHX1BDTQkweDEwMDAwMDAwCisKKyNkZWZpbmUgU05EUlZfVElNRVJfSFdfQVVUTwkweDAwMDAwMDAxCS8qIGF1dG8gdHJpZ2dlciBpcyBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUgU05EUlZfVElNRVJfSFdfU1RPUAkweDAwMDAwMDAyCS8qIGNhbGwgc3RvcCBiZWZvcmUgc3RhcnQgKi8KKyNkZWZpbmUgU05EUlZfVElNRVJfSFdfU0xBVkUJMHgwMDAwMDAwNAkvKiBvbmx5IHNsYXZlIHRpbWVyICh2YXJpYWJsZSByZXNvbHV0aW9uKSAqLworI2RlZmluZSBTTkRSVl9USU1FUl9IV19GSVJTVAkweDAwMDAwMDA4CS8qIGZpcnN0IHRpY2sgY2FuIGJlIGluY29tcGxldGUgKi8KKyNkZWZpbmUgU05EUlZfVElNRVJfSFdfVEFTS0xFVAkweDAwMDAwMDEwCS8qIHRpbWVyIGlzIGNhbGxlZCBmcm9tIHRhc2tsZXQgKi8KKworI2RlZmluZSBTTkRSVl9USU1FUl9JRkxHX1NMQVZFCSAgMHgwMDAwMDAwMQorI2RlZmluZSBTTkRSVl9USU1FUl9JRkxHX1JVTk5JTkcgIDB4MDAwMDAwMDIKKyNkZWZpbmUgU05EUlZfVElNRVJfSUZMR19TVEFSVAkgIDB4MDAwMDAwMDQKKyNkZWZpbmUgU05EUlZfVElNRVJfSUZMR19BVVRPCSAgMHgwMDAwMDAwOAkvKiBhdXRvIHJlc3RhcnQgKi8KKyNkZWZpbmUgU05EUlZfVElNRVJfSUZMR19GQVNUCSAgMHgwMDAwMDAxMAkvKiBmYXN0IGNhbGxiYWNrIChkbyBub3QgdXNlIHRhc2tsZXQpICovCisjZGVmaW5lIFNORFJWX1RJTUVSX0lGTEdfQ0FMTEJBQ0sgMHgwMDAwMDAyMAkvKiB0aW1lciBjYWxsYmFjayBpcyBhY3RpdmUgKi8KKyNkZWZpbmUgU05EUlZfVElNRVJfSUZMR19FWENMVVNJVkUgMHgwMDAwMDA0MAkvKiBleGNsdXNpdmUgb3duZXIgLSBubyBtb3JlIGluc3RhbmNlcyAqLworI2RlZmluZSBTTkRSVl9USU1FUl9JRkxHX0VBUkxZX0VWRU5UIDB4MDAwMDAwODAJLyogd3JpdGUgZWFybHkgZXZlbnQgdG8gdGhlIHBvbGwgcXVldWUgKi8KKworI2RlZmluZSBTTkRSVl9USU1FUl9GTEdfQ0hBTkdFCTB4MDAwMDAwMDEKKyNkZWZpbmUgU05EUlZfVElNRVJfRkxHX1JFU0NIRUQJMHgwMDAwMDAwMgkvKiBuZWVkIHJlc2NoZWR1bGUgKi8KKwordHlwZWRlZiB2b2lkICgqc25kX3RpbWVyX2NhbGxiYWNrX3QpIChzbmRfdGltZXJfaW5zdGFuY2VfdCAqIHRpbWVyaSwgdW5zaWduZWQgbG9uZyB0aWNrcywgdW5zaWduZWQgbG9uZyByZXNvbHV0aW9uKTsKK3R5cGVkZWYgdm9pZCAoKnNuZF90aW1lcl9jY2FsbGJhY2tfdCkgKHNuZF90aW1lcl9pbnN0YW5jZV90ICogdGltZXJpLCBlbnVtIHNuZHJ2X3RpbWVyX2V2ZW50IGV2ZW50LAorCQkJCSAgICAgICBzdHJ1Y3QgdGltZXNwZWMgKiB0c3RhbXAsIHVuc2lnbmVkIGxvbmcgcmVzb2x1dGlvbik7CisKK3N0cnVjdCBfc25kX3RpbWVyX2hhcmR3YXJlIHsKKwkvKiAtLSBtdXN0IGJlIGZpbGxlZCB3aXRoIGxvdy1sZXZlbCBkcml2ZXIgKi8KKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CQkvKiB2YXJpb3VzIGZsYWdzICovCisJdW5zaWduZWQgbG9uZyByZXNvbHV0aW9uOwkvKiBhdmVyYWdlIHRpbWVyIHJlc29sdXRpb24gZm9yIG9uZSB0aWNrIGluIG5zZWMgKi8KKwl1bnNpZ25lZCBsb25nIHJlc29sdXRpb25fbWluOwkvKiBtaW5pbWFsIHJlc29sdXRpb24gKi8KKwl1bnNpZ25lZCBsb25nIHJlc29sdXRpb25fbWF4OwkvKiBtYXhpbWFsIHJlc29sdXRpb24gKi8KKwl1bnNpZ25lZCBsb25nIHRpY2tzOwkJLyogbWF4IHRpbWVyIHRpY2tzIHBlciBpbnRlcnJ1cHQgKi8KKwkvKiAtLSBsb3ctbGV2ZWwgZnVuY3Rpb25zIC0tICovCisJaW50ICgqb3BlbikgKHNuZF90aW1lcl90ICogdGltZXIpOworCWludCAoKmNsb3NlKSAoc25kX3RpbWVyX3QgKiB0aW1lcik7CisJdW5zaWduZWQgbG9uZyAoKmNfcmVzb2x1dGlvbikgKHNuZF90aW1lcl90ICogdGltZXIpOworCWludCAoKnN0YXJ0KSAoc25kX3RpbWVyX3QgKiB0aW1lcik7CisJaW50ICgqc3RvcCkgKHNuZF90aW1lcl90ICogdGltZXIpOworCWludCAoKnNldF9wZXJpb2QpIChzbmRfdGltZXJfdCAqIHRpbWVyLCB1bnNpZ25lZCBsb25nIHBlcmlvZF9udW0sIHVuc2lnbmVkIGxvbmcgcGVyaW9kX2Rlbik7CisJaW50ICgqcHJlY2lzZV9yZXNvbHV0aW9uKSAoc25kX3RpbWVyX3QgKiB0aW1lciwgdW5zaWduZWQgbG9uZyAqbnVtLCB1bnNpZ25lZCBsb25nICpkZW4pOworfTsKKworc3RydWN0IF9zbmRfdGltZXIgeworCXNuZF90aW1lcl9jbGFzc190IHRtcl9jbGFzczsKKwlzbmRfY2FyZF90ICpjYXJkOworCWludCB0bXJfZGV2aWNlOworCWludCB0bXJfc3ViZGV2aWNlOworCWNoYXIgaWRbNjRdOworCWNoYXIgbmFtZVs4MF07CisJdW5zaWduZWQgaW50IGZsYWdzOworCWludCBydW5uaW5nOwkJCS8qIHJ1bm5pbmcgaW5zdGFuY2VzICovCisJdW5zaWduZWQgbG9uZyBzdGlja3M7CQkvKiBzY2hlZHVsZSB0aWNrcyAqLworCXZvaWQgKnByaXZhdGVfZGF0YTsKKwl2b2lkICgqcHJpdmF0ZV9mcmVlKSAoc25kX3RpbWVyX3QgKnRpbWVyKTsKKwlzdHJ1Y3QgX3NuZF90aW1lcl9oYXJkd2FyZSBodzsKKwlzcGlubG9ja190IGxvY2s7CisJc3RydWN0IGxpc3RfaGVhZCBkZXZpY2VfbGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG9wZW5fbGlzdF9oZWFkOworCXN0cnVjdCBsaXN0X2hlYWQgYWN0aXZlX2xpc3RfaGVhZDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGFja19saXN0X2hlYWQ7CisJc3RydWN0IGxpc3RfaGVhZCBzYWNrX2xpc3RfaGVhZDsgLyogc2xvdyBhY2sgbGlzdCBoZWFkICovCisJc3RydWN0IHRhc2tsZXRfc3RydWN0IHRhc2tfcXVldWU7Cit9OworCitzdHJ1Y3QgX3NuZF90aW1lcl9pbnN0YW5jZSB7CisJc25kX3RpbWVyX3QgKiB0aW1lcjsKKwljaGFyICpvd25lcjsKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CisJdm9pZCAqcHJpdmF0ZV9kYXRhOworCXZvaWQgKCpwcml2YXRlX2ZyZWUpIChzbmRfdGltZXJfaW5zdGFuY2VfdCAqdGkpOworCXNuZF90aW1lcl9jYWxsYmFja190IGNhbGxiYWNrOworCXNuZF90aW1lcl9jY2FsbGJhY2tfdCBjY2FsbGJhY2s7CisJdm9pZCAqY2FsbGJhY2tfZGF0YTsKKwl1bnNpZ25lZCBsb25nIHRpY2tzOwkJLyogYXV0by1sb2FkIHRpY2tzIHdoZW4gZXhwaXJlZCAqLworCXVuc2lnbmVkIGxvbmcgY3RpY2tzOwkJLyogY3VycmVudCB0aWNrcyAqLworCXVuc2lnbmVkIGxvbmcgcHRpY2tzOwkJLyogYWNjdW11bGF0ZWQgdGlja3MgZm9yIGNhbGxiYWNrICovCisJdW5zaWduZWQgbG9uZyByZXNvbHV0aW9uOwkvKiBjdXJyZW50IHJlc29sdXRpb24gZm9yIHRhc2tsZXQgKi8KKwl1bnNpZ25lZCBsb25nIGxvc3Q7CQkvKiBsb3N0IHRpY2tzICovCisJc25kX3RpbWVyX3NsYXZlX2NsYXNzX3Qgc2xhdmVfY2xhc3M7CisJdW5zaWduZWQgaW50IHNsYXZlX2lkOworCXN0cnVjdCBsaXN0X2hlYWQgb3Blbl9saXN0OworCXN0cnVjdCBsaXN0X2hlYWQgYWN0aXZlX2xpc3Q7CisJc3RydWN0IGxpc3RfaGVhZCBhY2tfbGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHNsYXZlX2xpc3RfaGVhZDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHNsYXZlX2FjdGl2ZV9oZWFkOworCXNuZF90aW1lcl9pbnN0YW5jZV90ICptYXN0ZXI7Cit9OworCisvKgorICogIFJlZ2lzdGVyaW5nCisgKi8KKworZXh0ZXJuIGludCBzbmRfdGltZXJfbmV3KHNuZF9jYXJkX3QgKmNhcmQsIGNoYXIgKmlkLCBzbmRfdGltZXJfaWRfdCAqdGlkLCBzbmRfdGltZXJfdCAqKiBydGltZXIpOworZXh0ZXJuIHZvaWQgc25kX3RpbWVyX25vdGlmeShzbmRfdGltZXJfdCAqdGltZXIsIGVudW0gc25kcnZfdGltZXJfZXZlbnQgZXZlbnQsIHN0cnVjdCB0aW1lc3BlYyAqdHN0YW1wKTsKK2V4dGVybiBpbnQgc25kX3RpbWVyX2dsb2JhbF9uZXcoY2hhciAqaWQsIGludCBkZXZpY2UsIHNuZF90aW1lcl90ICoqcnRpbWVyKTsKK2V4dGVybiBpbnQgc25kX3RpbWVyX2dsb2JhbF9mcmVlKHNuZF90aW1lcl90ICp0aW1lcik7CitleHRlcm4gaW50IHNuZF90aW1lcl9nbG9iYWxfcmVnaXN0ZXIoc25kX3RpbWVyX3QgKnRpbWVyKTsKK2V4dGVybiBpbnQgc25kX3RpbWVyX2dsb2JhbF91bnJlZ2lzdGVyKHNuZF90aW1lcl90ICp0aW1lcik7CisKK2V4dGVybiBpbnQgc25kX3RpbWVyX29wZW4oc25kX3RpbWVyX2luc3RhbmNlX3QgKiogdGksIGNoYXIgKm93bmVyLCBzbmRfdGltZXJfaWRfdCAqdGlkLCB1bnNpZ25lZCBpbnQgc2xhdmVfaWQpOworZXh0ZXJuIGludCBzbmRfdGltZXJfY2xvc2Uoc25kX3RpbWVyX2luc3RhbmNlX3QgKiB0aW1lcmkpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc25kX3RpbWVyX3Jlc29sdXRpb24oc25kX3RpbWVyX2luc3RhbmNlX3QgKiB0aW1lcmkpOworZXh0ZXJuIGludCBzbmRfdGltZXJfc3RhcnQoc25kX3RpbWVyX2luc3RhbmNlX3QgKiB0aW1lcmksIHVuc2lnbmVkIGludCB0aWNrcyk7CitleHRlcm4gaW50IHNuZF90aW1lcl9zdG9wKHNuZF90aW1lcl9pbnN0YW5jZV90ICogdGltZXJpKTsKK2V4dGVybiBpbnQgc25kX3RpbWVyX2NvbnRpbnVlKHNuZF90aW1lcl9pbnN0YW5jZV90ICogdGltZXJpKTsKK2V4dGVybiBpbnQgc25kX3RpbWVyX3BhdXNlKHNuZF90aW1lcl9pbnN0YW5jZV90ICogdGltZXJpKTsKKworZXh0ZXJuIHZvaWQgc25kX3RpbWVyX2ludGVycnVwdChzbmRfdGltZXJfdCAqIHRpbWVyLCB1bnNpZ25lZCBsb25nIHRpY2tzX2xlZnQpOworCitleHRlcm4gdW5zaWduZWQgaW50IHNuZF90aW1lcl9zeXN0ZW1fcmVzb2x1dGlvbih2b2lkKTsKKworI2VuZGlmIC8qIF9fU09VTkRfVElNRVJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC90cmlkZW50LmggYi9pbmNsdWRlL3NvdW5kL3RyaWRlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTI1NGVjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9zb3VuZC90cmlkZW50LmgKQEAgLTAsMCArMSw0NzkgQEAKKyNpZm5kZWYgX19TT1VORF9UUklERU5UX0gKKyNkZWZpbmUgX19TT1VORF9UUklERU5UX0gKKworLyoKKyAqICBhdWRpb0B0cmlkZW50bWljcm8uY29tCisgKiAgRnJpIEZlYiAxOSAxNTo1NToyOCBNU1QgMTk5OQorICogIERlZmluaXRpb25zIGZvciBUcmlkZW50IDREV2F2ZSBEWC9OWCBjaGlwcworICoKKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKgorICovCisKKyNpbmNsdWRlICJwY20uaCIKKyNpbmNsdWRlICJtcHU0MDEuaCIKKyNpbmNsdWRlICJhYzk3X2NvZGVjLmgiCisjaW5jbHVkZSAic2VxX21pZGlfZW11bC5oIgorI2luY2x1ZGUgInNlcV9kZXZpY2UuaCIKKyNpbmNsdWRlICJ1dGlsX21lbS5oIgorLy8jaW5jbHVkZSAiYWluc3RyX2l3LmgiCisvLyNpbmNsdWRlICJhaW5zdHJfZ2YxLmgiCisjaW5jbHVkZSAiYWluc3RyX3NpbXBsZS5oIgorCisjaWZuZGVmIFBDSV9WRU5ET1JfSURfVFJJREVOVAorI2RlZmluZSBQQ0lfVkVORE9SX0lEX1RSSURFTlQJCTB4MTAyMworI2VuZGlmCisjaWZuZGVmIFBDSV9ERVZJQ0VfSURfVFJJREVOVF80RFdBVkVfRFggCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVFJJREVOVF80RFdBVkVfRFgJMHgyMDAwCisjZW5kaWYKKyNpZm5kZWYgUENJX0RFVklDRV9JRF9UUklERU5UXzREV0FWRV9OWCAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9UUklERU5UXzREV0FWRV9OWAkweDIwMDEKKyNlbmRpZgorCisjaWZuZGVmIFBDSV9WRU5ET1JfSURfU0kKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9TSQkJMHgxMDM5CisjZW5kaWYKKyNpZm5kZWYgUENJX0RFVklDRV9JRF9TSV83MDE4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNzAxOAkJMHg3MDE4CisjZW5kaWYKKworI2RlZmluZSBUUklERU5UX0RFVklDRV9JRF9EWAkJKChQQ0lfVkVORE9SX0lEX1RSSURFTlQ8PDE2KXxQQ0lfREVWSUNFX0lEX1RSSURFTlRfNERXQVZFX0RYKQorI2RlZmluZSBUUklERU5UX0RFVklDRV9JRF9OWAkJKChQQ0lfVkVORE9SX0lEX1RSSURFTlQ8PDE2KXxQQ0lfREVWSUNFX0lEX1RSSURFTlRfNERXQVZFX05YKQorI2RlZmluZSBUUklERU5UX0RFVklDRV9JRF9TSTcwMTgJKChQQ0lfVkVORE9SX0lEX1NJPDwxNil8UENJX0RFVklDRV9JRF9TSV83MDE4KQorCisjZGVmaW5lIFNORFJWX1NFUV9ERVZfSURfVFJJREVOVAkJCSJ0cmlkZW50LXN5bnRoIgorCisjZGVmaW5lIFNORFJWX1RSSURFTlRfVk9JQ0VfVFlQRV9QQ00JCTAKKyNkZWZpbmUgU05EUlZfVFJJREVOVF9WT0lDRV9UWVBFX1NZTlRICQkxCisjZGVmaW5lIFNORFJWX1RSSURFTlRfVk9JQ0VfVFlQRV9NSURJCQkyCisKKyNkZWZpbmUgU05EUlZfVFJJREVOVF9WRkxHX1JVTk5JTkcJCSgxPDwwKQorCisvKiBUTEIgY29kZSBjb25zdGFudHMgKi8KKyNkZWZpbmUgU05EUlZfVFJJREVOVF9QQUdFX1NJWkUJCQk0MDk2CisjZGVmaW5lIFNORFJWX1RSSURFTlRfUEFHRV9TSElGVAkJCTEyCisjZGVmaW5lIFNORFJWX1RSSURFTlRfUEFHRV9NQVNLCQkJKCgxPDxTTkRSVl9UUklERU5UX1BBR0VfU0hJRlQpLTEpCisjZGVmaW5lIFNORFJWX1RSSURFTlRfTUFYX1BBR0VTCQkJNDA5NgorCisvKgorICogRGlyZWN0IHJlZ2lzdGVycworICovCisKKyNkZWZpbmUgVFJJRF9SRUcodHJpZGVudCwgeCkgKCh0cmlkZW50KS0+cG9ydCArICh4KSkKKworI2RlZmluZSBJRF80RFdBVkVfRFggICAgICAgIDB4MjAwMAorI2RlZmluZSBJRF80RFdBVkVfTlggICAgICAgIDB4MjAwMQorCisvKiBCYW5rIGRlZmluaXRpb25zICovCisKKyNkZWZpbmUgVDREX0JBTktfQQkwCisjZGVmaW5lIFQ0RF9CQU5LX0IJMQorI2RlZmluZSBUNERfTlVNX0JBTktTCTIKKworLyogUmVnaXN0ZXIgZGVmaW5pdGlvbnMgKi8KKworLyogR2xvYmFsIHJlZ2lzdGVycyAqLworCitlbnVtIGdsb2JhbF9jb250cm9sX2JpdHMgeworCUNIQU5ORUxfSURYCT0gMHgwMDAwMDAzZiwKKwlPVkVSUlVOX0lFCT0gMHgwMDAwMDQwMCwJLyogaW50ZXJydXB0IGVuYWJsZTogY2FwdHVyZSBvdmVycnVuICovCisJVU5ERVJSVU5fSUUJPSAweDAwMDAwODAwLAkvKiBpbnRlcnJ1cHQgZW5hYmxlOiBwbGF5YmFjayB1bmRlcnJ1biAqLworCUVORExQX0lFCT0gMHgwMDAwMTAwMCwJLyogaW50ZXJydXB0IGVuYWJsZTogZW5kIG9mIGJ1ZmZlciAqLworCU1JRExQX0lFCT0gMHgwMDAwMjAwMCwJLyogaW50ZXJydXB0IGVuYWJsZTogbWlkZGxlIGJ1ZmZlciAqLworCUVUT0dfSUUJCT0gMHgwMDAwNDAwMCwJLyogaW50ZXJydXB0IGVuYWJsZTogZW52ZWxvcGUgdG9nZ2xpbmcgKi8KKwlFRFJPUF9JRQk9IDB4MDAwMDgwMDAsCS8qIGludGVycnVwdCBlbmFibGU6IGVudmVsb3BlIGRyb3AgKi8KKwlCQU5LX0JfRU4JPSAweDAwMDEwMDAwLAkvKiBTaVM6IGVuYWJsZSBiYW5rIEIgKDY0IGNoYW5uZWxzKSAqLworCVBDTUlOX0JfTUlYCT0gMHgwMDAyMDAwMCwJLyogU2lTOiBQQ00gSU4gQiBtaXhpbmcgZW5hYmxlICovCisJSTJTX09VVF9BU1NJR04JPSAweDAwMDQwMDAwLAkvKiBTaVM6IEkyUyBPdXQgY29udGFpbnMgc3Vycm91bmQgUENNICovCisJU1BESUZfT1VUX0FTU0lHTj0gMHgwMDA4MDAwMCwJLyogU2lTOiAwPVMvUERJRiBML1IgfCAxPVBDTSBPdXQgRklGTyAqLworCU1BSU5fT1VUX0FTU0lHTiA9IDB4MDAxMDAwMDAsCS8qIFNpUzogMD1QQ00gT3V0IEZJRk8gfCAxPU1NQyBPdXQgYnVmZmVyICovCit9OworCitlbnVtIG1pc2NpbnRfYml0cyB7CisJUEJfVU5ERVJSVU5fSVJRID0gMHgwMDAwMDAwMSwgUkVDX09WRVJSVU5fSVJRID0gMHgwMDAwMDAwMiwKKwlTQl9JUlEJCT0gMHgwMDAwMDAwNCwgTVBVNDAxX0lSUSAgICAgID0gMHgwMDAwMDAwOCwKKwlPUEwzX0lSUSAgICAgICAgPSAweDAwMDAwMDEwLCBBRERSRVNTX0lSUSAgICAgPSAweDAwMDAwMDIwLAorCUVOVkVMT1BFX0lSUSAgICA9IDB4MDAwMDAwNDAsIFBCX1VOREVSUlVOICAgICA9IDB4MDAwMDAxMDAsCisJUkVDX09WRVJSVU4JPSAweDAwMDAwMjAwLCBNSVhFUl9VTkRFUkZMT1cgPSAweDAwMDAwNDAwLAorCU1JWEVSX09WRVJGTE9XICA9IDB4MDAwMDA4MDAsIE5YX1NCX0lSUV9ESVNBQkxFID0gMHgwMDAwMTAwMCwKKyAgICAgICAgU1RfVEFSR0VUX1JFQUNIRUQgPSAweDAwMDA4MDAwLAorCVBCXzI0S19NT0RFICAgICA9IDB4MDAwMTAwMDAsIFNUX0lSUV9FTiAgICAgICA9IDB4MDA4MDAwMDAsCisJQUNHUElPX0lSUQk9IDB4MDEwMDAwMDAKK307CisKKy8qIFQyIGxlZ2FjeSBkbWEgY29udHJvbCByZWdpc3RlcnMuICovCisjZGVmaW5lIExFR0FDWV9ETUFSMCAgICAgICAgICAgICAgICAweDAwICAvLyBBRFIwCisjZGVmaW5lIExFR0FDWV9ETUFSNCAgICAgICAgICAgICAgICAweDA0ICAvLyBDTlQwCisjZGVmaW5lIExFR0FDWV9ETUFSNgkJICAgIDB4MDYgIC8vIENOVDAgLSBIaWdoIGJpdHMKKyNkZWZpbmUgTEVHQUNZX0RNQVIxMSAgICAgICAgICAgICAgIDB4MGIgIC8vIE1PRCAKKyNkZWZpbmUgTEVHQUNZX0RNQVIxNSAgICAgICAgICAgICAgIDB4MGYgIC8vIE1NUiAKKworI2RlZmluZSBUNERfU1RBUlRfQQkJICAgICAweDgwCisjZGVmaW5lIFQ0RF9TVE9QX0EJCSAgICAgMHg4NAorI2RlZmluZSBUNERfRExZX0EJCSAgICAgMHg4OAorI2RlZmluZSBUNERfU0lHTl9DU09fQQkJICAgICAweDhjCisjZGVmaW5lIFQ0RF9DU1BGX0EJCSAgICAgMHg5MAorI2RlZmluZSBUNERfQ1NQRl9CCQkgICAgIDB4YmMKKyNkZWZpbmUgVDREX0NFQkNfQQkJICAgICAweDk0CisjZGVmaW5lIFQ0RF9BSU5UX0EJCSAgICAgMHg5OAorI2RlZmluZSBUNERfQUlOVEVOX0EJCSAgICAgMHg5YworI2RlZmluZSBUNERfTEZPX0dDX0NJUiAgICAgICAgICAgICAgIDB4YTAKKyNkZWZpbmUgVDREX01VU0lDVk9MX1dBVkVWT0wgICAgICAgICAweGE4CisjZGVmaW5lIFQ0RF9TQkRFTFRBX0RFTFRBX1IgICAgICAgICAgMHhhYworI2RlZmluZSBUNERfTUlTQ0lOVCAgICAgICAgICAgICAgICAgIDB4YjAKKyNkZWZpbmUgVDREX1NUQVJUX0IgICAgICAgICAgICAgICAgICAweGI0CisjZGVmaW5lIFQ0RF9TVE9QX0IgICAgICAgICAgICAgICAgICAgMHhiOAorI2RlZmluZSBUNERfU0JCTF9TQkNMICAgICAgICAgICAgICAgIDB4YzAKKyNkZWZpbmUgVDREX1NCQ1RSTF9TQkUyUl9TQkREICAgICAgICAweGM0CisjZGVmaW5lIFQ0RF9TVElNRVIJCSAgICAgMHhjOAorI2RlZmluZSBUNERfQUlOVF9CICAgICAgICAgICAgICAgICAgIDB4ZDgKKyNkZWZpbmUgVDREX0FJTlRFTl9CICAgICAgICAgICAgICAgICAweGRjCisjZGVmaW5lIFQ0RF9SQ0kgICAgICAgICAgICAgICAgICAgICAgMHg3MAorCisvKiBNUFUtNDAxIFVBUlQgKi8KKyNkZWZpbmUgVDREX01QVTQwMV9CQVNFICAgICAgICAgICAgIDB4MjAKKyNkZWZpbmUgVDREX01QVVIwICAgICAgICAgICAgICAgICAgIDB4MjAKKyNkZWZpbmUgVDREX01QVVIxICAgICAgICAgICAgICAgICAgIDB4MjEKKyNkZWZpbmUgVDREX01QVVIyICAgICAgICAgICAgICAgICAgIDB4MjIKKyNkZWZpbmUgVDREX01QVVIzICAgICAgICAgICAgICAgICAgIDB4MjMKKworLyogUy9QRElGIFJlZ2lzdGVycyAqLworI2RlZmluZSBOWF9TUENUUkxfU1BDU08gICAgICAgICAgICAgMHgyNAorI2RlZmluZSBOWF9TUExCQSAgICAgICAgICAgICAgICAgICAgMHgyOAorI2RlZmluZSBOWF9TUEVTTyAgICAgICAgICAgICAgICAgICAgMHgyYworI2RlZmluZSBOWF9TUENTVEFUVVMgICAgICAgICAgICAgICAgMHg2NAorCisvKiBKb3lzdGljayAqLworI2RlZmluZSBHQU1FUE9SVF9HQ1IgICAgICAgICAgICAgICAgMHgzMAorI2RlZmluZSBHQU1FUE9SVF9NT0RFX0FEQyAgICAgICAgICAgMHg4MAorI2RlZmluZSBHQU1FUE9SVF9MRUdBQ1kgICAgICAgICAgICAgMHgzMQorI2RlZmluZSBHQU1FUE9SVF9BWEVTICAgICAgICAgICAgICAgMHgzNAorCisvKiBOWCBTcGVjaWZpYyBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgTlhfVExCQyAgICAgICAgICAgICAgICAgICAgIDB4NmMKKworLyogQ2hhbm5lbCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBDSF9TVEFSVAkJICAgIDB4ZTAKKworI2RlZmluZSBDSF9EWF9DU09fQUxQSEFfRk1TICAgICAgICAgMHhlMAorI2RlZmluZSBDSF9EWF9FU09fREVMVEEgICAgICAgICAgICAgMHhlOAorI2RlZmluZSBDSF9EWF9GTUNfUlZPTF9DVk9MICAgICAgICAgMHhlYworCisjZGVmaW5lIENIX05YX0RFTFRBX0NTTyAgICAgICAgICAgICAweGUwCisjZGVmaW5lIENIX05YX0RFTFRBX0VTTyAgICAgICAgICAgICAweGU4CisjZGVmaW5lIENIX05YX0FMUEhBX0ZNU19GTUNfUlZPTF9DVk9MIDB4ZWMKKworI2RlZmluZSBDSF9MQkEgICAgICAgICAgICAgICAgICAgICAgMHhlNAorI2RlZmluZSBDSF9HVlNFTF9QQU5fVk9MX0NUUkxfRUMgICAgMHhmMAorI2RlZmluZSBDSF9FQlVGMSAgICAgICAgICAgICAgICAgICAgMHhmNAorI2RlZmluZSBDSF9FQlVGMiAgICAgICAgICAgICAgICAgICAgMHhmOAorCisvKiBBQy05NyBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBEWF9BQ1IwX0FDOTdfVyAgICAgICAgICAgICAgMHg0MAorI2RlZmluZSBEWF9BQ1IxX0FDOTdfUiAgICAgICAgICAgICAgMHg0NAorI2RlZmluZSBEWF9BQ1IyX0FDOTdfQ09NX1NUQVQgICAgICAgMHg0OAorCisjZGVmaW5lIE5YX0FDUjBfQUM5N19DT01fU1RBVCAgICAgICAweDQwCisjZGVmaW5lIE5YX0FDUjFfQUM5N19XICAgICAgICAgICAgICAweDQ0CisjZGVmaW5lIE5YX0FDUjJfQUM5N19SX1BSSU1BUlkgICAgICAweDQ4CisjZGVmaW5lIE5YX0FDUjNfQUM5N19SX1NFQ09OREFSWSAgICAweDRjCisKKyNkZWZpbmUgU0lfQUM5N19XUklURQkJICAgIDB4NDAKKyNkZWZpbmUgU0lfQUM5N19SRUFECQkgICAgMHg0NAorI2RlZmluZSBTSV9TRVJJQUxfSU5URl9DVFJMCSAgICAweDQ4CisjZGVmaW5lIFNJX0FDOTdfR1BJTwkJICAgIDB4NGMKKyNkZWZpbmUgU0lfQVNSMAkJCSAgICAweDUwCisjZGVmaW5lIFNJX1NQRElGX0NTCQkgICAgMHg3MAorI2RlZmluZSBTSV9HUElPCQkJICAgIDB4N2MKKworZW51bSB0cmlkZW50X254X2FjOTdfYml0cyB7CisJLyogQUNSMS0zICovCisJTlhfQUM5N19CVVNZX1dSSVRFIAk9IDB4MDgwMCwKKwlOWF9BQzk3X0JVU1lfUkVBRAk9IDB4MDgwMCwKKwlOWF9BQzk3X0JVU1lfREFUQSAJPSAweDA0MDAsCisJTlhfQUM5N19XUklURV9TRUNPTkRBUlkgPSAweDAxMDAsCisJLyogQUNSMCAqLworCU5YX0FDOTdfU0VDT05EQVJZX1JFQURZID0gMHgwMDQwLAorCU5YX0FDOTdfU0VDT05EQVJZX1JFQ09SRCA9IDB4MDAyMCwKKwlOWF9BQzk3X1NVUlJPVU5EX09VVFBVVCA9IDB4MDAxMCwKKwlOWF9BQzk3X1BSSU1BUllfUkVBRFkJPSAweDAwMDgsCisJTlhfQUM5N19QUklNQVJZX1JFQ09SRAk9IDB4MDAwNCwKKwlOWF9BQzk3X1BDTV9PVVRQVVQJPSAweDAwMDIsCisJTlhfQUM5N19XQVJNX1JFU0VUCT0gMHgwMDAxCit9OworCitlbnVtIHRyaWRlbnRfZHhfYWM5N19iaXRzIHsKKwlEWF9BQzk3X0JVU1lfV1JJVEUJPSAweDgwMDAsCisJRFhfQUM5N19CVVNZX1JFQUQJPSAweDgwMDAsCisJRFhfQUM5N19SRUFEWQkJPSAweDAwMTAsCisJRFhfQUM5N19SRUNPUkQJCT0gMHgwMDA4LAorCURYX0FDOTdfUExBWUJBQ0sJPSAweDAwMDIKK307CisKK2VudW0gc2lzNzAxOF9hYzk3X2JpdHMgeworCVNJX0FDOTdfQlVTWV9XUklURSA9CTB4MDAwMDgwMDAsCisJU0lfQUM5N19BVURJT19CVVNZID0JMHgwMDAwNDAwMCwKKwlTSV9BQzk3X01PREVNX0JVU1kgPQkweDAwMDAyMDAwLAorCVNJX0FDOTdfQlVTWV9SRUFEID0JMHgwMDAwODAwMCwKKwlTSV9BQzk3X1NFQ09OREFSWSA9CTB4MDAwMDAwODAsCit9OworCitlbnVtIHNlcmlhbF9pbnRmX2N0cmxfYml0cyB7CisJV0FSTV9SRVNFVAk9IDB4MDAwMDAwMDEsCisJQ09MRF9SRVNFVAk9IDB4MDAwMDAwMDIsCisJSTJTX0NMT0NLCT0gMHgwMDAwMDAwNCwKKwlQQ01fU0VDX0FDOTcJPSAweDAwMDAwMDA4LAorCUFDOTdfREJMX1JBVEUJPSAweDAwMDAwMDEwLAorCVNQRElGX0VOCT0gMHgwMDAwMDAyMCwKKwlJMlNfT1VUUFVUX0VOCT0gMHgwMDAwMDA0MCwKKwlJMlNfSU5QVVRfRU4JPSAweDAwMDAwMDgwLAorCVBDTUlOCQk9IDB4MDAwMDAxMDAsCisJTElORTFJTgkJPSAweDAwMDAwMjAwLAorCU1JQ0lOCQk9IDB4MDAwMDA0MDAsCisJTElORTJJTgkJPSAweDAwMDAwODAwLAorCUhFQURfU0VUX0lOCT0gMHgwMDAwMTAwMCwKKwlHUElPSU4JCT0gMHgwMDAwMjAwMCwKKwkvKiA3MDE4IHNwZWMgc2F5cyBpZCA9IDAxIGJ1dCB0aGUgZGVtbyBib2FyZCByb3V0ZWQgdG8gMTAKKwkgICBTRUNPTkRBUllfSUQ9IDB4MDAwMDQwMDAsICovCisJU0VDT05EQVJZX0lECT0gMHgwMDAwNDAwMCwKKwlQQ01PVVQJCT0gMHgwMDAxMDAwMCwKKwlTVVJST1VUCQk9IDB4MDAwMjAwMDAsCisJQ0VOVEVST1VUCT0gMHgwMDA0MDAwMCwKKwlMRkVPVVQJCT0gMHgwMDA4MDAwMCwKKwlMSU5FMU9VVAk9IDB4MDAxMDAwMDAsCisJTElORTJPVVQJPSAweDAwMjAwMDAwLAorCUdQSU9PVVQJCT0gMHgwMDQwMDAwMCwKKwlTSV9BQzk3X1BSSU1BUllfUkVBRFkgPSAweDAxMDAwMDAwLAorCVNJX0FDOTdfU0VDT05EQVJZX1JFQURZID0gMHgwMjAwMDAwMCwKKwlTSV9BQzk3X1BPV0VSRE9XTiA9IDB4MDQwMDAwMDAsCit9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy8qIFBDTSBkZWZhdWx0cyAqLworCisjZGVmaW5lIFQ0RF9ERUZBVUxUX1BDTV9WT0wJMTAJLyogMCAtIDI1NSAqLworI2RlZmluZSBUNERfREVGQVVMVF9QQ01fUEFOCTAJLyogMCAtIDEyNyAqLworI2RlZmluZSBUNERfREVGQVVMVF9QQ01fUlZPTAkxMjcJLyogMCAtIDEyNyAqLworI2RlZmluZSBUNERfREVGQVVMVF9QQ01fQ1ZPTAkxMjcJLyogMCAtIDEyNyAqLworCit0eXBlZGVmIHN0cnVjdCBfc25kX3RyaWRlbnQgdHJpZGVudF90OwordHlwZWRlZiBzdHJ1Y3QgX3NuZF90cmlkZW50X3ZvaWNlIHNuZF90cmlkZW50X3ZvaWNlX3Q7Cit0eXBlZGVmIHN0cnVjdCBfc25kX3RyaWRlbnRfcGNtX21peGVyIHNuZF90cmlkZW50X3BjbV9taXhlcl90OworCit0eXBlZGVmIHN0cnVjdCB7CisJdm9pZCAoKnNhbXBsZV9zdGFydCkodHJpZGVudF90ICpndXMsIHNuZF90cmlkZW50X3ZvaWNlX3QgKnZvaWNlLCBzbmRfc2VxX3Bvc2l0aW9uX3QgcG9zaXRpb24pOworCXZvaWQgKCpzYW1wbGVfc3RvcCkodHJpZGVudF90ICpndXMsIHNuZF90cmlkZW50X3ZvaWNlX3QgKnZvaWNlLCBzbmRfc2VxX3N0b3BfbW9kZV90IG1vZGUpOworCXZvaWQgKCpzYW1wbGVfZnJlcSkodHJpZGVudF90ICpndXMsIHNuZF90cmlkZW50X3ZvaWNlX3QgKnZvaWNlLCBzbmRfc2VxX2ZyZXF1ZW5jeV90IGZyZXEpOworCXZvaWQgKCpzYW1wbGVfdm9sdW1lKSh0cmlkZW50X3QgKmd1cywgc25kX3RyaWRlbnRfdm9pY2VfdCAqdm9pY2UsIHNuZF9zZXFfZXZfdm9sdW1lX3QgKnZvbHVtZSk7CisJdm9pZCAoKnNhbXBsZV9sb29wKSh0cmlkZW50X3QgKmNhcmQsIHNuZF90cmlkZW50X3ZvaWNlX3QgKnZvaWNlLCBzbmRfc2VxX2V2X2xvb3BfdCAqbG9vcCk7CisJdm9pZCAoKnNhbXBsZV9wb3MpKHRyaWRlbnRfdCAqY2FyZCwgc25kX3RyaWRlbnRfdm9pY2VfdCAqdm9pY2UsIHNuZF9zZXFfcG9zaXRpb25fdCBwb3NpdGlvbik7CisJdm9pZCAoKnNhbXBsZV9wcml2YXRlMSkodHJpZGVudF90ICpjYXJkLCBzbmRfdHJpZGVudF92b2ljZV90ICp2b2ljZSwgdW5zaWduZWQgY2hhciAqZGF0YSk7Cit9IHNuZF90cmlkZW50X3NhbXBsZV9vcHNfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXNuZF9taWRpX2NoYW5uZWxfc2V0X3QgKiBjaHNldDsKKwl0cmlkZW50X3QgKiB0cmlkZW50OworCWludCBtb2RlOwkJLyogb3BlcmF0aW9uIG1vZGUgKi8KKwlpbnQgY2xpZW50OwkJLyogc2VxdWVuY2VyIGNsaWVudCBudW1iZXIgKi8KKwlpbnQgcG9ydDsJCS8qIHNlcXVlbmNlciBwb3J0IG51bWJlciAqLworCXVuc2lnbmVkIGludCBtaWRpX2hhc192b2ljZXM6IDE7Cit9IHNuZF90cmlkZW50X3BvcnRfdDsKKwordHlwZWRlZiBzdHJ1Y3Qgc25kX3RyaWRlbnRfbWVtYmxrX2FyZyB7CisJc2hvcnQgZmlyc3RfcGFnZSwgbGFzdF9wYWdlOworfSBzbmRfdHJpZGVudF9tZW1ibGtfYXJnX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQgKiBlbnRyaWVzOwkJLyogMTZrLWFsaWduZWQgVExCIHRhYmxlICovCisJZG1hX2FkZHJfdCBlbnRyaWVzX2RtYWFkZHI7CS8qIDE2ay1hbGlnbmVkIFBDSSBhZGRyZXNzIHRvIFRMQiB0YWJsZSAqLworCXVuc2lnbmVkIGxvbmcgKiBzaGFkb3dfZW50cmllczsJLyogc2hhZG93IGVudHJpZXMgd2l0aCB2aXJ0dWFsIGFkZHJlc3NlcyAqLworCXN0cnVjdCBzbmRfZG1hX2J1ZmZlciBidWZmZXI7CisJc25kX3V0aWxfbWVtaGRyX3QgKiBtZW1oZHI7CS8qIHBhZ2UgYWxsb2NhdGlvbiBsaXN0ICovCisJc3RydWN0IHNuZF9kbWFfYnVmZmVyIHNpbGVudF9wYWdlOworfSBzbmRfdHJpZGVudF90bGJfdDsKKworc3RydWN0IF9zbmRfdHJpZGVudF92b2ljZSB7CisJdW5zaWduZWQgaW50IG51bWJlcjsKKwl1bnNpZ25lZCBpbnQgdXNlOiAxLAorCSAgICBwY206IDEsCisJICAgIHN5bnRoOjEsCisJICAgIG1pZGk6IDE7CisJdW5zaWduZWQgaW50IGZsYWdzOworCXVuc2lnbmVkIGNoYXIgY2xpZW50OworCXVuc2lnbmVkIGNoYXIgcG9ydDsKKwl1bnNpZ25lZCBjaGFyIGluZGV4OworCisJc25kX3NlcV9pbnN0cl90IGluc3RyOworCXNuZF90cmlkZW50X3NhbXBsZV9vcHNfdCAqc2FtcGxlX29wczsKKworCS8qIGNoYW5uZWwgcGFyYW1ldGVycyAqLworCXVuc2lnbmVkIGludCBDU087CQkvKiAyNCBiaXRzICgxNiBvbiBEWCkgKi8KKwl1bnNpZ25lZCBpbnQgRVNPOwkJLyogMjQgYml0cyAoMTYgb24gRFgpICovCisJdW5zaWduZWQgaW50IExCQTsJCS8qIDMwIGJpdHMgKi8KKwl1bnNpZ25lZCBzaG9ydCBFQzsJCS8qIDEyIGJpdHMgKi8KKwl1bnNpZ25lZCBzaG9ydCBBbHBoYTsJCS8qIDEyIGJpdHMgKi8KKwl1bnNpZ25lZCBzaG9ydCBEZWx0YTsJCS8qIDE2IGJpdHMgKi8KKwl1bnNpZ25lZCBzaG9ydCBBdHRyaWJ1dGU7CS8qIDE2IGJpdHMgLSBTaVMgNzAxOCAqLworCXVuc2lnbmVkIHNob3J0IFZvbDsJCS8qIDEyIGJpdHMgKDYuNikgKi8KKwl1bnNpZ25lZCBjaGFyIFBhbjsJCS8qIDcgYml0cyAoMS40LjIpICovCisJdW5zaWduZWQgY2hhciBHVlNlbDsJCS8qIDEgYml0ICovCisJdW5zaWduZWQgY2hhciBSVm9sOwkJLyogNyBiaXRzICg1LjIpICovCisJdW5zaWduZWQgY2hhciBDVm9sOwkJLyogNyBiaXRzICg1LjIpICovCisJdW5zaWduZWQgY2hhciBGTUM7CQkvKiAyIGJpdHMgKi8KKwl1bnNpZ25lZCBjaGFyIENUUkw7CQkvKiA0IGJpdHMgKi8KKwl1bnNpZ25lZCBjaGFyIEZNUzsJCS8qIDQgYml0cyAqLworCXVuc2lnbmVkIGNoYXIgTEZPOwkJLyogOCBiaXRzICovCisKKwl1bnNpZ25lZCBpbnQgbmVnQ1NPOwkvKiBub256ZXJvIC0gdXNlIG5lZ2F0aXZlIENTTyAqLworCisJc25kX3V0aWxfbWVtYmxrX3QgKm1lbWJsazsJLyogbWVtb3J5IGJsb2NrIGlmIFRMQiBlbmFibGVkICovCisKKwkvKiBQQ00gZGF0YSAqLworCisJdHJpZGVudF90ICp0cmlkZW50OworCXNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbTsKKwlzbmRfdHJpZGVudF92b2ljZV90ICpleHRyYTsJLyogZXh0cmEgUENNIHZvaWNlIChhY3RzIGFzIGludGVycnVwdCBnZW5lcmF0b3IpICovCisJdW5zaWduZWQgaW50IHJ1bm5pbmc6IDEsCisgICAgICAgICAgICBjYXB0dXJlOiAxLAorICAgICAgICAgICAgc3BkaWY6IDEsCisgICAgICAgICAgICBmb2xkYmFjazogMSwKKyAgICAgICAgICAgIGlzeW5jOiAxLAorICAgICAgICAgICAgaXN5bmMyOiAxLAorICAgICAgICAgICAgaXN5bmMzOiAxOworCWludCBmb2xkYmFja19jaGFuOwkJLyogZm9sZGJhY2sgc3ViZGV2aWNlIG51bWJlciAqLworCXVuc2lnbmVkIGludCBzdGltZXI7CQkvKiBnbG9iYWwgc2FtcGxlIHRpbWVyICh0byBkZXRlY3Qgc3B1cmlvdXMgaW50ZXJydXB0cykgKi8KKwl1bnNpZ25lZCBpbnQgc3B1cmlvdXNfdGhyZXNob2xkOyAvKiBzcHVyaW91cyB0aHJlc2hvbGQgKi8KKwl1bnNpZ25lZCBpbnQgaXN5bmNfbWFyazsKKwl1bnNpZ25lZCBpbnQgaXN5bmNfbWF4OworCXVuc2lnbmVkIGludCBpc3luY19FU087CisKKwkvKiAtLS0gKi8KKworCXZvaWQgKnByaXZhdGVfZGF0YTsKKwl2b2lkICgqcHJpdmF0ZV9mcmVlKShzbmRfdHJpZGVudF92b2ljZV90ICp2b2ljZSk7Cit9OworCitzdHJ1Y3QgX3NuZF80ZHdhdmUgeworCWludCBzZXFfY2xpZW50OworCisJc25kX3RyaWRlbnRfcG9ydF90IHNlcV9wb3J0c1s0XTsKKwlzbmRfc2ltcGxlX29wc190IHNpbXBsZV9vcHM7CisJc25kX3NlcV9raW5zdHJfbGlzdF90ICppbGlzdDsKKworCXNuZF90cmlkZW50X3ZvaWNlX3Qgdm9pY2VzWzY0XTsJCisKKwlpbnQgQ2hhblN5bnRoQ291bnQ7CQkvKiBudW1iZXIgb2YgYWxsb2NhdGVkIHN5bnRoIGNoYW5uZWxzICovCisJaW50IG1heF9zaXplOwkJCS8qIG1heGltdW0gc3ludGggbWVtb3J5IHNpemUgaW4gYnl0ZXMgKi8KKwlpbnQgY3VycmVudF9zaXplOwkJLyogY3VycmVudCBhbGxvY2F0ZWQgc3ludGggbWVtIGluIGJ5dGVzICovCit9OworCitzdHJ1Y3QgX3NuZF90cmlkZW50X3BjbV9taXhlciB7CisJc25kX3RyaWRlbnRfdm9pY2VfdCAqdm9pY2U7CS8qIGFjdGl2ZSB2b2ljZSAqLworCXVuc2lnbmVkIHNob3J0IHZvbDsJCS8qIGZyb250IHZvbHVtZSAqLworCXVuc2lnbmVkIGNoYXIgcGFuOwkJLyogcGFuIGNvbnRyb2wgKi8KKwl1bnNpZ25lZCBjaGFyIHJ2b2w7CQkvKiByZWFyIHZvbHVtZSAqLworCXVuc2lnbmVkIGNoYXIgY3ZvbDsJCS8qIGNlbnRlciB2b2x1bWUgKi8KKwl1bnNpZ25lZCBjaGFyIHBhZDsKK307CisKK3N0cnVjdCBfc25kX3RyaWRlbnQgeworCWludCBpcnE7CisKKwl1bnNpZ25lZCBpbnQgZGV2aWNlOwkvKiBkZXZpY2UgSUQgKi8KKworICAgICAgICB1bnNpZ25lZCBjaGFyICBiRE1BU3RhcnQ7CisKKwl1bnNpZ25lZCBsb25nIHBvcnQ7CisJdW5zaWduZWQgbG9uZyBtaWRpX3BvcnQ7CisKKwl1bnNpZ25lZCBpbnQgc3B1cmlvdXNfaXJxX2NvdW50OworCXVuc2lnbmVkIGludCBzcHVyaW91c19pcnFfbWF4X2RlbHRhOworCisgICAgICAgIHNuZF90cmlkZW50X3RsYl90IHRsYjsJLyogVExCIGVudHJpZXMgZm9yIE5YIGNhcmRzICovCisKKwl1bnNpZ25lZCBjaGFyIHNwZGlmX2N0cmw7CisJdW5zaWduZWQgY2hhciBzcGRpZl9wY21fY3RybDsKKwl1bnNpZ25lZCBpbnQgc3BkaWZfYml0czsKKwl1bnNpZ25lZCBpbnQgc3BkaWZfcGNtX2JpdHM7CisJc25kX2tjb250cm9sX3QgKnNwZGlmX3BjbV9jdGw7CS8qIFMvUERJRiBzZXR0aW5ncyAqLworCXVuc2lnbmVkIGludCBhYzk3X2N0cmw7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBpbnQgQ2hhbk1hcFsyXTsJLyogYWxsb2NhdGlvbiBtYXAgZm9yIGhhcmR3YXJlIGNoYW5uZWxzICovCisgICAgICAgIAorICAgICAgICBpbnQgQ2hhblBDTTsJCQkvKiBtYXggbnVtYmVyIG9mIFBDTSBjaGFubmVscyAqLworCWludCBDaGFuUENNY250OwkJCS8qIGFjdHVhbCBudW1iZXIgb2YgUENNIGNoYW5uZWxzICovCisKKwl1bnNpZ25lZCBpbnQgYWM5N19kZXRlY3Q6IDE7CS8qIDEgPSBBQzk3IGluIGRldGVjdGlvbiBwaGFzZSAqLworCXVuc2lnbmVkIGludCBpbl9zdXNwZW5kOiAxOwkvKiAxIGR1cmluZyBzdXNwZW5kL3Jlc3VtZSAqLworCisJc3RydWN0IF9zbmRfNGR3YXZlIHN5bnRoOwkvKiBzeW50aCBzcGVjaWZpYyB2YXJpYWJsZXMgKi8KKworCXNwaW5sb2NrX3QgZXZlbnRfbG9jazsKKwlzcGlubG9ja190IHZvaWNlX2FsbG9jOworCisJc3RydWN0IHNuZF9kbWFfZGV2aWNlIGRtYV9kZXY7CisKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpOworCXNuZF9jYXJkX3QgKmNhcmQ7CisJc25kX3BjbV90ICpwY207CQkvKiBBREMvREFDIFBDTSAqLworCXNuZF9wY21fdCAqZm9sZGJhY2s7CS8qIEZvbGRiYWNrIFBDTSAqLworCXNuZF9wY21fdCAqc3BkaWY7CS8qIFNQRElGIFBDTSAqLworCXNuZF9yYXdtaWRpX3QgKnJtaWRpOworCXNuZF9zZXFfZGV2aWNlX3QgKnNlcV9kZXY7CisKKwlhYzk3X2J1c190ICphYzk3X2J1czsKKwlhYzk3X3QgKmFjOTc7CisJYWM5N190ICphYzk3X3NlYzsKKworCXVuc2lnbmVkIGludCBtdXNpY3ZvbF93YXZldm9sOworCXNuZF90cmlkZW50X3BjbV9taXhlcl90IHBjbV9taXhlclszMl07CisJc25kX2tjb250cm9sX3QgKmN0bF92b2w7CS8qIGZyb250IHZvbHVtZSAqLworCXNuZF9rY29udHJvbF90ICpjdGxfcGFuOwkvKiBwYW4gKi8KKwlzbmRfa2NvbnRyb2xfdCAqY3RsX3J2b2w7CS8qIHJlYXIgdm9sdW1lICovCisJc25kX2tjb250cm9sX3QgKmN0bF9jdm9sOwkvKiBjZW50ZXIgdm9sdW1lICovCisKKwlzcGlubG9ja190IHJlZ19sb2NrOworCisJc3RydWN0IGdhbWVwb3J0ICpnYW1lcG9ydDsKK307CisKK2ludCBzbmRfdHJpZGVudF9jcmVhdGUoc25kX2NhcmRfdCAqIGNhcmQsCisJCSAgICAgICBzdHJ1Y3QgcGNpX2RldiAqcGNpLAorCQkgICAgICAgaW50IHBjbV9zdHJlYW1zLAorCQkgICAgICAgaW50IHBjbV9zcGRpZl9kZXZpY2UsCisJCSAgICAgICBpbnQgbWF4X3dhdmV0YWJsZV9zaXplLAorCQkgICAgICAgdHJpZGVudF90ICoqIHJ0cmlkZW50KTsKK2ludCBzbmRfdHJpZGVudF9jcmVhdGVfZ2FtZXBvcnQodHJpZGVudF90ICp0cmlkZW50KTsKKworaW50IHNuZF90cmlkZW50X3BjbSh0cmlkZW50X3QgKiB0cmlkZW50LCBpbnQgZGV2aWNlLCBzbmRfcGNtX3QgKipycGNtKTsKK2ludCBzbmRfdHJpZGVudF9mb2xkYmFja19wY20odHJpZGVudF90ICogdHJpZGVudCwgaW50IGRldmljZSwgc25kX3BjbV90ICoqcnBjbSk7CitpbnQgc25kX3RyaWRlbnRfc3BkaWZfcGNtKHRyaWRlbnRfdCAqIHRyaWRlbnQsIGludCBkZXZpY2UsIHNuZF9wY21fdCAqKnJwY20pOworaW50IHNuZF90cmlkZW50X2F0dGFjaF9zeW50aGVzaXplcih0cmlkZW50X3QgKiB0cmlkZW50KTsKK3NuZF90cmlkZW50X3ZvaWNlX3QgKnNuZF90cmlkZW50X2FsbG9jX3ZvaWNlKHRyaWRlbnRfdCAqIHRyaWRlbnQsIGludCB0eXBlLCBpbnQgY2xpZW50LCBpbnQgcG9ydCk7Cit2b2lkIHNuZF90cmlkZW50X2ZyZWVfdm9pY2UodHJpZGVudF90ICogdHJpZGVudCwgc25kX3RyaWRlbnRfdm9pY2VfdCAqdm9pY2UpOwordm9pZCBzbmRfdHJpZGVudF9zdGFydF92b2ljZSh0cmlkZW50X3QgKiB0cmlkZW50LCB1bnNpZ25lZCBpbnQgdm9pY2UpOwordm9pZCBzbmRfdHJpZGVudF9zdG9wX3ZvaWNlKHRyaWRlbnRfdCAqIHRyaWRlbnQsIHVuc2lnbmVkIGludCB2b2ljZSk7Cit2b2lkIHNuZF90cmlkZW50X3dyaXRlX3ZvaWNlX3JlZ3ModHJpZGVudF90ICogdHJpZGVudCwgc25kX3RyaWRlbnRfdm9pY2VfdCAqdm9pY2UpOworCisvKiBUTEIgbWVtb3J5IGFsbG9jYXRpb24gKi8KK3NuZF91dGlsX21lbWJsa190ICpzbmRfdHJpZGVudF9hbGxvY19wYWdlcyh0cmlkZW50X3QgKnRyaWRlbnQsIHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSk7CitpbnQgc25kX3RyaWRlbnRfZnJlZV9wYWdlcyh0cmlkZW50X3QgKnRyaWRlbnQsIHNuZF91dGlsX21lbWJsa190ICpibGspOworc25kX3V0aWxfbWVtYmxrX3QgKnNuZF90cmlkZW50X3N5bnRoX2FsbG9jKHRyaWRlbnRfdCAqdHJpZGVudCwgdW5zaWduZWQgaW50IHNpemUpOworaW50IHNuZF90cmlkZW50X3N5bnRoX2ZyZWUodHJpZGVudF90ICp0cmlkZW50LCBzbmRfdXRpbF9tZW1ibGtfdCAqYmxrKTsKK2ludCBzbmRfdHJpZGVudF9zeW50aF9jb3B5X2Zyb21fdXNlcih0cmlkZW50X3QgKnRyaWRlbnQsIHNuZF91dGlsX21lbWJsa190ICpibGssIGludCBvZmZzZXQsIGNvbnN0IGNoYXIgX191c2VyICpkYXRhLCBpbnQgc2l6ZSk7CisKKyNlbmRpZiAvKiBfX1NPVU5EX1RSSURFTlRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC91ZGExMzQxLmggYi9pbmNsdWRlL3NvdW5kL3VkYTEzNDEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWZmNjVhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9zb3VuZC91ZGExMzQxLmgKQEAgLTAsMCArMSwyMzMgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9saW51eC9sMy91ZGExMzQxLmgKKyAqCisgKiBQaGlsaXBzIFVEQTEzNDEgbWl4ZXIgZGV2aWNlIGRyaXZlciBmb3IgQUxTQQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMiBUb21hcyBLYXNwYXJlayA8dG9tYXMua2FzcGFyZWtAc2V6bmFtLmN6PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorICoKKyAqIEhpc3Rvcnk6CisgKgorICogMjAwMi0wMy0xMyBUb21hcyBLYXNwYXJlayBJbml0aWFsIHJlbGVhc2UgLSBiYXNlZCBvbiB1ZGExMzQxLmggZnJvbSBPU1MKKyAqIDIwMDItMDMtMzAgVG9tYXMgS2FzcGFyZWsgUHJvYyBmaWxlc3lzdGVtIHN1cHBvcnQsIGNvbXBsZXRlIG1peGVyIGFuZCBEU1AKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXMgc3VwcG9ydAorICovCisKKy8qICRJZDogdWRhMTM0MS5oLHYgMS42IDIwMDQvMDUvMDMgMTc6MzY6NTAgdGl3YWkgRXhwICQgKi8KKworI2RlZmluZSBVREExMzQxX0FMU0FfTkFNRSAic25kLXVkYTEzNDEiCisKKy8qCisgKiBEZWZhdWx0IHJhdGUgc2V0IGFmdGVyIGluaWNpYWxpemF0aW9uCisgKi8KKyNkZWZpbmUgQVVESU9fUkFURV9ERUZBVUxUCTQ0MTAwCisKKy8qCisgKiBVREExMzQxIEwzIGFkZHJlc3MgYW5kIGNvbW1hbmQgdHlwZXMKKyAqLworI2RlZmluZSBVREExMzQxX0wzQUREUgkJNQorI2RlZmluZSBVREExMzQxX0RBVEEwCQkoVURBMTM0MV9MM0FERFIgPDwgMiB8IDApCisjZGVmaW5lIFVEQTEzNDFfREFUQTEJCShVREExMzQxX0wzQUREUiA8PCAyIHwgMSkKKyNkZWZpbmUgVURBMTM0MV9TVEFUVVMJCShVREExMzQxX0wzQUREUiA8PCAyIHwgMikKKworZW51bSB1ZGExMzQxX29ub2ZmIHsKKwlPRkY9MCwKKwlPTiwKK307CisKK2NvbnN0IGNoYXIgKm9ub2ZmX25hbWVzW10gPSB7CisJIk9mZiIsCisJIk9uIiwKK307CisKK2VudW0gdWRhMTM0MV9mb3JtYXQgeworCUkyUz0wLAorCUxTQjE2LAorCUxTQjE4LAorCUxTQjIwLAorCU1TQiwKKwlMU0IxNk1TQiwKKwlMU0IxOE1TQiwKKwlMU0IyME1TQiwgICAgICAgIAorfTsKKworY29uc3QgY2hhciAqZm9ybWF0X25hbWVzW10gPSB7CisJIkkyUy1idXMiLAorCSJMU0IgMTZiaXRzIiwKKwkiTFNCIDE4Yml0cyIsCisJIkxTQiAyMGJpdHMiLAorCSJNU0IiLAorCSJpbiBMU0IgMTZiaXRzL291dCBNU0IiLAorCSJpbiBMU0IgMThiaXRzL291dCBNU0IiLAorCSJpbiBMU0IgMjBiaXRzL291dCBNU0IiLCAgICAgICAgCit9OworCitlbnVtIHVkYTEzNDFfZnMgeworCUY1MTI9MCwKKwlGMzg0LAorCUYyNTYsCisJRnVudXNlZCwKK307CisKK2NvbnN0IGNoYXIgKmZzX25hbWVzW10gPSB7CisJIjUxMipmcyIsCisJIjM4NCpmcyIsCisJIjI1NipmcyIsCisJIlVudXNlZCAtIGJhZCB2YWx1ZSEiLAorfTsKKworZW51bSB1ZGExMzQxX3BlYWsgeworCUJFRk9SRT0wLAorCUFGVEVSLAorfTsKKworY29uc3QgY2hhciAqcGVha19uYW1lc1tdID0geworCSJiZWZvcmUiLAorCSJhZnRlciIsCit9OworCitlbnVtIHVkYTEzNDFfZmlsdGVyIHsKKwlGTEFUPTAsCisJTUlOLAorCU1JTjIsCisJTUFYLAorfTsKKworY29uc3QgY2hhciAqZmlsdGVyX25hbWVzW10gPSB7CisJImZsYXQiLAorCSJtaW4iLAorCSJtaW4iLAorCSJtYXgiLAorfTsKKworY29uc3QgY2hhcipiYXNzX3ZhbHVlc1tdWzE2XSA9IHsKKwl7IjAgZEIiLCAiMCBkQiIsICIwIGRCIiwgIjAgZEIiLCAiMCBkQiIsICIwIGRCIiwgIjAgZEIiLCAiMCBkQiIsICIwIGRCIiwgIjAgZEIiLCAiMCBkQiIsCisJICIwIGRCIiwgIjAgZEIiLCAiMCBkQiIsICIwIGRCIiwgInVuZGVmaW5lZCIsIH0sIC8vZmxhdAorCXsiMCBkQiIsICIyIGRCIiwgIjQgZEIiLCAiNiBkQiIsICI4IGRCIiwgIjEwIGRCIiwgIjEyIGRCIiwgIjE0IGRCIiwgIjE2IGRCIiwgIjE4IGRCIiwgIjE4IGRCIiwKKwkgIjE4IGRCIiwgIjE4IGRCIiwgIjE4IGRCIiwgIjE4IGRCIiwgInVuZGVmaW5lZCIsfSwgLy8gbWluCisJeyIwIGRCIiwgIjIgZEIiLCAiNCBkQiIsICI2IGRCIiwgIjggZEIiLCAiMTAgZEIiLCAiMTIgZEIiLCAiMTQgZEIiLCAiMTYgZEIiLCAiMTggZEIiLCAiMTggZEIiLAorCSAiMTggZEIiLCAiMTggZEIiLCAiMTggZEIiLCAiMTggZEIiLCAidW5kZWZpbmVkIix9LCAvLyBtaW4KKwl7IjAgZEIiLCAiMiBkQiIsICI0IGRCIiwgIjYgZEIiLCAiOCBkQiIsICIxMCBkQiIsICIxMiBkQiIsICIxNCBkQiIsICIxNiBkQiIsICIxOCBkQiIsICIyMCBkQiIsCisJICIyMiBkQiIsICIyNCBkQiIsICIyNCBkQiIsICIyNCBkQiIsICJ1bmRlZmluZWQiLH0sIC8vIG1heAorfTsKKworZW51bSB1ZGExMzQxX21peGVyIHsKKwlET1VCTEUsCisJTElORSwKKwlNSUMsCisJTUlYRVIsCit9OworCitjb25zdCBjaGFyICptaXhlcl9uYW1lc1tdID0geworCSJkb3VibGUgZGlmZmVyZW50aWFsIiwKKwkiaW5wdXQgY2hhbm5lbCAxIChsaW5lIGluKSIsCisJImlucHV0IGNoYW5uZWwgMiAobWljcm9waG9uZSkiLAorCSJkaWdpdGFsIG1peGVyIiwKK307CisKK2VudW0gdWRhMTM0MV9kZWVtcCB7CisJTk9ORSwKKwlEMzIsCisJRDQ0LAorCUQ0OCwKK307CisKK2NvbnN0IGNoYXIgKmRlZW1wX25hbWVzW10gPSB7CisJIm5vbmUiLAorCSIzMiBrSHoiLAorCSI0NC4xIGtIeiIsCisJIjQ4IGtIeiIsICAgICAgICAKK307CisKK2NvbnN0IGNoYXIgKm1pY19zZW5zX3ZhbHVlW10gPSB7CisJIi0zIGRCIiwgIjAgZEIiLCAiMyBkQiIsICI5IGRCIiwgIjE1IGRCIiwgIjIxIGRCIiwgIjI3IGRCIiwgIm5vdCB1c2VkIiwKK307CisKK2NvbnN0IHVuc2lnbmVkIHNob3J0IEFHQ19hdGltZVtdID0geworCTExLCAxNiwgMTEsIDE2LCAyMSwgMTEsIDE2LCAyMSwKK307CisKK2NvbnN0IHVuc2lnbmVkIHNob3J0IEFHQ19kdGltZVtdID0geworCTEwMCwgMTAwLCAyMDAsIDIwMCwgMjAwLCA0MDAsIDQwMCwgNDAwLAorfTsKKworY29uc3QgY2hhciAqQUdDX2xldmVsW10gPSB7CisJIi05LjAiLCAiLTExLjUiLCAiLTE1LjAiLCAiLTE3LjUiLAorfTsKKworY29uc3QgY2hhciAqaWdfc21hbGxfdmFsdWVbXSA9IHsKKwkiLTMuMCIsICItMi41IiwgIi0yLjAiLCAiLTEuNSIsICItMS4wIiwgIi0wLjUiLAorfTsKKworLyoKKyAqIHRoaXMgd2FzIGNvbXB1dGVkIGFzIHBlYWtfdmFsdWVbaV0gPSBwb3coKDYzLWkpKjEuNDIsMS4wMTMpCisgKgorICogVURBMTM0MSBkYXRhc2hlZXQgb24gcGFnZSAyMTogUGVhayB2YWx1ZSAoZEIpID0gKFBlYWsgbGV2ZWwgLSA2My41KSo1KmxvZzIKKyAqIFRoZXJlIGlzIGFuIHRhYmxlIHdpdGggdGhlc2UgdmFsdWVzIFtsZXZlbF09dmFsdWU6IFszXT0tOTAuMzEsIFs3XT0tODQuMjkKKyAqIFs2MV09LTIuNzgsIFs2Ml0gPSAtMS40OCwgWzYzXSA9IDAuMAorICogSSB0cmllZCB0byBjb21wdXRlIGl0LCBidXQgdXNpbmcgYnV0IGV2ZW4gdXNpbmcgbG9nYXJpdGhtIHdpdGggYmFzZSBlaXRoZXIgMTAgb3IgMgorICogaSB3YXMnbiBhYmxlIHRvIGdldCB2YWx1ZXMgaW4gdGhlIHRhYmxlIGZyb20gdGhlIGZvcm11bGEuIFNvIEkgY29uc3RydWN0ZWQgYW5vdGhlcgorICogZm9ybXVsYSAoc2VlIGFib3ZlKSB0byBpbnRlcnBvbGF0ZSB0aGUgdmFsdWVzIGFzIGdvb2QgYXMgcG9zc2libGUuIElmIHRoZXJlIGlzIHNvbWUKKyAqIG1pc3Rha2UsIHBsZWFzZSBjb250YWN0IG1lIG9uIHRvbWFzLmthc3BhcmVrQHNlem5hbS5jei4gVGhhbmtzLgorICogVURBMTM0MVRTIGRhdGFzaGVldCBpcyBhdmFpbGFibGUgYXQ6CisgKiAgIGh0dHA6Ly93d3ctdXM5LnNlbWljb25kdWN0b3JzLmNvbS9hY3JvYmF0L2RhdGFzaGVldHMvVURBMTM0MVRTXzMucGRmIAorICovCitjb25zdCBjaGFyICpwZWFrX3ZhbHVlW10gPSB7CisJIi1JTkYgZEIiLCAiTi5BLiIsICJOLkEiLCAiOTAuMzEgZEIiLCAiTi5BLiIsICJOLkEuIiwgIk4uQS4iLCAiLTg0LjI5IGRCIiwKKwkiLTgyLjY1IGRCIiwgIi04MS4xMyBkQiIsICItNzkuNjEgZEIiLCAiLTc4LjA5IGRCIiwgIi03Ni41NyBkQiIsICItNzUuMDUgZEIiLCAiLTczLjUzIGRCIiwKKwkiLTcyLjAxIGRCIiwgIi03MC40OSBkQiIsICItNjguOTcgZEIiLCAiLTY3LjQ1IGRCIiwgIi02NS45MyBkQiIsICItNjQuNDEgZEIiLCAiLTYyLjkwIGRCIiwKKwkiLTYxLjM4IGRCIiwgIi01OS44NiBkQiIsICItNTguMzUgZEIiLCAiLTU2LjgzIGRCIiwgIi01NS4zMiBkQiIsICItNTMuODAgZEIiLCAiLTUyLjI5IGRCIiwKKwkiLTUwLjc4IGRCIiwgIi00OS4yNiBkQiIsICItNDcuNzUgZEIiLCAiLTQ2LjI0IGRCIiwgIi00NC43MyBkQiIsICItNDMuMjIgZEIiLCAiLTQxLjcxIGRCIiwKKwkiLTQwLjIwIGRCIiwgIi0zOC42OSBkQiIsICItMzcuMTkgZEIiLCAiLTM1LjY4IGRCIiwgIi0zNC4xNyBkQiIsICItMzIuNjcgZEIiLCAiLTMxLjE3IGRCIiwKKwkiLTI5LjY2IGRCIiwgIi0yOC4xNiBkQiIsICItMjYuNjYgZEIiLCAiLTI1LjE2IGRCIiwgIi0yMy42NiBkQiIsICItMjIuMTYgZEIiLCAiLTIwLjY3IGRCIiwKKwkiLTE5LjE3IGRCIiwgIi0xNy42OCBkQiIsICItMTYuMTkgZEIiLCAiLTE0LjcwIGRCIiwgIi0xMy4yMSBkQiIsICItMTEuNzIgZEIiLCAiLTEwLjI0IGRCIiwKKwkiLTguNzYgZEIiLCAiLTcuMjggZEIiLCAiLTUuODEgZEIiLCAiLTQuMzQgZEIiLCAiLTIuODggZEIiLCAiLTEuNDMgZEIiLCAiMC4wMCBkQiIsCit9OworCitlbnVtIHVkYTEzNDFfY29uZmlnIHsKKwlDTURfUkVBRF9SRUcgPSAwLAorCUNNRF9SRVNFVCwKKwlDTURfRlMsCisJQ01EX0ZPUk1BVCwKKwlDTURfT0dBSU4sCisJQ01EX0lHQUlOLAorCUNNRF9EQUMsCisJQ01EX0FEQywKKwlDTURfVk9MVU1FLAorCUNNRF9CQVNTLAorCUNNRF9UUkVCQkxFLAorCUNNRF9QRUFLLAorCUNNRF9ERUVNUCwKKwlDTURfTVVURSwgICAgICAgIAorCUNNRF9GSUxURVIsCisJQ01EX0NIMSwKKwlDTURfQ0gyLAorCUNNRF9NSUMsICAgICAgIAorCUNNRF9NSVhFUiwKKwlDTURfQUdDLAorCUNNRF9JRywKKwlDTURfQUdDX1RJTUUsCisJQ01EX0FHQ19MRVZFTCwKKyNpZmRlZiBDT05GSUdfUE0KKwlDTURfU1VTUEVORCwKKwlDTURfUkVTVU1FLAorI2VuZGlmCisJQ01EX0xBU1QsCit9OworCitlbnVtIHdyaXRlX3Rocm91Z2ggeworCS8vdXNlZCBpbiB1cGRhdGVfYml0cyAod3JpdGVfY2ZnKSB0byBhdm9pZCBsM193cml0ZSAtIGp1c3QgdXBkYXRlIGxvY2FsIGNvcHkgb2YgcmVncy4KKwlSRUdTX09OTFk9MCwKKwkvL3VwZGF0ZSBsb2NhbCByZWdzIGFuZCB3cml0ZSB2YWx1ZSB0byB1ZGExMzQxIC0gZG8gbDNfd3JpdGUKKwlGTFVTSCwKK307CisKK2ludCBfX2luaXQgc25kX2NoaXBfdWRhMTM0MV9taXhlcl9uZXcoc25kX2NhcmRfdCAqY2FyZCwgc3RydWN0IGwzX2NsaWVudCAqKmNsbnQpOworCisvKgorICogTG9jYWwgdmFyaWFibGVzOgorICogaW5kZW50LXRhYnMtbW9kZTogdAorICogRW5kOgorICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3V0aWxfbWVtLmggYi9pbmNsdWRlL3NvdW5kL3V0aWxfbWVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQyY2RmYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvc291bmQvdXRpbF9tZW0uaApAQCAtMCwwICsxLDY0IEBACisjaWZuZGVmIF9fU09VTkRfVVRJTF9NRU1fSAorI2RlZmluZSBfX1NPVU5EX1VUSUxfTUVNX0gKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwIFRha2FzaGkgSXdhaSA8dGl3YWlAc3VzZS5kZT4KKyAqCisgKiAgR2VuZXJpYyBtZW1vcnkgbWFuYWdlbWVudCByb3V0aW5lcyBmb3Igc291bmRjYXJkIG1lbW9yeSBhbGxvY2F0aW9uCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICovCisKK3R5cGVkZWYgc3RydWN0IHNuZF91dGlsX21lbWJsayBzbmRfdXRpbF9tZW1ibGtfdDsKK3R5cGVkZWYgc3RydWN0IHNuZF91dGlsX21lbWhkciBzbmRfdXRpbF9tZW1oZHJfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50IHNuZF91dGlsX3VuaXRfdDsKKworLyoKKyAqIG1lbW9yeSBibG9jaworICovCitzdHJ1Y3Qgc25kX3V0aWxfbWVtYmxrIHsKKwlzbmRfdXRpbF91bml0X3Qgc2l6ZTsJCS8qIHNpemUgb2YgdGhpcyBibG9jayAqLworCXNuZF91dGlsX3VuaXRfdCBvZmZzZXQ7CQkvKiB6ZXJvLW9mZnNldCBvZiB0aGlzIGJsb2NrICovCisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwkJLyogbGluayAqLworfTsKKworI2RlZmluZSBzbmRfdXRpbF9tZW1ibGtfYXJncHRyKGJsaykJKHZvaWQqKSgoY2hhciopKGJsaykgKyBzaXplb2Yoc25kX3V0aWxfbWVtYmxrX3QpKQorCisvKgorICogbWVtb3J5IG1hbmFnZW1lbnQgaW5mb3JtYXRpb24KKyAqLworc3RydWN0IHNuZF91dGlsX21lbWhkciB7CisJc25kX3V0aWxfdW5pdF90IHNpemU7CQkvKiBzaXplIG9mIHdob2xlIGRhdGEgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGJsb2NrOwkJLyogYmxvY2sgbGlua2VkLWxpc3QgaGVhZGVyICovCisJaW50IG5ibG9ja3M7CQkJLyogIyBvZiBhbGxvY2F0ZWQgYmxvY2tzICovCisJc25kX3V0aWxfdW5pdF90IHVzZWQ7CQkvKiB1c2VkIG1lbW9yeSBzaXplICovCisJaW50IGJsb2NrX2V4dHJhX3NpemU7CQkvKiBleHRyYSBkYXRhIHNpemUgb2YgY2h1bmsgKi8KKwlzdHJ1Y3Qgc2VtYXBob3JlIGJsb2NrX211dGV4OwkvKiBsb2NrICovCit9OworCisvKgorICogcHJvdG90eXBlcworICovCitzbmRfdXRpbF9tZW1oZHJfdCAqc25kX3V0aWxfbWVtaGRyX25ldyhpbnQgbWVtc2l6ZSk7Cit2b2lkIHNuZF91dGlsX21lbWhkcl9mcmVlKHNuZF91dGlsX21lbWhkcl90ICpoZHIpOworc25kX3V0aWxfbWVtYmxrX3QgKnNuZF91dGlsX21lbV9hbGxvYyhzbmRfdXRpbF9tZW1oZHJfdCAqaGRyLCBpbnQgc2l6ZSk7CitpbnQgc25kX3V0aWxfbWVtX2ZyZWUoc25kX3V0aWxfbWVtaGRyX3QgKmhkciwgc25kX3V0aWxfbWVtYmxrX3QgKmJsayk7CitpbnQgc25kX3V0aWxfbWVtX2F2YWlsKHNuZF91dGlsX21lbWhkcl90ICpoZHIpOworCisvKiBmdW5jdGlvbnMgd2l0aG91dCBtdXRleCAqLworc25kX3V0aWxfbWVtYmxrX3QgKl9fc25kX3V0aWxfbWVtX2FsbG9jKHNuZF91dGlsX21lbWhkcl90ICpoZHIsIGludCBzaXplKTsKK3ZvaWQgX19zbmRfdXRpbF9tZW1fZnJlZShzbmRfdXRpbF9tZW1oZHJfdCAqaGRyLCBzbmRfdXRpbF9tZW1ibGtfdCAqYmxrKTsKK3NuZF91dGlsX21lbWJsa190ICpfX3NuZF91dGlsX21lbWJsa19uZXcoc25kX3V0aWxfbWVtaGRyX3QgKmhkciwgc25kX3V0aWxfdW5pdF90IHVuaXRzLCBzdHJ1Y3QgbGlzdF9oZWFkICpwcmV2KTsKKworI2VuZGlmIC8qIF9fU09VTkRfVVRJTF9NRU1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC92ZXJzaW9uLmggYi9pbmNsdWRlL3NvdW5kL3ZlcnNpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGI0MjMwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9zb3VuZC92ZXJzaW9uLmgKQEAgLTAsMCArMSwzIEBACisvKiBpbmNsdWRlL3ZlcnNpb24uaC4gIEdlbmVyYXRlZCBieSBjb25maWd1cmUuICAqLworI2RlZmluZSBDT05GSUdfU05EX1ZFUlNJT04gIjEuMC45cmMyIgorI2RlZmluZSBDT05GSUdfU05EX0RBVEUgIiAgKFRodSBNYXIgMjQgMTA6MzM6MzkgMjAwNSBVVEMpIgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC92eF9jb3JlLmggYi9pbmNsdWRlL3NvdW5kL3Z4X2NvcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2UyOTkzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9zb3VuZC92eF9jb3JlLmgKQEAgLTAsMCArMSw1NjIgQEAKKy8qCisgKiBEcml2ZXIgZm9yIERpZ2lncmFtIFZYIHNvdW5kY2FyZHMKKyAqCisgKiBIYXJkd2FyZSBjb3JlIHBhcnQKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIgYnkgVGFrYXNoaSBJd2FpIDx0aXdhaUBzdXNlLmRlPgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaWZuZGVmIF9fU09VTkRfVlhfQ09NTU9OX0gKKyNkZWZpbmUgX19TT1VORF9WWF9DT01NT05fSAorCisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvaHdkZXAuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKworI2lmIGRlZmluZWQoQ09ORklHX0ZXX0xPQURFUikgfHwgZGVmaW5lZChDT05GSUdfRldfTE9BREVSX01PRFVMRSkKKyNpZiAhZGVmaW5lZChDT05GSUdfVVNFX1ZYTE9BREVSKSAmJiAhZGVmaW5lZChDT05GSUdfU05EX1ZYX0xJQikgLyogYnVpbHQtaW4ga2VybmVsICovCisjZGVmaW5lIFNORF9WWF9GV19MT0FERVIJLyogdXNlIHRoZSBzdGFuZGFyZCBmaXJtd2FyZSBsb2FkZXIgKi8KKyNlbmRpZgorI2VuZGlmCisKK3N0cnVjdCBmaXJtd2FyZTsKK3N0cnVjdCBkZXZpY2U7CisKK3R5cGVkZWYgc3RydWN0IHNuZF92eF9jb3JlIHZ4X2NvcmVfdDsKK3R5cGVkZWYgc3RydWN0IHZ4X3BpcGUgdnhfcGlwZV90OworCisjZGVmaW5lIFZYX0RSSVZFUl9WRVJTSU9OCTB4MDEwMDAwCS8qIDEuMC4wICovCisKKy8qCisgKi8KKyNkZWZpbmUgU0laRV9NQVhfQ01EICAgIDB4MTAKKyNkZWZpbmUgU0laRV9NQVhfU1RBVFVTIDB4MTAKKworc3RydWN0IHZ4X3JtaCB7CisJdTE2CUxnQ21kOwkJLyogbGVuZ3RoIG9mIHRoZSBjb21tYW5kIHRvIHNlbmQgKFdPUkRzKSAqLworCXUxNglMZ1N0YXQ7CQkvKiBsZW5ndGggb2YgdGhlIHN0YXR1cyByZWNlaXZlZCAoV09SRHMpICovCisJdTMyCUNtZFtTSVpFX01BWF9DTURdOworCXUzMglTdGF0W1NJWkVfTUFYX1NUQVRVU107CisJdTE2CURzcFN0YXQ7CS8qIHN0YXR1cyB0eXBlLCBSTVBfU1NJWkVfWFhYICovCit9OworCQordHlwZWRlZiB1NjQgcGN4X3RpbWVfdDsKKworI2RlZmluZSBWWF9NQVhfUElQRVMJMTYKKyNkZWZpbmUgVlhfTUFYX1BFUklPRFMJMzIKKyNkZWZpbmUgVlhfTUFYX0NPREVDUwkyCisKK3N0cnVjdCB2eF9pYmxfaW5mbyB7CisJaW50IHNpemU7CS8qIHRoZSBjdXJyZW50IElCTCBzaXplICgwID0gcXVlcnkpIGluIGJ5dGVzICovCisJaW50IG1heF9zaXplOwkvKiBtYXguIElCTCBzaXplIGluIGJ5dGVzICovCisJaW50IG1pbl9zaXplOwkvKiBtaW4uIElCTCBzaXplIGluIGJ5dGVzICovCisJaW50IGdyYW51bGFyaXR5OwkvKiBncmFudWxhcml0eSAqLworfTsKKworc3RydWN0IHZ4X3BpcGUgeworCWludCBudW1iZXI7CisJdW5zaWduZWQgaW50IGlzX2NhcHR1cmU6IDE7CisJdW5zaWduZWQgaW50IGRhdGFfbW9kZTogMTsKKwl1bnNpZ25lZCBpbnQgcnVubmluZzogMTsKKwl1bnNpZ25lZCBpbnQgcHJlcGFyZWQ6IDE7CisJaW50IGNoYW5uZWxzOworCXVuc2lnbmVkIGludCBkaWZmZXJlZF90eXBlOworCXBjeF90aW1lX3QgcGN4X3RpbWU7CisJc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtOworCisJaW50IGhidWZfc2l6ZTsJCS8qIEgtYnVmZmVyIHNpemUgaW4gYnl0ZXMgKi8KKwlpbnQgYnVmZmVyX2J5dGVzOwkvKiB0aGUgQUxTQSBwY20gYnVmZmVyIHNpemUgaW4gYnl0ZXMgKi8KKwlpbnQgcGVyaW9kX2J5dGVzOwkvKiB0aGUgQUxTQSBwY20gcGVyaW9kIHNpemUgaW4gYnl0ZXMgKi8KKwlpbnQgaHdfcHRyOwkJLyogdGhlIGN1cnJlbnQgaGFyZHdhcmUgcG9pbnRlciBpbiBieXRlcyAqLworCWludCBwb3NpdGlvbjsJCS8qIHRoZSBjdXJyZW50IHBvc2l0aW9uIGluIGZyYW1lcyAocGxheWJhY2sgb25seSkgKi8KKwlpbnQgdHJhbnNmZXJyZWQ7CS8qIHRoZSB0cmFuc2ZlcnJlZCBzaXplIChwZXIgcGVyaW9kKSBpbiBmcmFtZXMgKi8KKwlpbnQgYWxpZ247CQkvKiBzaXplIG9mIGFsaWdubWVudCAqLworCXU2NCBjdXJfY291bnQ7CQkvKiBjdXJyZW50IHNhbXBsZSBwb3NpdGlvbiAoZm9yIHBsYXliYWNrKSAqLworCisJdW5zaWduZWQgaW50IHJlZmVyZW5jZXM7ICAgICAvKiBhbiBvdXRwdXQgcGlwZSBtYXkgYmUgdXNlZCBmb3IgbW9uaXRvcmluZyBhbmQvb3IgcGxheWJhY2sgKi8KKwl2eF9waXBlX3QgKm1vbml0b3JpbmdfcGlwZTsgIC8qIHBvaW50ZXIgdG8gdGhlIG1vbml0b3JpbmcgcGlwZSAoY2FwdHVyZSBwaXBlIG9ubHkpKi8KKworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCBzdGFydF90cTsKK307CisKK3N0cnVjdCBzbmRfdnhfb3BzIHsKKwkvKiBsb3ctbGV2ZWwgaS9vICovCisJdW5zaWduZWQgY2hhciAoKmluOCkodnhfY29yZV90ICpjaGlwLCBpbnQgcmVnKTsKKwl1bnNpZ25lZCBpbnQgKCppbjMyKSh2eF9jb3JlX3QgKmNoaXAsIGludCByZWcpOworCXZvaWQgKCpvdXQ4KSh2eF9jb3JlX3QgKmNoaXAsIGludCByZWcsIHVuc2lnbmVkIGNoYXIgdmFsKTsKKwl2b2lkICgqb3V0MzIpKHZ4X2NvcmVfdCAqY2hpcCwgaW50IHJlZywgdW5zaWduZWQgaW50IHZhbCk7CisJLyogaXJxICovCisJaW50ICgqdGVzdF9hbmRfYWNrKSh2eF9jb3JlX3QgKmNoaXApOworCXZvaWQgKCp2YWxpZGF0ZV9pcnEpKHZ4X2NvcmVfdCAqY2hpcCwgaW50IGVuYWJsZSk7CisJLyogY29kZWMgKi8KKwl2b2lkICgqd3JpdGVfY29kZWMpKHZ4X2NvcmVfdCAqY2hpcCwgaW50IGNvZGVjLCB1bnNpZ25lZCBpbnQgZGF0YSk7CisJdm9pZCAoKmFrbV93cml0ZSkodnhfY29yZV90ICpjaGlwLCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQgZGF0YSk7CisJdm9pZCAoKnJlc2V0X2NvZGVjKSh2eF9jb3JlX3QgKmNoaXApOworCXZvaWQgKCpjaGFuZ2VfYXVkaW9fc291cmNlKSh2eF9jb3JlX3QgKmNoaXAsIGludCBzcmMpOworCXZvaWQgKCpzZXRfY2xvY2tfc291cmNlKSh2eF9jb3JlX3QgKmNocCwgaW50IHNyYyk7CisJLyogY2hpcCBpbml0ICovCisJaW50ICgqbG9hZF9kc3ApKHZ4X2NvcmVfdCAqY2hpcCwgaW50IGlkeCwgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyk7CisJdm9pZCAoKnJlc2V0X2RzcCkodnhfY29yZV90ICpjaGlwKTsKKwl2b2lkICgqcmVzZXRfYm9hcmQpKHZ4X2NvcmVfdCAqY2hpcCwgaW50IGNvbGRfcmVzZXQpOworCWludCAoKmFkZF9jb250cm9scykodnhfY29yZV90ICpjaGlwKTsKKwkvKiBwY20gKi8KKwl2b2lkICgqZG1hX3dyaXRlKSh2eF9jb3JlX3QgKmNoaXAsIHNuZF9wY21fcnVudGltZV90ICpydW50aW1lLAorCQkJICB2eF9waXBlX3QgKnBpcGUsIGludCBjb3VudCk7CisJdm9pZCAoKmRtYV9yZWFkKSh2eF9jb3JlX3QgKmNoaXAsIHNuZF9wY21fcnVudGltZV90ICpydW50aW1lLAorCQkJICB2eF9waXBlX3QgKnBpcGUsIGludCBjb3VudCk7Cit9OworCitzdHJ1Y3Qgc25kX3Z4X2hhcmR3YXJlIHsKKwljb25zdCBjaGFyICpuYW1lOworCWludCB0eXBlOwkvKiBWWF9UWVBFX1hYWCAqLworCisJLyogaGFyZHdhcmUgc3BlY3MgKi8KKwl1bnNpZ25lZCBpbnQgbnVtX2NvZGVjczsKKwl1bnNpZ25lZCBpbnQgbnVtX2luczsKKwl1bnNpZ25lZCBpbnQgbnVtX291dHM7CisJdW5zaWduZWQgaW50IG91dHB1dF9sZXZlbF9tYXg7Cit9OworCisvKiBod2RlcCBpZCBzdHJpbmcgKi8KKyNkZWZpbmUgU05EX1ZYX0hXREVQX0lECQkiVlggTG9hZGVyIgorCisvKiBoYXJkd2FyZSB0eXBlICovCitlbnVtIHsKKwkvKiBWWDIyMiBQQ0kgKi8KKwlWWF9UWVBFX0JPQVJELAkJLyogb2xkIFZYMjIyIFBDSSAqLworCVZYX1RZUEVfVjIsCQkvKiBWWDIyMiBWMiBQQ0kgKi8KKwlWWF9UWVBFX01JQywJCS8qIFZYMjIyIE1pYyBQQ0kgKi8KKwkvKiBWWC1wb2NrZXQgKi8KKwlWWF9UWVBFX1ZYUE9DS0VULAkvKiBWWHBvY2tldCBWMiAqLworCVZYX1RZUEVfVlhQNDQwLAkJLyogVlhwb2NrZXQgNDQwICovCisJVlhfVFlQRV9OVU1TCit9OworCisvKiBjaGlwIHN0YXR1cyAqLworZW51bSB7CisJVlhfU1RBVF9YSUxJTlhfTE9BREVECT0gKDEgPDwgMCksCS8qIGRldmljZXMgYXJlIHJlZ2lzdGVyZWQgKi8KKwlWWF9TVEFUX0RFVklDRV9JTklUCT0gKDEgPDwgMSksCS8qIGRldmljZXMgYXJlIHJlZ2lzdGVyZWQgKi8KKwlWWF9TVEFUX0NISVBfSU5JVAk9ICgxIDw8IDIpLAkvKiBhbGwgb3BlcmF0aW9uYWwgKi8KKwlWWF9TVEFUX0lOX1NVU1BFTkQJPSAoMSA8PCAxMCksCS8qIGluIHN1c3BlbmQgcGhhc2UgKi8KKwlWWF9TVEFUX0lTX1NUQUxFCT0gKDEgPDwgMTUpCS8qIGRldmljZSBpcyBzdGFsZSAqLworfTsKKworLyogbWluL21heCB2YWx1ZXMgZm9yIGFuYWxvZyBvdXRwdXQgZm9yIG9sZCBjb2RlY3MgKi8KKyNkZWZpbmUgVlhfQU5BTE9HX09VVF9MRVZFTF9NQVgJCTB4ZTMKKworc3RydWN0IHNuZF92eF9jb3JlIHsKKwkvKiBBTFNBIHN0dWZmICovCisJc25kX2NhcmRfdCAqY2FyZDsKKwlzbmRfcGNtX3QgKnBjbVtWWF9NQVhfQ09ERUNTXTsKKwlpbnQgdHlwZTsJLyogVlhfVFlQRV9YWFggKi8KKworCWludCBpcnE7CisJLyogcG9ydHMgYXJlIGRlZmluZWQgZXh0ZXJuYWxseSAqLworCisJLyogbG93LWxldmVsIGZ1bmN0aW9ucyAqLworCXN0cnVjdCBzbmRfdnhfaGFyZHdhcmUgKmh3OworCXN0cnVjdCBzbmRfdnhfb3BzICpvcHM7CisKKwlzcGlubG9ja190IGxvY2s7CisJc3BpbmxvY2tfdCBpcnFfbG9jazsKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgdHE7CisKKwl1bnNpZ25lZCBpbnQgY2hpcF9zdGF0dXM7CisJdW5zaWduZWQgaW50IHBjbV9ydW5uaW5nOworCisJc3RydWN0IGRldmljZSAqZGV2OworCXNuZF9od2RlcF90ICpod2RlcDsKKworCXN0cnVjdCB2eF9ybWggaXJxX3JtaDsJLyogUk1IIHVzZWQgaW4gaW50ZXJydXB0cyAqLworCisJdW5zaWduZWQgaW50IGF1ZGlvX2luZm87IC8qIHNlZSBWWF9BVURJT19JTkZPICovCisJdW5zaWduZWQgaW50IGF1ZGlvX2luczsKKwl1bnNpZ25lZCBpbnQgYXVkaW9fb3V0czsKKwlzdHJ1Y3QgdnhfcGlwZSAqKnBsYXliYWNrX3BpcGVzOworCXN0cnVjdCB2eF9waXBlICoqY2FwdHVyZV9waXBlczsKKworCS8qIGNsb2NrIGFuZCBhdWRpbyBzb3VyY2VzICovCisJdW5zaWduZWQgaW50IGF1ZGlvX3NvdXJjZTsJLyogY3VycmVudCBhdWRpbyBpbnB1dCBzb3VyY2UgKi8KKwl1bnNpZ25lZCBpbnQgYXVkaW9fc291cmNlX3RhcmdldDsKKwl1bnNpZ25lZCBpbnQgY2xvY2tfbW9kZTsJLyogY2xvY2sgbW9kZSAoVlhfQ0xPQ0tfTU9ERV9YWFgpICovCisJdW5zaWduZWQgaW50IGNsb2NrX3NvdXJjZTsJLyogY3VycmVudCBjbG9jayBzb3VyY2UgKElOVEVSTkFMX1FVQVJUWiBvciBVRVJfU1lOQykgKi8KKwl1bnNpZ25lZCBpbnQgZnJlcTsJCS8qIGN1cnJlbnQgZnJlcXVlbmN5ICovCisJdW5zaWduZWQgaW50IGZyZXFfZGV0ZWN0ZWQ7CS8qIGRldGVjdGVkIGZyZXF1ZW5jeSBmcm9tIGRpZ2l0YWwgaW4gKi8KKwl1bnNpZ25lZCBpbnQgdWVyX2RldGVjdGVkOwkvKiBWWF9VRVJfTU9ERV9YWFggKi8KKwl1bnNpZ25lZCBpbnQgdWVyX2JpdHM7CS8qIElFQzk1OCBzdGF0dXMgYml0cyAqLworCXN0cnVjdCB2eF9pYmxfaW5mbyBpYmw7CS8qIElCTCBpbmZvcm1hdGlvbiAqLworCisJLyogbWl4ZXIgc2V0dGluZyAqLworCWludCBvdXRwdXRfbGV2ZWxbVlhfTUFYX0NPREVDU11bMl07CS8qIGFuYWxvZyBvdXRwdXQgbGV2ZWwgKi8KKwlpbnQgYXVkaW9fZ2FpblsyXVs0XTsJCQkvKiBkaWdpdGFsIGF1ZGlvIGxldmVsIChwbGF5YmFjay9jYXB0dXJlKSAqLworCXVuc2lnbmVkIGNoYXIgYXVkaW9fYWN0aXZlWzRdOwkJLyogbXV0ZS91bm11dGUgb24gZGlnaXRhbCBwbGF5YmFjayAqLworCWludCBhdWRpb19tb25pdG9yWzRdOwkJCS8qIHBsYXliYWNrIGh3LW1vbml0b3IgbGV2ZWwgKi8KKwl1bnNpZ25lZCBjaGFyIGF1ZGlvX21vbml0b3JfYWN0aXZlWzRdOwkvKiBwbGF5YmFjayBody1tb25pdG9yIG11dGUvdW5tdXRlICovCisKKwlzdHJ1Y3Qgc2VtYXBob3JlIG1peGVyX211dGV4OworCisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmaXJtd2FyZVs0XTsgLyogbG9hZGVkIGZpcm13YXJlIGRhdGEgKi8KK307CisKKworLyoKKyAqIGNvbnN0cnVjdG9yCisgKi8KK3Z4X2NvcmVfdCAqc25kX3Z4X2NyZWF0ZShzbmRfY2FyZF90ICpjYXJkLCBzdHJ1Y3Qgc25kX3Z4X2hhcmR3YXJlICpodywKKwkJCSBzdHJ1Y3Qgc25kX3Z4X29wcyAqb3BzLCBpbnQgZXh0cmFfc2l6ZSk7CitpbnQgc25kX3Z4X3NldHVwX2Zpcm13YXJlKHZ4X2NvcmVfdCAqY2hpcCk7CitpbnQgc25kX3Z4X2xvYWRfYm9vdF9pbWFnZSh2eF9jb3JlX3QgKmNoaXAsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZHNwKTsKK2ludCBzbmRfdnhfZHNwX2Jvb3QodnhfY29yZV90ICpjaGlwLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmRzcCk7CitpbnQgc25kX3Z4X2RzcF9sb2FkKHZ4X2NvcmVfdCAqY2hpcCwgY29uc3Qgc3RydWN0IGZpcm13YXJlICpkc3ApOworCit2b2lkIHNuZF92eF9mcmVlX2Zpcm13YXJlKHZ4X2NvcmVfdCAqY2hpcCk7CisKKy8qCisgKiBpbnRlcnJ1cHQgaGFuZGxlcjsgZXhwb3J0ZWQgZm9yIHBjbWNpYQorICovCitpcnFyZXR1cm5fdCBzbmRfdnhfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2LCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKKy8qCisgKiBsb3dsZXZlbCBmdW5jdGlvbnMKKyAqLworaW5saW5lIHN0YXRpYyBpbnQgdnhfdGVzdF9hbmRfYWNrKHZ4X2NvcmVfdCAqY2hpcCkKK3sKKwlzbmRfYXNzZXJ0KGNoaXAtPm9wcy0+dGVzdF9hbmRfYWNrLCByZXR1cm4gLUVOWElPKTsKKwlyZXR1cm4gY2hpcC0+b3BzLT50ZXN0X2FuZF9hY2soY2hpcCk7Cit9CisKK2lubGluZSBzdGF0aWMgdm9pZCB2eF92YWxpZGF0ZV9pcnEodnhfY29yZV90ICpjaGlwLCBpbnQgZW5hYmxlKQoreworCXNuZF9hc3NlcnQoY2hpcC0+b3BzLT52YWxpZGF0ZV9pcnEsIHJldHVybik7CisJY2hpcC0+b3BzLT52YWxpZGF0ZV9pcnEoY2hpcCwgZW5hYmxlKTsKK30KKworaW5saW5lIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHNuZF92eF9pbmIodnhfY29yZV90ICpjaGlwLCBpbnQgcmVnKQoreworCXNuZF9hc3NlcnQoY2hpcC0+b3BzLT5pbjgsIHJldHVybiAwKTsKKwlyZXR1cm4gY2hpcC0+b3BzLT5pbjgoY2hpcCwgcmVnKTsKK30KKworaW5saW5lIHN0YXRpYyB1bnNpZ25lZCBpbnQgc25kX3Z4X2lubCh2eF9jb3JlX3QgKmNoaXAsIGludCByZWcpCit7CisJc25kX2Fzc2VydChjaGlwLT5vcHMtPmluMzIsIHJldHVybiAwKTsKKwlyZXR1cm4gY2hpcC0+b3BzLT5pbjMyKGNoaXAsIHJlZyk7Cit9CisKK2lubGluZSBzdGF0aWMgdm9pZCBzbmRfdnhfb3V0Yih2eF9jb3JlX3QgKmNoaXAsIGludCByZWcsIHVuc2lnbmVkIGNoYXIgdmFsKQoreworCXNuZF9hc3NlcnQoY2hpcC0+b3BzLT5vdXQ4LCByZXR1cm4pOworCWNoaXAtPm9wcy0+b3V0OChjaGlwLCByZWcsIHZhbCk7Cit9CisKK2lubGluZSBzdGF0aWMgdm9pZCBzbmRfdnhfb3V0bCh2eF9jb3JlX3QgKmNoaXAsIGludCByZWcsIHVuc2lnbmVkIGludCB2YWwpCit7CisJc25kX2Fzc2VydChjaGlwLT5vcHMtPm91dDMyLCByZXR1cm4pOworCWNoaXAtPm9wcy0+b3V0MzIoY2hpcCwgcmVnLCB2YWwpOworfQorCisjZGVmaW5lIHZ4X2luYihjaGlwLHJlZykJc25kX3Z4X2luYihjaGlwLCBWWF8jI3JlZykKKyNkZWZpbmUgdnhfb3V0YihjaGlwLHJlZyx2YWwpCXNuZF92eF9vdXRiKGNoaXAsIFZYXyMjcmVnLHZhbCkKKyNkZWZpbmUgdnhfaW5sKGNoaXAscmVnKQlzbmRfdnhfaW5sKGNoaXAsIFZYXyMjcmVnKQorI2RlZmluZSB2eF9vdXRsKGNoaXAscmVnLHZhbCkJc25kX3Z4X291dGwoY2hpcCwgVlhfIyNyZWcsdmFsKQorCit2b2lkIHNuZF92eF9kZWxheSh2eF9jb3JlX3QgKmNoaXAsIGludCBtc2VjKTsKKworc3RhdGljIGlubGluZSB2b2lkIHZ4X3Jlc2V0X2RzcCh2eF9jb3JlX3QgKmNoaXApCit7CisJc25kX2Fzc2VydChjaGlwLT5vcHMtPnJlc2V0X2RzcCwgcmV0dXJuKTsKKwljaGlwLT5vcHMtPnJlc2V0X2RzcChjaGlwKTsKK30KKworaW50IHZ4X3NlbmRfbXNnKHZ4X2NvcmVfdCAqY2hpcCwgc3RydWN0IHZ4X3JtaCAqcm1oKTsKK2ludCB2eF9zZW5kX21zZ19ub2xvY2sodnhfY29yZV90ICpjaGlwLCBzdHJ1Y3Qgdnhfcm1oICpybWgpOworaW50IHZ4X3NlbmRfcmloKHZ4X2NvcmVfdCAqY2hpcCwgaW50IGNtZCk7CitpbnQgdnhfc2VuZF9yaWhfbm9sb2NrKHZ4X2NvcmVfdCAqY2hpcCwgaW50IGNtZCk7CisKK3ZvaWQgdnhfcmVzZXRfY29kZWModnhfY29yZV90ICpjaGlwLCBpbnQgY29sZF9yZXNldCk7CisKKy8qCisgKiBjaGVjayB0aGUgYml0IG9uIHRoZSBzcGVjaWZpZWQgcmVnaXN0ZXIKKyAqIHJldHVybnMgemVybyBpZiBhIGJpdCBtYXRjaGVzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuCisgKiBleHBvcnRlZCBmb3Igdnhwb2NrZXQgZHJpdmVyCisgKi8KK2ludCBzbmRfdnhfY2hlY2tfcmVnX2JpdCh2eF9jb3JlX3QgKmNoaXAsIGludCByZWcsIGludCBtYXNrLCBpbnQgYml0LCBpbnQgdGltZSk7CisjZGVmaW5lIHZ4X2NoZWNrX2lzcihjaGlwLG1hc2ssYml0LHRpbWUpIHNuZF92eF9jaGVja19yZWdfYml0KGNoaXAsIFZYX0lTUiwgbWFzaywgYml0LCB0aW1lKQorI2RlZmluZSB2eF93YWl0X2lzcl9iaXQoY2hpcCxiaXQpIHZ4X2NoZWNrX2lzcihjaGlwLCBiaXQsIGJpdCwgMjAwKQorI2RlZmluZSB2eF93YWl0X2Zvcl9yeF9mdWxsKGNoaXApIHZ4X3dhaXRfaXNyX2JpdChjaGlwLCBJU1JfUlhfRlVMTCkKKworCisvKgorICogcHNldWRvLURNQSB0cmFuc2ZlcgorICovCitpbmxpbmUgc3RhdGljIHZvaWQgdnhfcHNldWRvX2RtYV93cml0ZSh2eF9jb3JlX3QgKmNoaXAsIHNuZF9wY21fcnVudGltZV90ICpydW50aW1lLAorCQkJCSAgICAgICB2eF9waXBlX3QgKnBpcGUsIGludCBjb3VudCkKK3sKKwlzbmRfYXNzZXJ0KGNoaXAtPm9wcy0+ZG1hX3dyaXRlLCByZXR1cm4pOworCWNoaXAtPm9wcy0+ZG1hX3dyaXRlKGNoaXAsIHJ1bnRpbWUsIHBpcGUsIGNvdW50KTsKK30KKworaW5saW5lIHN0YXRpYyB2b2lkIHZ4X3BzZXVkb19kbWFfcmVhZCh2eF9jb3JlX3QgKmNoaXAsIHNuZF9wY21fcnVudGltZV90ICpydW50aW1lLAorCQkJCSAgICAgIHZ4X3BpcGVfdCAqcGlwZSwgaW50IGNvdW50KQoreworCXNuZF9hc3NlcnQoY2hpcC0+b3BzLT5kbWFfcmVhZCwgcmV0dXJuKTsKKwljaGlwLT5vcHMtPmRtYV9yZWFkKGNoaXAsIHJ1bnRpbWUsIHBpcGUsIGNvdW50KTsKK30KKworCisKKy8qIGVycm9yIHdpdGggaGFyZHdhcmUgY29kZSwKKyAqIHRoZSByZXR1cm4gdmFsdWUgaXMgLShWWF9FUlJfTUFTSyB8IGFjdHVhbC1ody1lcnJvci1jb2RlKQorICovCisjZGVmaW5lIFZYX0VSUl9NQVNLCTB4MTAwMDAwMAorI2RlZmluZSB2eF9nZXRfZXJyb3IoZXJyKQkoLShlcnIpICYgflZYX0VSUl9NQVNLKQorCisKKy8qCisgKiBwY20gc3R1ZmYKKyAqLworaW50IHNuZF92eF9wY21fbmV3KHZ4X2NvcmVfdCAqY2hpcCk7Cit2b2lkIHZ4X3BjbV91cGRhdGVfaW50cih2eF9jb3JlX3QgKmNoaXAsIHVuc2lnbmVkIGludCBldmVudHMpOworCisvKgorICogbWl4ZXIgc3R1ZmYKKyAqLworaW50IHNuZF92eF9taXhlcl9uZXcodnhfY29yZV90ICpjaGlwKTsKK3ZvaWQgdnhfdG9nZ2xlX2RhY19tdXRlKHZ4X2NvcmVfdCAqY2hpcCwgaW50IG11dGUpOworaW50IHZ4X3N5bmNfYXVkaW9fc291cmNlKHZ4X2NvcmVfdCAqY2hpcCk7CitpbnQgdnhfc2V0X21vbml0b3JfbGV2ZWwodnhfY29yZV90ICpjaGlwLCBpbnQgYXVkaW8sIGludCBsZXZlbCwgaW50IGFjdGl2ZSk7CisKKy8qCisgKiBJRUM5NTggJiBjbG9jayBzdHVmZgorICovCit2b2lkIHZ4X3NldF9pZWM5NThfc3RhdHVzKHZ4X2NvcmVfdCAqY2hpcCwgdW5zaWduZWQgaW50IGJpdHMpOworaW50IHZ4X3NldF9jbG9jayh2eF9jb3JlX3QgKmNoaXAsIHVuc2lnbmVkIGludCBmcmVxKTsKK3ZvaWQgdnhfc2V0X2ludGVybmFsX2Nsb2NrKHZ4X2NvcmVfdCAqY2hpcCwgdW5zaWduZWQgaW50IGZyZXEpOworaW50IHZ4X2NoYW5nZV9mcmVxdWVuY3kodnhfY29yZV90ICpjaGlwKTsKKworCisvKgorICogaGFyZHdhcmUgY29uc3RhbnRzCisgKi8KKworI2RlZmluZSB2eF9oYXNfbmV3X2RzcChjaGlwKQkoKGNoaXApLT50eXBlICE9IFZYX1RZUEVfQk9BUkQpCisjZGVmaW5lIHZ4X2lzX3BjbWNpYShjaGlwKQkoKGNoaXApLT50eXBlID49IFZYX1RZUEVfVlhQT0NLRVQpCisKKy8qIGF1ZGlvIGlucHV0IHNvdXJjZSAqLworZW51bSB7CisJVlhfQVVESU9fU1JDX0RJR0lUQUwsCisJVlhfQVVESU9fU1JDX0xJTkUsCisJVlhfQVVESU9fU1JDX01JQworfTsKKworLyogY2xvY2sgc291cmNlICovCitlbnVtIHsKKwlJTlRFUk5BTF9RVUFSVFosCisJVUVSX1NZTkMKK307CisKKy8qIGNsb2NrIG1vZGUgKi8KK2VudW0geworCVZYX0NMT0NLX01PREVfQVVUTywJLyogZGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50IGF1ZGlvIHNvdXJjZSAqLworCVZYX0NMT0NLX01PREVfSU5URVJOQUwsCS8qIGZpeGVkIHRvIGludGVybmFsIHF1YXJ0eiAqLworCVZYX0NMT0NLX01PREVfRVhURVJOQUwJLyogZml4ZWQgdG8gVUVSIHN5bmMgKi8KK307CisKKy8qIFNQRElGL1VFUiB0eXBlICovCitlbnVtIHsKKwlWWF9VRVJfTU9ERV9DT05TVU1FUiwKKwlWWF9VRVJfTU9ERV9QUk9GRVNTSU9OQUwsCisJVlhfVUVSX01PREVfTk9UX1BSRVNFTlQsCit9OworCisvKiByZWdpc3RlciBpbmRpY2VzICovCitlbnVtIHsKKwlWWF9JQ1IsCisJVlhfQ1ZSLAorCVZYX0lTUiwKKwlWWF9JVlIsCisJVlhfUlhILAorCVZYX1RYSCA9IFZYX1JYSCwKKwlWWF9SWE0sCisJVlhfVFhNID0gVlhfUlhNLAorCVZYX1JYTCwKKwlWWF9UWEwgPSBWWF9SWEwsCisJVlhfRE1BLAorCVZYX0NEU1AsCisJVlhfUkZSRVEsCisJVlhfUlVFUl9WMiwKKwlWWF9HQUlOLAorCVZYX0RBVEEgPSBWWF9HQUlOLAorCVZYX01FTUlSUSwKKwlWWF9BQ1EsCisJVlhfQklUMCwKKwlWWF9CSVQxLAorCVZYX01JQzAsCisJVlhfTUlDMSwKKwlWWF9NSUMyLAorCVZYX01JQzMsCisJVlhfUExYMCwKKwlWWF9QTFgxLAorCVZYX1BMWDIsCisKKwlWWF9MT0ZSRVEsICAvLyBWMjogQUNRLCBWUDogUkZSRVEKKwlWWF9ISUZSRVEsICAvLyBWMjogQklUMCwgVlA6IFJVRVJfVjIKKwlWWF9DU1VFUiwgICAvLyBWMjogQklUMSwgVlA6IEJJVDAKKwlWWF9SVUVSLCAgICAvLyBWMjogUlVFUl9WMiwgVlA6IEJJVDEKKworCVZYX1JFR19NQVgsCisKKwkvKiBhbGlhc2VzIGZvciBWWCBib2FyZCAqLworCVZYX1JFU0VUX0RNQSA9IFZYX0lTUiwKKwlWWF9DRkcgPSBWWF9SRlJFUSwKKwlWWF9TVEFUVVMgPSBWWF9NRU1JUlEsCisJVlhfU0VMTUlDID0gVlhfTUlDMCwKKwlWWF9DT01QT1QgPSBWWF9NSUMxLAorCVZYX1NDT01QUiA9IFZYX01JQzIsCisJVlhfR0xJTUlUID0gVlhfTUlDMywKKwlWWF9JTlRDU1IgPSBWWF9QTFgwLAorCVZYX0NOVFJMID0gVlhfUExYMSwKKwlWWF9HUElPQyA9IFZYX1BMWDIsCisKKwkvKiBhbGlhc2VzIGZvciBWWFBPQ0tFVCBib2FyZCAqLworCVZYX01JQ1JPID0gVlhfTUVNSVJRLAorCVZYX0NPREVDMiA9IFZYX01FTUlSUSwKKwlWWF9ESUFMT0cgPSBWWF9BQ1EsCisKK307CisKKy8qIFJNSCBzdGF0dXMgdHlwZSAqLworZW51bSB7CisJUk1IX1NTSVpFX0ZJWEVEID0gMCwJLyogc3RhdHVzIHNpemUgZ2l2ZW4gYnkgdGhlIGRyaXZlciAoaW4gTGdTdGF0KSAqLworCVJNSF9TU0laRV9BUkcgPSAxLAkvKiBzdGF0dXMgc2l6ZSBnaXZlbiBpbiB0aGUgTFNCIGJ5dGUgKi8KKwlSTUhfU1NJWkVfTUFTSyA9IDIsCS8qIHN0YXR1cyBzaXplIGdpdmVuIGluIGJpdG1hc2sgKi8KK307CisKKworLyogYml0cyBmb3IgSUNSIHJlZ2lzdGVyICovCisjZGVmaW5lIElDUl9IRjEJCTB4MTAKKyNkZWZpbmUgSUNSX0hGMAkJMHgwOAorI2RlZmluZSBJQ1JfVFJFUQkweDAyCS8qIEludGVycnVwdCBtb2RlICsgSFJFUSBzZXQgb24gZm9yIHRyYW5zZmVyICgtPkRTUCkgcmVxdWVzdCAqLworI2RlZmluZSBJQ1JfUlJFUQkweDAxCS8qIEludGVycnVwdCBtb2RlICsgUlJFUSBzZXQgb24gZm9yIHRyYW5zZmVyICgtPlBDKSByZXF1ZXN0ICovCisKKy8qIGJpdHMgZm9yIENWUiByZWdpc3RlciAqLworI2RlZmluZSBDVlJfSEMJCTB4ODAKKworLyogYml0cyBmb3IgSVNSIHJlZ2lzdGVyICovCisjZGVmaW5lIElTUl9IRjMJCTB4MTAKKyNkZWZpbmUgSVNSX0hGMgkJMHgwOAorI2RlZmluZSBJU1JfQ0hLCQkweDEwCisjZGVmaW5lIElTUl9FUlIJCTB4MDgKKyNkZWZpbmUgSVNSX1RYX1JFQURZCTB4MDQKKyNkZWZpbmUgSVNSX1RYX0VNUFRZCTB4MDIKKyNkZWZpbmUgSVNSX1JYX0ZVTEwJMHgwMQorCisvKiBDb25zdGFudHMgdXNlZCB0byBhY2Nlc3MgdGhlIERBVEEgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgVlhfREFUQV9DT0RFQ19NQVNLCTB4ODAKKyNkZWZpbmUgVlhfREFUQV9YSUNPUl9NQVNLCTB4ODAKKworLyogQ29uc3RhbnRzIHVzZWQgdG8gYWNjZXNzIHRoZSBDU1VFUiByZWdpc3RlciAoYm90aCBmb3IgVlgyIGFuZCBWWFApICovCisjZGVmaW5lIFZYX1NVRVJfRlJFUV9NQVNLCQkweDBjCisjZGVmaW5lIFZYX1NVRVJfRlJFUV8zMktIel9NQVNLCQkweDBjCisjZGVmaW5lIFZYX1NVRVJfRlJFUV80NEtIel9NQVNLCQkweDAwCisjZGVmaW5lIFZYX1NVRVJfRlJFUV80OEtIel9NQVNLCQkweDA0CisjZGVmaW5lIFZYX1NVRVJfREFUQV9QUkVTRU5UX01BU0sJMHgwMgorI2RlZmluZSBWWF9TVUVSX0NMT0NLX1BSRVNFTlRfTUFTSwkweDAxCisKKyNkZWZpbmUgVlhfQ1VFUl9ISF9CSVRDX1NFTF9NQVNLCTB4MDgKKyNkZWZpbmUgVlhfQ1VFUl9NSF9CSVRDX1NFTF9NQVNLCTB4MDQKKyNkZWZpbmUgVlhfQ1VFUl9NTF9CSVRDX1NFTF9NQVNLCTB4MDIKKyNkZWZpbmUgVlhfQ1VFUl9MTF9CSVRDX1NFTF9NQVNLCTB4MDEKKworI2RlZmluZSBYWF9VRVJfQ0JJVFNfT0ZGU0VUX01BU0sJMHgxZgorCisKKy8qIGJpdHMgZm9yIGF1ZGlvX2luZm8gKi8KKyNkZWZpbmUgVlhfQVVESU9fSU5GT19SRUFMX1RJTUUJKDE8PDApCS8qIHJlYWwtdGltZSBwcm9jZXNzaW5nIGF2YWlsYWJsZSAqLworI2RlZmluZSBWWF9BVURJT19JTkZPX09GRkxJTkUJKDE8PDEpCS8qIG9mZmxpbmUgcHJvY2Vzc2luZyBhdmFpbGFibGUgKi8KKyNkZWZpbmUgVlhfQVVESU9fSU5GT19NUEVHMQkoMTw8NSkKKyNkZWZpbmUgVlhfQVVESU9fSU5GT19NUEVHMgkoMTw8NikKKyNkZWZpbmUgVlhfQVVESU9fSU5GT19MSU5FQVJfOAkoMTw8NykKKyNkZWZpbmUgVlhfQVVESU9fSU5GT19MSU5FQVJfMTYJKDE8PDgpCisjZGVmaW5lIFZYX0FVRElPX0lORk9fTElORUFSXzI0CSgxPDw5KQorCisvKiBEU1AgSW50ZXJydXB0IFJlcXVlc3QgdmFsdWVzICovCisjZGVmaW5lIFZYUF9JUlFfT0ZGU0VUCQkweDQwIC8qIGFkZCAweDQwIG9mZnNldCBmb3Igdnhwb2NrZXQgYW5kIHZ4MjIyL3YyICovCisvKiBjYWxsIHdpdGggdnhfc2VuZF9pcnFfZHNwKCkgKi8KKyNkZWZpbmUgSVJRX01FU1NfV1JJVEVfRU5EICAgICAgICAgIDB4MzAKKyNkZWZpbmUgSVJRX01FU1NfV1JJVEVfTkVYVCAgICAgICAgIDB4MzIKKyNkZWZpbmUgSVJRX01FU1NfUkVBRF9ORVhUICAgICAgICAgIDB4MzQKKyNkZWZpbmUgSVJRX01FU1NfUkVBRF9FTkQgICAgICAgICAgIDB4MzYKKyNkZWZpbmUgSVJRX01FU1NBR0UgICAgICAgICAgICAgICAgIDB4MzgKKyNkZWZpbmUgSVJRX1JFU0VUX0NISyAgICAgICAgICAgICAgIDB4M0EKKyNkZWZpbmUgSVJRX0NPTk5FQ1RfU1RSRUFNX05FWFQgICAgIDB4MjYKKyNkZWZpbmUgSVJRX0NPTk5FQ1RfU1RSRUFNX0VORCAgICAgIDB4MjgKKyNkZWZpbmUgSVJRX1BBVVNFX1NUQVJUX0NPTk5FQ1QgICAgIDB4MkEKKyNkZWZpbmUgSVJRX0VORF9DT05ORUNUSU9OICAgICAgICAgIDB4MkMKKworLyogSXMgdGhlcmUgYXN5bmMuIGV2ZW50cyBwZW5kaW5nICggSVQgU291cmNlIFRlc3QgKSAqLworI2RlZmluZSBBU1lOQ19FVkVOVFNfUEVORElORyAgICAgICAgICAgIDB4MDA4MDAwCisjZGVmaW5lIEhCVUZGRVJfRVZFTlRTX1BFTkRJTkcgICAgICAgICAgMHgwMDQwMDAgICAvLyBOb3QgYWx3YXlzIGFjY3VyYXRlCisjZGVmaW5lIE5PVElGX0VWRU5UU19QRU5ESU5HICAgICAgICAgICAgMHgwMDIwMDAKKyNkZWZpbmUgVElNRV9DT0RFX0VWRU5UX1BFTkRJTkcgICAgICAgICAweDAwMTAwMAorI2RlZmluZSBGUkVRVUVOQ1lfQ0hBTkdFX0VWRU5UX1BFTkRJTkcgIDB4MDAwODAwCisjZGVmaW5lIEVORF9PRl9CVUZGRVJfRVZFTlRTX1BFTkRJTkcgICAgMHgwMDA0MDAKKyNkZWZpbmUgRkFUQUxfRFNQX0VSUk9SICAgICAgICAgICAgICAgICAweGZmMDAwMAorCisvKiBTdHJlYW0gRm9ybWF0IEhlYWRlciBEZWZpbmVzICovIAorI2RlZmluZSBIRUFERVJfRk1UX0JBU0UJCQkweEZFRDAwMDAwCisjZGVmaW5lIEhFQURFUl9GTVRfTU9OTwkJCTB4MDAwMDAwQzAKKyNkZWZpbmUgSEVBREVSX0ZNVF9JTlRFTAkJMHgwMDAwODAwMAorI2RlZmluZSBIRUFERVJfRk1UXzE2QklUUwkJMHgwMDAwMjAwMAorI2RlZmluZSBIRUFERVJfRk1UXzI0QklUUwkJMHgwMDAwNDAwMAorI2RlZmluZSBIRUFERVJfRk1UX1VQVE8xMQkJMHgwMDAwMDIwMAkvKiBmcmVxdWVuY3kgaXMgbGVzcyBvciBlcXUuIHRvIDExay4qLworI2RlZmluZSBIRUFERVJfRk1UX1VQVE8zMgkJMHgwMDAwMDEwMAkvKiBmcmVxdWVuY3kgaXMgb3ZlciAxMWsgYW5kIGxlc3MgdGhlbiAzMmsuKi8KKworLyogQ29uc3RhbnRzIHVzZWQgdG8gYWNjZXNzIHRoZSBDb2RlYyAqLworI2RlZmluZSBYWF9DT0RFQ19TRUxFQ1RPUiAgICAgICAgICAgICAgIDB4MjAKKy8qIGNvZGVjIGNvbW1hbmRzICovCisjZGVmaW5lIFhYX0NPREVDX0FEQ19DT05UUk9MX1JFR0lTVEVSICAgMHgwMQorI2RlZmluZSBYWF9DT0RFQ19EQUNfQ09OVFJPTF9SRUdJU1RFUiAgIDB4MDIKKyNkZWZpbmUgWFhfQ09ERUNfTEVWRUxfTEVGVF9SRUdJU1RFUiAgICAweDAzCisjZGVmaW5lIFhYX0NPREVDX0xFVkVMX1JJR0hUX1JFR0lTVEVSICAgMHgwNAorI2RlZmluZSBYWF9DT0RFQ19QT1JUX01PREVfUkVHSVNURVIgICAgIDB4MDUKKyNkZWZpbmUgWFhfQ09ERUNfU1RBVFVTX1JFUE9SVF9SRUdJU1RFUiAweDA2CisjZGVmaW5lIFhYX0NPREVDX0NMT0NLX0NPTlRST0xfUkVHSVNURVIgMHgwNworCisvKgorICogQXVkaW8tbGV2ZWwgY29udHJvbCB2YWx1ZXMKKyAqLworI2RlZmluZSBDVkFMX00xMTBEQgkJMHgwMDAJLyogLTExMGRCICovCisjZGVmaW5lIENWQUxfTTk5REIJCTB4MDJDCisjZGVmaW5lIENWQUxfTTIxREIJCTB4MTYzCisjZGVmaW5lIENWQUxfTTE4REIJCTB4MTZGCisjZGVmaW5lIENWQUxfTTEwREIJCTB4MThGCisjZGVmaW5lIENWQUxfMERCCQkweDFCNworI2RlZmluZSBDVkFMXzE4REIJCTB4MUZGCS8qICsxOGRCICovCisjZGVmaW5lIENWQUxfTUFYCQkweDFGRgorCisjZGVmaW5lIEFVRElPX0lPX0hBU19NVVRFX0xFVkVMCQkJMHg0MDAwMDAKKyNkZWZpbmUgQVVESU9fSU9fSEFTX01VVEVfTU9OSVRPUklOR18xCQkweDIwMDAwMAorI2RlZmluZSBBVURJT19JT19IQVNfTVVURV9NT05JVE9SSU5HXzIJCTB4MTAwMDAwCisjZGVmaW5lIFZBTElEX0FVRElPX0lPX0RJR0lUQUxfTEVWRUwJCTB4MDEKKyNkZWZpbmUgVkFMSURfQVVESU9fSU9fTU9OSVRPUklOR19MRVZFTAkJMHgwMgorI2RlZmluZSBWQUxJRF9BVURJT19JT19NVVRFX0xFVkVMCQkweDA0CisjZGVmaW5lIFZBTElEX0FVRElPX0lPX01VVEVfTU9OSVRPUklOR18xCTB4MDgKKyNkZWZpbmUgVkFMSURfQVVESU9fSU9fTVVURV9NT05JVE9SSU5HXzIJMHgxMAorCisKKyNlbmRpZiAvKiBfX1NPVU5EX1ZYX0NPTU1PTl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3dhdmVmcm9udC5oIGIvaW5jbHVkZS9zb3VuZC93YXZlZnJvbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTU3MmFlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9zb3VuZC93YXZlZnJvbnQuaApAQCAtMCwwICsxLDY5NSBAQAorI2lmbmRlZiBfX1NPVU5EX1dBVkVGUk9OVF9IX18KKyNkZWZpbmUgX19TT1VORF9XQVZFRlJPTlRfSF9fCisKKy8qCisgKiAgRHJpdmVyIGZvciBUdXJ0bGUgQmVhY2ggV2F2ZWZyb250IGNhcmRzIChNYXVpLFRyb3BleixUcm9wZXorKQorICoKKyAqICBDb3B5cmlnaHQgKGMpIGJ5IFBhdWwgQmFydG9uLURhdmlzIDxwYmRAb3AubmV0PgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaWYgKCFkZWZpbmVkKF9fR05VQ19fKSAmJiAhZGVmaW5lZChfX0dOVUdfXykpCisKKyAgICAgWW91IHdpbGwgbm90IGJlIGFibGUgdG8gY29tcGlsZSB0aGlzIGZpbGUgY29ycmVjdGx5IHdpdGhvdXQgZ2NjLCBiZWNhdXNlCisgICAgIGl0IGlzIG5lY2Vzc2FyeSB0byBwYWNrIHRoZSAid2F2ZWZyb250X2FsaWFzIiBzdHJ1Y3R1cmUgdG8gYSBzaXplCisgICAgIG9mIDIyIGJ5dGVzLCBjb3JyZXNwb25kaW5nIHRvIDE2LWJpdCBhbGlnbm1lbnQgKGFzIHdvdWxkIGhhdmUgYmVlbgorICAgICB0aGUgY2FzZSBvbiB0aGUgb3JpZ2luYWwgcGxhdGZvcm0sIE1TLURPUykuIElmIHRoaXMgaXMgbm90IGRvbmUsCisgICAgIHRoZW4gV2F2ZVBhdGNoLWZvcm1hdCBmaWxlcyBjYW5ub3QgYmUgcmVhZC93cml0dGVuIGNvcnJlY3RseS4KKyAgICAgVGhlIG1ldGhvZCB1c2VkIHRvIGRvIHRoaXMgaGVyZSAoIl9fYXR0cmlidXRlX18oKHBhY2tlZCkiKSBpcworICAgICBjb21wbGV0ZWx5IGNvbXBpbGVyIGRlcGVuZGVudC4KKyAgICAgCisgICAgIEFsbCBvdGhlciB3YXZlZnJvbnRfKiB0eXBlcyBlbmQgdXAgYWxpZ25lZCB0byAzMiBiaXQgdmFsdWVzIGFuZAorICAgICBzdGlsbCBoYXZlIHRoZSBzYW1lIChjb3JyZWN0KSBzaXplLgorCisjZWxzZQorCisgICAgIC8qIEhvd2V2ZXIsIG5vdGUgdGhhdCBhcyBvZiBHKysgMi43LjMuMiwgZysrIHdhcyB1bmFibGUgdG8KKwljb3JyZWN0bHkgcGFyc2UgKnR5cGUqIF9fYXR0cmlidXRlX18gdGFncy4gSXQgd2lsbCBkbyB0aGUKKwlyaWdodCB0aGluZyBpZiB3ZSB1c2UgdGhlICJwYWNrZWQiIGF0dHJpYnV0ZSBvbiBlYWNoIHN0cnVjdAorCW1lbWJlciwgd2hpY2ggaGFzIHRoZSBzYW1lIHNlbWFudGljcyBhbnl3YXkuIAorICAgICAqLworCisjZW5kaWYgLyogX19HTlVDX18gKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqIFdBUk5JTkcgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgUExFQVNFIERPIE5PVCBNT0RJRlkgVEhJUyBGSUxFIElOIEFOWSBXQVkgVEhBVCBBRkZFQ1RTIElUUyBBQklMSVRZIFRPIAorICBCRSBVU0VEIFdJVEggRUlUSEVSIEMgKk9SKiBDKysuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBOVU1fTUlESUtFWVMgCisjZGVmaW5lIE5VTV9NSURJS0VZUyAxMjgKKyNlbmRpZiAgLyogTlVNX01JRElLRVlTICovCisKKyNpZm5kZWYgTlVNX01JRElDSEFOTkVMUworI2RlZmluZSBOVU1fTUlESUNIQU5ORUxTIDE2CisjZW5kaWYgIC8qIE5VTV9NSURJQ0hBTk5FTFMgKi8KKworLyogVGhlc2UgYXJlIHZlcnkgdXNlZnVsL2ltcG9ydGFudC4gdGhlIG9yaWdpbmFsIHdhdmVmcm9udCBpbnRlcmZhY2UKKyAgIHdhcyBkZXZlbG9wZWQgb24gYSAxNiBiaXQgc3lzdGVtLCB3aGVyZSBzaXplb2YoaW50KSA9IDIKKyAgIGJ5dGVzLiBEZWZpbmluZyB0aGluZ3MgbGlrZSB0aGlzIG1ha2VzIHRoZSBjb2RlIG11Y2ggbW9yZSBwb3J0YWJsZSwgYW5kCisgICBlYXNpZXIgdG8gdW5kZXJzdGFuZCB3aXRob3V0IGhhdmluZyB0byB0b2dnbGUgYmFjayBhbmQgZm9ydGgKKyAgIGJldHdlZW4gYSAxNi1iaXQgdmlldyBvZiB0aGUgd29ybGQgYW5kIGEgMzItYml0IG9uZS4gCisgKi8gICAKKworI2lmbmRlZiBfX0tFUk5FTF9fCisvKiBrZWVwIHRoZW0gZm9yIGNvbXBhdGliaWxpdHkgKi8KK3R5cGVkZWYgc2hvcnQgczE2OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1MTY7Cit0eXBlZGVmIGludCBzMzI7Cit0eXBlZGVmIHVuc2lnbmVkIGludCB1MzI7Cit0eXBlZGVmIGNoYXIgczg7Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdTg7Cit0eXBlZGVmIHMxNiBJTlQxNjsKK3R5cGVkZWYgdTE2IFVJTlQxNjsKK3R5cGVkZWYgczMyIElOVDMyOwordHlwZWRlZiB1MzIgVUlOVDMyOwordHlwZWRlZiBzOCBDSEFSODsKK3R5cGVkZWYgdTggVUNIQVI4OworI2VuZGlmCisKKy8qIFBzZXVkby1jb21tYW5kcyBub3QgcGFydCBvZiB0aGUgV2F2ZUZyb250IGNvbW1hbmQgc2V0LgorICAgVGhlc2UgYXJlIHVzZWQgZm9yIHZhcmlvdXMgZHJpdmVyIGNvbnRyb2xzIGFuZCBkaXJlY3QKKyAgIGhhcmR3YXJlIGNvbnRyb2wuCisgKi8KKworI2RlZmluZSBXRkNfREVCVUdfRFJJVkVSICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgV0ZDX0ZYX0lPQ1RMICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFdGQ19QQVRDSF9TVEFUVVMgICAgICAgICAgICAgICAgMgorI2RlZmluZSBXRkNfUFJPR1JBTV9TVEFUVVMgICAgICAgICAgICAgIDMKKyNkZWZpbmUgV0ZDX1NBTVBMRV9TVEFUVVMgICAgICAgICAgICAgICA0CisjZGVmaW5lIFdGQ19ESVNBQkxFX0lOVEVSUlVQVFMgICAgICAgICAgNQorI2RlZmluZSBXRkNfRU5BQkxFX0lOVEVSUlVQVFMgICAgICAgICAgIDYKKyNkZWZpbmUgV0ZDX0lOVEVSUlVQVF9TVEFUVVMgICAgICAgICAgICA3CisjZGVmaW5lIFdGQ19ST01TQU1QTEVTX1JET05MWSAgICAgICAgICAgOAorI2RlZmluZSBXRkNfSURFTlRJRllfU0xPVF9UWVBFICAgICAgICAgIDkKKworLyogV2F2ZWZyb250IHN5bnRoIGNvbW1hbmRzCisgKi8KKworI2RlZmluZSBXRkNfRE9XTkxPQURfU0FNUExFCQkweDgwCisjZGVmaW5lIFdGQ19ET1dOTE9BRF9CTE9DSwkJMHg4MQorI2RlZmluZSBXRkNfRE9XTkxPQURfTVVMVElTQU1QTEUJMHg4MgorI2RlZmluZSBXRkNfRE9XTkxPQURfU0FNUExFX0FMSUFTCTB4ODMKKyNkZWZpbmUgV0ZDX0RFTEVURV9TQU1QTEUJCTB4ODQKKyNkZWZpbmUgV0ZDX1JFUE9SVF9GUkVFX01FTU9SWQkJMHg4NQorI2RlZmluZSBXRkNfRE9XTkxPQURfUEFUQ0gJCTB4ODYKKyNkZWZpbmUgV0ZDX0RPV05MT0FEX1BST0dSQU0JCTB4ODcKKyNkZWZpbmUgV0ZDX1NFVF9TWU5USFZPTAkJMHg4OQorI2RlZmluZSBXRkNfU0VUX05WT0lDRVMJCQkweDhCCisjZGVmaW5lIFdGQ19ET1dOTE9BRF9EUlVNCQkweDkwCisjZGVmaW5lIFdGQ19HRVRfU1lOVEhWT0wJCTB4OTIKKyNkZWZpbmUgV0ZDX0dFVF9OVk9JQ0VTCQkJMHg5NAorI2RlZmluZSBXRkNfRElTQUJMRV9DSEFOTkVMCQkweDlBCisjZGVmaW5lIFdGQ19FTkFCTEVfQ0hBTk5FTAkJMHg5QgorI2RlZmluZSBXRkNfTUlTWU5USF9PRkYJCQkweDlECisjZGVmaW5lIFdGQ19NSVNZTlRIX09OCQkJMHg5RQorI2RlZmluZSBXRkNfRklSTVdBUkVfVkVSU0lPTgkJMHg5RgorI2RlZmluZSBXRkNfR0VUX05TQU1QTEVTCQkweEEwCisjZGVmaW5lIFdGQ19ESVNBQkxFX0RSVU1fUFJPR1JBTQkweEEyCisjZGVmaW5lIFdGQ19VUExPQURfUEFUQ0gJCTB4QTMKKyNkZWZpbmUgV0ZDX1VQTE9BRF9QUk9HUkFNCQkweEE0CisjZGVmaW5lIFdGQ19TRVRfVFVOSU5HCQkJMHhBNgorI2RlZmluZSBXRkNfR0VUX1RVTklORwkJCTB4QTcKKyNkZWZpbmUgV0ZDX1ZNSURJX09OCQkJMHhBOAorI2RlZmluZSBXRkNfVk1JRElfT0ZGCQkJMHhBOQorI2RlZmluZSBXRkNfTUlESV9TVEFUVVMJCQkweEFBCisjZGVmaW5lIFdGQ19HRVRfQ0hBTk5FTF9TVEFUVVMJCTB4QUIKKyNkZWZpbmUgV0ZDX0RPV05MT0FEX1NBTVBMRV9IRUFERVIJMHhBQworI2RlZmluZSBXRkNfVVBMT0FEX1NBTVBMRV9IRUFERVIJMHhBRAorI2RlZmluZSBXRkNfVVBMT0FEX01VTFRJU0FNUExFCQkweEFFCisjZGVmaW5lIFdGQ19VUExPQURfU0FNUExFX0FMSUFTCQkweEFGCisjZGVmaW5lIFdGQ19JREVOVElGWV9TQU1QTEVfVFlQRQkweEIwCisjZGVmaW5lIFdGQ19ET1dOTE9BRF9FRFJVTV9QUk9HUkFNCTB4QjEKKyNkZWZpbmUgV0ZDX1VQTE9BRF9FRFJVTV9QUk9HUkFNCTB4QjIKKyNkZWZpbmUgV0ZDX1NFVF9FRFJVTV9DSEFOTkVMCQkweEIzCisjZGVmaW5lIFdGQ19JTlNUT1VUX0xFVkVMUwkJMHhCNAorI2RlZmluZSBXRkNfUEVBS09VVF9MRVZFTFMJCTB4QjUKKyNkZWZpbmUgV0ZDX1JFUE9SVF9DSEFOTkVMX1BST0dSQU1TCTB4QjYKKyNkZWZpbmUgV0ZDX0hBUkRXQVJFX1ZFUlNJT04JCTB4Q0YKKyNkZWZpbmUgV0ZDX1VQTE9BRF9TQU1QTEVfUEFSQU1TCTB4RDcKKyNkZWZpbmUgV0ZDX0RPV05MT0FEX09TCQkJMHhGMQorI2RlZmluZSBXRkNfTk9PUCAgICAgICAgICAgICAgICAgICAgICAgIDB4RkYKKworI2RlZmluZSBXRl9NQVhfU0FNUExFICAgNTEyCisjZGVmaW5lIFdGX01BWF9QQVRDSCAgICAyNTYKKyNkZWZpbmUgV0ZfTUFYX1BST0dSQU0gIDEyOAorCisjZGVmaW5lIFdGX1NFQ1RJT05fTUFYICA0NCAgIC8qIGxvbmdlc3QgT1Mgc2VjdGlvbiBsZW5ndGggKi8KKworLyogIyBvZiBieXRlcyB3ZSBzZW5kIHRvIHRoZSBib2FyZCB3aGVuIHNlbmRpbmcgaXQgdmFyaW91cyBraW5kcyBvZgorICAgc3Vic3RhbnRpdmUgZGF0YSwgc3VjaCBhcyBzYW1wbGVzLCBwYXRjaGVzIGFuZCBwcm9ncmFtcy4KKyovCisKKyNkZWZpbmUgV0ZfUFJPR1JBTV9CWVRFUyAzMgorI2RlZmluZSBXRl9QQVRDSF9CWVRFUyAxMzIKKyNkZWZpbmUgV0ZfU0FNUExFX0JZVEVTIDI3CisjZGVmaW5lIFdGX1NBTVBMRV9IRFJfQllURVMgMjUKKyNkZWZpbmUgV0ZfQUxJQVNfQllURVMgMjUKKyNkZWZpbmUgV0ZfRFJVTV9CWVRFUyA5CisjZGVmaW5lIFdGX01TQU1QTEVfQllURVMgMjU5IC8qIChNSURJX0tFWVMgKiAyKSArIDMgKi8KKworI2RlZmluZSBXRl9BQ0sgICAgIDB4ODAKKyNkZWZpbmUgV0ZfRE1BX0FDSyAweDgxCisKKy8qIE9SLXZhbHVlcyBmb3IgTUlESSBzdGF0dXMgYml0cyAqLworCisjZGVmaW5lIFdGX01JRElfVklSVFVBTF9FTkFCTEVEIDB4MQorI2RlZmluZSBXRl9NSURJX1ZJUlRVQUxfSVNfRVhURVJOQUwgMHgyCisjZGVmaW5lIFdGX01JRElfSU5fVE9fU1lOVEhfRElTQUJMRUQgMHg0CisKKy8qIHNsb3QgaW5kZXhlcyBmb3Igc3RydWN0IGFkZHJlc3NfaW5mbzogbWFrZXMgY29kZSBhIGxpdHRsZSBtb3JlIG1uZW1vbmljICovCisKKyNkZWZpbmUgV0ZfU1lOVEhfU0xPVCAgICAgICAgIDAKKyNkZWZpbmUgV0ZfSU5URVJOQUxfTUlESV9TTE9UIDEKKyNkZWZpbmUgV0ZfRVhURVJOQUxfTUlESV9TTE9UIDIKKworLyogTWFnaWMgTUlESSBieXRlcyB1c2VkIHRvIHN3aXRjaCBJL08gc3RyZWFtcyBvbiB0aGUgSUNTMjExNSBNUFU0MDEKKyAgIGVtdWxhdGlvbi4gTm90ZSB0aGVzZSBORVZFUiBzaG93IHVwIGluIG91dHB1dCBmcm9tIHRoZSBkZXZpY2UgYW5kCisgICBzaG91bGQgTkVWRVIgYmUgdXNlZCBpbiBpbnB1dCB1bmxlc3MgVmlydHVhbCBNSURJIG1vZGUgaGFzIGJlZW4gCisgICBkaXNhYmxlZC4gSWYgdGhleSBkbyBzaG93IHVwIGFzIGlucHV0LCB0aGUgcmVzdWx0cyBhcmUgdW5wcmVkaWN0YWJsZS4KKyovCisKKyNkZWZpbmUgV0ZfRVhURVJOQUxfU1dJVENIICAweEZECisjZGVmaW5lIFdGX0lOVEVSTkFMX1NXSVRDSCAgMHhGOQorCisvKiBEZWJ1Z2dpbmcgZmxhZ3MgKi8KKworI2RlZmluZSBXRl9ERUJVR19DTUQgMHgxCisjZGVmaW5lIFdGX0RFQlVHX0RBVEEgMHgyCisjZGVmaW5lIFdGX0RFQlVHX0xPQURfUEFUQ0ggMHg0CisjZGVmaW5lIFdGX0RFQlVHX0lPIDB4OAorCisvKiBXYXZlUGF0Y2ggZmlsZSBmb3JtYXQgc3R1ZmYgKi8KKworI2RlZmluZSBXRl9XQVZFUEFUQ0hfVkVSU0lPTiAgICAgMTIwOyAgLyogIEN1cnJlbnQgdmVyc2lvbiBudW1iZXIgKDEuMikgICovCisjZGVmaW5lIFdGX01BWF9DT01NRU5UICAgICAgICAgICA2NCAgICAvKiAgQ29tbWVudCBsZW5ndGggKi8KKyNkZWZpbmUgV0ZfTlVNX0xBWUVSUyAgICAgICAgICAgIDQKKyNkZWZpbmUgV0ZfTkFNRV9MRU5HVEggICAgICAgICAgIDMyCisjZGVmaW5lIFdGX1NPVVJDRV9MRU5HVEggICAgICAgICAyNjAKKworI2RlZmluZSBCYW5rRmlsZUlEICAgICAiQmFuayIKKyNkZWZpbmUgRHJ1bWtpdEZpbGVJRCAgIkRydW1LaXQiCisjZGVmaW5lIFByb2dyYW1GaWxlSUQgICJQcm9ncmFtIgorCitzdHJ1Y3Qgd2ZfZW52ZWxvcGUKK3sKKyAgICB1OCBhdHRhY2tfdGltZTo3OworICAgIHU4IFVudXNlZDE6MTsKKworICAgIHU4IGRlY2F5MV90aW1lOjc7CisgICAgdTggVW51c2VkMjoxOworCisgICAgdTggZGVjYXkyX3RpbWU6NzsKKyAgICB1OCBVbnVzZWQzOjE7CisKKyAgICB1OCBzdXN0YWluX3RpbWU6NzsKKyAgICB1OCBVbnVzZWQ0OjE7CisKKyAgICB1OCByZWxlYXNlX3RpbWU6NzsKKyAgICB1OCBVbnVzZWQ1OjE7CisKKyAgICB1OCByZWxlYXNlMl90aW1lOjc7CisgICAgdTggVW51c2VkNjoxOworCisgICAgczggYXR0YWNrX2xldmVsOworICAgIHM4IGRlY2F5MV9sZXZlbDsKKyAgICBzOCBkZWNheTJfbGV2ZWw7CisgICAgczggc3VzdGFpbl9sZXZlbDsKKyAgICBzOCByZWxlYXNlX2xldmVsOworCisgICAgdTggYXR0YWNrX3ZlbG9jaXR5Ojc7CisgICAgdTggVW51c2VkNzoxOworCisgICAgdTggdm9sdW1lX3ZlbG9jaXR5Ojc7CisgICAgdTggVW51c2VkODoxOworCisgICAgdTgga2V5Ym9hcmRfc2NhbGluZzo3OworICAgIHU4IFVudXNlZDk6MTsKK307Cit0eXBlZGVmIHN0cnVjdCB3Zl9lbnZlbG9wZSB3YXZlZnJvbnRfZW52ZWxvcGU7CisKK3N0cnVjdCB3Zl9sZm8KK3sKKyAgICB1OCBzYW1wbGVfbnVtYmVyOworCisgICAgdTggZnJlcXVlbmN5Ojc7CisgICAgdTggVW51c2VkMToxOworCisgICAgdTggYW1fc3JjOjQ7CisgICAgdTggZm1fc3JjOjQ7CisKKyAgICBzOCBmbV9hbW91bnQ7CisgICAgczggYW1fYW1vdW50OworICAgIHM4IHN0YXJ0X2xldmVsOworICAgIHM4IGVuZF9sZXZlbDsKKworICAgIHU4IHJhbXBfZGVsYXk6NzsKKyAgICB1OCB3YXZlX3Jlc3RhcnQ6MTsgLyogZm9yIExGTzIgb25seSAqLworCisgICAgdTggcmFtcF90aW1lOjc7CisgICAgdTggVW51c2VkMjoxOworfTsKK3R5cGVkZWYgc3RydWN0IHdmX2xmbyB3YXZlZnJvbnRfbGZvOworCitzdHJ1Y3Qgd2ZfcGF0Y2gKK3sKKyAgICBzMTYgIGZyZXF1ZW5jeV9iaWFzOyAgICAgICAgIC8qICAqKiBUSElTIElTIElOIE1PVE9ST0xBIEZPUk1BVCEhICoqICovCisKKyAgICB1OCBhbXBsaXR1ZGVfYmlhczo3OworICAgIHU4IFVudXNlZDE6MTsKKworICAgIHU4IHBvcnRhbWVudG86NzsKKyAgICB1OCBVbnVzZWQyOjE7CisKKyAgICB1OCBzYW1wbGVfbnVtYmVyOworCisgICAgdTggcGl0Y2hfYmVuZDo0OworICAgIHU4IHNhbXBsZV9tc2I6MTsKKyAgICB1OCBVbnVzZWQzOjM7CisKKyAgICB1OCBtb25vOjE7CisgICAgdTggcmV0cmlnZ2VyOjE7CisgICAgdTggbm9ob2xkOjE7CisgICAgdTggcmVzdGFydDoxOworICAgIHU4IGZpbHRlcmNvbmZpZzoyOyAvKiBTREsgc2F5cyAibm90IHVzZWQiICovCisgICAgdTggcmV1c2U6MTsKKyAgICB1OCByZXNldF9sZm86MTsgICAgCisKKyAgICB1OCBmbV9zcmMyOjQ7CisgICAgdTggZm1fc3JjMTo0OyAgIAorCisgICAgczggZm1fYW1vdW50MTsKKyAgICBzOCBmbV9hbW91bnQyOworCisgICAgdTggYW1fc3JjOjQ7CisgICAgdTggVW51c2VkNDo0OworCisgICAgczggYW1fYW1vdW50OworCisgICAgdTggZmMxX21vZGU6NDsKKyAgICB1OCBmYzJfbW9kZTo0OworCisgICAgczggZmMxX21vZF9hbW91bnQ7CisgICAgczggZmMxX2tleWJvYXJkX3NjYWxpbmc7CisgICAgczggZmMxX2JpYXM7CisgICAgczggZmMyX21vZF9hbW91bnQ7CisgICAgczggZmMyX2tleWJvYXJkX3NjYWxpbmc7CisgICAgczggZmMyX2JpYXM7CisKKyAgICB1OCByYW5kb21pemVyOjc7CisgICAgdTggVW51c2VkNToxOworCisgICAgc3RydWN0IHdmX2VudmVsb3BlIGVudmVsb3BlMTsKKyAgICBzdHJ1Y3Qgd2ZfZW52ZWxvcGUgZW52ZWxvcGUyOworICAgIHN0cnVjdCB3Zl9sZm8gbGZvMTsKKyAgICBzdHJ1Y3Qgd2ZfbGZvIGxmbzI7Cit9OwordHlwZWRlZiBzdHJ1Y3Qgd2ZfcGF0Y2ggd2F2ZWZyb250X3BhdGNoOworCitzdHJ1Y3Qgd2ZfbGF5ZXIKK3sKKyAgICB1OCBwYXRjaF9udW1iZXI7CisKKyAgICB1OCBtaXhfbGV2ZWw6NzsKKyAgICB1OCBtdXRlOjE7CisKKyAgICB1OCBzcGxpdF9wb2ludDo3OworICAgIHU4IHBsYXlfYmVsb3c6MTsKKworICAgIHU4IHBhbl9tb2Rfc3JjOjI7CisgICAgdTggcGFuX29yX21vZDoxOworICAgIHU4IHBhbjo0OworICAgIHU4IHNwbGl0X3R5cGU6MTsKK307Cit0eXBlZGVmIHN0cnVjdCB3Zl9sYXllciB3YXZlZnJvbnRfbGF5ZXI7CisKK3N0cnVjdCB3Zl9wcm9ncmFtCit7CisgICAgc3RydWN0IHdmX2xheWVyIGxheWVyW1dGX05VTV9MQVlFUlNdOworfTsKK3R5cGVkZWYgc3RydWN0IHdmX3Byb2dyYW0gd2F2ZWZyb250X3Byb2dyYW07CisKK3N0cnVjdCB3Zl9zYW1wbGVfb2Zmc2V0Cit7CisgICAgczMyIEZyYWN0aW9uOjQ7CisgICAgczMyIEludGVnZXI6MjA7CisgICAgczMyIFVudXNlZDo4OworfTsKK3R5cGVkZWYgc3RydWN0IHdmX3NhbXBsZV9vZmZzZXQgd2F2ZWZyb250X3NhbXBsZV9vZmZzZXQ7ICAgICAgICAgIAorICAgICAKKy8qIFNhbXBsZSBzbG90IHR5cGVzICovCisKKyNkZWZpbmUgV0ZfU1RfU0FNUExFICAgICAgMAorI2RlZmluZSBXRl9TVF9NVUxUSVNBTVBMRSAxCisjZGVmaW5lIFdGX1NUX0FMSUFTICAgICAgIDIKKyNkZWZpbmUgV0ZfU1RfRU1QVFkgICAgICAgMworCisvKiBwc2V1ZG8ncyAqLworCisjZGVmaW5lIFdGX1NUX0RSVU0gICAgICAgIDQKKyNkZWZpbmUgV0ZfU1RfUFJPR1JBTSAgICAgNQorI2RlZmluZSBXRl9TVF9QQVRDSCAgICAgICA2CisjZGVmaW5lIFdGX1NUX1NBTVBMRUhEUiAgIDcKKworI2RlZmluZSBXRl9TVF9NQVNLICAgICAgICAweGYKKworLyogRmxhZ3MgZm9yIHNsb3Qgc3RhdHVzLiBUaGVzZSBvY2N1cHkgdGhlIHVwcGVyIGJpdHMgb2YgdGhlIHNhbWUgYnl0ZQorICAgYXMgYSBzYW1wbGUgdHlwZS4KKyovCisKKyNkZWZpbmUgV0ZfU0xPVF9VU0VEICAgICAgMHg4MCAgIC8qIFhYWCBkb24ndCByZWx5IG9uIHRoaXMgYmVpbmcgYWNjdXJhdGUgKi8KKyNkZWZpbmUgV0ZfU0xPVF9GSUxMRUQgICAgMHg0MAorI2RlZmluZSBXRl9TTE9UX1JPTSAgICAgICAweDIwCisKKyNkZWZpbmUgV0ZfU0xPVF9NQVNLICAgICAgMHhmMAorCisvKiBjaGFubmVsIGNvbnN0YW50cyAqLworCisjZGVmaW5lIFdGX0NIX01PTk8gIDAKKyNkZWZpbmUgV0ZfQ0hfTEVGVCAgMQorI2RlZmluZSBXRl9DSF9SSUdIVCAyCisKKy8qIFNhbXBsZSBmb3JtYXRzICovCisKKyNkZWZpbmUgTElORUFSXzE2QklUIDAKKyNkZWZpbmUgV0hJVEVfTk9JU0UgIDEKKyNkZWZpbmUgTElORUFSXzhCSVQgIDIKKyNkZWZpbmUgTVVMQVdfOEJJVCAgIDMKKworI2RlZmluZSBXRl9TQU1QTEVfSVNfOEJJVChzbXBsKSAoKHNtcGwpLT5TYW1wbGVSZXNvbHV0aW9uJjIpCisKKworLyogCisKKyAgQmVjYXVzZSBtb3N0L2FsbCBvZiB0aGUgc2FtcGxlIGRhdGEgd2UgcGFzcyBpbiB2aWEgcG9pbnRlcnMgaGFzCisgIG5ldmVyIGJlZW4gY29waWVkIChqdXN0IG1tYXAtZWQgaW50byB1c2VyIHNwYWNlIHN0cmFpZ2h0IGZyb20gdGhlCisgIGRpc2spLCBpdCB3b3VsZCBiZSBuaWNlIHRvIGFsbG93IGhhbmRsaW5nIG9mIG11bHRpLWNoYW5uZWwgc2FtcGxlCisgIGRhdGEgd2l0aG91dCBmb3JjaW5nIHVzZXItbGV2ZWwgZXh0cmFjdGlvbiBvZiB0aGUgcmVsZXZhbnQgYnl0ZXMuCisgIAorICBTbywgd2UgbmVlZCBhIHdheSBvZiBzcGVjaWZ5aW5nIHdoaWNoIGNoYW5uZWwgdG8gdXNlICh0aGUgV2F2ZUZyb250CisgIG9ubHkgaGFuZGxlcyBtb25vIHNhbXBsZXMgaW4gYSBnaXZlbiBzbG90KSwgYW5kIHRoZSBvbmx5IHdheSB0byBkbworICB0aGlzIHdpdGhvdXQgdXNpbmcgc29tZSBzdHJ1Y3Qgb3RoZXIgdGhhbiB3YXZlZnJvbnRfc2FtcGxlIGFzIHRoZQorICBpbnRlcmZhY2UgaXMgdGhlIGF3ZnVsIGhhY2sgb2YgdXNpbmcgdGhlIHVudXNlZCBiaXRzIGluIGEKKyAgd2F2ZWZyb250X3NhbXBsZToKKyAgCisgIFZhbCAgICAgIE1lYW5pbmcKKyAgLS0tICAgICAgLS0tLS0tLQorICAwICAgICAgICBubyBjaGFubmVsIHNlbGVjdGlvbiAodXNlIGNoYW5uZWwgMSwgc2FtcGxlIGlzIE1PTk8pCisgIDEgICAgICAgIHVzZSBmaXJzdCBjaGFubmVsLCBhbmQgc2tpcCBvbmUKKyAgMiAgICAgICAgdXNlIHNlY29uZCBjaGFubmVsLCBhbmQgc2tpcCBvbmUKKyAgMyAgICAgICAgdXNlIHRoaXJkIGNoYW5uZWwsIGFuZCBza2lwIHR3bworICA0ICAgICAgICB1c2UgZm91cnRoIGNoYW5uZWwsIHNraXAgdGhyZWUKKyAgNSAgICAgICAgdXNlIGZpZnRoIGNoYW5uZWwsIHNraXAgZm91cgorICA2ICAgICAgICB1c2Ugc2l4IGNoYW5uZWwsIHNraXAgZml2ZQorCisKKyAgVGhpcyBjYW4gaGFuZGxlIHVwIHRvIDQgY2hhbm5lbHMsIGFuZCBhbnlvbmUgZG93bmxvYWRpbmcgPjQgY2hhbm5lbHMKKyAgb2Ygc2FtcGxlIGRhdGEganVzdCB0byBzZWxlY3Qgb25lIG9mIHRoZW0gbmVlZHMgdG8gZmluZCBzb21lIHRvb2xzCisgIGxpa2Ugc294IC4uLgorCisgIE5PVEU6IHZhbHVlcyAwLCAxIGFuZCAyIGNvcnJlc3BvbmQgdG8gV0ZfQ0hfKiBhYm92ZS4gVGhpcyBpcyAKKyAgaW1wb3J0YW50LgorCisqLworCisjZGVmaW5lIFdGX1NFVF9DSEFOTkVMKHNhbXAsY2huKSBcCisgKHNhbXApLT5VbnVzZWQxID0gY2huICYgMHgxOyBcCisgKHNhbXApLT5VbnVzZWQyID0gY2huICYgMHgyOyBcCisgKHNhbXApLT5VbnVzZWQzID0gY2huICYgMHg0IAorICAKKyNkZWZpbmUgV0ZfR0VUX0NIQU5ORUwoc2FtcCkgXAorICAoKChzYW1wKS0+VW51c2VkMyA8PCAyKXwoKHNhbXApLT5VbnVzZWQyPDwxKXwoc2FtcCktPlVudXNlZDEpCisgIAordHlwZWRlZiBzdHJ1Y3Qgd2Zfc2FtcGxlIHsKKyAgICBzdHJ1Y3Qgd2Zfc2FtcGxlX29mZnNldCBzYW1wbGVTdGFydE9mZnNldDsKKyAgICBzdHJ1Y3Qgd2Zfc2FtcGxlX29mZnNldCBsb29wU3RhcnRPZmZzZXQ7CisgICAgc3RydWN0IHdmX3NhbXBsZV9vZmZzZXQgbG9vcEVuZE9mZnNldDsKKyAgICBzdHJ1Y3Qgd2Zfc2FtcGxlX29mZnNldCBzYW1wbGVFbmRPZmZzZXQ7CisgICAgczE2IEZyZXF1ZW5jeUJpYXM7CisgICAgdTggU2FtcGxlUmVzb2x1dGlvbjoyOyAgLyogc2FtcGxlX2Zvcm1hdCAqLworICAgIHU4IFVudXNlZDE6MTsKKyAgICB1OCBMb29wOjE7CisgICAgdTggQmlkaXJlY3Rpb25hbDoxOworICAgIHU4IFVudXNlZDI6MTsKKyAgICB1OCBSZXZlcnNlOjE7CisgICAgdTggVW51c2VkMzoxOworfSB3YXZlZnJvbnRfc2FtcGxlOworCit0eXBlZGVmIHN0cnVjdCB3Zl9tdWx0aXNhbXBsZSB7CisgICAgczE2IE51bWJlck9mU2FtcGxlczsgICAvKiBsb2cyIG9mIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyAqLworICAgIHMxNiBTYW1wbGVOdW1iZXJbTlVNX01JRElLRVlTXTsKK30gd2F2ZWZyb250X211bHRpc2FtcGxlOworCit0eXBlZGVmIHN0cnVjdCB3Zl9hbGlhcyB7CisgICAgczE2IE9yaWdpbmFsU2FtcGxlIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworICAgIHN0cnVjdCB3Zl9zYW1wbGVfb2Zmc2V0IHNhbXBsZVN0YXJ0T2Zmc2V0IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKyAgICBzdHJ1Y3Qgd2Zfc2FtcGxlX29mZnNldCBsb29wU3RhcnRPZmZzZXQgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworICAgIHN0cnVjdCB3Zl9zYW1wbGVfb2Zmc2V0IHNhbXBsZUVuZE9mZnNldCBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisgICAgc3RydWN0IHdmX3NhbXBsZV9vZmZzZXQgbG9vcEVuZE9mZnNldCBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyAgICBzMTYgIEZyZXF1ZW5jeUJpYXMgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisgICAgdTggU2FtcGxlUmVzb2x1dGlvbjoyICBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisgICAgdTggVW51c2VkMToxICBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisgICAgdTggTG9vcDoxIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKyAgICB1OCBCaWRpcmVjdGlvbmFsOjEgIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKyAgICB1OCBVbnVzZWQyOjEgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworICAgIHU4IFJldmVyc2U6MSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisgICAgdTggVW51c2VkMzoxIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsgCisgICAgCisgICAgLyogVGhpcyBzdHJ1Y3R1cmUgaXMgbWVhbnQgdG8gYmUgcGFkZGVkIG9ubHkgdG8gMTYgYml0cyBvbiB0aGVpcgorICAgICAgIG9yaWdpbmFsLiBPZiBjb3Vyc2UsIHdob2V2ZXIgd3JvdGUgdGhlaXIgZG9jdW1lbnRhdGlvbiBkaWRuJ3QKKyAgICAgICByZWFsaXplIHRoYXQgc2l6ZW9mKHN0cnVjdCkgY2FuIGJlID49CisgICAgICAgc3VtKHNpemVvZihzdHJ1Y3QtZmllbGRzKSkgYW5kIHNvIHRob3VnaHQgdGhhdCBnaXZpbmcgYSBDIGxldmVsCisgICAgICAgZGVzY3JpcHRpb24gb2YgdGhlIHN0cnVjdHMgdXNlZCBpbiBXYXZlUGF0Y2ggZmlsZXMgd2FzCisgICAgICAgc3VmZmljaWVudC4gSSBzdXBwb3NlIGl0IHdhcywgYXMgbG9uZyBhcyB5b3UgcmVtZW1iZXIgdGhlIAorICAgICAgIHN0YW5kYXJkIDE2LT4zMiBiaXQgaXNzdWVzLgorICAgICovCisKKyAgICB1OCBzaXh0ZWVuX2JpdF9wYWRkaW5nIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gd2F2ZWZyb250X2FsaWFzOworCit0eXBlZGVmIHN0cnVjdCB3Zl9kcnVtIHsKKyAgICB1OCBQYXRjaE51bWJlcjsKKyAgICB1OCBNaXhMZXZlbDo3OworICAgIHU4IFVubXV0ZToxOworICAgIHU4IEdyb3VwOjQ7CisgICAgdTggVW51c2VkMTo0OworICAgIHU4IFBhbk1vZFNvdXJjZToyOworICAgIHU4IFBhbk1vZHVsYXRlZDoxOworICAgIHU4IFBhbkFtb3VudDo0OworICAgIHU4IFVudXNlZDI6MTsKK30gd2F2ZWZyb250X2RydW07CisKK3R5cGVkZWYgc3RydWN0IHdmX2RydW1raXQgeworICAgIHN0cnVjdCB3Zl9kcnVtIGRydW1bTlVNX01JRElLRVlTXTsKK30gd2F2ZWZyb250X2RydW1raXQ7CisKK3R5cGVkZWYgc3RydWN0IHdmX2NoYW5uZWxfcHJvZ3JhbXMgeworICAgIHU4IFByb2dyYW1bTlVNX01JRElDSEFOTkVMU107Cit9IHdhdmVmcm9udF9jaGFubmVsX3Byb2dyYW1zOworCisvKiBIb3cgdG8gZ2V0IE1JREkgY2hhbm5lbCBzdGF0dXMgZnJvbSB0aGUgZGF0YSByZXR1cm5lZCBieQorICAgYSBXRkNfR0VUX0NIQU5ORUxfU1RBVFVTIGNvbW1hbmQgKGEgc3RydWN0IHdmX2NoYW5uZWxfcHJvZ3JhbXMpCisqLworCisjZGVmaW5lIFdGX0NIQU5ORUxfU1RBVFVTKGNoLHdjcCkgKHdjcClbKGNoLzcpXSAmICgxPDwoKGNoKSU3KSkKKwordHlwZWRlZiB1bmlvbiB3Zl9hbnkgeworICAgIHdhdmVmcm9udF9zYW1wbGUgczsKKyAgICB3YXZlZnJvbnRfbXVsdGlzYW1wbGUgbXM7CisgICAgd2F2ZWZyb250X2FsaWFzIGE7CisgICAgd2F2ZWZyb250X3Byb2dyYW0gcHI7CisgICAgd2F2ZWZyb250X3BhdGNoIHA7CisgICAgd2F2ZWZyb250X2RydW0gZDsKK30gd2F2ZWZyb250X2FueTsKKworLyogSGFubnUgU29sdmFpbmVuIGhvcGVkIHRoYXQgaGlzICJwYXRjaF9pbmZvIiBzdHJ1Y3QgaW4gc291bmRjYXJkLmgKKyAgIG1pZ2h0IHdvcmsgZm9yIG90aGVyIHdhdmUtdGFibGUgYmFzZWQgcGF0Y2ggbG9hZGluZyBzaXR1YXRpb25zLgorICAgQWxhcywgaGlzIGZlYXJzIHdlcmUgY29ycmVjdC4gVGhlIFdhdmVGcm9udCBkb2Vzbid0IGV2ZW4gY29tZSB3aXRoCisgICBqdXN0ICJwYXRjaGVzIiwgYnV0IHNldmVyYWwgZGlmZmVyZW50IGtpbmQgb2Ygc3RydWN0dXJlcyB0aGF0CisgICBjb250cm9sIHRoZSBzb3VuZCBnZW5lcmF0aW9uIHByb2Nlc3MuCisgKi8KKwordHlwZWRlZiBzdHJ1Y3Qgd2ZfcGF0Y2hfaW5mbyB7CisgICAgCisgICAgLyogdGhlIGZpcnN0IHR3byBmaWVsZHMgYXJlIHVzZWQgYnkgdGhlIE9TUyAicGF0Y2ggbG9hZGluZyIgaW50ZXJmYWNlCisgICAgICAgb25seSwgYW5kIGFyZSB1bnVzZWQgYnkgdGhlIGN1cnJlbnQgdXNlci1sZXZlbCBsaWJyYXJ5LgorICAgICovCisKKyAgICBzMTYgICBrZXk7ICAgICAgICAgICAgICAgLyogVXNlIFdBVkVGUk9OVF9QQVRDSCBoZXJlICovCisgICAgdTE2ICBkZXZubzsgICAgICAgICAgICAgLyogZmlsbCBpbiB3aGVuIHNlbmRpbmcgKi8KKyAgICB1OCAgc3Via2V5OyAgICAgICAgICAgIC8qIFdGX1NUX3tTQU1QTEUsQUxJQVMsZXRjLn0gKi8KKworI2RlZmluZSBXQVZFRlJPTlRfRklORF9GUkVFX1NBTVBMRV9TTE9UIDk5OQorCisgICAgdTE2ICBudW1iZXI7ICAgICAgICAgICAgLyogcGF0Y2gvc2FtcGxlL3Byb2cgbnVtYmVyICovCisKKyAgICB1MzIgIHNpemU7ICAgICAgICAgICAgICAvKiBzaXplIG9mIGFueSBkYXRhIGluY2x1ZGVkIGluIAorCQkJCSAgb25lIG9mIHRoZSBmaWVsZHMgaW4gYGhkcnB0cicsIG9yCisJCQkJICBhcyBgZGF0YXB0cicuCisKKwkJCQkgIE5PVEU6IGZvciBhY3R1YWwgc2FtcGxlcywgdGhpcyBpcworCQkJCSAgdGhlIHNpemUgb2YgdGhlICpTRUxFQ1RFRCBDSEFOTkVMKgorCQkJCSAgZXZlbiBpZiBtb3JlIGRhdGEgaXMgYWN0dWFsbHkgYXZhaWxhYmxlLgorCQkJCSAgCisJCQkJICBTbywgYSBzdGVyZW8gc2FtcGxlICgyIGNoYW5uZWxzKSBvZgorCQkJCSAgNjAwMCBieXRlcyB0b3RhbCBoYXMgYHNpemUnID0gMzAwMC4KKworCQkJCSAgU2VlIHRoZSBtYWNyb3MgYW5kIGNvbW1lbnRzIGZvcgorCQkJCSAgV0Zfe0dFVCxTRVR9X0NIQU5ORUwgYWJvdmUuCisKKwkJCSAgICAgICAqLworICAgIHdhdmVmcm9udF9hbnkgX191c2VyICpoZHJwdHI7ICAgICAgLyogdXNlci1zcGFjZSBwdHIgdG8gaGRyIGJ5dGVzICovCisgICAgdTE2IF9fdXNlciAqZGF0YXB0cjsgICAgICAgICAgICAvKiBhY3R1YWwgc2FtcGxlIGRhdGEgKi8KKworICAgIHdhdmVmcm9udF9hbnkgaGRyOyAgICAgICAgICAvKiBrZXJuZWwtc3BhY2UgY29weSBvZiBoZHIgYnl0ZXMgKi8gICAgICAgICAKK30gd2F2ZWZyb250X3BhdGNoX2luZm87CisKKy8qIFRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyB3ZSB3aWxsIGV2ZXIgbW92ZSB0byBvciBmcm9tIHVzZXIgc3BhY2UKKyAgIGluIHJlc3BvbnNlIHRvIGEgV0ZDXyogY29tbWFuZC4gIFRoaXMgb2J2aW91c2x5IGRvZXNuJ3QgY292ZXIKKyAgIGFjdHVhbCBzYW1wbGUgZGF0YS4KKyovCisKKyNkZWZpbmUgV0ZfTUFYX1JFQUQgc2l6ZW9mKHdhdmVmcm9udF9tdWx0aXNhbXBsZSkKKyNkZWZpbmUgV0ZfTUFYX1dSSVRFIHNpemVvZih3YXZlZnJvbnRfbXVsdGlzYW1wbGUpCisKKy8qCisgICBUaGlzIGFsbG93cyB1cyB0byBleGVjdXRlIGFueSBXRiBjb21tYW5kIGV4Y2VwdCB0aGUgZG93bmxvYWQvdXBsb2FkCisgICBvbmVzLCB3aGljaCBhcmUgaGFuZGxlZCBkaWZmZXJlbnRseSBkdWUgdG8gY29weWluL2NvcHlvdXQgaXNzdWVzIGFzCisgICB3ZWxsIGFzIGRhdGEtbnliYmxpbmcgdG8vZnJvbSB0aGUgY2FyZC4KKyAqLworCit0eXBlZGVmIHN0cnVjdCB3YXZlZnJvbnRfY29udHJvbCB7CisgICAgaW50IGNtZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXRkNfKiAqLworICAgIGNoYXIgc3RhdHVzOyAgICAgICAgICAgICAgICAgICAgICAgLyogcmV0dXJuIHN0YXR1cyB0byB1c2VyLXNwYWNlICovCisgICAgdW5zaWduZWQgY2hhciByYnVmW1dGX01BWF9SRUFEXTsgICAvKiBieXRlcyByZWFkIGZyb20gY2FyZCAqLworICAgIHVuc2lnbmVkIGNoYXIgd2J1ZltXRl9NQVhfV1JJVEVdOyAgLyogYnl0ZXMgd3JpdHRlbiB0byBjYXJkICovCit9IHdhdmVmcm9udF9jb250cm9sOworCisjZGVmaW5lIFdGQ1RMX1dGQ01EICAgIDB4MQorI2RlZmluZSBXRkNUTF9MT0FEX1NQUCAweDIKKworLyogTW9kdWxhdG9yIHRhYmxlICovCisKKyNkZWZpbmUgV0ZfTU9EX0xGTzEgICAgICAwCisjZGVmaW5lIFdGX01PRF9MRk8yICAgICAgMQorI2RlZmluZSBXRl9NT0RfRU5WMSAgICAgIDIKKyNkZWZpbmUgV0ZfTU9EX0VOVjIgICAgICAzCisjZGVmaW5lIFdGX01PRF9LRVlCT0FSRCAgNAorI2RlZmluZSBXRl9NT0RfTE9HS0VZICAgIDUKKyNkZWZpbmUgV0ZfTU9EX1ZFTE9DSVRZICA2CisjZGVmaW5lIFdGX01PRF9MT0dWRUwgICAgNworI2RlZmluZSBXRl9NT0RfUkFORE9NICAgIDgKKyNkZWZpbmUgV0ZfTU9EX1BSRVNTVVJFICA5CisjZGVmaW5lIFdGX01PRF9NT0RfV0hFRUwgMTAKKyNkZWZpbmUgV0ZfTU9EXzEgICAgICAgICBXRl9NT0RfTU9EX1dIRUVMIAorI2RlZmluZSBXRl9NT0RfQlJFQVRIICAgIDExCisjZGVmaW5lIFdGX01PRF8yICAgICAgICAgV0ZfTU9EX0JSRUFUSAorI2RlZmluZSBXRl9NT0RfRk9PVCAgICAgIDEyCisjZGVmaW5lIFdGX01PRF80ICAgICAgICAgV0ZfTU9EX0ZPT1QKKyNkZWZpbmUgV0ZfTU9EX1ZPTFVNRSAgICAxMworI2RlZmluZSBXRl9NT0RfNyAgICAgICAgIFdGX01PRF9WT0xVTUUKKyNkZWZpbmUgV0ZfTU9EX1BBTiAgICAgICAxNAorI2RlZmluZSBXRl9NT0RfMTAgICAgICAgIFdGX01PRF9QQU4KKyNkZWZpbmUgV0ZfTU9EX0VYUFIgICAgICAxNQorI2RlZmluZSBXRl9NT0RfMTEgICAgICAgIFdGX01PRF9FWFBSCisKKy8qIEZYLXJlbGF0ZWQgbWF0ZXJpYWwgKi8KKwordHlwZWRlZiBzdHJ1Y3Qgd2ZfZnhfaW5mbyB7CisgICAgaW50IHJlcXVlc3Q7ICAgICAgICAgICAgIC8qIHNlZSBsaXN0IGJlbG93ICovCisgICAgbG9uZyBkYXRhWzRdOyAgICAgICAgICAgICAvKiB3ZSBkb24ndCBuZWVkIG11Y2ggKi8KK30gd2F2ZWZyb250X2Z4X2luZm87CisKKy8qIHN1cHBvcnQgZm9yIGVhY2ggb2YgdGhlc2Ugd2lsbCBiZSBmb3J0aGNvbWluZyBvbmNlIEkgb3Igc29tZW9uZSAKKyAgIGVsc2UgaGFzIGZpZ3VyZWQgb3V0IHdoaWNoIG9mIHRoZSBhZGRyZXNzZXMgb24gcGFnZSA2IGFuZCBwYWdlIDcgb2YgCisgICB0aGUgWVNTMjI1IGNvbnRyb2wgZWFjaCBwYXJhbWV0ZXIuIEluY2lkZW50YWxseSwgdGhlc2UgY29tZSBmcm9tCisgICB0aGUgV2luZG93cyBkcml2ZXIgaW50ZXJmYWNlLCBidXQgYWdhaW4sIFR1cnRsZSBCZWFjaCBkaWRuJ3QKKyAgIGRvY3VtZW50IHRoZSBBUEkgdG8gdXNlIHRoZW0uCisqLworCisjZGVmaW5lIFdGRlhfU0VUT1VUR0FJTgkJICAgICAgICAwCisjZGVmaW5lIFdGRlhfU0VUU1RFUkVPT1VUR0FJTgkJMQorI2RlZmluZSBXRkZYX1NFVFJFVkVSQklOMUdBSU4JCTIKKyNkZWZpbmUgV0ZGWF9TRVRSRVZFUkJJTjJHQUlOCQkzCisjZGVmaW5lIFdGRlhfU0VUUkVWRVJCSU4zR0FJTgkJNAorI2RlZmluZSBXRkZYX1NFVENIT1JVU0lOUE9SVAkJNQorI2RlZmluZSBXRkZYX1NFVFJFVkVSQklOMVBPUlQJCTYKKyNkZWZpbmUgV0ZGWF9TRVRSRVZFUkJJTjJQT1JUCQk3CisjZGVmaW5lIFdGRlhfU0VUUkVWRVJCSU4zUE9SVAkJOAorI2RlZmluZSBXRkZYX1NFVEVGRkVDVFBPUlQJCTkKKyNkZWZpbmUgV0ZGWF9TRVRBVVhQT1JUCQkgICAgICAgIDEwCisjZGVmaW5lIFdGRlhfU0VUUkVWRVJCVFlQRQkJMTEKKyNkZWZpbmUgV0ZGWF9TRVRSRVZFUkJERUxBWQkJMTIKKyNkZWZpbmUgV0ZGWF9TRVRDSE9SVVNMRk8JCTEzCisjZGVmaW5lIFdGRlhfU0VUQ0hPUlVTUE1ECQkxNAorI2RlZmluZSBXRkZYX1NFVENIT1JVU0FNRAkJMTUKKyNkZWZpbmUgV0ZGWF9TRVRFRkZFQ1QJCSAgICAgICAgMTYKKyNkZWZpbmUgV0ZGWF9TRVRCQVNFQUxMCQkgICAgICAgIDE3CisjZGVmaW5lIFdGRlhfU0VUUkVWRVJCQUxMCQkxOAorI2RlZmluZSBXRkZYX1NFVENIT1JVU0FMTAkJMjAKKyNkZWZpbmUgV0ZGWF9TRVRSRVZFUkJERUYJCTIyCisjZGVmaW5lIFdGRlhfU0VUQ0hPUlVTREVGCQkyMworI2RlZmluZSBXRkZYX0RFTEFZU0VUSU5HQUlOCQkyNAorI2RlZmluZSBXRkZYX0RFTEFZU0VURkJHQUlOCSAgICAgICAgMjUKKyNkZWZpbmUgV0ZGWF9ERUxBWVNFVEZCTFBGCQkyNgorI2RlZmluZSBXRkZYX0RFTEFZU0VUR0FJTgkJMjcKKyNkZWZpbmUgV0ZGWF9ERUxBWVNFVFRJTUUJCTI4CisjZGVmaW5lIFdGRlhfREVMQVlTRVRGQlRJTUUJCTI5CisjZGVmaW5lIFdGRlhfREVMQVlTRVRBTEwJCTMwCisjZGVmaW5lIFdGRlhfREVMQVlTRVRERUYJCTMyCisjZGVmaW5lIFdGRlhfU0RFTEFZU0VUSU5HQUlOCQkzMworI2RlZmluZSBXRkZYX1NERUxBWVNFVEZCR0FJTgkJMzQKKyNkZWZpbmUgV0ZGWF9TREVMQVlTRVRGQkxQRgkJMzUKKyNkZWZpbmUgV0ZGWF9TREVMQVlTRVRHQUlOCQkzNgorI2RlZmluZSBXRkZYX1NERUxBWVNFVFRJTUUJCTM3CisjZGVmaW5lIFdGRlhfU0RFTEFZU0VURkJUSU1FCQkzOAorI2RlZmluZSBXRkZYX1NERUxBWVNFVEFMTAkJMzkKKyNkZWZpbmUgV0ZGWF9TREVMQVlTRVRERUYJCTQxCisjZGVmaW5lIFdGRlhfREVRU0VUSU5HQUlOCQk0MgorI2RlZmluZSBXRkZYX0RFUVNFVEZJTFRFUgkJNDMKKyNkZWZpbmUgV0ZGWF9ERVFTRVRBTEwJCSAgICAgICAgNDQKKyNkZWZpbmUgV0ZGWF9ERVFTRVRERUYJCSAgICAgICAgNDYKKyNkZWZpbmUgV0ZGWF9NVVRFCQkgICAgICAgIDQ3CisjZGVmaW5lIFdGRlhfRkxBTkdFU0VUQkFMQU5DRQkgICAgICAgIDQ4CQorI2RlZmluZSBXRkZYX0ZMQU5HRVNFVERFTEFZCQk0OQorI2RlZmluZSBXRkZYX0ZMQU5HRVNFVERXRkZYX1RICQk1MAorI2RlZmluZSBXRkZYX0ZMQU5HRVNFVEZCR0FJTgkJNTEKKyNkZWZpbmUgV0ZGWF9GTEFOR0VTRVRJTkdBSU4JCTUyCisjZGVmaW5lIFdGRlhfRkxBTkdFU0VUTEZPCQk1MworI2RlZmluZSBXRkZYX0ZMQU5HRVNFVEFMTAkJNTQKKyNkZWZpbmUgV0ZGWF9GTEFOR0VTRVRERUYJCTU2CisjZGVmaW5lIFdGRlhfUElUQ0hTRVRTSElGVAkJNTcKKyNkZWZpbmUgV0ZGWF9QSVRDSFNFVEJBTEFOQ0UJCTU4CisjZGVmaW5lIFdGRlhfUElUQ0hTRVRBTEwJCTU5CisjZGVmaW5lIFdGRlhfUElUQ0hTRVRERUYJCTYxCisjZGVmaW5lIFdGRlhfU1JTU0VUSU5HQUlOCQk2MgorI2RlZmluZSBXRkZYX1NSU1NFVFNQQUNFCQk2MworI2RlZmluZSBXRkZYX1NSU1NFVENFTlRFUgkJNjQKKyNkZWZpbmUgV0ZGWF9TUlNTRVRHQUlOCQkgICAgICAgIDY1CisjZGVmaW5lIFdGRlhfU1JTU0VUTU9ERQkgICAgICAgIAk2NgorI2RlZmluZSBXRkZYX1NSU1NFVERFRgkJICAgICAgICA2OAorCisvKiBBbGxvdyBkaXJlY3QgdXNlci1zcGFjZSBjb250cm9sIG92ZXIgRlggbWVtb3J5L2NvZWZmaWNpZW50IGRhdGEuCisgICBJbiB0aGVvcnkgdGhpcyBjb3VsZCBiZSB1c2VkIHRvIGRvd25sb2FkIHRoZSBGWCBtaWNyb3Byb2dyYW0sCisgICBidXQgaXQgd291bGQgYmUgYSBsaXR0bGUgc2xvd2VyLCBhbmQgaW52b2x2ZSBzb21lIHdlaXJkIGNvZGUuCisgKi8KKworI2RlZmluZSBXRkZYX01FTVNFVCAgICAgICAgICAgICAgNjkKKworI2VuZGlmIC8qIF9fU09VTkRfV0FWRUZST05UX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC93YXZlZnJvbnRfZnguaCBiL2luY2x1ZGUvc291bmQvd2F2ZWZyb250X2Z4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VjOTJiMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvc291bmQvd2F2ZWZyb250X2Z4LmgKQEAgLTAsMCArMSw5IEBACisjaWZuZGVmIF9fU09VTkRfV0FWRUZST05UX0ZYX0gKKyNkZWZpbmUgX19TT1VORF9XQVZFRlJPTlRfRlhfSAorCitleHRlcm4gaW50ICBzbmRfd2F2ZWZyb250X2Z4X2RldGVjdCAoc25kX3dhdmVmcm9udF90ICopOworZXh0ZXJuIHZvaWQgc25kX3dhdmVmcm9udF9meF9pb2N0bCAgKHNuZF9zeW50aF90ICpzZGV2LCAKKwkJCQkgICAgIHVuc2lnbmVkIGludCBjbWQsIAorCQkJCSAgICAgdW5zaWduZWQgbG9uZyBhcmcpOworCisjZW5kaWYgIF9fU09VTkRfV0FWRUZST05UX0ZYX0gKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQveW1mcGNpLmggYi9pbmNsdWRlL3NvdW5kL3ltZnBjaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiNTcwNjgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3NvdW5kL3ltZnBjaS5oCkBAIC0wLDAgKzEsMzk2IEBACisjaWZuZGVmIF9fU09VTkRfWU1GUENJX0gKKyNkZWZpbmUgX19TT1VORF9ZTUZQQ0lfSAorCisvKgorICogIENvcHlyaWdodCAoYykgYnkgSmFyb3NsYXYgS3lzZWxhIDxwZXJleEBzdXNlLmN6PgorICogIERlZmluaXRpb25zIGZvciBZYWhhbWEgWU1GNzI0Lzc0MC83NDQvNzU0IGNoaXBzCisgKgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgInBjbS5oIgorI2luY2x1ZGUgInJhd21pZGkuaCIKKyNpbmNsdWRlICJhYzk3X2NvZGVjLmgiCisjaW5jbHVkZSAidGltZXIuaCIKKyNpbmNsdWRlIDxsaW51eC9nYW1lcG9ydC5oPgorCisjaWZuZGVmIFBDSV9WRU5ET1JfSURfWUFNQUhBCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfWUFNQUhBICAgICAgICAgICAgMHgxMDczCisjZW5kaWYKKyNpZm5kZWYgUENJX0RFVklDRV9JRF9ZQU1BSEFfNzI0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfWUFNQUhBXzcyNAkweDAwMDQKKyNlbmRpZgorI2lmbmRlZiBQQ0lfREVWSUNFX0lEX1lBTUFIQV83MjRGCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfWUFNQUhBXzcyNEYJMHgwMDBkCisjZW5kaWYKKyNpZm5kZWYgUENJX0RFVklDRV9JRF9ZQU1BSEFfNzQwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfWUFNQUhBXzc0MAkweDAwMGEKKyNlbmRpZgorI2lmbmRlZiBQQ0lfREVWSUNFX0lEX1lBTUFIQV83NDBDCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfWUFNQUhBXzc0MEMJMHgwMDBjCisjZW5kaWYKKyNpZm5kZWYgUENJX0RFVklDRV9JRF9ZQU1BSEFfNzQ0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfWUFNQUhBXzc0NAkweDAwMTAKKyNlbmRpZgorI2lmbmRlZiBQQ0lfREVWSUNFX0lEX1lBTUFIQV83NTQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ZQU1BSEFfNzU0CTB4MDAxMgorI2VuZGlmCisKKy8qCisgKiAgRGlyZWN0IHJlZ2lzdGVycworICovCisKKyNkZWZpbmUgWU1GUkVHKGNoaXAsIHJlZykJCShjaGlwLT5wb3J0ICsgWURTWEdSXyMjcmVnKQorCisjZGVmaW5lCVlEU1hHUl9JTlRGTEFHCQkJMHgwMDA0CisjZGVmaW5lCVlEU1hHUl9BQ1RJVklUWQkJCTB4MDAwNgorI2RlZmluZQlZRFNYR1JfR0xPQkFMQ1RSTAkJMHgwMDA4CisjZGVmaW5lCVlEU1hHUl9aVkNUUkwJCQkweDAwMEEKKyNkZWZpbmUJWURTWEdSX1RJTUVSQ1RSTAkJMHgwMDEwCisjZGVmaW5lCVlEU1hHUl9USU1FUkNPVU5UCQkweDAwMTIKKyNkZWZpbmUJWURTWEdSX1NQRElGT1VUQ1RSTAkJMHgwMDE4CisjZGVmaW5lCVlEU1hHUl9TUERJRk9VVFNUQVRVUwkJMHgwMDFDCisjZGVmaW5lCVlEU1hHUl9FRVBST01DVFJMCQkweDAwMjAKKyNkZWZpbmUJWURTWEdSX1NQRElGSU5DVFJMCQkweDAwMzQKKyNkZWZpbmUJWURTWEdSX1NQRElGSU5TVEFUVVMJCTB4MDAzOAorI2RlZmluZQlZRFNYR1JfRFNQUFJPR1JBTURMCQkweDAwNDgKKyNkZWZpbmUJWURTWEdSX0RMQ05UUkwJCQkweDAwNEMKKyNkZWZpbmUJWURTWEdSX0dQSU9JTklOVEZMQUcJCTB4MDA1MAorI2RlZmluZQlZRFNYR1JfR1BJT0lOSU5URU5BQkxFCQkweDAwNTIKKyNkZWZpbmUJWURTWEdSX0dQSU9JTlNUQVRVUwkJMHgwMDU0CisjZGVmaW5lCVlEU1hHUl9HUElPT1VUQ1RSTAkJMHgwMDU2CisjZGVmaW5lCVlEU1hHUl9HUElPRlVOQ0VOQUJMRQkJMHgwMDU4CisjZGVmaW5lCVlEU1hHUl9HUElPVFlQRUNPTkZJRwkJMHgwMDVBCisjZGVmaW5lCVlEU1hHUl9BQzk3Q01EREFUQQkJMHgwMDYwCisjZGVmaW5lCVlEU1hHUl9BQzk3Q01EQURSCQkweDAwNjIKKyNkZWZpbmUJWURTWEdSX1BSSVNUQVRVU0RBVEEJCTB4MDA2NAorI2RlZmluZQlZRFNYR1JfUFJJU1RBVFVTQURSCQkweDAwNjYKKyNkZWZpbmUJWURTWEdSX1NFQ1NUQVRVU0RBVEEJCTB4MDA2OAorI2RlZmluZQlZRFNYR1JfU0VDU1RBVFVTQURSCQkweDAwNkEKKyNkZWZpbmUJWURTWEdSX1NFQ0NPTkZJRwkJMHgwMDcwCisjZGVmaW5lCVlEU1hHUl9MRUdBQ1lPVVRWT0wJCTB4MDA4MAorI2RlZmluZQlZRFNYR1JfTEVHQUNZT1VUVk9MTAkJMHgwMDgwCisjZGVmaW5lCVlEU1hHUl9MRUdBQ1lPVVRWT0xSCQkweDAwODIKKyNkZWZpbmUJWURTWEdSX05BVElWRURBQ09VVFZPTAkJMHgwMDg0CisjZGVmaW5lCVlEU1hHUl9OQVRJVkVEQUNPVVRWT0xMCQkweDAwODQKKyNkZWZpbmUJWURTWEdSX05BVElWRURBQ09VVFZPTFIJCTB4MDA4NgorI2RlZmluZQlZRFNYR1JfWlZPVVRWT0wJCQkweDAwODgKKyNkZWZpbmUJWURTWEdSX1pWT1VUVk9MTAkJMHgwMDg4CisjZGVmaW5lCVlEU1hHUl9aVk9VVFZPTFIJCTB4MDA4QQorI2RlZmluZQlZRFNYR1JfU0VDQURDT1VUVk9MCQkweDAwOEMKKyNkZWZpbmUJWURTWEdSX1NFQ0FEQ09VVFZPTEwJCTB4MDA4QworI2RlZmluZQlZRFNYR1JfU0VDQURDT1VUVk9MUgkJMHgwMDhFCisjZGVmaW5lCVlEU1hHUl9QUklBRENPVVRWT0wJCTB4MDA5MAorI2RlZmluZQlZRFNYR1JfUFJJQURDT1VUVk9MTAkJMHgwMDkwCisjZGVmaW5lCVlEU1hHUl9QUklBRENPVVRWT0xSCQkweDAwOTIKKyNkZWZpbmUJWURTWEdSX0xFR0FDWUxPT1BWT0wJCTB4MDA5NAorI2RlZmluZQlZRFNYR1JfTEVHQUNZTE9PUFZPTEwJCTB4MDA5NAorI2RlZmluZQlZRFNYR1JfTEVHQUNZTE9PUFZPTFIJCTB4MDA5NgorI2RlZmluZQlZRFNYR1JfTkFUSVZFREFDTE9PUFZPTAkJMHgwMDk4CisjZGVmaW5lCVlEU1hHUl9OQVRJVkVEQUNMT09QVk9MTAkweDAwOTgKKyNkZWZpbmUJWURTWEdSX05BVElWRURBQ0xPT1BWT0xSCTB4MDA5QQorI2RlZmluZQlZRFNYR1JfWlZMT09QVk9MCQkweDAwOUMKKyNkZWZpbmUJWURTWEdSX1pWTE9PUFZPTEwJCTB4MDA5RQorI2RlZmluZQlZRFNYR1JfWlZMT09QVk9MUgkJMHgwMDlFCisjZGVmaW5lCVlEU1hHUl9TRUNBRENMT09QVk9MCQkweDAwQTAKKyNkZWZpbmUJWURTWEdSX1NFQ0FEQ0xPT1BWT0xMCQkweDAwQTAKKyNkZWZpbmUJWURTWEdSX1NFQ0FEQ0xPT1BWT0xSCQkweDAwQTIKKyNkZWZpbmUJWURTWEdSX1BSSUFEQ0xPT1BWT0wJCTB4MDBBNAorI2RlZmluZQlZRFNYR1JfUFJJQURDTE9PUFZPTEwJCTB4MDBBNAorI2RlZmluZQlZRFNYR1JfUFJJQURDTE9PUFZPTFIJCTB4MDBBNgorI2RlZmluZQlZRFNYR1JfTkFUSVZFQURDSU5WT0wJCTB4MDBBOAorI2RlZmluZQlZRFNYR1JfTkFUSVZFQURDSU5WT0xMCQkweDAwQTgKKyNkZWZpbmUJWURTWEdSX05BVElWRUFEQ0lOVk9MUgkJMHgwMEFBCisjZGVmaW5lCVlEU1hHUl9OQVRJVkVEQUNJTlZPTAkJMHgwMEFDCisjZGVmaW5lCVlEU1hHUl9OQVRJVkVEQUNJTlZPTEwJCTB4MDBBQworI2RlZmluZQlZRFNYR1JfTkFUSVZFREFDSU5WT0xSCQkweDAwQUUKKyNkZWZpbmUJWURTWEdSX0JVRjQ0MU9VVFZPTAkJMHgwMEIwCisjZGVmaW5lCVlEU1hHUl9CVUY0NDFPVVRWT0xMCQkweDAwQjAKKyNkZWZpbmUJWURTWEdSX0JVRjQ0MU9VVFZPTFIJCTB4MDBCMgorI2RlZmluZQlZRFNYR1JfQlVGNDQxTE9PUFZPTAkJMHgwMEI0CisjZGVmaW5lCVlEU1hHUl9CVUY0NDFMT09QVk9MTAkJMHgwMEI0CisjZGVmaW5lCVlEU1hHUl9CVUY0NDFMT09QVk9MUgkJMHgwMEI2CisjZGVmaW5lCVlEU1hHUl9TUERJRk9VVFZPTAkJMHgwMEI4CisjZGVmaW5lCVlEU1hHUl9TUERJRk9VVFZPTEwJCTB4MDBCOAorI2RlZmluZQlZRFNYR1JfU1BESUZPVVRWT0xSCQkweDAwQkEKKyNkZWZpbmUJWURTWEdSX1NQRElGTE9PUFZPTAkJMHgwMEJDCisjZGVmaW5lCVlEU1hHUl9TUERJRkxPT1BWT0xMCQkweDAwQkMKKyNkZWZpbmUJWURTWEdSX1NQRElGTE9PUFZPTFIJCTB4MDBCRQorI2RlZmluZQlZRFNYR1JfQURDU0xPVFNSCQkweDAwQzAKKyNkZWZpbmUJWURTWEdSX1JFQ1NMT1RTUgkJMHgwMEM0CisjZGVmaW5lCVlEU1hHUl9BRENGT1JNQVQJCTB4MDBDOAorI2RlZmluZQlZRFNYR1JfUkVDRk9STUFUCQkweDAwQ0MKKyNkZWZpbmUJWURTWEdSX1A0NFNMT1RTUgkJMHgwMEQwCisjZGVmaW5lCVlEU1hHUl9TVEFUVVMJCQkweDAxMDAKKyNkZWZpbmUJWURTWEdSX0NUUkxTRUxFQ1QJCTB4MDEwNAorI2RlZmluZQlZRFNYR1JfTU9ERQkJCTB4MDEwOAorI2RlZmluZQlZRFNYR1JfU0FNUExFQ09VTlQJCTB4MDEwQworI2RlZmluZQlZRFNYR1JfTlVNT0ZTQU1QTEVTCQkweDAxMTAKKyNkZWZpbmUJWURTWEdSX0NPTkZJRwkJCTB4MDExNAorI2RlZmluZQlZRFNYR1JfUExBWUNUUkxTSVpFCQkweDAxNDAKKyNkZWZpbmUJWURTWEdSX1JFQ0NUUkxTSVpFCQkweDAxNDQKKyNkZWZpbmUJWURTWEdSX0VGRkNUUkxTSVpFCQkweDAxNDgKKyNkZWZpbmUJWURTWEdSX1dPUktTSVpFCQkJMHgwMTRDCisjZGVmaW5lCVlEU1hHUl9NQVBPRlJFQwkJCTB4MDE1MAorI2RlZmluZQlZRFNYR1JfTUFQT0ZFRkZFQ1QJCTB4MDE1NAorI2RlZmluZQlZRFNYR1JfUExBWUNUUkxCQVNFCQkweDAxNTgKKyNkZWZpbmUJWURTWEdSX1JFQ0NUUkxCQVNFCQkweDAxNUMKKyNkZWZpbmUJWURTWEdSX0VGRkNUUkxCQVNFCQkweDAxNjAKKyNkZWZpbmUJWURTWEdSX1dPUktCQVNFCQkJMHgwMTY0CisjZGVmaW5lCVlEU1hHUl9EU1BJTlNUUkFNCQkweDEwMDAKKyNkZWZpbmUJWURTWEdSX0NUUkxJTlNUUkFNCQkweDQwMDAKKworI2RlZmluZSBZRFNYR19BQzk3UkVBRENNRAkJMHg4MDAwCisjZGVmaW5lIFlEU1hHX0FDOTdXUklURUNNRAkJMHgwMDAwCisKKyNkZWZpbmUgUENJUl9EU1hHX0xFR0FDWQkJMHg0MAorI2RlZmluZSBQQ0lSX0RTWEdfRUxFR0FDWQkJMHg0MgorI2RlZmluZSBQQ0lSX0RTWEdfQ1RSTAkJCTB4NDgKKyNkZWZpbmUgUENJUl9EU1hHX1BXUkNUUkwxCQkweDRhCisjZGVmaW5lIFBDSVJfRFNYR19QV1JDVFJMMgkJMHg0ZQorI2RlZmluZSBQQ0lSX0RTWEdfRk1CQVNFCQkweDYwCisjZGVmaW5lIFBDSVJfRFNYR19TQkJBU0UJCTB4NjIKKyNkZWZpbmUgUENJUl9EU1hHX01QVTQwMUJBU0UJCTB4NjQKKyNkZWZpbmUgUENJUl9EU1hHX0pPWUJBU0UJCTB4NjYKKworI2RlZmluZSBZRFNYR19EU1BMRU5HVEgJCQkweDAwODAKKyNkZWZpbmUgWURTWEdfQ1RSTExFTkdUSAkJMHgzMDAwCisKKyNkZWZpbmUgWURTWEdfREVGQVVMVF9XT1JLX1NJWkUJCTB4MDQwMAorCisjZGVmaW5lIFlEU1hHX1BMQVlCQUNLX1ZPSUNFUwkJNjQKKyNkZWZpbmUgWURTWEdfQ0FQVFVSRV9WT0lDRVMJCTIKKyNkZWZpbmUgWURTWEdfRUZGRUNUX1ZPSUNFUwkJNQorCisjZGVmaW5lIFlNRlBDSV9MRUdBQ1lfU0JFTgkoMSA8PCAwKQkvKiBzb3VuZGJsYXN0ZXIgZW5hYmxlICovCisjZGVmaW5lIFlNRlBDSV9MRUdBQ1lfRk1FTgkoMSA8PCAxKQkvKiBPUEwzIGVuYWJsZSAqLworI2RlZmluZSBZTUZQQ0lfTEVHQUNZX0pQRU4JKDEgPDwgMikJLyogam95c3RpY2sgZW5hYmxlICovCisjZGVmaW5lIFlNRlBDSV9MRUdBQ1lfTUVOCSgxIDw8IDMpCS8qIE1QVTQwMSBlbmFibGUgKi8KKyNkZWZpbmUgWU1GUENJX0xFR0FDWV9NSUVOCSgxIDw8IDQpCS8qIE1QVSBSWCBpcnEgZW5hYmxlICovCisjZGVmaW5lIFlNRlBDSV9MRUdBQ1lfSU9CSVRTCSgxIDw8IDUpCS8qIGkvbyBiaXRzIHJhbmdlLCAwID0gMTZiaXQsIDEgPTEwYml0ICovCisjZGVmaW5lIFlNRlBDSV9MRUdBQ1lfU0RNQQkoMyA8PCA2KQkvKiBTQiBETUEgc2VsZWN0ICovCisjZGVmaW5lIFlNRlBDSV9MRUdBQ1lfU0JJUlEJKDcgPDwgOCkJLyogU0IgSVJRIHNlbGVjdCAqLworI2RlZmluZSBZTUZQQ0lfTEVHQUNZX01QVUlSUQkoNyA8PCAxMSkJLyogTVBVIElSUSBzZWxlY3QgKi8KKyNkZWZpbmUgWU1GUENJX0xFR0FDWV9TSUVOCSgxIDw8IDE0KQkvKiBzZXJpYWxpemVkIElSUSAqLworI2RlZmluZSBZTUZQQ0lfTEVHQUNZX0xBRAkoMSA8PCAxNSkJLyogbGVnYWN5IGF1ZGlvIGRpc2FibGUgKi8KKworI2RlZmluZSBZTUZQQ0lfTEVHQUNZMl9GTUlPCSgzIDw8IDApCS8qIE9QTDMgaS9vIGFkZHJlc3MgKDcyNC83NDApICovCisjZGVmaW5lIFlNRlBDSV9MRUdBQ1kyX1NCSU8JKDMgPDwgMikJLyogU0IgaS9vIGFkZHJlc3MgKDcyNC83NDApICovCisjZGVmaW5lIFlNRlBDSV9MRUdBQ1kyX01QVUlPCSgzIDw8IDQpCS8qIE1QVTQwMSBpL28gYWRkcmVzcyAoNzI0Lzc0MCkgKi8KKyNkZWZpbmUgWU1GUENJX0xFR0FDWTJfSlNJTwkoMyA8PCA2KQkvKiBqb3lzdGljayBpL28gYWRkcmVzcyAoNzI0Lzc0MCkgKi8KKyNkZWZpbmUgWU1GUENJX0xFR0FDWTJfTUFJTQkoMSA8PCA4KQkvKiBNUFU0MDEgYWNrIGludHIgbWFzayAqLworI2RlZmluZSBZTUZQQ0lfTEVHQUNZMl9TTU9ECSgzIDw8IDExKQkvKiBTQiBETUEgbW9kZSAqLworI2RlZmluZSBZTUZQQ0lfTEVHQUNZMl9TQlZFUgkoMyA8PCAxMykJLyogU0IgdmVyc2lvbiBzZWxlY3QgKi8KKyNkZWZpbmUgWU1GUENJX0xFR0FDWTJfSU1PRAkoMSA8PCAxNSkJLyogbGVnYWN5IElSUSBtb2RlICovCisvKiBTSUVOOklNT0QgMDowID0gbGVnYWN5IGlycSwgMDoxID0gSU5UQSwgMTowID0gc2VyaWFsaXplZCBJUlEgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX0dBTUVQT1JUKSB8fCAoZGVmaW5lZChNT0RVTEUpICYmIGRlZmluZWQoQ09ORklHX0dBTUVQT1JUX01PRFVMRSkpCisjZGVmaW5lIFNVUFBPUlRfSk9ZU1RJQ0sKKyNlbmRpZgorCisvKgorICoKKyAqLworCit0eXBlZGVmIHN0cnVjdCBfc25kX3ltZnBjaV9wbGF5YmFja19iYW5rIHsKKwl1MzIgZm9ybWF0OworCXUzMiBsb29wX2RlZmF1bHQ7CisJdTMyIGJhc2U7CQkJLyogMzItYml0IGFkZHJlc3MgKi8KKwl1MzIgbG9vcF9zdGFydDsJCQkvKiAzMi1iaXQgb2Zmc2V0ICovCisJdTMyIGxvb3BfZW5kOwkJCS8qIDMyLWJpdCBvZmZzZXQgKi8KKwl1MzIgbG9vcF9mcmFjOwkJCS8qIDgtYml0IGZyYWN0aW9uIC0gbG9vcF9zdGFydCAqLworCXUzMiBkZWx0YV9lbmQ7CQkJLyogcGl0Y2ggZGVsdGEgZW5kICovCisJdTMyIGxwZktfZW5kOworCXUzMiBlZ19nYWluX2VuZDsKKwl1MzIgbGVmdF9nYWluX2VuZDsKKwl1MzIgcmlnaHRfZ2Fpbl9lbmQ7CisJdTMyIGVmZjFfZ2Fpbl9lbmQ7CisJdTMyIGVmZjJfZ2Fpbl9lbmQ7CisJdTMyIGVmZjNfZ2Fpbl9lbmQ7CisJdTMyIGxwZlE7CisJdTMyIHN0YXR1czsKKwl1MzIgbnVtX29mX2ZyYW1lczsKKwl1MzIgbG9vcF9jb3VudDsKKwl1MzIgc3RhcnQ7CisJdTMyIHN0YXJ0X2ZyYWM7CisJdTMyIGRlbHRhOworCXUzMiBscGZLOworCXUzMiBlZ19nYWluOworCXUzMiBsZWZ0X2dhaW47CisJdTMyIHJpZ2h0X2dhaW47CisJdTMyIGVmZjFfZ2FpbjsKKwl1MzIgZWZmMl9nYWluOworCXUzMiBlZmYzX2dhaW47CisJdTMyIGxwZkQxOworCXUzMiBscGZEMjsKK30gc25kX3ltZnBjaV9wbGF5YmFja19iYW5rX3Q7CisKK3R5cGVkZWYgc3RydWN0IF9zbmRfeW1mcGNpX2NhcHR1cmVfYmFuayB7CisJdTMyIGJhc2U7CQkJLyogMzItYml0IGFkZHJlc3MgKi8KKwl1MzIgbG9vcF9lbmQ7CQkJLyogMzItYml0IG9mZnNldCAqLworCXUzMiBzdGFydDsJCQkvKiAzMi1iaXQgb2Zmc2V0ICovCisJdTMyIG51bV9vZl9sb29wczsJCS8qIGNvdW50ZXIgKi8KK30gc25kX3ltZnBjaV9jYXB0dXJlX2JhbmtfdDsKKwordHlwZWRlZiBzdHJ1Y3QgX3NuZF95bWZwY2lfZWZmZWN0X2JhbmsgeworCXUzMiBiYXNlOwkJCS8qIDMyLWJpdCBhZGRyZXNzICovCisJdTMyIGxvb3BfZW5kOwkJCS8qIDMyLWJpdCBvZmZzZXQgKi8KKwl1MzIgc3RhcnQ7CQkJLyogMzItYml0IG9mZnNldCAqLworCXUzMiB0ZW1wOworfSBzbmRfeW1mcGNpX2VmZmVjdF9iYW5rX3Q7CisKK3R5cGVkZWYgc3RydWN0IF9zbmRfeW1mcGNpX3ZvaWNlIHltZnBjaV92b2ljZV90OwordHlwZWRlZiBzdHJ1Y3QgX3NuZF95bWZwY2lfcGNtIHltZnBjaV9wY21fdDsKK3R5cGVkZWYgc3RydWN0IF9zbmRfeW1mcGNpIHltZnBjaV90OworCit0eXBlZGVmIGVudW0geworCVlNRlBDSV9QQ00sCisJWU1GUENJX1NZTlRILAorCVlNRlBDSV9NSURJCit9IHltZnBjaV92b2ljZV90eXBlX3Q7CisKK3N0cnVjdCBfc25kX3ltZnBjaV92b2ljZSB7CisJeW1mcGNpX3QgKmNoaXA7CisJaW50IG51bWJlcjsKKwl1bnNpZ25lZCBpbnQgdXNlOiAxLAorCSAgICBwY206IDEsCisJICAgIHN5bnRoOiAxLAorCSAgICBtaWRpOiAxOworCXNuZF95bWZwY2lfcGxheWJhY2tfYmFua190ICpiYW5rOworCWRtYV9hZGRyX3QgYmFua19hZGRyOworCXZvaWQgKCppbnRlcnJ1cHQpKHltZnBjaV90ICpjaGlwLCB5bWZwY2lfdm9pY2VfdCAqdm9pY2UpOworCXltZnBjaV9wY21fdCAqeXBjbTsKK307CisKK3R5cGVkZWYgZW51bSB7CisJUExBWUJBQ0tfVk9JQ0UsCisJQ0FQVFVSRV9SRUMsCisJQ0FQVFVSRV9BQzk3LAorCUVGRkVDVF9EUllfTEVGVCwKKwlFRkZFQ1RfRFJZX1JJR0hULAorCUVGRkVDVF9FRkYxLAorCUVGRkVDVF9FRkYyLAorCUVGRkVDVF9FRkYzCit9IHNuZF95bWZwY2lfcGNtX3R5cGVfdDsKKworc3RydWN0IF9zbmRfeW1mcGNpX3BjbSB7CisJeW1mcGNpX3QgKmNoaXA7CisJc25kX3ltZnBjaV9wY21fdHlwZV90IHR5cGU7CisJc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtOworCXltZnBjaV92b2ljZV90ICp2b2ljZXNbMl07CS8qIHBsYXliYWNrIG9ubHkgKi8KKwl1bnNpZ25lZCBpbnQgcnVubmluZzogMTsKKwl1bnNpZ25lZCBpbnQgb3V0cHV0X2Zyb250OiAxOworCXVuc2lnbmVkIGludCBvdXRwdXRfcmVhcjogMTsKKwl1MzIgcGVyaW9kX3NpemU7CQkvKiBjYWNoZWQgZnJvbSBydW50aW1lLT5wZXJpb2Rfc2l6ZSAqLworCXUzMiBidWZmZXJfc2l6ZTsJCS8qIGNhY2hlZCBmcm9tIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplICovCisJdTMyIHBlcmlvZF9wb3M7CisJdTMyIGxhc3RfcG9zOworCXUzMiBjYXB0dXJlX2JhbmtfbnVtYmVyOworCXUzMiBzaGlmdDsKK307CisKK3N0cnVjdCBfc25kX3ltZnBjaSB7CisJaW50IGlycTsKKworCXVuc2lnbmVkIGludCBkZXZpY2VfaWQ7CS8qIFBDSSBkZXZpY2UgSUQgKi8KKwl1bnNpZ25lZCBpbnQgcmV2OwkvKiBQQ0kgcmV2aXNpb24gKi8KKwl1bnNpZ25lZCBsb25nIHJlZ19hcmVhX3BoeXM7CisJdm9pZCBfX2lvbWVtICpyZWdfYXJlYV92aXJ0OworCXN0cnVjdCByZXNvdXJjZSAqcmVzX3JlZ19hcmVhOworCXN0cnVjdCByZXNvdXJjZSAqZm1fcmVzOworCXN0cnVjdCByZXNvdXJjZSAqbXB1X3JlczsKKworCXVuc2lnbmVkIHNob3J0IG9sZF9sZWdhY3lfY3RybDsKKyNpZmRlZiBTVVBQT1JUX0pPWVNUSUNLCisJc3RydWN0IGdhbWVwb3J0ICpnYW1lcG9ydDsKKyNlbmRpZgorCisJc3RydWN0IHNuZF9kbWFfYnVmZmVyIHdvcmtfcHRyOworCisJdW5zaWduZWQgaW50IGJhbmtfc2l6ZV9wbGF5YmFjazsKKwl1bnNpZ25lZCBpbnQgYmFua19zaXplX2NhcHR1cmU7CisJdW5zaWduZWQgaW50IGJhbmtfc2l6ZV9lZmZlY3Q7CisJdW5zaWduZWQgaW50IHdvcmtfc2l6ZTsKKworCXZvaWQgKmJhbmtfYmFzZV9wbGF5YmFjazsKKwl2b2lkICpiYW5rX2Jhc2VfY2FwdHVyZTsKKwl2b2lkICpiYW5rX2Jhc2VfZWZmZWN0OworCXZvaWQgKndvcmtfYmFzZTsKKwlkbWFfYWRkcl90IGJhbmtfYmFzZV9wbGF5YmFja19hZGRyOworCWRtYV9hZGRyX3QgYmFua19iYXNlX2NhcHR1cmVfYWRkcjsKKwlkbWFfYWRkcl90IGJhbmtfYmFzZV9lZmZlY3RfYWRkcjsKKwlkbWFfYWRkcl90IHdvcmtfYmFzZV9hZGRyOworCXN0cnVjdCBzbmRfZG1hX2J1ZmZlciBhYzNfdG1wX2Jhc2U7CisKKwl1MzIgKmN0cmxfcGxheWJhY2s7CisJc25kX3ltZnBjaV9wbGF5YmFja19iYW5rX3QgKmJhbmtfcGxheWJhY2tbWURTWEdfUExBWUJBQ0tfVk9JQ0VTXVsyXTsKKwlzbmRfeW1mcGNpX2NhcHR1cmVfYmFua190ICpiYW5rX2NhcHR1cmVbWURTWEdfQ0FQVFVSRV9WT0lDRVNdWzJdOworCXNuZF95bWZwY2lfZWZmZWN0X2JhbmtfdCAqYmFua19lZmZlY3RbWURTWEdfRUZGRUNUX1ZPSUNFU11bMl07CisKKwlpbnQgc3RhcnRfY291bnQ7CisKKwl1MzIgYWN0aXZlX2Jhbms7CisJeW1mcGNpX3ZvaWNlX3Qgdm9pY2VzWzY0XTsKKworCWFjOTdfYnVzX3QgKmFjOTdfYnVzOworCWFjOTdfdCAqYWM5NzsKKwlzbmRfcmF3bWlkaV90ICpyYXdtaWRpOworCXNuZF90aW1lcl90ICp0aW1lcjsKKworCXN0cnVjdCBwY2lfZGV2ICpwY2k7CisJc25kX2NhcmRfdCAqY2FyZDsKKwlzbmRfcGNtX3QgKnBjbTsKKwlzbmRfcGNtX3QgKnBjbTI7CisJc25kX3BjbV90ICpwY21fc3BkaWY7CisJc25kX3BjbV90ICpwY21fNGNoOworCXNuZF9wY21fc3Vic3RyZWFtX3QgKmNhcHR1cmVfc3Vic3RyZWFtW1lEU1hHX0NBUFRVUkVfVk9JQ0VTXTsKKwlzbmRfcGNtX3N1YnN0cmVhbV90ICplZmZlY3Rfc3Vic3RyZWFtW1lEU1hHX0VGRkVDVF9WT0lDRVNdOworCXNuZF9rY29udHJvbF90ICpjdGxfdm9sX3JlY3NyYzsKKwlzbmRfa2NvbnRyb2xfdCAqY3RsX3ZvbF9hZGNyZWM7CisJc25kX2tjb250cm9sX3QgKmN0bF92b2xfc3BkaWZyZWM7CisJdW5zaWduZWQgc2hvcnQgc3BkaWZfYml0cywgc3BkaWZfcGNtX2JpdHM7CisJc25kX2tjb250cm9sX3QgKnNwZGlmX3BjbV9jdGw7CisJaW50IG1vZGVfZHVwNGNoOworCWludCByZWFyX29wZW5lZDsKKwlpbnQgc3BkaWZfb3BlbmVkOworCisJc3BpbmxvY2tfdCByZWdfbG9jazsKKwlzcGlubG9ja190IHZvaWNlX2xvY2s7CisJd2FpdF9xdWV1ZV9oZWFkX3QgaW50ZXJydXB0X3NsZWVwOworCWF0b21pY190IGludGVycnVwdF9zbGVlcF9jb3VudDsKKwlzbmRfaW5mb19lbnRyeV90ICpwcm9jX2VudHJ5OworCisjaWZkZWYgQ09ORklHX1BNCisJdTMyICpzYXZlZF9yZWdzOworCXUzMiBzYXZlZF95ZHN4Z3JfbW9kZTsKKyNlbmRpZgorfTsKKworaW50IHNuZF95bWZwY2lfY3JlYXRlKHNuZF9jYXJkX3QgKiBjYXJkLAorCQkgICAgICBzdHJ1Y3QgcGNpX2RldiAqcGNpLAorCQkgICAgICB1bnNpZ25lZCBzaG9ydCBvbGRfbGVnYWN5X2N0cmwsCisJCSAgICAgIHltZnBjaV90ICoqIHJjb2RlYyk7Cit2b2lkIHNuZF95bWZwY2lfZnJlZV9nYW1lcG9ydCh5bWZwY2lfdCAqY2hpcCk7CisKK2ludCBzbmRfeW1mcGNpX3BjbSh5bWZwY2lfdCAqY2hpcCwgaW50IGRldmljZSwgc25kX3BjbV90ICoqcnBjbSk7CitpbnQgc25kX3ltZnBjaV9wY20yKHltZnBjaV90ICpjaGlwLCBpbnQgZGV2aWNlLCBzbmRfcGNtX3QgKipycGNtKTsKK2ludCBzbmRfeW1mcGNpX3BjbV9zcGRpZih5bWZwY2lfdCAqY2hpcCwgaW50IGRldmljZSwgc25kX3BjbV90ICoqcnBjbSk7CitpbnQgc25kX3ltZnBjaV9wY21fNGNoKHltZnBjaV90ICpjaGlwLCBpbnQgZGV2aWNlLCBzbmRfcGNtX3QgKipycGNtKTsKK2ludCBzbmRfeW1mcGNpX21peGVyKHltZnBjaV90ICpjaGlwLCBpbnQgcmVhcl9zd2l0Y2gpOworaW50IHNuZF95bWZwY2lfdGltZXIoeW1mcGNpX3QgKmNoaXAsIGludCBkZXZpY2UpOworCisjZW5kaWYgLyogX19TT1VORF9ZTUZQQ0lfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS92aWRlby9hdHkxMjguaCBiL2luY2x1ZGUvdmlkZW8vYXR5MTI4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA3OWJlYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvdmlkZW8vYXR5MTI4LmgKQEAgLTAsMCArMSw0MjIgQEAKKy8qICAkSWQ6IGF0eTEyOC5oLHYgMS4xIDE5OTkvMTAvMTIgMTE6MDA6NDAgZ2VlcnQgRXhwICQKKyAqICBsaW51eC9kcml2ZXJzL3ZpZGVvL2F0eTEyOC5oCisgKiAgUmVnaXN0ZXIgZGVmaW5pdGlvbnMgZm9yIEFUSSBSYWdlMTI4IGJvYXJkcworICoKKyAqICBBbnRob255IFRvbmcgPGF0b25nQHVpdWMuZWR1PiwgMTk5OQorICogIEJyYWQgRG91Z2xhcyA8YnJhZEBuZXJ1by5jb20+LCAyMDAwCisgKi8KKworI2lmbmRlZiBSRUdfUkFHRTEyOF9ICisjZGVmaW5lIFJFR19SQUdFMTI4X0gKKworI2RlZmluZSBDTE9DS19DTlRMX0lOREVYCQkJMHgwMDA4CisjZGVmaW5lIENMT0NLX0NOVExfREFUQQkJCQkweDAwMGMKKyNkZWZpbmUgQklPU18wX1NDUkFUQ0gJCQkJMHgwMDEwCisjZGVmaW5lIEJVU19DTlRMCQkJCTB4MDAzMAorI2RlZmluZSBCVVNfQ05UTDEJCQkJMHgwMDM0CisjZGVmaW5lIEdFTl9JTlRfQ05UTAkJCQkweDAwNDAKKyNkZWZpbmUgQ1JUQ19HRU5fQ05UTAkJCQkweDAwNTAKKyNkZWZpbmUgQ1JUQ19FWFRfQ05UTAkJCQkweDAwNTQKKyNkZWZpbmUgREFDX0NOVEwJCQkJMHgwMDU4CisjZGVmaW5lIEkyQ19DTlRMXzEJCQkJMHgwMDk0CisjZGVmaW5lIFBBTEVUVEVfSU5ERVgJCQkJMHgwMGIwCisjZGVmaW5lIFBBTEVUVEVfREFUQQkJCQkweDAwYjQKKyNkZWZpbmUgQ09ORklHX0NOVEwJCQkJMHgwMGUwCisjZGVmaW5lIEdFTl9SRVNFVF9DTlRMCQkJCTB4MDBmMAorI2RlZmluZSBDT05GSUdfTUVNU0laRQkJCQkweDAwZjgKKyNkZWZpbmUgTUVNX0NOVEwJCQkJMHgwMTQwCisjZGVmaW5lIE1FTV9QT1dFUl9NSVNDCQkJCTB4MDE1YworI2RlZmluZSBBR1BfQkFTRQkJCQkweDAxNzAKKyNkZWZpbmUgQUdQX0NOVEwJCQkJMHgwMTc0CisjZGVmaW5lIEFHUF9BUEVSX09GRlNFVAkJCQkweDAxNzgKKyNkZWZpbmUgUENJX0dBUlRfUEFHRQkJCQkweDAxN2MKKyNkZWZpbmUgUENfTkdVSV9NT0RFCQkJCTB4MDE4MAorI2RlZmluZSBQQ19OR1VJX0NUTFNUQVQJCQkJMHgwMTg0CisjZGVmaW5lIE1QUF9UQl9DT05GSUcJCQkJMHgwMUMwCisjZGVmaW5lIE1QUF9HUF9DT05GSUcJCQkJMHgwMUM4CisjZGVmaW5lIFZJUEhfQ09OVFJPTAkJCQkweDAxRDAKKyNkZWZpbmUgQ1JUQ19IX1RPVEFMX0RJU1AJCQkweDAyMDAKKyNkZWZpbmUgQ1JUQ19IX1NZTkNfU1RSVF9XSUQJCQkweDAyMDQKKyNkZWZpbmUgQ1JUQ19WX1RPVEFMX0RJU1AJCQkweDAyMDgKKyNkZWZpbmUgQ1JUQ19WX1NZTkNfU1RSVF9XSUQJCQkweDAyMGMKKyNkZWZpbmUgQ1JUQ19WTElORV9DUk5UX1ZMSU5FCQkJMHgwMjEwCisjZGVmaW5lIENSVENfQ1JOVF9GUkFNRQkJCQkweDAyMTQKKyNkZWZpbmUgQ1JUQ19HVUlfVFJJR19WTElORQkJCTB4MDIxOAorI2RlZmluZSBDUlRDX09GRlNFVAkJCQkweDAyMjQKKyNkZWZpbmUgQ1JUQ19PRkZTRVRfQ05UTAkJCTB4MDIyOAorI2RlZmluZSBDUlRDX1BJVENICQkJCTB4MDIyYworI2RlZmluZSBPVlJfQ0xSCQkJCQkweDAyMzAKKyNkZWZpbmUgT1ZSX1dJRF9MRUZUX1JJR0hUCQkJMHgwMjM0CisjZGVmaW5lIE9WUl9XSURfVE9QX0JPVFRPTQkJCTB4MDIzOAorI2RlZmluZSBMVkRTX0dFTl9DTlRMCQkJCTB4MDJkMAorI2RlZmluZSBEREFfQ09ORklHCQkJCTB4MDJlMAorI2RlZmluZSBEREFfT05fT0ZGCQkJCTB4MDJlNAorI2RlZmluZSBWR0FfRERBX0NPTkZJRwkJCQkweDAyZTgKKyNkZWZpbmUgVkdBX0REQV9PTl9PRkYJCQkJMHgwMmVjCisjZGVmaW5lIENSVEMyX0hfVE9UQUxfRElTUAkJCTB4MDMwMAorI2RlZmluZSBDUlRDMl9IX1NZTkNfU1RSVF9XSUQJCQkweDAzMDQKKyNkZWZpbmUgQ1JUQzJfVl9UT1RBTF9ESVNQCQkJMHgwMzA4CisjZGVmaW5lIENSVEMyX1ZfU1lOQ19TVFJUX1dJRAkJCTB4MDMwYworI2RlZmluZSBDUlRDMl9WTElORV9DUk5UX1ZMSU5FCQkJMHgwMzEwCisjZGVmaW5lIENSVEMyX0NSTlRfRlJBTUUJCQkweDAzMTQKKyNkZWZpbmUgQ1JUQzJfR1VJX1RSSUdfVkxJTkUJCQkweDAzMTgKKyNkZWZpbmUgQ1JUQzJfT0ZGU0VUCQkJCTB4MDMyNAorI2RlZmluZSBDUlRDMl9PRkZTRVRfQ05UTAkJCTB4MDMyOAorI2RlZmluZSBDUlRDMl9QSVRDSAkJCQkweDAzMmMKKyNkZWZpbmUgRERBMl9DT05GSUcJCQkJMHgwM2UwCisjZGVmaW5lIEREQTJfT05fT0ZGCQkJCTB4MDNlNAorI2RlZmluZSBDUlRDMl9HRU5fQ05UTAkJCQkweDAzZjgKKyNkZWZpbmUgQ1JUQzJfU1RBVFVTCQkJCTB4MDNmYworI2RlZmluZSBPVjBfU0NBTEVfQ05UTAkJCQkweDA0MjAKKyNkZWZpbmUgU1VCUElDX0NOVEwJCQkJMHgwNTQwCisjZGVmaW5lIFBNNF9CVUZGRVJfT0ZGU0VUCQkJMHgwNzAwCisjZGVmaW5lIFBNNF9CVUZGRVJfQ05UTAkJCQkweDA3MDQKKyNkZWZpbmUgUE00X0JVRkZFUl9XTV9DTlRMCQkJMHgwNzA4CisjZGVmaW5lIFBNNF9CVUZGRVJfRExfUlBUUl9BRERSCQkJMHgwNzBjCisjZGVmaW5lIFBNNF9CVUZGRVJfRExfUlBUUgkJCTB4MDcxMAorI2RlZmluZSBQTTRfQlVGRkVSX0RMX1dQVFIJCQkweDA3MTQKKyNkZWZpbmUgUE00X1ZDX0ZQVV9TRVRVUAkJCTB4MDcxYworI2RlZmluZSBQTTRfRlBVX0NOVEwJCQkJMHgwNzIwCisjZGVmaW5lIFBNNF9WQ19GT1JNQVQJCQkJMHgwNzI0CisjZGVmaW5lIFBNNF9WQ19DTlRMCQkJCTB4MDcyOAorI2RlZmluZSBQTTRfVkNfSTAxCQkJCTB4MDcyYworI2RlZmluZSBQTTRfVkNfVkxPRkYJCQkJMHgwNzMwCisjZGVmaW5lIFBNNF9WQ19WTFNJWkUJCQkJMHgwNzM0CisjZGVmaW5lIFBNNF9JV19JTkRPRkYJCQkJMHgwNzM4CisjZGVmaW5lIFBNNF9JV19JTkRTSVpFCQkJCTB4MDczYworI2RlZmluZSBQTTRfRlBVX0ZQWDAJCQkJMHgwNzQwCisjZGVmaW5lIFBNNF9GUFVfRlBZMAkJCQkweDA3NDQKKyNkZWZpbmUgUE00X0ZQVV9GUFgxCQkJCTB4MDc0OAorI2RlZmluZSBQTTRfRlBVX0ZQWTEJCQkJMHgwNzRjCisjZGVmaW5lIFBNNF9GUFVfRlBYMgkJCQkweDA3NTAKKyNkZWZpbmUgUE00X0ZQVV9GUFkyCQkJCTB4MDc1NAorI2RlZmluZSBQTTRfRlBVX0ZQWTMJCQkJMHgwNzU4CisjZGVmaW5lIFBNNF9GUFVfRlBZNAkJCQkweDA3NWMKKyNkZWZpbmUgUE00X0ZQVV9GUFk1CQkJCTB4MDc2MAorI2RlZmluZSBQTTRfRlBVX0ZQWTYJCQkJMHgwNzY0CisjZGVmaW5lIFBNNF9GUFVfRlBSCQkJCTB4MDc2OAorI2RlZmluZSBQTTRfRlBVX0ZQRwkJCQkweDA3NmMKKyNkZWZpbmUgUE00X0ZQVV9GUEIJCQkJMHgwNzcwCisjZGVmaW5lIFBNNF9GUFVfRlBBCQkJCTB4MDc3NAorI2RlZmluZSBQTTRfRlBVX0lOVFhZMAkJCQkweDA3ODAKKyNkZWZpbmUgUE00X0ZQVV9JTlRYWTEJCQkJMHgwNzg0CisjZGVmaW5lIFBNNF9GUFVfSU5UWFkyCQkJCTB4MDc4OAorI2RlZmluZSBQTTRfRlBVX0lOVEFSR0IJCQkJMHgwNzhjCisjZGVmaW5lIFBNNF9GUFVfRlBUV0lDRUFSRUEJCQkweDA3OTAKKyNkZWZpbmUgUE00X0ZQVV9ETUFKT1IwMQkJCTB4MDc5NAorI2RlZmluZSBQTTRfRlBVX0RNQUpPUjEyCQkJMHgwNzk4CisjZGVmaW5lIFBNNF9GUFVfRE1BSk9SMDIJCQkweDA3OWMKKyNkZWZpbmUgUE00X0ZQVV9TVEFUCQkJCTB4MDdhMAorI2RlZmluZSBQTTRfU1RBVAkJCQkweDA3YjgKKyNkZWZpbmUgUE00X1RFU1RfQ05UTAkJCQkweDA3ZDAKKyNkZWZpbmUgUE00X01JQ1JPQ09ERV9BRERSCQkJMHgwN2Q0CisjZGVmaW5lIFBNNF9NSUNST0NPREVfUkFERFIJCQkweDA3ZDgKKyNkZWZpbmUgUE00X01JQ1JPQ09ERV9EQVRBSAkJCTB4MDdkYworI2RlZmluZSBQTTRfTUlDUk9DT0RFX0RBVEFMCQkJMHgwN2UwCisjZGVmaW5lIFBNNF9DTURGSUZPX0FERFIJCQkweDA3ZTQKKyNkZWZpbmUgUE00X0NNREZJRk9fREFUQUgJCQkweDA3ZTgKKyNkZWZpbmUgUE00X0NNREZJRk9fREFUQUwJCQkweDA3ZWMKKyNkZWZpbmUgUE00X0JVRkZFUl9BRERSCQkJCTB4MDdmMAorI2RlZmluZSBQTTRfQlVGRkVSX0RBVEFICQkJMHgwN2Y0CisjZGVmaW5lIFBNNF9CVUZGRVJfREFUQUwJCQkweDA3ZjgKKyNkZWZpbmUgUE00X01JQ1JPX0NOVEwJCQkJMHgwN2ZjCisjZGVmaW5lIENBUDBfVFJJR19DTlRMCQkJCTB4MDk1MAorI2RlZmluZSBDQVAxX1RSSUdfQ05UTAkJCQkweDA5YzAKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICBHVUkgQmxvY2sgTWVtb3J5IE1hcHBlZCBSZWdpc3RlcnMgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICBUaGVzZSByZWdpc3RlcnMgYXJlIEZJRk9lZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBQTTRfRklGT19EQVRBX0VWRU4JCQkweDEwMDAKKyNkZWZpbmUgUE00X0ZJRk9fREFUQV9PREQJCQkweDEwMDQKKworI2RlZmluZSBEU1RfT0ZGU0VUCQkJCTB4MTQwNAorI2RlZmluZSBEU1RfUElUQ0gJCQkJMHgxNDA4CisjZGVmaW5lIERTVF9XSURUSAkJCQkweDE0MGMKKyNkZWZpbmUgRFNUX0hFSUdIVAkJCQkweDE0MTAKKyNkZWZpbmUgU1JDX1gJCQkJCTB4MTQxNAorI2RlZmluZSBTUkNfWQkJCQkJMHgxNDE4CisjZGVmaW5lIERTVF9YCQkJCQkweDE0MWMKKyNkZWZpbmUgRFNUX1kJCQkJCTB4MTQyMAorI2RlZmluZSBTUkNfUElUQ0hfT0ZGU0VUCQkJMHgxNDI4CisjZGVmaW5lIERTVF9QSVRDSF9PRkZTRVQJCQkweDE0MmMKKyNkZWZpbmUgU1JDX1lfWAkJCQkJMHgxNDM0CisjZGVmaW5lIERTVF9ZX1gJCQkJCTB4MTQzOAorI2RlZmluZSBEU1RfSEVJR0hUX1dJRFRICQkJMHgxNDNjCisjZGVmaW5lIERQX0dVSV9NQVNURVJfQ05UTAkJCTB4MTQ2YworI2RlZmluZSBCUlVTSF9TQ0FMRQkJCQkweDE0NzAKKyNkZWZpbmUgQlJVU0hfWV9YCQkJCTB4MTQ3NAorI2RlZmluZSBEUF9CUlVTSF9CS0dEX0NMUgkJCTB4MTQ3OAorI2RlZmluZSBEUF9CUlVTSF9GUkdEX0NMUgkJCTB4MTQ3YworI2RlZmluZSBEU1RfV0lEVEhfWAkJCQkweDE1ODgKKyNkZWZpbmUgRFNUX0hFSUdIVF9XSURUSF84CQkJMHgxNThjCisjZGVmaW5lIFNSQ19YX1kJCQkJCTB4MTU5MAorI2RlZmluZSBEU1RfWF9ZCQkJCQkweDE1OTQKKyNkZWZpbmUgRFNUX1dJRFRIX0hFSUdIVAkJCTB4MTU5OAorI2RlZmluZSBEU1RfV0lEVEhfWF9JTkNZCQkJMHgxNTljCisjZGVmaW5lIERTVF9IRUlHSFRfWQkJCQkweDE1YTAKKyNkZWZpbmUgRFNUX1hfU1VCCQkJCTB4MTVhNAorI2RlZmluZSBEU1RfWV9TVUIJCQkJMHgxNWE4CisjZGVmaW5lIFNSQ19PRkZTRVQJCQkJMHgxNWFjCisjZGVmaW5lIFNSQ19QSVRDSAkJCQkweDE1YjAKKyNkZWZpbmUgRFNUX0hFSUdIVF9XSURUSF9CVwkJCTB4MTViNAorI2RlZmluZSBDTFJfQ01QX0NOVEwJCQkJMHgxNWMwCisjZGVmaW5lIENMUl9DTVBfQ0xSX1NSQwkJCQkweDE1YzQKKyNkZWZpbmUgQ0xSX0NNUF9DTFJfRFNUCQkJCTB4MTVjOAorI2RlZmluZSBDTFJfQ01QX01BU0sJCQkJMHgxNWNjCisjZGVmaW5lIERQX1NSQ19GUkdEX0NMUgkJCQkweDE1ZDgKKyNkZWZpbmUgRFBfU1JDX0JLR0RfQ0xSCQkJCTB4MTVkYworI2RlZmluZSBEU1RfQlJFU19FUlIJCQkJMHgxNjI4CisjZGVmaW5lIERTVF9CUkVTX0lOQwkJCQkweDE2MmMKKyNkZWZpbmUgRFNUX0JSRVNfREVDCQkJCTB4MTYzMAorI2RlZmluZSBEU1RfQlJFU19MTlRICQkJCTB4MTYzNAorI2RlZmluZSBEU1RfQlJFU19MTlRIX1NVQgkJCTB4MTYzOAorI2RlZmluZSBTQ19MRUZUCQkJCQkweDE2NDAKKyNkZWZpbmUgU0NfUklHSFQJCQkJMHgxNjQ0CisjZGVmaW5lIFNDX1RPUAkJCQkJMHgxNjQ4CisjZGVmaW5lIFNDX0JPVFRPTQkJCQkweDE2NGMKKyNkZWZpbmUgU1JDX1NDX1JJR0hUCQkJCTB4MTY1NAorI2RlZmluZSBTUkNfU0NfQk9UVE9NCQkJCTB4MTY1YworI2RlZmluZSBHVUlfREVCVUcwCQkJCTB4MTZhMAorI2RlZmluZSBHVUlfREVCVUcxCQkJCTB4MTZhNAorI2RlZmluZSBHVUlfVElNRU9VVAkJCQkweDE2YjAKKyNkZWZpbmUgR1VJX1RJTUVPVVQwCQkJCTB4MTZiNAorI2RlZmluZSBHVUlfVElNRU9VVDEJCQkJMHgxNmI4CisjZGVmaW5lIEdVSV9QUk9CRQkJCQkweDE2YmMKKyNkZWZpbmUgRFBfQ05UTAkJCQkJMHgxNmMwCisjZGVmaW5lIERQX0RBVEFUWVBFCQkJCTB4MTZjNAorI2RlZmluZSBEUF9NSVgJCQkJCTB4MTZjOAorI2RlZmluZSBEUF9XUklURV9NQVNLCQkJCTB4MTZjYworI2RlZmluZSBEUF9DTlRMX1hESVJfWURJUl9ZTUFKT1IJCTB4MTZkMAorI2RlZmluZSBERUZBVUxUX09GRlNFVAkJCQkweDE2ZTAKKyNkZWZpbmUgREVGQVVMVF9QSVRDSAkJCQkweDE2ZTQKKyNkZWZpbmUgREVGQVVMVF9TQ19CT1RUT01fUklHSFQJCQkweDE2ZTgKKyNkZWZpbmUgU0NfVE9QX0xFRlQJCQkJMHgxNmVjCisjZGVmaW5lIFNDX0JPVFRPTV9SSUdIVAkJCQkweDE2ZjAKKyNkZWZpbmUgU1JDX1NDX0JPVFRPTV9SSUdIVAkJCTB4MTZmNAorI2RlZmluZSBXQUlUX1VOVElMCQkJCTB4MTcyMAorI2RlZmluZSBDQUNIRV9DTlRMCQkJCTB4MTcyNAorI2RlZmluZSBHVUlfU1RBVAkJCQkweDE3NDAKKyNkZWZpbmUgUENfR1VJX01PREUJCQkJMHgxNzQ0CisjZGVmaW5lIFBDX0dVSV9DVExTVEFUCQkJCTB4MTc0OAorI2RlZmluZSBQQ19ERUJVR19NT0RFCQkJCTB4MTc2MAorI2RlZmluZSBCUkVTX0RTVF9FUlJfREVDCQkJMHgxNzgwCisjZGVmaW5lIFRSQUlMX0JSRVNfVDEyX0VSUl9ERUMJCQkweDE3ODQKKyNkZWZpbmUgVFJBSUxfQlJFU19UMTJfSU5DCQkJMHgxNzg4CisjZGVmaW5lIERQX1QxMl9DTlRMCQkJCTB4MTc4YworI2RlZmluZSBEU1RfQlJFU19UMV9MTlRICQkJMHgxNzkwCisjZGVmaW5lIERTVF9CUkVTX1QyX0xOVEgJCQkweDE3OTQKKyNkZWZpbmUgU0NBTEVfU1JDX0hFSUdIVF9XSURUSAkJCTB4MTk5NAorI2RlZmluZSBTQ0FMRV9PRkZTRVRfMAkJCQkweDE5OTgKKyNkZWZpbmUgU0NBTEVfUElUQ0gJCQkJMHgxOTljCisjZGVmaW5lIFNDQUxFX1hfSU5DCQkJCTB4MTlhMAorI2RlZmluZSBTQ0FMRV9ZX0lOQwkJCQkweDE5YTQKKyNkZWZpbmUgU0NBTEVfSEFDQwkJCQkweDE5YTgKKyNkZWZpbmUgU0NBTEVfVkFDQwkJCQkweDE5YWMKKyNkZWZpbmUgU0NBTEVfRFNUX1hfWQkJCQkweDE5YjAKKyNkZWZpbmUgU0NBTEVfRFNUX0hFSUdIVF9XSURUSAkJCTB4MTliNAorI2RlZmluZSBTQ0FMRV8zRF9DTlRMCQkJCTB4MWEwMAorI2RlZmluZSBTQ0FMRV8zRF9EQVRBVFlQRQkJCTB4MWEyMAorI2RlZmluZSBTRVRVUF9DTlRMCQkJCTB4MWJjNAorI2RlZmluZSBTT0xJRF9DT0xPUgkJCQkweDFiYzgKKyNkZWZpbmUgV0lORE9XX1hZX09GRlNFVAkJCTB4MWJjYworI2RlZmluZSBEUkFXX0xJTkVfUE9JTlQJCQkJMHgxYmQwCisjZGVmaW5lIFNFVFVQX0NOVExfUE00CQkJCTB4MWJkNAorI2RlZmluZSBEU1RfUElUQ0hfT0ZGU0VUX0MJCQkweDFjODAKKyNkZWZpbmUgRFBfR1VJX01BU1RFUl9DTlRMX0MJCQkweDFjODQKKyNkZWZpbmUgU0NfVE9QX0xFRlRfQwkJCQkweDFjODgKKyNkZWZpbmUgU0NfQk9UVE9NX1JJR0hUX0MJCQkweDFjOGMKKworI2RlZmluZSBDTFJfQ01QX01BU0tfM0QJCQkJMHgxQTI4CisjZGVmaW5lIE1JU0NfM0RfU1RBVEVfQ05UTF9SRUcJCQkweDFDQTAKKyNkZWZpbmUgTUNfU1JDMV9DTlRMCQkJCTB4MTlEOAorI2RlZmluZSBURVhfQ05UTAkJCQkweDE4MDAKKworLyogQ09OU1RBTlRTICovCisjZGVmaW5lIEdVSV9BQ1RJVkUJCQkJMHg4MDAwMDAwMAorI2RlZmluZSBFTkdJTkVfSURMRQkJCQkweDAKKworI2RlZmluZSBQTExfV1JfRU4JCQkJMHgwMDAwMDA4MAorCisjZGVmaW5lIENMS19QSU5fQ05UTAkJCQkweDAwMDEKKyNkZWZpbmUgUFBMTF9DTlRMCQkJCTB4MDAwMgorI2RlZmluZSBQUExMX1JFRl9ESVYJCQkJMHgwMDAzCisjZGVmaW5lIFBQTExfRElWXzAJCQkJMHgwMDA0CisjZGVmaW5lIFBQTExfRElWXzEJCQkJMHgwMDA1CisjZGVmaW5lIFBQTExfRElWXzIJCQkJMHgwMDA2CisjZGVmaW5lIFBQTExfRElWXzMJCQkJMHgwMDA3CisjZGVmaW5lIFZDTEtfRUNQX0NOVEwJCQkJMHgwMDA4CisjZGVmaW5lIEhUT1RBTF9DTlRMCQkJCTB4MDAwOQorI2RlZmluZSBYX01QTExfUkVGX0ZCX0RJVgkJCTB4MDAwYQorI2RlZmluZSBYUExMX0NOVEwJCQkJMHgwMDBiCisjZGVmaW5lIFhETExfQ05UTAkJCQkweDAwMGMKKyNkZWZpbmUgWENMS19DTlRMCQkJCTB4MDAwZAorI2RlZmluZSBNUExMX0NOVEwJCQkJMHgwMDBlCisjZGVmaW5lIE1DTEtfQ05UTAkJCQkweDAwMGYKKyNkZWZpbmUgQUdQX1BMTF9DTlRMCQkJCTB4MDAxMAorI2RlZmluZSBGQ1BfQ05UTAkJCQkweDAwMTIKKyNkZWZpbmUgUExMX1RFU1RfQ05UTAkJCQkweDAwMTMKKyNkZWZpbmUgUDJQTExfQ05UTAkJCQkweDAwMmEKKyNkZWZpbmUgUDJQTExfUkVGX0RJVgkJCQkweDAwMmIKKyNkZWZpbmUgUDJQTExfRElWXzAJCQkJMHgwMDJiCisjZGVmaW5lIFBPV0VSX01BTkFHRU1FTlQJCQkweDAwMmYKKworI2RlZmluZSBQUExMX1JFU0VUCQkJCTB4MDEKKyNkZWZpbmUgUFBMTF9BVE9NSUNfVVBEQVRFX0VOCQkJMHgxMDAwMAorI2RlZmluZSBQUExMX1ZHQV9BVE9NSUNfVVBEQVRFX0VOCQkweDIwMDAwCisjZGVmaW5lIFBQTExfUkVGX0RJVl9NQVNLCQkJMHgzRkYKKyNkZWZpbmUgUFBMTF9GQjNfRElWX01BU0sJCQkweDdGRgorI2RlZmluZSBQUExMX1BPU1QzX0RJVl9NQVNLCQkJMHg3MDAwMAorI2RlZmluZSBQUExMX0FUT01JQ19VUERBVEVfUgkJCTB4ODAwMAorI2RlZmluZSBQUExMX0FUT01JQ19VUERBVEVfVwkJCTB4ODAwMAorI2RlZmluZSBNRU1fQ0ZHX1RZUEVfTUFTSwkJCTB4MworI2RlZmluZSBYQ0xLX1NSQ19TRUxfTUFTSwkJCTB4NworI2RlZmluZSBYUExMX0ZCX0RJVl9NQVNLCQkJMHhGRjAwCisjZGVmaW5lIFhfTVBMTF9SRUZfRElWX01BU0sJCQkweEZGCisKKy8qIENSVEMgY29udHJvbCB2YWx1ZXMgKENSVENfR0VOX0NOVEwpICovCisjZGVmaW5lIENSVENfQ1NZTkNfRU4JCQkJMHgwMDAwMDAxMAorCisjZGVmaW5lIENSVEMyX0RCTF9TQ0FOX0VOCQkJMHgwMDAwMDAwMQorI2RlZmluZSBDUlRDMl9ESVNQTEFZX0RJUwkJCTB4MDA4MDAwMDAKKyNkZWZpbmUgQ1JUQzJfRklGT19FWFRTRU5TRQkJCTB4MDAyMDAwMDAKKyNkZWZpbmUgQ1JUQzJfSUNPTl9FTgkJCQkweDAwMTAwMDAwCisjZGVmaW5lIENSVEMyX0NVUl9FTgkJCQkweDAwMDEwMDAwCisjZGVmaW5lIENSVEMyX0VOCQkJCTB4MDIwMDAwMDAKKyNkZWZpbmUgQ1JUQzJfRElTUF9SRVFfRU5fQgkJCTB4MDQwMDAwMDAKKworI2RlZmluZSBDUlRDX1BJWF9XSURUSF9NQVNLCQkJMHgwMDAwMDcwMAorI2RlZmluZSBDUlRDX1BJWF9XSURUSF80QlBQCQkJMHgwMDAwMDEwMAorI2RlZmluZSBDUlRDX1BJWF9XSURUSF84QlBQCQkJMHgwMDAwMDIwMAorI2RlZmluZSBDUlRDX1BJWF9XSURUSF8xNUJQUAkJCTB4MDAwMDAzMDAKKyNkZWZpbmUgQ1JUQ19QSVhfV0lEVEhfMTZCUFAJCQkweDAwMDAwNDAwCisjZGVmaW5lIENSVENfUElYX1dJRFRIXzI0QlBQCQkJMHgwMDAwMDUwMAorI2RlZmluZSBDUlRDX1BJWF9XSURUSF8zMkJQUAkJCTB4MDAwMDA2MDAKKworLyogREFDX0NOVEwgYml0IGNvbnN0YW50cyAqLworI2RlZmluZSBEQUNfOEJJVF9FTgkJCQkweDAwMDAwMTAwCisjZGVmaW5lIERBQ19NQVNLCQkJCTB4RkYwMDAwMDAKKyNkZWZpbmUgREFDX0JMQU5LSU5HCQkJCTB4MDAwMDAwMDQKKyNkZWZpbmUgREFDX1JBTkdFX0NOVEwJCQkJMHgwMDAwMDAwMworI2RlZmluZSBEQUNfQ0xLX1NFTAkJCQkweDAwMDAwMDEwCisjZGVmaW5lIERBQ19QQUxFVFRFX0FDQ0VTU19DTlRMCQkJMHgwMDAwMDAyMAorI2RlZmluZSBEQUNfUEFMRVRURTJfU05PT1BfRU4JCQkweDAwMDAwMDQwCisjZGVmaW5lIERBQ19QRFdOCQkJCTB4MDAwMDgwMDAKKworLyogQ1JUQ19FWFRfQ05UTCAqLworI2RlZmluZSBDUlRfQ1JUQ19PTgkJCQkweDAwMDA4MDAwCisKKy8qIEdFTl9SRVNFVF9DTlRMIGJpdCBjb25zdGFudHMgKi8KKyNkZWZpbmUgU09GVF9SRVNFVF9HVUkJCQkJMHgwMDAwMDAwMQorI2RlZmluZSBTT0ZUX1JFU0VUX1ZDTEsJCQkJMHgwMDAwMDEwMAorI2RlZmluZSBTT0ZUX1JFU0VUX1BDTEsJCQkJMHgwMDAwMDIwMAorI2RlZmluZSBTT0ZUX1JFU0VUX0VDUAkJCQkweDAwMDAwNDAwCisjZGVmaW5lIFNPRlRfUkVTRVRfRElTUEVOR19YQ0xLCQkJMHgwMDAwMDgwMAorCisvKiBQQ19HVUlfQ1RMU1RBVCBiaXQgY29uc3RhbnRzICovCisjZGVmaW5lIFBDX0JVU1lfSU5JVAkJCQkweDEwMDAwMDAwCisjZGVmaW5lIFBDX0JVU1lfR1VJCQkJCTB4MjAwMDAwMDAKKyNkZWZpbmUgUENfQlVTWV9OR1VJCQkJCTB4NDAwMDAwMDAKKyNkZWZpbmUgUENfQlVTWQkJCQkJMHg4MDAwMDAwMAorCisjZGVmaW5lIEJVU19NQVNURVJfRElTCQkJCTB4MDAwMDAwNDAKKyNkZWZpbmUgUE00X0JVRkZFUl9DTlRMX05PTlBNNAkJCTB4MDAwMDAwMDAKKworLyogRFBfREFUQVRZUEUgYml0IGNvbnN0YW50cyAqLworI2RlZmluZSBEU1RfOEJQUAkJCQkweDAwMDAwMDAyCisjZGVmaW5lIERTVF8xNUJQUAkJCQkweDAwMDAwMDAzCisjZGVmaW5lIERTVF8xNkJQUAkJCQkweDAwMDAwMDA0CisjZGVmaW5lIERTVF8yNEJQUAkJCQkweDAwMDAwMDA1CisjZGVmaW5lIERTVF8zMkJQUAkJCQkweDAwMDAwMDA2CisKKyNkZWZpbmUgQlJVU0hfU09MSURDT0xPUgkJCTB4MDAwMDBkMDAKKworLyogRFBfR1VJX01BU1RFUl9DTlRMIGJpdCBjb25zdGFudHMgKi8KKyNkZWZpbmUJR01DX1NSQ19QSVRDSF9PRkZTRVRfREVGQVVMVAkJMHgwMDAwMDAwMAorI2RlZmluZSBHTUNfRFNUX1BJVENIX09GRlNFVF9ERUZBVUxUCQkweDAwMDAwMDAwCisjZGVmaW5lIEdNQ19TUkNfQ0xJUF9ERUZBVUxUCQkJMHgwMDAwMDAwMAorI2RlZmluZSBHTUNfRFNUX0NMSVBfREVGQVVMVAkJCTB4MDAwMDAwMDAKKyNkZWZpbmUgR01DX0JSVVNIX1NPTElEQ09MT1IJCQkweDAwMDAwMGQwCisjZGVmaW5lIEdNQ19TUkNfRFNUQ09MT1IJCQkweDAwMDAzMDAwCisjZGVmaW5lIEdNQ19CWVRFX09SREVSX01TQl9UT19MU0IJCTB4MDAwMDAwMDAKKyNkZWZpbmUgR01DX0RQX1NSQ19SRUNUCQkJCTB4MDIwMDAwMDAKKyNkZWZpbmUgR01DXzNEX0ZDTl9FTl9DTFIJCQkweDAwMDAwMDAwCisjZGVmaW5lIEdNQ19BVVhfQ0xJUF9DTEVBUgkJCTB4MjAwMDAwMDAKKyNkZWZpbmUgR01DX0RTVF9DTFJfQ01QX0ZDTl9DTEVBUgkJMHgxMDAwMDAwMAorI2RlZmluZSBHTUNfV1JJVEVfTUFTS19TRVQJCQkweDQwMDAwMDAwCisjZGVmaW5lIEdNQ19EUF9DT05WRVJTSU9OX1RFTVBfNjUwMAkJMHgwMDAwMDAwMAorCisvKiBEUF9HVUlfTUFTVEVSX0NOVEwgUk9QMyBuYW1lZCBjb25zdGFudHMgKi8KKyNkZWZpbmUJUk9QM19QQVRDT1BZCQkJCTB4MDBmMDAwMDAKKyNkZWZpbmUgUk9QM19TUkNDT1BZCQkJCTB4MDBjYzAwMDAKKworI2RlZmluZSBTUkNfRFNUQ09MT1IJCQkJMHgwMDAzMDAwMAorCisvKiBEUF9DTlRMIGJpdCBjb25zdGFudHMgKi8KKyNkZWZpbmUgRFNUX1hfUklHSFRfVE9fTEVGVAkJCTB4MDAwMDAwMDAKKyNkZWZpbmUgRFNUX1hfTEVGVF9UT19SSUdIVAkJCTB4MDAwMDAwMDEKKyNkZWZpbmUgRFNUX1lfQk9UVE9NX1RPX1RPUAkJCTB4MDAwMDAwMDAKKyNkZWZpbmUgRFNUX1lfVE9QX1RPX0JPVFRPTQkJCTB4MDAwMDAwMDIKKyNkZWZpbmUgRFNUX1hfTUFKT1IJCQkJMHgwMDAwMDAwMAorI2RlZmluZSBEU1RfWV9NQUpPUgkJCQkweDAwMDAwMDA0CisjZGVmaW5lIERTVF9YX1RJTEUJCQkJMHgwMDAwMDAwOAorI2RlZmluZSBEU1RfWV9USUxFCQkJCTB4MDAwMDAwMTAKKyNkZWZpbmUgRFNUX0xBU1RfUEVMCQkJCTB4MDAwMDAwMjAKKyNkZWZpbmUgRFNUX1RSQUlMX1hfUklHSFRfVE9fTEVGVAkJMHgwMDAwMDAwMAorI2RlZmluZSBEU1RfVFJBSUxfWF9MRUZUX1RPX1JJR0hUCQkweDAwMDAwMDQwCisjZGVmaW5lIERTVF9UUkFQX0ZJTExfUklHSFRfVE9fTEVGVAkJMHgwMDAwMDAwMAorI2RlZmluZSBEU1RfVFJBUF9GSUxMX0xFRlRfVE9fUklHSFQJCTB4MDAwMDAwODAKKyNkZWZpbmUgRFNUX0JSRVNfU0lHTgkJCQkweDAwMDAwMTAwCisjZGVmaW5lIERTVF9IT1NUX0JJR19FTkRJQU5fRU4JCQkweDAwMDAwMjAwCisjZGVmaW5lIERTVF9QT0xZTElORV9OT05MQVNUCQkJMHgwMDAwODAwMAorI2RlZmluZSBEU1RfUkFTVEVSX1NUQUxMCQkJMHgwMDAxMDAwMAorI2RlZmluZSBEU1RfUE9MWV9FREdFCQkJCTB4MDAwNDAwMDAKKworLyogRFBfTUlYIGJpdCBjb25zdGFudHMgKi8KKyNkZWZpbmUgRFBfU1JDX1JFQ1QJCQkJMHgwMDAwMDIwMAorI2RlZmluZSBEUF9TUkNfSE9TVAkJCQkweDAwMDAwMzAwCisjZGVmaW5lIERQX1NSQ19IT1NUX0JZVEVBTElHTgkJCTB4MDAwMDA0MDAKKworLyogTFZEU19HRU5fQ05UTCBjb25zdGFudHMgKi8KKyNkZWZpbmUgTFZEU19CTF9NT0RfTEVWRUxfTUFTSwkJCTB4MDAwMGZmMDAKKyNkZWZpbmUgTFZEU19CTF9NT0RfTEVWRUxfU0hJRlQJCQk4CisjZGVmaW5lIExWRFNfQkxfTU9EX0VOCQkJCTB4MDAwMTAwMDAKKyNkZWZpbmUgTFZEU19ESUdJT04JCQkJMHgwMDA0MDAwMAorI2RlZmluZSBMVkRTX0JMT04JCQkJMHgwMDA4MDAwMAorI2RlZmluZSBMVkRTX09OCQkJCQkweDAwMDAwMDAxCisjZGVmaW5lIExWRFNfRElTUExBWV9ESVMJCQkweDAwMDAwMDAyCisjZGVmaW5lIExWRFNfUEFORUxfVFlQRV8yUElYX1BFUl9DTEsJCTB4MDAwMDAwMDQKKyNkZWZpbmUgTFZEU19QQU5FTF8yNEJJVFNfVEZUCQkJMHgwMDAwMDAwOAorI2RlZmluZSBMVkRTX0ZSQU1FX01PRF9OTwkJCTB4MDAwMDAwMDAKKyNkZWZpbmUgTFZEU19GUkFNRV9NT0RfMl9MRVZFTFMJCQkweDAwMDAwMDEwCisjZGVmaW5lIExWRFNfRlJBTUVfTU9EXzRfTEVWRUxTCQkJMHgwMDAwMDAyMAorI2RlZmluZSBMVkRTX1JTVF9GTQkJCQkweDAwMDAwMDQwCisjZGVmaW5lIExWRFNfRU4JCQkJCTB4MDAwMDAwODAKKworLyogQ1JUQzJfR0VOX0NOVEwgY29uc3RhbnRzICovCisjZGVmaW5lIENSVEMyX0VOCQkJCTB4MDIwMDAwMDAKKworLyogUE9XRVJfTUFOQUdFTUVOVCBjb25zdGFudHMgKi8KKyNkZWZpbmUgUFdSX01HVF9PTgkJCQkweDAwMDAwMDAxCisjZGVmaW5lIFBXUl9NR1RfTU9ERV9NQVNLCQkJMHgwMDAwMDAwNgorI2RlZmluZSBQV1JfTUdUX01PREVfUElOCQkJMHgwMDAwMDAwMAorI2RlZmluZSBQV1JfTUdUX01PREVfUkVHSVNURVIJCQkweDAwMDAwMDAyCisjZGVmaW5lIFBXUl9NR1RfTU9ERV9USU1FUgkJCTB4MDAwMDAwMDQKKyNkZWZpbmUgUFdSX01HVF9NT0RFX1BDSQkJCTB4MDAwMDAwMDYKKyNkZWZpbmUgUFdSX01HVF9BVVRPX1BXUl9VUF9FTgkJCTB4MDAwMDAwMDgKKyNkZWZpbmUgUFdSX01HVF9BQ1RJVklUWV9QSU5fT04JCQkweDAwMDAwMDEwCisjZGVmaW5lIFBXUl9NR1RfU1RBTkRCWV9QT0wJCQkweDAwMDAwMDIwCisjZGVmaW5lIFBXUl9NR1RfU1VTUEVORF9QT0wJCQkweDAwMDAwMDQwCisjZGVmaW5lIFBXUl9NR1RfU0VMRl9SRUZSRVNICQkJMHgwMDAwMDA4MAorI2RlZmluZSBQV1JfTUdUX0FDVElWSVRZX1BJTl9FTgkJCTB4MDAwMDAxMDAKKyNkZWZpbmUgUFdSX01HVF9LRVlCRF9TTk9PUAkJCTB4MDAwMDAyMDAKKyNkZWZpbmUgUFdSX01HVF9UUklTVEFURV9NRU1fRU4JCQkweDAwMDAwODAwCisjZGVmaW5lIFBXUl9NR1RfU0VMVzRNUwkJCQkweDAwMDAxMDAwCisjZGVmaW5lIFBXUl9NR1RfU0xPV0RPV05fTUNMSwkJCTB4MDAwMDIwMDAKKworI2RlZmluZSBQTUlfUE1TQ1JfUkVHCQkJCTB4NjAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisvKiB1c2VkIGJ5IEFUSSBidWcgZml4IGZvciBoYXJkd2FyZSBST00gKi8KKyNkZWZpbmUgUkFHRTEyOF9NUFBfVEJfQ09ORklHICAgICAgICAgICAgICAgICAgIDB4MDFjMAorCisjZW5kaWYJCQkJLyogUkVHX1JBR0UxMjhfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS92aWRlby9jaXJydXMuaCBiL2luY2x1ZGUvdmlkZW8vY2lycnVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI3NzZiNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvdmlkZW8vY2lycnVzLmgKQEAgLTAsMCArMSwxMjIgQEAKKy8qCisgKiBkcml2ZXJzL3ZpZGVvL2NsZ2VuZmIuaCAtIENpcnJ1cyBMb2dpYyBjaGlwc2V0IGNvbnN0YW50cworICoKKyAqIENvcHlyaWdodCAxOTk5IEplZmYgR2FyemlrIDxqZ2FyemlrQHBvYm94LmNvbT4KKyAqCisgKiBPcmlnaW5hbCBjbGdlbmZiIGF1dGhvcjogIEZyYW5rIE5ldW1hbm4KKyAqCisgKiBCYXNlZCBvbiByZXR6M2ZiLmMgYW5kIGNsZ2VuLmM6CisgKiAgICAgIENvcHlyaWdodCAoQykgMTk5NyBKZXMgU29yZW5zZW4KKyAqICAgICAgQ29weXJpZ2h0IChDKSAxOTk2IEZyYW5rIE5ldW1hbm4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRm9ybWF0IHRoaXMgY29kZSB3aXRoIEdOVSBpbmRlbnQgJy1rciAtaTggLXBjcycgb3B0aW9ucy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpZm5kZWYgX19DTEdFTkZCX0hfXworI2RlZmluZSBfX0NMR0VORkJfSF9fCisKKy8qIE9MRCBDT01NRU5UOiBkZWZpbml0aW9ucyBmb3IgUGljY29sby9TRDY0IFZHQSBjb250cm9sbGVyIGNoaXAgICAqLworLyogT0xEIENPTU1FTlQ6IHRoZXNlIGRlZmluaXRpb25zIG1pZ2h0IG1vc3Qgb2YgdGhlIHRpbWUgYWxzbyB3b3JrICovCisvKiBPTEQgQ09NTUVOVDogZm9yIG90aGVyIENMLUdENTQyeC81NDN4IGJhc2VkIGJvYXJkcy4uICAgICAgICAgICAgKi8KKworLyoqKiBFeHRlcm5hbC9HZW5lcmFsIFJlZ2lzdGVycyAqKiovCisjZGVmaW5lIENMX1BPUzEwMgkweDEwMiAgCS8qIFBPUzEwMiByZWdpc3RlciAqLworI2RlZmluZSBDTF9WU1NNCQkweDQ2ZTggCS8qIEFkYXB0ZXIgU2xlZXAgKi8KKyNkZWZpbmUgQ0xfVlNTTTIJMHgzYzMJLyogTW90aGVyYm9hcmQgU2xlZXAgKi8KKworLyoqKiBWR0EgU2VxdWVuY2VyIFJlZ2lzdGVycyAqKiovCisjZGVmaW5lIENMX1NFUVIwCTB4MAkvKiBSZXNldCAqLworLyogdGhlIGZvbGxvd2luZyBhcmUgZnJvbSB0aGUgImV4dGVuc2lvbiByZWdpc3RlcnMiIGdyb3VwICovCisjZGVmaW5lIENMX1NFUVI2CTB4NgkvKiBVbmxvY2sgQUxMIEV4dGVuc2lvbnMgKi8KKyNkZWZpbmUgQ0xfU0VRUjcJMHg3CS8qIEV4dGVuZGVkIFNlcXVlbmNlciBNb2RlICovCisjZGVmaW5lIENMX1NFUVI4CTB4OAkvKiBFRVBST00gQ29udHJvbCAqLworI2RlZmluZSBDTF9TRVFSOQkweDkJLyogU2NyYXRjaCBQYWQgMCAoZG8gbm90IGFjY2VzcyEpICovCisjZGVmaW5lIENMX1NFUVJBCTB4YQkvKiBTY3JhdGNoIFBhZCAxIChkbyBub3QgYWNjZXNzISkgKi8KKyNkZWZpbmUgQ0xfU0VRUkIJMHhiCS8qIFZDTEswIE51bWVyYXRvciAqLworI2RlZmluZSBDTF9TRVFSQwkweGMJLyogVkNMSzEgTnVtZXJhdG9yICovCisjZGVmaW5lIENMX1NFUVJECTB4ZAkvKiBWQ0xLMiBOdW1lcmF0b3IgKi8KKyNkZWZpbmUgQ0xfU0VRUkUJMHhlCS8qIFZDTEszIE51bWVyYXRvciAqLworI2RlZmluZSBDTF9TRVFSRgkweGYJLyogRFJBTSBDb250cm9sICovCisjZGVmaW5lIENMX1NFUVIxMAkweDEwCS8qIEdyYXBoaWNzIEN1cnNvciBYIFBvc2l0aW9uICovCisjZGVmaW5lIENMX1NFUVIxMQkweDExCS8qIEdyYXBoaWNzIEN1cnNvciBZIFBvc2l0aW9uICovCisjZGVmaW5lIENMX1NFUVIxMgkweDEyCS8qIEdyYXBoaWNzIEN1cnNvciBBdHRyaWJ1dGVzICovCisjZGVmaW5lIENMX1NFUVIxMwkweDEzCS8qIEdyYXBoaWNzIEN1cnNvciBQYXR0ZXJuIEFkZHJlc3MgT2Zmc2V0ICovCisjZGVmaW5lIENMX1NFUVIxNAkweDE0CS8qIFNjcmF0Y2ggUGFkIDIgKENMLUdENTQyNi8nMjggT25seSkgKGRvIG5vdCBhY2Nlc3MhKSAqLworI2RlZmluZSBDTF9TRVFSMTUJMHgxNQkvKiBTY3JhdGNoIFBhZCAzIChDTC1HRDU0MjYvJzI4IE9ubHkpIChkbyBub3QgYWNjZXNzISkgKi8KKyNkZWZpbmUgQ0xfU0VRUjE2CTB4MTYJLyogUGVyZm9ybWFuY2UgVHVuaW5nIChDTC1HRDU0MjQvJzI2LycyOCBPbmx5KSAqLworI2RlZmluZSBDTF9TRVFSMTcJMHgxNwkvKiBDb25maWd1cmF0aW9uIFJlYWRCYWNrIGFuZCBFeHRlbmRlZCBDb250cm9sIChDTC1HRjU0MjggT25seSkgKi8KKyNkZWZpbmUgQ0xfU0VRUjE4CTB4MTgJLyogU2lnbmF0dXJlIEdlbmVyYXRvciBDb250cm9sIChOb3QgQ0wtR0Q1NDIwKSAqLworI2RlZmluZSBDTF9TRVFSMTkJMHgxOQkvKiBTaWduYXR1cmUgR2VuZXJhdG9yIFJlc3VsdCBMb3cgQnl0ZSAoTm90IENMLUdENTQyMCkgKi8KKyNkZWZpbmUgQ0xfU0VRUjFBCTB4MWEJLyogU2lnbmF0dXJlIEdlbmVyYXRvciBSZXN1bHQgSGlnaCBCeXRlIChOb3QgQ0wtR0Q1NDIwKSAqLworI2RlZmluZSBDTF9TRVFSMUIJMHgxYgkvKiBWQ0xLMCBEZW5vbWluYXRvciBhbmQgUG9zdC1TY2FsYXIgVmFsdWUgKi8KKyNkZWZpbmUgQ0xfU0VRUjFDCTB4MWMJLyogVkNMSzEgRGVub21pbmF0b3IgYW5kIFBvc3QtU2NhbGFyIFZhbHVlICovCisjZGVmaW5lIENMX1NFUVIxRAkweDFkCS8qIFZDTEsyIERlbm9taW5hdG9yIGFuZCBQb3N0LVNjYWxhciBWYWx1ZSAqLworI2RlZmluZSBDTF9TRVFSMUUJMHgxZQkvKiBWQ0xLMyBEZW5vbWluYXRvciBhbmQgUG9zdC1TY2FsYXIgVmFsdWUgKi8KKyNkZWZpbmUgQ0xfU0VRUjFGCTB4MWYJLyogQklPUyBST00gd3JpdGUgZW5hYmxlIGFuZCBNQ0xLIFNlbGVjdCAqLworCisvKioqIENSVCBDb250cm9sbGVyIFJlZ2lzdGVycyAqKiovCisjZGVmaW5lIENMX0NSVDIyCTB4MjIJLyogR3JhcGhpY3MgRGF0YSBMYXRjaGVzIFJlYWRCYWNrICovCisjZGVmaW5lIENMX0NSVDI0CTB4MjQJLyogQXR0cmlidXRlIENvbnRyb2xsZXIgVG9nZ2xlIFJlYWRCYWNrICovCisjZGVmaW5lIENMX0NSVDI2CTB4MjYJLyogQXR0cmlidXRlIENvbnRyb2xsZXIgSW5kZXggUmVhZEJhY2sgKi8KKy8qIHRoZSBmb2xsb3dpbmcgYXJlIGZyb20gdGhlICJleHRlbnNpb24gcmVnaXN0ZXJzIiBncm91cCAqLworI2RlZmluZSBDTF9DUlQxOQkweDE5CS8qIEludGVybGFjZSBFbmQgKi8KKyNkZWZpbmUgQ0xfQ1JUMUEJMHgxYQkvKiBJbnRlcmxhY2UgQ29udHJvbCAqLworI2RlZmluZSBDTF9DUlQxQgkweDFiCS8qIEV4dGVuZGVkIERpc3BsYXkgQ29udHJvbHMgKi8KKyNkZWZpbmUgQ0xfQ1JUMUMJMHgxYwkvKiBTeW5jIGFkanVzdCBhbmQgZ2VubG9jayByZWdpc3RlciAqLworI2RlZmluZSBDTF9DUlQxRAkweDFkCS8qIE92ZXJsYXkgRXh0ZW5kZWQgQ29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBDTF9DUlQyNQkweDI1CS8qIFBhcnQgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIENMX0NSVDI3CTB4MjcJLyogSUQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ0xfQ1JUNTEJMHg1MQkvKiBQNCBkaXNhYmxlICJmbGlja2VyIGZpeGVyIiAqLworCisvKioqIEdyYXBoaWNzIENvbnRyb2xsZXIgUmVnaXN0ZXJzICoqKi8KKy8qIHRoZSBmb2xsb3dpbmcgYXJlIGZyb20gdGhlICJleHRlbnNpb24gcmVnaXN0ZXJzIiBncm91cCAqLworI2RlZmluZSBDTF9HUjkJCTB4OQkvKiBPZmZzZXQgUmVnaXN0ZXIgMCAqLworI2RlZmluZSBDTF9HUkEJCTB4YQkvKiBPZmZzZXQgUmVnaXN0ZXIgMSAqLworI2RlZmluZSBDTF9HUkIJCTB4YgkvKiBHcmFwaGljcyBDb250cm9sbGVyIE1vZGUgRXh0ZW5zaW9ucyAqLworI2RlZmluZSBDTF9HUkMJCTB4YwkvKiBDb2xvciBLZXkgKENMLUdENTQyNC8nMjYvJzI4IE9ubHkpICovCisjZGVmaW5lIENMX0dSRAkJMHhkCS8qIENvbG9yIEtleSBNYXNrIChDTC1HRDU0MjQvJzI2LycyOCBPbmx5KSAqLworI2RlZmluZSBDTF9HUkUJCTB4ZQkvKiBNaXNjZWxsYW5lb3VzIENvbnRyb2wgKENsLUdENTQyOCBPbmx5KSAqLworI2RlZmluZSBDTF9HUkYJCTB4ZgkvKiBEaXNwbGF5IENvbXByZXNzaW9uIENvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ0xfR1IxMAkJMHgxMAkvKiAxNi1iaXQgUGl4ZWwgQkcgQ29sb3IgSGlnaCBCeXRlIChOb3QgQ0wtR0Q1NDIwKSAqLworI2RlZmluZSBDTF9HUjExCQkweDExCS8qIDE2LWJpdCBQaXhlbCBGRyBDb2xvciBIaWdoIEJ5dGUgKE5vdCBDTC1HRDU0MjApICovCisjZGVmaW5lIENMX0dSMTIJCTB4MTIJLyogQmFja2dyb3VuZCBDb2xvciBCeXRlIDIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ0xfR1IxMwkJMHgxMwkvKiBGb3JlZ3JvdW5kIENvbG9yIEJ5dGUgMiBSZWdpc3RlciAqLworI2RlZmluZSBDTF9HUjE0CQkweDE0CS8qIEJhY2tncm91bmQgQ29sb3IgQnl0ZSAzIFJlZ2lzdGVyICovCisjZGVmaW5lIENMX0dSMTUJCTB4MTUJLyogRm9yZWdyb3VuZCBDb2xvciBCeXRlIDMgUmVnaXN0ZXIgKi8KKy8qIHRoZSBmb2xsb3dpbmcgYXJlIENMLUdENTQyNi8nMjggc3BlY2lmaWMgYmxpdHRlciByZWdpc3RlcnMgKi8KKyNkZWZpbmUgQ0xfR1IyMAkJMHgyMAkvKiBCTFQgV2lkdGggTG93ICovCisjZGVmaW5lIENMX0dSMjEJCTB4MjEJLyogQkxUIFdpZHRoIEhpZ2ggKi8KKyNkZWZpbmUgQ0xfR1IyMgkJMHgyMgkvKiBCTFQgSGVpZ2h0IExvdyAqLworI2RlZmluZSBDTF9HUjIzCQkweDIzCS8qIEJMVCBIZWlnaHQgSGlnaCAqLworI2RlZmluZSBDTF9HUjI0CQkweDI0CS8qIEJMVCBEZXN0aW5hdGlvbiBQaXRjaCBMb3cgKi8KKyNkZWZpbmUgQ0xfR1IyNQkJMHgyNQkvKiBCTFQgRGVzdGluYXRpb24gUGl0Y2ggSGlnaCAqLworI2RlZmluZSBDTF9HUjI2CQkweDI2CS8qIEJMVCBTb3VyY2UgUGl0Y2ggTG93ICovCisjZGVmaW5lIENMX0dSMjcJCTB4MjcJLyogQkxUIFNvdXJjZSBQaXRjaCBIaWdoICovCisjZGVmaW5lIENMX0dSMjgJCTB4MjgJLyogQkxUIERlc3RpbmF0aW9uIFN0YXJ0IExvdyAqLworI2RlZmluZSBDTF9HUjI5CQkweDI5CS8qIEJMVCBEZXN0aW5hdGlvbiBTdGFydCBNaWQgKi8KKyNkZWZpbmUgQ0xfR1IyQQkJMHgyYQkvKiBCTFQgRGVzdGluYXRpb24gU3RhcnQgSGlnaCAqLworI2RlZmluZSBDTF9HUjJDCQkweDJjCS8qIEJMVCBTb3VyY2UgU3RhcnQgTG93ICovCisjZGVmaW5lIENMX0dSMkQJCTB4MmQJLyogQkxUIFNvdXJjZSBTdGFydCBNaWQgKi8KKyNkZWZpbmUgQ0xfR1IyRQkJMHgyZQkvKiBCTFQgU291cmNlIFN0YXJ0IEhpZ2ggKi8KKyNkZWZpbmUgQ0xfR1IyRgkJMHgyZgkvKiBQaWNhc3NvIElWIEJsaXR0ZXIgY29tcGF0IG1vZGUuLj8gKi8KKyNkZWZpbmUgQ0xfR1IzMAkJMHgzMAkvKiBCTFQgTW9kZSAqLworI2RlZmluZSBDTF9HUjMxCQkweDMxCS8qIEJMVCBTdGFydC9TdGF0dXMgKi8KKyNkZWZpbmUgQ0xfR1IzMgkJMHgzMgkvKiBCTFQgUmFzdGVyIE9wZXJhdGlvbiAqLworI2RlZmluZSBDTF9HUjMzCQkweDMzCS8qIGFub3RoZXIgUDQgImNvbXBhdCIgcmVnaXN0ZXIuLiAqLworI2RlZmluZSBDTF9HUjM0CQkweDM0CS8qIFRyYW5zcGFyZW50IENvbG9yIFNlbGVjdCBMb3cgKi8KKyNkZWZpbmUgQ0xfR1IzNQkJMHgzNQkvKiBUcmFuc3BhcmVudCBDb2xvciBTZWxlY3QgSGlnaCAqLworI2RlZmluZSBDTF9HUjM4CQkweDM4CS8qIFNvdXJjZSBUcmFuc3BhcmVudCBDb2xvciBNYXNrIExvdyAqLworI2RlZmluZSBDTF9HUjM5CQkweDM5CS8qIFNvdXJjZSBUcmFuc3BhcmVudCBDb2xvciBNYXNrIEhpZ2ggKi8KKworLyoqKiBBdHRyaWJ1dGUgQ29udHJvbGxlciBSZWdpc3RlcnMgKioqLworI2RlZmluZSBDTF9BUjMzCQkweDMzCS8qIFRoZSAicmVhbCIgUGl4ZWwgUGFubmluZyByZWdpc3RlciAoPykgKi8KKyNkZWZpbmUgQ0xfQVIzNAkJMHgzNAkvKiBURVNUICovCisKKyNlbmRpZiAvKiBfX0NMR0VORkJfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3ZpZGVvL2N2aXNpb25wcGMuaCBiL2luY2x1ZGUvdmlkZW8vY3Zpc2lvbnBwYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMjUwZWVlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS92aWRlby9jdmlzaW9ucHBjLmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIFBoYXNlNSBDeWJlcnZpc2lvblBQQyAoVFZQNDAyMCkgZGVmaW5pdGlvbnMgZm9yIHRoZSBQZXJtZWRpYTIgZnJhbWVidWZmZXIKKyAqIGRyaXZlci4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMTk5OSBJbGFyaW8gTmFyZGlub2NjaGkgKG5hcmRpbm9jQENTLlVuaUJPLklUKQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICRJZDogY3Zpc2lvbnBwYy5oLHYgMS44IDE5OTkvMDEvMjggMTM6MTg6MDcgaWxsbyBFeHAgJAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIENWSVNJT05QUENfSAorI2RlZmluZSBDVklTSU9OUFBDX0gKKworI2lmbmRlZiBQTTJGQl9ICisjaW5jbHVkZSAicG0yZmIuaCIKKyNlbmRpZgorCitzdHJ1Y3QgY3ZwcGNfcGFyIHsKKwl1bnNpZ25lZCBjaGFyKiBwY2lfY29uZmlnOworCXVuc2lnbmVkIGNoYXIqIHBjaV9icmlkZ2U7CisJdTMyIHVzZXJfZmxhZ3M7Cit9OworCisjZGVmaW5lIENTUFBDX1BDSV9CUklER0UJCTB4ZmZmZTAwMDAKKyNkZWZpbmUgQ1NQUENfQlJJREdFX0VORElBTgkJMHgwMDAwCisjZGVmaW5lIENTUFBDX0JSSURHRV9JTlQJCTB4MDAxMAorCisjZGVmaW5lCUNWUFBDX1BDSV9DT05GSUcJCTB4ZmZmYzAwMDAKKyNkZWZpbmUgQ1ZQUENfUk9NX0FERFJFU1MJCTB4ZTIwMDAwMDEKKyNkZWZpbmUgQ1ZQUENfUkVHU19SRUdJT04JCTB4ZWYwMDAwMDAKKyNkZWZpbmUgQ1ZQUENfRkJfQVBFUlRVUkVfT05FCQkweGUwMDAwMDAwCisjZGVmaW5lIENWUFBDX0ZCX0FQRVJUVVJFX1RXTwkJMHhlMTAwMDAwMAorI2RlZmluZSBDVlBQQ19GQl9TSVpFCQkJMHgwMDgwMDAwMAorI2RlZmluZSBDVlBQQ19NRU1fQ09ORklHX09MRAkJMHhlZDYxZmNhYQkvKiBGSVhNRSBGdWppdHN1Pz8gKi8KKyNkZWZpbmUgQ1ZQUENfTUVNX0NPTkZJR19ORVcJCTB4ZWQ0MWM1MzIJLyogRklYTUUgVVNBPz8gKi8KKyNkZWZpbmUgQ1ZQUENfTUVNQ0xPQ0sJCQk4MzAwMAkJLyogaW4gS0h6ICovCisKKy8qIENWUFBDX0JSSURHRV9FTkRJQU4gKi8KKyNkZWZpbmUgQ1NQUENGX0JSSURHRV9CSUdfRU5ESUFOCTB4MDIKKworLyogQ1ZQUENfQlJJREdFX0lOVCAqLworI2RlZmluZSBDU1BQQ0ZfQlJJREdFX0FDVElWRV9JTlQyCTB4MDEKKworI2VuZGlmCS8qIENWSVNJT05QUENfSCAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRoYXQncyBhbGwgZm9sa3MhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3ZpZGVvL2VkaWQuaCBiL2luY2x1ZGUvdmlkZW8vZWRpZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiYzFiNDgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3ZpZGVvL2VkaWQuaApAQCAtMCwwICsxLDI3IEBACisjaWZuZGVmIF9fbGludXhfdmlkZW9fZWRpZF9oX18KKyNkZWZpbmUgX19saW51eF92aWRlb19lZGlkX2hfXworCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaWZkZWYgQ09ORklHX1BQQ19PRgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfWDg2CitzdHJ1Y3QgZWRpZF9pbmZvIHsKKwl1bnNpZ25lZCBjaGFyIGR1bW15WzEyOF07Cit9OworCitleHRlcm4gc3RydWN0IGVkaWRfaW5mbyBlZGlkX2luZm87CitleHRlcm4gY2hhciAqZ2V0X0VESURfZnJvbV9CSU9TKHZvaWQgKik7CisKKyNlbmRpZiAvKiBDT05GSUdfWDg2ICovCisKKyNpZmRlZiBDT05GSUdfUFBDX09GCitleHRlcm4gY2hhciAqZ2V0X0VESURfZnJvbV9PRihzdHJ1Y3QgcGNpX2RldiAqcGRldik7CisjZW5kaWYKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9fbGludXhfdmlkZW9fZWRpZF9oX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdmlkZW8vZXBzb24xMzU1LmggYi9pbmNsdWRlL3ZpZGVvL2Vwc29uMTM1NS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3NTlmMjkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3ZpZGVvL2Vwc29uMTM1NS5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBpbmNsdWRlL3ZpZGVvL2Vwc29uMTN4eC5oIC0tIEVwc29uIDEzeHggZnJhbWUgYnVmZmVyCisgKgorICogQ29weXJpZ2h0IChDKSBIZXdsZXR0LVBhY2thcmQgQ29tcGFueS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogV3JpdHRlbiBieSBDaHJpc3RvcGhlciBIb292ZXIgPGNoQGhwbC5ocC5jb20+CisgKgorICovCisKKyNpZm5kZWYgX0VQU09OMTNYWF9IXworI2RlZmluZSBfRVBTT04xM1hYX0hfCisKKyNkZWZpbmUgUkVHX1JFVklTSU9OX0NPREUgICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgUkVHX01FTU9SWV9DT05GSUcgICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgUkVHX1BBTkVMX1RZUEUgICAgICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgUkVHX01PRF9SQVRFICAgICAgICAgICAgICAgICAgIDB4MDMKKyNkZWZpbmUgUkVHX0hPUlpfRElTUF9XSURUSCAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgUkVHX0hPUlpfTk9ORElTUF9QRVJJT0QgICAgICAgIDB4MDUKKyNkZWZpbmUgUkVHX0hSVENfU1RBUlRfUE9TSVRJT04gICAgICAgIDB4MDYKKyNkZWZpbmUgUkVHX0hSVENfUFVMU0VfV0lEVEggICAgICAgICAgIDB4MDcKKyNkZWZpbmUgUkVHX1ZFUlRfRElTUF9IRUlHSFQwICAgICAgICAgIDB4MDgKKyNkZWZpbmUgUkVHX1ZFUlRfRElTUF9IRUlHSFQxICAgICAgICAgIDB4MDkKKyNkZWZpbmUgUkVHX1ZFUlRfTk9ORElTUF9QRVJJT0QgICAgICAgIDB4MEEKKyNkZWZpbmUgUkVHX1ZSVENfU1RBUlRfUE9TSVRJT04gICAgICAgIDB4MEIKKyNkZWZpbmUgUkVHX1ZSVENfUFVMU0VfV0lEVEggICAgICAgICAgIDB4MEMKKyNkZWZpbmUgUkVHX0RJU1BMQVlfTU9ERSAgICAgICAgICAgICAgIDB4MEQKKyNkZWZpbmUgUkVHX1NDUk4xX0xJTkVfQ09NUEFSRTAgICAgICAgIDB4MEUKKyNkZWZpbmUgUkVHX1NDUk4xX0xJTkVfQ09NUEFSRTEgICAgICAgIDB4MEYKKyNkZWZpbmUgUkVHX1NDUk4xX0RJU1BfU1RBUlRfQUREUjAgICAgIDB4MTAKKyNkZWZpbmUgUkVHX1NDUk4xX0RJU1BfU1RBUlRfQUREUjEgICAgIDB4MTEKKyNkZWZpbmUgUkVHX1NDUk4xX0RJU1BfU1RBUlRfQUREUjIgICAgIDB4MTIKKyNkZWZpbmUgUkVHX1NDUk4yX0RJU1BfU1RBUlRfQUREUjAgICAgIDB4MTMKKyNkZWZpbmUgUkVHX1NDUk4yX0RJU1BfU1RBUlRfQUREUjEgICAgIDB4MTQKKyNkZWZpbmUgUkVHX1NDUk4yX0RJU1BfU1RBUlRfQUREUjIgICAgIDB4MTUKKyNkZWZpbmUgUkVHX01FTV9BRERSX09GRlNFVDAgICAgICAgICAgIDB4MTYKKyNkZWZpbmUgUkVHX01FTV9BRERSX09GRlNFVDEgICAgICAgICAgIDB4MTcKKyNkZWZpbmUgUkVHX1BJWEVMX1BBTk5JTkcgICAgICAgICAgICAgIDB4MTgKKyNkZWZpbmUgUkVHX0NMT0NLX0NPTkZJRyAgICAgICAgICAgICAgIDB4MTkKKyNkZWZpbmUgUkVHX1BPV0VSX1NBVkVfQ09ORklHICAgICAgICAgIDB4MUEKKyNkZWZpbmUgUkVHX01JU0MgICAgICAgICAgICAgICAgICAgICAgIDB4MUIKKyNkZWZpbmUgUkVHX01EX0NPTkZJR19SRUFEQkFDSzAgICAgICAgIDB4MUMKKyNkZWZpbmUgUkVHX01EX0NPTkZJR19SRUFEQkFDSzEgICAgICAgIDB4MUQKKyNkZWZpbmUgUkVHX0dQSU9fQ09ORklHMCAgICAgICAgICAgICAgIDB4MUUKKyNkZWZpbmUgUkVHX0dQSU9fQ09ORklHMSAgICAgICAgICAgICAgIDB4MUYKKyNkZWZpbmUgUkVHX0dQSU9fQ09OVFJPTDAgICAgICAgICAgICAgIDB4MjAKKyNkZWZpbmUgUkVHX0dQSU9fQ09OVFJPTDEgICAgICAgICAgICAgIDB4MjEKKyNkZWZpbmUgUkVHX1BFUkZfRU5IQU5DRU1FTlQwICAgICAgICAgIDB4MjIKKyNkZWZpbmUgUkVHX1BFUkZfRU5IQU5DRU1FTlQxICAgICAgICAgIDB4MjMKKyNkZWZpbmUgUkVHX0xVVF9BRERSICAgICAgICAgICAgICAgICAgIDB4MjQKKyNkZWZpbmUgUkVHX1JFU0VSVkVEXzEgICAgICAgICAgICAgICAgIDB4MjUKKyNkZWZpbmUgUkVHX0xVVF9EQVRBICAgICAgICAgICAgICAgICAgIDB4MjYKKyNkZWZpbmUgUkVHX0lOS19DVVJTT1JfQ09OVFJPTCAgICAgICAgIDB4MjcKKyNkZWZpbmUgUkVHX0NVUlNPUl9YX1BPU0lUSU9OMCAgICAgICAgIDB4MjgKKyNkZWZpbmUgUkVHX0NVUlNPUl9YX1BPU0lUSU9OMSAgICAgICAgIDB4MjkKKyNkZWZpbmUgUkVHX0NVUlNPUl9ZX1BPU0lUSU9OMCAgICAgICAgIDB4MkEKKyNkZWZpbmUgUkVHX0NVUlNPUl9ZX1BPU0lUSU9OMSAgICAgICAgIDB4MkIKKyNkZWZpbmUgUkVHX0lOS19DVVJTT1JfQ09MT1IwXzAgICAgICAgIDB4MkMKKyNkZWZpbmUgUkVHX0lOS19DVVJTT1JfQ09MT1IwXzEgICAgICAgIDB4MkQKKyNkZWZpbmUgUkVHX0lOS19DVVJTT1JfQ09MT1IxXzAgICAgICAgIDB4MkUKKyNkZWZpbmUgUkVHX0lOS19DVVJTT1JfQ09MT1IxXzEgICAgICAgIDB4MkYKKyNkZWZpbmUgUkVHX0lOS19DVVJTT1JfU1RBUlRfQUREUiAgICAgIDB4MzAKKyNkZWZpbmUgUkVHX0FMVEVSTkFURV9GUk0gICAgICAgICAgICAgIDB4MzEKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL3ZpZGVvL2diZS5oIGIvaW5jbHVkZS92aWRlby9nYmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDUxMDI4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS92aWRlby9nYmUuaApAQCAtMCwwICsxLDMxNyBAQAorLyoKKyAqIGluY2x1ZGUvdmlkZW8vZ2JlLmggLS0gU0dJIEdCRSAoR3JhcGhpY3MgQmFjayBFbmQpCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5IFNpbGljb24gR3JhcGhpY3MsIEluYy4gKEplZmZyZXkgTmV3cXVpc3QpCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19HQkVfSF9fCisjZGVmaW5lIF9fR0JFX0hfXworCitzdHJ1Y3Qgc2dpX2diZSB7CisJdm9sYXRpbGUgdWludDMyX3QgY3RybHN0YXQ7CS8qIGdlbmVyYWwgY29udHJvbCAqLworCXZvbGF0aWxlIHVpbnQzMl90IGRvdGNsb2NrOwkvKiBkb3QgY2xvY2sgUExMIGNvbnRyb2wgKi8KKwl2b2xhdGlsZSB1aW50MzJfdCBpMmM7CQkvKiBjcnQgSTJDIGNvbnRyb2wgKi8KKwl2b2xhdGlsZSB1aW50MzJfdCBzeXNjbGs7CS8qIHN5c3RlbSBjbG9jayBQTEwgY29udHJvbCAqLworCXZvbGF0aWxlIHVpbnQzMl90IGkyY2ZwOwkvKiBmbGF0IHBhbmVsIEkyQyBjb250cm9sICovCisJdm9sYXRpbGUgdWludDMyX3QgaWQ7CQkvKiBkZXZpY2UgaWQvY2hpcCByZXZpc2lvbiAqLworCXZvbGF0aWxlIHVpbnQzMl90IGNvbmZpZzsgICAgICAgLyogcG93ZXIgb24gY29uZmlndXJhdGlvbiBbMV0gKi8KKwl2b2xhdGlsZSB1aW50MzJfdCBiaXN0OyAgICAgICAgIC8qIGludGVybmFsIGJpc3Qgc3RhdHVzIFsxXSAqLworCXVpbnQzMl90IF9wYWQwWzB4MDEwMDAwLzQgLSA4XTsKKwl2b2xhdGlsZSB1aW50MzJfdCB2dF94eTsJLyogY3VycmVudCBkb3QgY29vcmRzICovCisJdm9sYXRpbGUgdWludDMyX3QgdnRfeHltYXg7CS8qIG1heGltdW0gZG90IGNvb3JkcyAqLworCXZvbGF0aWxlIHVpbnQzMl90IHZ0X3ZzeW5jOwkvKiB2c3luYyBvbi9vZmYgKi8KKwl2b2xhdGlsZSB1aW50MzJfdCB2dF9oc3luYzsJLyogaHN5bmMgb24vb2ZmICovCisJdm9sYXRpbGUgdWludDMyX3QgdnRfdmJsYW5rOwkvKiB2Ymxhbmsgb24vb2ZmICovCisJdm9sYXRpbGUgdWludDMyX3QgdnRfaGJsYW5rOwkvKiBoYmxhbmsgb24vb2ZmICovCisJdm9sYXRpbGUgdWludDMyX3QgdnRfZmxhZ3M7CS8qIHBvbGFyaXR5IG9mIHZ0IHNpZ25hbHMgKi8KKwl2b2xhdGlsZSB1aW50MzJfdCB2dF9mMnJmX2xvY2s7CS8qIGYycmYgJiBmcmFtZWxjayB5IGNvb3JkICovCisJdm9sYXRpbGUgdWludDMyX3QgdnRfaW50cjAxOwkvKiBpbnRyIDAsMSB5IGNvb3JkcyAqLworCXZvbGF0aWxlIHVpbnQzMl90IHZ0X2ludHIyMzsJLyogaW50ciAyLDMgeSBjb29yZHMgKi8KKwl2b2xhdGlsZSB1aW50MzJfdCBmcF9oZHJ2OwkvKiBmbGF0IHBhbmVsIGhkcnYgb24vb2ZmICovCisJdm9sYXRpbGUgdWludDMyX3QgZnBfdmRydjsJLyogZmxhdCBwYW5lbCB2ZHJ2IG9uL29mZiAqLworCXZvbGF0aWxlIHVpbnQzMl90IGZwX2RlOwkvKiBmbGF0IHBhbmVsIGRlIG9uL29mZiAqLworCXZvbGF0aWxlIHVpbnQzMl90IHZ0X2hwaXhlbjsJLyogaW50cm5sIGhvcml6IHBpeGVsIG9uL29mZiAqLworCXZvbGF0aWxlIHVpbnQzMl90IHZ0X3ZwaXhlbjsJLyogaW50cm5sIHZlcnQgcGl4ZWwgb24vb2ZmICovCisJdm9sYXRpbGUgdWludDMyX3QgdnRfaGNtYXA7CS8qIGNtYXAgd3JpdGUgKGhvcml6KSAqLworCXZvbGF0aWxlIHVpbnQzMl90IHZ0X3ZjbWFwOwkvKiBjbWFwIHdyaXRlICh2ZXJ0KSAqLworCXZvbGF0aWxlIHVpbnQzMl90IGRpZF9zdGFydF94eTsJLyogZW9sL2YgZGlkL3h5IHJlc2V0IHZhbCAqLworCXZvbGF0aWxlIHVpbnQzMl90IGNyc19zdGFydF94eTsJLyogZW9sL2YgY3JzL3h5IHJlc2V0IHZhbCAqLworCXZvbGF0aWxlIHVpbnQzMl90IHZjX3N0YXJ0X3h5OwkvKiBlb2wvZiB2Yy94eSByZXNldCB2YWwgKi8KKwl1aW50MzJfdCBfcGFkMVsweGZmYjAvNF07CisJdm9sYXRpbGUgdWludDMyX3Qgb3ZyX3dpZHRoX3RpbGU7LypvdmVybGF5IHBsYW5lIGN0cmwgMCAqLworCXZvbGF0aWxlIHVpbnQzMl90IG92cl9pbmh3Y3RybDsJLyogb3ZlcmxheSBwbGFuZSBjdHJsIDEgKi8KKwl2b2xhdGlsZSB1aW50MzJfdCBvdnJfY29udHJvbDsJLyogb3ZlcmxheSBwbGFuZSBjdHJsIDEgKi8KKwl1aW50MzJfdCBfcGFkMlsweGZmZjQvNF07CisJdm9sYXRpbGUgdWludDMyX3QgZnJtX3NpemVfdGlsZTsvKiBub3JtYWwgcGxhbmUgY3RybCAwICovCisJdm9sYXRpbGUgdWludDMyX3QgZnJtX3NpemVfcGl4ZWw7Lypub3JtYWwgcGxhbmUgY3RybCAxICovCisJdm9sYXRpbGUgdWludDMyX3QgZnJtX2luaHdjdHJsOwkvKiBub3JtYWwgcGxhbmUgY3RybCAyICovCisJdm9sYXRpbGUgdWludDMyX3QgZnJtX2NvbnRyb2w7CS8qIG5vcm1hbCBwbGFuZSBjdHJsIDMgKi8KKwl1aW50MzJfdCBfcGFkM1sweGZmZjAvNF07CisJdm9sYXRpbGUgdWludDMyX3QgZGlkX2luaHdjdHJsOwkvKiBESUQgY29udHJvbCAqLworCXZvbGF0aWxlIHVpbnQzMl90IGRpZF9jb250cm9sOwkvKiBESUQgc2hhZG93ICovCisJdWludDMyX3QgX3BhZDRbMHg3ZmY4LzRdOworCXZvbGF0aWxlIHVpbnQzMl90IG1vZGVfcmVnc1szMl07LyogV0lEIHRhYmxlICovCisJdWludDMyX3QgX3BhZDVbMHg3ZjgwLzRdOworCXZvbGF0aWxlIHVpbnQzMl90IGNtYXBbNjE0NF07CS8qIGNvbG9yIG1hcCAqLworCXVpbnQzMl90IF9wYWQ2WzB4MjAwMC80XTsKKwl2b2xhdGlsZSB1aW50MzJfdCBjbV9maWZvOwkvKiBjb2xvciBtYXAgZmlmbyBzdGF0dXMgKi8KKwl1aW50MzJfdCBfcGFkN1sweDdmZmMvNF07CisJdm9sYXRpbGUgdWludDMyX3QgZ21hcFsyNTZdOwkvKiBnYW1tYSBtYXAgKi8KKwl1aW50MzJfdCBfcGFkOFsweDdjMDAvNF07CisJdm9sYXRpbGUgdWludDMyX3QgZ21hcDEwWzEwMjRdOwkvKiBnYW1tYSBtYXAgKi8KKwl1aW50MzJfdCBfcGFkOVsweDcwMDAvNF07CisJdm9sYXRpbGUgdWludDMyX3QgY3JzX3BvczsJLyogY3Vzcm9yIGNvbnRyb2wgMCAqLworCXZvbGF0aWxlIHVpbnQzMl90IGNyc19jdGw7CS8qIGN1c3JvciBjb250cm9sIDEgKi8KKwl2b2xhdGlsZSB1aW50MzJfdCBjcnNfY21hcFszXTsJLyogY3JzIGNtYXAgKi8KKwl1aW50MzJfdCBfcGFkMTBbMHg3ZmVjLzRdOworCXZvbGF0aWxlIHVpbnQzMl90IGNyc19nbHlwaFs2NF07LyogY3JzIGdseXBoICovCisJdWludDMyX3QgX3BhZDExWzB4N2YwMC80XTsKKwl2b2xhdGlsZSB1aW50MzJfdCB2Y18wOwkvKiB2aWRlbyBjYXB0dXJlIGNydGwgMCAqLworCXZvbGF0aWxlIHVpbnQzMl90IHZjXzE7CS8qIHZpZGVvIGNhcHR1cmUgY3J0bCAxICovCisJdm9sYXRpbGUgdWludDMyX3QgdmNfMjsJLyogdmlkZW8gY2FwdHVyZSBjcnRsIDIgKi8KKwl2b2xhdGlsZSB1aW50MzJfdCB2Y18zOwkvKiB2aWRlbyBjYXB0dXJlIGNydGwgMyAqLworCXZvbGF0aWxlIHVpbnQzMl90IHZjXzQ7CS8qIHZpZGVvIGNhcHR1cmUgY3J0bCA0ICovCisJdm9sYXRpbGUgdWludDMyX3QgdmNfNTsJLyogdmlkZW8gY2FwdHVyZSBjcnRsIDUgKi8KKwl2b2xhdGlsZSB1aW50MzJfdCB2Y182OwkvKiB2aWRlbyBjYXB0dXJlIGNydGwgNiAqLworCXZvbGF0aWxlIHVpbnQzMl90IHZjXzc7CS8qIHZpZGVvIGNhcHR1cmUgY3J0bCA3ICovCisJdm9sYXRpbGUgdWludDMyX3QgdmNfODsJLyogdmlkZW8gY2FwdHVyZSBjcnRsIDggKi8KK307CisKKyNkZWZpbmUgTUFTSyhtc2IsIGxzYikJCVwKKwkoICgoKHUzMikxPDwoKG1zYiktKGxzYikrMSkpLTEpIDw8IChsc2IpICkKKyNkZWZpbmUgR0VUKHYsIG1zYiwgbHNiKQlcCisJKCAoKHUzMikodikgJiBNQVNLKG1zYixsc2IpKSA+PiAobHNiKSApCisjZGVmaW5lIFNFVCh2LCBmLCBtc2IsIGxzYikJXAorCSggKHYpID0gKCh2KSZ+TUFTSyhtc2IsbHNiKSkgfCAoKCAodTMyKShmKTw8KGxzYikgKSAmIE1BU0sobXNiLGxzYikpICkKKworI2RlZmluZSBHRVRfR0JFX0ZJRUxEKHJlZywgZmllbGQsIHYpCQlcCisJR0VUKCh2KSwgR0JFXyMjcmVnIyNfIyNmaWVsZCMjX01TQiwgR0JFXyMjcmVnIyNfIyNmaWVsZCMjX0xTQikKKyNkZWZpbmUgU0VUX0dCRV9GSUVMRChyZWcsIGZpZWxkLCB2LCBmKQkJXAorCVNFVCgodiksIChmKSwgR0JFXyMjcmVnIyNfIyNmaWVsZCMjX01TQiwgR0JFXyMjcmVnIyNfIyNmaWVsZCMjX0xTQikKKworLyoKKyAqIEJpdCBtYXNrIGluZm9ybWF0aW9uCisgKi8KKyNkZWZpbmUgR0JFX0NUUkxTVEFUX0NISVBJRF9NU0IJCSAzCisjZGVmaW5lIEdCRV9DVFJMU1RBVF9DSElQSURfTFNCCQkgMAorI2RlZmluZSBHQkVfQ1RSTFNUQVRfU0VOU0VfTl9NU0IJIDQKKyNkZWZpbmUgR0JFX0NUUkxTVEFUX1NFTlNFX05fTFNCCSA0CisjZGVmaW5lIEdCRV9DVFJMU1RBVF9QQ0xLU0VMX01TQgkyOQorI2RlZmluZSBHQkVfQ1RSTFNUQVRfUENMS1NFTF9MU0IJMjgKKworI2RlZmluZSBHQkVfRE9UQ0xLX01fTVNCCQkgNworI2RlZmluZSBHQkVfRE9UQ0xLX01fTFNCCQkgMAorI2RlZmluZSBHQkVfRE9UQ0xLX05fTVNCCQkxMworI2RlZmluZSBHQkVfRE9UQ0xLX05fTFNCCQkgOAorI2RlZmluZSBHQkVfRE9UQ0xLX1BfTVNCCQkxNQorI2RlZmluZSBHQkVfRE9UQ0xLX1BfTFNCCQkxNAorI2RlZmluZSBHQkVfRE9UQ0xLX1JVTl9NU0IJCTIwCisjZGVmaW5lIEdCRV9ET1RDTEtfUlVOX0xTQgkJMjAKKworI2RlZmluZSBHQkVfVlRfWFlfWV9NU0IJCTIzCisjZGVmaW5lIEdCRV9WVF9YWV9ZX0xTQgkJMTIKKyNkZWZpbmUgR0JFX1ZUX1hZX1hfTVNCCQkxMQorI2RlZmluZSBHQkVfVlRfWFlfWF9MU0IJCSAwCisjZGVmaW5lIEdCRV9WVF9YWV9GUkVFWkVfTVNCCQkzMQorI2RlZmluZSBHQkVfVlRfWFlfRlJFRVpFX0xTQgkJMzEKKworI2RlZmluZSBHQkVfRlBfVkRSVl9PTl9NU0IJMjMKKyNkZWZpbmUgR0JFX0ZQX1ZEUlZfT05fTFNCCTEyCisjZGVmaW5lIEdCRV9GUF9WRFJWX09GRl9NU0IJMTEKKyNkZWZpbmUgR0JFX0ZQX1ZEUlZfT0ZGX0xTQgkwCisKKyNkZWZpbmUgR0JFX0ZQX0hEUlZfT05fTVNCCTIzCisjZGVmaW5lIEdCRV9GUF9IRFJWX09OX0xTQgkxMgorI2RlZmluZSBHQkVfRlBfSERSVl9PRkZfTVNCCTExCisjZGVmaW5lIEdCRV9GUF9IRFJWX09GRl9MU0IJMAorCisjZGVmaW5lIEdCRV9GUF9ERV9PTl9NU0IJCTIzCisjZGVmaW5lIEdCRV9GUF9ERV9PTl9MU0IJCTEyCisjZGVmaW5lIEdCRV9GUF9ERV9PRkZfTVNCCQkxMQorI2RlZmluZSBHQkVfRlBfREVfT0ZGX0xTQgkJMAorCisjZGVmaW5lIEdCRV9WVF9WU1lOQ19WU1lOQ19PTl9NU0IJMjMKKyNkZWZpbmUgR0JFX1ZUX1ZTWU5DX1ZTWU5DX09OX0xTQgkxMgorI2RlZmluZSBHQkVfVlRfVlNZTkNfVlNZTkNfT0ZGX01TQgkxMQorI2RlZmluZSBHQkVfVlRfVlNZTkNfVlNZTkNfT0ZGX0xTQgkgMAorCisjZGVmaW5lIEdCRV9WVF9IU1lOQ19IU1lOQ19PTl9NU0IJMjMKKyNkZWZpbmUgR0JFX1ZUX0hTWU5DX0hTWU5DX09OX0xTQgkxMgorI2RlZmluZSBHQkVfVlRfSFNZTkNfSFNZTkNfT0ZGX01TQgkxMQorI2RlZmluZSBHQkVfVlRfSFNZTkNfSFNZTkNfT0ZGX0xTQgkgMAorCisjZGVmaW5lIEdCRV9WVF9WQkxBTktfVkJMQU5LX09OX01TQgkyMworI2RlZmluZSBHQkVfVlRfVkJMQU5LX1ZCTEFOS19PTl9MU0IJMTIKKyNkZWZpbmUgR0JFX1ZUX1ZCTEFOS19WQkxBTktfT0ZGX01TQgkxMQorI2RlZmluZSBHQkVfVlRfVkJMQU5LX1ZCTEFOS19PRkZfTFNCCSAwCisKKyNkZWZpbmUgR0JFX1ZUX0hCTEFOS19IQkxBTktfT05fTVNCCTIzCisjZGVmaW5lIEdCRV9WVF9IQkxBTktfSEJMQU5LX09OX0xTQgkxMgorI2RlZmluZSBHQkVfVlRfSEJMQU5LX0hCTEFOS19PRkZfTVNCCTExCisjZGVmaW5lIEdCRV9WVF9IQkxBTktfSEJMQU5LX09GRl9MU0IJIDAKKworI2RlZmluZSBHQkVfVlRfRkxBR1NfRjJSRl9ISUdIX01TQgkgNgorI2RlZmluZSBHQkVfVlRfRkxBR1NfRjJSRl9ISUdIX0xTQgkgNgorI2RlZmluZSBHQkVfVlRfRkxBR1NfU1lOQ19MT1dfTVNCCSA1CisjZGVmaW5lIEdCRV9WVF9GTEFHU19TWU5DX0xPV19MU0IJIDUKKyNkZWZpbmUgR0JFX1ZUX0ZMQUdTX1NZTkNfSElHSF9NU0IJIDQKKyNkZWZpbmUgR0JFX1ZUX0ZMQUdTX1NZTkNfSElHSF9MU0IJIDQKKyNkZWZpbmUgR0JFX1ZUX0ZMQUdTX0hEUlZfTE9XX01TQgkgMworI2RlZmluZSBHQkVfVlRfRkxBR1NfSERSVl9MT1dfTFNCCSAzCisjZGVmaW5lIEdCRV9WVF9GTEFHU19IRFJWX0lOVkVSVF9NU0IJIDIKKyNkZWZpbmUgR0JFX1ZUX0ZMQUdTX0hEUlZfSU5WRVJUX0xTQgkgMgorI2RlZmluZSBHQkVfVlRfRkxBR1NfVkRSVl9MT1dfTVNCCSAxCisjZGVmaW5lIEdCRV9WVF9GTEFHU19WRFJWX0xPV19MU0IJIDEKKyNkZWZpbmUgR0JFX1ZUX0ZMQUdTX1ZEUlZfSU5WRVJUX01TQgkgMAorI2RlZmluZSBHQkVfVlRfRkxBR1NfVkRSVl9JTlZFUlRfTFNCCSAwCisKKyNkZWZpbmUgR0JFX1ZUX1ZDTUFQX1ZDTUFQX09OX01TQgkyMworI2RlZmluZSBHQkVfVlRfVkNNQVBfVkNNQVBfT05fTFNCCTEyCisjZGVmaW5lIEdCRV9WVF9WQ01BUF9WQ01BUF9PRkZfTVNCCTExCisjZGVmaW5lIEdCRV9WVF9WQ01BUF9WQ01BUF9PRkZfTFNCCSAwCisKKyNkZWZpbmUgR0JFX1ZUX0hDTUFQX0hDTUFQX09OX01TQgkyMworI2RlZmluZSBHQkVfVlRfSENNQVBfSENNQVBfT05fTFNCCTEyCisjZGVmaW5lIEdCRV9WVF9IQ01BUF9IQ01BUF9PRkZfTVNCCTExCisjZGVmaW5lIEdCRV9WVF9IQ01BUF9IQ01BUF9PRkZfTFNCCSAwCisKKyNkZWZpbmUgR0JFX1ZUX1hZTUFYX01BWFhfTVNCCTExCisjZGVmaW5lIEdCRV9WVF9YWU1BWF9NQVhYX0xTQgkgMAorI2RlZmluZSBHQkVfVlRfWFlNQVhfTUFYWV9NU0IJMjMKKyNkZWZpbmUgR0JFX1ZUX1hZTUFYX01BWFlfTFNCCTEyCisKKyNkZWZpbmUgR0JFX1ZUX0hQSVhFTl9IUElYRU5fT05fTVNCCTIzCisjZGVmaW5lIEdCRV9WVF9IUElYRU5fSFBJWEVOX09OX0xTQgkxMgorI2RlZmluZSBHQkVfVlRfSFBJWEVOX0hQSVhFTl9PRkZfTVNCCTExCisjZGVmaW5lIEdCRV9WVF9IUElYRU5fSFBJWEVOX09GRl9MU0IJIDAKKworI2RlZmluZSBHQkVfVlRfVlBJWEVOX1ZQSVhFTl9PTl9NU0IJMjMKKyNkZWZpbmUgR0JFX1ZUX1ZQSVhFTl9WUElYRU5fT05fTFNCCTEyCisjZGVmaW5lIEdCRV9WVF9WUElYRU5fVlBJWEVOX09GRl9NU0IJMTEKKyNkZWZpbmUgR0JFX1ZUX1ZQSVhFTl9WUElYRU5fT0ZGX0xTQgkgMAorCisjZGVmaW5lIEdCRV9PVlJfQ09OVFJPTF9PVlJfRE1BX0VOQUJMRV9NU0IJIDAKKyNkZWZpbmUgR0JFX09WUl9DT05UUk9MX09WUl9ETUFfRU5BQkxFX0xTQgkgMAorCisjZGVmaW5lIEdCRV9PVlJfSU5IV0NUUkxfT1ZSX0RNQV9FTkFCTEVfTVNCCSAwCisjZGVmaW5lIEdCRV9PVlJfSU5IV0NUUkxfT1ZSX0RNQV9FTkFCTEVfTFNCCSAwCisKKyNkZWZpbmUgR0JFX09WUl9XSURUSF9USUxFX09WUl9GSUZPX1JFU0VUX01TQgkxMworI2RlZmluZSBHQkVfT1ZSX1dJRFRIX1RJTEVfT1ZSX0ZJRk9fUkVTRVRfTFNCCTEzCisKKyNkZWZpbmUgR0JFX0ZSTV9DT05UUk9MX0ZSTV9ETUFfRU5BQkxFX01TQgkgMAorI2RlZmluZSBHQkVfRlJNX0NPTlRST0xfRlJNX0RNQV9FTkFCTEVfTFNCCSAwCisjZGVmaW5lIEdCRV9GUk1fQ09OVFJPTF9GUk1fVElMRV9QVFJfTVNCCTMxCisjZGVmaW5lIEdCRV9GUk1fQ09OVFJPTF9GUk1fVElMRV9QVFJfTFNCCSA5CisjZGVmaW5lIEdCRV9GUk1fQ09OVFJPTF9GUk1fTElORUFSX01TQgkJIDEKKyNkZWZpbmUgR0JFX0ZSTV9DT05UUk9MX0ZSTV9MSU5FQVJfTFNCCQkgMQorCisjZGVmaW5lIEdCRV9GUk1fSU5IV0NUUkxfRlJNX0RNQV9FTkFCTEVfTVNCCSAwCisjZGVmaW5lIEdCRV9GUk1fSU5IV0NUUkxfRlJNX0RNQV9FTkFCTEVfTFNCCSAwCisKKyNkZWZpbmUgR0JFX0ZSTV9TSVpFX1RJTEVfRlJNX1dJRFRIX1RJTEVfTVNCCTEyCisjZGVmaW5lIEdCRV9GUk1fU0laRV9USUxFX0ZSTV9XSURUSF9USUxFX0xTQgkgNQorI2RlZmluZSBHQkVfRlJNX1NJWkVfVElMRV9GUk1fUkhTX01TQgkJIDQKKyNkZWZpbmUgR0JFX0ZSTV9TSVpFX1RJTEVfRlJNX1JIU19MU0IJCSAwCisjZGVmaW5lIEdCRV9GUk1fU0laRV9USUxFX0ZSTV9ERVBUSF9NU0IJCTE0CisjZGVmaW5lIEdCRV9GUk1fU0laRV9USUxFX0ZSTV9ERVBUSF9MU0IJCTEzCisjZGVmaW5lIEdCRV9GUk1fU0laRV9USUxFX0ZSTV9GSUZPX1JFU0VUX01TQgkxNQorI2RlZmluZSBHQkVfRlJNX1NJWkVfVElMRV9GUk1fRklGT19SRVNFVF9MU0IJMTUKKworI2RlZmluZSBHQkVfRlJNX1NJWkVfUElYRUxfRkJfSEVJR0hUX1BJWF9NU0IJMzEKKyNkZWZpbmUgR0JFX0ZSTV9TSVpFX1BJWEVMX0ZCX0hFSUdIVF9QSVhfTFNCCTE2CisKKyNkZWZpbmUgR0JFX0RJRF9DT05UUk9MX0RJRF9ETUFfRU5BQkxFX01TQgkgMAorI2RlZmluZSBHQkVfRElEX0NPTlRST0xfRElEX0RNQV9FTkFCTEVfTFNCCSAwCisjZGVmaW5lIEdCRV9ESURfSU5IV0NUUkxfRElEX0RNQV9FTkFCTEVfTVNCCSAwCisjZGVmaW5lIEdCRV9ESURfSU5IV0NUUkxfRElEX0RNQV9FTkFCTEVfTFNCCSAwCisKKyNkZWZpbmUgR0JFX0RJRF9TVEFSVF9YWV9ESURfU1RBUlRZX01TQgkJMjMKKyNkZWZpbmUgR0JFX0RJRF9TVEFSVF9YWV9ESURfU1RBUlRZX0xTQgkJMTIKKyNkZWZpbmUgR0JFX0RJRF9TVEFSVF9YWV9ESURfU1RBUlRYX01TQgkJMTEKKyNkZWZpbmUgR0JFX0RJRF9TVEFSVF9YWV9ESURfU1RBUlRYX0xTQgkJIDAKKworI2RlZmluZSBHQkVfQ1JTX1NUQVJUX1hZX0NSU19TVEFSVFlfTVNCCQkyMworI2RlZmluZSBHQkVfQ1JTX1NUQVJUX1hZX0NSU19TVEFSVFlfTFNCCQkxMgorI2RlZmluZSBHQkVfQ1JTX1NUQVJUX1hZX0NSU19TVEFSVFhfTVNCCQkxMQorI2RlZmluZSBHQkVfQ1JTX1NUQVJUX1hZX0NSU19TVEFSVFhfTFNCCQkgMAorCisjZGVmaW5lIEdCRV9XSURfQVVYX01TQgkJMTIKKyNkZWZpbmUgR0JFX1dJRF9BVVhfTFNCCQkxMQorI2RlZmluZSBHQkVfV0lEX0dBTU1BX01TQgkxMAorI2RlZmluZSBHQkVfV0lEX0dBTU1BX0xTQgkxMAorI2RlZmluZSBHQkVfV0lEX0NNX01TQgkJIDkKKyNkZWZpbmUgR0JFX1dJRF9DTV9MU0IJCSA1CisjZGVmaW5lIEdCRV9XSURfVFlQX01TQgkJIDQKKyNkZWZpbmUgR0JFX1dJRF9UWVBfTFNCCQkgMgorI2RlZmluZSBHQkVfV0lEX0JVRl9NU0IJCSAxCisjZGVmaW5lIEdCRV9XSURfQlVGX0xTQgkJIDAKKworI2RlZmluZSBHQkVfVkNfU1RBUlRfWFlfVkNfU1RBUlRZX01TQgkyMworI2RlZmluZSBHQkVfVkNfU1RBUlRfWFlfVkNfU1RBUlRZX0xTQgkxMgorI2RlZmluZSBHQkVfVkNfU1RBUlRfWFlfVkNfU1RBUlRYX01TQgkxMQorI2RlZmluZSBHQkVfVkNfU1RBUlRfWFlfVkNfU1RBUlRYX0xTQgkgMAorCisvKiBDb25zdGFudHMgKi8KKworI2RlZmluZSBHQkVfRlJNX0RFUFRIXzgJCTAKKyNkZWZpbmUgR0JFX0ZSTV9ERVBUSF8xNgkxCisjZGVmaW5lIEdCRV9GUk1fREVQVEhfMzIJMgorCisjZGVmaW5lIEdCRV9DTU9ERV9JOAkJMAorI2RlZmluZSBHQkVfQ01PREVfSTEyCQkxCisjZGVmaW5lIEdCRV9DTU9ERV9SRzNCMgkJMgorI2RlZmluZSBHQkVfQ01PREVfUkdCNAkJMworI2RlZmluZSBHQkVfQ01PREVfQVJHQjUJCTQKKyNkZWZpbmUgR0JFX0NNT0RFX1JHQjgJCTUKKyNkZWZpbmUgR0JFX0NNT0RFX1JHQkE1CQk2CisjZGVmaW5lIEdCRV9DTU9ERV9SR0IxMAkJNworCisjZGVmaW5lIEdCRV9CTU9ERV9CT1RICQkzCisKKyNkZWZpbmUgR0JFX0NSU19NQUdJQwkJNTQKKyNkZWZpbmUgR0JFX1BJWEVOX01BR0lDX09OCTE5CisjZGVmaW5lIEdCRV9QSVhFTl9NQUdJQ19PRkYJIDIKKworI2RlZmluZSBHQkVfVExCX1NJWkUJCTEyOAorCisvKiBbMV0gLSBvbmx5IEdCRSByZXZpc2lvbiAyIGFuZCBsYXRlciAqLworCisvKgorICogVmlkZW8gVGltaW5nIERhdGEgU3RydWN0dXJlCisgKi8KKworc3RydWN0IGdiZV90aW1pbmdfaW5mbyB7CisJaW50IGZsYWdzOworCXNob3J0IHdpZHRoOwkJLyogTW9uaXRvciByZXNvbHV0aW9uICovCisJc2hvcnQgaGVpZ2h0OworCWludCBmaWVsZHNfc2VjOwkJLyogZmllbGRzL3NlYyAgKEh6IC0zIGRlYy4gcGxhY2VzICovCisJaW50IGNmcmVxOwkJLyogcGl4ZWwgY2xvY2sgZnJlcXVlbmN5IChNSHogLTMgZGVjLiBwbGFjZXMpICovCisJc2hvcnQgaHRvdGFsOwkJLyogSG9yaXpvbnRhbCB0b3RhbCBwaXhlbHMgKi8KKwlzaG9ydCBoYmxhbmtfc3RhcnQ7CS8qIEhvcml6b250YWwgYmxhbmsgc3RhcnQgKi8KKwlzaG9ydCBoYmxhbmtfZW5kOwkvKiBIb3Jpem9udGFsIGJsYW5rIGVuZCAqLworCXNob3J0IGhzeW5jX3N0YXJ0OwkvKiBIb3Jpem9udGFsIHN5bmMgc3RhcnQgKi8KKwlzaG9ydCBoc3luY19lbmQ7CS8qIEhvcml6b250YWwgc3luYyBlbmQgKi8KKwlzaG9ydCB2dG90YWw7CQkvKiBWZXJ0aWNhbCB0b3RhbCBsaW5lcyAqLworCXNob3J0IHZibGFua19zdGFydDsJLyogVmVydGljYWwgYmxhbmsgc3RhcnQgKi8KKwlzaG9ydCB2YmxhbmtfZW5kOwkvKiBWZXJ0aWNhbCBibGFuayBlbmQgKi8KKwlzaG9ydCB2c3luY19zdGFydDsJLyogVmVydGljYWwgc3luYyBzdGFydCAqLworCXNob3J0IHZzeW5jX2VuZDsJLyogVmVydGljYWwgc3luYyBlbmQgKi8KKwlzaG9ydCBwbGxfbTsJCS8qIFBMTCBNIHBhcmFtZXRlciAqLworCXNob3J0IHBsbF9uOwkJLyogUExMIFAgcGFyYW1ldGVyICovCisJc2hvcnQgcGxsX3A7CQkvKiBQTEwgTiBwYXJhbWV0ZXIgKi8KK307CisKKy8qIERlZmluZXMgZm9yIGdiZV92b2ZfaW5mb190IGZsYWdzICovCisKKyNkZWZpbmUgR0JFX1ZPRl9VTktOT1dOTU9OCTEKKyNkZWZpbmUgR0JFX1ZPRl9TVEVSRU8JCTIKKyNkZWZpbmUgR0JFX1ZPRl9ET19HRU5TWU5DCTQJLyogZW5hYmxlIGluY29taW5nIHN5bmMgKi8KKyNkZWZpbmUgR0JFX1ZPRl9TWU5DX09OX0dSRUVOCTgJLyogc3luYyBvbiBncmVlbiAqLworI2RlZmluZSBHQkVfVk9GX0ZMQVRQQU5FTAkweDEwMDAJLyogRkxBVFBBTkVMIFRpbWluZyAqLworI2RlZmluZSBHQkVfVk9GX01BR0lDS0VZCTB4MjAwMAkvKiBCYWNrZG9vciBrZXkgKi8KKworI2VuZGlmCQkvKiAhIF9fR0JFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS92aWRlby9pZ2EuaCBiL2luY2x1ZGUvdmlkZW8vaWdhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE0OGYxNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvdmlkZW8vaWdhLmgKQEAgLTAsMCArMSwyNCBAQAorLyogJElkOiBpZ2EuaCx2IDEuMiAxOTk5LzA5LzExIDIyOjU2OjMxIHphaXRjZXYgRXhwICQKKyAqIGlnYTE2ODIuaDogU3BhcmMvUENJIGlnYTE2ODIgZHJpdmVyIGNvbnN0YW50cyBldGMuCisgKgorICogQ29weWxlZnQgMTk5OCBWLiBSb2dhbm92IGFuZCBHLiBSYWlrbworICovCisKKyNpZm5kZWYgX0lHQTE2ODJfSAorI2RlZmluZSBfSUdBMTY4Ml9IIDEKKworI2RlZmluZSBJR0FfQVRUUl9DVEwJCQkweDNDMAorI2RlZmluZSAgIElHQV9JRFhfVkdBX09WRVJTQ0FOCQkweDExCisjZGVmaW5lIERBQ19XX0lOREVYICAgICAgICAgICAgICAgICAgICAgMHgwM0M4CisjZGVmaW5lIERBQ19EQVRBICAgICAgICAgICAgICAgICAgICAgICAgMHgwM0M5CisjZGVmaW5lIElHQV9FWFRfQ05UUkwgICAgICAgICAgICAgICAgICAgMHgzQ0UKKyNkZWZpbmUgICBJR0FfSURYX0VYVF9CVVNfQ05UTCAgICAgICAgICAweDMwCisjZGVmaW5lICAgICBNRU1fU0laRV9BTElBUyAgICAgICAgICAgICAgMHgzCisjZGVmaW5lICAgICBNRU1fU0laRV8xTSAgICAgICAgICAgICAgICAgMHgwCisjZGVmaW5lICAgICBNRU1fU0laRV8yTSAgICAgICAgICAgICAgICAgMHgxCisjZGVmaW5lICAgICBNRU1fU0laRV80TSAgICAgICAgICAgICAgICAgMHgyCisjZGVmaW5lICAgICBNRU1fU0laRV9SRVNFUlZFRCAgICAgICAgICAgMHgzCisjZGVmaW5lICAgSUdBX0lEWF9PVkVSU0NBTl9DT0xPUiAgICAgICAgMHg1OAorI2RlZmluZSAgIElHQV9JRFhfRVhUX01FTV8yICAgICAgICAgICAgIDB4NzIKKworI2VuZGlmIC8qICEoX0lHQTE2ODJfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdmlkZW8va3lyby5oIGIvaW5jbHVkZS92aWRlby9reXJvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJlZDM3YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvdmlkZW8va3lyby5oCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiAgbGludXgvZHJpdmVycy92aWRlby9reXJvL2tyeW8uaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDIgU1RNaWNyb2VsZWN0cm9uaWNzCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0IFBhdWwgTXVuZHQKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfS1lST19ICisjZGVmaW5lIF9LWVJPX0gKKworc3RydWN0IGt5cm9mYl9pbmZvIHsKKwl2b2lkIF9faW9tZW0gKnJlZ2Jhc2U7CisKKwl1MzIgSFRvdDsJLyogSG9yIFRvdGFsIFRpbWUgICAgKi8KKwl1MzIgSEZQOwkvKiBIb3IgRnJvbnQgUG9yY2ggICAqLworCXUzMiBIU1Q7CS8qIEhvciBTeW5jIFRpbWUgICAgICovCisJdTMyIEhCUDsJLyogSG9yIEJhY2sgUG9yY2ggICAgKi8KKwlzMzIgSFNQOwkJLyogSG9yIFN5bmMgUG9sYXJpdHkgKi8KKwl1MzIgVlRvdDsJLyogVmVyIFRvdGFsIFRpbWUgICAgKi8KKwl1MzIgVkZQOwkvKiBWZXIgRnJvbnQgUG9yY2ggICAqLworCXUzMiBWU1Q7CS8qIFZlciBTeW5jIFRpbWUgICAgICovCisJdTMyIFZCUDsJLyogVmVyIEJhY2sgUG9yY2ggICAgKi8KKwlzMzIgVlNQOwkJLyogVmVyIFN5bmMgUG9sYXJpdHkgKi8KKwl1MzIgWFJFUzsJLyogWCBSZXNvbHV0aW9uICAgICAgKi8KKwl1MzIgWVJFUzsJLyogWSBSZXNvbHV0aW9uICAgICAgKi8KKwl1MzIgVkZSRVE7CS8qIFZlciBGcmVxdWVuY3kgICAgICovCisJdTMyIFBJWENMSzsJLyogUGl4ZWwgQ2xvY2sgICAgICAgKi8KKwl1MzIgSENMSzsJLyogSG9yIENsb2NrICAgICAgICAgKi8KKworCS8qIFVzZWZ1bGwgdG8gaG9sZCBkZXB0aCBoZXJlIGZvciBMaW51eCAqLworCXU4IFBJWERFUFRIOworCisjaWZkZWYgQ09ORklHX01UUlIKKwlpbnQgbXRycl9oYW5kbGU7CisjZW5kaWYKK307CisKK2V4dGVybiBpbnQga3lyb19kZXZfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIGt5cm9fZGV2X3Jlc2V0KHZvaWQpOworCitleHRlcm4gdW5zaWduZWQgY2hhciAqa3lyb19kZXZfcGh5c2ljYWxfZmJfcHRyKHZvaWQpOworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgKmt5cm9fZGV2X3ZpcnR1YWxfZmJfcHRyKHZvaWQpOworZXh0ZXJuIHZvaWQgKmt5cm9fZGV2X3BoeXNpY2FsX3JlZ3NfcHRyKHZvaWQpOworZXh0ZXJuIHZvaWQgKmt5cm9fZGV2X3ZpcnR1YWxfcmVnc19wdHIodm9pZCk7CitleHRlcm4gdW5zaWduZWQgaW50IGt5cm9fZGV2X2ZiX3NpemUodm9pZCk7CitleHRlcm4gdW5zaWduZWQgaW50IGt5cm9fZGV2X3JlZ3Nfc2l6ZSh2b2lkKTsKKworZXh0ZXJuIHUzMiBreXJvX2Rldl9vdmVybGF5X29mZnNldCh2b2lkKTsKKworLyoKKyAqIGJlbmVkaWN0Lmdhc3RlckBzdXBlcmguY29tCisgKiBBZGRlZCB0aGUgZm9sbG93IElPQ1RMUyBmb3IgdGhlIGNyZWF0aW9uIG9mIG92ZXJsYXkgc2VydmljZXMuLi4KKyAqLworI2RlZmluZSBLWVJPX0lPQ19NQUdJQyAnaycKKworI2RlZmluZSBLWVJPX0lPQ1RMX09WRVJMQVlfQ1JFQVRFICAgICAgIF9JTyhLWVJPX0lPQ19NQUdJQywgMCkKKyNkZWZpbmUgS1lST19JT0NUTF9PVkVSTEFZX1ZJRVdQT1JUX1NFVCBfSU8oS1lST19JT0NfTUFHSUMsIDEpCisjZGVmaW5lIEtZUk9fSU9DVExfU0VUX1ZJREVPX01PREUgICAgICAgX0lPKEtZUk9fSU9DX01BR0lDLCAyKQorI2RlZmluZSBLWVJPX0lPQ1RMX1VWU1RSSURFICAgICAgICAgICAgIF9JTyhLWVJPX0lPQ19NQUdJQywgMykKKyNkZWZpbmUgS1lST19JT0NUTF9PVkVSTEFZX09GRlNFVCAgICAgICBfSU8oS1lST19JT0NfTUFHSUMsIDQpCisjZGVmaW5lIEtZUk9fSU9DVExfU1RSSURFICAgICAgICAgICAgICAgX0lPKEtZUk9fSU9DX01BR0lDLCA1KQorCisvKgorICogVGhlIGZvbGxvdyAzIHN0cnVjdHVyZXMgYXJlIHVzZWQgdG8gcGFzcyBkYXRhIGZyb20gdXNlciBzcGFjZSBpbnRvIHRoZSBrZXJuZWwKKyAqIGZvciB0aGUgY3JlYXRpb24gb2Ygb3ZlcmxheSBzdXJmYWNlcyBhbmQgc2V0dGluZyB0aGUgdmlkZW8gbW9kZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgX09WRVJMQVlfQ1JFQVRFIHsKKwl1MzIgdWxXaWR0aDsKKwl1MzIgdWxIZWlnaHQ7CisJaW50IGJMaW5lYXI7Cit9IG92ZXJsYXlfY3JlYXRlOworCit0eXBlZGVmIHN0cnVjdCBfT1ZFUkxBWV9WSUVXUE9SVF9TRVQgeworCXUzMiB4T3JnaW47CisJdTMyIHlPcmdpbjsKKwl1MzIgeFNpemU7CisJdTMyIHlTaXplOworfSBvdmVybGF5X3ZpZXdwb3J0X3NldDsKKwordHlwZWRlZiBzdHJ1Y3QgX1NFVF9WSURFT19NT0RFIHsKKwl1MzIgdWxXaWR0aDsKKwl1MzIgdWxIZWlnaHQ7CisJdTMyIHVsU2NhbjsKKwl1OCBkaXNwbGF5RGVwdGg7CisJaW50IGJMaW5lYXI7Cit9IHNldF92aWRlb19tb2RlOworCisjZW5kaWYgLyogX0tZUk9fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS92aWRlby9tYWNoNjQuaCBiL2luY2x1ZGUvdmlkZW8vbWFjaDY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDlhN2Y0YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvdmlkZW8vbWFjaDY0LmgKQEAgLTAsMCArMSwxMzc3IEBACisvKgorICogQVRJIE1hY2g2NCBSZWdpc3RlciBEZWZpbml0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMTk5NyBNaWNoYWVsIEFLIFRlc2NoCisgKiAgd3JpdHRlbiB3aXRoIG11Y2ggaGVscCBmcm9tIEpvbiBIb3dlbGwKKyAqCisgKiBVcGRhdGVkIGZvciAzRCBSQUdFIFBSTyBhbmQgM0QgUkFHRSBNb2JpbGl0eSBieSBHZWVydCBVeXR0ZXJob2V2ZW4KKyAqCQorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisvKgorICogbW9zdCBvZiB0aGUgcmVzdCBvZiB0aGlzIGZpbGUgY29tZXMgZnJvbSBBVEkgc2FtcGxlIGNvZGUKKyAqLworI2lmbmRlZiBSRUdNQUNINjRfSAorI2RlZmluZSBSRUdNQUNINjRfSAorCisvKiBOT04tR1VJIE1FTU9SWSBNQVBQRUQgUmVnaXN0ZXJzIC0gZXhwcmVzc2VkIGluIEJZVEUgb2Zmc2V0cyAqLworCisvKiBBY2NlbGVyYXRvciBDUlRDICovCisjZGVmaW5lIENSVENfSF9UT1RBTF9ESVNQCTB4MDAwMAkvKiBEd29yZCBvZmZzZXQgMF8wMCAqLworI2RlZmluZSBDUlRDMl9IX1RPVEFMX0RJU1AJMHgwMDAwCS8qIER3b3JkIG9mZnNldCAwXzAwICovCisjZGVmaW5lIENSVENfSF9TWU5DX1NUUlRfV0lECTB4MDAwNAkvKiBEd29yZCBvZmZzZXQgMF8wMSAqLworI2RlZmluZSBDUlRDMl9IX1NZTkNfU1RSVF9XSUQJMHgwMDA0CS8qIER3b3JkIG9mZnNldCAwXzAxICovCisjZGVmaW5lIENSVENfSF9TWU5DX1NUUlQJMHgwMDA0CisjZGVmaW5lIENSVEMyX0hfU1lOQ19TVFJUCTB4MDAwNAorI2RlZmluZSBDUlRDX0hfU1lOQ19ETFkJCTB4MDAwNQorI2RlZmluZSBDUlRDMl9IX1NZTkNfRExZCTB4MDAwNQorI2RlZmluZSBDUlRDX0hfU1lOQ19XSUQJCTB4MDAwNgorI2RlZmluZSBDUlRDMl9IX1NZTkNfV0lECTB4MDAwNgorI2RlZmluZSBDUlRDX1ZfVE9UQUxfRElTUAkweDAwMDgJLyogRHdvcmQgb2Zmc2V0IDBfMDIgKi8KKyNkZWZpbmUgQ1JUQzJfVl9UT1RBTF9ESVNQCTB4MDAwOAkvKiBEd29yZCBvZmZzZXQgMF8wMiAqLworI2RlZmluZSBDUlRDX1ZfVE9UQUwJCTB4MDAwOAorI2RlZmluZSBDUlRDMl9WX1RPVEFMCQkweDAwMDgKKyNkZWZpbmUgQ1JUQ19WX0RJU1AJCTB4MDAwQQorI2RlZmluZSBDUlRDMl9WX0RJU1AJCTB4MDAwQQorI2RlZmluZSBDUlRDX1ZfU1lOQ19TVFJUX1dJRAkweDAwMEMJLyogRHdvcmQgb2Zmc2V0IDBfMDMgKi8KKyNkZWZpbmUgQ1JUQzJfVl9TWU5DX1NUUlRfV0lECTB4MDAwQwkvKiBEd29yZCBvZmZzZXQgMF8wMyAqLworI2RlZmluZSBDUlRDX1ZfU1lOQ19TVFJUCTB4MDAwQworI2RlZmluZSBDUlRDMl9WX1NZTkNfU1RSVAkweDAwMEMKKyNkZWZpbmUgQ1JUQ19WX1NZTkNfV0lECQkweDAwMEUKKyNkZWZpbmUgQ1JUQzJfVl9TWU5DX1dJRAkweDAwMEUKKyNkZWZpbmUgQ1JUQ19WTElORV9DUk5UX1ZMSU5FCTB4MDAxMAkvKiBEd29yZCBvZmZzZXQgMF8wNCAqLworI2RlZmluZSBDUlRDMl9WTElORV9DUk5UX1ZMSU5FCTB4MDAxMAkvKiBEd29yZCBvZmZzZXQgMF8wNCAqLworI2RlZmluZSBDUlRDX09GRl9QSVRDSAkJMHgwMDE0CS8qIER3b3JkIG9mZnNldCAwXzA1ICovCisjZGVmaW5lIENSVENfT0ZGU0VUCQkweDAwMTQKKyNkZWZpbmUgQ1JUQ19QSVRDSAkJMHgwMDE2CisjZGVmaW5lIENSVENfSU5UX0NOVEwJCTB4MDAxOAkvKiBEd29yZCBvZmZzZXQgMF8wNiAqLworI2RlZmluZSBDUlRDX0dFTl9DTlRMCQkweDAwMUMJLyogRHdvcmQgb2Zmc2V0IDBfMDcgKi8KKyNkZWZpbmUgQ1JUQ19QSVhfV0lEVEgJCTB4MDAxRAorI2RlZmluZSBDUlRDX0ZJRk8JCTB4MDAxRQorI2RlZmluZSBDUlRDX0VYVF9ESVNQCQkweDAwMUYKKworLyogTWVtb3J5IEJ1ZmZlciBDb250cm9sICovCisjZGVmaW5lIERTUF9DT05GSUcJCTB4MDAyMAkvKiBEd29yZCBvZmZzZXQgMF8wOCAqLworI2RlZmluZSBQTV9EU1BfQ09ORklHCQkweDAwMjAJLyogRHdvcmQgb2Zmc2V0IDBfMDggKE1vYmlsaXR5IE9ubHkpICovCisjZGVmaW5lIERTUF9PTl9PRkYJCTB4MDAyNAkvKiBEd29yZCBvZmZzZXQgMF8wOSAqLworI2RlZmluZSBQTV9EU1BfT05fT0ZGCQkweDAwMjQJLyogRHdvcmQgb2Zmc2V0IDBfMDkgKE1vYmlsaXR5IE9ubHkpICovCisjZGVmaW5lIFRJTUVSX0NPTkZJRwkJMHgwMDI4CS8qIER3b3JkIG9mZnNldCAwXzBBICovCisjZGVmaW5lIE1FTV9CVUZfQ05UTAkJMHgwMDJDCS8qIER3b3JkIG9mZnNldCAwXzBCICovCisjZGVmaW5lIE1FTV9BRERSX0NPTkZJRwkJMHgwMDM0CS8qIER3b3JkIG9mZnNldCAwXzBEICovCisKKy8qIEFjY2VsZXJhdG9yIENSVEMgKi8KKyNkZWZpbmUgQ1JUX1RSQVAJCTB4MDAzOAkvKiBEd29yZCBvZmZzZXQgMF8wRSAqLworCisjZGVmaW5lIEkyQ19DTlRMXzAJCTB4MDAzQwkvKiBEd29yZCBvZmZzZXQgMF8wRiAqLworCisjZGVmaW5lIERTVE5fQ09OVFJPTF9MRwkJMHgwMDNDCS8qIER3b3JkIG9mZnNldCAwXzBGIChMRykgKi8KKworLyogT3ZlcnNjYW4gKi8KKyNkZWZpbmUgT1ZSX0NMUgkJCTB4MDA0MAkvKiBEd29yZCBvZmZzZXQgMF8xMCAqLworI2RlZmluZSBPVlIyX0NMUgkJMHgwMDQwCS8qIER3b3JkIG9mZnNldCAwXzEwICovCisjZGVmaW5lIE9WUl9XSURfTEVGVF9SSUdIVAkweDAwNDQJLyogRHdvcmQgb2Zmc2V0IDBfMTEgKi8KKyNkZWZpbmUgT1ZSMl9XSURfTEVGVF9SSUdIVAkweDAwNDQJLyogRHdvcmQgb2Zmc2V0IDBfMTEgKi8KKyNkZWZpbmUgT1ZSX1dJRF9UT1BfQk9UVE9NCTB4MDA0OAkvKiBEd29yZCBvZmZzZXQgMF8xMiAqLworI2RlZmluZSBPVlIyX1dJRF9UT1BfQk9UVE9NCTB4MDA0OAkvKiBEd29yZCBvZmZzZXQgMF8xMiAqLworCisvKiBNZW1vcnkgQnVmZmVyIENvbnRyb2wgKi8KKyNkZWZpbmUgVkdBX0RTUF9DT05GSUcJCTB4MDA0QwkvKiBEd29yZCBvZmZzZXQgMF8xMyAqLworI2RlZmluZSBQTV9WR0FfRFNQX0NPTkZJRwkweDAwNEMJLyogRHdvcmQgb2Zmc2V0IDBfMTMgKE1vYmlsaXR5IE9ubHkpICovCisjZGVmaW5lIFZHQV9EU1BfT05fT0ZGCQkweDAwNTAJLyogRHdvcmQgb2Zmc2V0IDBfMTQgKi8KKyNkZWZpbmUgUE1fVkdBX0RTUF9PTl9PRkYJMHgwMDUwCS8qIER3b3JkIG9mZnNldCAwXzE0IChNb2JpbGl0eSBPbmx5KSAqLworI2RlZmluZSBEU1AyX0NPTkZJRwkJMHgwMDU0CS8qIER3b3JkIG9mZnNldCAwXzE1ICovCisjZGVmaW5lIFBNX0RTUDJfQ09ORklHCQkweDAwNTQJLyogRHdvcmQgb2Zmc2V0IDBfMTUgKE1vYmlsaXR5IE9ubHkpICovCisjZGVmaW5lIERTUDJfT05fT0ZGCQkweDAwNTgJLyogRHdvcmQgb2Zmc2V0IDBfMTYgKi8KKyNkZWZpbmUgUE1fRFNQMl9PTl9PRkYJCTB4MDA1OAkvKiBEd29yZCBvZmZzZXQgMF8xNiAoTW9iaWxpdHkgT25seSkgKi8KKworLyogQWNjZWxlcmF0b3IgQ1JUQyAqLworI2RlZmluZSBDUlRDMl9PRkZfUElUQ0gJCTB4MDA1QwkvKiBEd29yZCBvZmZzZXQgMF8xNyAqLworCisvKiBIYXJkd2FyZSBDdXJzb3IgKi8KKyNkZWZpbmUgQ1VSX0NMUjAJCTB4MDA2MAkvKiBEd29yZCBvZmZzZXQgMF8xOCAqLworI2RlZmluZSBDVVIyX0NMUjAJCTB4MDA2MAkvKiBEd29yZCBvZmZzZXQgMF8xOCAqLworI2RlZmluZSBDVVJfQ0xSMQkJMHgwMDY0CS8qIER3b3JkIG9mZnNldCAwXzE5ICovCisjZGVmaW5lIENVUjJfQ0xSMQkJMHgwMDY0CS8qIER3b3JkIG9mZnNldCAwXzE5ICovCisjZGVmaW5lIENVUl9PRkZTRVQJCTB4MDA2OAkvKiBEd29yZCBvZmZzZXQgMF8xQSAqLworI2RlZmluZSBDVVIyX09GRlNFVAkJMHgwMDY4CS8qIER3b3JkIG9mZnNldCAwXzFBICovCisjZGVmaW5lIENVUl9IT1JaX1ZFUlRfUE9TTgkweDAwNkMJLyogRHdvcmQgb2Zmc2V0IDBfMUIgKi8KKyNkZWZpbmUgQ1VSMl9IT1JaX1ZFUlRfUE9TTgkweDAwNkMJLyogRHdvcmQgb2Zmc2V0IDBfMUIgKi8KKyNkZWZpbmUgQ1VSX0hPUlpfVkVSVF9PRkYJMHgwMDcwCS8qIER3b3JkIG9mZnNldCAwXzFDICovCisjZGVmaW5lIENVUjJfSE9SWl9WRVJUX09GRgkweDAwNzAJLyogRHdvcmQgb2Zmc2V0IDBfMUMgKi8KKworI2RlZmluZSBDT05GSUdfUEFORUxfTEcJCTB4MDA3NAkvKiBEd29yZCBvZmZzZXQgMF8xRCAoTEcpICovCisKKy8qIEdlbmVyYWwgSS9PIENvbnRyb2wgKi8KKyNkZWZpbmUgR1BfSU8JCQkweDAwNzgJLyogRHdvcmQgb2Zmc2V0IDBfMUUgKi8KKworLyogVGVzdCBhbmQgRGVidWcgKi8KKyNkZWZpbmUgSFdfREVCVUcJCTB4MDA3QwkvKiBEd29yZCBvZmZzZXQgMF8xRiAqLworCisvKiBTY3JhdGNoIFBhZCBhbmQgVGVzdCAqLworI2RlZmluZSBTQ1JBVENIX1JFRzAJCTB4MDA4MAkvKiBEd29yZCBvZmZzZXQgMF8yMCAqLworI2RlZmluZSBTQ1JBVENIX1JFRzEJCTB4MDA4NAkvKiBEd29yZCBvZmZzZXQgMF8yMSAqLworI2RlZmluZSBTQ1JBVENIX1JFRzIJCTB4MDA4OAkvKiBEd29yZCBvZmZzZXQgMF8yMiAqLworI2RlZmluZSBTQ1JBVENIX1JFRzMJCTB4MDA4QwkvKiBEd29yZCBvZmZzZXQgMF8yMyAqLworCisvKiBDbG9jayBDb250cm9sICovCisjZGVmaW5lIENMT0NLX0NOVEwJCQkweDAwOTAJLyogRHdvcmQgb2Zmc2V0IDBfMjQgKi8KKy8qIENMT0NLX0NOVEwgcmVnaXN0ZXIgY29uc3RhbnRzIENUIExBWU9VVCAqLworI2RlZmluZSBDTE9DS19TRUwJCQkweDBmCisjZGVmaW5lIENMT0NLX1NFTF9JTlRFUk5BTAkJMHgwMworI2RlZmluZSBDTE9DS19TRUxfRVhURVJOQUwJCTB4MGMKKyNkZWZpbmUgQ0xPQ0tfRElWCQkJMHgzMAorI2RlZmluZSBDTE9DS19ESVYxCQkJMHgwMAorI2RlZmluZSBDTE9DS19ESVYyCQkJMHgxMAorI2RlZmluZSBDTE9DS19ESVY0CQkJMHgyMAorI2RlZmluZSBDTE9DS19TVFJPQkUJCQkweDQwCisvKiAgPwkJCQkJMHg4MCAqLworLyogQ0xPQ0tfQ05UTCByZWdpc3RlciBjb25zdGFudHMgR1ggTEFZT1VUICovCisjZGVmaW5lIENMT0NLX0JJVAkJCTB4MDQJLyogRm9yIElDUzI1OTUgKi8KKyNkZWZpbmUgQ0xPQ0tfUFVMU0UJCQkweDA4CS8qIEZvciBJQ1MyNTk1ICovCisvKiNkZWZpbmUgQ0xPQ0tfU1RST0JFCQkJMHg0MCBkaXRvIGFzIENUICovCisjZGVmaW5lIENMT0NLX0RBVEEJCQkweDgwCisKKy8qIEZvciBpbnRlcm5hbCBQTEwoQ1QpIHN0YXJ0ICovCisjZGVmaW5lIENMT0NLX0NOVExfQUREUgkJCUNMT0NLX0NOVEwgKyAxCisjZGVmaW5lIFBMTF9XUl9FTgkJCTB4MDIKKyNkZWZpbmUgUExMX0FERFIJCQkweGZjCisjZGVmaW5lIENMT0NLX0NOVExfREFUQQkJCUNMT0NLX0NOVEwgKyAyCisjZGVmaW5lIFBMTF9EQVRBCQkJMHhmZgorLyogRm9yIGludGVybmFsIFBMTChDVCkgZW5kICovCisKKyNkZWZpbmUgQ0xPQ0tfU0VMX0NOVEwJCTB4MDA5MAkvKiBEd29yZCBvZmZzZXQgMF8yNCAqLworCisvKiBDb25maWd1cmF0aW9uICovCisjZGVmaW5lIENPTkZJR19TVEFUMQkJMHgwMDk0CS8qIER3b3JkIG9mZnNldCAwXzI1ICovCisjZGVmaW5lIENPTkZJR19TVEFUMgkJMHgwMDk4CS8qIER3b3JkIG9mZnNldCAwXzI2ICovCisKKy8qIEJ1cyBDb250cm9sICovCisjZGVmaW5lIEJVU19DTlRMCQkweDAwQTAJLyogRHdvcmQgb2Zmc2V0IDBfMjggKi8KKworI2RlZmluZSBMQ0RfSU5ERVgJCTB4MDBBNAkvKiBEd29yZCBvZmZzZXQgMF8yOSAqLworI2RlZmluZSBMQ0RfREFUQQkJMHgwMEE4CS8qIER3b3JkIG9mZnNldCAwXzJBICovCisKKyNkZWZpbmUgSEZCX1BJVENIX0FERFJfTEcJMHgwMEE4CS8qIER3b3JkIG9mZnNldCAwXzJBIChMRykgKi8KKworLyogTWVtb3J5IENvbnRyb2wgKi8KKyNkZWZpbmUgRVhUX01FTV9DTlRMCQkweDAwQUMJLyogRHdvcmQgb2Zmc2V0IDBfMkIgKi8KKyNkZWZpbmUgTUVNX0NOVEwJCTB4MDBCMAkvKiBEd29yZCBvZmZzZXQgMF8yQyAqLworI2RlZmluZSBNRU1fVkdBX1dQX1NFTAkJMHgwMEI0CS8qIER3b3JkIG9mZnNldCAwXzJEICovCisjZGVmaW5lIE1FTV9WR0FfUlBfU0VMCQkweDAwQjgJLyogRHdvcmQgb2Zmc2V0IDBfMkUgKi8KKworI2RlZmluZSBJMkNfQ05UTF8xCQkweDAwQkMJLyogRHdvcmQgb2Zmc2V0IDBfMkYgKi8KKworI2RlZmluZSBMVF9HSU9fTEcJCTB4MDBCQwkvKiBEd29yZCBvZmZzZXQgMF8yRiAoTEcpICovCisKKy8qIERBQyBDb250cm9sICovCisjZGVmaW5lIERBQ19SRUdTCQkweDAwQzAJLyogRHdvcmQgb2Zmc2V0IDBfMzAgKi8KKyNkZWZpbmUgREFDX1dfSU5ERVgJCTB4MDBDMAkvKiBEd29yZCBvZmZzZXQgMF8zMCAqLworI2RlZmluZSBEQUNfREFUQQkJMHgwMEMxCS8qIER3b3JkIG9mZnNldCAwXzMwICovCisjZGVmaW5lIERBQ19NQVNLCQkweDAwQzIJLyogRHdvcmQgb2Zmc2V0IDBfMzAgKi8KKyNkZWZpbmUgREFDX1JfSU5ERVgJCTB4MDBDMwkvKiBEd29yZCBvZmZzZXQgMF8zMCAqLworI2RlZmluZSBEQUNfQ05UTAkJMHgwMEM0CS8qIER3b3JkIG9mZnNldCAwXzMxICovCisKKyNkZWZpbmUgRVhUX0RBQ19SRUdTCQkweDAwQzgJLyogRHdvcmQgb2Zmc2V0IDBfMzIgKi8KKworI2RlZmluZSBIT1JaX1NUUkVUQ0hJTkdfTEcJMHgwMEM4CS8qIER3b3JkIG9mZnNldCAwXzMyIChMRykgKi8KKyNkZWZpbmUgVkVSVF9TVFJFVENISU5HX0xHCTB4MDBDQwkvKiBEd29yZCBvZmZzZXQgMF8zMyAoTEcpICovCisKKy8qIFRlc3QgYW5kIERlYnVnICovCisjZGVmaW5lIEdFTl9URVNUX0NOVEwJCTB4MDBEMAkvKiBEd29yZCBvZmZzZXQgMF8zNCAqLworCisvKiBDdXN0b20gTWFjcm9zICovCisjZGVmaW5lIENVU1RPTV9NQUNST19DTlRMCTB4MDBENAkvKiBEd29yZCBvZmZzZXQgMF8zNSAqLworCisjZGVmaW5lIExDRF9HRU5fQ05UTF9MRwkJMHgwMEQ0CS8qIER3b3JkIG9mZnNldCAwXzM1IChMRykgKi8KKyNkZWZpbmUgUE9XRVJfTUFOQUdFTUVOVF9MRwkweDAwRDgJLyogRHdvcmQgb2Zmc2V0IDBfMzYgKExHKSAqLworCisvKiBDb25maWd1cmF0aW9uICovCisjZGVmaW5lIENPTkZJR19DTlRMCQkweDAwREMJLyogRHdvcmQgb2Zmc2V0IDBfMzcgKENULCBFVCwgVlQpICovCisjZGVmaW5lIENPTkZJR19DSElQX0lECQkweDAwRTAJLyogRHdvcmQgb2Zmc2V0IDBfMzggKi8KKyNkZWZpbmUgQ09ORklHX1NUQVQwCQkweDAwRTQJLyogRHdvcmQgb2Zmc2V0IDBfMzkgKi8KKworLyogVGVzdCBhbmQgRGVidWcgKi8KKyNkZWZpbmUgQ1JDX1NJRwkJCTB4MDBFOAkvKiBEd29yZCBvZmZzZXQgMF8zQSAqLworI2RlZmluZSBDUkMyX1NJRwkJMHgwMEU4CS8qIER3b3JkIG9mZnNldCAwXzNBICovCisKKworLyogR1VJIE1FTU9SWSBNQVBQRUQgUmVnaXN0ZXJzICovCisKKy8qIERyYXcgRW5naW5lIERlc3RpbmF0aW9uIFRyYWplY3RvcnkgKi8KKyNkZWZpbmUgRFNUX09GRl9QSVRDSAkJMHgwMTAwCS8qIER3b3JkIG9mZnNldCAwXzQwICovCisjZGVmaW5lIERTVF9YCQkJMHgwMTA0CS8qIER3b3JkIG9mZnNldCAwXzQxICovCisjZGVmaW5lIERTVF9ZCQkJMHgwMTA4CS8qIER3b3JkIG9mZnNldCAwXzQyICovCisjZGVmaW5lIERTVF9ZX1gJCQkweDAxMEMJLyogRHdvcmQgb2Zmc2V0IDBfNDMgKi8KKyNkZWZpbmUgRFNUX1dJRFRICQkweDAxMTAJLyogRHdvcmQgb2Zmc2V0IDBfNDQgKi8KKyNkZWZpbmUgRFNUX0hFSUdIVAkJMHgwMTE0CS8qIER3b3JkIG9mZnNldCAwXzQ1ICovCisjZGVmaW5lIERTVF9IRUlHSFRfV0lEVEgJMHgwMTE4CS8qIER3b3JkIG9mZnNldCAwXzQ2ICovCisjZGVmaW5lIERTVF9YX1dJRFRICQkweDAxMUMJLyogRHdvcmQgb2Zmc2V0IDBfNDcgKi8KKyNkZWZpbmUgRFNUX0JSRVNfTE5USAkJMHgwMTIwCS8qIER3b3JkIG9mZnNldCAwXzQ4ICovCisjZGVmaW5lIERTVF9CUkVTX0VSUgkJMHgwMTI0CS8qIER3b3JkIG9mZnNldCAwXzQ5ICovCisjZGVmaW5lIERTVF9CUkVTX0lOQwkJMHgwMTI4CS8qIER3b3JkIG9mZnNldCAwXzRBICovCisjZGVmaW5lIERTVF9CUkVTX0RFQwkJMHgwMTJDCS8qIER3b3JkIG9mZnNldCAwXzRCICovCisjZGVmaW5lIERTVF9DTlRMCQkweDAxMzAJLyogRHdvcmQgb2Zmc2V0IDBfNEMgKi8KKyNkZWZpbmUgRFNUX1lfWF9fQUxJQVNfXwkweDAxMzQJLyogRHdvcmQgb2Zmc2V0IDBfNEQgKi8KKyNkZWZpbmUgVFJBSUxfQlJFU19FUlIJCTB4MDEzOAkvKiBEd29yZCBvZmZzZXQgMF80RSAqLworI2RlZmluZSBUUkFJTF9CUkVTX0lOQwkJMHgwMTNDCS8qIER3b3JkIG9mZnNldCAwXzRGICovCisjZGVmaW5lIFRSQUlMX0JSRVNfREVDCQkweDAxNDAJLyogRHdvcmQgb2Zmc2V0IDBfNTAgKi8KKyNkZWZpbmUgTEVBRF9CUkVTX0xOVEgJCTB4MDE0NAkvKiBEd29yZCBvZmZzZXQgMF81MSAqLworI2RlZmluZSBaX09GRl9QSVRDSAkJMHgwMTQ4CS8qIER3b3JkIG9mZnNldCAwXzUyICovCisjZGVmaW5lIFpfQ05UTAkJCTB4MDE0QwkvKiBEd29yZCBvZmZzZXQgMF81MyAqLworI2RlZmluZSBBTFBIQV9UU1RfQ05UTAkJMHgwMTUwCS8qIER3b3JkIG9mZnNldCAwXzU0ICovCisjZGVmaW5lIFNFQ09OREFSWV9TVFdfRVhQCTB4MDE1OAkvKiBEd29yZCBvZmZzZXQgMF81NiAqLworI2RlZmluZSBTRUNPTkRBUllfU19YX0lOQwkweDAxNUMJLyogRHdvcmQgb2Zmc2V0IDBfNTcgKi8KKyNkZWZpbmUgU0VDT05EQVJZX1NfWV9JTkMJMHgwMTYwCS8qIER3b3JkIG9mZnNldCAwXzU4ICovCisjZGVmaW5lIFNFQ09OREFSWV9TX1NUQVJUCTB4MDE2NAkvKiBEd29yZCBvZmZzZXQgMF81OSAqLworI2RlZmluZSBTRUNPTkRBUllfV19YX0lOQwkweDAxNjgJLyogRHdvcmQgb2Zmc2V0IDBfNUEgKi8KKyNkZWZpbmUgU0VDT05EQVJZX1dfWV9JTkMJMHgwMTZDCS8qIER3b3JkIG9mZnNldCAwXzVCICovCisjZGVmaW5lIFNFQ09OREFSWV9XX1NUQVJUCTB4MDE3MAkvKiBEd29yZCBvZmZzZXQgMF81QyAqLworI2RlZmluZSBTRUNPTkRBUllfVF9YX0lOQwkweDAxNzQJLyogRHdvcmQgb2Zmc2V0IDBfNUQgKi8KKyNkZWZpbmUgU0VDT05EQVJZX1RfWV9JTkMJMHgwMTc4CS8qIER3b3JkIG9mZnNldCAwXzVFICovCisjZGVmaW5lIFNFQ09OREFSWV9UX1NUQVJUCTB4MDE3QwkvKiBEd29yZCBvZmZzZXQgMF81RiAqLworCisvKiBEcmF3IEVuZ2luZSBTb3VyY2UgVHJhamVjdG9yeSAqLworI2RlZmluZSBTUkNfT0ZGX1BJVENICQkweDAxODAJLyogRHdvcmQgb2Zmc2V0IDBfNjAgKi8KKyNkZWZpbmUgU1JDX1gJCQkweDAxODQJLyogRHdvcmQgb2Zmc2V0IDBfNjEgKi8KKyNkZWZpbmUgU1JDX1kJCQkweDAxODgJLyogRHdvcmQgb2Zmc2V0IDBfNjIgKi8KKyNkZWZpbmUgU1JDX1lfWAkJCTB4MDE4QwkvKiBEd29yZCBvZmZzZXQgMF82MyAqLworI2RlZmluZSBTUkNfV0lEVEgxCQkweDAxOTAJLyogRHdvcmQgb2Zmc2V0IDBfNjQgKi8KKyNkZWZpbmUgU1JDX0hFSUdIVDEJCTB4MDE5NAkvKiBEd29yZCBvZmZzZXQgMF82NSAqLworI2RlZmluZSBTUkNfSEVJR0hUMV9XSURUSDEJMHgwMTk4CS8qIER3b3JkIG9mZnNldCAwXzY2ICovCisjZGVmaW5lIFNSQ19YX1NUQVJUCQkweDAxOUMJLyogRHdvcmQgb2Zmc2V0IDBfNjcgKi8KKyNkZWZpbmUgU1JDX1lfU1RBUlQJCTB4MDFBMAkvKiBEd29yZCBvZmZzZXQgMF82OCAqLworI2RlZmluZSBTUkNfWV9YX1NUQVJUCQkweDAxQTQJLyogRHdvcmQgb2Zmc2V0IDBfNjkgKi8KKyNkZWZpbmUgU1JDX1dJRFRIMgkJMHgwMUE4CS8qIER3b3JkIG9mZnNldCAwXzZBICovCisjZGVmaW5lIFNSQ19IRUlHSFQyCQkweDAxQUMJLyogRHdvcmQgb2Zmc2V0IDBfNkIgKi8KKyNkZWZpbmUgU1JDX0hFSUdIVDJfV0lEVEgyCTB4MDFCMAkvKiBEd29yZCBvZmZzZXQgMF82QyAqLworI2RlZmluZSBTUkNfQ05UTAkJMHgwMUI0CS8qIER3b3JkIG9mZnNldCAwXzZEICovCisKKyNkZWZpbmUgU0NBTEVfT0ZGCQkweDAxQzAJLyogRHdvcmQgb2Zmc2V0IDBfNzAgKi8KKyNkZWZpbmUgU0VDT05EQVJZX1NDQUxFX09GRgkweDAxQzQJLyogRHdvcmQgb2Zmc2V0IDBfNzEgKi8KKworI2RlZmluZSBURVhfMF9PRkYJCTB4MDFDMAkvKiBEd29yZCBvZmZzZXQgMF83MCAqLworI2RlZmluZSBURVhfMV9PRkYJCTB4MDFDNAkvKiBEd29yZCBvZmZzZXQgMF83MSAqLworI2RlZmluZSBURVhfMl9PRkYJCTB4MDFDOAkvKiBEd29yZCBvZmZzZXQgMF83MiAqLworI2RlZmluZSBURVhfM19PRkYJCTB4MDFDQwkvKiBEd29yZCBvZmZzZXQgMF83MyAqLworI2RlZmluZSBURVhfNF9PRkYJCTB4MDFEMAkvKiBEd29yZCBvZmZzZXQgMF83NCAqLworI2RlZmluZSBURVhfNV9PRkYJCTB4MDFENAkvKiBEd29yZCBvZmZzZXQgMF83NSAqLworI2RlZmluZSBURVhfNl9PRkYJCTB4MDFEOAkvKiBEd29yZCBvZmZzZXQgMF83NiAqLworI2RlZmluZSBURVhfN19PRkYJCTB4MDFEQwkvKiBEd29yZCBvZmZzZXQgMF83NyAqLworCisjZGVmaW5lIFNDQUxFX1dJRFRICQkweDAxREMJLyogRHdvcmQgb2Zmc2V0IDBfNzcgKi8KKyNkZWZpbmUgU0NBTEVfSEVJR0hUCQkweDAxRTAJLyogRHdvcmQgb2Zmc2V0IDBfNzggKi8KKworI2RlZmluZSBURVhfOF9PRkYJCTB4MDFFMAkvKiBEd29yZCBvZmZzZXQgMF83OCAqLworI2RlZmluZSBURVhfOV9PRkYJCTB4MDFFNAkvKiBEd29yZCBvZmZzZXQgMF83OSAqLworI2RlZmluZSBURVhfMTBfT0ZGCQkweDAxRTgJLyogRHdvcmQgb2Zmc2V0IDBfN0EgKi8KKyNkZWZpbmUgU19ZX0lOQwkJCTB4MDFFQwkvKiBEd29yZCBvZmZzZXQgMF83QiAqLworCisjZGVmaW5lIFNDQUxFX1BJVENICQkweDAxRUMJLyogRHdvcmQgb2Zmc2V0IDBfN0IgKi8KKyNkZWZpbmUgU0NBTEVfWF9JTkMJCTB4MDFGMAkvKiBEd29yZCBvZmZzZXQgMF83QyAqLworCisjZGVmaW5lIFJFRF9YX0lOQwkJMHgwMUYwCS8qIER3b3JkIG9mZnNldCAwXzdDICovCisjZGVmaW5lIEdSRUVOX1hfSU5DCQkweDAxRjQJLyogRHdvcmQgb2Zmc2V0IDBfN0QgKi8KKworI2RlZmluZSBTQ0FMRV9ZX0lOQwkJMHgwMUY0CS8qIER3b3JkIG9mZnNldCAwXzdEICovCisjZGVmaW5lIFNDQUxFX1ZBQ0MJCTB4MDFGOAkvKiBEd29yZCBvZmZzZXQgMF83RSAqLworI2RlZmluZSBTQ0FMRV8zRF9DTlRMCQkweDAxRkMJLyogRHdvcmQgb2Zmc2V0IDBfN0YgKi8KKworLyogSG9zdCBEYXRhICovCisjZGVmaW5lIEhPU1RfREFUQTAJCTB4MDIwMAkvKiBEd29yZCBvZmZzZXQgMF84MCAqLworI2RlZmluZSBIT1NUX0RBVEExCQkweDAyMDQJLyogRHdvcmQgb2Zmc2V0IDBfODEgKi8KKyNkZWZpbmUgSE9TVF9EQVRBMgkJMHgwMjA4CS8qIER3b3JkIG9mZnNldCAwXzgyICovCisjZGVmaW5lIEhPU1RfREFUQTMJCTB4MDIwQwkvKiBEd29yZCBvZmZzZXQgMF84MyAqLworI2RlZmluZSBIT1NUX0RBVEE0CQkweDAyMTAJLyogRHdvcmQgb2Zmc2V0IDBfODQgKi8KKyNkZWZpbmUgSE9TVF9EQVRBNQkJMHgwMjE0CS8qIER3b3JkIG9mZnNldCAwXzg1ICovCisjZGVmaW5lIEhPU1RfREFUQTYJCTB4MDIxOAkvKiBEd29yZCBvZmZzZXQgMF84NiAqLworI2RlZmluZSBIT1NUX0RBVEE3CQkweDAyMUMJLyogRHdvcmQgb2Zmc2V0IDBfODcgKi8KKyNkZWZpbmUgSE9TVF9EQVRBOAkJMHgwMjIwCS8qIER3b3JkIG9mZnNldCAwXzg4ICovCisjZGVmaW5lIEhPU1RfREFUQTkJCTB4MDIyNAkvKiBEd29yZCBvZmZzZXQgMF84OSAqLworI2RlZmluZSBIT1NUX0RBVEFBCQkweDAyMjgJLyogRHdvcmQgb2Zmc2V0IDBfOEEgKi8KKyNkZWZpbmUgSE9TVF9EQVRBQgkJMHgwMjJDCS8qIER3b3JkIG9mZnNldCAwXzhCICovCisjZGVmaW5lIEhPU1RfREFUQUMJCTB4MDIzMAkvKiBEd29yZCBvZmZzZXQgMF84QyAqLworI2RlZmluZSBIT1NUX0RBVEFECQkweDAyMzQJLyogRHdvcmQgb2Zmc2V0IDBfOEQgKi8KKyNkZWZpbmUgSE9TVF9EQVRBRQkJMHgwMjM4CS8qIER3b3JkIG9mZnNldCAwXzhFICovCisjZGVmaW5lIEhPU1RfREFUQUYJCTB4MDIzQwkvKiBEd29yZCBvZmZzZXQgMF84RiAqLworI2RlZmluZSBIT1NUX0NOVEwJCTB4MDI0MAkvKiBEd29yZCBvZmZzZXQgMF85MCAqLworCisvKiBHVUkgQnVzIE1hc3RlcmluZyAqLworI2RlZmluZSBCTV9IT1NUREFUQQkJMHgwMjQ0CS8qIER3b3JkIG9mZnNldCAwXzkxICovCisjZGVmaW5lIEJNX0FERFIJCQkweDAyNDgJLyogRHdvcmQgb2Zmc2V0IDBfOTIgKi8KKyNkZWZpbmUgQk1fREFUQQkJCTB4MDI0OAkvKiBEd29yZCBvZmZzZXQgMF85MiAqLworI2RlZmluZSBCTV9HVUlfVEFCTEVfQ01ECTB4MDI0QwkvKiBEd29yZCBvZmZzZXQgMF85MyAqLworCisvKiBQYXR0ZXJuICovCisjZGVmaW5lIFBBVF9SRUcwCQkweDAyODAJLyogRHdvcmQgb2Zmc2V0IDBfQTAgKi8KKyNkZWZpbmUgUEFUX1JFRzEJCTB4MDI4NAkvKiBEd29yZCBvZmZzZXQgMF9BMSAqLworI2RlZmluZSBQQVRfQ05UTAkJMHgwMjg4CS8qIER3b3JkIG9mZnNldCAwX0EyICovCisKKy8qIFNjaXNzb3JzICovCisjZGVmaW5lIFNDX0xFRlQJCQkweDAyQTAJLyogRHdvcmQgb2Zmc2V0IDBfQTggKi8KKyNkZWZpbmUgU0NfUklHSFQJCTB4MDJBNAkvKiBEd29yZCBvZmZzZXQgMF9BOSAqLworI2RlZmluZSBTQ19MRUZUX1JJR0hUCQkweDAyQTgJLyogRHdvcmQgb2Zmc2V0IDBfQUEgKi8KKyNkZWZpbmUgU0NfVE9QCQkJMHgwMkFDCS8qIER3b3JkIG9mZnNldCAwX0FCICovCisjZGVmaW5lIFNDX0JPVFRPTQkJMHgwMkIwCS8qIER3b3JkIG9mZnNldCAwX0FDICovCisjZGVmaW5lIFNDX1RPUF9CT1RUT00JCTB4MDJCNAkvKiBEd29yZCBvZmZzZXQgMF9BRCAqLworCisvKiBEYXRhIFBhdGggKi8KKyNkZWZpbmUgVVNSMV9EU1RfT0ZGX1BJVENICTB4MDJCOAkvKiBEd29yZCBvZmZzZXQgMF9BRSAqLworI2RlZmluZSBVU1IyX0RTVF9PRkZfUElUQ0gJMHgwMkJDCS8qIER3b3JkIG9mZnNldCAwX0FGICovCisjZGVmaW5lIERQX0JLR0RfQ0xSCQkweDAyQzAJLyogRHdvcmQgb2Zmc2V0IDBfQjAgKi8KKyNkZWZpbmUgRFBfRk9HX0NMUgkJMHgwMkM0CS8qIER3b3JkIG9mZnNldCAwX0IxICovCisjZGVmaW5lIERQX0ZSR0RfQ0xSCQkweDAyQzQJLyogRHdvcmQgb2Zmc2V0IDBfQjEgKi8KKyNkZWZpbmUgRFBfV1JJVEVfTUFTSwkJMHgwMkM4CS8qIER3b3JkIG9mZnNldCAwX0IyICovCisjZGVmaW5lIERQX0NIQUlOX01BU0sJCTB4MDJDQwkvKiBEd29yZCBvZmZzZXQgMF9CMyAqLworI2RlZmluZSBEUF9QSVhfV0lEVEgJCTB4MDJEMAkvKiBEd29yZCBvZmZzZXQgMF9CNCAqLworI2RlZmluZSBEUF9NSVgJCQkweDAyRDQJLyogRHdvcmQgb2Zmc2V0IDBfQjUgKi8KKyNkZWZpbmUgRFBfU1JDCQkJMHgwMkQ4CS8qIER3b3JkIG9mZnNldCAwX0I2ICovCisjZGVmaW5lIERQX0ZSR0RfQ0xSX01JWAkJMHgwMkRDCS8qIER3b3JkIG9mZnNldCAwX0I3ICovCisjZGVmaW5lIERQX0ZSR0RfQktHRF9DTFIJMHgwMkUwCS8qIER3b3JkIG9mZnNldCAwX0I4ICovCisKKy8qIERyYXcgRW5naW5lIERlc3RpbmF0aW9uIFRyYWplY3RvcnkgKi8KKyNkZWZpbmUgRFNUX1hfWQkJCTB4MDJFOAkvKiBEd29yZCBvZmZzZXQgMF9CQSAqLworI2RlZmluZSBEU1RfV0lEVEhfSEVJR0hUCTB4MDJFQwkvKiBEd29yZCBvZmZzZXQgMF9CQiAqLworCisvKiBEYXRhIFBhdGggKi8KKyNkZWZpbmUgVVNSX0RTVF9QSUNUSAkJMHgwMkYwCS8qIER3b3JkIG9mZnNldCAwX0JDICovCisjZGVmaW5lIERQX1NFVF9HVUlfRU5HSU5FMgkweDAyRjgJLyogRHdvcmQgb2Zmc2V0IDBfQkUgKi8KKyNkZWZpbmUgRFBfU0VUX0dVSV9FTkdJTkUJMHgwMkZDCS8qIER3b3JkIG9mZnNldCAwX0JGICovCisKKy8qIENvbG9yIENvbXBhcmUgKi8KKyNkZWZpbmUgQ0xSX0NNUF9DTFIJCTB4MDMwMAkvKiBEd29yZCBvZmZzZXQgMF9DMCAqLworI2RlZmluZSBDTFJfQ01QX01BU0sJCTB4MDMwNAkvKiBEd29yZCBvZmZzZXQgMF9DMSAqLworI2RlZmluZSBDTFJfQ01QX0NOVEwJCTB4MDMwOAkvKiBEd29yZCBvZmZzZXQgMF9DMiAqLworCisvKiBDb21tYW5kIEZJRk8gKi8KKyNkZWZpbmUgRklGT19TVEFUCQkweDAzMTAJLyogRHdvcmQgb2Zmc2V0IDBfQzQgKi8KKworI2RlZmluZSBDT05URVhUX01BU0sJCTB4MDMyMAkvKiBEd29yZCBvZmZzZXQgMF9DOCAqLworI2RlZmluZSBDT05URVhUX0xPQURfQ05UTAkweDAzMkMJLyogRHdvcmQgb2Zmc2V0IDBfQ0IgKi8KKworLyogRW5naW5lIENvbnRyb2wgKi8KKyNkZWZpbmUgR1VJX1RSQUpfQ05UTAkJMHgwMzMwCS8qIER3b3JkIG9mZnNldCAwX0NDICovCisKKy8qIEVuZ2luZSBTdGF0dXMvRklGTyAqLworI2RlZmluZSBHVUlfU1RBVAkJMHgwMzM4CS8qIER3b3JkIG9mZnNldCAwX0NFICovCisKKyNkZWZpbmUgVEVYX1BBTEVUVEVfSU5ERVgJMHgwMzQwCS8qIER3b3JkIG9mZnNldCAwX0QwICovCisjZGVmaW5lIFNUV19FWFAJCQkweDAzNDQJLyogRHdvcmQgb2Zmc2V0IDBfRDEgKi8KKyNkZWZpbmUgTE9HX01BWF9JTkMJCTB4MDM0OAkvKiBEd29yZCBvZmZzZXQgMF9EMiAqLworI2RlZmluZSBTX1hfSU5DCQkJMHgwMzRDCS8qIER3b3JkIG9mZnNldCAwX0QzICovCisjZGVmaW5lIFNfWV9JTkNfX0FMSUFTX18JMHgwMzUwCS8qIER3b3JkIG9mZnNldCAwX0Q0ICovCisKKyNkZWZpbmUgU0NBTEVfUElUQ0hfX0FMSUFTX18JMHgwMzUwCS8qIER3b3JkIG9mZnNldCAwX0Q0ICovCisKKyNkZWZpbmUgU19TVEFSVAkJCTB4MDM1NAkvKiBEd29yZCBvZmZzZXQgMF9ENSAqLworI2RlZmluZSBXX1hfSU5DCQkJMHgwMzU4CS8qIER3b3JkIG9mZnNldCAwX0Q2ICovCisjZGVmaW5lIFdfWV9JTkMJCQkweDAzNUMJLyogRHdvcmQgb2Zmc2V0IDBfRDcgKi8KKyNkZWZpbmUgV19TVEFSVAkJCTB4MDM2MAkvKiBEd29yZCBvZmZzZXQgMF9EOCAqLworI2RlZmluZSBUX1hfSU5DCQkJMHgwMzY0CS8qIER3b3JkIG9mZnNldCAwX0Q5ICovCisjZGVmaW5lIFRfWV9JTkMJCQkweDAzNjgJLyogRHdvcmQgb2Zmc2V0IDBfREEgKi8KKworI2RlZmluZSBTRUNPTkRBUllfU0NBTEVfUElUQ0gJMHgwMzY4CS8qIER3b3JkIG9mZnNldCAwX0RBICovCisKKyNkZWZpbmUgVF9TVEFSVAkJCTB4MDM2QwkvKiBEd29yZCBvZmZzZXQgMF9EQiAqLworI2RlZmluZSBURVhfU0laRV9QSVRDSAkJMHgwMzcwCS8qIER3b3JkIG9mZnNldCAwX0RDICovCisjZGVmaW5lIFRFWF9DTlRMCQkweDAzNzQJLyogRHdvcmQgb2Zmc2V0IDBfREQgKi8KKyNkZWZpbmUgU0VDT05EQVJZX1RFWF9PRkZTRVQJMHgwMzc4CS8qIER3b3JkIG9mZnNldCAwX0RFICovCisjZGVmaW5lIFRFWF9QQUxFVFRFCQkweDAzN0MJLyogRHdvcmQgb2Zmc2V0IDBfREYgKi8KKworI2RlZmluZSBTQ0FMRV9QSVRDSF9CT1RICTB4MDM4MAkvKiBEd29yZCBvZmZzZXQgMF9FMCAqLworI2RlZmluZSBTRUNPTkRBUllfU0NBTEVfT0ZGX0FDQwkweDAzODQJLyogRHdvcmQgb2Zmc2V0IDBfRTEgKi8KKyNkZWZpbmUgU0NBTEVfT0ZGX0FDQwkJMHgwMzg4CS8qIER3b3JkIG9mZnNldCAwX0UyICovCisjZGVmaW5lIFNDQUxFX0RTVF9ZX1gJCTB4MDM4QwkvKiBEd29yZCBvZmZzZXQgMF9FMyAqLworCisvKiBEcmF3IEVuZ2luZSBEZXN0aW5hdGlvbiBUcmFqZWN0b3J5ICovCisjZGVmaW5lIENPTVBPU0lURV9TSEFET1dfSUQJMHgwMzk4CS8qIER3b3JkIG9mZnNldCAwX0U2ICovCisKKyNkZWZpbmUgU0VDT05EQVJZX1NDQUxFX1hfSU5DCTB4MDM5QwkvKiBEd29yZCBvZmZzZXQgMF9FNyAqLworCisjZGVmaW5lIFNQRUNVTEFSX1JFRF9YX0lOQwkweDAzOUMJLyogRHdvcmQgb2Zmc2V0IDBfRTcgKi8KKyNkZWZpbmUgU1BFQ1VMQVJfUkVEX1lfSU5DCTB4MDNBMAkvKiBEd29yZCBvZmZzZXQgMF9FOCAqLworI2RlZmluZSBTUEVDVUxBUl9SRURfU1RBUlQJMHgwM0E0CS8qIER3b3JkIG9mZnNldCAwX0U5ICovCisKKyNkZWZpbmUgU0VDT05EQVJZX1NDQUxFX0hBQ0MJMHgwM0E0CS8qIER3b3JkIG9mZnNldCAwX0U5ICovCisKKyNkZWZpbmUgU1BFQ1VMQVJfR1JFRU5fWF9JTkMJMHgwM0E4CS8qIER3b3JkIG9mZnNldCAwX0VBICovCisjZGVmaW5lIFNQRUNVTEFSX0dSRUVOX1lfSU5DCTB4MDNBQwkvKiBEd29yZCBvZmZzZXQgMF9FQiAqLworI2RlZmluZSBTUEVDVUxBUl9HUkVFTl9TVEFSVAkweDAzQjAJLyogRHdvcmQgb2Zmc2V0IDBfRUMgKi8KKyNkZWZpbmUgU1BFQ1VMQVJfQkxVRV9YX0lOQwkweDAzQjQJLyogRHdvcmQgb2Zmc2V0IDBfRUQgKi8KKyNkZWZpbmUgU1BFQ1VMQVJfQkxVRV9ZX0lOQwkweDAzQjgJLyogRHdvcmQgb2Zmc2V0IDBfRUUgKi8KKyNkZWZpbmUgU1BFQ1VMQVJfQkxVRV9TVEFSVAkweDAzQkMJLyogRHdvcmQgb2Zmc2V0IDBfRUYgKi8KKworI2RlZmluZSBTQ0FMRV9YX0lOQ19fQUxJQVNfXwkweDAzQzAJLyogRHdvcmQgb2Zmc2V0IDBfRjAgKi8KKworI2RlZmluZSBSRURfWF9JTkNfX0FMSUFTX18JMHgwM0MwCS8qIER3b3JkIG9mZnNldCAwX0YwICovCisjZGVmaW5lIFJFRF9ZX0lOQwkJMHgwM0M0CS8qIER3b3JkIG9mZnNldCAwX0YxICovCisjZGVmaW5lIFJFRF9TVEFSVAkJMHgwM0M4CS8qIER3b3JkIG9mZnNldCAwX0YyICovCisKKyNkZWZpbmUgU0NBTEVfSEFDQwkJMHgwM0M4CS8qIER3b3JkIG9mZnNldCAwX0YyICovCisjZGVmaW5lIFNDQUxFX1lfSU5DX19BTElBU19fCTB4MDNDQwkvKiBEd29yZCBvZmZzZXQgMF9GMyAqLworCisjZGVmaW5lIEdSRUVOX1hfSU5DX19BTElBU19fCTB4MDNDQwkvKiBEd29yZCBvZmZzZXQgMF9GMyAqLworI2RlZmluZSBHUkVFTl9ZX0lOQwkJMHgwM0QwCS8qIER3b3JkIG9mZnNldCAwX0Y0ICovCisKKyNkZWZpbmUgU0VDT05EQVJZX1NDQUxFX1lfSU5DCTB4MDNEMAkvKiBEd29yZCBvZmZzZXQgMF9GNCAqLworI2RlZmluZSBTRUNPTkRBUllfU0NBTEVfVkFDQwkweDAzRDQJLyogRHdvcmQgb2Zmc2V0IDBfRjUgKi8KKworI2RlZmluZSBHUkVFTl9TVEFSVAkJMHgwM0Q0CS8qIER3b3JkIG9mZnNldCAwX0Y1ICovCisjZGVmaW5lIEJMVUVfWF9JTkMJCTB4MDNEOAkvKiBEd29yZCBvZmZzZXQgMF9GNiAqLworI2RlZmluZSBCTFVFX1lfSU5DCQkweDAzREMJLyogRHdvcmQgb2Zmc2V0IDBfRjcgKi8KKyNkZWZpbmUgQkxVRV9TVEFSVAkJMHgwM0UwCS8qIER3b3JkIG9mZnNldCAwX0Y4ICovCisjZGVmaW5lIFpfWF9JTkMJCQkweDAzRTQJLyogRHdvcmQgb2Zmc2V0IDBfRjkgKi8KKyNkZWZpbmUgWl9ZX0lOQwkJCTB4MDNFOAkvKiBEd29yZCBvZmZzZXQgMF9GQSAqLworI2RlZmluZSBaX1NUQVJUCQkJMHgwM0VDCS8qIER3b3JkIG9mZnNldCAwX0ZCICovCisjZGVmaW5lIEFMUEhBX1hfSU5DCQkweDAzRjAJLyogRHdvcmQgb2Zmc2V0IDBfRkMgKi8KKyNkZWZpbmUgRk9HX1hfSU5DCQkweDAzRjAJLyogRHdvcmQgb2Zmc2V0IDBfRkMgKi8KKyNkZWZpbmUgQUxQSEFfWV9JTkMJCTB4MDNGNAkvKiBEd29yZCBvZmZzZXQgMF9GRCAqLworI2RlZmluZSBGT0dfWV9JTkMJCTB4MDNGNAkvKiBEd29yZCBvZmZzZXQgMF9GRCAqLworI2RlZmluZSBBTFBIQV9TVEFSVAkJMHgwM0Y4CS8qIER3b3JkIG9mZnNldCAwX0ZFICovCisjZGVmaW5lIEZPR19TVEFSVAkJMHgwM0Y4CS8qIER3b3JkIG9mZnNldCAwX0ZFICovCisKKyNkZWZpbmUgT1ZFUkxBWV9ZX1hfU1RBUlQJCTB4MDQwMAkvKiBEd29yZCBvZmZzZXQgMV8wMCAqLworI2RlZmluZSBPVkVSTEFZX1lfWF9FTkQJCQkweDA0MDQJLyogRHdvcmQgb2Zmc2V0IDFfMDEgKi8KKyNkZWZpbmUgT1ZFUkxBWV9WSURFT19LRVlfQ0xSCQkweDA0MDgJLyogRHdvcmQgb2Zmc2V0IDFfMDIgKi8KKyNkZWZpbmUgT1ZFUkxBWV9WSURFT19LRVlfTVNLCQkweDA0MEMJLyogRHdvcmQgb2Zmc2V0IDFfMDMgKi8KKyNkZWZpbmUgT1ZFUkxBWV9HUkFQSElDU19LRVlfQ0xSCTB4MDQxMAkvKiBEd29yZCBvZmZzZXQgMV8wNCAqLworI2RlZmluZSBPVkVSTEFZX0dSQVBISUNTX0tFWV9NU0sJMHgwNDE0CS8qIER3b3JkIG9mZnNldCAxXzA1ICovCisjZGVmaW5lIE9WRVJMQVlfS0VZX0NOVEwJCTB4MDQxOAkvKiBEd29yZCBvZmZzZXQgMV8wNiAqLworCisjZGVmaW5lIE9WRVJMQVlfU0NBTEVfSU5DCTB4MDQyMAkvKiBEd29yZCBvZmZzZXQgMV8wOCAqLworI2RlZmluZSBPVkVSTEFZX1NDQUxFX0NOVEwJMHgwNDI0CS8qIER3b3JkIG9mZnNldCAxXzA5ICovCisjZGVmaW5lIFNDQUxFUl9IRUlHSFRfV0lEVEgJMHgwNDI4CS8qIER3b3JkIG9mZnNldCAxXzBBICovCisjZGVmaW5lIFNDQUxFUl9URVNUCQkweDA0MkMJLyogRHdvcmQgb2Zmc2V0IDFfMEIgKi8KKyNkZWZpbmUgU0NBTEVSX0JVRjBfT0ZGU0VUCTB4MDQzNAkvKiBEd29yZCBvZmZzZXQgMV8wRCAqLworI2RlZmluZSBTQ0FMRVJfQlVGMV9PRkZTRVQJMHgwNDM4CS8qIER3b3JkIG9mZnNldCAxXzBFICovCisjZGVmaW5lIFNDQUxFX0JVRl9QSVRDSAkJMHgwNDNDCS8qIER3b3JkIG9mZnNldCAxXzBGICovCisKKyNkZWZpbmUgQ0FQVFVSRV9TVEFSVF9FTkQJMHgwNDQwCS8qIER3b3JkIG9mZnNldCAxXzEwICovCisjZGVmaW5lIENBUFRVUkVfWF9XSURUSAkJMHgwNDQ0CS8qIER3b3JkIG9mZnNldCAxXzExICovCisjZGVmaW5lIFZJREVPX0ZPUk1BVAkJMHgwNDQ4CS8qIER3b3JkIG9mZnNldCAxXzEyICovCisjZGVmaW5lIFZCSV9TVEFSVF9FTkQJCTB4MDQ0QwkvKiBEd29yZCBvZmZzZXQgMV8xMyAqLworI2RlZmluZSBDQVBUVVJFX0NPTkZJRwkJMHgwNDUwCS8qIER3b3JkIG9mZnNldCAxXzE0ICovCisjZGVmaW5lIFRSSUdfQ05UTAkJMHgwNDU0CS8qIER3b3JkIG9mZnNldCAxXzE1ICovCisKKyNkZWZpbmUgT1ZFUkxBWV9FWENMVVNJVkVfSE9SWgkweDA0NTgJLyogRHdvcmQgb2Zmc2V0IDFfMTYgKi8KKyNkZWZpbmUgT1ZFUkxBWV9FWENMVVNJVkVfVkVSVAkweDA0NUMJLyogRHdvcmQgb2Zmc2V0IDFfMTcgKi8KKworI2RlZmluZSBWQUxfV0lEVEgJCTB4MDQ2MAkvKiBEd29yZCBvZmZzZXQgMV8xOCAqLworI2RlZmluZSBDQVBUVVJFX0RFQlVHCQkweDA0NjQJLyogRHdvcmQgb2Zmc2V0IDFfMTkgKi8KKyNkZWZpbmUgVklERU9fU1lOQ19URVNUCQkweDA0NjgJLyogRHdvcmQgb2Zmc2V0IDFfMUEgKi8KKworLyogR2VuTG9ja2luZyAqLworI2RlZmluZSBTTkFQU0hPVF9WSF9DT1VOVFMJMHgwNDcwCS8qIER3b3JkIG9mZnNldCAxXzFDICovCisjZGVmaW5lIFNOQVBTSE9UX0ZfQ09VTlQJMHgwNDc0CS8qIER3b3JkIG9mZnNldCAxXzFEICovCisjZGVmaW5lIE5fVklGX0NPVU5UCQkweDA0NzgJLyogRHdvcmQgb2Zmc2V0IDFfMUUgKi8KKyNkZWZpbmUgU05BUFNIT1RfVklGX0NPVU5UCTB4MDQ3QwkvKiBEd29yZCBvZmZzZXQgMV8xRiAqLworCisjZGVmaW5lIENBUFRVUkVfQlVGMF9PRkZTRVQJMHgwNDgwCS8qIER3b3JkIG9mZnNldCAxXzIwICovCisjZGVmaW5lIENBUFRVUkVfQlVGMV9PRkZTRVQJMHgwNDg0CS8qIER3b3JkIG9mZnNldCAxXzIxICovCisjZGVmaW5lIENBUFRVUkVfQlVGX1BJVENICTB4MDQ4OAkvKiBEd29yZCBvZmZzZXQgMV8yMiAqLworCisvKiBHZW5Mb2NraW5nICovCisjZGVmaW5lIFNOQVBTSE9UMl9WSF9DT1VOVFMJMHgwNEIwCS8qIER3b3JkIG9mZnNldCAxXzJDICovCisjZGVmaW5lIFNOQVBTSE9UMl9GX0NPVU5UCTB4MDRCNAkvKiBEd29yZCBvZmZzZXQgMV8yRCAqLworI2RlZmluZSBOX1ZJRjJfQ09VTlQJCTB4MDRCOAkvKiBEd29yZCBvZmZzZXQgMV8yRSAqLworI2RlZmluZSBTTkFQU0hPVDJfVklGX0NPVU5UCTB4MDRCQwkvKiBEd29yZCBvZmZzZXQgMV8yRiAqLworCisjZGVmaW5lIE1QUF9DT05GSUcJCTB4MDRDMAkvKiBEd29yZCBvZmZzZXQgMV8zMCAqLworI2RlZmluZSBNUFBfU1RST0JFX1NFUQkJMHgwNEM0CS8qIER3b3JkIG9mZnNldCAxXzMxICovCisjZGVmaW5lIE1QUF9BRERSCQkweDA0QzgJLyogRHdvcmQgb2Zmc2V0IDFfMzIgKi8KKyNkZWZpbmUgTVBQX0RBVEEJCTB4MDRDQwkvKiBEd29yZCBvZmZzZXQgMV8zMyAqLworI2RlZmluZSBUVk9fQ05UTAkJMHgwNTAwCS8qIER3b3JkIG9mZnNldCAxXzQwICovCisKKy8qIFRlc3QgYW5kIERlYnVnICovCisjZGVmaW5lIENSVF9IT1JaX1ZFUlRfTE9BRAkweDA1NDQJLyogRHdvcmQgb2Zmc2V0IDFfNTEgKi8KKworLyogQUdQICovCisjZGVmaW5lIEFHUF9CQVNFCQkweDA1NDgJLyogRHdvcmQgb2Zmc2V0IDFfNTIgKi8KKyNkZWZpbmUgQUdQX0NOVEwJCTB4MDU0QwkvKiBEd29yZCBvZmZzZXQgMV81MyAqLworCisjZGVmaW5lIFNDQUxFUl9DT0xPVVJfQ05UTAkweDA1NTAJLyogRHdvcmQgb2Zmc2V0IDFfNTQgKi8KKyNkZWZpbmUgU0NBTEVSX0hfQ09FRkYwCQkweDA1NTQJLyogRHdvcmQgb2Zmc2V0IDFfNTUgKi8KKyNkZWZpbmUgU0NBTEVSX0hfQ09FRkYxCQkweDA1NTgJLyogRHdvcmQgb2Zmc2V0IDFfNTYgKi8KKyNkZWZpbmUgU0NBTEVSX0hfQ09FRkYyCQkweDA1NUMJLyogRHdvcmQgb2Zmc2V0IDFfNTcgKi8KKyNkZWZpbmUgU0NBTEVSX0hfQ09FRkYzCQkweDA1NjAJLyogRHdvcmQgb2Zmc2V0IDFfNTggKi8KKyNkZWZpbmUgU0NBTEVSX0hfQ09FRkY0CQkweDA1NjQJLyogRHdvcmQgb2Zmc2V0IDFfNTkgKi8KKworLyogQ29tbWFuZCBGSUZPICovCisjZGVmaW5lIEdVSV9DTURGSUZPX0RFQlVHCTB4MDU3MAkvKiBEd29yZCBvZmZzZXQgMV81QyAqLworI2RlZmluZSBHVUlfQ01ERklGT19EQVRBCTB4MDU3NAkvKiBEd29yZCBvZmZzZXQgMV81RCAqLworI2RlZmluZSBHVUlfQ05UTAkJMHgwNTc4CS8qIER3b3JkIG9mZnNldCAxXzVFICovCisKKy8qIEJ1cyBNYXN0ZXJpbmcgKi8KKyNkZWZpbmUgQk1fRlJBTUVfQlVGX09GRlNFVAkweDA1ODAJLyogRHdvcmQgb2Zmc2V0IDFfNjAgKi8KKyNkZWZpbmUgQk1fU1lTVEVNX01FTV9BRERSCTB4MDU4NAkvKiBEd29yZCBvZmZzZXQgMV82MSAqLworI2RlZmluZSBCTV9DT01NQU5ECQkweDA1ODgJLyogRHdvcmQgb2Zmc2V0IDFfNjIgKi8KKyNkZWZpbmUgQk1fU1RBVFVTCQkweDA1OEMJLyogRHdvcmQgb2Zmc2V0IDFfNjMgKi8KKyNkZWZpbmUgQk1fR1VJX1RBQkxFCQkweDA1QjgJLyogRHdvcmQgb2Zmc2V0IDFfNkUgKi8KKyNkZWZpbmUgQk1fU1lTVEVNX1RBQkxFCQkweDA1QkMJLyogRHdvcmQgb2Zmc2V0IDFfNkYgKi8KKworI2RlZmluZSBTQ0FMRVJfQlVGMF9PRkZTRVRfVQkweDA1RDQJLyogRHdvcmQgb2Zmc2V0IDFfNzUgKi8KKyNkZWZpbmUgU0NBTEVSX0JVRjBfT0ZGU0VUX1YJMHgwNUQ4CS8qIER3b3JkIG9mZnNldCAxXzc2ICovCisjZGVmaW5lIFNDQUxFUl9CVUYxX09GRlNFVF9VCTB4MDVEQwkvKiBEd29yZCBvZmZzZXQgMV83NyAqLworI2RlZmluZSBTQ0FMRVJfQlVGMV9PRkZTRVRfVgkweDA1RTAJLyogRHdvcmQgb2Zmc2V0IDFfNzggKi8KKworLyogU2V0dXAgRW5naW5lICovCisjZGVmaW5lIFZFUlRFWF8xX1MJCTB4MDY0MAkvKiBEd29yZCBvZmZzZXQgMV85MCAqLworI2RlZmluZSBWRVJURVhfMV9UCQkweDA2NDQJLyogRHdvcmQgb2Zmc2V0IDFfOTEgKi8KKyNkZWZpbmUgVkVSVEVYXzFfVwkJMHgwNjQ4CS8qIER3b3JkIG9mZnNldCAxXzkyICovCisjZGVmaW5lIFZFUlRFWF8xX1NQRUNfQVJHQgkweDA2NEMJLyogRHdvcmQgb2Zmc2V0IDFfOTMgKi8KKyNkZWZpbmUgVkVSVEVYXzFfWgkJMHgwNjUwCS8qIER3b3JkIG9mZnNldCAxXzk0ICovCisjZGVmaW5lIFZFUlRFWF8xX0FSR0IJCTB4MDY1NAkvKiBEd29yZCBvZmZzZXQgMV85NSAqLworI2RlZmluZSBWRVJURVhfMV9YX1kJCTB4MDY1OAkvKiBEd29yZCBvZmZzZXQgMV85NiAqLworI2RlZmluZSBPTkVfT1ZFUl9BUkVBCQkweDA2NUMJLyogRHdvcmQgb2Zmc2V0IDFfOTcgKi8KKyNkZWZpbmUgVkVSVEVYXzJfUwkJMHgwNjYwCS8qIER3b3JkIG9mZnNldCAxXzk4ICovCisjZGVmaW5lIFZFUlRFWF8yX1QJCTB4MDY2NAkvKiBEd29yZCBvZmZzZXQgMV85OSAqLworI2RlZmluZSBWRVJURVhfMl9XCQkweDA2NjgJLyogRHdvcmQgb2Zmc2V0IDFfOUEgKi8KKyNkZWZpbmUgVkVSVEVYXzJfU1BFQ19BUkdCCTB4MDY2QwkvKiBEd29yZCBvZmZzZXQgMV85QiAqLworI2RlZmluZSBWRVJURVhfMl9aCQkweDA2NzAJLyogRHdvcmQgb2Zmc2V0IDFfOUMgKi8KKyNkZWZpbmUgVkVSVEVYXzJfQVJHQgkJMHgwNjc0CS8qIER3b3JkIG9mZnNldCAxXzlEICovCisjZGVmaW5lIFZFUlRFWF8yX1hfWQkJMHgwNjc4CS8qIER3b3JkIG9mZnNldCAxXzlFICovCisjZGVmaW5lIE9ORV9PVkVSX0FSRUEJCTB4MDY1QwkvKiBEd29yZCBvZmZzZXQgMV85RiAqLworI2RlZmluZSBWRVJURVhfM19TCQkweDA2ODAJLyogRHdvcmQgb2Zmc2V0IDFfQTAgKi8KKyNkZWZpbmUgVkVSVEVYXzNfVAkJMHgwNjg0CS8qIER3b3JkIG9mZnNldCAxX0ExICovCisjZGVmaW5lIFZFUlRFWF8zX1cJCTB4MDY4OAkvKiBEd29yZCBvZmZzZXQgMV9BMiAqLworI2RlZmluZSBWRVJURVhfM19TUEVDX0FSR0IJMHgwNjhDCS8qIER3b3JkIG9mZnNldCAxX0EzICovCisjZGVmaW5lIFZFUlRFWF8zX1oJCTB4MDY5MAkvKiBEd29yZCBvZmZzZXQgMV9BNCAqLworI2RlZmluZSBWRVJURVhfM19BUkdCCQkweDA2OTQJLyogRHdvcmQgb2Zmc2V0IDFfQTUgKi8KKyNkZWZpbmUgVkVSVEVYXzNfWF9ZCQkweDA2OTgJLyogRHdvcmQgb2Zmc2V0IDFfQTYgKi8KKyNkZWZpbmUgT05FX09WRVJfQVJFQQkJMHgwNjVDCS8qIER3b3JkIG9mZnNldCAxX0E3ICovCisjZGVmaW5lIFZFUlRFWF8xX1MJCTB4MDY0MAkvKiBEd29yZCBvZmZzZXQgMV9BQiAqLworI2RlZmluZSBWRVJURVhfMV9UCQkweDA2NDQJLyogRHdvcmQgb2Zmc2V0IDFfQUMgKi8KKyNkZWZpbmUgVkVSVEVYXzFfVwkJMHgwNjQ4CS8qIER3b3JkIG9mZnNldCAxX0FEICovCisjZGVmaW5lIFZFUlRFWF8yX1MJCTB4MDY2MAkvKiBEd29yZCBvZmZzZXQgMV9BRSAqLworI2RlZmluZSBWRVJURVhfMl9UCQkweDA2NjQJLyogRHdvcmQgb2Zmc2V0IDFfQUYgKi8KKyNkZWZpbmUgVkVSVEVYXzJfVwkJMHgwNjY4CS8qIER3b3JkIG9mZnNldCAxX0IwICovCisjZGVmaW5lIFZFUlRFWF8zX1NFQ09OREFSWV9TCTB4MDZDMAkvKiBEd29yZCBvZmZzZXQgMV9CMCAqLworI2RlZmluZSBWRVJURVhfM19TCQkweDA2ODAJLyogRHdvcmQgb2Zmc2V0IDFfQjEgKi8KKyNkZWZpbmUgVkVSVEVYXzNfU0VDT05EQVJZX1QJMHgwNkM0CS8qIER3b3JkIG9mZnNldCAxX0IxICovCisjZGVmaW5lIFZFUlRFWF8zX1QJCTB4MDY4NAkvKiBEd29yZCBvZmZzZXQgMV9CMiAqLworI2RlZmluZSBWRVJURVhfM19TRUNPTkRBUllfVwkweDA2QzgJLyogRHdvcmQgb2Zmc2V0IDFfQjIgKi8KKyNkZWZpbmUgVkVSVEVYXzNfVwkJMHgwNjg4CS8qIER3b3JkIG9mZnNldCAxX0IzICovCisjZGVmaW5lIFZFUlRFWF8xX1NQRUNfQVJHQgkweDA2NEMJLyogRHdvcmQgb2Zmc2V0IDFfQjQgKi8KKyNkZWZpbmUgVkVSVEVYXzJfU1BFQ19BUkdCCTB4MDY2QwkvKiBEd29yZCBvZmZzZXQgMV9CNSAqLworI2RlZmluZSBWRVJURVhfM19TUEVDX0FSR0IJMHgwNjhDCS8qIER3b3JkIG9mZnNldCAxX0I2ICovCisjZGVmaW5lIFZFUlRFWF8xX1oJCTB4MDY1MAkvKiBEd29yZCBvZmZzZXQgMV9CNyAqLworI2RlZmluZSBWRVJURVhfMl9aCQkweDA2NzAJLyogRHdvcmQgb2Zmc2V0IDFfQjggKi8KKyNkZWZpbmUgVkVSVEVYXzNfWgkJMHgwNjkwCS8qIER3b3JkIG9mZnNldCAxX0I5ICovCisjZGVmaW5lIFZFUlRFWF8xX0FSR0IJCTB4MDY1NAkvKiBEd29yZCBvZmZzZXQgMV9CQSAqLworI2RlZmluZSBWRVJURVhfMl9BUkdCCQkweDA2NzQJLyogRHdvcmQgb2Zmc2V0IDFfQkIgKi8KKyNkZWZpbmUgVkVSVEVYXzNfQVJHQgkJMHgwNjk0CS8qIER3b3JkIG9mZnNldCAxX0JDICovCisjZGVmaW5lIFZFUlRFWF8xX1hfWQkJMHgwNjU4CS8qIER3b3JkIG9mZnNldCAxX0JEICovCisjZGVmaW5lIFZFUlRFWF8yX1hfWQkJMHgwNjc4CS8qIER3b3JkIG9mZnNldCAxX0JFICovCisjZGVmaW5lIFZFUlRFWF8zX1hfWQkJMHgwNjk4CS8qIER3b3JkIG9mZnNldCAxX0JGICovCisjZGVmaW5lIE9ORV9PVkVSX0FSRUFfVUMJMHgwNzAwCS8qIER3b3JkIG9mZnNldCAxX0MwICovCisjZGVmaW5lIFNFVFVQX0NOVEwJCTB4MDcwNAkvKiBEd29yZCBvZmZzZXQgMV9DMSAqLworI2RlZmluZSBWRVJURVhfMV9TRUNPTkRBUllfUwkweDA3MjgJLyogRHdvcmQgb2Zmc2V0IDFfQ0EgKi8KKyNkZWZpbmUgVkVSVEVYXzFfU0VDT05EQVJZX1QJMHgwNzJDCS8qIER3b3JkIG9mZnNldCAxX0NCICovCisjZGVmaW5lIFZFUlRFWF8xX1NFQ09OREFSWV9XCTB4MDczMAkvKiBEd29yZCBvZmZzZXQgMV9DQyAqLworI2RlZmluZSBWRVJURVhfMl9TRUNPTkRBUllfUwkweDA3MzQJLyogRHdvcmQgb2Zmc2V0IDFfQ0QgKi8KKyNkZWZpbmUgVkVSVEVYXzJfU0VDT05EQVJZX1QJMHgwNzM4CS8qIER3b3JkIG9mZnNldCAxX0NFICovCisjZGVmaW5lIFZFUlRFWF8yX1NFQ09OREFSWV9XCTB4MDczQwkvKiBEd29yZCBvZmZzZXQgMV9DRiAqLworCisKKyNkZWZpbmUgR1RDXzNEX1JFU0VUX0RFTEFZCTMJLyogM0QgZW5naW5lIHJlc2V0IGRlbGF5IGluIG1zICovCisKKy8qIENSVEMgY29udHJvbCB2YWx1ZXMgKG1vc3RseSBDUlRDX0dFTl9DTlRMKSAqLworCisjZGVmaW5lIENSVENfSF9TWU5DX05FRwkJMHgwMDIwMDAwMAorI2RlZmluZSBDUlRDX1ZfU1lOQ19ORUcJCTB4MDAyMDAwMDAKKworI2RlZmluZSBDUlRDX0RCTF9TQ0FOX0VOCTB4MDAwMDAwMDEKKyNkZWZpbmUgQ1JUQ19JTlRFUkxBQ0VfRU4JMHgwMDAwMDAwMgorI2RlZmluZSBDUlRDX0hTWU5DX0RJUwkJMHgwMDAwMDAwNAorI2RlZmluZSBDUlRDX1ZTWU5DX0RJUwkJMHgwMDAwMDAwOAorI2RlZmluZSBDUlRDX0NTWU5DX0VOCQkweDAwMDAwMDEwCisjZGVmaW5lIENSVENfUElYX0JZXzJfRU4JMHgwMDAwMDAyMAkvKiB1bnVzZWQgb24gUkFHRSAqLworI2RlZmluZSBDUlRDX0RJU1BMQVlfRElTCTB4MDAwMDAwNDAKKyNkZWZpbmUgQ1JUQ19WR0FfWE9WRVJTQ0FOCTB4MDAwMDAwODAKKworI2RlZmluZSBDUlRDX1BJWF9XSURUSF9NQVNLCTB4MDAwMDA3MDAKKyNkZWZpbmUgQ1JUQ19QSVhfV0lEVEhfNEJQUAkweDAwMDAwMTAwCisjZGVmaW5lIENSVENfUElYX1dJRFRIXzhCUFAJMHgwMDAwMDIwMAorI2RlZmluZSBDUlRDX1BJWF9XSURUSF8xNUJQUAkweDAwMDAwMzAwCisjZGVmaW5lIENSVENfUElYX1dJRFRIXzE2QlBQCTB4MDAwMDA0MDAKKyNkZWZpbmUgQ1JUQ19QSVhfV0lEVEhfMjRCUFAJMHgwMDAwMDUwMAorI2RlZmluZSBDUlRDX1BJWF9XSURUSF8zMkJQUAkweDAwMDAwNjAwCisKKyNkZWZpbmUgQ1JUQ19CWVRFX1BJWF9PUkRFUgkweDAwMDAwODAwCisjZGVmaW5lIENSVENfUElYX09SREVSX01TTl9MU04JMHgwMDAwMDAwMAorI2RlZmluZSBDUlRDX1BJWF9PUkRFUl9MU05fTVNOCTB4MDAwMDA4MDAKKworI2RlZmluZSBDUlRDX1ZTWU5DX0lOVF9FTgkweDAwMDAxMDAwdWwJLyogWEMvWEwgKi8KKyNkZWZpbmUgQ1JUQ19WU1lOQ19JTlQJCTB4MDAwMDIwMDB1bAkvKiBYQy9YTCAqLworI2RlZmluZSBDUlRDX0ZJRk9fT1ZFUkZJTEwJMHgwMDAwYzAwMHVsCS8qIFZUL0dUICovCisjZGVmaW5lIENSVEMyX1ZTWU5DX0lOVF9FTgkweDAwMDA0MDAwdWwJLyogWEMvWEwgKi8KKyNkZWZpbmUgQ1JUQzJfVlNZTkNfSU5UCQkweDAwMDA4MDAwdWwJLyogWEMvWEwgKi8KKworI2RlZmluZSBDUlRDX0ZJRk9fTFdNCQkweDAwMGYwMDAwCisjZGVmaW5lIENSVENfSFZTWU5DX0lPX0RSSVZFCTB4MDAwMTAwMDAJLyogWEMvWEwgKi8KKyNkZWZpbmUgQ1JUQzJfUElYX1dJRFRICQkweDAwMGUwMDAwCS8qIExUUHJvICovCisKKyNkZWZpbmUgQ1JUQ19WR0FfMTI4S0FQX1BBR0lORwkweDAwMTAwMDAwCisjZGVmaW5lIENSVENfVkZDX1NZTkNfVFJJU1RBVEUJMHgwMDIwMDAwMAkvKiBWVEIvR1RCL0xUICovCisjZGVmaW5lIENSVEMyX0VOCQkweDAwMjAwMDAwCS8qIExUUHJvICovCisjZGVmaW5lIENSVENfTE9DS19SRUdTCQkweDAwNDAwMDAwCisjZGVmaW5lIENSVENfU1lOQ19UUklTVEFURQkweDAwODAwMDAwCisKKyNkZWZpbmUgQ1JUQ19FWFRfRElTUF9FTgkweDAxMDAwMDAwCisjZGVmaW5lIENSVENfRU4JCQkweDAyMDAwMDAwCisjZGVmaW5lIENSVENfRElTUF9SRVFfRU4JMHgwNDAwMDAwMAorI2RlZmluZSBDUlRDX1ZHQV9MSU5FQVIJCTB4MDgwMDAwMDAKKyNkZWZpbmUgQ1JUQ19WU1lOQ19GQUxMX0VER0UJMHgxMDAwMDAwMAorI2RlZmluZSBDUlRDX1ZHQV9URVhUXzEzMgkweDIwMDAwMDAwCisjZGVmaW5lIENSVENfQ05UX0VOCQkweDQwMDAwMDAwCisjZGVmaW5lIENSVENfQ1VSX0JfVEVTVAkJMHg4MDAwMDAwMAorCisjZGVmaW5lIENSVENfQ1JOVF9WTElORQkJMHgwN2YwMDAwMAorCisjZGVmaW5lIENSVENfUFJFU0VSVkVEX01BU0sJMHgwMDAxZjAwMAorCisjZGVmaW5lIENSVENfVkJMQU5LCQkweDAwMDAwMDAxCisjZGVmaW5lIENSVENfVkJMQU5LX0lOVF9FTgkweDAwMDAwMDAyCisjZGVmaW5lIENSVENfVkJMQU5LX0lOVAkJMHgwMDAwMDAwNAorI2RlZmluZSBDUlRDX1ZCTEFOS19JTlRfQUsJQ1JUQ19WQkxBTktfSU5UCisjZGVmaW5lIENSVENfVkxJTkVfSU5UX0VOCTB4MDAwMDAwMDgKKyNkZWZpbmUgQ1JUQ19WTElORV9JTlQJCTB4MDAwMDAwMTAKKyNkZWZpbmUgQ1JUQ19WTElORV9JTlRfQUsJQ1JUQ19WTElORV9JTlQKKyNkZWZpbmUgQ1JUQ19WTElORV9TWU5DCQkweDAwMDAwMDIwCisjZGVmaW5lIENSVENfRlJBTUUJCTB4MDAwMDAwNDAKKyNkZWZpbmUgU05BUFNIT1RfSU5UX0VOCQkweDAwMDAwMDgwCisjZGVmaW5lIFNOQVBTSE9UX0lOVAkJMHgwMDAwMDEwMAorI2RlZmluZSBTTkFQU0hPVF9JTlRfQUsJCVNOQVBTSE9UX0lOVAorI2RlZmluZSBJMkNfSU5UX0VOCQkweDAwMDAwMjAwCisjZGVmaW5lIEkyQ19JTlQJCQkweDAwMDAwNDAwCisjZGVmaW5lIEkyQ19JTlRfQUsJCUkyQ19JTlQKKyNkZWZpbmUgQ1JUQzJfVkJMQU5LCQkweDAwMDAwODAwCisjZGVmaW5lIENSVEMyX1ZCTEFOS19JTlRfRU4JMHgwMDAwMTAwMAorI2RlZmluZSBDUlRDMl9WQkxBTktfSU5UCTB4MDAwMDIwMDAKKyNkZWZpbmUgQ1JUQzJfVkJMQU5LX0lOVF9BSwlDUlRDMl9WQkxBTktfSU5UCisjZGVmaW5lIENSVEMyX1ZMSU5FX0lOVF9FTgkweDAwMDA0MDAwCisjZGVmaW5lIENSVEMyX1ZMSU5FX0lOVAkJMHgwMDAwODAwMAorI2RlZmluZSBDUlRDMl9WTElORV9JTlRfQUsJQ1JUQzJfVkxJTkVfSU5UCisjZGVmaW5lIENBUEJVRjBfSU5UX0VOCQkweDAwMDEwMDAwCisjZGVmaW5lIENBUEJVRjBfSU5UCQkweDAwMDIwMDAwCisjZGVmaW5lIENBUEJVRjBfSU5UX0FLCQlDQVBCVUYwX0lOVAorI2RlZmluZSBDQVBCVUYxX0lOVF9FTgkJMHgwMDA0MDAwMAorI2RlZmluZSBDQVBCVUYxX0lOVAkJMHgwMDA4MDAwMAorI2RlZmluZSBDQVBCVUYxX0lOVF9BSwkJQ0FQQlVGMV9JTlQKKyNkZWZpbmUgT1ZFUkxBWV9FT0ZfSU5UX0VOCTB4MDAxMDAwMDAKKyNkZWZpbmUgT1ZFUkxBWV9FT0ZfSU5UCQkweDAwMjAwMDAwCisjZGVmaW5lIE9WRVJMQVlfRU9GX0lOVF9BSwlPVkVSTEFZX0VPRl9JTlQKKyNkZWZpbmUgT05FU0hPVF9DQVBfSU5UX0VOCTB4MDA0MDAwMDAKKyNkZWZpbmUgT05FU0hPVF9DQVBfSU5UCQkweDAwODAwMDAwCisjZGVmaW5lIE9ORVNIT1RfQ0FQX0lOVF9BSwlPTkVTSE9UX0NBUF9JTlQKKyNkZWZpbmUgQlVTTUFTVEVSX0VPTF9JTlRfRU4JMHgwMTAwMDAwMAorI2RlZmluZSBCVVNNQVNURVJfRU9MX0lOVAkweDAyMDAwMDAwCisjZGVmaW5lIEJVU01BU1RFUl9FT0xfSU5UX0FLCUJVU01BU1RFUl9FT0xfSU5UCisjZGVmaW5lIEdQX0lOVF9FTgkJMHgwNDAwMDAwMAorI2RlZmluZSBHUF9JTlQJCQkweDA4MDAwMDAwCisjZGVmaW5lIEdQX0lOVF9BSwkJR1BfSU5UCisjZGVmaW5lIENSVEMyX1ZMSU5FX1NZTkMJMHgxMDAwMDAwMAorI2RlZmluZSBTTkFQU0hPVDJfSU5UX0VOCTB4MjAwMDAwMDAKKyNkZWZpbmUgU05BUFNIT1QyX0lOVAkJMHg0MDAwMDAwMAorI2RlZmluZSBTTkFQU0hPVDJfSU5UX0FLCVNOQVBTSE9UMl9JTlQKKyNkZWZpbmUgVkJMQU5LX0JJVDJfSU5UCQkweDgwMDAwMDAwCisjZGVmaW5lIFZCTEFOS19CSVQyX0lOVF9BSwlWQkxBTktfQklUMl9JTlQKKworI2RlZmluZSBDUlRDX0lOVF9FTl9NQVNLCShDUlRDX1ZCTEFOS19JTlRfRU4gfAlcCisJCQkJIENSVENfVkxJTkVfSU5UX0VOIHwJXAorCQkJCSBTTkFQU0hPVF9JTlRfRU4gfAlcCisJCQkJIEkyQ19JTlRfRU4gfAkJXAorCQkJCSBDUlRDMl9WQkxBTktfSU5UX0VOIHwJXAorCQkJCSBDUlRDMl9WTElORV9JTlRfRU4gfAlcCisJCQkJIENBUEJVRjBfSU5UX0VOIHwJXAorCQkJCSBDQVBCVUYxX0lOVF9FTiB8CVwKKwkJCQkgT1ZFUkxBWV9FT0ZfSU5UX0VOIHwJXAorCQkJCSBPTkVTSE9UX0NBUF9JTlRfRU4gfAlcCisJCQkJIEJVU01BU1RFUl9FT0xfSU5UX0VOIHwJXAorCQkJCSBHUF9JTlRfRU4gfAkJXAorCQkJCSBTTkFQU0hPVDJfSU5UX0VOKQorCisvKiBEQUMgY29udHJvbCB2YWx1ZXMgKi8KKworI2RlZmluZSBEQUNfRVhUX1NFTF9SUzIJCTB4MDEKKyNkZWZpbmUgREFDX0VYVF9TRUxfUlMzCQkweDAyCisjZGVmaW5lIERBQ184QklUX0VOCQkweDAwMDAwMTAwCisjZGVmaW5lIERBQ19QSVhfRExZX01BU0sJMHgwMDAwMDYwMAorI2RlZmluZSBEQUNfUElYX0RMWV8wTlMJCTB4MDAwMDAwMDAKKyNkZWZpbmUgREFDX1BJWF9ETFlfMk5TCQkweDAwMDAwMjAwCisjZGVmaW5lIERBQ19QSVhfRExZXzROUwkJMHgwMDAwMDQwMAorI2RlZmluZSBEQUNfQkxBTktfQURKX01BU0sJMHgwMDAwMTgwMAorI2RlZmluZSBEQUNfQkxBTktfQURKXzAJCTB4MDAwMDAwMDAKKyNkZWZpbmUgREFDX0JMQU5LX0FESl8xCQkweDAwMDAwODAwCisjZGVmaW5lIERBQ19CTEFOS19BREpfMgkJMHgwMDAwMTAwMAorCisvKiBEQUMgY29udHJvbCB2YWx1ZXMgKG15IHNvdXJjZSBYTC9YQyBSZWdpc3RlciByZWZlcmVuY2UpICovCisjZGVmaW5lIERBQ19PVVRQVVRfTUFTSyAgICAgICAgIDB4MDAwMDAwMDEgIC8qIDAgLSBQQUwsIDEgLSBOVFNDICovCisjZGVmaW5lIERBQ19NSVNURVJZX0JJVCAgICAgICAgIDB4MDAwMDAwMDIgIC8qIFBTMiA/IFJTMzQzID8sIEVYVFJBX0JSSUdIVCBmb3IgR1QgKi8KKyNkZWZpbmUgREFDX0JMQU5LSU5HICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBEQUNfQ01QX0RJU0FCTEUgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIERBQzFfQ0xLX1NFTCAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgUEFMRVRURV9BQ0NFU1NfQ05UTCAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBQQUxFVFRFMl9TTk9PUF9FTiAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIERBQ19DTVBfT1VUUFVUICAgICAgICAgIDB4MDAwMDAwODAgLyogcmVhZCBvbmx5ICovCisvKiAjZGVmaW5lIERBQ184QklUX0VOIGlzIG9rICovCisjZGVmaW5lIENSVF9TRU5TRSAgICAgICAgICAgICAgIDB4MDAwMDA4MDAgLyogcmVhZCBvbmx5ICovCisjZGVmaW5lIENSVF9ERVRFQ1RJT05fT04gICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgREFDX1ZHQV9BRFJfRU4gICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBEQUNfRkVBX0NPTl9FTiAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIERBQ19QRFdOICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgREFDX1RZUEVfTUFTSyAgICAgICAgICAgMHgwMDA3MDAwMCAvKiByZWFkIG9ubHkgKi8KKworCisKKy8qIE1peCBjb250cm9sIHZhbHVlcyAqLworCisjZGVmaW5lIE1JWF9OT1RfRFNUCQkweDAwMDAKKyNkZWZpbmUgTUlYXzAJCQkweDAwMDEKKyNkZWZpbmUgTUlYXzEJCQkweDAwMDIKKyNkZWZpbmUgTUlYX0RTVAkJCTB4MDAwMworI2RlZmluZSBNSVhfTk9UX1NSQwkJMHgwMDA0CisjZGVmaW5lIE1JWF9YT1IJCQkweDAwMDUKKyNkZWZpbmUgTUlYX1hOT1IJCTB4MDAwNgorI2RlZmluZSBNSVhfU1JDCQkJMHgwMDA3CisjZGVmaW5lIE1JWF9OQU5ECQkweDAwMDgKKyNkZWZpbmUgTUlYX05PVF9TUkNfT1JfRFNUCTB4MDAwOQorI2RlZmluZSBNSVhfU1JDX09SX05PVF9EU1QJMHgwMDBhCisjZGVmaW5lIE1JWF9PUgkJCTB4MDAwYgorI2RlZmluZSBNSVhfQU5ECQkJMHgwMDBjCisjZGVmaW5lIE1JWF9TUkNfQU5EX05PVF9EU1QJMHgwMDBkCisjZGVmaW5lIE1JWF9OT1RfU1JDX0FORF9EU1QJMHgwMDBlCisjZGVmaW5lIE1JWF9OT1IJCQkweDAwMGYKKworLyogTWF4aW11bSBlbmdpbmUgZGltZW5zaW9ucyAqLworI2RlZmluZSBFTkdJTkVfTUlOX1gJCTAKKyNkZWZpbmUgRU5HSU5FX01JTl9ZCQkwCisjZGVmaW5lIEVOR0lORV9NQVhfWAkJNDA5NQorI2RlZmluZSBFTkdJTkVfTUFYX1kJCTE2MzgzCisKKy8qIE1hY2g2NCBlbmdpbmUgYml0IGNvbnN0YW50cyAtIHRoZXNlIGFyZSB0eXBpY2FsbHkgT1JlZCB0b2dldGhlciAqLworCisvKiBCVVNfQ05UTCByZWdpc3RlciBjb25zdGFudHMgKi8KKyNkZWZpbmUgQlVTX0FQRVJfUkVHX0RJUwkweDAwMDAwMDEwCisjZGVmaW5lIEJVU19GSUZPX0VSUl9BQ0sJMHgwMDIwMDAwMAorI2RlZmluZSBCVVNfSE9TVF9FUlJfQUNLCTB4MDA4MDAwMDAKKworLyogR0VOX1RFU1RfQ05UTCByZWdpc3RlciBjb25zdGFudHMgKi8KKyNkZWZpbmUgR0VOX09WUl9PVVRQVVRfRU4JMHgyMAorI2RlZmluZSBIV0NVUlNPUl9FTkFCTEUJCTB4ODAKKyNkZWZpbmUgR1VJX0VOR0lORV9FTkFCTEUJMHgxMDAKKyNkZWZpbmUgQkxPQ0tfV1JJVEVfRU5BQkxFCTB4MjAwCisKKy8qIERTUF9DT05GSUcgcmVnaXN0ZXIgY29uc3RhbnRzICovCisjZGVmaW5lIERTUF9YQ0xLU19QRVJfUVcJMHgwMDAwM2ZmZgorI2RlZmluZSBEU1BfTE9PUF9MQVRFTkNZCTB4MDAwZjAwMDAKKyNkZWZpbmUgRFNQX1BSRUNJU0lPTgkJMHgwMDcwMDAwMAorCisvKiBEU1BfT05fT0ZGIHJlZ2lzdGVyIGNvbnN0YW50cyAqLworI2RlZmluZSBEU1BfT0ZGCQkJMHgwMDAwMDdmZgorI2RlZmluZSBEU1BfT04JCQkweDA3ZmYwMDAwCisjZGVmaW5lIFZHQV9EU1BfT0ZGCQlEU1BfT0ZGCisjZGVmaW5lIFZHQV9EU1BfT04JCURTUF9PTgorI2RlZmluZSBWR0FfRFNQX1hDTEtTX1BFUl9RVwlEU1BfWENMS1NfUEVSX1FXCisKKy8qIFBMTCByZWdpc3RlciBpbmRpY2VzIGFuZCBmaWVsZHMgKi8KKyNkZWZpbmUgTVBMTF9DTlRMCQkweDAwCisjZGVmaW5lIFBMTF9QQ19HQUlOCQkweDA3CisjZGVmaW5lIFBMTF9WQ19HQUlOCQkweDE4CisjZGVmaW5lIFBMTF9EVVRZX0NZQwkJMHhFMAorI2RlZmluZSBWUExMX0NOVEwJCTB4MDEKKyNkZWZpbmUgUExMX1JFRl9ESVYJCTB4MDIKKyNkZWZpbmUgUExMX0dFTl9DTlRMCQkweDAzCisjZGVmaW5lIFBMTF9PVkVSUklERQkJMHgwMQkvKiBQTExfU0xFRVAgKi8KKyNkZWZpbmUgUExMX01DTEtfUlNUCQkweDAyCS8qIFBMTF9NUkVTRVQgKi8KKyNkZWZpbmUgT1NDX0VOCQkJMHgwNAorI2RlZmluZSBFWFRfQ0xLX0VOCQkweDA4CisjZGVmaW5lIEZPUkNFX0RDTEtfVFJJX1NUQVRFCTB4MDggICAgLyogVlQ0IC0+ICovCisjZGVmaW5lIE1DTEtfU1JDX1NFTAkJMHg3MAorI2RlZmluZSBFWFRfQ0xLX0NOVEwJCTB4ODAKKyNkZWZpbmUgRExMX1BXRE4JCTB4ODAgICAgLyogVlQ0IC0+ICovCisjZGVmaW5lIE1DTEtfRkJfRElWCQkweDA0CisjZGVmaW5lIFBMTF9WQ0xLX0NOVEwJCTB4MDUKKyNkZWZpbmUgUExMX1ZDTEtfU1JDX1NFTAkweDAzCisjZGVmaW5lIFBMTF9WQ0xLX1JTVAkJMHgwNAorI2RlZmluZSBQTExfVkNMS19JTlZFUlQJCTB4MDgKKyNkZWZpbmUgVkNMS19QT1NUX0RJVgkJMHgwNgorI2RlZmluZSBWQ0xLMF9QT1NUCQkweDAzCisjZGVmaW5lIFZDTEsxX1BPU1QJCTB4MEMKKyNkZWZpbmUgVkNMSzJfUE9TVAkJMHgzMAorI2RlZmluZSBWQ0xLM19QT1NUCQkweEMwCisjZGVmaW5lIFZDTEswX0ZCX0RJVgkJMHgwNworI2RlZmluZSBWQ0xLMV9GQl9ESVYJCTB4MDgKKyNkZWZpbmUgVkNMSzJfRkJfRElWCQkweDA5CisjZGVmaW5lIFZDTEszX0ZCX0RJVgkJMHgwQQorI2RlZmluZSBQTExfRVhUX0NOVEwJCTB4MEIKKyNkZWZpbmUgUExMX1hDTEtfTUNMS19SQVRJTwkweDAzCisjZGVmaW5lIFBMTF9YQ0xLX1NSQ19TRUwJMHgwNworI2RlZmluZSBQTExfTUZCX1RJTUVTXzRfMkIJMHgwOAorI2RlZmluZSBQTExfVkNMSzBfWERJVgkJMHgxMAorI2RlZmluZSBQTExfVkNMSzFfWERJVgkJMHgyMAorI2RlZmluZSBQTExfVkNMSzJfWERJVgkJMHg0MAorI2RlZmluZSBQTExfVkNMSzNfWERJVgkJMHg4MAorI2RlZmluZSBETExfQ05UTAkJMHgwQworI2RlZmluZSBETEwxX0NOVEwJCTB4MEMKKyNkZWZpbmUgVkZDX0NOVEwJCTB4MEQKKyNkZWZpbmUgUExMX1RFU1RfQ05UTAkJMHgwRQorI2RlZmluZSBQTExfVEVTVF9DT1VOVAkJMHgwRgorI2RlZmluZSBMVkRTX0NOVEwwCQkweDEwCisjZGVmaW5lIExWRFNfQ05UTDEJCTB4MTEKKyNkZWZpbmUgQUdQMV9DTlRMCQkweDEyCisjZGVmaW5lIEFHUDJfQ05UTAkJMHgxMworI2RlZmluZSBETEwyX0NOVEwJCTB4MTQKKyNkZWZpbmUgU0NMS19GQl9ESVYJCTB4MTUKKyNkZWZpbmUgU1BMTF9DTlRMMQkJMHgxNgorI2RlZmluZSBTUExMX0NOVEwyCQkweDE3CisjZGVmaW5lIEFQTExfU1RSQVBTCQkweDE4CisjZGVmaW5lIEVYVF9WUExMX0NOVEwJCTB4MTkKKyNkZWZpbmUgRVhUX1ZQTExfRU4JCTB4MDQKKyNkZWZpbmUgRVhUX1ZQTExfVkdBX0VOCQkweDA4CisjZGVmaW5lIEVYVF9WUExMX0lOU1lOQwkJMHgxMAorI2RlZmluZSBFWFRfVlBMTF9SRUZfRElWCTB4MUEKKyNkZWZpbmUgRVhUX1ZQTExfRkJfRElWCQkweDFCCisjZGVmaW5lIEVYVF9WUExMX01TQgkJMHgxQworI2RlZmluZSBIVE9UQUxfQ05UTAkJMHgxRAorI2RlZmluZSBCWVRFX0NMS19DTlRMCQkweDFFCisjZGVmaW5lIFRWX1BMTF9DTlRMMQkJMHgxRgorI2RlZmluZSBUVl9QTExfQ05UTDIJCTB4MjAKKyNkZWZpbmUgVFZfUExMX0NOVEwJCTB4MjEKKyNkZWZpbmUgRVhUX1RWX1BMTAkJMHgyMgorI2RlZmluZSBWMlBMTF9DTlRMCQkweDIzCisjZGVmaW5lIFBMTF9WMkNMS19DTlRMCQkweDI0CisjZGVmaW5lIEVYVF9WMlBMTF9SRUZfRElWCTB4MjUKKyNkZWZpbmUgRVhUX1YyUExMX0ZCX0RJVgkweDI2CisjZGVmaW5lIEVYVF9WMlBMTF9NU0IJCTB4MjcKKyNkZWZpbmUgSFRPVEFMMl9DTlRMCQkweDI4CisjZGVmaW5lIFBMTF9ZQ0xLX0NOVEwJCTB4MjkKKyNkZWZpbmUgUE1fRFlOX0NMS19DTlRMCQkweDJBCisKKy8qIENPTkZJR19DTlRMIHJlZ2lzdGVyIGNvbnN0YW50cyAqLworI2RlZmluZSBBUEVSVFVSRV80TV9FTkFCTEUJMQorI2RlZmluZSBBUEVSVFVSRV84TV9FTkFCTEUJMgorI2RlZmluZSBWR0FfQVBFUlRVUkVfRU5BQkxFCTQKKworLyogQ09ORklHX1NUQVQwIHJlZ2lzdGVyIGNvbnN0YW50cyAoR1gsIENYKSAqLworI2RlZmluZSBDRkdfQlVTX1RZUEUJCTB4MDAwMDAwMDcKKyNkZWZpbmUgQ0ZHX01FTV9UWVBFCQkweDAwMDAwMDM4CisjZGVmaW5lIENGR19JTklUX0RBQ19UWVBFCTB4MDAwMDBlMDAKKworLyogQ09ORklHX1NUQVQwIHJlZ2lzdGVyIGNvbnN0YW50cyAoQ1QsIEVULCBWVCkgKi8KKyNkZWZpbmUgQ0ZHX01FTV9UWVBFX3hUCQkweDAwMDAwMDA3CisKKyNkZWZpbmUgSVNBCQkJMAorI2RlZmluZSBFSVNBCQkJMQorI2RlZmluZSBMT0NBTF9CVVMJCTYKKyNkZWZpbmUgUENJCQkJNworCisvKiBNZW1vcnkgdHlwZXMgZm9yIEdYLCBDWCAqLworI2RlZmluZSBEUkFNeDQJCQkwCisjZGVmaW5lIFZSQU14MTYJCQkxCisjZGVmaW5lIFZSQU14MTZzc3IJCTIKKyNkZWZpbmUgRFJBTXgxNgkJCTMKKyNkZWZpbmUgR3JhcGhpY3NEUkFNeDE2CQk0CisjZGVmaW5lIEVuaGFuY2VkVlJBTXgxNgkJNQorI2RlZmluZSBFbmhhbmNlZFZSQU14MTZzc3IJNgorCisvKiBNZW1vcnkgdHlwZXMgZm9yIENULCBFVCwgVlQsIEdUICovCisjZGVmaW5lIERSQU0JCQkxCisjZGVmaW5lIEVETwkJCTIKKyNkZWZpbmUgUFNFVURPX0VETwkJMworI2RlZmluZSBTRFJBTQkJCTQKKyNkZWZpbmUgU0dSQU0JCQk1CisjZGVmaW5lIFdSQU0JCQk2CisKKyNkZWZpbmUgREFDX0lOVEVSTkFMCQkweDAwCisjZGVmaW5lIERBQ19JQk1SR0I1MTQJCTB4MDEKKyNkZWZpbmUgREFDX0FUSTY4ODc1CQkweDAyCisjZGVmaW5lIERBQ19UVlAzMDI2X0EJCTB4NzIKKyNkZWZpbmUgREFDX0JUNDc2CQkweDAzCisjZGVmaW5lIERBQ19CVDQ4MQkJMHgwNAorI2RlZmluZSBEQUNfQVRUMjBDNDkxCQkweDE0CisjZGVmaW5lIERBQ19TQzE1MDI2CQkweDI0CisjZGVmaW5lIERBQ19NVTlDMTg4MAkJMHgzNAorI2RlZmluZSBEQUNfSU1TRzE3NAkJMHg0NAorI2RlZmluZSBEQUNfQVRJNjg4NjBfQgkJMHgwNQorI2RlZmluZSBEQUNfQVRJNjg4NjBfQwkJMHgxNQorI2RlZmluZSBEQUNfVFZQMzAyNl9CCQkweDc1CisjZGVmaW5lIERBQ19TVEcxNzAwCQkweDA2CisjZGVmaW5lIERBQ19BVFQ0OTgJCTB4MTYKKyNkZWZpbmUgREFDX1NURzE3MDIJCTB4MDcKKyNkZWZpbmUgREFDX1NDMTUwMjEJCTB4MTcKKyNkZWZpbmUgREFDX0FUVDIxQzQ5OAkJMHgyNworI2RlZmluZSBEQUNfU1RHMTcwMwkJMHgzNworI2RlZmluZSBEQUNfQ0g4Mzk4CQkweDQ3CisjZGVmaW5lIERBQ19BVFQyMEM0MDgJCTB4NTcKKworI2RlZmluZSBDTEtfQVRJMTg4MThfMAkJMAorI2RlZmluZSBDTEtfQVRJMTg4MThfMQkJMQorI2RlZmluZSBDTEtfU1RHMTcwMwkJMgorI2RlZmluZSBDTEtfQ0g4Mzk4CQkzCisjZGVmaW5lIENMS19JTlRFUk5BTAkJNAorI2RlZmluZSBDTEtfQVRUMjBDNDA4CQk1CisjZGVmaW5lIENMS19JQk1SR0I1MTQJCTYKKworLyogTUVNX0NOVEwgcmVnaXN0ZXIgY29uc3RhbnRzICovCisjZGVmaW5lIE1FTV9TSVpFX0FMSUFTCQkweDAwMDAwMDA3CisjZGVmaW5lIE1FTV9TSVpFXzUxMksJCTB4MDAwMDAwMDAKKyNkZWZpbmUgTUVNX1NJWkVfMU0JCTB4MDAwMDAwMDEKKyNkZWZpbmUgTUVNX1NJWkVfMk0JCTB4MDAwMDAwMDIKKyNkZWZpbmUgTUVNX1NJWkVfNE0JCTB4MDAwMDAwMDMKKyNkZWZpbmUgTUVNX1NJWkVfNk0JCTB4MDAwMDAwMDQKKyNkZWZpbmUgTUVNX1NJWkVfOE0JCTB4MDAwMDAwMDUKKyNkZWZpbmUgTUVNX1NJWkVfQUxJQVNfR1RCCTB4MDAwMDAwMEYKKyNkZWZpbmUgTUVNX1NJWkVfMk1fR1RCCQkweDAwMDAwMDAzCisjZGVmaW5lIE1FTV9TSVpFXzRNX0dUQgkJMHgwMDAwMDAwNworI2RlZmluZSBNRU1fU0laRV82TV9HVEIJCTB4MDAwMDAwMDkKKyNkZWZpbmUgTUVNX1NJWkVfOE1fR1RCCQkweDAwMDAwMDBCCisjZGVmaW5lIE1FTV9CTkRSWQkJMHgwMDAzMDAwMAorI2RlZmluZSBNRU1fQk5EUllfMEsJCTB4MDAwMDAwMDAKKyNkZWZpbmUgTUVNX0JORFJZXzI1NksJCTB4MDAwMTAwMDAKKyNkZWZpbmUgTUVNX0JORFJZXzUxMksJCTB4MDAwMjAwMDAKKyNkZWZpbmUgTUVNX0JORFJZXzFNCQkweDAwMDMwMDAwCisjZGVmaW5lIE1FTV9CTkRSWV9FTgkJMHgwMDA0MDAwMAorCisjZGVmaW5lIE9ORV9NQgkJCTB4MTAwMDAwCisvKiBBVEkgUENJIGNvbnN0YW50cyAqLworI2RlZmluZSBQQ0lfQVRJX1ZFTkRPUl9JRAkweDEwMDIKKworCisvKiBDT05GSUdfQ0hJUF9JRCByZWdpc3RlciBjb25zdGFudHMgKi8KKyNkZWZpbmUgQ0ZHX0NISVBfVFlQRQkJMHgwMDAwRkZGRgorI2RlZmluZSBDRkdfQ0hJUF9DTEFTUwkJMHgwMEZGMDAwMAorI2RlZmluZSBDRkdfQ0hJUF9SRVYJCTB4RkYwMDAwMDAKKyNkZWZpbmUgQ0ZHX0NISVBfTUFKT1IJCTB4MDcwMDAwMDAKKyNkZWZpbmUgQ0ZHX0NISVBfRk5EX0lECQkweDM4MDAwMDAwCisjZGVmaW5lIENGR19DSElQX01JTk9SCQkweEMwMDAwMDAwCisKKworLyogQ2hpcCBJRHMgcmVhZCBmcm9tIENPTkZJR19DSElQX0lEICovCisKKy8qIG1hY2g2NEdYIGZhbWlseSAqLworI2RlZmluZSBHWF9DSElQX0lECTB4RDcJLyogbWFjaDY0R1ggKEFUSTg4OEdYMDApICovCisjZGVmaW5lIENYX0NISVBfSUQJMHg1NwkvKiBtYWNoNjRDWCAoQVRJODg4Q1gwMCkgKi8KKworI2RlZmluZSBHWF9QQ0lfSUQJMHg0NzU4CS8qIG1hY2g2NEdYIChBVEk4ODhHWDAwKSAqLworI2RlZmluZSBDWF9QQ0lfSUQJMHg0MzU4CS8qIG1hY2g2NENYIChBVEk4ODhDWDAwKSAqLworCisvKiBtYWNoNjRDVCBmYW1pbHkgKi8KKyNkZWZpbmUgQ1RfQ0hJUF9JRAkweDQzNTQJLyogbWFjaDY0Q1QgKEFUSTI2NENUKSAqLworI2RlZmluZSBFVF9DSElQX0lECTB4NDU1NAkvKiBtYWNoNjRFVCAoQVRJMjY0RVQpICovCisKKy8qIG1hY2g2NENUIGZhbWlseSAvIG1hY2g2NFZUIGNsYXNzICovCisjZGVmaW5lIFZUX0NISVBfSUQJMHg1NjU0CS8qIG1hY2g2NFZUIChBVEkyNjRWVCkgKi8KKyNkZWZpbmUgVlVfQ0hJUF9JRAkweDU2NTUJLyogbWFjaDY0VlRCIChBVEkyNjRWVEIpICovCisjZGVmaW5lIFZWX0NISVBfSUQJMHg1NjU2CS8qIG1hY2g2NFZUNCAoQVRJMjY0VlQ0KSAqLworCisvKiBtYWNoNjRDVCBmYW1pbHkgLyBtYWNoNjRHVCAoM0QgUkFHRSkgY2xhc3MgKi8KKyNkZWZpbmUgTEJfQ0hJUF9JRAkweDRjNDIJLyogUkFHRSBMVCBQUk8sIEFHUCAqLworI2RlZmluZSBMRF9DSElQX0lECTB4NGM0NAkvKiBSQUdFIExUIFBSTyAqLworI2RlZmluZSBMR19DSElQX0lECTB4NGM0NwkvKiBSQUdFIExUICovCisjZGVmaW5lIExJX0NISVBfSUQJMHg0YzQ5CS8qIFJBR0UgTFQgUFJPICovCisjZGVmaW5lIExQX0NISVBfSUQJMHg0YzUwCS8qIFJBR0UgTFQgUFJPICovCisjZGVmaW5lIExUX0NISVBfSUQJMHg0YzU0CS8qIFJBR0UgTFQgKi8KKworLyogbWFjaDY0Q1QgZmFtaWx5IC8gKFJhZ2UgWEwpIGNsYXNzICovCisjZGVmaW5lIEdSX0NISVBfSUQJMHg0NzUyCS8qIFJBR0UgWEwsIEJHQSwgUENJMzMgKi8KKyNkZWZpbmUgR1NfQ0hJUF9JRAkweDQ3NTMJLyogUkFHRSBYTCwgUFFGUCwgUENJMzMgKi8KKyNkZWZpbmUgR01fQ0hJUF9JRAkweDQ3NGQJLyogUkFHRSBYTCwgQkdBLCBBR1AgMXgsMnggKi8KKyNkZWZpbmUgR05fQ0hJUF9JRAkweDQ3NGUJLyogUkFHRSBYTCwgUFFGUCxBR1AgMXgsMnggKi8KKyNkZWZpbmUgR09fQ0hJUF9JRAkweDQ3NGYJLyogUkFHRSBYTCwgQkdBLCBQQ0k2NiAqLworI2RlZmluZSBHTF9DSElQX0lECTB4NDc0YwkvKiBSQUdFIFhMLCBQUUZQLCBQQ0k2NiAqLworCisjZGVmaW5lIElTX1hMKGlkKSAoKGlkKT09R1JfQ0hJUF9JRCB8fCAoaWQpPT1HU19DSElQX0lEIHx8IFwKKwkJICAgKGlkKT09R01fQ0hJUF9JRCB8fCAoaWQpPT1HTl9DSElQX0lEIHx8IFwKKwkJICAgKGlkKT09R09fQ0hJUF9JRCB8fCAoaWQpPT1HTF9DSElQX0lEKQorCisjZGVmaW5lIEdUX0NISVBfSUQJMHg0NzU0CS8qIFJBR0UgKEdUKSAqLworI2RlZmluZSBHVV9DSElQX0lECTB4NDc1NQkvKiBSQUdFIElJL0lJKyAoR1RCKSAqLworI2RlZmluZSBHVl9DSElQX0lECTB4NDc1NgkvKiBSQUdFIElJQywgUENJICovCisjZGVmaW5lIEdXX0NISVBfSUQJMHg0NzU3CS8qIFJBR0UgSUlDLCBBR1AgKi8KKyNkZWZpbmUgR1pfQ0hJUF9JRAkweDQ3NWEJLyogUkFHRSBJSUMsIEFHUCAqLworI2RlZmluZSBHQl9DSElQX0lECTB4NDc0MgkvKiBSQUdFIFBSTywgQkdBLCBBR1AgMXggYW5kIDJ4ICovCisjZGVmaW5lIEdEX0NISVBfSUQJMHg0NzQ0CS8qIFJBR0UgUFJPLCBCR0EsIEFHUCAxeCBvbmx5ICovCisjZGVmaW5lIEdJX0NISVBfSUQJMHg0NzQ5CS8qIFJBR0UgUFJPLCBCR0EsIFBDSTMzIG9ubHkgKi8KKyNkZWZpbmUgR1BfQ0hJUF9JRAkweDQ3NTAJLyogUkFHRSBQUk8sIFBRRlAsIFBDSTMzLCBmdWxsIDNEICovCisjZGVmaW5lIEdRX0NISVBfSUQJMHg0NzUxCS8qIFJBR0UgUFJPLCBQUUZQLCBQQ0kzMywgbGltaXRlZCAzRCAqLworCisjZGVmaW5lIExNX0NISVBfSUQJMHg0YzRkCS8qIFJBR0UgTW9iaWxpdHkgQUdQLCBmdWxsIGZ1bmN0aW9uICovCisjZGVmaW5lIExOX0NISVBfSUQJMHg0YzRlCS8qIFJBR0UgTW9iaWxpdHkgQUdQICovCisjZGVmaW5lIExSX0NISVBfSUQJMHg0YzUyCS8qIFJBR0UgTW9iaWxpdHkgUENJLCBmdWxsIGZ1bmN0aW9uICovCisjZGVmaW5lIExTX0NISVBfSUQJMHg0YzUzCS8qIFJBR0UgTW9iaWxpdHkgUENJICovCisKKyNkZWZpbmUgSVNfTU9CSUxJVFkoaWQpICgoaWQpPT1MTV9DSElQX0lEIHx8IChpZCk9PUxOX0NISVBfSUQgfHwgXAorCQkJKGlkKT09TFJfQ0hJUF9JRCB8fCAoaWQpPT1MU19DSElQX0lEKQorLyogTWFjaDY0IG1ham9yIEFTSUMgcmV2aXNpb25zICovCisjZGVmaW5lIE1BQ0g2NF9BU0lDX05FQ19WVF9BMwkJMHgwOAorI2RlZmluZSBNQUNINjRfQVNJQ19ORUNfVlRfQTQJCTB4NDgKKyNkZWZpbmUgTUFDSDY0X0FTSUNfU0dTX1ZUX0E0CQkweDQwCisjZGVmaW5lIE1BQ0g2NF9BU0lDX1NHU19WVF9CMVMxCQkweDAxCisjZGVmaW5lIE1BQ0g2NF9BU0lDX1NHU19HVF9CMVMxCQkweDAxCisjZGVmaW5lIE1BQ0g2NF9BU0lDX1NHU19HVF9CMVMyCQkweDQxCisjZGVmaW5lIE1BQ0g2NF9BU0lDX1VNQ19HVF9CMlUxCQkweDFhCisjZGVmaW5lIE1BQ0g2NF9BU0lDX1VNQ19HVF9CMlUyCQkweDVhCisjZGVmaW5lIE1BQ0g2NF9BU0lDX1VNQ19WVF9CMlUzCQkweDlhCisjZGVmaW5lIE1BQ0g2NF9BU0lDX1VNQ19HVF9CMlUzCQkweDlhCisjZGVmaW5lIE1BQ0g2NF9BU0lDX1VNQ19SM0JfRF9QX0ExCTB4MWIKKyNkZWZpbmUgTUFDSDY0X0FTSUNfVU1DX1IzQl9EX1BfQTIJMHg1YgorI2RlZmluZSBNQUNINjRfQVNJQ19VTUNfUjNCX0RfUF9BMwkweDFjCisjZGVmaW5lIE1BQ0g2NF9BU0lDX1VNQ19SM0JfRF9QX0E0CTB4NWMKKworLyogTWFjaDY0IGZvdW5kcmllcyAqLworI2RlZmluZSBNQUNINjRfRk5EX1NHUwkJMAorI2RlZmluZSBNQUNINjRfRk5EX05FQwkJMQorI2RlZmluZSBNQUNINjRfRk5EX1VNQwkJMworCisvKiBNYWNoNjQgY2hpcCB0eXBlcyAqLworI2RlZmluZSBNQUNINjRfVU5LTk9XTgkJMAorI2RlZmluZSBNQUNINjRfR1gJCTEKKyNkZWZpbmUgTUFDSDY0X0NYCQkyCisjZGVmaW5lIE1BQ0g2NF9DVAkJM1Jlc3RvcmUKKyNkZWZpbmUgTUFDSDY0X0VUCQk0CisjZGVmaW5lIE1BQ0g2NF9WVAkJNQorI2RlZmluZSBNQUNINjRfR1QJCTYKKworLyogRFNUX0NOVEwgcmVnaXN0ZXIgY29uc3RhbnRzICovCisjZGVmaW5lIERTVF9YX1JJR0hUX1RPX0xFRlQJMAorI2RlZmluZSBEU1RfWF9MRUZUX1RPX1JJR0hUCTEKKyNkZWZpbmUgRFNUX1lfQk9UVE9NX1RPX1RPUAkwCisjZGVmaW5lIERTVF9ZX1RPUF9UT19CT1RUT00JMgorI2RlZmluZSBEU1RfWF9NQUpPUgkJMAorI2RlZmluZSBEU1RfWV9NQUpPUgkJNAorI2RlZmluZSBEU1RfWF9USUxFCQk4CisjZGVmaW5lIERTVF9ZX1RJTEUJCTB4MTAKKyNkZWZpbmUgRFNUX0xBU1RfUEVMCQkweDIwCisjZGVmaW5lIERTVF9QT0xZR09OX0VOQUJMRQkweDQwCisjZGVmaW5lIERTVF8yNF9ST1RBVElPTl9FTkFCTEUJMHg4MAorCisvKiBTUkNfQ05UTCByZWdpc3RlciBjb25zdGFudHMgKi8KKyNkZWZpbmUgU1JDX1BBVFRFUk5fRU5BQkxFCQkxCisjZGVmaW5lIFNSQ19ST1RBVElPTl9FTkFCTEUJCTIKKyNkZWZpbmUgU1JDX0xJTkVBUl9FTkFCTEUJCTQKKyNkZWZpbmUgU1JDX0JZVEVfQUxJR04JCQk4CisjZGVmaW5lIFNSQ19MSU5FX1hfUklHSFRfVE9fTEVGVAkwCisjZGVmaW5lIFNSQ19MSU5FX1hfTEVGVF9UT19SSUdIVAkweDEwCisKKy8qIEhPU1RfQ05UTCByZWdpc3RlciBjb25zdGFudHMgKi8KKyNkZWZpbmUgSE9TVF9CWVRFX0FMSUdOCQkxCisKKy8qIEdVSV9UUkFKX0NOVEwgcmVnaXN0ZXIgY29uc3RhbnRzICovCisjZGVmaW5lIFBBVF9NT05PXzh4OF9FTkFCTEUJMHgwMTAwMDAwMAorI2RlZmluZSBQQVRfQ0xSXzR4Ml9FTkFCTEUJMHgwMjAwMDAwMAorI2RlZmluZSBQQVRfQ0xSXzh4MV9FTkFCTEUJMHgwNDAwMDAwMAorCisvKiBEUF9DSEFJTl9NQVNLIHJlZ2lzdGVyIGNvbnN0YW50cyAqLworI2RlZmluZSBEUF9DSEFJTl80QlBQCQkweDg4ODgKKyNkZWZpbmUgRFBfQ0hBSU5fN0JQUAkJMHhEMkQyCisjZGVmaW5lIERQX0NIQUlOXzhCUFAJCTB4ODA4MAorI2RlZmluZSBEUF9DSEFJTl84QlBQX1JHQgkweDkyOTIKKyNkZWZpbmUgRFBfQ0hBSU5fMTVCUFAJCTB4NDIxMAorI2RlZmluZSBEUF9DSEFJTl8xNkJQUAkJMHg4NDEwCisjZGVmaW5lIERQX0NIQUlOXzI0QlBQCQkweDgwODAKKyNkZWZpbmUgRFBfQ0hBSU5fMzJCUFAJCTB4ODA4MAorCisvKiBEUF9QSVhfV0lEVEggcmVnaXN0ZXIgY29uc3RhbnRzICovCisjZGVmaW5lIERTVF8xQlBQCQkweDAKKyNkZWZpbmUgRFNUXzRCUFAJCTB4MQorI2RlZmluZSBEU1RfOEJQUAkJMHgyCisjZGVmaW5lIERTVF8xNUJQUAkJMHgzCisjZGVmaW5lIERTVF8xNkJQUAkJMHg0CisjZGVmaW5lIERTVF8yNEJQUAkJMHg1CisjZGVmaW5lIERTVF8zMkJQUAkJMHg2CisjZGVmaW5lIERTVF9NQVNLCQkweEYKKyNkZWZpbmUgU1JDXzFCUFAJCTB4MDAwCisjZGVmaW5lIFNSQ180QlBQCQkweDEwMAorI2RlZmluZSBTUkNfOEJQUAkJMHgyMDAKKyNkZWZpbmUgU1JDXzE1QlBQCQkweDMwMAorI2RlZmluZSBTUkNfMTZCUFAJCTB4NDAwCisjZGVmaW5lIFNSQ18yNEJQUAkJMHg1MDAKKyNkZWZpbmUgU1JDXzMyQlBQCQkweDYwMAorI2RlZmluZSBTUkNfTUFTSwkJMHhGMDAKKyNkZWZpbmUgRFBfSE9TVF9UUklQTEVfRU4JMHgyMDAwCisjZGVmaW5lIEhPU1RfMUJQUAkJMHgwMDAwMAorI2RlZmluZSBIT1NUXzRCUFAJCTB4MTAwMDAKKyNkZWZpbmUgSE9TVF84QlBQCQkweDIwMDAwCisjZGVmaW5lIEhPU1RfMTVCUFAJCTB4MzAwMDAKKyNkZWZpbmUgSE9TVF8xNkJQUAkJMHg0MDAwMAorI2RlZmluZSBIT1NUXzI0QlBQCQkweDUwMDAwCisjZGVmaW5lIEhPU1RfMzJCUFAJCTB4NjAwMDAKKyNkZWZpbmUgSE9TVF9NQVNLCQkweEYwMDAwCisjZGVmaW5lIEJZVEVfT1JERVJfTVNCX1RPX0xTQgkwCisjZGVmaW5lIEJZVEVfT1JERVJfTFNCX1RPX01TQgkweDEwMDAwMDAKKyNkZWZpbmUgQllURV9PUkRFUl9NQVNLCQkweDEwMDAwMDAKKworLyogRFBfTUlYIHJlZ2lzdGVyIGNvbnN0YW50cyAqLworI2RlZmluZSBCS0dEX01JWF9OT1RfRAkJCTAKKyNkZWZpbmUgQktHRF9NSVhfWkVSTwkJCTEKKyNkZWZpbmUgQktHRF9NSVhfT05FCQkJMgorI2RlZmluZSBCS0dEX01JWF9ECQkJMworI2RlZmluZSBCS0dEX01JWF9OT1RfUwkJCTQKKyNkZWZpbmUgQktHRF9NSVhfRF9YT1JfUwkJNQorI2RlZmluZSBCS0dEX01JWF9OT1RfRF9YT1JfUwkJNgorI2RlZmluZSBCS0dEX01JWF9TCQkJNworI2RlZmluZSBCS0dEX01JWF9OT1RfRF9PUl9OT1RfUwkJOAorI2RlZmluZSBCS0dEX01JWF9EX09SX05PVF9TCQk5CisjZGVmaW5lIEJLR0RfTUlYX05PVF9EX09SX1MJCTEwCisjZGVmaW5lIEJLR0RfTUlYX0RfT1JfUwkJCTExCisjZGVmaW5lIEJLR0RfTUlYX0RfQU5EX1MJCTEyCisjZGVmaW5lIEJLR0RfTUlYX05PVF9EX0FORF9TCQkxMworI2RlZmluZSBCS0dEX01JWF9EX0FORF9OT1RfUwkJMTQKKyNkZWZpbmUgQktHRF9NSVhfTk9UX0RfQU5EX05PVF9TCTE1CisjZGVmaW5lIEJLR0RfTUlYX0RfUExVU19TX0RJVjIJCTB4MTcKKyNkZWZpbmUgRlJHRF9NSVhfTk9UX0QJCQkwCisjZGVmaW5lIEZSR0RfTUlYX1pFUk8JCQkweDEwMDAwCisjZGVmaW5lIEZSR0RfTUlYX09ORQkJCTB4MjAwMDAKKyNkZWZpbmUgRlJHRF9NSVhfRAkJCTB4MzAwMDAKKyNkZWZpbmUgRlJHRF9NSVhfTk9UX1MJCQkweDQwMDAwCisjZGVmaW5lIEZSR0RfTUlYX0RfWE9SX1MJCTB4NTAwMDAKKyNkZWZpbmUgRlJHRF9NSVhfTk9UX0RfWE9SX1MJCTB4NjAwMDAKKyNkZWZpbmUgRlJHRF9NSVhfUwkJCTB4NzAwMDAKKyNkZWZpbmUgRlJHRF9NSVhfTk9UX0RfT1JfTk9UX1MJCTB4ODAwMDAKKyNkZWZpbmUgRlJHRF9NSVhfRF9PUl9OT1RfUwkJMHg5MDAwMAorI2RlZmluZSBGUkdEX01JWF9OT1RfRF9PUl9TCQkweGEwMDAwCisjZGVmaW5lIEZSR0RfTUlYX0RfT1JfUwkJCTB4YjAwMDAKKyNkZWZpbmUgRlJHRF9NSVhfRF9BTkRfUwkJMHhjMDAwMAorI2RlZmluZSBGUkdEX01JWF9OT1RfRF9BTkRfUwkJMHhkMDAwMAorI2RlZmluZSBGUkdEX01JWF9EX0FORF9OT1RfUwkJMHhlMDAwMAorI2RlZmluZSBGUkdEX01JWF9OT1RfRF9BTkRfTk9UX1MJMHhmMDAwMAorI2RlZmluZSBGUkdEX01JWF9EX1BMVVNfU19ESVYyCQkweDE3MDAwMAorCisvKiBEUF9TUkMgcmVnaXN0ZXIgY29uc3RhbnRzICovCisjZGVmaW5lIEJLR0RfU1JDX0JLR0RfQ0xSCTAKKyNkZWZpbmUgQktHRF9TUkNfRlJHRF9DTFIJMQorI2RlZmluZSBCS0dEX1NSQ19IT1NUCQkyCisjZGVmaW5lIEJLR0RfU1JDX0JMSVQJCTMKKyNkZWZpbmUgQktHRF9TUkNfUEFUVEVSTgk0CisjZGVmaW5lIEZSR0RfU1JDX0JLR0RfQ0xSCTAKKyNkZWZpbmUgRlJHRF9TUkNfRlJHRF9DTFIJMHgxMDAKKyNkZWZpbmUgRlJHRF9TUkNfSE9TVAkJMHgyMDAKKyNkZWZpbmUgRlJHRF9TUkNfQkxJVAkJMHgzMDAKKyNkZWZpbmUgRlJHRF9TUkNfUEFUVEVSTgkweDQwMAorI2RlZmluZSBNT05PX1NSQ19PTkUJCTAKKyNkZWZpbmUgTU9OT19TUkNfUEFUVEVSTgkweDEwMDAwCisjZGVmaW5lIE1PTk9fU1JDX0hPU1QJCTB4MjAwMDAKKyNkZWZpbmUgTU9OT19TUkNfQkxJVAkJMHgzMDAwMAorCisvKiBDTFJfQ01QX0NOVEwgcmVnaXN0ZXIgY29uc3RhbnRzICovCisjZGVmaW5lIENPTVBBUkVfRkFMU0UJCTAKKyNkZWZpbmUgQ09NUEFSRV9UUlVFCQkxCisjZGVmaW5lIENPTVBBUkVfTk9UX0VRVUFMCTQKKyNkZWZpbmUgQ09NUEFSRV9FUVVBTAkJNQorI2RlZmluZSBDT01QQVJFX0RFU1RJTkFUSU9OCTAKKyNkZWZpbmUgQ09NUEFSRV9TT1VSQ0UJCTB4MTAwMDAwMAorCisvKiBGSUZPX1NUQVQgcmVnaXN0ZXIgY29uc3RhbnRzICovCisjZGVmaW5lIEZJRk9fRVJSCQkweDgwMDAwMDAwCisKKy8qIENPTlRFWFRfTE9BRF9DTlRMIGNvbnN0YW50cyAqLworI2RlZmluZSBDT05URVhUX05PX0xPQUQJCQkwCisjZGVmaW5lIENPTlRFWFRfTE9BRAkJCTB4MTAwMDAKKyNkZWZpbmUgQ09OVEVYVF9MT0FEX0FORF9ET19GSUxMCTB4MjAwMDAKKyNkZWZpbmUgQ09OVEVYVF9MT0FEX0FORF9ET19MSU5FCTB4MzAwMDAKKyNkZWZpbmUgQ09OVEVYVF9FWEVDVVRFCQkJMAorI2RlZmluZSBDT05URVhUX0NNRF9ESVNBQkxFCQkweDgwMDAwMDAwCisKKy8qIEdVSV9TVEFUIHJlZ2lzdGVyIGNvbnN0YW50cyAqLworI2RlZmluZSBFTkdJTkVfSURMRQkJCTAKKyNkZWZpbmUgRU5HSU5FX0JVU1kJCQkxCisjZGVmaW5lIFNDSVNTT1JfTEVGVF9GTEFHCQkweDEwCisjZGVmaW5lIFNDSVNTT1JfUklHSFRfRkxBRwkJMHgyMAorI2RlZmluZSBTQ0lTU09SX1RPUF9GTEFHCQkweDQwCisjZGVmaW5lIFNDSVNTT1JfQk9UVE9NX0ZMQUcJCTB4ODAKKworLyogQVRJIFZHQSBFeHRlbmRlZCBSZWdzaXRlcnMgKi8KKyNkZWZpbmUgc2lvQVRJRVhUCQkweDFjZQorI2RlZmluZSBiaW9BVElFWFQJCTB4M2NlCisKKyNkZWZpbmUgQVRJMkUJCQkweGFlCisjZGVmaW5lIEFUSTMyCQkJMHhiMgorI2RlZmluZSBBVEkzNgkJCTB4YjYKKworLyogVkdBIEdyYXBoaWNzIENvbnRyb2xsZXIgUmVnaXN0ZXJzICovCisjZGVmaW5lIFJfR0VOTU8JCQkweDNjYworI2RlZmluZSBWR0FHUkEJCQkweDNjZQorI2RlZmluZSBHUkEwNgkJCTB4MDYKKworLyogVkdBIFNlcXVxdWVuY2VyIFJlZ2lzdGVycyAqLworI2RlZmluZSBWR0FTRVEJCQkweDNjNAorI2RlZmluZSBTRVEwMgkJCTB4MDIKKyNkZWZpbmUgU0VRMDQJCQkweDA0CisKKyNkZWZpbmUgTUFDSDY0X01BWF9YCQlFTkdJTkVfTUFYX1gKKyNkZWZpbmUgTUFDSDY0X01BWF9ZCQlFTkdJTkVfTUFYX1kKKworI2RlZmluZSBJTkNfWAkJCTB4MDAyMAorI2RlZmluZSBJTkNfWQkJCTB4MDA4MAorCisjZGVmaW5lIFJHQjE2XzU1NQkJMHgwMDAwCisjZGVmaW5lIFJHQjE2XzU2NQkJMHgwMDQwCisjZGVmaW5lIFJHQjE2XzY1NQkJMHgwMDgwCisjZGVmaW5lIFJHQjE2XzY2NAkJMHgwMGMwCisKKyNkZWZpbmUgUE9MWV9URVhUX1RZUEUJCTB4MDAwMQorI2RlZmluZSBJTUFHRV9URVhUX1RZUEUJCTB4MDAwMgorI2RlZmluZSBURVhUX1RZUEVfOF9CSVQJCTB4MDAwNAorI2RlZmluZSBURVhUX1RZUEVfMTZfQklUCTB4MDAwOAorI2RlZmluZSBQT0xZX1RFWFRfVFlQRV84CShQT0xZX1RFWFRfVFlQRSB8IFRFWFRfVFlQRV84X0JJVCkKKyNkZWZpbmUgSU1BR0VfVEVYVF9UWVBFXzgJKElNQUdFX1RFWFRfVFlQRSB8IFRFWFRfVFlQRV84X0JJVCkKKyNkZWZpbmUgUE9MWV9URVhUX1RZUEVfMTYJKFBPTFlfVEVYVF9UWVBFIHwgVEVYVF9UWVBFXzE2X0JJVCkKKyNkZWZpbmUgSU1BR0VfVEVYVF9UWVBFXzE2CShJTUFHRV9URVhUX1RZUEUgfCBURVhUX1RZUEVfMTZfQklUKQorCisjZGVmaW5lIE1BQ0g2NF9OVU1fQ0xPQ0tTCTE2CisjZGVmaW5lIE1BQ0g2NF9OVU1fRlJFUVMJNTAKKworLyogUG93ZXIgTWFuYWdlbWVudCByZWdpc3RlciBjb25zdGFudHMgKExUICYgTFQgUHJvKSAqLworI2RlZmluZSBQV1JfTUdUX09OCQkweDAwMDAwMDAxCisjZGVmaW5lIFBXUl9NR1RfTU9ERV9NQVNLCTB4MDAwMDAwMDYKKyNkZWZpbmUgQVVUT19QV1JfVVAJCTB4MDAwMDAwMDgKKyNkZWZpbmUgVVNFX0YzMktIWgkJMHgwMDAwMDQwMAorI2RlZmluZSBUUklTVEFURV9NRU1fRU4JCTB4MDAwMDA4MDAKKyNkZWZpbmUgU0VMRl9SRUZSRVNICQkweDAwMDAwMDgwCisjZGVmaW5lIFBXUl9CTE9OCQkweDAyMDAwMDAwCisjZGVmaW5lIFNUQU5EQllfTk9XCQkweDEwMDAwMDAwCisjZGVmaW5lIFNVU1BFTkRfTk9XCQkweDIwMDAwMDAwCisjZGVmaW5lIFBXUl9NR1RfU1RBVFVTX01BU0sJMHhDMDAwMDAwMAorI2RlZmluZSBQV1JfTUdUX1NUQVRVU19TVVNQRU5ECTB4ODAwMDAwMDAKKworLyogUE0gTW9kZSBjb25zdGFudHMgICovCisjZGVmaW5lIFBXUl9NR1RfTU9ERV9QSU4JMHgwMDAwMDAwMAorI2RlZmluZSBQV1JfTUdUX01PREVfUkVHCTB4MDAwMDAwMDIKKyNkZWZpbmUgUFdSX01HVF9NT0RFX1RJTUVSCTB4MDAwMDAwMDQKKyNkZWZpbmUgUFdSX01HVF9NT0RFX1BDSQkweDAwMDAwMDA2CisKKy8qIExDRCByZWdpc3RlcnMgKExUIFBybykgKi8KKworLyogTENEIEluZGV4IHJlZ2lzdGVyICovCisjZGVmaW5lIExDRF9JTkRFWF9NQVNLCQkweDAwMDAwMDNGCisjZGVmaW5lIExDRF9ESVNQTEFZX0RJUwkJMHgwMDAwMDEwMAorI2RlZmluZSBMQ0RfU1JDX1NFTAkJMHgwMDAwMDIwMAorI2RlZmluZSBDUlRDMl9ESVNQTEFZX0RJUwkweDAwMDAwNDAwCisKKy8qIExDRCByZWdpc3RlciBpbmRpY2VzICovCisjZGVmaW5lIENPTkZJR19QQU5FTAkJMHgwMAorI2RlZmluZSBMQ0RfR0VOX0NOVEwJCTB4MDEKKyNkZWZpbmUgRFNUTl9DT05UUk9MCQkweDAyCisjZGVmaW5lIEhGQl9QSVRDSF9BRERSCQkweDAzCisjZGVmaW5lIEhPUlpfU1RSRVRDSElORwkJMHgwNAorI2RlZmluZSBWRVJUX1NUUkVUQ0hJTkcJCTB4MDUKKyNkZWZpbmUgRVhUX1ZFUlRfU1RSRVRDSAkweDA2CisjZGVmaW5lIExUX0dJTwkJCTB4MDcKKyNkZWZpbmUgUE9XRVJfTUFOQUdFTUVOVAkweDA4CisjZGVmaW5lIFpWR1BJTwkJCTB4MDkKKyNkZWZpbmUgSUNPTl9DTFIwCQkweDBBCisjZGVmaW5lIElDT05fQ0xSMQkJMHgwQgorI2RlZmluZSBJQ09OX09GRlNFVAkJMHgwQworI2RlZmluZSBJQ09OX0hPUlpfVkVSVF9QT1NOCTB4MEQKKyNkZWZpbmUgSUNPTl9IT1JaX1ZFUlRfT0ZGCTB4MEUKKyNkZWZpbmUgSUNPTjJfQ0xSMAkJMHgwRgorI2RlZmluZSBJQ09OMl9DTFIxCQkweDEwCisjZGVmaW5lIElDT04yX09GRlNFVAkJMHgxMQorI2RlZmluZSBJQ09OMl9IT1JaX1ZFUlRfUE9TTgkweDEyCisjZGVmaW5lIElDT04yX0hPUlpfVkVSVF9PRkYJMHgxMworI2RlZmluZSBMQ0RfTUlTQ19DTlRMCQkweDE0CisjZGVmaW5lIEFQQ19DTlRMCQkweDFDCisjZGVmaW5lIFBPV0VSX01BTkFHRU1FTlRfMgkweDFECisjZGVmaW5lIEFMUEhBX0JMRU5ESU5HCQkweDI1CisjZGVmaW5lIFBPUlRSQUlUX0dFTl9DTlRMCTB4MjYKKyNkZWZpbmUgQVBDX0NUUkxfSU8JCTB4MjcKKyNkZWZpbmUgVEVTVF9JTwkJCTB4MjgKKyNkZWZpbmUgVEVTVF9PVVRQVVRTCQkweDI5CisjZGVmaW5lIERQMV9NRU1fQUNDRVNTCQkweDJBCisjZGVmaW5lIERQMF9NRU1fQUNDRVNTCQkweDJCCisjZGVmaW5lIERQMF9ERUJVR19BCQkweDJDCisjZGVmaW5lIERQMF9ERUJVR19CCQkweDJECisjZGVmaW5lIERQMV9ERUJVR19BCQkweDJFCisjZGVmaW5lIERQMV9ERUJVR19CCQkweDJGCisjZGVmaW5lIERQQ1RSTF9ERUJVR19BCQkweDMwCisjZGVmaW5lIERQQ1RSTF9ERUJVR19CCQkweDMxCisjZGVmaW5lIE1FTUJMS19ERUJVRwkJMHgzMgorI2RlZmluZSBBUENfTFVUX0FCCQkweDMzCisjZGVmaW5lIEFQQ19MVVRfQ0QJCTB4MzQKKyNkZWZpbmUgQVBDX0xVVF9FRgkJMHgzNQorI2RlZmluZSBBUENfTFVUX0dICQkweDM2CisjZGVmaW5lIEFQQ19MVVRfSUoJCTB4MzcKKyNkZWZpbmUgQVBDX0xVVF9LTAkJMHgzOAorI2RlZmluZSBBUENfTFVUX01OCQkweDM5CisjZGVmaW5lIEFQQ19MVVRfT1AJCTB4M0EKKworLyogVmFsdWVzIGluIExDRF9HRU5fQ1RSTCAqLworI2RlZmluZSBDUlRfT04gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDF1bAorI2RlZmluZSBMQ0RfT04gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDJ1bAorI2RlZmluZSBIT1JaX0RJVkJZMl9FTiAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDR1bAorI2RlZmluZSBET05UX0RTX0lDT04gICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDh1bAorI2RlZmluZSBMT0NLXzhET1QgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTB1bAorI2RlZmluZSBJQ09OX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjB1bAorI2RlZmluZSBET05UX1NIQURPV19WUEFSICAgICAgICAgICAgICAgIDB4MDAwMDAwNDB1bAorI2RlZmluZSBWMkNMS19QTV9FTiAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODB1bAorI2RlZmluZSBSU1RfRk0gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDB1bAorI2RlZmluZSBESVNBQkxFX1BDTEtfUkVTRVQgICAgICAgICAgICAgIDB4MDAwMDAyMDB1bAkvKiBYQy9YTCAqLworI2RlZmluZSBESVNfSE9SX0NSVF9ESVZCWTIgICAgICAgICAgICAgIDB4MDAwMDA0MDB1bAorI2RlZmluZSBTQ0xLX1NFTCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDB1bAorI2RlZmluZSBTQ0xLX0RFTEFZICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGYwMDB1bAorI2RlZmluZSBUVkNMS19QTV9FTiAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDB1bAorI2RlZmluZSBWQ0xLX0RBQ19QTV9FTiAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDB1bAorI2RlZmluZSBWQ0xLX0xDRF9PRkYgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDB1bAorI2RlZmluZSBTRUxFQ1RfV0FJVF80TVMgICAgICAgICAgICAgICAgIDB4MDAwODAwMDB1bAorI2RlZmluZSBYVEFMSU5fUE1fRU4gICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDB1bAkvKiBYQy9YTCAqLworI2RlZmluZSBWMkNMS19EQUNfUE1fRU4gICAgICAgICAgICAgICAgIDB4MDAxMDAwMDB1bAorI2RlZmluZSBMVkRTX0VOICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDB1bAorI2RlZmluZSBMVkRTX1BMTF9FTiAgICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDB1bAorI2RlZmluZSBMVkRTX1BMTF9SRVNFVCAgICAgICAgICAgICAgICAgIDB4MDA4MDAwMDB1bAorI2RlZmluZSBMVkRTX1JFU0VSVkVEX0JJVFMgICAgICAgICAgICAgIDB4MDcwMDAwMDB1bAorI2RlZmluZSBDUlRDX1JXX1NFTEVDVCAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDB1bAkvKiBMVFBybyAqLworI2RlZmluZSBVU0VfU0hBRE9XRURfVkVORCAgICAgICAgICAgICAgIDB4MTAwMDAwMDB1bAorI2RlZmluZSBVU0VfU0hBRE9XRURfUk9XQ1VSICAgICAgICAgICAgIDB4MjAwMDAwMDB1bAorI2RlZmluZSBTSEFET1dfRU4gICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDB1bAorI2RlZmluZSBTSEFET1dfUldfRU4gICAgICAgICAgICAgICAgICAJMHg4MDAwMDAwMHVsCisKKyNkZWZpbmUgTENEX1NFVF9QUklNQVJZX01BU0sgICAgICAgICAgICAweDA3RkZGQkZCdWwKKworLyogVmFsdWVzIGluIEhPUlpfU1RSRVRDSElORyAqLworI2RlZmluZSBIT1JaX1NUUkVUQ0hfQkxFTkQJCTB4MDAwMDBmZmZ1bAorI2RlZmluZSBIT1JaX1NUUkVUQ0hfUkFUSU8JCTB4MDAwMGZmZmZ1bAorI2RlZmluZSBIT1JaX1NUUkVUQ0hfTE9PUAkJMHgwMDA3MDAwMHVsCisjZGVmaW5lIEhPUlpfU1RSRVRDSF9MT09QMDkJCTB4MDAwMDAwMDB1bAorI2RlZmluZSBIT1JaX1NUUkVUQ0hfTE9PUDExCQkweDAwMDEwMDAwdWwKKyNkZWZpbmUgSE9SWl9TVFJFVENIX0xPT1AxMgkJMHgwMDAyMDAwMHVsCisjZGVmaW5lIEhPUlpfU1RSRVRDSF9MT09QMTQJCTB4MDAwMzAwMDB1bAorI2RlZmluZSBIT1JaX1NUUkVUQ0hfTE9PUDE1CQkweDAwMDQwMDAwdWwKKy8qCT8JCQkJMHgwMDA1MDAwMHVsICovCisvKgk/CQkJCTB4MDAwNjAwMDB1bCAqLworLyoJPwkJCQkweDAwMDcwMDAwdWwgKi8KKy8qCT8JCQkJMHgwMDA4MDAwMHVsICovCisjZGVmaW5lIEhPUlpfUEFORUxfU0laRQkJCTB4MGZmMDAwMDB1bAkvKiBYQy9YTCAqLworLyoJPwkJCQkweDEwMDAwMDAwdWwgKi8KKyNkZWZpbmUgQVVUT19IT1JaX1JBVElPCQkJMHgyMDAwMDAwMHVsCS8qIFhDL1hMICovCisjZGVmaW5lIEhPUlpfU1RSRVRDSF9NT0RFCQkweDQwMDAwMDAwdWwKKyNkZWZpbmUgSE9SWl9TVFJFVENIX0VOCQkJMHg4MDAwMDAwMHVsCisKKy8qIFZhbHVlcyBpbiBWRVJUX1NUUkVUQ0hJTkcgKi8KKyNkZWZpbmUgVkVSVF9TVFJFVENIX1JBVElPMAkJMHgwMDAwMDNmZnVsCisjZGVmaW5lIFZFUlRfU1RSRVRDSF9SQVRJTzEJCTB4MDAwZmZjMDB1bAorI2RlZmluZSBWRVJUX1NUUkVUQ0hfUkFUSU8yCQkweDNmZjAwMDAwdWwKKyNkZWZpbmUgVkVSVF9TVFJFVENIX1VTRTAJCTB4NDAwMDAwMDB1bAorI2RlZmluZSBWRVJUX1NUUkVUQ0hfRU4JCQkweDgwMDAwMDAwdWwKKworLyogVmFsdWVzIGluIEVYVF9WRVJUX1NUUkVUQ0ggKi8KKyNkZWZpbmUgVkVSVF9TVFJFVENIX1JBVElPMwkJMHgwMDAwMDNmZnVsCisjZGVmaW5lIEZPUkNFX0RBQ19EQVRBCQkJMHgwMDAwMDBmZnVsCisjZGVmaW5lIEZPUkNFX0RBQ19EQVRBX1NFTAkJMHgwMDAwMDMwMHVsCisjZGVmaW5lIFZFUlRfU1RSRVRDSF9NT0RFCQkweDAwMDAwNDAwdWwKKyNkZWZpbmUgVkVSVF9QQU5FTF9TSVpFCQkJMHgwMDNmZjgwMHVsCisjZGVmaW5lIEFVVE9fVkVSVF9SQVRJTwkJCTB4MDA0MDAwMDB1bAorI2RlZmluZSBVU0VfQVVUT19GUF9QT1MJCQkweDAwODAwMDAwdWwKKyNkZWZpbmUgVVNFX0FVVE9fTENEX1ZTWU5DCQkweDAxMDAwMDAwdWwKKy8qCT8JCQkJMHhmZTAwMDAwMHVsICovCisKKy8qIFZhbHVlcyBpbiBMQ0RfTUlTQ19DTlRMICovCisjZGVmaW5lIEJJQVNfTU9EX0xFVkVMX01BU0sJCTB4MDAwMGZmMDAKKyNkZWZpbmUgQklBU19NT0RfTEVWRUxfU0hJRlQJCTgKKyNkZWZpbmUgQkxNT0RfRU4JCQkweDAwMDEwMDAwCisjZGVmaW5lIEJJQVNNT0RfRU4JCQkweDAwMDIwMDAwCisKKyNlbmRpZgkJCQkvKiBSRUdNQUNINjRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS92aWRlby9tYXhpbmVmYi5oIGIvaW5jbHVkZS92aWRlby9tYXhpbmVmYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhZWI0YWMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3ZpZGVvL21heGluZWZiLmgKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqICAgICAgbGludXgvZHJpdmVycy92aWRlby9tYXhpbmVmYi5oCisgKgorICogICAgICBERUNzdGF0aW9uIDUwMDAveHggb25ib2FyZCBmcmFtZWJ1ZmZlciBzdXBwb3J0LCBDb3B5cmlnaHQgKEMpIDE5OTkgYnkKKyAqICAgICAgTWljaGFlbCBFbmdlbCA8ZW5nZWxAdW5peC1hZy5vcmc+IGFuZCBLYXJzdGVuIE1lcmtlciA8bWVya2VyQGd1dWcuZGU+CisgKiAgICAgIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwKKyAqICAgICAgUHVibGljIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcworICogICAgICBhcmNoaXZlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KKworLyoKKyAqIElNUzMzMiB2aWRlbyBjb250cm9sbGVyIHJlZ2lzdGVyIGJhc2UgYWRkcmVzcworICovCisjZGVmaW5lIE1BWElORUZCX0lNUzMzMl9BRERSRVNTCQlLU0VHMUFERFIoMHgxYzE0MDAwMCkKKworLyoKKyAqIEJlZ2luIG9mIERFQ3N0YXRpb24gNTAwMC94eCBvbmJvYXJkIGZyYW1lYnVmZmVyIG1lbW9yeSwgZGVmYXVsdCByZXNvbHV0aW9uCisgKiBpcyAxMDI0eDc2OHg4CisgKi8KKyNkZWZpbmUgRFM1MDAwX3h4X09OQk9BUkRfRkJNRU1fU1RBUlQJS1NFRzFBRERSKDB4MGEwMDAwMDApCisKKy8qCisgKiAgICAgIFRoZSBJTVMgMzMyIHZpZGVvIGNvbnRyb2xsZXIgdXNlZCBpbiB0aGUgREVDc3RhdGlvbiA1MDAwL3h4IHNlcmllcworICogICAgICB1c2VzIDMyIGJpdHMgd2lkZSByZWdpc3RlcnM7IHRoZSBmb2xsb3dpbmcgZGVmaW5lcyBkZWNsYXJlIHRoZQorICogICAgICByZWdpc3RlciBudW1iZXJzLCB0byBnZXQgdGhlIHJlYWwgb2Zmc2V0LCB0aGVzZSBoYXZlIHRvIGJlIG11bHRpcGxpZWQKKyAqICAgICAgYnkgZm91ci4KKyAqLworCisjZGVmaW5lIElNUzMzMl9SRUdfQ1VSU09SX1JBTSAgICAgICAgICAgMHgyMDAJLyogaGFyZHdhcmUgY3Vyc29yIGJpdG1hcCAqLworCisvKgorICogVGhlIGNvbG9yIHBhbGV0dGUgZW50cmllcyBoYXZlIHRoZSBmb3JtIDB4MDBCQkdHUlIKKyAqLworI2RlZmluZSBJTVMzMzJfUkVHX0NPTE9SX1BBTEVUVEUgICAgICAgIDB4MTAwCS8qIGNvbG9yIHBhbGV0dGUsIDI1NiBlbnRyaWVzICovCisjZGVmaW5lIElNUzMzMl9SRUdfQ1VSU09SX0NPTE9SX1BBTEVUVEUJMHgwYTEJLyogY3Vyc29yIGNvbG9yIHBhbGV0dGUsICovCisJCQkJCQkvKiAzIGVudHJpZXMgICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdmlkZW8vbmVvbWFnaWMuaCBiL2luY2x1ZGUvdmlkZW8vbmVvbWFnaWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGFlZTcwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS92aWRlby9uZW9tYWdpYy5oCkBAIC0wLDAgKzEsMjA3IEBACisvKgorICogbGludXgvaW5jbHVkZS92aWRlby9uZW9fcmVnLmggLS0gTmVvTWFnaWMgRnJhbWVidWZmZXIgRHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAxICBEZW5pcyBPbGl2ZXIgS3JvcHAgPGRva0Bjb252ZXJnZW5jZS5kZT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzCisgKiBhcmNoaXZlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2RlZmluZSBORU9fQlMwX0JMVF9CVVNZICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIE5FT19CUzBfRklGT19BVkFJTCAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgTkVPX0JTMF9GSUZPX1BFTkQgICAgICAgMHgwMDAwMDAwNAorCisjZGVmaW5lIE5FT19CQzBfRFNUX1lfREVDICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgTkVPX0JDMF9YX0RFQyAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBORU9fQkMwX1NSQ19UUkFOUyAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIE5FT19CQzBfU1JDX0lTX0ZHICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgTkVPX0JDMF9TUkNfWV9ERUMgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBORU9fQkMwX0ZJTExfUEFUICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIE5FT19CQzBfU1JDX01PTk8gICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgTkVPX0JDMF9TWVNfVE9fVklEICAgICAgMHgwMDAwMDA4MAorCisjZGVmaW5lIE5FT19CQzFfREVQVEg4ICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgTkVPX0JDMV9ERVBUSDE2ICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBORU9fQkMxX1hfMzIwICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIE5FT19CQzFfWF82NDAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgTkVPX0JDMV9YXzgwMCAgICAgICAgICAgMHgwMDAwMGMwMAorI2RlZmluZSBORU9fQkMxX1hfMTAyNCAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIE5FT19CQzFfWF8xMTUyICAgICAgICAgIDB4MDAwMDE0MDAKKyNkZWZpbmUgTkVPX0JDMV9YXzEyODAgICAgICAgICAgMHgwMDAwMTgwMAorI2RlZmluZSBORU9fQkMxX1hfMTYwMCAgICAgICAgICAweDAwMDAxYzAwCisjZGVmaW5lIE5FT19CQzFfRFNUX1RSQU5TICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgTkVPX0JDMV9NU1RSX0JMVCAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBORU9fQkMxX0ZJTFRFUl9aICAgICAgICAweDAwMDA4MDAwCisKKyNkZWZpbmUgTkVPX0JDMl9XUl9UUl9EU1QgICAgICAgMHgwMDgwMDAwMAorCisjZGVmaW5lIE5FT19CQzNfU1JDX1hZX0FERFIgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgTkVPX0JDM19EU1RfWFlfQUREUiAgICAgMHgwMjAwMDAwMAorI2RlZmluZSBORU9fQkMzX0NMSVBfT04gICAgICAgICAweDA0MDAwMDAwCisjZGVmaW5lIE5FT19CQzNfRklGT19FTiAgICAgICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgTkVPX0JDM19CTFRfT05fQUREUiAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBORU9fQkMzX1NLSVBfTUFQUElORyAgICAweDgwMDAwMDAwCisKKyNkZWZpbmUgTkVPX01PREUxX0RFUFRIOCAgICAgICAgMHgwMTAwCisjZGVmaW5lIE5FT19NT0RFMV9ERVBUSDE2ICAgICAgIDB4MDIwMAorI2RlZmluZSBORU9fTU9ERTFfREVQVEgyNCAgICAgICAweDAzMDAKKyNkZWZpbmUgTkVPX01PREUxX1hfMzIwICAgICAgICAgMHgwNDAwCisjZGVmaW5lIE5FT19NT0RFMV9YXzY0MCAgICAgICAgIDB4MDgwMAorI2RlZmluZSBORU9fTU9ERTFfWF84MDAgICAgICAgICAweDBjMDAKKyNkZWZpbmUgTkVPX01PREUxX1hfMTAyNCAgICAgICAgMHgxMDAwCisjZGVmaW5lIE5FT19NT0RFMV9YXzExNTIgICAgICAgIDB4MTQwMAorI2RlZmluZSBORU9fTU9ERTFfWF8xMjgwICAgICAgICAweDE4MDAKKyNkZWZpbmUgTkVPX01PREUxX1hfMTYwMCAgICAgICAgMHgxYzAwCisjZGVmaW5lIE5FT19NT0RFMV9CTFRfT05fQUREUiAgIDB4MjAwMAorCisvKiBUaGVzZSBhcmUgb2Zmc2V0ZWQgaW4gTU1JTyBzcGFjZSBieSBwYXItPkN1cnNvck9mZiAqLworI2RlZmluZSBORU9SRUdfQ1VSU0NOVEwJCTB4MDAKKyNkZWZpbmUgTkVPUkVHX0NVUlNYCQkweDA0CisjZGVmaW5lIE5FT1JFR19DVVJTWQkJMHgwOAorI2RlZmluZSBORU9SRUdfQ1VSU0JHQ09MT1IJMHgwQworI2RlZmluZSBORU9SRUdfQ1VSU0ZHQ09MT1IJMHgxMAorI2RlZmluZSBORU9SRUdfQ1VSU01FTVBPUwkweDE0CisKKyNkZWZpbmUgTkVPX0NVUlNfRElTQUJMRQkweDAwMDAwMDAwCisjZGVmaW5lIE5FT19DVVJTX0VOQUJMRQkJMHgwMDAwMDAwMQorI2RlZmluZSBORU9fSUNPTjY0X0VOQUJMRQkweDAwMDAwMDA4CisjZGVmaW5lIE5FT19JQ09OMTI4X0VOQUJMRQkweDAwMDAwMDBDCisjZGVmaW5lIE5FT19JQ09OX0JMQU5LCQkweDAwMDAwMDEwCisKKyNkZWZpbmUgTkVPX0dSMDFfU1VQUFJFU1NfVlNZTkMgMHgxMAorI2RlZmluZSBORU9fR1IwMV9TVVBQUkVTU19IU1lOQyAweDIwCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpZmRlZiBORU9GQl9ERUJVRworIyBkZWZpbmUgREJHKHgpCQlwcmludGsgKEtFUk5fREVCVUcgIm5lb2ZiOiAlc1xuIiwgKHgpKTsKKyNlbHNlCisjIGRlZmluZSBEQkcoeCkKKyNlbmRpZgorCisjZGVmaW5lIFBDSV9DSElQX05NMjA3MCAweDAwMDEKKyNkZWZpbmUgUENJX0NISVBfTk0yMDkwIDB4MDAwMgorI2RlZmluZSBQQ0lfQ0hJUF9OTTIwOTMgMHgwMDAzCisjZGVmaW5lIFBDSV9DSElQX05NMjA5NyAweDAwODMKKyNkZWZpbmUgUENJX0NISVBfTk0yMTYwIDB4MDAwNAorI2RlZmluZSBQQ0lfQ0hJUF9OTTIyMDAgMHgwMDA1CisjZGVmaW5lIFBDSV9DSElQX05NMjIzMCAweDAwMjUKKyNkZWZpbmUgUENJX0NISVBfTk0yMzYwIDB4MDAwNgorI2RlZmluZSBQQ0lfQ0hJUF9OTTIzODAgMHgwMDE2CisKKworc3RydWN0IHh0aW1pbmdzIHsKKwl1bnNpZ25lZCBpbnQgcGl4Y2xvY2s7CisJdW5zaWduZWQgaW50IEhEaXNwbGF5OworCXVuc2lnbmVkIGludCBIU3luY1N0YXJ0OworCXVuc2lnbmVkIGludCBIU3luY0VuZDsKKwl1bnNpZ25lZCBpbnQgSFRvdGFsOworCXVuc2lnbmVkIGludCBWRGlzcGxheTsKKwl1bnNpZ25lZCBpbnQgVlN5bmNTdGFydDsKKwl1bnNpZ25lZCBpbnQgVlN5bmNFbmQ7CisJdW5zaWduZWQgaW50IFZUb3RhbDsKKwl1bnNpZ25lZCBpbnQgc3luYzsKKwlpbnQgZGJsc2NhbjsKKwlpbnQgaW50ZXJsYWNlZDsKK307CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3R5cGVkZWYgdm9sYXRpbGUgc3RydWN0IHsKKwlfX3UzMiBibHRTdGF0OworCV9fdTMyIGJsdENudGw7CisJX191MzIgeHBDb2xvcjsKKwlfX3UzMiBmZ0NvbG9yOworCV9fdTMyIGJnQ29sb3I7CisJX191MzIgcGl0Y2g7CisJX191MzIgY2xpcExUOworCV9fdTMyIGNsaXBSQjsKKwlfX3UzMiBzcmNCaXRPZmZzZXQ7CisJX191MzIgc3JjU3RhcnQ7CisJX191MzIgcmVzZXJ2ZWQwOworCV9fdTMyIGRzdFN0YXJ0OworCV9fdTMyIHh5RXh0OworCisJX191MzIgcmVzZXJ2ZWQxWzE5XTsKKworCV9fdTMyIHBhZ2VDbnRsOworCV9fdTMyIHBhZ2VCYXNlOworCV9fdTMyIHBvc3RCYXNlOworCV9fdTMyIHBvc3RQdHI7CisJX191MzIgZGF0YVB0cjsKK30gTmVvMjIwMDsKKworI2RlZmluZSBNTUlPX1NJWkUgMHgyMDAwMDAKKworI2RlZmluZSBORU9fRVhUX0NSX01BWCAweDg1CisjZGVmaW5lIE5FT19FWFRfR1JfTUFYIDB4QzcKKworc3RydWN0IG5lb2ZiX3BhciB7CisJc3RydWN0IHZnYXN0YXRlIHN0YXRlOworCWF0b21pY190IHJlZl9jb3VudDsKKworCXVuc2lnbmVkIGNoYXIgTWlzY091dFJlZzsJLyogTWlzYyAqLworCXVuc2lnbmVkIGNoYXIgQ1JUQ1syNV07CQkvKiBDcnRjIENvbnRyb2xsZXIgKi8KKwl1bnNpZ25lZCBjaGFyIFNlcXVlbmNlcls1XTsJLyogVmlkZW8gU2VxdWVuY2VyICovCisJdW5zaWduZWQgY2hhciBHcmFwaGljc1s5XTsJLyogVmlkZW8gR3JhcGhpY3MgKi8KKwl1bnNpZ25lZCBjaGFyIEF0dHJpYnV0ZVsyMV07CS8qIFZpZGVvIEF0cmlidXRlICovCisKKwl1bnNpZ25lZCBjaGFyIEdlbmVyYWxMb2NrUmVnOworCXVuc2lnbmVkIGNoYXIgRXh0Q1JURGlzcEFkZHI7CisJdW5zaWduZWQgY2hhciBFeHRDUlRPZmZzZXQ7CisJdW5zaWduZWQgY2hhciBTeXNJZmFjZUNudGwxOworCXVuc2lnbmVkIGNoYXIgU3lzSWZhY2VDbnRsMjsKKwl1bnNpZ25lZCBjaGFyIEV4dENvbG9yTW9kZVNlbGVjdDsKKwl1bnNpZ25lZCBjaGFyIGJpb3NNb2RlOworCisJdW5zaWduZWQgY2hhciBQYW5lbERpc3BDbnRsUmVnMTsKKwl1bnNpZ25lZCBjaGFyIFBhbmVsRGlzcENudGxSZWcyOworCXVuc2lnbmVkIGNoYXIgUGFuZWxEaXNwQ250bFJlZzM7CisJdW5zaWduZWQgY2hhciBQYW5lbFZlcnRDZW50ZXJSZWcxOworCXVuc2lnbmVkIGNoYXIgUGFuZWxWZXJ0Q2VudGVyUmVnMjsKKwl1bnNpZ25lZCBjaGFyIFBhbmVsVmVydENlbnRlclJlZzM7CisJdW5zaWduZWQgY2hhciBQYW5lbFZlcnRDZW50ZXJSZWc0OworCXVuc2lnbmVkIGNoYXIgUGFuZWxWZXJ0Q2VudGVyUmVnNTsKKwl1bnNpZ25lZCBjaGFyIFBhbmVsSG9yaXpDZW50ZXJSZWcxOworCXVuc2lnbmVkIGNoYXIgUGFuZWxIb3JpekNlbnRlclJlZzI7CisJdW5zaWduZWQgY2hhciBQYW5lbEhvcml6Q2VudGVyUmVnMzsKKwl1bnNpZ25lZCBjaGFyIFBhbmVsSG9yaXpDZW50ZXJSZWc0OworCXVuc2lnbmVkIGNoYXIgUGFuZWxIb3JpekNlbnRlclJlZzU7CisKKwlpbnQgUHJvZ3JhbVZDTEs7CisJdW5zaWduZWQgY2hhciBWQ0xLM051bWVyYXRvckxvdzsKKwl1bnNpZ25lZCBjaGFyIFZDTEszTnVtZXJhdG9ySGlnaDsKKwl1bnNpZ25lZCBjaGFyIFZDTEszRGVub21pbmF0b3I7CisJdW5zaWduZWQgY2hhciBWZXJ0aWNhbEV4dDsKKworI2lmZGVmIENPTkZJR19NVFJSCisJaW50IG10cnI7CisjZW5kaWYKKwl1OCBfX2lvbWVtICptbWlvX3ZiYXNlOworCXU4IGN1cnNvck9mZjsKKwl1OCAqY3Vyc29yUGFkOwkJLyogTXVzdCBkaWUgISEgKi8KKworCU5lbzIyMDAgX19pb21lbSAqbmVvMjIwMDsKKworCS8qIFBhbmVscyBzaXplICovCisJaW50IE5lb1BhbmVsV2lkdGg7CisJaW50IE5lb1BhbmVsSGVpZ2h0OworCisJaW50IG1heENsb2NrOworCisJaW50IHBjaV9idXJzdDsKKwlpbnQgbGNkX3N0cmV0Y2g7CisJaW50IGludGVybmFsX2Rpc3BsYXk7CisJaW50IGV4dGVybmFsX2Rpc3BsYXk7CisJaW50IGxpYnJldHRvOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgeworCWludCB4X3JlczsKKwlpbnQgeV9yZXM7CisJaW50IG1vZGU7Cit9IGJpb3NNb2RlOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdmlkZW8vbmV3cG9ydC5oIGIvaW5jbHVkZS92aWRlby9uZXdwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODEyZGFjNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvdmlkZW8vbmV3cG9ydC5oCkBAIC0wLDAgKzEsNTgyIEBACisvKiAkSWQ6IG5ld3BvcnQuaCx2IDEuNSAxOTk5LzA4LzA0IDA2OjAxOjUxIHVsZmMgRXhwICQKKyAqCisgKiBuZXdwb3J0Lmg6IERlZmluZXMgYW5kIHJlZ2lzdGVyIGxheW91dCBmb3IgTkVXUE9SVCBncmFwaGljcworICogICAgICAgICAgICBoYXJkd2FyZS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYgRGF2aWQgUy4gTWlsbGVyIChkbUBlbmdyLnNnaS5jb20pCisgKiAKKyAqIFVsZiBDYXJsc3NvbiAtIENvbXBhYmlsaXR5IHdpdGggdGhlIElSSVggc3RydWN0dXJlcyBhZGRlZAorICovCisKKyNpZm5kZWYgX1NHSV9ORVdQT1JUX0gKKyNkZWZpbmUgX1NHSV9ORVdQT1JUX0gKKworCit0eXBlZGVmIHZvbGF0aWxlIHVuc2lnbmVkIGludCBucGlyZWdfdDsKKwordW5pb24gbnBmbG9hdCB7CisJdm9sYXRpbGUgZmxvYXQgZmx0OworCW5waXJlZ190ICAgICAgIHdvcmQ7Cit9OworCit0eXBlZGVmIHVuaW9uIG5wZmxvYXQgbnBmcmVnX3Q7CisKK3VuaW9uIG5wX2RjYiB7CisJbnBpcmVnX3QgYnl3b3JkOworCXN0cnVjdCB7IHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IHMwLCBzMTsgfSBieXNob3J0OworCXN0cnVjdCB7IHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgYjAsIGIxLCBiMiwgYjM7IH0gYnlieXRlczsKK307CisKK3N0cnVjdCBuZXdwb3J0X3JleHJlZ3MgeworCW5waXJlZ190IGRyYXdtb2RlMTsgICAgICAvKiBHTCBleHRyYSBtb2RlIGJpdHMgKi8KKwkKKyNkZWZpbmUgRE0xX1BMQU5FUyAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgICAgRE0xX05PUExBTkVTICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgICAgRE0xX1JHQlBMQU5FUyAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgICAgRE0xX1JHQkFQTEFORVMgIDB4MDAwMDAwMDIKKyNkZWZpbmUgICAgRE0xX09MQVlQTEFORVMgIDB4MDAwMDAwMDQKKyNkZWZpbmUgICAgRE0xX1BVUFBMQU5FUyAgIDB4MDAwMDAwMDUKKyNkZWZpbmUgICAgRE0xX0NJRFBMQU5FUyAgIDB4MDAwMDAwMDYKKwkKKyNkZWZpbmUgTlBPUlRfRE1PREUxX0RETUFTSyAgICAgIDB4MDAwMDAwMTgKKyNkZWZpbmUgTlBPUlRfRE1PREUxX0RENCAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgTlBPUlRfRE1PREUxX0REOCAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgTlBPUlRfRE1PREUxX0REMTIgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgTlBPUlRfRE1PREUxX0REMjQgICAgICAgIDB4MDAwMDAwMTgKKyNkZWZpbmUgTlBPUlRfRE1PREUxX0RTUkMgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgTlBPUlRfRE1PREUxX1lGTElQICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgTlBPUlRfRE1PREUxX1JXUENLRCAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgTlBPUlRfRE1PREUxX0hETUFTSyAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgTlBPUlRfRE1PREUxX0hENCAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgTlBPUlRfRE1PREUxX0hEOCAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgTlBPUlRfRE1PREUxX0hEMTIgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgTlBPUlRfRE1PREUxX0hEMzIgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgTlBPUlRfRE1PREUxX1JXREJMICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgTlBPUlRfRE1PREUxX0VTV0FQICAgICAgIDB4MDAwMDA4MDAgLyogRW5kaWFuIHN3YXAgKi8KKyNkZWZpbmUgTlBPUlRfRE1PREUxX0NDTUFTSyAgICAgIDB4MDAwMDcwMDAKKyNkZWZpbmUgTlBPUlRfRE1PREUxX0NDTFQgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgTlBPUlRfRE1PREUxX0NDRVEgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgTlBPUlRfRE1PREUxX0NDR1QgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgTlBPUlRfRE1PREUxX1JHQk1EICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgTlBPUlRfRE1PREUxX0RFTkFCICAgICAgIDB4MDAwMTAwMDAgLyogRGl0aGVyIGVuYWJsZSAqLworI2RlZmluZSBOUE9SVF9ETU9ERTFfRkNMUiAgICAgICAgMHgwMDAyMDAwMCAvKiBGYXN0IGNsZWFyICovCisjZGVmaW5lIE5QT1JUX0RNT0RFMV9CRU5BQiAgICAgICAweDAwMDQwMDAwIC8qIEJsZW5kIGVuYWJsZSAqLworI2RlZmluZSBOUE9SVF9ETU9ERTFfU0ZNQVNLICAgICAgMHgwMDM4MDAwMAorI2RlZmluZSBOUE9SVF9ETU9ERTFfU0YwICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBOUE9SVF9ETU9ERTFfU0YxICAgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBOUE9SVF9ETU9ERTFfU0ZEQyAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBOUE9SVF9ETU9ERTFfU0ZNREMgICAgICAgMHgwMDE4MDAwMAorI2RlZmluZSBOUE9SVF9ETU9ERTFfU0ZTQSAgICAgICAgMHgwMDIwMDAwMAorI2RlZmluZSBOUE9SVF9ETU9ERTFfU0ZNU0EgICAgICAgMHgwMDI4MDAwMAorI2RlZmluZSBOUE9SVF9ETU9ERTFfREZNQVNLICAgICAgMHgwMWMwMDAwMAorI2RlZmluZSBOUE9SVF9ETU9ERTFfREYwICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBOUE9SVF9ETU9ERTFfREYxICAgICAgICAgMHgwMDQwMDAwMAorI2RlZmluZSBOUE9SVF9ETU9ERTFfREZTQyAgICAgICAgMHgwMDgwMDAwMAorI2RlZmluZSBOUE9SVF9ETU9ERTFfREZNU0MgICAgICAgMHgwMGMwMDAwMAorI2RlZmluZSBOUE9SVF9ETU9ERTFfREZTQSAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBOUE9SVF9ETU9ERTFfREZNU0EgICAgICAgMHgwMTQwMDAwMAorI2RlZmluZSBOUE9SVF9ETU9ERTFfQkJFTkFCICAgICAgMHgwMjAwMDAwMCAvKiBCYWNrIGJsZW5kIGVuYWJsZSAqLworI2RlZmluZSBOUE9SVF9ETU9ERTFfUEZFTkFCICAgICAgMHgwNDAwMDAwMCAvKiBQcmUtZmV0Y2ggZW5hYmxlICovCisjZGVmaW5lIE5QT1JUX0RNT0RFMV9BQkxFTkQgICAgICAweDA4MDAwMDAwIC8qIEFscGhhIGJsZW5kICovCisjZGVmaW5lIE5QT1JUX0RNT0RFMV9MT01BU0sgICAgICAweGYwMDAwMDAwCisjZGVmaW5lIE5QT1JUX0RNT0RFMV9MT1pFUk8gICAgICAweDAwMDAwMDAwCisjZGVmaW5lIE5QT1JUX0RNT0RFMV9MT0FORCAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIE5QT1JUX0RNT0RFMV9MT0FORFIgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIE5QT1JUX0RNT0RFMV9MT1NSQyAgICAgICAweDMwMDAwMDAwCisjZGVmaW5lIE5QT1JUX0RNT0RFMV9MT0FOREkgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIE5QT1JUX0RNT0RFMV9MT0RTVCAgICAgICAweDUwMDAwMDAwCisjZGVmaW5lIE5QT1JUX0RNT0RFMV9MT1hPUiAgICAgICAweDYwMDAwMDAwCisjZGVmaW5lIE5QT1JUX0RNT0RFMV9MT09SICAgICAgICAweDcwMDAwMDAwCisjZGVmaW5lIE5QT1JUX0RNT0RFMV9MT05PUiAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIE5QT1JUX0RNT0RFMV9MT1hOT1IgICAgICAweDkwMDAwMDAwCisjZGVmaW5lIE5QT1JUX0RNT0RFMV9MT05EU1QgICAgICAweGEwMDAwMDAwCisjZGVmaW5lIE5QT1JUX0RNT0RFMV9MT09SUiAgICAgICAweGIwMDAwMDAwCisjZGVmaW5lIE5QT1JUX0RNT0RFMV9MT05TUkMgICAgICAweGMwMDAwMDAwCisjZGVmaW5lIE5QT1JUX0RNT0RFMV9MT09SSSAgICAgICAweGQwMDAwMDAwCisjZGVmaW5lIE5QT1JUX0RNT0RFMV9MT05BTkQgICAgICAweGUwMDAwMDAwCisjZGVmaW5lIE5QT1JUX0RNT0RFMV9MT09ORSAgICAgICAweGYwMDAwMDAwCisKKwlucGlyZWdfdCBkcmF3bW9kZTA7ICAgICAgLyogUkVYIGNvbW1hbmQgcmVnaXN0ZXIgKi8KKworCS8qIFRoZXNlIGJpdHMgZGVmaW5lIHRoZSBncmFwaGljcyBvcGNvZGUgYmVpbmcgcGVyZm9ybWVkLiAqLworI2RlZmluZSBOUE9SVF9ETU9ERTBfT1BNQVNLICAgMHgwMDAwMDAwMyAvKiBPcGNvZGUgbWFzayAqLworI2RlZmluZSBOUE9SVF9ETU9ERTBfTk9QICAgICAgMHgwMDAwMDAwMCAvKiBObyBvcGVyYXRpb24gKi8KKyNkZWZpbmUgTlBPUlRfRE1PREUwX1JEICAgICAgIDB4MDAwMDAwMDEgLyogUmVhZCBvcGVyYXRpb24gKi8KKyNkZWZpbmUgTlBPUlRfRE1PREUwX0RSQVcgICAgIDB4MDAwMDAwMDIgLyogRHJhdyBvcGVyYXRpb24gKi8KKyNkZWZpbmUgTlBPUlRfRE1PREUwX1MyUyAgICAgIDB4MDAwMDAwMDMgLyogU2NyZWVuIHRvIHNjcmVlbiBvcGVyYXRpb24gKi8KKworCS8qIFRoZSBmb2xsb3dpbmcgZGVjaWRlIHdoYXQgYWRkcmVzc2luZyBtb2RlKHMpIGFyZSB0byBiZSB1c2VkICovCisjZGVmaW5lIE5QT1JUX0RNT0RFMF9BTU1BU0sgICAweDAwMDAwMDFjIC8qIEFkZHJlc3MgbW9kZSBtYXNrICovCisjZGVmaW5lIE5QT1JUX0RNT0RFMF9TUEFOICAgICAweDAwMDAwMDAwIC8qIFNwYW5uaW5nIGFkZHJlc3MgbW9kZSAqLworI2RlZmluZSBOUE9SVF9ETU9ERTBfQkxPQ0sgICAgMHgwMDAwMDAwNCAvKiBCbG9jayBhZGRyZXNzIG1vZGUgKi8KKyNkZWZpbmUgTlBPUlRfRE1PREUwX0lMSU5FICAgIDB4MDAwMDAwMDggLyogSWxpbmUgYWRkcmVzcyBtb2RlICovCisjZGVmaW5lIE5QT1JUX0RNT0RFMF9GTElORSAgICAweDAwMDAwMDBjIC8qIEZsaW5lIGFkZHJlc3MgbW9kZSAqLworI2RlZmluZSBOUE9SVF9ETU9ERTBfQUxJTkUgICAgMHgwMDAwMDAxMCAvKiBBbGluZSBhZGRyZXNzIG1vZGUgKi8KKyNkZWZpbmUgTlBPUlRfRE1PREUwX1RMSU5FICAgIDB4MDAwMDAwMTQgLyogVGxpbmUgYWRkcmVzcyBtb2RlICovCisjZGVmaW5lIE5QT1JUX0RNT0RFMF9CTElORSAgICAweDAwMDAwMDE4IC8qIEJsaW5lIGFkZHJlc3MgbW9kZSAqLworCisJLyogQW5kIG5vdyBzb21lIG1pc2MuIG9wZXJhdGlvbiBjb250cm9sIGJpdHMuICovCisjZGVmaW5lIE5QT1JUX0RNT0RFMF9ET1NFVFVQICAweDAwMDAwMDIwCisjZGVmaW5lIE5QT1JUX0RNT0RFMF9DSE9TVCAgICAweDAwMDAwMDQwCisjZGVmaW5lIE5QT1JUX0RNT0RFMF9BSE9TVCAgICAweDAwMDAwMDgwCisjZGVmaW5lIE5QT1JUX0RNT0RFMF9TVE9QWCAgICAweDAwMDAwMTAwCisjZGVmaW5lIE5QT1JUX0RNT0RFMF9TVE9QWSAgICAweDAwMDAwMjAwCisjZGVmaW5lIE5QT1JUX0RNT0RFMF9TSzFTVCAgICAweDAwMDAwNDAwCisjZGVmaW5lIE5QT1JUX0RNT0RFMF9TS0xTVCAgICAweDAwMDAwODAwCisjZGVmaW5lIE5QT1JUX0RNT0RFMF9aUEVOQUIgICAweDAwMDAxMDAwCisjZGVmaW5lIE5QT1JUX0RNT0RFMF9MSVNQRU5BQiAweDAwMDAyMDAwCisjZGVmaW5lIE5QT1JUX0RNT0RFMF9MSVNMU1QgICAweDAwMDA0MDAwCisjZGVmaW5lIE5QT1JUX0RNT0RFMF9MMzIgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIE5QT1JUX0RNT0RFMF9aT1BRICAgICAweDAwMDEwMDAwCisjZGVmaW5lIE5QT1JUX0RNT0RFMF9MSVNPUFEgICAweDAwMDIwMDAwCisjZGVmaW5lIE5QT1JUX0RNT0RFMF9TSEFERSAgICAweDAwMDQwMDAwCisjZGVmaW5lIE5QT1JUX0RNT0RFMF9MUk9OTFkgICAweDAwMDgwMDAwCisjZGVmaW5lIE5QT1JUX0RNT0RFMF9YWU9GRiAgICAweDAwMTAwMDAwCisjZGVmaW5lIE5QT1JUX0RNT0RFMF9DTEFNUCAgICAweDAwMjAwMDAwCisjZGVmaW5lIE5QT1JUX0RNT0RFMF9FTkRQRiAgICAweDAwNDAwMDAwCisjZGVmaW5lIE5QT1JUX0RNT0RFMF9ZU1RSICAgICAweDAwODAwMDAwCisKKwlucGlyZWdfdCBsc21vZGU7ICAgICAgLyogTW9kZSBmb3IgbGluZSBzdGlwcGxlIG9wcyAqLworCW5waXJlZ190IGxzcGF0dGVybjsgICAvKiBQYXR0ZXJuIGZvciBsaW5lIHN0aXBwbGUgb3BzICovCisJbnBpcmVnX3QgbHNwYXRzYXZlOyAgIC8qIEJhY2t1cCBzYXZlIHBhdHRlcm4gKi8KKwlucGlyZWdfdCB6cGF0dGVybjsgICAgLyogUGl4ZWwgenBhdHRlcm4gKi8KKwlucGlyZWdfdCBjb2xvcmJhY2s7ICAgLyogQmFja2dyb3VuZCBjb2xvciAqLworCW5waXJlZ190IGNvbG9ydnJhbTsgICAvKiBDbGVhciBjb2xvciBmb3IgZmFzdCB2cmFtICovCisJbnBpcmVnX3QgYWxwaGFyZWY7ICAgIC8qIFJlZmVyZW5jZSB2YWx1ZSBmb3IgYWZ1bmN0aW9ucyAqLworCXVuc2lnbmVkIGludCBwYWQwOworCW5waXJlZ190IHNtYXNrMHg7ICAgICAvKiBXaW5kb3cgR0wgcmVsYXRpdmUgc2NyZWVuIG1hc2sgMCAqLworCW5waXJlZ190IHNtYXNrMHk7ICAgICAvKiBXaW5kb3cgR0wgcmVsYXRpdmUgc2NyZWVuIG1hc2sgMCAqLworCW5waXJlZ190IF9zZXR1cDsKKwlucGlyZWdfdCBfc3RlcHo7CisJbnBpcmVnX3QgX2xzcmVzdG9yZTsKKwlucGlyZWdfdCBfbHNzYXZlOworCisJdW5zaWduZWQgaW50IF9wYWQxWzB4MzBdOworCisJLyogSXRlcmF0b3JzLCBmdWxsIHN0YXRlIGZvciBjb250ZXh0IHN3aXRjaCAqLworCW5wZnJlZ190IF94c3RhcnQ7CS8qIFgtc3RhcnQgcG9pbnQgKGN1cnJlbnQpICovCisJbnBmcmVnX3QgX3lzdGFydDsJLyogWS1zdGFydCBwb2ludCAoY3VycmVudCkgKi8KKwlucGZyZWdfdCBfeGVuZDsJCS8qIHgtZW5kIHBvaW50ICovCisJbnBmcmVnX3QgX3llbmQ7CQkvKiB5LWVuZCBwb2ludCAqLworCW5waXJlZ190IHhzYXZlOwkJLyogY29weSBvZiB4c3RhcnQgaW50ZWdlciB2YWx1ZSBmb3IgQkxPQ2sgYWRkcmVzc2luZyBNT0RFICovCisJbnBpcmVnX3QgeHltb3ZlOwkvKiB4Lnkgb2Zmc2V0IGZyb20geHN0YXJ0LCB5c3RhcnQgZm9yIHJlbGF0aXZlIG9wZXJhdGlvbnMgKi8KKwlucGZyZWdfdCBicmVzZDsKKwlucGZyZWdfdCBicmVzczE7CisJbnBpcmVnX3QgYnJlc29jdGluYzE7CisJdm9sYXRpbGUgaW50IGJyZXNybmRpbmMyOworCW5waXJlZ190IGJyZXNlMTsKKwlucGlyZWdfdCBicmVzczI7CisJbnBpcmVnX3QgYXdlaWdodDA7CisJbnBpcmVnX3QgYXdlaWdodDE7CisJbnBmcmVnX3QgeHN0YXJ0ZjsKKwlucGZyZWdfdCB5c3RhcnRmOworCW5wZnJlZ190IHhlbmRmOworCW5wZnJlZ190IHllbmRmOworCW5waXJlZ190IHhzdGFydGk7CisJbnBmcmVnX3QgeGVuZGYxOworCW5waXJlZ190IHh5c3RhcnRpOworCW5waXJlZ190IHh5ZW5kaTsKKwlucGlyZWdfdCB4c3RhcnRlbmRpOworCisJdW5zaWduZWQgaW50IF91bnVzZWQyWzB4MjldOworCisJbnBmcmVnX3QgY29sb3JyZWQ7CisJbnBmcmVnX3QgY29sb3JhbHBoYTsKKwlucGZyZWdfdCBjb2xvcmdybjsKKwlucGZyZWdfdCBjb2xvcmJsdWU7CisJbnBmcmVnX3Qgc2xvcGVyZWQ7CisJbnBmcmVnX3Qgc2xvcGVhbHBoYTsKKwlucGZyZWdfdCBzbG9wZWdybjsKKwlucGZyZWdfdCBzbG9wZWJsdWU7CisJbnBpcmVnX3Qgd3JtYXNrOworCW5waXJlZ190IGNvbG9yaTsKKwlucGZyZWdfdCBjb2xvcng7CisJbnBmcmVnX3Qgc2xvcGVyZWQxOworCW5waXJlZ190IGhvc3RydzA7CisJbnBpcmVnX3QgaG9zdHJ3MTsKKwlucGlyZWdfdCBkY2Jtb2RlOworI2RlZmluZSBOUE9SVF9ETU9ERV9XTUFTSyAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgTlBPUlRfRE1PREVfVzQgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIE5QT1JUX0RNT0RFX1cxICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBOUE9SVF9ETU9ERV9XMiAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgTlBPUlRfRE1PREVfVzMgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIE5QT1JUX0RNT0RFX0VEUEFDSyAgMHgwMDAwMDAwNAorI2RlZmluZSBOUE9SVF9ETU9ERV9FQ0lOQyAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgTlBPUlRfRE1PREVfQ01BU0sgICAweDAwMDAwMDcwCisjZGVmaW5lIE5QT1JUX0RNT0RFX0FNQVNLICAgMHgwMDAwMDc4MAorI2RlZmluZSBOUE9SVF9ETU9ERV9BVkMyICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgTlBPUlRfRE1PREVfQUNNQUxMICAweDAwMDAwMDgwCisjZGVmaW5lIE5QT1JUX0RNT0RFX0FDTTAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBOUE9SVF9ETU9ERV9BQ00xICAgIDB4MDAwMDAxODAKKyNkZWZpbmUgTlBPUlRfRE1PREVfQVhNQUxMICAweDAwMDAwMjAwCisjZGVmaW5lIE5QT1JUX0RNT0RFX0FYTTAgICAgMHgwMDAwMDI4MAorI2RlZmluZSBOUE9SVF9ETU9ERV9BWE0xICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgTlBPUlRfRE1PREVfQUJUICAgICAweDAwMDAwMzgwCisjZGVmaW5lIE5QT1JUX0RNT0RFX0FWQ0MxICAgMHgwMDAwMDQwMAorI2RlZmluZSBOUE9SVF9ETU9ERV9BVkFCMSAgIDB4MDAwMDA0ODAKKyNkZWZpbmUgTlBPUlRfRE1PREVfQUxHM1YwICAweDAwMDAwNTAwCisjZGVmaW5lIE5QT1JUX0RNT0RFX0ExNTYyICAgMHgwMDAwMDU4MAorI2RlZmluZSBOUE9SVF9ETU9ERV9FU0FDSyAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgTlBPUlRfRE1PREVfRUFTQUNLICAweDAwMDAxMDAwCisjZGVmaW5lIE5QT1JUX0RNT0RFX0NXTUFTSyAgMHgwMDAzZTAwMAorI2RlZmluZSBOUE9SVF9ETU9ERV9DSE1BU0sgIDB4MDA3YzAwMDAKKyNkZWZpbmUgTlBPUlRfRE1PREVfQ1NNQVNLICAweDBmODAwMDAwCisjZGVmaW5lIE5QT1JUX0RNT0RFX1NFTkRJQU4gMHgxMDAwMDAwMAorCisJdW5zaWduZWQgaW50IF91bnVzZWQzOworCisJdW5pb24gbnBfZGNiIGRjYmRhdGEwOworCW5waXJlZ190IGRjYmRhdGExOworfTsKKworc3RydWN0IG5ld3BvcnRfY3JlZ3MgeworCW5waXJlZ190IHNtYXNrMXg7CisJbnBpcmVnX3Qgc21hc2sxeTsKKwlucGlyZWdfdCBzbWFzazJ4OworCW5waXJlZ190IHNtYXNrMnk7CisJbnBpcmVnX3Qgc21hc2szeDsKKwlucGlyZWdfdCBzbWFzazN5OworCW5waXJlZ190IHNtYXNrNHg7CisJbnBpcmVnX3Qgc21hc2s0eTsKKwlucGlyZWdfdCB0b3BzY2FuOworCW5waXJlZ190IHh5d2luOworCW5waXJlZ190IGNsaXBtb2RlOworI2RlZmluZSBOUE9SVF9DTU9ERV9TTTAgICAweDAwMDAwMDAxCisjZGVmaW5lIE5QT1JUX0NNT0RFX1NNMSAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgTlBPUlRfQ01PREVfU00yICAgMHgwMDAwMDAwNAorI2RlZmluZSBOUE9SVF9DTU9ERV9TTTMgICAweDAwMDAwMDA4CisjZGVmaW5lIE5QT1JUX0NNT0RFX1NNNCAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgTlBPUlRfQ01PREVfQ01TSyAgMHgwMDAwMWUwMAorCisJdW5zaWduZWQgaW50IF91bnVzZWQwOworCXVuc2lnbmVkIGludCBjb25maWc7CisjZGVmaW5lIE5QT1JUX0NGR19HMzJNRCAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgTlBPUlRfQ0ZHX0JXSURUSCAgMHgwMDAwMDAwMgorI2RlZmluZSBOUE9SVF9DRkdfRVJDVlIgICAweDAwMDAwMDA0CisjZGVmaW5lIE5QT1JUX0NGR19CRE1TSyAgIDB4MDAwMDAwNzgKKyNkZWZpbmUgTlBPUlRfQ0ZHX0JGQUlOVCAgMHgwMDAwMDA4MAorI2RlZmluZSBOUE9SVF9DRkdfR0RNU0sgICAweDAwMDAxZjgwCisjZGVmaW5lIE5QT1JUX0NGR19HRDAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgTlBPUlRfQ0ZHX0dEMSAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBOUE9SVF9DRkdfR0QyICAgICAweDAwMDAwNDAwCisjZGVmaW5lIE5QT1JUX0NGR19HRDMgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgTlBPUlRfQ0ZHX0dENCAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBOUE9SVF9DRkdfR0ZBSU5UICAweDAwMDAyMDAwCisjZGVmaW5lIE5QT1JUX0NGR19UT01TSyAgIDB4MDAwMWMwMDAKKyNkZWZpbmUgTlBPUlRfQ0ZHX1ZSTVNLICAgMHgwMDBlMDAwMAorI2RlZmluZSBOUE9SVF9DRkdfRkJUWVAgICAweDAwMTAwMDAwCisKKwlucGlyZWdfdCBfdW51c2VkMTsKKwlucGlyZWdfdCBzdGF0dXM7CisjZGVmaW5lIE5QT1JUX1NUQVRfVkVSUyAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgTlBPUlRfU1RBVF9HQlVTWSAgMHgwMDAwMDAwOAorI2RlZmluZSBOUE9SVF9TVEFUX0JCVVNZICAweDAwMDAwMDEwCisjZGVmaW5lIE5QT1JUX1NUQVRfVlJJTlQgIDB4MDAwMDAwMjAKKyNkZWZpbmUgTlBPUlRfU1RBVF9WSURJTlQgMHgwMDAwMDA0MAorI2RlZmluZSBOUE9SVF9TVEFUX0dMTVNLICAweDAwMDAxZjgwCisjZGVmaW5lIE5QT1JUX1NUQVRfQkxNU0sgIDB4MDAwN2UwMDAKKyNkZWZpbmUgTlBPUlRfU1RBVF9CRklSUSAgMHgwMDA4MDAwMAorI2RlZmluZSBOUE9SVF9TVEFUX0dGSVJRICAweDAwMTAwMDAwCisKKwlucGlyZWdfdCB1c3RhdHVzOworCW5waXJlZ190IGRjYnJlc2V0OworfTsKKworc3RydWN0IG5ld3BvcnRfcmVncyB7CisJc3RydWN0IG5ld3BvcnRfcmV4cmVncyBzZXQ7CisJdW5zaWduZWQgaW50IF91bnVzZWQwWzB4MTZlXTsKKwlzdHJ1Y3QgbmV3cG9ydF9yZXhyZWdzIGdvOworCXVuc2lnbmVkIGludCBfdW51c2VkMVsweDIyZV07CisJc3RydWN0IG5ld3BvcnRfY3JlZ3MgY3NldDsKKwl1bnNpZ25lZCBpbnQgX3VudXNlZDJbMHgxZWZdOworCXN0cnVjdCBuZXdwb3J0X2NyZWdzIGNnbzsKK307CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQgZHJhd21vZGUxOworCXVuc2lnbmVkIGludCBkcmF3bW9kZTA7CisJdW5zaWduZWQgaW50IGxzbW9kZTsgICAKKwl1bnNpZ25lZCBpbnQgbHNwYXR0ZXJuOworCXVuc2lnbmVkIGludCBsc3BhdHNhdmU7CisJdW5zaWduZWQgaW50IHpwYXR0ZXJuOyAKKwl1bnNpZ25lZCBpbnQgY29sb3JiYWNrOworCXVuc2lnbmVkIGludCBjb2xvcnZyYW07CisJdW5zaWduZWQgaW50IGFscGhhcmVmOyAKKwl1bnNpZ25lZCBpbnQgc21hc2sweDsgIAorCXVuc2lnbmVkIGludCBzbWFzazB5OyAgCisJdW5zaWduZWQgaW50IF94c3RhcnQ7ICAKKwl1bnNpZ25lZCBpbnQgX3lzdGFydDsgIAorCXVuc2lnbmVkIGludCBfeGVuZDsgICAgCisJdW5zaWduZWQgaW50IF95ZW5kOyAgICAKKwl1bnNpZ25lZCBpbnQgeHNhdmU7ICAgIAorCXVuc2lnbmVkIGludCB4eW1vdmU7ICAgCisJdW5zaWduZWQgaW50IGJyZXNkOyAgICAKKwl1bnNpZ25lZCBpbnQgYnJlc3MxOyAgIAorCXVuc2lnbmVkIGludCBicmVzb2N0aW5jMTsKKwl1bnNpZ25lZCBpbnQgYnJlc3JuZGluYzI7CisJdW5zaWduZWQgaW50IGJyZXNlMTsgICAgIAorCXVuc2lnbmVkIGludCBicmVzczI7ICAgICAKKwkKKwl1bnNpZ25lZCBpbnQgYXdlaWdodDA7ICAgIAorCXVuc2lnbmVkIGludCBhd2VpZ2h0MTsgICAgCisJdW5zaWduZWQgaW50IGNvbG9ycmVkOyAgICAKKwl1bnNpZ25lZCBpbnQgY29sb3JhbHBoYTsgIAorCXVuc2lnbmVkIGludCBjb2xvcmdybjsgICAgCisJdW5zaWduZWQgaW50IGNvbG9yYmx1ZTsgICAKKwl1bnNpZ25lZCBpbnQgc2xvcGVyZWQ7ICAgIAorCXVuc2lnbmVkIGludCBzbG9wZWFscGhhOyAgCisJdW5zaWduZWQgaW50IHNsb3BlZ3JuOyAgICAKKwl1bnNpZ25lZCBpbnQgc2xvcGVibHVlOyAgIAorCXVuc2lnbmVkIGludCB3cm1hc2s7ICAgICAgCisJdW5zaWduZWQgaW50IGhvc3RydzA7ICAgICAKKwl1bnNpZ25lZCBpbnQgaG9zdHJ3MTsgICAgIAorCQorICAgICAgICAvKiBjb25maWdyZWdzICovCisJCisJdW5zaWduZWQgaW50IHNtYXNrMXg7ICAgIAorCXVuc2lnbmVkIGludCBzbWFzazF5OyAgICAKKwl1bnNpZ25lZCBpbnQgc21hc2syeDsgICAgCisJdW5zaWduZWQgaW50IHNtYXNrMnk7ICAgIAorCXVuc2lnbmVkIGludCBzbWFzazN4OyAgICAKKwl1bnNpZ25lZCBpbnQgc21hc2szeTsgICAgCisJdW5zaWduZWQgaW50IHNtYXNrNHg7ICAgIAorCXVuc2lnbmVkIGludCBzbWFzazR5OyAgICAKKwl1bnNpZ25lZCBpbnQgdG9wc2NhbjsgICAgCisJdW5zaWduZWQgaW50IHh5d2luOyAgICAgIAorCXVuc2lnbmVkIGludCBjbGlwbW9kZTsgICAKKwl1bnNpZ25lZCBpbnQgY29uZmlnOyAgICAgCisJCisgICAgICAgIC8qIGRjYiByZWdpc3RlcnMgKi8KKwl1bnNpZ25lZCBpbnQgZGNibW9kZTsgICAKKwl1bnNpZ25lZCBpbnQgZGNiZGF0YTA7ICAKKwl1bnNpZ25lZCBpbnQgZGNiZGF0YTE7Cit9IG5ld3BvcnRfY3R4OworCisvKiBSZWFkaW5nL3dyaXRpbmcgVkMyIHJlZ2lzdGVycy4gKi8KKyNkZWZpbmUgVkMyX1JFR0FERFJfSU5ERVggICAgICAweDAwMDAwMDAwCisjZGVmaW5lIFZDMl9SRUdBRERSX0lSRUcgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBWQzJfUkVHQUREUl9SQU0gICAgICAgIDB4MDAwMDAwMzAKKyNkZWZpbmUgVkMyX1BST1RPQ09MICAgICAgICAgICAoTlBPUlRfRE1PREVfRUFTQUNLIHwgMHgwMDgwMDAwMCB8IDB4MDAwNDAwMDApCisKKyNkZWZpbmUgVkMyX1ZMSU5FVF9BRERSICAgICAgICAweDAwMAorI2RlZmluZSBWQzJfVkZSQU1FVF9BRERSICAgICAgIDB4NDAwCisjZGVmaW5lIFZDMl9DR0xZUEhfQUREUiAgICAgICAgMHg1MDAKKworLyogTm93IHRoZSBJbmRleGVkIHJlZ2lzdGVycyBvZiB0aGUgVkMyLiAqLworI2RlZmluZSBWQzJfSVJFR19WRU5UUlkgICAgICAgIDB4MDAKKyNkZWZpbmUgVkMyX0lSRUdfQ0VOVFJZICAgICAgICAweDAxCisjZGVmaW5lIFZDMl9JUkVHX0NVUlNYICAgICAgICAgMHgwMgorI2RlZmluZSBWQzJfSVJFR19DVVJTWSAgICAgICAgIDB4MDMKKyNkZWZpbmUgVkMyX0lSRUdfQ0NVUlNYICAgICAgICAweDA0CisjZGVmaW5lIFZDMl9JUkVHX0RFTlRSWSAgICAgICAgMHgwNQorI2RlZmluZSBWQzJfSVJFR19TTEVOICAgICAgICAgIDB4MDYKKyNkZWZpbmUgVkMyX0lSRUdfUkFERFIgICAgICAgICAweDA3CisjZGVmaW5lIFZDMl9JUkVHX1ZGUFRSICAgICAgICAgMHgwOAorI2RlZmluZSBWQzJfSVJFR19WTFNQVFIgICAgICAgIDB4MDkKKyNkZWZpbmUgVkMyX0lSRUdfVkxJUiAgICAgICAgICAweDBhCisjZGVmaW5lIFZDMl9JUkVHX1ZMQ1RSICAgICAgICAgMHgwYgorI2RlZmluZSBWQzJfSVJFR19DVFBUUiAgICAgICAgIDB4MGMKKyNkZWZpbmUgVkMyX0lSRUdfV0NVUlNZICAgICAgICAweDBkCisjZGVmaW5lIFZDMl9JUkVHX0RGUFRSICAgICAgICAgMHgwZQorI2RlZmluZSBWQzJfSVJFR19ETFRQVFIgICAgICAgIDB4MGYKKyNkZWZpbmUgVkMyX0lSRUdfQ09OVFJPTCAgICAgICAweDEwCisjZGVmaW5lIFZDMl9JUkVHX0NPTkZJRyAgICAgICAgMHgyMAorCitleHRlcm4gX19pbmxpbmVfXyB2b2lkIG5ld3BvcnRfdmMyX3NldChzdHJ1Y3QgbmV3cG9ydF9yZWdzICpyZWdzLCB1bnNpZ25lZCBjaGFyIHZjMmlyZWcsCisJCQkJICAgdW5zaWduZWQgc2hvcnQgdmFsKQoreworCXJlZ3MtPnNldC5kY2Jtb2RlID0gKE5QT1JUX0RNT0RFX0FWQzIgfCBWQzJfUkVHQUREUl9JTkRFWCB8IE5QT1JUX0RNT0RFX1czIHwKKwkJCSAgIE5QT1JUX0RNT0RFX0VDSU5DIHwgVkMyX1BST1RPQ09MKTsKKwlyZWdzLT5zZXQuZGNiZGF0YTAuYnl3b3JkID0gKHZjMmlyZWcgPDwgMjQpIHwgKHZhbCA8PCA4KTsKK30KKworZXh0ZXJuIF9faW5saW5lX18gdW5zaWduZWQgc2hvcnQgbmV3cG9ydF92YzJfZ2V0KHN0cnVjdCBuZXdwb3J0X3JlZ3MgKnJlZ3MsCisJCQkJCSAgICAgdW5zaWduZWQgY2hhciB2YzJpcmVnKQoreworCXJlZ3MtPnNldC5kY2Jtb2RlID0gKE5QT1JUX0RNT0RFX0FWQzIgfCBWQzJfUkVHQUREUl9JTkRFWCB8IE5QT1JUX0RNT0RFX1cxIHwKKwkJCSAgIE5QT1JUX0RNT0RFX0VDSU5DIHwgVkMyX1BST1RPQ09MKTsKKwlyZWdzLT5zZXQuZGNiZGF0YTAuYnlieXRlcy5iMyA9IHZjMmlyZWc7CisJcmVncy0+c2V0LmRjYm1vZGUgPSAoTlBPUlRfRE1PREVfQVZDMiB8IFZDMl9SRUdBRERSX0lSRUcgfCBOUE9SVF9ETU9ERV9XMiB8CisJCQkgICBOUE9SVF9ETU9ERV9FQ0lOQyB8IFZDMl9QUk9UT0NPTCk7CisJcmV0dXJuIHJlZ3MtPnNldC5kY2JkYXRhMC5ieXNob3J0LnMxOworfQorCisvKiBWQzIgQ29udHJvbCByZWdpc3RlciBiaXRzICovCisjZGVmaW5lIFZDMl9DVFJMX0VWSVJRICAgICAweDAwMDEKKyNkZWZpbmUgVkMyX0NUUkxfRURJU1AgICAgIDB4MDAwMgorI2RlZmluZSBWQzJfQ1RSTF9FVklERU8gICAgMHgwMDA0CisjZGVmaW5lIFZDMl9DVFJMX0VESURTICAgICAweDAwMDgKKyNkZWZpbmUgVkMyX0NUUkxfRUNVUlMgICAgIDB4MDAxMAorI2RlZmluZSBWQzJfQ1RSTF9FR1NZTkMgICAgMHgwMDIwCisjZGVmaW5lIFZDMl9DVFJMX0VJTEFDRSAgICAweDAwNDAKKyNkZWZpbmUgVkMyX0NUUkxfRUNESVNQICAgIDB4MDA4MAorI2RlZmluZSBWQzJfQ1RSTF9FQ0NVUlMgICAgMHgwMTAwCisjZGVmaW5lIFZDMl9DVFJMX0VDRzY0ICAgICAweDAyMDAKKyNkZWZpbmUgVkMyX0NUUkxfR0xTRUwgICAgIDB4MDQwMAorCisvKiBDb250cm9sbGluZyB0aGUgY29sb3IgbWFwIG9uIE5FV1BPUlQuICovCisjZGVmaW5lIE5DTUFQX1JFR0FERFJfQVJFRyAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgTkNNQVBfUkVHQUREUl9BTE8gICAgMHgwMDAwMDAwMAorI2RlZmluZSBOQ01BUF9SRUdBRERSX0FISSAgICAweDAwMDAwMDEwCisjZGVmaW5lIE5DTUFQX1JFR0FERFJfUEJVRiAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgTkNNQVBfUkVHQUREUl9DUkVHICAgMHgwMDAwMDAzMAorI2RlZmluZSBOQ01BUF9SRUdBRERSX1NSRUcgICAweDAwMDAwMDQwCisjZGVmaW5lIE5DTUFQX1JFR0FERFJfUlJFRyAgIDB4MDAwMDAwNjAKKyNkZWZpbmUgTkNNQVBfUFJPVE9DT0wgICAgICAgKDB4MDAwMDgwMDAgfCAweDAwMDQwMDAwIHwgMHgwMDgwMDAwMCkKKworc3RhdGljIF9faW5saW5lX18gdm9pZCBuZXdwb3J0X2NtYXBfc2V0YWRkcihzdHJ1Y3QgbmV3cG9ydF9yZWdzICpyZWdzLAorCQkJCQl1bnNpZ25lZCBzaG9ydCBhZGRyKQoreworCXJlZ3MtPnNldC5kY2Jtb2RlID0gKE5QT1JUX0RNT0RFX0FDTUFMTCB8IE5DTUFQX1BST1RPQ09MIHwKKwkJCSAgIE5QT1JUX0RNT0RFX1NFTkRJQU4gfCBOUE9SVF9ETU9ERV9FQ0lOQyB8CisJCQkgICBOQ01BUF9SRUdBRERSX0FSRUcgfCBOUE9SVF9ETU9ERV9XMik7CisJcmVncy0+c2V0LmRjYmRhdGEwLmJ5c2hvcnQuczEgPSBhZGRyOworCXJlZ3MtPnNldC5kY2Jtb2RlID0gKE5QT1JUX0RNT0RFX0FDTUFMTCB8IE5DTUFQX1BST1RPQ09MIHwKKwkJCSAgIE5DTUFQX1JFR0FERFJfUEJVRiB8IE5QT1JUX0RNT0RFX1czKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBuZXdwb3J0X2NtYXBfc2V0cmdiKHN0cnVjdCBuZXdwb3J0X3JlZ3MgKnJlZ3MsCisJCQkJICAgICAgIHVuc2lnbmVkIGNoYXIgcmVkLAorCQkJCSAgICAgICB1bnNpZ25lZCBjaGFyIGdyZWVuLAorCQkJCSAgICAgICB1bnNpZ25lZCBjaGFyIGJsdWUpCit7CisJcmVncy0+c2V0LmRjYmRhdGEwLmJ5d29yZCA9CisJCShyZWQgPDwgMjQpIHwKKwkJKGdyZWVuIDw8IDE2KSB8CisJCShibHVlIDw8IDgpOworfQorCisvKiBNaXNjZWxsYW5lb3VzIE5FV1BPUlQgcm91dGluZXMuICovCisjZGVmaW5lIEJVU1lfVElNRU9VVCAxMDAwMDAKK3N0YXRpYyBfX2lubGluZV9fIGludCBuZXdwb3J0X3dhaXQoc3RydWN0IG5ld3BvcnRfcmVncyAqcmVncykKK3sKKwlpbnQgdCA9IEJVU1lfVElNRU9VVDsKKworCXdoaWxlICh0LS0pCisJCWlmICghKHJlZ3MtPmNzZXQuc3RhdHVzICYgTlBPUlRfU1RBVF9HQlVTWSkpCisJCQlicmVhazsKKwlyZXR1cm4gIXQ7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBuZXdwb3J0X2Jmd2FpdChzdHJ1Y3QgbmV3cG9ydF9yZWdzICpyZWdzKQoreworCWludCB0ID0gQlVTWV9USU1FT1VUOworCisJd2hpbGUgKHQtLSkKKwkJaWYoIShyZWdzLT5jc2V0LnN0YXR1cyAmIE5QT1JUX1NUQVRfQkJVU1kpKQorCQkJYnJlYWs7CisJcmV0dXJuICF0OworfQorCisvKgorICogRENCTU9ERSByZWdpc3RlciBkZWZpbmVzOgorICovCisKKy8qIFdpZHRoIG9mIHRoZSBkYXRhIGJlaW5nIHRyYW5zZmVycmVkIGZvciBlYWNoIERDQkRBVEFbMDFdIHdvcmQgKi8KKyNkZWZpbmUgRENCX0RBVEFXSURUSF80IDB4MAorI2RlZmluZSBEQ0JfREFUQVdJRFRIXzEgMHgxCisjZGVmaW5lIERDQl9EQVRBV0lEVEhfMiAweDIKKyNkZWZpbmUgRENCX0RBVEFXSURUSF8zIDB4MworCisvKiBJZiBzZXQsIGFsbCBvZiBEQ0JEQVRBIHdpbGwgYmUgbW92ZWQsIG90aGVyd2lzZSBvbmx5IERBVEFXSURUSCBieXRlcyAqLworI2RlZmluZSBEQ0JfRU5EQVRBUEFDSyAgICgxIDw8IDIpCisKKy8qIEVuYWJsZXMgRENCQ1JTIGF1dG8gaW5jcmVtZW50IGFmdGVyIGVhY2ggRENCIHRyYW5zZmVyICovCisjZGVmaW5lIERDQl9FTkNSU0lOQyAgICAgKDEgPDwgMykKKworLyogc2hpZnQgZm9yIGFjY2Vzc2luZyB0aGUgY29udHJvbCByZWdpc3RlciBzZWxlY3QgYWRkcmVzcyAoREJDQ1JTLCAzIGJpdHMpICovCisjZGVmaW5lIERDQl9DUlNfU0hJRlQgICAgNAorCisvKiBEQ0JBRERSICg0IGJpdHMpOiBkaXNwbGF5IGJ1cyBzbGF2ZSBhZGRyZXNzICovCisjZGVmaW5lIERDQl9BRERSX1NISUZUICAgNworI2RlZmluZSBEQ0JfVkMyICAgICAgICAgICgwIDw8ICBEQ0JfQUREUl9TSElGVCkKKyNkZWZpbmUgRENCX0NNQVBfQUxMICAgICAoMSA8PCAgRENCX0FERFJfU0hJRlQpCisjZGVmaW5lIERDQl9DTUFQMCAgICAgICAgKDIgPDwgIERDQl9BRERSX1NISUZUKQorI2RlZmluZSBEQ0JfQ01BUDEgICAgICAgICgzIDw8ICBEQ0JfQUREUl9TSElGVCkKKyNkZWZpbmUgRENCX1hNQVBfQUxMICAgICAoNCA8PCAgRENCX0FERFJfU0hJRlQpCisjZGVmaW5lIERDQl9YTUFQMCAgICAgICAgKDUgPDwgIERDQl9BRERSX1NISUZUKQorI2RlZmluZSBEQ0JfWE1BUDEgICAgICAgICg2IDw8ICBEQ0JfQUREUl9TSElGVCkKKyNkZWZpbmUgRENCX0JUNDQ1ICAgICAgICAoNyA8PCAgRENCX0FERFJfU0hJRlQpCisjZGVmaW5lIERDQl9WQ0MxICAgICAgICAgKDggPDwgIERDQl9BRERSX1NISUZUKQorI2RlZmluZSBEQ0JfVkFCMSAgICAgICAgICg5IDw8ICBEQ0JfQUREUl9TSElGVCkKKyNkZWZpbmUgRENCX0xHM19CRFZFUlMwICAoMTAgPDwgRENCX0FERFJfU0hJRlQpCisjZGVmaW5lIERDQl9MRzNfSUNTMTU2MiAgKDExIDw8IERDQl9BRERSX1NISUZUKQorI2RlZmluZSBEQ0JfUkVTRVJWRUQgICAgICgxNSA8PCBEQ0JfQUREUl9TSElGVCkKKworLyogRENCIHByb3RvY29sIGFjayB0eXBlcyAqLworI2RlZmluZSBEQ0JfRU5TWU5DQUNLICAgICgxIDw8IDExKQorI2RlZmluZSBEQ0JfRU5BU1lOQ0FDSyAgICgxIDw8IDEyKQorCisjZGVmaW5lIERDQl9DU1dJRFRIX1NISUZUIDEzCisjZGVmaW5lIERDQl9DU0hPTERfU0hJRlQgIDE4CisjZGVmaW5lIERDQl9DU1NFVFVQX1NISUZUIDIzCisKKy8qIFhNQVA5IHNwZWNpZmljIGRlZmluZXMgKi8KKy8qICAgWE1BUDkgLS0gcmVnaXN0ZXJzIGFzIHNlZW4gb24gdGhlIERDQk1PREUgcmVnaXN0ZXIqLworIyAgIGRlZmluZSBYTTlfQ1JTX0NPTkZJRyAgICAgICAgICAgICgwIDw8IERDQl9DUlNfU0hJRlQpCisjICAgICAgIGRlZmluZSBYTTlfUFVQTU9ERSAgICAgICAgICAgKDEgPDwgMCkKKyMgICAgICAgZGVmaW5lIFhNOV9PRERfUElYRUwgICAgICAgICAoMSA8PCAxKQorIyAgICAgICBkZWZpbmUgWE05XzhfQklUUExBTkVTICAgICAgICgxIDw8IDIpCisjICAgICAgIGRlZmluZSBYTTlfU0xPV19EQ0IgICAgICAgICAgKDEgPDwgMykKKyMgICAgICAgZGVmaW5lIFhNOV9WSURFT19SR0JNQVBfTUFTSyAoMyA8PCA0KQorIyAgICAgICBkZWZpbmUgWE05X0VYUFJFU1NfVklERU8gICAgICgxIDw8IDYpCisjICAgICAgIGRlZmluZSBYTTlfVklERU9fT1BUSU9OICAgICAgKDEgPDwgNykKKyMgICBkZWZpbmUgWE05X0NSU19SRVZJU0lPTiAgICAgICAgICAoMSA8PCBEQ0JfQ1JTX1NISUZUKQorIyAgIGRlZmluZSBYTTlfQ1JTX0ZJRk9fQVZBSUwgICAgICAgICgyIDw8IERDQl9DUlNfU0hJRlQpCisjICAgICAgIGRlZmluZSBYTTlfRklGT18wX0FWQUlMICAgICAgMAorIyAgICAgICBkZWZpbmUgWE05X0ZJRk9fMV9BVkFJTCAgICAgIDEKKyMgICAgICAgZGVmaW5lIFhNOV9GSUZPXzJfQVZBSUwgICAgICAzCisjICAgICAgIGRlZmluZSBYTTlfRklGT18zX0FWQUlMICAgICAgMgorIyAgICAgICBkZWZpbmUgWE05X0ZJRk9fRlVMTCAgICAgICAgIFhNOV9GSUZPXzBfQVZBSUwKKyMgICAgICAgZGVmaW5lIFhNOV9GSUZPX0VNUFRZICAgICAgICBYTTlfRklGT18zX0FWQUlMCisjICAgZGVmaW5lIFhNOV9DUlNfQ1VSU19DTUFQX01TQiAgICAgKDMgPDwgRENCX0NSU19TSElGVCkKKyMgICBkZWZpbmUgWE05X0NSU19QVVBfQ01BUF9NU0IgICAgICAoNCA8PCBEQ0JfQ1JTX1NISUZUKQorIyAgIGRlZmluZSBYTTlfQ1JTX01PREVfUkVHX0RBVEEgICAgICg1IDw8IERDQl9DUlNfU0hJRlQpCisjICAgZGVmaW5lIFhNOV9DUlNfTU9ERV9SRUdfSU5ERVggICAgKDcgPDwgRENCX0NSU19TSElGVCkKKworCisjZGVmaW5lIERDQl9DWUNMRVMoc2V0dXAsaG9sZCx3aWR0aCkgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgKChob2xkIDw8IERDQl9DU0hPTERfU0hJRlQpICB8ICAgIFwKKwkJICAgKHNldHVwIDw8IERDQl9DU1NFVFVQX1NISUZUKXwgICAgXAorCQkgICAod2lkdGggPDwgRENCX0NTV0lEVEhfU0hJRlQpKQorCisjZGVmaW5lIFdfRENCX1hNQVA5X1BST1RPQ09MICAgICAgIERDQl9DWUNMRVMgKDIsIDEsIDApCisjZGVmaW5lIFdTTE9XX0RDQl9YTUFQOV9QUk9UT0NPTCAgIERDQl9DWUNMRVMgKDUsIDUsIDApCisjZGVmaW5lIFdBWVNMT1dfRENCX1hNQVA5X1BST1RPQ09MIERDQl9DWUNMRVMgKDEyLCAxMiwgMCkKKyNkZWZpbmUgUl9EQ0JfWE1BUDlfUFJPVE9DT0wgICAgICAgRENCX0NZQ0xFUyAoMiwgMSwgMykKKworc3RhdGljIF9faW5saW5lX18gdm9pZAoreG1hcDlGSUZPV2FpdCAoc3RydWN0IG5ld3BvcnRfcmVncyAqcmV4KQoreworICAgICAgICByZXgtPnNldC5kY2Jtb2RlID0gRENCX1hNQVAwIHwgWE05X0NSU19GSUZPX0FWQUlMIHwKKwkJRENCX0RBVEFXSURUSF8xIHwgUl9EQ0JfWE1BUDlfUFJPVE9DT0w7CisgICAgICAgIG5ld3BvcnRfYmZ3YWl0IChyZXgpOworCQorICAgICAgICB3aGlsZSAoKHJleC0+c2V0LmRjYmRhdGEwLmJ5Ynl0ZXMuYjMgJiAzKSAhPSBYTTlfRklGT19FTVBUWSkKKwkJOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkCit4bWFwOVNldE1vZGVSZWcgKHN0cnVjdCBuZXdwb3J0X3JlZ3MgKnJleCwgdW5zaWduZWQgaW50IG1vZGVyZWcsIHVuc2lnbmVkIGludCBkYXRhMjQsIGludCBjZnJlcSkKK3sKKyAgICAgICAgaWYgKGNmcmVxID4gMTE5KQorICAgICAgICAgICAgcmV4LT5zZXQuZGNibW9kZSA9IERDQl9YTUFQX0FMTCB8IFhNOV9DUlNfTU9ERV9SRUdfREFUQSB8CisgICAgICAgICAgICAgICAgICAgICAgICBEQ0JfREFUQVdJRFRIXzQgfCBXX0RDQl9YTUFQOV9QUk9UT0NPTDsKKyAgICAgICAgZWxzZSBpZiAoY2ZyZXEgPiA1OSkKKyAgICAgICAgICAgIHJleC0+c2V0LmRjYm1vZGUgPSBEQ0JfWE1BUF9BTEwgfCBYTTlfQ1JTX01PREVfUkVHX0RBVEEgfAorCQkgICAgRENCX0RBVEFXSURUSF80IHwgV1NMT1dfRENCX1hNQVA5X1BST1RPQ09MOyAgICAKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV4LT5zZXQuZGNibW9kZSA9IERDQl9YTUFQX0FMTCB8IFhNOV9DUlNfTU9ERV9SRUdfREFUQSB8CisgICAgICAgICAgICAgICAgICAgICAgICBEQ0JfREFUQVdJRFRIXzQgfCBXQVlTTE9XX0RDQl9YTUFQOV9QUk9UT0NPTDsgCisgICAgICAgIHJleC0+c2V0LmRjYmRhdGEwLmJ5d29yZCA9ICgobW9kZXJlZykgPDwgMjQpIHwgKGRhdGEyNCAmIDB4ZmZmZmZmKTsKK30KKworI2RlZmluZSBCVDQ0NV9QUk9UT0NPTAkJRENCX0NZQ0xFUygxLDEsMykKKworI2RlZmluZSBCVDQ0NV9DU1JfQUREUl9SRUcJKDAgPDwgRENCX0NSU19TSElGVCkKKyNkZWZpbmUgQlQ0NDVfQ1NSX1JFVklTSU9OCSgyIDw8IERDQl9DUlNfU0hJRlQpCisKKyNkZWZpbmUgQlQ0NDVfUkVWSVNJT05fUkVHCTB4MDEKKworI2VuZGlmIC8qICEoX1NHSV9ORVdQT1JUX0gpICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdmlkZW8vcGVybWVkaWEyLmggYi9pbmNsdWRlL3ZpZGVvL3Blcm1lZGlhMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5NWQzNjIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3ZpZGVvL3Blcm1lZGlhMi5oCkBAIC0wLDAgKzEsMjMzIEBACisvKgorICogUGVybWVkaWEyIGZyYW1lYnVmZmVyIGRyaXZlciBkZWZpbml0aW9ucy4KKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAwIElsYXJpbyBOYXJkaW5vY2NoaSAobmFyZGlub2NAQ1MuVW5pQk8uSVQpCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogJElkOiBwbTJmYi5oLHYgMS4yNiAyMDAwLzA5LzE5IDAwOjExOjUzIGlsbG8gRXhwICQKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBQTTJGQl9ICisjZGVmaW5lIFBNMkZCX0gKKworI2RlZmluZSBQTTJfUkVGRVJFTkNFX0NMT0NLCTE0MzE4CQkJLyogaW4gS0h6ICovCisjZGVmaW5lIFBNMl9NQVhfUElYQ0xPQ0sJMjMwMDAwCQkJLyogaW4gS0h6ICovCisjZGVmaW5lIFBNMl9SRUdTX1NJWkUJCTB4MTAwMDAKKworI2RlZmluZSBQTTJUQUcocikgKHUzMiApKCgociktMHg4MDAwKT4+MykKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQZXJtZWRpYTIgcmVnaXN0ZXJzIHVzZWQgaW4gdGhlIGZyYW1lYnVmZmVyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgCisjZGVmaW5lIFBNMlJfUkVTRVRfU1RBVFVTCQkJCTB4MDAwMAorI2RlZmluZSBQTTJSX0lOX0ZJRk9fU1BBQ0UJCQkJMHgwMDE4CisjZGVmaW5lIFBNMlJfT1VUX0ZJRk9fV09SRFMJCQkJMHgwMDIwCisjZGVmaW5lIFBNMlJfQVBFUlRVUkVfT05FCQkJCTB4MDA1MAorI2RlZmluZSBQTTJSX0FQRVJUVVJFX1RXTwkJCQkweDAwNTgKKyNkZWZpbmUgUE0yUl9GSUZPX0RJU0NPTgkJCQkweDAwNjgKKyNkZWZpbmUgUE0yUl9DSElQX0NPTkZJRwkJCQkweDAwNzAKKworI2RlZmluZSBQTTJSX1JFQk9PVAkJCQkJMHgxMDAwCisjZGVmaW5lIFBNMlJfTUVNX0NPTlRST0wJCQkJMHgxMDQwCisjZGVmaW5lIFBNMlJfQk9PVF9BRERSRVNTCQkJCTB4MTA4MAorI2RlZmluZSBQTTJSX01FTV9DT05GSUcJCQkJCTB4MTBjMAorI2RlZmluZSBQTTJSX0JZUEFTU19XUklURV9NQVNLCQkJCTB4MTEwMAorI2RlZmluZSBQTTJSX0ZSQU1FQlVGRkVSX1dSSVRFX01BU0sJCQkweDExNDAKKworI2RlZmluZSBQTTJSX09VVF9GSUZPCQkJCQkweDIwMDAKKworI2RlZmluZSBQTTJSX1NDUkVFTl9CQVNFCQkJCTB4MzAwMAorI2RlZmluZSBQTTJSX1NDUkVFTl9TVFJJREUJCQkJMHgzMDA4CisjZGVmaW5lIFBNMlJfSF9UT1RBTAkJCQkJMHgzMDEwCisjZGVmaW5lIFBNMlJfSEdfRU5ECQkJCQkweDMwMTgKKyNkZWZpbmUgUE0yUl9IQl9FTkQJCQkJCTB4MzAyMAorI2RlZmluZSBQTTJSX0hTX1NUQVJUCQkJCQkweDMwMjgKKyNkZWZpbmUgUE0yUl9IU19FTkQJCQkJCTB4MzAzMAorI2RlZmluZSBQTTJSX1ZfVE9UQUwJCQkJCTB4MzAzOAorI2RlZmluZSBQTTJSX1ZCX0VORAkJCQkJMHgzMDQwCisjZGVmaW5lIFBNMlJfVlNfU1RBUlQJCQkJCTB4MzA0OAorI2RlZmluZSBQTTJSX1ZTX0VORAkJCQkJMHgzMDUwCisjZGVmaW5lIFBNMlJfVklERU9fQ09OVFJPTAkJCQkweDMwNTgKKyNkZWZpbmUgUE0yUl9MSU5FX0NPVU5UCQkJCQkweDMwNzAKKyNkZWZpbmUgUE0yUl9GSUZPX0NPTlRST0wJCQkJMHgzMDc4CisKKyNkZWZpbmUgUE0yUl9SRF9QQUxFVFRFX1dSSVRFX0FERFJFU1MJCQkweDQwMDAKKyNkZWZpbmUgUE0yUl9SRF9QQUxFVFRFX0RBVEEJCQkJMHg0MDA4CisjZGVmaW5lIFBNMlJfUkRfUElYRUxfTUFTSwkJCQkweDQwMTAKKyNkZWZpbmUgUE0yUl9SRF9QQUxFVFRFX1JFQURfQUREUkVTUwkJCTB4NDAxOAorI2RlZmluZSBQTTJSX1JEX0lOREVYRURfREFUQQkJCQkweDQwNTAKKworI2RlZmluZSBQTTJSX1NUQVJUX1hfRE9NCQkJCTB4ODAwMAorI2RlZmluZSBQTTJSX0RfWF9ET00JCQkJCTB4ODAwOAorI2RlZmluZSBQTTJSX1NUQVJUX1hfU1VCCQkJCTB4ODAxMAorI2RlZmluZSBQTTJSX0RfWF9TVUIJCQkJCTB4ODAxOAorI2RlZmluZSBQTTJSX1NUQVJUX1kJCQkJCTB4ODAyMAorI2RlZmluZSBQTTJSX0RfWQkJCQkJMHg4MDI4CisjZGVmaW5lIFBNMlJfQ09VTlQJCQkJCTB4ODAzMAorI2RlZmluZSBQTTJSX1JFTkRFUgkJCQkJMHg4MDM4CisjZGVmaW5lIFBNMlJfUkFTVEVSSVpFUl9NT0RFCQkJCTB4ODBhMAorI2RlZmluZSBQTTJSX1JFQ1RBTkdMRV9PUklHSU4JCQkJMHg4MGQwCisjZGVmaW5lIFBNMlJfUkVDVEFOR0xFX1NJWkUJCQkJMHg4MGQ4CisjZGVmaW5lIFBNMlJfUEFDS0VEX0RBVEFfTElNSVRTCQkJCTB4ODE1MAorI2RlZmluZSBQTTJSX1NDSVNTT1JfTU9ERQkJCQkweDgxODAKKyNkZWZpbmUgUE0yUl9TQ1JFRU5fU0laRQkJCQkweDgxOTgKKyNkZWZpbmUgUE0yUl9BUkVBX1NUSVBQTEVfTU9ERQkJCQkweDgxYTAKKyNkZWZpbmUgUE0yUl9XSU5ET1dfT1JJR0lOCQkJCTB4ODFjOAorI2RlZmluZSBQTTJSX1RFWFRVUkVfQUREUkVTU19NT0RFCQkJMHg4MzgwCisjZGVmaW5lIFBNMlJfVEVYVFVSRV9NQVBfRk9STUFUCQkJCTB4ODU4OAorI2RlZmluZSBQTTJSX1RFWFRVUkVfREFUQV9GT1JNQVQJCQkweDg1OTAKKyNkZWZpbmUgUE0yUl9URVhUVVJFX1JFQURfTU9ERQkJCQkweDg2NzAKKyNkZWZpbmUgUE0yUl9URVhFTF9MVVRfTU9ERQkJCQkweDg2NzgKKyNkZWZpbmUgUE0yUl9URVhUVVJFX0NPTE9SX01PREUJCQkJMHg4NjgwCisjZGVmaW5lIFBNMlJfRk9HX01PREUJCQkJCTB4ODY5MAorI2RlZmluZSBQTTJSX0NPTE9SX0REQV9NT0RFCQkJCTB4ODdlMAorI2RlZmluZSBQTTJSX0FMUEhBX0JMRU5EX01PREUJCQkJMHg4ODEwCisjZGVmaW5lIFBNMlJfRElUSEVSX01PREUJCQkJMHg4ODE4CisjZGVmaW5lIFBNMlJfRkJfU09GVF9XUklURV9NQVNLCQkJCTB4ODgyMAorI2RlZmluZSBQTTJSX0xPR0lDQUxfT1BfTU9ERQkJCQkweDg4MjgKKyNkZWZpbmUgUE0yUl9MQl9SRUFEX01PREUJCQkJMHg4ODgwCisjZGVmaW5lIFBNMlJfTEJfUkVBRF9GT1JNQVQJCQkJMHg4ODg4CisjZGVmaW5lIFBNMlJfTEJfU09VUkNFX09GRlNFVAkJCQkweDg4OTAKKyNkZWZpbmUgUE0yUl9MQl9XSU5ET1dfQkFTRQkJCQkweDg4YjgKKyNkZWZpbmUgUE0yUl9MQl9XUklURV9GT1JNQVQJCQkJMHg4OGM4CisjZGVmaW5lIFBNMlJfU1RFTkNJTF9NT0RFCQkJCTB4ODk4OAorI2RlZmluZSBQTTJSX0RFUFRIX01PREUJCQkJCTB4ODlhMAorI2RlZmluZSBQTTJSX0ZCX1JFQURfTU9ERQkJCQkweDhhODAKKyNkZWZpbmUgUE0yUl9GQl9TT1VSQ0VfT0ZGU0VUCQkJCTB4OGE4OAorI2RlZmluZSBQTTJSX0ZCX1BJWEVMX09GRlNFVAkJCQkweDhhOTAKKyNkZWZpbmUgUE0yUl9GQl9XSU5ET1dfQkFTRQkJCQkweDhhYjAKKyNkZWZpbmUgUE0yUl9GQl9XUklURV9NT0RFCQkJCTB4OGFiOAorI2RlZmluZSBQTTJSX0ZCX0hBUkRfV1JJVEVfTUFTSwkJCQkweDhhYzAKKyNkZWZpbmUgUE0yUl9GQl9CTE9DS19DT0xPUgkJCQkweDhhYzgKKyNkZWZpbmUgUE0yUl9GQl9SRUFEX1BJWEVMCQkJCTB4OGFkMAorI2RlZmluZSBQTTJSX0ZJTFRFUl9NT0RFCQkJCTB4OGMwMAorI2RlZmluZSBQTTJSX1NZTkMJCQkJCTB4OGM0MAorI2RlZmluZSBQTTJSX1lVVl9NT0RFCQkJCQkweDhmMDAKKyNkZWZpbmUgUE0yUl9TVEFUSVNUSUNTX01PREUJCQkJMHg4YzA4CisjZGVmaW5lIFBNMlJfRkJfU09VUkNFX0RFTFRBCQkJCTB4OGQ4OAorI2RlZmluZSBQTTJSX0NPTkZJRwkJCQkJMHg4ZDkwCisjZGVmaW5lIFBNMlJfREVMVEFfTU9ERQkJCQkJMHg5MzAwCisKKy8qIFBlcm1lZGlhMnYgKi8KKyNkZWZpbmUgUE0yVlJfUkRfSU5ERVhfTE9XCQkJCTB4NDAyMAorI2RlZmluZSBQTTJWUl9SRF9JTkRFWF9ISUdICQkJCTB4NDAyOAorI2RlZmluZSBQTTJWUl9SRF9JTkRFWEVEX0RBVEEJCQkJMHg0MDMwCisKKy8qIFBlcm1lZGlhMiBSQU1EQUMgaW5kZXhlZCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgUE0ySV9SRF9DVVJTT1JfQ09OVFJPTAkJCQkweDA2CisjZGVmaW5lIFBNMklfUkRfQ09MT1JfTU9ERQkJCQkweDE4CisjZGVmaW5lIFBNMklfUkRfTU9ERV9DT05UUk9MCQkJCTB4MTkKKyNkZWZpbmUgUE0ySV9SRF9NSVNDX0NPTlRST0wJCQkJMHgxZQorI2RlZmluZSBQTTJJX1JEX1BJWEVMX0NMT0NLX0ExCQkJCTB4MjAKKyNkZWZpbmUgUE0ySV9SRF9QSVhFTF9DTE9DS19BMgkJCQkweDIxCisjZGVmaW5lIFBNMklfUkRfUElYRUxfQ0xPQ0tfQTMJCQkJMHgyMgorI2RlZmluZSBQTTJJX1JEX1BJWEVMX0NMT0NLX1NUQVRVUwkJCTB4MjkKKyNkZWZpbmUgUE0ySV9SRF9NRU1PUllfQ0xPQ0tfMQkJCQkweDMwCisjZGVmaW5lIFBNMklfUkRfTUVNT1JZX0NMT0NLXzIJCQkJMHgzMQorI2RlZmluZSBQTTJJX1JEX01FTU9SWV9DTE9DS18zCQkJCTB4MzIKKyNkZWZpbmUgUE0ySV9SRF9NRU1PUllfQ0xPQ0tfU1RBVFVTCQkJMHgzMworI2RlZmluZSBQTTJJX1JEX0NPTE9SX0tFWV9DT05UUk9MCQkJMHg0MAorI2RlZmluZSBQTTJJX1JEX09WRVJMQVlfS0VZCQkJCTB4NDEKKyNkZWZpbmUgUE0ySV9SRF9SRURfS0VZCQkJCQkweDQyCisjZGVmaW5lIFBNMklfUkRfR1JFRU5fS0VZCQkJCTB4NDMKKyNkZWZpbmUgUE0ySV9SRF9CTFVFX0tFWQkJCQkweDQ0CisKKy8qIFBlcm1lZGlhMnYgZXh0ZW5zaW9ucyAqLworI2RlZmluZSBQTTJWSV9SRF9NSVNDX0NPTlRST0wJCQkJMHgwMDAKKyNkZWZpbmUgUE0yVklfUkRfU1lOQ19DT05UUk9MCQkJCTB4MDAxCisjZGVmaW5lIFBNMlZJX1JEX0RBQ19DT05UUk9MCQkJCTB4MDAyCisjZGVmaW5lIFBNMlZJX1JEX1BJWEVMX1NJWkUJCQkJMHgwMDMKKyNkZWZpbmUgUE0yVklfUkRfQ09MT1JfRk9STUFUCQkJCTB4MDA0CisjZGVmaW5lIFBNMlZJX1JEX0NVUlNPUl9NT0RFCQkJCTB4MDA1CisjZGVmaW5lIFBNMlZJX1JEX0NVUlNPUl9YX0xPVwkJCQkweDAwNworI2RlZmluZSBQTTJWSV9SRF9DVVJTT1JfWF9ISUdICQkJCTB4MDA4CisjZGVmaW5lIFBNMlZJX1JEX0NVUlNPUl9ZX0xPVwkJCQkweDAwOQorI2RlZmluZSBQTTJWSV9SRF9DVVJTT1JfWV9ISUdICQkJCTB4MDBBCisjZGVmaW5lIFBNMlZJX1JEX0NVUlNPUl9YX0hPVAkJCQkweDAwQgorI2RlZmluZSBQTTJWSV9SRF9DVVJTT1JfWV9IT1QJCQkJMHgwMEMKKyNkZWZpbmUgUE0yVklfUkRfQ0xLMF9QUkVTQ0FMRQkJCQkweDIwMQorI2RlZmluZSBQTTJWSV9SRF9DTEswX0ZFRURCQUNLCQkJCTB4MjAyCisjZGVmaW5lIFBNMlZJX1JEX0NMSzBfUE9TVFNDQUxFCQkJCTB4MjAzCisjZGVmaW5lIFBNMlZJX1JEX0NMSzFfUFJFU0NBTEUJCQkJMHgyMDQKKyNkZWZpbmUgUE0yVklfUkRfQ0xLMV9GRUVEQkFDSwkJCQkweDIwNQorI2RlZmluZSBQTTJWSV9SRF9DTEsxX1BPU1RTQ0FMRQkJCQkweDIwNgorI2RlZmluZSBQTTJWSV9SRF9DVVJTT1JfUEFMRVRURQkJCQkweDMwMworI2RlZmluZSBQTTJWSV9SRF9DVVJTT1JfUEFUVEVSTgkJCQkweDQwMAorCisvKiBGaWVsZHMgYW5kIGZsYWdzICovCisjZGVmaW5lIFBNMkZfUkVOREVSX0FSRUFTVElQUExFCQkJCSgxTDw8MCkKKyNkZWZpbmUgUE0yRl9SRU5ERVJfRkFTVEZJTEwJCQkJKDFMPDwzKQorI2RlZmluZSBQTTJGX1JFTkRFUl9QUklNSVRJVkVfTUFTSwkJCSgzTDw8NikKKyNkZWZpbmUgUE0yRl9SRU5ERVJfTElORQkJCQkwCisjZGVmaW5lIFBNMkZfUkVOREVSX1RSQVBFWk9JRAkJCQkoMUw8PDYpCisjZGVmaW5lIFBNMkZfUkVOREVSX1BPSU5UCQkJCSgyTDw8NikKKyNkZWZpbmUgUE0yRl9SRU5ERVJfUkVDVEFOR0xFCQkJCSgzTDw8NikKKyNkZWZpbmUgUE0yRl9TWU5DSFJPTklaQVRJT04JCQkJKDFMPDwxMCkKKyNkZWZpbmUgUE0yRl9QTExfTE9DS0VECQkJCQkweDEwCisjZGVmaW5lIFBNMkZfQkVJTkdfUkVTRVQJCQkJKDFMPDwzMSkKKyNkZWZpbmUgUE0yRl9EQVRBVFlQRV9DT0xPUgkJCQkweDgwMDAKKyNkZWZpbmUgUE0yRl9WR0FfRU5BQkxFCQkJCQkweDAyCisjZGVmaW5lIFBNMkZfVkdBX0ZJWEVECQkJCQkweDA0CisjZGVmaW5lIFBNMkZfRkJfV1JJVEVfRU5BQkxFCQkJCTB4MDEKKyNkZWZpbmUgUE0yRl9GQl9SRUFEX1NPVVJDRV9FTkFCTEUJCQkweDAyMDAKKyNkZWZpbmUgUE0yRl9SRF9QQUxFVFRFX1dJRFRIXzgJCQkJMHgwMgorI2RlZmluZSBQTTJGX1BBUlRfUFJPRF9NQVNLCQkJCTB4MDFmZgorI2RlZmluZSBQTTJGX1NDUkVFTl9TQ0lTU09SX0VOQUJMRQkJCTB4MDIKKyNkZWZpbmUgUE0yRl9EQVRBXzY0X0VOQUJMRQkJCQkweDAwMDEwMDAwCisjZGVmaW5lIFBNMkZfQkxBTktfTE9XCQkJCQkweDAyCisjZGVmaW5lIFBNMkZfSFNZTkNfTUFTSwkJCQkJMHgxOAorI2RlZmluZSBQTTJGX1ZTWU5DX01BU0sJCQkJCTB4NjAKKyNkZWZpbmUgUE0yRl9IU1lOQ19BQ1RfSElHSAkJCQkweDA4CisjZGVmaW5lIFBNMkZfSFNZTkNfRk9SQ0VEX0xPVwkJCQkweDEwCisjZGVmaW5lIFBNMkZfSFNZTkNfQUNUX0xPVwkJCQkweDE4CisjZGVmaW5lIFBNMkZfVlNZTkNfQUNUX0hJR0gJCQkJMHgyMAorI2RlZmluZSBQTTJGX1ZTWU5DX0ZPUkNFRF9MT1cJCQkJMHg0MAorI2RlZmluZSBQTTJGX1ZTWU5DX0FDVF9MT1cJCQkJMHg2MAorI2RlZmluZSBQTTJGX0xJTkVfRE9VQkxFCQkJCTB4MDQKKyNkZWZpbmUgUE0yRl9WSURFT19FTkFCTEUJCQkJMHgwMQorI2RlZmluZSBQTTJGX1JEX1BJWEVMRk9STUFUX1NWR0EJCQkweDAxCisjZGVmaW5lIFBNMkZfUkRfUElYRUxGT1JNQVRfUkdCMjMyT0ZGU0VUCQkweDAyCisjZGVmaW5lIFBNMkZfUkRfUElYRUxGT1JNQVRfUkdCQTIzMjEJCQkweDAzCisjZGVmaW5lIFBNMkZfUkRfUElYRUxGT1JNQVRfUkdCQTU1NTEJCQkweDA0CisjZGVmaW5lIFBNMkZfUkRfUElYRUxGT1JNQVRfUkdCQTQ0NDQJCQkweDA1CisjZGVmaW5lIFBNMkZfUkRfUElYRUxGT1JNQVRfUkdCNTY1CQkJMHgwNgorI2RlZmluZSBQTTJGX1JEX1BJWEVMRk9STUFUX1JHQkE4ODg4CQkJMHgwOAorI2RlZmluZSBQTTJGX1JEX1BJWEVMRk9STUFUX1JHQjg4OAkJCTB4MDkKKyNkZWZpbmUgUE0yRl9SRF9HVUlfQUNUSVZFCQkJCTB4MTAKKyNkZWZpbmUgUE0yRl9SRF9DT0xPUl9NT0RFX1JHQgkJCQkweDIwCisjZGVmaW5lIFBNMkZfREVMVEFfT1JERVJfUkdCCQkJCSgxTDw8MTgpCisjZGVmaW5lIFBNMkZfUkRfVFJVRUNPTE9SCQkJCTB4ODAKKyNkZWZpbmUgUE0yRl9OT19BTFBIQV9CVUZGRVIJCQkJMHgxMAorI2RlZmluZSBQTTJGX1RFWFRFTF9TSVpFXzE2CQkJCTB4MDAwODAwMDAKKyNkZWZpbmUgUE0yRl9URVhURUxfU0laRV8zMgkJCQkweDAwMTAwMDAwCisjZGVmaW5lIFBNMkZfVEVYVEVMX1NJWkVfNAkJCQkweDAwMTgwMDAwCisjZGVmaW5lIFBNMkZfVEVYVEVMX1NJWkVfMjQJCQkJMHgwMDIwMDAwMAorI2RlZmluZSBQTTJGX0lOQ1JFQVNFX1gJCQkJCSgxTDw8MjEpCisjZGVmaW5lIFBNMkZfSU5DUkVBU0VfWQkJCQkJKDFMPDwyMikKKyNkZWZpbmUgUE0yRl9DT05GSUdfRkJfV1JJVEVfRU5BQkxFCQkJKDFMPDwzKQorI2RlZmluZSBQTTJGX0NPTkZJR19GQl9QQUNLRURfREFUQQkJCSgxTDw8MikKKyNkZWZpbmUgUE0yRl9DT05GSUdfRkJfUkVBRF9ERVNUX0VOQUJMRQkJCSgxTDw8MSkKKyNkZWZpbmUgUE0yRl9DT05GSUdfRkJfUkVBRF9TT1VSQ0VfRU5BQkxFCQkoMUw8PDApCisjZGVmaW5lIFBNMkZfQ09MT1JfS0VZX1RFU1RfT0ZGCQkJCSgxTDw8NCkKKyNkZWZpbmUgUE0yRl9NRU1fQ09ORklHX1JBTV9NQVNLCQkJKDNMPDwyOSkKKyNkZWZpbmUgUE0yRl9NRU1fQkFOS1NfMQkJCQkwTAorI2RlZmluZSBQTTJGX01FTV9CQU5LU18yCQkJCSgxTDw8MjkpCisjZGVmaW5lIFBNMkZfTUVNX0JBTktTXzMJCQkJKDJMPDwyOSkKKyNkZWZpbmUgUE0yRl9NRU1fQkFOS1NfNAkJCQkoM0w8PDI5KQorI2RlZmluZSBQTTJGX0FQRVJUVVJFX1NUQU5EQVJECQkJCTAKKyNkZWZpbmUgUE0yRl9BUEVSVFVSRV9CWVRFU1dBUAkJCQkxCisjZGVmaW5lIFBNMkZfQVBFUlRVUkVfSEFMRldPUkRTV0FQCQkJMgorCit0eXBlZGVmIGVudW0geworCVBNMl9UWVBFX1BFUk1FRElBMiwKKwlQTTJfVFlQRV9QRVJNRURJQTJWCit9IHBtMnR5cGVfdDsKKworI2VuZGlmIC8qIFBNMkZCX0ggKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUaGF0J3MgYWxsIGZvbGtzIQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS92aWRlby9wbTNmYi5oIGIvaW5jbHVkZS92aWRlby9wbTNmYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkM2NlZjUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3ZpZGVvL3BtM2ZiLmgKQEAgLTAsMCArMSwxMjQxIEBACisvKgorICogIGxpbnV4L2RyaXZlcnMvdmlkZW8vcG0zZmIuaCAtLSAzRExhYnMgUGVybWVkaWEzIGZyYW1lIGJ1ZmZlciBkZXZpY2UKKyAqICAKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUm9tYWluIERvbGJlYXUgPGRvbGJlYXVAaXJpc2EuZnI+CisgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFN2ZW4gTHV0aGVyLCA8bHV0aGVyQGRwdC1pbmZvLnUtc3RyYXNiZy5mcj4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlLiBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlIGZvcgorICogIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgJEhlYWRlcjogL2N2c3Jvb3QvbGludXgvZHJpdmVycy92aWRlby9wbTNmYi5oLHYgMS4xIDIwMDIvMDIvMjUgMTk6MTE6MDYgbWFyY2VsbyBFeHAgJAorICoKKyAqLworCisjaWZuZGVmIFBNM0ZCX0gKKyNkZWZpbmUgUE0zRkJfSAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgR0xJTlQgUGVybWVkaWEzIENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVycyAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogQ29udHJvbCBTdGF0dXMgUmVnaXN0ZXJzICovCisjZGVmaW5lIFBNM1Jlc2V0U3RhdHVzCQkJCQkJMHgwMDAwCisjZGVmaW5lIFBNM0ludEVuYWJsZQkJCQkJCTB4MDAwOAorI2RlZmluZSBQTTNJbnRGbGFncwkJCQkJCTB4MDAxMAorI2RlZmluZSBQTTNJbkZJRk9TcGFjZQkJCQkJCTB4MDAxOAorI2RlZmluZSBQTTNPdXRGSUZPV29yZHMJCQkJCQkweDAwMjAKKyNkZWZpbmUgUE0zRE1BQWRkcmVzcwkJCQkJCTB4MDAyOAorI2RlZmluZSBQTTNETUFDb3VudAkJCQkJCTB4MDAzMAorI2RlZmluZSBQTTNFcnJvckZsYWdzCQkJCQkJMHgwMDM4CisjZGVmaW5lIFBNM1ZDbGtDdGwJCQkJCQkweDAwNDAKKyNkZWZpbmUgUE0zVGVzdFJlZ2lzdGVyCQkJCQkJMHgwMDQ4CisjZGVmaW5lIFBNM0FwZXJ0dXJlMAkJCQkJCTB4MDA1MAorI2RlZmluZSBQTTNBcGVydHVyZTEJCQkJCQkweDAwNTgKKyNkZWZpbmUgUE0zRE1BQ29udHJvbAkJCQkJCTB4MDA2MAorI2RlZmluZSBQTTNGSUZPRGlzCQkJCQkJMHgwMDY4CisjZGVmaW5lIFBNM0NoaXBDb25maWcJCQkJCQkweDAwNzAKKyNkZWZpbmUgUE0zQUdQQ29udHJvbAkJCQkJCTB4MDA3OAorCisjZGVmaW5lIFBNM0dQT3V0RE1BQWRkcmVzcwkJCQkJMHgwMDgwCisjZGVmaW5lIFBNM1BDSUZlZWRiYWNrQ291bnQJCQkJCTB4MDA4OAorI2RlZmluZSBQTTNQQ0lBYm9ydFN0YXR1cwkJCQkJMHgwMDkwCisjZGVmaW5lIFBNM1BDSUFib3J0QWRkcmVzcwkJCQkJMHgwMDk4CisKKyNkZWZpbmUgUE0zUENJUExMU3RhdHVzCQkJCQkJMHgwMGYwCisKKyNkZWZpbmUgUE0zSG9zdFRleHR1cmVBZGRyZXNzCQkJCQkweDAxMDAKKyNkZWZpbmUgUE0zVGV4dHVyZURvd25sb2FkQ29udHJvbAkJCQkweDAxMDgKKyNkZWZpbmUgUE0zVGV4dHVyZU9wZXJhdGlvbgkJCQkJMHgwMTEwCisjZGVmaW5lIFBNM0xvZ2ljYWxUZXh0dXJlUGFnZQkJCQkJMHgwMTE4CisjZGVmaW5lIFBNM1RleERNQUFkZHJlc3MJCQkJCTB4MDEyMAorI2RlZmluZSBQTTNUZXhGSUZPU3BhY2UJCQkJCQkweDAxMjgKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEdMSU5UIFBlcm1lZGlhMyBSZWdpb24gMCBCeXBhc3MgQ29udHJvbHMgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgUE0zQnlBcGVydHVyZTFNb2RlCQkJCQkweDAzMDAKKwkjZGVmaW5lIFBNM0J5QXBlcnR1cmVNb2RlX0JZVEVTV0FQX0FCQ0QJCQkoMDw8MCkKKwkjZGVmaW5lIFBNM0J5QXBlcnR1cmVNb2RlX0JZVEVTV0FQX0JBREMJCQkoMTw8MCkKKwkjZGVmaW5lIFBNM0J5QXBlcnR1cmVNb2RlX0JZVEVTV0FQX0NEQUIJCQkoMjw8MCkKKwkjZGVmaW5lIFBNM0J5QXBlcnR1cmVNb2RlX0JZVEVTV0FQX0RDQkEJCQkoMzw8MCkKKwkjZGVmaW5lIFBNM0J5QXBlcnR1cmVNb2RlX1BBVENIX0RJU0FCTEUJCQkoMDw8MikKKwkjZGVmaW5lIFBNM0J5QXBlcnR1cmVNb2RlX1BBVENIX0VOQUJMRQkJCSgxPDwyKQorCSNkZWZpbmUgUE0zQnlBcGVydHVyZU1vZGVfRk9STUFUX1JBVwkJCSgwPDwzKQorCSNkZWZpbmUgUE0zQnlBcGVydHVyZU1vZGVfRk9STUFUX1lVWVYJCQkoMTw8MykKKwkjZGVmaW5lIFBNM0J5QXBlcnR1cmVNb2RlX0ZPUk1BVF9VWVZZCQkJKDI8PDMpCisJI2RlZmluZSBQTTNCeUFwZXJ0dXJlTW9kZV9QSVhFTFNJWkVfOEJJVAkJKDA8PDUpCisJI2RlZmluZSBQTTNCeUFwZXJ0dXJlTW9kZV9QSVhFTFNJWkVfMTZCSVQJCSgxPDw1KQorCSNkZWZpbmUgUE0zQnlBcGVydHVyZU1vZGVfUElYRUxTSVpFXzMyQklUCQkoMjw8NSkKKyAgICAgICAgICAgICAgICAjZGVmaW5lIFBNM0J5QXBlcnR1cmVNb2RlX1BJWEVMU0laRV9NQVNLICAgICAgICAoMzw8NSkKKwkjZGVmaW5lIFBNM0J5QXBlcnR1cmVNb2RlX0VGRkVDVElWRV9TVFJJREVfMTAyNAkJKDA8PDcpCisJI2RlZmluZSBQTTNCeUFwZXJ0dXJlTW9kZV9FRkZFQ1RJVkVfU1RSSURFXzIwNDgJCSgxPDw3KQorCSNkZWZpbmUgUE0zQnlBcGVydHVyZU1vZGVfRUZGRUNUSVZFX1NUUklERV80MDk2CQkoMjw8NykKKwkjZGVmaW5lIFBNM0J5QXBlcnR1cmVNb2RlX0VGRkVDVElWRV9TVFJJREVfODE5MgkJKDM8PDcpCisJI2RlZmluZSBQTTNCeUFwZXJ0dXJlTW9kZV9QQVRDSF9PRkZTRVRfWChvZmYpCSgoKG9mZikmN2YpPDw5KQorCSNkZWZpbmUgUE0zQnlBcGVydHVyZU1vZGVfUEFUQ0hfT0ZGU0VUX1kob2ZmKQkoKChvZmYpJjdmKTw8MTYpCisJI2RlZmluZSBQTTNCeUFwZXJ0dXJlTW9kZV9GUkFNRUJVRkZFUgkJCSgwPDwyMSkKKwkjZGVmaW5lIFBNM0J5QXBlcnR1cmVNb2RlX0xPQ0FMQlVGRkVSCQkJKDE8PDIxKQorCSNkZWZpbmUgUE0zQnlBcGVydHVyZU1vZGVfRE9VQkxFX1dSSVRFX09GRgkJKDA8PDIyKQorCSNkZWZpbmUgUE0zQnlBcGVydHVyZU1vZGVfRE9VQkxFX1dSSVRFXzFNQgkJKDE8PDIyKQorCSNkZWZpbmUgUE0zQnlBcGVydHVyZU1vZGVfRE9VQkxFX1dSSVRFXzJNQgkJKDI8PDIyKQorCSNkZWZpbmUgUE0zQnlBcGVydHVyZU1vZGVfRE9VQkxFX1dSSVRFXzRNQgkJKDM8PDIyKQorCSNkZWZpbmUgUE0zQnlBcGVydHVyZU1vZGVfRE9VQkxFX1dSSVRFXzhNQgkJKDQ8PDIyKQorCSNkZWZpbmUgUE0zQnlBcGVydHVyZU1vZGVfRE9VQkxFX1dSSVRFXzE2TUIJCSg1PDwyMikKKwkjZGVmaW5lIFBNM0J5QXBlcnR1cmVNb2RlX0RPVUJMRV9XUklURV8zMk1CCQkoNjw8MjIpCisKKyNkZWZpbmUgUE0zQnlBcGVydHVyZTJNb2RlCQkJCQkweDAzMjgKKwkKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBHTElOVCBQZXJtZWRpYTMgTWVtb3J5IENvbnRyb2wgKDB4MTAwMCkgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFBNM01lbUNvdW50ZXIJCQkJCQkweDEwMDAKKyNkZWZpbmUgUE0zTWVtQnlwYXNzV3JpdGVNYXNrCQkJCQkweDEwMDgKKyNkZWZpbmUgUE0zTWVtU2NyYXRjaAkJCQkJCTB4MTAxMAorI2RlZmluZSBQTTNMb2NhbE1lbUNhcHMJCQkJCQkweDEwMTgKKyAgICAgICAgI2RlZmluZSBQTTNMb2NhbE1lbUNhcHNfTm9Xcml0ZU1hc2sgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyOCkKKyNkZWZpbmUgUE0zTG9jYWxNZW1UaW1pbmdzCQkJCQkweDEwMjAKKyNkZWZpbmUgUE0zTG9jYWxNZW1Db250cm9sCQkJCQkweDEwMjgKKyNkZWZpbmUgUE0zTG9jYWxNZW1SZWZyZXNoCQkJCQkweDEwMzAKKyNkZWZpbmUgUE0zTG9jYWxNZW1Qb3dlckRvd24JCQkJCTB4MTAzOAorI2RlZmluZSBQTTNSZW1vdGVNZW1Db250cm9sCQkJCQkweDExMDAKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEdMSU5UIFBlcm1lZGlhMyBWaWRlbyBDb250cm9sICgweDMwMDApICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBQTTNTY3JlZW5CYXNlCQkJCQkJMHgzMDAwCisjZGVmaW5lIFBNM1NjcmVlblN0cmlkZQkJCQkJCTB4MzAwOAorI2RlZmluZSBQTTNIVG90YWwJCQkJCQkweDMwMTAKKyNkZWZpbmUgUE0zSGdFbmQJCQkJCQkweDMwMTgKKyNkZWZpbmUgUE0zSGJFbmQJCQkJCQkweDMwMjAKKyNkZWZpbmUgUE0zSHNTdGFydAkJCQkJCTB4MzAyOAorI2RlZmluZSBQTTNIc0VuZAkJCQkJCTB4MzAzMAorI2RlZmluZSBQTTNWVG90YWwJCQkJCQkweDMwMzgKKyNkZWZpbmUgUE0zVmJFbmQJCQkJCQkweDMwNDAKKyNkZWZpbmUgUE0zVnNTdGFydAkJCQkJCTB4MzA0OAorI2RlZmluZSBQTTNWc0VuZAkJCQkJCTB4MzA1MAorI2RlZmluZSBQTTNWaWRlb0NvbnRyb2wJCQkJCQkweDMwNTgKKwkjZGVmaW5lIFBNM1ZpZGVvQ29udHJvbF9ESVNBQkxFCQkJCSgwPDwwKQorCSNkZWZpbmUgUE0zVmlkZW9Db250cm9sX0VOQUJMRQkJCQkoMTw8MCkKKwkjZGVmaW5lIFBNM1ZpZGVvQ29udHJvbF9CTEFOS19BQ1RJVkVfSElHSAkJKDA8PDEpCisJI2RlZmluZSBQTTNWaWRlb0NvbnRyb2xfQkxBTktfQUNUSVZFX0xPVwkJKDE8PDEpCisJI2RlZmluZSBQTTNWaWRlb0NvbnRyb2xfTElORV9ET1VCTEVfT0ZGCQkJKDA8PDIpCisJI2RlZmluZSBQTTNWaWRlb0NvbnRyb2xfTElORV9ET1VCTEVfT04JCQkoMTw8MikKKwkjZGVmaW5lIFBNM1ZpZGVvQ29udHJvbF9IU1lOQ19GT1JDRV9ISUdICQkoMDw8MykKKwkjZGVmaW5lIFBNM1ZpZGVvQ29udHJvbF9IU1lOQ19BQ1RJVkVfSElHSAkJKDE8PDMpCisJI2RlZmluZSBQTTNWaWRlb0NvbnRyb2xfSFNZTkNfRk9SQ0VfTE9XCQkJKDI8PDMpCisJI2RlZmluZSBQTTNWaWRlb0NvbnRyb2xfSFNZTkNfQUNUSVZFX0xPVwkJKDM8PDMpCisgICAgICAgICNkZWZpbmUgUE0zVmlkZW9Db250cm9sX0hTWU5DX01BU0sgICAgICAgICAgKDM8PDMpCisJI2RlZmluZSBQTTNWaWRlb0NvbnRyb2xfVlNZTkNfRk9SQ0VfSElHSAkJKDA8PDUpCisJI2RlZmluZSBQTTNWaWRlb0NvbnRyb2xfVlNZTkNfQUNUSVZFX0hJR0gJCSgxPDw1KQorCSNkZWZpbmUgUE0zVmlkZW9Db250cm9sX1ZTWU5DX0ZPUkNFX0xPVwkJCSgyPDw1KQorCSNkZWZpbmUgUE0zVmlkZW9Db250cm9sX1ZTWU5DX0FDVElWRV9MT1cJCSgzPDw1KQorICAgICAgICAjZGVmaW5lIFBNM1ZpZGVvQ29udHJvbF9WU1lOQ19NQVNLICAgICAgICAgICgzPDw1KQorCSNkZWZpbmUgUE0zVmlkZW9Db250cm9sX0JZVEVfRE9VQkxFX09GRgkJCSgwPDw3KQorCSNkZWZpbmUgUE0zVmlkZW9Db250cm9sX0JZVEVfRE9VQkxFX09OCQkJKDE8PDcpCisJI2RlZmluZSBQTTNWaWRlb0NvbnRyb2xfQlVGRkVSX1NXQVBfU1lOQ09OX0ZSQU1FQkxBTksJKDA8PDkpCisJI2RlZmluZSBQTTNWaWRlb0NvbnRyb2xfQlVGRkVSX1NXQVBfRlJFRV9SVU5OSU5HCSgxPDw5KQorCSNkZWZpbmUgUE0zVmlkZW9Db250cm9sX0JVRkZFUl9TV0FQX0xJTUlURVRPX0ZSQU1FUkFURQkoMjw8OSkKKwkjZGVmaW5lIFBNM1ZpZGVvQ29udHJvbF9TVEVSRU9fRElTQUJMRQkJCSgwPDwxMSkKKwkjZGVmaW5lIFBNM1ZpZGVvQ29udHJvbF9TVEVSRU9fRU5BQkxFCQkJKDE8PDExKQorCSNkZWZpbmUgUE0zVmlkZW9Db250cm9sX1JJR0hUX0VZRV9BQ1RJVkVfSElHSAkJKDA8PDEyKQorCSNkZWZpbmUgUE0zVmlkZW9Db250cm9sX1JJR0hUX0VZRV9BQ1RJVkVfTE9XCQkoMTw8MTIpCisJI2RlZmluZSBQTTNWaWRlb0NvbnRyb2xfVklERU9fRVhUX0xPVwkJCSgwPDwxNCkKKwkjZGVmaW5lIFBNM1ZpZGVvQ29udHJvbF9WSURFT19FWFRfSElHSAkJCSgxPDwxNCkKKwkjZGVmaW5lIFBNM1ZpZGVvQ29udHJvbF9TWU5DX01PREVfSU5ERVBFTkRFTlQJCSgwPDwxNikKKwkjZGVmaW5lIFBNM1ZpZGVvQ29udHJvbF9TWU5DX01PREVfU1lOQ1RPX1ZTQQkJKDE8PDE2KQorCSNkZWZpbmUgUE0zVmlkZW9Db250cm9sX1NZTkNfTU9ERV9TWU5DVE9fVlNCCQkoMjw8MTYpCisJI2RlZmluZSBQTTNWaWRlb0NvbnRyb2xfUEFUQ0hfRElTQUJMRQkJCSgwPDwxOCkKKwkjZGVmaW5lIFBNM1ZpZGVvQ29udHJvbF9QQVRDSF9FTkFCTEUJCQkoMTw8MTgpCisJI2RlZmluZSBQTTNWaWRlb0NvbnRyb2xfUElYRUxTSVpFXzhCSVQJCQkoMDw8MTkpCisJI2RlZmluZSBQTTNWaWRlb0NvbnRyb2xfUElYRUxTSVpFXzE2QklUCQkJKDE8PDE5KQorCSNkZWZpbmUgUE0zVmlkZW9Db250cm9sX1BJWEVMU0laRV8zMkJJVAkJCSgyPDwxOSkKKwkjZGVmaW5lIFBNM1ZpZGVvQ29udHJvbF9ESVNQTEFZX0RJU0FCTEUJCQkoMDw8MjEpCisJI2RlZmluZSBQTTNWaWRlb0NvbnRyb2xfRElTUExBWV9FTkFCTEUJCQkoMTw8MjEpCisJI2RlZmluZSBQTTNWaWRlb0NvbnRyb2xfUEFUQ0hfT0ZGU0VUX1gob2ZmKQkoKChvZmYpJjB4M2YpPDwyMikKKwkjZGVmaW5lIFBNM1ZpZGVvQ29udHJvbF9QQVRDSF9PRkZTRVRfWShvZmYpCSgoKG9mZikmMHgzZik8PDI4KQorI2RlZmluZSBQTTNJbnRlcnJ1cHRMaW5lCQkJCQkweDMwNjAKKyNkZWZpbmUgUE0zRGlzcGxheURhdGEJCQkJCQkweDMwNjgKKyNkZWZpbmUgUE0zVmVydGljYWxMaW5lQ291bnQJCQkJCTB4MzA3MAorI2RlZmluZSBQTTNGaWZvQ29udHJvbAkJCQkJCTB4MzA3OAorI2RlZmluZSBQTTNTY3JlZW5CYXNlUmlnaHQJCQkJCTB4MzA4MAorI2RlZmluZSBQTTNNaXNjQ29udHJvbAkJCQkJCTB4MzA4OAorCisjZGVmaW5lIFBNM1ZpZGVvT3ZlcmxheVVwZGF0ZQkJCQkJMHgzMTAwCisgICAgICAgICNkZWZpbmUgUE0zVmlkZW9PdmVybGF5VXBkYXRlX0RJU0FCTEUgICAgICAgICAgICAgICAgICAgKDA8PDApCisgICAgICAgICNkZWZpbmUgUE0zVmlkZW9PdmVybGF5VXBkYXRlX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgKDE8PDApCisjZGVmaW5lIFBNM1ZpZGVvT3ZlcmxheU1vZGUJCQkJCTB4MzEwOAorCSNkZWZpbmUgUE0zVmlkZW9PdmVybGF5TW9kZV9ESVNBQkxFCQkJKDA8PDApCisJI2RlZmluZSBQTTNWaWRlb092ZXJsYXlNb2RlX0VOQUJMRQkJCSgxPDwwKQorICAgICAgICAjZGVmaW5lIFBNM1ZpZGVvT3ZlcmxheU1vZGVfQlVGRkVSU1lOQ19NQU5VQUwgICAgICAgICAgICgwPDwxKQorICAgICAgICAjZGVmaW5lIFBNM1ZpZGVvT3ZlcmxheU1vZGVfQlVGRkVSU1lOQ19WSURFT1NUUkVBTUEgICAgICgxPDwxKQorICAgICAgICAjZGVmaW5lIFBNM1ZpZGVvT3ZlcmxheU1vZGVfQlVGRkVSU1lOQ19WSURFT1NUUkVBTUIgICAgICgyPDwxKQorICAgICAgICAjZGVmaW5lIFBNM1ZpZGVvT3ZlcmxheU1vZGVfRklFTERQT0xBUklUWV9OT1JNQUwgICAgICAgICgwPDw0KQorICAgICAgICAjZGVmaW5lIFBNM1ZpZGVvT3ZlcmxheU1vZGVfRklFTERQT0xBUklUWV9JTlZFUlQgICAgICAgICgxPDw0KQorICAgICAgICAjZGVmaW5lIFBNM1ZpZGVvT3ZlcmxheU1vZGVfUElYRUxTSVpFXzhCSVQgICAgICAgICAgICAgICgwPDw1KQorICAgICAgICAjZGVmaW5lIFBNM1ZpZGVvT3ZlcmxheU1vZGVfUElYRUxTSVpFXzE2QklUICAgICAgICAgICAgICgxPDw1KQorICAgICAgICAjZGVmaW5lIFBNM1ZpZGVvT3ZlcmxheU1vZGVfUElYRUxTSVpFXzMyQklUICAgICAgICAgICAgICgyPDw1KQorICAgICAgICAjZGVmaW5lIFBNM1ZpZGVvT3ZlcmxheU1vZGVfQ09MT1JGT1JNQVRfUkdCODg4OCAoKDA8PDcpfCgxPDwxMil8KDI8PDUpKQorICAgICAgICAjZGVmaW5lIFBNM1ZpZGVvT3ZlcmxheU1vZGVfQ09MT1JGT1JNQVRfUkdCNDQ0NCAoKDE8PDcpfCgxPDwxMil8KDE8PDUpKQorICAgICAgICAjZGVmaW5lIFBNM1ZpZGVvT3ZlcmxheU1vZGVfQ09MT1JGT1JNQVRfUkdCNTU1MSAoKDI8PDcpfCgxPDwxMil8KDE8PDUpKQorICAgICAgICAjZGVmaW5lIFBNM1ZpZGVvT3ZlcmxheU1vZGVfQ09MT1JGT1JNQVRfUkdCNTY1ICAoKDM8PDcpfCgxPDwxMil8KDE8PDUpKQorICAgICAgICAjZGVmaW5lIFBNM1ZpZGVvT3ZlcmxheU1vZGVfQ09MT1JGT1JNQVRfUkdCMzMyICAoKDQ8PDcpfCgxPDwxMil8KDA8PDUpKQorICAgICAgICAjZGVmaW5lIFBNM1ZpZGVvT3ZlcmxheU1vZGVfQ09MT1JGT1JNQVRfQkdSODg4OCAoKDA8PDcpfCgyPDw1KSkKKyAgICAgICAgI2RlZmluZSBQTTNWaWRlb092ZXJsYXlNb2RlX0NPTE9SRk9STUFUX0JHUjQ0NDQgKCgxPDw3KXwoMTw8NSkpCisgICAgICAgICNkZWZpbmUgUE0zVmlkZW9PdmVybGF5TW9kZV9DT0xPUkZPUk1BVF9CR1I1NTUxICgoMjw8Nyl8KDE8PDUpKQorICAgICAgICAjZGVmaW5lIFBNM1ZpZGVvT3ZlcmxheU1vZGVfQ09MT1JGT1JNQVRfQkdSNTY1ICAoKDM8PDcpfCgxPDw1KSkKKyAgICAgICAgI2RlZmluZSBQTTNWaWRlb092ZXJsYXlNb2RlX0NPTE9SRk9STUFUX0JHUjMzMiAgKCg0PDw3KXwoMDw8NSkpCisgICAgICAgICNkZWZpbmUgUE0zVmlkZW9PdmVybGF5TW9kZV9DT0xPUkZPUk1BVF9DSTggICAgICgoNTw8Nyl8KDE8PDEyKXwoMDw8NSkpCisgICAgICAgICNkZWZpbmUgUE0zVmlkZW9PdmVybGF5TW9kZV9DT0xPUkZPUk1BVF9WVVk0NDQgICgoMjw8MTApfCgxPDwxMil8KDI8PDUpKQorICAgICAgICAjZGVmaW5lIFBNM1ZpZGVvT3ZlcmxheU1vZGVfQ09MT1JGT1JNQVRfWVVWNDQ0ICAoKDI8PDEwKXwoMjw8NSkpCisgICAgICAgICNkZWZpbmUgUE0zVmlkZW9PdmVybGF5TW9kZV9DT0xPUkZPUk1BVF9WVVk0MjIgICgoMTw8MTApfCgxPDwxMil8KDE8PDUpKQorICAgICAgICAjZGVmaW5lIFBNM1ZpZGVvT3ZlcmxheU1vZGVfQ09MT1JGT1JNQVRfWVVWNDIyICAoKDE8PDEwKXwoMTw8NSkpCisgICAgICAgICNkZWZpbmUgUE0zVmlkZW9PdmVybGF5TW9kZV9DT0xPUk9SREVSX0JHUiAgICAgICAgICAgICAgKDA8PDEyKQorICAgICAgICAjZGVmaW5lIFBNM1ZpZGVvT3ZlcmxheU1vZGVfQ09MT1JPUkRFUl9SR0IgICAgICAgICAgICAgICgxPDwxMikKKyAgICAgICAgI2RlZmluZSBQTTNWaWRlb092ZXJsYXlNb2RlX0xJTkVBUkNPTE9SRVhUX09GRiAgICAgICAgICAoMDw8MTMpCisgICAgICAgICNkZWZpbmUgUE0zVmlkZW9PdmVybGF5TW9kZV9MSU5FQVJDT0xPUkVYVF9PTiAgICAgICAgICAgKDE8PDEzKQorICAgICAgICAjZGVmaW5lIFBNM1ZpZGVvT3ZlcmxheU1vZGVfRklMVEVSX01BU0sgICAgICAgICAgICAgICAgICgzPDwxNCkKKyAgICAgICAgI2RlZmluZSBQTTNWaWRlb092ZXJsYXlNb2RlX0ZJTFRFUl9PRkYgICAgICAgICAgICAgICAgICAoMDw8MTQpCisgICAgICAgICNkZWZpbmUgUE0zVmlkZW9PdmVybGF5TW9kZV9GSUxURVJfRlVMTCAgICAgICAgICAgICAgICAgKDE8PDE0KQorICAgICAgICAjZGVmaW5lIFBNM1ZpZGVvT3ZlcmxheU1vZGVfRklMVEVSX1BBUlRJQUwgICAgICAgICAgICAgICgyPDwxNCkKKyAgICAgICAgI2RlZmluZSBQTTNWaWRlb092ZXJsYXlNb2RlX0RFSU5URVJMQUNFX09GRiAgICAgICAgICAgICAoMDw8MTYpCisgICAgICAgICNkZWZpbmUgUE0zVmlkZW9PdmVybGF5TW9kZV9ERUlOVEVSTEFDRV9CT0IgICAgICAgICAgICAgKDE8PDE2KQorICAgICAgICAjZGVmaW5lIFBNM1ZpZGVvT3ZlcmxheU1vZGVfUEFUQ0hNT0RFX09GRiAgICAgICAgICAgICAgICgwPDwxOCkKKyAgICAgICAgI2RlZmluZSBQTTNWaWRlb092ZXJsYXlNb2RlX1BBVENITU9ERV9PTiAgICAgICAgICAgICAgICAoMTw8MTgpCisgICAgICAgICNkZWZpbmUgUE0zVmlkZW9PdmVybGF5TW9kZV9GTElQX1ZJREVPICAgICAgICAgICAgICAgICAgKDA8PDIwKQorICAgICAgICAjZGVmaW5lIFBNM1ZpZGVvT3ZlcmxheU1vZGVfRkxJUF9WSURFT1NUUkVBTUEgICAgICAgICAgICgxPDwyMCkKKyAgICAgICAgI2RlZmluZSBQTTNWaWRlb092ZXJsYXlNb2RlX0ZMSVBfVklERU9TVFJFQU1CICAgICAgICAgICAoMjw8MjApCisgICAgICAgICNkZWZpbmUgUE0zVmlkZW9PdmVybGF5TW9kZV9NSVJST1JfTUFTSyAgICAgICAgICAgICAgICAgKDM8PDIzKQorICAgICAgICAjZGVmaW5lIFBNM1ZpZGVvT3ZlcmxheU1vZGVfTUlSUk9SWF9PRkYgICAgICAgICAgICAgICAgICgwPDwyMykKKyAgICAgICAgI2RlZmluZSBQTTNWaWRlb092ZXJsYXlNb2RlX01JUlJPUlhfT04gICAgICAgICAgICAgICAgICAoMTw8MjMpCisgICAgICAgICNkZWZpbmUgUE0zVmlkZW9PdmVybGF5TW9kZV9NSVJST1JZX09GRiAgICAgICAgICAgICAgICAgKDA8PDI0KQorICAgICAgICAjZGVmaW5lIFBNM1ZpZGVvT3ZlcmxheU1vZGVfTUlSUk9SWV9PTiAgICAgICAgICAgICAgICAgICgxPDwyNCkKKyNkZWZpbmUgUE0zVmlkZW9PdmVybGF5Rmlmb0NvbnRyb2wJCQkJMHgzMTEwCisjZGVmaW5lIFBNM1ZpZGVvT3ZlcmxheUluZGV4CQkJCQkweDMxMTgKKyNkZWZpbmUgUE0zVmlkZW9PdmVybGF5QmFzZTAJCQkJCTB4MzEyMAorI2RlZmluZSBQTTNWaWRlb092ZXJsYXlCYXNlMQkJCQkJMHgzMTI4CisjZGVmaW5lIFBNM1ZpZGVvT3ZlcmxheUJhc2UyCQkJCQkweDMxMzAKKyNkZWZpbmUgUE0zVmlkZW9PdmVybGF5U3RyaWRlCQkJCQkweDMxMzgKKyAgICAgICAgI2RlZmluZSBQTTNWaWRlb092ZXJsYXlTdHJpZGVfU1RSSURFKHMpICAgICAgICAgKCgocykmMHhmZmYpPDwwKQorI2RlZmluZSBQTTNWaWRlb092ZXJsYXlXaWR0aCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzE0MAorICAgICAgICAjZGVmaW5lIFBNM1ZpZGVvT3ZlcmxheVdpZHRoX1dJRFRIKHcpICAgICAgICAgICAoKCh3KSYweGZmZik8PDApCisjZGVmaW5lIFBNM1ZpZGVvT3ZlcmxheUhlaWdodCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzMTQ4CisgICAgICAgICNkZWZpbmUgUE0zVmlkZW9PdmVybGF5SGVpZ2h0X0hFSUdIVChoKSAgICAgICAgICgoKGgpJjB4ZmZmKTw8MCkKKyNkZWZpbmUgUE0zVmlkZW9PdmVybGF5T3JpZ2luICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDMxNTAKKyAgICAgICAgI2RlZmluZSBQTTNWaWRlb092ZXJsYXlPcmlnaW5fWE9SSUdJTih4KSAgICAgICAgKCgoeCkmMHhmZmYpPDwwKQorICAgICAgICAjZGVmaW5lIFBNM1ZpZGVvT3ZlcmxheU9yaWdpbl9ZT1JJR0lOKHkpICAgICAgICAoKCh5KSYweGZmZik8PDE2KQorI2RlZmluZSBQTTNWaWRlb092ZXJsYXlTaHJpbmtYRGVsdGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzE1OAorICAgICAgICAjZGVmaW5lIFBNM1ZpZGVvT3ZlcmxheVNocmlua1hEZWx0YV9OT05FICAgICAgICAgICAgICAgICgxPDwxNikKKyAgICAgICAgI2RlZmluZSBQTTNWaWRlb092ZXJsYXlTaHJpbmtYRGVsdGFfREVMVEEocyxkKSAgICAgICAgICBcCisgICAgICAgICAgICAgICAgKCgoKHMpPDwxNikvKGQpKSYweDBmZmZmZmYwKQorI2RlZmluZSBQTTNWaWRlb092ZXJsYXlab29tWERlbHRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzE2MAorICAgICAgICAjZGVmaW5lIFBNM1ZpZGVvT3ZlcmxheVpvb21YRGVsdGFfTk9ORSAgICAgICAgICAgICAgICAgICgxPDwxNikKKyAgICAgICAgI2RlZmluZSBQTTNWaWRlb092ZXJsYXlab29tWERlbHRhX0RFTFRBKHMsZCkgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgKCgoKHMpPDwxNikvKGQpKSYweDAwMDFmZmYwKQorI2RlZmluZSBQTTNWaWRlb092ZXJsYXlZRGVsdGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzE2OAorICAgICAgICAjZGVmaW5lIFBNM1ZpZGVvT3ZlcmxheVlEZWx0YV9OT05FICAgICAgICAgICAgICAgICAgICAgICgxPDwxNikKKyAgICAgICAgI2RlZmluZSBQTTNWaWRlb092ZXJsYXlZRGVsdGFfREVMVEEocyxkKSAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAoKCgocyk8PDE2KS8oZCkpJjB4MGZmZmZmZjApCisjZGVmaW5lIFBNM1ZpZGVvT3ZlcmxheUZpZWxkT2Zmc2V0CQkJCTB4MzE3MAorI2RlZmluZSBQTTNWaWRlb092ZXJsYXlTdGF0dXMJCQkJCTB4MzE3OAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgR0xJTlQgUGVybWVkaWEzIFJBTURBQyBSZWdpc3RlcnMgKDB4NDAwMCkgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogRGlyZWN0IFJlZ2lzdGVycyAqLworI2RlZmluZSBQTTNSRF9QYWxldHRlV3JpdGVBZGRyZXNzCQkJCTB4NDAwMAorI2RlZmluZSBQTTNSRF9QYWxldHRlRGF0YQkJCQkJMHg0MDA4CisjZGVmaW5lIFBNM1JEX1BpeGVsTWFzawkJCQkJCTB4NDAxMAorI2RlZmluZSBQTTNSRF9QYWxldHRlUmVhZEFkZHJlc3MJCQkJMHg0MDE4CisKKyNkZWZpbmUgUE0zUkRfSW5kZXhMb3cJCQkJCQkweDQwMjAKKyNkZWZpbmUgUE0zUkRfSW5kZXhIaWdoCQkJCQkJMHg0MDI4CisjZGVmaW5lIFBNM1JEX0luZGV4ZWREYXRhCQkJCQkweDQwMzAKKyNkZWZpbmUgUE0zUkRfSW5kZXhDb250cm9sCQkJCQkweDQwMzgKKwkjZGVmaW5lIFBNM1JEX0luZGV4Q29udHJvbF9BVVRPSU5DUkVNRU5UX0VOQUJMRQkJKDE8PDApCisJI2RlZmluZSBQTTNSRF9JbmRleENvbnRyb2xfQVVUT0lOQ1JFTUVOVF9ESVNBQkxFCSgwPDwwKQorCisvKiBJbmRpcmVjdCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgUE0zUkRfTWlzY0NvbnRyb2wJCQkJCTB4MDAwCisJI2RlZmluZSBQTTNSRF9NaXNjQ29udHJvbF9ISUdIQ09MT1JfUkVTX0RJU0FCTEUJCSgwPDwwKQorCSNkZWZpbmUgUE0zUkRfTWlzY0NvbnRyb2xfSElHSENPTE9SX1JFU19FTkFCTEUJCSgxPDwwKQorCSNkZWZpbmUgUE0zUkRfTWlzY0NvbnRyb2xfUElYRUxET1VCTEVfRElTQUJMRQkJKDA8PDEpCisJI2RlZmluZSBQTTNSRF9NaXNjQ29udHJvbF9QSVhFTERPVUJMRV9FTkFCTEUJCSgxPDwxKQorCSNkZWZpbmUgUE0zUkRfTWlzY0NvbnRyb2xfTEFTVFJFQURfQUREUl9ESVNBQkxFCQkoMDw8MikKKwkjZGVmaW5lIFBNM1JEX01pc2NDb250cm9sX0xBU1RSRUFEX0FERFJfRU5BQkxFCQkoMTw8MikKKwkjZGVmaW5lIFBNM1JEX01pc2NDb250cm9sX0RJUkVDVENPTE9SX0RJU0FCTEUJCSgwPDwzKQorCSNkZWZpbmUgUE0zUkRfTWlzY0NvbnRyb2xfRElSRUNUQ09MT1JfRU5BQkxFCQkoMTw8MykKKwkjZGVmaW5lIFBNM1JEX01pc2NDb250cm9sX09WRVJMQVlfRElTQUJMRQkJKDA8PDQpCisJI2RlZmluZSBQTTNSRF9NaXNjQ29udHJvbF9PVkVSTEFZX0VOQUJMRQkJKDE8PDQpCisJI2RlZmluZSBQTTNSRF9NaXNjQ29udHJvbF9QSVhFTERPVUJMRV9CVUZGRVJfRElTQUJMRQkoMDw8NSkKKwkjZGVmaW5lIFBNM1JEX01pc2NDb250cm9sX1BJWEVMRE9VQkxFX0JVRkZFUl9FTkFCTEUJKDE8PDUpCisJI2RlZmluZSBQTTNSRF9NaXNjQ29udHJvbF9WU0JfT1VUUFVUX0RJU0FCTEUJCSgwPDw2KQorCSNkZWZpbmUgUE0zUkRfTWlzY0NvbnRyb2xfVlNCX09VVFBVVF9FTkFCTEUJCSgxPDw2KQorCSNkZWZpbmUgUE0zUkRfTWlzY0NvbnRyb2xfU1RFUkVPRE9VQkxFX0JVRkZFUl9ESVNBQkxFCSgwPDw3KQorCSNkZWZpbmUgUE0zUkRfTWlzY0NvbnRyb2xfU1RFUkVPRE9VQkxFX0JVRkZFUl9FTkFCTEUJKDE8PDcpCisjZGVmaW5lIFBNM1JEX1N5bmNDb250cm9sCQkJCQkweDAwMQorCSNkZWZpbmUgUE0zUkRfU3luY0NvbnRyb2xfSFNZTkNfQUNUSVZFX0xPVwkJKDA8PDApCisJI2RlZmluZSBQTTNSRF9TeW5jQ29udHJvbF9IU1lOQ19BQ1RJVkVfSElHSAkJKDE8PDApCisJI2RlZmluZSBQTTNSRF9TeW5jQ29udHJvbF9IU1lOQ19GT1JDRV9BQ1RJVkUJCSgzPDwwKQorCSNkZWZpbmUgUE0zUkRfU3luY0NvbnRyb2xfSFNZTkNfRk9SQ0VfSU5BQ1RJVkUJCSg0PDwwKQorCSNkZWZpbmUgUE0zUkRfU3luY0NvbnRyb2xfSFNZTkNfVFJJX1NUQVRFCQkoMjw8MCkKKwkjZGVmaW5lIFBNM1JEX1N5bmNDb250cm9sX1ZTWU5DX0FDVElWRV9MT1cJCSgwPDwzKQorCSNkZWZpbmUgUE0zUkRfU3luY0NvbnRyb2xfVlNZTkNfQUNUSVZFX0hJR0gJCSgxPDwzKQorCSNkZWZpbmUgUE0zUkRfU3luY0NvbnRyb2xfVlNZTkNfVFJJX1NUQVRFCQkoMjw8MykKKwkjZGVmaW5lIFBNM1JEX1N5bmNDb250cm9sX1ZTWU5DX0ZPUkNFX0FDVElWRQkJKDM8PDMpCisJI2RlZmluZSBQTTNSRF9TeW5jQ29udHJvbF9WU1lOQ19GT1JDRV9JTkFDVElWRQkJKDQ8PDMpCisJI2RlZmluZSBQTTNSRF9TeW5jQ29udHJvbF9IU1lOQ19PVkVSUklERV9TRVRCWV9IU1lOQwkoMDw8NikKKwkjZGVmaW5lIFBNM1JEX1N5bmNDb250cm9sX0hTWU5DX09WRVJSSURFX0ZPUkNFX0hJR0gJKDE8PDYpCisJI2RlZmluZSBQTTNSRF9TeW5jQ29udHJvbF9WU1lOQ19PVkVSUklERV9TRVRCWV9WU1lOQwkoMDw8NykKKwkjZGVmaW5lIFBNM1JEX1N5bmNDb250cm9sX1ZTWU5DX09WRVJSSURFX0ZPUkNFX0hJR0gJKDE8PDcpCisjZGVmaW5lIFBNM1JEX0RBQ0NvbnRyb2wJCQkJCTB4MDAyCisJI2RlZmluZSBQTTNSRF9EQUNDb250cm9sX0RBQ19QT1dFUl9PTgkJCSgwPDwwKQorCSNkZWZpbmUgUE0zUkRfREFDQ29udHJvbF9EQUNfUE9XRVJfT0ZGCQkJKDE8PDApCisJI2RlZmluZSBQTTNSRF9EQUNDb250cm9sX1NZTkNfT05fR1JFRU5fRElTQUJMRQkJKDA8PDMpCisJI2RlZmluZSBQTTNSRF9EQUNDb250cm9sX1NZTkNfT05fR1JFRU5fRU5BQkxFCQkoMTw8MykKKwkjZGVmaW5lIFBNM1JEX0RBQ0NvbnRyb2xfQkxBTktfUkVEX0RBQ19ESVNBQkxFCQkoMDw8NCkKKwkjZGVmaW5lIFBNM1JEX0RBQ0NvbnRyb2xfQkxBTktfUkVEX0RBQ19FTkFCTEUJCSgxPDw0KQorCSNkZWZpbmUgUE0zUkRfREFDQ29udHJvbF9CTEFOS19HUkVFTl9EQUNfRElTQUJMRQkoMDw8NSkKKwkjZGVmaW5lIFBNM1JEX0RBQ0NvbnRyb2xfQkxBTktfR1JFRU5fREFDX0VOQUJMRQkJKDE8PDUpCisJI2RlZmluZSBQTTNSRF9EQUNDb250cm9sX0JMQU5LX0JMVUVfREFDX0RJU0FCTEUJCSgwPDw2KQorCSNkZWZpbmUgUE0zUkRfREFDQ29udHJvbF9CTEFOS19CTFVFX0RBQ19FTkFCTEUJCSgxPDw2KQorCSNkZWZpbmUgUE0zUkRfREFDQ29udHJvbF9CTEFOS19QRURFU1RBTF9ESVNBQkxFCQkoMDw8NykKKwkjZGVmaW5lIFBNM1JEX0RBQ0NvbnRyb2xfQkxBTktfUEVERVNUQUxfRU5BQkxFCQkoMTw8NykKKyNkZWZpbmUgUE0zUkRfUGl4ZWxTaXplCQkJCQkJMHgwMDMKKwkjZGVmaW5lIFBNM1JEX1BpeGVsU2l6ZV8yNF9CSVRfUElYRUxTCQkJKDQ8PDApCisJI2RlZmluZSBQTTNSRF9QaXhlbFNpemVfMzJfQklUX1BJWEVMUwkJCSgyPDwwKQorCSNkZWZpbmUgUE0zUkRfUGl4ZWxTaXplXzE2X0JJVF9QSVhFTFMJCQkoMTw8MCkKKwkjZGVmaW5lIFBNM1JEX1BpeGVsU2l6ZV84X0JJVF9QSVhFTFMJCQkoMDw8MCkKKyNkZWZpbmUgUE0zUkRfQ29sb3JGb3JtYXQJCQkJCTB4MDA0CisJI2RlZmluZSBQTTNSRF9Db2xvckZvcm1hdF9MSU5FQVJfQ09MT1JfRVhUX0VOQUJMRQkoMTw8NikKKwkjZGVmaW5lIFBNM1JEX0NvbG9yRm9ybWF0X0xJTkVBUl9DT0xPUl9FWFRfRElTQUJMRQkoMDw8NikKKwkjZGVmaW5lIFBNM1JEX0NvbG9yRm9ybWF0X0NPTE9SX09SREVSX0JMVUVfTE9XCQkoMTw8NSkKKwkjZGVmaW5lIFBNM1JEX0NvbG9yRm9ybWF0X0NPTE9SX09SREVSX1JFRF9MT1cJCSgwPDw1KQorCSNkZWZpbmUgUE0zUkRfQ29sb3JGb3JtYXRfQ09MT1JfRk9STUFUX01BU0sJCSgweDFmPDwwKQorCSNkZWZpbmUgUE0zUkRfQ29sb3JGb3JtYXRfODg4OF9DT0xPUgkJCSgwPDwwKQorCSNkZWZpbmUgUE0zUkRfQ29sb3JGb3JtYXRfNTU1MV9GUk9OVF9DT0xPUgkJKDE8PDApCisJI2RlZmluZSBQTTNSRF9Db2xvckZvcm1hdF80NDQ0X0NPTE9SCQkJKDI8PDApCisJI2RlZmluZSBQTTNSRF9Db2xvckZvcm1hdF8zMzJfRlJPTlRfQ09MT1IJCSg1PDwwKQorCSNkZWZpbmUgUE0zUkRfQ29sb3JGb3JtYXRfMzMyX0JBQ0tfQ09MT1IJCSg2PDwwKQorCSNkZWZpbmUgUE0zUkRfQ29sb3JGb3JtYXRfMjMyMV9GUk9OVF9DT0xPUgkJKDk8PDApCisJI2RlZmluZSBQTTNSRF9Db2xvckZvcm1hdF8yMzIxX0JBQ0tfQ09MT1IJCSgxMDw8MCkKKwkjZGVmaW5lIFBNM1JEX0NvbG9yRm9ybWF0XzIzMl9GUk9OVE9GRl9DT0xPUgkJKDExPDwwKQorCSNkZWZpbmUgUE0zUkRfQ29sb3JGb3JtYXRfMjMyX0JBQ0tPRkZfQ09MT1IJCSgxMjw8MCkKKwkjZGVmaW5lIFBNM1JEX0NvbG9yRm9ybWF0XzU1NTFfQkFDS19DT0xPUgkJKDEzPDwwKQorCSNkZWZpbmUgUE0zUkRfQ29sb3JGb3JtYXRfQ0k4X0NPTE9SCQkJKDE0PDwwKQorCSNkZWZpbmUgUE0zUkRfQ29sb3JGb3JtYXRfNTY1X0ZST05UX0NPTE9SCQkoMTY8PDApCisJI2RlZmluZSBQTTNSRF9Db2xvckZvcm1hdF81NjVfQkFDS19DT0xPUgkJKDE3PDwwKQorI2RlZmluZSBQTTNSRF9DdXJzb3JNb2RlCQkJCQkweDAwNQorCSNkZWZpbmUgUE0zUkRfQ3Vyc29yTW9kZV9DVVJTT1JfRElTQUJMRQkJCSgwPDwwKQorCSNkZWZpbmUgUE0zUkRfQ3Vyc29yTW9kZV9DVVJTT1JfRU5BQkxFCQkJKDE8PDApCisJI2RlZmluZSBQTTNSRF9DdXJzb3JNb2RlX0ZPUk1BVF82NHg2NF8yQlBFX1AwMTIzCSgwPDwyKQorCSNkZWZpbmUgUE0zUkRfQ3Vyc29yTW9kZV9GT1JNQVRfMzJ4MzJfMkJQRV9QMAkJKDE8PDIpCisJI2RlZmluZSBQTTNSRF9DdXJzb3JNb2RlX0ZPUk1BVF8zMngzMl8yQlBFX1AxCQkoMjw8MikKKwkjZGVmaW5lIFBNM1JEX0N1cnNvck1vZGVfRk9STUFUXzMyeDMyXzJCUEVfUDIJCSgzPDwyKQorCSNkZWZpbmUgUE0zUkRfQ3Vyc29yTW9kZV9GT1JNQVRfMzJ4MzJfMkJQRV9QMwkJKDQ8PDIpCisJI2RlZmluZSBQTTNSRF9DdXJzb3JNb2RlX0ZPUk1BVF8zMngzMl80QlBFX1AwMQkJKDU8PDIpCisJI2RlZmluZSBQTTNSRF9DdXJzb3JNb2RlX0ZPUk1BVF8zMngzMl80QlBFX1AyMwkJKDY8PDIpCisJI2RlZmluZSBQTTNSRF9DdXJzb3JNb2RlX1RZUEVfTVMJCQkoMDw8NCkKKwkjZGVmaW5lIFBNM1JEX0N1cnNvck1vZGVfVFlQRV9YCQkJCSgxPDw0KQorCSNkZWZpbmUgUE0zUkRfQ3Vyc29yTW9kZV9SRVZFUlNFX1BJWEVMX09SREVSX0RJU0FCTEUJKDA8PDYpCisJI2RlZmluZSBQTTNSRF9DdXJzb3JNb2RlX1JFVkVSU0VfUElYRUxfT1JERVJfRU5BQkxFCSgxPDw2KQorCSNkZWZpbmUgUE0zUkRfQ3Vyc29yTW9kZV9SRVZFUlNFX1BJWEVMX09SREVSXzNfQ09MT1IJKDI8PDYpCisJI2RlZmluZSBQTTNSRF9DdXJzb3JNb2RlX1JFVkVSU0VfUElYRUxfT1JERVJfMTVfQ09MT1IJKDM8PDYpCisjZGVmaW5lIFBNM1JEX0N1cnNvckNvbnRyb2wJCQkJCTB4MDA2CisJI2RlZmluZSBQTTNSRF9DdXJzb3JDb250cm9sX0RPVUJMRV9YX0RJU0FCTEVECQkoMDw8MCkKKwkjZGVmaW5lIFBNM1JEX0N1cnNvckNvbnRyb2xfRE9VQkxFX1hfRU5BQkxFRAkJKDE8PDApCisJI2RlZmluZSBQTTNSRF9DdXJzb3JDb250cm9sX0RPVUJMRV9ZX0RJU0FCTEVECQkoMDw8MSkKKwkjZGVmaW5lIFBNM1JEX0N1cnNvckNvbnRyb2xfRE9VQkxFX1lfRU5BQkxFRAkJKDE8PDEpCisJI2RlZmluZSBQTTNSRF9DdXJzb3JDb250cm9sX1JFQURCQUNLX1BPU19ESVNBQkxFRAkoMDw8MikKKwkjZGVmaW5lIFBNM1JEX0N1cnNvckNvbnRyb2xfUkVBREJBQ0tfUE9TX0VOQUJMRUQJKDE8PDIpCisKKyNkZWZpbmUgUE0zUkRfQ3Vyc29yWExvdwkJCQkJMHgwMDcKKyNkZWZpbmUgUE0zUkRfQ3Vyc29yWEhpZ2gJCQkJCTB4MDA4CisjZGVmaW5lIFBNM1JEX0N1cnNvcllMb3cJCQkJCTB4MDA5CisjZGVmaW5lIFBNM1JEX0N1cnNvcllIaWdoCQkJCQkweDAwYQorI2RlZmluZSBQTTNSRF9DdXJzb3JIb3RTcG90WAkJCQkJMHgwMGIKKyNkZWZpbmUgUE0zUkRfQ3Vyc29ySG90U3BvdFkJCQkJCTB4MDBjCisjZGVmaW5lIFBNM1JEX092ZXJsYXlLZXkJCQkJCTB4MDBkCisjZGVmaW5lIFBNM1JEX1BhbgkJCQkJCTB4MDBlCisJI2RlZmluZSBQTTNSRF9QYW5fRElTQUJMRQkJCQkoMDw8MCkKKwkjZGVmaW5lIFBNM1JEX1Bhbl9FTkFCTEUJCQkJKDE8PDApCisJI2RlZmluZSBQTTNSRF9QYW5fR0FURV9ESVNBQkxFCQkJCSgwPDwxKQorCSNkZWZpbmUgUE0zUkRfUGFuX0dBVEVfRU5BQkxFCQkJCSgxPDwxKQorI2RlZmluZSBQTTNSRF9TZW5zZQkJCQkJCTB4MDBmCisKKyNkZWZpbmUgUE0zUkRfQ2hlY2tDb250cm9sCQkJCQkweDAxOAorCSNkZWZpbmUgUE0zUkRfQ2hlY2tDb250cm9sX1BJWEVMX0RJU0FCTEVECQkoMDw8MCkKKwkjZGVmaW5lIFBNM1JEX0NoZWNrQ29udHJvbF9QSVhFTF9FTkFCTEVECQkoMTw8MCkKKwkjZGVmaW5lIFBNM1JEX0NoZWNrQ29udHJvbF9MVVRfRElTQUJMRUQJCQkoMDw8MSkKKwkjZGVmaW5lIFBNM1JEX0NoZWNrQ29udHJvbF9MVVRfRU5BQkxFRAkJCSgxPDwxKQorI2RlZmluZSBQTTNSRF9DaGVja1BpeGVsUmVkCQkJCQkweDAxOQorI2RlZmluZSBQTTNSRF9DaGVja1BpeGVsR3JlZW4JCQkJCTB4MDFhCisjZGVmaW5lIFBNM1JEX0NoZWNrUGl4ZWxCbHVlCQkJCQkweDAxYgorI2RlZmluZSBQTTNSRF9DaGVja0xVVFJlZAkJCQkJMHgwMWMKKyNkZWZpbmUgUE0zUkRfQ2hlY2tMVVRHcmVlbgkJCQkJMHgwMWQKKyNkZWZpbmUgUE0zUkRfQ2hlY2tMVVRCbHVlCQkJCQkweDAxZQorI2RlZmluZSBQTTNSRF9TY3JhdGNoCQkJCQkJMHgwMWYKKworI2RlZmluZSBQTTNSRF9WaWRlb092ZXJsYXlDb250cm9sCQkJCTB4MDIwCisgICAgICAgICNkZWZpbmUgUE0zUkRfVmlkZW9PdmVybGF5Q29udHJvbF9ESVNBQkxFICAgICAgICAgICAgICAgKDA8PDApCisgICAgICAgICNkZWZpbmUgUE0zUkRfVmlkZW9PdmVybGF5Q29udHJvbF9FTkFCTEUgICAgICAgICAgICAgICAgKDE8PDApCisgICAgICAgICNkZWZpbmUgUE0zUkRfVmlkZW9PdmVybGF5Q29udHJvbF9NT0RFX01BU0sgICAgICAgICAgICAgKDM8PDEpCisgICAgICAgICNkZWZpbmUgUE0zUkRfVmlkZW9PdmVybGF5Q29udHJvbF9NT0RFX01BSU5LRVkgICAgICAgICAgKDA8PDEpCisgICAgICAgICNkZWZpbmUgUE0zUkRfVmlkZW9PdmVybGF5Q29udHJvbF9NT0RFX09WRVJMQVlLRVkgICAgICAgKDE8PDEpCisgICAgICAgICNkZWZpbmUgUE0zUkRfVmlkZW9PdmVybGF5Q29udHJvbF9NT0RFX0FMV0FZUyAgICAgICAgICAgKDI8PDEpCisgICAgICAgICNkZWZpbmUgUE0zUkRfVmlkZW9PdmVybGF5Q29udHJvbF9NT0RFX0JMRU5EICAgICAgICAgICAgKDM8PDEpCisgICAgICAgICNkZWZpbmUgUE0zUkRfVmlkZW9PdmVybGF5Q29udHJvbF9ESVJFQ1RDT0xPUl9ESVNBQkxFRCAgKDA8PDMpCisgICAgICAgICNkZWZpbmUgUE0zUkRfVmlkZW9PdmVybGF5Q29udHJvbF9ESVJFQ1RDT0xPUl9FTkFCTEVEICAgKDE8PDMpCisgICAgICAgICNkZWZpbmUgUE0zUkRfVmlkZW9PdmVybGF5Q29udHJvbF9CTEVORFNSQ19NQUlOICAgICAgICAgKDA8PDQpCisgICAgICAgICNkZWZpbmUgUE0zUkRfVmlkZW9PdmVybGF5Q29udHJvbF9CTEVORFNSQ19SRUdJU1RFUiAgICAgKDE8PDQpCisgICAgICAgICNkZWZpbmUgUE0zUkRfVmlkZW9PdmVybGF5Q29udHJvbF9LRVlfQ09MT1IgICAgICAgICAgICAgKDA8PDUpCisgICAgICAgICNkZWZpbmUgUE0zUkRfVmlkZW9PdmVybGF5Q29udHJvbF9LRVlfQUxQSEEgICAgICAgICAgICAgKDE8PDUpCisjZGVmaW5lIFBNM1JEX1ZpZGVvT3ZlcmxheVhTdGFydExvdwkJCQkweDAyMQorI2RlZmluZSBQTTNSRF9WaWRlb092ZXJsYXlYU3RhcnRIaWdoCQkJCTB4MDIyCisjZGVmaW5lIFBNM1JEX1ZpZGVvT3ZlcmxheVlTdGFydExvdwkJCQkweDAyMworI2RlZmluZSBQTTNSRF9WaWRlb092ZXJsYXlZU3RhcnRIaWdoCQkJCTB4MDI0CisjZGVmaW5lIFBNM1JEX1ZpZGVvT3ZlcmxheVhFbmRMb3cJCQkJMHgwMjUKKyNkZWZpbmUgUE0zUkRfVmlkZW9PdmVybGF5WEVuZEhpZ2gJCQkJMHgwMjYKKyNkZWZpbmUgUE0zUkRfVmlkZW9PdmVybGF5WUVuZExvdwkJCQkweDAyNworI2RlZmluZSBQTTNSRF9WaWRlb092ZXJsYXlZRW5kSGlnaAkJCQkweDAyOAorI2RlZmluZSBQTTNSRF9WaWRlb092ZXJsYXlLZXlSCQkJCQkweDAyOQorI2RlZmluZSBQTTNSRF9WaWRlb092ZXJsYXlLZXlHCQkJCQkweDAyYQorI2RlZmluZSBQTTNSRF9WaWRlb092ZXJsYXlLZXlCCQkJCQkweDAyYgorI2RlZmluZSBQTTNSRF9WaWRlb092ZXJsYXlCbGVuZAkJCQkJMHgwMmMKKyAgICAgICAgI2RlZmluZSBQTTNSRF9WaWRlb092ZXJsYXlCbGVuZF9GQUNUT1JfMF9QRVJDRU5UICAgICAgICAoMDw8NikKKyAgICAgICAgI2RlZmluZSBQTTNSRF9WaWRlb092ZXJsYXlCbGVuZF9GQUNUT1JfMjVfUEVSQ0VOVCAgICAgICAoMTw8NikKKyAgICAgICAgI2RlZmluZSBQTTNSRF9WaWRlb092ZXJsYXlCbGVuZF9GQUNUT1JfNzVfUEVSQ0VOVCAgICAgICAoMjw8NikKKyAgICAgICAgI2RlZmluZSBQTTNSRF9WaWRlb092ZXJsYXlCbGVuZF9GQUNUT1JfMTAwX1BFUkNFTlQgICAgICAoMzw8NikKKworI2RlZmluZSBQTTNSRF9EQ2xrU2V0dXAxCQkJCQkweDFmMAorI2RlZmluZSBQTTNSRF9EQ2xrU2V0dXAyCQkJCQkweDFmMQorI2RlZmluZSBQTTNSRF9LQ2xrU2V0dXAxCQkJCQkweDFmMgorI2RlZmluZSBQTTNSRF9LQ2xrU2V0dXAyCQkJCQkweDFmMworCisjZGVmaW5lIFBNM1JEX0RDbGtDb250cm9sCQkJCQkweDIwMAorCSNkZWZpbmUgUE0zUkRfRENsa0NvbnRyb2xfU09VUkNFX1BMTAkJCSgwPDw0KQorCSNkZWZpbmUgUE0zUkRfRENsa0NvbnRyb2xfU09VUkNFX1ZTQQkJCSgxPDw0KQorCSNkZWZpbmUgUE0zUkRfRENsa0NvbnRyb2xfU09VUkNFX1ZTQgkJCSgyPDw0KQorCSNkZWZpbmUgUE0zUkRfRENsa0NvbnRyb2xfU09VUkNFX0VYVAkJCSgzPDw0KQorCSNkZWZpbmUgUE0zUkRfRENsa0NvbnRyb2xfU1RBVEVfUlVOCQkJKDI8PDIpCisJI2RlZmluZSBQTTNSRF9EQ2xrQ29udHJvbF9TVEFURV9ISUdICQkJKDE8PDIpCisJI2RlZmluZSBQTTNSRF9EQ2xrQ29udHJvbF9TVEFURV9MT1cJCQkoMDw8MikKKwkjZGVmaW5lIFBNM1JEX0RDbGtDb250cm9sX0xPQ0tFRAkJCSgxPDwxKQorCSNkZWZpbmUgUE0zUkRfRENsa0NvbnRyb2xfTk9UX0xPQ0tFRAkJCSgwPDwxKQorCSNkZWZpbmUgUE0zUkRfRENsa0NvbnRyb2xfRU5BQkxFCQkJKDE8PDApCisJI2RlZmluZSBQTTNSRF9EQ2xrQ29udHJvbF9ESVNBQkxFCQkJKDA8PDApCisjZGVmaW5lIFBNM1JEX0RDbGswUHJlU2NhbGUJCQkJCTB4MjAxCisjZGVmaW5lIFBNM1JEX0RDbGswRmVlZGJhY2tTY2FsZQkJCQkweDIwMgorI2RlZmluZSBQTTNSRF9EQ2xrMFBvc3RTY2FsZQkJCQkJMHgyMDMKKyAgICAgICAgI2RlZmluZSBQTTNfUkVGX0NMT0NLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNDMxOAorI2RlZmluZSBQTTNSRF9EQ2xrMVByZVNjYWxlCQkJCQkweDIwNAorI2RlZmluZSBQTTNSRF9EQ2xrMUZlZWRiYWNrU2NhbGUJCQkJMHgyMDUKKyNkZWZpbmUgUE0zUkRfRENsazFQb3N0U2NhbGUJCQkJCTB4MjA2CisjZGVmaW5lIFBNM1JEX0RDbGsyUHJlU2NhbGUJCQkJCTB4MjA3CisjZGVmaW5lIFBNM1JEX0RDbGsyRmVlZGJhY2tTY2FsZQkJCQkweDIwOAorI2RlZmluZSBQTTNSRF9EQ2xrMlBvc3RTY2FsZQkJCQkJMHgyMDkKKyNkZWZpbmUgUE0zUkRfRENsazNQcmVTY2FsZQkJCQkJMHgyMGEKKyNkZWZpbmUgUE0zUkRfRENsazNGZWVkYmFja1NjYWxlCQkJCTB4MjBiCisjZGVmaW5lIFBNM1JEX0RDbGszUG9zdFNjYWxlCQkJCQkweDIwYworI2RlZmluZSBQTTNSRF9LQ2xrQ29udHJvbAkJCQkJMHgyMGQKKwkjZGVmaW5lIFBNM1JEX0tDbGtDb250cm9sX0RJU0FCTEUJCQkoMDw8MCkKKwkjZGVmaW5lIFBNM1JEX0tDbGtDb250cm9sX0VOQUJMRQkJCSgxPDwwKQorCSNkZWZpbmUgUE0zUkRfS0Nsa0NvbnRyb2xfTk9UX0xPQ0tFRAkJCSgwPDwxKQorCSNkZWZpbmUgUE0zUkRfS0Nsa0NvbnRyb2xfTE9DS0VECQkJKDE8PDEpCisJI2RlZmluZSBQTTNSRF9LQ2xrQ29udHJvbF9TVEFURV9MT1cJCQkoMDw8MikKKwkjZGVmaW5lIFBNM1JEX0tDbGtDb250cm9sX1NUQVRFX0hJR0gJCQkoMTw8MikKKwkjZGVmaW5lIFBNM1JEX0tDbGtDb250cm9sX1NUQVRFX1JVTgkJCSgyPDwyKQorCSNkZWZpbmUgUE0zUkRfS0Nsa0NvbnRyb2xfU1RBVEVfTE9XX1BPV0VSCQkoMzw8MikKKwkjZGVmaW5lIFBNM1JEX0tDbGtDb250cm9sX1NPVVJDRV9QQ0xLCQkJKDA8PDQpCisJI2RlZmluZSBQTTNSRF9LQ2xrQ29udHJvbF9TT1VSQ0VfSEFMRl9QQ0xLCQkoMTw8NCkKKwkjZGVmaW5lIFBNM1JEX0tDbGtDb250cm9sX1NPVVJDRV9QTEwJCQkoMjw8NCkKKyNkZWZpbmUgUE0zUkRfS0Nsa1ByZVNjYWxlCQkJCQkweDIwZQorI2RlZmluZSBQTTNSRF9LQ2xrRmVlZGJhY2tTY2FsZQkJCQkJMHgyMGYKKyNkZWZpbmUgUE0zUkRfS0Nsa1Bvc3RTY2FsZQkJCQkJMHgyMTAKKyNkZWZpbmUgUE0zUkRfTUNsa0NvbnRyb2wJCQkJCTB4MjExCisJI2RlZmluZSBQTTNSRF9NQ2xrQ29udHJvbF9ESVNBQkxFCQkJKDA8PDApCisJI2RlZmluZSBQTTNSRF9NQ2xrQ29udHJvbF9FTkFCTEUJCQkoMTw8MCkKKwkjZGVmaW5lIFBNM1JEX01DbGtDb250cm9sX05PVF9MT0NLRUQJCQkoMDw8MSkKKwkjZGVmaW5lIFBNM1JEX01DbGtDb250cm9sX0xPQ0tFRAkJCSgxPDwxKQorCSNkZWZpbmUgUE0zUkRfTUNsa0NvbnRyb2xfU1RBVEVfTE9XCQkJKDA8PDIpCisJI2RlZmluZSBQTTNSRF9NQ2xrQ29udHJvbF9TVEFURV9ISUdICQkJKDE8PDIpCisJI2RlZmluZSBQTTNSRF9NQ2xrQ29udHJvbF9TVEFURV9SVU4JCQkoMjw8MikKKwkjZGVmaW5lIFBNM1JEX01DbGtDb250cm9sX1NUQVRFX0xPV19QT1dFUgkJKDM8PDIpCisJI2RlZmluZSBQTTNSRF9NQ2xrQ29udHJvbF9TT1VSQ0VfUENMSwkJCSgwPDw0KQorCSNkZWZpbmUgUE0zUkRfTUNsa0NvbnRyb2xfU09VUkNFX0hBTEZfUENMSwkJKDE8PDQpCisJI2RlZmluZSBQTTNSRF9NQ2xrQ29udHJvbF9TT1VSQ0VfSEFMRl9FWFQJCSgzPDw0KQorCSNkZWZpbmUgUE0zUkRfTUNsa0NvbnRyb2xfU09VUkNFX0VYVAkJCSg0PDw0KQorCSNkZWZpbmUgUE0zUkRfTUNsa0NvbnRyb2xfU09VUkNFX0hBTEZfS0NMSwkJKDU8PDQpCisJI2RlZmluZSBQTTNSRF9NQ2xrQ29udHJvbF9TT1VSQ0VfS0NMSwkJCSg2PDw0KQorI2RlZmluZSBQTTNSRF9NQ2xrUHJlU2NhbGUJCQkJCTB4MjEyCisjZGVmaW5lIFBNM1JEX01DbGtGZWVkYmFja1NjYWxlCQkJCQkweDIxMworI2RlZmluZSBQTTNSRF9NQ2xrUG9zdFNjYWxlCQkJCQkweDIxNAorI2RlZmluZSBQTTNSRF9TQ2xrQ29udHJvbAkJCQkJMHgyMTUKKwkjZGVmaW5lIFBNM1JEX1NDbGtDb250cm9sX0RJU0FCTEUJCQkoMDw8MCkKKwkjZGVmaW5lIFBNM1JEX1NDbGtDb250cm9sX0VOQUJMRQkJCSgxPDwwKQorCSNkZWZpbmUgUE0zUkRfU0Nsa0NvbnRyb2xfTk9UX0xPQ0tFRAkJCSgwPDwxKQorCSNkZWZpbmUgUE0zUkRfU0Nsa0NvbnRyb2xfTE9DS0VECQkJKDE8PDEpCisJI2RlZmluZSBQTTNSRF9TQ2xrQ29udHJvbF9TVEFURV9MT1cJCQkoMDw8MikKKwkjZGVmaW5lIFBNM1JEX1NDbGtDb250cm9sX1NUQVRFX0hJR0gJCQkoMTw8MikKKwkjZGVmaW5lIFBNM1JEX1NDbGtDb250cm9sX1NUQVRFX1JVTgkJCSgyPDwyKQorCSNkZWZpbmUgUE0zUkRfU0Nsa0NvbnRyb2xfU1RBVEVfTE9XX1BPV0VSCQkoMzw8MikKKwkjZGVmaW5lIFBNM1JEX1NDbGtDb250cm9sX1NPVVJDRV9QQ0xLCQkJKDA8PDQpCisJI2RlZmluZSBQTTNSRF9TQ2xrQ29udHJvbF9TT1VSQ0VfSEFMRl9QQ0xLCQkoMTw8NCkKKwkjZGVmaW5lIFBNM1JEX1NDbGtDb250cm9sX1NPVVJDRV9IQUxGX0VYVAkJKDM8PDQpCisJI2RlZmluZSBQTTNSRF9TQ2xrQ29udHJvbF9TT1VSQ0VfRVhUCQkJKDQ8PDQpCisJI2RlZmluZSBQTTNSRF9TQ2xrQ29udHJvbF9TT1VSQ0VfSEFMRl9LQ0xLCQkoNTw8NCkKKwkjZGVmaW5lIFBNM1JEX1NDbGtDb250cm9sX1NPVVJDRV9LQ0xLCQkJKDY8PDQpCisjZGVmaW5lIFBNM1JEX1NDbGtQcmVTY2FsZQkJCQkJMHgyMTYKKyNkZWZpbmUgUE0zUkRfU0Nsa0ZlZWRiYWNrU2NhbGUJCQkJCTB4MjE3CisjZGVmaW5lIFBNM1JEX1NDbGtQb3N0U2NhbGUJCQkJCTB4MjE4CisKKyNkZWZpbmUgUE0zUkRfQ3Vyc29yUGFsZXR0ZShwKQkJCQkJKDB4MzAzKyhwKSkKKyNkZWZpbmUgUE0zUkRfQ3Vyc29yUGF0dGVybihwKQkJCQkJKDB4NDAwKyhwKSkKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEdMSU5UIFBlcm1lZGlhMyBWaWRlbyBTdHJlYW1pbmcgUmVnaXN0ZXJzICgweDUwMDApICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgUE0zVlNDb25maWd1cmF0aW9uCQkJCQkweDU4MDAKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEdMSU5UIFBlcm1lZGlhMyBDb3JlIFJlZ2lzdGVycyAoMHg4MDAwKykgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgUE0zQUFMaW5lV2lkdGgJCQkJCQkweDk0YzAKKyNkZWZpbmUgUE0zQUFQb2ludHNpemUJCQkJCQkweDk0YTAKKyNkZWZpbmUgUE0zQWxwaGFCbGVuZEFscGhhTW9kZQkJCQkJMHhhZmE4CisjZGVmaW5lIFBNM0FscGhhQmxlbmRBbHBoYU1vZGVBbmQJCQkJMHhhZDMwCisjZGVmaW5lIFBNM0FscGhhQmxlbmRBbHBoYU1vZGVPcgkJCQkweGFkMzgKKyNkZWZpbmUgUE0zQWxwaGFCbGVuZENvbG9yTW9kZQkJCQkJMHhhZmEwCisjZGVmaW5lIFBNM0FscGhhQmxlbmRDb2xvck1vZGVBbmQJCQkJMHhhY2IwCisjZGVmaW5lIFBNM0FscGhhQmxlbmRDb2xvck1vZGVPcgkJCQkweGFjYjgKKyNkZWZpbmUgUE0zQWxwaGFEZXN0Q29sb3IJCQkJCTB4YWY4OAorI2RlZmluZSBQTTNBbHBoYVNvdXJjZUNvbG9yCQkJCQkweGFmODAKKyNkZWZpbmUgUE0zQWxwaGFUZXN0TW9kZQkJCQkJMHg4ODAwCisjZGVmaW5lIFBNM0FscGhhVGVzdE1vZGVBbmQJCQkJCTB4YWJmMAorI2RlZmluZSBQTTNBbHBoYVRlc3RNb2RlT3IJCQkJCTB4YWJmOAorI2RlZmluZSBQTTNBbnRpYWxpYXNNb2RlCQkJCQkweDg4MDgKKyNkZWZpbmUgUE0zQW50aWFsaWFzTW9kZUFuZAkJCQkJMHhhYzAwCisjZGVmaW5lIFBNM0FudGlhbGlhc01vZGVPcgkJCQkJMHhhYzA4CisvKiAuLi4gKi8KKyNkZWZpbmUgUE0zQmFja2dyb3VuZENvbG9yCQkJCQkweGIwYzgKKy8qIC4uLiAqLworI2RlZmluZSBQTTNDb2xvckREQU1vZGUJCQkJCQkweDg3ZTAKKyNkZWZpbmUgUE0zQ29sb3JEREFNb2RlQW5kCQkJCQkweGFiZTAKKyNkZWZpbmUgUE0zQ29sb3JEREFNb2RlT3IJCQkJCTB4YWJlOAorI2RlZmluZSBQTTNDb21tYW5kSW50ZXJydXB0CQkJCQkweGE5OTAKKyNkZWZpbmUgUE0zQ29uc3RhbnRDb2xvckREQQkJCQkJMHhhZmIwCisJI2RlZmluZSBQTTNDb25zdGFudENvbG9yRERBX1IocikJCSgocikmMHhmZikKKwkjZGVmaW5lIFBNM0NvbnN0YW50Q29sb3JEREFfRyhnKQkJKCgoZykmMHhmZik8PDgpCisJI2RlZmluZSBQTTNDb25zdGFudENvbG9yRERBX0IoYikJCSgoKGIpJjB4ZmYpPDwxNikKKwkjZGVmaW5lIFBNM0NvbnN0YW50Q29sb3JEREFfQShhKQkJKCgoYSkmMHhmZik8PDI0KQorI2RlZmluZSBQTTNDb250ZXh0RGF0YQkJCQkJCTB4OGRkMAorI2RlZmluZSBQTTNDb250ZXh0RHVtcAkJCQkJCTB4OGRjMAorI2RlZmluZSBQTTNDb250ZXh0UmVzdG9yZQkJCQkJMHg4ZGM4CisjZGVmaW5lIFBNM0NvbnRpbnVlCQkJCQkJMHg4MDU4CisjZGVmaW5lIFBNM0NvbnRpbnVlTmV3RG9tCQkJCQkweDgwNDgKKyNkZWZpbmUgUE0zQ29udGludWVOZXdMaW5lCQkJCQkweDgwNDAKKyNkZWZpbmUgUE0zQ29udGludWVOZXdTdWIJCQkJCTB4ODA1MAorI2RlZmluZSBQTTNDb3VudAkJCQkJCTB4ODAzMAorLyogLi4uICovCisjZGVmaW5lIFBNM0RlbHRhQ29udHJvbAkJCQkJCTB4OTM1MAorI2RlZmluZSBQTTNEZWx0YUNvbnRyb2xBbmQJCQkJCTB4YWIyMAorI2RlZmluZSBQTTNEZWx0YUNvbnRyb2xPcgkJCQkJMHhhYjI4CisjZGVmaW5lIFBNM0RlbHRhTW9kZQkJCQkJCTB4OTMwMAorI2RlZmluZSBQTTNEZWx0YU1vZGVBbmQJCQkJCQkweGFhZDAKKyNkZWZpbmUgUE0zRGVsdGFNb2RlT3IJCQkJCQkweGFhZDgKKy8qIC4uLiAqLworI2RlZmluZSBQTTNEaXRoZXJNb2RlCQkJCQkJMHg4ODE4CisjZGVmaW5lIFBNM0RpdGhlck1vZGVBbmQJCQkJCTB4YWNkMAorI2RlZmluZSBQTTNEaXRoZXJNb2RlT3IJCQkJCQkweGFjZDgKKy8qIC4uLiAqLworI2RlZmluZSBQTTNkWERvbQkJCQkJCTB4ODAwOAorI2RlZmluZSBQTTNkWFN1YgkJCQkJCTB4ODAxOAorI2RlZmluZSBQTTNkWQkJCQkJCQkweDgwMjgKKy8qIC4uLiAqLworI2RlZmluZSBQTTNGQkJsb2NrQ29sb3IJCQkJCQkweDhhYzgKKyNkZWZpbmUgUE0zRkJCbG9ja0NvbG9yMAkJCQkJMHhiMDYwCisjZGVmaW5lIFBNM0ZCQmxvY2tDb2xvcjEJCQkJCTB4YjA2OAorI2RlZmluZSBQTTNGQkJsb2NrQ29sb3IyCQkJCQkweGIwNzAKKyNkZWZpbmUgUE0zRkJCbG9ja0NvbG9yMwkJCQkJMHhiMDc4CisjZGVmaW5lIFBNM0ZCQmxvY2tDb2xvckJhY2sJCQkJCTB4YjBhMAorI2RlZmluZSBQTTNGQkJsb2NrQ29sb3JCYWNrMAkJCQkJMHhiMDgwCisjZGVmaW5lIFBNM0ZCQmxvY2tDb2xvckJhY2sxCQkJCQkweGIwODgKKyNkZWZpbmUgUE0zRkJCbG9ja0NvbG9yQmFjazIJCQkJCTB4YjA5MAorI2RlZmluZSBQTTNGQkJsb2NrQ29sb3JCYWNrMwkJCQkJMHhiMDk4CisjZGVmaW5lIFBNM0ZCQ29sb3IJCQkJCQkweDhhOTgKKyNkZWZpbmUgUE0zRkJEZXN0UmVhZEJ1ZmZlckFkZHIwCQkJCTB4YWU4MAorI2RlZmluZSBQTTNGQkRlc3RSZWFkQnVmZmVyQWRkcjEJCQkJMHhhZTg4CisjZGVmaW5lIFBNM0ZCRGVzdFJlYWRCdWZmZXJBZGRyMgkJCQkweGFlOTAKKyNkZWZpbmUgUE0zRkJEZXN0UmVhZEJ1ZmZlckFkZHIzCQkJCTB4YWU5OAorI2RlZmluZSBQTTNGQkRlc3RSZWFkQnVmZmVyT2Zmc2V0MAkJCQkweGFlYTAKKyNkZWZpbmUgUE0zRkJEZXN0UmVhZEJ1ZmZlck9mZnNldDEJCQkJMHhhZWE4CisjZGVmaW5lIFBNM0ZCRGVzdFJlYWRCdWZmZXJPZmZzZXQyCQkJCTB4YWViMAorI2RlZmluZSBQTTNGQkRlc3RSZWFkQnVmZmVyT2Zmc2V0MwkJCQkweGFlYjgKKwkjZGVmaW5lIFBNM0ZCRGVzdFJlYWRCdWZmZXJPZmZzZXRfWE9mZnNldCh4KQkoKHgpJjB4ZmZmZikKKwkjZGVmaW5lIFBNM0ZCRGVzdFJlYWRCdWZmZXJPZmZzZXRfWU9mZnNldCh5KQkoKCh5KSYweGZmZmYpPDwxNikKKyNkZWZpbmUgUE0zRkJEZXN0UmVhZEJ1ZmZlcldpZHRoMAkJCQkweGFlYzAKKyNkZWZpbmUgUE0zRkJEZXN0UmVhZEJ1ZmZlcldpZHRoMQkJCQkweGFlYzgKKyNkZWZpbmUgUE0zRkJEZXN0UmVhZEJ1ZmZlcldpZHRoMgkJCQkweGFlZDAKKyNkZWZpbmUgUE0zRkJEZXN0UmVhZEJ1ZmZlcldpZHRoMwkJCQkweGFlZDgKKwkjZGVmaW5lIFBNM0ZCRGVzdFJlYWRCdWZmZXJXaWR0aF9XaWR0aCh3KQkoKHcpJjB4MGZmZikKKworI2RlZmluZSBQTTNGQkRlc3RSZWFkRW5hYmxlcwkJCQkJMHhhZWU4CisjZGVmaW5lIFBNM0ZCRGVzdFJlYWRFbmFibGVzQW5kCQkJCQkweGFkMjAKKyNkZWZpbmUgUE0zRkJEZXN0UmVhZEVuYWJsZXNPcgkJCQkJMHhhZDI4CisJI2RlZmluZSBQTTNGQkRlc3RSZWFkRW5hYmxlc19FKGUpCQkoKGUpJjB4ZmYpCisJI2RlZmluZSBQTTNGQkRlc3RSZWFkRW5hYmxlc19FMAkJCQkxPDwwCisJI2RlZmluZSBQTTNGQkRlc3RSZWFkRW5hYmxlc19FMQkJCQkxPDwxCisJI2RlZmluZSBQTTNGQkRlc3RSZWFkRW5hYmxlc19FMgkJCQkxPDwyCisJI2RlZmluZSBQTTNGQkRlc3RSZWFkRW5hYmxlc19FMwkJCQkxPDwzCisJI2RlZmluZSBQTTNGQkRlc3RSZWFkRW5hYmxlc19FNAkJCQkxPDw0CisJI2RlZmluZSBQTTNGQkRlc3RSZWFkRW5hYmxlc19FNQkJCQkxPDw1CisJI2RlZmluZSBQTTNGQkRlc3RSZWFkRW5hYmxlc19FNgkJCQkxPDw2CisJI2RlZmluZSBQTTNGQkRlc3RSZWFkRW5hYmxlc19FNwkJCQkxPDw3CisJI2RlZmluZSBQTTNGQkRlc3RSZWFkRW5hYmxlc19SKHIpCQkoKChyKSYweGZmKTw8OCkKKwkjZGVmaW5lIFBNM0ZCRGVzdFJlYWRFbmFibGVzX1IwCQkJCTE8PDgKKwkjZGVmaW5lIFBNM0ZCRGVzdFJlYWRFbmFibGVzX1IxCQkJCTE8PDkKKwkjZGVmaW5lIFBNM0ZCRGVzdFJlYWRFbmFibGVzX1IyCQkJCTE8PDEwCisJI2RlZmluZSBQTTNGQkRlc3RSZWFkRW5hYmxlc19SMwkJCQkxPDwxMQorCSNkZWZpbmUgUE0zRkJEZXN0UmVhZEVuYWJsZXNfUjQJCQkJMTw8MTIKKwkjZGVmaW5lIFBNM0ZCRGVzdFJlYWRFbmFibGVzX1I1CQkJCTE8PDEzCisJI2RlZmluZSBQTTNGQkRlc3RSZWFkRW5hYmxlc19SNgkJCQkxPDwxNAorCSNkZWZpbmUgUE0zRkJEZXN0UmVhZEVuYWJsZXNfUjcJCQkJMTw8MTUKKwkjZGVmaW5lIFBNM0ZCRGVzdFJlYWRFbmFibGVzX1JlZmVyZW5jZUFscGhhKGEpCSgoKGEpJjB4ZmYpPDwyNCkKKworI2RlZmluZSBQTTNGQkRlc3RSZWFkTW9kZQkJCQkJMHhhZWUwCisjZGVmaW5lIFBNM0ZCRGVzdFJlYWRNb2RlQW5kCQkJCQkweGFjOTAKKyNkZWZpbmUgUE0zRkJEZXN0UmVhZE1vZGVPcgkJCQkJMHhhYzk4CisJI2RlZmluZSBQTTNGQkRlc3RSZWFkTW9kZV9SZWFkRGlzYWJsZQkJCTA8PDAKKwkjZGVmaW5lIFBNM0ZCRGVzdFJlYWRNb2RlX1JlYWRFbmFibGUJCQkxPDwwCisJI2RlZmluZSBQTTNGQkRlc3RSZWFkTW9kZV9TdHJpcGVQaXRjaChzcCkJKCgoc3ApJjB4Nyk8PDIKKwkjZGVmaW5lIFBNM0ZCRGVzdFJlYWRNb2RlX1N0cmlwZUhlaWdodChzaCkJKCgoc2gpJjB4Nyk8PDcKKwkjZGVmaW5lIFBNM0ZCRGVzdFJlYWRNb2RlX0VuYWJsZTAJCQkxPDw4CisJI2RlZmluZSBQTTNGQkRlc3RSZWFkTW9kZV9FbmFibGUxCQkJMTw8OQorCSNkZWZpbmUgUE0zRkJEZXN0UmVhZE1vZGVfRW5hYmxlMgkJCTE8PDEwCisJI2RlZmluZSBQTTNGQkRlc3RSZWFkTW9kZV9FbmFibGUzCQkJMTw8MTEKKwkjZGVmaW5lIFBNM0ZCRGVzdFJlYWRNb2RlX0xheW91dDAobCkJCSgoKGwpJjB4Myk8PDEyCisJI2RlZmluZSBQTTNGQkRlc3RSZWFkTW9kZV9MYXlvdXQxKGwpCQkoKChsKSYweDMpPDwxNAorCSNkZWZpbmUgUE0zRkJEZXN0UmVhZE1vZGVfTGF5b3V0MihsKQkJKCgobCkmMHgzKTw8MTYKKwkjZGVmaW5lIFBNM0ZCRGVzdFJlYWRNb2RlX0xheW91dDMobCkJCSgoKGwpJjB4Myk8PDE4CisJI2RlZmluZSBQTTNGQkRlc3RSZWFkTW9kZV9PcmlnaW4wCQkJMTw8MjAKKwkjZGVmaW5lIFBNM0ZCRGVzdFJlYWRNb2RlX09yaWdpbjEJCQkxPDwyMQorCSNkZWZpbmUgUE0zRkJEZXN0UmVhZE1vZGVfT3JpZ2luMgkJCTE8PDIyCisJI2RlZmluZSBQTTNGQkRlc3RSZWFkTW9kZV9PcmlnaW4zCQkJMTw8MjMKKwkjZGVmaW5lIFBNM0ZCRGVzdFJlYWRNb2RlX0Jsb2NraW5nCQkJMTw8MjQKKwkjZGVmaW5lIFBNM0ZCRGVzdFJlYWRNb2RlX1VzZVJlYWRFbmFibGVkCQkxPDwyNgorCSNkZWZpbmUgUE0zRkJEZXN0UmVhZE1vZGVfQWxwaGFGaWx0ZXJpbmcJCTE8PDI3CisKKyNkZWZpbmUgUE0zRkJIYXJkd2FyZVdyaXRlTWFzawkJCQkJMHg4YWMwCisjZGVmaW5lIFBNM0ZCU29mdHdhcmVXcml0ZU1hc2sJCQkJCTB4ODgyMAorI2RlZmluZSBQTTNGQkRhdGEJCQkJCQkweDhhYTAKKyNkZWZpbmUgUE0zRkJTb3VyY2VEYXRhCQkJCQkJMHg4YWE4CisjZGVmaW5lIFBNM0ZCU291cmNlUmVhZEJ1ZmZlckFkZHIJCQkJMHhhZjA4CisjZGVmaW5lIFBNM0ZCU291cmNlUmVhZEJ1ZmZlck9mZnNldAkJCQkweGFmMTAKKwkjZGVmaW5lIFBNM0ZCU291cmNlUmVhZEJ1ZmZlck9mZnNldF9YT2Zmc2V0KHgpCSgoeCkmMHhmZmZmKQorCSNkZWZpbmUgUE0zRkJTb3VyY2VSZWFkQnVmZmVyT2Zmc2V0X1lPZmZzZXQoeSkJKCgoeSkmMHhmZmZmKTw8MTYpCisjZGVmaW5lIFBNM0ZCU291cmNlUmVhZEJ1ZmZlcldpZHRoCQkJCTB4YWYxOAorCSNkZWZpbmUgUE0zRkJTb3VyY2VSZWFkQnVmZmVyV2lkdGhfV2lkdGgodykJKCh3KSYweDBmZmYpCisjZGVmaW5lIFBNM0ZCU291cmNlUmVhZE1vZGUJCQkJCTB4YWYwMAorI2RlZmluZSBQTTNGQlNvdXJjZVJlYWRNb2RlQW5kCQkJCQkweGFjYTAKKyNkZWZpbmUgUE0zRkJTb3VyY2VSZWFkTW9kZU9yCQkJCQkweGFjYTgKKwkjZGVmaW5lIFBNM0ZCU291cmNlUmVhZE1vZGVfUmVhZERpc2FibGUJCQkoMDw8MCkKKwkjZGVmaW5lIFBNM0ZCU291cmNlUmVhZE1vZGVfUmVhZEVuYWJsZQkJCSgxPDwwKQorCSNkZWZpbmUgUE0zRkJTb3VyY2VSZWFkTW9kZV9TdHJpcGVQaXRjaChzcCkJKCgoc3ApJjB4Nyk8PDIKKwkjZGVmaW5lIFBNM0ZCU291cmNlUmVhZE1vZGVfU3RyaXBlSGVpZ2h0KHNoKQkoKChzaCkmMHg3KTw8NworCSNkZWZpbmUgUE0zRkJTb3VyY2VSZWFkTW9kZV9MYXlvdXQobCkJCSgoKGwpJjB4Myk8PDgKKwkjZGVmaW5lIFBNM0ZCU291cmNlUmVhZE1vZGVfT3JpZ2luCQkJMTw8MTAKKwkjZGVmaW5lIFBNM0ZCU291cmNlUmVhZE1vZGVfQmxvY2tpbmcJCQkxPDwxMQorCSNkZWZpbmUgUE0zRkJTb3VyY2VSZWFkTW9kZV9Vc2VyVGV4ZWxDb29yZAkJMTw8MTMKKwkjZGVmaW5lIFBNM0ZCU291cmNlUmVhZE1vZGVfV3JhcFhFbmFibGUJCQkxPDwxNAorCSNkZWZpbmUgUE0zRkJTb3VyY2VSZWFkTW9kZV9XcmFwWUVuYWJsZQkJCTE8PDE1CisJI2RlZmluZSBQTTNGQlNvdXJjZVJlYWRNb2RlX1dyYXBYKHcpCQkoKCh3KSYweGYpPDwxNgorCSNkZWZpbmUgUE0zRkJTb3VyY2VSZWFkTW9kZV9XcmFwWSh3KQkJKCgodykmMHhmKTw8MjAKKwkjZGVmaW5lIFBNM0ZCU291cmNlUmVhZE1vZGVfRXh0ZXJuYWxTb3VyY2VEYXRhCQkxPDwyNAorI2RlZmluZSBQTTNGQldyaXRlQnVmZmVyQWRkcjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4YjAwMAorI2RlZmluZSBQTTNGQldyaXRlQnVmZmVyQWRkcjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4YjAwOAorI2RlZmluZSBQTTNGQldyaXRlQnVmZmVyQWRkcjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4YjAxMAorI2RlZmluZSBQTTNGQldyaXRlQnVmZmVyQWRkcjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4YjAxOAorCisjZGVmaW5lIFBNM0ZCV3JpdGVCdWZmZXJPZmZzZXQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhiMDIwCisjZGVmaW5lIFBNM0ZCV3JpdGVCdWZmZXJPZmZzZXQxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhiMDI4CisjZGVmaW5lIFBNM0ZCV3JpdGVCdWZmZXJPZmZzZXQyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhiMDMwCisjZGVmaW5lIFBNM0ZCV3JpdGVCdWZmZXJPZmZzZXQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhiMDM4CisJI2RlZmluZSBQTTNGQldyaXRlQnVmZmVyT2Zmc2V0X1hPZmZzZXQoeCkJCSgoeCkmMHhmZmZmKQorCSNkZWZpbmUgUE0zRkJXcml0ZUJ1ZmZlck9mZnNldF9ZT2Zmc2V0KHkpCQkoKCh5KSYweGZmZmYpPDwxNikKKworI2RlZmluZSBQTTNGQldyaXRlQnVmZmVyV2lkdGgwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4YjA0MAorI2RlZmluZSBQTTNGQldyaXRlQnVmZmVyV2lkdGgxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4YjA0OAorI2RlZmluZSBQTTNGQldyaXRlQnVmZmVyV2lkdGgyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4YjA1MAorI2RlZmluZSBQTTNGQldyaXRlQnVmZmVyV2lkdGgzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4YjA1OAorCSNkZWZpbmUgUE0zRkJXcml0ZUJ1ZmZlcldpZHRoX1dpZHRoKHcpCQkJKCh3KSYweDBmZmYpCisKKyNkZWZpbmUgUE0zRkJXcml0ZU1vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhhYjgKKyNkZWZpbmUgUE0zRkJXcml0ZU1vZGVBbmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGFjZjAKKyNkZWZpbmUgUE0zRkJXcml0ZU1vZGVPciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGFjZjgKKwkjZGVmaW5lIFBNM0ZCV3JpdGVNb2RlX1dyaXRlRGlzYWJsZSAgICAgICAgICAgICAgICAgICAgIDA8PDAKKwkjZGVmaW5lIFBNM0ZCV3JpdGVNb2RlX1dyaXRlRW5hYmxlICAgICAgICAgICAgICAgICAgICAgIDE8PDAKKwkjZGVmaW5lIFBNM0ZCV3JpdGVNb2RlX1JlcGxpY2F0ZSAgICAgICAgICAgICAgICAgICAgICAgIDE8PDQKKwkjZGVmaW5lIFBNM0ZCV3JpdGVNb2RlX09wYXF1ZVNwYW4gICAgICAgICAgICAgICAgICAgICAgIDE8PDUKKwkjZGVmaW5lIFBNM0ZCV3JpdGVNb2RlX1N0cmlwZVBpdGNoKHApICAgICAgICAgICAgKCgocCkmMHg3KTw8NikKKwkjZGVmaW5lIFBNM0ZCV3JpdGVNb2RlX1N0cmlwZUhlaWdodChoKSAgICAgICAgICAgKCgoaCkmMHg3KTw8OSkKKwkjZGVmaW5lIFBNM0ZCV3JpdGVNb2RlX0VuYWJsZTAgICAgICAgICAgICAgICAgICAgICAgICAgIDE8PDEyCisJI2RlZmluZSBQTTNGQldyaXRlTW9kZV9FbmFibGUxICAgICAgICAgICAgICAgICAgICAgICAgICAxPDwxMworCSNkZWZpbmUgUE0zRkJXcml0ZU1vZGVfRW5hYmxlMiAgICAgICAgICAgICAgICAgICAgICAgICAgMTw8MTQKKwkjZGVmaW5lIFBNM0ZCV3JpdGVNb2RlX0VuYWJsZTMgICAgICAgICAgICAgICAgICAgICAgICAgIDE8PDE1CisJI2RlZmluZSBQTTNGQldyaXRlTW9kZV9MYXlvdXQwKGwpICAgICAgICAgICAgICAgKCgobCkmMHgzKTw8MTYpCisJI2RlZmluZSBQTTNGQldyaXRlTW9kZV9MYXlvdXQxKGwpICAgICAgICAgICAgICAgKCgobCkmMHgzKTw8MTgpCisJI2RlZmluZSBQTTNGQldyaXRlTW9kZV9MYXlvdXQyKGwpICAgICAgICAgICAgICAgKCgobCkmMHgzKTw8MjApCisJI2RlZmluZSBQTTNGQldyaXRlTW9kZV9MYXlvdXQzKGwpICAgICAgICAgICAgICAgKCgobCkmMHgzKTw8MjIpCisJI2RlZmluZSBQTTNGQldyaXRlTW9kZV9PcmlnaW4wICAgICAgICAgICAgICAgICAgICAgICAgICAxPDwyNAorCSNkZWZpbmUgUE0zRkJXcml0ZU1vZGVfT3JpZ2luMSAgICAgICAgICAgICAgICAgICAgICAgICAgMTw8MjUKKwkjZGVmaW5lIFBNM0ZCV3JpdGVNb2RlX09yaWdpbjIgICAgICAgICAgICAgICAgICAgICAgICAgIDE8PDI2CisJI2RlZmluZSBQTTNGQldyaXRlTW9kZV9PcmlnaW4zICAgICAgICAgICAgICAgICAgICAgICAgICAxPDwyNworI2RlZmluZSBQTTNGb3JlZ3JvdW5kQ29sb3IJCQkJCTB4YjBjMAorLyogLi4uICovCisjZGVmaW5lIFBNM0dJRE1vZGUJCQkJCQkweGI1MzgKKyNkZWZpbmUgUE0zR0lETW9kZUFuZAkJCQkJCTB4YjViMAorI2RlZmluZSBQTTNHSURNb2RlT3IJCQkJCQkweGI1YjgKKy8qIC4uLiAqLworI2RlZmluZSBQTTNMQkRlc3RSZWFkQnVmZmVyQWRkcgkJCQkJMHhiNTEwCisjZGVmaW5lIFBNM0xCRGVzdFJlYWRCdWZmZXJPZmZzZXQJCQkJMHhiNTE4CisjZGVmaW5lIFBNM0xCRGVzdFJlYWRFbmFibGVzCQkJCQkweGI1MDgKKyNkZWZpbmUgUE0zTEJEZXN0UmVhZEVuYWJsZXNBbmQJCQkJCTB4YjU5MAorI2RlZmluZSBQTTNMQkRlc3RSZWFkRW5hYmxlc09yCQkJCQkweGI1OTgKKyNkZWZpbmUgUE0zTEJEZXN0UmVhZE1vZGUJCQkJCTB4YjUwMAorI2RlZmluZSBQTTNMQkRlc3RSZWFkTW9kZUFuZAkJCQkJMHhiNTgwCisjZGVmaW5lIFBNM0xCRGVzdFJlYWRNb2RlT3IJCQkJCTB4YjU4OAorCSNkZWZpbmUgUE0zTEJEZXN0UmVhZE1vZGVfRGlzYWJsZQkJCTA8PDAKKwkjZGVmaW5lIFBNM0xCRGVzdFJlYWRNb2RlX0VuYWJsZQkJCTE8PDAKKwkjZGVmaW5lIFBNM0xCRGVzdFJlYWRNb2RlX1N0cmlwZVBpdGNoKHApCQkoKChwKSYweDcpPDwyKQorCSNkZWZpbmUgUE0zTEJEZXN0UmVhZE1vZGVfU3RyaXBlSGVpZ2h0KGgpCQkoKChoKSYweDcpPDw1KQorCSNkZWZpbmUgUE0zTEJEZXN0UmVhZE1vZGVfTGF5b3V0CQkJMTw8OAorCSNkZWZpbmUgUE0zTEJEZXN0UmVhZE1vZGVfT3JpZ2luCQkJMTw8OQorCSNkZWZpbmUgUE0zTEJEZXN0UmVhZE1vZGVfVXNlclJlYWRFbmFibGVzCQkxPDwxMAorCSNkZWZpbmUgUE0zTEJEZXN0UmVhZE1vZGVfUGFja2VkMTYJCQkxPDwxMQorCSNkZWZpbmUgUE0zTEJEZXN0UmVhZE1vZGVfV2lkdGgodykJCQkoKCh3KSYweGZmZik8PDEyKQorI2RlZmluZSBQTTNMQlJlYWRGb3JtYXQJCQkJCQkweDg4ODgKKwkjZGVmaW5lIFBNM0xCUmVhZEZvcm1hdF9EZXB0aFdpZHRoKHcpCQkJKCgodykmMHgzKTw8MCkKKwkjZGVmaW5lIFBNM0xCUmVhZEZvcm1hdF9TdGVuY2lsV2lkdGgodykJCQkoKCh3KSYweGYpPDwyKQorCSNkZWZpbmUgUE0zTEJSZWFkRm9ybWF0X1N0ZW5jaWxQb3NpdGlvbihwKQkJKCgocCkmMHgxZik8PDYpCisJI2RlZmluZSBQTTNMQlJlYWRGb3JtYXRfRkNQV2lkdGgodykJCQkoKCh3KSYweGYpPDwxMSkKKwkjZGVmaW5lIFBNM0xCUmVhZEZvcm1hdF9GQ1BQb3NpdGlvbihwKQkJCSgoKHApJjB4MWYpPDwxNSkKKwkjZGVmaW5lIFBNM0xCUmVhZEZvcm1hdF9HSURXaWR0aCh3KQkJCSgoKHcpJjB4Nyk8PDIwKQorCSNkZWZpbmUgUE0zTEJSZWFkRm9ybWF0X0dJRFBvc2l0aW9uKHApCQkJKCgocCkmMHgxZik8PDIzKQorI2RlZmluZSBQTTNMQlNvdXJjZVJlYWRCdWZmZXJBZGRyCQkJCTB4YjUyOAorI2RlZmluZSBQTTNMQlNvdXJjZVJlYWRCdWZmZXJPZmZzZXQJCQkJMHhiNTMwCisjZGVmaW5lIFBNM0xCU291cmNlUmVhZE1vZGUJCQkJCTB4YjUyMAorI2RlZmluZSBQTTNMQlNvdXJjZVJlYWRNb2RlQW5kCQkJCQkweGI1YTAKKyNkZWZpbmUgUE0zTEJTb3VyY2VSZWFkTW9kZU9yCQkJCQkweGI1YTgKKwkjZGVmaW5lIFBNM0xCU291cmNlUmVhZE1vZGVfRW5hYmxlCQkJMTw8MAorCSNkZWZpbmUgUE0zTEJTb3VyY2VSZWFkTW9kZV9TdHJpcGVQaXRjaChwKQkJKCgocCkmMHg3KTw8MikKKwkjZGVmaW5lIFBNM0xCU291cmNlUmVhZE1vZGVfU3RyaXBlSGVpZ2h0KGgpCQkoKChoKSYweDcpPDw1KQorCSNkZWZpbmUgUE0zTEJTb3VyY2VSZWFkTW9kZV9MYXlvdXQJCQkxPDw4CisJI2RlZmluZSBQTTNMQlNvdXJjZVJlYWRNb2RlX09yaWdpbgkJCTE8PDkKKwkjZGVmaW5lIFBNM0xCU291cmNlUmVhZE1vZGVfUGFja2VkMTYJCQkxPDwxMAorCSNkZWZpbmUgUE0zTEJTb3VyY2VSZWFkTW9kZV9XaWR0aCh3KQkJCSgoKHcpJjB4ZmZmKTw8MTEpCisjZGVmaW5lIFBNM0xCU3RlbmNpbAkJCQkJCTB4ODhhOAorI2RlZmluZSBQTTNMQldyaXRlQnVmZmVyQWRkcgkJCQkJMHhiNTQwCisjZGVmaW5lIFBNM0xCV3JpdGVCdWZmZXJPZmZzZXQJCQkJCTB4YjU0OAorI2RlZmluZSBQTTNMQldyaXRlRm9ybWF0CQkJCQkweDg4YzgKKwkjZGVmaW5lIFBNM0xCV3JpdGVGb3JtYXRfRGVwdGhXaWR0aCh3KQkJCSgoKHcpJjB4Myk8PDApCisJI2RlZmluZSBQTTNMQldyaXRlRm9ybWF0X1N0ZW5jaWxXaWR0aCh3KQkJKCgodykmMHhmKTw8MikKKwkjZGVmaW5lIFBNM0xCV3JpdGVGb3JtYXRfU3RlbmNpbFBvc2l0aW9uKHApCQkoKChwKSYweDFmKTw8NikKKwkjZGVmaW5lIFBNM0xCV3JpdGVGb3JtYXRfR0lEV2lkdGgodykJCQkoKCh3KSYweDcpPDwyMCkKKwkjZGVmaW5lIFBNM0xCV3JpdGVGb3JtYXRfR0lEUG9zaXRpb24ocCkJCQkoKChwKSYweDFmKTw8MjMpCisjZGVmaW5lIFBNM0xCV3JpdGVNb2RlCQkJCQkJMHg4OGMwCisjZGVmaW5lIFBNM0xCV3JpdGVNb2RlQW5kCQkJCQkweGFjODAKKyNkZWZpbmUgUE0zTEJXcml0ZU1vZGVPcgkJCQkJMHhhYzg4CisJI2RlZmluZSBQTTNMQldyaXRlTW9kZV9Xcml0ZURpc2FibGUJCQkwPDwwCisJI2RlZmluZSBQTTNMQldyaXRlTW9kZV9Xcml0ZUVuYWJsZQkJCTE8PDAKKwkjZGVmaW5lIFBNM0xCV3JpdGVNb2RlX1N0cmlwZVBpdGNoKHApCQkJKCgocCkmMHg3KTw8MykKKwkjZGVmaW5lIFBNM0xCV3JpdGVNb2RlX1N0cmlwZUhlaWdodChoKQkJCSgoKGgpJjB4Nyk8PDYpCisJI2RlZmluZSBQTTNMQldyaXRlTW9kZV9MYXlvdXQJCQkJMTw8OQorCSNkZWZpbmUgUE0zTEJXcml0ZU1vZGVfT3JpZ2luCQkJCTE8PDEwCisJI2RlZmluZSBQTTNMQldyaXRlTW9kZV9QYWNrZWQxNgkJCQkxPDwxMQorCSNkZWZpbmUgUE0zTEJXcml0ZU1vZGVfV2lkdGgodykJCQkJKCgodykmMHhmZmYpPDwxMikKKy8qIC4uLiAqLworI2RlZmluZSBQTTNMaW5lU3RpcHBsZU1vZGUJCQkJCTB4ODFhOAorI2RlZmluZSBQTTNMaW5lU3RpcHBsZU1vZGVBbmQJCQkJCTB4YWJjMAorI2RlZmluZSBQTTNMaW5lU3RpcHBsZU1vZGVPcgkJCQkJMHhhYmM4CisjZGVmaW5lIFBNM0xvYWRMaW5lU3RpcHBsZUNvdW50ZXJzCQkJCTB4ODFiMAorLyogLi4uICovCisjZGVmaW5lIFBNM0xvZ2ljYWxPcE1vZGUJCQkJCTB4ODgyOAorI2RlZmluZSBQTTNMb2dpY2FsT3BNb2RlQW5kCQkJCQkweGFjZTAKKyNkZWZpbmUgUE0zTG9naWNhbE9wTW9kZU9yCQkJCQkweGFjZTgKKwkjZGVmaW5lIFBNM0xvZ2ljYWxPcE1vZGVfRGlzYWJsZQkJCSgwPDwwKQorCSNkZWZpbmUgUE0zTG9naWNhbE9wTW9kZV9FbmFibGUJCQkJKDE8PDApCisJI2RlZmluZSBQTTNMb2dpY2FsT3BNb2RlX0xvZ2ljT3Aob3ApCQkJKCgob3ApJjB4Zik8PDEpCisJI2RlZmluZSBQTTNMb2dpY2FsT3BNb2RlX1VzZUNvbnN0YW50V3JpdGVEYXRhX0Rpc2FibGUJKDA8PDUpCisJI2RlZmluZSBQTTNMb2dpY2FsT3BNb2RlX1VzZUNvbnN0YW50V3JpdGVEYXRhX0VuYWJsZQkoMTw8NSkKKwkjZGVmaW5lIFBNM0xvZ2ljYWxPcE1vZGVfQmFja2dyb3VuZF9EaXNhYmxlCQkoMDw8NikKKwkjZGVmaW5lIFBNM0xvZ2ljYWxPcE1vZGVfQmFja2dyb3VuZF9FbmFibGUJCSgxPDw2KQorCSNkZWZpbmUgUE0zTG9naWNhbE9wTW9kZV9CYWNrZ3JvdW5kX0xvZ2ljT3Aob3ApCQkoKChvcCkmMHhmKTw8NykKKwkjZGVmaW5lIFBNM0xvZ2ljYWxPcE1vZGVfVXNlQ29uc3RhbnRTb3VyY2VfRGlzYWJsZQkoMDw8MTEpCisJI2RlZmluZSBQTTNMb2dpY2FsT3BNb2RlX1VzZUNvbnN0YW50U291cmNlX0VuYWJsZQkoMTw8MTEpCisKKy8qIC4uLiAqLworI2RlZmluZSBQTTNMVVQJCQkJCQkJMHg4ZTgwCisvKiAuLi4gKi8KKyNkZWZpbmUgUE0zTFVUCQkJCQkJCTB4OGU4MAorI2RlZmluZSBQTTNMVVRBZGRyZXNzCQkJCQkJMHg4NGQwCisjZGVmaW5lIFBNM0xVVERhdGEJCQkJCQkweDg0YzgKKyNkZWZpbmUgUE0zTFVUSW5kZXgJCQkJCQkweDg0YzAKKyNkZWZpbmUgUE0zTFVUTW9kZQkJCQkJCTB4YjM3OAorI2RlZmluZSBQTTNMVVRNb2RlQW5kCQkJCQkJMHhhZDcwCisjZGVmaW5lIFBNM0xVVE1vZGVPcgkJCQkJCTB4YWQ3OAorI2RlZmluZSBQTTNMVVRUcmFuc2ZlcgkJCQkJCTB4ODRkOAorLyogLi4uICovCisjZGVmaW5lIFBNM1BpeGVsU2l6ZQkJCQkJCTB4ODBjMAorCSNkZWZpbmUgUE0zUGl4ZWxTaXplX0dMT0JBTF8zMkJJVAkJCSgwPDwwKQorCSNkZWZpbmUgUE0zUGl4ZWxTaXplX0dMT0JBTF8xNkJJVAkJCSgxPDwwKQorCSNkZWZpbmUgUE0zUGl4ZWxTaXplX0dMT0JBTF84QklUCQkJKDI8PDApCisJI2RlZmluZSBQTTNQaXhlbFNpemVfUkFTVEVSSVpFUl8zMkJJVAkJCSgwPDwyKQorCSNkZWZpbmUgUE0zUGl4ZWxTaXplX1JBU1RFUklaRVJfMTZCSVQJCQkoMTw8MikKKwkjZGVmaW5lIFBNM1BpeGVsU2l6ZV9SQVNURVJJWkVSXzhCSVQJCQkoMjw8MikKKwkjZGVmaW5lIFBNM1BpeGVsU2l6ZV9TQ0lTU09SX0FORF9TVElQUExFXzMyQklUCQkoMDw8NCkKKwkjZGVmaW5lIFBNM1BpeGVsU2l6ZV9TQ0lTU09SX0FORF9TVElQUExFXzE2QklUCQkoMTw8NCkKKwkjZGVmaW5lIFBNM1BpeGVsU2l6ZV9TQ0lTU09SX0FORF9TVElQUExFXzhCSVQJCSgyPDw0KQorCSNkZWZpbmUgUE0zUGl4ZWxTaXplX1RFWFRVUkVfMzJCSVQJCQkoMDw8NikKKwkjZGVmaW5lIFBNM1BpeGVsU2l6ZV9URVhUVVJFXzE2QklUCQkJKDE8PDYpCisJI2RlZmluZSBQTTNQaXhlbFNpemVfVEVYVFVSRV84QklUCQkJKDI8PDYpCisJI2RlZmluZSBQTTNQaXhlbFNpemVfTFVUXzMyQklUCQkJCSgwPDw4KQorCSNkZWZpbmUgUE0zUGl4ZWxTaXplX0xVVF8xNkJJVAkJCQkoMTw8OCkKKwkjZGVmaW5lIFBNM1BpeGVsU2l6ZV9MVVRfOEJJVAkJCQkoMjw8OCkKKwkjZGVmaW5lIFBNM1BpeGVsU2l6ZV9GUkFNRUJVRkZFUl8zMkJJVAkJCSgwPDwxMCkKKwkjZGVmaW5lIFBNM1BpeGVsU2l6ZV9GUkFNRUJVRkZFUl8xNkJJVAkJCSgxPDwxMCkKKwkjZGVmaW5lIFBNM1BpeGVsU2l6ZV9GUkFNRUJVRkZFUl84QklUCQkJKDI8PDEwKQorCSNkZWZpbmUgUE0zUGl4ZWxTaXplX0xPR0lDQUxfT1BfMzJCSVQJCQkoMDw8MTIpCisJI2RlZmluZSBQTTNQaXhlbFNpemVfTE9HSUNBTF9PUF8xNkJJVAkJCSgxPDwxMikKKwkjZGVmaW5lIFBNM1BpeGVsU2l6ZV9MT0dJQ0FMX09QXzhCSVQJCQkoMjw8MTIpCisJI2RlZmluZSBQTTNQaXhlbFNpemVfTE9DQUxCVUZGRVJfMzJCSVQJCQkoMDw8MTQpCisJI2RlZmluZSBQTTNQaXhlbFNpemVfTE9DQUxCVUZGRVJfMTZCSVQJCQkoMTw8MTQpCisJI2RlZmluZSBQTTNQaXhlbFNpemVfTE9DQUxCVUZGRVJfOEJJVAkJCSgyPDwxNCkKKwkjZGVmaW5lIFBNM1BpeGVsU2l6ZV9TRVRVUF8zMkJJVAkJCSgwPDwxNikKKwkjZGVmaW5lIFBNM1BpeGVsU2l6ZV9TRVRVUF8xNkJJVAkJCSgxPDwxNikKKwkjZGVmaW5lIFBNM1BpeGVsU2l6ZV9TRVRVUF84QklUCQkJCSgyPDwxNikKKwkjZGVmaW5lIFBNM1BpeGVsU2l6ZV9HTE9CQUwJCQkJKDA8PDMxKQorCSNkZWZpbmUgUE0zUGl4ZWxTaXplX0lORElWSURVQUwJCQkJKDE8PDMxKQorLyogLi4uICovCisjZGVmaW5lIFBNM1JlbmRlcgkJCQkJCTB4ODAzOAorCSNkZWZpbmUgUE0zUmVuZGVyX0FyZWFTdGlwcGxlX0Rpc2FibGUJCQkoMDw8MCkKKwkjZGVmaW5lIFBNM1JlbmRlcl9BcmVhU3RpcHBsZV9FbmFibGUJCQkoMTw8MCkKKwkjZGVmaW5lIFBNM1JlbmRlcl9MaW5lU3RpcHBsZV9EaXNhYmxlCQkJKDA8PDEpCisJI2RlZmluZSBQTTNSZW5kZXJfTGluZVN0aXBwbGVfRW5hYmxlCQkJKDE8PDEpCisJI2RlZmluZSBQTTNSZW5kZXJfUmVzZXRMaW5lX0Rpc2FibGUJCQkoMDw8MikKKwkjZGVmaW5lIFBNM1JlbmRlcl9SZXNldExpbmVfRW5hYmxlCQkJKDE8PDIpCisJI2RlZmluZSBQTTNSZW5kZXJfRmFzdEZpbGxfRGlzYWJsZQkJCSgwPDwzKQorCSNkZWZpbmUgUE0zUmVuZGVyX0Zhc3RGaWxsX0VuYWJsZQkJCSgxPDwzKQorCSNkZWZpbmUgUE0zUmVuZGVyX1ByaW1pdGl2ZV9MaW5lCQkJKDA8PDYpCisJI2RlZmluZSBQTTNSZW5kZXJfUHJpbWl0aXZlX1RyYXBlem9pZAkJCSgxPDw2KQorCSNkZWZpbmUgUE0zUmVuZGVyX1ByaW1pdGl2ZV9Qb2ludAkJCSgyPDw2KQorCSNkZWZpbmUgUE0zUmVuZGVyX0FudGlhbGlhc19EaXNhYmxlCQkJKDA8PDgpCisJI2RlZmluZSBQTTNSZW5kZXJfQW50aWFsaWFzX0VuYWJsZQkJCSgxPDw4KQorCSNkZWZpbmUgUE0zUmVuZGVyX0FudGlhbGlhc19TdWJQaXhlbFJlc180eDQJCSgwPDw5KQorCSNkZWZpbmUgUE0zUmVuZGVyX0FudGlhbGlhc19TdWJQaXhlbFJlc184eDgJCSgxPDw5KQorCSNkZWZpbmUgUE0zUmVuZGVyX1VzZVBvaW50VGFibGVfRGlzYWJsZQkJCSgwPDwxMCkKKwkjZGVmaW5lIFBNM1JlbmRlcl9Vc2VQb2ludFRhYmxlX0VuYWJsZQkJCSgxPDwxMCkKKwkjZGVmaW5lIFBNM1JlbmRlcl9TeW5jT25iaXRNYXNrX0Rpc2FibGUJCQkoMDw8MTEpCisJI2RlZmluZSBQTTNSZW5kZXJfU3luY09uQml0TWFza19FbmFibGUJCQkoMTw8MTEpCisJI2RlZmluZSBQTTNSZW5kZXJfU3luY09uSG9zdERhdGFfRGlzYWJsZQkJKDA8PDEyKQorCSNkZWZpbmUgUE0zUmVuZGVyX1N5bmNPbkhvc3REYXRhX0VuYWJsZQkJCSgxPDwxMikKKwkjZGVmaW5lIFBNM1JlbmRlcl9UZXh0dXJlX0Rpc2FibGUJCQkoMDw8MTMpCisJI2RlZmluZSBQTTNSZW5kZXJfVGV4dHVyZV9FbmFibGUJCQkoMTw8MTMpCisJI2RlZmluZSBQTTNSZW5kZXJfRm9nX0Rpc2FibGUJCQkJKDA8PDE0KQorCSNkZWZpbmUgUE0zUmVuZGVyX0ZvZ19FbmFibGUJCQkJKDE8PDE0KQorCSNkZWZpbmUgUE0zUmVuZGVyX0NvdmVyYWdlX0Rpc2FibGUJCQkoMDw8MTUpCisJI2RlZmluZSBQTTNSZW5kZXJfQ292ZXJhZ2VfRW5hYmxlCQkJKDE8PDE1KQorCSNkZWZpbmUgUE0zUmVuZGVyX1N1YlBpeGVsQ29ycmVjdGlvbl9EaXNhYmxlCQkoMDw8MTYpCisJI2RlZmluZSBQTTNSZW5kZXJfU3ViUGl4ZWxDb3JyZWN0aW9uX0VuYWJsZQkJKDE8PDE2KQorCSNkZWZpbmUgUE0zUmVuZGVyX1NwYW5PcGVyYXRpb25fRGlzYWJsZQkJCSgwPDwxOCkKKwkjZGVmaW5lIFBNM1JlbmRlcl9TcGFuT3BlcmF0aW9uX0VuYWJsZQkJCSgxPDwxOCkKKwkjZGVmaW5lIFBNM1JlbmRlcl9GQlNvdXJjZVJlYWRfRGlzYWJsZQkJCSgwPDwyNykKKwkjZGVmaW5lIFBNM1JlbmRlcl9GQlNvdXJjZVJlYWRfRW5hYmxlCQkJKDE8PDI3KQorI2RlZmluZSBQTTNSYXN0ZXJpemVyTW9kZQkJCQkJMHg4MGEwCisjZGVmaW5lIFBNM1Jhc3Rlcml6ZXJNb2RlQW5kCQkJCQkweGFiYTAKKyNkZWZpbmUgUE0zUmFzdGVyaXplck1vZGVPcgkJCQkJMHhhYmI4CisjZGVmaW5lIFBNM1JlY3RhbmdsZUhlaWdodAkJCQkJMHg5NGUwCisjZGVmaW5lIFBNM1JlbmRlcgkJCQkJCTB4ODAzOAorI2RlZmluZSBQTTNSZXBlYXRMaW5lCQkJCQkJMHg5MzI4CisjZGVmaW5lIFBNM1Jlc2V0UGlja1Jlc3VsdAkJCQkJMHg4YzIwCisjZGVmaW5lIFBNM1JMRU1hc2sJCQkJCQkweDhjNDgKKyNkZWZpbmUgUE0zUm91dGVyTW9kZQkJCQkJCTB4ODg0MAorI2RlZmluZSBQTTNSU3RhcnQJCQkJCQkweDg3ODAKKyNkZWZpbmUgUE0zUzFTdGFydAkJCQkJCTB4ODQwMAorI2RlZmluZSBQTTNhdmVMaW5lU3RpcHBsZUNvdW50ZXJzCQkJCTB4ODFjMAorI2RlZmluZSBQTTNTY2lzc29yTWF4WFkJCQkJCQkweDgxOTAKKyNkZWZpbmUgUE0zU2Npc3Nvck1pblhZCQkJCQkJMHg4MTg4CisjZGVmaW5lIFBNM1NjaXNzb3JNb2RlCQkJCQkJMHg4MTgwCisjZGVmaW5lIFBNM1NjaXNzb3JNb2RlQW5kCQkJCQkweGFiYjAKKyNkZWZpbmUgUE0zU2Npc3Nvck1vZGVPcgkJCQkJMHhhYmI4CisjZGVmaW5lIFBNM1NjcmVlblNpemUJCQkJCQkweDgxOTgKKyNkZWZpbmUgUE0zU2VjdXJpdHkJCQkJCQkweDg5MDgKKyNkZWZpbmUgUE0zU2V0TG9naWNhbFRleHR1cmVQYWdlCQkJCTB4YjM2MAorI2RlZmluZSBQTTNTaXplT2ZGcmFtZWJ1ZmZlcgkJCQkJMHhiMGE4CisjZGVmaW5lIFBNM1NTdGFydAkJCQkJCTB4ODM4OAorI2RlZmluZSBQTTNTdGFydFhEb20JCQkJCQkweDgwMDAKKyNkZWZpbmUgUE0zU3RhcnRYU3ViCQkJCQkJMHg4MDEwCisjZGVmaW5lIFBNM1N0YXJ0WQkJCQkJCTB4ODAyMAorLyogLi4uICovCisjZGVmaW5lIFBNM1NwYW5Db2xvck1hc2sJCQkJCTB4ODE2OAorLyogLi4uICovCisjZGVmaW5lIFBNM1RleHR1cmVBcHBsaWNhdGlvbk1vZGUJCQkJMHg4NjgwCisjZGVmaW5lIFBNM1RleHR1cmVBcHBsaWNhdGlvbk1vZGVBbmQJCQkJMHhhYzUwCisjZGVmaW5lIFBNM1RleHR1cmVBcHBsaWNhdGlvbk1vZGVPcgkJCQkweGFjNTgKKyNkZWZpbmUgUE0zVGV4dHVyZUJhc2VBZGRyCQkJCQkweDg1MDAKKyNkZWZpbmUgUE0zVGV4dHVyZUNhY2hlQ29udHJvbAkJCQkJMHg4NDkwCisjZGVmaW5lIFBNM1RleHR1cmVDaHJvbWFMb3dlcjAJCQkJCTB4ODRmMAorI2RlZmluZSBQTTNUZXh0dXJlQ2hyb21hTG93ZXIxCQkJCQkweDg2MDgKKyNkZWZpbmUgUE0zVGV4dHVyZUNocm9tYVVwcGVyMAkJCQkJMHg4NGU4CisjZGVmaW5lIFBNM1RleHR1cmVDaHJvbWFVcHBlcjEJCQkJCTB4ODYwMAorI2RlZmluZSBQTTNUZXh0dXJlQ29tcG9zaXRlQWxwaGFNb2RlMAkJCQkweGIzMTAKKyNkZWZpbmUgUE0zVGV4dHVyZUNvbXBvc2l0ZUFscGhhTW9kZTBBbmQJCQkweGIzOTAKKyNkZWZpbmUgUE0zVGV4dHVyZUNvbXBvc2l0ZUFscGhhTW9kZTBPcgkJCQkweGIzOTgKKyNkZWZpbmUgUE0zVGV4dHVyZUNvbXBvc2l0ZUFscGhhTW9kZTEJCQkJMHhiMzIwCisjZGVmaW5lIFBNM1RleHR1cmVDb21wb3NpdGVBbHBoYU1vZGUxQW5kCQkJMHhiM2IwCisjZGVmaW5lIFBNM1RleHR1cmVDb21wb3NpdGVBbHBoYU1vZGUxT3IJCQkJMHhiM2I4CisjZGVmaW5lIFBNM1RleHR1cmVDb21wb3NpdGVDb2xvck1vZGUwCQkJCTB4YjMwOAorI2RlZmluZSBQTTNUZXh0dXJlQ29tcG9zaXRlQ29sb3JNb2RlMEFuZAkJCTB4YjM4MAorI2RlZmluZSBQTTNUZXh0dXJlQ29tcG9zaXRlQ29sb3JNb2RlME9yCQkJCTB4YjM4OAorI2RlZmluZSBQTTNUZXh0dXJlQ29tcG9zaXRlQ29sb3JNb2RlMQkJCQkweGIzMTgKKyNkZWZpbmUgUE0zVGV4dHVyZUNvbXBvc2l0ZUNvbG9yTW9kZTFBbmQJCQkweGIzYTAKKyNkZWZpbmUgUE0zVGV4dHVyZUNvbXBvc2l0ZUNvbG9yTW9kZTFPcgkJCQkweGIzYTgKKyNkZWZpbmUgUE0zVGV4dHVyZUNvbXBvc2l0ZUZhY3RvcjAJCQkJMHhiMzI4CisjZGVmaW5lIFBNM1RleHR1cmVDb21wb3NpdGVGYWN0b3IxCQkJCTB4YjMzMAorI2RlZmluZSBQTTNUZXh0dXJlQ29tcG9zaXRlTW9kZQkJCQkJMHhiMzAwCisjZGVmaW5lIFBNM1RleHR1cmVDb29yZE1vZGUJCQkJCTB4ODM4MAorI2RlZmluZSBQTTNUZXh0dXJlQ29vcmRNb2RlQW5kCQkJCQkweGFjMjAKKyNkZWZpbmUgUE0zVGV4dHVyZUNvb3JkTW9kZU9yCQkJCQkweGFjMjgKKyNkZWZpbmUgUE0zVGV4dHVyZURhdGEJCQkJCQkweDg4ZTgKKy8qCisjZGVmaW5lIFBNM1RleHR1cmVEb3dubG9hZENvbnRyb2wJCQkJMHgwMTA4CisqLworI2RlZmluZSBQTTNUZXh0dXJlRG93bmxvYWRPZmZzZXQJCQkJMHg4OGYwCisjZGVmaW5lIFBNM1RleHR1cmVFbnZDb2xvcgkJCQkJMHg4Njg4CisjZGVmaW5lIFBNM1RleHR1cmVGaWx0ZXJNb2RlCQkJCQkweDg0ZTAKKyNkZWZpbmUgUE0zVGV4dHVyZUZpbHRlck1vZGVBbmQJCQkJCTB4YWQ1MAorI2RlZmluZSBQTTNUZXh0dXJlRmlsdGVyTW9kZU9yCQkJCQkweGFkNTgKKyNkZWZpbmUgUE0zVGV4dHVyZUluZGV4TW9kZTAJCQkJCTB4YjMzOAorI2RlZmluZSBQTTNUZXh0dXJlSW5kZXhNb2RlMEFuZAkJCQkJMHhiM2MwCisjZGVmaW5lIFBNM1RleHR1cmVJbmRleE1vZGUwT3IJCQkJCTB4YjNjOAorI2RlZmluZSBQTTNUZXh0dXJlSW5kZXhNb2RlMQkJCQkJMHhiMzQwCisjZGVmaW5lIFBNM1RleHR1cmVJbmRleE1vZGUxQW5kCQkJCQkweGIzZDAKKyNkZWZpbmUgUE0zVGV4dHVyZUluZGV4TW9kZTFPcgkJCQkJMHhiM2Q4CisvKiAuLi4gKi8KKyNkZWZpbmUgUE0zVGV4dHVyZU1hcFNpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGI0MjgKKyNkZWZpbmUgUE0zVGV4dHVyZU1hcFdpZHRoMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg1ODAKKyNkZWZpbmUgUE0zVGV4dHVyZU1hcFdpZHRoMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg1ODgKKyAgICAgICAgI2RlZmluZSBQTTNUZXh0dXJlTWFwV2lkdGhfV2lkdGgodykgICAgICAgICAgICAgKCh3JjB4ZmZmKTw8MCkKKyAgICAgICAgI2RlZmluZSBQTTNUZXh0dXJlTWFwV2lkdGhfQm9yZGVyTGF5b3V0ICAgICAgICAgICAgICAgICAoMTw8MTIpCisgICAgICAgICNkZWZpbmUgUE0zVGV4dHVyZU1hcFdpZHRoX0xheW91dF9MaW5lYXIgICAgICAgICAgICAgICAgKDA8PDEzKQorICAgICAgICAjZGVmaW5lIFBNM1RleHR1cmVNYXBXaWR0aF9MYXlvdXRfUGF0Y2g2NCAgICAgICAgICAgICAgICgxPDwxMykKKyAgICAgICAgI2RlZmluZSBQTTNUZXh0dXJlTWFwV2lkdGhfTGF5b3V0X1BhdGNoMzJfMiAgICAgICAgICAgICAoMjw8MTMpCisgICAgICAgICNkZWZpbmUgUE0zVGV4dHVyZU1hcFdpZHRoX0xheW91dF9QYXRjaDIgICAgICAgICAgICAgICAgKDM8PDEzKQorICAgICAgICAjZGVmaW5lIFBNM1RleHR1cmVNYXBXaWR0aF9Ib3N0VGV4dHVyZSAgICAgICAgICAgICAgICAgICgxPDwxNSkKKyNkZWZpbmUgUE0zVGV4dHVyZVJlYWRNb2RlMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGI0MDAKKyNkZWZpbmUgUE0zVGV4dHVyZVJlYWRNb2RlMEFuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGFjMzAKKyNkZWZpbmUgUE0zVGV4dHVyZVJlYWRNb2RlME9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGFjMzgKKyNkZWZpbmUgUE0zVGV4dHVyZVJlYWRNb2RlMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGI0MDgKKyNkZWZpbmUgUE0zVGV4dHVyZVJlYWRNb2RlMUFuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGFkNDAKKyNkZWZpbmUgUE0zVGV4dHVyZVJlYWRNb2RlMU9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGFkNDgKKy8qIC4uLiAqLworI2RlZmluZSBQTTNXYWl0Rm9yQ29tcGxldGlvbgkJCQkJMHg4MGI4CisjZGVmaW5lIFBNM1dpbmRvdwkJCQkJCTB4ODk4MAorCSNkZWZpbmUgUE0zV2luZG93X0ZvcmNlTEJVcGRhdGUJCQkJMTw8MworCSNkZWZpbmUgUE0zV2luZG93X0xCVXBkYXRlU291cmNlCQkJMTw8NAorCSNkZWZpbmUgUE0zV2luZG93X0ZyYW1lQ291bnQoYykJCQkJKCgoYykmMHhmZik8PDkKKwkjZGVmaW5lIFBNM1dpbmRvd19TdGVuY2lsRkNQCQkJCTE8PDE3CisJI2RlZmluZSBQTTNXaW5kb3dfRGVwdGhGQ1AJCQkJMTw8MTgKKwkjZGVmaW5lIFBNM1dpbmRvd19PdmVycmlkZVdyaXRlRmlsdGVyaW5nCQkxPDwxOQorI2RlZmluZSBQTTNXaW5kb3dBbmQJCQkJCQkweGFiODAKKyNkZWZpbmUgUE0zV2luZG93T3IJCQkJCQkweGFiODgKKyNkZWZpbmUgUE0zV2luZG93T3JpZ2luCQkJCQkJMHg4MWM4CisjZGVmaW5lIFBNM1hCaWFzCQkJCQkJMHg5NDgwCisjZGVmaW5lIFBNM1lCaWFzCQkJCQkJMHg5NDg4CisjZGVmaW5lIFBNM1lMaW1pdHMJCQkJCQkweDgwYTgKKyNkZWZpbmUgUE0zVVZNb2RlCQkJCQkJMHg4ZjAwCisjZGVmaW5lIFBNM1pGb2dCaWFzCQkJCQkJMHg4NmI4CisjZGVmaW5lIFBNM1pTdGFydAkJCQkJCTB4YWRkOAorI2RlZmluZSBQTTNaU3RhcnRMCQkJCQkJMHg4OWI4CisjZGVmaW5lIFBNM1pTdGFydFUJCQkJCQkweDg5YjAKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgR0xJTlQgUGVybWVkaWEzIDJEIHNldHVwIFVuaXQgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBQTTNDb25maWcyRAkJCQkJCTB4YjYxOAorCSNkZWZpbmUgUE0zQ29uZmlnMkRfT3BhcXVlU3BhbgkJCQkxPDwwCisJI2RlZmluZSBQTTNDb25maWcyRF9NdWx0aVJYQmxpdAkJCQkxPDwxCisJI2RlZmluZSBQTTNDb25maWcyRF9Vc2VyU2Npc3NvckVuYWJsZQkJCTE8PDIKKwkjZGVmaW5lIFBNM0NvbmZpZzJEX0ZCRGVzdFJlYWRFbmFibGUJCQkxPDwzCisJI2RlZmluZSBQTTNDb25maWcyRF9BbHBoYUJsZW5kRW5hYmxlCQkJMTw8NAorCSNkZWZpbmUgUE0zQ29uZmlnMkRfRGl0aGVyRW5hYmxlCQkJMTw8NQorCSNkZWZpbmUgUE0zQ29uZmlnMkRfRm9yZWdyb3VuZFJPUEVuYWJsZQkJCTE8PDYKKwkjZGVmaW5lIFBNM0NvbmZpZzJEX0ZvcmVncm91bmRST1Aocm9wKQkJKCgocm9wKSYweGYpPDw3KQorCSNkZWZpbmUgUE0zQ29uZmlnMkRfQmFja2dyb3VuZFJPUEVuYWJsZQkJCTE8PDExCisJI2RlZmluZSBQTTNDb25maWcyRF9CYWNrZ3JvdW5kUk9QKHJvcCkJCSgoKHJvcCkmMHhmKTw8MTIpCisJI2RlZmluZSBQTTNDb25maWcyRF9Vc2VDb25zdGFudFNvdXJjZQkJCTE8PDE2CisJI2RlZmluZSBQTTNDb25maWcyRF9GQldyaXRlRW5hYmxlCQkJMTw8MTcKKwkjZGVmaW5lIFBNM0NvbmZpZzJEX0Jsb2NraW5nCQkJCTE8PDE4CisJI2RlZmluZSBQTTNDb25maWcyRF9FeHRlcm5hbFNvdXJjZURhdGEJCQkxPDwxOQorCSNkZWZpbmUgUE0zQ29uZmlnMkRfTFVUTW9kZUVuYWJsZQkJCTE8PDIwCisjZGVmaW5lIFBNM0Rvd25sb2FkR2x5cGh3aWR0aAkJCQkJMHhiNjU4CisJI2RlZmluZSBQTTNEb3dubG9hZEdseXBod2lkdGhfR2x5cGhXaWR0aChndykJKChndykmMHhmZmZmKQorI2RlZmluZSBQTTNEb3dubG9hZFRhcmdldAkJCQkJMHhiNjUwCisJI2RlZmluZSBQTTNEb3dubG9hZFRhcmdldF9UYWdOYW1lKHRhZykJCSgodGFnKSYweDFmZmYpCisjZGVmaW5lIFBNM0dseXBoRGF0YQkJCQkJCTB4YjY2MAorI2RlZmluZSBQTTNHbHlwaFBvc2l0aW9uCQkJCQkweGI2MDgKKwkjZGVmaW5lIFBNM0dseXBoUG9zaXRpb25fWE9mZnNldCh4KQkJKCh4KSYweGZmZmYpCisJI2RlZmluZSBQTTNHbHlwaFBvc2l0aW9uX1lPZmZzZXQoeSkJCSgoKHkpJjB4ZmZmZik8PDE2KQorI2RlZmluZSBQTTNQYWNrZWQ0UGl4ZWxzCQkJCQkweGI2NjgKKyNkZWZpbmUgUE0zUGFja2VkOFBpeGVscwkJCQkJMHhiNjMwCisjZGVmaW5lIFBNM1BhY2tlZDE2UGl4ZWxzCQkJCQkweGI2MzgKKyNkZWZpbmUgUE0zUmVjdGFuZ2xlUG9zaXRpb24JCQkJCTB4YjYwMAorCSNkZWZpbmUgUE0zUmVjdGFuZ2xlUG9zaXRpb25fWE9mZnNldCh4KQkJKCh4KSYweGZmZmYpCisJI2RlZmluZSBQTTNSZWN0YW5nbGVQb3NpdGlvbl9ZT2Zmc2V0KHkpCQkoKCh5KSYweGZmZmYpPDwxNikKKyNkZWZpbmUgUE0zUmVuZGVyMkQJCQkJCQkweGI2NDAKKwkjZGVmaW5lIFBNM1JlbmRlcjJEX1dpZHRoKHcpCQkJKCh3KSYweDBmZmYpCisJI2RlZmluZSBQTTNSZW5kZXIyRF9PcGVyYXRpb25fTm9ybWFsCQkJMDw8MTIKKwkjZGVmaW5lIFBNM1JlbmRlcjJEX09wZXJhdGlvbl9TeW5jT25Ib3N0RGF0YQkJMTw8MTIKKwkjZGVmaW5lIFBNM1JlbmRlcjJEX09wZXJhdGlvbl9TeW5jT25CaXRNYXNrCQkyPDwxMgorCSNkZWZpbmUgUE0zUmVuZGVyMkRfT3BlcmF0aW9uX1BhdGNoT3JkZXJSZW5kZXJpbmcJMzw8MTIKKwkjZGVmaW5lIFBNM1JlbmRlcjJEX0ZCU291cmNlUmVhZEVuYWJsZQkJCTE8PDE0CisJI2RlZmluZSBQTTNSZW5kZXIyRF9TcGFuT3BlcmF0aW9uCQkJMTw8MTUKKwkjZGVmaW5lIFBNM1JlbmRlcjJEX0hlaWdodChoKQkJCSgoKGgpJjB4MGZmZik8PDE2KQorCSNkZWZpbmUgUE0zUmVuZGVyMkRfWFBvc2l0aXZlCQkJCTE8PDI4CisJI2RlZmluZSBQTTNSZW5kZXIyRF9ZUG9zaXRpdmUJCQkJMTw8MjkKKwkjZGVmaW5lIFBNM1JlbmRlcjJEX0FyZWFTdGlwcGxlRW5hYmxlCQkJMTw8MzAKKwkjZGVmaW5lIFBNM1JlbmRlcjJEX1RleHR1cmVFbmFibGUJCQkxPDwzMQorI2RlZmluZSBQTTNSZW5kZXIyREdseXBoCQkJCQkweGI2NDgKKwkjZGVmaW5lIFBNM1JlbmRlcjJER2x5cGhfV2lkdGgodykJCSgodykmMHg3ZikKKwkjZGVmaW5lIFBNM1JlbmRlcjJER2x5cGhfSGVpZ2h0KGgpCQkoKChoKSYweDdmKTw8NykKKwkjZGVmaW5lIFBNM1JlbmRlcjJER2x5cGhfWE9mZnNldCh4KQkJKCgoeCkmMHgxZmYpPDwxNCkKKwkjZGVmaW5lIFBNM1JlbmRlcjJER2x5cGhfWU9mZnNldCh5KQkJKCgoeSkmMHgxZmYpPDwyMykKKyNkZWZpbmUgUE0zUmVuZGVyUGF0Y2hPZmZzZXQJCQkJCTB4YjYxMAorCSNkZWZpbmUgUE0zUmVuZGVyUGF0Y2hPZmZzZXRfWE9mZnNldCh4KQkJKCh4KSYweGZmZmYpCisJI2RlZmluZSBQTTNSZW5kZXJQYXRjaE9mZnNldF9ZT2Zmc2V0KHkpCQkoKCh5KSYweGZmZmYpPDwxNikKKyNkZWZpbmUgUE0zUkxDb3VudAkJCQkJCTB4YjY3OAorCSNkZWZpbmUgUE0zUkxDb3VudF9Db3VudChjKQkJCSgoYykmMHgwZmZmKQorI2RlZmluZSBQTTNSTERhdGEJCQkJCQkweGI2NzAKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEdMSU5UIFBlcm1lZGlhMyBBbGlhcyBSZWdpc3RlciAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgUE0zRmlsbEJhY2tncm91bmRDb2xvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgzMzAKKyNkZWZpbmUgUE0zRmlsbENvbmZpZzJEMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgzMzgKKyNkZWZpbmUgUE0zRmlsbENvbmZpZzJEMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgzNjAKKwkjZGVmaW5lIFBNM0ZpbGxDb25maWcyRF9PcGFxdWVTcGFuICAgICAgICAgICAgICAgICAgICAgIDE8PDAKKwkjZGVmaW5lIFBNM0ZpbGxDb25maWcyRF9NdWx0aVJYQmxpdCAgICAgICAgICAgICAgICAgICAgIDE8PDEKKwkjZGVmaW5lIFBNM0ZpbGxDb25maWcyRF9Vc2VyU2Npc3NvckVuYWJsZSAgICAgICAgICAgICAgIDE8PDIKKwkjZGVmaW5lIFBNM0ZpbGxDb25maWcyRF9GQkRlc3RSZWFkRW5hYmxlICAgICAgICAgICAgICAgIDE8PDMKKwkjZGVmaW5lIFBNM0ZpbGxDb25maWcyRF9BbHBoYUJsZW5kRW5hYmxlICAgICAgICAgICAgICAgIDE8PDQKKwkjZGVmaW5lIFBNM0ZpbGxDb25maWcyRF9EaXRoZXJFbmFibGUgICAgICAgICAgICAgICAgICAgIDE8PDUKKwkjZGVmaW5lIFBNM0ZpbGxDb25maWcyRF9Gb3JlZ3JvdW5kUk9QRW5hYmxlICAgICAgICAgICAgIDE8PDYKKwkjZGVmaW5lIFBNM0ZpbGxDb25maWcyRF9Gb3JlZ3JvdW5kUk9QKHJvcCkgICAgICAgICAgICAgICgoKHJvcCkmMHhmKTw8NykKKwkjZGVmaW5lIFBNM0ZpbGxDb25maWcyRF9CYWNrZ3JvdW5kUk9QRW5hYmxlICAgICAgICAgICAgIDE8PDExCisJI2RlZmluZSBQTTNGaWxsQ29uZmlnMkRfQmFja2dyb3VuZFJPUChyb3ApICAgICAgICAgICAgICAoKChyb3ApJjB4Zik8PDEyKQorCSNkZWZpbmUgUE0zRmlsbENvbmZpZzJEX1VzZUNvbnN0YW50U291cmNlICAgICAgICAgICAgICAgMTw8MTYKKwkjZGVmaW5lIFBNM0ZpbGxDb25maWcyRF9GQldyaXRlRW5hYmxlICAgICAgICAgICAgICAgICAgIDE8PDE3CisJI2RlZmluZSBQTTNGaWxsQ29uZmlnMkRfQmxvY2tpbmcgICAgICAgICAgICAgICAgICAgICAgICAxPDwxOAorCSNkZWZpbmUgUE0zRmlsbENvbmZpZzJEX0V4dGVybmFsU291cmNlRGF0YSAgICAgICAgICAgICAgMTw8MTkKKwkjZGVmaW5lIFBNM0ZpbGxDb25maWcyRF9MVVRNb2RlRW5hYmxlICAgICAgICAgICAgICAgICAgIDE8PDIwCisjZGVmaW5lIFBNM0ZpbGxGQkRlc3RSZWFkQnVmZmVyQWRkciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MzEwCisjZGVmaW5lIFBNM0ZpbGxGQlNvdXJjZVJlYWRCdWZmZXJBZGRyICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MzA4CisjZGVmaW5lIFBNM0ZpbGxGQlNvdXJjZVJlYWRCdWZmZXJPZmZzZXQgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MzQwCisJI2RlZmluZSBQTTNGaWxsRkJTb3VyY2VSZWFkQnVmZmVyT2Zmc2V0X1hPZmZzZXQoeCkgICAgICgoeCkmMHhmZmZmKQorCSNkZWZpbmUgUE0zRmlsbEZCU291cmNlUmVhZEJ1ZmZlck9mZnNldF9ZT2Zmc2V0KHkpICAgICAgKCgoeSkmMHhmZmZmKTw8MTYpCisjZGVmaW5lIFBNM0ZpbGxGQldyaXRlQnVmZmVyQWRkciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MzAwCisjZGVmaW5lIFBNM0ZpbGxGb3JlZ3JvdW5kQ29sb3IwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MzI4CisjZGVmaW5lIFBNM0ZpbGxGb3JlZ3JvdW5kQ29sb3IxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MzU4CisjZGVmaW5lIFBNM0ZpbGxHbHlwaFBvc2l0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MzY4CisgICAgICAgICNkZWZpbmUgUE0zRmlsbEdseXBoUG9zaXRpb25fWE9mZnNldCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoeCkmMHhmZmZmKQorCSNkZWZpbmUgUE0zRmlsbEdseXBoUG9zaXRpb25fWU9mZnNldCh5KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHkpJjB4ZmZmZik8PDE2KQorI2RlZmluZSBQTTNGaWxsUmVjdGFuZ2xlUG9zaXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODM0OAorCSNkZWZpbmUgUE0zRmlsbFJlY3RhbmdsZVBvc2l0aW9uX1hPZmZzZXQoeCkgICAgICAgICAgICAoKHgpJjB4ZmZmZikKKwkjZGVmaW5lIFBNM0ZpbGxSZWN0YW5nbGVQb3NpdGlvbl9ZT2Zmc2V0KHkpICAgICAgICAgICAgKCgoeSkmMHhmZmZmKTw8MTYpCisKKyNkZWZpbmUgUE0zX1JFR1NfU0laRSAgICAgICAgICAgMHgxMDAwMAorI2RlZmluZSBQTTNfTUFYX1BJWENMT0NLICAgICAgICAzMDAwMDAKKy8qIGEgZmV3IG1vcmUgdXNlZnVsIHJlZ2lzdGVycyAmIHJlZ3MgdmFsdWUuLi4gKi8KKyNkZWZpbmUgUE0zU3luYyAweDhjNDAKKyAgICAgICAgI2RlZmluZSBQTTNTeW5jX1RhZyAweDE4OAorI2RlZmluZSBQTTNGaWx0ZXJNb2RlIDB4OGMwMAorICAgICAgICAjZGVmaW5lIFBNM0ZpbHRlck1vZGVTeW5jIDB4NDAwCisjZGVmaW5lIFBNM091dHB1dEZpZm8gMHgyMDAwCisjZGVmaW5lIFBNM1N0YXRpc3RpY01vZGUgMHg4YzA4CisjZGVmaW5lIFBNM0FyZWFTdGlwcGxlTW9kZSAweDgxYTAKKyAgICAgICAgI2RlZmluZSBBcmVhU3RpcHBsZVBhdHRlcm4wCQkJCQkoMHg4MjAwKQorICAgICAgICAjZGVmaW5lIEFyZWFTdGlwcGxlUGF0dGVybjEJCQkJCSgweDgyMDgpCisgICAgICAgICNkZWZpbmUgQXJlYVN0aXBwbGVQYXR0ZXJuMgkJCQkJKDB4ODIxMCkKKyAgICAgICAgI2RlZmluZSBBcmVhU3RpcHBsZVBhdHRlcm4zCQkJCQkoMHg4MjE4KQorICAgICAgICAjZGVmaW5lIEFyZWFTdGlwcGxlUGF0dGVybjQJCQkJCSgweDgyMjApCisgICAgICAgICNkZWZpbmUgQXJlYVN0aXBwbGVQYXR0ZXJuNQkJCQkJKDB4ODIyOCkKKyAgICAgICAgI2RlZmluZSBBcmVhU3RpcHBsZVBhdHRlcm42CQkJCQkoMHg4MjMwKQorICAgICAgICAjZGVmaW5lIEFyZWFTdGlwcGxlUGF0dGVybjcJCQkJCSgweDgyMzgpCisgICAgICAgICNkZWZpbmUgQXJlYVN0aXBwbGVQYXR0ZXJuOAkJCQkJKDB4ODI0MCkKKyAgICAgICAgI2RlZmluZSBBcmVhU3RpcHBsZVBhdHRlcm45CQkJCQkoMHg4MjQ4KQorICAgICAgICAjZGVmaW5lIEFyZWFTdGlwcGxlUGF0dGVybjEwCQkJCQkoMHg4MjUwKQorICAgICAgICAjZGVmaW5lIEFyZWFTdGlwcGxlUGF0dGVybjExCQkJCQkoMHg4MjU4KQorICAgICAgICAjZGVmaW5lIEFyZWFTdGlwcGxlUGF0dGVybjEyCQkJCQkoMHg4MjYwKQorICAgICAgICAjZGVmaW5lIEFyZWFTdGlwcGxlUGF0dGVybjEzCQkJCQkoMHg4MjY4KQorICAgICAgICAjZGVmaW5lIEFyZWFTdGlwcGxlUGF0dGVybjE0CQkJCQkoMHg4MjcwKQorICAgICAgICAjZGVmaW5lIEFyZWFTdGlwcGxlUGF0dGVybjE1CQkJCQkoMHg4Mjc4KQorICAgICAgICAjZGVmaW5lIEFyZWFTdGlwcGxlUGF0dGVybjE2CQkJCQkoMHg4MjgwKQorICAgICAgICAjZGVmaW5lIEFyZWFTdGlwcGxlUGF0dGVybjE3CQkJCQkoMHg4Mjg4KQorICAgICAgICAjZGVmaW5lIEFyZWFTdGlwcGxlUGF0dGVybjE4CQkJCQkoMHg4MjkwKQorICAgICAgICAjZGVmaW5lIEFyZWFTdGlwcGxlUGF0dGVybjE5CQkJCQkoMHg4Mjk4KQorICAgICAgICAjZGVmaW5lIEFyZWFTdGlwcGxlUGF0dGVybjIwCQkJCQkoMHg4MmEwKQorICAgICAgICAjZGVmaW5lIEFyZWFTdGlwcGxlUGF0dGVybjIxCQkJCQkoMHg4MmE4KQorICAgICAgICAjZGVmaW5lIEFyZWFTdGlwcGxlUGF0dGVybjIyCQkJCQkoMHg4MmIwKQorICAgICAgICAjZGVmaW5lIEFyZWFTdGlwcGxlUGF0dGVybjIzCQkJCQkoMHg4MmI4KQorICAgICAgICAjZGVmaW5lIEFyZWFTdGlwcGxlUGF0dGVybjI0CQkJCQkoMHg4MmMwKQorICAgICAgICAjZGVmaW5lIEFyZWFTdGlwcGxlUGF0dGVybjI1CQkJCQkoMHg4MmM4KQorICAgICAgICAjZGVmaW5lIEFyZWFTdGlwcGxlUGF0dGVybjI2CQkJCQkoMHg4MmQwKQorICAgICAgICAjZGVmaW5lIEFyZWFTdGlwcGxlUGF0dGVybjI3CQkJCQkoMHg4MmQ4KQorICAgICAgICAjZGVmaW5lIEFyZWFTdGlwcGxlUGF0dGVybjI4CQkJCQkoMHg4MmVvKQorICAgICAgICAjZGVmaW5lIEFyZWFTdGlwcGxlUGF0dGVybjI5CQkJCQkoMHg4MmU4KQorICAgICAgICAjZGVmaW5lIEFyZWFTdGlwcGxlUGF0dGVybjMwCQkJCQkoMHg4MmYwKQorICAgICAgICAjZGVmaW5lIEFyZWFTdGlwcGxlUGF0dGVybjMxCQkJCQkoMHg4MmY4KQorICAgICAgICAjZGVmaW5lIEFyZWFTdGlwcGxlUGF0dGVybl9pbmRleGVkKGkpICAgICAgICAgICAgICgweDgyMDAgKyAoKGkpICogMHg4KSkKKworI2RlZmluZSBQTTNEZXB0aE1vZGUgMHg4OWEwCisjZGVmaW5lIFBNM1N0ZW5jaWxNb2RlIDB4ODk4OAorI2RlZmluZSBQTTNTdGVuY2lsRGF0YSAweDg5OTAKKyNkZWZpbmUgUE0zVGV4dHVyZVJlYWRNb2RlIDB4ODY3MAorI2RlZmluZSBQTTNGb2dNb2RlIDB4ODY5MAorI2RlZmluZSBQTTNDaHJvbWFUZXN0TW9kZSAweDhmMTgKKyNkZWZpbmUgUE0zWVVWTW9kZSAweDhmMDAKKyNkZWZpbmUgUE0zQml0TWFza1BhdHRlcm4gMHg4MDY4CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiAqKioqKiBwbTNmYiBJT0NUTCBjb25zdCAqKioqKiAqLworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIGRlYnVnLW9ubHkgSU9DVEwgKi8KKyNkZWZpbmUgUE0zRkJJT19DTEVBUk1FTU9SWSAweDUwNEQzMzAwIC8qICdQTTNcMDAwJyAqLworI2RlZmluZSBQTTNGQklPX0NMRUFSQ01BUCAgIDB4NTA0RDMzMDEgLyogJ1BNM1wwMDEnICovCisvKiBjb21tb24gdXNlIElPQ1RMICovCisjZGVmaW5lIFBNM0ZCSU9fUkVTRVRDSElQICAgMHg1MDREMzNGRiAvKiAnUE0zXDM3NycgKi8KKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qICoqKioqIHBtM2ZiIHVzZWZ1bCBkZWZpbmUgYW5kIG1hY3JvICoqKioqICovCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisvKiBwZXJtZWRpYTMgLXNwZWNpZmljIGRlZmluaXRpb25zICovCisjZGVmaW5lIFBNM19TQ0FMRV9UT19DTE9DSyhwciwgZmUsIHBvKSAoKDIgKiBQTTNfUkVGX0NMT0NLICogZmUpIC8gKHByICogKDEgPDwgKHBvKSkpKQorCisvKiBpbiBjYXNlIGl0J3Mgbm90IGluIGxpbnV4L3BjaS5oICovCisjaWZuZGVmIFBDSV9ERVZJQ0VfSURfM0RMQUJTX1BFUk1FRElBMworI2RlZmluZSBQQ0lfREVWSUNFX0lEXzNETEFCU19QRVJNRURJQTMgMHgwMDBhCisjZW5kaWYKKworLyogbWF4IG51bWJlciBvZiBzaW11bHRhbmVvdXMgYm9hcmQgKi8KKy8qIHdhcm5pbmcgOiBtYWtlIHN1cmUgbW9kdWxlIGFycmF5IGRlZidzIGFyZSBjb2hlcmVudCB3aXRoIFBNM19NQVhfQk9BUkQgKi8KKyNkZWZpbmUgUE0zX01BWF9CT0FSRCA0CisjZGVmaW5lIFBNM19NQVhfQk9BUkRfTU9EVUxFX0FSUkFZX1NIT1JUICIxLTRoIgorI2RlZmluZSBQTTNfTUFYX0JPQVJEX01PRFVMRV9BUlJBWV9TVFJJTkcgIjEtNHMiCisKKy8qIG1heCBzaXplIG9mIG9wdGlvbnMgKi8KKyNkZWZpbmUgUE0zX09QVElPTlNfU0laRSAyNTYKKworLyogbWF4IHNpemUgb2YgZm9udCBuYW1lICovCisjZGVmaW5lIFBNM19GT05UTkFNRV9TSVpFIDQwCisKKy8qIGRvIHdlIHdhbnQgYWNjZWxlcmF0ZWQgY29uc29sZSAgKi8KKyNkZWZpbmUgUE0zRkJfVVNFX0FDQ0VMIDEKKworLyogdXNlZnVsID8gKi8KKyNkZWZpbmUgQ0hBUl9JU19OVU0oYSkgICgoKChhKSA+PSAnMCcpICYmICgoYSkgPD0gJzknKSkgPyAxIDogMCkKKworLyogZm9yIGRyaXZlciBkZWJ1Z2dpbmcgT05MWSAqLworLyogMCA9IGFzc2VydCBvbmx5LCAxID0gZXJyb3IsIDIgPSBpbmZvLCAzKyA9IHZlcmJvc2UgKi8KKy8qIGRlZmluZSBQTTNGQl9NQVNURVJfREVCVUcgMSAqLworI2lmIGRlZmluZWQoUE0zRkJfTUFTVEVSX0RFQlVHKSAmJiAoUE0zRkJfTUFTVEVSX0RFQlVHID49IDMpCisjZGVmaW5lIFBNM0ZCX1RSQUNFCisjZW5kaWYgLyogZGVmaW5lZChQTTNGQl9NQVNURVJfREVCVUcpICYmIChQTTNGQl9NQVNURVJfREVCVUcgPj0gMykgKi8KKworI2lmZGVmIFBNM0ZCX01BU1RFUl9ERUJVRworI2RlZmluZSBEUFJJTlRLKGwsYSxiLi4uKSBkbyB7IGlmICgobCkgPD0gUE0zRkJfTUFTVEVSX0RFQlVHKSBwcmludGsoInBtM2ZiOiAlczogIiBhLCBfX0ZVTkNUSU9OX18gLCAjIyBiKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgREFTU0VSVCh0LGEsYi4uLikgZG8geyBpZiAoISh0KSkgcHJpbnRrKCJwbTNmYjogX2Fzc2VydCBmYWlsZWQ6ICVzOiAiIGEsIF9fRlVOQ1RJT05fXyAsICMjIGIpOyB9IHdoaWxlICgwKQorI2lmZGVmIFBNM0ZCX1RSQUNFCisjZGVmaW5lIERUUkFDRSBwcmludGsoInBtM2ZiOiBfZW50ZXIgJXNcbiIsIF9fRlVOQ1RJT05fXykKKyNlbHNlIC8qIFBNM0ZCX1RSQUNFICovCisjZGVmaW5lIERUUkFDRQorI2VuZGlmIC8qIFBNM0ZCX1RSQUNFICovCisjZWxzZSAvKiBQTTNGQl9NQVNURVJfREVCVUcgKi8KKyNkZWZpbmUgRFBSSU5USyhsLGEsYi4uLikKKyNkZWZpbmUgREFTU0VSVCh0LGEsYi4uLikKKyNkZWZpbmUgRFRSQUNFCisjZW5kaWYgLyogUE0zRkJfTUFTVEVSX0RFQlVHICovCisKKyNpZiBkZWZpbmVkKFBNM0ZCX01BU1RFUl9ERUJVRykgJiYgKFBNM0ZCX01BU1RFUl9ERUJVRyA+PSAyKQorI2RlZmluZSBQTTNfU0hPV19DVVJfTU9ERSBwbTNmYl9zaG93X2N1cl9tb2RlKGxfZmJfaW5mbykKKyNlbHNlCisjZGVmaW5lIFBNM19TSE9XX0NVUl9NT0RFIC8qIHBtM2ZiX3Nob3dfY3VyX21vZGUoKSAqLworI2VuZGlmCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiAqKioqKiBBIGJ1bmNoIG9mIHJlZ2lzdGVyLWFjY2VzcyBtYWNybyAqKioqKiAqLworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworI2RlZmluZSBQTTNfV1JJVEVfUkVHKHIsIHYpIGZiX3dyaXRlbCh2LCAobF9mYl9pbmZvLT52SU9CYXNlICsgcikpCisjZGVmaW5lIFBNM19SRUFEX1JFRyhyKSBmYl9yZWFkbCgobF9mYl9pbmZvLT52SU9CYXNlICsgcikpCisKKworI2RlZmluZSBkZXB0aDJicHAoZCkgKChkICsgN0wpICYgfjdMKQorI2RlZmluZSBkZXB0aDJCeVBQKGQpIChkZXB0aDJicHAoZCkgLyA4KQorCisjZGVmaW5lIGRlcHRoX3N1cHBvcnRlZChkKSAoKGQgPT0gOCkgfHwgKGQgPT0gMTIpIHx8IChkID09IDE1KSB8fCAoZCA9PSAxNikgfHwgKGQ9PTMyKSkKKworCisjZGVmaW5lIFBNM19XQUlUKG4pIFwKK2RveyBcCisJd2hpbGUoUE0zX1JFQURfUkVHKFBNM0luRklGT1NwYWNlKTwobikpOyBcCit9IHdoaWxlKDApCisKKyNkZWZpbmUgUE0zX0RFTEFZKHgpIGRvIHsgXAorICAgICAgICBpbnQgZGVsYXkgPSB4OyBcCisgICAgICAgIHVuc2lnbmVkIGNoYXIgdG1wOyBcCisgICAgICAgIHdoaWxlKGRlbGF5LS0pe3RtcCA9IFBNM19SRUFEX1JFRyhQTTNJbkZJRk9TcGFjZSk7fTsgXAorfSB3aGlsZSgwKQorCisjZGVmaW5lIFBNM19TTE9XX1dSSVRFX1JFRyhyLHYpCVwKK2RveyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIERBU1NFUlQoKGxfZmJfaW5mby0+dklPQmFzZSAhPSAodW5zaWduZWQgY2hhciopKC0xKSksICJsX2ZiX2luZm8tPnZJT0Jhc2UgbWFwcGVkIGluIHNsb3cgd3JpdGVcbiIpOyBcCisJbWIoKTsgICAgICAgICAgICAgICAgICAgXAorCVBNM19XQUlUKDEpOyAgICAgICAgICAgIFwKKwltYigpOyAgICAgICAgICAgICAgICAgICBcCisgICAgUE0zX1dSSVRFX1JFRyhyLHYpOyAgICAgXAorfSB3aGlsZSgwKQorCisjZGVmaW5lIFBNM19TRVRfSU5ERVgoaW5kZXgpIFwKK2RveyBcCisJUE0zX1NMT1dfV1JJVEVfUkVHKFBNM1JEX0luZGV4SGlnaCwoKChpbmRleCk+PjgpJjB4ZmYpKTsgXAorCVBNM19TTE9XX1dSSVRFX1JFRyhQTTNSRF9JbmRleExvdywoKGluZGV4KSYweGZmKSk7IFwKK30gd2hpbGUoMCkKKworI2RlZmluZSBQTTNfV1JJVEVfREFDX1JFRyhyLCB2KSBcCitkbyB7IFwKKyAgICAgREFTU0VSVCgobF9mYl9pbmZvLT52SU9CYXNlICE9ICh1bnNpZ25lZCBjaGFyKikoLTEpKSwgImxfZmJfaW5mby0+dklPQmFzZSBtYXBwZWQgaW4gd3JpdGUgZGFjIHJlZ1xuIik7IFwKKyAgICAgUE0zX1NFVF9JTkRFWChyKTsgXAorICAgICBtYigpOyBcCisgICAgIFBNM19XUklURV9SRUcoUE0zUkRfSW5kZXhlZERhdGEsIHYpOyBcCit9IHdoaWxlICgwKQorCisvKiBuZXh0IG9uZSBpcyByZWFsbHkgYSBmdW5jdGlvbiwgYWRkZWQgYXMgYSBtYWNybyB0byBiZSBjb25zaXN0ZW50ICovCisjZGVmaW5lIFBNM19SRUFEX0RBQ19SRUcocikgcG0zZmJfcmVhZF9kYWNfcmVnKGxfZmJfaW5mbywgcikKKworCisjZGVmaW5lIFBNM19DT0xPUihjKSBcCitkbyB7IFwKKyAgaWYgKGxfZmJfaW5mby0+Y3VycmVudF9wYXItPmRlcHRoID09IDgpIFwKKyAgICB7IFwKKyAgICAgIGMgPSAoYyAmIDB4RkYpOyBcCisgICAgICBjID0gYyB8IChjIDw8IDgpOyBcCisgICAgfSBcCisgIGlmICgobF9mYl9pbmZvLT5jdXJyZW50X3Bhci0+ZGVwdGggPT0gOCkgfHwgKGRlcHRoMmJwcChsX2ZiX2luZm8tPmN1cnJlbnRfcGFyLT5kZXB0aCkgPT0gMTYpKSBcCisgICAgeyBcCisgICAgICBjID0gKGMgJiAweEZGRkYpOyBcCisgICAgICBjID0gYyB8IChjIDw8IDE2KTsgXAorICAgIH0gXAorfSB3aGlsZSAoMCkKKworI2VuZGlmIC8qIFBNM0ZCX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdmlkZW8vcG1hZy1iYS1mYi5oIGIvaW5jbHVkZS92aWRlby9wbWFnLWJhLWZiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ViZWYwNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvdmlkZW8vcG1hZy1iYS1mYi5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qCisgKiAgICAgIGxpbnV4L2RyaXZlcnMvdmlkZW8vcG1hZy1iYS1mYi5oCisgKgorICogICAgICBUdXJib0NoYW5uZWwgUE1BRy1CQSBmcmFtZWJ1ZmZlciBjYXJkIHN1cHBvcnQsCisgKiAgICAgIENvcHlyaWdodCAoQykgMTk5OSwyMDAwLDIwMDEgYnkKKyAqICAgICAgTWljaGFlbCBFbmdlbCA8ZW5nZWxAdW5peC1hZy5vcmc+LAorICogICAgICBLYXJzdGVuIE1lcmtlciA8bWVya2VyQGxpbnV4dGFnLm9yZz4KKyAqICAgICAgVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbAorICogICAgICBQdWJsaWMgTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzCisgKiAgICAgIGFyY2hpdmUgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKgorICogQnQ0NTkgUkFNIERBQyByZWdpc3RlciBiYXNlIG9mZnNldCAocmVsLiB0byBUQyBzbG90IGJhc2UgYWRkcmVzcykKKyAqLworCisjZGVmaW5lIFBNQUdfQkFfQlQ0NTlfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwCisKKy8qCisgKiBCZWdpbiBvZiBQTUFHLUJBIGZyYW1lYnVmZmVyIG1lbW9yeSByZWxhdGl2ZSB0byBUQyBzbG90IGFkZHJlc3MsCisgKiByZXNvbHV0aW9uIGlzIDEwMjR4ODY0eDgKKyAqLworCisjZGVmaW5lIFBNQUdfQkFfT05CT0FSRF9GQk1FTV9PRkZTRVQgICAgMHgwMDAwMDAwMApkaWZmIC0tZ2l0IGEvaW5jbHVkZS92aWRlby9wbWFnYi1iLWZiLmggYi9pbmNsdWRlL3ZpZGVvL3BtYWdiLWItZmIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2I4MWE1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS92aWRlby9wbWFnYi1iLWZiLmgKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqICAgICAgbGludXgvZHJpdmVycy92aWRlby9wbWFnYi1iLWZiLmgKKyAqCisgKiAgICAgIFR1cmJvQ2hhbm5lbCBQTUFHQi1CIGZyYW1lYnVmZmVyIGNhcmQgc3VwcG9ydCwKKyAqICAgICAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAxIGJ5CisgKiAgICAgIE1pY2hhZWwgRW5nZWwgPGVuZ2VsQHVuaXgtYWcub3JnPiBhbmQgCisgKiAgICAgIEthcnN0ZW4gTWVya2VyIDxtZXJrZXJAbGludXh0YWcub3JnPgorICogICAgICBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsCisgKiAgICAgIFB1YmxpYyBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMKKyAqICAgICAgYXJjaGl2ZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKworLyoKKyAqIEJ0NDU5IFJBTSBEQUMgcmVnaXN0ZXIgYmFzZSBvZmZzZXQgKHJlbC4gdG8gVEMgc2xvdCBiYXNlIGFkZHJlc3MpCisgKi8KKyNkZWZpbmUgUE1BR0JfQl9CVDQ1OV9PRkZTRVQJCQkweDAwMUMwMDAwCisKKy8qCisgKiBCZWdpbiBvZiBQTUFHQi1CIGZyYW1lYnVmZmVyIG1lbW9yeSwgcmVzb2x1dGlvbiBpcyBjb25maWd1cmFibGU6CisgKiAxMDI0eDg2NHg4IG9yIDEyODB4MTAyNHg4LCBzZXR0YWJsZSBieSBqdW1wZXIgb24gdGhlIGNhcmQKKyAqLworI2RlZmluZSBQTUFHQl9CX09OQk9BUkRfRkJNRU1fT0ZGU0VUCTB4MDAyMDEwMDAKKworLyoKKyAqIEJ0NDU5IHJlZ2lzdGVyIG9mZnNldHMsIGJ5dGUtd2lkZSByZWdpc3RlcnMKKyAqLworCisjZGVmaW5lIEJUNDU5X0FEUl9MT1cJCQlCVDQ1OV9PRkZTRVQgKyAweDAwCS8qIGFkZHIuIGxvdyAqLworI2RlZmluZSBCVDQ1OV9BRFJfSElHSAkJCUJUNDU5X09GRlNFVCArIDB4MDQJLyogYWRkci4gaGlnaCAqLworI2RlZmluZSBCVDQ1OV9EQVRBCQkJQlQ0NTlfT0ZGU0VUICsgMHgwOAkvKiByL3cgZGF0YSAqLworI2RlZmluZSBCVDQ1OV9DTUFQCQkJQlQ0NTlfT0ZGU0VUICsgMHgwQwkvKiBjb2xvciBtYXAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdmlkZW8vcmFkZW9uLmggYi9pbmNsdWRlL3ZpZGVvL3JhZGVvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzNDY3ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3ZpZGVvL3JhZGVvbi5oCkBAIC0wLDAgKzEsMTk4NSBAQAorI2lmbmRlZiBfUkFERU9OX0gKKyNkZWZpbmUgX1JBREVPTl9ICisKKworI2RlZmluZSBSQURFT05fUkVHU0laRQkJCTB4NDAwMAorCisKKyNkZWZpbmUgTU1fSU5ERVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwICAKKyNkZWZpbmUgTU1fREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAKKyNkZWZpbmUgQlVTX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDMwICAKKyNkZWZpbmUgSElfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDRDICAKKyNkZWZpbmUgQlVTX0NOVEwxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDM0CisjZGVmaW5lIEkyQ19DTlRMXzEJCQkgICAgICAgMHgwMDk0ICAKKyNkZWZpbmUgQ09ORklHX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMEUwICAKKyNkZWZpbmUgQ09ORklHX01FTVNJWkUgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMEY4ICAKKyNkZWZpbmUgQ09ORklHX0FQRVJfMF9CQVNFICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAKKyNkZWZpbmUgQ09ORklHX0FQRVJfMV9CQVNFICAgICAgICAgICAgICAgICAgICAgMHgwMTA0ICAKKyNkZWZpbmUgQ09ORklHX0FQRVJfU0laRSAgICAgICAgICAgICAgICAgICAgICAgMHgwMTA4ICAKKyNkZWZpbmUgQ09ORklHX1JFR18xX0JBU0UgICAgICAgICAgICAgICAgICAgICAgMHgwMTBDICAKKyNkZWZpbmUgQ09ORklHX1JFR19BUEVSX1NJWkUgICAgICAgICAgICAgICAgICAgMHgwMTEwICAKKyNkZWZpbmUgUEFEX0FHUElOUFVUX0RFTEFZICAgICAgICAgICAgICAgICAgICAgMHgwMTY0ICAKKyNkZWZpbmUgUEFEX0NUTFJfU1RSRU5HVEggICAgICAgICAgICAgICAgICAgICAgMHgwMTY4ICAKKyNkZWZpbmUgUEFEX0NUTFJfVVBEQVRFICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTZDCisjZGVmaW5lIFBBRF9DVExSX01JU0MgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MGFhMAorI2RlZmluZSBBR1BfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxNzQKKyNkZWZpbmUgQk1fU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTYwCisjZGVmaW5lIENBUDBfVFJJR19DTlRMCQkJICAgICAgIDB4MDk1MAorI2RlZmluZSBDQVAxX1RSSUdfQ05UTAkJICAgICAgICAgICAgICAgMHgwOWMwCisjZGVmaW5lIFZJUEhfQ09OVFJPTAkJCSAgICAgICAweDBDNDAKKyNkZWZpbmUgVkVORE9SX0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjAwICAKKyNkZWZpbmUgREVWSUNFX0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjAyICAKKyNkZWZpbmUgQ09NTUFORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjA0ICAKKyNkZWZpbmUgU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjA2ICAKKyNkZWZpbmUgUkVWSVNJT05fSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjA4ICAKKyNkZWZpbmUgUkVHUFJPR19JTkYgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjA5ICAKKyNkZWZpbmUgU1VCX0NMQVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjBBICAKKyNkZWZpbmUgQkFTRV9DT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjBCICAKKyNkZWZpbmUgQ0FDSEVfTElORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjBDICAKKyNkZWZpbmUgTEFURU5DWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjBEICAKKyNkZWZpbmUgSEVBREVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjBFICAKKyNkZWZpbmUgQklTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjBGICAKKyNkZWZpbmUgUkVHX01FTV9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjEwICAKKyNkZWZpbmUgUkVHX0lPX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjE0ICAKKyNkZWZpbmUgUkVHX1JFR19CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjE4CisjZGVmaW5lIEFEQVBURVJfSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEYyQworI2RlZmluZSBCSU9TX1JPTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBGMzAKKyNkZWZpbmUgQ0FQQUJJTElUSUVTX1BUUiAgICAgICAgICAgICAgICAgICAgICAgMHgwRjM0ICAKKyNkZWZpbmUgSU5URVJSVVBUX0xJTkUgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjNDICAKKyNkZWZpbmUgSU5URVJSVVBUX1BJTiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjNEICAKKyNkZWZpbmUgTUlOX0dSQU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjNFICAKKyNkZWZpbmUgTUFYX0xBVEVOQ1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjNGICAKKyNkZWZpbmUgQURBUFRFUl9JRF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjRDICAKKyNkZWZpbmUgUE1JX0NBUF9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjUwICAKKyNkZWZpbmUgUE1JX05YVF9DQVBfUFRSICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjUxICAKKyNkZWZpbmUgUE1JX1BNQ19SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjUyICAKKyNkZWZpbmUgUE1fU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjU0ICAKKyNkZWZpbmUgUE1JX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjU3ICAKKyNkZWZpbmUgQUdQX0NBUF9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjU4ICAKKyNkZWZpbmUgQUdQX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjVDICAKKyNkZWZpbmUgQUdQX0NPTU1BTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjYwICAKKyNkZWZpbmUgQUlDX0NUUkwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMUQwCisjZGVmaW5lIEFJQ19TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDFENAorI2RlZmluZSBBSUNfUFRfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxRDgKKyNkZWZpbmUgQUlDX0xPX0FERFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMURDICAKKyNkZWZpbmUgQUlDX0hJX0FERFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMUUwICAKKyNkZWZpbmUgQUlDX1RMQl9BRERSICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMUU0ICAKKyNkZWZpbmUgQUlDX1RMQl9EQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMUU4ICAKKyNkZWZpbmUgREFDX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDU4ICAKKyNkZWZpbmUgREFDX0NOVEwyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDdjCisjZGVmaW5lIENSVENfR0VOX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA1MCAgCisjZGVmaW5lIE1FTV9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDE0MCAgCisjZGVmaW5lIE1DX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDE0MAorI2RlZmluZSBFWFRfTUVNX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxNDQgIAorI2RlZmluZSBNQ19USU1JTkdfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAweDAxNDQKKyNkZWZpbmUgTUNfQUdQX0xPQ0FUSU9OICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTRDICAKKyNkZWZpbmUgTUVNX0lPX0NOVExfQTAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTc4ICAKKyNkZWZpbmUgTUVNX1JFRlJFU0hfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgMHgwMTc4CisjZGVmaW5lIE1FTV9JTklUX0xBVEVOQ1lfVElNRVIgICAgICAgICAgICAgICAgIDB4MDE1NCAgCisjZGVmaW5lIE1DX0lOSVRfR0ZYX0xBVF9USU1FUiAgICAgICAgICAgICAgICAgIDB4MDE1NAorI2RlZmluZSBNRU1fU0RSQU1fTU9ERV9SRUcgICAgICAgICAgICAgICAgICAgICAweDAxNTggIAorI2RlZmluZSBBR1BfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxNzAgIAorI2RlZmluZSBNRU1fSU9fQ05UTF9BMSAgICAgICAgICAgICAgICAgICAgICAgICAweDAxN0MgIAorI2RlZmluZSBNQ19SRUFEX0NOVExfQUIgICAgICAgICAgICAgICAgICAgICAgICAweDAxN0MKKyNkZWZpbmUgTUVNX0lPX0NOVExfQjAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTgwCisjZGVmaW5lIE1DX0lOSVRfTUlTQ19MQVRfVElNRVIgICAgICAgICAgICAgICAgIDB4MDE4MAorI2RlZmluZSBNRU1fSU9fQ05UTF9CMSAgICAgICAgICAgICAgICAgICAgICAgICAweDAxODQKKyNkZWZpbmUgTUNfSU9QQURfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTg0CisjZGVmaW5lIE1DX0RFQlVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDE4OAorI2RlZmluZSBNQ19TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxNTAgIAorI2RlZmluZSBNRU1fSU9fT0VfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAweDAxOEMgIAorI2RlZmluZSBNQ19DSElQX0lPX09FX0NOVExfQUIgICAgICAgICAgICAgICAgICAweDAxOEMKKyNkZWZpbmUgTUNfRkJfTE9DQVRJT04gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTQ4ICAKKyNkZWZpbmUgSE9TVF9QQVRIX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTMwICAKKyNkZWZpbmUgTUVNX1ZHQV9XUF9TRUwgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDM4ICAKKyNkZWZpbmUgTUVNX1ZHQV9SUF9TRUwgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDNDICAKKyNkZWZpbmUgSERQX0RFQlVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTM4ICAKKyNkZWZpbmUgU1dfU0VNQVBIT1JFICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTNDCisjZGVmaW5lIENSVEMyX0dFTl9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDNmOCAgCisjZGVmaW5lIENSVEMyX0RJU1BMQVlfQkFTRV9BRERSICAgICAgICAgICAgICAgIDB4MDMzYworI2RlZmluZSBTVVJGQUNFX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBCMDAgIAorI2RlZmluZSBTVVJGQUNFMF9MT1dFUl9CT1VORCAgICAgICAgICAgICAgICAgICAweDBCMDQgIAorI2RlZmluZSBTVVJGQUNFMV9MT1dFUl9CT1VORCAgICAgICAgICAgICAgICAgICAweDBCMTQgIAorI2RlZmluZSBTVVJGQUNFMl9MT1dFUl9CT1VORCAgICAgICAgICAgICAgICAgICAweDBCMjQgIAorI2RlZmluZSBTVVJGQUNFM19MT1dFUl9CT1VORCAgICAgICAgICAgICAgICAgICAweDBCMzQgIAorI2RlZmluZSBTVVJGQUNFNF9MT1dFUl9CT1VORCAgICAgICAgICAgICAgICAgICAweDBCNDQgIAorI2RlZmluZSBTVVJGQUNFNV9MT1dFUl9CT1VORCAgICAgICAgICAgICAgICAgICAweDBCNTQKKyNkZWZpbmUgU1VSRkFDRTZfTE9XRVJfQk9VTkQgICAgICAgICAgICAgICAgICAgMHgwQjY0CisjZGVmaW5lIFNVUkZBQ0U3X0xPV0VSX0JPVU5EICAgICAgICAgICAgICAgICAgIDB4MEI3NAorI2RlZmluZSBTVVJGQUNFMF9VUFBFUl9CT1VORCAgICAgICAgICAgICAgICAgICAweDBCMDggIAorI2RlZmluZSBTVVJGQUNFMV9VUFBFUl9CT1VORCAgICAgICAgICAgICAgICAgICAweDBCMTggIAorI2RlZmluZSBTVVJGQUNFMl9VUFBFUl9CT1VORCAgICAgICAgICAgICAgICAgICAweDBCMjggIAorI2RlZmluZSBTVVJGQUNFM19VUFBFUl9CT1VORCAgICAgICAgICAgICAgICAgICAweDBCMzggIAorI2RlZmluZSBTVVJGQUNFNF9VUFBFUl9CT1VORCAgICAgICAgICAgICAgICAgICAweDBCNDggIAorI2RlZmluZSBTVVJGQUNFNV9VUFBFUl9CT1VORCAgICAgICAgICAgICAgICAgICAweDBCNTggIAorI2RlZmluZSBTVVJGQUNFNl9VUFBFUl9CT1VORCAgICAgICAgICAgICAgICAgICAweDBCNjggIAorI2RlZmluZSBTVVJGQUNFN19VUFBFUl9CT1VORCAgICAgICAgICAgICAgICAgICAweDBCNzggIAorI2RlZmluZSBTVVJGQUNFMF9JTkZPICAgICAgICAgICAgICAgICAgICAgICAgICAweDBCMEMgIAorI2RlZmluZSBTVVJGQUNFMV9JTkZPICAgICAgICAgICAgICAgICAgICAgICAgICAweDBCMUMgIAorI2RlZmluZSBTVVJGQUNFMl9JTkZPICAgICAgICAgICAgICAgICAgICAgICAgICAweDBCMkMgIAorI2RlZmluZSBTVVJGQUNFM19JTkZPICAgICAgICAgICAgICAgICAgICAgICAgICAweDBCM0MgIAorI2RlZmluZSBTVVJGQUNFNF9JTkZPICAgICAgICAgICAgICAgICAgICAgICAgICAweDBCNEMgIAorI2RlZmluZSBTVVJGQUNFNV9JTkZPICAgICAgICAgICAgICAgICAgICAgICAgICAweDBCNUMgIAorI2RlZmluZSBTVVJGQUNFNl9JTkZPICAgICAgICAgICAgICAgICAgICAgICAgICAweDBCNkMKKyNkZWZpbmUgU1VSRkFDRTdfSU5GTyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQjdDCisjZGVmaW5lIFNVUkZBQ0VfQUNDRVNTX0ZMQUdTICAgICAgICAgICAgICAgICAgIDB4MEJGOAorI2RlZmluZSBTVVJGQUNFX0FDQ0VTU19DTFIgICAgICAgICAgICAgICAgICAgICAweDBCRkMgIAorI2RlZmluZSBHRU5fSU5UX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIAorI2RlZmluZSBHRU5fSU5UX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDQgIAorI2RlZmluZSBDUlRDX0VYVF9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNTQKKyNkZWZpbmUgUkIzRF9DTlRMCQkJICAgICAgIDB4MUMzQyAgCisjZGVmaW5lIFdBSVRfVU5USUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTcyMCAgCisjZGVmaW5lIElTWU5DX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTcyNCAgCisjZGVmaW5lIFJCQk1fR1VJQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTcyQyAgCisjZGVmaW5lIFJCQk1fU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEU0MCAgCisjZGVmaW5lIFJCQk1fU1RBVFVTX2FsdF8xICAgICAgICAgICAgICAgICAgICAgIDB4MTc0MCAgCisjZGVmaW5lIFJCQk1fQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBFQyAgCisjZGVmaW5lIFJCQk1fQ05UTF9hbHRfMSAgICAgICAgICAgICAgICAgICAgICAgIDB4MEU0NCAgCisjZGVmaW5lIFJCQk1fU09GVF9SRVNFVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBGMCAgCisjZGVmaW5lIFJCQk1fU09GVF9SRVNFVF9hbHRfMSAgICAgICAgICAgICAgICAgIDB4MEU0OCAgCisjZGVmaW5lIE5RV0FJVF9VTlRJTCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEU1MCAgCisjZGVmaW5lIFJCQk1fREVCVUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEU2QworI2RlZmluZSBSQkJNX0NNREZJRk9fQUREUiAgICAgICAgICAgICAgICAgICAgICAweDBFNzAKKyNkZWZpbmUgUkJCTV9DTURGSUZPX0RBVEFMICAgICAgICAgICAgICAgICAgICAgMHgwRTc0CisjZGVmaW5lIFJCQk1fQ01ERklGT19EQVRBSCAgICAgICAgICAgICAgICAgICAgIDB4MEU3OCAgCisjZGVmaW5lIFJCQk1fQ01ERklGT19TVEFUICAgICAgICAgICAgICAgICAgICAgIDB4MEU3QyAgCisjZGVmaW5lIENSVENfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA1QyAgCisjZGVmaW5lIEdQSU9fVkdBX0REQyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA2MCAgCisjZGVmaW5lIEdQSU9fRFZJX0REQyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA2NCAgCisjZGVmaW5lIEdQSU9fTU9OSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA2OCAgCisjZGVmaW5lIEdQSU9fQ1JUMl9EREMgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA2YworI2RlZmluZSBQQUxFVFRFX0lOREVYICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwQjAgIAorI2RlZmluZSBQQUxFVFRFX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwQjQgIAorI2RlZmluZSBQQUxFVFRFXzMwX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAweDAwQjggIAorI2RlZmluZSBDUlRDX0hfVE9UQUxfRElTUCAgICAgICAgICAgICAgICAgICAgICAweDAyMDAgIAorI2RlZmluZSBDUlRDX0hfU1lOQ19TVFJUX1dJRCAgICAgICAgICAgICAgICAgICAweDAyMDQgIAorI2RlZmluZSBDUlRDX1ZfVE9UQUxfRElTUCAgICAgICAgICAgICAgICAgICAgICAweDAyMDggIAorI2RlZmluZSBDUlRDX1ZfU1lOQ19TVFJUX1dJRCAgICAgICAgICAgICAgICAgICAweDAyMEMgIAorI2RlZmluZSBDUlRDX1ZMSU5FX0NSTlRfVkxJTkUgICAgICAgICAgICAgICAgICAweDAyMTAgIAorI2RlZmluZSBDUlRDX0NSTlRfRlJBTUUgICAgICAgICAgICAgICAgICAgICAgICAweDAyMTQKKyNkZWZpbmUgQ1JUQ19HVUlfVFJJR19WTElORSAgICAgICAgICAgICAgICAgICAgMHgwMjE4CisjZGVmaW5lIENSVENfREVCVUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIxQworI2RlZmluZSBDUlRDX09GRlNFVF9SSUdIVCAgICAgICAgICAgICAgICAgICAgICAweDAyMjAgIAorI2RlZmluZSBDUlRDX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMjQgIAorI2RlZmluZSBDUlRDX09GRlNFVF9DTlRMICAgICAgICAgICAgICAgICAgICAgICAweDAyMjggIAorI2RlZmluZSBDUlRDX1BJVENIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMkMgIAorI2RlZmluZSBPVlJfQ0xSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMzAgIAorI2RlZmluZSBPVlJfV0lEX0xFRlRfUklHSFQgICAgICAgICAgICAgICAgICAgICAweDAyMzQgIAorI2RlZmluZSBPVlJfV0lEX1RPUF9CT1RUT00gICAgICAgICAgICAgICAgICAgICAweDAyMzggIAorI2RlZmluZSBESVNQTEFZX0JBU0VfQUREUiAgICAgICAgICAgICAgICAgICAgICAweDAyM0MgIAorI2RlZmluZSBTTkFQU0hPVF9WSF9DT1VOVFMgICAgICAgICAgICAgICAgICAgICAweDAyNDAgIAorI2RlZmluZSBTTkFQU0hPVF9GX0NPVU5UICAgICAgICAgICAgICAgICAgICAgICAweDAyNDQgIAorI2RlZmluZSBOX1ZJRl9DT1VOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyNDggIAorI2RlZmluZSBTTkFQU0hPVF9WSUZfQ09VTlQgICAgICAgICAgICAgICAgICAgICAweDAyNEMgIAorI2RlZmluZSBGUF9DUlRDX0hfVE9UQUxfRElTUCAgICAgICAgICAgICAgICAgICAweDAyNTAgIAorI2RlZmluZSBGUF9DUlRDX1ZfVE9UQUxfRElTUCAgICAgICAgICAgICAgICAgICAweDAyNTQgIAorI2RlZmluZSBDUlRfQ1JUQ19IX1NZTkNfU1RSVF9XSUQgICAgICAgICAgICAgICAweDAyNTgKKyNkZWZpbmUgQ1JUX0NSVENfVl9TWU5DX1NUUlRfV0lEICAgICAgICAgICAgICAgMHgwMjVDCisjZGVmaW5lIENVUl9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDI2MAorI2RlZmluZSBDVVJfSE9SWl9WRVJUX1BPU04gICAgICAgICAgICAgICAgICAgICAweDAyNjQgIAorI2RlZmluZSBDVVJfSE9SWl9WRVJUX09GRiAgICAgICAgICAgICAgICAgICAgICAweDAyNjggIAorI2RlZmluZSBDVVJfQ0xSMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyNkMgIAorI2RlZmluZSBDVVJfQ0xSMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyNzAgIAorI2RlZmluZSBGUF9IT1JaX1ZFUlRfQUNUSVZFICAgICAgICAgICAgICAgICAgICAweDAyNzggIAorI2RlZmluZSBDUlRDX01PUkVfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAweDAyN0MgIAorI2RlZmluZSBDUlRDX0hfQ1VUT0ZGX0FDVElWRV9FTiAgICAgICAgICAgICAgICAoMTw8NCkKKyNkZWZpbmUgQ1JUQ19WX0NVVE9GRl9BQ1RJVkVfRU4gICAgICAgICAgICAgICAgKDE8PDUpCisjZGVmaW5lIERBQ19FWFRfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDI4MCAgCisjZGVmaW5lIEZQX0dFTl9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDI4NCAgCisjZGVmaW5lIEZQX0hPUlpfU1RSRVRDSCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDI4QyAgCisjZGVmaW5lIEZQX1ZFUlRfU1RSRVRDSCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDI5MCAgCisjZGVmaW5lIEZQX0hfU1lOQ19TVFJUX1dJRCAgICAgICAgICAgICAgICAgICAgIDB4MDJDNCAgCisjZGVmaW5lIEZQX1ZfU1lOQ19TVFJUX1dJRCAgICAgICAgICAgICAgICAgICAgIDB4MDJDOCAgCisjZGVmaW5lIEFVWF9XSU5ET1dfSE9SWl9DTlRMICAgICAgICAgICAgICAgICAgIDB4MDJEOCAgCisjZGVmaW5lIEFVWF9XSU5ET1dfVkVSVF9DTlRMICAgICAgICAgICAgICAgICAgIDB4MDJEQyAgCisvLyNkZWZpbmUgRERBX0NPTkZJRwkJCSAgICAgICAweDAyZTAKKy8vI2RlZmluZSBEREFfT05fT0ZGCQkJICAgICAgIDB4MDJlNAorI2RlZmluZSBEVklfSTJDX0NOVExfMQkJCSAgICAgICAweDAyZTQKKyNkZWZpbmUgR1JQSF9CVUZGRVJfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgMHgwMkYwCisjZGVmaW5lIEdSUEgyX0JVRkZFUl9DTlRMICAgICAgICAgICAgICAgICAgICAgIDB4MDNGMAorI2RlZmluZSBWR0FfQlVGRkVSX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAweDAyRjQKKyNkZWZpbmUgT1YwX1lfWF9TVEFSVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwCisjZGVmaW5lIE9WMF9ZX1hfRU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwNCAgCisjZGVmaW5lIE9WMF9QSVBFTElORV9DTlRMICAgICAgICAgICAgICAgICAgICAgIDB4MDQwOCAgCisjZGVmaW5lIE9WMF9SRUdfTE9BRF9DTlRMICAgICAgICAgICAgICAgICAgICAgIDB4MDQxMCAgCisjZGVmaW5lIE9WMF9TQ0FMRV9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQyMCAgCisjZGVmaW5lIE9WMF9WX0lOQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQyNCAgCisjZGVmaW5lIE9WMF9QMV9WX0FDQ1VNX0lOSVQgICAgICAgICAgICAgICAgICAgIDB4MDQyOCAgCisjZGVmaW5lIE9WMF9QMjNfVl9BQ0NVTV9JTklUICAgICAgICAgICAgICAgICAgIDB4MDQyQyAgCisjZGVmaW5lIE9WMF9QMV9CTEFOS19MSU5FU19BVF9UT1AgICAgICAgICAgICAgIDB4MDQzMCAgCisjZGVmaW5lIE9WMF9QMjNfQkxBTktfTElORVNfQVRfVE9QICAgICAgICAgICAgIDB4MDQzNCAgCisjZGVmaW5lIE9WMF9CQVNFX0FERFIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQzQyAgCisjZGVmaW5lIE9WMF9WSURfQlVGMF9CQVNFX0FEUlMgICAgICAgICAgICAgICAgIDB4MDQ0MCAgCisjZGVmaW5lIE9WMF9WSURfQlVGMV9CQVNFX0FEUlMgICAgICAgICAgICAgICAgIDB4MDQ0NCAgCisjZGVmaW5lIE9WMF9WSURfQlVGMl9CQVNFX0FEUlMgICAgICAgICAgICAgICAgIDB4MDQ0OCAgCisjZGVmaW5lIE9WMF9WSURfQlVGM19CQVNFX0FEUlMgICAgICAgICAgICAgICAgIDB4MDQ0QyAgCisjZGVmaW5lIE9WMF9WSURfQlVGNF9CQVNFX0FEUlMgICAgICAgICAgICAgICAgIDB4MDQ1MAorI2RlZmluZSBPVjBfVklEX0JVRjVfQkFTRV9BRFJTICAgICAgICAgICAgICAgICAweDA0NTQKKyNkZWZpbmUgT1YwX1ZJRF9CVUZfUElUQ0gwX1ZBTFVFICAgICAgICAgICAgICAgMHgwNDYwCisjZGVmaW5lIE9WMF9WSURfQlVGX1BJVENIMV9WQUxVRSAgICAgICAgICAgICAgIDB4MDQ2NCAgCisjZGVmaW5lIE9WMF9BVVRPX0ZMSVBfQ05UUkwgICAgICAgICAgICAgICAgICAgIDB4MDQ3MCAgCisjZGVmaW5lIE9WMF9ERUlOVEVSTEFDRV9QQVRURVJOICAgICAgICAgICAgICAgIDB4MDQ3NCAgCisjZGVmaW5lIE9WMF9TVUJNSVRfSElTVE9SWSAgICAgICAgICAgICAgICAgICAgIDB4MDQ3OCAgCisjZGVmaW5lIE9WMF9IX0lOQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQ4MCAgCisjZGVmaW5lIE9WMF9TVEVQX0JZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQ4NCAgCisjZGVmaW5lIE9WMF9QMV9IX0FDQ1VNX0lOSVQgICAgICAgICAgICAgICAgICAgIDB4MDQ4OCAgCisjZGVmaW5lIE9WMF9QMjNfSF9BQ0NVTV9JTklUICAgICAgICAgICAgICAgICAgIDB4MDQ4QyAgCisjZGVmaW5lIE9WMF9QMV9YX1NUQVJUX0VORCAgICAgICAgICAgICAgICAgICAgIDB4MDQ5NCAgCisjZGVmaW5lIE9WMF9QMl9YX1NUQVJUX0VORCAgICAgICAgICAgICAgICAgICAgIDB4MDQ5OCAgCisjZGVmaW5lIE9WMF9QM19YX1NUQVJUX0VORCAgICAgICAgICAgICAgICAgICAgIDB4MDQ5QyAgCisjZGVmaW5lIE9WMF9GSUxURVJfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDRBMCAgCisjZGVmaW5lIE9WMF9GT1VSX1RBUF9DT0VGXzAgICAgICAgICAgICAgICAgICAgIDB4MDRCMCAgCisjZGVmaW5lIE9WMF9GT1VSX1RBUF9DT0VGXzEgICAgICAgICAgICAgICAgICAgIDB4MDRCNCAgCisjZGVmaW5lIE9WMF9GT1VSX1RBUF9DT0VGXzIgICAgICAgICAgICAgICAgICAgIDB4MDRCOAorI2RlZmluZSBPVjBfRk9VUl9UQVBfQ09FRl8zICAgICAgICAgICAgICAgICAgICAweDA0QkMKKyNkZWZpbmUgT1YwX0ZPVVJfVEFQX0NPRUZfNCAgICAgICAgICAgICAgICAgICAgMHgwNEMwCisjZGVmaW5lIE9WMF9GTEFHX0NOVFJMICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDREQyAgCisjZGVmaW5lIE9WMF9TTElDRV9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDRFMCAgCisjZGVmaW5lIE9WMF9WSURfS0VZX0NMUl9MT1cgICAgICAgICAgICAgICAgICAgIDB4MDRFNCAgCisjZGVmaW5lIE9WMF9WSURfS0VZX0NMUl9ISUdIICAgICAgICAgICAgICAgICAgIDB4MDRFOCAgCisjZGVmaW5lIE9WMF9HUlBIX0tFWV9DTFJfTE9XICAgICAgICAgICAgICAgICAgIDB4MDRFQyAgCisjZGVmaW5lIE9WMF9HUlBIX0tFWV9DTFJfSElHSCAgICAgICAgICAgICAgICAgIDB4MDRGMCAgCisjZGVmaW5lIE9WMF9LRVlfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDRGNCAgCisjZGVmaW5lIE9WMF9URVNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDRGOCAgCisjZGVmaW5lIFNVQlBJQ19DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDU0MCAgCisjZGVmaW5lIFNVQlBJQ19ERUZDT0xDT04gICAgICAgICAgICAgICAgICAgICAgIDB4MDU0NCAgCisjZGVmaW5lIFNVQlBJQ19ZX1hfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgIDB4MDU0QyAgCisjZGVmaW5lIFNVQlBJQ19ZX1hfRU5EICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDU1MCAgCisjZGVmaW5lIFNVQlBJQ19WX0lOQyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDU1NCAgCisjZGVmaW5lIFNVQlBJQ19IX0lOQyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDU1OCAgCisjZGVmaW5lIFNVQlBJQ19CVUYwX09GRlNFVCAgICAgICAgICAgICAgICAgICAgIDB4MDU1QworI2RlZmluZSBTVUJQSUNfQlVGMV9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAweDA1NjAKKyNkZWZpbmUgU1VCUElDX0xDMF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgMHgwNTY0CisjZGVmaW5lIFNVQlBJQ19MQzFfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgIDB4MDU2OCAgCisjZGVmaW5lIFNVQlBJQ19QSVRDSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDU2QyAgCisjZGVmaW5lIFNVQlBJQ19CVE5fSExJX0NPTENPTiAgICAgICAgICAgICAgICAgIDB4MDU3MCAgCisjZGVmaW5lIFNVQlBJQ19CVE5fSExJX1lfWF9TVEFSVCAgICAgICAgICAgICAgIDB4MDU3NCAgCisjZGVmaW5lIFNVQlBJQ19CVE5fSExJX1lfWF9FTkQgICAgICAgICAgICAgICAgIDB4MDU3OCAgCisjZGVmaW5lIFNVQlBJQ19QQUxFVFRFX0lOREVYICAgICAgICAgICAgICAgICAgIDB4MDU3QyAgCisjZGVmaW5lIFNVQlBJQ19QQUxFVFRFX0RBVEEgICAgICAgICAgICAgICAgICAgIDB4MDU4MCAgCisjZGVmaW5lIFNVQlBJQ19IX0FDQ1VNX0lOSVQgICAgICAgICAgICAgICAgICAgIDB4MDU4NCAgCisjZGVmaW5lIFNVQlBJQ19WX0FDQ1VNX0lOSVQgICAgICAgICAgICAgICAgICAgIDB4MDU4OCAgCisjZGVmaW5lIERJU1BfTUlTQ19DTlRMICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEQwMCAgCisjZGVmaW5lIERBQ19NQUNST19DTlRMICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEQwNCAgCisjZGVmaW5lIERJU1BfUFdSX01BTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEQwOCAgCisjZGVmaW5lIERJU1BfVEVTVF9ERUJVR19DTlRMICAgICAgICAgICAgICAgICAgIDB4MEQxMCAgCisjZGVmaW5lIERJU1BfSFdfREVCVUcgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEQxNCAgCisjZGVmaW5lIERBQ19DUkNfU0lHMSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEQxOAorI2RlZmluZSBEQUNfQ1JDX1NJRzIgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBEMUMKKyNkZWZpbmUgT1YwX0xJTl9UUkFOU19BICAgICAgICAgICAgICAgICAgICAgICAgMHgwRDIwCisjZGVmaW5lIE9WMF9MSU5fVFJBTlNfQiAgICAgICAgICAgICAgICAgICAgICAgIDB4MEQyNCAgCisjZGVmaW5lIE9WMF9MSU5fVFJBTlNfQyAgICAgICAgICAgICAgICAgICAgICAgIDB4MEQyOCAgCisjZGVmaW5lIE9WMF9MSU5fVFJBTlNfRCAgICAgICAgICAgICAgICAgICAgICAgIDB4MEQyQyAgCisjZGVmaW5lIE9WMF9MSU5fVFJBTlNfRSAgICAgICAgICAgICAgICAgICAgICAgIDB4MEQzMCAgCisjZGVmaW5lIE9WMF9MSU5fVFJBTlNfRiAgICAgICAgICAgICAgICAgICAgICAgIDB4MEQzNCAgCisjZGVmaW5lIE9WMF9HQU1NQV8wX0YgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEQ0MCAgCisjZGVmaW5lIE9WMF9HQU1NQV8xMF8xRiAgICAgICAgICAgICAgICAgICAgICAgIDB4MEQ0NCAgCisjZGVmaW5lIE9WMF9HQU1NQV8yMF8zRiAgICAgICAgICAgICAgICAgICAgICAgIDB4MEQ0OCAgCisjZGVmaW5lIE9WMF9HQU1NQV80MF83RiAgICAgICAgICAgICAgICAgICAgICAgIDB4MEQ0QyAgCisjZGVmaW5lIE9WMF9HQU1NQV8zODBfM0JGICAgICAgICAgICAgICAgICAgICAgIDB4MEQ1MCAgCisjZGVmaW5lIE9WMF9HQU1NQV8zQzBfM0ZGICAgICAgICAgICAgICAgICAgICAgIDB4MEQ1NCAgCisjZGVmaW5lIERJU1BfTUVSR0VfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgIDB4MEQ2MCAgCisjZGVmaW5lIERJU1BfT1VUUFVUX0NOVEwgICAgICAgICAgICAgICAgICAgICAgIDB4MEQ2NCAgCisjZGVmaW5lIERJU1BfTElOX1RSQU5TX0dSUEhfQSAgICAgICAgICAgICAgICAgIDB4MEQ4MCAgCisjZGVmaW5lIERJU1BfTElOX1RSQU5TX0dSUEhfQiAgICAgICAgICAgICAgICAgIDB4MEQ4NAorI2RlZmluZSBESVNQX0xJTl9UUkFOU19HUlBIX0MgICAgICAgICAgICAgICAgICAweDBEODgKKyNkZWZpbmUgRElTUF9MSU5fVFJBTlNfR1JQSF9EICAgICAgICAgICAgICAgICAgMHgwRDhDCisjZGVmaW5lIERJU1BfTElOX1RSQU5TX0dSUEhfRSAgICAgICAgICAgICAgICAgIDB4MEQ5MCAgCisjZGVmaW5lIERJU1BfTElOX1RSQU5TX0dSUEhfRiAgICAgICAgICAgICAgICAgIDB4MEQ5NCAgCisjZGVmaW5lIERJU1BfTElOX1RSQU5TX1ZJRF9BICAgICAgICAgICAgICAgICAgIDB4MEQ5OCAgCisjZGVmaW5lIERJU1BfTElOX1RSQU5TX1ZJRF9CICAgICAgICAgICAgICAgICAgIDB4MEQ5QyAgCisjZGVmaW5lIERJU1BfTElOX1RSQU5TX1ZJRF9DICAgICAgICAgICAgICAgICAgIDB4MERBMCAgCisjZGVmaW5lIERJU1BfTElOX1RSQU5TX1ZJRF9EICAgICAgICAgICAgICAgICAgIDB4MERBNCAgCisjZGVmaW5lIERJU1BfTElOX1RSQU5TX1ZJRF9FICAgICAgICAgICAgICAgICAgIDB4MERBOCAgCisjZGVmaW5lIERJU1BfTElOX1RSQU5TX1ZJRF9GICAgICAgICAgICAgICAgICAgIDB4MERBQyAgCisjZGVmaW5lIFJNWF9IT1JaX0ZJTFRFUl8wVEFQX0NPRUYgICAgICAgICAgICAgIDB4MERCMCAgCisjZGVmaW5lIFJNWF9IT1JaX0ZJTFRFUl8xVEFQX0NPRUYgICAgICAgICAgICAgIDB4MERCNCAgCisjZGVmaW5lIFJNWF9IT1JaX0ZJTFRFUl8yVEFQX0NPRUYgICAgICAgICAgICAgIDB4MERCOCAgCisjZGVmaW5lIFJNWF9IT1JaX1BIQVNFICAgICAgICAgICAgICAgICAgICAgICAgIDB4MERCQyAgCisjZGVmaW5lIERBQ19FTUJFRERFRF9TWU5DX0NOVEwgICAgICAgICAgICAgICAgIDB4MERDMCAgCisjZGVmaW5lIERBQ19CUk9BRF9QVUxTRSAgICAgICAgICAgICAgICAgICAgICAgIDB4MERDNCAgCisjZGVmaW5lIERBQ19TS0VXX0NMS1MgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MERDOAorI2RlZmluZSBEQUNfSU5DUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBEQ0MKKyNkZWZpbmUgREFDX05FR19TWU5DX0xFVkVMICAgICAgICAgICAgICAgICAgICAgMHgwREQwCisjZGVmaW5lIERBQ19QT1NfU1lOQ19MRVZFTCAgICAgICAgICAgICAgICAgICAgIDB4MERENCAgCisjZGVmaW5lIERBQ19CTEFOS19MRVZFTCAgICAgICAgICAgICAgICAgICAgICAgIDB4MEREOCAgCisjZGVmaW5lIENMT0NLX0NOVExfSU5ERVggICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgCisjZGVmaW5lIENMT0NLX0NOVExfREFUQSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwQyAgCisjZGVmaW5lIENQX1JCX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDcwNCAgCisjZGVmaW5lIENQX1JCX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDcwMCAgCisjZGVmaW5lIENQX1JCX1JQVFJfQUREUiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDcwQyAgCisjZGVmaW5lIENQX1JCX1JQVFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDcxMCAgCisjZGVmaW5lIENQX1JCX1dQVFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDcxNCAgCisjZGVmaW5lIENQX1JCX1dQVFJfREVMQVkgICAgICAgICAgICAgICAgICAgICAgIDB4MDcxOCAgCisjZGVmaW5lIENQX0lCX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDczOCAgCisjZGVmaW5lIENQX0lCX0JVRlNaICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDczQyAgCisjZGVmaW5lIFNDUkFUQ0hfUkVHMCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTVFMCAgCisjZGVmaW5lIEdVSV9TQ1JBVENIX1JFRzAgICAgICAgICAgICAgICAgICAgICAgIDB4MTVFMCAgCisjZGVmaW5lIFNDUkFUQ0hfUkVHMSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTVFNCAgCisjZGVmaW5lIEdVSV9TQ1JBVENIX1JFRzEgICAgICAgICAgICAgICAgICAgICAgIDB4MTVFNCAgCisjZGVmaW5lIFNDUkFUQ0hfUkVHMiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTVFOAorI2RlZmluZSBHVUlfU0NSQVRDSF9SRUcyICAgICAgICAgICAgICAgICAgICAgICAweDE1RTgKKyNkZWZpbmUgU0NSQVRDSF9SRUczICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNUVDCisjZGVmaW5lIEdVSV9TQ1JBVENIX1JFRzMgICAgICAgICAgICAgICAgICAgICAgIDB4MTVFQyAgCisjZGVmaW5lIFNDUkFUQ0hfUkVHNCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTVGMCAgCisjZGVmaW5lIEdVSV9TQ1JBVENIX1JFRzQgICAgICAgICAgICAgICAgICAgICAgIDB4MTVGMCAgCisjZGVmaW5lIFNDUkFUQ0hfUkVHNSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTVGNCAgCisjZGVmaW5lIEdVSV9TQ1JBVENIX1JFRzUgICAgICAgICAgICAgICAgICAgICAgIDB4MTVGNCAgCisjZGVmaW5lIFNDUkFUQ0hfVU1TSyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDc3MCAgCisjZGVmaW5lIFNDUkFUQ0hfQUREUiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDc3NCAgCisjZGVmaW5lIERQX0JSVVNIX0ZSR0RfQ0xSICAgICAgICAgICAgICAgICAgICAgIDB4MTQ3QyAgCisjZGVmaW5lIERQX0JSVVNIX0JLR0RfQ0xSICAgICAgICAgICAgICAgICAgICAgIDB4MTQ3OAorI2RlZmluZSBEU1RfTElORV9TVEFSVCAgICAgICAgICAgICAgICAgICAgICAgICAweDE2MDAKKyNkZWZpbmUgRFNUX0xJTkVfRU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNjA0ICAKKyNkZWZpbmUgU1JDX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNUFDICAKKyNkZWZpbmUgU1JDX1BJVENIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNUIwCisjZGVmaW5lIFNSQ19USUxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTcwNAorI2RlZmluZSBTUkNfUElUQ0hfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAweDE0MjgKKyNkZWZpbmUgU1JDX1ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDE0ICAKKyNkZWZpbmUgU1JDX1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDE4ICAKKyNkZWZpbmUgU1JDX1hfWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNTkwICAKKyNkZWZpbmUgU1JDX1lfWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDM0ICAKKyNkZWZpbmUgRFNUX1lfWAkJCQkgICAgICAgMHgxNDM4CisjZGVmaW5lIERTVF9XSURUSF9IRUlHSFQJCSAgICAgICAweDE1OTgKKyNkZWZpbmUgRFNUX0hFSUdIVF9XSURUSAkJICAgICAgIDB4MTQzYworI2RlZmluZSBEU1RfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0MDQKKyNkZWZpbmUgU1JDX0NMVVRfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgMHgxNzgwICAKKyNkZWZpbmUgU1JDX0NMVVRfREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNzg0ICAKKyNkZWZpbmUgU1JDX0NMVVRfREFUQV9SRCAgICAgICAgICAgICAgICAgICAgICAgMHgxNzg4ICAKKyNkZWZpbmUgSE9TVF9EQVRBMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxN0MwICAKKyNkZWZpbmUgSE9TVF9EQVRBMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxN0M0ICAKKyNkZWZpbmUgSE9TVF9EQVRBMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxN0M4ICAKKyNkZWZpbmUgSE9TVF9EQVRBMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxN0NDICAKKyNkZWZpbmUgSE9TVF9EQVRBNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxN0QwICAKKyNkZWZpbmUgSE9TVF9EQVRBNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxN0Q0ICAKKyNkZWZpbmUgSE9TVF9EQVRBNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxN0Q4ICAKKyNkZWZpbmUgSE9TVF9EQVRBNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxN0RDCisjZGVmaW5lIEhPU1RfREFUQV9MQVNUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTdFMAorI2RlZmluZSBEUF9TUkNfRU5ESUFOICAgICAgICAgICAgICAgICAgICAgICAgICAweDE1RDQKKyNkZWZpbmUgRFBfU1JDX0ZSR0RfQ0xSICAgICAgICAgICAgICAgICAgICAgICAgMHgxNUQ4ICAKKyNkZWZpbmUgRFBfU1JDX0JLR0RfQ0xSICAgICAgICAgICAgICAgICAgICAgICAgMHgxNURDICAKKyNkZWZpbmUgU0NfTEVGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNjQwICAKKyNkZWZpbmUgU0NfUklHSFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNjQ0ICAKKyNkZWZpbmUgU0NfVE9QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNjQ4ICAKKyNkZWZpbmUgU0NfQk9UVE9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNjRDICAKKyNkZWZpbmUgU1JDX1NDX1JJR0hUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNjU0ICAKKyNkZWZpbmUgU1JDX1NDX0JPVFRPTSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNjVDICAKKyNkZWZpbmUgRFBfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNkMwICAKKyNkZWZpbmUgRFBfQ05UTF9YRElSX1lESVJfWU1BSk9SICAgICAgICAgICAgICAgMHgxNkQwICAKKyNkZWZpbmUgRFBfREFUQVRZUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNkM0ICAKKyNkZWZpbmUgRFBfTUlYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNkM4ICAKKyNkZWZpbmUgRFBfV1JJVEVfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNkNDICAKKyNkZWZpbmUgRFBfWE9QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxN0Y4ICAKKyNkZWZpbmUgQ0xSX0NNUF9DTFJfU1JDICAgICAgICAgICAgICAgICAgICAgICAgMHgxNUM0CisjZGVmaW5lIENMUl9DTVBfQ0xSX0RTVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MTVDOAorI2RlZmluZSBDTFJfQ01QX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE1QzAKKyNkZWZpbmUgQ0xSX0NNUF9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNUNDICAKKyNkZWZpbmUgRFNUQ0FDSEVfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNzEwICAKKyNkZWZpbmUgRFNUQ0FDSEVfQ1RMU1RBVCAgICAgICAgICAgICAgICAgICAgICAgMHgxNzE0ICAKKyNkZWZpbmUgREVGQVVMVF9QSVRDSF9PRkZTRVQgICAgICAgICAgICAgICAgICAgMHgxNkUwICAKKyNkZWZpbmUgREVGQVVMVF9TQ19CT1RUT01fUklHSFQgICAgICAgICAgICAgICAgMHgxNkU4ICAKKyNkZWZpbmUgREVGQVVMVF9TQ19UT1BfTEVGVCAgICAgICAgICAgICAgICAgICAgMHgxNkVDCisjZGVmaW5lIFNSQ19QSVRDSF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgIDB4MTQyOAorI2RlZmluZSBEU1RfUElUQ0hfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAweDE0MkMKKyNkZWZpbmUgRFBfR1VJX01BU1RFUl9DTlRMICAgICAgICAgICAgICAgICAgICAgMHgxNDZDICAKKyNkZWZpbmUgU0NfVE9QX0xFRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNkVDICAKKyNkZWZpbmUgU0NfQk9UVE9NX1JJR0hUICAgICAgICAgICAgICAgICAgICAgICAgMHgxNkYwICAKKyNkZWZpbmUgU1JDX1NDX0JPVFRPTV9SSUdIVCAgICAgICAgICAgICAgICAgICAgMHgxNkY0ICAKKyNkZWZpbmUgUkIyRF9EU1RDQUNIRV9NT0RFCQkgICAgICAgMHgzNDI4CisjZGVmaW5lIFJCMkRfRFNUQ0FDSEVfQ1RMU1RBVAkJICAgICAgIDB4MzQyQworI2RlZmluZSBMVkRTX0dFTl9DTlRMCQkJICAgICAgIDB4MDJkMAorI2RlZmluZSBMVkRTX1BMTF9DTlRMCQkJICAgICAgIDB4MDJkNAorI2RlZmluZSBGUDJfR0VOX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyODgKKyNkZWZpbmUgVE1EU19DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjk0CisjZGVmaW5lIFRNRFNfQ1JDCQkJICAgICAgIDB4MDJhMAorI2RlZmluZSBUTURTX1RSQU5TTUlUVEVSX0NOVEwJCSAgICAgICAweDAyYTQKKyNkZWZpbmUgTVBQX1RCX0NPTkZJRyAgICAgICAgICAgIAkgICAgICAgMHgwMWMwCisjZGVmaW5lIFBBTUFDMF9ETFlfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgIDB4MGE5NAorI2RlZmluZSBQQU1BQzFfRExZX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAweDBhOTgKKyNkZWZpbmUgUEFNQUMyX0RMWV9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgMHgwYTljCisjZGVmaW5lIEZXX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDExOAorI2RlZmluZSBGQ1BfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5MTAKKyNkZWZpbmUgVkdBX0REQV9PTl9PRkYgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMmVjCisjZGVmaW5lIFRWX01BU1RFUl9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMAorCisvLyNkZWZpbmUgQkFTRV9DT0RFCQkJICAgICAgIDB4MGYwYgorI2RlZmluZSBCSU9TXzBfU0NSQVRDSAkJCSAgICAgICAweDAwMTAKKyNkZWZpbmUgQklPU18xX1NDUkFUQ0gJCQkgICAgICAgMHgwMDE0CisjZGVmaW5lIEJJT1NfMl9TQ1JBVENICQkJICAgICAgIDB4MDAxOAorI2RlZmluZSBCSU9TXzNfU0NSQVRDSAkJCSAgICAgICAweDAwMWMKKyNkZWZpbmUgQklPU180X1NDUkFUQ0gJCQkgICAgICAgMHgwMDIwCisjZGVmaW5lIEJJT1NfNV9TQ1JBVENICQkJICAgICAgIDB4MDAyNAorI2RlZmluZSBCSU9TXzZfU0NSQVRDSAkJCSAgICAgICAweDAwMjgKKyNkZWZpbmUgQklPU183X1NDUkFUQ0gJCQkgICAgICAgMHgwMDJjCisKKyNkZWZpbmUgSERQX1NPRlRfUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMjYpCisKKyNkZWZpbmUgVFZfREFDX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwODhjCisjZGVmaW5lIEdQSU9QQURfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDE5OAorI2RlZmluZSBHUElPUEFEX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxOWMKKyNkZWZpbmUgR1BJT1BBRF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMWEwCisjZGVmaW5lIEdQSU9QQURfWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDFhNAorI2RlZmluZSBaVl9MQ0RQQURfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAweDAxYTgKKyNkZWZpbmUgWlZfTENEUEFEX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMWFjCisjZGVmaW5lIFpWX0xDRFBBRF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDFiMAorI2RlZmluZSBaVl9MQ0RQQURfWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxYjQKKworLyogUExMIFJlZ2lzdGVycyAqLworI2RlZmluZSBDTEtfUElOX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxCisjZGVmaW5lIFBQTExfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgUFBMTF9SRUZfRElWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMworI2RlZmluZSBQUExMX0RJVl8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIFBQTExfRElWXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDUKKyNkZWZpbmUgUFBMTF9ESVZfMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNgorI2RlZmluZSBQUExMX0RJVl8zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA3CisjZGVmaW5lIFZDTEtfRUNQX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgSFRPVEFMX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOQorI2RlZmluZSBNX1NQTExfUkVGX0ZCX0RJViAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBhCisjZGVmaW5lIEFHUF9QTExfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMGIKKyNkZWZpbmUgU1BMTF9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwYworI2RlZmluZSBTQ0xLX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBkCisjZGVmaW5lIE1QTExfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMGUKKyNkZWZpbmUgTURMTF9DS08gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwZgorI2RlZmluZSBNRExMX1JEQ0tBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIE1DTEtfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTIKKyNkZWZpbmUgQUdQX1BMTF9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwYgorI2RlZmluZSBQTExfVEVTVF9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEzCisjZGVmaW5lIENMS19QV1JNR1RfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTQKKyNkZWZpbmUgUExMX1BXUk1HVF9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxNQorI2RlZmluZSBNQ0xLX01JU0MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDFmCisjZGVmaW5lIFAyUExMX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMmEKKyNkZWZpbmUgUDJQTExfUkVGX0RJViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyYgorI2RlZmluZSBQSVhDTEtTX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDJkCisjZGVmaW5lIFNDTEtfTU9SRV9DTlRMCQkJCSAgIDB4MDAzNQorCisvKiBNQ0xLX0NOVEwgYml0IGNvbnN0YW50cyAqLworI2RlZmluZSBGT1JDRU9OX01DTEtBCQkJCSAgICgxIDw8IDE2KQorI2RlZmluZSBGT1JDRU9OX01DTEtCICAgICAgICAgCQkgICAJICAgKDEgPDwgMTcpCisjZGVmaW5lIEZPUkNFT05fWUNMS0EgICAgICAgICAJICAgIAkgICAJICAgKDEgPDwgMTgpCisjZGVmaW5lIEZPUkNFT05fWUNMS0IgICAgICAgICAJCSAgIAkgICAoMSA8PCAxOSkKKyNkZWZpbmUgRk9SQ0VPTl9NQyAgICAgICAgICAgIAkJICAgCSAgICgxIDw8IDIwKQorI2RlZmluZSBGT1JDRU9OX0FJQyAgICAgICAgICAgCQkgICAJICAgKDEgPDwgMjEpCisKKy8qIFNDTEtfQ05UTCBiaXQgY29uc3RhbnRzICovCisjZGVmaW5lIERZTl9TVE9QX0xBVF9NQVNLCQkJICAgMHgwMDAwN2ZmOAorI2RlZmluZSBDUF9NQVhfRFlOX1NUT1BfTEFUCQkJICAgMHgwMDA4CisjZGVmaW5lIFNDTEtfRk9SQ0VPTl9NQVNLCQkJICAgMHhmZmZmODAwMAorCisvKiBTQ0xLX01PUkVfQ05UTCBiaXQgY29uc3RhbnRzICovCisjZGVmaW5lIFNDTEtfTU9SRV9GT1JDRU9OCQkJICAgMHgwNzAwCisKKy8qIEJVU19DTlRMIGJpdCBjb25zdGFudHMgKi8KKyNkZWZpbmUgQlVTX0RCTF9SRVNZTkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQlVTX01TVFJfUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQlVTX0ZMVVNIX0JVRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQlVTX1NUT1BfUkVRX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQlVTX1JPVEFUSU9OX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQlVTX01BU1RFUl9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQlVTX1JPTV9XUlRfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQlVTX0RJU19ST00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgQlVTX1BDSV9SRUFEX1JFVFJZX0VOICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgQlVTX0FHUF9BRF9TVEVQUElOR19FTiAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgQlVTX1BDSV9XUlRfUkVUUllfRU4gICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgQlVTX01TVFJfUkRfTVVMVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgQlVTX01TVFJfUkRfTElORSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgQlVTX1NVU1BFTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgTEFUXzE2WCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgQlVTX1JEX0RJU0NBUkRfRU4gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgQlVTX1JEX0FCT1JUX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgQlVTX01TVFJfV1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgQlVTX1BBUktJTkdfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgQlVTX01TVFJfRElTQ09OTkVDVF9FTiAgICAgICAgICAgICAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgQlVTX1dSVF9CVVJTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgQlVTX1JFQURfQlVSU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgQlVTX1JEWV9SRUFEX0RMWSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKworLyogUElYQ0xLU19DTlRMICovCisjZGVmaW5lIFBJWDJDTEtfU1JDX1NFTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAzCisjZGVmaW5lIFBJWDJDTEtfU1JDX1NFTF9DUFVDTEsgICAgICAgICAgICAgICAgICAgICAweDAwCisjZGVmaW5lIFBJWDJDTEtfU1JDX1NFTF9QU0NBTkNMSyAgICAgICAgICAgICAgICAgICAweDAxCisjZGVmaW5lIFBJWDJDTEtfU1JDX1NFTF9CWVRFQ0xLICAgICAgICAgICAgICAgICAgICAweDAyCisjZGVmaW5lIFBJWDJDTEtfU1JDX1NFTF9QMlBMTENMSyAgICAgICAgICAgICAgICAgICAweDAzCisjZGVmaW5lIFBJWDJDTEtfQUxXQVlTX09OYiAgICAgICAgICAgICAgICAgICAgICAgICAoMTw8NikKKyNkZWZpbmUgUElYMkNMS19EQUNfQUxXQVlTX09OYiAgICAgICAgICAgICAgICAgICAgICgxPDw3KQorI2RlZmluZSBQSVhDTEtfVFZfU1JDX1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgOCkKKyNkZWZpbmUgUElYQ0xLX0xWRFNfQUxXQVlTX09OYiAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE0KQorI2RlZmluZSBQSVhDTEtfVE1EU19BTFdBWVNfT05iICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTUpCisKKworLyogQ0xPQ0tfQ05UTF9JTkRFWCBiaXQgY29uc3RhbnRzICovCisjZGVmaW5lIFBMTF9XUl9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisKKy8qIENPTkZJR19DTlRMIGJpdCBjb25zdGFudHMgKi8KKyNkZWZpbmUgQ0ZHX1ZHQV9SQU1fRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQ0ZHX0FUSV9SRVZfSURfTUFTSwkJCSAgICgweGYgPDwgMTYpCisjZGVmaW5lIENGR19BVElfUkVWX0ExMQkJCQkgICAoMCA8PCAxNikKKyNkZWZpbmUgQ0ZHX0FUSV9SRVZfQTEyCQkJCSAgICgxIDw8IDE2KQorI2RlZmluZSBDRkdfQVRJX1JFVl9BMTMJCQkJICAgKDIgPDwgMTYpCisKKy8qIENSVENfRVhUX0NOVEwgYml0IGNvbnN0YW50cyAqLworI2RlZmluZSBWR0FfQVRJX0xJTkVBUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBWR0FfMTI4S0FQX1BBR0lORyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZQlYQ1JUX0NOVF9FTgkJCQkgICAoMSA8PCA2KQorI2RlZmluZSBDUlRDX0hTWU5DX0RJUwkJCQkgICAoMSA8PCA4KQorI2RlZmluZSBDUlRDX1ZTWU5DX0RJUwkJCQkgICAoMSA8PCA5KQorI2RlZmluZSBDUlRDX0RJU1BMQVlfRElTCQkJICAgKDEgPDwgMTApCisjZGVmaW5lIENSVENfQ1JUX09OCQkJCSAgICgxIDw8IDE1KQorCisKKy8qIERTVENBQ0hFX0NUTFNUQVQgYml0IGNvbnN0YW50cyAqLworI2RlZmluZSBSQjJEX0RDX0ZMVVNICQkJCSAgICgzIDw8IDApCisjZGVmaW5lIFJCMkRfRENfRkxVU0hfQUxMCQkJICAgMHhmCisjZGVmaW5lIFJCMkRfRENfQlVTWQkJCQkgICAoMSA8PCAzMSkKKworCisvKiBDUlRDX0dFTl9DTlRMIGJpdCBjb25zdGFudHMgKi8KKyNkZWZpbmUgQ1JUQ19EQkxfU0NBTl9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1JUQ19DVVJfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgQ1JUQ19JTlRFUkxBQ0VfRU4JCQkgICAoMSA8PCAxKQorI2RlZmluZSBDUlRDX0JZUEFTU19MVVRfRU4gICAgIAkJCSAgICgxIDw8IDE0KQorI2RlZmluZSBDUlRDX0VYVF9ESVNQX0VOICAgICAgCQkJICAgKDEgPDwgMjQpCisjZGVmaW5lIENSVENfRU4JCQkJCSAgICgxIDw8IDI1KQorI2RlZmluZSBDUlRDX0RJU1BfUkVRX0VOX0IgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMjYpCisKKy8qIENSVENfU1RBVFVTIGJpdCBjb25zdGFudHMgKi8KKyNkZWZpbmUgQ1JUQ19WQkxBTksgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKworLyogQ1JUQzJfR0VOX0NOVEwgYml0IGNvbnN0YW50cyAqLworI2RlZmluZSBDUlQyX09OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNykKKyNkZWZpbmUgQ1JUQzJfRElTUExBWV9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIzKQorI2RlZmluZSBDUlRDMl9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMjUpCisjZGVmaW5lIENSVEMyX0RJU1BfUkVRX0VOX0IgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyNikKKworLyogQ1VSX09GRlNFVCwgQ1VSX0hPUlpfVkVSVF9QT1NOLCBDVVJfSE9SWl9WRVJUX09GRiBiaXQgY29uc3RhbnRzICovCisjZGVmaW5lIENVUl9MT0NLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisKKy8qIEdQSU8gYml0IGNvbnN0YW50cyAqLworI2RlZmluZSBHUElPX0FfMAkJKDEgPDwgIDApCisjZGVmaW5lIEdQSU9fQV8xCQkoMSA8PCAgMSkKKyNkZWZpbmUgR1BJT19ZXzAJCSgxIDw8ICA4KQorI2RlZmluZSBHUElPX1lfMQkJKDEgPDwgIDkpCisjZGVmaW5lIEdQSU9fRU5fMAkJKDEgPDwgMTYpCisjZGVmaW5lIEdQSU9fRU5fMQkJKDEgPDwgMTcpCisjZGVmaW5lIEdQSU9fTUFTS18wCQkoMSA8PCAyNCkKKyNkZWZpbmUgR1BJT19NQVNLXzEJCSgxIDw8IDI1KQorI2RlZmluZSBWR0FfRERDX0RBVEFfT1VUUFVUCUdQSU9fQV8wCisjZGVmaW5lIFZHQV9ERENfQ0xLX09VVFBVVAlHUElPX0FfMQorI2RlZmluZSBWR0FfRERDX0RBVEFfSU5QVVQJR1BJT19ZXzAKKyNkZWZpbmUgVkdBX0REQ19DTEtfSU5QVVQJR1BJT19ZXzEKKyNkZWZpbmUgVkdBX0REQ19EQVRBX09VVF9FTglHUElPX0VOXzAKKyNkZWZpbmUgVkdBX0REQ19DTEtfT1VUX0VOCUdQSU9fRU5fMQorCisKKy8qIEZQIGJpdCBjb25zdGFudHMgKi8KKyNkZWZpbmUgRlBfQ1JUQ19IX1RPVEFMX01BU0sJCQkgICAweDAwMDAwM2ZmCisjZGVmaW5lIEZQX0NSVENfSF9ESVNQX01BU0sJCQkgICAweDAxZmYwMDAwCisjZGVmaW5lIEZQX0NSVENfVl9UT1RBTF9NQVNLCQkJICAgMHgwMDAwMGZmZgorI2RlZmluZSBGUF9DUlRDX1ZfRElTUF9NQVNLCQkJICAgMHgwZmZmMDAwMAorI2RlZmluZSBGUF9IX1NZTkNfU1RSVF9DSEFSX01BU0sJCSAgIDB4MDAwMDFmZjgKKyNkZWZpbmUgRlBfSF9TWU5DX1dJRF9NQVNLCQkJICAgMHgwMDNmMDAwMAorI2RlZmluZSBGUF9WX1NZTkNfU1RSVF9NQVNLCQkJICAgMHgwMDAwMGZmZgorI2RlZmluZSBGUF9WX1NZTkNfV0lEX01BU0sJCQkgICAweDAwMWYwMDAwCisjZGVmaW5lIEZQX0NSVENfSF9UT1RBTF9TSElGVAkJCSAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgRlBfQ1JUQ19IX0RJU1BfU0hJRlQJCQkgICAweDAwMDAwMDEwCisjZGVmaW5lIEZQX0NSVENfVl9UT1RBTF9TSElGVAkJCSAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgRlBfQ1JUQ19WX0RJU1BfU0hJRlQJCQkgICAweDAwMDAwMDEwCisjZGVmaW5lIEZQX0hfU1lOQ19TVFJUX0NIQVJfU0hJRlQJCSAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgRlBfSF9TWU5DX1dJRF9TSElGVAkJCSAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgRlBfVl9TWU5DX1NUUlRfU0hJRlQJCQkgICAweDAwMDAwMDAwCisjZGVmaW5lIEZQX1ZfU1lOQ19XSURfU0hJRlQJCQkgICAweDAwMDAwMDEwCisKKy8qIEZQX0dFTl9DTlRMIGJpdCBjb25zdGFudHMgKi8KKyNkZWZpbmUgRlBfRlBPTgkJCQkJICAgKDEgPDwgMCkKKyNkZWZpbmUgRlBfVE1EU19FTgkJCQkgICAoMSA8PCAyKQorI2RlZmluZSBGUF9QQU5FTF9GT1JNQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMykKKyNkZWZpbmUgRlBfRU5fVE1EUwkJCQkgICAoMSA8PCA3KQorI2RlZmluZSBGUF9ERVRFQ1RfU0VOU0UJCQkJICAgKDEgPDwgOCkKKyNkZWZpbmUgUjIwMF9GUF9TT1VSQ0VfU0VMX01BU0sgICAgICAgICAgICAgICAgICAgICgzIDw8IDEwKQorI2RlZmluZSBSMjAwX0ZQX1NPVVJDRV9TRUxfQ1JUQzEgICAgICAgICAgICAgICAgICAgKDAgPDwgMTApCisjZGVmaW5lIFIyMDBfRlBfU09VUkNFX1NFTF9DUlRDMiAgICAgICAgICAgICAgICAgICAoMSA8PCAxMCkKKyNkZWZpbmUgUjIwMF9GUF9TT1VSQ0VfU0VMX1JNWCAgICAgICAgICAgICAgICAgICAgICgyIDw8IDEwKQorI2RlZmluZSBSMjAwX0ZQX1NPVVJDRV9TRUxfVFJBTlMgICAgICAgICAgICAgICAgICAgKDMgPDwgMTApCisjZGVmaW5lIEZQX1NFTF9DUlRDMQkJCQkgICAoMCA8PCAxMykKKyNkZWZpbmUgRlBfU0VMX0NSVEMyCQkJCSAgICgxIDw8IDEzKQorI2RlZmluZSBGUF9VU0VfVkdBX0hTWU5DICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTQpCisjZGVmaW5lIEZQX0NSVENfRE9OVF9TSEFET1dfSFBBUgkJICAgKDEgPDwgMTUpCisjZGVmaW5lIEZQX0NSVENfRE9OVF9TSEFET1dfVlBBUgkJICAgKDEgPDwgMTYpCisjZGVmaW5lIEZQX0NSVENfRE9OVF9TSEFET1dfSEVORAkJICAgKDEgPDwgMTcpCisjZGVmaW5lIEZQX0NSVENfVVNFX1NIQURPV19WRU5ECQkJICAgKDEgPDwgMTgpCisjZGVmaW5lIEZQX1JNWF9IVlNZTkNfQ09OVFJPTF9FTgkJICAgKDEgPDwgMjApCisjZGVmaW5lIEZQX0RGUF9TWU5DX1NFTAkJCQkgICAoMSA8PCAyMSkKKyNkZWZpbmUgRlBfQ1JUQ19MT0NLXzhET1QJCQkgICAoMSA8PCAyMikKKyNkZWZpbmUgRlBfQ1JUX1NZTkNfU0VMCQkJCSAgICgxIDw8IDIzKQorI2RlZmluZSBGUF9VU0VfU0hBRE9XX0VOCQkJICAgKDEgPDwgMjQpCisjZGVmaW5lIEZQX0NSVF9TWU5DX0FMVAkJCQkgICAoMSA8PCAyNikKKworLyogRlAyX0dFTl9DTlRMIGJpdCBjb25zdGFudHMgKi8KKyNkZWZpbmUgRlAyX0JMQU5LX0VOICAgICAgICAgICAgICgxIDw8ICAxKQorI2RlZmluZSBGUDJfT04gICAgICAgICAgICAgICAgICAgKDEgPDwgIDIpCisjZGVmaW5lIEZQMl9QQU5FTF9GT1JNQVQgICAgICAgICAoMSA8PCAgMykKKyNkZWZpbmUgRlAyX1NPVVJDRV9TRUxfTUFTSyAgICAgICgzIDw8IDEwKQorI2RlZmluZSBGUDJfU09VUkNFX1NFTF9DUlRDMiAgICAgKDEgPDwgMTApCisjZGVmaW5lIEZQMl9TUkNfU0VMX01BU0sgICAgICAgICAoMyA8PCAxMykKKyNkZWZpbmUgRlAyX1NSQ19TRUxfQ1JUQzIgICAgICAgICgxIDw8IDEzKQorI2RlZmluZSBGUDJfRlBfUE9MICAgICAgICAgICAgICAgKDEgPDwgMTYpCisjZGVmaW5lIEZQMl9MUF9QT0wgICAgICAgICAgICAgICAoMSA8PCAxNykKKyNkZWZpbmUgRlAyX1NDS19QT0wgICAgICAgICAgICAgICgxIDw8IDE4KQorI2RlZmluZSBGUDJfTENEX0NOVExfTUFTSyAgICAgICAgKDcgPDwgMTkpCisjZGVmaW5lIEZQMl9QQURfRkxPUF9FTiAgICAgICAgICAoMSA8PCAyMikKKyNkZWZpbmUgRlAyX0NSQ19FTiAgICAgICAgICAgICAgICgxIDw8IDIzKQorI2RlZmluZSBGUDJfQ1JDX1JFQURfRU4gICAgICAgICAgKDEgPDwgMjQpCisjZGVmaW5lIEZQMl9EVjBfRU4gICAgICAgICAgICAgICAoMSA8PCAyNSkKKyNkZWZpbmUgRlAyX0RWMF9SQVRFX1NFTF9TRFIgICAgICgxIDw8IDI2KQorCisKKy8qIExWRFNfR0VOX0NOVEwgYml0IGNvbnN0YW50cyAqLworI2RlZmluZSBMVkRTX09OCQkJCQkgICAoMSA8PCAwKQorI2RlZmluZSBMVkRTX0RJU1BMQVlfRElTCQkJICAgKDEgPDwgMSkKKyNkZWZpbmUgTFZEU19QQU5FTF9UWVBFCQkJCSAgICgxIDw8IDIpCisjZGVmaW5lIExWRFNfUEFORUxfRk9STUFUCQkJICAgKDEgPDwgMykKKyNkZWZpbmUgTFZEU19FTgkJCQkJICAgKDEgPDwgNykKKyNkZWZpbmUgTFZEU19CTF9NT0RfTEVWRUxfTUFTSwkJCSAgIDB4MDAwMGZmMDAKKyNkZWZpbmUgTFZEU19CTF9NT0RfTEVWRUxfU0hJRlQJCQkgICA4CisjZGVmaW5lIExWRFNfQkxfTU9EX0VOCQkJCSAgICgxIDw8IDE2KQorI2RlZmluZSBMVkRTX0RJR09OCQkJCSAgICgxIDw8IDE4KQorI2RlZmluZSBMVkRTX0JMT04JCQkJICAgKDEgPDwgMTkpCisjZGVmaW5lIExWRFNfU0VMX0NSVEMyCQkJCSAgICgxIDw8IDIzKQorI2RlZmluZSBMVkRTX1NUQVRFX01BU0sJXAorCShMVkRTX09OIHwgTFZEU19ESVNQTEFZX0RJUyB8IExWRFNfQkxfTU9EX0xFVkVMX01BU0sgfCBMVkRTX0JMT04pCisKKy8qIExWRFNfUExMX0NOVEwgYml0IGNvbnN0YXRucyAqLworI2RlZmluZSBIU1lOQ19ERUxBWV9TSElGVAkJCSAgIDB4MWMKKyNkZWZpbmUgSFNZTkNfREVMQVlfTUFTSwkJCSAgICgweGYgPDwgMHgxYykKKworLyogVE1EU19UUkFOU01JVFRFUl9DTlRMIGJpdCBjb25zdGFudHMgKi8KKyNkZWZpbmUgVE1EU19QTExfRU4JCQkJICAgKDEgPDwgMCkKKyNkZWZpbmUgVE1EU19QTExSU1QJCQkJICAgKDEgPDwgMSkKKyNkZWZpbmUgVE1EU19SQU5fUEFUX1JTVAkJCSAgICgxIDw8IDcpCisjZGVmaW5lIFRNRFNfSUNIQ1NFTAkJCQkgICAoMSA8PCAyOCkKKworLyogRlBfSE9SWl9TVFJFVENIIGJpdCBjb25zdGFudHMgKi8KKyNkZWZpbmUgSE9SWl9TVFJFVENIX1JBVElPX01BU0sJCQkgICAweGZmZmYKKyNkZWZpbmUgSE9SWl9TVFJFVENIX1JBVElPX01BWAkJCSAgIDQwOTYKKyNkZWZpbmUgSE9SWl9QQU5FTF9TSVpFCQkJCSAgICgweDFmZiA8PCAxNikKKyNkZWZpbmUgSE9SWl9QQU5FTF9TSElGVAkJCSAgIDE2CisjZGVmaW5lIEhPUlpfU1RSRVRDSF9QSVhSRVAJCQkgICAoMCA8PCAyNSkKKyNkZWZpbmUgSE9SWl9TVFJFVENIX0JMRU5ECQkJICAgKDEgPDwgMjYpCisjZGVmaW5lIEhPUlpfU1RSRVRDSF9FTkFCTEUJCQkgICAoMSA8PCAyNSkKKyNkZWZpbmUgSE9SWl9BVVRPX1JBVElPCQkJCSAgICgxIDw8IDI3KQorI2RlZmluZSBIT1JaX0ZQX0xPT1BfU1RSRVRDSAkJCSAgICgweDcgPDwgMjgpCisjZGVmaW5lIEhPUlpfQVVUT19SQVRJT19JTkMJCQkgICAoMSA8PCAzMSkKKworCisvKiBGUF9WRVJUX1NUUkVUQ0ggYml0IGNvbnN0YW50cyAqLworI2RlZmluZSBWRVJUX1NUUkVUQ0hfUkFUSU9fTUFTSwkJCSAgIDB4ZmZmCisjZGVmaW5lIFZFUlRfU1RSRVRDSF9SQVRJT19NQVgJCQkgICA0MDk2CisjZGVmaW5lIFZFUlRfUEFORUxfU0laRQkJCQkgICAoMHhmZmYgPDwgMTIpCisjZGVmaW5lIFZFUlRfUEFORUxfU0hJRlQJCQkgICAxMgorI2RlZmluZSBWRVJUX1NUUkVUQ0hfTElOUkVQCQkJICAgKDAgPDwgMjYpCisjZGVmaW5lIFZFUlRfU1RSRVRDSF9CTEVORAkJCSAgICgxIDw8IDI2KQorI2RlZmluZSBWRVJUX1NUUkVUQ0hfRU5BQkxFCQkJICAgKDEgPDwgMjUpCisjZGVmaW5lIFZFUlRfQVVUT19SQVRJT19FTgkJCSAgICgxIDw8IDI3KQorI2RlZmluZSBWRVJUX0ZQX0xPT1BfU1RSRVRDSAkJCSAgICgweDcgPDwgMjgpCisjZGVmaW5lIFZFUlRfU1RSRVRDSF9SRVNFUlZFRAkJCSAgIDB4ZjEwMDAwMDAKKworLyogREFDX0NOVEwgYml0IGNvbnN0YW50cyAqLyAgIAorI2RlZmluZSBEQUNfOEJJVF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBEQUNfNEJQUF9QSVhfT1JERVIgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBEQUNfQ1JDX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBEQUNfTUFTS19BTEwJCQkJICAgKDB4ZmYgPDwgMjQpCisjZGVmaW5lIERBQ19QRFdOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNSkKKyNkZWZpbmUgREFDX0VYUEFORF9NT0RFCQkJCSAgICgxIDw8IDE0KQorI2RlZmluZSBEQUNfVkdBX0FEUl9FTgkJCQkgICAoMSA8PCAxMykKKyNkZWZpbmUgREFDX1JBTkdFX0NOVEwJCQkJICAgKDMgPDwgIDApCisjZGVmaW5lIERBQ19SQU5HRV9DTlRMX01BU0sgICAgCQkJICAgMHgwMworI2RlZmluZSBEQUNfQkxBTktJTkcJCQkJICAgKDEgPDwgIDIpCisjZGVmaW5lIERBQ19DTVBfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAgMykKKyNkZWZpbmUgREFDX0NNUF9PVVRQVVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8ICA3KQorCisvKiBEQUNfQ05UTDIgYml0IGNvbnN0YW50cyAqLyAgIAorI2RlZmluZSBEQUMyX0VYUEFORF9NT0RFCQkJICAgKDEgPDwgMTQpCisjZGVmaW5lIERBQzJfQ01QX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA3KQorI2RlZmluZSBEQUMyX1BBTEVUVEVfQUNDRVNTX0NOVEwgICAgICAgICAgICAgICAgICAgKDEgPDwgNSkKKworLyogREFDX0VYVF9DTlRMIGJpdCBjb25zdGFudHMgKi8KKyNkZWZpbmUgREFDX0ZPUkNFX0JMQU5LX09GRl9FTiAgICAgICAgICAgICAgICAgICAgICgxIDw8IDQpCisjZGVmaW5lIERBQ19GT1JDRV9EQVRBX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA1KQorI2RlZmluZSBEQUNfRk9SQ0VfREFUQV9TRUxfTUFTSyAgICAgICAgICAgICAgICAgICAgKDMgPDwgNikKKyNkZWZpbmUgREFDX0ZPUkNFX0RBVEFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwM2ZmMDAKKyNkZWZpbmUgREFDX0ZPUkNFX0RBVEFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDgKKworLyogR0VOX1JFU0VUX0NOVEwgYml0IGNvbnN0YW50cyAqLworI2RlZmluZSBTT0ZUX1JFU0VUX0dVSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTT0ZUX1JFU0VUX1ZDTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBTT0ZUX1JFU0VUX1BDTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBTT0ZUX1JFU0VUX0VDUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBTT0ZUX1JFU0VUX0RJU1BFTkdfWENMSyAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorCisvKiBNRU1fQ05UTCBiaXQgY29uc3RhbnRzICovCisjZGVmaW5lIE1FTV9DVExSX1NUQVRVU19JRExFICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIE1FTV9DVExSX1NUQVRVU19CVVNZICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIE1FTV9TRVFOQ1JfU1RBVFVTX0lETEUgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIE1FTV9TRVFOQ1JfU1RBVFVTX0JVU1kgICAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIE1FTV9BUkJJVEVSX1NUQVRVU19JRExFICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIE1FTV9BUkJJVEVSX1NUQVRVU19CVVNZICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwCisjZGVmaW5lIE1FTV9SRVFfVU5MT0NLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIE1FTV9SRVFfTE9DSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIE1FTV9OVU1fQ0hBTk5FTFNfTUFTSyAJCQkgICAweDAwMDAwMDAxCisjZGVmaW5lIE1FTV9VU0VfQl9DSF9PTkxZICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFJWMTAwX01FTV9IQUxGX01PREUgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIFIzMDBfTUVNX05VTV9DSEFOTkVMU19NQVNLICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIFIzMDBfTUVNX1VTRV9DRF9DSF9PTkxZICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisKKworLyogUkJCTV9TT0ZUX1JFU0VUIGJpdCBjb25zdGFudHMgKi8KKyNkZWZpbmUgU09GVF9SRVNFVF9DUCAgICAgICAgICAgCQkgICAoMSA8PCAgMCkKKyNkZWZpbmUgU09GVF9SRVNFVF9ISSAgICAgICAgICAgCQkgICAoMSA8PCAgMSkKKyNkZWZpbmUgU09GVF9SRVNFVF9TRSAgICAgICAgICAgCQkgICAoMSA8PCAgMikKKyNkZWZpbmUgU09GVF9SRVNFVF9SRSAgICAgICAgICAgCQkgICAoMSA8PCAgMykKKyNkZWZpbmUgU09GVF9SRVNFVF9QUCAgICAgICAgICAgCQkgICAoMSA8PCAgNCkKKyNkZWZpbmUgU09GVF9SRVNFVF9FMiAgICAgICAgICAgCQkgICAoMSA8PCAgNSkKKyNkZWZpbmUgU09GVF9SRVNFVF9SQiAgICAgICAgICAgCQkgICAoMSA8PCAgNikKKyNkZWZpbmUgU09GVF9SRVNFVF9IRFAgICAgICAgICAgCQkgICAoMSA8PCAgNykKKworLyogU1VSRkFDRV9DTlRMIGJpdCBjb25zYW50cyAqLworI2RlZmluZSBTVVJGX1RSQU5TTEFUSU9OX0RJUwkJCSAgICgxIDw8IDgpCisjZGVmaW5lIE5PTlNVUkZfQVAwX1NXUF8xNkJQUAkJCSAgICgxIDw8IDIwKQorI2RlZmluZSBOT05TVVJGX0FQMF9TV1BfMzJCUFAJCQkgICAoMSA8PCAyMSkKKyNkZWZpbmUgTk9OU1VSRl9BUDFfU1dQXzE2QlBQCQkJICAgKDEgPDwgMjIpCisjZGVmaW5lIE5PTlNVUkZfQVAxX1NXUF8zMkJQUAkJCSAgICgxIDw8IDIzKQorCisvKiBERUZBVUxUX1NDX0JPVFRPTV9SSUdIVCBiaXQgY29uc3RhbnRzICovCisjZGVmaW5lIERFRkFVTFRfU0NfUklHSFRfTUFYCQkJICAgKDB4MWZmZiA8PCAwKQorI2RlZmluZSBERUZBVUxUX1NDX0JPVFRPTV9NQVgJCQkgICAoMHgxZmZmIDw8IDE2KQorCisvKiBNTV9JTkRFWCBiaXQgY29uc3RhbnRzICovCisjZGVmaW5lIE1NX0FQRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisKKy8qIENMUl9DTVBfQ05UTCBiaXQgY29uc3RhbnRzICovCisjZGVmaW5lIENPTVBBUkVfU1JDX0ZBTFNFICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIENPTVBBUkVfU1JDX1RSVUUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENPTVBBUkVfU1JDX05PVF9FUVVBTCAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIENPTVBBUkVfU1JDX0VRVUFMICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA1CisjZGVmaW5lIENPTVBBUkVfU1JDX0VRVUFMX0ZMSVAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIENPTVBBUkVfRFNUX0ZBTFNFICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIENPTVBBUkVfRFNUX1RSVUUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIENPTVBBUkVfRFNUX05PVF9FUVVBTCAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIENPTVBBUkVfRFNUX0VRVUFMICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTAwCisjZGVmaW5lIENPTVBBUkVfREVTVElOQVRJT04gICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIENPTVBBUkVfU09VUkNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIENPTVBBUkVfU1JDX0FORF9EU1QgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwCisKKworLyogRFBfQ05UTCBiaXQgY29uc3RhbnRzICovCisjZGVmaW5lIERTVF9YX1JJR0hUX1RPX0xFRlQgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIERTVF9YX0xFRlRfVE9fUklHSFQgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIERTVF9ZX0JPVFRPTV9UT19UT1AgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIERTVF9ZX1RPUF9UT19CT1RUT00gICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIERTVF9YX01BSk9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIERTVF9ZX01BSk9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIERTVF9YX1RJTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIERTVF9ZX1RJTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIERTVF9MQVNUX1BFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIERTVF9UUkFJTF9YX1JJR0hUX1RPX0xFRlQgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIERTVF9UUkFJTF9YX0xFRlRfVE9fUklHSFQgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIERTVF9UUkFQX0ZJTExfUklHSFRfVE9fTEVGVCAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIERTVF9UUkFQX0ZJTExfTEVGVF9UT19SSUdIVCAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIERTVF9CUkVTX1NJR04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIERTVF9IT1NUX0JJR19FTkRJQU5fRU4gICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIERTVF9QT0xZTElORV9OT05MQVNUICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIERTVF9SQVNURVJfU1RBTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIERTVF9QT0xZX0VER0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisKKworLyogRFBfQ05UTF9ZRElSX1hESVJfWU1BSk9SIGJpdCBjb25zdGFudHMgKHNob3J0IHZlcnNpb24gb2YgRFBfQ05UTCkgKi8KKyNkZWZpbmUgRFNUX1hfTUFKT1JfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgRFNUX1lfTUFKT1JfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgRFNUX1lfQk9UVE9NX1RPX1RPUF9TICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgRFNUX1lfVE9QX1RPX0JPVFRPTV9TICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgRFNUX1hfUklHSFRfVE9fTEVGVF9TICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgRFNUX1hfTEVGVF9UT19SSUdIVF9TICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKworCisvKiBEUF9EQVRBVFlQRSBiaXQgY29uc3RhbnRzICovCisjZGVmaW5lIERTVF84QlBQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIERTVF8xNUJQUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIERTVF8xNkJQUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIERTVF8yNEJQUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA1CisjZGVmaW5lIERTVF8zMkJQUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA2CisjZGVmaW5lIERTVF84QlBQX1JHQjMzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIERTVF84QlBQX1k4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIERTVF84QlBQX1JHQjggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA5CisjZGVmaW5lIERTVF8xNkJQUF9WWVVZNDIyICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBiCisjZGVmaW5lIERTVF8xNkJQUF9ZVllVNDIyICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBjCisjZGVmaW5lIERTVF8zMkJQUF9BWVVWNDQ0ICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBlCisjZGVmaW5lIERTVF8xNkJQUF9BUkdCNDQ0NCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBmCisjZGVmaW5lIEJSVVNIX1NPTElEQ09MT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwZDAwCisjZGVmaW5lIFNSQ19NT05PICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIFNSQ19NT05PX0xCS0dEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIFNSQ19EU1RDT0xPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDMwMDAwCisjZGVmaW5lIEJZVEVfT1JERVJfTVNCX1RPX0xTQiAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIEJZVEVfT1JERVJfTFNCX1RPX01TQiAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIERQX0NPTlZFUlNJT05fVEVNUCAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIEhPU1RfQklHX0VORElBTl9FTgkJCSAgICgxIDw8IDI5KQorCisKKy8qIERQX0dVSV9NQVNURVJfQ05UTCBiaXQgY29uc3RhbnRzICovCisjZGVmaW5lIEdNQ19TUkNfUElUQ0hfT0ZGU0VUX0RFRkFVTFQgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIEdNQ19TUkNfUElUQ0hfT0ZGU0VUX0xFQVZFICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEdNQ19EU1RfUElUQ0hfT0ZGU0VUX0RFRkFVTFQgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIEdNQ19EU1RfUElUQ0hfT0ZGU0VUX0xFQVZFICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEdNQ19TUkNfQ0xJUF9ERUZBVUxUICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIEdNQ19TUkNfQ0xJUF9MRUFWRSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEdNQ19EU1RfQ0xJUF9ERUZBVUxUICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIEdNQ19EU1RfQ0xJUF9MRUFWRSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEdNQ19CUlVTSF84eDhNT05PICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIEdNQ19CUlVTSF84eDhNT05PX0xCS0dEICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEdNQ19CUlVTSF84eDFNT05PICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEdNQ19CUlVTSF84eDFNT05PX0xCS0dEICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMwCisjZGVmaW5lIEdNQ19CUlVTSF8xeDhNT05PICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEdNQ19CUlVTSF8xeDhNT05PX0xCS0dEICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDUwCisjZGVmaW5lIEdNQ19CUlVTSF8zMngxTU9OTyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDYwCisjZGVmaW5lIEdNQ19CUlVTSF8zMngxTU9OT19MQktHRCAgICAgICAgICAgICAgICAgICAweDAwMDAwMDcwCisjZGVmaW5lIEdNQ19CUlVTSF8zMngzMk1PTk8gICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEdNQ19CUlVTSF8zMngzMk1PTk9fTEJLR0QgICAgICAgICAgICAgICAgICAweDAwMDAwMDkwCisjZGVmaW5lIEdNQ19CUlVTSF84eDhDT0xPUiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGEwCisjZGVmaW5lIEdNQ19CUlVTSF84eDFDT0xPUiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGIwCisjZGVmaW5lIEdNQ19CUlVTSF8xeDhDT0xPUiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGMwCisjZGVmaW5lIEdNQ19CUlVTSF9TT0xJRF9DT0xPUiAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBkMAorI2RlZmluZSBHTUNfRFNUXzhCUFAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBHTUNfRFNUXzE1QlBQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBHTUNfRFNUXzE2QlBQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBHTUNfRFNUXzI0QlBQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDUwMAorI2RlZmluZSBHTUNfRFNUXzMyQlBQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDYwMAorI2RlZmluZSBHTUNfRFNUXzhCUFBfUkdCMzMyICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDcwMAorI2RlZmluZSBHTUNfRFNUXzhCUFBfWTggICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBHTUNfRFNUXzhCUFBfUkdCOCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDkwMAorI2RlZmluZSBHTUNfRFNUXzE2QlBQX1ZZVVk0MjIgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMGIwMAorI2RlZmluZSBHTUNfRFNUXzE2QlBQX1lWWVU0MjIgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMGMwMAorI2RlZmluZSBHTUNfRFNUXzMyQlBQX0FZVVY0NDQgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMGUwMAorI2RlZmluZSBHTUNfRFNUXzE2QlBQX0FSR0I0NDQ0ICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMGYwMAorI2RlZmluZSBHTUNfU1JDX01PTk8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBHTUNfU1JDX01PTk9fTEJLR0QgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBHTUNfU1JDX0RTVENPTE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMzAwMAorI2RlZmluZSBHTUNfQllURV9PUkRFUl9NU0JfVE9fTFNCICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBHTUNfQllURV9PUkRFUl9MU0JfVE9fTVNCICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBHTUNfRFBfQ09OVkVSU0lPTl9URU1QXzkzMDAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBHTUNfRFBfQ09OVkVSU0lPTl9URU1QXzY1MDAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBHTUNfRFBfU1JDX1JFQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMAorI2RlZmluZSBHTUNfRFBfU1JDX0hPU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMzAwMDAwMAorI2RlZmluZSBHTUNfRFBfU1JDX0hPU1RfQllURUFMSUdOICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBHTUNfM0RfRkNOX0VOX0NMUiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBHTUNfM0RfRkNOX0VOX1NFVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwMDAwMAorI2RlZmluZSBHTUNfRFNUX0NMUl9DTVBfRkNOX0xFQVZFICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBHTUNfRFNUX0NMUl9DTVBfRkNOX0NMRUFSICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBHTUNfQVVYX0NMSVBfTEVBVkUgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBHTUNfQVVYX0NMSVBfQ0xFQVIgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBHTUNfV1JJVEVfTUFTS19MRUFWRSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBHTUNfV1JJVEVfTUFTS19TRVQgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBHTUNfQ0xSX0NNUF9DTlRMX0RJUyAgICAgIAkJICAgKDEgPDwgMjgpCisjZGVmaW5lIEdNQ19TUkNfREFUQVRZUEVfQ09MT1IJCQkgICAoMyA8PCAxMikKKyNkZWZpbmUgUk9QM19TICAgICAgICAgICAgICAgIAkJCSAgIDB4MDBjYzAwMDAKKyNkZWZpbmUgUk9QM19TUkNDT1BZCQkJCSAgIDB4MDBjYzAwMDAKKyNkZWZpbmUgUk9QM19QICAgICAgICAgICAgICAgIAkJCSAgIDB4MDBmMDAwMDAKKyNkZWZpbmUgUk9QM19QQVRDT1BZCQkJCSAgIDB4MDBmMDAwMDAKKyNkZWZpbmUgRFBfU1JDX1NPVVJDRV9NQVNLICAgICAgICAJCSAgICg3ICAgIDw8IDI0KQorI2RlZmluZSBHTUNfQlJVU0hfTk9ORSAgICAgICAgICAgIAkJICAgKDE1ICAgPDwgIDQpCisjZGVmaW5lIERQX1NSQ19TT1VSQ0VfTUVNT1JZCQkJICAgKDIgICAgPDwgMjQpCisjZGVmaW5lIEdNQ19CUlVTSF9TT0xJRENPTE9SCQkJICAgMHgwMDAwMDBkMAorCisvKiBEUF9NSVggYml0IGNvbnN0YW50cyAqLworI2RlZmluZSBEUF9TUkNfUkVDVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBEUF9TUkNfSE9TVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBEUF9TUkNfSE9TVF9CWVRFQUxJR04gICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorCisvKiBNUExMX0NOVEwgYml0IGNvbnN0YW50cyAqLworI2RlZmluZSBNUExMX1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorCisvKiBNRExMX0NLTyBiaXQgY29uc3RhbnRzICovCisjZGVmaW5lIE1DS09BX1NMRUVQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIE1DS09BX1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIE1DS09BX1JFRl9TS0VXX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNzAwCisjZGVmaW5lIE1DS09BX0ZCX1NLRVdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA3MDAwCisKKy8qIE1ETExfUkRDS0EgYml0IGNvbnN0YW50cyAqLworI2RlZmluZSBNUkRDS0EwX1NMRUVQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBNUkRDS0EwX1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBNUkRDS0ExX1NMRUVQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBNUkRDS0ExX1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorCisvKiBWQ0xLX0VDUF9DTlRMIGNvbnN0YW50cyAqLworI2RlZmluZSBWQ0xLX1NSQ19TRUxfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMworI2RlZmluZSBWQ0xLX1NSQ19TRUxfQ1BVQ0xLICAgICAgICAgICAgICAgICAgICAgICAgMHgwMAorI2RlZmluZSBWQ0xLX1NSQ19TRUxfUFNDQU5DTEsgICAgICAgICAgICAgICAgICAgICAgMHgwMQorI2RlZmluZSBWQ0xLX1NSQ19TRUxfQllURUNMSwkgICAgICAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBWQ0xLX1NSQ19TRUxfUFBMTENMSwkJCSAgIDB4MDMKKyNkZWZpbmUgUElYQ0xLX0FMV0FZU19PTmIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgUElYQ0xLX0RBQ19BTFdBWVNfT05iICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKworLyogQlVTX0NOVEwxIGNvbnN0YW50cyAqLworI2RlZmluZSBCVVNfQ05UTDFfTU9CSUxFX1BMQVRGT1JNX1NFTF9NQVNLICAgICAgICAgMHgwYzAwMDAwMAorI2RlZmluZSBCVVNfQ05UTDFfTU9CSUxFX1BMQVRGT1JNX1NFTF9TSElGVCAgICAgICAgMjYKKyNkZWZpbmUgQlVTX0NOVEwxX0FHUENMS19WQUxJRCAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKworLyogUExMX1BXUk1HVF9DTlRMIGNvbnN0YW50cyAqLworI2RlZmluZSBQTExfUFdSTUdUX0NOVExfU1BMTF9UVVJOT0ZGICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBQTExfUFdSTUdUX0NOVExfUFBMTF9UVVJOT0ZGICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBQTExfUFdSTUdUX0NOVExfUDJQTExfVFVSTk9GRiAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBQTExfUFdSTUdUX0NOVExfVFZQTExfVFVSTk9GRiAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBQTExfUFdSTUdUX0NOVExfTU9CSUxFX1NVICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBQTExfUFdSTUdUX0NOVExfU1VfU0NMS19VU0VfQkNMSyAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBQTExfUFdSTUdUX0NOVExfU1VfTUNMS19VU0VfQkNMSyAgICAgICAgICAgMHgwMDA0MDAwMAorCisvKiBUVl9EQUNfQ05UTCBjb25zdGFudHMgKi8KKyNkZWZpbmUgVFZfREFDX0NOVExfQkdTTEVFUCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgVFZfREFDX0NOVExfREVURUNUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgVFZfREFDX0NOVExfQkdBREpfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAwZjAwMDAKKyNkZWZpbmUgVFZfREFDX0NOVExfREFDQURKX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDBmMDAwMDAKKyNkZWZpbmUgVFZfREFDX0NOVExfQkdBREpfX1NISUZUICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIFRWX0RBQ19DTlRMX0RBQ0FESl9fU0hJRlQgICAgICAgICAgICAgICAgICAyMAorI2RlZmluZSBUVl9EQUNfQ05UTF9SREFDUEQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBUVl9EQUNfQ05UTF9HREFDUEQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMAorI2RlZmluZSBUVl9EQUNfQ05UTF9CREFDUEQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAorCisvKiBESVNQX01JU0NfQ05UTCBjb25zdGFudHMgKi8KKyNkZWZpbmUgRElTUF9NSVNDX0NOVExfU09GVF9SRVNFVF9HUlBIX1BQICAgICAgICAgICgxIDw8IDApCisjZGVmaW5lIERJU1BfTUlTQ19DTlRMX1NPRlRfUkVTRVRfU1VCUElDX1BQICAgICAgICAoMSA8PCAxKQorI2RlZmluZSBESVNQX01JU0NfQ05UTF9TT0ZUX1JFU0VUX09WMF9QUCAgICAgICAgICAgKDEgPDwgMikKKyNkZWZpbmUgRElTUF9NSVNDX0NOVExfU09GVF9SRVNFVF9HUlBIX1NDTEsgICAgICAgICgxIDw8IDQpCisjZGVmaW5lIERJU1BfTUlTQ19DTlRMX1NPRlRfUkVTRVRfU1VCUElDX1NDTEsgICAgICAoMSA8PCA1KQorI2RlZmluZSBESVNQX01JU0NfQ05UTF9TT0ZUX1JFU0VUX09WMF9TQ0xLICAgICAgICAgKDEgPDwgNikKKyNkZWZpbmUgRElTUF9NSVNDX0NOVExfU09GVF9SRVNFVF9HUlBIMl9QUCAgICAgICAgICgxIDw8IDEyKQorI2RlZmluZSBESVNQX01JU0NfQ05UTF9TT0ZUX1JFU0VUX0dSUEgyX1NDTEsgICAgICAgKDEgPDwgMTUpCisjZGVmaW5lIERJU1BfTUlTQ19DTlRMX1NPRlRfUkVTRVRfTFZEUyAgICAgICAgICAgICAoMSA8PCAxNikKKyNkZWZpbmUgRElTUF9NSVNDX0NOVExfU09GVF9SRVNFVF9UTURTICAgICAgICAgICAgICgxIDw8IDE3KQorI2RlZmluZSBESVNQX01JU0NfQ05UTF9TT0ZUX1JFU0VUX0RJR19UTURTICAgICAgICAgKDEgPDwgMTgpCisjZGVmaW5lIERJU1BfTUlTQ19DTlRMX1NPRlRfUkVTRVRfVFYgICAgICAgICAgICAgICAoMSA8PCAxOSkKKworLyogRElTUF9QV1JfTUFOIGNvbnN0YW50cyAqLworI2RlZmluZSBESVNQX1BXUl9NQU5fRElTUF9QV1JfTUFOX0QzX0NSVENfRU4gICAgICAgKDEgPDwgMCkKKyNkZWZpbmUgRElTUF9QV1JfTUFOX0RJU1AyX1BXUl9NQU5fRDNfQ1JUQzJfRU4gICAgICgxIDw8IDQpCisjZGVmaW5lIERJU1BfUFdSX01BTl9ESVNQX0QzX1JTVCAgICAgICAgICAgICAgICAgICAoMSA8PCAxNikKKyNkZWZpbmUgRElTUF9QV1JfTUFOX0RJU1BfRDNfUkVHX1JTVCAgICAgICAgICAgICAgICgxIDw8IDE3KQorI2RlZmluZSBESVNQX1BXUl9NQU5fRElTUF9EM19HUlBIX1JTVCAgICAgICAgICAgICAgKDEgPDwgMTgpCisjZGVmaW5lIERJU1BfUFdSX01BTl9ESVNQX0QzX1NVQlBJQ19SU1QgICAgICAgICAgICAoMSA8PCAxOSkKKyNkZWZpbmUgRElTUF9QV1JfTUFOX0RJU1BfRDNfT1YwX1JTVCAgICAgICAgICAgICAgICgxIDw8IDIwKQorI2RlZmluZSBESVNQX1BXUl9NQU5fRElTUF9EMUQyX0dSUEhfUlNUICAgICAgICAgICAgKDEgPDwgMjEpCisjZGVmaW5lIERJU1BfUFdSX01BTl9ESVNQX0QxRDJfU1VCUElDX1JTVCAgICAgICAgICAoMSA8PCAyMikKKyNkZWZpbmUgRElTUF9QV1JfTUFOX0RJU1BfRDFEMl9PVjBfUlNUICAgICAgICAgICAgICgxIDw8IDIzKQorI2RlZmluZSBESVNQX1BXUl9NQU5fRElHX1RNRFNfRU5BQkxFX1JTVCAgICAgICAgICAgKDEgPDwgMjQpCisjZGVmaW5lIERJU1BfUFdSX01BTl9UVl9FTkFCTEVfUlNUICAgICAgICAgICAgICAgICAoMSA8PCAyNSkKKyNkZWZpbmUgRElTUF9QV1JfTUFOX0FVVE9fUFdSVVBfRU4gICAgICAgICAgICAgICAgICgxIDw8IDI2KQorCisvKiBtYXNrcyAqLworCisjZGVmaW5lIENPTkZJR19NRU1TSVpFX01BU0sJCTB4MWYwMDAwMDAKKyNkZWZpbmUgTUVNX0NGR19UWVBFCQkJMHg0MDAwMDAwMAorI2RlZmluZSBEU1RfT0ZGU0VUX01BU0sJCQkweDAwM2ZmZmZmCisjZGVmaW5lIERTVF9QSVRDSF9NQVNLCQkJMHgzZmMwMDAwMAorI2RlZmluZSBERUZBVUxUX1RJTEVfTUFTSwkJMHhjMDAwMDAwMAorI2RlZmluZQlQUExMX0RJVl9TRUxfTUFTSwkJMHgwMDAwMDMwMAorI2RlZmluZQlQUExMX1JFU0VUCQkJMHgwMDAwMDAwMQorI2RlZmluZQlQUExMX1NMRUVQCQkJMHgwMDAwMDAwMgorI2RlZmluZSBQUExMX0FUT01JQ19VUERBVEVfRU4JCTB4MDAwMTAwMDAKKyNkZWZpbmUgUFBMTF9SRUZfRElWX01BU0sJCTB4MDAwMDAzZmYKKyNkZWZpbmUJUFBMTF9GQjNfRElWX01BU0sJCTB4MDAwMDA3ZmYKKyNkZWZpbmUJUFBMTF9QT1NUM19ESVZfTUFTSwkJMHgwMDA3MDAwMAorI2RlZmluZSBQUExMX0FUT01JQ19VUERBVEVfUgkJMHgwMDAwODAwMAorI2RlZmluZSBQUExMX0FUT01JQ19VUERBVEVfVwkJMHgwMDAwODAwMAorI2RlZmluZQlQUExMX1ZHQV9BVE9NSUNfVVBEQVRFX0VOCTB4MDAwMjAwMDAKKyNkZWZpbmUgUjMwMF9QUExMX1JFRl9ESVZfQUNDX01BU0sJKDB4M2ZmIDw8IDE4KQorI2RlZmluZSBSMzAwX1BQTExfUkVGX0RJVl9BQ0NfU0hJRlQJMTgKKworI2RlZmluZSBHVUlfQUNUSVZFCQkJMHg4MDAwMDAwMAorCisKKyNkZWZpbmUgTUNfSU5EX0lOREVYICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMUY4CisjZGVmaW5lIE1DX0lORF9EQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDFGQworCisvKiBQQURfQ1RMUl9TVFJFTkdUSCAqLworI2RlZmluZSBQQURfTUFOVUFMX09WRVJSSURFCQkweDgwMDAwMDAwCisKKy8vIHBsbENMS19QSU5fQ05UTAorI2RlZmluZSBDTEtfUElOX0NOVExfX09TQ19FTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxTAorI2RlZmluZSBDTEtfUElOX0NOVExfX09TQ19FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxTAorI2RlZmluZSBDTEtfUElOX0NOVExfX1hUTF9MT1dfR0FJTl9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0TAorI2RlZmluZSBDTEtfUElOX0NOVExfX1hUTF9MT1dfR0FJTiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0TAorI2RlZmluZSBDTEtfUElOX0NOVExfX0RPTlRfVVNFX1hUQUxJTl9NQVNLICAgICAgICAgICAgICAgICAweDAwMDAwMDEwTAorI2RlZmluZSBDTEtfUElOX0NOVExfX0RPTlRfVVNFX1hUQUxJTiAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwTAorI2RlZmluZSBDTEtfUElOX0NOVExfX1NMT1dfQ0xPQ0tfU09VUkNFX01BU0sgICAgICAgICAgICAgICAweDAwMDAwMDIwTAorI2RlZmluZSBDTEtfUElOX0NOVExfX1NMT1dfQ0xPQ0tfU09VUkNFICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwTAorI2RlZmluZSBDTEtfUElOX0NOVExfX0NHX0NMS19UT19PVVRQSU5fTUFTSyAgICAgICAgICAgICAgICAweDAwMDAwODAwTAorI2RlZmluZSBDTEtfUElOX0NOVExfX0NHX0NMS19UT19PVVRQSU4gICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwTAorI2RlZmluZSBDTEtfUElOX0NOVExfX0NHX0NPVU5UX1VQX1RPX09VVFBJTl9NQVNLICAgICAgICAgICAweDAwMDAxMDAwTAorI2RlZmluZSBDTEtfUElOX0NOVExfX0NHX0NPVU5UX1VQX1RPX09VVFBJTiAgICAgICAgICAgICAgICAweDAwMDAxMDAwTAorI2RlZmluZSBDTEtfUElOX0NOVExfX0FDQ0VTU19SRUdTX0lOX1NVU1BFTkRfTUFTSyAgICAgICAgICAweDAwMDAyMDAwTAorI2RlZmluZSBDTEtfUElOX0NOVExfX0FDQ0VTU19SRUdTX0lOX1NVU1BFTkQgICAgICAgICAgICAgICAweDAwMDAyMDAwTAorI2RlZmluZSBDTEtfUElOX0NOVExfX0NHX1NQQVJFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwTAorI2RlZmluZSBDTEtfUElOX0NOVExfX0NHX1NQQVJFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwTAorI2RlZmluZSBDTEtfUElOX0NOVExfX1NDTEtfRFlOX1NUQVJUX0NOVExfTUFTSyAgICAgICAgICAgICAweDAwMDA4MDAwTAorI2RlZmluZSBDTEtfUElOX0NOVExfX1NDTEtfRFlOX1NUQVJUX0NOVEwgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwTAorI2RlZmluZSBDTEtfUElOX0NOVExfX0NQX0NMS19SVU5OSU5HX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwTAorI2RlZmluZSBDTEtfUElOX0NOVExfX0NQX0NMS19SVU5OSU5HICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwTAorI2RlZmluZSBDTEtfUElOX0NOVExfX0NHX1NQQVJFX1JEX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMDYwMDAwTAorI2RlZmluZSBDTEtfUElOX0NOVExfX1hUQUxJTl9BTFdBWVNfT05iX01BU0sgICAgICAgICAgICAgICAweDAwMDgwMDAwTAorI2RlZmluZSBDTEtfUElOX0NOVExfX1hUQUxJTl9BTFdBWVNfT05iICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwTAorI2RlZmluZSBDTEtfUElOX0NOVExfX1BXUlNFUV9ERUxBWV9NQVNLICAgICAgICAgICAgICAgICAgICAweGZmMDAwMDAwTAorCisvLyBwbGxDTEtfUFdSTUdUX0NOVEwKKyNkZWZpbmUJQ0xLX1BXUk1HVF9DTlRMX19NUExMX1BXUk1HVF9PRkZfX1NISUZUICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZQlDTEtfUFdSTUdUX0NOVExfX1NQTExfUFdSTUdUX09GRl9fU0hJRlQgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lCUNMS19QV1JNR1RfQ05UTF9fUFBMTF9QV1JNR1RfT0ZGX19TSElGVCAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUJQ0xLX1BXUk1HVF9DTlRMX19QMlBMTF9QV1JNR1RfT0ZGX19TSElGVCAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZQlDTEtfUFdSTUdUX0NOVExfX01DTEtfVFVSTk9GRl9fU0hJRlQgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lCUNMS19QV1JNR1RfQ05UTF9fU0NMS19UVVJOT0ZGX19TSElGVCAgICAgICAgICAgIDB4MDAwMDAwMDUKKyNkZWZpbmUJQ0xLX1BXUk1HVF9DTlRMX19QQ0xLX1RVUk5PRkZfX1NISUZUICAgICAgICAgICAgMHgwMDAwMDAwNgorI2RlZmluZQlDTEtfUFdSTUdUX0NOVExfX1AyQ0xLX1RVUk5PRkZfX1NISUZUICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lCUNMS19QV1JNR1RfQ05UTF9fTUNfQ0hfTU9ERV9fU0hJRlQgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUJQ0xLX1BXUk1HVF9DTlRMX19URVNUX01PREVfX1NISUZUICAgICAgICAgICAgICAgMHgwMDAwMDAwOQorI2RlZmluZQlDTEtfUFdSTUdUX0NOVExfX0dMT0JBTF9QTUFOX0VOX19TSElGVCAgICAgICAgICAweDAwMDAwMDBhCisjZGVmaW5lCUNMS19QV1JNR1RfQ05UTF9fRU5HSU5FX0RZTkNMS19NT0RFX19TSElGVCAgICAgIDB4MDAwMDAwMGMKKyNkZWZpbmUJQ0xLX1BXUk1HVF9DTlRMX19BQ1RJVkVfSElMT19MQVRfX1NISUZUICAgICAgICAgMHgwMDAwMDAwZAorI2RlZmluZQlDTEtfUFdSTUdUX0NOVExfX0RJU1BfRFlOX1NUT1BfTEFUX19TSElGVCAgICAgICAweDAwMDAwMDBmCisjZGVmaW5lCUNMS19QV1JNR1RfQ05UTF9fTUNfQlVTWV9fU0hJRlQgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUJQ0xLX1BXUk1HVF9DTlRMX19NQ19JTlRfQ05UTF9fU0hJRlQgICAgICAgICAgICAgMHgwMDAwMDAxMQorI2RlZmluZQlDTEtfUFdSTUdUX0NOVExfX01DX1NXSVRDSF9fU0hJRlQgICAgICAgICAgICAgICAweDAwMDAwMDEyCisjZGVmaW5lCUNMS19QV1JNR1RfQ05UTF9fRExMX1JFQURZX19TSElGVCAgICAgICAgICAgICAgIDB4MDAwMDAwMTMKKyNkZWZpbmUJQ0xLX1BXUk1HVF9DTlRMX19ESVNQX1BNX19TSElGVCAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNAorI2RlZmluZQlDTEtfUFdSTUdUX0NOVExfX0RZTl9TVE9QX01PREVfX1NISUZUICAgICAgICAgICAweDAwMDAwMDE1CisjZGVmaW5lCUNMS19QV1JNR1RfQ05UTF9fQ0dfTk8xX0RFQlVHX19TSElGVCAgICAgICAgICAgIDB4MDAwMDAwMTgKKyNkZWZpbmUJQ0xLX1BXUk1HVF9DTlRMX19UVlBMTF9QV1JNR1RfT0ZGX19TSElGVCAgICAgICAgMHgwMDAwMDAxZQorI2RlZmluZQlDTEtfUFdSTUdUX0NOVExfX1RWQ0xLX1RVUk5PRkZfX1NISUZUICAgICAgICAgICAweDAwMDAwMDFmCisKKy8vIHBsbFAyUExMX0NOVEwKKyNkZWZpbmUgUDJQTExfQ05UTF9fUDJQTExfUkVTRVRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMUwKKyNkZWZpbmUgUDJQTExfQ05UTF9fUDJQTExfUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMUwKKyNkZWZpbmUgUDJQTExfQ05UTF9fUDJQTExfU0xFRVBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMkwKKyNkZWZpbmUgUDJQTExfQ05UTF9fUDJQTExfU0xFRVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMkwKKyNkZWZpbmUgUDJQTExfQ05UTF9fUDJQTExfVFNUX0VOX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNEwKKyNkZWZpbmUgUDJQTExfQ05UTF9fUDJQTExfVFNUX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNEwKKyNkZWZpbmUgUDJQTExfQ05UTF9fUDJQTExfUkVGQ0xLX1NFTF9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMEwKKyNkZWZpbmUgUDJQTExfQ05UTF9fUDJQTExfUkVGQ0xLX1NFTCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMEwKKyNkZWZpbmUgUDJQTExfQ05UTF9fUDJQTExfRkJDTEtfU0VMX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMEwKKyNkZWZpbmUgUDJQTExfQ05UTF9fUDJQTExfRkJDTEtfU0VMICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMEwKKyNkZWZpbmUgUDJQTExfQ05UTF9fUDJQTExfVENQT0ZGX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MEwKKyNkZWZpbmUgUDJQTExfQ05UTF9fUDJQTExfVENQT0ZGICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MEwKKyNkZWZpbmUgUDJQTExfQ05UTF9fUDJQTExfVFZDT01BWF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MEwKKyNkZWZpbmUgUDJQTExfQ05UTF9fUDJQTExfVFZDT01BWCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MEwKKyNkZWZpbmUgUDJQTExfQ05UTF9fUDJQTExfUENQX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDcwMEwKKyNkZWZpbmUgUDJQTExfQ05UTF9fUDJQTExfUFZHX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMzgwMEwKKyNkZWZpbmUgUDJQTExfQ05UTF9fUDJQTExfUERDX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYzAwMEwKKyNkZWZpbmUgUDJQTExfQ05UTF9fUDJQTExfQVRPTUlDX1VQREFURV9FTl9NQVNLICAgICAgICAgICAgMHgwMDAxMDAwMEwKKyNkZWZpbmUgUDJQTExfQ05UTF9fUDJQTExfQVRPTUlDX1VQREFURV9FTiAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMEwKKyNkZWZpbmUgUDJQTExfQ05UTF9fUDJQTExfQVRPTUlDX1VQREFURV9TWU5DX01BU0sgICAgICAgICAgMHgwMDA0MDAwMEwKKyNkZWZpbmUgUDJQTExfQ05UTF9fUDJQTExfQVRPTUlDX1VQREFURV9TWU5DICAgICAgICAgICAgICAgMHgwMDA0MDAwMEwKKyNkZWZpbmUgUDJQTExfQ05UTF9fUDJQTExfRElTQUJMRV9BVVRPX1JFU0VUX01BU0sgICAgICAgICAgMHgwMDA4MDAwMEwKKyNkZWZpbmUgUDJQTExfQ05UTF9fUDJQTExfRElTQUJMRV9BVVRPX1JFU0VUICAgICAgICAgICAgICAgMHgwMDA4MDAwMEwKKworLy8gcGxsUElYQ0xLU19DTlRMCisjZGVmaW5lCVBJWENMS1NfQ05UTF9fUElYMkNMS19TUkNfU0VMX19TSElGVCAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUJUElYQ0xLU19DTlRMX19QSVgyQ0xLX0lOVkVSVF9fU0hJRlQgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZQlQSVhDTEtTX0NOVExfX1BJWDJDTEtfU1JDX0lOVkVSVF9fU0hJRlQgICAgICAgICAgICAweDAwMDAwMDA1CisjZGVmaW5lCVBJWENMS1NfQ05UTF9fUElYMkNMS19BTFdBWVNfT05iX19TSElGVCAgICAgICAgICAgIDB4MDAwMDAwMDYKKyNkZWZpbmUJUElYQ0xLU19DTlRMX19QSVgyQ0xLX0RBQ19BTFdBWVNfT05iX19TSElGVCAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZQlQSVhDTEtTX0NOVExfX1BJWENMS19UVl9TUkNfU0VMX19TSElGVCAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lCVBJWENMS1NfQ05UTF9fUElYQ0xLX0JMRU5EX0FMV0FZU19PTmJfX1NISUZUICAgICAgIDB4MDAwMDAwMGIKKyNkZWZpbmUJUElYQ0xLU19DTlRMX19QSVhDTEtfR1ZfQUxXQVlTX09OYl9fU0hJRlQgICAgICAgICAgMHgwMDAwMDAwYworI2RlZmluZQlQSVhDTEtTX0NOVExfX1BJWENMS19ESUdfVE1EU19BTFdBWVNfT05iX19TSElGVCAgICAweDAwMDAwMDBkCisjZGVmaW5lCVBJWENMS1NfQ05UTF9fUElYQ0xLX0xWRFNfQUxXQVlTX09OYl9fU0hJRlQgICAgICAgIDB4MDAwMDAwMGUKKyNkZWZpbmUJUElYQ0xLU19DTlRMX19QSVhDTEtfVE1EU19BTFdBWVNfT05iX19TSElGVCAgICAgICAgMHgwMDAwMDAwZgorCisKKy8vIHBsbFBJWENMS1NfQ05UTAorI2RlZmluZSBQSVhDTEtTX0NOVExfX1BJWDJDTEtfU1JDX1NFTF9NQVNLICAgICAgICAgICAgICAgICAweDAwMDAwMDAzTAorI2RlZmluZSBQSVhDTEtTX0NOVExfX1BJWDJDTEtfSU5WRVJUICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwTAorI2RlZmluZSBQSVhDTEtTX0NOVExfX1BJWDJDTEtfU1JDX0lOVkVSVCAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwTAorI2RlZmluZSBQSVhDTEtTX0NOVExfX1BJWDJDTEtfQUxXQVlTX09OYiAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwTAorI2RlZmluZSBQSVhDTEtTX0NOVExfX1BJWDJDTEtfREFDX0FMV0FZU19PTmIgICAgICAgICAgICAgICAweDAwMDAwMDgwTAorI2RlZmluZSBQSVhDTEtTX0NOVExfX1BJWENMS19UVl9TUkNfU0VMICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwTAorI2RlZmluZSBQSVhDTEtTX0NOVExfX1BJWENMS19CTEVORF9BTFdBWVNfT05iICAgICAgICAgICAgICAweDAwMDAwODAwTAorI2RlZmluZSBQSVhDTEtTX0NOVExfX1BJWENMS19HVl9BTFdBWVNfT05iICAgICAgICAgICAgICAgICAweDAwMDAxMDAwTAorI2RlZmluZSBQSVhDTEtTX0NOVExfX1BJWENMS19ESUdfVE1EU19BTFdBWVNfT05iICAgICAgICAgICAweDAwMDAyMDAwTAorI2RlZmluZSBQSVhDTEtTX0NOVExfX1BJWENMS19MVkRTX0FMV0FZU19PTmIgICAgICAgICAgICAgICAweDAwMDA0MDAwTAorI2RlZmluZSBQSVhDTEtTX0NOVExfX1BJWENMS19UTURTX0FMV0FZU19PTmIgICAgICAgICAgICAgICAweDAwMDA4MDAwTAorI2RlZmluZSBQSVhDTEtTX0NOVExfX0RJU1BfVFZPVVRfUElYQ0xLX1RWX0FMV0FZU19PTmIgICAgICAoMSA8PCA5KQorI2RlZmluZSBQSVhDTEtTX0NOVExfX1IzMDBfRFZPQ0xLX0FMV0FZU19PTmIgICAgICAgICAgICAgICAoMSA8PCAxMCkKKyNkZWZpbmUgUElYQ0xLU19DTlRMX19SMzAwX1BJWENMS19EVk9fQUxXQVlTX09OYiAgICAgICAgICAgKDEgPDwgMTMpCisjZGVmaW5lIFBJWENMS1NfQ05UTF9fUjMwMF9QSVhDTEtfVFJBTlNfQUxXQVlTX09OYiAgICAgICAgICgxIDw8IDE2KQorI2RlZmluZSBQSVhDTEtTX0NOVExfX1IzMDBfUElYQ0xLX1RWT19BTFdBWVNfT05iICAgICAgICAgICAoMSA8PCAxNykKKyNkZWZpbmUgUElYQ0xLU19DTlRMX19SMzAwX1AyRzJDTEtfQUxXQVlTX09OYiAgICAgICAgICAgICAgKDEgPDwgMTgpCisjZGVmaW5lIFBJWENMS1NfQ05UTF9fUjMwMF9QMkcyQ0xLX0RBQ19BTFdBWVNfT05iICAgICAgICAgICgxIDw8IDE5KQorI2RlZmluZSBQSVhDTEtTX0NOVExfX1IzMDBfRElTUF9EQUNfUElYQ0xLX0RBQzJfQkxBTktfT0ZGICAoMSA8PCAyMykKKworCisvLyBwbGxQMlBMTF9ESVZfMAorI2RlZmluZSBQMlBMTF9ESVZfMF9fUDJQTExfRkJfRElWX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMDAwN2ZmTAorI2RlZmluZSBQMlBMTF9ESVZfMF9fUDJQTExfQVRPTUlDX1VQREFURV9XX01BU0sgICAgICAgICAgICAweDAwMDA4MDAwTAorI2RlZmluZSBQMlBMTF9ESVZfMF9fUDJQTExfQVRPTUlDX1VQREFURV9XICAgICAgICAgICAgICAgICAweDAwMDA4MDAwTAorI2RlZmluZSBQMlBMTF9ESVZfMF9fUDJQTExfQVRPTUlDX1VQREFURV9SX01BU0sgICAgICAgICAgICAweDAwMDA4MDAwTAorI2RlZmluZSBQMlBMTF9ESVZfMF9fUDJQTExfQVRPTUlDX1VQREFURV9SICAgICAgICAgICAgICAgICAweDAwMDA4MDAwTAorI2RlZmluZSBQMlBMTF9ESVZfMF9fUDJQTExfUE9TVF9ESVZfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDcwMDAwTAorCisvLyBwbGxTQ0xLX0NOVEwKKyNkZWZpbmUgU0NMS19DTlRMX19TQ0xLX1NSQ19TRUxfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwN0wKKyNkZWZpbmUgU0NMS19DTlRMX19DUF9NQVhfRFlOX1NUT1BfTEFUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOEwKKyNkZWZpbmUgU0NMS19DTlRMX19IRFBfTUFYX0RZTl9TVE9QX0xBVCAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMEwKKyNkZWZpbmUgU0NMS19DTlRMX19UVl9NQVhfRFlOX1NUT1BfTEFUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMEwKKyNkZWZpbmUgU0NMS19DTlRMX19FMl9NQVhfRFlOX1NUT1BfTEFUICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MEwKKyNkZWZpbmUgU0NMS19DTlRMX19TRV9NQVhfRFlOX1NUT1BfTEFUICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MEwKKyNkZWZpbmUgU0NMS19DTlRMX19JRENUX01BWF9EWU5fU1RPUF9MQVQgICAgICAgICAgICAgICAgMHgwMDAwMDEwMEwKKyNkZWZpbmUgU0NMS19DTlRMX19WSVBfTUFYX0RZTl9TVE9QX0xBVCAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMEwKKyNkZWZpbmUgU0NMS19DTlRMX19SRV9NQVhfRFlOX1NUT1BfTEFUICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMEwKKyNkZWZpbmUgU0NMS19DTlRMX19QQl9NQVhfRFlOX1NUT1BfTEFUICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMEwKKyNkZWZpbmUgU0NMS19DTlRMX19UQU1fTUFYX0RZTl9TVE9QX0xBVCAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMEwKKyNkZWZpbmUgU0NMS19DTlRMX19URE1fTUFYX0RZTl9TVE9QX0xBVCAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMEwKKyNkZWZpbmUgU0NMS19DTlRMX19SQl9NQVhfRFlOX1NUT1BfTEFUICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMEwKKyNkZWZpbmUgU0NMS19DTlRMX19EWU5fU1RPUF9MQVRfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDdmZjgKKyNkZWZpbmUgU0NMS19DTlRMX19GT1JDRV9ESVNQMiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMEwKKyNkZWZpbmUgU0NMS19DTlRMX19GT1JDRV9DUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMEwKKyNkZWZpbmUgU0NMS19DTlRMX19GT1JDRV9IRFAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMEwKKyNkZWZpbmUgU0NMS19DTlRMX19GT1JDRV9ESVNQMSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMEwKKyNkZWZpbmUgU0NMS19DTlRMX19GT1JDRV9UT1AgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMEwKKyNkZWZpbmUgU0NMS19DTlRMX19GT1JDRV9FMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMEwKKyNkZWZpbmUgU0NMS19DTlRMX19GT1JDRV9TRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMEwKKyNkZWZpbmUgU0NMS19DTlRMX19GT1JDRV9JRENUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMEwKKyNkZWZpbmUgU0NMS19DTlRMX19GT1JDRV9WSVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwMDAwMEwKKyNkZWZpbmUgU0NMS19DTlRMX19GT1JDRV9SRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMEwKKyNkZWZpbmUgU0NMS19DTlRMX19GT1JDRV9QQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMEwKKyNkZWZpbmUgU0NMS19DTlRMX19GT1JDRV9UQU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMEwKKyNkZWZpbmUgU0NMS19DTlRMX19GT1JDRV9URE0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwMDAwMEwKKyNkZWZpbmUgU0NMS19DTlRMX19GT1JDRV9SQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMEwKKyNkZWZpbmUgU0NMS19DTlRMX19GT1JDRV9UVl9TQ0xLICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMEwKKyNkZWZpbmUgU0NMS19DTlRMX19GT1JDRV9TVUJQSUMgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMEwKKyNkZWZpbmUgU0NMS19DTlRMX19GT1JDRV9PVjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMEwKKyNkZWZpbmUgU0NMS19DTlRMX19SMzAwX0ZPUkNFX1ZBUCAgICAgICAgICAgICAgICAgICAgICAgKDE8PDIxKQorI2RlZmluZSBTQ0xLX0NOVExfX1IzMDBfRk9SQ0VfU1IgICAgICAgICAgICAgICAgICAgICAgICAoMTw8MjUpCisjZGVmaW5lIFNDTEtfQ05UTF9fUjMwMF9GT1JDRV9QWCAgICAgICAgICAgICAgICAgICAgICAgICgxPDwyNikKKyNkZWZpbmUgU0NMS19DTlRMX19SMzAwX0ZPUkNFX1RYICAgICAgICAgICAgICAgICAgICAgICAgKDE8PDI3KQorI2RlZmluZSBTQ0xLX0NOVExfX1IzMDBfRk9SQ0VfVVMgICAgICAgICAgICAgICAgICAgICAgICAoMTw8MjgpCisjZGVmaW5lIFNDTEtfQ05UTF9fUjMwMF9GT1JDRV9TVSAgICAgICAgICAgICAgICAgICAgICAgICgxPDwzMCkKKyNkZWZpbmUgU0NMS19DTlRMX19GT1JDRU9OX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZmZmODAwMEwKKworLy8gcGxsU0NMS19DTlRMMgorI2RlZmluZSBTQ0xLX0NOVEwyX19SMzAwX1RDTF9NQVhfRFlOX1NUT1BfTEFUICAgICAgICAgICAoMTw8MTApCisjZGVmaW5lIFNDTEtfQ05UTDJfX1IzMDBfR0FfTUFYX0RZTl9TVE9QX0xBVCAgICAgICAgICAgICgxPDwxMSkKKyNkZWZpbmUgU0NMS19DTlRMMl9fUjMwMF9DQkFfTUFYX0RZTl9TVE9QX0xBVCAgICAgICAgICAgKDE8PDEyKQorI2RlZmluZSBTQ0xLX0NOVEwyX19SMzAwX0ZPUkNFX1RDTCAgICAgICAgICAgICAgICAgICAgICAoMTw8MTMpCisjZGVmaW5lIFNDTEtfQ05UTDJfX1IzMDBfRk9SQ0VfQ0JBICAgICAgICAgICAgICAgICAgICAgICgxPDwxNCkKKyNkZWZpbmUgU0NMS19DTlRMMl9fUjMwMF9GT1JDRV9HQSAgICAgICAgICAgICAgICAgICAgICAgKDE8PDE1KQorCisvLyBTQ0xLX01PUkVfQ05UTAorI2RlZmluZSBTQ0xLX01PUkVfQ05UTF9fRElTUFJFR1NfTUFYX0RZTl9TVE9QX0xBVCAgICAgICAgICAweDAwMDAwMDAxTAorI2RlZmluZSBTQ0xLX01PUkVfQ05UTF9fTUNfR1VJX01BWF9EWU5fU1RPUF9MQVQgICAgICAgICAgICAweDAwMDAwMDAyTAorI2RlZmluZSBTQ0xLX01PUkVfQ05UTF9fTUNfSE9TVF9NQVhfRFlOX1NUT1BfTEFUICAgICAgICAgICAweDAwMDAwMDA0TAorI2RlZmluZSBTQ0xLX01PUkVfQ05UTF9fRk9SQ0VfRElTUFJFR1MgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwTAorI2RlZmluZSBTQ0xLX01PUkVfQ05UTF9fRk9SQ0VfTUNfR1VJICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwTAorI2RlZmluZSBTQ0xLX01PUkVfQ05UTF9fRk9SQ0VfTUNfSE9TVCAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwTAorI2RlZmluZSBTQ0xLX01PUkVfQ05UTF9fU1RPUF9TQ0xLX0VOICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwTAorI2RlZmluZSBTQ0xLX01PUkVfQ05UTF9fU1RPUF9TQ0xLX0EgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwTAorI2RlZmluZSBTQ0xLX01PUkVfQ05UTF9fU1RPUF9TQ0xLX0IgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwTAorI2RlZmluZSBTQ0xLX01PUkVfQ05UTF9fU1RPUF9TQ0xLX0MgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwTAorI2RlZmluZSBTQ0xLX01PUkVfQ05UTF9fSEFMRl9TUEVFRF9TQ0xLICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwTAorI2RlZmluZSBTQ0xLX01PUkVfQ05UTF9fSU9fQ0dfVk9MVEFHRV9EUk9QICAgICAgICAgICAgICAgICAweDAwMDIwMDAwTAorI2RlZmluZSBTQ0xLX01PUkVfQ05UTF9fVFZGQl9TT0ZUX1JFU0VUICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwTAorI2RlZmluZSBTQ0xLX01PUkVfQ05UTF9fVk9MVEFHRV9EUk9QX1NZTkMgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwTAorI2RlZmluZSBTQ0xLX01PUkVfQ05UTF9fSURMRV9ERUxBWV9IQUxGX1NDTEsgICAgICAgICAgICAgICAweDAwNDAwMDAwTAorI2RlZmluZSBTQ0xLX01PUkVfQ05UTF9fQUdQX0JVU1lfSEFMRl9TQ0xLICAgICAgICAgICAgICAgICAweDAwODAwMDAwTAorI2RlZmluZSBTQ0xLX01PUkVfQ05UTF9fQ0dfU1BBUkVfUkRfQ19NQVNLICAgICAgICAgICAgICAgICAweGZmMDAwMDAwTAorI2RlZmluZSBTQ0xLX01PUkVfQ05UTF9fRk9SQ0VPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNzAwTAorCisvLyBNQ0xLX0NOVEwKKyNkZWZpbmUgTUNMS19DTlRMX19NQ0xLQV9TUkNfU0VMX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwN0wKKyNkZWZpbmUgTUNMS19DTlRMX19ZQ0xLQV9TUkNfU0VMX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3MEwKKyNkZWZpbmUgTUNMS19DTlRMX19NQ0xLQl9TUkNfU0VMX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAwMDcwMEwKKyNkZWZpbmUgTUNMS19DTlRMX19ZQ0xLQl9TUkNfU0VMX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAwNzAwMEwKKyNkZWZpbmUgTUNMS19DTlRMX19GT1JDRV9NQ0xLQV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMEwKKyNkZWZpbmUgTUNMS19DTlRMX19GT1JDRV9NQ0xLQSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMEwKKyNkZWZpbmUgTUNMS19DTlRMX19GT1JDRV9NQ0xLQl9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMEwKKyNkZWZpbmUgTUNMS19DTlRMX19GT1JDRV9NQ0xLQiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMEwKKyNkZWZpbmUgTUNMS19DTlRMX19GT1JDRV9ZQ0xLQV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMEwKKyNkZWZpbmUgTUNMS19DTlRMX19GT1JDRV9ZQ0xLQSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMEwKKyNkZWZpbmUgTUNMS19DTlRMX19GT1JDRV9ZQ0xLQl9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMEwKKyNkZWZpbmUgTUNMS19DTlRMX19GT1JDRV9ZQ0xLQiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMEwKKyNkZWZpbmUgTUNMS19DTlRMX19GT1JDRV9NQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMEwKKyNkZWZpbmUgTUNMS19DTlRMX19GT1JDRV9NQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMEwKKyNkZWZpbmUgTUNMS19DTlRMX19GT1JDRV9BSUNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMEwKKyNkZWZpbmUgTUNMS19DTlRMX19GT1JDRV9BSUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMEwKKyNkZWZpbmUgTUNMS19DTlRMX19NUkRDS0EwX1NPVVRTRUxfTUFTSyAgICAgICAgICAgICAgICAgMHgwMzAwMDAwMEwKKyNkZWZpbmUgTUNMS19DTlRMX19NUkRDS0ExX1NPVVRTRUxfTUFTSyAgICAgICAgICAgICAgICAgMHgwYzAwMDAwMEwKKyNkZWZpbmUgTUNMS19DTlRMX19NUkRDS0IwX1NPVVRTRUxfTUFTSyAgICAgICAgICAgICAgICAgMHgzMDAwMDAwMEwKKyNkZWZpbmUgTUNMS19DTlRMX19NUkRDS0IxX1NPVVRTRUxfTUFTSyAgICAgICAgICAgICAgICAgMHhjMDAwMDAwMEwKKyNkZWZpbmUgTUNMS19DTlRMX19SMzAwX0RJU0FCTEVfTUNfTUNMS0EgICAgICAgICAgICAgICAgKDEgPDwgMjEpCisjZGVmaW5lIE1DTEtfQ05UTF9fUjMwMF9ESVNBQkxFX01DX01DTEtCICAgICAgICAgICAgICAgICgxIDw8IDIxKQorCisvLyBNQ0xLX01JU0MKKyNkZWZpbmUgTUNMS19NSVNDX19TQ0xLX1NPVVJDRURfRlJPTV9NUExMX1NFTF9NQVNLICAgICAgICAgMHgwMDAwMDAwM0wKKyNkZWZpbmUgTUNMS19NSVNDX19NQ0xLX0ZST01fU1BMTF9ESVZfU0VMX01BU0sgICAgICAgICAgICAgMHgwMDAwMDAwNEwKKyNkZWZpbmUgTUNMS19NSVNDX19NQ0xLX0ZST01fU1BMTF9ESVZfU0VMICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNEwKKyNkZWZpbmUgTUNMS19NSVNDX19FTkFCTEVfU0NMS19GUk9NX01QTExfTUFTSyAgICAgICAgICAgICAgMHgwMDAwMDAwOEwKKyNkZWZpbmUgTUNMS19NSVNDX19FTkFCTEVfU0NMS19GUk9NX01QTEwgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOEwKKyNkZWZpbmUgTUNMS19NSVNDX19NUExMX01PREVBX01PREVDX0hXX1NFTF9FTl9NQVNLICAgICAgICAgMHgwMDAwMDAxMEwKKyNkZWZpbmUgTUNMS19NSVNDX19NUExMX01PREVBX01PREVDX0hXX1NFTF9FTiAgICAgICAgICAgICAgMHgwMDAwMDAxMEwKKyNkZWZpbmUgTUNMS19NSVNDX19ETExfUkVBRFlfTEFUX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMEwKKyNkZWZpbmUgTUNMS19NSVNDX19ETExfUkVBRFlfTEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMEwKKyNkZWZpbmUgTUNMS19NSVNDX19NQ19NQ0xLX01BWF9EWU5fU1RPUF9MQVRfTUFTSyAgICAgICAgICAgMHgwMDAwMTAwMEwKKyNkZWZpbmUgTUNMS19NSVNDX19NQ19NQ0xLX01BWF9EWU5fU1RPUF9MQVQgICAgICAgICAgICAgICAgMHgwMDAwMTAwMEwKKyNkZWZpbmUgTUNMS19NSVNDX19JT19NQ0xLX01BWF9EWU5fU1RPUF9MQVRfTUFTSyAgICAgICAgICAgMHgwMDAwMjAwMEwKKyNkZWZpbmUgTUNMS19NSVNDX19JT19NQ0xLX01BWF9EWU5fU1RPUF9MQVQgICAgICAgICAgICAgICAgMHgwMDAwMjAwMEwKKyNkZWZpbmUgTUNMS19NSVNDX19NQ19NQ0xLX0RZTl9FTkFCTEVfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMEwKKyNkZWZpbmUgTUNMS19NSVNDX19NQ19NQ0xLX0RZTl9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMEwKKyNkZWZpbmUgTUNMS19NSVNDX19JT19NQ0xLX0RZTl9FTkFCTEVfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAwODAwMEwKKyNkZWZpbmUgTUNMS19NSVNDX19JT19NQ0xLX0RZTl9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMEwKKyNkZWZpbmUgTUNMS19NSVNDX19DR01fQ0xLX1RPX09VVFBJTl9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMEwKKyNkZWZpbmUgTUNMS19NSVNDX19DR01fQ0xLX1RPX09VVFBJTiAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMEwKKyNkZWZpbmUgTUNMS19NSVNDX19DTEtfT1JfQ09VTlRfU0VMX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMEwKKyNkZWZpbmUgTUNMS19NSVNDX19DTEtfT1JfQ09VTlRfU0VMICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMEwKKyNkZWZpbmUgTUNMS19NSVNDX19FTl9NQ0xLX1RSSVNUQVRFX0lOX1NVU1BFTkRfTUFTSyAgICAgICAgMHgwMDA0MDAwMEwKKyNkZWZpbmUgTUNMS19NSVNDX19FTl9NQ0xLX1RSSVNUQVRFX0lOX1NVU1BFTkQgICAgICAgICAgICAgMHgwMDA0MDAwMEwKKyNkZWZpbmUgTUNMS19NSVNDX19DR01fU1BBUkVfUkRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDMwMDAwMEwKKyNkZWZpbmUgTUNMS19NSVNDX19DR01fU1BBUkVfQV9SRF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMGMwMDAwMEwKKyNkZWZpbmUgTUNMS19NSVNDX19UQ0xLX1RPX1lDTEtCX0VOX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMEwKKyNkZWZpbmUgTUNMS19NSVNDX19UQ0xLX1RPX1lDTEtCX0VOICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMEwKKyNkZWZpbmUgTUNMS19NSVNDX19DR01fU1BBUkVfQV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgMHgwZTAwMDAwMEwKKworLy8gVkNMS19FQ1BfQ05UTAorI2RlZmluZSBWQ0xLX0VDUF9DTlRMX19WQ0xLX1NSQ19TRUxfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzTAorI2RlZmluZSBWQ0xLX0VDUF9DTlRMX19WQ0xLX0lOVkVSVCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwTAorI2RlZmluZSBWQ0xLX0VDUF9DTlRMX19QSVhDTEtfU1JDX0lOVkVSVCAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwTAorI2RlZmluZSBWQ0xLX0VDUF9DTlRMX19QSVhDTEtfQUxXQVlTX09OYiAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwTAorI2RlZmluZSBWQ0xLX0VDUF9DTlRMX19QSVhDTEtfREFDX0FMV0FZU19PTmIgICAgICAgICAgICAgICAweDAwMDAwMDgwTAorI2RlZmluZSBWQ0xLX0VDUF9DTlRMX19FQ1BfRElWX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwTAorI2RlZmluZSBWQ0xLX0VDUF9DTlRMX19FQ1BfRk9SQ0VfT04gICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwTAorI2RlZmluZSBWQ0xLX0VDUF9DTlRMX19TVUJDTEtfRk9SQ0VfT04gICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwTAorI2RlZmluZSBWQ0xLX0VDUF9DTlRMX19SMzAwX0RJU1BfREFDX1BJWENMS19EQUNfQkxBTktfT0ZGICAoMTw8MjMpCisKKy8vIFBMTF9QV1JNR1RfQ05UTAorI2RlZmluZSBQTExfUFdSTUdUX0NOVExfX01QTExfVFVSTk9GRl9NQVNLICAgICAgICAgICAgICAgICAweDAwMDAwMDAxTAorI2RlZmluZSBQTExfUFdSTUdUX0NOVExfX01QTExfVFVSTk9GRiAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxTAorI2RlZmluZSBQTExfUFdSTUdUX0NOVExfX1NQTExfVFVSTk9GRl9NQVNLICAgICAgICAgICAgICAgICAweDAwMDAwMDAyTAorI2RlZmluZSBQTExfUFdSTUdUX0NOVExfX1NQTExfVFVSTk9GRiAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyTAorI2RlZmluZSBQTExfUFdSTUdUX0NOVExfX1BQTExfVFVSTk9GRl9NQVNLICAgICAgICAgICAgICAgICAweDAwMDAwMDA0TAorI2RlZmluZSBQTExfUFdSTUdUX0NOVExfX1BQTExfVFVSTk9GRiAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0TAorI2RlZmluZSBQTExfUFdSTUdUX0NOVExfX1AyUExMX1RVUk5PRkZfTUFTSyAgICAgICAgICAgICAgICAweDAwMDAwMDA4TAorI2RlZmluZSBQTExfUFdSTUdUX0NOVExfX1AyUExMX1RVUk5PRkYgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4TAorI2RlZmluZSBQTExfUFdSTUdUX0NOVExfX1RWUExMX1RVUk5PRkZfTUFTSyAgICAgICAgICAgICAgICAweDAwMDAwMDEwTAorI2RlZmluZSBQTExfUFdSTUdUX0NOVExfX1RWUExMX1RVUk5PRkYgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwTAorI2RlZmluZSBQTExfUFdSTUdUX0NOVExfX0FHUENMS19EWU5fU1RPUF9MQVRfTUFTSyAgICAgICAgICAweDAwMDAwMWUwTAorI2RlZmluZSBQTExfUFdSTUdUX0NOVExfX0FQTV9QT1dFUl9TVEFURV9NQVNLICAgICAgICAgICAgICAweDAwMDAwNjAwTAorI2RlZmluZSBQTExfUFdSTUdUX0NOVExfX0FQTV9QV1JTVEFURV9SRF9NQVNLICAgICAgICAgICAgICAweDAwMDAxODAwTAorI2RlZmluZSBQTExfUFdSTUdUX0NOVExfX1BNX01PREVfU0VMX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwTAorI2RlZmluZSBQTExfUFdSTUdUX0NOVExfX1BNX01PREVfU0VMICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwTAorI2RlZmluZSBQTExfUFdSTUdUX0NOVExfX0VOX1BXUlNFUV9ET05FX0NPTkRfTUFTSyAgICAgICAgICAweDAwMDA0MDAwTAorI2RlZmluZSBQTExfUFdSTUdUX0NOVExfX0VOX1BXUlNFUV9ET05FX0NPTkQgICAgICAgICAgICAgICAweDAwMDA0MDAwTAorI2RlZmluZSBQTExfUFdSTUdUX0NOVExfX0VOX0RJU1BfUEFSS0VEX0NPTkRfTUFTSyAgICAgICAgICAweDAwMDA4MDAwTAorI2RlZmluZSBQTExfUFdSTUdUX0NOVExfX0VOX0RJU1BfUEFSS0VEX0NPTkQgICAgICAgICAgICAgICAweDAwMDA4MDAwTAorI2RlZmluZSBQTExfUFdSTUdUX0NOVExfX01PQklMRV9TVV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwTAorI2RlZmluZSBQTExfUFdSTUdUX0NOVExfX01PQklMRV9TVSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwTAorI2RlZmluZSBQTExfUFdSTUdUX0NOVExfX1NVX1NDTEtfVVNFX0JDTEtfTUFTSyAgICAgICAgICAgICAweDAwMDIwMDAwTAorI2RlZmluZSBQTExfUFdSTUdUX0NOVExfX1NVX1NDTEtfVVNFX0JDTEsgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwTAorI2RlZmluZSBQTExfUFdSTUdUX0NOVExfX1NVX01DTEtfVVNFX0JDTEtfTUFTSyAgICAgICAgICAgICAweDAwMDQwMDAwTAorI2RlZmluZSBQTExfUFdSTUdUX0NOVExfX1NVX01DTEtfVVNFX0JDTEsgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwTAorI2RlZmluZSBQTExfUFdSTUdUX0NOVExfX1NVX1NVU1RBSU5fRElTQUJMRV9NQVNLICAgICAgICAgICAweDAwMDgwMDAwTAorI2RlZmluZSBQTExfUFdSTUdUX0NOVExfX1NVX1NVU1RBSU5fRElTQUJMRSAgICAgICAgICAgICAgICAweDAwMDgwMDAwTAorI2RlZmluZSBQTExfUFdSTUdUX0NOVExfX1RDTF9CWVBBU1NfRElTQUJMRV9NQVNLICAgICAgICAgICAweDAwMTAwMDAwTAorI2RlZmluZSBQTExfUFdSTUdUX0NOVExfX1RDTF9CWVBBU1NfRElTQUJMRSAgICAgICAgICAgICAgICAweDAwMTAwMDAwTAorI2RlZmluZSBQTExfUFdSTUdUX0NOVExfX1RDTF9DTE9DS19DVElWRV9SRF9NQVNLICAgICAgICAgIDB4MDAyMDAwMDBMCisjZGVmaW5lIFBMTF9QV1JNR1RfQ05UTF9fVENMX0NMT0NLX0FDVElWRV9SRCAgICAgICAgICAgICAgIDB4MDAyMDAwMDBMCisjZGVmaW5lIFBMTF9QV1JNR1RfQ05UTF9fQ0dfTk8yX0RFQlVHX01BU0sgICAgICAgICAgICAgICAgIDB4ZmYwMDAwMDBMCisKKy8vIENMS19QV1JNR1RfQ05UTAorI2RlZmluZSBDTEtfUFdSTUdUX0NOVExfX01QTExfUFdSTUdUX09GRl9NQVNLICAgICAgICAgICAweDAwMDAwMDAxTAorI2RlZmluZSBDTEtfUFdSTUdUX0NOVExfX01QTExfUFdSTUdUX09GRiAgICAgICAgICAgICAgICAweDAwMDAwMDAxTAorI2RlZmluZSBDTEtfUFdSTUdUX0NOVExfX1NQTExfUFdSTUdUX09GRl9NQVNLICAgICAgICAgICAweDAwMDAwMDAyTAorI2RlZmluZSBDTEtfUFdSTUdUX0NOVExfX1NQTExfUFdSTUdUX09GRiAgICAgICAgICAgICAgICAweDAwMDAwMDAyTAorI2RlZmluZSBDTEtfUFdSTUdUX0NOVExfX1BQTExfUFdSTUdUX09GRl9NQVNLICAgICAgICAgICAweDAwMDAwMDA0TAorI2RlZmluZSBDTEtfUFdSTUdUX0NOVExfX1BQTExfUFdSTUdUX09GRiAgICAgICAgICAgICAgICAweDAwMDAwMDA0TAorI2RlZmluZSBDTEtfUFdSTUdUX0NOVExfX1AyUExMX1BXUk1HVF9PRkZfTUFTSyAgICAgICAgICAweDAwMDAwMDA4TAorI2RlZmluZSBDTEtfUFdSTUdUX0NOVExfX1AyUExMX1BXUk1HVF9PRkYgICAgICAgICAgICAgICAweDAwMDAwMDA4TAorI2RlZmluZSBDTEtfUFdSTUdUX0NOVExfX01DTEtfVFVSTk9GRl9NQVNLICAgICAgICAgICAgICAweDAwMDAwMDEwTAorI2RlZmluZSBDTEtfUFdSTUdUX0NOVExfX01DTEtfVFVSTk9GRiAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwTAorI2RlZmluZSBDTEtfUFdSTUdUX0NOVExfX1NDTEtfVFVSTk9GRl9NQVNLICAgICAgICAgICAgICAweDAwMDAwMDIwTAorI2RlZmluZSBDTEtfUFdSTUdUX0NOVExfX1NDTEtfVFVSTk9GRiAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwTAorI2RlZmluZSBDTEtfUFdSTUdUX0NOVExfX1BDTEtfVFVSTk9GRl9NQVNLICAgICAgICAgICAgICAweDAwMDAwMDQwTAorI2RlZmluZSBDTEtfUFdSTUdUX0NOVExfX1BDTEtfVFVSTk9GRiAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwTAorI2RlZmluZSBDTEtfUFdSTUdUX0NOVExfX1AyQ0xLX1RVUk5PRkZfTUFTSyAgICAgICAgICAgICAweDAwMDAwMDgwTAorI2RlZmluZSBDTEtfUFdSTUdUX0NOVExfX1AyQ0xLX1RVUk5PRkYgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwTAorI2RlZmluZSBDTEtfUFdSTUdUX0NOVExfX01DX0NIX01PREVfTUFTSyAgICAgICAgICAgICAgICAweDAwMDAwMTAwTAorI2RlZmluZSBDTEtfUFdSTUdUX0NOVExfX01DX0NIX01PREUgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwTAorI2RlZmluZSBDTEtfUFdSTUdUX0NOVExfX1RFU1RfTU9ERV9NQVNLICAgICAgICAgICAgICAgICAweDAwMDAwMjAwTAorI2RlZmluZSBDTEtfUFdSTUdUX0NOVExfX1RFU1RfTU9ERSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwTAorI2RlZmluZSBDTEtfUFdSTUdUX0NOVExfX0dMT0JBTF9QTUFOX0VOX01BU0sgICAgICAgICAgICAweDAwMDAwNDAwTAorI2RlZmluZSBDTEtfUFdSTUdUX0NOVExfX0dMT0JBTF9QTUFOX0VOICAgICAgICAgICAgICAgICAweDAwMDAwNDAwTAorI2RlZmluZSBDTEtfUFdSTUdUX0NOVExfX0VOR0lORV9EWU5DTEtfTU9ERV9NQVNLICAgICAgICAweDAwMDAxMDAwTAorI2RlZmluZSBDTEtfUFdSTUdUX0NOVExfX0VOR0lORV9EWU5DTEtfTU9ERSAgICAgICAgICAgICAweDAwMDAxMDAwTAorI2RlZmluZSBDTEtfUFdSTUdUX0NOVExfX0FDVElWRV9ISUxPX0xBVF9NQVNLICAgICAgICAgICAweDAwMDA2MDAwTAorI2RlZmluZSBDTEtfUFdSTUdUX0NOVExfX0RJU1BfRFlOX1NUT1BfTEFUX01BU0sgICAgICAgICAweDAwMDA4MDAwTAorI2RlZmluZSBDTEtfUFdSTUdUX0NOVExfX0RJU1BfRFlOX1NUT1BfTEFUICAgICAgICAgICAgICAweDAwMDA4MDAwTAorI2RlZmluZSBDTEtfUFdSTUdUX0NOVExfX01DX0JVU1lfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwTAorI2RlZmluZSBDTEtfUFdSTUdUX0NOVExfX01DX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwTAorI2RlZmluZSBDTEtfUFdSTUdUX0NOVExfX01DX0lOVF9DTlRMX01BU0sgICAgICAgICAgICAgICAweDAwMDIwMDAwTAorI2RlZmluZSBDTEtfUFdSTUdUX0NOVExfX01DX0lOVF9DTlRMICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwTAorI2RlZmluZSBDTEtfUFdSTUdUX0NOVExfX01DX1NXSVRDSF9NQVNLICAgICAgICAgICAgICAgICAweDAwMDQwMDAwTAorI2RlZmluZSBDTEtfUFdSTUdUX0NOVExfX01DX1NXSVRDSCAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwTAorI2RlZmluZSBDTEtfUFdSTUdUX0NOVExfX0RMTF9SRUFEWV9NQVNLICAgICAgICAgICAgICAgICAweDAwMDgwMDAwTAorI2RlZmluZSBDTEtfUFdSTUdUX0NOVExfX0RMTF9SRUFEWSAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwTAorI2RlZmluZSBDTEtfUFdSTUdUX0NOVExfX0RJU1BfUE1fTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwTAorI2RlZmluZSBDTEtfUFdSTUdUX0NOVExfX0RJU1BfUE0gICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwTAorI2RlZmluZSBDTEtfUFdSTUdUX0NOVExfX0RZTl9TVE9QX01PREVfTUFTSyAgICAgICAgICAgICAweDAwZTAwMDAwTAorI2RlZmluZSBDTEtfUFdSTUdUX0NOVExfX0NHX05PMV9ERUJVR19NQVNLICAgICAgICAgICAgICAweDNmMDAwMDAwTAorI2RlZmluZSBDTEtfUFdSTUdUX0NOVExfX1RWUExMX1BXUk1HVF9PRkZfTUFTSyAgICAgICAgICAweDQwMDAwMDAwTAorI2RlZmluZSBDTEtfUFdSTUdUX0NOVExfX1RWUExMX1BXUk1HVF9PRkYgICAgICAgICAgICAgICAweDQwMDAwMDAwTAorI2RlZmluZSBDTEtfUFdSTUdUX0NOVExfX1RWQ0xLX1RVUk5PRkZfTUFTSyAgICAgICAgICAgICAweDgwMDAwMDAwTAorI2RlZmluZSBDTEtfUFdSTUdUX0NOVExfX1RWQ0xLX1RVUk5PRkYgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwTAorCisvLyBCVVNfQ05UTDEKKyNkZWZpbmUgQlVTX0NOVEwxX19QTUlfSU9fRElTQUJMRV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMUwKKyNkZWZpbmUgQlVTX0NOVEwxX19QTUlfSU9fRElTQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMUwKKyNkZWZpbmUgQlVTX0NOVEwxX19QTUlfTUVNX0RJU0FCTEVfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMkwKKyNkZWZpbmUgQlVTX0NOVEwxX19QTUlfTUVNX0RJU0FCTEUgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMkwKKyNkZWZpbmUgQlVTX0NOVEwxX19QTUlfQk1fRElTQUJMRV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNEwKKyNkZWZpbmUgQlVTX0NOVEwxX19QTUlfQk1fRElTQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNEwKKyNkZWZpbmUgQlVTX0NOVEwxX19QTUlfSU5UX0RJU0FCTEVfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOEwKKyNkZWZpbmUgQlVTX0NOVEwxX19QTUlfSU5UX0RJU0FCTEUgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOEwKKyNkZWZpbmUgQlVTX0NOVEwxX19CVVMyX0lNTUVESUFURV9QTUlfRElTQUJMRV9NQVNLICAgICAgICAgMHgwMDAwMDAyMEwKKyNkZWZpbmUgQlVTX0NOVEwxX19CVVMyX0lNTUVESUFURV9QTUlfRElTQUJMRSAgICAgICAgICAgICAgMHgwMDAwMDAyMEwKKyNkZWZpbmUgQlVTX0NOVEwxX19CVVMyX1ZHQV9SRUdfQ09IRVJFTkNZX0RJU19NQVNLICAgICAgICAgMHgwMDAwMDEwMEwKKyNkZWZpbmUgQlVTX0NOVEwxX19CVVMyX1ZHQV9SRUdfQ09IRVJFTkNZX0RJUyAgICAgICAgICAgICAgMHgwMDAwMDEwMEwKKyNkZWZpbmUgQlVTX0NOVEwxX19CVVMyX1ZHQV9NRU1fQ09IRVJFTkNZX0RJU19NQVNLICAgICAgICAgMHgwMDAwMDIwMEwKKyNkZWZpbmUgQlVTX0NOVEwxX19CVVMyX1ZHQV9NRU1fQ09IRVJFTkNZX0RJUyAgICAgICAgICAgICAgMHgwMDAwMDIwMEwKKyNkZWZpbmUgQlVTX0NOVEwxX19CVVMyX0hEUF9SRUdfQ09IRVJFTkNZX0RJU19NQVNLICAgICAgICAgMHgwMDAwMDQwMEwKKyNkZWZpbmUgQlVTX0NOVEwxX19CVVMyX0hEUF9SRUdfQ09IRVJFTkNZX0RJUyAgICAgICAgICAgICAgMHgwMDAwMDQwMEwKKyNkZWZpbmUgQlVTX0NOVEwxX19CVVMyX0dVSV9JTklUSUFUT1JfQ09IRVJFTkNZX0RJU19NQVNLICAgMHgwMDAwMDgwMEwKKyNkZWZpbmUgQlVTX0NOVEwxX19CVVMyX0dVSV9JTklUSUFUT1JfQ09IRVJFTkNZX0RJUyAgICAgICAgMHgwMDAwMDgwMEwKKyNkZWZpbmUgQlVTX0NOVEwxX19NT0JJTEVfUExBVEZPUk1fU0VMX01BU0sgICAgICAgICAgICAgICAgMHgwYzAwMDAwMEwKKyNkZWZpbmUgQlVTX0NOVEwxX19TRU5EX1NCQV9MQVRFTkNZX01BU0sgICAgICAgICAgICAgICAgICAgMHg3MDAwMDAwMEwKKyNkZWZpbmUgQlVTX0NOVEwxX19BR1BDTEtfVkFMSURfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMEwKKyNkZWZpbmUgQlVTX0NOVEwxX19BR1BDTEtfVkFMSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMEwKKworLy8gQlVTX0NOVEwxCisjZGVmaW5lCUJVU19DTlRMMV9fUE1JX0lPX0RJU0FCTEVfX1NISUZUICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUJQlVTX0NOVEwxX19QTUlfTUVNX0RJU0FCTEVfX1NISUZUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZQlCVVNfQ05UTDFfX1BNSV9CTV9ESVNBQkxFX19TSElGVCAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lCUJVU19DTlRMMV9fUE1JX0lOVF9ESVNBQkxFX19TSElGVCAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUJQlVTX0NOVEwxX19CVVMyX0lNTUVESUFURV9QTUlfRElTQUJMRV9fU0hJRlQgICAgICAgMHgwMDAwMDAwNQorI2RlZmluZQlCVVNfQ05UTDFfX0JVUzJfVkdBX1JFR19DT0hFUkVOQ1lfRElTX19TSElGVCAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lCUJVU19DTlRMMV9fQlVTMl9WR0FfTUVNX0NPSEVSRU5DWV9ESVNfX1NISUZUICAgICAgIDB4MDAwMDAwMDkKKyNkZWZpbmUJQlVTX0NOVEwxX19CVVMyX0hEUF9SRUdfQ09IRVJFTkNZX0RJU19fU0hJRlQgICAgICAgMHgwMDAwMDAwYQorI2RlZmluZQlCVVNfQ05UTDFfX0JVUzJfR1VJX0lOSVRJQVRPUl9DT0hFUkVOQ1lfRElTX19TSElGVCAweDAwMDAwMDBiCisjZGVmaW5lCUJVU19DTlRMMV9fTU9CSUxFX1BMQVRGT1JNX1NFTF9fU0hJRlQgICAgICAgICAgICAgIDB4MDAwMDAwMWEKKyNkZWZpbmUJQlVTX0NOVEwxX19TRU5EX1NCQV9MQVRFTkNZX19TSElGVCAgICAgICAgICAgICAgICAgMHgwMDAwMDAxYworI2RlZmluZQlCVVNfQ05UTDFfX0FHUENMS19WQUxJRF9fU0hJRlQgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFmCisKKy8vIENSVENfT0ZGU0VUX0NOVEwKKyNkZWZpbmUgQ1JUQ19PRkZTRVRfQ05UTF9fQ1JUQ19USUxFX0xJTkVfTUFTSyAgICAgICAgICAgICAgMHgwMDAwMDAwZkwKKyNkZWZpbmUgQ1JUQ19PRkZTRVRfQ05UTF9fQ1JUQ19USUxFX0xJTkVfUklHSFRfTUFTSyAgICAgICAgMHgwMDAwMDBmMEwKKyNkZWZpbmUgQ1JUQ19PRkZTRVRfQ05UTF9fQ1JUQ19USUxFX0VOX1JJR0hUX01BU0sgICAgICAgICAgMHgwMDAwNDAwMEwKKyNkZWZpbmUgQ1JUQ19PRkZTRVRfQ05UTF9fQ1JUQ19USUxFX0VOX1JJR0hUICAgICAgICAgICAgICAgMHgwMDAwNDAwMEwKKyNkZWZpbmUgQ1JUQ19PRkZTRVRfQ05UTF9fQ1JUQ19USUxFX0VOX01BU0sgICAgICAgICAgICAgICAgMHgwMDAwODAwMEwKKyNkZWZpbmUgQ1JUQ19PRkZTRVRfQ05UTF9fQ1JUQ19USUxFX0VOICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMEwKKyNkZWZpbmUgQ1JUQ19PRkZTRVRfQ05UTF9fQ1JUQ19PRkZTRVRfRkxJUF9DTlRMX01BU0sgICAgICAgMHgwMDAxMDAwMEwKKyNkZWZpbmUgQ1JUQ19PRkZTRVRfQ05UTF9fQ1JUQ19PRkZTRVRfRkxJUF9DTlRMICAgICAgICAgICAgMHgwMDAxMDAwMEwKKyNkZWZpbmUgQ1JUQ19PRkZTRVRfQ05UTF9fQ1JUQ19TVEVSRU9fT0ZGU0VUX0VOX01BU0sgICAgICAgMHgwMDAyMDAwMEwKKyNkZWZpbmUgQ1JUQ19PRkZTRVRfQ05UTF9fQ1JUQ19TVEVSRU9fT0ZGU0VUX0VOICAgICAgICAgICAgMHgwMDAyMDAwMEwKKyNkZWZpbmUgQ1JUQ19PRkZTRVRfQ05UTF9fQ1JUQ19TVEVSRU9fU1lOQ19FTl9NQVNLICAgICAgICAgMHgwMDBjMDAwMEwKKyNkZWZpbmUgQ1JUQ19PRkZTRVRfQ05UTF9fQ1JUQ19TVEVSRU9fU1lOQ19PVVRfRU5fTUFTSyAgICAgMHgwMDEwMDAwMEwKKyNkZWZpbmUgQ1JUQ19PRkZTRVRfQ05UTF9fQ1JUQ19TVEVSRU9fU1lOQ19PVVRfRU4gICAgICAgICAgMHgwMDEwMDAwMEwKKyNkZWZpbmUgQ1JUQ19PRkZTRVRfQ05UTF9fQ1JUQ19TVEVSRU9fU1lOQ19NQVNLICAgICAgICAgICAgMHgwMDIwMDAwMEwKKyNkZWZpbmUgQ1JUQ19PRkZTRVRfQ05UTF9fQ1JUQ19TVEVSRU9fU1lOQyAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMEwKKyNkZWZpbmUgQ1JUQ19PRkZTRVRfQ05UTF9fQ1JUQ19HVUlfVFJJR19PRkZTRVRfTEVGVF9FTl9NQVNLIDB4MTAwMDAwMDBMCisjZGVmaW5lIENSVENfT0ZGU0VUX0NOVExfX0NSVENfR1VJX1RSSUdfT0ZGU0VUX0xFRlRfRU4gICAgIDB4MTAwMDAwMDBMCisjZGVmaW5lIENSVENfT0ZGU0VUX0NOVExfX0NSVENfR1VJX1RSSUdfT0ZGU0VUX1JJR0hUX0VOX01BU0sgMHgyMDAwMDAwMEwKKyNkZWZpbmUgQ1JUQ19PRkZTRVRfQ05UTF9fQ1JUQ19HVUlfVFJJR19PRkZTRVRfUklHSFRfRU4gICAgMHgyMDAwMDAwMEwKKyNkZWZpbmUgQ1JUQ19PRkZTRVRfQ05UTF9fQ1JUQ19HVUlfVFJJR19PRkZTRVRfTUFTSyAgICAgICAgMHg0MDAwMDAwMEwKKyNkZWZpbmUgQ1JUQ19PRkZTRVRfQ05UTF9fQ1JUQ19HVUlfVFJJR19PRkZTRVQgICAgICAgICAgICAgMHg0MDAwMDAwMEwKKyNkZWZpbmUgQ1JUQ19PRkZTRVRfQ05UTF9fQ1JUQ19PRkZTRVRfTE9DS19NQVNLICAgICAgICAgICAgMHg4MDAwMDAwMEwKKyNkZWZpbmUgQ1JUQ19PRkZTRVRfQ05UTF9fQ1JUQ19PRkZTRVRfTE9DSyAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMEwKKworLy8gQ1JUQ19HRU5fQ05UTAorI2RlZmluZSBDUlRDX0dFTl9DTlRMX19DUlRDX0RCTF9TQ0FOX0VOX01BU0sgICAgICAgICAgICAgICAweDAwMDAwMDAxTAorI2RlZmluZSBDUlRDX0dFTl9DTlRMX19DUlRDX0RCTF9TQ0FOX0VOICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxTAorI2RlZmluZSBDUlRDX0dFTl9DTlRMX19DUlRDX0lOVEVSTEFDRV9FTl9NQVNLICAgICAgICAgICAgICAweDAwMDAwMDAyTAorI2RlZmluZSBDUlRDX0dFTl9DTlRMX19DUlRDX0lOVEVSTEFDRV9FTiAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyTAorI2RlZmluZSBDUlRDX0dFTl9DTlRMX19DUlRDX0NfU1lOQ19FTl9NQVNLICAgICAgICAgICAgICAgICAweDAwMDAwMDEwTAorI2RlZmluZSBDUlRDX0dFTl9DTlRMX19DUlRDX0NfU1lOQ19FTiAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwTAorI2RlZmluZSBDUlRDX0dFTl9DTlRMX19DUlRDX1BJWF9XSURUSF9NQVNLICAgICAgICAgICAgICAgICAweDAwMDAwZjAwTAorI2RlZmluZSBDUlRDX0dFTl9DTlRMX19DUlRDX0lDT05fRU5fTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwTAorI2RlZmluZSBDUlRDX0dFTl9DTlRMX19DUlRDX0lDT05fRU4gICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwTAorI2RlZmluZSBDUlRDX0dFTl9DTlRMX19DUlRDX0NVUl9FTl9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwTAorI2RlZmluZSBDUlRDX0dFTl9DTlRMX19DUlRDX0NVUl9FTiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwTAorI2RlZmluZSBDUlRDX0dFTl9DTlRMX19DUlRDX1ZTVEFUX01PREVfTUFTSyAgICAgICAgICAgICAgICAweDAwMDYwMDAwTAorI2RlZmluZSBDUlRDX0dFTl9DTlRMX19DUlRDX0NVUl9NT0RFX01BU0sgICAgICAgICAgICAgICAgICAweDAwNzAwMDAwTAorI2RlZmluZSBDUlRDX0dFTl9DTlRMX19DUlRDX0VYVF9ESVNQX0VOX01BU0sgICAgICAgICAgICAgICAweDAxMDAwMDAwTAorI2RlZmluZSBDUlRDX0dFTl9DTlRMX19DUlRDX0VYVF9ESVNQX0VOICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwTAorI2RlZmluZSBDUlRDX0dFTl9DTlRMX19DUlRDX0VOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwTAorI2RlZmluZSBDUlRDX0dFTl9DTlRMX19DUlRDX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwTAorI2RlZmluZSBDUlRDX0dFTl9DTlRMX19DUlRDX0RJU1BfUkVRX0VOX0JfTUFTSyAgICAgICAgICAgICAweDA0MDAwMDAwTAorI2RlZmluZSBDUlRDX0dFTl9DTlRMX19DUlRDX0RJU1BfUkVRX0VOX0IgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwTAorCisvLyBDUlRDMl9HRU5fQ05UTAorI2RlZmluZSBDUlRDMl9HRU5fQ05UTF9fQ1JUQzJfREJMX1NDQU5fRU5fTUFTSyAgICAgICAgICAgICAweDAwMDAwMDAxTAorI2RlZmluZSBDUlRDMl9HRU5fQ05UTF9fQ1JUQzJfREJMX1NDQU5fRU4gICAgICAgICAgICAgICAgICAweDAwMDAwMDAxTAorI2RlZmluZSBDUlRDMl9HRU5fQ05UTF9fQ1JUQzJfSU5URVJMQUNFX0VOX01BU0sgICAgICAgICAgICAweDAwMDAwMDAyTAorI2RlZmluZSBDUlRDMl9HRU5fQ05UTF9fQ1JUQzJfSU5URVJMQUNFX0VOICAgICAgICAgICAgICAgICAweDAwMDAwMDAyTAorI2RlZmluZSBDUlRDMl9HRU5fQ05UTF9fQ1JUQzJfU1lOQ19UUklTVEFURV9NQVNLICAgICAgICAgICAweDAwMDAwMDEwTAorI2RlZmluZSBDUlRDMl9HRU5fQ05UTF9fQ1JUQzJfU1lOQ19UUklTVEFURSAgICAgICAgICAgICAgICAweDAwMDAwMDEwTAorI2RlZmluZSBDUlRDMl9HRU5fQ05UTF9fQ1JUQzJfSFNZTkNfVFJJU1RBVEVfTUFTSyAgICAgICAgICAweDAwMDAwMDIwTAorI2RlZmluZSBDUlRDMl9HRU5fQ05UTF9fQ1JUQzJfSFNZTkNfVFJJU1RBVEUgICAgICAgICAgICAgICAweDAwMDAwMDIwTAorI2RlZmluZSBDUlRDMl9HRU5fQ05UTF9fQ1JUQzJfVlNZTkNfVFJJU1RBVEVfTUFTSyAgICAgICAgICAweDAwMDAwMDQwTAorI2RlZmluZSBDUlRDMl9HRU5fQ05UTF9fQ1JUQzJfVlNZTkNfVFJJU1RBVEUgICAgICAgICAgICAgICAweDAwMDAwMDQwTAorI2RlZmluZSBDUlRDMl9HRU5fQ05UTF9fQ1JUMl9PTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwTAorI2RlZmluZSBDUlRDMl9HRU5fQ05UTF9fQ1JUMl9PTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwTAorI2RlZmluZSBDUlRDMl9HRU5fQ05UTF9fQ1JUQzJfUElYX1dJRFRIX01BU0sgICAgICAgICAgICAgICAweDAwMDAwZjAwTAorI2RlZmluZSBDUlRDMl9HRU5fQ05UTF9fQ1JUQzJfSUNPTl9FTl9NQVNLICAgICAgICAgICAgICAgICAweDAwMDA4MDAwTAorI2RlZmluZSBDUlRDMl9HRU5fQ05UTF9fQ1JUQzJfSUNPTl9FTiAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwTAorI2RlZmluZSBDUlRDMl9HRU5fQ05UTF9fQ1JUQzJfQ1VSX0VOX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwTAorI2RlZmluZSBDUlRDMl9HRU5fQ05UTF9fQ1JUQzJfQ1VSX0VOICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwTAorI2RlZmluZSBDUlRDMl9HRU5fQ05UTF9fQ1JUQzJfQ1VSX01PREVfTUFTSyAgICAgICAgICAgICAgICAweDAwNzAwMDAwTAorI2RlZmluZSBDUlRDMl9HRU5fQ05UTF9fQ1JUQzJfRElTUExBWV9ESVNfTUFTSyAgICAgICAgICAgICAweDAwODAwMDAwTAorI2RlZmluZSBDUlRDMl9HRU5fQ05UTF9fQ1JUQzJfRElTUExBWV9ESVMgICAgICAgICAgICAgICAgICAweDAwODAwMDAwTAorI2RlZmluZSBDUlRDMl9HRU5fQ05UTF9fQ1JUQzJfRU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwTAorI2RlZmluZSBDUlRDMl9HRU5fQ05UTF9fQ1JUQzJfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwTAorI2RlZmluZSBDUlRDMl9HRU5fQ05UTF9fQ1JUQzJfRElTUF9SRVFfRU5fQl9NQVNLICAgICAgICAgICAweDA0MDAwMDAwTAorI2RlZmluZSBDUlRDMl9HRU5fQ05UTF9fQ1JUQzJfRElTUF9SRVFfRU5fQiAgICAgICAgICAgICAgICAweDA0MDAwMDAwTAorI2RlZmluZSBDUlRDMl9HRU5fQ05UTF9fQ1JUQzJfQ19TWU5DX0VOX01BU0sgICAgICAgICAgICAgICAweDA4MDAwMDAwTAorI2RlZmluZSBDUlRDMl9HRU5fQ05UTF9fQ1JUQzJfQ19TWU5DX0VOICAgICAgICAgICAgICAgICAgICAweDA4MDAwMDAwTAorI2RlZmluZSBDUlRDMl9HRU5fQ05UTF9fQ1JUQzJfSFNZTkNfRElTX01BU0sgICAgICAgICAgICAgICAweDEwMDAwMDAwTAorI2RlZmluZSBDUlRDMl9HRU5fQ05UTF9fQ1JUQzJfSFNZTkNfRElTICAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwTAorI2RlZmluZSBDUlRDMl9HRU5fQ05UTF9fQ1JUQzJfVlNZTkNfRElTX01BU0sgICAgICAgICAgICAgICAweDIwMDAwMDAwTAorI2RlZmluZSBDUlRDMl9HRU5fQ05UTF9fQ1JUQzJfVlNZTkNfRElTICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwTAorCisvLyBBR1BfQ05UTAorI2RlZmluZSBBR1BfQ05UTF9fTUFYX0lETEVfQ0xLX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGZmTAorI2RlZmluZSBBR1BfQ05UTF9fSE9MRF9SRF9GSUZPX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwTAorI2RlZmluZSBBR1BfQ05UTF9fSE9MRF9SRF9GSUZPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwTAorI2RlZmluZSBBR1BfQ05UTF9fSE9MRF9SUV9GSUZPX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwTAorI2RlZmluZSBBR1BfQ05UTF9fSE9MRF9SUV9GSUZPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwTAorI2RlZmluZSBBR1BfQ05UTF9fRU5fMlhfU1RCQl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwTAorI2RlZmluZSBBR1BfQ05UTF9fRU5fMlhfU1RCQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwTAorI2RlZmluZSBBR1BfQ05UTF9fRk9SQ0VfRlVMTF9TQkFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwTAorI2RlZmluZSBBR1BfQ05UTF9fRk9SQ0VfRlVMTF9TQkEgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwTAorI2RlZmluZSBBR1BfQ05UTF9fU0JBX0RJU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwTAorI2RlZmluZSBBR1BfQ05UTF9fU0JBX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwTAorI2RlZmluZSBBR1BfQ05UTF9fQUdQX1JFVl9JRF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwTAorI2RlZmluZSBBR1BfQ05UTF9fQUdQX1JFVl9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwTAorI2RlZmluZSBBR1BfQ05UTF9fUkVHX0NSSVBQTEVfQUdQNFhfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwTAorI2RlZmluZSBBR1BfQ05UTF9fUkVHX0NSSVBQTEVfQUdQNFggICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwTAorI2RlZmluZSBBR1BfQ05UTF9fUkVHX0NSSVBQTEVfQUdQMlg0WF9NQVNLICAgICAgICAgICAgICAgICAweDAwMDA4MDAwTAorI2RlZmluZSBBR1BfQ05UTF9fUkVHX0NSSVBQTEVfQUdQMlg0WCAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwTAorI2RlZmluZSBBR1BfQ05UTF9fRk9SQ0VfSU5UX1ZSRUZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwTAorI2RlZmluZSBBR1BfQ05UTF9fRk9SQ0VfSU5UX1ZSRUYgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwTAorI2RlZmluZSBBR1BfQ05UTF9fUEVORElOR19TTE9UU19WQUxfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDYwMDAwTAorI2RlZmluZSBBR1BfQ05UTF9fUEVORElOR19TTE9UU19TRUxfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwTAorI2RlZmluZSBBR1BfQ05UTF9fUEVORElOR19TTE9UU19TRUwgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwTAorI2RlZmluZSBBR1BfQ05UTF9fRU5fRVhURU5ERURfQURfU1RCXzJYX01BU0sgICAgICAgICAgICAgICAweDAwMTAwMDAwTAorI2RlZmluZSBBR1BfQ05UTF9fRU5fRVhURU5ERURfQURfU1RCXzJYICAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwTAorI2RlZmluZSBBR1BfQ05UTF9fRElTX1FVRVVFRF9HTlRfRklYX01BU0sgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwTAorI2RlZmluZSBBR1BfQ05UTF9fRElTX1FVRVVFRF9HTlRfRklYICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwTAorI2RlZmluZSBBR1BfQ05UTF9fRU5fUkRBVEEyWDRYX01VTFRJUkVTRVRfTUFTSyAgICAgICAgICAgICAweDAwNDAwMDAwTAorI2RlZmluZSBBR1BfQ05UTF9fRU5fUkRBVEEyWDRYX01VTFRJUkVTRVQgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwTAorI2RlZmluZSBBR1BfQ05UTF9fRU5fUkJGQ0FMTV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAwMDAwTAorI2RlZmluZSBBR1BfQ05UTF9fRU5fUkJGQ0FMTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAwMDAwTAorI2RlZmluZSBBR1BfQ05UTF9fRk9SQ0VfRVhUX1ZSRUZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwTAorI2RlZmluZSBBR1BfQ05UTF9fRk9SQ0VfRVhUX1ZSRUYgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwTAorI2RlZmluZSBBR1BfQ05UTF9fRElTX1JCRl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwTAorI2RlZmluZSBBR1BfQ05UTF9fRElTX1JCRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwTAorI2RlZmluZSBBR1BfQ05UTF9fREVMQVlfRklSU1RfU0JBX0VOX01BU0sgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwTAorI2RlZmluZSBBR1BfQ05UTF9fREVMQVlfRklSU1RfU0JBX0VOICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwTAorI2RlZmluZSBBR1BfQ05UTF9fREVMQVlfRklSU1RfU0JBX1ZBTF9NQVNLICAgICAgICAgICAgICAgICAweDM4MDAwMDAwTAorI2RlZmluZSBBR1BfQ05UTF9fQUdQX01JU0NfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGMwMDAwMDAwTAorCisvLyBBR1BfQ05UTAorI2RlZmluZQlBR1BfQ05UTF9fTUFYX0lETEVfQ0xLX19TSElGVCAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lCUFHUF9DTlRMX19IT0xEX1JEX0ZJRk9fX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUJQUdQX0NOVExfX0hPTERfUlFfRklGT19fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOQorI2RlZmluZQlBR1BfQ05UTF9fRU5fMlhfU1RCQl9fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBhCisjZGVmaW5lCUFHUF9DTlRMX19GT1JDRV9GVUxMX1NCQV9fU0hJRlQgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMGIKKyNkZWZpbmUJQUdQX0NOVExfX1NCQV9ESVNfX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwYworI2RlZmluZQlBR1BfQ05UTF9fQUdQX1JFVl9JRF9fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBkCisjZGVmaW5lCUFHUF9DTlRMX19SRUdfQ1JJUFBMRV9BR1A0WF9fU0hJRlQgICAgICAgICAgICAgICAgIDB4MDAwMDAwMGUKKyNkZWZpbmUJQUdQX0NOVExfX1JFR19DUklQUExFX0FHUDJYNFhfX1NISUZUICAgICAgICAgICAgICAgMHgwMDAwMDAwZgorI2RlZmluZQlBR1BfQ05UTF9fRk9SQ0VfSU5UX1ZSRUZfX1NISUZUICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lCUFHUF9DTlRMX19QRU5ESU5HX1NMT1RTX1ZBTF9fU0hJRlQgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTEKKyNkZWZpbmUJQUdQX0NOVExfX1BFTkRJTkdfU0xPVFNfU0VMX19TSElGVCAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMworI2RlZmluZQlBR1BfQ05UTF9fRU5fRVhURU5ERURfQURfU1RCXzJYX19TSElGVCAgICAgICAgICAgICAweDAwMDAwMDE0CisjZGVmaW5lCUFHUF9DTlRMX19ESVNfUVVFVUVEX0dOVF9GSVhfX1NISUZUICAgICAgICAgICAgICAgIDB4MDAwMDAwMTUKKyNkZWZpbmUJQUdQX0NOVExfX0VOX1JEQVRBMlg0WF9NVUxUSVJFU0VUX19TSElGVCAgICAgICAgICAgMHgwMDAwMDAxNgorI2RlZmluZQlBR1BfQ05UTF9fRU5fUkJGQ0FMTV9fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE3CisjZGVmaW5lCUFHUF9DTlRMX19GT1JDRV9FWFRfVlJFRl9fU0hJRlQgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKKyNkZWZpbmUJQUdQX0NOVExfX0RJU19SQkZfX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOQorI2RlZmluZQlBR1BfQ05UTF9fREVMQVlfRklSU1RfU0JBX0VOX19TSElGVCAgICAgICAgICAgICAgICAweDAwMDAwMDFhCisjZGVmaW5lCUFHUF9DTlRMX19ERUxBWV9GSVJTVF9TQkFfVkFMX19TSElGVCAgICAgICAgICAgICAgIDB4MDAwMDAwMWIKKyNkZWZpbmUJQUdQX0NOVExfX0FHUF9NSVNDX19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxZQorCisvLyBESVNQX01JU0NfQ05UTAorI2RlZmluZSBESVNQX01JU0NfQ05UTF9fU09GVF9SRVNFVF9HUlBIX1BQX01BU0sgICAgICAgICAgICAweDAwMDAwMDAxTAorI2RlZmluZSBESVNQX01JU0NfQ05UTF9fU09GVF9SRVNFVF9HUlBIX1BQICAgICAgICAgICAgICAgICAweDAwMDAwMDAxTAorI2RlZmluZSBESVNQX01JU0NfQ05UTF9fU09GVF9SRVNFVF9TVUJQSUNfUFBfTUFTSyAgICAgICAgICAweDAwMDAwMDAyTAorI2RlZmluZSBESVNQX01JU0NfQ05UTF9fU09GVF9SRVNFVF9TVUJQSUNfUFAgICAgICAgICAgICAgICAweDAwMDAwMDAyTAorI2RlZmluZSBESVNQX01JU0NfQ05UTF9fU09GVF9SRVNFVF9PVjBfUFBfTUFTSyAgICAgICAgICAgICAweDAwMDAwMDA0TAorI2RlZmluZSBESVNQX01JU0NfQ05UTF9fU09GVF9SRVNFVF9PVjBfUFAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0TAorI2RlZmluZSBESVNQX01JU0NfQ05UTF9fU09GVF9SRVNFVF9HUlBIX1NDTEtfTUFTSyAgICAgICAgICAweDAwMDAwMDEwTAorI2RlZmluZSBESVNQX01JU0NfQ05UTF9fU09GVF9SRVNFVF9HUlBIX1NDTEsgICAgICAgICAgICAgICAweDAwMDAwMDEwTAorI2RlZmluZSBESVNQX01JU0NfQ05UTF9fU09GVF9SRVNFVF9TVUJQSUNfU0NMS19NQVNLICAgICAgICAweDAwMDAwMDIwTAorI2RlZmluZSBESVNQX01JU0NfQ05UTF9fU09GVF9SRVNFVF9TVUJQSUNfU0NMSyAgICAgICAgICAgICAweDAwMDAwMDIwTAorI2RlZmluZSBESVNQX01JU0NfQ05UTF9fU09GVF9SRVNFVF9PVjBfU0NMS19NQVNLICAgICAgICAgICAweDAwMDAwMDQwTAorI2RlZmluZSBESVNQX01JU0NfQ05UTF9fU09GVF9SRVNFVF9PVjBfU0NMSyAgICAgICAgICAgICAgICAweDAwMDAwMDQwTAorI2RlZmluZSBESVNQX01JU0NfQ05UTF9fU1lOQ19TVFJFTkdUSF9NQVNLICAgICAgICAgICAgICAgICAweDAwMDAwMzAwTAorI2RlZmluZSBESVNQX01JU0NfQ05UTF9fU1lOQ19QQURfRkxPUF9FTl9NQVNLICAgICAgICAgICAgICAweDAwMDAwNDAwTAorI2RlZmluZSBESVNQX01JU0NfQ05UTF9fU1lOQ19QQURfRkxPUF9FTiAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwTAorI2RlZmluZSBESVNQX01JU0NfQ05UTF9fU09GVF9SRVNFVF9HUlBIMl9QUF9NQVNLICAgICAgICAgICAweDAwMDAxMDAwTAorI2RlZmluZSBESVNQX01JU0NfQ05UTF9fU09GVF9SRVNFVF9HUlBIMl9QUCAgICAgICAgICAgICAgICAweDAwMDAxMDAwTAorI2RlZmluZSBESVNQX01JU0NfQ05UTF9fU09GVF9SRVNFVF9HUlBIMl9TQ0xLX01BU0sgICAgICAgICAweDAwMDA4MDAwTAorI2RlZmluZSBESVNQX01JU0NfQ05UTF9fU09GVF9SRVNFVF9HUlBIMl9TQ0xLICAgICAgICAgICAgICAweDAwMDA4MDAwTAorI2RlZmluZSBESVNQX01JU0NfQ05UTF9fU09GVF9SRVNFVF9MVkRTX01BU0sgICAgICAgICAgICAgICAweDAwMDEwMDAwTAorI2RlZmluZSBESVNQX01JU0NfQ05UTF9fU09GVF9SRVNFVF9MVkRTICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwTAorI2RlZmluZSBESVNQX01JU0NfQ05UTF9fU09GVF9SRVNFVF9UTURTX01BU0sgICAgICAgICAgICAgICAweDAwMDIwMDAwTAorI2RlZmluZSBESVNQX01JU0NfQ05UTF9fU09GVF9SRVNFVF9UTURTICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwTAorI2RlZmluZSBESVNQX01JU0NfQ05UTF9fU09GVF9SRVNFVF9ESUdfVE1EU19NQVNLICAgICAgICAgICAweDAwMDQwMDAwTAorI2RlZmluZSBESVNQX01JU0NfQ05UTF9fU09GVF9SRVNFVF9ESUdfVE1EUyAgICAgICAgICAgICAgICAweDAwMDQwMDAwTAorI2RlZmluZSBESVNQX01JU0NfQ05UTF9fU09GVF9SRVNFVF9UVl9NQVNLICAgICAgICAgICAgICAgICAweDAwMDgwMDAwTAorI2RlZmluZSBESVNQX01JU0NfQ05UTF9fU09GVF9SRVNFVF9UViAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwTAorI2RlZmluZSBESVNQX01JU0NfQ05UTF9fUEFMRVRURTJfTUVNX1JEX01BUkdJTl9NQVNLICAgICAgICAweDAwZjAwMDAwTAorI2RlZmluZSBESVNQX01JU0NfQ05UTF9fUEFMRVRURV9NRU1fUkRfTUFSR0lOX01BU0sgICAgICAgICAweDBmMDAwMDAwTAorI2RlZmluZSBESVNQX01JU0NfQ05UTF9fUk1YX0JVRl9NRU1fUkRfTUFSR0lOX01BU0sgICAgICAgICAweGYwMDAwMDAwTAorCisvLyBESVNQX1BXUl9NQU4KKyNkZWZpbmUgRElTUF9QV1JfTUFOX19ESVNQX1BXUl9NQU5fRDNfQ1JUQ19FTl9NQVNLICAgICAgICAgMHgwMDAwMDAwMUwKKyNkZWZpbmUgRElTUF9QV1JfTUFOX19ESVNQX1BXUl9NQU5fRDNfQ1JUQ19FTiAgICAgICAgICAgICAgMHgwMDAwMDAwMUwKKyNkZWZpbmUgRElTUF9QV1JfTUFOX19ESVNQMl9QV1JfTUFOX0QzX0NSVEMyX0VOX01BU0sgICAgICAgMHgwMDAwMDAxMEwKKyNkZWZpbmUgRElTUF9QV1JfTUFOX19ESVNQMl9QV1JfTUFOX0QzX0NSVEMyX0VOICAgICAgICAgICAgMHgwMDAwMDAxMEwKKyNkZWZpbmUgRElTUF9QV1JfTUFOX19ESVNQX1BXUl9NQU5fRFBNU19NQVNLICAgICAgICAgICAgICAgMHgwMDAwMDMwMEwKKyNkZWZpbmUgRElTUF9QV1JfTUFOX19ESVNQX0QzX1JTVF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMEwKKyNkZWZpbmUgRElTUF9QV1JfTUFOX19ESVNQX0QzX1JTVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMEwKKyNkZWZpbmUgRElTUF9QV1JfTUFOX19ESVNQX0QzX1JFR19SU1RfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMEwKKyNkZWZpbmUgRElTUF9QV1JfTUFOX19ESVNQX0QzX1JFR19SU1QgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMEwKKyNkZWZpbmUgRElTUF9QV1JfTUFOX19ESVNQX0QzX0dSUEhfUlNUX01BU0sgICAgICAgICAgICAgICAgMHgwMDA0MDAwMEwKKyNkZWZpbmUgRElTUF9QV1JfTUFOX19ESVNQX0QzX0dSUEhfUlNUICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMEwKKyNkZWZpbmUgRElTUF9QV1JfTUFOX19ESVNQX0QzX1NVQlBJQ19SU1RfTUFTSyAgICAgICAgICAgICAgMHgwMDA4MDAwMEwKKyNkZWZpbmUgRElTUF9QV1JfTUFOX19ESVNQX0QzX1NVQlBJQ19SU1QgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMEwKKyNkZWZpbmUgRElTUF9QV1JfTUFOX19ESVNQX0QzX09WMF9SU1RfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMEwKKyNkZWZpbmUgRElTUF9QV1JfTUFOX19ESVNQX0QzX09WMF9SU1QgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMEwKKyNkZWZpbmUgRElTUF9QV1JfTUFOX19ESVNQX0QxRDJfR1JQSF9SU1RfTUFTSyAgICAgICAgICAgICAgMHgwMDIwMDAwMEwKKyNkZWZpbmUgRElTUF9QV1JfTUFOX19ESVNQX0QxRDJfR1JQSF9SU1QgICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMEwKKyNkZWZpbmUgRElTUF9QV1JfTUFOX19ESVNQX0QxRDJfU1VCUElDX1JTVF9NQVNLICAgICAgICAgICAgMHgwMDQwMDAwMEwKKyNkZWZpbmUgRElTUF9QV1JfTUFOX19ESVNQX0QxRDJfU1VCUElDX1JTVCAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMEwKKyNkZWZpbmUgRElTUF9QV1JfTUFOX19ESVNQX0QxRDJfT1YwX1JTVF9NQVNLICAgICAgICAgICAgICAgMHgwMDgwMDAwMEwKKyNkZWZpbmUgRElTUF9QV1JfTUFOX19ESVNQX0QxRDJfT1YwX1JTVCAgICAgICAgICAgICAgICAgICAgMHgwMDgwMDAwMEwKKyNkZWZpbmUgRElTUF9QV1JfTUFOX19ESUdfVE1EU19FTkFCTEVfUlNUX01BU0sgICAgICAgICAgICAgMHgwMTAwMDAwMEwKKyNkZWZpbmUgRElTUF9QV1JfTUFOX19ESUdfVE1EU19FTkFCTEVfUlNUICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMEwKKyNkZWZpbmUgRElTUF9QV1JfTUFOX19UVl9FTkFCTEVfUlNUX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMEwKKyNkZWZpbmUgRElTUF9QV1JfTUFOX19UVl9FTkFCTEVfUlNUICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMEwKKyNkZWZpbmUgRElTUF9QV1JfTUFOX19BVVRPX1BXUlVQX0VOX01BU0sgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMEwKKyNkZWZpbmUgRElTUF9QV1JfTUFOX19BVVRPX1BXUlVQX0VOICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMEwKKworLy8gTUNfSU5EX0lOREVYCisjZGVmaW5lIE1DX0lORF9JTkRFWF9fTUNfSU5EX0FERFJfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMWZMCisjZGVmaW5lIE1DX0lORF9JTkRFWF9fTUNfSU5EX1dSX0VOX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDBMCisjZGVmaW5lIE1DX0lORF9JTkRFWF9fTUNfSU5EX1dSX0VOICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDBMCisKKy8vIE1DX0lORF9EQVRBCisjZGVmaW5lIE1DX0lORF9EQVRBX19NQ19JTkRfREFUQV9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4ZmZmZmZmZmZMCisKKy8vIE1DX0NIUF9JT19DTlRMX0ExCisjZGVmaW5lCU1DX0NIUF9JT19DTlRMX0ExX19NRU1fU0xFV05fQ0tBX19TSElGVCAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUJTUNfQ0hQX0lPX0NOVExfQTFfX01FTV9TTEVXTl9BQV9fU0hJRlQgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZQlNQ19DSFBfSU9fQ05UTF9BMV9fTUVNX1NMRVdOX0RRTUFfX1NISUZUICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lCU1DX0NIUF9JT19DTlRMX0ExX19NRU1fU0xFV05fRFFTQV9fU0hJRlQgICAgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUJTUNfQ0hQX0lPX0NOVExfQTFfX01FTV9TTEVXUF9DS0FfX1NISUZUICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZQlNQ19DSFBfSU9fQ05UTF9BMV9fTUVNX1NMRVdQX0FBX19TSElGVCAgICAgICAgICAgICAweDAwMDAwMDA1CisjZGVmaW5lCU1DX0NIUF9JT19DTlRMX0ExX19NRU1fU0xFV1BfRFFNQV9fU0hJRlQgICAgICAgICAgIDB4MDAwMDAwMDYKKyNkZWZpbmUJTUNfQ0hQX0lPX0NOVExfQTFfX01FTV9TTEVXUF9EUVNBX19TSElGVCAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZQlNQ19DSFBfSU9fQ05UTF9BMV9fTUVNX1BSRUFNUF9BQV9fU0hJRlQgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lCU1DX0NIUF9JT19DTlRMX0ExX19NRU1fUFJFQU1QX0RRTUFfX1NISUZUICAgICAgICAgIDB4MDAwMDAwMDkKKyNkZWZpbmUJTUNfQ0hQX0lPX0NOVExfQTFfX01FTV9QUkVBTVBfRFFTQV9fU0hJRlQgICAgICAgICAgMHgwMDAwMDAwYQorI2RlZmluZQlNQ19DSFBfSU9fQ05UTF9BMV9fTUVNX0lPX01PREVBX19TSElGVCAgICAgICAgICAgICAweDAwMDAwMDBjCisjZGVmaW5lCU1DX0NIUF9JT19DTlRMX0ExX19NRU1fUkVDX0NLQV9fU0hJRlQgICAgICAgICAgICAgIDB4MDAwMDAwMGUKKyNkZWZpbmUJTUNfQ0hQX0lPX0NOVExfQTFfX01FTV9SRUNfQUFfX1NISUZUICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZQlNQ19DSFBfSU9fQ05UTF9BMV9fTUVNX1JFQ19EUU1BX19TSElGVCAgICAgICAgICAgICAweDAwMDAwMDEyCisjZGVmaW5lCU1DX0NIUF9JT19DTlRMX0ExX19NRU1fUkVDX0RRU0FfX1NISUZUICAgICAgICAgICAgIDB4MDAwMDAwMTQKKyNkZWZpbmUJTUNfQ0hQX0lPX0NOVExfQTFfX01FTV9TWU5DX1BIQVNFQV9fU0hJRlQgICAgICAgICAgMHgwMDAwMDAxNgorI2RlZmluZQlNQ19DSFBfSU9fQ05UTF9BMV9fTUVNX1NZTkNfQ0VOVEVSQV9fU0hJRlQgICAgICAgICAweDAwMDAwMDE3CisjZGVmaW5lCU1DX0NIUF9JT19DTlRMX0ExX19NRU1fU1lOQ19FTkFfX1NISUZUICAgICAgICAgICAgIDB4MDAwMDAwMTgKKyNkZWZpbmUJTUNfQ0hQX0lPX0NOVExfQTFfX01FTV9DTEtfU0VMQV9fU0hJRlQgICAgICAgICAgICAgMHgwMDAwMDAxYQorI2RlZmluZQlNQ19DSFBfSU9fQ05UTF9BMV9fTUVNX0NMS19JTlZBX19TSElGVCAgICAgICAgICAgICAweDAwMDAwMDFjCisjZGVmaW5lCU1DX0NIUF9JT19DTlRMX0ExX19NRU1fREFUQV9FTklNUF9BX19TSElGVCAgICAgICAgIDB4MDAwMDAwMWUKKyNkZWZpbmUJTUNfQ0hQX0lPX0NOVExfQTFfX01FTV9DTlRMX0VOSU1QX0FfX1NISUZUICAgICAgICAgMHgwMDAwMDAxZgorCisvLyBNQ19DSFBfSU9fQ05UTF9CMQorI2RlZmluZQlNQ19DSFBfSU9fQ05UTF9CMV9fTUVNX1NMRVdOX0NLQl9fU0hJRlQgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lCU1DX0NIUF9JT19DTlRMX0IxX19NRU1fU0xFV05fQUJfX1NISUZUICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUJTUNfQ0hQX0lPX0NOVExfQjFfX01FTV9TTEVXTl9EUU1CX19TSElGVCAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZQlNQ19DSFBfSU9fQ05UTF9CMV9fTUVNX1NMRVdOX0RRU0JfX1NISUZUICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lCU1DX0NIUF9JT19DTlRMX0IxX19NRU1fU0xFV1BfQ0tCX19TSElGVCAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUJTUNfQ0hQX0lPX0NOVExfQjFfX01FTV9TTEVXUF9BQl9fU0hJRlQgICAgICAgICAgICAgMHgwMDAwMDAwNQorI2RlZmluZQlNQ19DSFBfSU9fQ05UTF9CMV9fTUVNX1NMRVdQX0RRTUJfX1NISUZUICAgICAgICAgICAweDAwMDAwMDA2CisjZGVmaW5lCU1DX0NIUF9JT19DTlRMX0IxX19NRU1fU0xFV1BfRFFTQl9fU0hJRlQgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUJTUNfQ0hQX0lPX0NOVExfQjFfX01FTV9QUkVBTVBfQUJfX1NISUZUICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZQlNQ19DSFBfSU9fQ05UTF9CMV9fTUVNX1BSRUFNUF9EUU1CX19TSElGVCAgICAgICAgICAweDAwMDAwMDA5CisjZGVmaW5lCU1DX0NIUF9JT19DTlRMX0IxX19NRU1fUFJFQU1QX0RRU0JfX1NISUZUICAgICAgICAgIDB4MDAwMDAwMGEKKyNkZWZpbmUJTUNfQ0hQX0lPX0NOVExfQjFfX01FTV9JT19NT0RFQl9fU0hJRlQgICAgICAgICAgICAgMHgwMDAwMDAwYworI2RlZmluZQlNQ19DSFBfSU9fQ05UTF9CMV9fTUVNX1JFQ19DS0JfX1NISUZUICAgICAgICAgICAgICAweDAwMDAwMDBlCisjZGVmaW5lCU1DX0NIUF9JT19DTlRMX0IxX19NRU1fUkVDX0FCX19TSElGVCAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUJTUNfQ0hQX0lPX0NOVExfQjFfX01FTV9SRUNfRFFNQl9fU0hJRlQgICAgICAgICAgICAgMHgwMDAwMDAxMgorI2RlZmluZQlNQ19DSFBfSU9fQ05UTF9CMV9fTUVNX1JFQ19EUVNCX19TSElGVCAgICAgICAgICAgICAweDAwMDAwMDE0CisjZGVmaW5lCU1DX0NIUF9JT19DTlRMX0IxX19NRU1fU1lOQ19QSEFTRUJfX1NISUZUICAgICAgICAgIDB4MDAwMDAwMTYKKyNkZWZpbmUJTUNfQ0hQX0lPX0NOVExfQjFfX01FTV9TWU5DX0NFTlRFUkJfX1NISUZUICAgICAgICAgMHgwMDAwMDAxNworI2RlZmluZQlNQ19DSFBfSU9fQ05UTF9CMV9fTUVNX1NZTkNfRU5CX19TSElGVCAgICAgICAgICAgICAweDAwMDAwMDE4CisjZGVmaW5lCU1DX0NIUF9JT19DTlRMX0IxX19NRU1fQ0xLX1NFTEJfX1NISUZUICAgICAgICAgICAgIDB4MDAwMDAwMWEKKyNkZWZpbmUJTUNfQ0hQX0lPX0NOVExfQjFfX01FTV9DTEtfSU5WQl9fU0hJRlQgICAgICAgICAgICAgMHgwMDAwMDAxYworI2RlZmluZQlNQ19DSFBfSU9fQ05UTF9CMV9fTUVNX0RBVEFfRU5JTVBfQl9fU0hJRlQgICAgICAgICAweDAwMDAwMDFlCisjZGVmaW5lCU1DX0NIUF9JT19DTlRMX0IxX19NRU1fQ05UTF9FTklNUF9CX19TSElGVCAgICAgICAgIDB4MDAwMDAwMWYKKworLy8gTUNfQ0hQX0lPX0NOVExfQTEKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQTFfX01FTV9TTEVXTl9DS0FfTUFTSyAgICAgICAgICAgICAgMHgwMDAwMDAwMUwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQTFfX01FTV9TTEVXTl9DS0EgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMUwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQTFfX01FTV9TTEVXTl9BQV9NQVNLICAgICAgICAgICAgICAgMHgwMDAwMDAwMkwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQTFfX01FTV9TTEVXTl9BQSAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMkwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQTFfX01FTV9TTEVXTl9EUU1BX01BU0sgICAgICAgICAgICAgMHgwMDAwMDAwNEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQTFfX01FTV9TTEVXTl9EUU1BICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQTFfX01FTV9TTEVXTl9EUVNBX01BU0sgICAgICAgICAgICAgMHgwMDAwMDAwOEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQTFfX01FTV9TTEVXTl9EUVNBICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQTFfX01FTV9TTEVXUF9DS0FfTUFTSyAgICAgICAgICAgICAgMHgwMDAwMDAxMEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQTFfX01FTV9TTEVXUF9DS0EgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQTFfX01FTV9TTEVXUF9BQV9NQVNLICAgICAgICAgICAgICAgMHgwMDAwMDAyMEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQTFfX01FTV9TTEVXUF9BQSAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQTFfX01FTV9TTEVXUF9EUU1BX01BU0sgICAgICAgICAgICAgMHgwMDAwMDA0MEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQTFfX01FTV9TTEVXUF9EUU1BICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQTFfX01FTV9TTEVXUF9EUVNBX01BU0sgICAgICAgICAgICAgMHgwMDAwMDA4MEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQTFfX01FTV9TTEVXUF9EUVNBICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQTFfX01FTV9QUkVBTVBfQUFfTUFTSyAgICAgICAgICAgICAgMHgwMDAwMDEwMEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQTFfX01FTV9QUkVBTVBfQUEgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQTFfX01FTV9QUkVBTVBfRFFNQV9NQVNLICAgICAgICAgICAgMHgwMDAwMDIwMEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQTFfX01FTV9QUkVBTVBfRFFNQSAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQTFfX01FTV9QUkVBTVBfRFFTQV9NQVNLICAgICAgICAgICAgMHgwMDAwMDQwMEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQTFfX01FTV9QUkVBTVBfRFFTQSAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQTFfX01FTV9JT19NT0RFQV9NQVNLICAgICAgICAgICAgICAgMHgwMDAwMzAwMEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQTFfX01FTV9SRUNfQ0tBX01BU0sgICAgICAgICAgICAgICAgMHgwMDAwYzAwMEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQTFfX01FTV9SRUNfQUFfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAzMDAwMEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQTFfX01FTV9SRUNfRFFNQV9NQVNLICAgICAgICAgICAgICAgMHgwMDBjMDAwMEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQTFfX01FTV9SRUNfRFFTQV9NQVNLICAgICAgICAgICAgICAgMHgwMDMwMDAwMEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQTFfX01FTV9TWU5DX1BIQVNFQV9NQVNLICAgICAgICAgICAgMHgwMDQwMDAwMEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQTFfX01FTV9TWU5DX1BIQVNFQSAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQTFfX01FTV9TWU5DX0NFTlRFUkFfTUFTSyAgICAgICAgICAgMHgwMDgwMDAwMEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQTFfX01FTV9TWU5DX0NFTlRFUkEgICAgICAgICAgICAgICAgMHgwMDgwMDAwMEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQTFfX01FTV9TWU5DX0VOQV9NQVNLICAgICAgICAgICAgICAgMHgwMzAwMDAwMEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQTFfX01FTV9DTEtfU0VMQV9NQVNLICAgICAgICAgICAgICAgMHgwYzAwMDAwMEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQTFfX01FTV9DTEtfSU5WQV9NQVNLICAgICAgICAgICAgICAgMHgxMDAwMDAwMEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQTFfX01FTV9DTEtfSU5WQSAgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQTFfX01FTV9EQVRBX0VOSU1QX0FfTUFTSyAgICAgICAgICAgMHg0MDAwMDAwMEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQTFfX01FTV9EQVRBX0VOSU1QX0EgICAgICAgICAgICAgICAgMHg0MDAwMDAwMEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQTFfX01FTV9DTlRMX0VOSU1QX0FfTUFTSyAgICAgICAgICAgMHg4MDAwMDAwMEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQTFfX01FTV9DTlRMX0VOSU1QX0EgICAgICAgICAgICAgICAgMHg4MDAwMDAwMEwKKworLy8gTUNfQ0hQX0lPX0NOVExfQjEKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQjFfX01FTV9TTEVXTl9DS0JfTUFTSyAgICAgICAgICAgICAgMHgwMDAwMDAwMUwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQjFfX01FTV9TTEVXTl9DS0IgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMUwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQjFfX01FTV9TTEVXTl9BQl9NQVNLICAgICAgICAgICAgICAgMHgwMDAwMDAwMkwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQjFfX01FTV9TTEVXTl9BQiAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMkwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQjFfX01FTV9TTEVXTl9EUU1CX01BU0sgICAgICAgICAgICAgMHgwMDAwMDAwNEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQjFfX01FTV9TTEVXTl9EUU1CICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQjFfX01FTV9TTEVXTl9EUVNCX01BU0sgICAgICAgICAgICAgMHgwMDAwMDAwOEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQjFfX01FTV9TTEVXTl9EUVNCICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQjFfX01FTV9TTEVXUF9DS0JfTUFTSyAgICAgICAgICAgICAgMHgwMDAwMDAxMEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQjFfX01FTV9TTEVXUF9DS0IgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQjFfX01FTV9TTEVXUF9BQl9NQVNLICAgICAgICAgICAgICAgMHgwMDAwMDAyMEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQjFfX01FTV9TTEVXUF9BQiAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQjFfX01FTV9TTEVXUF9EUU1CX01BU0sgICAgICAgICAgICAgMHgwMDAwMDA0MEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQjFfX01FTV9TTEVXUF9EUU1CICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQjFfX01FTV9TTEVXUF9EUVNCX01BU0sgICAgICAgICAgICAgMHgwMDAwMDA4MEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQjFfX01FTV9TTEVXUF9EUVNCICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQjFfX01FTV9QUkVBTVBfQUJfTUFTSyAgICAgICAgICAgICAgMHgwMDAwMDEwMEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQjFfX01FTV9QUkVBTVBfQUIgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQjFfX01FTV9QUkVBTVBfRFFNQl9NQVNLICAgICAgICAgICAgMHgwMDAwMDIwMEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQjFfX01FTV9QUkVBTVBfRFFNQiAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQjFfX01FTV9QUkVBTVBfRFFTQl9NQVNLICAgICAgICAgICAgMHgwMDAwMDQwMEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQjFfX01FTV9QUkVBTVBfRFFTQiAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQjFfX01FTV9JT19NT0RFQl9NQVNLICAgICAgICAgICAgICAgMHgwMDAwMzAwMEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQjFfX01FTV9SRUNfQ0tCX01BU0sgICAgICAgICAgICAgICAgMHgwMDAwYzAwMEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQjFfX01FTV9SRUNfQUJfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAzMDAwMEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQjFfX01FTV9SRUNfRFFNQl9NQVNLICAgICAgICAgICAgICAgMHgwMDBjMDAwMEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQjFfX01FTV9SRUNfRFFTQl9NQVNLICAgICAgICAgICAgICAgMHgwMDMwMDAwMEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQjFfX01FTV9TWU5DX1BIQVNFQl9NQVNLICAgICAgICAgICAgMHgwMDQwMDAwMEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQjFfX01FTV9TWU5DX1BIQVNFQiAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQjFfX01FTV9TWU5DX0NFTlRFUkJfTUFTSyAgICAgICAgICAgMHgwMDgwMDAwMEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQjFfX01FTV9TWU5DX0NFTlRFUkIgICAgICAgICAgICAgICAgMHgwMDgwMDAwMEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQjFfX01FTV9TWU5DX0VOQl9NQVNLICAgICAgICAgICAgICAgMHgwMzAwMDAwMEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQjFfX01FTV9DTEtfU0VMQl9NQVNLICAgICAgICAgICAgICAgMHgwYzAwMDAwMEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQjFfX01FTV9DTEtfSU5WQl9NQVNLICAgICAgICAgICAgICAgMHgxMDAwMDAwMEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQjFfX01FTV9DTEtfSU5WQiAgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQjFfX01FTV9EQVRBX0VOSU1QX0JfTUFTSyAgICAgICAgICAgMHg0MDAwMDAwMEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQjFfX01FTV9EQVRBX0VOSU1QX0IgICAgICAgICAgICAgICAgMHg0MDAwMDAwMEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQjFfX01FTV9DTlRMX0VOSU1QX0JfTUFTSyAgICAgICAgICAgMHg4MDAwMDAwMEwKKyNkZWZpbmUgTUNfQ0hQX0lPX0NOVExfQjFfX01FTV9DTlRMX0VOSU1QX0IgICAgICAgICAgICAgICAgMHg4MDAwMDAwMEwKKworLy8gTUVNX1NEUkFNX01PREVfUkVHCisjZGVmaW5lIE1FTV9TRFJBTV9NT0RFX1JFR19fTUVNX01PREVfUkVHX01BU0sgICAgICAgICAgICAgIDB4MDAwMDdmZmZMCisjZGVmaW5lIE1FTV9TRFJBTV9NT0RFX1JFR19fTUVNX1dSX0xBVEVOQ1lfTUFTSyAgICAgICAgICAgIDB4MDAwZjAwMDBMCisjZGVmaW5lIE1FTV9TRFJBTV9NT0RFX1JFR19fTUVNX0NBU19MQVRFTkNZX01BU0sgICAgICAgICAgIDB4MDA3MDAwMDBMCisjZGVmaW5lIE1FTV9TRFJBTV9NT0RFX1JFR19fTUVNX0NNRF9MQVRFTkNZX01BU0sgICAgICAgICAgIDB4MDA4MDAwMDBMCisjZGVmaW5lIE1FTV9TRFJBTV9NT0RFX1JFR19fTUVNX0NNRF9MQVRFTkNZICAgICAgICAgICAgICAgIDB4MDA4MDAwMDBMCisjZGVmaW5lIE1FTV9TRFJBTV9NT0RFX1JFR19fTUVNX1NUUl9MQVRFTkNZX01BU0sgICAgICAgICAgIDB4MDEwMDAwMDBMCisjZGVmaW5lIE1FTV9TRFJBTV9NT0RFX1JFR19fTUVNX1NUUl9MQVRFTkNZICAgICAgICAgICAgICAgIDB4MDEwMDAwMDBMCisjZGVmaW5lIE1FTV9TRFJBTV9NT0RFX1JFR19fTUVNX0ZBTExfT1VUX0NNRF9NQVNLICAgICAgICAgIDB4MDIwMDAwMDBMCisjZGVmaW5lIE1FTV9TRFJBTV9NT0RFX1JFR19fTUVNX0ZBTExfT1VUX0NNRCAgICAgICAgICAgICAgIDB4MDIwMDAwMDBMCisjZGVmaW5lIE1FTV9TRFJBTV9NT0RFX1JFR19fTUVNX0ZBTExfT1VUX0RBVEFfTUFTSyAgICAgICAgIDB4MDQwMDAwMDBMCisjZGVmaW5lIE1FTV9TRFJBTV9NT0RFX1JFR19fTUVNX0ZBTExfT1VUX0RBVEEgICAgICAgICAgICAgIDB4MDQwMDAwMDBMCisjZGVmaW5lIE1FTV9TRFJBTV9NT0RFX1JFR19fTUVNX0ZBTExfT1VUX1NUUl9NQVNLICAgICAgICAgIDB4MDgwMDAwMDBMCisjZGVmaW5lIE1FTV9TRFJBTV9NT0RFX1JFR19fTUVNX0ZBTExfT1VUX1NUUiAgICAgICAgICAgICAgIDB4MDgwMDAwMDBMCisjZGVmaW5lIE1FTV9TRFJBTV9NT0RFX1JFR19fTUNfSU5JVF9DT01QTEVURV9NQVNLICAgICAgICAgIDB4MTAwMDAwMDBMCisjZGVmaW5lIE1FTV9TRFJBTV9NT0RFX1JFR19fTUNfSU5JVF9DT01QTEVURSAgICAgICAgICAgICAgIDB4MTAwMDAwMDBMCisjZGVmaW5lIE1FTV9TRFJBTV9NT0RFX1JFR19fTUVNX0REUl9ETExfTUFTSyAgICAgICAgICAgICAgIDB4MjAwMDAwMDBMCisjZGVmaW5lIE1FTV9TRFJBTV9NT0RFX1JFR19fTUVNX0REUl9ETEwgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDBMCisjZGVmaW5lIE1FTV9TRFJBTV9NT0RFX1JFR19fTUVNX0NGR19UWVBFX01BU0sgICAgICAgICAgICAgIDB4NDAwMDAwMDBMCisjZGVmaW5lIE1FTV9TRFJBTV9NT0RFX1JFR19fTUVNX0NGR19UWVBFICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDBMCisjZGVmaW5lIE1FTV9TRFJBTV9NT0RFX1JFR19fTUVNX1NEUkFNX1JFU0VUX01BU0sgICAgICAgICAgIDB4ODAwMDAwMDBMCisjZGVmaW5lIE1FTV9TRFJBTV9NT0RFX1JFR19fTUVNX1NEUkFNX1JFU0VUICAgICAgICAgICAgICAgIDB4ODAwMDAwMDBMCisKKy8vIE1FTV9TRFJBTV9NT0RFX1JFRworI2RlZmluZQlNRU1fU0RSQU1fTU9ERV9SRUdfX01FTV9NT0RFX1JFR19fU0hJRlQgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lCU1FTV9TRFJBTV9NT0RFX1JFR19fTUVNX1dSX0xBVEVOQ1lfX1NISUZUICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUJTUVNX1NEUkFNX01PREVfUkVHX19NRU1fQ0FTX0xBVEVOQ1lfX1NISUZUICAgICAgICAgMHgwMDAwMDAxNAorI2RlZmluZQlNRU1fU0RSQU1fTU9ERV9SRUdfX01FTV9DTURfTEFURU5DWV9fU0hJRlQgICAgICAgICAweDAwMDAwMDE3CisjZGVmaW5lCU1FTV9TRFJBTV9NT0RFX1JFR19fTUVNX1NUUl9MQVRFTkNZX19TSElGVCAgICAgICAgIDB4MDAwMDAwMTgKKyNkZWZpbmUJTUVNX1NEUkFNX01PREVfUkVHX19NRU1fRkFMTF9PVVRfQ01EX19TSElGVCAgICAgICAgMHgwMDAwMDAxOQorI2RlZmluZQlNRU1fU0RSQU1fTU9ERV9SRUdfX01FTV9GQUxMX09VVF9EQVRBX19TSElGVCAgICAgICAweDAwMDAwMDFhCisjZGVmaW5lCU1FTV9TRFJBTV9NT0RFX1JFR19fTUVNX0ZBTExfT1VUX1NUUl9fU0hJRlQgICAgICAgIDB4MDAwMDAwMWIKKyNkZWZpbmUJTUVNX1NEUkFNX01PREVfUkVHX19NQ19JTklUX0NPTVBMRVRFX19TSElGVCAgICAgICAgMHgwMDAwMDAxYworI2RlZmluZQlNRU1fU0RSQU1fTU9ERV9SRUdfX01FTV9ERFJfRExMX19TSElGVCAgICAgICAgICAgICAweDAwMDAwMDFkCisjZGVmaW5lCU1FTV9TRFJBTV9NT0RFX1JFR19fTUVNX0NGR19UWVBFX19TSElGVCAgICAgICAgICAgIDB4MDAwMDAwMWUKKyNkZWZpbmUJTUVNX1NEUkFNX01PREVfUkVHX19NRU1fU0RSQU1fUkVTRVRfX1NISUZUICAgICAgICAgMHgwMDAwMDAxZgorCisvLyBNRU1fUkVGUkVTSF9DTlRMCisjZGVmaW5lIE1FTV9SRUZSRVNIX0NOVExfX01FTV9SRUZSRVNIX1JBVEVfTUFTSyAgICAgICAgICAgIDB4MDAwMDAwZmZMCisjZGVmaW5lIE1FTV9SRUZSRVNIX0NOVExfX01FTV9SRUZSRVNIX0RJU19NQVNLICAgICAgICAgICAgIDB4MDAwMDAxMDBMCisjZGVmaW5lIE1FTV9SRUZSRVNIX0NOVExfX01FTV9SRUZSRVNIX0RJUyAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDBMCisjZGVmaW5lIE1FTV9SRUZSRVNIX0NOVExfX01FTV9EWU5BTUlDX0NLRV9NQVNLICAgICAgICAgICAgIDB4MDAwMDAyMDBMCisjZGVmaW5lIE1FTV9SRUZSRVNIX0NOVExfX01FTV9EWU5BTUlDX0NLRSAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDBMCisjZGVmaW5lIE1FTV9SRUZSRVNIX0NOVExfX01FTV9UUkZDX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMGYwMDBMCisjZGVmaW5lIE1FTV9SRUZSRVNIX0NOVExfX01FTV9DTEtBMF9FTkFCTEVfTUFTSyAgICAgICAgICAgIDB4MDAwMTAwMDBMCisjZGVmaW5lIE1FTV9SRUZSRVNIX0NOVExfX01FTV9DTEtBMF9FTkFCTEUgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDBMCisjZGVmaW5lIE1FTV9SRUZSRVNIX0NOVExfX01FTV9DTEtBMGJfRU5BQkxFX01BU0sgICAgICAgICAgIDB4MDAwMjAwMDBMCisjZGVmaW5lIE1FTV9SRUZSRVNIX0NOVExfX01FTV9DTEtBMGJfRU5BQkxFICAgICAgICAgICAgICAgIDB4MDAwMjAwMDBMCisjZGVmaW5lIE1FTV9SRUZSRVNIX0NOVExfX01FTV9DTEtBMV9FTkFCTEVfTUFTSyAgICAgICAgICAgIDB4MDAwNDAwMDBMCisjZGVmaW5lIE1FTV9SRUZSRVNIX0NOVExfX01FTV9DTEtBMV9FTkFCTEUgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDBMCisjZGVmaW5lIE1FTV9SRUZSRVNIX0NOVExfX01FTV9DTEtBMWJfRU5BQkxFX01BU0sgICAgICAgICAgIDB4MDAwODAwMDBMCisjZGVmaW5lIE1FTV9SRUZSRVNIX0NOVExfX01FTV9DTEtBMWJfRU5BQkxFICAgICAgICAgICAgICAgIDB4MDAwODAwMDBMCisjZGVmaW5lIE1FTV9SRUZSRVNIX0NOVExfX01FTV9DTEtBRkJfRU5BQkxFX01BU0sgICAgICAgICAgIDB4MDAxMDAwMDBMCisjZGVmaW5lIE1FTV9SRUZSRVNIX0NOVExfX01FTV9DTEtBRkJfRU5BQkxFICAgICAgICAgICAgICAgIDB4MDAxMDAwMDBMCisjZGVmaW5lIE1FTV9SRUZSRVNIX0NOVExfX0RMTF9GQl9TTENUX0NLQV9NQVNLICAgICAgICAgICAgIDB4MDBjMDAwMDBMCisjZGVmaW5lIE1FTV9SRUZSRVNIX0NOVExfX01FTV9DTEtCMF9FTkFCTEVfTUFTSyAgICAgICAgICAgIDB4MDEwMDAwMDBMCisjZGVmaW5lIE1FTV9SRUZSRVNIX0NOVExfX01FTV9DTEtCMF9FTkFCTEUgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDBMCisjZGVmaW5lIE1FTV9SRUZSRVNIX0NOVExfX01FTV9DTEtCMGJfRU5BQkxFX01BU0sgICAgICAgICAgIDB4MDIwMDAwMDBMCisjZGVmaW5lIE1FTV9SRUZSRVNIX0NOVExfX01FTV9DTEtCMGJfRU5BQkxFICAgICAgICAgICAgICAgIDB4MDIwMDAwMDBMCisjZGVmaW5lIE1FTV9SRUZSRVNIX0NOVExfX01FTV9DTEtCMV9FTkFCTEVfTUFTSyAgICAgICAgICAgIDB4MDQwMDAwMDBMCisjZGVmaW5lIE1FTV9SRUZSRVNIX0NOVExfX01FTV9DTEtCMV9FTkFCTEUgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDBMCisjZGVmaW5lIE1FTV9SRUZSRVNIX0NOVExfX01FTV9DTEtCMWJfRU5BQkxFX01BU0sgICAgICAgICAgIDB4MDgwMDAwMDBMCisjZGVmaW5lIE1FTV9SRUZSRVNIX0NOVExfX01FTV9DTEtCMWJfRU5BQkxFICAgICAgICAgICAgICAgIDB4MDgwMDAwMDBMCisjZGVmaW5lIE1FTV9SRUZSRVNIX0NOVExfX01FTV9DTEtCRkJfRU5BQkxFX01BU0sgICAgICAgICAgIDB4MTAwMDAwMDBMCisjZGVmaW5lIE1FTV9SRUZSRVNIX0NOVExfX01FTV9DTEtCRkJfRU5BQkxFICAgICAgICAgICAgICAgIDB4MTAwMDAwMDBMCisjZGVmaW5lIE1FTV9SRUZSRVNIX0NOVExfX0RMTF9GQl9TTENUX0NLQl9NQVNLICAgICAgICAgICAgIDB4YzAwMDAwMDBMCisKKy8vIE1DX1NUQVRVUworI2RlZmluZSBNQ19TVEFUVVNfX01FTV9QV1JVUF9DT01QTF9BX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxTAorI2RlZmluZSBNQ19TVEFUVVNfX01FTV9QV1JVUF9DT01QTF9BICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxTAorI2RlZmluZSBNQ19TVEFUVVNfX01FTV9QV1JVUF9DT01QTF9CX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyTAorI2RlZmluZSBNQ19TVEFUVVNfX01FTV9QV1JVUF9DT01QTF9CICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyTAorI2RlZmluZSBNQ19TVEFUVVNfX01DX0lETEVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0TAorI2RlZmluZSBNQ19TVEFUVVNfX01DX0lETEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0TAorI2RlZmluZSBNQ19TVEFUVVNfX0lNUF9OX1ZBTFVFX1JfQkFDS19NQVNLICAgICAgICAgICAgICAgICAweDAwMDAwMDc4TAorI2RlZmluZSBNQ19TVEFUVVNfX0lNUF9QX1ZBTFVFX1JfQkFDS19NQVNLICAgICAgICAgICAgICAgICAweDAwMDAwNzgwTAorI2RlZmluZSBNQ19TVEFUVVNfX1RFU1RfT1VUX1JfQkFDS19NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwTAorI2RlZmluZSBNQ19TVEFUVVNfX1RFU1RfT1VUX1JfQkFDSyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwTAorI2RlZmluZSBNQ19TVEFUVVNfX0RVTU1ZX09VVF9SX0JBQ0tfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwTAorI2RlZmluZSBNQ19TVEFUVVNfX0RVTU1ZX09VVF9SX0JBQ0sgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwTAorI2RlZmluZSBNQ19TVEFUVVNfX0lNUF9OX1ZBTFVFX0FfUl9CQUNLX01BU0sgICAgICAgICAgICAgICAweDAwMDFlMDAwTAorI2RlZmluZSBNQ19TVEFUVVNfX0lNUF9QX1ZBTFVFX0FfUl9CQUNLX01BU0sgICAgICAgICAgICAgICAweDAwMWUwMDAwTAorI2RlZmluZSBNQ19TVEFUVVNfX0lNUF9OX1ZBTFVFX0NLX1JfQkFDS19NQVNLICAgICAgICAgICAgICAweDAxZTAwMDAwTAorI2RlZmluZSBNQ19TVEFUVVNfX0lNUF9QX1ZBTFVFX0NLX1JfQkFDS19NQVNLICAgICAgICAgICAgICAweDFlMDAwMDAwTAorCisvLyBNRExMX0NLTworI2RlZmluZSBNRExMX0NLT19fTUNLT0FfU0xFRVBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxTAorI2RlZmluZSBNRExMX0NLT19fTUNLT0FfU0xFRVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxTAorI2RlZmluZSBNRExMX0NLT19fTUNLT0FfUkVTRVRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyTAorI2RlZmluZSBNRExMX0NLT19fTUNLT0FfUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyTAorI2RlZmluZSBNRExMX0NLT19fTUNLT0FfUkFOR0VfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBjTAorI2RlZmluZSBNRExMX0NLT19fRVJTVEFfU09VVFNFTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMwTAorI2RlZmluZSBNRExMX0NLT19fTUNLT0FfRkJfU0VMX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGMwTAorI2RlZmluZSBNRExMX0NLT19fTUNLT0FfUkVGX1NLRVdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNzAwTAorI2RlZmluZSBNRExMX0NLT19fTUNLT0FfRkJfU0tFV19NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA3MDAwTAorI2RlZmluZSBNRExMX0NLT19fTUNLT0FfQlBfU0VMX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwTAorI2RlZmluZSBNRExMX0NLT19fTUNLT0FfQlBfU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwTAorI2RlZmluZSBNRExMX0NLT19fTUNLT0JfU0xFRVBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwTAorI2RlZmluZSBNRExMX0NLT19fTUNLT0JfU0xFRVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwTAorI2RlZmluZSBNRExMX0NLT19fTUNLT0JfUkVTRVRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwTAorI2RlZmluZSBNRExMX0NLT19fTUNLT0JfUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwTAorI2RlZmluZSBNRExMX0NLT19fTUNLT0JfUkFOR0VfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMGMwMDAwTAorI2RlZmluZSBNRExMX0NLT19fRVJTVEJfU09VVFNFTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAwMzAwMDAwTAorI2RlZmluZSBNRExMX0NLT19fTUNLT0JfRkJfU0VMX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAwYzAwMDAwTAorI2RlZmluZSBNRExMX0NLT19fTUNLT0JfUkVGX1NLRVdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDA3MDAwMDAwTAorI2RlZmluZSBNRExMX0NLT19fTUNLT0JfRkJfU0tFV19NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDcwMDAwMDAwTAorI2RlZmluZSBNRExMX0NLT19fTUNLT0JfQlBfU0VMX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwTAorI2RlZmluZSBNRExMX0NLT19fTUNLT0JfQlBfU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwTAorCisvLyBNRExMX1JEQ0tBCisjZGVmaW5lIE1ETExfUkRDS0FfX01SRENLQTBfU0xFRVBfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDFMCisjZGVmaW5lIE1ETExfUkRDS0FfX01SRENLQTBfU0xFRVAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDFMCisjZGVmaW5lIE1ETExfUkRDS0FfX01SRENLQTBfUkVTRVRfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDJMCisjZGVmaW5lIE1ETExfUkRDS0FfX01SRENLQTBfUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDJMCisjZGVmaW5lIE1ETExfUkRDS0FfX01SRENLQTBfUkFOR0VfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMGNMCisjZGVmaW5lIE1ETExfUkRDS0FfX01SRENLQTBfUkVGX1NFTF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzBMCisjZGVmaW5lIE1ETExfUkRDS0FfX01SRENLQTBfRkJfU0VMX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwYzBMCisjZGVmaW5lIE1ETExfUkRDS0FfX01SRENLQTBfUkVGX1NLRVdfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwMDA3MDBMCisjZGVmaW5lIE1ETExfUkRDS0FfX01SRENLQTBfU0lOU0VMX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDBMCisjZGVmaW5lIE1ETExfUkRDS0FfX01SRENLQTBfU0lOU0VMICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDBMCisjZGVmaW5lIE1ETExfUkRDS0FfX01SRENLQTBfRkJfU0tFV19NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwMDcwMDBMCisjZGVmaW5lIE1ETExfUkRDS0FfX01SRENLQTBfQlBfU0VMX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDBMCisjZGVmaW5lIE1ETExfUkRDS0FfX01SRENLQTBfQlBfU0VMICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDBMCisjZGVmaW5lIE1ETExfUkRDS0FfX01SRENLQTFfU0xFRVBfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDBMCisjZGVmaW5lIE1ETExfUkRDS0FfX01SRENLQTFfU0xFRVAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDBMCisjZGVmaW5lIE1ETExfUkRDS0FfX01SRENLQTFfUkVTRVRfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDBMCisjZGVmaW5lIE1ETExfUkRDS0FfX01SRENLQTFfUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDBMCisjZGVmaW5lIE1ETExfUkRDS0FfX01SRENLQTFfUkFOR0VfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAwYzAwMDBMCisjZGVmaW5lIE1ETExfUkRDS0FfX01SRENLQTFfUkVGX1NFTF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAzMDAwMDBMCisjZGVmaW5lIE1ETExfUkRDS0FfX01SRENLQTFfRkJfU0VMX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDBjMDAwMDBMCisjZGVmaW5lIE1ETExfUkRDS0FfX01SRENLQTFfUkVGX1NLRVdfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDcwMDAwMDBMCisjZGVmaW5lIE1ETExfUkRDS0FfX01SRENLQTFfU0lOU0VMX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDBMCisjZGVmaW5lIE1ETExfUkRDS0FfX01SRENLQTFfU0lOU0VMICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDBMCisjZGVmaW5lIE1ETExfUkRDS0FfX01SRENLQTFfRkJfU0tFV19NQVNLICAgICAgICAgICAgICAgICAgIDB4NzAwMDAwMDBMCisjZGVmaW5lIE1ETExfUkRDS0FfX01SRENLQTFfQlBfU0VMX01BU0sgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDBMCisjZGVmaW5lIE1ETExfUkRDS0FfX01SRENLQTFfQlBfU0VMICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDBMCisKKy8vIE1ETExfUkRDS0IKKyNkZWZpbmUgTURMTF9SRENLQl9fTVJEQ0tCMF9TTEVFUF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMUwKKyNkZWZpbmUgTURMTF9SRENLQl9fTVJEQ0tCMF9TTEVFUCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMUwKKyNkZWZpbmUgTURMTF9SRENLQl9fTVJEQ0tCMF9SRVNFVF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMkwKKyNkZWZpbmUgTURMTF9SRENLQl9fTVJEQ0tCMF9SRVNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMkwKKyNkZWZpbmUgTURMTF9SRENLQl9fTVJEQ0tCMF9SQU5HRV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwY0wKKyNkZWZpbmUgTURMTF9SRENLQl9fTVJEQ0tCMF9SRUZfU0VMX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMEwKKyNkZWZpbmUgTURMTF9SRENLQl9fTVJEQ0tCMF9GQl9TRUxfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBjMEwKKyNkZWZpbmUgTURMTF9SRENLQl9fTVJEQ0tCMF9SRUZfU0tFV19NQVNLICAgICAgICAgICAgICAgICAgMHgwMDAwMDcwMEwKKyNkZWZpbmUgTURMTF9SRENLQl9fTVJEQ0tCMF9TSU5TRUxfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMEwKKyNkZWZpbmUgTURMTF9SRENLQl9fTVJEQ0tCMF9TSU5TRUwgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMEwKKyNkZWZpbmUgTURMTF9SRENLQl9fTVJEQ0tCMF9GQl9TS0VXX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAwNzAwMEwKKyNkZWZpbmUgTURMTF9SRENLQl9fTVJEQ0tCMF9CUF9TRUxfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMEwKKyNkZWZpbmUgTURMTF9SRENLQl9fTVJEQ0tCMF9CUF9TRUwgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMEwKKyNkZWZpbmUgTURMTF9SRENLQl9fTVJEQ0tCMV9TTEVFUF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMEwKKyNkZWZpbmUgTURMTF9SRENLQl9fTVJEQ0tCMV9TTEVFUCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMEwKKyNkZWZpbmUgTURMTF9SRENLQl9fTVJEQ0tCMV9SRVNFVF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMEwKKyNkZWZpbmUgTURMTF9SRENLQl9fTVJEQ0tCMV9SRVNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMEwKKyNkZWZpbmUgTURMTF9SRENLQl9fTVJEQ0tCMV9SQU5HRV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDBjMDAwMEwKKyNkZWZpbmUgTURMTF9SRENLQl9fTVJEQ0tCMV9SRUZfU0VMX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDMwMDAwMEwKKyNkZWZpbmUgTURMTF9SRENLQl9fTVJEQ0tCMV9GQl9TRUxfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMGMwMDAwMEwKKyNkZWZpbmUgTURMTF9SRENLQl9fTVJEQ0tCMV9SRUZfU0tFV19NQVNLICAgICAgICAgICAgICAgICAgMHgwNzAwMDAwMEwKKyNkZWZpbmUgTURMTF9SRENLQl9fTVJEQ0tCMV9TSU5TRUxfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwODAwMDAwMEwKKyNkZWZpbmUgTURMTF9SRENLQl9fTVJEQ0tCMV9TSU5TRUwgICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwMDAwMEwKKyNkZWZpbmUgTURMTF9SRENLQl9fTVJEQ0tCMV9GQl9TS0VXX01BU0sgICAgICAgICAgICAgICAgICAgMHg3MDAwMDAwMEwKKyNkZWZpbmUgTURMTF9SRENLQl9fTVJEQ0tCMV9CUF9TRUxfTUFTSyAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMEwKKyNkZWZpbmUgTURMTF9SRENLQl9fTVJEQ0tCMV9CUF9TRUwgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMEwKKworI2RlZmluZSBNRExMX1IzMDBfUkRDS19fTVJEQ0tBX1NMRUVQICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxTAorI2RlZmluZSBNRExMX1IzMDBfUkRDS19fTVJEQ0tBX1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyTAorI2RlZmluZSBNRExMX1IzMDBfUkRDS19fTVJEQ0tCX1NMRUVQICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0TAorI2RlZmluZSBNRExMX1IzMDBfUkRDS19fTVJEQ0tCX1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4TAorI2RlZmluZSBNRExMX1IzMDBfUkRDS19fTVJEQ0tDX1NMRUVQICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwTAorI2RlZmluZSBNRExMX1IzMDBfUkRDS19fTVJEQ0tDX1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwTAorI2RlZmluZSBNRExMX1IzMDBfUkRDS19fTVJEQ0tEX1NMRUVQICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwTAorI2RlZmluZSBNRExMX1IzMDBfUkRDS19fTVJEQ0tEX1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwTAorCisjZGVmaW5lIHBsbENMS19QSU5fQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxCisjZGVmaW5lIHBsbFBQTExfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIHBsbFBQTExfUkVGX0RJViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzCisjZGVmaW5lIHBsbFBQTExfRElWXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIHBsbFBQTExfRElWXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA1CisjZGVmaW5lIHBsbFBQTExfRElWXzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA2CisjZGVmaW5lIHBsbFBQTExfRElWXzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA3CisjZGVmaW5lIHBsbFZDTEtfRUNQX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4CisjZGVmaW5lIHBsbEhUT1RBTF9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA5CisjZGVmaW5lIHBsbE1fU1BMTF9SRUZfRkJfRElWICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBBCisjZGVmaW5lIHBsbEFHUF9QTExfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBCCisjZGVmaW5lIHBsbFNQTExfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBDCisjZGVmaW5lIHBsbFNDTEtfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBECisjZGVmaW5lIHBsbE1QTExfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBFCisjZGVmaW5lIHBsbE1ETExfQ0tPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBGCisjZGVmaW5lIHBsbE1ETExfUkRDS0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIHBsbE1ETExfUkRDS0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDExCisjZGVmaW5lIHBsbE1DTEtfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEyCisjZGVmaW5lIHBsbFBMTF9URVNUX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEzCisjZGVmaW5lIHBsbENMS19QV1JNR1RfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDE0CisjZGVmaW5lIHBsbFBMTF9QV1JNR1RfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDE1CisjZGVmaW5lIHBsbENHX1RFU1RfTUFDUk9fUldfV1JJVEUgICAgICAgICAgICAgICAgICAgMHgwMDE2CisjZGVmaW5lIHBsbENHX1RFU1RfTUFDUk9fUldfUkVBRCAgICAgICAgICAgICAgICAgICAgMHgwMDE3CisjZGVmaW5lIHBsbENHX1RFU1RfTUFDUk9fUldfREFUQSAgICAgICAgICAgICAgICAgICAgMHgwMDE4CisjZGVmaW5lIHBsbENHX1RFU1RfTUFDUk9fUldfQ05UTCAgICAgICAgICAgICAgICAgICAgMHgwMDE5CisjZGVmaW5lIHBsbERJU1BfVEVTVF9NQUNST19SV19XUklURSAgICAgICAgICAgICAgICAgMHgwMDFBCisjZGVmaW5lIHBsbERJU1BfVEVTVF9NQUNST19SV19SRUFEICAgICAgICAgICAgICAgICAgMHgwMDFCCisjZGVmaW5lIHBsbERJU1BfVEVTVF9NQUNST19SV19EQVRBICAgICAgICAgICAgICAgICAgMHgwMDFDCisjZGVmaW5lIHBsbERJU1BfVEVTVF9NQUNST19SV19DTlRMICAgICAgICAgICAgICAgICAgMHgwMDFECisjZGVmaW5lIHBsbFNDTEtfQ05UTDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDFFCisjZGVmaW5lIHBsbE1DTEtfTUlTQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDFGCisjZGVmaW5lIHBsbFRWX1BMTF9GSU5FX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwCisjZGVmaW5lIHBsbFRWX1BMTF9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIxCisjZGVmaW5lIHBsbFRWX1BMTF9DTlRMMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIyCisjZGVmaW5lIHBsbFRWX0RUT19JTkNSRU1FTlRTICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIzCisjZGVmaW5lIHBsbFNQTExfQVVYX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDI0CisjZGVmaW5lIHBsbE1QTExfQVVYX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDI1CisjZGVmaW5lIHBsbFAyUExMX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDJBCisjZGVmaW5lIHBsbFAyUExMX1JFRl9ESVYgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDJCCisjZGVmaW5lIHBsbFAyUExMX0RJVl8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDJDCisjZGVmaW5lIHBsbFBJWENMS1NfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDJECisjZGVmaW5lIHBsbEhUT1RBTDJfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDJFCisjZGVmaW5lIHBsbFNTUExMX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDMwCisjZGVmaW5lIHBsbFNTUExMX1JFRl9ESVYgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDMxCisjZGVmaW5lIHBsbFNTUExMX0RJVl8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDMyCisjZGVmaW5lIHBsbFNTX0lOVF9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDMzCisjZGVmaW5lIHBsbFNTX1RTVF9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDM0CisjZGVmaW5lIHBsbFNDTEtfTU9SRV9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDM1CisKKyNkZWZpbmUgaXhNQ19QRVJGX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMAorI2RlZmluZSBpeE1DX1BFUkZfU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxCisjZGVmaW5lIGl4TUNfUEVSRl9SRUdJT05fMCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgaXhNQ19QRVJGX1JFR0lPTl8xICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMworI2RlZmluZSBpeE1DX1BFUkZfQ09VTlRfMCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIGl4TUNfUEVSRl9DT1VOVF8xICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDUKKyNkZWZpbmUgaXhNQ19QRVJGX0NPVU5UXzIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNgorI2RlZmluZSBpeE1DX1BFUkZfQ09VTlRfMyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA3CisjZGVmaW5lIGl4TUNfUEVSRl9DT1VOVF9NRU1DSF9BICAgICAgICAgICAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgaXhNQ19QRVJGX0NPVU5UX01FTUNIX0IgICAgICAgICAgICAgICAgICAgIDB4MDAwOQorI2RlZmluZSBpeE1DX0lNUF9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBBCisjZGVmaW5lIGl4TUNfQ0hQX0lPX0NOVExfQTAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMEIKKyNkZWZpbmUgaXhNQ19DSFBfSU9fQ05UTF9BMSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwQworI2RlZmluZSBpeE1DX0NIUF9JT19DTlRMX0IwICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBECisjZGVmaW5lIGl4TUNfQ0hQX0lPX0NOVExfQjEgICAgICAgICAgICAgICAgICAgICAgICAweDAwMEUKKyNkZWZpbmUgaXhNQ19JTVBfQ05UTF8wICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwRgorI2RlZmluZSBpeFRDX01JU01BVENIXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIGl4VENfTUlTTUFUQ0hfMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTEKKyNkZWZpbmUgaXhNQ19CSVNUX0NUUkwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMgorI2RlZmluZSBpeFJFR19DT0xMQVJfV1JJVEUgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEzCisjZGVmaW5lIGl4UkVHX0NPTExBUl9SRUFEICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTQKKyNkZWZpbmUgaXhSMzAwX01DX0lNUF9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxOAorI2RlZmluZSBpeFIzMDBfTUNfQ0hQX0lPX0NOVExfQTAgICAgICAgICAgICAgICAgICAgMHgwMDE5CisjZGVmaW5lIGl4UjMwMF9NQ19DSFBfSU9fQ05UTF9BMSAgICAgICAgICAgICAgICAgICAweDAwMWEKKyNkZWZpbmUgaXhSMzAwX01DX0NIUF9JT19DTlRMX0IwICAgICAgICAgICAgICAgICAgIDB4MDAxYgorI2RlZmluZSBpeFIzMDBfTUNfQ0hQX0lPX0NOVExfQjEgICAgICAgICAgICAgICAgICAgMHgwMDFjCisjZGVmaW5lIGl4UjMwMF9NQ19DSFBfSU9fQ05UTF9DMCAgICAgICAgICAgICAgICAgICAweDAwMWQKKyNkZWZpbmUgaXhSMzAwX01DX0NIUF9JT19DTlRMX0MxICAgICAgICAgICAgICAgICAgIDB4MDAxZQorI2RlZmluZSBpeFIzMDBfTUNfQ0hQX0lPX0NOVExfRDAgICAgICAgICAgICAgICAgICAgMHgwMDFmCisjZGVmaW5lIGl4UjMwMF9NQ19DSFBfSU9fQ05UTF9EMSAgICAgICAgICAgICAgICAgICAweDAwMjAKKyNkZWZpbmUgaXhSMzAwX01DX0lNUF9DTlRMXzAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMQorI2RlZmluZSBpeFIzMDBfTUNfRUxQSURBX0NOVEwgICAgICAgICAgICAgICAgICAgICAgMHgwMDIyCisjZGVmaW5lIGl4UjMwMF9NQ19DSFBfSU9fT0VfQ05UTF9DRCAgICAgICAgICAgICAgICAweDAwMjMKKyNkZWZpbmUgaXhSMzAwX01DX1JFQURfQ05UTF9DRCAgICAgICAgICAgICAgICAgICAgIDB4MDAyNAorI2RlZmluZSBpeFIzMDBfTUNfTUNfSU5JVF9XUl9MQVRfVElNRVIgICAgICAgICAgICAgMHgwMDI1CisjZGVmaW5lIGl4UjMwMF9NQ19ERUJVR19DTlRMICAgICAgICAgICAgICAgICAgICAgICAweDAwMjYKKyNkZWZpbmUgaXhSMzAwX01DX0JJU1RfQ05UTF8wICAgICAgICAgICAgICAgICAgICAgIDB4MDAyOAorI2RlZmluZSBpeFIzMDBfTUNfQklTVF9DTlRMXzEgICAgICAgICAgICAgICAgICAgICAgMHgwMDI5CisjZGVmaW5lIGl4UjMwMF9NQ19CSVNUX0NOVExfMiAgICAgICAgICAgICAgICAgICAgICAweDAwMmEKKyNkZWZpbmUgaXhSMzAwX01DX0JJU1RfQ05UTF8zICAgICAgICAgICAgICAgICAgICAgIDB4MDAyYgorI2RlZmluZSBpeFIzMDBfTUNfQklTVF9DTlRMXzQgICAgICAgICAgICAgICAgICAgICAgMHgwMDJjCisjZGVmaW5lIGl4UjMwMF9NQ19CSVNUX0NOVExfNSAgICAgICAgICAgICAgICAgICAgICAweDAwMmQKKyNkZWZpbmUgaXhSMzAwX01DX0lNUF9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyZQorI2RlZmluZSBpeFIzMDBfTUNfRExMX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDJmCisjZGVmaW5lIE5CX1RPTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE1QworCisKKyNlbmRpZgkvKiBfUkFERU9OX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS92aWRlby9zMWQxM3h4eGZiLmggYi9pbmNsdWRlL3ZpZGVvL3MxZDEzeHh4ZmIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDZjYzg4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS92aWRlby9zMWQxM3h4eGZiLmgKQEAgLTAsMCArMSwxNjYgQEAKKy8qIGRyaXZlcnMvdmlkZW8vczFkM3h4eGZiLmgKKyAqCisgKiAoYykgMjAwNCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqIChjKSAyMDA1IFRoaWJhdXQgVkFSRU5FIDx2YXJlbmV0QHBhcmlzYy1saW51eC5vcmc+CisgKgorICogSGVhZGVyIGZpbGUgZm9yIEVwc29uIFMxRDEzWFhYIGRyaXZlciBjb2RlCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZglTMUQxM1hYWEZCX0gKKyNkZWZpbmUJUzFEMTNYWFhGQl9ICisKKyNkZWZpbmUgUzFEX1BBTEVUVEVfU0laRQkJMjU2CisjZGVmaW5lIFMxRF9DSElQX1JFVgkJCTcJLyogZXhwZWN0ZWQgY2hpcCByZXZpc2lvbiBudW1iZXIgZm9yIHMxZDEzODA2ICovCisjZGVmaW5lIFMxRF9GQklECQkJIlMxRDEzODA2IgorI2RlZmluZSBTMURfREVWSUNFTkFNRQkJCSJzMWQxMzgwNmZiIgorCisvKiByZWdpc3RlciBkZWZpbml0aW9ucyAodGVzdGVkIG9uIHMxZDEzODk2KSAqLworI2RlZmluZSBTMURSRUdfUkVWX0NPREUJCQkweDAwMDAJLyogUmV2aXNpb24gQ29kZSBSZWdpc3RlciAqLworI2RlZmluZSBTMURSRUdfTUlTQwkJCTB4MDAwMQkvKiBNaXNjZWxsYW5lb3VzIFJlZ2lzdGVyICovCisjZGVmaW5lIFMxRFJFR19HUElPX0NORjAJCTB4MDAwNAkvKiBHZW5lcmFsIElPIFBpbnMgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAwICovCisjZGVmaW5lIFMxRFJFR19HUElPX0NORjEJCTB4MDAwNQkvKiBHZW5lcmFsIElPIFBpbnMgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxICovCisjZGVmaW5lIFMxRFJFR19HUElPX0NUTDAJCTB4MDAwOAkvKiBHZW5lcmFsIElPIFBpbnMgQ29udHJvbCBSZWdpc3RlciAwICovCisjZGVmaW5lIFMxRFJFR19HUElPX0NUTDEJCTB4MDAwOQkvKiBHZW5lcmFsIElPIFBpbnMgQ29udHJvbCBSZWdpc3RlciAxICovCisjZGVmaW5lIFMxRFJFR19DTkZfU1RBVFVTCQkweDAwMEMJLyogQ29uZmlndXJhdGlvbiBTdGF0dXMgUmVhZGJhY2sgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUzFEUkVHX0NMS19DTkYJCQkweDAwMTAJLyogTWVtb3J5IENsb2NrIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUzFEUkVHX0xDRF9DTEtfQ05GCQkweDAwMTQJLyogTENEIFBpeGVsIENsb2NrIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUzFEUkVHX0NSVF9DTEtfQ05GCQkweDAwMTgJLyogQ1JUL1RWIFBpeGVsIENsb2NrIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUzFEUkVHX01QTFVHX0NMS19DTkYJCTB4MDAxQwkvKiBNZWRpYVBsdWcgQ2xvY2sgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworI2RlZmluZSBTMURSRUdfQ1BVMk1FTV9XU1RfU0VMCQkweDAwMUUJLyogQ1BVIFRvIE1lbW9yeSBXYWl0IFN0YXRlIFNlbGVjdCBSZWdpc3RlciAqLworI2RlZmluZSBTMURSRUdfTUVNX0NORgkJCTB4MDAyMAkvKiBNZW1vcnkgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworI2RlZmluZSBTMURSRUdfU0RSQU1fUkVGX1JBVEUJCTB4MDAyMQkvKiBTRFJBTSBSZWZyZXNoIFJhdGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUzFEUkVHX1NEUkFNX1RDMAkJMHgwMDJBCS8qIFNEUkFNIFRpbWluZyBDb250cm9sIFJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUgUzFEUkVHX1NEUkFNX1RDMQkJMHgwMDJCCS8qIFNEUkFNIFRpbWluZyBDb250cm9sIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgUzFEUkVHX1BBTkVMX1RZUEUJCTB4MDAzMAkvKiBQYW5lbCBUeXBlIFJlZ2lzdGVyICovCisjZGVmaW5lIFMxRFJFR19NT0RfUkFURQkJCTB4MDAzMQkvKiBNT0QgUmF0ZSBSZWdpc3RlciAqLworI2RlZmluZSBTMURSRUdfTENEX0RJU1BfSFdJRFRICQkweDAwMzIJLyogTENEIEhvcml6b250YWwgRGlzcGxheSBXaWR0aCBSZWdpc3RlcjogKCh2YWwpKzEpKjgpPXBpeC9saW5lICovCisjZGVmaW5lIFMxRFJFR19MQ0RfTkRJU1BfSFBFUgkJMHgwMDM0CS8qIExDRCBIb3Jpem9udGFsIE5vbi1EaXNwbGF5IFBlcmlvZCBSZWdpc3RlcjogKCh2YWwpKzEpKjgpPU5EcGl4L2xpbmUgKi8KKyNkZWZpbmUgUzFEUkVHX1RGVF9GUExJTkVfU1RBUlQJCTB4MDAzNQkvKiBURlQgRlBMSU5FIFN0YXJ0IFBvc2l0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lIFMxRFJFR19URlRfRlBMSU5FX1BXSURUSAkweDAwMzYJLyogVEZUIEZQTElORSBQdWxzZSBXaWR0aCBSZWdpc3Rlci4gKi8KKyNkZWZpbmUgUzFEUkVHX0xDRF9ESVNQX1ZIRUlHSFQwCTB4MDAzOAkvKiBMQ0QgVmVydGljYWwgRGlzcGxheSBIZWlnaHQgUmVnaXN0ZXIgMCAqLworI2RlZmluZSBTMURSRUdfTENEX0RJU1BfVkhFSUdIVDEJMHgwMDM5CS8qIExDRCBWZXJ0aWNhbCBEaXNwbGF5IEhlaWdodCBSZWdpc3RlciAxICovCisjZGVmaW5lIFMxRFJFR19MQ0RfTkRJU1BfVlBFUgkJMHgwMDNBCS8qIExDRCBWZXJ0aWNhbCBOb24tRGlzcGxheSBQZXJpb2QgUmVnaXN0ZXI6ICh2YWwpKzE9TkRsaW5lcyAqLworI2RlZmluZSBTMURSRUdfVEZUX0ZQRlJBTUVfU1RBUlQJMHgwMDNCCS8qIFRGVCBGUEZSQU1FIFN0YXJ0IFBvc2l0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lIFMxRFJFR19URlRfRlBGUkFNRV9QV0lEVEgJMHgwMDNDCS8qIFRGVCBGUEZSQU1FIFB1bHNlIFdpZHRoIFJlZ2lzdGVyICovCisjZGVmaW5lIFMxRFJFR19MQ0RfRElTUF9NT0RFCQkweDAwNDAJLyogTENEIERpc3BsYXkgTW9kZSBSZWdpc3RlciAqLworI2RlZmluZSBTMURSRUdfTENEX01JU0MJCQkweDAwNDEJLyogTENEIE1pc2NlbGxhbmVvdXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUzFEUkVHX0xDRF9ESVNQX1NUQVJUMAkJMHgwMDQyCS8qIExDRCBEaXNwbGF5IFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgMCAqLworI2RlZmluZSBTMURSRUdfTENEX0RJU1BfU1RBUlQxCQkweDAwNDMJLyogTENEIERpc3BsYXkgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAxICovCisjZGVmaW5lIFMxRFJFR19MQ0RfRElTUF9TVEFSVDIJCTB4MDA0NAkvKiBMQ0QgRGlzcGxheSBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgUzFEUkVHX0xDRF9NRU1fT0ZGMAkJMHgwMDQ2CS8qIExDRCBNZW1vcnkgQWRkcmVzcyBPZmZzZXQgUmVnaXN0ZXIgMCAqLworI2RlZmluZSBTMURSRUdfTENEX01FTV9PRkYxCQkweDAwNDcJLyogTENEIE1lbW9yeSBBZGRyZXNzIE9mZnNldCBSZWdpc3RlciAxICovCisjZGVmaW5lIFMxRFJFR19MQ0RfUElYX1BBTgkJMHgwMDQ4CS8qIExDRCBQaXhlbCBQYW5uaW5nIFJlZ2lzdGVyICovCisjZGVmaW5lIFMxRFJFR19MQ0RfRElTUF9GSUZPX0hUQwkweDAwNEEJLyogTENEIERpc3BsYXkgRklGTyBIaWdoIFRocmVzaG9sZCBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFMxRFJFR19MQ0RfRElTUF9GSUZPX0xUQwkweDAwNEIJLyogTENEIERpc3BsYXkgRklGTyBMb3cgVGhyZXNob2xkIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUzFEUkVHX0NSVF9ESVNQX0hXSURUSAkJMHgwMDUwCS8qIENSVC9UViBIb3Jpem9udGFsIERpc3BsYXkgV2lkdGggUmVnaXN0ZXI6ICgodmFsKSsxKSo4KT1waXgvbGluZSAqLworI2RlZmluZSBTMURSRUdfQ1JUX05ESVNQX0hQRVIJCTB4MDA1MgkvKiBDUlQvVFYgSG9yaXpvbnRhbCBOb24tRGlzcGxheSBQZXJpb2QgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUzFEUkVHX0NSVF9IUlRDX1NUQVJUCQkweDAwNTMJLyogQ1JUL1RWIEhSVEMgU3RhcnQgUG9zaXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUzFEUkVHX0NSVF9IUlRDX1BXSURUSAkJMHgwMDU0CS8qIENSVC9UViBIUlRDIFB1bHNlIFdpZHRoIFJlZ2lzdGVyICovCisjZGVmaW5lIFMxRFJFR19DUlRfRElTUF9WSEVJR0hUMAkweDAwNTYJLyogQ1JUL1RWIFZlcnRpY2FsIERpc3BsYXkgSGVpZ2h0IFJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUgUzFEUkVHX0NSVF9ESVNQX1ZIRUlHSFQxCTB4MDA1NwkvKiBDUlQvVFYgVmVydGljYWwgRGlzcGxheSBIZWlnaHQgUmVnaXN0ZXIgMSAqLworI2RlZmluZSBTMURSRUdfQ1JUX05ESVNQX1ZQRVIJCTB4MDA1OAkvKiBDUlQvVFYgVmVydGljYWwgTm9uLURpc3BsYXkgUGVyaW9kIFJlZ2lzdGVyICovCisjZGVmaW5lIFMxRFJFR19DUlRfVlJUQ19TVEFSVAkJMHgwMDU5CS8qIENSVC9UViBWUlRDIFN0YXJ0IFBvc2l0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lIFMxRFJFR19DUlRfVlJUQ19QV0lEVEgJCTB4MDA1QQkvKiBDUlQvVFYgVlJUQyBQdWxzZSBXaWR0aCBSZWdpc3RlciAqLworI2RlZmluZSBTMURSRUdfVFZfT1VUX0NUTAkJMHgwMDVCCS8qIFRWIE91dHB1dCBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFMxRFJFR19DUlRfRElTUF9NT0RFCQkweDAwNjAJLyogQ1JUL1RWIERpc3BsYXkgTW9kZSBSZWdpc3RlciAqLworI2RlZmluZSBTMURSRUdfQ1JUX0RJU1BfU1RBUlQwCQkweDAwNjIJLyogQ1JUL1RWIERpc3BsYXkgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAwICovCisjZGVmaW5lIFMxRFJFR19DUlRfRElTUF9TVEFSVDEJCTB4MDA2MwkvKiBDUlQvVFYgRGlzcGxheSBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgUzFEUkVHX0NSVF9ESVNQX1NUQVJUMgkJMHgwMDY0CS8qIENSVC9UViBEaXNwbGF5IFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgMiAqLworI2RlZmluZSBTMURSRUdfQ1JUX01FTV9PRkYwCQkweDAwNjYJLyogQ1JUL1RWIE1lbW9yeSBBZGRyZXNzIE9mZnNldCBSZWdpc3RlciAwICovCisjZGVmaW5lIFMxRFJFR19DUlRfTUVNX09GRjEJCTB4MDA2NwkvKiBDUlQvVFYgTWVtb3J5IEFkZHJlc3MgT2Zmc2V0IFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgUzFEUkVHX0NSVF9QSVhfUEFOCQkweDAwNjgJLyogQ1JUL1RWIFBpeGVsIFBhbm5pbmcgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUzFEUkVHX0NSVF9ESVNQX0ZJRk9fSFRDCTB4MDA2QQkvKiBDUlQvVFYgRGlzcGxheSBGSUZPIEhpZ2ggVGhyZXNob2xkIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUzFEUkVHX0NSVF9ESVNQX0ZJRk9fTFRDCTB4MDA2QgkvKiBDUlQvVFYgRGlzcGxheSBGSUZPIExvdyBUaHJlc2hvbGQgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBTMURSRUdfTENEX0NVUl9DVEwJCTB4MDA3MAkvKiBMQ0QgSW5rL0N1cnNvciBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFMxRFJFR19MQ0RfQ1VSX1NUQVJUCQkweDAwNzEJLyogTENEIEluay9DdXJzb3IgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZSBTMURSRUdfTENEX0NVUl9YUE9TMAkJMHgwMDcyCS8qIExDRCBDdXJzb3IgWCBQb3NpdGlvbiBSZWdpc3RlciAwICovCisjZGVmaW5lIFMxRFJFR19MQ0RfQ1VSX1hQT1MxCQkweDAwNzMJLyogTENEIEN1cnNvciBYIFBvc2l0aW9uIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgUzFEUkVHX0xDRF9DVVJfWVBPUzAJCTB4MDA3NAkvKiBMQ0QgQ3Vyc29yIFkgUG9zaXRpb24gUmVnaXN0ZXIgMCAqLworI2RlZmluZSBTMURSRUdfTENEX0NVUl9ZUE9TMQkJMHgwMDc1CS8qIExDRCBDdXJzb3IgWSBQb3NpdGlvbiBSZWdpc3RlciAxICovCisjZGVmaW5lIFMxRFJFR19MQ0RfQ1VSX0JDVEwwCQkweDAwNzYJLyogTENEIEluay9DdXJzb3IgQmx1ZSBDb2xvciAwIFJlZ2lzdGVyICovCisjZGVmaW5lIFMxRFJFR19MQ0RfQ1VSX0dDVEwwCQkweDAwNzcJLyogTENEIEluay9DdXJzb3IgR3JlZW4gQ29sb3IgMCBSZWdpc3RlciAqLworI2RlZmluZSBTMURSRUdfTENEX0NVUl9SQ1RMMAkJMHgwMDc4CS8qIExDRCBJbmsvQ3Vyc29yIFJlZCBDb2xvciAwIFJlZ2lzdGVyICovCisjZGVmaW5lIFMxRFJFR19MQ0RfQ1VSX0JDVEwxCQkweDAwN0EJLyogTENEIEluay9DdXJzb3IgQmx1ZSBDb2xvciAxIFJlZ2lzdGVyICovCisjZGVmaW5lIFMxRFJFR19MQ0RfQ1VSX0dDVEwxCQkweDAwN0IJLyogTENEIEluay9DdXJzb3IgR3JlZW4gQ29sb3IgMSBSZWdpc3RlciAqLworI2RlZmluZSBTMURSRUdfTENEX0NVUl9SQ1RMMQkJMHgwMDdDCS8qIExDRCBJbmsvQ3Vyc29yIFJlZCBDb2xvciAxIFJlZ2lzdGVyICovCisjZGVmaW5lIFMxRFJFR19MQ0RfQ1VSX0ZJRk9fSFRDCQkweDAwN0UJLyogTENEIEluay9DdXJzb3IgRklGTyBIaWdoIFRocmVzaG9sZCBSZWdpc3RlciAqLworI2RlZmluZSBTMURSRUdfQ1JUX0NVUl9DVEwJCTB4MDA4MAkvKiBDUlQvVFYgSW5rL0N1cnNvciBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFMxRFJFR19DUlRfQ1VSX1NUQVJUCQkweDAwODEJLyogQ1JUL1RWIEluay9DdXJzb3IgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZSBTMURSRUdfQ1JUX0NVUl9YUE9TMAkJMHgwMDgyCS8qIENSVC9UViBDdXJzb3IgWCBQb3NpdGlvbiBSZWdpc3RlciAwICovCisjZGVmaW5lIFMxRFJFR19DUlRfQ1VSX1hQT1MxCQkweDAwODMJLyogQ1JUL1RWIEN1cnNvciBYIFBvc2l0aW9uIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgUzFEUkVHX0NSVF9DVVJfWVBPUzAJCTB4MDA4NAkvKiBDUlQvVFYgQ3Vyc29yIFkgUG9zaXRpb24gUmVnaXN0ZXIgMCAqLworI2RlZmluZSBTMURSRUdfQ1JUX0NVUl9ZUE9TMQkJMHgwMDg1CS8qIENSVC9UViBDdXJzb3IgWSBQb3NpdGlvbiBSZWdpc3RlciAxICovCisjZGVmaW5lIFMxRFJFR19DUlRfQ1VSX0JDVEwwCQkweDAwODYJLyogQ1JUL1RWIEluay9DdXJzb3IgQmx1ZSBDb2xvciAwIFJlZ2lzdGVyICovCisjZGVmaW5lIFMxRFJFR19DUlRfQ1VSX0dDVEwwCQkweDAwODcJLyogQ1JUL1RWIEluay9DdXJzb3IgR3JlZW4gQ29sb3IgMCBSZWdpc3RlciAqLworI2RlZmluZSBTMURSRUdfQ1JUX0NVUl9SQ1RMMAkJMHgwMDg4CS8qIENSVC9UViBJbmsvQ3Vyc29yIFJlZCBDb2xvciAwIFJlZ2lzdGVyICovCisjZGVmaW5lIFMxRFJFR19DUlRfQ1VSX0JDVEwxCQkweDAwOEEJLyogQ1JUL1RWIEluay9DdXJzb3IgQmx1ZSBDb2xvciAxIFJlZ2lzdGVyICovCisjZGVmaW5lIFMxRFJFR19DUlRfQ1VSX0dDVEwxCQkweDAwOEIJLyogQ1JUL1RWIEluay9DdXJzb3IgR3JlZW4gQ29sb3IgMSBSZWdpc3RlciAqLworI2RlZmluZSBTMURSRUdfQ1JUX0NVUl9SQ1RMMQkJMHgwMDhDCS8qIENSVC9UViBJbmsvQ3Vyc29yIFJlZCBDb2xvciAxIFJlZ2lzdGVyICovCisjZGVmaW5lIFMxRFJFR19DUlRfQ1VSX0ZJRk9fSFRDCQkweDAwOEUJLyogQ1JUL1RWIEluay9DdXJzb3IgRklGTyBIaWdoIFRocmVzaG9sZCBSZWdpc3RlciAqLworI2RlZmluZSBTMURSRUdfQkJMVF9DVEwwCQkweDAxMDAJLyogQml0QkxUIENvbnRyb2wgUmVnaXN0ZXIgMCAqLworI2RlZmluZSBTMURSRUdfQkJMVF9DVEwxCQkweDAxMDEJLyogQml0QkxUIENvbnRyb2wgUmVnaXN0ZXIgMSAqLworI2RlZmluZSBTMURSRUdfQkJMVF9DQ19FWFAJCTB4MDEwMgkvKiBCaXRCTFQgQ29kZS9Db2xvciBFeHBhbnNpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUzFEUkVHX0JCTFRfT1AJCQkweDAxMDMJLyogQml0QkxUIE9wZXJhdGlvbiBSZWdpc3RlciAqLworI2RlZmluZSBTMURSRUdfQkJMVF9TUkNfU1RBUlQwCQkweDAxMDQJLyogQml0QkxUIFNvdXJjZSBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUgUzFEUkVHX0JCTFRfU1JDX1NUQVJUMQkJMHgwMTA1CS8qIEJpdEJMVCBTb3VyY2UgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAxICovCisjZGVmaW5lIFMxRFJFR19CQkxUX1NSQ19TVEFSVDIJCTB4MDEwNgkvKiBCaXRCTFQgU291cmNlIFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgMiAqLworI2RlZmluZSBTMURSRUdfQkJMVF9EU1RfU1RBUlQwCQkweDAxMDgJLyogQml0QkxUIERlc3RpbmF0aW9uIFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgMCAqLworI2RlZmluZSBTMURSRUdfQkJMVF9EU1RfU1RBUlQxCQkweDAxMDkJLyogQml0QkxUIERlc3RpbmF0aW9uIFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgMSAqLworI2RlZmluZSBTMURSRUdfQkJMVF9EU1RfU1RBUlQyCQkweDAxMEEJLyogQml0QkxUIERlc3RpbmF0aW9uIFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgMiAqLworI2RlZmluZSBTMURSRUdfQkJMVF9NRU1fT0ZGMAkJMHgwMTBDCS8qIEJpdEJMVCBNZW1vcnkgQWRkcmVzcyBPZmZzZXQgUmVnaXN0ZXIgMCAqLworI2RlZmluZSBTMURSRUdfQkJMVF9NRU1fT0ZGMQkJMHgwMTBECS8qIEJpdEJMVCBNZW1vcnkgQWRkcmVzcyBPZmZzZXQgUmVnaXN0ZXIgMSAqLworI2RlZmluZSBTMURSRUdfQkJMVF9XSURUSDAJCTB4MDExMAkvKiBCaXRCTFQgV2lkdGggUmVnaXN0ZXIgMCAqLworI2RlZmluZSBTMURSRUdfQkJMVF9XSURUSDEJCTB4MDExMQkvKiBCaXRCTFQgV2lkdGggUmVnaXN0ZXIgMSAqLworI2RlZmluZSBTMURSRUdfQkJMVF9IRUlHSFQwCQkweDAxMTIJLyogQml0QkxUIEhlaWdodCBSZWdpc3RlciAwICovCisjZGVmaW5lIFMxRFJFR19CQkxUX0hFSUdIVDEJCTB4MDExMwkvKiBCaXRCTFQgSGVpZ2h0IFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgUzFEUkVHX0JCTFRfQkdDMAkJMHgwMTE0CS8qIEJpdEJMVCBCYWNrZ3JvdW5kIENvbG9yIFJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUgUzFEUkVHX0JCTFRfQkdDMQkJMHgwMTE1CS8qIEJpdEJMVCBCYWNrZ3JvdW5kIENvbG9yIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgUzFEUkVHX0JCTFRfRkdDMAkJMHgwMTE4CS8qIEJpdEJMVCBGb3JlZ3JvdW5kIENvbG9yIFJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUgUzFEUkVHX0JCTFRfRkdDMQkJMHgwMTE5CS8qIEJpdEJMVCBGb3JlZ3JvdW5kIENvbG9yIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgUzFEUkVHX0xLVVBfTU9ERQkJMHgwMUUwCS8qIExvb2stVXAgVGFibGUgTW9kZSBSZWdpc3RlciAqLworI2RlZmluZSBTMURSRUdfTEtVUF9BRERSCQkweDAxRTIJLyogTG9vay1VcCBUYWJsZSBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lIFMxRFJFR19MS1VQX0RBVEEJCTB4MDFFNAkvKiBMb29rLVVwIFRhYmxlIERhdGEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUzFEUkVHX1BTX0NORgkJCTB4MDFGMAkvKiBQb3dlciBTYXZlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUzFEUkVHX1BTX1NUQVRVUwkJMHgwMUYxCS8qIFBvd2VyIFNhdmUgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIFMxRFJFR19DUFUyTUVNX1dET0dUCQkweDAxRjQJLyogQ1BVLXRvLU1lbW9yeSBBY2Nlc3MgV2F0Y2hkb2cgVGltZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUzFEUkVHX0NPTV9ESVNQX01PREUJCTB4MDFGQwkvKiBDb21tb24gRGlzcGxheSBNb2RlIFJlZ2lzdGVyICovCisKKyNkZWZpbmUgUzFEUkVHX0RFTEFZT0ZGCQkJMHhGRkZFCisjZGVmaW5lIFMxRFJFR19ERUxBWU9OCQkJMHhGRkZGCisKKy8qIE5vdGU6IGFsbCBhYm92ZSBkZWZpbmVzIHNob3VsZCBnbyBpbiBzZXBhcmF0ZSBoZWFkZXIgZmlsZXMKKyAgIHdoZW4gaW1wbGVtZW50aW5nIG90aGVyIFMxRDEzeHh4IGNoaXAgc3VwcG9ydC4gKi8KKworc3RydWN0IHMxZDEzeHh4ZmJfcmVndmFsIHsKKwl1MTYJYWRkcjsKKwl1OAl2YWx1ZTsKK307CisKKworc3RydWN0IHMxZDEzeHh4ZmJfcGFyIHsKKwl2b2lkIF9faW9tZW0JKnJlZ3M7CisJdW5zaWduZWQgY2hhcglkaXNwbGF5OworCisJdW5zaWduZWQgaW50CXBzZXVkb19wYWxldHRlWzE2XTsKKyNpZmRlZiBDT05GSUdfUE0KKwl2b2lkCQkqcmVnc19zYXZlOwkvKiBwbSBzYXZlcyBhbGwgcmVnaXN0ZXJzIGhlcmUgKi8KKwl2b2lkCQkqZGlzcF9zYXZlOwkvKiBwbSBzYXZlcyBlbnRpcmUgc2NyZWVuIGhlcmUgKi8KKyNlbmRpZgorfTsKKworc3RydWN0IHMxZDEzeHh4ZmJfcGRhdGEgeworCWNvbnN0IHN0cnVjdCBzMWQxM3h4eGZiX3JlZ3ZhbAkqaW5pdHJlZ3M7CisJY29uc3QgdW5zaWduZWQgaW50CQlpbml0cmVnc3NpemU7CisJdm9pZAkJCQkoKnBsYXRmb3JtX2luaXRfdmlkZW8pKHZvaWQpOworI2lmZGVmIENPTkZJR19QTQorCWludAkJCQkoKnBsYXRmb3JtX3N1c3BlbmRfdmlkZW8pKHZvaWQpOworCWludAkJCQkoKnBsYXRmb3JtX3Jlc3VtZV92aWRlbykodm9pZCk7CisjZW5kaWYKK307CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9pbmNsdWRlL3ZpZGVvL3MzYmxpdC5oIGIvaW5jbHVkZS92aWRlby9zM2JsaXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWRiNjMxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS92aWRlby9zM2JsaXQuaApAQCAtMCwwICsxLDc5IEBACisjaWZuZGVmIF9WSURFT19TM0JMSVRfSAorI2RlZmluZSBfVklERU9fUzNCTElUX0gKKworLyogczMgY29tbWFuZHMgKi8KKyNkZWZpbmUgUzNfQklUQkxUICAgICAgIDB4YzAxMQorI2RlZmluZSBTM19UV09QT0lOVExJTkUgMHgyODExCisjZGVmaW5lIFMzX0ZJTExFRFJFQ1QgICAweDQwYjEKKworI2RlZmluZSBTM19GSUZPX0VNUFRZIDB4MDQwMAorI2RlZmluZSBTM19IRFdfQlVTWSAgIDB4MDIwMAorCisvKiBFbmhhbmNlZCByZWdpc3RlciBtYXBwaW5nIChNTUlPIG1vZGUpICovCisKKyNkZWZpbmUgUzNfUkVBRF9TRUwgICAgICAweGJlZTggLyogb2Zmc2V0IGYgKi8KKyNkZWZpbmUgUzNfTVVMVF9NSVNDICAgICAweGJlZTggLyogb2Zmc2V0IGUgKi8KKyNkZWZpbmUgUzNfRVJSX1RFUk0gICAgICAweDkyZTgKKyNkZWZpbmUgUzNfRlJHRF9DT0xPUiAgICAweGE2ZTgKKyNkZWZpbmUgUzNfQktHRF9DT0xPUiAgICAweGEyZTgKKyNkZWZpbmUgUzNfUElYRUxfQ05UTCAgICAweGJlZTggLyogb2Zmc2V0IGEgKi8KKyNkZWZpbmUgUzNfRlJHRF9NSVggICAgICAweGJhZTgKKyNkZWZpbmUgUzNfQktHRF9NSVggICAgICAweGI2ZTgKKyNkZWZpbmUgUzNfQ1VSX1kgICAgICAgICAweDgyZTgKKyNkZWZpbmUgUzNfQ1VSX1ggICAgICAgICAweDg2ZTgKKyNkZWZpbmUgUzNfREVTVFlfQVhTVFAgICAweDhhZTgKKyNkZWZpbmUgUzNfREVTVFhfRElBU1RQICAweDhlZTgKKyNkZWZpbmUgUzNfTUlOX0FYSVNfUENOVCAweGJlZTggLyogb2Zmc2V0IDAgKi8KKyNkZWZpbmUgUzNfTUFKX0FYSVNfUENOVCAweDk2ZTgKKyNkZWZpbmUgUzNfQ01EICAgICAgICAgICAweDlhZTgKKyNkZWZpbmUgUzNfR1BfU1RBVCAgICAgICAweDlhZTgKKyNkZWZpbmUgUzNfQURWRlVOQ19DTlRMICAweDRhZTgKKyNkZWZpbmUgUzNfV1JUX01BU0sgICAgICAweGFhZTgKKyNkZWZpbmUgUzNfUkRfTUFTSyAgICAgICAweGFlZTgKKworLyogRW5oYW5jZWQgcmVnaXN0ZXIgbWFwcGluZyAoUGFja2VkIE1NSU8gbW9kZSwgd3JpdGUgb25seSkgKi8KKyNkZWZpbmUgUzNfQUxUX0NVUlhZICAgICAweDgxMDAKKyNkZWZpbmUgUzNfQUxUX0NVUlhZMiAgICAweDgxMDQKKyNkZWZpbmUgUzNfQUxUX1NURVAgICAgICAweDgxMDgKKyNkZWZpbmUgUzNfQUxUX1NURVAyICAgICAweDgxMGMKKyNkZWZpbmUgUzNfQUxUX0VSUiAgICAgICAweDgxMTAKKyNkZWZpbmUgUzNfQUxUX0NNRCAgICAgICAweDgxMTgKKyNkZWZpbmUgUzNfQUxUX01JWCAgICAgICAweDgxMzQKKyNkZWZpbmUgUzNfQUxUX1BDTlQgICAgICAweDgxNDgKKyNkZWZpbmUgUzNfQUxUX1BBVCAgICAgICAweDgxNjgKKworLyogRHJhd2luZyBtb2RlcyAqLworI2RlZmluZSBTM19OT1RDVVIgICAgICAgICAgMHgwMDAwCisjZGVmaW5lIFMzX0xPR0lDQUxaRVJPICAgICAweDAwMDEKKyNkZWZpbmUgUzNfTE9HSUNBTE9ORSAgICAgIDB4MDAwMgorI2RlZmluZSBTM19MRUFWRUFTSVMgICAgICAgMHgwMDAzCisjZGVmaW5lIFMzX05PVE5FVyAgICAgICAgICAweDAwMDQKKyNkZWZpbmUgUzNfQ1VSWE9STkVXICAgICAgIDB4MDAwNQorI2RlZmluZSBTM19OT1RfQ1VSWE9STkVXICAgMHgwMDA2CisjZGVmaW5lIFMzX05FVyAgICAgICAgICAgICAweDAwMDcKKyNkZWZpbmUgUzNfTk9UQ1VST1JOT1RORVcgIDB4MDAwOAorI2RlZmluZSBTM19DVVJPUk5PVE5FVyAgICAgMHgwMDA5CisjZGVmaW5lIFMzX05PVENVUk9STkVXICAgICAweDAwMGEKKyNkZWZpbmUgUzNfQ1VST1JORVcgICAgICAgIDB4MDAwYgorI2RlZmluZSBTM19DVVJBTkRORVcgICAgICAgMHgwMDBjCisjZGVmaW5lIFMzX05PVENVUkFORE5FVyAgICAweDAwMGQKKyNkZWZpbmUgUzNfQ1VSQU5ETk9UTkVXICAgIDB4MDAwZQorI2RlZmluZSBTM19OT1RDVVJBTkROT1RORVcgMHgwMDBmCisKKyNkZWZpbmUgUzNfQ1JUQ19BRFIgICAgMHgwM2Q0CisjZGVmaW5lIFMzX0NSVENfREFUQSAgIDB4MDNkNQorCisjZGVmaW5lIFMzX1JFR19MT0NLMiAweDM5CisjZGVmaW5lIFMzX0hHQ19NT0RFICAweDQ1CisKKyNkZWZpbmUgUzNfSFdHQ19PUkdYX0ggMHg0NgorI2RlZmluZSBTM19IV0dDX09SR1hfTCAweDQ3CisjZGVmaW5lIFMzX0hXR0NfT1JHWV9IIDB4NDgKKyNkZWZpbmUgUzNfSFdHQ19PUkdZX0wgMHg0OQorI2RlZmluZSBTM19IV0dDX0RYICAgICAweDRlCisjZGVmaW5lIFMzX0hXR0NfRFkgICAgIDB4NGYKKworCisjZGVmaW5lIFMzX0xBV19DVEwgMHg1OAorCisjZW5kaWYgLyogX1ZJREVPX1MzQkxJVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3ZpZGVvL3NnaXZ3LmggYi9pbmNsdWRlL3ZpZGVvL3NnaXZ3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVmMmE3YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvdmlkZW8vc2dpdncuaApAQCAtMCwwICsxLDY4MiBAQAorLyoKKyAqICBsaW51eC9kcml2ZXJzL3ZpZGVvL3NnaXZ3LmggLS0gU0dJIERCRSBmcmFtZSBidWZmZXIgZGV2aWNlIGhlYWRlcgorICoKKyAqICAgICAgQ29weXJpZ2h0IChDKSAxOTk5IFNpbGljb24gR3JhcGhpY3MsIEluYy4KKyAqICAgICAgSmVmZnJleSBOZXdxdWlzdCwgbmV3cXVpc3RAZW5nci5zZ2kuc29tCisgKgorICogIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZS4gU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3IKKyAqICBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX1NHSVZXRkJfSF9fCisjZGVmaW5lIF9fU0dJVldGQl9IX18KKworI2RlZmluZSBEQkVfR0VUUkVHKHJlZywgZGVzdCkJCSgoZGVzdCkgPSBEQkVfUkVHX0JBU0UtPnJlZykKKyNkZWZpbmUgREJFX1NFVFJFRyhyZWcsIHNyYykJCURCRV9SRUdfQkFTRS0+cmVnID0gKHNyYykKKyNkZWZpbmUgREJFX0lHRVRSRUcocmVnLCBpZHgsIGRlc3QpCSgoZGVzdCkgPSBEQkVfUkVHX0JBU0UtPnJlZ1tpZHhdKQorI2RlZmluZSBEQkVfSVNFVFJFRyhyZWcsIGlkeCwgc3JjKQkoREJFX1JFR19CQVNFLT5yZWdbaWR4XSA9IChzcmMpKQorCisjZGVmaW5lIE1BU0sobXNiLCBsc2IpICAgICAgICAgICggKCgodTMyKTE8PCgobXNiKS0obHNiKSsxKSktMSkgPDwgKGxzYikgKQorI2RlZmluZSBHRVQodiwgbXNiLCBsc2IpICAgICAgICAoICgodTMyKSh2KSAmIE1BU0sobXNiLGxzYikpID4+IChsc2IpICkKKyNkZWZpbmUgU0VUKHYsIGYsIG1zYiwgbHNiKSAgICAgKCAodikgPSAoKHYpJn5NQVNLKG1zYixsc2IpKSB8ICgoICh1MzIpKGYpPDwobHNiKSApICYgTUFTSyhtc2IsbHNiKSkgKQorCisjZGVmaW5lIEdFVF9EQkVfRklFTEQocmVnLCBmaWVsZCwgdikgICAgICAgIEdFVCgodiksIERCRV8jI3JlZyMjXyMjZmllbGQjI19NU0IsIERCRV8jI3JlZyMjXyMjZmllbGQjI19MU0IpCisjZGVmaW5lIFNFVF9EQkVfRklFTEQocmVnLCBmaWVsZCwgdiwgZikgICAgIFNFVCgodiksIChmKSwgREJFXyMjcmVnIyNfIyNmaWVsZCMjX01TQiwgREJFXyMjcmVnIyNfIyNmaWVsZCMjX0xTQikKKworLyogTk9URTogQWxsIGxvYWRzL3N0b3JlcyBtdXN0IGJlIDMyIGJpdHMgYW5kIHVuY2FjaGVkICovCisKKyNkZWZpbmUgREJFX1JFR19QSFlTCTB4ZDAwMDAwMDAKKyNkZWZpbmUgREJFX1JFR19TSVpFICAgICAgICAweDAxMDAwMDAwCisKK3N0cnVjdCBhc3JlZ3MgeworICB2b2xhdGlsZSB1MzIgY3RybHN0YXQ7ICAgICAvKiAweDAwMDAwMCBnZW5lcmFsIGNvbnRyb2wgKi8KKyAgdm9sYXRpbGUgdTMyIGRvdGNsb2NrOyAgICAgLyogMHgwMDAwMDQgZG90IGNsb2NrIFBMTCBjb250cm9sICovCisgIHZvbGF0aWxlIHUzMiBpMmM7ICAgICAgICAgIC8qIDB4MDAwMDA4IGNydCBJMkMgY29udHJvbCAqLworICB2b2xhdGlsZSB1MzIgc3lzY2xrOyAgICAgICAvKiAweDAwMDAwYyBzeXN0ZW0gY2xvY2sgUExMIGNvbnRyb2wgKi8KKyAgdm9sYXRpbGUgdTMyIGkyY2ZwOyAgICAgICAgLyogMHgwMDAwMTAgZmxhdCBwYW5lbCBJMkMgY29udHJvbCAqLworICB2b2xhdGlsZSB1MzIgaWQ7ICAgICAgICAgICAvKiAweDAwMDAxNCBkZXZpY2UgaWQvY2hpcCByZXZpc2lvbiAqLworICB2b2xhdGlsZSB1MzIgY29uZmlnOyAgICAgICAvKiAweDAwMDAxOCBwb3dlciBvbiBjb25maWd1cmF0aW9uICovCisgIHZvbGF0aWxlIHUzMiBiaXN0OyAgICAgICAgIC8qIDB4MDAwMDFjIGludGVybmFsIGJpc3Qgc3RhdHVzICovCisKKyAgY2hhciBfcGFkMFsgMHgwMTAwMDAgLSAweDAwMDAyMCBdOworCisgIHZvbGF0aWxlIHUzMiB2dF94eTsgICAgICAgIC8qIDB4MDEwMDAwIGN1cnJlbnQgZG90IGNvb3JkcyAqLworICB2b2xhdGlsZSB1MzIgdnRfeHltYXg7ICAgICAvKiAweDAxMDAwNCBtYXhpbXVtIGRvdCBjb29yZHMgKi8KKyAgdm9sYXRpbGUgdTMyIHZ0X3ZzeW5jOyAgICAgLyogMHgwMTAwMDggdnN5bmMgb24vb2ZmICovCisgIHZvbGF0aWxlIHUzMiB2dF9oc3luYzsgICAgIC8qIDB4MDEwMDBjIGhzeW5jIG9uL29mZiAqLworICB2b2xhdGlsZSB1MzIgdnRfdmJsYW5rOyAgICAvKiAweDAxMDAxMCB2Ymxhbmsgb24vb2ZmICovCisgIHZvbGF0aWxlIHUzMiB2dF9oYmxhbms7ICAgIC8qIDB4MDEwMDE0IGhibGFuayBvbi9vZmYgKi8KKyAgdm9sYXRpbGUgdTMyIHZ0X2ZsYWdzOyAgICAgLyogMHgwMTAwMTggcG9sYXJpdHkgb2YgdnQgc2lnbmFscyAqLworICB2b2xhdGlsZSB1MzIgdnRfZjJyZl9sb2NrOyAvKiAweDAxMDAxYyBmMnJmICYgZnJhbWVsY2sgeSBjb29yZCAqLworICB2b2xhdGlsZSB1MzIgdnRfaW50cjAxOyAgICAvKiAweDAxMDAyMCBpbnRyIDAsMSB5IGNvb3JkcyAqLworICB2b2xhdGlsZSB1MzIgdnRfaW50cjIzOyAgICAvKiAweDAxMDAyNCBpbnRyIDIsMyB5IGNvb3JkcyAqLworICB2b2xhdGlsZSB1MzIgZnBfaGRydjsgICAgICAvKiAweDAxMDAyOCBmbGF0IHBhbmVsIGhkcnYgb24vb2ZmICovCisgIHZvbGF0aWxlIHUzMiBmcF92ZHJ2OyAgICAgIC8qIDB4MDEwMDJjIGZsYXQgcGFuZWwgdmRydiBvbi9vZmYgKi8KKyAgdm9sYXRpbGUgdTMyIGZwX2RlOyAgICAgICAgLyogMHgwMTAwMzAgZmxhdCBwYW5lbCBkZSBvbi9vZmYgKi8KKyAgdm9sYXRpbGUgdTMyIHZ0X2hwaXhlbjsgICAgLyogMHgwMTAwMzQgaW50cm5sIGhvcml6IHBpeGVsIG9uL29mZiovCisgIHZvbGF0aWxlIHUzMiB2dF92cGl4ZW47ICAgIC8qIDB4MDEwMDM4IGludHJubCB2ZXJ0IHBpeGVsIG9uL29mZiAqLworICB2b2xhdGlsZSB1MzIgdnRfaGNtYXA7ICAgICAvKiAweDAxMDAzYyBjbWFwIHdyaXRlIChob3JpeikgKi8KKyAgdm9sYXRpbGUgdTMyIHZ0X3ZjbWFwOyAgICAgLyogMHgwMTAwNDAgY21hcCB3cml0ZSAodmVydCkgKi8KKyAgdm9sYXRpbGUgdTMyIGRpZF9zdGFydF94eTsgLyogMHgwMTAwNDQgZW9sL2YgZGlkL3h5IHJlc2V0IHZhbCAqLworICB2b2xhdGlsZSB1MzIgY3JzX3N0YXJ0X3h5OyAvKiAweDAxMDA0OCBlb2wvZiBjcnMveHkgcmVzZXQgdmFsICovCisgIHZvbGF0aWxlIHUzMiB2Y19zdGFydF94eTsgIC8qIDB4MDEwMDRjIGVvbC9mIHZjL3h5IHJlc2V0IHZhbCAqLworCisgIGNoYXIgX3BhZDFbIDB4MDIwMDAwIC0gMHgwMTAwNTAgXTsKKworICB2b2xhdGlsZSB1MzIgb3ZyX3dpZHRoX3RpbGU7IC8qIDB4MDIwMDAwIG92ZXJsYXkgcGxhbmUgY3RybCAwICovCisgIHZvbGF0aWxlIHUzMiBvdnJfaW5od2N0cmw7ICAgLyogMHgwMjAwMDQgb3ZlcmxheSBwbGFuZSBjdHJsIDEgKi8KKyAgdm9sYXRpbGUgdTMyIG92cl9jb250cm9sOyAgICAvKiAweDAyMDAwOCBvdmVybGF5IHBsYW5lIGN0cmwgMSAqLworCisgIGNoYXIgX3BhZDJbIDB4MDMwMDAwIC0gMHgwMjAwMEMgXTsKKworICB2b2xhdGlsZSB1MzIgZnJtX3NpemVfdGlsZTsgIC8qIDB4MDMwMDAwIG5vcm1hbCBwbGFuZSBjdHJsIDAgKi8KKyAgdm9sYXRpbGUgdTMyIGZybV9zaXplX3BpeGVsOyAvKiAweDAzMDAwNCBub3JtYWwgcGxhbmUgY3RybCAxICovCisgIHZvbGF0aWxlIHUzMiBmcm1faW5od2N0cmw7ICAgLyogMHgwMzAwMDggbm9ybWFsIHBsYW5lIGN0cmwgMiAqLworICB2b2xhdGlsZSB1MzIgZnJtX2NvbnRyb2w7CSAgIC8qIDB4MDMwMDBDIG5vcm1hbCBwbGFuZSBjdHJsIDMgKi8KKworICBjaGFyIF9wYWQzWyAweDA0MDAwMCAtIDB4MDMwMDEwIF07CisKKyAgdm9sYXRpbGUgdTMyIGRpZF9pbmh3Y3RybDsgICAvKiAweDA0MDAwMCBESUQgY29udHJvbCAqLworICB2b2xhdGlsZSB1MzIgZGlkX2NvbnRyb2w7ICAgIC8qIDB4MDQwMDA0IERJRCBzaGFkb3cgKi8KKworICBjaGFyIF9wYWQ0WyAweDA0ODAwMCAtIDB4MDQwMDA4IF07CisKKyAgdm9sYXRpbGUgdTMyIG1vZGVfcmVnc1szMl07ICAvKiAweDA0ODAwMCAtIDB4MDQ4MDdjIFdJRCB0YWJsZSAqLworCisgIGNoYXIgX3BhZDVbIDB4MDUwMDAwIC0gMHgwNDgwODAgXTsKKworICB2b2xhdGlsZSB1MzIgY21hcFs2MTQ0XTsgICAgIC8qIDB4MDUwMDAwIC0gMHgwNTVmZmMgY29sb3IgbWFwICovCisKKyAgY2hhciBfcGFkNlsgMHgwNTgwMDAgLSAweDA1NjAwMCBdOworCisgIHZvbGF0aWxlIHUzMiBjbV9maWZvOyAgICAgICAgLyogMHgwNTgwMDAgY29sb3IgbWFwIGZpZm8gc3RhdHVzICovCisKKyAgY2hhciBfcGFkN1sgMHgwNjAwMDAgLSAweDA1ODAwNCBdOworCisgIHZvbGF0aWxlIHUzMiBnbWFwWzI1Nl07ICAgICAgLyogMHgwNjAwMDAgLSAweDA2MDNmYyBnYW1tYSBtYXAgKi8KKworICBjaGFyIF9wYWQ4WyAweDA2ODAwMCAtIDB4MDYwNDAwIF07CisKKyAgdm9sYXRpbGUgdTMyIGdtYXAxMFsxMDI0XTsgICAvKiAweDA2ODAwMCAtIDB4MDY4ZmZjIGdhbW1hIG1hcCAqLworCisgIGNoYXIgX3BhZDlbIDB4MDcwMDAwIC0gMHgwNjkwMDAgXTsKKworICB2b2xhdGlsZSB1MzIgY3JzX3BvczsgICAgICAgIC8qIDB4MDcwMDAwIGN1c3JvciBjb250cm9sIDAgKi8KKyAgdm9sYXRpbGUgdTMyIGNyc19jdGw7ICAgICAgICAvKiAweDA3MDAwNCBjdXNyb3IgY29udHJvbCAxICovCisgIHZvbGF0aWxlIHUzMiBjcnNfY21hcFszXTsgICAgLyogMHgwNzAwMDggLSAweDA3MDAxMCBjcnMgY21hcCAqLworCisgIGNoYXIgX3BhZDEwWyAweDA3ODAwMCAtIDB4MDcwMDE0IF07CisKKyAgdm9sYXRpbGUgdTMyIGNyc19nbHlwaFs2NF07ICAvKiAweDA3ODAwMCAtIDB4MDc4MGZjIGNycyBnbHlwaCAqLworCisgIGNoYXIgX3BhZDExWyAweDA4MDAwMCAtIDB4MDc4MTAwIF07CisKKyAgdm9sYXRpbGUgdTMyIHZjXzA7ICAgICAgICAgICAvKiAweDA4MDAwMCB2aWRlbyBjYXB0dXJlIGNydGwgMCAqLworICB2b2xhdGlsZSB1MzIgdmNfMTsgICAgICAgICAgIC8qIDB4MDgwMDA0IHZpZGVvIGNhcHR1cmUgY3J0bCAxICovCisgIHZvbGF0aWxlIHUzMiB2Y18yOyAgICAgICAgICAgLyogMHgwODAwMDggdmlkZW8gY2FwdHVyZSBjcnRsIDIgKi8KKyAgdm9sYXRpbGUgdTMyIHZjXzM7ICAgICAgICAgICAvKiAweDA4MDAwYyB2aWRlbyBjYXB0dXJlIGNydGwgMyAqLworICB2b2xhdGlsZSB1MzIgdmNfNDsgICAgICAgICAgIC8qIDB4MDgwMDEwIHZpZGVvIGNhcHR1cmUgY3J0bCAzICovCisgIHZvbGF0aWxlIHUzMiB2Y181OyAgICAgICAgICAgLyogMHgwODAwMTQgdmlkZW8gY2FwdHVyZSBjcnRsIDMgKi8KKyAgdm9sYXRpbGUgdTMyIHZjXzY7ICAgICAgICAgICAvKiAweDA4MDAxOCB2aWRlbyBjYXB0dXJlIGNydGwgMyAqLworICB2b2xhdGlsZSB1MzIgdmNfNzsgICAgICAgICAgIC8qIDB4MDgwMDFjIHZpZGVvIGNhcHR1cmUgY3J0bCAzICovCisgIHZvbGF0aWxlIHUzMiB2Y184OyAgICAgICAgICAgLyogMHgwODAwMGMgdmlkZW8gY2FwdHVyZSBjcnRsIDMgKi8KK307CisKKy8qIEJpdCBtYXNrIGluZm9ybWF0aW9uICovCisKKyNkZWZpbmUgREJFX0NUUkxTVEFUX0NISVBJRF9NU0IgICAgIDMKKyNkZWZpbmUgREJFX0NUUkxTVEFUX0NISVBJRF9MU0IgICAgIDAKKyNkZWZpbmUgREJFX0NUUkxTVEFUX1NFTlNFX05fTVNCICAgIDQKKyNkZWZpbmUgREJFX0NUUkxTVEFUX1NFTlNFX05fTFNCICAgIDQKKyNkZWZpbmUgREJFX0NUUkxTVEFUX1BDTEtTRUxfTVNCICAgIDI5CisjZGVmaW5lIERCRV9DVFJMU1RBVF9QQ0xLU0VMX0xTQiAgICAyOAorCisjZGVmaW5lIERCRV9ET1RDTEtfTV9NU0IgICAgICAgICAgICA3CisjZGVmaW5lIERCRV9ET1RDTEtfTV9MU0IgICAgICAgICAgICAwCisjZGVmaW5lIERCRV9ET1RDTEtfTl9NU0IgICAgICAgICAgICAxMworI2RlZmluZSBEQkVfRE9UQ0xLX05fTFNCICAgICAgICAgICAgOAorI2RlZmluZSBEQkVfRE9UQ0xLX1BfTVNCICAgICAgICAgICAgMTUKKyNkZWZpbmUgREJFX0RPVENMS19QX0xTQiAgICAgICAgICAgIDE0CisjZGVmaW5lIERCRV9ET1RDTEtfUlVOX01TQiAgICAgICAgICAyMAorI2RlZmluZSBEQkVfRE9UQ0xLX1JVTl9MU0IgICAgICAgICAgMjAKKworI2RlZmluZSBEQkVfVlRfWFlfVlRfRlJFRVpFX01TQiAgICAgMzEKKyNkZWZpbmUgREJFX1ZUX1hZX1ZUX0ZSRUVaRV9MU0IgICAgIDMxCisKKyNkZWZpbmUgREJFX0ZQX1ZEUlZfRlBfVkRSVl9PTl9NU0IJMjMKKyNkZWZpbmUgREJFX0ZQX1ZEUlZfRlBfVkRSVl9PTl9MU0IJMTIKKyNkZWZpbmUgREJFX0ZQX1ZEUlZfRlBfVkRSVl9PRkZfTVNCCTExCisjZGVmaW5lIERCRV9GUF9WRFJWX0ZQX1ZEUlZfT0ZGX0xTQgkwCisKKyNkZWZpbmUgREJFX0ZQX0hEUlZfRlBfSERSVl9PTl9NU0IJMjMKKyNkZWZpbmUgREJFX0ZQX0hEUlZfRlBfSERSVl9PTl9MU0IJMTIKKyNkZWZpbmUgREJFX0ZQX0hEUlZfRlBfSERSVl9PRkZfTVNCCTExCisjZGVmaW5lIERCRV9GUF9IRFJWX0ZQX0hEUlZfT0ZGX0xTQgkwCisKKyNkZWZpbmUgREJFX0ZQX0RFX0ZQX0RFX09OX01TQgkJMjMKKyNkZWZpbmUgREJFX0ZQX0RFX0ZQX0RFX09OX0xTQgkJMTIKKyNkZWZpbmUgREJFX0ZQX0RFX0ZQX0RFX09GRl9NU0IJCTExCisjZGVmaW5lIERCRV9GUF9ERV9GUF9ERV9PRkZfTFNCCQkwCisKKyNkZWZpbmUgREJFX1ZUX1ZTWU5DX1ZUX1ZTWU5DX09OX01TQiAgICAgICAgMjMKKyNkZWZpbmUgREJFX1ZUX1ZTWU5DX1ZUX1ZTWU5DX09OX0xTQiAgICAgICAgMTIKKyNkZWZpbmUgREJFX1ZUX1ZTWU5DX1ZUX1ZTWU5DX09GRl9NU0IgICAgICAgMTEKKyNkZWZpbmUgREJFX1ZUX1ZTWU5DX1ZUX1ZTWU5DX09GRl9MU0IgICAgICAgMAorCisjZGVmaW5lIERCRV9WVF9IU1lOQ19WVF9IU1lOQ19PTl9NU0IgICAgICAgIDIzCisjZGVmaW5lIERCRV9WVF9IU1lOQ19WVF9IU1lOQ19PTl9MU0IgICAgICAgIDEyCisjZGVmaW5lIERCRV9WVF9IU1lOQ19WVF9IU1lOQ19PRkZfTVNCICAgICAgIDExCisjZGVmaW5lIERCRV9WVF9IU1lOQ19WVF9IU1lOQ19PRkZfTFNCICAgICAgIDAKKworI2RlZmluZSBEQkVfVlRfVkJMQU5LX1ZUX1ZCTEFOS19PTl9NU0IgICAgICAgIDIzCisjZGVmaW5lIERCRV9WVF9WQkxBTktfVlRfVkJMQU5LX09OX0xTQiAgICAgICAgMTIKKyNkZWZpbmUgREJFX1ZUX1ZCTEFOS19WVF9WQkxBTktfT0ZGX01TQiAgICAgICAxMQorI2RlZmluZSBEQkVfVlRfVkJMQU5LX1ZUX1ZCTEFOS19PRkZfTFNCICAgICAgIDAKKworI2RlZmluZSBEQkVfVlRfSEJMQU5LX1ZUX0hCTEFOS19PTl9NU0IgICAgICAgIDIzCisjZGVmaW5lIERCRV9WVF9IQkxBTktfVlRfSEJMQU5LX09OX0xTQiAgICAgICAgMTIKKyNkZWZpbmUgREJFX1ZUX0hCTEFOS19WVF9IQkxBTktfT0ZGX01TQiAgICAgICAxMQorI2RlZmluZSBEQkVfVlRfSEJMQU5LX1ZUX0hCTEFOS19PRkZfTFNCICAgICAgIDAKKworI2RlZmluZSBEQkVfVlRfRkxBR1NfVkRSVl9JTlZFUlRfTVNCCQkwCisjZGVmaW5lIERCRV9WVF9GTEFHU19WRFJWX0lOVkVSVF9MU0IJCTAKKyNkZWZpbmUgREJFX1ZUX0ZMQUdTX0hEUlZfSU5WRVJUX01TQgkJMgorI2RlZmluZSBEQkVfVlRfRkxBR1NfSERSVl9JTlZFUlRfTFNCCQkyCisKKyNkZWZpbmUgREJFX1ZUX1ZDTUFQX1ZUX1ZDTUFQX09OX01TQiAgICAgICAgMjMKKyNkZWZpbmUgREJFX1ZUX1ZDTUFQX1ZUX1ZDTUFQX09OX0xTQiAgICAgICAgMTIKKyNkZWZpbmUgREJFX1ZUX1ZDTUFQX1ZUX1ZDTUFQX09GRl9NU0IgICAgICAgMTEKKyNkZWZpbmUgREJFX1ZUX1ZDTUFQX1ZUX1ZDTUFQX09GRl9MU0IgICAgICAgMAorCisjZGVmaW5lIERCRV9WVF9IQ01BUF9WVF9IQ01BUF9PTl9NU0IgICAgICAgIDIzCisjZGVmaW5lIERCRV9WVF9IQ01BUF9WVF9IQ01BUF9PTl9MU0IgICAgICAgIDEyCisjZGVmaW5lIERCRV9WVF9IQ01BUF9WVF9IQ01BUF9PRkZfTVNCICAgICAgIDExCisjZGVmaW5lIERCRV9WVF9IQ01BUF9WVF9IQ01BUF9PRkZfTFNCICAgICAgIDAKKworI2RlZmluZSBEQkVfVlRfWFlNQVhfVlRfTUFYWF9NU0IgICAgMTEKKyNkZWZpbmUgREJFX1ZUX1hZTUFYX1ZUX01BWFhfTFNCICAgIDAKKyNkZWZpbmUgREJFX1ZUX1hZTUFYX1ZUX01BWFlfTVNCICAgIDIzCisjZGVmaW5lIERCRV9WVF9YWU1BWF9WVF9NQVhZX0xTQiAgICAxMgorCisjZGVmaW5lIERCRV9WVF9IUElYRU5fVlRfSFBJWEVOX09OX01TQiAgICAgIDIzCisjZGVmaW5lIERCRV9WVF9IUElYRU5fVlRfSFBJWEVOX09OX0xTQiAgICAgIDEyCisjZGVmaW5lIERCRV9WVF9IUElYRU5fVlRfSFBJWEVOX09GRl9NU0IgICAgIDExCisjZGVmaW5lIERCRV9WVF9IUElYRU5fVlRfSFBJWEVOX09GRl9MU0IgICAgIDAKKworI2RlZmluZSBEQkVfVlRfVlBJWEVOX1ZUX1ZQSVhFTl9PTl9NU0IgICAgICAyMworI2RlZmluZSBEQkVfVlRfVlBJWEVOX1ZUX1ZQSVhFTl9PTl9MU0IgICAgICAxMgorI2RlZmluZSBEQkVfVlRfVlBJWEVOX1ZUX1ZQSVhFTl9PRkZfTVNCICAgICAxMQorI2RlZmluZSBEQkVfVlRfVlBJWEVOX1ZUX1ZQSVhFTl9PRkZfTFNCICAgICAwCisKKyNkZWZpbmUgREJFX09WUl9DT05UUk9MX09WUl9ETUFfRU5BQkxFX01TQiAgMAorI2RlZmluZSBEQkVfT1ZSX0NPTlRST0xfT1ZSX0RNQV9FTkFCTEVfTFNCICAwCisKKyNkZWZpbmUgREJFX09WUl9JTkhXQ1RSTF9PVlJfRE1BX0VOQUJMRV9NU0IgMAorI2RlZmluZSBEQkVfT1ZSX0lOSFdDVFJMX09WUl9ETUFfRU5BQkxFX0xTQiAwCisKKyNkZWZpbmUgREJFX09WUl9XSURUSF9USUxFX09WUl9GSUZPX1JFU0VUX01TQiAgICAgICAxMworI2RlZmluZSBEQkVfT1ZSX1dJRFRIX1RJTEVfT1ZSX0ZJRk9fUkVTRVRfTFNCICAgICAgIDEzCisKKyNkZWZpbmUgREJFX0ZSTV9DT05UUk9MX0ZSTV9ETUFfRU5BQkxFX01TQiAgMAorI2RlZmluZSBEQkVfRlJNX0NPTlRST0xfRlJNX0RNQV9FTkFCTEVfTFNCICAwCisjZGVmaW5lIERCRV9GUk1fQ09OVFJPTF9GUk1fVElMRV9QVFJfTVNCICAgIDMxCisjZGVmaW5lIERCRV9GUk1fQ09OVFJPTF9GUk1fVElMRV9QVFJfTFNCICAgIDkKKyNkZWZpbmUgREJFX0ZSTV9DT05UUk9MX0ZSTV9MSU5FQVJfTVNCICAgICAgMQorI2RlZmluZSBEQkVfRlJNX0NPTlRST0xfRlJNX0xJTkVBUl9MU0IgICAgICAxCisKKyNkZWZpbmUgREJFX0ZSTV9JTkhXQ1RSTF9GUk1fRE1BX0VOQUJMRV9NU0IgMAorI2RlZmluZSBEQkVfRlJNX0lOSFdDVFJMX0ZSTV9ETUFfRU5BQkxFX0xTQiAwCisKKyNkZWZpbmUgREJFX0ZSTV9TSVpFX1RJTEVfRlJNX1dJRFRIX1RJTEVfTVNCICAgICAgICAxMgorI2RlZmluZSBEQkVfRlJNX1NJWkVfVElMRV9GUk1fV0lEVEhfVElMRV9MU0IgICAgICAgIDUKKyNkZWZpbmUgREJFX0ZSTV9TSVpFX1RJTEVfRlJNX1JIU19NU0IgICAgICAgNAorI2RlZmluZSBEQkVfRlJNX1NJWkVfVElMRV9GUk1fUkhTX0xTQiAgICAgICAwCisjZGVmaW5lIERCRV9GUk1fU0laRV9USUxFX0ZSTV9ERVBUSF9NU0IgICAgIDE0CisjZGVmaW5lIERCRV9GUk1fU0laRV9USUxFX0ZSTV9ERVBUSF9MU0IgICAgIDEzCisjZGVmaW5lIERCRV9GUk1fU0laRV9USUxFX0ZSTV9GSUZPX1JFU0VUX01TQiAgICAgICAgMTUKKyNkZWZpbmUgREJFX0ZSTV9TSVpFX1RJTEVfRlJNX0ZJRk9fUkVTRVRfTFNCICAgICAgICAxNQorCisjZGVmaW5lIERCRV9GUk1fU0laRV9QSVhFTF9GQl9IRUlHSFRfUElYX01TQiAgICAgICAgMzEKKyNkZWZpbmUgREJFX0ZSTV9TSVpFX1BJWEVMX0ZCX0hFSUdIVF9QSVhfTFNCICAgICAgICAxNgorCisjZGVmaW5lIERCRV9ESURfQ09OVFJPTF9ESURfRE1BX0VOQUJMRV9NU0IgIDAKKyNkZWZpbmUgREJFX0RJRF9DT05UUk9MX0RJRF9ETUFfRU5BQkxFX0xTQiAgMAorI2RlZmluZSBEQkVfRElEX0lOSFdDVFJMX0RJRF9ETUFfRU5BQkxFX01TQiAwCisjZGVmaW5lIERCRV9ESURfSU5IV0NUUkxfRElEX0RNQV9FTkFCTEVfTFNCIDAKKworI2RlZmluZSBEQkVfRElEX1NUQVJUX1hZX0RJRF9TVEFSVFlfTVNCICAgICAyMworI2RlZmluZSBEQkVfRElEX1NUQVJUX1hZX0RJRF9TVEFSVFlfTFNCICAgICAxMgorI2RlZmluZSBEQkVfRElEX1NUQVJUX1hZX0RJRF9TVEFSVFhfTVNCICAgICAxMQorI2RlZmluZSBEQkVfRElEX1NUQVJUX1hZX0RJRF9TVEFSVFhfTFNCICAgICAwCisKKyNkZWZpbmUgREJFX0NSU19TVEFSVF9YWV9DUlNfU1RBUlRZX01TQiAgICAgMjMKKyNkZWZpbmUgREJFX0NSU19TVEFSVF9YWV9DUlNfU1RBUlRZX0xTQiAgICAgMTIKKyNkZWZpbmUgREJFX0NSU19TVEFSVF9YWV9DUlNfU1RBUlRYX01TQiAgICAgMTEKKyNkZWZpbmUgREJFX0NSU19TVEFSVF9YWV9DUlNfU1RBUlRYX0xTQiAgICAgMAorCisjZGVmaW5lIERCRV9XSURfVFlQX01TQiAgICAgNAorI2RlZmluZSBEQkVfV0lEX1RZUF9MU0IgICAgIDIKKyNkZWZpbmUgREJFX1dJRF9CVUZfTVNCICAgICAxCisjZGVmaW5lIERCRV9XSURfQlVGX0xTQiAgICAgMAorCisjZGVmaW5lIERCRV9WQ19TVEFSVF9YWV9WQ19TVEFSVFlfTVNCICAgICAgIDIzCisjZGVmaW5lIERCRV9WQ19TVEFSVF9YWV9WQ19TVEFSVFlfTFNCICAgICAgIDEyCisjZGVmaW5lIERCRV9WQ19TVEFSVF9YWV9WQ19TVEFSVFhfTVNCICAgICAgIDExCisjZGVmaW5lIERCRV9WQ19TVEFSVF9YWV9WQ19TVEFSVFhfTFNCICAgICAgIDAKKworLyogQ29uc3RhbnRzICovCisKKyNkZWZpbmUgREJFX0ZSTV9ERVBUSF84ICAgICAwCisjZGVmaW5lIERCRV9GUk1fREVQVEhfMTYgICAgMQorI2RlZmluZSBEQkVfRlJNX0RFUFRIXzMyICAgIDIKKworI2RlZmluZSBEQkVfQ01PREVfSTggICAgICAgIDAKKyNkZWZpbmUgREJFX0NNT0RFX0kxMiAgICAgICAxCisjZGVmaW5lIERCRV9DTU9ERV9SRzNCMiAgICAgMgorI2RlZmluZSBEQkVfQ01PREVfUkdCNCAgICAgIDMKKyNkZWZpbmUgREJFX0NNT0RFX0FSR0I1ICAgICA0CisjZGVmaW5lIERCRV9DTU9ERV9SR0I4ICAgICAgNQorI2RlZmluZSBEQkVfQ01PREVfUkdCQTUgICAgIDYKKyNkZWZpbmUgREJFX0NNT0RFX1JHQjEwICAgICA3CisKKyNkZWZpbmUgREJFX0JNT0RFX0JPVEggICAgICAzCisKKyNkZWZpbmUgREJFX0NSU19NQUdJQyAgICAgICA1NAorCisjZGVmaW5lIERCRV9DTE9DS19SRUZfS0haCTI3MDAwCisKKy8qIENvbmZpZyBSZWdpc3RlciAoREJFIE9ubHkpIERlZmluaXRpb25zICovCisKKyNkZWZpbmUgREJFX0NPTkZJR19WREFDX0VOQUJMRSAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIERCRV9DT05GSUdfVkRBQ19HU1lOQyAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBEQkVfQ09ORklHX1ZEQUNfUEJMQU5LICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgREJFX0NPTkZJR19GUEVOQUJMRSAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIERCRV9DT05GSUdfTEVORElBTiAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBEQkVfQ09ORklHX1RJTEVISVNUICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgREJFX0NPTkZJR19FWFRfQUREUiAgICAgICAgICAweDAwMDAwMDgwCisKKyNkZWZpbmUgREJFX0NPTkZJR19GQkRFViAgICAgICAgKCBEQkVfQ09ORklHX1ZEQUNfRU5BQkxFIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQkVfQ09ORklHX1ZEQUNfR1NZTkMgIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQkVfQ09ORklHX1ZEQUNfUEJMQU5LIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQkVfQ09ORklHX0xFTkRJQU4gICAgIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQkVfQ09ORklHX0VYVF9BRERSICkKKworLyoKKyAqIEF2YWlsYWJsZSBWaWRlbyBUaW1pbmdzIGFuZCBDb3JyZXNwb25kaW5nIEluZGljZXMKKyAqLworCit0eXBlZGVmIGVudW0geworICBEQkVfVlRfNjQwXzQ4MF82MCwKKworICBEQkVfVlRfODAwXzYwMF82MCwKKyAgREJFX1ZUXzgwMF82MDBfNzUsCisgIERCRV9WVF84MDBfNjAwXzEyMCwKKworICBEQkVfVlRfMTAyNF83NjhfNTAsCisgIERCRV9WVF8xMDI0Xzc2OF82MCwKKyAgREJFX1ZUXzEwMjRfNzY4Xzc1LAorICBEQkVfVlRfMTAyNF83NjhfODUsCisgIERCRV9WVF8xMDI0Xzc2OF8xMjAsCisKKyAgREJFX1ZUXzEyODBfMTAyNF81MCwKKyAgREJFX1ZUXzEyODBfMTAyNF82MCwKKyAgREJFX1ZUXzEyODBfMTAyNF83NSwKKyAgREJFX1ZUXzEyODBfMTAyNF84NSwKKworICBEQkVfVlRfMTYwMF8xMDI0XzUzLAorICBEQkVfVlRfMTYwMF8xMDI0XzYwLAorCisgIERCRV9WVF8xNjAwXzEyMDBfNTAsCisgIERCRV9WVF8xNjAwXzEyMDBfNjAsCisgIERCRV9WVF8xNjAwXzEyMDBfNzUsCisKKyAgREJFX1ZUXzE5MjBfMTA4MF81MCwKKyAgREJFX1ZUXzE5MjBfMTA4MF82MCwKKyAgREJFX1ZUXzE5MjBfMTA4MF83MiwKKworICBEQkVfVlRfMTkyMF8xMjAwXzUwLAorICBEQkVfVlRfMTkyMF8xMjAwXzYwLAorICBEQkVfVlRfMTkyMF8xMjAwXzY2LAorCisgIERCRV9WVF9VTktOT1dOCit9IGRiZV90aW1pbmdfdDsKKworCisKKy8qCisgKiBDcmltZSBWaWRlbyBUaW1pbmcgRGF0YSBTdHJ1Y3R1cmUKKyAqLworCitzdHJ1Y3QgZGJlX3RpbWluZ19pbmZvCit7CisgIGRiZV90aW1pbmdfdCB0eXBlOworICBpbnQgZmxhZ3M7CQkJCQorICBzaG9ydCB3aWR0aDsJCSAgICAvKiBNb25pdG9yIHJlc29sdXRpb24JCSovCisgIHNob3J0IGhlaWdodDsKKyAgaW50IGZpZWxkc19zZWM7CSAgICAvKiBmaWVsZHMvc2VjICAoSHogLTMgZGVjLiBwbGFjZXMgKi8KKyAgaW50IGNmcmVxOwkJICAgIC8qIHBpeGVsIGNsb2NrIGZyZXF1ZW5jeSAoTUh6IC0zIGRlYy4gcGxhY2VzKSAqLworICBzaG9ydCBodG90YWw7CQkgICAgLyogSG9yaXpvbnRhbCB0b3RhbCBwaXhlbHMJKi8KKyAgc2hvcnQgaGJsYW5rX3N0YXJ0OwkgICAgLyogSG9yaXpvbnRhbCBibGFuayBzdGFydAkqLworICBzaG9ydCBoYmxhbmtfZW5kOwkgICAgLyogSG9yaXpvbnRhbCBibGFuayBlbmQJCSovCisgIHNob3J0IGhzeW5jX3N0YXJ0OwkgICAgLyogSG9yaXpvbnRhbCBzeW5jIHN0YXJ0CSovCisgIHNob3J0IGhzeW5jX2VuZDsJICAgIC8qIEhvcml6b250YWwgc3luYyBlbmQJCSovCisgIHNob3J0IHZ0b3RhbDsJCSAgICAvKiBWZXJ0aWNhbCB0b3RhbCBsaW5lcwkJKi8KKyAgc2hvcnQgdmJsYW5rX3N0YXJ0OwkgICAgLyogVmVydGljYWwgYmxhbmsgc3RhcnQJCSovCisgIHNob3J0IHZibGFua19lbmQ7CSAgICAvKiBWZXJ0aWNhbCBibGFuayBlbmQJCSovCisgIHNob3J0IHZzeW5jX3N0YXJ0OwkgICAgLyogVmVydGljYWwgc3luYyBzdGFydAkJKi8KKyAgc2hvcnQgdnN5bmNfZW5kOwkgICAgLyogVmVydGljYWwgc3luYyBlbmQJCSovCisgIHNob3J0IHBsbF9tOwkJICAgIC8qIFBMTCBNIHBhcmFtZXRlcgkJKi8KKyAgc2hvcnQgcGxsX247CQkgICAgLyogUExMIFAgcGFyYW1ldGVyCQkqLworICBzaG9ydCBwbGxfcDsJCSAgICAvKiBQTEwgTiBwYXJhbWV0ZXIJCSovCit9OworCisvKiBEZWZpbmVzIGZvciBkYmVfdm9mX2luZm9fdCBmbGFncyAqLworCisjZGVmaW5lIERCRV9WT0ZfVU5LTk9XTk1PTiAgICAxCisjZGVmaW5lIERCRV9WT0ZfU1RFUkVPICAgICAgICAyCisjZGVmaW5lIERCRV9WT0ZfRE9fR0VOU1lOQyAgICA0ICAgICAgICAgIC8qIGVuYWJsZSBpbmNvbWluZyBzeW5jICovCisjZGVmaW5lIERCRV9WT0ZfU1lOQ19PTl9HUkVFTiA4ICAgICAgICAgIC8qIHN5bmMgb24gZ3JlZW4gKi8KKyNkZWZpbmUgREJFX1ZPRl9GTEFUUEFORUwgICAgIDB4MTAwMCAgICAgLyogRkxBVFBBTkVMIFRpbWluZyAqLworI2RlZmluZSBEQkVfVk9GX01BR0lDS0VZICAgICAgMHgyMDAwICAgICAvKiBCYWNrZG9vciBrZXkgKi8KKworLyoKKyAqIERCRSBUaW1pbmcgVGFibGVzCisgKi8KKworI2lmZGVmIElOQ0xVREVfVElNSU5HX1RBQkxFX0RBVEEKK3N0cnVjdCBkYmVfdGltaW5nX2luZm8gZGJlVlRpbWluZ3NbXSA9IHsKKyAgeworICAgIERCRV9WVF82NDBfNDgwXzYwLAorICAgIC8qCWZsYWdzLAl3aWR0aCwJCQloZWlnaHQsCQlmaWVsZHNfc2VjLAkJY2ZyZXEgKi8KKyAgICAwLCAgCTY0MCwJCQk0ODAsCQk1OTk0MCwJCQkyNTE3NSwKKyAgICAvKglodG90YWwsCWhibGFua19zdGFydCwJaGJsYW5rX2VuZCwJaHN5bmNfc3RhcnQsCWhzeW5jX2VuZCAqLworICAgIDgwMCwJNjQwLAkJICAgIDgwMCwJCTY1NiwJICAgIAk3NTIsCisgICAgLyoJdnRvdGFsLAl2Ymxhbmtfc3RhcnQsCXZibGFua19lbmQsCXZzeW5jX3N0YXJ0LAl2c3luY19lbmQgKi8KKyAgICA1MjUsCTQ4MCwJCSAgICA1MjUsCQk0OTAsCQkgICAgNDkyLAorICAgIC8qCXBsbF9tLAlwbGxfbiwJCQlwbGxfcCAqLworICAgIDE1LAkgICAgMiwJCQkJMworICB9LAorCisgIHsKKyAgICBEQkVfVlRfODAwXzYwMF82MCwKKyAgICAvKglmbGFncywJd2lkdGgsCQkJaGVpZ2h0LAkJZmllbGRzX3NlYywJCWNmcmVxICovCisgICAgMCwJICAgIDgwMCwJCQk2MDAsCQk2MDMxNywJCQk0MDAwMCwKKyAgICAvKglodG90YWwsCWhibGFua19zdGFydCwJaGJsYW5rX2VuZCwJaHN5bmNfc3RhcnQsCWhzeW5jX2VuZCAqLworICAgIDEwNTYsCTgwMCwJCSAgICAxMDU2LAkJODQwLAkJICAgIDk2OCwKKyAgICAvKgl2dG90YWwsCXZibGFua19zdGFydCwJdmJsYW5rX2VuZCwJdnN5bmNfc3RhcnQsCXZzeW5jX2VuZCAqLworICAgIDYyOCwJNjAwLAkJICAgIDYyOCwJCTYwMSwJCSAgICA2MDUsCisgICAgLyoJcGxsX20sCXBsbF9uLAkJCXBsbF9wICovCisgICAgMywJICAgIDEsCQkJCTEKKyAgfSwKKworICB7CisgICAgREJFX1ZUXzgwMF82MDBfNzUsCisgICAgLyoJZmxhZ3MsCXdpZHRoLAkJICAgIGhlaWdodCwJCWZpZWxkc19zZWMsCSAgICBjZnJlcSAqLworICAgIDAsCSAgICA4MDAsCQkgICAgNjAwLAkJNzUwMDAsCQkgICAgNDk1MDAsCisgICAgLyoJaHRvdGFsLAloYmxhbmtfc3RhcnQsCWhibGFua19lbmQsCWhzeW5jX3N0YXJ0LAloc3luY19lbmQgKi8KKyAgICAxMDU2LAk4MDAsCQkgICAgMTA1NiwJCTgxNiwJCSAgICA4OTYsCisgICAgLyoJdnRvdGFsLAl2Ymxhbmtfc3RhcnQsCXZibGFua19lbmQsCXZzeW5jX3N0YXJ0LAl2c3luY19lbmQgKi8KKyAgICA2MjUsCTYwMCwJCSAgICA2MjUsCQk2MDEsCQkgICAgNjA0LAorICAgIC8qCXBsbF9tLAlwbGxfbiwJCSAgICBwbGxfcCAqLworICAgIDExLAkgICAgMywJCSAgICAgICAgMQorICB9LAorCisgIHsKKyAgICBEQkVfVlRfODAwXzYwMF8xMjAsCisgICAgLyoJZmxhZ3MsCQkJCQl3aWR0aCwJCWhlaWdodCwJCQlmaWVsZHNfc2VjLAkgICAgY2ZyZXEgKi8KKyAgICBEQkVfVk9GX1NURVJFTywJICAgIDgwMCwJCTYwMCwJCQkxMTk4MDAsCQkgICAgODI5NzgsCisgICAgLyoJaHRvdGFsLAloYmxhbmtfc3RhcnQsCWhibGFua19lbmQsCWhzeW5jX3N0YXJ0LAloc3luY19lbmQgKi8KKyAgICAxMDQwLAk4MDAsCQkgICAgMTA0MCwJCTg1NiwJCSAgICA5NzYsCisgICAgLyoJdnRvdGFsLAl2Ymxhbmtfc3RhcnQsCXZibGFua19lbmQsCXZzeW5jX3N0YXJ0LAl2c3luY19lbmQgKi8KKyAgICA2NjYsCTYwMCwJCSAgICA2NjYsCQk2MzcsCQkgICAgNjQzLAorICAgIC8qCXBsbF9tLAlwbGxfbiwJCSAgICBwbGxfcCAqLworICAgIDMxLAkgICAgNSwJCSAgICAgICAgMQorICB9LAorCisgIHsKKyAgICBEQkVfVlRfMTAyNF83NjhfNTAsCisgICAgLyoJZmxhZ3MsCXdpZHRoLAkJICAgIGhlaWdodCwJCWZpZWxkc19zZWMsCSAgICBjZnJlcSAqLworICAgIDAsCSAgICAxMDI0LAkJICAgIDc2OCwJCTUwMDAwLAkJICAgIDU0MTYzLAorICAgIC8qCWh0b3RhbCwJaGJsYW5rX3N0YXJ0LAloYmxhbmtfZW5kLAloc3luY19zdGFydCwJaHN5bmNfZW5kICovCisgICAgMTM0NCwJMTAyNCwJCSAgICAxMzQ0LAkJMTA0OCwJCSAgICAxMTg0LAorICAgIC8qCXZ0b3RhbCwJdmJsYW5rX3N0YXJ0LAl2YmxhbmtfZW5kLAl2c3luY19zdGFydCwJdnN5bmNfZW5kICovCisgICAgODA2LAk3NjgsCQkgICAgODA2LAkJNzcxLAkJICAgIDc3NywKKyAgICAvKglwbGxfbSwJcGxsX24sCQkgICAgcGxsX3AgKi8KKyAgICA0LAkgICAgMSwJCSAgICAgICAgMQorICB9LAorCisgIHsKKyAgICBEQkVfVlRfMTAyNF83NjhfNjAsCisgICAgLyoJZmxhZ3MsCXdpZHRoLAkJCWhlaWdodCwJCWZpZWxkc19zZWMsCQljZnJlcSAqLworICAgIDAsCSAgICAxMDI0LAkJCTc2OCwJCTYwMDA0LAkJCTY1MDAwLAorICAgIC8qCWh0b3RhbCwJaGJsYW5rX3N0YXJ0LAloYmxhbmtfZW5kLAloc3luY19zdGFydCwJaHN5bmNfZW5kICovCisgICAgMTM0NCwJMTAyNCwJCSAgICAxMzQ0LAkJMTA0OCwJCSAgICAxMTg0LAorICAgIC8qCXZ0b3RhbCwJdmJsYW5rX3N0YXJ0LAl2YmxhbmtfZW5kLAl2c3luY19zdGFydCwJdnN5bmNfZW5kICovCisgICAgODA2LAk3NjgsCQkgICAgODA2LAkJNzcxLAkJICAgIDc3NywKKyAgICAvKglwbGxfbSwJcGxsX24sCQkJcGxsX3AgKi8KKyAgICAxMiwJICAgIDUsCQkJCTAKKyAgfSwKKworICB7CisgICAgREJFX1ZUXzEwMjRfNzY4Xzc1LAorICAgIC8qCWZsYWdzLAl3aWR0aCwJCQloZWlnaHQsCQlmaWVsZHNfc2VjLAkJY2ZyZXEgKi8KKyAgICAwLAkgICAgMTAyNCwJCQk3NjgsCQk3NTAyOSwJCQk3ODc1MCwKKyAgICAvKglodG90YWwsCWhibGFua19zdGFydCwJaGJsYW5rX2VuZCwJaHN5bmNfc3RhcnQsCWhzeW5jX2VuZCAqLworICAgIDEzMTIsCTEwMjQsCQkgICAgMTMxMiwJCTEwNDAsCQkgICAgMTEzNiwKKyAgICAvKgl2dG90YWwsCXZibGFua19zdGFydCwJdmJsYW5rX2VuZCwJdnN5bmNfc3RhcnQsCXZzeW5jX2VuZCAqLworICAgIDgwMCwJNzY4LAkJICAgIDgwMCwJCTc2OSwJCSAgICA3NzIsCisgICAgLyoJcGxsX20sCXBsbF9uLAkJCXBsbF9wICovCisgICAgMjksCSAgICA1LAkJCQkxCisgIH0sCisKKyAgeworICAgIERCRV9WVF8xMDI0Xzc2OF84NSwKKyAgICAvKglmbGFncywJd2lkdGgsCQkJaGVpZ2h0LAkJZmllbGRzX3NlYywJCWNmcmVxICovCisgICAgMCwJICAgIDEwMjQsCQkJNzY4LAkJODQ5OTcsCQkJOTQ1MDAsCisgICAgLyoJaHRvdGFsLAloYmxhbmtfc3RhcnQsCWhibGFua19lbmQsCWhzeW5jX3N0YXJ0LAloc3luY19lbmQgKi8KKyAgICAxMzc2LAkxMDI0LAkJICAgIDEzNzYsCQkxMDcyLAkJICAgIDExNjgsCisgICAgLyoJdnRvdGFsLAl2Ymxhbmtfc3RhcnQsCXZibGFua19lbmQsCXZzeW5jX3N0YXJ0LAl2c3luY19lbmQgKi8KKyAgICA4MDgsCTc2OCwJCSAgICA4MDgsCQk3NjksCQkgICAgNzcyLAorICAgIC8qCXBsbF9tLAlwbGxfbiwJCQlwbGxfcCAqLworICAgIDcsCSAgICAyLAkJCQkwCisgIH0sCisKKyAgeworICAgIERCRV9WVF8xMDI0Xzc2OF8xMjAsCisgICAgLyoJZmxhZ3MsCQkJCQl3aWR0aCwJCWhlaWdodCwJCQlmaWVsZHNfc2VjLAkJY2ZyZXEgKi8KKyAgICBEQkVfVk9GX1NURVJFTywJICAgIDEwMjQsCQk3NjgsCQkJMTE5ODAwLAkJCTEzMzE5NSwKKyAgICAvKglodG90YWwsCWhibGFua19zdGFydCwJaGJsYW5rX2VuZCwJaHN5bmNfc3RhcnQsCWhzeW5jX2VuZCAqLworICAgIDEzNzYsCTEwMjQsCQkgICAgMTM3NiwJCTEwNzIsCQkgICAgMTE2OCwKKyAgICAvKgl2dG90YWwsCXZibGFua19zdGFydCwJdmJsYW5rX2VuZCwJdnN5bmNfc3RhcnQsCXZzeW5jX2VuZCAqLworICAgIDgwOCwJNzY4LAkJICAgIDgwOCwJCTc2OSwJCSAgICA3NzIsCisgICAgLyoJcGxsX20sCXBsbF9uLAkJCXBsbF9wICovCisgICAgNSwJICAgIDEsCQkJCTAKKyAgfSwKKworICB7CisgICAgREJFX1ZUXzEyODBfMTAyNF81MCwKKyAgICAvKglmbGFncywJd2lkdGgsCQkJaGVpZ2h0LAkJZmllbGRzX3NlYywJCWNmcmVxICovCisgICAgMCwJICAgIDEyODAsCQkJMTAyNCwJCTUwMDAwLAkJCTg5NDYwLAorICAgIC8qCWh0b3RhbCwJaGJsYW5rX3N0YXJ0LAloYmxhbmtfZW5kLAloc3luY19zdGFydCwJaHN5bmNfZW5kICovCisgICAgMTY4MCwJMTI4MCwJCSAgICAxNjgwLAkJMTM2MCwJCSAgICAxNDgwLAorICAgIC8qCXZ0b3RhbCwJdmJsYW5rX3N0YXJ0LAl2YmxhbmtfZW5kLAl2c3luY19zdGFydCwJdnN5bmNfZW5kICovCisgICAgMTA2NSwJMTAyNCwJCSAgICAxMDY1LAkJMTAyNywJCSAgICAxMDMwLAorICAgIC8qCXBsbF9tLAlwbGxfbiwJCQlwbGxfcCAqLworICAgIDEwLAkgICAgMywJCQkJMAorICB9LAorCisgIHsKKyAgICBEQkVfVlRfMTI4MF8xMDI0XzYwLAorICAgIC8qCWZsYWdzLAl3aWR0aCwJCQloZWlnaHQsCQlmaWVsZHNfc2VjLAkJY2ZyZXEgKi8KKyAgICAwLAkgICAgMTI4MCwJCQkxMDI0LAkJNjAwMjAsCQkJMTA4MDAwLAorICAgIC8qCWh0b3RhbCwJaGJsYW5rX3N0YXJ0LAloYmxhbmtfZW5kLAloc3luY19zdGFydCwJaHN5bmNfZW5kICovCisgICAgMTY4OCwJMTI4MCwJCSAgICAxNjg4LAkJMTMyOCwJCSAgICAxNDQwLAorICAgIC8qCXZ0b3RhbCwJdmJsYW5rX3N0YXJ0LAl2YmxhbmtfZW5kLAl2c3luY19zdGFydCwJdnN5bmNfZW5kICovCisgICAgMTA2NiwJMTAyNCwJCSAgICAxMDY2LAkJMTAyNSwJCSAgICAxMDI4LAorICAgIC8qCXBsbF9tLAlwbGxfbiwJCQlwbGxfcCAqLworICAgIDQsCSAgICAxLAkJCSAgICAwCisgIH0sCisKKyAgeworICAgIERCRV9WVF8xMjgwXzEwMjRfNzUsCisgICAgLyoJZmxhZ3MsCXdpZHRoLAkJCWhlaWdodCwJCWZpZWxkc19zZWMsCQljZnJlcSAqLworICAgIDAsCSAgICAxMjgwLAkJCTEwMjQsCQk3NTAyNSwJCQkxMzUwMDAsCisgICAgLyoJaHRvdGFsLAloYmxhbmtfc3RhcnQsCWhibGFua19lbmQsCWhzeW5jX3N0YXJ0LAloc3luY19lbmQgKi8KKyAgICAxNjg4LAkxMjgwLAkJICAgIDE2ODgsCQkxMjk2LAkJICAgIDE0NDAsCisgICAgLyoJdnRvdGFsLAl2Ymxhbmtfc3RhcnQsCXZibGFua19lbmQsCXZzeW5jX3N0YXJ0LAl2c3luY19lbmQgKi8KKyAgICAxMDY2LAkxMDI0LAkJICAgIDEwNjYsCQkxMDI1LAkJICAgIDEwMjgsCisgICAgLyoJcGxsX20sCXBsbF9uLAkJCXBsbF9wICovCisgICAgNSwJICAgIDEsCQkJCTAKKyAgfSwKKworICB7CisgICAgREJFX1ZUXzEyODBfMTAyNF84NSwKKyAgICAvKglmbGFncywJd2lkdGgsCQkgICAgaGVpZ2h0LAkJZmllbGRzX3NlYywJICAgIGNmcmVxICovCisgICAgMCwJICAgIDEyODAsCQkgICAgMTAyNCwJCTg1MDI0LAkJICAgIDE1NzUwMCwKKyAgICAvKglodG90YWwsCWhibGFua19zdGFydCwJaGJsYW5rX2VuZCwJaHN5bmNfc3RhcnQsCWhzeW5jX2VuZCAqLworICAgIDE3MjgsCTEyODAsCQkgICAgMTcyOCwJCTEzNDQsCQkgICAgMTUwNCwKKyAgICAvKgl2dG90YWwsCXZibGFua19zdGFydCwJdmJsYW5rX2VuZCwJdnN5bmNfc3RhcnQsCXZzeW5jX2VuZCAqLworICAgIDEwNzIsCTEwMjQsCQkgICAgMTA3MiwJCTEwMjUsCQkgICAgMTAyOCwKKyAgICAvKglwbGxfbSwJcGxsX24sCQkgICAgcGxsX3AgKi8KKyAgICAyOSwJICAgIDUsCQkgICAgICAgIDAKKyAgfSwKKworICB7CisgICAgREJFX1ZUXzE2MDBfMTAyNF81MywKKyAgICAvKiBmbGFncywJd2lkdGgsCQkJaGVpZ2h0LAkJZmllbGRzX3NlYywgICAgIGNmcmVxICovCisgICAgREJFX1ZPRl9GTEFUUEFORUwgfCBEQkVfVk9GX01BR0lDS0VZLAorICAgIDE2MDAsCQkJMTAyNCwJCTUzMDAwLAkJCTEwNzQ0NywKKyAgICAvKiBodG90YWwsIGhibGFua19zdGFydCwgICBoYmxhbmtfZW5kLCAgICAgaHN5bmNfc3RhcnQsICAgIGhzeW5jX2VuZCAqLworICAgIDE5MDAsICAgMTYwMCwgICAgICAgICAgIDE5MDAsICAgICAgICAgICAxNjMwLCAgICAgICAgICAgMTczMCwKKyAgICAvKiB2dG90YWwsIHZibGFua19zdGFydCwgICB2YmxhbmtfZW5kLCAgICAgdnN5bmNfc3RhcnQsICAgIHZzeW5jX2VuZCAqLworICAgIDEwNjcsICAgMTAyNCwgICAgICAgICAgIDEwNjcsICAgICAgICAgICAxMDI3LCAgICAgICAgICAgMTAzMCwKKyAgICAvKiBwbGxfbSwgIHBsbF9uLCAgICAgICAgICBwbGxfcCAqLworICAgIDQsICAgICAgMSwgICAgICAgICAgICAgIDAKKyAgfSwKKworICB7CisgICAgREJFX1ZUXzE2MDBfMTAyNF82MCwKKyAgICAvKiBmbGFncywJCQkJCXdpZHRoLCAgICAgICAgICBoZWlnaHQsCQkJZmllbGRzX3NlYywgICAgIGNmcmVxICovCisgICAgREJFX1ZPRl9GTEFUUEFORUwsICAgMTYwMCwgICAgICAgICAgIDEwMjQsCQkJNjAwMDAsICAgICAgICAgIDEwNjkxMywKKyAgICAvKiBodG90YWwsIGhibGFua19zdGFydCwgICBoYmxhbmtfZW5kLCAgICAgaHN5bmNfc3RhcnQsICAgIGhzeW5jX2VuZCAqLworICAgIDE2NzAsICAgMTYwMCwgICAgICAgICAgIDE2NzAsICAgICAgICAgICAxNjMwLCAgICAgICAgICAgMTY1MCwKKyAgICAvKiB2dG90YWwsIHZibGFua19zdGFydCwgICB2YmxhbmtfZW5kLCAgICAgdnN5bmNfc3RhcnQsICAgIHZzeW5jX2VuZCAqLworICAgIDEwNjcsICAgMTAyNCwgICAgICAgICAgIDEwNjcsICAgICAgICAgICAxMDI3LCAgICAgICAgICAgMTAzMCwKKyAgICAvKiBwbGxfbSwgIHBsbF9uLCAgICAgICAgICBwbGxfcCAqLworICAgIDQsICAgICAgMSwgICAgICAgICAgICAgIDAKKyAgfSwKKworICB7CisgICAgREJFX1ZUXzE2MDBfMTIwMF81MCwKKyAgICAvKiBmbGFncywgIHdpZHRoLCAgICAgICAgICBoZWlnaHQsICAgICAgICAgZmllbGRzX3NlYywgICAgIGNmcmVxICovCisgICAgMCwgICAgICAxNjAwLCAgICAgICAgICAgMTIwMCwgICAgICAgICAgIDUwMDAwLCAgICAgICAgICAxMzA1MDAsCisgICAgLyogaHRvdGFsLCBoYmxhbmtfc3RhcnQsICAgaGJsYW5rX2VuZCwgICAgIGhzeW5jX3N0YXJ0LCAgICBoc3luY19lbmQgKi8KKyAgICAyMDg4LCAgIDE2MDAsICAgICAgICAgICAyMDg4LCAgICAgICAgICAgMTY0NCwgICAgICAgICAgIDE3NjQsCisgICAgLyogdnRvdGFsLCB2Ymxhbmtfc3RhcnQsICAgdmJsYW5rX2VuZCwgICAgIHZzeW5jX3N0YXJ0LCAgICB2c3luY19lbmQgKi8KKyAgICAxMjUwLCAgIDEyMDAsICAgICAgICAgICAxMjUwLCAgICAgICAgICAgMTIwNSwgICAgICAgICAgIDEyMTEsCisgICAgLyogcGxsX20sICBwbGxfbiwgICAgICAgICAgcGxsX3AgKi8KKyAgICAyNCwgICAgIDUsICAgICAgICAgICAgICAwCisgIH0sCisKKyAgeworICAgIERCRV9WVF8xNjAwXzEyMDBfNjAsCisgICAgLyogZmxhZ3MsICB3aWR0aCwgICAgICAgICAgaGVpZ2h0LCAgICAgICAgIGZpZWxkc19zZWMsICAgICBjZnJlcSAqLworICAgIDAsICAgICAgMTYwMCwgICAgICAgICAgIDEyMDAsICAgICAgICAgICA1OTk0MCwgICAgICAgICAgMTYyMDAwLAorICAgIC8qIGh0b3RhbCwgaGJsYW5rX3N0YXJ0LCAgIGhibGFua19lbmQsICAgICBoc3luY19zdGFydCwgICAgaHN5bmNfZW5kICovCisgICAgMjE2MCwgICAxNjAwLCAgICAgICAgICAgMjE2MCwgICAgICAgICAgIDE2NDQsICAgICAgICAgICAxODU2LAorICAgIC8qIHZ0b3RhbCwgdmJsYW5rX3N0YXJ0LCAgIHZibGFua19lbmQsICAgICB2c3luY19zdGFydCwgICAgdnN5bmNfZW5kICovCisgICAgMTI1MCwgICAxMjAwLCAgICAgICAgICAgMTI1MCwgICAgICAgICAgIDEyMDEsICAgICAgICAgICAxMjA0LAorICAgIC8qIHBsbF9tLCAgcGxsX24sICAgICAgICAgIHBsbF9wICovCisgICAgNiwJCTEsICAgICAgICAgICAgICAwCisgIH0sCisKKyAgeworICAgIERCRV9WVF8xNjAwXzEyMDBfNzUsCisgICAgLyogZmxhZ3MsICB3aWR0aCwgICAgICAgICAgaGVpZ2h0LCAgICAgICAgIGZpZWxkc19zZWMsICAgICBjZnJlcSAqLworICAgIDAsICAgICAgMTYwMCwgICAgICAgICAgIDEyMDAsICAgICAgICAgICA3NTAwMCwgICAgICAgICAgMjAyNTAwLAorICAgIC8qIGh0b3RhbCwgaGJsYW5rX3N0YXJ0LCAgIGhibGFua19lbmQsICAgICBoc3luY19zdGFydCwgICAgaHN5bmNfZW5kICovCisgICAgMjE2MCwgICAxNjAwLCAgICAgICAgICAgMjE2MCwgICAgICAgICAgIDE2NDQsICAgICAgICAgICAxODU2LAorICAgIC8qIHZ0b3RhbCwgdmJsYW5rX3N0YXJ0LCAgIHZibGFua19lbmQsICAgICB2c3luY19zdGFydCwgICAgdnN5bmNfZW5kICovCisgICAgMTI1MCwgICAxMjAwLCAgICAgICAgICAgMTI1MCwgICAgICAgICAgIDEyMDEsICAgICAgICAgICAxMjA0LAorICAgIC8qIHBsbF9tLCAgcGxsX24sICAgICAgICAgIHBsbF9wICovCisgICAgMTUsCQkyLCAgICAgICAgICAgICAgMAorICB9LAorCisgIHsKKyAgICBEQkVfVlRfMTkyMF8xMDgwXzUwLAorICAgIC8qIGZsYWdzLCAgd2lkdGgsICAgICAgICAgIGhlaWdodCwgICAgICAgICBmaWVsZHNfc2VjLCAgICAgY2ZyZXEgKi8KKyAgICAwLCAgICAgIDE5MjAsICAgICAgICAgICAxMDgwLCAgICAgICAgICAgNTAwMDAsICAgICAgICAgIDEzMzIwMCwKKyAgICAvKiBodG90YWwsIGhibGFua19zdGFydCwgICBoYmxhbmtfZW5kLCAgICAgaHN5bmNfc3RhcnQsICAgIGhzeW5jX2VuZCAqLworICAgIDIzNjgsICAgMTkyMCwgICAgICAgICAgIDIzNjgsICAgICAgICAgICAxOTUyLCAgICAgICAgICAgMjA5NiwKKyAgICAvKiB2dG90YWwsIHZibGFua19zdGFydCwgICB2YmxhbmtfZW5kLCAgICAgdnN5bmNfc3RhcnQsICAgIHZzeW5jX2VuZCAqLworICAgIDExMjUsICAgMTA4MCwgICAgICAgICAgIDExMjUsICAgICAgICAgICAxMDgzLCAgICAgICAgICAgMTA4NiwKKyAgICAvKiBwbGxfbSwgIHBsbF9uLCAgICAgICAgICBwbGxfcCAqLworICAgIDUsICAgICAgMSwgICAgICAgICAgICAgIDAKKyAgfSwKKworICB7CisgICAgREJFX1ZUXzE5MjBfMTA4MF82MCwKKyAgICAvKiBmbGFncywgIHdpZHRoLCAgICAgICAgICBoZWlnaHQsICAgICAgICAgZmllbGRzX3NlYywgICAgIGNmcmVxICovCisgICAgMCwgICAgICAxOTIwLCAgICAgICAgICAgMTA4MCwgICAgICAgICAgIDU5OTQwLCAgICAgICAgICAxNTk4NDAsCisgICAgLyogaHRvdGFsLCBoYmxhbmtfc3RhcnQsICAgaGJsYW5rX2VuZCwgICAgIGhzeW5jX3N0YXJ0LCAgICBoc3luY19lbmQgKi8KKyAgICAyMzY4LCAgIDE5MjAsICAgICAgICAgICAyMzY4LCAgICAgICAgICAgMTk1MiwgICAgICAgICAgIDIwOTYsCisgICAgLyogdnRvdGFsLCB2Ymxhbmtfc3RhcnQsICAgdmJsYW5rX2VuZCwgICAgIHZzeW5jX3N0YXJ0LCAgICB2c3luY19lbmQgKi8KKyAgICAxMTI1LCAgIDEwODAsICAgICAgICAgICAxMTI1LCAgICAgICAgICAgMTA4MywgICAgICAgICAgIDEwODYsCisgICAgLyogcGxsX20sICBwbGxfbiwgICAgICAgICAgcGxsX3AgKi8KKyAgICA2LCAgICAgIDEsICAgICAgICAgICAgICAwCisgIH0sCisKKyAgeworICAgIERCRV9WVF8xOTIwXzEwODBfNzIsCisgICAgLyogZmxhZ3MsICB3aWR0aCwgICAgICAgICAgaGVpZ2h0LCAgICAgICAgIGZpZWxkc19zZWMsICAgICBjZnJlcSAqLworICAgIDAsICAgICAgMTkyMCwgICAgICAgICAgIDEwODAsICAgICAgICAgICA3MjAwMCwgICAgICAgICAgMjE2MDIzLAorICAgIC8qIGh0b3RhbCwgaGJsYW5rX3N0YXJ0LCAgIGhibGFua19lbmQsICAgICBoc3luY19zdGFydCwgICAgaHN5bmNfZW5kICovCisgICAgMjU2MCwgICAxOTIwLCAgICAgICAgICAgMjU2MCwgICAgICAgICAgIDE5NjgsICAgICAgICAgICAyMTg0LAorICAgIC8qIHZ0b3RhbCwgdmJsYW5rX3N0YXJ0LCAgIHZibGFua19lbmQsICAgICB2c3luY19zdGFydCwgICAgdnN5bmNfZW5kICovCisgICAgMTE3MiwgICAxMDgwLCAgICAgICAgICAgMTE3MiwgICAgICAgICAgIDEwODMsICAgICAgICAgICAxMDg2LAorICAgIC8qIHBsbF9tLCAgcGxsX24sICAgICAgICAgIHBsbF9wICovCisgICAgOCwgICAgICAxLCAgICAgICAgICAgICAgMAorICB9LAorCisgIHsKKyAgICBEQkVfVlRfMTkyMF8xMjAwXzUwLAorICAgIC8qIGZsYWdzLCAgd2lkdGgsICAgICAgICAgIGhlaWdodCwgICAgICAgICBmaWVsZHNfc2VjLCAgICAgY2ZyZXEgKi8KKyAgICAwLCAgICAgIDE5MjAsICAgICAgICAgICAxMjAwLCAgICAgICAgICAgNTAwMDAsICAgICAgICAgIDE2MTUwMCwKKyAgICAvKiBodG90YWwsIGhibGFua19zdGFydCwgICBoYmxhbmtfZW5kLCAgICAgaHN5bmNfc3RhcnQsICAgIGhzeW5jX2VuZCAqLworICAgIDI1ODQsICAgMTkyMCwgICAgICAgICAgIDI1ODQsICAgICAgICAgICAxOTg0LCAgICAgICAgICAgMjI0MCwKKyAgICAvKiB2dG90YWwsIHZibGFua19zdGFydCwgICB2YmxhbmtfZW5kLCAgICAgdnN5bmNfc3RhcnQsICAgIHZzeW5jX2VuZCAqLworICAgIDEyNTAsICAgMTIwMCwgICAgICAgICAgIDEyNTAsICAgICAgICAgICAxMjAzLCAgICAgICAgICAgMTIwNiwKKyAgICAvKiBwbGxfbSwgIHBsbF9uLCAgICAgICAgICBwbGxfcCAqLworICAgIDYsICAgICAgMSwgICAgICAgICAgICAgIDAKKyAgfSwKKwkKKyAgeworICAgIERCRV9WVF8xOTIwXzEyMDBfNjAsCisgICAgLyogZmxhZ3MsICB3aWR0aCwgICAgICAgICAgaGVpZ2h0LCAgICAgICAgIGZpZWxkc19zZWMsICAgICBjZnJlcSAqLworICAgIDAsICAgICAgMTkyMCwgICAgICAgICAgIDEyMDAsICAgICAgICAgICA1OTk0MCwgICAgICAgICAgMTkzODAwLAorICAgIC8qIGh0b3RhbCwgaGJsYW5rX3N0YXJ0LCAgIGhibGFua19lbmQsICAgICBoc3luY19zdGFydCwgICAgaHN5bmNfZW5kICovCisgICAgMjU4NCwgICAxOTIwLCAgICAgICAgICAgMjU4NCwgICAgICAgICAgIDE5ODQsICAgICAgICAgICAyMjQwLAorICAgIC8qIHZ0b3RhbCwgdmJsYW5rX3N0YXJ0LCAgIHZibGFua19lbmQsICAgICB2c3luY19zdGFydCwgICAgdnN5bmNfZW5kICovCisgICAgMTI1MCwgICAxMjAwLCAgICAgICAgICAgMTI1MCwgICAgICAgICAgIDEyMDMsICAgICAgICAgICAxMjA2LAorICAgIC8qIHBsbF9tLCAgcGxsX24sICAgICAgICAgIHBsbF9wICovCisgICAgMjksICAgICA0LCAgICAgICAgICAgICAgMAorICB9LAorCisgIHsKKyAgICBEQkVfVlRfMTkyMF8xMjAwXzY2LAorICAgIC8qIGZsYWdzLCAgd2lkdGgsICAgICAgICAgIGhlaWdodCwgICAgICAgICBmaWVsZHNfc2VjLCAgICAgY2ZyZXEgKi8KKyAgICAwLCAgICAgIDE5MjAsICAgICAgICAgICAxMjAwLCAgICAgICAgICAgNjYwMDAsICAgICAgICAgIDIxMzE4MCwKKyAgICAvKiBodG90YWwsIGhibGFua19zdGFydCwgICBoYmxhbmtfZW5kLCAgICAgaHN5bmNfc3RhcnQsICAgIGhzeW5jX2VuZCAqLworICAgIDI1ODQsICAgMTkyMCwgICAgICAgICAgIDI1ODQsICAgICAgICAgICAxOTg0LCAgICAgICAgICAgMjI0MCwKKyAgICAvKiB2dG90YWwsIHZibGFua19zdGFydCwgICB2YmxhbmtfZW5kLCAgICAgdnN5bmNfc3RhcnQsICAgIHZzeW5jX2VuZCAqLworICAgIDEyNTAsICAgMTIwMCwgICAgICAgICAgIDEyNTAsICAgICAgICAgICAxMjAzLCAgICAgICAgICAgMTIwNiwKKyAgICAvKiBwbGxfbSwgIHBsbF9uLCAgICAgICAgICBwbGxfcCAqLworICAgIDgsICAgICAgMSwgICAgICAgICAgICAgIDAKKyAgfQorfTsKKworI2RlZmluZSBEQkVfVlRfU0laRSAgKHNpemVvZihkYmVWVGltaW5ncykvc2l6ZW9mKGRiZVZUaW1pbmdzWzBdKSkKKyNlbmRpZiAvLyBJTkNMVURFX1RJTUlOR19UQUJMRV9EQVRBCisKKyNlbmRpZiAvLyAhIF9fU0dJVldGQl9IX18KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdmlkZW8vc2lzZmIuaCBiL2luY2x1ZGUvdmlkZW8vc2lzZmIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzZiZjc5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS92aWRlby9zaXNmYi5oCkBAIC0wLDAgKzEsMTk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMDQgYnkgVGhvbWFzIFdpbmlzY2hob2ZlciwgVmllbm5hLCBBdXN0cmlhLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgbmFtZWQgTGljZW5zZSwKKyAqIG9yIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQorICovCisKKyNpZm5kZWYgX0xJTlVYX1NJU0ZCCisjZGVmaW5lIF9MSU5VWF9TSVNGQgorCisjaW5jbHVkZSA8YXNtL2lvY3RsLmg+CisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgUFVCTElDICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogdmJmbGFncyAqLworI2RlZmluZSBDUlQyX0RFRkFVTFQgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENSVDJfTENEICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIgIC8qIFRXOiBOZXZlciBjaGFuZ2UgdGhlIG9yZGVyIG9mIHRoZSBDUlQyX1hYWCBlbnRyaWVzICovCisjZGVmaW5lIENSVDJfVFYgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQgIC8qICAgICAoc2VlIFNJU0N5Y2xlQ1JUMlR5cGUoKSkgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSVDJfVkdBICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgVFZfTlRTQyAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBUVl9QQUwgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIFRWX0hJVklTSU9OICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgVFZfWVBCUFIgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBUVl9BVklERU8gICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIFRWX1NWSURFTyAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgVFZfU0NBUlQgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBWQl9DT05FWEFOVAkJMHgwMDAwMDgwMAkvKiA2NjEgc2VyaWVzIG9ubHkgKi8KKyNkZWZpbmUgVkJfVFJVTVBJT04JCVZCX0NPTkVYQU5UCS8qIDMwMCBzZXJpZXMgb25seSAqLworI2RlZmluZSBUVl9QQUxNICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIFRWX1BBTE4gICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgVFZfTlRTQ0oJCTB4MDAwMDEwMDAKKyNkZWZpbmUgVkJfMzAyRUxWCQkweDAwMDA0MDAwCisjZGVmaW5lIFRWX0NIU0NBUlQgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgVFZfQ0hZUEJQUjUyNUkgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBDUlQxX1ZHQQkJMHgwMDAwMDAwMAorI2RlZmluZSBDUlQxX0xDREEJCTB4MDAwMjAwMDAKKyNkZWZpbmUgVkdBMl9DT05ORUNURUQgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBWQl9ESVNQVFlQRV9DUlQxCTB4MDAwODAwMDAgIAkvKiBDUlQxIGNvbm5lY3RlZCBhbmQgdXNlZCAqLworI2RlZmluZSBWQl8zMDEgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwCS8qIFZpZGVvIGJyaWRnZSB0eXBlICovCisjZGVmaW5lIFZCXzMwMUIgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgVkJfMzAyQiAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMAorI2RlZmluZSBWQl8zMHhCREgJCTB4MDA4MDAwMDAgICAgICAvKiAzMHhCIERIIHZlcnNpb24gKHcvbyBMQ0Qgc3VwcG9ydCkgKi8KKyNkZWZpbmUgVkJfTFZEUyAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBWQl9DSFJPTlRFTCAgICAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIFZCXzMwMUxWICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgVkJfMzAyTFYgICAgICAgICAgICAgICAgMHgwODAwMDAwMAorI2RlZmluZSBWQl8zMDFDCQkJMHgxMDAwMDAwMAorI2RlZmluZSBWQl9TSU5HTEVfTU9ERSAgICAgICAgICAweDIwMDAwMDAwICAgCS8qIENSVDEgb3IgQ1JUMjsgZGV0ZXJtaW5lZCBieSBESVNQVFlQRV9DUlR4ICovCisjZGVmaW5lIFZCX01JUlJPUl9NT0RFCQkweDQwMDAwMDAwICAgCS8qIENSVDEgKyBDUlQyIGlkZW50aWNhbCAobWlycm9yIG1vZGUpICovCisjZGVmaW5lIFZCX0RVQUxWSUVXX01PREUJMHg4MDAwMDAwMCAgIAkvKiBDUlQxICsgQ1JUMiBpbmRlcGVuZGVudCAoZHVhbCBoZWFkIG1vZGUpICovCisKKy8qIEFsaWFzZXM6ICovCisjZGVmaW5lIENSVDJfRU5BQkxFCQkoQ1JUMl9MQ0QgfCBDUlQyX1RWIHwgQ1JUMl9WR0EpCisjZGVmaW5lIFRWX1NUQU5EQVJEICAgICAgICAgICAgIChUVl9OVFNDIHwgVFZfUEFMIHwgVFZfUEFMTSB8IFRWX1BBTE4gfCBUVl9OVFNDSikKKyNkZWZpbmUgVFZfSU5URVJGQUNFICAgICAgICAgICAgKFRWX0FWSURFT3xUVl9TVklERU98VFZfU0NBUlR8VFZfSElWSVNJT058VFZfWVBCUFJ8VFZfQ0hTQ0FSVHxUVl9DSFlQQlBSNTI1SSkKKworLyogT25seSBpZiBUVl9ZUEJQUiBpcyBzZXQ6ICovCisjZGVmaW5lIFRWX1lQQlBSNTI1SQkJVFZfTlRTQworI2RlZmluZSBUVl9ZUEJQUjUyNVAJCVRWX1BBTAorI2RlZmluZSBUVl9ZUEJQUjc1MFAJCVRWX1BBTE0KKyNkZWZpbmUgVFZfWVBCUFIxMDgwSQkJVFZfUEFMTgorI2RlZmluZSBUVl9ZUEJQUkFMTCAJCShUVl9ZUEJQUjUyNUkgfCBUVl9ZUEJQUjUyNVAgfCBUVl9ZUEJQUjc1MFAgfCBUVl9ZUEJQUjEwODBJKQorCisjZGVmaW5lIFZCX1NJU0JSSURHRSAgICAgICAgICAgIChWQl8zMDF8VkJfMzAxQnxWQl8zMDFDfFZCXzMwMkJ8VkJfMzAxTFZ8VkJfMzAyTFZ8VkJfMzAyRUxWKQorI2RlZmluZSBWQl9TSVNUVkJSSURHRSAgICAgICAgICAoVkJfMzAxfFZCXzMwMUJ8VkJfMzAxQ3xWQl8zMDJCfFZCXzMwMUxWfFZCXzMwMkxWKQorI2RlZmluZSBWQl9WSURFT0JSSURHRQkJKFZCX1NJU0JSSURHRSB8IFZCX0xWRFMgfCBWQl9DSFJPTlRFTCB8IFZCX0NPTkVYQU5UKQorCisjZGVmaW5lIFZCX0RJU1BUWVBFX0RJU1AyCUNSVDJfRU5BQkxFCisjZGVmaW5lIFZCX0RJU1BUWVBFX0NSVDIJQ1JUMl9FTkFCTEUKKyNkZWZpbmUgVkJfRElTUFRZUEVfRElTUDEJVkJfRElTUFRZUEVfQ1JUMQorI2RlZmluZSBWQl9ESVNQTU9ERV9TSU5HTEUJVkJfU0lOR0xFX01PREUKKyNkZWZpbmUgVkJfRElTUE1PREVfTUlSUk9SCVZCX01JUlJPUl9NT0RFCisjZGVmaW5lIFZCX0RJU1BNT0RFX0RVQUwJVkJfRFVBTFZJRVdfTU9ERQorI2RlZmluZSBWQl9ESVNQTEFZX01PREUgICAgICAgCShTSU5HTEVfTU9ERSB8IE1JUlJPUl9NT0RFIHwgRFVBTFZJRVdfTU9ERSkKKworLyogU3RydWN0dXJlIGFyZ3VtZW50IGZvciBTSVNGQl9HRVRfSU5GTyBpb2N0bCAgKi8KK3R5cGVkZWYgc3RydWN0IF9TSVNGQl9JTkZPIHNpc2ZiX2luZm8sICpwc2lzZmJfaW5mbzsKKworc3RydWN0IF9TSVNGQl9JTkZPIHsKKwlfX3UzMiAgIHNpc2ZiX2lkOyAgICAgICAgIAkvKiBmb3IgaWRlbnRpZnlpbmcgc2lzZmIgKi8KKyNpZm5kZWYgU0lTRkJfSUQKKyNkZWZpbmUgU0lTRkJfSUQJICAweDUzNDk1MzQ2ICAgIC8qIElkZW50aWZ5IG15c2VsZiB3aXRoICdTSVNGJyAqLworI2VuZGlmCisgCV9fdTMyICAgY2hpcF9pZDsJCS8qIFBDSS1JRCBvZiBkZXRlY3RlZCBjaGlwICovCisJX191MzIgICBtZW1vcnk7CQkJLyogdmlkZW8gbWVtb3J5IGluIEtCIHdoaWNoIHNpc2ZiIG1hbmFnZXMgKi8KKwlfX3UzMiAgIGhlYXBzdGFydDsgICAgICAgICAgICAJLyogaGVhcCBzdGFydCAoPSBzaXNmYiAibWVtIiBhcmd1bWVudCkgaW4gS0IgKi8KKwlfX3U4ICAgIGZidmlkbW9kZTsJCS8qIGN1cnJlbnQgc2lzZmIgbW9kZSAqLworCisJX191OCAgICBzaXNmYl92ZXJzaW9uOworCV9fdTggICAgc2lzZmJfcmV2aXNpb247CisJX191OCAJc2lzZmJfcGF0Y2hsZXZlbDsKKworCV9fdTggCXNpc2ZiX2NhcHM7CQkvKiBzaXNmYiBjYXBhYmlsaXRpZXMgKi8KKworCV9fdTMyCXNpc2ZiX3RxbGVuOwkJLyogdHVyYm8gcXVldWUgbGVuZ3RoIChpbiBLQikgKi8KKworCV9fdTMyIAlzaXNmYl9wY2lidXM7ICAgICAgCS8qIFRoZSBjYXJkJ3MgUENJIElEICovCisJX191MzIgCXNpc2ZiX3BjaXNsb3Q7CisJX191MzIgCXNpc2ZiX3BjaWZ1bmM7CisKKwlfX3U4IAlzaXNmYl9sY2RwZGM7CQkvKiBQYW5lbERlbGF5Q29tcGVuc2F0aW9uICovCisKKwlfX3U4IAlzaXNmYl9sY2RhOwkJLyogRGV0ZWN0ZWQgc3RhdHVzIG9mIExDREEgZm9yIGxvdyByZXMvdGV4dCBtb2RlcyAqLworCisJX191MzIgCXNpc2ZiX3ZiZmxhZ3M7CisJX191MzIgCXNpc2ZiX2N1cnJlbnR2YmZsYWdzOworCisJX191MzIgCXNpc2ZiX3NjYWxlbGNkOworCV9fdTMyIAlzaXNmYl9zcGVjaWFsdGltaW5nOworCisJX191OCAJc2lzZmJfaGF2ZWVtaTsKKwlfX3U4IAlzaXNmYl9lbWkzMCxzaXNmYl9lbWkzMSxzaXNmYl9lbWkzMixzaXNmYl9lbWkzMzsKKwlfX3U4IAlzaXNmYl9oYXZlZW1pbGNkOworCisJX191OCAJc2lzZmJfbGNkcGRjYTsJCS8qIFBhbmVsRGVsYXlDb21wZW5zYXRpb24gZm9yIExDRC12aWEtQ1JUMSAqLworCisJX191MTYJc2lzZmJfdHZ4cG9zLCBzaXNmYl90dnlwb3M7ICAvKiBXYXJuaW5nOiBWYWx1ZXMgKyAzMiAhICovCisKKwlfX3U4IAlyZXNlcnZlZFsyMDhdOyAJCS8qIGZvciBmdXR1cmUgdXNlICovCit9OworCisvKiBBZGR0aW9uYWwgSU9DVExzIGZvciBjb21tdW5pY2F0aW9uIHNpc2ZiIDw+IFggZHJpdmVyICAgICAgICAgICAgICAgICovCisvKiBJZiBjaGFuZ2luZyB0aGlzLCB2Z2F0eXBlcy5oIG11c3QgYWxzbyBiZSBjaGFuZ2VkIChmb3IgWCBkcml2ZXIpICAgICovCisKKy8qIGlvY3RsIGZvciBpZGVudGlmeWluZyBhbmQgZ2l2aW5nIHNvbWUgaW5mbyAoZXNwLiBtZW1vcnkgaGVhcCBzdGFydCkgKi8KKyNkZWZpbmUgU0lTRkJfR0VUX0lORk9fU0laRSAgCV9JT1IoMHhGMywweDAwLF9fdTMyKQorI2RlZmluZSBTSVNGQl9HRVRfSU5GTwkgIAlfSU9SKDB4RjMsMHgwMSxzdHJ1Y3QgX1NJU0ZCX0lORk8pCisKKy8qIGlvY3RybCB0byBnZXQgY3VycmVudCB2ZXJ0aWNhbCByZXRyYWNlIHN0YXR1cyAqLworI2RlZmluZSBTSVNGQl9HRVRfVkJSU1RBVFVTICAJX0lPUigweEYzLDB4MDIsX191MzIpCisKKy8qIGlvY3RsIHRvIGVuYWJsZS9kaXNhYmxlIHBhbm5pbmcgYXV0by1tYXhpbWl6ZSAobGlrZSBub21heCBwYXJhbWV0ZXIpICovCisjZGVmaW5lIFNJU0ZCX0dFVF9BVVRPTUFYSU1JWkUgCV9JT1IoMHhGMywweDAzLF9fdTMyKQorI2RlZmluZSBTSVNGQl9TRVRfQVVUT01BWElNSVpFIAlfSU9XKDB4RjMsMHgwMyxfX3UzMikKKworLyogaW9jdGxzIHRvIHJlbG9jYXRlIFRWIG91dHB1dCAoeD1EWzMxOjE2XSwgeT1EWzE1OjBdLCArIDMyKSovCisjZGVmaW5lIFNJU0ZCX0dFVF9UVlBPU09GRlNFVCAgIF9JT1IoMHhGMywweDA0LF9fdTMyKQorI2RlZmluZSBTSVNGQl9TRVRfVFZQT1NPRkZTRVQgICBfSU9XKDB4RjMsMHgwNCxfX3UzMikKKworLyogaW9jdGwgZm9yIGxvY2tpbmcgc2lzZmIgKG5vIHJlZ2lzdGVyIGFjY2VzcyBkdXJpbmcgbG9jaykgKi8KKy8qIEFzIG9mIG5vdywgb25seSB1c2VkIHRvIGF2b2lkIHJlZ2lzdGVyIGFjY2VzcyBkdXJpbmcKKyAqIHRoZSBpb2N0bHMgbGlzdGVkIGFib3ZlLgorICovCisjZGVmaW5lIFNJU0ZCX1NFVF9MT0NLICAJX0lPVygweEYzLDB4MDYsX191MzIpCisKKy8qIG1vcmUgdG8gY29tZSBzb29uICovCisKKy8qIGlvY3RscyAweEYzIHVwIHRvIDB4M0YgcmVzZXJ2ZWQgZm9yIHNpc2ZiICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogVGhlIGZvbGxvd2luZyBhcmUgZGVwcmVjYXRlZCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGFueW1vcmU6ICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIGlvY3RsIGZvciBpZGVudGlmeWluZyBhbmQgZ2l2aW5nIHNvbWUgaW5mbyAoZXNwLiBtZW1vcnkgaGVhcCBzdGFydCkgKi8KKyNkZWZpbmUgU0lTRkJfR0VUX0lORk9fT0xEICAJICAgX0lPUignbicsMHhGOCxfX3UzMikKKy8qIGlvY3RybCB0byBnZXQgY3VycmVudCB2ZXJ0aWNhbCByZXRyYWNlIHN0YXR1cyAqLworI2RlZmluZSBTSVNGQl9HRVRfVkJSU1RBVFVTX09MRAkgICBfSU9SKCduJywweEY5LF9fdTMyKQorLyogaW9jdGwgdG8gZW5hYmxlL2Rpc2FibGUgcGFubmluZyBhdXRvLW1heGltaXplIChsaWtlIG5vbWF4IHBhcmFtZXRlcikgKi8KKyNkZWZpbmUgU0lTRkJfR0VUX0FVVE9NQVhJTUlaRV9PTEQgX0lPUignbicsMHhGQSxfX3UzMikKKyNkZWZpbmUgU0lTRkJfU0VUX0FVVE9NQVhJTUlaRV9PTEQgX0lPVygnbicsMHhGQSxfX3UzMikKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICBFbmQgb2YgZGVwcmVjYXRlZCBpb2N0bCBudW1iZXJzICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogRm9yIGZiIG1lbW9yeSBtYW5hZ2VyIChGQklPX0FMTE9DLCBGQklPX0ZSRUUpICovCitzdHJ1Y3Qgc2lzX21lbXJlcSB7CisJX191MzIgCW9mZnNldDsKKwlfX3UzMiAJc2l6ZTsKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICBQUklWQVRFICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgIChmb3IgSU4tS0VSTkVMIHVzYWdlIG9ubHkpICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZkZWYgX19LRVJORUxfXworI2RlZmluZQlVTktOT1dOX1ZHQSAgMAorI2RlZmluZQlTSVNfMzAwX1ZHQSAgMQorI2RlZmluZQlTSVNfMzE1X1ZHQSAgMgorCitleHRlcm4gdm9pZCBzaXNfbWFsbG9jKHN0cnVjdCBzaXNfbWVtcmVxICpyZXEpOworZXh0ZXJuIHZvaWQgc2lzX2ZyZWUodTMyIGJhc2UpOworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS92aWRlby9zc3RmYi5oIGIvaW5jbHVkZS92aWRlby9zc3RmYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkNzdiNTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3ZpZGVvL3NzdGZiLmgKQEAgLTAsMCArMSwzNTQgQEAKKy8qCisgKiBsaW51eC9kcml2ZXJzL3ZpZGVvL3NzdGZiLmggLS0gdm9vZG9vIGdyYXBoaWNzIGZyYW1lIGJ1ZmZlcgorICoKKyAqICAgICBDb3B5cmlnaHQgKGMpIDIwMDAsMjAwMSBHaG96bGFuZSBUb3VtaSA8Z3RvdW1pQG1lc3NlbC5lbXNlLmZyPgorICoKKyAqICAgICBDcmVhdGVkIDI4IEF1ZyAyMDAxIGJ5IEdob3psYW5lIFRvdW1pCisgKi8KKworCisjaWZuZGVmIF9TU1RGQl9IXworI2RlZmluZSBfU1NURkJfSF8KKworLyoKKyAqCisgKiAgRGVidWcgU3R1ZmYKKyAqCisgKi8KKworI2lmZGVmIFNTVF9ERUJVRworIyAgZGVmaW5lIGRwcmludGsoWC4uLikJCXByaW50aygic3N0ZmI6ICIgWCkKKyMgIGRlZmluZSBTU1RfREVCVUdfUkVHICAxCisjICBkZWZpbmUgU1NUX0RFQlVHX0ZVTkMgMQorIyAgZGVmaW5lIFNTVF9ERUJVR19WQVIgIDEKKyNlbHNlCisjICBkZWZpbmUgZHByaW50ayhYLi4uKQorIyAgZGVmaW5lIFNTVF9ERUJVR19SRUcgIDAKKyMgIGRlZmluZSBTU1RfREVCVUdfRlVOQyAwCisjICBkZWZpbmUgU1NUX0RFQlVHX1ZBUiAgMAorI2VuZGlmCisKKyNpZiAoU1NUX0RFQlVHX1JFRyA+IDApCisjICBkZWZpbmUgcl9kcHJpbnRrKFguLi4pCWRwcmludGsoWCkKKyNlbHNlCisjICBkZWZpbmUgcl9kcHJpbnRrKFguLi4pCisjZW5kaWYKKyNpZiAoU1NUX0RFQlVHX1JFRyA+IDEpCisjICBkZWZpbmUgcl9kZHByaW50ayhYLi4uKQlkcHJpbnRrKCIgIiBYKQorI2Vsc2UKKyMgIGRlZmluZSByX2RkcHJpbnRrKFguLi4pCisjZW5kaWYKKworI2lmIChTU1RfREVCVUdfRlVOQyA+IDApCisjICBkZWZpbmUgZl9kcHJpbnRrKFguLi4pCWRwcmludGsoWCkKKyNlbHNlCisjICBkZWZpbmUgZl9kcHJpbnRrKFguLi4pCisjZW5kaWYKKyNpZiAoU1NUX0RFQlVHX0ZVTkMgPiAxKQorIyAgZGVmaW5lIGZfZGRwcmludGsoWC4uLikJZHByaW50aygiICIgWCkKKyNlbHNlCisjICBkZWZpbmUgZl9kZHByaW50ayhYLi4uKQorI2VuZGlmCisjaWYgKFNTVF9ERUJVR19GVU5DID4gMikKKyMgIGRlZmluZSBmX2RkZHByaW50ayhYLi4uKQlkcHJpbnRrKCIgIiBYKQorI2Vsc2UKKyMgIGRlZmluZSBmX2RkZHByaW50ayhYLi4uKQorI2VuZGlmCisKKyNpZiAoU1NUX0RFQlVHX1ZBUiA+IDApCisjICBkZWZpbmUgdl9kcHJpbnRrKFguLi4pCWRwcmludGsoWCkKKyMgIGRlZmluZSBwcmludF92YXIoViwgWC4uLikJXAorICAgewkJCQlcCisgICAgIGRwcmludGsoWCk7CQlcCisgICAgIHByaW50aygiIDpcbiIpOwkJXAorICAgICBzc3RfZGJnX3ByaW50X3ZhcihWKTsJXAorICAgfQorI2Vsc2UKKyMgIGRlZmluZSB2X2RwcmludGsoWC4uLikKKyMgIGRlZmluZSBwcmludF92YXIoWCxZLi4uKQorI2VuZGlmCisKKyNkZWZpbmUgZXByaW50ayhYLi4uKQlwcmludGsoS0VSTl9FUlIgInNzdGZiOiAiIFgpCisjZGVmaW5lIGlwcmludGsoWC4uLikJcHJpbnRrKEtFUk5fSU5GTyAic3N0ZmI6ICIgWCkKKyNkZWZpbmUgd3ByaW50ayhYLi4uKQlwcmludGsoS0VSTl9XQVJOSU5HICJzc3RmYjogIiBYKQorCisjZGVmaW5lIEJJVCh4KQkJKDF1bDw8KHgpKQorI2RlZmluZSBQT1cyKHgpCQkoMXVsPDwoeCkpCisKKy8qCisgKgorICogIENvbnN0CisgKgorICovCisKKy8qIHBjaSBzdHVmZiAqLworI2RlZmluZSBQQ0lfSU5JVF9FTkFCTEUJCTB4NDAKKyMgIGRlZmluZSBQQ0lfRU5fSU5JVF9XUgkgIEJJVCgwKQorIyAgZGVmaW5lIFBDSV9FTl9GSUZPX1dSCSAgQklUKDEpCisjICBkZWZpbmUgUENJX1JFTUFQX0RBQwkJICBCSVQoMikKKyNkZWZpbmUgUENJX1ZDTEtfRU5BQkxFCQkweGMwCS8qIGVuYWJsZSB2aWRlbyAqLworI2RlZmluZSBQQ0lfVkNMS19ESVNBQkxFCTB4ZTAKKworLyogcmVnaXN0ZXIgb2Zmc2V0cyBmcm9tIG1lbUJhc2VBZGRyICovCisjZGVmaW5lIFNUQVRVUwkJCTB4MDAwMAorIyAgZGVmaW5lIFNUQVRVU19GQklfQlVTWQkgIEJJVCg3KQorI2RlZmluZSBGQlpNT0RFCQkJMHgwMTEwCisjICBkZWZpbmUgRU5fQ0xJUFBJTkcJCSAgQklUKDApCS8qIGVuYWJsZSBjbGlwcGluZyAqLworIyAgZGVmaW5lIEVOX1JHQl9XUklURQkJICBCSVQoOSkJLyogZW5hYmxlIHdyaXRlcyB0byByZ2IgYXJlYSAqLworIyAgZGVmaW5lIEVOX0FMUEhBX1dSSVRFCSAgQklUKDEwKQorIyAgZGVmaW5lIEVOR0lORV9JTlZFUlRfWQkgIEJJVCgxNykJLyogaW52ZXJ0IFkgb3JpZ2luIChwaXBlKSAqLworI2RlZmluZSBMRkJNT0RFCQkJMHgwMTE0CisjICBkZWZpbmUgTEZCXzU2NQkJICAwCQkvKiBiaXRzIDM6MCAuMTYgYml0cyBSR0IgKi8KKyMgIGRlZmluZSBMRkJfODg4CQkgIDQJCS8qIDI0IGJpdHMgUkdCICovCisjICBkZWZpbmUgTEZCXzg4ODgJCSAgNQkJLyogMzIgYml0cyBBUkdCICovCisjICBkZWZpbmUgV1JfQlVGRl9GUk9OVAkJICAwCQkvKiB3cml0ZSBidWYgc2VsZWN0IChmcm9udCkgKi8KKyMgIGRlZmluZSBXUl9CVUZGX0JBQ0sJCSAgKDEgPDwgNCkJLyogYmFjayAqLworIyAgZGVmaW5lIFJEX0JVRkZfRlJPTlQJCSAgMAkJLyogcmVhZCBidWZmIHNlbGVjdCAoZnJvbnQpICovCisjICBkZWZpbmUgUkRfQlVGRl9CQUNLCQkgICgxIDw8IDYpCS8qIGJhY2sgKi8KKyMgIGRlZmluZSBFTl9QWExfUElQRUxJTkUJICBCSVQoOCkJLyogcGl4ZWwgcGlwZWxpbmUgKGNsaXAuLikqLworIyAgZGVmaW5lIExGQl9XT1JEX1NXSVpaTEVfV1IJICBCSVQoMTEpCS8qIGVuYWJsZSB3cml0ZS13b3Jkc3dhcCAoYmlnLWVuZGlhbikgKi8KKyMgIGRlZmluZSBMRkJfQllURV9TV0laWkxFX1dSCSAgQklUKDEyKQkvKiBlbmFibGUgd3JpdGUtYnl0ZXN3YXAgKGJpZy1lbmRpYW4pICovCisjICBkZWZpbmUgTEZCX0lOVkVSVF9ZCQkgIEJJVCgxMykJLyogaW52ZXJ0IFkgb3JpZ2luIChMRkIpICovCisjICBkZWZpbmUgTEZCX1dPUkRfU1dJWlpMRV9SRAkgIEJJVCgxNSkJLyogZW5hYmxlIHJlYWQtd29yZHN3YXAgKGJpZy1lbmRpYW4pICovCisjICBkZWZpbmUgTEZCX0JZVEVfU1dJWlpMRV9SRAkgIEJJVCgxNikJLyogZW5hYmxlIHJlYWQtYnl0ZXN3YXAgKGJpZy1lbmRpYW4pICovCisjZGVmaW5lIENMSVBfTEVGVF9SSUdIVAkJMHgwMTE4CisjZGVmaW5lIENMSVBfTE9XWV9ISUdIWQkJMHgwMTFjCisjZGVmaW5lIE5PUENNRAkJCTB4MDEyMAorI2RlZmluZSBGQVNURklMTENNRAkJMHgwMTI0CisjZGVmaW5lIFNXQVBCVUZGQ01ECQkweDAxMjgKKyNkZWZpbmUgRkJJSU5JVDQJCTB4MDIwMAkJLyogbWlzYyBjb250cm9scyAqLworIyAgZGVmaW5lIEZBU1RfUENJX1JFQURTCSAgMAkJLyogMSB3YWl0c3RhdGUgKi8KKyMgIGRlZmluZSBTTE9XX1BDSV9SRUFEUwkgIEJJVCgwKQkvKiAyIHdzICovCisjICBkZWZpbmUgTEZCX1JFQURfQUhFQUQJICBCSVQoMSkKKyNkZWZpbmUgQkFDS1BPUkNICQkweDAyMDgKKyNkZWZpbmUgVklERU9ESU1FTlNJT05TCQkweDAyMGMKKyNkZWZpbmUgRkJJSU5JVDAJCTB4MDIxMAkJLyogbWlzYytmaWZvICBjb250cm9scyAqLworIyAgZGVmaW5lIEVOX1ZHQV9QQVNTVEhST1VHSAkgIEJJVCgwKQorIyAgZGVmaW5lIEZCSV9SRVNFVAkJICBCSVQoMSkKKyMgIGRlZmluZSBGSUZPX1JFU0VUCQkgIEJJVCgyKQorI2RlZmluZSBGQklJTklUMQkJMHgwMjE0CQkvKiBQQ0kgKyB2aWRlbyBjb250cm9scyAqLworIyAgZGVmaW5lIFZJREVPX01BU0sJCSAgMHg4MDgwMDEwZgkvKiBtYXNrcyB2aWRlbyByZWxhdGVkIGJpdHMgVjErVjIqLworIyAgZGVmaW5lIEZBU1RfUENJX1dSSVRFUwkgIDAJCS8qIDAgd3MgKi8KKyMgIGRlZmluZSBTTE9XX1BDSV9XUklURVMJICBCSVQoMSkJLyogMSB3cyAqLworIyAgZGVmaW5lIEVOX0xGQl9SRUFECQkgIEJJVCgzKQorIyAgZGVmaW5lIFRJTEVTX0lOX1hfU0hJRlQJICA0CisjICBkZWZpbmUgVklERU9fUkVTRVQJCSAgQklUKDgpCisjICBkZWZpbmUgRU5fQkxBTktJTkcJCSAgQklUKDEyKQorIyAgZGVmaW5lIEVOX0RBVEFfT0UJCSAgQklUKDEzKQorIyAgZGVmaW5lIEVOX0JMQU5LX09FCQkgIEJJVCgxNCkKKyMgIGRlZmluZSBFTl9IVlNZTkNfT0UJCSAgQklUKDE1KQorIyAgZGVmaW5lIEVOX0RDTEtfT0UJCSAgQklUKDE2KQorIyAgZGVmaW5lIFNFTF9JTlBVVF9WQ0xLXzJYCSAgMAkJLyogYml0IDE3ICovCisjICBkZWZpbmUgU0VMX0lOUFVUX1ZDTEtfU0xBVkUJICBCSVQoMTcpCisjICBkZWZpbmUgU0VMX1NPVVJDRV9WQ0xLX1NMQVZFCSAgMAkJLyogYml0cyAyMToyMCAqLworIyAgZGVmaW5lIFNFTF9TT1VSQ0VfVkNMS18yWF9ESVYyICgweDAxIDw8IDIwKQorIyAgZGVmaW5lIFNFTF9TT1VSQ0VfVkNMS18yWF9TRUwgICgweDAyIDw8IDIwKQorIyAgZGVmaW5lIEVOXzI0QlBQCQkgIEJJVCgyMikKKyMgIGRlZmluZSBUSUxFU19JTl9YX01TQl9TSElGVAkgIDI0CQkvKiB2MiAqLworIyAgZGVmaW5lIFZDTEtfMlhfU0VMX0RFTF9TSElGVAkgIDI3CQkvKiB2Y2xrIG91dCBkZWxheSAwLDQsNiw4bnMgKi8KKyMgIGRlZmluZSBWQ0xLX0RFTF9TSElGVAkgIDI5CQkvKiB2Y2xrIGluIGRlbGF5ICovCisjZGVmaW5lIEZCSUlOSVQyCQkweDAyMTgJCS8qIERyYW0gY29udHJvbHMgKi8KKyMgIGRlZmluZSBFTl9GQVNUX1JBU19SRUFECSAgQklUKDUpCisjICBkZWZpbmUgRU5fRFJBTV9PRQkJICBCSVQoNikKKyMgIGRlZmluZSBFTl9GQVNUX1JEX0FIRUFEX1dSCSAgQklUKDcpCisjICBkZWZpbmUgVklERU9fT0ZGU0VUX1NISUZUCSAgMTEJCS8qIHVuaXQ6ICNyb3dzIHRpbGUgNjR4MTYvMiAqLworIyAgZGVmaW5lIFNXQVBfREFDVlNZTkMJCSAgMAorIyAgZGVmaW5lIFNXQVBfREFDREFUQTAJCSAgKDEgPDwgOSkKKyMgIGRlZmluZSBTV0FQX0ZJRk9fU1RBTEwJICAoMiA8PCA5KQorIyAgZGVmaW5lIEVOX1JEX0FIRUFEX0ZJRk8JICBCSVQoMjEpCisjICBkZWZpbmUgRU5fRFJBTV9SRUZSRVNICSAgQklUKDIyKQorIyAgZGVmaW5lIERSQU1fUkVGUkVTSF8xNgkgICgweDMwIDw8IDIzKQkvKiBkcmFtIDE2IG1zICovCisjZGVmaW5lIERBQ19SRUFECQlGQklJTklUMgkvKiBpbiByZW1hcCBtb2RlICovCisjZGVmaW5lIEZCSUlOSVQzCQkweDAyMWMJCS8qIGZiaSBjb250cm9scyAqLworIyAgZGVmaW5lIERJU0FCTEVfVEVYVFVSRQkgIEJJVCg2KQorIyAgZGVmaW5lIFlfU1dBUF9PUklHSU5fU0hJRlQJICAyMgkJLyogWSBzd2FwIHN1YnN0cmFjdGlvbiB2YWx1ZSAqLworI2RlZmluZSBIU1lOQwkJCTB4MDIyMAorI2RlZmluZSBWU1lOQwkJCTB4MDIyNAorI2RlZmluZSBEQUNfREFUQQkJMHgwMjJjCisjICBkZWZpbmUgREFDX1JFQURfQ01ECQkgIEJJVCgxMSkJLyogc2V0IHJlYWQgZGFjcmVnIG1vZGUgKi8KKyNkZWZpbmUgRkJJSU5JVDUJCTB4MDI0NAkJLyogdjIgc3BlY2lmaWMgKi8KKyMgIGRlZmluZSBGQklJTklUNV9NQVNLCQkgIDB4ZmE0MGZmZmYgICAgLyogbWFzayB2aWRlbyBiaXRzKi8KKyMgIGRlZmluZSBIRE9VQkxFU0NBTgkJICBCSVQoMjApCisjICBkZWZpbmUgVkRPVUJMRVNDQU4JCSAgQklUKDIxKQorIyAgZGVmaW5lIEhTWU5DX0hJR0ggCQkgIEJJVCgyMykKKyMgIGRlZmluZSBWU1lOQ19ISUdIIAkJICBCSVQoMjQpCisjICBkZWZpbmUgSU5URVJMQUNFCQkgIEJJVCgyNikKKyNkZWZpbmUgRkJJSU5JVDYJCTB4MDI0OAkJLyogdjIgc3BlY2lmaWMgKi8KKyMgIGRlZmluZSBUSUxFU19JTl9YX0xTQl9TSElGVAkgIDMwCQkvKiB2MiAqLworI2RlZmluZSBGQklJTklUNwkJMHgwMjRjCQkvKiB2MiBzcGVjaWZpYyAqLworCisjZGVmaW5lIEJMVFNSQ0JBU0VBRERSCQkweDAyYzAJLyogQml0QkxUIFNvdXJjZSBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgQkxURFNUQkFTRUFERFIJCTB4MDJjNAkvKiBCaXRCTFQgRGVzdGluYXRpb24gYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIEJMVFhZU1RSSURFUwkJMHgwMmM4CS8qIEJpdEJMVCBTb3VyY2UgYW5kIERlc3RpbmF0aW9uIHN0cmlkZXMgKi8KKyNkZWZpbmUgQkxUU1JDQ0hST01BUkFOR0UJMHgwMmNjCS8qIEJpdEJMVCBTb3VyY2UgQ2hyb21hIGtleSByYW5nZSAqLworI2RlZmluZSBCTFREU1RDSFJPTUFSQU5HRQkweDAyZDAJLyogQml0QkxUIERlc3RpbmF0aW9uIENocm9tYSBrZXkgcmFuZ2UgKi8KKyNkZWZpbmUgQkxUQ0xJUFgJCTB4MDJkNAkvKiBCaXRCTFQgTWluL01heCBYIGNsaXAgdmFsdWVzICovCisjZGVmaW5lIEJMVENMSVBZCQkweDAyZDgJLyogQml0QkxUIE1pbi9NYXggWSBjbGlwIHZhbHVlcyAqLworI2RlZmluZSBCTFRTUkNYWQkJMHgwMmUwCS8qIEJpdEJMVCBTb3VyY2Ugc3RhcnRpbmcgWFkgY29vcmRpbmF0ZXMgKi8KKyNkZWZpbmUgQkxURFNUWFkJCTB4MDJlNAkvKiBCaXRCTFQgRGVzdGluYXRpb24gc3RhcnRpbmcgWFkgY29vcmRpbmF0ZXMgKi8KKyNkZWZpbmUgQkxUU0laRQkJCTB4MDJlOAkvKiBCaXRCTFQgd2lkdGggYW5kIGhlaWdodCAqLworI2RlZmluZSBCTFRST1AJCQkweDAyZWMJLyogQml0QkxUIFJhc3RlciBvcGVyYXRpb25zICovCisjICBkZWZpbmUgQkxUUk9QX0NPUFkJCSAgMHgwY2NjYworIyAgZGVmaW5lIEJMVFJPUF9JTlZFUlQJCSAgMHgwNTU1NQorIyAgZGVmaW5lIEJMVFJPUF9YT1IJCSAgMHgwNjY2NgorI2RlZmluZSBCTFRDT0xPUgkJMHgwMmYwCS8qIEJpdEJMVCBhbmQgZm9yZWdyb3VuZCBiYWNrZ3JvdW5kIGNvbG9ycyAqLworI2RlZmluZSBCTFRDT01NQU5ECQkweDAyZjgJLyogQml0QkxUIGNvbW1hbmQgbW9kZSAodjIgc3BlY2lmaWMpICovCisjIGRlZmluZSBCTFRfU0NSMlNDUl9CSVRCTFQJICAwCSAgLyogU2NyZWVuLXRvLVNjcmVlbiBCaXRCTFQgKi8KKyMgZGVmaW5lIEJMVF9DUFUyU0NSX0JJVEJMVAkgIDEJICAvKiBDUFUtdG8tc2NyZWVuIEJpdEJMVCAqLworIyBkZWZpbmUgQkxUX1JFQ0ZJTExfQklUQkxUCSAgMgkgIC8qIEJpdEJMVCBSZWN0YW5nbGUgRmlsbCAqLworIyBkZWZpbmUgQkxUXzE2QlBQX0ZNVAkJICAyCSAgLyogMTYgQlBQICg1LTYtNSBSR0IpICovCisjZGVmaW5lIEJMVERBVEEJCQkweDAyZmMJLyogQml0QkxUIGRhdGEgZm9yIENQVS10by1TY3JlZW4gQml0QkxUcyAqLworIyAgZGVmaW5lIExBVU5DSF9CSVRCTFQJCSAgQklUKDMxKSAvKiBMYXVuY2ggQml0QkxUIGluIEJsdENvbW1hbmQsIGJsdERzdFhZIG9yIGJsdFNpemUgKi8KKworLyogRGFjIFJlZ2lzdGVycyAqLworI2RlZmluZSBEQUNSRUdfV01BCQkweDAJLyogcGl4ZWwgd3JpdGUgbW9kZSBhZGRyZXNzICovCisjZGVmaW5lIERBQ1JFR19MVVQJCTB4MDEJLyogY29sb3IgdmFsdWUgKi8KKyNkZWZpbmUgREFDUkVHX1JNUgkJMHgwMgkvKiBwaXhlbCBtYXNrICovCisjZGVmaW5lIERBQ1JFR19STUEJCTB4MDMJLyogcGl4ZWwgcmVhZCBtb2RlIGFkZHJlc3MgKi8KKy8qRGFjIHJlZ2lzdGVycyBpbiBpbmRleGVkIG1vZGUgKFRJLCBBVFQgZGFjcykgKi8KKyNkZWZpbmUgREFDUkVHX0FERFJfSQkJREFDUkVHX1dNQQorI2RlZmluZSBEQUNSRUdfREFUQV9JCQlEQUNSRUdfUk1SCisjZGVmaW5lIERBQ1JFR19STVJfSQkJMHgwMAorI2RlZmluZSBEQUNSRUdfQ1IwX0kJCTB4MDEKKyMgIGRlZmluZSBEQUNSRUdfQ1IwX0VOX0lOREVYRUQJICBCSVQoMCkJLyogZW5hYmxlIGluZGV4ZWMgbW9kZSAqLworIyAgZGVmaW5lIERBQ1JFR19DUjBfOEJJVAkgIEJJVCgxKQkvKiBzZXQgZGFjIHRvIDggYml0cy9yZWFkICovCisjICBkZWZpbmUgREFDUkVHX0NSMF9QV0RPV04JICBCSVQoMykJLyogcG93ZXJkb3duIGRhYyAqLworIyAgZGVmaW5lIERBQ1JFR19DUjBfMTZCUFAJICAweDMwCQkvKiBtb2RlIDMgKi8KKyMgIGRlZmluZSBEQUNSRUdfQ1IwXzI0QlBQCSAgMHg1MAkJLyogbW9kZSA1ICovCisjZGVmaW5lCURBQ1JFR19DUjFfSQkJMHgwNQorI2RlZmluZSBEQUNSRUdfQ0NfSQkJMHgwNgorIyAgZGVmaW5lIERBQ1JFR19DQ19DTEtBCSAgQklUKDcpCS8qIGNsayBBIGNvbnRyb2xlZCBieSByZWdzICovCisjICBkZWZpbmUgREFDUkVHX0NDX0NMS0FfQwkgICgyPDw0KQkvKiBjbGsgQSB1c2VzIHJlZyBDICovCisjICBkZWZpbmUgREFDUkVHX0NDX0NMS0IJICBCSVQoMykJLyogY2xrIEIgY29udHJvbGVkIGJ5IHJlZ3MgKi8KKyMgIGRlZmluZSBEQUNSRUdfQ0NfQ0xLQl9ECSAgMwkJLyogY2xrQiB1c2VzIHJlZyBEICovCisjZGVmaW5lIERBQ1JFR19BQzBfSQkJMHg0OAkJLyogY2xvY2sgQSByZWcgQyAqLworI2RlZmluZSBEQUNSRUdfQUMxX0kJCTB4NDkKKyNkZWZpbmUgREFDUkVHX0JEMF9JCQkweDZjCQkvKiBjbG9jayBCIHJlZyBEICovCisjZGVmaW5lIERBQ1JFR19CRDFfSQkJMHg2ZAorCisvKiBpZGVudGlmaWNhdGlvbiBjb25zdGFudHMgKi8KKyNkZWZpbmUgREFDUkVHX01JUl9USQkJMHg5NworI2RlZmluZSBEQUNSRUdfRElSX1RJCQkweDA5CisjZGVmaW5lIERBQ1JFR19NSVJfQVRUCQkweDg0CisjZGVmaW5lIERBQ1JFR19ESVJfQVRUCQkweDA5CisvKiBpY3MgZGFjIHNwZWNpZmljIHJlZ2lzdGVycyAqLworI2RlZmluZSBEQUNSRUdfSUNTX1BMTFdNQQkweDA0CS8qIFBMTCB3cml0ZSBtb2RlIGFkZHJlc3MgKi8KKyNkZWZpbmUgREFDUkVHX0lDU19QTExEQVRBCTB4MDUJLyogUExMIGRhdGEgL3BhcmFtZXRlciAqLworI2RlZmluZSBEQUNSRUdfSUNTX0NNRAkJMHgwNgkvKiBjb21tYW5kICovCisjICBkZWZpbmUgREFDUkVHX0lDU19DTURfMTZCUFAJICAweDUwCS8qIGljcyBjb2xvciBtb2RlIDYgKDE2YnBwIGJ5cGFzcykqLworIyAgZGVmaW5lIERBQ1JFR19JQ1NfQ01EXzI0QlBQCSAgMHg3MAkvKiBpY3MgY29sb3IgbW9kZSA3ICgyNGJwcCBieXBhc3MpKi8KKyMgIGRlZmluZSBEQUNSRUdfSUNTX0NNRF9QV0RPV04gQklUKDApCS8qIHBvd2VyZG93biBkYWMgKi8KKyNkZWZpbmUgREFDUkVHX0lDU19QTExSTUEJMHgwNwkvKiBQTEwgcmVhZCBtb2RlIGFkZHJlc3MgKi8KKy8qCisgKiBwbGwgcGFyYW1ldGVyIHJlZ2lzdGVyOgorICogaW5kZXhlZCA6IHdyaXRlIGFkZHIgdG8gUExMV01BLCB3cml0ZSBkYXRhIGluIFBMTERBVEEuCisgKiBmb3IgcmVhZHMgdXNlIFBMTFJNQSAuCisgKiA4IGZyZXEgcmVnaXN0ZXJzICgwLTcpIGZvciB2aWRlbyBjbG9jayAoQ0xLMCkKKyAqIDIgZnJlcSByZWdpc3RlcnMgKGEtYikgZm9yIGdyYXBoaWMgY2xvY2sgKENMSzEpCisgKi8KKyNkZWZpbmUgREFDUkVHX0lDU19QTExfQ0xLMF8xX0lOSSAweDU1CS8qIGluaXRpYWwgcGxsIE0gdmFsdWUgZm9yIGZyZXEgZjEgICovCisjZGVmaW5lIERBQ1JFR19JQ1NfUExMX0NMSzBfN19JTkkgMHg3MQkvKiBmNyAqLworI2RlZmluZSBEQUNSRUdfSUNTX1BMTF9DTEsxX0JfSU5JIDB4NzkJLyogZmIgKi8KKyNkZWZpbmUgREFDUkVHX0lDU19QTExfQ1RSTAkweDBlCisjICBkZWZpbmUgREFDUkVHX0lDU19DTEswCSAgQklUKDUpCisjICBkZWZpbmUgREFDUkVHX0lDU19DTEswXzAJICAwCisjICBkZWZpbmUgREFDUkVHX0lDU19DTEsxX0EJICAwCS8qIGJpdDQgKi8KKworLyogc3N0IGRlZmF1bHQgaW5pdCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgRkJJSU5JVDBfREVGQVVMVCBFTl9WR0FfUEFTU1RIUk9VR0gKKworI2RlZmluZSBGQklJTklUMV9ERUZBVUxUIAlcCisJKAkJCVwKKwkgIEZBU1RfUENJX1dSSVRFUwlcCisvKgkgIFNMT1dfUENJX1dSSVRFUyovCVwKKwl8IFZJREVPX1JFU0VUCQlcCisJfCAxMCA8PCBUSUxFU19JTl9YX1NISUZUXAorCXwgU0VMX1NPVVJDRV9WQ0xLXzJYX1NFTFwKKwl8IEVOX0xGQl9SRUFECQlcCisJKQorCisjZGVmaW5lIEZCSUlOSVQyX0RFRkFVTFQJXAorCSgJCQlcCisJIFNXQVBfREFDVlNZTkMJCVwKKwl8IEVOX0RSQU1fT0UJCVwKKwl8IERSQU1fUkVGUkVTSF8xNglcCisJfCBFTl9EUkFNX1JFRlJFU0gJXAorCXwgRU5fRkFTVF9SQVNfUkVBRAlcCisJfCBFTl9SRF9BSEVBRF9GSUZPCVwKKwl8IEVOX0ZBU1RfUkRfQUhFQURfV1IJXAorCSkKKworI2RlZmluZSBGQklJTklUM19ERUZBVUxUIAlcCisJKCBESVNBQkxFX1RFWFRVUkUgKQorCisjZGVmaW5lIEZCSUlOSVQ0X0RFRkFVTFQJXAorCSgJCQlcCisJICBGQVNUX1BDSV9SRUFEUwlcCisvKgkgIFNMT1dfUENJX1JFQURTKi8JXAorCXwgTEZCX1JFQURfQUhFQUQJXAorCSkKKy8qIENhcmVmdWwgd2l0aCB0aGlzIG9uZSA6IHdyaXRpbmcgYmFjayB0aGUgZGF0YSBqdXN0IHJlYWQgd2lsbCB0cmFzaCB0aGUgREFDCisgICByZWFkaW5nIHNvbWUgZmllbGRzIGdpdmUgbG9naWMgdmFsdWUgb24gcGlucywgYnV0IHNldHRpbmcgdGhpcyBmaWVsZCB3aWxsCisgICBzZXQgdGhlIHNvdXJjZSBzaWduYWwgZHJpdmluZyB0aGUgcGluLiBjb25jbHVzaW9uIDoganVzdCB1c2UgdGhlIGRlZmF1bHQKKyAgIGFzIGEgYmFzZSBiZWZvcmUgd3JpdGluZyBiYWNrIC4KKyovCisjZGVmaW5lIEZCSUlOSVQ2X0RFRkFVTFQJKDB4MCkKKworLyoKKyAqCisgKiBNaXNjIENvbnN0CisgKgorICovCisKKy8qIHVzZWQgdG8ga25vdyB3aXRjaCBjbG9jayB0byBzZXQgKi8KK2VudW0geworCVZJRF9DTE9DSz0wLAorCUdGWF9DTE9DSz0xLAorfTsKKworLyogZnJlcSBtYXggKi8KKyNkZWZpbmUgREFDX0ZSRUYJMTQzMTgJLyogREFDIHJlZmVyZW5jZSBmcmVxIChLaHopICovCisjZGVmaW5lIFZDT19NQVgJCTI2MDAwMAorCisvKgorICogIGRyaXZlciBzdHJ1Y3RzCisgKi8KKworc3RydWN0IHBsbF90aW1pbmcgeworCXVuc2lnbmVkIGludCBtOworCXVuc2lnbmVkIGludCBuOworCXVuc2lnbmVkIGludCBwOworfTsKKworc3RydWN0IGRhY19zd2l0Y2ggeworCWNoYXIgKiBuYW1lOworCWludCAoKmRldGVjdCkgKHN0cnVjdCBmYl9pbmZvICppbmZvKTsKKwlpbnQgKCpzZXRfcGxsKSAoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBwbGxfdGltaW5nICp0LCBjb25zdCBpbnQgY2xvY2spOworCXZvaWQgKCpzZXRfdmlkbW9kKSAoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IGludCBicHApOworfTsKKworc3RydWN0IHNzdF9zcGVjIHsKKwljaGFyICogbmFtZTsKKwlpbnQgZGVmYXVsdF9nZnhfY2xvY2s7CS8qIDUwMDAwIGZvciB2b29kb28xLCA3NTAwMCBmb3Igdm9vZG9vMiAqLworCWludCBtYXhfZ2Z4Y2xrOyAJLyogISBpbiBNaHogaWUgNjAgZm9yIHZvb2RvbyAxICovCit9OworCitzdHJ1Y3Qgc3N0ZmJfcGFyIHsKKwl1bnNpZ25lZCBpbnQgeURpbTsKKwl1bnNpZ25lZCBpbnQgaFN5bmNPbjsJLyogaHN5bmNfbGVuICovCisJdW5zaWduZWQgaW50IGhTeW5jT2ZmOwkvKiBsZWZ0X21hcmdpbiArIHhyZXMgKyByaWdodF9tYXJnaW4gKi8KKwl1bnNpZ25lZCBpbnQgaEJhY2tQb3JjaDsvKiBsZWZ0X21hcmdpbiAqLworCXVuc2lnbmVkIGludCB2U3luY09uOworCXVuc2lnbmVkIGludCB2U3luY09mZjsKKwl1bnNpZ25lZCBpbnQgdkJhY2tQb3JjaDsKKwlzdHJ1Y3QgcGxsX3RpbWluZyBwbGw7CisJdW5zaWduZWQgaW50IHRpbGVzX2luX1g7LyogbnVtIG9mIHRpbGVzIGluIFggcmVzICovCisJdTggX19pb21lbSAqbW1pb192YmFzZTsKKwlzdHJ1Y3QgZGFjX3N3aXRjaCAJZGFjX3N3OwkvKiBkYWMgc3BlY2lmaWMgZnVuY3Rpb25zICovCisJc3RydWN0IHBjaV9kZXYJCSpkZXY7CisJaW50CXR5cGU7CisJdTgJcmV2aXNpb247CisJaW50CWdmeF9jbG9jazsJLyogc3RhdHVzICovCit9OworCisjZW5kaWYgLyogX1NTVEZCX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3ZpZGVvL3RkZnguaCBiL2luY2x1ZGUvdmlkZW8vdGRmeC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4OTZlNDQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3ZpZGVvL3RkZnguaApAQCAtMCwwICsxLDE5MiBAQAorI2lmbmRlZiBfVERGWF9ICisjZGVmaW5lIF9UREZYX0gKKworLyogbWVtYmFzZTAgcmVnaXN0ZXIgb2Zmc2V0cyAqLworI2RlZmluZSBTVEFUVVMgICAgICAgICAgMHgwMAorI2RlZmluZSBQQ0lJTklUMCAgICAgICAgMHgwNAorI2RlZmluZSBTSVBNT05JVE9SICAgICAgMHgwOAorI2RlZmluZSBMRkJNRU1PUllDT05GSUcgMHgwYworI2RlZmluZSBNSVNDSU5JVDAgICAgICAgMHgxMAorI2RlZmluZSBNSVNDSU5JVDEgICAgICAgMHgxNAorI2RlZmluZSBEUkFNSU5JVDAgICAgICAgMHgxOAorI2RlZmluZSBEUkFNSU5JVDEgICAgICAgMHgxYworI2RlZmluZSBBR1BJTklUICAgICAgICAgMHgyMAorI2RlZmluZSBUTVVHQkVJTklUICAgICAgMHgyNAorI2RlZmluZSBWR0FJTklUMCAgICAgICAgMHgyOAorI2RlZmluZSBWR0FJTklUMSAgICAgICAgMHgyYworI2RlZmluZSBEUkFNQ09NTUFORCAgICAgMHgzMAorI2RlZmluZSBEUkFNREFUQSAgICAgICAgMHgzNAorLyogcmVzZXJ2ZWQgICAgICAgICAgICAgMHgzOCAqLworLyogcmVzZXJ2ZWQgICAgICAgICAgICAgMHgzYyAqLworI2RlZmluZSBQTExDVFJMMCAgICAgICAgMHg0MAorI2RlZmluZSBQTExDVFJMMSAgICAgICAgMHg0NAorI2RlZmluZSBQTExDVFJMMiAgICAgICAgMHg0OAorI2RlZmluZSBEQUNNT0RFICAgICAgICAgMHg0YworI2RlZmluZSBEQUNBRERSICAgICAgICAgMHg1MAorI2RlZmluZSBEQUNEQVRBICAgICAgICAgMHg1NAorI2RlZmluZSBSR0JNQVhERUxUQSAgICAgMHg1OAorI2RlZmluZSBWSURQUk9DQ0ZHICAgICAgMHg1YworI2RlZmluZSBIV0NVUlBBVEFERFIgICAgMHg2MAorI2RlZmluZSBIV0NVUkxPQyAgICAgICAgMHg2NAorI2RlZmluZSBIV0NVUkMwICAgICAgICAgMHg2OAorI2RlZmluZSBIV0NVUkMxICAgICAgICAgMHg2YworI2RlZmluZSBWSURJTkZPUk1BVCAgICAgMHg3MAorI2RlZmluZSBWSURJTlNUQVRVUyAgICAgMHg3NAorI2RlZmluZSBWSURTRVJQQVJQT1JUICAgMHg3OAorI2RlZmluZSBWSURJTlhERUxUQSAgICAgMHg3YworI2RlZmluZSBWSURJTklOSVRFUlIgICAgMHg4MAorI2RlZmluZSBWSURJTllERUxUQSAgICAgMHg4NAorI2RlZmluZSBWSURQSVhCVUZUSE9MRCAgMHg4OAorI2RlZmluZSBWSURDSFJNSU4gICAgICAgMHg4YworI2RlZmluZSBWSURDSFJNQVggICAgICAgMHg5MAorI2RlZmluZSBWSURDVVJMSU4gICAgICAgMHg5NAorI2RlZmluZSBWSURTQ1JFRU5TSVpFICAgMHg5OAorI2RlZmluZSBWSURPVlJTVEFSVENSRCAgMHg5YworI2RlZmluZSBWSURPVlJFTkRDUkQgICAgMHhhMAorI2RlZmluZSBWSURPVlJEVURYICAgICAgMHhhNAorI2RlZmluZSBWSURPVlJEVURYT0ZGICAgMHhhOAorI2RlZmluZSBWSURPVlJEVkRZICAgICAgMHhhYworLyogIC4uLiAqLworI2RlZmluZSBWSURPVlJEVkRZT0ZGICAgMHhlMAorI2RlZmluZSBWSURERVNLU1RBUlQgICAgMHhlNAorI2RlZmluZSBWSURERVNLU1RSSURFICAgMHhlOAorI2RlZmluZSBWSURJTkFERFIwICAgICAgMHhlYworI2RlZmluZSBWSURJTkFERFIxICAgICAgMHhmMAorI2RlZmluZSBWSURJTkFERFIyICAgICAgMHhmNAorI2RlZmluZSBWSURJTlNUUklERSAgICAgMHhmOAorI2RlZmluZSBWSURDVVJPVlJTVEFSVCAgMHhmYworCisjZGVmaW5lIElOVENUUkwgICAgICAgICAoMHgwMDEwMDAwMCArIDB4MDQpCisjZGVmaW5lIENMSVAwTUlOICAgICAgICAoMHgwMDEwMDAwMCArIDB4MDgpCisjZGVmaW5lIENMSVAwTUFYICAgICAgICAoMHgwMDEwMDAwMCArIDB4MGMpCisjZGVmaW5lIERTVEJBU0UgICAgICAgICAoMHgwMDEwMDAwMCArIDB4MTApCisjZGVmaW5lIERTVEZPUk1BVCAgICAgICAoMHgwMDEwMDAwMCArIDB4MTQpCisjZGVmaW5lIFNSQ0JBU0UgICAgICAgICAoMHgwMDEwMDAwMCArIDB4MzQpCisjZGVmaW5lIENPTU1BTkRFWFRSQV8yRCAoMHgwMDEwMDAwMCArIDB4MzgpCisjZGVmaW5lIENMSVAxTUlOICAgICAgICAoMHgwMDEwMDAwMCArIDB4NGMpCisjZGVmaW5lIENMSVAxTUFYICAgICAgICAoMHgwMDEwMDAwMCArIDB4NTApCisjZGVmaW5lIFNSQ0ZPUk1BVCAgICAgICAoMHgwMDEwMDAwMCArIDB4NTQpCisjZGVmaW5lIFNSQ1NJWkUgICAgICAgICAoMHgwMDEwMDAwMCArIDB4NTgpCisjZGVmaW5lIFNSQ1hZICAgICAgICAgICAoMHgwMDEwMDAwMCArIDB4NWMpCisjZGVmaW5lIENPTE9SQkFDSyAgICAgICAoMHgwMDEwMDAwMCArIDB4NjApCisjZGVmaW5lIENPTE9SRk9SRSAgICAgICAoMHgwMDEwMDAwMCArIDB4NjQpCisjZGVmaW5lIERTVFNJWkUgICAgICAgICAoMHgwMDEwMDAwMCArIDB4NjgpCisjZGVmaW5lIERTVFhZICAgICAgICAgICAoMHgwMDEwMDAwMCArIDB4NmMpCisjZGVmaW5lIENPTU1BTkRfMkQgICAgICAoMHgwMDEwMDAwMCArIDB4NzApCisjZGVmaW5lIExBVU5DSF8yRCAgICAgICAoMHgwMDEwMDAwMCArIDB4ODApCisKKyNkZWZpbmUgQ09NTUFORF8zRCAgICAgICgweDAwMjAwMDAwICsgMHgxMjApCisKKy8qIHJlZ2lzdGVyIGJpdGZpZWxkcyAobm90IGFsbCwgb25seSBhcyBuZWVkZWQpICovCisKKyNkZWZpbmUgQklUKHgpICgxVUwgPDwgKHgpKQorCisvKiBDT01NQU5EXzJEIHJlZy4gdmFsdWVzICovCisjZGVmaW5lIFRERlhfUk9QX0NPUFkgICAgICAgIDB4Y2MgICAgIC8vIHNyYworI2RlZmluZSBUREZYX1JPUF9JTlZFUlQgICAgICAweDU1ICAgICAvLyBOT1QgZHN0CisjZGVmaW5lIFRERlhfUk9QX1hPUiAgICAgICAgIDB4NjYgICAgIC8vIHNyYyBYT1IgZHN0CisKKyNkZWZpbmUgQVVUT0lOQ19EU1RYICAgICAgICAgICAgICAgICAgICBCSVQoMTApCisjZGVmaW5lIEFVVE9JTkNfRFNUWSAgICAgICAgICAgICAgICAgICAgQklUKDExKQorI2RlZmluZSBDT01NQU5EXzJEX0ZJTExSRUNUICAgICAgICAgICAgIDB4MDUKKyNkZWZpbmUgQ09NTUFORF8yRF9TMlNfQklUQkxUICAgICAgICAgICAweDAxICAgICAgLy8gc2NyZWVuIHRvIHNjcmVlbgorI2RlZmluZSBDT01NQU5EXzJEX0gyU19CSVRCTFQgICAgICAgICAgIDB4MDMgICAgICAgLy8gaG9zdCB0byBzY3JlZW4KKworI2RlZmluZSBDT01NQU5EXzNEX05PUCAgICAgICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgU1RBVFVTX1JFVFJBQ0UgICAgICAgICAgICAgICAgICBCSVQoNikKKyNkZWZpbmUgU1RBVFVTX0JVU1kgICAgICAgICAgICAgICAgICAgICBCSVQoOSkKKyNkZWZpbmUgTUlTQ0lOSVQxX0NMVVRfSU5WICAgICAgICAgICAgICBCSVQoMCkKKyNkZWZpbmUgTUlTQ0lOSVQxXzJEQkxPQ0tfRElTICAgICAgICAgICBCSVQoMTUpCisjZGVmaW5lIERSQU1JTklUMF9TR1JBTV9OVU0gICAgICAgICAgICAgQklUKDI2KQorI2RlZmluZSBEUkFNSU5JVDBfU0dSQU1fVFlQRSAgICAgICAgICAgIEJJVCgyNykKKyNkZWZpbmUgRFJBTUlOSVQxX01FTV9TRFJBTSAgICAgICAgICAgICBCSVQoMzApCisjZGVmaW5lIFZHQUlOSVQwX1ZHQV9ESVNBQkxFICAgICAgICAgICAgQklUKDApCisjZGVmaW5lIFZHQUlOSVQwX0VYVF9USU1JTkcgICAgICAgICAgICAgQklUKDEpCisjZGVmaW5lIFZHQUlOSVQwXzhCSVRfREFDICAgICAgICAgICAgICAgQklUKDIpCisjZGVmaW5lIFZHQUlOSVQwX0VYVF9FTkFCTEUgICAgICAgICAgICAgQklUKDYpCisjZGVmaW5lIFZHQUlOSVQwX1dBS0VVUF8zQzMgICAgICAgICAgICAgQklUKDgpCisjZGVmaW5lIFZHQUlOSVQwX0xFR0FDWV9ESVNBQkxFICAgICAgICAgQklUKDkpCisjZGVmaW5lIFZHQUlOSVQwX0FMVF9SRUFEQkFDSyAgICAgICAgICAgQklUKDEwKQorI2RlZmluZSBWR0FJTklUMF9GQVNUX0JMSU5LICAgICAgICAgICAgIEJJVCgxMSkKKyNkZWZpbmUgVkdBSU5JVDBfRVhUU0hJRlRPVVQgICAgICAgICAgICBCSVQoMTIpCisjZGVmaW5lIFZHQUlOSVQwX0RFQ09ERV8zQzYgICAgICAgICAgICAgQklUKDEzKQorI2RlZmluZSBWR0FJTklUMF9TR1JBTV9IQkxBTktfRElTQUJMRSAgIEJJVCgyMikKKyNkZWZpbmUgVkdBSU5JVDFfTUFTSyAgICAgICAgICAgICAgICAgICAweDFmZmZmZgorI2RlZmluZSBWSURDRkdfVklEUFJPQ19FTkFCTEUgICAgICAgICAgIEJJVCgwKQorI2RlZmluZSBWSURDRkdfQ1VSU19YMTEgICAgICAgICAgICAgICAgIEJJVCgxKQorI2RlZmluZSBWSURDRkdfSU5URVJMQUNFICAgICAgICAgICAgICAgIEJJVCgzKQorI2RlZmluZSBWSURDRkdfSEFMRl9NT0RFICAgICAgICAgICAgICAgIEJJVCg0KQorI2RlZmluZSBWSURDRkdfREVTS19FTkFCTEUgICAgICAgICAgICAgIEJJVCg3KQorI2RlZmluZSBWSURDRkdfQ0xVVF9CWVBBU1MgICAgICAgICAgICAgIEJJVCgxMCkKKyNkZWZpbmUgVklEQ0ZHXzJYICAgICAgICAgICAgICAgICAgICAgICBCSVQoMjYpCisjZGVmaW5lIFZJRENGR19IV0NVUlNPUl9FTkFCTEUgICAgICAgICAgQklUKDI3KQorI2RlZmluZSBWSURDRkdfUElYRk1UX1NISUZUICAgICAgICAgICAgIDE4CisjZGVmaW5lIERBQ01PREVfMlggICAgICAgICAgICAgICAgICAgICAgQklUKDApCisKKy8qIFZHQSBydWJiaXNoLCBuZWVkIHRvIGNoYW5nZSB0aGlzIGZvciBtdWx0aWhlYWQgc3VwcG9ydCAqLworI2RlZmluZSBNSVNDX1cgIDB4M2MyCisjZGVmaW5lIE1JU0NfUiAgMHgzY2MKKyNkZWZpbmUgU0VRX0kgICAweDNjNAorI2RlZmluZSBTRVFfRCAgIDB4M2M1CisjZGVmaW5lIENSVF9JICAgMHgzZDQKKyNkZWZpbmUgQ1JUX0QgICAweDNkNQorI2RlZmluZSBBVFRfSVcgIDB4M2MwCisjZGVmaW5lIElTMV9SICAgMHgzZGEKKyNkZWZpbmUgR1JBX0kgICAweDNjZQorI2RlZmluZSBHUkFfRCAgIDB4M2NmCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKK3N0cnVjdCBiYW5zaGVlX3JlZyB7CisgIC8qIFZHQSBydWJiaXNoICovCisgIHVuc2lnbmVkIGNoYXIgYXR0WzIxXTsKKyAgdW5zaWduZWQgY2hhciBjcnRbMjVdOworICB1bnNpZ25lZCBjaGFyIGdyYVsgOV07CisgIHVuc2lnbmVkIGNoYXIgbWlzY1sxXTsKKyAgdW5zaWduZWQgY2hhciBzZXFbIDVdOworCisgIC8qIEJhbnNoZWUgZXh0ZW5zaW9ucyAqLworICB1bnNpZ25lZCBjaGFyIGV4dFsyXTsKKyAgdW5zaWduZWQgbG9uZyB2aWRjZmc7CisgIHVuc2lnbmVkIGxvbmcgdmlkcGxsOworICB1bnNpZ25lZCBsb25nIG1lbXBsbDsKKyAgdW5zaWduZWQgbG9uZyBnZnhwbGw7CisgIHVuc2lnbmVkIGxvbmcgZGFjbW9kZTsKKyAgdW5zaWduZWQgbG9uZyB2Z2Fpbml0MDsKKyAgdW5zaWduZWQgbG9uZyB2Z2Fpbml0MTsKKyAgdW5zaWduZWQgbG9uZyBzY3JlZW5zaXplOworICB1bnNpZ25lZCBsb25nIHN0cmlkZTsKKyAgdW5zaWduZWQgbG9uZyBjdXJzbG9jOworICB1bnNpZ25lZCBsb25nIGN1cnNwYXRhZGRyOworICB1bnNpZ25lZCBsb25nIGN1cnNjMDsKKyAgdW5zaWduZWQgbG9uZyBjdXJzYzE7CisgIHVuc2lnbmVkIGxvbmcgc3RhcnRhZGRyOworICB1bnNpZ25lZCBsb25nIGNsaXAwbWluOworICB1bnNpZ25lZCBsb25nIGNsaXAwbWF4OworICB1bnNpZ25lZCBsb25nIGNsaXAxbWluOworICB1bnNpZ25lZCBsb25nIGNsaXAxbWF4OworICB1bnNpZ25lZCBsb25nIHNyY2Jhc2U7CisgIHVuc2lnbmVkIGxvbmcgZHN0YmFzZTsKKyAgdW5zaWduZWQgbG9uZyBtaXNjaW5pdDA7CQorfTsKKworc3RydWN0IHRkZnhfcGFyIHsKKyAgdTMyIG1heF9waXhjbG9jazsKKworICB2b2lkIF9faW9tZW0gKnJlZ2Jhc2VfdmlydDsKKyAgdW5zaWduZWQgbG9uZyBpb2Jhc2U7CisgIHUzMiBiYXNlbGluZTsKKworICBzdHJ1Y3QgeworICAgICBpbnQgdyx1LGQ7CisgICAgIHVuc2lnbmVkIGxvbmcgZW5hYmxlLGRpc2FibGU7CisgICAgIHN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOworICB9IGh3Y3Vyc29yOyAKKworICBzcGlubG9ja190IERBQ2xvY2s7Cit9OworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX1RERlhfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL3ZpZGVvL3RnYWZiLmggYi9pbmNsdWRlL3ZpZGVvL3RnYWZiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmUyYjNlOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvdmlkZW8vdGdhZmIuaApAQCAtMCwwICsxLDIzOCBAQAorLyoKKyAqICBsaW51eC9kcml2ZXJzL3ZpZGVvL3RnYWZiLmggLS0gREVDIDIxMDMwIFRHQSBmcmFtZSBidWZmZXIgZGV2aWNlCisgKgorICogIAlDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBNYXJ0aW4gTHVjaW5hLCBUb20gWmVydWNoYQorICogIAorICogICRJZDogdGdhZmIuaCx2IDEuNC4yLjMgMjAwMC8wNC8wNCAwNjo0NDo1NiBtYXRvIEV4cCAkCisgKgorICogIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZS4gU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3IKKyAqICBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBUR0FGQl9ICisjZGVmaW5lIFRHQUZCX0gKKworLyoKKyAqIFRHQSBoYXJkd2FyZSBkZXNjcmlwdGlvbiAobWluaW1hbCkKKyAqLworCisjZGVmaW5lIFRHQV9UWVBFXzhQTEFORQkJCTAKKyNkZWZpbmUgVEdBX1RZUEVfMjRQTEFORQkJMQorI2RlZmluZSBUR0FfVFlQRV8yNFBMVVNaCQkzCisKKy8qCisgKiBPZmZzZXRzIHdpdGhpbiBNZW1vcnkgU3BhY2UKKyAqLworCisjZGVmaW5lCVRHQV9ST01fT0ZGU0VUCQkJMHgwMDAwMDAwCisjZGVmaW5lCVRHQV9SRUdTX09GRlNFVAkJCTB4MDEwMDAwMAorI2RlZmluZQlUR0FfOFBMQU5FX0ZCX09GRlNFVAkJMHgwMjAwMDAwCisjZGVmaW5lCVRHQV8yNFBMQU5FX0ZCX09GRlNFVAkJMHgwODA0MDAwCisjZGVmaW5lCVRHQV8yNFBMVVNaX0ZCX09GRlNFVAkJMHgxMDA0MDAwCisKKyNkZWZpbmUgVEdBX0ZPUkVHUk9VTkRfUkVHCQkweDAwMjAKKyNkZWZpbmUgVEdBX0JBQ0tHUk9VTkRfUkVHCQkweDAwMjQKKyNkZWZpbmUJVEdBX1BMQU5FTUFTS19SRUcJCTB4MDAyOAorI2RlZmluZSBUR0FfUElYRUxNQVNLX09ORVNIT1RfUkVHCTB4MDAyYworI2RlZmluZQlUR0FfTU9ERV9SRUcJCQkweDAwMzAKKyNkZWZpbmUJVEdBX1JBU1RFUk9QX1JFRwkJMHgwMDM0CisjZGVmaW5lCVRHQV9QSVhFTFNISUZUX1JFRwkJMHgwMDM4CisjZGVmaW5lCVRHQV9ERUVQX1JFRwkJCTB4MDA1MAorI2RlZmluZQlUR0FfUElYRUxNQVNLX1JFRwkJMHgwMDVjCisjZGVmaW5lCVRHQV9DVVJTT1JfQkFTRV9SRUcJCTB4MDA2MAorI2RlZmluZQlUR0FfSE9SSVpfUkVHCQkJMHgwMDY0CisjZGVmaW5lCVRHQV9WRVJUX1JFRwkJCTB4MDA2OAorI2RlZmluZQlUR0FfQkFTRV9BRERSX1JFRwkJMHgwMDZjCisjZGVmaW5lCVRHQV9WQUxJRF9SRUcJCQkweDAwNzAKKyNkZWZpbmUJVEdBX0NVUlNPUl9YWV9SRUcJCTB4MDA3NAorI2RlZmluZQlUR0FfSU5UUl9TVEFUX1JFRwkJMHgwMDdjCisjZGVmaW5lIFRHQV9EQVRBX1JFRwkJCTB4MDA4MAorI2RlZmluZQlUR0FfUkFNREFDX1NFVFVQX1JFRwkJMHgwMGMwCisjZGVmaW5lCVRHQV9CTE9DS19DT0xPUjBfUkVHCQkweDAxNDAKKyNkZWZpbmUJVEdBX0JMT0NLX0NPTE9SMV9SRUcJCTB4MDE0NAorI2RlZmluZQlUR0FfQkxPQ0tfQ09MT1IyX1JFRwkJMHgwMTQ4CisjZGVmaW5lCVRHQV9CTE9DS19DT0xPUjNfUkVHCQkweDAxNGMKKyNkZWZpbmUJVEdBX0JMT0NLX0NPTE9SNF9SRUcJCTB4MDE1MAorI2RlZmluZQlUR0FfQkxPQ0tfQ09MT1I1X1JFRwkJMHgwMTU0CisjZGVmaW5lCVRHQV9CTE9DS19DT0xPUjZfUkVHCQkweDAxNTgKKyNkZWZpbmUJVEdBX0JMT0NLX0NPTE9SN19SRUcJCTB4MDE1YworI2RlZmluZSBUR0FfQ09QWTY0X1NSQwkJCTB4MDE2MAorI2RlZmluZSBUR0FfQ09QWTY0X0RTVAkJCTB4MDE2NAorI2RlZmluZQlUR0FfQ0xPQ0tfUkVHCQkJMHgwMWU4CisjZGVmaW5lCVRHQV9SQU1EQUNfUkVHCQkJMHgwMWYwCisjZGVmaW5lCVRHQV9DTURfU1RBVF9SRUcJCTB4MDFmOAorCisKKy8qIAorICogVXNlZnVsIGRlZmluZXMgZm9yIG1hbmFnaW5nIHRoZSByZWdpc3RlcnMKKyAqLworCisjZGVmaW5lIFRHQV9IT1JJWl9PREQJCQkweDgwMDAwMDAwCisjZGVmaW5lIFRHQV9IT1JJWl9QT0xBUklUWQkJMHg0MDAwMDAwMAorI2RlZmluZSBUR0FfSE9SSVpfQUNUX01TQgkJMHgzMDAwMDAwMAorI2RlZmluZSBUR0FfSE9SSVpfQlAJCQkweDBmZTAwMDAwCisjZGVmaW5lIFRHQV9IT1JJWl9TWU5DCQkJMHgwMDFmYzAwMAorI2RlZmluZSBUR0FfSE9SSVpfRlAJCQkweDAwMDA3YzAwCisjZGVmaW5lIFRHQV9IT1JJWl9BQ1RfTFNCCQkweDAwMDAwMWZmCisKKyNkZWZpbmUgVEdBX1ZFUlRfU0UJCQkweDgwMDAwMDAwCisjZGVmaW5lIFRHQV9WRVJUX1BPTEFSSVRZCQkweDQwMDAwMDAwCisjZGVmaW5lIFRHQV9WRVJUX1JFU0VSVkVECQkweDMwMDAwMDAwCisjZGVmaW5lIFRHQV9WRVJUX0JQCQkJMHgwZmMwMDAwMAorI2RlZmluZSBUR0FfVkVSVF9TWU5DCQkJMHgwMDNmMDAwMAorI2RlZmluZSBUR0FfVkVSVF9GUAkJCTB4MDAwMGY4MDAKKyNkZWZpbmUgVEdBX1ZFUlRfQUNUSVZFCQkJMHgwMDAwMDdmZgorCisjZGVmaW5lIFRHQV9WQUxJRF9WSURFTwkJCTB4MDEKKyNkZWZpbmUgVEdBX1ZBTElEX0JMQU5LCQkJMHgwMgorI2RlZmluZSBUR0FfVkFMSURfQ1VSU09SCQkweDA0CisKKyNkZWZpbmUgVEdBX01PREVfU0JNXzhCUFAJCTB4MDAwCisjZGVmaW5lIFRHQV9NT0RFX1NCTV8yNEJQUAkJMHgzMDAKKworI2RlZmluZSBUR0FfTU9ERV9TSU1QTEUJCQkweDAwCisjZGVmaW5lIFRHQV9NT0RFX1NJTVBMRVoJCTB4MTAKKyNkZWZpbmUgVEdBX01PREVfT1BBUVVFX1NUSVBQTEUJCTB4MDEKKyNkZWZpbmUgVEdBX01PREVfT1BBUVVFX0ZJTEwJCTB4MjEKKyNkZWZpbmUgVEdBX01PREVfVFJBTlNQQVJFTlRfU1RJUFBMRQkweDAzCisjZGVmaW5lIFRHQV9NT0RFX1RSQU5TUEFSRU5UX0ZJTEwJMHgyMworI2RlZmluZSBUR0FfTU9ERV9CTE9DS19TVElQUExFCQkweDBkCisjZGVmaW5lIFRHQV9NT0RFX0JMT0NLX0ZJTEwJCTB4MmQKKyNkZWZpbmUgVEdBX01PREVfQ09QWQkJCTB4MDcKKyNkZWZpbmUgVEdBX01PREVfRE1BX1JFQURfQ09QWV9ORAkweDE3CisjZGVmaW5lIFRHQV9NT0RFX0RNQV9SRUFEX0NPUFlfRAkweDM3CisjZGVmaW5lIFRHQV9NT0RFX0RNQV9XUklURV9DT1BZCQkweDFmCisKKworLyoKKyAqIFVzZWZ1bCBkZWZpbmVzIGZvciBtYW5hZ2luZyB0aGUgSUNTMTU2MiBQTEwgY2xvY2sKKyAqLworCisjZGVmaW5lIFRHQV9QTExfQkFTRV9GUkVRIAkJMTQzMTgJCS8qIC4xOCAqLworI2RlZmluZSBUR0FfUExMX01BWF9GUkVRIAkJMjMwMDAwCisKKworLyoKKyAqIFVzZWZ1bCBkZWZpbmVzIGZvciBtYW5hZ2luZyB0aGUgQlQ0ODUgb24gdGhlIDgtcGxhbmUgVEdBCisgKi8KKworI2RlZmluZQlCVDQ4NV9SRUFEX0JJVAkJCTB4MDEKKyNkZWZpbmUJQlQ0ODVfV1JJVEVfQklUCQkJMHgwMAorCisjZGVmaW5lCUJUNDg1X0FERFJfUEFMX1dSSVRFCQkweDAwCisjZGVmaW5lCUJUNDg1X0RBVEFfUEFMCQkJMHgwMgorI2RlZmluZQlCVDQ4NV9QSVhFTF9NQVNLCQkweDA0CisjZGVmaW5lCUJUNDg1X0FERFJfUEFMX1JFQUQJCTB4MDYKKyNkZWZpbmUJQlQ0ODVfQUREUl9DVVJfV1JJVEUJCTB4MDgKKyNkZWZpbmUJQlQ0ODVfREFUQV9DVVIJCQkweDBhCisjZGVmaW5lCUJUNDg1X0NNRF8wCQkJMHgwYworI2RlZmluZQlCVDQ4NV9BRERSX0NVUl9SRUFECQkweDBlCisjZGVmaW5lCUJUNDg1X0NNRF8xCQkJMHgxMAorI2RlZmluZQlCVDQ4NV9DTURfMgkJCTB4MTIKKyNkZWZpbmUJQlQ0ODVfU1RBVFVTCQkJMHgxNAorI2RlZmluZQlCVDQ4NV9DTURfMwkJCTB4MTQKKyNkZWZpbmUJQlQ0ODVfQ1VSX1JBTQkJCTB4MTYKKyNkZWZpbmUJQlQ0ODVfQ1VSX0xPV19YCQkJMHgxOAorI2RlZmluZQlCVDQ4NV9DVVJfSElHSF9YCQkweDFhCisjZGVmaW5lCUJUNDg1X0NVUl9MT1dfWQkJCTB4MWMKKyNkZWZpbmUJQlQ0ODVfQ1VSX0hJR0hfWQkJMHgxZQorCisKKy8qCisgKiBVc2VmdWwgZGVmaW5lcyBmb3IgbWFuYWdpbmcgdGhlIEJUNDYzIG9uIHRoZSAyNC1wbGFuZSBUR0FzCisgKi8KKworI2RlZmluZQlCVDQ2M19BRERSX0xPCQkweDAKKyNkZWZpbmUJQlQ0NjNfQUREUl9ISQkJMHgxCisjZGVmaW5lCUJUNDYzX1JFR19BQ0MJCTB4MgorI2RlZmluZQlCVDQ2M19QQUxFVFRFCQkweDMKKworI2RlZmluZQlCVDQ2M19DVVJfQ0xSXzAJCTB4MDEwMAorI2RlZmluZQlCVDQ2M19DVVJfQ0xSXzEJCTB4MDEwMQorCisjZGVmaW5lCUJUNDYzX0NNRF9SRUdfMAkJMHgwMjAxCisjZGVmaW5lCUJUNDYzX0NNRF9SRUdfMQkJMHgwMjAyCisjZGVmaW5lCUJUNDYzX0NNRF9SRUdfMgkJMHgwMjAzCisKKyNkZWZpbmUJQlQ0NjNfUkVBRF9NQVNLXzAJMHgwMjA1CisjZGVmaW5lCUJUNDYzX1JFQURfTUFTS18xCTB4MDIwNgorI2RlZmluZQlCVDQ2M19SRUFEX01BU0tfMgkweDAyMDcKKyNkZWZpbmUJQlQ0NjNfUkVBRF9NQVNLXzMJMHgwMjA4CisKKyNkZWZpbmUJQlQ0NjNfQkxJTktfTUFTS18wCTB4MDIwOQorI2RlZmluZQlCVDQ2M19CTElOS19NQVNLXzEJMHgwMjBhCisjZGVmaW5lCUJUNDYzX0JMSU5LX01BU0tfMgkweDAyMGIKKyNkZWZpbmUJQlQ0NjNfQkxJTktfTUFTS18zCTB4MDIwYworCisjZGVmaW5lCUJUNDYzX1dJTkRPV19UWVBFX0JBU0UJMHgwMzAwCisKKy8qCisgKiBUaGUgZnJhbWVidWZmZXIgZHJpdmVyIHByaXZhdGUgZGF0YS4KKyAqLworCitzdHJ1Y3QgdGdhX3BhciB7CisJLyogUENJIGRldmljZS4gICovCisJc3RydWN0IHBjaV9kZXYgKnBkZXY7CisKKwkvKiBEZXZpY2UgZGVwZW5kZW50IGluZm9ybWF0aW9uLiAgKi8KKwl2b2lkIF9faW9tZW0gKnRnYV9tZW1fYmFzZTsKKwl2b2lkIF9faW9tZW0gKnRnYV9mYl9iYXNlOworCXZvaWQgX19pb21lbSAqdGdhX3JlZ3NfYmFzZTsKKwl1OCB0Z2FfdHlwZTsJCQkJLyogVEdBX1RZUEVfWFhYICovCisJdTggdGdhX2NoaXBfcmV2OwkJCS8qIGRjMjEwMzAgcmV2aXNpb24gKi8KKworCS8qIFJlbWVtYmVyIGJsYW5rIG1vZGUuICAqLworCXU4IHZlc2FfYmxhbmtlZDsKKworCS8qIERlZmluZSB0aGUgdmlkZW8gbW9kZS4gICovCisJdTMyIHhyZXMsIHlyZXM7CQkJLyogcmVzb2x1dGlvbiBpbiBwaXhlbHMgKi8KKwl1MzIgaHRpbWluZ3M7CQkJLyogaG9yaXpvbnRhbCB0aW1pbmcgcmVnaXN0ZXIgKi8KKwl1MzIgdnRpbWluZ3M7CQkJLyogdmVydGljYWwgdGltaW5nIHJlZ2lzdGVyICovCisJdTMyIHBsbF9mcmVxOwkJCS8qIHBpeGNsb2NrIGluIG1oeiAqLworCXUzMiBiaXRzX3Blcl9waXhlbDsJCS8qIGJpdHMgcGVyIHBpeGVsICovCisJdTMyIHN5bmNfb25fZ3JlZW47CQkvKiBzZXQgaWYgc3luYyBpcyBvbiBncmVlbiAqLworfTsKKworCisvKgorICogTWFjcm9zIGZvciByZWFkaW5nL3dyaXRpbmcgVEdBIGFuZCBSQU1EQUMgcmVnaXN0ZXJzCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitUR0FfV1JJVEVfUkVHKHN0cnVjdCB0Z2FfcGFyICpwYXIsIHUzMiB2LCB1MzIgcikKK3sKKwl3cml0ZWwodiwgcGFyLT50Z2FfcmVnc19iYXNlICtyKTsKK30KKworc3RhdGljIGlubGluZSB1MzIKK1RHQV9SRUFEX1JFRyhzdHJ1Y3QgdGdhX3BhciAqcGFyLCB1MzIgcikKK3sKKwlyZXR1cm4gcmVhZGwocGFyLT50Z2FfcmVnc19iYXNlICtyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitCVDQ4NV9XUklURShzdHJ1Y3QgdGdhX3BhciAqcGFyLCB1OCB2LCB1OCByKQoreworCVRHQV9XUklURV9SRUcocGFyLCByLCBUR0FfUkFNREFDX1NFVFVQX1JFRyk7CisJVEdBX1dSSVRFX1JFRyhwYXIsIHYgfCAociA8PCA4KSwgVEdBX1JBTURBQ19SRUcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK0JUNDYzX0xPQURfQUREUihzdHJ1Y3QgdGdhX3BhciAqcGFyLCB1MTYgYSkKK3sKKwlUR0FfV1JJVEVfUkVHKHBhciwgQlQ0NjNfQUREUl9MTzw8MiwgVEdBX1JBTURBQ19TRVRVUF9SRUcpOworCVRHQV9XUklURV9SRUcocGFyLCAoQlQ0NjNfQUREUl9MTzw8MTApIHwgKGEgJiAweGZmKSwgVEdBX1JBTURBQ19SRUcpOworCVRHQV9XUklURV9SRUcocGFyLCBCVDQ2M19BRERSX0hJPDwyLCBUR0FfUkFNREFDX1NFVFVQX1JFRyk7CisJVEdBX1dSSVRFX1JFRyhwYXIsIChCVDQ2M19BRERSX0hJPDwxMCkgfCAoYSA+PiA4KSwgVEdBX1JBTURBQ19SRUcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK0JUNDYzX1dSSVRFKHN0cnVjdCB0Z2FfcGFyICpwYXIsIHUzMiBtLCB1MTYgYSwgdTggdikKK3sKKwlCVDQ2M19MT0FEX0FERFIocGFyLCBhKTsKKwlUR0FfV1JJVEVfUkVHKHBhciwgbSA8PCAyLCBUR0FfUkFNREFDX1NFVFVQX1JFRyk7CisJVEdBX1dSSVRFX1JFRyhwYXIsIG0gPDwgMTAgfCB2LCBUR0FfUkFNREFDX1JFRyk7Cit9CisKKyNlbmRpZiAvKiBUR0FGQl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3ZpZGVvL3RyaWRlbnQuaCBiL2luY2x1ZGUvdmlkZW8vdHJpZGVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwMGJlMjUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3ZpZGVvL3RyaWRlbnQuaApAQCAtMCwwICsxLDE3NSBAQAorCisjaWZuZGVmIFRSSURFTlRGQl9ERUJVRworI2RlZmluZSBUUklERU5URkJfREVCVUcgMAorI2VuZGlmCisKKyNpZiBUUklERU5URkJfREVCVUcKKyNkZWZpbmUgZGVidWcoZixhLi4uKQlwcmludGsoIiVzOiIgZiwgIF9fRlVOQ1RJT05fXyAsICMjIGEpO21kZWxheSgxMDAwKTsKKyNlbHNlCisjZGVmaW5lIGRlYnVnKGYsYS4uLikKKyNlbmRpZgorCisjZGVmaW5lIG91dHB1dChmLCBhLi4uKSBwcl9pbmZvKCJ0cmlkZW50ZmI6ICIgZiwgIyMgYSkKKworI2RlZmluZSBLYgkoMTAyNCkKKyNkZWZpbmUgTWIJKEtiKktiKQorCisvKiBQQ0kgSURTIG9mIHN1cHBvcnRlZCBjYXJkcyB0ZW1wb3JhcmlseSBoZXJlICovCisKKyNkZWZpbmUgQ1lCRVI5MzIwCTB4OTMyMAorI2RlZmluZSBDWUJFUjkzODgJMHg5Mzg4CisjZGVmaW5lIENZQkVSOTM4MgkweDkzODIJCS8qIHRoZSByZWFsIFBDSSBpZCBmb3IgdGhpcyBpcyA5NjYwICovCisjZGVmaW5lIENZQkVSOTM4NQkweDkzODUJCS8qIGRpdHRvICovCQkKKyNkZWZpbmUgQ1lCRVI5Mzk3CTB4OTM5NworI2RlZmluZSBDWUJFUjkzOTdEVkQJMHg5MzlBCisjZGVmaW5lIENZQkVSOTUyMAkweDk1MjAKKyNkZWZpbmUgQ1lCRVI5NTI1RFZECTB4OTUyNQorI2RlZmluZSBUR1VJOTY2MAkweDk2NjAKKyNkZWZpbmUgSU1BR0U5NzUJMHg5NzUwCisjZGVmaW5lIElNQUdFOTg1CTB4OTg1MAorI2RlZmluZSBCTEFERTNECQkweDk4ODAKKyNkZWZpbmUgQ1lCRVJCTEFERUU0CTB4OTU0MAorI2RlZmluZSBDWUJFUkJMQURFaTcJMHg4NDAwCisjZGVmaW5lIENZQkVSQkxBREVpN0QJMHg4NDIwCisjZGVmaW5lIENZQkVSQkxBREVpMQkweDg1MDAKKyNkZWZpbmUgQ1lCRVJCTEFERWkxRAkweDg1MjAKKyNkZWZpbmUgQ1lCRVJCTEFERUFpMQkweDg2MDAKKyNkZWZpbmUgQ1lCRVJCTEFERUFpMUQJMHg4NjIwCisjZGVmaW5lIENZQkVSQkxBREVYUEFpMSAweDg4MjAKKyNkZWZpbmUgQ1lCRVJCTEFERVhQbTggIDB4OTkxMAorI2RlZmluZSBDWUJFUkJMQURFWFBtMTYgMHg5OTMwCisKKy8qIGFjY2VsZXJhdGlvbiBmYW1pbGllcyAqLworI2RlZmluZSBJTUFHRQkwCisjZGVmaW5lIEJMQURFCTEKKyNkZWZpbmUgWFAJMgorCisjZGVmaW5lIGlzX2ltYWdlKGlkKQkKKyNkZWZpbmUgaXNfeHAoaWQpCSgoaWQgPT0gQ1lCRVJCTEFERVhQQWkxKSB8fFwKKwkJCSAoaWQgPT0gQ1lCRVJCTEFERVhQbTgpIHx8XAorCQkJIChpZCA9PSBDWUJFUkJMQURFWFBtMTYpKSAKKworI2RlZmluZSBpc19ibGFkZShpZCkJKChpZCA9PSBCTEFERTNEKSB8fFwKKwkJCSAoaWQgPT0gQ1lCRVJCTEFERUU0KSB8fFwKKwkJCSAoaWQgPT0gQ1lCRVJCTEFERWk3KSB8fFwKKwkJCSAoaWQgPT0gQ1lCRVJCTEFERWk3RCkgfHxcCisJCQkgKGlkID09IENZQkVSQkxBREVpMSkgfHxcCisJCQkgKGlkID09IENZQkVSQkxBREVpMUQpIHx8XAorCQkJIChpZCA9PQlDWUJFUkJMQURFQWkxKSB8fFwKKwkJCSAoaWQgPT0JQ1lCRVJCTEFERUFpMUQpKQorCisvKiB0aGVzZSBkZWZpbmVzIGFyZSBmb3IgJ2xjZCcgdmFyaWFibGUgKi8KKyNkZWZpbmUgTENEX1NUUkVUQ0gJMAorI2RlZmluZSBMQ0RfQ0VOVEVSCTEKKyNkZWZpbmUgTENEX0JJT1MJMgorCisvKiBkaXNwbGF5IHR5cGVzICovCisjZGVmaW5lIERJU1BMQVlfQ1JUCTAKKyNkZWZpbmUgRElTUExBWV9GUAkxCisKKyNkZWZpbmUgZmxhdHBhbmVsIChkaXNwbGF5dHlwZSA9PSBESVNQTEFZX0ZQKQorCisvKiBHZW5lcmFsIFJlZ2lzdGVycyAqLworI2RlZmluZSBTUFIJMHgxRgkJLyogU29mdHdhcmUgUHJvZ3JhbW1pbmcgUmVnaXN0ZXIgKHZpZGVvcmFtKSAqLworCisvKiAzQzQgKi8KKyNkZWZpbmUgUmV2aXNpb25JRCAweDA5CisjZGVmaW5lIE9sZE9yTmV3IDB4MEIJCisjZGVmaW5lIENvbmZQb3J0MSAweDBDCisjZGVmaW5lIENvbmZQb3J0MiAweDBDCisjZGVmaW5lIE5ld01vZGUyIDB4MEQKKyNkZWZpbmUgTmV3TW9kZTEgMHgwRQorI2RlZmluZSBQcm90ZWN0aW9uIDB4MTEKKyNkZWZpbmUgTUNMS0xvdyAweDE2CisjZGVmaW5lIE1DTEtIaWdoIDB4MTcKKyNkZWZpbmUgQ2xvY2tMb3cgMHgxOAorI2RlZmluZSBDbG9ja0hpZ2ggMHgxOQorI2RlZmluZSBTU2V0dXAgMHgyMAorI2RlZmluZSBTS2V5IDB4MzcKKyNkZWZpbmUgU1BLZXkgMHg1NworCisvKiAweDN4NCAqLworI2RlZmluZSBDUlRIVG90YWwJMHgwMAorI2RlZmluZSBDUlRIRGlzcEVuZAkweDAxCisjZGVmaW5lIENSVEhCbGFua1N0YXJ0CTB4MDIKKyNkZWZpbmUgQ1JUSEJsYW5rRW5kCTB4MDMKKyNkZWZpbmUgQ1JUSFN5bmNTdGFydAkweDA0CisjZGVmaW5lIENSVEhTeW5jRW5kCTB4MDUKKworI2RlZmluZSBDUlRWVG90YWwJMHgwNgorI2RlZmluZSBDUlRWRGlzcEVuZAkweDEyCisjZGVmaW5lIENSVFZCbGFua1N0YXJ0CTB4MTUKKyNkZWZpbmUgQ1JUVkJsYW5rRW5kCTB4MTYKKyNkZWZpbmUgQ1JUVlN5bmNTdGFydAkweDEwCisjZGVmaW5lIENSVFZTeW5jRW5kCTB4MTEKKworI2RlZmluZSBDUlRPdmVyZmxvdwkweDA3CisjZGVmaW5lIENSVFBSb3dTY2FuCTB4MDgKKyNkZWZpbmUgQ1JUTWF4U2NhbkxpbmUJMHgwOQorI2RlZmluZSBDUlRNb2RlQ29udHJvbAkweDE3CisjZGVmaW5lIENSVExpbmVDb21wYXJlCTB4MTgKKworLyogM3g0ICovCisjZGVmaW5lIFN0YXJ0QWRkckhpZ2ggMHgwQworI2RlZmluZSBTdGFydEFkZHJMb3cgMHgwRAorI2RlZmluZSBPZmZzZXQgMHgxMworI2RlZmluZSBVbmRlcmxpbmUgMHgxNAorI2RlZmluZSBDUlRDTW9kZSAweDE3CisjZGVmaW5lIENSVENNb2R1bGVUZXN0IDB4MUUKKyNkZWZpbmUgRklGT0NvbnRyb2wgMHgyMAorI2RlZmluZSBMaW5lYXJBZGRSZWcgMHgyMQorI2RlZmluZSBEUkFNVGltaW5nIDB4MjMKKyNkZWZpbmUgTmV3MzIgMHgyMworI2RlZmluZSBSQU1EQUNUaW1pbmcgMHgyNQorI2RlZmluZSBDUlRIaU9yZCAweDI3CisjZGVmaW5lIEFkZENvbFJlZyAweDI5CisjZGVmaW5lIEludGVyZmFjZVNlbCAweDJBCisjZGVmaW5lIEhvcml6T3ZlcmZsb3cgMHgyQgorI2RlZmluZSBHRVRlc3QgMHgyRAorI2RlZmluZSBQZXJmb3JtYW5jZSAweDJGCisjZGVmaW5lIEdyYXBoRW5nUmVnIDB4MzYKKyNkZWZpbmUgSTJDIDB4MzcKKyNkZWZpbmUgUGl4ZWxCdXNSZWcgMHgzOAorI2RlZmluZSBQQ0lSZWcgMHgzOQorI2RlZmluZSBEUkFNQ29udHJvbCAweDNBCisjZGVmaW5lIE1pc2NDb250UmVnIDB4M0MKKyNkZWZpbmUgQ3Vyc29yWExvdyAweDQwCisjZGVmaW5lIEN1cnNvclhIaWdoIDB4NDEKKyNkZWZpbmUgQ3Vyc29yWUxvdyAweDQyCisjZGVmaW5lIEN1cnNvcllIaWdoIDB4NDMKKyNkZWZpbmUgQ3Vyc29yTG9jTG93IDB4NDQKKyNkZWZpbmUgQ3Vyc29yTG9jSGlnaCAweDQ1CisjZGVmaW5lIEN1cnNvclhPZmZzZXQgMHg0NgorI2RlZmluZSBDdXJzb3JZT2Zmc2V0IDB4NDcKKyNkZWZpbmUgQ3Vyc29yRkcxIDB4NDgKKyNkZWZpbmUgQ3Vyc29yRkcyIDB4NDkKKyNkZWZpbmUgQ3Vyc29yRkczIDB4NEEKKyNkZWZpbmUgQ3Vyc29yRkc0IDB4NEIKKyNkZWZpbmUgQ3Vyc29yQkcxIDB4NEMKKyNkZWZpbmUgQ3Vyc29yQkcyIDB4NEQKKyNkZWZpbmUgQ3Vyc29yQkczIDB4NEUKKyNkZWZpbmUgQ3Vyc29yQkc0IDB4NEYKKyNkZWZpbmUgQ3Vyc29yQ29udHJvbCAweDUwCisjZGVmaW5lIFBDSVJldHJ5IDB4NTUKKyNkZWZpbmUgUHJlRW5kQ29udHJvbCAweDU2CisjZGVmaW5lIFByZUVuZEZldGNoIDB4NTcKKyNkZWZpbmUgUENJTWFzdGVyIDB4NjAKKyNkZWZpbmUgRW5oYW5jZW1lbnQwIDB4NjIKKyNkZWZpbmUgTmV3RURPIDB4NjQKKyNkZWZpbmUgVFZpbnRlcmZhY2UgMHhDMAorI2RlZmluZSBUVk1vZGUgMHhDMQorI2RlZmluZSBDbG9ja0NvbnRyb2wgMHhDRgorCisKKy8qIDNDRSAqLworI2RlZmluZSBNaXNjRXh0RnVuYyAweDBGCisjZGVmaW5lIFBvd2VyU3RhdHVzIDB4MjMKKyNkZWZpbmUgTWlzY0ludENvbnRSZWcgMHgyRgorI2RlZmluZSBDeWJlckNvbnRyb2wgMHgzMAorI2RlZmluZSBDeWJlckVuaGFuY2UgMHgzMQorI2RlZmluZSBGUENvbmZpZyAgICAgMHgzMworI2RlZmluZSBWZXJ0U3RyZXRjaCAgMHg1MgorI2RlZmluZSBIb3JTdHJldGNoICAgMHg1MworI2RlZmluZSBCaW9zTW9kZSAgICAgMHg1YworI2RlZmluZSBCaW9zUmVnICAgICAgMHg1ZAorCmRpZmYgLS1naXQgYS9pbmNsdWRlL3ZpZGVvL3R4MzkxMi5oIGIvaW5jbHVkZS92aWRlby90eDM5MTIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjZkMDA2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS92aWRlby90eDM5MTIuaApAQCAtMCwwICsxLDYyIEBACisvKgorICogbGludXgvaW5jbHVkZS92aWRlby90eDM5MTIuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMSBTdGV2ZW4gSGlsbCAoc2poaWxsQHJlYWxpdHlkaWx1dGVkLmNvbSkKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBJbmNsdWRlcyBmb3IgVE1QUjM5MTIvMDUgYW5kIFBSMzE3MDAgTENEIGNvbnRyb2xsZXIgcmVnaXN0ZXJzCisgKi8KKyNpbmNsdWRlIDxhc20vdHgzOTEyLmg+CisKKyNkZWZpbmUgVmlkQ3RybDEgICAgICAgIFJFR19BVCgweDAyOCkKKyNkZWZpbmUgVmlkQ3RybDIgICAgICAgIFJFR19BVCgweDAyQykKKyNkZWZpbmUgVmlkQ3RybDMgICAgICAgIFJFR19BVCgweDAzMCkKKyNkZWZpbmUgVmlkQ3RybDQgICAgICAgIFJFR19BVCgweDAzNCkKKyNkZWZpbmUgVmlkQ3RybDUgICAgICAgIFJFR19BVCgweDAzOCkKKyNkZWZpbmUgVmlkQ3RybDYgICAgICAgIFJFR19BVCgweDAzQykKKyNkZWZpbmUgVmlkQ3RybDcgICAgICAgIFJFR19BVCgweDA0MCkKKyNkZWZpbmUgVmlkQ3RybDggICAgICAgIFJFR19BVCgweDA0NCkKKyNkZWZpbmUgVmlkQ3RybDkgICAgICAgIFJFR19BVCgweDA0OCkKKyNkZWZpbmUgVmlkQ3RybDEwICAgICAgIFJFR19BVCgweDA0QykKKyNkZWZpbmUgVmlkQ3RybDExICAgICAgIFJFR19BVCgweDA1MCkKKyNkZWZpbmUgVmlkQ3RybDEyICAgICAgIFJFR19BVCgweDA1NCkKKyNkZWZpbmUgVmlkQ3RybDEzICAgICAgIFJFR19BVCgweDA1OCkKKyNkZWZpbmUgVmlkQ3RybDE0ICAgICAgIFJFR19BVCgweDA1QykKKworLyogVmlkZW8gQ29udHJvbCAxIFJlZ2lzdGVyICovCisjZGVmaW5lIExJTkVDTlQgICAgICAgICAweGZmYzAwMDAwCisjZGVmaW5lIExJTkVDTlRfU0hJRlQgICAyMgorI2RlZmluZSBMT0FERExZICAgICAgICAgQklUKDIxKQorI2RlZmluZSBCQVVEVkFMICAgICAgICAgKEJJVCgyMCkgfCBCSVQoMTkpIHwgQklUKDE4KSB8IEJJVCgxNykgfCBCSVQoMTYpKQorI2RlZmluZSBCQVVEVkFMX1NISUZUICAgMTYKKyNkZWZpbmUgVklERE9ORVZBTCAgICAgIChCSVQoMTUpIHwgQklUKDE0KSB8IEJJVCgxMykgfCBCSVQoMTIpIHwgQklUKDExKSB8IEJJVCgxMCkgfCBCSVQoOSkpCisjZGVmaW5lIFZJRERPTkVWQUxfU0hJRlQgIDkKKyNkZWZpbmUgRU5GUkVFWkVGUkFNRSAgIEJJVCg4KQorI2RlZmluZSBUWDM5MTJfVklEQ1RSTDFfQklUU0VMX01BU0sJMHgwMDAwMDBjMAorI2RlZmluZSBUWDM5MTJfVklEQ1RSTDFfMkJJVF9HUkFZCTB4MDAwMDAwNDAKKyNkZWZpbmUgVFgzOTEyX1ZJRENUUkwxXzRCSVRfR1JBWQkweDAwMDAwMDgwCisjZGVmaW5lIFRYMzkxMl9WSURDVFJMMV84QklUX0NPTE9SCTB4MDAwMDAwYzAKKyNkZWZpbmUgQklUU0VMX1NISUZUICAgIDYKKyNkZWZpbmUgRElTUFNQTElUICAgICAgIEJJVCg1KQorI2RlZmluZSBESVNQOCAgICAgICAgICAgQklUKDQpCisjZGVmaW5lIERGTU9ERSAgICAgICAgICBCSVQoMykKKyNkZWZpbmUgSU5WVklEICAgICAgICAgIEJJVCgyKQorI2RlZmluZSBESVNQT04gICAgICAgICAgQklUKDEpCisjZGVmaW5lIEVOVklEICAgICAgICAgICBCSVQoMCkKKworLyogVmlkZW8gQ29udHJvbCAyIFJlZ2lzdGVyICovCisjZGVmaW5lIFZJRFJBVEVfTUFTSyAgICAweGZmYzAwMDAwCisjZGVmaW5lIFZJRFJBVEVfU0hJRlQgICAyMgorI2RlZmluZSBIT1JaVkFMX01BU0sgICAgMHgwMDFmZjAwMAorI2RlZmluZSBIT1JaVkFMX1NISUZUICAgMTIKKyNkZWZpbmUgTElORVZBTF9NQVNLICAgIDB4MDAwMDAxZmYKKworLyogVmlkZW8gQ29udHJvbCAzIFJlZ2lzdGVyICovCisjZGVmaW5lIFRYMzkxMl9WSURDVFJMM19WSURCQU5LX01BU0sgICAgMHhmZmYwMDAwMAorI2RlZmluZSBUWDM5MTJfVklEQ1RSTDNfVklEQkFTRUhJX01BU0sgIDB4MDAwZmZmZjAKKworLyogVmlkZW8gQ29udHJvbCA0IFJlZ2lzdGVyICovCisjZGVmaW5lIFRYMzkxMl9WSURDVFJMNF9WSURCQVNFTE9fTUFTSyAgMHgwMDBmZmZmMApkaWZmIC0tZ2l0IGEvaW5jbHVkZS92aWRlby92Z2EuaCBiL2luY2x1ZGUvdmlkZW8vdmdhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzAwZDZjOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvdmlkZW8vdmdhLmgKQEAgLTAsMCArMSw0ODIgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL3ZpZGVvL3ZnYS5oIC0tIHN0YW5kYXJkIFZHQSBjaGlwc2V0IGludGVyYWN0aW9uCisgKgorICogQ29weXJpZ2h0IDE5OTkgSmVmZiBHYXJ6aWsgPGpnYXJ6aWtAcG9ib3guY29tPgorICogCisgKiBDb3B5cmlnaHQgaGlzdG9yeSBmcm9tIHZnYTE2ZmIuYzoKKyAqCUNvcHlyaWdodCAxOTk5IEJlbiBQZmFmZiBhbmQgUGV0ciBWYW5kcm92ZWMKKyAqCUJhc2VkIG9uIFZHQSBpbmZvIGF0IGh0dHA6Ly93d3cuZ29vZG5ldC5jb20vfnRpbmFyYS9GcmVlVkdBL2hvbWUuaHRtCisgKglCYXNlZCBvbiBWRVNBIGZyYW1lYnVmZmVyIChjKSAxOTk4IEdlcmQgS25vcnIKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzCisgKiBhcmNoaXZlIGZvciBtb3JlIGRldGFpbHMuICAKKyAqCisgKi8KKworI2lmbmRlZiBfX2xpbnV4X3ZpZGVvX3ZnYV9oX18KKyNkZWZpbmUgX19saW51eF92aWRlb192Z2FfaF9fCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2lmbmRlZiBDT05GSUdfQU1JR0EKKyNpbmNsdWRlIDxhc20vdmdhLmg+CisjZWxzZQorLyoKKyAqIEZJWE1FCisgKiBVZ2gsIHdlIGRvbid0IGhhdmUgUENJIHNwYWNlLCBzbyBtYXAgcmVhZGIoKSBhbmQgZnJpZW5kcyB0byB1c2UgWm9ycm8gc3BhY2UKKyAqIGZvciBNTUlPIGFjY2Vzc2VzLiBUaGlzIHNob3VsZCBtYWtlIGNpcnJ1c2ZiIHdvcmsgYWdhaW4gb24gQW1pZ2EKKyAqLworI3VuZGVmIGluYl9wCisjdW5kZWYgaW53X3AKKyN1bmRlZiBvdXRiX3AKKyN1bmRlZiBvdXR3CisjdW5kZWYgcmVhZGIKKyN1bmRlZiB3cml0ZWIKKyN1bmRlZiB3cml0ZXcKKyNkZWZpbmUgaW5iX3AocG9ydCkJMAorI2RlZmluZSBpbndfcChwb3J0KQkwCisjZGVmaW5lIG91dGJfcChwb3J0LCB2YWwpCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgb3V0dyhwb3J0LCB2YWwpCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHJlYWRiCQl6X3JlYWRiCisjZGVmaW5lIHdyaXRlYgkJel93cml0ZWIKKyNkZWZpbmUgd3JpdGV3CQl6X3dyaXRldworI2VuZGlmCisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorCisKKy8qIFNvbWUgb2YgdGhlIGNvZGUgYmVsb3cgaXMgdGFrZW4gZnJvbSBTVkdBbGliLiAgVGhlIG9yaWdpbmFsLAorICAgdW5tb2RpZmllZCBjb3B5cmlnaHQgbm90aWNlIGZvciB0aGF0IGNvZGUgaXMgYmVsb3cuICovCisvKiBWR0FsaWIgdmVyc2lvbiAxLjIgLSAoYykgMTk5MyBUb21teSBGcmFuZHNlbiAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAgICovCisvKiBtb2RpZnkgaXQgd2l0aG91dCBhbnkgcmVzdHJpY3Rpb25zLiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgKi8KKy8qIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCB3aXRob3V0IGFueSB3YXJyYW50eS4gICAqLworCisvKiBNdWx0aS1jaGlwc2V0IHN1cHBvcnQgQ29weXJpZ2h0IDE5OTMgSGFybSBIYW5lbWFheWVyICovCisvKiBwYXJ0aWFsbHkgY29weXJpZ2h0ZWQgKEMpIDE5OTMgYnkgSGFydG11dCBTY2hpcm1lciAqLworCisvKiBWR0EgZGF0YSByZWdpc3RlciBwb3J0cyAqLworI2RlZmluZSBWR0FfQ1JUX0RDICAJMHgzRDUJLyogQ1JUIENvbnRyb2xsZXIgRGF0YSBSZWdpc3RlciAtIGNvbG9yIGVtdWxhdGlvbiAqLworI2RlZmluZSBWR0FfQ1JUX0RNICAJMHgzQjUJLyogQ1JUIENvbnRyb2xsZXIgRGF0YSBSZWdpc3RlciAtIG1vbm8gZW11bGF0aW9uICovCisjZGVmaW5lIFZHQV9BVFRfUiAgIAkweDNDMQkvKiBBdHRyaWJ1dGUgQ29udHJvbGxlciBEYXRhIFJlYWQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVkdBX0FUVF9XICAgCTB4M0MwCS8qIEF0dHJpYnV0ZSBDb250cm9sbGVyIERhdGEgV3JpdGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVkdBX0dGWF9EICAgCTB4M0NGCS8qIEdyYXBoaWNzIENvbnRyb2xsZXIgRGF0YSBSZWdpc3RlciAqLworI2RlZmluZSBWR0FfU0VRX0QgICAJMHgzQzUJLyogU2VxdWVuY2VyIERhdGEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVkdBX01JU19SICAgCTB4M0NDCS8qIE1pc2MgT3V0cHV0IFJlYWQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVkdBX01JU19XICAgCTB4M0MyCS8qIE1pc2MgT3V0cHV0IFdyaXRlIFJlZ2lzdGVyICovCisjZGVmaW5lIFZHQV9GVENfUgkweDNDQQkvKiBGZWF0dXJlIENvbnRyb2wgUmVhZCBSZWdpc3RlciAqLworI2RlZmluZSBWR0FfSVMxX1JDICAJMHgzREEJLyogSW5wdXQgU3RhdHVzIFJlZ2lzdGVyIDEgLSBjb2xvciBlbXVsYXRpb24gKi8KKyNkZWZpbmUgVkdBX0lTMV9STSAgCTB4M0JBCS8qIElucHV0IFN0YXR1cyBSZWdpc3RlciAxIC0gbW9ubyBlbXVsYXRpb24gKi8KKyNkZWZpbmUgVkdBX1BFTF9EICAgCTB4M0M5CS8qIFBFTCBEYXRhIFJlZ2lzdGVyICovCisjZGVmaW5lIFZHQV9QRUxfTVNLIAkweDNDNgkvKiBQRUwgbWFzayByZWdpc3RlciAqLworCisvKiBFR0Etc3BlY2lmaWMgcmVnaXN0ZXJzICovCisjZGVmaW5lIEVHQV9HRlhfRTAJMHgzQ0MJLyogR3JhcGhpY3MgZW5hYmxlIHByb2Nlc3NvciAwICovCisjZGVmaW5lIEVHQV9HRlhfRTEJMHgzQ0EJLyogR3JhcGhpY3MgZW5hYmxlIHByb2Nlc3NvciAxICovCisKKy8qIFZHQSBpbmRleCByZWdpc3RlciBwb3J0cyAqLworI2RlZmluZSBWR0FfQ1JUX0lDICAJMHgzRDQJLyogQ1JUIENvbnRyb2xsZXIgSW5kZXggLSBjb2xvciBlbXVsYXRpb24gKi8KKyNkZWZpbmUgVkdBX0NSVF9JTSAgCTB4M0I0CS8qIENSVCBDb250cm9sbGVyIEluZGV4IC0gbW9ubyBlbXVsYXRpb24gKi8KKyNkZWZpbmUgVkdBX0FUVF9JVyAgCTB4M0MwCS8qIEF0dHJpYnV0ZSBDb250cm9sbGVyIEluZGV4ICYgRGF0YSBXcml0ZSBSZWdpc3RlciAqLworI2RlZmluZSBWR0FfR0ZYX0kgICAJMHgzQ0UJLyogR3JhcGhpY3MgQ29udHJvbGxlciBJbmRleCAqLworI2RlZmluZSBWR0FfU0VRX0kgICAJMHgzQzQJLyogU2VxdWVuY2VyIEluZGV4ICovCisjZGVmaW5lIFZHQV9QRUxfSVcgIAkweDNDOAkvKiBQRUwgV3JpdGUgSW5kZXggKi8KKyNkZWZpbmUgVkdBX1BFTF9JUiAgCTB4M0M3CS8qIFBFTCBSZWFkIEluZGV4ICovCisKKy8qIHN0YW5kYXJkIFZHQSBpbmRleGVzIG1heCBjb3VudHMgKi8KKyNkZWZpbmUgVkdBX0NSVF9DICAgCTB4MTkJLyogTnVtYmVyIG9mIENSVCBDb250cm9sbGVyIFJlZ2lzdGVycyAqLworI2RlZmluZSBWR0FfQVRUX0MgICAJMHgxNQkvKiBOdW1iZXIgb2YgQXR0cmlidXRlIENvbnRyb2xsZXIgUmVnaXN0ZXJzICovCisjZGVmaW5lIFZHQV9HRlhfQyAgIAkweDA5CS8qIE51bWJlciBvZiBHcmFwaGljcyBDb250cm9sbGVyIFJlZ2lzdGVycyAqLworI2RlZmluZSBWR0FfU0VRX0MgICAJMHgwNQkvKiBOdW1iZXIgb2YgU2VxdWVuY2VyIFJlZ2lzdGVycyAqLworI2RlZmluZSBWR0FfTUlTX0MgICAJMHgwMQkvKiBOdW1iZXIgb2YgTWlzYyBPdXRwdXQgUmVnaXN0ZXIgKi8KKworLyogVkdBIG1pc2MgcmVnaXN0ZXIgYml0IG1hc2tzICovCisjZGVmaW5lIFZHQV9NSVNfQ09MT1IJCTB4MDEKKyNkZWZpbmUgVkdBX01JU19FTkJfTUVNX0FDQ0VTUwkweDAyCisjZGVmaW5lIFZHQV9NSVNfRENMS18yODMyMl83MjAJMHgwNAorI2RlZmluZSBWR0FfTUlTX0VOQl9QTExfTE9BRAkoMHgwNCB8IDB4MDgpCisjZGVmaW5lIFZHQV9NSVNfU0VMX0hJR0hfUEFHRQkweDIwCisKKy8qIFZHQSBDUlQgY29udHJvbGxlciByZWdpc3RlciBpbmRpY2VzICovCisjZGVmaW5lIFZHQV9DUlRDX0hfVE9UQUwJMAorI2RlZmluZSBWR0FfQ1JUQ19IX0RJU1AJCTEKKyNkZWZpbmUgVkdBX0NSVENfSF9CTEFOS19TVEFSVAkyCisjZGVmaW5lIFZHQV9DUlRDX0hfQkxBTktfRU5ECTMKKyNkZWZpbmUgVkdBX0NSVENfSF9TWU5DX1NUQVJUCTQKKyNkZWZpbmUgVkdBX0NSVENfSF9TWU5DX0VORAk1CisjZGVmaW5lIFZHQV9DUlRDX1ZfVE9UQUwJNgorI2RlZmluZSBWR0FfQ1JUQ19PVkVSRkxPVwk3CisjZGVmaW5lIFZHQV9DUlRDX1BSRVNFVF9ST1cJOAorI2RlZmluZSBWR0FfQ1JUQ19NQVhfU0NBTgk5CisjZGVmaW5lIFZHQV9DUlRDX0NVUlNPUl9TVEFSVAkweDBBCisjZGVmaW5lIFZHQV9DUlRDX0NVUlNPUl9FTkQJMHgwQgorI2RlZmluZSBWR0FfQ1JUQ19TVEFSVF9ISQkweDBDCisjZGVmaW5lIFZHQV9DUlRDX1NUQVJUX0xPCTB4MEQKKyNkZWZpbmUgVkdBX0NSVENfQ1VSU09SX0hJCTB4MEUKKyNkZWZpbmUgVkdBX0NSVENfQ1VSU09SX0xPCTB4MEYKKyNkZWZpbmUgVkdBX0NSVENfVl9TWU5DX1NUQVJUCTB4MTAKKyNkZWZpbmUgVkdBX0NSVENfVl9TWU5DX0VORAkweDExCisjZGVmaW5lIFZHQV9DUlRDX1ZfRElTUF9FTkQJMHgxMgorI2RlZmluZSBWR0FfQ1JUQ19PRkZTRVQJCTB4MTMKKyNkZWZpbmUgVkdBX0NSVENfVU5ERVJMSU5FCTB4MTQKKyNkZWZpbmUgVkdBX0NSVENfVl9CTEFOS19TVEFSVAkweDE1CisjZGVmaW5lIFZHQV9DUlRDX1ZfQkxBTktfRU5ECTB4MTYKKyNkZWZpbmUgVkdBX0NSVENfTU9ERQkJMHgxNworI2RlZmluZSBWR0FfQ1JUQ19MSU5FX0NPTVBBUkUJMHgxOAorI2RlZmluZSBWR0FfQ1JUQ19SRUdTCQlWR0FfQ1JUX0MKKworLyogVkdBIENSVCBjb250cm9sbGVyIGJpdCBtYXNrcyAqLworI2RlZmluZSBWR0FfQ1IxMV9MT0NLX0NSMF9DUjcJMHg4MCAvKiBsb2NrIHdyaXRlcyB0byBDUjAgLSBDUjcgKi8KKyNkZWZpbmUgVkdBX0NSMTdfSF9WX1NJR05BTFNfRU5BQkxFRCAweDgwCisKKy8qIFZHQSBhdHRyaWJ1dGUgY29udHJvbGxlciByZWdpc3RlciBpbmRpY2VzICovCisjZGVmaW5lIFZHQV9BVENfUEFMRVRURTAJMHgwMAorI2RlZmluZSBWR0FfQVRDX1BBTEVUVEUxCTB4MDEKKyNkZWZpbmUgVkdBX0FUQ19QQUxFVFRFMgkweDAyCisjZGVmaW5lIFZHQV9BVENfUEFMRVRURTMJMHgwMworI2RlZmluZSBWR0FfQVRDX1BBTEVUVEU0CTB4MDQKKyNkZWZpbmUgVkdBX0FUQ19QQUxFVFRFNQkweDA1CisjZGVmaW5lIFZHQV9BVENfUEFMRVRURTYJMHgwNgorI2RlZmluZSBWR0FfQVRDX1BBTEVUVEU3CTB4MDcKKyNkZWZpbmUgVkdBX0FUQ19QQUxFVFRFOAkweDA4CisjZGVmaW5lIFZHQV9BVENfUEFMRVRURTkJMHgwOQorI2RlZmluZSBWR0FfQVRDX1BBTEVUVEVBCTB4MEEKKyNkZWZpbmUgVkdBX0FUQ19QQUxFVFRFQgkweDBCCisjZGVmaW5lIFZHQV9BVENfUEFMRVRURUMJMHgwQworI2RlZmluZSBWR0FfQVRDX1BBTEVUVEVECTB4MEQKKyNkZWZpbmUgVkdBX0FUQ19QQUxFVFRFRQkweDBFCisjZGVmaW5lIFZHQV9BVENfUEFMRVRURUYJMHgwRgorI2RlZmluZSBWR0FfQVRDX01PREUJCTB4MTAKKyNkZWZpbmUgVkdBX0FUQ19PVkVSU0NBTgkweDExCisjZGVmaW5lIFZHQV9BVENfUExBTkVfRU5BQkxFCTB4MTIKKyNkZWZpbmUgVkdBX0FUQ19QRUwJCTB4MTMKKyNkZWZpbmUgVkdBX0FUQ19DT0xPUl9QQUdFCTB4MTQKKworI2RlZmluZSBWR0FfQVJfRU5BQkxFX0RJU1BMQVkJMHgyMAorCisvKiBWR0Egc2VxdWVuY2VyIHJlZ2lzdGVyIGluZGljZXMgKi8KKyNkZWZpbmUgVkdBX1NFUV9SRVNFVAkJMHgwMAorI2RlZmluZSBWR0FfU0VRX0NMT0NLX01PREUJMHgwMQorI2RlZmluZSBWR0FfU0VRX1BMQU5FX1dSSVRFCTB4MDIKKyNkZWZpbmUgVkdBX1NFUV9DSEFSQUNURVJfTUFQCTB4MDMKKyNkZWZpbmUgVkdBX1NFUV9NRU1PUllfTU9ERQkweDA0CisKKy8qIFZHQSBzZXF1ZW5jZXIgcmVnaXN0ZXIgYml0IG1hc2tzICovCisjZGVmaW5lIFZHQV9TUjAxX0NIQVJfQ0xLXzhET1RTCTB4MDEgLyogYml0IDA6IGNoYXJhY3RlciBjbG9ja3MgOCBkb3RzIHdpZGUgYXJlIGdlbmVyYXRlZCAqLworI2RlZmluZSBWR0FfU1IwMV9TQ1JFRU5fT0ZGCTB4MjAgLyogYml0IDU6IFNjcmVlbiBpcyBvZmYgKi8KKyNkZWZpbmUgVkdBX1NSMDJfQUxMX1BMQU5FUwkweDBGIC8qIGJpdHMgMy0wOiBlbmFibGUgYWNjZXNzIHRvIGFsbCBwbGFuZXMgKi8KKyNkZWZpbmUgVkdBX1NSMDRfRVhUX01FTQkweDAyIC8qIGJpdCAxOiBhbGxvd3MgY29tcGxldGUgbWVtIGFjY2VzcyB0byAyNTZLICovCisjZGVmaW5lIFZHQV9TUjA0X1NFUV9NT0RFCTB4MDQgLyogYml0IDI6IGRpcmVjdHMgc3lzdGVtIHRvIHVzZSBhIHNlcXVlbnRpYWwgYWRkcmVzc2luZyBtb2RlICovCisjZGVmaW5lIFZHQV9TUjA0X0NITl80TQkJMHgwOCAvKiBiaXQgMzogc2VsZWN0cyBtb2R1bG8gNCBhZGRyZXNzaW5nIGZvciBDUFUgYWNjZXNzIHRvIGRpc3BsYXkgbWVtb3J5ICovCisKKy8qIFZHQSBncmFwaGljcyBjb250cm9sbGVyIHJlZ2lzdGVyIGluZGljZXMgKi8KKyNkZWZpbmUgVkdBX0dGWF9TUl9WQUxVRQkweDAwCisjZGVmaW5lIFZHQV9HRlhfU1JfRU5BQkxFCTB4MDEKKyNkZWZpbmUgVkdBX0dGWF9DT01QQVJFX1ZBTFVFCTB4MDIKKyNkZWZpbmUgVkdBX0dGWF9EQVRBX1JPVEFURQkweDAzCisjZGVmaW5lIFZHQV9HRlhfUExBTkVfUkVBRAkweDA0CisjZGVmaW5lIFZHQV9HRlhfTU9ERQkJMHgwNQorI2RlZmluZSBWR0FfR0ZYX01JU0MJCTB4MDYKKyNkZWZpbmUgVkdBX0dGWF9DT01QQVJFX01BU0sJMHgwNworI2RlZmluZSBWR0FfR0ZYX0JJVF9NQVNLCTB4MDgKKworLyogVkdBIGdyYXBoaWNzIGNvbnRyb2xsZXIgYml0IG1hc2tzICovCisjZGVmaW5lIFZHQV9HUjA2X0dSQVBISUNTX01PREUJMHgwMQorCisvKiBtYWNybyBmb3IgY29tcG9zaW5nIGFuIDgtYml0IFZHQSByZWdpc3RlciBpbmRleCBhbmQgdmFsdWUKKyAqIGludG8gYSBzaW5nbGUgMTYtYml0IHF1YW50aXR5ICovCisjZGVmaW5lIFZHQV9PVVQxNlZBTCh2LCByKSAgICAgICAoKCh2KSA8PCA4KSB8IChyKSkKKworLyogZGVjaWRlIHdoZXRoZXIgd2Ugc2hvdWxkIGVuYWJsZSB0aGUgZmFzdGVyIDE2LWJpdCBWR0EgcmVnaXN0ZXIgd3JpdGVzICovCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOCisjZGVmaW5lIFZHQV9PVVRXX1dSSVRFCisjZW5kaWYKKworLyogVkdBIFN0YXRlIFNhdmUgYW5kIFJlc3RvcmUgKi8KKyNkZWZpbmUgVkdBX1NBVkVfRk9OVDAgMSAgLyogc2F2ZS9yZXN0b3JlIHBsYW5lIDIgZm9udHMJICAqLworI2RlZmluZSBWR0FfU0FWRV9GT05UMSAyICAvKiBzYXZlL3Jlc3RvcmUgcGxhbmUgMyBmb250cyAgICovCisjZGVmaW5lIFZHQV9TQVZFX1RFWFQgIDQgIC8qIHNhdmUvcmVzdG9yZSBwbGFuZSAwLzEgZm9udHMgKi8KKyNkZWZpbmUgVkdBX1NBVkVfRk9OVFMgNyAgLyogc2F2ZS9yZXN0b3JlIGFsbCBmb250cwkgICovCisjZGVmaW5lIFZHQV9TQVZFX01PREUgIDggIC8qIHNhdmUvcmVzdG9yZSB2aWRlbyBtb2RlIAkgICovCisjZGVmaW5lIFZHQV9TQVZFX0NNQVAgIDE2IC8qIHNhdmUvcmVzdG9yZSBjb2xvciBtYXAvREFDICAgKi8KKworc3RydWN0IHZnYXN0YXRlIHsKKwl2b2lkIF9faW9tZW0gKnZnYWJhc2U7CS8qIG1taW8gYmFzZSwgaWYgc3VwcG9ydGVkIAkJICAgKi8KKwl1bnNpZ25lZCBsb25nIG1lbWJhc2U7CS8qIFZHQSB3aW5kb3cgYmFzZSwgMCBmb3IgZGVmYXVsdCAtIDB4QTAwMCAqLworCV9fdTMyIG1lbXNpemU7CQkvKiBWR0Egd2luZG93IHNpemUsIDAgZm9yIGRlZmF1bHQgNjRLCSAgICovCisJX191MzIgZmxhZ3M7CQkvKiB3aGF0IHN0YXRlW3NdIHRvIHNhdmUgKHNlZSBWR0FfU0FWRV8qKSAgKi8KKwlfX3UzMiBkZXB0aDsJCS8qIGN1cnJlbnQgZmIgZGVwdGgsIG5vdCBpbXBvcnRhbnQJICAgKi8KKwlfX3UzMiBudW1fYXR0cjsJCS8qIG51bWJlciBvZiBhdHQgcmVnaXN0ZXJzLCAwIGZvciBkZWZhdWx0ICAqLworCV9fdTMyIG51bV9jcnRjOwkJLyogbnVtYmVyIG9mIGNydCByZWdpc3RlcnMsIDAgZm9yIGRlZmF1bHQgICovCisJX191MzIgbnVtX2dmeDsJCS8qIG51bWJlciBvZiBnZnggcmVnaXN0ZXJzLCAwIGZvciBkZWZhdWx0ICAqLworCV9fdTMyIG51bV9zZXE7CQkvKiBudW1iZXIgb2Ygc2VxIHJlZ2lzdGVycywgMCBmb3IgZGVmYXVsdCAgKi8KKwl2b2lkICp2aWRzdGF0ZTsKK307CQorCitleHRlcm4gaW50IHNhdmVfdmdhKHN0cnVjdCB2Z2FzdGF0ZSAqc3RhdGUpOworZXh0ZXJuIGludCByZXN0b3JlX3ZnYShzdHJ1Y3Qgdmdhc3RhdGUgKnN0YXRlKTsKKworLyoKKyAqIGdlbmVyaWMgVkdBIHBvcnQgcmVhZC93cml0ZQorICovCisgCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgdmdhX2lvX3IgKHVuc2lnbmVkIHNob3J0IHBvcnQpCit7CisJcmV0dXJuIGluYl9wKHBvcnQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdmdhX2lvX3cgKHVuc2lnbmVkIHNob3J0IHBvcnQsIHVuc2lnbmVkIGNoYXIgdmFsKQoreworCW91dGJfcCh2YWwsIHBvcnQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdmdhX2lvX3dfZmFzdCAodW5zaWduZWQgc2hvcnQgcG9ydCwgdW5zaWduZWQgY2hhciByZWcsCisJCQkJICB1bnNpZ25lZCBjaGFyIHZhbCkKK3sKKwlvdXR3KFZHQV9PVVQxNlZBTCAodmFsLCByZWcpLCBwb3J0KTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIHZnYV9tbV9yICh2b2lkIF9faW9tZW0gKnJlZ2Jhc2UsIHVuc2lnbmVkIHNob3J0IHBvcnQpCit7CisJcmV0dXJuIHJlYWRiIChyZWdiYXNlICsgcG9ydCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB2Z2FfbW1fdyAodm9pZCBfX2lvbWVtICpyZWdiYXNlLCB1bnNpZ25lZCBzaG9ydCBwb3J0LCB1bnNpZ25lZCBjaGFyIHZhbCkKK3sKKwl3cml0ZWIgKHZhbCwgcmVnYmFzZSArIHBvcnQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdmdhX21tX3dfZmFzdCAodm9pZCBfX2lvbWVtICpyZWdiYXNlLCB1bnNpZ25lZCBzaG9ydCBwb3J0LAorCQkJCSAgdW5zaWduZWQgY2hhciByZWcsIHVuc2lnbmVkIGNoYXIgdmFsKQoreworCXdyaXRldyAoVkdBX09VVDE2VkFMICh2YWwsIHJlZyksIHJlZ2Jhc2UgKyBwb3J0KTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIHZnYV9yICh2b2lkIF9faW9tZW0gKnJlZ2Jhc2UsIHVuc2lnbmVkIHNob3J0IHBvcnQpCit7CisJaWYgKHJlZ2Jhc2UpCisJCXJldHVybiB2Z2FfbW1fciAocmVnYmFzZSwgcG9ydCk7CisJZWxzZQorCQlyZXR1cm4gdmdhX2lvX3IgKHBvcnQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdmdhX3cgKHZvaWQgX19pb21lbSAqcmVnYmFzZSwgdW5zaWduZWQgc2hvcnQgcG9ydCwgdW5zaWduZWQgY2hhciB2YWwpCit7CisJaWYgKHJlZ2Jhc2UpCisJCXZnYV9tbV93IChyZWdiYXNlLCBwb3J0LCB2YWwpOworCWVsc2UKKwkJdmdhX2lvX3cgKHBvcnQsIHZhbCk7Cit9CisKKworc3RhdGljIGlubGluZSB2b2lkIHZnYV93X2Zhc3QgKHZvaWQgX19pb21lbSAqcmVnYmFzZSwgdW5zaWduZWQgc2hvcnQgcG9ydCwKKwkJCSAgICAgICB1bnNpZ25lZCBjaGFyIHJlZywgdW5zaWduZWQgY2hhciB2YWwpCit7CisJaWYgKHJlZ2Jhc2UpCisJCXZnYV9tbV93X2Zhc3QgKHJlZ2Jhc2UsIHBvcnQsIHJlZywgdmFsKTsKKwllbHNlCisJCXZnYV9pb193X2Zhc3QgKHBvcnQsIHJlZywgdmFsKTsKK30KKworCisvKgorICogVkdBIENSVEMgcmVnaXN0ZXIgcmVhZC93cml0ZQorICovCisgCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgdmdhX3JjcnQgKHZvaWQgX19pb21lbSAqcmVnYmFzZSwgdW5zaWduZWQgY2hhciByZWcpCit7CisgICAgICAgIHZnYV93IChyZWdiYXNlLCBWR0FfQ1JUX0lDLCByZWcpOworICAgICAgICByZXR1cm4gdmdhX3IgKHJlZ2Jhc2UsIFZHQV9DUlRfREMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdmdhX3djcnQgKHZvaWQgX19pb21lbSAqcmVnYmFzZSwgdW5zaWduZWQgY2hhciByZWcsIHVuc2lnbmVkIGNoYXIgdmFsKQoreworI2lmZGVmIFZHQV9PVVRXX1dSSVRFCisJdmdhX3dfZmFzdCAocmVnYmFzZSwgVkdBX0NSVF9JQywgcmVnLCB2YWwpOworI2Vsc2UKKyAgICAgICAgdmdhX3cgKHJlZ2Jhc2UsIFZHQV9DUlRfSUMsIHJlZyk7CisgICAgICAgIHZnYV93IChyZWdiYXNlLCBWR0FfQ1JUX0RDLCB2YWwpOworI2VuZGlmIC8qIFZHQV9PVVRXX1dSSVRFICovCit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciB2Z2FfaW9fcmNydCAodW5zaWduZWQgY2hhciByZWcpCit7CisgICAgICAgIHZnYV9pb193IChWR0FfQ1JUX0lDLCByZWcpOworICAgICAgICByZXR1cm4gdmdhX2lvX3IgKFZHQV9DUlRfREMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdmdhX2lvX3djcnQgKHVuc2lnbmVkIGNoYXIgcmVnLCB1bnNpZ25lZCBjaGFyIHZhbCkKK3sKKyNpZmRlZiBWR0FfT1VUV19XUklURQorCXZnYV9pb193X2Zhc3QgKFZHQV9DUlRfSUMsIHJlZywgdmFsKTsKKyNlbHNlCisgICAgICAgIHZnYV9pb193IChWR0FfQ1JUX0lDLCByZWcpOworICAgICAgICB2Z2FfaW9fdyAoVkdBX0NSVF9EQywgdmFsKTsKKyNlbmRpZiAvKiBWR0FfT1VUV19XUklURSAqLworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgdmdhX21tX3JjcnQgKHZvaWQgX19pb21lbSAqcmVnYmFzZSwgdW5zaWduZWQgY2hhciByZWcpCit7CisgICAgICAgIHZnYV9tbV93IChyZWdiYXNlLCBWR0FfQ1JUX0lDLCByZWcpOworICAgICAgICByZXR1cm4gdmdhX21tX3IgKHJlZ2Jhc2UsIFZHQV9DUlRfREMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdmdhX21tX3djcnQgKHZvaWQgX19pb21lbSAqcmVnYmFzZSwgdW5zaWduZWQgY2hhciByZWcsIHVuc2lnbmVkIGNoYXIgdmFsKQoreworI2lmZGVmIFZHQV9PVVRXX1dSSVRFCisJdmdhX21tX3dfZmFzdCAocmVnYmFzZSwgVkdBX0NSVF9JQywgcmVnLCB2YWwpOworI2Vsc2UKKyAgICAgICAgdmdhX21tX3cgKHJlZ2Jhc2UsIFZHQV9DUlRfSUMsIHJlZyk7CisgICAgICAgIHZnYV9tbV93IChyZWdiYXNlLCBWR0FfQ1JUX0RDLCB2YWwpOworI2VuZGlmIC8qIFZHQV9PVVRXX1dSSVRFICovCit9CisKKworLyoKKyAqIFZHQSBzZXF1ZW5jZXIgcmVnaXN0ZXIgcmVhZC93cml0ZQorICovCisgCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgdmdhX3JzZXEgKHZvaWQgX19pb21lbSAqcmVnYmFzZSwgdW5zaWduZWQgY2hhciByZWcpCit7CisgICAgICAgIHZnYV93IChyZWdiYXNlLCBWR0FfU0VRX0ksIHJlZyk7CisgICAgICAgIHJldHVybiB2Z2FfciAocmVnYmFzZSwgVkdBX1NFUV9EKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHZnYV93c2VxICh2b2lkIF9faW9tZW0gKnJlZ2Jhc2UsIHVuc2lnbmVkIGNoYXIgcmVnLCB1bnNpZ25lZCBjaGFyIHZhbCkKK3sKKyNpZmRlZiBWR0FfT1VUV19XUklURQorCXZnYV93X2Zhc3QgKHJlZ2Jhc2UsIFZHQV9TRVFfSSwgcmVnLCB2YWwpOworI2Vsc2UKKyAgICAgICAgdmdhX3cgKHJlZ2Jhc2UsIFZHQV9TRVFfSSwgcmVnKTsKKyAgICAgICAgdmdhX3cgKHJlZ2Jhc2UsIFZHQV9TRVFfRCwgdmFsKTsKKyNlbmRpZiAvKiBWR0FfT1VUV19XUklURSAqLworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgdmdhX2lvX3JzZXEgKHVuc2lnbmVkIGNoYXIgcmVnKQoreworICAgICAgICB2Z2FfaW9fdyAoVkdBX1NFUV9JLCByZWcpOworICAgICAgICByZXR1cm4gdmdhX2lvX3IgKFZHQV9TRVFfRCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB2Z2FfaW9fd3NlcSAodW5zaWduZWQgY2hhciByZWcsIHVuc2lnbmVkIGNoYXIgdmFsKQoreworI2lmZGVmIFZHQV9PVVRXX1dSSVRFCisJdmdhX2lvX3dfZmFzdCAoVkdBX1NFUV9JLCByZWcsIHZhbCk7CisjZWxzZQorICAgICAgICB2Z2FfaW9fdyAoVkdBX1NFUV9JLCByZWcpOworICAgICAgICB2Z2FfaW9fdyAoVkdBX1NFUV9ELCB2YWwpOworI2VuZGlmIC8qIFZHQV9PVVRXX1dSSVRFICovCit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciB2Z2FfbW1fcnNlcSAodm9pZCBfX2lvbWVtICpyZWdiYXNlLCB1bnNpZ25lZCBjaGFyIHJlZykKK3sKKyAgICAgICAgdmdhX21tX3cgKHJlZ2Jhc2UsIFZHQV9TRVFfSSwgcmVnKTsKKyAgICAgICAgcmV0dXJuIHZnYV9tbV9yIChyZWdiYXNlLCBWR0FfU0VRX0QpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdmdhX21tX3dzZXEgKHZvaWQgX19pb21lbSAqcmVnYmFzZSwgdW5zaWduZWQgY2hhciByZWcsIHVuc2lnbmVkIGNoYXIgdmFsKQoreworI2lmZGVmIFZHQV9PVVRXX1dSSVRFCisJdmdhX21tX3dfZmFzdCAocmVnYmFzZSwgVkdBX1NFUV9JLCByZWcsIHZhbCk7CisjZWxzZQorICAgICAgICB2Z2FfbW1fdyAocmVnYmFzZSwgVkdBX1NFUV9JLCByZWcpOworICAgICAgICB2Z2FfbW1fdyAocmVnYmFzZSwgVkdBX1NFUV9ELCB2YWwpOworI2VuZGlmIC8qIFZHQV9PVVRXX1dSSVRFICovCit9CisKKy8qCisgKiBWR0EgZ3JhcGhpY3MgY29udHJvbGxlciByZWdpc3RlciByZWFkL3dyaXRlCisgKi8KKyAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciB2Z2FfcmdmeCAodm9pZCBfX2lvbWVtICpyZWdiYXNlLCB1bnNpZ25lZCBjaGFyIHJlZykKK3sKKyAgICAgICAgdmdhX3cgKHJlZ2Jhc2UsIFZHQV9HRlhfSSwgcmVnKTsKKyAgICAgICAgcmV0dXJuIHZnYV9yIChyZWdiYXNlLCBWR0FfR0ZYX0QpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdmdhX3dnZnggKHZvaWQgX19pb21lbSAqcmVnYmFzZSwgdW5zaWduZWQgY2hhciByZWcsIHVuc2lnbmVkIGNoYXIgdmFsKQoreworI2lmZGVmIFZHQV9PVVRXX1dSSVRFCisJdmdhX3dfZmFzdCAocmVnYmFzZSwgVkdBX0dGWF9JLCByZWcsIHZhbCk7CisjZWxzZQorICAgICAgICB2Z2FfdyAocmVnYmFzZSwgVkdBX0dGWF9JLCByZWcpOworICAgICAgICB2Z2FfdyAocmVnYmFzZSwgVkdBX0dGWF9ELCB2YWwpOworI2VuZGlmIC8qIFZHQV9PVVRXX1dSSVRFICovCit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciB2Z2FfaW9fcmdmeCAodW5zaWduZWQgY2hhciByZWcpCit7CisgICAgICAgIHZnYV9pb193IChWR0FfR0ZYX0ksIHJlZyk7CisgICAgICAgIHJldHVybiB2Z2FfaW9fciAoVkdBX0dGWF9EKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHZnYV9pb193Z2Z4ICh1bnNpZ25lZCBjaGFyIHJlZywgdW5zaWduZWQgY2hhciB2YWwpCit7CisjaWZkZWYgVkdBX09VVFdfV1JJVEUKKwl2Z2FfaW9fd19mYXN0IChWR0FfR0ZYX0ksIHJlZywgdmFsKTsKKyNlbHNlCisgICAgICAgIHZnYV9pb193IChWR0FfR0ZYX0ksIHJlZyk7CisgICAgICAgIHZnYV9pb193IChWR0FfR0ZYX0QsIHZhbCk7CisjZW5kaWYgLyogVkdBX09VVFdfV1JJVEUgKi8KK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIHZnYV9tbV9yZ2Z4ICh2b2lkIF9faW9tZW0gKnJlZ2Jhc2UsIHVuc2lnbmVkIGNoYXIgcmVnKQoreworICAgICAgICB2Z2FfbW1fdyAocmVnYmFzZSwgVkdBX0dGWF9JLCByZWcpOworICAgICAgICByZXR1cm4gdmdhX21tX3IgKHJlZ2Jhc2UsIFZHQV9HRlhfRCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB2Z2FfbW1fd2dmeCAodm9pZCBfX2lvbWVtICpyZWdiYXNlLCB1bnNpZ25lZCBjaGFyIHJlZywgdW5zaWduZWQgY2hhciB2YWwpCit7CisjaWZkZWYgVkdBX09VVFdfV1JJVEUKKwl2Z2FfbW1fd19mYXN0IChyZWdiYXNlLCBWR0FfR0ZYX0ksIHJlZywgdmFsKTsKKyNlbHNlCisgICAgICAgIHZnYV9tbV93IChyZWdiYXNlLCBWR0FfR0ZYX0ksIHJlZyk7CisgICAgICAgIHZnYV9tbV93IChyZWdiYXNlLCBWR0FfR0ZYX0QsIHZhbCk7CisjZW5kaWYgLyogVkdBX09VVFdfV1JJVEUgKi8KK30KKworCisvKgorICogVkdBIGF0dHJpYnV0ZSBjb250cm9sbGVyIHJlZ2lzdGVyIHJlYWQvd3JpdGUKKyAqLworIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIHZnYV9yYXR0ciAodm9pZCBfX2lvbWVtICpyZWdiYXNlLCB1bnNpZ25lZCBjaGFyIHJlZykKK3sKKyAgICAgICAgdmdhX3cgKHJlZ2Jhc2UsIFZHQV9BVFRfSVcsIHJlZyk7CisgICAgICAgIHJldHVybiB2Z2FfciAocmVnYmFzZSwgVkdBX0FUVF9SKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHZnYV93YXR0ciAodm9pZCBfX2lvbWVtICpyZWdiYXNlLCB1bnNpZ25lZCBjaGFyIHJlZywgdW5zaWduZWQgY2hhciB2YWwpCit7CisgICAgICAgIHZnYV93IChyZWdiYXNlLCBWR0FfQVRUX0lXLCByZWcpOworICAgICAgICB2Z2FfdyAocmVnYmFzZSwgVkdBX0FUVF9XLCB2YWwpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgdmdhX2lvX3JhdHRyICh1bnNpZ25lZCBjaGFyIHJlZykKK3sKKyAgICAgICAgdmdhX2lvX3cgKFZHQV9BVFRfSVcsIHJlZyk7CisgICAgICAgIHJldHVybiB2Z2FfaW9fciAoVkdBX0FUVF9SKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHZnYV9pb193YXR0ciAodW5zaWduZWQgY2hhciByZWcsIHVuc2lnbmVkIGNoYXIgdmFsKQoreworICAgICAgICB2Z2FfaW9fdyAoVkdBX0FUVF9JVywgcmVnKTsKKyAgICAgICAgdmdhX2lvX3cgKFZHQV9BVFRfVywgdmFsKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIHZnYV9tbV9yYXR0ciAodm9pZCBfX2lvbWVtICpyZWdiYXNlLCB1bnNpZ25lZCBjaGFyIHJlZykKK3sKKyAgICAgICAgdmdhX21tX3cgKHJlZ2Jhc2UsIFZHQV9BVFRfSVcsIHJlZyk7CisgICAgICAgIHJldHVybiB2Z2FfbW1fciAocmVnYmFzZSwgVkdBX0FUVF9SKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHZnYV9tbV93YXR0ciAodm9pZCBfX2lvbWVtICpyZWdiYXNlLCB1bnNpZ25lZCBjaGFyIHJlZywgdW5zaWduZWQgY2hhciB2YWwpCit7CisgICAgICAgIHZnYV9tbV93IChyZWdiYXNlLCBWR0FfQVRUX0lXLCByZWcpOworICAgICAgICB2Z2FfbW1fdyAocmVnYmFzZSwgVkdBX0FUVF9XLCB2YWwpOworfQorCisjZW5kaWYgLyogX19saW51eF92aWRlb192Z2FfaF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3ZpZGVvL3cxMDBmYi5oIGIvaW5jbHVkZS92aWRlby93MTAwZmIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDU0OGMyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS92aWRlby93MTAwZmIuaApAQCAtMCwwICsxLDIxIEBACisvKgorICogIFN1cHBvcnQgZm9yIHRoZSB3MTAwIGZyYW1lIGJ1ZmZlci4KKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDA0IFJpY2hhcmQgUHVyZGllCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisvKgorICogVGhpcyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIHRoZSBtYWNoaW5lIHdoaWNoIHdlIGFyZSBydW5uaW5nIG9uLgorICogSXQgaXMgc2V0IGJ5IG1hY2hpbmUgc3BlY2lmaWMgY29kZSBhbmQgdXNlZCBpbiB0aGUgcHJvYmUgcm91dGluZQorICogb2YgZHJpdmVycy92aWRlby93MTAwZmIuYworICovCisKK3N0cnVjdCB3MTAwZmJfbWFjaF9pbmZvIHsKKwl2b2lkICgqdzEwMGZiX3NzcF9zZW5kKSh1OCBhZHJzLCB1OCBkYXRhKTsKKwlpbnQgY29tYWRqOworCWludCBwaGFkYWRqOworfTsK